From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: David Cantrell To: git-commits@fedoraproject.org Subject: [rpms/ckermit] epel10: Remove the 'rpmbuild -bp' directory from git, come on Date: Tue, 15 Sep 2026 18:31:21 GMT Message-ID: <178949708177.1.13748004616710787768.rpms-ckermit-3abe589b4ed4@fedoraproject.org> List-ID: X-Git-Repo: rpms/ckermit X-Git-Branch: epel10 X-Git-Rev: 3abe589b4ed4c354ea3bfcf775796b18004cd08b QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvY2tlcm1pdApCcmFu Y2ggOiBlcGVsMTAKQ29tbWl0IDogM2FiZTU4OWI0ZWQ0YzM1NGVhM2JmY2Y3NzU3OTZiMTgwMDRj ZDA4YgpBdXRob3IgOiBEYXZpZCBDYW50cmVsbCA8ZGNhbnRyZWxsQGJ1cmRlbGwub3JnPgpEYXRl ICAgOiAyMDI1LTAxLTIyVDE0OjI2OjIwLTA1OjAwClN0YXRzICA6ICswLy00MTA1OTMgaW4gODEg ZmlsZShzKQpVUkwgICAgOiBodHRwczovL3NyYy5mZWRvcmFwcm9qZWN0Lm9yZy9ycG1zL2NrZXJt aXQvYy8zYWJlNTg5YjRlZDRjMzU0ZWEzYmZjZjc3NTc5NmIxODAwNGNkMDhiP2JyYW5jaD1lcGVs MTAKCkxvZzoKUmVtb3ZlIHRoZSAncnBtYnVpbGQgLWJwJyBkaXJlY3RvcnkgZnJvbSBnaXQsIGNv bWUgb24KCi0tLQpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4w LjMwMi9DT1BZSU5HLlRYVCBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIv Q09QWUlORy5UWFQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwMGYyMzYuLjAwMDAw MDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9DT1BZSU5HLlRY VAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLVRIRSBDLUtFUk1JVCA5LjAgTElDRU5T RQotCi1GcmkgSnVuIDI0IDE0OjQzOjM1IDIwMTEKLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLWFy ZSBtZXQ6Ci0gCi0gKyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAotICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIAotICsgUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgot ICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo IHRoZQotICAgZGlzdHJpYnV0aW9uLgotIAotICsgTmVpdGhlciB0aGUgbmFtZSBvZiBDb2x1bWJp YSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgYW55Ci0gICBjb250cmlidXRvcnMgbWF5IGJl IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAgIGZyb20gdGhp cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAK LVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD T05UUklCVVRPUlMKLSJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF UywgSU5DTFVESU5HLCBCVVQgTk9UCi1MSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLUEgUEFSVElDVUxBUiBQVVJQT1NF IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi1IT0xERVIg T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsCi1TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D TFVESU5HLCBCVVQgTk9UCi1MSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLURBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotVEhFT1JZIE9GIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V VCBPRiBUSEUgVVNFCi1PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1i dWlsZC9ja2VybWl0LTkuMC4zMDIvUkVBRE1FLmZlZG9yYSBiL2NrZXJtaXQtOS4wLjMwMi1idWls ZC9ja2VybWl0LTkuMC4zMDIvUkVBRE1FLmZlZG9yYQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggYmZhNDFhYy4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1p dC05LjAuMzAyL1JFQURNRS5mZWRvcmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1J ZiB1bnByaXZpbGVnZWQgdXNlcnMgYXR0ZW1wdCB0byBhY2Nlc3MgYSBzZXJpYWwgcG9ydCwgZS5n LgotL2Rldi90dHlTPG4+IG9yIC9kZXYvdHR5VVNCPG4+LCB0aGV5IHdpbGwgbm9ybWFsbHkgZ2V0 IGFuIGVycm9yCi1tZXNzYWdlIHN1Y2ggYXM6Ci0KLSAgICBTb3JyeSwgd3JpdGUgYWNjZXNzIHRv IFVVQ1AgbG9ja2ZpbGUgZGlyZWN0b3J5IGRlbmllZC4KLQotVGhpcyBtZXNzYWdlIGlzIGFjdHVh bGx5IGR1ZSB0byBwZXJtaXNzaW9ucyBvbiB0aGUgZGV2aWNlLCBub3QgdGhlCi1sb2NrZmlsZSBk aXJlY3RvcnkuCi0KLUlmIGl0IGlzIGRlc2lyZWQgdG8gYWxsb3cgc3BlY2lmaWMgdW5wcml2aWxl Z2VkIHVzZXJzIHRvIHVzZSBja2VybWl0Ci10byBhY2Nlc3Mgc2VyaWFsIHBvcnRzLCBhZGQgdGhv c2UgdXNlcnMgdG8gdGhlICJkaWFsb3V0IiBncm91cC4gIE9uZQotd2F5IHRvIGFjY29tcGxpc2gg dGhpcyBpcyB1c2luZyBhIGNvbW1hbmQgbGluZSBzdWNoIGFzOgotCi0gICAgc3VkbyB1c2VybW9k IC1hIC1HIGRpYWxvdXQgPHVzZXJuYW1lPgotCi1UaGlzIHdpbGwgYXBwbHkgdG8gZnV0dXJlIGxv Z2lucyBieSB0aGF0IHVzZXIuCi0KLUlmIHlvdSB3YW50IHRvIG1ha2UgdGhlIHNlcmlhbCBwb3J0 cyBhY2Nlc3NpYmxlIHRvIGFsbCB1c2VycyB3aXRob3V0Ci1hZGRpbmcgdGhlbSB0byB0aGUgZGlh bG91dCBncm91cCAobm90IHJlY29tbWVuZGVkKSwgeW91IGNhbiBjaGFuZ2UgdGhlCi1wZXJtaXNz aW9ucyBvZiB0aGUgc2VyaWFsIGRldmljZSB0byA2NjYsIGUuZy4sCi0KLSAgICBzdWRvIGNobW9k IDY2NiAvZGV2L3R0eVM8bj4KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tl cm1pdC05LjAuMzAyL2NrX2NycC5jIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4w LjMwMi9ja19jcnAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTkzZDBiNC4uMDAw MDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrX2NycC5j CisrKyAvZGV2L251bGwKQEAgLTEsNTYyMiArMCwwIEBACi1jaGFyICpja2NycHYgPSAiRW5jcnlw dGlvbiBFbmdpbmUsIDkuMC4xMTcsIDE5IE1hciAyMDEwIjsKLS8qCi0gIEMgSyBfIEMgUiBQIC4g QyAgLSAgQ3J5cHRvZ3JhcGh5IGZvciBDLUtlcm1pdCIKLQotICBDb3B5cmlnaHQgKEMpIDE5OTgs IDIwMTAsCi0gICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBv ZiBOZXcgWW9yay4KLSAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBD T1BZSU5HLlRYVCBmaWxlIG9yIHRoZQotICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWku YyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgotCi0gIEF1dGhvcjoKLSAg SmVmZnJleSBFIEFsdG1hbiAoamFsdG1hbkBzZWN1cmUtZW5kcG9pbnRzLmNvbSkKLSAgU2VjdXJl IEVuZHBvaW50cyBJbmMuLCBOZXcgWW9yayBDaXR5Ci0qLwotCi0jZGVmaW5lIENLX0NSUF9DCi0j aWZkZWYgQ0tfREVTCi0jaWZkZWYgQ0tfU1NMCi0jaWZuZGVmIExJQkRFUwotI2RlZmluZSBMSUJE RVMKLSNlbmRpZiAvKiBMSUJERVMgKi8KLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNlbmRpZiAvKiBD S19ERVMgKi8KLQotI2lmZGVmIENSWVBUX0RMTAotI2RlZmluZSBDS19BVVRIRU5USUNBVElPTgot I2RlZmluZSBDS19FTkNSWVBUSU9OCi0jZGVmaW5lIENLX0RFUwotI2RlZmluZSBDS19DQVNUCi0j aWZuZGVmIExJQkRFUwotI2RlZmluZSBMSUJERVMKLSNlbmRpZiAvKiBMSUJERVMgKi8KLQotI2Rl ZmluZSBURUxDTURTICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRvIGRlZmluZSBuYW1lIGFy cmF5ICovCi0jZGVmaW5lIFRFTE9QVFMgICAgICAgICAgICAgICAgICAgICAgICAgLyogdG8gZGVm aW5lIG5hbWUgYXJyYXkgKi8KLSNkZWZpbmUgRU5DUllQVF9OQU1FUwotI2VuZGlmIC8qIENSWVBU X0RMTCAqLwotCi0jaW5jbHVkZSAiY2tjc3ltLmgiCi0jaW5jbHVkZSAiY2tjZGViLmgiCi0jaW5j bHVkZSAiY2tjbmV0LmgiCi0KLSNpZmRlZiBERUJVRwotI3VuZGVmIERFQlVHCi0jZW5kaWYgLyog REVCVUcgKi8KLQotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0jaWZkZWYgQ0tfRU5DUllQVElP TgotI2RlZmluZSBFTkNSWVBUSU9OCi0jaWZkZWYgQ0tfREVTCi0jZGVmaW5lIERFU19FTkNSWVBU SU9OCi0jZW5kaWYgLyogQ0tfREVTICovCi0jaWZkZWYgIENLX0NBU1QKLSNkZWZpbmUgQ0FTVF9F TkNSWVBUSU9OCi0jZW5kaWYgLyogQ0tfQ0FTVCAqLwotI2lmZGVmIENPTU1FTlQKLSNkZWZpbmUg Q0FTVF9FWFBPUlRfRU5DUllQVElPTgotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNlbmRpZiAvKiBD S19FTkNSWVBUSU9OICovCi0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLQotI2lmZGVm IENLX0VOQ1JZUFRJT04KLQotI2luY2x1ZGUgImNrdWNtZC5oIiAgICAgICAgICAgICAgICAgICAg IC8qIEZvciBzdHJ1Y3Qga2V5dGFiIGRlZmluaXRpb24gKi8KLSNpbmNsdWRlICJja3VhdGguaCIK LSNpbmNsdWRlICJja3VhdDIuaCIKLSNpZmRlZiBNSVRfQ1VSUkVOVAotI2luY2x1ZGUgPGtyYjUu aD4KLSNlbmRpZiAvKiBNSVRfQ1VSUkVOVCAqLwotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5j bHVkZSA8c3RyaW5nLmg+Ci0jaWZkZWYgT1MyCi0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaWZkZWYg T1MyT05MWQotI2luY2x1ZGUgPG9zMi5oPgotI2VuZGlmIC8qIE9TMk9OTFkgKi8KLSNpbmNsdWRl ICJja29zeW4uaCIKLSNlbHNlIC8qIE9TMiAqLwotc3RhdGljIGNoYXIgKiB0bXBzdHJpbmcgPSBO VUxMOwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZuZGVmIENBU1RfT1JfRVhQT1JUCi0jaWZkZWYg Q0FTVF9FTkNSWVBUSU9OCi0jZGVmaW5lIENBU1RfT1JfRVhQT1JUCi0jZW5kaWYgLyogQ0FTVF9F TkNSWVBUSU9OICovCi0jaWZkZWYgQ0FTVF9FWFBPUlRfRU5DUllQVElPTgotI2RlZmluZSBDQVNU X09SX0VYUE9SVAotI2VuZGlmIC8qIENBU1RfRVhQT1JUX0VOQ1JZUFRJT04gKi8KLSNlbmRpZiAv KiBDQVNUX09SX0VYUE9SVCAqLwotCi0jaWZkZWYgTUFDT1NYCi0jdW5kZWYgTElCREVTCi0jZW5k aWYgLyogTUFDT1NYICovCi0KLSNpZmRlZiBDUllQVF9ETEwKLWludCBjbWRfcXVvdGluZyA9IDA7 Ci0KLSNpZm5kZWYgVEVMT1BUX01BQ1JPCi1pbnQKLXRlbG9wdF9pbmRleChvcHQpIGludCBvcHQ7 IHsKLSAgICBpZiAoIG9wdCA+PSAwICYmIG9wdCA8PSBURUxPUFRfU0VORF9VUkwgKQotICAgICAg ICByZXR1cm4ob3B0KTsKLSAgICBlbHNlIGlmICggb3B0ID49IFRFTE9QVF9QUkFHTUFfTE9HT04g JiYgb3B0IDw9IFRFTE9QVF9QUkFHTUFfSEVBUlRCRUFUICkKLSAgICAgICAgcmV0dXJuKG9wdC04 OSk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4oTlRFTE9QVFMpOwotfQotCi1pbnQKLXRlbG9w dF9vayhvcHQpIGludCBvcHQ7IHsKLSAgICByZXR1cm4oKG9wdCA+PSBURUxPUFRfQklOQVJZICYm IG9wdCA8PSBURUxPUFRfU0VORF9VUkwpIHx8Ci0gICAgICAgIChvcHQgPj0gVEVMT1BUX1BSQUdN QV9MT0dPTiAmJiBvcHQgPD0gVEVMT1BUX1BSQUdNQV9IRUFSVEJFQVQpKTsKLX0KLQotQ0hBUiAq Ci10ZWxvcHQob3B0KSBpbnQgb3B0OyB7Ci0gICAgaWYgKCB0ZWxvcHRfb2sob3B0KSApCi0gICAg ICAgIHJldHVybih0ZWxvcHRzW3RlbG9wdF9pbmRleChvcHQpXSk7Ci0gICAgZWxzZQotICAgICAg ICByZXR1cm4oIlVOS05PV04iKTsKLX0KLSNlbmRpZiAvKiBURUxPUFRfTUFDUk8gKi8KLQotc3Rh dGljIGludCAoKnBfdHRvbCkoY2hhciAqLGludCk9TlVMTDsKLXN0YXRpYyBpbnQgKCpwX2RvZGVi dWcpKGludCxjaGFyICosY2hhciAqLENLX09GRl9UKT1OVUxMOwotc3RhdGljIGludCAoKnBfZG9o ZXhkdW1wKShjaGFyICosY2hhciAqLGludCk9TlVMTDsKLXN0YXRpYyB2b2lkICgqcF90bl9kZWJ1 ZykoY2hhciAqKT1OVUxMOwotc3RhdGljIGludCAoKnBfdnNjcm5wcmludGYpKGNoYXIgKiwgLi4u KT1OVUxMOwotc3RhdGljIHZvaWQgKiBwX2s1X2NvbnRleHQ9TlVMTDsKLXN0YXRpYyB1bnNpZ25l ZCBsb25nICgqcF9yZXF0ZWxtdXRleCkodW5zaWduZWQgbG9uZyk9TlVMTDsKLXN0YXRpYyB1bnNp Z25lZCBsb25nICgqcF9yZWx0ZWxtdXRleCkodm9pZCk9TlVMTDsKLQotdW5zaWduZWQgbG9uZwot UmVxdWVzdFRlbG5ldE11dGV4KHVuc2lnbmVkIGxvbmcgeCkKLXsKLSAgICBpZiAoIHBfcmVxdGVs bXV0ZXggKQotICAgICAgICByZXR1cm4gcF9yZXF0ZWxtdXRleCh4KTsKLSAgICByZXR1cm4gMDsK LX0KLQotdW5zaWduZWQgbG9uZwotUmVsZWFzZVRlbG5ldE11dGV4KHZvaWQpCi17Ci0gICAgaWYg KCBwX3JlbHRlbG11dGV4ICkKLSAgICAgICAgcmV0dXJuIHBfcmVsdGVsbXV0ZXgoKTsKLSAgICBy ZXR1cm4gMDsKLX0KLQotaW50Ci10dG9sKGNoYXIgKiBzLCBpbnQgbikKLXsKLSAgICBpZiAoIHBf dHRvbCApCi0gICAgICAgIHJldHVybihwX3R0b2wocyxuKSk7Ci0gICAgZWxzZQotICAgICAgICBy ZXR1cm4oLTEpOwotfQotCi1pbnQKLWRvZGVidWcoaW50IGZsYWcsIGNoYXIgKiBzMSwgY2hhciAq IHMyLCBDS19PRkZfVCBuKQotewotICAgIGlmICggcF9kb2RlYnVnICkKLSAgICAgICAgcmV0dXJu KHBfZG9kZWJ1ZyhmbGFnLHMxLHMyLG4pKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybigtMSk7 Ci19Ci0KLWludAotZG9oZXhkdW1wKCBjaGFyICogczEsIGNoYXIgKiBzMiwgaW50IG4gKQotewot ICAgIGlmICggcF9kb2hleGR1bXAgKQotICAgICAgICBwX2RvaGV4ZHVtcChzMSxzMixuKTsKLSAg ICByZXR1cm4oMCk7Ci19Ci0KLXZvaWQKLXRuX2RlYnVnKCBjaGFyICogcyApCi17Ci0gICAgaWYg KCBwX3RuX2RlYnVnICkKLSAgICAgICAgcF90bl9kZWJ1ZyhzKTsKLX0KLQotc3RhdGljIGNoYXIg bXlwcnRmc3RyWzQwOTZdOwotaW50Ci1Wc2NybnByaW50Zihjb25zdCBjaGFyICogZm9ybWF0LCAu Li4pIHsKLSAgICBpbnQgaSwgbGVuLCByYz0wOwotICAgIGNoYXIgKmNwOwotICAgIHZhX2xpc3Qg YXA7Ci0KLSAgICB2YV9zdGFydChhcCwgZm9ybWF0KTsKLSNpZmRlZiBOVAotICAgIHJjID0gX3Zz bnByaW50ZihteXBydGZzdHIsIHNpemVvZihteXBydGZzdHIpLTEsIGZvcm1hdCwgYXApOwotI2Vs c2UgLyogTlQgKi8KLSAgICByYyA9IHZzcHJpbnRmKG15cHJ0ZnN0ciwgZm9ybWF0LCBhcCk7Ci0j ZW5kaWYgLyogTlQgKi8KLSAgICB2YV9lbmQoYXApOwotCi0gICAgaWYgKCBwX3ZzY3JucHJpbnRm ICkKLSAgICAgICAgcmV0dXJuKHBfdnNjcm5wcmludGYobXlwcnRmc3RyKSk7Ci0gICAgZWxzZQot ICAgICAgICByZXR1cm4oLTEpOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotdG5faGV4KENI QVIgKiBidWYsIGludCBidWZsZW4sIENIQVIgKiBkYXRhLCBpbnQgZGF0YWxlbikKLSNlbHNlIC8q IENLX0FOU0lDICovCi10bl9oZXgoYnVmLCBidWZsZW4sIGRhdGEsIGRhdGFsZW4pCi0gICAgQ0hB UiAqIGJ1ZjsKLSAgICBpbnQgYnVmbGVuOwotICAgIENIQVIgKiBkYXRhOwotICAgIGludCBkYXRh bGVuOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaW50IGkgPSAwLCBqID0gMCwgayA9 IDA7Ci0gICAgQ0hBUiB0bXBbOF07Ci0jaWZkZWYgQ09NTUVOVAotICAgIGludCB3YXNfaGV4ID0g MTsKLQotICAgIGZvciAoaz0wOyBrIDwgZGF0YWxlbjsgaysrKSB7Ci0gICAgICAgIGlmIChkYXRh W2tdIDwgMzIgfHwgZGF0YVtrXSA+PSAxMjcpIHsKLSAgICAgICAgICAgIHNwcmludGYodG1wLCIl cyUwMlggIix3YXNfaGV4PyIiOiJcIiAiLGRhdGFba10pOwotICAgICAgICAgICAgd2FzX2hleCA9 IDE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzcHJpbnRmKHRtcCwiJXMlYyIsd2Fz X2hleD8iXCIiOiIiLGRhdGFba10pOwotICAgICAgICAgICAgd2FzX2hleCA9IDA7Ci0gICAgICAg IH0KLSAgICAgICAgY2tzdHJuY2F0KGJ1Zix0bXAsYnVmbGVuKTsKLSAgICB9Ci0gICAgaWYgKCF3 YXNfaGV4KQotICAgICAgICBja3N0cm5jYXQoYnVmLCJcIiAiLGJ1Zmxlbik7Ci0jZWxzZSAvKiBD T01NRU5UICovCi0gICAgaWYgKGRhdGFsZW4gPD0gMCB8fCBkYXRhID09IE5VTEwpCi0gICAgICAg IHJldHVybigwKTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBkYXRhbGVuOyBpKyspIHsKLSAgICAg ICAgY2tzdHJuY2F0KGJ1ZiwiXHJcbiAgIixidWZsZW4pOwotICAgICAgICBmb3IgKGogPSAwIDsg KGogPCAxNik7IGorKykgewotICAgICAgICAgICAgaWYgKChpICsgaikgPCBkYXRhbGVuKQotICAg ICAgICAgICAgICBzcHJpbnRmKHRtcCwKLSAgICAgICAgICAgICAgICAgICAgICAiJXMlMDJ4ICIs Ci0gICAgICAgICAgICAgICAgICAgICAgKGogPT0gOCA/ICJ8ICIgOiAiIiksCi0gICAgICAgICAg ICAgICAgICAgICAgKENIQVIpIGRhdGFbaSArIGpdCi0gICAgICAgICAgICAgICAgICAgICAgKTsK LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgc3ByaW50Zih0bXAsCi0gICAgICAgICAg ICAgICAgICAgICAgIiVzICAgIiwKLSAgICAgICAgICAgICAgICAgICAgICAoaiA9PSA4ID8gInwg IiA6ICIiKQotICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBja3N0cm5jYXQo YnVmLHRtcCxidWZsZW4pOwotICAgICAgICB9Ci0gICAgICAgIGNrc3RybmNhdChidWYsIiAiLGJ1 Zmxlbik7Ci0gICAgICAgIGZvciAoayA9IDA7IChrIDwgMTYpICYmICgoaSArIGspIDwgZGF0YWxl bik7IGsrKykgewotICAgICAgICAgICAgc3ByaW50Zih0bXAsCi0gICAgICAgICAgICAgICAgICAg ICAiJXMlYyIsCi0gICAgICAgICAgICAgICAgICAgICAoayA9PSA4ID8gIiAiIDogIiIpLAotICAg ICAgICAgICAgICAgICAgICAgaXNwcmludChkYXRhW2kgKyBrXSkgPyBkYXRhW2kgKyBrXSA6ICcu JwotICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGNrc3RybmNhdChidWYsdG1w LGJ1Zmxlbik7Ci0gICAgICAgIH0KLSAgICAgICAgaSArPSBqIC0gMTsKLSAgICB9IC8qIGVuZCBm b3IgKi8KLSAgICBja3N0cm5jYXQoYnVmLCJcclxuICAiLGJ1Zmxlbik7Ci0jZW5kaWYgLyogQ09N TUVOVCAqLwotICAgIHJldHVybihzdHJsZW4oYnVmKSk7Ci19Ci0KLSNpZmRlZiBDT01NRU5UCi0j ZGVmaW5lIHR0b2wgICAgICAgIGRsbF90dG9sCi0jZGVmaW5lIGRvZGVidWcgICAgIGRsbF9kb2Rl YnVnCi0jZGVmaW5lIGRvaGV4ZHVtcCAgIGRsbF9kb2hleGR1bXAKLSNkZWZpbmUgdG5fZGVidWcg ICAgZGxsX3RuX2RlYnVnCi0jZGVmaW5lIFZzY3JucHJpbnRmIGRsbF92c2NybnByaW50ZgotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLQotY2hhciB0bl9tc2dbVE5fTVNHX0xFTl0sIGhleGJ1ZltUTl9N U0dfTEVOXTsgICAvKiBmcm9tIGNrY25ldC5jICovCi1pbnQgZGVibG9nPTEsIGRlYnNlcz0xLCB0 bl9kZWI9MTsKLSNlbHNlIC8qIENSWVBUX0RMTCAqLwotZXh0ZXJuIGNoYXIgdG5fbXNnW10sIGhl eGJ1ZltdOyAgICAgICAgIC8qIGZyb20gY2tjbmV0LmMgKi8KLWV4dGVybiBpbnQgZGVibG9nLCBk ZWJzZXMsIHRuX2RlYjsKLSNpZmRlZiBNSVRfQ1VSUkVOVAotZXh0ZXJuIGtyYjVfY29udGV4dCBr NV9jb250ZXh0OwotI2VuZGlmIC8qIE1JVF9DVVJSRU5UICovCi0jZW5kaWYgLyogQ1JZUFRfRExM ICovCi0KLSNpZmRlZiBMSUJERVMKLSNpZmRlZiBNQUNPU1gKLSNkZWZpbmUgZGVzX25ld19yYW5k b21fa2V5ICAgICAgICAgICAgY2tfZGVzX25ld19yYW5kb21fa2V5Ci0jZGVmaW5lIGRlc19zZXRf cmFuZG9tX2dlbmVyYXRvcl9zZWVkIGNrX2Rlc19zZXRfcmFuZG9tX2dlbmVyYXRvcl9zZWVkCi0j ZGVmaW5lIGRlc19rZXlfc2NoZWQgICAgICAgICAgICAgICAgIGNrX2Rlc19rZXlfc2NoZWQKLSNk ZWZpbmUgZGVzX2VjYl9lbmNyeXB0ICAgICAgICAgICAgICAgY2tfZGVzX2VjYl9lbmNyeXB0Ci0j ZGVmaW5lIGRlc19zdHJpbmdfdG9fa2V5ICAgICAgICAgICAgIGNrX2Rlc19zdHJpbmdfdG9fa2V5 Ci0jZGVmaW5lIGRlc19maXh1cF9rZXlfcGFyaXR5ICAgICAgICAgIGNrX2Rlc19maXh1cF9rZXlf cGFyaXR5Ci0jZW5kaWYgLyogTUFDT1NYICovCi0jaWZuZGVmIFVOSVgKLSNkZWZpbmUgZGVzX25l d19yYW5kb21fa2V5ICAgICAgICAgICAgZGVzX3JhbmRvbV9rZXkKLSNkZWZpbmUgZGVzX3NldF9y YW5kb21fZ2VuZXJhdG9yX3NlZWQgZGVzX3JhbmRvbV9zZWVkCi0jZW5kaWYgLyogVU5JWCAqLwot I2RlZmluZSBkZXNfZml4dXBfa2V5X3Bhcml0eSAgICAgICAgICBkZXNfc2V0X29kZF9wYXJpdHkK LSNpZmRlZiBPUEVOU1NMXzA5NwotI2RlZmluZSBPUEVOU1NMX0VOQUJMRV9PTERfREVTX1NVUFBP UlQKLSNpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgotI2VuZGlmIC8qIE9QRU5TU0xfMDk3ICovCi0j ZWxzZSAvKiBMSUJERVMgKi8KLSNpZmRlZiBVTklYCi0jZGVmaW5lIGRlc19zZXRfcmFuZG9tX2dl bmVyYXRvcl9zZWVkKHgpIGRlc19pbml0X3JhbmRvbV9udW1iZXJfZ2VuZXJhdG9yKHgpCi0jZW5k aWYgLyogVU5JWCAqLwotI2lmZGVmIE9TMgotI2RlZmluZSBkZXNfbmV3X3JhbmRvbV9rZXkgICAg ICAgICAgICBja19kZXNfbmV3X3JhbmRvbV9rZXkKLSNkZWZpbmUgZGVzX3NldF9yYW5kb21fZ2Vu ZXJhdG9yX3NlZWQgY2tfZGVzX3NldF9yYW5kb21fZ2VuZXJhdG9yX3NlZWQKLSNkZWZpbmUgZGVz X2tleV9zY2hlZCAgICAgICAgICAgICAgICAgY2tfZGVzX2tleV9zY2hlZAotI2RlZmluZSBkZXNf ZWNiX2VuY3J5cHQgICAgICAgICAgICAgICBja19kZXNfZWNiX2VuY3J5cHQKLSNkZWZpbmUgZGVz X3N0cmluZ190b19rZXkgICAgICAgICAgICAgY2tfZGVzX3N0cmluZ190b19rZXkKLSNkZWZpbmUg ZGVzX2ZpeHVwX2tleV9wYXJpdHkgICAgICAgICAgY2tfZGVzX2ZpeHVwX2tleV9wYXJpdHkKLSNl bmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBMSUJERVMgKi8KLQotI2lmZGVmIENLX0RFUwotLyog VGhpcyBjb2RlIGNvbWVzIGZyb20gRXJpYyBZb3VuZydzIGxpYmRlcyBwYWNrYWdlIGFuZCBpcyBu b3QgcGFydCAgICovCi0vKiBvZiB0aGUgc3RhbmRhcmQgTUlUIERFUyBsaWJyYXJ5IHRoYXQgaXMg cGFydCBvZiBLZXJiZXJvcy4gSG93ZXZlciwgKi8KLS8qIGl0IGlzIGV4dHJlbWVseSB1c2VmdWwu ICBTbyB3ZSBhZGQgaXQgaGVyZS4gICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0KLS8qIFdl YWsgYW5kIHNlbWkgd2VlayBrZXlzIGFzIHRha2UgZnJvbQotICogJUEgRC5XLiBEYXZpZXMKLSAq ICVBIFcuTC4gUHJpY2UKLSAqICVUIFNlY3VyaXR5IGZvciBDb21wdXRlciBOZXR3b3JrcwotICog JUkgSm9obiBXaWxleSAmIFNvbnMKLSAqICVEIDE5ODQKLSAqIE1hbnkgdGhhbmtzIHRvIHNtYkB1 bHlzc2VzLmF0dC5jb20gKFN0ZXZlbiBCZWxsb3ZpbikgZm9yIHRoZSByZWZlcmVuY2UKLSAqIChh bmQgYWN0dWFsIGNibG9jayB2YWx1ZXMpLgotICovCi0jZGVmaW5lIE5VTV9XRUFLX0tFWSAgICAx Ngotc3RhdGljIEJsb2NrIHdlYWtfa2V5c1tOVU1fV0VBS19LRVldPXsKLSAgICAgICAgLyogd2Vh ayBrZXlzICovCi0gICAgICAgIHsweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4 MDF9LAotICAgICAgICB7MHhGRSwweEZFLDB4RkUsMHhGRSwweEZFLDB4RkUsMHhGRSwweEZFfSwK LSAgICAgICAgezB4MUYsMHgxRiwweDFGLDB4MUYsMHgxRiwweDFGLDB4MUYsMHgxRn0sCi0gICAg ICAgIHsweEUwLDB4RTAsMHhFMCwweEUwLDB4RTAsMHhFMCwweEUwLDB4RTB9LAotICAgICAgICAv KiBzZW1pLXdlYWsga2V5cyAqLwotICAgICAgICB7MHgwMSwweEZFLDB4MDEsMHhGRSwweDAxLDB4 RkUsMHgwMSwweEZFfSwKLSAgICAgICAgezB4RkUsMHgwMSwweEZFLDB4MDEsMHhGRSwweDAxLDB4 RkUsMHgwMX0sCi0gICAgICAgIHsweDFGLDB4RTAsMHgxRiwweEUwLDB4MEUsMHhGMSwweDBFLDB4 RjF9LAotICAgICAgICB7MHhFMCwweDFGLDB4RTAsMHgxRiwweEYxLDB4MEUsMHhGMSwweDBFfSwK LSAgICAgICAgezB4MDEsMHhFMCwweDAxLDB4RTAsMHgwMSwweEYxLDB4MDEsMHhGMX0sCi0gICAg ICAgIHsweEUwLDB4MDEsMHhFMCwweDAxLDB4RjEsMHgwMSwweEYxLDB4MDF9LAotICAgICAgICB7 MHgxRiwweEZFLDB4MUYsMHhGRSwweDBFLDB4RkUsMHgwRSwweEZFfSwKLSAgICAgICAgezB4RkUs MHgxRiwweEZFLDB4MUYsMHhGRSwweDBFLDB4RkUsMHgwRX0sCi0gICAgICAgIHsweDAxLDB4MUYs MHgwMSwweDFGLDB4MDEsMHgwRSwweDAxLDB4MEV9LAotICAgICAgICB7MHgxRiwweDAxLDB4MUYs MHgwMSwweDBFLDB4MDEsMHgwRSwweDAxfSwKLSAgICAgICAgezB4RTAsMHhGRSwweEUwLDB4RkUs MHhGMSwweEZFLDB4RjEsMHhGRX0sCi0gICAgICAgIHsweEZFLDB4RTAsMHhGRSwweEUwLDB4RkUs MHhGMSwweEZFLDB4RjF9fTsKLQotaW50Ci1ja19kZXNfaXNfd2Vha19rZXkoa2V5KQotQmxvY2sg a2V5OwotewotICAgIGludCBpOwotCi0gICAgZm9yIChpPTA7IGk8TlVNX1dFQUtfS0VZOyBpKysp IHsKLSAgICAgICAgLyogQWRkZWQgPT0gMCB0byBjb21wYXJpc2lvbiwgSSBvYnZpb3VzbHkgZG9u J3QgcnVuCi0gICAgICAgICogdGhpcyBzZWN0aW9uIHZlcnkgb2Z0ZW4gOi0oLCB0aGFua3MgdG8K LSAgICAgICAgKiBlbmdpbmVlcmluZ0BNb3JuaW5nU3Rhci5Db20gZm9yIHRoZSBmaXgKLSAgICAg ICAgKiBlYXkgOTMvMDYvMjkKLSAgICAgICAgKiBBbm90aGVyIHByb2JsZW0sIEkgd2FzIGNvbXBh cmluZyBvbmx5IHRoZSBmaXJzdCA0Ci0gICAgICAgICogYnl0ZXMsIDk3LzAzLzE4ICovCi0gICAg ICAgIGlmIChtZW1jbXAod2Vha19rZXlzW2ldLGtleSxzaXplb2YoQmxvY2spKSA9PSAwKQotICAg ICAgICAgICAgcmV0dXJuKDEpOwotICAgIH0KLSAgICByZXR1cm4oMCk7Ci19Ci0KLSNpZmRlZiBV TklYCi0jaWZkZWYgTElCREVTCi0jaWZuZGVmIE1BQ09TWAotLyogVGhlc2UgZnVuY3Rpb25zIGFy ZSBub3QgcGFydCBvZiBFcmljIFlvdW5nJ3MgREVTIGxpYnJhcnkgKi8KLS8qIF91bml4X3RpbWVf Z210X3VuaXhzZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIF9kZXNf c2V0X3JhbmRvbV9nZW5lcmF0b3Jfc2VlZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8q IF9kZXNfZml4dXBfa2V5X3Bhcml0eSAgIChhZGRlZCBpbiAwLjkuNSkgICAgICAgICAgICAgICAg Ki8KLS8qIF9kZXNfbmV3X3JhbmRvbV9rZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKi8KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotCi11bnNpZ25lZCBsb25nCi11bml4X3Rp bWVfZ210X3VuaXhzZWMgKHVzZWNwdHIpCi0gICAgdW5zaWduZWQgbG9uZyAgKnVzZWNwdHI7Ci17 Ci0gICAgc3RydWN0IHRpbWV2YWwgIG5vdzsKLQotICAgICh2b2lkKSBnZXR0aW1lb2ZkYXkgKCZu b3csIChzdHJ1Y3QgdGltZXpvbmUgKikwKTsKLSAgICBpZiAodXNlY3B0cikKLSAgICAgICAgKnVz ZWNwdHIgPSBub3cudHZfdXNlYzsKLSAgICByZXR1cm4gbm93LnR2X3NlYzsKLX0KLQotdm9pZAot ZGVzX3NldF9yYW5kb21fZ2VuZXJhdG9yX3NlZWQoQmxvY2sgQikKLXsKLSAgICBkZXNfcmFuZG9t X3NlZWQoQik7Ci0gICAgcmV0dXJuOwotfQotCi0jaWZkZWYgQ09NTUVOVAotLyogYWRkZWQgdG8g b3BlbnNzbCBpbiAwLjkuNSAqLwotdm9pZAotZGVzX2ZpeHVwX2tleV9wYXJpdHkoQmxvY2sgQikK LXsKLSAgICBkZXNfc2V0X29kZF9wYXJpdHkoQik7Ci0gICAgcmV0dXJuOwotfQotI2VuZGlmIC8q IENPTU1FTlQgKi8KLWludAotZGVzX25ld19yYW5kb21fa2V5KEJsb2NrIEIpCi17Ci0gICAgaW50 IHJjPTA7Ci0gICAgLyogV0FSTklORzoKLSAgICAgICBUaGlzIG1pZ2h0IG5lZWQgdG8gaGF2ZSB0 aGUgInJjID0gIiByZW1vdmVkIGJlY2F1c2UgdGhpcwotICAgICAgIGlzIFZPSUQgaW4gbGF0ZXIs IGFuZCBtYXliZSBldmVuIGFsbCwgdmVyc2lvbnMuCi0gICAgKi8gICAgICAgCi0gICAgcmMgPSBk ZXNfcmFuZG9tX2tleShCKTsKLSAgICByZXR1cm4ocmMpOwotfQotCi0jZW5kaWYgLyogTUFDT1NY ICovCi0jZW5kaWYgLyogTElCREVTICovCi0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIENL X0RFUyAqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTkxLCAxOTkzCi0gKiAgICAgIFRoZSBS ZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2Vy dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg ZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5n IGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhl IGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKLSAqICAgICAgQ2FsaWZv cm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCi0gKiA0LiBOZWl0aGVyIHRoZSBu YW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwot ICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdF TlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwg SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U IE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQg QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ Q1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX SVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdF LgotICovCi0KLS8qIGJhc2VkIG9uIEAoIyllbmNyeXB0LmMgICAgICAgOC4xIChCZXJrZWxleSkg Ni80LzkzICovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTAgYnkgdGhlIE1hc3NhY2h1c2V0 dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kKLSAqCi0gKiBFeHBvcnQgb2YgdGhpcyBzb2Z0d2Fy ZSBmcm9tIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EgbWF5Ci0gKiByZXF1aXJlIGEgc3Bl Y2lmaWMgbGljZW5zZSBmcm9tIHRoZSBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQuCi0gKiBJdCBp cyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgYW55IHBlcnNvbiBvciBvcmdhbml6YXRpb24gY29udGVt cGxhdGluZwotICogZXhwb3J0IHRvIG9idGFpbiBzdWNoIGEgbGljZW5zZSBiZWZvcmUgZXhwb3J0 aW5nLgotICoKLSAqIFdJVEhJTiBUSEFUIENPTlNUUkFJTlQsIHBlcm1pc3Npb24gdG8gdXNlLCBj b3B5LCBtb2RpZnksIGFuZAotICogZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9j dW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kCi0gKiB3aXRob3V0IGZlZSBpcyBoZXJlYnkg Z3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UgYXBw ZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5k Ci0gKiB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50 YXRpb24sIGFuZCB0aGF0Ci0gKiB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4gYWR2 ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcKLSAqIHRvIGRpc3RyaWJ1dGlvbiBvZiB0 aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgotICogcGVybWlzc2lv bi4gIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5 IG9mCi0gKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJh cyBpcyIgd2l0aG91dCBleHByZXNzCi0gKiBvciBpbXBsaWVkIHdhcnJhbnR5LgotICovCi0KLSNp bmNsdWRlIDxzdGRpby5oPgotCi0vKgotICogVGhlc2UgZnVuY3Rpb24gcG9pbnRlcnMgcG9pbnQg dG8gdGhlIGN1cnJlbnQgcm91dGluZXMKLSAqIGZvciBlbmNyeXB0aW5nIGFuZCBkZWNyeXB0aW5n IGRhdGEuCi0gKi8KLS8qIE5PVEU6IFRoZXNlIG5leHQgdHdvIG1pZ2h0IG5lZWQgdG8gaGF2ZSB0 aGUgInN0YXRpYyAiIHJlbW92ZWQgKi8KLQotc3RhdGljIFZPSUQgICAgICgqZW5jcnlwdF9vdXRw dXQpIFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7Ci1zdGF0aWMgaW50ICAgICAgKCpkZWNyeXB0 X2lucHV0KSBQKChpbnQpKTsKLQotI2lmZGVmIERFQlVHCi1zdGF0aWMgaW50IGVuY3J5cHRfZGVi dWdfbW9kZSA9IDE7Ci1zdGF0aWMgaW50IGVuY3J5cHRfdmVyYm9zZSA9IDE7Ci0jZWxzZQotc3Rh dGljIGludCBlbmNyeXB0X3ZlcmJvc2UgPSAxOwotc3RhdGljIGludCBlbmNyeXB0X2RlYnVnX21v ZGUgPSAwOwotI2VuZGlmCi0KLXN0YXRpYyBjaGFyIGRiZ2J1ZiBbMTYzODRdOwotCi1zdGF0aWMg aW50IGRlY3J5cHRfbW9kZSA9IDA7Ci1zdGF0aWMgaW50IGVuY3J5cHRfbW9kZSA9IDA7Ci1zdGF0 aWMgaW50IGF1dG9lbmNyeXB0ID0gMTsKLXN0YXRpYyBpbnQgYXV0b2RlY3J5cHQgPSAxOwotc3Rh dGljIGludCBoYXZlc2Vzc2lvbmtleSA9IDA7Ci0KLXN0YXRpYyBrc3RyZWFtIEVuY3J5cHRLU0ds b2JhbEhhY2sgPSBOVUxMOwotc3RhdGljIGludCAgICAgRW5jcnlwdFR5cGUgPSBFTkNUWVBFX0FO WTsKLQotI2RlZmluZSB0eXBlbWFzayh4KSAgICAgKCh4KSA+IDAgPyAxIDw8ICgoeCktMSkgOiAw KQotCi1zdGF0aWMgbG9uZyBpX3N1cHBvcnRfZW5jcnlwdCA9Ci0gICAgICAgIHR5cGVtYXNrKEVO Q1RZUEVfREVTX0NGQjY0KSB8IHR5cGVtYXNrKEVOQ1RZUEVfREVTX09GQjY0KTsKLXN0YXRpYyBs b25nIGlfc3VwcG9ydF9kZWNyeXB0ID0KLSAgICAgICAgdHlwZW1hc2soRU5DVFlQRV9ERVNfQ0ZC NjQpIHwgdHlwZW1hc2soRU5DVFlQRV9ERVNfT0ZCNjQpOwotc3RhdGljIGxvbmcgaV93b250X3N1 cHBvcnRfZW5jcnlwdCA9IDA7Ci1zdGF0aWMgbG9uZyBpX3dvbnRfc3VwcG9ydF9kZWNyeXB0ID0g MDsKLSNkZWZpbmUgSV9TVVBQT1JUX0VOQ1JZUFQgICAgICAgKGlfc3VwcG9ydF9lbmNyeXB0ICYg fmlfd29udF9zdXBwb3J0X2VuY3J5cHQpCi0jZGVmaW5lIElfU1VQUE9SVF9ERUNSWVBUICAgICAg IChpX3N1cHBvcnRfZGVjcnlwdCAmIH5pX3dvbnRfc3VwcG9ydF9kZWNyeXB0KQotCi1zdGF0aWMg bG9uZyByZW1vdGVfc3VwcG9ydHNfZW5jcnlwdCA9IDA7Ci1zdGF0aWMgbG9uZyByZW1vdGVfc3Vw cG9ydHNfZGVjcnlwdCA9IDA7Ci0KLS8qIE1ha2Ugc3VyZSB0aGF0IHRoaXMgbGlzdCBpcyBpbiBv cmRlciBvZiBhbGdvcml0aG0gc3RyZW5ndGggICAgICovCi0vKiBhcyBpdCBkZXRlcm1pbmVzIHRo ZSBzZWFyY2ggb3JkZXIgZm9yIHNlbGVjdGluZyBzcGVjaWZpYyAgICAgICAqLwotLyogZW5jcnlw dGlvbiBjaG9pY2VzLiAgQWxsIENGQiBtb2RlcyBtdXN0IGNvbWUgYmVmb3JlIE9GQiBtb2Rlcy4g Ki8KLXN0YXRpYyBFbmNyeXB0aW9ucyBlbmNyeXB0aW9uc1tdID0gewotI2lmZGVmIERFU19FTkNS WVBUSU9OCi0gICAgeyAiREVTM19DRkI2NCIsCi0gICAgICAgICAgRU5DVFlQRV9ERVMzX0NGQjY0 LAotICAgICAgICAgIGRlczNfY2ZiNjRfZW5jcnlwdCwKLSAgICAgICAgICBkZXMzX2NmYjY0X2Rl Y3J5cHQsCi0gICAgICAgICAgZGVzM19jZmI2NF9pbml0LAotICAgICAgICAgIGRlczNfY2ZiNjRf c3RhcnQsCi0gICAgICAgICAgZGVzM19jZmI2NF9pcywKLSAgICAgICAgICBkZXMzX2NmYjY0X3Jl cGx5LAotICAgICAgICAgIGRlczNfY2ZiNjRfc2Vzc2lvbiwKLSAgICAgICAgICBkZXMzX2NmYjY0 X2tleWlkLAotICAgICAgICAgIE5VTEwgfSwKLSNlbmRpZiAvKiBERVNfRU5DUllQVElPTiAqLwot I2lmZGVmIENBU1RfRU5DUllQVElPTgotI2lmbmRlZiBDQVNUX0VYUE9SVF9FTkNSWVBUSU9OCi0g ICAgeyAiQ0FTVDEyOF9DRkI2NCIsICBFTkNUWVBFX0NBU1QxMjhfQ0ZCNjQsCi0gICAgICAgICAg Y2FzdF9jZmI2NF9lbmNyeXB0LAotICAgICAgICAgIGNhc3RfY2ZiNjRfZGVjcnlwdCwKLSAgICAg ICAgICBjYXN0X2NmYjY0X2luaXQsCi0gICAgICAgICAgY2FzdF9jZmI2NF9zdGFydCwKLSAgICAg ICAgICBjYXN0X2NmYjY0X2lzLAotICAgICAgICAgIGNhc3RfY2ZiNjRfcmVwbHksCi0gICAgICAg ICAgY2FzdF9jZmI2NF9zZXNzaW9uLAotICAgICAgICAgIGNhc3RfY2ZiNjRfa2V5aWQsCi0gICAg ICAgICAgTlVMTCB9LAotI2VuZGlmCi0jZW5kaWYKLSNpZmRlZiBERVNfRU5DUllQVElPTgotICAg IHsgIkRFU19DRkI2NCIsCi0gICAgICAgICAgRU5DVFlQRV9ERVNfQ0ZCNjQsCi0gICAgICAgICAg Y2ZiNjRfZW5jcnlwdCwKLSAgICAgICAgICBjZmI2NF9kZWNyeXB0LAotICAgICAgICAgIGNmYjY0 X2luaXQsCi0gICAgICAgICAgY2ZiNjRfc3RhcnQsCi0gICAgICAgICAgY2ZiNjRfaXMsCi0gICAg ICAgICAgY2ZiNjRfcmVwbHksCi0gICAgICAgICAgY2ZiNjRfc2Vzc2lvbiwKLSAgICAgICAgICBj ZmI2NF9rZXlpZCwKLSAgICAgICAgICBOVUxMIH0sCi0jZW5kaWYgIC8qIERFU19FTkNSWVBUSU9O ICovCi0jaWYgZGVmaW5lZCAoQ0FTVF9FWFBPUlRfRU5DUllQVElPTikgfHwgZGVmaW5lZChDQVNU X0VOQ1JZUFRJT04pCi0gICAgeyAiQ0FTVDVfNDBfQ0ZCNjQiLCBFTkNUWVBFX0NBU1Q1XzQwX0NG QjY0LAotICAgICAgICAgIGNhc3RleHBfY2ZiNjRfZW5jcnlwdCwKLSAgICAgICAgICBjYXN0ZXhw X2NmYjY0X2RlY3J5cHQsCi0gICAgICAgICAgY2FzdGV4cF9jZmI2NF9pbml0LAotICAgICAgICAg IGNhc3RleHBfY2ZiNjRfc3RhcnQsCi0gICAgICAgICAgY2FzdGV4cF9jZmI2NF9pcywKLSAgICAg ICAgICBjYXN0ZXhwX2NmYjY0X3JlcGx5LAotICAgICAgICAgIGNhc3RleHBfY2ZiNjRfc2Vzc2lv biwKLSAgICAgICAgICBjYXN0ZXhwX2NmYjY0X2tleWlkLAotICAgICAgICAgIE5VTEwgfSwKLSNl bmRpZiAvKiBDQVNUX0VOQ1JZUFRJT04gKi8KLSNpZmRlZiBERVNfRU5DUllQVElPTgotICAgIHsg IkRFUzNfT0ZCNjQiLAotICAgICAgICAgIEVOQ1RZUEVfREVTM19PRkI2NCwKLSAgICAgICAgICBk ZXMzX29mYjY0X2VuY3J5cHQsCi0gICAgICAgICAgZGVzM19vZmI2NF9kZWNyeXB0LAotICAgICAg ICAgIGRlczNfb2ZiNjRfaW5pdCwKLSAgICAgICAgICBkZXMzX29mYjY0X3N0YXJ0LAotICAgICAg ICAgIGRlczNfb2ZiNjRfaXMsCi0gICAgICAgICAgZGVzM19vZmI2NF9yZXBseSwKLSAgICAgICAg ICBkZXMzX29mYjY0X3Nlc3Npb24sCi0gICAgICAgICAgZGVzM19vZmI2NF9rZXlpZCwKLSAgICAg ICAgICBOVUxMIH0sCi0jZW5kaWYgLyogREVTX0VOQ1JZUFRJT04gKi8KLSNpZmRlZiBDQVNUX0VO Q1JZUFRJT04KLSNpZm5kZWYgQ0FTVF9FWFBPUlRfRU5DUllQVElPTgotICAgIHsgIkNBU1QxMjhf T0ZCNjQiLCAgRU5DVFlQRV9DQVNUMTI4X09GQjY0LAotICAgICAgICAgIGNhc3Rfb2ZiNjRfZW5j cnlwdCwKLSAgICAgICAgICBjYXN0X29mYjY0X2RlY3J5cHQsCi0gICAgICAgICAgY2FzdF9vZmI2 NF9pbml0LAotICAgICAgICAgIGNhc3Rfb2ZiNjRfc3RhcnQsCi0gICAgICAgICAgY2FzdF9vZmI2 NF9pcywKLSAgICAgICAgICBjYXN0X29mYjY0X3JlcGx5LAotICAgICAgICAgIGNhc3Rfb2ZiNjRf c2Vzc2lvbiwKLSAgICAgICAgICBjYXN0X29mYjY0X2tleWlkLAotICAgICAgICAgIE5VTEwgfSwK LSNlbmRpZgotI2VuZGlmCi0jaWZkZWYgREVTX0VOQ1JZUFRJT04KLSAgICB7ICJERVNfT0ZCNjQi LAotICAgICAgICAgIEVOQ1RZUEVfREVTX09GQjY0LAotICAgICAgICAgIG9mYjY0X2VuY3J5cHQs Ci0gICAgICAgICAgb2ZiNjRfZGVjcnlwdCwKLSAgICAgICAgICBvZmI2NF9pbml0LAotICAgICAg ICAgIG9mYjY0X3N0YXJ0LAotICAgICAgICAgIG9mYjY0X2lzLAotICAgICAgICAgIG9mYjY0X3Jl cGx5LAotICAgICAgICAgIG9mYjY0X3Nlc3Npb24sCi0gICAgICAgICAgb2ZiNjRfa2V5aWQsCi0g ICAgICAgICAgTlVMTCB9LAotI2VuZGlmICAvKiBERVNfRU5DUllQVElPTiAqLwotI2lmIGRlZmlu ZWQgKENBU1RfRVhQT1JUX0VOQ1JZUFRJT04pIHx8IGRlZmluZWQoQ0FTVF9FTkNSWVBUSU9OKQot ICAgIHsgIkNBU1Q1XzQwX09GQjY0IiwgRU5DVFlQRV9DQVNUNV80MF9PRkI2NCwKLSAgICAgICAg ICBjYXN0ZXhwX29mYjY0X2VuY3J5cHQsCi0gICAgICAgICAgY2FzdGV4cF9vZmI2NF9kZWNyeXB0 LAotICAgICAgICAgIGNhc3RleHBfb2ZiNjRfaW5pdCwKLSAgICAgICAgICBjYXN0ZXhwX29mYjY0 X3N0YXJ0LAotICAgICAgICAgIGNhc3RleHBfb2ZiNjRfaXMsCi0gICAgICAgICAgY2FzdGV4cF9v ZmI2NF9yZXBseSwKLSAgICAgICAgICBjYXN0ZXhwX29mYjY0X3Nlc3Npb24sCi0gICAgICAgICAg Y2FzdGV4cF9vZmI2NF9rZXlpZCwKLSAgICAgICAgICBOVUxMIH0sCi0jZW5kaWYgLyogQ0FTVF9F TkNSWVBUSU9OICovCi0gICAgeyAwLDAsMCwwLDAsMCwwLDAsMCwwLDAgIH0KLX07Ci0KLWludAot Z2V0X2NyeXB0X3RhYmxlKCBzdHJ1Y3Qga2V5dGFiICoqIHBUYWJsZSwgaW50ICogcE4gKQotewot ICAgIGludCBpPTAsbj0wOwotCi0gICAgaWYgKCAqcFRhYmxlICkKLSAgICB7Ci0gICAgICAgIGZv ciAoIGk9MCA7IGkgPCAqcE4gOyBpKysgKQotICAgICAgICAgICAgZnJlZSggKCpwVGFibGUpW2ld Lmt3ZCApIDsKLSAgICAgICAgZnJlZSAoICpwVGFibGUgKSAgOwotICAgIH0KLSAgICAqcFRhYmxl ID0gTlVMTDsKLSAgICAqcE4gPSAwOwotCi0gICAgLyogSG93IG1hbnkgZW5jcnlwdGlvbiB0eXBl cyBkbyB3ZSBoYXZlPyAqLwotICAgIHdoaWxlICggZW5jcnlwdGlvbnNbbl0ubmFtZSApCi0gICAg ICAgIG4rKzsKLQotICAgIGlmICggbiApCi0gICAgewotICAgICAgICAqcFRhYmxlID0gbWFsbG9j KCBzaXplb2Yoc3RydWN0IGtleXRhYikgKiAobisyKSApIDsKLSAgICAgICAgaWYgKCAhKCpwVGFi bGUpICkKLSAgICAgICAgICAgIHJldHVybigwKTsKLQotI2lmZGVmIE9TMgotICAgICAgICAoKnBU YWJsZSlbMF0ua3dkID1zdHJkdXAoImF1dG9tYXRpYyIpOwotI2Vsc2UgLyogT1MyICovCi0gICAg ICAgIG1ha2VzdHIoJnRtcHN0cmluZywiYXV0b21hdGljIik7Ci0gICAgICAgICgqcFRhYmxlKVsw XS5rd2QgPSB0bXBzdHJpbmc7Ci0gICAgICAgIHRtcHN0cmluZyA9IE5VTEw7Ci0jZW5kaWYgLyog T1MyICovCi0gICAgICAgICgqcFRhYmxlKVswXS5rd3ZhbCA9IEVOQ1RZUEVfQU5ZOwotICAgICAg ICAoKnBUYWJsZSlbMF0uZmxncyA9IDA7Ci0jaWZkZWYgT1MyCi0gICAgICAgICgqcFRhYmxlKVsx XS5rd2QgPXN0cmR1cCgibm9uZSIpOwotI2Vsc2UgLyogT1MyICovCi0gICAgICAgIG1ha2VzdHIo JnRtcHN0cmluZywibm9uZSIpOwotICAgICAgICAoKnBUYWJsZSlbMV0ua3dkID0gdG1wc3RyaW5n OwotICAgICAgICB0bXBzdHJpbmcgPSBOVUxMOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAo KnBUYWJsZSlbMV0ua3d2YWwgPSA5OTk7Ci0gICAgICAgICgqcFRhYmxlKVsxXS5mbGdzID0gMDsK LSAgICAgICAgKCpwTikgPSAyOwotCi0gICAgICAgIGZvciAoIGk9MCA7IGkgPCBuIDsgaSsrICkg ewotICAgICAgICAgICAgY2hhciAqIG5ld3N0ciA9IE5VTEwsICogcDsKLSAgICAgICAgICAgIGlu dCBuZXd2YWwgPSBlbmNyeXB0aW9uc1tpXS50eXBlOwotICAgICAgICAgICAgaW50IGogPSAwLCBs ZW4gPSAwOwotCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICBuZXdzdHIgPSBzdHJkdXAoZW5jcnlw dGlvbnNbaV0ubmFtZSk7Ci0gICAgICAgICAgICBzdHJsd3IobmV3c3RyKTsKLSNlbHNlIC8qIE9T MiAqLwotICAgICAgICAgICAgbWFrZXN0cigmdG1wc3RyaW5nLGVuY3J5cHRpb25zW2ldLm5hbWUp OwotICAgICAgICAgICAgbmV3c3RyID0gdG1wc3RyaW5nOwotICAgICAgICAgICAgdG1wc3RyaW5n ID0gTlVMTDsKLSAgICAgICAgICAgIGZvciAocCA9IG5ld3N0cjsgKnA7IHArKykgaWYgKGlzdXBw ZXIoKnApKSAqcCA9IHRvbG93ZXIoKnApOwotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAgICAgICAg ICBmb3IgKGogPSAwOyBqIDwgKCpwTik7IGorKykgewotICAgICAgICAgICAgICAgIGludCB0ZW1w dmFsID0gMDsKLSAgICAgICAgICAgICAgICBjaGFyICogdGVtcHN0ciA9IE5VTEw7Ci0KLSAgICAg ICAgICAgICAgICBpZiAoIHN0cmNtcCggKCpwVGFibGUpW2pdLmt3ZCwgbmV3c3RyICkgPiAwICkK LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXB2YWwgPSAoKnBUYWJs ZSlbal0ua3d2YWw7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBzdHIgPSAoKnBUYWJsZSlbal0u a3dkOwotICAgICAgICAgICAgICAgICAgICAoKnBUYWJsZSlbal0ua3dkID0gbmV3c3RyIDsKLSAg ICAgICAgICAgICAgICAgICAgKCpwVGFibGUpW2pdLmt3dmFsID0gbmV3dmFsOwotICAgICAgICAg ICAgICAgICAgICBuZXd2YWwgPSB0ZW1wdmFsOwotICAgICAgICAgICAgICAgICAgICBuZXdzdHIg PSB0ZW1wc3RyOwotICAgICAgICAgICAgICAgICAgICAoKnBUYWJsZSlbal0uZmxncyA9IDA7Ci0g ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgKCpwVGFibGUpWypw Tl0ua3dkID0gbmV3c3RyIDsKLSAgICAgICAgICAgICgqcFRhYmxlKVsqcE5dLmt3dmFsID0gbmV3 dmFsOwotICAgICAgICAgICAgKCpwVGFibGUpWypwTl0uZmxncyA9IDAgOwotICAgICAgICAgICAg KCpwTikrKyA7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAqcFRhYmxlID0gbWFs bG9jKCBzaXplb2Yoc3RydWN0IGtleXRhYikgKiAyICkgOwotICAgICAgICBpZiAoICEoKnBUYWJs ZSkgKQotICAgICAgICAgICAgcmV0dXJuKDApOwotCi0jaWZkZWYgT1MyCi0gICAgICAgICgqcFRh YmxlKVswXS5rd2QgPXN0cmR1cCgiYXV0b21hdGljIik7Ci0jZWxzZSAvKiBPUzIgKi8KLSAgICAg ICAgbWFrZXN0cigmdG1wc3RyaW5nLCJhdXRvbWF0aWMiKTsKLSAgICAgICAgKCpwVGFibGUpWzBd Lmt3ZCA9IHRtcHN0cmluZzsKLSAgICAgICAgdG1wc3RyaW5nID0gTlVMTDsKLSNlbmRpZiAvKiBP UzIgKi8KLSAgICAgICAgKCpwVGFibGUpWzBdLmt3dmFsID0gRU5DVFlQRV9BTlk7Ci0gICAgICAg ICgqcFRhYmxlKVswXS5mbGdzID0gMDsKLSNpZmRlZiBPUzIKLSAgICAgICAgKCpwVGFibGUpWzFd Lmt3ZCA9c3RyZHVwKCJub25lIik7Ci0jZWxzZSAvKiBPUzIgKi8KLSAgICAgICAgbWFrZXN0cigm dG1wc3RyaW5nLCJub25lIik7Ci0gICAgICAgICgqcFRhYmxlKVsxXS5rd2QgPSB0bXBzdHJpbmc7 Ci0gICAgICAgIHRtcHN0cmluZyA9IE5VTEw7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICgq cFRhYmxlKVsxXS5rd3ZhbCA9IDk5OTsKLSAgICAgICAgKCpwVGFibGUpWzFdLmZsZ3MgPSAwOwot ICAgICAgICAoKnBOKSA9IDI7Ci0gICAgfQotICAgIHJldHVybigqcE4pOwotfQotCi1zdGF0aWMg dW5zaWduZWQgY2hhciBzdHJfc2VuZFs2NF0gPSB7IElBQywgU0IsIFRFTE9QVF9FTkNSWVBUSU9O LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTkNSWVBUX1NVUFBPUlQg fTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHN0cl9zdXBsZW4gPSAwOwotc3RhdGljIHVuc2lnbmVk IGNoYXIgc3RyX3N0YXJ0WzcyXSA9IHsgSUFDLCBTQiwgVEVMT1BUX0VOQ1JZUFRJT04gfTsKLXN0 YXRpYyB1bnNpZ25lZCBjaGFyIHN0cl9lbmRbXSA9IHsgSUFDLCBTQiwgVEVMT1BUX0VOQ1JZUFRJ T04sIDAsIElBQywgU0UgfTsKLQotX1BST1RPVFlQKGludCAgZW5jcnlwdF9yZXF1ZXN0X2VuZCwg KFZPSUQpKTsKLV9QUk9UT1RZUChpbnQgIGVuY3J5cHRfcmVxdWVzdF9zdGFydCwgKFZPSUQpKTsK LV9QUk9UT1RZUChpbnQgIGVuY3J5cHRfZW5jX2tleWlkLCAodW5zaWduZWQgY2hhciAqLCBpbnQp KTsKLV9QUk9UT1RZUChpbnQgIGVuY3J5cHRfZGVjX2tleWlkLCAodW5zaWduZWQgY2hhciAqLCBp bnQpKTsKLV9QUk9UT1RZUChpbnQgIGVuY3J5cHRfc3VwcG9ydCwgKHVuc2lnbmVkIGNoYXIgKiwg aW50KSk7Ci1fUFJPVE9UWVAoaW50ICBlbmNyeXB0X3N0YXJ0LCAodW5zaWduZWQgY2hhciAqLCBp bnQpKTsKLV9QUk9UT1RZUChpbnQgIGVuY3J5cHRfZW5kLCAoVk9JRCkpOwotCi1fUFJPVE9UWVAo aW50IGVuY3J5cHRfa3Nfc3RyZWFtLChzdHJ1Y3Qga3N0cmVhbV9kYXRhX2Jsb2NrICosIC8qIG91 dHB1dCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3N0cmVh bV9kYXRhX2Jsb2NrICopKTsgLyogaW5wdXQgKi8KLQotX1BST1RPVFlQKGludCBkZWNyeXB0X2tz X3N0cmVhbSwoc3RydWN0IGtzdHJlYW1fZGF0YV9ibG9jayAqLCAvKiBvdXRwdXQgKi8KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGtzdHJlYW1fZGF0YV9ibG9jayAq KSk7IC8qIGlucHV0ICovCi0KLWludAotI2lmZGVmIENLX0FOU0lDCi1lbmNyeXB0X2tzX3N0cmVh bShzdHJ1Y3Qga3N0cmVhbV9kYXRhX2Jsb2NrICppLAotICAgICAgICAgICAgICAgICAgc3RydWN0 IGtzdHJlYW1fZGF0YV9ibG9jayAqbykKLSNlbHNlCi1lbmNyeXB0X2tzX3N0cmVhbShpLG8pCi0g ICAgc3RydWN0IGtzdHJlYW1fZGF0YV9ibG9jayAqaTsgc3RydWN0IGtzdHJlYW1fZGF0YV9ibG9j ayAqbzsKLSNlbmRpZgotewotICAgIC8qCi0gICAgKiB0aGlzIGlzIHJlYWxseSBxdWl0ZSBib2d1 cywgc2luY2UgaXQgZG9lcyBhbiBpbi1wbGFjZSBlbmNyeXB0aW9uLi4uCi0gICAgKi8KLSAgICBp ZiAoZW5jcnlwdF9vdXRwdXQpIHsKLSAgICAgICAgZW5jcnlwdF9vdXRwdXQoaS0+cHRyLCBpLT5s ZW5ndGgpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQot aW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWRlY3J5cHRfa3Nfc3RyZWFtKHN0cnVjdCBrc3RyZWFtX2Rh dGFfYmxvY2sgKmksCi0gICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3N0cmVhbV9kYXRhX2Jsb2Nr ICpvKQotI2Vsc2UKLWRlY3J5cHRfa3Nfc3RyZWFtKGksbykKLSAgICBzdHJ1Y3Qga3N0cmVhbV9k YXRhX2Jsb2NrICppOyBzdHJ1Y3Qga3N0cmVhbV9kYXRhX2Jsb2NrICpvOwotI2VuZGlmCi17Ci0g ICAgdW5zaWduZWQgaW50IGxlbjsKLSAgLyoKLSAgICogdGhpcyBpcyByZWFsbHkgcXVpdGUgYm9n dXMsIHNpbmNlIGl0IGRvZXMgYW4gaW4tcGxhY2UgZGVjcnlwdGlvbi4uLgotICAgKi8KLSAgICBp ZiAoZGVjcnlwdF9pbnB1dCkgewotICAgICAgICBmb3IgKGxlbiA9IDAgOyBsZW4gPCBpLT5sZW5n dGggOyBsZW4rKykKLSAgICAgICAgICAgICgodW5zaWduZWQgY2hhciAqKWktPnB0cilbbGVuXQot ICAgICAgICAgICAgICAgID0gZGVjcnlwdF9pbnB1dCgoKHVuc2lnbmVkIGNoYXIgKilpLT5wdHIp W2xlbl0pOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWlu dAotI2lmZGVmIENLX0FOU0lDCi1kZWNyeXB0X2tzX2hhY2sodW5zaWduZWQgY2hhciAqYnVmLCBp bnQgY250KQotI2Vsc2UKLWRlY3J5cHRfa3NfaGFjayhidWYsY250KSB1bnNpZ25lZCBjaGFyICpi dWY7IGludCBjbnQ7Ci0jZW5kaWYKLXsKLSAgICBpbnQgbGVuOwotICAvKgotICAgKiB0aGlzIGlz IHJlYWxseSBxdWl0ZSBib2d1cywgc2luY2UgaXQgZG9lcyBhbiBpbi1wbGFjZSBkZWNyeXB0aW9u Li4uCi0gICAqLwotICAgIGZvciAobGVuID0gMCA7IGxlbiA8IGNudCA7IGxlbisrKQotICAgICAg ICBidWZbbGVuXSA9IGRlY3J5cHRfaW5wdXQoYnVmW2xlbl0pOwotCi0jaWZkZWYgREVCVUcKLSAg ICBja2hleGR1bXAoImRlY3J5cHQga3MgaGFjayIsIGJ1ZiwgY250KTsKLSNlbmRpZgotICAgIHJl dHVybiAxOwotfQotCi0KLS8qCi0gKiBwYXJzZWRhdFswXSA9PSB0aGUgc3Vib3B0aW9uIHdlIG1p Z2h0IGJlIG5lZ290aWF0aW5nLAotICovCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotZW5jcnlwdF9w YXJzZSh1bnNpZ25lZCBjaGFyICpwYXJzZWRhdCwgaW50IGVuZF9zdWIpCi0jZWxzZQotZW5jcnlw dF9wYXJzZShwYXJzZWRhdCxlbmRfc3ViKSB1bnNpZ25lZCBjaGFyICpwYXJzZWRhdDsgaW50IGVu ZF9zdWI7Ci0jZW5kaWYKLXsKLSAgICBpbnQgcmMgPSAwOwotCi0gICAgc3dpdGNoKHBhcnNlZGF0 WzFdKSB7Ci0gICAgY2FzZSBFTkNSWVBUX1NUQVJUOgotICAgICAgICByYyA9IGVuY3J5cHRfc3Rh cnQocGFyc2VkYXQgKyAyLCBlbmRfc3ViIC0gMik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug RU5DUllQVF9FTkQ6Ci0gICAgICAgIHJjID0gZW5jcnlwdF9lbmQoKTsKLSAgICAgICAgYnJlYWs7 Ci0gICAgY2FzZSBFTkNSWVBUX1NVUFBPUlQ6Ci0gICAgICAgIHJjID0gZW5jcnlwdF9zdXBwb3J0 KHBhcnNlZGF0ICsgMiwgZW5kX3N1YiAtIDIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEVO Q1JZUFRfUkVRU1RBUlQ6Ci0gICAgICAgIHJjID0gZW5jcnlwdF9yZXF1ZXN0X3N0YXJ0KCk7Ci0g ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRU5DUllQVF9SRVFFTkQ6Ci0gICAgICAgIC8qCi0gICAg ICAgICogV2UgY2FuIGFsd2F5cyBzZW5kIGFuIFJFUUVORCBzbyB0aGF0IHdlIGNhbm5vdAotICAg ICAgICAqIGdldCBzdHVjayBlbmNyeXB0aW5nLiAgV2Ugc2hvdWxkIG9ubHkgZ2V0IHRoaXMKLSAg ICAgICAgKiBpZiB3ZSBoYXZlIGJlZW4gYWJsZSB0byBnZXQgaW4gdGhlIGNvcnJlY3QgbW9kZQot ICAgICAgICAqIGFueWhvdy4KLSAgICAgICAgKi8KLSAgICAgICAgcmMgPSBlbmNyeXB0X3JlcXVl c3RfZW5kKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRU5DUllQVF9JUzoKLSAgICAgICAg cmMgPSBlbmNyeXB0X2lzKHBhcnNlZGF0ICsgMiwgZW5kX3N1YiAtIDIpOwotICAgICAgICBicmVh azsKLSAgICBjYXNlIEVOQ1JZUFRfUkVQTFk6Ci0gICAgICAgIHJjID0gZW5jcnlwdF9yZXBseShw YXJzZWRhdCArIDIsIGVuZF9zdWIgLSAyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFTkNS WVBUX0VOQ19LRVlJRDoKLSAgICAgICAgcmMgPSBlbmNyeXB0X2VuY19rZXlpZChwYXJzZWRhdCAr IDIsIGVuZF9zdWIgLSAyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFTkNSWVBUX0RFQ19L RVlJRDoKLSAgICAgICAgcmMgPSBlbmNyeXB0X2RlY19rZXlpZChwYXJzZWRhdCArIDIsIGVuZF9z dWIgLSAyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmMgPSAtMTsK LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybihyYyk7Ci19Ci0KLS8qIFhYWCAqLwot RW5jcnlwdGlvbnMgKgotI2lmZGVmIENLX0FOU0lDCi1maW5kZW5jcnlwdGlvbihpbnQgdHlwZSkK LSNlbHNlCi1maW5kZW5jcnlwdGlvbih0eXBlKSBpbnQgdHlwZTsKLSNlbmRpZgotewotICAgIEVu Y3J5cHRpb25zICplcCA9IGVuY3J5cHRpb25zOwotCi0gICAgaWYgKCEoSV9TVVBQT1JUX0VOQ1JZ UFQgJiByZW1vdGVfc3VwcG9ydHNfZGVjcnlwdCAmIHR5cGVtYXNrKHR5cGUpKSkKLSAgICAgICAg cmV0dXJuKDApOwotICAgIHdoaWxlIChlcC0+dHlwZSAmJiBlcC0+dHlwZSAhPSB0eXBlKQotICAg ICAgICArK2VwOwotICAgIHJldHVybihlcC0+dHlwZSA/IGVwIDogMCk7Ci19Ci0KLUVuY3J5cHRp b25zICoKLSNpZmRlZiBDS19BTlNJQwotZmluZGRlY3J5cHRpb24oaW50IHR5cGUpCi0jZWxzZQot ZmluZGRlY3J5cHRpb24odHlwZSkgaW50IHR5cGU7Ci0jZW5kaWYKLXsKLSAgICBFbmNyeXB0aW9u cyAqZXAgPSBlbmNyeXB0aW9uczsKLQotICAgIGlmICghKElfU1VQUE9SVF9ERUNSWVBUICYgcmVt b3RlX3N1cHBvcnRzX2VuY3J5cHQgJiB0eXBlbWFzayh0eXBlKSkpCi0gICAgICAgIHJldHVybigw KTsKLSAgICB3aGlsZSAoZXAtPnR5cGUgJiYgZXAtPnR5cGUgIT0gdHlwZSkKLSAgICAgICAgKytl cDsKLSAgICByZXR1cm4oZXAtPnR5cGUgPyBlcCA6IDApOwotfQotCi0jZGVmaW5lIE1BWEtFWUxF TiA2NAotCi1zdGF0aWMgc3RydWN0IGtleV9pbmZvIHsKLSAgICB1bnNpZ25lZCBjaGFyIGtleWlk W01BWEtFWUxFTl07Ci0gICAgaW50IGtleWxlbjsKLSAgICBpbnQgZGlyOwotICAgIGludCAqbW9k ZXA7Ci0gICAgRW5jcnlwdGlvbnMgKigqZ2V0Y3J5cHQpKCk7Ci19IGtpWzJdID0gewotICAgIHsg eyAwIH0sIDAsIERJUl9FTkNSWVBULCAmZW5jcnlwdF9tb2RlLCBmaW5kZW5jcnlwdGlvbiB9LAot ICAgIHsgeyAwIH0sIDAsIERJUl9ERUNSWVBULCAmZGVjcnlwdF9tb2RlLCBmaW5kZGVjcnlwdGlv biB9LAotfTsKLQotVk9JRAotI2lmZGVmIENLX0FOU0lDCi1lbmNyeXB0X2luaXQoa3N0cmVhbSBp a3MsIGludCB0eXBlKQotI2Vsc2UKLWVuY3J5cHRfaW5pdChpa3MsIHR5cGUpIGtzdHJlYW0gaWtz OyBpbnQgdHlwZTsKLSNlbmRpZgotewotICAgIEVuY3J5cHRpb25zICplcCA9IGVuY3J5cHRpb25z OwotCi0gICAgaV9zdXBwb3J0X2VuY3J5cHQgPSBpX3N1cHBvcnRfZGVjcnlwdCA9IDA7Ci0gICAg cmVtb3RlX3N1cHBvcnRzX2VuY3J5cHQgPSByZW1vdGVfc3VwcG9ydHNfZGVjcnlwdCA9IDA7Ci0g ICAgaV93b250X3N1cHBvcnRfZW5jcnlwdCA9IGlfd29udF9zdXBwb3J0X2RlY3J5cHQgPSAwOwot ICAgIGVuY3J5cHRfbW9kZSA9IDA7Ci0gICAgZGVjcnlwdF9tb2RlID0gMDsKLSAgICBlbmNyeXB0 X291dHB1dCA9IE5VTEw7Ci0gICAgZGVjcnlwdF9pbnB1dCA9IE5VTEw7Ci0gICAga2lbMF0ua2V5 bGVuID0gMDsKLSAgICBtZW1zZXQoa2lbMF0ua2V5aWQsMCxNQVhLRVlMRU4pOwotICAgIGtpWzFd LmtleWxlbiA9IDA7Ci0gICAgbWVtc2V0KGtpWzFdLmtleWlkLDAsTUFYS0VZTEVOKTsKLSAgICBo YXZlc2Vzc2lvbmtleSA9IDA7Ci0gICAgYXV0b2VuY3J5cHQgPSAxOwotICAgIGF1dG9kZWNyeXB0 ID0gMTsKLQotICAgIEVuY3J5cHRLU0dsb2JhbEhhY2sgPSBpa3M7Ci0gICAgRW5jcnlwdFR5cGUg PSB0eXBlOwotCi0gICAgc3RyX3NlbmRbMF0gPSBJQUM7Ci0gICAgc3RyX3NlbmRbMV0gPSBTQjsK LSAgICBzdHJfc2VuZFsyXSA9IFRFTE9QVF9FTkNSWVBUSU9OOwotICAgIHN0cl9zZW5kWzNdID0g RU5DUllQVF9TVVBQT1JUOwotICAgIHN0cl9zdXBsZW4gPSA0OwotCi0gICAgd2hpbGUgKGVwLT50 eXBlKSB7Ci0gICAgICAgIGlmICggRW5jcnlwdFR5cGUgPT0gRU5DVFlQRV9BTlkgfHwKLSAgICAg ICAgICAgICBFbmNyeXB0VHlwZSA9PSBlcC0+dHlwZSApIHsKLSNpZmRlZiBERUJVRwotICAgICAg ICAgICAgaWYgKGVuY3J5cHRfZGVidWdfbW9kZSkgewotICAgICAgICAgICAgICAgIHNwcmludGYo ZGJnYnVmLCAiPj4+SSB3aWxsIHN1cHBvcnQgJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgRU5DVFlQRV9OQU1FKGVwLT50eXBlKSk7ICAgICAgIC8qIHNhZmUgKi8KLSAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTEwLCJlbmNyeXB0X2luaXQiLGRiZ2J1ZiwwKTsKLSAgICAgICAgICAgIH0K LSNlbmRpZgotICAgICAgICAgICAgaV9zdXBwb3J0X2VuY3J5cHQgfD0gdHlwZW1hc2soZXAtPnR5 cGUpOwotICAgICAgICAgICAgaV9zdXBwb3J0X2RlY3J5cHQgfD0gdHlwZW1hc2soZXAtPnR5cGUp OwotICAgICAgICAgICAgaWYgKChpX3dvbnRfc3VwcG9ydF9kZWNyeXB0ICYgdHlwZW1hc2soZXAt PnR5cGUpKSA9PSAwKQotICAgICAgICAgICAgICAgIGlmICgoc3RyX3NlbmRbc3RyX3N1cGxlbisr XSA9IGVwLT50eXBlKSA9PSBJQUMpCi0gICAgICAgICAgICAgICAgICAgIHN0cl9zZW5kW3N0cl9z dXBsZW4rK10gPSBJQUM7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGVwLT5pbml0KQotICAgICAg ICAgICAgKCplcC0+aW5pdCkoMCk7Ci0gICAgICAgICsrZXA7Ci0gICAgfQotICAgIHN0cl9zZW5k W3N0cl9zdXBsZW4rK10gPSBJQUM7Ci0gICAgc3RyX3NlbmRbc3RyX3N1cGxlbisrXSA9IFNFOwot fQotCi1WT0lECi0jaWZkZWYgQ0tfQU5TSUMKLWVuY3J5cHRfc2VuZF9zdXBwb3J0KFZPSUQpCi0j ZWxzZQotZW5jcnlwdF9zZW5kX3N1cHBvcnQoKQotI2VuZGlmCi17Ci0gICAgRW5jcnlwdGlvbnMg KmVwID0gZW5jcnlwdGlvbnM7Ci0KLSNpZmRlZiBDS19TU0wKLSAgICBpZiAoVEVMT1BUX1NCKFRF TE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKQotICAgICAgICByZXR1cm47Ci0j ZW5kaWYgLyogQ0tfU1NMICovCi0KLSAgICBzdHJfc2VuZFswXSA9IElBQzsKLSAgICBzdHJfc2Vu ZFsxXSA9IFNCOwotICAgIHN0cl9zZW5kWzJdID0gVEVMT1BUX0VOQ1JZUFRJT047Ci0gICAgc3Ry X3NlbmRbM10gPSBFTkNSWVBUX1NVUFBPUlQ7Ci0gICAgc3RyX3N1cGxlbiA9IDQ7Ci0KLSAgICB3 aGlsZSAoZXAtPnR5cGUpIHsKLSAgICAgICAgaWYgKCBFbmNyeXB0VHlwZSA9PSBFTkNUWVBFX0FO WSB8fAotICAgICAgICAgICAgIEVuY3J5cHRUeXBlID09IGVwLT50eXBlICkgewotI2lmZGVmIERF QlVHCi0gICAgICAgICAgICBpZiAoZW5jcnlwdF9kZWJ1Z19tb2RlKSB7Ci0gICAgICAgICAgICAg ICAgc3ByaW50ZihkYmdidWYsICI+Pj5JIHdpbGwgc3VwcG9ydCAlc1xuIiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICBFTkNUWVBFX05BTUUoZXAtPnR5cGUpKTsgICAgICAgICAgICAgICAvKiBz YWZlICovCi0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZW5jcnlwdF9zZW5kX3N1cHBvcnQi LGRiZ2J1ZiwwKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAgaWYgKChpX3dv bnRfc3VwcG9ydF9kZWNyeXB0ICYgdHlwZW1hc2soZXAtPnR5cGUpKSA9PSAwKQotICAgICAgICAg ICAgICAgIGlmICgoc3RyX3NlbmRbc3RyX3N1cGxlbisrXSA9IGVwLT50eXBlKSA9PSBJQUMpCi0g ICAgICAgICAgICAgICAgICAgIHN0cl9zZW5kW3N0cl9zdXBsZW4rK10gPSBJQUM7Ci0gICAgICAg IH0KLSAgICAgICAgKytlcDsKLSAgICB9Ci0gICAgc3RyX3NlbmRbc3RyX3N1cGxlbisrXSA9IElB QzsKLSAgICBzdHJfc2VuZFtzdHJfc3VwbGVuKytdID0gU0U7Ci0KLSAgICAvKgotICAgICogSWYg dGhlIHVzZXIgaGFzIHJlcXVlc3RlZCB0aGF0IGRlY3J5cHRpb24gc3RhcnQKLSAgICAqIGltbWVk aWF0bHksIHRoZW4gc2VuZCBhICJSRVFVRVNUIFNUQVJUIiBiZWZvcmUKLSAgICAqIHdlIG5lZ290 aWF0ZSB0aGUgdHlwZS4KLSAgICAqLwotICAgIGlmIChhdXRvZGVjcnlwdCkKLSAgICAgICAgZW5j cnlwdF9zZW5kX3JlcXVlc3Rfc3RhcnQoKTsKLQotICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8 IGRlYnNlcykgewotICAgICAgICBpbnQgaTsKLSAgICAgICAgc3ByaW50Zih0bl9tc2csIlRFTE5F VCBTRU5UIFNCICVzIFNVUFBPUlQgIiwKLSAgICAgICAgICAgICAgICAgVEVMT1BUKFRFTE9QVF9F TkNSWVBUSU9OKSk7ICAgICAgICAgICAgICAgICAgICAvKiBzYWZlICovCi0gICAgICAgIGZvciAo IGk9NDtpPHN0cl9zdXBsZW4tMjtpKysgKSB7Ci0gICAgICAgICAgICBpZiAoIHN0cl9zZW5kW2ld ID09IElBQyApIHsKLSAgICAgICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLCJJQUMgIixUTl9N U0dfTEVOKTsKLSAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg ICBja3N0cm5jYXQodG5fbXNnLEVOQ1RZUEVfTkFNRShzdHJfc2VuZFtpXSksVE5fTVNHX0xFTik7 Ci0gICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLCIgIixUTl9NU0dfTEVOKTsKLSAgICAgICAg fQotICAgICAgICBja3N0cm5jYXQodG5fbXNnLCJJQUMgU0UiLFROX01TR19MRU4pOwotICAgICAg ICBkZWJ1ZyhGMTAwLHRuX21zZywiIiwwKTsKLSAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMp IHRuX2RlYnVnKHRuX21zZyk7Ci0gICAgfQotI2lmZGVmIE9TMgotICAgIFJlcXVlc3RUZWxuZXRN dXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwotI2VuZGlmCi0gICAgdHRvbChzdHJfc2VuZCwg c3RyX3N1cGxlbik7Ci0jaWZkZWYgT1MyCi0gICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7Ci0jZW5k aWYKLQotICAgIHN0cl9zdXBsZW4gPSAwOwotfQotCi0vKgotICogQ2FsbGVkIHdoZW4gRU5DUllQ VCBTVVBQT1JUIGlzIHJlY2VpdmVkLgotICovCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotZW5jcnlw dF9zdXBwb3J0KHVuc2lnbmVkIGNoYXIgKl90eXBlbGlzdCwgaW50IF9jbnQpCi0jZWxzZQotZW5j cnlwdF9zdXBwb3J0KF90eXBlbGlzdCwgX2NudCkgdW5zaWduZWQgY2hhciAqIF90eXBlbGlzdDsg aW50IF9jbnQ7Ci0jZW5kaWYKLXsKLSAgICByZWdpc3RlciBpbnQgdHlwZSwgdXNlX3R5cGUgPSAw OwotICAgIHVuc2lnbmVkIGNoYXIgKiB0eXBlbGlzdCA9IF90eXBlbGlzdDsKLSAgICBpbnQgY250 ID0gX2NudDsKLSAgICBFbmNyeXB0aW9ucyAqZXA7Ci0KLSAgICBkZWJ1ZyhGMTExLCJlbmNyeXB0 X3N1cHBvcnQiLCJjbnQiLGNudCk7Ci0KLSAgLyoKLSAgICogRm9yZ2V0IGFueXRoaW5nIHRoZSBv dGhlciBzaWRlIGhhcyBwcmV2aW91c2x5IHRvbGQgdXMuCi0gICAqLwotICAgIHJlbW90ZV9zdXBw b3J0c19kZWNyeXB0ID0gMDsKLQotICAgIHdoaWxlIChjbnQtLSA+IDApIHsKLQlkZWJ1ZyhGMTAx LCJYWFggY250IiwiIixjbnQpOwotICAgICAgICB0eXBlID0gKnR5cGVsaXN0Kys7Ci0JZGVidWco RjEwMSwiWFhYIHR5cGUiLCIiLHR5cGUpOwotCWRlYnVnKEYxMDEsIlhYWCBFTkNUWVBFX0FOWSIs IiIsRU5DVFlQRV9BTlkpOwotICAgICAgICBpZiAoIEVuY3J5cHRUeXBlID09IEVOQ1RZUEVfQU5Z IHx8Ci0gICAgICAgICAgICAgRW5jcnlwdFR5cGUgPT0gdHlwZSApIHsKLSNpZmRlZiBERUJVRwot ICAgICAgICAgICAgaWYgKGVuY3J5cHRfZGVidWdfbW9kZSkgewotICAgICAgICAgICAgICAgIHNw cmludGYoZGJnYnVmLCAiPj4+UmVtb3RlIHN1cHBvcnRzICVzICglZClcbiIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgRU5DVFlQRV9OQU1FKHR5cGUpLCB0eXBlKTsgICAgICAgICAgICAgLyog c2FmZSAqLwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImVuY3J5cHRfc3VwcG9ydCIsZGJn YnVmLDApOwotICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgICAgICBpZiAoKHR5cGUgPCBF TkNUWVBFX0NOVCkgJiYKLSAgICAgICAgICAgICAgICAgKElfU1VQUE9SVF9FTkNSWVBUICYgdHlw ZW1hc2sodHlwZSkpKSB7Ci0gICAgICAgICAgICAgICAgcmVtb3RlX3N1cHBvcnRzX2RlY3J5cHQg fD0gdHlwZW1hc2sodHlwZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHVzZV90eXBlID09IDApCi0g ICAgICAgICAgICAgICAgICAgIHVzZV90eXBlID0gdHlwZTsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgfQotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJYWFggdXNlX3R5cGUiLCIiLHVzZV90eXBlKTsK LSAgICBpZiAodXNlX3R5cGUpIHsKLSAgICAgICAgZXAgPSBmaW5kZW5jcnlwdGlvbih1c2VfdHlw ZSk7Ci0gICAgICAgIGlmICghZXApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImVuY3J5cHRf c3VwcG9ydCIsImZpbmRlbmNyeXB0aW9uID09IE5VTEwiLHVzZV90eXBlKTsKLSAgICAgICAgICAg IHJldHVybigtMSk7Ci0gICAgICAgIH0KLQlkZWJ1ZyhGMTAwLCJYWFggZXAgbm90IE5VTEwiLCIi LDApOwotICAgICAgICB0eXBlID0gZXAtPnN0YXJ0ID8gKCplcC0+c3RhcnQpKERJUl9FTkNSWVBU LCAwKSA6IDA7Ci0JZGVidWcoRjEwMSwiWFhYIG5ldyB0eXBlIiwiIix0eXBlKTsKLSNpZmRlZiBE RUJVRwotICAgICAgICBpZiAoZW5jcnlwdF9kZWJ1Z19tb2RlKSB7Ci0gICAgICAgICAgICBzcHJp bnRmKGRiZ2J1ZiwgIj4+PigqZXAtPnN0YXJ0KSgpICVzIHJldHVybmVkICVkICglcylcbiIsCi0g ICAgICAgICAgICAgICAgICAgICBFTkNUWVBFX05BTUUodXNlX3R5cGUpLCB0eXBlLAotICAgICAg ICAgICAgICAgICAgICAgRU5DUllQVF9OQU1FKHR5cGUpKTsgICAgICAgICAgICAgICAgICAgICAg IC8qIHNhZmUgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImVuY3J5cHRfc3VwcG9ydCIsZGJn YnVmLDApOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgaWYgKHR5cGUgPCAwKSB7Ci0gICAg ICAgICAgICBkZWJ1ZyhGMTExLCJlbmNyeXB0X3N1cHBvcnQiLCJ0eXBlIDwgMCIsdHlwZSk7Ci0g ICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0gICAgICAgIGVuY3J5cHRfbW9kZSA9 IHVzZV90eXBlOwotICAgICAgICBpZiAodHlwZSA9PSAwKQotICAgICAgICAgICAgZW5jcnlwdF9z dGFydF9vdXRwdXQodXNlX3R5cGUpOwotICAgICAgICBkZWJ1ZyhGMTExLCJlbmNyeXB0X3N1cHBv cnQiLCJzdWNjZXNzIix0eXBlKTsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSAgICBkZWJ1 ZyhGMTExLCJlbmNyeXB0X3N1cHBvcnQiLCJmYWlsZWQiLHVzZV90eXBlKTsKLSAgICByZXR1cm4o LTEpOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotZW5jcnlwdF9pcyh1bnNpZ25lZCBjaGFy ICpkYXRhLCBpbnQgY250KQotI2Vsc2UKLWVuY3J5cHRfaXMoZGF0YSwgY250KSB1bnNpZ25lZCBj aGFyICpkYXRhOyBpbnQgY250OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgRW5jcnlw dGlvbnMgKmVwOwotICAgIHJlZ2lzdGVyIGludCB0eXBlLCByZXQ7Ci0KLSAgICBpZiAoLS1jbnQg PCAwKQotICAgICAgICByZXR1cm4oLTEpOwotICAgIHR5cGUgPSAqZGF0YSsrOwotICAgIGlmICh0 eXBlIDwgRU5DVFlQRV9DTlQpCi0gICAgICAgIHJlbW90ZV9zdXBwb3J0c19lbmNyeXB0IHw9IHR5 cGVtYXNrKHR5cGUpOwotICAgIGlmICghKGVwID0gZmluZGRlY3J5cHRpb24odHlwZSkpKSB7Ci0j aWZkZWYgREVCVUcKLSAgICAgICAgaWYgKGVuY3J5cHRfZGVidWdfbW9kZSkgewotICAgICAgICAg ICAgc3ByaW50ZihkYmdidWYsICI+Pj5lbmNyeXB0X2lzOiAgIgotICAgICAgICAgICAgICAgICAg ICAgIkNhbid0IGZpbmQgdHlwZSAlcyAoJWQpIGZvciBpbml0aWFsIG5lZ290aWF0aW9uXG4iLAot ICAgICAgICAgICAgICAgICAgICAgRU5DVFlQRV9OQU1FX09LKHR5cGUpCi0gICAgICAgICAgICAg ICAgICAgICA/IEVOQ1RZUEVfTkFNRSh0eXBlKSA6ICIodW5rbm93bikiLAotICAgICAgICAgICAg ICAgICAgICAgdHlwZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNh ZmUgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImVuY3J5cHRfaXMiLGRiZ2J1ZiwwKTsKLSAg ICAgICAgfQotI2VuZGlmCi0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIGlmICghZXAt PmlzKSB7Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgaWYgKGVuY3J5cHRfZGVidWdfbW9kZSkgewot ICAgICAgICAgICAgc3ByaW50ZihkYmdidWYsICI+Pj5lbmNyeXB0X2lzOiAgIgotICAgICAgICAg ICAgICAgICAgICAgIk5vIGluaXRpYWwgbmVnb3RpYXRpb24gbmVlZGVkIGZvciB0eXBlICVzICgl ZClcbiIsCi0gICAgICAgICAgICAgICAgICAgICBFTkNUWVBFX05BTUVfT0sodHlwZSkKLSAgICAg ICAgICAgICAgICAgICAgID8gRU5DVFlQRV9OQU1FKHR5cGUpIDogIih1bmtub3duKSIsCi0gICAg ICAgICAgICAgICAgICAgICB0eXBlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogc2FmZSAqLwotICAgICAgICAgICAgZGVidWcoRjExMCwiZW5jcnlwdF9pcyIsZGJnYnVm LDApOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgcmV0ID0gMDsKLSAgICB9IGVsc2Ugewot ICAgICAgICByZXQgPSAoKmVwLT5pcykoZGF0YSwgY250KTsKLSNpZmRlZiBERUJVRwotICAgICAg ICBpZiAoZW5jcnlwdF9kZWJ1Z19tb2RlKSB7Ci0gICAgICAgICAgICBzcHJpbnRmKGRiZ2J1Ziwg ImVuY3J5cHRfaXM6ICAiCi0gICAgICAgICAgICAgICAgICAgICAiKCplcC0+aXMpKCV4LCAlZCkg cmV0dXJuZWQgJXMoJWQpXG4iLCBkYXRhLCBjbnQsCi0gICAgICAgICAgICAgICAgICAgICAocmV0 IDwgMCkgPyAiRkFJTCAiIDoKLSAgICAgICAgICAgICAgICAgICAgIChyZXQgPT0gMCkgPyAiU1VD Q0VTUyAiIDogIk1PUkVfVE9fRE8gIiwgcmV0KTsgLyogc2FmZSAqLwotICAgICAgICAgICAgZGVi dWcoRjExMCwiZW5jcnlwdF9pcyIsZGJnYnVmLDApOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9 Ci0gICAgaWYgKHJldCA8IDApIHsKLSAgICAgICAgYXV0b2RlY3J5cHQgPSAwOwotICAgICAgICBy ZXR1cm4oLTEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlY3J5cHRfbW9kZSA9IHR5cGU7Ci0g ICAgICAgIGlmIChyZXQgPT0gMCAmJiBhdXRvZGVjcnlwdCkgewotICAgICAgICAgICAgZW5jcnlw dF9zZW5kX3JlcXVlc3Rfc3RhcnQoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4oMCk7 Ci19Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi1lbmNyeXB0X3JlcGx5KHVuc2lnbmVkIGNoYXIg KmRhdGEsIGludCBjbnQpCi0jZWxzZQotZW5jcnlwdF9yZXBseShkYXRhLCBjbnQpIHVuc2lnbmVk IGNoYXIgKmRhdGE7IGludCBjbnQ7Ci0jZW5kaWYKLXsKLSAgICBFbmNyeXB0aW9ucyAqZXA7Ci0g ICAgcmVnaXN0ZXIgaW50IHJldCwgdHlwZTsKLQotICAgIGlmICgtLWNudCA8IDApCi0gICAgICAg IHJldHVybigtMSk7Ci0gICAgdHlwZSA9ICpkYXRhKys7Ci0gICAgaWYgKCEoZXAgPSBmaW5kZW5j cnlwdGlvbih0eXBlKSkpIHsKLSNpZmRlZiBERUJVRwotICAgICAgICBpZiAoZW5jcnlwdF9kZWJ1 Z19tb2RlKSB7Ci0gICAgICAgICAgICBzcHJpbnRmKGRiZ2J1ZiwKLSAgICAgICAgICAgICAgICAg ICAgIj4+PkNhbid0IGZpbmQgdHlwZSAlcyAoJWQpIGZvciBpbml0aWFsIG5lZ290aWF0aW9uXG4i LAotICAgICAgICAgICAgICAgICAgICAgRU5DVFlQRV9OQU1FX09LKHR5cGUpCi0gICAgICAgICAg ICAgICAgICAgICA/IEVOQ1RZUEVfTkFNRSh0eXBlKSA6ICIodW5rbm93bikiLAotICAgICAgICAg ICAgICAgICAgICAgdHlwZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IHNhZmUgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImVuY3J5cHRfcmVwbHkiLGRiZ2J1Ziww KTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIGlm ICghZXAtPnJlcGx5KSB7Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgaWYgKGVuY3J5cHRfZGVidWdf bW9kZSkgewotICAgICAgc3ByaW50ZihkYmdidWYsICI+Pj5ObyBpbml0aWFsIG5lZ290aWF0aW9u IG5lZWRlZCBmb3IgdHlwZSAlcyAoJWQpXG4iLAotICAgICAgICAgICAgICAgRU5DVFlQRV9OQU1F X09LKHR5cGUpCi0gICAgICAgICAgICAgICA/IEVOQ1RZUEVfTkFNRSh0eXBlKSA6ICIodW5rbm93 bikiLAotICAgICAgICAgICAgICAgdHlwZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIHNhZmUgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImVuY3J5cHRf cmVwbHkiLGRiZ2J1ZiwwKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIHJldCA9IDA7Ci0g ICAgfSBlbHNlIHsKLSAgICAgICAgcmV0ID0gKCplcC0+cmVwbHkpKGRhdGEsIGNudCk7Ci0jaWZk ZWYgREVCVUcKLSAgICAgICAgaWYgKGVuY3J5cHRfZGVidWdfbW9kZSkgewotICAgICAgICAgICAg c3ByaW50ZihkYmdidWYsICIoKmVwLT5yZXBseSkoJXgsICVkKSByZXR1cm5lZCAlcyglZClcbiIs Ci0gICAgICAgICAgICAgICAgICAgICBkYXRhLCBjbnQsCi0gICAgICAgICAgICAgICAgICAgICAo cmV0IDwgMCkgPyAiRkFJTCAiIDoKLSAgICAgICAgICAgICAgICAgICAgIChyZXQgPT0gMCkgPyAi U1VDQ0VTUyAiIDogIk1PUkVfVE9fRE8gIiwgcmV0KTsgLyogc2FmZSAqLwotICAgICAgICAgICAg ZGVidWcoRjExMCwiZW5jcnlwdF9yZXBseSIsZGJnYnVmLDApOwotICAgICAgICB9Ci0jZW5kaWYK LSAgICB9Ci0jaWZkZWYgREVCVUcKLSAgICBpZiAoZW5jcnlwdF9kZWJ1Z19tb2RlKSB7Ci0gICAg ICAgIHNwcmludGYoZGJnYnVmLCAiPj4+ZW5jcnlwdF9yZXBseSByZXR1cm5lZCAlZFxuIiwgcmV0 KTsgLyogc2FmZSAqLwotICAgICAgICBkZWJ1ZyhGMTEwLCJlbmNyeXB0X3JlcGx5IixkYmdidWYs MCk7Ci0gICAgfQotI2VuZGlmCi0gICAgaWYgKHJldCA8IDApIHsKLSAgICAgICAgYXV0b2VuY3J5 cHQgPSAwOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGVuY3J5 cHRfbW9kZSA9IHR5cGU7Ci0gICAgICAgIGlmIChyZXQgPT0gMCAmJiBhdXRvZW5jcnlwdCkKLSAg ICAgICAgICAgIGVuY3J5cHRfc3RhcnRfb3V0cHV0KHR5cGUpOwotICAgIH0KLSAgICByZXR1cm4o MCk7Ci19Ci0KLS8qCi0gKiBDYWxsZWQgd2hlbiBhIEVOQ1JZUFQgU1RBUlQgY29tbWFuZCBpcyBy ZWNlaXZlZC4KLSAqLwotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWVuY3J5cHRfc3RhcnQodW5zaWdu ZWQgY2hhciAqZGF0YSwgaW50IGNudCkKLSNlbHNlCi1lbmNyeXB0X3N0YXJ0KGRhdGEsIGNudCkg dW5zaWduZWQgY2hhciAqZGF0YTsgaW50IGNudDsKLSNlbmRpZgotewotICAgIEVuY3J5cHRpb25z ICplcDsKLQotICAgIGlmICghZGVjcnlwdF9tb2RlKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICog U29tZXRoaW5nIGlzIHdyb25nLiAgV2Ugc2hvdWxkIG5vdCBnZXQgYSBTVEFSVAotICAgICAgICAq IGNvbW1hbmQgd2l0aG91dCBoYXZpbmcgYWxyZWFkeSBwaWNrZWQgb3VyCi0gICAgICAgICogZGVj cnlwdGlvbiBzY2hlbWUuICBTZW5kIGEgUkVRVUVTVC1FTkQgdG8KLSAgICAgICAgKiBhdHRlbXB0 IHRvIGNsZWFyIHRoZSBjaGFubmVsLi4uCi0gICAgICAgICovCi0gICAgICAgIGVuY3J5cHRfc2Vu ZF9yZXF1ZXN0X2VuZCgpOwotICAgICAgICBwcmludGYoIkF1dGhlbnRpY2F0aW9uIGVycm9yIVxu JXNcbiIsCi0gICAgICAgICAgICAgICAgIldhcm5pbmcsIENhbm5vdCBkZWNyeXB0IGlucHV0IHN0 cmVhbSEhISIpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLQotICAgIGlmIChlcCA9IGZp bmRkZWNyeXB0aW9uKGRlY3J5cHRfbW9kZSkpIHsKLSAgICAgICAgaWYgKCBkZWNyeXB0X2lucHV0 ICE9IGVwLT5pbnB1dCApIHsKLSAgICAgICAgICAgIGRlY3J5cHRfaW5wdXQgPSBlcC0+aW5wdXQ7 Ci0gICAgICAgICAgICBFbmNyeXB0S1NHbG9iYWxIYWNrLT5kZWNyeXB0ID0gZGVjcnlwdF9rc19z dHJlYW07Ci0gICAgICAgICAgICBFbmNyeXB0S1NHbG9iYWxIYWNrLT5kZWNyeXB0X3R5cGUgPSBl cC0+dHlwZTsKLQotICAgICAgICAgICAgaWYgKGVuY3J5cHRfdmVyYm9zZSkgewotICAgICAgICAg ICAgICAgIHNwcmludGYoZGJnYnVmLCAiSW5wdXQgaXMgbm93IGRlY3J5cHRlZCB3aXRoIHR5cGUg JXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgIEVOQ1RZUEVfTkFNRShkZWNyeXB0X21vZGUp KTsgICAgICAgICAgIC8qIHNhZmUgKi8KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJlbmNy eXB0X3N0YXJ0IixkYmdidWYsMCk7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIlc1xuIixkYmdi dWYpOwotICAgICAgICAgICAgfQotI2lmZGVmIERFQlVHCi0gICAgICAgICAgICBpZiAoZW5jcnlw dF9kZWJ1Z19tb2RlKSB7Ci0gICAgICAgICAgICAgICAgc3ByaW50ZihkYmdidWYsICI+Pj5TdGFy dCB0byBkZWNyeXB0IGlucHV0IHdpdGggdHlwZSAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgRU5DVFlQRV9OQU1FKGRlY3J5cHRfbW9kZSkpOyAgICAgICAgICAgLyogc2FmZSAqLwotICAg ICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX2NycCIsZGJnYnVmLDApOwotICAgICAgICAgICAg fQotI2VuZGlmCi0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBjaGFyIGJ1ZlsxMDI0 XTsKLSAgICAgICAgc3ByaW50ZihidWYsICJXYXJuaW5nLCBDYW5ub3QgZGVjcnlwdCB0eXBlICVz ICglZCkhISEiLAotICAgICAgICAgICAgICAgICAgRU5DVFlQRV9OQU1FX09LKGRlY3J5cHRfbW9k ZSkKLSAgICAgICAgICAgICAgICAgID8gRU5DVFlQRV9OQU1FKGRlY3J5cHRfbW9kZSkgOiAiKHVu a25vd24pIiwKLSAgICAgICAgICAgICAgICAgIGRlY3J5cHRfbW9kZSk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBzYWZlICovCi0gICAgICAgIHByaW50ZigiQXV0aGVudGljYXRp b24gZXJyb3IhXG4lc1xuIixidWYpOwotICAgICAgICBlbmNyeXB0X3NlbmRfcmVxdWVzdF9lbmQo KTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgcmV0dXJuKDApOwotfQotCi1pbnQK LSNpZmRlZiBDS19BTlNJQwotZW5jcnlwdF9kb250X3N1cHBvcnQoaW50IHR5cGUpCi0jZWxzZQot ZW5jcnlwdF9kb250X3N1cHBvcnQodHlwZSkgaW50IHR5cGU7Ci0jZW5kaWYKLXsKLSAgICBpX3dv bnRfc3VwcG9ydF9lbmNyeXB0IHw9IHR5cGVtYXNrKHR5cGUpOwotICAgIGlfd29udF9zdXBwb3J0 X2RlY3J5cHQgfD0gdHlwZW1hc2sodHlwZSk7Ci0gICAgcmV0dXJuKDApOwotfQotCi1pbnQKLSNp ZmRlZiBDS19BTlNJQwotZW5jcnlwdF9zZXNzaW9uX2tleShTZXNzaW9uX0tleSAqa2V5LCBpbnQg c2VydmVyKQotI2Vsc2UKLWVuY3J5cHRfc2Vzc2lvbl9rZXkoa2V5LCBzZXJ2ZXIpIFNlc3Npb25f S2V5ICprZXk7IGludCBzZXJ2ZXI7Ci0jZW5kaWYKLXsKLSAgICBFbmNyeXB0aW9ucyAqZXAgPSBl bmNyeXB0aW9uczsKLQotICAgIGlmIChoYXZlc2Vzc2lvbmtleSkKLSAgICAgICAgcmV0dXJuKDAp OwotCi0gICAgaGF2ZXNlc3Npb25rZXkgPSAxOwotCi0gICAgd2hpbGUgKGVwLT50eXBlKSB7Ci0g ICAgICAgIGRlYnVnKEYxMTEsImVuY3J5cHRfc2Vzc2lvbl9rZXkiLGVwLT5uYW1lLGVwLT50eXBl KTsKLSAgICAgICAgaWYgKGVwLT5zZXNzaW9uKSB7Ci0gICAgICAgICAgICBpZiAoKCplcC0+c2Vz c2lvbikoa2V5LCBzZXJ2ZXIpIDwgMCkgewotICAgICAgICAgICAgICAgIGlfd29udF9zdXBwb3J0 X2VuY3J5cHQgfD0gdHlwZW1hc2soZXAtPnR5cGUpOwotICAgICAgICAgICAgICAgIGlfd29udF9z dXBwb3J0X2RlY3J5cHQgfD0gdHlwZW1hc2soZXAtPnR5cGUpOwotICAgICAgICAgICAgfQotICAg ICAgICB9Ci0gICAgICAgICsrZXA7Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsImVuY3J5cHRfc2Vz c2lvbl9rZXkgKGRvbmUpIixlcC0+bmFtZSxlcC0+dHlwZSk7Ci0gICAgcmV0dXJuKDApOwotfQot Ci0vKgotICogQ2FsbGVkIHdoZW4gRU5DUllQVCBFTkQgaXMgcmVjZWl2ZWQuCi0gKi8KLWludAot I2lmZGVmIENLX0FOU0lDCi1lbmNyeXB0X2VuZChWT0lEKQotI2Vsc2UKLWVuY3J5cHRfZW5kKCkK LSNlbmRpZgotewotICAgIGRlY3J5cHRfaW5wdXQgPSBOVUxMOwotICAgIEVuY3J5cHRLU0dsb2Jh bEhhY2stPmRlY3J5cHQgPSBOVUxMOwotICAgIEVuY3J5cHRLU0dsb2JhbEhhY2stPmRlY3J5cHRf dHlwZSA9IEVOQ1RZUEVfQU5ZOwotI2lmZGVmIERFQlVHCi0gICAgaWYgKGVuY3J5cHRfZGVidWdf bW9kZSkgewotICAgICAgICBzcHJpbnRmKGRiZ2J1ZiwgIj4+PklucHV0IGlzIGJhY2sgdG8gY2xl YXIgdGV4dCIpOyAgICAgIC8qIHNhZmUgKi8KLSAgICAgICAgZGVidWcoRjExMCwiZW5jcnlwdF9l bmQiLGRiZ2J1ZiwwKTsKLSAgICB9Ci0jZW5kaWYKLSAgICBpZiAoZW5jcnlwdF92ZXJib3NlKSB7 Ci0gICAgICAgIHNwcmludGYoZGJnYnVmLCAiSW5wdXQgaXMgbm93IGNsZWFyIHRleHQiKTsgICAg ICAgICAgICAgLyogc2FmZSAqLwotICAgICAgICBkZWJ1ZyhGMTEwLCJlbmNyeXB0X2VuZCIsZGJn YnVmLDApOwotICAgICAgICBwcmludGYoIiVzXG4iLGRiZ2J1Zik7Ci0gICAgfQotICAgIHJldHVy bigwKTsKLX0KLQotLyoKLSAqIENhbGxlZCB3aGVuIEVOQ1JZUFQgUkVRVUVTVC1FTkQgaXMgcmVj ZWl2ZWQuCi0gKi8KLWludAotI2lmZGVmIENLX0FOU0lDCi1lbmNyeXB0X3JlcXVlc3RfZW5kKFZP SUQpCi0jZWxzZQotZW5jcnlwdF9yZXF1ZXN0X2VuZCgpCi0jZW5kaWYKLXsKLSAgICBlbmNyeXB0 X3NlbmRfZW5kKCk7Ci0gICAgcmV0dXJuKDApOwotfQotCi0vKgotICogQ2FsbGVkIHdoZW4gRU5D UllQVCBSRVFVRVNULVNUQVJUIGlzIHJlY2VpdmVkLiAgSWYgd2UgcmVjZWl2ZQotICogdGhpcyBi ZWZvcmUgYSB0eXBlIGlzIHBpY2tlZCwgdGhlbiB0aGF0IGluZGljYXRlcyB0aGF0IHRoZQotICog b3RoZXIgc2lkZSB3YW50cyB1cyB0byBzdGFydCBlbmNyeXB0aW5nIGRhdGEgYXMgc29vbiBhcyB3 ZQotICogY2FuLgotICovCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotZW5jcnlwdF9yZXF1ZXN0X3N0 YXJ0KFZPSUQpCi0jZWxzZQotZW5jcnlwdF9yZXF1ZXN0X3N0YXJ0KCkKLSNlbmRpZgotewotICAg IGlmIChlbmNyeXB0X21vZGUgIT0gMCkKLSAgICAgICAgZW5jcnlwdF9zdGFydF9vdXRwdXQoZW5j cnlwdF9tb2RlKTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHN0 cl9rZXlpZFsoTUFYS0VZTEVOKjIpKzVdID0gewotICAgIElBQywgU0IsIFRFTE9QVF9FTkNSWVBU SU9OCi19OwotX1BST1RPVFlQKGludCBlbmNyeXB0X2tleWlkLChzdHJ1Y3Qga2V5X2luZm8gKix1 bnNpZ25lZCBjaGFyICosaW50KSk7Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi1lbmNyeXB0X2Vu Y19rZXlpZCh1bnNpZ25lZCBjaGFyICprZXlpZCwgaW50IGxlbikKLSNlbHNlCi1lbmNyeXB0X2Vu Y19rZXlpZChrZXlpZCwgbGVuKSB1bnNpZ25lZCBjaGFyICprZXlpZDsgaW50IGxlbjsKLSNlbmRp ZgotewotICAgIHJldHVybihlbmNyeXB0X2tleWlkKCZraVsxXSwga2V5aWQsIGxlbikpOwotfQot Ci1pbnQKLSNpZmRlZiBDS19BTlNJQwotZW5jcnlwdF9kZWNfa2V5aWQodW5zaWduZWQgY2hhciAq a2V5aWQsIGludCBsZW4pCi0jZWxzZQotZW5jcnlwdF9kZWNfa2V5aWQoa2V5aWQsIGxlbikgdW5z aWduZWQgY2hhciAqa2V5aWQ7IGludCBsZW47Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAg ICByZXR1cm4oZW5jcnlwdF9rZXlpZCgma2lbMF0sIGtleWlkLCBsZW4pKTsKLX0KLQotaW50Ci0j aWZkZWYgQ0tfQU5TSUMKLWVuY3J5cHRfa2V5aWQoc3RydWN0IGtleV9pbmZvICprcCwgdW5zaWdu ZWQgY2hhciAqa2V5aWQsIGludCBsZW4pCi0jZWxzZQotZW5jcnlwdF9rZXlpZChrcCwga2V5aWQs IGxlbikKLSAgICBzdHJ1Y3Qga2V5X2luZm8gKmtwOyB1bnNpZ25lZCBjaGFyICprZXlpZDsgaW50 IGxlbjsKLSNlbmRpZgotewotICAgIEVuY3J5cHRpb25zICplcDsKLSAgICBpbnQgZGlyID0ga3At PmRpcjsKLSAgICByZWdpc3RlciBpbnQgcmV0ID0gMDsKLQotICAgIGlmICghKGVwID0gKCprcC0+ Z2V0Y3J5cHQpKCprcC0+bW9kZXApKSkgewotICAgICAgICBpZiAobGVuID09IDApCi0gICAgICAg ICAgICByZXR1cm4oLTEpOwotICAgICAgICBrcC0+a2V5bGVuID0gMDsKLSAgICB9IGVsc2UgaWYg KGxlbiA9PSAwIHx8IGxlbiA+IE1BWEtFWUxFTikgewotICAgICAgICAvKgotICAgICAgICAqIEVt cHR5IG9wdGlvbiBvciBLZXkgdG9vIGxvbmcsIGluZGljYXRlcyBhIGZhaWx1cmUuCi0gICAgICAg ICovCi0gICAgICAgIGlmIChrcC0+a2V5bGVuID09IDApCi0gICAgICAgICAgICByZXR1cm4oLTEp OwotICAgICAgICBrcC0+a2V5bGVuID0gMDsKLSAgICAgICAgaWYgKGVwLT5rZXlpZCkKLSAgICAg ICAgICAgICh2b2lkKSgqZXAtPmtleWlkKShkaXIsIGtwLT5rZXlpZCwgJmtwLT5rZXlsZW4pOwot Ci0gICAgfSBlbHNlIGlmICgobGVuICE9IGtwLT5rZXlsZW4pIHx8IChtZW1jbXAoa2V5aWQsIGtw LT5rZXlpZCwgbGVuKSAhPSAwKSkgewotICAgICAgICAvKgotICAgICAgICAqIExlbmd0aCBvciBj b250ZW50cyBhcmUgZGlmZmVyZW50Ci0gICAgICAgICovCi0gICAgICAgIGtwLT5rZXlsZW4gPSBs ZW47Ci0gICAgICAgIG1lbWNweShrcC0+a2V5aWQsIGtleWlkLCBsZW4pOyAgICAgICAgICAvKiBs ZW5ndGggPCBNQVhLRVlMRU4gKi8KLSAgICAgICAgaWYgKGVwLT5rZXlpZCkKLSAgICAgICAgICAg ICh2b2lkKSgqZXAtPmtleWlkKShkaXIsIGtwLT5rZXlpZCwgJmtwLT5rZXlsZW4pOwotICAgIH0g ZWxzZSB7Ci0gICAgICAgIGlmIChlcC0+a2V5aWQpCi0gICAgICAgICAgICByZXQgPSAoKmVwLT5r ZXlpZCkoZGlyLCBrcC0+a2V5aWQsICZrcC0+a2V5bGVuKTsKLSAgICAgICAgaWYgKChyZXQgPT0g MCkgJiYgKGRpciA9PSBESVJfRU5DUllQVCkgJiYgYXV0b2VuY3J5cHQpCi0gICAgICAgICAgICBl bmNyeXB0X3N0YXJ0X291dHB1dCgqa3AtPm1vZGVwKTsKLSAgICAgICAgcmV0dXJuKDApOwotICAg IH0KLQotICAgIGVuY3J5cHRfc2VuZF9rZXlpZChkaXIsIGtwLT5rZXlpZCwga3AtPmtleWxlbiwg MCk7Ci0gICAgcmV0dXJuKDApOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotZW5jcnlwdF9z ZW5kX2tleWlkKGludCBkaXIsIHVuc2lnbmVkIGNoYXIgKmtleWlkLCBpbnQga2V5bGVuLCBpbnQg c2F2ZWl0KQotI2Vsc2UKLWVuY3J5cHRfc2VuZF9rZXlpZChkaXIsIGtleWlkLCBrZXlsZW4sIHNh dmVpdCkKLSAgICAgaW50IGRpcjsgdW5zaWduZWQgY2hhciAqa2V5aWQ7IGludCBrZXlsZW47IGlu dCBzYXZlaXQ7Ci0jZW5kaWYKLXsKLSAgICB1bnNpZ25lZCBjaGFyICpzdHJwOwotCi0jaWZkZWYg Q0tfU1NMCi0gICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVf Zm9sbG93cykKLSAgICAgICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0gICAg c3RyX2tleWlkWzNdID0gKGRpciA9PSBESVJfRU5DUllQVCkKLSAgICAgICAgPyBFTkNSWVBUX0VO Q19LRVlJRCA6IEVOQ1JZUFRfREVDX0tFWUlEOwotICAgIGlmIChzYXZlaXQgJiYga2V5bGVuIDw9 IE1BWEtFWUxFTikgewotICAgICAgICBzdHJ1Y3Qga2V5X2luZm8gKmtwID0gJmtpWyhkaXIgPT0g RElSX0VOQ1JZUFQpID8gMCA6IDFdOwotICAgICAgICBtZW1jcHkoa3AtPmtleWlkLCBrZXlpZCwg a2V5bGVuKTsKLSAgICAgICAga3AtPmtleWxlbiA9IGtleWxlbjsKLSAgICB9Ci0KLSAgICBmb3Ig KHN0cnAgPSAmc3RyX2tleWlkWzRdOyBrZXlsZW4gPiAwOyAtLWtleWxlbikgewotICAgICAgICBp ZiAoKCpzdHJwKysgPSAqa2V5aWQrKykgPT0gSUFDKQotICAgICAgICAgICAgKnN0cnArKyA9IElB QzsKLSAgICB9Ci0gICAgKnN0cnArKyA9IElBQzsKLSAgICAqc3RycCsrID0gU0U7Ci0KLSAgICBp ZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgaW50IGk7Ci0gICAgICAg IHNwcmludGYodG5fbXNnLCJURUxORVQgU0VOVCBTQiAlcyAlcyAiLAotICAgICAgICAgICAgICAg ICBURUxPUFQoVEVMT1BUX0VOQ1JZUFRJT04pLAotICAgICAgICAgICAgICAgICAoZGlyID09IERJ Ul9FTkNSWVBUKSA/ICJFTkMtS0VZSUQiIDogIkRFQy1LRVlJRCIpOyAvKiBzYWZlICovCi0gICAg ICAgIHRuX2hleCgoQ0hBUiAqKXRuX21zZyxUTl9NU0dfTEVOLCZzdHJfa2V5aWRbNF0sc3RycC1z dHJfa2V5aWQtMi00KTsKLSAgICAgICAgY2tzdHJuY2F0KHRuX21zZywiSUFDIFNFIixUTl9NU0df TEVOKTsKLSAgICAgICAgZGVidWcoRjEwMCx0bl9tc2csIiIsMCk7Ci0gICAgICAgIGlmICh0bl9k ZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2cpOwotICAgIH0KLSNpZmRlZiBPUzIKLSAgICBS ZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNlbmRpZgotICAgIHR0 b2woc3RyX2tleWlkLCBzdHJwIC0gc3RyX2tleWlkKTsKLSNpZmRlZiBPUzIKLSAgICBSZWxlYXNl VGVsbmV0TXV0ZXgoKTsKLSNlbmRpZgotICAgIHJldHVybigwKTsKLX0KLQotVk9JRAotI2lmZGVm IENLX0FOU0lDCi1lbmNyeXB0X2F1dG8oaW50IG9uKQotI2Vsc2UKLWVuY3J5cHRfYXV0byhvbikg aW50IG9uOwotI2VuZGlmCi17Ci0gICAgaWYgKG9uIDwgMCkKLSAgICAgICAgYXV0b2VuY3J5cHQg Xj0gMTsKLSAgICBlbHNlCi0gICAgICAgIGF1dG9lbmNyeXB0ID0gb24gPyAxIDogMDsKLX0KLQot Vk9JRAotI2lmZGVmIENLX0FOU0lDCi1kZWNyeXB0X2F1dG8oaW50IG9uKQotI2Vsc2UKLWRlY3J5 cHRfYXV0byhvbikgaW50IG9uOwotI2VuZGlmCi17Ci0gICAgaWYgKG9uIDwgMCkKLSAgICAgICAg YXV0b2RlY3J5cHQgXj0gMTsKLSAgICBlbHNlCi0gICAgICAgIGF1dG9kZWNyeXB0ID0gb24gPyAx IDogMDsKLX0KLQotVk9JRAotI2lmZGVmIENLX0FOU0lDCi1lbmNyeXB0X3N0YXJ0X291dHB1dChp bnQgdHlwZSkKLSNlbHNlCi1lbmNyeXB0X3N0YXJ0X291dHB1dCh0eXBlKSBpbnQgdHlwZTsKLSNl bmRpZgotewotICAgIEVuY3J5cHRpb25zICplcDsKLSAgICByZWdpc3RlciB1bnNpZ25lZCBjaGFy ICpwOwotICAgIHJlZ2lzdGVyIGludCBpOwotCi0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKFRFTE9Q VF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykKLSAgICAgICAgcmV0 dXJuOwotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0gICAgaWYgKCEoZXAgPSBmaW5kZW5jcnlwdGlv bih0eXBlKSkpIHsKLSNpZmRlZiBERUJVRwotICAgICAgICBpZiAoZW5jcnlwdF9kZWJ1Z19tb2Rl KSB7Ci0gICAgICAgICAgICBzcHJpbnRmKGRiZ2J1ZiwgIj4+PkNhbid0IGVuY3J5cHQgd2l0aCB0 eXBlICVzICglZClcbiIsCi0gICAgICAgICAgICAgICAgICAgICBFTkNUWVBFX05BTUVfT0sodHlw ZSkKLSAgICAgICAgICAgICAgICAgICAgID8gRU5DVFlQRV9OQU1FKHR5cGUpIDogIih1bmtub3du KSIsCi0gICAgICAgICAgICAgICAgICAgICB0eXBlKTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogc2FmZSAqLwotICAgICAgICAgICAgZGVidWcoRjExMCwiZW5jcnlwdF9z dGFydF9vdXRwdXQiLGRiZ2J1ZiwwKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIHJldHVy bjsKLSAgICB9Ci0gICAgaWYgKGVwLT5zdGFydCkgewotICAgICAgICBpID0gKCplcC0+c3RhcnQp KERJUl9FTkNSWVBULCAwKTsKLSNpZmRlZiBERUJVRwotICAgICAgICBpZiAoZW5jcnlwdF9kZWJ1 Z19tb2RlKSB7Ci0gICAgICAgICAgICBzcHJpbnRmKGRiZ2J1ZiwgIj4+PkVuY3J5cHQgc3RhcnQ6 ICVzICglZCkgJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAoaSA8IDApID8gImZhaWxlZCIg OgotICAgICAgICAgICAgICAgICAgICAgImluaXRpYWwgbmVnb3RpYXRpb24gaW4gcHJvZ3Jlc3Mi LAotICAgICAgICAgICAgICAgICAgICAgaSwgRU5DVFlQRV9OQU1FKHR5cGUpKTsgICAgICAgICAg ICAgICAgICAgIC8qIHNhZmUgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImVuY3J5cHRfc3Rh cnRfb3V0cHV0IixkYmdidWYsMCk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBpZiAoaSkK LSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIGVuY3J5cHRfb3V0cHV0ICE9 IGVwLT5vdXRwdXQgKSB7Ci0gICAgICAgIHAgPSBzdHJfc3RhcnQ7Ci0gICAgICAgICpwKysgPSBJ QUM7Ci0gICAgICAgICpwKysgPSBTQjsKLSAgICAgICAgKnArKyA9IFRFTE9QVF9FTkNSWVBUSU9O OwotICAgICAgICAqcCsrID0gRU5DUllQVF9TVEFSVDsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8 IGtpWzBdLmtleWxlbjsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoKCAqcCsrID0ga2lbMF0ua2V5 aWRbaV0pID09IElBQykKLSAgICAgICAgICAgICAgICAqcCsrID0gSUFDOwotICAgICAgICB9Ci0g ICAgICAgICpwKysgPSBJQUM7Ci0gICAgICAgICpwKysgPSBTRTsKLQotICAgICAgICBpZiAoZGVi bG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgICAgIGludCBpOwotICAgICAgICAg ICAgc3ByaW50Zih0bl9tc2csIlRFTE5FVCBTRU5UIFNCICVzIFNUQVJUICIsCi0gICAgICAgICAg ICAgICAgICAgICBURUxPUFQoVEVMT1BUX0VOQ1JZUFRJT04pKTsgICAgICAgICAgICAgICAgLyog c2FmZSAqLwotICAgICAgICAgICAgdG5faGV4KChDSEFSICopdG5fbXNnLFROX01TR19MRU4sJnN0 cl9zdGFydFs0XSxwLXN0cl9zdGFydC0yLTQpOwotICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21z ZywiSUFDIFNFIixUTl9NU0dfTEVOKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsdG5fbXNnLCIi LDApOwotICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZyk7 Ci0gICAgICAgIH0KLSNpZmRlZiBPUzIKLSAgICAgICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1f SU5ERUZJTklURV9XQUlUICk7Ci0jZW5kaWYKLSAgICAgICAgdHRvbChzdHJfc3RhcnQsIHAgLSBz dHJfc3RhcnQpOwotI2lmZGVmIE9TMgotICAgICAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNl bmRpZgotCi0gIC8qCi0gICAqIElmIHdlIGFyZSBhbHJlYWR5IGVuY3J5cHRpbmcgaW4gc29tZSBt b2RlLCB0aGVuCi0gICAqIGVuY3J5cHQgdGhlIHJpbmcgKHdoaWNoIGluY2x1ZGVzIG91ciByZXF1 ZXN0KSBpbgotICAgKiB0aGUgb2xkIG1vZGUsIG1hcmsgaXQgYWxsIGFzICJjbGVhciB0ZXh0IiBh bmQgdGhlbgotICAgKiBzd2l0Y2ggdG8gdGhlIG5ldyBtb2RlLgotICAgKi8KLSAgICAgICAgZW5j cnlwdF9vdXRwdXQgPSBlcC0+b3V0cHV0OwotICAgICAgICBFbmNyeXB0S1NHbG9iYWxIYWNrLT5l bmNyeXB0ID0gZW5jcnlwdF9rc19zdHJlYW07Ci0gICAgICAgIEVuY3J5cHRLU0dsb2JhbEhhY2st PmVuY3J5cHRfdHlwZSA9IHR5cGU7Ci0gICAgICAgIGVuY3J5cHRfbW9kZSA9IHR5cGU7Ci0jaWZk ZWYgREVCVUcKLSAgICAgICAgaWYgKGVuY3J5cHRfZGVidWdfbW9kZSkgewotICAgICAgICAgICAg c3ByaW50ZihkYmdidWYsICI+Pj5TdGFydGVkIHRvIGVuY3J5cHQgb3V0cHV0IHdpdGggdHlwZSAl cyIsCi0gICAgICAgICAgICAgICAgICAgICBFTkNUWVBFX05BTUUodHlwZSkpOyAgICAgICAgICAg ICAgICAgICAgICAgLyogc2FmZSAqLwotICAgICAgICAgICAgZGVidWcoRjExMCwiZW5jcnlwdF9z dGFydF9vdXRwdXQiLGRiZ2J1ZiwwKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIGlmIChl bmNyeXB0X3ZlcmJvc2UpIHsKLSAgICAgICAgICAgIHNwcmludGYoZGJnYnVmLCAiT3V0cHV0IGlz IG5vdyBlbmNyeXB0ZWQgd2l0aCB0eXBlICVzIiwKLSAgICAgICAgICAgICAgICAgICAgIEVOQ1RZ UEVfTkFNRSh0eXBlKSk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBzYWZlICovCi0gICAgICAg ICAgICBkZWJ1ZyhGMTEwLCJlbmNyeXB0X3N0YXJ0X291dHB1dCIsZGJnYnVmLDApOwotICAgICAg ICAgICAgcHJpbnRmKCIlc1xuIixkYmdidWYpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1WT0lE Ci0jaWZkZWYgQ0tfQU5TSUMKLWVuY3J5cHRfc2VuZF9lbmQoVk9JRCkKLSNlbHNlCi1lbmNyeXB0 X3NlbmRfZW5kKCkKLSNlbmRpZgotewotI2lmZGVmIENLX1NTTAotICAgIGlmIChURUxPUFRfU0Io VEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpCi0gICAgICAgIHJldHVybjsK LSNlbmRpZiAvKiBDS19TU0wgKi8KLQotICAgIGlmICghZW5jcnlwdF9vdXRwdXQpCi0gICAgICAg IHJldHVybjsKLQotICAgIHN0cl9lbmRbMF0gPSBJQUM7Ci0gICAgc3RyX2VuZFsxXSA9IFNCOwot ICAgIHN0cl9lbmRbMl0gPSBURUxPUFRfRU5DUllQVElPTjsKLSAgICBzdHJfZW5kWzNdID0gRU5D UllQVF9FTkQ7Ci0gICAgc3RyX2VuZFs0XSA9IElBQzsKLSAgICBzdHJfZW5kWzVdID0gU0U7Ci0K LSAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgaW50IGk7Ci0g ICAgICAgIHNwcmludGYodG5fbXNnLCJURUxORVQgU0VOVCBTQiAlcyBFTkQgSUFDIFNFIiwKLSAg ICAgICAgICAgICAgICAgVEVMT1BUKFRFTE9QVF9FTkNSWVBUSU9OKSk7ICAgICAgICAgICAgICAg ICAgICAvKiBzYWZlICovCi0gICAgICAgIGRlYnVnKEYxMDAsdG5fbXNnLCIiLDApOwotICAgICAg ICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnKTsKLSAgICB9Ci0jaWZkZWYg T1MyCi0gICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Ci0jZW5k aWYKLSAgICB0dG9sKHN0cl9lbmQsIHNpemVvZihzdHJfZW5kKSk7Ci0jaWZkZWYgT1MyCi0gICAg UmVsZWFzZVRlbG5ldE11dGV4KCk7Ci0jZW5kaWYKLQotICAgIGVuY3J5cHRfb3V0cHV0ID0gMDsK LSAgICBFbmNyeXB0S1NHbG9iYWxIYWNrLT5lbmNyeXB0ID0gTlVMTDsKLSAgICBFbmNyeXB0S1NH bG9iYWxIYWNrLT5lbmNyeXB0X3R5cGUgPSBFTkNUWVBFX0FOWTsKLSNpZmRlZiBERUJVRwotICAg IGlmIChlbmNyeXB0X2RlYnVnX21vZGUpIHsKLSAgICAgICAgc3ByaW50ZihkYmdidWYsICI+Pj5P dXRwdXQgaXMgYmFjayB0byBjbGVhciB0ZXh0Iik7ICAgICAvKiBzYWZlICovCi0gICAgICAgIGRl YnVnKEYxMTAsImVuY3J5cHRfc2VuZF9lbmQiLGRiZ2J1ZiwwKTsKLSAgICB9Ci0jZW5kaWYKLSAg ICBpZiAoZW5jcnlwdF92ZXJib3NlKSB7Ci0gICAgICAgIHNwcmludGYoZGJnYnVmLCAiT3V0cHV0 IGlzIG5vdyBjbGVhciB0ZXh0Iik7ICAgICAgICAgICAgLyogc2FmZSAqLwotICAgICAgICBkZWJ1 ZyhGMTEwLCJlbmNyeXB0X3NlbmRfZW5kIixkYmdidWYsMCk7Ci0gICAgICAgIHByaW50ZigiJXNc biIsZGJnYnVmKTsKLSAgICB9Ci19Ci0KLVZPSUQKLSNpZmRlZiBDS19BTlNJQwotZW5jcnlwdF9z ZW5kX3JlcXVlc3Rfc3RhcnQoVk9JRCkKLSNlbHNlCi1lbmNyeXB0X3NlbmRfcmVxdWVzdF9zdGFy dCgpCi0jZW5kaWYKLXsKLSAgICByZWdpc3RlciB1bnNpZ25lZCBjaGFyICpwOwotICAgIHJlZ2lz dGVyIGludCBpOwotCi0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RB UlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmIC8q IENLX1NTTCAqLwotCi0gICAgcCA9IHN0cl9zdGFydDsKLSAgICAqcCsrID0gSUFDOwotICAgICpw KysgPSBTQjsKLSAgICAqcCsrID0gVEVMT1BUX0VOQ1JZUFRJT047Ci0gICAgKnArKyA9IEVOQ1JZ UFRfUkVRU1RBUlQ7Ci0gICAgZm9yIChpID0gMDsgaSA8IGtpWzFdLmtleWxlbjsgKytpKSB7Ci0g ICAgICAgIGlmICgoICpwKysgPSBraVsxXS5rZXlpZFtpXSkgPT0gSUFDKQotICAgICAgICAgICAg KnArKyA9IElBQzsKLSAgICB9Ci0gICAgKnArKyA9IElBQzsKLSAgICAqcCsrID0gU0U7Ci0KLSAg ICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgaW50IGk7Ci0gICAg ICAgIHNwcmludGYodG5fbXNnLCJURUxORVQgU0VOVCBTQiAlcyBSRVFVRVNULVNUQVJUICIsCi0g ICAgICAgICAgICAgICAgIFRFTE9QVChURUxPUFRfRU5DUllQVElPTikpOyAgICAgICAgICAgICAg ICAgICAgLyogc2FmZSAqLwotICAgICAgICB0bl9oZXgoKENIQVIgKil0bl9tc2csVE5fTVNHX0xF Tiwmc3RyX3N0YXJ0WzRdLHAtc3RyX3N0YXJ0LTItNCk7Ci0gICAgICAgIGNrc3RybmNhdCh0bl9t c2csIklBQyBTRSIsVE5fTVNHX0xFTik7Ci0gICAgICAgIGRlYnVnKEYxMDAsdG5fbXNnLCIiLDAp OwotICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnKTsKLSAgICB9 Ci0jaWZkZWYgT1MyCi0gICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlU ICk7Ci0jZW5kaWYKLSAgICB0dG9sKHN0cl9zdGFydCwgcCAtIHN0cl9zdGFydCk7Ci0jaWZkZWYg T1MyCi0gICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7Ci0jZW5kaWYKLQotICAgIGlmIChlbmNyeXB0 X2RlYnVnX21vZGUpIHsKLSAgICAgICAgc3ByaW50ZihkYmdidWYsICI+Pj5SZXF1ZXN0IGlucHV0 IHRvIGJlIGVuY3J5cHRlZFxuIik7ICAvKiBzYWZlICovCi0gICAgICAgIGRlYnVnKEYxMTAsImVu Y3J5cHRfc2VuZF9yZXF1ZXN0X3N0YXJ0IixkYmdidWYsMCk7Ci0gICAgfQotfQotCi1WT0lECi0j aWZkZWYgQ0tfQU5TSUMKLWVuY3J5cHRfc2VuZF9yZXF1ZXN0X2VuZChWT0lEKQotI2Vsc2UKLWVu Y3J5cHRfc2VuZF9yZXF1ZXN0X2VuZCgpCi0jZW5kaWYKLXsKLSNpZmRlZiBDS19TU0wKLSAgICBp ZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKQotICAg ICAgICByZXR1cm47Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSAgICBzdHJfZW5kWzBdID0gSUFD OwotICAgIHN0cl9lbmRbMV0gPSBTQjsKLSAgICBzdHJfZW5kWzJdID0gVEVMT1BUX0VOQ1JZUFRJ T047Ci0gICAgc3RyX2VuZFszXSA9IEVOQ1JZUFRfUkVRRU5EOwotICAgIHN0cl9lbmRbNF0gPSBJ QUM7Ci0gICAgc3RyX2VuZFs1XSA9IFNFOwotCi0gICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwg ZGVic2VzKSB7Ci0gICAgICAgIGludCBpOwotICAgICAgICBzcHJpbnRmKHRuX21zZywiVEVMTkVU IFNFTlQgU0IgJXMgUkVRRU5EIElBQyBTRSIsCi0gICAgICAgICAgICAgICAgIFRFTE9QVChURUxP UFRfRU5DUllQVElPTikpOyAgICAgICAgICAgICAgICAgICAgLyogc2FmZSAqLwotICAgICAgICBk ZWJ1ZyhGMTAwLHRuX21zZywiIiwwKTsKLSAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRu X2RlYnVnKHRuX21zZyk7Ci0gICAgfQotI2lmZGVmIE9TMgotICAgIFJlcXVlc3RUZWxuZXRNdXRl eCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwotI2VuZGlmCi0gICAgdHRvbChzdHJfZW5kLCBzaXpl b2Yoc3RyX2VuZCkpOwotI2lmZGVmIE9TMgotICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwotI2Vu ZGlmCi0KLSAgICBpZiAoZW5jcnlwdF9kZWJ1Z19tb2RlKSB7Ci0gICAgICAgIHNwcmludGYoZGJn YnVmLCAiPj4+UmVxdWVzdCBpbnB1dCB0byBiZSBjbGVhciB0ZXh0XG4iKTsgLyogc2FmZSAqLwot ICAgICAgICBkZWJ1ZyhGMTEwLCJlbmNyeXB0X3NlbmRfcmVxdWVzdF9lbmQiLGRiZ2J1ZiwwKTsK LSAgICB9Ci19Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi1lbmNyeXB0X2lzX2VuY3J5cHRpbmco Vk9JRCkKLSNlbHNlCi1lbmNyeXB0X2lzX2VuY3J5cHRpbmcoKQotI2VuZGlmCi17Ci0gICAgaWYg KGVuY3J5cHRfb3V0cHV0KQotICAgICAgICByZXR1cm4gMTsKLSAgICByZXR1cm4gMDsKLX0KLQot aW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWVuY3J5cHRfaXNfZGVjcnlwdGluZyhWT0lEKQotI2Vsc2UK LWVuY3J5cHRfaXNfZGVjcnlwdGluZygpCi0jZW5kaWYKLXsKLSAgICBpZiAoZGVjcnlwdF9pbnB1 dCkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLSNpZmRlZiBERUJVRwot dm9pZAotZW5jcnlwdF9kZWJ1Zyhtb2RlKQotICAgICBpbnQgbW9kZTsKLXsKLSAgICBlbmNyeXB0 X2RlYnVnX21vZGUgPSBtb2RlOwotfQotI2VuZGlmCi0KLSNpZmRlZiBDS19ERVMKLS8qLQotICog Q29weXJpZ2h0IChjKSAxOTkxLCAxOTkzCi0gKiAgICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2 ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICog My4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBv ZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnZW1lbnQ6Ci0gKiAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKLSAqICAgICAgQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5k IGl0cyBjb250cmlidXRvcnMuCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJz aXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQg dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl Ci0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRP UlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQot ICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05U UklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO WSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qIGJhc2Vk IG9uIEAoIyllbmNfZGVzLmMgICAgICAgOC4xIChCZXJrZWxleSkgNi80LzkzICovCi0KLSNkZWZp bmUgQ0ZCICAgICAwCi0jZGVmaW5lIE9GQiAgICAgMQotCi0jZGVmaW5lIE5PX1NFTkRfSVYgICAg ICAxCi0jZGVmaW5lIE5PX1JFQ1ZfSVYgICAgICAyCi0jZGVmaW5lIE5PX0tFWUlEICAgICAgICA0 Ci0jZGVmaW5lIElOX1BST0dSRVNTICAgICAoTk9fU0VORF9JVnxOT19SRUNWX0lWfE5PX0tFWUlE KQotI2RlZmluZSBTVUNDRVNTICAgICAgICAgMAotI2RlZmluZSB4RkFJTEVEICAgICAgICAgLTEK LQotU2NoZWR1bGUgdGVzdF9zY2hlZDsKLQotc3RydWN0IGRlc19zdGluZm8gewotICAgIEJsb2Nr ICAgICAgICAgICAgICAgc3RyX291dHB1dDsKLSAgICBCbG9jayAgICAgICAgICAgICAgIHN0cl9m ZWVkOwotICAgIEJsb2NrICAgICAgICAgICAgICAgc3RyX2l2OwotICAgIEJsb2NrICAgICAgICAg ICAgICAgc3RyX2lrZXk7Ci0jaWZkZWYgTUlUX0NVUlJFTlQKLSAgICB1bnNpZ25lZCBjaGFyICAg ICAgIHN0cl9rZXlieXRlc1s4XTsKLSAgICBrcmI1X2tleWJsb2NrICAgICAgIHN0cl9rZXk7Ci0j ZWxzZSAvKiBNSVRfQ1VSUkVOVCAqLwotICAgIFNjaGVkdWxlICAgICAgICAgICAgc3RyX3NjaGVk OwotICAgIGludCAgICAgICAgICAgICAgICAgc3RyX2luZGV4OwotI2VuZGlmIC8qIE1JVF9DVVJS RU5UICovCi0gICAgaW50ICAgICAgICAgICAgICAgICBzdHJfZmxhZ3NoaWZ0OwotfTsKLQotc3Ry dWN0IGRlc19mYiB7Ci0jaWZuZGVmIE1JVF9DVVJSRU5UCi0gICAgQmxvY2sga3JiZGVzX2tleTsK LSAgICBTY2hlZHVsZSBrcmJkZXNfc2NoZWQ7Ci0jZW5kaWYgLyogTUlUX0NVUlJFTlQgKi8KLSAg ICBCbG9jayB0ZW1wX2ZlZWQ7Ci0gICAgdW5zaWduZWQgY2hhciBmYl9mZWVkWzY0XTsKLSAgICBp bnQgbmVlZF9zdGFydDsKLSAgICBpbnQgc3RhdGVbMl07Ci0gICAgaW50IGtleWlkWzJdOwotICAg IGludCBvbmNlOwotI2lmZGVmIE1JVF9DVVJSRU5UCi0gICAgaW50IHZhbGlka2V5OwotI2VuZGlm IC8qIE1JVF9DVVJSRU5UICovCi0gICAgc3RydWN0IGRlc19zdGluZm8gIHN0cmVhbXNbMl07Ci19 Owotc3RhdGljIHN0cnVjdCBkZXNfZmIgZGVzX2ZiWzJdOwotCi1zdHJ1Y3QgZGVzM19zdGluZm8g ewotICAgIEJsb2NrICAgICAgICAgICAgICAgc3RyX291dHB1dDsKLSAgICBCbG9jayAgICAgICAg ICAgICAgIHN0cl9mZWVkOwotICAgIEJsb2NrICAgICAgICAgICAgICAgc3RyX2l2OwotICAgIEJs b2NrICAgICAgICAgICAgICAgc3RyX2lrZXlbM107Ci0gICAgU2NoZWR1bGUgICAgICAgICAgICBz dHJfc2NoZWRbM107Ci0gICAgaW50ICAgICAgICAgICAgICAgICBzdHJfaW5kZXg7Ci0gICAgaW50 ICAgICAgICAgICAgICAgICBzdHJfZmxhZ3NoaWZ0OwotfTsKLQotc3RydWN0IGRlczNfZmIgewot I2lmbmRlZiBNSVRfQ1VSUkVOVAotICAgIEJsb2NrIGtyYmRlc19rZXlbM107Ci0gICAgU2NoZWR1 bGUga3JiZGVzX3NjaGVkWzNdOwotI2VuZGlmIC8qIE1JVF9DVVJSRU5UICovCi0gICAgQmxvY2sg dGVtcF9mZWVkOwotICAgIHVuc2lnbmVkIGNoYXIgZmJfZmVlZFs2NF07Ci0gICAgaW50IG5lZWRf c3RhcnQ7Ci0gICAgaW50IHN0YXRlWzJdOwotICAgIGludCBrZXlpZFsyXTsKLSAgICBpbnQgb25j ZTsKLSNpZmRlZiBNSVRfQ1VSUkVOVAotICAgIGludCB2YWxpZGtleTsKLSNlbmRpZiAvKiBNSVRf Q1VSUkVOVCAqLwotICAgIHN0cnVjdCBkZXMzX3N0aW5mbyBzdHJlYW1zWzJdOwotfTsKLXN0YXRp YyBzdHJ1Y3QgZGVzM19mYiBkZXMzX2ZiWzJdOwotCi1zdHJ1Y3Qga2V5aWRsaXN0IHsKLSAgICBj aGFyICAgICAgICAqa2V5aWQ7Ci0gICAgaW50IGtleWlkbGVuOwotICAgIGNoYXIgICAgICAgICpr ZXk7Ci0gICAgaW50IGtleWxlbjsKLSAgICBpbnQgZmxhZ3M7Ci19IGtleWlkbGlzdCBbXSA9IHsK LSAgICB7ICJcMCIsIDEsIDAsIDAsIDAgfSwgICAgICAgICAgICAgICAvKiBkZWZhdWx0IGtleSBv ZiB6ZXJvICovCi0gICAgeyAwLCAwLCAwLCAwLCAwIH0KLX07Ci0KLSNkZWZpbmUgS0VZRkxBR19N QVNLICAgIDAzCi0KLSNkZWZpbmUgS0VZRkxBR19OT0lOSVQgIDAwCi0jZGVmaW5lIEtFWUZMQUdf SU5JVCAgICAwMQotI2RlZmluZSBLRVlGTEFHX09LICAgICAgMDIKLSNkZWZpbmUgS0VZRkxBR19C QUQgICAgIDAzCi0KLSNkZWZpbmUgS0VZRkxBR19TSElGVCAgIDIKLQotI2RlZmluZSBTSElGVF9W QUwoYSxiKSAgKEtFWUZMQUdfU0hJRlQqKChhKSsoKGIpKjIpKSkKLQotI2RlZmluZSBGQjY0X0lW ICAgICAgICAgMQotI2RlZmluZSBGQjY0X0lWX09LICAgICAgMgotI2RlZmluZSBGQjY0X0lWX0JB RCAgICAgMwotI2RlZmluZSBGQjY0X0NIQUxMRU5HRSAgNAotI2RlZmluZSBGQjY0X1JFU1BPTlNF ICAgNQotCi12b2lkIGZiNjRfc3RyZWFtX2l2IFAoKEJsb2NrLCBzdHJ1Y3QgZGVzX3N0aW5mbyAq KSk7Ci12b2lkIGZiNjRfaW5pdCBQKChzdHJ1Y3QgZGVzX2ZiICopKTsKLXN0YXRpYyBpbnQgZmI2 NF9zdGFydCBQKChzdHJ1Y3QgZGVzX2ZiICosIGludCwgaW50KSk7Ci1pbnQgZmI2NF9pcyBQKCh1 bnNpZ25lZCBjaGFyICosIGludCwgc3RydWN0IGRlc19mYiAqKSk7Ci1pbnQgZmI2NF9yZXBseSBQ KCh1bnNpZ25lZCBjaGFyICosIGludCwgc3RydWN0IGRlc19mYiAqKSk7Ci1zdGF0aWMgaW50IGZi NjRfc2Vzc2lvbiBQKChTZXNzaW9uX0tleSAqLCBpbnQsIHN0cnVjdCBkZXNfZmIgKikpOwotdm9p ZCBmYjY0X3N0cmVhbV9rZXkgUCgoQmxvY2ssIHN0cnVjdCBkZXNfc3RpbmZvICopKTsKLWludCBm YjY0X2tleWlkIFAoKGludCwgdW5zaWduZWQgY2hhciAqLCBpbnQgKiwgc3RydWN0IGRlc19mYiAq KSk7Ci0KLSNpZmRlZiBNSVRfQ1VSUkVOVAotc3RhdGljIHZvaWQKLSNpZmRlZiBDS19BTlNJQwot ZWNiX2VuY3J5cHQoc3RydWN0IGRlc19zdGluZm8gKnN0cCwgQmxvY2sgaW4sIEJsb2NrIG91dCkK LSNlbHNlIC8qIENLQU5TSUMgKi8KLWVjYl9lbmNyeXB0KHN0cCwgaW4sIG91dCkKLSAgICBzdHJ1 Y3QgZGVzX3N0aW5mbyAqc3RwOwotICAgIEJsb2NrIGluOwotICAgIEJsb2NrIG91dDsKLSNlbmRp ZiAvKiBDS19BTlNJQyAqLwotewotICAgIGtyYjVfZXJyb3JfY29kZSBjb2RlOwotICAgIGtyYjVf ZGF0YSBkaW47Ci0gICAga3JiNV9lbmNfZGF0YSBkb3V0OwotCi0gICAgZGluLmxlbmd0aCA9IDg7 Ci0gICAgZGluLmRhdGEgPSBpbjsKLQotICAgIGRvdXQuY2lwaGVydGV4dC5sZW5ndGggPSA4Owot ICAgIGRvdXQuY2lwaGVydGV4dC5kYXRhID0gb3V0OwotICAgIGRvdXQuZW5jdHlwZSA9IEVOQ1RZ UEVfVU5LTk9XTjsKLQotI2lmZGVmIENSWVBUX0RMTAotICAgIGNvZGUgPSBrcmI1X2NfZW5jcnlw dCgqcF9rNV9jb250ZXh0LCAmc3RwLT5zdHJfa2V5LCAwLCAwLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgJmRpbiwgJmRvdXQpOwotI2Vsc2UgLyogQ1JZUFRfRExMICovCi0gICAgY29kZSA9 IGtyYjVfY19lbmNyeXB0KGs1X2NvbnRleHQsICZzdHAtPnN0cl9rZXksIDAsIDAsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAmZGluLCAmZG91dCk7Ci0jZW5kaWYgLyogQ1JZUFRfRExMICov Ci0gICAgLyogWFhYIEknbSBub3Qgc3VyZSB3aGF0IHRvIGRvIGlmIHRoaXMgZmFpbHMgKi8KLSAg ICBpZiAoY29kZSkKLSAgICAgICAgY29tX2VycigibGlidGVsbmV0IiwgY29kZSwgImVuY3J5cHRp bmcgc3RyZWFtIGRhdGEiKTsKLX0KLSNlbmRpZiAvKiBNSVRfQ1VSUkVOVCAqLwotCi12b2lkCi1j ZmI2NF9pbml0KHNlcnZlcikKLSAgICBpbnQgc2VydmVyOwotewotICAgIGZiNjRfaW5pdCgmZGVz X2ZiW0NGQl0pOwotICAgIGRlc19mYltDRkJdLmZiX2ZlZWRbNF0gPSBFTkNUWVBFX0RFU19DRkI2 NDsKLSAgICBkZXNfZmJbQ0ZCXS5zdHJlYW1zWzBdLnN0cl9mbGFnc2hpZnQgPSBTSElGVF9WQUwo MCwgQ0ZCKTsKLSAgICBkZXNfZmJbQ0ZCXS5zdHJlYW1zWzFdLnN0cl9mbGFnc2hpZnQgPSBTSElG VF9WQUwoMSwgQ0ZCKTsKLX0KLQotdm9pZAotb2ZiNjRfaW5pdChzZXJ2ZXIpCi0gICAgaW50IHNl cnZlcjsKLXsKLSAgICBmYjY0X2luaXQoJmRlc19mYltPRkJdKTsKLSAgICBkZXNfZmJbT0ZCXS5m Yl9mZWVkWzRdID0gRU5DVFlQRV9ERVNfT0ZCNjQ7Ci0gICAgZGVzX2ZiW0NGQl0uc3RyZWFtc1sw XS5zdHJfZmxhZ3NoaWZ0ID0gU0hJRlRfVkFMKDAsIE9GQik7Ci0gICAgZGVzX2ZiW0NGQl0uc3Ry ZWFtc1sxXS5zdHJfZmxhZ3NoaWZ0ID0gU0hJRlRfVkFMKDEsIE9GQik7Ci19Ci0KLXZvaWQKLWZi NjRfaW5pdChmYnApCi0gICAgcmVnaXN0ZXIgc3RydWN0IGRlc19mYiAqZmJwOwotewotICAgIG1l bXNldCgodm9pZCAqKWZicCwgMCwgc2l6ZW9mKCpmYnApKTsKLSAgICBmYnAtPnN0YXRlWzBdID0g ZmJwLT5zdGF0ZVsxXSA9IHhGQUlMRUQ7Ci0gICAgZmJwLT5mYl9mZWVkWzBdID0gSUFDOwotICAg IGZicC0+ZmJfZmVlZFsxXSA9IFNCOwotICAgIGZicC0+ZmJfZmVlZFsyXSA9IFRFTE9QVF9FTkNS WVBUSU9OOwotICAgIGZicC0+ZmJfZmVlZFszXSA9IEVOQ1JZUFRfSVM7Ci19Ci0KLS8qCi0gKiBS ZXR1cm5zOgotICogICAgICAtMTogc29tZSBlcnJvci4gIE5lZ290aWF0aW9uIGlzIGRvbmUsIGVu Y3J5cHRpb24gbm90IHJlYWR5LgotICogICAgICAgMDogU3VjY2Vzc2Z1bCwgaW5pdGlhbCBuZWdv dGlhdGlvbiBhbGwgZG9uZS4KLSAqICAgICAgIDE6IHN1Y2Nlc3NmdWwsIG5lZ290aWF0aW9uIG5v dCBkb25lIHlldC4KLSAqICAgICAgIDI6IE5vdCB5ZXQuICBPdGhlciB0aGluZ3MgKGxpa2UgZ2V0 dGluZyB0aGUga2V5IGZyb20KLSAqICAgICAgICAgIEtlcmJlcm9zKSBoYXZlIHRvIGhhcHBlbiBi ZWZvcmUgd2UgY2FuIGNvbnRpbnVlLgotICovCi1pbnQKLWNmYjY0X3N0YXJ0KGRpciwgc2VydmVy KQotICAgIGludCBkaXI7Ci0gICAgaW50IHNlcnZlcjsKLXsKLSAgICByZXR1cm4oZmI2NF9zdGFy dCgmZGVzX2ZiW0NGQl0sIGRpciwgc2VydmVyKSk7Ci19Ci1pbnQKLW9mYjY0X3N0YXJ0KGRpciwg c2VydmVyKQotICAgIGludCBkaXI7Ci0gICAgaW50IHNlcnZlcjsKLXsKLSAgICByZXR1cm4oZmI2 NF9zdGFydCgmZGVzX2ZiW09GQl0sIGRpciwgc2VydmVyKSk7Ci19Ci0KLXN0YXRpYyBpbnQKLWZi NjRfc3RhcnQoZmJwLCBkaXIsIHNlcnZlcikKLSAgICBzdHJ1Y3QgZGVzX2ZiICpmYnA7Ci0gICAg aW50IGRpcjsKLSAgICBpbnQgc2VydmVyOwotewotICAgIGludCB4OwotICAgIHVuc2lnbmVkIGNo YXIgKnA7Ci0gICAgcmVnaXN0ZXIgaW50IHN0YXRlOwotCi0gICAgc3dpdGNoIChkaXIpIHsKLSAg ICBjYXNlIERJUl9ERUNSWVBUOgotICAgICAgICAvKgotICAgICAgICAqIFRoaXMgaXMgc2ltcGx5 IGEgcmVxdWVzdCB0byBoYXZlIHRoZSBvdGhlciBzaWRlCi0gICAgICAgICogc3RhcnQgb3V0cHV0 IChvdXIgaW5wdXQpLiAgSGUgd2lsbCBuZWdvdGlhdGUgYW4KLSAgICAgICAgKiBJViBzbyB3ZSBu ZWVkIG5vdCBsb29rIGZvciBpdC4KLSAgICAgICAgKi8KLSAgICAgICAgc3RhdGUgPSBmYnAtPnN0 YXRlW2Rpci0xXTsKLSAgICAgICAgaWYgKHN0YXRlID09IHhGQUlMRUQpCi0gICAgICAgICAgICBz dGF0ZSA9IElOX1BST0dSRVNTOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgRElSX0VOQ1JZ UFQ6Ci0gICAgICAgIHN0YXRlID0gZmJwLT5zdGF0ZVtkaXItMV07Ci0gICAgICAgIGlmIChzdGF0 ZSA9PSB4RkFJTEVEKQotICAgICAgICAgICAgc3RhdGUgPSBJTl9QUk9HUkVTUzsKLSAgICAgICAg ZWxzZSBpZiAoKHN0YXRlICYgTk9fU0VORF9JVikgPT0gMCkKLSAgICAgICAgICAgIGJyZWFrOwot Ci0jaWZkZWYgTUlUX0NVUlJFTlQKLSAgICAgICAgaWYgKCFmYnAtPnZhbGlka2V5KSB7Ci0gICAg ICAgICAgICBmYnAtPm5lZWRfc3RhcnQgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg IH0KLSNlbHNlIC8qIE1JVF9DVVJSRU5UICovCi0gICAgICAgIGlmICghVkFMSURLRVkoZmJwLT5r cmJkZXNfa2V5KSkgewotICAgICAgICAgICAgZmJwLT5uZWVkX3N0YXJ0ID0gMTsKLSAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICB9Ci0jZW5kaWYgLyogTUlUX0NVUlJFTlQgKi8KLSAgICAgICAg c3RhdGUgJj0gfk5PX1NFTkRfSVY7Ci0gICAgICAgIHN0YXRlIHw9IE5PX1JFQ1ZfSVY7Ci0gICAg ICAgIC8qCi0gICAgICAgICogQ3JlYXRlIGEgcmFuZG9tIGZlZWQgYW5kIHNlbmQgaXQgb3Zlci4K LSAgICAgICAgKi8KLSNpZmRlZiBNSVRfQ1VSUkVOVAotICAgICAgICB7Ci0gICAgICAgICAgICBr cmI1X2RhdGEgZDsKLSAgICAgICAgICAgIGtyYjVfZXJyb3JfY29kZSBjb2RlOwotCi0gICAgICAg ICAgICBkLmRhdGEgPSBmYnAtPnRlbXBfZmVlZDsKLSAgICAgICAgICAgIGQubGVuZ3RoID0gc2l6 ZW9mKGZicC0+dGVtcF9mZWVkKTsKLQotI2lmZGVmIENSWVBUX0RMTAotICAgICAgICAgICAgaWYg KGNvZGUgPSBrcmI1X2NfcmFuZG9tX21ha2Vfb2N0ZXRzKCpwX2s1X2NvbnRleHQsJmQpKQotICAg ICAgICAgICAgICAgIHJldHVybih4RkFJTEVEKTsKLSNlbHNlIC8qIENSWVBUX0RMTCAqLwotICAg ICAgICAgICAgaWYgKGNvZGUgPSBrcmI1X2NfcmFuZG9tX21ha2Vfb2N0ZXRzKGs1X2NvbnRleHQs JmQpKQotICAgICAgICAgICAgICAgIHJldHVybih4RkFJTEVEKTsKLSNlbmRpZiAvKiBDUllQVF9E TEwgKi8KLSAgICAgICAgfQotCi0jZWxzZSAvKiBNSVRfQ1VSUkVOVCAqLwotICAgICAgICBkZXNf bmV3X3JhbmRvbV9rZXkoZmJwLT50ZW1wX2ZlZWQpOwotICAgICAgICBkZXNfZWNiX2VuY3J5cHQo ZmJwLT50ZW1wX2ZlZWQsIGZicC0+dGVtcF9mZWVkLAotICAgICAgICAgICAgICAgICAgICAgICAg IGZicC0+a3JiZGVzX3NjaGVkLCAxKTsKLSNlbmRpZiAvKiBNSVRfQ1VSUkVOVCAqLwotICAgICAg ICBwID0gZmJwLT5mYl9mZWVkICsgMzsKLSAgICAgICAgKnArKyA9IEVOQ1JZUFRfSVM7Ci0gICAg ICAgIHArKzsKLSAgICAgICAgKnArKyA9IEZCNjRfSVY7Ci0gICAgICAgIGZvciAoeCA9IDA7IHgg PCBzaXplb2YoQmxvY2spOyArK3gpIHsKLSAgICAgICAgICAgIGlmICgoICpwKysgPSBmYnAtPnRl bXBfZmVlZFt4XSkgPT0gSUFDKQotICAgICAgICAgICAgICAgICpwKysgPSBJQUM7Ci0gICAgICAg IH0KLSAgICAgICAgKnArKyA9IElBQzsKLSAgICAgICAgKnArKyA9IFNFOwotCi0gICAgICAgIGlm IChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewotICAgICAgICAgICAgaW50IGk7Ci0gICAg ICAgICAgICBzcHJpbnRmKHRuX21zZywKLSAgICAgICAgICAgICAgICAgICAgICJURUxORVQgU0VO VCBTQiAlcyBJUyAlcyBGQjY0X0lWICIsCi0gICAgICAgICAgICAgICAgICAgICBURUxPUFQoZmJw LT5mYl9mZWVkWzJdKSwKLSAgICAgICAgICAgICAgICAgICAgIGVuY3R5cGVfbmFtZXNbZmJwLT5m Yl9mZWVkWzRdXSk7IC8qIHNhZmUgKi8KLSAgICAgICAgICAgIHRuX2hleCgoQ0hBUiAqKXRuX21z ZyxUTl9NU0dfTEVOLCZmYnAtPmZiX2ZlZWRbNl0sCi0JCShwLWZicC0+ZmJfZmVlZCktMi02KTsK LSAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csIklBQyBTRSIsVE5fTVNHX0xFTik7Ci0gICAg ICAgICAgICBkZWJ1ZyhGMTAwLHRuX21zZywiIiwwKTsKLSAgICAgICAgICAgIGlmICh0bl9kZWIg fHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2cpOwotICAgICAgICB9Ci0jaWZkZWYgT1MyCi0gICAg ICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwotI2VuZGlmCi0g ICAgICAgIHR0b2woZmJwLT5mYl9mZWVkLCBwIC0gZmJwLT5mYl9mZWVkKTsKLSNpZmRlZiBPUzIK LSAgICAgICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7Ci0jZW5kaWYKLSAgICAgICAgYnJlYWs7Ci0g ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuKHhGQUlMRUQpOwotICAgIH0KLSAgICByZXR1cm4o ZmJwLT5zdGF0ZVtkaXItMV0gPSBzdGF0ZSk7Ci19Ci0KLS8qCi0gKiBSZXR1cm5zOgotICogICAg ICAtMTogc29tZSBlcnJvci4gIE5lZ290aWF0aW9uIGlzIGRvbmUsIGVuY3J5cHRpb24gbm90IHJl YWR5LgotICogICAgICAgMDogU3VjY2Vzc2Z1bCwgaW5pdGlhbCBuZWdvdGlhdGlvbiBhbGwgZG9u ZS4KLSAqICAgICAgIDE6IHN1Y2Nlc3NmdWwsIG5lZ290aWF0aW9uIG5vdCBkb25lIHlldC4KLSAq LwotaW50Ci1jZmI2NF9pcyhkYXRhLCBjbnQpCi0gICAgdW5zaWduZWQgY2hhciAqZGF0YTsKLSAg ICBpbnQgY250OwotewotICAgIHJldHVybihmYjY0X2lzKGRhdGEsIGNudCwgJmRlc19mYltDRkJd KSk7Ci19Ci0KLWludAotb2ZiNjRfaXMoZGF0YSwgY250KQotICAgIHVuc2lnbmVkIGNoYXIgKmRh dGE7Ci0gICAgaW50IGNudDsKLXsKLSAgICByZXR1cm4oZmI2NF9pcyhkYXRhLCBjbnQsICZkZXNf ZmJbT0ZCXSkpOwotfQotCi1pbnQKLWZiNjRfaXMoZGF0YSwgY250LCBmYnApCi0gICAgdW5zaWdu ZWQgY2hhciAqZGF0YTsKLSAgICBpbnQgY250OwotICAgIHN0cnVjdCBkZXNfZmIgKmZicDsKLXsK LSAgICB1bnNpZ25lZCBjaGFyICpwOwotICAgIHJlZ2lzdGVyIGludCBzdGF0ZSA9IGZicC0+c3Rh dGVbRElSX0RFQ1JZUFQtMV07Ci0KLSAgICBpZiAoY250LS0gPCAxKQotICAgICAgICBnb3RvIGZh aWx1cmU7Ci0KLSNpZmRlZiBDS19TU0wKLSAgICBpZiAoIVRFTE9QVF9TQihURUxPUFRfU1RBUlRf VExTKS5zdGFydF90bHMubWVfZm9sbG93cykKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICBzd2l0 Y2ggKCpkYXRhKyspIHsKLSAgICBjYXNlIEZCNjRfSVY6Ci0gICAgICAgIGlmIChjbnQgIT0gc2l6 ZW9mKEJsb2NrKSkgewotI2lmZGVmIERFQlVHCi0gICAgICAgICAgICBpZiAoZW5jcnlwdF9kZWJ1 Z19tb2RlKQotICAgICAgICAgICAgICAgIHByaW50ZigiQ0ZCNjQ6IGluaXRpYWwgdmVjdG9yIGZh aWxlZCBvbiBzaXplXHJcbiIpOwotI2VuZGlmCi0gICAgICAgICAgICBzdGF0ZSA9IHhGQUlMRUQ7 Ci0gICAgICAgICAgICBnb3RvIGZhaWx1cmU7Ci0gICAgICAgIH0KLQotI2lmZGVmIERFQlVHCi0g ICAgICAgIGlmIChlbmNyeXB0X2RlYnVnX21vZGUpIHsKLSAgICAgICAgICAgIHByaW50ZigiQ0ZC NjQ6IGluaXRpYWwgdmVjdG9yIHJlY2VpdmVkXHJcbiIpOwotICAgICAgICAgICAgcHJpbnRmKCJJ bml0aWFsaXppbmcgRGVjcnlwdCBzdHJlYW1cclxuIik7Ci0gICAgICAgIH0KLSNlbmRpZgotICAg ICAgICBmYjY0X3N0cmVhbV9pdigodm9pZCAqKWRhdGEsICZmYnAtPnN0cmVhbXNbRElSX0RFQ1JZ UFQtMV0pOwotCi0gICAgICAgIHAgPSBmYnAtPmZiX2ZlZWQgKyAzOwotICAgICAgICAqcCsrID0g RU5DUllQVF9SRVBMWTsKLSAgICAgICAgcCsrOwotICAgICAgICAqcCsrID0gRkI2NF9JVl9PSzsK LSAgICAgICAgKnArKyA9IElBQzsKLSAgICAgICAgKnArKyA9IFNFOwotCi0gICAgICAgIGlmIChk ZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewotICAgICAgICAgICAgaW50IGk7Ci0gICAgICAg ICAgICBzcHJpbnRmKHRuX21zZywKLSAgICAgICAgICAgICAgICAgICAgICJURUxORVQgU0VOVCBT QiAlcyBSRVBMWSAlcyBGQjY0X0lWX09LICIsCi0gICAgICAgICAgICAgICAgICAgICBURUxPUFQo ZmJwLT5mYl9mZWVkWzJdKSwKLSAgICAgICAgICAgICAgICAgICAgIGVuY3R5cGVfbmFtZXNbZmJw LT5mYl9mZWVkWzRdXSk7IC8qIHNhZmUgKi8KLSAgICAgICAgICAgIHRuX2hleCgoQ0hBUiAqKXRu X21zZyxUTl9NU0dfTEVOLCZmYnAtPmZiX2ZlZWRbNl0sCi0JCShwLWZicC0+ZmJfZmVlZCktMi02 KTsKLSAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csIklBQyBTRSIsVE5fTVNHX0xFTik7Ci0g ICAgICAgICAgICBkZWJ1ZyhGMTAwLHRuX21zZywiIiwwKTsKLSAgICAgICAgICAgIGlmICh0bl9k ZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2cpOwotICAgICAgICB9Ci0jaWZkZWYgT1MyCi0g ICAgICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwotI2VuZGlm Ci0gICAgICAgIHR0b2woZmJwLT5mYl9mZWVkLCBwIC0gZmJwLT5mYl9mZWVkKTsKLSNpZmRlZiBP UzIKLSAgICAgICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7Ci0jZW5kaWYKLSAgICAgICAgc3RhdGUg PSBJTl9QUk9HUkVTUzsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotI2lmIDAKLSAg ICAgICAgaWYgKGVuY3J5cHRfZGVidWdfbW9kZSkgewotICAgICAgICAgICAgcHJpbnRmKCJVbmtu b3duIG9wdGlvbiB0eXBlOiAlZFxyXG4iLCAqKGRhdGEtMSkpOwotICAgICAgICAgICAgcHJpbnRm KCJcclxuIik7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICAvKiBGQUxMIFRIUk9VR0ggKi8K LSAgICAgIGZhaWx1cmU6Ci0gICAgICAgIC8qCi0gICAgICAgICogV2UgZmFpbGVkLiAgU2VuZCBh biBGQjY0X0lWX0JBRCBvcHRpb24KLSAgICAgICAgKiB0byB0aGUgb3RoZXIgc2lkZSBzbyBpdCB3 aWxsIGtub3cgdGhhdAotICAgICAgICAqIHRoaW5ncyBmYWlsZWQuCi0gICAgICAgICovCi0gICAg ICAgIHAgPSBmYnAtPmZiX2ZlZWQgKyAzOwotICAgICAgICAqcCsrID0gRU5DUllQVF9SRVBMWTsK LSAgICAgICAgcCsrOwotICAgICAgICAqcCsrID0gRkI2NF9JVl9CQUQ7Ci0gICAgICAgICpwKysg PSBJQUM7Ci0gICAgICAgICpwKysgPSBTRTsKLQotICAgICAgICBpZiAoZGVibG9nIHx8IHRuX2Rl YiB8fCBkZWJzZXMpIHsKLSAgICAgICAgICAgIGludCBpOwotICAgICAgICAgICAgc3ByaW50Zih0 bl9tc2csCi0gICAgICAgICAgICAgICAgICAgICAiVEVMTkVUIFNFTlQgU0IgJXMgUkVQTFkgJXMg RkI2NF9JVl9CQUQgIiwKLSAgICAgICAgICAgICAgICAgICAgIFRFTE9QVChmYnAtPmZiX2ZlZWRb Ml0pLAotICAgICAgICAgICAgICAgICAgICAgZW5jdHlwZV9uYW1lc1tmYnAtPmZiX2ZlZWRbNF1d KTsgLyogc2FmZSAqLwotICAgICAgICAgICAgdG5faGV4KChDSEFSICopdG5fbXNnLFROX01TR19M RU4sJmZicC0+ZmJfZmVlZFs2XSwKLQkJKHAtZmJwLT5mYl9mZWVkKS0yLTYpOwotICAgICAgICAg ICAgY2tzdHJuY2F0KHRuX21zZywiSUFDIFNFIixUTl9NU0dfTEVOKTsKLSAgICAgICAgICAgIGRl YnVnKEYxMDAsdG5fbXNnLCIiLDApOwotICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMp IHRuX2RlYnVnKHRuX21zZyk7Ci0gICAgICAgIH0KLSNpZmRlZiBPUzIKLSAgICAgICAgUmVxdWVz dFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Ci0jZW5kaWYKLSAgICAgICAgdHRv bChmYnAtPmZiX2ZlZWQsIHAgLSBmYnAtPmZiX2ZlZWQpOwotI2lmZGVmIE9TMgotICAgICAgICBS ZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRpZgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg cmV0dXJuKGZicC0+c3RhdGVbRElSX0RFQ1JZUFQtMV0gPSBzdGF0ZSk7Ci19Ci0KLS8qCi0gKiBS ZXR1cm5zOgotICogICAgICAtMTogc29tZSBlcnJvci4gIE5lZ290aWF0aW9uIGlzIGRvbmUsIGVu Y3J5cHRpb24gbm90IHJlYWR5LgotICogICAgICAgMDogU3VjY2Vzc2Z1bCwgaW5pdGlhbCBuZWdv dGlhdGlvbiBhbGwgZG9uZS4KLSAqICAgICAgIDE6IHN1Y2Nlc3NmdWwsIG5lZ290aWF0aW9uIG5v dCBkb25lIHlldC4KLSAqLwotaW50Ci1jZmI2NF9yZXBseShkYXRhLCBjbnQpCi0gICAgdW5zaWdu ZWQgY2hhciAqZGF0YTsKLSAgICBpbnQgY250OwotewotICAgIHJldHVybihmYjY0X3JlcGx5KGRh dGEsIGNudCwgJmRlc19mYltDRkJdKSk7Ci19Ci1pbnQKLW9mYjY0X3JlcGx5KGRhdGEsIGNudCkK LSAgICB1bnNpZ25lZCBjaGFyICpkYXRhOwotICAgIGludCBjbnQ7Ci17Ci0gICAgcmV0dXJuKGZi NjRfcmVwbHkoZGF0YSwgY250LCAmZGVzX2ZiW09GQl0pKTsKLX0KLQotCi1pbnQKLWZiNjRfcmVw bHkoZGF0YSwgY250LCBmYnApCi0gICAgdW5zaWduZWQgY2hhciAqZGF0YTsKLSAgICBpbnQgY250 OwotICAgIHN0cnVjdCBkZXNfZmIgKmZicDsKLXsKLSAgICByZWdpc3RlciBpbnQgc3RhdGUgPSBm YnAtPnN0YXRlW0RJUl9FTkNSWVBULTFdOwotCi0gICAgaWYgKGNudC0tIDwgMSkKLSAgICAgICAg Z290byBmYWlsdXJlOwotCi0gICAgc3dpdGNoICgqZGF0YSsrKSB7Ci0gICAgY2FzZSBGQjY0X0lW X09LOgotICAgICAgICBmYjY0X3N0cmVhbV9pdihmYnAtPnRlbXBfZmVlZCwgJmZicC0+c3RyZWFt c1tESVJfRU5DUllQVC0xXSk7Ci0gICAgICAgIGlmIChzdGF0ZSA9PSB4RkFJTEVEKQotICAgICAg ICAgICAgc3RhdGUgPSBJTl9QUk9HUkVTUzsKLSAgICAgICAgc3RhdGUgJj0gfk5PX1JFQ1ZfSVY7 Ci0gICAgICAgIGVuY3J5cHRfc2VuZF9rZXlpZChESVJfRU5DUllQVCwgKHVuc2lnbmVkIGNoYXIg KikiXDAiLCAxLCAxKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEZCNjRfSVZfQkFEOgot ICAgICAgICBtZW1zZXQoZmJwLT50ZW1wX2ZlZWQsIDAsIHNpemVvZihCbG9jaykpOwotICAgICAg ICBmYjY0X3N0cmVhbV9pdihmYnAtPnRlbXBfZmVlZCwgJmZicC0+c3RyZWFtc1tESVJfRU5DUllQ VC0xXSk7Ci0gICAgICAgIHN0YXRlID0geEZBSUxFRDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBk ZWZhdWx0OgotI2lmIDAKLSAgICAgICAgaWYgKGVuY3J5cHRfZGVidWdfbW9kZSkgewotICAgICAg ICAgICAgcHJpbnRmKCJVbmtub3duIG9wdGlvbiB0eXBlOiAlZFxyXG4iLCBkYXRhWy0xXSk7Ci0g ICAgICAgICAgICBwcmludGYoIlxyXG4iKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIC8q IEZBTEwgVEhST1VHSCAqLwotICAgICAgZmFpbHVyZToKLSAgICAgICAgc3RhdGUgPSB4RkFJTEVE OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuKGZicC0+c3RhdGVbRElSX0VOQ1JZ UFQtMV0gPSBzdGF0ZSk7Ci19Ci0KLWludAotY2ZiNjRfc2Vzc2lvbihrZXksIHNlcnZlcikKLSAg ICBTZXNzaW9uX0tleSAqa2V5OwotICAgIGludCBzZXJ2ZXI7Ci17Ci0gICAgcmV0dXJuKGZiNjRf c2Vzc2lvbihrZXksIHNlcnZlciwgJmRlc19mYltDRkJdKSk7Ci19Ci0KLWludAotb2ZiNjRfc2Vz c2lvbihrZXksIHNlcnZlcikKLSAgICBTZXNzaW9uX0tleSAqa2V5OwotICAgIGludCBzZXJ2ZXI7 Ci17Ci0gICAgcmV0dXJuKGZiNjRfc2Vzc2lvbihrZXksIHNlcnZlciwgJmRlc19mYltPRkJdKSk7 Ci19Ci0KLXN0YXRpYyBpbnQKLWZiNjRfc2Vzc2lvbihrZXksIHNlcnZlciwgZmJwKQotICAgIFNl c3Npb25fS2V5ICprZXk7Ci0gICAgaW50IHNlcnZlcjsKLSAgICBzdHJ1Y3QgZGVzX2ZiICpmYnA7 Ci17Ci0gICAgaW50IHJjPTA7Ci0gICAgaW50IHVzZTJrZXlzOwotICAgIHN0cnVjdCBkZXNfc3Rp bmZvICogc19zdHJlYW07Ci0gICAgc3RydWN0IGRlc19zdGluZm8gKiBjX3N0cmVhbTsKLQotICAg IGlmKHNlcnZlcikgewotICAgICAgICBzX3N0cmVhbSA9ICZmYnAtPnN0cmVhbXNbRElSX0VOQ1JZ UFQtMV07Ci0gICAgICAgIGNfc3RyZWFtID0gJmZicC0+c3RyZWFtc1tESVJfREVDUllQVC0xXTsK LSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHNfc3RyZWFtID0gJmZicC0+c3RyZWFtc1tESVJf REVDUllQVC0xXTsKLSAgICAgICAgY19zdHJlYW0gPSAmZmJwLT5zdHJlYW1zW0RJUl9FTkNSWVBU LTFdOwotICAgIH0KLQotICAgIGlmICgha2V5IHx8IGtleS0+bGVuZ3RoIDwgc2l6ZW9mKEJsb2Nr KSkgewotICAgICAgICBDSEFSIGJ1Zls4MF07Ci0gICAgICAgIHNwcmludGYoKGNoYXIgKilidWYs IkNhbid0IHNldCBERVMgc2Vzc2lvbiBrZXkgKCVkIDwgJWQpIiwKLSAgICAgICAgICAgICAgICBr ZXkgPyBrZXktPmxlbmd0aCA6IDAsIHNpemVvZihCbG9jaykpOyAgICAgICAgICAvKiBzYWZlICov Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgaWYgKGVuY3J5cHRfZGVidWdfbW9kZSkKLSAgICAgICAg ICAgIHByaW50ZigiJXNcclxuIixidWYpOwotI2VuZGlmCi0gICAgICAgIGRlYnVnKEYxMTAsImZi NjRfc2Vzc2lvbiIsYnVmLDApOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICB1c2Uy a2V5cyA9IChrZXktPnR5cGUgPT0gU0tfREVTIHx8Ci0gICAgICAgICAgICAgICAgIGtleS0+bGVu Z3RoIDwgMiAqIHNpemVvZihCbG9jaykpID8gMCA6IDE7Ci0jaWZkZWYgTUlUX0NVUlJFTlQKLSAg ICBpZih1c2Uya2V5cykgewotICAgICAgICBtZW1jcHkoKHZvaWQgKikgZmJwLT5rZXlieXRlcywK LSAgICAgICAgICAgICAgICAgKHZvaWQgKikgKGtleS0+ZGF0YSArIHNpemVvZihCbG9jaykpLCBz aXplb2YoQmxvY2spKTsKLSAgICAgICAgZGVzX2ZpeHVwX2tleV9wYXJpdHkoZmJwLT4pOwotICAg ICAgICBmYjY0X3N0cmVhbV9rZXkoZmJwLT5rcmJkZXNfa2V5LCBzX3N0cmVhbSk7Ci0gICAgfQot Ci0gICAgbWVtY3B5KCh2b2lkICopZmJwLT5rcmJkZXNfa2V5LCAodm9pZCAqKWtleS0+ZGF0YSwg c2l6ZW9mKEJsb2NrKSk7Ci0gICAgaWYgKGtleS0+dHlwZSAhPSBTS19ERVMpCi0gICAgICAgIGRl c19maXh1cF9rZXlfcGFyaXR5KGZicC0+a3JiZGVzX2tleSk7Ci0KLSAgICBpZighdXNlMmtleXMp Ci0gICAgICAgIGZiNjRfc3RyZWFtX2tleShmYnAtPmtyYmRlc19rZXksIHNfc3RyZWFtKTsKLSAg ICBmYjY0X3N0cmVhbV9rZXkoZmJwLT5rcmJkZXNfa2V5LCBjX3N0cmVhbSk7Ci0gICAgZmJwLT52 YWxpZGtleSA9IDE7Ci0KLSAgICBmYjY0X3N0cmVhbV9rZXkoa2V5LT5kYXRhLCAmZmJwLT5zdHJl YW1zW0RJUl9FTkNSWVBULTFdKTsKLSAgICBmYjY0X3N0cmVhbV9rZXkoa2V5LT5kYXRhLCAmZmJw LT5zdHJlYW1zW0RJUl9ERUNSWVBULTFdKTsKLSNlbHNlIC8qIE1JVF9DVVJSRU5UICovCi0gICAg aWYodXNlMmtleXMpIHsKLSAgICAgICAgbWVtY3B5KCh2b2lkICopIGZicC0+a3JiZGVzX2tleSwK LSAgICAgICAgICAgICAgICAgKHZvaWQgKikgKGtleS0+ZGF0YSArIHNpemVvZihCbG9jaykpLCBz aXplb2YoQmxvY2spKTsKLSAgICAgICAgZGVzX2ZpeHVwX2tleV9wYXJpdHkoZmJwLT5rcmJkZXNf a2V5KTsKLSAgICAgICAgZmI2NF9zdHJlYW1fa2V5KGZicC0+a3JiZGVzX2tleSwgc19zdHJlYW0p OwotICAgIH0KLQotICAgIG1lbWNweSgodm9pZCAqKWZicC0+a3JiZGVzX2tleSwgKHZvaWQgKilr ZXktPmRhdGEsIHNpemVvZihCbG9jaykpOwotICAgIGlmIChrZXktPnR5cGUgIT0gU0tfREVTKQot ICAgICAgICBkZXNfZml4dXBfa2V5X3Bhcml0eShmYnAtPmtyYmRlc19rZXkpOwotCi0gICAgaWYo IXVzZTJrZXlzKQotICAgICAgICBmYjY0X3N0cmVhbV9rZXkoZmJwLT5rcmJkZXNfa2V5LCBzX3N0 cmVhbSk7Ci0gICAgZmI2NF9zdHJlYW1fa2V5KGZicC0+a3JiZGVzX2tleSwgY19zdHJlYW0pOwot Ci0gICAgaWYgKGZicC0+b25jZSA9PSAwKSB7Ci0gICAgICAgIGRlc19zZXRfcmFuZG9tX2dlbmVy YXRvcl9zZWVkKGZicC0+a3JiZGVzX2tleSk7Ci0gICAgICAgIGZicC0+b25jZSA9IDE7Ci0gICAg fQotCi0gICAgbWVtc2V0KGZicC0+a3JiZGVzX3NjaGVkLDAsc2l6ZW9mKFNjaGVkdWxlKSk7Ci0g ICAgY2toZXhkdW1wKCJmYjY0X3Nlc3Npb25fa2V5IixmYnAtPmtyYmRlc19rZXksOCk7Ci0KLSAg ICByYyA9IGRlc19rZXlfc2NoZWQoZmJwLT5rcmJkZXNfa2V5LCBmYnAtPmtyYmRlc19zY2hlZCk7 Ci0gICAgaWYgKCByYyA9PSAtMSApIHsKLSAgICAgICAgcHJpbnRmKCI/SW52YWxpZCBERVMga2V5 IHNwZWNpZmllZCBmb3IgZW5jcnlwdGlvblxuIik7Ci0gICAgICAgIGRlYnVnKEYxMTAsImZiNjRf c2Vzc2lvbl9rZXkiLAotICAgICAgICAgICAgICAgImludmFsaWQgREVTIEtleSBzcGVjaWZpZWQg Zm9yIGVuY3J5cHRpb24iLDApOwotICAgIH0gZWxzZSBpZiAoIHJjID09IC0yICkgewotICAgICAg ICBwcmludGYoIj9XZWFrIERFUyBrZXkgc3BlY2lmaWVkIGZvciBlbmNyeXB0aW9uXG4iKTsKLSAg ICAgICAgZGVidWcoRjExMCwiZmI2NF9zZXNzaW9uX2tleSIsCi0gICAgICAgICAgICAgICAid2Vh ayBERVMgS2V5IHNwZWNpZmllZCBmb3IgZW5jcnlwdGlvbiIsMCk7Ci0gICAgfSBlbHNlIGlmICgg cmMgIT0gMCApIHsKLSAgICAgICAgcHJpbnRmKCI/S2V5IFNjaGVkdWxlIG5vdCBjcmVhdGVkIGJ5 IGVuY3J5cHRpb25cbiIpOwotICAgICAgICBkZWJ1ZyhGMTEwLCJmYjY0X3Nlc3Npb25fa2V5IiwK LSAgICAgICAgICAgICAgICJLZXkgU2NoZWR1bGUgbm90IGNyZWF0ZWQgYnkgZW5jcnlwdGlvbiIs MCk7Ci0gICAgfQotCi0gICAgY2toZXhkdW1wKCJmYjY0X3Nlc3Npb25fa2V5IHNjaGVkdWxlIixm YnAtPmtyYmRlc19zY2hlZCw4KjE2KTsKLSNlbmRpZiAvKiBNSVRfQ1VSUkVOVCAqLwotICAgIC8q Ci0gICAgKiBOb3cgbG9vayB0byBzZWUgaWYga3JiZGVzX3N0YXJ0KCkgd2FzIHdhcyB3YWl0aW5n IGZvcgotICAgICogdGhlIGtleSB0byBzaG93IHVwLiAgSWYgc28sIGdvIGFoZWFkIGFuIGNhbGwg aXQgbm93Ci0gICAgKiB0aGF0IHdlIGhhdmUgdGhlIGtleS4KLSAgICAqLwotICAgIGlmIChmYnAt Pm5lZWRfc3RhcnQpIHsKLSAgICAgICAgZmJwLT5uZWVkX3N0YXJ0ID0gMDsKLSAgICAgICAgZmI2 NF9zdGFydChmYnAsIERJUl9FTkNSWVBULCBzZXJ2ZXIpOwotICAgIH0KLSAgICByZXR1cm4oMCk7 Ci19Ci0KLS8qCi0gKiBXZSBvbmx5IGFjY2VwdCBhIGtleWlkIG9mIDAuICBJZiB3ZSBnZXQgYSBr ZXlpZCBvZgotICogMCwgdGhlbiBtYXJrIHRoZSBzdGF0ZSBhcyBTVUNDRVNTLgotICovCi1pbnQK LWNmYjY0X2tleWlkKGRpciwga3AsIGxlbnApCi0gICAgaW50IGRpciwgKmxlbnA7Ci0gICAgdW5z aWduZWQgY2hhciAqa3A7Ci17Ci0gICAgcmV0dXJuKGZiNjRfa2V5aWQoZGlyLCBrcCwgbGVucCwg JmRlc19mYltDRkJdKSk7Ci19Ci0KLWludAotb2ZiNjRfa2V5aWQoZGlyLCBrcCwgbGVucCkKLSAg ICBpbnQgZGlyLCAqbGVucDsKLSAgICB1bnNpZ25lZCBjaGFyICprcDsKLXsKLSAgICByZXR1cm4o ZmI2NF9rZXlpZChkaXIsIGtwLCBsZW5wLCAmZGVzX2ZiW09GQl0pKTsKLX0KLQotaW50Ci1mYjY0 X2tleWlkKGRpciwga3AsIGxlbnAsIGZicCkKLSAgICBpbnQgZGlyLCAqbGVucDsKLSAgICB1bnNp Z25lZCBjaGFyICprcDsKLSAgICBzdHJ1Y3QgZGVzX2ZiICpmYnA7Ci17Ci0gICAgcmVnaXN0ZXIg aW50IHN0YXRlID0gZmJwLT5zdGF0ZVtkaXItMV07Ci0KLSAgICBpZiAoKmxlbnAgIT0gMSB8fCAo KmtwICE9ICdcMCcpKSB7Ci0gICAgICAgICpsZW5wID0gMDsKLSAgICAgICAgcmV0dXJuKHN0YXRl KTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGUgPT0geEZBSUxFRCkKLSAgICAgICAgc3RhdGUgPSBJ Tl9QUk9HUkVTUzsKLQotICAgIHN0YXRlICY9IH5OT19LRVlJRDsKLQotICAgIHJldHVybihmYnAt PnN0YXRlW2Rpci0xXSA9IHN0YXRlKTsKLX0KLQotI2lmIDAKLXZvaWQKLWZiNjRfcHJpbnRzdWIo ZGF0YSwgY250LCBidWYsIGJ1ZmxlbiwgdHlwZSkKLSAgICB1bnNpZ25lZCBjaGFyICpkYXRhLCAq YnVmLCAqdHlwZTsKLSAgICBpbnQgY250LCBidWZsZW47Ci17Ci0gICAgY2hhciBsYnVmWzY0XTsK LSAgICByZWdpc3RlciBpbnQgaTsKLSAgICBjaGFyICpjcDsKLQotICAgIGJ1ZltidWZsZW4tMV0g PSAnXDAnOyAgICAgICAgICAgICAgIC8qIG1ha2Ugc3VyZSBpdCdzIE5VTEwgdGVybWluYXRlZCAq LwotICAgIGJ1ZmxlbiAtPSAxOwotCi0gICAgc3dpdGNoKGRhdGFbMl0pIHsKLSAgICBjYXNlIEZC NjRfSVY6Ci0gICAgICAgIHNwcmludGYobGJ1ZiwgIiVzX0lWIiwgdHlwZSk7Ci0gICAgICAgIGNw ID0gbGJ1ZjsKLSAgICAgICAgZ290byBjb21tb247Ci0KLSAgICBjYXNlIEZCNjRfSVZfT0s6Ci0g ICAgICAgIHNwcmludGYobGJ1ZiwgIiVzX0lWX09LIiwgdHlwZSk7Ci0gICAgICAgIGNwID0gbGJ1 ZjsKLSAgICAgICAgZ290byBjb21tb247Ci0KLSAgICBjYXNlIEZCNjRfSVZfQkFEOgotICAgICAg ICBzcHJpbnRmKGxidWYsICIlc19JVl9CQUQiLCB0eXBlKTsKLSAgICAgICAgY3AgPSBsYnVmOwot ICAgICAgICBnb3RvIGNvbW1vbjsKLQotICAgIGNhc2UgRkI2NF9DSEFMTEVOR0U6Ci0gICAgICAg IHNwcmludGYobGJ1ZiwgIiVzX0NIQUxMRU5HRSIsIHR5cGUpOwotICAgICAgICBjcCA9IGxidWY7 Ci0gICAgICAgIGdvdG8gY29tbW9uOwotCi0gICAgY2FzZSBGQjY0X1JFU1BPTlNFOgotICAgICAg ICBzcHJpbnRmKGxidWYsICIlc19SRVNQT05TRSIsIHR5cGUpOwotICAgICAgICBjcCA9IGxidWY7 Ci0gICAgICAgIGdvdG8gY29tbW9uOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ByaW50Zihs YnVmLCAiICVkICh1bmtub3duKSIsIGRhdGFbMl0pOwotICAgICAgICBjcCA9IGxidWY7Ci0gICAg ICBjb21tb246Ci0gICAgICAgIGZvciAoOyAoYnVmbGVuID4gMCkgJiYgKCpidWYgPSAqY3ArKyk7 IGJ1ZisrKQotICAgICAgICAgICAgYnVmbGVuLS07Ci0gICAgICAgIGZvciAoaSA9IDM7IGkgPCBj bnQ7IGkrKykgewotICAgICAgICAgICAgc3ByaW50ZihsYnVmLCAiICVkIiwgZGF0YVtpXSk7Ci0g ICAgICAgICAgICBmb3IgKGNwID0gbGJ1ZjsgKGJ1ZmxlbiA+IDApICYmICgqYnVmID0gKmNwKysp OyBidWYrKykKLSAgICAgICAgICAgICAgICBidWZsZW4tLTsKLSAgICAgICAgfQotICAgICAgICBi cmVhazsKLSAgICB9Ci19Ci0KLXZvaWQKLWNmYjY0X3ByaW50c3ViKGRhdGEsIGNudCwgYnVmLCBi dWZsZW4pCi0gICAgdW5zaWduZWQgY2hhciAqZGF0YSwgKmJ1ZjsKLSAgICBpbnQgY250LCBidWZs ZW47Ci17Ci0gICAgZmI2NF9wcmludHN1YihkYXRhLCBjbnQsIGJ1ZiwgYnVmbGVuLCAiQ0ZCNjQi KTsKLX0KLQotdm9pZAotb2ZiNjRfcHJpbnRzdWIoZGF0YSwgY250LCBidWYsIGJ1ZmxlbikKLSAg ICB1bnNpZ25lZCBjaGFyICpkYXRhLCAqYnVmOwotICAgIGludCBjbnQsIGJ1ZmxlbjsKLXsKLSAg ICBmYjY0X3ByaW50c3ViKGRhdGEsIGNudCwgYnVmLCBidWZsZW4sICJPRkI2NCIpOwotfQotI2Vu ZGlmCi0KLXZvaWQKLWZiNjRfc3RyZWFtX2l2KHNlZWQsIHN0cCkKLSAgICBCbG9jayBzZWVkOwot ICAgIHJlZ2lzdGVyIHN0cnVjdCBkZXNfc3RpbmZvICpzdHA7Ci17Ci0gICAgaW50IHJjPTA7Ci0K LSAgICBtZW1jcHkoc3RwLT5zdHJfaXYsICAgICBzZWVkLCBzaXplb2YoQmxvY2spKTsKLSAgICBt ZW1jcHkoc3RwLT5zdHJfb3V0cHV0LCBzZWVkLCBzaXplb2YoQmxvY2spKTsKLQotICAgIG1lbXNl dChzdHAtPnN0cl9zY2hlZCwwLHNpemVvZihTY2hlZHVsZSkpOwotCi0gICAgY2toZXhkdW1wKCJm YjY0X3N0cmVhbV9pdiIsc3RwLT5zdHJfaWtleSw4KTsKLQotI2lmbmRlZiBNSVRfQ1VSUkVOVAot ICAgIHJjID0gZGVzX2tleV9zY2hlZChzdHAtPnN0cl9pa2V5LCBzdHAtPnN0cl9zY2hlZCk7Ci0g ICAgaWYgKCByYyA9PSAtMSApIHsKLSAgICAgICAgcHJpbnRmKCI/SW52YWxpZCBERVMga2V5IHNw ZWNpZmllZCBmb3IgZW5jcnlwdGlvblxyXG4iKTsKLSAgICAgICAgZGVidWcoRjExMCwiZmI2NF9z dHJlYW1faXYiLAotICAgICAgICAgICAgICAgImludmFsaWQgREVTIEtleSBzcGVjaWZpZWQgZm9y IGVuY3J5cHRpb24iLDApOwotICAgIH0gZWxzZSBpZiAoIHJjID09IC0yICkgewotICAgICAgICBw cmludGYoIj9XZWFrIERFUyBrZXkgc3BlY2lmaWVkIGZvciBlbmNyeXB0aW9uXHJcbiIpOwotICAg ICAgICBkZWJ1ZyhGMTEwLCJmYjY0X3N0cmVhbV9pdiIsCi0gICAgICAgICAgICAgICAid2VhayBE RVMgS2V5IHNwZWNpZmllZCBmb3IgZW5jcnlwdGlvbiIsMCk7Ci0gICAgfSBlbHNlIGlmICggcmMg IT0gMCApIHsKLSAgICAgICAgcHJpbnRmKCI/S2V5IFNjaGVkdWxlIG5vdCBjcmVhdGVkIGJ5IGVu Y3J5cHRpb25cclxuIik7Ci0gICAgICAgIGRlYnVnKEYxMTAsImZiNjRfc3RyZWFtX2l2IiwKLSAg ICAgICAgICAgICAgICJLZXkgU2NoZWR1bGUgbm90IGNyZWF0ZWQgYnkgZW5jcnlwdGlvbiIsMCk7 Ci0gICAgfQotICAgIGNraGV4ZHVtcCgiZmI2NF9zdHJlYW1faXYgc2NoZWR1bGUiLHN0cC0+c3Ry X3NjaGVkLDgqMTYpOwotI2VuZGlmIC8qIE1JVF9DVVJSRU5UICovCi0KLSAgICBzdHAtPnN0cl9p bmRleCA9IHNpemVvZihCbG9jayk7Ci19Ci0KLXZvaWQKLWZiNjRfc3RyZWFtX2tleShrZXksIHN0 cCkKLSAgICBCbG9jayBrZXk7Ci0gICAgcmVnaXN0ZXIgc3RydWN0IGRlc19zdGluZm8gKnN0cDsK LXsKLSAgICBpbnQgcmMgPSAwOwotCi0jaWZkZWYgTUlUX0NVUlJFTlQKLSAgICBtZW1jcHkoc3Rw LT5zdHJfa2V5Ynl0ZXMsIGtleSwgc2l6ZW9mKEJsb2NrKSk7Ci0gICAgc3RwLT5zdHJfa2V5Lmxl bmd0aCA9IDg7Ci0gICAgc3RwLT5zdHJfa2V5LmNvbnRlbnRzID0gc3RwLT5zdHJfa2V5Ynl0ZXM7 Ci0gICAgLyogdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhpcyBjb2RlIHVzZXMgZGVzIGVjYiBt b2RlLCBidXQKLSAgICBpdCBvbmx5IGV2ZXIgZG9lcyBvbmUgYmxvY2sgYXQgYSB0aW1lLiAgY2Jj IHdpdGggYSB6ZXJvIGl2Ci0gICAgaXMgaWRlbnRpY2FsICovCi0gICAgc3RwLT5zdHJfa2V5LmVu Y3R5cGUgPSBFTkNUWVBFX0RFU19DQkNfUkFXOwotI2Vsc2UgLyogTUlUX0NVUlJFTlQgKi8KLSAg ICBtZW1jcHkoc3RwLT5zdHJfaWtleSwga2V5LCBzaXplb2YoQmxvY2spKTsKLQotICAgIG1lbXNl dChzdHAtPnN0cl9zY2hlZCwwLHNpemVvZihTY2hlZHVsZSkpOwotCi0gICAgY2toZXhkdW1wKCJm YjY0X3N0cmVhbV9rZXkiLGtleSw4KTsKLQotICAgIHJjID0gZGVzX2tleV9zY2hlZChrZXksIHN0 cC0+c3RyX3NjaGVkKTsKLSAgICBpZiAoIHJjID09IC0xICkgewotICAgICAgICBwcmludGYoIj9J bnZhbGlkIERFUyBrZXkgc3BlY2lmaWVkIGZvciBlbmNyeXB0aW9uXHJcbiIpOwotICAgICAgICBk ZWJ1ZyhGMTEwLCJmYjY0X3N0cmVhbV9rZXkiLAotICAgICAgICAgICAgICAgImludmFsaWQgREVT IEtleSBzcGVjaWZpZWQgZm9yIGVuY3J5cHRpb24iLDApOwotICAgIH0gZWxzZSBpZiAoIHJjID09 IC0yICkgewotICAgICAgICBwcmludGYoIj9XZWFrIERFUyBrZXkgc3BlY2lmaWVkIGZvciBlbmNy eXB0aW9uXHJcbiIpOwotICAgICAgICBkZWJ1ZyhGMTEwLCJmYjY0X3N0cmVhbV9rZXkiLAotICAg ICAgICAgICAgICAgIndlYWsgREVTIEtleSBzcGVjaWZpZWQgZm9yIGVuY3J5cHRpb24iLDApOwot ICAgIH0gZWxzZSBpZiAoIHJjICE9IDAgKSB7Ci0gICAgICAgIHByaW50ZigiP0tleSBTY2hlZHVs ZSBub3QgY3JlYXRlZCBieSBlbmNyeXB0aW9uXHJcbiIpOwotICAgICAgICBkZWJ1ZyhGMTEwLCJm YjY0X3N0cmVhbV9rZXkiLAotICAgICAgICAgICAgICAgIktleSBTY2hlZHVsZSBub3QgY3JlYXRl ZCBieSBlbmNyeXB0aW9uIiwwKTsKLSAgICB9Ci0gICAgY2toZXhkdW1wKCJmYjY0X3N0cmVhbV9r ZXkgc2NoZWR1bGUiLHN0cC0+c3RyX3NjaGVkLDgqMTYpOwotI2VuZGlmIC8qIE1JVF9DVVJSRU5U ICovCi0KLSAgICBtZW1jcHkoc3RwLT5zdHJfb3V0cHV0LCBzdHAtPnN0cl9pdiwgc2l6ZW9mKEJs b2NrKSk7Ci0KLSAgICBzdHAtPnN0cl9pbmRleCA9IHNpemVvZihCbG9jayk7Ci19Ci0KLS8qCi0g KiBERVMgNjQgYml0IENpcGhlciBGZWVkYmFjawotICoKLSAqICAgICBrZXkgLS0tPistLS0tLSsK LSAqICAgICAgICAgICstPnwgREVTIHwtLSsKLSAqICAgICAgICAgIHwgICstLS0tLSsgIHwKLSAq ICAgICAgICAgIHwgICAgICAgICAgIHYKLSAqICBJTlBVVCAtLSgtLS0tLS0tLS0+KCspKy0tLT4g REFUQQotICogICAgICAgICAgfCAgICAgICAgICAgICB8Ci0gKiAgICAgICAgICArLS0tLS0tLS0t LS0tLSsKLSAqCi0gKgotICogR2l2ZW46Ci0gKiAgICAgIGlWOiBJbml0aWFsIHZlY3RvciwgNjQg Yml0cyAoOCBieXRlcykgbG9uZy4KLSAqICAgICAgRG46IHRoZSBudGggY2h1bmsgb2YgNjQgYml0 cyAoOCBieXRlcykgb2YgZGF0YSB0byBlbmNyeXB0IChkZWNyeXB0KS4KLSAqICAgICAgT246IHRo ZSBudGggY2h1bmsgb2YgNjQgYml0cyAoOCBieXRlcykgb2YgZW5jcnlwdGVkIChkZWNyeXB0ZWQp IG91dHB1dC4KLSAqCi0gKiAgICAgIFYwID0gREVTKGlWLCBrZXkpCi0gKiAgICAgIE9uID0gRG4g XiBWbgotICogICAgICBWKG4rMSkgPSBERVMoT24sIGtleSkKLSAqLwotCi12b2lkCi1jZmI2NF9l bmNyeXB0KHMsIGMpCi0gICAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAqczsKLSAgICBpbnQgYzsK LXsKLSAgICByZWdpc3RlciBzdHJ1Y3QgZGVzX3N0aW5mbyAqc3RwID0gJmRlc19mYltDRkJdLnN0 cmVhbXNbRElSX0VOQ1JZUFQtMV07Ci0gICAgcmVnaXN0ZXIgaW50IGluZGV4OwotCi0gICAgaW5k ZXggPSBzdHAtPnN0cl9pbmRleDsKLSAgICB3aGlsZSAoYy0tID4gMCkgewotICAgICAgICBpZiAo aW5kZXggPT0gc2l6ZW9mKEJsb2NrKSkgewotICAgICAgICAgICAgQmxvY2sgYjsKLSNpZmRlZiBN SVRfQ1VSUkVOVAotICAgICAgICAgICAgZWNiX2VuY3J5cHQoc3RwLCBzdHAtPnN0cl9vdXRwdXQs IGIpOwotI2Vsc2UgLyogTUlUX0NVUlJFTlQgKi8KLSAgICAgICAgICAgIGRlc19lY2JfZW5jcnlw dChzdHAtPnN0cl9vdXRwdXQsIGIsIHN0cC0+c3RyX3NjaGVkLCAxKTsKLSNlbmRpZiAvKiBNSVRf Q1VSUkVOVCAqLwotICAgICAgICAgICAgbWVtY3B5KHN0cC0+c3RyX2ZlZWQsYixzaXplb2YoQmxv Y2spKTsKLSAgICAgICAgICAgIGluZGV4ID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIE9u IGVuY3J5cHRpb24sIHdlIHN0b3JlIChmZWVkIF4gZGF0YSkgd2hpY2ggaXMgY3lwaGVyICovCi0g ICAgICAgICpzID0gc3RwLT5zdHJfb3V0cHV0W2luZGV4XSA9IChzdHAtPnN0cl9mZWVkW2luZGV4 XSBeICpzKTsKLSAgICAgICAgcysrOwotICAgICAgICBpbmRleCsrOwotICAgIH0KLSAgICBzdHAt PnN0cl9pbmRleCA9IGluZGV4OwotfQotCi1pbnQKLWNmYjY0X2RlY3J5cHQoZGF0YSkKLSAgICBp bnQgZGF0YTsKLXsKLSAgICByZWdpc3RlciBzdHJ1Y3QgZGVzX3N0aW5mbyAqc3RwID0gJmRlc19m YltDRkJdLnN0cmVhbXNbRElSX0RFQ1JZUFQtMV07Ci0gICAgaW50IGluZGV4OwotCi0gICAgaWYg KGRhdGEgPT0gLTEpIHsKLSAgICAgICAgLyoKLSAgICAgICAgKiBCYWNrIHVwIG9uZSBieXRlLiAg SXQgaXMgYXNzdW1lZCB0aGF0IHdlIHdpbGwKLSAgICAgICAgKiBuZXZlciBiYWNrIHVwIG1vcmUg dGhhbiBvbmUgYnl0ZS4gIElmIHdlIGRvLCB0aGlzCi0gICAgICAgICogbWF5IG9yIG1heSBub3Qg d29yay4KLSAgICAgICAgKi8KLSAgICAgICAgaWYgKHN0cC0+c3RyX2luZGV4KQotICAgICAgICAg ICAgLS1zdHAtPnN0cl9pbmRleDsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLQotICAgIGlu ZGV4ID0gc3RwLT5zdHJfaW5kZXgrKzsKLSAgICBpZiAoaW5kZXggPT0gc2l6ZW9mKEJsb2NrKSkg ewotICAgICAgICBCbG9jayBiOwotI2lmZGVmIE1JVF9DVVJSRU5UCi0gICAgICAgIGVjYl9lbmNy eXB0KHN0cCwgc3RwLT5zdHJfb3V0cHV0LCBiKTsKLSNlbHNlIC8qIE1JVF9DVVJSRU5UICovCi0g ICAgICAgIGRlc19lY2JfZW5jcnlwdChzdHAtPnN0cl9vdXRwdXQsIGIsIHN0cC0+c3RyX3NjaGVk LCAxKTsKLSNlbmRpZiAvKiBNSVRfQ1VSUkVOVCAqLwotICAgICAgICBtZW1jcHkoc3RwLT5zdHJf ZmVlZCwgYiwgc2l6ZW9mKEJsb2NrKSk7Ci0gICAgICAgIHN0cC0+c3RyX2luZGV4ID0gMTsgICAg IC8qIE5leHQgdGltZSB3aWxsIGJlIDEgKi8KLSAgICAgICAgaW5kZXggPSAwOyAgICAgICAgICAg ICAgLyogQnV0IG5vdyB1c2UgMCAqLwotICAgIH0KLQotICAgIC8qIE9uIGRlY3J5cHRpb24gd2Ug c3RvcmUgKGRhdGEpIHdoaWNoIGlzIGN5cGhlci4gKi8KLSAgICBzdHAtPnN0cl9vdXRwdXRbaW5k ZXhdID0gZGF0YTsKLSAgICByZXR1cm4oZGF0YSBeIHN0cC0+c3RyX2ZlZWRbaW5kZXhdKTsKLX0K LQotLyoKLSAqIERFUyA2NCBiaXQgT3V0cHV0IEZlZWRiYWNrCi0gKgotICoga2V5IC0tLT4rLS0t LS0rCi0gKiAgICAgICstPnwgREVTIHwtLSsKLSAqICAgICAgfCAgKy0tLS0tKyAgfAotICogICAg ICArLS0tLS0tLS0tLS0rCi0gKiAgICAgICAgICAgICAgICAgIHYKLSAqICBJTlBVVCAtLS0tLS0t LT4oKykgLS0tLT4gREFUQQotICoKLSAqIEdpdmVuOgotICogICAgICBpVjogSW5pdGlhbCB2ZWN0 b3IsIDY0IGJpdHMgKDggYnl0ZXMpIGxvbmcuCi0gKiAgICAgIERuOiB0aGUgbnRoIGNodW5rIG9m IDY0IGJpdHMgKDggYnl0ZXMpIG9mIGRhdGEgdG8gZW5jcnlwdCAoZGVjcnlwdCkuCi0gKiAgICAg IE9uOiB0aGUgbnRoIGNodW5rIG9mIDY0IGJpdHMgKDggYnl0ZXMpIG9mIGVuY3J5cHRlZCAoZGVj cnlwdGVkKSBvdXRwdXQuCi0gKgotICogICAgICBWMCA9IERFUyhpViwga2V5KQotICogICAgICBW KG4rMSkgPSBERVMoVm4sIGtleSkKLSAqICAgICAgT24gPSBEbiBeIFZuCi0gKi8KLXZvaWQKLW9m YjY0X2VuY3J5cHQocywgYykKLSAgICByZWdpc3RlciB1bnNpZ25lZCBjaGFyICpzOwotICAgIGlu dCBjOwotewotICAgIHJlZ2lzdGVyIHN0cnVjdCBkZXNfc3RpbmZvICpzdHAgPSAmZGVzX2ZiW09G Ql0uc3RyZWFtc1tESVJfRU5DUllQVC0xXTsKLSAgICByZWdpc3RlciBpbnQgaW5kZXg7Ci0KLSAg ICBpbmRleCA9IHN0cC0+c3RyX2luZGV4OwotICAgIHdoaWxlIChjLS0gPiAwKSB7Ci0gICAgICAg IGlmIChpbmRleCA9PSBzaXplb2YoQmxvY2spKSB7Ci0gICAgICAgICAgICBCbG9jayBiOwotI2lm ZGVmIE1JVF9DVVJSRU5UCi0gICAgICAgICAgICBlY2JfZW5jcnlwdChzdHAsIHN0cC0+c3RyX2Zl ZWQsIGIpOwotI2Vsc2UgLyogTUlUX0NVUlJFTlQgKi8KLSAgICAgICAgICAgIGRlc19lY2JfZW5j cnlwdChzdHAtPnN0cl9mZWVkLCBiLCBzdHAtPnN0cl9zY2hlZCwgMSk7Ci0jZW5kaWYgLyogTUlU X0NVUlJFTlQgKi8KLSAgICAgICAgICAgIG1lbWNweShzdHAtPnN0cl9mZWVkLGIsc2l6ZW9mKEJs b2NrKSk7Ci0gICAgICAgICAgICBpbmRleCA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgKnMrKyBe PSBzdHAtPnN0cl9mZWVkW2luZGV4XTsKLSAgICAgICAgaW5kZXgrKzsKLSAgICB9Ci0gICAgc3Rw LT5zdHJfaW5kZXggPSBpbmRleDsKLX0KLQotaW50Ci1vZmI2NF9kZWNyeXB0KGRhdGEpCi0gICAg aW50IGRhdGE7Ci17Ci0gICAgcmVnaXN0ZXIgc3RydWN0IGRlc19zdGluZm8gKnN0cCA9ICZkZXNf ZmJbT0ZCXS5zdHJlYW1zW0RJUl9ERUNSWVBULTFdOwotICAgIGludCBpbmRleDsKLQotICAgIGlm IChkYXRhID09IC0xKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICogQmFjayB1cCBvbmUgYnl0ZS4g IEl0IGlzIGFzc3VtZWQgdGhhdCB3ZSB3aWxsCi0gICAgICAgICogbmV2ZXIgYmFjayB1cCBtb3Jl IHRoYW4gb25lIGJ5dGUuICBJZiB3ZSBkbywgdGhpcwotICAgICAgICAqIG1heSBvciBtYXkgbm90 IHdvcmsuCi0gICAgICAgICovCi0gICAgICAgIGlmIChzdHAtPnN0cl9pbmRleCkKLSAgICAgICAg ICAgIC0tc3RwLT5zdHJfaW5kZXg7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0KLSAgICBp bmRleCA9IHN0cC0+c3RyX2luZGV4Kys7Ci0gICAgaWYgKGluZGV4ID09IHNpemVvZihCbG9jaykp IHsKLSAgICAgICAgQmxvY2sgYjsKLSNpZmRlZiBNSVRfQ1VSUkVOVAotICAgICAgICBlY2JfZW5j cnlwdChzdHAsIHN0cC0+c3RyX2ZlZWQsIGIpOwotI2Vsc2UgLyogTUlUX0NVUlJFTlQgKi8KLSAg ICAgICAgZGVzX2VjYl9lbmNyeXB0KHN0cC0+c3RyX2ZlZWQsIGIsIHN0cC0+c3RyX3NjaGVkLCAx KTsKLSNlbmRpZiAvKiBNSVRfQ1VSUkVOVCAqLwotICAgICAgICBtZW1jcHkoc3RwLT5zdHJfZmVl ZCwgYiwgc2l6ZW9mKEJsb2NrKSk7Ci0gICAgICAgIHN0cC0+c3RyX2luZGV4ID0gMTsgICAgIC8q IE5leHQgdGltZSB3aWxsIGJlIDEgKi8KLSAgICAgICAgaW5kZXggPSAwOyAgICAgICAgICAgICAg LyogQnV0IG5vdyB1c2UgMCAqLwotICAgIH0KLQotICAgIHJldHVybihkYXRhIF4gc3RwLT5zdHJf ZmVlZFtpbmRleF0pOwotfQotCi0KLXZvaWQgZGVzM19mYjY0X3N0cmVhbV9pdiBQKChCbG9jaywg c3RydWN0IGRlczNfc3RpbmZvICopKTsKLXZvaWQgZGVzM19mYjY0X2luaXQgUCgoc3RydWN0IGRl czNfZmIgKikpOwotc3RhdGljIGludCBkZXMzX2ZiNjRfc3RhcnQgUCgoc3RydWN0IGRlczNfZmIg KiwgaW50LCBpbnQpKTsKLWludCBkZXMzX2ZiNjRfaXMgUCgodW5zaWduZWQgY2hhciAqLCBpbnQs IHN0cnVjdCBkZXMzX2ZiICopKTsKLWludCBkZXMzX2ZiNjRfcmVwbHkgUCgodW5zaWduZWQgY2hh ciAqLCBpbnQsIHN0cnVjdCBkZXMzX2ZiICopKTsKLXN0YXRpYyBpbnQgZGVzM19mYjY0X3Nlc3Np b24gUCgoU2Vzc2lvbl9LZXkgKiwgaW50LCBzdHJ1Y3QgZGVzM19mYiAqKSk7Ci12b2lkIGRlczNf ZmI2NF9zdHJlYW1fa2V5IFAoKEJsb2NrICosIHN0cnVjdCBkZXMzX3N0aW5mbyAqKSk7Ci1pbnQg ZGVzM19mYjY0X2tleWlkIFAoKGludCwgdW5zaWduZWQgY2hhciAqLCBpbnQgKiwgc3RydWN0IGRl czNfZmIgKikpOwotCi12b2lkCi1kZXMzX2NmYjY0X2luaXQoc2VydmVyKQotICAgIGludCBzZXJ2 ZXI7Ci17Ci0gICAgZGVzM19mYjY0X2luaXQoJmRlczNfZmJbQ0ZCXSk7Ci0gICAgZGVzM19mYltD RkJdLmZiX2ZlZWRbNF0gPSBFTkNUWVBFX0RFUzNfQ0ZCNjQ7Ci0gICAgZGVzM19mYltDRkJdLnN0 cmVhbXNbMF0uc3RyX2ZsYWdzaGlmdCA9IFNISUZUX1ZBTCgwLCBDRkIpOwotICAgIGRlczNfZmJb Q0ZCXS5zdHJlYW1zWzFdLnN0cl9mbGFnc2hpZnQgPSBTSElGVF9WQUwoMSwgQ0ZCKTsKLX0KLQot dm9pZAotZGVzM19vZmI2NF9pbml0KHNlcnZlcikKLSAgICBpbnQgc2VydmVyOwotewotICAgIGRl czNfZmI2NF9pbml0KCZkZXMzX2ZiW09GQl0pOwotICAgIGRlczNfZmJbT0ZCXS5mYl9mZWVkWzRd ID0gRU5DVFlQRV9ERVMzX09GQjY0OwotICAgIGRlczNfZmJbQ0ZCXS5zdHJlYW1zWzBdLnN0cl9m bGFnc2hpZnQgPSBTSElGVF9WQUwoMCwgT0ZCKTsKLSAgICBkZXMzX2ZiW0NGQl0uc3RyZWFtc1sx XS5zdHJfZmxhZ3NoaWZ0ID0gU0hJRlRfVkFMKDEsIE9GQik7Ci19Ci0KLXZvaWQKLWRlczNfZmI2 NF9pbml0KGZicCkKLSAgICByZWdpc3RlciBzdHJ1Y3QgZGVzM19mYiAqZmJwOwotewotICAgIG1l bXNldCgodm9pZCAqKWZicCwgMCwgc2l6ZW9mKCpmYnApKTsKLSAgICBmYnAtPnN0YXRlWzBdID0g ZmJwLT5zdGF0ZVsxXSA9IHhGQUlMRUQ7Ci0gICAgZmJwLT5mYl9mZWVkWzBdID0gSUFDOwotICAg IGZicC0+ZmJfZmVlZFsxXSA9IFNCOwotICAgIGZicC0+ZmJfZmVlZFsyXSA9IFRFTE9QVF9FTkNS WVBUSU9OOwotICAgIGZicC0+ZmJfZmVlZFszXSA9IEVOQ1JZUFRfSVM7Ci19Ci0KLS8qCi0gKiBS ZXR1cm5zOgotICogICAgICAtMTogc29tZSBlcnJvci4gIE5lZ290aWF0aW9uIGlzIGRvbmUsIGVu Y3J5cHRpb24gbm90IHJlYWR5LgotICogICAgICAgMDogU3VjY2Vzc2Z1bCwgaW5pdGlhbCBuZWdv dGlhdGlvbiBhbGwgZG9uZS4KLSAqICAgICAgIDE6IHN1Y2Nlc3NmdWwsIG5lZ290aWF0aW9uIG5v dCBkb25lIHlldC4KLSAqICAgICAgIDI6IE5vdCB5ZXQuICBPdGhlciB0aGluZ3MgKGxpa2UgZ2V0 dGluZyB0aGUga2V5IGZyb20KLSAqICAgICAgICAgIEtlcmJlcm9zKSBoYXZlIHRvIGhhcHBlbiBi ZWZvcmUgd2UgY2FuIGNvbnRpbnVlLgotICovCi1pbnQKLWRlczNfY2ZiNjRfc3RhcnQoZGlyLCBz ZXJ2ZXIpCi0gICAgaW50IGRpcjsKLSAgICBpbnQgc2VydmVyOwotewotICAgIHJldHVybihkZXMz X2ZiNjRfc3RhcnQoJmRlczNfZmJbQ0ZCXSwgZGlyLCBzZXJ2ZXIpKTsKLX0KLWludAotZGVzM19v ZmI2NF9zdGFydChkaXIsIHNlcnZlcikKLSAgICBpbnQgZGlyOwotICAgIGludCBzZXJ2ZXI7Ci17 Ci0gICAgcmV0dXJuKGRlczNfZmI2NF9zdGFydCgmZGVzM19mYltPRkJdLCBkaXIsIHNlcnZlcikp OwotfQotCi1zdGF0aWMgaW50Ci1kZXMzX2ZiNjRfc3RhcnQoZmJwLCBkaXIsIHNlcnZlcikKLSAg ICBzdHJ1Y3QgZGVzM19mYiAqZmJwOwotICAgIGludCBkaXI7Ci0gICAgaW50IHNlcnZlcjsKLXsK LSAgICBpbnQgeDsKLSAgICB1bnNpZ25lZCBjaGFyICpwOwotICAgIHJlZ2lzdGVyIGludCBzdGF0 ZTsKLQotICAgIHN3aXRjaCAoZGlyKSB7Ci0gICAgY2FzZSBESVJfREVDUllQVDoKLSAgICAgICAg LyoKLSAgICAgICAgKiBUaGlzIGlzIHNpbXBseSBhIHJlcXVlc3QgdG8gaGF2ZSB0aGUgb3RoZXIg c2lkZQotICAgICAgICAqIHN0YXJ0IG91dHB1dCAob3VyIGlucHV0KS4gIEhlIHdpbGwgbmVnb3Rp YXRlIGFuCi0gICAgICAgICogSVYgc28gd2UgbmVlZCBub3QgbG9vayBmb3IgaXQuCi0gICAgICAg ICovCi0gICAgICAgIHN0YXRlID0gZmJwLT5zdGF0ZVtkaXItMV07Ci0gICAgICAgIGlmIChzdGF0 ZSA9PSB4RkFJTEVEKQotICAgICAgICAgICAgc3RhdGUgPSBJTl9QUk9HUkVTUzsKLSAgICAgICAg YnJlYWs7Ci0KLSAgICBjYXNlIERJUl9FTkNSWVBUOgotICAgICAgICBzdGF0ZSA9IGZicC0+c3Rh dGVbZGlyLTFdOwotICAgICAgICBpZiAoc3RhdGUgPT0geEZBSUxFRCkKLSAgICAgICAgICAgIHN0 YXRlID0gSU5fUFJPR1JFU1M7Ci0gICAgICAgIGVsc2UgaWYgKChzdGF0ZSAmIE5PX1NFTkRfSVYp ID09IDApCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAoIVZBTElES0VZKGZicC0+ a3JiZGVzX2tleVswXSkgfHwKLSAgICAgICAgICAgICFWQUxJREtFWShmYnAtPmtyYmRlc19rZXlb MV0pIHx8Ci0gICAgICAgICAgICAhVkFMSURLRVkoZmJwLT5rcmJkZXNfa2V5WzJdKSApIHsKLSAg ICAgICAgICAgIGZicC0+bmVlZF9zdGFydCA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg ICAgfQotICAgICAgICBzdGF0ZSAmPSB+Tk9fU0VORF9JVjsKLSAgICAgICAgc3RhdGUgfD0gTk9f UkVDVl9JVjsKLSAgICAgICAgLyoKLSAgICAgICAgKiBDcmVhdGUgYSByYW5kb20gZmVlZCBhbmQg c2VuZCBpdCBvdmVyLgotICAgICAgICAqLwotICAgICAgICBkZXNfbmV3X3JhbmRvbV9rZXkoZmJw LT50ZW1wX2ZlZWQpOwotI2lmZGVmIExJQkRFUwotICAgICAgICBkZXNfZWNiM19lbmNyeXB0KGZi cC0+dGVtcF9mZWVkLCBmYnAtPnRlbXBfZmVlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBm YnAtPmtyYmRlc19zY2hlZFswXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBmYnAtPmtyYmRl c19zY2hlZFsxXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBmYnAtPmtyYmRlc19zY2hlZFsy XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAxKTsKLSNlbHNlIC8qIExJQkRFUyAqLwotICAg ICAgICBkZXNfZWNiX2VuY3J5cHQoZmJwLT50ZW1wX2ZlZWQsIGZicC0+dGVtcF9mZWVkLAotICAg ICAgICAgICAgICAgICAgICAgICAgIGZicC0+a3JiZGVzX3NjaGVkWzBdLCAxKTsKLSAgICAgICAg ZGVzX2VjYl9lbmNyeXB0KGZicC0+dGVtcF9mZWVkLCBmYnAtPnRlbXBfZmVlZCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICBmYnAtPmtyYmRlc19zY2hlZFsxXSwgMCk7Ci0gICAgICAgIGRlc19l Y2JfZW5jcnlwdChmYnAtPnRlbXBfZmVlZCwgZmJwLT50ZW1wX2ZlZWQsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgZmJwLT5rcmJkZXNfc2NoZWRbMl0sIDEpOwotI2VuZGlmIC8qIExJQkRFUyAq LwotCi0gICAgICAgIHAgPSBmYnAtPmZiX2ZlZWQgKyAzOwotICAgICAgICAqcCsrID0gRU5DUllQ VF9JUzsKLSAgICAgICAgcCsrOwotICAgICAgICAqcCsrID0gRkI2NF9JVjsKLSAgICAgICAgZm9y ICh4ID0gMDsgeCA8IHNpemVvZihCbG9jayk7ICsreCkgewotICAgICAgICAgICAgaWYgKCggKnAr KyA9IGZicC0+dGVtcF9mZWVkW3hdKSA9PSBJQUMpCi0gICAgICAgICAgICAgICAgKnArKyA9IElB QzsKLSAgICAgICAgfQotICAgICAgICAqcCsrID0gSUFDOwotICAgICAgICAqcCsrID0gU0U7Ci0K LSAgICAgICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7Ci0gICAgICAgICAgICBp bnQgaTsKLSAgICAgICAgICAgIHNwcmludGYodG5fbXNnLAotICAgICAgICAgICAgICAgICAgICAg IlRFTE5FVCBTRU5UIFNCICVzIElTICVzIEZCNjRfSVYgIiwKLSAgICAgICAgICAgICAgICAgICAg IFRFTE9QVChmYnAtPmZiX2ZlZWRbMl0pLAotICAgICAgICAgICAgICAgICAgICAgZW5jdHlwZV9u YW1lc1tmYnAtPmZiX2ZlZWRbNF1dKTsgLyogc2FmZSAqLwotICAgICAgICAgICAgdG5faGV4KChD SEFSICopdG5fbXNnLFROX01TR19MRU4sJmZicC0+ZmJfZmVlZFs2XSwKLQkJKHAtZmJwLT5mYl9m ZWVkKS0yLTYpOwotICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZywiSUFDIFNFIixUTl9NU0df TEVOKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsdG5fbXNnLCIiLDApOwotICAgICAgICAgICAg aWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZyk7Ci0gICAgICAgIH0KLSNpZmRl ZiBPUzIKLSAgICAgICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7 Ci0jZW5kaWYKLSAgICAgICAgdHRvbChmYnAtPmZiX2ZlZWQsIHAgLSBmYnAtPmZiX2ZlZWQpOwot I2lmZGVmIE9TMgotICAgICAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRpZgotICAgICAg ICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4oeEZBSUxFRCk7Ci0gICAgfQot ICAgIHJldHVybihmYnAtPnN0YXRlW2Rpci0xXSA9IHN0YXRlKTsKLX0KLQotLyoKLSAqIFJldHVy bnM6Ci0gKiAgICAgIC0xOiBzb21lIGVycm9yLiAgTmVnb3RpYXRpb24gaXMgZG9uZSwgZW5jcnlw dGlvbiBub3QgcmVhZHkuCi0gKiAgICAgICAwOiBTdWNjZXNzZnVsLCBpbml0aWFsIG5lZ290aWF0 aW9uIGFsbCBkb25lLgotICogICAgICAgMTogc3VjY2Vzc2Z1bCwgbmVnb3RpYXRpb24gbm90IGRv bmUgeWV0LgotICovCi1pbnQKLWRlczNfY2ZiNjRfaXMoZGF0YSwgY250KQotICAgIHVuc2lnbmVk IGNoYXIgKmRhdGE7Ci0gICAgaW50IGNudDsKLXsKLSAgICByZXR1cm4oZGVzM19mYjY0X2lzKGRh dGEsIGNudCwgJmRlczNfZmJbQ0ZCXSkpOwotfQotCi1pbnQKLWRlczNfb2ZiNjRfaXMoZGF0YSwg Y250KQotICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0gICAgaW50IGNudDsKLXsKLSAgICByZXR1 cm4oZGVzM19mYjY0X2lzKGRhdGEsIGNudCwgJmRlczNfZmJbT0ZCXSkpOwotfQotCi1pbnQKLWRl czNfZmI2NF9pcyhkYXRhLCBjbnQsIGZicCkKLSAgICB1bnNpZ25lZCBjaGFyICpkYXRhOwotICAg IGludCBjbnQ7Ci0gICAgc3RydWN0IGRlczNfZmIgKmZicDsKLXsKLSAgICB1bnNpZ25lZCBjaGFy ICpwOwotICAgIHJlZ2lzdGVyIGludCBzdGF0ZSA9IGZicC0+c3RhdGVbRElSX0RFQ1JZUFQtMV07 Ci0KLSAgICBpZiAoY250LS0gPCAxKQotICAgICAgICBnb3RvIGZhaWx1cmU7Ci0KLSNpZmRlZiBD S19TU0wKLSAgICBpZiAoIVRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVf Zm9sbG93cykKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICBzd2l0Y2ggKCpkYXRhKyspIHsKLSAg ICBjYXNlIEZCNjRfSVY6Ci0gICAgICAgIGlmIChjbnQgIT0gc2l6ZW9mKEJsb2NrKSkgewotI2lm ZGVmIERFQlVHCi0gICAgICAgICAgICBpZiAoZW5jcnlwdF9kZWJ1Z19tb2RlKQotICAgICAgICAg ICAgICAgIHByaW50ZigiREVTM19GQjY0OiBpbml0aWFsIHZlY3RvciBmYWlsZWQgb24gc2l6ZVxy XG4iKTsKLSNlbmRpZgotICAgICAgICAgICAgc3RhdGUgPSB4RkFJTEVEOwotICAgICAgICAgICAg Z290byBmYWlsdXJlOwotICAgICAgICB9Ci0KLSNpZmRlZiBERUJVRwotICAgICAgICBpZiAoZW5j cnlwdF9kZWJ1Z19tb2RlKSB7Ci0gICAgICAgICAgICBwcmludGYoIkRFUzNfRkI2NDogaW5pdGlh bCB2ZWN0b3IgcmVjZWl2ZWRcclxuIik7Ci0gICAgICAgICAgICBwcmludGYoIkluaXRpYWxpemlu ZyBEZWNyeXB0IHN0cmVhbVxyXG4iKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIGRlczNf ZmI2NF9zdHJlYW1faXYoKHZvaWQgKilkYXRhLCAmZmJwLT5zdHJlYW1zW0RJUl9ERUNSWVBULTFd KTsKLQotICAgICAgICBwID0gZmJwLT5mYl9mZWVkICsgMzsKLSAgICAgICAgKnArKyA9IEVOQ1JZ UFRfUkVQTFk7Ci0gICAgICAgIHArKzsKLSAgICAgICAgKnArKyA9IEZCNjRfSVZfT0s7Ci0gICAg ICAgICpwKysgPSBJQUM7Ci0gICAgICAgICpwKysgPSBTRTsKLQotICAgICAgICBpZiAoZGVibG9n IHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgICAgIGludCBpOwotICAgICAgICAgICAg c3ByaW50Zih0bl9tc2csCi0gICAgICAgICAgICAgICAgICAgICAiVEVMTkVUIFNFTlQgU0IgJXMg UkVQTFkgJXMgRkI2NF9JVl9PSyAiLAotICAgICAgICAgICAgICAgICAgICAgVEVMT1BUKGZicC0+ ZmJfZmVlZFsyXSksCi0gICAgICAgICAgICAgICAgICAgICBlbmN0eXBlX25hbWVzW2ZicC0+ZmJf ZmVlZFs0XV0pOyAvKiBzYWZlICovCi0gICAgICAgICAgICB0bl9oZXgoKENIQVIgKil0bl9tc2cs VE5fTVNHX0xFTiwmZmJwLT5mYl9mZWVkWzZdLAotCQkocC1mYnAtPmZiX2ZlZWQpLTItNik7Ci0g ICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLCJJQUMgU0UiLFROX01TR19MRU4pOwotICAgICAg ICAgICAgZGVidWcoRjEwMCx0bl9tc2csIiIsMCk7Ci0gICAgICAgICAgICBpZiAodG5fZGViIHx8 IGRlYnNlcykgdG5fZGVidWcodG5fbXNnKTsKLSAgICAgICAgfQotI2lmZGVmIE9TMgotICAgICAg ICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNlbmRpZgotICAg ICAgICB0dG9sKGZicC0+ZmJfZmVlZCwgcCAtIGZicC0+ZmJfZmVlZCk7Ci0jaWZkZWYgT1MyCi0g ICAgICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwotI2VuZGlmCi0gICAgICAgIHN0YXRlID0gSU5f UFJPR1JFU1M7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSNpZiAwCi0gICAgICAg IGlmIChlbmNyeXB0X2RlYnVnX21vZGUpIHsKLSAgICAgICAgICAgIHByaW50ZigiVW5rbm93biBv cHRpb24gdHlwZTogJWRcclxuIiwgKihkYXRhLTEpKTsKLSAgICAgICAgICAgIHByaW50ZigiXHJc biIpOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgLyogRkFMTCBUSFJPVUdIICovCi0gICAg ICBmYWlsdXJlOgotICAgICAgICAvKgotICAgICAgICAqIFdlIGZhaWxlZC4gIFNlbmQgYW4gRkI2 NF9JVl9CQUQgb3B0aW9uCi0gICAgICAgICogdG8gdGhlIG90aGVyIHNpZGUgc28gaXQgd2lsbCBr bm93IHRoYXQKLSAgICAgICAgKiB0aGluZ3MgZmFpbGVkLgotICAgICAgICAqLwotICAgICAgICBw ID0gZmJwLT5mYl9mZWVkICsgMzsKLSAgICAgICAgKnArKyA9IEVOQ1JZUFRfUkVQTFk7Ci0gICAg ICAgIHArKzsKLSAgICAgICAgKnArKyA9IEZCNjRfSVZfQkFEOwotICAgICAgICAqcCsrID0gSUFD OwotICAgICAgICAqcCsrID0gU0U7Ci0KLSAgICAgICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwg ZGVic2VzKSB7Ci0gICAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICAgIHNwcmludGYodG5fbXNn LAotICAgICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICVzIFJFUExZICVzIEZCNjRf SVZfQkFEICIsCi0gICAgICAgICAgICAgICAgICAgICBURUxPUFQoZmJwLT5mYl9mZWVkWzJdKSwK LSAgICAgICAgICAgICAgICAgICAgIGVuY3R5cGVfbmFtZXNbZmJwLT5mYl9mZWVkWzRdXSk7IC8q IHNhZmUgKi8KLSAgICAgICAgICAgIHRuX2hleCgoQ0hBUiAqKXRuX21zZyxUTl9NU0dfTEVOLCZm YnAtPmZiX2ZlZWRbNl0sCi0JCShwLWZicC0+ZmJfZmVlZCktMi02KTsKLSAgICAgICAgICAgIGNr c3RybmNhdCh0bl9tc2csIklBQyBTRSIsVE5fTVNHX0xFTik7Ci0gICAgICAgICAgICBkZWJ1ZyhG MTAwLHRuX21zZywiIiwwKTsKLSAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9k ZWJ1Zyh0bl9tc2cpOwotICAgICAgICB9Ci0jaWZkZWYgT1MyCi0gICAgICAgIFJlcXVlc3RUZWxu ZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwotI2VuZGlmCi0gICAgICAgIHR0b2woZmJw LT5mYl9mZWVkLCBwIC0gZmJwLT5mYl9mZWVkKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgUmVsZWFz ZVRlbG5ldE11dGV4KCk7Ci0jZW5kaWYKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVy bihmYnAtPnN0YXRlW0RJUl9ERUNSWVBULTFdID0gc3RhdGUpOwotfQotCi0vKgotICogUmV0dXJu czoKLSAqICAgICAgLTE6IHNvbWUgZXJyb3IuICBOZWdvdGlhdGlvbiBpcyBkb25lLCBlbmNyeXB0 aW9uIG5vdCByZWFkeS4KLSAqICAgICAgIDA6IFN1Y2Nlc3NmdWwsIGluaXRpYWwgbmVnb3RpYXRp b24gYWxsIGRvbmUuCi0gKiAgICAgICAxOiBzdWNjZXNzZnVsLCBuZWdvdGlhdGlvbiBub3QgZG9u ZSB5ZXQuCi0gKi8KLWludAotZGVzM19jZmI2NF9yZXBseShkYXRhLCBjbnQpCi0gICAgdW5zaWdu ZWQgY2hhciAqZGF0YTsKLSAgICBpbnQgY250OwotewotICAgIHJldHVybihkZXMzX2ZiNjRfcmVw bHkoZGF0YSwgY250LCAmZGVzM19mYltDRkJdKSk7Ci19Ci1pbnQKLWRlczNfb2ZiNjRfcmVwbHko ZGF0YSwgY250KQotICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0gICAgaW50IGNudDsKLXsKLSAg ICByZXR1cm4oZGVzM19mYjY0X3JlcGx5KGRhdGEsIGNudCwgJmRlczNfZmJbT0ZCXSkpOwotfQot Ci0KLWludAotZGVzM19mYjY0X3JlcGx5KGRhdGEsIGNudCwgZmJwKQotICAgIHVuc2lnbmVkIGNo YXIgKmRhdGE7Ci0gICAgaW50IGNudDsKLSAgICBzdHJ1Y3QgZGVzM19mYiAqZmJwOwotewotICAg IHJlZ2lzdGVyIGludCBzdGF0ZSA9IGZicC0+c3RhdGVbRElSX0VOQ1JZUFQtMV07Ci0KLSAgICBp ZiAoY250LS0gPCAxKQotICAgICAgICBnb3RvIGZhaWx1cmU7Ci0KLSAgICBzd2l0Y2ggKCpkYXRh KyspIHsKLSAgICBjYXNlIEZCNjRfSVZfT0s6Ci0gICAgICAgIGRlczNfZmI2NF9zdHJlYW1faXYo ZmJwLT50ZW1wX2ZlZWQsICZmYnAtPnN0cmVhbXNbRElSX0VOQ1JZUFQtMV0pOwotICAgICAgICBp ZiAoc3RhdGUgPT0geEZBSUxFRCkKLSAgICAgICAgICAgIHN0YXRlID0gSU5fUFJPR1JFU1M7Ci0g ICAgICAgIHN0YXRlICY9IH5OT19SRUNWX0lWOwotICAgICAgICBlbmNyeXB0X3NlbmRfa2V5aWQo RElSX0VOQ1JZUFQsICh1bnNpZ25lZCBjaGFyICopIlwwIiwgMSwgMSk7Ci0gICAgICAgIGJyZWFr OwotCi0gICAgY2FzZSBGQjY0X0lWX0JBRDoKLSAgICAgICAgbWVtc2V0KGZicC0+dGVtcF9mZWVk LCAwLCBzaXplb2YoQmxvY2spKTsKLSAgICAgICAgZGVzM19mYjY0X3N0cmVhbV9pdihmYnAtPnRl bXBfZmVlZCwgJmZicC0+c3RyZWFtc1tESVJfRU5DUllQVC0xXSk7Ci0gICAgICAgIHN0YXRlID0g eEZBSUxFRDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotI2lmIDAKLSAgICAgICAg aWYgKGVuY3J5cHRfZGVidWdfbW9kZSkgewotICAgICAgICAgICAgcHJpbnRmKCJVbmtub3duIG9w dGlvbiB0eXBlOiAlZFxyXG4iLCBkYXRhWy0xXSk7Ci0gICAgICAgICAgICBwcmludGYoIlxyXG4i KTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIC8qIEZBTEwgVEhST1VHSCAqLwotICAgICAg ZmFpbHVyZToKLSAgICAgICAgc3RhdGUgPSB4RkFJTEVEOwotICAgICAgICBicmVhazsKLSAgICB9 Ci0gICAgcmV0dXJuKGZicC0+c3RhdGVbRElSX0VOQ1JZUFQtMV0gPSBzdGF0ZSk7Ci19Ci0KLWlu dAotZGVzM19jZmI2NF9zZXNzaW9uKGtleSwgc2VydmVyKQotICAgIFNlc3Npb25fS2V5ICprZXk7 Ci0gICAgaW50IHNlcnZlcjsKLXsKLSAgICByZXR1cm4oZGVzM19mYjY0X3Nlc3Npb24oa2V5LCBz ZXJ2ZXIsICZkZXMzX2ZiW0NGQl0pKTsKLX0KLQotaW50Ci1kZXMzX29mYjY0X3Nlc3Npb24oa2V5 LCBzZXJ2ZXIpCi0gICAgU2Vzc2lvbl9LZXkgKmtleTsKLSAgICBpbnQgc2VydmVyOwotewotICAg IHJldHVybihkZXMzX2ZiNjRfc2Vzc2lvbihrZXksIHNlcnZlciwgJmRlczNfZmJbT0ZCXSkpOwot fQotCi1zdGF0aWMgaW50Ci1kZXMzX2ZiNjRfc2Vzc2lvbihrZXksIHNlcnZlciwgZmJwKQotICAg IFNlc3Npb25fS2V5ICprZXk7Ci0gICAgaW50IHNlcnZlcjsKLSAgICBzdHJ1Y3QgZGVzM19mYiAq ZmJwOwotewotICAgIGludCByYz0wLGk9MDsKLSAgICBpbnQga2V5czJ1c2U9MDsKLSAgICBzdHJ1 Y3QgZGVzM19zdGluZm8gKiBzX3N0cmVhbTsKLSAgICBzdHJ1Y3QgZGVzM19zdGluZm8gKiBjX3N0 cmVhbTsKLQotICAgIGlmKHNlcnZlcikgewotICAgICAgICBzX3N0cmVhbSA9ICZmYnAtPnN0cmVh bXNbRElSX0VOQ1JZUFQtMV07Ci0gICAgICAgIGNfc3RyZWFtID0gJmZicC0+c3RyZWFtc1tESVJf REVDUllQVC0xXTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHNfc3RyZWFtID0gJmZicC0+ c3RyZWFtc1tESVJfREVDUllQVC0xXTsKLSAgICAgICAgY19zdHJlYW0gPSAmZmJwLT5zdHJlYW1z W0RJUl9FTkNSWVBULTFdOwotICAgIH0KLQotICAgIGtleXMydXNlID0ga2V5LT5sZW5ndGggLyBz aXplb2YoQmxvY2spOwotICAgIGlmICgha2V5IHx8IChrZXktPnR5cGUgPT0gU0tfREVTKSB8fCAo a2V5czJ1c2UgPCAyKSkgewotICAgICAgICBDSEFSIGJ1Zls4MF07Ci0gICAgICAgIHNwcmludGYo KGNoYXIgKilidWYsIkNhbid0IHNldCAzREVTIHNlc3Npb24ga2V5ICglZCA8ICVkKSIsCi0gICAg ICAgICAgICAgICAga2V5ID8ga2V5LT5sZW5ndGggOiAwLCAyICogKGludClzaXplb2YoQmxvY2sp KTsJLyogc2FmZSAqLwotI2lmZGVmIERFQlVHCi0gICAgICAgIGlmIChlbmNyeXB0X2RlYnVnX21v ZGUpCi0gICAgICAgICAgICBwcmludGYoIiVzXHJcbiIsYnVmKTsKLSNlbmRpZgotICAgICAgICBk ZWJ1ZyhGMTEwLCJkZXMzX2ZiNjRfc2Vzc2lvbiIsYnVmLDApOwotICAgICAgICByZXR1cm4oLTEp OwotICAgIH0KLQotICAgIGRlYnVnKEYxMTEsImRlczNfZmI2NF9zZXNzaW9uIiwia2V5czJ1c2Ui LGtleXMydXNlKTsKLSAgICAvKiBDb21wdXRlIHRoZSBmaXJzdCBzZXQgb2Yga2V5cyAvIGtleSBv cmRlciAqLwotICAgIHN3aXRjaCAoIGtleXMydXNlICkgewotICAgIGNhc2UgMjoKLSAgICAgICAg bWVtY3B5KCh2b2lkICopZmJwLT5rcmJkZXNfa2V5WzBdLCAodm9pZCAqKWtleS0+ZGF0YSwgc2l6 ZW9mKEJsb2NrKSk7Ci0gICAgICAgIG1lbWNweSgodm9pZCAqKSBmYnAtPmtyYmRlc19rZXlbMV0s KHZvaWQgKikoa2V5LT5kYXRhICsgc2l6ZW9mKEJsb2NrKSksCi0gICAgICAgICAgICAgICAgIHNp emVvZihCbG9jaykpOwotICAgICAgICBtZW1jcHkoKHZvaWQgKilmYnAtPmtyYmRlc19rZXlbMl0s ICh2b2lkICopa2V5LT5kYXRhLCBzaXplb2YoQmxvY2spKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg Y2FzZSAzOgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIG1lbWNweSgodm9pZCAqKWZicC0+a3JiZGVz X2tleVswXSwgKHZvaWQgKilrZXktPmRhdGEsIHNpemVvZihCbG9jaykpOwotICAgICAgICBtZW1j cHkoKHZvaWQgKikgZmJwLT5rcmJkZXNfa2V5WzFdLCh2b2lkICopKGtleS0+ZGF0YSArIHNpemVv ZihCbG9jaykpLAotICAgICAgICAgICAgICAgICBzaXplb2YoQmxvY2spKTsKLSAgICAgICAgbWVt Y3B5KCh2b2lkICopIGZicC0+a3JiZGVzX2tleVsyXSwKLSAgICAgICAgICAgICAgICAgKHZvaWQg KikgKGtleS0+ZGF0YSArIDIqc2l6ZW9mKEJsb2NrKSksIHNpemVvZihCbG9jaykpOwotICAgICAg ICBicmVhazsKLSAgICB9Ci0gICAgY2toZXhkdW1wKCJkZXMzX3Nlc3Npb25fa2V5IGtleS0+ZGF0 YSIsa2V5LT5kYXRhLHNpemVvZihCbG9jaykpOwotICAgIGNraGV4ZHVtcCgiZGVzM19zZXNzaW9u X2tleSBmYnAtPmtyYmRlc19rZXlbMF0iLAotICAgICAgICAgICAgZmJwLT5rcmJkZXNfa2V5WzBd LAotICAgICAgICAgICAgc2l6ZW9mKEJsb2NrKQotICAgICAgICAgICAgKTsKLSAgICBpZiAoZmJw LT5vbmNlID09IDApIHsKLSAgICAgICAgZGVzX3NldF9yYW5kb21fZ2VuZXJhdG9yX3NlZWQoZmJw LT5rcmJkZXNfa2V5WzBdKTsKLSAgICAgICAgZmJwLT5vbmNlID0gMTsKLSAgICB9Ci0KLSAgICBm b3IgKCBpPTA7aTwzO2krKyApCi0gICAgICAgIGRlc19maXh1cF9rZXlfcGFyaXR5KGZicC0+a3Ji ZGVzX2tleVtpXSk7Ci0gICAgZGVzM19mYjY0X3N0cmVhbV9rZXkoZmJwLT5rcmJkZXNfa2V5LCBz X3N0cmVhbSk7Ci0KLQotICAgIC8qIENvbXB1dGUgdGhlIHNlY29uZCBzZXQgb2Yga2V5cyAvIGtl eSBvcmRlciAqLwotICAgIHN3aXRjaCAoIGtleXMydXNlICkgewotICAgIGNhc2UgMjoKLSAgICAg ICAgbWVtY3B5KCh2b2lkICopIGZicC0+a3JiZGVzX2tleVswXSwodm9pZCAqKShrZXktPmRhdGEg KyBzaXplb2YoQmxvY2spKSwKLSAgICAgICAgICAgICAgICAgc2l6ZW9mKEJsb2NrKSk7Ci0gICAg ICAgIG1lbWNweSgodm9pZCAqKWZicC0+a3JiZGVzX2tleVsxXSwgKHZvaWQgKilrZXktPmRhdGEs IHNpemVvZihCbG9jaykpOwotICAgICAgICBtZW1jcHkoKHZvaWQgKikgZmJwLT5rcmJkZXNfa2V5 WzJdLCh2b2lkICopKGtleS0+ZGF0YSArIHNpemVvZihCbG9jaykpLAotICAgICAgICAgICAgICAg ICBzaXplb2YoQmxvY2spKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAzOgotICAgICAgICBt ZW1jcHkoKHZvaWQgKikgZmJwLT5rcmJkZXNfa2V5WzBdLCh2b2lkICopKGtleS0+ZGF0YSArIHNp emVvZihCbG9jaykpLAotICAgICAgICAgICAgICAgICBzaXplb2YoQmxvY2spKTsKLSAgICAgICAg bWVtY3B5KCh2b2lkICopIGZicC0+a3JiZGVzX2tleVsxXSwKLSAgICAgICAgICAgICAgICAgKHZv aWQgKikgKGtleS0+ZGF0YSArIDIqc2l6ZW9mKEJsb2NrKSksIHNpemVvZihCbG9jaykpOwotICAg ICAgICBtZW1jcHkoKHZvaWQgKilmYnAtPmtyYmRlc19rZXlbMl0sICh2b2lkICopa2V5LT5kYXRh LCBzaXplb2YoQmxvY2spKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA0OgotICAgICAgICBt ZW1jcHkoKHZvaWQgKikgZmJwLT5rcmJkZXNfa2V5WzBdLCh2b2lkICopKGtleS0+ZGF0YSArIHNp emVvZihCbG9jaykpLAotICAgICAgICAgICAgICAgICBzaXplb2YoQmxvY2spKTsKLSAgICAgICAg bWVtY3B5KCh2b2lkICopIGZicC0+a3JiZGVzX2tleVsxXSwKLSAgICAgICAgICAgICAgICAgKHZv aWQgKikgKGtleS0+ZGF0YSArIDMqc2l6ZW9mKEJsb2NrKSksIHNpemVvZihCbG9jaykpOwotICAg ICAgICBtZW1jcHkoKHZvaWQgKilmYnAtPmtyYmRlc19rZXlbMl0sICh2b2lkICopa2V5LT5kYXRh LCBzaXplb2YoQmxvY2spKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA1OgotICAgICAgICBt ZW1jcHkoKHZvaWQgKikgZmJwLT5rcmJkZXNfa2V5WzBdLCh2b2lkICopKGtleS0+ZGF0YSArIHNp emVvZihCbG9jaykpLAotICAgICAgICAgICAgICAgICBzaXplb2YoQmxvY2spKTsKLSAgICAgICAg bWVtY3B5KCh2b2lkICopIGZicC0+a3JiZGVzX2tleVsxXSwKLSAgICAgICAgICAgICAgICAgKHZv aWQgKikgKGtleS0+ZGF0YSArIDMqc2l6ZW9mKEJsb2NrKSksIHNpemVvZihCbG9jaykpOwotICAg ICAgICBtZW1jcHkoKHZvaWQgKilmYnAtPmtyYmRlc19rZXlbMl0sCi0gICAgICAgICAgICAgICAg ICh2b2lkICopKGtleS0+ZGF0YSArIDQqc2l6ZW9mKEJsb2NrKSksIHNpemVvZihCbG9jaykpOwot ICAgICAgICBicmVhazsKLSAgICBjYXNlIDY6Ci0gICAgICAgIG1lbWNweSgodm9pZCAqKSBmYnAt PmtyYmRlc19rZXlbMF0sCi0gICAgICAgICAgICAgICAgICh2b2lkICopIChrZXktPmRhdGEgKyAz KnNpemVvZihCbG9jaykpLCBzaXplb2YoQmxvY2spKTsKLSAgICAgICAgbWVtY3B5KCh2b2lkICop ZmJwLT5rcmJkZXNfa2V5WzFdLAotICAgICAgICAgICAgICAgICAodm9pZCAqKShrZXktPmRhdGEg KyA0KnNpemVvZihCbG9jaykpLCBzaXplb2YoQmxvY2spKTsKLSAgICAgICAgbWVtY3B5KCh2b2lk ICopIGZicC0+a3JiZGVzX2tleVsyXSwKLSAgICAgICAgICAgICAgICAgKHZvaWQgKikgKGtleS0+ ZGF0YSArIDUgKnNpemVvZihCbG9jaykpLCAgc2l6ZW9mKEJsb2NrKSk7Ci0gICAgICAgIGJyZWFr OwotICAgIH0KLQotICAgIGZvciAoIGk9MDtpPDM7aSsrICkKLSAgICAgICAgZGVzX2ZpeHVwX2tl eV9wYXJpdHkoZmJwLT5rcmJkZXNfa2V5W2ldKTsKLSAgICBkZXMzX2ZiNjRfc3RyZWFtX2tleShm YnAtPmtyYmRlc19rZXksIGNfc3RyZWFtKTsKLQotICAgIC8qIG5vdyB1c2UgdGhlIHNlY29uZCBz ZXQgb2Yga2V5cyB0byBidWlsZCB0aGUgZGVmYXVsdCBLZXkgU2NoZWR1bGUgKi8KLSAgICAvKiB3 aGljaCBpcyB1c2VkIGZvciBnZW5lcmF0aW5nIHRoZSBJVi4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICovCi0gICAgZm9yICggaT0wO2k8MztpKysgKSB7Ci0gICAgICAgIG1lbXNldChmYnAt PmtyYmRlc19zY2hlZFtpXSwwLHNpemVvZihTY2hlZHVsZSkpOwotCi0gICAgICAgIHJjID0gZGVz X2tleV9zY2hlZChmYnAtPmtyYmRlc19rZXlbaV0sIGZicC0+a3JiZGVzX3NjaGVkW2ldKTsKLSAg ICAgICAgaWYgKCByYyA9PSAtMSApIHsKLSAgICAgICAgICAgIHByaW50ZigiP0ludmFsaWQgREVT IGtleSBzcGVjaWZpZWQgZm9yIGVuY3J5cHRpb24gW0RFUzMsJXNdXHJcbiIsCi0gICAgICAgICAg ICAgICAgICAgIHNlcnZlcj8ic2VydmVyIjoiY2xpZW50Iik7Ci0gICAgICAgICAgICBkZWJ1ZyhG MTEwLCJkZXMzX2ZiNjRfc3RyZWFtX2l2IiwKLSAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBE RVMgS2V5IHNwZWNpZmllZCBmb3IgZW5jcnlwdGlvbiIsMCk7Ci0gICAgICAgIH0gZWxzZSBpZiAo IHJjID09IC0yICkgewotICAgICAgICAgICAgcHJpbnRmKCI/V2VhayBERVMga2V5IHNwZWNpZmll ZCBmb3IgZW5jcnlwdGlvblxyXG4iKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImRlczNfZmI2 NF9zdHJlYW1faXYiLAotICAgICAgICAgICAgICAgICAgICJ3ZWFrIERFUyBLZXkgc3BlY2lmaWVk IGZvciBlbmNyeXB0aW9uIiwwKTsKLSAgICAgICAgfSBlbHNlIGlmICggcmMgIT0gMCApIHsKLSAg ICAgICAgICAgIHByaW50ZigiP0tleSBTY2hlZHVsZSBub3QgY3JlYXRlZCBieSBlbmNyeXB0aW9u XHJcbiIpOwotICAgICAgICAgICAgZGVidWcoRjExMCwiZGVzM19mYjY0X3N0cmVhbV9pdiIsCi0g ICAgICAgICAgICAgICAgICAgIktleSBTY2hlZHVsZSBub3QgY3JlYXRlZCBieSBlbmNyeXB0aW9u IiwwKTsKLSAgICAgICAgfQotICAgICAgICBja2hleGR1bXAoImRlczNfZmI2NF9zZXNzaW9uX2tl eSBzY2hlZHVsZSIsZmJwLT5rcmJkZXNfc2NoZWRbaV0sOCoxNik7Ci0gICAgfQotICAgIC8qCi0g ICAgKiBOb3cgbG9vayB0byBzZWUgaWYga3JiZGVzX3N0YXJ0KCkgd2FzIHdhcyB3YWl0aW5nIGZv cgotICAgICogdGhlIGtleSB0byBzaG93IHVwLiAgSWYgc28sIGdvIGFoZWFkIGFuIGNhbGwgaXQg bm93Ci0gICAgKiB0aGF0IHdlIGhhdmUgdGhlIGtleS4KLSAgICAqLwotICAgIGlmIChmYnAtPm5l ZWRfc3RhcnQpIHsKLSAgICAgICAgZmJwLT5uZWVkX3N0YXJ0ID0gMDsKLSAgICAgICAgZGVzM19m YjY0X3N0YXJ0KGZicCwgRElSX0VOQ1JZUFQsIHNlcnZlcik7Ci0gICAgfQotICAgIHJldHVybigw KTsKLX0KLQotLyoKLSAqIFdlIG9ubHkgYWNjZXB0IGEga2V5aWQgb2YgMC4gIElmIHdlIGdldCBh IGtleWlkIG9mCi0gKiAwLCB0aGVuIG1hcmsgdGhlIHN0YXRlIGFzIFNVQ0NFU1MuCi0gKi8KLWlu dAotZGVzM19jZmI2NF9rZXlpZChkaXIsIGtwLCBsZW5wKQotICAgIGludCBkaXIsICpsZW5wOwot ICAgIHVuc2lnbmVkIGNoYXIgKmtwOwotewotICAgIHJldHVybihkZXMzX2ZiNjRfa2V5aWQoZGly LCBrcCwgbGVucCwgJmRlczNfZmJbQ0ZCXSkpOwotfQotCi1pbnQKLWRlczNfb2ZiNjRfa2V5aWQo ZGlyLCBrcCwgbGVucCkKLSAgICBpbnQgZGlyLCAqbGVucDsKLSAgICB1bnNpZ25lZCBjaGFyICpr cDsKLXsKLSAgICByZXR1cm4oZGVzM19mYjY0X2tleWlkKGRpciwga3AsIGxlbnAsICZkZXMzX2Zi W09GQl0pKTsKLX0KLQotaW50Ci1kZXMzX2ZiNjRfa2V5aWQoZGlyLCBrcCwgbGVucCwgZmJwKQot ICAgIGludCBkaXIsICpsZW5wOwotICAgIHVuc2lnbmVkIGNoYXIgKmtwOwotICAgIHN0cnVjdCBk ZXMzX2ZiICpmYnA7Ci17Ci0gICAgcmVnaXN0ZXIgaW50IHN0YXRlID0gZmJwLT5zdGF0ZVtkaXIt MV07Ci0KLSAgICBpZiAoKmxlbnAgIT0gMSB8fCAoKmtwICE9ICdcMCcpKSB7Ci0gICAgICAgICps ZW5wID0gMDsKLSAgICAgICAgcmV0dXJuKHN0YXRlKTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGUg PT0geEZBSUxFRCkKLSAgICAgICAgc3RhdGUgPSBJTl9QUk9HUkVTUzsKLQotICAgIHN0YXRlICY9 IH5OT19LRVlJRDsKLQotICAgIHJldHVybihmYnAtPnN0YXRlW2Rpci0xXSA9IHN0YXRlKTsKLX0K LQotI2lmIDAKLXZvaWQKLWRlczNfZmI2NF9wcmludHN1YihkYXRhLCBjbnQsIGJ1ZiwgYnVmbGVu LCB0eXBlKQotICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsICpidWYsICp0eXBlOwotICAgIGludCBj bnQsIGJ1ZmxlbjsKLXsKLSAgICBjaGFyIGxidWZbNjRdOwotICAgIHJlZ2lzdGVyIGludCBpOwot ICAgIGNoYXIgKmNwOwotCi0gICAgYnVmW2J1Zmxlbi0xXSA9ICdcMCc7ICAgICAgICAgICAgICAg LyogbWFrZSBzdXJlIGl0J3MgTlVMTCB0ZXJtaW5hdGVkICovCi0gICAgYnVmbGVuIC09IDE7Ci0K LSAgICBzd2l0Y2goZGF0YVsyXSkgewotICAgIGNhc2UgRkI2NF9JVjoKLSAgICAgICAgc3ByaW50 ZihsYnVmLCAiJXNfSVYiLCB0eXBlKTsKLSAgICAgICAgY3AgPSBsYnVmOwotICAgICAgICBnb3Rv IGNvbW1vbjsKLQotICAgIGNhc2UgRkI2NF9JVl9PSzoKLSAgICAgICAgc3ByaW50ZihsYnVmLCAi JXNfSVZfT0siLCB0eXBlKTsKLSAgICAgICAgY3AgPSBsYnVmOwotICAgICAgICBnb3RvIGNvbW1v bjsKLQotICAgIGNhc2UgRkI2NF9JVl9CQUQ6Ci0gICAgICAgIHNwcmludGYobGJ1ZiwgIiVzX0lW X0JBRCIsIHR5cGUpOwotICAgICAgICBjcCA9IGxidWY7Ci0gICAgICAgIGdvdG8gY29tbW9uOwot Ci0gICAgY2FzZSBGQjY0X0NIQUxMRU5HRToKLSAgICAgICAgc3ByaW50ZihsYnVmLCAiJXNfQ0hB TExFTkdFIiwgdHlwZSk7Ci0gICAgICAgIGNwID0gbGJ1ZjsKLSAgICAgICAgZ290byBjb21tb247 Ci0KLSAgICBjYXNlIEZCNjRfUkVTUE9OU0U6Ci0gICAgICAgIHNwcmludGYobGJ1ZiwgIiVzX1JF U1BPTlNFIiwgdHlwZSk7Ci0gICAgICAgIGNwID0gbGJ1ZjsKLSAgICAgICAgZ290byBjb21tb247 Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBzcHJpbnRmKGxidWYsICIgJWQgKHVua25vd24pIiwg ZGF0YVsyXSk7Ci0gICAgICAgIGNwID0gbGJ1ZjsKLSAgICAgIGNvbW1vbjoKLSAgICAgICAgZm9y ICg7IChidWZsZW4gPiAwKSAmJiAoKmJ1ZiA9ICpjcCsrKTsgYnVmKyspCi0gICAgICAgICAgICBi dWZsZW4tLTsKLSAgICAgICAgZm9yIChpID0gMzsgaSA8IGNudDsgaSsrKSB7Ci0gICAgICAgICAg ICBzcHJpbnRmKGxidWYsICIgJWQiLCBkYXRhW2ldKTsKLSAgICAgICAgICAgIGZvciAoY3AgPSBs YnVmOyAoYnVmbGVuID4gMCkgJiYgKCpidWYgPSAqY3ArKyk7IGJ1ZisrKQotICAgICAgICAgICAg ICAgIGJ1Zmxlbi0tOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9p ZAotZGVzM19jZmI2NF9wcmludHN1YihkYXRhLCBjbnQsIGJ1ZiwgYnVmbGVuKQotICAgIHVuc2ln bmVkIGNoYXIgKmRhdGEsICpidWY7Ci0gICAgaW50IGNudCwgYnVmbGVuOwotewotICAgIGRlczNf ZmI2NF9wcmludHN1YihkYXRhLCBjbnQsIGJ1ZiwgYnVmbGVuLCAiQ0ZCNjQiKTsKLX0KLQotdm9p ZAotZGVzM19vZmI2NF9wcmludHN1YihkYXRhLCBjbnQsIGJ1ZiwgYnVmbGVuKQotICAgIHVuc2ln bmVkIGNoYXIgKmRhdGEsICpidWY7Ci0gICAgaW50IGNudCwgYnVmbGVuOwotewotICAgIGRlczNf ZmI2NF9wcmludHN1YihkYXRhLCBjbnQsIGJ1ZiwgYnVmbGVuLCAiT0ZCNjQiKTsKLX0KLSNlbmRp ZgotCi12b2lkCi1kZXMzX2ZiNjRfc3RyZWFtX2l2KHNlZWQsIHN0cCkKLSAgICBCbG9jayBzZWVk OwotICAgIHJlZ2lzdGVyIHN0cnVjdCBkZXMzX3N0aW5mbyAqc3RwOwotewotICAgIGludCByYz0w LCBpID0gMDs7Ci0KLSAgICBtZW1jcHkoc3RwLT5zdHJfaXYsICAgICBzZWVkLCBzaXplb2YoQmxv Y2spKTsKLSAgICBtZW1jcHkoc3RwLT5zdHJfb3V0cHV0LCBzZWVkLCBzaXplb2YoQmxvY2spKTsK LSAgICBmb3IgKCBpPTA7aTwzO2krKyApIHsKLSAgICAgICAgbWVtc2V0KHN0cC0+c3RyX3NjaGVk W2ldLDAsc2l6ZW9mKFNjaGVkdWxlKSk7Ci0KLSAgICAgICAgY2toZXhkdW1wKCJkZXMzX2ZiNjRf c3RyZWFtX2l2IixzdHAtPnN0cl9pa2V5W2ldLDgpOwotCi0gICAgICAgIHJjID0gZGVzX2tleV9z Y2hlZChzdHAtPnN0cl9pa2V5W2ldLCBzdHAtPnN0cl9zY2hlZFtpXSk7Ci0gICAgICAgIGlmICgg cmMgPT0gLTEgKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9JbnZhbGlkIERFUyBrZXkgc3BlY2lm aWVkIGZvciBlbmNyeXB0aW9uIFtERVMzIGl2XVxyXG4iKTsKLSAgICAgICAgICAgIGRlYnVnKEYx MTAsImRlczNfZmI2NF9zdHJlYW1faXYiLAotICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIERF UyBLZXkgc3BlY2lmaWVkIGZvciBlbmNyeXB0aW9uIiwwKTsKLSAgICAgICAgfSBlbHNlIGlmICgg cmMgPT0gLTIgKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9XZWFrIERFUyBrZXkgc3BlY2lmaWVk IGZvciBlbmNyeXB0aW9uXHJcbiIpOwotICAgICAgICAgICAgZGVidWcoRjExMCwiZGVzM19mYjY0 X3N0cmVhbV9pdiIsCi0gICAgICAgICAgICAgICAgICAgIndlYWsgREVTIEtleSBzcGVjaWZpZWQg Zm9yIGVuY3J5cHRpb24iLDApOwotICAgICAgICB9IGVsc2UgaWYgKCByYyAhPSAwICkgewotICAg ICAgICAgICAgcHJpbnRmKCI/S2V5IFNjaGVkdWxlIG5vdCBjcmVhdGVkIGJ5IGVuY3J5cHRpb25c clxuIik7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJkZXMzX2ZiNjRfc3RyZWFtX2l2IiwKLSAg ICAgICAgICAgICAgICAgICAiS2V5IFNjaGVkdWxlIG5vdCBjcmVhdGVkIGJ5IGVuY3J5cHRpb24i LDApOwotICAgICAgICB9Ci0gICAgICAgIGNraGV4ZHVtcCgiZGVzM19mYjY0X3N0cmVhbV9pdiBz Y2hlZHVsZSIsc3RwLT5zdHJfc2NoZWRbaV0sOCoxNik7Ci0gICAgfQotICAgIHN0cC0+c3RyX2lu ZGV4ID0gc2l6ZW9mKEJsb2NrKTsKLX0KLQotdm9pZAotZGVzM19mYjY0X3N0cmVhbV9rZXkoa2V5 LCBzdHApCi0gICAgQmxvY2sgKiBrZXk7Ci0gICAgcmVnaXN0ZXIgc3RydWN0IGRlczNfc3RpbmZv ICpzdHA7Ci17Ci0gICAgaW50IHJjID0gMCwgaSA9IDA7Ci0KLSAgICBmb3IgKCBpPTA7aTwzO2kr KyApIHsKLSAgICAgICAgbWVtY3B5KHN0cC0+c3RyX2lrZXlbaV0sIGtleVtpXSwgc2l6ZW9mKEJs b2NrKSk7Ci0KLSAgICAgICAgbWVtc2V0KHN0cC0+c3RyX3NjaGVkW2ldLDAsc2l6ZW9mKFNjaGVk dWxlKSk7Ci0KLSAgICAgICAgY2toZXhkdW1wKCJkZXMzX2ZiNjRfc3RyZWFtX2tleSIsa2V5W2ld LDgpOwotCi0gICAgICAgIHJjID0gZGVzX2tleV9zY2hlZChrZXlbaV0sIHN0cC0+c3RyX3NjaGVk W2ldKTsKLSAgICAgICAgaWYgKCByYyA9PSAtMSApIHsKLSAgICAgICAgICAgIHByaW50ZigiP0lu dmFsaWQgREVTIGtleSBzcGVjaWZpZWQgZm9yIGVuY3J5cHRpb24gW0RFUzMga2V5XVxyXG4iKTsK LSAgICAgICAgICAgIGRlYnVnKEYxMTAsImRlczNfZmI2NF9zdHJlYW1fa2V5IiwKLSAgICAgICAg ICAgICAgICAgICAiaW52YWxpZCBERVMgS2V5IHNwZWNpZmllZCBmb3IgZW5jcnlwdGlvbiIsMCk7 Ci0gICAgICAgIH0gZWxzZSBpZiAoIHJjID09IC0yICkgewotICAgICAgICAgICAgcHJpbnRmKCI/ V2VhayBERVMga2V5IHNwZWNpZmllZCBmb3IgZW5jcnlwdGlvblxyXG4iKTsKLSAgICAgICAgICAg IGRlYnVnKEYxMTAsImRlczNfZmI2NF9zdHJlYW1fa2V5IiwKLSAgICAgICAgICAgICAgICAgICAi d2VhayBERVMgS2V5IHNwZWNpZmllZCBmb3IgZW5jcnlwdGlvbiIsMCk7Ci0gICAgICAgIH0gZWxz ZSBpZiAoIHJjICE9IDAgKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9LZXkgU2NoZWR1bGUgbm90 IGNyZWF0ZWQgYnkgZW5jcnlwdGlvblxyXG4iKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImRl czNfZmI2NF9zdHJlYW1fa2V5IiwKLSAgICAgICAgICAgICAgICAgICAiS2V5IFNjaGVkdWxlIG5v dCBjcmVhdGVkIGJ5IGVuY3J5cHRpb24iLDApOwotICAgICAgICB9Ci0gICAgICAgIGNraGV4ZHVt cCgiZGVzM19mYjY0X3N0cmVhbV9rZXkgc2NoZWR1bGUiLHN0cC0+c3RyX3NjaGVkW2ldLDgqMTYp OwotICAgIH0KLQotICAgIG1lbWNweShzdHAtPnN0cl9vdXRwdXQsIHN0cC0+c3RyX2l2LCBzaXpl b2YoQmxvY2spKTsKLSAgICBzdHAtPnN0cl9pbmRleCA9IHNpemVvZihCbG9jayk7Ci19Ci0KLS8q Ci0gKiBERVMzIDY0IGJpdCBDaXBoZXIgRmVlZGJhY2sKLSAqCi0gKiAgICAgICAgICAgICAgICBr ZXkxICAgICAgIGtleTIgICAgICAga2V5MwotICogICAgICAgICAgICAgICAgIHwgICAgICAgICAg fCAgICAgICAgICB8Ci0gKiAgICAgICAgICAgICAgICAgdiAgICAgICAgICB2ICAgICAgICAgIHYK LSAqICAgICAgICAgICAgICstLS0tLS0tKyAgKy0tLS0tLS0rICArLS0tLS0tLSsKLSAqICAgICAg ICAgICstPnwgREVTLWUgfC0+fCBERVMtZCB8LT58IERFUy1lIHwtLSArCi0gKiAgICAgICAgICB8 ICArLS0tLS0tLSsgICstLS0tLS0tKyAgKy0tLS0tLS0rICAgfAotICogICAgICAgICAgfCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYKLSAqICBJTlBVVCAtLSgtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4oKykrLS0tPiBEQVRBCi0gKiAgICAgICAgICB8ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICogICAgICAgICAgKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAqCi0gKgotICogR2l2ZW46Ci0gKiAgICAgIGlW OiBJbml0aWFsIHZlY3RvciwgNjQgYml0cyAoOCBieXRlcykgbG9uZy4KLSAqICAgICAgRG46IHRo ZSBudGggY2h1bmsgb2YgNjQgYml0cyAoOCBieXRlcykgb2YgZGF0YSB0byBlbmNyeXB0IChkZWNy eXB0KS4KLSAqICAgICAgT246IHRoZSBudGggY2h1bmsgb2YgNjQgYml0cyAoOCBieXRlcykgb2Yg ZW5jcnlwdGVkIChkZWNyeXB0ZWQpIG91dHB1dC4KLSAqCi0gKiAgICAgIFYwID0gREVTLWUoREVT LWQoREVTLWUoaVYsIGtleTEpLGtleTIpLGtleTMpCi0gKiAgICAgIE9uID0gRG4gXiBWbgotICog ICAgICBWKG4rMSkgPSBERVMtZShERVMtZChERVMtZShPbiwga2V5MSksa2V5Miksa2V5MykKLSAq LwotCi12b2lkCi1kZXMzX2NmYjY0X2VuY3J5cHQocywgYykKLSAgICByZWdpc3RlciB1bnNpZ25l ZCBjaGFyICpzOwotICAgIGludCBjOwotewotICAgIHJlZ2lzdGVyIHN0cnVjdCBkZXMzX3N0aW5m byAqc3RwID0gJmRlczNfZmJbQ0ZCXS5zdHJlYW1zW0RJUl9FTkNSWVBULTFdOwotICAgIHJlZ2lz dGVyIGludCBpbmRleDsKLQotICAgIGluZGV4ID0gc3RwLT5zdHJfaW5kZXg7Ci0gICAgd2hpbGUg KGMtLSA+IDApIHsKLSAgICAgICAgaWYgKGluZGV4ID09IHNpemVvZihCbG9jaykpIHsKLSAgICAg ICAgICAgIEJsb2NrIGI7Ci0jaWZkZWYgTElCREVTCi0gICAgICAgICAgICBkZXNfZWNiM19lbmNy eXB0KHN0cC0+c3RyX291dHB1dCwgYiwgc3RwLT5zdHJfc2NoZWRbMF0sCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHAtPnN0cl9zY2hlZFsxXSwgc3RwLT5zdHJfc2NoZWRbMl0sIDEp OwotI2Vsc2UgLyogTElCREVTICovCi0gICAgICAgICAgICBkZXNfZWNiX2VuY3J5cHQoc3RwLT5z dHJfb3V0cHV0LCBiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHAtPnN0cl9zY2hl ZFswXSwgMSk7Ci0gICAgICAgICAgICBkZXNfZWNiX2VuY3J5cHQoc3RwLT5zdHJfb3V0cHV0LCBi LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHAtPnN0cl9zY2hlZFsxXSwgMCk7Ci0g ICAgICAgICAgICBkZXNfZWNiX2VuY3J5cHQoc3RwLT5zdHJfb3V0cHV0LCBiLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHAtPnN0cl9zY2hlZFsyXSwgMSk7Ci0jZW5kaWYgLyogTElC REVTICovCi0gICAgICAgICAgICBtZW1jcHkoc3RwLT5zdHJfZmVlZCxiLHNpemVvZihCbG9jaykp OwotICAgICAgICAgICAgaW5kZXggPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogT24gZW5j cnlwdGlvbiwgd2Ugc3RvcmUgKGZlZWQgXiBkYXRhKSB3aGljaCBpcyBjeXBoZXIgKi8KLSAgICAg ICAgKnMgPSBzdHAtPnN0cl9vdXRwdXRbaW5kZXhdID0gKHN0cC0+c3RyX2ZlZWRbaW5kZXhdIF4g KnMpOwotICAgICAgICBzKys7Ci0gICAgICAgIGluZGV4Kys7Ci0gICAgfQotICAgIHN0cC0+c3Ry X2luZGV4ID0gaW5kZXg7Ci19Ci0KLWludAotZGVzM19jZmI2NF9kZWNyeXB0KGRhdGEpCi0gICAg aW50IGRhdGE7Ci17Ci0gICAgcmVnaXN0ZXIgc3RydWN0IGRlczNfc3RpbmZvICpzdHAgPSAmZGVz M19mYltDRkJdLnN0cmVhbXNbRElSX0RFQ1JZUFQtMV07Ci0gICAgaW50IGluZGV4OwotCi0gICAg aWYgKGRhdGEgPT0gLTEpIHsKLSAgICAgICAgLyoKLSAgICAgICAgKiBCYWNrIHVwIG9uZSBieXRl LiAgSXQgaXMgYXNzdW1lZCB0aGF0IHdlIHdpbGwKLSAgICAgICAgKiBuZXZlciBiYWNrIHVwIG1v cmUgdGhhbiBvbmUgYnl0ZS4gIElmIHdlIGRvLCB0aGlzCi0gICAgICAgICogbWF5IG9yIG1heSBu b3Qgd29yay4KLSAgICAgICAgKi8KLSAgICAgICAgaWYgKHN0cC0+c3RyX2luZGV4KQotICAgICAg ICAgICAgLS1zdHAtPnN0cl9pbmRleDsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLQotICAg IGluZGV4ID0gc3RwLT5zdHJfaW5kZXgrKzsKLSAgICBpZiAoaW5kZXggPT0gc2l6ZW9mKEJsb2Nr KSkgewotICAgICAgICBCbG9jayBiOwotI2lmZGVmIExJQkRFUwotICAgICAgICBkZXNfZWNiM19l bmNyeXB0KHN0cC0+c3RyX291dHB1dCwgYiwgc3RwLT5zdHJfc2NoZWRbMF0sCi0gICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cC0+c3RyX3NjaGVkWzFdLCBzdHAtPnN0cl9zY2hlZFsyXSwgMSk7 Ci0jZWxzZSAvKiBMSUJERVMgKi8KLSAgICAgICAgICAgIGRlc19lY2JfZW5jcnlwdChzdHAtPnN0 cl9vdXRwdXQsIGIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cC0+c3RyX3NjaGVk WzBdLCAxKTsKLSAgICAgICAgICAgIGRlc19lY2JfZW5jcnlwdChzdHAtPnN0cl9vdXRwdXQsIGIs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cC0+c3RyX3NjaGVkWzFdLCAwKTsKLSAg ICAgICAgICAgIGRlc19lY2JfZW5jcnlwdChzdHAtPnN0cl9vdXRwdXQsIGIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cC0+c3RyX3NjaGVkWzJdLCAxKTsKLSNlbmRpZiAvKiBMSUJE RVMgKi8KLSAgICAgICAgbWVtY3B5KHN0cC0+c3RyX2ZlZWQsIGIsIHNpemVvZihCbG9jaykpOwot ICAgICAgICBzdHAtPnN0cl9pbmRleCA9IDE7ICAgICAvKiBOZXh0IHRpbWUgd2lsbCBiZSAxICov Ci0gICAgICAgIGluZGV4ID0gMDsgICAgICAgICAgICAgIC8qIEJ1dCBub3cgdXNlIDAgKi8KLSAg ICB9Ci0KLSAgICAvKiBPbiBkZWNyeXB0aW9uIHdlIHN0b3JlIChkYXRhKSB3aGljaCBpcyBjeXBo ZXIuICovCi0gICAgc3RwLT5zdHJfb3V0cHV0W2luZGV4XSA9IGRhdGE7Ci0gICAgcmV0dXJuKGRh dGEgXiBzdHAtPnN0cl9mZWVkW2luZGV4XSk7Ci19Ci0KLS8qCi0gKiBERVMzIDY0IGJpdCBPdXRw dXQgRmVlZGJhY2sKLSAqCi0gKgotICogICAgICAgICAgICAgICAga2V5MSAgICAgICBrZXkyICAg ICAgIGtleTMKLSAqICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICAgfAotICog ICAgICAgICAgICAgICAgIHYgICAgICAgICAgdiAgICAgICAgICB2Ci0gKiAgICAgICAgICAgICAr LS0tLS0tLSsgICstLS0tLS0tKyAgKy0tLS0tLS0rCi0gKiAgICAgICAgICArLT58IERFUy1lIHwt PnwgREVTLWQgfC0+fCBERVMtZSB8LS0gKwotICogICAgICAgICAgfCAgKy0tLS0tLS0rICArLS0t LS0tLSsgICstLS0tLS0tKyAgIHwKLSAqICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdgotICogIElOUFVUIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0+KCspIC0tLS0+IERBVEEKLSAqCi0gKiBHaXZlbjoKLSAqICAgICAgaVY6IEluaXRpYWwgdmVj dG9yLCA2NCBiaXRzICg4IGJ5dGVzKSBsb25nLgotICogICAgICBEbjogdGhlIG50aCBjaHVuayBv ZiA2NCBiaXRzICg4IGJ5dGVzKSBvZiBkYXRhIHRvIGVuY3J5cHQgKGRlY3J5cHQpLgotICogICAg ICBPbjogdGhlIG50aCBjaHVuayBvZiA2NCBiaXRzICg4IGJ5dGVzKSBvZiBlbmNyeXB0ZWQgKGRl Y3J5cHRlZCkgb3V0cHV0LgotICoKLSAqICAgICAgVjAgPSBERVMtZShERVMtZChERVMtZShpViwg a2V5MSksa2V5Miksa2V5MykKLSAqICAgICAgVihuKzEpID0gREVTLWUoREVTLWQoREVTLWUoVm4s IGtleTEpLGtleTIpLGtleTMpCi0gKiAgICAgIE9uID0gRG4gXiBWbgotICovCi12b2lkCi1kZXMz X29mYjY0X2VuY3J5cHQocywgYykKLSAgICByZWdpc3RlciB1bnNpZ25lZCBjaGFyICpzOwotICAg IGludCBjOwotewotICAgIHJlZ2lzdGVyIHN0cnVjdCBkZXMzX3N0aW5mbyAqc3RwID0gJmRlczNf ZmJbT0ZCXS5zdHJlYW1zW0RJUl9FTkNSWVBULTFdOwotICAgIHJlZ2lzdGVyIGludCBpbmRleDsK LQotICAgIGluZGV4ID0gc3RwLT5zdHJfaW5kZXg7Ci0gICAgd2hpbGUgKGMtLSA+IDApIHsKLSAg ICAgICAgaWYgKGluZGV4ID09IHNpemVvZihCbG9jaykpIHsKLSAgICAgICAgICAgIEJsb2NrIGI7 Ci0jaWZkZWYgTElCREVTCi0gICAgICAgICAgICBkZXNfZWNiM19lbmNyeXB0KHN0cC0+c3RyX2Zl ZWQsIGIsIHN0cC0+c3RyX3NjaGVkWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHAtPnN0cl9zY2hlZFsxXSwgc3RwLT5zdHJfc2NoZWRbMl0sIDEpOwotI2Vsc2UgLyogTElCREVT ICovCi0gICAgICAgICAgICBkZXNfZWNiX2VuY3J5cHQoc3RwLT5zdHJfb3V0cHV0LCBiLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHAtPnN0cl9zY2hlZFswXSwgMSk7Ci0gICAgICAg ICAgICBkZXNfZWNiX2VuY3J5cHQoc3RwLT5zdHJfb3V0cHV0LCBiLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHAtPnN0cl9zY2hlZFsxXSwgMCk7Ci0gICAgICAgICAgICBkZXNfZWNi X2VuY3J5cHQoc3RwLT5zdHJfb3V0cHV0LCBiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHAtPnN0cl9zY2hlZFsyXSwgMSk7Ci0jZW5kaWYgLyogTElCREVTICovCi0gICAgICAgICAg ICBtZW1jcHkoc3RwLT5zdHJfZmVlZCxiLHNpemVvZihCbG9jaykpOwotICAgICAgICAgICAgaW5k ZXggPSAwOwotICAgICAgICB9Ci0gICAgICAgICpzKysgXj0gc3RwLT5zdHJfZmVlZFtpbmRleF07 Ci0gICAgICAgIGluZGV4Kys7Ci0gICAgfQotICAgIHN0cC0+c3RyX2luZGV4ID0gaW5kZXg7Ci19 Ci0KLWludAotZGVzM19vZmI2NF9kZWNyeXB0KGRhdGEpCi0gICAgaW50IGRhdGE7Ci17Ci0gICAg cmVnaXN0ZXIgc3RydWN0IGRlczNfc3RpbmZvICpzdHAgPSAmZGVzM19mYltPRkJdLnN0cmVhbXNb RElSX0RFQ1JZUFQtMV07Ci0gICAgaW50IGluZGV4OwotCi0gICAgaWYgKGRhdGEgPT0gLTEpIHsK LSAgICAgICAgLyoKLSAgICAgICAgKiBCYWNrIHVwIG9uZSBieXRlLiAgSXQgaXMgYXNzdW1lZCB0 aGF0IHdlIHdpbGwKLSAgICAgICAgKiBuZXZlciBiYWNrIHVwIG1vcmUgdGhhbiBvbmUgYnl0ZS4g IElmIHdlIGRvLCB0aGlzCi0gICAgICAgICogbWF5IG9yIG1heSBub3Qgd29yay4KLSAgICAgICAg Ki8KLSAgICAgICAgaWYgKHN0cC0+c3RyX2luZGV4KQotICAgICAgICAgICAgLS1zdHAtPnN0cl9p bmRleDsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLQotICAgIGluZGV4ID0gc3RwLT5zdHJf aW5kZXgrKzsKLSAgICBpZiAoaW5kZXggPT0gc2l6ZW9mKEJsb2NrKSkgewotICAgICAgICBCbG9j ayBiOwotI2lmZGVmIExJQkRFUwotICAgICAgICBkZXNfZWNiM19lbmNyeXB0KHN0cC0+c3RyX2Zl ZWQsIGIsIHN0cC0+c3RyX3NjaGVkWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdHAt PnN0cl9zY2hlZFsxXSwgc3RwLT5zdHJfc2NoZWRbMl0sIDEpOwotI2Vsc2UgLyogTElCREVTICov Ci0gICAgICAgICAgICBkZXNfZWNiX2VuY3J5cHQoc3RwLT5zdHJfb3V0cHV0LCBiLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHAtPnN0cl9zY2hlZFswXSwgMSk7Ci0gICAgICAgICAg ICBkZXNfZWNiX2VuY3J5cHQoc3RwLT5zdHJfb3V0cHV0LCBiLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHAtPnN0cl9zY2hlZFsxXSwgMCk7Ci0gICAgICAgICAgICBkZXNfZWNiX2Vu Y3J5cHQoc3RwLT5zdHJfb3V0cHV0LCBiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHAtPnN0cl9zY2hlZFsyXSwgMSk7Ci0jZW5kaWYgLyogTElCREVTICovCi0gICAgICAgIG1lbWNw eShzdHAtPnN0cl9mZWVkLCBiLCBzaXplb2YoQmxvY2spKTsKLSAgICAgICAgc3RwLT5zdHJfaW5k ZXggPSAxOyAgICAgLyogTmV4dCB0aW1lIHdpbGwgYmUgMSAqLwotICAgICAgICBpbmRleCA9IDA7 ICAgICAgICAgICAgICAvKiBCdXQgbm93IHVzZSAwICovCi0gICAgfQotCi0gICAgcmV0dXJuKGRh dGEgXiBzdHAtPnN0cl9mZWVkW2luZGV4XSk7Ci19Ci0jZW5kaWYgLyogQ0tfREVTICovCi0KLSNp ZmRlZiBDS19DQVNUCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MSwgMTk5MwotICogICAgICBU aGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5 IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICogICAgICBUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCi0gKiAgICAgIENh bGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgotICogNC4gTmVpdGhlciB0 aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRv cnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0 dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg UkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB TEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF TlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg U1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERB TUFHRS4KLSAqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTk3IFN0YW5mb3JkIFVuaXZlcnNp dHkKLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBh bmQgc2VsbCB0aGlzIHNvZnR3YXJlIGFuZAotICogaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBw dXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZAotICogdGhhdCB0 aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZXMgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBw ZWFyIGluCi0gKiBhbGwgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSBhbmQgcmVsYXRlZCBkb2N1bWVu dGF0aW9uLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMtSVMiIEFORCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAotICogRVhQUkVTUywgSU1QTElFRCBPUiBPVEhFUldJ U0UsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIEFOWQotICogV0FSUkFOVFkgT0YgTUVS Q0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotICoKLSAq IElOIE5PIEVWRU5UIFNIQUxMIFNUQU5GT1JEIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElO Q0lERU5UQUwsCi0gKiBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIEtJ TkQsIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIKLSAqIFJFU1VMVElORyBGUk9NIExPU1MgT0Yg VVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgT1IgTk9UIEFEVklTRUQgT0YKLSAqIFRIRSBQ T1NTSUJJTElUWSBPRiBEQU1BR0UsIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgQVJJ U0lORyBPVVQKLSAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1B TkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaWZkZWYg IF9fU1REQ19fCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jZW5kaWYKLQotLyoKLSAqIGNhc3QuaAot ICogQXV0aG9yOiBUb20gV3UKLSAqCi0gKiBUeXBlIGFuZCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMg Zm9yIENBU1QuCi0gKi8KLQotI2lmbmRlZiBfQ0FTVF9IXwotI2RlZmluZSBfQ0FTVF9IXwotCi0j aWZuZGVmIFAKLSNpZmRlZiBfX1NURENfXwotI2RlZmluZSBQKHgpIHgKLSNlbHNlCi0jZGVmaW5l IFAoeCkgKCkKLSNlbmRpZiAvKiBfX1NURENfXyAqLwotI2VuZGlmIC8qIFAgKi8KLQotI2lmbmRl ZiBMSVRUTEVfRU5ESUFOCi0jaWZuZGVmIEJJR19FTkRJQU4KLSNpZm5kZWYgV09SRFNfQklHRU5E SUFOCi0jZGVmaW5lIExJVFRMRV9FTkRJQU4gMQotI2VuZGlmIC8qIFdPUkRTX0JJR0VORElBTiAq LwotI2VuZGlmIC8qIEJJR19FTkRJQU4gKi8KLSNlbmRpZiAvKiBMSVRUTEVfRU5ESUFOICovCi0K LXR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQzMjsgICAgLyogTXVzdCBiZSAzMiBiaXRzICovCi10 eXBlZGVmIHVpbnQzMiAqIHVpbnQzMnA7Ci10eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDg7Ci10 eXBlZGVmIHVpbnQ4ICogdWludDhwOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gIHN0cnVjdCBDYXN0 U3Via2V5UGFpciB7Ci0gICAgdWludDMyIEttOwotICAgIHVpbnQzMiBLcjsKLSAgfSBLWzE2XTsK LSAgaW50IGtzaXplOwotfSBDYXN0S2V5U2NoZWQ7Ci0KLS8qCi0gKiBjYXN0Kl9rZXlfc2NoZWQo c2NoZWR1bGUsIGtleSkKLSAqCi0gKiBJbml0aWFsaXplcyB0aGUgQ0FTVCBrZXkgc2NoZWR1bGUg InNjaGVkdWxlIiBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGtleS4KLSAqIFRoZSBkaWZmZXJlbnQg c2V0dXAgcm91dGluZXMgYWNjZXB0IGRpZmZlcmVudCBsZW5ndGgga2V5czoKLSAqCi0gKiAgIGNr X2Nhc3Q1XzQwX2tleV9zY2hlZDogNDAtYml0LzUtYnl0ZSAoMTIgcm91bmQpIGtleXMKLSAqICAg Y2tfY2FzdDVfNjRfa2V5X3NjaGVkOiA2NC1iaXQvOC1ieXRlICgxMiByb3VuZCkga2V5cwotICog ICBja19jYXN0NV84MF9rZXlfc2NoZWQ6IDgwLWJpdC8xMC1ieXRlICgxMiByb3VuZCkga2V5cwot ICogICBja19jYXN0MTI4X2tleV9zY2hlZDogMTI4LWJpdC8xNi1ieXRlICgxNiByb3VuZCkga2V5 cwotICovCi0KLWV4dGVybiB2b2lkIGNrX2Nhc3Q1XzQwX2tleV9zY2hlZCBQKChDYXN0S2V5U2No ZWQgKiwgdWludDggKikpOwotZXh0ZXJuIHZvaWQgY2tfY2FzdDVfNjRfa2V5X3NjaGVkIFAoKENh c3RLZXlTY2hlZCAqLCB1aW50OCAqKSk7Ci1leHRlcm4gdm9pZCBja19jYXN0NV84MF9rZXlfc2No ZWQgUCgoQ2FzdEtleVNjaGVkICosIHVpbnQ4ICopKTsKLWV4dGVybiB2b2lkICBja19jYXN0MTI4 X2tleV9zY2hlZCBQKChDYXN0S2V5U2NoZWQgKiwgdWludDggKikpOwotCi0vKgotICogY2tfY2Fz dF9lY2JfZW5jcnlwdChvdXRwdXQsIGlucHV0LCBzY2hlZHVsZSwgbW9kZSkKLSAqIGNrX2Nhc3Rf ZWNiX2NyeXB0KGRhdGEsIHNjaGVkdWxlLCBtb2RlKQotICoKLSAqIEVuY3J5cHRzIHRoZSA2NC1i aXQgImlucHV0IiBhY2NvcmRpbmcgdG8gdGhlIENBU1Qga2V5IHNjaGVkdWxlCi0gKiAic2NoZWR1 bGUiIGFuZCBwbGFjZXMgdGhlIHJlc3VsdCBpbiAib3V0cHV0Ii4gIElmICJtb2RlIiBpcyAwLAot ICogY2tfY2FzdF9lY2JfZW5jcnlwdCB3aWxsIGVuY3J5cHQsIG90aGVyd2lzZSBpdCB3aWxsIGRl Y3J5cHQuCi0gKiAiT3V0cHV0IiBhbmQgImlucHV0IiBjYW4gcG9pbnQgdG8gdGhlIHNhbWUgbWVt b3J5LCBpbiB3aGljaCBjYXNlCi0gKiBlbi9kZWNyeXB0aW9uIHdpbGwgYmUgcGVyZm9ybWVkIGlu IHBsYWNlLgotICoKLSAqIGNrX2Nhc3RfZWNiX2NyeXB0IGFjY2VwdHMgaW5wdXQgaW4gdGhlIGZv cm0gb2YgYW4gYXJyYXkgb2YgdHdvCi0gKiAzMi1iaXQgd29yZHMgYW5kIHBlcmZvcm1zIGVuY3J5 cHRpb24vZGVjcnlwdGlvbiBpbiBwbGFjZS4KLSAqLwotCi1leHRlcm4gdm9pZCBja19jYXN0X2Vj Yl9lbmNyeXB0IFAoKHVpbnQ4ICosIHVpbnQ4ICosIENhc3RLZXlTY2hlZCAqLCBpbnQpKTsKLWV4 dGVybiB2b2lkIGNrX2Nhc3RfZWNiX2NyeXB0IFAoKHVpbnQzMiAqLCBDYXN0S2V5U2NoZWQgKiwg aW50KSk7Ci0KLSNlbmRpZiAvKiBDQVNUX0ggKi8KLQotZXh0ZXJuIGVuY3J5cHRfZGVidWdfbW9k ZTsKLQotI2RlZmluZSBDRkJfNDAgIDAKLSNkZWZpbmUgT0ZCXzQwICAxCi0jaWZkZWYgQ0FTVF9F WFBPUlRfRU5DUllQVElPTgotI2RlZmluZSBGQl9DTlQgIDIKLSNlbHNlCi0jZGVmaW5lIENGQl8x MjggMgotI2RlZmluZSBPRkJfMTI4IDMKLSNkZWZpbmUgRkJfQ05UICA0Ci0jZW5kaWYKLQotI2Rl ZmluZSBOT19TRU5EX0lWICAgICAgMQotI2RlZmluZSBOT19SRUNWX0lWICAgICAgMgotI2RlZmlu ZSBOT19LRVlJRCAgICAgICAgNAotI2RlZmluZSBJTl9QUk9HUkVTUyAgICAgKE5PX1NFTkRfSVZ8 Tk9fUkVDVl9JVnxOT19LRVlJRCkKLSNkZWZpbmUgU1VDQ0VTUyAgICAgICAgIDAKLSNkZWZpbmUg Y0ZBSUxFRCAgICAgICAgIC0xCi0KLQotc3RydWN0IGNhc3RfZmIgewotICAgICAgICBCbG9jayB0 ZW1wX2ZlZWQ7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgZmJfZmVlZFs2NF07Ci0gICAgICAgIGlu dCBrZXlfaXNzZXQ7Ci0gICAgICAgIGludCBuZWVkX3N0YXJ0OwotICAgICAgICBpbnQgc3RhdGVb Ml07Ci0gICAgICAgIHN0cnVjdCBjYXN0X3N0aW5mbyB7Ci0gICAgICAgICAgICAgICAgQmxvY2sg ICAgICAgICAgIHN0cl9vdXRwdXQ7Ci0gICAgICAgICAgICAgICAgQmxvY2sgICAgICAgICAgIHN0 cl9mZWVkOwotICAgICAgICAgICAgICAgIEJsb2NrICAgICAgICAgICBzdHJfaXY7Ci0gICAgICAg ICAgICAgICAgQ2FzdEtleVNjaGVkICAgIHN0cl9zY2hlZDsKLSAgICAgICAgICAgICAgICBpbnQg ICAgICAgICAgICAgc3RyX2luZGV4OwotICAgICAgICB9IHN0cmVhbXNbMl07Ci19OwotCi1zdGF0 aWMgc3RydWN0IGNhc3RfZmIgY2FzdF9mYltGQl9DTlRdOwotCi0jZGVmaW5lIEZCNjRfSVYgICAg ICAgICAxCi0jZGVmaW5lIEZCNjRfSVZfT0sgICAgICAyCi0jZGVmaW5lIEZCNjRfSVZfQkFEICAg ICAzCi0KLQotc3RhdGljIHZvaWQgY2FzdF9mYjY0X3N0cmVhbV9pdiBQKChCbG9jaywgc3RydWN0 IGNhc3Rfc3RpbmZvICopKTsKLXN0YXRpYyB2b2lkIGNhc3RfZmI2NF9pbml0IFAoKHN0cnVjdCBj YXN0X2ZiICopKTsKLXN0YXRpYyBpbnQgY2FzdF9mYjY0X3N0YXJ0IFAoKHN0cnVjdCBjYXN0X2Zi ICosIGludCwgaW50KSk7Ci1zdGF0aWMgaW50IGNhc3RfZmI2NF9pcyBQKCh1bnNpZ25lZCBjaGFy ICosIGludCwgc3RydWN0IGNhc3RfZmIgKikpOwotc3RhdGljIGludCBjYXN0X2ZiNjRfcmVwbHkg UCgodW5zaWduZWQgY2hhciAqLCBpbnQsIHN0cnVjdCBjYXN0X2ZiICopKTsKLXN0YXRpYyBpbnQg Y2FzdF9mYjY0X3Nlc3Npb24gUCgoU2Vzc2lvbl9LZXkgKiwgaW50LCBzdHJ1Y3QgY2FzdF9mYiAq LCBpbnQpKTsKLXN0YXRpYyB2b2lkIGNhc3RfZmI2NF9zdHJlYW1fa2V5IFAoKEJsb2NrLCBzdHJ1 Y3QgY2FzdF9zdGluZm8gKiwgaW50KSk7Ci1zdGF0aWMgaW50IGNhc3RfZmI2NF9rZXlpZCBQKChp bnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50ICosIHN0cnVjdCBjYXN0X2ZiICopKTsKLXN0YXRpYyB2 b2lkIF9jYXN0X2NmYjY0X2VuY3J5cHQgUCgodW5zaWduZWQgY2hhciAqLGludCwgc3RydWN0IGNh c3Rfc3RpbmZvICopKTsKLXN0YXRpYyBpbnQgX2Nhc3RfY2ZiNjRfZGVjcnlwdCBQKChpbnQsIHN0 cnVjdCBjYXN0X3N0aW5mbyAqKSk7Ci1zdGF0aWMgdm9pZCBfY2FzdF9vZmI2NF9lbmNyeXB0IFAo KHVuc2lnbmVkIGNoYXIgKixpbnQsIHN0cnVjdCBjYXN0X3N0aW5mbyAqKSk7Ci1zdGF0aWMgaW50 IF9jYXN0X29mYjY0X2RlY3J5cHQgUCgoaW50LCBzdHJ1Y3QgY2FzdF9zdGluZm8gKikpOwotCi0j aWZuZGVmIENBU1RfRVhQT1JUX0VOQ1JZUFRJT04KLXZvaWQKLWNhc3RfY2ZiNjRfaW5pdChzZXJ2 ZXIpCi0gICAgICAgIGludCBzZXJ2ZXI7Ci17Ci0gICAgICAgIGNhc3RfZmI2NF9pbml0KCZjYXN0 X2ZiW0NGQl8xMjhdKTsKLSAgICAgICAgY2FzdF9mYltDRkJfMTI4XS5mYl9mZWVkWzRdID0gRU5D VFlQRV9DQVNUMTI4X0NGQjY0OwotfQotCi12b2lkCi1jYXN0X29mYjY0X2luaXQoc2VydmVyKQot ICAgICAgICBpbnQgc2VydmVyOwotewotICAgICAgICBjYXN0X2ZiNjRfaW5pdCgmY2FzdF9mYltP RkJfMTI4XSk7Ci0gICAgICAgIGNhc3RfZmJbT0ZCXzEyOF0uZmJfZmVlZFs0XSA9IEVOQ1RZUEVf Q0FTVDEyOF9PRkI2NDsKLX0KLSNlbmRpZgotCi12b2lkCi1jYXN0ZXhwX2NmYjY0X2luaXQoc2Vy dmVyKQotICAgICAgICBpbnQgc2VydmVyOwotewotICAgICAgICBjYXN0X2ZiNjRfaW5pdCgmY2Fz dF9mYltDRkJfNDBdKTsKLSAgICAgICAgY2FzdF9mYltDRkJfNDBdLmZiX2ZlZWRbNF0gPSBFTkNU WVBFX0NBU1Q1XzQwX0NGQjY0OwotfQotCi12b2lkCi1jYXN0ZXhwX29mYjY0X2luaXQoc2VydmVy KQotICAgICAgICBpbnQgc2VydmVyOwotewotICAgICAgICBjYXN0X2ZiNjRfaW5pdCgmY2FzdF9m YltPRkJfNDBdKTsKLSAgICAgICAgY2FzdF9mYltPRkJfNDBdLmZiX2ZlZWRbNF0gPSBFTkNUWVBF X0NBU1Q1XzQwX09GQjY0OwotfQotCi1zdGF0aWMgdm9pZAotY2FzdF9mYjY0X2luaXQoZmJwKQot ICAgIHJlZ2lzdGVyIHN0cnVjdCBjYXN0X2ZiICpmYnA7Ci17Ci0gICAgbWVtc2V0KCh2b2lkICop ZmJwLCAwLCBzaXplb2YoKmZicCkpOwotICAgIGZicC0+a2V5X2lzc2V0ID0gMDsKLSAgICBmYnAt PnN0YXRlWzBdID0gZmJwLT5zdGF0ZVsxXSA9IGNGQUlMRUQ7Ci0gICAgZmJwLT5mYl9mZWVkWzBd ID0gSUFDOwotICAgIGZicC0+ZmJfZmVlZFsxXSA9IFNCOwotICAgIGZicC0+ZmJfZmVlZFsyXSA9 IFRFTE9QVF9FTkNSWVBUSU9OOwotICAgIGZicC0+ZmJfZmVlZFszXSA9IEVOQ1JZUFRfSVM7Ci19 Ci0KLS8qCi0gKiBSZXR1cm5zOgotICogICAgICAtMTogc29tZSBlcnJvci4gIE5lZ290aWF0aW9u IGlzIGRvbmUsIGVuY3J5cHRpb24gbm90IHJlYWR5LgotICogICAgICAgMDogU3VjY2Vzc2Z1bCwg aW5pdGlhbCBuZWdvdGlhdGlvbiBhbGwgZG9uZS4KLSAqICAgICAgIDE6IHN1Y2Nlc3NmdWwsIG5l Z290aWF0aW9uIG5vdCBkb25lIHlldC4KLSAqICAgICAgIDI6IE5vdCB5ZXQuICBPdGhlciB0aGlu Z3MgKGxpa2UgZ2V0dGluZyB0aGUga2V5IGZyb20KLSAqICAgICAgICAgIEtlcmJlcm9zKSBoYXZl IHRvIGhhcHBlbiBiZWZvcmUgd2UgY2FuIGNvbnRpbnVlLgotICovCi0jaWZuZGVmIENBU1RfRVhQ T1JUX0VOQ1JZUFRJT04KLWludAotY2FzdF9jZmI2NF9zdGFydChkaXIsIHNlcnZlcikKLSAgICBp bnQgZGlyOwotICAgIGludCBzZXJ2ZXI7Ci17Ci0gICAgcmV0dXJuKGNhc3RfZmI2NF9zdGFydCgm Y2FzdF9mYltDRkJfMTI4XSwgZGlyLCBzZXJ2ZXIpKTsKLX0KLQotaW50Ci1jYXN0X29mYjY0X3N0 YXJ0KGRpciwgc2VydmVyKQotICAgIGludCBkaXI7Ci0gICAgaW50IHNlcnZlcjsKLXsKLSAgICBy ZXR1cm4oY2FzdF9mYjY0X3N0YXJ0KCZjYXN0X2ZiW09GQl8xMjhdLCBkaXIsIHNlcnZlcikpOwot fQotI2VuZGlmCi0KLWludAotY2FzdGV4cF9jZmI2NF9zdGFydChkaXIsIHNlcnZlcikKLSAgICBp bnQgZGlyOwotICAgIGludCBzZXJ2ZXI7Ci17Ci0gICAgcmV0dXJuKGNhc3RfZmI2NF9zdGFydCgm Y2FzdF9mYltDRkJfNDBdLCBkaXIsIHNlcnZlcikpOwotfQotCi1pbnQKLWNhc3RleHBfb2ZiNjRf c3RhcnQoZGlyLCBzZXJ2ZXIpCi0gICAgaW50IGRpcjsKLSAgICBpbnQgc2VydmVyOwotewotICAg IHJldHVybihjYXN0X2ZiNjRfc3RhcnQoJmNhc3RfZmJbT0ZCXzQwXSwgZGlyLCBzZXJ2ZXIpKTsK LX0KLQotc3RhdGljIGludAotY2FzdF9mYjY0X3N0YXJ0KGZicCwgZGlyLCBzZXJ2ZXIpCi0gICAg c3RydWN0IGNhc3RfZmIgKmZicDsKLSAgICBpbnQgZGlyOwotICAgIGludCBzZXJ2ZXI7Ci17Ci0g ICAgQmxvY2sgYjsKLSAgICBpbnQgeDsKLSAgICB1bnNpZ25lZCBjaGFyICpwOwotICAgIHJlZ2lz dGVyIGludCBzdGF0ZTsKLQotICAgIHN3aXRjaCAoZGlyKSB7Ci0gICAgY2FzZSBESVJfREVDUllQ VDoKLSAgICAgICAgLyoKLSAgICAgICAgICogVGhpcyBpcyBzaW1wbHkgYSByZXF1ZXN0IHRvIGhh dmUgdGhlIG90aGVyIHNpZGUKLSAgICAgICAgICogc3RhcnQgb3V0cHV0IChvdXIgaW5wdXQpLiAg SGUgd2lsbCBuZWdvdGlhdGUgYW4KLSAgICAgICAgICogSVYgc28gd2UgbmVlZCBub3QgbG9vayBm b3IgaXQuCi0gICAgICAgICAqLwotICAgICAgICBzdGF0ZSA9IGZicC0+c3RhdGVbZGlyLTFdOwot ICAgICAgICBpZiAoc3RhdGUgPT0gY0ZBSUxFRCkKLSAgICAgICAgICAgIHN0YXRlID0gSU5fUFJP R1JFU1M7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBESVJfRU5DUllQVDoKLSAgICAgICAg c3RhdGUgPSBmYnAtPnN0YXRlW2Rpci0xXTsKLSAgICAgICAgaWYgKHN0YXRlID09IGNGQUlMRUQp Ci0gICAgICAgICAgICBzdGF0ZSA9IElOX1BST0dSRVNTOwotICAgICAgICBlbHNlIGlmICgoc3Rh dGUgJiBOT19TRU5EX0lWKSA9PSAwKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaWYg KCFmYnAtPmtleV9pc3NldCkgewotICAgICAgICAgICAgZmJwLT5uZWVkX3N0YXJ0ID0gMTsKLSAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHN0YXRlICY9IH5OT19TRU5EX0lW OwotICAgICAgICBzdGF0ZSB8PSBOT19SRUNWX0lWOwotI2lmZGVmIERFQlVHCi0gICAgICAgIGlm IChlbmNyeXB0X2RlYnVnX21vZGUpCi0gICAgICAgICAgICBwcmludGYoIkNyZWF0aW5nIG5ldyBm ZWVkXHJcbiIpOwotI2VuZGlmCi0gICAgICAgIC8qCi0gICAgICAgICAqIENyZWF0ZSBhIHJhbmRv bSBmZWVkIGFuZCBzZW5kIGl0IG92ZXIuCi0gICAgICAgICAqLwotICAgICAgICBja19jYXN0X2Vj Yl9lbmNyeXB0KGZicC0+dGVtcF9mZWVkLCBmYnAtPnRlbXBfZmVlZCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgJmZicC0+c3RyZWFtc1tkaXItMV0uc3RyX3NjaGVkLCAwKTsKLQotICAgICAg ICBwID0gZmJwLT5mYl9mZWVkICsgMzsKLSAgICAgICAgKnArKyA9IEVOQ1JZUFRfSVM7Ci0gICAg ICAgIHArKzsKLSAgICAgICAgKnArKyA9IEZCNjRfSVY7Ci0gICAgICAgIGZvciAoeCA9IDA7IHgg PCBzaXplb2YoQmxvY2spOyArK3gpIHsKLSAgICAgICAgICAgIGlmICgoKnArKyA9IGZicC0+dGVt cF9mZWVkW3hdKSA9PSBJQUMpCi0gICAgICAgICAgICAgICAgKnArKyA9IElBQzsKLSAgICAgICAg fQotICAgICAgICAqcCsrID0gSUFDOwotICAgICAgICAqcCsrID0gU0U7Ci0KLSAgICAgICAgdHRv bChmYnAtPmZiX2ZlZWQsIHAgLSBmYnAtPmZiX2ZlZWQpOwotICAgICAgICBicmVhazsKLSAgICBk ZWZhdWx0OgotICAgICAgICByZXR1cm4oY0ZBSUxFRCk7Ci0gICAgfQotICAgIHJldHVybihmYnAt PnN0YXRlW2Rpci0xXSA9IHN0YXRlKTsKLX0KLQotLyoKLSAqIFJldHVybnM6Ci0gKiAgICAgIC0x OiBzb21lIGVycm9yLiAgTmVnb3RpYXRpb24gaXMgZG9uZSwgZW5jcnlwdGlvbiBub3QgcmVhZHku Ci0gKiAgICAgICAwOiBTdWNjZXNzZnVsLCBpbml0aWFsIG5lZ290aWF0aW9uIGFsbCBkb25lLgot ICogICAgICAgMTogc3VjY2Vzc2Z1bCwgbmVnb3RpYXRpb24gbm90IGRvbmUgeWV0LgotICovCi0j aWZuZGVmIENBU1RfRVhQT1JUX0VOQ1JZUFRJT04KLWludAotY2FzdF9jZmI2NF9pcyhkYXRhLCBj bnQpCi0gICAgdW5zaWduZWQgY2hhciAqZGF0YTsKLSAgICBpbnQgY250OwotewotICAgIHJldHVy bihjYXN0X2ZiNjRfaXMoZGF0YSwgY250LCAmY2FzdF9mYltDRkJfMTI4XSkpOwotfQotCi1pbnQK LWNhc3Rfb2ZiNjRfaXMoZGF0YSwgY250KQotICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0gICAg aW50IGNudDsKLXsKLSAgICByZXR1cm4oY2FzdF9mYjY0X2lzKGRhdGEsIGNudCwgJmNhc3RfZmJb T0ZCXzEyOF0pKTsKLX0KLSNlbmRpZgotCi1pbnQKLWNhc3RleHBfY2ZiNjRfaXMoZGF0YSwgY250 KQotICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0gICAgaW50IGNudDsKLXsKLSAgICByZXR1cm4o Y2FzdF9mYjY0X2lzKGRhdGEsIGNudCwgJmNhc3RfZmJbQ0ZCXzQwXSkpOwotfQotCi1pbnQKLWNh c3RleHBfb2ZiNjRfaXMoZGF0YSwgY250KQotICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0gICAg aW50IGNudDsKLXsKLSAgICByZXR1cm4oY2FzdF9mYjY0X2lzKGRhdGEsIGNudCwgJmNhc3RfZmJb T0ZCXzQwXSkpOwotfQotCi1zdGF0aWMgaW50Ci1jYXN0X2ZiNjRfaXMoZGF0YSwgY250LCBmYnAp Ci0gICAgdW5zaWduZWQgY2hhciAqZGF0YTsKLSAgICBpbnQgY250OwotICAgIHN0cnVjdCBjYXN0 X2ZiICpmYnA7Ci17Ci0gICAgaW50IHg7Ci0gICAgdW5zaWduZWQgY2hhciAqcDsKLSAgICBCbG9j ayBiOwotICAgIHJlZ2lzdGVyIGludCBzdGF0ZSA9IGZicC0+c3RhdGVbRElSX0RFQ1JZUFQtMV07 Ci0KLSAgICBpZiAoY250LS0gPCAxKQotICAgICAgICBnb3RvIGZhaWx1cmU7Ci0KLSNpZmRlZiBD S19TU0wKLSAgICBpZiAoIVRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVf Zm9sbG93cykKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICBzd2l0Y2ggKCpkYXRhKyspIHsKLSAg ICBjYXNlIEZCNjRfSVY6Ci0gICAgICAgIGlmIChjbnQgIT0gc2l6ZW9mKEJsb2NrKSkgewotI2lm ZGVmIERFQlVHCi0gICAgICAgICAgICBpZiAoZW5jcnlwdF9kZWJ1Z19tb2RlKQotICAgICAgICAg ICAgICAgIHByaW50ZigiRkI2NDogaW5pdGlhbCB2ZWN0b3IgZmFpbGVkIG9uIHNpemVcclxuIik7 Ci0jZW5kaWYKLSAgICAgICAgICAgIHN0YXRlID0gY0ZBSUxFRDsKLSAgICAgICAgICAgIGdvdG8g ZmFpbHVyZTsKLSAgICAgICAgfQotI2lmZGVmIERFQlVHCi0gICAgICAgIGlmIChlbmNyeXB0X2Rl YnVnX21vZGUpCi0gICAgICAgICAgICBwcmludGYoIkZCNjQ6IGluaXRpYWwgdmVjdG9yIHJlY2Vp dmVkXHJcbiIpOwotCi0gICAgICAgIGlmIChlbmNyeXB0X2RlYnVnX21vZGUpCi0gICAgICAgICAg ICBwcmludGYoIkluaXRpYWxpemluZyBEZWNyeXB0IHN0cmVhbVxyXG4iKTsKLSNlbmRpZgotICAg ICAgICBjYXN0X2ZiNjRfc3RyZWFtX2l2KCh2b2lkICopZGF0YSwgJmZicC0+c3RyZWFtc1tESVJf REVDUllQVC0xXSk7Ci0KLSAgICAgICAgcCA9IGZicC0+ZmJfZmVlZCArIDM7Ci0gICAgICAgICpw KysgPSBFTkNSWVBUX1JFUExZOwotICAgICAgICBwKys7Ci0gICAgICAgICpwKysgPSBGQjY0X0lW X09LOwotICAgICAgICAqcCsrID0gSUFDOwotICAgICAgICAqcCsrID0gU0U7Ci0KLSAgICAgICAg dHRvbChmYnAtPmZiX2ZlZWQsIHAgLSBmYnAtPmZiX2ZlZWQpOwotICAgICAgICBzdGF0ZSA9IElO X1BST0dSRVNTOwotICAgICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8qIHVu a25vd24gb3B0aW9uIHR5cGUgKi8KLSAgICAgICAgLyogRkFMTCBUSFJPVUdIICovCi0gICAgICBm YWlsdXJlOgotICAgICAgICAvKgotICAgICAgICAqIFdlIGZhaWxlZC4gIFNlbmQgYW4gRkI2NF9J Vl9CQUQgb3B0aW9uCi0gICAgICAgICogdG8gdGhlIG90aGVyIHNpZGUgc28gaXQgd2lsbCBrbm93 IHRoYXQKLSAgICAgICAgKiB0aGluZ3MgZmFpbGVkLgotICAgICAgICAqLwotICAgICAgICBwID0g ZmJwLT5mYl9mZWVkICsgMzsKLSAgICAgICAgKnArKyA9IEVOQ1JZUFRfUkVQTFk7Ci0gICAgICAg IHArKzsKLSAgICAgICAgKnArKyA9IEZCNjRfSVZfQkFEOwotICAgICAgICAqcCsrID0gSUFDOwot ICAgICAgICAqcCsrID0gU0U7Ci0KLSAgICAgICAgdHRvbChmYnAtPmZiX2ZlZWQsIHAgLSBmYnAt PmZiX2ZlZWQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuKGZicC0+c3RhdGVb RElSX0RFQ1JZUFQtMV0gPSBzdGF0ZSk7Ci19Ci0KLS8qCi0gKiBSZXR1cm5zOgotICogICAgICAt MTogc29tZSBlcnJvci4gIE5lZ290aWF0aW9uIGlzIGRvbmUsIGVuY3J5cHRpb24gbm90IHJlYWR5 LgotICogICAgICAgMDogU3VjY2Vzc2Z1bCwgaW5pdGlhbCBuZWdvdGlhdGlvbiBhbGwgZG9uZS4K LSAqICAgICAgIDE6IHN1Y2Nlc3NmdWwsIG5lZ290aWF0aW9uIG5vdCBkb25lIHlldC4KLSAqLwot I2lmbmRlZiBDQVNUX0VYUE9SVF9FTkNSWVBUSU9OCi1pbnQKLWNhc3RfY2ZiNjRfcmVwbHkoZGF0 YSwgY250KQotICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0gICAgaW50IGNudDsKLXsKLSAgICBy ZXR1cm4oY2FzdF9mYjY0X3JlcGx5KGRhdGEsIGNudCwgJmNhc3RfZmJbQ0ZCXzEyOF0pKTsKLX0K LQotaW50Ci1jYXN0X29mYjY0X3JlcGx5KGRhdGEsIGNudCkKLSAgICB1bnNpZ25lZCBjaGFyICpk YXRhOwotICAgIGludCBjbnQ7Ci17Ci0gICAgcmV0dXJuKGNhc3RfZmI2NF9yZXBseShkYXRhLCBj bnQsICZjYXN0X2ZiW09GQl8xMjhdKSk7Ci19Ci0jZW5kaWYKLQotaW50Ci1jYXN0ZXhwX2NmYjY0 X3JlcGx5KGRhdGEsIGNudCkKLSAgICB1bnNpZ25lZCBjaGFyICpkYXRhOwotICAgIGludCBjbnQ7 Ci17Ci0gICAgcmV0dXJuKGNhc3RfZmI2NF9yZXBseShkYXRhLCBjbnQsICZjYXN0X2ZiW0NGQl80 MF0pKTsKLX0KLQotaW50Ci1jYXN0ZXhwX29mYjY0X3JlcGx5KGRhdGEsIGNudCkKLSAgICB1bnNp Z25lZCBjaGFyICpkYXRhOwotICAgIGludCBjbnQ7Ci17Ci0gICAgcmV0dXJuKGNhc3RfZmI2NF9y ZXBseShkYXRhLCBjbnQsICZjYXN0X2ZiW09GQl80MF0pKTsKLX0KLQotc3RhdGljIGludAotY2Fz dF9mYjY0X3JlcGx5KGRhdGEsIGNudCwgZmJwKQotICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0g ICAgaW50IGNudDsKLSAgICBzdHJ1Y3QgY2FzdF9mYiAqZmJwOwotewotICAgIGludCB4OwotICAg IHVuc2lnbmVkIGNoYXIgKnA7Ci0gICAgQmxvY2sgYjsKLSAgICByZWdpc3RlciBpbnQgc3RhdGUg PSBmYnAtPnN0YXRlW0RJUl9FTkNSWVBULTFdOwotCi0gICAgaWYgKGNudC0tIDwgMSkKLSAgICAg ICAgZ290byBmYWlsdXJlOwotCi0gICAgc3dpdGNoICgqZGF0YSsrKSB7Ci0gICAgY2FzZSBGQjY0 X0lWX09LOgotICAgICAgICBjYXN0X2ZiNjRfc3RyZWFtX2l2KGZicC0+dGVtcF9mZWVkLCAmZmJw LT5zdHJlYW1zW0RJUl9FTkNSWVBULTFdKTsKLSAgICAgICAgaWYgKHN0YXRlID09IGNGQUlMRUQp Ci0gICAgICAgICAgICBzdGF0ZSA9IElOX1BST0dSRVNTOwotICAgICAgICBzdGF0ZSAmPSB+Tk9f UkVDVl9JVjsKLSAgICAgICAgZW5jcnlwdF9zZW5kX2tleWlkKERJUl9FTkNSWVBULCAodW5zaWdu ZWQgY2hhciAqKSJcMCIsIDEsIDEpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgRkI2NF9J Vl9CQUQ6Ci0gICAgICAgIG1lbXNldChmYnAtPnRlbXBfZmVlZCwgMCwgc2l6ZW9mKEJsb2NrKSk7 Ci0gICAgICAgIGNhc3RfZmI2NF9zdHJlYW1faXYoZmJwLT50ZW1wX2ZlZWQsICZmYnAtPnN0cmVh bXNbRElSX0VOQ1JZUFQtMV0pOwotICAgICAgICBzdGF0ZSA9IGNGQUlMRUQ7Ci0gICAgICAgIGJy ZWFrOwotCi0gICAgZGVmYXVsdDoKLSNpZiAwCi0gICAgICAgIGlmIChlbmNyeXB0X2RlYnVnX21v ZGUpIHsKLSAgICAgICAgICAgIHByaW50ZigiVW5rbm93biBvcHRpb24gdHlwZTogJWRcclxuIiwg ZGF0YVstMV0pOwotICAgICAgICAgICAgcHJpbnRkKGRhdGEsIGNudCk7Ci0gICAgICAgICAgICBw cmludGYoIlxyXG4iKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIC8qIEZBTEwgVEhST1VH SCAqLwotICAgICAgZmFpbHVyZToKLSAgICAgICAgc3RhdGUgPSBjRkFJTEVEOwotICAgICAgICBi cmVhazsKLSAgICB9Ci0gICAgcmV0dXJuKGZicC0+c3RhdGVbRElSX0VOQ1JZUFQtMV0gPSBzdGF0 ZSk7Ci19Ci0KLSNpZm5kZWYgQ0FTVF9FWFBPUlRfRU5DUllQVElPTgotaW50Ci1jYXN0X2NmYjY0 X3Nlc3Npb24oa2V5LCBzZXJ2ZXIpCi0gICAgU2Vzc2lvbl9LZXkgKmtleTsKLSAgICBpbnQgc2Vy dmVyOwotewotICAgIHJldHVybihjYXN0X2ZiNjRfc2Vzc2lvbihrZXksIHNlcnZlciwgJmNhc3Rf ZmJbQ0ZCXzEyOF0sIDEpKTsKLX0KLQotaW50Ci1jYXN0X29mYjY0X3Nlc3Npb24oa2V5LCBzZXJ2 ZXIpCi0gICAgU2Vzc2lvbl9LZXkgKmtleTsKLSAgICBpbnQgc2VydmVyOwotewotICAgIHJldHVy bihjYXN0X2ZiNjRfc2Vzc2lvbihrZXksIHNlcnZlciwgJmNhc3RfZmJbT0ZCXzEyOF0sIDEpKTsK LX0KLSNlbmRpZgotCi1pbnQKLWNhc3RleHBfY2ZiNjRfc2Vzc2lvbihrZXksIHNlcnZlcikKLSAg ICBTZXNzaW9uX0tleSAqa2V5OwotICAgIGludCBzZXJ2ZXI7Ci17Ci0gICAgcmV0dXJuKGNhc3Rf ZmI2NF9zZXNzaW9uKGtleSwgc2VydmVyLCAmY2FzdF9mYltDRkJfNDBdLCAwKSk7Ci19Ci0KLWlu dAotY2FzdGV4cF9vZmI2NF9zZXNzaW9uKGtleSwgc2VydmVyKQotICAgIFNlc3Npb25fS2V5ICpr ZXk7Ci0gICAgaW50IHNlcnZlcjsKLXsKLSAgICByZXR1cm4oY2FzdF9mYjY0X3Nlc3Npb24oa2V5 LCBzZXJ2ZXIsICZjYXN0X2ZiW09GQl80MF0sIDApKTsKLX0KLQotI2RlZmluZSBDQVNUMTI4X0tF WUxFTiAgMTYgICAgICAvKiAxMjggYml0cyAqLwotI2RlZmluZSBDQVNUNV80MF9LRVlMRU4gIDUg ICAgICAvKiAgNDAgYml0cyAqLwotCi1zdGF0aWMgaW50Ci1jYXN0X2ZiNjRfc2Vzc2lvbihrZXks IHNlcnZlciwgZmJwLCBmcykKLSAgICBTZXNzaW9uX0tleSAqa2V5OwotICAgIGludCBzZXJ2ZXI7 Ci0gICAgc3RydWN0IGNhc3RfZmIgKmZicDsKLSAgICBpbnQgZnM7Ci17Ci0gICAgaW50IGtsZW47 Ci0gICAgdW5zaWduZWQgY2hhciAqIGtwdHI7Ci0KLSAgICBpZihmcykKLSAgICAgICAga2xlbiA9 IENBU1QxMjhfS0VZTEVOOwotICAgIGVsc2UKLSAgICAgICAga2xlbiA9IENBU1Q1XzQwX0tFWUxF TjsKLQotICAgIGlmICgha2V5IHx8IGtleS0+bGVuZ3RoIDwga2xlbikgewotICAgICAgICBDSEFS IGJ1Zls4MF07Ci0gICAgICAgIHNwcmludGYoKGNoYXIgKilidWYsIkNhbid0IHNldCBDQVNUIHNl c3Npb24ga2V5ICglZCA8ICVkKSIsCi0gICAgICAgICAgICAgICAga2V5ID8ga2V5LT5sZW5ndGgg OiAwLCBrbGVuKTsgICAgICAgICAgICAgICAgICAgLyogc2FmZSAqLwotI2lmZGVmIERFQlVHCi0g ICAgICAgIGlmIChlbmNyeXB0X2RlYnVnX21vZGUpCi0gICAgICAgICAgICBwcmludGYoIiVzXHJc biIsYnVmKTsKLSNlbmRpZgotICAgICAgICBkZWJ1ZyhGMTEwLCJjYXN0X2ZiNjRfc2Vzc2lvbiIs YnVmLDApOwotICAgICAgICByZXR1cm4oY0ZBSUxFRCk7Ci0gICAgfQotICAgIGlmKGtleS0+bGVu Z3RoIDwgMiAqIGtsZW4pCi0gICAgICAgIGtwdHIgPSBrZXktPmRhdGE7Ci0gICAgZWxzZQotICAg ICAgICBrcHRyID0ga2V5LT5kYXRhICsga2xlbjsKLQotICAgIGlmKHNlcnZlcikgewotICAgICAg ICBjYXN0X2ZiNjRfc3RyZWFtX2tleShrcHRyLCAmZmJwLT5zdHJlYW1zW0RJUl9FTkNSWVBULTFd LCBmcyk7Ci0gICAgICAgIGNhc3RfZmI2NF9zdHJlYW1fa2V5KGtleS0+ZGF0YSwgJmZicC0+c3Ry ZWFtc1tESVJfREVDUllQVC0xXSwgZnMpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgY2Fz dF9mYjY0X3N0cmVhbV9rZXkoa3B0ciwgJmZicC0+c3RyZWFtc1tESVJfREVDUllQVC0xXSwgZnMp OwotICAgICAgICBjYXN0X2ZiNjRfc3RyZWFtX2tleShrZXktPmRhdGEsICZmYnAtPnN0cmVhbXNb RElSX0VOQ1JZUFQtMV0sIGZzKTsKLSAgICB9Ci0KLSAgICAvKiBTdHVmZiBsZWZ0b3ZlcnMgaW50 byB0aGUgZmVlZCAqLwotICAgIGlmKGtleS0+bGVuZ3RoID49IDIgKiBrbGVuICsgc2l6ZW9mKEJs b2NrKSkKLSAgICAgICAgbWVtY3B5KGZicC0+dGVtcF9mZWVkLCBrZXktPmRhdGEgKyAyICoga2xl biwgc2l6ZW9mKEJsb2NrKSk7Ci0gICAgZWxzZSB7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAv KiBUaGlzIGlzIGEgYmV0dGVyIHdheSBvZiBlcmFzaW5nIHRoZSBwYXNzd29yZCAqLwotICAgICAg ICAvKiBidXQgd2UgZG8gbm90IHdhbnQgdG8gbGluayBpbiBsaWJzcnAgICAgICAgICAqLwotICAg ICAgICB0X3JhbmRvbShmYnAtPnRlbXBfZmVlZCwgc2l6ZW9mKEJsb2NrKSk7Ci0jZWxzZQotICAg ICAgICBtZW1zZXQoZmJwLT50ZW1wX2ZlZWQsIDAsIHNpemVvZihCbG9jaykpOwotI2VuZGlmCi0g ICAgfQotCi0gICAgZmJwLT5rZXlfaXNzZXQgPSAxOwotICAgIC8qCi0gICAgKiBOb3cgbG9vayB0 byBzZWUgaWYgY2FzdF9mYjY0X3N0YXJ0KCkgd2FzIHdhcyB3YWl0aW5nIGZvcgotICAgICogdGhl IGtleSB0byBzaG93IHVwLiAgSWYgc28sIGdvIGFoZWFkIGFuIGNhbGwgaXQgbm93Ci0gICAgKiB0 aGF0IHdlIGhhdmUgdGhlIGtleS4KLSAgICAqLwotICAgIGlmIChmYnAtPm5lZWRfc3RhcnQpIHsK LSAgICAgICAgZmJwLT5uZWVkX3N0YXJ0ID0gMDsKLSAgICAgICAgY2FzdF9mYjY0X3N0YXJ0KGZi cCwgRElSX0VOQ1JZUFQsIHNlcnZlcik7Ci0gICAgfQotICAgIHJldHVybigwKTsKLX0KLQotLyoK LSAqIFdlIG9ubHkgYWNjZXB0IGEga2V5aWQgb2YgMC4gIElmIHdlIGdldCBhIGtleWlkIG9mCi0g KiAwLCB0aGVuIG1hcmsgdGhlIHN0YXRlIGFzIFNVQ0NFU1MuCi0gKi8KLSNpZm5kZWYgQ0FTVF9F WFBPUlRfRU5DUllQVElPTgotaW50Ci1jYXN0X2NmYjY0X2tleWlkKGRpciwga3AsIGxlbnApCi0g ICAgaW50IGRpciwgKmxlbnA7Ci0gICAgdW5zaWduZWQgY2hhciAqa3A7Ci17Ci0gICAgcmV0dXJu KGNhc3RfZmI2NF9rZXlpZChkaXIsIGtwLCBsZW5wLCAmY2FzdF9mYltDRkJfMTI4XSkpOwotfQot Ci1pbnQKLWNhc3Rfb2ZiNjRfa2V5aWQoZGlyLCBrcCwgbGVucCkKLSAgICBpbnQgZGlyLCAqbGVu cDsKLSAgICB1bnNpZ25lZCBjaGFyICprcDsKLXsKLSAgICByZXR1cm4oY2FzdF9mYjY0X2tleWlk KGRpciwga3AsIGxlbnAsICZjYXN0X2ZiW09GQl8xMjhdKSk7Ci19Ci0jZW5kaWYKLQotaW50Ci1j YXN0ZXhwX2NmYjY0X2tleWlkKGRpciwga3AsIGxlbnApCi0gICAgaW50IGRpciwgKmxlbnA7Ci0g ICAgdW5zaWduZWQgY2hhciAqa3A7Ci17Ci0gICAgcmV0dXJuKGNhc3RfZmI2NF9rZXlpZChkaXIs IGtwLCBsZW5wLCAmY2FzdF9mYltDRkJfNDBdKSk7Ci19Ci0KLWludAotY2FzdGV4cF9vZmI2NF9r ZXlpZChkaXIsIGtwLCBsZW5wKQotICAgIGludCBkaXIsICpsZW5wOwotICAgIHVuc2lnbmVkIGNo YXIgKmtwOwotewotICAgIHJldHVybihjYXN0X2ZiNjRfa2V5aWQoZGlyLCBrcCwgbGVucCwgJmNh c3RfZmJbT0ZCXzQwXSkpOwotfQotCi1zdGF0aWMgaW50Ci1jYXN0X2ZiNjRfa2V5aWQoZGlyLCBr cCwgbGVucCwgZmJwKQotICAgIGludCBkaXIsICpsZW5wOwotICAgIHVuc2lnbmVkIGNoYXIgKmtw OwotICAgIHN0cnVjdCBjYXN0X2ZiICpmYnA7Ci17Ci0gICAgcmVnaXN0ZXIgaW50IHN0YXRlID0g ZmJwLT5zdGF0ZVtkaXItMV07Ci0KLSAgICBpZiAoKmxlbnAgIT0gMSB8fCAoKmtwICE9ICdcMCcp KSB7Ci0gICAgICAgICpsZW5wID0gMDsKLSAgICAgICAgcmV0dXJuKHN0YXRlKTsKLSAgICB9Ci0K LSAgICBpZiAoc3RhdGUgPT0gY0ZBSUxFRCkKLSAgICAgICAgc3RhdGUgPSBJTl9QUk9HUkVTUzsK LQotICAgIHN0YXRlICY9IH5OT19LRVlJRDsKLQotICAgIHJldHVybihmYnAtPnN0YXRlW2Rpci0x XSA9IHN0YXRlKTsKLX0KLQotc3RhdGljIHZvaWQKLWNhc3RfZmI2NF9wcmludHN1YihkYXRhLCBj bnQsIGJ1ZiwgYnVmbGVuLCB0eXBlKQotICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsICpidWYsICp0 eXBlOwotICAgIGludCBjbnQsIGJ1ZmxlbjsKLXsKLSAgICBjaGFyIGxidWZbNjRdOwotICAgIHJl Z2lzdGVyIGludCBpOwotICAgIGNoYXIgKmNwOwotCi0gICAgYnVmW2J1Zmxlbi0xXSA9ICdcMCc7 ICAgICAgICAgICAgICAgLyogbWFrZSBzdXJlIGl0J3MgTlVMTCB0ZXJtaW5hdGVkICovCi0gICAg YnVmbGVuIC09IDE7Ci0KLSAgICBzd2l0Y2goZGF0YVsyXSkgewotICAgIGNhc2UgRkI2NF9JVjoK LSAgICAgICAgc3ByaW50ZihsYnVmLCAiJXNfSVYiLCB0eXBlKTsKLSAgICAgICAgY3AgPSBsYnVm OwotICAgICAgICBnb3RvIGNvbW1vbjsKLQotICAgIGNhc2UgRkI2NF9JVl9PSzoKLSAgICAgICAg c3ByaW50ZihsYnVmLCAiJXNfSVZfT0siLCB0eXBlKTsKLSAgICAgICAgY3AgPSBsYnVmOwotICAg ICAgICBnb3RvIGNvbW1vbjsKLQotICAgIGNhc2UgRkI2NF9JVl9CQUQ6Ci0gICAgICAgIHNwcmlu dGYobGJ1ZiwgIiVzX0lWX0JBRCIsIHR5cGUpOwotICAgICAgICBjcCA9IGxidWY7Ci0gICAgICAg IGdvdG8gY29tbW9uOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ByaW50ZihsYnVmLCAiICVk ICh1bmtub3duKSIsIGRhdGFbMl0pOwotICAgICAgICBjcCA9IGxidWY7Ci0gICAgICBjb21tb246 Ci0gICAgICAgIGZvciAoOyAoYnVmbGVuID4gMCkgJiYgKCpidWYgPSAqY3ArKyk7IGJ1ZisrKQot ICAgICAgICAgICAgYnVmbGVuLS07Ci0gICAgICAgIGZvciAoaSA9IDM7IGkgPCBjbnQ7IGkrKykg ewotICAgICAgICAgICAgc3ByaW50ZihsYnVmLCAiICVkIiwgZGF0YVtpXSk7Ci0gICAgICAgICAg ICBmb3IgKGNwID0gbGJ1ZjsgKGJ1ZmxlbiA+IDApICYmICgqYnVmID0gKmNwKyspOyBidWYrKykK LSAgICAgICAgICAgICAgICBidWZsZW4tLTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAg ICB9Ci19Ci0KLXZvaWQKLWNhc3RfY2ZiNjRfcHJpbnRzdWIoZGF0YSwgY250LCBidWYsIGJ1Zmxl bikKLSAgICB1bnNpZ25lZCBjaGFyICpkYXRhLCAqYnVmOwotICAgIGludCBjbnQsIGJ1ZmxlbjsK LXsKLSAgICBjYXN0X2ZiNjRfcHJpbnRzdWIoZGF0YSwgY250LCBidWYsIGJ1ZmxlbiwgIkNGQjY0 Iik7Ci19Ci0KLXZvaWQKLWNhc3Rfb2ZiNjRfcHJpbnRzdWIoZGF0YSwgY250LCBidWYsIGJ1Zmxl bikKLSAgICB1bnNpZ25lZCBjaGFyICpkYXRhLCAqYnVmOwotICAgIGludCBjbnQsIGJ1ZmxlbjsK LXsKLSAgICBjYXN0X2ZiNjRfcHJpbnRzdWIoZGF0YSwgY250LCBidWYsIGJ1ZmxlbiwgIk9GQjY0 Iik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jYXN0X2ZiNjRfc3RyZWFtX2l2KHNlZWQsIHN0cCkKLSAg ICBCbG9jayBzZWVkOwotICAgIHJlZ2lzdGVyIHN0cnVjdCBjYXN0X3N0aW5mbyAqc3RwOwotewot ICAgIG1lbWNweSgodm9pZCAqKXN0cC0+c3RyX2l2LCAodm9pZCAqKXNlZWQsIHNpemVvZihCbG9j aykpOwotICAgIG1lbWNweSgodm9pZCAqKXN0cC0+c3RyX291dHB1dCwgKHZvaWQgKilzZWVkLCBz aXplb2YoQmxvY2spKTsKLQotICAgIHN0cC0+c3RyX2luZGV4ID0gc2l6ZW9mKEJsb2NrKTsKLX0K LQotc3RhdGljIHZvaWQKLWNhc3RfZmI2NF9zdHJlYW1fa2V5KGtleSwgc3RwLCBmcykKLSAgICB1 bnNpZ25lZCBjaGFyICoga2V5OwotICAgIHJlZ2lzdGVyIHN0cnVjdCBjYXN0X3N0aW5mbyAqc3Rw OwotICAgIGludCBmczsKLXsKLSNpZm5kZWYgQ0FTVF9FWFBPUlRfRU5DUllQVElPTgotICAgIGlm KGZzKQotICAgICAgICBja19jYXN0MTI4X2tleV9zY2hlZCgmc3RwLT5zdHJfc2NoZWQsIGtleSk7 Ci0gICAgZWxzZQotI2VuZGlmCi0gICAgICAgIGNrX2Nhc3Q1XzQwX2tleV9zY2hlZCgmc3RwLT5z dHJfc2NoZWQsIGtleSk7Ci0KLSAgICBtZW1jcHkoKHZvaWQgKilzdHAtPnN0cl9vdXRwdXQsICh2 b2lkICopc3RwLT5zdHJfaXYsIHNpemVvZihCbG9jaykpOwotCi0gICAgc3RwLT5zdHJfaW5kZXgg PSBzaXplb2YoQmxvY2spOwotfQotCi0vKgotICogQ0FTVCA2NCBiaXQgQ2lwaGVyIEZlZWRiYWNr Ci0gKgotICogICAgIGtleSAtLS0+Ky0tLS0tLSsKLSAqICAgICAgICAgICstPnwgQ0FTVCB8LS0r Ci0gKiAgICAgICAgICB8ICArLS0tLS0tKyAgfAotICogICAgICAgICAgfCAgICAgICAgICAgIHYK LSAqICBJTlBVVCAtLSgtLS0tLS0tLS0tPigrKSstLS0+IERBVEEKLSAqICAgICAgICAgIHwgICAg ICAgICAgICAgIHwKLSAqICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsKLSAqCi0gKgotICogR2l2 ZW46Ci0gKiAgICAgIGlWOiBJbml0aWFsIHZlY3RvciwgNjQgYml0cyAoOCBieXRlcykgbG9uZy4K LSAqICAgICAgRG46IHRoZSBudGggY2h1bmsgb2YgNjQgYml0cyAoOCBieXRlcykgb2YgZGF0YSB0 byBlbmNyeXB0IChkZWNyeXB0KS4KLSAqICAgICAgT246IHRoZSBudGggY2h1bmsgb2YgNjQgYml0 cyAoOCBieXRlcykgb2YgZW5jcnlwdGVkIChkZWNyeXB0ZWQpIG91dHB1dC4KLSAqCi0gKiAgICAg IFYwID0gQ0FTVChpViwga2V5KQotICogICAgICBPbiA9IERuIF4gVm4KLSAqICAgICAgVihuKzEp ID0gQ0FTVChPbiwga2V5KQotICovCi0jaWZuZGVmIENBU1RfRVhQT1JUX0VOQ1JZUFRJT04KLXZv aWQKLWNhc3RfY2ZiNjRfZW5jcnlwdChzLCBjKQotICAgICAgICByZWdpc3RlciB1bnNpZ25lZCBj aGFyICpzOwotICAgICAgICBpbnQgYzsKLXsKLSAgICBfY2FzdF9jZmI2NF9lbmNyeXB0KHMsIGMs ICZjYXN0X2ZiW0NGQl8xMjhdLnN0cmVhbXNbRElSX0VOQ1JZUFQtMV0pOwotfQotI2VuZGlmCi0K LXZvaWQKLWNhc3RleHBfY2ZiNjRfZW5jcnlwdChzLCBjKQotICAgIHJlZ2lzdGVyIHVuc2lnbmVk IGNoYXIgKnM7Ci0gICAgaW50IGM7Ci17Ci0gICAgX2Nhc3RfY2ZiNjRfZW5jcnlwdChzLCBjLCAm Y2FzdF9mYltDRkJfNDBdLnN0cmVhbXNbRElSX0VOQ1JZUFQtMV0pOwotfQotCi1zdGF0aWMgdm9p ZAotX2Nhc3RfY2ZiNjRfZW5jcnlwdChzLCBjLCBzdHApCi0gICAgcmVnaXN0ZXIgdW5zaWduZWQg Y2hhciAqczsKLSAgICBpbnQgYzsKLSAgICByZWdpc3RlciBzdHJ1Y3QgY2FzdF9zdGluZm8gKnN0 cDsKLXsKLSAgICByZWdpc3RlciBpbnQgaW5kZXg7Ci0KLSAgICBpbmRleCA9IHN0cC0+c3RyX2lu ZGV4OwotICAgIHdoaWxlIChjLS0gPiAwKSB7Ci0gICAgICAgIGlmIChpbmRleCA9PSBzaXplb2Yo QmxvY2spKSB7Ci0gICAgICAgICAgICBCbG9jayBiOwotICAgICAgICAgICAgY2tfY2FzdF9lY2Jf ZW5jcnlwdChiLCBzdHAtPnN0cl9vdXRwdXQsICZzdHAtPnN0cl9zY2hlZCwgMCk7Ci0gICAgICAg ICAgICBtZW1jcHkoKHZvaWQgKilzdHAtPnN0cl9mZWVkLCAodm9pZCAqKWIsIHNpemVvZihCbG9j aykpOwotICAgICAgICAgICAgaW5kZXggPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogT24g ZW5jcnlwdGlvbiwgd2Ugc3RvcmUgKGZlZWQgXiBkYXRhKSB3aGljaCBpcyBjeXBoZXIgKi8KLSAg ICAgICAgKnMgPSBzdHAtPnN0cl9vdXRwdXRbaW5kZXhdID0gKHN0cC0+c3RyX2ZlZWRbaW5kZXhd IF4gKnMpOwotICAgICAgICBzKys7Ci0gICAgICAgIGluZGV4Kys7Ci0gICAgfQotICAgIHN0cC0+ c3RyX2luZGV4ID0gaW5kZXg7Ci19Ci0KLSNpZm5kZWYgQ0FTVF9FWFBPUlRfRU5DUllQVElPTgot aW50Ci1jYXN0X2NmYjY0X2RlY3J5cHQoZGF0YSkKLSAgICBpbnQgZGF0YTsKLXsKLSAgICByZXR1 cm4gX2Nhc3RfY2ZiNjRfZGVjcnlwdChkYXRhLCAmY2FzdF9mYltDRkJfMTI4XS5zdHJlYW1zW0RJ Ul9ERUNSWVBULTFdKTsKLX0KLSNlbmRpZgotCi1pbnQKLWNhc3RleHBfY2ZiNjRfZGVjcnlwdChk YXRhKQotICAgIGludCBkYXRhOwotewotICAgIHJldHVybiBfY2FzdF9jZmI2NF9kZWNyeXB0KGRh dGEsICZjYXN0X2ZiW0NGQl80MF0uc3RyZWFtc1tESVJfREVDUllQVC0xXSk7Ci19Ci0KLXN0YXRp YyBpbnQKLV9jYXN0X2NmYjY0X2RlY3J5cHQoZGF0YSwgc3RwKQotICAgIGludCBkYXRhOwotICAg IHJlZ2lzdGVyIHN0cnVjdCBjYXN0X3N0aW5mbyAqc3RwOwotewotICAgIGludCBpbmRleDsKLQot ICAgIGlmIChkYXRhID09IC0xKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICogQmFjayB1cCBvbmUg Ynl0ZS4gIEl0IGlzIGFzc3VtZWQgdGhhdCB3ZSB3aWxsCi0gICAgICAgICogbmV2ZXIgYmFjayB1 cCBtb3JlIHRoYW4gb25lIGJ5dGUuICBJZiB3ZSBkbywgdGhpcwotICAgICAgICAqIG1heSBvciBt YXkgbm90IHdvcmsuCi0gICAgICAgICovCi0gICAgICAgIGlmIChzdHAtPnN0cl9pbmRleCkKLSAg ICAgICAgICAgIC0tc3RwLT5zdHJfaW5kZXg7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0K LSAgICBpbmRleCA9IHN0cC0+c3RyX2luZGV4Kys7Ci0gICAgaWYgKGluZGV4ID09IHNpemVvZihC bG9jaykpIHsKLSAgICAgICAgQmxvY2sgYjsKLSAgICAgICAgY2tfY2FzdF9lY2JfZW5jcnlwdChi LCBzdHAtPnN0cl9vdXRwdXQsICZzdHAtPnN0cl9zY2hlZCwgMCk7Ci0gICAgICAgIG1lbWNweSgo dm9pZCAqKXN0cC0+c3RyX2ZlZWQsICh2b2lkICopYiwgc2l6ZW9mKEJsb2NrKSk7Ci0gICAgICAg IHN0cC0+c3RyX2luZGV4ID0gMTsgICAgIC8qIE5leHQgdGltZSB3aWxsIGJlIDEgKi8KLSAgICAg ICAgaW5kZXggPSAwOyAgICAgICAgICAgICAgLyogQnV0IG5vdyB1c2UgMCAqLwotICAgIH0KLQot ICAgIC8qIE9uIGRlY3J5cHRpb24gd2Ugc3RvcmUgKGRhdGEpIHdoaWNoIGlzIGN5cGhlci4gKi8K LSAgICBzdHAtPnN0cl9vdXRwdXRbaW5kZXhdID0gZGF0YTsKLSAgICByZXR1cm4oZGF0YSBeIHN0 cC0+c3RyX2ZlZWRbaW5kZXhdKTsKLX0KLQotLyoKLSAqIENBU1QgNjQgYml0IE91dHB1dCBGZWVk YmFjawotICoKLSAqIGtleSAtLS0+Ky0tLS0tLSsKLSAqICAgICAgKy0+fCBDQVNUIHwtLSsKLSAq ICAgICAgfCAgKy0tLS0tLSsgIHwKLSAqICAgICAgKy0tLS0tLS0tLS0tLSsKLSAqICAgICAgICAg ICAgICAgICAgIHYKLSAqICBJTlBVVCAtLS0tLS0tLS0+KCspIC0tLS0+IERBVEEKLSAqCi0gKiBH aXZlbjoKLSAqICAgICAgaVY6IEluaXRpYWwgdmVjdG9yLCA2NCBiaXRzICg4IGJ5dGVzKSBsb25n LgotICogICAgICBEbjogdGhlIG50aCBjaHVuayBvZiA2NCBiaXRzICg4IGJ5dGVzKSBvZiBkYXRh IHRvIGVuY3J5cHQgKGRlY3J5cHQpLgotICogICAgICBPbjogdGhlIG50aCBjaHVuayBvZiA2NCBi aXRzICg4IGJ5dGVzKSBvZiBlbmNyeXB0ZWQgKGRlY3J5cHRlZCkgb3V0cHV0LgotICoKLSAqICAg ICAgVjAgPSBDQVNUKGlWLCBrZXkpCi0gKiAgICAgIFYobisxKSA9IENBU1QoVm4sIGtleSkKLSAq ICAgICAgT24gPSBEbiBeIFZuCi0gKi8KLSNpZm5kZWYgQ0FTVF9FWFBPUlRfRU5DUllQVElPTgot dm9pZAotY2FzdF9vZmI2NF9lbmNyeXB0KHMsIGMpCi0gICAgcmVnaXN0ZXIgdW5zaWduZWQgY2hh ciAqczsKLSAgICBpbnQgYzsKLXsKLSAgICBfY2FzdF9vZmI2NF9lbmNyeXB0KHMsIGMsICZjYXN0 X2ZiW09GQl8xMjhdLnN0cmVhbXNbRElSX0VOQ1JZUFQtMV0pOwotfQotI2VuZGlmCi0KLXZvaWQK LWNhc3RleHBfb2ZiNjRfZW5jcnlwdChzLCBjKQotICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIg KnM7Ci0gICAgaW50IGM7Ci17Ci0gIF9jYXN0X29mYjY0X2VuY3J5cHQocywgYywgJmNhc3RfZmJb T0ZCXzQwXS5zdHJlYW1zW0RJUl9FTkNSWVBULTFdKTsKLX0KLQotc3RhdGljIHZvaWQKLV9jYXN0 X29mYjY0X2VuY3J5cHQocywgYywgc3RwKQotICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgKnM7 Ci0gICAgaW50IGM7Ci0gICAgcmVnaXN0ZXIgc3RydWN0IGNhc3Rfc3RpbmZvICpzdHA7Ci17Ci0g ICAgcmVnaXN0ZXIgaW50IGluZGV4OwotCi0gICAgaW5kZXggPSBzdHAtPnN0cl9pbmRleDsKLSAg ICB3aGlsZSAoYy0tID4gMCkgewotICAgICAgICBpZiAoaW5kZXggPT0gc2l6ZW9mKEJsb2NrKSkg ewotICAgICAgICAgICAgQmxvY2sgYjsKLSAgICAgICAgICAgIGNrX2Nhc3RfZWNiX2VuY3J5cHQo Yiwgc3RwLT5zdHJfZmVlZCwgJnN0cC0+c3RyX3NjaGVkLCAwKTsKLSAgICAgICAgICAgIG1lbWNw eSgodm9pZCAqKXN0cC0+c3RyX2ZlZWQsICh2b2lkICopYiwgc2l6ZW9mKEJsb2NrKSk7Ci0gICAg ICAgICAgICBpbmRleCA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgKnMrKyBePSBzdHAtPnN0cl9m ZWVkW2luZGV4XTsKLSAgICAgICAgaW5kZXgrKzsKLSAgICB9Ci0gICAgc3RwLT5zdHJfaW5kZXgg PSBpbmRleDsKLX0KLQotI2lmbmRlZiBDQVNUX0VYUE9SVF9FTkNSWVBUSU9OCi1pbnQKLWNhc3Rf b2ZiNjRfZGVjcnlwdChkYXRhKQotICAgIGludCBkYXRhOwotewotICAgIHJldHVybiBfY2FzdF9v ZmI2NF9kZWNyeXB0KGRhdGEsICZjYXN0X2ZiW09GQl8xMjhdLnN0cmVhbXNbRElSX0RFQ1JZUFQt MV0pOwotfQotI2VuZGlmCi0KLWludAotY2FzdGV4cF9vZmI2NF9kZWNyeXB0KGRhdGEpCi0gICAg aW50IGRhdGE7Ci17Ci0gICAgcmV0dXJuIF9jYXN0X29mYjY0X2RlY3J5cHQoZGF0YSwgJmNhc3Rf ZmJbT0ZCXzQwXS5zdHJlYW1zW0RJUl9ERUNSWVBULTFdKTsKLX0KLQotc3RhdGljIGludAotX2Nh c3Rfb2ZiNjRfZGVjcnlwdChkYXRhLCBzdHApCi0gICAgaW50IGRhdGE7Ci0gICAgcmVnaXN0ZXIg c3RydWN0IGNhc3Rfc3RpbmZvICpzdHA7Ci17Ci0gICAgaW50IGluZGV4OwotCi0gICAgaWYgKGRh dGEgPT0gLTEpIHsKLSAgICAgICAgLyoKLSAgICAgICAgKiBCYWNrIHVwIG9uZSBieXRlLiAgSXQg aXMgYXNzdW1lZCB0aGF0IHdlIHdpbGwKLSAgICAgICAgKiBuZXZlciBiYWNrIHVwIG1vcmUgdGhh biBvbmUgYnl0ZS4gIElmIHdlIGRvLCB0aGlzCi0gICAgICAgICogbWF5IG9yIG1heSBub3Qgd29y ay4KLSAgICAgICAgKi8KLSAgICAgICAgaWYgKHN0cC0+c3RyX2luZGV4KQotICAgICAgICAgICAg LS1zdHAtPnN0cl9pbmRleDsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLQotICAgIGluZGV4 ID0gc3RwLT5zdHJfaW5kZXgrKzsKLSAgICBpZiAoaW5kZXggPT0gc2l6ZW9mKEJsb2NrKSkgewot ICAgICAgICBCbG9jayBiOwotICAgICAgICBja19jYXN0X2VjYl9lbmNyeXB0KGIsIHN0cC0+c3Ry X2ZlZWQsICZzdHAtPnN0cl9zY2hlZCwgMCk7Ci0gICAgICAgIG1lbWNweSgodm9pZCAqKXN0cC0+ c3RyX2ZlZWQsICh2b2lkICopYiwgc2l6ZW9mKEJsb2NrKSk7Ci0gICAgICAgIHN0cC0+c3RyX2lu ZGV4ID0gMTsgICAgIC8qIE5leHQgdGltZSB3aWxsIGJlIDEgKi8KLSAgICAgICAgaW5kZXggPSAw OyAgICAgICAgICAgICAgLyogQnV0IG5vdyB1c2UgMCAqLwotICAgIH0KLQotICAgIHJldHVybihk YXRhIF4gc3RwLT5zdHJfZmVlZFtpbmRleF0pOwotfQotCi0vKgotICogQ29weXJpZ2h0IChjKSAx OTk3IFN0YW5mb3JkIFVuaXZlcnNpdHkKLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlIGFuZAotICogaXRzIGRv Y3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVl LCBwcm92aWRlZAotICogdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZXMgYW5kIHRoaXMg cGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluCi0gKiBhbGwgY29waWVzIG9mIHRoZSBzb2Z0d2Fy ZSBhbmQgcmVsYXRlZCBkb2N1bWVudGF0aW9uLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMtSVMiIEFORCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAotICogRVhQUkVT UywgSU1QTElFRCBPUiBPVEhFUldJU0UsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIEFO WQotICogV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLgotICoKLSAqIElOIE5PIEVWRU5UIFNIQUxMIFNUQU5GT1JEIEJFIExJQUJM RSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsCi0gKiBJTkRJUkVDVCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgT0YgQU5ZIEtJTkQsIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIKLSAqIFJF U1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgT1IgTk9U IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBEQU1BR0UsIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgQVJJU0lORyBPVVQKLSAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotLyoKLSAq IGNhc3QuYwotICogQXV0aG9yOiBUb20gV3UKLSAqCi0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0 aGUgQ0FTVC0xMjggZW5jcnlwdGlvbiBhbGdvcml0aG0sIGFzCi0gKiBzcGVjaWZpZWQgaW4gUkZD IDIxNDQuCi0gKi8KLQotLyogVGhlIGZpcnN0IGZvdXIgUy1ib3hlcyBhcmUgZm9yIGVuY3J5cHRp b24vZGVjcnlwdGlvbiAqLwotCi1zdGF0aWMgdWludDMyIFMxW10gPSB7Ci0gIDB4MzBmYjQwZDQs IDB4OWZhMGZmMGIsIDB4NmJlY2NkMmYsIDB4M2YyNThjN2EsIDB4MWUyMTNmMmYsIDB4OWMwMDRk ZDMsCi0gIDB4NjAwM2U1NDAsIDB4Y2Y5ZmM5NDksIDB4YmZkNGFmMjcsIDB4ODhiYmJkYjUsIDB4 ZTIwMzQwOTAsIDB4OThkMDk2NzUsCi0gIDB4NmU2M2EwZTAsIDB4MTVjMzYxZDIsIDB4YzJlNzY2 MWQsIDB4MjJkNGZmOGUsIDB4Mjg2ODNiNmYsIDB4YzA3ZmQwNTksCi0gIDB4ZmYyMzc5YzgsIDB4 Nzc1ZjUwZTIsIDB4NDNjMzQwZDMsIDB4ZGYyZjg2NTYsIDB4ODg3Y2E0MWEsIDB4YTJkMmJkMmQs Ci0gIDB4YTFjOWUwZDYsIDB4MzQ2YzQ4MTksIDB4NjFiNzZkODcsIDB4MjI1NDBmMmYsIDB4MmFi ZTMyZTEsIDB4YWE1NDE2NmIsCi0gIDB4MjI1NjhlM2EsIDB4YTJkMzQxZDAsIDB4NjZkYjQwYzgs IDB4YTc4NDM5MmYsIDB4MDA0ZGZmMmYsIDB4MmRiOWQyZGUsCi0gIDB4OTc5NDNmYWMsIDB4NGE5 N2MxZDgsIDB4NTI3NjQ0YjcsIDB4YjVmNDM3YTcsIDB4YjgyY2JhZWYsIDB4ZDc1MWQxNTksCi0g IDB4NmZmN2YwZWQsIDB4NWEwOTdhMWYsIDB4ODI3YjY4ZDAsIDB4OTBlY2Y1MmUsIDB4MjJiMGMw NTQsIDB4YmM4ZTU5MzUsCi0gIDB4NGI2ZDJmN2YsIDB4NTBiYjY0YTIsIDB4ZDI2NjQ5MTAsIDB4 YmVlNTgxMmQsIDB4YjczMzIyOTAsIDB4ZTkzYjE1OWYsCi0gIDB4YjQ4ZWU0MTEsIDB4NGJmZjM0 NWQsIDB4ZmQ0NWMyNDAsIDB4YWQzMTk3M2YsIDB4YzRmNmQwMmUsIDB4NTVmYzgxNjUsCi0gIDB4 ZDViMWNhYWQsIDB4YTFhYzJkYWUsIDB4YTJkNGI3NmQsIDB4YzE5YjBjNTAsIDB4ODgyMjQwZjIs IDB4MGM2ZTRmMzgsCi0gIDB4YTRlNGJmZDcsIDB4NGY1YmEyNzIsIDB4NTY0YzFkMmYsIDB4YzU5 YzUzMTksIDB4Yjk0OWUzNTQsIDB4YjA0NjY5ZmUsCi0gIDB4YjFiNmFiOGEsIDB4YzcxMzU4ZGQs IDB4NjM4NWM1NDUsIDB4MTEwZjkzNWQsIDB4NTc1MzhhZDUsIDB4NmEzOTA0OTMsCi0gIDB4ZTYz ZDM3ZTAsIDB4MmE1NGY2YjMsIDB4M2E3ODdkNWYsIDB4NjI3NmEwYjUsIDB4MTlhNmZjZGYsIDB4 N2E0MjIwNmEsCi0gIDB4MjlmOWQ0ZDUsIDB4ZjYxYjE4OTEsIDB4YmI3MjI3NWUsIDB4YWE1MDgx NjcsIDB4Mzg5MDEwOTEsIDB4YzZiNTA1ZWIsCi0gIDB4ODRjN2NiOGMsIDB4MmFkNzVhMGYsIDB4 ODc0YTE0MjcsIDB4YTJkMTkzNmIsIDB4MmFkMjg2YWYsIDB4YWE1NmQyOTEsCi0gIDB4ZDc4OTQz NjAsIDB4NDI1Yzc1MGQsIDB4OTNiMzllMjYsIDB4MTg3MTg0YzksIDB4NmMwMGIzMmQsIDB4NzNl MmJiMTQsCi0gIDB4YTBiZWJjM2MsIDB4NTQ2MjM3NzksIDB4NjQ0NTllYWIsIDB4M2YzMjhiODIs IDB4NzcxOGNmODIsIDB4NTlhMmNlYTYsCi0gIDB4MDRlZTAwMmUsIDB4ODlmZTc4ZTYsIDB4M2Zh YjA5NTAsIDB4MzI1ZmY2YzIsIDB4ODEzODNmMDUsIDB4Njk2M2M1YzgsCi0gIDB4NzZjYjVhZDYs IDB4ZDQ5OTc0YzksIDB4Y2ExODBkY2YsIDB4MzgwNzgyZDUsIDB4YzdmYTVjZjYsIDB4OGFjMzE1 MTEsCi0gIDB4MzVlNzllMTMsIDB4NDdkYTkxZDAsIDB4ZjQwZjkwODYsIDB4YTdlMjQxOWUsIDB4 MzEzNjYyNDEsIDB4MDUxZWY0OTUsCi0gIDB4YWE1NzNiMDQsIDB4NGE4MDVkOGQsIDB4NTQ4MzAw ZDAsIDB4MDAzMjJhM2MsIDB4YmY2NGNkZGYsIDB4YmE1N2E2OGUsCi0gIDB4NzVjNjM3MmIsIDB4 NTBhZmQzNDEsIDB4YTdjMTMyNzUsIDB4OTE1YTBiZjUsIDB4NmI1NGJmYWIsIDB4MmIwYjE0MjYs Ci0gIDB4YWI0Y2M5ZDcsIDB4NDQ5Y2NkODIsIDB4ZjdmYmYyNjUsIDB4YWI4NWM1ZjMsIDB4MWI1 NWRiOTQsIDB4YWFkNGUzMjQsCi0gIDB4Y2ZhNGJkM2YsIDB4MmRlYWEzZTIsIDB4OWUyMDRkMDIs IDB4YzhiZDI1YWMsIDB4ZWFkZjU1YjMsIDB4ZDViZDllOTgsCi0gIDB4ZTMxMjMxYjIsIDB4MmFk NWFkNmMsIDB4OTU0MzI5ZGUsIDB4YWRiZTQ1MjgsIDB4ZDg3MTBmNjksIDB4YWE1MWM5MGYsCi0g IDB4YWE3ODZiZjYsIDB4MjI1MTNmMWUsIDB4YWE1MWE3OWIsIDB4MmFkMzQ0Y2MsMHg3YjVhNDFm MCwgMHhkMzdjZmJhZCwKLSAgMHgxYjA2OTUwNSwgMHg0MWVjZTQ5MSwgMHhiNGMzMzJlNiwgMHgw MzIyNjhkNCwgMHhjOTYwMGFjYywgMHhjZTM4N2U2ZCwKLSAgMHhiZjZiYjE2YywgMHg2YTcwZmI3 OCwgMHgwZDAzZDljOSwgMHhkNGRmMzlkZSwgMHhlMDEwNjNkYSwgMHg0NzM2ZjQ2NCwKLSAgMHg1 YWQzMjhkOCwgMHhiMzQ3Y2M5NiwgMHg3NWJiMGZjMywgMHg5ODUxMWJmYiwgMHg0ZmZiY2MzNSwg MHhiNThiY2Y2YSwKLSAgMHhlMTFmMGFiYywgMHhiZmM1ZmU0YSwgMHhhNzBhZWMxMCwgMHhhYzM5 NTcwYSwweDNmMDQ0NDJmLCAweDYxODhiMTUzLAotICAweGUwMzk3YTJlLCAweDU3MjdjYjc5LCAw eDljZWI0MThmLCAweDFjYWNkNjhkLCAweDJhZDM3Yzk2LCAweDAxNzVjYjlkLAotICAweGM2OWRm ZjA5LCAweGM3NWI2NWYwLCAweGQ5ZGI0MGQ4LCAweGVjMGU3Nzc5LCAweDQ3NDRlYWQ0LCAweGIx MWMzMjc0LAotICAweGRkMjRjYjllLCAweDdlMWM1NGJkLCAweGYwMTE0NGY5LCAweGQyMjQwZWIx LCAweDk2NzViM2ZkLCAweGEzYWMzNzU1LAotICAweGQ0N2MyN2FmLCAweDUxYzg1ZjRkLCAweDU2 OTA3NTk2LCAweGE1YmIxNWU2LDB4NTgwMzA0ZjAsIDB4Y2EwNDJjZjEsCi0gIDB4MDExYTM3ZWEs IDB4OGRiZmFhZGIsIDB4MzViYTNlNGEsIDB4MzUyNmZmYTAsIDB4YzM3YjRkMDksIDB4YmMzMDZl ZDksCi0gIDB4OThhNTI2NjYsIDB4NTY0OGY3MjUsIDB4ZmY1ZTU2OWQsIDB4MGNlZDYzZDAsIDB4 N2M2M2IyY2YsIDB4NzAwYjQ1ZTEsCi0gIDB4ZDVlYTUwZjEsIDB4ODVhOTI4NzIsIDB4YWYxZmJk YTcsIDB4ZDQyMzQ4NzAsIDB4YTc4NzBiZjMsIDB4MmQzYjRkNzksCi0gIDB4NDJlMDQxOTgsIDB4 MGNkMGVkZTcsIDB4MjY0NzBkYjgsIDB4Zjg4MTgxNGMsMHg0NzRkNmFkNywgMHg3YzBjNWU1YywK LSAgMHhkMTIzMTk1OSwgMHgzODFiNzI5OCwgMHhmNWQyZjRkYiwgMHhhYjgzODY1MywgMHg2ZTJm MWUyMywgMHg4MzcxOWM5ZSwKLSAgMHhiZDkxZTA0NiwgMHg5YTU2NDU2ZSwgMHhkYzM5MjAwYywg MHgyMGM4YzU3MSwgMHg5NjJiZGExYywgMHhlMWU2OTZmZiwKLSAgMHhiMTQxYWIwOCwgMHg3Y2Nh ODliOSwgMHgxYTY5ZTc4MywgMHgwMmNjNDg0MywgMHhhMmY3YzU3OSwgMHg0MjllZjQ3ZCwKLSAg MHg0MjdiMTY5YywgMHg1YWM5ZjA0OSwgMHhkZDhmMGYwMCwgMHg1YzgxNjViZgotfTsKLQotc3Rh dGljIHVpbnQzMiBTMltdID0gewotICAweDFmMjAxMDk0LCAweGVmMGJhNzViLCAweDY5ZTNjZjdl LCAweDM5M2Y0MzgwLCAweGZlNjFjZjdhLCAweGVlYzUyMDdhLAotICAweDU1ODg5Yzk0LCAweDcy ZmMwNjUxLCAweGFkYTdlZjc5LCAweDRlMWQ3MjM1LCAweGQ1NWE2M2NlLCAweGRlMDQzNmJhLAot ICAweDk5YzQzMGVmLCAweDVmMGMwNzk0LCAweDE4ZGNkYjdkLCAweGExZDZlZmYzLCAweGEwYjUy ZjdiLCAweDU5ZTgzNjA1LAotICAweGVlMTViMDk0LCAweGU5ZmZkOTA5LCAweGRjNDQwMDg2LCAw eGVmOTQ0NDU5LCAweGJhODNjY2IzLCAweGUwYzNjZGZiLAotICAweGQxZGE0MTgxLCAweDNiMDky YWIxLCAweGY5OTdmMWMxLCAweGE1ZTZjZjdiLCAweDAxNDIwZGRiLCAweGU0ZTdlZjViLAotICAw eDI1YTFmZjQxLCAweGUxODBmODA2LCAweDFmYzQxMDgwLCAweDE3OWJlZTdhLCAweGQzN2FjNmE5 LCAweGZlNTgzMGE0LAotICAweDk4ZGU4YjdmLCAweDc3ZTgzZjRlLCAweDc5OTI5MjY5LCAweDI0 ZmE5ZjdiLCAweGUxMTNjODViLCAweGFjYzQwMDgzLAotICAweGQ3NTAzNTI1LCAweGY3ZWE2MTVm LCAweDYyMTQzMTU0LCAweDBkNTU0YjYzLCAweDVkNjgxMTIxLCAweGM4NjZjMzU5LAotICAweDNk NjNjZjczLCAweGNlZTIzNGMwLCAweGQ0ZDg3ZTg3LCAweDVjNjcyYjIxLCAweDA3MWY2MTgxLCAw eDM5Zjc2MjdmLAotICAweDM2MWUzMDg0LCAweGU0ZWI1NzNiLCAweDYwMmY2NGE0LCAweGQ2M2Fj ZDljLCAweDFiYmM0NjM1LCAweDllODEwMzJkLAotICAweDI3MDFmNTBjLCAweDk5ODQ3YWI0LCAw eGEwZTNkZjc5LCAweGJhNmNmMzhjLCAweDEwODQzMDk0LCAweDI1MzdhOTVlLAotICAweGY0NmY2 ZmZlLCAweGExZmYzYjFmLCAweDIwOGNmYjZhLCAweDhmNDU4Yzc0LCAweGQ5ZTBhMjI3LCAweDRl YzczYTM0LAotICAweGZjODg0ZjY5LCAweDNlNGRlOGRmLCAweGVmMGUwMDg4LCAweDM1NTk2NDhk LCAweDhhNDUzODhjLCAweDFkODA0MzY2LAotICAweDcyMWQ5YmZkLCAweGE1ODY4NGJiLCAweGU4 MjU2MzMzLCAweDg0NGU4MjEyLCAweDEyOGQ4MDk4LCAweGZlZDMzZmI0LAotICAweGNlMjgwYWUx LCAweDI3ZTE5YmE1LCAweGQ1YTZjMjUyLCAweGU0OTc1NGJkLCAweGM1ZDY1NWRkLCAweGViNjY3 MDY0LAotICAweDc3ODQwYjRkLCAweGExYjZhODAxLCAweDg0ZGIyNmE5LCAweGUwYjU2NzE0LCAw eDIxZjA0M2I3LCAweGU1ZDA1ODYwLAotICAweDU0ZjAzMDg0LCAweDA2NmZmNDcyLCAweGEzMWFh MTUzLCAweGRhZGM0NzU1LCAweGI1NjI1ZGJmLCAweDY4NTYxYmU2LAotICAweDgzY2E2Yjk0LCAw eDJkNmVkMjNiLCAweGVjY2YwMWRiLCAweGE2ZDNkMGJhLCAweGI2ODAzZDVjLCAweGFmNzdhNzA5 LAotICAweDMzYjRhMzRjLCAweDM5N2JjOGQ2LCAweDVlZTIyYjk1LCAweDVmMGU1MzA0LCAweDgx ZWQ2ZjYxLCAweDIwZTc0MzY0LAotICAweGI0NWUxMzc4LCAweGRlMTg2MzliLCAweDg4MWNhMTIy LCAweGI5NjcyNmQxLCAweDgwNDlhN2U4LCAweDIyYjdkYTdiLAotICAweDVlNTUyZDI1LCAweDUy NzJkMjM3LCAweDc5ZDI5NTFjLCAweGM2MGQ4OTRjLCAweDQ4OGNiNDAyLCAweDFiYTRmZTViLAot ICAweGE0YjA5ZjZiLCAweDFjYTgxNWNmLCAweGEyMGMzMDA1LCAweDg4NzFkZjYzLCAweGI5ZGUy ZmNiLCAweDBjYzZjOWU5LAotICAweDBiZWVmZjUzLCAweGUzMjE0NTE3LCAweGI0NTQyODM1LCAw eDlmNjMyOTNjLCAweGVlNDFlNzI5LCAweDZlMWQyZDdjLAotICAweDUwMDQ1Mjg2LCAweDFlNjY4 NWYzLCAweGYzMzQwMWM2LCAweDMwYTIyYzk1LCAweDMxYTcwODUwLCAweDYwOTMwZjEzLAotICAw eDczZjk4NDE3LCAweGExMjY5ODU5LCAweGVjNjQ1YzQ0LCAweDUyYzg3N2E5LCAweGNkZmYzM2E2 LCAweGEwMmIxNzQxLAotICAweDdjYmFkOWEyLCAweDIxODAwMzZmLCAweDUwZDk5YzA4LCAweGNi M2Y0ODYxLCAweGMyNmJkNzY1LCAweDY0YTNmNmFiLAotICAweDgwMzQyNjc2LCAweDI1YTc1ZTdi LCAweGU0ZTZkMWZjLCAweDIwYzcxMGU2LCAweGNkZjBiNjgwLCAweDE3ODQ0ZDNiLAotICAweDMx ZWVmODRkLCAweDdlMDgyNGU0LCAweDJjY2I0OWViLCAweDg0NmEzYmFlLCAweDhmZjc3ODg4LCAw eGVlNWQ2MGY2LAotICAweDdhZjc1NjczLCAweDJmZGQ1Y2RiLCAweGExMTYzMWMxLCAweDMwZjY2 ZjQzLCAweGIzZmFlYzU0LCAweDE1N2ZkN2ZhLAotICAweGVmODU3OWNjLCAweGQxNTJkZTU4LCAw eGRiMmZmZDVlLCAweDhmMzJjZTE5LCAweDMwNmFmOTdhLCAweDAyZjAzZWY4LAotICAweDk5MzE5 YWQ1LCAweGMyNDJmYTBmLCAweGE3ZTNlYmIwLCAweGM2OGU0OTA2LCAweGI4ZGEyMzBjLCAweDgw ODIzMDI4LAotICAweGRjZGVmM2M4LCAweGQzNWZiMTcxLCAweDA4OGExYmM4LCAweGJlYzBjNTYw LCAweDYxYTNjOWU4LCAweGJjYThmNTRkLAotICAweGM3MmZlZmZhLCAweDIyODIyZTk5LCAweDgy YzU3MGI0LCAweGQ4ZDk0ZTg5LCAweDhiMWMzNGJjLCAweDMwMWUxNmU2LAotICAweDI3M2JlOTc5 LCAweGIwZmZlYWE2LCAweDYxZDliOGM2LCAweDAwYjI0ODY5LCAweGI3ZmZjZTNmLCAweDA4ZGMy ODNiLAotICAweDQzZGFmNjVhLCAweGY3ZTE5Nzk4LCAweDc2MTliNzJmLCAweDhmMWM5YmE0LCAw eGRjODYzN2EwLCAweDE2YTdkM2IxLAotICAweDlmYzM5M2I3LCAweGE3MTM2ZWViLCAweGM2YmNj NjNlLCAweDFhNTEzNzQyLCAweGVmNjgyOGJjLCAweDUyMDM2NWQ2LAotICAweDJkNmE3N2FiLCAw eDM1MjdlZDRiLCAweDgyMWZkMjE2LCAweDA5NWM2ZTJlLCAweGRiOTJmMmZiLCAweDVlZWEyOWNi LAotICAweDE0NTg5MmY1LCAweDkxNTg0ZjdmLCAweDU0ODM2OTdiLCAweDI2NjdhOGNjLCAweDg1 MTk2MDQ4LCAweDhjNGJhY2VhLAotICAweDgzMzg2MGQ0LCAweDBkMjNlMGY5LCAweDZjMzg3ZThh LCAweDBhZTZkMjQ5LCAweGIyODQ2MDBjLCAweGQ4MzU3MzFkLAotICAweGRjYjFjNjQ3LCAweGFj NGM1NmVhLCAweDNlYmQ4MWIzLCAweDIzMGVhYmIwLCAweDY0MzhiYzg3LCAweGYwYjViMWZhLAot ICAweDhmNWVhMmIzLCAweGZjMTg0NjQyLCAweDBhMDM2YjdhLCAweDRmYjA4OWJkLCAweDY0OWRh NTg5LCAweGEzNDU0MTVlLAotICAweDVjMDM4MzIzLCAweDNlNWQzYmI5LCAweDQzZDc5NTcyLCAw eDdlNmRkMDdjLCAweDA2ZGZkZjFlLCAweDZjNmNjNGVmLAotICAweDcxNjBhNTM5LCAweDczYmZi ZTcwLCAweDgzODc3NjA1LCAweDQ1MjNlY2YxCi19OwotCi1zdGF0aWMgdWludDMyIFMzW10gPSB7 Ci0gIDB4OGRlZmMyNDAsIDB4MjVmYTVkOWYsIDB4ZWI5MDNkYmYsIDB4ZTgxMGM5MDcsIDB4NDc2 MDdmZmYsIDB4MzY5ZmU0NGIsCi0gIDB4OGMxZmM2NDQsIDB4YWVjZWNhOTAsIDB4YmViMWY5YmYs IDB4ZWVmYmNhZWEsIDB4ZThjZjE5NTAsIDB4NTFkZjA3YWUsCi0gIDB4OTIwZTg4MDYsIDB4ZjBh ZDA1NDgsIDB4ZTEzYzhkODMsIDB4OTI3MDEwZDUsIDB4MTExMDdkOWYsIDB4MDc2NDdkYjksCi0g IDB4YjJlM2U0ZDQsIDB4M2Q0ZjI4NWUsIDB4YjlhZmE4MjAsIDB4ZmFkZTgyZTAsIDB4YTA2NzI2 OGIsIDB4ODI3Mjc5MmUsCi0gIDB4NTUzZmIyYzAsIDB4NDg5YWUyMmIsIDB4ZDRlZjk3OTQsIDB4 MTI1ZTNmYmMsIDB4MjFmZmZjZWUsIDB4ODI1YjFiZmQsCi0gIDB4OTI1NWM1ZWQsIDB4MTI1N2Ey NDAsIDB4NGUxYTgzMDIsIDB4YmFlMDdmZmYsIDB4NTI4MjQ2ZTcsIDB4OGU1NzE0MGUsCi0gIDB4 MzM3M2Y3YmYsIDB4OGM5ZjgxODgsIDB4YTZmYzRlZTgsIDB4Yzk4MmI1YTUsIDB4YThjMDFkYjcs IDB4NTc5ZmMyNjQsCi0gIDB4NjcwOTRmMzEsIDB4ZjJiZDNmNWYsIDB4NDBmZmY3YzEsIDB4MWZi NzhkZmMsIDB4OGU2YmQyYzEsIDB4NDM3YmU1OWIsCi0gIDB4OTliMDNkYmYsIDB4YjVkYmM2NGIs IDB4NjM4ZGMwZTYsIDB4NTU4MTlkOTksIDB4YTE5N2M4MWMsIDB4NGEwMTJkNmUsCi0gIDB4YzU4 ODRhMjgsIDB4Y2NjMzZmNzEsIDB4Yjg0M2MyMTMsIDB4NmMwNzQzZjEsIDB4ODMwOTg5M2MsIDB4 MGZlZGRkNWYsCi0gIDB4MmY3ZmU4NTAsIDB4ZDdjMDdmN2UsIDB4MDI1MDdmYmYsIDB4NWFmYjlh MDQsIDB4YTc0N2QyZDAsIDB4MTY1MTE5MmUsCi0gIDB4YWY3MGJmM2UsIDB4NThjMzEzODAsIDB4 NWY5ODMwMmUsIDB4NzI3Y2MzYzQsIDB4MGEwZmI0MDIsIDB4MGY3ZmVmODIsCi0gIDB4OGM5NmZk YWQsIDB4NWQyYzJhYWUsIDB4OGVlOTlhNDksIDB4NTBkYTg4YjgsIDB4ODQyN2Y0YTAsIDB4MWVh YzU3OTAsCi0gIDB4Nzk2ZmI0NDksIDB4ODI1MmRjMTUsIDB4ZWZiZDdkOWIsIDB4YTY3MjU5N2Qs IDB4YWRhODQwZDgsIDB4NDVmNTQ1MDQsCi0gIDB4ZmE1ZDc0MDMsIDB4ZTgzZWMzMDUsIDB4NGY5 MTc1MWEsIDB4OTI1NjY5YzIsIDB4MjNlZmU5NDEsIDB4YTkwM2YxMmUsCi0gIDB4NjAyNzBkZjIs IDB4MDI3NmU0YjYsIDB4OTRmZDY1NzQsIDB4OTI3OTg1YjIsIDB4ODI3NmRiY2IsIDB4MDI3Nzgx NzYsCi0gIDB4ZjhhZjkxOGQsIDB4NGU0OGY3OWUsIDB4OGY2MTZkZGYsIDB4ZTI5ZDg0MGUsIDB4 ODQyZjdkODMsIDB4MzQwY2U1YzgsCi0gIDB4OTZiYmI2ODIsIDB4OTNiNGIxNDgsIDB4ZWYzMDNj YWIsIDB4OTg0ZmFmMjgsIDB4Nzc5ZmFmOWIsIDB4OTJkYzU2MGQsCi0gIDB4MjI0ZDFlMjAsIDB4 ODQzN2FhODgsIDB4N2QyOWRjOTYsIDB4Mjc1NmQzZGMsIDB4OGI5MDdjZWUsIDB4YjUxZmQyNDAs Ci0gIDB4ZTdjMDdjZTMsIDB4ZTU2NmI0YTEsIDB4YzNlOTYxNWUsIDB4M2NmODIwOWQsIDB4NjA5 NGQxZTMsIDB4Y2Q5Y2EzNDEsCi0gIDB4NWM3NjQ2MGUsIDB4MDBlYTk4M2IsIDB4ZDRkNjc4ODEs IDB4ZmQ0NzU3MmMsIDB4Zjc2Y2VkZDksIDB4YmRhODIyOWMsCi0gIDB4MTI3ZGFkYWEsIDB4NDM4 YTA3NGUsIDB4MWY5N2MwOTAsIDB4MDgxYmRiOGEsIDB4OTNhMDdlYmUsIDB4YjkzOGNhMTUsCi0g IDB4OTdiMDNjZmYsIDB4M2RjMmMwZjgsIDB4OGQxYWIyZWMsIDB4NjQzODBlNTEsIDB4NjhjYzdi ZmIsIDB4ZDkwZjI3ODgsCi0gIDB4MTI0OTAxODEsIDB4NWRlNWZmZDQsIDB4ZGQ3ZWY4NmEsIDB4 NzZhMmUyMTQsIDB4YjlhNDAzNjgsIDB4OTI1ZDk1OGYsCi0gIDB4NGIzOWZmZmEsIDB4YmEzOWFl ZTksIDB4YTRmZmQzMGIsIDB4ZmFmNzkzM2IsIDB4NmQ0OTg2MjMsIDB4MTkzY2JjZmEsCi0gIDB4 Mjc2Mjc1NDUsIDB4ODI1Y2Y0N2EsIDB4NjFiZDhiYTAsIDB4ZDExZTQyZDEsIDB4Y2VhZDA0ZjQs IDB4MTI3ZWEzOTIsCi0gIDB4MTA0MjhkYjcsIDB4ODI3MmE5NzIsIDB4OTI3MGM0YTgsIDB4MTI3 ZGU1MGIsIDB4Mjg1YmExYzgsIDB4M2M2MmY0NGYsCi0gIDB4MzVjMGVhYTUsIDB4ZTgwNWQyMzEs IDB4NDI4OTI5ZmIsIDB4YjRmY2RmODIsIDB4NGZiNjZhNTMsIDB4MGU3ZGMxNWIsCi0gIDB4MWYw ODFmYWIsIDB4MTA4NjE4YWUsIDB4ZmNmZDA4NmQsIDB4ZjlmZjI4ODksIDB4Njk0YmNjMTEsIDB4 MjM2YTVjYWUsCi0gIDB4MTJkZWNhNGQsIDB4MmMzZjhjYzUsIDB4ZDJkMDJkZmUsIDB4ZjhlZjU4 OTYsIDB4ZTRjZjUyZGEsIDB4OTUxNTViNjcsCi0gIDB4NDk0YTQ4OGMsIDB4YjliNmE4MGMsIDB4 NWM4ZjgyYmMsIDB4ODlkMzZiNDUsIDB4M2E2MDk0MzcsIDB4ZWMwMGM5YTksCi0gIDB4NDQ3MTUy NTMsIDB4MGE4NzRiNDksIDB4ZDc3M2JjNDAsIDB4N2MzNDY3MWMsIDB4MDI3MTdlZjYsIDB4NGZl YjU1MzYsCi0gIDB4YTJkMDJmZmYsIDB4ZDJiZjYwYzQsIDB4ZDQzZjAzYzAsIDB4NTBiNGVmNmQs IDB4MDc0NzhjZDEsIDB4MDA2ZTE4ODgsCi0gIDB4YTJlNTNmNTUsIDB4YjllNmQ0YmMsIDB4YTIw NDgwMTYsIDB4OTc1NzM4MzMsIDB4ZDcyMDdkNjcsIDB4ZGUwZjhmM2QsCi0gIDB4NzJmODdiMzMs IDB4YWJjYzRmMzMsIDB4NzY4OGM1NWQsIDB4N2IwMGE2YjAsIDB4OTQ3YjAwMDEsIDB4NTcwMDc1 ZDIsCi0gIDB4ZjliYjg4ZjgsIDB4ODk0MjAxOWUsIDB4NDI2NGE1ZmYsIDB4ODU2MzAyZTAsIDB4 NzJkYmQ5MmIsIDB4ZWU5NzFiNjksCi0gIDB4NmVhMjJmZGUsIDB4NWYwOGFlMmIsIDB4YWY3YTYx NmQsIDB4ZTVjOTg3NjcsIDB4Y2YxZmViZDIsIDB4NjFlZmM4YzIsCi0gIDB4ZjFhYzI1NzEsIDB4 Y2M4MjM5YzIsIDB4NjcyMTRjYjgsIDB4YjFlNTgzZDEsIDB4YjdkYzNlNjIsIDB4N2YxMGJkY2Us Ci0gIDB4ZjkwYTVjMzgsIDB4MGZmMDQ0M2QsIDB4NjA2ZTZkYzYsIDB4NjA1NDNhNDksIDB4NTcy N2MxNDgsIDB4MmJlOThhMWQsCi0gIDB4OGFiNDE3MzgsIDB4MjBlMWJlMjQsIDB4YWY5NmRhMGYs IDB4Njg0NTg0MjUsIDB4OTk4MzNiZTUsIDB4NjAwZDQ1N2QsCi0gIDB4MjgyZjkzNTAsIDB4ODMz NGIzNjIsIDB4ZDkxZDExMjAsIDB4MmI2ZDhkYTAsIDB4NjQyYjFlMzEsIDB4OWMzMDVhMDAsCi0g IDB4NTJiY2U2ODgsIDB4MWIwMzU4OGEsIDB4ZjdiYWVmZDUsIDB4NDE0MmVkOWMsIDB4YTQzMTVj MTEsIDB4ODMzMjNlYzUsCi0gIDB4ZGZlZjQ2MzYsIDB4YTEzM2M1MDEsIDB4ZTlkMzUzMWMsIDB4 ZWUzNTM3ODMKLX07Ci0KLXN0YXRpYyB1aW50MzIgUzRbXSA9IHsKLSAgMHg5ZGIzMDQyMCwgMHgx ZmI2ZTlkZSwgMHhhN2JlN2JlZiwgMHhkMjczYTI5OCwgMHg0YTRmN2JkYiwgMHg2NGFkOGM1NywK LSAgMHg4NTUxMDQ0MywgMHhmYTAyMGVkMSwgMHg3ZTI4N2FmZiwgMHhlNjBmYjY2MywgMHgwOTVm MzVhMSwgMHg3OWViZjEyMCwKLSAgMHhmZDA1OWQ0MywgMHg2NDk3YjdiMSwgMHhmMzY0MWY2Mywg MHgyNDFlNGFkZiwgMHgyODE0N2Y1ZiwgMHg0ZmEyYjhjZCwKLSAgMHhjOTQzMDA0MCwgMHgwY2Mz MjIyMCwgMHhmZGQzMGIzMCwgMHhjMGE1Mzc0ZiwgMHgxZDJkMDBkOSwgMHgyNDE0N2IxNSwKLSAg MHhlZTRkMTExYSwgMHgwZmNhNTE2NywgMHg3MWZmOTA0YywgMHgyZDE5NWZmZSwgMHgxYTA1NjQ1 ZiwgMHgwYzEzZmVmZSwKLSAgMHgwODFiMDhjYSwgMHgwNTE3MDEyMSwgMHg4MDUzMDEwMCwgMHhl ODNlNWVmZSwgMHhhYzlhZjRmOCwgMHg3ZmU3MjcwMSwKLSAgMHhkMmI4ZWU1ZiwgMHgwNmRmNDI2 MSwgMHhiYjllOWI4YSwgMHg3MjkzZWEyNSwgMHhjZTg0ZmZkZiwgMHhmNTcxODgwMSwKLSAgMHgz ZGQ2NGIwNCwgMHhhMjZmMjYzYiwgMHg3ZWQ0ODQwMCwgMHg1NDdlZWJlNiwgMHg0NDZkNGNhMCwg MHg2Y2YzZDZmNSwKLSAgMHgyNjQ5YWJkZiwgMHhhZWEwYzdmNSwgMHgzNjMzOGNjMSwgMHg1MDNm N2U5MywgMHhkMzc3MjA2MSwgMHgxMWI2MzhlMSwKLSAgMHg3MjUwMGUwMywgMHhmODBlYjJiYiwg MHhhYmUwNTAyZSwgMHhlYzhkNzdkZSwgMHg1Nzk3MWU4MSwgMHhlMTRmNjc0NiwKLSAgMHhjOTMz NTQwMCwgMHg2OTIwMzE4ZiwgMHgwODFkYmI5OSwgMHhmZmMzMDRhNSwgMHg0ZDM1MTgwNSwgMHg3 ZjNkNWNlMywKLSAgMHhhNmM4NjZjNiwgMHg1ZDViY2NhOSwgMHhkYWVjNmZlYSwgMHg5ZjkyNmY5 MSwgMHg5ZjQ2MjIyZiwgMHgzOTkxNDY3ZCwKLSAgMHhhNWJmNmQ4ZSwgMHgxMTQzYzQ0ZiwgMHg0 Mzk1ODMwMiwgMHhkMDIxNGVlYiwgMHgwMjIwODNiOCwgMHgzZmI2MTgwYywKLSAgMHgxOGY4OTMx ZSwgMHgyODE2NThlNiwgMHgyNjQ4NmUzZSwgMHg4YmQ3OGE3MCwgMHg3NDc3ZTRjMSwgMHhiNTA2 ZTA3YywKLSAgMHhmMzJkMGEyNSwgMHg3OTA5OGIwMiwgMHhlNGVhYmI4MSwgMHgyODEyM2IyMywg MHg2OWRlYWQzOCwgMHgxNTc0Y2ExNiwKLSAgMHhkZjg3MWI2MiwgMHgyMTFjNDBiNywgMHhhNTFh OWVmOSwgMHgwMDE0Mzc3YiwgMHgwNDFlOGFjOCwgMHgwOTExNDAwMywKLSAgMHhiZDU5ZTRkMiwg MHhlM2QxNTZkNSwgMHg0ZmU4NzZkNSwgMHgyZjkxYTM0MCwgMHg1NTdiZThkZSwgMHgwMGVhZTRh NywKLSAgMHgwY2U1YzJlYywgMHg0ZGI0YmJhNiwgMHhlNzU2YmRmZiwgMHhkZDMzNjlhYywgMHhl YzE3YjAzNSwgMHgwNjU3MjMyNywKLSAgMHg5OWFmYzhiMCwgMHg1NmM4YzM5MSwgMHg2YjY1ODEx YywgMHg1ZTE0NjExOSwgMHg2ZTg1Y2I3NSwgMHhiZTA3YzAwMiwKLSAgMHhjMjMyNTU3NywgMHg4 OTNmZjRlYywgMHg1YmJmYzkyZCwgMHhkMGVjM2IyNSwgMHhiNzgwMWFiNywgMHg4ZDZkM2IyNCwK LSAgMHgyMGM3NjNlZiwgMHhjMzY2YTVmYywgMHg5YzM4Mjg4MCwgMHgwYWNlMzIwNSwgMHhhYWM5 NTQ4YSwgMHhlY2ExZDdjNywKLSAgMHgwNDFhZmEzMiwgMHgxZDE2NjI1YSwgMHg2NzAxOTAyYywg MHg5Yjc1N2E1NCwgMHgzMWQ0NzdmNywgMHg5MTI2YjAzMSwKLSAgMHgzNmNjNmZkYiwgMHhjNzBi OGI0NiwgMHhkOWU2NmE0OCwgMHg1NmU1NWE3OSwgMHgwMjZhNGNlYiwgMHg1MjQzN2VmZiwKLSAg MHgyZjhmNzZiNCwgMHgwZGY5ODBhNSwgMHg4Njc0Y2RlMywgMHhlZGRhMDRlYiwgMHgxN2E5YmUw NCwgMHgyYzE4ZjRkZiwKLSAgMHhiNzc0N2Y5ZCwgMHhhYjJhZjdiNCwgMHhlZmMzNGQyMCwgMHgy ZTA5NmI3YywgMHgxNzQxYTI1NCwgMHhlNWI2YTAzNSwKLSAgMHgyMTNkNDJmNiwgMHgyYzFjN2My NiwgMHg2MWMyZjUwZiwgMHg2NTUyZGFmOSwgMHhkMmMyMzFmOCwgMHgyNTEzMGY2OSwKLSAgMHhk ODE2N2ZhMiwgMHgwNDE4ZjJjOCwgMHgwMDFhOTZhNiwgMHgwZDE1MjZhYiwgMHg2MzMxNWMyMSwg MHg1ZTBhNzJlYywKLSAgMHg0OWJhZmVmZCwgMHgxODc5MDhkOSwgMHg4ZDBkYmQ4NiwgMHgzMTEx NzBhNywgMHgzZTliNjQwYywgMHhjYzNlMTBkNywKLSAgMHhkNWNhZDNiNiwgMHgwY2FlYzM4OCwg MHhmNzMwMDFlMSwgMHg2YzcyOGFmZiwgMHg3MWVhZTJhMSwgMHgxZjlhZjM2ZSwKLSAgMHhjZmNi ZDEyZiwgMHhjMWRlODQxNywgMHhhYzA3YmU2YiwgMHhjYjQ0YTFkOCwgMHg4YjliMGY1NiwgMHgw MTM5ODhjMywKLSAgMHhiMWM1MmZjYSwgMHhiNGJlMzFjZCwgMHhkODc4MjgwNiwgMHgxMmEzYTRl MiwgMHg2ZjdkZTUzMiwgMHg1OGZkN2ViNiwKLSAgMHhkMDFlZTkwMCwgMHgyNGFkZmZjMiwgMHhm NDk5MGZjNSwgMHg5NzExYWFjNSwgMHgwMDFkN2I5NSwgMHg4MmU1ZTdkMiwKLSAgMHgxMDk4NzNm NiwgMHgwMDYxMzA5NiwgMHhjMzJkOTUyMSwgMHhhZGExMjFmZiwgMHgyOTkwODQxNSwgMHg3ZmJi OTc3ZiwKLSAgMHhhZjllYjNkYiwgMHgyOWM5ZWQyYSwgMHg1Y2UyYTQ2NSwgMHhhNzMwZjMyYywg MHhkMGFhM2ZlOCwgMHg4YTVjYzA5MSwKLSAgMHhkNDllMmNlNywgMHgwY2U0NTRhOSwgMHhkNjBh Y2Q4NiwgMHgwMTVmMTkxOSwgMHg3NzA3OTEwMywgMHhkZWEwM2FmNiwKLSAgMHg3OGE4NTY1ZSwg MHhkZWUzNTZkZiwgMHgyMWYwNWNiZSwgMHg4Yjc1ZTM4NywgMHhiM2M1MDY1MSwgMHhiOGE1YzNl ZiwKLSAgMHhkOGVlYjZkMiwgMHhlNTIzYmU3NywgMHhjMjE1NDUyOSwgMHgyZjY5ZWZkZiwgMHhh ZmU2N2FmYiwgMHhmNDcwYzRiMiwKLSAgMHhmM2UwZWI1YiwgMHhkNmNjOTg3NiwgMHgzOWU0NDYw YywgMHgxZmRhODUzOCwgMHgxOTg3ODMyZiwgMHhjYTAwNzM2NywKLSAgMHhhOTkxNDRmOCwgMHgy OTZiMjk5ZSwgMHg0OTJmYzI5NSwgMHg5MjY2YmVhYiwgMHhiNTY3NmU2OSwgMHg5YmQzZGRkYSwK LSAgMHhkZjdlMDUyZiwgMHhkYjI1NzAxYywgMHgxYjVlNTFlZSwgMHhmNjUzMjRlNiwgMHg2YWZj ZTM2YywgMHgwMzE2Y2MwNCwKLSAgMHg4NjQ0MjEzZSwgMHhiN2RjNTlkMCwgMHg3OTY1MjkxZiwg MHhjY2Q2ZmQ0MywgMHg0MTgyMzk3OSwgMHg5MzJiY2RmNiwKLSAgMHhiNjU3YzM0ZCwgMHg0ZWRm ZDI4MiwgMHg3YWU1MjkwYywgMHgzY2I5NTM2YiwgMHg4NTFlMjBmZSwgMHg5ODMzNTU3ZSwKLSAg MHgxM2VjZjBiMCwgMHhkM2ZmYjM3MiwgMHgzZjg1YzVjMSwgMHgwYWVmN2VkMgotfTsKLQotLyog RW5jcnlwdC9kZWNyeXB0IG9uZSA2NC1iaXQgYmxvY2sgb2YgZGF0YSAqLwotCi12b2lkCi1ja19j YXN0X2VjYl9lbmNyeXB0KG91dCwgaW4sIHNjaGVkLCBtb2RlKQotICAgIHVpbnQ4cCBvdXQ7Ci0g ICAgdWludDhwIGluOwotICAgIENhc3RLZXlTY2hlZCAqIHNjaGVkOwotICAgIGludCBtb2RlOyAg ICAgICAgICAgLyogemVybyBtZWFucyBlbmNyeXB0ICovCi17Ci0gICAgdWludDMyIHRbMl07Ci0K LSNpZmRlZiBMSVRUTEVfRU5ESUFOCi0gICAgdFswXSA9IChpblswXSA8PCAyNCkgfCAoaW5bMV0g PDwgMTYpIHwgKGluWzJdIDw8IDgpIHwgaW5bM107Ci0gICAgdFsxXSA9IChpbls0XSA8PCAyNCkg fCAoaW5bNV0gPDwgMTYpIHwgKGluWzZdIDw8IDgpIHwgaW5bN107Ci0jZWxzZQotICAgIHRbMF0g PSAqKHVpbnQzMnApIGluOwotICAgIHRbMV0gPSAqKHVpbnQzMnApIChpbiArIDQpOwotI2VuZGlm Ci0KLSAgICBja19jYXN0X2VjYl9jcnlwdCh0LCBzY2hlZCwgbW9kZSk7Ci0KLSNpZmRlZiBMSVRU TEVfRU5ESUFOCi0gICAgb3V0WzBdID0gKHRbMF0gPj4gMjQpICYgMHhmZjsKLSAgICBvdXRbMV0g PSAodFswXSA+PiAxNikgJiAweGZmOwotICAgIG91dFsyXSA9ICh0WzBdID4+IDgpICYgMHhmZjsK LSAgICBvdXRbM10gPSB0WzBdICYgMHhmZjsKLSAgICBvdXRbNF0gPSAodFsxXSA+PiAyNCkgJiAw eGZmOwotICAgIG91dFs1XSA9ICh0WzFdID4+IDE2KSAmIDB4ZmY7Ci0gICAgb3V0WzZdID0gKHRb MV0gPj4gOCkgJiAweGZmOwotICAgIG91dFs3XSA9IHRbMV0gJiAweGZmOwotI2Vsc2UKLSAgICAq KHVpbnQzMnApIG91dCA9IHRbMF07Ci0gICAgKih1aW50MzJwKSAob3V0ICsgNCkgPSB0WzFdOwot I2VuZGlmCi19Ci0KLXZvaWQKLWNrX2Nhc3RfZWNiX2NyeXB0KGRhdGEsIHNjaGVkLCBtb2RlKQot ICAgIHVpbnQzMnAgZGF0YTsKLSAgICBDYXN0S2V5U2NoZWQgKiBzY2hlZDsKLSAgICBpbnQgbW9k ZTsKLXsKLSAgICByZWdpc3RlciB1aW50MzIgTCwgUiwgdGVtcDsKLSAgICByZWdpc3RlciBzdHJ1 Y3QgQ2FzdFN1YmtleVBhaXIgKiBrcDsKLSAgICByZWdpc3RlciB1aW50OHAgSWEsIEliLCBJYywg SWQ7Ci0gICAgdWludDMyIEk7Ci0KLSNpZmRlZiBMSVRUTEVfRU5ESUFOCi0gICAgSWQgPSAodWlu dDhwKSAmSTsKLSAgICBJYyA9IElkICsgMTsKLSAgICBJYiA9IEljICsgMTsKLSAgICBJYSA9IEli ICsgMTsKLSNlbHNlCi0gICAgSWEgPSAodWludDhwKSAmSTsKLSAgICBJYiA9IElhICsgMTsKLSAg ICBJYyA9IEliICsgMTsKLSAgICBJZCA9IEljICsgMTsKLSNlbmRpZgotCi0gICAgTCA9IGRhdGFb MF07Ci0gICAgUiA9IGRhdGFbMV07Ci0KLSNkZWZpbmUgdHlwZTAobGVmdCxyaWdodCkgICAgICAg XAotICAgICAgdGVtcCA9IGtwLT5LbSArIHJpZ2h0O1wKLSAgICAgIEkgPSAodGVtcCA8PCBrcC0+ S3IpIHwgKHRlbXAgPj4gKDMyIC0ga3AtPktyKSk7XAotICAgICAgbGVmdCBePSAoKFMxWypJYV0g XiBTMlsqSWJdKSAtIFMzWypJY10pICsgUzRbKklkXTsKLQotI2RlZmluZSB0eXBlMShsZWZ0LHJp Z2h0KSAgICAgICBcCi0gICAgICB0ZW1wID0ga3AtPkttIF4gcmlnaHQ7XAotICAgICAgSSA9ICh0 ZW1wIDw8IGtwLT5LcikgfCAodGVtcCA+PiAoMzIgLSBrcC0+S3IpKTtcCi0gICAgICBsZWZ0IF49 ICgoUzFbKklhXSAtIFMyWypJYl0pICsgUzNbKkljXSkgXiBTNFsqSWRdOwotCi0jZGVmaW5lIHR5 cGUyKGxlZnQscmlnaHQpICAgICAgIFwKLSAgICAgIHRlbXAgPSBrcC0+S20gLSByaWdodDtcCi0g ICAgICBJID0gKHRlbXAgPDwga3AtPktyKSB8ICh0ZW1wID4+ICgzMiAtIGtwLT5LcikpO1wKLSAg ICAgIGxlZnQgXj0gKChTMVsqSWFdICsgUzJbKkliXSkgXiBTM1sqSWNdKSAtIFM0WypJZF07Ci0K LSAgICBpZihtb2RlKSB7Ci0jaWZuZGVmIENBU1RfRVhQT1JUX0VOQ1JZUFRJT04KLSAgICAgICAg aWYoc2NoZWQtPmtzaXplID4gMTApIHsKLSAgICAgICAgICAgIGtwID0gJnNjaGVkLT5LWzE1XTsK LSAgICAgICAgICAgIHR5cGUwKEwsIFIpOyAtLWtwOwotICAgICAgICAgICAgdHlwZTIoUiwgTCk7 IC0ta3A7Ci0gICAgICAgICAgICB0eXBlMShMLCBSKTsgLS1rcDsKLSAgICAgICAgICAgIHR5cGUw KFIsIEwpOyAtLWtwOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICBr cCA9ICZzY2hlZC0+S1sxMV07Ci0gICAgICAgIHR5cGUyKEwsIFIpOyAtLWtwOwotICAgICAgICB0 eXBlMShSLCBMKTsgLS1rcDsKLSAgICAgICAgdHlwZTAoTCwgUik7IC0ta3A7Ci0gICAgICAgIHR5 cGUyKFIsIEwpOyAtLWtwOwotICAgICAgICB0eXBlMShMLCBSKTsgLS1rcDsKLSAgICAgICAgdHlw ZTAoUiwgTCk7IC0ta3A7Ci0gICAgICAgIHR5cGUyKEwsIFIpOyAtLWtwOwotICAgICAgICB0eXBl MShSLCBMKTsgLS1rcDsKLSAgICAgICAgdHlwZTAoTCwgUik7IC0ta3A7Ci0gICAgICAgIHR5cGUy KFIsIEwpOyAtLWtwOwotICAgICAgICB0eXBlMShMLCBSKTsgLS1rcDsKLSAgICAgICAgdHlwZTAo UiwgTCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBrcCA9ICZzY2hlZC0+S1swXTsKLSAg ICAgICAgdHlwZTAoTCwgUik7ICsra3A7Ci0gICAgICAgIHR5cGUxKFIsIEwpOyArK2twOwotICAg ICAgICB0eXBlMihMLCBSKTsgKytrcDsKLSAgICAgICAgdHlwZTAoUiwgTCk7ICsra3A7Ci0gICAg ICAgIHR5cGUxKEwsIFIpOyArK2twOwotICAgICAgICB0eXBlMihSLCBMKTsgKytrcDsKLSAgICAg ICAgdHlwZTAoTCwgUik7ICsra3A7Ci0gICAgICAgIHR5cGUxKFIsIEwpOyArK2twOwotICAgICAg ICB0eXBlMihMLCBSKTsgKytrcDsKLSAgICAgICAgdHlwZTAoUiwgTCk7ICsra3A7Ci0gICAgICAg IHR5cGUxKEwsIFIpOyArK2twOwotICAgICAgICB0eXBlMihSLCBMKTsgKytrcDsKLSNpZm5kZWYg Q0FTVF9FWFBPUlRfRU5DUllQVElPTgotICAgICAgICBpZihzY2hlZC0+a3NpemUgPiAxMCkgewot ICAgICAgICAgICAgdHlwZTAoTCwgUik7ICsra3A7Ci0gICAgICAgICAgICB0eXBlMShSLCBMKTsg KytrcDsKLSAgICAgICAgICAgIHR5cGUyKEwsIFIpOyArK2twOwotICAgICAgICAgICAgdHlwZTAo UiwgTCk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgIH0KLQotICAgIGRhdGFbMF0gPSBSOwotICAg IGRhdGFbMV0gPSBMOwotfQotCi0vKiBUaGUgbGFzdCBmb3VyIFMtYm94ZXMgYXJlIGZvciBrZXkg c2NoZWR1bGUgc2V0dXAgKi8KLQotc3RhdGljIHVpbnQzMiBTNVtdID0gewotICAweDdlYzkwYzA0 LCAweDJjNmU3NGI5LCAweDliMGU2NmRmLCAweGE2MzM3OTExLCAweGI4NmE3ZmZmLCAweDFkZDM1 OGY1LAotICAweDQ0ZGQ5ZDQ0LCAweDE3MzExNjdmLCAweDA4ZmJmMWZhLCAweGU3ZjUxMWNjLCAw eGQyMDUxYjAwLCAweDczNWFiYTAwLAotICAweDJhYjcyMmQ4LCAweDM4NjM4MWNiLCAweGFjZjYy NDNhLCAweDY5YmVmZDdhLCAweGU2YTJlNzdmLCAweGYwYzcyMGNkLAotICAweGM0NDk0ODE2LCAw eGNjZjVjMTgwLCAweDM4ODUxNjQwLCAweDE1YjBhODQ4LCAweGU2OGIxOGNiLCAweDRjYWFkZWZm LAotICAweDVmNDgwYTAxLCAweDA0MTJiMmFhLCAweDI1OTgxNGZjLCAweDQxZDBlZmUyLCAweDRl NDBiNDhkLCAweDI0OGViNmZiLAotICAweDhkYmExY2ZlLCAweDQxYTk5YjAyLCAweDFhNTUwYTA0 LCAweGJhOGY2NWNiLCAweDcyNTFmNGU3LCAweDk1YTUxNzI1LAotICAweGMxMDZlY2Q3LCAweDk3 YTU5ODBhLCAweGM1MzliOWFhLCAweDRkNzlmZTZhLCAweGYyZjNmNzYzLCAweDY4YWY4MDQwLAot ICAweGVkMGM5ZTU2LCAweDExYjQ5NThiLCAweGUxZWI1YTg4LCAweDg3MDllNmIwLCAweGQ3ZTA3 MTU2LCAweDRlMjlmZWE3LAotICAweDYzNjZlNTJkLCAweDAyZDFjMDAwLCAweGM0YWM4ZTA1LCAw eDkzNzdmNTcxLCAweDBjMDUzNzJhLCAweDU3ODUzNWYyLAotICAweDIyNjFiZTAyLCAweGQ2NDJh MGM5LCAweGRmMTNhMjgwLCAweDc0YjU1YmQyLCAweDY4MjE5OWMwLCAweGQ0MjFlNWVjLAotICAw eDUzZmIzY2U4LCAweGM4YWRlZGIzLCAweDI4YTg3ZmM5LCAweDNkOTU5OTgxLCAweDVjMWZmOTAw LCAweGZlMzhkMzk5LAotICAweDBjNGVmZjBiLCAweDA2MjQwN2VhLCAweGFhMmY0ZmIxLCAweDRm Yjk2OTc2LCAweDkwYzc5NTA1LCAweGIwYThhNzc0LAotICAweGVmNTVhMWZmLCAweGU1OWNhMmMy LCAweGE2YjYyZDI3LCAweGU2NmE0MjYzLCAweGRmNjUwMDFmLCAweDBlYzUwOTY2LAotICAweGRm ZGQ1NWJjLCAweDI5ZGUwNjU1LCAweDkxMWU3MzlhLCAweDE3YWY4OTc1LCAweDMyYzc5MTFjLCAw eDg5Zjg5NDY4LAotICAweDBkMDFlOTgwLCAweDUyNDc1NWY0LCAweDAzYjYzY2M5LCAweDBjYzg0 NGIyLCAweGJjZjNmMGFhLCAweDg3YWMzNmU5LAotICAweGU1M2E3NDI2LCAweDAxYjNkODJiLCAw eDFhOWU3NDQ5LCAweDY0ZWUyZDdlLCAweGNkZGJiMWRhLCAweDAxYzk0OTEwLAotICAweGI4Njhi ZjgwLCAweDBkMjZmM2ZkLCAweDkzNDJlZGU3LCAweDA0YTVjMjg0LCAweDYzNjczN2I2LCAweDUw ZjViNjE2LAotICAweGYyNDc2NmUzLCAweDhlY2EzNmMxLCAweDEzNmUwNWRiLCAweGZlZjE4Mzkx LCAweGZiODg3YTM3LCAweGQ2ZTdmN2Q0LAotICAweGM3ZmI3ZGM5LCAweDMwNjNmY2RmLCAweGI2 ZjU4OWRlLCAweGVjMjk0MWRhLCAweDI2ZTQ2Njk1LCAweGI3NTY2NDE5LAotICAweGY2NTRlZmM1 LCAweGQwOGQ1OGI3LCAweDQ4OTI1NDAxLCAweGMxYmFjYjdmLCAweGU1ZmY1NTBmLCAweGI2MDgz MDQ5LAotICAweDViYjVkMGU4LCAweDg3ZDcyZTVhLCAweGFiNmE2ZWUxLCAweDIyM2E2NmNlLCAw eGM2MmJmM2NkLCAweDllMDg4NWY5LAotICAweDY4Y2IzZTQ3LCAweDA4NmMwMTBmLCAweGEyMWRl ODIwLCAweGQxOGI2OWRlLCAweGYzZjY1Nzc3LCAweGZhMDJjM2Y2LAotICAweDQwN2VkYWMzLCAw eGNiYjNkNTUwLCAweDE3OTMwODRkLCAweGIwZDcwZWJhLCAweDBhYjM3OGQ1LCAweGQ5NTFmYjBj LAotICAweGRlZDdkYTU2LCAweDQxMjRiYmU0LCAweDk0Y2EwYjU2LCAweDBmNTc1NWQxLCAweGUw ZTFlNTZlLCAweDYxODRiNWJlLAotICAweDU4MGEyNDlmLCAweDk0Zjc0YmMwLCAweGUzMjc4ODhl LCAweDlmN2I1NTYxLCAweGMzZGMwMjgwLCAweDA1Njg3NzE1LAotICAweDY0NmM2YmQ3LCAweDQ0 OTA0ZGIzLCAweDY2YjRmMGEzLCAweGMwZjE2NDhhLCAweDY5N2VkNWFmLCAweDQ5ZTkyZmY2LAot ICAweDMwOWUzNzRmLCAweDJjYjYzNTZhLCAweDg1ODA4NTczLCAweDQ5OTFmODQwLCAweDc2ZjBh ZTAyLCAweDA4M2JlODRkLAotICAweDI4NDIxYzlhLCAweDQ0NDg5NDA2LCAweDczNmU0Y2I4LCAw eGMxMDkyOTEwLCAweDhiYzk1ZmM2LCAweDdkODY5Y2Y0LAotICAweDEzNGY2MTZmLCAweDJlNzcx MThkLCAweGIzMWIyYmUxLCAweGFhOTBiNDcyLCAweDNjYTVkNzE3LCAweDdkMTYxYmJhLAotICAw eDljYWQ5MDEwLCAweGFmNDYyYmEyLCAweDlmZTQ1OWQyLCAweDQ1ZDM0NTU5LCAweGQ5ZjJkYTEz LCAweGRiYzY1NDg3LAotICAweGYzZTRmOTRlLCAweDE3NmQ0ODZmLCAweDA5N2MxM2VhLCAweDYz MWRhNWM3LCAweDQ0NWY3MzgyLCAweDE3NTY4M2Y0LAotICAweGNkYzY2YTk3LCAweDcwYmUwMjg4 LCAweGIzY2RjZjcyLCAweDZlNWRkMmYzLCAweDIwOTM2MDc5LCAweDQ1OWI4MGE1LAotICAweGJl NjBlMmRiLCAweGE5YzIzMTAxLCAweGViYTUzMTVjLCAweDIyNGU0MmYyLCAweDFjNWMxNTcyLCAw eGY2NzIxYjJjLAotICAweDFhZDJmZmYzLCAweDhjMjU0MDRlLCAweDMyNGVkNzJmLCAweDQwNjdi N2ZkLCAweDA1MjMxMzhlLCAweDVjYTNiYzc4LAotICAweGRjMGZkNjZlLCAweDc1OTIyMjgzLCAw eDc4NGQ2YjE3LCAweDU4ZWJiMTZlLCAweDQ0MDk0Zjg1LCAweDNmNDgxZDg3LAotICAweGZjZmVh ZTdiLCAweDc3YjVmZjc2LCAweDhjMjMwMmJmLCAweGFhZjQ3NTU2LCAweDVmNDZiMDJhLCAweDJi MDkyODAxLAotICAweDNkMzhmNWY3LCAweDBjYTgxZjM2LCAweDUyYWY0YThhLCAweDY2ZDVlN2Mw LCAweGRmM2IwODc0LCAweDk1MDU1MTEwLAotICAweDFiNWFkN2E4LCAweGY2MWVkNWFkLCAweDZj ZjZlNDc5LCAweDIwNzU4MTg0LCAweGQwY2VmYTY1LCAweDg4ZjdiZTU4LAotICAweDRhMDQ2ODI2 LCAweDBmZjZmOGYzLCAweGEwOWM3ZjcwLCAweDUzNDZhYmEwLCAweDVjZTk2YzI4LCAweGUxNzZl ZGEzLAotICAweDZiYWMzMDdmLCAweDM3NjgyOWQyLCAweDg1MzYwZmE5LCAweDE3ZTNmZTJhLCAw eDI0Yjc5NzY3LCAweGY1YTk2YjIwLAotICAweGQ2Y2QyNTk1LCAweDY4ZmYxZWJmLCAweDc1NTU0 NDJjLCAweGYxOWYwNmJlLCAweGY5ZTA2NTlhLCAweGVlYjk0OTFkLAotICAweDM0MDEwNzE4LCAw eGJiMzBjYWI4LCAweGU4MjJmZTE1LCAweDg4NTcwOTgzLCAweDc1MGU2MjQ5LCAweGRhNjI3ZTU1 LAotICAweDVlNzZmZmE4LCAweGIxNTM0NTQ2LCAweDZkNDdkZTA4LCAweGVmZTllN2Q0Ci19Owot Ci1zdGF0aWMgdWludDMyIFM2W10gPSB7Ci0gIDB4ZjZmYThmOWQsIDB4MmNhYzZjZTEsIDB4NGNh MzQ4NjcsIDB4ZTIzMzdmN2MsIDB4OTVkYjA4ZTcsIDB4MDE2ODQzYjQsCi0gIDB4ZWNlZDVjYmMs IDB4MzI1NTUzYWMsIDB4YmY5ZjA5NjAsIDB4ZGZhMWUyZWQsIDB4ODNmMDU3OWQsIDB4NjNlZDg2 YjksCi0gIDB4MWFiNmE2YjgsIDB4ZGU1ZWJlMzksIDB4ZjM4ZmY3MzIsIDB4ODk4OWIxMzgsIDB4 MzNmMTQ5NjEsIDB4YzAxOTM3YmQsCi0gIDB4ZjUwNmM2ZGEsIDB4ZTQ2MjVlN2UsIDB4YTMwOGVh OTksIDB4NGUyM2UzM2MsIDB4NzljYmQ3Y2MsIDB4NDhhMTQzNjcsCi0gIDB4YTMxNDk2MTksIDB4 ZmVjOTRiZDUsIDB4YTExNDE3NGEsIDB4ZWFhMDE4NjYsIDB4YTA4NGRiMmQsIDB4MDlhODQ4NmYs Ci0gIDB4YTg4ODYxNGEsIDB4MjkwMGFmOTgsIDB4MDE2NjU5OTEsIDB4ZTE5OTI4NjMsIDB4Yzhm MzBjNjAsIDB4MmU3OGVmM2MsCi0gIDB4ZDBkNTE5MzIsIDB4Y2YwZmVjMTQsIDB4ZjdjYTA3ZDIs IDB4ZDBhODIwNzIsIDB4ZmQ0MTE5N2UsIDB4OTMwNWE2YjAsCi0gIDB4ZTg2YmUzZGEsIDB4NzRi ZWQzY2QsIDB4MzcyZGE1M2MsIDB4NGM3ZjQ0NDgsIDB4ZGFiNWQ0NDAsIDB4NmRiYTBlYzMsCi0g IDB4MDgzOTE5YTcsIDB4OWZiYWVlZDksIDB4NDlkYmNmYjAsIDB4NGU2NzBjNTMsIDB4NWMzZDlj MDEsIDB4NjRiZGI5NDEsCi0gIDB4MmMwZTYzNmEsIDB4YmE3ZGQ5Y2QsIDB4ZWE2ZjczODgsIDB4 ZTcwYmM3NjIsIDB4MzVmMjlhZGIsIDB4NWM0Y2RkOGQsCi0gIDB4ZjBkNDhkOGMsIDB4Yjg4MTUz ZTIsIDB4MDhhMTk4NjYsIDB4MWFlMmVhYzgsIDB4Mjg0Y2FmODksIDB4YWE5MjgyMjMsCi0gIDB4 OTMzNGJlNTMsIDB4M2IzYTIxYmYsIDB4MTY0MzRiZTMsIDB4OWFlYTM5MDYsIDB4ZWZlOGMzNmUs IDB4Zjg5MGNkZDksCi0gIDB4ODAyMjZkYWUsIDB4YzM0MGE0YTMsIDB4ZGY3ZTljMDksIDB4YTY5 NGE4MDcsIDB4NWI3YzVlY2MsIDB4MjIxZGIzYTYsCi0gIDB4OWE2OWEwMmYsIDB4Njg4MThhNTQs IDB4Y2ViMjI5NmYsIDB4NTNjMDg0M2EsIDB4ZmU4OTM2NTUsIDB4MjViZmU2OGEsCi0gIDB4YjQ2 MjhhYmMsIDB4Y2YyMjJlYmYsIDB4MjVhYzZmNDgsIDB4YTlhOTkzODcsIDB4NTNiZGRiNjUsIDB4 ZTc2ZmZiZTcsCi0gIDB4ZTk2N2ZkNzgsIDB4MGJhOTM1NjMsIDB4OGUzNDJiYzEsIDB4ZThhMTFi ZTksIDB4NDk4MDc0MGQsIDB4YzgwODdkZmMsCi0gIDB4OGRlNGJmOTksIDB4YTExMTAxYTAsIDB4 N2ZkMzc5NzUsIDB4ZGE1YTI2YzAsIDB4ZTgxZjk5NGYsIDB4OTUyOGNkODksCi0gIDB4ZmQzMzlm ZWQsIDB4Yjg3ODM0YmYsIDB4NWYwNDQ1NmQsIDB4MjIyNTg2OTgsIDB4YzljNGM4M2IsIDB4MmRj MTU2YmUsCi0gIDB4NGY2MjhkYWEsIDB4NTdmNTVlYzUsIDB4ZTIyMjBhYmUsIDB4ZDI5MTZlYmYs IDB4NGVjNzViOTUsIDB4MjRmMmMzYzAsCi0gIDB4NDJkMTVkOTksIDB4Y2QwZDdmYTAsIDB4N2I2 ZTI3ZmYsIDB4YThkYzhhZjAsIDB4NzM0NWMxMDYsIDB4ZjQxZTIzMmYsCi0gIDB4MzUxNjIzODYs IDB4ZTZlYTg5MjYsIDB4MzMzM2IwOTQsIDB4MTU3ZWM2ZjIsIDB4MzcyYjc0YWYsIDB4NjkyNTcz ZTQsCi0gIDB4ZTlhOWQ4NDgsIDB4ZjMxNjAyODksIDB4M2E2MmVmMWQsIDB4YTc4N2UyMzgsIDB4 ZjNhNWY2NzYsIDB4NzQzNjQ4NTMsCi0gIDB4MjA5NTEwNjMsIDB4NDU3NjY5OGQsIDB4YjZmYWQ0 MDcsIDB4NTkyYWY5NTAsIDB4MzZmNzM1MjMsIDB4NGNmYjZlODcsCi0gIDB4N2RhNGNlYzAsIDB4 NmMxNTJkYWEsIDB4Y2IwMzk2YTgsIDB4YzUwZGZlNWQsIDB4ZmNkNzA3YWIsIDB4MDkyMWM0MmYs Ci0gIDB4ODlkZmYwYmIsIDB4NWZlMmJlNzgsIDB4NDQ4ZjRmMzMsIDB4NzU0NjEzYzksIDB4MmIw NWQwOGQsIDB4NDhiOWQ1ODUsCi0gIDB4ZGMwNDk0NDEsIDB4YzgwOThmOWIsIDB4N2RlZGU3ODYs IDB4YzM5YTMzNzMsIDB4NDI0MTAwMDUsIDB4NmEwOTE3NTEsCi0gIDB4MGVmM2M4YTYsIDB4ODkw MDcyZDYsIDB4MjgyMDc2ODIsIDB4YTlhOWY3YmUsIDB4YmYzMjY3OWQsIDB4ZDQ1YjViNzUsCi0g IDB4YjM1M2ZkMDAsIDB4Y2JiMGUzNTgsIDB4ODMwZjIyMGEsIDB4MWY4ZmIyMTQsIDB4ZDM3MmNm MDgsIDB4Y2MzYzRhMTMsCi0gIDB4OGNmNjMxNjYsIDB4MDYxYzg3YmUsIDB4ODhjOThmODgsIDB4 NjA2MmUzOTcsIDB4NDdjZjhlN2EsIDB4YjZjODUyODMsCi0gIDB4M2NjMmFjZmIsIDB4M2ZjMDY5 NzYsIDB4NGU4ZjAyNTIsIDB4NjRkODMxNGQsIDB4ZGEzODcwZTMsIDB4MWU2NjU0NTksCi0gIDB4 YzEwOTA4ZjAsIDB4NTEzMDIxYTUsIDB4NmM1YjY4YjcsIDB4ODIyZjhhYTAsIDB4MzAwN2NkM2Us IDB4NzQ3MTllZWYsCi0gIDB4ZGM4NzI2ODEsIDB4MDczMzQwZDQsIDB4N2U0MzJmZDksIDB4MGM1 ZWMyNDEsIDB4ODgwOTI4NmMsIDB4ZjU5MmQ4OTEsCi0gIDB4MDhhOTMwZjYsIDB4OTU3ZWYzMDUs IDB4YjdmYmZmYmQsIDB4YzI2NmU5NmYsIDB4NmZlNGFjOTgsIDB4YjE3M2VjYzAsCi0gIDB4YmM2 MGI0MmEsIDB4OTUzNDk4ZGEsIDB4ZmJhMWFlMTIsIDB4MmQ0YmQ3MzYsIDB4MGYyNWZhYWIsIDB4 YTRmM2ZjZWIsCi0gIDB4ZTI5NjkxMjMsIDB4MjU3ZjBjM2QsIDB4OTM0OGFmNDksIDB4MzYxNDAw YmMsIDB4ZTg4MTZmNGEsIDB4MzgxNGYyMDAsCi0gIDB4YTNmOTQwNDMsIDB4OWM3YTU0YzIsIDB4 YmM3MDRmNTcsIDB4ZGE0MWU3ZjksIDB4YzI1YWQzM2EsIDB4NTRmNGEwODQsCi0gIDB4YjE3ZjU1 MDUsIDB4NTkzNTdjYmUsIDB4ZWRiZDE1YzgsIDB4N2Y5N2M1YWIsIDB4YmE1YWM3YjUsIDB4YjZm NmRlYWYsCi0gIDB4M2E0NzljM2EsIDB4NTMwMmRhMjUsIDB4NjUzZDdlNmEsIDB4NTQyNjhkNDks IDB4NTFhNDc3ZWEsIDB4NTAxN2Q1NWIsCi0gIDB4ZDdkMjVkODgsIDB4NDQxMzZjNzYsIDB4MDQw NGE4YzgsIDB4YjhlNWExMjEsIDB4YjgxYTkyOGEsIDB4NjBlZDU4NjksCi0gIDB4OTdjNTViOTYs IDB4ZWFlYzk5MWIsIDB4Mjk5MzU5MTMsIDB4MDFmZGI3ZjEsIDB4MDg4ZThkZmEsIDB4OWFiNmY2 ZjUsCi0gIDB4M2I0Y2JmOWYsIDB4NGE1ZGUzYWIsIDB4ZTYwNTFkMzUsIDB4YTBlMWQ4NTUsIDB4 ZDM2YjRjZjEsIDB4ZjU0NGVkZWIsCi0gIDB4YjBlOTM1MjQsIDB4YmViYjhmYmQsIDB4YTJkNzYy Y2YsIDB4NDljOTJmNTQsIDB4MzhiNWYzMzEsIDB4NzEyOGE0NTQsCi0gIDB4NDgzOTI5MDUsIDB4 YTY1YjFkYjgsIDB4ODUxYzk3YmQsIDB4ZDY3NWNmMmYKLX07Ci0KLXN0YXRpYyB1aW50MzIgUzdb XSA9IHsKLSAgMHg4NWUwNDAxOSwgMHgzMzJiZjU2NywgMHg2NjJkYmZmZiwgMHhjZmM2NTY5Mywg MHgyYThkN2Y2ZiwgMHhhYjliYzkxMiwKLSAgMHhkZTYwMDhhMSwgMHgyMDI4ZGExZiwgMHgwMjI3 YmNlNywgMHg0ZDY0MjkxNiwgMHgxOGZhYzMwMCwgMHg1MGYxOGI4MiwKLSAgMHgyY2IyY2IxMSwg MHhiMjMyZTc1YywgMHg0YjM2OTVmMiwgMHhiMjg3MDdkZSwgMHhhMDVmYmNmNiwgMHhjZDQxODFl OSwKLSAgMHhlMTUwMjEwYywgMHhlMjRlZjFiZCwgMHhiMTY4YzM4MSwgMHhmZGU0ZTc4OSwgMHg1 Yzc5YjBkOCwgMHgxZThiZmQ0MywKLSAgMHg0ZDQ5NTAwMSwgMHgzOGJlNDM0MSwgMHg5MTNjZWUx ZCwgMHg5MmE3OWMzZiwgMHgwODk3NjZiZSwgMHhiYWVlYWRmNCwKLSAgMHgxMjg2YmVjZiwgMHhi NmVhY2IxOSwgMHgyNjYwYzIwMCwgMHg3NTY1YmRlNCwgMHg2NDI0MWY3YSwgMHg4MjQ4ZGNhOSwK LSAgMHhjM2IzYWQ2NiwgMHgyODEzNjA4NiwgMHgwYmQ4ZGZhOCwgMHgzNTZkMWNmMiwgMHgxMDc3 ODliZSwgMHhiM2IyZTljZSwKLSAgMHgwNTAyYWE4ZiwgMHgwYmMwMzUxZSwgMHgxNjZiZjUyYSwg MHhlYjEyZmY4MiwgMHhlMzQ4NjkxMSwgMHhkMzRkNzUxNiwKLSAgMHg0ZTdiM2FmZiwgMHg1ZjQz NjcxYiwgMHg5Y2Y2ZTAzNywgMHg0OTgxYWM4MywgMHgzMzQyNjZjZSwgMHg4YzkzNDFiNywKLSAg MHhkMGQ4NTRjMCwgMHhjYjNhNmM4OCwgMHg0N2JjMjgyOSwgMHg0NzI1YmEzNywgMHhhNjZhZDIy YiwgMHg3YWQ2MWYxZSwKLSAgMHgwYzVjYmFmYSwgMHg0NDM3ZjEwNywgMHhiNmU3OTk2MiwgMHg0 MmQyZDgxNiwgMHgwYTk2MTI4OCwgMHhlMWE1YzA2ZSwKLSAgMHgxMzc0OWU2NywgMHg3MmZjMDgx YSwgMHhiMWQxMzlmNywgMHhmOTU4Mzc0NSwgMHhjZjE5ZGY1OCwgMHhiZWMzZjc1NiwKLSAgMHhj MDZlYmEzMCwgMHgwNzIxMWIyNCwgMHg0NWMyODgyOSwgMHhjOTVlMzE3ZiwgMHhiYzhlYzUxMSwg MHgzOGJjNDZlOSwKLSAgMHhjNmU2ZmExNCwgMHhiYWU4NTg0YSwgMHhhZDRlYmM0NiwgMHg0Njhm NTA4YiwgMHg3ODI5NDM1ZiwgMHhmMTI0MTgzYiwKLSAgMHg4MjFkYmE5ZiwgMHhhZmY2MGZmNCwg MHhlYTJjNGU2ZCwgMHgxNmUzOTI2NCwgMHg5MjU0NGE4YiwgMHgwMDliNGZjMywKLSAgMHhhYmE2 OGNlZCwgMHg5YWM5NmY3OCwgMHgwNmE1Yjc5YSwgMHhiMjg1NmU2ZSwgMHgxYWVjM2NhOSwgMHhi ZTgzODY4OCwKLSAgMHgwZTA4MDRlOSwgMHg1NWYxYmU1NiwgMHhlN2U1MzYzYiwgMHhiM2ExZjI1 ZCwgMHhmN2RlYmI4NSwgMHg2MWZlMDMzYywKLSAgMHgxNjc0NjIzMywgMHgzYzAzNGMyOCwgMHhk YTZkMGM3NCwgMHg3OWFhYzU2YywgMHgzY2U0ZTFhZCwgMHg1MWYwYzgwMiwKLSAgMHg5OGY4ZjM1 YSwgMHgxNjI2YTQ5ZiwgMHhlZWQ4MmIyOSwgMHgxZDM4MmZlMywgMHgwYzRmYjk5YSwgMHhiYjMy NTc3OCwKLSAgMHgzZWM2ZDk3YiwgMHg2ZTc3YTZhOSwgMHhjYjY1OGI1YywgMHhkNDUyMzBjNywg MHgyYmQxNDA4YiwgMHg2MGMwM2ViNywKLSAgMHhiOTA2OGQ3OCwgMHhhMzM3NTRmNCwgMHhmNDMw Yzg3ZCwgMHhjOGE3MTMwMiwgMHhiOTZkOGMzMiwgMHhlYmQ0ZTdiZSwKLSAgMHhiZThiOWQyZCwg MHg3OTc5ZmIwNiwgMHhlNzIyNTMwOCwgMHg4Yjc1Y2Y3NywgMHgxMWVmOGRhNCwgMHhlMDgzYzg1 OCwKLSAgMHg4ZDZiNzg2ZiwgMHg1YTYzMTdhNiwgMHhmYTVjZjdhMCwgMHg1ZGRhMDAzMywgMHhm MjhlYmZiMCwgMHhmNWI5YzMxMCwKLSAgMHhhMGVhYzI4MCwgMHgwOGI5NzY3YSwgMHhhM2Q5ZDJi MCwgMHg3OWQzNDIxNywgMHgwMjFhNzE4ZCwgMHg5YWM2MzM2YSwKLSAgMHgyNzExZmQ2MCwgMHg0 MzgwNTBlMywgMHgwNjk5MDhhOCwgMHgzZDdmZWRjNCwgMHg4MjZkMmJlZiwgMHg0ZWViODQ3NiwK LSAgMHg0ODhkY2YyNSwgMHgzNmM5ZDU2NiwgMHgyOGU3NGU0MSwgMHhjMjYxMGFjYSwgMHgzZDQ5 YTljZiwgMHhiYWUzYjlkZiwKLSAgMHhiNjVmOGRlNiwgMHg5MmFlYWY2NCwgMHgzYWM3ZDVlNiwg MHg5ZWE4MDUwOSwgMHhmMjJiMDE3ZCwgMHhhNDE3M2Y3MCwKLSAgMHhkZDFlMTZjMywgMHgxNWUw ZDdmOSwgMHg1MGIxYjg4NywgMHgyYjlmNGZkNSwgMHg2MjVhYmE4MiwgMHg2YTAxNzk2MiwKLSAg MHgyZWMwMWI5YywgMHgxNTQ4OGFhOSwgMHhkNzE2ZTc0MCwgMHg0MDA1NWEyYywgMHg5M2QyOWEy MiwgMHhlMzJkYmY5YSwKLSAgMHgwNTg3NDViOSwgMHgzNDUzZGMxZSwgMHhkNjk5Mjk2ZSwgMHg0 OTZjZmY2ZiwgMHgxYzlmNDk4NiwgMHhkZmUyZWQwNywKLSAgMHhiODcyNDJkMSwgMHgxOWRlN2Vh ZSwgMHgwNTNlNTYxYSwgMHgxNWFkNmY4YywgMHg2NjYyNmMxYywgMHg3MTU0YzI0YywKLSAgMHhl YTA4MmIyYSwgMHg5M2ViMjkzOSwgMHgxN2RjYjBmMCwgMHg1OGQ0ZjJhZSwgMHg5ZWEyOTRmYiwg MHg1MmNmNTY0YywKLSAgMHg5ODgzZmU2NiwgMHgyZWM0MDU4MSwgMHg3NjM5NTNjMywgMHgwMWQ2 NjkyZSwgMHhkM2EwYzEwOCwgMHhhMWU3MTYwZSwKLSAgMHhlNGYyZGZhNiwgMHg2OTNlZDI4NSwg MHg3NDkwNDY5OCwgMHg0YzJiMGVkZCwgMHg0Zjc1NzY1NiwgMHg1ZDM5MzM3OCwKLSAgMHhhMTMy MjM0ZiwgMHgzZDMyMWM1ZCwgMHhjM2Y1ZTE5NCwgMHg0YjI2OTMwMSwgMHhjNzlmMDIyZiwgMHgz Yzk5N2U3ZSwKLSAgMHg1ZTRmOTUwNCwgMHgzZmZhZmJiZCwgMHg3NmY3YWQwZSwgMHgyOTY2OTNm NCwgMHgzZDFmY2U2ZiwgMHhjNjFlNDViZSwKLSAgMHhkM2I1YWIzNCwgMHhmNzJiZjliNywgMHgx YjA0MzRjMCwgMHg0ZTcyYjU2NywgMHg1NTkyYTMzZCwgMHhiNTIyOTMwMSwKLSAgMHhjZmQyYTg3 ZiwgMHg2MGFlYjc2NywgMHgxODE0Mzg2YiwgMHgzMGJjYzMzZCwgMHgzOGEwYzA3ZCwgMHhmZDE2 MDZmMiwKLSAgMHhjMzYzNTE5YiwgMHg1ODlkZDM5MCwgMHg1NDc5ZjhlNiwgMHgxY2I4ZDY0Nywg MHg5N2ZkNjFhOSwgMHhlYTc3NTlmNCwKLSAgMHgyZDU3NTM5ZCwgMHg1NjlhNThjZiwgMHhlODRl NjNhZCwgMHg0NjJlMWI3OCwgMHg2NTgwZjg3ZSwgMHhmMzgxNzkxNCwKLSAgMHg5MWRhNTVmNCwg MHg0MGEyMzBmMywgMHhkMTk4OGYzNSwgMHhiNmUzMThkMiwgMHgzZmZhNTBiYywgMHgzZDQwZjAy MSwKLSAgMHhjM2MwYmRhZSwgMHg0OTU4YzI0YywgMHg1MThmMzZiMiwgMHg4NGIxZDM3MCwgMHgw ZmVkY2U4MywgMHg4NzhkZGFkYSwKLSAgMHhmMmEyNzljNywgMHg5NGUwMWJlOCwgMHg5MDcxNmY0 YiwgMHg5NTRiOGFhMwotfTsKLQotc3RhdGljIHVpbnQzMiBTOFtdID0gewotICAweGUyMTYzMDBk LCAweGJiZGRmZmZjLCAweGE3ZWJkYWJkLCAweDM1NjQ4MDk1LCAweDc3ODlmOGI3LCAweGU2YzEx MjFiLAotICAweDBlMjQxNjAwLCAweDA1MmNlOGI1LCAweDExYTljZmIwLCAweGU1OTUyZjExLCAw eGVjZTc5OTBhLCAweDkzODZkMTc0LAotICAweDJhNDI5MzFjLCAweDc2ZTM4MTExLCAweGIxMmRl ZjNhLCAweDM3ZGRkZGZjLCAweGRlOWFkZWIxLCAweDBhMGNjMzJjLAotICAweGJlMTk3MDI5LCAw eDg0YTAwOTQwLCAweGJiMjQzYTBmLCAweGI0ZDEzN2NmLCAweGI0NGU3OWYwLCAweDA0OWVlZGZk LAotICAweDBiMTVhMTVkLCAweDQ4MGQzMTY4LCAweDhiYmJkZTVhLCAweDY2OWRlZDQyLCAweGM3 ZWNlODMxLCAweDNmOGY5NWU3LAotICAweDcyZGYxOTFiLCAweDc1ODAzMzBkLCAweDk0MDc0MjUx LCAweDVjN2RjZGZhLCAweGFiYmU2ZDYzLCAweGFhNDAyMTY0LAotICAweGIzMDFkNDBhLCAweDAy ZTdkMWNhLCAweDUzNTcxZGFlLCAweDdhMzE4MmEyLCAweDEyYThkZGVjLCAweGZkYWEzMzVkLAot ICAweDE3NmY0M2U4LCAweDcxZmI0NmQ0LCAweDM4MTI5MDIyLCAweGNlOTQ5YWQ0LCAweGI4NDc2 OWFkLCAweDk2NWJkODYyLAotICAweDgyZjNkMDU1LCAweDY2ZmI5NzY3LCAweDE1YjgwYjRlLCAw eDFkNWI0N2EwLCAweDRjZmRlMDZmLCAweGMyOGVjNGI4LAotICAweDU3ZTg3MjZlLCAweDY0N2E3 OGZjLCAweDk5ODY1ZDQ0LCAweDYwOGJkNTkzLCAweDZjMjAwZTAzLCAweDM5ZGM1ZmY2LAotICAw eDVkMGIwMGEzLCAweGFlNjNhZmYyLCAweDdlOGJkNjMyLCAweDcwMTA4YzBjLCAweGJiZDM1MDQ5 LCAweDI5OThkZjA0LAotICAweDk4MGNmNDJhLCAweDliNmRmNDkxLCAweDllN2VkZDUzLCAweDA2 OTE4NTQ4LCAweDU4Y2I3ZTA3LCAweDNiNzRlZjJlLAotICAweDUyMmZmZmIxLCAweGQyNDcwOGNj LCAweDFjN2UyN2NkLCAweGE0ZWIyMTViLCAweDNjZjFkMmUyLCAweDE5YjQ3YTM4LAotICAweDQy NGY3NjE4LCAweDM1ODU2MDM5LCAweDlkMTdkZWU3LCAweDI3ZWIzNWU2LCAweGM5YWZmNjdiLCAw eDM2YmFmNWI4LAotICAweDA5YzQ2N2NkLCAweGMxODkxMGIxLCAweGUxMWRiZjdiLCAweDA2Y2Qx YWY4LCAweDcxNzBjNjA4LCAweDJkNWUzMzU0LAotICAweGQ0ZGU0OTVhLCAweDY0YzZkMDA2LCAw eGJjYzBjNjJjLCAweDNkZDAwZGIzLCAweDcwOGY4ZjM0LCAweDc3ZDUxYjQyLAotICAweDI2NGY2 MjBmLCAweDI0YjhkMmJmLCAweDE1YzFiNzllLCAweDQ2YTUyNTY0LCAweGY4ZDdlNTRlLCAweDNl Mzc4MTYwLAotICAweDc4OTVjZGE1LCAweDg1OWMxNWE1LCAweGU2NDU5Nzg4LCAweGMzN2JjNzVm LCAweGRiMDdiYTBjLCAweDA2NzZhM2FiLAotICAweDdmMjI5YjFlLCAweDMxODQyZTdiLCAweDI0 MjU5ZmQ3LCAweGY4YmVmNDcyLCAweDgzNWZmY2I4LCAweDZkZjRjMWYyLAotICAweDk2ZjViMTk1 LCAweGZkMGFmMGZjLCAweGIwZmUxMzRjLCAweGUyNTA2ZDNkLCAweDRmOWIxMmVhLCAweGYyMTVm MjI1LAotICAweGEyMjM3MzZmLCAweDlmYjRjNDI4LCAweDI1ZDA0OTc5LCAweDM0YzcxM2Y4LCAw eGM0NjE4MTg3LCAweGVhN2E2ZTk4LAotICAweDdjZDE2ZWZjLCAweDE0MzY4NzZjLCAweGYxNTQ0 MTA3LCAweGJlZGVlZTE0LCAweDU2ZTlhZjI3LCAweGEwNGFhNDQxLAotICAweDNjZjdjODk5LCAw eDkyZWNiYWU2LCAweGRkNjcwMTZkLCAweDE1MTY4MmViLCAweGE4NDJlZWRmLCAweGZkYmE2MGI0 LAotICAweGYxOTA3Yjc1LCAweDIwZTMwMzBmLCAweDI0ZDhjMjllLCAweGUxMzk2NzNiLCAweGVm YTYzZmI4LCAweDcxODczMDU0LAotICAweGI2ZjJjZjNiLCAweDlmMzI2NDQyLCAweGNiMTVhNGNj LCAweGIwMWE0NTA0LCAweGYxZTQ3ZDhkLCAweDg0NGExYmU1LAotICAweGJhZTdkZmRjLCAweDQy Y2JkYTcwLCAweGNkN2RhZTBhLCAweDU3ZTg1YjdhLCAweGQ1M2Y1YWY2LCAweDIwY2Y0ZDhjLAot ICAweGNlYTRkNDI4LCAweDc5ZDEzMGE0LCAweDM0ODZlYmZiLCAweDMzZDNjZGRjLCAweDc3ODUz YjUzLCAweDM3ZWZmY2I1LAotICAweGM1MDY4Nzc4LCAweGU1ODBiM2U2LCAweDRlNjhiOGY0LCAw eGM1YzhiMzdlLCAweDBkODA5ZWEyLCAweDM5OGZlYjdjLAotICAweDEzMmE0Zjk0LCAweDQzYjc5 NTBlLCAweDJmZWU3ZDFjLCAweDIyMzYxM2JkLCAweGRkMDZjYWEyLCAweDM3ZGY5MzJiLAotICAw eGM0MjQ4Mjg5LCAweGFjZjNlYmMzLCAweDU3MTVmNmI3LCAweGVmMzQ3OGRkLCAweGYyNjc2MTZm LCAweGMxNDhjYmU0LAotICAweDkwNTI4MTVlLCAweDVlNDEwZmFiLCAweGI0OGEyNDY1LCAweDJl ZGE3ZmE0LCAweGU4N2I0MGU0LCAweGU5OGVhMDg0LAotICAweDU4ODllOWUxLCAweGVmZDM5MGZj LCAweGRkMDdkMzViLCAweGRiNDg1Njk0LCAweDM4ZDdlNWIyLCAweDU3NzIwMTAxLAotICAweDcz MGVkZWJjLCAweDViNjQzMTEzLCAweDk0OTE3ZTRmLCAweDUwM2MyZmJhLCAweDY0NmYxMjgyLCAw eDc1MjNkMjRhLAotICAweGUwNzc5Njk1LCAweGY5YzE3YThmLCAweDdhNWIyMTIxLCAweGQxODdi ODk2LCAweDI5MjYzYTRkLCAweGJhNTEwY2RmLAotICAweDgxZjQ3YzlmLCAweGFkMTE2M2VkLCAw eGVhN2I1OTY1LCAweDFhMDA3MjZlLCAweDExNDAzMDkyLCAweDAwZGE2ZDc3LAotICAweDRhMGNk ZDYxLCAweGFkMWY0NjAzLCAweDYwNWJkZmIwLCAweDllZWRjMzY0LCAweDIyZWJlNmE4LCAweGNl ZTdkMjhhLAotICAweGEwZTczNmEwLCAweDU1NjRhNmI5LCAweDEwODUzMjA5LCAweGM3ZWI4ZjM3 LCAweDJkZTcwNWNhLCAweDg5NTE1NzBmLAotICAweGRmMDk4MjJiLCAweGJkNjkxYTZjLCAweGFh MTJlNGYyLCAweDg3NDUxYzBmLCAweGUwZjZhMjdhLCAweDNhZGE0ODE5LAotICAweDRjZjE3NjRm LCAweDBkNzcxYzJiLCAweDY3Y2RiMTU2LCAweDM1MGQ4Mzg0LCAweDU5MzhmYTBmLCAweDQyMzk5 ZWYzLAotICAweDM2OTk3YjA3LCAweDBlODQwOTNkLCAweDRhYTkzZTYxLCAweDgzNjBkODdiLCAw eDFmYTk4YjBjLCAweDExNDkzODJjLAotICAweGU5NzYyNWE1LCAweDA2MTRkMWI3LCAweDBlMjUy NDRiLCAweDBjNzY4MzQ3LCAweDU4OWU4ZDgyLCAweDBkMjA1OWQxLAotICAweGE0NjZiYjFlLCAw eGY4ZGEwYTgyLCAweDA0ZjE5MTMwLCAweGJhNmU0ZWMwLCAweDk5MjY1MTY0LCAweDFlZTcyMzBk LAotICAweDUwYjJhZDgwLCAweGVhZWU2ODAxLCAweDhkYjJhMjgzLCAweGVhOGJmNTllCi19Owot Ci0vKiBJbml0aWFsaXplIGEga2V5IHNjaGVkdWxlIGZyb20gYSAxMjgtYml0IGtleSAqLwotCi1z dGF0aWMgdm9pZAotY2FzdF9rZXlfc2NoZWQoc2NoZWQsIGtleSkKLSAgICAgQ2FzdEtleVNjaGVk ICogc2NoZWQ7Ci0gICAgIHVpbnQ4cCBrZXk7Ci17Ci0gICAgdWludDhwIHgwLCB4MSwgeDIsIHgz LCB4NCwgeDUsIHg2LCB4NywgeDgsIHg5LCB4QSwgeEIsIHhDLCB4RCwgeEUsIHhGOwotICAgIHVp bnQ4cCB6MCwgejEsIHoyLCB6MywgejQsIHo1LCB6NiwgejcsIHo4LCB6OSwgekEsIHpCLCB6Qywg ekQsIHpFLCB6RjsKLSAgICB1aW50MzIgWDAzLCBYNDcsIFg4QiwgWENGLCBaMDMsIFo0NywgWjhC LCBaQ0Y7Ci0KLSNpZmRlZiBMSVRUTEVfRU5ESUFOCi0gICAgeDMgPSAodWludDhwKSAmWDAzOyAg eDIgPSB4MyArIDE7ICB4MSA9IHgyICsgMTsgIHgwID0geDEgKyAxOwotICAgIHg3ID0gKHVpbnQ4 cCkgJlg0NzsgIHg2ID0geDcgKyAxOyAgeDUgPSB4NiArIDE7ICB4NCA9IHg1ICsgMTsKLSAgICB4 QiA9ICh1aW50OHApICZYOEI7ICB4QSA9IHhCICsgMTsgIHg5ID0geEEgKyAxOyAgeDggPSB4OSAr IDE7Ci0gICAgeEYgPSAodWludDhwKSAmWENGOyAgeEUgPSB4RiArIDE7ICB4RCA9IHhFICsgMTsg IHhDID0geEQgKyAxOwotICAgIHozID0gKHVpbnQ4cCkgJlowMzsgIHoyID0gejMgKyAxOyAgejEg PSB6MiArIDE7ICB6MCA9IHoxICsgMTsKLSAgICB6NyA9ICh1aW50OHApICZaNDc7ICB6NiA9IHo3 ICsgMTsgIHo1ID0gejYgKyAxOyAgejQgPSB6NSArIDE7Ci0gICAgekIgPSAodWludDhwKSAmWjhC OyAgekEgPSB6QiArIDE7ICB6OSA9IHpBICsgMTsgIHo4ID0gejkgKyAxOwotICAgIHpGID0gKHVp bnQ4cCkgJlpDRjsgIHpFID0gekYgKyAxOyAgekQgPSB6RSArIDE7ICB6QyA9IHpEICsgMTsKLSNl bHNlCi0gICAgeDAgPSAodWludDhwKSAmWDAzOyAgeDEgPSB4MCArIDE7ICB4MiA9IHgxICsgMTsg IHgzID0geDIgKyAxOwotICAgIHg0ID0gKHVpbnQ4cCkgJlg0NzsgIHg1ID0geDQgKyAxOyAgeDYg PSB4NSArIDE7ICB4NyA9IHg2ICsgMTsKLSAgICB4OCA9ICh1aW50OHApICZYOEI7ICB4OSA9IHg4 ICsgMTsgIHhBID0geDkgKyAxOyAgeEIgPSB4QSArIDE7Ci0gICAgeEMgPSAodWludDhwKSAmWENG OyAgeEQgPSB4QyArIDE7ICB4RSA9IHhEICsgMTsgIHhGID0geEUgKyAxOwotICAgIHowID0gKHVp bnQ4cCkgJlowMzsgIHoxID0gejAgKyAxOyAgejIgPSB6MSArIDE7ICB6MyA9IHoyICsgMTsKLSAg ICB6NCA9ICh1aW50OHApICZaNDc7ICB6NSA9IHo0ICsgMTsgIHo2ID0gejUgKyAxOyAgejcgPSB6 NiArIDE7Ci0gICAgejggPSAodWludDhwKSAmWjhCOyAgejkgPSB6OCArIDE7ICB6QSA9IHo5ICsg MTsgIHpCID0gekEgKyAxOwotICAgIHpDID0gKHVpbnQ4cCkgJlpDRjsgIHpEID0gekMgKyAxOyAg ekUgPSB6RCArIDE7ICB6RiA9IHpFICsgMTsKLSNlbmRpZgotCi0jaWZkZWYgTElUVExFX0VORElB TgotICAgICp4MCA9IGtleVswXTsKLSAgICAqeDEgPSBrZXlbMV07Ci0gICAgKngyID0ga2V5WzJd OwotICAgICp4MyA9IGtleVszXTsKLSAgICAqeDQgPSBrZXlbNF07Ci0gICAgKng1ID0ga2V5WzVd OwotICAgICp4NiA9IGtleVs2XTsKLSAgICAqeDcgPSBrZXlbN107Ci0gICAgKng4ID0ga2V5Wzhd OwotICAgICp4OSA9IGtleVs5XTsKLSAgICAqeEEgPSBrZXlbMTBdOwotICAgICp4QiA9IGtleVsx MV07Ci0gICAgKnhDID0ga2V5WzEyXTsKLSAgICAqeEQgPSBrZXlbMTNdOwotICAgICp4RSA9IGtl eVsxNF07Ci0gICAgKnhGID0ga2V5WzE1XTsKLSNlbHNlCi0gICAgWDAzID0gKih1aW50MzJwKSBr ZXk7Ci0gICAgWDQ3ID0gKih1aW50MzJwKSAoa2V5ICsgNCk7Ci0gICAgWDhCID0gKih1aW50MzJw KSAoa2V5ICsgOCk7Ci0gICAgWENGID0gKih1aW50MzJwKSAoa2V5ICsgMTIpOwotI2VuZGlmCi0K LSAgLyogRmlyc3QgaGFsZiBvZiBrZXkgc2NoZWR1bGUgKi8KLQotICAgIFowMyA9IFgwMyBeIFM1 Wyp4RF0gXiBTNlsqeEZdIF4gUzdbKnhDXSBeIFM4Wyp4RV0gXiBTN1sqeDhdOwotICAgIFo0NyA9 IFg4QiBeIFM1Wyp6MF0gXiBTNlsqejJdIF4gUzdbKnoxXSBeIFM4Wyp6M10gXiBTOFsqeEFdOwot ICAgIFo4QiA9IFhDRiBeIFM1Wyp6N10gXiBTNlsqejZdIF4gUzdbKno1XSBeIFM4Wyp6NF0gXiBT NVsqeDldOwotICAgIFpDRiA9IFg0NyBeIFM1Wyp6QV0gXiBTNlsqejldIF4gUzdbKnpCXSBeIFM4 Wyp6OF0gXiBTNlsqeEJdOwotCi0gICAgc2NoZWQtPktbMF0uS20gPSBTNVsqejhdIF4gUzZbKno5 XSBeIFM3Wyp6N10gXiBTOFsqejZdIF4gUzVbKnoyXTsKLSAgICBzY2hlZC0+S1sxXS5LbSA9IFM1 Wyp6QV0gXiBTNlsqekJdIF4gUzdbKno1XSBeIFM4Wyp6NF0gXiBTNlsqejZdOwotICAgIHNjaGVk LT5LWzJdLkttID0gUzVbKnpDXSBeIFM2Wyp6RF0gXiBTN1sqejNdIF4gUzhbKnoyXSBeIFM3Wyp6 OV07Ci0gICAgc2NoZWQtPktbM10uS20gPSBTNVsqekVdIF4gUzZbKnpGXSBeIFM3Wyp6MV0gXiBT OFsqejBdIF4gUzhbKnpDXTsKLQotICAgIFgwMyA9IFo4QiBeIFM1Wyp6NV0gXiBTNlsqejddIF4g UzdbKno0XSBeIFM4Wyp6Nl0gXiBTN1sqejBdOwotICAgIFg0NyA9IFowMyBeIFM1Wyp4MF0gXiBT NlsqeDJdIF4gUzdbKngxXSBeIFM4Wyp4M10gXiBTOFsqejJdOwotICAgIFg4QiA9IFo0NyBeIFM1 Wyp4N10gXiBTNlsqeDZdIF4gUzdbKng1XSBeIFM4Wyp4NF0gXiBTNVsqejFdOwotICAgIFhDRiA9 IFpDRiBeIFM1Wyp4QV0gXiBTNlsqeDldIF4gUzdbKnhCXSBeIFM4Wyp4OF0gXiBTNlsqejNdOwot Ci0gICAgc2NoZWQtPktbNF0uS20gPSBTNVsqeDNdIF4gUzZbKngyXSBeIFM3Wyp4Q10gXiBTOFsq eERdIF4gUzVbKng4XTsKLSAgICBzY2hlZC0+S1s1XS5LbSA9IFM1Wyp4MV0gXiBTNlsqeDBdIF4g UzdbKnhFXSBeIFM4Wyp4Rl0gXiBTNlsqeERdOwotICAgIHNjaGVkLT5LWzZdLkttID0gUzVbKng3 XSBeIFM2Wyp4Nl0gXiBTN1sqeDhdIF4gUzhbKng5XSBeIFM3Wyp4M107Ci0gICAgc2NoZWQtPktb N10uS20gPSBTNVsqeDVdIF4gUzZbKng0XSBeIFM3Wyp4QV0gXiBTOFsqeEJdIF4gUzhbKng3XTsK LQotICAgIFowMyA9IFgwMyBeIFM1Wyp4RF0gXiBTNlsqeEZdIF4gUzdbKnhDXSBeIFM4Wyp4RV0g XiBTN1sqeDhdOwotICAgIFo0NyA9IFg4QiBeIFM1Wyp6MF0gXiBTNlsqejJdIF4gUzdbKnoxXSBe IFM4Wyp6M10gXiBTOFsqeEFdOwotICAgIFo4QiA9IFhDRiBeIFM1Wyp6N10gXiBTNlsqejZdIF4g UzdbKno1XSBeIFM4Wyp6NF0gXiBTNVsqeDldOwotICAgIFpDRiA9IFg0NyBeIFM1Wyp6QV0gXiBT NlsqejldIF4gUzdbKnpCXSBeIFM4Wyp6OF0gXiBTNlsqeEJdOwotCi0gICAgc2NoZWQtPktbOF0u S20gPSBTNVsqejNdIF4gUzZbKnoyXSBeIFM3Wyp6Q10gXiBTOFsqekRdIF4gUzVbKno5XTsKLSAg ICBzY2hlZC0+S1s5XS5LbSA9IFM1Wyp6MV0gXiBTNlsqejBdIF4gUzdbKnpFXSBeIFM4Wyp6Rl0g XiBTNlsqekNdOwotICAgIHNjaGVkLT5LWzEwXS5LbSA9IFM1Wyp6N10gXiBTNlsqejZdIF4gUzdb Kno4XSBeIFM4Wyp6OV0gXiBTN1sqejJdOwotICAgIHNjaGVkLT5LWzExXS5LbSA9IFM1Wyp6NV0g XiBTNlsqejRdIF4gUzdbKnpBXSBeIFM4Wyp6Ql0gXiBTOFsqejZdOwotCi0gICAgWDAzID0gWjhC IF4gUzVbKno1XSBeIFM2Wyp6N10gXiBTN1sqejRdIF4gUzhbKno2XSBeIFM3Wyp6MF07Ci0gICAg WDQ3ID0gWjAzIF4gUzVbKngwXSBeIFM2Wyp4Ml0gXiBTN1sqeDFdIF4gUzhbKngzXSBeIFM4Wyp6 Ml07Ci0gICAgWDhCID0gWjQ3IF4gUzVbKng3XSBeIFM2Wyp4Nl0gXiBTN1sqeDVdIF4gUzhbKng0 XSBeIFM1Wyp6MV07Ci0gICAgWENGID0gWkNGIF4gUzVbKnhBXSBeIFM2Wyp4OV0gXiBTN1sqeEJd IF4gUzhbKng4XSBeIFM2Wyp6M107Ci0KLSAgICBzY2hlZC0+S1sxMl0uS20gPSBTNVsqeDhdIF4g UzZbKng5XSBeIFM3Wyp4N10gXiBTOFsqeDZdIF4gUzVbKngzXTsKLSAgICBzY2hlZC0+S1sxM10u S20gPSBTNVsqeEFdIF4gUzZbKnhCXSBeIFM3Wyp4NV0gXiBTOFsqeDRdIF4gUzZbKng3XTsKLSAg ICBzY2hlZC0+S1sxNF0uS20gPSBTNVsqeENdIF4gUzZbKnhEXSBeIFM3Wyp4M10gXiBTOFsqeDJd IF4gUzdbKng4XTsKLSAgICBzY2hlZC0+S1sxNV0uS20gPSBTNVsqeEVdIF4gUzZbKnhGXSBeIFM3 Wyp4MV0gXiBTOFsqeDBdIF4gUzhbKnhEXTsKLQotICAvKiBTZWNvbmQgaGFsZiBvZiBrZXkgc2No ZWR1bGUgLSBqdXN0IGxpa2UgZmlyc3QgaGFsZiAqLwotCi0gICAgWjAzID0gWDAzIF4gUzVbKnhE XSBeIFM2Wyp4Rl0gXiBTN1sqeENdIF4gUzhbKnhFXSBeIFM3Wyp4OF07Ci0gICAgWjQ3ID0gWDhC IF4gUzVbKnowXSBeIFM2Wyp6Ml0gXiBTN1sqejFdIF4gUzhbKnozXSBeIFM4Wyp4QV07Ci0gICAg WjhCID0gWENGIF4gUzVbKno3XSBeIFM2Wyp6Nl0gXiBTN1sqejVdIF4gUzhbKno0XSBeIFM1Wyp4 OV07Ci0gICAgWkNGID0gWDQ3IF4gUzVbKnpBXSBeIFM2Wyp6OV0gXiBTN1sqekJdIF4gUzhbKno4 XSBeIFM2Wyp4Ql07Ci0KLSAgICBzY2hlZC0+S1swXS5LciA9IChTNVsqejhdIF4gUzZbKno5XSBe IFM3Wyp6N10gXiBTOFsqejZdIF4gUzVbKnoyXSkgJiAweDFmOwotICAgIHNjaGVkLT5LWzFdLkty ID0gKFM1Wyp6QV0gXiBTNlsqekJdIF4gUzdbKno1XSBeIFM4Wyp6NF0gXiBTNlsqejZdKSAmIDB4 MWY7Ci0gICAgc2NoZWQtPktbMl0uS3IgPSAoUzVbKnpDXSBeIFM2Wyp6RF0gXiBTN1sqejNdIF4g UzhbKnoyXSBeIFM3Wyp6OV0pICYgMHgxZjsKLSAgICBzY2hlZC0+S1szXS5LciA9IChTNVsqekVd IF4gUzZbKnpGXSBeIFM3Wyp6MV0gXiBTOFsqejBdIF4gUzhbKnpDXSkgJiAweDFmOwotCi0gICAg WDAzID0gWjhCIF4gUzVbKno1XSBeIFM2Wyp6N10gXiBTN1sqejRdIF4gUzhbKno2XSBeIFM3Wyp6 MF07Ci0gICAgWDQ3ID0gWjAzIF4gUzVbKngwXSBeIFM2Wyp4Ml0gXiBTN1sqeDFdIF4gUzhbKngz XSBeIFM4Wyp6Ml07Ci0gICAgWDhCID0gWjQ3IF4gUzVbKng3XSBeIFM2Wyp4Nl0gXiBTN1sqeDVd IF4gUzhbKng0XSBeIFM1Wyp6MV07Ci0gICAgWENGID0gWkNGIF4gUzVbKnhBXSBeIFM2Wyp4OV0g XiBTN1sqeEJdIF4gUzhbKng4XSBeIFM2Wyp6M107Ci0KLSAgICBzY2hlZC0+S1s0XS5LciA9IChT NVsqeDNdIF4gUzZbKngyXSBeIFM3Wyp4Q10gXiBTOFsqeERdIF4gUzVbKng4XSkgJiAweDFmOwot ICAgIHNjaGVkLT5LWzVdLktyID0gKFM1Wyp4MV0gXiBTNlsqeDBdIF4gUzdbKnhFXSBeIFM4Wyp4 Rl0gXiBTNlsqeERdKSAmIDB4MWY7Ci0gICAgc2NoZWQtPktbNl0uS3IgPSAoUzVbKng3XSBeIFM2 Wyp4Nl0gXiBTN1sqeDhdIF4gUzhbKng5XSBeIFM3Wyp4M10pICYgMHgxZjsKLSAgICBzY2hlZC0+ S1s3XS5LciA9IChTNVsqeDVdIF4gUzZbKng0XSBeIFM3Wyp4QV0gXiBTOFsqeEJdIF4gUzhbKng3 XSkgJiAweDFmOwotCi0gICAgWjAzID0gWDAzIF4gUzVbKnhEXSBeIFM2Wyp4Rl0gXiBTN1sqeENd IF4gUzhbKnhFXSBeIFM3Wyp4OF07Ci0gICAgWjQ3ID0gWDhCIF4gUzVbKnowXSBeIFM2Wyp6Ml0g XiBTN1sqejFdIF4gUzhbKnozXSBeIFM4Wyp4QV07Ci0gICAgWjhCID0gWENGIF4gUzVbKno3XSBe IFM2Wyp6Nl0gXiBTN1sqejVdIF4gUzhbKno0XSBeIFM1Wyp4OV07Ci0gICAgWkNGID0gWDQ3IF4g UzVbKnpBXSBeIFM2Wyp6OV0gXiBTN1sqekJdIF4gUzhbKno4XSBeIFM2Wyp4Ql07Ci0KLSAgICBz Y2hlZC0+S1s4XS5LciA9IChTNVsqejNdIF4gUzZbKnoyXSBeIFM3Wyp6Q10gXiBTOFsqekRdIF4g UzVbKno5XSkgJiAweDFmOwotICAgIHNjaGVkLT5LWzldLktyID0gKFM1Wyp6MV0gXiBTNlsqejBd IF4gUzdbKnpFXSBeIFM4Wyp6Rl0gXiBTNlsqekNdKSAmIDB4MWY7Ci0gICAgc2NoZWQtPktbMTBd LktyID0gKFM1Wyp6N10gXiBTNlsqejZdIF4gUzdbKno4XSBeIFM4Wyp6OV0gXiBTN1sqejJdKSAm IDB4MWY7Ci0gICAgc2NoZWQtPktbMTFdLktyID0gKFM1Wyp6NV0gXiBTNlsqejRdIF4gUzdbKnpB XSBeIFM4Wyp6Ql0gXiBTOFsqejZdKSAmIDB4MWY7Ci0KLSAgICBYMDMgPSBaOEIgXiBTNVsqejVd IF4gUzZbKno3XSBeIFM3Wyp6NF0gXiBTOFsqejZdIF4gUzdbKnowXTsKLSAgICBYNDcgPSBaMDMg XiBTNVsqeDBdIF4gUzZbKngyXSBeIFM3Wyp4MV0gXiBTOFsqeDNdIF4gUzhbKnoyXTsKLSAgICBY OEIgPSBaNDcgXiBTNVsqeDddIF4gUzZbKng2XSBeIFM3Wyp4NV0gXiBTOFsqeDRdIF4gUzVbKnox XTsKLSAgICBYQ0YgPSBaQ0YgXiBTNVsqeEFdIF4gUzZbKng5XSBeIFM3Wyp4Ql0gXiBTOFsqeDhd IF4gUzZbKnozXTsKLQotICAgIHNjaGVkLT5LWzEyXS5LciA9IChTNVsqeDhdIF4gUzZbKng5XSBe IFM3Wyp4N10gXiBTOFsqeDZdIF4gUzVbKngzXSkgJiAweDFmOwotICAgIHNjaGVkLT5LWzEzXS5L ciA9IChTNVsqeEFdIF4gUzZbKnhCXSBeIFM3Wyp4NV0gXiBTOFsqeDRdIF4gUzZbKng3XSkgJiAw eDFmOwotICAgIHNjaGVkLT5LWzE0XS5LciA9IChTNVsqeENdIF4gUzZbKnhEXSBeIFM3Wyp4M10g XiBTOFsqeDJdIF4gUzdbKng4XSkgJiAweDFmOwotICAgIHNjaGVkLT5LWzE1XS5LciA9IChTNVsq eEVdIF4gUzZbKnhGXSBeIFM3Wyp4MV0gXiBTOFsqeDBdIF4gUzhbKnhEXSkgJiAweDFmOwotfQot Ci0vKiBJbml0aWFsaXplIHdpdGggYSBmdWxsLXN0cmVuZ3RoIDEyOC1iaXQga2V5ICovCi0KLSNp Zm5kZWYgQ0FTVF9FWFBPUlRfRU5DUllQVElPTgotdm9pZAotY2tfY2FzdDEyOF9rZXlfc2NoZWQo c2NoZWQsIGtleSkKLSAgICBDYXN0S2V5U2NoZWQgKiBzY2hlZDsKLSAgICB1aW50OCAqIGtleTsK LXsKLSAgICBzY2hlZC0+a3NpemUgPSAxNjsKLSAgICBjYXN0X2tleV9zY2hlZChzY2hlZCwga2V5 KTsKLX0KLSNlbmRpZgotCi0vKiBIYW5kbGUgcmVkdWNlZC1rZXlzaXplIHZhcmlhbnRzICovCi0K LXN0YXRpYyB2b2lkCi1jYXN0NV9rZXlfc2NoZWQoc2NoZWQsIGtleSwgc3opCi0gICAgQ2FzdEtl eVNjaGVkICogc2NoZWQ7Ci0gICAgdWludDggKiBrZXk7Ci0gICAgaW50IHN6OwotewotICAgIHVp bnQ4IGJ1ZlsxNl07Ci0KLSAgICBzY2hlZC0+a3NpemUgPSBzejsKLSAgICBtZW1zZXQoYnVmLCAw LCBzaXplb2YoYnVmKSk7Ci0gICAgbWVtY3B5KGJ1Ziwga2V5LCBzeik7Ci0gICAgY2FzdF9rZXlf c2NoZWQoc2NoZWQsIGJ1Zik7Ci19Ci0KLS8qIDQwLCA2NCwgYW5kIDgwLWJpdCBrZXlzIC0gYWxs IHVzZSAxMiByb3VuZHMgKi8KLQotdm9pZAotY2tfY2FzdDVfNDBfa2V5X3NjaGVkKHNjaGVkLCBr ZXkpCi0gICAgQ2FzdEtleVNjaGVkICogc2NoZWQ7Ci0gICAgdWludDggKiBrZXk7Ci17Ci0gICAg Y2FzdDVfa2V5X3NjaGVkKHNjaGVkLCBrZXksIDUpOwotfQotCi0jaWZuZGVmIENBU1RfRVhQT1JU X0VOQ1JZUFRJT04KLXZvaWQKLWNrX2Nhc3Q1XzY0X2tleV9zY2hlZChzY2hlZCwga2V5KQotICAg ICBDYXN0S2V5U2NoZWQgKiBzY2hlZDsKLSAgICAgdWludDggKiBrZXk7Ci17Ci0gICAgY2FzdDVf a2V5X3NjaGVkKHNjaGVkLCBrZXksIDgpOwotfQotCi12b2lkCi1ja19jYXN0NV84MF9rZXlfc2No ZWQoc2NoZWQsIGtleSkKLSAgICAgQ2FzdEtleVNjaGVkICogc2NoZWQ7Ci0gICAgIHVpbnQ4ICog a2V5OwotewotICAgIGNhc3Q1X2tleV9zY2hlZChzY2hlZCwga2V5LCAxMCk7Ci19Ci0jZW5kaWYg LyogQ0FTVF9FWFBPUlRfRU5DUllQVElPTiAqLwotI2VuZGlmIC8qIENLX0NBU1QgKi8KLQotI2lm ZGVmIENSWVBUX0RMTAotc3RhdGljIGNoYXIgKgotY2tfY3J5cHRfZGxsX3ZlcnNpb24oKQotewot ICAgIHJldHVybihja2NycHYpOwotfQotCi1pbnQKLWNyeXB0X2RsbF9pbml0KCBzdHJ1Y3QgX2Ny eXB0X2RsbF9pbml0ICogaW5pdCApCi17Ci0jaWZkZWYgTElCREVTCi0gICAgZXh0ZXJuIGludCBk ZXNfY2hlY2tfa2V5OwotICAgIGV4dGVybiB2b2lkIGxpYmRlc19kbGxfaW5pdChzdHJ1Y3QgX2Ny eXB0X2RsbF9pbml0ICopOwotICAgIGRlc19jaGVja19rZXkgPSAxOwotI2VuZGlmIC8qIExJQkRF UyAqLwotCi0gICAgaWYgKCBpbml0LT52ZXJzaW9uID49IDEgKSB7Ci0gICAgICAgIHBfdHRvbCA9 IGluaXQtPnBfdHRvbDsKLSAgICAgICAgcF9kb2RlYnVnID0gaW5pdC0+cF9kb2RlYnVnOwotICAg ICAgICBwX2RvaGV4ZHVtcCA9IGluaXQtPnBfZG9oZXhkdW1wOwotICAgICAgICBwX3RuX2RlYnVn ID0gaW5pdC0+cF90bl9kZWJ1ZzsKLSAgICAgICAgcF92c2NybnByaW50ZiA9IGluaXQtPnBfdnNj cm5wcmludGY7Ci0gICAgICAgIGlmICggaW5pdC0+dmVyc2lvbiA9PSAxICkKLSAgICAgICAgICAg IHJldHVybigxKTsKLSAgICB9Ci0gICAgaWYgKCBpbml0LT52ZXJzaW9uID49IDIgKSB7Ci0gICAg ICAgIC8qIFRoaXMgaXMgYSBrNV9jb250ZXh0IGJ1dCB3ZSBkb24ndCB3YW50IHRvIGluY2x1ZGUg a3JiNS5oICovCi0gICAgICAgIHBfazVfY29udGV4dCA9ICh2b2lkICopIGluaXQtPnBfazVfY29u dGV4dDsKLSAgICAgICAgaWYgKCBpbml0LT52ZXJzaW9uID09IDIgKQotICAgICAgICAgICAgcmV0 dXJuKDEpOwotICAgIH0KLSAgICBpZiAoIGluaXQtPnZlcnNpb24gPj0gMyApIHsKLSAgICAgICAg aW5pdC0+cF9pbnN0YWxsX2Z1bmNzKCJlbmNyeXB0X3BhcnNlIixlbmNyeXB0X3BhcnNlKTsKLSAg ICAgICAgaW5pdC0+cF9pbnN0YWxsX2Z1bmNzKCJlbmNyeXB0X2luaXQiLGVuY3J5cHRfaW5pdCk7 Ci0gICAgICAgIGluaXQtPnBfaW5zdGFsbF9mdW5jcygiZW5jcnlwdF9zZXNzaW9uX2tleSIsZW5j cnlwdF9zZXNzaW9uX2tleSk7Ci0gICAgICAgIGluaXQtPnBfaW5zdGFsbF9mdW5jcygiZW5jcnlw dF9zZW5kX3JlcXVlc3Rfc3RhcnQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5j cnlwdF9zZW5kX3JlcXVlc3Rfc3RhcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 Ci0gICAgICAgIGluaXQtPnBfaW5zdGFsbF9mdW5jcygiZW5jcnlwdF9yZXF1ZXN0X3N0YXJ0Iixl bmNyeXB0X3JlcXVlc3Rfc3RhcnQpOwotICAgICAgICBpbml0LT5wX2luc3RhbGxfZnVuY3MoImVu Y3J5cHRfc2VuZF9yZXF1ZXN0X2VuZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl bmNyeXB0X3NlbmRfcmVxdWVzdF9lbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 Ci0gICAgICAgIGluaXQtPnBfaW5zdGFsbF9mdW5jcygiZW5jcnlwdF9yZXF1ZXN0X2VuZCIsZW5j cnlwdF9yZXF1ZXN0X2VuZCk7Ci0gICAgICAgIGluaXQtPnBfaW5zdGFsbF9mdW5jcygiZW5jcnlw dF9zZW5kX2VuZCIsZW5jcnlwdF9zZW5kX2VuZCk7Ci0gICAgICAgIGluaXQtPnBfaW5zdGFsbF9m dW5jcygiZW5jcnlwdF9zZW5kX3N1cHBvcnQiLGVuY3J5cHRfc2VuZF9zdXBwb3J0KTsKLSAgICAg ICAgaW5pdC0+cF9pbnN0YWxsX2Z1bmNzKCJlbmNyeXB0X2lzX2VuY3J5cHRpbmciLGVuY3J5cHRf aXNfZW5jcnlwdGluZyk7Ci0gICAgICAgIGluaXQtPnBfaW5zdGFsbF9mdW5jcygiZW5jcnlwdF9p c19kZWNyeXB0aW5nIixlbmNyeXB0X2lzX2RlY3J5cHRpbmcpOwotICAgICAgICBpbml0LT5wX2lu c3RhbGxfZnVuY3MoImdldF9jcnlwdF90YWJsZSIsZ2V0X2NyeXB0X3RhYmxlKTsKLSAgICAgICAg aW5pdC0+cF9pbnN0YWxsX2Z1bmNzKCJkZXNfaXNfd2Vha19rZXkiLGNrX2Rlc19pc193ZWFrX2tl eSk7Ci0gICAgICAgIGxpYmRlc19kbGxfaW5pdChpbml0KTsKLSAgICAgICAgaWYgKGluaXQtPnZl cnNpb24gPT0gMykKLSAgICAgICAgICByZXR1cm4oMSk7Ci0gICAgfQotICAgIGlmICggaW5pdC0+ dmVyc2lvbiA+PSA0ICkgewotICAgICAgICBpbml0LT5wX2luc3RhbGxfZnVuY3MoImNyeXB0X2Rs bF92ZXJzaW9uIixja19jcnlwdF9kbGxfdmVyc2lvbik7Ci0gICAgICAgIGlmIChpbml0LT52ZXJz aW9uID09IDQpCi0gICAgICAgICAgcmV0dXJuKDEpOwotICAgIH0KLQotICAgIGlmICggaW5pdC0+ dmVyc2lvbiA+PSA1ICkgewotICAgICAgICBwX3JlcXRlbG11dGV4ID0gaW5pdC0+cF9yZXF0ZWxt dXRleDsKLSAgICAgICAgcF9yZWx0ZWxtdXRleCA9IGluaXQtPnBfcmVsdGVsbXV0ZXg7Ci0gICAg ICAgIGlmIChpbml0LT52ZXJzaW9uID09IDUpCi0gICAgICAgICAgcmV0dXJuKDEpOwotICAgIH0K LQotICAgIGlmICggaW5pdC0+dmVyc2lvbiA+PSA2ICkgewotICAgICAgICBpbml0LT5wX2luc3Rh bGxfZnVuY3MoImVuY3J5cHRfZG9udF9zdXBwb3J0IixlbmNyeXB0X2RvbnRfc3VwcG9ydCk7Ci0g ICAgICAgIGlmICggaW5pdC0+dmVyc2lvbiA9PSA2ICkKLSAgICAgICAgICAgIHJldHVybigxKTsK LSAgICAgICAgLyogd2hlbiBhZGRpbmcgbmV3IHZlcnNpb25zOyBtaWdyYXRlIHRoZSBuZXh0IHR3 byBsaW5lcyAqLwotICAgICAgICBpbml0LT52ZXJzaW9uID0gNjsKLSAgICAgICAgcmV0dXJuKDEp OwotICAgIH0KLSAgICByZXR1cm4oMCk7Ci19Ci0KLSN1bmRlZiBtYWxsb2MKLSN1bmRlZiByZWFs bG9jCi0jdW5kZWYgZnJlZQotI3VuZGVmIHN0cmR1cAotCi1zdGF0aWMgdm9pZAotZmF0YWwoY2hh ciAqbXNnKSB7Ci0gICAgaWYgKCFtc2cpIG1zZyA9ICIiOwotCi0gICAgcHJpbnRmKG1zZyk7Ci0g ICAgZXhpdCgxKTsgICAgICAgIC8qIEV4aXQgaW5kaWNhdGluZyBmYWlsdXJlICovCi19Ci0KLXZv aWQgKgota21hbGxvYyhzaXplX3Qgc2l6ZSkKLXsKLSAgICB2b2lkICpwdHI7Ci0KLSAgICBpZiAo c2l6ZSA9PSAwKSB7Ci0gICAgICAgIGZhdGFsKCJrbWFsbG9jOiB6ZXJvIHNpemUiKTsKLSAgICB9 Ci0gICAgcHRyID0gbWFsbG9jKHNpemUpOwotICAgIGlmIChwdHIgPT0gTlVMTCkgewotICAgICAg ICBmYXRhbCgia21hbGxvYzogb3V0IG9mIG1lbW9yeSIpOwotICAgIH0KLSAgICByZXR1cm4gcHRy OwotfQotCi12b2lkICoKLWtyZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IG5ld19zaXplKQotewot ICAgIHZvaWQgKm5ld19wdHI7Ci0KLSAgICBpZiAobmV3X3NpemUgPT0gMCkgewotICAgICAgICBm YXRhbCgia3JlYWxsb2M6IHplcm8gc2l6ZSIpOwotICAgIH0KLSAgICBpZiAocHRyID09IE5VTEwp Ci0gICAgICAgIG5ld19wdHIgPSBtYWxsb2MobmV3X3NpemUpOwotICAgIGVsc2UKLSAgICAgICAg bmV3X3B0ciA9IHJlYWxsb2MocHRyLCBuZXdfc2l6ZSk7Ci0gICAgaWYgKG5ld19wdHIgPT0gTlVM TCkgewotICAgICAgICBmYXRhbCgia3JlYWxsb2M6IG91dCBvZiBtZW1vcnkiKTsKLSAgICB9Ci0g ICAgcmV0dXJuIG5ld19wdHI7Ci19Ci0KLXZvaWQKLWtmcmVlKHZvaWQgKnB0cikKLXsKLSAgICBp ZiAocHRyID09IE5VTEwpIHsKLSAgICAgICAgcHJpbnRmKCJrZnJlZTogTlVMTCBwb2ludGVyIGdp dmVuIGFzIGFyZ3VtZW50Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZnJlZShwdHIp OwotfQotCi1jaGFyICoKLWtzdHJkdXAoY29uc3QgY2hhciAqc3RyKQotewotICAgIHNpemVfdCBs ZW47Ci0gICAgY2hhciAqY3A7Ci0KLSAgICBpZiAoc3RyID09IE5VTEwpIHsKLSAgICAgICAgZmF0 YWwoImtzdHJkdXA6IE5VTEwgcG9pbnRlciBnaXZlbiBhcyBhcmd1bWVudCIpOwotICAgIH0KLSAg ICBsZW4gPSBzdHJsZW4oc3RyKSArIDE7Ci0gICAgY3AgPSBrbWFsbG9jKGxlbik7Ci0gICAgaWYg KGNwKQotICAgICAgICBtZW1jcHkoY3AsIHN0ciwgbGVuKTsKLSAgICByZXR1cm4gY3A7Ci19Ci0j ZW5kaWYgLyogQ1JZUFRfRExMICovCi0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwoKZGlmZiAt LWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tfZGVzLmMgYi9j a2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrX2Rlcy5jCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCBjNTM0NjUyLi4wMDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4wLjMw Mi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tfZGVzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5OCAr MCwwIEBACi0vKgotICBDIEsgXyBEIEUgUyAuIEMgIC0gIGxpYkRFUyBpbnRlcmZhY2UgZm9yIEtl cm1pdCA5NSIKLQotICBDb3B5cmlnaHQgKEMpIDE5OTgsIDIwMDEsIFRydXN0ZWVzIG9mIENvbHVt YmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3Ci0gIFlvcmsuICBUaGUgQy1LZXJtaXQg c29mdHdhcmUgbWF5IG5vdCBiZSwgaW4gd2hvbGUgb3IgaW4gcGFydCwgbGljZW5zZWQgb3IKLSAg c29sZCBmb3IgcHJvZml0IGFzIGEgc29mdHdhcmUgcHJvZHVjdCBpdHNlbGYsIG5vciBtYXkgaXQg YmUgaW5jbHVkZWQgaW4gb3IKLSAgZGlzdHJpYnV0ZWQgd2l0aCBjb21tZXJjaWFsIHByb2R1Y3Rz IG9yIG90aGVyd2lzZSBkaXN0cmlidXRlZCBieSBjb21tZXJjaWFsCi0gIGNvbmNlcm5zIHRvIHRo ZWlyIGNsaWVudHMgb3IgY3VzdG9tZXJzIHdpdGhvdXQgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRo ZQotICBPZmZpY2Ugb2YgS2VybWl0IERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24sIENvbHVt YmlhIFVuaXZlcnNpdHkuICBUaGlzCi0gIGNvcHlyaWdodCBub3RpY2UgbXVzdCBub3QgYmUgcmVt b3ZlZCwgYWx0ZXJlZCwgb3Igb2JzY3VyZWQuCi0KLSAgQXV0aG9yOgotICBKZWZmcmV5IEUgQWx0 bWFuIChqYWx0bWFuQHNlY3VyZS1lbmRwb2ludHMuY29tKQotKi8KLQotLyoKLSAgIFRoaXMgZmls ZSBjb250YWlucyB3cmFwcGVycyBzbyB0aGF0IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHdpbGwg YmUgaW1wb3J0ZWQKLSAgIGludG8gdGhlIGs5NWNyeXB0LmRsbC9rMmNyeXB0LmRsbCBmaWxlcyBp biBzdWNoIGEgZm9ybSB0aGF0IHRoZXkgY2FuIGJlCi0gICByZS1leHBvcnRlZCB0byBrOTUuZXhl L2syLmV4ZS4gIFRoaXMgc3Vic2V0IG9mIHRoZSBERVMgbGlicmFyeSBpcyBuZWVkZWQgdG8KLSAg IHByb3ZpZGUgREVTIGJhc2VkIEtlcmJlcm9zIGF1dGhlbnRpY2F0aW9uLgotKi8KLQotCi0jaWZk ZWYgTElCREVTCi0vKiBUaGUgZm9sbG93aW5nIGlzIHNwZWNpZmljIHRvIG15IGluc3RhbGxhdGlv biwgYnV0IHNpbmNlIEknbSB0aGUgb25seSBvbmUgKi8KLS8qIHRoYXQgdXNlcyB0aGlzIGZpbGUg Li4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwot I2luY2x1ZGUgImNrY2RlYi5oIgotI2luY2x1ZGUgImNrdWF0aC5oIgotI2RlZmluZSBDS19ERVNf QwotI2luY2x1ZGUgImNrdWF0Mi5oIgotI2lmZGVmIE5UCi0jaWZkZWYgX01fQUxQSEEKLSNpbmNs dWRlIDxjOlxzcnBcZGVzXGRlcy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxjOlxzcmNcc3JwXGRlc1xk ZXMuaD4KLSNlbmRpZgotI2Vsc2UKLSNpbmNsdWRlIDxjOlxzcnBcZGVzXGRlcy5oPgotI2VuZGlm Ci0KLWludAotbGliZGVzX3JhbmRvbV9rZXkoZGVzX2NibG9jayBCKQotewotICAgIGRlc19yYW5k b21fa2V5KEIpOwotICAgIHJldHVybigwKTsKLX0KLQotdm9pZAotbGliZGVzX3JhbmRvbV9zZWVk KGRlc19jYmxvY2sgQikKLXsKLSAgICBkZXNfcmFuZG9tX3NlZWQoQik7Ci19Ci0KLXZvaWQKLWxp YmRlc19rZXlfc2NoZWQoZGVzX2NibG9jayAqIEIsIGRlc19rZXlfc2NoZWR1bGUgUykKLXsKLSAg ICBkZXNfa2V5X3NjaGVkKEIsUyk7Ci19Ci0KLXZvaWQKLWxpYmRlc19lY2JfZW5jcnlwdChkZXNf Y2Jsb2NrICogQjEsIGRlc19jYmxvY2sgKiBCMiwgZGVzX2tleV9zY2hlZHVsZSBTLCBpbnQgbikK LXsKLSAgICBkZXNfZWNiX2VuY3J5cHQoQjEsQjIsUyxuKTsKLX0KLQotaW50Ci1saWJkZXNfc3Ry aW5nX3RvX2tleShjaGFyICogcywgZGVzX2NibG9jayAqIEIpCi17Ci0gICAgZGVzX3N0cmluZ190 b19rZXkocyxCKTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLXZvaWQKLWxpYmRlc19maXh1cF9rZXlf cGFyaXR5KGRlc19jYmxvY2sgKiBCKQotewotICAgIGRlc19zZXRfb2RkX3Bhcml0eShCKTsKLX0K LQotdm9pZAotbGliZGVzX3BjYmNfZW5jcnlwdChkZXNfY2Jsb2NrICppbnB1dCwgZGVzX2NibG9j ayAqb3V0cHV0LCBsb25nIGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgIGRlc19rZXlfc2No ZWR1bGUgc2NoZWR1bGUsIGRlc19jYmxvY2sgKml2ZWMsIGludCBlbmMpCi17Ci0gICAgZGVzX3Bj YmNfZW5jcnlwdChpbnB1dCxvdXRwdXQsbGVuZ3RoLHNjaGVkdWxlLGl2ZWMsZW5jKTsKLX0KLQot dm9pZAotbGliZGVzX2RsbF9pbml0KHN0cnVjdCBfY3J5cHRfZGxsX2luaXQgKiBpbml0KQotewot ICAgIGluaXQtPnBfaW5zdGFsbF9mdW5jcygibGliZGVzX3JhbmRvbV9rZXkiLGxpYmRlc19yYW5k b21fa2V5KTsKLSAgICBpbml0LT5wX2luc3RhbGxfZnVuY3MoImxpYmRlc19yYW5kb21fc2VlZCIs bGliZGVzX3JhbmRvbV9zZWVkKTsKLSAgICBpbml0LT5wX2luc3RhbGxfZnVuY3MoImxpYmRlc19r ZXlfc2NoZWQiLGxpYmRlc19rZXlfc2NoZWQpOwotICAgIGluaXQtPnBfaW5zdGFsbF9mdW5jcygi bGliZGVzX2VjYl9lbmNyeXB0IixsaWJkZXNfZWNiX2VuY3J5cHQpOwotICAgIGluaXQtPnBfaW5z dGFsbF9mdW5jcygibGliZGVzX3N0cmluZ190b19rZXkiLGxpYmRlc19zdHJpbmdfdG9fa2V5KTsK LSAgICBpbml0LT5wX2luc3RhbGxfZnVuY3MoImxpYmRlc19maXh1cF9rZXlfcGFyaXR5IixsaWJk ZXNfZml4dXBfa2V5X3Bhcml0eSk7Ci0gICAgaW5pdC0+cF9pbnN0YWxsX2Z1bmNzKCJsaWJkZXNf cGNiY19lbmNyeXB0IixsaWJkZXNfcGNiY19lbmNyeXB0KTsKLQotfQotI2VuZGlmIC8qIExJQkRF UyAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIv Y2tfc3NsLmMgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrX3NzbC5j CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjhmYjdjLi4wMDAwMDAwCi0tLSBhL2Nr ZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tfc3NsLmMKKysrIC9kZXYvbnVs bApAQCAtMSw0MzU4ICswLDAgQEAKLWNoYXIgKmNrc3NsdiA9ICJTU0wvVExTIHN1cHBvcnQsIDku MC4yMjcsIDA0IEF1ZyAyMDEwIjsKLS8qCi0gIEMgSyBfIFMgUyBMIC4gQyAtLSAgT3BlblNTTCBJ bnRlcmZhY2UgZm9yIEMtS2VybWl0Ci0KLSAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDEwLAotICAg IFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsu Ci0gICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQg ZmlsZSBvciB0aGUKLSAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZv ciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KLQotICAgIEF1dGhvcjogIEplZmZyZXkgRSBB bHRtYW4gKGphbHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20pCi0gICAgICAgICAgICAgICBTZWN1 cmUgRW5kcG9pbnRzIEluYy4sIE5ldyBZb3JrIENpdHkKLQotICBQcm92aWRlczoKLQotICAuIFRl bG5ldCBBdXRoIFNTTCBvcHRpb24gY29tcGF0aWJsZSB3aXRoIFRpbSBIdWRzb24ncyBoYWNrLgot ICAuIFRlbG5ldCBTVEFSVF9UTFMgb3B0aW9uCi0gIC4gQ29uZmlndXJhdGlvbiBvZiBjZXJ0aWZp Y2F0ZSBhbmQga2V5IGZpbGVzCi0gIC4gQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIGFuZCByZXZv Y2F0aW9uIGxpc3QgY2hlY2tzCi0gIC4gQ2xpZW50IGNlcnRpZmljYXRlIHRvIHVzZXIgaWQgcm91 dGluZQotCi0gIE5vdGU6IFRoaXMgY29kZSBpcyB3cml0dGVuIHRvIGJlIGNvbXBhdGlibGUgd2l0 aCBPcGVuU1NMIDAuOS42W2FiY2RlZmdoXQotICBhbmQgMC45LjcgYmV0YSA1IChhbmQsIHByZXN1 bWFibHksIGxhdGVyKS4KLSAgSXQgd2lsbCBhbHNvIGNvbXBpbGUgd2l0aCB2ZXJzaW9uIDAuOS41 IGFsdGhvdWdoIHRoYXQgaXMgZGlzY291cmFnZWQKLSAgZHVlIHRvIHNlY3VyaXR5IHdlYWtuZXNz ZXMgaW4gdGhhdCByZWxlYXNlLgotKi8KLQotI2luY2x1ZGUgImNrY3N5bS5oIgotI2luY2x1ZGUg ImNrY2RlYi5oIgotCi0jaWZkZWYgQ0tfU1NMCi0jaW5jbHVkZSAiY2tjbmV0LmgiCi0jaW5jbHVk ZSAiY2t1YXRoLmgiCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4K LSNpZmRlZiBVTklYCi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2lmbmRlZiBGUkVFQlNENAot I2luY2x1ZGUgPGFycGEvaW5ldC5oPgotI2VuZGlmIC8qIEZSRUVCU0Q0ICovCi0jZW5kaWYgLyog VU5JWCAqLwotCi0jaWZkZWYgREVDX1RDUElQCi0jaW5jbHVkZSA8dGltZS5oPgotI2luY2x1ZGUg PGluZXQuaD4KLSNlbmRpZiAvKiBERUNfVENQSVAgKi8KLQotI2lmZGVmIE9TMgotZXh0ZXJuIGNo YXIgZXhlZGlyW107Ci0jaWZkZWYgTlQKLWNoYXIgKiBHZXRBcHBEYXRhKGludCk7Ci0jZW5kaWYK LSNlbmRpZiAvKiBPUzIgKi8KLQotZXh0ZXJuIGludCBxdWlldDsJCQkvKiBmZGMgLSBNb24gTm92 IDI4IDExOjQ0OjE1IDIwMDUgKi8KLQotc3RhdGljIGludCBzc2xfaW5zdGFsbGVkID0gMTsKLSNl bmRpZiAvKiBDS19TU0wgKi8KLWludAotY2tfc3NoX2lzX2luc3RhbGxlZCgpCi17Ci0jaWZkZWYg U1NIQlVJTFRJTgotI2lmZGVmIFNTTERMTAotI2lmZGVmIE5UCi0gICAgZXh0ZXJuIEhJTlNUQU5D RSBoQ1JZUFRPOwotI2Vsc2UgLyogTlQgKi8KLSAgICBleHRlcm4gSE1PRFVMRSBoQ1JZUFRPOwot I2VuZGlmIC8qIE5UICovCi0gICAgZGVidWcoRjExMSwiY2tfc3NoX2lzX2luc3RhbGxlZCIsImhD UllQVE8iLGhDUllQVE8pOwotICAgIHJldHVybihzc2xfaW5zdGFsbGVkICYmIChoQ1JZUFRPICE9 IE5VTEwpKTsKLSNlbHNlIC8qIFNTTERMTCAqLwotICAgIHJldHVybihzc2xfaW5zdGFsbGVkKTsK LSNlbmRpZiAvKiBTU0xETEwgKi8KLSNlbHNlCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYKLX0KLQot aW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWNrX3NzbGVheV9pc19pbnN0YWxsZWQodm9pZCkKLSNlbHNl Ci1ja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkKLSNlbmRpZgotewotI2lmZGVmIENLX1NTTAotI2lm ZGVmIFNTTERMTAotI2lmZGVmIE5UCi0gICAgZXh0ZXJuIEhJTlNUQU5DRSBoU1NMLCBoQ1JZUFRP OwotI2Vsc2UgLyogTlQgKi8KLSAgICBleHRlcm4gSE1PRFVMRSBoU1NMLCBoQ1JZUFRPOwotI2Vu ZGlmIC8qIE5UICovCi0gICAgZGVidWcoRjExMSwiY2tfc3NsZWF5X2lzX2luc3RhbGxlZCIsImhT U0wiLGhTU0wpOwotICAgIGRlYnVnKEYxMTEsImNrX3NzbGVheV9pc19pbnN0YWxsZWQiLCJoQ1JZ UFRPIixoQ1JZUFRPKTsKLSAgICByZXR1cm4oc3NsX2luc3RhbGxlZCAmJiAoaFNTTCAhPSBOVUxM KSAmJiAoaENSWVBUTyAhPSBOVUxMKSk7Ci0jZWxzZSAvKiBTU0xETEwgKi8KLSAgICByZXR1cm4o c3NsX2luc3RhbGxlZCk7Ci0jZW5kaWYgLyogU1NMRExMICovCi0jZWxzZSAvKiBDS19TU0wgKi8K LSAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogQ0tfU1NMICovCi19Ci0KLSNpZmRlZiBDS19TU0wK LSNpbmNsdWRlICJja2NrZXIuaCIKLSNpbmNsdWRlICJja3VjbWQuaCIgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEZvciBzdHJ1Y3Qga2V5dGFiICovCi0jaW5jbHVkZSAiY2tjdGVsLmgi Ci0jaW5jbHVkZSAiY2tfc3NsLmgiCi0jaWZkZWYgVU5JWAotI2luY2x1ZGUgPHB3ZC5oPiAgICAg ICAgICAgICAgICAgICAgLyogUGFzc3dvcmQgZmlsZSBmb3IgaG9tZSBkaXJlY3RvcnkgKi8KLSNl bmRpZiAvKiBVTklYICovCi0jaWZkZWYgT1MyCi0jaW5jbHVkZSA8cHJvY2Vzcy5oPgotI2VuZGlm IC8qIE9TMiAqLwotI2lmZGVmIE9TMk9OTFkKLSNpbmNsdWRlICJja290Y3AuaCIKLSNlbmRpZiAv KiBPUzJPTkxZICovCi0KLSNpZmRlZiBTU0xETEwKLWludCBzc2xfZmluaXNoZWRfbWVzc2FnZXMg PSAwOwotI2Vsc2UgLyogU1NMRExMICovCi0jaWZkZWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUgot aW50IHNzbF9maW5pc2hlZF9tZXNzYWdlcyA9IChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4 MDA5MDU4MWZMKTsKLSNlbHNlCi0hRVJST1IgVGhpcyBtb2R1bGUgcmVxdWlyZXMgT3BlblNTTCAw LjkuNWEgb3IgaGlnaGVyCi0jZW5kaWYgLyogT1BFTlNTTF9WRVJTSU9OX05VTUJFUiAqLwotI2Vu ZGlmIC8qIFNTTERMTCAqLwotCi1zdGF0aWMgaW50IGF1dGhfc3NsX3ZhbGlkID0gMDsKLXN0YXRp YyBjaGFyICphdXRoX3NzbF9uYW1lID0gMDsgICAgLyogdGhpcyBob2xkcyB0aGUgb25lbGluZSBu YW1lICovCi1jaGFyIHNzbF9lcnJbU1NMX0VSUl9CRlNaXT0iIjsKLQotQklPICpiaW9fZXJyPU5V TEw7Ci1YNTA5X1NUT1JFICpjcmxfc3RvcmUgPSBOVUxMOwotCi0jaWZuZGVmIE5PRlRQCi0jaWZu ZGVmIFNZU0ZUUAotU1NMICpzc2xfZnRwX2NvbiAgICAgICAgICAgICA9IE5VTEw7Ci1TU0xfQ1RY ICpzc2xfZnRwX2N0eCAgICAgICAgID0gTlVMTDsKLVNTTCAqc3NsX2Z0cF9kYXRhX2NvbiAgICAg ICAgPSBOVUxMOwotaW50IHNzbF9mdHBfYWN0aXZlX2ZsYWcgICAgICA9IDA7Ci1pbnQgc3NsX2Z0 cF9kYXRhX2FjdGl2ZV9mbGFnID0gMDsKLSNlbmRpZiAvKiBTWVNGVFAgKi8KLSNlbmRpZiAvKiBO T0ZUUCAqLwotCi0jaWZuZGVmIE5PSFRUUAotU1NMICp0bHNfaHR0cF9jb24gICAgICAgICAgICA9 IE5VTEw7Ci1TU0xfQ1RYICp0bHNfaHR0cF9jdHggICAgICAgID0gTlVMTDsKLWludCB0bHNfaHR0 cF9hY3RpdmVfZmxhZyAgICAgPSAwOwotaW50IHNzbF9odHRwX2luaXRpYWxpemVkID0gMDsKLSNl bmRpZiAvKiBOT0hUVFAgKi8KLQotU1NMX0NUWCAqc3NsX2N0eCA9IE5VTEw7Ci1TU0wgKnNzbF9j b24gPSBOVUxMOwotaW50IHNzbF9kZWJ1Z19mbGFnID0gMDsKLWludCBzc2xfdmVyYm9zZV9mbGFn ID0gMDsKLWludCBzc2xfb25seV9mbGFnID0gMDsKLWludCBzc2xfcmF3X2ZsYWcgPSAwOwotaW50 IHNzbF9hY3RpdmVfZmxhZyA9IDA7Ci1pbnQgc3NsX3ZlcmlmeV9mbGFnID0gU1NMX1ZFUklGWV9Q RUVSOwotaW50IHNzbF9jZXJ0c29rX2ZsYWcgPSAwOwotY2hhciAqc3NsX3JzYV9jZXJ0X2ZpbGUg PSBOVUxMOwotY2hhciAqc3NsX3JzYV9jZXJ0X2NoYWluX2ZpbGUgPSBOVUxMOwotY2hhciAqc3Ns X3JzYV9rZXlfZmlsZSA9IE5VTEw7Ci1jaGFyICpzc2xfZHNhX2NlcnRfZmlsZSA9IE5VTEw7Ci1j aGFyICpzc2xfZHNhX2NlcnRfY2hhaW5fZmlsZSA9IE5VTEw7Ci1jaGFyICpzc2xfZGhfa2V5X2Zp bGUgPSBOVUxMOwotY2hhciAqc3NsX2NybF9maWxlID0gTlVMTDsKLWNoYXIgKnNzbF9jcmxfZGly ID0gTlVMTDsKLWNoYXIgKnNzbF92ZXJpZnlfZmlsZSA9IE5VTEw7Ci1jaGFyICpzc2xfdmVyaWZ5 X2RpciA9IE5VTEw7Ci1jaGFyICpzc2xfZGhfcGFyYW1fZmlsZSA9IE5VTEw7Ci1jaGFyICpzc2xf Y2lwaGVyX2xpc3QgPSBOVUxMOwotY2hhciAqc3NsX3JuZF9maWxlID0gTlVMTDsKLQotU1NMX0NU WCAqdGxzX2N0eCA9IE5VTEw7Ci1TU0wgKnRsc19jb24gPSBOVUxMOwotaW50IHRsc19vbmx5X2Zs YWcgPSAwOwotaW50IHRsc19yYXdfZmxhZyA9IDA7Ci1pbnQgdGxzX2FjdGl2ZV9mbGFnID0gMDsK LQotaW50IHNzbF9pbml0aWFsaXplZCA9IDA7Ci1pbnQgc3NsX3ZlcmlmeV9kZXB0aCA9IC0xOyAv KiB1c2VkIHRvIHRyYWNrIGRlcHRoIGluIHZlcmlmeSByb3V0aW5lcyAqLwotCi0vKiBjb21waWxl IHRoaXMgc2V0IHRvIDEgdG8gbmVnb3RpYXRlIFNTTC9UTFMgYnV0IG5vdCBhY3R1YWxseSBzdGFy dCBpdCAqLwotaW50IHNzbF9kdW1teV9mbGFnPTA7Ci0KLWV4dGVybiBpbnQgaW5zZXJ2ZXI7Ci1l eHRlcm4gaW50IGRlYnNlczsKLWV4dGVybiBpbnQgYWNjZXB0X2NvbXBsZXRlOwotZXh0ZXJuIGNo YXIgc3pIb3N0TmFtZVtdLCBzelVzZXJOYW1lUmVxdWVzdGVkW10sIHN6VXNlck5hbWVBdXRoZW50 aWNhdGVkW107Ci0KLV9QUk9UT1RZUChpbnQgWDUwOV90b191c2VyLChYNTA5ICosIGNoYXIgKiwg aW50KSk7Ci0KLXN0YXRpYyBpbnQgdmVyYm9zaXR5ID0gMDsJCS8qIE1lc3NhZ2UgY29udHJvbCAq Lwotc3RhdGljIFZPSUQKLXNldHZlcmJvc2l0eSgpIHsKLSAgICB2ZXJib3NpdHkgPSBzc2xfdmVy Ym9zZV9mbGFnOwotICAgIGlmIChxdWlldCkgdmVyYm9zaXR5ID0gMDsKLX0KLQotaW50Ci0jaWZk ZWYgQ0tfQU5TSUMKLXNzbF9zZXJ2ZXJfdmVyaWZ5X2NhbGxiYWNrKGludCBvaywgWDUwOV9TVE9S RV9DVFggKiBjdHgpCi0jZWxzZSAvKiBDS19BTlNJQyAqLwotc3NsX3NlcnZlcl92ZXJpZnlfY2Fs bGJhY2sob2ssIGN0eCkKLWludCBvazsKLVg1MDlfU1RPUkVfQ1RYICpjdHg7Ci0jZW5kaWYgLyog Q0tfQU5TSUMgKi8KLXsKLSAgICBzdGF0aWMgY2hhciAqc2F2ZWRfc3ViamVjdD1OVUxMOwotICAg IGNoYXIgKnN1YmplY3Q9TlVMTCwgKmlzc3Vlcj1OVUxMOwotICAgIGludCBkZXB0aCxlcnJvcjsK LSAgICBYNTA5ICp4cyA9IE5VTEw7Ci0KLSAgICBpZiAoIHNzbF9jZXJ0c29rX2ZsYWcgKQotICAg ICAgICByZXR1cm4oMSk7Ci0KLSAgICBzZXR2ZXJib3NpdHkoKTsKLQotICAgIGVycm9yPVg1MDlf U1RPUkVfQ1RYX2dldF9lcnJvcihjdHgpOwotICAgIGRlcHRoPVg1MDlfU1RPUkVfQ1RYX2dldF9l cnJvcl9kZXB0aChjdHgpOwotICAgIHhzPVg1MDlfU1RPUkVfQ1RYX2dldF9jdXJyZW50X2NlcnQo Y3R4KTsKLQotICAgIGlmIChkZXB0aD09MCkgewotICAgICAgICAvKiBjbGVhciB0aGluZ3MgKi8K LSAgICAgICAgaWYgKHNhdmVkX3N1YmplY3QhPU5VTEwpIHsKLSAgICAgICAgICAgIGZyZWUoc2F2 ZWRfc3ViamVjdCk7Ci0gICAgICAgICAgICBzYXZlZF9zdWJqZWN0PU5VTEw7Ci0gICAgICAgIH0K LSAgICAgICAgaWYgKGF1dGhfc3NsX25hbWUhPU5VTEwpIHsKLSAgICAgICAgICAgIGZyZWUoYXV0 aF9zc2xfbmFtZSk7Ci0gICAgICAgICAgICBhdXRoX3NzbF9uYW1lPU5VTEw7Ci0gICAgICAgIH0K LSAgICB9Ci0KLQotICAgIGlmIChzc2xfZGVidWdfZmxhZyAmJiAhaW5zZXJ2ZXIpIHsKLSAgICAg ICAgcHJpbnRmKCJzc2w6c2VydmVyX3ZlcmlmeV9jYWxsYmFjazpkZXB0aD0lZCBvaz0lZCBlcnI9 JWQtJXNcclxuIiwKLSAgICAgICAgICAgIGRlcHRoLG9rLGVycm9yLFg1MDlfdmVyaWZ5X2NlcnRf ZXJyb3Jfc3RyaW5nKGVycm9yKSk7Ci0gICAgfQotCi0gICAgLyogZmlyc3QgdGhpbmcgaXMgdG8g aGF2ZSBhIG1lYW5pbmdmdWwgbmFtZSBmb3IgdGhlIGN1cnJlbnQKLSAgICAgKiBjZXJ0aWZpY2F0 ZSB0aGF0IGlzIGJlaW5nIHZlcmlmaWVkIC4uLiBhbmQgaWYgd2UgY2Fubm90Ci0gICAgICogZGV0 ZXJtaW5lIHRoYXQgdGhlbiBzb21ldGhpbmcgaXMgc2VyaW91c2x5IHdyb25nIQotICAgICAqLwot ICAgIG1ha2VzdHIoJnN1YmplY3QsCi0gICAgICAgICAgICAoY2hhciAqKVg1MDlfTkFNRV9vbmVs aW5lKFg1MDlfZ2V0X3N1YmplY3RfbmFtZSh4cyksTlVMTCwwKSk7Ci0gICAgbWFrZXN0cigmaXNz dWVyLAotICAgICAgICAgICAgKGNoYXIgKilYNTA5X05BTUVfb25lbGluZShYNTA5X2dldF9pc3N1 ZXJfbmFtZSh4cyksTlVMTCwwKSk7Ci0gICAgaWYgKCFzdWJqZWN0IHx8ICFzdWJqZWN0WzBdIHx8 ICFpc3N1ZXIgfHwgIWlzc3VlclswXSkgewotICAgICAgICBvayA9IDA7Ci0gICAgICAgIGdvdG8g cmV0dXJuX3RpbWU7Ci0gICAgfQotCi0gICAgaWYgKHZlcmJvc2l0eSAmJiAhaW5zZXJ2ZXIgJiYg ZGVwdGggIT0gc3NsX3ZlcmlmeV9kZXB0aCkgewotICAgICAgICBwcmludGYoIlslZF0gQ2VydGlm aWNhdGUgU3ViamVjdDpcclxuJXNcclxuIixkZXB0aCxzdWJqZWN0KTsKLSAgICAgICAgcHJpbnRm KCJbJWRdIENlcnRpZmljYXRlIElzc3VlcjpcclxuJXNcclxuIixkZXB0aCxpc3N1ZXIpOwotICAg ICAgICBzc2xfdmVyaWZ5X2RlcHRoID0gZGVwdGg7Ci0gICAgfQotCi0gICAgLyogbWFrZSBzdXJl IHRoYXQgdGhlIGNlcnRpZmljYXRlIHRoYXQgaGFzIGJlZW4gcHJlc2VudGVkICovCi0gICAgLyog aGFzIG5vdCBiZWVuIHJldm9rZWQgKGlmIHdlIGhhdmUgYmVlbiBnaXZlbiBhIENSTC4gICAgICov Ci0gICAgb2sgPSAgc3NsX3ZlcmlmeV9jcmwob2ssIGN0eCk7Ci0KLSAgICAvKiBpZiB3ZSBoYXZl IGFueSBmb3JtIG9mIGVycm9yIGluIHNlY3VyZSBtb2RlIHdlIHJlamVjdCB0aGUgY29ubmVjdGlv biAqLwotICAgIGlmIChlcnJvciE9WDUwOV9WX09LKSB7Ci0gICAgICAgIGlmIChpbnNlcnZlcikg ewotI2lmZGVmIENLU1lTTE9HCi0gICAgICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX0xJ ICYmIGNreGxvZ2dpbmcpIHsKLSAgICAgICAgICAgICAgICBja3N5c2xvZyhTWVNMR19MSSwgMCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgIlguNTA5IENlcnRpZmljYXRlIHZlcmlmeSBmYWls dXJlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgc3ViamVjdCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilYNTA5X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmlu ZyhlcnJvcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIH0KLSNl bmRpZiAvKiBDS1NZU0xPRyAqLwotCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAo IHNzbF92ZXJpZnlfZmxhZyAmCi0gICAgICAgICAgICAgICAgIChTU0xfVkVSSUZZX1BFRVIgfCBT U0xfVkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUKSkKLSAgICAgICAgICAgICAgICBwcmludGYo IkVycm9yOiAiKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwcmludGYoIldh cm5pbmc6ICIpOwotICAgICAgICAgICAgc3dpdGNoIChlcnJvcikgewotICAgICAgICAgICAgY2Fz ZSBYNTA5X1ZfRVJSX0RFUFRIX1pFUk9fU0VMRl9TSUdORURfQ0VSVDoKLSAgICAgICAgICAgICAg ICBwcmludGYoIkNlcnRpZmljYXRlIGlzIHNlbGYgc2lnbmVkLlxyXG4iKTsKLSAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgWDUwOV9WX0VSUl9DRVJUX0hBU19FWFBJUkVE OgotICAgICAgICAgICAgICAgIHByaW50ZigiQ2VydGlmaWNhdGUgaGFzIGV4cGlyZWQuXHJcbiIp OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBYNTA5X1ZfRVJSX1VO QUJMRV9UT19HRVRfSVNTVUVSX0NFUlRfTE9DQUxMWToKLSAgICAgICAgICAgICAgICBwcmludGYo Ci0gICJDZXJ0aWZpY2F0ZSBpc3N1ZXIncyBjZXJ0aWZpY2F0ZSBpc24ndCBhdmFpbGFibGUgbG9j YWxseS5cclxuIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFg1 MDlfVl9FUlJfVU5BQkxFX1RPX1ZFUklGWV9MRUFGX1NJR05BVFVSRToKLSAgICAgICAgICAgICAg ICBwcmludGYoIlVuYWJsZSB0byB2ZXJpZnkgbGVhZiBzaWduYXR1cmUuXHJcbiIpOwotICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBYNTA5X1ZfRVJSX0NFUlRfUkVWT0tF RDoKLSAgICAgICAgICAgICAgICBwcmludGYoIkNlcnRpZmljYXRlIHJldm9rZWQuXHJcbiIpOwot ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg ICAgICBwcmludGYoIkVycm9yICVkIHdoaWxlIHZlcmlmeWluZyBjZXJ0aWZpY2F0ZS5cclxuIiwK LSAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5lcnJvcik7Ci0gICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgb2sgPSAhKHNzbF92ZXJpZnlf ZmxhZyAmIFNTTF9WRVJJRllfRkFJTF9JRl9OT19QRUVSX0NFUlQpOwotICAgIH0gZWxzZSB7Ci0g ICAgICAgIC8qIGlmIHdlIGdvdCBhbGwgdGhlIHdheSB0byB0aGUgdG9wIG9mIHRoZSB0cmVlIHRo ZW4KLSAgICAgICAgICogd2UgKmNhbiogdXNlIHRoaXMgY2VydGlmaWNhdGUgZm9yIGEgdXNlcm5h bWUgdG8KLSAgICAgICAgICogbWF0Y2ggLi4uIGluIGFsbCBvdGhlciBjYXNlcyB3ZSBtdXN0IG5v dCEKLSAgICAgICAgICovCi0gICAgICAgIGF1dGhfc3NsX25hbWUgPSBzYXZlZF9zdWJqZWN0Owot ICAgICAgICBzYXZlZF9zdWJqZWN0ID0gTlVMTDsKLSAgICB9Ci0KLSAgcmV0dXJuX3RpbWU6Ci0K LSAgICAvKiBzYXZlIHRoZSBuYW1lIGlmIGF0IGxlYXN0IHRoZSBmaXJzdCBsZXZlbCBpcyBva2F5 ICovCi0gICAgaWYgKGRlcHRoID09IDAgJiYgb2spCi0gICAgICAgIG1ha2VzdHIoJnNhdmVkX3N1 YmplY3Qsc3ViamVjdCk7Ci0KLSAgICAvKiBjbGVhbiB1cCB0aGluZ3MgKi8KLSAgICBpZiAoc3Vi amVjdCE9TlVMTCkKLSAgICAgICAgZnJlZShzdWJqZWN0KTsKLSAgICBpZiAoaXNzdWVyIT1OVUxM KQotICAgICAgICBmcmVlKGlzc3Vlcik7Ci0KLSAgICByZXR1cm4gb2s7Ci19Ci0KLWludAotI2lm ZGVmIENLX0FOU0lDCi1zc2xfY2xpZW50X3ZlcmlmeV9jYWxsYmFjayhpbnQgb2ssIFg1MDlfU1RP UkVfQ1RYICogY3R4KQotI2Vsc2UKLXNzbF9jbGllbnRfdmVyaWZ5X2NhbGxiYWNrKG9rLCBjdHgp Ci1pbnQgb2s7Ci1YNTA5X1NUT1JFX0NUWCAqY3R4OwotI2VuZGlmCi17Ci0gICAgY2hhciBzdWJq ZWN0WzI1Nl09IiIsIGlzc3VlclsyNTZdPSIiOwotICAgIGludCBkZXB0aCwgZXJyb3IsIGxlbjsK LSAgICBYNTA5ICp4czsKLQotICAgIHNldHZlcmJvc2l0eSgpOwotCi0gICAgeHM9WDUwOV9TVE9S RV9DVFhfZ2V0X2N1cnJlbnRfY2VydChjdHgpOwotICAgIGVycm9yPVg1MDlfU1RPUkVfQ1RYX2dl dF9lcnJvcihjdHgpOwotICAgIGRlcHRoPVg1MDlfU1RPUkVfQ1RYX2dldF9lcnJvcl9kZXB0aChj dHgpOwotCi0gICAgaWYgKCBzc2xfZGVidWdfZmxhZyApCi0gICAgICAgIHByaW50Zigic3NsOmNs aWVudF92ZXJpZnlfY2FsbGJhY2s6ZGVwdGg9JWQgb2s9JWQgZXJyPSVkLSVzXHJcbiIsCi0gICAg ICAgICAgICAgICAgZGVwdGgsb2ssZXJyb3IsWDUwOV92ZXJpZnlfY2VydF9lcnJvcl9zdHJpbmco ZXJyb3IpKTsKLQotICAgIGlmICggc3NsX2NlcnRzb2tfZmxhZyApIHsKLSAgICAgICAgb2sgPSAx OwotICAgIH0KLQotICAgIC8qIGZpcnN0IHRoaW5nIGlzIHRvIGhhdmUgYSBtZWFuaW5nZnVsIG5h bWUgZm9yIHRoZSBjdXJyZW50Ci0gICAgICogY2VydGlmaWNhdGUgdGhhdCBpcyBiZWluZyB2ZXJp ZmllZCAuLi4gYW5kIGlmIHdlIGNhbm5vdAotICAgICAqIGRldGVybWluZSB0aGF0IHRoZW4gc29t ZXRoaW5nIGlzIHNlcmlvdXNseSB3cm9uZyEKLSAgICAgKi8KLSNpZmRlZiBYTl9GTEFHX1NFUF9N VUxUSUxJTkUKLSAgICBYNTA5X05BTUVfcHJpbnRfZXgoYmlvX2VycixYNTA5X2dldF9zdWJqZWN0 X25hbWUoeHMpLDQsCi0gICAgICAgICAgICAgICAgICAgICAgICBYTl9GTEFHX1NFUF9NVUxUSUxJ TkUpOwotICAgIGxlbiA9IEJJT19yZWFkKGJpb19lcnIsc3ViamVjdCwyNTYpOwotICAgIHN1Ympl Y3RbbGVuIDwgMjU2ID8gbGVuIDogMjU1XSA9ICdcMCc7Ci0gICAgaWYgKCFzdWJqZWN0WzBdKSB7 Ci0gICAgICAgIEVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7Ci0gICAgICAgIGxlbiA9IEJJT19y ZWFkKGJpb19lcnIsc3NsX2VycixTU0xfRVJSX0JGU1opOwotICAgICAgICBzc2xfZXJyW2xlbiA8 IFNTTF9FUlJfQkZTWiA/IGxlbiA6IFNTTF9FUlJfQkZTWl0gPSAnXDAnOwotICAgICAgICB1cV9v aygiWC41MDkgU3ViamVjdCBOYW1lIHVuYXZhaWxhYmxlIiwgc3NsX2VyciwgMSwgTlVMTCwgMCk7 Ci0gICAgICAgIG9rPTA7Ci0gICAgICAgIGdvdG8gcmV0dXJuX3RpbWU7Ci0gICAgfQotCi0gICAg WDUwOV9OQU1FX3ByaW50X2V4KGJpb19lcnIsWDUwOV9nZXRfaXNzdWVyX25hbWUoeHMpLDQsCi0g ICAgICAgICAgICAgICAgICAgICAgICBYTl9GTEFHX1NFUF9NVUxUSUxJTkUpOwotICAgIGxlbiA9 IEJJT19yZWFkKGJpb19lcnIsaXNzdWVyLDI1Nik7Ci0gICAgaXNzdWVyW2xlbiA8IDI1NiA/IGxl biA6IDI1NV0gPSAnXDAnOwotICAgIGlmICghaXNzdWVyWzBdKSB7Ci0gICAgICAgIEVSUl9wcmlu dF9lcnJvcnMoYmlvX2Vycik7Ci0gICAgICAgIGxlbiA9IEJJT19yZWFkKGJpb19lcnIsc3NsX2Vy cixTU0xfRVJSX0JGU1opOwotICAgICAgICBzc2xfZXJyW2xlbiA8IFNTTF9FUlJfQkZTWiA/IGxl biA6IFNTTF9FUlJfQkZTWl0gPSAnXDAnOwotICAgICAgICB1cV9vaygiWC41MDkgSXNzdWVyIE5h bWUgdW5hdmFpbGFibGUiLCBzc2xfZXJyLCAxLCBOVUxMLCAwKTsKLSAgICAgICAgb2s9MDsKLSAg ICAgICAgZ290byByZXR1cm5fdGltZTsKLSAgICB9Ci0jZWxzZSAvKiBYTl9GTEFHX1NFUF9NVUxU SUxJTkUgKi8KLSAgICBYNTA5X05BTUVfb25lbGluZShYNTA5X2dldF9zdWJqZWN0X25hbWUoeHMp LHN1YmplY3QsMjU2KTsKLSAgICBpZiAoIXN1YmplY3RbMF0pIHsKLSAgICAgICAgaW50IGxlbjsK LSAgICAgICAgRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKLSAgICAgICAgbGVuID0gQklPX3Jl YWQoYmlvX2Vycixzc2xfZXJyLFNTTF9FUlJfQkZTWik7Ci0gICAgICAgIHNzbF9lcnJbbGVuIDwg U1NMX0VSUl9CRlNaID8gbGVuIDogU1NMX0VSUl9CRlNaXSA9ICdcMCc7Ci0gICAgICAgIHVxX29r KCJYLjUwOSBTdWJqZWN0IE5hbWUgdW5hdmFpbGFibGUiLCBzc2xfZXJyLCAxLCBOVUxMLCAwKTsK LSAgICAgICAgb2s9MDsKLSAgICAgICAgZ290byByZXR1cm5fdGltZTsKLSAgICB9Ci0KLSAgICBY NTA5X05BTUVfb25lbGluZShYNTA5X2dldF9pc3N1ZXJfbmFtZSh4cyksaXNzdWVyLDI1Nik7Ci0g ICAgaWYgKCFpc3N1ZXJbMF0pIHsKLSAgICAgICAgaW50IGxlbjsKLSAgICAgICAgRVJSX3ByaW50 X2Vycm9ycyhiaW9fZXJyKTsKLSAgICAgICAgbGVuID0gQklPX3JlYWQoYmlvX2Vycixzc2xfZXJy LFNTTF9FUlJfQkZTWik7Ci0gICAgICAgIHNzbF9lcnJbbGVuIDwgU1NMX0VSUl9CRlNaID8gbGVu IDogU1NMX0VSUl9CRlNaXSA9ICdcMCc7Ci0gICAgICAgIHVxX29rKCJYLjUwOSBJc3N1ZXIgTmFt ZSB1bmF2YWlsYWJsZSIsIHNzbF9lcnIsIDEsIE5VTEwsIDApOwotICAgICAgICBvaz0wOwotICAg ICAgICBnb3RvIHJldHVybl90aW1lOwotICAgIH0KLSNlbmRpZiAvKiBYTl9GTEFHX1NFUF9NVUxU SUxJTkUgKi8KLQotICAgIGlmICh2ZXJib3NpdHkgJiYgZGVwdGggIT0gc3NsX3ZlcmlmeV9kZXB0 aCkgewotICAgICAgICBwcmludGYoIlslZF0gQ2VydGlmaWNhdGUgU3ViamVjdDpcclxuJXNcclxu IixkZXB0aCxzdWJqZWN0KTsKLSAgICAgICAgcHJpbnRmKCJbJWRdIENlcnRpZmljYXRlIElzc3Vl cjpcclxuJXNcclxuIixkZXB0aCxpc3N1ZXIpOwotICAgICAgICBzc2xfdmVyaWZ5X2RlcHRoID0g ZGVwdGg7Ci0gICAgfQotCi0gICAgb2sgPSBzc2xfdmVyaWZ5X2NybChvaywgY3R4KTsKLQotICAg IGlmICggIW9rICkgewotICAgICAgICBjaGFyIHByZWZpeFsxMDI0XTsKLSAgICAgICAgLyogaWYg dGhlIHNlcnZlciBpcyB1c2luZyBhIHNlbGYgc2lnbmVkIGNlcnRpZmljYXRlIHRoZW4KLSAgICAg ICAgICogd2UgbmVlZCB0byBkZWNpZGUgaWYgdGhhdCBpcyBnb29kIGVub3VnaCBmb3IgdXMgdG8K LSAgICAgICAgICogYWNjZXB0IC4uLgotICAgICAgICAgKi8KLQotICAgICAgICBzd2l0Y2ggKCBl cnJvciApIHsKLSAgICAgICAgY2FzZSBYNTA5X1ZfRVJSX0RFUFRIX1pFUk9fU0VMRl9TSUdORURf Q0VSVDogewotICAgICAgICAgICAgaWYgKHNzbF92ZXJpZnlfZmxhZyAmIFNTTF9WRVJJRllfRkFJ TF9JRl9OT19QRUVSX0NFUlQpIHsKLSAgICAgICAgICAgICAgICAvKiBtYWtlIDEwMCUgc3VyZSB0 aGF0IGluIHNlY3VyZSBtb3JlIHdlIGRyb3AgdGhlCi0gICAgICAgICAgICAgICAgICogY29ubmVj dGlvbiBpZiB0aGUgc2VydmVyIGRvZXMgbm90IGhhdmUgYQotICAgICAgICAgICAgICAgICAqIHJl YWwgY2VydGlmaWNhdGUhCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgY2tt YWt4bXNnKHByZWZpeCwxMDI0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yOiBT ZXJ2ZXIgaGFzIGEgc2VsZi1zaWduZWQgY2VydGlmaWNhdGVcbiIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAiWyIsY2tpdG9hKGRlcHRoKSwiXSBDZXJ0aWZpY2F0ZSBTdWJqZWN0PVxuIixz dWJqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuWyIsY2tpdG9hKGRlcHRoKSwi XSBDZXJ0aWZpY2F0ZSBJc3N1ZXI9XG4iLGlzc3VlciwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgIE5VTEwsTlVMTCxOVUxMKTsKLQotICAgICAgICAgICAgICAgIHVxX29rKHByZWZpeCwgIlJl amVjdGluZyBDb25uZWN0aW9uIiwgMSwgTlVMTCwgMCk7Ci0KLSAgICAgICAgICAgICAgICAvKiBz b21ldGltZXMgaXQgaXMgcmVhbGx5IGhhbmR5IHRvIGJlIGFibGUgdG8gZGVidWcgdGhpbmdzCi0g ICAgICAgICAgICAgICAgKiBhbmQgc3RpbGwgZ2V0IGEgY29ubmVjdGlvbiEKLSAgICAgICAgICAg ICAgICAqLwotICAgICAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykgewotICAgICAgICAg ICAgICAgICAgICBwcmludGYoIlNTTDogZGVidWcgLT4gaWdub3JpbmcgY2VydCByZXF1aXJlZCFc clxuIik7Ci0gICAgICAgICAgICAgICAgICAgIG9rPTE7Ci0gICAgICAgICAgICAgICAgfSBlbHNl IHsKLSAgICAgICAgICAgICAgICAgICAgb2s9MDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgZ290byByZXR1cm5fdGltZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3NsX3Zl cmlmeV9mbGFnICE9IFNTTF9WRVJJRllfTk9ORSkgewotICAgICAgICAgICAgICAgIGNrbWFreG1z ZyhwcmVmaXgsMTAyNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJXYXJuaW5nOiBTZXJ2 ZXIgaGFzIGEgc2VsZi1zaWduZWQgY2VydGlmaWNhdGVcbiIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAiWyIsY2tpdG9hKGRlcHRoKSwiXSBDZXJ0aWZpY2F0ZSBTdWJqZWN0PVxuIixzdWJq ZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuWyIsY2tpdG9hKGRlcHRoKSwiXSBD ZXJ0aWZpY2F0ZSBJc3N1ZXI9XG4iLGlzc3VlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg IE5VTEwsTlVMTCxOVUxMKTsKLQotICAgICAgICAgICAgICAgIG9rID0gdXFfb2socHJlZml4LAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbnRpbnVlPyAoWS9OKSAiLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgMywgTlVMTCwgMCk7Ci0gICAgICAgICAgICAgICAgaWYgKCBvayA8 IDAgKQotICAgICAgICAgICAgICAgICAgICBvayA9IDA7Ci0gICAgICAgICAgICAgICAgZ290byBy ZXR1cm5fdGltZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYXNlIFg1MDlf Vl9FUlJfVU5BQkxFX1RPX0dFVF9JU1NVRVJfQ0VSVDoKLSAgICAgICAgICAgIGlmIChzc2xfdmVy aWZ5X2ZsYWcgJiBTU0xfVkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUKSB7Ci0gICAgICAgICAg ICAgICAgLyogbWFrZSAxMDAlIHN1cmUgdGhhdCBpbiBzZWN1cmUgbW9yZSB3ZSBkcm9wIHRoZQot ICAgICAgICAgICAgICAgICAqIGNvbm5lY3Rpb24gaWYgdGhlIHNlcnZlciBkb2VzIG5vdCBoYXZl IGEKLSAgICAgICAgICAgICAgICAgKiByZWFsIGNlcnRpZmljYXRlIQotICAgICAgICAgICAgICAg ICAqLwotICAgICAgICAgICAgICAgIGNrbWFreG1zZyhwcmVmaXgsMTAyNCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICJFcnJvcjogIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChj aGFyICopWDUwOV92ZXJpZnlfY2VydF9lcnJvcl9zdHJpbmcoZXJyb3IpLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlxuQ2VydGlmaWNhdGUgSXNzdWVyPVxuIixpc3N1ZXIsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5V TEwpOwotICAgICAgICAgICAgICAgIHVxX29rKHByZWZpeCwgIlJlamVjdGluZyBDb25uZWN0aW9u IiwgMSwgTlVMTCwgMCk7Ci0KLSAgICAgICAgICAgICAgICAvKiBzb21ldGltZXMgaXQgaXMgcmVh bGx5IGhhbmR5IHRvIGJlIGFibGUgdG8gZGVidWcgdGhpbmdzCi0gICAgICAgICAgICAgICAgKiBh bmQgc3RpbGwgZ2V0IGEgY29ubmVjdGlvbiEKLSAgICAgICAgICAgICAgICAqLwotICAgICAgICAg ICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykgewotICAgICAgICAgICAgICAgICAgICBwcmludGYo IlNTTDogZGVidWcgLT4gaWdub3JpbmcgY2VydCByZXF1aXJlZCFcclxuIik7Ci0gICAgICAgICAg ICAgICAgICAgIG9rPTE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg ICAgICAgb2s9MDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZ290byByZXR1 cm5fdGltZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3NsX3ZlcmlmeV9mbGFnICE9IFNTTF9W RVJJRllfTk9ORSkgewotICAgICAgICAgICAgICAgIGNrbWFreG1zZyhwcmVmaXgsMTAyNCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICJXYXJuaW5nOiAiLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGNoYXIgKilYNTA5X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmluZyhlcnJvciksCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAiXG5DZXJ0aWZpY2F0ZSBJc3N1ZXI9XG4iLGlzc3Vl ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwsTlVMTCk7Ci0gICAgICAgICAgICAgICAgb2sgPSB1cV9vayhwcmVmaXgsICJDb250 aW51ZSAoWS9OKSIsIDMsIE5VTEwsIDApOwotICAgICAgICAgICAgICAgIGdvdG8gcmV0dXJuX3Rp bWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBYNTA5 X1ZfRVJSX0NFUlRfTk9UX1lFVF9WQUxJRDoKLSAgICAgICAgY2FzZSBYNTA5X1ZfRVJSX0VSUk9S X0lOX0NFUlRfTk9UX0JFRk9SRV9GSUVMRDoKLSAgICAgICAgICAgIGlmIChzc2xfdmVyaWZ5X2Zs YWcgJiBTU0xfVkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUKSB7Ci0gICAgICAgICAgICAgICAg aW50IGxlbjsKLSAgICAgICAgICAgICAgICAvKiBtYWtlIDEwMCUgc3VyZSB0aGF0IGluIHNlY3Vy ZSBtb3JlIHdlIGRyb3AgdGhlCi0gICAgICAgICAgICAgICAgICogY29ubmVjdGlvbiBpZiB0aGUg c2VydmVyIGRvZXMgbm90IGhhdmUgYQotICAgICAgICAgICAgICAgICAqIHJlYWwgY2VydGlmaWNh dGUhCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgQVNOMV9USU1FX3ByaW50 KGJpb19lcnIsWDUwOV9nZXRfbm90QmVmb3JlKHhzKSk7Ci0gICAgICAgICAgICAgICAgbGVuID0g QklPX3JlYWQoYmlvX2Vycixzc2xfZXJyLFNTTF9FUlJfQkZTWik7Ci0gICAgICAgICAgICAgICAg c3NsX2VycltsZW4gPCBTU0xfRVJSX0JGU1ogPyBsZW4gOiBTU0xfRVJSX0JGU1pdID0gJ1wwJzsK LSAgICAgICAgICAgICAgICBja21ha3htc2cocHJlZml4LDEwMjQsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAiRXJyb3I6ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAq KVg1MDlfdmVyaWZ5X2NlcnRfZXJyb3Jfc3RyaW5nKGVycm9yKSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICJcbkNlcnRpZmljYXRlIFN1YmplY3Q9XG4iLHN1YmplY3QsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAiXG5ub3RCZWZvcmU9Iixzc2xfZXJyLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgICAgICAgICAg ICAgIHVxX29rKHByZWZpeCwgIlJlamVjdGluZyBDb25uZWN0aW9uIiwgMSwgTlVMTCwgMCk7Ci0g ICAgICAgICAgICAgICAgLyogc29tZXRpbWVzIGl0IGlzIHJlYWxseSBoYW5keSB0byBiZSBhYmxl IHRvIGRlYnVnIHRoaW5ncwotICAgICAgICAgICAgICAgICogYW5kIHN0aWxsIGdldCBhIGNvbm5l Y3Rpb24hCi0gICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBpZiAoc3NsX2RlYnVn X2ZsYWcpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJTU0w6IGRlYnVnIC0+IGlnbm9y aW5nIGNlcnQgcmVxdWlyZWQhXHJcbiIpOwotICAgICAgICAgICAgICAgICAgICBvaz0xOwotICAg ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG9rPTA7Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGdvdG8gcmV0dXJuX3RpbWU7Ci0gICAgICAgICAg ICB9IGVsc2UgaWYgKHNzbF92ZXJpZnlfZmxhZyAhPSBTU0xfVkVSSUZZX05PTkUpIHsKLSAgICAg ICAgICAgICAgICBpbnQgbGVuOwotICAgICAgICAgICAgICAgIEFTTjFfVElNRV9wcmludChiaW9f ZXJyLFg1MDlfZ2V0X25vdEJlZm9yZSh4cykpOwotICAgICAgICAgICAgICAgIGxlbiA9IEJJT19y ZWFkKGJpb19lcnIsc3NsX2VycixTU0xfRVJSX0JGU1opOwotICAgICAgICAgICAgICAgIHNzbF9l cnJbbGVuIDwgU1NMX0VSUl9CRlNaID8gbGVuIDogU1NMX0VSUl9CRlNaXSA9ICdcMCc7Ci0gICAg ICAgICAgICAgICAgY2ttYWt4bXNnKHByZWZpeCwxMDI0LAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIldhcm5pbmc6ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKVg1 MDlfdmVyaWZ5X2NlcnRfZXJyb3Jfc3RyaW5nKGVycm9yKSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICJcbkNlcnRpZmljYXRlIFN1YmplY3Q9XG4iLHN1YmplY3QsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAiXG4gICAgbm90QmVmb3JlPSIsc3NsX2VyciwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICAgICAgICAg ICAgICBvayA9IHVxX29rKHByZWZpeCwgIkNvbnRpbnVlIChZL04pIiwgMywgTlVMTCwgMCk7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBYNTA5X1ZfRVJS X0NFUlRfSEFTX0VYUElSRUQ6Ci0gICAgICAgIGNhc2UgWDUwOV9WX0VSUl9FUlJPUl9JTl9DRVJU X05PVF9BRlRFUl9GSUVMRDoKLSAgICAgICAgICAgIGlmIChzc2xfdmVyaWZ5X2ZsYWcgJiBTU0xf VkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUKSB7Ci0gICAgICAgICAgICAgICAgaW50IGxlbjsK LSAgICAgICAgICAgICAgICAvKiBtYWtlIDEwMCUgc3VyZSB0aGF0IGluIHNlY3VyZSBtb3JlIHdl IGRyb3AgdGhlCi0gICAgICAgICAgICAgICAgICogY29ubmVjdGlvbiBpZiB0aGUgc2VydmVyIGRv ZXMgbm90IGhhdmUgYQotICAgICAgICAgICAgICAgICAqIHJlYWwgY2VydGlmaWNhdGUhCi0gICAg ICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgQVNOMV9USU1FX3ByaW50KGJpb19lcnIs WDUwOV9nZXRfbm90QWZ0ZXIoeHMpKTsKLSAgICAgICAgICAgICAgICBsZW4gPSBCSU9fcmVhZChi aW9fZXJyLHNzbF9lcnIsU1NMX0VSUl9CRlNaKTsKLSAgICAgICAgICAgICAgICBzc2xfZXJyW2xl biA8IFNTTF9FUlJfQkZTWiA/IGxlbiA6IFNTTF9FUlJfQkZTWl0gPSAnXDAnOwotCi0gICAgICAg ICAgICAgICAgY2ttYWt4bXNnKHByZWZpeCwxMDI0LAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIkVycm9yOiAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilYNTA5X3Zl cmlmeV9jZXJ0X2Vycm9yX3N0cmluZyhlcnJvciksCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAiXG5DZXJ0aWZpY2F0ZSBTdWJqZWN0PVxuIixzdWJqZWN0LAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlxuICAgIG5vdEFmdGVyPSIsc3NsX2VyciwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICAgICAgICAgICAgICB1 cV9vayhwcmVmaXgsICJSZWplY3RpbmcgQ29ubmVjdGlvbiIsIDEsIE5VTEwsIDApOwotICAgCi0g ICAgICAgICAgICAgICAgLyogc29tZXRpbWVzIGl0IGlzIHJlYWxseSBoYW5keSB0byBiZSBhYmxl IHRvIGRlYnVnIHRoaW5ncwotICAgICAgICAgICAgICAgICogYW5kIHN0aWxsIGdldCBhIGNvbm5l Y3Rpb24hCi0gICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBpZiAoc3NsX2RlYnVn X2ZsYWcpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJTU0w6IGRlYnVnIC0+IGlnbm9y aW5nIGNlcnQgcmVxdWlyZWQhXHJcbiIpOwotICAgICAgICAgICAgICAgICAgICBvaz0xOwotICAg ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG9rPTA7Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGdvdG8gcmV0dXJuX3RpbWU7Ci0gICAgICAgICAg ICB9IGVsc2UgaWYgKHNzbF92ZXJpZnlfZmxhZyAhPSBTU0xfVkVSSUZZX05PTkUpIHsKLSAgICAg ICAgICAgICAgICBpbnQgbGVuOwotICAgICAgICAgICAgICAgIEFTTjFfVElNRV9wcmludChiaW9f ZXJyLFg1MDlfZ2V0X25vdEFmdGVyKHhzKSk7Ci0gICAgICAgICAgICAgICAgbGVuID0gQklPX3Jl YWQoYmlvX2Vycixzc2xfZXJyLFNTTF9FUlJfQkZTWik7Ci0gICAgICAgICAgICAgICAgc3NsX2Vy cltsZW4gPCBTU0xfRVJSX0JGU1ogPyBsZW4gOiBTU0xfRVJSX0JGU1pdID0gJ1wwJzsKLSAgICAg ICAgICAgICAgICBja21ha3htc2cocHJlZml4LDEwMjQsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAiV2FybmluZzogIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopWDUw OV92ZXJpZnlfY2VydF9lcnJvcl9zdHJpbmcoZXJyb3IpLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIlxuQ2VydGlmaWNhdGUgU3ViamVjdD1cbiIsc3ViamVjdCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICJcbiAgICBub3RBZnRlcj0iLHNzbF9lcnIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0gICAgICAgICAgICAg ICAgb2sgPSB1cV9vayhwcmVmaXgsICJDb250aW51ZSAoWS9OKSIsIDMsIE5VTEwsIDApOwotICAg ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgWDUwOV9WX0VSUl9T RUxGX1NJR05FRF9DRVJUX0lOX0NIQUlOOgotICAgICAgICBjYXNlIFg1MDlfVl9FUlJfVU5BQkxF X1RPX0dFVF9JU1NVRVJfQ0VSVF9MT0NBTExZOgotICAgICAgICAgICAgLyoKLSAgICAgICAgICAg ICAqIFdoZW4gYW4gU1NMIHNlcnZlciBzZW5kcyBpdHMgY2VydGlmaWNhdGVzIHRvIHRoZSBjbGll bnQgdGhlcmUKLSAgICAgICAgICAgICAqIGFyZSB0d28iIGNvbnZlbnRpb25zIjogb25lIGlzIHRv IHNlbmQgdGhlIGNvbXBsZXRlIGNlcnRpZmljYXRlCi0gICAgICAgICAgICAgKiBjaGFpbiBhbmQg dGhlIG90aGVyIGlzIHRvIHNlbmQgdGhlIHdob2xlIGNoYWluIGFwYXJ0IGZyb20gdGhlCi0gICAg ICAgICAgICAgKiByb290LgotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqIFlvdSBkb24n dCB1c3VhbGx5IG5lZWQgdGhlIHJvb3QgYmVjYXVzZSB0aGUgcm9vdCBpcyBub3JtYWxseQotICAg ICAgICAgICAgICogc3RvcmVkIGFuZCB0cnVzdGVkIGxvY2FsbHkuCi0gICAgICAgICAgICAgKgot ICAgICAgICAgICAgICogU28gaWYgeW91IGdldCB0aGUgd2hvbGUgY2hhaW4gaXQgd2lsbCBjb21w bGFpbiBhYm91dCB0aGUgc2VsZgotICAgICAgICAgICAgICogc2lnbmVkIGNlcnRpZmljYXRlIHdo ZXJlYXMgaWYgdGhlIHJvb3QgaXMgbWlzc2luZyBpdCBzYXlzIGl0Ci0gICAgICAgICAgICAgKiBj YW4ndCBmaW5kIHRoZSBpc3N1ZXIgY2VydGlmaWNhdGUuCi0gICAgICAgICAgICAgKi8KLSAgICAg ICAgICAgIGlmIChzc2xfdmVyaWZ5X2ZsYWcgJiBTU0xfVkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9D RVJUKSB7Ci0gICAgICAgICAgICAgICAgLyogbWFrZSAxMDAlIHN1cmUgdGhhdCBpbiBzZWN1cmUg bW9yZSB3ZSBkcm9wIHRoZQotICAgICAgICAgICAgICAgICAqIGNvbm5lY3Rpb24gaWYgdGhlIHNl cnZlciBkb2VzIG5vdCBoYXZlIGEKLSAgICAgICAgICAgICAgICAgKiByZWFsIGNlcnRpZmljYXRl IQotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGNrbWFreG1zZyhwcmVmaXgs MTAyNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvcjogIiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgIChjaGFyICopWDUwOV92ZXJpZnlfY2VydF9lcnJvcl9zdHJpbmcoZXJy b3IpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuQ2VydGlmaWNhdGUgSXNzdWVyPVxu Iixpc3N1ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxM LE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgICAgICAgICAgICAgIHVxX29rKHByZWZpeCwgIlJl amVjdGluZyBDb25uZWN0aW9uIiwgMSwgTlVMTCwgMCk7Ci0gICAgICAgICAgICAgICAgLyogc29t ZXRpbWVzIGl0IGlzIHJlYWxseSBoYW5keSB0byBiZSBhYmxlIHRvIGRlYnVnIHRoaW5ncwotICAg ICAgICAgICAgICAgICogYW5kIHN0aWxsIGdldCBhIGNvbm5lY3Rpb24hCi0gICAgICAgICAgICAg ICAgKi8KLSAgICAgICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpIHsKLSAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCJTU0w6IGRlYnVnIC0+IGlnbm9yaW5nIGNlcnQgcmVxdWlyZWQhXHJc biIpOwotICAgICAgICAgICAgICAgICAgICBvaz0xOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICAgICAgICAgIG9rPTA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgIGdvdG8gcmV0dXJuX3RpbWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNzbF92ZXJp ZnlfZmxhZyAhPSBTU0xfVkVSSUZZX05PTkUpIHsKLSAgICAgICAgICAgICAgICBja21ha3htc2co cHJlZml4LDEwMjQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiV2FybmluZzogIiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopWDUwOV92ZXJpZnlfY2VydF9lcnJvcl9z dHJpbmcoZXJyb3IpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuQ2VydGlmaWNhdGUg SXNzdWVyPVxuIixpc3N1ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEws TlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgICAgICAgICAgICAgIG9rID0gdXFf b2socHJlZml4LCAiQ29udGludWUgKFkvTikiLCAzLCBOVUxMLCAwKTsKLSNpZmRlZiBOVAotICAg ICAgICAgICAgICAgIGlmIChvaykgewotICAgICAgICAgICAgICAgICAgICAvKiBpZiB0aGUgdXNl ciBkZWNpZGVzIHRvIGFjY2VwdCB0aGUgY2VydGlmaWNhdGUKLSAgICAgICAgICAgICAgICAgICAg ICogb2ZmZXIgdG8gc3RvcmUgaXQgZm9yIGZ1dHVyZSBjb25uZWN0aW9ucyBpbiAKLSAgICAgICAg ICAgICAgICAgICAgICogdGhlIHVzZXIncyBwcml2YXRlIHN0b3JlCi0gICAgICAgICAgICAgICAg ICAgICAqLwotICAgICAgICAgICAgICAgICAgICBvayA9IHVxX29rKAotICAiRG8geW91IHdpc2gg dG8gc3RvcmUgdGhlIGNlcnRpZmljYXRlIHRvIHZlcmlmeSBmdXR1cmUgY29ubmVjdGlvbnM/IiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGludWUgKFkvTikiLCAzLCBOVUxM LCAwKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9rKQotICAgICAgICAgICAgICAgICAgICAg ICAgY2tfWDUwOV9zYXZlX2NlcnRfdG9fdXNlcl9zdG9yZSh4cyk7Ci0gICAgICAgICAgICAgICAg fQotI2VuZGlmIC8qIE5UICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAg ICAgICAgY2FzZSBYNTA5X1ZfRVJSX1VOQUJMRV9UT19WRVJJRllfTEVBRl9TSUdOQVRVUkU6Ci0g ICAgICAgIGNhc2UgWDUwOV9WX0VSUl9VTkFCTEVfVE9fR0VUX0NSTDoKLSAgICAgICAgY2FzZSBY NTA5X1ZfRVJSX1VOQUJMRV9UT19ERUNSWVBUX0NFUlRfU0lHTkFUVVJFOgotICAgICAgICBjYXNl IFg1MDlfVl9FUlJfVU5BQkxFX1RPX0RFQ1JZUFRfQ1JMX1NJR05BVFVSRToKLSAgICAgICAgY2Fz ZSBYNTA5X1ZfRVJSX1VOQUJMRV9UT19ERUNPREVfSVNTVUVSX1BVQkxJQ19LRVk6Ci0gICAgICAg IGNhc2UgWDUwOV9WX0VSUl9DRVJUX1NJR05BVFVSRV9GQUlMVVJFOgotICAgICAgICBjYXNlIFg1 MDlfVl9FUlJfQ1JMX1NJR05BVFVSRV9GQUlMVVJFOgotICAgICAgICBjYXNlIFg1MDlfVl9FUlJf Q1JMX05PVF9ZRVRfVkFMSUQ6Ci0gICAgICAgIGNhc2UgWDUwOV9WX0VSUl9DUkxfSEFTX0VYUElS RUQ6Ci0gICAgICAgIGNhc2UgWDUwOV9WX0VSUl9FUlJPUl9JTl9DUkxfTEFTVF9VUERBVEVfRklF TEQ6Ci0gICAgICAgIGNhc2UgWDUwOV9WX0VSUl9FUlJPUl9JTl9DUkxfTkVYVF9VUERBVEVfRklF TEQ6Ci0gICAgICAgIGNhc2UgWDUwOV9WX0VSUl9PVVRfT0ZfTUVNOgotICAgICAgICBjYXNlIFg1 MDlfVl9FUlJfQ0VSVF9DSEFJTl9UT09fTE9ORzoKLSAgICAgICAgY2FzZSBYNTA5X1ZfRVJSX0NF UlRfUkVWT0tFRDoKLSAgICAgICAgY2FzZSBYNTA5X1ZfRVJSX0FQUExJQ0FUSU9OX1ZFUklGSUNB VElPTjoKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlmIChzc2xfdmVyaWZ5X2ZsYWcg JiBTU0xfVkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUKSB7Ci0gICAgICAgICAgICAgICAgLyog bWFrZSAxMDAlIHN1cmUgdGhhdCBpbiBzZWN1cmUgbW9kZSB3ZSBkcm9wIHRoZQotICAgICAgICAg ICAgICAgICAqIGNvbm5lY3Rpb24gaWYgdGhlIHNlcnZlciBkb2VzIG5vdCBoYXZlIGEKLSAgICAg ICAgICAgICAgICAgKiByZWFsIGNlcnRpZmljYXRlIQotICAgICAgICAgICAgICAgICAqLwotICAg ICAgICAgICAgICAgIGNrbWFreG1zZyhwcmVmaXgsMTAyNCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICJFcnJvcjogIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopWDUw OV92ZXJpZnlfY2VydF9lcnJvcl9zdHJpbmcoZXJyb3IpLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIlxuQ2VydGlmaWNhdGUgU3ViamVjdD1cbiIsc3ViamVjdCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0g ICAgICAgICAgICAgICAgdXFfb2socHJlZml4LCAiUmVqZWN0aW5nIENvbm5lY3Rpb24iLCAxLCBO VUxMLCAwKTsKLQotICAgICAgICAgICAgICAgIC8qIHNvbWV0aW1lcyBpdCBpcyByZWFsbHkgaGFu ZHkgdG8gYmUgYWJsZSB0byBkZWJ1ZyB0aGluZ3MKLSAgICAgICAgICAgICAgICAqIGFuZCBzdGls bCBnZXQgYSBjb25uZWN0aW9uIQotICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAg aWYgKHNzbF9kZWJ1Z19mbGFnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiU1NMOiBk ZWJ1ZyAtPiBpZ25vcmluZyBjZXJ0IHJlcXVpcmVkIVxyXG4iKTsKLSAgICAgICAgICAgICAgICAg ICAgb2s9MTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBv az0wOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBnb3RvIHJldHVybl90aW1l OwotICAgICAgICAgICAgfSBlbHNlIGlmIChzc2xfdmVyaWZ5X2ZsYWcgIT0gU1NMX1ZFUklGWV9O T05FKSB7Ci0gICAgICAgICAgICAgICAgY2ttYWt4bXNnKHByZWZpeCwxMDI0LAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIldhcm5pbmc6ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAoY2hhciAqKVg1MDlfdmVyaWZ5X2NlcnRfZXJyb3Jfc3RyaW5nKGVycm9yKSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICJcbkNlcnRpZmljYXRlIFN1YmplY3Q9XG4iLHN1YmplY3QsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwpOwotICAgICAgICAgICAgICAgIG9rID0gdXFfb2socHJlZml4LCAiQ29udGludWUg KFkvTikiLCAzLCBOVUxMLCAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICB9Ci0gICAgfQotCi0gIHJldHVybl90aW1lOgotICAgIGlmICggc3NsX2RlYnVnX2Zs YWcgKQotICAgICAgICBwcmludGYoInNzbDpjbGllbnRfdmVyaWZ5X2NhbGxiYWNrID0+IG9rOiAl ZFxyXG4iLG9rKTsKLSAgICByZXR1cm4gb2s7Ci19Ci0KLVZPSUQKLSNpZmRlZiBDS19BTlNJQwot c3NsX2NsaWVudF9pbmZvX2NhbGxiYWNrKGNvbnN0IFNTTCAqcywgaW50IHdoZXJlLCBpbnQgcmV0 KQotI2Vsc2UKLXNzbF9jbGllbnRfaW5mb19jYWxsYmFjayhzLHdoZXJlLHJldCkKLWNvbnN0IFNT TCAqczsKLWludCB3aGVyZTsKLWludCByZXQ7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAg ICBpZiAoaW5zZXJ2ZXIgfHwgIXNzbF9kZWJ1Z19mbGFnKQotICAgICAgICByZXR1cm47Ci0KLSAg ICBzZXR2ZXJib3NpdHkoKTsKLQotICAgIHN3aXRjaCAoIHdoZXJlICkgewotICAgIGNhc2UgU1NM X0NCX0NPTk5FQ1RfTE9PUDoKLSAgICAgICAgcHJpbnRmKCJTU0xfY29ubmVjdDolcyAlc1xyXG4i LAotICAgICAgICAgICAgICAgIFNTTF9zdGF0ZV9zdHJpbmcoKFNTTCAqKXMpLFNTTF9zdGF0ZV9z dHJpbmdfbG9uZygoU1NMICopcykpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNTTF9DQl9D T05ORUNUX0VYSVQ6Ci0gICAgICAgIGlmIChyZXQgPT0gMCkgewotICAgICAgICAgICAgcHJpbnRm KCJTU0xfY29ubmVjdDpmYWlsZWQgaW4gJXMgJXNcclxuIiwKLSAgICAgICAgICAgICAgICAgICAg U1NMX3N0YXRlX3N0cmluZygoU1NMICopcyksU1NMX3N0YXRlX3N0cmluZ19sb25nKChTU0wgKilz KSk7Ci0gICAgICAgIH0gZWxzZSBpZiAocmV0IDwgMCkgewotICAgICAgICAgICAgcHJpbnRmKCJT U0xfY29ubmVjdDplcnJvciBpbiAlcyAlc1xyXG4iLAotICAgICAgICAgICAgICAgICAgICBTU0xf c3RhdGVfc3RyaW5nKChTU0wgKilzKSxTU0xfc3RhdGVfc3RyaW5nX2xvbmcoKFNTTCAqKXMpKTsK LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNTTF9DQl9BQ0NFUFRfTE9PUDoK LSAgICAgICAgcHJpbnRmKCJTU0xfYWNjZXB0OiVzICVzXHJcbiIsCi0gICAgICAgICAgICAgICAg U1NMX3N0YXRlX3N0cmluZygoU1NMICopcyksU1NMX3N0YXRlX3N0cmluZ19sb25nKChTU0wgKilz KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1NMX0NCX0FDQ0VQVF9FWElUOgotICAgICAg ICBpZiAocmV0ID09IDApIHsKLSAgICAgICAgICAgIHByaW50ZigiU1NMX2FjY2VwdDpmYWlsZWQg aW4gJXMgJXNcclxuIiwKLSAgICAgICAgICAgICAgICAgICAgU1NMX3N0YXRlX3N0cmluZygoU1NM ICopcyksU1NMX3N0YXRlX3N0cmluZ19sb25nKChTU0wgKilzKSk7Ci0gICAgICAgIH0gZWxzZSBp ZiAocmV0IDwgMCkgewotICAgICAgICAgICAgcHJpbnRmKCJTU0xfYWNjZXB0OmVycm9yIGluICVz ICVzXHJcbiIsCi0gICAgICAgICAgICAgICAgICAgIFNTTF9zdGF0ZV9zdHJpbmcoKFNTTCAqKXMp LFNTTF9zdGF0ZV9zdHJpbmdfbG9uZygoU1NMICopcykpOwotICAgICAgICB9Ci0gICAgICAgIGJy ZWFrOwotICAgIGNhc2UgU1NMX0NCX1JFQURfQUxFUlQ6Ci0gICAgICAgIHByaW50ZigiU1NMX3Jl YWRfYWxlcnRcclxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1NMX0NCX1dSSVRFX0FM RVJUOgotICAgICAgICBwcmludGYoIlNTTF93cml0ZV9hbGVydFxyXG4iKTsKLSAgICAgICAgYnJl YWs7Ci0gICAgY2FzZSBTU0xfQ0JfSEFORFNIQUtFX1NUQVJUOgotICAgICAgICBwcmludGYoIlNT TF9oYW5kc2hha2U6JXMgJXNcclxuIiwKLSAgICAgICAgICAgICAgICBTU0xfc3RhdGVfc3RyaW5n KChTU0wgKilzKSxTU0xfc3RhdGVfc3RyaW5nX2xvbmcoKFNTTCAqKXMpKTsKLSAgICAgICAgYnJl YWs7Ci0gICAgY2FzZSBTU0xfQ0JfSEFORFNIQUtFX0RPTkU6Ci0gICAgICAgIHByaW50ZigiU1NM X2hhbmRzaGFrZTolcyAlc1xyXG4iLAotICAgICAgICAgICAgICAgIFNTTF9zdGF0ZV9zdHJpbmco KFNTTCAqKXMpLFNTTF9zdGF0ZV9zdHJpbmdfbG9uZygoU1NMICopcykpOwotICAgICAgICBicmVh azsKLSAgICB9Ci19Ci0KLSNpZmRlZiBVU0VfQ0VSVF9DQgotLyogUmV0dXJuIDEsIGNsaWVudCBj ZXJ0IGlzIGF2YWlsYWJsZSAqLwotLyogUmV0dXJuIDAsIG5vIGNsaWVudCBjZXJ0IGlzIGF2YWls YWJsZSAqLwotLyogUmV0dXJuIC0xLCBjYWxsYmFjayBtdXN0IGJlIGNhbGxlZCBhZ2Fpbi4gU1NM X3dhbnRfeDUwOV9sb29rdXAoKSA9PSAxICovCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotc3NsX2Ns aWVudF9jZXJ0X2NhbGxiYWNrKFNTTCAqIHMsIFg1MDkgKiogeDUwOSwgRVZQX1BLRVkgKiogcGtl eSkKLSNlbHNlIC8qIENLX0FOU0lDICovCi1zc2xfY2xpZW50X2NlcnRfY2FsbGJhY2socywgeDUw OSwgcGtleSkKLSAgICBTU0wgKiBzOwotICAgIFg1MDkgKiogeDUwOTsKLSAgICBFVlBfUEtFWSAq KiBwa2V5OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgc2V0dmVyYm9zaXR5KCk7Ci0K LSAgICBpZiAoIHNzbF9kZWJ1Z19mbGFnICkgewotICAgICAgICBjb25zdCBjaGFyICogY2lwaGVy X2xpc3Q9U1NMX2dldF9jaXBoZXIocyk7Ci0gICAgICAgIHByaW50Zigic3NsX2NsaWVudF9jZXJ0 X2NhbGxiYWNrIGNhbGxlZCAoJXMpXHJcbiIsCi0gICAgICAgICAgICAgICAgY2lwaGVyX2xpc3Q/ Y2lwaGVyX2xpc3Q6IlVOS05PV04iKTsKLSAgICB9Ci0jaWZkZWYgQ09NTUVOVAotICAgIGlmICgg cyA9PSB0bHNfY29uICkgewotICAgICAgICBpZiAodGxzX2xvYWRfY2VydHModGxzX2N0cyx0bHNf Y29uLDApKSB7Ci0gICAgICAgICAgICAqeDUwOSA9IFNTTF9nZXRfY2VydGlmaWNhdGUocyk7Ci0g ICAgICAgICAgICAqcGtleSA9IFNTTF9nZXRfcHJpdmF0ZWtleShzKTsKLSAgICAgICAgICAgIHJl dHVybigxKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoIHMgPT0gc3NsX2NvbiApIHsKLSAg ICAgICAgaWYgKHRsc19sb2FkX2NlcnRzKHNzbF9jdHgsc3NsX2NvbiwwKSkgewotICAgICAgICAg ICAgKng1MDkgPSBTU0xfZ2V0X2NlcnRpZmljYXRlKHMpOwotICAgICAgICAgICAgKnBrZXkgPSBT U0xfZ2V0X3ByaXZhdGVrZXkocyk7Ci0gICAgICAgICAgICByZXR1cm4oMSk7Ci0gICAgICAgIH0K LSAgICB9Ci0gICAgcmV0dXJuKDApOwotI2Vsc2UgLyogQ09NTUVOVCAqLwotICAgIHJldHVybigw KTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi19Ci0jZW5kaWYgLyogVVNFX0NFUlRfQ0IgKi8KLQot I2lmbmRlZiBNU19DQUxMQkFDSwotI2RlZmluZSBNU19DQUxMQkFDSwotI2VuZGlmIC8qIE1TX0NB TExCQUNLICovCi0KLXN0YXRpYyBSU0EgTVNfQ0FMTEJBQ0sgKgotI2lmZGVmIENLX0FOU0lDCi10 bXBfcnNhX2NiKFNTTCAqIHMsIGludCBleHBvcnQsIGludCBrZXlsZW5ndGgpCi0jZWxzZSAvKiBD S19BTlNJQyAqLwotdG1wX3JzYV9jYihzLGV4cG9ydCxrZXlsZW5ndGgpCi1TU0wgKnM7Ci1pbnQg ZXhwb3J0OwotaW50IGtleWxlbmd0aDsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIHN0 YXRpYyBSU0EgKnJzYV90bXA9TlVMTDsKLQotI2lmbmRlZiBOT19SU0EKLSAgICBpZiAocnNhX3Rt cCA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQotICAgICAgICAg ICAgcHJpbnRmKCJHZW5lcmF0aW5nIHRlbXBvcmFyeSAoJWQgYml0KSBSU0Ega2V5Li4uXHJcbiIs a2V5bGVuZ3RoKTsKLQotICAgICAgICByc2FfdG1wPVJTQV9nZW5lcmF0ZV9rZXkoa2V5bGVuZ3Ro LFJTQV9GNCxOVUxMLE5VTEwpOwotCi0gICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKLSAgICAg ICAgICAgIHByaW50ZigiXHJcbiIpOwotICAgIH0KLSNlbHNlIC8qIE5PX1JTQSAqLwotICAgIGlm IChzc2xfZGVidWdfZmxhZykKLSAgICAgICAgcHJpbnRmKCJVbmFibGUgdG8gZ2VuZXJhdGUgdGVt cG9yYXJ5IFJTQSBrZXkuLi5cclxuIik7Ci0jZW5kaWYKLSAgICByZXR1cm4ocnNhX3RtcCk7Ci19 Ci0KLQotI2lmbmRlZiBOT19ESAotc3RhdGljIHVuc2lnbmVkIGNoYXIgZGg1MTJfcFtdPXsKLSAg ICAweEU5LDB4NEUsMHgzQSwweDY0LDB4RkEsMHg2NSwweDVGLDB4QTYsMHg0NCwweEM3LDB4RkMs MHhGMSwKLSAgICAweDE2LDB4OEIsMHgxMSwweDExLDB4N0EsMHhGMCwweEIyLDB4NDksMHg4MCww eDU2LDB4QTMsMHhGOCwKLSAgICAweDBGLDB4N0QsMHgwMSwweDY4LDB4NUQsMHhGNiwweDhBLDB4 RUEsMHg4QywweERELDB4MDEsMHhEQywKLSAgICAweDQzLDB4MTgsMHhFMCwweEM0LDB4ODksMHg4 MCwweEU2LDB4MkQsMHg0NCwweDc3LDB4NDUsMHhGRCwKLSAgICAweEJBLDB4RkMsMHg0MywweDM1 LDB4MTIsMHhDMCwweEVELDB4MzIsMHhEMywweDE2LDB4RUYsMHg1MSwKLSAgICAweDA5LDB4NDQs MHhBMiwweERCLAotfTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGRoNTEyX2dbXT17Ci0gICAgMHgw NSwKLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGRoNzY4X3BbXT17Ci0gICAgMHg4QiwweDJB LDB4OEMsMHg2QywweDBGLDB4ODcsMHhDNywweDM0LDB4RUUsMHgyRSwweEZCLDB4NjAsCi0gICAg MHg5NCwweEIzLDB4QkYsMHg5NSwweEJBLDB4ODQsMHg3NCwweDg2LDB4RUEsMHhFMCwweEE0LDB4 MzMsCi0gICAgMHhFMCwweDhGLDB4N0MsMHg3OSwweDVDLDB4NjIsMHhFMiwweDkxLDB4QzUsMHg2 RCwweDY4LDB4QjksCi0gICAgMHg2QywweDVFLDB4NEUsMHg5NCwweDBDLDB4OEUsMHg1NiwweDhF LDB4RUIsMHg5OCwweDdDLDB4NkUsCi0gICAgMHgwRSwweEYyLDB4RDUsMHhBQSwweDIyLDB4Mjcs MHgzRiwweDBGLDB4QUYsMHgxMCwweEI1LDB4MEIsCi0gICAgMHgxNiwweENDLDB4MDUsMHgyNyww eEJCLDB4NTgsMHg2RCwweDYxLDB4NEIsMHgyQiwweEFCLDB4REMsCi0gICAgMHg2QSwweDE1LDB4 QkMsMHgzNiwweDc1LDB4NEQsMHhFQywweEFCLDB4RkEsMHhCNiwweEUxLDB4QjEsCi0gICAgMHgx MywweDcwLDB4RDgsMHg3NywweENELDB4NUUsMHg1MSwweDc3LDB4ODEsMHgwRCwweDc3LDB4NDMs Ci19Owotc3RhdGljIHVuc2lnbmVkIGNoYXIgZGg3NjhfZ1tdPXsKLSAgICAweDA1LAotfTsKLQot c3RhdGljIHVuc2lnbmVkIGNoYXIgZGgxMDI0X3BbXT17Ci0gICAgMHhBNCwweDc1LDB4Q0YsMHgz NSwweDAwLDB4QUYsMHgzQywweDE3LDB4Q0UsMHhCMCwweEQwLDB4NTIsCi0gICAgMHg0MywweEEw LDB4MEUsMHhGQSwweEEyLDB4QzksMHhCRSwweDBCLDB4NzYsMHg3QSwweEQ5LDB4MkUsCi0gICAg MHhGNCwweDk3LDB4QUMsMHgwMiwweDI0LDB4NjksMHhGNiwweDM2LDB4NEYsMHhBQiwweENDLDB4 NDMsCi0gICAgMHhDMSwweDc0LDB4RkYsMHhBMywweEQ0LDB4MDQsMHgwRiwweDExLDB4MkIsMHg2 RCwweDhDLDB4NDcsCi0gICAgMHhDOSwweENGLDB4NDAsMHg5MywweDlCLDB4N0QsMHgxRSwweDUy LDB4ODUsMHhCMiwweDE3LDB4NTUsCi0gICAgMHg5QywweEYyLDB4NDEsMHgwMiwweDJBLDB4OUQs MHg1RiwweDI0LDB4MjIsMHhDNiwweDA0LDB4QzQsCi0gICAgMHhBQiwweDkyLDB4NkQsMHhDNyww eEM4LDB4RjMsMHg0MSwweDU4LDB4NkMsMHg4NiwweEZELDB4QjgsCi0gICAgMHgwRiwweDJELDB4 REQsMHhCRiwweEE4LDB4NDAsMHgwQywweDU4LDB4QzgsMHhGMiwweDNGLDB4MTgsCi0gICAgMHhF RiwweEYxLDB4OTMsMHgzRSwweEJBLDB4MTYsMHg0MSwweEJFLDB4MzIsMHg2QywweEM1LDB4NjMs Ci0gICAgMHhGRiwweDhBLDB4MDIsMHgzRCwweEFDLDB4RDUsMHg1QSwweDQ5LDB4NjQsMHgzNCww eDE0LDB4MkUsCi0gICAgMHhGQiwweDJFLDB4RTcsMHgzOSwweDFBLDB4MEYsMHgzQywweDMzLAot fTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGRoMTAyNF9nW109ewotICAgIDB4MDUsCi19OwotCi1z dGF0aWMgdW5zaWduZWQgY2hhciBkaDE1MzZfcFtdPXsKLSAgICAweEEzLDB4MkIsMHg3NSwweDBF LDB4N0IsMHgzMSwweDgyLDB4Q0EsMHhGMiwweEZDLDB4RjMsMHgzRCwKLSAgICAweENFLDB4NUYs MHhDRCwweDVCLDB4OTUsMHhGNiwweDJGLDB4QTQsMHg1RCwweDA4LDB4MjYsMHhEMiwKLSAgICAw eDVGLDB4QzAsMHgzRiwweEM1LDB4RDgsMHhBMiwweEZFLDB4ODMsMHgyNiwweEJDLDB4RUIsMHg3 RCwKLSAgICAweEYwLDB4NEUsMHhEMiwweEE2LDB4QkIsMHgzQywweDg4LDB4NjMsMHhDRSwweDk4 LDB4REUsMHgwOCwKLSAgICAweEUyLDB4RTEsMHhBRiwweEUyLDB4MzgsMHhBOCwweEZBLDB4Njgs MHg3NiwweDhELDB4QkYsMHhERiwKLSAgICAweEJCLDB4MzAsMHgxNSwweEZFLDB4QkQsMHgyMiww eENDLDB4MDMsMHg0RSwweDVFLDB4MzMsMHhBMywKLSAgICAweDZELDB4RDYsMHg2OCwweDEyLDB4 OTcsMHgxNywweDRCLDB4QjUsMHg4NCwweDVGLDB4NUYsMHhBMywKLSAgICAweDVDLDB4MkYsMHhB NCwweDEwLDB4QzEsMHhBRCwweEJGLDB4QUMsMHgzMCwweENBLDB4NDcsMHg2NCwKLSAgICAweDYz LDB4RkUsMHhFRSwweEVFLDB4QTEsMHg2NCwweDczLDB4NzAsMHhBQSwweEY5LDB4RkUsMHhDNiwK LSAgICAweEFELDB4NUUsMHhGNiwweEYzLDB4OUMsMHhERiwweDM0LDB4NTMsMHgzNCwweDcyLDB4 QTYsMHhBNCwKLSAgICAweEJCLDB4ODEsMHg1QSwweDQzLDB4NDEsMHhGRCwweDQxLDB4MDUsMHg1 QiwweDc3LDB4N0IsMHg4NCwKLSAgICAweDAzLDB4RkEsMHg4QSwweEZBLDB4RjcsMHg4RSwweDBG LDB4Q0IsMHg1MSwweEEyLDB4QjgsMHg0NSwKLSAgICAweEZGLDB4NTksMHg0MiwweEVGLDB4Q0Ys MHhGNiwweDI1LDB4MzcsMHhFMiwweDZELDB4RkYsMHg2OSwKLSAgICAweDExLDB4RjUsMHg3Nyww eDU5LDB4NzksMHgxQywweDVGLDB4MDUsMHhGQywweDdBLDB4NjUsMHg4MSwKLSAgICAweDAzLDB4 NEEsMHg3OCwweEM2LDB4RTksMHg0OCwweDczLDB4RjYsMHgxMCwweEJDLDB4OTksMHgxQywKLSAg ICAweEVFLDB4NDQsMHgyRiwweDhCLDB4NzAsMHhDQSwweEE4LDB4QjYsMHgwMiwweDgzLDB4M0Us MHgwQiwKLX07Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBkaDE1MzZfZ1tdPXsKLSAgICAweDA1LAot fTsKLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgZGgyMDQ4X3BbXT17Ci0gICAgMHhGQSwweDRFLDB4 RTQsMHgzQiwweEZBLDB4QzEsMHg4NywweERELDB4RTcsMHhDNiwweDhCLDB4RTYsCi0gICAgMHgx MywweDg1LDB4QkMsMHg5QiwweDJCLDB4OEIsMHg1QiwweDQ2LDB4QkIsMHg4QiwweDg2LDB4NkQs Ci0gICAgMHhENywweEI2LDB4RDUsMHg0OSwweEM1LDB4NTQsMHhGMiwweDNFLDB4RDIsMHgzOSww eDY0LDB4OUIsCi0gICAgMHgwRSwweDMzLDB4MzksMHg4RiwweEZBLDB4RkEsMHhEOSwweDc4LDB4 RUQsMHgzNCwweDgyLDB4MjksCi0gICAgMHgzNywweDU4LDB4NEQsMHg1RCwweDQwLDB4Q0IsMHg2 OSwweEUzLDB4OEEsMHg5RiwweDE3LDB4MEMsCi0gICAgMHgwMSwweDIzLDB4NkIsMHgwNSwweDAx LDB4QUYsMHgzMywweERFLDB4REYsMHgxQSwweEJCLDB4N0IsCi0gICAgMHg2QSwweDlGLDB4RDgs MHhFRCwweDhELDB4NUUsMHg0NCwweDE5LDB4NUIsMHhFMCwweEI2LDB4MjMsCi0gICAgMHhGOSww eDdBLDB4OTYsMHg2RSwweDk0LDB4MzMsMHgzMSwweDQ5LDB4QkEsMHg4NCwweEQ1LDB4MTIsCi0g ICAgMHhENywweDZELDB4REMsMHgzNSwweDU0LDB4NjQsMHhBMywweEQ4LDB4MDQsMHgyNiwweEM1 LDB4QUYsCi0gICAgMHg3RiwweEUzLDB4RkUsMHg2RiwweEJFLDB4RDUsMHgxNywweDcyLDB4NEIs MHhBNiwweEQwLDB4QTcsCi0gICAgMHg1RiwweDE4LDB4RjUsMHhGMCwweDJELDB4MTEsMHg5QSww eEY2LDB4RDUsMHgzQiwweDZDLDB4NjEsCi0gICAgMHgzQywweDZGLDB4OEUsMHgwOSwweDRGLDB4 MkMsMHhFMSwweDI2LDB4MDYsMHg1MSwweEIzLDB4MTksCi0gICAgMHg4NSwweDg1LDB4MTMsMHhG OSwweEMyLDB4NkUsMHg4MCwweDI4LDB4OUUsMHg4QSwweEEwLDB4MDEsCi0gICAgMHg0NiwweEQx LDB4ODUsMHg0NCwweDhDLDB4RTYsMHhFRSwweDdFLDB4MUUsMHgxNywweDNELDB4QkEsCi0gICAg MHg1NCwweEZGLDB4RTgsMHgwRSwweERELDB4NTEsMHhGMywweDc0LDB4N0YsMHgwRCwweDBCLDB4 QUIsCi0gICAgMHhDQSwweDg0LDB4OEQsMHgyNCwweDVELDB4NTYsMHhENCwweDQ3LDB4MDIsMHhG QywweDkzLDB4OUYsCi0gICAgMHhBRSwweDlCLDB4NUMsMHhEQiwweDYzLDB4RUIsMHg2NSwweDAx LDB4MzgsMHhDMiwweDdCLDB4MzAsCi0gICAgMHgxRSwweDE3LDB4MUMsMHg3NSwweEY1LDB4MTYs MHgzQiwweDRGLDB4NUYsMHg0MSwweDMyLDB4QjUsCi0gICAgMHhGRiwweDlFLDB4NjEsMHhGRCww eEQyLDB4NjIsMHg2RSwweEZELDB4OEEsMHgyOCwweDkzLDB4NTksCi0gICAgMHgyRCwweDcwLDB4 MTQsMHg0RCwweEUxLDB4ODYsMHhENSwweDkwLDB4QjQsMHhERiwweDcyLDB4NzEsCi0gICAgMHhF MCwweEI0LDB4RDAsMHhENiwweDgyLDB4M0EsMHg0QSwweDA0LDB4NTgsMHgzMiwweDBCLDB4RDMs Ci0gICAgMHg1MSwweDEzLDB4MzIsMHg2MywKLX07Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBkaDIw NDhfZ1tdPXsKLSAgICAweDAyLAotfTsKLQotc3RhdGljIERIICoKLWdldF9kaDUxMigpCi17Ci0g ICAgREggKmRoPU5VTEw7Ci0KLSAgICBpZiAoKGRoPURIX25ldygpKSA9PSBOVUxMKQotICAgICAg ICByZXR1cm4oTlVMTCk7Ci0gICAgZGgtPnA9Qk5fYmluMmJuKGRoNTEyX3Asc2l6ZW9mKGRoNTEy X3ApLE5VTEwpOwotICAgIGRoLT5nPUJOX2JpbjJibihkaDUxMl9nLHNpemVvZihkaDUxMl9nKSxO VUxMKTsKLSAgICBpZiAoKGRoLT5wID09IE5VTEwpIHx8IChkaC0+ZyA9PSBOVUxMKSkKLSAgICAg ICAgcmV0dXJuKE5VTEwpOwotICAgIHJldHVybihkaCk7Ci19Ci0KLXN0YXRpYyBESCAqCi1nZXRf ZGg3NjgoKQotewotICAgIERIICpkaD1OVUxMOwotCi0gICAgaWYgKChkaD1ESF9uZXcoKSkgPT0g TlVMTCkKLSAgICAgICAgcmV0dXJuKE5VTEwpOwotICAgIGRoLT5wPUJOX2JpbjJibihkaDc2OF9w LHNpemVvZihkaDc2OF9wKSxOVUxMKTsKLSAgICBkaC0+Zz1CTl9iaW4yYm4oZGg3NjhfZyxzaXpl b2YoZGg3NjhfZyksTlVMTCk7Ci0gICAgaWYgKChkaC0+cCA9PSBOVUxMKSB8fCAoZGgtPmcgPT0g TlVMTCkpCi0gICAgICAgIHJldHVybihOVUxMKTsKLSAgICByZXR1cm4oZGgpOwotfQotCi1zdGF0 aWMgREggKgotZ2V0X2RoMTAyNCgpCi17Ci0gICAgREggKmRoPU5VTEw7Ci0KLSAgICBpZiAoKGRo PURIX25ldygpKSA9PSBOVUxMKQotICAgICAgICByZXR1cm4oTlVMTCk7Ci0gICAgZGgtPnA9Qk5f YmluMmJuKGRoMTAyNF9wLHNpemVvZihkaDEwMjRfcCksTlVMTCk7Ci0gICAgZGgtPmc9Qk5fYmlu MmJuKGRoMTAyNF9nLHNpemVvZihkaDEwMjRfZyksTlVMTCk7Ci0gICAgaWYgKChkaC0+cCA9PSBO VUxMKSB8fCAoZGgtPmcgPT0gTlVMTCkpCi0gICAgICAgIHJldHVybihOVUxMKTsKLSAgICByZXR1 cm4oZGgpOwotfQotCi1zdGF0aWMgREggKgotZ2V0X2RoMTUzNigpCi17Ci0gICAgREggKmRoPU5V TEw7Ci0KLSAgICBpZiAoKGRoPURIX25ldygpKSA9PSBOVUxMKQotICAgICAgICByZXR1cm4oTlVM TCk7Ci0gICAgZGgtPnA9Qk5fYmluMmJuKGRoMTUzNl9wLHNpemVvZihkaDE1MzZfcCksTlVMTCk7 Ci0gICAgZGgtPmc9Qk5fYmluMmJuKGRoMTUzNl9nLHNpemVvZihkaDE1MzZfZyksTlVMTCk7Ci0g ICAgaWYgKChkaC0+cCA9PSBOVUxMKSB8fCAoZGgtPmcgPT0gTlVMTCkpCi0gICAgICAgIHJldHVy bihOVUxMKTsKLSAgICByZXR1cm4oZGgpOwotfQotCi1zdGF0aWMgREggKgotZ2V0X2RoMjA0OCgp Ci17Ci0gICAgREggKmRoPU5VTEw7Ci0KLSAgICBpZiAoKGRoPURIX25ldygpKSA9PSBOVUxMKQot ICAgICAgICByZXR1cm4oTlVMTCk7Ci0gICAgZGgtPnA9Qk5fYmluMmJuKGRoMjA0OF9wLHNpemVv ZihkaDIwNDhfcCksTlVMTCk7Ci0gICAgZGgtPmc9Qk5fYmluMmJuKGRoMjA0OF9nLHNpemVvZihk aDIwNDhfZyksTlVMTCk7Ci0gICAgaWYgKChkaC0+cCA9PSBOVUxMKSB8fCAoZGgtPmcgPT0gTlVM TCkpCi0gICAgICAgIHJldHVybihOVUxMKTsKLSAgICByZXR1cm4oZGgpOwotfQotI2VuZGlmIC8q IE5PX0RIICovCi0KLXN0YXRpYyBESCBNU19DQUxMQkFDSyAqCi0jaWZkZWYgQ0tfQU5TSUMKLXRt cF9kaF9jYihTU0wgKiBzLCBpbnQgZXhwb3J0LCBpbnQga2V5bGVuZ3RoKQotI2Vsc2UgLyogQ0tf QU5TSUMgKi8KLXRtcF9kaF9jYihzLGV4cG9ydCxrZXlsZW5ndGgpCi1TU0wgKnM7Ci1pbnQgZXhw b3J0OwotaW50IGtleWxlbmd0aDsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIHN0YXRp YyBESCAqZGhfdG1wPU5VTEw7Ci0gICAgQklPICpiaW89TlVMTDsKLQotI2lmbmRlZiBOT19ESAot ICAgIGlmIChkaF90bXAgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIGlmIChzc2xfZGhfcGFyYW1f ZmlsZSAgJiYKLSAgICAgICAgICAgICAoYmlvPUJJT19uZXdfZmlsZShzc2xfZGhfcGFyYW1fZmls ZSwiciIpKSAhPSBOVUxMKQotICAgICAgICAgICAgZGhfdG1wPVBFTV9yZWFkX2Jpb19ESHBhcmFt cyhiaW8sTlVMTCxOVUxMLE5VTEwpOwotICAgICAgICBpZiAoYmlvICE9IE5VTEwpCi0gICAgICAg ICAgICBCSU9fZnJlZShiaW8pOwotCi0gICAgICAgIGlmICggZGhfdG1wID09IE5VTEwgKSB7Ci0g ICAgICAgICAgICBpZiAoIGtleWxlbmd0aCA8IDc2OCApCi0gICAgICAgICAgICAgICAgZGhfdG1w ID0gZ2V0X2RoNTEyKCk7Ci0gICAgICAgICAgICBlbHNlIGlmICgga2V5bGVuZ3RoIDwgMTAyNCAp Ci0gICAgICAgICAgICAgICAgZGhfdG1wID0gZ2V0X2RoNzY4KCk7Ci0gICAgICAgICAgICBlbHNl IGlmICgga2V5bGVuZ3RoIDwgMTUzNiApCi0gICAgICAgICAgICAgICAgZGhfdG1wID0gZ2V0X2Ro MTAyNCgpOwotICAgICAgICAgICAgZWxzZSBpZiAoIGtleWxlbmd0aCA8IDIwNDggKQotICAgICAg ICAgICAgICAgIGRoX3RtcCA9IGdldF9kaDE1MzYoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg ICAgICAgICAgICBkaF90bXAgPSBnZXRfZGgyMDQ4KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxz ZSAvKiBOT19ESCAqLwotICAgIGlmIChzc2xfZGVidWdfZmxhZykKLSAgICAgICAgcHJpbnRmKCJE SCBub3Qgc3VwcG9ydGVkLi4uXHJcbiIpOwotI2VuZGlmIC8qIE5PX0RIICovCi0gICAgcmV0dXJu KGRoX3RtcCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zc2xfZGlzcGxheV9jb21wKFNTTCAqIHNzbCkK LXsKLSAgICBpZiAoIHF1aWV0ICkJCQkvKiBmZGMgLSBNb24gTm92IDI4IDExOjQ0OjE1IDIwMDUg Ki8KLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCAhY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgp ICkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHNzbCA9PSBOVUxMKQotICAgICAgICByZXR1 cm47Ci0KLSAgICBpZiAoc3NsLT5leHBhbmQgPT0gTlVMTCB8fCBzc2wtPmV4cGFuZC0+bWV0aCA9 PSBOVUxMKQotICAgICAgICBwcmludGYoIkNvbXByZXNzaW9uOiBOb25lXHJcbiIpOwotICAgIGVs c2UgewotICAgICAgICBwcmludGYoIkNvbXByZXNzaW9uOiAlc1xyXG4iLHNzbC0+ZXhwYW5kLT5t ZXRoLT5uYW1lKTsKLSAgICB9Ci19Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi1zc2xfZGlzcGxh eV9jb25uZWN0X2RldGFpbHMoU1NMICogc3NsX2NvbiwgaW50IHNlcnZlciwgaW50IHZlcmJvc2Up Ci0jZWxzZSAvKiBDS19BTlNJQyAqLwotc3NsX2Rpc3BsYXlfY29ubmVjdF9kZXRhaWxzKHNzbF9j b24sc2VydmVyLHZlcmJvc2UpCi1TU0wgKnNzbF9jb247Ci1pbnQgc2VydmVyOwotaW50IHZlcmJv c2U7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBYNTA5ICpwZWVyOwotICAgIFNTTF9D SVBIRVIgKiBjaXBoZXI7Ci0gICAgY29uc3QgY2hhciAqY2lwaGVyX2xpc3Q7Ci0gICAgY2hhciBi dWZbNTEyXT0iIjsKLQotICAgIGlmICggcXVpZXQgKQkJCS8qIGZkYyAtIE1vbiBOb3YgMjggMTE6 NDQ6MTUgMjAwNSAqLwotICAgICAgICByZXR1cm4oMCk7Ci0KLSAgICBpZiAoICFja19zc2xlYXlf aXNfaW5zdGFsbGVkKCkgKQotICAgICAgICByZXR1cm4oMCk7Ci0KLSAgICBpZiAoIGluc2VydmVy ICYmICF0bl9kZWIgKQotICAgICAgICByZXR1cm4oMCk7Ci0KLSAgICAvKiB0aGUgY2lwaGVyIGxp c3QgKmNhbiogYmUgTlVMTCAuLi4gdXNlbGVzcyBidXQgaXQgaGFwcGVucyEgKi8KLSAgICBjaXBo ZXIgPSBTU0xfZ2V0X2N1cnJlbnRfY2lwaGVyKHNzbF9jb24pOwotICAgIGNpcGhlcl9saXN0ID0g U1NMX0NJUEhFUl9nZXRfbmFtZShjaXBoZXIpOwotICAgIFNTTF9DSVBIRVJfZGVzY3JpcHRpb24o Y2lwaGVyLGJ1ZixzaXplb2YoYnVmKSk7Ci0gICAgaWYgKGNpcGhlcl9saXN0PT1OVUxMKQotICAg ICAgICBjaXBoZXJfbGlzdD0iPE5VTEw+IjsKLSAgICBwcmludGYoIltUTFMgLSAlcyIsYnVmKTsK LSAgICBzc2xfZGlzcGxheV9jb21wKHNzbF9jb24pOwotCi0gICAgaWYgKCBzZXJ2ZXIgKSB7Ci0g ICAgICAgIGNpcGhlcl9saXN0PVNTTF9nZXRfc2hhcmVkX2NpcGhlcnMoc3NsX2NvbixidWYsNTEy KTsKLSAgICAgICAgaWYgKGNpcGhlcl9saXN0PT1OVUxMKQotICAgICAgICAgICAgY2lwaGVyX2xp c3Q9IjxOVUxMPiI7Ci0gICAgICAgIHByaW50ZigiW1RMUyAtIHNoYXJlZCBjaXBoZXJzPSVzXVxy XG4iLAotICAgICAgICAgICAgICAgIGNpcGhlcl9saXN0KTsKLSAgICAgICAgfSAgICAgICAKLSAg ICBpZiAoIHNlcnZlciB8fCB0bl9kZWIgKSB7Ci0gICAgICAgIHBlZXI9U1NMX2dldF9wZWVyX2Nl cnRpZmljYXRlKHNzbF9jb24pOwotICAgICAgICBpZiAocGVlciAhPSBOVUxMKSB7Ci0gICAgICAg ICAgICBYNTA5X05BTUVfb25lbGluZShYNTA5X2dldF9zdWJqZWN0X25hbWUocGVlciksYnVmLDUx Mik7Ci0gICAgICAgICAgICBwcmludGYoIltUTFMgLSBzdWJqZWN0PSVzXVxyXG4iLGJ1Zik7Ci0g ICAgICAgICAgICBYNTA5X05BTUVfb25lbGluZShYNTA5X2dldF9pc3N1ZXJfbmFtZShwZWVyKSxi dWYsNTEyKTsKLSAgICAgICAgICAgIHByaW50ZigiW1RMUyAtIGlzc3Vlcj0lc11cclxuIixidWYp OwotICAgICAgICAgICAgLyogWDUwOV9mcmVlKHBlZXIpOyAqLwotICAgICAgICB9IGVsc2UgaWYg KCF0bHNfaXNfa3JiNSgwKSkgewotICAgICAgICAgICAgaWYgKCAhc3N0ZWxuZXQgJiYgIXRjcF9p bmNvbWluZyApIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIltUTFMgLSBObyBjZXJ0aWZpY2F0 ZSBwcm92aWRlZC5dXHJcbiIpOwotICAgICAgICAgICAgICAgIHByaW50ZigKLSAgICAgIltUTFMg LSBUaGUgaWRlbnRpdHkgb2YgdGhlIGhvc3QgY291bGQgbm90IGJlIHZlcmlmaWVkLl1cclxuIik7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuKDApOwotfQotCi0v KgotICogVXNlIFNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiX3VzZXJkYXRhKFNTTF9DVFgg Kiwgdm9pZCAqIHVzZXJkYXRhKQotICogdG8gc2V0IHRoZSB2YWx1ZSBvZiB0aGUgdXNlcmRhdGEu ICBXZSBhcmUgZ29pbmcgdG8gdXNlIGl0IHRvIHN0b3JlIHRoZQotICogcHJvbXB0LgotICovCi0K LWludAotI2lmZGVmIENLX0FOU0lDCi1zc2xfcGFzc3dkX2NhbGxiYWNrKGNoYXIgKmJ1ZiwgaW50 IGxlbiwgaW50IHJ3ZmxhZywgVk9JRCAqIHVzZXJkYXRhKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8K LXNzbF9wYXNzd2RfY2FsbGJhY2soYnVmLGxlbixyd2ZsYWcsdXNlcmRhdGEpCi0gICAgY2hhciAq IGJ1ZjsgaW50IGxlbjsgaW50IHJ3ZmxhZzsgVk9JRCAqdXNlcmRhdGE7Ci0jZW5kaWYgLyogQ0tf QU5TSUMgKi8KLXsKLSAgICBleHRlcm4gY2hhciBwd2J1ZltdOwotICAgIGV4dGVybiBpbnQgIHB3 ZmxnLCBwd2NyeXB0OwotICAgIGludCAgIG9rOwotICAgIGNoYXIgKnByb21wdD1OVUxMOwotCi0g ICAgaWYgKCBwd2J1ZlswXSAmJiBwd2ZsZyApIHsKLSAgICAgICAgaW50IG47Ci0gICAgICAgIG4g PSBja3N0cm5jcHkoYnVmLHB3YnVmLGxlbik7Ci0jaWZkZWYgT1MyCi0gICAgICAgIGlmICggcHdj cnlwdCApCi0gICAgICAgICAgICBja19lbmNyeXB0KChjaGFyICopYnVmKTsKLSNlbmRpZiAvKiBP UzIgKi8KLSAgICAgICAgcmV0dXJuKG4pOwotICAgIH0KLQotICAgIGlmICggdXNlcmRhdGEgPT0g TlVMTCApCi0gICAgICAgIHByb21wdD0iRW50ZXIgY2VydGlmaWNhdGUgcGFzc3BocmFzZTogIjsK LSAgICBlbHNlCi0gICAgICAgIHByb21wdD0oY2hhciopdXNlcmRhdGE7Ci0gICAgb2sgPSB1cV90 eHQoTlVMTCxwcm9tcHQsMixOVUxMLGJ1ZixsZW4sTlVMTCxERUZBVUxUX1VRX1RJTUVPVVQpOwot ICAgIHJldHVybihvayA+IDAgPyBzdHJsZW4oYnVmKSA6IDApOwotfQotCi0KLS8qIEF0dGVtcHRz IHRvIGxvYWQgY2VydGlmaWNhdGUgZGF0YSBpbnRvIHRoZSBUTFMgY29udGV4dCBzdHJ1Y3R1cmVz ICovCi0vKiBSZXR1cm5zIDEgb24gc3VjY2VzczsgMCBvbiBmYWlsdXJlICovCi1pbnQKLXRsc19s b2FkX2NlcnRzKFNTTF9DVFggKiBjdHgsIFNTTCAqIGNvbiwgaW50IHNlcnZlcikKLXsKLSAgICBp bnQgcmMgPSAxOwotCi0gICAgaWYgKCAhY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpICkKLSAgICAg ICAgcmV0dXJuKDApOwotCi0gICAgZGVidWcoRjExMCwidGxzX2xvYWRfY2VydHMiLCJTU0xfQ1RY IiwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJ0bHNfbG9hZF9jZXJ0cyIsIlNTTCIsMCk7Ci0gICAgZGVi dWcoRjExMCwidGxzX2xvYWRfY2VydHMiLCJzZXJ2ZXIiLDApOwotCi0gICAgaWYgKCBjb24gKSB7 Ci0gICAgICAgIGlmIChzc2xfcnNhX2NlcnRfZmlsZSkgewotICAgICAgICAgICAgaWYgKCBzc2xf ZGVidWdfZmxhZyApCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJMb2FkaW5nIFJTQSBjZXJ0aWZp Y2F0ZSBpbnRvIFNTTFxyXG4iKTsKLQotICAgICAgICAgICAgcmMgPSBTU0xfdXNlX2NlcnRpZmlj YXRlX2ZpbGUoY29uLCBzc2xfcnNhX2NlcnRfZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgWDUwOV9GSUxFVFlQRV9QRU0pOwotICAgICAgICAgICAg aWYgKCFyYykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoICFxdWlldCB8fCBz c2xfZGVidWdfZmxhZyApCi0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3IgbG9hZGlu ZyBjZXJ0aWZpY2F0ZSBmcm9tICVzXHJcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg c3NsX3JzYV9jZXJ0X2ZpbGUpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg ICBpZiAoIXNzbF9yc2Ffa2V5X2ZpbGUgfHwgIXNzbF9yc2Ffa2V5X2ZpbGVbMF0pCi0gICAgICAg ICAgICAgICAgICAgIG1ha2VzdHIoJnNzbF9yc2Ffa2V5X2ZpbGUsc3NsX3JzYV9jZXJ0X2ZpbGUp OwotCi0gICAgICAgICAgICAgICAgcmMgPSBTU0xfdXNlX1ByaXZhdGVLZXlfZmlsZShjb24sIHNz bF9yc2Ffa2V5X2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFg1MDlfRklMRVRZUEVfUEVNKTsKLSAgICAgICAgICAgICAgICBpZiAoIXJjKQot ICAgICAgICAgICAgICAgICAgICByYyA9IFNTTF91c2VfUHJpdmF0ZUtleV9maWxlKGNvbiwgc3Ns X3JzYV9jZXJ0X2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBYNTA5X0ZJTEVUWVBFX1BFTSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFy YykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggIXF1aWV0IHx8 IHNzbF9kZWJ1Z19mbGFnICkKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3Ig bG9hZGluZyBrZXkgZnJvbSAlc1xyXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzc2xfcnNhX2tleV9maWxlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg ICAgICAgICAgICByYyA9IFNTTF9jaGVja19wcml2YXRlX2tleShjb24pOwotICAgICAgICAgICAg ICAgICAgICBpZiAoIXJjKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICBpZiAoIHNzbF9kZWJ1Z19mbGFnICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwcmludGYoCi0gICAgICAgICAgICAgICAgIlByaXZhdGUga2V5IGRvZXMgbm90IG1hdGNoIHRo ZSBjZXJ0aWZpY2F0ZSBwdWJsaWMga2V5XHJcbiIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYg KHNzbF9kc2FfY2VydF9maWxlKSB7Ci0gICAgICAgICAgICBpZiAoIHNzbF9kZWJ1Z19mbGFnICkK LSAgICAgICAgICAgICAgICBwcmludGYoIkxvYWRpbmcgRFNBIGNlcnRpZmljYXRlIGludG8gU1NM XHJcbiIpOwotCi0gICAgICAgICAgICByYyA9IFNTTF91c2VfY2VydGlmaWNhdGVfZmlsZShjb24s IHNzbF9kc2FfY2VydF9maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBYNTA5X0ZJTEVUWVBFX1BFTSk7Ci0gICAgICAgICAgICBpZiAoIXJjKQotICAg ICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICggc3NsX2RlYnVnX2ZsYWcgKSB7Ci0gICAg ICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3IgbG9hZGluZyBjZXJ0aWZpY2F0ZSBmcm9tICVz XHJcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX2RzYV9jZXJ0X2ZpbGUpOwot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg aWYgKCFzc2xfZGhfa2V5X2ZpbGUgfHwgIXNzbF9kaF9rZXlfZmlsZVswXSkKLSAgICAgICAgICAg ICAgICAgICAgbWFrZXN0cigmc3NsX2RoX2tleV9maWxlLHNzbF9kc2FfY2VydF9maWxlKTsKLSAg ICAgICAgICAgICAgICByYyA9IFNTTF91c2VfUHJpdmF0ZUtleV9maWxlKGNvbiwgc3NsX2RoX2tl eV9maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBYNTA5X0ZJTEVUWVBFX1BFTSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFyYykKLSAgICAgICAg ICAgICAgICAgICAgcmMgPSBTU0xfdXNlX1ByaXZhdGVLZXlfZmlsZShjb24sIHNzbF9kc2FfY2Vy dF9maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgWDUwOV9GSUxFVFlQRV9QRU0pOwotICAgICAgICAgICAgICAgIGlmICghcmMpCi0gICAg ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoICFxdWlldCB8fCBzc2xfZGVi dWdfZmxhZyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3IgbG9hZGlu ZyBrZXkgZnJvbSAlc1xyXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xf ZGhfa2V5X2ZpbGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmMgPSBTU0xfY2hlY2tfcHJpdmF0ZV9rZXkoY29u KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFyYykKLSAgICAgICAgICAgICAgICAgICAgewot ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzc2xfZGVidWdfZmxhZyApCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgcHJpbnRmKAotICAgICAgICAgICAgICAgICAgICJQcml2YXRlIGtl eSBkb2VzIG5vdCBtYXRjaCB0aGUgY2VydGlmaWNhdGUgcHVibGljIGtleVxuIik7Ci0gICAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg IH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3NsX3JzYV9jZXJ0X2ZpbGUpIHsKLSAgICAg ICAgICAgIGlmICggc3NsX2RlYnVnX2ZsYWcgKQotICAgICAgICAgICAgICAgIHByaW50ZigiTG9h ZGluZyBSU0EgY2VydGlmaWNhdGUgaW50byBTU0xcclxuIik7Ci0KLSAgICAgICAgICAgIHJjID0g U1NMX0NUWF91c2VfY2VydGlmaWNhdGVfZmlsZShjdHgsIHNzbF9yc2FfY2VydF9maWxlLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWDUwOV9GSUxFVFlQRV9QRU0pOwot ICAgICAgICAgICAgaWYgKCFyYykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAo ICFxdWlldCB8fCBzc2xfZGVidWdfZmxhZyApCi0gICAgICAgICAgICAgICAgICAgIHByaW50Zigi RXJyb3IgbG9hZGluZyBjZXJ0aWZpY2F0ZSBmcm9tICVzXHJcbiIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3NsX3JzYV9jZXJ0X2ZpbGUpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg ICAgICAgICAgICAgICBpZiAoIXNzbF9yc2Ffa2V5X2ZpbGUgfHwgIXNzbF9yc2Ffa2V5X2ZpbGVb MF0pCi0gICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzbF9yc2Ffa2V5X2ZpbGUsc3NsX3Jz YV9jZXJ0X2ZpbGUpOwotCi0gICAgICAgICAgICAgICAgcmMgPSBTU0xfQ1RYX3VzZV9Qcml2YXRl S2V5X2ZpbGUoY3R4LCBzc2xfcnNhX2tleV9maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBYNTA5X0ZJTEVUWVBFX1BFTSk7Ci0gICAgICAgICAg ICAgICAgaWYgKCFyYykKLSAgICAgICAgICAgICAgICAgIHJjID0gU1NMX0NUWF91c2VfUHJpdmF0 ZUtleV9maWxlKGN0eCwgc3NsX3JzYV9jZXJ0X2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYNTA5X0ZJTEVUWVBFX1BFTSk7Ci0gICAgICAg ICAgICAgICAgaWYgKCFyYykgewotICAgICAgICAgICAgICAgICAgICBpZiAoIHNzbF9kZWJ1Z19m bGFnICkKLSAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkVycm9yIGxvYWRpbmcga2V5IGZy b20gJXNcclxuIixzc2xfcnNhX2tleV9maWxlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgICAgICAgICByYyA9IFNTTF9DVFhfY2hlY2tfcHJpdmF0ZV9rZXkoY3R4KTsK LSAgICAgICAgICAgICAgICAgICAgaWYgKCFyYykgewotICAgICAgICAgICAgICAgICAgICAgICAg aWYgKCBzc2xfZGVidWdfZmxhZyApCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigK LSAgICAgICAgICAgICAgICAiUHJpdmF0ZSBrZXkgZG9lcyBub3QgbWF0Y2ggdGhlIGNlcnRpZmlj YXRlIHB1YmxpYyBrZXlcclxuIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHNzbF9kc2FfY2Vy dF9maWxlKSB7Ci0gICAgICAgICAgICBpZiAoIHNzbF9kZWJ1Z19mbGFnICkKLSAgICAgICAgICAg ICAgcHJpbnRmKCJMb2FkaW5nIERTQSBjZXJ0aWZpY2F0ZSBpbnRvIFNTTFxyXG4iKTsKLQotICAg ICAgICAgICAgcmMgPSBTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9maWxlKGN0eCwgc3NsX2RzYV9j ZXJ0X2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg WDUwOV9GSUxFVFlQRV9QRU0pOwotICAgICAgICAgICAgaWYgKCFyYykgewotICAgICAgICAgICAg ICAgIGlmICggc3NsX2RlYnVnX2ZsYWcgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50Zigi RXJyb3IgbG9hZGluZyBjZXJ0aWZpY2F0ZSBmcm9tICVzXHJcbiIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICBzc2xfZHNhX2NlcnRfZmlsZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoIXNzbF9kaF9rZXlfZmlsZSB8fCAh c3NsX2RoX2tleV9maWxlWzBdKQotICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2xfZGhf a2V5X2ZpbGUsc3NsX2RzYV9jZXJ0X2ZpbGUpOwotICAgICAgICAgICAgICAgIHJjID0gU1NMX0NU WF91c2VfUHJpdmF0ZUtleV9maWxlKGN0eCwgc3NsX2RoX2tleV9maWxlLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYNTA5X0ZJTEVUWVBFX1BFTSk7 Ci0gICAgICAgICAgICAgICAgaWYgKCFyYykKLSAgICAgICAgICAgICAgICAgIHJjID0gU1NMX0NU WF91c2VfUHJpdmF0ZUtleV9maWxlKGN0eCwgc3NsX2RzYV9jZXJ0X2ZpbGUsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYNTA5X0ZJTEVUWVBF X1BFTSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFyYykgewotICAgICAgICAgICAgICAgICAgICBp ZiAoIHNzbF9kZWJ1Z19mbGFnICkKLSAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkVycm9y IGxvYWRpbmcga2V5IGZyb20gJXNcclxuIixzc2xfZGhfa2V5X2ZpbGUpOwotICAgICAgICAgICAg ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJjID0gU1NMX0NUWF9jaGVja19wcml2 YXRlX2tleShjdHgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXJjKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBpZiAoIHNzbF9kZWJ1Z19mbGFnICkKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgcHJpbnRmKAotICAgICAgICAgICAgICAgICAgICJQcml2YXRlIGtleSBkb2VzIG5vdCBt YXRjaCB0aGUgY2VydGlmaWNhdGUgcHVibGljIGtleVxuIik7Ci0gICAgICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K LSAgICBpZiAoc3NsX3JzYV9jZXJ0X2NoYWluX2ZpbGUgJiYgc2VydmVyKSB7Ci0gICAgICAgIGlu dCBza2lwMXN0ID0gMDsKLSAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQotICAgICAgICAgICAg cHJpbnRmKCJMb2FkaW5nIFJTQSBDZXJ0aWZpY2F0ZSBDaGFpbiBpbnRvIFNTTFxyXG4iKTsKLSAg ICAgICAgaWYgKCFja3N0cmNtcChzc2xfcnNhX2NlcnRfY2hhaW5fZmlsZSxzc2xfcnNhX2NlcnRf ZmlsZSwtMSwKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAgICAgICAgMAotI2Vsc2UKLSAg ICAgICAgICAgICAgICAgICAgICAgMQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAg ICAgICAgICApKQotICAgICAgICAgICAgc2tpcDFzdCA9IDE7Ci0gICAgICAgIHJjID0gU1NMX0NU WF91c2VfY2VydGlmaWNhdGVfY2hhaW5fZmlsZShjdHgsc3NsX3JzYV9jZXJ0X2NoYWluX2ZpbGUp OwotICAgICAgICBpZiAoIXJjICYmIHNzbF9kZWJ1Z19mbGFnKQotICAgICAgICAgICAgICAgIHBy aW50ZigiRXJyb3IgbG9hZGluZyBSU0EgQ2VydGlmaWNhdGUgQ2hhaW4gaW50byBTU0xcclxuIik7 Ci0gICAgfQotICAgIGlmIChzc2xfZHNhX2NlcnRfY2hhaW5fZmlsZSAmJiBzZXJ2ZXIpIHsKLSAg ICAgICAgaW50IHNraXAxc3QgPSAwOwotICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCi0gICAg ICAgICAgICBwcmludGYoIkxvYWRpbmcgRFNBIENlcnRpZmljYXRlIENoYWluIGludG8gU1NMXHJc biIpOwotICAgICAgICBpZiAoIWNrc3RyY21wKHNzbF9kc2FfY2VydF9jaGFpbl9maWxlLHNzbF9k c2FfY2VydF9maWxlLC0xLAotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICAgICAgICAwCi0j ZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAxCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAg ICAgICAgICAgICAgICAgICkpCi0gICAgICAgICAgICBza2lwMXN0ID0gMTsKLSAgICAgICAgcmMg PSBTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9maWxlKGN0eCxzc2xfZHNhX2NlcnRfY2hh aW5fZmlsZSk7Ci0gICAgICAgIGlmICghcmMgJiYgc3NsX2RlYnVnX2ZsYWcpCi0gICAgICAgICAg ICAgICAgcHJpbnRmKCJFcnJvciBsb2FkaW5nIERTQSBDZXJ0aWZpY2F0ZSBDaGFpbiBpbnRvIFNT TFxyXG4iKTsKLSAgICB9Ci0gICAgcmV0dXJuKHJjKTsKLX0KLQotVk9JRAotI2lmZGVmIENLX0FO U0lDCi1zc2xfb25jZV9pbml0KHZvaWQpCi0jZWxzZQotc3NsX29uY2VfaW5pdCgpCi0jZW5kaWYg LyogQ0tfQU5TSUMgKi8KLXsKLSAgICBDT01QX01FVEhPRCAqIGNtOwotICAgIGNoYXIgKiBzOwot Ci0gICAgaWYgKCAhY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpICkKLSAgICAgICAgcmV0dXJuOwot LyoKLSAgT3BlblNTTCBkb2VzIG5vdCBwcm92aWRlIGZvciBBQkkgY29tcGF0aWJpbGl0eSBiZXR3 ZWVuIHJlbGVhc2VzIHByaW9yCi0gIHRvIHZlcnNpb24gMS4wLjAuICBJZiB0aGUgdmVyc2lvbiBk b2VzIG5vdCBtYXRjaCwgaXQgaXMgbm90IHNhZmUgdG8KLSAgYXNzdW1lIHRoYXQgYW55IGZ1bmN0 aW9uIHlvdSBjYWxsIHRha2VzIHRoZSBzYW1lIHBhcmFtZXRlcnMgb3IgZG9lcwotICB0aGUgc2Ft ZSB0aGluZyB3aXRoIHRoZW0uICBSZW1vdmluZyB0aGlzIHRlc3QgcHJpb3IgdG8gdGhlIE9wZW5T U0wgMS4wLjAKLSAgcmVsZWFzZSB3aWxsIHJlc3VsdCBpbiBhbiBpbmNyZWFzZSBpbiB1bmV4cGxh aW5lZCBvciBpbmNvcnJlY3QgYmVoYXZpb3JzLgotICBUaGUgdGVzdCBzaG91bGQgYmUgcmV2aXNl ZCBvbmNlIE9wZW5TU0wgMS4wLjAgaXMgcmVsZWFzZWQgYW5kIHdlIHNlZSB3aGF0Ci0gIGl0cyBj bGFpbXMgYXJlIGFzIHRvIEFCSSBjb21wYXRpYmlsaXR5LgotKi8KLSAgICBkZWJ1ZyhGMTExLCJL ZXJtaXQgYnVpbHQgZm9yIE9wZW5TU0wiLE9QRU5TU0xfVkVSU0lPTl9URVhULFNTTEVBWV9WRVJT SU9OX05VTUJFUik7Ci0jaWZuZGVmIE9TMk9OTFkKLSAgICBkZWJ1ZyhGMTExLCJPcGVuU1NMIExp YnJhcnkiLFNTTGVheV92ZXJzaW9uKFNTTEVBWV9WRVJTSU9OKSwKLSAgICAgICAgICAgU1NMZWF5 KCkpOwotICAgIGRlYnVnKEYxMTAsIk9wZW5TU0wgTGlicmFyeSIsU1NMZWF5X3ZlcnNpb24oU1NM RUFZX0JVSUxUX09OKSwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJPcGVuU1NMIExpYnJhcnkiLFNTTGVh eV92ZXJzaW9uKFNTTEVBWV9DRkxBR1MpLDApOwotICAgIGRlYnVnKEYxMTAsIk9wZW5TU0wgTGli cmFyeSIsU1NMZWF5X3ZlcnNpb24oU1NMRUFZX1BMQVRGT1JNKSwwKTsKLQotICAgIC8qIFRoZSBm b2xsb3dpbmcgdGVzdCBpcyBzdWdnZXN0ZWQgYnkgUmljaGFyZCBMZXZpdHRlICovCi0gICAgaWYg KCgoT1BFTlNTTF9WRVJTSU9OX05VTUJFUiBeIFNTTGVheSgpKSAmIDB4ZmZmZmZmMGYpIAotI2lm ZGVmIE9TMgotICAgICAgICAgfHwgY2tzdHJjbXAoT1BFTlNTTF9WRVJTSU9OX1RFWFQsKGNoYXIg KilTU0xlYXlfdmVyc2lvbihTU0xFQVlfVkVSU0lPTiksLTEsMSkKLSNlbmRpZiAvKiBPUzIgKi8K LSAgICAgICAgICkgewotICAgICAgICBzc2xfaW5zdGFsbGVkID0gMDsKLSAgICAgICAgZGVidWco RjExMSwiT3BlblNTTCBWZXJzaW9uIGRvZXMgbm90IG1hdGNoLiAgQnVpbHQgd2l0aCIsCi0gICAg ICAgICAgICAgICBTU0xlYXlfdmVyc2lvbihTU0xFQVlfVkVSU0lPTiksU1NMRUFZX1ZFUlNJT05f TlVNQkVSKTsKLSAgICAgICAgcHJpbnRmKCI/T3BlblNTTCBsaWJyYXJpZXMgZG8gbm90IG1hdGNo IHJlcXVpcmVkIHZlcnNpb246XHJcbiIpOwotICAgICAgICBwcmludGYoIiAgLiBDLUtlcm1pdCBi dWlsdCB3aXRoICVzXHJcbiIsT1BFTlNTTF9WRVJTSU9OX1RFWFQpOwotICAgICAgICBwcmludGYo IiAgLiBWZXJzaW9uIGZvdW5kICAlc1xyXG4iLFNTTGVheV92ZXJzaW9uKFNTTEVBWV9WRVJTSU9O KSk7Ci0gICAgICAgIHByaW50ZigiICBPcGVuU1NMIHZlcnNpb25zIHByaW9yIHRvIDEuMC4wIG11 c3QgYmUgdGhlIHNhbWUuXHJcbiIpOyAgICAKLQotCXMgPSAiUiI7Ci0jaWZkZWYgU09MQVJJUwot CXByaW50ZigiICBTZXQgQ0RfTElCUkFSWV9QQVRIIGZvciAlcy5cclxuIixPUEVOU1NMX1ZFUlNJ T05fVEVYVCk7Ci0JcyA9ICIgT3IgciI7Ci0jZW5kaWYJLyogU09MQVJJUyAqLwotCi0jaWZkZWYg SFBVWAotCXByaW50ZigiICBTZXQgU0hMSUJfUEFUSCBmb3IgJXMuXHJcbiIsT1BFTlNTTF9WRVJT SU9OX1RFWFQpOwotCXMgPSAiIE9yIHIiOwotI2VuZGlmCS8qIEhQVVggKi8KLQotI2lmZGVmIEFJ WAotCXByaW50ZigiICBTZXQgTElCUEFUSCBmb3IgJXMuXHJcbiIsT1BFTlNTTF9WRVJTSU9OX1RF WFQpOwotCXMgPSAiIE9yIHIiOwotI2VuZGlmCS8qIEFJWCAqLwotCi0jaWZkZWYgTElOVVgKLQlw cmludGYoIiAgU2V0IExEX0xJQlJBUllfUEFUSCBmb3IgJXMuXHJcbiIsT1BFTlNTTF9WRVJTSU9O X1RFWFQpOwotCXMgPSAiIE9yIHIiOwotI2VuZGlmCS8qIExJTlVYICovCi0KLSAgICAgICAgcHJp bnRmKCIgJXNlYnVpbGQgQy1LZXJtaXQgZnJvbSBzb3VyY2Ugb24gdGhpcyBjb21wdXRlciB0byBt YWtlIFwKLXZlcnNpb25zIGFncmVlLlxyXG4iLHMpOwotCi0jaWZkZWYgS1RBUkdFVAotCXsKLQkg ICAgY2hhciAqIHM7Ci0JICAgIHMgPSBLVEFSR0VUOwotCSAgICBpZiAoIXMpIHMgPSAiIjsKLQkg ICAgaWYgKCEqcykgcyA9ICIodW5rbm93bikiOwotCSAgICBwcmludGYoIiAgQy1LZXJtaXQgbWFr ZWZpbGUgdGFyZ2V0OiAlc1xyXG4iLHMpOwotCX0KLSNlbmRpZgkvKiBLVEFSR0VUICovCi0gICAg ICAgIHByaW50ZigiICBPciBpZiB0aGF0IGlzIHdoYXQgeW91IGRpZCB0aGVuIHRyeSB0byBmaW5k IG91dCB3aHlcclxuIik7Ci0gICAgICAgIHByaW50ZigiICB0aGUgcHJvZ3JhbSBsb2FkZXIgKGlt YWdlIGFjdGl2YXRvcikgaXMgY2hvb3NpbmcgYVxyXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIGRp ZmZlcmVudCBPcGVuU1NMIGxpYnJhcnkgdGhhbiB0aGUgb25lIHNwZWNpZmllZCBpbiBcCi10aGUg YnVpbGQuXHJcblxyXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIEFsbCBTU0wvVExTIGZlYXR1cmVz IGRpc2FibGVkLlxyXG5cclxuIik7Ci0gICAgICAgIGJsZWVwKEJQX0ZBSUwpOwotI2lmZGVmIFNT TERMTAotICAgICAgICBja19zc2xfdW5sb2FkZGxsKCk7Ci0gICAgICAgIGNrX2NyeXB0b191bmxv YWRkbGwoKTsKLSNlbmRpZiAvKiBTU0xETEwgKi8KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNl bmRpZiAvKiBPUzJPTkxZICovCi0KLSAgICAvKiBpbml0IHRoaW5ncyBzbyB3ZSB3aWxsIGdldCBt ZWFuaW5nZnVsIGVycm9yIG1lc3NhZ2VzCi0gICAgICogcmF0aGVyIHRoYW4gbnVtYmVycwotICAg ICAqLwotICAgIFNTTF9sb2FkX2Vycm9yX3N0cmluZ3MoKTsKLQotI2lmZGVmIFNTSEJVSUxUSU4K LSAgICBPUEVOU1NMX2FkZF9hbGxfYWxnb3JpdGhtc19ub2NvbmYoKTsKLSNlbHNlCi0gICAgLyog U1NMX2xpYnJhcnlfaW5pdCgpIG9ubHkgbG9hZHMgdGhvc2UgY2lwaGVycyBuZWVkcyBmb3IgU1NM ICAqLwotICAgIC8qIFRoZXNlIGhhcHBlbiB0byBiZSBhIHNpbWlsYXIgc2V0IHRvIHRob3NlIHJl cXVpcmVkIGZvciBTU0ggKi8KLSAgICAvKiBidXQgdGhleSBhcmUgbm90IGEgY29tcGxldGUgc2V0 IG9mIGNpcGhlcnMgcHJvdmlkZWQgYnkgdGhlICovCi0gICAgLyogY3J5cHRvIGxpYnJhcnkuICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIFNTTF9saWJy YXJ5X2luaXQoKTsKLSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0KLSNpZmRlZiBaTElCCi0gICAg Y20gPSBDT01QX3psaWIoKTsKLSAgICBpZiAoY20gIT0gTlVMTCAmJiBjbS0+dHlwZSAhPSBOSURf dW5kZWYpIHsKLSAgICAgICAgU1NMX0NPTVBfYWRkX2NvbXByZXNzaW9uX21ldGhvZCgweGUwLCBj bSk7IC8qIEVBWSdzIFpMSUIgSUQgKi8KLSAgICB9Ci0jZW5kaWYgLyogWkxJQiAqLwotICAgIGNt ID0gQ09NUF9ybGUoKTsKLSAgICBpZiAoY20gIT0gTlVMTCAmJiBjbS0+dHlwZSAhPSBOSURfdW5k ZWYpCi0gICAgICAgIFNTTF9DT01QX2FkZF9jb21wcmVzc2lvbl9tZXRob2QoMHhlMSwgY20pOyAv KiBFQVkncyBSTEUgSUQgKi8KLQotICAgIC8qIEVuc3VyZSB0aGUgUmFuZG9tIG51bWJlciBnZW5l cmF0b3IgaGFzIGVub3VnaCBlbnRyb3B5ICovCi0gICAgaWYgKCAhUkFORF9zdGF0dXMoKSApIHsK LSAgICAgICAgY2hhciBidWZmZXJbMjU2XT0iIjsKLSAgICAgICAgY2hhciByYW5kb21ieXRlc1sy NTZdOwotICAgICAgICBpbnQgcmMxID0gLTEsIHJjMiA9IDE7ICAvKiBhc3N1bWUgZmFpbHVyZSBh bmQgc3VjY2VzcyAqLwotCi0gICAgICAgIGRlYnVnKEYxMTAsInNzbF9vbmNlX2luaXQiLCIhUkFO RF9zdGF0dXMoKSIsMCk7Ci0KLSAgICAgICAgaWYgKCBzc2xfcm5kX2ZpbGUgPT0gTlVMTCApIHsK LSAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9ybmRfZmlsZSIsInNzbF9ybmRfZmlsZSBpcyBO VUxMIiwwKTsKLSAgICAgICAgICAgIFJBTkRfZmlsZV9uYW1lKGJ1ZmZlciwyNTYpOwotICAgICAg ICAgICAgaWYgKCBidWZmZXJbMF0gKQotICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzbF9ybmRf ZmlsZSwgYnVmZmVyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtYWtlc3Ry KCZzc2xfcm5kX2ZpbGUsIi5ybmQiKTsKLSAgICAgICAgfQotICAgICAgICBkZWJ1ZyhGMTEwLCJz c2xfcm5kX2ZpbGUiLHNzbF9ybmRfZmlsZSwwKTsKLQotICAgICAgICByYzEgPSBSQU5EX2VnZChz c2xfcm5kX2ZpbGUpOwotICAgICAgICBkZWJ1ZyhGMTExLCJzc2xfb25jZV9pbml0IiwiUkFORF9l Z2QoKSIscmMxKTsKLSAgICAgICAgaWYgKCByYzEgPD0gMCApIHsKLSAgICAgICAgICAgIHJjMiA9 IFJBTkRfbG9hZF9maWxlKHNzbF9ybmRfZmlsZSwgLTEpOwotICAgICAgICAgICAgZGVidWcoRjEx MSwic3NsX29uY2VfaW5pdCIsIlJBTkRfbG9hZF9maWxlKCkiLHJjMSk7Ci0gICAgICAgIH0KLQot ICAgICAgICBpZiAoIHJjMSA8PSAwICYmICFyYzIgKQotICAgICAgICB7Ci0gICAgICAgICAgICB0 aW1lX3QgdCA9IHRpbWUoTlVMTCk7Ci0gICAgICAgICAgICBpbnQgdGxlbiA9IHNpemVvZih0aW1l X3QpOwotICAgICAgICAgICAgaW50IHBpZCA9IGdldHBpZCgpOwotICAgICAgICAgICAgaW50IHBs ZW4gPSBzaXplb2YoaW50KTsKLSAgICAgICAgICAgIGludCBuOwotI2lmbmRlZiBSQU5EX01BWAot I2RlZmluZSBSQU5EX01BWCAweDdGRkYKLSNlbmRpZgotICAgICAgICAgICAgZGVidWcoRjExMCwi c3NsX29uY2VfaW5pdCIsImNhbGxpbmcgUkFORF9zZWVkKCkiLDApOwotCi0gICAgICAgICAgICBS QU5EX3NlZWQoKHVuc2lnbmVkIGNoYXIgKikmdCwgdGxlbik7Ci0gICAgICAgICAgICBSQU5EX3Nl ZWQoKHVuc2lnbmVkIGNoYXIgKikmcGlkLCBwbGVuKTsKLQotICAgICAgICAgICAgc3JhbmQoKHVu c2lnbmVkIGludCl0KTsKLSAgICAgICAgICAgIHNwcmludGYoYnVmZmVyLCAiJS4wZiIsICgoKGRv dWJsZSkocmFuZCgpJVJBTkRfTUFYKS9SQU5EX01BWCkqCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChzaXplb2YocmFuZG9tYnl0ZXMpLTEyOC0xKSkpOwotICAgICAgICAg ICAgbiA9IChhdG9pKGJ1ZmZlcikrMSklKHNpemVvZihyYW5kb21ieXRlcyktMTI4LTEpOwotICAg ICAgICAgICAgUkFORF9zZWVkKHJhbmRvbWJ5dGVzLCAxMjgpOwotICAgICAgICB9Ci0KLSAgICAg ICAgaWYgKCAhUkFORF9zdGF0dXMoKSApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9v bmNlX2luaXQiLCJVbmFibGUgdG8gaW5pdGlhbGl6ZSBQUk5HIiwwKTsKLSAgICAgICAgICAgIHBy aW50ZigiIFVuYWJsZSB0byBsb2FkICdyYW5kb20gc3RhdGUnXG4iKTsKLSAgICAgICAgICAgIHBy aW50ZigiIFNTTCBhbmQgVExTIGFyZSB1bmF2YWlsYmxlLlxuIik7Ci0gICAgICAgICAgICBwcmlu dGYoIiBVc2UgU0VUIEFVVEggU1NMIFJBTkRPTS1GSUxFIDxmaWxlPiBjb21tYW5kIHRvIHByb3Zp ZGUgcmFuZG9tIGRhdGEuXG4iKTsKLSAgICAgICAgICAgIHByaW50ZigiIFNwZWNpZmllZCBmaWxl IHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2l0aCBuZXcgcmFuZG9tIGRhdGEgYWZ0ZXIgdXNlLlxuIik7 Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIHNzbF9ybmRf ZmlsZSApIHsKLSAgICAgICAgICAgIGludCByYyA9IFJBTkRfd3JpdGVfZmlsZShzc2xfcm5kX2Zp bGUpOwotICAgICAgICAgICAgZGVidWcoRjExMSwic3NsX29uY2VfaW5pdCIsIlJBTkRfd3JpdGVf ZmlsZSgpIixyYyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNpZmRlZiBOVAotICAgIC8vIEluaXRp YWxpemUgYWRkaXRpb25hbCBPSUQgdHlwZXMgZm9yIHVzZSB3aGVuIHNhdmluZyBjZXJ0cyB0byBh IGZpbGUKLSAgICBPQkpfY3JlYXRlKCIyLjk5OTk5LjMiLCJTRVQuZXgzIiwiU0VUIHg1MDl2MyBl eHRlbnNpb24gMyIpOwotI2VuZGlmIC8qIE5UICovCi0KLSAgICAvKiBtYWtlIHN1cmUgd2UgaGF2 ZSBzb21ld2hlcmUgd2UgY2FuIGxvZyBlcnJvcnMgdG8gKi8KLSAgICBiaW9fZXJyPUJJT19uZXco QklPX3NfbWVtKCkpOwotCi0gICAgZGVidWcoRjEwMCwic3NsX29uY2VfaW5pdCgpIGNvbXBsZXRl IiwiIiwwKTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXNzbF90bl9pbml0KGludCBtb2Rl KQotI2Vsc2UKLXNzbF90bl9pbml0KG1vZGUpIGludCBtb2RlOwotI2VuZGlmIC8qIENLX0FOU0lD ICovCi17Ci0jaWZkZWYgS1JCNQotICAgIGV4dGVybiBjaGFyICogazVfa2V5dGFiOwotICAgIGV4 dGVybiBjaGFyICoga3JiNV9kX3NydjsKLSNlbmRpZiAvKiBLUkI1ICovCi0gICAgc3RhdGljIGlu dCBsYXN0X3NzbF9tb2RlID0gLTE7Ci0gICAgU1NMICogc3NsX2Nvbng9TlVMTCwgKiB0bHNfY29u eD1OVUxMOwotCi0gICAgc3NsX2luaXRpYWxpemVkID0gMDsKLQotICAgIGlmICggIWNrX3NzbGVh eV9pc19pbnN0YWxsZWQoKSApCi0gICAgICAgIHJldHVybigwKTsKLQotICAgIGRlYnVnKEYxMTEs InNzbF90bl9pbml0IiwibW9kZSIsbW9kZSk7Ci0KLSAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCi0g ICAgICAgIHByaW50ZigiU1NMX0RFQlVHX0ZMQUcgb25cclxuIik7Ci0KLSAgICBpZiAobGFzdF9z c2xfbW9kZSAhPSBtb2RlKSB7Ci0gICAgICAgIGlmIChzc2xfY3R4KSB7Ci0gICAgICAgICAgICBT U0xfQ1RYX2ZyZWUoc3NsX2N0eCk7Ci0gICAgICAgICAgICBzc2xfY3R4ID0gTlVMTDsKLSAgICAg ICAgfQotICAgICAgICBpZiAodGxzX2N0eCkgewotICAgICAgICAgICAgU1NMX0NUWF9mcmVlKHRs c19jdHgpOwotICAgICAgICAgICAgdGxzX2N0eCA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0K LSAgICBpZiAoIChsYXN0X3NzbF9tb2RlICE9IG1vZGUpIHx8ICFzc2xfY3R4IHx8ICF0bHNfY3R4 ICkgewotICAgICAgICBpZiAoIG1vZGUgPT0gU1NMX0NMSUVOVCApIHsKLSAgICAgICAgICAgIHNz bF9jdHg9KFNTTF9DVFggKilTU0xfQ1RYX25ldyhTU0x2MjNfY2xpZW50X21ldGhvZCgpKTsKLSAg ICAgICAgICAgIC8qIFRoaXMgY2FuIGZhaWwgYmVjYXVzZSB3ZSBkbyBub3QgaGF2ZSBSU0EgYXZh aWxhYmxlICovCi0gICAgICAgICAgICBpZiAoICFzc2xfY3R4ICkgewotICAgICAgICAgICAgICAg IGRlYnVnKEYxMTAsInNzbF90bl9pbml0IiwiU1NMdjIzX2NsaWVudF9tZXRob2QgZmFpbGVkIiww KTsKLSAgICAgICAgICAgICAgICBzc2xfY3R4PShTU0xfQ1RYICopU1NMX0NUWF9uZXcoU1NMdjNf Y2xpZW50X21ldGhvZCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICggIXNzbF9j dHggKSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX3RuX2luaXQiLCJTU0x2M19j bGllbnRfbWV0aG9kIGZhaWxlZCIsMCk7Ci0gICAgICAgICAgICAgICAgbGFzdF9zc2xfbW9kZSA9 IC0xOwotICAgICAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgICAgIH0KLSNpZm5kZWYg Q09NTUVOVAotICAgICAgICAgICAgdGxzX2N0eD0oU1NMX0NUWCAqKVNTTF9DVFhfbmV3KFRMU3Yx X2NsaWVudF9tZXRob2QoKSk7Ci0jZWxzZSAvKiBDT01NRU5UICovCi0gICAgICAgICAgICB0bHNf Y3R4PShTU0xfQ1RYICopU1NMX0NUWF9uZXcoU1NMdjIzX2NsaWVudF9tZXRob2QoKSk7Ci0gICAg ICAgICAgICAvKiBUaGlzIGNhbiBmYWlsIGJlY2F1c2Ugd2UgZG8gbm90IGhhdmUgUlNBIGF2YWls YWJsZSAqLwotICAgICAgICAgICAgaWYgKCAhdGxzX2N0eCApIHsKLSAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCIsIlNTTHYyM19jbGllbnRfbWV0aG9kIGZhaWxlZCIsMCk7 Ci0gICAgICAgICAgICAgICAgdGxzX2N0eD0oU1NMX0NUWCAqKVNTTF9DVFhfbmV3KFNTTHYzX2Ns aWVudF9tZXRob2QoKSk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAg ICAgICAgICAgaWYgKCAhdGxzX2N0eCApIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJz c2xfdG5faW5pdCIsIlRMU3YxX2NsaWVudF9tZXRob2QgZmFpbGVkIiwwKTsKLSAgICAgICAgICAg ICAgICBsYXN0X3NzbF9tb2RlID0gLTE7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKDApOwotICAg ICAgICAgICAgfQotI2lmZGVmIFVTRV9DRVJUX0NCCi0gICAgICAgICAgICBTU0xfQ1RYX3NldF9j bGllbnRfY2VydF9jYihzc2xfY3R4LHNzbF9jbGllbnRfY2VydF9jYWxsYmFjayk7Ci0gICAgICAg ICAgICBTU0xfQ1RYX3NldF9jbGllbnRfY2VydF9jYih0bHNfY3R4LHNzbF9jbGllbnRfY2VydF9j YWxsYmFjayk7Ci0jZW5kaWYgLyogVVNFX0NFUlRfQ0IgKi8KLSAgICAgICAgfSBlbHNlIGlmICht b2RlID09IFNTTF9TRVJWRVIpIHsKLSAgICAgICAgICAgIC8qIFdlIGFyZSBhIHNlcnZlciAqLwot ICAgICAgICAgICAgc3NsX2N0eD0oU1NMX0NUWCAqKVNTTF9DVFhfbmV3KFNTTHYyM19zZXJ2ZXJf bWV0aG9kKCkpOwotICAgICAgICAgICAgLyogVGhpcyBjYW4gZmFpbCBiZWNhdXNlIHdlIGRvIG5v dCBoYXZlIFJTQSBhdmFpbGFibGUgKi8KLSAgICAgICAgICAgIGlmICggIXNzbF9jdHggKSB7Ci0g ICAgICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX3RuX2luaXQiLCJTU0x2MjNfc2VydmVyX21l dGhvZCBmYWlsZWQiLDApOwotICAgICAgICAgICAgICAgIHNzbF9jdHg9KFNTTF9DVFggKilTU0xf Q1RYX25ldyhTU0x2M19zZXJ2ZXJfbWV0aG9kKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAg ICAgaWYgKCAhc3NsX2N0eCApIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfdG5f aW5pdCIsIlNTTHYzX3NlcnZlcl9tZXRob2QgZmFpbGVkIiwwKTsKLSAgICAgICAgICAgICAgICBs YXN0X3NzbF9tb2RlID0gLTE7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICAg ICAgfQotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgIHRsc19jdHg9KFNTTF9DVFggKilTU0xf Q1RYX25ldyhUTFN2MV9zZXJ2ZXJfbWV0aG9kKCkpOwotI2Vsc2UgLyogQ09NTUVOVCAqLwotICAg ICAgICAgICAgdGxzX2N0eD0oU1NMX0NUWCAqKVNTTF9DVFhfbmV3KFNTTHYyM19zZXJ2ZXJfbWV0 aG9kKCkpOwotICAgICAgICAgICAgLyogVGhpcyBjYW4gZmFpbCBiZWNhdXNlIHdlIGRvIG5vdCBo YXZlIFJTQSBhdmFpbGFibGUgKi8KLSAgICAgICAgICAgIGlmICggIXRsc19jdHggKSB7Ci0gICAg ICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX3RuX2luaXQiLCJTU0x2MjNfc2VydmVyX21ldGhv ZCBmYWlsZWQiLDApOwotICAgICAgICAgICAgICAgIHRsc19jdHg9KFNTTF9DVFggKilTU0xfQ1RY X25ldyhUTFN2MV9zZXJ2ZXJfbWV0aG9kKCkpOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIENP TU1FTlQgKi8KLSAgICAgICAgICAgIGlmICggIXRsc19jdHggKSB7Ci0gICAgICAgICAgICAgICAg ZGVidWcoRjExMCwic3NsX3RuX2luaXQiLCJUTFN2MV9zZXJ2ZXJfbWV0aG9kIGZhaWxlZCIsMCk7 Ci0gICAgICAgICAgICAgICAgbGFzdF9zc2xfbW9kZSA9IC0xOwotICAgICAgICAgICAgICAgIHJl dHVybigwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIC8qIFVua25vd24gbW9kZSAq LwotICAgICAgICAgICAgcmV0dXJuKDApOwotCi0gICAgICAgIGlmICggIWluc2VydmVyICkgewot ICAgICAgICAgICAgU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2Ioc3NsX2N0eCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBlbV9wYXNzd29yZF9jYiAqKXNzbF9wYXNz d2RfY2FsbGJhY2spOwotICAgICAgICAgICAgU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2Io dGxzX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBlbV9wYXNzd29y ZF9jYiAqKXNzbF9wYXNzd2RfY2FsbGJhY2spOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogZm9y IFNTTCBzd2l0Y2ggb24gYWxsIHRoZSBpbnRlcm9wZXJhYmlsaXR5IGFuZCBidWcKLSAgICAgICAg ICogd29ya2Fyb3VuZHMgc28gdGhhdCB3ZSB3aWxsIGNvbW11bmljYXRlIHdpdGggcGVvcGxlCi0g ICAgICAgICAqIHRoYXQgY2Fubm90IHJlYWQgcG9vcmx5IHdyaXR0ZW4gc3BlY3MgOi0pCi0gICAg ICAgICAqIGZvciBUTFMgYmUgc3VyZSB0byBwcmV2ZW50IHVzZSBvZiBTU0x2MgotICAgICAgICAg Ki8KLSAgICAgICAgU1NMX0NUWF9zZXRfb3B0aW9ucyhzc2xfY3R4LFNTTF9PUF9BTEx8U1NMX09Q X05PX1NTTHYyKTsKLSAgICAgICAgU1NMX0NUWF9zZXRfb3B0aW9ucyh0bHNfY3R4LAotICAgICAg ICAgICAgICAgICBTU0xfT1BfTk9fU1NMdjJ8U1NMX09QX1NJTkdMRV9ESF9VU0V8U1NMX09QX0VQ SEVNRVJBTF9SU0EpOwotCi0gICAgICAgIFNTTF9DVFhfc2V0X2luZm9fY2FsbGJhY2soc3NsX2N0 eCxzc2xfY2xpZW50X2luZm9fY2FsbGJhY2spOwotICAgICAgICBTU0xfQ1RYX3NldF9pbmZvX2Nh bGxiYWNrKHRsc19jdHgsc3NsX2NsaWVudF9pbmZvX2NhbGxiYWNrKTsKLQotI2lmbmRlZiBDT01N RU5UCi0gICAgICAgIC8qIFNldCB0aGUgcHJvcGVyIGNhY2hpbmcgbW9kZSAqLwotICAgICAgICBp ZiAoIG1vZGUgPT0gU1NMX1NFUlZFUiApIHsKLSAgICAgICAgICAgIFNTTF9DVFhfc2V0X3Nlc3Np b25fY2FjaGVfbW9kZShzc2xfY3R4LFNTTF9TRVNTX0NBQ0hFX1NFUlZFUik7Ci0gICAgICAgICAg ICBTU0xfQ1RYX3NldF9zZXNzaW9uX2NhY2hlX21vZGUodGxzX2N0eCxTU0xfU0VTU19DQUNIRV9T RVJWRVIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU1NMX0NUWF9zZXRfc2Vzc2lv bl9jYWNoZV9tb2RlKHNzbF9jdHgsU1NMX1NFU1NfQ0FDSEVfQ0xJRU5UKTsKLSAgICAgICAgICAg IFNTTF9DVFhfc2V0X3Nlc3Npb25fY2FjaGVfbW9kZSh0bHNfY3R4LFNTTF9TRVNTX0NBQ0hFX0NM SUVOVCk7Ci0gICAgICAgIH0KLSAgICAgICAgU1NMX0NUWF9zZXRfc2Vzc2lvbl9pZF9jb250ZXh0 KHNzbF9jdHgsKENIQVIgKikiMSIsMSk7Ci0gICAgICAgIFNTTF9DVFhfc2V0X3Nlc3Npb25faWRf Y29udGV4dCh0bHNfY3R4LChDSEFSICopIjIiLDEpOwotI2Vsc2UgLyogQ09NTUVOVCAqLwotICAg ICAgICBTU0xfQ1RYX3NldF9zZXNzaW9uX2NhY2hlX21vZGUoc3NsX2N0eCxTU0xfU0VTU19DQUNI RV9PRkYpOwotICAgICAgICBTU0xfQ1RYX3NldF9zZXNzaW9uX2NhY2hlX21vZGUodGxzX2N0eCxT U0xfU0VTU19DQUNIRV9PRkYpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB9Ci0KLSAgICAv KiBUaGUgc2VydmVyIHVzZXMgZGVmYXVsdHMgZm9yIHRoZSBjZXJ0aWZpY2F0ZSBmaWxlcy4gKi8K LSAgICAvKiBUaGUgY2xpZW50IGRvZXMgbm90LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKi8KLSAgICBpZiAobW9kZSA9PSBTU0xfU0VSVkVSKSB7Ci0gICAgICAgIGNoYXIgY2VydF9m aWxlcGF0aFsxMDI0XTsKLSAgICAgICAgY29uc3QgY2hhciAqIGRlZmRpciA9IE5VTEw7Ci0gICAg ICAgIERIICogZGggPSBOVUxMOwotCi0gICAgICAgIGRlZmRpciA9IGdldGVudigiU1NMX0NFUlRf RElSIik7Ci0gICAgICAgIGlmICggIWRlZmRpciApIHsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAg IGRlZmRpciA9IGV4ZWRpcjsKLSNlbHNlIC8qIE9TMiAqLwotICAgICAgICAgICAgZGVmZGlyID0g WDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2RpcigpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAg ICAgZGVidWcoRjExMCwic3NsX3RuX2luaXQgLSBzZXR0aW5nIGRlZmF1bHQgZGlyZWN0b3J5IHRv IixkZWZkaXIsMCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCAhZGVmZGlyICkKLSAgICAgICAg ICAgIGRlZmRpciA9ICIiOwotCi0gICAgICAgIGlmICghc3NsX3JzYV9jZXJ0X2ZpbGUpIHsKLSAg ICAgICAgICAgIC8qIHdlIG5lZWQgdG8ga25vdyB0aGUgZnVsbHBhdGggdG8gdGhlIGxvY2F0aW9u IG9mIHRoZQotICAgICAgICAgICAgKiBjZXJ0aWZpY2F0ZSB0aGF0IHdlIHdpbGwgYmUgcnVubmlu ZyB3aXRoIGFzIHdlIGNhbm5vdAotICAgICAgICAgICAgKiBiZSBzdXJlIG9mIHRoZSBjd2Qgd2hl biB3ZSBhcmUgbGF1bmNoZWQKLSAgICAgICAgICAgICovCi0gICAgICAgICAgICBzcHJpbnRmKGNl cnRfZmlsZXBhdGgsIiVzLyVzIixkZWZkaXIsInRlbG5ldGQtcnNhLnBlbSIpOwotICAgICAgICAg ICAgaWYgKHpjaGtpKGNlcnRfZmlsZXBhdGgpID4gMCkKLSAgICAgICAgICAgICAgICBtYWtlc3Ry KCZzc2xfcnNhX2NlcnRfZmlsZSxjZXJ0X2ZpbGVwYXRoKTsKLSAgICAgICAgfQotICAgICAgICBp ZiAoc3NsX3JzYV9jZXJ0X2ZpbGUgJiYgIXNzbF9yc2Ffa2V5X2ZpbGUpIHsKLSAgICAgICAgICAg IC8qIHdlIG5lZWQgdG8ga25vdyB0aGUgZnVsbHBhdGggdG8gdGhlIGxvY2F0aW9uIG9mIHRoZQot ICAgICAgICAgICAgKiBjZXJ0aWZpY2F0ZSB0aGF0IHdlIHdpbGwgYmUgcnVubmluZyB3aXRoIGFz IHdlIGNhbm5vdAotICAgICAgICAgICAgKiBiZSBzdXJlIG9mIHRoZSBjd2Qgd2hlbiB3ZSBhcmUg bGF1bmNoZWQKLSAgICAgICAgICAgICovCi0gICAgICAgICAgICBzcHJpbnRmKGNlcnRfZmlsZXBh dGgsIiVzLyVzIixkZWZkaXIsInRlbG5ldGQtcnNhLWtleS5wZW0iKTsKLSAgICAgICAgICAgIGlm ICh6Y2hraShjZXJ0X2ZpbGVwYXRoKSA+IDApCi0gICAgICAgICAgICAgICAgbWFrZXN0cigmc3Ns X3JzYV9rZXlfZmlsZSxjZXJ0X2ZpbGVwYXRoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXNz bF9kc2FfY2VydF9maWxlKSB7Ci0gICAgICAgICAgICAvKiB3ZSBuZWVkIHRvIGtub3cgdGhlIGZ1 bGxwYXRoIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUKLSAgICAgICAgICAgICogY2VydGlmaWNhdGUg dGhhdCB3ZSB3aWxsIGJlIHJ1bm5pbmcgd2l0aCBhcyB3ZSBjYW5ub3QKLSAgICAgICAgICAgICog YmUgc3VyZSBvZiB0aGUgY3dkIHdoZW4gd2UgYXJlIGxhdW5jaGVkCi0gICAgICAgICAgICAqLwot ICAgICAgICAgICAgc3ByaW50ZihjZXJ0X2ZpbGVwYXRoLCIlcy8lcyIsZGVmZGlyLCJ0ZWxuZXRk LWRzYS5wZW0iKTsKLSAgICAgICAgICAgIGlmICh6Y2hraShjZXJ0X2ZpbGVwYXRoKSA+IDApCi0g ICAgICAgICAgICAgICAgbWFrZXN0cigmc3NsX2RzYV9jZXJ0X2ZpbGUsY2VydF9maWxlcGF0aCk7 Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHNzbF9kc2FfY2VydF9maWxlICYmICFzc2xfZGhfa2V5 X2ZpbGUpIHsKLSAgICAgICAgICAgIC8qIHdlIG5lZWQgdG8ga25vdyB0aGUgZnVsbHBhdGggdG8g dGhlIGxvY2F0aW9uIG9mIHRoZQotICAgICAgICAgICAgKiBjZXJ0aWZpY2F0ZSB0aGF0IHdlIHdp bGwgYmUgcnVubmluZyB3aXRoIGFzIHdlIGNhbm5vdAotICAgICAgICAgICAgKiBiZSBzdXJlIG9m IHRoZSBjd2Qgd2hlbiB3ZSBhcmUgbGF1bmNoZWQKLSAgICAgICAgICAgICovCi0gICAgICAgICAg ICBzcHJpbnRmKGNlcnRfZmlsZXBhdGgsIiVzLyVzIixkZWZkaXIsInRlbG5ldGQtZHNhLWtleS5w ZW0iKTsKLSAgICAgICAgICAgIGlmICh6Y2hraShjZXJ0X2ZpbGVwYXRoKSA+IDApCi0gICAgICAg ICAgICAgICAgbWFrZXN0cigmc3NsX2RoX2tleV9maWxlLGNlcnRfZmlsZXBhdGgpOwotICAgICAg ICB9Ci0gICAgICAgIGlmICghc3NsX2NybF9kaXIpIHsKLSAgICAgICAgICAgIC8qIHdlIG5lZWQg dG8ga25vdyB0aGUgZnVsbHBhdGggdG8gdGhlIGxvY2F0aW9uIG9mIHRoZQotICAgICAgICAgICAg KiBjZXJ0aWZpY2F0ZSB0aGF0IHdlIHdpbGwgYmUgcnVubmluZyB3aXRoIGFzIHdlIGNhbm5vdAot ICAgICAgICAgICAgKiBiZSBzdXJlIG9mIHRoZSBjd2Qgd2hlbiB3ZSBhcmUgbGF1bmNoZWQKLSAg ICAgICAgICAgICovCi0gICAgICAgICAgICBzcHJpbnRmKGNlcnRfZmlsZXBhdGgsIiVzL2NybCIs ZGVmZGlyKTsKLSAgICAgICAgICAgIGlmICh6Y2hraShjZXJ0X2ZpbGVwYXRoKSA+IDApCi0gICAg ICAgICAgICAgICAgbWFrZXN0cigmc3NsX2NybF9kaXIsY2VydF9maWxlcGF0aCk7Ci0gICAgICAg IH0KLQotICAgICAgICBpZiAoc3NsX29ubHlfZmxhZyAmJiAhdGxzX2xvYWRfY2VydHMoc3NsX2N0 eCxzc2xfY29uLDEpKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCIsIlVu YWJsZSB0byBsb2FkIFNTTCBjZXJ0cyIsMCk7Ci0gICAgICAgICAgICBsYXN0X3NzbF9tb2RlID0g LTE7Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRsc19v bmx5X2ZsYWcgJiYgIXRsc19sb2FkX2NlcnRzKHRsc19jdHgsdGxzX2NvbiwxKSkgewotICAgICAg ICAgICAgZGVidWcoRjExMCwic3NsX3RuX2luaXQiLCJVbmFibGUgdG8gbG9hZCBUTFMgY2VydHMi LDApOwotICAgICAgICAgICAgbGFzdF9zc2xfbW9kZSA9IC0xOwotICAgICAgICAgICAgcmV0dXJu KDApOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCAobGFzdF9zc2xfbW9kZSAhPSBtb2RlKSB8 fCAhc3NsX2N0eCB8fCAhdGxzX2N0eCApIHsKLSAgICAgICAgICAgIC8qIHdlIG1heSByZXF1aXJl IGEgdGVtcCA1MTIgYml0IFJTQSBrZXkgYmVjYXVzZSBvZiB0aGUKLSAgICAgICAgICAgICAqIHdv bmRlcmZ1bCB3YXkgZXhwb3J0IHRoaW5ncyB3b3JrIC4uLiBpZiBzbyB3ZSBnZW5lcmF0ZQotICAg ICAgICAgICAgICogb25lIG5vdyEKLSAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICBTU0xf Q1RYX3NldF90bXBfcnNhX2NhbGxiYWNrKHNzbF9jdHgsIHRtcF9yc2FfY2IpOwotICAgICAgICAg ICAgU1NMX0NUWF9zZXRfdG1wX2RoX2NhbGxiYWNrKCBzc2xfY3R4LCB0bXBfZGhfY2IpOwotICAg ICAgICAgICAgU1NMX0NUWF9zZXRfdG1wX3JzYV9jYWxsYmFjayh0bHNfY3R4LCB0bXBfcnNhX2Ni KTsKLSAgICAgICAgICAgIFNTTF9DVFhfc2V0X3RtcF9kaF9jYWxsYmFjayggdGxzX2N0eCwgdG1w X2RoX2NiKTsKLQotICAgICAgICAgICAgZGggPSB0bXBfZGhfY2IoTlVMTCwwLDUxMik7Ci0gICAg ICAgICAgICBTU0xfQ1RYX3NldF90bXBfZGgoc3NsX2N0eCxkaCk7Ci0gICAgICAgICAgICBTU0xf Q1RYX3NldF90bXBfZGgodGxzX2N0eCxkaCk7Ci0KLSAgICAgICAgICAgIC8qIFRoZSBmb2xsb3dp bmcgY29kZSBpcyBvbmx5IGNhbGxlZCBpZiB3ZSBhcmUgdXNpbmcgYQotICAgICAgICAgICAgICog Y2VydGlmaWNhdGUgd2l0aCBhbiBSU0EgcHVibGljIGtleSBhbmQgd2hlcmUgdGhlCi0gICAgICAg ICAgICAgKiBjZXJ0aWZpY2F0ZSBoYXMgYSBrZXkgbGVuZ3RoIGxlc3MgdGhhbiA1MTIgYml0cyBv ciBpcwotICAgICAgICAgICAgICogbWFya2VkIGZvciBzaWduaW5nIG9ubHkuICBUaGlzIGlzIHNv IHdlIGNhbiBzdXBwb3J0Ci0gICAgICAgICAgICAgKiB0aGUgZ3JlYXRlc3QgbGVnYWwgcHJpdmFj eSBsZXZlbCB3aXRoIGV4cG9ydGFibGUgY2xpZW50cy4KLSAgICAgICAgICAgICAqLwotCi0gICAg ICAgICAgICBpZiAoU1NMX0NUWF9uZWVkX3RtcF9SU0Eoc3NsX2N0eCkgfHwKLSAgICAgICAgICAg ICAgICAgU1NMX0NUWF9uZWVkX3RtcF9SU0EodGxzX2N0eCkpCi0gICAgICAgICAgICB7Ci0gICAg ICAgICAgICAgICAgUlNBICpyc2E7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIHNzbF9kZWJ1Z19m bGFnICkKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJHZW5lcmF0aW5nIHRlbXAgKDUxMiBi aXQpIFJTQSBrZXkgLi4uXHJcbiIpOwotICAgICAgICAgICAgICAgIHJzYT1SU0FfZ2VuZXJhdGVf a2V5KDUxMixSU0FfRjQsTlVMTCxOVUxMKTsKLSAgICAgICAgICAgICAgICBpZiAoIHNzbF9kZWJ1 Z19mbGFnICkKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJHZW5lcmF0aW9uIG9mIHRlbXAg KDUxMiBiaXQpIFJTQSBrZXkgZG9uZVxyXG4iKTsKLQotICAgICAgICAgICAgICAgIGlmIChTU0xf Q1RYX25lZWRfdG1wX1JTQShzc2xfY3R4KSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIVNT TF9DVFhfc2V0X3RtcF9yc2Eoc3NsX2N0eCxyc2EpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg ICBpZiAoIHNzbF9kZWJ1Z19mbGFnICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlu dGYoCi0gICJGYWlsZWQgdG8gYXNzaWduIGdlbmVyYXRlZCB0ZW1wIFJTQSBrZXkgdG8gU1NMIVxy XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICBpZiAoU1NMX0NUWF9uZWVkX3RtcF9SU0EodGxzX2N0eCkpIHsKLSAgICAgICAgICAg ICAgICAgICAgaWYgKCFTU0xfQ1RYX3NldF90bXBfcnNhKHRsc19jdHgscnNhKSkgewotICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKCBzc2xfZGVidWdfZmxhZyApCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKAotICAiRmFpbGVkIHRvIGFzc2lnbiBnZW5lcmF0ZWQgdGVtcCBS U0Ega2V5IHRvIFRMUyFcclxuIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgUlNBX2ZyZWUocnNhKTsKLSAgICAgICAgICAgICAgICBp ZiAoIHNzbF9kZWJ1Z19mbGFnICkKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJBc3NpZ25l ZCB0ZW1wICg1MTIgYml0KSBSU0Ega2V5XHJcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9 Ci0gICAgfQotCi0gICAgLyogbWFrZSBzdXJlIHdlIHdpbGwgZmluZCBjZXJ0aWZpY2F0ZXMgaW4g dGhlIHN0YW5kYXJkCi0gICAgICogbG9jYXRpb24gLi4uIG90aGVyd2lzZSB3ZSBkb24ndCBsb29r IGFueXdoZXJlIGZvcgotICAgICAqIHRoZXNlIHRoaW5ncyB3aGljaCBpcyBnb2luZyB0byBtYWtl IGNsaWVudCBjZXJ0aWZpY2F0ZQotICAgICAqIGV4Y2hhbmdlIHJhdGhlciB1c2VsZXNzIDotKQot ICAgICAqIEluIE9TMiwgZGVmYXVsdCB2YWx1ZXMgZm9yIHNzbF92ZXJpZnlfZmlsZSBhbmQgc3Ns X3ZlcmlmeV9wYXRoLgotICAgICAqLwotCi0jaWZkZWYgT1MyCi0jaWZkZWYgTlQKLSAgICB7Ci0g ICAgICAgIC8qIFRoZSBkZWZhdWx0cyBpbiB0aGUgU1NMIGNyeXB0byBsaWJyYXJ5IGFyZSBub3Qg YXBwcm9wcmlhdGUgZm9yIE9TLzIgKi8KLSAgICAgICAgY2hhciBwYXRoW0NLTUFYUEFUSF07Ci0K LSAgICAgICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgsZXhlZGlyLCJjZXJ0cyIsTlVMTCxOVUxM KTsKLSAgICAgICAgaWYgKGlzZGlyKHBhdGgpICYmIAotICAgICAgICAgICAgU1NMX0NUWF9sb2Fk X3ZlcmlmeV9sb2NhdGlvbnModGxzX2N0eCxOVUxMLHBhdGgpID09IDEpICB7Ci0gICAgICAgICAg ICBkZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCBjZXJ0aWZpY2F0ZSB2ZXJpZnkgZGlyIixwYXRoLDAp OwotICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQotICAgICAgICAgICAgICAgIHByaW50 ZigiICBDZXJ0aWZpY2F0ZSBWZXJpZmljYXRpb24gRGlyZWN0b3J5OiAlc1xyXG4iLHBhdGgpOwot ICAgICAgICAgICAgU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoc3NsX2N0eCxOVUxMLHBh dGgpOwotICAgICAgICB9Ci0gICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQQVRILEdldEFwcERh dGEoMSksImtlcm1pdCA5NS9jZXJ0cyIsTlVMTCxOVUxMKTsKLSAgICAgICAgaWYgKGlzZGlyKHBh dGgpICYmCi0gICAgICAgICAgICBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyh0bHNfY3R4 LE5VTEwscGF0aCkgPT0gMSkgIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF90bl9pbml0 IGNlcnRpZmljYXRlIHZlcmlmeSBkaXIiLHBhdGgsMCk7Ci0gICAgICAgICAgICBpZiAoc3NsX2Rl YnVnX2ZsYWcpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCIgIENlcnRpZmljYXRlIFZlcmlmaWNh dGlvbiBEaXJlY3Rvcnk6ICVzXHJcbiIscGF0aCk7Ci0gICAgICAgICAgICBTU0xfQ1RYX2xvYWRf dmVyaWZ5X2xvY2F0aW9ucyhzc2xfY3R4LE5VTEwscGF0aCk7Ci0gICAgICAgIH0KLSAgICAgICAg Y2ttYWttc2cocGF0aCxDS01BWFBBVEgsR2V0QXBwRGF0YSgwKSwia2VybWl0IDk1L2NlcnRzIixO VUxMLE5VTEwpOwotICAgICAgICBpZiAoaXNkaXIocGF0aCkgJiYKLSAgICAgICAgICAgIFNTTF9D VFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHRsc19jdHgsTlVMTCxwYXRoKSA9PSAxKSAgewotICAg ICAgICAgICAgZGVidWcoRjExMCwic3NsX3RuX2luaXQgY2VydGlmaWNhdGUgdmVyaWZ5IGRpciIs cGF0aCwwKTsKLSAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKLSAgICAgICAgICAgICAg ICBwcmludGYoIiAgQ2VydGlmaWNhdGUgVmVyaWZpY2F0aW9uIERpcmVjdG9yeTogJXNcclxuIixw YXRoKTsKLSAgICAgICAgICAgIFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHNzbF9jdHgs TlVMTCxwYXRoKTsKLSAgICAgICAgfQotICAgICAgICBja21ha21zZyhwYXRoLENLTUFYUEFUSCxl eGVkaXIsImNhX2NlcnRzLnBlbSIsTlVMTCxOVUxMKTsKLSAgICAgICAgaWYgKHpjaGtpKHBhdGgp ID4gMCAmJiAKLSAgICAgICAgICAgIFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHRsc19j dHgscGF0aCxOVUxMKSA9PSAxKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfdG5faW5p dCBjZXJ0aWZpY2F0ZSB2ZXJpZnkgZmlsZSIscGF0aCwwKTsKLSAgICAgICAgICAgIGlmIChzc2xf ZGVidWdfZmxhZykKLSAgICAgICAgICAgICAgICBwcmludGYoIiAgQ2VydGlmaWNhdGUgVmVyaWZp Y2F0aW9uIEZpbGU6ICVzXHJcbiIscGF0aCk7Ci0gICAgICAgICAgICBTU0xfQ1RYX2xvYWRfdmVy aWZ5X2xvY2F0aW9ucyhzc2xfY3R4LHBhdGgsTlVMTCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2tt YWttc2cocGF0aCxDS01BWFBBVEgsR2V0QXBwRGF0YSgxKSwia2VybWl0IDk1L2NhX2NlcnRzLnBl bSIsTlVMTCxOVUxMKTsKLSAgICAgICAgaWYgKHpjaGtpKHBhdGgpID4gMCAmJiAKLSAgICAgICAg ICAgIFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHRsc19jdHgscGF0aCxOVUxMKSA9PSAx KSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCBjZXJ0aWZpY2F0ZSB2ZXJp ZnkgZmlsZSIscGF0aCwwKTsKLSAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKLSAgICAg ICAgICAgICAgICBwcmludGYoIiAgQ2VydGlmaWNhdGUgVmVyaWZpY2F0aW9uIEZpbGU6ICVzXHJc biIscGF0aCk7Ci0gICAgICAgICAgICBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhzc2xf Y3R4LHBhdGgsTlVMTCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2ttYWttc2cocGF0aCxDS01BWFBB VEgsR2V0QXBwRGF0YSgwKSwia2VybWl0IDk1L2NhX2NlcnRzLnBlbSIsTlVMTCxOVUxMKTsKLSAg ICAgICAgaWYgKHpjaGtpKHBhdGgpID4gMCAmJiAKLSAgICAgICAgICAgIFNTTF9DVFhfbG9hZF92 ZXJpZnlfbG9jYXRpb25zKHRsc19jdHgscGF0aCxOVUxMKSA9PSAxKSB7Ci0gICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCBjZXJ0aWZpY2F0ZSB2ZXJpZnkgZmlsZSIscGF0aCwwKTsK LSAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKLSAgICAgICAgICAgICAgICBwcmludGYo IiAgQ2VydGlmaWNhdGUgVmVyaWZpY2F0aW9uIEZpbGU6ICVzXHJcbiIscGF0aCk7Ci0gICAgICAg ICAgICBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhzc2xfY3R4LHBhdGgsTlVMTCk7Ci0g ICAgICAgIH0KLSAgICB9Ci0jZWxzZSAvKiBOVCAqLwotICAgIHsKLSAgICAgICAgLyogVGhlIGRl ZmF1bHRzIGluIHRoZSBTU0wgY3J5cHRvIGxpYnJhcnkgYXJlIG5vdCBhcHByb3ByaWF0ZSBmb3Ig T1MvMiAqLwotICAgICAgICBjaGFyIHBhdGhbQ0tNQVhQQVRIXTsKLQotICAgICAgICBja21ha21z ZyhwYXRoLENLTUFYUEFUSCxleGVkaXIsImNlcnRzIixOVUxMLE5VTEwpOwotICAgICAgICBpZiAo aXNkaXIocGF0aCkgJiYgCi0gICAgICAgICAgICBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9u cyh0bHNfY3R4LE5VTEwscGF0aCkgPT0gMSkgIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsInNz bF90bl9pbml0IGNlcnRpZmljYXRlIHZlcmlmeSBkaXIiLHBhdGgsMCk7Ci0gICAgICAgICAgICBp ZiAoc3NsX2RlYnVnX2ZsYWcpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCIgIENlcnRpZmljYXRl IFZlcmlmaWNhdGlvbiBEaXJlY3Rvcnk6ICVzXHJcbiIscGF0aCk7Ci0gICAgICAgICAgICBTU0xf Q1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhzc2xfY3R4LE5VTEwscGF0aCk7Ci0gICAgICAgIH0K LSAgICAgICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgsZXhlZGlyLCJjYV9jZXJ0cy5wZW0iLE5V TEwsTlVMTCk7Ci0gICAgICAgIGlmICh6Y2hraShwYXRoKSA+IDAgJiYgCi0gICAgICAgICAgICBT U0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyh0bHNfY3R4LHBhdGgsTlVMTCkgPT0gMSkgewot ICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX3RuX2luaXQgY2VydGlmaWNhdGUgdmVyaWZ5IGZp bGUiLHBhdGgsMCk7Ci0gICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCi0gICAgICAgICAg ICAgICAgcHJpbnRmKCIgIENlcnRpZmljYXRlIFZlcmlmaWNhdGlvbiBGaWxlOiAlc1xyXG4iLHBh dGgpOwotICAgICAgICAgICAgU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoc3NsX2N0eCxw YXRoLE5VTEwpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIE5UICovCi0jZWxzZSAvKiBP UzIgKi8KLSAgICBTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyhzc2xfY3R4KTsKLSAg ICBTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyh0bHNfY3R4KTsKLSNlbmRpZiAvKiBP UzIgKi8KLQotICAgIGlmIChzc2xfdmVyaWZ5X2ZpbGUpIHsKLSAgICAgICAgaWYgKHpjaGtpKHNz bF92ZXJpZnlfZmlsZSkgPiAwICYmIAotICAgICAgICAgICAgU1NMX0NUWF9sb2FkX3ZlcmlmeV9s b2NhdGlvbnModGxzX2N0eCxzc2xfdmVyaWZ5X2ZpbGUsTlVMTCkgPT0gMSkgewotICAgICAgICAg ICAgZGVidWcoRjExMCwic3NsX3RuX2luaXQgY2VydGlmaWNhdGUgdmVyaWZ5IGZpbGUiLHNzbF92 ZXJpZnlfZmlsZSwwKTsKLSAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKLSAgICAgICAg ICAgICAgICBwcmludGYoIiAgQ2VydGlmaWNhdGUgVmVyaWZpY2F0aW9uIEZpbGU6ICVzXHJcbiIs c3NsX3ZlcmlmeV9maWxlKTsKLSAgICAgICAgICAgIFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRp b25zKHNzbF9jdHgsc3NsX3ZlcmlmeV9maWxlLE5VTEwpOwotICAgICAgICB9Ci0gICAgfQotICAg IGlmIChzc2xfdmVyaWZ5X2RpciAmJiBpc2Rpcihzc2xfdmVyaWZ5X2RpcikpIHsKLSAgICAgICAg aWYgKFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHRsc19jdHgsTlVMTCxzc2xfdmVyaWZ5 X2RpcikgPT0gMSkgIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF90bl9pbml0IGNlcnRp ZmljYXRlIHZlcmlmeSBkaXIiLHNzbF92ZXJpZnlfZGlyLDApOwotICAgICAgICAgICAgaWYgKHNz bF9kZWJ1Z19mbGFnKQotICAgICAgICAgICAgICAgIHByaW50ZigiICBDZXJ0aWZpY2F0ZSBWZXJp ZmljYXRpb24gRGlyZWN0b3J5OiAlc1xyXG4iLHNzbF92ZXJpZnlfZGlyKTsKLSAgICAgICAgICAg IFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHNzbF9jdHgsTlVMTCxzc2xfdmVyaWZ5X2Rp cik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG1vZGUgPT0gU1NMX1NFUlZFUikgewotICAg ICAgICBTU0xfQ1RYX3NldF92ZXJpZnkoc3NsX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgIHNz bF92ZXJpZnlfZmxhZz9zc2xfdmVyaWZ5X2ZsYWd8U1NMX1ZFUklGWV9DTElFTlRfT05DRTowLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3NlcnZlcl92ZXJpZnlfY2FsbGJhY2spOwot ICAgICAgICBTU0xfQ1RYX3NldF92ZXJpZnkodGxzX2N0eCwKLSAgICAgICAgICAgICAgICAgICAg IHNzbF92ZXJpZnlfZmxhZz9zc2xfdmVyaWZ5X2ZsYWd8U1NMX1ZFUklGWV9DTElFTlRfT05DRTow LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3NlcnZlcl92ZXJpZnlfY2FsbGJhY2sp OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFNTTF9DVFhfc2V0X3ZlcmlmeShzc2xfY3R4LHNzbF92 ZXJpZnlfZmxhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9jbGllbnRfdmVyaWZ5 X2NhbGxiYWNrKTsKLSAgICAgICAgU1NMX0NUWF9zZXRfdmVyaWZ5KHRsc19jdHgsc3NsX3Zlcmlm eV9mbGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX2NsaWVudF92ZXJpZnlfY2Fs bGJhY2spOwotICAgIH0KLQotICAgIC8qIEZyZWUgdGhlIGV4aXN0aW5nIENSTCBTdG9yZSAqLwot ICAgIGlmIChjcmxfc3RvcmUpIHsKLSAgICAgICAgWDUwOV9TVE9SRV9mcmVlKGNybF9zdG9yZSk7 Ci0gICAgICAgIGNybF9zdG9yZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgLyogc2V0IHVwIHRoZSBu ZXcgQ1JMIFN0b3JlICovCi0gICAgY3JsX3N0b3JlID0gWDUwOV9TVE9SRV9uZXcoKTsKLSAgICBp ZiAoY3JsX3N0b3JlKSB7Ci0jaWZkZWYgT1MyCi0gICAgICAgIGNoYXIgcGF0aFtDS01BWFBBVEhd OwotCi0gICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQQVRILGV4ZWRpciwiY3JscyIsTlVMTCxO VUxMKTsKLSAgICAgICAgaWYgKGlzZGlyKHBhdGgpICYmCi0gICAgICAgICAgICBYNTA5X1NUT1JF X2xvYWRfbG9jYXRpb25zKGNybF9zdG9yZSxOVUxMLHBhdGgpID09IDEpIHsKLSAgICAgICAgICAg IGRlYnVnKEYxMTAsInNzbF90bl9pbml0IGNybCBkaXIiLHBhdGgsMCk7Ci0gICAgICAgICAgICBp ZiAoc3NsX2RlYnVnX2ZsYWcpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCIgIENSTCBEaXJlY3Rv cnk6ICVzXHJcbiIscGF0aCk7Ci0gICAgICAgIH0KLSNpZmRlZiBOVAotICAgICAgICBja21ha21z ZyhwYXRoLENLTUFYUEFUSCxHZXRBcHBEYXRhKDEpLCJrZXJtaXQgOTUvY3JscyIsTlVMTCxOVUxM KTsKLSAgICAgICAgaWYgKGlzZGlyKHBhdGgpICYmIAotICAgICAgICAgICAgWDUwOV9TVE9SRV9s b2FkX2xvY2F0aW9ucyhjcmxfc3RvcmUsTlVMTCxwYXRoKSA9PSAxKSB7Ci0gICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCBjcmwgZGlyIixwYXRoLDApOwotICAgICAgICAgICAgaWYg KHNzbF9kZWJ1Z19mbGFnKQotICAgICAgICAgICAgICAgIHByaW50ZigiICBDUkwgRGlyZWN0b3J5 OiAlc1xyXG4iLHBhdGgpOwotICAgICAgICB9Ci0gICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQ QVRILEdldEFwcERhdGEoMCksImtlcm1pdCA5NS9jcmxzIixOVUxMLE5VTEwpOwotICAgICAgICBp ZiAoaXNkaXIocGF0aCkgJiYgCi0gICAgICAgICAgICBYNTA5X1NUT1JFX2xvYWRfbG9jYXRpb25z KGNybF9zdG9yZSxOVUxMLHBhdGgpID09IDEpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsInNz bF90bl9pbml0IGNybCBkaXIiLHBhdGgsMCk7Ci0gICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2Zs YWcpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCIgIENSTCBEaXJlY3Rvcnk6ICVzXHJcbiIscGF0 aCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICAKLSAgICAgICAgY2ttYWtt c2cocGF0aCxDS01BWFBBVEgsZXhlZGlyLCJjYV9jcmxzLnBlbSIsTlVMTCxOVUxMKTsKLSAgICAg ICAgaWYgKHpjaGtpKHBhdGgpID4gMCAmJiAKLSAgICAgICAgICAgIFg1MDlfU1RPUkVfbG9hZF9s b2NhdGlvbnMoY3JsX3N0b3JlLHBhdGgsTlVMTCkgPT0gMSkgewotICAgICAgICAgICAgZGVidWco RjExMCwic3NsX3RuX2luaXQgY3JsIGZpbGUiLHBhdGgsMCk7Ci0gICAgICAgICAgICBpZiAoc3Ns X2RlYnVnX2ZsYWcpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCIgIENSTCBGaWxlOiAlc1xyXG4i LHBhdGgpOwotICAgICAgICB9Ci0jaWZkZWYgTlQKLSAgICAgICAgY2ttYWttc2cocGF0aCxDS01B WFBBVEgsR2V0QXBwRGF0YSgxKSwia2VybWl0IDk1L2NhX2NybHMucGVtIixOVUxMLE5VTEwpOwot ICAgICAgICBpZiAoemNoa2kocGF0aCkgPiAwICYmIAotICAgICAgICAgICAgWDUwOV9TVE9SRV9s b2FkX2xvY2F0aW9ucyhjcmxfc3RvcmUscGF0aCxOVUxMKSA9PSAxKSB7Ci0gICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCBjcmwgZmlsZSIscGF0aCwwKTsKLSAgICAgICAgICAgIGlm IChzc2xfZGVidWdfZmxhZykKLSAgICAgICAgICAgICAgICBwcmludGYoIiAgQ1JMIEZpbGU6ICVz XHJcbiIscGF0aCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgs R2V0QXBwRGF0YSgwKSwia2VybWl0IDk1L2NhX2NybHMucGVtIixOVUxMLE5VTEwpOwotICAgICAg ICBpZiAoemNoa2kocGF0aCkgPiAwICYmIAotICAgICAgICAgICAgWDUwOV9TVE9SRV9sb2FkX2xv Y2F0aW9ucyhjcmxfc3RvcmUscGF0aCxOVUxMKSA9PSAxKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhG MTEwLCJzc2xfdG5faW5pdCBjcmwgZmlsZSIscGF0aCwwKTsKLSAgICAgICAgICAgIGlmIChzc2xf ZGVidWdfZmxhZykKLSAgICAgICAgICAgICAgICBwcmludGYoIiAgQ1JMIEZpbGU6ICVzXHJcbiIs cGF0aCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0g ICAgICAgIGlmIChzc2xfY3JsX2ZpbGUgfHwgc3NsX2NybF9kaXIpIHsKLSAgICAgICAgICAgIGlm IChzc2xfY3JsX2ZpbGUgJiYgemNoa2koc3NsX2NybF9maWxlKSA+IDAgJiYgCi0gICAgICAgICAg ICAgICAgWDUwOV9TVE9SRV9sb2FkX2xvY2F0aW9ucyhjcmxfc3RvcmUsc3NsX2NybF9maWxlLE5V TEwpID09IDEpIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCBjcmwg ZmlsZSIsc3NsX2NybF9maWxlLDApOwotICAgICAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxh ZykKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgIENSTCBGaWxlOiAlc1xyXG4iLHNzbF9j cmxfZmlsZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3NsX2NybF9kaXIgJiYg aXNkaXIoc3NsX2NybF9kaXIpICYmCi0gICAgICAgICAgICAgICAgWDUwOV9TVE9SRV9sb2FkX2xv Y2F0aW9ucyhjcmxfc3RvcmUsTlVMTCxzc2xfY3JsX2RpcikgPT0gMSkgewotICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTAsInNzbF90bl9pbml0IGNybCBkaXIiLHNzbF9jcmxfZGlyLDApOwotICAg ICAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKLSAgICAgICAgICAgICAgICAgICAgcHJp bnRmKCIgIENSTCBEaXJlY3Rvcnk6ICVzXHJcbiIsc3NsX2NybF9kaXIpOwotICAgICAgICAgICAg fQotICAgICAgICB9IAotI2lmbmRlZiBPUzIKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBY NTA5X1NUT1JFX3NldF9kZWZhdWx0X3BhdGhzKGNybF9zdG9yZSk7Ci0gICAgICAgIH0KLSNlbmRp ZiAvKiBPUzIgKi8KLSAgICB9Ci0KLSNpZm5kZWYgQ09NTUVOVAotICAgIHNzbF9jb254ID0gc3Ns X2NvbjsKLSAgICBzc2xfY29uPShTU0wgKilTU0xfbmV3KHNzbF9jdHgpOwotICAgIGlmICggIXNz bF9jb24gKSB7Ci0gICAgICAgIGRlYnVnKEYxMTAsInNzbF90bl9pbml0IiwiU1NMX25ldyhzc2xf Y29uKSBmYWlsZWQiLDApOwotICAgICAgICBsYXN0X3NzbF9tb2RlID0gLTE7Ci0gICAgICAgIHNz bF9jb24gPSBzc2xfY29ueDsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSAgICBpZiAoc3Ns X2NvbngpIHsKLSAgICAgICAgaWYgKCBtb2RlID09IFNTTF9DTElFTlQgKSB7Ci0gICAgICAgICAg ICBTU0xfc2V0X3Nlc3Npb24oc3NsX2NvbiwgU1NMX2dldF9zZXNzaW9uKHNzbF9jb254KSk7Ci0g ICAgICAgIH0KLSNpZmRlZiBTU0xfS1JCNQotCQlpZiAoc3NsX2NvbngtPmtzc2xfY3R4KSB7Ci0J CQlrc3NsX2N0eF9mcmVlKHNzbF9jb254LT5rc3NsX2N0eCk7Ci0JCQlzc2xfY29ueC0+a3NzbF9j dHggPSBOVUxMOwotCQl9Ci0jZW5kaWYgLyogU1NMX0tSQjUgKi8KLSAgICAgICAgU1NMX2ZyZWUo c3NsX2NvbngpOwotICAgICAgICBzc2xfY29ueCA9IE5VTEw7Ci0gICAgfQotICAgIHRsc19jb254 ID0gdGxzX2NvbjsKLSAgICB0bHNfY29uPShTU0wgKilTU0xfbmV3KHRsc19jdHgpOwotICAgIGlm ICggIXRsc19jb24gKSB7Ci0gICAgICAgIGRlYnVnKEYxMTAsInNzbF90bl9pbml0IiwiU1NMX25l dyh0bHNfY29uKSBmYWlsZWQiLDApOwotICAgICAgICBsYXN0X3NzbF9tb2RlID0gLTE7Ci0gICAg ICAgIHRsc19jb24gPSB0bHNfY29ueDsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSAgICBp ZiAodGxzX2NvbngpIHsKLSAgICAgICAgaWYgKCBtb2RlID09IFNTTF9DTElFTlQgKQotICAgICAg ICAgICAgU1NMX3NldF9zZXNzaW9uKHRsc19jb24sIFNTTF9nZXRfc2Vzc2lvbih0bHNfY29ueCkp OwotI2lmZGVmIFNTTF9LUkI1Ci0JCWlmICh0bHNfY29ueC0+a3NzbF9jdHgpIHsKLQkJCWtzc2xf Y3R4X2ZyZWUodGxzX2NvbngtPmtzc2xfY3R4KTsKLQkJCXRsc19jb254LT5rc3NsX2N0eCA9IE5V TEw7Ci0JCX0KLSNlbmRpZiAvKiBTU0xfS1JCNSAqLwotICAgICAgICBTU0xfZnJlZSh0bHNfY29u eCk7Ci0gICAgICAgIHRsc19jb254ID0gTlVMTDsKLSAgICB9Ci0jZWxzZSAvKiBDT01NRU5UICov Ci0gICAgLyogSSBkb24ndCBrbm93IHdoeSB0aGlzIGRvZXMgbm90IHdvcmsgdG8gcmV1c2UgdGhl IGNvbm5lY3Rpb24uICovCi0gICAgaWYgKCBzc2xfY29uICkgewotICAgICAgICBTU0xfY2xlYXIo c3NsX2Nvbik7Ci0gICAgICAgIFNTTF9zZXRfc2Vzc2lvbihzc2xfY29uLE5VTEwpOwotICAgICAg ICBTU0xfc2V0X2FjY2VwdF9zdGF0ZShzc2xfY29uKSA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg c3NsX2Nvbj0oU1NMICopU1NMX25ldyhzc2xfY3R4KTsKLSAgICAgICAgaWYgKCFzc2xfY29uKSB7 Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCIsIlNTTF9uZXcoc3NsX2N0eCkg ZmFpbGVkIiwwKTsKLSAgICAgICAgICAgIGxhc3Rfc3NsX21vZGUgPSAtMTsKLSAgICAgICAgICAg IHNzbF9jb24gPSBzc2xfY29ueDsKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgfQot ICAgIH0KLQotICAgIGlmICggdGxzX2NvbiApIHsKLSAgICAgICAgU1NMX2NsZWFyKHRsc19jb24p OwotICAgICAgICBTU0xfc2V0X3Nlc3Npb24odGxzX2NvbixOVUxMKTsKLSAgICAgICAgU1NMX3Nl dF9hY2NlcHRfc3RhdGUodGxzX2NvbikgOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHRsc19jb249 KFNTTCAqKVNTTF9uZXcodGxzX2N0eCk7Ci0gICAgICAgIGlmICggIXRsc19jb24gKSB7Ci0gICAg ICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCIsIlNTTF9uZXcodGxzX2N0eCkgZmFpbGVk IiwwKTsKLSAgICAgICAgICAgIGxhc3Rfc3NsX21vZGUgPSAtMTsKLSAgICAgICAgICAgIHRsc19j b24gPSB0bHNfY29ueDsKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgfQotICAgIH0K LSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSNpZmRlZiBTU0xfS1JCNQotI2lmbmRlZiBLUkI1X1NF UlZJQ0VfTkFNRQotI2RlZmluZSBLUkI1X1NFUlZJQ0VfTkFNRSAgICAiaG9zdCIKLSNlbmRpZgot Ci0gICAgaWYgKHNzbF9jb24tPmtzc2xfY3R4ID09IE5VTEwpCi0gICAgICAgIHNzbF9jb24tPmtz c2xfY3R4ID0ga3NzbF9jdHhfbmV3KCk7Ci0gICAgaWYgKHRsc19jb24tPmtzc2xfY3R4ID09IE5V TEwpCi0gICAgdGxzX2Nvbi0+a3NzbF9jdHggPSBrc3NsX2N0eF9uZXcoKTsKLSAgICBpZiAobW9k ZSA9PSBTU0xfU0VSVkVSKSB7Ci0gICAgICAgIGlmIChzc2xfY29uLT5rc3NsX2N0eCAhPSBOVUxM KQotICAgICAgICAgICAga3NzbF9jdHhfc2V0c3RyaW5nKHNzbF9jb24tPmtzc2xfY3R4LCBLU1NM X0tFWVRBQiwgazVfa2V5dGFiKTsKLSAgICAgICAgaWYgKHRsc19jb24tPmtzc2xfY3R4ICE9IE5V TEwpCi0gICAgICAgICAgICBrc3NsX2N0eF9zZXRzdHJpbmcodGxzX2Nvbi0+a3NzbF9jdHgsIEtT U0xfS0VZVEFCLCBrNV9rZXl0YWIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzc2xfY29u LT5rc3NsX2N0eCAhPSBOVUxMKQotICAgICAgICAgICAga3NzbF9jdHhfc2V0c3RyaW5nKHNzbF9j b24tPmtzc2xfY3R4LCBLU1NMX1NFUlZFUiwgc3pIb3N0TmFtZSk7Ci0gICAgICAgIGlmICh0bHNf Y29uLT5rc3NsX2N0eCAhPSBOVUxMKQotICAgICAgICAgICAga3NzbF9jdHhfc2V0c3RyaW5nKHRs c19jb24tPmtzc2xfY3R4LCBLU1NMX1NFUlZFUiwgc3pIb3N0TmFtZSk7Ci0gICAgfQotICAgIGtz c2xfY3R4X3NldHN0cmluZyhzc2xfY29uLT5rc3NsX2N0eCwgS1NTTF9TRVJWSUNFLAotICAgICAg ICAgICAgICAgICAgICAgICAga3JiNV9kX3NydiA/IGtyYjVfZF9zcnYgOiBLUkI1X1NFUlZJQ0Vf TkFNRSk7Ci0gICAga3NzbF9jdHhfc2V0c3RyaW5nKHRsc19jb24tPmtzc2xfY3R4LCBLU1NMX1NF UlZJQ0UsCi0gICAgICAgICAgICAgICAgICAgICAgICBrcmI1X2Rfc3J2ID8ga3JiNV9kX3NydiA6 IEtSQjVfU0VSVklDRV9OQU1FKTsKLSNlbmRpZiAvKiBTU0xfS1JCNSAqLwotCi0gICAgaWYgKHNz bF9jaXBoZXJfbGlzdCkgewotICAgICAgICBTU0xfc2V0X2NpcGhlcl9saXN0KHNzbF9jb24sc3Ns X2NpcGhlcl9saXN0KTsKLSAgICAgICAgU1NMX3NldF9jaXBoZXJfbGlzdCh0bHNfY29uLHNzbF9j aXBoZXJfbGlzdCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2hhciAqIHA7Ci0gICAgICAgIGlm IChwID0gZ2V0ZW52KCJTU0xfQ0lQSEVSIikpIHsKLSAgICAgICAgICAgIFNTTF9zZXRfY2lwaGVy X2xpc3Qoc3NsX2NvbixwKTsKLSAgICAgICAgICAgIFNTTF9zZXRfY2lwaGVyX2xpc3QodGxzX2Nv bixwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFNTTF9zZXRfY2lwaGVyX2xpc3Qo c3NsX2NvbixERUZBVUxUX0NJUEhFUl9MSVNUKTsKLSAgICAgICAgICAgIFNTTF9zZXRfY2lwaGVy X2xpc3QodGxzX2NvbixERUZBVUxUX0NJUEhFUl9MSVNUKTsKLSAgICAgICAgfQotICAgIH0KLQot ICAgIHNzbF92ZXJpZnlfZGVwdGggPSAtMTsKLQotICAgIGlmICggc3NsX2RlYnVnX2ZsYWcgKQot ICAgICAgICBwcmludGYoIlNTTC9UTFMgaW5pdCBkb25lIVxyXG4iKTsKLQotICAgIHNzbF9pbml0 aWFsaXplZCA9IDE7Ci0gICAgbGFzdF9zc2xfbW9kZSA9IG1vZGU7Ci0gICAgZGVidWcoRjExMCwi c3NsX3RuX2luaXQiLCJkb25lIiwwKTsKLSAgICByZXR1cm4oMSk7Ci19Ci0KLSNpZm5kZWYgTk9I VFRQCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotc3NsX2h0dHBfaW5pdChjaGFyICogaG9zdG5hbWUp Ci0jZWxzZQotc3NsX2h0dHBfaW5pdChob3N0bmFtZSkgY2hhciAqIGhvc3RuYW1lOwotI2VuZGlm IC8qIENLX0FOU0lDICovCi17Ci0jaWZkZWYgS1JCNQotICAgIGV4dGVybiBjaGFyICogazVfa2V5 dGFiOwotICAgIGV4dGVybiBjaGFyICoga3JiNV9kX3NydjsKLSNlbmRpZiAvKiBLUkI1ICovCi0g ICAgU1NMICogdGxzX2Nvbng9TlVMTDsKLQotICAgIHNzbF9odHRwX2luaXRpYWxpemVkID0gMDsK LQotICAgIGlmICggIWNrX3NzbGVheV9pc19pbnN0YWxsZWQoKSApCi0gICAgICAgIHJldHVybigw KTsKLSAgICBkZWJ1ZyhGMTEwLCJzc2xfaHR0cF9pbml0Iixob3N0bmFtZSwwKTsKLQotICAgIGlm IChzc2xfZGVidWdfZmxhZykKLSAgICAgICAgcHJpbnRmKCJTU0xfREVCVUdfRkxBRyBvblxyXG4i KTsKLQotICAgIGlmICghdGxzX2h0dHBfY3R4ICkgewotI2lmZGVmIENPTU1FTlQKLSAgICAgICAg LyogdG9vIG1hbnkgd2ViIHNlcnZlcnMgc3RpbGwgZG8gbm90IHN1cHBvcnQgVExTdjEgKi8KLSAg ICAgICAgdGxzX2h0dHBfY3R4PShTU0xfQ1RYICopU1NMX0NUWF9uZXcoVExTdjFfY2xpZW50X21l dGhvZCgpKTsKLSNlbHNlIC8qIENPTU1FTlQgKi8KLSAgICAgICAgdGxzX2h0dHBfY3R4PShTU0xf Q1RYICopU1NMX0NUWF9uZXcoU1NMdjIzX2NsaWVudF9tZXRob2QoKSk7Ci0gICAgICAgIC8qIFRo aXMgY2FuIGZhaWwgYmVjYXVzZSB3ZSBkbyBub3QgaGF2ZSBSU0EgYXZhaWxhYmxlICovCi0gICAg ICAgIGlmICggIXRsc19odHRwX2N0eCApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9o dHRwX2luaXQiLCJTU0x2MjNfY2xpZW50X21ldGhvZCBmYWlsZWQiLDApOwotICAgICAgICAgICAg dGxzX2h0dHBfY3R4PShTU0xfQ1RYICopU1NMX0NUWF9uZXcoU1NMdjNfY2xpZW50X21ldGhvZCgp KTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgaWYgKCAhdGxzX2h0 dHBfY3R4ICkgewotICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX2h0dHBfaW5pdCIsIlRMU3Yx X2NsaWVudF9tZXRob2QgZmFpbGVkIiwwKTsKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAg ICAgfQotI2lmZGVmIFVTRV9DRVJUX0NCCi0gICAgICAgIFNTTF9DVFhfc2V0X2NsaWVudF9jZXJ0 X2NiKHRsc19odHRwX2N0eCxzc2xfY2xpZW50X2NlcnRfY2FsbGJhY2spOwotI2VuZGlmIC8qIFVT RV9DRVJUX0NCICovCi0gICAgfQotCi0gICAgU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2Io dGxzX2h0dHBfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwZW1fcGFz c3dvcmRfY2IgKilzc2xfcGFzc3dkX2NhbGxiYWNrKTsKLQotICAgIC8qIGZvciBTU0wgc3dpdGNo IG9uIGFsbCB0aGUgaW50ZXJvcGVyYWJpbGl0eSBhbmQgYnVnCi0gICAgICogd29ya2Fyb3VuZHMg c28gdGhhdCB3ZSB3aWxsIGNvbW11bmljYXRlIHdpdGggcGVvcGxlCi0gICAgICogdGhhdCBjYW5u b3QgcmVhZCBwb29ybHkgd3JpdHRlbiBzcGVjcyA6LSkKLSAgICAgKiBmb3IgVExTIGJlIHN1cmUg dG8gcHJldmVudCB1c2Ugb2YgU1NMdjIKLSAgICAgKi8KLSAgICBTU0xfQ1RYX3NldF9vcHRpb25z KHRsc19odHRwX2N0eCwKLSAgICAgICAgICAgIFNTTF9PUF9OT19TU0x2MnxTU0xfT1BfU0lOR0xF X0RIX1VTRXxTU0xfT1BfRVBIRU1FUkFMX1JTQSk7Ci0KLSAgICBTU0xfQ1RYX3NldF9pbmZvX2Nh bGxiYWNrKHRsc19odHRwX2N0eCxzc2xfY2xpZW50X2luZm9fY2FsbGJhY2spOwotCi0jaWZuZGVm IENPTU1FTlQKLSAgICBTU0xfQ1RYX3NldF9zZXNzaW9uX2NhY2hlX21vZGUodGxzX2h0dHBfY3R4 LFNTTF9TRVNTX0NBQ0hFX0NMSUVOVCk7Ci0gICAgU1NMX0NUWF9zZXRfc2Vzc2lvbl9pZF9jb250 ZXh0KHRsc19odHRwX2N0eCwoQ0hBUiAqKSIzIiwxKTsKLSNlbHNlIC8qIENPTU1FTlQgKi8KLSAg ICBTU0xfQ1RYX3NldF9zZXNzaW9uX2NhY2hlX21vZGUodGxzX2h0dHBfY3R4LFNTTF9TRVNTX0NB Q0hFX09GRik7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgLyogbWFrZSBzdXJlIHdlIHdp bGwgZmluZCBjZXJ0aWZpY2F0ZXMgaW4gdGhlIHN0YW5kYXJkCi0gICAgICogbG9jYXRpb24gLi4u IG90aGVyd2lzZSB3ZSBkb24ndCBsb29rIGFueXdoZXJlIGZvcgotICAgICAqIHRoZXNlIHRoaW5n cyB3aGljaCBpcyBnb2luZyB0byBtYWtlIGNsaWVudCBjZXJ0aWZpY2F0ZQotICAgICAqIGV4Y2hh bmdlIHJhdGhlciB1c2VsZXNzIDotKQotICAgICAqLwotCi0jaWZkZWYgT1MyCi0jaWZkZWYgTlQK LSAgICB7Ci0gICAgICAgIC8qIFRoZSBkZWZhdWx0cyBpbiB0aGUgU1NMIGNyeXB0byBsaWJyYXJ5 IGFyZSBub3QgYXBwcm9wcmlhdGUgZm9yIE9TLzIgKi8KLSAgICAgICAgY2hhciBwYXRoW0NLTUFY UEFUSF07Ci0KLSAgICAgICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgsZXhlZGlyLCJjZXJ0cyIs TlVMTCxOVUxMKTsKLSAgICAgICAgaWYgKFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHRs c19odHRwX2N0eCxOVUxMLHBhdGgpID09IDApICB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJz c2xfaHR0cF9pbml0IHVuYWJsZSB0byBsb2FkIHBhdGgiLHBhdGgsMCk7Ci0gICAgICAgICAgICBp ZiAoc3NsX2RlYnVnX2ZsYWcpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxv YWQgdmVyaWZ5LWRpcjogJXNcclxuIixwYXRoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNrbWFr bXNnKHBhdGgsQ0tNQVhQQVRILEdldEFwcERhdGEoMSksImtlcm1pdCA5NS9jZXJ0cyIsTlVMTCxO VUxMKTsKLSAgICAgICAgaWYgKFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHRsc19odHRw X2N0eCxOVUxMLHBhdGgpID09IDApICB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfaHR0 cF9pbml0IHVuYWJsZSB0byBsb2FkIHBhdGgiLHBhdGgsMCk7Ci0gICAgICAgICAgICBpZiAoc3Ns X2RlYnVnX2ZsYWcpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgdmVy aWZ5LWRpcjogJXNcclxuIixwYXRoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNrbWFrbXNnKHBh dGgsQ0tNQVhQQVRILEdldEFwcERhdGEoMCksImtlcm1pdCA5NS9jZXJ0cyIsTlVMTCxOVUxMKTsK LSAgICAgICAgaWYgKFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHRsc19odHRwX2N0eCxO VUxMLHBhdGgpID09IDApICB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfaHR0cF9pbml0 IHVuYWJsZSB0byBsb2FkIHBhdGgiLHBhdGgsMCk7Ci0gICAgICAgICAgICBpZiAoc3NsX2RlYnVn X2ZsYWcpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgdmVyaWZ5LWRp cjogJXNcclxuIixwYXRoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tN QVhQQVRILGV4ZWRpciwiY2FfY2VydHMucGVtIixOVUxMLE5VTEwpOwotICAgICAgICBpZiAoU1NM X0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnModGxzX2h0dHBfY3R4LHBhdGgsTlVMTCkgPT0gMCkg ewotICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX2h0dHBfaW5pdCB1bmFibGUgdG8gbG9hZCBw YXRoIixwYXRoLDApOwotICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQotICAgICAgICAg ICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIHZlcmlmeS1maWxlOiAlc1xyXG4iLHBhdGgp OwotICAgICAgICB9Ci0KLSAgICAgICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgsR2V0QXBwRGF0 YSgxKSwia2VybWl0IDk1L2NhX2NlcnRzLnBlbSIsTlVMTCxOVUxMKTsKLSAgICAgICAgaWYgKFNT TF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHRsc19odHRwX2N0eCxwYXRoLE5VTEwpID09IDAp IHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9odHRwX2luaXQgdW5hYmxlIHRvIGxvYWQg cGF0aCIscGF0aCwwKTsKLSAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKLSAgICAgICAg ICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9hZCB2ZXJpZnktZmlsZTogJXNcclxuIixwYXRo KTsKLSAgICAgICAgfQotCi0gICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQQVRILEdldEFwcERh dGEoMCksImtlcm1pdCA5NS9jYV9jZXJ0cy5wZW0iLE5VTEwsTlVMTCk7Ci0gICAgICAgIGlmIChT U0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyh0bHNfaHR0cF9jdHgscGF0aCxOVUxMKSA9PSAw KSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfaHR0cF9pbml0IHVuYWJsZSB0byBsb2Fk IHBhdGgiLHBhdGgsMCk7Ci0gICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCi0gICAgICAg ICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgdmVyaWZ5LWZpbGU6ICVzXHJcbiIscGF0 aCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZSAvKiBOVCAqLwotICAgIHsKLSAgICAgICAgLyog VGhlIGRlZmF1bHRzIGluIHRoZSBTU0wgY3J5cHRvIGxpYnJhcnkgYXJlIG5vdCBhcHByb3ByaWF0 ZSBmb3IgT1MvMiAqLwotICAgICAgICBjaGFyIHBhdGhbQ0tNQVhQQVRIXTsKLQotICAgICAgICBj a21ha21zZyhwYXRoLENLTUFYUEFUSCxleGVkaXIsImNlcnRzIixOVUxMLE5VTEwpOwotICAgICAg ICBpZiAoU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnModGxzX2h0dHBfY3R4LE5VTEwscGF0 aCkgPT0gMCkgIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9odHRwX2luaXQgdW5hYmxl IHRvIGxvYWQgcGF0aCIscGF0aCwwKTsKLSAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykK LSAgICAgICAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9hZCB2ZXJpZnktZGlyOiAlc1xy XG4iLHBhdGgpOwotICAgICAgICB9Ci0gICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQQVRILGV4 ZWRpciwiY2FfY2VydHMucGVtIixOVUxMLE5VTEwpOwotICAgICAgICBpZiAoU1NMX0NUWF9sb2Fk X3ZlcmlmeV9sb2NhdGlvbnModGxzX2h0dHBfY3R4LHBhdGgsTlVMTCkgPT0gMCkgewotICAgICAg ICAgICAgZGVidWcoRjExMCwic3NsX2h0dHBfaW5pdCB1bmFibGUgdG8gbG9hZCBwYXRoIixwYXRo LDApOwotICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQotICAgICAgICAgICAgICAgIHBy aW50ZigiP1VuYWJsZSB0byBsb2FkIHZlcmlmeS1maWxlOiAlc1xyXG4iLHBhdGgpOwotICAgICAg ICB9Ci0gICAgfQotI2VuZGlmIC8qIE5UICovCi0jZWxzZSAvKiBPUzIgKi8KLSAgICBTU0xfQ1RY X3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyh0bHNfaHR0cF9jdHgpOwotI2VuZGlmIC8qIE9TMiAq LwotCi0gICAgaWYgKHNzbF92ZXJpZnlfZmlsZSAmJgotICAgICAgICBTU0xfQ1RYX2xvYWRfdmVy aWZ5X2xvY2F0aW9ucyh0bHNfaHR0cF9jdHgsc3NsX3ZlcmlmeV9maWxlLE5VTEwpID09IDApICB7 Ci0gICAgICAgIGRlYnVnKEYxMTAsInNzbF9odHRwX2luaXQgdW5hYmxlIHRvIGxvYWQgc3NsX3Zl cmlmeV9maWxlIixzc2xfdmVyaWZ5X2ZpbGUsMCk7Ci0gICAgICAgIGlmIChzc2xfZGVidWdfZmxh ZykKLSAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIHZlcmlmeS1maWxlOiAlc1xy XG4iLHNzbF92ZXJpZnlfZmlsZSk7Ci0gICAgfQotICAgIGlmIChzc2xfdmVyaWZ5X2RpciAmJgot ICAgICAgICBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyh0bHNfaHR0cF9jdHgsTlVMTCxz c2xfdmVyaWZ5X2RpcikgPT0gMCkgIHsKLSAgICAgICAgZGVidWcoRjExMCwic3NsX2h0dHBfaW5p dCB1bmFibGUgdG8gbG9hZCBzc2xfdmVyaWZ5X2RpciIsc3NsX3ZlcmlmeV9kaXIsMCk7Ci0gICAg ICAgIGlmIChzc2xfZGVidWdfZmxhZykKLSAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBs b2FkIHZlcmlmeS1kaXI6ICVzXHJcbiIsc3NsX3ZlcmlmeV9kaXIpOwotICAgIH0KLQotICAgIFNT TF9DVFhfc2V0X3ZlcmlmeSh0bHNfaHR0cF9jdHgsc3NsX3ZlcmlmeV9mbGFnLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3NsX2NsaWVudF92ZXJpZnlfY2FsbGJhY2spOwotCi0gICAgLyog RnJlZSB0aGUgZXhpc3RpbmcgQ1JMIFN0b3JlICovCi0gICAgaWYgKGNybF9zdG9yZSkgewotICAg ICAgICBYNTA5X1NUT1JFX2ZyZWUoY3JsX3N0b3JlKTsKLSAgICAgICAgY3JsX3N0b3JlID0gTlVM TDsKLSAgICB9Ci0KLSAgICAvKiBzZXQgdXAgdGhlIG5ldyBDUkwgU3RvcmUgKi8KLSAgICBjcmxf c3RvcmUgPSBYNTA5X1NUT1JFX25ldygpOwotICAgIGlmIChjcmxfc3RvcmUpIHsKLSNpZmRlZiBP UzIKLSAgICAgICAgY2hhciBwYXRoW0NLTUFYUEFUSF07Ci0KLSAgICAgICAgY2ttYWttc2cocGF0 aCxDS01BWFBBVEgsZXhlZGlyLCJjcmxzIixOVUxMLE5VTEwpOwotICAgICAgICBpZiAoWDUwOV9T VE9SRV9sb2FkX2xvY2F0aW9ucyhjcmxfc3RvcmUsTlVMTCxwYXRoKSA9PSAwKSB7Ci0gICAgICAg ICAgICBkZWJ1ZyhGMTEwLCJzc2xfaHR0cF9pbml0IHVuYWJsZSB0byBsb2FkIGRpciIscGF0aCww KTsKLSAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKLSAgICAgICAgICAgICAgICBwcmlu dGYoIj9VbmFibGUgdG8gbG9hZCBjcmwtZGlyOiAlc1xyXG4iLHBhdGgpOwotICAgICAgICB9Ci0j aWZkZWYgTlQKLSAgICAgICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgsR2V0QXBwRGF0YSgxKSwi a2VybWl0IDk1L2NybHMiLE5VTEwsTlVMTCk7Ci0gICAgICAgIGlmIChYNTA5X1NUT1JFX2xvYWRf bG9jYXRpb25zKGNybF9zdG9yZSxOVUxMLHBhdGgpID09IDApIHsKLSAgICAgICAgICAgIGRlYnVn KEYxMTAsInNzbF9odHRwX2luaXQgdW5hYmxlIHRvIGxvYWQgZGlyIixwYXRoLDApOwotICAgICAg ICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQotICAgICAgICAgICAgICAgIHByaW50ZigiP1VuYWJs ZSB0byBsb2FkIGNybC1kaXI6ICVzXHJcbiIscGF0aCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2tt YWttc2cocGF0aCxDS01BWFBBVEgsR2V0QXBwRGF0YSgwKSwia2VybWl0IDk1L2NybHMiLE5VTEws TlVMTCk7Ci0gICAgICAgIGlmIChYNTA5X1NUT1JFX2xvYWRfbG9jYXRpb25zKGNybF9zdG9yZSxO VUxMLHBhdGgpID09IDApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9odHRwX2luaXQg dW5hYmxlIHRvIGxvYWQgZGlyIixwYXRoLDApOwotICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19m bGFnKQotICAgICAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIGNybC1kaXI6ICVz XHJcbiIscGF0aCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICAKLSAgICAg ICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgsZXhlZGlyLCJjYV9jcmxzLnBlbSIsTlVMTCxOVUxM KTsKLSAgICAgICAgaWYgKFg1MDlfU1RPUkVfbG9hZF9sb2NhdGlvbnMoY3JsX3N0b3JlLHBhdGgs TlVMTCkgPT0gMCkgewotICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX2h0dHBfaW5pdCB1bmFi bGUgdG8gbG9hZCBmaWxlIixwYXRoLDApOwotICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFn KQotICAgICAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIGNybC1maWxlOiAlc1xy XG4iLHBhdGgpOwotICAgICAgICB9Ci0jaWZkZWYgTlQKLSAgICAgICAgY2ttYWttc2cocGF0aCxD S01BWFBBVEgsR2V0QXBwRGF0YSgxKSwia2VybWl0IDk1L2NhX2NybHMucGVtIixOVUxMLE5VTEwp OwotICAgICAgICBpZiAoWDUwOV9TVE9SRV9sb2FkX2xvY2F0aW9ucyhjcmxfc3RvcmUscGF0aCxO VUxMKSA9PSAwKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfaHR0cF9pbml0IHVuYWJs ZSB0byBsb2FkIGZpbGUiLHBhdGgsMCk7Ci0gICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcp Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgY3JsLWZpbGU6ICVzXHJc biIscGF0aCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgsR2V0 QXBwRGF0YSgwKSwia2VybWl0IDk1L2NhX2NybHMucGVtIixOVUxMLE5VTEwpOwotICAgICAgICBp ZiAoWDUwOV9TVE9SRV9sb2FkX2xvY2F0aW9ucyhjcmxfc3RvcmUscGF0aCxOVUxMKSA9PSAwKSB7 Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfaHR0cF9pbml0IHVuYWJsZSB0byBsb2FkIGZp bGUiLHBhdGgsMCk7Ci0gICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCi0gICAgICAgICAg ICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgY3JsLWZpbGU6ICVzXHJcbiIscGF0aCk7Ci0g ICAgICAgIH0KLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAgICAgIGlm IChzc2xfY3JsX2ZpbGUgfHwgc3NsX2NybF9kaXIpIHsKLSAgICAgICAgICAgIGlmIChzc2xfY3Js X2ZpbGUgJiYKLSAgICAgICAgICAgICAgICBYNTA5X1NUT1JFX2xvYWRfbG9jYXRpb25zKGNybF9z dG9yZSxzc2xfY3JsX2ZpbGUsTlVMTCkgPT0gMCkgewotICAgICAgICAgICAgICAgIGRlYnVnKEYx MTAsInNzbF9odHRwX2luaXQgdW5hYmxlIHRvIGxvYWQgc3NsX2NybF9maWxlIixzc2xfY3JsX2Zp bGUsMCk7Ci0gICAgICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQotICAgICAgICAgICAg ICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9hZCBjcmwtZmlsZTogJXNcclxuIixzc2xfY3Js X2ZpbGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHNzbF9jcmxfZGlyICYmCi0g ICAgICAgICAgICAgICAgWDUwOV9TVE9SRV9sb2FkX2xvY2F0aW9ucyhjcmxfc3RvcmUsTlVMTCxz c2xfY3JsX2RpcikgPT0gMCkgewotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9odHRw X2luaXQgdW5hYmxlIHRvIGxvYWQgc3NsX2NybF9kaXIiLHNzbF9jcmxfZGlyLDApOwotICAgICAg ICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRm KCI/VW5hYmxlIHRvIGxvYWQgY3JsLWRpcjogJXNcclxuIixzc2xfY3JsX2Rpcik7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBYNTA5X1NUT1JFX3NldF9kZWZh dWx0X3BhdGhzKGNybF9zdG9yZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNpZm5kZWYgQ09NTUVO VAotICAgIHRsc19jb254ID0gdGxzX2h0dHBfY29uOwotICAgIHRsc19odHRwX2Nvbj0oU1NMICop U1NMX25ldyh0bHNfaHR0cF9jdHgpOwotICAgIGlmICggIXRsc19odHRwX2NvbiApIHsKLSAgICAg ICAgZGVidWcoRjExMCwic3NsX2h0dHBfaW5pdCIsIlNTTF9uZXcodGxzX2h0dHBfY29uKSBmYWls ZWQiLDApOwotICAgICAgICB0bHNfaHR0cF9jb24gPSB0bHNfY29ueDsKLSAgICAgICAgcmV0dXJu KDApOwotICAgIH0KLSAgICBpZiAodGxzX2NvbngpIHsKLSAgICAgICAgU1NMX3NldF9zZXNzaW9u KHRsc19odHRwX2NvbiwgU1NMX2dldF9zZXNzaW9uKHRsc19jb254KSk7Ci0jaWZkZWYgU1NMX0tS QjUKLQkJaWYgKHRsc19jb254LT5rc3NsX2N0eCkgewotCQkJa3NzbF9jdHhfZnJlZSh0bHNfY29u eC0+a3NzbF9jdHgpOwotCQkJdGxzX2NvbngtPmtzc2xfY3R4ID0gTlVMTDsKLQkJfQotI2VuZGlm IC8qIFNTTF9LUkI1ICovCi0gICAgICAgIFNTTF9mcmVlKHRsc19jb254KTsKLSAgICAgICAgdGxz X2NvbnggPSBOVUxMOwotICAgIH0KLSNlbHNlIC8qIENPTU1FTlQgKi8KLSAgICAvKiBJIGRvbid0 IGtub3cgd2h5IHRoaXMgZG9lcyBub3Qgd29yayB0byByZXVzZSB0aGUgY29ubmVjdGlvbi4gKi8K LSAgICBpZiAoIHRsc19odHRwX2NvbiApIHsKLSAgICAgICAgU1NMX2NsZWFyKHRsc19odHRwX2Nv bik7Ci0gICAgICAgIFNTTF9zZXRfc2Vzc2lvbih0bHNfaHR0cF9jb24sTlVMTCk7Ci0gICAgICAg IFNTTF9zZXRfYWNjZXB0X3N0YXRlKHRsc19odHRwX2NvbikgOwotICAgIH0gZWxzZSB7Ci0gICAg ICAgIHRsc19odHRwX2Nvbj0oU1NMICopU1NMX25ldyh0bHNfaHR0cF9jdHgpOwotICAgICAgICBp ZiAoICF0bHNfaHR0cF9jb24gKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfaHR0cF9p bml0IiwiU1NMX25ldyh0bHNfaHR0cF9jdHgpIGZhaWxlZCIsMCk7Ci0gICAgICAgICAgICB0bHNf aHR0cF9jb24gPSB0bHNfY29ueDsKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgfQot ICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSNpZmRlZiBTU0xfS1JCNQotI2lmbmRlZiBL UkI1X1NFUlZJQ0VfTkFNRQotI2RlZmluZSBLUkI1X1NFUlZJQ0VfTkFNRSAgICAiaG9zdCIKLSNl bmRpZgotCi0gICAgaWYgKHRsc19odHRwX2Nvbi0+a3NzbF9jdHggPT0gTlVMTCkKLSAgICB0bHNf aHR0cF9jb24tPmtzc2xfY3R4ID0ga3NzbF9jdHhfbmV3KCk7Ci0gICAgaWYgKHRsc19odHRwX2Nv bi0+a3NzbF9jdHggIT0gTlVMTCkKLSAgICAgICAga3NzbF9jdHhfc2V0c3RyaW5nKHRsc19odHRw X2Nvbi0+a3NzbF9jdHgsIEtTU0xfU0VSVkVSLCBob3N0bmFtZSk7Ci0KLSAgICBrc3NsX2N0eF9z ZXRzdHJpbmcodGxzX2h0dHBfY29uLT5rc3NsX2N0eCwgS1NTTF9TRVJWSUNFLAotICAgICAgICAg ICAgICAgICAgICAgICAga3JiNV9kX3NydiA/IGtyYjVfZF9zcnYgOiBLUkI1X1NFUlZJQ0VfTkFN RSk7Ci0jZW5kaWYgLyogU1NMX0tSQjUgKi8KLQotICAgIGlmIChzc2xfY2lwaGVyX2xpc3QpCi0g ICAgICAgIFNTTF9zZXRfY2lwaGVyX2xpc3QodGxzX2h0dHBfY29uLHNzbF9jaXBoZXJfbGlzdCk7 Ci0gICAgZWxzZSB7Ci0gICAgICAgIGNoYXIgKiBwOwotICAgICAgICBpZiAocCA9IGdldGVudigi U1NMX0NJUEhFUiIpKSB7Ci0gICAgICAgICAgICBTU0xfc2V0X2NpcGhlcl9saXN0KHRsc19odHRw X2NvbixwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFNTTF9zZXRfY2lwaGVyX2xp c3QodGxzX2h0dHBfY29uLERFRkFVTFRfQ0lQSEVSX0xJU1QpOwotICAgICAgICB9Ci0gICAgfQot Ci0gICAgc3NsX3ZlcmlmeV9kZXB0aCA9IC0xOwotCi0gICAgaWYgKCBzc2xfZGVidWdfZmxhZyAp Ci0gICAgICAgIHByaW50ZigiU1NML1RMUyBpbml0IGRvbmUhXHJcbiIpOwotCi0gICAgc3NsX2h0 dHBfaW5pdGlhbGl6ZWQgPSAxOwotICAgIHJldHVybigxKTsKLX0KLSNlbmRpZiAvKiBOT0hUVFAg Ki8KLQotY2hhciAqCi1zc2xfZ2V0X2ROU05hbWUoc3NsKSBTU0wgKiBzc2w7Ci17Ci0gICAgc3Rh dGljIGNoYXIgKmRucyA9IE5VTEw7Ci0gICAgWDUwOSAqc2VydmVyX2NlcnQgPSBOVUxMOwotICAg IGludCBpOwotICAgIFg1MDlfRVhURU5TSU9OICpleHQgPSBOVUxMOwotICAgIFNUQUNLX09GKEdF TkVSQUxfTkFNRSkgKmlhbHQgPSBOVUxMOwotICAgIEdFTkVSQUxfTkFNRSAqZ2VuID0gTlVMTDsK LQotICAgIGlmICggZG5zICkgewotICAgICAgICBmcmVlKGRucyk7Ci0gICAgICAgIGRucyA9IE5V TEw7Ci0gICAgfQotCi0gICAgaWYgKHNlcnZlcl9jZXJ0ID0gU1NMX2dldF9wZWVyX2NlcnRpZmlj YXRlKHNzbCkpIHsKLSAgICAgICAgaWYgKChpID0gWDUwOV9nZXRfZXh0X2J5X05JRChzZXJ2ZXJf Y2VydCwgTklEX3N1YmplY3RfYWx0X25hbWUsIC0xKSk8MCkKLSAgICAgICAgICAgIHJldHVybiBO VUxMOwotICAgICAgICBpZiAoIShleHQgPSBYNTA5X2dldF9leHQoc2VydmVyX2NlcnQsIGkpKSkK LSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBYNTA5VjNfYWRkX3N0YW5kYXJkX2V4 dGVuc2lvbnMoKTsKLSAgICAgICAgaWYgKCEoaWFsdCA9IFg1MDlWM19FWFRfZDJpKGV4dCkpKQot ICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBza19HRU5F UkFMX05BTUVfbnVtKGlhbHQpOyBpKyspIHsKLSAgICAgICAgICAgIGdlbiA9IHNrX0dFTkVSQUxf TkFNRV92YWx1ZShpYWx0LCBpKTsKLSAgICAgICAgICAgIGlmIChnZW4tPnR5cGUgPT0gR0VOX0RO UykgewotICAgICAgICAgICAgICAgIGlmICghZ2VuLT5kLmlhNSB8fCAhZ2VuLT5kLmlhNS0+bGVu Z3RoKQotCQkgIGJyZWFrOwotICAgICAgICAgICAgICAgIGlmIChzdHJsZW4oKGNoYXIgKilnZW4t PmQuaWE1LT5kYXRhKSAhPSBnZW4tPmQuaWE1LT5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAg ICAgLyogSWdub3JpbmcgSUE1U3RyaW5nIGNvbnRhaW5pbmcgbnVsbCBjaGFyYWN0ZXIgKi8KLSAg ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgIGRucyA9IG1hbGxvYyhnZW4tPmQuaWE1LT5sZW5ndGggKyAxKTsKLSAgICAgICAgICAg ICAgICBpZiAoZG5zKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1lbWNweShkbnMsIGdlbi0+ZC5p YTUtPmRhdGEsIGdlbi0+ZC5pYTUtPmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgIGRuc1tn ZW4tPmQuaWE1LT5sZW5ndGhdID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgWDUwOVYzX0VYVF9j bGVhbnVwKCk7Ci0gICAgfQotY2xlYW51cDoKLSAgICBpZiAoaWFsdCkgICAgICAgICAgIHNrX0dF TkVSQUxfTkFNRV9mcmVlKGlhbHQpOwotICAgIGlmIChzZXJ2ZXJfY2VydCkgICAgWDUwOV9mcmVl KHNlcnZlcl9jZXJ0KTsKLSAgICByZXR1cm4gZG5zOwotfQotCi1jaGFyICoKLXNzbF9nZXRfY29t bW9uTmFtZShzc2wpIFNTTCAqIHNzbDsgewotICAgIHN0YXRpYyBjaGFyIG5hbWVbMjU2XTsKLSAg ICBpbnQgbmFtZV90ZXh0X2xlbjsKLSAgICBpbnQgZXJyOwotICAgIFg1MDkgKnNlcnZlcl9jZXJ0 OwotCi0gICAgbmFtZV90ZXh0X2xlbiA9IDA7Ci0gICAgaWYgKHNlcnZlcl9jZXJ0ID0gU1NMX2dl dF9wZWVyX2NlcnRpZmljYXRlKHNzbCkpIHsKLSAgICAgICAgbmFtZV90ZXh0X2xlbiA9Ci0JICAg IFg1MDlfTkFNRV9nZXRfdGV4dF9ieV9OSUQoWDUwOV9nZXRfc3ViamVjdF9uYW1lKHNlcnZlcl9j ZXJ0KSwKLQkJCQkgICAgICBOSURfY29tbW9uTmFtZSwgbmFtZSwgc2l6ZW9mKG5hbWUpKTsKLSAg ICAgICAgWDUwOV9mcmVlKHNlcnZlcl9jZXJ0KTsKLSAgICB9Ci0gICAgaWYgKG5hbWVfdGV4dF9s ZW4gPD0gMCkgewotCS8qIENvbW1vbiBOYW1lIHdhcyBlbXB0eSBvciBub3QgcmV0cmlldmVkICov Ci0gICAgICAgIGVyciA9IDA7Ci0gICAgfSBlbHNlIGlmIChzdHJsZW4obmFtZSkgIT0gbmFtZV90 ZXh0X2xlbikgewotICAgICAgICAvKiBJZ25vcmluZyBDb21tb24gTmFtZSBjb250YWluaW5nIG51 bGwgY2hhcmFjdGVyICovCi0JZXJyID0gMDsKLSAgICB9IGVsc2UgewotCWVyciA9IDE7Ci0gICAg fQotICAgIGlmIChlcnIgPiAwKQotICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgZWxzZQotICAgICAg cmV0dXJuIE5VTEw7Ci19Ci0KLWNoYXIgKgotc3NsX2dldF9pc3N1ZXJfbmFtZShzc2wpIFNTTCAq IHNzbDsKLXsKLSAgICBzdGF0aWMgY2hhciBuYW1lWzI1Nl07Ci0gICAgWDUwOSAqc2VydmVyX2Nl cnQ7Ci0KLSAgICBuYW1lWzBdID0gJ1wwJzsKLSAgICBpZiAoc2VydmVyX2NlcnQgPSBTU0xfZ2V0 X3BlZXJfY2VydGlmaWNhdGUoc3NsKSkgewotICAgICAgICBYNTA5X05BTUVfb25lbGluZShYNTA5 X2dldF9pc3N1ZXJfbmFtZShzZXJ2ZXJfY2VydCksbmFtZSxzaXplb2YobmFtZSkpOwotICAgICAg ICBYNTA5X2ZyZWUoc2VydmVyX2NlcnQpOwotICAgICAgICByZXR1cm4gbmFtZTsKLSAgICB9Ci0g ICAgZWxzZSB7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgZnByaW50ZihzdGRlcnIsICJXYXJuaW5n OiBObyBjZXJ0aWZpY2F0ZSBmcm9tIHNlcnZlciFcclxuIik7Ci0jZW5kaWYgLyogQ09NTUVOVCAq LwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci19Ci0KLWNoYXIgKgotc3NsX2dldF9zdWJq ZWN0X25hbWUoc3NsKSBTU0wgKiBzc2w7Ci17Ci0gICAgc3RhdGljIGNoYXIgbmFtZVsyNTZdOwot ICAgIFg1MDkgKnNlcnZlcl9jZXJ0OwotCi0gICAgbmFtZVswXSA9ICdcMCc7Ci0gICAgaWYgKHNl cnZlcl9jZXJ0ID0gU1NMX2dldF9wZWVyX2NlcnRpZmljYXRlKHNzbCkpIHsKLSAgICAgICBYNTA5 X05BTUVfb25lbGluZShYNTA5X2dldF9zdWJqZWN0X25hbWUoc2VydmVyX2NlcnQpLG5hbWUsc2l6 ZW9mKG5hbWUpKTsKLSAgICAgICBYNTA5X2ZyZWUoc2VydmVyX2NlcnQpOwotICAgICAgIHJldHVy biBuYW1lOwotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBOVUxMOwotfQotCi0jaWZk ZWYgQ09NTUVOVAotI2lmZGVmIENLX1NTTAotICAgICAgICAgICAgJiYgIShja19zc2xlYXlfaXNf aW5zdGFsbGVkKCkgJiYKLSAgICAgICAgICAgICAgICh0bHNfYWN0aXZlX2ZsYWcgfHwgc3NsX2Fj dGl2ZV9mbGFnKSAmJgotICAgICAgICAgICAgICAgc3NsX2Fub255bW91c19jaXBoZXIodGxzX2Fj dGl2ZV9mbGFnP3Rsc19jb246c3NsX2NvbikpCi0jZW5kaWYgLyogQ0tfU1NMICovCi0KLWludAot c3NsX2Fub255bW91c19jaXBoZXIoc3NsKSBTU0wgKiBzc2w7Ci17Ci0gICAgWDUwOSAqIGNlcnQ7 Ci0KLSAgICBpZiAoc3N0ZWxuZXQpCi0gICAgICAgIGNlcnQgPSBTU0xfZ2V0X2NlcnRpZmljYXRl KHNzbCk7Ci0gICAgZWxzZQotICAgICAgICBjZXJ0ID0gU1NMX2dldF9wZWVyX2NlcnRpZmljYXRl KHNzbCk7Ci0KLSAgICBpZiAoIGNlcnQgKSB7Ci0gICAgICAgIFg1MDlfZnJlZShjZXJ0KTsKLSAg ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiAxOwotfQotI2VuZGlmIC8qIENPTU1F TlQgKi8KLQotLyoKLSAgVGhpcyBvbmUgaXMgKHZlcnkgbXVjaCEpIGJhc2VkIG9uIHdvcmsgYnkK LSAgUmFsZiBTLiBFbmdlbHNjaGFsbCA8cnNlQGVuZ2Vsc2NoYWxsLmNvbT4uCi0gIENvbW1lbnRz IGJ5IFJhbGYuCi0qLwotaW50Ci1zc2xfdmVyaWZ5X2NybChpbnQgb2ssIFg1MDlfU1RPUkVfQ1RY ICpjdHgpCi17Ci0gICAgWDUwOV9PQkpFQ1Qgb2JqOwotICAgIFg1MDlfTkFNRSAqc3ViamVjdCA9 IE5VTEw7Ci0gICAgWDUwOV9OQU1FICppc3N1ZXIgPSBOVUxMOwotICAgIFg1MDkgKnhzID0gTlVM TDsKLSAgICBYNTA5X0NSTCAqY3JsID0gTlVMTDsKLSAgICBYNTA5X1JFVk9LRUQgKnJldm9rZWQg PSBOVUxMOwotICAgIFg1MDlfU1RPUkVfQ1RYICogc3RvcmVfY3R4ID0gTlVMTDsKLSAgICBsb25n IHNlcmlhbDsKLSAgICBCSU8gKmJpbyA9IE5VTEw7Ci0gICAgaW50IGksIG4sIHJjOwotICAgIGNo YXIgKmNwOwotICAgIGNoYXIgKmNwMjsKLQotICAgIC8qCi0gICAgICogVW5sZXNzIGEgcmV2b2Nh dGlvbiBzdG9yZSBmb3IgQ1JMcyB3YXMgY3JlYXRlZCB3ZQotICAgICAqIGNhbm5vdCBkbyBhbnkg Q1JMLWJhc2VkIHZlcmlmaWNhdGlvbiwgb2YgY291cnNlLgotICAgICAqLwotICAgIGlmICghY3Js X3N0b3JlKQotICAgICAgICByZXR1cm4gb2s7Ci0KLSAgICBzdG9yZV9jdHggPSBYNTA5X1NUT1JF X0NUWF9uZXcoKTsKLSAgICBpZiAoICFzdG9yZV9jdHggKQotICAgICAgICByZXR1cm4ob2spOwot Ci0gICAgLyoKLSAgICAgKiBEZXRlcm1pbmUgY2VydGlmaWNhdGUgaW5ncmVkaWVudHMgaW4gYWR2 YW5jZQotICAgICAqLwotICAgIHhzICAgICAgPSBYNTA5X1NUT1JFX0NUWF9nZXRfY3VycmVudF9j ZXJ0KGN0eCk7Ci0gICAgc3ViamVjdCA9IFg1MDlfZ2V0X3N1YmplY3RfbmFtZSh4cyk7Ci0gICAg aXNzdWVyICA9IFg1MDlfZ2V0X2lzc3Vlcl9uYW1lKHhzKTsKLQotICAgIC8qCi0gICAgICogT3Bl blNTTCBwcm92aWRlcyB0aGUgZ2VuZXJhbCBtZWNoYW5pc20gdG8gZGVhbCB3aXRoIENSTHMgYnV0 IGRvZXMgbm90Ci0gICAgICogdXNlIHRoZW0gYXV0b21hdGljYWxseSB3aGVuIHZlcmlmeWluZyBj ZXJ0aWZpY2F0ZXMsIHNvIHdlIGRvIGl0Ci0gICAgICogZXhwbGljaXRseSBoZXJlLiBXZSB3aWxs IGNoZWNrIHRoZSBDUkwgZm9yIHRoZSBjdXJyZW50bHkgY2hlY2tlZAotICAgICAqIGNlcnRpZmlj YXRlLCBpZiB0aGVyZSBpcyBzdWNoIGEgQ1JMIGluIHRoZSBzdG9yZS4KLSAgICAgKgotICAgICAq IFdlIGNvbWUgdGhyb3VnaCB0aGlzIHByb2NlZHVyZSBmb3IgZWFjaCBjZXJ0aWZpY2F0ZSBpbiB0 aGUgY2VydGlmaWNhdGUKLSAgICAgKiBjaGFpbiwgc3RhcnRpbmcgd2l0aCB0aGUgcm9vdC1DQSdz IGNlcnRpZmljYXRlLiBBdCBlYWNoIHN0ZXAgd2UndmUgdG8KLSAgICAgKiBib3RoIHZlcmlmeSB0 aGUgc2lnbmF0dXJlIG9uIHRoZSBDUkwgKHRvIG1ha2Ugc3VyZSBpdCdzIGEgdmFsaWQgQ1JMKQot ICAgICAqIGFuZCBpdCdzIHJldm9jYXRpb24gbGlzdCAodG8gbWFrZSBzdXJlIHRoZSBjdXJyZW50 IGNlcnRpZmljYXRlIGlzbid0Ci0gICAgICogcmV2b2tlZCkuICBCdXQgYmVjYXVzZSB0byBjaGVj ayB0aGUgc2lnbmF0dXJlIG9uIHRoZSBDUkwgd2UgbmVlZCB0aGUKLSAgICAgKiBwdWJsaWMga2V5 IG9mIHRoZSBpc3N1aW5nIENBIGNlcnRpZmljYXRlICh3aGljaCB3YXMgYWxyZWFkeSBwcm9jZXNz ZWQKLSAgICAgKiBvbmUgcm91bmQgYmVmb3JlKSwgd2UndmUgYSBsaXR0bGUgcHJvYmxlbS4gQnV0 IHdlIGNhbiBib3RoIHNvbHZlIGl0IGFuZAotICAgICAqIGF0IHRoZSBzYW1lIHRpbWUgb3B0aW1p emUgdGhlIHByb2Nlc3NpbmcgYnkgdXNpbmcgdGhlIGZvbGxvd2luZwotICAgICAqIHZlcmlmaWNh dGlvbiBzY2hlbWUgKGlkZWEgYW5kIGNvZGUgc25pcHBldHMgYm9ycm93ZWQgZnJvbSB0aGUgR0xP QlVTCi0gICAgICogcHJvamVjdCk6Ci0gICAgICoKLSAgICAgKiAxLiBXZSdsbCBjaGVjayB0aGUg c2lnbmF0dXJlIG9mIGEgQ1JMIGluIGVhY2ggc3RlcCB3aGVuIHdlIGZpbmQgYSBDUkwKLSAgICAg KiAgICB0aHJvdWdoIHRoZSBfc3ViamVjdF8gbmFtZSBvZiB0aGUgY3VycmVudCBjZXJ0aWZpY2F0 ZS4gVGhpcyBDUkwKLSAgICAgKiAgICBpdHNlbGYgd2lsbCBiZSBuZWVkZWQgdGhlIGZpcnN0IHRp bWUgaW4gdGhlIG5leHQgcm91bmQsIG9mIGNvdXJzZS4KLSAgICAgKiAgICBCdXQgd2UgZG8gdGhl IHNpZ25hdHVyZSBwcm9jZXNzaW5nIG9uZSByb3VuZCBiZWZvcmUgdGhpcyB3aGVyZSB0aGUKLSAg ICAgKiAgICBwdWJsaWMga2V5IG9mIHRoZSBDQSBpcyBhdmFpbGFibGUuCi0gICAgICoKLSAgICAg KiAyLiBXZSdsbCBjaGVjayB0aGUgcmV2b2NhdGlvbiBsaXN0IG9mIGEgQ1JMIGluIGVhY2ggc3Rl cCB3aGVuCi0gICAgICogICAgd2UgZmluZCBhIENSTCB0aHJvdWdoIHRoZSBfaXNzdWVyXyBuYW1l IG9mIHRoZSBjdXJyZW50IGNlcnRpZmljYXRlLgotICAgICAqICAgIFRoaXMgQ1JMcyBzaWduYXR1 cmUgd2FzIHRoZW4gYWxyZWFkeSB2ZXJpZmllZCBvbmUgcm91bmQgYmVmb3JlLgotICAgICAqCi0g ICAgICogVGhpcyB2ZXJpZmljYXRpb24gc2NoZW1lIGFsbG93cyBhIENBIHRvIHJldm9rZSBpdHMg b3duIGNlcnRpZmljYXRlIGFzCi0gICAgICogd2VsbCwgb2YgY291cnNlLgotICAgICAqLwotCi0g ICAgLyoKLSAgICAgKiBUcnkgdG8gcmV0cmlldmUgYSBDUkwgY29ycmVzcG9uZGluZyB0byB0aGUg X3N1YmplY3RfIG9mCi0gICAgICogdGhlIGN1cnJlbnQgY2VydGlmaWNhdGUgaW4gb3JkZXIgdG8g dmVyaWZ5IGl0J3MgaW50ZWdyaXR5LgotICAgICAqLwotICAgIG1lbXNldCgoY2hhciAqKSZvYmos IDAsIHNpemVvZihvYmopKTsKLSAgICBYNTA5X1NUT1JFX0NUWF9pbml0KHN0b3JlX2N0eCwgY3Js X3N0b3JlLCBOVUxMLCBOVUxMKTsKLSAgICByYyA9IFg1MDlfU1RPUkVfZ2V0X2J5X3N1YmplY3Qo c3RvcmVfY3R4LCBYNTA5X0xVX0NSTCwgc3ViamVjdCwgJm9iaik7Ci0gICAgWDUwOV9TVE9SRV9D VFhfY2xlYW51cChzdG9yZV9jdHgpOwotICAgIGNybCA9IG9iai5kYXRhLmNybDsKLSAgICBpZiAo cmMgPiAwICYmIGNybCAhPSBOVUxMKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFZlcmlmeSB0 aGUgc2lnbmF0dXJlIG9uIHRoaXMgQ1JMCi0gICAgICAgICAqLwotICAgICAgICBpZiAoWDUwOV9D UkxfdmVyaWZ5KGNybCwgWDUwOV9nZXRfcHVia2V5KHhzKSkgPD0gMCkgewotICAgICAgICAgICAg ZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIHNpZ25hdHVyZSBvbiBDUkwhXG4iKTsKLSAgICAgICAg ICAgIFg1MDlfU1RPUkVfQ1RYX3NldF9lcnJvcihjdHgsIFg1MDlfVl9FUlJfQ1JMX1NJR05BVFVS RV9GQUlMVVJFKTsKLSAgICAgICAgICAgIFg1MDlfT0JKRUNUX2ZyZWVfY29udGVudHMoJm9iaik7 Ci0gICAgICAgICAgICBYNTA5X1NUT1JFX0NUWF9mcmVlKHN0b3JlX2N0eCk7Ci0gICAgICAgICAg ICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIENoZWNrIGRh dGUgb2YgQ1JMIHRvIG1ha2Ugc3VyZSBpdCdzIG5vdCBleHBpcmVkCi0gICAgICAgICAqLwotICAg ICAgICBpID0gWDUwOV9jbXBfY3VycmVudF90aW1lKFg1MDlfQ1JMX2dldF9uZXh0VXBkYXRlKGNy bCkpOwotICAgICAgICBpZiAoaSA9PSAwKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg IkZvdW5kIENSTCBoYXMgaW52YWxpZCBuZXh0VXBkYXRlIGZpZWxkLlxuIik7Ci0gICAgICAgICAg ICBYNTA5X1NUT1JFX0NUWF9zZXRfZXJyb3IoY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgWDUwOV9WX0VSUl9FUlJPUl9JTl9DUkxfTkVYVF9VUERBVEVfRklFTEQpOwot ICAgICAgICAgICAgWDUwOV9PQkpFQ1RfZnJlZV9jb250ZW50cygmb2JqKTsKLSAgICAgICAgICAg IFg1MDlfU1RPUkVfQ1RYX2ZyZWUoc3RvcmVfY3R4KTsKLSAgICAgICAgICAgIHJldHVybiAwOwot ICAgICAgICB9Ci0gICAgICAgIGlmIChpIDwgMCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRl cnIsCi0iRm91bmQgQ1JMIGlzIGV4cGlyZWQgLSByZXZva2luZyBhbGwgY2VydGlmaWNhdGVzIHVu dGlsIHlvdSBnZXQgdXBkYXRlZCBDUkwuXG4iCi0gICAgICAgICAgICAgICAgICAgICk7Ci0gICAg ICAgICAgICBYNTA5X1NUT1JFX0NUWF9zZXRfZXJyb3IoY3R4LCBYNTA5X1ZfRVJSX0NSTF9IQVNf RVhQSVJFRCk7Ci0gICAgICAgICAgICBYNTA5X09CSkVDVF9mcmVlX2NvbnRlbnRzKCZvYmopOwot ICAgICAgICAgICAgWDUwOV9TVE9SRV9DVFhfZnJlZShzdG9yZV9jdHgpOwotICAgICAgICAgICAg cmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgWDUwOV9PQkpFQ1RfZnJlZV9jb250ZW50cygm b2JqKTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIFRyeSB0byByZXRyaWV2ZSBhIENSTCBjb3Jy ZXNwb25kaW5nIHRvIHRoZSBfaXNzdWVyXyBvZgotICAgICAqIHRoZSBjdXJyZW50IGNlcnRpZmlj YXRlIGluIG9yZGVyIHRvIGNoZWNrIGZvciByZXZvY2F0aW9uLgotICAgICAqLwotICAgIG1lbXNl dCgoY2hhciAqKSZvYmosIDAsIHNpemVvZihvYmopKTsKLSAgICBYNTA5X1NUT1JFX0NUWF9pbml0 KHN0b3JlX2N0eCwgY3JsX3N0b3JlLCBOVUxMLCBOVUxMKTsKLSAgICByYyA9IFg1MDlfU1RPUkVf Z2V0X2J5X3N1YmplY3Qoc3RvcmVfY3R4LCBYNTA5X0xVX0NSTCwgaXNzdWVyLCAmb2JqKTsKLSAg ICBYNTA5X1NUT1JFX0NUWF9mcmVlKHN0b3JlX2N0eCk7CQkvKiBjYWxscyBYNTA5X1NUT1JFX0NU WF9jbGVhbnVwKCkgKi8KLSAgICBjcmwgPSBvYmouZGF0YS5jcmw7Ci0gICAgaWYgKHJjID4gMCAm JiBjcmwgIT0gTlVMTCkgewotICAgICAgICAvKgotICAgICAgICAgKiBDaGVjayBpZiB0aGUgY3Vy cmVudCBjZXJ0aWZpY2F0ZSBpcyByZXZva2VkIGJ5IHRoaXMgQ1JMCi0gICAgICAgICAqLwotICAg ICAgICBuID0gc2tfWDUwOV9SRVZPS0VEX251bShYNTA5X0NSTF9nZXRfUkVWT0tFRChjcmwpKTsK LSAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICAgICAgcmV2b2tlZCA9 IHNrX1g1MDlfUkVWT0tFRF92YWx1ZShYNTA5X0NSTF9nZXRfUkVWT0tFRChjcmwpLCBpKTsKLSAg ICAgICAgICAgIGlmIChBU04xX0lOVEVHRVJfY21wKHJldm9rZWQtPnNlcmlhbE51bWJlciwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFg1MDlfZ2V0X3NlcmlhbE51bWJlcih4cykp ID09IDApIHsKLQotICAgICAgICAgICAgICAgIHNlcmlhbCA9IEFTTjFfSU5URUdFUl9nZXQocmV2 b2tlZC0+c2VyaWFsTnVtYmVyKTsKLSAgICAgICAgICAgICAgICBjcCA9IFg1MDlfTkFNRV9vbmVs aW5lKGlzc3VlciwgTlVMTCwgMCk7Ci0gICAgICAgICAgICAgICAgZnJlZShjcCk7Ci0KLSAgICAg ICAgICAgICAgICBYNTA5X1NUT1JFX0NUWF9zZXRfZXJyb3IoY3R4LCBYNTA5X1ZfRVJSX0NFUlRf UkVWT0tFRCk7Ci0gICAgICAgICAgICAgICAgWDUwOV9PQkpFQ1RfZnJlZV9jb250ZW50cygmb2Jq KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot ICAgICAgICBYNTA5X09CSkVDVF9mcmVlX2NvbnRlbnRzKCZvYmopOwotICAgIH0KLSAgICByZXR1 cm4gb2s7Ci19Ci0KLWNoYXIgKgotdGxzX3VzZXJpZF9mcm9tX2NsaWVudF9jZXJ0KHNzbCkgU1NM ICogc3NsOwotewotICAgIHN0YXRpYyBjaGFyIGNuWzI1Nl07Ci0gICAgc3RhdGljIGNoYXIgKnIg PSBjbjsKLSAgICBpbnQgZXJyOwotICAgIFg1MDkgKmNsaWVudF9jZXJ0OwotCi0gICAgaWYgKGNs aWVudF9jZXJ0ID0gU1NMX2dldF9wZWVyX2NlcnRpZmljYXRlKHNzbCkpIHsKLSAgICAgICAgLyog Y2FsbCB0aGUgY3VzdG9tIGZ1bmN0aW9uICovCi0gICAgICAgIGVyciA9IFg1MDlfdG9fdXNlcihj bGllbnRfY2VydCwgY24sIHNpemVvZihjbikpOwotICAgICAgICBYNTA5X2ZyZWUoY2xpZW50X2Nl cnQpOwotICAgICAgICBpZiAoZXJyKQotICAgICAgICAgICAgcmV0dXJuIHIgPSBOVUxMOwotICAg ICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gcjsKLSAgICB9Ci0gICAgZWxzZQotICAgICAg ICByZXR1cm4gciA9IE5VTEw7Ci19Ci0KLXVuc2lnbmVkIGNoYXIgKioKLXRsc19nZXRfU0FOX29i anMoU1NMICogc3NsLCBpbnQgdHlwZSkKLS8qIHJldHVybnMgTlVMTCBvciBhbiBhcnJheSBvZiBt YWxsb2MnZWQgb2JqZWN0cyBvZiB0eXBlIGB0eXBlJyBmcm9tIHRoZSBzZXJ2ZXIncwotICogc3Vi amVjdEFsdE5hbWUsIHJlbWVtYmVyIHRvIGZyZWUoKSB0aGVtIGFsbCEKLSAqLwotewotI2RlZmlu ZSBOVU1fU0FOX09CSlMgNjQKLSAgICBzdGF0aWMgdW5zaWduZWQgY2hhciAqb2Jqc1tOVU1fU0FO X09CSlNdOwotICAgIHVuc2lnbmVkIGNoYXIgKipydiA9IE5VTEw7Ci0gICAgWDUwOSAqc2VydmVy X2NlcnQgPSBOVUxMOwotICAgIGludCBpLCBqOwotICAgIFg1MDlfRVhURU5TSU9OICpleHQgPSBO VUxMOwotICAgIFNUQUNLX09GKEdFTkVSQUxfTkFNRSkgKmlhbHQgPSBOVUxMOwotICAgIEdFTkVS QUxfTkFNRSAqZ2VuID0gTlVMTDsKLQotICAgIG1lbXNldChvYmpzLCAwLCBzaXplb2Yob2Jqcykp OwotICAgIGlmIChzZXJ2ZXJfY2VydCA9IFNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZShzc2wpKSB7 Ci0gICAgICAgIGlmICgoaSA9IFg1MDlfZ2V0X2V4dF9ieV9OSUQoc2VydmVyX2NlcnQsIE5JRF9z dWJqZWN0X2FsdF9uYW1lLCAtMSkpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZWplY3Q7Ci0gICAg ICAgIGlmICghKGV4dCA9IFg1MDlfZ2V0X2V4dChzZXJ2ZXJfY2VydCwgaSkpKQotICAgICAgICAg ICAgZ290byBlamVjdDsKLSAgICAgICAgWDUwOVYzX2FkZF9zdGFuZGFyZF9leHRlbnNpb25zKCk7 Ci0gICAgICAgIGlmICghKGlhbHQgPSBYNTA5VjNfRVhUX2QyaShleHQpKSkKLSAgICAgICAgICAg IGdvdG8gZWplY3Q7Ci0gICAgICAgIHJ2ID0gb2JqczsKLSAgICAgICAgZm9yIChpID0gMCwgaiA9 IDA7IGkgPCBza19HRU5FUkFMX05BTUVfbnVtKGlhbHQpICYmIGogPCBOVU1fU0FOX09CSlMgLSAy OyBpKyspIHsKLSAgICAgICAgICAgIGdlbiA9IHNrX0dFTkVSQUxfTkFNRV92YWx1ZShpYWx0LCBp KTsKLSAgICAgICAgICAgIC8qIFRoZSB1c2Ugb2YgVl9BU04xX0NPTlRFWFRfU1BFQ0lGSUMgaXMg YmVjYXVzZSBPcGVuU1NMIDAuOS42IGRlZmluZWQgaXRzCi0gICAgICAgICAgICAgKiB0eXBlcyB8 IFZfQVNOMV9DT05URVhUX1NQRUNJRklDLiAgMC45LjcgZG9lcyBub3QuICBJbiBjYXNlLCB3ZSBh cmUgYnVpbHQKLSAgICAgICAgICAgICAqIHdpdGggb25lIGFuZCBsaW5rZWQgdG8gdGhlIG90aGVy IHdlIHVzZSB0aGlzIGhhY2suCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmICgoZ2Vu LT50eXBlIHwgVl9BU04xX0NPTlRFWFRfU1BFQ0lGSUMpID09ICh0eXBlIHwgVl9BU04xX0NPTlRF WFRfU1BFQ0lGSUMpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFnZW4tPmQuaWE1IHx8ICFnZW4t PmQuaWE1LT5sZW5ndGgpCi0JCSAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cmxlbigo Y2hhciAqKWdlbi0+ZC5pYTUtPmRhdGEpICE9IGdlbi0+ZC5pYTUtPmxlbmd0aCkgewotICAgICAg ICAgICAgICAgICAgICAvKiBJZ25vcmluZyBJQTVTdHJpbmcgY29udGFpbmluZyBudWxsIGNoYXJh Y3RlciAqLwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgb2Jqc1tqXSA9IG1hbGxvYyhnZW4tPmQuaWE1LT5sZW5ndGggKyAx KTsKLSAgICAgICAgICAgICAgICBpZiAob2Jqc1tqXSkgewotICAgICAgICAgICAgICAgICAgICBt ZW1jcHkob2Jqc1tqXSwgZ2VuLT5kLmlhNS0+ZGF0YSwgZ2VuLT5kLmlhNS0+bGVuZ3RoKTsKLSAg ICAgICAgICAgICAgICAgICAgb2Jqc1tqXVtnZW4tPmQuaWE1LT5sZW5ndGhdID0gMDsKLSAgICAg ICAgICAgICAgICAgICAgaisrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg ICAgICAgfQotICAgICAgICBYNTA5VjNfRVhUX2NsZWFudXAoKTsKLSAgICB9Ci1lamVjdDoKLSAg ICBpZiAoaWFsdCkgICAgICAgICAgIHNrX0dFTkVSQUxfTkFNRV9mcmVlKGlhbHQpOwotICAgIGlm IChzZXJ2ZXJfY2VydCkgICAgWDUwOV9mcmVlKHNlcnZlcl9jZXJ0KTsKLSAgICByZXR1cm4gcnY7 Ci19Ci0KLQotc3RhdGljIGludAotZE5TTmFtZV9jbXAoY29uc3QgY2hhciAqaG9zdCwgY29uc3Qg Y2hhciAqZE5TTmFtZSkKLXsKLSAgICBpbnQgYzEgPSAxLCBjMiA9IDEsIG51bV9jb21wLCBydiA9 IC0xOwotICAgIGNoYXIgKnAsICpwMSwgKnAyLCAqaG9zdF9jb3B5PU5VTEwsICpkTlNOYW1lX2Nv cHk9TlVMTDsKLQotICAgIC8qIGZpcnN0IHdlIGNvdW50IHRoZSBudW1iZXIgb2YgZG9tYWluIG5h bWUgY29tcG9uZW50cyBpbiBib3RoIHBhcmFtZXRlcnMuCi0gICAgICogdGhleSBzaG91bGQgYmUg ZXF1YWwgbWFueSwgb3IgaXQncyBub3QgYSBtYXRjaAotICAgICAqLwotICAgIHAgPSAoY2hhciAq KSBob3N0OwotICAgIHdoaWxlIChwID0gc3Ryc3RyKHAsICIuIikpIHsKLSAgICAgICAgYzErKzsK LSAgICAgICAgcCsrOwotICAgIH0KLSAgICBwID0gKGNoYXIgKikgZE5TTmFtZTsKLSAgICB3aGls ZSAocCA9IHN0cnN0cihwLCAiLiIpKSB7Ci0gICAgICAgIGMyKys7Ci0gICAgICAgIHArKzsKLSAg ICB9Ci0gICAgaWYgKGMxICE9IGMyKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgbnVtX2NvbXAg PSBjMTsKLQotICAgIG1ha2VzdHIoJmhvc3RfY29weSxob3N0KTsKLSAgICBtYWtlc3RyKCZkTlNO YW1lX2NvcHksZE5TTmFtZSk7Ci0gICAgaWYgKGhvc3RfY29weSA9PSBOVUxMIHx8IGROU05hbWVf Y29weSA9PSBOVUxMKQotICAgICAgICBnb3RvIGVqZWN0OwotICAgIC8qIG1ha2Ugc3Vic3RyaW5n cyBieSByZXBsYWNpbmcgJy4nIHdpdGggJ1wwJyAqLwotICAgIHAgPSBkTlNOYW1lX2NvcHk7Ci0g ICAgd2hpbGUgKHAgPSBzdHJzdHIocCwgIi4iKSkgewotICAgICAgICAqcCA9ICdcMCc7Ci0gICAg ICAgIHArKzsKLSAgICB9Ci0gICAgcCA9IGhvc3RfY29weTsKLSAgICB3aGlsZSAocCA9IHN0cnN0 cihwLCAiLiIpKSB7Ci0gICAgICAgICpwID0gJ1wwJzsKLSAgICAgICAgcCsrOwotICAgIH0KLQot ICAgIC8qIGNvbXBhcmUgZWFjaCBjb21wb25lbnQgKi8KLSAgICBwMSA9IGhvc3RfY29weTsKLSAg ICBwMiA9IGROU05hbWVfY29weTsKLSAgICBmb3IgKDsgbnVtX2NvbXA7IG51bV9jb21wLS0pIHsK LSAgICAgICAgaWYgKCFja21hdGNoKHAyLCBwMSwwLDEpKQotICAgICAgICAgICAgLyogZmFpbGVk IG1hdGNoICovCi0gICAgICAgICAgICBnb3RvIGVqZWN0OwotICAgICAgICBwMSArPSBzdHJsZW4o cDEpICsgMTsKLSAgICAgICAgcDIgKz0gc3RybGVuKHAyKSArIDE7Ci0gICAgfQotICAgIC8qIG1h dGNoIG9rICovCi0gICAgcnYgPSAwOwotCi0gIGVqZWN0OgotICAgIGlmIChkTlNOYW1lX2NvcHkp ICAgZnJlZShkTlNOYW1lX2NvcHkpOwotICAgIGlmIChob3N0X2NvcHkpICAgICAgZnJlZShob3N0 X2NvcHkpOwotICAgIHJldHVybiBydjsKLX0KLQotCi0KLXN0YXRpYyBpbnQKLXNob3dfaG9zdG5h bWVfd2FybmluZyhjaGFyICpzMSwgY2hhciAqczIpCi17Ci0gICAgY2hhciBwcmVmaXhbMTAyNF07 Ci0gICAgaW50IG9rID0gMTsKLSAgICBzZXR2ZXJib3NpdHkoKTsKLSAgICBja21ha3htc2cocHJl Zml4LDEwMjQsCi0gICAgICAgICAgICAgICJXYXJuaW5nOiBIb3N0bmFtZSAoXCIiLCBzMSwgCi0g ICAgICAgICAgICAgICJcIikgZG9lcyBub3QgbWF0Y2ggc2VydmVyJ3MgY2VydGlmaWNhdGUgKFwi IiwgczIsICJcIikiLAotICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVM TCxOVUxMKTsKLSAgICBpZiAoc3NsX3ZlcmlmeV9mbGFnKQotICAgICAgICBvayA9IHVxX29rKHBy ZWZpeCwKLSAgICAgICAgICAgICAgICAgICAgIkNvbnRpbnVlPyAoWS9OKSAiLAotICAgICAgICAg ICAgICAgICAgICAzLCBOVUxMLCAwKTsKLSAgICBlbHNlIGlmICh2ZXJib3NpdHkpCi0gICAgICAg IHByaW50ZihwcmVmaXgpOwotICAgIHJldHVybihvayk7Ci19Ci0KLSNpZm5kZWYgT1NGNTAKLSNp Zm5kZWYgSFBVWDEwCi0jaWZuZGVmIEhQVVgxMTAwCi0jaWZuZGVmIFNDT19PU1I1MDUKLSNpZm5k ZWYgT3BlbkJTRAotI2lmbmRlZiBGUkVFQlNENAotI2lmbmRlZiBORVRCU0QxNQotI2lmbmRlZiBM SU5VWAotI2lmbmRlZiBBSVg0MQotI2lmbmRlZiBVVzcKLSNpZm5kZWYgSVJJWDY1Ci0jaWZuZGVm IFNPTEFSSVM5Ci0jaWZuZGVmIFNPTEFSSVM4Ci0jaWZuZGVmIFNPTEFSSVM3Ci0jaWZuZGVmIE1B Q09TWAotI2lmZGVmIERFQ19UQ1BJUAotI2RlZmluZSBpbmV0X2F0b24gSU5FVF9BVE9OCi0jZW5k aWYgLyogREVDX1RDUElQICovCi0KLSNpZm5kZWYgTk9fRENMX0lORVRfQVRPTgotc3RhdGljIGlu dAotaW5ldF9hdG9uKGNoYXIgKiBpcGFkZHJlc3MsIHN0cnVjdCBpbl9hZGRyICogaWEpIHsKLSAg ICBzdHJ1Y3Qgc3RyaW5nYXJyYXkgKiBxOwotICAgIHVuaW9uIHsKLSAgICAgICAgdW5zaWduZWQg bG9uZyBsOwotICAgICAgICB1bnNpZ25lZCBjaGFyIGJbNF07Ci0gICAgfSBkdW1teTsKLQotICAg IHEgPSBja3NwbGl0KDEsMCxpcGFkZHJlc3MsIi4iLCIwMTIzNDU2Nzg5YWJjZGVmQUNERUYiLDgs MCwwKTsKLSAgICBpZiAocS0+YV9zaXplID09IDQpIHsKLSAgICAgICAgZHVtbXkuYlswXSA9IGF0 b2kocS0+YV9oZWFkWzFdKTsKLSAgICAgICAgZHVtbXkuYlsxXSA9IGF0b2kocS0+YV9oZWFkWzJd KTsKLSAgICAgICAgZHVtbXkuYlsyXSA9IGF0b2kocS0+YV9oZWFkWzNdKTsKLSAgICAgICAgZHVt bXkuYlszXSA9IGF0b2kocS0+YV9oZWFkWzRdKTsKLSAgICAgICAgaWEtPnNfYWRkciA9IGR1bW15 Lmw7Ci0gICAgICAgIHJldHVybihpYS0+c19hZGRyICE9IDApOwotICAgIH0KLSAgICByZXR1cm4o MCk7Ci19Ci0jZW5kaWYJLyogTk9fRENMX0lORVRfQVRPTiAqLwotCi0jZW5kaWYgLyogTUFDT1NY ICovCi0jZW5kaWYgLyogU09MQVJJUzcgKi8KLSNlbmRpZiAvKiBTT0xBUklTOCAqLwotI2VuZGlm IC8qIFNPTEFSSVM5ICovCi0jZW5kaWYgLyogSVJJWDY1ICovCi0jZW5kaWYgLyogVVc3ICovCi0j ZW5kaWYgLyogQUlYNDEgKi8KLSNlbmRpZiAvKiBMSU5VWCAqLwotI2VuZGlmIC8qIE5FVEJTRDE1 ICovCi0jZW5kaWYgLyogRlJFRUJTRDQgKi8KLSNlbmRpZiAvKiBPcGVuQlNEICovCi0jZW5kaWYg LyogU0NPX09TUjUwNSAqLwotI2VuZGlmIC8qIEhQVVgxMTAwICovCi0jZW5kaWYgLyogSFBVWDEw ICovCi0jZW5kaWYgLyogT1NGNTAgKi8KLQotaW50Ci1zc2xfY2hlY2tfc2VydmVyX25hbWUoU1NM ICogc3NsLCBjaGFyICogaG9zdG5hbWUpCi0vKiByZXR1cm5zIDAgaWYgaG9zdG5hbWUgYW5kIHNl cnZlcidzIGNlcnQgbWF0Y2hlcywgZWxzZSAtMSAqLwotewotICAgIGNoYXIgKiBjb21tb25OYW1l OwotICAgIHVuc2lnbmVkIGNoYXIgKiogZE5TTmFtZTsKLSAgICB1bnNpZ25lZCBjaGFyICoqIGlw QWRkcmVzczsKLSAgICBzdHJ1Y3QgaW5fYWRkciBpYTsKLSAgICBpbnQgcnY7Ci0KLSAgICBzZXR2 ZXJib3NpdHkoKTsKLSAgICBpZiAodmVyYm9zaXR5ICYmICFpbnNlcnZlcikgewotICAgICAgICBp ZiAoZE5TTmFtZSA9IHRsc19nZXRfU0FOX29ianMoc3NsLEdFTl9ETlMpKSB7Ci0gICAgICAgICAg ICBpbnQgaSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBkTlNOYW1lW2ldOyBpKyspIHsK LSAgICAgICAgICAgICAgICBwcmludGYoIkNlcnRpZmljYXRlWzBdIGFsdFN1YmplY3ROYW1lIERO Uz0lc1xyXG4iLGROU05hbWVbaV0pOwotICAgICAgICAgICAgICAgIGZyZWUoZE5TTmFtZVtpXSk7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlwQWRkcmVzcyA9IHRsc19n ZXRfU0FOX29ianMoc3NsLEdFTl9JUEFERCkpIHsKLSAgICAgICAgICAgIGludCBpID0gMDsKLSAg ICAgICAgICAgIGNoYXIgKnNlcnZlcl9pcDsKLSAgICAgICAgICAgIHN0cnVjdCBpbl9hZGRyIGlh OwotCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpcEFkZHJlc3NbaV07IGkrKykgewotICAgICAg ICAgICAgICAgIGlmIChpcEFkZHJlc3NbaV0pIHsKLSAgICAgICAgICAgICAgICAgICAgaWEuc19h ZGRyID0gKih1bnNpZ25lZCBsb25nICopaXBBZGRyZXNzW2ldOwotICAgICAgICAgICAgICAgICAg ICBzZXJ2ZXJfaXAgPSBpbmV0X250b2EoaWEpOwotICAgICAgICAgICAgICAgICAgICBwcmludGYo IkNlcnRpZmljYXRlWzBdIGFsdFN1YmplY3ROYW1lIElQQWRkcj0lc1xyXG4iLHNlcnZlcl9pcCk7 Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZyZWUoaXBBZGRyZXNzW2ldKTsK LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8qIGlwQWRkcmVzcyBwb2ludHMgdG8gYSBzdGF0 aWMgLSBkb24ndCBmcmVlICovCi0gICAgICAgIH0KLSAgICAgICAgaWYgKGROU05hbWUgPSB0bHNf Z2V0X1NBTl9vYmpzKHNzbCxHRU5fRU1BSUwpKSB7Ci0gICAgICAgICAgICBpbnQgaSA9IDA7Ci0g ICAgICAgICAgICBmb3IgKGkgPSAwOyBkTlNOYW1lW2ldOyBpKyspIHsKLSAgICAgICAgICAgICAg ICBwcmludGYoIkNlcnRpZmljYXRlWzBdIGFsdFN1YmplY3ROYW1lIEVtYWlsPSVzXHJcbiIsZE5T TmFtZVtpXSk7Ci0gICAgICAgICAgICAgICAgZnJlZShkTlNOYW1lW2ldKTsKLSAgICAgICAgICAg IH0KLSAgICAgICAgfQotICAgICAgICBpZiAoZE5TTmFtZSA9IHRsc19nZXRfU0FOX29ianMoc3Ns LEdFTl9VUkkpKSB7Ci0gICAgICAgICAgICBpbnQgaSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGkg PSAwOyBkTlNOYW1lW2ldOyBpKyspIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIkNlcnRpZmlj YXRlWzBdIGFsdFN1YmplY3ROYW1lIFVSST0lc1xyXG4iLGROU05hbWVbaV0pOwotICAgICAgICAg ICAgICAgIGZyZWUoZE5TTmFtZVtpXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg ICAgaWYgKGROU05hbWUgPSB0bHNfZ2V0X1NBTl9vYmpzKHNzbCxHRU5fT1RIRVJOQU1FKSkgewot ICAgICAgICAgICAgaW50IGkgPSAwOwotICAgICAgICAgICAgZm9yIChpID0gMDsgZE5TTmFtZVtp XTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJDZXJ0aWZpY2F0ZVswXSBhbHRTdWJq ZWN0TmFtZSBPdGhlcj0lc1xyXG4iLGROU05hbWVbaV0pOwotICAgICAgICAgICAgICAgIGZyZWUo ZE5TTmFtZVtpXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBm aXJzdCB3ZSBjaGVjayBpZiBgaG9zdG5hbWUnIGlzIGluIGZhY3QgYW4gaXAgYWRkcmVzcyAqLwot ICAgIGlmIChpbmV0X2F0b24oaG9zdG5hbWUsICZpYSkpIHsKLSAgICAgICAgaXBBZGRyZXNzID0g dGxzX2dldF9TQU5fb2Jqcyhzc2wsR0VOX0lQQUREKTsKLSAgICAgICAgaWYgKGlwQWRkcmVzcykg ewotICAgICAgICAgICAgaW50IGkgPSAwOwotICAgICAgICAgICAgY2hhciAqc2VydmVyX2lwID0g IlVOS05PV04iOwotCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpcEFkZHJlc3NbaV07IGkrKykK LSAgICAgICAgICAgICAgICBpZiAoKih1bnNpZ25lZCBsb25nICopaXBBZGRyZXNzW2ldID09IGlh LnNfYWRkcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgIGlm IChpcEFkZHJlc3NbaSAtIDFdKSB7Ci0gICAgICAgICAgICAgICAgaWEuc19hZGRyID0gKih1bnNp Z25lZCBsb25nICopaXBBZGRyZXNzW2kgLSAxXTsKLSAgICAgICAgICAgICAgICBzZXJ2ZXJfaXAg PSBpbmV0X250b2EoaWEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcnYgPSBzaG93X2hv c3RuYW1lX3dhcm5pbmcoaG9zdG5hbWUsIHNlcnZlcl9pcCkgPyAwIDogLTE7Ci0gICAgICAgICAg ICBmb3IgKGkgPSAwOyBpcEFkZHJlc3NbaV07IGkrKykKLSAgICAgICAgICAgICAgICBmcmVlKGlw QWRkcmVzc1tpXSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBydiA9IHNob3dfaG9z dG5hbWVfd2FybmluZyhob3N0bmFtZSwgIk5PIElQIElOIENFUlQiKSA/IDAgOiAtMTsKLSAgICAg ICAgfQotICAgICAgICByZXR1cm4ocnYpOwotICAgIH0KLQotICAgIC8qIGxvb2sgZm9yIGROU05h bWUocykgaW4gc3ViamVjdEFsdE5hbWUgaW4gdGhlIHNlcnZlcidzIGNlcnRpZmljYXRlICovCi0g ICAgZE5TTmFtZSA9IHRsc19nZXRfU0FOX29ianMoc3NsLEdFTl9ETlMpOwotICAgIGlmIChkTlNO YW1lKSB7Ci0gICAgICAgIGludCBpID0gMDsKLSAgICAgICAgZm9yIChpID0gMDsgZE5TTmFtZVtp XTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoIWROU05hbWVfY21wKGhvc3RuYW1lLChjaGFyICop ZE5TTmFtZVtpXSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAg ICAgcnYgPSBzaG93X2hvc3RuYW1lX3dhcm5pbmcoaG9zdG5hbWUsCi0JCQkJICAgKGNoYXIgKiko KGROU05hbWVbaSAtIDFdID09IE5VTEwpID8gCi0JCQkgICAgICAgICAgIChjaGFyICopIlVOS05P V04iIDogKGNoYXIgKilkTlNOYW1lW2kgLSAxXSkpCi0JICAgICA/IDAgOiAtMTsKLSAgICAgICAg Zm9yIChpID0gMDsgZE5TTmFtZVtpXTsgaSsrKQotICAgICAgICAgICAgZnJlZShkTlNOYW1lW2ld KTsKLSAgICAgICAgcmV0dXJuIHJ2OwotICAgIH0gZWxzZSBpZiAoKGNvbW1vbk5hbWUgPSBzc2xf Z2V0X2NvbW1vbk5hbWUoc3NsKSkpIHsKLSAgICAgICAvKiBzbyB0aGUgc2VydmVyIGRpZG4ndCBo YXZlIGFueSBkTlNOYW1lJ3MsIGNoZWNrIHRoZSBjb21tb25OYW1lICovCi0gICAgICAgaWYgKCFk TlNOYW1lX2NtcChob3N0bmFtZSwgY29tbW9uTmFtZSkpCi0gICAgICAgICAgIHJldHVybiAwOwot ICAgICAgIGVsc2UKLSAgICAgICAgICAgcmV0dXJuIChzaG93X2hvc3RuYW1lX3dhcm5pbmcoaG9z dG5hbWUsIGNvbW1vbk5hbWUpID8gMCA6IC0xKTsKLSAgICB9Ci0gICAgcmV0dXJuIC0xOwotfQot Ci0vKiBJcyAndXNlcicgYXV0aG9yaXplZCB0byBhY2Nlc3MgdGhlIHN5c3RlbSB3aXRob3V0IGEg bG9naW4gKi8KLWludAotdGxzX2lzX3VzZXJfdmFsaWQoU1NMICogc3NsLCBjb25zdCBjaGFyICp1 c2VyKQotewotICAgIFg1MDkgKmNsaWVudF9jZXJ0OwotICAgIGludCByID0gMDsKLQotICAgIGlm ICggIXNzbCB8fCAhdXNlciB8fCAhdXNlclswXSApCi0gICAgICAgIHJldHVybigwKTsKLQotICAg IGlmICghKGNsaWVudF9jZXJ0ID0gU1NMX2dldF9wZWVyX2NlcnRpZmljYXRlKHNzbCkpKQotICAg ICAgICByZXR1cm4gMDsKLQotICAgIC8qIFVzZSB1c2VyIHN1cHBsaWVkIGZ1bmN0aW9uICovCi0g ICAgciA9IFg1MDlfdXNlcm9rKGNsaWVudF9jZXJ0LHVzZXIpOwotCi0gICAgWDUwOV9mcmVlKGNs aWVudF9jZXJ0KTsKLSAgICByZXR1cm4gcjsKLX0KLQotaW50Ci10bHNfaXNfYW5vbihpbnQgeCkK LXsKLSAgICBjaGFyIGJ1ZlsxMjhdOwotICAgIFNTTF9DSVBIRVIgKiBjaXBoZXI7Ci0gICAgU1NM ICogc3NsID0gTlVMTDsKLQotICAgIHN3aXRjaCAoIHggKSB7Ci0jaWZuZGVmIE5PRlRQCi0jaWZu ZGVmIFNZU0ZUUAotICAgIGNhc2UgMTogICAgIC8qIGZ0cCBjb21tYW5kICovCi0gICAgICAgIGlm ICggc3NsX2Z0cF9hY3RpdmVfZmxhZyApCi0gICAgICAgICAgICBzc2wgPSBzc2xfZnRwX2NvbjsK LSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICBicmVhazsKLSAg ICBjYXNlIDI6ICAgICAvKiBmdHAgZGF0YSAqLwotICAgICAgICBpZiAoIHNzbF9mdHBfZGF0YV9h Y3RpdmVfZmxhZyApCi0gICAgICAgICAgICBzc2wgPSBzc2xfZnRwX2RhdGFfY29uOwotICAgICAg ICBlbHNlCi0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8q IFNZU0ZUUCAqLwotI2VuZGlmIC8qIE5PRlRQICovCi0gICAgZGVmYXVsdDoKLSAgICAgICAgaWYg KHRsc19hY3RpdmVfZmxhZykKLSAgICAgICAgICAgIHNzbCA9IHRsc19jb247Ci0gICAgICAgIGVs c2UgaWYgKHNzbF9hY3RpdmVfZmxhZykKLSAgICAgICAgICAgIHNzbCA9IHNzbF9jb247Ci0gICAg ICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0KLSAgICBjaXBoZXIgPSBT U0xfZ2V0X2N1cnJlbnRfY2lwaGVyKHNzbCk7Ci0gICAgaWYgKFNTTF9DSVBIRVJfZGVzY3JpcHRp b24oY2lwaGVyLGJ1ZixzaXplb2YoYnVmKSkpIHsKLSAgICAgICAgaWYgKGNraW5kZXgoIkF1PU5v bmUiLGJ1ZiwwLDAsMCkgIT0gMCkKLSAgICAgICAgICAgIHJldHVybigxKTsgICAgICAgICAgICAg ICAgICAvKiBhbm9ueW1vdXMgKi8KLSAgICAgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAg IC8qIGtub3duICovCi0gICAgfSBlbHNlIHsKLSAgICAgICAgLyogY291bGQgbm90IGdldCBjaXBo ZXIgZGVzY3JpcHRpb24uICBBc3N1bWUgYW5vbnltb3VzICovCi0gICAgICAgIHJldHVybigxKTsK LSAgICB9Ci19Ci0KLWludAotdGxzX2lzX2tyYjUoaW50IHgpCi17Ci0gICAgY2hhciBidWZbMTI4 XTsKLSAgICBTU0xfQ0lQSEVSICogY2lwaGVyOwotICAgIFNTTCAqIHNzbCA9IE5VTEw7Ci0KLSAg ICBzd2l0Y2ggKCB4ICkgewotI2lmbmRlZiBOT0ZUUAotI2lmbmRlZiBTWVNGVFAKLSAgICBjYXNl IDE6ICAgICAvKiBmdHAgY29tbWFuZCAqLwotICAgICAgICBpZiAoIHNzbF9mdHBfYWN0aXZlX2Zs YWcgKQotICAgICAgICAgICAgc3NsID0gc3NsX2Z0cF9jb247Ci0gICAgICAgIGVsc2UKLSAgICAg ICAgICAgIHJldHVybigwKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOiAgICAgLyogZnRw IGRhdGEgKi8KLSAgICAgICAgaWYgKCBzc2xfZnRwX2RhdGFfYWN0aXZlX2ZsYWcgKQotICAgICAg ICAgICAgc3NsID0gc3NsX2Z0cF9kYXRhX2NvbjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg cmV0dXJuKDApOwotICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBTWVNGVFAgKi8KLSNlbmRpZiAv KiBOT0ZUUCAqLwotI2lmbmRlZiBOT0hUVFAKLSAgICBjYXNlIDM6Ci0gICAgICAgIGlmICggdGxz X2h0dHBfYWN0aXZlX2ZsYWcgKQotICAgICAgICAgICAgc3NsID0gdGxzX2h0dHBfY29uOwotICAg ICAgICBicmVhazsKLSNlbmRpZiAvKiBOT0hUVFAgKi8KLSAgICBkZWZhdWx0OgotICAgICAgICBp ZiAodGxzX2FjdGl2ZV9mbGFnKQotICAgICAgICAgICAgc3NsID0gdGxzX2NvbjsKLSAgICAgICAg ZWxzZSBpZiAoc3NsX2FjdGl2ZV9mbGFnKQotICAgICAgICAgICAgc3NsID0gc3NsX2NvbjsKLSAg ICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLQotICAgIGNpcGhlciA9 IFNTTF9nZXRfY3VycmVudF9jaXBoZXIoc3NsKTsKLSAgICBpZiAoY2lwaGVyICYmIFNTTF9DSVBI RVJfZGVzY3JpcHRpb24oY2lwaGVyLGJ1ZixzaXplb2YoYnVmKSkpIHsKLSAgICAgICAgaWYgKGNr aW5kZXgoIkF1PUtSQjUiLGJ1ZiwwLDAsMCkgIT0gMCkKLSAgICAgICAgICAgIHJldHVybigxKTsg ICAgICAgICAgICAgICAgICAvKiBrcmI1ICovCi0gICAgfQotICAgIHJldHVybigwKTsgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIG5vdCAqLwotfQotCi1pbnQKLXNzbF9nZXRfY2xpZW50X2Zp bmlzaGVkKGNoYXIgKmJ1ZiwgaW50IGNvdW50KQotewotI2lmZGVmIE5PX0dFVF9GSU5JU0hFRAot ICAgIHJldHVybigwKTsKLSNlbHNlCi0gICAgaWYgKHNzdGVsbmV0IHx8IHRjcF9pbmNvbWluZykg ewotICAgICAgICByZXR1cm4oU1NMX2dldF9wZWVyX2ZpbmlzaGVkKHNzbF9hY3RpdmVfZmxhZz9z c2xfY29uOnRsc19jb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1 Zixjb3VudCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybihTU0xfZ2V0X2ZpbmlzaGVk KHNzbF9hY3RpdmVfZmxhZz9zc2xfY29uOnRsc19jb24sCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJ1Zixjb3VudCkpOwotICAgIH0KLSNlbmRpZiAvKiBOT19HRVRfRklO SVNIRUQgKi8KLX0KLQotaW50Ci1zc2xfZ2V0X3NlcnZlcl9maW5pc2hlZChjaGFyICpidWYsIGlu dCBjb3VudCkKLXsKLSNpZmRlZiBOT19HRVRfRklOSVNIRUQKLSAgICByZXR1cm4oMCk7Ci0jZWxz ZQotICAgIGlmIChzc3RlbG5ldCB8fCB0Y3BfaW5jb21pbmcpIHsKLSAgICAgICAgcmV0dXJuKFNT TF9nZXRfZmluaXNoZWQoc3NsX2FjdGl2ZV9mbGFnP3NzbF9jb246dGxzX2NvbiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLGNvdW50KSk7Ci0gICAgfSBlbHNlIHsK LSAgICAgICAgcmV0dXJuKFNTTF9nZXRfcGVlcl9maW5pc2hlZChzc2xfYWN0aXZlX2ZsYWc/c3Ns X2Nvbjp0bHNfY29uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYs Y291bnQpKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9fR0VUX0ZJTklTSEVEICovCi19Ci0KLQotI2lm ZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotc3NsX3JlcGx5KGlu dCBob3csIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBjbnQpCi0jZWxzZQotc3NsX3JlcGx5KGhv dyxkYXRhLGNudCkgaW50IGhvdzsgdW5zaWduZWQgY2hhciAqZGF0YTsgaW50IGNudDsKLSNlbmRp ZgotewotICAgIGNoYXIgKiBzdHI9TlVMTDsKLQotICAgIHNldHZlcmJvc2l0eSgpOwotICAgIGRh dGEgKz0gNDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50IHRvIHN0YXR1cyBieXRl ICovCi0gICAgY250ICAtPSA0OwotCi0gICAgaWYoY250LS0gPCAxKSB7Ci0gICAgICAgIGF1dGhf ZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOwotICAg IH0KLQotICAgIHN3aXRjaCgqZGF0YSsrKSB7Ci0gICAgY2FzZSBTU0xfQUNDRVBUOgotICAgICAg ICBpZiAodG5fZGViIHx8IGRlYnNlcykKLSAgICAgICAgICAgIHRuX2RlYnVnKCJbU1NMIC0gaGFu ZHNoYWtlIHN0YXJ0aW5nXSIpOwotICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkKLSAgICAg ICAgICAgIHByaW50ZigiW1NTTCAtIGhhbmRzaGFrZSBzdGFydGluZ11cclxuIik7Ci0gICAgICAg IGRlYnVnKEYxMTAsInNzbF9yZXBseSIsIltTU0wgLSBoYW5kc2hha2Ugc3RhcnRpbmddIiwwKTsK LQotICAgICAgICAvKiByaWdodCAuLi4gbm93IHdlIGRyb3AgaW50byB0aGUgU1NMIGxpYnJhcnkg Ki8KLSAgICAgICAgaWYgKCFzc2xfb25seV9mbGFnKSB7Ci0gICAgICAgICAgICBpZiAoc3NsX2R1 bW15X2ZsYWcpIHsKLSAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKLSAgICAg ICAgICAgICAgICAgICAgdG5fZGVidWcoIltTU0wgLSBEdW1teSBDb25uZWN0ZWRdIik7Ci0gICAg ICAgICAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApIHsKLSAgICAgICAgICAgICAgICAgICAg cHJpbnRmKCJbU1NMIC0gRHVtbXkgQ29ubmVjdGVkXVxyXG4iKTsKLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX3JlcGx5IiwiW1NTTCAtIER1bW15IENv bm5lY3RlZF0iLDApOwotICAgICAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9VTktOT1dO KTsKLSAgICAgICAgICAgICAgICBhY2NlcHRfY29tcGxldGUgPSAxOwotICAgICAgICAgICAgICAg IHJldHVybiBBVVRIX1NVQ0NFU1M7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChT U0xfY29ubmVjdChzc2xfY29uKSA8PSAwKSB7Ci0gICAgICAgICAgICAgICAgaW50IGxlbjsKLSAg ICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgewotICAgICAgICAgICAgICAgICAg ICB0bl9kZWJ1ZygiW1NTTCAtIEZBSUxFRF0iKTsKLSAgICAgICAgICAgICAgICAgICAgRVJSX3By aW50X2Vycm9ycyhiaW9fZXJyKTsKLSAgICAgICAgICAgICAgICAgICAgbGVuID0gQklPX3JlYWQo YmlvX2Vycixzc2xfZXJyLFNTTF9FUlJfQkZTWik7Ci0gICAgICAgICAgICAgICAgICAgIHNzbF9l cnJbbGVuIDwgU1NMX0VSUl9CRlNaID8gbGVuIDogU1NMX0VSUl9CRlNaXSA9ICdcMCc7Ci0gICAg ICAgICAgICAgICAgICAgIHByaW50Zihzc2xfZXJyKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug aWYgKCB2ZXJib3NpdHkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiW1NTTCAtIEZB SUxFRF1cclxuIik7Ci0gICAgICAgICAgICAgICAgICAgIEVSUl9wcmludF9lcnJvcnMoYmlvX2Vy cik7Ci0gICAgICAgICAgICAgICAgICAgIGxlbiA9IEJJT19yZWFkKGJpb19lcnIsc3NsX2VycixT U0xfRVJSX0JGU1opOwotICAgICAgICAgICAgICAgICAgICBzc2xfZXJyW2xlbiA8IFNTTF9FUlJf QkZTWiA/IGxlbiA6IFNTTF9FUlJfQkZTWl0gPSAnXDAnOwotICAgICAgICAgICAgICAgICAgICBw cmludGYoc3NsX2Vycik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRlYnVn KEYxMTAsInNzbF9yZXBseSIsIltTU0wgLSBGQUlMRURdIiwwKTsKLSAgICAgICAgICAgICAgICBh dXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICAgICAgICAgICAgICB0dGNsb3MoMCk7Ci0g ICAgICAgICAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKLSAgICAgICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCi0gICAgICAgICAgICAgICAg ICAgIHRuX2RlYnVnKCJbU1NMIC0gT0tdIik7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoIHZl cmJvc2l0eSApIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJbU1NMIC0gT0tdXHJcbiIp OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfcmVw bHkiLCJbU1NMIC0gT0tdIiwwKTsKLQotICAgICAgICAgICAgICAgIHNzbF9hY3RpdmVfZmxhZyA9 IDE7Ci0gICAgICAgICAgICAgICAgc3NsX2Rpc3BsYXlfY29ubmVjdF9kZXRhaWxzKHNzbF9jb24s MCx2ZXJib3NpdHkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGF1dGhfZmlu aXNoZWQoQVVUSF9VTktOT1dOKTsKLSAgICAgICAgYWNjZXB0X2NvbXBsZXRlID0gMTsKLSAgICAg ICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNTTF9SRUpFQ1Q6Ci0gICAgICAgIGlmICh0bl9kZWIgfHwg ZGVic2VzKSB7Ci0gICAgICAgICAgICB0bl9kZWJ1ZygKLSAgICAgICAgICAgICAgICAgIltTU0wg LSBmYWlsZWQgdG8gc3dpdGNoIG9uIFNTTCAtIHRyeWluZyBwbGFpbnRleHQgbG9naW5dIik7Ci0g ICAgICAgIH0gZWxzZSBpZiAoIHZlcmJvc2l0eSApIHsKLSAgICAgICAgICAgIHByaW50ZigiW1NT TCAtIGZhaWxlZCB0byBzd2l0Y2ggb24gU1NMXVxyXG4iKTsKLSAgICAgICAgICAgIHByaW50Zigi VHJ5aW5nIHBsYWludGV4dCBsb2dpbjpcclxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgZGVidWco RjExMCwic3NsX3JlcGx5IiwiW1NTTCAtIGZhaWxlZCB0byBzd2l0Y2ggb24gU1NMXSIsMCk7Ci0g ICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAgICAgICByZXR1cm4gQVVUSF9G QUlMVVJFOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKLSAg ICB9Ci0gICAgcmV0dXJuIEFVVEhfU1VDQ0VTUzsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMK LXNzbF9pcyh1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgY250KQotI2Vsc2UKLXNzbF9pcyhkYXRh LGNudCkgdW5zaWduZWQgY2hhciAqZGF0YTsgaW50IGNudDsKLSNlbmRpZgotewotICAgIGlmICgo Y250IC09IDQpIDwgMSkKLSAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKLQotICAgIHNldHZl cmJvc2l0eSgpOwotICAgIGRhdGEgKz0gNDsKLSAgICBzd2l0Y2goKmRhdGErKykgewotICAgIGNh c2UgU1NMX1NUQVJUOgotICAgICAgICAvKiBzZXJ2ZXIgc3RhcnRzIHRoZSBTU0wgc3R1ZmYgbm93 IC4uLiAqLwotICAgICAgICBpZiAoIXNzbF9vbmx5X2ZsYWcpIHsKLSAgICAgICAgICAgIGlmICgg IXRsc19sb2FkX2NlcnRzKHNzbF9jdHgsc3NsX2NvbiwxKSApIHsKLSAgICAgICAgICAgICAgICBh dXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQVVUSF9G QUlMVVJFOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNl cykKLSAgICAgICAgICAgICAgICB0bl9kZWJ1ZygiW1NTTCAtIGhhbmRzaGFrZSBzdGFydGluZ10i KTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKQotICAgICAgICAgICAgICAgIHBy aW50ZigiW1NTTCAtIGhhbmRzaGFrZSBzdGFydGluZ11cclxuIik7Ci0gICAgICAgICAgICBkZWJ1 ZyhGMTEwLCJzc2xfaXMiLCJbU1NMIC0gaGFuZHNoYWtlIHN0YXJ0aW5nXSIsMCk7Ci0KLSAgICAg ICAgICAgIFNlbmRTU0xBdXRoU0IoU1NMX0FDQ0VQVCwgKHZvaWQgKikwLCAwKTsKLQotICAgICAg ICAgICAgYXV0aF9zc2xfdmFsaWQgPSAxOwotCi0gICAgICAgICAgICBpZiAoc3NsX2R1bW15X2Zs YWcpIHsKLSAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKLSAgICAgICAgICAg ICAgICAgICAgdG5fZGVidWcoIltTU0wgLSBEdW1teSBDb25uZWN0ZWRdIik7Ci0gICAgICAgICAg ICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRm KCJbU1NMIC0gRHVtbXkgQ29ubmVjdGVkXVxyXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX2lzIiwiW1NTTCAtIER1bW15IENvbm5lY3RlZF0i LDApOwotICAgICAgICAgICAgICAgIGFjY2VwdF9jb21wbGV0ZSA9IDE7Ci0gICAgICAgICAgICAg ICAgYXV0aF9maW5pc2hlZChBVVRIX1VOS05PV04pOwotICAgICAgICAgICAgICAgIHJldHVybiBB VVRIX1NVQ0NFU1M7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChTU0xfYWNjZXB0 KHNzbF9jb24pIDw9IDApIHsKLSAgICAgICAgICAgICAgICBjaGFyIGVycmJ1ZlsxMDI0XTsKLQot ICAgICAgICAgICAgICAgIHNwcmludGYoZXJyYnVmLCJbU1NMIC0gU1NMX2FjY2VwdCBlcnJvcjog JXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9l cnJvcigpLE5VTEwpKTsKLQotICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQot ICAgICAgICAgICAgICAgICAgICB0bl9kZWJ1ZyhlcnJidWYpOwotICAgICAgICAgICAgICAgIGVs c2UgaWYgKCBzc2xfZGVidWdfZmxhZyApCi0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiJXNc clxuIixlcnJidWYpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKQotICAg ICAgICAgICAgICAgICAgICBwcmludGYoIltTU0wgLSBTU0xfYWNjZXB0IGVycm9yXVxyXG4iKTsK LQotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9pcyIsZXJyYnVmLDApOwotCi0gICAg ICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0gICAgICAgICAgICAgICAg dHRjbG9zKDApOwotICAgICAgICAgICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7Ci0gICAgICAg ICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQotICAgICAgICAgICAg ICAgIHRuX2RlYnVnKCJbU1NMIC0gT0tdIik7Ci0gICAgICAgICAgICBlbHNlIGlmICggdmVyYm9z aXR5ICkgewotICAgICAgICAgICAgICAgIHByaW50ZigiW1NTTCAtIE9LXVxyXG4iKTsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9pcyIsIltTU0wgLSBPS10iLDAp OwotICAgICAgICAgICAgc3NsX2FjdGl2ZV9mbGFnID0gMTsKLSAgICAgICAgICAgIHNzbF9kaXNw bGF5X2Nvbm5lY3RfZGV0YWlscyhzc2xfY29uLDEsdmVyYm9zaXR5KTsKLQotICAgICAgICAgICAg Lyogbm93IGNoZWNrIHRvIHNlZSB0aGF0IHdlIGdvdCBleGFjdGx5IHdoYXQgd2UKLSAgICAgICAg ICAgICogd2FudGVkIGZyb20gdGhlIGNhbGxlciAuLi4gaWYgYSBjZXJ0aWZpY2F0ZSBpcwotICAg ICAgICAgICAgKiByZXF1aXJlZCB0aGVuIHdlIG1ha2UgMTAwJSBzdXJlIHRoYXQgd2Ugd2VyZQot ICAgICAgICAgICAgKiBnaXZlbiBvbmUgZHVyaW5nIHRoZSBoYW5kc2hha2UgKGFzIGl0IGlzIGFu IG9wdGlvbmFsCi0gICAgICAgICAgICAqIHBhcnQgb2YgU1NMKQotICAgICAgICAgICAgKi8KLQot I2lmZGVmIFNTTF9LUkI1Ci0gICAgICAgICAgICBpZiAoIHRsc19pc19rcmI1KDApICkgewotICAg ICAgICAgICAgICAgIGlmIChzc2xfY29uLT5rc3NsX2N0eC0+Y2xpZW50X3ByaW5jKQotICAgICAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfaXMgS1JCNSIsc3NsX2Nvbi0+a3NzbF9jdHgt PmNsaWVudF9wcmluYywwKTsKLSAgICAgICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIFNTTF9LUkI1 ICovCi0gICAgICAgICAgICBpZiAoc3NsX3ZlcmlmeV9mbGFnICYgU1NMX1ZFUklGWV9GQUlMX0lG X05PX1BFRVJfQ0VSVCkgewotICAgICAgICAgICAgICAgIFg1MDkgKiBwZWVyID0gU1NMX2dldF9w ZWVyX2NlcnRpZmljYXRlKHNzbF9jb24pOwotICAgICAgICAgICAgICAgIGlmIChwZWVyID09IE5V TEwpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCi0gICAgICAg ICAgICAgICAgICAgICAgICB0bl9kZWJ1ZygiW1NTTCAtIHBlZXIgY2hlY2sgZmFpbGVkXSIpOwot ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzc2xfZGVidWdfZmxhZykKLSAgICAgICAgICAg ICAgICAgICAgICAgIHByaW50ZigiW1NTTCAtIHBlZXIgY2hlY2sgZmFpbGVkXVxyXG4iKTsKLSAg ICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX2lzIiwiW1NTTCAtIHBlZXIgY2hlY2sg ZmFpbGVkXSIsMCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLyogTE9HR0lORyBSRVFVSVJFRCBI RVJFISAqLwotICAgICAgICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsK LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKLSAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfVU5LTk9X Tik7Ci0gICAgICAgICAgICBhY2NlcHRfY29tcGxldGUgPSAxOwotICAgICAgICB9Ci0gICAgICAg IGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgU2VuZFNTTEF1dGhTQihTU0xfUkVKRUNU LCAodm9pZCAqKSAiVW5rbm93biBvcHRpb24gcmVjZWl2ZWQiLCAtMSk7Ci0gICAgICAgIGlmICh0 bl9kZWIgfHwgZGVic2VzKQotICAgICAgICAgICAgdG5fZGVidWcoIltTU0wgLSBVbmtub3duIG9w dGlvbiByZWNlaXZlZF0iKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcHJpbnRmKCJVbmtu b3duIFNTTCBvcHRpb24gJWRcclxuIiwgZGF0YVstMV0pOwotICAgICAgICBkZWJ1ZyhGMTExLCJz c2xfaXMiLCJbU1NMIC0gVW5rbm93biBvcHRpb24gcmVjZWl2ZWRdIixkYXRhWy0xXSk7Ci0gICAg ICAgIGF1dGhfc3NsX3ZhbGlkID0gMDsKLSAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVD VCk7Ci0gICAgICAgIHJldHVybihBVVRIX0ZBSUxVUkUpOwotICAgIH0KLSAgICByZXR1cm4gQVVU SF9TVUNDRVNTOwotfQotCi0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLQotaW50Ci1j a190bl90bHNfbmVnb3RpYXRlKFZPSUQpCi17Ci0gICAgWDUwOSAqIHBlZXIgPSBOVUxMOwotICAg IGNoYXIgc3RyWzI1Nl0sICp1aWQ9TlVMTDsKLSAgICBleHRlcm4gaW50IHNzdGVsbmV0OwotCi0g ICAgaWYgKCAhY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpICkKLSAgICAgICAgcmV0dXJuKC0xKTsK LQotICAgIHNldHZlcmJvc2l0eSgpOwotICAgIGlmIChzc3RlbG5ldCkgewotICAgICAgICAvKiBz ZXJ2ZXIgc3RhcnRzIHRoZSBUTFMgc3R1ZmYgbm93IC4uLiAqLwotICAgICAgICBpZiAoIXRsc19v bmx5X2ZsYWcpIHsKLSAgICAgICAgICAgIGlmICggIXRsc19sb2FkX2NlcnRzKHRsc19jdHgsdGxz X2NvbiwxKSApIHsKLSAgICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsK LSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg IGlmICh0bl9kZWIgfHwgZGVic2VzKQotICAgICAgICAgICAgICAgIHRuX2RlYnVnKCJbVExTIC0g aGFuZHNoYWtlIHN0YXJ0aW5nXSIpOwotICAgICAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSAp Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJbVExTIC0gaGFuZHNoYWtlIHN0YXJ0aW5nXVxyXG4i KTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX3RuX3Rsc19uZWdvdGlhdGUiLCJbVExTIC0g aGFuZHNoYWtlIHN0YXJ0aW5nXSIsMCk7Ci0KLSAgICAgICAgICAgIGlmIChzc2xfZHVtbXlfZmxh ZykgewotICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQotICAgICAgICAgICAg ICAgICAgICB0bl9kZWJ1ZygiW1RMUyAtIER1bW15IENvbm5lY3RlZF0iKTsKLSAgICAgICAgICAg ICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYo IltUTFMgLSBEdW1teSBDb25uZWN0ZWRdXHJcbiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja190bl90bHNfbmVnb3RpYXRlIiwiW1RMUyAtIER1bW15 IENvbm5lY3RlZF0iLDApOwotICAgICAgICAgICAgICAgIGFjY2VwdF9jb21wbGV0ZSA9IDE7Ci0g ICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0gICAgICAgICAgICAg ICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChTU0xfYWNjZXB0 KHRsc19jb24pIDw9IDApIHsKLSAgICAgICAgICAgICAgICBjaGFyIGVycmJ1ZlsxMDI0XTsKLQot ICAgICAgICAgICAgICAgIHNwcmludGYoZXJyYnVmLCJbVExTIC0gU1NMX2FjY2VwdCBlcnJvcjog JXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9l cnJvcigpLE5VTEwpKTsKLQotICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQot ICAgICAgICAgICAgICAgICAgICB0bl9kZWJ1ZyhlcnJidWYpOwotICAgICAgICAgICAgICAgIGVs c2UgaWYgKCBzc2xfZGVidWdfZmxhZyApCi0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiJXNc clxuIixlcnJidWYpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKQotICAg ICAgICAgICAgICAgICAgICBwcmludGYoIltUTFMgLSBTU0xfYWNjZXB0IGVycm9yXVxyXG4iKTsK LQotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX3RuX3Rsc19uZWdvdGlhdGUiLGVycmJ1 ZiwwKTsKLSAgICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICAg ICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0 bl9kZWIgfHwgZGVic2VzKQotICAgICAgICAgICAgICAgIHRuX2RlYnVnKCJbVExTIC0gT0tdIik7 Ci0gICAgICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkgewotICAgICAgICAgICAgICAgIHBy aW50ZigiW1RMUyAtIE9LXVxyXG4iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGVi dWcoRjExMCwiY2tfdG5fdGxzX25lZ290aWF0ZSIsIltUTFMgLSBPS10iLDApOwotICAgICAgICAg ICAgdGxzX2FjdGl2ZV9mbGFnID0gMTsKLSAgICAgICAgICAgIHNzbF9kaXNwbGF5X2Nvbm5lY3Rf ZGV0YWlscyh0bHNfY29uLDEsdmVyYm9zaXR5KTsKLQotCi0jaWZkZWYgU1NMX0tSQjUKLSAgICAg ICAgICAgIGlmICggdGxzX2lzX2tyYjUoMCkgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRsc19j b24tPmtzc2xfY3R4LT5jbGllbnRfcHJpbmMpIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhciAq cDsKLSAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHN6VXNlck5hbWVBdXRoZW50aWNhdGVk LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRsc19jb24tPmtzc2xfY3R4LT5jbGll bnRfcHJpbmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlEQlVGTEVOKTsKLSAg ICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHN6VXNlck5hbWVSZXF1ZXN0ZWQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGxzX2Nvbi0+a3NzbF9jdHgtPmNsaWVudF9wcmluYywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSURCVUZMRU4pOwotICAgICAgICAgICAg ICAgICAgICBmb3IgKCBwID0gc3pVc2VyTmFtZVJlcXVlc3RlZDsgKnAgOyBwKysgKSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICBpZiAoICpwID09ICdAJyB8fCAqcCA9PSAnLycgKSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgKnAgPSAnXDAnOwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3pV c2VyTmFtZVJlcXVlc3RlZFswXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgICAgIHN6VXNlck5h bWVBdXRoZW50aWNhdGVkWzBdID0gJ1wwJzsKLSAgICAgICAgICAgICAgICB9Ci0jaWZkZWYgQ0tf TE9HSU4KLSAgICAgICAgICAgICAgICBpZiAoenZ1c2VyKHN6VXNlck5hbWVSZXF1ZXN0ZWQpKQot ICAgICAgICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfVkFMSUQpOwotICAgICAgICAg ICAgICAgIGVsc2UKLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotICAgICAgICAgICAgICAgICAgICBh dXRoX2ZpbmlzaGVkKEFVVEhfVVNFUik7Ci0gICAgICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBT U0xfS1JCNSAqLwotICAgICAgICAgICAgewotICAgICAgICAgICAgLyogbm93IGNoZWNrIHRvIHNl ZSB0aGF0IHdlIGdvdCBleGFjdGx5IHdoYXQgd2UKLSAgICAgICAgICAgICogd2FudGVkIGZyb20g dGhlIGNhbGxlciAuLi4gaWYgYSBjZXJ0aWZpY2F0ZSBpcwotICAgICAgICAgICAgKiByZXF1aXJl ZCB0aGVuIHdlIG1ha2UgMTAwJSBzdXJlIHRoYXQgd2Ugd2VyZQotICAgICAgICAgICAgKiBnaXZl biBvbmUgZHVyaW5nIHRoZSBoYW5kc2hha2UgKGFzIGl0IGlzIGFuIG9wdGlvbmFsCi0gICAgICAg ICAgICAqIHBhcnQgb2YgVExTKQotICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHBlZXI9U1NM X2dldF9wZWVyX2NlcnRpZmljYXRlKHRsc19jb24pOwotICAgICAgICAgICAgaWYgKHBlZXIgPT0g TlVMTCkgewotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsIlNTTF9nZXRfcGVlcl9jZXJ0aWZp Y2F0ZSgpID09IE5VTEwiLCIiLDApOwotICAgICAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVU SF9SRUpFQ1QpOwotICAgICAgICAgICAgICAgIGlmIChzc2xfdmVyaWZ5X2ZsYWcgJiBTU0xfVkVS SUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0bl9k ZWIgfHwgZGVic2VzKQotICAgICAgICAgICAgICAgICAgICAgICAgdG5fZGVidWcoIltUTFMgLSBw ZWVyIGNoZWNrIGZhaWxlZF0iKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3NsX2Rl YnVnX2ZsYWcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiW1RMUyAtIHBlZXIg Y2hlY2sgZmFpbGVkXVxyXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTEwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImNrX3RuX3Rs c19uZWdvdGlhdGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIltUTFMgLSBwZWVyIGNo ZWNrIGZhaWxlZF0iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgLyogTE9HR0lORyBSRVFVSVJF RCBIRVJFISAqLwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJT U0xfZ2V0X3BlZXJfY2VydGlmaWNhdGUoKSAhPSBOVUxMIiwiIiwwKTsKLSAgICAgICAgICAgICAg ICBYNTA5X05BTUVfZ2V0X3RleHRfYnlfTklEKFg1MDlfZ2V0X3N1YmplY3RfbmFtZShwZWVyKSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSURfY29tbW9uTmFt ZSxzdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU2Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAg ICAgICBpZiAoIHZlcmJvc2l0eSApCi0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiW1RMUyAt IGNvbW1vbk5hbWU9JXNdXHJcbiIsc3RyKTsKLQotICAgICAgICAgICAgICAgIFg1MDlfTkFNRV9n ZXRfdGV4dF9ieV9OSUQoWDUwOV9nZXRfc3ViamVjdF9uYW1lKHBlZXIpLAotI2lmbmRlZiBOSURf eDUwMFVuaXF1ZUlkZW50aWZpZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBOSURfdW5pcXVlSWRlbnRpZmllciwKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTklEX3g1MDBVbmlxdWVJZGVudGlmaWVyLAotI2VuZGlm Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NgotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgaWYgKCB2ZXJi b3NpdHkgKQotICAgICAgICAgICAgICAgICAgICBwcmludGYoIltUTFMgLSB1bmlxdWVJZGVudGlm aWVyPSVzXVxyXG4iLHN0cik7Ci0KLSAgICAgICAgICAgICAgICAvKiBUcnkgdG8gZGV0ZXJtaW5l IHVzZXIgbmFtZSAqLwotICAgICAgICAgICAgICAgIHVpZCA9IHRsc191c2VyaWRfZnJvbV9jbGll bnRfY2VydCh0bHNfY29uKTsKLSAgICAgICAgICAgICAgICBpZiAoIHVpZCApIHsKLSAgICAgICAg ICAgICAgICAgICAgLyogVGhpcyBjb2RlIGlzIHZlcnkgcXVlc3Rpb25hYmxlLgotICAgICAgICAg ICAgICAgICAgICAgKiBIb3cgc2hvdWxkIGl0IGJlaGF2ZT8KLSAgICAgICAgICAgICAgICAgICAg ICogVGhlIGNsaWVudCBoYXMgcHJlc2VudGVkIGEgY2VydGlmaWNhdGUgdGhhdAotICAgICAgICAg ICAgICAgICAgICAgKiBjb250YWlucyBhIHVzZXJuYW1lLiAgV2UgaGF2ZSB2YWxpZGF0ZWQgdGhl Ci0gICAgICAgICAgICAgICAgICAgICAqIGNlcnRpZmljYXRlIGJ1dCB3ZSBkbyBub3QgYXV0b21h dGljYWxseQotICAgICAgICAgICAgICAgICAgICAgKiBsb2cgdGhlIHVzZXIgaW4gdW5sZXNzIHRo ZXJlIGlzIGEgLnRsc2xvZ2luCi0gICAgICAgICAgICAgICAgICAgICAqIGZpbGUuCi0gICAgICAg ICAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShzelVzZXJO YW1lUmVxdWVzdGVkLHVpZCxVSURCVUZMRU4pOwotI2lmZGVmIENLX0xPR0lOCi0gICAgICAgICAg ICAgICAgICAgIGlmICh6dnVzZXIodWlkKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhf ZmluaXNoZWQoQVVUSF9WQUxJRCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSNlbmRpZiAv KiBDS19MT0dJTiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRI X1VTRVIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAg ICAgICAgICAgICAgICAgc3pVc2VyTmFtZVJlcXVlc3RlZFswXSA9ICdcMCc7Ci0gICAgICAgICAg ICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0g ICAgICAgIGNoYXIgKiBzdHI9TlVMTDsKLQotICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykK LSAgICAgICAgICAgIHRuX2RlYnVnKCJbVExTIC0gaGFuZHNoYWtlIHN0YXJ0aW5nXSIpOwotICAg ICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkKLSAgICAgICAgICAgIHByaW50ZigiW1RMUyAtIGhh bmRzaGFrZSBzdGFydGluZ11cclxuIik7Ci0gICAgICAgIGRlYnVnKEYxMTAsImNrX3RuX3Rsc19u ZWdvdGlhdGUiLCJbVExTIC0gaGFuZHNoYWtlIHN0YXJ0aW5nXSIsMCk7Ci0KLSAgICAgICAgLyog cmlnaHQgLi4uIG5vdyB3ZSBkcm9wIGludG8gdGhlIFNTTCBsaWJyYXJ5ICovCi0gICAgICAgIGlm ICghdGxzX29ubHlfZmxhZykgewotICAgICAgICAgICAgY2hhciAqc3ViamVjdD1OVUxMLCAqaXNz dWVyPU5VTEwsICpjb21tb25OYW1lPU5VTEwsICpkTlNOYW1lPU5VTEw7Ci0KLSAgICAgICAgICAg IGlmIChzc2xfZHVtbXlfZmxhZykgewotICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVi c2VzKQotICAgICAgICAgICAgICAgICAgICB0bl9kZWJ1ZygiW1RMUyAtIER1bW15IENvbm5lY3Rl ZF0iKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkgewotICAgICAgICAg ICAgICAgICAgICBwcmludGYoIltUTFMgLSBEdW1teSBDb25uZWN0ZWRdXHJcbiIpOwotICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja190bl90bHNfbmVnb3Rp YXRlIiwiW1RMUyAtIER1bW15IENvbm5lY3RlZF0iLDApOwotICAgICAgICAgICAgICAgIGF1dGhf ZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAgICAgICAgICAgICAgIGFjY2VwdF9jb21wbGV0ZSA9 IDE7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0KLSNpZm5kZWYg VVNFX0NFUlRfQ0IKLSAgICAgICAgICAgIGlmICghdGxzX2xvYWRfY2VydHModGxzX2N0eCx0bHNf Y29uLDApKQotICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0jZW5kaWYgLyogVVNFX0NFUlRf Q0IgKi8KLSAgICAgICAgICAgIGlmIChTU0xfY29ubmVjdCh0bHNfY29uKSA8PSAwKSB7Ci0gICAg ICAgICAgICAgICAgaW50IGxlbjsKLSAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNl cykgewotICAgICAgICAgICAgICAgICAgICB0bl9kZWJ1ZygiW1RMUyAtIEZBSUxFRF0iKTsKLSAg ICAgICAgICAgICAgICAgICAgRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKLSAgICAgICAgICAg ICAgICAgICAgbGVuID0gQklPX3JlYWQoYmlvX2Vycixzc2xfZXJyLFNTTF9FUlJfQkZTWik7Ci0g ICAgICAgICAgICAgICAgICAgIHNzbF9lcnJbbGVuIDwgU1NMX0VSUl9CRlNaID8gbGVuIDogU1NM X0VSUl9CRlNaXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50Zihzc2xfZXJyKTsK LSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCB2ZXJib3NpdHkgKSB7Ci0gICAgICAgICAgICAg ICAgICAgIHByaW50ZigiW1RMUyAtIEZBSUxFRF1cclxuIik7Ci0gICAgICAgICAgICAgICAgICAg IEVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7Ci0gICAgICAgICAgICAgICAgICAgIGxlbiA9IEJJ T19yZWFkKGJpb19lcnIsc3NsX2VycixTU0xfRVJSX0JGU1opOwotICAgICAgICAgICAgICAgICAg ICBzc2xfZXJyW2xlbiA8IFNTTF9FUlJfQkZTWiA/IGxlbiA6IFNTTF9FUlJfQkZTWl0gPSAnXDAn OwotICAgICAgICAgICAgICAgICAgICBwcmludGYoc3NsX2Vycik7Ci0gICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX3RuX3Rsc19uZWdvdGlhdGUiLCJbVExT IC0gRkFJTEVEXSIsMCk7Ci0gICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVD VCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotCi0gICAgICAg ICAgICB0bHNfYWN0aXZlX2ZsYWcgPSAxOwotICAgICAgICAgICAgaWYgKCAhc3NsX2NlcnRzb2tf ZmxhZyAmJiAoc3NsX3ZlcmlmeV9mbGFnICYgU1NMX1ZFUklGWV9QRUVSKQotICAgICAgICAgICAg ICAgICAmJiAhdGxzX2lzX2tyYjUoMCkpIHsKLSAgICAgICAgICAgICAgICBjaGFyIHBybXB0WzEw MjRdOwotICAgICAgICAgICAgICAgIHN1YmplY3QgPSBzc2xfZ2V0X3N1YmplY3RfbmFtZSh0bHNf Y29uKTsKLQotICAgICAgICAgICAgICAgIGlmICghc3ViamVjdCkgewotICAgICAgICAgICAgICAg ICAgICBpZiAoc3NsX3ZlcmlmeV9mbGFnICYgU1NMX1ZFUklGWV9GQUlMX0lGX05PX1BFRVJfQ0VS VCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRu X2RlYiB8fCBkZWJzZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG5fZGVidWcoIltU TFMgLSBGQUlMRURdIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICggdmVyYm9z aXR5ICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIltUTFMgLSBGQUlMRURd XHJcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfdG5fdGxzX25l Z290aWF0ZSIsIltUTFMgLSBGQUlMRURdIiwwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1 dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu IC0xOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg ICAgaW50IG9rOwotICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSB1cV9vaygiV2FybmluZzog U2VydmVyIGRpZG4ndCBwcm92aWRlIGEgY2VydGlmaWNhdGUiLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiQ29udGludWU/IChZL04pIiwgMywgTlVMTCwgMCk7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg aWYgKHRuX2RlYiB8fCBkZWJzZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRu X2RlYnVnKCJbVExTIC0gRkFJTEVEXSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs c2UgaWYgKCB2ZXJib3NpdHkgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlu dGYoIltUTFMgLSBGQUlMRURdXHJcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl YnVnKEYxMTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJja190bl90bHNf bmVnb3RpYXRlIiwiW1RMUyAtIEZBSUxFRF0iLDApOwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3NsX2NoZWNrX3NlcnZlcl9uYW1l KHRsc19jb24sIHN6SG9zdE5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0bl9kZWIg fHwgZGVic2VzKQotICAgICAgICAgICAgICAgICAgICAgICAgdG5fZGVidWcoIltUTFMgLSBGQUlM RURdIik7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKQotICAgICAg ICAgICAgICAgICAgICAgICAgcHJpbnRmKCJbVExTIC0gRkFJTEVEXVxyXG4iKTsKLSAgICAgICAg ICAgICAgICAgICAgZGVidWcoRjExMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJja190 bl90bHNfbmVnb3RpYXRlIiwiW1RMUyAtIEZBSUxFRF0iLDApOwotICAgICAgICAgICAgICAgICAg ICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu IC0xOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYg KCBzc2xfZGVidWdfZmxhZyAmJiBzc2xfZmluaXNoZWRfbWVzc2FnZXMpIHsKLSAgICAgICAgICAg ICAgICBjaGFyIG1zZ1szMl07Ci0gICAgICAgICAgICAgICAgaW50IGksIGxlbj0zMjsKLSAgICAg ICAgICAgICAgICBleHRlcm4gY2hhciB0bl9tc2dbXSwgaGV4YnVmW107Ci0KLSAgICAgICAgICAg ICAgICB0bl9tc2dbMF0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGxlbiA9IHNzbF9nZXRfY2xp ZW50X2ZpbmlzaGVkKG1zZyxsZW4pOwotICAgICAgICAgICAgICAgIGlmICggbGVuID4gMCApIHsK LSAgICAgICAgICAgICAgICAgICAgZm9yICggaT0wO2k8bGVuO2krKyApIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgIHNwcmludGYoaGV4YnVmLCIlMDJYICIsbXNnW2ldKTsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csaGV4YnVmLFROX01TR19MRU4pOwotICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiVExTIGNsaWVudCBm aW5pc2hlZDogJXNcclxuIix0bl9tc2cpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICB0bl9tc2dbMF0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGxlbiA9IHNzbF9nZXRfc2Vy dmVyX2ZpbmlzaGVkKG1zZyxsZW4pOwotICAgICAgICAgICAgICAgIGlmICggbGVuID4gMCApIHsK LSAgICAgICAgICAgICAgICAgICAgZm9yICggaT0wO2k8bGVuO2krKyApIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgIHNwcmludGYoaGV4YnVmLCIlMDJYICIsbXNnW2ldKTsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csaGV4YnVmLFROX01TR19MRU4pOwotICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiVExTIHNlcnZlciBm aW5pc2hlZDogJXNcclxuIix0bl9tc2cpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg IH0KLQotICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCi0gICAgICAgICAgICAgICAg dG5fZGVidWcoIltUTFMgLSBPS10iKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkg KQotICAgICAgICAgICAgICAgIHByaW50ZigiW1RMUyAtIE9LXVxyXG4iKTsKLSAgICAgICAgICAg IGRlYnVnKEYxMTAsImNrX3RuX3Rsc19uZWdvdGlhdGUiLCJbVExTIC0gT0tdIiwwKTsKLQotICAg ICAgICAgICAgc3NsX2Rpc3BsYXlfY29ubmVjdF9kZXRhaWxzKHRsc19jb24sMCx2ZXJib3NpdHkp OwotICAgICAgICB9Ci0gICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAgIH0K LSAgICBhY2NlcHRfY29tcGxldGUgPSAxOwotICAgIGF1dGhfc3NsX3ZhbGlkID0gMTsKLSAgICBy ZXR1cm4oMCk7Ci19Ci0KLWludAotY2tfc3NsX2luY29taW5nKGZkKSBpbnQgZmQ7Ci17Ci0gICAg LyogaWYgd2UgYXJlIG5vdCBydW5uaW5nIGluIGRlYnVnIHRoZW4gYW55IGVycm9yCi0gICAgKiBz dHVmZiBmcm9tIFNTTCBkZWJ1ZyAqbXVzdCogbm90IGdvIGRvd24KLSAgICAqIHRoZSBzb2NrZXQg KHdoaWNoIDAsMSwyIGFyZSBhbGwgcG9pbnRpbmcgdG8gYnkKLSAgICAqIGRlZmF1bHQpCi0gICAg Ki8KLQotICAgIGludCB0aW1vID0gMjAwMDsKLQotICAgIHNldHZlcmJvc2l0eSgpOwotICAgIGlm ICggIWNrX3NzbGVheV9pc19pbnN0YWxsZWQoKSApCi0gICAgICAgIHJldHVybigtMSk7Ci0KLSAg ICAvKiBkbyB0aGUgU1NMIHN0dWZmIG5vdyAuLi4gYmVmb3JlIHdlIHBsYXkgd2l0aCBwdHkncyAq LwotICAgIFNTTF9zZXRfZmQoc3NsX2NvbixmZCk7Ci0gICAgU1NMX3NldF9mZCh0bHNfY29uLGZk KTsKLQotICAgIGlmICh0bHNfb25seV9mbGFnKSB7Ci0gICAgICAgIGlmICh0bl9kZWIgfHwgZGVi c2VzKQotICAgICAgICAgICAgdG5fZGVidWcoIltUTFMgLSBoYW5kc2hha2Ugc3RhcnRpbmddIik7 Ci0gICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKQotICAgICAgICAgICAgcHJpbnRmKCJbVExT IC0gaGFuZHNoYWtlIHN0YXJ0aW5nXVxyXG4iKTsKLSAgICAgICAgZGVidWcoRjExMCwiY2tfc3Ns X2luY29taW5nIiwiW1RMUyAtIGhhbmRzaGFrZSBzdGFydGluZ10iLDApOwotCi0gICAgICAgIC8q IGhtbSAuLi4gb25seSB3aGVuIHJ1bm5pbmcgdGFsa2luZyB0byB0aGluZ3MgbGlrZQotICAgICAg ICAqIGh0dHBzIHNlcnZlcnMgc2hvdWxkIHdlIGhpdCB0aGlzIGNvZGUgYW5kIHRoZW4KLSAgICAg ICAgKiB3ZSByZWFsbHkgZG9uJ3QgY2FyZSAqd2hvKiB3ZSB0YWxrIHRvIDotKQotICAgICAgICAq LwotICAgICAgICBpZiAoU1NMX2FjY2VwdCh0bHNfY29uKSA8PSAwKSB7Ci0gICAgICAgICAgICBj aGFyIGVycmJ1ZlsxMDI0XTsKLQotICAgICAgICAgICAgc3ByaW50ZihlcnJidWYsIltUTFMgLSBT U0xfYWNjZXB0IGVycm9yOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICBFUlJfZXJyb3Jfc3Ry aW5nKEVSUl9nZXRfZXJyb3IoKSxOVUxMKSk7Ci0KLSAgICAgICAgICAgIGlmICh0bl9kZWIgfHwg ZGVic2VzKQotICAgICAgICAgICAgICAgIHRuX2RlYnVnKGVycmJ1Zik7Ci0gICAgICAgICAgICBl bHNlIGlmICggc3NsX2RlYnVnX2ZsYWcgKQotICAgICAgICAgICAgICAgIHByaW50ZigiJXNcclxu IixlcnJidWYpOwotICAgICAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApCi0gICAgICAgICAg ICAgICAgcHJpbnRmKCJbVExTIC0gU1NMX2FjY2VwdCBlcnJvcl1cclxuIik7Ci0KLSAgICAgICAg ICAgIGRlYnVnKEYxMTAsImNrX3NzbF9pbmNvbWluZyIsZXJyYnVmLDApOwotICAgICAgICAgICAg cmV0dXJuKC0xKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICh0bl9kZWIgfHwg ZGVic2VzKQotICAgICAgICAgICAgICAgIHRuX2RlYnVnKCJbVExTIC0gT0tdIik7Ci0gICAgICAg ICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkKLSAgICAgICAgICAgICAgICBwcmludGYoIltUTFMg LSBPS11cclxuIik7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja19zc2xfaW5jb21pbmciLCJb VExTIC0gT0tdIiwwKTsKLSAgICAgICAgICAgIHRsc19hY3RpdmVfZmxhZyA9IDE7Ci0gICAgICAg IH0KLSAgICB9IGVsc2UgaWYgKHNzbF9vbmx5X2ZsYWcpIHsKLSAgICAgICAgaWYgKHRuX2RlYiB8 fCBkZWJzZXMpCi0gICAgICAgICAgICB0bl9kZWJ1ZygiW1NTTCAtIGhhbmRzaGFrZSBzdGFydGlu Z10iKTsKLSAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApCi0gICAgICAgICAgICBwcmludGYo IltTU0wgLSBoYW5kc2hha2Ugc3RhcnRpbmddXHJcbiIpOwotICAgICAgICBkZWJ1ZyhGMTEwLCJj a19zc2xfaW5jb21pbmciLCJbU1NMIC0gaGFuZHNoYWtlIHN0YXJ0aW5nXSIsMCk7Ci0KLSAgICAg ICAgLyogaG1tIC4uLiBvbmx5IHdoZW4gcnVubmluZyB0YWxraW5nIHRvIHRoaW5ncyBsaWtlCi0g ICAgICAgICAqIGh0dHBzIHNlcnZlcnMgc2hvdWxkIHdlIGhpdCB0aGlzIGNvZGUgYW5kIHRoZW4K LSAgICAgICAgICogd2UgcmVhbGx5IGRvbid0IGNhcmUgKndobyogd2UgdGFsayB0byA6LSkKLSAg ICAgICAgICovCi0gICAgICAgIGlmIChTU0xfYWNjZXB0KHNzbF9jb24pIDw9IDApIHsKLSAgICAg ICAgICAgIGNoYXIgZXJyYnVmWzEwMjRdOwotCi0gICAgICAgICAgICBzcHJpbnRmKGVycmJ1Ziwi W1NTTCAtIFNTTF9hY2NlcHQgZXJyb3I6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgIEVSUl9l cnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLE5VTEwpKTsKLQotICAgICAgICAgICAgaWYgKHRu X2RlYiB8fCBkZWJzZXMpCi0gICAgICAgICAgICAgICAgdG5fZGVidWcoZXJyYnVmKTsKLSAgICAg ICAgICAgIGVsc2UgaWYgKCBzc2xfZGVidWdfZmxhZyApCi0gICAgICAgICAgICAgICAgcHJpbnRm KCIlc1xyXG4iLGVycmJ1Zik7Ci0gICAgICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkKLSAg ICAgICAgICAgICAgICBwcmludGYoIltTU0wgLSBTU0xfYWNjZXB0IGVycm9yXVxyXG4iKTsKLQot ICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfc3NsX2luY29taW5nIixlcnJidWYsMCk7Ci0gICAg ICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHRu X2RlYiB8fCBkZWJzZXMpCi0gICAgICAgICAgICAgICAgdG5fZGVidWcoIltTU0wgLSBPS10iKTsK LSAgICAgICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKQotICAgICAgICAgICAgcHJpbnRmKCJb U1NMIC0gT0tdXHJcbiIpOwotICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX2lzIiwiW1NTTCAt IE9LXSIsMCk7Ci0gICAgICAgICAgICBzc2xfYWN0aXZlX2ZsYWcgPSAxOwotICAgICAgICB9Ci0g ICAgfQotICAgIGlmIChzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSB7Ci0gICAg ICAgIFg1MDkgKnBlZXI7Ci0gICAgICAgIGNoYXIgc3RyWzI1Nl0sICp1aWQ9TlVMTDsKLQotICAg ICAgICAvKiBub3cgY2hlY2sgdG8gc2VlIHRoYXQgd2UgZ290IGV4YWN0bHkgd2hhdCB3ZQotICAg ICAgICAgKiB3YW50ZWQgZnJvbSB0aGUgY2FsbGVyIC4uLiBpZiBhIGNlcnRpZmljYXRlIGlzCi0g ICAgICAgICAqIHJlcXVpcmVkIHRoZW4gd2UgbWFrZSAxMDAlIHN1cmUgdGhhdCB3ZSB3ZXJlCi0g ICAgICAgICAqIGdpdmVuIG9uIGR1cmluZyB0aGUgaGFuZHNoYWtlIChhcyBpdCBpcyBhbiBvcHRp b25hbAotICAgICAgICAgKiBwYXJ0IG9mIFNTTCBhbmQgVExTKQotICAgICAgICAgKi8KLQotICAg ICAgICBpZiAoIHRsc19hY3RpdmVfZmxhZyApIHsKLSAgICAgICAgICAgIHBlZXI9U1NMX2dldF9w ZWVyX2NlcnRpZmljYXRlKHRsc19jb24pOwotICAgICAgICB9IGVsc2UgaWYgKCBzc2xfYWN0aXZl X2ZsYWcgKSB7Ci0gICAgICAgICAgICBwZWVyPVNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZShzc2xf Y29uKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwZWVyID09IE5VTEwpIHsKLSAgICAgICAg ICAgIGRlYnVnKEYxMDAsIlNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZSgpID09IE5VTEwiLCIiLDAp OwotICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0KLSAgICAgICAgICAg IGlmIChzc2xfdmVyaWZ5X2ZsYWcgJiBTU0xfVkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUKSB7 Ci0gICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCi0gICAgICAgICAgICAgICAg ICAgIHRuX2RlYnVnKCJbU1NML1RMUyAtIHBlZXIgY2hlY2sgZmFpbGVkXSIpOwotICAgICAgICAg ICAgICAgIGVsc2UgaWYgKHNzbF9kZWJ1Z19mbGFnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBy aW50ZigiW1NTTC9UTFMgLSBwZWVyIGNoZWNrIGZhaWxlZF1cclxuIik7Ci0gICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsCi0gICAgICAgICAgICAgICAgICAgICAg ICJja190bl90bHNfbmVnb3RpYXRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIltTU0wvVExT IC0gcGVlciBjaGVjayBmYWlsZWRdIiwKLSAgICAgICAgICAgICAgICAgICAgICAgMAotICAgICAg ICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgIC8qIExPR0dJTkcgUkVRVUlSRUQg SEVSRSEgKi8KLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0KLSAg ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsIlNTTF9nZXRfcGVlcl9jZXJ0 aWZpY2F0ZSgpICE9IE5VTEwiLCIiLDApOwotICAgICAgICAgICAgWDUwOV9OQU1FX2dldF90ZXh0 X2J5X05JRChYNTA5X2dldF9zdWJqZWN0X25hbWUocGVlciksCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBOSURfY29tbW9uTmFtZSxzdHIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAyNTYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7Ci0gICAgICAgICAgICBwcmludGYoIltUTFMgLSBjb21tb25OYW1lPSVzXVxy XG4iLHN0cik7Ci0KLSAgICAgICAgICAgIFg1MDlfTkFNRV9nZXRfdGV4dF9ieV9OSUQoWDUwOV9n ZXRfc3ViamVjdF9uYW1lKHBlZXIpLAotI2lmbmRlZiBOSURfeDUwMFVuaXF1ZUlkZW50aWZpZXIK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JRF91bmlxdWVJZGVudGlm aWVyLAotI2Vsc2UgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5J RF94NTAwVW5pcXVlSWRlbnRpZmllciwKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RyLDI1NgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKLSAgICAgICAgICAgIHByaW50ZigiW1RMUyAtIHVuaXF1ZUlkZW50aWZpZXI9JXNd XHJcbiIsc3RyKTsKLQotICAgICAgICAgICAgLyogVHJ5IHRvIGRldGVybWluZSB1c2VyIG5hbWUg Ki8KLSAgICAgICAgICAgIHVpZCA9IHRsc191c2VyaWRfZnJvbV9jbGllbnRfY2VydCh0bHNfY29u KTsKLSAgICAgICAgICAgIGlmICggdWlkICkgewotICAgICAgICAgICAgICAgIC8qIFRoaXMgY29k ZSBpcyB2ZXJ5IHF1ZXN0aW9uYWJsZS4KLSAgICAgICAgICAgICAgICAqIEhvdyBzaG91bGQgaXQg YmVoYXZlPwotICAgICAgICAgICAgICAgICogVGhlIGNsaWVudCBoYXMgcHJlc2VudGVkIGEgY2Vy dGlmaWNhdGUgdGhhdAotICAgICAgICAgICAgICAgICogY29udGFpbnMgYSB1c2VybmFtZS4gIFdl IGhhdmUgdmFsaWRhdGVkIHRoZQotICAgICAgICAgICAgICAgICogY2VydGlmaWNhdGUgYnV0IHdl IGRvIG5vdCBhdXRvbWF0aWNhbGx5Ci0gICAgICAgICAgICAgICAgKiBsb2cgdGhlIHVzZXIgaW4g dW5sZXNzIHRoZXJlIGlzIGEgLnRsc2xvZ2luCi0gICAgICAgICAgICAgICAgKiBmaWxlLgotICAg ICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgICAgICBja3N0cm5jcHkoc3pVc2VyTmFtZVJl cXVlc3RlZCx1aWQsVUlEQlVGTEVOKTsKLSNpZmRlZiBDS19MT0dJTgotICAgICAgICAgICAgICAg IGlmICh6dnVzZXIodWlkKSkKLSAgICAgICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRI X1ZBTElEKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSAg ICAgICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1VTRVIpOwotICAgICAgICAgICAg fQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3pVc2VyTmFtZVJlcXVlc3Rl ZFswXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuKDApOyAgLyogc3Vj Y2VzcyAqLwotfQotCi1pbnQKLWNrX3NzbF9vdXRnb2luZyhmZCkgaW50IGZkOwotewotICAgIGlu dCB0aW1vID0gMjAwMDsKLQotICAgIHNldHZlcmJvc2l0eSgpOwotICAgIGlmICggIWNrX3NzbGVh eV9pc19pbnN0YWxsZWQoKSApCi0gICAgICAgIHJldHVybigtMSk7Ci0KLSAgICAvKiBiaW5kIGlu IHRoZSBuZXR3b3JrIGRlc2NyaXB0b3IgKi8KLSAgICBTU0xfc2V0X2ZkKHNzbF9jb24sZmQpOwot ICAgIFNTTF9zZXRfZmQodGxzX2NvbixmZCk7Ci0KLSAgICAvKiBJZiB3ZSBhcmUgZG9pbmcgcmF3 IFRMUyB0aGVuIHN0YXJ0IGl0IG5vdyAuLi4gKi8KLSAgICBpZiAodGxzX29ubHlfZmxhZykgewot I2lmbmRlZiBVU0VfQ0VSVF9DQgotICAgICAgICBpZiAoIXRsc19sb2FkX2NlcnRzKHRsc19jdHgs dGxzX2NvbiwwKSkgewotICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfc3NsX291dGdvaW5nIiwi dGxzX2xvYWRfY2VydHMoKSBmYWlsZWQiLDApOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAg ICAgICAgfQotI2VuZGlmIC8qIFVTRV9DRVJUX0NCICovCi0gICAgICAgIGlmICh0bl9kZWIgfHwg ZGVic2VzKQotICAgICAgICAgICAgdG5fZGVidWcoIltUTFMgLSBoYW5kc2hha2Ugc3RhcnRpbmdd Iik7Ci0gICAgICAgIGVsc2UgaWYgKHZlcmJvc2l0eSkKLSAgICAgICAgICAgIHByaW50ZigiW1RM UyAtIGhhbmRzaGFrZSBzdGFydGluZ11cclxuIik7Ci0gICAgICAgIGRlYnVnKEYxMTAsImNrX3Nz bF9vdXRnb2luZyIsIltUTFMgLSBoYW5kc2hha2Ugc3RhcnRpbmddIiwwKTsKLSAgICAgICAgaWYg KFNTTF9jb25uZWN0KHRsc19jb24pIDw9IDApIHsKLSAgICAgICAgICAgIGNoYXIgZXJyYnVmWzEw MjRdOwotCi0gICAgICAgICAgICBzcHJpbnRmKGVycmJ1ZiwiW1RMUyAtIFNTTF9jb25uZWN0IGVy cm9yOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRf ZXJyb3IoKSxOVUxMKSk7Ci0KLSAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQotICAg ICAgICAgICAgICAgIHRuX2RlYnVnKGVycmJ1Zik7Ci0gICAgICAgICAgICBlbHNlIGlmICggc3Ns X2RlYnVnX2ZsYWcgKQotICAgICAgICAgICAgICAgIHByaW50ZigiJXNcclxuIixlcnJidWYpOwot Ci0gICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKLSAgICAgICAgICAgICAgICB0bl9k ZWJ1ZygiW1RMUyAtIEZBSUxFRF0iKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkg KQotICAgICAgICAgICAgICAgIHByaW50ZigiW1RMUyAtIEZBSUxFRF1cclxuIik7Ci0gICAgICAg ICAgICBkZWJ1ZyhGMTEwLCJja19zc2xfb3V0Z29pbmciLCJbVExTIC0gRkFJTEVEXSIsMCk7Ci0g ICAgICAgICAgICBuZXRjbG9zKCk7Ci0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgdGxzX2FjdGl2ZV9mbGFnID0gMTsKLSAgICAgICAgICAgIGlm ICggIXNzbF9jZXJ0c29rX2ZsYWcgJiYgKHNzbF92ZXJpZnlfZmxhZyAmIFNTTF9WRVJJRllfUEVF UikgJiYgCi0gICAgICAgICAgICAgICAgICF0bHNfaXNfa3JiNSgwKSApIHsKLSAgICAgICAgICAg ICAgICBjaGFyICpzdWJqZWN0ID0gc3NsX2dldF9zdWJqZWN0X25hbWUodGxzX2Nvbik7Ci0KLSAg ICAgICAgICAgICAgICBpZiAoIXN1YmplY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNz bF92ZXJpZnlfZmxhZyAmIFNTTF9WRVJJRllfRkFJTF9JRl9OT19QRUVSX0NFUlQpCi0gICAgICAg ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVi c2VzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRuX2RlYnVnKCJbVExTIC0gRkFJTEVE XSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJbVExTIC0gRkFJTEVEXVxyXG4iKTsKLSAg ICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX3RuX3Rsc19uZWdvdGlhdGUiLCJb VExTIC0gRkFJTEVEXSIsMCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfZmluaXNo ZWQoQVVUSF9SRUpFQ1QpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAg ICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBw cm1wdFsxMDI0XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBvazsKLSAgICAgICAgICAg ICAgICAgICAgICAgIG9rID0gdXFfb2soIldhcm5pbmc6IFNlcnZlciBkaWRuJ3QgcHJvdmlkZSBh IGNlcnRpZmljYXRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbnRp bnVlPyAoWS9OKSIsIDMsIE5VTEwsIDApOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFv aykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bl9kZWJ1ZygiW1RMUyAtIEZBSUxFRF0i KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJbVExTIC0gRkFJTEVEXVxyXG4i KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiY2tfdG5fdGxzX25lZ290aWF0ZSIsIltUTFMgLSBGQUlM RURdIiwwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhf UkVKRUNUKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAg ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICB9IGVsc2UgaWYgKHNzbF9jaGVja19zZXJ2ZXJfbmFtZSh0bHNfY29uLCBzekhvc3ROYW1lKSkg ewotICAgICAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKLSAgICAgICAgICAg ICAgICAgICAgICAgIHRuX2RlYnVnKCJbVExTIC0gRkFJTEVEXSIpOwotICAgICAgICAgICAgICAg ICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50 ZigiW1RMUyAtIEZBSUxFRF1cclxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAiY2tfdG5fdGxzX25lZ290aWF0ZSIsIltUTFMg LSBGQUlMRURdIiwwKTsKLSAgICAgICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JF SkVDVCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKLSAgICAg ICAgICAgICAgICB0bl9kZWJ1ZygiW1RMUyAtIE9LXSIpOwotICAgICAgICAgICAgZWxzZSBpZiAo IXF1aWV0KQotCQlwcmludGYoIltUTFMgLSBPS11cclxuIik7Ci0gICAgICAgICAgICBkZWJ1ZyhG MTEwLCJja19zc2xfb3V0Z29pbmciLCJbVExTIC0gT0tdIiwwKTsKLSAgICAgICAgICAgIHNzbF9k aXNwbGF5X2Nvbm5lY3RfZGV0YWlscyh0bHNfY29uLDAsdmVyYm9zaXR5KTsKLSAgICAgICAgfQot ICAgIH0KLSAgICAvKiBpZiB3ZSBhcmUgZG9pbmcgcmF3IFNTTCB0aGVuIHN0YXJ0IGl0IG5vdyAu Li4gKi8KLSAgICBlbHNlIGlmIChzc2xfb25seV9mbGFnKSB7Ci0jaWZuZGVmIFVTRV9DRVJUX0NC Ci0gICAgICAgIGlmICghdGxzX2xvYWRfY2VydHMoc3NsX2N0eCxzc2xfY29uLDApKQotICAgICAg ICAgICAgcmV0dXJuKC0xKTsKLSNlbmRpZiAvKiBVU0VfQ0VSVF9DQiAqLwotICAgICAgICBpZiAo dG5fZGViIHx8IGRlYnNlcykKLSAgICAgICAgICAgIHRuX2RlYnVnKCJbU1NMIC0gaGFuZHNoYWtl IHN0YXJ0aW5nXSIpOwotICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkKLSAgICAgICAgICAg IHByaW50ZigiW1NTTCAtIGhhbmRzaGFrZSBzdGFydGluZ11cclxuIik7Ci0gICAgICAgIGRlYnVn KEYxMTAsImNrX3NzbF9vdXRnb2luZyIsIltTU0wgLSBoYW5kc2hha2Ugc3RhcnRpbmddIiwwKTsK LSAgICAgICAgaWYgKFNTTF9jb25uZWN0KHNzbF9jb24pIDw9IDApIHsKLSAgICAgICAgICAgIGlm ICggc3NsX2RlYnVnX2ZsYWcgKSB7Ci0gICAgICAgICAgICAgICAgY2hhciBlcnJidWZbMTAyNF07 Ci0KLSAgICAgICAgICAgICAgICBzcHJpbnRmKGVycmJ1ZiwiW1NTTCAtIFNTTF9jb25uZWN0IGVy cm9yOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgRVJSX2Vycm9yX3N0cmluZyhFUlJf Z2V0X2Vycm9yKCksTlVMTCkpOwotICAgICAgICAgICAgICAgIHByaW50ZigiJXNcclxuIixlcnJi dWYpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCi0g ICAgICAgICAgICAgICAgdG5fZGVidWcoIltTU0wgLSBGQUlMRURdIik7Ci0gICAgICAgICAgICBl bHNlIGlmICggdmVyYm9zaXR5ICkKLSAgICAgICAgICAgICAgICBwcmludGYoIltTU0wgLSBGQUlM RURdXHJcbiIpOwotICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfc3NsX291dGdvaW5nIiwiW1NT TCAtIEZBSUxFRF0iLDApOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfSBlbHNl IHsKLSAgICAgICAgICAgIHNzbF9hY3RpdmVfZmxhZyA9IDE7Ci0KLSAgICAgICAgICAgIGlmICgg IXNzbF9jZXJ0c29rX2ZsYWcgJiYgKHNzbF92ZXJpZnlfZmxhZyAmIFNTTF9WRVJJRllfUEVFUikg JiYKLSAgICAgICAgICAgICAgICAgIXRsc19pc19rcmI1KDApKSB7Ci0gICAgICAgICAgICAgICAg Y2hhciAqc3ViamVjdCA9IHNzbF9nZXRfc3ViamVjdF9uYW1lKHNzbF9jb24pOwotCi0gICAgICAg ICAgICAgICAgaWYgKCFzdWJqZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzc2xfdmVy aWZ5X2ZsYWcgJiBTU0xfVkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUKQotICAgICAgICAgICAg ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bl9kZWJ1ZygiW1NTTCAtIEZBSUxFRF0iKTsK LSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHByaW50ZigiW1NTTCAtIEZBSUxFRF1cclxuIik7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja190bl90bHNfbmVnb3RpYXRlIiwiW1NTTCAt IEZBSUxFRF0iLDApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFV VEhfUkVKRUNUKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAg ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgcHJtcHRb MTAyNF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2s7Ci0gICAgICAgICAgICAgICAg ICAgICAgICBvayA9IHVxX29rKCJXYXJuaW5nOiBTZXJ2ZXIgZGlkbid0IHByb3ZpZGUgYSBjZXJ0 aWZpY2F0ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb250aW51ZT8g KFkvTikiLCAzLCBOVUxMLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb2spIHsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG5fZGVidWcoIltTU0wgLSBGQUlMRURdIik7Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiW1NTTCAtIEZBSUxFRF1cclxuIik7Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgImNrX3RuX3Rsc19uZWdvdGlhdGUiLCJbU1NMIC0gRkFJTEVEXSIs MCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVD VCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBl bHNlIGlmIChzc2xfY2hlY2tfc2VydmVyX25hbWUoc3NsX2Nvbiwgc3pIb3N0TmFtZSkpIHsKLSAg ICAgICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCi0gICAgICAgICAgICAgICAg ICAgICAgICB0bl9kZWJ1ZygiW1NTTCAtIEZBSUxFRF0iKTsKLSAgICAgICAgICAgICAgICAgICAg ZWxzZSBpZiAoIHZlcmJvc2l0eSApCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIltT U0wgLSBGQUlMRURdXHJcbiIpOwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCAiY2tf dG5fdGxzX25lZ290aWF0ZSIsIltTU0wgLSBGQUlMRURdIiwwKTsKLSAgICAgICAgICAgICAgICAg ICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy biAtMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo dG5fZGViIHx8IGRlYnNlcykKLSAgICAgICAgICAgICAgICB0bl9kZWJ1ZygiW1NTTCAtIE9LXSIp OwotCSAgICBlbHNlIGlmICghcXVpZXQpCi0JICAgICAgICBwcmludGYoIltTU0wgLSBPS11cclxu Iik7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja19zc2xfb3V0Z29pbmciLCJbU1NMIC0gT0td IiwwKTsKLSAgICAgICAgICAgIHNzbF9kaXNwbGF5X2Nvbm5lY3RfZGV0YWlscyhzc2xfY29uLDAs dmVyYm9zaXR5KTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4oMCk7ICAvKiBzdWNjZXNz ICovCi19Ci0KLSNpZm5kZWYgTk9IVFRQCi1pbnQKLWNrX3NzbF9odHRwX2NsaWVudChmZCwgaG9z dG5hbWUpIGludCBmZDsgY2hhciAqIGhvc3RuYW1lOwotewotICAgIGludCB0aW1vID0gMjAwMDsK LQotICAgIGlmICggIWNrX3NzbGVheV9pc19pbnN0YWxsZWQoKSApCi0gICAgICAgIHJldHVybigt MSk7Ci0KLSAgICBzZXR2ZXJib3NpdHkoKTsKLQotICAgIC8qIGJpbmQgaW4gdGhlIG5ldHdvcmsg ZGVzY3JpcHRvciAqLwotICAgIFNTTF9zZXRfZmQodGxzX2h0dHBfY29uLGZkKTsKLQotICAgIC8q IElmIHdlIGFyZSBkb2luZyByYXcgVExTIHRoZW4gc3RhcnQgaXQgbm93IC4uLiAqLwotICAgIGlm ICgxKSB7Ci0jaWZuZGVmIFVTRV9DRVJUX0NCCi0gICAgICAgIGlmICghdGxzX2xvYWRfY2VydHMo dGxzX2h0dHBfY3R4LHRsc19odHRwX2NvbiwwKSkgewotICAgICAgICAgICAgZGVidWcoRjExMCwi Y2tfc3NsX2h0dHBfY2xpZW50IiwidGxzX2xvYWRfY2VydHMoKSBmYWlsZWQiLDApOwotICAgICAg ICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIFVTRV9DRVJUX0NCICovCi0g ICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQotICAgICAgICAgICAgdG5fZGVidWcoIltUTFMg LSBoYW5kc2hha2Ugc3RhcnRpbmddIik7Ci0gICAgICAgIGVsc2UgaWYgKHZlcmJvc2l0eSkKLSAg ICAgICAgICAgIHByaW50ZigiW1RMUyAtIGhhbmRzaGFrZSBzdGFydGluZ11cclxuIik7Ci0gICAg ICAgIGRlYnVnKEYxMTAsImNrX3NzbF9vdXRnb2luZyIsIltUTFMgLSBoYW5kc2hha2Ugc3RhcnRp bmddIiwwKTsKLSAgICAgICAgaWYgKFNTTF9jb25uZWN0KHRsc19odHRwX2NvbikgPD0gMCkgewot ICAgICAgICAgICAgY2hhciBlcnJidWZbMTAyNF07Ci0KLSAgICAgICAgICAgIHNwcmludGYoZXJy YnVmLCJbVExTIC0gU1NMX2Nvbm5lY3QgZXJyb3I6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAg IEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLE5VTEwpKTsKLQotICAgICAgICAgICAg aWYgKHRuX2RlYiB8fCBkZWJzZXMpCi0gICAgICAgICAgICAgICAgdG5fZGVidWcoZXJyYnVmKTsK LSAgICAgICAgICAgIGVsc2UgaWYgKCBzc2xfZGVidWdfZmxhZyApCi0gICAgICAgICAgICAgICAg cHJpbnRmKCIlc1xyXG4iLGVycmJ1Zik7Ci0KLSAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVi c2VzKQotICAgICAgICAgICAgICAgIHRuX2RlYnVnKCJbVExTIC0gRkFJTEVEXSIpOwotICAgICAg ICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJbVExT IC0gRkFJTEVEXVxyXG4iKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX3NzbF9odHRwX2Ns aWVudCIsIltUTFMgLSBGQUlMRURdIiwwKTsKLSAgICAgICAgICAgIGh0dHBfY2xvc2UoKTsKLSAg ICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0bHNf aHR0cF9hY3RpdmVfZmxhZyA9IDE7Ci0gICAgICAgICAgICBpZiAoICFzc2xfY2VydHNva19mbGFn ICYmIChzc2xfdmVyaWZ5X2ZsYWcgJiBTU0xfVkVSSUZZX1BFRVIpICYmCi0gICAgICAgICAgICAg ICAgICF0bHNfaXNfa3JiNSgzKSApIHsKLSAgICAgICAgICAgICAgICBjaGFyICpzdWJqZWN0ID0g c3NsX2dldF9zdWJqZWN0X25hbWUodGxzX2h0dHBfY29uKTsKLQotICAgICAgICAgICAgICAgIGlm ICghc3ViamVjdCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoc3NsX3ZlcmlmeV9mbGFnICYg U1NMX1ZFUklGWV9GQUlMX0lGX05PX1BFRVJfQ0VSVCkKLSAgICAgICAgICAgICAgICAgICAgewot ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgdG5fZGVidWcoIltUTFMgLSBGQUlMRURdIik7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwcmludGYoIltUTFMgLSBGQUlMRURdXHJcbiIpOwotICAgICAgICAgICAgICAgICAg ICAgICAgZGVidWcoRjExMCwiY2tfdG5fdGxzX25lZ290aWF0ZSIsIltUTFMgLSBGQUlMRURdIiww KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgcHJtcHRbMTAyNF07Ci0g ICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2s7Ci0gICAgICAgICAgICAgICAgICAgICAgICBv ayA9IHVxX29rKCJXYXJuaW5nOiBTZXJ2ZXIgZGlkbid0IHByb3ZpZGUgYSBjZXJ0aWZpY2F0ZSIs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb250aW51ZT8gKFkvTikiLCAz LCBOVUxMLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb2spIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdG5fZGVidWcoIltUTFMgLSBGQUlMRURdIik7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHByaW50ZigiW1RMUyAtIEZBSUxFRF1cclxuIik7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgImNrX3RuX3Rsc19uZWdvdGlhdGUiLCJbVExTIC0gRkFJTEVEXSIsMCk7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChz c2xfY2hlY2tfc2VydmVyX25hbWUodGxzX2h0dHBfY29uLCBob3N0bmFtZSkpIHsKLSAgICAgICAg ICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCi0gICAgICAgICAgICAgICAgICAgICAg ICB0bl9kZWJ1ZygiW1RMUyAtIEZBSUxFRF0iKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBp ZiAoIHZlcmJvc2l0eSApCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIltUTFMgLSBG QUlMRURdXHJcbiIpOwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgImNrX3RuX3Rsc19uZWdvdGlhdGUiLCJbVExTIC0gRkFJTEVEXSIs MCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHByaW50ZigiW1RMUyAtIE9LXVxyXG4iKTsKLSAg ICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQotICAgICAgICAgICAgICAgIHRuX2RlYnVn KCJbVExTIC0gT0tdIik7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja19zc2xfb3V0Z29pbmci LCJbVExTIC0gT0tdIiwwKTsKLSAgICAgICAgICAgIHNzbF9kaXNwbGF5X2Nvbm5lY3RfZGV0YWls cyh0bHNfaHR0cF9jb24sMCx2ZXJib3NpdHkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVy bigwKTsgIC8qIHN1Y2Nlc3MgKi8KLX0KLSNlbmRpZiAvKiBOT0hUVFAgKi8KLWludAotY2tfc3Ns X3JlbmVnb3RpYXRlX2NpcGhlcnMoKQotewotCi0gICAgaWYgKCAhY2tfc3NsZWF5X2lzX2luc3Rh bGxlZCgpICkKLSAgICAgICAgcmV0dXJuKDApOwotCi0gICAgaWYgKCAhc3N0ZWxuZXQgKQotICAg ICAgICByZXR1cm4oMCk7Ci0KLSAgICBpZiAoIHNzbF9hY3RpdmVfZmxhZyApCi0gICAgICAgIHJl dHVybiBTU0xfcmVuZWdvdGlhdGUoc3NsX2Nvbik7Ci0gICAgZWxzZSBpZiAoIHRsc19hY3RpdmVf ZmxhZyApCi0gICAgICAgIHJldHVybiBTU0xfcmVuZWdvdGlhdGUodGxzX2Nvbik7Ci0gICAgcmV0 dXJuKDApOwotfQotCi0jaWZkZWYgTlQKLWludCAKLWNrX1g1MDlfc2F2ZV9jZXJ0X3RvX3VzZXJf c3RvcmUoWDUwOSAqY2VydCkKLXsKLSNpZmRlZiBYNTA5VjNfRVhUX0RVTVBfVU5LTk9XTgotICAg IGNoYXIgcGF0aFtDS01BWFBBVEhdOwotICAgIGNoYXIgaGFzaFsxNl07Ci0gICAgY2hhciAqIEdl dEFwcERhdGEoaW50KTsKLSAgICBCSU8gKiBvdXQ9TlVMTDsKLQotICAgIGlmICggY2VydCA9PSBO VUxMICkKLSAgICAgICAgcmV0dXJuKDApOwotCi0gICAgc3ByaW50ZihoYXNoLCIlMDhseCIsWDUw OV9zdWJqZWN0X25hbWVfaGFzaChjZXJ0KSk7Ci0gICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgs R2V0QXBwRGF0YSgwKSwia2VybWl0IDk1L2NlcnRzLyIsCi0gICAgICAgICAgICAgaGFzaCwiLjAi KTsKLQotICAgIAotICAgIG91dD1CSU9fbmV3KEJJT19zX2ZpbGUoKSk7Ci0gICAgaWYgKG91dCA9 PSBOVUxMKQotICAgIHsKLSAgICAgICAgRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKLSAgICAg ICAgcmV0dXJuKDApOwotICAgIH0KLSAgICBpZiAoQklPX3dyaXRlX2ZpbGVuYW1lKG91dCxwYXRo KSA8PSAwKSB7Ci0gICAgICAgIHBlcnJvcihwYXRoKTsKLSAgICAgICAgcmV0dXJuKDApOwotICAg IH0KLQotICAgIFg1MDlfcHJpbnRfZXgob3V0LCBjZXJ0LCBYTl9GTEFHX1NFUF9NVUxUSUxJTkUs IFg1MDlWM19FWFRfRFVNUF9VTktOT1dOKTsKLSAgICBpZiAoIVBFTV93cml0ZV9iaW9fWDUwOShv dXQsY2VydCkpIHsKLSAgICAgICAgQklPX3ByaW50ZihiaW9fZXJyLCJ1bmFibGUgdG8gd3JpdGUg Y2VydGlmaWNhdGVcbiIpOwotICAgICAgICBFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOwotICAg ICAgICBCSU9fZnJlZV9hbGwob3V0KTsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSAgICBC SU9fZnJlZV9hbGwob3V0KTsKLSAgICByZXR1cm4oMSk7Ci0jZWxzZSAvKiBYNTA5VjNfRVhUX0RV TVBfVU5LTk9XTiAqLwotICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBYNTA5VjNfRVhUX0RVTVBf VU5LTk9XTiAqLwotfQotI2VuZGlmIC8qIE5UICovCi0KLSNpZm5kZWYgT1MyCi0vKiBUaGUgZm9s bG93aW5nIGZ1bmN0aW9uIHNob3VsZCBiZSByZXBsYWNlZCBieSBpbnN0aXR1dGlvbiBzcGVjaWZp YyAqLwotLyogY29kZSB0aGF0IHdpbGwgY29udmVydCBhbiBYNTA5IGNlcnQgc3RydWN0dXJlIHRv IGEgdXNlcmlkIGZvciB0aGUgKi8KLS8qIHB1cnBvc2VzIG9mIGNsaWVudCB0byBob3N0IGxvZ2lu LiAgVGhlIGV4YW1wbGUgY29kZSBpbmNsdWRlZCAgICAgICovCi0vKiBzaW1wbHkgcmV0dXJucyB0 aGUgVUlEIGZpZWxkIG9mIHRoZSBTdWJqZWN0IGlmIGl0IGV4aXN0cy4gICAgICAgICAqLwotCi0v KiBYNTA5X3RvX3VzZXIoKSByZXR1cm5zIDAgaWYgdmFsaWQgdXNlcmlkIGluICd1c2VyaWQnLCBl bHNlIC0xICovCi1pbnQKLVg1MDlfdG9fdXNlcihYNTA5ICpwZWVyX2NlcnQsIGNoYXIgKnVzZXJp ZCwgaW50IGxlbikKLXsKLSNpZmRlZiBYNTA5X1VJRF9UT19VU0VSCi0gICAgLyogQkVHSU4gRVhB TVBMRSAqLwotICAgIGludCBlcnI7Ci0KLSAgICBpZiAoIShwZWVyX2NlcnQgJiYgdXNlcmlkKSB8 fCBsZW4gPD0gMCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgdXNlcmlkWzBdID0gJ1wwJzsK LSAgICBkZWJ1ZyhGMTEwLCJYNTA5X3RvX3VzZXIoKSBzdWJqZWN0IiwKLSAgICAgICAgICAgWDUw OV9OQU1FX29uZWxpbmUoWDUwOV9nZXRfc3ViamVjdF9uYW1lKHBlZXJfY2VydCksTlVMTCwwKSww KTsKLQotICAgIC8qIHVzZXJpZCBpcyBpbiBjZXJ0IHN1YmplY3QgL1VJRCAqLwotICAgIGVyciA9 IFg1MDlfTkFNRV9nZXRfdGV4dF9ieV9OSUQoWDUwOV9nZXRfc3ViamVjdF9uYW1lKHBlZXJfY2Vy dCksCi0jaWZuZGVmIE5JRF94NTAwVW5pcXVlSWRlbnRpZmllcgotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE5JRF91bmlxdWVJZGVudGlmaWVyLAotI2Vsc2UKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSURfeDUwMFVuaXF1ZUlkZW50aWZpZXIsCi0j ZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyaWQsIGxlbik7 Ci0KLSAgICBkZWJ1ZyhGMTExLCJYNTA5X3RvX3VzZXIoKSB1c2VyaWQiLHVzZXJpZCxlcnIpOwot ICAgIGlmIChlcnIgPiAwKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8qIEVORCBFWEFNUExF ICovCi0jZWxzZSAvKiBYNTA5X1VJRF9UT19VU0VSICovCi0jaWZkZWYgWDUwOV9TVUJKRUNUX0FM VF9OQU1FX1RPX1VTRVIKLSAgICAvKiBCRUdJTiBFWEFNUExFICovCi0gICAgaW50IGk7Ci0gICAg WDUwOV9FWFRFTlNJT04gKmV4dCA9IE5VTEw7Ci0gICAgU1RBQ0tfT0YoR0VORVJBTF9OQU1FKSAq aWFsdCA9IE5VTEw7Ci0gICAgR0VORVJBTF9OQU1FICpnZW4gPSBOVUxMOwotICAgIGNoYXIgZW1h aWxbMjU2XTsKLQotICAgIGlmICghKHBlZXJfY2VydCAmJiB1c2VyaWQpIHx8IGxlbiA8PSAwKQot ICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICB1c2VyaWRbMF0gPSAnXDAnOwotICAgIGVtYWlsWzBd ID0gJ1wwJzsKLSAgICBkZWJ1ZyhGMTEwLCJYNTA5X3RvX3VzZXIoKSBzdWJqZWN0IiwKLSAgICAg ICAgICAgWDUwOV9OQU1FX29uZWxpbmUoWDUwOV9nZXRfc3ViamVjdF9uYW1lKHBlZXJfY2VydCks TlVMTCwwKSwwKTsKLQotICAgIGlmICgoaSA9IFg1MDlfZ2V0X2V4dF9ieV9OSUQocGVlcl9jZXJ0 LCBOSURfc3ViamVjdF9hbHRfbmFtZSwgLTEpKTwwKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAg aWYgKCEoZXh0ID0gWDUwOV9nZXRfZXh0KHBlZXJfY2VydCwgaSkpKQotICAgICAgICByZXR1cm4g LTE7Ci0gICAgWDUwOVYzX2FkZF9zdGFuZGFyZF9leHRlbnNpb25zKCk7Ci0gICAgaWYgKCEoaWFs dCA9IFg1MDlWM19FWFRfZDJpKGV4dCkpKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgZm9yIChp ID0gMDsgaSA8IHNrX0dFTkVSQUxfTkFNRV9udW0oaWFsdCk7IGkrKykgewotICAgICAgICBnZW4g PSBza19HRU5FUkFMX05BTUVfdmFsdWUoaWFsdCwgaSk7Ci0gICAgICAgIGlmIChnZW4tPnR5cGUg PT0gR0VOX0ROUykgewotICAgICAgICAgICAgaWYgKCFnZW4tPmQuaWE1IHx8ICFnZW4tPmQuaWE1 LT5sZW5ndGgpCi0JICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoc3RybGVuKGdlbi0+ZC5p YTUtPmRhdGEpICE9IGdlbi0+ZC5pYTUtPmxlbmd0aCkgewotICAgICAgICAgICAgICAgIC8qIEln bm9yaW5nIElBNVN0cmluZyBjb250YWluaW5nIG51bGwgY2hhcmFjdGVyICovCi0gICAgICAgICAg ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIGdlbi0+ZC5p YTUtPmxlbmd0aCArIDEgPiBzaXplb2YoZW1haWwpICkgewotICAgICAgICAgICAgICAgIGdvdG8g Y2xlYW51cDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1lbWNweShlbWFpbCwgZ2VuLT5k LmlhNS0+ZGF0YSwgZ2VuLT5kLmlhNS0+bGVuZ3RoKTsKLSAgICAgICAgICAgIGVtYWlsW2dlbi0+ ZC5pYTUtPmxlbmd0aF0gPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9 Ci0gIGNsZWFudXA6Ci0gICAgWDUwOVYzX0VYVF9jbGVhbnVwKCk7Ci0gICAgaWYgKGlhbHQpCi0g ICAgICAgIHNrX0dFTkVSQUxfTkFNRV9mcmVlKGlhbHQpOwotCi0gICAgZGVidWcoRjExMCwiWDUw OV90b191c2VyKCkgZW1haWwiLGVtYWlsLDApOwotCi0gICAgaWYgKCBlbWFpbFswXSApIHsKLSAg ICAgICAgY2hhciAqIGRvbWFpbiA9IE5VTEw7Ci0KLSAgICAgICAgLyogRmluZCBkb21haW4gKi8K LSAgICAgICAgZm9yICggaT0wIDsgZW1haWxbaV0gOyBpKysgKSB7Ci0gICAgICAgICAgICBpZiAo IGVtYWlsW2ldID09ICdAJyApIHsKLSAgICAgICAgICAgICAgICBlbWFpbFtpXSA9ICdcMCc7Ci0g ICAgICAgICAgICAgICAgZG9tYWluID0gJmVtYWlsW2krMV07Ci0gICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIGRvbWFpbiApIHsK LSAgICAgICAgICAgIC8qIFhYWCAtIFB1dCBjb2RlIHRvIFZlcmlmeSBkb21haW4gaGVyZSAqLwot Ci0gICAgICAgICAgICBpZiAoIC8qIGRvbWFpbiBpcyBva2F5ICovIDEgKQotICAgICAgICAgICAg ICAgIGNrc3RybmNweSh1c2VyaWQsZW1haWwsbGVuKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg IHJldHVybih1c2VyaWRbMF0gPyAwIDogLTEpOwotICAgIC8qIEVORCBFWEFNUExFICovCi0jZW5k aWYgLyogWDUwOV9TVUJKRUNUX0FMVF9OQU1FX1RPX1VTRVIgKi8KLSNlbmRpZiAvKiBYNTA5X1VJ RF9UT19VU0VSICovCi0gICAgcmV0dXJuIC0xOwotfQotCi0vKiBUaGUgZm9sbG93aW5nIGZ1bmN0 aW9uIHNob3VsZCBiZSByZXBsYWNlZCBieSBpbnN0aXR1dGlvbiBzcGVjaWZpYyAqLwotLyogY29k ZSB0aGF0IHdpbGwgZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRoZSBjb21iaW5hdGlvbiBvZiB0 aGUgICAgKi8KLS8qIHByb3ZpZGVkIFg1MDkgY2VydGlmaWNhdGUgYW5kIHVzZXJuYW1lIGlzIHZh bGlkIGZvciBhdXRvbWF0aWMgICAgICovCi0vKiBsb2dpbi4gICBXaGVyZWFzIFg1MDlfdG9fdXNl cigpIGlzIHVzZWQgdG8gcHJvdmlkZSBhdXRoZW50aWNhdGlvbiAqLwotLyogb2YgdGhlIHVzZXIs IHRoZSBYNTA5X3VzZXJvaygpIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcHJvdmlkZSAgICAgICAgKi8K LS8qIGF1dGhvcml6YXRpb24uICBUaGUgY2VydGlmaWNhdGUgcGFzc2VkIGludG8gWDUwOV91c2Vy b2soKSBkb2VzICAgICovCi0vKiBuZWVkIHRvIG1hcCB0byBhIHVzZXJpZDsgbm9yIHdvdWxkIHRo ZSB1c2VyaWQgaXQgd291bGQgbWFwIHRvICAgICAqLwotLyogbmVlZCB0byBtYXRjaCB0aGUgdXNl cmlkIHByb3ZpZGVkIHRvIHRoZSBmdW5jdGlvbi4gIFRoZXJlIGFyZSAgICAgKi8KLS8qIG51bWVy b3VzIGNpcmN1bXN0YW5jZXMgaW4gd2hpY2ggaXQgaXMgYmVuZWZpY2lhbCB0byBoYXZlIHRoZSBh YmlsaXR5ICovCi0vKiBmb3IgbXVsdGlwbGUgdXNlcnMgdG8gZ2FpbiBhY2Nlc3MgdG8gYSBjb21t b24gYWNjb3VudCBzdWNoIGFzICAgICAqLwotLyogJ3Jvb3QnIG9uIFVuaXg7IG9yIGEgY2xhc3Mg YWNjb3VudCBvbiBhIHdlYiBzZXJ2ZXIuICBJbiBVbml4IHdlICAgKi8KLS8qIGltcGxlbWVudCB0 aGlzIGNhcGFiaWxpdHkgd2l0aCB0aGUgfnVzZXJpZC8udGxzbG9naW4gZmlsZSB3aGljaCAgICov Ci0vKiBhIGxpc3Qgb2YgWDUwOSBjZXJ0aWZpY2F0ZXMgd2hpY2ggbWF5IGJlIHVzZWQgdG8gYWNj ZXNzIHRoZSAgICAgICAqLwotLyogYWNjb3VudCAndXNlcmlkJy4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotLyogWDUwOV90b191c2VyKCkgcmV0 dXJucyAwIGlmIGFjY2VzcyBpcyBkZW5pZWQ7IDEgaXMgYWNjZXNzIGlzIHBlcm1pdHRlZCAqLwot aW50Ci1YNTA5X3VzZXJvayhYNTA5ICogcGVlcl9jZXJ0LCBjb25zdCBjaGFyICogdXNlcmlkKQot ewotI2lmbmRlZiBWTVMKLSAgICAvKiBjaGVjayBpZiBjbGllbnRzIGNlcnQgaXMgaW4gInVzZXIi J3Mgfi8udGxzbG9naW4gZmlsZSAqLwotICAgIGNoYXIgYnVmWzUxMl07Ci0gICAgaW50IHIgPSAw OwotICAgIEZJTEUgKmZwOwotICAgIHN0cnVjdCBwYXNzd2QgKnB3ZDsKLSAgICBYNTA5ICpmaWxl X2NlcnQ7Ci0KLSAgICBpZiAoIHBlZXJfY2VydCA9PSBOVUxMICkKLSAgICAgICAgcmV0dXJuKDAp OwotCi0gICAgaWYgKCEocHdkID0gZ2V0cHduYW0odXNlcmlkKSkpCi0gICAgICAgcmV0dXJuIDA7 Ci0gICAgaWYgKHN0cmxlbihwd2QtPnB3X2RpcikgPiA1MDApCi0gICAgICAgcmV0dXJuKDApOwot ICAgIHNwcmludGYoYnVmLCAiJXMvLnRsc2xvZ2luIiwgcHdkLT5wd19kaXIpOwotCi0gICAgaWYg KCEoZnAgPSBmb3BlbihidWYsICJyIikpKQotICAgICAgICByZXR1cm4gMDsKLSAgICB3aGlsZSAo IXIgJiYgKGZpbGVfY2VydCA9IFBFTV9yZWFkX1g1MDkoZnAsIE5VTEwsIE5VTEwsIE5VTEwpKSkg ewotICAgICAgICBpZiAoIUFTTjFfU1RSSU5HX2NtcChwZWVyX2NlcnQtPnNpZ25hdHVyZSwgZmls ZV9jZXJ0LT5zaWduYXR1cmUpKQotICAgICAgICAgICAgciA9IDE7Ci0gICAgICAgIFg1MDlfZnJl ZShmaWxlX2NlcnQpOwotICAgIH0KLSAgICBmY2xvc2UoZnApOwotICAgIHJldHVybihyKTsKLSNl bHNlIC8qIFZNUyAqLwotICAgIC8qIE5lZWQgdG8gaW1wbGVtZW50IGFuIGFwcHJvcHJpYXRlIGZ1 bmN0aW9uIGZvciBWTVMgKi8KLSAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogVk1TICovCi19Ci0j ZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogQ0tfU1NMICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1p dC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja19zc2wuaCBiL2NrZXJtaXQtOS4wLjMw Mi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tfc3NsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDk3YjY1NDQuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJt aXQtOS4wLjMwMi9ja19zc2wuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi0vKgot ICBDIEsgXyBTIFMgTCAuIEggLS0gIE9wZW5TU0wgSW50ZXJmYWNlIEhlYWRlciBmb3IgQy1LZXJt aXQKLQotICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMDUsCi0gICAgVHJ1c3RlZXMgb2YgQ29sdW1i aWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KLSAgICBBbGwgcmlnaHRzIHJl c2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQotICAgIGNv cHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBl cm1pc3Npb25zLgotCi0gICAgQXV0aG9yOiAgSmVmZnJleSBFIEFsdG1hbiAoamFsdG1hbkBzZWN1 cmUtZW5kcG9pbnRzLmNvbSkKLSAgICAgICAgICAgICAgIFNlY3VyZSBFbmRwb2ludHMgSW5jLiwg TmV3IFlvcmsgQ2l0eQotKi8KLQotI2lmZGVmIENLX1NTTAotI2lmbmRlZiBDS19BTlNJQwotI2Rl ZmluZSBOT1BST1RPCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLQotI2lmZGVmIENPTU1FTlQgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBmb3IgQy1LZXJtaXQgNy4xICovCi0jaWZkZWYg S1JCNQotI2lmbmRlZiBOT1NTTEs1Ci0jaWZuZGVmIFNTTF9LUkI1Ci0jZGVmaW5lIFNTTF9LUkI1 Ci0jZW5kaWYgLyogU1NMX0tSQjUgKi8KLSNlbmRpZiAvKiBOT1NTTEs1ICovCi0jZW5kaWYgLyog S1JCNSAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2lmZGVmIE9TMgotI2lmbmRlZiBaTElC Ci0jZGVmaW5lIFpMSUIKLSNlbmRpZiAvKiBaTElCICovCi0jZW5kaWYgLyogT1MyICovCi0KLSNp ZmRlZiBaTElCCi0jaW5jbHVkZSA8b3BlbnNzbC9jb21wLmg+Ci0jZW5kaWYgLyogWkxJQiAqLwot LyogV2UgcGxhY2UgdGhlIGZvbGxvd2luZyB0byBhdm9pZCBsb2FkaW5nIG9wZW5zc2wvbWRjMi5o IHNpbmNlIGl0IAotICogcmVsaWVzIG9uIHRoZSBPcGVuU1NMIGRlcy5oLiAgU2luY2Ugd2UgZG8g bm90IG5lZWQgdGhlIE1EQzIgCi0gKiBkZWZpbml0aW9ucyB0aGVyZSBpcyBubyByZWFzb24gdG8g aGF2ZSBpdCBpbmNsdWRlZCBieSBvcGVuc3NsL2V2cC5oCi0gKi8KLSNkZWZpbmUgT1BFTlNTTF9O T19NREMyCi0jaWZkZWYgT1BFTlNTTF8xMDAKLSNkZWZpbmUgT1BFTlNTTF8wOTgKLSNlbmRpZgkv KiBPUEVOU1NMXzEwMCAqLwotI2lmZGVmIE9QRU5TU0xfMDk4Ci0jZGVmaW5lIE9QRU5TU0xfMDk3 Ci0jZW5kaWYgLyogT1BFTlNTTF8wOTggKi8KLSNpZmRlZiBDS19ERVMKLSNpbmNsdWRlIDxvcGVu c3NsL2Rlcy5oPgotI2VuZGlmCS8qIENLX0RFUyAqLwotI2luY2x1ZGUgPG9wZW5zc2wvc3NsLmg+ Ci0jaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KLSNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4K LSNpbmNsdWRlIDxvcGVuc3NsL3g1MDlfdmZ5Lmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K LSNpbmNsdWRlIDxvcGVuc3NsL3BlbS5oPgotI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSNpbmNs dWRlIDxvcGVuc3NsL2Jsb3dmaXNoLmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgotI2luY2x1 ZGUgPG9wZW5zc2wvcmM0Lmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9jYXN0Lmg+Ci0jaW5jbHVkZSA8 b3BlbnNzbC9kc2EuaD4KLSNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotI2luY2x1ZGUgPG9wZW5z c2wvbWQ1Lmg+Ci0jaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KLSNpbmNsdWRlIDxvcGVuc3NsL2V2 cC5oPgotI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotI2lmZGVmIFNTTF9LUkI1Ci0jaW5jbHVk ZSA8b3BlbnNzbC9rc3NsLmg+Ci0jZW5kaWYgLyogU1NMX0tSQjUgKi8KLQotZXh0ZXJuIEJJTyAq YmlvX2VycjsKLWV4dGVybiBTU0wgKnNzbF9jb247Ci1leHRlcm4gU1NMX0NUWCAqc3NsX2N0eDsK LWV4dGVybiBpbnQgc3NsX2RlYnVnX2ZsYWc7Ci1leHRlcm4gaW50IHNzbF9vbmx5X2ZsYWc7Ci1l eHRlcm4gaW50IHNzbF9hY3RpdmVfZmxhZzsKLWV4dGVybiBpbnQgc3NsX3ZlcmlmeV9mbGFnOwot ZXh0ZXJuIGludCBzc2xfdmVyYm9zZV9mbGFnOwotZXh0ZXJuIGludCBzc2xfY2VydHNva19mbGFn OwotZXh0ZXJuIGludCBzc2xfZHVtbXlfZmxhZzsKLWV4dGVybiBpbnQgc3NsX3ZlcmlmeV9kZXB0 aDsKLQotZXh0ZXJuIGNoYXIgKnNzbF9yc2FfY2VydF9maWxlOwotZXh0ZXJuIGNoYXIgKnNzbF9y c2FfY2VydF9jaGFpbl9maWxlOwotZXh0ZXJuIGNoYXIgKnNzbF9yc2Ffa2V5X2ZpbGU7Ci1leHRl cm4gY2hhciAqc3NsX2RzYV9jZXJ0X2ZpbGU7Ci1leHRlcm4gY2hhciAqc3NsX2RzYV9jZXJ0X2No YWluX2ZpbGU7Ci1leHRlcm4gY2hhciAqc3NsX2RoX2tleV9maWxlOwotZXh0ZXJuIGNoYXIgKnNz bF9jaXBoZXJfbGlzdDsKLWV4dGVybiBjaGFyICpzc2xfY3JsX2ZpbGU7Ci1leHRlcm4gY2hhciAq c3NsX2NybF9kaXI7Ci1leHRlcm4gY2hhciAqc3NsX3ZlcmlmeV9maWxlOwotZXh0ZXJuIGNoYXIg KnNzbF92ZXJpZnlfZGlyOwotZXh0ZXJuIGNoYXIgKnNzbF9kaF9wYXJhbV9maWxlOwotZXh0ZXJu IGNoYXIgKnNzbF9ybmRfZmlsZTsKLQotZXh0ZXJuIFNTTF9DVFggKnRsc19jdHg7Ci1leHRlcm4g U1NMICp0bHNfY29uOwotZXh0ZXJuIGludCB0bHNfb25seV9mbGFnOwotZXh0ZXJuIGludCB0bHNf YWN0aXZlX2ZsYWc7Ci1leHRlcm4gaW50IHg1MDlfY2VydF92YWxpZDsKLWV4dGVybiBYNTA5X1NU T1JFICpjcmxfc3RvcmU7Ci0KLWV4dGVybiBpbnQgc3NsX3Jhd19mbGFnOwotZXh0ZXJuIGludCB0 bHNfcmF3X2ZsYWc7Ci0KLSNpZm5kZWYgTk9IVFRQCi1leHRlcm4gU1NMX0NUWCAqdGxzX2h0dHBf Y3R4OwotZXh0ZXJuIFNTTCAqdGxzX2h0dHBfY29uOwotZXh0ZXJuIGludCB0bHNfaHR0cF9hY3Rp dmVfZmxhZzsKLSNlbmRpZiAvKiBOT0hUVFAgKi8KLQotZXh0ZXJuIGludCBzc2xfaW5pdGlhbGl6 ZWQ7Ci0KLV9QUk9UT1RZUChWT0lEIHNzbF9vbmNlX2luaXQsKHZvaWQpKTsKLV9QUk9UT1RZUChp bnQgc3NsX3RuX2luaXQsKGludCkpOwotX1BST1RPVFlQKGludCBzc2xfaHR0cF9pbml0LChjaGFy ICopKTsKLV9QUk9UT1RZUChpbnQgY2tfc3NsX2h0dHBfY2xpZW50LChpbnQsY2hhciAqKSk7Ci1f UFJPVE9UWVAoaW50IHNzbF9kaXNwbGF5X2Nvbm5lY3RfZGV0YWlscywoU1NMICosaW50LGludCkp OwotX1BST1RPVFlQKGludCBzc2xfc2VydmVyX3ZlcmlmeV9jYWxsYmFjaywoaW50LCBYNTA5X1NU T1JFX0NUWCAqKSk7Ci1fUFJPVE9UWVAoaW50IHNzbF9jbGllbnRfdmVyaWZ5X2NhbGxiYWNrLChp bnQsIFg1MDlfU1RPUkVfQ1RYICopKTsKLV9QUk9UT1RZUChpbnQgc3NsX3JlcGx5LChpbnQsIHVu c2lnbmVkIGNoYXIgKiwgaW50KSk7Ci1fUFJPVE9UWVAoaW50IHNzbF9pcywodW5zaWduZWQgY2hh ciAqLCBpbnQpKTsKLV9QUk9UT1RZUChpbnQgY2tfc3NsX2luY29taW5nLChpbnQpKTsKLV9QUk9U T1RZUChpbnQgY2tfc3NsX291dGdvaW5nLChpbnQpKTsKLV9QUk9UT1RZUChpbnQgdGxzX2lzX3Vz ZXJfdmFsaWQsKFNTTCAqLCBjb25zdCBjaGFyICopKTsKLV9QUk9UT1RZUChjaGFyICogc3NsX2dl dF9kbnNOYW1lLChTU0wgKikpOwotX1BST1RPVFlQKGNoYXIgKiBzc2xfZ2V0X2NvbW1vbk5hbWUs KFNTTCAqKSk7Ci1fUFJPVE9UWVAoY2hhciAqIHNzbF9nZXRfaXNzdWVyX25hbWUsKFNTTCAqKSk7 Ci1fUFJPVE9UWVAoY2hhciAqIHNzbF9nZXRfc3ViamVjdF9uYW1lLChTU0wgKikpOwotX1BST1RP VFlQKGludCBzc2xfZ2V0X2NsaWVudF9maW5pc2hlZCwoY2hhciAqLCBpbnQpKTsKLV9QUk9UT1RZ UChpbnQgc3NsX2dldF9zZXJ2ZXJfZmluaXNoZWQsKGNoYXIgKiwgaW50KSk7Ci1fUFJPVE9UWVAo aW50IHNzbF9wYXNzd2RfY2FsbGJhY2ssKGNoYXIgKiwgaW50LCBpbnQsIFZPSUQgKikpOwotX1BS T1RPVFlQKFZPSUQgc3NsX2NsaWVudF9pbmZvX2NhbGxiYWNrLChjb25zdCBTU0wgKixpbnQsIGlu dCkpOwotX1BST1RPVFlQKGludCBzc2xfYW5vbnltb3VzX2NpcGhlciwoU1NMICogc3NsKSk7Ci1f UFJPVE9UWVAoaW50IHRsc19sb2FkX2NlcnRzLChTU0xfQ1RYICogY3R4LCBTU0wgKiBjb24sIGlu dCBzZXJ2ZXIpKTsKLV9QUk9UT1RZUChpbnQgc3NsX3ZlcmlmeV9jcmwsKGludCwgWDUwOV9TVE9S RV9DVFggKikpOwotX1BST1RPVFlQKGludCB0bHNfaXNfa3JiNSwoaW50KSk7Ci1fUFJPVE9UWVAo aW50IFg1MDlfdXNlcm9rLChYNTA5ICosY29uc3QgY2hhciAqKSk7Ci1fUFJPVE9UWVAoaW50IGNr X1g1MDlfc2F2ZV9jZXJ0X3RvX3VzZXJfc3RvcmUsKFg1MDkgKikpOwotLyogU01TIDIwMDcvMDIv MTUgKi8KLV9QUk9UT1RZUChpbnQgc3NsX2NoZWNrX3NlcnZlcl9uYW1lLChTU0wgKiBzc2wsIGNo YXIgKiBob3N0bmFtZSkpOwotI2lmZGVmIE9TMgotI2luY2x1ZGUgImNrb3NzbGMuaCIKLSNpbmNs dWRlICJja29zc2wuaCIKLSNlbmRpZiAvKiBPUzIgKi8KLQotI2RlZmluZSBTU0xfQ0xJRU5UIDAK LSNkZWZpbmUgU1NMX1NFUlZFUiAxCi0jZGVmaW5lIFNTTF9IVFRQICAgMgotCi0jZGVmaW5lIFNT TF9FUlJfQkZTWiA0MDk2Ci0KLSNpZmRlZiBTU0xfS1JCNQotI2RlZmluZSBERUZBVUxUX0NJUEhF Ul9MSVNUICJISUdIOk1FRElVTTpMT1c6K0tSQjU6K0FESDorRVhQIgotI2Vsc2UKLSNkZWZpbmUg REVGQVVMVF9DSVBIRVJfTElTVCAiSElHSDpNRURJVU06TE9XOitBREg6K0VYUCIKLSNlbmRpZiAv KiBTU0xfS1JCNSAqLwotI2VuZGlmIC8qIENLX1NTTCAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQt OS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2thYWFhLnR4dCBiL2NrZXJtaXQtOS4wLjMw Mi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2thYWFhLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMzM1ZWM3ZC4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tl cm1pdC05LjAuMzAyL2NrYWFhYS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzODAgKzAsMCBAQAot Y2thYWFhLnR4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSnVseSAyMDExCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEMtS0VSTUlU IFZFUlNJT04gOS4wLjMwMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1ZFUlZJRVcg T0YgRklMRVMKLQotICAgICAgICAgICAgICAgQ29tbXVuaWNhdGlvbnMgc29mdHdhcmUgZm9yIFVO SVggYW5kIChPcGVuKVZNUy4KLQotICAgICAgICAgICAgICAgICAgICAgICBBbmQgaW4gZm9ybWVy IHZlcnNpb25zIGFsc28gZm9yOgotICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJhdHVzIFZP UywgQU9TL1ZTLCBRTlgsCi0gICAgICAgICAgICAgUGxhbiA5LCBPUy05LCBBcG9sbG8gQWVnaXMs IGFuZCB0aGUgQ29tbW9kb3JlIEFtaWdhLgotICAgICAgICAgICAgICAgICAgICAgIFRoZSBBcHBs ZSBNYWNpbnRvc2gsIHRoZSBBdGFyaSBTVC4KLQotICAgICAgICAgICAgICAgICAgVGhlIEtlcm1p dCBQcm9qZWN0IC0gQ29sdW1iaWEgVW5pdmVyc2l0eQotCi0gICAgICAgICAgICAgIGh0dHA6Ly9r ZXJtaXQuY29sdW1iaWEuZWR1LyAtIGtlcm1pdEBjb2x1bWJpYS5lZHUKLQotCi0gIENvcHlyaWdo dCAoQykgMTk4NSwgMjAxMSwKLSAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGlu IHRoZSBDaXR5IG9mIE5ldyBZb3JrLgotICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhl IEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCi0gICAgY29weXJpZ2h0IHRleHQgaW4g dGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCi0gICAg QlJJRUZMWTogQy1LZXJtaXQgOS4wIGhhcyB0aGUgT1BFTiBTT1VSQ0UgMy1jbGF1c2UgTU9ESUZJ RUQgQlNEIExJQ0VOU0UuCi0KLQotRE9DVU1FTlRBVElPTgotCi0gIEMtS2VybWl0IGlzIGRvY3Vt ZW50ZWQgaW4gdGhlIGJvb2sgIlVzaW5nIEMtS2VybWl0IiwgU2Vjb25kIEVkaXRpb24sIGJ5Ci0g IEZyYW5rIGRhIENydXogYW5kIENocmlzdGluZSBNLiBHaWFub25lLCBEaWdpdGFsIFByZXNzLCBJ U0JOIDEtNTU1NTgtMTY0LTEsCi0gIHN1cHBsZW1lbnRlZCBieSBXZWItYmFzZWQgdXBkYXRlcyBm b3IgQy1LZXJtaXQgNy4wLCA4LjAsIGFuZCA5LjAuCi0KLVBMQVRGT1JNUwotICAgICAgICAgICAg ICAgICAgIFNlY3VyaXR5Ci0gICBOYW1lICAgICAgICAgICAgSW5jbHVkZWQgICBMYXN0IFVwZGF0 ZWQKLQotICAgVW5peCAgICAgICAgICAgICAgIFllcyAgICAgOS4wLjMwMCAgMzAgSnVuIDIwMTEK LSAgIChPcGVuKVZNUyAgICAgICAgICBZZXMgICAgIDkuMC4zMDAgIDMwIEp1biAyMDExCi0gICBX aW5kb3dzIChLOTUpICAgICAgWWVzICAgICA4LjAuMjA4ICAxNCBNYXIgMjAwMyAgKEs5NSAyLjEp Ci0gICBPUy8yIChLOTUpICAgICAgICAgWWVzICAgICA4LjAuMjA4ICAxNCBNYXIgMjAwMyAgKEs5 NSAyLjEpCi0gICBERyBBT1MvVlMgICAgICAgICAgTm8gICAgICA3LjAuMTk2ICAgMSBKYW4gMjAw MAotICAgU3RyYXR1cyBWT1MgICAgICAgIE5vICAgICAgNy4wLjE5NiAgIDEgSmFuIDIwMDAKLSAg IEJlbGwgUGxhbiA5ICAgICAgICBObyAgICAgIDcuMC4xOTYgICAxIEphbiAyMDAwCi0gICBNaWNy b3dhcmUgT1MtOSAgICAgTm8gICAgICA3LjAuMTk2ICAgMSBKYW4gMjAwMAotICAgQ29tbW9kb3Jl IEFtaWdhICAgIE5vICAgICAgNy4wLjE5NiAgIDEgSmFuIDIwMDAKLSAgIE1hY2ludG9zaCAgICAg ICAgICBObyAgICAgIDVBKDE5MCkgIDE2IEF1ZyAxOTk0ICAoTWFjIEtlcm1pdCAwLjk5MSkKLSAg IEF0YXJpIFNUICAgICAgICAgICBObyAgICAgIDVBKDE4OSkgIDMwIEp1biAxOTkzCi0KLVFVSUNL IFNUQVJUIEZPUiBGVFAgVVNFUlMKLQotICBJZiB5b3UgaGF2ZSBhIFdlYiBicm93c2VyLCBnbyB0 bzoKLQotICAgIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLQot ICBBbmQgdGFrZSBpdCBmcm9tIHRoZXJlLiAgT3RoZXJ3aXNlLi4uCi0KLSAgVGhlIGRlZmluaXRp dmUgRlRQIHNvdXJjZSBmb3IgS2VybWl0IHNvZnR3YXJlIGlzIGtlcm1pdC5jb2x1bWJpYS5lZHUu Ci0gIEtlcm1pdCBzb2Z0d2FyZSBvYnRhaW5lZCBmcm9tIG90aGVyIEZUUCBzaXRlcyBpcyBub3Qg bmVjZXNzYXJpbHkgY29tcGxldGUKLSAgb3IgdXAgdG8gZGF0ZSwgYW5kIG1heSBoYXZlIGJlZW4g bW9kaWZpZWQuCi0KLUMtS2VybWl0IGZvciBVTklYIGNvbXB1dGVycyB0aGF0IGhhdmUgYSBDIGNv bXBpbGVyIGFuZCAnbWFrZScgcHJvZ3JhbToKLQotICBEaXJlY3Rvcnkga2VybWl0L2FyY2hpdmVz LCBiaW5hcnkgbW9kZSwgZmlsZSBja3UyMTEudGFyLlogb3IgY2t1MjExLnRhci5negotCi0gIFRo aXMgaXMgYSBjb21wcmVzc2VkIHRhciBhcmNoaXZlIG9mIFVOSVggQy1LZXJtaXQgc291cmNlIGNv ZGUsIG1ha2VmaWxlLCBhbmQKLSAgb3RoZXIgZmlsZXMuICBJdCB1bnBhY2tzIGludG8gaXRzIGN1 cnJlbnQgZGlyZWN0b3J5LCBzbyBkb3dubG9hZCBpdCBpbnRvIGEKLSAgZnJlc2ggZGlyZWN0b3J5 LiAgVHJhbnNmZXIgaW4gYmluYXJ5IG1vZGUsIHVuY29tcHJlc3MgKG9yIGd1bnppcCksIHVudGFy ICh0YXIKLSAgeHZmIGNrdTIxMS50YXIpLCBhbmQgdGhlbiBnaXZlIHRoZSBhcHByb3ByaWF0ZSAi bWFrZSIgY29tbWFuZCB0byBidWlsZCBmb3IKLSAgeW91ciBVTklYIHN5c3RlbTsgcmVhZCB0aGUg Y29tbWVudHMgaW4gdGhlIG1ha2VmaWxlIGFuZCBja3VpbnMudHh0IGZvcgotICBmdXJ0aGVyIGlu Zm8uCi0KLUMtS2VybWl0IGZvciBWTVM6Ci0KLSAgSWYgeW91IGhhdmUgVk1TIFVOWklQLCBnZXQg dGhlIGZpbGUga2VybWl0L2FyY2hpdmVzL2NrdjIxMS56aXAgaW4gYmluYXJ5Ci0gIG1vZGUsIHVu emlwIC1hYSwgYW5kIGJ1aWxkIHdpdGggQ0tWS0VSLkNPTSAoQGNrdmtlci5jb20pLiAgUmVhZCB0 aGUgY29tbWVudHMKLSAgYXQgdGhlIHRvcCBvZiBDS1ZLRVIuQ09NIGZvciBkZXRhaWxzLgotCi1P dGhlcnM6ICBJbiB0aGUga2VybWl0L2Ygb3Iga2VybWl0L3Rlc3QgZGlyZWN0b3JpZXMgdW5kZXIg dGhlIGFwcHJvcHJpYXRlCi1wcmVmaXhlcywgZXhwbGFpbmVkIGJlbG93LgotCi0KLUlOU1RBTExB VElPTgotCi1JbnN0YWxsYXRpb24gcHJvY2VkdXJlcyBkZXBlbmQgb24gdGhlIG9wZXJhdGluZyBz eXN0ZW0uICBQbGVhc2UgcmVhZCB0aGUKLUNLP0lOUy5UWFQsIGlmIGFueSwgZmlsZSBmb3IgeW91 ciBvcGVyYXRpbmcgc3lzdGVtICg/PVUgZm9yIFVOSVgsIFYgZm9yIFZNUywKLWV0YykuICBQbGVh c2Ugbm90ZSB0aGUgbmFtaW5nIGFuZCBwbGFjZW1lbnQgZm9yIHRoZSBpbml0aWFsaXphdGlvbiBm aWxlczoKLQotICBDS0VSTUlULklOSQotICAgIC5rZXJtcmMgaW4gdGhlIHVzZXIncyBob21lIGRp cmVjdG9yeSAoVU5JWCkuCi0gICAgQ0tFUk1JVC5JTkkgaW4gdGhlIHVzZXIncyBob21lIGRpcmVj dG9yeSAob3RoZXIgT1MncykuCi0KLQotICBDS0VSTU9ELklOSQotICAgIC5teWtlcm1yYyBpbiB0 aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5IChVTklYKS4KLSAgICBDS0VSTU9ELklOSSBlbHNld2hl cmUuCi0KLSAgRElBTElORyBESVJFQ1RPUklFUwotICAgIERpYWxpbmcgZGlyZWN0b3J5IGZpbGVz IGNhbiBiZSBzeXN0ZW0td2lkZSwgcGVyLWdyb3VwLCBvciBwZXItdXNlciwgb3IKLSAgICBhbnkg Y29tYmluYXRpb24uICBGb3IgZXhhbXBsZSwgdGhlcmUgY2FuIGJlIGEgY29ycG9yYXRlIHdpZGUg ZGlyZWN0b3J5Ci0gICAgc2hhcmVkIGJ5IGFsbCB1c2VycywgYSBzdXBwbGVtZW50YWwgZGlyZWN0 b3J5IGZvciBlYWNoIGRpdmlzaW9uIG9yCi0gICAgZGVwYXJ0bWVudCwgYW5kIGEgcGVyc29uYWwg ZGlyZWN0b3J5IGZvciBlYWNoIHVzZXIuICBTaW1wbHkgYmUgc3VyZSB0aGUKLSAgICBkaWFsaW5n IGRpcmVjdG9yeSBmaWxlcyBhcmUgaWRlbnRpZmllZCBhIFNFVCBESUFMIERJUkVDVE9SWSBjb21t YW5kIGluCi0gICAgdGhlIHVzZXIncyAob3IgdGhlIHN5c3RlbS13aWRlKSBDLUtlcm1pdCBpbml0 aWFsaXphdGlvbiBmaWxlLCBvciBpbiB0aGUKLSAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSAobG9n aWNhbCBuYW1lLCBzeW1ib2wpIEtfRElBTF9ESVJFQ1RPUlkuICAoVGhlCi0gICAgc3RhbmRhcmQg aW5pdGlhbGl6YXRpb24gZmlsZSBsb29rcyBieSBkZWZhdWx0IGluIHRoZSB1c2VyJ3MgaG9tZSBv ciBsb2dpbgotICAgIGRpcmVjdG9yeS4pICBXaGVuIGluc3RhbGxpbmcgQy1LZXJtaXQgb24gbXVs dGl1c2VyIHBsYXRmb3JtcyBmcm9tIHdoaWNoCi0gICAgdXNlcnMgd2lsbCBkaWFsIG91dCwgeW91 IGNhbiBhbHNvIHNldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIGFyZWEKLSAgICBjb2RlLCBj b3VudHJ5IGNvZGUsIGFuZCB0aGUgdmFyaW91cyBkaWFsaW5nIHByZWZpeGVzIGFzIGRlc2NyaWJl ZCBvbiBwYWdlCi0gICAgNDc4IG9mICJVc2luZyBDLUtlcm1pdCIgKHNlY29uZCBlZGl0aW9uKSwg c28gdXNlcnMgZG9uJ3QgaGF2ZSB0byB3b3JyeQotICAgIGFib3V0IGRlZmluaW5nIHRoZXNlIGl0 ZW1zIHRoZW1zZWx2ZXMuICAgTmV0d29yayBkaXJlY3RvcmllcyBhbmQgc2VydmljZQotICAgIGRp cmVjdG9yaWVzIGNhbiBhbHNvIGJlIHNldCB1cCBpbiBhIHNpbWlsYXIgbWFubmVyLgotCi0gIERP Q1VNRU5UQVRJT04KLSAgICBJbiBVTklYLCB0aGUgZ2VuZXJhbCBDLUtlcm1pdCBtYW4gcGFnZSAo b3Igb25lIG9mIHRoZSB2ZXJzaW9ucyB0YWlsb3JlZAotICAgIGZvciBhIHNwZWNpZmljIHBsYXRm b3JtLCBsaWtlIEhQLVVYIG9yIFNvbGFyaXMpIHNob3VsZCBiZSBpbnN0YWxsZWQgaW4KLSAgICB0 aGUgYXBwcm9wcmlhdGUgcGxhY2UuICBJbiBWTVMsIHRoZSBWTVMgaGVscCB0b3BpYyAoQ0tWS0VS LkhMUCkgc2hvdWxkCi0gICAgYmUgaW5zdGFsbGVkIGFzIGRlc2NyaWJlZCBpbiBDS1ZJTlMuVFhU LiAgUGxhaW4tdGV4dCBkb2N1bWVudGF0aW9uIHN1Y2gKLSAgICBhcyBDS0VSTUlUMi5UWFQgc2hv dWxkIGJlIHB1dCBpbiB3aGF0ZXZlciBwbGFjZSBwZW9wbGUgYXJlIGFjY3VzdG9tZWQKLSAgICB0 byBsb29raW5nLgotCi1GSUxFUyBBTkQgRklMRSBOQU1JTkcgQ09OVkVOVElPTlMKLQotQy1LZXJt aXQgaXMgYSBmYW1pbHkgb2YgS2VybWl0IHByb2dyYW1zIGZvciBtYW55IGRpZmZlcmVudCBjb21w dXRlciBzeXN0ZW1zLgotVGhlIHByb2dyYW0gc2hhcmVzIGEgY29tbW9uIHNldCBvZiBzeXN0ZW0t aW5kZXBlbmRlbnQgZmlsZSB0cmFuc2ZlciBwcm90b2NvbAotbW9kdWxlcywgd3JpdHRlbiBpbiB0 aGUgQyBsYW5ndWFnZS4gIFN5c3RlbS1kZXBlbmRlbnQgb3BlcmF0aW9ucyBhcmUgY29sbGVjdGVk Ci1pbnRvIHN5c3RlbS1zcGVjaWZpYyBtb2R1bGVzIGZvciBlYWNoIHN5c3RlbS4KLQotQy1LZXJt aXQgZmlsZSBuYW1lcyBhbGwgc3RhcnQgd2l0aCB0aGUgbGV0dGVycyAiQ0siLCBmb2xsb3dlZCBi eSBhIHNpbmdsZQotbGV0dGVyIGluZGljYXRpbmcgdGhlIHN1Ymdyb3VwLiAgV2hlbiByZWZlcnJp bmcgdG8gdGhlc2UgZmlsZXMgaW4gdGhlIFVOSVgsCi1BT1MvVlMsIG9yIFZPUyBlbnZpcm9ubWVu dHMsIHVzZSBsb3dlcmNhc2UgbGV0dGVycywgcmF0aGVyIHRoYW4gdGhlIHVwcGVyY2FzZQotbGV0 dGVycyBzaG93biBoZXJlLiAgU3ViZ3JvdXBzOgotCi0gIF86IFNlY3VyaXR5L0F1dGhlbnRpY2F0 aW9uL0VuY3J5cHRpb24gY29kZSwgcG9zc2libHkgcmVndWxhdGVkIGJ5IGxhdwotICBhOiBHZW5l cmFsIGRlc2NyaXB0aXZlIG1hdGVyaWFsIGFuZCBkb2N1bWVudGF0aW9uCi0gIGI6IEJPTyBmaWxl IGVuY29kZXJzIGFuZCBkZWNvZGVycyAob2Jzb2xldGUpCi0gIGM6IEFsbCBwbGF0Zm9ybXMgd2l0 aCBDIGNvbXBpbGVycwotICBkOiBEYXRhIEdlbmVyYWwgQU9TL1ZTCi0gIGU6IFJlc2VydmVkIGZv ciAiY2tlcm1pdCIgZmlsZXMsIGxpa2UgQ0tFUk1JVC5JTkksIENLRVJNSVQ4MC5UWFQKLSAgZjog KHJlc2VydmVkKQotICBnOiAocmVzZXJ2ZWQpCi0gIGg6IChyZXNlcnZlZCkKLSAgaTogQ29tbW9k b3JlIEFtaWdhIChJbnR1aXRpb24pCi0gIGo6ICh1bnVzZWQpCi0gIGs6ICh1bnVzZWQpCi0gIGw6 IFN0cmF0dXMgVk9TCi0gIG06IE1hY2ludG9zaCB3aXRoIE1hYyBPUwotICBuOiBNaWNyb3NvZnQg V2luZG93cyBOVAotICBvOiBPUy8yIGFuZC9vciBNaWNyb3NvZnQgV2luZG93cyA5NS85OC9NRS9O VC8yMDAwL1hQLy4uLgotICBwOiBCZWxsIExhYnMgUGxhbiA5Ci0gIHE6IChyZXNlcnZlZCkKLSAg cjogREVDIFBEUC0xMSB3aXRoIFJTVFMvRSAocmVzZXJ2ZWQpCi0gIHM6IEF0YXJpIFNUIEdFTURP UyAobGFzdCBzdXBwb3J0ZWQgaW4gdmVyc2lvbiA1QSgxODkpKQotICB0OiBERUMgUERQLTExIHdp dGggUlQtMTEgKHJlc2VydmVkKQotICB1OiBVTklYIG9yIGVudmlyb25tZW50cyB3aXRoIFVOSVgt bGlrZSBDIGxpYnJhcmllcwotICB2OiBWTVMgYW5kIE9wZW5WTVMKLSAgdzogV2FydCAoTGV4LWxp a2UgcHJlcHJvY2Vzc29yLCB1c2VkIHdpdGggYWxsIHN5c3RlbXMpCi0gIHg6IChyZXNlcnZlZCkK LSAgeTogKHJlc2VydmVkKQotICB6OiAocmVzZXJ2ZWQpCi0gIDAtMzogKHJlc2VydmVkKQotICA0 OiBJQk0gQVMvNDAwIChyZXNlcnZlZCBidXQgcHJvYmFibHkgbmV2ZXIgd2lsbCBiZSB1c2VkKQot ICA1LTg6IChyZXNlcnZlZCkKLSAgOTogTWljcm93YXJlIE9TLTkKLQotRXhhbXBsZXM6Ci0KLSAg Y2thYWFhLnR4dCAtIFRoaXMgZmlsZQotICBja3VmaW8uYyAgIC0gRmlsZSBpL28gZm9yIFVOSVgK LSAgY2tzdGlvLmMgICAtIENvbW11bmljYXRpb25zIGkvbyBmb3IgdGhlIEF0YXJpIFNUCi0gIG1h a2VmaWxlICAgLSBtYWtlZmlsZSBmb3IgYnVpbGRpbmcgVU5JWCBDLUtlcm1pdAotICBja3BrZXIu bWsgIC0gbWFrZWZpbGUgZm9yIGJ1aWxkaW5nIFBsYW4gOSBDLUtlcm1pdAotICBja3ZrZXIuY29t IC0gYnVpbGQgcHJvY2VkdXJlIGZvciBWTVMgQy1LZXJtaXQKLQotSU1QT1JUQU5UIEZJTEVTICh1 c2UgbG93ZXJjYXNlIG5hbWVzIG9uIFVOSVgsIFZPUywgb3IgQU9TL1ZTKToKLQotICBja2FhYWEu dHh0ICAtIFRoaXMgZmlsZSAob3ZlcnZpZXcgb2YgdGhlIEMtS2VybWl0IGZpbGVzKS4KLSAgICAg ICAgICAgICAgICBGb3Igc3lzdGVtLXNwZWNpZmljIGRpc3RyaWJ1dGlvbnMsIHRoaXMgd2lsbCBu b3JtYWxseQotICAgICAgICAgICAgICAgIGJlIHJlcGxhY2VkIGJ5IGEgc3lzdGVtLXNwZWNpZmlj IFJFQUQuTUUgZmlsZS4KLQotICBja2VybWl0NzAudHh0IC0gVXBkYXRlczogU3VwcGxlbWVudCB0 byAiVXNpbmcgQy1LZXJtaXQiLCAybmQgRWQsIGZvciA3LjAuCi0gIGNrZXJtaXQ4MC50eHQgLSBV cGRhdGVzOiBTdXBwbGVtZW50IHRvICJVc2luZyBDLUtlcm1pdCIsIDJuZCBFZCwgZm9yIDguMC4K LSAgY2t1dHV0b3IudHh0ICAtIEMtS2VybWl0IFR1dG9yaWFsIGZvciBVbml4IChwbGFpbiB0ZXh0 KQotICBja2Nid3IudHh0ICAtICJCZXdhcmUgZmlsZSIgKGxpbWl0YXRpb25zLCBrbm93biBidWdz LCBoaW50cyksIGdlbmVyYWwuCi0gIGNrZXJtaXQuaW5pIC0gU3RhbmRhcmQgaW5pdGlhbGl6YXRp b24gZmlsZSAocmVuYW1lIHRvIC5rZXJtcmMgaW4gVU5JWCwgT1MtOSkKLSAgY2tlcm1vZC5pbmkg LSBTYW1wbGUgY3VzdG9taXphdGlvbiBmaWxlIChyZW5hbWUgdG8gLm15a2VybXJjIGluIFVOSVgs IE9TLTkpCi0KLVRoZSBmb2xsb3dpbmcgY2FuIGJlIGZvdW5kIGF0IHRoZSBLZXJtaXQgRlRQIHNp dGU6Ci0KLSAgY2tlcm1pdC5rZGQgLSBTYW1wbGUgZGlhbGluZyBkaXJlY3RvcnkgZmlsZSAocmVu YW1lIHRvIC5rZGQgaW4gVU5JWCwgT1MtOSkKLSAgY2tlcm1pdC5rbmQgLSBTYW1wbGUgZGlhbGlu ZyBkaXJlY3RvcnkgZmlsZSAocmVuYW1lIHRvIC5rbmQgaW4gVU5JWCwgT1MtOSkKLSAgY2tlcm1p dC5rc2QgLSBTYW1wbGUgc2VydmljZXMgZGlyZWN0b3J5IGZpbGUgKHJlbmFtZSB0byAua3NkIGlu IFVOSVgsIE9TLTkpCi0gIGNrZWRlbW8ua3NjIC0gRGVtb25zdHJhdGlvbiBtYWNyb3MgZnJvbSAi VXNpbmcgQy1LZXJtaXQiCi0gIGNrZXBhZ2Uua3NjIC0gRGl0dG8KLSAgY2tldnQua3NjICAgLSBE aXR0bwotCi1VTklYLXNwZWNpZmljIGZpbGVzOgotCi0gIGNrdWlucy50eHQgLSBVTklYLXNwZWNp ZmljIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMuCi0gIGNrdWJ3ci50eHQgLSBVTklYLXNwZWNp ZmljIGJld2FyZSBmaWxlLgotICBja3VrZXIubnIgIC0gIm1hbiBwYWdlIiBmb3IgVU5JWC4KLQot Vk1TLXNwZWNpZmljIGZpbGVzOgotCi0gIGNrdmlucy50eHQgLSBWTVMtc3BlY2lmaWMgaW5zdGFs bGF0aW9uIGluc3RydWN0aW9ucy4KLSAgY2t2YndyLnR4dCAtIFZNUy1zcGVjaWZpYyBiZXdhcmUg ZmlsZQotICBja3ZrZXIuaGxwIC0gVk1TIEMtS2VybWl0IEhFTFAgdG9waWMgKG5lZWRzIHVwZGF0 aW5nKS4KLQotREcgQU9TL1ZTLXNwZWNpZmljIGZpbGVzOgotCi0gIGNrZGlucy50eHQgLSBEYXRh IEdlbmVyYWwgQU9TL1ZTIEMtS2VybWl0IGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMKLSAgY2tk YndyLnR4dCAtIEFPUy9WUyAiYmV3YXJlIiBmaWxlCi0gIGNrZCouY2xpICAgLSBQcm9jZWR1cmVz IGZvciBidWlsZGluZyBBT1MvVlMgQy1LZXJtaXQKLQotVGhlIGZvbGxvd2luZyBmaWxlcyBhcmUg b2YgaW50ZXJlc3QgbWFpbmx5IHRvIHByb2dyYW1tZXJzIGFuZCBoaXN0b3JpYW5zCi0oZmluZCB0 aGVtIGF0IHRoZSBLZXJtaXQgZnRwIHNpdGUgaW4gdGhlIGtlcm1pdC9mIGRpcmVjdG9yeSk6Ci0K LSAgY2tja2VyLmFubiAtIFJlbGVhc2UgYW5ub3VuY2VtZW50cy4KLSAgY2tjY2ZnLnR4dCAtIENv bmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gKGZlYXR1cmUgc2VsZWN0aW9uKSwgZ2VuZXJhbC4KLSAg Y2tjcGxtLnR4dCAtIFByb2dyYW0gbG9naWMgbWFudWFsIChmb3IgcHJvZ3JhbW1lcnMpLgotICBj a2MzMDAudHh0IC0gUHJvZ3JhbSB1cGRhdGUgaGlzdG9yeSBmb3IgZWRpdCAyMTItMzAwIChDLUtl cm1pdCA5LjApLgotICBja2MyMTEudHh0IC0gUHJvZ3JhbSB1cGRhdGUgaGlzdG9yeSBmb3IgZWRp dCAyMDEtMjExLgotICBja2MyMDAudHh0IC0gUHJvZ3JhbSB1cGRhdGUgaGlzdG9yeSBmb3IgZWRp dCAxOTgtMjAwIChiaWcpCi0gIGNrYzE5Ny50eHQgLSBQcm9ncmFtIHVwZGF0ZSBoaXN0b3J5IGZv ciBlZGl0IDE5NS0xOTcgKGJpZykKLSAgY2tjMTkwLnR4dCAtIFByb2dyYW0gdXBkYXRlIGhpc3Rv cnkgZm9yIGVkaXRzIDE4OS0xOTAgKGJpZykuCi0gIGNrYzE4OC50eHQgLSBQcm9ncmFtIHVwZGF0 ZSBoaXN0b3J5LCBlZGl0cyAxNzktMTg4IChiaWcpLgotICBja2MxNzgudHh0IC0gUHJvZ3JhbSBl ZGl0IGhpc3RvcnksIDVBIGVkaXRzIHRocm91Z2ggMTc4ICh2ZXJ5IGJpZykuCi0gIGNrY3Y0Zi50 eHQgLSBQcm9ncmFtIGVkaXQgaGlzdG9yeSwgdmVyc2lvbiA0Ri4KLSAgY2tjdjRlLnR4dCAtIFBy b2dyYW0gZWRpdCBoaXN0b3J5LCB2ZXJzaW9uIDRFLgotCi1CSU5BUklFUwotCi1JZiB5b3UgaGF2 ZSBGVFAgYWNjZXNzIHRvIGtlcm1pdC5jb2x1bWJpYS5lZHUgKGFsc28ga25vd24gYXMKLWtlcm1p dC5jYy5jb2x1bWJpYS5lZHUsIGZ0cC5jYy5jb2x1bWJpYS5lZHUpLCB5b3UgY2FuIGFsc28gcmV0 cmlldmUgdmFyaW91cwotQy1LZXJtaXQgYmluYXJpZXMgZnJvbSB0aGUgZGlyZWN0b3J5IGtlcm1p dC9iaW4vY2sqLiosIG9yIG1vcmUgY29udmVuaWVudGx5Ci1mcm9tIHRoZSB3ZWIgcGFnZToKLQot ICBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2s4MGJpbmFyaWVzLmh0bWwKLQotVGVz dCB2ZXJzaW9ucyB3b3VsZCBiZSBpbiBrZXJtaXQvdGVzdC9iaW4vY2sqLiouICBCZSBzdXJlIHRv IHRyYW5zZmVyIHRoZXNlCi1maWxlcyBpbiBiaW5hcnkgbW9kZS4gIFRoZSBSRUFELk1FIGZpbGUg aW4gdGhhdCBkaXJlY3RvcnkgZXhwbGFpbnMgd2hhdCdzCi13aGF0LgotCi1TT1VSQ0UgRklMRVMK LQotVGhlIHNvdXJjZSBmaWxlcyBmb3IgdGhlIFVOSVggdmVyc2lvbiAoYWxsIFVOSVggdmVyc2lv bnMpIGFyZSBhdmFpbGFibGUgaW4KLWtlcm1pdC9hcmNoaXZlcy9ja3VOTk4udGFyLlosIGFwcHJv eGltYXRlbHkgMU1CIGluIHNpemUuICBUcmFuc2ZlciB0aGlzIGZpbGUKLWluIGJpbmFyeSBtb2Rl LiAgVGhpcyBpcyBhIGNvbXByZXNzZWQgdGFyIGFyY2hpdmUuICBUaGVyZSBpcyBhbHNvIGEgZ3pp cCdkCi12ZXJzaW9uLCBja3UyMTEudGFyLmd6LiAgVG8gZ2V0IHRoZSBiaW5hcnkgdGFyIGFyY2hp dmU6Ci0KLSAgbWtkaXIga2VybWl0ICAgICAgICAgICAgICAgICAgIChhdCBzaGVsbCBwcm9tcHQs IG1ha2UgYSBLZXJtaXQgZGlyZWN0b3J5KQotICBjZCBrZXJtaXQgICAgICAgICAgICAgICAgICAg ICAgKG1ha2UgaXQgeW91ciBjdXJyZW50IGRpcmVjdG9yeSkKLQotICBmdHAga2VybWl0LmNvbHVt YmlhLmVkdSAgICAgICAgKG1ha2UgYW4gZnRwIGNvbm5lY3Rpb24pCi0gIHVzZXI6IGFub255bW91 cyAgICAgICAgICAgICAgICAobG9nIGluIGFzIHVzZXIgImFub255bW91cyIsIGxvd2VyIGNhc2Uh KQotICBwYXNzd29yZDogICAgICAgICAgICAgICAgICAgICAgKHVzZSB5b3VyIGVtYWlsIGlkIGFz IGEgcGFzc3dvcmQpCi0gIGNkIGtlcm1pdC9hcmNoaXZlcyAgICAgICAgICAgICAoZ28gdG8gdGhl IGFyY2hpdmVzIGRpcmVjdG9yeSkKLSAgdHlwZSBiaW5hcnkgICAgICAgICAgICAgICAgICAgIChz cGVjaWZ5IGJpbmFyeSBmaWxlIHRyYW5zZmVyKQotICBnZXQgY2t1MzAwLnRhci5aICAgICAgICAg ICAgICAgKGdldCB0aGUgdGFyIGFyY2hpdmUpIChvciBnZXQgY2t1MTkyLnRhci5neikKLSAgYnll ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXNjb25uZWN0IGFuZCBleGl0IGZyb20gZnRw KQotCi0gIHVuY29tcHJlc3MgY2t1MzAwLnRhci5aICAgICAgICAoYXQgdGhlIHNoZWxsIHByb21w dCwgdW5jb21wcmVzcyB0aGUgYXJjaGl2ZSkKLSAgdGFyIHh2ZiBja3UzMDAudGFyICAgICAgICAg ICAgIChleHRyYWN0IHRoZSBmaWxlcyBmcm9tIHRoZSB0YXIgYXJjaGl2ZSkKLSAgbWFrZSB4eHgg ICAgICAgICAgICAgICAgICAgICAgIChidWlsZCBDLUtlcm1pdCBmb3IgeW91ciBzeXN0ZW0pCi0K LSh3aGVyZSAieHh4IiBpcyB0aGUgbWFrZWZpbGUgZW50cnkgYXBwcm9wcmlhdGUgZm9yIHlvdXIg c3lzdGVtLikKLQotQWxsIEMtS2VybWl0IHNvdXJjZSBhbmQgb3RoZXIgdGV4dCBmaWxlcyBhcmUg YWxzbyBrZXB0IHNlcGFyYXRlbHkgaW4gdGhlCi1rZXJtaXQvZiBkaXJlY3RvcnkuICBUaGUgZmls ZXMgbmVjZXNzYXJ5IHRvIGJ1aWxkIGEgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbgotb2YgQy1L ZXJtaXQgYXJlIGxpc3RlZCBpbiB0aGUgYXBwcm9wcmlhdGUgbWFrZWZpbGUgb3IgZXF1aXZhbGVu dDoKLQotICAgICAgIFVOSVg6IG1ha2VmaWxlIChvciByZW5hbWUgY2t1a2VyLm1hayB0byBtYWtl ZmlsZSkKLSAgIDIuMTEgQlNEOiBja3ViczIubWFrIChyZW5hbWUgdG8gbWFrZWZpbGUpLCBja3Vz dHIuc2VkCi0gICAgIFBsYW4gOTogY2twa2VyLm1rICAocmVuYW1lIHRvIG1rZmlsZSkKLSAgTWFj aW50b3NoOiBja21rZXIubWFrIChyZW5hbWUgdG8ga2VybWl0Lm1ha2UsIHVzZSBNUFcgQyAzLjIp Ci0gICAgICAgIFZNUzogQ0tWS0VSLkNPTSAoRENMKSAoYW5kIG9wdGlvbmFsbHkgYWxzbyBDS1ZL RVIuTU1TKQotICAgICAgICAgICAgIG9yIENLVk9MRC5DT00gKGZvciBWTVMgNC54KQotICAgICAg QW1pZ2E6IENLSUtFUi5NQUsgKEF6dGVjIEMpIG9yIENLSVNBUy5NQUsgKFNBUyBDKQotICAgQXRh cmkgU1Q6IENLU0tFUi5NQUsKLSAgICAgICBPUy05OiBjazlrZXIubWFrIG9yIGNrOWtlci5nY2MK LSAgICAgQU9TL1ZTOiBja2RtYWsuY2xpLCBja2RjYy5jbGksIGNrZGxuay5jbGkKLVN0cmF0dXMg Vk9TOiBja2xtYWsuY20KLQotTWluaW1hbCBzb3VyY2UgZmlsZXMgZm9yIGJ1aWxkaW5nIHNlbGVj dGVkIHZlcnNpb25zICh0aGVzZSBwYXR0ZXJucyBnZXQgYWxsCi10aGUgZmlsZXMgeW91IG5lZWQs IGFuZCBpbiBzb21lIGNhc2VzIG1heWJlIGEgZmV3IGV4dHJhKToKLQotICAgVU5JWDogICBja1tj dXddKi5bY3doXSAgIChpbmNsdWRpbmcgUU5YLCBQbGFuIDksIGFuZCBCZUJveCkKLSAgIFVOSVg6 ICAgY2tbY3V3X10qLltjd2hdICAoVW5peCB3aXRoIHNlY3VyaXR5IG1vZHVsZXMpCi0gICBWTVM6 ICAgIGNrW2N1d3ZdKi5bY3doXSAgVk1TCi0gICBWTVM6ICAgIGNrW2N1d3ZfXSouW2N3aF0gVk1T IHdpdGggU1NML1RMUwotICAgTWFjOiAgICBja1tjdXdtXSouW2N3aHJdIE9sZCBNYWMgT1MsIG5v dCBNYWMgT1MgWCwgd2hpY2ggaXMgVU5JWC4KLSAgIEFPUy9WUzogY2tbY3V3ZF0qLltjd2hdCi0g ICBWT1M6ICAgIGNrW2N3aGxdKi5bY3doXQotICAgQW1pZ2E6ICBja1tjdXdpXSouW2N3aF0KLSAg IEF0YXJpOiAgY2tbY3V3c10qLltjd2hdCi0gICBPUy05OiAgIGNrW2N1dzldKi5bY3doYV0KLQot RmluYWxseSwgaGVyZSBpcyBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIEMtS2Vy bWl0IGZpbGUgbmFtaW5nCi1jb252ZW50aW9ucy4gIEEgQy1LZXJtaXQgZmlsZW5hbWUgaGFzIHRo ZSBmb3JtOgotCi0gIENLPHN5c3RlbT48d2hhdD4uPHR5cGU+Ci0KLXdoZXJlOgotCi08c3lzdGVt PiBpcyBkZXNjcmliZWQgZWFybGllciBpbiB0aGlzIGZpbGU7Ci0KLTx0eXBlPiBpcyB0aGUgZmls ZSB0eXBlICh1c2UgbG93ZXJjYXNlIG9uIFVOSVgsIFZPUywgb3IgQU9TL1ZTKToKLQotICBjOiAg IEMgbGFuZ3VhZ2Ugc291cmNlCi0gIGg6ICAgSGVhZGVyIGZpbGUgZm9yIEMgbGFuZ3VhZ2Ugc291 cmNlCi0gIHc6ICAgV2FydCBwcmVwcm9jZXNzb3Igc291cmNlLCBjb252ZXJ0ZWQgYnkgV2FydCAo b3IgTGV4KSB0byBhIEMgcHJvZ3JhbQotICByOiAgIE1hY2ludG9zaCByZXNvdXJjZSBmaWxlICg4 LWJpdCB0ZXh0KQotICBhOiAgIEFzc2VtYmxlciBzb3VyY2UKLQotICB0eHQ6IFBsYWluIHRleHQu Ci0gIG5yOiAgTnJvZmYvVHJvZmYgdGV4dCBmb3JtYXR0ZXIgc291cmNlIGZvciBVTklYICJtYW4g cGFnZSIKLSAgbXNzOiBTY3JpYmUgdGV4dCBmb3JtYXR0ZXIgc291cmNlCi0gIHBzOiAgVHlwZXNl dCBtYXRlcmlhbCB0byBiZSBwcmludGVkIG9uIGEgUG9zdFNjcmlwdCBwcmludGVyCi0gIHBkZjog QW4gQWRvYmUgUERGIGZpbGUKLSAgaGxwOiBBIFZNUyBIZWxwIHRvcGljCi0KLSAgaW5pOiBJbml0 aWFsaXphdGlvbiBmaWxlCi0gIGtzYzogQSBLZXJtaXQgU2NyaXB0IHRvIGJlIGV4ZWN1dGVkIGJ5 IHRoZSBUQUtFIGNvbW1hbmQKLSAga2RkOiBBIEtlcm1pdCBEaWFsaW5nIERpcmVjdG9yeQotICBr bmQ6IEEgS2VybWl0IE5ldHdvcmsgRGlyZWN0b3J5Ci0gIGtzZDogQSBLZXJtaXQgU2VydmljZXMg RGlyZWN0b3J5Ci0KLSAgbWFrOiBBIE1ha2VmaWxlIG9yIG90aGVyIGJ1aWxkIHByb2NlZHVyZSAo b2Z0ZW4gbmVlZHMgcmVuYW1pbmcpCi0gIGNvbTogKFZNUyBvbmx5KSBhIERDTCBjb21tYW5kIHBy b2NlZHVyZQotICBjbGk6IChBT1MvVlMgb25seSkgYSBjb21tYW5kIHByb2NlZHVyZQotICBjbWQ6 IChPUy8yIG9ubHkpIGEgUmV4eCBjb21tYW5kIHByb2NlZHVyZQotCi0gIGJvbzogImJvbyItZW5j b2RlZCBleGVjdXRhYmxlIHByb2dyYW0sIGRlY29kZSB3aXRoIENLQlVOQiBwcm9ncmFtLgotICBo ZXg6ICJoZXgiLWVuY29kZWQgZXhlY3V0YWJsZSBwcm9ncmFtLCBkZWNvZGUgd2l0aCBDS1ZERUgg cHJvZ3JhbSAoVk1TIG9ubHkpLgotICBocXg6IEJpbkhleCdkIE1hY2ludG9zaCBLZXJtaXQgcHJv Z3JhbSwgZGVjb2RlIHdpdGggQmluSGV4IHZlcnNpb24gNC4wLgotICB1dWU6IEEgdXVlbmNvZGVk IGJpbmFyeSBmaWxlLCBkZWNvZGUgd2l0aCB1dWRlY29kZSBvciAoREcgb25seSkgQ0tERUNPLgot Ci0gIGRlZjogQW4gT1MvMiBsaW5rZXIgZGVmaW5pdGlvbnMgZmlsZS4KLSAgc2g6ICBBIFVOSVgg c2hlbGwgc2NyaXB0LgotICBzZWQ6IEEgVU5JWCBzZWQgKGVkaXRvcikgc2NyaXB0LgotICBzdHI6 IEEgZmlsZSBvZiBjaGFyYWN0ZXIgc3RyaW5ncyBleHRyYWN0ZWQgZnJvbSBDLUtlcm1pdCAoQlNE IDIuMXggb25seSkuCi0KLTx3aGF0PiBpcyBtbmVtb25pYyAodXAgdG8gMyBjaGFyYWN0ZXJzKSBm b3Igd2hhdCdzIGluIHRoZSBmaWxlOgotCi1OT1RFOiBBZnRlciBDLUtlcm1pdCA2LjAsIHRleHQg ZmlsZXR5cGVzIHN1Y2ggYXMgLkRPQyBhbmQgLkhMUCB3ZXJlIGNoYW5nZWQKLXRvIC5UWFQgdG8g YXZvaWQgY29uZnVzaW9uIGluIFdpbmRvd3MtYmFzZWQgV2ViIGJyb3dzZXJzLCB3aGljaCB3b3Vs ZAotb3RoZXJ3aXNlIG1pc3Rha2UgdGhlbSBmb3IgTWljcm9zb2Z0IFdvcmQgb3IgV2luZG93cyBI ZWxwIGRvY3VtZW50cy4KLQotICBhYWE6IEEgInJlYWQtbWUiIGZpbGUsIGxpa2UgdGhpcyBvbmUK LSAgaW5zOiBJbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIG9yIHByb2NlZHVyZXMKLSAgYndyOiAi QmV3YXJlIiBmaWxlIC0tIHRoaW5ncyB0byB3YXRjaCBvdXQgZm9yLCBoaW50cyBhbmQgdGlwcwot ICBwbG06IFByb2dyYW0gTG9naWMgTWFudWFsCi0gIGtlcjogR2VuZXJhbCBDLUtlcm1pdCBkZWZp bml0aW9ucywgaW5mb3JtYXRpb24sIGRvY3VtZW50YXRpb24KLQotICBubm46IERpZ2l0czogQy1L ZXJtaXQgZWRpdCBudW1iZXIgKGUuZy4gY2t1MzAwLnRhci5neikKLSAgY21kOiBDb21tYW5kIHBh cnNpbmcKLSAgY29uOiBDT05ORUNUIGNvbW1hbmQKLSAgY25zOiBDT05ORUNUIGNvbW1hbmQgKFVO SVggb25seSAtIHZlcnNpb24gdGhhdCB1c2VzIHNlbGVjdCgpLCBub3QgZm9yaygpKQotICBkZWI6 IERlYnVnL1RyYW5zYWN0aW9uIExvZyBmb3JtYXRzLCBUeXBlZGVmcwotICBkaWE6IE1vZGVtL0Rp YWxlciBjb250cm9sCi0gIGZpbzogU3lzdGVtLWRlcGVuZGVudCBGaWxlIEkvTwotICBmbnM6IFBy b3RvY29sIHN1cHBvcnQgZnVuY3Rpb25zCi0gIGZuMjogTW9yZSBwcm90b2NvbCBzdXBwb3J0IGZ1 bmN0aW9ucyAoYW5kIEZOMywgLi4uKQotICBsaWI6IENvbW1vbiBsaWJyYXJ5IHJvdXRpbmVzIG1v ZHVsZQotICBtYWk6IE1haW4gcHJvZ3JhbQotICBuZXQ6IE5ldHdvcmsgaS9vIG1vZHVsZQotICBw cm86IFByb3RvY29sCi0gIHNjcjogU0NSSVBUIGNvbW1hbmQKLSAgdGVsOiBUZWxuZXQgcHJvdG9j b2wgbW9kdWxlCi0gIHRpbzogU3lzdGVtLWRlcGVuZGVudCBjb21tdW5pY2F0aW9ucyBpL28gJiBj b250cm9sIGFuZCBpbnRlcnJ1cHQgaGFuZGluZwotICBzaWc6IFNpZ25hbCBoYW5kbGluZyBtb2R1 bGUKLSAgdXNyOiBJbnRlcmFjdGl2ZS9zY3JpcHQgdXNlciBpbnRlcmZhY2UKLSAgdXMyOiBNb3Jl IHVzZXIgaW50ZXJmYWNlIChtYWlubHkgaGVscCB0ZXh0KQotICB1czM6IFN0aWxsIG1vcmUgdXNl ciBpbnRlcmZhY2UgKGFuZCBVU1I0LCBVU1I1LCBVU1I2LCBVU1I3KQotICB1c3g6IENvbW1vbiB1 c2VyIGludGVyZmFjZSBmdW5jdGlvbnMKLSAgdXN5OiBDb21tYW5kLWxpbmUgcGFyc2luZwotICB4 bGE6IENoYXJhY3RlciBzZXQgdHJhbnNsYXRpb24gbW9kdWxlCi0gIHVuaTogVW5pY29kZSBzdXBw b3J0Ci0gIHB0eTogUHNldWRvdGVybWluYWwgc3VwcG9ydAotICBtZGI6IE1hbGxvYy1kZWJ1Z2dp bmcgbW9kdWxlIChub3QgaW5jbHVkZWQgaW4gcmVhbCBidWlsZHMpCi0gIHN0cjogU3RyaW5ncyBt b2R1bGUgKG9ubHkgZm9yIDIueEJTRCkKLQotKEVuZCBvZiBja2FhYWEudHh0KQoKZGlmZiAtLWdp dCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjMzAyLnR4dCBiL2Nr ZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjMzAyLnR4dApkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMTNhNjYxYS4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4z MDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrYzMwMi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw3 ODgxICswLDAgQEAKLUMtS0VSTUlUIDkuMCBDSEFOR0UgTE9HIChDaGFuZ2VzIHNpbmNlIDguMC4y MDcgLyBLOTUgMi4xLjMgSmFudWFyeSAyMDAzKQotCi0gIENocm9ub2xvZ2ljYWwgb3JkZXIuCi0g IEdvIHRvIHRoZSBib3R0b20gdG8gZmluZCB0aGUgbmV3ZXN0IGVkaXRzLgotCi0gIEYuIGRhIENy dXosIFRoZSBLZXJtaXQgUHJvamVjdCwgQ29sdW1iaWEgVW5pdmVyc2l0eSwgTllDLgotICBMYXN0 IHVwZGF0ZTogMjggSnVuZSAyMDExLgotCi1GVFAgVVNFUiwgRlRQIEFDQ09VTlQsIHBsdXMgdGhl IHZhcmlvdXMgcHJvbXB0cyBhbmQgc3dpdGNoZXMgZm9yIEZUUCB1c2VybmFtZSwKLXBhc3N3b3Jk LCBhbmQgYWNjb3VudCBhbGwgbmVnbGVjdGVkIHRvIHN0cmlwIHF1b3RlcywgYW5kIGluIG1vc3Qg Y2FzZXMgcXVvdGVzCi1hcmUgbmVjZXNzYXJ5IHRvIHNwZWNpZnkgYSB1c2VybmFtZSB0aGF0IGNv bnRhaW5zIHNwYWNlcy4gIGNrY2Z0cC5jLAotMTUgSmFuIDIwMDMuCi0KLUZUUCBNUFVUIGYxIGYy IGYzLi4uIGdldHMgYSBwYXJzZSBlcnJvciBpZiBhbnkgb2YgdGhlIGZuJ3MgZG8gbm90IG1hdGNo IGFuCi1leGlzdGluZyBmaWxlLiAgVGhpcyBpcyBiYWQgZm9yIHNjcmlwdHMuICBJbiBkb2Z0cHB1 dCgpLCBjbWZkYigpIGxvb2tzIGZvcgota2V5d29yZHMgKHN3aXRjaGVzKSBvciBDTUlGSS4gIFdo ZW4gaXQgaGl0cyBDTUlGSSwgaXQgZXhpdHMgZnJvbSB0aGUgaW5pdGlhbAotcGFyc2UgbG9vcCBh bmQgdGhlbiBkb2VzIGFkZGl0aW9uYWwgY21pZmkoKXMgaW4gYSBsb29wIHVudGlsIGRvbmUuICBU aGUgbW9zdAotb2J2aW91cyBmaXggaXMgdG8gcGFyc2UgZWFjaCBmaWVsZCB3aXRoIGNtZmRiKENN SUZJLENNRkxEKSwgaS5lLiBmYWxsIGJhY2sgdG8KLUNNRkxEIGlmIENNSUZJIGRvZXNuJ3QgbWF0 Y2ggYW55dGhpbmcuICBUaGVuIGlmIENNRkxEIHdhcyB1c2VkLCB3ZSBkb24ndCBhZGQKLXRoZSBm aWxlc3BlYyB0byB0aGUgbGlzdC4gIFRoaXMgaXMgYSByYXRoZXIgYmlnIGNoYW5nZSBidXQgaXQg c2VlbXMgdG8gd29yay4KLU5vIGVycm9yIG1lc3NhZ2VzIG9yIGZhaWx1cmVzIGhhcHBlbiBmb3Ig bm9uLW1hdGNoaW5nIGZpZWxkcywgYnV0IGFuIGVycm9yCi1tZXNzYWdlIGlzIHByaW50ZWQgKGFu ZCB0aGUgTVBVVCBjb21tYW5kIGZhaWxzKSBpZiBub25lIG9mIHRoZSBmaWVsZHMgbWF0Y2gKLWFu eSBmaWxlcy4gIFRoaXMgZml4IGdvdCBpbiB0b28gbGF0ZSBmb3IgMi4xLjM7IHdvcmthcm91bmQ6 IHVzZSBDLVNoZWxsCi1saWtlIHdpbGRjYXJkIGxpc3QgKGZ0cCBtcHV0ICJ7Ki5hYmMsZm9vLip9 IikuICBja2NmdHAuYywgMTYgSmFuIDIwMDMuCi0KLUdSRVAgZGlkIG5vdCBwYXNzIGl0cyBwYXR0 ZXJuIHRocm91Z2ggdGhlIGV4cGFuZGVyLCB0aHVzIHZhcmlhYmxlcyBjb3VsZAotbm90IGJlIHVz ZWQgZm9yIHBhdHRlcm5zLiAgVGhpcyBtdXN0IGhhdmUgYmVlbiBhbiBvdmVyc2lnaHQgLS0gSSBj YW4ndCBmaW5kCi1hbnl0aGluZyBpbiBteSBub3RlcyBhYm91dCBpdC4gIEZpeGVkIGluIGRvZ3Jl cCgpOiBja3V1czYuYywgMjQgSmFuIDIwMDMuCi0KLU5ldyBtYWtlZmlsZSB0YXJnZXQgZm9yIEhQ LVVYIDExLnh4IHdpdGggT3BlblNTTCBmcm9tIFRhcGFuaSBUYXJ2YWluZW4uCi1tYWtlZmlsZSwg MzEgSmFuIDIwMDMuCi0KLUZyb20gSmVmZjoKLSAuIEF2b2lkIGNvcmUgZHVtcCB3aGVuIGRlcmVm ZXJlbmNpbmcgdG5jX2dldF9zaWduYXR1cmUoKTogY2t1dXM0LmMuCi0gLiBCdW1wIHZlcnNpb24g bnVtYmVycyB0byA4LjAuMjA4LCAyLjEuNDogY2tjbWFpLmMuCi0KLUFkZGVkIC9OT0xPR0lOIHRv IEZUUCBbT1BFTl0uICBja2NmdHAuYywgMTAgRmViIDIwMDMuCi0KLURvbid0IGR1bXAgY29yZSBp ZiBGVFAgREVCVUcgaXMgT04gYW5kIEZUUCBPUEVOIGRvZXMgbm90IGluY2x1ZGUgYSBzZXJ2aWNl Lgotb3BlbmZ0cCgpOiBja2NmdHAuYywgMTAgRmViIDIwMDMuCi0KLUhFTFAgUEFUVEVSTiB0ZXh0 IGluY29ycmVjdGx5IGlkZW50aWZpZWQgY29tbWFuZHMgYW5kIGZ1bmN0aW9ucyB3aXRoCi1mbG9h dGluZyBhbmQgYW5jaG9yZWQgcGF0dGVybnMuICBUaGUgY29ycmVjdGVkIGxpc3RzIGFyZToKLUZs b2F0aW5nOiBHUkVQLCBUWVBFIC9NQVRDSDosIC9FWENFUFQ6IHBhdHRlcm5zLCBcZmFycmF5bG9v aygpLAotQW5jaG9yZWQ6IElGIE1BVENILCBmaWxlLW1hdGNoaW5nIHdpbGRjYXJkcywgXGZzZWFy Y2goKSwgXGZyc2VhcmNoKCkKLWNrdXVzMi5jLCAxMCBGZWIgMjAwMy4gICAgIAotCi1JTlBVVCBu IFxmcGF0dGVybih4eHgpIGRpZCBub3Qgd29yayBmb3IgY2FzZS1pbmRlcGVuZGVudCBjb21wYXJp c29ucy4KLUZpeGVkIGluIGRvaW5wdXQoKTogY2t1dXM0LmMsIDEwIEZlYiAyMDAzLgotCi1JdCBz ZWVtcyBcZnBhdHRlcm4oKSBkaWRuJ3Qgd29yayB3aXRoIE1JTlBVVCBhdCBhbGwuICBUaGVyZSB3 YXMgbm8gY29kZSB0bwotaGFuZGxlIFxmcGF0dGVybigpIGluIHRoZSBNSU5QVVQgcGFyc2UgbG9v cCwgc28gaXQgbmV2ZXIgd29ya2VkLiAgVGhlIGNvZGUKLWhhZCB0byBiZSB0b3RhbGx5IHJld3Jp dHRlbiB0byB1c2UgY21mbGQoKSBpbiBhIGxvb3AsIHJhdGhlciB0aGFuIGNtdHh0KCkKLWFuZCB0 aGVuIGNrc3BsaXQoKS4gIEZ1cnRoZXJtb3JlLCB3aGVuZXZlciBhbnkgb2YgdGhlIGZpZWxkcyB3 YXMgYW4KLVxmam9pbigpLCB0aGlzIGhhZCB0byBiZSBzcGxpdC4gIGNrdXVzci5jLCAxMCBGZWIg MjAwMy4KLQotTWFjcm8gcmVwbGFjZW1lbnQgdmlhIFxtKCkgYW5kIFxmZGVmaW5pdGlvbigpIGRv ZXMgbm90IHdvcmsgYXMgYWR2ZXJ0aXNlZAotKGkuZS4gY2FzZSBzZW5zaXRpdmVseSkgZm9yIGFz c29jaWF0aXZlIGFycmF5IGVsZW1lbnRzOyBlLmcuIFxtKHh4eDxhYmM+KSBpcwotdHJlYXRlZCB0 aGUgc2FtZSBhcyBcbSh4eHg8QUJDPiksIGNvbnRyYXJ5IHRvIHNlY3Rpb24gNy4xMC4xMCBvZiB0 aGUgQy1LZXJtaXQKLTcuMCB1cGRhdGUgbm90ZXMsIGFuZCB0byB0aGUgZmFjdCB0aGF0IHRoZSB0 d28gcmVhbGx5IGRvIGV4aXN0IHNlcGFyYXRlbHkuCi1GaXhlZCBieSBhZGRpbmcgYSBzdGF0aWMg ZnVuY3Rpb24gaXNhYXJyYXkocykgd2hpY2ggc3VjY2VlZHMgaWYgcyBpcyBhbgotYXNzb2NpYXRp dmUgYXJyYXkgcmVmZXJlbmNlIGFuZCBmYWlscyBvdGhlcndpc2UsIGFuZCB0aGVuIGhhdmluZyBc bSgpCi1hbmQgXGZkZWYoKSBjYWxsIG14eGxvb2soKSAoY2FzZS1zZW5zaXRpdmUgbG9va3VwKSBp ZiBpc2FhcnJheSgpLCBvdGhlcndpc2UKLShhcyBiZWZvcmUpIG14bG9vaygpKS4gIGNrdXVzNC5j LCAxMSBGZWIgMjAwMy4KLQotRml4ZWQgRlRQIE9QRU4gdG8gYWxsb3cgdGhlIC9VU0VSIHN3aXRj aCB0byBvdmVycmlkZSBTRVQgRlRQIEFVVE9MT0dJTiBPRkYsCi1qdXN0IGFzIC9OT0xPR0lOIG92 ZXJyaWRlcyBTRVQgRlRQIEFVVE9MT0dJTiBPTi4gIGNrY2Z0cC5jLCAxMSBGZWIgMjAwMy4KLQot SW4gSzk1LCAic2V0IGtleSBcMTIzNCBcMjdIIiAoYW55IFNFVCBLRVkgY29tbWFuZCBpbiB3aGlj aCB0aGUgZmlyc3QgY2hhciBvZgotdGhlIGRlZmluaXRpb24gd2FzIGJhY2tzbGFzaCwgYW5kIHRo ZSBPTkxZIGNoYXJhY3RlciBhZnRlciB0aGUgYmFja3NsYXNoCi1xdWFudGl0eSB3YXMgYW4gdXBw ZXJjYXNlIGxldHRlciwgdGhhdCBsZXR0ZXIgd291bGQgYmUgbG93ZXJjYXNlZCkuICBEaWFnbm9z aXM6Ci14bG9va3VwKCkgcG9raW5nIGl0cyBhcmd1bWVudCAoc2VlIG5vdGVzIGZyb20gSnVseSAy MDAwKS4gIEplZmYgc2VudCBhIGZpeC4KLWNrdWNtZC5jLCAxNSBGZWIgMjAwMy4KLQotUmFuIG15 IFMtRXhwcmVzc2lvbiB0b3J0dXJlIHRlc3QgdG8gbWFrZSBzdXJlIFNleHBzIHN0aWxsIHdvcmtl ZC4gIFRoZXkgZG8sCi1leGNlcHQgdGhlIGJpdHdpc2UgJiBhbmQgfCBvcGVyYXRvcnMgd2VyZSBi cm9rZW4sIGUuZy4gKCYgNyAyKSBhbmQgKHwgMSAyIDQpCi1nZXQgIkludmFsaWQgb3BlcmFuZCIg ZXJyb3JzLiAgSmVmZidzIGNvZGUgaGFkIGFkZGVkIGFuIGVhcmx5IGZhaWx1cmUgcmV0dXJuCi1m cm9tIHRoZSBsb29rdXAgbG9vcCB3aGVuIHdoZW4gYSBzaW5nbGUtYnl0ZSBrZXl3b3JkIG1hdGNo ZWQgYSBrZXl3b3JkIHRoYXQKLXN0YXJ0ZWQgd2l0aCB0aGUgc2FtZSBieXRlIGJ1dCB3YXMgbW9y ZSB0aGFuIG9uZSBieXRlIGxvbmcuICBTbyAiJiIgd291bGQgaGl0Ci0iJiYiIGFuZCBmYWlsIGlu c3RlYWQgb2YgY29udGludWluZyBpdHMgc2VhcmNoICh4bG9va3VwIHRhYmxlcyBhcmVuJ3Qgc29y dGVkCi1zbyB0aGVyZSBjYW4gYmUgbm8gZWFybHkgcmV0dXJuKS4gIEZpeGVkIGluIHhsb29rdXAo KTogY2t1Y21kLmMsIDE2IEZlYiAyMDAzLgotCi1Hb3QgcmlkIG9mICJrcmJtaXQiIHRhcmdldCBm cm9tIG1ha2VmaWxlLiAgSXQncyBzdGlsbCB0aGVyZSwgYnV0IHdlIGRvbid0Ci11c2UgaXQgYW55 IG1vcmUuICBBbGwgc2VjdXJlIHRhcmdldHMgbm93IHVzZSAieGVybWl0IiwgYW5kIHByb2R1Y2Ug YSBiaW5hcnkKLWNhbGxlZCB3ZXJtaXQsIGp1c3QgbGlrZSB0aGUgcmVndWxhciBvbmVzIGRvIChl eGNlcHQgdGhlIG9sZCBja3Vjb24uYyBvbmVzKS4KLU5vbi1zZWN1cmUgdGFyZ2V0cywgc2luY2Ug dGhleSBkb24ndCBkZWZpbmUgYW55IG9mIHRoZSBzZWN1cml0eSBzeW1ib2xzLAotd2luZCB1cCBj b21waWxpbmcgYW5kIGxpbmtpbmcgdG8gKG1vc3RseSkgZW1wdHkgc2VjdXJpdHkgbW9kdWxlcy4g IG1ha2VmaWxlLAotMTUgRmViIDIwMDMuCi0KLUFkZGVkIFxmY3Z0ZGF0ZSh4eHgsMykgdG8gZm9y bWF0IGl0cyByZXN1bHQgaW4gTURUTSBmb3JtYXQgKHl5eXltbWRkaGhtbXNzLAotYWxsIG51bWVy aWMsIG5vIHNwYWNlcyBvciBwdW5jdHVhdGlvbikuICBPZiBjb3Vyc2UgdGhlc2UgbnVtZXJpYyBz dHJpbmdzCi1hcmUgdG9vIGJpZyB0byBiZSAzMi1iaXQgbnVtYmVycyBhbmQgYXJlIHVzZWxlc3Mg Zm9yIGFyaXRobWV0aWMsIGJ1dCB0aGV5J3JlCi11c2VmdWwgZm9yIGxleGljYWwgY29tcGFyaXNv biwgZXRjLiAgY2t1dXNbMjRdLmMsIDE2IEZlYiAyMDAzLgotCi1UaGUgZm9sbG93aW5nIEZUUCBj b21tYW5kcyBkaWQgbm90IHNldCBGQUlMVVJFIHdoZW4gdGhleSBmYWlsZWQ6IFJNRElSLAotQ0Qs IENEVVAsIEZpeGVkIGluIHRoZSBjb3JyZXNwb25kaW5nIGRvZnRwYmxhaCgpIHJvdXRpbmVzLiAg Y2tjZnRwLmMsCi0xNiBGZWIgMjAwMy4KLQotUkVOQU1FIHdvdWxkIHNvbWV0aW1lcyBub3QgcHJp bnQgYW4gZXJyb3IgbWVzc2FnZSB3aGVuIGl0IGZhaWxlZCwgZS5nLiBpbiBLOTUKLXdoZW4gdGhl IGRlc3RpbmF0aW9uIGZpbGUgYWxyZWFkeSBleGlzdGVkLiAgY2t1dXM2LmMsIDE3IEZlYiAyMDAz LgotCi1GaXhlZCBDT1BZIGVycm9yIG1lc3NhZ2VzLCB3aGljaCBkaWQgbm90IGNvbWUgb3V0IGlu IHN0YW5kYXJkIGZvcm1hdCB3aGVuCi0vTElTVCB3YXMgbm90IGluY2x1ZGVkLiAgY2t1dXM2LmMs IDE3IEZlYiAyMDAzLgotCi1GaXhlZCAjaWZkZWZzIGluIGNrX2NycC5jIHRvIGFsbG93IG5vbnNl Y3VyZSBidWlsZHMgb24gb2xkIHBsYXRmb3JtcyBsaWtlCi1TeXN0ZW0gVi82OCBSMy4gIDE5IEZl YiAyMDAzLgotCi1TaW1pbGFyIHRyZWF0bWVudCBmb3IgY2tfc3NsLmMuICAyMCBGZWIgMjAwMy4K LQotRnJvbSBKZWZmLCAyMSBGZWIgMjAwMzoKLSAuIEFJWDUzIGFuZCBBSVg1MiBzeW1ib2xzIGZv ciBja2NkZWIuaCwgbWFrZWZpbGUuCi0gLiBOZXcgZ2NjIHRhcmdldHMgZm9yIHZhcmlvdXMgQUlY IDQueC81LnggdmVyc2lvbnM6IG1ha2VmaWxlLgotIC4gQ29weXJpZ2h0IGRhdGUgdXBkYXRlczog Y2tfY3JwLmMsIGNrX3NzbC5jLgotIC4gRU5BQkxFL0RJU0FCTEUgUVVFUlkgYnJva2VuIGJlY2F1 c2Uga2V5d29yZCB0YWJsZSBvdXQgb2Ygb3JkZXI6IGNrdXVzci5jLgotIC4gRml4ZWQgdGhlIHVz ZSBvZiBIVFRQIHByb3hpZXMgZm9yIEhUVFAgW1JFXU9QRU4gZm9yIFVuaXg6IGNrY25ldC5jLgot Ci1BbHNvIGZvciBLOTUgb25seTogQWxsb3cgZmlsZSB0cmFuc2ZlciB3aGVuIEs5NSBpcyBpbnZv a2VkIG9uIHRoZSByZW1vdGUgZW5kCi1vZiBhIGNvbm5lY3Rpb24gdG8gYSBQcmFnbWEgU3lzdGVt cyBUZXJtaW5hbCBTZXJ2ZXIgY29ubmVjdGlvbjsgYXV0b21hdGljYWxseQotU0VUIEVYSVQgSEFO R1VQIE9GRiB3aGVuIGludm9rZWQgd2l0aCBvcGVuIHBvcnQgaGFuZGxlICgiazk1IC1sIG5ubm4i KS4KLQotImNkIGEqIiBmYWlsZWQgZXZlbiB3aGVuICJhKiIgbWF0Y2hlZCBvbmx5IG9uZSBkaXJl Y3RvcnkuICBGaXhlZCBpbiBjbWlmaSgpOgotY2t1Y21kLmMsIDIxIEZlYiAyMDAzLgotCi1JbiB0 aGUgVW5peCB2ZXJzaW9uLCByZXBsYWNlICJleHRlcm4gaW50IGVycm5vOyIgd2l0aCAiI2luY2x1 ZGUgPGVycm5vLmg+IgotaWYgX19HTElCQ19fIGlzIGRlZmluZWQsIHNpbmNlIGdsaWJjIG5vdyBk ZWZpbmVzIGEgdGhyZWFkLXNwZWNpZmljIGVycm5vLgotY2tjZGViLmgsIDI2IEZlYiAyMDAzLgot Ci1BZGRlZCAjaWZkZWZzIHRvIHNraXAgY29tcGlsYXRpb24gb2YgY2t1YXRoLmMgaW4gbm9uc2Vj dXJlIGJ1aWxkcy4gIFRlc3RlZAotYnkgYnVpbGRpbmcgYm90aCBzZWN1cmUgYW5kIHJlZ3VsYXIg dmVyc2lvbnMgaW4gTGludXguICBja3VhdGguYywgMjYgRmViIDIwMDMuCi0KLVJhbiB0aGUgYnVp bGQtaW4tODQtZGlmZmVyZW50LWNvbmZpZ3VyYXRpb25zIHNjcmlwdCBvbiBMaW51eCB0byBtYWtl IHN1cmUgaXQKLXN0aWxsIGJ1aWxkcyB3aXRoIGFsbCBkaWZmZXJlbnQgY29tYmluYXRpb25zIG9m IGZlYXR1cmUgc2VsZWN0aW9uIG9wdGlvbnMuCi1BbGwgT0suICAyNiBGZWIgMjAwMy4KLQotQnVp bHQgb24gVk1TLiAgTmVlZGVkIHRvIGFkZCBhIHByb3RvdHlwZSBmb3IgbXh4bG9vayooKSB0byBj a3V1c3IuaDsgYnVpbHQKLU9LIG90aGVyd2lzZS4gIDI2IEZlYiAyMDAzLgotCi1Gcm9tIEplZmY6 IE1vcmUgI2lmZGVmIHNodWZmbGluZyBmb3Igbm9uc2VjdXJlIGJ1aWxkczogY2t1YXRoLmMsIGNr X3NzbC5jLAotMjcgRmViIDIwMDMuCi0KLUFkZGVkIGNvZGUgdG8gZW5zdXJlIFx2KGRvd25sb2Fk KSBlbmRzIGluIGEgZGlyZWN0b3J5IHNlcGFyYXRvciBpbiBVbml4LAotV2luZG93cywgYW5kIE9T LzIuICBja3V1czcuYywgMjcgRmViIDIwMDMuCi0KLUFkZGVkIGNvZGUgdG8gSzk1IHpmbnFmcCgp IHRvIHRhY2sgb24gZGlyZWN0b3J5IHNlcGFyYXRvciB3aGVuIHJldHVybmluZwotYSBkaXJlY3Rv cnkgbmFtZS4gIGNrb2Zpby5jLCAyNyBGZWIgMjAwMy4KLQotU29tZWhvdyBhbiBvbGQgY29weSBv ZiBja3VhdGguYyBwb3BwZWQgdG8gcmVwbGFjZSB0aGUgbmV3IG9uZS4gIFB1dCB0aGUgbmV3Ci1v bmUgYmFjay4gIDI4IEZlYiAyMDAzLgotCi1Gcm9tIEplZmY6IEZpeCB0eXBvIGluIG15IEs5NSB6 Zm5xZnAoKSBjb2RlIGZyb20geWVzdGVyZGF5OyBmaXhlcyBmb3IgaGFuZGxpbmcKLVVOQ3MgdW5p Zm9ybWx5LCBubyBtYXR0ZXIgd2hpY2ggd2F5IHRoZWlyIHNsYXNoZXMgYXJlIGxlYW5pbmcuICBj a29maW8uYywKLTI4IEZlYiAyMDAzLgotCi1BdCBKZWZmIE1lemVpJ3Mgc3VnZ2VzdGlvbiwgc2Vw YXJhdGUgdGV4dCBhbmQgYmluYXJ5IG1vZGUgb3BlbiBzZXF1ZW5jZXMKLWZvciBWTVMgc2Vzc2lv biBsb2cuICBja3ZmaW8uYywgMjggRmViIDIwMDMuCi0KLUFkZGVkIGZyZWVic2Q0OCB0YXJnZXQg Zm9yIEZyZWVCU0QgNC44LiAgbWFrZWZpbGUsIDEgTWFyIDIwMDMuCi0KLUNoYW5nZWQgTWFjIE9T IFggZW50cmllcyB0byBpbmNsdWRlIC1EVVNFX1NUUkVSUk9SLiAgbWFrZWZpbGUsIDIgTWFyIDIw MDMuCi0KLUZpeGVkIEdFVE9LIC9HVUkgdG8gZXZhbHVhdGUgaXRzIHRleHQgYXJndW1lbnQuICBj a3V1czYuYywgMyBNYXIgMjAwMy4KLQotSmVmZiBmaXhlZCB0aGUgSzk1IERpYWxlciBRVUlDSyBk aWFsb2cgdG8gKGEpIGFsbG93IHRlbXBsYXRlcywgYW5kIChiKSBoYXZlCi1hIFNhdmUtQXMgb3B0 aW9uLiAgMyBNYXIgMjAwMy4KLQotSmVmZiBmaXhlZCBhIHByb2JsZW0gd2l0aCB0aGUgWG1vZGVt LUNSQyBjaGVja3N1bSBiZWluZyBjcnVuY2hlZCB3aGVuZXZlcgotdGhlcmUgd2FzIGEgcmV0cmFu c21pc3Npb24uICA3IE1hciAyMDAzLgotCi1BZGRlZCB0YXJnZXQvYmFubmVyIGZvciBUcnU2NCA1 LjFCLiAgbWFrZWZpbGUsIGNrdXZlci5oLCA1IE1hciAyMDAzLgotCi1JbiBVbml4LCB0aGUgemNv cHkoKSByb3V0aW5lICh1c2VkIGJ5IHRoZSBDT1BZIGNvbW1hbmQpIHJlc2V0IHRoZSB1c2VyJ3Mg dW1hc2sKLXRvIDAgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlIEtlcm1pdCBwcm9jZXNzIGxpZmV0 aW1lLiAgVGhlIGJ1ZyB3YXMgaW4KLWNrdWZpby5jIDguMC4xOTQsIDI0IE9jdCAyMDAyLCBhbmQg aXMgZml4ZWQgaW4gY2t1ZmlvLmMgOC4wLjE5NSwgNiBNYXIgMjAwMy4KLU9mIGNvdXJzZSB0aGlz IGhhcHBlbmVkIGFmdGVyIGJ1aWxkaW5nIDE1NSBDLUtlcm1pdCA4LjAuMjA4IGJpbmFyaWVzLiAg KEJ1dAotYmVmb3JlIG9mZmljaWFsbHkgcmVsZWFzaW5nIDguMC4yMDguKQotCi1JbiB0aGUgVk1T IHZlcnNpb24sIGNoYW5nZWQ6Ci0KLSAgICAgICAgd2hpbGUgKChuLS0pICYmIHh4X2luYygyKSA+ IC0xKSA7Ci10bzoKLSAgICAgICAgd2hpbGUgKChuLS0pICYmIHh4X2luYygyKSA+PSAwKSA7Ci0K LXRvIHN1cHByZXNzIHRoZSAiLi4uaXMgYmVpbmcgY29tcGFyZWQgd2l0aCBhIHJlbGF0aW9uYWwg b3BlcmF0b3IgdG8gYSBjb25zdGFudAotd2hvc2UgdmFsdWUgaXMgbm90IGdyZWF0ZXIgdGhhbiB6 ZXJvIiB3YXJuaW5nLiAgY2t2dGlvLmMsIDcgTWFyIDIwMDIuCi0KLUFkZGVkIGEgZGVidWcgY2Fs bCB0byBkb2xvZ2VuZCBpbiBob3BlcyBvZiBjYXRjaGluZyBvdmVyemVhbG91cyBMb2N1cwotc3dp dGNoaW5nLCB3aGljaCBzZWVtcyB0byBoYXBwZW4gb25seSBpbiBLOTUuICBja3V1czMuYywgNyBN YXIgMjAwMi4KLQotUmVidWlsdCBiaW5hcmllcyBmb3Igc29tZSBvZiB0aGUgbW9yZSBjdXJyZW50 IFVuaXggcmVsZWFzZXM6IEFJWCA0LjMuMy01LjEsCi1Tb2xhcmlzIDctOSAsIFJlZCBIYXQgNy4w LTguMCwgU2xhY2t3YXJlIDguMSwgRnJlZWJzZCA0LjctNC44LCBOZXRCU0QgMS42LAotT3BlbkJT RCAzLjIsIFVuaXh3YXJlIDcuMS4zLCBPcGVuIFVuaXggOCwgT1NSNS4wLjZhLCBldGMuICBBIFVu aXggYmluYXJ5IHdpdGgKLUNPUFkgdW1hc2sgZml4IHNob3dzIGEgNiBNYXIgMjAwMyBkYXRlIGZv ciAiVU5JWCBGaWxlIHN1cHBvcnQiIGluIFNIT1cKLVZFUlNJT05TOyBhIGJpbmFyeSB3aXRob3V0 IHRoZSBmaXggc2hvd3MgMjQgT2N0IDIwMDIuCi0KLUMtS2VybWl0IDguMC4yMDggZGF0ZWQgMTQg TWFyY2ggMjAwMyByZWxlYXNlZCBvbiAxMCBNYXJjaCAyMDAzLgotCi0tLS04LjAuMjA4LS0tCi0K LUZyb20gSmVmZiAxMyBNYXIgMjAwMzoKLSAuIFVwZGF0ZWQgU1NMIG1vZHVsZSBhbGxvd3MgaW1w b3J0YXRpb24gb2YgdGlja2V0cyBmcm9tIGhvc3QuCi0gLiBmcmVlYnNkNTArb3BlbnNzbCB0YXJn ZXQ6IG1ha2VmaWxlLgotIC4gRlRQIFBVVCAvUEVSTUlTU0lPTlMgZXJyb3IgbWVzc2FnZSBmb3Ig Szk1OiBja2NmdHAuYy4KLSAKLUZpeGVkIE1JTlBVVCB0byBzdHJpcCBxdW90ZXMgb3IgYnJhY2Vz IGZyb20gYXJvdW5kIHRhcmdldHMgKHRoaXMgd2FzIGJyb2tlbgotb24gRmViIDEwdGgpLiAgVGhh bmtzIHRvIEphc29uIEhlc2tldHQgZm9yIGRpc2NvdmVyaW5nIGFuZCByZXBvcnRpbmcgdGhpcwot KGtpbGxlcikgYnVnLiAgY2t1dXNyLmMsIDE0IE1hciAyMDAzLgotCi1DaGFuZ2VkIHZlcnNpb24g bnVtYmVyIHRvIDIwOSBEZXYuMDAuICBja2NtYWkuYywgMTQgTWFyIDIwMDMuCi0KLVdoaWxlIGRl YnVnZ2luZyB0aGUgYWxwaGFwYWdlIHNjcmlwdCwgSSBmb3VuZCB0aGF0IHRoZSBjb21tYW5kICJt aW5wdXQgOCBcNlwxMwotXDIxXDEzIFwxM1wyN1w0XDEzIFwzMFwxMyIgZ2V0cyAiP05vdCBjb25m aXJtZWQiIGluIDguMC4yMDggYW5kIDguMC4yMDksIGJ1dAotbm90IGluIDIwNiBhbmQgZWFybGll ci4gIFRoaXMgcHJvYmxlbSB0b28gd2FzIGludHJvZHVjZWQgb24gRmViIDEwdGggYnkKLWNoYW5n aW5nIE1JTlBVVCBwYXJzaW5nIGZyb20gY210eHQoKSBmb2xsb3dlZCBieSBja3NwbGl0KCkgdG8g Y21mbGQoKSBpbiBhCi1sb29wLiAgY21mbGQoKSB1c2VzIHNldGF0bSgpIHRvIHJldHVybiBpdHMg cmVzdWx0IGFuZCBvZiBjb3Vyc2Ugc2V0YXRtKCkKLWJyZWFrcyBvbiBcMTMuICBDaGFuZ2luZyBz ZXRhdG0oKSBub3QgdG8gZG8gdGhpcyB3b3VsZCBicmVhayBldmVyeXRoaW5nIGVsc2UuCi1CdXQg Y21mbGQoKSBoYXMgbm8gYXJndW1lbnRzIHRoYXQgbGV0IHVzIHRlbGwgaXQgdG8gZG8gYW55dGhp bmcgZGlmZmVyZW50IGluCi10aGlzIGNhc2UuICBDaGFuZ2luZyB0aGUgQVBJIHdvdWxkIGJlIGEg ZGlzYXN0ZXIuICBUaGUgb25seSBzb2x1dGlvbiBpcyB0byBhZGQKLWFuICJNSU5QVVQgQUNUSVZF IiAobWlucHV0YWN0aXZlKSBnbG9iYWwgdmFyaWFibGUgdGhhdCB0ZWxscyBjbWZsZCgpIHRvIHRl bGwKLXNldGF0bSgpIG5vdCB0byBicmVhayBvbiBDUi4gIE5vdyBNSU5QVVQgd2l0aCBicmFjZWQg dGFyZ2V0cyBjb250YWluaW5nIENSCi1hbmQvb3IgTEYgd29ya3MgaW4gMjA5LCAyMDYsIGFuZCAy MDEgKGJ1dCBub3QgMjA4KS4gIGNrdWNtZC5jLCBja3V1c3IuYywKLWNrdXVzNS5jLCAxNSBNYXIg MjAwMy4KLQotTUlOUFVUIG4gXGZqb2luKCZhKSB3b3JrcyBPSyBpZiBhbGwgdGhlIG1lbWJlcnMg b2YgXCZhW10gYXJlIHRleHQgc3RyaW5ncywgYnV0Ci1pZiB0aGV5IGFyZSBzdHJpbmdzIG9mIGNv bnRyb2wgY2hhcnMgKGFzIGFib3ZlKSwgdGhleSBkb24ndCBnZXQgc2VwYXJhdGVkIGJ5Ci10aGUg c3BhY2VzLiAgRm9yIGV4YW1wbGUgaW46Ci0KLSAgZGNsIFwmYVtdID0gIlw0XDUiICJcNlw3IiB4 eHgKLSAgbWlucHV0IDEwIFxmam9pbigmYSkKLQotTUlOUFVUIGdldHMgdHdvIHRhcmdldHM6ICJh YWEiIGFuZCAiXDRcNSBcNlw3IHh4eCIuICBUaGUgYnVnIHdhcyBpbiB0aGUKLWNrc3BsaXQoKSBj YWxsIGluIHRoZSBcZmpvaW4oKSBjYXNlIG9mIE1JTlBVVDogaXQgbmVlZGVkIHRvIHNwZWNpZnkg YW4KLWluY2x1ZGUgc2V0IGNvbnNpc3Rpbmcgb2YgYWxsIHRoZSBjb250cm9sIGNoYXJhY3RlcnMg ZXhjZXB0IE5VTC4gIGNrdXVzci5jLAotMTYgTWFyIDIwMDMuCi0KLUJ1dCB0aGVyZSdzIHN0aWxs IGEgcHJvYmxlbToKLQotICBkY2wgXCZhW10gPSAiXDRcNVwxM1wxMCIgIlw2XDciICJ4eHgiCi0K LWNyZWF0ZXMgYW4gYXJyYXkgd2hvc2UgZmlyc3QgbWVtYmVyIGlzICJeRF5FIChvbmUgZG91Ymxl cXVvdGUgaW5jbHVkZWQpLiAgQnV0Ci1pZiBicmFjZXMgYXJlIHVzZWQgaW5zdGVhZCwgdGhlcmUn cyBubyBwcm9ibGVtLiAgU2FtZSBkZWFsIGFzIE1JTlBVVDogY21mbGQoKQotYnJlYWtzIG9uIENS IG9yIExGLCB0aHVzIHRoZSBlbmQgcXVvdGUgaXMgbG9zdC4gIElmIEkgc2V0IG1pbnB1dGFjdGl2 ZSBmb3IKLURFQ0xBUkUgaW5pdGlhbGl6ZXJzIHRvbywgdGhhdCBmaXhlcyBpdC4gIElzIHRoZXJl IGFueSByZWFzb24gbm90IHRvIGRvIHRoaXM/Ci1DYW4ndCB0aGluayBvZiBhbnkgKGZhbW91cyBs YXN0IHdvcmRzKS4uLiAgY2t1dXNyLmMsIDE2IE1hciAyMDAzLgotCi1TaW5jZSBpdCBoYXMgbXVs dGlwbGUgYXBwbGljYXRpb25zLCBjaGFuZ2VkIHRoZSBmbGFnJ3MgbmFtZSBmcm9tIG1pbnB1dGFj dGl2ZQotdG8ga2VlcGFsbGNoYXJzLiAgY2t1Y21kLmMsIGNrdXVzW3I1XS5jLCAxNiBNYXIgMjAw My4KLQotXHYoZXhlZGlyKSB3YXNuJ3QgYmVpbmcgc2V0IGNvcnJlY3RseSAoaXQgaW5jbHVkZWQg dGhlIHByb2dyYW0gbmFtZSBhcyB3ZWxsCi1hcyB0aGUgZGlyZWN0b3J5KS4gIEZpeGVkIGluIGdl dGV4ZWRpcigpOiBja3V1czQuYywgMTYgTWFyIDIwMDMuCi0KLVNFVCBDQVJSSUVSLVdBVENIIDxF c2M+ICJhdXRvIG1hdGljIiAoc3B1cmlvdXMgc3BhY2UgaW4gc3VwcGxpZWQga2V5d29yZCkuCi1D b3NtZXRpYyBvbmx5OyBpdCBzdGlsbCB3b3JrZWQuICBGaXhlZCBpbiBzZXRkY2QoKTogY2t1dXMz LmMsIDE2IE1hciAyMDAzLgotCi0iZGlyZWN0b3J5IGEgYiBjIiBsaXN0ZWQgdG9vIG1hbnkgZmls ZXMgLS0gYWxsIGZpbGVzIHdob3NlIG5hbWVzIEVORCBXSVRIIGEsCi1iLCBvciBjLCByYXRoZXIg dGhhbiB0aGUgZmlsZXMgd2hvc2UgbmFtZXMgV0VSRSBhLCBiLCBvciBjLiAgRGlhZ25vc2lzOiBU aGUKLWZpbGVzcGVjIGlzIGNoYW5nZWQgaW50byBhIHBhdHRlcm46IHthLGIsY30sIHdoaWNoIGlz IHRoZSBjb3JyZWN0IGZvcm0uICBJdCBpcwotcGFzc2VkIHRvIG56eHBhbmQoKSwgd2hpY2ggZ29l cyB0aHJvdWdoIHRoZSBkaXJlY3RvcnkgZ2V0dGluZyBmaWxlbmFtZXMgYW5kCi1zZW5kaW5nIGVh Y2ggb25lIHRvIGNrbWF0Y2goKSB3aXRoIHRoZSBnaXZlbiBwYXR0ZXJuLiAgY2ttYXRjaCgpIHJl Y2VpdmVzIHRoZQotY29ycmVjdCBwYXR0ZXJuIGJ1dCB0aGVuIHByZXBlbmRzIGEgIioiIC0tIHRo YXQncyBub3QgcmlnaHQuICBJdCdzIG5vdCBqdXN0Ci1pbiBmaWxlbmFtZSBtYXRjaGluZyBlaXRo ZXIuICBUaGUgZm9sbG93aW5nIHN1Y2NlZWRzIHdoZW4gaXQgc2hvdWxkbid0OgotCi0gIGlmIG1h dGNoIHh4eHhjIHt7YSxiLGN9fSA8Y29tbWFuZD4KLQotQ2hhbmdpbmcgY2ttYXRjaCgpIHRvIG5v dCBwcmVwZW5kIHRoZSAiKiIgdG8gZWFjaCBzZWdtZW50IGZpeGVzIHRoZSBjb21tYW5kCi1hYm92 ZSBidXQgYnJlYWtzIGxvdHMgb2Ygb3RoZXJzLiAgUnVubmluZyB0aHJvdWdoIHRoZSAibWF0Y2gi IHRvcnR1cmUtdGVzdAotc2NyaXB0IHNob3dzIHRoZSBwcm9ibGVtIG9jY3VycyBvbmx5IHdoZW4g dGhlIHthLGIsY30gbGlzdCBpcyB0aGUgZW50aXJlCi1wYXR0ZXJuLCBhbmQgbm90IGVtYmVkZGVk IHdpdGhpbiBhIGxhcmdlciBwYXR0ZXJuLiAgVGVzdGluZyBmb3IgdGhpcyBjYXNlCi1maXhlZCB0 aGUgcHJvYmxlbS4gIGNrbWF0Y2goKTogY2tjbGliLmMsIDE2IE1hciAyMDAzLgotCi1GaXhlZCBG VFAgTU9EVElNRSB0byBub3QgcHJpbnQgYW55dGhpbmcgaWYgUVVJRVQgT04uICBja2NmdHAuYywg MTYgTWFyIDIwMDMuCi0KLVBpY2tlZCB1cCBhIG5ldyBja3VhdGguYyBmcm9tIEplZmYsIG5vdCBz dXJlIHdoYXQgdGhlIGNoYW5nZXMgYXJlLiAxNiBNYXIgMjAwMy4KLQotRGlkIGEgZmV3IHJlZ3Vs YXIgYW5kIHNlY3VyZSBidWlsZHMgdG8gbWFrZSBzdXJlIEkgZGlkbid0IHdyZWNrIGFueXRoaW5n LgotCi1DaGFuZ2VkIHZlcnNpb24gbnVtYmVyIHRvIDIwOSAoZmluYWwpLiAgY2tjbWFpLmMsIDE2 IE1hciAyMDAzLgotCi1KYXNvbiBIZXNrZXR0IGZvdW5kIGFub3RoZXIgYnVnOiBpZiB5b3UgZGVm aW5lIGEgbWFjcm8gRk9PIGluc2lkZSB0aGUKLWRlZmluaXRpb24gb2YgYW5vdGhlciBtYWNybyBC QVIsIGFuZCBGT08ncyBkZWZpbml0aW9uIGluY2x1ZGVzIGFuIG9kZCBudW1iZXIKLW9mIGRvdWJs ZXF1b3RlcyAoc3VjaCBhcyAxKSwgRk9PJ3MgZGVmaW5pdGlvbiBhYnNvcmJzIHRoZSByZXN0IG9m IEJBUidzCi1kZWZpbml0aW9uLiAgRXhhbXBsZToKLQotICBkZWYgVEVTVCB7Ci0gICAgLmZvbyA9 IHtYIn0KLSAgICBzaG8gbWFjIGZvbwotICB9Ci0gIGRvIHRlc3QKLSAgc2hvIG1hYyBmb28KLQot UmVzdWx0cyBpbjoKLQotICBmb28gPSB7WCJ9LCBzaG8gbWFjIGZvbwotCi1EaWFnbm9zaXM6IHRo ZSBURVNUIGRlZmluaXRpb24gYmVjb21lczoKLQotICBkZWYgVEVTVCAuZm9vID0ge1gifSwgc2hv IG1hYyBmb28KLQotYW5kIHRoZSBtYWNybyByZWFkZXIgaXMgZXJyb25lb3VzbHkgdHJlYXRpbmcg dGhlIGRvdWJsZXF1b3RlIGFzIGFuIG9wZW4KLXF1b3RlLCBhbmQgdGhlbiBhdXRvbWF0aWNhbGx5 IGNsb3NlcyB0aGUgcXVvdGUgYXQgdGhlIGVuZCBvZiB0aGUgZGVmaW5pdGlvbi4KLVRoZSBlcnJv ciBpcyB0aGF0IGEgZG91YmxlcXVvdGUgc2hvdWxkIGJlIHNpZ25pZmljYW50IG9ubHkgYXQgdGhl IGJlZ2lubmluZyBvZgotYSBmaWVsZC4gIEJ1dCB0aGUgbWFjcm8gcmVhZGVyIGlzbid0IGEgY29t bWFuZCBwYXJzZXI7IGl0IGRvZXNuJ3Qga25vdyB3aGF0Ci1hIGZpZWxkIGlzIC0tIGl0J3MganVz dCBsb29raW5nIGZvciBjb21tYXMgYW5kIHNraXBwaW5nIG92ZXIgcXVvdGVkIG9uZXMuCi1GaXJz dCB3ZSBoYXZlIHRvIGZpeCBhbiBvdmVyc2lnaHQ6IFNFVCBDT01NQU5EIERPVUJMRVFVT1RJTkcg T0ZGIHNob3VsZCBoYXZlCi13b3JrZWQgaGVyZSwgYnV0IGl0IHdhc24ndCB0ZXN0ZWQgaW4gdGhp cyBjYXNlLiAgRml4ZWQgaW4gZ2V0bmNtKCk6IGNrdXVzNS5jLAotMTcgTWFyIDIwMDMuCi0KLVRo ZXJlIGFyZSBvbmx5IGNlcnRhaW4gY2FzZXMgd2hlcmUgaXQgbWFrZXMgc2Vuc2UgdG8gdHJlYXQg ZG91YmxlcXVvdGVzIGFzCi1zaWduaWZpY2FudDoKLQotIC4gQW4gb3BlbiBxdW90ZSBtdXN0IGJl IGF0IHRoZSBiZWdpbm5pbmcgb3IgcHJlY2VkZWQgYnkgYSBzcGFjZS4KLSAuIEEgY2xvc2UgcXVv dGUgaXMgb25seSBhdCB0aGUgZW5kIG9yIGVsc2UgZm9sbG93ZWQgYnkgYSBzcGFjZS4KLQotVGhp cyB0b28gd2FzIGZpeGVkIGluIGdldG5jbSgpOiBja3V1czUuYywgMTcgTWFyIDIwMDMuCi0KLUEg Zml4IGZyb20gSmVmZiBTU0wvVExTIEZUUCBkYXRhIGRlY29kaW5nLiAgY2tjZnRwLmMsIDE4IE1h ciAyMDAzLgotCi1UcmllZCBidWlsZGluZyBDLUtlcm1pdCBvbiBhIENyYXkgWS1NUCB3aXRoIFVO SUNPUyA5LjAuICAiaW50IHN1c3BlbmQiLAotZGVjbGFyZWQgaW4gY2tjbWFpLmMgYW5kIHVzZWQg aW4gbWFueSBtb2R1bGVzLCBjb25mbGljdHMgd2l0aDoKLQotICB1bmlzdGQuaDpleHRlcm4gaW50 IHN1c3BlbmQgX18oKGludCBfQ2F0ZWdvcnksIGludCBfSWQpKTsKLQotVGhlICI9RHN1c3BlbmQ9 eHN1c3BlbmQiIHRyaWNrIGRvZXNuJ3Qgd29yayBmb3IgdGhpczsgdGhlcmUgaXMgbm8gd2F5IGFy b3VuZAotdGhlIGNvbmZsaWN0IG90aGVyIHRoYW4gdG8gcmVuYW1lIHRoZSB2YXJpYWJsZTogY2tj bWFpLmMsIGNrdXRpby5jLAotY2t1dXNbMzV4eV0uYy4gIDI2IE1hciAyMDAzLiAgVk1TIGFuZCBL OTUgbm90IGFmZmVjdGVkLgotCi1PSyB0aGF0IGdldHMgdXMgcGFzdCBja2NtYWkuYy4uLiAgVGhl biBpbiBja3V0aW8uYyBJIGhhZCB0byBhZGQgYSBuZXcgI2lmZGVmCi1hcm91bmQgdGhlIExGREVW Tk8gc2V0dGluZywgYmVjYXVzZSB0aGUgQ3JheSBkaWRuJ3QgaGF2ZSBta2Rldi5oLiAgQ291bGQg bm90Ci1maW5kIGEgQ3JheS1zcGVjaWZpYyBtYW5pZmVzdCBzeW1ib2wsIHNvIEkgbWFkZSBhIG5l dyBtYWtlZmlsZSB0YXJnZXQgKGNyYXk5KQotdGhhdCBzZXRzIHRoaXMgc3ltYm9sLiAgSGF2aW5n IGRvbmUgdGhpcyBJIGhhdmUgbm8gaWRlYSB3aGF0IGtpbmQgb2YgbG9ja2ZpbGUKLXdvdWxkIGJl IGNyZWF0ZWQsIGJ1dCBJIGFsc28gZG91YnQgaWYgYW55Ym9keSBkaWFscyBvdXQgZnJvbSBhIENy YXkuICBUaGUKLWJpbmFyeSBzaG91bGQgcnVuIGEgQzkwLCBKOTAsIG9yIFktTVAuICBtYWtlZmls ZSwgMjYgTWFyIDIwMDMuCi0KLUFkZGVkIGEgdGFyZ2V0IGZvciBTQ08gT1NSNS4wLjcuICBtYWtl ZmlsZSwgY2t1dmVyLmgsIDMwIE1hciAyMDAzLgotCi1DaGFuZ2VkIHNpbmNlIDIwODoKLW1ha2Vm aWxlIGNrdXZlci5oIGNrY21haS5jIGNrY2xpYi5jIGNrY2Z0cC5jIGNrdWNtZC5jIGNrdXVzKi5j IGNrdXRpby5jLgotCi0tLS04LjAuMjA5LS0tCi0KLUZyb20gTWFyayBTYXBpcm8sIGEgZml4IGZv ciB0aGUgTWFyY2ggMTd0aCBkb3VibGVxdW90ZSBmaXgsIGdldG5jbSgpOiBja3V1czUuYywKLTQg QXByIDIwMDMuCi0KLUZyb20gSmVmZiwgMjkgQXByIDIwMDM6Ci0gLiBDb3JyZWN0ZWQgdGFyZ2V0 IGZvciBIUC1VWCAxMS4wMCArIE9wZW5TU0w6IG1ha2VmaWxlLCAKLSAuIERvIG5vdCBhbGxvdyBX SUxMIEFVVEggYmVmb3JlIFdPTlQgU1RBUlRfVExTOiBja2N0ZWwuaCBja2N0ZWwuYwotIC4gQWRk IGhvb2tzIGZvciBTRlRQIGFuZCBTRVQvU0hPVyBTRlRQOiBja2NkZWIuaCBja3V1c3IuaCBja3V1 c3IuYyBja3V1czMuYwotIC4gQWRkIFNLRVJNSVQgY2t1dXNyLmggY2t1dXNyLmMKLSAuIEFkZCBB RE0tNSB0ZXJtaW5hbCBlbXVsYXRpb246IGNrdXVzNy5jLCBja3V1czUuYwotIC4gVW5jb21tZW50 IGFuZCB1cGRhdGUgSEVMUCBTRVQgU1NIIFYyIEFVVE8tUkVLRVk6IGNrdXVzMi5jCi0gLiBFbmFi bGUgSUYgVEVSTUlOQUwtTUFDUk8gYW5kIElGIFNUQVJURUQtRlJPTS1ESUFMRVIgZm9yIEMtS2Vy bWl0OiBja3V1czYuYwotIC4gRml4IGNvbmZsaWN0aW5nIE5PU0NST0xMIGtleXdvcmQgZGVmaW5p dGlvbjogY2t1dXNyLmgKLSAuIFNldCB0dG5hbWUgd2hlbiBJX0FNX1NTSDogY2t1dXN5LmMKLSAu IEFkZCBleHRlbmRlZCBhcmcgcGFyc2luZyBmb3IgU1NILCBSbG9naW4sIFRlbG5ldDogY2t1dXN5 LmMsIGNrdXVzNC5jCi0gLiBTZWN1cml0eSB1cGRhdGVzOiBja3VhdGguYywgY2tfc3NsLmMKLSAu IENoYW5nZSBLOTUgdmVyc2lvbiBudW1iZXIgdG8gMi4yLjA6IGNrY21haS5jCi0gLiBTYXZlIEs5 NSB0ZXJtIGkvbyBzdGF0ZSBiZWZvcmUgZXhlY3V0aW5nIGtleWJvYXJkIG1hY3JvOiBja3V1czQu YwotIC4gQWRkIHRlc3RzIGZvciBTU0ggU3Vic3lzdGVtIGFjdGl2ZSBkdXJpbmcgSU5QVVQvT1VU UFVUL0NPTk5FQ1Q6IGNrdXVzWzQ1XS5jCi0gLiBFbmFibGUgSzk1IFNFVCBTU0ggVjIgQVVUTy1S RUtFWTogY2t1dXMzLmMKLQotU0ZUUCBhbmQgU0VUIFNGVFAgc3ViY29tbWFuZHMgYXJlIGltcGxl bWVudGVkIHVwIHRvIHRoZSBjYXNlIHN0YXRlbWVudHMuCi0KLUZpbGVzIG9mIG1pbmUgdGhhdCBK ZWZmIGhhZG4ndCBwaWNrZWQgdXA6Ci0gIGNrdXZlci5oIGNrY2Z0cC5jIGNrdXRpby5jIGNrdXVz eC5jIChqdXN0IG1pbm9yIGNoYW5nZXMgZm9yIGxhc3QgYnVpbGQtYWxsKQotCi1PbiA0IEphbiAy MDAzLCBTRVQgUkVDRUlWRSBNT1ZFLVRPIHdhcyBjaGFuZ2VkIHRvIGNvbnZlcnQgaXMgYXJndW1l bnQgdG8gYW4KLWFic29sdXRlIHBhdGgsIHdoaWNoIG1hZGUgaXQgaW1wb3NzaWJsZSB0byBzcGVj aWZ5IGEgcmVsYXRpdmUgcGF0aCwgdGhlbgotbW92ZSB0byBkaWZmZXJlbnQgZGlyZWN0b3JpZXMg YW5kIGhhdmUgaXQgYXBwbHkgcmVsYXRpdmVseSB0byBlYWNoIGRpcmVjdG9yeS4KLUNoYW5nZWQg dGhpcyBhcyBmb2xsb3dzOgotCi0gLiBQYXJzZXIgdXNlcyBjbXR4dCgpIHJhdGhlciB0aGFuIGNt ZGlyKCkgc28gaXQgd29uJ3QgZmFpbCBhdCBwYXJzZSB0aW1lLgotIC4gSWYgcGF0aCBpcyBhYnNv bHV0ZSwgd2UgZmFpbCBhdCBwYXJzZSB0aW1lIGlmIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0Lgot IC4gSW4gcmVvZigpIHdlIHJ1biB0aGUgdGhlIHBhdGggdGhyb3VnaCB4eHN0cmluZyAoYWdhaW4s IGluIGNhc2UgZGVmZXJyZWQKLSAgIGV2YWx1YXRpb24gb2YgdmFyaWFibGVzIGlzIGRlc2lyZWQp IGFuZCB0aGVuLCBpZiBub3QgbnVsbCwgdXNlIGl0LgotIC4gSWYgdGhlIGRpcmVjdG9yeSBkb2Vz bid0IGV4aXN0LCByZW5hbWUoKSBmYWlscyBhbmQgcmVvZigpIHJldHVybnMgLTQsCi0gICByZXN1 bHRpbmcgaW4gYSBwcm90b2NvbCBlcnJvciAodGhpcyBpcyBub3QgYSBjaGFuZ2UpLiAgV2UgZG8g Tk9UIGNyZWF0ZQotICAgdGhlIGRpcmVjdG9yeSBvbiB0aGUgZmx5LiAKLQotSSBhbHNvIGZpeGVk IFNFVCBTRU5EL1JFQ0VJVkUgUkVOQU1FLVRPIHRvIHBhcnNlIHdpdGggY210eHQoKSByYXRoZXIg dGhhbgotY21kaXIoKSwgc2luY2UgaXQncyBwYXJzaW5nIGEgdGV4dCB0ZW1wbGF0ZSwgbm90IGEg ZGlyZWN0b3J5IG5hbWUsIGUuZy4KLSJzZXQgcmVjZWl2ZSByZW5hbWUtdG8gZmlsZS1cdih0aW1l KS12KGRhdGUpLVx2KHBpZCkiLiAgVGhpcyB3YXMgdG90YWxseQotYnJva2VuLCBzaW5jZSB3aGVu IEkgZG9uJ3Qga25vdy4gIFdlIGRvbid0IGNhbGwgeHhzdHJpbmcoKSBpbiB0aGlzIHBhcnNlLCBz bwotZXZhbHVhdGlvbiBpcyBhbHdheXMgZGVmZXJyZWQgLS0gSSdkIGJldHRlciBub3QgY2hhbmdl IHRoaXMuICBja3V1czcuYywKLWNrY2Zucy5jLCAxIE1heSAyMDAzLgotCi1Gcm9tIEplZmYsIFNh dCBNYXkgIDMgMTQ6MTU6MjMgMjAwMzoKLSAuIFBpY2sgdXAgdGhlIHJpZ2h0IGlzYXNjaWkgZGVm aW5pdGlvbiBmb3IgSzk1OiBja2N0ZWwuYwotIC4gbWFsbG9jLi4uICBja3VhdGguYyAobmV3IHNh ZmUgbWFsbG9jIHJvdXRpbmVzIGZvciBLOTUpCi0gLiBBZGQgYXV0aG9yIGxpc3Rpbmc6IGNrdXVz NS5jCi0gLiBTU0ggSGVhcnRiZWF0IHN1cHBvcnQgKEs5NSBvbmx5KTogY2t1dXNbMjNdLmMKLSAu IFByZXNjYW4gLS1oZWlnaHQgYW5kIC0td2lkdGggdG8gYXZvaWQgd2luZG93IHJlc2l6aW5nIGF0 IHN0YXJ0dXA6IGNrdXVzeS5jCi0gLiBBZGQgY2hlY2tzIGZvciBmYXRhbCgpIG9yIGRvZXhpdCgp IGNhbGxlZCBmcm9tIHN5c2luaXQoKTogY2t1dXN4LmMKLSAuIE1vdmUgc29tZSBLOTUtc3BlY2lm aWMgZGVmaW5pdGlvbnMgdG8gY2tva2VyLmg6IGNrY2RlYi5oCi0gLiBBZGQgc3VwcG9ydCBmb3Ig T05fQ0QgbWFjcm8gaW4gemNoZGlyKCk6IGNrdWZpby5jCi0gLiBBZGQgYSBjb21tYW5kIHRvIGxl dCBGVFAgY2xpZW50IGF1dGhlbnRpY2F0ZSB3aXRoIFNTTHYyOiBja2NmdHAuYwotIC4gRml4IHBh cnNpbmcgb2YgRlRQIGZpbGUgZmFjdHMgbGlrZSAiVU5JWC5tb2RlIjogY2tjZnRwLmMKLQotT05f Q0Qgd2lsbCBuZWVkIHNvbWUgZXhwbGFpbmluZyAodG8gYmUgZG9uZSkuICBJdCdzIGltcGxlbWVu dGVkIGZvciBVbml4LAotVk1TLCBXSW5kb3dzLCBhbmQgT1MvMi4KLQotVGhlIEZUUCBmaWxlIGZh Y3RzIGZpeCBjYW1lIGZyb20gZmlyc3QgZXhwb3N1cmUgdG8gdGhlIG5ldyBPcGVuQlNEIEZUUAot c2VydmVyOiBmdHA6Ly9mdHA3LnVzYS5vcGVuYnNkLm9yZy9wdWIvb3MvT3BlbkJTRC8zLjMvaTM4 Ni8KLVRoZSBwZXJpb2QgaW4gIlVOSVgubW9kZSIgY2F1c2VkIGFuIGVycm9uZW91cyB3b3JkIGJy ZWFrLCBhZGRpbmcganVuayB0bwotdGhlIGZpbGVuYW1lLgotCi1BYm91dCB0aGUgbWFsbG9jIGNo YW5nZXMsIEplZmYgc2F5cyAiSzk1IGlzIG5vdCBiZWhhdmluZyB3ZWxsIGluIGxvdyBtZW1vcnkK LWVudmlyb25tZW50cy4gIEknbSBub3Qgc3VyZSB0aGF0IEMtS2VybWl0IGRvZXMgbXVjaCBiZXR0 ZXIuICBUaGUgcHJvZ3JhbSBkb2VzCi1ub3QgY3Jhc2ggYnV0IGl0IGNlcnRhaW5seSBkb2VzIG5v dCBiZWhhdmUgdGhlIHdheSB0aGUgdXNlciBleHBlY3RzIGl0IHRvLgotSSdtIGJlZ2lubmluZyB0 byB0aGluayB0aGF0IGFueSBtYWxsb2MoKSBlcnJvciBzaG91bGQgYmUgdHJlYXRlZCBhcyBmYXRh bC4iCi0KLU5vdCB2aXNpYmxlIGluIHRoZXNlIGNoYW5nZXMgYmVjYXVzZSBpdCdzIGluIEs5NS1z cGVjaWZpYyBtb2R1bGVzOiBKZWZmIG1hZGUKLVNFVCBBVFRSSUJVVEVTIE9GRiBhbmQgU0VUIEFU VFJJQlVURVMgREFURSBPRkYgYXBwbHkgdG8gWFlaTU9ERU0gdHJhbnNmZXJzLgotCi1Gcm9tIEpl ZmYsIDExIE1heSAyMDAzOgotIC4gQWRkIHN1cHBvcnQgZm9yIFNTSCBLZWVwYWxpdmUgdG8gcmVs ZXZhbnQgU0VUIGNvbW1hbmQgKEs5NSk6IGNrdXVzMy5jCi0gLiBSZWR1Y2UgbWF4IG92ZXJsYXBw ZWQgaS9vIHJlcXVlc3RzIGZyb20gMzAgdG8gNyAoSzk1KTogY2t1dXM3LmMKLSAuIERvbid0IGNh bGwgc3lzaW5pdCgpIGluIGZhdGFsKCk6IGNrdXVzeC5jLgotIC4gU29tZSBuZXcgY29uZGl0aW9u YWxpemF0aW9ucyBmb3IgU1NMIG1vZHVsZTogY2tfc3NsLmMKLQotVGhlIGRvdWJsZXF1b3RlLXBh cnNpbmcgZml4ZXMgZnJvbSBNYXJjaCBhbmQgQXByaWwgYnJva2UgdGhlIFNXSVRDSCBzdGF0ZW1l bnQsCi13aGljaCBpcyBpbXBsZW1lbnRlZCBieSBpbnRlcm5hbGx5IGRlZmluaW5nLCB0aGVuIGV4 ZWN1dGluZywgYSBtYWNyby4gIElmIEkKLWRyb3AgYmFjayB0byB0aGUgb2xkIGR1bWIgaGFuZGxp bmcgb2YgZG91YmxlcXVvdGVzLCBldmVyeXRoaW5nIGlzIGZpeGVkIGV4Y2VwdAotdGhlIHByb2Js ZW0gb2YgTWFyY2ggMTd0aC4gIEJ1dCBjYW4gd2UgcmVhbGx5IGV4cGVjdCBnZXRuY20oKSB0byBw cmUtZ3Vlc3MKLXdoYXQgdGhlIHBhcnNlciBpcyBnb2luZyB0byBkbz8gIGdldG5jbSgpJ3Mgb25s eSBqb2IgaXMgdG8gZmluZCBjb21tYW5kCi1ib3VuZGFyaWVzLCB3aGljaCBhcmUgcmVwcmVzZW50 ZWQgYnkgY29tbWFzLiAgQ29tbWFzLCBob3dldmVyLCBpcyBuZWVkZWQgSU4KLWNvbW1hbmRzIHRv by4gIFdlIHRha2UgYSBjb21tYSBsaXRlcmFsbHkgaWYgaXQgaXMgcXVvdGVkIHdpdGggXCwgb3Ig aXMgaW5zaWRlCi1hIG1hdGNoZWQgcGFpciBvZiBicmFjZXMsIHBhcmVucywgb3IgZG91YmxlcXVv dGVzLiAgSXQgaXMgbm90IHVucmVhc29uYWJsZSB0bwotcmVxdWlyZSBhIGRvdWJsZXF1b3RlIGlu IGEgbWFjcm8gZGVmaW5pdGlvbiB0byBiZSBwcmVmaXhlZCBieSBcIHdoZW4gaXQgaXMgdG8KLWJl IHRha2VuIGxpdGVyYWxseS4gIFRoZSBwcm9wZXIgcmVzcG9uc2UgdG8gSmFzb24gSGVza2V0dCdz IGNvbXBsYWludCBvZiBNYXJjaAotMTd0aCBzaG91bGQgaGF2ZSBiZWVuIHRvIGxlYXZlIHRoZSBj b2RlIGFsb25lIGFuZCByZWNvbW1hbmQgYW4gYXBwcm9wcmlhdGUKLWZvcm0gb2YgcXVvdGluZzoK LQotICBkZWYgVEVTVCB7Ci0gICAgICAuZm9vID0ge1hcIn0KLSAgICAgIHNobyBtYWMgZm9vCi0g IH0KLQotQW5kIHRoaXMgaXMgd2hhdCBJIGhhdmUgZG9uZS4gIEFub3RoZXIgcmVhc29uIGZvciBz dGlja2luZyB3aXRoIHRoZSBvbGQgbWV0aG9kCi1pcyB0aGF0IGl0J3MgZXhwbGFpbmFibGUuICBU aGUgImltcHJvdmVkIiBtZXRob2QsIGV2ZW4gaWYgaXQgd29ya2VkLCB3b3VsZCBiZQotYmUgaW1w b3NzaWJsZSB0byBleHBsYWluLiAgQnR3LCBpbiB0ZXN0aW5nIHRoaXMgSSBub3RpY2VkIHRoYXQg dGhlIHN3aXRjaC10ZXN0Ci1zY3JpcHQgbWFkZSA4LjAuMjAxIGR1bXAgY29yZS4gIFRvZGF5J3Mg dmVyc2lvbiBpcyBmaW5lLiAgVGhlIHByb2JsZW0gd2l0aAotcXVvdGVkIHN0cmluZ3MgaW5zaWRl IG9mIElGIHsuLi59IGNsYXVzZXMgYW5kIEZPUiBhbmQgV0hJTEUgbG9vcHMgaXMgZml4ZWQKLXRv by4gIFBlcmhhcHMgInVuYnJva2VuIiB3b3VsZCBiZSBhIGJldHRlciB3b3JkLiAgY2t1dXM1LmMs IDExIE1heSAyMDAzLgotCi1WYWNlIGRpc2NvdmVyZWQgdGhhdCBGVFAgTUdFVCAvRVhDRVBUOnsu Li4gKHdpdGggYW4gdW50ZXJtaW5hdGVkIC9FWENFUFQgbGlzdCkKLWNvdWxkIGNyYXNoIEtlcm1p dC4gIEZpeGVkIGluIGNrY2Z0cC5jLCAxMSBNYXkgMjAwMy4KLQotQ09OVElOVUUgc2hvdWxkIG5v dCBhZmZlY3QgU1VDQ0VTUy9GQUlMVVJFIHN0YXR1cy4gIGNrdXVzci5jLCAxMSBNYXkgMjAwMy4K LQotRml4ZWQgYW4gb3ZlcnNpZ2h0IHRoYXQgZ29lcyBiYWNrIDE1IHllYXJzLiAgV2hpbGUgXHsx MjN9IGlzIGFsbG93ZWQgZm9yCi1kZWNpbWFsIGNvZGVzLCBceHsxMn0gYW5kIFxvezEyM30gd2Vy ZSBuZXZlciBoYW5kbGVkLiAgY2t1Y21kLmMsIDExIE1heSAyMDAzLgotCi1BZGRlZCBzdXBwb3J0 IGZvciBSZWQgSGF0IDxiYXVkYm95Lmg+IGFuZCAvdXNyL3NiaW4vbG9ja2Rldi4gIFN1cHBvc2Vk bHkgdGhpcwotYWxsb3dzIEtlcm1pdCB0byBiZSBpbnN0YWxsZWQgd2l0aG91dCBzZXR1aWQgb3Ig c2V0Z2lkIGJpdHMgYW5kIHN0aWxsIGJlIGFibGUKLXRvIGxvY2sgYW5kIHVzZSB0aGUgc2VyaWFs IGRldmljZS4gIENvbXBpbGVzIGFuZCBzdGFydHMsIGJ1dCBub3QgdGVzdGVkLgotY2tjZGViLmgs IG1ha2VmaWxlLCBja3V0aW8uYywgY2t1dXM1LmMsIDE2IE1heSAyMDAzLgotCi1Gcm9tIEplZmY6 IEZUUCBBU0NJSSBzZW5kIGRhdGEgdG8gaG9zdCB3aGVuIEZUUCAvU1NMIHdhcyBpbiB1c2Ugd2Fz IGJyb2tlbi4KLWZ0cF9kcGwgaXMgc2V0IHRvIENsZWFyIHdoZW4gRlRQIC9TU0wgaXMgaW4gdXNl LiAgVGhpcyB3YXMgY2F1c2luZyB0aGUgZGF0YSB0bwotYmUgd3JpdHRlbiB0byB0aGUgc29ja2V0 IHdpdGggc2VuZCgpIGluc3RlYWQgb2YgdGhlIE9wZW5TU0wgcm91dGluZXMuCi1ja2NmdHAuYywg Y2t1YXRoLmMsIDIxIE1heSAyMDAzLgotCi1Gcm9tIEplZmY6IFN0dWZmIGZvciBLZXJiZXJvcyA1 MjQ6IGNrY2RlYi5oLiAgRml4ZXMgZm9yIEZUUDsgIkZUUCBBU0NJSSBzZW5kCi1kYXRhIGRpZCBu b3QgcHJvcGVybHkgY29tcHV0ZSB0aGUgZW5kIG9mIGxpbmUgdHJhbnNsYXRpb25zLiAgT24gVW5p eCAoYW5kCi1zaW1pbGFyIHBsYXRmb3JtcykgdGhlIGVuZCBvZiBsaW5lIHdhcyBjb3JyZWN0IGZv ciBubyBjaGFyYWN0ZXIgc2V0cyBidXQKLWluY29ycmVjdCB3aGVuIGNoYXJhY3RlciBzZXRzIHdl cmUgc3BlY2lmaWVkLiAgT24gV2luZG93cy9PUzIsIHRoZSBlbmQgb2YgbGluZQotd2FzIGNvcnJl Y3Qgd2hlbiBjaGFyYWN0ZXIgc2V0cyB3ZXJlIHNwZWNpZmllZCBhbmQgaW5jb3JyZWN0IHdoZW4g dGhleSB3ZXJlCi1ub3QuICBPbiBNQUMsIGJvdGggd2VyZSBicm9rZW4uICBBbHNvLCBGVFAgU2Vu ZCBCeXRlIGNvdW50cyB3ZXJlIGluY29ycmVjdAotd2hlbiBjaGFyYWN0ZXIgc2V0cyB3ZXJlIHNw ZWNpZmllZC4iICBja2NmdHAuYy4gIDE3IEp1biAyMDAzLgotCi1Gcm9tIEplZmY6IGZpeGVzIHRv IEhUVFAgL0FHRU5UOiBhbmQgL1VTRVI6IHN3aXRjaCBhY3Rpb246IGNrY25ldC5jIGNrdXVzMy5j Ci1ja19jcnAuYyBja2NmdHAuYyBja3V1czIuYyBja3V1c3kuYyBja3V1c3IuYyBja2NuZXQuaCwg MjEgSnVuIDIwMDMuCi0KLUZyb20gSmVmZjogRml4IFNFVCBESUFMRVIgQkFDS1NQQUNFIHNvIGl0 IGNhbiBvdmVycmlkZSBhIHByZXZpb3VzIFNFVCBLRVkKLShlLmcuIGZyb20gSU5JIGZpbGUpOiBj a3V1czcuYy4gIFNvbWUgU1NML1RMUyB1cGRhdGVzOiBja19zc2wuYy4gIEhUVFAgc3VwcG9ydAot Zm9yIFZNUyBhbmQgb3RoZXIgVk1TIGltcHJvdmVtZW50cyAoZS5nLiBhIHdheSB0byBub3QgaGF2 ZSB0byBoYXJkd2lyZSB0aGUKLUMtS2VybWl0IHZlcnNpb24gbnVtYmVyIGludG8gdGhlIGJ1aWxk IHNjcmlwdCkgZnJvbSBNYXJ0aW4gVm9ybGFlbmRlcjoKLWNrY25ldC5oLCBja3V1c1tyM10uYywg Y2tjZGViLmgsIGNrdnRpby5jLCBja2NuZXQuYywgY2t2a2VyLmNvbS4gIEJ1aWx0IG9uCi1Tb2xh cmlzIChnY2MvYW5zaSkgYW5kIFN1bk9TIChjYy9rJnIpLiAgVGhlIG5ldyBWTVMgc2NyaXB0IHRl c3RzIHRoZSBWTVMKLXZlcnNpb24gYW5kIGluY2x1ZGVzIEhUVFAgc3VwcG9ydCBvbmx5IGZvciBW TVMgNi4yIG9yIGxhdGVyLiAgMiBKdWwgMjAwMy4KLQotVHJpZWQgdG8gYnVpbGQgb24gb3VyIGxh c3QgVk1TIHN5c3RlbSBidXQgaXQgc2VlbXMgdG8gYmUgZGVhZC4gIExvb2tzIGxpa2UgYQotaGVh ZCBjcmFzaCAobWFrZXMgcmVhbGx5IGxvdWQgbm9pc2VzLCBib290IHNheXMgREtBMCBub3QgcmVj b2duaXplZCkgKGZvb2V5LCBJCi1qdXN0IHBhaWQgZ29vZCBtb25leSB0byByZW5ldyB0aGUgVk1T IGxpY2Vuc2UpLiAgVHJpZWQgYnVpbGRpbmcgYXQgYW5vdGhlcgotc2l0ZSB3aXRoOgotCi0gIFBy b2Nlc3MgU29mdHdhcmUgTXVsdGlOZXQgVjQuMyBSZXYgQS1YLAotICBDb21wYXEgQWxwaGFTZXJ2 ZXIgRVM0MCwgT3BlblZNUyBBWFAgVjcuMwotICBDb21wYXEgQyBWNi40LTAwOCBvbiBPcGVuVk1T IEFscGhhIFY3LjMKLQotSGFkIHRvIG1ha2UgYSBmZXcgY29ycmVjdGlvbnMgdG8gY2t2a2VyLmNv bS4gIEJ1dCBzdGlsbCwgY29tcGlsYXRpb24gb2YKLWNrY25ldC5jIGJvbWJzLCBpbmRpY2F0aW5n IHRoYXQgdGhlIFNFTEVDVCBkZWZpbml0aW9uIHNvbWVob3cgZ290IGxvc3QKLXNvbWV3aGVyZSBz aW5jZSB0aGUgMjA5IHJlbGVhc2UgKGkuZS4gbm8gU0VMRUNUIHR5cGUgaXMgZGVmaW5lZCBzbyBp dCBmYWxscwotdGhydSB0byAiU0VMRUNUIGlzIHJlcXVpcmVkIGZvciB0aGlzIGNvZGUiKS4gIEJ1 dCBJIGRvbid0IHNlZSBhbnl0aGluZyBpbgotY2tjZGViLmggb3IgY2tjbmV0LltjaF0gdGhhdCB3 b3VsZCBleHBsYWluIHRoaXMuICBOb3QgY2t2a2VyLmNvbSBlaXRoZXIKLShwdXR0aW5nIHRoZSBv bGQgb25lIGJhY2sgZ2l2ZXMgdGhlIHNhbWUgcmVzdWx0KS4gIE9LLCBJIGdpdmUgdXAsIG1heWJl IGl0J3MKLWp1c3QgdGhhdCBJIGhhdmVuJ3QgdHJpZWQgYnVpbGRpbmcgaXQgb24gTXVsdGlOZXQg cmVjZW50bHkuICBXaGF0IGFib3V0IFVDWD8KLUFoYSwgYnVpbGRzIGZpbmUgdGhlcmUgZXhjZXB0 IGZvciB3YXJuaW5ncyBhYm91dCBtbG9vaywgZG9kbywgYW5kIHBhcnNlciBpbgotY2t2ZmlvLmMg KGJlY2F1c2Ugb2YgT05fQ0QpIC0tIEkgc3VwcG9zZSBJIGhhdmUgI2luY2x1ZGUgPGNrdWNtZC5o Pi4uLiAoZG9uZSkKLUFueWhvdyBpdCBidWlsZHMgT0sgYW5kIHRoZSBIVFRQIGNvZGUgaXMgYWN0 aXZlIGFuZCBhbG1vc3Qgd29ya3MgKEhUVFAgT1BFTgotd29ya3M7IEhUVFAgR0VUIHNlZW1zIHRv IHN1Y2NlZWQgYnV0IGNyZWF0ZXMgYW4gZW1wdHkgZmlsZSBldmVyeSB0aW1lKS4gIFRyaWVkCi1i dWlsZGluZyB1bmRlciBNdWx0aU5ldCBhdCBhbm90aGVyIGluc3RhbGxhdGlvbjsgc2FtZSBiYWQg cmVzdWx0LgotCi1PSyBzbyB3aHkgd29uJ3QgaXQgYnVpbGQgZm9yIE11bHRpTmV0PyAgQ29tcGFy aW5nIGNrY25ldC5jIHdpdGggdGhlIDIwOQotdmVyc2lvbiwgbm90IGEgc2luZ2xlICNpZmRlZiBv ciAjaW5jbHVkZSBpcyBjaGFuZ2VkLiAgVHJpZWQgYnVpbGRpbmcgd2l0aAotcDM9Ik5PSFRUUCIg LS0gYnVpbGRzIE9LLCBhaGEuICBXaGVyZSdzIHRoZSBwcm9ibGVtPyAgTm90IGNrY25ldC5oLi4u Ci1Ob3QgY2tjZGViLmguLi4gIE9LIEkgZ2l2ZSB1cCwgd2lsbCByZXZpc2l0IHRoaXMgbmV4dCB0 aW1lIEkgZ2V0IHRpbWUgdG8KLWRvIGFueXRoaW5nIHdpdGggdGhlIGNvZGUuCi0KLUxhdGVyIEpl ZmYgc2FpZCAiTWFydGluIGRpZCBub3QgaW1wbGVtZW50IFZNUyBuZXR3b3JraW5nIGZvciB0aGUg SFRUUCBjb2RlLgotQWxsIGhlIGRpZCB3YXMgYWN0aXZhdGUgdGhlICNkZWZpbmUgSFRUUCB3aGlj aCBoYXBwZW5zIHRvIHdvcmsgYmVjYXVzZSBoaXMKLWNvbm5lY3Rpb25zIGFyZSB1c2luZyBTU0wv VExTIGNvbm5lY3Rpb25zLiAgaHR0cF9pbmMoKSwgaHR0cF90b2woKSwgZXRjIGhhdmUKLW5vIHN1 cHBvcnQgZm9yIFZNUyBuZXR3b3JraW5nIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyBVQ1gg b3IgTVVMVElORVQuCi1UaGUgdmFzdCBtYWpvcml0eSBvZiBIVFRQIGNvbm5lY3Rpb25zIGFyZSBu b3Qgc2VjdXJlZCBieSBTU0wvVExTLiAgSXQgbWFrZXMgbm8KLXNlbnNlIHRvIHN1cHBvcnQgSFRU UCBvbiBWTVMgdW50aWwgc29tZW9uZSBpcyB3aWxsaW5nIHRvIGVpdGhlciBkbyB0aGUgd29yayBv cgotcGF5IGhhdmUgdGhlIHdvcmsgZG9uZSB0byBpbXBsZW1lbnQgVk1TIG5ldHdvcmtpbmcgaW4g dGhhdCBjb2RlIGJhc2UuIiAgU28gdGhlCi1maXggaXMgdG8gbm90IGVuYWJsZSBIVFRQIGZvciBW TVMgYWZ0ZXIgYWxsLiAgUmVtb3ZlZCB0aGUgQ0tIVFRQIGRlZmluaXRpb24KLWZvciBWTVMgZnJv bSBja2NkZWIuaCwgNiBKdWwgMjAwMy4KLQotRml4ZWQgY2t2ZmlvLmMgdG8gI2luY2x1ZGUgPGNr dXVzci5oPiAoaW5zdGVhZCBvZiA8Y2t1Y21kLmg+KSB0byBwaWNrIHVwIAotbWlzc2luZyBwcm90 b3R5cGVzLiAgNiBKdWwgMjAwMy4KLQotRnJvbSBBcnRodXIgTWFyc2g6IHNvbGFyaXMyeGcrb3Bl bnNzbCt6bGliK3NycCtwYW0rc2hhZG93IGFuZCB0aGUgY29ycmVzcG9uZGluZwotU29sYXJpcyA3 IHRhcmdldC4gIG1ha2VmaWxlLCA2IEp1bCAyMDAzLgotCi1SZW1vdmUgZHVwbGljYXRlICNpbmNs dWRlcyBmb3IgPHN5cy9zdGF0Lmg+LCA8ZXJybm8uaD4sIGFuZCA8Y3R5cGUuaD4gZnJvbQotY2tj ZnRwLmMuICA2IEp1bCAyMDAzLgotCi1BZGQgLURVU0VfTUVNQ1BZIHRvIE1vdG9yb2xhIFNWLzY4 IHRhcmdldHMgYmVjYXVzZSBvZiBzaHVmZmxlZCAjaW5jbHVkZXMgaW4gCi1ja2NmdHAuYy4gIDgg SnVsIDIwMDMuCi0KLUZyb20gSmVmZjogRml4IHByb2JsZW1zIG1peGluZyBTU0wgYW5kIFNSUCB3 aXRob3V0IEtlcmJlcm9zLiAgUGx1cyBhIGZldyBtaW5vcgotI2RlZmluZSBjb21tZW50IGNoYW5n ZXMgYW5kIGEgcmVzaHVmZmxpbmcgb2YgI2RlZmluZXMgaW4gY2tjZGViLmggdG8gYWxsb3cgbWUK LXRvIGJ1aWxkIG9uIFg4NiBXaW5kb3dzIHdpdGhvdXQgS2VyYmVyb3MuICBja2NkZWIuaCwgY2tf Y3JwLmMsIGNrdWF0aC5jLAotMTAgSnVsIDIwMDMuCi0KLUZyb20gSmVmZjogdXBkYXRlZCBja3Vh dDIuaCBhbmQgY2t1YXRoLmMsIDI5IEp1bCAyMDAzLgotCi1NYXRzIFBldGVyc29uIG5vdGljZWQg dGhhdCBhIHZlcnkgc21hbGwgTGF0aW4tMSBmaWxlIHdvdWxkIGJlIGluY29ycmVjdGx5Ci1pZGVu dGlmaWVkIGFzIFVDUy0yIGJ5IHNjYW5maWxlKCkuICBGaXhlZCBpbiBja3V1c3guYywgMjkgSnVs IDIwMDMuCi0KLUZpeGVkIEFDQ0VTUyBtYWNybyBkZWZpbml0aW9uIHRvIGFjY291bnQgZm9yIHRo ZSBmYWN0IHRoYXQgRklORCBpcyBub3cgYQotYnVpbHQtaW4gY29tbWFuZC4gIGNrZXJtaXQuaW5p LCAzMCBKdWwgMjAwMy4KLQotRnJvbSBKZWZmOiBGaXggZm9yIHR5cG8gaW4gdXJscGFyc2UoKSAo c3ZjL2hvcyk6IGNrdXVzeS5jLCAxOCBBdWcgMjAwMy4KLQotRnJvbSBKZWZmOiBSZWRoYXQ5IG1h a2VmaWxlIHRhcmdldHMgKG5lZWRlZCBmb3IgZm9yIE9wZW5TU0wgMC45LjcpOgotbWFrZWZpbGUs IDE5IEF1ZyAyMDAzLgotCi1HUkVQIC9OT0xJU1QgYW5kIC9DT1VOVCBkaWQgdG9vIG11Y2ggbWFn aWMsIHdpdGggc29tZSB1bmRlc2lyYWJsZSBmYWxsb3V0OgotIkdSRVAgL05PTElTVCAvQ09VTlQ6 eCBhcmdzIiBwcmludGVkICJmaWxlOmNvdW50IiBmb3IgZWFjaCBmaWxlLiAgIkdSRVAKLS9DT1VO VDp4IC9OT0xJU1QgYXJncyIgZGlkIG5vdCBwcmludCAiZmlsZTpjb3VudCIsIGJ1dCBuZWl0aGVy IGRpZCBpdCBzZXQgdGhlCi1jb3VudCB2YXJpYWJsZS4gIFJlbW92ZWQgdGhlIG1hZ2ljLiAgQWxz byBvbmUgb2YgdGhlIEdSRVAgc3dpdGNoZXMsCi0vTElORU5VTUJFUlMsIHdhcyBvdXQgb2Ygb3Jk ZXIuICBGaXhlZCBpbiBja3V1czYuYywgMjAgQXVnIDIwMDMuCi0KLUZyb20gSmVmZjogIlJlb3Jn YW5pemluZyBjb2RlIHRvIGVuYWJsZSBidWlsZGluZyB3aXRoIGRpZmZlcmVudCBzdWJzZXRzIG9m Ci1vcHRpb25zOyBhIGZldyB0eXBvcyBjb3JyZWN0ZWQgYXMgd2VsbC4iICBja2NkZWIuaCwgY2t1 dmVyLmggKGZvciBSSDkpLAotY2tjbmV0LmMsIGNrdXVzNy5jLCBja3V1czMuYzogMjQgQXVnIDIw MDMuCi0KLVNjYW5maWxlIG1pc2lkZW50aWZpZWQgYSBiaWcgUERGIGZpbGUgYXMgdGV4dCBiZWNh dXNlIHRoZSBmaXJzdCA4MDBLIG9mIGl0Ci0qd2FzKiB0ZXh0IChtb3N0IG90aGVyIFBERiBmaWxl cyB3ZXJlIGNvcnJlY3RseSB0YWdnZWQgYXMgYmluYXJ5KS4gIEZpeGVkCi1ieSBhZGRpbmcgYSBj aGVjayBmb3IgdGhlIFBERiBzaWduYXR1cmUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4K LXNjYW5maWxlKCk6IGNrdXVzeC5jLCAyNSBBdWcgMjAwMy4KLQotRGl0dG8gZm9yIFBvc3RTY3Jp cHQgZmlsZXMsIGJ1dCBjb25zZXJ2YXRpdmVseS4gIFNpZ25hdHVyZSBhdCBiZWdpbm5pbmcgb2YK LWZpbGUgbXVzdCBiZWdpbiB3aXRoICIlIVBTLUFkbyIuICBJZiBpdCdzIGp1c3QgIiUhIiAob3Ig c29tZXRoaW5nIG5vbnN0YW5kYXJkCi1saWtlICIlJUNyZWF0b3I6IFdpbmRvd3MgUFNDUklQVCIp IHdlIGRvIGEgcmVndWxhciBzY2FuLiAgQWxzbyBhZGRlZCAiKi5wcyIKLXRvIGFsbCBiaW5hcnkg ZmlsZW5hbWUgcGF0dGVybnMuICBja3V1c3guYywgNCBTZXAgMjAwMy4KLQotRGl0dG8gKGJ1dCB3 aXRoaW4gI2lmbmRlZiBOT1BDTFNDQU4pIGZvciBQQ0wgKDxFU0M+RSkgYW5kIFBKTCAoPEVTQz4l KSBmaWxlcywKLWJ1dCBubyBiaW5wYXR0ZXJucyAobm90ZTogIi5QQ0wiIGlzIHRoZSBleHRlbnNp b24gZm9yIFRPUFMtMjAgRVhFQyBzY3JpcHRzKS4KLWNrdXVzeC5jLCA0IFNlcCAyMDAzLgotCi1B ZGRlZCBjb21tZW50cyBhYm91dCBPcGVuU1NMIDAuOS43IHRvIGFsbCBsaW51eCtvcGVuc3NsIHRh cmdldHMuCi1tYWtlZmlsZSwgNCBTZXAgMjAwMy4KLQotRnJvbSBKZWZmOiBBZGRlZCAtICNkZWZp bmUgQUxMT1dfS1JCXzNERVNfRU5DUllQVC4gIFdoZW4gdGhpcyBzeW1ib2wgaXMgZGVmaW5lZAot YXQgY29tcGlsYXRpb24gS2VybWl0IHdpbGwgYWxsb3cgbm9uLURFUyBzZXNzaW9uIGtleXMgdG8g YmUgdXNlZCBkdXJpbmcgVGVsbmV0Ci1BdXRoLiAgVGhlc2Ugc2Vzc2lvbiBrZXlzIGNhbiB0aGVu IGJlIHVzZWQgZm9yIFRlbG5ldCBFbmNyeXB0LiAgVGhlIHJlYXNvbgotdGhpcyBpcyBub3QgY29t cGlsZWQgb24gYnkgZGVmYXVsdCBpcyB0aGF0IHRoZSBNSVQgS2VyYmVyb3MgVGVsbmV0IGRvZXMg bm90Ci1mb2xsb3cgdGhlIFJGQyBmb3IgY29uc3RydWN0aW5nIGtleXMgZm9yIEVOQ1JZUFQgREVT IHdoZW4gdGhlIGtleXMgYXJlIGxvbmdlcgotdGhhbiA4IGJ5dGVzIGluIGxlbmd0aC4gIGNrdWF0 aC5jLCBja3V1czUuYywgNCBTZXAgMjAwMy4KLQotImZ0cCBtZ2V0IGEgYiBjIiBzdWNjZWVkZWQg aWYgb25lIG9yIG1vcmUgb2YgdGhlIGZpbGVzIGRpZCBub3QgZXhpc3QsIGV2ZW4KLXdpdGggInNl dCBmdHAgZXJyb3ItYWN0aW9uIHByb2NlZWQiLiAgVGhpcyBpcyBiZWNhdXNlIHRoZSBzZXJ2ZXIn cyBOTFNUIGZpbGUKLWxpc3QgZG9lcyBub3QgaW5jbHVkZSBhbnkgZmlsZXMgdGhhdCBkb24ndCBl eGlzdCwgc28gdGhlIGNsaWVudCBuZXZlciBldmVuCi10cmllcyB0byBnZXQgdGhlbS4gIEZvcnR1 bmF0ZWx5LCB0aGUgd2F5IHRoZSBjb2RlIGlzIHN0cnVjdHVyZWQsIHRoaXMgb25lIHdhcwotZWFz eSB0byBmaXguICBja2NmdHAuYywgMTQgU2VwIDIwMDMuCi0KLUZyb20gSmVmZjogQ29ycmVjdGVk IGNvZGUgaW4gY2tjbmV0LmMgdG8gZW5zdXJlIHRoYXQgUmV2ZXJzZSBETlMgTG9va3VwcyBhcmUK LW5vdCBwZXJmb3JtZWQgaWYgdGNwX3JkbnMgaXMgT0ZGLiAgRml4ZWQgY2tfa3JiNV9nZXRyZWFs bSgpIHRvIGFjdHVhbGx5IHJldHVybgotdGhlIHJlYWxtIG9mIHRoZSBjcmVkZW50aWFscyBjYWNo ZSBhbmQgbm90IHRoZSBkZWZhdWx0IHJlYWxtIHNwZWNpZmllZCBpbiB0aGUKLWtyYjUuY29uZiBm aWxlLiAgUHJldmlvdXNseSBrcmI1X2NjX2dldF9wcmluY2lwYWwoKSB3YXMgbm90IGJlaW5nIGNh bGxlZC4KLUZpeGVkIGNrX2tyYjVfaXNfdGd0X3ZhbGlkKCkgdG8gdGVzdCB0aGUgVEdUIGluIHRo ZSBjdXJyZW50IGNjYWNoZSBhbmQgbm90IHRoZQotVEdUIGNvbnN0cnVjdGVkIGZyb20gdGhlIGRl ZmF1bHQgcmVhbG0uICBja2NuZXQuYywgY2t1YXRoLmMsIDE0IFNlcCAyMDAzLgotCi1NYXJjbyBC ZXJuYXJkaSBub3RpY2VkIHRoYXQgSUYgRElSRUNUT1JZIGNvdWxkIHByb2R1Y2UgYSBmYWxzZSBw b3NpdGl2ZSBpZgotdGhlIGFyZ3VtZW50IGRpcmVjdG9yeSBoYWQgcHJldmlvdXNseSBiZWVuIHJl ZmVyZW5jZWQgYnV0IHRoZW4gcmVtb3ZlZC4gIFRoaXMKLWlzIGJlY2F1c2Ugb2YgdGhlIGNsZXZl ciBpc2RpcigpIGNhY2hlIHRoYXQgd2FzIGFkZGVkIHRvIHNwZWVkIHVwIHJlY3Vyc2lvbgotdGhy b3VnaCBiaWcgZGlyZWN0b3J5IHRyZWVzLiAgQ2hhbmdlZCBJRiBESVJFQ1RPUlkgdG8gbWFrZSBh IHNlY29uZCBjaGVjawotKGRlZmluaXRpdmUgYnV0IG1vcmUgZXhwZW5zaXZlKSBpZiBpc2Rpcigp IHN1Y2NlZWRzLCBhbmQgY2hhbmdlZCB0aGUKLWRpcmVjdG9yeS1kZWxldGluZyByb3V0aW5lLCBj a21rZGlyKCksIHRvIGZsdXNoIHRoZSBkaXJlY3RvcnkgY2FjaGUgKFVOSVgKLW9ubHkgLS0gdGhp cyBhbHNvIHNob3VsZCBiZSBkb25lIGluIEs5NSBidXQgaXQncyBub3QgY3JpdGljYWwpLiAgVGhp cyB3YXMKLWRvbmUgYnkgYWRkaW5nIGEgcm91dGluZSwgY2xyZGlyY2FjaGUoKSB0byBja3VmaW8u Yywgd2hpY2ggc2V0cyBwcmV2c3RhdAotdG8gLTEgYW5kIHByZXZwYXRoWzBdIHRvIE5VTC4gIGNr Y2ZuMy5jLCBja3V1czYuYywgY2t1ZmlvLmMsIDE4IFNlcCAyMDAzLgotCi1NYXJjbyByZXBvcnRl ZCB0aGUgc2Vjb25kIGZpeCBzdGlsbCBkaWRuJ3Qgd29yayBmb3IgaGltIChldmVuIHRob3VnaCBp dCBkaWQKLWZvciBtZSkuICBSYXRoZXIgdGhhbiB0cnkgdG8gZmlndXJlIG91dCB3aHksIEkgY29u Y2x1ZGVkIHRoYXQgdGhlIGRpcmVjdG9yeQotY2FjaGUgaXMganVzdCBub3Qgc2FmZTogYSBkaXJl Y3RvcnkgZm91bmQgYSBzZWNvbmQgYWdvIG1pZ2h0IGhhdmUgYmVlbiBkZWxldGVkCi1vciByZW5h bWVkIG5vdCBvbmx5IGJ5IEtlcm1pdCBidXQgYnkgc29tZSBvdGhlciBwcm9jZXNzLiAgV2h5IGRp ZCBJIGFkZCB0aGlzCi1pbiB0aGUgZmlyc3QgcGxhY2U/ICBUaGUgbG9nIHNheXM6Ci0KLSAgU29t ZSBkZWJ1ZyBsb2dzIHNob3dlZCB0aGF0IGlzZGlyKCkgaXMgb2Z0ZW4gY2FsbGVkIHR3aWNlIGlu IGEgcm93IG9uIHRoZQotICBzYW1lIGZpbGUuICBSYXRoZXIgdGhhbiB0cnkgdG8gc29ydCBvdXQg Y2xpZW50cywgSSBhZGRlZCBhIDEtZWxlbWVudCBjYWNoZQotICB0byBVbml4IGlzZGlyKCkuICBj a3VmaW8uYywgMjQgQXByIDIwMDAuCi0KLUV4cGVyaW1lbnRhdGlvbiB3aXRoIERJUiBhbmQgRElS IC9SRUNVUlNJVkUgZG9lcyBub3Qgc2hvdyB0aGlzIGhhcHBlbmluZyBhdAotYWxsLiAgU28gSSAj aWZkZWYnZCBvdXQgdGhlIGRpcmVjdG9yeSBjYWNoZSAoc2VlICNpZmRlZiBJU0RJUkNBQ0hFIGlu IGNrdWZpby5jOwotSVNESVJDQUNIRSBpcyBub3QgZGVmaW5lZCkgYW5kIGJhY2tlZCBvZmYgdGhl IHByZXZpb3VzIGNoYW5nZXM6IGNrdWZpby5jLAotY2tjZm4zLmMsIGNrdXVzNi5jLCAyOCBTZXAg MjAwMy4KLQotRnJvbSBKZWZmOiBSZXBsYWNlIHRoZSBjb21waWxlIHRpbWUgQUxMT1dfS1JCXzNE RVNfRU5DUllQVCB3aXRoIGEgcnVuLXRpbWUKLWNvbW1hbmQgU0VUIFRFTE5FVCBCVUcgQVVUSC1L UkI1LURFUyB3aGljaCBkZWZhdWx0cyB0byBPTjogY2tjdGVsLltjaF0sCi1ja3V1c1syMzRdLmMs IGNrX2NycC5jLCBja3VhdGguYy4gIDQgT2N0IDIwMDMuCi0KLUFsbG93IERJQUwgUkVUUklFUyB0 byBiZSBhbnkgcG9zaXRpdmUgbnVtYmVyLCBhbmQgY2F0Y2ggbmVnYXRpdmUgb25lcy4KLUFsc28g YWRkZWQgY29kZSB0byBjaGVjayBmb3IgYXRvaSgpIGVycm9ycyAoZS5nLiB0cnVuY2F0aW9uKS4g IEF0IGxlYXN0IG9uCi1zb21lIHBsYXRmb3JtcyAoZS5nLiBTb2xhcmlzKSBhdG9pKCkgaXMgc3Vw cG9zZWQgdG8gc2V0IGVycm5vLCBidXQgaXQKLWRvZXNuJ3QuICBja3V1czMuYywgY2t1Y21kLmMs IDQgT2N0IDIwMDMuCi0KLUFkZGVkIC9ERUZBVUxUOiB0byBBU0stY2xhc3MgY29tbWFuZHMgKEFT SywgQVNLUSwgR0VUT0spOgotCi0gLiBGb3IgcG9wdXBzOiBubyB3YXkgdG8gc2VuZCBkZWZhdWx0 cyB0byBwb3B1cF9yZWFkdGV4dCgpIG9yIHBvcHVwX3JlYWRwYXNzKCkuCi0gLiBGb3IgR1VJIEFT S1tRXSwgcGFzcyBkZWZhdWx0IHRvIGd1aV90eHRfZGlhbG9nKCkuCi0gLiBGb3IgR1VJIEdFVE9L LCBjb252ZXJ0ICJ5ZXMiICJvayIgb3IgIm5vIiBkZWZhdWx0IHRvIG51bWJlciBmb3IgdXFfb2so KS4KLSAuIEZvciBUZXh0IEdFVE9LLCBhZGQgZGVmYXVsdCB0byBjbWtleSgpLgotIC4gRm9yIFRl eHQgQVNLW1FdLCBhZGQgZGVmYXVsdCB0byBjbXR4dCgpLgotIC4gRm9yIEdFVEMsIEdFVEtFWSwg YW5kIFJFQUQ6IG5vIGNoYW5nZXMuCi0KLUdFVE9LLCBBU0ssIGFuZCBBU0tRIHdpdGggL1RJTUVP VVQ6IG5vIGxvbmdlciBmYWlsIHdoZW4gdGhlIHRpbWVyIGdvZXMgb2ZmCi1pZiBhIC9ERUZBVUxU IHdhcyBzdXBwbGllZC4gIFRoZSBHVUkgZnVuY3Rpb25zICh1cV9ibGFoKSBkb24ndCBzZWVtIHRv Ci1zdXBwb3J0IHRpbWVvdXRzLiAgT25seSB0aGUgdGV4dCB2ZXJzaW9uIGhhcyBiZWVuIHRlc3Rl ZC4gIGNrdXVzWzI2XS5jLAotNCBPY3QgMjAwMy4KLQotRnJvbSBKZWZmOiBhZGQgL0RFRkFVTFQ6 IGZvciBwb3B1cHMuICBja3V1czYuYy4gNiBPY3QgMjAwMy4KLQotQ2hhbmdlIFNFVCBESUFMIElO VEVSVkFMIHRvIGJlIGxpa2UgU0VUIERJQUwgUkVUUklFUy4gIGNrdXVzWzM0XS5jLCA2IE9jdCAy MDAzLgotCi1BZGRlZCB0YXJnZXQgZm9yIEhQLVVYIDEwLzExICsgT3BlblNTTCBidWlsdCB3aXRo IGdjYywgZnJvbSBDaHJpcyBDaGVuZXkuCi1NYWtlZmlsZSwgMTIgT2N0IDIwMDMuCi0KLUZyb20g SmVmZiwgNiBOb3YgMjAwMzoKLSAuICNpZmRlZiBhZGp1c3RtZW50czogY2tjZnRwLmMsIGNrY2Rl Yi5oCi0gLiBGaXggc3B1cmlvdXMgY29uc3VtcHRpb24gb2YgZmlyc3QgYnl0ZShzKSBvbiBUZWxu ZXQgY29ubmVjdGlvbjogY2tjdGVsLmMKLSAuIEFub3RoZXIgSFAgUEpMIHRlc3QgZm9yIHNjYW5m aWxlOiBja3V1c3guYy4KLSAuIEs5NTogUmVjb2duaXplIERHNHh4IHByb3RlY3RlZCBmaWVsZHMg aW4gREcyeHggZW11bGF0aW9uOiBja3V1czcuYy4KLSAuIEFkZCBTU0xlYXkgdmVyc2lvbiBkaXNw bGF5IHRvIFNIT1cgQVVUSCBjb21tYW5kOiBja3V1czcuYwotIC4gSW1wcm92ZWQgU0VUIE1PVVNF IENMRUFSIGhlbHAgdGV4dDogY2t1dXMyLmMuCi0gLiBJbXByb3ZlZCBLdmVyYnMgaGVscCB0ZXh0 OiBja3V1czIuYyAoKyBuZXcgSUJNLTMxNTEgS3ZlcmJzKS4KLSAuIFNvbWUgY2hhbmdlcyB0byBj a19zc2wuYywgY2t1YXRoLmMuCi0KLUZyb20gUGV0ZXJFLCAxMCBOb3YgMjAwMzoKLSAuIEltcHJv dmVkIEhQLVVYIDEwLzExIG1ha2VmaWxlIHRhcmdldHMgZm9yIE9wZW5TU0wuCi0gLiAjaWZkZWYg Zml4IGZvciBPcGVuU1NMIG9uIEhQLVVYOiBja19zc2wuYy4KLQotQW5vdGhlciBuZXcgbWFrZWZp bGUgZnJvbSBQZXRlckUgd2l0aCBpbXByb3ZlZCBhbmQgaW50ZWdyYXRlZCBIUC1VWCB0YXJnZXRz LgotMTIgTm92IDIwMDMuCi0KLUEgY291cGxlIGZpeGVzIHRvIHRoZSBzb2xhcmlzOWcra3JiNStr cmI0K29wZW5zc2wrc2hhZG93K3BhbSt6bGliIHRhcmdldAotZnJvbSBKZWZmLiAgQWRkZWQgYSBz b2xhcmlzOWcrb3BlbnNzbCtzaGFkb3crcGFtK3psaWIgdGFyZ2V0LiAgbWFrZWZpbGUsCi0yMSBO b3YgMjAwMy4KLQotRnJvbSBKZWZmLCAzMCBOb3YgMjAwMzoKLSAuIEZpeCBTRU5EIC9NT1ZFLVRP OiBja3V1c3IuYy4KLSAuIEZpeCBLOTUgU0VUIFRJVExFIHRvIGFsbG93IHF1b3Rlcy9icmFjZXMg YXJvdW5kIHRleHQ6IGNrdXVzNy5jLgotIC4gSW1wcm92ZWQgInNldCB0ZXJtIGF1dG9kb3dubG9h ZCA/IiByZXNwb25zZTogY2t1dXM1LmMuCi0gLiBGaXggU0hPVyBGRUFUVVJFUyB0byBzcGVjaWZ5 IHRoZSBwcm90b2NvbCBmb3IgZW5jcnlwdGlvbjogY2t1dXM1LmMKLSAuIE1ha2Uge1NFTkQsIFJF Q0VJVkV9IHtNT1ZFLVRPLCBSRU5BTUUtVE99IHdvcmsgZm9yIFhZWk1PREVNIChLOTUgb25seSku Ci0KLUZyb20gSmVmZjogNyBKYW4gMjAwNDoKLSAuIEF0IG9uZSBwb2ludCBGcmFuayBzdGFydGVk IHRvIGFkZCBhIHRpbWVyIHBhcmFtZXRlciB0byB0aGUKLSAgIHVxX3R4dCgpIGZ1bmN0aW9uIGJ1 dCBoZSBvbmx5IGRpZCBpdCBmb3IgdGhlIG5vbi1BTlNJCi0gICBjb21waWxlcnMuICBJIGFkZGVk IGl0IGZvciB0aGUgQU5TSSBjb21waWxlcnMsIGZpeGVkIHRoZQotICAgcHJvdG90eXBlcyBhbmQg cHJvdmlkZWQgYSBkZWZhdWx0IHZhbHVlIGVhc2lseSBjaGFuZ2VkCi0gICBERUZBVUxUX1VRX1RJ TUVPVVQ6IGNrY2tlci5oLCBja3V1c1szNl0uYywgY2tfc3NsLmMsIGNrY2Z0cC5jLCBja3VhdGgu Yy4KLSAuIEZpeGVkIFNFVCBURVJNSU5BTCBERUJVRyBPTiAodHlwbyBpbiB2YXJpYWJsZSBuYW1l KTogY2t1dXM3LmMuCi0gLiBGaXhlZCBCRUVQIElORk9STUFUSU9OOyBwcmV2aW91c2x5IGl0IG1h ZGUgbm8gc291bmQsIG5vdyB1c2VzCi0gICBNQl9JQ09OUVVFU1RJT04uICBja3V1c3guYy4KLQot RnJvbSBJYW4gQmVja3dpdGggPGlhbkBuZXNzaWUubWNjLmFjLnVrPiAoRGViaWFuaXphdGlvbiks IDcgSmFuIDIwMDQ6Ci0gLiBTZWFyY2ggZGlyL2NrZXJtaXQgZm9yIGRvY3MsIGFzIHdlbGwgYXMg ZGlyL2tlcm1pdCBpbiBjbWRpbmkoKTogY2t1dXM1LmMuCi0gLiBOZXcgbGludXgra3JiNStrcmI0 K29wZW5zc2wrc2hhZG93K3BhbSB0YXJnZXQgKGtpdGNoZW4gc2luayBtaW51cyBTUlAsCi0gICB3 aGljaCBEZWJpYW4gZG9lcyBub3QgZGlzdHJpYnV0ZSk6IG1ha2VmaWxlLgotID8gTWFuZ2xlcyB0 aGUgREVTVERJUiBzdXBwb3J0IGluIG1ha2VmaWxlIHRvIGluc3RhbGwgaW50byBhIHN0YWdpbmcg YXJlYToKLSAgIG1ha2VmaWxlIChJIGRpZG4ndCB0YWtlIHRoaXMgb25lIHlldCkuCi0KLVVwZGF0 ZWQgY29weXJpZ2h0IG5vdGljZXMgZm9yIDIwMDQsIGFsbCBtb2R1bGVzLiAgNyBKYW4gMjAwNC4K LQotQWRkZWQgSU5QVVQgL05PTUFUQ0gsIGFsbG93aW5nIElOUFVUIHRvIGJlIHVzZWQgZm9yIGEg Zml4ZWQgYW1vdW50IG9mIHRpbWUKLXdpdGhvdXQgYXR0ZW1wdGluZyB0byBtYXRjaCBhbnkgdGV4 dCBvciBwYXR0ZXJucywgc28gaXQncyBubyBsb25nZXIKLW5lY2Vzc2FyeSB0byAiaW5wdXQgNjAw IFNUUklOR19USEFUX1dJTExfTkVWRVJfQ09NRSIuICBJZiAvTk9NQVRDSCBpcwotaW5jbHVkZWQs IElOUFVUIHN1Y2NlZWRzIGlmIHRoZSB0aW1lb3V0IGV4cGlyZXMsIHdpdGggXHYoaW5zdGF0dXMp ID0gMQotKG1lYW5pbmcgInRpbWVkIG91dCIpOyBmYWlscyB1cG9uIGludGVycnVwdGlvbiBvciBp L28gZXJyb3IuICBja3V1c3IuaCwKLWNrdXVzW3IyNF0uYywgNyBKYW4gMjAwNC4KLQotQWRkZWQg U0VUIElOUFVUIFNDQUxFLUZBQ1RPUiA8ZmxvYXQ+LiAgVGhpcyBzY2FsZXMgYWxsIElOUFVUIHRp bWVvdXRzIGJ5IHRoZQotZ2l2ZW4gZmFjdG9yLCBhbGxvd2luZyB0aW1lLXNlbnNpdGl2ZSBzY3Jp cHRzIHRvIGJlIGFkanVzdGVkIHRvIGNoYW5naW5nCi1jb25kaXRpb25zIHN1Y2ggYXMgY29uZ2Vz dGVkIG5ldHdvcmtzIG9yIGRpZmZlcmVudC1zcGVlZCBtb2RlbXMgd2l0aG91dAotaGF2aW5nIHRv IGNoYW5nZSBlYWNoIElOUFVULWNsYXNzIGNvbW1hbmQuICBUaGlzIGFmZmVjdHMgb25seSB0aG9z ZSB0aW1lb3V0cwotdGhhdCBhcmUgZ2l2ZW4gaW4gc2Vjb25kcywgbm90IGFzIHdhbGwtY2xvY2sg dGltZXMuICBBbHRob3VnaCB0aGUgc2NhbGUKLWZhY3RvciBjYW4gaGF2ZSBhIGZyYWN0aW9uYWwg cGFydCwgdGhlIElOUFVUIHRpbWVvdXQgaXMgc3RpbGwgYW4gaW50ZWdlci4KLUFkZGVkIHRoaXMg dG8gU0hPVyBJTlBVVCwgYW5kIGFkZGVkIGEgXHYoaW5zY2FsZSkgdmFyaWFibGUgZm9yIGl0Lgot Y2t1dXNyLmgsIGNrdXVzW3IyNTddLmMsIDcgSmFuIDIwMDQuCi0KLXVuZGVmIFwlYSwgXGZ2ZXJp ZnkoYWJjLFwlYSkgcmV0dXJucyAwLCB3aGljaCBtYWtlcyBpdCBsb29rIGFzIGlmIFwlYSBpcyBh Ci1zdHJpbmcgY29tcG9zZWQgb2YgYSdzLCBiJ3MsIGFuZC9vciBjJ3MsIHdoZW4gaW4gZmFjdCBp dCBjb250YWlucyBub3RoaW5nLgotQ2hhbmdlZCBcZnZlcmlmeSgpIHRvIHJldHVybiAtMSBpbiB0 aGlzIGNhc2UuICBja3V1czQuYywgMTIgSmFuIDIwMDQuCi0KLVxmY29kZSh4eHgpIHJldHVybmVk IGFuIGVtcHR5IHN0cmluZyBpZiBpdHMgYXJndW1lbnQgc3RyaW5nIHdhcyBlbXB0eS4gIFRoaXMK LW1ha2VzIGl0IHVuc2FmZSB0byB1c2UgaW4gYXJpdGhtZXRpYyBvciBib29sZWFuIGV4cHJlc3Np b25zLiAgQ2hhbmdlZCBpdCB0bwotcmV0dXJuIDAgaWYgaXRzIGFyZ3VtZW50IHdhcyBtaXNzaW5n LCBudWxsLCBvciBlbXB0eS4gIGNrdXVzNC5jLCAxMiBKYW4gMjAwNC4KLQotVXBkYXRlZCBcdmVy aWZ5KCkgYW5kIFxmY29kZSgpIGhlbHAgdGV4dC4gIGNrdXVzMi5jLCAxMiBKYW4gMjAwNC4KLQot V2hpbGUgc2V0dGluZyB1cCBJS1NELCBJYW4gQmVja3dpdGggbm90aWNlZCB0aGF0IGluY2x1ZGlu ZyB0aGUgLS1pbml0ZmlsZToKLW9wdGlvbiBjYXVzZWQgS2VybWl0IHRvIHN0YXJ0IHBhcnNpbmcg aXRzIG93biBDb3B5cmlnaHQgc3RyaW5nIGFzIGlmIGl0IHdlcmUKLXRoZSBjb21tYW5kIGxpbmUs IGFuZCBldmVudHVhbGx5IGNyYXNoLiAgSSBjb3VsZG4ndCByZXByb2R1Y2Ugb24gU29sYXJpcyAv Ci1TcGFyYyBidXQgSSBjb3VsZCBpbiBMaW51eCAvIGkzODYgKHdoYXQgSWFuIGlzIHVzaW5nKSAt LSBhIGNoYW5nZSBmcm9tIEplZmYKLW9uIDI4IEFwciAyMDAzIHNldCB0aGUgY29tbWFuZC1saW5l IGFyZyBwb2ludGVyIHRvIGEgbGl0ZXJhbCBlbXB0eSBzdHJpbmcgaW4KLXByZXNjYW4oKSBhYm91 dCBsaW5lIDE3NDAgb2Ygb2YgY2t1dXM0LmM7IHRoZSBwb2ludGVyIGlzIGluY3JlbWVudGVkIG5l eHQKLXRpbWUgdGhydSB0aGUgbG9vcCwgcmVzdWx0aW5nIGluIHJhbmRvbSBtZW1vcnkgYmVpbmcg cmVmZXJlbmNlZC4gIEZpeGVkIGJ5Ci1zZXR0aW5nIHRoZSBwb2ludGVyIHRvIE5VTEwgaW5zdGVh ZCBvZiAiIi4gIGNrdXVzNC5jLCAxMiBKYW4gMjAwNC4KLQotZGVjbGFyZSBcJmFbOTk5OTk5OTk5 OTk5OTk5XSB3b3VsZCBkdW1wIGNvcmUgb24gc29tZSBwbGF0Zm9ybXMuICBhdG9pKCkKLW9yIHdo YXRldmVyIHdvdWxkIHRydW5jYXRlIHRoZSBkaW1lbnNpb24gdG8gbWF4aW50LiAgV2hlbiB3ZSBh ZGQgMSB0byB0aGUKLXJlc3VsdCwgd2UgZ2V0IGEgbmVnYXRpdmUgbnVtYmVyLCB3aGljaCBpcyB1 c2VkIGFzIGFuIGluZGV4LCBsb29wIHRlc3QsIGV0Yy4KLUZpeGVkIGJvdGggZG9kY2woKSBhbmQg ZGNsYXJyYXkoKSB0byBjaGVjayBmb3IgKG4rMSA8IDApLiAgY2t1dXNbcjVdLmMsCi0xMiBKYW4g MjAwNC4KLQotVW5peCB6Y2hraSgpIHdvdWxkIGZhaWwgb24gL2Rldi90dHksIHdoaWNoIGlzIHVu cmVhc29uYWJsZS4gIFRoaXMgcHJldmVudGVkCi1GT1BFTiAvUkVBRCBmcm9tIHJlYWRpbmcgZnJv bSB0aGUgdGVybWluYWwuICB6Y2hraSgpIGFscmVhZHkgYWxsb3dlZCBmb3IKLS9kZXYvbnVsbCwg c28gSSBhZGRlZCAvZGV2L3R0eSB0byB0aGUgbGlzdCBvZiBzcGVjaWFscy4gIERpdHRvIGZvciBG T1BFTgotL1dSSVRFIGFuZCB6Y2hrbygpLiAgY2t1ZmlvLmMgMTMgSmFuIDIwMDQuCi0KLUFkZGVk IHVudGFiaWZ5KCkgcm91dGluZSB0byBja2NsaWIuW2NoXSwgMTMgSmFuIDIwMDQuCi1BZGRlZCBG UkVBRCAvVFJJTSBhbmQgL1VOVEFCSUZZLiAgY2t1dXNbMjddLmMsIDEzIEphbiAyMDA0LgotQWRk ZWQgXGZ1bnRhYmlmeSgpLiAgY2t1dXNyLmgsIGNrdXVzWzI0XS5jLCAxMyBKYW4gMjAwNC4KLQot RGF0IE5ndXllbiBub3RpY2VkIHRoYXQgKHNldHEgdSAncCcpIGZvbGxvd2VkIGJ5ICh1KSBkdW1w ZWQgY29yZS4gIFRoaXMgd2FzCi1jYXVzZWQgYnkgYW4gb3Zlci1jbGV2ZXIgb3B0aW1pemF0aW9u IHRoYXQgc2tpcHBlZCBtYWxsb2NzIGZvciBzaG9ydAotbGl0ZXJhbHMsIGJ1dCB0aGVuIHdlbnQg b24gbGF0ZXIgdG8gdHJ5IHRvIGZyZWUgb25lIHRoYXQgaGFkbid0IGJlZW4KLW1hbGxvYydkLiAg Rml4ZWQgaW4gZG9zZXhwKCk6IGNrdXVzMy5jLCAxNCBKYW4gMjAwNC4KLQotQ2F0Y2ggYW5vdGhl ciBjb3B5cmlnaHQgZGF0ZS4gIGNrdXVzNS5jLCAxNCBKYW4gMjAwNC4KLQotRml4ZWQgU1dJVENI IHRvIHdvcmsgZXZlbiB3aGVuIFNFVCBDT01NQU5EIERPVUJMRVFVT1RFIE9GRiAoZnJvbSBNYXJr Ci1TYXBpcm8pLiAgY2t1dXM1LmMsIDE1IEphbiAyMDA0LgotCi1DaGFuZ2VkIHZlcnNpb24gdG8g OC4wLjIxMSBzbyBzY3JpcHRzIGNhbiB0ZXN0IGZvciByZWNlbnRseSBhZGRlZCBmZWF0dXJlcy4K LWNrY21haS5jLCAxNSBKYW4gMjAwNC4KLQotRml4ZWQgYSBnbGl0Y2ggaW4gSzk1ICJoZWxwIHNl dCBwb3J0Ii4gIGNrdXVzMi5jLCAyMCBKYW4gMjAwNC4KLQotRml4IGZyb20gSmVmZjogQ29ubmVj dGlvbnMgdG8gYSBUTFMtYXdhcmUgcHJvdG9jb2wgd2hpY2ggcmVxdWlyZSBhIHJlY29ubmVjdAot dXBvbiBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gZmFpbHVyZSBjb3VsZCBub3QgcmVjb25uZWN0 IGlmIHRoZSBjb25uZWN0aW9uCi13YXMgaW5pdGlhdGVkIGZyb20gdGhlIGNvbW1hbmQgbGluZSBv ciB2aWEgYSBVUkwuICBja2N0ZWwuYyBja2NtYWkuYwotY2t1dXNyLmMgY2t1dXM3LmMgY2t1dXN5 LmMsIDIwIEphbiAyMDA0LgotCi1Gcm9tIEFsZXggTGV3aW46IG1ha2VmaWxlIHRhcmdldCBhbmQg I2lmZGVmIGZvciBNYWMgT1MgWCAxMC4zIChQYW50aGVyKToKLW1ha2VmaWxlLCBja2NuZXQuYywg NyBGZWIgMjAwNC4KLQotQWRkZWQgS0ZMQUdTIHRvIHNjbzMydjUwNyB0YXJnZXRzIHRvIG1ha2Ug UFRZIGFuZCBTU0ggY29tbWFuZHMgd29yay4gIFRoZQotc2FtZSBmbGFncyBjb3VsZCBwcm9iYWJs eSBhbHNvIGJlIGFkZGVkIHRvIGVhcmxpZXIgT1NSNSB0YXJnZXRzIGJ1dCB0aGV5Ci1oYXZlIG5v dCBiZWVuIHRlc3RlZCB0aGVyZS4gIG1ha2VmaWxlLCA3IEZlYiAyMDA0LgotCi1DaGVja2VkIGEg Y29tcGxhaW50IHRoYXQgIkxPQ0FMICZhIiBkaWQgbm90IG1ha2UgYXJyYXkgXCZhW10gbG9jYWwu ICBJbmRlZWQKLWl0IGRpZCBub3QsIGFuZCBjYW4gbm90LiAgWW91IGhhdmUgdG8gdXNlIHRoZSBm dWxsIHN5bnRheCBpbiB0aGUgTE9DQUwKLWNvbW1hbmQsICJMT0NBTCBcJmFbXSIsIG9yIGVsc2Ug aXQgZG9lc24ndCBrbm93IGl0J3Mgbm90IGEgbWFjcm8gbmFtZWQgJmEuCi03IEZlYiAyMDA0Lgot Ci1GaXhlZCBzb21lIGNvbmZ1c2lvbiBpbiBjcmVhdGluZyBJS1NEIGRhdGFiYXNlIGZpbGUgYW5k IHRlbXAtZmlsZSBuYW1lcy4KLUkgd2FzIGNhbGxpbmcgemZucWZwKCkgd2l0aG91dCByZW1lbWJl cmluZyB0aGF0IHRoZSBwYXRoIG1lbWJlciBvZiB0aGUKLXJldHVybmVkIHN0cnVjdCBpbmNsdWRl ZCB0aGUgZmlsZW5hbWUsIHNvIHRvIGdldCBqdXN0IHRoZSBkaXJlY3RvcnkgbmFtZSwKLUkgbmVl ZGVkIHRvIHN0cmlwIHRoZSBmaWxlbmFtZSBmcm9tIHRoZSByaWdodC4gIGNrdXVzeS5jLCAyIE1h ciAyMDA0LgotCi1OZXcgY2t1YXRoLmMsIGNrX3NzbC5jIGZyb20gSmVmZi4gIDIgTWFyIDIwMDQu Ci0KLVVwZGF0ZWQgSmVmZidzIGFmZmlsaWF0aW9uIGluIFZFUlNJT04gY29tbWFuZCB0ZXh0LiAg Y2t1dXNyLmMsIDIgTWFyIDIwMDQuCi0KLURlc2lnbmF0aW9uIGNoYW5nZWQgZnJvbSBEZXYuMDAg dG8gQmV0YS4wMS4gIGNrY21haS5jLCAyIE1hciAyMDA0LgotCi1GaXhlZCB6cmVuYW1lKCkgc3lz bG9nZ2luZyAtLSBpdCBoYWQgc3VjY2VzcyBhbmQgZmFpbHVyZSByZXZlcnNlZC4KLUJldGEuMDI6 IGNrdWZpby5jLCA0IE1hciAyMDA0LgotCi1Qcm9ibGVtOiB3aGVuIGFjY2Vzc2luZyBJS1NEIHZp YSBhIGtlcm1pdDovLyBvciBpa3NkOi8vIFVSTCwgYW5kIGEgdXNlciBJRAotaXMgZ2l2ZW4gYnV0 IG5vIHBhc3N3b3JkLCBkb3hhcmcoKSBzZXQgdGhlIHBhc3N3b3JkIHRvICIiIGluc3RlYWQgb2Yg bGVhdmluZwotaXQgTlVMTCwgYnV0IGFsbCB0aGUgdGVzdHMgaW4gZG91cmwoKSBhcmUgZm9yIE5V TEwuICBGaXhlZCBpbiBkb3hhcmcoKToKLWNrdXVzeS5jLCA1IE1hciAyMDA0LgotCi1UaGUgbG9n aWMgaW4gZG91cmwoKSBhYm91dCB3aGljaCBtYWNybyB0byBjb25zdHJ1Y3QgKGxvZ2luIGFuZCBj b25uZWN0LAotbG9naW4gYW5kIGdldCBkaXJlY3RvcnkgbGlzdGluZywgb3IgbG9naW4gYW5kIGZl dGNoIGEgZmlsZSkgd2FzIGEgYml0IG9mZiwKLXNvIGFsbCB0aHJlZSBjYXNlcyB3ZXJlIG5vdCBo YW5kbGVkLiAgY2tjbWFpLmMsIDUgTWFyIDIwMDQuCi0KLVRyaWFsIEJldGEgYnVpbGRzOgotIC4g SFAtVVggQi4xMS4xMSBQQS1SSVNDCi0gLiBIUC1VWCBCLjExLjIzIElBNjQKLSAuIFRydTY0IDQu MEcgQWxwaGEKLSAuIFRydTY0IDUuMUIgQWxwaGEKLSAuIERlYmlhbiAzLjAgaTM4NgotIC4gUmVk IEhhdCBFUyAyLjEgaTM4NgotIC4gU2xhY2t3YXJlIDkuMSBpMzg2Ci0gLiBWTVMgNy4zLTEgQWxw aGEgKyBVQ1ggNS4zCi0gLiBWTVMgNy4zLTEgQWxwaGEgbm8gVENQL0lQCi0gLiBWTVMgNy4zIEFs cGhhIE11bHRpTmV0IDQuMyBBLVgKLSAuIFNDTyBVbml4V2FyZSA3LjEuNCBpMzg2Ci0gLiBTQ08g T1NSNS4wLjcgaTM4NgotIC4gU29sYXJpcyA5IFNwYXJjCi0KLUZpeGVkIGNvbXBpbGVyIHdhcm5p bmcgaW4gZG94YXJnKCkgY2F1c2VkIGJ5IHR5cG8gKE5VTEwgaW5zdGVhZCBvZiBOVUwpIGluCi10 aGUgNSBNYXJjaCBkb3hhcmcoKSBlZGl0LiAgY2t1dXN5LmMsIDkgTWFyIDIwMDQuCi0KLUlLU0Qg KGtlcm1pdDovLykgY29tbWFuZC1saW5lIFVSTHMgZGlkIG5vdCB3b3JrIHJpZ2h0IGlmIHRoZSBj bGllbnQgaGFkCi1hbHJlYWR5IHByZWF1dGhlbnRpY2F0ZWQgd2l0aCBLZXJiZXJvcyBvciBzb21l c3VjaCBiZWNhdXNlIHRoZXkgdHJpZWQgdG8gbG9nCi1pbiBhZ2FpbiB3aXRoIFJFTU9URSBMT0dJ Ti4gIFRoZSBtYWNyb3MgY29uc3RydWN0ZWQgaW4gZG94YXJnKCkgbmVlZGVkIHRvCi1jaGVjayBc dihhdXRoc3RhdGUpIGJlZm9yZSBhdHRlbXB0aW5nIFJFTU9URSBMT0dJTi4gIGNrY21haS5jLCAx MCBNYXIgMjAwNC4KLQotQWRkZWQgY2t1a2VyLm5yIHRvIHguc2ggKGNrZGFpbHkgdXBsb2FkKSBh bmQgdXBkYXRlZCBja3VrZXIubnIgd2l0aCBjdXJyZW50Ci12ZXJzaW9uIG51bWJlciBhbmQgZGF0 ZXMuICAxMCBNYXIgMjAwNC4KLQotUmVwbGFjZWQgaGFyZHdpcmVkIHJlZmVyZW5jZXMgdG8gL3Vz ci9sb2NhbCBpbiBtYWtlZmlsZSB3aXRoICQocHJlZml4KQotKHdoaWNoIGRlZmF1bHRzIHRvIC91 c3IvbG9jYWwsIGJ1dCBjYW4gYmUgb3ZlcnJpZGRlbiBvbiB0aGUgY29tbWFuZCBsaW5lKSwKLXN1 Z2dlc3RlZCBieSBOZWxzb24gQmVlYmUgZm9yIHVzZSB3aXRoIENvbmZpZ3VyZS4gIDEwIE1hciAy MDA0LgotCi1Gcm9tIE5lbHNvbiBCZWViZTogSW4gdGhlIEtlcm1pdCBtYWtlZmlsZSBpbiB0aGUg aW5zdGFsbCB0YXJnZXQgY29tbWFuZHMsCi1saW5lIDk4MSByZWFkczoKLQotICAgICAgICBjcCAk KEJJTkFSWSkgJChERVNURElSKSQoQklORElSKS9rZXJtaXQgfHwgZXhpdCAxO1wKLQotQ291bGQg eW91IHBsZWFzZSBhZGQgdGhpcyBsaW5lIGJlZm9yZSBpdDoKLQotICAgICAgICBybSAtZiAkKERF U1RESVIpJChCSU5ESVIpL2tlcm1pdDtcCi0KLVNvbWUgc2l0ZXMgKG1pbmUgaW5jbHVkZWQpIGtl ZXAgbXVsdGlwbGUgdmVyc2lvbnMgb2Ygc29mdHdhcmUgYXJvdW5kLAotd2l0aCBoYXJkIGxpbmtz IGJldHdlZW4gJChwcmVmaXgpL3Byb2duYW1lIGFuZCAkKHByZWZpeCkvcHJvZ25hbWUteC55Lnou Ci1GYWlsdXJlIHRvIHJlbW92ZSB0aGUgJChwcmVmaXgpL3Byb2duYW1lIGF0ICJtYWtlIGluc3Rh bGwiIHRpbWUgdGhlbgotcmVwbGFjZXMgdGhlIG9sZCAkKHByZWZpeCkvcHJvZ25hbWUteC55Lnog d2l0aCB0aGUgbmV3IG9uZSwgZGVzdHJveWluZwotYW4gb2xkIHZlcnNpb24gdGhhdCB0aGUgc2l0 ZSB3YW50ZWQgdG8gYmUgcHJlc2VydmVkLiAgbWFrZWZpbGUsIDEwIE1hciAyMDA0LgotCi1NaW5v ciBzeW50YXggYW5kIHR5cG8gZml4ZXMgKG1vc3RseSBwcm90b3R5cGVzKTogY2tjZGViLmgsIGNr Y2Zucy5jLAotY2tjbGliLmMsIGNrdWZpby5jLCBja3V1c3IuaCwgY2t1dXN4LmMsIDEwIE1hciAy MDA0LiAgKEkgc3RpbGwgaGF2ZSBhIGZldwotbW9yZSB0byBkby4pCi0KLUFkZGVkIENDPSQoQ0Mp IENDMj0kKENDMikgdG8gbWFueSAoYnV0IG5vdCBhbGwpIG1ha2VmaWxlIHRhcmdldHMgdGhhdAot cmVmZXJlbmNlIG90aGVyIG1ha2VmaWxlIHRhcmdldHMuICBPbiBzb21lIHBsYXRmb3JtcyAobm90 YWJseSBBSVgsIFNvbGFyaXMsCi1TdW5PUykgdGhlcmUgYXJlIHNwZWNpZmljIHRhcmdldHMgZm9y IGRpZmZlcmVudCBjb21waWxlcnMsIHNvIEkgc2tpcHBlZAotdGhvc2UuICBtYWtlZmlsZSwgMTAg TWFyIDIwMDQuCi0KLUFkZGVkIGVycm9yIGNoZWNraW5nIHRvIGtlcm1pdDovLyBVUkwgbWFjcm9z LCBzbyB0aGV5IGRvbid0IHBsb3cgYWhlYWQKLWFmdGVyIHRoZSBjb25uZWN0aW9uIGlzIGNsb3Nl ZC4gIGNrY21haS5jLCAxMSBNYXIgMjAwNC4KLQotQWRkZWQgRnJlZUJTRCA0LjkgYW5kIDUuMSB0 YXJnZXRzIChvbmx5IHRoZSBoZXJhbGQgaXMgYWZmZWN0ZWQpLgotbWFrZWZpbGUsIGNrdXZlci5o LCAxMSBNYXIgMjAwNC4KLQotQWRkZWQgIkxJQlM9LWxjcnlwdCIgdG8gYnNkNDQgdGFyZ2V0cyBz aW5jZSBub3dhZGF5cyBjcnlwdCBpcyBhbG1vc3QgYWx3YXlzCi11bmJ1bmRsZWQgZnJvbSBsaWJj LiAgQWxzbyBhZGRlZCBleHBsYW5hdG9yeSBub3Rlcy4gIG1ha2VmaWxlLCAxMSBNYXIgMjAwNC4K LQotQ2hhbmdlZCBNQU5ESVIgdG8gZGVmYXVsdCB0byAkKG1hbnJvb3QpL21hbi9tYW4xLCBhbmQg bWFucm9vdCB0byBkZWZhdWx0Ci10byAkKHByZWZpeCkuICBNb3JlIGFkZGluZyBvZiBDQz0kKEND KSBjbGF1c2VzOiB7RnJlZSxOZXQsT3Blbn1CU0QsIDQuNEJTRC4KLW1ha2VmaWxlLCAxMSBNYXIg MjAwNC4KLQotTWlzY2VsbGFuZW91cyBjbGVhbnVwczogY2t1dXN4LmMsIGNrY25ldC5jLCBja3Vm aW8uYywgMTEgTWFyIDIwMDQuCi0KLUNvcnJlY3RlZCB0aGUgY2hlY2sgaW4gdGhlIGxpbnV4IHRh cmdldCB0byBzZWUgaWYgL3Vzci9pbmNsdWRlL2NyeXB0LmgKLWV4aXN0cywgYW5kIGlmIHNvIHRv IGRlZmluZSBIQVZFX0NSWVBUX0gsIHdoaWNoIGlzIHVzZWQgaW4gY2tjZGViLmggdG8KLSNpbmNs dWRlIDxjcnlwdC5oPiB0byBnZXQgdGhlIHByb3RvdHlwZSBmb3IgY3J5cHQoKSBhbmQgcHJldmVu dCBib2d1cwotY29udmVyc2lvbnMgb24gaXRzIHJldHVybiB0eXBlIG9uIDY0LWJpdCBwbGF0Zm9y bXMgKHRoZSBwcmV2aW91cyB0ZXN0IHdhc24ndAotcXVpdGUgcmlnaHQgYW5kIHRoZSByZXN1bHRp bmcgc3ltYm9sIHdhc24ndCBzcGVsbGVkIHJpZ2h0KS4gIG1ha2VmaWxlLAotMTIgTWFyIDIwMDQu Ci0KLUZyb20gSmVmZiwgMTQgTWFyIDIwMDQ6Ci0gLiBJbml0aWFsaXplIGxvY2FsdWlkYnVmW10g aW4gdG5fc25lbnYoKTogY2tjdGVsLmMuCi0gLiBSZW1vdmUgcmVtb3RlLW1vZGUgY2hlY2tzIGlu IGh1cG9rKCkgZm9yIEs5NUcgb25seSAod2h5Pyk6IGNrdXVzMy5jLgotIC4gQWRkIGhlbHAgdGV4 dCBmb3IgbmV3IEs5NS1vbmx5IFRZUEUgL0dVSSBzd2l0Y2hlczogY2t1dXMyLmMuCi0gLiBUWVBF IC9HVUkgcGFyc2luZywgLi4uOiBja3V1c3IuYy4KLSAuIFRZUEUgL0dVSSBhY3Rpb24sIGRvdHlw ZSgpOiBja3V1czYuYwotIC4gQ2hhbmdlIEplZmYncyBhZmZpbGlhdGlvbjogbW9zdCBtb2R1bGVz LgotCi0yMCBNYXIgMjAwNDogTG9va2VkIGludG8gYWRkaW5nIGxvbmcgZmlsZSBzdXBwb3J0LCBp LmUuIGhhbmRsaW5nIGZpbGVzIG1vcmUKLXRoYW4gMkdCIChvciA0R0IpIGxvbmcuICBEaXNjb3Zl cmVkIHZlcnkgcXVpY2tseSB0aGlzIHdvdWxkIGJlIGEgbWFqb3IKLXByb2plY3QuICBFYWNoIHBs YXRmb3JtIGhhcyBhIGRpZmZlcmVudCBBUEksIG9yIGVudmlyb25tZW50LCBvciB0cmFuc2l0aW9u Ci1wbGFuLCBvciB3aGF0ZXZlciAtLSBhIG5pZ2h0bWFyZSB0byBoYW5kbGUgaW4gcG9ydGFibGUg Y29kZS4gIEF0IHRoZSB2ZXJ5Ci1sZWFzdCB3ZSdsbCBuZWVkIHRvIGNvbnZlcnQgYSBsb3Qgb2Yg S2VybWl0IHZhcmlhYmxlcyBmcm9tIGxvbmcgb3IgdW5zaWduZWQKLWxvbmcgdG8gc29tZSBuZXcg S2VybWl0IHR5cGUsIHdoaWNoIGluIHR1cm4gaXMgI2RlZmluZWQgb3IgdHlwZWRlZidkCi1hcHBy b3ByaWF0ZWx5IGZvciBlYWNoIHBsYXRmb3JtICh0byBvZmZfdCBvciBzaXplX3Qgb3Igd2hhdGV2 ZXIpLiAgVGhlbiB3ZQotaGF2ZSB0byB3b3JyeSBhYm91dCB0aGUgZGV0YWlscyBvZiBvcGVuKCkg dnMgZm9wZW4oKTsgcHJpbnRmKCkgZm9ybWF0cyAoJWxsZAotdnMgJUxkIHZzICUiUFJJZDY0Ii4u LiksIHBsYXRmb3JtcyBsaWtlIEhQLVVYIHdoZXJlIHlvdSBtaWdodCBoYXZlIHRvIHVzZQotZGlm ZmVyZW50IEFQSXMgZm9yIGRpZmZlcmVudCBmaWxlIHN5c3RlbXMgb24gdGhlIHNhbWUgY29tcHV0 ZXIsIGV0Yy4gIFdlJ2xsCi1uZWVkIHRvIGNvbmZyb250IHRoaXMgc29vbiwgYnV0IGxldCdzIGdl dCBhIGdvb2Qgc3RhYmxlIDguMC4yMTEgcmVsZWFzZSBvdXQKLWZpcnN0ISAgTWVhbndoaWxlLCBm b3IgZnV0dXJlIHJlZmVyZW5jZSwgaGVyZSBhcmUgYSBmZXcgYXJ0aWNsZXM6Ci0KLUdlbmVyYWw6 IGh0dHA6Ly9mcmVzaG1lYXQubmV0L2FydGljbGVzL3ZpZXcvNzA5LwotTGludXg6ICAgaHR0cDov L3d3dy5lY2UudXRleGFzLmVkdS9+bHVvL2xpbnV4X2xmcy5odG1sCi1IUC1VWDogICBodHRwOi8v ZGV2cnNyYzEuZXh0ZXJuYWwuaHAuY29tL1NUSy9wYXJ0bmVyL2xnX2ZpbGVzLnBkZgotU29sYXJp czogaHR0cDovL3d3d3Muc3VuLmNvbS9zb2Z0d2FyZS93aGl0ZXBhcGVycy93cC1sYXJnZWZpbGVz L2xhcmdlZmlsZXMucGRmCi0KLUxvb2tlZCBpbnRvIEZUUCB0aW1lb3V0cy4gIEl0IGFwcGVhcnMg SSBjYW4ganVzdCBjYWxsIGVtcHR5KCkgKHdoaWNoIGlzCi1ub3RoaW5nIG1vcmUgdGhhbiBhIGZy b250IGVuZCBmb3Igc2VsZWN0KCkpIHdpdGggdGhlIGRlc2lyZWQgdGltZW91dCBiZWZvcmUKLWFu eSBraW5kIG9mIG5ldHdvcmsgcmVhZC4gIElmIGl0IHJldHVybnMgPD0gMCwgd2UgaGF2ZSBhIHRp bWVvdXQuICBUaGlzIGlzCi1ub3QgcXVpdGUgdGhlIHNhbWUgYXMgdXNpbmcgYWxhcm0oKSAvIHNp Z25hbCgpIGFyb3VuZCBhIHJlY3YoKSAod2hpY2ggY291bGQKLWdldCBzdHVjaykgYnV0IGFsYXJt KCkgLyBzaWduYWwoKSBhcmUgbm90IG5vdCB1c2VkIGluIHRoZSBGVFAgbW9kdWxlIGFuZCBhcmUK LW5vdCBuYXR1cmFsbHkgcG9ydGFibGUgdG8gV2luZG93cywgYnV0IHNlbGVjdCgpIGlzIGFscmVh ZHkgaW4gdXNlIGluIHRoZSBGVFAKLW1vZHVsZSBmb3IgYm90aCBVbml4IGFuZCBXaW5kb3dzLiAg VGhpcyBmb3JtIG9mIHRpbWVvdXQgY291bGQgYmUgdXNlZAotcG9ydGFibHkgZm9yIGJvdGggY29t bWFuZCByZXNwb25zZSBhbmQgZGF0YSByZWFkcy4gIFdoYXQgYWJvdXQgd3JpdGVzIHRvIHRoZQot Y29tbWFuZCBvciBkYXRhIHNvY2tldD8gIFRoZXkgY2FuIGdldCBzdHVjayBmb3IgaG91cnMgYW5k IGhvdXJzIHdpdGhvdXQKLXJldHVybmluZyB0b28sIGJ1dCB0aGUgc2VsZWN0KCkgYXBwcm9hY2gg d29uJ3QgaGVscCBoZXJlIC0tIHdlIG5lZWQgdGhlCi1hY3R1YWwgc2VuZCgpIG9yIHJlY3YoKSB0 byB0aW1lIG91dCwgb3IgYmUgd3JhcHBlZCBpbiBhbiBhbGFybSgpL3NpZ25hbCgpCi1raW5kIG9m IG1lY2hhbmlzbS4gIEJ1dCBpZiB3ZSBjYW4gZG8gdGhhdCBmb3Igc2VuZHMsIHdlIGNhbiBhbHNv IGRvIGl0IGZvcgotcmVjZWl2ZXMuICBCZXR0ZXIgY2hlY2sgd2l0aCBKZWZmIGJlZm9yZSBJIHN0 YXJ0IHByb2dyYW1taW5nIGFueXRoaW5nLgotMjAgTWFyIDIwMDQuCi0KLUxhdGVyOiBEZWNpZGVk IHRvIHBvc3Rwb25lIHRoZSBhYm92ZSB0d28gcHJvamVjdHMgKGRpdHRvIElQdjYpIHVudGlsIGFm dGVyCi04LjAuMjExIGlzIHJlbGVhc2VkIGJlY2F1c2UgYm90aCB3aWxsIGhhdmUgbWFqb3IgaW1w YWN0cyBvbiBwb3J0YWJpbGl0eS4KLUdydW1ibGU6IGFsbCBpL28gQVBJcyBzaG91bGQgaGF2ZSBi ZWVuIGRlc2lnbmVkIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEKLXRpbWVvdXQgcGFyYW1ldGVy LiAgVG8gdGhpcyBkYXksIGhhcmRseSBhbnkgaGF2ZSB0aGlzIGZlYXR1cmUuCi0KLTMtNCBBcHIg MjAwNDogTW9yZSA4LjAuMjExIEJldGEuMDIrIHRlc3QgYnVpbGRzOgotCi0gLiBGcmVlQlNEIDMu MwotIC4gRnJlZUJTRCA0LjQKLSAuIExpbnV4IERlYmlhbiAyLjEKLSAuIExpbnV4IFJIIDYuMQot IC4gTGludXggUkggNy4xCi0gLiBMaW51eCBSSCA3LjIKLSAuIExpbnV4IFJIIDkgKHdpdGggODQg ZGlmZmVyZW50IGNvbWJpbmF0aW9ucyBvZiBmZWF0dXJlIHNlbGVjdGlvbikKLSAuIExpbnV4IFN1 U0UgNi40Ci0gLiBMaW51eCBTdVNFIDcuMAotIC4gTmV0QlNEIDEuNC4xCi0gLiBOZXRCU0QgMS41 LjIKLSAuIE9wZW5CU0QgMi41Ci0gLiBPcGVuQlNEIDMuMAotIC4gUU5YIDQuMjUKLSAuIFNDTyBV bml4V2FyZSAyLjEuMwotIC4gU0NPIFVuaXhXYXJlIDcuMS40Ci0gLiBTQ08gT3BlblNlcnZlciA1 LjAuNwotIC4gU0NPIFhFTklYIDIuMy40IChubyBUQ1ApCi0KLUNoYW5nZXMgbmVlZGVkOiBOb25l LgotCi1Qcm9ibGVtOiBTQ08gWEVOSVggMi4zLjQgbmV0d29yayBidWlsZCBmYWlsZWQgaW4gdGhl IEZUUCBtb2R1bGUgd2l0aAotaGVhZGVyLWZpbGUgc3ludGF4IGFuZCBjb25mbGljdGluZy1kZWZp bml0aW9ucyB0cm91YmxlLiAgSSdtIG5vdCBnb2luZyB0bwotdHJ5IHRvIGZpeCBpdDsgOC4wLjIw OSBidWlsdCBPSyB3aXRoIEZUUCwgc28gd2UnbGwganVzdCBrZWVwIHRoYXQgb25lCi1hdmFpbGFi bGUuCi0KLUdvdCBhY2Nlc3MgdG8gVk1TIDguMSBvbiBJQTY0LiAgQnVpbGRpbmcgdGhlIG5vbmV0 IHZlcnNpb24gb2YgQy1LZXJtaXQKLXJlcXVpcmVkIG1pbm9yIG1vZGlmaWNhdGlvbnMgdG8gY2t2 dm1zLmgsIGNrdltmdF1pby5jLCBhbmQgY2t2Y29uLmMsIHRvCi1hY2NvdW50IGZvciBhIHRoaXJk IGFyY2hpdGVjdHVyZS4gIEFsc28gdG8gU0hPVyBGRUFUVVJFUyBpbiBja3V1czUuYy4gIE9uY2UK LXRoYXQgd2FzIGRvbmUsIHRoZSBVQ1ggNS41IHZlcnNpb24gYnVpbHQgT0sgdG9vLiAgU3RhcnRz IE9LLCBtYWtlcyBUZWxuZXQKLWNvbm5lY3Rpb24gT0ssIHNlbmRzIGZpbGVzLiAgSGFzIHNvbWUg b2J2aW91cyBnbGl0Y2hlcyB0aG91Z2ggLS0gInN0YXQiCi1hZnRlciBhIGZpbGUgdHJhbnNmZXIg cmVwb3J0cyAwIGVsYXBzZWQgdGltZSAoaW4gZmFjdCBpdCB3YXMgMDA6MDk6NDgpIGFuZAotMTIx OTE3NDQwMCBjcHMgKHdoZW4gaW4gZmFjdCBpdCB3YXMgMTAzNjQpLiAgVGhpcyBkb2Vzbid0IGhh cHBlbiBvbiB0aGUKLUFscGhhLiAgQnR3LCB0aGUgSUE2NCBiaW5hcnkgaXMgdHdpY2UgYXMgYmln IGFzIHRoZSBBbHBoYSBvbmUuICBDaGFuZ2VkCi10byBCZXRhLjAzLiAgNSBBcHIgMjAwNC4KLQot Rml4ZWQgdGhlIGNrZGFpbHkgc2NyaXB0IHRvIGluY2x1ZGUgdGhlIG1ha2VmaWxlIGFuZCBtYW4g cGFnZSBpbiB0aGUgWmlwCi1maWxlICh0aGV5IHdlcmUgbm90IGluY2x1ZGVkIGJlY2F1c2UgdGhl IFppcCBmaWxlIHdhcyBpbnRlbmRlZCBtYWlubHkgZm9yCi1WTVMgdXNlcnMsIGJ1dCBzb21lIFVu aXggdXNlcnMgcHJlZmVyIFppcCB0byB0YXIuZ3opLiAgNiBBcHIgMjAwNC4KLQotVHJhY2VkIHBy b2JsZW1zIGluIFZNUy9JQTY0IHN0YXRpc3RpY3MgcmVwb3J0IHRvIHJmdGltZXIoKS9nZnRpbWVy KCkgaW4KLWNrdnRpby5jLCB3aGljaCB1c2Ugc3lzJCBhbmQgbGliJCBjYWxscyB0byBmaWd1cmUg ZWxhcHNlZCB0aW1lLiAgVGhlc2Ugd29yawotb24gVkFYIGFuZCBBbHBoYSBidXQgbm90IElBNjQu ICBTZW50IGEgcmVwb3J0IHRvIHRoZSBjaGllZiBlbmdpbmVlciBvZiB0aGUKLUlBNjQgVk1TIHBv cnQ7IGhlIHNheXMgaXQncyBwcm9iYWJseSBhIGJ1ZyBpbiBWTVMgOC4xICh3aGljaCBpcyBub3Qg YSByZWFsCi1yZWxlYXNlKTsgaGUnbGwgbWFrZSBzdXJlIGl0J3MgZml4ZWQgaW4gOC4yLiAgQXMg YW4gZXhwZXJpbWVudCwgdHJpZWQKLXN3YXBwaW5nIGluIHRoZSBVbml4IHZlcnNpb25zIG9mIHRo ZXNlIHJvdXRpbmVzICh3aGljaCBjYWxsIGdldHRpbWVvZmRheSgpCi1ldGMpLiAgVGhleSBzZWVt IHdvcmsganVzdCBmaW5lIChpdCBodW5nIGEgY291cGxlIHRpbWVzIGJ1dCBJIHRoaW5rIHRoYXQn cwotYmVjYXVzZSB0aGUgdW5kZXJseWluZyBzeXN0ZW0gaHVuZyB0b287IHRyeWluZyBpdCBsYXRl ciBvbiBhIG5ldyBjb25uZWN0aW9uLAotaXQgd2FzIGZpbmU7IGhvd2V2ZXIgSSBub3RpY2VkIGEg QklHIGRpc2NyZXBhbmN5IGluIHRocm91Z2hwdXQgYmV0d2Vlbgotc2VuZGluZyBhbmQgcmVjZWl2 aW5nKS4gIE1vdmVkIGRlZmluaXRpb25zIGZvciBWTVM2NEJJVCBhbmQgVk1TSTY0IHRvCi1ja2Nk ZWIuaCBzbyBhbGwgbW9kdWxlcyBjYW4gdXNlIHRoZW0gYW5kIGFkZGVkIHRoZW0gdG8gdGhlIFNI T1cgRkVBVFVSRVMKLWRpc3BsYXkuICBBZGRlZCBWTVNWODAgZGVmaW5pdGlvbiB0byBidWlsZCBw cm9jZWR1cmUuICBCZXRhLjAzKy4gIGNrY2RlYi5oLAotY2tjdXVzNS5jLCBja2N2dm1zLmgsIGNr dnRpby5jLCBja3ZrZXIuY29tLCA2IEFwciAyMDA0LgotCi1XaGlsZSBkb2luZyB0aGUgYnVpbGQt YWxsLCBJIG5vdGljZWQgdGhlIFZNUyB2ZXJzaW9uIGRpZCBub3QgYnVpbGQgd2l0aAotTXVsdGlu ZXQgb3Igb2xkZXIgVUNYIHZlcnNpb25zLCBhbHdheXMgd2l0aCB0aGUgc2FtZSBlcnJvcnMgLS0g dW5kZWNsYXJlZAotdmFyaWFibGVzLCB1bmRlZmluZWQgc3ltYm9scywgYWxsIFRDUC9JUCByZWxh dGVkLiAgVGhpcyBkaWRuJ3QgaGFwcGVuIGEKLWNvdXBsZSB3ZWVrcyBhZ28uLi4gIFNvbWVob3cg dGhlIG9yZGVyIG9mICNpbmNsdWRlcyB3YXMgbWVzc2VkIHVwIC0tCi1ja3V1c3IuaCBkZXBlbmRl ZCBvbiBzeW1ib2xzIHRoYXQgYXJlIGRlZmluZWQgaW4gY2tjbmV0LmgsIGJ1dCBja2NuZXQuaAot d2FzIGJlaW5nIGluY2x1ZGVkIGFmdGVyIGNrdXVzci5oLi4uICB0aGlzIHdhcyBjb21wb3VuZGVk IGJ5IHR3byBtaXNzaW5nCi1jb21tYXMgaW4gY2t2a2VyLmNvbS4gIDExIEFwciAyMDA0LgotCi1S ZW1vdmVkIEJldGEgZGVzaWduYXRpb24sIHJlbGVhc2VkIGFzIDguMC4yMTEsIDEwIEFwciAyMDA0 LgotCi1JIGhhZCBzb21laG93IGxvc3QgdGhlIGVkaXQgdG8gY2t1dGlvLmMgdGhhdCBjaGFuZ2Vk IHRoZSBVVUNQIGxvY2tmaWxlIGZvcgotTWFjIE9TIFggZnJvbSAvdmFyL3Nwb29sL3V1Y3AgdG8g L3Zhci9zcG9vbC9sb2NrLiAgU28gSSBzbGlwcGVkIGl0IGluIGFuZAotcmUtdXBsb2FkZWQgdmVy c2lvbiA4LjAuMjExLiAgWW91IGNhbiB0ZWxsIHRoZSBkaWZmZXJlbmNlIGJlY2F1c2UgU0hPVwot VkVSU0lPTlMgaGFzIDE3IEFwciAyMDA0IGZvciB0aGUgQ29tbXVuaWNhdGlvbnMgSS9PIG1vZHVs ZS4gIEFsc28gdGhlIDEwLjMKLWV4ZWN1dGFibGUgbm93IGhhcyBhIGRlc2lnbmVyIGJhbm5lcjog Ik1hYyBPUyBYIDEwLjMiLiAgbWFrZWZpbGUsIGNrdXZlci5oLAotY2t1dGlvLmMsIGNrdXVzWzQ1 XS5jLCAxNyBBcHIgMjAwNC4KLQotLS0tOC4wLjIxMS0tLQotCi1SZW1vdmVkICJ3ZXJtaXQiIGZy b20gIm1ha2UgY2xlYW4iIChob3cgZGlkIGl0IGdldCB0aGVyZT8pLiAgbWFrZWZpbGUuCi0KLUZy b20gSmVmZiwgYXBwbGllZCAxMCBNYXkgMjAwNC4KLSAuIFJlYXJyYW5nZSAjaWZkZWZzIHRoYXQg ZGVmaW5lIE9TLzItb25seSBmZWF0dXJlcy4gY2tjZGViLmguCi0gLiBGaXggdHdvIHN0cm5jYXQo KXMgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIGNrc3RybmNhdCgpcy4gIGNrdXVzNy5jLgotIC4gRml4 IHR3byBzdHJuY2F0KClzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBja3N0cm5jYXQoKXMuICBja3V1 czQuYy4KLSAuIEZpeCBvbmUgc3RybmNhdCgpLiBja2NmbnMuYy4KLSAuIFNFVCBGVFAgQ0hBUiBP TiB1c2VkIGJhY2t3YXJkcyBieXRlIG9yZGVyIHdoZW4gb3V0cHV0IHRvIHNjcmVlbi4gIGNrY2Zu cy5jLgotIC4gRml4IHR3byBzdHJuY2F0KClzLiAgY2t1dXMzLmMuCi0gLiBBZGQgU0VUIE5FVFdP UksgVFlQRSBOQU1FRC1QSVBFIGZvciBLOTUuICBja3V1czMuYy4KLSAuIEFkZCAiTm8gYWN0aXZl IGNvbm5lY3Rpb25zIiBtZXNzYWdlIHRvIGh1cG9rKCkuICBja3V1czMuYy4KLSAuIEZpeCBtYW55 IHN0cm5jYXQoKXMuICBja2NuZXQuYy4KLSAuIEZpeCBzb21lIHN0cm5jYXQoKXMuICBja2NmdHAu YwotIC4gTWFrZSBGVFAgcG9ydCB1bnNpZ25lZCBzaG9ydCBmb3IgMTYzODMgPCBwb3J0IDwgNjU1 MzYuICBja2NmdHAuYy4KLSAuIEltcHJvdmVtZW50cyB0byBGVFAgVVNFUiBjb21tYW5kLiAgY2tj ZnRwLmMuCi0gLiBGaXggRkVBVCBwYXJzaW5nIHRvIGFsbG93IGZvciB2YXJpb3VzIGZvcm1zIG9m IHdoaXRlc3BhY2UuICBja2NmdHAuYy4KLQotUy1FeHByZXNzaW9uIChBTkQgRk9PIEJBUikgd291 bGQgbm90IHNob3J0LWNpcmN1aXQgaWYgRk9PJ3MgdmFsdWUgd2FzIDAsCi1ldmVuIHRob3VnaCBz aG9ydC1jaXJjdWl0aW5nIGNvZGUgaGFzIGJlZW4gdGhlcmUgc2luY2UgRGF5IDEuICBTaW1pbGFy bHkgZm9yCi0oT1IgQkFSIEZPTykuICBUdXJucyBvdXQgdGhlIGZpcnN0IG9wZXJhbmQgd2FzIGEg c3BlY2lhbCBjYXNlIHRoYXQgYnlwYXNzZWQKLXRoZSBzaG9ydC1jaXJjdWl0IGNoZWNrLiAgRml4 ZWQgaW4gZG9zZXhwKCk6IGNrdXVzMy5jLCAxMCBNYXkgMjAwNC4KLQotUmVkIEhhdCA3LjMgKGFu ZCBtYXliZSBvdGhlcnMpIDxiYXVkYm95Lmg+IHJlZmVyZW5jZWQgb3BlbigpIHdpdGhvdXQgZmly c3QKLWVuc3VyaW5nIGl0IHdhcyBkZWNsYXJlZC4gIFRoZSBkZWNsYXJhdGlvbiBpcyBpbiA8ZmNu dGwuaD4sIHdoaWNoIGlzIGFmdGVyCi08YmF1ZGJveS5oPiBpbiBja3V0aW8uYyBzZXJpZXMgb2Yg I2luY2x1ZGVzLiAgTWFkZSBhIHNwZWNpYWwgY2FzZSBmb3IgdGhpcy4KLWNrdXRpby5jIChzZWUg Y29tbWVudHMpLCAxMCBNYXkgMjAwNC4KLQotSWYgdGhlIGxvY2FsIEtlcm1pdCdzIHBhcml0eSBp cyBzZXQgdG8gU1BBQ0UgYW5kIHRoZW4gYSBmaWxlIGFycml2ZXMgdmlhCi1hdXRvZG93bmxvYWQs IGF1dG9tYXRpYyBwYXJpdHkgZGV0ZWN0aW9uIGltcHJvcGVybHkgc3dpdGNoZXMgaXQgdG8gTk9O RS4KLUZpeGVkIGluIHJwYWNrKCkgYnkgc3dpdGNoaW5nIHBhcml0eSBhdXRvbWF0aWNhbGx5IG9u bHkgaWYgcGFyY2hrKCkgcmV0dXJucwotPiAwIChyYXRoZXIgdGhhbiA+IC0xKSwgc2luY2UgTk9O RSBhbmQgU1BBQ0UgYXJlIGluZGlzdGluZ3Vpc2hhYmxlLiAgQQotYmlnZ2VyIHByb2JsZW0gc3Rp bGwgcmVtYWluczogYXV0b2Rvd25sb2FkIGRvZXMgbm90IHdvcmsgYXQgYWxsIGlmIHRoZQotc2Vu ZGVyIGlzIHVzaW5nIGFjdHVhbCBwYXJpdHkgYml0cyAoZXZlbiwgb2RkLCBvciBtYXJrKSBhbmQg dGhlIHJlY2VpdmVyJ3MKLXBhcml0eSBpcyBOT05FLiAgY2tjZm4yLmMsIDEwIE1heSAyMDA0Lgot Ci1XaGVuIGEgRElBTCBNQUNSTyBpcyBkZWZpbmVkIGFuZCB0aGUgcGhvbmUgbnVtYmVyIGlzIGNv bXByaXNlZCBvZiBtb3JlIHRoYW4KLW9uZSAid29yZCIgKGkuZS4gY29udGFpbnMgc3BhY2VzKSwg dGhlIGRpYWwgbWFjcm8gbG9zZXMgdGhlIHNlY29uZCBhbmQKLXN1YnNlcXVlbnQgd29yZHMgYWZ0 ZXIgdGhlIGZpcnN0IGNhbGwuIEZpeGVkIGluIHhkaWFsKCkgYnkgaW5zZXJ0aW5nIHF1b3Rlcwot YXJvdW5kIHBob25lIG51bWJlciBiZWZvcmUgcGFzc2luZyBpdCB0byB4ZGlhbCgpLiBja3V1czYu YywgMTAgTWF5IDIwMDQuCi0KLURJQUwgTUFDUk8gZml4IHdhcyBub3QgcmlnaHQ7IHRoZSBxdW90 ZXMgd2VyZSBrZXB0IGFzIHBhcnQgb2YgdGhlIHBob25lCi1udW1iZXIgYW5kIHNlbnQgdG8gdGhl IG1vZGVtLiAgZG9kbygpIHBva2VzIGl0cyBhcmd1bWVudCB0byBzZXBhcmF0ZSB0aGUKLW1hY3Jv IGFyZ3VtZW50IHN0cmluZyBpbnRvIGl0cyBjb21wb25lbnQgYXJndW1lbnRzLiAgeGRpYWwoKSBp cyBjYWxsZWQKLXJlcGVhdGVkbHkgb24gdGhlIHNhbWUgc3RyaW5nLCBzbyBhZnRlciB0aGUgZmly c3QgdGltZSwgYSBOVUwgaGFzIGJlZW4KLWRlcG9zaXRlZCBhZnRlciB0aGUgZmlyc3Qgd29yZCBv ZiB0aGUgdGVsZXBob25lIG51bWJlci4gIFRoZSBmaXggaXMgdG8gaGF2ZQoteGRpYWwoKSBjcmVh dGUgYSBwb2tlYWJsZSBjb3B5IG9mIGl0cyBhcmd1bWVudCBzdHJpbmcgYmVmb3JlIGNhbGxpbmcK LWRvZG8oZGlhbC1tYWNybyxhcmdzLi4uKS4gIEl0IG1pZ2h0IHNlZW0gb2RkIHRoYXQgZG9kbyBw b2tlcyBpdHMgYXJndW1lbnQsCi1idXQgbWFraW5nIGNvcGllcyB3b3VsZCBiZSB3b3VsZCBiZSBw cm9oaWJpdGl2ZSBpbiBzcGFjZSBhbmQgdGltZS4KLWNrdXVzNi5jLCAyMyBNYXkgMjAwNC4KLQot RlRQIENEIGRpZCBub3Qgc3RyaXAgYnJhY2VzIG9yIHF1b3RlcyBmcm9tIGFyb3VuZCBpdHMgYXJn dW1lbnQuICBGaXhlZCBpbgotZG9mdHBybXQoKTogY2tjZnRwLmMsIDIzIE1heSAyMDA0LgotCi1B ZGRlZCBjbGllbnQgc2lkZSBvZiBSRU1PVEUgTUVTU0FHRS9STUVTU0FHRS9STVNHOiBja3V1c1ty MjddLmMsIDIzIE1heSAyMDA0LgotCi1TZXJ2ZXIgc2lkZSBvZiBSRU1PVEUgTUVTU0FHRTogY2tj cHJvLncsIDIzIE1heSAyMDA0LgotCi1Gcm9tIERhdmUgU25lZGRvbjogYW4gdXBkYXRlZCBDS1ZL RVIuQ09NIGNvbnRhaW5pbmcgYSBmaXggd2hlcmUgdGhlCi1DT01QQVFfU1NMIHN5bWJvbCB3YXMg bm90IGRlZmluZWQgYnV0IGxhdGVyIHJlZmVyZW5jZWQgd2hpY2ggZ2VuZXJhdGVkIGFuCi11bmRl ZmluZWQgc3ltYm9sIGVycm9yLiAgY2t2a2VyLmNvbSwgNSBKYW4gMjAwNS4KLQotRnJvbSBBbmR5 IFRhbmVuYmF1bSAoMjggTWF5IDIwMDUpOgotIC4gRml4IGFuIGVycmFudCBwcm90b3R5cGUgaW4g Y2tja2VyLmggYW5kIGNrdWNtZC5oIC0gKCkgaW5zdGVhZCBvZiAodm9pZCkuCi0gLiBBZGQgc3Vw cG9ydCBmb3IgTUlOSVggMy4wLiAgbWFrZWZpbGUsIGNrdXRpby5jLCBja3VmaW8uYywgY2t1dmVy LmguCi0KLUZpeGVkIG1lc3NlZC11cCBzbmRobHAoKSBjYWxsIHdoaWNoIGFwcGFyZW50bHkgaGFk IGJlZW4gamlnZ2VyZWQgdG8KLWNvbXBlbnNhdGUgZm9yIHRoZSBiYWQgcHJvdG90eXBlIHdoaWNo IGhhcyBub3cgYmVlbiBmaXhlZCwgY2tjcHJvLncsCi0xMiBKdW4gMjAwNS4KLQotRnJvbSBKZWZm ICgxMiBKdW5lIDIwMDUpOgotIC4gU2VjdXJpdHkgdXBkYXRlcy4gIGNrX3NzbC5jLCBja19jcnAu YywgY2t1YXRoLmMuCi0gLiBGaXggYnVnIGluIEs5NSBTRVQgUFJJTlRFUiBDSEFSQUNURVItU0VU LiBja3V1czMuYy4KLSAuIEFkZCBwcmludGVyIGNoYXJhY3Rlci1zZXQgdG8gSzk1IFNIT1cgUFJJ TlRFUiBkaXNwbGF5LiBja3V1czUsYwotIC4gQWRkIFNFVCBNU0tFUk1JVCBGSUxFLVJFTkFNSU5H IHRvIEs5NS4gY2t1dXM3LmMsIGNrdXVzci5oLgotIC4gQWRkIGhlbHAgZm9yIEs5NSBTRVQgTVNL RVJNSVQuICBja3V1czIuYy4KLSAuIEFkZCBTRVQgR1VJIENMT1NFIHRvIEs5NS4gIGNrdXVzci5o LCBja3V1czIuYywgY2t1dXMzLmMKLSAuIEFkZCBoZWxwIHRleHQgZm9yIEs5NSBTRVQgR1VJIE1F TlVCQVIgYW5kIFRPT0xCQVIuICBja3V1czIuYy4KLSAuIEFkZCAtLW5vY2xvc2UgY29tbWFuZC1s aW5lIG9wdGlvbiBmb3IgSzk1LiAgY2t1dXN5LmMKLSAuIEFkZCBQQU0gc3VwcG9ydCBmb3IgTWFj IE9TIFguICBja3VmaW8uYy4KLSAuIEFkZCBHU1NBUEkgc3VwcG9ydCBmb3IgTWFjIE9TIFguICBj a2NmdHAuYy4KLSAuIFBpY2sgdXAgbW9yZSBVUkwgb3B0aW9ucy4gIGNrY2tlci5oLCBja3V1c3ku Yy4KLSAuIEZpeCBidWcgaW4gZGVsdGEtdGltZSBjYWxjdWxhdGlvbiBhY3Jvc3MgeWVhciBib3Vu ZGFyeS4gIGNrdWNtZC5jLgotIC4gQWRkIFNlY3VyZSBFbmRwb2ludHMgdG8gY29weXJpZ2h0IG5v dGljZXMuICBja2NtYWkuYy4KLSAuIEZpeCBGVFAgSEVMUCB0byBvdmVycmlkZSB1bnZlcmJvc2Ug c2V0dGluZy4gIGNrY2Z0cC5jLgotIC4gRml4IGFzc29ydGVkIG1pbm9yIHR5cG9zLgotCi1Gcm9t IE1hdHRoaWFzIEt1cno6IGF1dG9tYXRpYyBoZXJhbGQgZ2VuZXJhdGlvbiBmb3IgTmV0QlNEIDIu MCBhbmQgbGF0ZXIsCi0ibWFrZSBuZXRic2QyIi4gIGNrdXZlci5oLCBtYWtlZmlsZSwgMTIgSnVu IDIwMDUuCi0KLUFkZGVkIFNFVCBURVJNSU5BTCBMRi1ESVNQTEFZLCBsaWtlIENSLURJU1BMQVkg YnV0IGZvciBsaW5lZmVlZCByYXRoZXIgdGhhbgotY2FycmlhZ2UgcmV0dXJuLiAgY2t1dXNyLmgs IGNrdXVzWzI1N3hdLmMsIDEyIEp1biAyMDA1LgotCi1NYWRlIGEgY29tbWFuZC1saW5lIG9wdGlv biAtLXVuYnVmZmVyZWQgdG8gZG8gd2hhdCB0aGUgLUROT05PU0VUQlVGCi1jb21waWxlLXRpbWUg b3B0aW9uIGRvZXMsIGkuZS4gZm9yY2UgdW5idWZmZXJlZCBjb25zb2xlIGkvby4gIFVuaXggb25s eS4KLWNrdXVzci5oLCBja3V1c3kuYywgY2t1dGlvLmMsIDEyIEp1biAyMDA1LgotCi1GaXhlZCBn ZXRpYWN0KCkgKHdoaWNoIGRpc3BsYXlzIFRFUk0gSURMRS1BQ1RJT04gc2V0dGluZykgdG8gZGlz cGxheQotc3BhY2UgYXMgXHszMn0uICBja3V1czcuYywgMTIgSnVuIDIwMDUuCi0KLUFkZGVkIExN ViBhcyBhIHN5bm9ueW0gZm9yIExSRU5BTUUsIHdoaWNoIGlzIGl0c2VsZiBhIHN5bm9ueW0gZm9y IExPQ0FMCi1SRU5BTUUuICBja3V1c3IuYywgMTIgSnVuIDIwMDUuCi0KLVB1dCBIRUxQIFNFVCBU RVJNSU5BTCBERy1VTklYLU1PREUgdGV4dCB3aGVyZSBpdCBiZWxvbmdlZC4gIGNrdXVzMi5jLAot MTIgSnVuIDIwMDUuCi0KLUFkZGVkIElGIExJTksgKFVuaXggb25seSkgdG8gdGVzdCBpZiBhIGZp bGVuYW1lIGlzIGEgc3ltbGluay4gIFVzZXMgdGhlIG1vc3QKLXNpbXBsZW1pbmRlZCBwb3NzaWJs ZSBtZXRob2QsIGNhbGxzIHJlYWRsaW5rKCkgdG8gc2VlIGlmIGl0IHN1Y2NlZWRzIG9yIGZhaWxz LgotTm8gb3RoZXIgbWV0aG9kIGlzIGRlcGVuZGFibGUgYWNyb3NzIGRpZmZlcmVudCBVbml4ZXMu ICBUaGlzIGNvZGUgc2hvdWxkIGJlCi1wb3J0YWJsZSBiZWNhdXNlIEkgYWxyZWFkeSB1c2UgcmVh ZGxpbmsoKSBlbHNld2hlcmUgd2l0aGluIGV4YWN0bHkgdGhlIHNhbWUKLSNpZmRlZnMuICBja3Vm aW8uYywgY2t1dXMyLmMsIGNrdXVzNi5jLCAxMiBKdW4gMjAwNS4KLQotRml4ZWQgYSBidWcgaW4g d2hpY2ggXGZkaXIoKSB3b3VsZG4ndCB3b3JrIHdoZW4gaXRzIGFyZ3VtZW50IHdhcyB0aGUgbm9u d2lsZAotbmFtZSBvZiBhIGRpcmVjdG9yeSBmaWxlLiAgenhwYW5kKCk6IGNrdWZpby5jLCAxMiBK dW4gMjAwNS4KLQotTWFkZSBcZmRpcmVjdG9yeSgpIGEgc3lub255bSBmb3IgXGZkaXJlY3Rvcmll cygpLiAgTWFkZSBcZmRpcigpIGFuCi1hY2NlcHRhYmxlIGFiYnJldmlhdGlvbiBmb3IgdGhlc2Us IGV2ZW4gdGhvdWdoIGl0IGNsYXNoZXMgd2l0aCBcZmRpcm5hbWUoKSwKLXdoaWNoIHN0aWxsIHdv cmtzIGFzIGJlZm9yZS4gIGNrdXVzNC5jLCAxMiBKdW4gMjAwNS4KLQotQWRkZWQgdGhlIGxvbmct bmVlZGVkIFxmbG9weCgpIGZ1bmN0aW9uLCB0byByZXR1cm4gcmlnaHRtb3N0IHBpZWNlcyBvZgot c3RyaW5ncywgc3VjaCBhcyBmaWxlIGV4dGVuc2lvbnMuICBcZnN0cmlweCgpIGFuZCBcZmxvcHgo KSBhcmUgdGhlCi1vcnRob2dvbmFsIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHBpY2sgZmlsZW5hbWVz IGFwYXJ0IGZyb20gdGhlIHJpZ2h0OgotXHN0cmlweChmb28udGFyLmd6KSA9IGZvby50YXI7IGZs b3B4KGZvby50YXIuZ3opID0gZ3ouICBja3V1c3IuaCwgY2t1dXNyLmMsCi1ja3V1czIuYywgMTIg SnVuIDIwMDUuCi0KLVJlbW92ZWQgcmVmZXJlbmNlIHRvIGRlZnVuY3QgZmF4IG51bWJlciwgY2tj bWFpLmMsIDEyIEp1biAyMDA1LgotCi1BZGRlZCAtREhBVkVfUFRNWCB0byBsaW51eCtrcmI1K29w ZW5zc2wremxpYitzaGFkb3crcGFtLiAgRnJvbSBUaW1vdGh5IEZvbGtzLgotbWFrZWZpbGUsIDEy IEp1biAyMDA1LgotCi1CdWlsdCBvbiBTb2xhcmlzIDkgYW5kIE5ldEJTRCAyLjAuCi0KLUZyb20g SmVmZjogTmV3IGJ1aWxkIHRhcmdldCBmb3IgTWFjIE9TIFggMTAuMyB3aXRoIEtlcmJlcm9zIDUg YW5kIFNTTC4KLW1ha2VmaWxlLCAxNCBKdW4gMjAwNS4KLQotRml4ZWQgZXJyb3IgaW4gY2t1dmVy LmggTmV0QlNEICNpZmRlZnMuICAxNSBKdW4gMjAwNS4KLQotRml4ZWQgU0VUIFRFUk1JTkFMIElE TEUtQUNUSU9OIE9VVFBVVCB0byB3b3JrIGFzIGRvY3VtZW50ZWQsIG5hbWVseSBpZiB0aGUKLW91 dHB1dCBzdHJpbmcgaXMgZW1wdHksIHRvIHNlbmQgYSBOVUwuICBQcmV2aW91c2x5IHRoZXJlIHdh cyBubyB3YXkgdG8gbWFrZQotaXQgc2VuZCBhIE5VTC4gIGNrdXVzNy5jLCAxNSBKdW4gMjAwNS4K LQotU3VwcG9zZSAoaW4gVW5peCwgZm9yIGV4YW1wbGUpIGEgZmlsZW5hbWUgY29udGFpbnMgd2ls ZGNhcmQgY2hhcmFjdGVycywgc3VjaAotYXMge2FiY30udHh0LiAgV2hlbiByZWZlcnJpbmcgdG8g c3VjaCBhIGZpbGUgKGUuZy4gaW4gYSBTRU5EIGNvbW1hbmQpLCB0aGVzZQotY2hhcmFjdGVycyBj YW4gYmUgcXVvdGVkLCBlLmcuIFx7YWJjXH0udHh0LiAgQnV0IGlmIHRoZSBmaWxlIGxpc3QgaGFz IGJlZW4KLW9idGFpbmVkIHByb2dyYW1tYXRpY2FsbHksIGUuZy4gc3RvcmVkIGluIGFuIGFycmF5 LCB0aGVyZSBpcyBubyB3YXksIHNob3J0Ci1vZiB0ZWRpb3VzLCBjb21wbGljYXRlZCwgYW5kIGVy cm9yLXByb25lIHN0cmluZyBwcm9jZXNzaW5nLCB0byByZWZlcmVuY2UgdGhlCi1maWxlLiAgRm9y IHRoaXMgd2UgbmVlZCBhIHdheSB0byBkaXNhYmxlIHdpbGRjYXJkIHByb2Nlc3NpbmcuICBJIGFk ZGVkIHsgT04sCi1PRkYgfSBjaG9pY2VzIGZvciB0aGUgU0VUIFdJTEQgYW5kIFNIT1cgRklMRSBj b21tYW5kczogY2t1dXNyLmgsIGNrdXVzWzIzNF0uYy4KLXsgT04sIE9GRiB9IHR1cm5zIHdpbGRj YXJkaW5nIG9mZiBhbmQgb24gd2l0aG91dCBhZmZlY3RpbmcgdGhlIHsgS0VSTUlULAotU0hFTEwg fSBhZ2VudCBjaG9pY2U7IGl0IGRvZXMgdGhpcyBieSBzZXR0aW5nIGEgbmV3IGFuZCBzZXBhcmF0 ZSBnbG9iYWwKLXZhcmlhYmxlLCB3aWxkZW5hLiAgQWRkZWQgc2VtYW50aWNzIHRvIGNrdWZpby5j LiAgQ3J1ZGUgYnV0IGVmZmVjdGl2ZS4gIEl0Ci1taWdodCBoYXZlIGJlZW4gbW9yZSBVbml4bGlr ZSB0byBhZGQgWWV0IEFub3RoZXIgZm9ybSBvZiBxdW90aW5nIGJ1dCB3ZQotaGF2ZSBlbm91Z2gg b2YgdGhhdCBhbHJlYWR5IChsYXRlciBtYXliZSBJJ2xsIGFkZCBhIFxmdW5jdGlvbigpIGZvciB0 aGlzKS4KLU5lZWRzIHRvIGJlIHByb3BhZ2F0ZWQgdG8gV2luZG93cyBhbmQgVk1TLiAgMTUgSnVu IDIwMDUuCi0KLUltcHJvdmVkIGFuZCBmaXhlZCB0eXBvcyBpbiBIRUxQIFdJTERDQVJEIGFuZCBI RUxQIFBBVFRFUk4uICBja3V1czIuYywKLTE1IEp1biAyMDA1LgotCi1UaGUgR1JFUCBjb21tYW5k LCBhbmQgcHJvYmFibHkgYW55dGhpbmcgZWxzZSB0aGF0IHVzZXMgY2ttYXRjaCgpIGZvciBwYXR0 ZXJuCi1tYXRjaGluZywgZmFpbGVkIG9uIHBhdHRlcm5zIGxpa2UgKi9bMC0zXSouaHRtbC4gIFRo ZSBbYS1iXSBoYW5kbGVyLCB3aGVuCi1mYWlsaW5nIHRvIG1hdGNoIGF0IHRoZSBjdXJyZW50IHBv c2l0aW9uLCBuZWdsZWN0ZWQgdG8gYmFjayB1cCB0aGUgcGF0dGVybgotYW5kIHRyeSBhZ2FpbiBv biB0aGUgcmVtYWluZGVyIG9mIHRoZSBzdHJpbmcuICBJIGFsc28gZml4ZWQgYW5vdGhlciBjYXNl LCBpbgotd2hpY2ggbWF0Y2hpbmcgYSBsaXRlcmFsIHN0cmluZyBhKmI/YyBhZ2FpbnN0IHRoZSBw YXR0ZXJuIGFbKj9dKls/Kl1jIGNhdXNlZAotY2ttYXRjaCgpIHRvIHJlY3Vyc2UgdW50aWwgaXQg YmxldyB1cC4gIGNrY2xpYi5jLCAxNiBKdW4gMjAwNS4KLQotQWRkZWQgYnVpbGRzIGFuZCBkZXNp Z25lciBiYW5uZXIgZm9yIFNvbGFyaXMgMTAuICBtYWtlZmlsZSwgY2t1dmVyLmgsCi0yNyBKdW4g MjAwNS4KLQotRGVmaW5lZCBDS0hUVFAgZm9yIE5ldEJTRCwgdGhlIEhUVFAgY29kZSBidWlsZHMg YW5kIHdvcmtzIGZpbmUgdGhlcmUuCi1ja2NkZWIuaCwgMiBKdWwgMjAwNS4KLQotQWRkZWQgI2lm bmRlZiBPU0Y0MC4uI2VuZGlmIGFyb3VuZCBkZWZpbml0aW9uIG9mIGluZXRfYXRvbigpIGluIGNr X3NzbCgpCi10byBhbGxvdyBidWlsZGluZyBpbiBUcnU2NC4gIEFkZGVkIHRydTY0LTUxYitvcGVu c3NsIHRvIG1ha2VmaWxlLgotMTUgSnVsIDIwMDUuCi0KLUhUVFAgR0VUIHdvdWxkIGZhaWwgaWYg dGhlIFVSTCBjb250YWluZWQgYW55IG1ldGFjaGFyYWN0ZXJzLCBubyBtYXR0ZXIgaG93Ci1tdWNo IHlvdSBxdW90ZWQgdGhlbS4gIEFsdGhvdWdoIGl0IHVzZXMgY21mbGQoKSB0byBwYXJzZSB0aGUg KHBhcnRpYWwpIFVSTCwKLWl0IHRoZW4gdXNlcyBjbW9maSgpIHRvIGdldCB0aGUgb3V0cHV0IGZp bGVuYW1lLCB3aGljaCBieSBkZWZhdWx0IGlzIHRoZQotImZpbGVuYW1lIiBmcm9tIHRoZSBVUkws IHdoaWNoIG1pZ2h0IGJlIHNvbWV0aGluZyBsaWtlICJyYW5rZW0uYXNwP2lkPTE2MzkiLgotY21v ZmkoKSByZWZ1c2VzIHRvIGFjY2VwdCB1bnF1b3RlZCBtZXRhY2hhcmFjdGVycyBpbiAiZmlsZW5h bWVzIiBhbmQgdGhhdCdzCi13aGF0IGhhcHBlbnMgaW4gdGhpcyBjYXNlIGlmIHRoZSBvdXRwdXQg ZmlsZW5hbWUgaXMgbm90IHNwZWNpZmllZC4gIFdvcmtlZAotYXJvdW5kIHRoaXMgYnkgZGlzYWJs aW5nIHdpbGRjYXJkIHByb2Nlc3NpbmcgYXJvdW5kIEhUVFAgR0VUIHVzaW5nIHRoZSBuZXcKLSJ3 aWxkZW5hIiB2YXJpYWJsZSBmcm9tIEp1bmUgMTV0aC4gIGNrdXVzci5jLCAxOCBKdWwgMjAwNS4K LQotRml4ZWQgdGhlIEp1bmUgMTZ0aCBmaXggdG8gdGhlIHBhdHRlcm4gbWF0Y2hlci4gIEkgZml4 ZWQgYSByZWFsIHByb2JsZW0sIGJ1dAotSSBtYWRlIGFuIHVucmVsYXRlZCBvcHRpbWl6YXRpb24g dGhhdCBpbnRyb2R1Y2VkIG5ldyBvbmVzLiAgY2tjbGliLmMsCi0xOCBKdWwgMjAwNS4KLQotQWRk ZWQgbWlzc2luZyBoZWxwIHRleHQgZm9yIFxmYjY0ZW5jb2RlKCkgYW5kIFxmYjY0ZGVjb2RlKCku ICBja3V1czIuYywKLTE4IEp1bCAyMDA1LgotCi1DaGFuZ2VkIFNFVCBXSUxEIE9GRiBoZWxwIHRl eHQgdG8gd2FybiB0aGF0IHRoaXMgc2V0dGluZyBwcmV2ZW50cyB0aGUKLWNyZWF0aW9uIG9mIGJh Y2t1cCBmaWxlcyAobGF0ZXIgSSdsbCBoYXZlIHRvIHNlZSBpZiBzb21ldGhpbmcgbW9yZSB1c2Vm dWwKLWNhbiBiZSBkb25lIGFib3V0IHRoaXMpLiAgY2t1dXMyLmMsIDE4IEp1bCAyMDA1LgotCi1C dWlsdCBPSyBvbiBNYWMgT1MgWCAxMC40LjIgdXNpbmcgbWFjb3N4MTAzIHRhcmdldCAoYnV0IHdp dGggc29tZQotInNpZ25lZG5lc3MiIHdhcm5pbmdzIGluIGNrY25ldC5jIGFuZCBja2NmdHAuYyku ICBCdWlsdCBvbiBVbml4d2FyZSA3LjEuNAotd2l0aCB1dzcgdGFyZ2V0LiAgMjctMjggSnVsIDIw MDUuIAotCi1BZGRlZCAtRENLSFRUUCB0byBNYWMgT1MgWCAxMC4zLS40IEtGTEFHUy4gIE1ha2Vm aWxlLCA0IEF1ZyAyMDA1LgotCi1CdWlsdCBvbiBCU0RJIDQuMy4xLiAgQWRkZWQgLURDS0hUVFAu ICAKLQotQ29tcGFjdCBzdWJzdHJpbmcgbm90YXRpb24gZXh0ZW5kZWQgdG8gYWNjZXB0IG5vdCBv bmx5IHN0YXJ0Omxlbmd0aCBidXQgYWxzbwotc3RhcnQtZW5kIG5vdGF0aW9uLiAgVGh1cyBccyhm b29bMTI6MThdKSBtZWFucyB0aGUgc3Vic3RyaW5nIG9mIGZvbyBzdGFydGluZwotYXQgcG9zaXRp b24gMTIgb2YgbGVuZ3RoIDE4LCBhbmQgdG5lIG5ldyBccyhmb29bMTItMThdKSBtZWFucyB0aGUg c3Vic3RyaW5nCi1vZiBmb28gc3RhcnRpbmcgYXQgcG9zaXRpb24gMTIgYW5kIGVuZGluZyB3aXRo IHBvc2l0aW9uIDE4LiAgRGl0dG8gZm9yCi1cOihcJWEpLCBldGMuICBja3V1czQuYywgOSBBdWcg MjAwNS4KLQotU2VlIGNvcnJlc3BvbmRlbmNlIHdpdGggTWFyayBTYXBpcm8sIE5vdiAyMDAzIGFu ZCBTZXAgMjAwNCwgYWJvdXQgY2VydGFpbgotdmFyaWF0aW9ucyBvbiBJRiBzeW50YXggaGF2aW5n IGJlZW4gYnJva2VuIGJ5IHRoZSBpbnRyb2R1Y3Rpb24gb2YgImltbWVkaWF0ZQotbWFjcm9zIiBj aXJjYSAxOTk5LiAgSXQgc2VlbXMgdGhlIHByb2JsZW0gLS0gdmFyaWFibGVzIG5vdCBiZWluZyBl eHBhbmRlZCAtLQotYWx3YXlzIG9jY3VycyBpbiB0aGUgRUxTRSBwYXJ0IHdoZW4gKGEpIHRoZSBJ RiBjb25kaXRpb24gaXMgZmFsc2U7IChiKSB0aGUKLUVMU0UgY29tbWFuZCBpcyAic3RhbmRhbG9u ZSIsIGkuZS4gZXhwcmVzc2VkIGFzIGEgc2VwYXJhdGUgY29tbWFuZCBhZnRlciB0aGUKLUlGIGNv bW1hbmQgKG9yaWdpbmFsIEMtS2VybWl0IDVBIHN5bnRheCksIGFuZCAoYykgaXRzIGNvbW1hbmQg bGlzdCBpcyBhIGJsb2NrLgotVGhpcyB3b3VsZCBzdWdnZXN0IHRoZSBwcm9ibGVtIGlzIGluIHRo ZSBYWEVMUyBwYXJzZXIuCi0KLUdvaW5nIGJhY2sgdG8gMTk5OSwgSSBmaW5kIHRoaXM6Ci0gIEZp eGVkIGEgcHJvYmxlbSBKaW0gV2hpdGJ5IG5vdGljZWQgd2l0aCBxdW90aW5nIGluIEVMU0Ugc3Rh dGVtZW50cy4gIFRoaXMKLSAgcHJvYmxlbSB3YXMgaW50cm9kdWNlZCB3aGVuIEkgdW5pZmllZCBJ RiBhbmQgWElGLCBhbmQgb2NjdXJzIG9ubHkgd2hlbgotICBFTFNFIGJlZ2lucyBvbiBhIGxpbmUs IGZvbGxvd2VkIGJ5IGEgeyBjb21tYW5kIGxpc3QgfSByYXRoZXIgdGhhbiBhIHNpbmdsZQotICBj b21tYW5kLiAgVGhlIHNvbHV0aW9uIChncm9zcykgd2FzIHRvIG1ha2UgYSBzcGVjaWFsIHZlcnNp b24gb2YgcHVzaGNtZCgpCi0gIChjYWxsZWQgcHVzaHFjbWQoKSkgZm9yIHRoaXMgc2l0dWF0aW9u LCB3aGljaCBkb3VibGVzIGJhY2tzbGFzaGVzIHdoaWxlCi0gIGNvcHlpbmcsIEJVVCBPTkxZIElG IGl0J3MgYSBjb21tYW5kIGxpc3QgKGkuZS4gc3RhcnRzIHdpdGggInsiKTsgb3RoZXJ3aXNlCi0g IHdlIGJyZWFrIGxvdHMgb2Ygb3RoZXIgc3R1ZmYuICBSZXN1bHQgcGFzc2VzIEppbSdzIHRlc3Qg YW5kIHN0aWxsIHBhc3NlcwotICBja2VkZW1vLmtzYyBhbmQgaWZ0ZXN0LmtzYy4gIGNrdWNtZC5j LCBja3V1czYuYywgMjcgU2VwIDk5LgotCi1JIHVuZGlkIHRoaXMgY2hhbmdlIGFuZCBpdCBtYWRl IG5vIGRpZmZlcmVuY2UgdG8gYWxsIHRoZSBvdGhlciBJRgotY29uc3RydWN0aW9ucyAoaW4gZmFj dCwgaXQgZml4ZWQgYW4gdW5yZWxhdGVkIG9uZSB0aGF0IHdhcyBicm9rZW4sIHNvIG5vdwotaWZ0 ZXN0IHNjb3JlcyA1NCBvdXQgb2YgNTQsIGluc3RlYWQgb2YgNTMpLiAgSG93ZXZlciwgaXQgZG9l cyBub3QgZml4IHRoZQotRUxTRSBwcm9ibGVtOyBpbiBmYWN0IGl0IHB1c2hlcyBpdCBhbGwgdGhl IHdheSBpbiB0aGUgb3RoZXIgZGlyZWN0aW9uOgotCi0gIFRoZSBvcHBvc2l0ZSBvY2N1cnMgYW55 IHRpbWUgeW91IHRyeSB0byBleGVjdXRlIGFuIGltbWVkaWF0ZSBtYWNybyBpbnNpZGUgYQotICBt YWNybyBvciBhbnkgb3RoZXIgeyBibG9jayB9OiBub3Qgb25seSBpcyB0aGUgdmFyaWFibGUgZXZh bHVhdGVkLCBpdCBpcwotICBldmFsdWF0ZWQgaW50byBub3RoaW5nLiAgSXQgbG9va3MgbGlrZSB0 aGlzIGhhcHBlbnMgb25seSBpbiBpbW1lZGlhdGUKLSAgbWFjcm9zLCBpLmUuICpjb21tYW5kcyog dGhhdCBzdGFydCB3aXRoICd7Jy4gIFNvIG1heWJlIHdlIHJlYWxseSBoYXZlIHR3bwotICBpc29s YXRlZCBwcm9ibGVtcywgdGhhdCBjYW4gZWFjaCBiZSBmaXhlZC4KLQotVGhlIHNpdHVhdGlvbiBp cyBpbGx1c3RyYXRlZCBieSB0aGlzIHNpbXBsZSBzY3JpcHQ6Ci0KLSAgZGVmIHh4IHsKLSAgICAg IGlmIGZhbHNlIHsgZWNobyBcJTEsIGVjaG8gXCUyIH0KLSAgICAgIGVsc2UgeyBlY2hvIFwlMywg ZWNobyBcJTQgfQotICB9Ci0gIHh4IG9uZSB0d28gdGhyZWUgZm91cgotCi1XaXRoIHB1c2hxY21k KCkgaXQgZWNob2VzIHRoZSB2YXJpYWJsZSBuYW1lcyBsaXRlcmFsbHk7IHdpdGggcHVzaGNtZCgp IGl0IAotZWNob2VzIGVtcHR5IGxpbmVzLiAgU2luY2UgRUxTRSwgd2hlbiBpdHMgYXJndW1lbnQg aXMgYSBibG9jaywgZGlzcGF0Y2hlcwotdG8gdGhlIGltbWVkaWF0ZS1tYWNybyBoYW5kbGVyLCBp dCBzZWVtcyB3ZSBoYXZlIHVuaWZpZWQgdGhlIHR3byBwcm9ibGVtcywKLXNvIGZpeGluZyBvbmUg c2hvdWxkIGZpeCB0aGUgb3RoZXIuCi0KLVRoZSBwcm9ibGVtIGlzIHRoYXQgd2UgZGVmaW5lIGEg bmV3IHRlbXBvcmFyeSBtYWNybyBhbmQgdGhlbiBjYWxsIGRvZG8oKSB0bwotZXhlY3V0ZSBpdC4g IEJ1dCBpZiB0aGUgZGVmaW5pdGlvbiBjb250YWlucyBtYWNybyBhcmd1bWVudHMsIHdlIGhhdmUg YWRkZWQgYQotbmV3IGxldmVsIG9mIG1hY3JvIGludm9jYXRpb24sIHRodXMgd2lwaW5nIG91dCB0 aGUgY3VycmVudCBsZXZlbCBvZiBhcmdzLgotVGhlIGN1cmUgaXMgdG8gZXhwYW5kIHRoZSB2YXJp YWJsZXMgaW4gdGhlIGltbWVkaWF0ZSBtYWNybyBpbiB0aGUgY3VycmVudAotY29udGV4dCwgYmVm b3JlIGV4ZWN1dGluZyBpdC4gIFRoaXMgbWVhbnMgc2ltcGx5IGNoYW5naW5nIHRoZSBjbXR4dCgp IGNhbGwKLXRoYXQgcmVhZHMgdGhlIGltbWVkaWF0ZSBtYWNybyB0byBzcGVjaWZ5IHh4c3Rpbmcg YXMgaXRzIHByb2Nlc3NpbmcKLWZ1bmN0aW9uLCByYXRoZXIgdGhhbiBOVUxMLCB3aGljaCBpcyB1 c2VkIGZvciByZWFsIG1hY3JvcyB0byBkZWZlciB0aGVpcgotYXJndW1lbnQgZXZhbHVhdGlvbiB1 bnRpbCBhZnRlciB0aGUgbWFjcm8gZW50ZXJlZC4gIGNrdXVzci5jLCAxMSBBdWcgMjAwNS4KLQot QWRkZWQgYSBuZXcgbWFrZWZpbGUgdGFyZ2V0LCBtYWNvc3gxMC40LCBmb3IgTWFjIE9TIFggMTAu NC4gIFRoaXMgb25lIHVzZXMKLWFuIHVuZG9jdW1lbnRlZCB0cmljayB0byBnZXQgdGhlIG90aGVy d2lzZSB1bmF2YWlsYWJsZS1leGNlcHQtYnktY2xpY2tpbmcKLU1hYyBPUyBYIHZlcnNpb24gbnVt YmVyIChpbiB0aGlzIGNhc2UgMTAuNC4yKSBhbmQgc3R1ZmYgaXQgaW50byB0aGUgSEVSQUxECi1z dHJpbmcuICBtYWtlZmlsZSwgMTEgQXVnIDIwMDUuCi0KLUJ1aWx0IE9LIG9uIFNvbGFyaXMgOSwg U29sYXJpcyAxMCAod2l0aCBhIGZldyBpbXBsaWNpdCBkZWNsYXJhdGlvbiB3YXJuaW5ncwotaW4g Y2t1dXN4LmMpLCBNYWMgT1MgWCAxMC40LjIgKHdpdGggc29tZSB3YXJuaW5ncyBpbiBja2NuZXQu YyBhbmQgY2tjZnRwLmMpLAotTWFjIE9TIFggMTAuMy45IChhbHNvIHVzaW5nIHRoZSBtYWNvczEw LjQgZW50cnksIHdoaWNoIGdldHMgdGhlIHJpZ2h0Ci12ZXJzaW9uIG51bWJlciwgYW5kIGdldHMg bm8gd2FybmluZ3MgYXQgYWxsKSwgUkggRW50ZXJwcmlzZSBMaW51eCBBUzQgb24gQU1ECi14ODZf NjQsIFRydTY0IFVuaXggNC4wRiwgU0NPIFVuaXhXYXJlIDcuMS40Ci0KLUZvciBkb2NzIGFuZC9v ciBzY3JpcHRsaWI6ICBVbml4IEMtS2VybWl0IGNhbiBiZSBhIHN0ZGluL291dCBmaWx0ZXIuICBU aGUKLXRyaWNrIGlzIHRvIHVzZSB0aGUgQVNLLCBBU0tRLCBvciBHRVRDIGNvbW1hbmQgZm9yIGlu cHV0LCBzcGVjaWZ5aW5nIG5vCi1wcm9tcHQsIGFuZCBFQ0hPIG9yIFhFQ0hPIGZvciBvdXRwdXQs IGUuZy46Ci0KLXdoaWxlIHRydWUgewotICAgIGFzayBsaW5lCi0gICAgaWYgZmFpbCBleGl0IDAK LSAgICBlY2hvIFxmcmV2ZXJzZShcbShsaW5lKSkKLX0KLWV4aXQgMAotCi1GT1BFTiBkaWRuJ3Qg ZG8gYW55dGhpbmcgd2l0aCB0aGUgY2hhbm5lbCBudW1iZXIgaWYgdGhlIG9wZW4gZmFpbGVkLCBz byBhbnkKLXN1YnNlcXVlbnQgY29tbWFuZCB0aGF0IHRyaWVkIHRvIHJlZmVyZW5jZSBpdCB3b3Vs ZCBnZXQgYSBwYXJzZSBlcnJvciBpdCB3YXMKLXVuZGVmaW5lZCBvciBub24tbnVtZXJpYywgbm90 IHZlcnkgaGVscGZ1bC4gIENoYW5nZWQgRk9QRU4gdG8gc2V0IHRoZQotY2hhbm5lbCBudW1iZXIg dG8gLTEgaWYgdGhlIGZpbGUgY2FuJ3QgYmUgb3BlbmVkLiAgTm93IHN1YnNlcXVlbnQgb3BlcmF0 aW9ucwotb24gdGhlIGNoYW5uZWwgZmFpbCB3aXRoICJDaGFubmVsIC0xOiBGaWxlIG5vdCBvcGVu Ii4gIEkgYWxzbyBhZGRlZCB0d28KLW1hZ2ljIGNoYW5uZWwgbnVtYmVyczogLTggbWVhbnMgdGhh dCBhbnkgRklMRSBjb21tYW5kIChiZXNpZGVzIE9QRU4gYW5kCi1TVEFUVVMpIG9uIHRoYXQgY2hh bm5lbCBpcyBhIG5vb3AgdGhhdCBzdWNjZWVkcyBzaWxlbnRseTsgLTkgaXMgYSBub29wIHRoYXQK LWZhaWxzIHNpbGVudGx5LiAgU28gbm93IGl0J3MgcG9zc2libGUgdG8gc2ltcGx5IHNldCBhIGNo YW5uZWwgbnVtYmVyIHRvIG9uZQotb2YgdGhlc2UgdmFsdWVzIHRvIGRpc2FibGUgaS9vIHRvIGNl cnRhaW4gZmlsZSB3aXRob3V0IGdldHRpbmcgbG90cyBvZiBlcnJvcgotbWVzc2FnZXMuICBkb2Zp bGUoKTogY2t1dXM3LmMsIDEyIEF1ZyAyMDA1LgotCi1BZGRlZCBhdXRvbWF0aWMgaGVyYWxkIGNv bnN0cnVjdGlvbiBmb3IgVW5peFdhcmUgNy4gIG1ha2VmaWxlLCAxMiBBdWcgMjAwNS4KLQotVW5p eCBpc2RpcigpIG5ldmVyIGFsbG93ZWQgZm9yIGFyZ3VtZW50cyB0aGF0IHN0YXJ0ZWQgd2l0aCB0 aWxkZSwgc28gZ2F2ZQotaW5jb3JyZWN0IHJlc3VsdHMgZm9yIH4vdG1wLyBvciB+ZmRjLiAgVGhl IHByb2JsZW0gd2FzIG1haW5seSBpbnZpc2libGUKLXNpbmNlIG1vc3QgY29tbWFuZHMgdGhhdCBw YXJzZWQgZmlsZSBvciBkaXJlY3RvcnkgbmFtZXMgdXNlZCBjbWlmaSgpLCBjbWRpcigpLAotZXRj LCB3aGljaCBkaWQgdGhlIGNvbnZlcnNpb25zIHRoZW1zZWx2ZXMuICBCdXQgSUYgRElSRUNUT1JZ IHdhcyBhbiBleGNlcHRpb24sCi1zaW5jZSBpdHMgb3BlcmFuZCBoYWQgdG8gYmUgdHJlYXRlZCBh cyBqdXN0IHRleHQsIGFuZCB0aGVuIHRlc3RlZCBhZnRlciBpdAotd2FzIHBhcnNlZC4gIGNrdWZp by5jLCAxMyBBdWcgMjAwNS4KLQotRml4ZWQgdGhlIGZvbGxvd2luZzoKLSJja3V1c3guYyIsIGxp bmUgODk1OTogd2FybmluZzogaW1wbGljaXQgZnVuY3Rpb24gZGVjbGFyYXRpb246IGNrZ2V0cGVl cgotImNrdWZpby5jIiwgbGluZSAxODY5OiB3YXJuaW5nOiBpbXBsaWNpdCBmdW5jdGlvbiBkZWNs YXJhdGlvbjogdHR3YWl0Ci0iY2t1ZmlvLmMiLCBsaW5lIDI5NDE6IHdhcm5pbmc6IGltcGxpY2l0 IGZ1bmN0aW9uIGRlY2xhcmF0aW9uOiBtbG9vawotImNrdWZpby5jIiwgbGluZSAyOTQzOiB3YXJu aW5nOiBpbXBsaWNpdCBmdW5jdGlvbiBkZWNsYXJhdGlvbjogZG9kbwotImNrdWZpby5jIiwgbGlu ZSAyOTQ0OiB3YXJuaW5nOiBpbXBsaWNpdCBmdW5jdGlvbiBkZWNsYXJhdGlvbjogcGFyc2VyCi0i Y2tjZnRwLmMiLCBsaW5lIDI2MjU6IHdhcm5pbmc6IGltcGxpY2l0IGZ1bmN0aW9uIGRlY2xhcmF0 aW9uOiBkZWx0YTJzZWMKLSJja2NmdHAuYyIsIGxpbmUgNDA3MTogd2FybmluZzogbm8gZXhwbGlj aXQgdHlwZSBnaXZlbiBmb3IgcGFyYW1ldGVyOiBwcm0KLSJja2NmdHAuYyIsIGxpbmUgODM4OTog d2FybmluZzogbm8gZXhwbGljaXQgdHlwZSBnaXZlbiBmb3IgcGFyYW1ldGVyOiBicmllZgotY2t1 dXN4LmMsIGNrdWZpby5jLCBja2NmdHAuYywgY2t1Y21kLmguICAxMyBBdWcgMjAwNS4KLQotVW5i dWZmZXJlZCBzdGRvdXQgY29kZSBoYXMgbmV2ZXIgd29ya2VkIGJlY2F1c2UgdGhlIHNldGJ1Zihz dGRvdXQsTlVMTCkgY2FsbAotaGFzIHRvIG9jY3VyIGJlZm9yZSB0aGUgc3Rkb3V0IGhhcyBiZWVu IHVzZWQuICBUaGUgcmVhc29uIGl0J3MgbmVlZGVkIGlzCi10aGF0IHNvbWUgS2VybWl0IGNvZGUg d3JpdGVzIHRvIHN0ZGVyciAod2hpY2ggaXMgdW5idWZmZXJlZCkgYW5kIG90aGVyIGNvZGUKLXdy aXRlcyB0byBzdGRvdXQsIGFuZCB0aGVyZWZvcmUgdHlwZXNjcmlwdHMgY2FuIGNvbWUgb3V0IGp1 bWJsZWQuICBSb2JlcnQKLVNpbW1vbnMgPHJvYmVydGxzQG5vcnRlbC5jb20+IHByb3ZpZGVkIHRo ZSBuZWVkZWQgY2x1ZSB3aGVuIGhlIGluc2lzdGVkIGl0Ci13b3JrZWQgb25seSB3aGVuIGV4ZWN1 dGVkIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZyBvZiBtYWluKCkuICBTbyBJIG1vdmVkIHRoZQotY29k ZSB0byB0aGF0IHNwb3QuICBCdXQgc2luY2Ugbm93IHdlIGFsc28gd2FudCB0byBtYWtlIHVuYnVm ZmVyZWQgYSBydW50aW1lCi0oY29tbWFuZC1saW5lKSBvcHRpb24sIEkgaGFkIHRvIGRvIGEgY2x1 bmt5IGJ5LWhhbmQgcHJlLXByZXNjYW4gaW5saW5lIGluCi1tYWluKCkgdG8gbG9vayB0aHJ1IGFy Z3ZbXSwgZXZlbiBiZWZvcmUgcHJlc2NhbigpIHdhcyBjYWxsZWQuICBja2NtYWkuYywKLWNrdXRp by5jLCBja3V1c3kuYywgMTMgQXVnIDIwMDUuICAoTm93IHRoYXQgdGhpcyB3b3JrcywgaXQgbWln aHQgYmUgYSBnb29kCi1pZGVhIHRvIHJlbW92ZSBhbGwgdXNlIG9mIHN0ZGVyciBmcm9tIEtlcm1p dC4pCi0KLU1hbmFnZWQsIGFmdGVyIHNvbWUgZmluYWdsaW5nLCB0byBidWlsZCBhIDY0LWJpdCB2 ZXJzaW9uIG9uIFNvbGFyaXMgMTAgYXQKLVV0YWggTWF0aCB3aXRoIFN1biBjYy4gIChDYW4ndCBt YWtlIGFueSBnY2MgYnVpbGRzIGF0IGFsbCwgMzItIG9yIDY0LWJpdCwKLXRoZXkgYWxsIGJsb3cg dXAgaW4gPHN5cy9zaWdpbmZvLmg+LikgIE5ldyB0YXJnZXQ6IHNvbGFyaXMxMF82NC4gIG1ha2Vm aWxlLAotMTUgQXVnIDIwMDUuCi0KLVRoZSA2NC1iaXQgU29sYXJpcyAxMCB2ZXJzaW9uIGNvbXBp bGVzIGFuZCBsaW5rcyBPSyBhbmQgdHJhbnNmZXJzIGZpbGVzIGluCi1yZW1vdGUgbW9kZS4gIEl0 IGNhbiBtYWtlIEZUUCBjb25uZWN0aW9ucyBhbmQgdXNlIHRoZW0sIGJ1dCBUZWxuZXQgY29ubmVj dGlvbnMKLWFsd2F5cyBmYWlsIHdpdGggIm5ldHdvcmsgdW5yZWFjaGFibGUiLiAgVGhpcyBpcyB3 aXRoIGFsbCBkZWZhdWx0IGxpYnMgYW5kCi1pbmNsdWRlIGZpbGVzLiAgTmVsc29uIGhhcyBhIHNl cGFyYXRlIHNldCBpbiAvdXNyL2xvY2FsLCB3aGljaCBoZSByZWZlcmVuY2VzCi1leHBsaWNpdGx5 IGluIGFsbCBoaXMgNjQtYml0IGJ1aWxkcywgYnV0IHVzaW5nIHRoZXNlIG1ha2VzIG5vIGRpZmZl cmVuY2UuCi1Tb21lIGRhdGEgdHlwZSBpcyB3cm9uZyBpbiBja2NuZXQuYy4gIEJ1dCB0ZWxuZXQg d29ya3MgZmluZSBpbiA2NC1iaXQgTGludXgKLWFuZCBUcnU2NCBidWlsZHMuICBEZWJ1ZyBsb2dz IHRyYWNlIHRoZSBkaWZmZXJlbmNlIHRvIG5ldG9wZW4oKSAob2YgY291cnNlKSwKLXRoZSBzcG90 IHdoZXJlIHdlIHRlc3QgdGhlIHJlc3VsdHMgb2YgaW5ldF9hZGRyKCksIHdoaWNoIGlzIGFscmVh ZHkgbWFya2VkCi1zdXNwaWNpb3VzIGZvciA2NC1iaXQgYnVpbGRzLiAgSXQgc2VlbXMgdGhhdCBp bmV0X2FkZHIoKSBpcyBvZiB0eXBlIGluX2FkZHJfdCwKLXdoaWNoIGluIHR1cm4gaXMgdV9pbnQz MiwgaS5lLiBhbiB1bnNpZ25lZCAzMi1iaXQgaW50LiAgWWV0IHRoZSBtYW4gcGFnZSBzYXlzCi10 aGF0IGZhaWx1cmUgaXMgaW5kaWNhdGVkIGJ5IHJldHVybmluZyAtMS4gIEkgZ3Vlc3MgdGhpcyBk b2Vzbid0IG1hdHRlciBpbgotMzItYml0IGJ1aWxkcywgYnV0IGluIHRoZSA2NC1iaXQgd29ybGQs IHRoZSB0ZXN0IGZvciBmYWlsdXJlIGRpZG4ndCB3b3JrCi1yaWdodC4gIEkgbWFkZSBhIFNvbGFy aXMtc3BlY2lmaWMgd29ya2Fyb3VuZCwgYW5kIGNoZWNrZWQgdGhhdCBpdCB3b3JrcyBpbgotYm90 aCAzMi1iaXQgYW5kIDY0LWJ1aWxkcy4gIEkgcmVhbGx5IGhhdGUgdHlwZWRlZnMuICBja2NuZXQu YywgMTUgQXVnIDIwMDUuCi0KLUNoYW5nZWQgdGhlIHBsYWluLXRleHQgdmVyc2lvbiAoYXMgb3Bw b3NlZCB0byB0aGUgcG9wdXAgb3IgR1VJIHZlcnNpb24gLSB0aGUKLUdVSSB2ZXJzaW9uLCBhdCBs ZWFzdCwgYWxyZWFkeSBkb2VzIHRoaXMpIG9mIEFTS1EgdG8gZWNobyBrZXlzdHJva2VzCi1hc3Rl cmlza3MgcmF0aGVyIHRoYW4gc2ltcGx5IG5vdCBlY2hvIGFueXRoaW5nLCBzbyBpdCdzIGVhc2ll ciB0byBzZWUgd2hhdAoteW91J3JlIGRvaW5nLCB0aGUgZWZmZWN0cyBvZiBlZGl0aW5nLCBldGMu ICBFeHBlcmltZW50YWw7IGZvciBub3csIHRoZXJlJ3MKLW5vIHdheSB0byBkaXNhYmxlIHRoaXMu ICBOb3Qgc3VyZSBpZiB0aGVyZSBuZWVkcyB0byBiZS4gIEFueXdheSwgdG8gZ2V0IHRoaXMKLXdv cmtpbmcgcmVxdWlyZWQgYSBmYWlyIGFtb3VudCBvZiBjbGVhbmluZyB1cCBvZiBndHdvcmQoKSwg d2hpY2ggd2FzIGVjaG9pbmcKLWRpZmZlcmVudCB3YXlzIGluIGRpZmZlcmVudCBwbGFjZXMuICBj a3V1czYuYywgY2t1Y21kLmMsIDE1IEF1ZyAyMDA1LgotCi1BZGRlZCBhIHNvbGFyaXM5XzY0IHRh cmdldCBmb3IgYnVpbGRpbmcgYSA2NC1iaXQgdmVyc2lvbiBvbiBTb2xhcmlzIDkgd2l0aAotU3Vu IGNjLiAgVmVyaWZpZWQsIHVzaW5nIHRoZSBESVIgY29tbWFuZCBhbmQgXGZzaXplKCkgZnVuY3Rp b24gb24gYSA0LjRHQgotZmlsZSwgdGhhdCB0aGUgU29sYXJpcyA2NC1iaXQgdmVyc2lvbiBvZiBL ZXJtaXQgZ2V0cyB0aGUgc2l6ZSBjb3JyZWN0bHksIGFuZAotdGhhdCBpdCBjYW4gY29weSBzdWNo IGEgZmlsZSAodGh1cyBpdHMgZm9wZW4vZnJlYWQvZndyaXRlL2ZjbG9zZSBpbnRlcmZhY2UKLXdv cmtzIHJpZ2h0KS4gIEluaXRpYXRlZCBhIGxhcmdlLWZpbGUgdHJhbnNmZXIgYmV0d2VlbiBoZXJl IGFuZCBVdGFoIG92ZXIKLVNTSCBhbmQgdmVyaWZpZWQgdGhhdCBpdCBwdXRzIHRoZSBjb3JyZWN0 IGZpbGUgc2l6ZSBpbiB0aGUgQSBwYWNrZXQgd2hlbgotc2VuZGluZzsgdGhlIHJpZ2h0IHF1YW50 aXRpZXMgYXJlIHNob3duIG9uIHRoZSBmaWxlIHRyYW5zZmVyIGRpc3BsYXkgKGZpbGUKLXNpemUg Q1BTLCBwZXJjZW50IGRvbmUsIGV0YykuICBCdXQgZXZlbiBhdCA1TWIvc2VjLCBpdCB0YWtlcyBh IGdvb2Qgd2hpbGUgdG8KLXRyYW5zZmVyIDQuNEdCLCBtb3JlIHRoYW4gMiBob3VycyAobm90IHN0 cmVhbWluZzsgMzAgd2luZG93IHNsb3RzLCA0SwotcGFja2V0cywgbWF5YmUgaXQgd291bGQgZ28g ZmFzdGVyIHdpdGggc3RyZWFtaW5nKS4uLiAgQWZ0ZXIgYW4gaG91ciBvciBzbywKLWl0IGZpbGxl ZCB1cCB0aGUgcGFydGl0aW9uIGFuZCBnYXZlIHVwIChncmFjZWZ1bGx5KSBiZWZvcmUgaXQgcmVh Y2hlZCB0aGUKLTJHQiBmcm9udGllciAoZHJhaW5lZCBpdHMgcGVuZGluZyBwYWNrZXRzLCBjbG9z ZWQgdGhlIHBhcnRpYWwgZmlsZSkuCi1SZXN0YXJ0ZWQgYXQgMTI6NTQsIHRoaXMgdGltZSB3aXRo IHN0cmVhbWluZyBhbmQgOEsgcGFja2V0cyAodGhlIHNwZWVkCi13YXNuJ3Qgc2lnbmlmaWNhbnRs eSBkaWZmZXJlbnQpLiAgVGhpcyB0aW1lIGl0IHRyYW5zZmVycmVkIDk1JSBvZiB0aGUgZmlsZQot KDQxODc2NjAyODggYnl0ZXMpIGJlZm9yZSBmYWlsaW5nIGJlY2F1c2UgdGhlIGRpc2sgZmlsbGVk IHVwLiAgV2VudCB0byBVdGFoCi1hbmQgc3RhcnRlZCBhIHRyYW5zZmVyIGJldHdlZW4gdHdvIFNv bGFyaXMgMTAvU3BhcmMgaG9zdHM7IHRoaXMgZ29lcyBhYm91dCA4Ci10aW1lcyBmYXN0ZXIuICBU aGUgdHJhbnNmZXIgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBhZnRlciAxN200MXMuICBBbGwgZmll bGRzCi1pbiB0aGUgZi50LiBkaXNwbGF5IGxvb2tlZCByaWdodCB0aGUgd2hvbGUgdGltZS4gIFRo ZW4gSSB2ZXJpZmllZCB2YXJpb3VzCi1vdGhlciA2NC1iaXQgY29tYmluYXRpb25zIHRyYW5zZmVy cmluZyB0aGUgc2FtZSA0LjRHQiBmaWxlOgotCi0gICAgICAgIFRvLi4uLi4uLi4uLi4uLi4uLgot ICBGcm9tICBTb2wgIEFtZCAgaTY0ICBUcnUgICAgICAKLSAgU29sICAgT0sgICBPSyAgIE9LICAg T0sgICAgICBTb2wgPSBTb2xhcmlzIDEwIC8gU3BhcmMKLSAgQW1kICAgT0sgICAgICAgICAgICAg ICAgICAgICBBbWQgPSBBTUQgeDg2XzY0IFJIIEVudGVycHJpc2UgTGludXggQVM0Ci0gIGk2NCAg IE9LICAgICAgICAgICAgICAgICAgICAgaTY0ID0gSW50ZWwgSUE2NCwgUkggMi4xQVMKLSAgVHJ1 ICAgICAgICAgICAgICAgICAgICAgICAgICBUcnUgPSBUcnU2NCBVbml4IDQuMEYgQWxwaGEKLQot KFRoZSBvdGhlciBjb21iaW5hdGlvbnMgYXJlIGRpZmZpY3VsdCB0byB0ZXN0IGZvciBsb2dpc3Rp Y2FsIHJlYXNvbnMuKQotCi1UcmllZCBzZW5kaW5nIHRoZSBzYW1lIGxvbmcgZmlsZSB3aXRoIEtl cm1pdCdzIEZUUCBjbGllbnQuICBJdCBjaHVnZ2VkIGFsb25nCi1mb3IgYSB3aGlsZSB1bnRpbCBJ IHN0b3BwZWQgaXQ7IGl0IHdvdWxkIGhhdmUgdGFrZW4gaG91cnMgdG8gY29tcGxldGUuCi1UaGVy ZSBpcyBubyBpbmRpY2F0aW9uIHRoYXQgaXQgd291bGRuJ3QgaGF2ZSB3b3JrZWQsIGFzc3VtaW5n IHRoZSBGVFAgc2VydmVyCi1jb3VsZCBhbHNvIGhhbmRsZSBsb25nIGZpbGVzLCB3aGljaCB3aG8g a25vd3MuICBBbnl3YXksIEtlcm1pdCBzaG93ZWQgYWxsCi10aGUgcmlnaHQgZGF0YSBvbiB0aGUg ZGlzcGxheSBzY3JlZW4uICAxNyBBdWcgMjAwNS4KLQotT24gQU1EIHg4Nl82NCBhbmQgSUE2NCBu YXRpdmUgNjQtYml0IExpbnV4IGJ1aWxkcywgdGhlIHB0eSByb3V0aW5lcyBkaWQgbm90Ci13b3Jr IGF0IGFsbC4gIHB0c25hbWUoKSBkdW1wZWQgY29yZS4gIElmIEkgY29tbWVudGVkIG91dCBwdHNu YW1lKCksIHRoZW4gdGhlCi1uZXh0IHRoaW5nIGR1bXBlZCBjb3JlLiAgVGhlIHNhbWUgY29kZSB3 b3JrcyBvbiB0aGUgb3RoZXIgNjQtYml0IGJ1aWxkcy4KLVBva2luZyBhcm91bmQsIEkgc2VlIHRo YXQgdGhpcyB2ZXJzaW9uIG9mIExpbnV4IGhhcyBhbiBvcGVucHR5KCkgZnVuY3Rpb24sCi13aGlj aCBJIGNvdWxkIHRyeSB1c2luZyBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50IEFQSSAtLSBncmFudHB0 eSgpLCBldGMuICBUaGVuCi1JIHNlZSB0aGF0IG9wZW5wdHkoKSBpcyBhbHJlYWR5IGNvZGVkIGlu dG8gS2VybWl0J3MgcHR5IG1vZHVsZSwKLWNvbmRpdGlvbmFsaXplZCB1bmRlciBIQVZFX09QRU5Q VFksIHdoaWNoIGhhcyBuZXZlciBiZWZvcmUgYmVlbiBkZWZpbmVkIGZvcgotYW55IGJ1aWxkLiAg SSBhZGRlZCBhIHRlc3QgdG8gdGhlIG1ha2VmaWxlIGxpbnV4IHRhcmdldCAobG9vayBmb3IgdGhl Ci1vcGVucHR5KCkgcHJvdG90eXBlIGluIDxwdHkuaD4sIGlmIGZvdW5kIGRlZmluZSBIQVZFX09Q RU5QVFkgYXMgYSBDRkxBRyBhbmQKLWFsc28gYWRkIC1sdXRpbCB0byBMTktGTEFHUykuICBXb3Jr cyBmaW5lIG9uIHRoZSBwcm9ibGVtIGJ1aWxkcywgYW5kIGFsc28KLW9uIHByZXZpb3VzbHkgd29y a2luZyAzMi1iaXQgYnVpbGRzLiAgbWFrZWZpbGUsIDE3IEF1ZyAyMDA1LgotCi1GaXhlZCBhIGJ1 ZyBpbiB0aGUgQVNLUSBlY2hvIGFzdGVyaXNrcyBjb2RlLCB3aGljaCBtYWRlIHRoZSBWTVMgdmVy c2lvbiBvZgotQy1LZXJtaXQgYWx3YXlzIGVjaG8gYXN0ZXJpc2tzLiAgVHVybnMgb3V0IHRoYXQg c29tZSBjb2RlIGluIHRoZSBtYWluIHBhcnNlCi1sb29wIHRvIHJlc2V0IGNvbW1hbmQtc3BlY2lm aWMgZmxhZ3Mgd2FzIGluIHRoZSB3cm9uZyBwbGFjZSwgd2hpY2ggaGFkIG90aGVyCi1lZmZlY3Rz IHRvbywgZm9yIGV4YW1wbGUgQVNLUSB0ZW1wb3JhcmlseSB0dXJucyBvZmYgZGVidWcgbG9nZ2lu ZyBhcyBhCi1zZWN1cml0eSBtZWFzdXJlLCBidXQgdGhlIGNvZGUgdG8gdHVybiBpdCBiYWNrIG9u IHdhcyBza2lwcGVkIGluIG1vc3QgY2FzZXMuCi1Tb21lIG90aGVyIHNpZGUgZWZmZWN0cyByZWxh dGVkIHRvIHRoZSBESVJFQ1RPUlkgYW5kIENEIGNvbW1hbmRzIG1pZ2h0IGhhdmUKLWJlZW4gcG9z c2libGUgYnV0IEkgaGF2ZW4ndCBzZWVuIHRoZW0uICBja3V1c1s1Nl0uYywgMjMgQXVnIDIwMDUu Ci0KLVByb2JsZW0gcmVwb3J0ZWQgd2hlbiBzZW5kaW5nIGEgZmlsZSB0byBWTVMgd2hlbiB0aGUg bmFtZSBpbiB0aGUgRiBwYWNrZXQKLXN0YXJ0cyB3aXRoIGEgZGV2aWNlIHNwZWNpZmljYXRpb24g YW5kIGRvZXMgbm90IGluY2x1ZGUgYSBkaXJlY3RvcnkgZmllbGQsCi1hbmQgUEFUSE5BTUVTIGFy ZSBSRUxBVElWRS4gIEV4YW1wbGU6IGRzazpmb28uYmFyIGJlY29tZXMgZl9vby5iYXIuICBUaGUK LWNvZGUgYXNzdW1lcyB0aGF0IGlmIHRoZXJlIGlzIGEgZGV2aWNlIGZpZWxkLCBpdCBpcyBmb2xs b3dlZCBieSBhIGRpcmVjdG9yeQotZmllbGQsIGFuZCBpdCBpbnNlcnRzIGEgZG90IGFmdGVyIHRo ZSAnWycsIHdoaWNoIGluIHRoaXMgY2FzZSBpcyBub3QgdGhlcmUuCi1MYXRlciB0aGUgZG90IGJl Y29tZXMgJ18nIGJlY2F1c2Ugb2YgdGhlIG9ubHktb25lLWRvdCBydWxlLiAgU29sdXRpb246IG9u bHkKLWluc2VydCB0aGUgZG90IGlmIHRoZXJlIHJlYWxseSBpcyBhbiBvcGVuaW5nIGJyYWNrZXQu ICBuenJ0b2woKTogY2t2ZmlvLmMsCi0yMyBBdWcgMjAwNS4KLQotQSByZXBvcnQgb24gdGhlIG5l d3Nncm91cCBjb21wbGFpbnMgdGhhdCBDLUtlcm1pdCBhbmQgSzk1IHNlcnZlcnMgd2VyZQotc2Vu ZGluZyBSRU1PVEUgRElSIGxpc3RpbmdzIHdpdGggb25seSAjSiBsaW5lIHRlcm1pbmF0b3JzLCBy YXRoZXIgdGhhbiAjTSNKLgotWWV0IGFsbCB0aGUgb3RoZXIgUkVNT1RFIHh4eCByZXNwb25zZXMg YXJyaXZlZCB3aXRoICNNI0ouICBzbmRkaXIoKSB3YXMKLW5lZ2xlY3RpbmcgdG8gc3dpdGNoIHRv IHRleHQgbW9kZS4gIGNrY2Zucy5jLCAyNiBBdWcgMjAwNS4KLQotQmFjayB0byBsb25nIGZpbGVz LiAgV2hhdCBoYXBwZW5zIGlmIDMyLWJpdCBLZXJtaXQgaXMgc2VudCBhIGxvbmcgZmlsZT8KLUl0 IGdldHMgYW4gQS1wYWNrZXQgdGhhdCBsb29rcyBsaWtlIHRoaXM6Ci0KLSAgXkFfIkEuIlUxIiJC OCMxMjAwNTA4MTUgMTg6Mjg6MDMhJzQyOTIwNjQxKjQzOTUwNzM1MzYsIzc3NS0hN0AgKUNQCi0K LVRoZSAzMi1iaXQgcmVjZWl2ZXIgcmVhY3RzIGxpa2Ugc286Ci0KLSAgZ2F0dHIgbGVuZ3RoWzQz OTUwNzM1MzZdPTEwMDEwNjI0MAotCi10aGUgZmlyc3QgbnVtYmVyIGJlaW5nIHRoZSBzdHJpbmcg ZnJvbSB0aGUgQS1wYWNrZXQsIHRoZSBzZWNvbmQgYmVpbmcgdGhlCi12YWx1ZSBvZiB0aGUgbG9u ZyBpbnQgaXQgd2FzIGNvbnZlcnRlZCB0byBieSBhdG9sKCkuICBDbGVhcmx5IG5vdCBlcXVhbCBp bgotdGhpcyBjYXNlLiAgV2hlbiB0aGlzIGhhcHBlbnMgS2VybWl0IHNob3VsZCByZWplY3QgdGhl IGZpbGUgaW5zdGVhZCBvZgotYWNjZXB0aW5nIGl0IGFuZCB0aGVuIGdldHRpbmcgYSBob3JyaWJs ZSBlcnJvciBhIGxvbmcgdGltZSBsYXRlci4gIEFkZGVkCi1jb2RlIHRvIGdhdHRyKCkgdG8gY29u dmVydCB0aGUgcmVzdWx0IG9mIGF0b2woKSBiYWNrIHRvIGEgc3RyaW5nIGFuZCBjb21wYXJlCi1p dCB3aXRoIHRoZSBvcmlnaW5hbCBzdHJpbmc7IGlmIHRoZXkncmUgbm90IGVxdWFsLCByZWplY3Qg dGhlIGZpbGUgb24gdGhlCi1hc3N1bXB0aW9uIHRoYXQgdGhlIG9ubHkgcmVhc29uIHRoaXMgY291 bGQgaGFwcGVuIGlzIG92ZXJmbG93LiAgQWxzbyBzb21lCi1vdGhlciBjb2RlIGluIGNhc2UgdGhl IHNlbmRlciBzZW5kcyB0aGUgb25seSBMRU5HVEhLIGF0dHJpYnV0ZS4gIE5vdyBmaWxlcwotd2hv c2UgbGVuZ3RocyBhcmUgdG9vIGJpZyBmb3IgYSBsb25nIGludCBhcmUgcmVqZWN0ZWQgcmlnaHQg YXdheSwgcHJvdmlkZWQKLXRoZSBzZW5kZXIgc2VuZHMgdGhlIGxlbmd0aCBpbiBhbiBBIHBhY2tl dCBhaGVhZCBvZiB0aGUgZmlsZSBpdHNlbGYuICBJZgotdGhpcyBuZXcgY29kZSBzaG91bGQgZXZl ciBjYXVzZSBhIHByb2JsZW0sIGl0IGNhbiBiZSBieXBhc3NlZCB3aXRoIFNFVAotQVRUUklCVVRF IExFTkdUSCBPRkYuICBja2NmbjMuYywgMjYgQXVnIDIwMDUuCi0KLUFzIEkgcmVjYWxsIGZyb20g d2hlbiBJIHdhcyB0ZXN0aW5nIHRoaXMgYSBmZXcgd2Vla3MgYWdvLCB3aGVuIHRoZSB0b28tYmln Ci1sZW5ndGggaXMgbm90IGNhdWdodCBhdCBBLXBhY2tldCB0aW1lLCB0aGUgdHJhbnNmZXIgZmFp bHMgbW9yZSBvciBsZXNzCi1ncmFjZWZ1bGx5IHdoZW4gdGhlIGZpcnN0IGF0dGVtcHQgaXMgbWFk ZSB0byB3cml0ZSBwYXN0IHRoZSBsaW1pdC4gIEkgd2VudAotdG8gZG91YmxlY2hlY2sgdGhpcyBi eSBzZW5kaW5nIGEgYmlnIGZpbGUgZnJvbSB0aGUgNjQtYml0IFNvbGFyaXMxMCB2ZXJzaW9uCi10 byBhIDMyLWJpdCBNYWMgT1MgWCB2ZXJzaW9uIHRoYXQgZG9lcyBub3QgaGF2ZSB0b2RheSdzIGNv ZGUuICBUaGUgTWFjCi10aGlua3MgdGhlIGluY29taW5nIGZpbGUgaXMgMkdCIGxvbmcgd2hlbiBp dCdzIHJlYWxseSA0R0IrLiAgQnV0IGluIHRoaXMKLWNhc2UsIHNvbWV0aGluZyBuZXcgaGFwcGVu cyEgIEFsdGhvdWdoIHRoZSBwZXJjZW50IGRvbmUgYW5kIHRyYW5zZmVyIHJhdGUgZ28KLW5lZ2F0 aXZlLCB0aGUgZmlsZSBrZWVwcyBjb21pbmcuICBJdCB3b3VsZCBzZWVtIHRoYXQgTWFjIE9TIFgg bGV0cyB1cyBjcmVhdGUKLWxvbmcgZmlsZXMgd2l0aG91dCB1c2luZyBhbnkgc3BlY2lhbCBBUElz LiAgVGhlIHRyYW5zZmVyIHJ1bnMgdG8gY29tcGxldGlvbi4KLU1hYyBPUyBYIEtlcm1pdCBzYXlz IFNVQ0NFU1MgKGJ1dCBnZXRzIHRoZSBieXRlIGNvdW50IGFuZCBjcHMgd3JvbmcsIG9mCi1jb3Vy c2UpLiAgQnV0IHRoZW4gYSBTVEFUVVMgY29tbWFuZCBzYXlzIEZBSUxVUkUuICBUaGUgZmlsZSB3 YXMsIGhvd2V2ZXIsCi10cmFuc2ZlcnJlZCBzdWNjZXNzZnVsbHk7IGl0IGlzIGV4YWN0bHkgdGhl IHNhbWUgbGVuZ3RoIGFuZCBjb21wYXJlcyBieXRlCi1mb3IgYnl0ZSB3aXRoIHRoZSBvcmlnaW5h bC4gIFRoaXMgdGVsbHMgbWUgdGhhdCBpbiB0aGUgTWFjIE9TIFggdmVyc2lvbiAtLQotYW5kIGhv dyBtYW55IG90aGVycyBsaWtlIGl0Pz8/IC0tIHRvZGF5J3MgcmVqZWN0aW9uIGNvZGUgc2hvdWxk IG5vdCBiZQotZW5hYmxlZC4gIE1lYW53aGlsZSBJIHB1dCB0b2RheSdzIG5ldyBjb2RlIGluICNp Zm5kZWYgTk9DSEVDS09WRVJGTE9XLi4jZW5kaWYsCi1hbmQgZGVmaW5lZCB0aGlzIHN5bWJvbCBp biB0aGUgTWFjIE9TIFggMTAuNCB0YXJnZXQuICBPdmVyIHRpbWUsIEknbGwgaGF2ZQotdG8gZmlu ZCBvdXQgd2hhdCBvdGhlciBwbGF0Zm9ybXMgaGF2ZSB0aGlzIGNoYXJhY3RlcmlzdGljLiAgQW5k IG9mIGNvdXJzZQotSSdsbCBhbHNvIGhhdmUgdG8gZG8gc29tZXRoaW5nIGFib3V0IGZpbGUtdHJh bnNmZXIgZGlzcGxheSwgc3RhdGlzdGljcywgYW5kCi1zdGF0dXMuICBtYWtlZmlsZSwgY2tjZm4z LmMsIDI2IEF1ZyAyMDA1LgotCi1Gcm9tIG5vdyBvbiBJJ20gZ29pbmcgdG8gYnVtcCB0aGUgRGV2 Lnh4IG51bWJlciBlYWNoIHRpbWUgSSB1cGxvYWQgYSBuZXcKLWNrZGFpbHkuICBUaGlzIG9uZSB3 aWxsIGJlIERldi4wMi4gIGNrY2ttYWkuYywgMjYgQXVnIDIwMDUuCi0KLUdvdCByaWQgb2YgYWxs IHRoZSBleHRyYW5lb3VzIEZyZWVCU0QgNCBhbmQgNSBidWlsZCB0YXJnZXRzLiAgTm93IHRoZXJl J3MKLW9uZSAoZnJlZWJzZCkgZm9yIGFsbCBGcmVlQlNEIDQuMSBhbmQgbGF0ZXIuICBtYWtlZmls ZSwgMjcgQXVnIDIwMDUuCi0KLU1hYyBPUyBYIDEwLjQgKFRpZ2VyKSBpcyBhIDY0LWJpdCBPUy4g IEJ1aWxkaW5nIEMtS2VybWl0IDBuIDEwLjQuMiB3aXRob3V0Ci1hbnkgc3BlY2lhbCBzd2l0Y2hl cyBzdGlsbGwgZ2l2ZXMgYSAzMi1iaXQgZXhlY3V0YWJsZS4gIERpdHRvIGJ1aWxkaW5nIHdpdGgK LS1tcG93ZXJwYzY0LiAgRnVydGhlciBpbnZlc3RpZ2F0aW9uIHR1cm5lZCB1cCBhIHRpcCBzaGVl dCBvbiBNeVNRTCB0aGF0IHNheXMKLXlvdSBoYXZlIHRvIGluY2x1ZGUgYWxsIG9mIHRoZXNlOiAt bXBvd2VycGM2NCAtbWNwdT1HNSAtbXR1bmU9RzUgLWFyY2gKLXBwYzY0LiAgVGhhdCBkaWQgdGhl IHRyaWNrLiAgTmV3IG1ha2VmaWxlIHRhcmdldDogbWFjb3N4MTAuNF82NC4gIEJ1dCB0aGUKLTEw LjQuMiBzeXN0ZW0gSSB0cmllZCBkaWQgbm90IGhhdmUgNjQtYml0IFtuXWN1cnNlcyBvciByZXNv bHYgbGlicywgc28gdGhpcwotYnVpbGQgaGFzIG5vIC1ETk9DVVJTRVMgLUROT19ETlNfU1JWLiAg bWFrZWZpbGUsIDI3IEF1ZyAyMDA1LgotCi1DcmVhdGVkIGEgc3ltYm9sIENLXzY0QklUIHRvIGlu ZGljYXRlIHRydWUgNjQtYml0IGJ1aWxkcyBhdCBjb21waWxlIHRpbWUuCi1BZGRlZCA2NC1iaXQg YW5ub3VuY2VtZW50IHRvIHRoZSBzdGFydHVwIGhlcmFsZCBhbmQgdGhlIFZFUlNJT04gdGV4dC4K LWNrY2RlYi5oLCBja3V1c1tyNV0uYywgMjcgQXVnIDIwMDUuCi0KLUFkZGVkIGEgYnVpbHQtaW4g dmFyaWFibGUgXHYoYml0cykgdG8gaW5kaWNhdGUgdGhlIHNpemUgb2YgdGhlIGJ1aWxkCi0oMTYs IDMyLCA2NCwgb3Igd2hhdGV2ZXIgZWxzZSBzaXplb2YoKSBtaWdodCByZXBvcnQpLiAgY2t1dXNy LmgsIGNrdXVzNC5jLAotMjcgQXVnIDIwMDUuCi0KLUdvdCByaWQgb2YgYWxsIHRoZSB3YXJuaW5n cyBpbiA2NC1iaXQgTWFjIE9TIFggYWJvdXQgYXJncyB0byBnZXRzb2Nrb3B0KCksCi1nZXRzb2Nr bmFtZSgpLCBhbmQgZ2V0cGVlcm5hbWUoKSwgYW5kIHRoZSBjb21wYXJpc29ucyBvbiB0aGUgcmV0 dXJuIHZhbHVlCi1vZiBpbmV0X2FkZHIoKS4gIGNrY25ldC5bY2hdLCAyNyBBdWcgMjAwNS4KLQot Tm93IHRvIGNoZWNrIHRoZSBlZmZlY3RzIG9uIG90aGVyIGJ1aWxkcy4uLgotICBMaW51eCBvbiBB TUQ2NDogb2suCi0gIExpbnV4IG9uIElBNjQ6IG9rLgotICBMaW51eCBvbiBpMzg2OiBvay4KLSAg TWFjIE9TIFggMTAuMy45IDMyLWJpdDogb2suCi0gIFNvbGFyaXMgMTAgNjQtYml0OiBvay4KLSAg U29sYXJpcyA5IDMyLWJpdDogb2suCi0gIFRydTY0IDQuMEY6IG9rLgotICBGcmVlQlNEIDQuMTE6 IG9rLgotICBGcmVlQlNEIDUuNCBpYTY0ICg2NC1iaXQpOiBvay4KLSAgRnJlZUJTRCA1LjQgaTM4 NiAoMzItYml0KTogb2suCi0KLVRoZSBUcnU2NCA1LjFCIGJ1aWxkIHRvdGFsbHkgYmxldyB1cCBi ZWNhdXNlIHRoZXkgaGF2ZSB0aGVpciBvd24gdW5pcXVlCi1zb2Nrb3B0L2V0YyBsZW5ndGgtYXJn dW1lbnQgZGF0YSB0eXBlIChpbnQhKSwgc28gSSBoYWQgdG8gcm9sbCBiYWNrIG9uIHVzaW5nCi1z b2NrbGVuX3QgZm9yIHRoaXMgaW4gYWxsIDY0LWJpdCBidWlsZHMuICBDaGVja2VkIHRvIG1ha2Ug c3VyZSBpdCBzdGlsbAotYnVpbGRzIG9uIFRydTY0IDQuMEYgYWZ0ZXIgdGhpcyBjaGFuZ2UgKGl0 IGRvZXMpLiAgY2tjbmV0LmgsIDI3IEF1ZyAyMDA1LgotCi1UaGUgSFAtVVggMTFpL2lhNjQgYnVp bGQgY29tZXMgb3V0IHRvIGJlIDMyLWJpdCBidXQgdGhpbmtzIGl0J3MgNjQtYml0LgotQ0tfNjRC SVQgaXMgc2V0IGJlY2F1c2UgX19pYTY0IGlzIGRlZmluZWQuICBTbyBob3cgZG8gSSBhY3R1YWxs eSBtYWtlIGEKLTY0LWJpdCBIUC1VWCBidWlsZD8gIEkgdHJpZWQgYWRkaW5nICtERDY0IHRvIENG TEFHUywgYW5kIHRoaXMgZ2VuZXJhdGVzCi02NC1iaXQgb2JqZWN0IGZpbGVzIGJ1dCBsaW5raW5n IGZhaWxzIHRvIGZpbmQgdGhlIG5lZWRlZCA2NC1iaXQgbGlicwotKGUuZy4gLWxtKS4gIEZvciBu b3cgSSBhZGRlZCBhbiBleGNlcHRpb24gZm9yIEhQVVggdG8gdGhlIENLXzY0QklUCi1kZWZpbml0 aW9uIHNlY3Rpb24uICBja2NkZWIuaCwgMjcgQXVnIDIwMDUuCi0KLVRvb2sgdGhlIHRpbWUgdG8g dmVyaWZ5IG15IHJlY29sbGVjdGlvbiBhYm91dCB0aGUgImdyYWNlZnVsIGZhaWx1cmUiIG9uIGEK LXJlZ3VsYXIgUGVudGl1bSBMaW51eCBzeXN0ZW0gd2hlbiByZWNlaXZpbmcgYSB0b28tYmlnIGZp bGUuLi4gIE9LLCBpdCdzIG5vdAotZXhhY3RseSBncmFjZWZ1bC4gIEl0IGdldHMgYSAiRmlsZSBz aXplIGxpbWl0IGV4Y2VlZGVkIiBlcnJvcjsgdGhlIG1lc3NhZ2UKLWlzIHByaW50ZWQgaW4gdGhl IG1pZGRsZSBvZiB0aGUgZmlsZS10cmFuc2ZlciBkaXNwbGF5LCBhcHBhcmVudGx5IG5vdCBieQot S2VybWl0LCBhbmQgS2VybWl0IGV4aXRzIGltbWVkaWF0ZWx5LiAgTG9va3MgbGlrZSBhIHRyYXAu Li4gIFl1cC4gICJGaWxlCi1zaXplIGxpbWl0IGV4Y2VlZGVkIiBpcyBTSUdYRlNaICgyNSkuICBX aGF0IGhhcHBlbnMgaWYgd2Ugc2V0IGl0IHRvIFNJR19JR04/Ci1KdXN0IHRoZSByaWdodCB0aGlu ZzogVGhlIHJlY2VpdmVyIGdldHMgIkVycm9yIHdyaXRpbmcgZGF0YSIgYXQgMjE0NzQ4MzY0Nwot Ynl0ZXMsIHNlbmRzIEUtcGFja2V0IHRvIHNlbmRlciB3aXRoIHRoaXMgbWVzc2FnZSwgYW5kIHJl Y292ZXJzIHdpdGggdG90YWwKLWdyYWNlIChkcmFpbnMgcGFja2V0IGJ1ZmZlcnMsIHJldHVybnMg dG8gcHJvbXB0KS4gIGNrdXRpby5jLCAyNyBBdWcgMjAwNS4KLQotQmFja2VkIG9mZiBmcm9tIHJl amVjdGluZyBhIGZpbGUgYmVjYXVzZSBpdHMgYW5ub3VuY2VkIHNpemUgb3ZlcmZsb3dzIGEKLWxv bmcuICBOb3cgaW5zdGVhZCwgSSBzZXQgdGhlIGZpbGUgc2l6ZSB0byAtMiAoYSBuZWdhdGl2ZSBz aXplIG1lYW5zIHRoZQotc2l6ZSBpcyB1bmtub3duLCBidXQgd2UgaGF2ZSBhbHdheXMgdXNlZCAt MSBmb3IgdGhpczsgLTIgbWVhbnMgInVua25vd24gYW5kCi1wcm9iYWJseSB0b28gYmlnIikuICBJ biB0aGlzIGNhc2UsIHRoZSBmLXQgZGlzcGxheSBzYXlzOgotCi0gIEZpbGUgU2l6ZTogUE9TU0lC TFkgRVhDRUVEUyBMT0NBTCBGSUxFIFNJWkUgTElNSVQKLQotdGhlbiB0aGUgdXNlciBjYW4gaW50 ZXJydXB0IGl0IHdpdGggWCBvciB3aGF0ZXZlciwgb3IgY2FuIGxldCBpdCBydW4gYW5kCi1zZWUg aWYgbWF5YmUgKGFzIGluIHRoZSBjYXNlIG9mIE1hYyBPUyBYKSBpdCB3aWxsIGJlIGFjY2VwdGVk IGFueXdheS4gIFRoaXMKLXdheSwgd2Ugc2tpcCBhbGwgdGhlIGJvZ3VzIGNhbGN1bGF0aW9ucyBv ZiBwZXJjZW50IGRvbmUsIHRpbWUgcmVtYWluaW5nLCBldGMuCi1ja2NmbjMuYywgY2t1dXN4LmMs IDI3IEF1ZyAyMDA1LgotCi1EaXNjb3ZlcmVkIHRoYXQgVk1TIEMtS2VybWl0IG9uIEFscGhhIGFu ZCBJQTY0IGlzIGEgMzItYml0IGFwcGxpY2F0aW9uOwotc2l6ZW9mKGxvbmcpID09IHNpemVvZihj aGFyICopID09IDQuICBUcmllZCBhZGRpbmcgL1BPSU5URVJfU0laRT02NCB0byBWTVMKLURFQ0Mg YnVpbGRzIG9uIEFscGhhIGFuZCBJQTY0LCBidXQgdGhlIHJlc3VsdHMgYXJlbid0IGdyZWF0LiAg VG9ucyBvZgotd2FybmluZ3MgYWJvdXQgcG9pbnRlciBzaXplIG1pc21hdGNoZXMgYmV0d2VlbiBL ZXJtaXQgcG9pbnRlcnMgYW5kIFJNUyBvbmVzLAotYW5kIHRoZSBleGVjdXRhYmxlIGRvZXNuJ3Qg cnVuLiAgSXQgYXBwZWFycyB0aGF0IGFjY2VzcyB0byBsb25nIGZpbGVzCi13b3VsZCByZXF1aXJl IGEgbG90IG9mIGhhY2tpbmcsIHNpbWlsYXIgdG8gd2hhdCdzIG5lZWRlZCBmb3IgMzItYml0IExp bnV4LgotCi0tLS0gRGV2LjAyOiAyNyBBdWcgMjAwNSAtLS0KLQotRnJvbSBKZWZmLCAyOCBBdWcg MjAwNS4KLSAuIEZpeCBTU0ggR0xPQkFMLUtOT1dOLUhPU1RTLUZJTEUgLyBVU0VSLUtOT1dOLUhP U1RTLUZJTEUgcGFyc2luZywgY2t1dXMzLmMuCi0gLiBQaWNrIHVwIEs5NVNUQVJURkxBR1MgZnJv bSBlbnZpcm9ubWVudCwgY2t1dXM0LmMuCi0gLiBGaXggc29tZSB0eXBvcyBpbiBjb21tYW5kLWxp bmUgcHJvY2Vzc2luZyAoLXEpLCBja3V1czQuYy4KLSAuIEJlIHN1cmUgdG8gc3VwcHJlc3MgaGVy YWxkIGlmIHN0YXJ0ZWQgd2l0aCAtcSwgY2t1dXM3LmMuCi0gLiBGaXggc3NoIGNvbW1hbmQtbGlu ZSBzd2l0Y2hlcywgY2t1dXN5LmMuCi0KLUVyaWMgU211dHogY29tcGxhaW5lZCB0aGF0IEhUVFAg UE9TVCB3YXMgYWRkaW5nIGFuIGV4dHJhbmVvdXMgYmxhbmsgbGluZSwKLXdoaWNoIHByZXZlbnRl ZCBoaXMgYXBwbGljYXRpb24gZnJvbSBzdWNjZXNzZnVsbHkgcG9zdGluZy4gIFJGQyAyNjE2IHN0 YXRlcwotKGluIFNlY3Rpb24gNC4xKToKLQotICAgSW4gdGhlIGludGVyZXN0IG9mIHJvYnVzdG5l c3MsIHNlcnZlcnMgU0hPVUxEIGlnbm9yZSBhbnkgZW1wdHkKLSAgIGxpbmUocykgcmVjZWl2ZWQg d2hlcmUgYSBSZXF1ZXN0LUxpbmUgaXMgZXhwZWN0ZWQuIEluIG90aGVyIHdvcmRzLCBpZgotICAg dGhlIHNlcnZlciBpcyByZWFkaW5nIHRoZSBwcm90b2NvbCBzdHJlYW0gYXQgdGhlIGJlZ2lubmlu ZyBvZiBhCi0gICBtZXNzYWdlIGFuZCByZWNlaXZlcyBhIENSTEYgZmlyc3QsIGl0IHNob3VsZCBp Z25vcmUgdGhlIENSTEYuCi0KLSAgIENlcnRhaW4gYnVnZ3kgSFRUUC8xLjAgY2xpZW50IGltcGxl bWVudGF0aW9ucyBnZW5lcmF0ZSBleHRyYSBDUkxGJ3MKLSAgIGFmdGVyIGEgUE9TVCByZXF1ZXN0 LiBUbyByZXN0YXRlIHdoYXQgaXMgZXhwbGljaXRseSBmb3JiaWRkZW4gYnkgdGhlCi0gICBCTkYs IGFuIEhUVFAvMS4xIGNsaWVudCBNVVNUIE5PVCBwcmVmYWNlIG9yIGZvbGxvdyBhIHJlcXVlc3Qg d2l0aCBhbgotICAgZXh0cmEgQ1JMRi4KLQotVGhpcyBzZWVtcyBwcmV0dHkgY2xlYXIuICBPbmUg c2VjdGlvbiBvZiBjb2RlIGluIGh0dHBfcG9zdCgpIChqdXN0IGFib3ZlIHRoZQotcG9zdG9wZW46 IGxhYmVsKSB3YXMgYXBwZW5kaW5nIGEgQ1JMRiB0byBhIGJ1ZmZlciB3aG9zZSBsYXN0IGFscmVh ZHkgd2FzCi10ZXJtaW5hdGVkIGJ5IENSTEYsIGFuZCB0aGVuIGFwcGVuZGVkIGEgc2Vjb25kIENS TEY7IHRodXMgdHdvIGVtcHR5IGxpbmVzLgotSSByZW1vdmVkIHRoZSBzZWNvbmQgb25lLiAgY2tj bmV0LmMsIDI4IEF1ZyAyMDA1LgotCi1JIGxvb2tlZCBpbnRvIHRoZSA2NC1iaXRuZXNzIG9mIE5l dEJTRCwgaXQgc2VlbXMgdG8gYmUgbGlrZSBMaW51eCBhbmQKLUZyZWVCU0Qgb24gNjQtYml0IGhh cmR3YXJlLCBpLmUuIHlvdSBqdXN0IGJ1aWxkIGl0IHRoZXJlIGFuZCBpdCB3b3JrcywgYXQKLWxl YXN0IG9uIEFscGhhIGFuZCBBTUQ2NCwgZ29pbmcgYmFjayB0byBOZXRCU0QgMS40IG9yIDEuNS4g IEJ1dCBJIGRvbid0IGhhdmUKLWFjY2VzcyB0byBhbnkgb2YgdGhlc2UgZm9yIHZlcmlmaWNhdGlv biBhbmQgZG9jdW1lbnRhdGlvbiBvbiB0aGUgV2ViIGlzCi1zY2FudHkuCi0KLUNoZWNrZWQgUGV0 ZXJFJ3MgY29tcGxhaW50IGFnYWluIG9mIHdhcm5pbmdzIGluIGNrdXRpby5jIGFib3V0IHBhcmFt ZXRlcgotbGlzdCBvZiBnZXRbdWddaWQoKSBhbmQgZ2V0ZVt1Z11pZCgpLiAgV2hlbiBJICJtYWtl IGhwdXgxMTAwbyIgb24gSFAtVVgKLTExLjExIChQQS1SSVNDKSwgdGhlcmUgYXJlIGRlZmluaXRl bHkgbm8gd2FybmluZ3MuICBIZSBzYXlzIHRoZSBzYW1lIHRoaW5nCi1oYXBwZW5zIG9uIDEwLnh4 LCBidXQgSSBkb24ndCBoYXZlIGFjY2VzcyB0byB0aGF0IGFueSBtb3JlLiAgSSBhbHNvIGRpZAot Im1ha2UgaHB1eDExMDBvIiBvbiBIUC1VWCAxMS4yMyAoMTFpIHYyKSAoUEEtUklTQyksIGFsc28g bm8gd2FybmluZ3MuCi0oRXhjZXB0IGluIGJvdGggY2FzZXMsIGEgd2FybmluZyBhYm91dCBhIGNv bW1lbnQgd2l0aGluIGEgY29tbWVudCBpbgotL3Vzci9pbmNsdWRlL3N5cy9wdHlpby5oKS4gIE9u IEhQLVVYIDExaSB2MiBvbiBJdGFuaXVtLCBob3dldmVyLCB0aGVyZSBhcmUKLVRPTlMgb2Ygd2Fy bmluZ3MsIG1vc3RseSBvZiB0aGUgInZhcmlhYmxlIHNldCBidXQgbmV2ZXIgdXNlZCIga2luZC4g IEFsc28KLSJkb2xsYXIgc2lnbiB1c2VkIGluIGlkZW50aWZpZXIiLiAgVHJhY2tpbmcgdGhpcyBs YXN0IG9uZSBkb3duLCBJIHNlZSBpdCdzCi1jb21wbGFpbmluZyBhYm91dCBjb2RlIHRoYXQncyBp biAjaWZkZWZzIGZvciBvdGhlciBwbGF0Zm9ybXMsIHN1Y2ggYXMKLUFwb2xsbyBBZWdpcy4gIElz ICJhZWdpcyIgZGVmaW5lZCBpbiBIUC1VWCAxMWkgdjIvSUE2ND8gIE5vISAgKEl0IHdvdWxkIHNo b3cKLXVwIGluIFNIT1cgRkVBVFVSRVMgaWYgaXQgd2FzLikgIFNvbWUgcGhhc2Ugb2YgdGhlIGNv bXBpbGVyIGlzIGNvbXBsYWluaW5nCi1hYm91dCBjb2RlIHRoYXQgaXQgc2hvdWxkIGJlIHNraXBw aW5nIChhbmQgdGhhdCwgaW4gZmFjdCwgaXQgKmlzKiBza2lwcGluZwotaXQgYmVjYXVzZSB0aGUg YnVpbGQgaXMgc3VjY2Vzc2Z1bCkuICBJdCdzIGFzIGlmIGNjIGlzIHJ1bm5pbmcgbGludCBmb3Ig bWUKLWJ1dCBub3QgdGVsbGluZyBsaW50IHdoaWNoIG1hY3JvcyBhcmUgZGVmaW5lZCBhbmQgd2hp Y2ggYXJlIG5vdC4KLQotVmVyaWZpZWQgdGhhdCA2NC1iaXQgbGlua2luZyBmYWlscyBpbiB0aGUg c2FtZSB3YXkgZm9yIEhQLVVYIDExaSB2MiBvbiBib3RoCi1JQTY0IGFuZCBQQS1SSVNDLiAgU2Vu dCBhIHF1ZXJ5IHRvIEhQLgotCi1Db21waWxpbmcgY2tjbmV0LmMgYW5kIGNrY2Z0cC5jIGdvdCB0 aGUgZmFtaWxpYXIgc29ja29wdC1yZWxhdGVkIHdhcm5pbmdzIG9uCi1IUC1VWCAxMWkgdjI7IHR1 cm5zIG91dCBpdCBpcyBqdXN0IGxpa2UgVHJ1NjQgVW5peCBpbiB1c2luZyBhbiBpbnQgZm9yIHRo ZQotbGVuZ3RoIGFyZ3VtZW50LiAgQWRkZWQgYW5vdGhlciBzcGVjaWFsIGNhc2UgYW5kIHRoZSB3 YXJuaW5ncyB3ZW50IGF3YXkuCi1ja2NuZXQuaCwgMjggQXVnIDIwMDUuCi0KLUFkZGVkIHNvbWUg c3R1ZmYgdG8gU0hPVyBGRUFUVVJFUyB0byBzZWUgd2hhdCBraW5kcyBvZiBtYWNyb3MgYXJlIGV4 cG9zZWQKLShlLmcuIElOVF9NQVgsIExPTkdfTUFYLCBMTE9OR19NQVgsIGV0YykgYW5kIGFsc28g c2hvdyBzaXplb2YobG9uZyBsb25nKSBhbmQKLXNpemVvZihvZmZfdCkuICBCdWlsZGluZyB0aGlz IGNvZGUgYWxsIG92ZXIgdGhlIHBsYWNlIHdpbGwgZ2l2ZSBtZSBhbiBpZGVhCi1vZiBob3cgd2lk ZXNwcmVhZCB0aGVzZSBkYXRhIHR5cGVzIGFyZSwgYW5kIHRvIHdoYXQgZXh0ZW50IEkgY2FuIHRl bGwKLXdoZXRoZXIgdGhleSBhcmUgYXZhaWxhYmxlIGZyb20gY2x1ZXMgaW4gdGhlIGhlYWRlciBm aWxlcy4gIChBdCBmaXJzdAotZ2xhbmNlLCBpdCBhcHBlYXJzIHRoYXQgSSdtIG5vdCBwaWNraW5n IHVwIDxsaW1pdHMuaD4sIGJ1dCBhZGRpbmcgYW4KLSNpbmNsdWRlIGZvciBpdCBpcyBqdXN0IGFz a2luZyBmb3IgdHJvdWJsZS4pICBObyBjb21wbGFpbnRzIGFib3V0IGxvbmcgbG9uZwotb3Igb2Zm X3QgZnJvbSBTb2xhcmlzIDkgb3IgcmVjZW50IExpbnV4ZXMuICBja3V1czUuYywgMjggQXVnIDIw MDUuCi0KLUZpeGVkIGEgd2FybmluZyBpbiBIUC1VWCAxMCBhbmQgMTEgc3RlbW1pbmcgZnJvbSBz b21lIG9sZC1zdHlsZSBwcm90b3R5cGVzCi1pbiBja3V0aW8uYyBmb3IgZ2V0W3JlXVtndV1pZCgp LiAgY2t1dGlvLmMsIDI5IEF1ZyAyMDA1LgotCi1VcGRhdGVkIG1pbml4MyB0YXJnZXQgZnJvbSBB bmR5IFRhbmVuYmF1bS4gIG1ha2VmaWxlLCAyOSBBdWcgMjAwNS4KLQotUGV0ZXJFIGNvbmZpcm1z IHRoYXQgImxvbmcgbG9uZyIgYW5kIG9mZl90IGFyZSBhdmFpbGFibGUgaW4gYWxsIEhQLVVYIDEw IGFuZAotMTEsIGFuZCBpbiBIUC1VWCA5IG9uIFBBLVJJU0MgYnV0IG5vdCBNb3Rvcm9sYS4gIDMw IEF1ZyAyMDA1LgotCi1Hb3QgNjQtYml0IGJ1aWxkcyB0byB3b3JrIG9uIEhQLVVYLiAgQWNjb3Jk aW5nIHRvIG15IG5vdGVzLCBKb2huIEJpZ2cgb2YgSFAKLXNhaWQgKGluIDE5OTkpIHRoYXQgSFAt VVggMTAuMzAgYW5kIGxhdGVyIHJlcXVpcmUgUEEtUklTQyAxLjEsIGFuZCBkbyBub3QKLXdvcmsg b24gUEEtUklTQyAxLjAuICBCdXQgaXMgUEEgMS4wIDY0LWJpdCBvciB3aGF0PyAgVG9kYXksIEFs ZXggTWNLYWxlIG9mCi1IUCBzYWlkICJUaGUgNjQtYml0IGJpbmFyaWVzIHdpbGwgd29yayBvbiBh bGwgbWFjaGluZXMgdGhhdCBoYXZlIHRoZSBzYW1lIG9yCi1sYXRlciByZWxlYXNlIG9mIEhQLVVY IChleGNsdWRpbmcgUEEtUklTQyAxLjEgbWFjaGluZXMpIi4gIFN0aWxsIG5lZWQKLWNsYXJpZmlj YXRpb24uLi4gIE1heWJlIGl0J3MgdGhhdCBhbGwgSUE2NCBidWlsZHMgY2FuIGJlIDY0LWJpdCBi dXQgSSBuZWVkCi1kdWFsIGJ1aWxkcyBmb3IgUEEtUklTQy4gIE1lYW53aGlsZSBJIHN0YXJ0ZWQg dHJhbnNmZXIgb2YgYSA0R0IrIGZpbGUgZnJvbQotU29sYXJpcyB0byBIUC1VWCAxMWkgYnV0IGl0 IGV4Y2VlZGVkIHNvbWUgcXVvdGEgb24gdGhlIEhQIGxvbmcgYmVmb3JlIGl0Ci1hcHByb2FjaGVk IHRoZSAyRyBwb2ludC4gIEl0IGZhaWxlZCBjbGVhbmx5IGFuZCB1cCB1bnRpbCB0aGVuIGl0IHdh cyB3b3JraW5nCi1maW5lIChudW1iZXJzLCBzdGF0cywgZXRjKS4gIDMwIEF1ZyAyMDA1LgotCi1T dXBwb3J0IG9mIGxhcmdlIGZpbGVzIGluIDMyLWJpdCBidWlsZHMgYmVnYW4gaW4gMTAuMjAuICA2 NC1iaXQgYXBwbGljYXRpb24KLXN1cHBvcnQgYmVnYW4gaW4gMTEuMDAsIGJ1dCBub3QgYWxsIG1h Y2hpbmVzIHRoYXQgcnVuIDExLjAwIHN1cHBvcnQgNjQgYml0cy4KLUFib3V0IGxvbmcgZmlsZXMs IHNlZSBIUCAvdXNyL3NoYXJlL2RvYy9sZ19maWxlcy50eHQuCi0KLVBldGVyRSBmb3VuZCB0aGF0 IGNlcnRhaW4gcGF0dGVybnMgY2FuIHN0aWxsIG1ha2UgS2VybWl0IGxvb3A7IGV4YW1wbGU6Ci0K LSAgaWYgbWF0Y2ggVDAxMDExLTAwODU2LTIxLTYzMi0wNzMgKlthYmNdIHsgZWNobyBHT09EIH0g ZWxzZSB7IGVjaG8gQkFEIH0KLSAgaWYgbWF0Y2ggVDAxMDExLTAwODU2LTIxLTYzMi0wNzMgKlth LXpdIHsgZWNobyBHT09EIH0gZWxzZSB7IGVjaG8gQkFEIH0KLQotVGhlIG1pbmltdW0gb2ZmZW5k aW5nIHBhdHRlcm4gaXMgKiBmb2xsb3dlZCBpbW1lZGlhdGVseSBieSBhbiBbeHh4XQotY29uc3Ry dWN0aW9uLCBmb2xsb3dlZCBieSBhbnl0aGluZyBlbHNlLCBpbmNsdWRpbmcgbm90aGluZy4gIFBy ZXZpb3VzCi12ZXJzaW9ucyBvZiBLZXJtaXQgaGFuZGxlZCB0aGlzIG9uZSBjb3JyZWN0bHksIHdp dGhvdXQgbG9vcGluZyAoYnV0IGZhaWxlZAotY2VydGFpbiBtYXRjaGVzIHRoYXQgc2hvdWxkIGhh dmUgc3VjY2VlZGVkKS4gIFRoZSBuZXcgc2VjdGlvbiBvZiBjb2RlIEkKLWFkZGVkIG9uIDE1IEp1 bmUsIHVwb24gZmFpbHVyZSB0byBtYXRjaCwgYWR2YW5jZXMgdGhlIHN0cmluZyBwb2ludGVyIGFu ZAotYmFja3MgdXAgdGhlIHBhdHRlcm4gdG8gdGhlIHByZXZpb3VzIHBhdHRlcm4sIGFuZCBzdGFy dHMgYWdhaW4KLShyZWN1cnNpdmVseSkuICBIb3dldmVyLCB0aGVyZSBuZWVkZWQgdG8gYmUgYSBj b3JyZXNwb25kaW5nIGNoZWNrIGF0IGVudHJ5Ci1mb3IgYW4gZW1wdHkgdGFyZ2V0IHN0cmluZy4g IGNrbWF0Y2goKTogY2tjbGliLmMsIDEyIFNlcCAyMDA1LgotCi1QZXRlckUgZGlzY292ZXJlZCB0 aGF0ICJrZXJtaXQgLXkgZmlsZXRoYXRkb2Vzbm90ZXhpdCIgZ2l2ZXMgYW4gZXJyb25lb3VzCi1l cnJvciBtZXNzYWdlIHRoYXQgbmFtZXMgdGhlIHVzZXIncyBjdXN0b21pemF0aW9uLCByYXRoZXIg dGhhbiB0aGUgbmFtZQotZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4gIGRvaW5pdCgpOiBja3V1 czUuYywgMTIgU2VwIDIwMDUuCi0KLUZSRUFEIGRvZXMgbm90IGdldCBhbiBlcnJvciBpZiBpdCB0 cmllcyB0byByZWFkIGEgcmVjb3JkIG9yIGZpbGUgb3IgcGllY2Ugb2YKLWZpbGUgdGhhdCBpcyB0 b28gYmlnIGZvciBpdHMgYnVmZmVyLiAgSW4gcGFydGljdWxhciwgRlJFQUQgL1NJWkU6eHh4IHNl ZW1zCi10byBzdWNjZWVkIGV2ZW4gaWYgbGVzcyB0aGFuIHh4eCB3YXMgcmVhZC4gIEl0IHNob3Vs ZCBmYWlsIHVubGVzcywgcGVyaGFwcywKLWl0IHN1Y2Nlc3NmdWxseSByZWFkIHVwIHRvIHRoZSBl bmQgb2YgdGhlIGZpbGUuICBGdXJ0aGVybW9yZSwgaWYgeHh4IGlzCi1iaWdnZXIgdGhhbiB0aGUg ZmlsZSBidWZmZXIgc2l6ZSwgaXQgc2hvdWxkIGNvbXBsYWluLiAgVGhlIGJ1ZmZlciBpcwotbGlu ZVtMSU5CVUZTSVpdLCAzMksuICBUaGUgbGFjayBvZiBmYWlsdXJlIHdhcyBkdWUgdG8gY29kZSBp biBkb2ZpbGUoKSB0aGF0Ci1hZGp1c3RlZCB0aGUgZ2l2ZW4gc2l6ZSBzaWxlbnRseSBpZiBpdCB3 YXMgZ3JlYXRlciB0aGFuIHRoZSBidWZmZXIgc2l6ZSwKLXdoaWNoIEkgcmVtb3ZlZCwgYW5kIGFs c28gYWRkZWQgYSBjaGVjayB3aGVuIHBhcnNpbmcgdGhlIC9TSVpFOiBzd2l0Y2guCi1kb2ZpbGUo KTogY2t1dXM3LmMsIDEyIFNlcCAyMDA1LgotCi1UaGF0IHN0aWxsIGRpZG4ndCBoZWxwIHdpdGgg RlJFQUQgL1NJWkU6biByZXR1cm5pbmcgbGVzcyB0aGFuIG4gYnl0ZXMsIGV2ZW4KLXdoZW4gdGhl eSB3ZXJlIGF2YWlsYWJsZS4gIFRoYXQncyBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIHJvdXRpbmUs IHpfaW4oKSwKLWRpZG4ndCBjaGVjayBmcmVhZCgpJ3MgcmV0dXJuIGNvZGUsIHdoaWNoIGlzIHRo ZSBudW1iZXIgb2YgYnl0ZXMgcmVhZC4KLUlmIGZyZWFkKCkgaGFzIHNtYWxsZXIgYnVmZmVycywg aXQgbmVlZHMgdG8gYmUgY2FsbGVkIGluIGEgbG9vcC4gIHpfaW4oKToKLWNrdXVzNy5jLCAxMiBT ZXAgMjAwNS4KLQotRmxlbigpIGZhaWxzIG9uIHN0cmluZ3Mgb2YgbGVuZ3RoIDgxOTIgb3IgbW9y ZS4gIFRoZSBsaW1pdGF0aW9uIGlzIGluIHRoZQotY2FsbGVycyBvZiB6enN0cmluZywgd2hpY2gg c2VlbSB0byBiZSBzcGVjaWZ5aW5nIGFuIDhLIGJ1ZmZlciwgaW4gdGhpcyBjYXNlCi1mbmV2YWwo KS4gIFRoZSBvcGVyYWJsZSBzeW1ib2xzIGFyZSBGTlZBTEwgKG1heCBsZW5ndGggb2YgdmFsdWUg cmV0dXJuZWQgYnkKLWEgZnVuY3Rpb24pIGFuZCBNQVhBUkdMRU4gKG1heGltdW0gbGVuZ3RoIG9m IGFuIGFyZ3VtZW50IHRvIGEgZnVuY3Rpb24pLiAgSQotY2hhbmdlZCBib3RoIG9mIHRoZXNlIGZv ciBCSUdCVUZPSyBidWlsZHMgdG8gYmUgQ01EQkwuICBCdWZmZXJzIGNhbiBuZXZlciBiZQotaW5m aW5pdGUsIHRoZXJlIGhhcyB0byBiZSBhIGxpbWl0LiAgSXQncyBpbXBvcnRhbnQgdG8gbWFrZSBl dmVyeXRoaW5nIHdvcmsKLWNvbnNpc3RlbnRseSB3aXRoaW4gdGhhdCBsaW1pdCwgYW5kIHRvIG1h a2Ugc29tZXRoaW5nIHVzZWZ1bCBoYXBwZW4gd2hlbiB0aGUKLWxpbWl0IGlzIGV4Y2VlZGVkLiAg QXQgdGhpcyBwb2ludCwgSSBjYW4gcHJvYmFibHkgYWxzbyBpbmNyZWFzZSB0aGUgbGltaXRzCi1m b3IgbW9kZXJuIDMyLWJpdCBzeXN0ZW1zLCBhbmQgY2VydGFpbmx5IGZvciA2NC1iaXQgb25lcy4g IEFsc28gdGhlcmUncyBubwotcG9pbnQgaW4gd29ycnlpbmcgYWJvdXQgMTYtYml0IHBsYXRmb3Jt cyBhbnkgbW9yZTsgZWFybGllciBDLUtlcm1pdCB2ZXJzaW9ucwotY2FuIHN0aWxsIGJlIHVzZWQg b24gdGhlbSBpZiBuZWNlc3NhcnkuIGNrdXVzci5oLCAxMiBTZXAgMjAwNS4KLQotU3BlY2lhbCAj aWZkZWZzIGZvciBmaW5kaW5nIHJlc29sdi5oIGFuZCBuYW1lc2VyLmggaW4gTUlOSVgzIGZyb20g QW5keQotVGFuZW5iYXVtLiAgY2tjbmV0LmMsIDIwIFNlcCAyMDA1LgotCi1QZXRlckUgbm90aWNl ZCB0aGF0IGNrbWF0Y2goKSwgZXZlbiB0aG91Z2ggaXQgd29ya3MgcHJldHR5IHdlbGwgbm93LCBk b2VzIGEKLWxvdCBvZiBleHRyYSBhbmQgdW5uZWNlc3NhcnkgcmVjdXJzaW9uIGFmdGVyIGRldGVy bWluaW5nIHRoZSBzdHJpbmcgYW5kCi1wYXR0ZXJuIGRvIG5vdCBtYXRjaCwgYXQgbGVhc3Qgd2hl biB0aGUgcGF0dGVybiBpcyBvZiB0aGUgZm9ybSAqW2FiY10uCi1BZnRlciBzZXZlcmFsIGZhbHNl IHN0YXJ0cyBJIHdhcyBhYmxlIHJlZHVjZSB0aGlzIGVmZmVjdCB0byBhIG1pbm9yIGxldmVsCi0o YnV0IG5vdCBlbGltaW5hdGUgaXQgYWxsIHRvZ2V0aGVyKSBieSBjaGFuZ2luZyBhIHdoaWxlIGxv b3AgaW50byBhIGRvIGxvb3AuCi1ja21hdGNoKCk6IGNrY2xpYi5jLCAxNSBPY3QgMjAwNS4KLQot QWRkZWQgLUROT0xPTkdMT05HIHRvIEhQLVVYIDguMDAgYW5kIGVhcmxpZXIgYnVpbGRzLCBhbmQg dG8gTW90b3JvbGEtYmFzZWQKLUhQLVVYIDkuMDAgYnVpbGRzLiAgVGhpcyBpcyBzaW1wbHkgdG8g aW5oaWJpdCB0aGUgdGVzdCBmb3Igd2hldGhlciAibG9uZwotbG9uZyIgaXMgc3VwcG9ydGVkIGJ5 IHRoZSBjb21waWxlciwgc2luY2Ugd2hlbiBpdCBpc24ndCwgdGhlIG1vZHVsZQotY29udGFpbmlu ZyB0aGUgdGVzdCB3b24ndCBjb21waWxlLiAgbWFrZWZpbGUsIGNrdXVzNS5jLCAxNiBPY3QgMjAw NS4KLQotTWFraW5nIEFTS1EgYWx3YXlzIGVjaG8gYXN0ZXJpc2tzIGlzIGEgYmFkIGlkZWEsIGJl Y2F1c2Ugd2hlbiBpdCBkb2Vzbid0Ci1lY2hvLCBpdCdzIHRoZSBwZXJmZWN0IHdheSB0byByZWFk IHNpbGVudGx5IGZyb20gc3RkaW4sIGUuZy4gaW4gYSBDR0kgc2NyaXB0Ci0oSU5QVVQgY2FuIGFs c28gYmUgdXNlZCBmb3IgdGhpcyBidXQgaXQncyBub3QgYXMgc3RyYWlnaHRmb3J3YXJkKS4gIFNv IEkgcHV0Ci10aGUgZGVmYXVsdCBmb3IgQVNLUSBiYWNrIHRvIG5vIGVjaG9pbmcsIHRoZW4gZ2F2 ZSBBU0tRIGl0cyBvd24gc3dpdGNoCi10YWJsZSwgd2hpY2ggaXMgdGhlIHNhbWUgYXMgZm9yIEFT SyB3aXRoIHRoZSBhZGRpdGlvbiBvZiBhbiAvRUNITzp4IHN3aXRjaCwKLXdoaWNoIHRlbGxzIHdo YXQgY2hhcmFjdGVyIHRvIGVjaG8uICBja3VjbWQuYywgY2t1dXNbMjZdLmMsIDE3IE9jdCAyMDA1 LgotCi1GaXhlZCBhIGJ1ZyBpbiBGVFAgR0VUIC9DT01NQU5EIGZpbGVuYW1lIGNvbW1hbmRuYW1l OyBpdCBhbHdheXMgZHVtcGVkIGNvcmUKLWRlcmVmZXJlbmNpbmcgYSBudWxsIHN0cmluZyAodGhl IG5vbmV4aXN0ZW50IGxvY2FsIGFzbmFtZSkuICBja2NmdHAuYywKLTE3IE9jdCAyMDA1LgotCi1G b3IgZG9jczogaWYgeW91IGRvbid0IGxpa2UgdGhlIGZ1bm55IGJ1c2luZXNzIHRoYXQgaGFwcGVu cyB3aGVuIHlvdSB0eXBlCi1hbiBJRiBjb21tYW5kIGF0IHRoZSBwcm9tcHQsIHVzZSBYSUYgaW5z dGVhZCBhbmQgaXQgd29uJ3QgaGFwcGVuLiAgQWxzbyBub3RlCi10aGF0IGNvbW1hbmRzIGxpa2Ug ImlmIHh4eCB7IGVjaG8gYmxhaCB9IGVsc2UgeyBlY2hvIGJsYWggYmxhaCB9IiBkb24ndAotd29y ayB3aGVuIHR5cGVkIGF0IHRoZSBwcm9tcHQ7IHlvdSBoYXZlIHRvIHVzZSBYSUYgZm9yIHRoaXMu IAotCi1CYWNrIHRvIGNrbWF0Y2goKS4uLiAgVW5kZXIgY2VydGFpbiBjb25kaXRpb25zIChlLmcu IHBhdHRlcm5zIGxpa2UgKlthYmNdKQotZmFpbHVyZSB0byBtYXRjaCB3b3VsZCBub3Qgc3RvcCB0 aGUgcmVjdXJzaW9uIGJlY2F1c2UgdGhlIHN0cmluZyBhbmQgcGF0dGVybgotYXJndW1lbnRzIGFy ZSBvbiB0aGUgc3RhY2ssIGFzIHRoZXkgbXVzdCBiZSwgc28gdGhlcmUgd2FzIG5vIHdheSBmb3Ig bGV2ZWwKLW4tMSB0byBrbm93IHRoYXQgbGV2ZWwgbiBoYWQgZGV0ZWN0ZWQgYSBkZWZpbml0aXZl IG5vbm1hdGNoIGFuZCB0aGF0IG5vCi1mdXJ0aGVyIGF0dGVtcHRzIGF0IG1hdGNoaW5nIHdlcmUg cmVxdWlyZWQuICBUaGUgcmlnaHQgd2F5IHRvIGhhbmRsZSB0aGlzIGlzCi10byByZWNvZGUgdGhl IHdob2xlIHRoaW5nIGFzIGNvcm91dGluZXMsIHRoZSBjaGVhcCB3YXkgb3V0IGlzIHdpdGggYSBn bG9iYWwKLXN0YXRpYyBmbGFnLiAgV29ya3MgcGVyZmVjdGx5LCBpbiB0aGUgc2Vuc2UgdGhhdCB0 aGUgbWF0Y2gua3NjIHRlc3QgcmVzdWx0cwotYXJlIGlkZW50aWNhbCB0byB3aGF0IHRoZXkgd2Vy ZSBiZWZvcmUgYW5kIHRoZSBleHRyYSBiYWNraW5nIHVwIGFuZAotcmVjdXJzaW9uIGFyZSBlbGlt aW5hdGVkLiAgKFRoZSBPY3QgMTV0aCBmaXggd2Fzbid0IHJlYWxseSBhIGZpeCwgaXQgYnJva2UK LWEgY291cGxlIG9mIGNhc2VzLikgIGNrY2xpYi5jLCAyMCBPY3QgMjAwNS4KLQotY2t1dXM3LmMo Mjk4Nyk6IHdhcm5pbmcgIzI2NzogdGhlIGZvcm1hdCBzdHJpbmcgcmVxdWlyZXMgYWRkaXRpb25h bCBhcmd1bWVudHMKLShpbiBQVVJHRSBjb21tYW5kKTsgZml4ZWQgMjAgT2N0IDIwMDUuCi0KLUZy b20gQW5keSBUYW5lbmJhdW0sIGZpbmFsIGNoYW5nZXMgZm9yIE1JTklYMzogI2lmZGVmIG91dCB0 aGUgaW5saW5lCi1kZWZpbml0aW9ucyBmb3IgZ2V0dGltZW9mZGF5KCkgYW5kIHJlYWRsaW5rKCku ICBja3V0aW8uYywgMjMgT2N0IDIwMDUuCi0KLUZyb20gSmVmZjogc3RydWN0IGdzc190cmlhbHMg aW5pdGlhbGl6ZXJzIGNoYW5nZWQgZnJvbSBnc3NfbWVjaF9rcmI1IHRvCi1ja19nc3NfbWVjaF9r cmI1LiAgY2tjZnRwLmMsIDIzIE9jdCAyMDA1LgotCi1Gcm9tIEplZmY6IHNvbWUgaW1wcm92ZW1l bnRzIHRvIEs5NSBHVUkgU0hPVyBURVJNSU5BTC4gIGNrdXVzNS5jLCAyMyBPY3QgMjAwNS4KLQot Rm91bmQgYW5kIGNvcnJlY3RlZCBzb21lIG1pc3BsYWNlZCAjaWZkZWZzIGluIHNob2ZlYXQoKSwg Y2t1dXM1LmMsIDIzIE9jdCAyMDA1LgotCi0tLS0gRGV2LjAzIC0tLQotCi1GaXhlZCBhIGNvbXBp bGVyIHdhcm5pbmcgaW4gYSBkZWJ1ZygpIHN0YXRlbWVudCBpbiB6enN0cmluZygpIGJ5IGFkZGlu ZwotcGFyZW5zLiAgY2t1dXM0LmMsIDI0IE9jdCAyMDA1LgotCi1BZGRlZCAtRE5PTE9OR0xPTkcg dG8gc3Y2OHIzdjYgdGFyZ2V0LCBtYWtlZmlsZSwgMjUgT2N0IDIwMDUuCi0KLU5ldyBtYWtlZmls ZSB0YXJnZXRzIGZvciBIUC1VWCBmcm9tIFBldGVyRSB0byBoYW5kbGUgdGhlICdsb25nIGxvbmcn Ci1zaXR1YXRpb24uICAgMjYgT2N0IDIwMDUuCi0KLUZyb20gSmVmZjogY2hhbmdlcyB0byBzdXBw b3J0IE9wZW5TU0wgMC45LjgsIGNrX3NzbC5oLiAgY2tjYXNjLmggaGFzIGhhZAotc2hvcnQgbmFt ZXMgZGVmaW5lZCBmb3IgQVNDSUkgY29udHJvbCBjaGFyYWN0ZXJzIGZvciAyMC1zb21lIHllYXJz IGJ1dCBub3cKLXRoZXkgYXJlIGNhdXNpbmcgY29uZmxpY3RzLCBzbyBFTSBiZWNvbWVzIFhFTSAo YWxzbyBmb3IgT3BlblNTTCAwLjkuOCkuCi1DaGFuZ2VkIEs5NSdzIGRlZmF1bHQgdGVybWluYWwg dHlwZSBmcm9tIFZUMzIwIHRvIFZUMjIwIGJlY2F1c2UgVlQzMjAKLXRlcm1jYXBzL3Rlcm1pbmZv cyBhcmUgZGlzYXBwZWFyaW5nIGZyb20gVW5peCBob3N0czogY2t1dXM3LmMuICBSZW9yZ2FuaXpl Ci10aGUgZGF0YS10eXBlcyBzZWN0aW9uIG9mIFNIT1cgRkVBVFVSRVMgdG8gYWRkIG1vcmUgbWFj cm8gdGVzdHMgZm9yIGludGVncmFsCi1zaXplcyBhbmQgdG8gcHJvdmlkZSBmb3IgdGhlIHByb3Bl ciBwcmludGYgZm9ybWF0dGluZyBpbiBvcmRlciB0byBhbGxvdyB0aGUKLXNpemVzIHRvIGJlIG91 dHB1dCAoIllvdSBhcmUgZ29pbmcgdG8gbmVlZCB0byBiZSBjYXJlZnVsIGJlY2F1c2UgJWxseCBp cyBub3QKLXN1cHBvcnRlZCBvbiBhbGwgcGxhdGZvcm1zLiAgT24gV2luZG93cywgaXQgaXMgdGhl IHNhbWUgYXMgJWx4LCAzMiBiaXRzIik6Ci1ja3V1czUuYywgMjYgT2N0IDIwMDUuCi0KLURlZmlu ZWQgTk9MT05HTE9ORyBja2NkZWIuaCBmb3IgdmFyaW91cyBvbGQgcGxhdGZvcm1zIHdoZXJlIHdl IGtub3cgd2UgYXJlCi1uZXZlciBnb2luZyB0byBuZWVkIDY0LWJpdCBpbnRzIChldmVuIGlmIHRo ZXkgc3VwcG9ydCBhIGxvbmcgbG9uZyBkYXRhdHlwZSwKLWNoYW5jZXMgYXJlIHByZXR0eSBzbGlt IHRoZXkgc3VwcG9ydGVkIDY0LWJpdCBmaWxlIHNpemVzKS4gIGNrY2RlYi5oLAotMjYgT2N0IDIw MDUuCi0KLVBldGVyRSBub3RpY2VkIHRoYXQgR09UTyB0YXJnZXRzIGNhbiBvbmx5IGJlIDUwIGNo YXJhY3RlcnMgbG9uZy4gIFRoaXMgd2FzCi1ieSBkZXNpZ24sIGEgbG9uZyB0aW1lIGFnbywgb24g dGhlIGFzc3VtcHRpb24gdGhhdCBub2JvZHkgd291bGQgbWFrZSBsb25nZXIKLWxhYmVscy4gIEJ1 dCBpbiBTV0lUQ0ggc3RhdGVtZW50cywgY2FzZSBsYWJlbHMgY2FuIGJlIHZhcmlhYmxlcyB0aGF0 IGV4cGFuZAotdG8gYW55dGhpbmcgYXQgYWxsLiAgSWYgd2UgY2hvcCB0aGVtIG9mZiBhdCA1MCwg d2UgbWlnaHQgZXhlY3V0ZSB0aGUgd3JvbmcKLWNhc2UuICBDaGFuZ2VkIHRoZSBtYXhpbXVtIGxh YmVsIHNpemUgdG8gYmUgOEssIGFuZCBhZGRlZCBjb2RlIHRvIGRvZ290bygpCi10byBjaGVjayB3 aGVuIGEgbGFiZWwgb3IgdGFyZ2V0IGlzIHRvbyBsb25nIGFuZCBmYWlsLCB0byBwcmV2ZW50IHNw dXJpb3VzCi1HT1RPIG9yIFNXSVRDSCByZXN1bHRzLiAgY2t1dXNyLmgsIGNrdXVzW3I2XS5jLCAy NiBPY3QgMjAwNS4KLQotVGVzdGluZyByZXZlYWxlZCB0aGVyZSB3YXMgc3RpbGwgYSBwcm9ibGVt IHdpdGggU1dJVENIIGNhc2UgbGFiZWxzIHRoYXQgd2VyZQotdmFyaWFibGVzIHRoYXQgZXhwYW5k ZWQgaW50byBsb25nIHN0cmluZ3MuICBUdXJucyBvdXQgdGhhdCBJIHdhcyBiZWluZwotdG9vIGNs ZXZlciB3aGVuIEkgZGVjaWRlZCB0aGF0LCBpZiB0aGUgU1dJVENIIG1hY3JvIHdhcyBuMSBjaGFy YWN0ZXJzIGxvbmcKLWFuZCB0aGUgY2FzZS1sYWJlbCBzZWFyY2ggdGFyZ2V0IHdhcyBuMiBjaGFy YWN0ZXJzIGxvbmcsIEkgb25seSBoYWQgdG8KLXNlYXJjaCB0aGUgZmlyc3QgbjEtbjIrMSBjaGFy YWN0ZXJzIG9mIHRoZSBtYWNybyBkZWZpbml0aW9uLiAgVGhhdCB3YXMgdHJ1ZQotYmVmb3JlIEkg YWxsb3dlZCBjYXNlIGxhYmVscyB0byBiZSB2YXJpYWJsZXMsIGJ1dCBub3QgYW55IG1vcmUhICBG aXhlZCBpbgotZG9nb3RvKCk6IGNrdXVzNS5jLCAyNiBPY3QgMjAwNS4KLQotLS0tIERldi4wNCAt LS0KLQotRGV2LjA0IGRpZG4ndCBhY3R1YWxseSBjb250YWluIEplZmYncyBkYXRhLXR5cGUgY2hh bmdlcyB0byBzaG9mZWF0KCksCi1JIHRoaW5rIEkgc2F2ZWQgdGhlIHdyb25nIGJ1ZmZlciBpbiBF TUFDUy4uLiAgRml4ZWQgbm93LiAgMjcgT2N0IDIwMDUuCi0KLVBldGVyRSBjb3JyZWN0ZWQgYSB0 eXBvIGluIHRoZSBIUC1VWCA3LjAwIG1ha2VmaWxlIHRhcmdldC4gIDI3IE9jdCAyMDA1LgotCi1Q ZXRlckUgaGFkIGJlZW4gcmVwb3J0aW5nIHByb2JsZW1zIHN0cmVzcy10ZXN0aW5nIHRoZSBuZXcg U1dJVENIIGNvZGUsIGJ1dAotb25seSBvbiBIUC1VWCA5LCBwcmltYXJpbHkgc3RhY2sgb3ZlcnJ1 bi4gIFR1cm5zIG91dCB0byBiZSB0aGUgSFAtVVggOQotb3B0aW1pemluZyBjb21waWxlcidzIGZh dWx0LiAgTm8gb3B0aW1pemF0aW9uLCBubyBwcm9ibGVtcy4KLQotUGV0ZXJFIGZvdW5kIHRoYXQg ZXZlbiB3aGVuIGRvZ290bygpIGRldGVjdHMgYSBzdHJpbmcgdGhhdCBpcyB0b28gbG9uZwotYW5k IGZhaWxzLCB0aGlzIGRvZXMgbm90IHN0b3AgU1dJVENIIGZyb20gcHJvZHVjaW5nIGEgcmVzdWx0 LCB3aGljaCBjYW4gbm90Ci1wb3NzaWJseSBiZSB0cnVzdGVkLiAgQ2hhbmdlZCB0aGUgcGFydCBv ZiBkb2dvdG8oKSB0aGF0IGhhbmRsZXMgdGhpcyB0bwotbm90IGp1c3QgZmFpbCwgYnV0IGFsc28g dG8gZXhpdCB0aGUgc2NyaXB0IGltbWVkaWF0ZWx5IGFuZCByZXR1cm4gdG8gdG9wCi1sZXZlbC4g IGNrdXVzNi5jLCAyOCBPY3QgMjAwNS4KLQotQW4gaWRlYSBwb3BwZWQgaW50byBteSBoZWFkIGFm dGVyIGhhdmluZyB0eXBlZCB0b28gbWFueSBjb21tYW5kcyBsaWtlICJkaXIKLWNrW2N1d10qLltj d2hdIiB0byBjaGVjayB0aGUgbGlzdCBvZiBtYXRjaGluZyBmaWxlcywgYW5kIHRoZW4gaGF2aW5n IHRvCi1yZXR5cGUgdGhlIHNhbWUgZmlsZXNwZWMgaW4gYSBTRU5EIGNvbW1hbmQ6IFdoeSBub3Qg dW5sZWFzaCBzb21lIHVudXNlZAotY29udHJvbCBjaGFyYWN0ZXIgc3VjaCBhcyBDdHJsLUsgdG8g c3BpdCBvdXQgdGhlIG1vc3QgcmVjZW50bHkgZW50ZXJlZCBpbnB1dAotZmlsZXNwZWM/ICBJdCB3 YXMgZWFzeSwganVzdCBhIGZldyBsaW5lcyBpbiBjbWlmaTIoKSBhbmQgZ3R3b3JkKCksIHBsdXMg YQotY291cGxlIGRlY2xhcmF0aW9ucy4gIFRvIHNlZSBhbGwgdGhlIGNoYW5nZXMsIHNlYXJjaCBm b3IgImxhc3RmaWxlIiAoYWxsIHRoZQotbmV3IGNvZGUgaXMgcHJvdGVjdGVkIGJ5ICNpZm5kZWYg Tk9MQVNURklMRSkuICBja3VjbWQuYywgMjggT2N0IDIwMDUuCi0KLUkgYWRkZWQgYSBuZXcgdmFy aWFibGUgXHYobGFzdGZpbGVzcGVjKSB0aGF0IGV4cGFuZHMgdG8gdGhlIHNhbWUgbGFzdAotZmls ZXNwZWMsIGZvciB1c2UgaW4gc2NyaXB0cy4gIGNrdXVzci5oLCBja3V1czQuYywgMjggT2N0IDIw MDUuCi0KLVRoZSBVbml4IHZlcnNpb24gb2YgQy1LZXJtaXQgZmFpbGVkIHRvIHB1dCBhbnl0aGlu ZyBpbiB0aGUgc2Vzc2lvbiBsb2cgaWYKLVNFVCBURVJNSU5BTCBERUJVRyBPTi4gIFJlYXJyYW5n ZWQgdGhlIHBlcnRpbmVudCBjbGF1c2Ugc28gbG9nZ2luZyBoYXBwZW5zCi1pbmRlcGVuZGVudCBv ZiBURVJNSU5BTCBERUJVRy4gIEZvciBub3csIHNpbmNlIHRoZSB1c2VyIHdobyBub3RpY2VkIHRo aXMKLXdhbnRlZCBkZWJ1ZyBmb3JtYXQgdG8gZ28gaW50byB0aGUgc2Vzc2lvbiBsb2csIHRoYXQn cyB3aGF0IEkgZG8uICBUaGUKLWFsdGVybmF0aXZlIHdvdWxkIGJlIHRvIGp1c3QgbG9nIHRoZSBy YXcgaW5jb21pbmcgc3RyZWFtIGFzIHVzdWFsLCBvciB0byBhZGQKLVlldCBBbm90aGVyIFNFVCBD b21tYW5kIHRvIGNob29zZS4gIGNrdWNucy5jLCAxMSBOb3YgMjAwNS4KLQotRml4ZWQgSEVMUCBJ TlRSTyB0ZXh0LiAgY2t1dXMyLmMsIDExIE5vdiAyMDA1LgotCi1BZGRlZCBOT0xPTkdMT05HIGZv ciBTVjY4LiAgY2tjZGViLmgsIDExIE5vdiAyMDA1LgotCi0tLS0gRGV2LjA1IC0tLQotCi1BZGRl ZCBhIGRlYnVnKCkgc3RhdGVtZW50IGluIEZUUCBzZWN1cmVfZ2V0Ynl0ZSgpIHRvIHNlZSB3aGF0 J3MgZ29pbmcgb24KLXdpdGggTXVoYW1hZCBUYXVmaXEgVGFqdWRkaW4ncyAyMDUtYnl0ZS1wZXIt c2Vjb25kIEZUUC9TU0wgZG93bmxvYWRzLgotCi0tLS0gRGV2LjA2IC0tLQotCi1SZXN1bHQ6IG5v dGhpbmcsIFNTTF9nZXRfZXJyb3IoKSBkb2VzIG5vdCByZXBvcnQgYW55IGVycm9ycy4gIFN1Z2dl c3RlZAotdGVzdGluZyBTU0xfcmVhZCgpJ3MgcmV0dXJuIGNvZGUsIGlmIDAgZG9uJ3QgdXBkYXRl IHRoZSBzY3JlZW4uCi0KLUNyZWF0ZWQgYSBuZXcgZGF0YSB0eXBlIENLX09GRl9UIGluIGNrY2Rl Yi5oIHRoYXQgd2lsbCBldmVudHVhbGx5IHJlc29sdmUKLXRvIHdoYXRldmVyIGVhY2ggcGxhdGZv cm0gdXNlcyBmb3IgZmlsZSBzaXplcyBhbmQgb2Zmc2V0cy4gIGNrY2RlYi5oLAotMTcgTm92IDIw MDUuCi0KLU1hZGUgYSBuZXcgbGlicmFyeSByb3V0aW5lIGNrZnN0b2EoKSB0aGF0IGNvbnZlcnRz IGEgZmlsZSBzaXplIG9yIG9mZnNldCB0bwotYSBzdHJpbmcuICBUaGlzIGlzIHRvIHNvbHZlIHRo ZSBwcm9ibGVtIHdpdGggaGF2aW5nIHRvIHVzZSBkaWZmZXJlbnQKLXByaW50ZigpIGZvcm1hdHMg Zm9yIGRpZmZlcmVudCByZXByZXNlbnRhdGlvbnMgb2YgZmlsZSBzaXplIChpbnQsIGxvbmcsIGxv bmcKLWxvbmcsIG9mZl90LCBzaWduZWQsIHVuc2lnbmVkLCBldGMpLiAgUmVwbGFjZWQgYSBmZXcg cHJpbnRmKCIlbCIsc2l6ZSkgd2l0aAotcHJpbnRmKCIlcyIsY2tmc3RvYShzaXplKSkgd2l0aCB0 aGUgZXhwZWN0ZWQgcmVzdWx0cy4gIFRoaXMgaXMganVzdCBhIHN0YXJ0LAotdGhlIGRlZmluaXRp b25zIHdpbGwgbmVlZCBhZGp1c3RtZW50IGZvciBtYW55IHBsYXRmb3JtcywgdmFyaWFibGVzIG5l ZWQgdG8KLWJlIHJlZGVjbGFyZWQsIGFuZCBhbGwgdGhlIG9mZmVuZGluZyBwcmludGYncyAoYW5k IHByaW50dydzKSB3aWxsIGhhdmUgdG8KLWh1bnRlZCBkb3duIGFuZCBjb252ZXJ0ZWQuICBja2Ns aWIuW2NoXSwgY2t1dXM0LmMsIDE3IE5vdiAyMDA1LgotCi1CdWlsdCBhIG1pbmltYWwgdmVyc2lv biBvbiBMaW51eCB3aXRoOgotbWFrZSBsaW51eCAiS0ZMQUdTPS1ETk9MT0NBTCAtRE5PSUNQIC1E Tk9DU0VUUyAtRE5PREVCVUciCi1Xb3JrZWQgZmluZSwgcmVzdWx0IHdhcyAyNjBLIG9uIGk2ODYu ICAyMSBOb3YgMjAwNS4KLQotRGlzY292ZXJlZCB0aGF0IEtlcm1pdCdzIGRhdGUgcGFyc2VyLCBj b250cmFyeSB0byB0aGUgZG9jdW1lbnRhdGlvbiwgZmFpbGVkCi10byBoYW5kbGUgc3RyaW5ncyBs aWtlICJXZWQsIDEzIEZlYiAyMDAyIDE3OjQzOjAyIC0wODAwIChQU1QpIiwgd2hpY2ggYXJlCi1j b21tb25seSBmb3VuZCBpbiBlbWFpbC4gIFRoaXMgd2FzIGJlY2F1c2Ugb2YgYW4gb3ZlcnplYWxv dXMgYW5kIG1pc2d1aWRlZAotY2hlY2sgaW4gdGhlIGNvZGU7IG9uY2UgcmVtb3ZlZCwgYWxsIHdh cyB3ZWxsLiAgY2t1Y21kLmMsIDI2IE5vdiAyMDA1LgotCi1BZGRlZCBhIG5ldyBmb3JtYXQgY29k ZSA0IHRvIFxmY3Z0ZGF0ZSgpIHRvIGVtaXQgYXNjdGltZSgpIGZvcm1hdCwgdXNlZCBpbgotQlNE LWZvcm1hdCBlbWFpbCBtZXNzYWdlIGVudmVsb3BlcyAoaS5lLiB0aGUgIkZyb20gIiBsaW5lKS4g IHNodWZmbGVkYXRlKCksCi1ja3VjbWQuYywgY2t1dXNbMjRdLmMsIDI2IE5vdiAyMDA1LgotCi1B ZGRlZCBhIG5ldyBmdW5jdGlvbiBcZmVtYWlsYWRkcmVzcygpLiAgR2l2ZW4gYSBGcm9tOiBvciBT ZW5kZXI6IGhlYWRlciBsaW5lCi1mcm9tIGFuIFJGQzI4MjItZm9ybWF0IGVtYWlsIGFkZHJlc3Ms IGV4dHJhY3RzIGFuZCByZXR1cm5zIHRoZSBhY3R1YWwgZW1haWwKLWFkZHJlc3MsIHN1Y2ggYXMg a2VybWl0QGNvbHVtYmlhLmVkdS4gIGNrdXVzci5oLCBja3V1c1s0Ml0uYywgMjYgTm92IDIwMDUu Ci0KLVVzaW5nIHRoZSBuZXcgZnVuY3Rpb25zLCBJIHdyb3RlIGEgc2NyaXB0IHRvIGZldGNoIG1h aWwgZnJvbSBhIFBPUDMgc2VydmVyCi1vdmVyIGEgVExTIGNvbm5lY3Rpb24uICBCdXQgdGhlIGxp bmUtYXQtYS10aW1lIGlucHV0IChuZWVkZWQgZm9yIGNoYW5naW5nCi1saW5lIHRlcm1pbmF0b3Jz IGFuZCBieXRlLXN0dWZmaW5nIHRleHQgbGluZXMgdGhhdCBzdGFydCB3aXRoICJGcm9tICIpIGlz Ci1zbG93LCAxNyBzZWMgdG8gcmVhZCAyOSBtZXNzYWdlcyB0b3RhbGluZyAxNzVLLgotCi1BZGRl ZCBJTlBVVCAvQ0xFQVIgc28gSU5QVVQgY2FuIGJlIHN0YXJ0ZWQgd2l0aCBhIGNsZWFuIGJ1ZmZl ciB3aXRob3V0Ci1yZXF1aXJpbmcgYSBzZXBhcmF0ZSBDTEVBUiBJTlBVVCBjb21tYW5kLiAgY2t1 dXNyLmgsIGNrdXVzW3IyNF0uYywKLTI3IE5vdiAyMDA1LgotCi1PbmUgdGhpbmcgdGhhdCBJTlBV VCB3YXMgbmV2ZXIgYWJsZSB0byBkbyB3ZWxsIHdhcyByZWFkIGFuZCBzYXZlIHRoZQotY29tcGxl dGUgaW5jb21pbmcgZGF0YSBzdHJlYW0uICBUaGF0J3MgYmVjYXVzZSwgd2hpbGUgd2FpdGluZyBm b3IgaXRzCi10YXJnZXQsIHRoZSBidWZmZXIgbWlnaHQgb3ZlcmZsb3cgd3JhcCBhcm91bmQuICBZ ZXQgdGhlcmUgd2FzIG5ldmVyIGEgd2F5IHRvCi10ZWxsIGl0IHRvIHN0b3Agd2hlbiBpdHMgYnVm ZmVyIGZpbGxzIHVwIGFuZCBsZXQgbWUgc2F2ZSBpdC4gIEkgYWRkZWQgYQotL05PV1JBUCBzd2l0 Y2ggdGhhdCBkb2VzIHRoaXMuICBJZiB0aGUgYnVmZmVyIGZpbGxzIHVwIGJlZm9yZSBhbnkgb3Ro ZXIKLWNvbXBsZXRpb24gY3JpdGVyaW9uIGlzIG1ldCwgSU5QVVQgcmV0dXJucyBmYWlsdXJlLCBi dXQgd2l0aCBcdihpbnN0YXR1cykKLXNldCB0byA2ICh0aGUgbmV4dCBhdmFpbGFibGUgaW5zdGF0 dXMgdmFsdWUpLiAgVGh1cyBhIHByb2dyYW0gdGhhdCB3YW50cyB0bwotcmVhZCBhbmQgc2F2ZSAo c2F5KSBhbiBlbWFpbCBtZXNzYWdlIGZyb20gYSBQT1Agc2VydmVyLCB3aGljaCBjb3VsZCBiZSBh bnkKLWxlbmd0aCBhdCBhbGwsIGFuZCB3aGljaCB0ZXJtaW5hdGVzIHdpdGggPENSTEY+LjxDUkxG PiBjb3VsZCBkbyB0aGlzOgotCi0gIHNldCBmbGFnIG9mZgotICB3aGlsZSBvcGVuIGNvbm5lY3Rp b24gewotICAgICAgaW5wdXQgL25vd3JhcCAxMCBcMTNcMTAuXDEzXDEwICMgV2FpdCBmb3IgPENS TEY+LjxDUkxGPgotICAgICAgaWYgc3VjY2VzcyB7Ci0gICAgICAgICAgZnJ3cml0ZSAvc3RyaW5n IFwlbyB7XGZyZXBsYWNlKFx2KGlucHV0KSxcMTNcMTAuXDEzXDEwLFwxM1wxMCl9Ci0gICAgICAg ICAgc2V0IGZsYWcgb24KLSAgICAgICAgICBicmVhawotICAgICAgfSBlbHNlIGlmICggPT0gXHYo aW5zdGF0dXMpIDYgfHwgPT0gXHYoaW5zdGF0dXMpIDEgKSB7Ci0gICAgICAgICAgZnJ3cml0ZSAv c3RyaW5nIFwlbyB7XHYoaW5wdXQpfQotICAgICAgICAgIGNvbnRpbnVlCi0gICAgICB9Ci0gICAg ICBicmVhawotICB9Ci0gIGlmIGZsYWcgKGhhbmRsZSBzdWNjZXNzKQotCi1Ob3RlIGNhcmVmdWxs eSB0aGUgYnJhY2VzIGFyb3VuZCB0aGUgRldSSVRFIHRleHQ7IHdpdGhvdXQgdGhlbSwgdHJhaWxp bmcKLXNwYWNlcyB3b3VsZCBiZSBsb3N0LgotCi1QcmV2aW91c2x5IHRoZSBvbmx5IHdheSB0byBJ TlBVVCBhbiBlbnRpcmUgZGF0YSBzdHJlYW0gd2l0aG91dCBsb3NpbmcKLWFueXRoaW5nIChhc3N1 bWluZyBpdCB3YXMgb3JkaW5hcnkgbGluZXMgb2YgdGV4dCB0aGF0IHdlcmUgbm90ICJ0b28gbG9u ZyIpLAotd2FzIGxpbmUtYnktbGluZToKLQotICB3aGlsZSBvcGVuIGNvbm5lY3Rpb24gewotICAg ICAgaW5wdXQgL2NsZWFyIDEwIFwxM1wxMAotICAgICAgaWYgZmFpbCBicmVhawotICAgICAgaWYg ZXEgIlx2KGlucHV0KSIgIiQgXDEzXDEwIiBicmVhawotICAgICAgZndyaXRlIC9zdHJpbmcgXCVv IHtcZnJlcGxhY2UoXHYoaW5wdXQpLFwxM1wxMCxcMTApfQotICB9Ci0KLVRoZSBuZXcgY29kZSBp cyAzIHRpbWVzIGZhc3RlciB1c2luZyB0aGUgZGVmYXVsdCBJTlBVVCBidWZmZXIgbGVuZ3RoIG9m IDRLLgotUmFpc2luZyBpdCB0byAxNksgbWFrZXMgaXQgMy42IHRpbWVzIGZhc3RlciAobm90IHdv cnRoIGl0KS4gIENoYW5naW5nIHRoZQotUE9QMyBzY3JpcHQgdG8gdXNlIElOUFVUIC9OT1dSQVAg bWFrZXMgaXQgYWJvdXQgdHdpY2UgYXMgZmFzdCAoaXQgZG9lcyBtb3JlOwotaXQgaGFzIHRvIGRv IGFsbCB0aGUgYnl0ZS1zdHVmZmluZyBhbmQgdW5zdHVmZmluZykuICAyNyBOb3YgMjAwNS4KLQot Q2hhbmdlZCBzc2xfZGlzcGxheV94eHgoKSB0byBqdXN0IHJldHVybiBpZiBTRVQgUVVJRVQgT04u ICBPdGhlcndpc2UgdGhlcmUKLWlzIG5vIHdheSB0byBzdXBwcmVzcyB0aGUgbWVzc2FnZXMuICBB bHNvIHByb3RlY3RlZCBhIHByZXZpb3VzbHkgdW5wcm90ZWN0ZWQKLXByaW50ZigiW1NTTCAtIE9L XVxyXG4iKTsgYnkgaWYgKCBzc2xfdmVyYm9zZV9mbGFnICkuICBja19zc2wuYywKLTI4IE5vdiAy MDA1LgotCi1EaXNjb3ZlcmVkIHRoYXQgRk9QRU4gL0FQUEVORCBkb2Vzbid0IHdvcmsgaWYgdGhl IGZpbGUgZG9lc24ndCBleGlzdC4gIEl0Ci11c2VzIGNtaW9maSgpIHdoaWNoIGlzIGEgc3VwZXIt aG9rZXkgZnJvbnQgZW5kIHRvIGNtaWZpMigpLiAgSSBoYWQgY29kZSB0bwotY2FsbCBpdCBidXQg Zm9yIHNvbWUgcmVhc29uIGl0IHdhcyBjb21tZW50ZWQgb3V0LCB3aXRoIGEgbm90ZSB0byB0aGUg ZWZmZWN0Ci1pdCBkaWRuJ3Qgd29yay4gIEkgdW5jb21tZW50ZWQgaXQgYnV0IHRoYXQgZGlkbid0 IGhlbHAgbXVjaC4gIFNvIEkgd3JvdGUgYW4KLWVudGlyZWx5IG5ldyBjbWlvZmkoKSB0aGF0IHdv cmtzIGV4YWN0bHkgYXMgaXQgc2hvdWxkLCB1c2luZyBjaGFpbmVkIEZEQnMsCi1fQ01JRkkgdG8g X0NNT0ZJIChJIHRoaW5rIHRoZSBvcmlnaW5hbCBjbWlvZmkoKSBwcmVkYXRlZCBjaGFpbmVkIEZE QnMpLgotY2t1dXM3LmMsIGNrdWNtZC5jLCAyOSBOb3YgMjAwNS4KLQotR2V0dGluZyByaWQgb2Yg dGhlIGF3ZnVsIGhhY2tzIHJlcXVpcmVkIHRvIGNhbGwgY21pb2ZpKCkgbWVhbnQgSSBhbHNvIGhh ZCB0bwotY2hhbmdlIHRoZSBFRElUIGNvbW1hbmQsIHdoaWNoIGlzIHRoZSBvbmx5IG90aGVyIHBs YWNlIHdoZXJlIGl0J3MgdXNlZC4KLVVuZm9ydHVuYXRlbHkgbm93IGl0J3Mgbm8gbG9uZ2VyIHBv c3NpYmxlIHRvIGdpdmUgRURJVCB3aXRob3V0IGEgZmlsZW5hbWUKLSh0byBqdXN0IHN0YXJ0IGFu IGVtcHR5IGVkaXRvcikgYnV0IEkgZG91YnQgYW55b25lIHdpbGwgbm90aWNlLiAgY2t1dXNyLmMs Ci0yOSBOb3YgMjAwNS4KLQotSUYgS0VSQkFORyBkaWRuJ3QgYWx3YXlzIHdvcmsgcmlnaHQuICBJ ZiBhIGtlcmJhbmcgc2NyaXB0IFRBS0VzIGFub3RoZXIKLWtlcmJhbmcgc2NyaXB0LCB0aGUgc2Vj b25kIG9uZSBzaG91bGQgaGF2ZSBJRiBLRVJCQU5HIGZhbHNlLCBidXQgaXQgZGlkbid0LgotQWRk ZWQgYSBjaGVjayBmb3IgXHYoY21kbGV2ZWwpID09IDEuICBOb3cgeW91IGNhbiB3cml0ZSBhIHdy YXBwZXIgdGhhdCBydW5zCi1hIGtlcmJhbmcgc2NyaXB0IGluIGEgbG9vcCwgYW5kIHRoZSBsYXR0 ZXIgY2FuIHVzZSBJRiBLRVJCQU5HIHRvIGtub3cKLXdoZXRoZXIgdG8gRVhJVCAoaWYgY2FsbGVk IGF0IHRvcCBsZXZlbCkgb3IgRU5EIChpZiBjYWxsZWQgYnkgYW5vdGhlcgotc2NyaXB0LCB0aHVz IGFsbG93aW5nIC0tIGluIHRoaXMgY2FzZSAtLSB0aGUgbG9vcCB0byBjb250aW51ZSkuICBja3V1 czYuYywKLTI5IE5vdiAyMDA1LgotCi1DaGFuZ2VkIFxmbG9wKCkgYW5kIGZsb3B4KCkgZnVuY3Rp b25zIHRvIHRha2UgYSB0aGlyZCBhcmd1bWVudCwgYSBudW1iZXIKLXNpZ25pZnlpbmcgYXQgd2hp Y2ggb2NjdXJyZW5jZSBvZiB0aGUgYnJlYWsgY2hhcmFjdGVyIHRvIGxvcCwgc286Ci0KLSAgXGZs b3B4KHNlc2FtZS5jYy5jb2x1bWJpYS5lZHUpID0gZWR1Ci0gIFxmbG9weChzZXNhbWUuY2MuY29s dW1iaWEuZWR1LCwyKSA9IGNvbHVtYmlhLmVkdQotCi1ja3V1c1syNF0uYywgMSBEZWMgMjAwNS4K LQotQnVpbHQgT0sgb24gVk1TIDcuMi0xIHdpdGggTXVsdGlOZXQgNC40LiAgQnVpbHQgd2l0aCBh bmQgd2l0aG91dCBPcGVuU1NMIG9uCi1MaW51eCBPSywgZGl0dG8gU29sYXJpcyA5LiAgQnVpbHQg T0sgb24gUkggTGludXggQVM0IG9uIFg4Nl82NCAoNjQtYml0KTsKLSJzaG93IHZhciBmc2l6ZSIg KHVzaW5nIG5ldyBja2ZzdG9hKCkpIHdvcmtzIE9LIHRoZXJlLiAgQWxzbyBNYWMgT1MgWCAxMC4z LjkKLSgzMi1iaXQpLCBUcnU2NCBVTklYIDQuMEYgKDY0LWJpdCksIEhQLVVYIDExaXYyICg2NC1i aXQpIChwaWNreSBuZXcgY29tcGlsZXIKLXNwZXdzIG91dCB0b25zIG9mIHVzZWxlc3Mgd2Fybmlu Z3MpLCBGcmVlQlNEIDYuMCBvbiBpYTY0ICg2NC1iaXQpLgotCi0tLS0gRGV2LjA3IC0tLQotCi1D aGFuZ2VkICJtYWtlIG5ldGJzZCIgdG8gYmUgYSBzeW5vbnltIGZvciAibWFrZSBuZXRic2QyIiBi ZWNhdXNlIHRoZQotb3JpZ2luYWwgbmV0YnNkIHRhcmdldCB3YXMgYW5jaWVudC4gIFJlbmFtZWQg aXQgdG8gbmV0YnNkLW9sZC4gIG1ha2VmaWxlLAotMyBEZWMgMjAwNS4KLQotVXBkYXRlZCBJTlBV VCBhbmQgTUlOUFVUIGhlbHAgdGV4dC4gIGNrdXVzMi5jLCAzIERlYyAyMDA1LgotCi1EaXNjb3Zl cmVkIHRoYXQgb24gYSBTRVQgUE9SVCAvU1NMIGNvbm5lY3Rpb24sIEtlcm1pdCB0cmVhdHMgaW5j b21pbmcKLTB4ZmYgZGF0YSBieXRlcyAoZS5nLiBzZW50IGZyb20gdGhlIFBPUCBzZXJ2ZXIpIGFz IElBQ3MgYW5kIGdvZXMgaW50byBUZWxuZXQKLW5lZ290aWF0aW9ucy4gIEplZmYgc2F5cyAiWW91 IHdpbGwgbmVlZCB0byBpbXBsZW1lbnQgTlBfU1NMUkFXIGFuZCBOUF9UTFNSQVcKLXRoYXQgZG8g dGhlIHNhbWUgYXMgTlBfVENQUkFXIGJ1dCBuZWdvdGlhdGUgU1NMIG9yIFRMUyBhcyBhcHByb3By aWF0ZS4iCi1UaGlzIHdhcyBub3QgYXMgZWFzeSBhcyBpdCBzb3VuZGVkLCBiZWNhdXNlIGFwcGFy ZW50bHkgYSBsb3Qgb2YgdGhlIFRlbG5ldAotY29kZSBpcyB1c2VkIGJ5IFNTTCBhbmQgVExTIGV2 ZW4gd2hlbiBUZWxuZXQgcHJvdG9jb2wgaXMgbm90IGJlaW5nIGV4ZWN1dGVkLgotSSB3b3VuZCB1 cCBkb2luZyB0aGlzIGFzIGZvbGxvd3M6IEkgYWRkZWQgL1NTTC1SQVcgYW5kIC9UTFMtUkFXIHRv IHRoZQotc3dpdGNoIHRhYmxlLiAgUmF0aGVyIHRoYW4gZGlzYWJsZSBUZWxuZXQsIHRoZXkgZG8g ZXhhY3RseSB3aGF0IHRoZSAvU1NMIGFuZAotL1RMUyBzd2l0Y2hlcyBkbywgYnV0IGFsc28gc2V0 IGEgc3BlY2lhbCBmbGFnLiAgVGhpcyBmbGFnIGlzIGNoZWNrZWQgaW4gb25seQotdHdvIHBsYWNl OiBuZXRjbG9zKCkgKHRvIHByZXZlbnQgS2VybWl0IGZyb20gc2VuZGluZyBURUxORVQgTE9HT1VU IHdoZW4KLWNsb3NpbmcgdGhlIGNvbm5lY3Rpb24pLCBhbmQgdG5fZG9vcCgpICh0byBwcmV2ZW50 IEtlcm1pdCBmcm9tIHJlYWN0aW5nIHRvCi1pbmNvbWluZyBJQUNzOyBpdCBtYWtlcyB0bl9kb29w KCkgcmV0dXJuKDMpLCB3aGljaCBtZWFucyAicXVvdGVkIElBQyIsIHdoaWNoCi1jYXVzZXMgdGhl IGNhbGxlciB0byBrZWVwIHRoZSBJQUMgYXMgZGF0YSkuICBja2NuZXQuaCwgY2tjdGVsLmgsIGNr Y3RlbC5jLAotY2t1dXM3LmMsIDQgRGVjIDIwMDUuCi0KLVRoZSBJTlBVVCBjb21tYW5kIGRpZCBu b3QgYWNjb3VudCBmb3IgdG5fZG9vcCgpIHJldHVybmluZyAzLiAgRml4ZWQgaW4KLWRvaW5wdXQo KSwgY2t1dXM0LmMsIDQgRGVjIDIwMDUuCi0KLUFkZGVkIGFub3RoZXIgZGVidWcoKSBzdGF0ZW1l bnQgaW4gRlRQIHNlY3VyZV9nZXRieXRlKCkgdG8gc2VlIHdoYXQncyBnb2luZyBvbgotd2l0aCBN dWhhbWFkIFRhdWZpcSBUYWp1ZGRpbidzIDIwNS1ieXRlLXBlci1zZWNvbmQgRlRQL1NTTCBkb3du bG9hZHMsIHBsdXMKLW5ldyBjb2RlIHRvIHRlc3QgU1NMX3JlYWQoKSdzIHJldHVybiBjb2RlIChi eXRlIGNvdW50KTsgaWYgMCBkb24ndCB1cGRhdGUKLXRoZSBzY3JlZW4uICBja2NmdHAuYywgNCBE ZWMgMjAwNS4KLQotLS0tIERldi4wOCAtLS0KLQotRml4ZWQgYSB0eXBvIGluIHRoZSBub24tQU5T SUMgZGVmaW5pdGlvbiBvZiBja2ZzdG9hKCkuICBja2NsaWIuYywgNyBEZWMgMjAwNS4KLQotT3Vy IEN0cmwtQyB0cmFwICh0aGUgT05fQ1RSTEMgbWFjcm8pIHdhc24ndCB3b3JraW5nIGZvciBrZXJi YW5nIGZpbGVzLgotUmVhcnJhbmdlZCBzb21lIGNvZGUgdG8gbWFrZSBpdCB3b3JrLiAgY2tjbWFp LmMsIDggRGVjIDIwMDUuCi0KLVN0YXJ0ZWQgY29udmVydGluZyBjb2RlIHRvIHVzZSBDS19PRkZf VCBmb3IgZmlsZSBzaXplcyBhbmQgb2Zmc2V0cywgYW5kCi1hbGwgW3NdcHJpbnRmJ3MgdG8gcmVw bGFjZSAiJWxkIiBvciB3aGF0ZXZlciB3aXRoICIlcyIsIGFuZCB0aGUgc2l6ZQotdmFyaWFibGUg d2l0aCBhIGNhbGwgdG8gY2tmc3RvYSgpLiAgU2luY2UgSSBoYXZlbid0IGFjdHVhbGx5IGNoYW5n ZWQgdGhlCi1kZWZpbml0aW9uIG9mIENLX09GRl9UIGZyb20gd2hhdCBhbGwgdGhlIHNpemUgdmFy aWFibGVzIHdlcmUgdG8gYmVnaW4KLXdpdGggKGkuZS4gbG9uZyksIGl0IHNob3VsZG4ndCBkbyBh bnkgaGFybS4gIFNvIGZhciBqdXN0IGNrY2ZuMy5jCi0xMCBEZWMgMjAwNS4KLQotQW4gdXBkYXRl ZCBIUC1VWCA5Lnh4IG1ha2VmaWxlIHRhcmdldCBmcm9tIFBldGVyRSB0byBmaXggYSBjb3JlIGR1 bXAgdGhhdAotaGFwcGVucyBvbiB0aGF0IHBsYXRmb3JtIGR1ZSB0byBpbnN1ZmZpY2llbnQgcmVz b3VyY2VzLiAgMTQgRGVjIDIwMDUuCi0KLUFkZGVkIGRlYnVnKCkgc3RhdGVtZW50cyB0byBodHRw X2JsYWgoKSByb3V0aW5lcyB0byB0ZWxsIHdoZXRoZXIgdGhlCi1jb25uZWN0aW9uIGlzICJjaHVu a2VkIi4gIFRoZXJlIHNlZW1zIHRvIGJlIGEgYmFkIHBlcmZvcm1hbmNlIHByb2JsZW0uCi1ja2Nu ZXQuYywgMTQgRGVjIDIwMDUuCi0KLVBldGVyRSBjb21wbGFpbmVkIGFib3V0IHVnbHkgRElSRUNU T1JZIGVycm9yIG1lc3NhZ2UsID9ObyBmaWxlcyBtYXRjaCAtCi0ie2JsYWh9Ii4gIFRoZSBicmFj ZXMgYXJlIHVzZWQgaW50ZXJuYWxseSBpbiBjYXNlIHRoZSB1c2VyIHR5cGVkIG1vcmUgdGhhbgot b25lIGZpbGVzcGVjLiAgSSBjaGFuZ2VkIHRoZSBlcnJvciBtZXNzYWdlIHRvIHJlbW92ZSB0aGVt LiAgRGl0dG8gREVMRVRFLgotY2t1dXM2LmMsIDE1IERlYyAyMDA1LgotCi1UaGUgcHJvYmxlbSB3 aXRoIEhUVFAgZG93bmxvYWRzIGlzIHRoYXQgS2VybWl0IGFsd2F5cyBkb2VzIHNpbmdsZS1jaGFy YWN0ZXIKLXJlYWQoKSBvciBzb2NrZXRfcmVhZCgpIGNhbGxzIChvciB0aGUgU1NMIGVxdWl2YWxl bnQpOyBzZWUgaHR0cF9pbmMoKS4gIEkKLWFkZGVkIGJ1ZmZlcmluZyBjb2RlIGZvciBub24tU1NM IGNvbm5lY3Rpb25zIG9ubHkgYnV0IGl0J3MgZ3Jvc3MgYmVjYXVzZSBpdAotaGFzIHRvIHN3YXAg dHR5ZmQgYW5kIGh0dHBmZCBiZWZvcmUgY2FsbGluZyBuZXR0Y2hrKCkuICBJIHRyaWVkIG1ha2lu ZyBhCi1uZXR0Y2hrKCkgY2xvbmUgdGhhdCBhY2NlcHRzIGEgZmlsZSBkZXNjcmlwdG9yIGFzIGFu IGFyZ3VtZW50IGJ1dCBpdCBkaWRuJ3QKLXdvcmsgYmVjYXVzZSB0b28gbWFueSBvdGhlciByb3V0 aW5lcyB0aGF0IGFyZSBpbnZva2VkIGRpcmVjdGx5IG9yIGltcGxpY2l0bHkKLWJ5IG5ldHRjaGso KSAoc3VjaCBhcyBpbl9jaGsoKSkgYXJlIHN0aWxsIGhhcmR3aXJlZCB0byB1c2UgdHR5ZmQuICBI VFRQIEdFVHMKLWFyZSBub3cgMjAgdGltZXMgZmFzdGVyIG9uIHRoZSBsb2NhbCBuZXR3b3JrICh0 aGUgaW1wcm92ZW1lbnQgaXMgbGVzcwotZHJhbWF0aWMgb3ZlciBhIGNsb2dnZWQgSW50ZXJuZXQp LiAgY2tjbmV0LltjaF0sIDE1IERlYyAyMDA1LgotCi0tLS0gRGV2LjA5IC0tLQotCi1IVFRQIGZp bGUtZGVzY3JpcHRvciBzd2FwcGluZyBpcyBub3QgdGhyZWFkIHNhZmUuICBEb2luZyBpdCByaWdo dCwgb2YKLWNvdXJzZSwgaXMgYSBiaWcgZGVhbCwgc28gZm9yIG5vdyBJIGp1c3QgZG9uJ3QgZGVm aW5lIEhUVFBfQlVGRkVSSU5HIGZvcgotV2luZG93cy4gIGNrY25ldC5jLCAxNSBEZWMgMjAwNS4K LQotTm90aWNlZCB0aGF0IEhUVFAgbm90IGluY2x1ZGVkIGluIEZyZWVCU0QgYW5kIE9wZW5CU0Qg YnVpbGRzLiAgRml4ZWQgaW4KLWNrY2RlYi5oLCAyMiBEZWMgMjAwNS4KLQotRmxlc2hlZCBvdXQg MzIvNjQtYml0IGRhdGEgdHlwZSBkZWZpbml0aW9ucyBhbmQgY2hhbmdlZCBzdHJ1Y3QgemF0dHIK LShmaWxlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUpIG1lbWJlcnMgbGVuZ3RoIGFuZCBsZW5ndGhrIHRv IGhhdmUgdGhlIG5ldwotQ0tfT0ZGX1QgdHlwZS4gIENoYW5nZWQgZmluYWwgYXJndW1lbnRzIG9m IGRlYnVnKCkgYW5kIHRsb2coKSB0byBiZSB0aGUgbmV3Ci1MT05HTE9ORyB0eXBlLiAgY2tjZGVi LmgsIDIyIERlYyAyMDA1LgotCi1DaGFuZ2VkIGNrZnN0b2EoKSB0byByZXR1cm4gYSBzaWduZWQg bnVtYmVyIGluIHN0cmluZyBmb3JtLCByYXRoZXIgdGhhbiBhbgotdW5zaWduZWQgb25lLiAgVGhh dCdzIGJlY2F1c2Ugb2ZmX3QgaXMgc2lnbmVkICh0aGFuayBnb29kbmVzcykuICBBZGRlZCB0aGUK LWludmVyc2UgZnVuY3Rpb24sIGNrYXRvZnMoKSBzbyB3ZSBjYW4gY29udmVydCBmaWxlIHNpemVz IGFuZCBvZmZzZXRzIGJhY2sKLWFuZCBmb3J0aCBiZXR3ZWVuIGJpbmFyeSBudW1iZXIgYW5kIHN0 cmluZy4gIGNrY2xpYi5jLCAyMiBEZWMgMjAwNS4KLQotQ2hhbmdlZCBBdHRyaWJ1dGUgUGFja2V0 IHJlYWRlciB0byBjb252ZXJ0IGluY29taW5nIGZpbGUgc2l6ZSBhdHRyaWJ1dGUKLXdpdGggY2th dG9mcygpIHJhdGhlciB0aGFuIGF0b2woKS4gIGNrY2ZuMy5jLCAyMiBEZWMgMjAwNS4KLQotQ29u dmVydGVkIGRlYnVnKCksIHRsb2coKSwgY2tzY3JlZW4oKSwgZXRjLCB0byBoYW5kbGUgcG90ZW50 aWFsbHkgImxvbmcgbG9uZyIKLWFyZ3VtZW50cyBieSBtYWtpbmcgdGhlaXIgIm4iIGFyZ3VtZW50 IENLX09GRl9ULiAgY2t1dXN4LmMsIGNrY2RlYi5oLAotMjIgRGVjIDIwMDUuCi0KLUNvbnZlcnRl ZCB0aGUgcmVzdCBvZiB0aGUgc291cmNlIGZpbGVzIHRvIHVzZSBDS19PRkZfVCBmb3IgYWxsIGZp bGUgc2l6ZQotYW5kIG9mZnNldCBhbmQgYnl0ZS1jb3VudCByZWxhdGVkIHZhcmlhYmxlcywgYW5k IGNvbnZlcnRlZCBhbGwgcmVmZXJlbmNlcyB0bwotdGhlc2UgdmFyaWFibGVzIGluIHByaW50ZnMg dG8gZ28gdGhyb3VnaCBja2ZzdG9hKCkuICBUaGVuIEkgYnVpbHQgaXQgb24KLUxpbnV4L2kzODYg d2l0aDoKLQotICBtYWtlIGxpbnV4ICJLRkxBR1M9LURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxF X09GRlNFVF9CSVRTPTY0IgotCi13aGljaCBtYWtlcyBvZmZfdCBiZSA2NCBiaXRzIGFuZCBtYWdp Y2FsbHkgbWFrZXMgYWxsIHRoZSByZWd1bGFyIGZpbGUgQVBJcwotdXNlIDY0LWJpdCBzaXplcyBh bmQgb2Zmc2V0cyB3aXRob3V0IGNoYW5naW5nIHRoZSBBUEkgY2FsbHMgaW4gdGhlIHNvdXJjZQot Y29kZS4gIEl0J3MgZ29pbmcgdG8gYmUgYSBsb3Qgb2Ygd29yayB0byBnZXQgdGhyb3VnaCBhbGwg dGhlIGtpbmtzIGJ1dCBJIHdhcwotYWJsZSB0byBzZW5kIGEgbG9uZyBmaWxlLCBkbyBkaXJlY3Rv cnkgbGlzdGluZ3Mgb2YgbG9uZyBmaWxlcywgZG8KLVxmc2l6ZShsb25nZmlsZSksIGV0Yy4gIFdo ZW4gaXQgc2VuZHMgYSBmaWxlLCB0aGUgbGVuZ3RoIGlzIHNob3duIGNvcnJlY3RseQotaW4gdGhl IEEgcGFja2V0LiAgSWYgdGhlIHJlY2VpdmVyIGRvZXMgbm90IHN1cHBvcnQgYmlnIG51bWJlcnMs IGl0IHJlY2VpdmVzCi10aGUgZmlsZSBPSyBhbnl3YXksIHdpdGhvdXQgc2hvd2luZyB0aGUgc2l6 ZSwgdGhlIHRoZXJtb21ldGVyLCBvciBwZXJjZW50Ci1kb25lIChhbmQgdGhlbiB3aWxsIGdldCBh biBlcnJvciB3aGVuIHRoZSBmaWxlIGtlZXBzIGNvbWluZyBhZnRlciB0aGUgMkcKLW1hcmspLiAg S2VybWl0IDk1IGFjdHVhbGx5IHJlZnVzZXMgbG9uZyBmaWxlcyBmb3IgIlNpemUiLCBidXQgb25s eSBpZiB0aGUKLWFubm91bmNlZCBpcyBsZXNzIHRoYW4gMl42MyBieXRlcy4gIFdoZW4gdG9kYXkn cyBMaW51eCB2ZXJzaW9uIHJlY2VpdmVzIGEKLWZpbGUsIGl0IHNob3dzIHRoZSBsZW5ndGggY29y cmVjdGx5IGluIHRoZSBmaWxlLXRyYW5zZmVyIGRpc3BsYXksIGFzIHdlbGwgYXMKLXBlcmNlbnQg ZG9uZSwgdGhlcm1vbWV0ZXIsIGV0Yy4gIEFsc28gYnVpbHQgdGhpcyB2ZXJzaW9uIG9uIHRydWUg NjQtYml0Ci1MaW51eCwgYW5kIGl0IHdvcmtlZCBmaW5lLiAgTWFueSBmaWxlcyBjaGFuZ2VkLCAy MiBEZWMgMjAwNS4KLQotRm9yIHRoZSByZWNvcmQsIHRoaXMgQVBJIGlzIHNwZWNpZmllZCBpbiBY L09wZW4ncyBTaW5nbGUgVU5JWCBTcGVjaWZpY2F0aW9uCi1WZXJzaW9uIDIsIHdoaWNoIGlzIGJy YW5kZWQgYXMgVU5JWCA5OC4gIEl0IGlzIGNhbGxlZCBMYXJnZSBGaWxlIFN1cHBvcnQsIG9yCi1M RlMsIGFuZCB3YXMgZGV2ZWxvcGVkIGF0IHRoZSBMYXJnZSBGaWxlIFN1bW1pdC4KLQotSXQgbG9v a3MgbGlrZSB0aGUgb3BlcmF0aXZlIGZlYXR1cmUtdGVzdCBtYWNybyBpbiBnbGliYyBmb3IgdHJh bnNpdGlvbmFsCi1sYXJnZSBmaWxlIHN1cHBvcnQgaXMgX19VU0VfTEFSR0VGSUxFNjQuICBTbyBp ZiB0aGlzIGlzIGRlZmluZWQsIHdlIGNhbiBhbHNvCi1zdXBwbHkgX0xBUkdFRklMRV9TT1VSQ0Ug YW5kIF9GSUxFX09GRlNFVF9CSVRTPTY0IGF1dG9tYXRpY2FsbHkgZm9yIDMyLWJpdAotTGludXgg YnVpbGRzLiAgQnV0IHRoZXJlJ3MgYSBDYXRjaC0yMiwgeW91IGRvbid0IGtub3cgaWYgdGhpcyBp cyBkZWZpbmVkCi11bnRpbCB5b3UgcmVhZCB0aGUgaGVhZGVyIGZpbGVzLCBidXQgeW91IGhhdmUg dG8gZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFCi1hbmQgX0ZJTEVfT0ZGU0VUX0JJVFMgYmVmb3Jl IHlvdSByZWFkIHRoZSBoZWFkZXIgZmlsZXMuICBNYXliZSBpdCdzIGdvb2QKLWVub3VnaCB0byBn cmVwIHRocm91Z2ggPGZlYXR1cmVzLmg+IGZvciBfX1VTRV9MQVJHRUZJTEU2NC4gIG1ha2VmaWxl LAotMjMgRGVjIDIwMDUuCi0KLUNoZWNrZWQgdGhpcyBvbiB0cnVlIDY0LWJpdCBMaW51eC4gIFRo ZSBzYW1lIHN5bWJvbHMgYXJlIGRlZmluZWQgaW4gQ0ZMQUdTLAotYnV0IHRoZXkgZG8gbm8gaGFy bTsgaXQgYnVpbGRzIHdpdGhvdXQgY29tcGxhaW50IGFuZCB3b3JrcyBmaW5lLiAgMjQgRGVjIDIw MDUuCi0KLUJ1aWx0IGl0IG9uIFJlZCBIYXQgTGludXggNi4xIGZyb20gMTk5OS4gIFRoaXMgcGlj a2VkIHVwIHRoZSBsb25nIGZpbGUKLXN1cHBvcnQgdG9vLiAgR3Vlc3MgNi4xIGlzbid0IG9sZCBl bm91Z2ggdG8gbm90IGhhdmUgaXQhICBLZXJtaXQgc2VlbXMgdG8KLXdvcmsgT0sgb24gcmVndWxh ciBmaWxlcyBidXQgSSBkb24ndCBoYXZlIGVub3VnaCBkaXNrIHNwYWNlIHRvIGNyZWF0ZSBhIGxv bmcKLWZpbGUsIGFuZCBteSBiaWdmaWxlLmMgcHJvZ3JhbSAod2hpY2ggY3JlYXRlcyBhIGxvbmcg ZmlsZSBjb250YWluaW5nIG9ubHkgMQotYnl0ZSkgZG9lc24ndCB3b3JrICgiZnNlZWtvOiBpbnZh bGlkIGFyZ3VtZW50IikuICBJdCBsb29rcyBsaWtlIHBhcnRzIG9mCi10aGlzIEFQSSB3ZXJlIHZp c2libGUgaW4gTGludXggYmVmb3JlIHRoZXkgd2VyZSBhY3R1YWxseSB3b3JraW5nLgotMjQgRGVj IDIwMDUuCi0KLUNvbnZlcnRlZCBhbGwgZnNlZWsoKSBhbmQgZnRlbGwoKSB0byBtYWNyb3MgdGhh dCBleHBhbmQgdG8gZnNlZWsoKSBhbmQgZnRlbGwoKQotb3IgZnNlZWtvKCkgYW5kIGZ0ZWxsbygp IGRlcGVuZGluZyBvbiB3aGV0aGVyIF9MQVJHRUZJTEVfU09VUkNFIGlzIGRlZmluZWQuCi1ja3Vm aW8uYywgY2t1dXM3LmMsIGNrdXVzeC5jLCAyNCBEZWMgMjAwNS4KLQotTWFkZSBhIENLX09GRl9U IHZlcnNpb24gb2YgY21udW0oKS4gIEl0IHdvdWxkIGJlIGEgdmVyeSBiaWcgZGVhbCB0byBqdXN0 Ci1jaGFuZ2UgY21udW0oKSB0byByZXR1cm4gYSBuZXcgdHlwZSwgc28gYW5vdGhlciBpZGVhIGlz IHRvIHJlbmFtZSBjbW51bSgpIHRvCi1zb21ldGhpbmcgZWxzZSwgY21udW13KCksIGNoYW5nZSBp dHMgcmVzdWx0IGFyZ3VtZW50IHRvIENLX09GRl9ULCBhbmQgdGhlbgotbWFrZSBhIHN0dWIgY21u dW0oKSB0byBjYWxsIGl0IHRvIGdldCBhbiBpbnQsIHRoZW4gY2FsbCBjbW51bXcoKSBleHBsaWNp dGx5Ci1hbnkgdGltZSB3ZSBuZWVkIGEgYmlnIG51bWJlci4gIGNrdWNtZC5jLCAyNCBEZWMgMjAw NS4KLQotQ2FsbGluZyBjbW51bXcoKSBkaXJlY3RseSByZXF1aXJlcyBjaGFuZ2VzIHRvIGVhY2gg cm91dGluZSB0aGF0IHVzZXMgaXQuCi1UaGUgSU5DUkVNRU5UIGFuZCBERUNSRU1FTlQgY29tbWFu ZHMsIGZvciBleGFtcGxlLCByZXF1aXJlZCBjaGFuZ2VzIHRvCi1kb2luY3IoKSwgdmFydmFsKCks IGFuZCBpbmN2YXIoKSwgYW5kIGFsbCByZWZlcmVuY2VzIHRvIHRoZW0uICBja3V1c3IuW2NoXSwK LWNrdXVzWzU2XS5jLCAyNCBEZWMgMjAwNS4KLQotQ2FsbGluZyBjbW51bXcoKSBpbiBjaGFpbmVk IEZEQnMgcmVxdWlyZWQgZGVmaW5pbmcgYSBuZXcgZnVuY3Rpb24gY29kZSwKLV9DTU5VVywgYWRk aW5nIGEgbmV3IG1lbWJlciB0byB0aGUgT0ZEQiBzdHJ1Y3QgZm9yIHJldHVybmluZyB3aWRlIHJl c3VsdHMsCi1hbmQgYWRkaW5nIGEgbmV3IGNhc2UgdG8gY21mZGIoKS4gIGNrdWNtZC5bY2hdLCAy NCBEZWMgMjAwNS4KLQotQ2hhbmdlZCBGU0VFSyBhbmQgRkNPVU5UIHRvIHVzZSB0aGUgbmV3IGNo YWluZWQgRkRCIGludGVyZmFjZSwgbm93IHdlIGNhbgotc2VlayBhbmQgbG9vayBwYXN0IDJHQi4g IGNrdXVzNy5jLCAyNCBEZWMgMjAwNS4KLQotTmV4dCBjb21lIHN3aXRjaGVzLCB3aGljaCBzdG9y ZSB0aGVpciByZXN1bHRzIGluIGEgc3RydWN0IHN0cmluZ2ludC4gIFRoaXMKLXN0cnVjdCB3YXMg ZGVmaW5lZCBpbiBlYWNoIG1vZHVsZSB3aGVyZSBpdCB3YXMgdXNlZCAoY2t1dXNbcjM2N10uYywg Y2tjZnRwLmMpLgotSSBtb3ZlZCB0aGUgZGVmaW5pdGlvbiB0byBja3V1c3IuaCBhbmQgYWRkZWQg YSB3dmFsIG1lbWJlciwgd2hpY2ggY2FuIGJlCi1yZWZlcmVuY2VkIGJ5IGFueSBzd2l0Y2gtcGFy c2luZyBjb2RlIHRoYXQgY2FsbHMgY21udW13KCkuICAyNCBEZWMgMjAwNS4KLQotQ2hhbmdlZCBT RU5EIC9DQUxJQlJBVEU6biB0byBhbGxvdyBiaWcgdmFsdWVzIG9mIG4uICBUaGlzIG1ha2VzIGl0 IHBvc3NpYmxlCi10byB0ZXN0IHRoZSBwcm90b2NvbCBhc3BlY3RzIG9mIGxvbmctZmlsZSB0cmFu c2ZlciB3aXRob3V0IGFjdHVhbGx5IGhhdmluZyBhCi1sb25nIGZpbGUgaGFuZHkuICBja3V1c3Iu YywgMjQgRGVjIDIwMDUuCi0KLVNFTkQgL1NNQUxMRVItVEhBTjpuLCBTRU5EIC9MQVJHRVItVEhB TjpuLCBhbmQgYW5kIFNFTkQgL1NUQVJUOm4gYWxzbyBub3cKLWFsbG93IGxhcmdlIHZhbHVlcyBv ZiBuLiAgY2t1dXNyLmMsIDI0IERlYyAyMDA1LgotCi1DaGFuZ2VkIHRoZSBhbGdlYnJhaWMgZXhw cmVzc2lvbiBldmFsdWF0b3IgdG8gdXNlIHdpZGUgdmFsdWVzLgotY2t1dXM1LmMsIDI0IERlYyAy MDA1LgotCi1GaXhlZCBja2ZzdG9hKCkgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZW4gbiBpcyBuZWdh dGl2ZSBhbmQgKDAgLSBuKSBpcyBhbHNvCi1uZWdhdGl2ZSwgd2hpY2ggaGFwcGVucyBmb3IgbnVt YmVycyAyXihuLTEpIG9yIGdyZWF0ZXIsIHdoZXJlIG4gaXMgdGhlCi1udW1iZXIgb2YgYml0cyBp biB0aGUgd29yZCBzaXplIHdlJ3JlIGRlYWxpbmcgd2l0aCwgZS5nLiA2NCwgaW4gd2hpY2ggY2Fz ZQotMl42MyBoYXMgaXRzIHNpZ24gYml0IHNldCBzbyBzZWVtcyB0byBiZSBuZWdhdGl2ZS4gIElu IHN1Y2ggY2FzZXMsIGNrZnN0b2EoKQotcmV0dXJucyAiT1ZFUkZMT1ciIGluc3RlYWQgb2YgYSBu dW1lcmljIHN0cmluZy4gIFdlJ2xsIGhhdmUgdG8gc2VlIGhvdyB0aGlzCi1wbGF5cyBvdXQgYnV0 IEkgdGhpbmsgaXQncyBiZXR0ZXIgdG8gY2F1c2UgYSBwYXJzZSBlcnJvciBhbmQgc3RvcCB0aGlu Z3MKLWRlYWQgdGhhbiB0byByZXR1cm4gYSBzcHVyaW91cyBudW1iZXIuICBja2NsaWIuYywgMjQg RGVjIDIwMDUuCi0KLUNvbnZlcnRlZCB0aGUgUy1FeHByZXNzaW9uIGhhbmRsZXIgdG8gdXNlIHdp ZGUgaW50ZWdlcnMuIGNrdXVzMy5jLCAyNCBEZWMgMjAwNS4KLQotVG9vayBhbGwgdGhlIExPTkdM T05HIHN0dWZmIG91dCBvZiBja2NkZWIuaCwgd2UgZG9uJ3QgbmVlZCBpdC4KLQotQWxsIG9mIHRo ZXNlIGNoYW5nZXMgcmVzdWx0IGluIDY0LWJpdCBhcml0aG1ldGljIChtb3JlIG9yIGxlc3MpIG9u IDMyLWJpdAotTGludXgsIGFzIHdlbGwgYXMgb24gdHJ1ZSA2NC1iaXQgcGxhdGZvcm1zLgotCi1S ZWJ1aWx0IHRvZGF5J3MgY29kZSBvbiBTb2xhcmlzIDkgaW4gdGhlIDMyLWJpdCBhbmQgNjQtYml0 IHdvcmxkcywgb24gUmVkCi1IYXQgNi4xLCBSZWQgSGF0IEFTNC4yLiAgSSBoYXZlbid0IGJvdGhl cmVkIHRyeWluZyBhIDMyLzY0IGh5YnJpZCBidWlsZCBmb3IKLVNvbGFyaXMsIHNpbmNlIEkgY2Fu IGJ1aWxkIGEgcHVyZSA2NC1iaXQgdmVyc2lvbiB0aGVyZS4gIFF1aWNrIHRlc3RzIHNob3cKLXRo ZSBsYXJnZS1udW1iZXIgYXJpdGhtZXRpYyB3b3JrcyBPSyBpbiBhbGwgY2FzZXMgZXhjZXB0LCBv ZiBjb3Vyc2UsIG9uIHB1cmUKLTMyLWJpdCBidWlsZHMgKHVuZm9ydHVuYXRlbHkgSSBjYW4ndCBm aW5kIGEgcnVubmluZyBMaW51eCBzeXN0ZW0gb2xkIGVub3VnaAotdG8gdmVyaWZ5IHRoaXMgZm9y IExpbnV4LCBidXQgaXQncyB0cnVlIGZvciBvdGhlciAzMi1iaXQgcGxhdGZvcm1zKS4KLTI0IERl YyAyMDA1LgotCi1UcmllZCBidWlsZGluZyBhIGh5YnJpZCB2ZXJzaW9uIG9uIFNvbGFyaXMgOSBh ZnRlciBhbGwgc2luY2UgdGhlIExGUyBBUEkgaXMKLW9zdGVuc2libHkgdGhlIHNhbWUgYXMgZm9y IExpbnV4OgotCi0gbWFrZSBzb2xhcmlzOSAiS0ZMQUdTPS1EX0xBUkdFRklMRV9TT1VSQ0UgLURf RklMRV9PRkZTRVRfQklUUz02NCIKLQotSXQgYnVpbHQgc21vb3RobHkgYW5kIHRoZSByZXN1bHRp bmcgYmluYXJ5IGlzIDIuNU1CIGNvbXBhcmVkIHRvIDMuNE1CIGZvcgotdGhlIDEwMCUgNjQtYml0 IHZlcnNpb24uICBMb29rcyBsaWtlIGEga2VlcGVyLiAgRm9yIG5vdywgYWRkZWQgc29sYXJpczls ZnMKLWFuZCBzb2xhcmlzMTBsZnMgZW50cmllcyB0byB0aGUgbWFrZWZpbGUgYnV0IGlmIHRoZXNl IHdvcmsgb24gUENzIHdlIGNhbgotbWFrZSB0aGVzZSB0aGUgcmVndWxhciBlbnRyaWVzIGZvciBT b2xhcmlzIDkgYW5kIDEwLiAgMjcgRGVjIDIwMDUuCi0KLUJ1aWx0IG9uIE1hYyBPUyBYIDEwLjQg d2l0aCB0aGUgcmVndWxhciB0YXJnZXQuICBJdCBzZWVtcyB0aGF0IGluIHRoYXQgY2FzZSwKLW9m Zl90IGlzIDY0IGJpdHMgYW55d2F5LiAgTm90aWNlZCB0aGF0IGEgbG90IG9mIHN0dWZmIGRpZG4n dCB3b3JrLCBsaWtlCi1leHBvbmVudGlhdGlvbiBpbiBTLUV4cHJlc3Npb25zLiAgVHJpZWQgYnVp bGRpbmcgaXQgYXMgYWJvdmUsIHdoaWNoIHdvcmtlZCwKLWFuZCBub3cgQ0tfT0ZGX1QgaXMgNjQg Yml0cyBpbnN0ZWFkIG9mIDMyLCBidXQgKF4gMiAzMCkgaXMgc3RpbGwgMi4wLiAgSW4KLWZhY3Qg Mi10by10aGUtYW55LXBvd2VyIGlzIDIuMC4gIEl0IHNlZW1zIHRoYXQgdGhlIE1hYyBPUyBYIHZl cnNpb24gZGlkIG5vdAotaGF2ZSBGTkZMT0FUIGRlZmluZWQuICBJdCBhbHNvIHNlZW1zIHRoYXQg ZXZlcnkgdGVzdCBpbiBkb3NleHAoKSBsaWtlOgotCi0gIGlmIChyZXN1bHQgIT0gZnByZXN1bHQp IGZwZmxhZysrOwotCi1zaG91bGQgaGF2ZSBiZWVuIHByb3RlY3RlZCBieSAjaWZkZWYgRk5GTE9B VC4uI2VuZGlmIC8qIEZORkxPQVQgKi8gLS0gYQotZG91YmxlLWVuZGVkIGJyZWFrLCBhcyB0aGV5 IHNheSBpbiB0aGUgbnVjbGVhciBwb3dlciBpbmR1c3RyeS4gIGNrdXVzMy5jLAotMjcgRGVjIDIw MDUuCi0KLUFkZGVkIEdSRVAgL0VYQ0VQVDpwYXR0ZXJuLiAgY2t1dXNbMjZdLmMsIDI3IERlYyAy MDA1LgotCi1GaXhlZCBhIHByb2JsZW0gd2l0aCB1bmluaXRpYWxpemVkIHB2W10ud3ZhbCAoc3dp dGNoLXBhcnNpbmcgcGFyYW1ldGVyLXZhbHVlKQotbWVtYmVycyB0aGF0IHNob3dlZCB1cCBvbiBj ZXJ0YWluIHBsYXRmb3JtcyBvciB3aXRoIGNlcnRhaW4gY29tcGlsZXJzLiAgTm93Ci10aGUgTWFj IE9TIFggMTAuNCB2ZXJzaW9uIHdvcmtzLiAgY2t1dXNbcjM2N10uYywgY2tjZnRwLmMsIDI4IERl YyAyMDA1LgotCi1CdWlsdCBvbiBVbml4d2FyZSA3LjEuMSwgYSBwdXJlIDMyLWJpdCBidWlsZCwg c2VlbXMgZmluZS4gIFJlYnVpbHQgb24gUmVkCi1IYXQgQVMgNC4yIGp1c3QgdG8gbWFrZSBzdXJl IEkgZGlkbid0IGJyZWFrIGFueXRoaW5nLCBpdCdzIE9LLiAgTm8gdGVzdGluZwotb24gSFAtVVgs IGV0YywgYmVjYXVzZSBIUCB0ZXN0ZHJpdmUgZmlsZSBzeXN0ZW0gaXMgZnVsbCwgY2FuJ3QgdXBs b2FkCi1hbnl0aGluZy4gIDI5IERlYyAyMDA1LgotCi1Db21tZW50ZWQgb3V0IHRoZSBTSE9XIEZF QVRVUkVTIHNlY3Rpb24gdGhhdCBkaXNwbGF5cyBjb25zdGFudHMgbGlrZQotSU5UX01BWCwgQ0hB Ul9NQVgsIGV0YywgYmVjYXVzZSBwcmludGluZyBlYWNoIHZhbHVlIGluIHRoZSBhcHByb3ByaWF0 ZQotZm9ybWF0IGlzIHRvbyB0cmlja3ksIGFuZCB3ZSBkb24ndCBuZWVkIHRoZW0gYW55d2F5LiAg Y2t1dXM1LmMsIDI5IERlYyAyMDA1LgotCi1VcGRhdGVkIGNrdmZpby5jIHRvIHVzZSBDS19PRkZf VCBmb3IgdGhlIHJlbGV2YW50IHZhcmlhYmxlcy4gIEJ1aWx0IGFuZAotdGVzdGVkIG9uIFZNUy9B bHBoYSA3LjI6IGZpbGUgdHJhbnNmZXIgaW4gcmVtb3RlIG1vZGU7IG1ha2luZyBhIFRlbG5ldAot Y29ubmVjdGlvbiBhbmQgdGhlbiBsb2NhbC1tb2RlIGZpbGUgdHJhbnNmZXI7IFMtRXhwcmVzc2lv bnMsIGFsbCBPSy4gIEFsc28KLWJ1aWx0IGEgbm8tbmV0IHZlcnNpb24gT0suICAyOSBEZWMgMjAw NS4KLQotQnVpbHQgYW5kIHRlc3RlZCBvbiBSZWQgSGF0IEFTNCBBTUQgWDg2XzY0LCB1c2VkIGl0 IHRvIHVwbG9hZCBuZXcgc291cmNlcyB0bwotRnJlZUJTRCA0LjExLiAgQnVpbHQgb24gRnJlZUJT RCA0LjExL2kzODYuICBIZXJlJ3MgYW5vdGhlciBvbmUgd2hlcmUgb2ZmX3QKLWlzIDY0IGJpdHMs IGV2ZW4gdGhvdWdoIGxvbmcgaXMgMzIgYml0cy4gIEJ1dCBpdCBzZWVtcyB0byB3b3JrIG9rLCBu b3Qgc3VyZQotd2h5LCB3aGVuIENLX09GRl9UIGlzIDMyIGJpdHMuICBUaGVyZSBpcyBubyBfTEFS R0VGSUxFX1NPVVJDRSBzdHVmZiBpbiB0aGUKLWhlYWRlciBmaWxlcy4gIDI5IERlYyAyMDA1Lgot Ci1CdWlsdCBvbiBNYWMgT1MgWCAxMC4zLjkgdXNpbmcgdGhlIG5ldyBtYWNvc3gxMC40IHRhcmdl dCB0byBwaWNrIHVwIExGUy4KLVdvcmtzIGZpbmUuCi0KLUJ1aWx0IG9uIFJlZCBIYXQgTGludXgg NFdTIG9uIElBNjQgKDY0LWJpdCkuICBOb3cgdGhpcyBvbmUgaXMgb2RkLCBzdGF0KCkKLWZhaWxz IG9uIGJpZyBmaWxlcy4gIEl0IGhhcHBlbnMgYWxzbyBpZiBJIHVzZSB0aGUgImxpbnV4bm9sZnMi IHRhcmdldCwgd2hpY2gKLWRvZXMgbm90IGRlZmluZSBfVVNFX0xBUkdFRklMRSBvciBfRklMRV9P RkZTRVRfQklUUz02NC4gIERJUkVDVE9SWSBCSUdGSUxFCi1zaG93cyB0aGUgc2l6ZSBhcyAtMSwg YnV0IGlmICJsb2cgZGVidWciLCBpdCBzYXlzICJubyBmaWxlcyBtYXRjaCIsIGkuZS4KLWRpZmZl cmVudCBiZWhhdmlvciwgb2JzZXJ2ZXIgZWZmZWN0LiAgSSBoYXRlIHdoZW4gdGhhdCBoYXBwZW5z LgotCi1MZXQncyBzZWUgaWYgdGhhdCdzIGFuIGFub21hbHkuLi4gIEJ1aWx0IG9uIFRydTY0IFVu aXggNC4wRiAoNjQtYml0IEFscGhhKS4KLUl0IHNlZXMgbG9uZyBmaWxlcyBqdXN0IGZpbmUuICBS ZWJ1aWx0IGFuZCBjaGVja2VkIG9uIHg4Nl82NCBhZ2Fpbi4uLiBmaW5lLgotT0ssIGxldCdzIG5v dCB3b3JyeSBhYm91dCBJQTY0IHlldC4KLQotQW5vdGhlciBzbWFsbCBmaXggdG8gdGhlIEhQLVVY IDkuMCB0YXJnZXQgZnJvbSBQZXRlckUuICBtYWtlZmlsZSwgMjkgRGVjIDIwMDUuCi0KLS0tLURl di4xMC0tLQotCi1Db2RlIGFkanVzdG1lbnRzIGZyb20gSmVmZiwgbWFpbmx5IHRvIHRoZSBTU0wg YW5kIFRMUyBSYXcgbW9kZSBjb2RlIGZyb20KLXNldmVyYWwgd2Vla3MgYWdvLCBwbHVzIGNoYW5n aW5nIHNvbWUgZGF0YSB0eXBlcyBpbiB0aGUgc2VjdXJpdHkgY29kZSB0bwotQ0tfT0ZGX1QsIHBs dXMgYSBkaWZmZXJlbnQgZGF0YSB0eXBlIGZvciBDS19PRkZfVCBmb3IgSzk1IGJlY2F1c2UgV2lu ZG93cwotc2l6ZV9UIGlzbid0IHNpZ25lZC4gIFRoaXMgcHJlc3VtYWJseSB3aWxsIGFsbG93IGxh cmdlLW51bWJlciBhcml0aG1ldGljIGJ1dAotaXQgd2lsbCBub3QgZ2l2ZSBsYXJnZSBmaWxlIGFj Y2VzcyBiZWNhdXNlIHRoYXQgd2lsbCByZXF1aXJlIHJlcGxhY2luZyBhbGwgQwotbGlicmFyeSBm aWxlIGkvbyBjYWxscyAoZXNwLiBpbiBja29maW8uYykgd2l0aCBuYXRpdmUgV2luZG93cyBBUElz LiAgQnVpbGQKLW9uIFNvbGFyaXMgOSB3aXRoIGFuZCB3aXRob3V0IFNTTCBhbmQgb24gTGludXgg UkggQVM0LjIgd2l0aCBhbmQgd2l0aG91dAotU1NMLiAgY2tfY3JwLmMsIGNrX3NzbC5jLCBja19z c2wuaCwgY2tjZGViLmgsIGNrY2Z0cC5jLCBja2NtYWkuYywgY2tjbmV0LmMsCi1ja2NuZXQuaCwg Y2tjdGVsLmMsIGNrdWF0Mi5oLCBja3V1czQuYywgY2t1dXM3LmMsIGNrdXVzci5jLCAzMCBEZWMg MjAwNS4KLQotSXQgd2FzIHJlcG9ydGVkIHRoYXQgV1JJVEUgU0VTU0lPTiBhbHdheXMgcmV0dXJu ZWQgYSBmYWlsdXJlIHN0YXR1cywgZXZlbgotd2hlbiBpdCBzdWNjZWVkZWQuICBUaGUgcHJvYmxl bSB3YXMgdGhhdCBVbml4IHZlcnNpb25zIG9mIHpzb3V0KCkgYW5kCi16c291dGwoKSwgZm9yIHRo ZSBzZXNzaW9uIGxvZyBvbmx5LCB3ZXJlIHVzaW5nIHdyaXRlKCkgYW5kIHJldHVybmluZwotd3Jp dGUoKSdzIHJldHVybiBjb2RlLCB3aGljaCBpcyBkaWZmZXJlbnQgZnJvbSB3aGF0IHpzb3V0KCkg YW5kIHpzb3V0bCgpIGFyZQotZG9jdW1lbnRlZCB0byByZXR1cm4uICBBbHNvIHBsdWdnZWQgYSBj b3VwbGUgcG90ZW50aWFsIGhvbGVzIGluIHpzb3V0eCgpCi10aGF0IEkgbm90aWNlZCB3aGlsZSBJ IHdhcyBpbiB0aGUgbmVpZ2hib3Job29kLiAgY2t1ZmlvLmMsIDMwIERlYyAyMDA1LgotCi1BZGRl ZCBGU0VFSyAvRklORDpwYXR0ZXJuLiAgVGhpcyBmb3JtIG9mIEZTRUVLIGFjY2VwdHMgYWxsIHRo ZSBvdGhlcgotc3dpdGNoZXMgYW5kIGFyZ3VtZW50cyBhbmQgcGVyZm9ybXMgdGhlIGRlc2lyZWQg c2Vlay4gIFRoZW4sIGlmIHRoZSBzZWVrIHdhcwotc3VjY2Vzc2Z1bCwgaXQgc3RhcnRzIGZyb20g dGhhdCBwb2ludCBhbmQgcmVhZHMgdGhyb3VnaCB0aGUgZmlsZSwgbGluZSBieQotbGluZSwgc2Vh cmNoaW5nIGZvciB0aGUgZmlyc3QgbGluZSB0aGF0IGNvbnRhaW5zIHRoZSBnaXZlbiBzdHJpbmcg b3IgbWF0Y2hlcwotdGhlIGdpdmVuICh1bmFuY2hvcmVkKSBwYXR0ZXJuIGFuZCwgaWYgZm91bmQs IHNldHMgdGhlIGZpbGUgcG9pbnRlciB0byB0aGUKLWJlZ2lubmluZyBvZiB0aGF0IGxpbmUuICBV c2VmdWwsIGUuZy4sIGZvciB2ZXJ5IGxvbmcgdGltZXN0YW1wZWQgbG9ncywgd2hlcmUKLXlvdSB3 YW50IHRvIHN0YXJ0IHByb2Nlc3NpbmcgYXQgYSBjZXJ0YWluIGRhdGUgb3IgdGltZTsgc2VhcmNo aW5nIGZvciBhCi1wYXJ0aWN1bGFyIHN0cmluZyBpcyBtdWNoIGZhc3RlciB0aGFuIGRvaW5nIGRh dGUgY29tcGFyaXNvbnMgb24gZWFjaCBsaW5lLgotY2t1dXNbMjddLmMsIDMwIERlYyAyMDA1Lgot Ci1JdCB3YXMgYW5ub3lpbmcgbWUgdGhhdCBGSUxFIFNUQVRVUyAoRlNUQVRVUykgcmVxdWlyZWQg YSBjaGFubmVsIG51bWJlciB0bwotYmUgZ2l2ZW4gZXZlbiBpZiBvbmx5IG9uZSBmaWxlIHdhcyBv cGVuLCBzbyBJIHN1cHBsaWVkIHRoZSBjb3JyZWN0IGRlZmF1bHQKLWluIHRoYXQgY2FzZS4gIGNr dXVzNy5jLCAzMCBEZWMgMjAwNS4KLQotSU5QVVQgL05PV1JBUCwgYWRkZWQgcmVjZW50bHksIGlz IHVzZWQgZm9yIGVmZmljaWVudGx5IGNvcHlpbmcgdGhlIElOUFVUCi1zdHJlYW0gaW50YWN0LCBi dXQgaXQncyBub3QgZ29vZCBmb3IgbWF0Y2hpbmcgYmVjYXVzZSBpZiB0aGUgSU5QVVQgdGFyZ2V0 IGlzCi1icm9rZW4gYmV0d2VlbiB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBidWZmZXIgYW5kIHRo ZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQKLW9uZSwgdGhlIGNvbnRleHQgaXMgbG9zdCBhbmQgdGhl IG1hdGNoIGRvZXMgbm90IG9jY3VyLiAgSSB0aG91Z2h0IG9mIHNldmVyYWwKLXdheXMgYXJvdW5k IHRoaXMsIGJ1dCB0aGV5IGFsbCBpbnZvbHZlIHNhdmluZyBhIGh1Z2UgYW1vdW50IG9mIGNvbnRl eHQgLS0KLW9sZCBpbnB1dCBidWZmZXJzLCB0aGUgYXJyYXlzIG9mIHRhcmdldCBzdHJpbmdzIGFu ZCBjb3JyZXNwb25kaW5nIG1hdGNoCi1wb3NpdGlvbnMsIGV0Yy4gIFRoZSBhbHRlcm5hdGl2ZSBp cyBmYWlybHkgc2ltcGxlIGJ1dCBpdCdzIG5vdCB0cmFuc3BhcmVudAotdG8gdGhlIHVzZXIuICBI ZXJlJ3Mgd2hhdCBJIGRpZCBpbiBhIFBPUCBzY3JpcHQ6Ci0KLSAgICAuZW9tIDo9ICJcMTNcMTAu XDEzXDEwIgotICAgIHNldCBmbGFnIG9mZiAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRkxB RyBPTiA9IHN1Y2Nlc3MKLSAgICB3aGlsZSAoIG9wZW4gY29ubmVjdGlvbiAmJiBub3QgZmxhZyAp IHsKLSAgICAgICAgLm9sZGlucHV0IDo9IFxmcmlnaHQoXHYoaW5wdXQpLDgpICAjIFNhdmUgdGFp bCBvZiBwcmV2aW91cyBJTlBVVCBidWZmZXIKLSAgICAgICAgaW5wdXQgL2NsZWFyIC9ub3dyYXAg NCBcbShlb20pICAgICAjIEdldCBuZXcgSU5QVVQgYnVmZmVyCi0gICAgICAgIGlmIHN1Y2Nlc3Mg eyAgICAgICAgICAgICAgICAgICAgICAgIyBJTlBVVCBtYXRjaGVkIC0gZ29vZAotICAgICAgICAg ICAgLnMgOj0ge1xmcmVwbGFjZShcdihpbnB1dCksXG0oZW9tKSxcMTNcMTApfQotICAgICAgICAg ICAgc2V0IGZsYWcgb24KLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAjIE5vIG1hdGNoCi0gICAgICAgICAgICAucyA6PSBcdihpbnB1dCkgICAgICAgICAgICAgICAg IyBDaGVjayBpZiB0YXJnZXQgY3Jvc3NlZCB0aGUgYm9yZGVyCi0gICAgICAgICAgICAub2xkaW5w dXQgOj0gXG0ob2xkaW5wdXQpXGZzdWJzdHIoXHYoaW5wdXQpLDEsOCkKLSAgICAgICAgICAgIGlm IFxmaW5kZXgoXG0oZW9tKSxcbShvbGRpbnB1dCkpIHNldCBmbGFnIG9uCi0gICAgICAgIH0KLSAg ICAgICAgLi4uCi0gICAgfQotCi1JIHRoaW5rIHRoaXMgd2lsbCBiZSBlYXNpZXIgdG8gZXhwbGFp biB0aGFuIGFueSBkYW5nZXJvdXMgYW5kIGdyb3Rlc3F1ZQotbWFnaWMgSSBtaWdodCBwdXQgaW50 byBkb2lucHV0KCkgaXRzZWxmLiAgRm9yIG5vdywgYWRkZWQgYSBmZXcgd29yZHMgYWJvdXQKLXRo aXMgdG8gSEVMUCBJTlBVVC4gIGNrdXVzMi5jLCAzMCBEZWMgMjAwNS4KLQotQmFjayB0byB0aGUg cGF0dGVybiBtYXRjaGVyLiAgTm90aWNlZCB0aGF0ICJJRiBNQVRDSCBpbmRleC5odG1sIFthLWhq LXpdKiIKLXN1Y2NlZWRlZCB3aGVuIGl0IHNob3VsZCBoYXZlIGZhaWxlZC4gIEluIGNrbWF0Y2go KSwgdGhlIGNsaXN0IHNlY3Rpb24KLW5lZWRlZCBvbmUgbW9yZSBjbGF1c2U6IGl0IGNhbid0IGZs b2F0IHRoZSBwYXR0ZXJuIGlmIGFuIGFzdGVyaXNrIGRvZXMgbm90Ci1vY2N1ciBpbiB0aGUgcGF0 dGVybiBiZWZvcmUgdGhlIGNsaXN0LiAgVGhpcyBjaGFuZ2UgZml4ZXMgdGhlIHByb2JsZW0KLXdp dGhvdXQgYnJlYWtpbmcgYW55IG90aGVyIGNhc2VzIHRoYXQgd2VyZW4ndCBhbHJlYWR5IGJyb2tl biwgbW9zdCBvZiB3aGljaAotaW52b2x2ZSBzbGlzdHMsIGkuZS4ge3N0cmluZyxzdHJpbmcsc3Ry aW5nLC4uLn0uICBja2NsaWIuYywgMzAgRGVjIDIwMDUuCi0KLVRyaWVkIEZTRUVLIC9GSU5EOiBv biBhIGxhcmdpc2ggZmlsZSAob3ZlciAxMDAsMDAwIGxpbmVzKSwgdXNpbmcgaXQgdG8gc2Vlawot dG8gYSBsaW5lIG5lYXIgdGhlIGVuZC4gIEl0IHRvb2sgMC43NTYgc2Vjb25kcywgY29tcGFyZWQg d2l0aCBVbml4IGdyZXAsCi13aGljaCBkaWQgdGhlIHNhbWUgdGhpbmcgaW4gMC4xNTEgc2VjLiAg VGhhdCdzIGJlY2F1c2UgQy1LZXJtaXQgaXMgdXNpbmcKLWNrbWF0Y2goKS4gIEJ1dCBpZiB0aGUg c2VhcmNoIHRhcmdldCBpcyBub3QgYSBwYXR0ZXJuLCBpdCBzaG91bGQgYmUgYSBiaXQKLWZhc3Rl ciB0byB1c2UgY2tpbmRleCgpLiAgWXVwLCAwLjU1NCBzZWMsIGEgMzYlIGltcHJvdmVtZW50LiAg Q2FuJ3QgZXhwZWN0Ci10byBjb21wZXRlIHdpdGggZ3JlcCwgdGhvdWdoOyBpdCdzIGhpZ2hseSB0 dW5lZCBmb3IgaXRzIHNpbmdsZSBwdXJwb3NlLgotY2tjbGliLltjaF0sIGNrdXVzNy5jLCAxIEph biAyMDA2LgotCi1VcGRhdGVkIHZpc2libGUgY29weXJpZ2h0IGRhdGVzIHRvIDIwMDY6IGNrY21h aS5jLCBja3V1czIuYywgY2t1dXM1LmMsCi0xIEphbiAyMDA2LgotCi1Ob3RpY2VkIHRoYXQgTmV0 QlNEIDIuMC4zIGhhcyA2NC1iaXQgb2ZmX3QsIGFuZCB0aGF0IF9MQVJHRUZJTEVfU09VUkNFIGlz Ci1tZW50aW9uZWQgaW4gPHN0ZGlvLmg+LiAgVHJpZWQgYnVpbGRpbmcgS2VybWl0IHdpdGggX0xB UkdFRklMRV9TT1VSQ0UgYWRkZWQKLXRvIENGTEFHUywgaXQncyBnb29kLiAgQWRkZWQgaXQgdG8g dGhlIG5ldGJzZCB0YXJnZXQuICBtYWtlZmlsZSwgMSBKYW4gMjAwNi4KLQotRml4ZWQgdHlwbywg I2lmZGVmIENLX05PTE9OR0xPTkcgaW4gY2t1dXM1LmMgc2hvdWxkIGhhdmUgYmVlbiAjaWZuZGVm Ci1DS19MT05HTE9ORyAod2hpY2gsIGl0IHR1cm5zIG91dCwgd2UgZG9uJ3QgdXNlIGFueXdheSku ICAyIEphbiAyMDA1LgotCi1PYnNlcnZlZCB0aGF0IEZyZWVCU0QgNC54IGhhcyBhIDY0LWJpdCBv ZmZfdCwgYnV0IGRvZXMgbm90IHVzZSB0aGUKLV9MQVJHRUZJTEVfU09VUkNFIGNvbnZlbnRpb24u ICBSZWFzb25pbmcgdGhhdCBhbGwgdmVyc2lvbnMgb2YgRnJlZUJTRCBoYXZlCi1vZmZfdCAoSSB3 YXMgYWJsZSB0byBjaGVjayBiYWNrIHRvIEZyZWVCU0QgMy4zKSwgSSBzaW1wbHkgI2RlZmluZSBD S19PRkZfVAotdG8gYmUgb2ZmX3QgaW4gY2tjZGViLmggd2l0aGluICNpZmRlZiBfX0ZyZWVCU0Rf XyAuLiAjZW5kaWYuICBBbm90aGVyIG9uZQotZG93bi4gIFRoaXMgY2FuIGJlIGRvbmUgZm9yIGFu eSBwbGF0Zm9ybSB0aGF0IGlzIGd1YXJhbnRlZWQgdG8gaGF2ZSBvZmZfdC4KLVR1cm5zIG91dCBG cmVlQlNEIDMuMyBoYXMgNjQtYml0IG9mZl90IHRvby4gIDIgSmFuIDIwMDUuCi0KLU9wZW5CU0Qs IHNhbWUgYXMgRnJlZUJTRC4gIEFsc28sIGFkZGVkIE9TLXZlcnNpb24tZ2V0dGluZyB0aGluZyB0 byBtYWtlZmlsZQotdGFyZ2V0IGZvciB0aGUgcHJvZ3JhbSBoZXJhbGQsIGFzIGluIHRoZSBvdGhl ciBCU0RzLiAgQnVpbHQgb24gT3BlbkJTRCAyLjUKLWZyb20gMTk5OCwgaXQgaGFzIDY0LWJpdCBv ZmZfdCB0b28uICBja2NkZWIuaCwgbWFrZWZpbGUsIDIgSmFuIDIwMDUuCi0KLUR1bXBpbmcgdGhl IGNvbW1hbmQgc3RhY2sgZXZlcnkgdGltZSB0aGVyZSdzIGFuIGVycm9yIGlzIHJlYWxseSB0b28g bXVjaC4KLUkgYWRkZWQgU0VUIENPTU1BTkQgRVJST1ItRElTUExBWSB7MCwxLDIsM30gdG8gc2V0 IHRoZSB2ZXJib3NpdHkgbGV2ZWwgb2YKLWVycm9yIG1lc3NhZ2VzLiAgT25seSBsZXZlbCAzIGR1 bXBzIHRoZSBzdGFjay4gIGNrdXVzWzIzNV0uYywgMiBKYW4gMjAwNS4KLQotQnVpbHQgb24gSFAt VVggMTEuMTEgd2l0aCBfTEFSR0VGSUxFX1NPVVJDRSBhbmQgX0ZJTEVfT0ZGU0VUX0JJVFM9NjQu ICBUaGUKLXJlc3VsdCB3b3JrcyBmaW5lIGFzIGZhciBhcyBJIGNhbiB0ZWxsLiAgSXQgc2VlcyBi aWcgZmlsZXMsIGl0IGNhbiBvcGVuCi10aGVtLCBzZWVrIHRvIHBvc2l0aW9ucyBwYXN0IHRoZSAy XjMxIGJvdW5kYXJ5LiAgSXQgY2FuIHNlbmQgbGFyZ2UgZmlsZXMuCi1JdCBjYW4gZG8gbGFyZ2Ut bnVtYmVyIGFyaXRobWV0aWMgKF4gMiA2MikuICBUaGUgb25seSBwcm9ibGVtIGlzIHRoYXQgZHVy aW5nCi1jb21waWxhdGlvbiwgZXZlcnkgc2luZ2xlIG1vZHVsZXMgd2FybnM6Ci0KLSAgY2M6ICIv dXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiwgbGluZSA1MDQ6IHdhcm5pbmcgNTYyOiBSZWRlY2xh cmF0aW9uIG9mCi0gICJzZW5kZmlsZSIgd2l0aCBhIGRpZmZlcmVudCBzdG9yYWdlIGNsYXNzIHNw ZWNpZmllcjogInNlbmRmaWxlIiB3aWxsIGhhdmUKLSAgaW50ZXJuYWwgbGlua2FnZS4KLSAgY2M6 ICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiwgbGluZSA1MDU6IHdhcm5pbmcgNTYyOiBSZWRl Y2xhcmF0aW9uIG9mCi0gICJzZW5kcGF0aCIgd2l0aCBhIGRpZmZlcmVudCBzdG9yYWdlIGNsYXNz IHNwZWNpZmllcjogInNlbmRwYXRoIiB3aWxsIGhhdmUKLSAgaW50ZXJuYWwgbGlua2FnZS4KLQot VGhlc2Ugd2FybmluZ3Mgc2hvdWxkIGJlIHBlcmZlY3RseSBoYXJtbGVzcyBzaW5jZSB0aGV5IGFy ZSBub3QgY29taW5nIGZyb20KLUMtS2VybWl0IGNvZGUsIG5vciBkb2VzIEMtS2VybWl0IHVzZSBl aXRoZXIgb25lIG9mIHRob3NlIGZ1bmN0aW9ucy4gIFRoZXNlCi13YXJuaW5ncyBkb24ndCBjb21l IG91dCBpbiBIUC1VWCAxMWkgdjIsIGJ1dCBvbiB0aGF0IG9uZSB3ZSBnZXQgdG9ucyBhbmQgdG9u cwotb2YgcGlja3kgY29tcGlsZXIgd2FybmluZ3MgKHZhcmlhYmxlcyBzZXQgYnV0IG5vdCB1c2Vk LCBkZWZpbmVkIGJ1dCBub3QKLXJlZmVyZW5jZWQsIGV0YykuICBBIGNvdXBsZSwgaG93ZXZlciwg dHVybmVkIG91dCB0byBiZSB2YWxpZDsgb25lIGNhc2Ugb2YKLSJleHByZXNzaW9uIGhhcyBubyBl ZmZlY3QiLCBhbmQgdHdvIG9mICJzdHJpbmcgZm9ybWF0IGluY29tcGF0aWJsZSB3aXRoCi1kYXRh IHR5cGUiIChJIG1pc3NlZCBhIGNvdXBsZSBmaWxlLXNpemUgcHJpbnRmcykuCi0KLVRoZXJlIHdl cmUgYWxzbyBudW1lcm91cyB3YXJuaW5ncyBhYm91dCBzaWduZWRuZXNzIG1pc21hdGNoIG9yIHNp Z24KLWNvbnZlcnNpb24gb2YgY29uc3RhbnRzIGxpa2UgSUFDICgweGZmKS4gIERvZXMgdGhlIEhQ LVVYIE9wdGltaXppbmcgQ29tcGlsZXIKLWhhdmUgYSBjb21waWxlciBmbGFnIHRvIG1ha2UgYWxs IGNoYXJzIHVuc2lnbmVkPyAgWWVzLCArdWMsIGJ1dCB0aGUgbWFuIHBhZ2UKLXNheXMgIkJlIGNh cmVmdWwgd2hlbiB1c2luZyB0aGlzIG9wdGlvbi4gIFlvdXIgYXBwbGljYXRpb24gbWF5IGhhdmUg cHJvYmxlbXMKLWludGVyZmFjaW5nIHdpdGggSFAtVVggc3lzdGVtIGxpYnJhcmllcyBhbmQgb3Ro ZXIgbGlicmFyaWVzIHRoYXQgZG8gbm90IHVzZQotdGhpcyBvcHRpb24iLiAgU2lnaCwgYmV0dGVy IG5vdCB1c2UgaXQuCi0KLUFmdGVyIHJldmlld2luZyAiSFAtVVggTGFyZ2UgRmlsZXMgV2hpdGUg UGFwZXIgVmVyc2lvbiAxLjQiIGFuZCBIUCdzCi0iV3JpdGluZyBQb3J0YWJsZSBDb2RlIiBkb2N1 bWVudHMsIEkgYWRkZWQgLURfTEFSR0VGSUxFX1NPVVJDRQotLURfRklMRV9PRkZTRVRfQklUUz02 NCB0byB0aGUgaHB1eDEwMDAgdGFyZ2V0LCB3aGljaCBpcyB0aGUgYmFzaXMgZm9yIGFsbAotSFAt VVggMTAuMDAgYW5kIGxhdGVyIGJ1aWxkcy4gIExhcmdlIGZpbGVzIGFyZSBhdmFpbGFibGUgaW4g SFAtVVggMTAuMjAgYW5kCi1sYXRlci4gIDEwLjAwIGFuZCAxMC4xMCB3ZXJlIG5vdCByZWFsIHJl bGVhc2VzLCBhbmQgYW55d2F5IHRoZXNlIGZsYWdzCi1zaG91bGQgYmUgaGFybWxlc3MgdGhlcmUg dW5sZXNzIHRoZSBsYXJnZS1maWxlIGltcGxlbWVudGF0aW9uIHdhcyBvbmx5Ci1wYXJ0bHkgZG9u ZS4gIEJ1aWx0IE9LIG9uIGJvdGggUEEtUklTQyBhbmQgSUE2NCwgb3B0aW1pemVkIGFuZCBwbGFp bi4KLW1ha2VmaWxlLCA0IEphbiAyMDA2LgotCi1CdWlsdCBvbiBGcmVlQlNEIDYuMCBvbiBJQTY0 LiAgQWxsIE9LIGV4Y2VwdCBJIGdvdCBhIHdhcm5pbmcgYWJvdXQgdGhlCi1hcmd1bWVudCBwYXNz ZWQgdG8gdGltZSgpIGluIGxvZ3d0bXAoKSBpbiBja3VmaW8uYy4gIFRoaXMgc2VjdGlvbiBoYWQK LWFscmVhZHkgYmVlbiBwYXJ0aWFsbHkgZml4ZWQ7IHRodXMgSSBwdXQgdGhlIGltcHJvdmVkIHZl cnNpb24gaW50bwotI2lmZGVmIENLXzY0QklULCB3aGljaCBpcyBvdXIgbmV3bHkgYXZhaWxhYmxl IHN5bWJvbCB0aGF0IHNob3VsZCBiZQotYXV0b21hdGljYWxseSBkZWZpbmVkIGZvciBhbnkgdHJ1 ZSA2NC1iaXQgYnVpbGQuICBja3VmaW8uYywgNCBKYW4gMjAwNi4KLQotRmluYWxseSBnb3QgYXJv dW5kIHRvIHRlc3RpbmcgSmVmZidzIGNoYW5nZXMgdG8gU1NML1RMUyBSQVcgbW9kZSBmcm9tCi1E ZWNlbWJlciAzMHRoIGFnYWluc3Qgb3VyIFBPUCBzZXJ2ZXIuICBJdCBkaWRuJ3Qgd29yaywgY291 bGRuJ3QgbG9nIGluLgotVHJpZWQgYmFja2luZyBvZmYgdGhlIGNrY3RlbC5jIGNoYW5nZXMgZmly c3Q7IHRoYXQgYWxsb3dlZCBsb2dpbiBhbmQKLWNvbW11bmljYXRpb24sIGJ1dCBpdCBkaWQgbm90 IHN1cHByZXNzIGFjdGl2YXRpb24gb2YgVGVsbmV0IHByb3RvY29sCi13aGVuZXZlciBhIDB4ZmYg Ynl0ZSBhcnJpdmVkLiAgQmFja2VkIG9mZiB0aGUgcmVzdCBvZiB0aGUgY2hhbmdlcyBhbmQgbm93 Ci1hbGwgaXMgT0sgYWdhaW4uICBja2N0ZWwuYywgY2tjbmV0LmMsIGNrdXVzNy5jLCA5IEphbiAy MDA2LgotCi1CdWlsdCBvbiBOZXRCU0QgMS40LjEgKDE5OTkpLCBmb3VuZCB0aGF0IGl0IGRpZCBu b3QgbGlrZSB0aGUgbGFyZ2UgZmlsZQotYXNzdW1wdGlvbiAtLSBmc2Vla28oKSBhbmQgZnRlbGxv KCkgZG8gbm90IGV4aXN0OyBhZGRlZCBhIGNsYXVzZSB0byB0aGUKLW5ldGJzZCB0YXJnZXQgdG8g Y2hlY2sgZm9yIGZzZWVrbyBhbmQgbm90IGRlZmluZSBfTEFSR0VGSUxFX1NPVVJDRSBpZiBub3QK LWZvdW5kLiAgT2RkbHkgZW5vdWdoLCBvZmZfdCBpcyA2NCBiaXRzIGFueXdheSwgYnV0IGl0IGRv ZXNuJ3QgbG9vayBsaWtlIHRoZQotQVBJcyBhcmUgaGFsZi1kb25lLiAgRm9yIGV4YW1wbGUsIHN0 YXQoKSB1c2VzIG9mZl90ICg2NCBiaXRzKSBmb3IgdGhlIGZpbGUKLWxlbmd0aCwgYnV0IGZzZWVr KCkgdXNlcyBsb25nICgzMiBiaXRzKSBhbmQgdGhlcmUgaXMgbm8gNjQtYml0IGFuYWxvZy4KLUFu eXdheSB0aGUgbmV3IG5ldGJzZCB0YXJnZXQgd29ya3Mgb24gYm90aCAxLjQuMSBhbmQgMS41LjIg KG5vIGxhcmdlIGZpbGVzKQotYW5kIG9uIDIuMC4zIChsYXJnZSBmaWxlcykuICBtYWtlZmlsZSwg OSBKYW4gMjAwNi4KLQotQnVpbHQgb24gUU5YLTMyIDQuMjUsIHdoaWNoIGhhcyBubyBsYXJnZSBm aWxlIHN1cHBvcnQuICBHb3QgYSBmZXcgc3RyYW5nZQotY29tcGlsZXIgKFdhdENvbSkgd2Fybmlu Z3MsIGJ1dCBpdCBidWlsdCBhbmQgcnVucyBPSy4gIE5vdGljZWQgdGhhdCBmaWxlCi10cmFuc2Zl cnMgaW50byBRTlggb3ZlciBhIFRlbG5ldCBjb25uZWN0aW9uIGNhbid0IHVzZSBzdHJlYW1pbmcs IGJ1dCB0aGF0J3MKLW5vdGhpbmcgbmV3IHRvIHRoaXMgdmVyc2lvbjsgc2FtZSB0aGluZyBoYXBw ZW5zIHdpdGggQy1LZXJtaXQgNy4wLiAgOSBKYW4gMjAwNi4KLQotQnVpbHQgb24gSVJJWCA2LjUu ICBJIGRpZG4ndCBib3RoZXIgd2l0aCBsYXJnZSBmaWxlcyB0aGVyZSBiZWNhdXNlIGl0IGRvZXMK LW5vdCBzdXBwb3J0IHRoZSBfTEFSR0VGSUxFX1NPVVJDRSBpbnRlcmZhY2U7IHlvdSBoYXZlIHRv IGNoYW5nZSBhbGwgdGhlIEFQSXMKLWF0IHRoZSBzb3VyY2UgbGV2ZWwgZnJvbSBibGFoKCkgdG8g YmxhaDY0KCkuICBTZWVtcyB0byB3b3JrIGZpbmUgYXMgYSAzMi1iaXQKLWFwcCBldmVuIHRob3Vn aCBpdHMgb2ZmX3QgaXMgNjQgYml0cy4gIFRyaWVkIGEgcHVyZSA2NC1iaXQgSVJJWCA2LjUgYnVp bGQKLWJ1dCBpdCBkaWVzIGluIGNrY25ldC5jIHdoZW4gaXQgaGl0cyBTT0NLT1BUX1QgYW5kIEdT T0NLTkFNRV9UIHdpdGggIlRoZQotaWRlbnRpZmllciAnc29ja2xlbl90JyBpcyB1bmRlZmluZWQi LgotCi1Mb29rcyBsaWtlIEkgbm8gbG9uZ2VyIGhhdmUgYWNjZXNzIHRvIFNDTyBPU1I1LgotCi1N YWRlIGEgcHVyZSAzMi1iaXQgYnVpbGQgb24gU0NPIFVuaXhXYXJlIDcuMS40LCBhbGwgT0suICBG b3VuZCB0aGF0IHRoaXMKLXZlcnNpb24gYWxzbyBzdXBwb3J0cyBMRlMsIGFkZGVkIGl0IHRvIHRo ZSB1dzcgdGFyZ2V0LiAgbWFrZWZpbGUsIDkgSmFuIDIwMDYuCi0KLS0tLSBEZXYuMTEgLS0tCi0K LUV2aWRlbnRseSB0aGUgSFAtVVggYnVuZGxlZCAobm9uLUFOU0kgbm9uLW9wdGltaXppbmcpIGNv bXBpbGVyIGRvZXNuJ3QgbGlrZQotbG9uZyBpbnRlZ2VycyBpbiBzd2l0Y2ggZXhwcmVzc2lvbnMu ICBDaGFuZ2VkIHRocmVlIGV4YW1wbGVzIG9mIHRoZXNlIGluIHRoZQotUy1leHByZXNzaW9uIGNv ZGUuICBja3V1czMuYywgMTAgSmFuIDIwMDYuCi0KLUEgc2VjdGlvbiBvZiB0c3RhdHMoKSB3aGVy ZSBHRlRJTUVSIGlzbid0IGRlZmluZWQgKGUuZy4gb24gTW90b3JvbGEKLXN2NjhyM3Y2KSB3YXMg Z2FyYmxlZC4gIEZpeGVkIGluIGNrY2ZuMi5jLCAxMCBKYW4gMjAwNi4KLQotQSBmaXggZm9yIHNl dHRpbmcgOTIxNjAwIGJwcyBvbiBMaW51eCBmcm9tIFBhdWwgRnVsZ2h1bSwgTWljcm9nYXRlIFN5 c3RlbXMgTHRkLgotdHRnc3BkKCk6IGNrdXRpby5jLCAxMSBKYW4gMjAwNi4KLQotTm90aWNlZCB0 aGF0IHdoZW4gSSBjaGFuZ2VkIHRoZSBjb21wYWN0IHN1YnN0cmluZyBub3RhdGlvbiBjb2RlIGJh Y2sgb24KLUF1Z3VzdCA5dGgsIEkgYnJva2UgdGhlIGFiaWxpdHkgdG8gdXNlIGFyaXRobWV0aWMg ZXhwcmVzc2lvbnMgd2l0aGluIHRoZQotYnJhY2tldHMsIHdoaWNoIGV4cGxhaW5zIHNvbWUgcmF0 aGVyIG9kZCBiZWhhdmlvciBJIHNhdyB3aXRoIHNvbWUgb2YgbXkKLXNjcmlwdHMuICBMb29raW5n IG1vcmUgZGVlcGx5IGludG8gdGhpcywgSSBhbHNvIHNlZSB0aGF0IGFsbCB0aGUgcGFyc2VycyBJ Ci1oYXZlIGJlZW4gdXNpbmcgdXAgdG8gbm93IGZvciB0aGlzLCBhcyB3ZWxsIGFzIGZvciBhcnJh eSBib3VuZHMgcGFpcnMsIGhhdmUKLWJlZW4gaW5hZGVxdWF0ZSBiZWNhdXNlIHRoZXkgbmV2ZXIg YWxsb3dlZCBmb3IgbmVzdGVkIGNvbnN0cnVjdGlvbnMsIHN1Y2ggYXMKLWEgbWVtYmVyIG9mIGEg Ym91bmRzIHBhaXIgdGhhdCBpdHNlbGYgd2FzIGFuIGFycmF5IGVsZW1lbnQsIHBvc3NpYmx5IHdp dGgKLWFub3RoZXIgYXJyYXkgZWxlbWVudCBhcyBhIHN1YnNjcmlwdC4gIEkgd3JvdGUgYSBuZXcg cm91dGluZSBmb3IgdGhpcywKLWNhbGxlZCBib3VuZHNwYWlyKCksIHdoaWNoIGlzIGxpa2UgYXJy YXlib3VuZHMoKSBleGNlcHQgaXQgYWNjZXB0cyBhbiBleHRyYQotYXJndW1lbnQsIGFuIGFycmF5 IG9mIGNoYXJhY3RlcnMgdGhhdCBjYW4gc2VydmUgYXMgYm91bmRzLXBhaXIgZGVsaW1pdGVycywK LWFuZCBpdCByZXR1cm5zIHRoZSBwYWlyIHNlcGFyYXRvciB0aGF0IHdhcyBlbmNvdW50ZXJlZCBp biBhbm90aGVyIG5ldwotYXJndW1lbnQuICBGb3IgdGhlIGFsdGVybmF0aXZlIHN1YnN0cmluZyBu b3RhdGlvbiBmb3IgW3N0YXJ0cG9zLWVuZHBvc10gSQotaGFkIHRvIGNoYW5nZSB0aGUgZGVsaW1p dGVyIGZyb20gJy0nIHRvICdfJyBiZWNhdXNlICctJyBjYW4gYmUgdXNlZCBpbgotYXJpdGhtZXRp YyBidXQgJ18nIGlzIG5vdCBhIHJlY29nbml6ZWQgb3BlcmF0b3IuICBUaGlzIGlzIHNvIEkgY2Fu IHBhcnNlLAotZS5nLiBbYTpiXSBvciBbYV9iXSBpbiB0aGUgc2FtZSBjb250ZXh0LCBhbmQgdGhl biBmaW5kIG91dCB3aGljaCBmb3JtIHdhcwotdXNlZCwgZS5nLiBccyhsaW5lWzk6MTJdKSBvciBc cyhsaW5lWzlfMTJdKTsgdGhlIGZpcnN0IHN0cmluZyBpcyA0IGJ5dGVzCi1sb25nLCB0aGUgc2Vj b25kIGlzIDEyLiAgRXZlcnl0aGluZyBzZWVtcyB0byBiZSBPSyBub3cuICBccyhsaW5lWzEwXSkg Z2l2ZXMKLWV2ZXJ5dGhpbmcgc3RhcnRpbmcgYXQgMTAsIGJ1dCBccyhsaW5lWzEwOjBdKSBnaXZl cyB0aGUgbnVsbCBzdHJpbmcuICBCYWQKLXN5bnRheCBpbiB0aGUgYm91bmRzIHBhaXJzIHJlc3Vs dHMgaW4gYSBudWxsIHN0cmluZzsgbWlzc2luZyBwaWVjZXMgb2YgdGhlCi1ib3VuZHMgcGFpciBy ZXN1bHQgaW4gZGVmYXVsdHMgdGhhdCBzaG91bGQgYmUgY29tcGF0aWJsZSB3aXRoIHByZXZpb3Vz Ci1iZWhhdmlvci4gIGNrdXVzWzQ1XS5jLCBja3V1c3IuaCwgMTMgSmFuIDIwMDUuCi0KLUNoYW5n ZWQgYXJyYXlib3VuZHMoKSB0byBjYWxsIGJvdW5kc3BhaXIoKS4gIFRoaXMgd2FzIGEgcmF0aGVy IGRyYXN0aWMKLWNoYW5nZSwgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSwgYnV0IEkgdGhpbmsgSSBn b3QgYWxsIHRoZSBraW5rcyBvdXQuCi1ja3V1czUuYywgMTMgSmFuIDIwMDUuCi0KLUNoYW5nZXMg ZnJvbSBQZXRlckUgdG8gdGhlIG1ha2VmaWxlIGZvciBIUC1VWCA2IGFuZCA3LCB0byBhY2NvbW1v ZGF0ZSBiaWdnZXIKLXN5bWJvbCB0YWJsZXMsIGV0Yy4gIDE5IEphbiAyMDA1LgotCi1EZXRlcm1p bmVkIHRoYXQgU0NPIE9TUjUuMC42IChhbmQgZWFybGllcikgZG8oZXMpIG5vdCBzdXBwb3J0IGxh cmdlIGZpbGVzLgotRG9uJ3Qga25vdyBhYm91dCA1LjAuNy4gIDMwIEphbiAyMDA1LgotCi1DcmVh dGVkIGEgbmV3IGJ1aWxkIHRhcmdldCBmb3IgU0NPIE9TUjYuMC4wLiAgR2V0cyB0aGUgZXhhY3Qg Ni54LnggdmVyc2lvbgotZHluYW1pY2FsbHkuICBTdXBwb3J0cyBsYXJnZSBmaWxlcyBhbmQgYmln LW51bWJlciBhcml0aG1ldGljIHZpYSBDS19PRkZfVC4KLVRoZSBzb2Nrb3B0KCkgZmFtaWx5IG9m IGZ1bmN0aW9ucyBjaGFuZ2VkIHRoZSBkYXRhIHR5cGVzIG9mIHNvbWUgb2YgdGhlaXIKLWFyZ3Vt ZW50cyBzaW5jZSBPU1I1LiAgSXQgd2FzIGFscmVhZHkgcG9zc2libGUgdG8gZGVmaW5lIFNPQ0tP UFRfVCBhbmQKLUdTT0NLTkFNRV9UIGZyb20gdGhlIGNvbW1hbmQgbGluZSBidXQgSSBoYWQgdG8g YWRkIGNvZGUgdG8gYWxzbyBhbGxvdyB0aGlzCi1mb3IgR1BFRVJOQU1FX1QgdG9vLiAgY2tjbmV0 LmMsIG1ha2VmaWxlLCAzMCBKYW4gMjAwNS4KLQotQXBwYXJlbnRseSwgZXZlciBzaW5jZSBDLUtl cm1pdCA3LjAgd2FzIHJlbGVhc2VkLCBpdCBoYXMgbmV2ZXIgYmVlbiBwb3NzaWJsZQotdG8gdXNl IGEgdmFyaWFibGUgZm9yIHRoZSBhcy1uYW1lIGluIGEgUkVDRUlWRSBjb21tYW5kIGluIEtlcm1p dCA5NS4gIFRoaXMKLWlzIGJlY2F1c2UgZXZhbHVhdGlvbiBvZiB0aGUgYXMtbmFtZSBmaWVsZCB3 YXMgZGVmZXJyZWQgdW50aWwgYWZ0ZXIgd2UgY291bGQKLWNoZWNrIHdoZXRoZXIgaXQgbWlnaHQg YmUgYSBkaXJlY3RvcnkgbmFtZSAod2hpY2gsIGluIFdpbmRvd3MsIGNvdWxkIHN0YXJ0Ci13aXRo IGEgYmFja3NsYXNoKS4gICBUaGlzIGxpdHRsZSBiaXQgb2YgbWFnaWMgd2FzIG5vdCBhIGdvb2Qg aWRlYSwgbWFnaWMKLWhhcmRseSBldmVyIGlzLiAgSSBjaGFuZ2VkIHRoZSBjb2RlIHRvIGV2YWx1 YXRlIGJvdGggYXMtbmFtZSBmaWVsZHMgaW4gdGhlCi1ub3JtYWwgd2F5LiAgSWYgdGhleSB3YW50 IHRvIHJlY2VpdmUgdG8gYSBkaXJlY3RvcnkgY2FsbGVkICJcJTEiLCB0aGV5J2xsCi1qdXN0IGhh dmUgdG8gc3BlbGwgaXQgZGlmZmVyZW50bHkuICBUaGUgd29ya2Fyb3VuZCBpcyB0byB0dXJuIHRo ZSB3aG9sZQotY29tbWFuZCBpbnRvIGEgbWFjcm8gYW5kIGV2YWx1YXRlIGl0IGJlZm9yZSBleGVj dXRpbmcgaXQsIGUuZy46Ci0KLSAgYXNzaWduIHh4IHJlY2VpdmUgL2FzLW5hbWU6XCUxCi0gIGRv IHh4Ci0KLWNrdXVzNi5jLCAxIEZlYiAyMDA2LgotCi1CdWlsdCBPSyBvbiBGcmVlQlNEIDYuMSBv biBBTUQ2NC4gIEFkanVzdGVkIHNvbWUgY29weXJpZ2h0cyBhbmQgZGF0ZSBzdGFtcHMuCi1ja2Nt YWkuYywgbWFrZWZpbGUsIDggRmViIDIwMDYuCi0KLS0tLSBEZXYuMTIgLS0tCi0KLUZpeGVkIGEg c2lnbmVkL3Vuc2lnbmVkIGNoYXIgd2FybmluZyBpbiB0aGUgbmV3IGJvdW5kc3BhaXIoKSBjYWxs aW5nIGNvZGUKLWluIHRoZSBjb21wYWN0IHN1YnN0cmluZyBub3RhdGlvbiBoYW5kbGVyLiAgY2t1 dXM0LmMsIDkgRmViIDIwMDYuCi0KLVJlbW92ZWQgYSBzcHVyaW91cyBleHRyYSBsaW51eCtvcGVu c3NsIGxhYmVsIGZyb20gdGhlIG1ha2VmaWxlLCBhZGRlZAotc29sYXJpczEwZ182NCBzeW5vbnlt LiAgOSBGZWIgMjAwNi4KLQotU2F0aXNmaWVkIG15c2VsZiB0aGF0IExGUyBpcyBPSyBvbiBTb2xh cmlzIDEwIGkzODYsIGFuZCBJJ20gZ29pbmcgdG8gYXNzdW1lCi1pdCdzIGFsc28gT0sgb24gU29s YXJpcyA5LiAgTWFkZSBMRlMgc3RhbmRhcmQgZm9yIGFsbCBTb2xhcmlzIDkgYW5kIDEwCi1idWls ZHMgKGluY2x1ZGluZyB0aGUgc2VjdXJlIG9uZXMpIGV4Y2VwdCB0aGUgZXhwbGljaXRseSA2NC1i aXQgb25lcywgYW5kCi1tYWRlIHRoZSBwcm92aXNpb25hbCBzb2xhcmlzWFhsZnMgdGFyZ2V0cyBp bnRvIHN5bm9ueW1zLiAgbWFrZWZpbGUsIDkgRmViIDIwMDYuCi0KLS0tLSBEZXYuMTMgLS0tCi0K LUZ1cnRoZXIgYXR0ZW1wdHMgYXQgU1NML1RMUyBtZXNzYWdlIHN1cHByZXNzaW9uIHdoZW4gUVVJ RVQgaXMgT04uCi1ja19zc2wuYywgMTYgRmViIDIwMDYuCi0KLUZyb20gSi5TY290dCBLYXN0ZW46 IChxdW90ZS4uLikgSSBqdXN0IHVwbG9hZGVkIGEgcGF0Y2ggdG8gL2tlcm1pdC9pbmNvbWluZy4K LVRoZSBmaWxlIG5hbWUgaXMgImpzay1wYXRjaC1mb3ItY2t1MjExLmRpZmYiLiAgSSBoYXZlIGFs c28gaW5jbHVkZWQgdGhlCi1wYXRjaCBhcyBBU0NJSSB0ZXh0IGluIHRoaXMgZW1haWwgYmVsb3cu ICBUaGlzIHBhdGNoIG1heSBiZSBhcHBsaWVkIHRvIHRoZQotY2t1MjExLnRhci5neiBzb3VyY2Ug Y29kZSB2aWE6Ci0gIGNkIGNrdTIxMSwgcGF0Y2ggLXAxIDwuLi9qc2stcGF0Y2gtZm9yLWNrdTIx MS5kaWZmCi1UaGUgcGF0Y2ggYWRkcyA0IG5ldyBidWlsZCB0YXJnZXRzOgotICBuZXRic2R3b2Mg LSBhIHN0cmlwcGVkIG5vIGN1cnNlcyB0YXJnZXQgZm9yIGlrc2QgdXNlZC4KLSAgbmV0YnNkc2Ug IC0gc2VjdXJpdHkgZW5oYW5jZWQgdGFyZ2V0IHdpdGggc3JwLCBzc2wsIGFuZCB6bGliLgotICBp cml4NjVnY2MgLSBidWlsZCBvbiBTR0kgSXJpeCA2LjUgcGxhdGZvcm0gdXNpbmcgZ2NjLgotICBp cml4NjVzZSAgLSBzZWN1cml0eSBlbmhhbmNlZCB0YXJnZXQgd2l0aCBzcnAsIHNzbCwgYW5kIHps aWIuCi1UaGUgcGF0Y2ggZml4ZXMgb25lIGJ1aWxkIHRhcmdldDoKLSAgaXJpeDY0Z2NjIC0gVGhl ICItcyIgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgZ2NjIHVuZGVyIElyaXguCi1JIHRoYW5r IGFsbCBvZiB5b3UgaW4gdGhlIEtlcm1pdCBQcm9qZWN0IGZvciBzdWNoIGEgZmluZSB1dGlsaXR5 LiAgSQotcmVjZW50bHkgaGFkIHRvIGdldCBhIDE2IE1CIGZpbGUgb3ZlcnNlYXMgYWNyb3NzIGEg c3BvdHR5IGNvbW11bmljYXRpb25zCi1saW5rIHRvIHJlcGFpciBhIGNvbXB1dGVyIHJlbW90ZWx5 LiAgS2VybWl0IHdhcyB0aGUgb25seSB0aGluZyB0aGF0IGNvdWxkIGRvCi10aGUgam9iLCBzbyBJ IHdhbnRlZCB0byBjb250cmlidXRlIHRoZXNlIHBhdGNoZXMgYmFjayB0byB0aGUgbWFpbnN0cmVh bSB0bwotc2F5IHRoYW5rcy4gIFRoaXMgZGlnaXRhbGx5IHNpZ25lZCBlbWFpbCBpcyBhIGJpbmRp bmcgY29udHJhY3QgdGhhdAotb2ZmaWNpYWxseSBhc3NpZ25zIHRoZSByaWdodHMgdG8gdGhlIHNv dXJjZSBjb2RlIHBhdGNoIChzaG93biBiZWxvdykgdGhhdCBJCi1kZXZlbG9wZWQgdG8gdGhlIEtl cm1pdCBQcm9qZWN0IGF0IENvbHVtYmlhIFVuaXZlcnNpdHkuICguLi5lbmQgcXVvdGUpCi1ja19z c2wuYywgbWFrZWZpbGUsIDIzIEZlYiAyMDA2LgotCi1DaGFuZ2VkIHRoZSBuZXcgTmV0QlNEIHRh cmdldCBuYW1lcyB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIGNvbnZlbnRpb25zCi11c2VkIGlu IG1vc3Qgb3RoZXIgdGFyZ2V0czoKLQotICBuZXRic2R3b2MgLT4gbmV0YnNkbmMKLSAgbmV0YnNk c2UgIC0+IG5ldGJzZCtzc2wrc3JwK3psaWIKLSAgaXJpeDY1c2UgIC0+IGlyaXg2NStzc2wrc3Jw K3psaWIKLQotYW5kIHJlbW92ZWQgb2xkLCBub3cgc3VwZXJmbHVvdXMsIE5ldEJTRCB0YXJnZXRz IChvbGQtbmV0YnNkLCBuZXRic3QxNSwKLW5ldGJzdDE2KSwgbGVhdmluZyBzeW5vbnltIGxhYmVs cyBpbiB0aGVpciBwbGFjZS4gIEFsc28gdXBkYXRlZCAoY3J1ZGVseSkKLXRoZSBMaW51eCB0YXJn ZXQgdmFyaWF0aW9ucyAoY3Vyc2VzIGluc3RlYWQgb2Ygbm9jdXJzZXMsIG5vIGN1cnNlcyBhdCBh bGwpCi10byBiZSAoYXBwcm9wcmlhdGVseSBtb2RpZmllZCkgY29waWVzIG9mIHRoZSBjdXJyZW50 IGxpbnV4IHRhcmdldC4gIEl0IHdvdWxkCi1iZSBuaWNlciB0byBjb21iaW5lIHRoZW0sIGJ1dCB0 aGlzIGdldHMgdGhlIGpvYiBkb25lLiAgbWFrZWZpbGUsIDIzIEZlYiAyMDA2LgotCi0tLS0gRGV2 LjE0IC0tLQotCi1GaXhlZCB0aGUgSEVMUCBjb21tYW5kIHdoZW4gdXNlZCB3aXRoIHRva2VucyBs aWtlIEAsIF4sICMsIGFuZCA7LiAgVGhlIGZpcnN0Ci10d28gaGFkIGJlZW4gb21pdHRlZCBmcm9t IHRoZSB0YWJsZS4gIFRoZSBzZWNvbmQgdHdvIHJlcXVpcmVkIGEgbmV3IHBhdGgKLWludG8gdGhl IGd1dHMgb2YgdGhlIHBhcnNlciwgc2luY2UgY29tbWVudHMgYXJlIG5vcm1hbGx5IHN0cmlwcGVk IGF0IGEgdmVyeQotbG93IGxldmVsLiAgY2t1dXNbcjJdLmMsIGNrdWNtZC5jLCAyNCBGZWIgMjAw Ni4KLQotQnVpbHQgb24gQUlYIDUuMSAoIm1ha2UgYWl4NTEiKSB3aXRob3V0IGluY2lkZW50LiAg VGhlbiBJIHRyaWVkOgotCi0gbWFrZSBhaXg1MSAiS0ZMQUdTPS1EX0xBUkdFRklMRV9TT1VSQ0Ug LURfRklMRV9PRkZTRVRfQklUUz02NCIKLQotVGhpcyBoYWQgbm8gZWZmZWN0LiAgSSBmb3VuZCB0 aGUgcmVsZXZhbnQgZG9jdW1lbnQgYXRoIHRoZSBJQk0gd2Vic2l0ZS4gIEl0Ci1zYXlzIHRvIHVz ZSAtRF9MQVJHRV9GSUxFUyBpbnN0ZWFkLiAgSSBhZGRlZCB0aGlzIHRvIHRoZSBBSVggNC4yIHRh cmdldAotc2luY2UgKGEpIElCTSBzYXlzIGxhcmdlIGZpbGVzIGFyZSBzdXBwb3J0ZWQgYnkgQUlY IDQuMiBhbmQgbGF0ZXIsIGFuZCAoYikKLWFsbCBLZXJtaXQgQUlYIHRhcmdldHMgcGFzdCA0LjIg dXNlIHRoZSA0LjIgb25lLiAgUGx1cyBhIGNsYXVzZSB0byBtYWtlCi1zdXJlIENLX09GRl9UIGlz IGRlZmluZWQgYXBwcm9wcmlhdGVseS4gIGNrY2RlYi5oLCBtYWtlZmlsZSwgNiBNYXIgMjAwNi4K LQotQWRkZWQgYSAzMi1iaXQgYWl4NTErb3BlbnNzbCB0YXJnZXQuICBCdWlsZHMgT0ssIHdvcmtz IGZpbmUgKHRlc3RlZCBhZ2FpbnN0Ci1vdXIgU1NMIFBPUCBzZXJ2ZXIpLiAgVHJpZWQgSSB0cmll ZCBhZGRpbmcgLURfTEFSR0VfRklMRVMuICBJdCBzZWVtcyB0byB3b3JrCi1maW5lLCBzbyB3ZSds bCBrZWVwIGl0LiAgQ2xlYW5lZCB1cCB0aGUgb3RoZXIgYWl4NWJsYWggZW50cmllcyBhIGJpdCBh bHNvLgotbWFrZWZpbGUsIDYgTWFyIDIwMDYuCi0KLUZpeGVzIGZyb20gSi4gU2NvdHQgS2FzdGVu IHRvIHRoZSBJUklYIDYuNCBhbmQgNi41IG1ha2VmaWxlIHRhcmdldHMuICBUaGV5Ci13ZXJlIGJh ZGx5IHdyb25nLiAgbWFrZWZpbGUsIDYgTWFyIDIwMDYuCi0KLVRoZSByZWFzb24gS2VybWl0IHdh cyBsb29waW5nIG9uIGRpcmVjdG9yaWVzIGluIElSSVggd2FzIGEgY2xhc3NpYwotImRvdWJsZS1l bmRlZCBicmVhayIuICBUaGUgbWFrZWZpbGUgdGFyZ2V0cyBmYWlsZWQgdG8gZGVmaW5lIERJUkVO VCBzbwotS2VybWl0IHdhcyBvcGVuL3JlYWQgb24gZGlyZWN0b3JpZXMgcmF0aGVyIHRoYW4gb3Bl bmRpcigpL3JlYWRkaXIoKS4gIEJ1dAotdGhlbiBpdCB3YXMgYWxzbyBmYWlsaW5nIHRvIGFjY291 bnQgZm9yIHRoZSBmYWN0IHRoYXQgcmVhZCgpIHdvdWxkIHJldHVybiAtMQotb24gZXJyb3IuICBU aGUgbWFrZWZpbGUgZml4IGFkZHMgLURESVJFTlQsIGFuZCB0aGUgcmVhZCgpIGNhc2UgaW4gdHJh dmVyc2UoKQotbm93IHByb3Blcmx5IHRlcm1pbmF0ZXMgaXRzIGxvb3Agb24gZXJyb3IuICBja3Vm aW8uYywgNiBNYXIgMjAwNi4KLQotLS0tIERldi4xNCAtLS0KLQotSW4gcmVzcG9uc2UgdG8gYSBj b21wbGFpbnQgdGhhdCBDLUtlcm1pdCB3b3VsZCBub3QgYnVpbGQgb24gSFAtVVggMTEgd2l0aAot T3BlblNTTCwgSSB0cmllZCBpdCBteXNlbGYgb24gYm90aCAxMS4xMS9QQS1SSVNDIGFuZCAxMWkg djIvSXRhbml1bS4gIEl0IGJ1aWx0Ci1PSyBvbiBib3RoIGJ1dCBJIGhhZCB0byBhZGQgYSBuZXcg dGFyZ2V0IChocHV4MTAwMG8rb3BlbnNzbC1ub3psaWIpIGZvciBubwotWmxpYiBzaW5jZSB0aGVz ZSBib3hlcyBkaWQgbm90IGhhdmUgaXQgaW5zdGFsbGVkLiAgbWFrZWZpbGUsIDkgTWFyIDIwMDYu Ci0KLUFkZGVkIE9wZW5TU0wgdmVyc2lvbiBudW1iZXIgZGlzcGxheSB0byBTSE9XIEZFQVRVUkVT LiAgY2t1dXM1LmMsIDkgTWFyIDIwMDYuCi0KLUdhdmluIEdyYWhhbSBub3RpY2VkIHRoYXQgRlRQ IFtNXUdFVCAvREVMRVRFIC9NT1ZFLVRPOiB3YXMgcmVqZWN0ZWQgd2l0aAotIj9Tb3JyeSwgL0RF TEVURSBjb25mbGljdHMgd2l0aCAvTU9WRSBvciAvUkVOQU1FIi4gIFRoaXMgY2hlY2sgYmVsb25n cyBpbiB0aGUKLVBVVCBjb2RlIGJ1dCBub3QgaW4gdGhlIEdFVCBjb2RlLiAgQ29tbWVudGVkIGl0 IG91dCBhbmQgdGVzdGVkIHRoZSByZXN1bHQuCi1UaGUgY29tYmluYXRpb24gaXMgbm93IGFjY2Vw dGVkIGJ1dCB0aGVuIEtlcm1pdCByZWZ1c2VzIHRoZSBpbmNvbWluZyBmaWxlIGFzCi1pZiBpdCBo YWQgYmVlbiBnaXZlbiBhIC9TTUFMTEVSLVRIQU46IG9yIC9MQVJHRVItVEhBTjogc3dpdGNoLCB3 aGljaCBpdCBkaWRuJ3QKLWhhcHBlbi4gIFR1cm5zIG91dCB0aGVyZSB3YXMgb25lIG1vcmUgcGxh Y2Ugd2hlcmUgSSB3YXNuJ3QgaW5pdGlhbGl6aW5nIHRoZQotbmV3ICJ3aWRlIGludCIgbWVtYmVy IG9mIHRoZSBzd2l0Y2gtcGFyc2luZyBwdltdIHN0cnVjdC4gIE9uY2UgdGhpcyB3YXMgZml4ZWQs Ci10aGUgL01PVkUtVE8gcGFydCBzdGlsbCBkaWRuJ3Qgd29yay4gIFR1cm5lZCBvdXQgdGhlIC9E RUxFVEUgY2FzZSB3YXMgcGFydCBvZgotYSBsb25nIGlmLWVsc2UtaWYtZWxzZS0gY2hhaW4sIHdo aWNoIGVmZmVjdGl2ZWx5IG1hZGUgL0RFTEVURSBhbmQgL01PVkUtVE86IG9yCi0vUkVOQU1FLVRP OiBtdXR1YWxseSBleGNsdXNpdmUuICBGaXhlZCB0aGlzLCBub3cgaXQgd29ya3MgZmluZS4gIGNr Y2Z0cC5jLAotMTMgTWFyIDIwMDYuCi0KLUdvdCBhY2Nlc3MgdG8gQUlYIDUuMywgYnVpbHQgdGhl cmUsIGFsbCBPSywgaW5jbHVkaW5nIGxhcmdlIGZpbGVzLiAxMyBNYXIgMjAwNi4KLQotLS0tIERl di4xNiAtLS0KLQotUGF0Y2hlcyBmcm9tIE1hcmsgU2FwaXJvIHRvIHN1cHByZXNzIGdldHNvY2tv cHQoKSBhbmQgZ2V0c29ja25hbWUoKSB3YXJuaW5ncwotaW4gTWFjIE9TIFguICBja2NuZXQuW2No XSwgMTggTWFyIDIwMDYuCi0KLUluIHJlc3BvbnNlIHRvIGEgY29tcGxhaW50IGZyb20gQ2xhcmVu Y2UgRG9sZCwgdHJpZWQgIm1ha2UgcmVkaGF0OSIgKHdoaWNoCi1pcyB0aGUgcmF0aGVyIGRhdGVk IHRhcmdldCB0aGF0IHRyaWVkIHRvIGluY2x1ZGUgYWxsIGZvcm1zIG9mIHNlY3VyaXR5KSBvbgot UkggTGludXggQVM0LjMsIGl0IGZhaWxlZCBtaXNlcmFibHkuICBJIG1hZGUgYSBuZXcgbWFrZWZp bGUgdGFyZ2V0LCByZW1vdmluZwotS2VyYmVyb3MgSVYgYW5kIGdvdCBhIGxvdCBmYXJ0aGVyLiAg QnV0IHRoZW4gaW4gY2tjZnRwLmMsIHRoZSBmb2xsb3dpbmcKLXN0cnVjdCBkZWZpbml0aW9uOgot Ci0gIHN0cnVjdCB7Ci0gICAgICBDT05TVCBnc3NfT0lEX2Rlc2MgKiBDT05TVCAqIG1lY2hfdHlw ZTsKLSAgICAgIGNoYXIgKnNlcnZpY2VfbmFtZTsKLSAgfSBnc3NfdHJpYWxzW10gPSB7Ci0gICAg ICB7ICZja19nc3NfbWVjaF9rcmI1LCAiZnRwIiB9LAotICAgICAgeyAmY2tfZ3NzX21lY2hfa3Ji NSwgImhvc3QiIH0sCi0gIH07Ci0KLXJlZmVycyB0byBhIHZhcmlhYmxlLCBja19nc3NfbWVjaF9r cmI1LCB0aGF0IGlzIG5vdCBkZWZpbmVkIGFueXdoZXJlLiAgVXAKLWFib3ZlLCBob3dldmVyLCBp cyBhIHN0YXRpYyBkZWZpbml0aW9uIGZvciBnc3NfbWVjaF9rcmI1LCBzbyBJIGNoYW5nZWQgdGhl Ci1zdHJ1Y3QgZGVmaW5pdGlvbiB0byBtYXRjaC4gIE5leHQsIGluIGNrdWF0aC5jLCB0aGUgY29t cGlsZXIgY291bGQgbm90IGZpbmQKLXRoZSBjb21fZXJyLmggZmlsZS4gIFR1cm5zIG91dCBpbiBM aW51eCB0aGlzIGlzIGluIGEgc3ViZGlyZWN0b3J5LCBldCwgc28gd2UKLWhhdmUgdG8gYWRkIGEg LUkgY2xhdXNlIHRvIHRoZSBtYWtlZmlsZSB0YXJnZXQgZm9yIHRoaXMuICBNYWRlIGEgdGFyZ2V0 IGZvcgotTGludXgrU1NMIG9ubHkuICBNYWRlIGEgdGFyZ2V0IGZvciBMaW51eCtLcmI1IG9ubHk7 IHRoaXMgcmVxdWlyZWQgbW92aW5nIGFuCi0jaWZkZWYgaW4gY2t1dXM3LmMgdG8gcHJldmVudCBh biB1bmd1YXJkZWQgcmVmZXJlbmNlIHRvIFNTTEVBWV9WRVJTSU9OLgotTmV3IHRhcmdldHM6IGxp bnV4K2tyYjUrc3NsLCBsaW51eCtrcmI1LCBsaW51eCtrcmI1LiAgY2tjZnRwLmMsIGNrdXVzNy5j LAotbWFrZWZpbGUsIDI3IE1hciAyMDA2LiAgCi0KLU5ldyB0YXJnZXRzIG9mIEhQLVVYIDEwLzEx IHdpdGggT3BlblNTTCBmcm9tIFBldGVyRS4gIG1ha2VmaWxlLCAyNyBNYXIgMjAwNi4KLQotQWRk ZWQgbGFyZ2UgZmlsZS9pbnRlZ2VyIHN1cHBvcnQgdG8gU0hPVyBGRUFUVVJFUy4gIGNrdXVzNS5j LCAyNyBNYXIgMjAwNi4KLQotQnVpbHQgT0sgb24gU29sYXJpcyA5IGFuZCAxMCB3aXRoIGdjYyAo c29tZW9uZSB3YXMgY29tcGxhaW5pbmcgdGhhdCB0aGlzCi1kaWRuJ3Qgd29yaywgYnV0IHRoYXQg d2FzIDguMC4yMTEpLgotCi1TdGFydGVkIGJ1aWxkIG9uIGEgU3VuIDMvODAgbWM2ODAzMCB3aXRo IE5ldEJTRCAyLjAgYW5kIGdjYyAzLjMuMy4gIEJ1dCBpdAotZGllZCB3aXRoIGFuIGFzc2VtYmxl ciBlcnJvciBpbiBja2NmbjIuYyAoY29tcGlsZXIgYnVnKS4gIDI3IE1hciAyMDA2LgotCi0tLS0g RGV2LjE3IC0tLQotCi1OZWJCU0QgMi4wIGJ1aWxkIGNvbXBsZXRlZCBieSB0dXJuaW5nIG9mZiBv cHRpbWl6YXRpb24gb24gY2tjZm4yLmMKLSgiS0ZMQUdTPS1PMCIpLiAgUmVzdWx0IHN1cHBvcnRz IDY0LWJpdCBpbnRzIGFuZCwgcHJlc3VtYWJseSwgbGFyZ2UgZmlsZXMuCi11bmFtZSAtcCA9ICJt NjhrIiwgLW0gPSAic3VuMyIuIDI5IE1hciAyMDA2LgotCi1Db3JyZWN0ZWQgYW4gb21pc3Npb24g aW4gYXBwbHlpbmcgUGV0ZXJFJ3MgdXBkYXRlcyB0byB0aGUgSFAtVVggdGFyZ2V0cy4KLW1ha2Vm aWxlLCAyOCBNYXIgMjAwNi4KLQotc29sYXJpczJ4ZytrcmI1K2tyYjQrb3BlbnNzbCtzaGFkb3c6 Ci0KLVRyaWVkIHJlc3VycmVjdGluZyB0aGUgc29sYXJpczJ4ZytrcmI1K2tyYjQrb3BlbnNzbCtz aGFkb3cgdGFyZ2V0LiAgSXQgYXNrcwotdG8gbGluayB3aXRoIGxpYmRlcyBidXQgdGhlcmUgaXMg bm8gbGliZGVzLiAgUmVtb3ZlZCAtbGRlcyBmcm9tIHRoZSB0YXJnZXQsCi1ub3cgYXQgbGVhc3Qg aXQgYnVpbGRzIGFuZCBydW5zIHdhcnQuICBUaGUgY29tcGlsYXRpb24gYmxvd3MgdXAgaW4gY2tj ZnRwLmMKLWZvciBtaXNzaW5nIGhlYWRlciBmaWxlczoKLQotICBja2NmdHAuYzo0NjI6IGtlcmJl cm9zSVYva3JiLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKLSAgY2tjZnRwLmM6NTAwOiBn c3NhcGkvZ3NzYXBpX2dlbmVyaWMuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQotICBja2Nm dHAuYzo1MDE6IGdzc2FwaS9nc3NhcGlfa3JiNS5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5 Ci0KLUdvdCBhIGJpdCBmYXJ0aGVyIGJ5IGFkZGluZyBhcHByb3ByaWF0ZSAtSSdzIGFuZCAtTCdz IHRvIEtGTEFHUyBidXQgaXQgc3RpbGwKLWRpZXMgY29tcGlsaW5nIChvciBsaW5raW5nPykgY2tj ZnRwLmMsIGJ1dCBpdCBkb2Vzbid0IHNheSBleGFjdGx5IHdoeS4gIE9LLAotZGVmZXJyZWQuCi0K LUFkZGVkIFNFVCBTRVhQUkVTU0lPTiBUUlVOQ0FURS1BTEwtUkVTVUxUUyB7IE9OLCBPRkYgfS4g IFRoaXMgY2FuIGJlIHVzZWQKLWZvciBmb3JjZSBpbnRlZ2VyIGFyaXRobWV0aWMgaW4gYW55IGtp bmQgb2YgY2FsY3VsYXRpb24gdGhhdCByZXF1aXJlcyBpdCwKLXN1Y2ggYXMgZGF0ZSBjYWxjdWxh dGlvbnMuICBUaGlzIGlzIGEgZ2xvYmFsIHNldHRpbmcsIG5vdCBvbiBhbnkga2luZCBvZgotc3Rh Y2suICBBbHNvLCB1cGRhdGVkIFNIT1cgU0VYUCBhbmQgYWRkZWQgSEVMUCBTRVQgU0VYUCB3aGlj aCB3YXNuJ3QgdGhlcmUKLWJlZm9yZS4gIGNrdXVzWzIzXS5jLCAzMCBNYXIgMjAwNi4KLQotVG8g bWFrZSB0aGUgUkVOQU1FIGNvbW1hbmQgYSBiaXQgbW9yZSB1c2VmdWwsIG5lZWQgdG8gYWRkIHNv bWUgc3dpdGNoZXMuCi1CdXQgaXQgc2hhcmVzIGEgc3dpdGNoIHRhYmxlLCBxdnN3dGFiW10sIHdp dGggc29tZSBvdGhlciBjb21tYW5kcy4gIEJyb2tlCi10aGlzIG9mZiBpbnRvIGl0cyBvd24gc3dp dGNoIHRhYmxlLiAgY2t1dXM2LmMsIDE3IEFwciAyMDA2LgotCi1BZGRlZCBSRU5BTUUgc3dpdGNo IHZhbHVlcyB0aGF0IGNhbiBiZSB1c2VkIGluIHRoZSBzYW1lIHRhYmxlIHdpdGggdGhlIERFTEVU RQotc3dpdGNoIHZhbHVlcywgd2hpY2ggYXJlIHNoYXJlZCBieSBtYW55IGNvbW1hbmRzLiAgY2t1 dXNyLmgsIDE3IEFwciAyMDA2LgotCi1EaXNjb3ZlcmVkIHRoYXQgdGhlIFJFTkFNRSBjb21tYW5k IGNvdWxkIGJlIGVudGVyZWQgd2l0aG91dCBhbnkgYXJndW1lbnRzCi1hbmQgaXQgd291bGQgc3Rp bGwgc3VjY2VlZC4gIEZpeGVkIGluIGRvcmVuYW0oKTogY2t1dXM2LmMsIDE3IEFwciAyMDA2Lgot Ci1BZGRlZCBwYXJzaW5nIGZvciBSRU5BTUUgL1VQUEVSOm9wdGlvbiAodG8gdXBwZXJjYXNlIHRo ZSBmaWxlIG5hbWUocykpLAotL0xPV0VSOm9wdGlvbiAodG8gbG93ZXJjYXNlKSwgYW5kIC9SRVBM QUNFOnt7czF9e3MyfX0gKHRvIGRvIHN0cmluZwotcmVwbGFjZW1lbnQgb24gdGhlIGZpbGVuYW1l KHMpKSwgYnV0IG5vdCB0aGUgc2VtYW50aWNzLiAgV2hlbiBhbnkgb2YgdGhlc2UKLXN3aXRjaGVz IGlzIGdpdmVuLCB0aGUgdGFyZ2V0ICgidG8iKSBuYW1lIGlzIG5vdCBwYXJzZWQ7IHRoZXkgYWN0 IG9uIHRoZQotc291cmNlIG5hbWUuICBUaGUgL0xPV0VSOiBzd2l0Y2ggdGFrZXMga2V5d29yZCBh cmdzIHRvIHNwZWNpZnkgd2hldGhlciBpdAotc2hvdWxkIGFjdCBvbmx5IG9ubHkgZmlsZXMgdGhh dCBoYXZlIGFsbCBVUFBFUiBjYXNlIGxhdHRlcnMsIG9yIG9uIEFMTCBmaWxlcwotKGkuZS4sIGlu Y2x1ZGluZyBmaWxlcyB3aXRoIG1peGVkLWNhc2UgbmFtZXMpOyBzaW1pbGFybHkgZm9yIHRoZSAv VVBQRVI6Ci1zd2l0Y2guICBUaGVyZSBpcyBzb21lIGNyZWF0aXZlIHBhcnNpbmcgYWxsb3dpbmcg dGhlc2UgdG8gYmUgZ2l2ZW4gd2l0aCBvcgotd2l0aG91dCBhIGNvbG9uIGFuZCBrZXl3b3JkIGFy Z3VtZW50LCB3aGljaCB3b3JrcyBmaW5lIGV4Y2VwdCBpZiB5b3UgaW5jbHVkZQotdGhlIGNvbG9u IGJ1dCBubyBhcmd1bWVudCwgZXhlY3V0ZSB0aGUgY29tbWFuZCAod2hpY2ggd29ya3MgZmluZSks IGFuZCB0aGVuCi1yZWNhbGwgdGhlIGNvbW1hbmQuICBJIGhhdmVuJ3QgeWV0IGRlY2lkZWQgYWJv dXQgdGhlIGludGVyYWN0aW9uIGFtb25nIHRoZXNlCi1zd2l0Y2hlcy4gIENsZWFybHkgaWYgL1VQ UEVSIGlzIGdpdmVuIGFmdGVyIC9MT1dFUiwgaXQgb3ZlcnJpZGVzLiAgQnV0IGlmCi0vVVBQRVIg KG9yIC9MT1dFUikgaXMgZ2l2ZW4gd2l0aCAvUkVQTEFDRSwgd2hhdCBzaG91bGQgaGFwcGVuPyAg Y2t1dXM2LmMsCi0xNyBBcHIgMjAwNi4KLQotRmlsbGVkIGluIGFjdGlvbnMgZm9yIFJFTkFNRSAv VVBQRVI6IGFuZCAvTE9XRVI6IGZvciB0aGUgc2luZ2xlIGZpbGUgY2FzZSwKLWFuZCB0ZXN0ZWQg YWxsIGNvbWJpbmF0aW9ucyBvZiBzd2l0Y2ggdmFsdWVzIGFuZCBmaWxlbmFtZSBjb25maWd1cmF0 aW9ucy4KLU9uY2UgdGhhdCB3YXMgT0ssIG1vdmVkIHRoZSBjb2RlIG91dCBpbnRvIGEgc2VwYXJh dGUgcm91dGluZSwgcmVuYW1lb25lKCksCi1hbmQgdGhlbiBjYWxsZWQgaXQgZnJvbSBib3RoIHRo ZSBzaW5nbGUtZmlsZSBjYXNlIGFuZCB0aGUgbXVsdGlmaWxlIGNhc2UuCi1ja3V1czYuYywgMTkg QXByIDIwMDYuCi0KLUFkZGVkIFJFTkFNRSAvU0lNVUxBVEUuICBGaWxsZWQgaW4gdGhlIGNvZGUg Zm9yIHN0cmluZyByZXBsYWNlbWVudCwgbmVlZHMKLXRlc3RpbmcuICBja3V1czYuYywgMjAgQXBy IDIwMDYuCi0KLUNoYW5nZWQgL1JFUExBQ0Ugb3B0aW9ucyB0byBhbGxvdyBhIG5lZ2F0aXZlIG51 bWJlciB0byBzcGVjaWZ5IGFuIG9jY3VycmVuY2UKLWZyb20gdGhlIHJpZ2h0LCBzbyAtMSBtZWFu cyB0aGUgbGFzdCBvY2N1cnJlbmNlLCAtMiBtZWFucyB0aGUgbmV4dC10by1sYXN0LAotZXRjLiAg Y2t1dXM2LmMsIDI0IEFwciAyMDA2LgotCi1BZGRlZCBSRU5BTUUgL0NPTExJU0lPTjp7T1ZFUldS SVRFLFBST0NFRUQsRkFJTH0uICBUaGlzIGlzIGltcGxlbWVudGVkIGJ1dAotbm90IHRlc3RlZC4g IGNrdXVzNi5jLCAyNCBBcHIgMjAwNi4KLQotV29ya2VkIG9uIFJFTkFNRSAvQ09MTElTSU9OOkZB SUwuICBJIGRlY2lkZWQgaXQgd2FzIGxlc3MgdGhhbiB1c2VmdWwgdG8gLi4uCi0KLUFkZGVkIFNF VCBSRU5BTUUgeyBDT0xMSVNJT04sIExJU1QgfSB0byBsZXQgdXNlciBjaGFuZ2UgZGVmYXVsdCBj b2xsaXNpb24KLWFuZCBsaXN0aW5nIGFjdGlvbnMuICBja3V1c3IuW2NoXSwgY2t1dXNbMzZdLmMs IDI1IEFwciAyMDA2LgotCi1FeHBlcmltZW50ZWQgd2l0aCBwYXJzaW5nIGZvciAvQ09OVkVSVDpj c2V0MTpjc2V0Mi4gIFRoZSBwcm9ibGVtIGhlcmUgaXMKLXRoYXQgdGhlcmUgaXMgbm8gc3RyYWln aHRmb3J3YXJkIHdheSBmb3IgYSBzd2l0Y2ggdG8gaGF2ZSBtdWx0aXBsZQotYXJndW1lbnRzLiAg T3IgaXMgdGhlcmUuLi4/ICBJZiBJIHBhcnNlIGNzZXQxIHdpdGggY21zd2koKSByYXRoZXIgdGhh bgotY21rZXkoKSwgaXQgYWxtb3N0IHdvcmtzOyB0aGUgb25seSBwcm9ibGVtIGlzIHRoYXQgdGhl IGNoYXJhY3Rlci1zZXQKLWtleXdvcmRzIGRvbid0IGhhdmUgQ01fQVJHIHNldCwgc28gdGhleSBk b24ndCBrbm93IHRvIHN0b3Agb24sIGFuZCBpZ25vcmUsIGEKLWNvbG9uLiAgSWYgSSBtYWtlIGEg Y29weSBvZiB0aGUgdGFibGUgYW5kIHNldCBDTV9BUkcgaW4gdGhlIGZsYWdzIGZpZWxkIGZvcgot ZWFjaCBrZXl3b3JkLCBpdCB3b3JrcyBmaW5lOiBpZiBJIFRhYiBpbiB0aGUgZmlyc3QgbmFtZSwg aXQgZmlsbHMgaXRzZWxmCi1vdXQsIHN1cHBsaWVzIGEgY29sb24sIGFuZCB3YWl0cyBmb3IgdGhl IHNlY29uZCBuYW1lLiAgU28gaW4gdGhlIGNvZGUsIHRoZQotZmlyc3QgdGltZSB0aGF0IFJFTkFN RSAvQ09OVkVSVCBpcyBpbnZva2VkLCBJIHB1dCBjb2RlIHRvIGNvcHkgZmNzdGFiW10gYW5kCi1z ZXQgQ01fQVJHIGluIGVhY2ggZmxhZ3MgZmllbGQuICBXb3JrcyBmaW5lLCBhbmQgbm93IHdlIGtu b3cgaG93IHRvIG1ha2UgYQotc3dpdGNoIHRoYXQgdGFrZXMgbXVsdGlwbGUgYXJndW1lbnRzLiAg Y2t1dXM2LmMsIDI0IEFwciAyMDA2LgotCi1JIHRob3VnaHQgSSBoYWQgYSBmdW5jdGlvbiB0byBj b252ZXJ0IHRoZSBjaGFyYWN0ZXIgc2V0IG9mIGEgc3RyaW5nIGJ1dCBJCi1kb24ndCwgc28gYWN0 dWFsbHkgaW1wbGVtZW50aW5nIC9DT05WRVJUOiB3aWxsIGJlIGRpZmZpY3VsdC4KLQotQWN0dWFs bHkgdGhlIHBhcnNpbmcgd2Fzbid0IHRoYXQgZWFzeSBlaXRoZXIuICBJdCB3b3JrcyBPSyBpbnRl cmFjdGl2ZWx5LAotYnV0IG5vdCBpbiBhIFRBS0UgZmlsZS4gIFRvIG1ha2UgYSBsb25nIHN0b3J5 IHNob3J0LCBJIGhhZCB0byBjaGFuZ2UKLWd0d29yZCgpIGFuZCBjbWtleTIoKSB0byBub3QgcmVx dWlyZSAiLyIgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHN3aXRjaCwgYW5kCi10aGVuIHRvIHBhcnNl IGFyZ3VtZW50cy10aGF0LWFyZS1mb2xsb3dlZC1ieS1vdGhlci1hcmd1bWVudHMgYXMgaWYgdGhl eSB3ZXJlCi1zd2l0Y2hlcywgc28gdGhhdCB0aGV5IGNhbiBlbmQgd2l0aCBjb2xvbiByYXRoZXIg dGhhbiBzcGFjZS4gIFRoaXMgbWlnaHQKLXNlZW0gZGFuZ2Vyb3VzLCBidXQgc3dpdGNoZXMgYWx3 YXlzIGhhdmUgIi8iIGF0IHRoZSBiZWdpbm5pbmcsIHNvIHRoZSBjaGVjawotaXMgc3VwZXJmbHVv dXMuICBja3VjbWQuYywgMjYgQXByIDIwMDYuCi0KLUJhY2sgdG8gL0NPTlZFUlQuLi4gIE9uY2Ug SSB3YXMgYWJsZSB0byBnZXQgdGhlIGNvZGUgdG8gY2FsbCBjdnRzdHJpbmcoKSBJCi13YXMgYWJs ZSB0byBkZWJ1ZyBpdCAoYXQgZmlyc3QgaXQgd2FzIHNraXBwaW5nIGV2ZXJ5IHNlY29uZCBjaGFy YWN0ZXIpLiAgQW5kCi1ub3cgd2UgaGF2ZSBhIGdlbmVyYWwtcHVycG9zZSBzdHJpbmctdHJhbnNs YXRpbmcgZnVuY3Rpb24gd2UgY2FuIGNhbGwgZnJvbQotYW55d2hlcmUuICBSZXF1aXJlcyB0aGF0 IEMtS2VybWl0IGJlIGJ1aWx0IHdpdGggVW5pY29kZSBzdXBwb3J0LgotY2t1dXM2LmMsIDI2IEFw ciAyMDA2LgotCi1BZGRlZCBTSE9XIFJFTkFNRS4gIGNrdXVzci5oLCBja3V1c1tyNV0uYywgMjYg QXByIDIwMDYuCi0KLUNvbmRpdGlvbmFsaXplZCBzb21lIFVuaXgvV2luZG93cyBhc3N1bXB0aW9u cyBpbiByZW5hbWVvbmUoKSBzbyB0aGUgY29kZQotY291bGQgd29yayBpbiBWTVMuICBja3V1czYu YywgMiBNYXkgMjAwNi4KLQotQWRkZWQgUkVOQU1FIC9GSVhTUEFDRVMgdG8gY2hhbmdlIGFsbCBz cGFjZXMgaW4gdGhlIGZpbGVuYW1lKHMpIHRvCi11bmRlcnNjb3JlIG9yIGFueSBvdGhlciBjaGFy YWN0ZXIgb3Igc3RyaW5nIHRoYXQgaXMgZ2l2ZW4uICBUaGlzIGlzIGp1c3QgYQotc3BlY2lhbCBj YXNlIG9mIFJFTkFNRSAvUkVQTEFDRTp7eyB9e3h9fSB3aXRoIGVhc2llciBzeW50YXguCi1ja3V1 c3IuaCwgY2t1dXM2LmMsIDIgTWF5IDIwMDYuCi0KLUFkZGVkIGFuICJhbGwtYnV0IiBjb250cm9s IHRvIHRoZSAvUkVQTEFDRSBvcHRpb25zOgotL1JFUExBQ0U6e3sufXtffXt+MX19IG1lYW5zIHJl cGxhY2UgYWxsIGJ1dCB0aGUgZmlyc3QgKHRoaXMgb25lIHdvcmtzKTsKLS9SRVBMQUNFOnt7Ln17 X317fi0xfX0gbWVhbnMgcmVwbGFjZSBhbGwgYnV0IHRoZSBsYXN0ICh0aGlzIG9uZSBub3QgeWV0 KS4KLWNrdXVzNi5jLCAyIE1heSAyMDA2LgotCi1GaWxsZWQgaW4gdGhlIHNlY29uZCBvbmUgKCJh bGwgYnV0IiB0aGUgZ2l2ZW4gb2NjdXJyZW5jZSkuICBUaGUgYWxnb3JpdGhtIGlzCi1zaW1wbHkg dG8gcmV2ZXJzZSB0aGUgdGhyZWUgc3RyaW5ncyBhbmQgdGhlbiB1c2UgdGhlIHNhbWUgY29kZSBh cyB3ZSB1c2UgaW4KLXRoZSBsZWZ0LXJpZ2h0LWNhc2UsIGFuZCB0aGVuIHVucmV2ZXJzZSB0aGUg cmVzdWx0LiAgQXQgZmlyc3QgSSB1c2VkCi15eXN0cmluZygpIGZvciB0aGlzIGJ1dCB5aWtlcywg d2hhdCBhIGJhZCBkZXNpZ24hICBTbyBJIG1hZGUgYSBiZXR0ZXIKLXN0cmluZy1yZXZlcnNhbCBy b3V0aW5lLCBnbmlydHMoKSwgZm9yIHRoaXMgKGx1Y2tpbHkgeXlzdHJpbmcoKSBpcyBvbmx5IHVz ZWQKLWluIG9uZSBwbGFjZSwgZm9yIHdoaWNoIGl0cyBkZXNpZ24gaXMgYXBwcm9wcmlhdGUpLiBj a3V1czYuYywgMy00IE1heSAyMDA2LgotCi1BZGRlZCBjb2RlIHRvIGhhbmRsZSB0aGUgY2FzZSB3 aGVyZSB0aGUgZmlsZSBiZWluZyByZW5hbWVkIGluY2x1ZGVzIGEgcGF0aAotc3BlY2lmaWNhdGlv bi4gIEluIHRoaXMgY2FzZSB3ZSBzZXBhcmF0ZSB0aGUgcGF0aCwgYXBwbHkgdGhlIHJlbmFtaW5n Ci1mdW5jdGlvbnMgdG8gdGhlIGZpbGVuYW1lIG9ubHksIGFuZCB0aGVuIGF0IHRoZSBlbmQgcmVq b2luIHRoZSBvcmlnaW5hbAotZmlsZW5hbWUgd2l0aCB0aGUgcGF0aCwgYW5kIGpvaW4gdGhlIG5l dyBuYW1lIHdpdGggc2FtZSBwYXRoIG9yLCBpZiBhCi1kZXN0aW5hdGlvbiBkaXJlY3Rvcnkgd2Fz IGdpdmVuLCB3aXRoIHRoYXQuICBja3V1czYuYywgNCBNYXkgMjAwNi4KLQotQWRkZWQgSEVMUCBT RVQgUkVOQU1FIGFuZCB1cGRhdGVkIEhFTFAgUkVOQU1FLiAgY2t1dXMyLmMsIDQgTWF5IDIwMDYu Ci0KLSJUb20gVmlvbGluIiAoVG9tIEhhbnNlbikgbm90aWNlZCB0aGF0IHRoZSBmaXJzdCB0aW1l IHlvdSBGT1BFTiBhIGZpbGUsCi1LZXJtaXQncyBtZW1vcnkgY29uc3VtcHRpb24gZ29lcyB3YXkg dXAuICBJbiBmYWN0IHRoZXJlJ3MgYSB3YXJuaW5nIHRvIHRoYXQKLWVmZmVjdCBpbiB0aGUgY29k ZSwgd2hlcmUsIHVwb24gZmlyc3Qgb3BlbiwgYSBwb3RlbnRpYWxseSBiaWcgYXJyYXkgb2YKLXBv dGVudGlhbGx5IGJpZyBzdHJ1Y3RzIGlzIGFsbG9jYXRlZC4gIEkgcmV3cm90ZSB0aGUgY29kZSB0 byBhbGxvY2F0ZSBlYWNoCi1hcnJheSBtZW1iZXIgKHN0cnVjdCBja3pfZmlsZSkgYXMgbmVlZGVk LCBpLmUuIHdoZW4gYSBmaWxlIGlzIG9wZW5lZCwgYW5kIHRvCi1mcmVlIGl0IHdoZW4gdGhlIGZp bGUgaXMgY2xvc2VkIChvciB0aGUgb3BlbiBmYWlscykuICBUaGlzIHdhcyBhY3R1YWxseQotcXVp dGUgYSBsb3Qgb2Ygd29yaywgd2hpY2ggaXMgd2h5IEkgZGlkbid0IGRvIGl0IHRoZSBmaXJzdCB0 aW1lIGFyb3VuZDoKLWV2ZXJ5IHNpbmdsZSAiLiIgIGhhZCB0byBiZSBjaGFuZ2VkIHRvICItPiIu ICBFdmVyeSBjaGVjayBmb3IgYSB2YWxpZAotY2hhbm5lbCBmaXJzdCBoYWQgdG8gY2hlY2sgaWYg dGhlIGNoYW5uZWwncyBzdHJ1Y3Qgd2FzIGFsbG9jYXRlZCBhbmQgZXZlcnkKLW90aGVyIHJlZmVy ZW5jZSB0byB6X2ZpbGVbaV0tPmFueXRoaW5nIGhhZCB0byBiZSBwcmVjaGVja2VkIHRoYXQgel9m aWxlW2ldCi13YXMgbm90IGEgTlVMTCBwb2ludGVyLiAgQWxzbyBJIG1hZGUgc29tZSBpbXByb3Zl bWVudHMgdG8gRklMRSBTVEFUVVMsIGFuZCBJCi1maXhlZCBGSUxFIENMT1NFIHRvIGRlZmF1bHQg dGhlIGNoYW5uZWwgbnVtYmVyIGlmIG9ubHkgb25lIGNoYW5uZWwgd2FzIG9wZW4sCi1hcyBJIGRp ZCBmb3IgRklMRSBTVEFUVVMgYSB3aGlsZSBiYWNrLiAgY2t1dXM3LmMsIENpbmNvIGRlIG1heW8g MjAwNi4KLQotUmFuIG15IG9sZCBCVUlMRFMgc2NyaXB0IHRoYXQgYnVpbGRzIEMtS2VybWl0IHdp dGggYWJvdXQgMTAwIGRpZmZlcmVudAotY29tYmluYXRpb25zIG9mIGZlYXR1cmUtc2VsZWN0aW9u IHN3aXRjaGVzLiAgRml4ZWQgYSBmZXcgc21hbGwgZ2xpdGNoZXMgc28KLW5vdyB0aGV5IGFsbCBi dWlsZCBPSyAoZXhjZXB0IGNhbid0IGRvIE5PQU5TSSBidWlsZHMgYW55IG1vcmUgb24gcmVjZW50 Ci1MaW51eGVzIGJlY2F1c2Ugb2YgdmFyYXJncygpKS4gIGNrdXVzMy5jLCBja3V1czUuYywgY2t1 dXM2LmMsIGNrdXVzNy5jLAotY2t1Y21kLmMsIGNrY2Zucy5jLCA2IE1heSAyMDA2LgotCi1GaXhl ZCBSRU5BTUUgL0xPV0VSIGFuZCAvVVBQRVIsIHdoZW4gZ2l2ZW4gd2l0aCBubyBjb2xvbiBvciBh cmd1bWVudCwgdG8KLWRlZmF1bHQgdG8gQUxMLiAgY2t1dXM2LmMsIDEzIE1heSAyMDA2LgotCi1C dWlsdCBvbiBWTVMgNy4yLTEsIHRlc3RlZCBuZXcgUkVOQU1FIGNvbW1hbmQgdGhlcmU7IHNlZW1z IHRvIGJlIE9LLgotMTMgTWF5IDIwMDYuCi0KLS0tLSBEZXYuMTggLS0tCi0KLUkgd2FudGVkIHRv IHRlc3QgbGFyZ2UgZmlsZXMgYWdhaW5zdCBSRVNFTkQgYnV0IEkgZG9uJ3QgaGF2ZSBhY2Nlc3Mg dG8gYW55Ci1zeXN0ZW0gdGhhdCBjYW4gcnVuIEMtS2VybWl0IGFuZCB0aGF0IGFsc28gaGFzIGVu b3VnaCBzcGFjZSBmb3IgYSBsYXJnZQotZmlsZS4gIEkgY3JlYXRlZCBhICJmYWtlIiBsYXJnZSBm aWxlIG9uIExpbnV4ICgzRyBob2xlIHBsdXMgMSBieXRlKSwgYW5kCi1zZW50IGl0IG92ZXIgYSBs b2NhbGhvc3QgY29ubmVjdGlvbiwgYW5kIGludGVycnVwdGVkIGl0IHJlcGVhdGVkbHkgYW5kIHRo ZW4KLWluaXRpYXRlZCBhIFJFU0VORCBhdCB0aGUgc2VuZGVyLiAgSW4gZWFjaCBjYXNlLCBpdCBw aWNrZWQgdXAgd2hlcmUgaXQgbGVmdAotb2ZmLiAgQnV0IGJlZm9yZSB0aGUgMkcgYm91bmRhcnkg d2FzIGNyb3NzZWQgdGhlIGRpc2sgZmlsbGVkIHVwLgotSW5jb25jbHVzaXZlLiAgMTQgTWF5IDIw MDYuCi0KLVBldGVyRSBnb3QgYSB3YXJuaW5nIGluIHRoZSBuZXcgRklMRSBPUEVOIGNvZGUgd2hl biBidWlsZGluZyBpbiBIUC1VWCA5LgotSSBhZGRlZCBhIGNhc3QsIGJ1aWx0IG9uIEhQLVVYIDEx LCBubyBtb3JlIGNvbXBsYWludC4gIEhvd2V2ZXIgdGhlcmUKLWFyZSB3YXJuaW5ncyBhYm91dCBp bnRlcm5hbCB2cyBleHRlcm5hbCBiaW5kaW5ncyBvZiBzZW5kcGF0aCBhbmQgc2VuZGZpbGUKLWlu IGV2ZXJ5IG1vZHVsZS4gIFRvbyBiYWQsIHRoZXNlIGFyZSBub3QgS2VybWl0IHRva2VucywgaXQn cyBhIGNvbmZsaWN0IGluCi1IUCdzIGhlYWRlciBmaWxlcy4gIE1hcmMgU2FwaXJvIGRvZXNuJ3Qg c2VlIHRoZW07IHByb2JhYmx5IGl0J3Mgc29tZXRoaW5nCi1vbiB0aGUgSFAgdGVzdGRyaXZlIHNp dGUuICBja3V1czcuYywgMTcgTWF5IDIwMDYuCi0KLUZpeGVkIHRoZSB0cnU2NC01MWIrb3BlbnNz bCB0YXJnZXQgLS0gdGhlIHRlcm1pbmF0aW5nIGRvdWJsZXF1b3RlIG9mIEtGTEFHUwotd2FzIG1p c3NpbmcgLS0gYW5kIGFsc28gdGhlIG9zZiB0YXJnZXQsIHdoaWNoIGZhaWxlZCB0byBpbXBvcnQg dGhlIExJQlMKLWRlZmluaXRpb24gZnJvbSB3aGF0ZXZlciBvdGhlciB0YXJnZXQgaW52b2tlZCBp dC4gIE5vdyB0aGUgU1NMIGJ1aWxkIGdvZXMgT0sKLW9uIFRydTY0IDUuMUIuICBSZXBsYWNlZCB4 LnRhci56IGluIHRoZSBkb3dubG9hZCBhcmVhcyB3aXRob3V0IGRlY2xhcmluZyBhCi1uZXcgRGV2 IG51bWJlci4gIFRoZSBuZXcgb25lIGhhcyBhIG1ha2VmaWxlIHdpdGggdG9kYXkncyBkYXRlLiAg U29mdHdhcmUKLWVuZ2luZWVyaW5nIGF0IGl0cyBiZXN0ISAgbWFrZWZpbGUsIDE4IE1heSAyMDA2 LgotCi1TY290dCBLYXN0ZW4gbm90ZWQgdGhhdCB0aGUgZXN0aW1hdGVkLXRpbWUtcmVtYWluaW5n IGNhbGN1bGF0aW9uIHdvdWxkIGdvCi1ib25rZXJzIG9uIExGUyBzeXN0ZW1zIHdoZW4gUkVTRU5E aW5nIGEgbGFyZ2UgZmlsZS4gIEl0IGxvb2tzIGxpa2UgdGhlCi1zaG9jcHMoKSBhbmQgc2hvZXRs KCkgZnVuY3Rpb25zIGVzY2FwZWQgdGhlIENLX09GRl9UIGNvbnZlcnNpb24uICBJIG1hZGUKLXdo YXQgc2VlbWVkIHRvIGJlIHRoZSByaWdodCBhZGp1c3RtZW50cywgYW5kIHRoZW4gd2FzIGx1Y2t5 IGVub3VnaCB0byBmaW5kIGEKLWNvbXB1dGVyIHRoYXQgaGFkIGVub3VnaCBmcmVlIGRpc2sgc3Bh Y2UgZm9yIG1lIHRvIHNlbmQgYSBsYXJnZSBmaWxlLAotaW50ZXJydXB0IGl0IHNldmVyYWwgdGlt ZXMsIHJlc2VuZCBpdCwgYWxsIHNlZW1zIHRvIGJlIE9LLiAgMjggTWF5IDIwMDYuCi1MYXRlciBT Y290dCB2ZXJpZmllZCB0aGVzZSBjaGFuZ2VzIGluZGVwZW5kZW50bHkgZm9yIExpbnV4LCBidXQg dGhlIHByb2JsZW1zCi1pbiBJUklYIHJlbWFpbi4KLQotUGF0Y2hlcyBmcm9tIFNjb3R0IEthc3Rl biBmb3IgbGFyZ2UgZmlsZXMgb24gSVJJWCA2LjU6IGNrY2RlYi5oLCBtYWtlZmlsZSwKLTEyIEp1 biAyMDA2LgotCi0tLS0gRGV2LjE5IC0tLQotCi1BZGRlZCBhIG5ldyBmdW5jdGlvbiBmb3IgZGVh bGluZyB3aXRoIEpQR3MgYW5kIEdJRnM6Ci0KLVxmcGljdHVyZShmaWxlbmFtZSwmYSkKLSAgcmV0 dXJucyAwIGlmIGZpbGUgbm90IHJlY29nbml6ZWQgb3IgY2FuJ3QgYmUgb3BlbmVkOwotICByZXR1 cm5zIDEgaWYgbGFuZHNjYXBlLCAyIGlmIHBvcnRyYWl0IG9yIHNxdWFyZS4KLSAgSWYgYXJyYXkg Z2l2ZW4sIGVsZW1lbnQgMSBpcyB3aWR0aCwgZWxlbWVudCAyIGlzIGhlaWdodC4KLQotY2t1dXNy LmgsIGNrdXVzNC5jLCAxOSBKdW4gMjAwNi4KLQotU2NvdHQgS2FzdGVuIHJlcG9ydHMgdGhhdCB0 aGUgRlRQIGNsaWVudCBjYW4gdHJhbnNmZXIgbGFyZ2UgZmlsZXMgT0ssIGF0Ci1sZWFzdCBpbiBM aW51eCwgYnV0IGhhcyB0cm91YmxlIHdpdGggcmVjb3Zlcnk6Ci0KLSAuIEtlcm1pdCB0YWtlcyBh IHZlcnkgbG9uZyB0aW1lIHRvIHN0YXJ0IHRoZSB0cmFuc2Zlciwgc29tZXRpbWVzIG92ZXIKLSAg IDMwIG1pbnV0ZXMuICBTdXNwZWN0IHRoZSBmdHAgc2VydmVyIGlzIGNvdW50aW5nIHRoZSBieXRl cyBpbiBhIGxvbmcgZmlsZT8KLSAgIE9yIG1heWJlIGl0J3MgYSB0ZXh0LW1vZGUgdHJhbnNmZXIg YW5kIGl0J3MgY291bnRpbmcgdGhlIGxpbmVzPyAgUHJvYmFibHkKLSAgIGluIHJlc3BvbnNlIHRv IEtlcm1pdCdzIFNJWkUgY29tbWFuZC4KLQotIC4gVGhlIHNpemUgc2hvd24gaW4gdGhlIEZUIGRp c3BsYXkgaXMgd3JvbmcgYnkgYSByYW5kb20gYW1vdW50LiAgQW5kIG9mCi0gICBjb3Vyc2Ugc28g YXJlIHRoZSBwcm9ncmVzcyBiYXIsIHBlcmNlbnQgZG9uZSwgYW5kIHRpbWUgcmVtYWluaW5nLgot Ci0gLiBUaGUgZmlsZSwgaG93ZXZlciwgaXMgdHJhbnNmZXJyZWQgY29ycmVjdGx5LiAgUkVHRVQg d29ya3MgY29ycmVjdGx5IHRvby4KLQotSSB0cmllZCBzZXR0aW5nIHVwIGEgdGVzdCBzY2VuYXJp byBsb2NhbGx5IGJ1dCBvdXIgU29sYXJpcyBGVFAgc2VydmVyIGRvZXMKLW5vdCBzdXBwb3J0IGxh cmdlIGZpbGVzOgotCi0gIEZUUCBTRU5UIFtTSVpFIEJJR0ZJTEVdCi0gIEZUUCBSQ1ZEIFs1NTAg QklHRklMRTogbm90IGEgcGxhaW4gZmlsZS5dCi0gIEZUUCBTRU5UIFtQQVNWXQotICBGVFAgUkNW RCBbMjI3IEVudGVyaW5nIFBhc3NpdmUgTW9kZSAoMTI4LDU5LDQ4LDI0LDI0NiwzNyldCi0gIEZU UCBTRU5UIFtSRVRSIEJJR0ZJTEVdCi0gIEZUUCBSQ1ZEIFs1NTAgQklHRklMRTogVmFsdWUgdG9v IGxhcmdlIGZvciBkZWZpbmVkIGRhdGEgdHlwZS5dCi0KLUNyZWF0ZWQgdGhlIHNhbWUgM0dCIG9u IGEgVHJ1NjQgVW5peCBzeXN0ZW0gdGhhdCBhbGxvd3MgRlRQIGFjY2Vzcy4gIE1hZGUKLXRoZSBj b25uZWN0aW9uIGZyb20gQy1LZXJtaXQgb24gU29sYXJpcyAoMzItYml0IHdpdGggTEZTKToKLQot ICAxNjo0NjoxMi45MDggRlRQIFNFTlQgW1NJWkUgQklHRklMRV0KLSAgMTY6NDY6MTIuOTQ3IEZU UCBSQ1ZEIFsyMTMgMzAwMDAwMDAwMV0KLQotTm90ZSB0aGF0IGl0IHRha2VzIGxlc3MgdGhhbiBo YWxmIGEgc2Vjb25kIHRvIGdldCB0aGUgcmVwbHkuICBOb3cgSSBzdGFydAotdGhlIGRvd25sb2Fk IGFuZCB0aGVuIGludGVycnVwdCBpdCBhdCBhYm91dCAyJToKLQotICAxNjo0NjoxMi45NzkgRlRQ IFNFTlQgW1RZUEUgSV0KLSAgMTY6NDY6MTMuMTc0IEZUUCBSQ1ZEIFsyMDAgVHlwZSBzZXQgdG8g SS5dCi0gIDE2OjQ2OjEzLjIyNiBGVFAgU0VOVCBbUEFTVl0KLSAgMTY6NDY6MTMuMjYyIEZUUCBS Q1ZEIFsyMjcgRW50ZXJpbmcgUGFzc2l2ZSBNb2RlICgxNSwxNzAsMTc4LDE3MSwxMSwzNyldCi0g IDE2OjQ2OjEzLjI5OSBGVFAgU0VOVCBbUkVUUiBCSUdGSUxFXQotICAxNjo0NjoxMy4zMzcgRlRQ IFJDVkQgWzE1MCBPcGVuaW5nIEJJTkFSWSBtb2RlIGRhdGEgY29ubmVjdGlvbiBmb3IgQklHRklM RS4uXQotICAxNjo0NzoyNC44OTUgRlRQIFJDVkQgWzQyNiBUcmFuc2ZlciBhYm9ydGVkLiBEYXRh IGNvbm5lY3Rpb24gY2xvc2VkLl0KLSAgMTY6NDc6MjQuOTM0IEZUUCBSQ1ZEIFsyMjYgQWJvcnQg c3VjY2Vzc2Z1bF0KLSAgMTY6NDc6MjQuOTkxIEZUUCBTRU5UIFtNRFRNIEJJR0ZJTEVdCi0gIDE2 OjQ3OjI1LjAyOCBGVFAgUkNWRCBbMjEzIDIwMDYwNzA2MjA0NDU4XQotCi1Ob3cgSSBkbyBhIFJF R0VUOgotCi0gIDE2OjUxOjU1LjMyMSBGVFAgU0VOVCBbUEFTVl0KLSAgMTY6NTE6NTUuMzU3IEZU UCBSQ1ZEIFsyMjcgRW50ZXJpbmcgUGFzc2l2ZSBNb2RlICgxNSwxNzAsMTc4LDE3MSwxMSw0Myld Ci0gIDE2OjUxOjU1LjM5NCBGVFAgU0VOVCBbUkVTVCAxMjI3MzY2NDBdCi0gIDE2OjUxOjU1LjQz MCBGVFAgUkNWRCBbMzUwIFJlc3RhcnRpbmcgYXQgMTIyNzM2NjQwLiBTZW5kIFNUT1JFIG9yIFJF VFJJRVZFLi5dCi0gIDE2OjUxOjU1LjQzMSBGVFAgU0VOVCBbUkVUUiBCSUdGSUxFXQotICAxNjo1 MTo1NS40NjkgRlRQIFJDVkQgWzE1MCBPcGVuaW5nIEJJTkFSWSBtb2RlIGRhdGEgY29ubmVjdGlv biBmb3IgQklHRklMRS4uXQotCi1UaGlzIHdvcmtlZCBwZXJmZWN0bHksIGFzIGZhciBhcyBJIGNh biB0ZWxsOyB0aGUgRlQgZGlzcGxheSBwaWNrZWQgdXAgaW4gdGhlCi1yaWdodCBwbGFjZTsgdGhl IHRoZXJtb21ldGVyLCBwZXJjZW50IGRvbmUsIGFuZCBlc3RpbWF0ZWQgdGltZSByZW1haW5pbmcK LXdlcmUgdGhlIHNhbWUgYXMgd2hlbiB3ZSBsZWZ0IG9mZiBsYXN0IHRpbWUuICBJIGRpZCB0aGUg c2FtZSB0aGluZyBzZXZlcmFsCi1tb3JlIHRpbWVzLCBldmVyeXRoaW5nIHdhcyBPSy4gIEl0IHdv dWxkIGhhdmUgdGFrZW4gYSByZWFsbHkgbG9uZyB0aW1lIHRvCi1sZXQgdGhpcyBydW4gdG8gY29t cGxldGlvbiwgYnV0IEkgdGhpbmsgdGhpcyBkZW1vbnN0cmF0ZXMgdGhhdCBTY290dCdzCi1zeW1w dG9tcyBhcmUgc2VydmVyLWRlcGVuZGVudC4gIE5vIGNoYW5nZXMuICA2IEp1bHkgMjAwNi4KLQot Q2hlY2tlZCBjdXJyZW50IGNvZGUgb24gVk1TIDguMi0xIG9uIElBNjQgLyBVQ1ggNS41LCBidWls ZHMgZmluZS4KLU5vIGNoYW5nZXMuICBVcGRhdGVkIGxpc3RpbmcgYXQgSFAuICA2IEp1bHkgMjAw Ni4KLQotQ2hlY2tlZCBGVFAgR0VUIG9mIGxhcmdlIGZpbGUgaW4gQVNDSUkgbW9kZSBhZ2FpbnN0 IFRydTY0IEZUUCBzZXJ2ZXIuICBJdAotd2FzIGZpbmUsIGFuZCB0aGVyZSB3YXMgbm8gZGVsYXkg aW4gdGhlIHNlcnZlcidzIHJlc3BvbnNlIHRvIG91ciBTSVpFIGNvbW1hbmQKLShhcyB0aGVyZSB3 b3VsZCBiZSBpZiBpdCB3ZXJlIHNjYW5uaW5nIHRoZSBlbnRpcmUgZmlsZSB0byBjb3VudCBob3cg bWFueQotYnl0ZXMgd291bGQgYmUgcmVxdWlyZWQgdG8gc2VuZCBpdCBpbiB0ZXh0IG1vZGUpLiAg NyBKdWwgMjAwNi4KLQotVGVzdGVkIEZUUCBQVVQgYmlnIGZpbGUgYWdhaW5zdCBUcnU2NCwgT0su ICBEaXR0byBGVFAgUkVTRU5EIGJpZyBmaWxlOgotCi0gIEMtS2VybWl0PnJlc2VuZCBCSUdGSUxF Ci0gICBQVVQgQklHRklMRSAoYmluYXJ5KSAoMzAwMDAwMDAwMSBieXRlcyktLS0+IFBBU1YKLSAg MjI3IEVudGVyaW5nIFBhc3NpdmUgTW9kZSAoMTUsMTcwLDE3OCwxNzEsMTMsMTg2KQotICAtLS0+ IFNJWkUgQklHRklMRQotICAyMTMgMzQzMjExMjgwCi0gIC0tLT4gTURUTSBCSUdGSUxFCi0gIDIx MyAyMDA2MDcwNzE0MTI0MwotICAtLS0+IEFQUEUgQklHRklMRQotICAxNTAgT3BlbmluZyBCSU5B UlkgbW9kZSBkYXRhIGNvbm5lY3Rpb24gZm9yIEJJR0ZJTEUgKDEyOC41OS41OS41Niw0NTQ3MCku Ci0KLU1hZGUgUkVQVVQgYSBzeW5vbnltIGZvciBSRVNFTkQuICBja3V1c3IuYywgNyBKdWwgMjAw Ni4KLQotQWRkZWQgRlRQIFJFUFVUIGFuZCBGVFAgUkVTRU5EIHNpbmNlIHByZXZpb3VzbHkgdGhl cmUgd2FzIG5vIEZUUC1wcmVmaXhlZAotY29tbWFuZCBmb3IgcmVjb3ZlcmluZyB1cGxvYWRzLCBv bmx5IHRoZSByZWd1bGFyIFJFU0VORCBjb21tYW5kLCB3aGljaCBtaWdodAotbm90IGhhdmUgYmVl biBvYnZpb3VzIHRvIHBlb3BsZS4gIGNrY2Z0cC5jLCA3IEp1bCAyMDA2LgotCi1BZGRlZCBoZWxw IHRleHQgZm9yIEZUUCBSRVNFTkQgYW5kIFJFUFVUIGFuZCBhbWVuZGVkIFJFU0VORCBoZWxwIHRl eHQuCi1ja2NmdHAuYywgY2t1dXMyLmMsIDcgSnVsIDIwMDYuCi0KLUNoYW5nZWQgbmFtZSBvZiBc ZnBpY3R1cmUoKSB0byBcZnBpY3R1cmVpbmZvKCkgYW5kIGFkZGVkIGhlbHAgdGV4dC4gIEJ5IHRo ZQotd2F5LCBJbWFnZU1hZ2ljayBjYW4gZG8gdGhpcyB0b286IGlkZW50aWZ5IC1mb3JtYXQgIiV3 ICVoIiBkc2NmMDUyMC5qcGcuCi1UaGUgYWR2YW50YWdlIG9mIGhhdmluZyBpdCBpbiBLZXJtaXQg aXMgdGhhdCBub3QgZXZlcnlib2R5IGhhcyBJbWFnZU1hZ2ljay4KLWNrdXVzWzI0XS5jLCA3IEp1 bCAyMDA2LgotCi1DaGFuZ2VkIHRoZSBudW1lcmljIGNvbXBhcmlzb25zID0gPCA+IDw9ID49ICE9 IHRvIGFsbG93IGxvbmcgaW50ZWdlcnMgYnkKLWNoYW5naW5nIHRoZSBkYXRhIHR5cGUgdG8gQ0tf T0ZGX1QsIGV0Yy4gIGNrdXVzNi5jLCA3IEp1bCAyMDA2LgotCi1Ob3RpY2VkIHRoYXQgXGZrZXl3 b3JkdmFsdWUoZm9vPXRoaXMgaXMgYSBzdHJpbmcpIG9ubHkga2VwdCB0aGUgZmlyc3Qgd29yZC4K LUZpeGVkIGl0IHRvIGtlZXAgdGhlIHdob2xlIGRlZmluaXRpb24uICBBbHNvIGFkZGVkIFxma3d2 YWx1ZSgpIGFzIGEgYnJpZWZlcgotc3lub255bS4gIGNrdXVzNC5jLCA3IEp1bCAyMDA2Ci0KLVNv bWV0aW1lcyB3ZSB3YW50IHRvIGNoZWNrIGlmIGEgZmlsZSdzIHN0YXR1cyBiZWZvcmUgd2UndmUg Rk9QRU4nZCBpdCwgaW4KLXdoaWNoIGNhc2UgdGhlIGNoYW5uZWwgdmFyaWFibGUgaXMgbGlrZWx5 IHRvIGJlIGVtcHR5IGFuZCBcZl9zdGF0dXMoXCVjKQotd291bGQgZ2V0IGFuIGVycm9yLiAgTWFr aW5nIHRoZSBvYnZpb3VzIGNoYW5nZSBkaWRuJ3QgZml4IHRoaXMsIGhvd2V2ZXIuICBJdAotdHVy bnMgb3V0IHRoYXQgdGhlIGZ1bmN0aW9uIGV2YWx1YXRvciBmYWlsZWQgdG8gYWRqdXN0IGFyZ24g KGFyZ3VtZW50IGNvdW50KQotd2hlbiB0cmFpbGluZyBhcmd1bWVudHMgd2VyZSBlbXB0eSwgYW5k IGFyZ24gd2FzIGJlaW5nIHVzZWQgaW4gdGhpcyBjYXNlLAotYW5kIHByb2JhYmx5IG90aGVycywg dG8gdGVzdCB3aGV0aGVyIGFuIGFyZ3VtZW50IGV4aXN0ZWQuICBJIGFkZGVkIGNvZGUgdG8KLWFk anVzdCBhcmduIHRvIHJlZmxlY3QgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgdXAgdG8gYW5kIGlu Y2x1ZGluZyB0aGUKLXJpZ2h0bW9zdCBub24tZW1wdHkgb25lLiAgY2t1dXM0LmMsIDcgSnVsIDIw MDYuCi0KLUZpeGVkIFxmc3RyaXBiKCkgdG8gbm90IGR1bXAgY29yZSBpZiBzZWNvbmQgYXJndW1l bnQgaXMgbWlzc2luZy4KLWNrdXVzNC5jLCA3IEp1bCAyMDA2LgotCi1EaXNjb3ZlcmVkIHRoYXQg aXQgd2FzIG5vdCBvYnZpb3VzIHdoYXQgcGF0dGVybiB0byB1c2UgdG8gbWF0Y2ggc3RyaW5ncwot ZW5jbG9zZWQgaW4gc3F1YXJlIGJyYWNrZXRzLiAgImlmIG1hdGNoIFthYmNdIFxbKlxdIiBkaWRu J3Qgd29yay4gIE5laXRoZXIKLWRpZCB2YXJpb3VzIG90aGVyIHRyaWNrcyBsaWtlIE5DUnMgZm9y IHRoZSBicmFja2V0cy4gIEhvd2V2ZXIsICJpZiBtYXRjaAotW2FiY10gXFxbKlxcXSIgZG9lcyB3 b3JrLiAgVHJ5aW5nIHRvIGZpeCB0aGlzIHdvdWxkIG5vIGRvdWJ0IGJyZWFrIDEwMCBvdGhlcgot dGhpbmdzLCBzbyBsZXQncyBjYWxsIGl0IGEgZmVhdHVyZS4gIDcgSnVsIDIwMDYuCi0KLUFkZGVk IFxmZ2V0cGlkaW5mbyhuKSB0byByZXR1cm4gaW5mbyBhYm91dCBhIHByb2Nlc3MgSUQ7IGZvciBu b3cgaXQgc2ltcGx5Ci1yZXR1cm5zIDEgaWYgdGhlIHByb2Nlc3MgaXMgYWxpdmUgYW5kIDAgaWYg bm90IChvciAtMSBpZiB0aGUgYXJndW1lbnQgaXMKLWJhZCBvciBtaXNzaW5nIG9yIG9uIGFueSBr aW5kIG9mIGVycm9yKS4gIGNrdXVzci5oLCBja3V1c1syNF0uYywgNyBKdWwgMjAwNi4KLQotVGhl ICJ3aGVyZS1kaWQtbXktZmlsZS1nbyIgbWVzc2FnZSBzZWVtZWQgdG8gYmUgZW5kaW5nIHdpdGgg YSBMRiByYXRoZXIKLXRoYW4gQ1JMRiwgcHJvYmFibHkgYmVjYXVzZSB0aGUgdGVybWluYWwgbW9k ZXMgaGFkIG5vdCB5ZXQgYmVlbiByZXN0b3JlZCwKLWxlYXZpbmcgdGhlIG5leHQgcHJvbXB0IGhh bmdpbmcgYmVsb3cgaXQsIHJhdGhlciB0aGFuIG9uIHRoZSBsZWZ0IG1hcmdpbiwKLWlmIEMtS2Vy bWl0IGV4aXRlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgdHJhbnNmZXIuICBGaXhlZCBieSBjaGFu Z2luZwotYWxsIFxuJ3MgdG8gXHJcbidzIGluIHdoZXJlbXNnKCk6IGNrY3Byby53LCA4IEp1bCAy MDA2LgotCi1BZGRlZCBcdihsYXN0a3d2YWwpIHNvIHdlIGNhbiByZXRyaWV2ZSBwcm9ncmFtbWF0 aWNhbGx5IHRoZSBrZXl3b3JkIG1vc3QKLXJlY2VudGx5IHByb2Nlc3NlZCBieSBcZmtleXdvcmR2 YWwoKS4gIGNrdXVzci5oLCBja3V1czQuYywgOSBKdWwgMjAwNi4KLQotLS0tIERldi4yMCAtLS0K LQotQWRkZWQgI2lmZGVmIFNWNjgsICNpbmNsdWRlIDx1bmlzdGQuaD4sICNlbmRpZiBiZWNhdXNl IFVuaXggU3lzdGVtIFYvNjggb24KLU1vdG9yb2xhIGNob2tlZCBvbiB0aGUgU0VFS19DVVIgcmVm ZXJlbmNlIHdpdGhvdXQgaXQuICBja3V1czQuYywgMTAgSnVsIDIwMDYuCi0KLU1ha2UgXGZrZXl3 b3JkdmFsKHh4eCkgdW5kZWZpbmUgeHh4IChpLmUuIHdoZW4gYSBrZXl3b3JkIGlzIGdpdmVuIHdp dGggbm8KLXZhbHVlKS4gIFRoaXMgd2F5IGNvbW1hbmQtbGluZSBrZXl3b3JkcyB3aWxsIGFsd2F5 cyBvdmVycmlkZSBwcmVleGlzdGluZwotZGVmYXVsdCBkZWZpbml0aW9ucywgd2hldGhlciB0aGV5 IGhhdmUgYSB2YWx1ZSBvciBub3QsIHdoaWNoIG1ha2VzIGl0IGVhc2llcgotdG8gcGFyc2UgY29t bWFuZCBsaW5lcyBsaWtlICJmb289YmFyIGJsYWggeHg9eXkiLiAgY2t1dXNbMjRdLmMsIDEyIEp1 bCAyMDA2LgotCi1PbiAyOSBOb3YgMjAwNSBJIGNoYW5nZWQgSUYgS0VSQkFORyB0byBzb2x2ZSBh IHByb2JsZW0gKHNlZSBlbnRyeSBmb3IgdGhhdAotZGF0ZSksIGJ1dCBpbnRyb2R1Y2VkIGEgbmV3 IG9uZTsgbmFtZWx5IHRoYXQgeW91IGNhbid0IGhhdmUgKGUuZy4pICBhIEZBVEFMCi1tYWNybyB0 aGF0IHVzZXMgSUYgS0VSQkFORyB0byBkZWNpZGUgd2hldGhlciB0byBFWElUIGFsbCB0aGUgd2F5 IG9yIFNUT1AKLWJhY2sgdG8gdGhlIHByb21wdC4gIENoYW5nZWQgaXQgYWdhaW4sIHRoaXMgdGlt ZSB0byByZXF1aXJlIG5vdCB0aGF0IHRoZQotY29tbWFuZCBsZXZlbCBiZSAxLCBidXQgdGhhdCB0 aGUgY29tbWFuZCAqZmlsZSogbGV2ZWwgYmUgMCAoaS5lLiB0aGF0IHdlIGFyZQotaW4gdGhlIHRv cC1sZXZlbCBjb21tYW5kIGZpbGUsIGlycmVzcGVjdGl2ZSBvZiB0aGUgY29tbWFuZCBvciBtYWNy byBsZXZlbCwKLWJ1dCBub3QgaW4gYSBzdWJmaWxlKS4gIGNrdXVzNi5jLCAxMiBKdWwgMjAwNi4K LQotSXQgaXMgdW5oZWxwZnVsIHdoZW4gS2VybWl0IGdldHMgYSBzeW50YXggZXJyb3IgaW4gdGhl IG1pZGRsZSBvZiBhIGJpZwotY29tcG91bmQgc3RhdGVtZW50IGJsb2NrIChlLmcuIEZPUiBvciBX SElMRSBsb29wKSBhbmQgZHVtcHMgb3V0IHRoZSB3aG9sZQotdGhpbmcgaW4gYW4gZXJyb3IgbWVz c2FnZS4gIEkgY2hhbmdlZCB0aGUgdHdvIHBsYWNlcyB3aGVyZSB0aGlzIGNhbiBoYXBwZW4KLXRv IGNhbGwgYSBuZXcgcm91dGluZSB0aGF0LCBpbnN0ZWFkIG9mIGR1bXBpbmcgb3V0IHRoZSBlbnRp cmUgY21kYnVmLAotY2hlY2tzIGl0cyBsZW5ndGggZmlyc3QgYW5kIGlmIGl0J3MgbW9yZSB0aGFu IGEgbGluZSBsb25nLCB0cnVuY2F0ZXMgaXQKLWFuZCBhZGRzIGFuIGVsbGlwc2lzLiAgY2t1dXM2 LmMsIDEyIEp1bCAyMDA2LgotCi1UaGUgbmV3IFJFTkFNRSBjb21tYW5kIGRpZG4ndCBnaXZlIHZl cnkgZ29vZCBlcnJvciBtZXNzYWdlcywgZS5nLiBpZiB0aGUKLWZpbGVzcGVjIGRpZG4ndCBtYXRj aCBhbnkgZmlsZXMuICBGaXhlZCBpbiBkb3JlbmFtKCk6IGNrdXVzNi5jLCAxMiBKdWwgMjAwNi4K LQotRml4ZWQgRElSIC9UT1AgdG8gd29yayBpZiB0aGUgL1RPUDpuIGFyZ3VtZW50IHdhcyBvbWl0 dGVkLCBkZWZhdWx0aW5nCi10byAxMC4gIGRvbXlkaXIoKTogY2t1dXM2LmMsIDEyIEp1bCAyMDA2 LgotCi1BZGRlZCBESVIgL0NPVU5UOnYgdG8gY291bnQgdGhlIG51bWJlciBvZiBmaWxlcyB0aGF0 IG1hdGNoIHRoZSBnaXZlbgotY3JpdGVyaWEgYW5kIHN0b3JlIHJlc3VsdCBpbiB0aGUgdmFyaWFi bGUgdi4gIGNrdXVzci5oLCBja3V1c1tyMjZdLmMsCi0yNCBBdWcgMjAwNi4KLQotQWRkZWQgSERJ UkVDVE9SWSBhcyBhbiBpbnZpc2libGUgc3lub255bSBmb3IgRElSIC9TT1JUOlNJWkUgL1JFVkVS U0UuCi1DYW4gYmUgdXNlZCB3aXRoIG90aGVyIHN3aXRjaGVzLCBvZiBjb3Vyc2UsIHNvIChlLmcu KSBIRCAvVE9QIHNob3dzIHRoZQotdGVuIGJpZ2dlc3QgZmlsZXMuICBja3V1c3IuaCwgY2t1dXNb cjI2XS5jLCAyNCBBdWcgMjAwNi4KLQotRElSIC9GT0xMT1dMSU5LUyBhbmQgL05PRk9MTE9XTElO S1MgYWx3YXlzIGRpZCB0aGUgc2FtZSB0aGluZzsgdGhlIHN3aXRjaAotd2FzIGlnbm9yZWQsIGEg c3ltbGluayBpcyBhbHdheXMgZm9sbG93ZWQuICBGaXhlZCBpbiBja3V1czYuYywgMjQgQXVnIDIw MDYuCi0KLUFkZGVkIERJUiAvTk9MSU5LUywgd2hpY2ggbWVhbnMgZG9uJ3Qgc2hvdyBvciBjb3Vu dCBzeW1saW5rcyBhdCBhbGwuCi1ja3V1c3IuaCwgY2t1dXNbcjI2XS5jLCAyNCBBdWcgMjAwNi4K LQotQnVpbGQgb24gU29sYXJpcyA5IGFuZCBOZXRCU0QgMy4wLCAyNCBBdWcgMjAwNi4KLQotQWRk ZWQgYSBtaXNzaW5nIGRlZmluaXRpb24gZm9yIExPQ0tfRElSIGluIHRoZSBMaW51eCBIQVZFX0JB VURCT1kgY2FzZSwKLXN1Z2dlc3RlZCBieSBHZXJyeSBCZWxhbmdlci4gIGNrdXRpby5jLCA2IE9j dCAyMDA2LgotCi1TdWdnZXN0ZWQgYnkgSmltIENyYXB1Y2hldHRlczogXHYoZGlhbG1lc3NhZ2Up IGlzIHRoZSB0ZXh0IHN0cmluZwotY29ycmVzcG9uZGluZyB0byBcdihkaWFsc3RhdHVzKS4gIGNr dXVzci5oLCBja3V1czQuYywgNiBPY3QgMjAwNi4KLQotU29ld29ubyBFZmZlbmRpIHNlbnQgY29k ZSBmb3IgZXhpdCBzZXF1ZW5jZSB0byBsZWF2ZSBEVFIgb247IHRoaXMgYW1vdW50ZWQKLXRvIHVu c2V0dGluZyBIUFVDTCBpbiBjX2NmbGFnLiAgSSBkaWQgaXQgYSBzaW1wbGVyIHdheSwgaG9wZWZ1 bGx5IHBvcnRhYmxlCi10byBhbGwgVW5peGVzLCBidXQgd2hvIGtub3dzIGF0IHRoaXMgbGF0ZSBk YXRlLiAgVGhlIGNvZGUgaXMgaW5zaWRlCi0jaWZuZGVmIENLX05PSFVQQ0wuLiNlbmRpZiBpbiBj YXNlIGl0IGNhdXNlcyB0cm91YmxlLiAgSXQgaXMgZXhlY3V0ZWQgaWYKLVNFVCBFWElUIEhBTkdV UCBpcyBPRkYgYW5kIGEgc2VyaWFsIHBvcnQgd2FzIG9wZW4gYXQgdGhlIHRpbWUgS2VybWl0IGV4 aXRzCi0ob3IgY2xvc2VzIGl0IGV4cGxpY2l0bHkpLiAgdHRjbG9zKCk6IGNrdXRpby5jLCA2IE9j dCAyMDA2LgotCi1CdWlsdCBvbiBTb2xhcmlzOS9TcGFyYzsgRnJlZUJTRCA2LjIvQU1ENjQ7IE5l dEJTRCAzLjAvaTM4NjsgSFAtVVggMTFpIHYyOwotU0NPIE9TUjYuMDAuCi0KLS0tLSBEZXYuMjEg LS0tCi0KLUFkZGVkIG5ldGJzZCtvcGVuc3NsIHRhcmdldCB0byBtYWtlZmlsZS4gIEJ1aWx0IE9L IChOZXRCU0QgMy4wLCBPcGVuU1NMCi0wLjkuN2QpIGV4Y2VwdCB3aXRoIHNvbWUgd2FybmluZ3Mg aW4gY2tfY3JwLmMuICBDb25uZWN0cyBhbmQgbG9ncyBpbiBPSyB0byBhCi1zZWN1cmUgc2l0ZS4g IDEwIE9jdCAyMDA2LgotCi1BZGRlZCBhIGRlYnVnIHN0YXRlbWVudCB0byBmdHBfaG9va3VwKCkg dG8gcmVjb3JkIHRoZSBUQ1AgcG9ydCB0aGF0IHdhcyB1c2VkLgotY2tjZnRwLmMsIDExIE9jdCAy MDA2LgotCi1CdWlsdCB3aXRoIE9wZW5TU0wgMC45LjdsIG9uIFNvbGFyaXMgOS4gIEJ1aWx0IHdp dGggT3BlblNTTCAwLjkuOGQgb24KLVNvbGFyaXMgOTsgY29ubmVjdHMgYW5kIGxvZ3MgaW4gdG8g YSBzZWN1cmUgc2l0ZS4gIDExIE9jdCAyMDA2LgotCi1UaGUgbmV3IFJFTkFNRSBjb21tYW5kIGRp ZG4ndCB3b3JrIGlmIGJvdGggdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gbmFtZXMKLWluY2x1 ZGVkIGRpcmVjdG9yeSBzZWdtZW50cywgZS5nLiAicmVuYW1lIC90bXAvZm9vIH4vYmFyIiAoc2Vl IG5vdGVzIG9mCi00IE1heSAyMDA2KS4gIFRoaXMgd2FzIGZpeGVkIGluIHJlbmFtZW9uZSgpIGJ5 IGEgc3BlY2lhbCBjYXNlIGluIHdoaWNoCi10aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGdpdmVuIGJ1 dCBpdCBpcyBhIGZpbGVuYW1lLCBub3QgYSBkaXJlY3RvcnkgbmFtZS4KLWNrdXVzNi5jLCAxMSBP Y3QgMjAwNi4KLQotRml4ZWQgdW5ndWFyZGVkIHJlZmVyZW5jZSB0byBkaWFsbXNnW10gZm9yIFxm ZGlhbG1lc3NhZ2UoKSwgbm90aWNlZCBieQotR2VycnkgQmVsYW5nZXIuICBja3V1czQuYywgMTIg T2N0IDIwMDYuCi0KLUFkZGVkIGEgVE9VQ0ggY29tbWFuZCB0aGF0IGRvZXMgd2hhdCBVTklYIHRv dWNoIGRvZXM6IGNyZWF0ZXMgdGhlIGZpbGUgaWYgaXQKLWRvZXMgbm90IGV4aXN0LCB1cGRhdGVz IHRoZSB0aW1lc3RhbXAgaWYgaXQgZG9lcy4gIElmIGEgd2lsZGNhcmQgaXMgZ2l2ZW4sCi1pdCBv cGVyYXRlcyBvbmx5IG9uIGV4aXN0aW5nIGZpbGVzLiAgSXQgc2hhcmVzIHRoZSBESVJFQ1RPUlkg Y29tbWFuZCBwYXJzZXIsCi1zbyBhbGwgdGhlIHNhbWUgZmlsZSBzZWxlY3Rpb24gc3dpdGNoZXMg Y2FuIGJlIGdpdmVuLiAgY2t1dXNyLltjaF0sCi1ja3V1c1syNl0uYywgMTIgT2N0IDIwMDYuCi0K LVBldGVyRSBub3RpY2VkIHRoYXQgaWYgeW91IEZPUEVOIGEgZmlsZSwgZG8gc29tZSBzZWVrcyBv ciByZWFkcywgdGhlbiBGQ0xPU0UKLWl0LCB0aGVuIEZPUEVOIGl0IGFnYWluIChvciBvcGVuIGEg ZGlmZmVyZW50IG9uZSksIHNvbWUgb2YgdGhlIG9sZAotaW5mb3JtYXRpb24gaXMgc3RpbGwgdGhl cmUgKGUuZy4gY3VycmVudCBsaW5lIG51bWJlcikuICBUaGlzIGlzIGFuIGFydGlmYWN0Ci1vZiB0 aGUgY2hhbmdlcyBvZiBNYXkgNHRoLiAgTm93IHRoZSBmaWxlIGNsb3NpbmcgYW5kIG9wZW5pbmcg cm91dGluZXMgYXJlIGEKLWJpdCBtb3JlIGNhcmVmdWwgYWJvdXQgc2NydWJiaW5nIGFuZCBpbml0 aWFsaXppbmcgdGhlIGZpbGUgaW5mbyBzdHJ1Y3QuCi1ja3V1czcuYywgMTIgT2N0IDIwMDYuCi0K LS0tLSBEZXYuMjIgLS0tCi0KLUJ1aWx0IE9LIG9uIFJlZCBIYXQgTGludXggQVM0IHdpdGggYm90 aCAibWFrZSBsaW51eCIgYW5kICJtYWtlIGxpbnV4bmMiLiAKLTE1IE9jdCAyMDA2LgotCi1ESVJF Q1RPUlkgL0JSSUVGIGlnbm9yZWQgZmlsZSBzZWxlY3Rpb24gc3dpdGNoZXMgYW5kIGFsd2F5cyBs aXN0ZWQgYWxsCi1maWxlcy4gIFRoaXMgd2FzIGJlY2F1c2Ugb2YgaG93IEkgY2xldmVybHkgY2Fs bGVkIGZpbGhlbHAoKSAodGhlIHJvdXRpbmUKLXRoYXQgbGlzdHMgbWF0Y2hpbmcgZmlsZXMgd2hl biA/IGlzIHR5cGVkIGluIGEgZmlsZW5hbWUgZmllbGQpIGFuZCwgb2YKLWNvdXJzZSwgZmlsaGVs cCgpIGRvZXNuJ3Qga25vdyBhbnl0aGluZyBhYm91dCB0aGUgRElSRUNUT1JZIGNvbW1hbmQncyBm aWxlCi1zZWxlY3Rpb25zLiAgQ2hhbmdlZCBmaWxoZWxwKCkgdG8gYWNjZXB0IGFsbCB0aGUgYXJn cyBuZWVkZWQgZm9yIHBhc3NpbmcKLWFsb25nIHRvIGZpbGVzZWxlY3QoKSwgcmVuYW1lZCBpdCB0 byB4ZmlsaGVscCgpLCBhbmQgbWFkZSBhIGZpbGhlbHAoKSBzdHViCi10aGF0IGNoYWlucyB0byB4 ZmlsaGVscCgpIHdpdGggbnVsbCBzZWxlY3Rpb25zLiAgY2tja2VyLmgsIGNrdWNtZC5bY2hdLAot Y2t1dXM2LmMsIDI5IE5vdiAyMDA2LgotCi1TSE9XIENPTk5FQ1RJT04gZm9yIGFuIFNTSCBjb25u ZWN0aW9uIHNhaWQgdGhlIGNvbm5lY3Rpb24gdHlwZSB3YXMgIk5FVCIKLXJhdGhlciB0aGFuICJT U0giLiAgRml4ZWQgaW4gZG9sb2duZXQoKTogY2t1dXMzLmMsIDI5IE5vdiAyMDA2LgotCi1TSE9X IENPTk5FQ1RJT04gZGlkbid0IHNob3cgdGhlIFRDUCBwb3J0IG51bWJlci4gIFRoaXMgY29tbWFu ZCB3b3JrcyBieQotcGFyc2luZyB0aGUgY3VycmVudCBjb25uZWN0aW9uIGxvZyBlbnRyeSBzdHJp bmcsIHdoaWNoIGRvZXNuJ3QgaGF2ZSBhIGZpZWxkCi1mb3IgdGhpcywgYnV0IHdoaWNoIHNvbWV0 aW1lcyBzaG93cyB0aGUgcG9ydCBudW1iZXIgYXMgcGFydCBvZiB0aGUgaG9zdG5hbWUKLShidXQg bW9yZSBvZnRlbiBub3QpLiAgQWRkZWQgY29kZSB0byBkb2xvZ25ldCgpIHRvIGxvZyB0aGUgVENQ IHBvcnQgbnVtYmVyLAotaWYga25vd24uICBUaGlzIGludm9sdmVkIGFkZGluZyBhIGdldHRjcHBv cnQoKSBmdW5jdGlvbiB0byBja2NuZXQuYy4KLWNrY25ldC5bY2hdLCBja3V1czMuYywgMjkgTm92 IDIwMDYuCi0KLVRoaXMgd2FzIGltcG9zc2libGU6IGRlZiBcJTEgdXBwZXIsIGVjaG8gXGZcJTEo YWJjKSAtLSBpLmUuIHRvICJjb21wb3NlIiBhCi1mdW5jdGlvbiBuYW1lLiAgRml4ZWQgaW4genpz dHJpbmcoKS4gIEJ1dCBub3RlIHRoYXQgaXQncyBzdGlsbCBub3QgcG9zc2libGUKLXRvIGRvIHRo aXM6IGRlZiBcJTEgXGZ1cHBlciwgZWNobyBcJTEoYWJjKSAtLSBiZWNhdXNlIGF0IHRoZSBwb2lu dCB3aGVyZQotIlxmdXBwZXIiIGlzIGVuY291bnRlcmVkLCB3aGljaCBpcyBhdXRvbWF0aWNhbGx5 IGZlZCB0byBmbmV2YWwoKSwgdGhlCi1hcmd1bWVudCBsaXN0IGhhc24ndCBiZWVuIHJlYWQgeWV0 LiAgY2t1dXM0LmMsIDI5IE5vdiAyMDA2LgotCi1UaGUgbWVhbmluZ2xlc3MgTGlzcCBjb21tYW5k ICg9KSB3b3VsZCBjYXVzZSBLZXJtaXQgdG8gaGFuZy4gIER1ZSB0byBzb21lCi1pZGlvc3luY3Jh Y3kgaW4gdGhlIHBhcnNlciwgaXQgd291bGQgc2VlIHRoaXMgYXMgKCg9KSBhbmQgd291bGQgZ28g aW50bwotIndhaXQgZm9yIHRoZSBjbG9zaW5nIHBhcmVuIiBtb2RlLiAgVGhlcmUgd2FzIGFscmVh ZHkgYSBoYWNrIGluIHRoZSBjb2RlIHRvCi1jb21wZW5zYXRlIGZvciB0aGlzLCBidXQgaXQgZGlk bid0IHdvcmsuICBJIGZpeGVkIHRoZSBoYWNrIGJ1dCBJIGRvbid0Ci11bmRlcnN0YW5kIHRoZSBy ZWFsIHByb2JsZW0uICBBbnl3YXksIGNvbXBhcmluZyBLZXJtaXQgd2l0aCByZWFsIChGcmFueikK LUxpc3AgSSBkaXNjb3ZlcmVkIHRoYXQgY29tcGFyaXNvbiBvcGVyYXRvcnMgZG8gbm90IHJlcXVp cmUgdHdvIGFyZ3VtZW50cywgYXMKLUtlcm1pdCBoYXMgYmVlbiBkb2luZywgYWx0aG91Z2ggdGhl eSBkbyByZXF1aXJlIGF0IGxlYXN0IG9uZS4gIEkgY2hhbmdlZAotS2VybWl0IHRvIG5vdCByZXF1 aXJlIHR3bywgc28gbm93IGFsbCB0aGUgY29tcGFyaXNvbiBwcmVkaWNhdGVzIGJlaGF2ZQotZXhh Y3RseSBsaWtlIEZyYW56IExpc3AsIGluY2x1ZGluZyBnZXR0aW5nIGFuIGVycm9yIGlmIHRoZXJl IGFyZSBubyBhcmdzKS4KLWNrdXVzW3IzXS5jLCAyOSBOb3YgMjAwNi4KLQotRnJvbSB0by1kbyBs aXN0OiBNYWtlIGEgd2F5IHRvIGluaGliaXQgcGF0dGVybiBtYXRjaGluZyBpbiBTV0lUQ0ggbGFi ZWxzLgotSXQncyBhbHJlYWR5IHRoZXJlOyBqdXN0IHF1b3RlIHRoZSB3aWxkY2FyZCBjaGFyYWN0 ZXJzOyB0aGUgb25seSB0cmljayBpcwotdGhhdCBmb3Igc29tZSByZWFzb24gKHN1Y2ggYXMgdGhh dCBTV0lUQ0ggaXMgcmVhbGx5IGFuIGludGVybmFsbHkgZGVmaW5lZAotbWFjcm8pLCBhIGRvdWJs ZSBxdW90ZSBpcyBuZWVkZWQ6Ci0KLSAgc3dpdGNoIFwlMSB7Ci0gICAgOmFcXCp6LCBlY2hvIGxp dGVyYWxseSAiYSp6IiwgYnJlYWsKLSAgICA6YWJjeHl6LCBlY2hvIGxpdGVyYWxseSAiYWJjeHl6 IiwgYnJlYWsKLSAgICA6YSp6LCBlY2hvIGEuLi56LCBicmVhawotICAgIDpkZWZhdWx0LCBlY2hv IE5PIE1BVENICi0gIH0KLQotSW4gZmlyc3QgY2FzZSwgdGhlIGFzdGVyaXNrIGlzIHRha2VuIGxp dGVyYWxseTsgaW4gdGhlIHRoaXJkIGl0J3MgYQotbWV0YWNoYXJhY3RlciBhbmQgdGhlIGxhYmVs IG1hdGNoZXMgYW55IHN0cmluZyB0aGF0IHN0YXJ0cyB3aXRoICdhJyBhbmQKLWVuZHMgd2l0aCAn eicuCi0KLUFycmF5IGluaXRpYWxpemF0aW9uIHdvdWxkIHF1aXQgZWFybHkgaWYgYW55IGluaXRp YWxpemVycyB3ZXJlIHVuZGVmaW5lZCwKLWUuZy4gImRlY2wgXCZhW10gPSBcJWEgXCViIFwlYyIg d291bGQgc3RvcCBhdCB0aGUgZmlyc3QgZWxlbWVudCBpZiBcJWIKLXdhcyBub3QgZGVmaW5lZCwg ZXZlbiB0aG91Z2ggXCVjIG1pZ2h0IGJlIGRlZmluZWQuICBGaXhlZCBpbiBkb2RjbCgpOgotY2t1 dXNyLmMsIDMwIE5vdiAyMDA2LgotCi1ESVIgL0FSUkFZOmEgZmlsZXNwZWMsIHdoZW4gdGhlIGZp bGVzcGVjIGRvZXMgbm90IG1hdGNoIGFueSBmaWxlcywKLXRlcm1pbmF0ZXMgd2l0aCB0aGUgYXJy YXkgdW5kZWNsYXJlZC4gIEl0IHdvdWxkIGJlIGJldHRlciB0byByZXR1cm4gYQotZGVjbGFyZWQg YnV0IGVtcHR5IGFycmF5IChcJmFbMF0gPSAwKS4gIFRoZSBjb2RlIGlzIGFscmVhZHkgdGhlcmUg dG8gZG8KLXRoYXQsIGJ1dCBpc24ndCB3b3JraW5nLiAgQW5kIHlldCAiZGVjbGFyZSBcJmFbMF0i IGRvZXMgaW5kZWVkIGNyZWF0ZSBhCi0wLWVsZW1lbnQgYXJyYXkgKCJzaG93IGFycmF5IiBzaG93 cyBhIGRpbWVuc2lvbiBvZiAwKS4gIFR1cm5zIG91dCB0aGVyZSB3ZXJlCi10d28gcHJvYmxlbXM7 IG9uZSB3YXMgdGhlIGNhcmVsZXNzIHJlY3ljbGluZyBvZiBhIGxvY2FsIHZhcmlhYmxlICgiYXJy YXkiKSwKLXJlc3VsdGluZyBpbiBmYWlsdXJlIHRvIGNyZWF0ZSBcJmFbXSAoYnV0IG5vdCBhbnkg b3RoZXIgYXJyYXkpLiAgRml4ZWQgaW4KLWRvbXlkaXIoKTogY2t1dXM2LmMsIDMwIE5vdiAyMDA2 LgotCi1UaGUgb3RoZXIgcHJvYmxlbSB3YXMgdGhhdCBkY2xhcnJheSgpLCB3aGVuIGNhbGxlZCB3 aXRoIGFuIGFycmF5IG5hbWUgYW5kIGEKLWRpbWVuc2lvbiBvZiB6ZXJvLCBkb2VzIHR3byBkaWZm ZXJlbnQgdGhpbmdzIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBhcnJheQotYWxyZWFkeSBleGlz dGVkLiAgVGhlcmUgaXMgc3RpbGwgYSBmYWlyIGFtb3VudCBvZiBjb25mdXNpb24gYWJvdXQgd2hl dGhlciBhCi1kaW1lbnNpb24gb2YgMCBpbmRpY2F0ZXMgYW4gYXJyYXkgd2l0aCAxIGVsZW1lbnQg KGFzIGl0IHNob3VsZCkgb3IgYQotbm9uZXhpc3RlbnQgYXJyYXkuICBXZSBjYWxsIGRjbGFycmF5 KCkgd2l0aCBhIHNpemUgb2YgMCB0byB1bmRlY2xhcmUgYW4KLWFycmF5IGJ1dCB3ZSBhbHNvIG5l ZWQgdG8gYWJsZSBhYmxlIHRvIGRlY2xhcmUgYW4gYXJyYXkgd2l0aCBvbmx5IGVsZW1lbnQgMC4K LUkgY2hhbmdlZCBkY2xhcnJheSgpIHRvIHRyZWF0IGEgbmVnYXRpdmUgZGltZW5zaW9uIGFzIGEg Y29tbWFuZCB0byBkZXN0cm95Ci10aGUgYXJyYXksIGFuZCAwIG9yIHBvc2l0aXZlIGFzIGEgY29t bWFuZCB0byBjcmVhdGUgdGhlIGFycmF5IHdpdGggdGhlIGdpdmVuCi1kaW1lbnNpb24uICBja3V1 c1tyNTZdLmMsIDMwIE5vdiAyMDA2LgotCi1OZXh0IHByb2JsZW06IHdoZW4gY2hrYXJyYXkoKSBy ZXR1cm5zIDAsIHRoaXMgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCB0bwotbWVhbiB0aGUgYXJy YXkgZG9lcyBub3QgZXhpc3QuICBMb29rcyBsaWtlIHRoZSBvbmx5IHBsYWNlIHRoaXMgaGFwcGVu ZWQgd2FzCi1pbiBcZmNvbnRlbnRzKCk7IGZpeGVkIGluIGNrdXVzNC5jLCAzMCBOb3YgMjAwNi4K LQotSWYgd2UgaW5jbHVkZSBmaWxlIHNlbGVjdG9ycyB3aXRoIERJUiAvQVJSQVk6JmEgYW5kIHNv bWUgb2YgdGhlIGZpbGVzIHRoYXQKLW1hdGNoIHRoZSBnaXZlbiBmaWxlc3BlYyBidXQgZG9uJ3Qg Zml0IHRoZSBzZWxlY3RvcnMsIHRoZSBhcnJheSdzIGRpbWVuc2lvbgotaXMgYmlnZ2VyIHRoYW4g aXRzIG51bWJlciBvZiBlbGVtZW50cy4gIEFkZGVkIGNvZGUgYXQgdGhlIGVuZCBvZiBkb215ZGly KCkKLXRvIHJlc2l6ZSB0aGUgYXJyYXkgc28gXGZkaW0oKSByZXR1cm5zIHRoZSBudW1iZXIgb2Yg ZmlsZW5hbWVzIGluIHRoZSBhcnJheSwKLWFuZCBhbHNvIG1hZGUgc3VyZSB0aGF0IGVsZW1lbnQg MCBjb250YWlucyB0aGF0IG51bWJlciB0b28uICBja3V1czYuYywKLTMwIE5vdiAyMDA2LgotCi1U aGlzIHdvdWxkIGJlIGEgbmljZSBlbGVnYW50IHdheSB0byBsb29wIG92ZXIgYSBidW5jaCBvZiBm aWxlcywgaWYgaXQgd29ya2VkOgotCi0gIGZvciBcJWkgMSBcZmZpbGVzKCopIDEgeyByZW5hbWUg XGZuZXh0ZmlsZSgpIHh4eF9cZmxwYWQoXCVpLDMsMCkgfQotCi1CdXQgaW4gdGhpcyBsb29wLCBL ZXJtaXQgc2tpcHMgZXZlcnkgb3RoZXIgZmlsZSAoYmVnaW5uaW5nIHdpdGggdGhlIGZpcnN0KQot YW5kIHRoZW4gcnVucyBvdXQgb2YgZmlsZXMgaGFsZndheSB0aHJvdWdoIHRoZSBsb29wLiAgV2h5 PyAgQmVjYXVzZSBpbgotY29tbWFuZHMgbGlrZSBSRU5BTUUgYW5kIERFTEVURSwgdGhlIGZpbGVu YW1lIHBhcnNlciBpcyBpbiBhIGNoYWluZWQgRkRCCi13aXRoIHRoZSBzd2l0Y2ggcGFyc2VyLiAg Rmlyc3QgdGhlIHN3aXRjaCBwYXJzZXIsIGNtc3dpKCksIGdldHMgaXRzIGhhbmRzIG9uCi1cZm5l eHRmaWxlKCksIHBhc3NpbmcgaXQgdGhyb3VnaCB0aGUgZXZhbHVhdG9yIGFuZCB0aHVzIGdldHRp bmcgdGhlIGZpcnN0Ci1maWxlbmFtZSwgd2hpY2ggaXQgdGhlbiBzZWVzIGlzIG5vdCBhIHN3aXRj aCwgc28gbm93IHRoZSBmaWVsZCBpcyBwYXJzZWQgYnkKLXRoZSBuZXh0IHBhcnNlciBpbiB0aGUg Y2hhaW4sIGNtaWZpKCksIHdoaWNoIGNhdXNlcyBcZm5leHRmaWxlKCkgdG8gYmUgCi1leGVjdXRl ZCBhZ2Fpbi4gIEluIGZhY3QsIHRoZSBGT1IgbG9vcCBoYXMgbm90aGluZyB0byBkbyB3aXRoOyB0 aGUgc2FtZQotdGhpbmcgaGFwcGVucyBsaWtlIHRoaXM6Ci0KLSAgdm9pZCBcZmZpbGVzKCopCi0g IGRlbGV0ZSBcZm5leHRmaWxlKCkKLQotVGhpcyBkZWxldGVzIG5vdCB0aGUgZmlyc3QgZmlsZSwg YnV0IHRoZSBzZWNvbmQgb25lLiAgT2J2aW91c2x5IHVzZXJzIGNhbiBiZQotdG9sZCBub3QgdG8g cmVmZXIgdG8gXGZuZXh0ZmlsZSgpIGluIGNoYWluZWQtZmRiIGZpZWxkczoKLQotICBmb3IgXCVp IDEgXGZmaWxlcygqKSAxIHsgLmYgOj0gXGZuZXh0ZmlsZSgpLCBkZWxldGUgXG0oZikgfQotCi1i dXQgdGhpcyBpcyBoYXJkbHkgaW50dWl0aXZlLiAgSSBoYWQgc29tZSBjbGV2ZXIgaWRlYXMgb2Yg aG93IHRvIG1ha2UKLVxmbmV4dGZpbGUoKSB3b3JrIGFzIGV4cGVjdGVkIGluIHRoaXMgY29udGV4 dCBidXQgaXQncyB3YXkgdG9vIG11Y2ggbWFnaWMuCi1CZXR0ZXIgdG8gc2ltcGx5IGRvY3VtZW50 IHRoYXQgXGZuZXh0ZmlsZSgpIGlzICJkZXByZWNhdGVkIiBhbmQgdGhlIGFycmF5Ci1mb3JtYXQg c2hvdWxkIGJlIHVzZWQ6Ci0KLSAgZm9yIFwlaSAxIFxmZmlsZXMoKiwmYSkgMSB7IGRlbGV0ZSBc JmFbXCVpXSB9Ci0KLVRoZSBkaWZmZXJlbmNlIGlzLCBhbiBhcnJheSBlbGVtZW50IGRvZXNuJ3Qg Y2hhbmdlIGV2ZXJ5IHRpbWUgaXQncyByZWZlcnJlZCB0byEKLQotQWRkZWQgYSAvUFJFU0VSVkUg c3dpdGNoIHRvIHRoZSBDT1BZIGNvbW1hbmQgdG8gcHJlc2VydmUgdGhlIHRpbWVzdGFtcCBhbmQK LXBlcm1pc3Npb25zIG9mIHRoZSBmaWxlLiAgSSBkaWQgdGhpcyB1c2luZyB0aGUgS2VybWl0IEFQ SXMgc28gaXQgc2hvdWxkIHdvcmsKLWZvciBhbnkgdmVyc2lvbiBvZiBDLUtlcm1pdCBvciBLOTUu ICBja3V1c1syNl0uYywgMzAgTm92IDIwMDYuCi0KLUFkZGVkIENPUFkgL09WRVJXUklURTp7QUxX QVlTLE5FVkVSLE9MREVSLE5FV0VSfSB0byBjb250cm9sIG5hbWUgY29sbGlzaW9ucwotd2hlbiBj b3B5aW5nIGFjcm9zcyBkaXJlY3Rvcmllcy4gIGNrdXVzWzI2XS5jLCAxIERlYyAyMDA2LgotCi0t LS0gRGV2LjIzIC0tLQotCi1GaXhlZCBhIGJ1ZyBpbiBTRVQgVEVMTkVUIFBST01QVC1GT1ItVVNF UklELCBTRVQgQVVUSCBLRVJCRVJPU1s0NV0gUFJPTVBULAotYW5kIFNFVCBBVVRIIFNSUCBQUk9N UFQgaW4gd2hpY2ggdGhlIHVzZXIncyBzdHJpbmcgd2FzIGNvbXBhcmVkIHdpdGggYQotbGl0ZXJh bCAocyA9PSAiIiksIHJlcG9ydGVkIGJ5IFBhdm9sIFJ1c25hay4gIFdvcnNlLCBlbXB0eSBzdHJp bmdzIChpZiB0aGUKLXRlc3Qgc3VjY2VlZGVkKSB3ZXJlIHR1cm5lZCBpbnRvIG51bGwgcG9pbnRl cnMsIGFuZCB0aGVuIGZlZCB0byBzdHJsZW4oKS4KLUZpeGVkIGluIGNrdXVzMy5jLCA1IERlYyAy MDA2LgotCi1BZGRlZCBhbiBvcHRpb25hbCA0dGggYXJndW1lbnQgdG8gXGZpbmRleCgpLCBcZnJp bmRleCgpLCBcZnNlYXJjaCgpLCBhbmQKLVxmcnNlYXJjaCgpOiB0aGUgZGVzaXJlZCBvY2N1cnJl bmNlIG51bWJlciBvZiB0aGUgc2VhcmNoZWQtZm9yIHN0cmluZy4KLVxmcnNlYXJjaCgpIHdhcyBh IGJpdCB0cmlja3kuICBja3V1c1syNF0uYywgNyBEZWMgMjAwNi4KLQotQWRkZWQgXGZjb3VudChz MSxzMikgdG8gdGVsbCB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHMxIGluIHMyLgotY2t1 dXNbMjRdLmMsIDggRGVjIDIwMDYuCi0KLUFkZGVkIFxmZnVuY3Rpb24oczEpIHRvIHRlbGwgaWYg YSBnaXZlbiBidWlsdC1pbiBmdW5jdGlvbiBpcyBhdmFpbGFibGUuCi1ja3V1c1syNF0uYywgOCBE ZWMgMjAwNi4KLQotQ2hhbmdlZCBSRU5BTUUgL0NPTExJU0lPTjpQUk9DRUVEIHRvIGJlIC9DT0xM SVNJT046U0tJUCwgd2hpY2ggaXMgY2xlYXJlci4KLWNrdXVzWzI2XS5jLCA4IERlYyAyMDA2Lgot Ci1Gb3IgY29tbXVuaWNhdGlvbiBwcm90b2NvbHM6IElOUFVUIC9DT1VOVDpuIHRvIHJlYWQgZXhh Y3RseSBuIGNoYXJhY3RlcnMKLXdpdGhvdXQgYW55IG1hdGNoaW5nLiAgQ2FuIGJlIHVzZWQsIGZv ciBleGFtcGxlLCB3aXRoIENPTlRFTlRfTEVOR1RIIGluIENHSQotc2NyaXB0czsgTlVMIGNoYXJh Y3RlcnMgYXJlIGNvdW50ZWQgYnV0IG5vdCBjb2xsZWN0ZWQuICBja3V1c3IuW2NoXSwKLWNrdXVz NC5jLCA4IERlYyAyMDA2LgotCi1UaGVyZSB3YXMgYSBiYWQgYnVnIGluIHRoZSBkYXRlLXBhcnNp bmcgcm91dGluZXM7IGl0J3MgYmVlbiB0aGVyZSBmb3IgeWVhcnMuCi1JZiBhIGRhdGUgc3RyaW5n IGluY2x1ZGVzIGEgdGltZXpvbmUsIGUuZy4gIlNhdCwgOSBEZWMgMjAwNiAxOToyNjoyMyBFU1Qi LAotYW5kIGNvbnZlcnRpbmcgdG8gR01UIGNoYW5nZXMgdGhlIGRhdGUsIHRoZSB2YXJpYWJsZXMg Zm9yIGRheSwgbW9udGgsIGFuZAoteWVhciAod2hpY2ggYXJlIHVzZWQgbGF0ZXIpIHdlcmUgbm90 IHVwZGF0ZWQsIGFuZCB0aGUgZmluYWwgcmVzdWx0IHdhcyBhIGRheQotb2ZmLiAgRml4ZWQgaW4g Y21jdnRkYXRlKCk6IGNrdWNtZC5jLCAxMCBEZWMgMjAwNi4KLQotQnVpbHQgT0sgd2l0aCBTU0wv VExTLiAgVGVzdGVkIHdpdGggdGhlIFBPUCBzY3JpcHQsIGZvdW5kIHRoYXQgSSBicm9rZSBJTlBV VAotd2hlbiBhZGRpbmcgdGhlIC9DT1VOVCBmZWF0dXJlOyB0aGVyZSB3YXMgYSBwYXRoIHRocm91 Z2ggdGhlIGNvZGUgdGhhdCBjb3VsZAotbGVhdmUgdGhlICJhbnljaGFyIiB2YXJpYWJsZSB1bnNl dCBhbmQgdGhlcmVmb3JlIHJhbmRvbS4gIEZpeGVkIGluCi1kb2lucHV0KCkuICBUaGUgUE9QIHNj cmlwdCwgd2hpY2ggZG9lcyBub3QgdXNlIC9DT1VOVCwgd29ya3MgYWdhaW4gYW5kIHNvCi1kb2Vz IGEgbmV3IENHSSBzY3JpcHQsIHdoaWNoIGRvZXMgdXNlIC9DT1VOVC4gIGNrdXVzNC5jLCAxMCBE ZWMgMjAwNi4KLQotU3VwcGxpZWQgYSBtaXNzaW5nIGNvbW1hIGluIHRoZSBoZWxwLXRleHQgYXJy YXkgZm9yIEhFTFAgU0VUIFRFUk1JTkFMLCB3aGljaAotcmVzdWx0ZWQgaW4gYmFkIGZvcm1hdHRp bmcgaW4gSzk1IGFyb3VuZCBTRVQgU05JLUZJUk1XQVJFLVZFUlNJT05TLgotY2t1dXMyLmMsIDEw IERlYyAyMDA2LgotCi1NYWRlICJoZWxwIGxvY3VzIiBhIHN5bm9ueW0gZm9yICJoZWxwIHNldCBs b2N1cyIuICBja3V1c3IuW2NoXSwgY2t1dXMyLmMsCi0xMSBEZWMgMjAwNi4KLQotVGhpcyBtb3Ju aW5nIHRoZSBDb2x1bWJpYSBGVFAgc2VydmVyIHdhcyBtYWxmdW5jdGlvbmluZyBpbiBhIHBlcmZl Y3Qgd2F5Ci1mb3IgbWUgdG8gaW1wbGVtZW50IGFuZCB0ZXN0IGFuIEZUUCB0aW1lb3V0IG1lY2hh bmlzbS4gIFRoZSBzZXJ2ZXIgd291bGQKLWNsb3NlIHRoZSBkYXRhIGNvbm5lY3Rpb24gYWZ0ZXIg c2VuZGluZyB0aGUgZmlsZSwgYnV0IHRoZSBjbGllbnQgbmV2ZXIgc2F3Ci10aGUgY2xvc2UgYW5k IHdhcyBzdHVjayBmb3JldmVyIGluIGEgcmVjdigpLiAgSSBhZGRlZCBjb2RlIHRvIGRvIGEgc2Vs ZWN0KCkKLW9uIHRoZSBkYXRhIGNvbm5lY3Rpb24gcHJpb3IgdG8gZW50ZXJpbmcgdGhlIHJlY3Yo KSwgd2l0aCBhIHRpbWVvdXQgb24gdGhlCi1zZWxlY3QoKSB0aGF0IHRoZSB1c2VyIGNhbiBlc3Rh Ymxpc2ggd2l0aCBTRVQgRlRQIFRJTUVPVVQuICBCdWlsdCBhbmQgdGVzdGVkCi1vbiBTb2xhcmlz IDksIGNsZWFyLXRleHQgRlRQLiAgQWxzbyBidWlsdCBjbGVhbmx5IGZvciBGVFBTIGFuZCB0ZXN0 ZWQKLWFnYWluc3QgYSBzZXJ2ZXIgdGhhdCBkb2VzIG5vdCBoYW5nOyBJIGRvbid0IGhhdmUgYWNj ZXNzIHRvIGFuIEZUUFMgc2VydmVyCi10aGF0IHdvdWxkIHRpY2tsZSB0aGUgdGltZW91dCBjb2Rl LiAgY2tjZnRwLmMsIDExIERlYyAyMDA2LgotCi0tLS0gRGV2LjI0IC0tLQotCi1GaXhlZCBhIGJ1 ZyBpbiB0aGUgSU5QVVQgL0NPVU5UOiBwYXJzZXI6IHRoZSBhcnJheSBvZiBzZWFyY2ggc3RyaW5n cyB3YXMKLW5ldmVyIGluaXRpYWxpemVkLCB3aGljaCBkaWRuJ3QgbWF0dGVyIGJlZm9yZSwgYnV0 IHdpdGggL0NPVU5UOiwgaWYgdGhlCi1maXJzdCBlbGVtZW50IHdhcyBub3QgYSBOVUxMIHBvaW50 ZXIsIHdlJ2QgdHJlYXQgaXQgYXMgYSBzZWFyY2ggc3RyaW5nLCBhbmQKLXRoZW4gaWYgaXQgaGFw cGVuZWQgdG8gbWF0Y2ggc29tZXRoaW5nIGluIHRoZSBpbnB1dCBzdHJlYW0sIHRoZSBvcGVyYXRp b24KLXdvdWxkIHN0b3AgYmVmb3JlIHRoZSBjb3VudCB3YXMgZXhoYXVzdGVkLiAgRml4ZWQgYnkg KGEpIGluaXRpYWxpemluZyB0aGUKLWFycmF5LCBhbmQgKGIpIGlnbm9yaW5nIGFueSBzZWFyY2gg c3RyaW5ncyBpZiAvQ09VTlQ6IHdhcyBnaXZlbi4gIGNrdXVzci5jLAotMTMgRGVjIDIwMDYuCi0K LVJlbW92ZWQgYSBkZWJ1ZygpIHN0YXRlbWVudCBmcm9tIHpzYXR0cigpIHRoYXQgc3VkZGVubHkg c3RhcnRlZCBtYWtpbmcgc29tZQotdmVyc2lvbiBvZiBnY2MgY29tcGxhaW4sIHJlcG9ydGVkIGJ5 IEdlcnJ5IEJlbGFuZ2VyLiAgY2t1ZmlvLmMsIDEzIERlYyAyMDA2LgotCi0tLS0gRGV2LjI1IC0t LQotCi1Tb21lIGNhc3RzIGZvciB0aGUgMyBpbnRlcmlvciBhcmdzIG9mIHRoZSBuZXcgc2VsZWN0 KCkgY2FsbCBpbiBja2NmdHAuYwotZm9yIEhQLVVYIDkuICAxNCBEZWMgMjAwNi4KLQotQ2hhbmdl ZCBcZmtleXdvcmR2YWx1ZSgpIHRvIGFjY2VwdCBhIHN0cmluZyByYXRoZXIgdGhhbiBhIHNpbmds ZSB3b3JkCi1hcyBpdHMgc2Vjb25kIGFyZ3VtZW50LCBzbyB0aGF0IG1vcmUgdGhhbiBvbmUgc2Vw YXJhdG9yIGNvdWxkIGJlIHNwZWNpZmllZCwKLWFuZCB0byByZXR1cm4gLTEgb24gZXJyb3IsIDAg aWYgaXQgZm91bmQgbm90aGluZywgMSBpZiBnaXZlbiBhIGtleXdvcmQgYnV0Ci1ubyB2YWx1ZSwg YW5kIDIgaWYgdGhlcmUgd2FzIGEga2V5d29yZCBhbmQgYSB2YWx1ZS4gIGRva3d2YWwoKTogY2t1 dXNbMjRdLmMsCi0xNCBEZWMgMjAwNi4KLQotQ2hlY2tlZCBGVFAgdGltZW91dCBvbiBjb21tYW5k IGNoYW5uZWwgd2l0aCBGVFAgRElSRUNUT1JZIG9mIGEgYmlnIGRpcmVjdG9yeQotdXNpbmcgYSBw YXRoIGludG8gb3VyIGZ0cCBzZXJ2ZXIgdGhhdCBwcmVzZXJ2ZXMgdGhlIGhhbmdpbmcgYmVoYXZp b3IuICBUaGUKLXRpbWVvdXQgd2FzIGFjdHVhbGx5IHdvcmtpbmcsIGJ1dCB0aGUgZmFpbHVyZSBj b25kaXRpb24gd2Fzbid0IHByb3BhZ2F0aW5nCi1iYWNrIHRvIHRoZSB1c2VyLCBhbmQgdGhlcmUg d2FzIG5vIGVycm9yIG1lc3NhZ2UuICBGaXhlZCBpbiBkb2Z0cHJlY3YyKCkgYW5kCi1mYWlsZnRw cmVjdjIoKTogY2tjZnRwLmMsIDE1IERlYyAyMDA2LgotCi1BZGRlZCB0aGUgb2J2aW91cyB0aW1l b3V0IGNoZWNrcyBmb3IgRlRQIHVwbG9hZHMsIGJ1dCBJIGhhdmUgbm8gd2F5IHRvIHRlc3QKLXRo ZSBjb2RlIHNpbmNlIG91ciBtaXNiZWhhdmluZyBGVFAgc2VydmVyIGRvZXMgbm90IGhhbmcgd2hl biByZWNlaXZpbmcKLWZpbGVzLCBvbmx5IHdoZW4gc2VuZGluZyB0aGVtLiAgQnV0IHVwbG9hZHMg d29yayBib3RoIHdpdGggYW5kIHdpdGhvdXQgYQotdGltZW91dCBzZXQsIHNvIGF0IGxlYXN0IG5v IGhhcm0gaXMgZG9uZS4gIGNrY2Z0cC5jLCAxNyBEZWMgMjAwNi4KLQotV2hlbiBkb3dubG9hZGlu ZyB3aXRoIEZJTEUgREVTVElOQVRJT04gTk9XSEVSRSAoPSAvQ0FMSUJSQVRFKSwgS2VybWl0IHN0 aWxsCi1jaGVja2VkIHRoZSBzaXplIG9mIHRoZSBpbmNvbWluZyBmaWxlIGFuZCByZWZ1c2VkIGl0 IGlmIHRoZXJlIHdhc24ndCBlbm91Z2gKLWZyZWUgZGlzayBzcGFjZSwgb24gcGxhdGZvcm1zIChz dWNoIGFzIFZNUykgd2hlcmUgemNoa3NwYSgpKSBhY3R1YWxseSB3b3JrczsKLXJlcG9ydGVkIGJ5 IEJvYiBHZXplbHRlci4gIGNrY2ZuMy5jLCAxOCBEZWMgMjAwNi4KLQotQnVpbHQgb24gTWFjIE9T IFggMTAuNC44IGFuZCBOZXRCU0QgMy4xX1JDMywgYWxsIE9LLiAgMTkgRGVjIDIwMDYuCi0KLS0t LSBEZXYuMjYgLS0tCi0KLUJ1aWx0IG9uIFZNUyA3LjMtMi9BbHBoYS4gIEhhZCB0byBzcXVlbGNo IGEgY291cGxlIGNvbXBpbGVyIHdhcm5pbmdzIGJ5Ci1jaGFuZ2luZyBzb21lIGludHMgaW4gdGhl IG5ldyBcZnBpY3R1cmVpbmZvKCkgY29kZSBmcm9tIHVuc2lnbmVkIHRvIHNpZ25lZCwKLWFuZCBm aXggYSB0eXBvIGluIHRoZSBwcm90b3R5cGUgZm9yIHRoZSBuZXcgZ2V0dGNwcG9ydCgpIGZ1bmN0 aW9uLgotY2tjbmV0LmgsIGNrdXVzNC5jLCAyMiBEZWMgMjAwNi4KLQotLS0tIERldi4yNyAtLS0K LQotUGFyYW1ldGVyaXplZCBwdHkgcm91dGluZXMgYW5kIGFsbCByZWZlcmVuY2VzIHRvIHRoZW0g Zm9yIGZpbGUgZGVzY3JpcHRvciwKLXJhdGhlciB0aGFuIHRvIHVzZSBnbG9iYWwgdHR5ZmQsIHRo dXMgYWxsb3dpbmcgcHR5cyB0byBiZSBjcmVhdGVkIGZvcgotZGlmZmVyZW50IHB1cnBvc2VzLiAg VGVzdGVkIG9uIFNvbGFyaXMgOSBhbmQgTWFjIE9TIFggMTAuNC44LCB3aXRoICJzZXQgaG9zdAot L2Nvbm5lY3QgL3B0eSBlbWFjcyIgKGZpbmUgaW4gYm90aCBjYXNlcyksIGFuZCAobW9yZSB0byB0 aGUgcG9pbnQpICJzZXQgaG9zdAotL2Nvbm5lY3QgL3B0eSBrZXJtaXQiIC0tIGhlcmUgd2UgbWFr ZSBhIGNvbm5lY3Rpb24gZnJvbSBvbmUgS2VybWl0IHByb2Nlc3MKLXRvIGFub3RoZXIgYW5kIHRy YW5zZmVyIGEgZmlsZTsgd29ya3MgZmluZSBhbmQgd2Fzbid0IGVzcGVjaWFsbHkgc2xvdyBlaXRo ZXI7Ci1hIGdvb2Qgc2lnbi4gIGNrY2RlYi5oLCBja3V0aW8uYywgY2t1cHR5LmMsIDIyIERlYyAy MDA2LgotCi1DcmVhdGVkIGEgbmV3IHZlcnNpb24gb2YgdHRydW5jbWQoKSBjYWxsZWQgdHR5cHR5 Y21kKCksIHdoaWNoIHdvcmtzIGJ5Ci1jYWxsaW5nIGRvX3B0eSgpIHRvIGdldCBhIHB0eSB0byBy dW4gdGhlIGNvbW1hbmQgb24sIGFuZCB0aGVuIGluIGEgbG9vcCwKLXJlYWRzIGZyb20gdGhlIHB0 eSBhbmQgd3JpdGVzIHRvIHRoZSBuZXQgYW5kIHJlYWRzIGZyb20gdGhlIG5ldCBhbmQgd3JpdGVz Ci10byB0aGUgcHR5LCB1c2luZyBzZWxlY3QoKSB0byB3aGljaCBvZiB0aG9zZSBpdCBzaG91bGQg ZG8gb24gZWFjaCBwYXNzLgotRmlyc3QgY3V0IGp1c3QgdXNlcyBzaW5nbGUtYnl0ZSByZWFkcyBh bmQgd3JpdGVzLiAgVGVzdGVkIHVzaW5nIEtlcm1pdAotaXRzZWxmIGFzIGFuIGV4dGVybmFsIHBy b3RvY29sLiAgV29ya3MgYnV0IHNsb3dseTogNjAwMGNwcy4gIFptb2RlbSBkb2Vzbid0Ci13b3Jr IGF0IGFsbC4gIGNrdXRpby5jLCAyNCBEZWMgMjAwNi4KLQotQ2hhbmdlZCBzaW5nbGUtY2hhcmFj dGVyIHJlYWQoKSBhbmQgd3JpdGUoKSB0byBidWZmZXJlZCByZWFkcyBhbmQgd3JpdGVzLAotd2l0 aCB0dHhpbigpIGFuZCB0dG9sKCkgdXNlZCBmb3IgbmV0d29yayBpL28uICBVc2luZyBLZXJtaXQg YXMgdGhlIGV4dGVybmFsCi1wcm90b2NvbCwgdGhpcyBnaXZlcyA0NTBLY3BzIChhYm91dCAxLzMg bm9ybWFsIG9uIHRoaXMgY29ubmVjdGlvbikuICAKLQotQnV0IG5vdyB0aGVyZSdzIGEgcHJvYmxl bTogdGhlIGxvb3AgZG9lc24ndCBrbm93IHdoZW4gdG8gc3RvcC4gIEhvdyBkb2VzIGl0Ci1rbm93 IHdoZW4gdGhlIHByb2Nlc3MgdGhhdCBpcyBydW5uaW5nIG9uIHRoZSBwdHkgaGFzIGV4aXRlZD8g IFdpdGggc2luZ2xlCi1jaGFyYWN0ZXIgcmVhZCgpJ3MgdGhhdCBhcmUgZXhlY3V0ZWQgdW5jb25k aXRpb25hbGx5IHdoZW4gc2VsZWN0KCkgc2F5cyB0aGUKLXB0eSBoYXMgZGF0YSB3YWl0aW5nLCBh cyBpbiB0aGUgZmlyc3QgcGFzcywgSSBnZXQgRUlPIGlmIHRoZXJlIGFjdHVhbGx5Ci1pc24ndCBh bnksIGFuZCBjYW4gZXhpdCB0aGUgbG9vcC4gIEJ1dCBub3csIHRvIGF2b2lkIGJsb2NraW5nLCBJ IGNhbGwKLWluX2NoaygpIHRvIHNlZSBob3cgbXVjaCBkYXRhIGlzIHdhaXRpbmcsIGFuZCBJIGRv bid0IHRyeSB0byByZWFkIGFueXRoaW5nCi1pZiBpdCBzYXlzIG5vdGhpbmcgaXMgd2FpdGluZy4g IElmIHRoZSBwcm9jZXNzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHR5IGZpbGUKLWRlc2NyaXB0b3Ig aGFzIHRlcm1pbmF0ZWQsIGluX2NoaygpIHdvdWxkIHByZXN1bWFibHkgZ2V0IHNvbWUga2luZCBv ZiBlcnJvciwKLWJ1dCBpdCBkb2Vzbid0LiAgSSBjaGFuZ2VkIGRvX3B0eSB0byByZXR1cm4gdGhl IHBpZCBvZiB0aGUgZm9yayB3aGVyZSBpdAotZXhlY3MgaXRzIGNvbW1hbmQgc28gd2UgY2FuIGNo ZWNrIHRoZSBwaWQgd2l0aCBraWxsKHBpZCwwKSB3aGVuIGluX2NoaygpIG9mCi10aGUgcHR5IHNh eXMgMCwgYnV0IHRoaXMgZG9lc24ndCBoZWxwIGVpdGhlcjsgaXQgc2VlbXMgbGlrZSB0aGUgcHJv Y2VzcyBpcwotbm90IGV4aXRpbmcsIGJ1dCBvZiBjb3Vyc2UgaXQgaXMuCi0KLUkgY291bGQgbm90 IGZpbmQgYW55IGxlZ2l0aW1hdGUgd2F5IHRvIHRlc3Qgd2hlbiB0aGUgcHR5IGZvcmsgdGVybWlu YXRlZC4KLVNlbGVjdCgpIGFsd2F5cyBzYXlzIHRoZSBwdHkgZmlsZSBkZXNjcmlwdG9yIHdhcyBy ZWFkeSwgbm8gbWF0dGVyIHdoYXQuCi1TZWxlY3QoKSBuZXZlciByZXBvcnRzIGFuIGV4Y2VwdGlv biBvbiB0aGUgcHR5IGZpbGUgZGVzY3JpcHRvcjsKLWluX2NoayhwdHlmZCkgcmV0dXJucyAwIGFu ZCBub3QgYW4gZXJyb3IuICByZWFkKHB0eWZkLC4uLikgZ2V0cyAwIGJ1dCBub3QgYW4KLWVycm9y LiAgZmNudGwocHR5ZmQsLi4uKSBkb2Vzbid0IGdldCBhbiBlcnJvci4gIEZpbmFsbHkgSSB0cmll ZAotd3JpdGUocHR5ZmQsYywwKSBhbmQgdGhpcyBpbmRlZWQgZ2V0cyBFSU8gKGkvbyBlcnJvciku ICBXaXRoIHRoaXMsIHVzaW5nCi1LZXJtaXQgYXMgdGhlIGV4dGVybmFsIHByb3RvY29sIHdvcmtz IGZpbmUgaW4gU29sYXJpcyBidXQgSSB0ZW5kIHRvIHRoaW5rCi10aGlzIHRyaWNrIHdpbGwgbm90 IGJlIHZlcnkgcG9ydGFibGUgKGl0IGlzbid0KS4gIDI0IERlYyAyMDA2LgotCi1NYWRlIHR0cHR5 Y21kKCkgdXNlIGEgbW9yZSBpbnRlbGxpZ2VudCBidWZmZXJpbmcgc2NoZW1lLCBmaXhlZCBhIGZl dyB0aGluZ3MKLWFib3V0IGhvdyBJIHdhcyBzZXR0aW5nIHVwIHRoZSBzZWxlY3QoKSBjYWxsIHRo YXQgc2hvdWxkIGFkZHJlc3Mgc29tZSBvZgoteWVzdGVyZGF5J3MgcHJvYmxlbXMuICBTdGlsbCBk b2Vzbid0IHdvcmsgYnV0IGl0J3MgcHJvZ3Jlc3MuICBBOiAyNSBEZWMgMjAwNi4KLQotRGVidWdn aW5nIHllc3RlcmRheSdzIGNvZGUuLi4gIFN0aWxsLCB0aGUgZXJyb3IgY29uZGl0aW9ucyBhcmUg bmV2ZXIgc2V0LAotd2UgbmV2ZXIgZGV0ZWN0IHdoZW4gdGhlIHB0eSBjbG9zZXMuICBJbiBTb2xh cmlzLCBpZiBzZWxlY3QoKSBzYXlzIHB0eWZkIGlzCi1yZWFkeSB0byByZWFkIGJ1dCBpbl9jaGso KSBzYXlzIHRoZXJlIGFyZSBubyBjaGFyYWN0ZXJzIHRoZXJlLCB3ZSBjYW4gdHJlYXQKLXRoaXMg YXMgYSBsb29wLWV4aXQgY29uZGl0aW9uLiAgQnV0IGluIE5ldEJTRCwgaW5fY2hrKCkgYWx3YXlz IHNheXMgMCB3aGVuCi11c2VkIG9uIGEgcHR5IChidXQgd29ya3MgT0sgb24gYSBzZXJpYWwgb3Ig bmV0IGNvbm5lY3Rpb24pLgotCi1SZWFsaXplZCBJIGNvdWxkIG5vdCB1c2UgaW5fY2hrKCkgb24g dGhlIHB0eSBiZWNhdXNlIHRoZXJlIGlzIHRvbyBtdWNoCi1iYWdnYWdlIHdpdGggdGhlIGNvbW11 bmljYXRpb24gcGF0aCAtLSBteXJlYWQoKSwgZXRjIGV0YykgLS0gc28gSSByZXBsYWNlZAotdGhp cyB3aXRoIGEgc2ltcGxlIGlvY3RsKHB0eWZkLEZJT05SRUFELCZuKS4gIFRoaXMgd29ya3MgZmlu ZSBpbiBTb2xhcmlzIGJ1dAotYWx3YXlzIHJldHVybnMgMCBpbiBOZXRCU0QsIGRlc3BpdGUgd2hh dCB0aGUgbWFuIHBhZ2Ugc2F5cyAoaS5lLiB0aGF0IHRoaXMKLWZ1bmN0aW9uIGNhbiBiZSB1c2Vk IG9uIGFueSBmaWxlIGRlc2NyaXB0b3IpLgotCi1PSywgbGV0J3Mgc2VlLi4uLiBzZWxlY3QoKSBk b2VzIG5vdCByZXR1cm4gdXNlZnVsIHJlc3VsdHMuICBJdCBzYXlzCi1jaGFyYWN0ZXJzIGFyZSB3 YWl0aW5nIG9uIHB0eWZkIHdoZW4gdGhleSBhcmUgbm90LCBhbmQgaXQgbmV2ZXIgZGV0ZWN0cyB0 aGUKLWNsb3N1cmUgb2YgdGhlIHB0eS4uLi4uICBXZWxsIG9mIGNvdXJzZSBub3QsIGJlY2F1c2Ug d2UgYXJlIHRoZSBvbmVzIHdobwotaGF2ZSB0byBjbG9zZSBpdC4gIEp1c3QgYmVjYXVzZSB0aGUg cHJvY2VzcyBoYXMgc3RvcHBlZCBkb2Vzbid0IG1lYW4gdGhlIHB0eQotaXMgY2xvc2VkLiAgU28g d2UncmUgYmFjayB0byBzcXVhcmUgb25lLCBob3cgZG8gd2Uga25vdyB3aGVuIHRvIGNsb3NlIGl0 PwotY2t1cHR5LmMgc2VlbXMgdG8ga2VlcCB0aGUgcHJvY2VzcyBJRCBpbiBhIGdsb2JhbCB2YXJp YWJsZSwgcHR5X2ZvcmtfcGlkCi0od2hpY2ggaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBwaWQgbm93 IHJldHVybmVkIGJ5IGRvX3B0eSgpLCB3aGljaCBpcwotdXNlbGVzcywgYnV0IEkgZG9uJ3QgdW5k ZXJzdGFuZCB3aHkpLiAgQnV0IGl0IGRvZXNuJ3QgbWF0dGVyIGJlY2F1c2Ugd2hlbiB3ZQota2ls bChwdHlfZm9ya19waWQsMCksIHdlIHN0aWxsIGdldCBubyBlcnJvciBvZiBhbnkga2luZCwgZXZl biBhZnRlciB3ZSBrbm93Ci10aGUgcHJvY2VzcyBoYXMgZXhpdGVkLiAgSSBhbSBjb21wbGV0ZWx5 IGZsdW1tb3hlZC4gIHNlbGVjdCgpIGxpZXMsIGFuZCBldmVuCi1pZiBpdCBkaWRuJ3QsIHRoZXJl IGlzIHNpbXBseSBubyBjb21wbGV0aW9uIGNyaXRlcmlvbi4gIEluIHRoZSBsb29wLAotc2VsZWN0 KCkgYWx3YXlzIHNheXMgdGhhdCB0aGUgcHR5IGlzIHJlYWR5IHRvIHJlYWQuICBUbyBiZSBjb250 aW51ZWQuCi0yNiBEZWMgMjAwNi4KLQotQmFjayB0byBTcXVhcmUgT25lLCBzaW5nbGUtYnl0ZSBy ZWFkcyBhbmQgd3JpdGVzLgotCi0gLiBUaGlzIHdvcmtzIGZvciBib3RoIHJpcHBsZSBhbmQgS2Vy bWl0LgotIC4gRG9lc24ndCB3b3JrIGZvciBabW9kZW0gYnV0IHdlJ2xsIGRlYWwgd2l0aCB0aGF0 IGxhdGVyLgotIC4gSW4gdGhpcyBjYXNlIEZEX0lTU0VUKHB0eWZkKSBpcyBzdGlsbCB0cnVlIGFm dGVyIHB0eSBjbG9zZXMuCi0KLUJ1dCB0aGUgZW5zdWluZyByZWFkKCkgZ2V0cyBFSU8gc28gd2Ug a25vdyB0aGUgcHR5IGlzIGdvbmUuICBUaGF0IG1lYW5zIHRoZQotc2FtZSB0aGluZyBzaG91bGQg aGFwcGVuIGluIHRoZSBidWZmZXJlZCB2ZXJzaW9uLCBubz8gIFllczsgSSB3ZW50IGJhY2sgdG8K LXRoZSBidWZmZXJlZCB2ZXJzaW9uIGFuZCByZXBsYWNlZCBhbGwgdGhlIG90aGVyIG5vbndvcmtp bmcgdGVzdHMgYnkgYQotYmxvY2tpbmcgcmVhZCBvZiAxIGJ5dGUgb24gdGhlIHB0eSBhbmQgdGhp cyBkZXRlY3RzIHRoZSB0ZXJtaW5hdGlvbi4gIE5vdzoKLQotIC4gcmlwcGxlIHdvcmtzIHBlcmZl Y3RseSAob2YgY291cnNlIGl0J3Mgb25seSBvbmUtd2F5KS4KLSAuIEtlcm1pdCBmYWlscwotCi1M ZXQncyBjYWxsIHRoZSByZW1vdGUsIGZvcmtlZCwgcmVkaXJlY3RlZCwgZXh0ZXJuYWwgS2VybWl0 IEEgYW5kIGl0cwotbG9jYWwgcGFydG5lciBCLiAgQSBzZW5kcyBpdHMgUy1wYWNrZXQsIEIgcmVj ZWl2ZXMgaXQgT0sgYW5kIEFja3MuCi1BIGFwcGFyZW50bHkgZG9lcyBub3QgcmVjZWl2ZSB0aGUg QUNLIGluIHRpbWUsIHNvIHNlbmRzIHRoZSBTIGFnYWluLCBidXQgT0suCi1mb2xsb3dlZCBpbW1l ZGlhdGVseSBieSB0aGUgRi4gIEIgQWNrcyB0aGUgRi4gIEEgc2VuZHMgdGhlIEEsIEIgQWNrcyBp dC4KLUJ1dCBub3cgQSBzZW5kcyBhIHBpZWNlIG9mIHRoZSBwcmV2aW91cyBGIHBhY2tldCBhbmQg dGhlIHRoZSBmaXJzdCBwaWVjZQotb2YgYSBEIHBhY2tldC4KLQotQ2xlYXJseSB0aGUgYnVmZmVy aW5nIGlzIG1lc3NlZCB1cC4gIFN1cmUgZW5vdWdoLCB0aGVyZSB3YXMgYW4gZXh0cmFuZW91cwot c3RhdGVtZW50IGluY3JlbWVudGluZyBhIHJlYWQgcG9pbnRlciBpbiBhIHdyaXRlIHNlY3Rpb24u ICBSZW1vdmluZyB0aGF0Ci1jbGVhcmVkIHVwIHRoZSBwcm9ibGVtcyB3aXRoIEtlcm1pdCwgbm93 IHdlIGNhbiBzZW5kIGFuZCByZWNlaXZlIHN1YnN0YW50aWFsCi1maWxlcyBlZmZpY2llbnRseSBp biByZW1vdGUgbW9kZS4gIFptb2RlbSBzZWVtcyB0byB3b3JrIHRvbywgZXhjZXB0IHRoYXQgYXQK LXRoZSBiZWdpbm5pbmcgYSBidW5jaCBvZiAiKipCMDgwMDAwMDAwMDAyMmQiJ3MgYXJlIHN0dWZm ZWQgaW50byBLZXJtaXQncwotY29tbWFuZCBidWZmZXIsIHNvIGFmdGVyIHRoZSB0cmFuc2ZlciB3 ZSBnZXQgc29tZSBlcnJvciBtZXNzYWdlcy4KLQotSW4gbG9jYWwgbW9kZSwgb3ZlciBhIFRlbG5l dCBjb25uZWN0aW9uLCBLZXJtaXQgd29ya3MgZmluZS4gIFptb2RlbSB3b3JrcwotT0sgdG9vIGV4 Y2VwdCBpdCBkb2Vzbid0IGZpbmlzaCByaWdodCwgc28gYXQgdGhlIHZlcnkgZW5kIHJ6IG9uIHRo ZSBmYXIgZW5kCi1pcyBzdGlsbCB3YWl0aW5nIGZvciBzb21ldGhpbmc7IGlmIEkgY2FuY2VsIG91 dCBvZiBpdCB3aXRoIF5YXlheWF5YXlgsIGl0Ci1kZWxldGVzIHRoZSBmaWxlLiAgU28gdGhlcmUg c3RpbGwgaXMgc29tZXRoaW5nIHdyb25nIHdpdGggdGhlIHRlcm1pbmF0aW9uCi10ZXN0LgotCi1B bHNvIHlvdSBkb24ndCBzZWUgYW55dGhpbmcgb24geW91ciBzY3JlZW4gd2hlbiBydW5uaW5nIEtl cm1pdCBvciBabW9kZW0KLXRoaXMgd2F5LiAgVGhhdCdzIHRvIGJlIGV4cGVjdGVkLCBzaW5jZSB0 aGV5IGFyZSB1c2luZyBzdGRpbyBmb3IgdGhlCi10cmFuc2Zlciwgc28gdGhleSBjYW4ndCBhbHNv IGJlIGRpc3BsYXlpbmcgcHJvZ3Jlc3Mgb3Igb3RoZXIgbWVzc2FnZXMuCi0KLUJ1aWx0IHRoaXMg b24gTmV0QlNEIGFnYWluLi4uICBTZWVtcyB0byB3b3JrIHRoaXMgdGltZSwgYnV0IGhhcyB0cm91 YmxlCi1maW5pc2hpbmcsIGxpa2UgWm1vZGVtLiAgSG1tbSwgb24gY2xvc2VyIGV4YW1pbmF0aW9u LCBpdCB0dXJucyBvdXQgdGhhdAotc2luY2UgaW5fY2hrKCkgYWx3YXlzIHJldHVybnMgMCBvbiB0 aGUgcHR5ZmQsIHdlIGZhbGwgaW50byBvdXIgbmV3Ci1zaW5nbGUtYnl0ZSByZWFkIGNvZGUsIHNv IGl0J3MgcmVhbGx5IHNsb3csIGxpa2UgMTBLIGNwcyBvbiBhIGNvbm5lY3Rpb24KLXdoZXJlIDFN IGlzIHRoZSBub3JtLiAgMjcgRGVjIDIwMDYuCi0KLVN3aXRjaGVkIHRoZSBwdHkgZnJvbSBidWZm ZXIgcGVla2luZyAoRklPTlJFQUQpIGFuZCBibG9ja2luZyByZWFkcyB0byB0bwotbm9uYmxvY2tp bmcgcmVhZHMgKE9fTk9OQkxPQ0sgLyBPX05ERUxBWSkuICBXb3JrcyBqdXN0IGZpbmUgb24gTmV0 QlNEIGV4Y2VwdAotbm93IHdlIG5vIGxvbmdlciBnZXQgRUlPIGF0IHRoZSBlbmQgd2hlbiB0cnlp bmcgdG8gcmVhZCBmcm9tIHRoZSBwdHkgcHJvY2VzcwotdGhhdCBoYXMgZXhpdGVkLiAgSW4gZmFj dCwgd2UncmUgYmFjayB0byBzcXVhcmUgb25lIGFnYWluLiAgbm90IGlvY3RsKCksIG5vdAotZmNu dGwoKSwgbm90IHNlbGVjdCgpLCBub3QgZXZlbiByZWFkKCkgZ2V0cyBhbiBpL28gZXJyb3IgYWZ0 ZXIgdGhlIHB0eQotcHJvY2VzcyBleGl0cy4gIEJ1dCBpbiBOZXRCU0QsIHdlIGhhdmUgdG8gdXNl IG5vbmJsb2NraW5nIHJlYWRzIGJlY2F1c2UgLi4uCi1IbW1tbSwgbWF5YmUgc3dpdGNoIHRoZSBm ZCBiZXR3ZWVuIGJsb2NraW5nIGFuZCBub25ibG9ja2luZyBmb3IgdGhlIHRlc3QuLi4KLU5vcGUs IE5ldEJTRCBzZWVtcyB0byBiZSBob3BlbGVzcyAobGF0ZXIsIEVkIFJhdmluIGNvbmZpcm1lZCB0 aGF0IHNpbWlsYXIKLXByb2JsZW1zIGhhdmUgYmVlbiBvYnNlcnZlZCB3aXRoIG90aGVyIGFwcGxp Y2F0aW9ucyB0aGF0IHRyeSB0byBkbyB0aGlzKS4KLQotU3dpdGNoaW5nIHRvIExpbnV4LCBJIHNl ZSB0aGF0IHllc3RlcmRheSdzIFNvbGFyaXMgY29kZSAoYmxvY2tpbmcgcmVhZHMpCi13b3JrcyBl eGFjdGx5IHRoZSBzYW1lIHdheSBvbiBMaW51eC4KLQotVHJpZWQgdG9kYXkncyBPX05ERUxBWSBt ZXRob2Qgb24gU29sYXJpcy4gIEl0IHdvcmtzIHBlcmZlY3RseS4gIEFuZCB0aGVuIEkKLW1vdmVk IHRoaXMgb25lIHRvIExpbnV4IGFuZCBpdCB3b3JrcyBwZXJmZWN0bHkgdGhlcmUgdG9vLiAgRXhj ZXB0IGluIGJvdGgKLWNhc2VzIHdlIGhhdmUgdGhlIHdlaXJkIHRoaW5nIHdpdGggWm1vZGVtIGF0 IHRoZSBlbmQsIGJ1dCBJIHRoaW5rIHRoYXQncwotYmVjYXVzZSByei9zeiBkb24ndCB1c2Ugc3Rh bmRhcmQgaS9vLiAgT24gTmV0QlNELCBpdCBzdGlsbCBoYW5ncyBhdCB0aGUgZW5kLgotCi1UdXJu cyBvdXQgdGhhdCB0ZXN0aW5nIHRoZSBwaWQgd29ya3MgaW4gTmV0QlNELCBldmVuIHRob3VnaCBp dCBkaWRuJ3QgaW4KLVNvbGFyaXMuICBUdXJucyBvdXQgcmVhZCgpIGdldHMgYW4gaS9vIGVycm9y IGluIFNvbGFyaXMgYW5kIExpbnV4IGJ1dCBub3QKLWluIE5ldEJTRC4gIFNvIGNoZWNraW5nIHRo ZSByZWFkIHJlc3VsdCBmaXJzdCwgYW5kIHRoZW4gY2hlY2tpbmcgdGhlIHBpZAotaWYgcmVhZCgp IGdvdCB6ZXJvIGJ5dGVzIGNhdGNoZXMgYWxsIHRocmVlLiAgMjggRGVjIDIwMDYuCi0KLU5vdyB0 aGUgcXVlc3Rpb24gb2YgcmV0dXJuIGNvZGUuICBJbiB0aGUgb3JpZ2luYWwgdHRydW5jbWQoKSBm dW5jdGlvbiwgd2UgZG8KLWEgZm9yaygpIGFuZCBhIHdhaXQoKS4gIFdoZW4gdGhlIGV4dGVybmFs IHByb3RvY29sIHByb2dyYW0gZmluaXNoZXMsIHdhaXQoKQotZ2l2ZXMgdXMgaXRzIHJldHVybiBj b2RlIGFuZCB3ZSBjYW4gcGFzcyBpdCBvbiB0aHJvdWdoIFx2KHBleGl0c3RhdCkgYXMgd2VsbAot dHRydW5jbWQncyBvd24gcmV0dXJuIGNvZGUuICBCdXQgdHRwdHljbWQoKSBoYXMgdG8gaW50ZXJh Y3Qgd2l0aCB0aGUgcHR5Ci1jb250aW51b3VzbHksIHNvIGl0IGNhbid0IGp1c3Qgc2l0IGJhY2sg YW5kIHdhaXQoKSBmb3IgaXQuICBJbnN0ZWFkIHdlIGhhdmUKLXRvIGRldGVjdCB3aGVuIHRoZSBw cm9jZXNzIGhhcyBleGl0ZWQgYW5kIHRoZW4gY2FsbCB3YWl0cGlkKCkgb24gdGhlIGZvcmsKLXBp ZCwgYmVmb3JlIHNodXR0aW5nIGRvd24gdGhlIHB0eS4gIFRlc3RlZCBvbiBTb2xhcmlzIHVzaW5n IEtlcm1pdCBhcyB0aGUKLWV4dGVybmFsIHByb3RvY29sIGFuZCB0aGVuIGluZHVjaW5nIGZhaWx1 cmUsIG9yIGxldHRpbmcgaXQgcnVuIHRvCi1jb21wbGV0aW9uLiAgRkFJTFVSRSBhbmQgU1VDQ0VT UyBzZXQgYXBwcm9wcmlhdGVseSBpbiBlYWNoIGNhc2UuICBUZXN0ZWQKLXdpdGggWm1vZGVtIHRv bywgd29ya3MgT0sgZXhjZXB0IGZvciB0aGUgYWZvcmVtZW50aW9uZWQgY29zbWV0aWMgZ2xpdGNo IGF0Ci10aGUgZW5kLiAgVGVzdGVkIG9uIE5ldEJTRCwgYWxsIE9LLgotCi1UbyBtYWtlIEs1IGNv bm5lY3Rpb24gdG8gUGFuaXggZnJvbSBTcGFtOgotCi0gc2V0IHRlbG5ldCBkZWJ1ZyBvbgotIGF1 dGhlbnRpY2F0ZSBLNSBpbml0IC9yZWFsbTpQQU5JWC5DT00gL3Bhc3N3b3JkOnh4eHh4Ci0gc2V0 IGhvc3Qgc2hlbGwucGFuaXguY29tIDIzIC9rNWxvZ2luCi0KLUdvb2QuLi4gIE5vdyBJIHRyeSB0 byBzZW5kIGEgZmlsZSBmcm9tIFNwYW0gdG8gUGFuaXggb3ZlciB0aGUgSzUgY29ubmVjdGlvbgot dXNpbmcgS2VybWl0IGl0c2VsZiBhcyB0aGUgZXh0ZXJuYWwgcHJvdG9jb2wuICBJdCBmYWlscy4g IEluc3BlY3Rpb24gb2YgdGhlCi1kZWJ1ZyBsb2cgb24gdGhlIGZhciBzaWRlIHNob3dzIHRoYXQg dGhlIFMtUGFja2V0IHdhcyByZWNlaXZlZCBjb3JyZWN0bHksCi1nb29kISAgVGhpcyBtZWFucyB3 ZSBhcmUgcmVhZGluZyB0aGUgY2xlYXItdGV4dCBTLVBhY2tldCBmcm9tIHRoZSBleHRlcm5hbAot S2VybWl0IHByb2dyYW0sIGFuZCB0aGF0IHR0b2woKSBpcyBlbmNyeXB0aW5nIGFwcHJvcHJpYXRl bHkuCi0KLVRoZSByZW1vdGUgS2VybWl0IHNlbmRzIHRoZSBBY2sgYW5kIGdvZXMgdG8gcmVhZCB0 aGUgbmV4dCBwYWNrZXQ6IHR0aW5sKCkKLWNhbGxzIG15ZmlsbGJ1ZigpIGFuZDoKLQotICBTVk9S UE9TSVggbXlmaWxsYnVmIGNhbGxpbmcgcmVhZCgpCi0gIFNWT1JQT1NJWCBteWZpbGxidWY9MCAg ICAgICAgICAgICAgICA8LS0gcmVhZCByZXR1cm5zIDAKLSAgU1ZPUlBPU0lYIG15ZmlsbGJ1ZiB0 dGNhcnI9MgotICBTVk9SUE9TSVggbXlmaWxsYnVmIGVycm5vPTAgICAgICAgICAgPC0tIGFuZCBy ZXBvcnRzIG5vIGVycm9yCi0gIEhFWERVTVA6IG15Z2V0YnVmIHJlYWQgKC0zIGJ5dGVzKQotICBt eWdldGJ1ZiBlcnJubz0wCi0gIHR0aW5sIG15cmVhZCBmYWlsdXJlLCBuPS0zCi0gIHR0aW5sIG15 cmVhZCBlcnJubz0wCi0gIHR0aW5sIG5vbi1FSU5UUiAtM1tjbG9zaW5nXQotCi1UaGlzIGhhcHBl bnMgYmVjYXVzZSBteWZpbGxidWYoKSBkZWxpYmVyYXRlbHkgcmV0dXJucyAtMyB3aGVuIHJlYWQo KSBnZXRzIDAKLWJ5dGVzLiAgSSBkb24ndCB1bmRlcnN0YW5kIHdoeSB0aGlzIGhhcHBlbnMgYnV0 IHRoZSByZWFsIHByb2JsZW0gaXMgeWV0IHRvCi1jb21lLiAgVGhlIGxvY2FsIEtlcm1pdCAodGhl IG9uZSB0aGF0IGhhcyBtYWRlIHRoZSBzZWN1cmUgY29ubmVjdGlvbiBhbmQgaXMKLXJ1bm5pbmcg dGhlIGV4dGVybmFsIHByb3RvY29sIHRocm91Z2ggdHRwdHljbWQoKSkgZXZlbnR1YWxseSBmaWd1 cmVzIG91dAotdGhhdCB0aGUgdHJhbnNmZXIgZmFpbGVkIGFuZCB3aGVuIHdlIHJlY29ubmVjdCwg d2UgZ2V0IHRvdGFsIGdhcmJhZ2UgLS0gdGhlCi1lbmNyeXB0aW9uIGVpdGhlciBzdG9wcGVkIGhh cHBlbmluZywgb3IgZ290IG91dCBvZiBzeW5jLgotCi1Mb29raW5nIGF0IHRoZSBsb2NhbCBkZWJ1 ZyBsb2csIHR0b2woKSBpcyBkb2luZyBpdHMgam9iLCBjb252ZXJ0aW5nIHRoZQotaW5pdGlhbCAi a2VybWl0IC1yXDEzIiBmcm9tIHBsYWludGV4dCB0byBjeXBoZXJ0ZXh0LCBhcyBzaG93biBieSB0 aGUKLWhleGR1bXBzLiAgVGhlbiBpdCBlbnRlcnMgdHRwdHljbWQoKS4uLiAgSG1tbW0sIHdhaXQs IGhvdyBjYW4gaXQgc2VuZCB0aGUKLSJrZXJtaXQgLXIiIGJlZm9yZSBpdCBzdGFydHMgdGhlIGV4 dGVybmFsIHByb3RvY29sPyAgTmV2ZXIgbWluZCwgd29ycnkgYWJvdXQKLXRoYXQgbGF0ZXIuLi4g IEFueXdheSwgdHRwdHljbWQoKSBzYXlzOgotCi0gIHR0cHR5Y21kIGxvb3AgdG9wIGhhdmVfcHR5 PTEKLSAgdHRwdHljbWQgbG9vcCB0b3AgaGF2ZV9uZXQ9MQotICB0dHB0eWNtZCBGRF9TRVQgcHR5 ZmQgaW4KLSAgdHRwdHljbWQgRkRfU0VUIHR0eWZkIGluCi0gIHR0cHR5Y21kIG5mZHM9NQotICB0 dHB0eWNtZCBzZWxlY3Q9MQotICB0dHB0eWNtZCBGRF9JU1NFVCB0dHlmZCBpbgotICAuLi4KLSAg dHRwdHljbWQgaW5fY2hrKHR0eWZkKSBuPTExCi0gIHR0cHR5Y21kIHR0eGluIG49MTEKLQotdHR4 aW4oKSBhc2tzIGZvciAxMSBieXRlcywgbXlmaWxsYnVmKCkgZ2V0cyAxMSBieXRlcywgYW5kIGhl eGR1bXAoKSBzaG93cwotdGhlIGN5cGhlcnRleHQsIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBh bnkgZGVjcnlwdGluZyBnb2luZyBvbi4gIEhtbW0sIGl0Ci1sb29rcyBsaWtlIHRoZSByZWd1bGFy IGNvZGUgY2FsbHMgdHRpbmMoKSBpbiBhIGxvb3AsIHJhdGhlciB0aGFuIHR0eGluKCkuCi1NYXli ZSB0dHhpbigpIGRvZXNuJ3QgaGF2ZSBkZWNyeXB0aW9uIGhvb2tzLiAgTm8sIHRoYXQncyBub3Qg aXQsIHRoZSBjb2RlIGlzCi10aGVyZSwgYnV0IHRoZSBLZXJtaXQgcGFja2V0IHJlYWRlciBkb2Vz IG5vdCB1c2UgdHR4aW4oKSwgaXQgdXNlcyB0dGlubCgpLgotQnV0IG9mIGNvdXJzZSB3ZSBjYW4n dCB1c2UgdGhhdCBmb3IgZXh0ZXJuYWwgcHJvdG9jb2xzIGJlY2F1c2UgaXQncyBkZXNpZ25lZAot b25seSB0byByZWFkIEtlcm1pdCBwYWNrZXRzLiAgU3Vic3RpdHV0aW5nIGEgbG9vcCBvZiB0dGlu YygpcyBmb3IgdGhlIHR0eGluKCkKLWNhbGwgZml4ZXMgdGhpbmdzIChhbmQgc3RyYW5nZWx5IGVu b3VnaCwgaXQgc2VlbXMgdG8gYmUgZmFzdGVyKS4gIEFuZCBub3cgd2UKLWhhdmUgb3VyIGZpcnN0 IGV4dGVybmFsIHByb3RvY29sIHRyYW5zZmVyIG92ZXIgYSBzZWN1cmUgY29ubmVjdGlvbiAoZXh0 ZXJuYWwKLUtlcm1pdCBwcm9ncmFtLCBMaW51eCBvdmVyIEtlcmJlcm9zIDUgdG8gTmV0QlNEKS4g IFptb2RlbSB3b3JrZWQgdG9vIGZvciBhCi1zaG9ydCBmaWxlIGJ1dCAic29tZXRoaW5nIGhhcHBl bnMiIHdpdGggbG9uZ2VyIG9uZXMuICAyOSBEZWMgMjAwNi4KLQotTmV3IG1ha2VmaWxlIHRhcmdl dCBmb3IgTGludXggd2l0aCBLZXJiZXJvcyA1LCBsaW51eCtrcmI1LCB0aGF0IGRvZXNuJ3QKLWlu Y2x1ZGUgYW55dGhpbmcgZXh0cmEgZnJvbSBTU0wgb3Igb3RoZXIgc2VjdXJpdHkgbWV0aG9kcyAo YnV0IGFwcGFyZW50bHkgaXQKLWlzIHN0aWxsIG5lY2Vzc2FyeSB0byBpbmNsdWRlIC1ET1BFTlNT TF8wOTcgaW4gb3JkZXIgdG8gZ2V0IHRoZSByaWdodCBuYW1lcwotZm9yIHRoZSBERVMgcm91dGlu ZXM/KS4gIERpdHRvIG5ldGJzZCtrcmI1IGZvciBOZXRCU0QsIGV4Y2VwdCBpbiB0aGlzIGNhc2UK LS1ET1BFTlNTTF8wOTcgaXMgbm90IG5lY2Vzc2FyeS4gIG1ha2VmaWxlLCAzMCBEZWMgMjAwNi4K LQotTm90ZSB0byBteXNlbGY6IE9uIFBhbml4OgotCi0gIGV4cG9ydCBMRF9MSUJSQVJZX1BBVEg9 L3Vzci9sb2NhbC9rZXJibGliCi0gIG1ha2UgbmV0YnNkK2tyYjUgIks1TElCPS1ML3Vzci9sb2Nh bC9rZXJibGliIiAiSzVJTkM9LUkvdXNyL2xvY2FsL2luY2x1ZGUiCi0KLUNhbid0IHRlbG5ldC1r NSBmcm9tIG5ld2x5IGJ1aWx0IEtlcm1pdCBvbiBOZXRCU0Q7IHBhcnR3YXkgdGhyb3VnaCB0aGUK LW5lZ290aWF0aW9ucywganVzdCBhZnRlciAiVEVMTkVUIFJDVkQgU0IgRU5DUllQVElPTiBTVVBQ T1JUIERFU19DRkI2NAotREVTX09GQjY0IElBQyBTRSIgaXQgZHVtcHMgY29yZS4gIFRoZSBsYXN0 IHR3byBsaW5lcyBpbiBkZWJ1Zy5sb2cgYWZ0ZXIKLXRoaXMgYXJlOgotCi0gIHRuX3NiW2xlbl09 NQotICBlbmNyeXB0X3N1cHBvcnRbY250XT0yCi0KLVJlYnVpbGRpbmcgd2l0aCAtRE9QRU5TU0xf MDk3IGRvZXNuJ3QgY2hhbmdlIGFueXRoaW5nLiAgRWQgUmF2aW4gc2FpZCB0aGV5Ci1oYXZlIHR3 byBkaWZmZXJlbnQgS2VyYmVyb3MgaW5zdGFsbGF0aW9ucywgSGVpbWRhbCBhbmQgTUlUOyBtYXli ZSBzb21lCi1taXh1cCBiZXR3ZWVuIHRoZSB0d28gZXhwbGFpbnMgdGhlIHByb2JsZW0gKEplZmYg Y29uY3VycykuIFRoZSBjb3JlIGR1bXAKLW9jY3VycyBpbiBja19jcnA6IGVuY3J5cHRfc3VwcG9y dCgpOgotCi0gICBkZWJ1ZyhGMTAwLCJYWFggZXAgbm90IE5VTEwiLCIiLDApOwotICAgdHlwZSA9 IGVwLT5zdGFydCA/ICgqZXAtPnN0YXJ0KShESVJfRU5DUllQVCwgMCkgOiAwOyA8LS0gSGVyZQot ICAgZGVidWcoRjEwMSwiWFhYIG5ldyB0eXBlIiwiIix0eXBlKTsKLQotQW55d2F5LCBJIGNhbiBs b2cgaW4gd2l0aCBLZXJiZXJvcyA1IHRvIFBhbml4IE9LIGZyb20gQ29sdW1iaWEgKHNlc2FtZSkK LXVzaW5nIDguMC4yMDEuICBTbyBsZXQncyB0cnkgdG8gcmVzdXJyZWN0IHRoZSBTb2xhcmlzIHZl cnNpb24gd2l0aCBldmVyeXRoaW5nOgotCi0gIHNvbGFyaXM5ZytrcmI1K2tyYjQrb3BlbnNzbCtz aGFkb3crcGFtK3psaWIKLQotSSBodW50ZWQgYXJvdW5kIHRvIGZpbmQgd2hlcmUgdGhlIGN1cnJl bnQgbGlicmFyeSBhbmQgaGVhZGVyIGZpbGUKLWRpcmVjdG9yaWVzIHdlcmUuLi4gIExhc3QgdGlt ZSBJIHRyaWVkIHRoaXMgKE1hcmNoIDIwMDYpIGl0IGJvbWJlZCwgbm90Ci1maW5kaW5nIGxpYmRl cy4gIEluc3RlYWQgd2UgaGF2ZSAvb3B0L2tlcmJlcm9zNTEyNS9saWIvbGliZGVzNDI1LmEuICBN YWRlIGEKLW5ldyBjdS1zcGVjaWZpYyB0YXJnZXQgdGhhdCBpbmNsdWRlcyB0aGlzOyBub3cgd2Ug Z2V0IGZhcnRoZXI7IGl0IGJsb3dzIHVwCi1pbiBja2NmdHAuYyB3aXRoIHRvbnMgb2YgZXJyb3Jz IGFuZCB3YXJuaW5ncywgd2hpY2ggd2UgY2FuIHdvcnJ5IGFib3V0Ci1sYXRlci4gIEJ1aWxkaW5n IGFnYWluIHdpdGggLUROT0ZUUCwgaXQgZ2V0cyB0byBja3VhdGguYyAodGhlIGZpcnN0IHNlY3Vy aXR5Ci1tb2R1bGUpIGFuZDoKLQotICBja3VhdGguYzoxNTE6MTg6IGVycm9yOiBrcmI1Lmg6IE5v IHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKLSAgY2t1YXRoLmM6MTUyOjIxOiBlcnJvcjogcHJvZmls ZS5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Ci0gIGNrdWF0aC5jOjE1MzoyMTogZXJyb3I6 IGNvbV9lcnIuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQotICBja3VhdGguYzoxNzY6Mjg6 IGVycm9yOiBrZXJiZXJvc0lWL2tyYi5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Ci0gIElu IGZpbGUgaW5jbHVkZWQgZnJvbSAvb3B0L29wZW5zc2wtMC45LjhkL2luY2x1ZGUvb3BlbnNzbC9k ZXMuaDoxMDEsCi0JCSAgIGZyb20gY2t1YXRoLmM6MjE5OgotCi1Gb3VuZCBrcmI1LmggaW4gL29w dC9rZXJiZXJvczUxMjUvaW5jbHVkZS9rcmI1LmgsIGFkZGVkIGEgLUkgZm9yIHRoaXMKLWRpcmVj dG9yeSAuLi4gIE5vdyB3ZSBnZXQgbG90cyBvZiB3YXJuaW5ncyBpbiBja3VhdGguYywgYnV0IGl0 IGNvbXBsZXRlcyBPSywKLXRoZW4gd2Ugd2luZCB1cCBib21iaW5nIG91dCBpbiBja19jcnAuYzsg SSBkb24ndCBrbm93IHdoeSAtLSB0aGVyZSBhcmUgYWxsCi10aGUgc2FtZSB3YXJuaW5ncyAocmVs YXRlZCB0byBhcmd1bWVudCBwYXNzaW5nIHRvIERFUyBmdW5jdGlvbnMpLCBidXQgbm8KLWVycm9y cy4gIEkgaGF2ZSBubyBjbHVlLgotCi1UcmllZCB0byByZXN1cnJlY3QgdGhlIHNvbGFyaXMyeCtr cmI0IHRhcmdldDsgdGhpcyByZXF1aXJlZCBjaGFuZ2luZyAtbGtyYgotdG8gLWxrcmI0IGFuZCAt bGRlcyB0byAtbGRlczQyNS4gIExvdHMgb2Ygd2FybmluZ3MgaW4gY2t1dGlvLmMsIGNrY25ldC5j LAotY2tjdGVsLmMsIHRoZW4gaXQgYm9tYnMgb3V0IGluIGNrY2Z0cC5jIGJlY2F1c2UgaXQgY2Fu J3QgZmluZCBrcmIuaC4gIEkKLWZvdW5kIGl0LCBhZGp1c3RlZCB0aGUgLUkgZmxhZ3MsIGJ1dCBu b3cgaXQgYm9tYnMgYmVjYXVzZSBrcmIuaCBpdHNlbGYKLSNpbmNsdWRlcyA8a2VyYmVyb3NJVi9k ZXMuaD4sIHdoaWNoIG9mIGNvdXJzZSBpdCBjYW4ndCBmaW5kIGJlY2F1c2UgdGhlCi1icmFja2V0 cyBtZWFuIGl0J3MgbG9va2luZyBpbiAvdXNyL2luY2x1ZGUva2VyYmVyb3NJVi8sIHdoaWNoLCBv ZiBjb3Vyc2UsCi10aGUgc3lzIGZvbGtzIGhhdmUgcmVtb3ZlZC4gIEdpdmluZyB1cCBvbiBTb2xh cmlzIGFnYWluLiAgTGF0ZXIsIEplZmYgc2FpZAotIlNvbGFyaXMgZG9lcyBub3QgcHVibGljbHkg ZXhwb3J0IHRoZSBrcmI1IGxpYnJhcmllcy4gIFlvdSBuZWVkIHRvIGJ1aWxkCi10aGUgTUlUIEtl cmJlcm9zIGxpYnJhcmllcyBzZXBhcmF0ZWx5IGFuZCBsaW5rIHRvIHRoZW0uIiAgMzAgRGVjZW1i ZXIgMjAwNi4KLQotQ2hhbmdlZCBjb3B5cmlnaHQgZGF0ZSB0byAyMDA3LiAgY2tjbWFpLmMsIDEg SmFuIDIwMDcuCi0KLVdpdGggRWQgUmF2aW4ncyBoZWxwLCBzdWNjZXNzZnVsbHkgYnVpbHQgQy1L ZXJtaXQgd2l0aCBLZXJiZXJvcyA1IGFuZAotT3BlblNTTCAobmV0YnNkK2tyYjUrb3BlbnNzbCt6 bGliKSwgYnV0IGl0IGRvZXMgbm90IG1ha2UgSzUgY29ubmVjdGlvbnM7IGl0Ci1nZXRzIGh1bmcg dXAgaW4gdGhlIFRlbG5ldCBuZWdvdGlhdGlvbnMuICAzIEphbiAyMDA3LgotCi1Eb3dubG9hZGVk IE1JVCBLZXJiZXJvcyA1IHYxLjQuNCB0byBTb2xhcmlzIDksIDU0TUIgd29ydGguICBUaGlzIGlz IGp1c3Qgc28KLUkgY2FuIGJ1aWxkIGEgS2VyYmVyaXplZCBDLUtlcm1pdCBmb3IgdGVzdGluZyB0 dHlwdHljbWQoKS4gIFJhbiB0aGUKLWNvbmZpZ3VyZSBwcm9ncmFtLCBnb3QgYSBmZXcgd2Fybmlu Z3MgYnV0IGl0IGRpZG4ndCBmYWlsIChzaG91bGQgaXQ/KSAgRGlkCi0ibWFrZSBpbnN0YWxsIiwg c3BlY2lmeWluZyBhIHByaXZhdGUgZGlyZWN0b3J5IGJ1dCBpdCBmYWlsZWQgaW1tZWRpYXRlbHkK LXdpdGggImNhbm5vdCBzdGF0IGxpYmtyYjVzdXBwb3J0LnNvLjAuMDogTm8gc3VjaCBmaWxlIG9y IGRpcmVjdG9yeSIuCi1PSywgSSB0cmllZC4gIDMgSmFuIDIwMDcuCi0KLU1hZGUgYSBuZXcgbWFr ZWZpbGUgdGFyZ2V0IGZvciBNYWMgT1MgWCwgbWFjb3N4MTAuNCtrcmI1K3NzbCwgcmFuIGl0IG9u IE1hYwotT1MgWCAxMC40LjguICBJdCBib21icyBvdXQgaW4gY2tjZnRwLmMgd2l0aDogY2tjZnRw LmM6NTUxOiBlcnJvcjogc3RhdGljCi1kZWNsYXJhdGlvbiBvZiAnZ3NzX21lY2hfa3JiNScgZm9s bG93cyBub24tc3RhdGljIGRlY2xhcmF0aW9uCi0vdXNyL2luY2x1ZGUvZ3NzYXBpL2dzc2FwaV9r cmI1Lmg6NzY6IGVycm9yOiBwcmV2aW91cyBkZWNsYXJhdGlvbiBvZgotJ2dzc19tZWNoX2tyYjUn IHdhcyBoZXJlIi4gIERpdHRvIGZvciBnc3NfbWVjaF9rcmI1X29sZCwgZ3NzX250X2tyYjVfbmFt ZSwKLWFuZCBnc3NfbnRfa3JiNV9wcmluY2lwYWwuICBUcmllZCBhZ2FpbiB3aXRoIC1ETk9GVFAu ICBXZSBnZXQgbG90cyBvZgotd2FybmluZ3MgaW4gdGhlIG5ldHdvcmsgbW9kdWxlcywgYnV0IHRo ZXkgY29tcGxldGUuICBCdXQgY2tfc3NsLmMgYm9tYmVkCi13aXRoIGEgY29uZmxpY3QgYmV0d2Vl biBpdHMgb3duIGRlY2xhcmF0aW9ucyBvZiBlbmNyeXB0X291dHB1dCBhbmQKLWRlY3J5cHRfaW5w dXQgYW5kIHRoZSBvbmVzIGluIGNrdWF0Mi5oOyByZW1vdmVkIHRoZSBwcm90b3R5cGVzIGZyb20g dGhlCi1sYXR0ZXIgKGFzIEplZmYgYWR2aXNlZCkgaXQgYnVpbHQgT0sgYW5kIGl0IHdvcmtzIE9L IHRvby4gIEJ1aWx0IHdpdGggRlRQCi10b28sIGJ1dCB3aXRoIGxpbmstdGltZSB3YXJuaW5ncyBh Ym91dCB0aGUgYWZvcmVtZW50aW9uZWQgZ3NzXyogc3ltYm9scy4KLSNpZmRlZidkIHRoZW0gb3V0 IChnc3NfbWVjaF9rcmI1LCBnc3NfbWVjaF9rcmI1X29sZCwgZ3NzX21lY2hfbmFtZSwgYW5kCi1n c3NfbWVjaF9wcmluY2lwYWwpIGZvciBNQUNPU1gsIHdoZXJlIHRoZXNlIHN5bWJvbHMgYXJlIGV4 cG9ydGVkIGJ5IHRoZQotbGlicmFyeS4gIE5vdyBpdCBhbGwgY29tcGlsZXMgYW5kIGxpbmtzIE9L LCBhbmQgcnVucyBPSyB0b28uICAzIEphbiAyMDA3LgotCi1TcGVudCBhIGRheSBodW50aW5nIGFy b3VuZCBmb3IgYSB2ZXJzaW9uIG9mIFptb2RlbSB0aGF0IHdvdWxkIGJ1aWxkIGFuZAotZXhlY3V0 ZSBvbiBNYWMgT1MgWCwgZmluYWxseSBmb3VuZCBvbmUuICBOb3cgYXQgbGFzdCBJIGNvdWxkIHRy eSBhIFptb2RlbQotZXh0ZXJuYWwtcHJvdG9jb2wgdHJhbnNmZXIgb3ZlciBhIHNlY3VyZSBjb25u ZWN0aW9uLiAgQnV0IHBob29leSwgQy1LZXJtaXQncwotcHR5IHN1cHBvcnQgZGlkbid0IHdvcmsg b24gdGhpcyBib3guICBLZXJtaXQgZmluZHMgbWFzdGVyIC9kZXYvcHR5cGEgT0ssCi10aGVuIGlu IHB0eWludF92b2lkX2Fzc29jaWF0aW9uKCkgdHJpZXMgdG8gb3BlbiAvZGV2L3R0eSBidXQgZ2V0 cyBFUlJOTz02Ci0iZGV2aWNlIG5vdCBjb25maWd1cmVkIiAod2hpY2ggaXMgYXBwYXJlbnRseSBP SywgYmVjYXVzZSB0aGUgc2FtZSB0aGluZwotaGFwcGVucyBvbiBvdGhlciBwbGF0Zm9ybXMgd2hl cmUgdGhpcyB3b3JrcyksIHRoZW4gdHJpZXMgdG8gb3BlbiBzbGF2ZQotL2Rldi90dHlwYSBhbmQg Z2V0cyBFUlJOTz0xMyAicGVybWlzc2lvbiBkZW5pZWQiIGJlY2F1c2UsIGluZGVlZCwgSSBkb24n dAotaGF2ZSByL3cgcGVybWlzc2lvbiBvbiB0aGUgZGV2aWNlLiAgTGVmdCBhIG1lc3NhZ2UuICA0 IEphbiAyMDA3LgotCi1DaGFuZ2VkIFRSQU5TTUlUIC9CSU5BUlkgb3V0cHV0IGJ1ZmZlciBzaXpl IGZyb20gMjUyIHRvIDUwOCB0byBhdm9pZAotVENQIGZyYWdtZW50YXRpb24uICBOZWVkIHRvIGFk ZCBhIFNFVCBjb21tYW5kIGZvciB0aGlzIGxhdGVyLgotY2t1dXM0LmMsIDUgSmFuIDIwMDcuCi0K LUZvdW5kIGFub3RoZXIgTWFjIHdoZXJlIHRoZSBwdHlzIHdlcmVuJ3QgcHJvdGVjdGVkIGFnYWlu c3QgbWUsIG1ha2UgYSBLNQotY29ubmVjdGlvbiBhbmQgdHJhbnNmZXJyZWQgYSBsYXJnaXNoIGZp bGUgd2l0aCBabW9kZW0gd2l0aCB6ZXJvIGdsaXRjaGVzLAotZXhjZXB0IGl0IHdhcyBraW5kIG9m IHNsb3csIDg0SyBjcHMuICBXZWxsLCB3ZSdyZSBkb2luZyBzaW5nbGUtY2hhcmFjdGVyCi1yZWFk cyBvbiB0aGUgbmV0ICh0dGluYygpJ3MgaW5zdGVhZCBvZiB0dHhpbigpKS4gIEhtbW0sIGJ1dCB0 aGVuIEkgZGlkIGl0Ci1hZ2FpbiBhbmQgZ290IDIuMk1jcHMuICBTdWNjZXNzIHdhcyByZXBvcnRl ZCwgYnV0IGl0IGFjdHVhbGx5IGRpZG4ndCB3b3JrOwotaXQgb25seSBzZW50IHRoZSBmaXJzdCBx dWFydGVyIG9mIHRoZSBmaWxlLi4uLiAgT2ggd2VsbCwgYXQgbGVhc3Qgbm93IHdlCi1oYXZlIGEg dGVzdGJlZC4gIDUgSmFuIDIwMDcuCi0KLVRyaWVkIGFnYWluLCBzYXcgdGhhdCB0aGUgZmlsZSBp cyBhY3R1YWxseSB0cmFuc2ZlcnJlZCBpbnN0YW50bHkgYnV0IHRoZW4KLXdlJ3JlIG5vdCBwaWNr aW5nIHVwIHRoZSBwcm90b2NvbCBhdCB0aGUgZW5kLiAgVGhlb3J5OiBhZnRlciB0aGUgdHJhbnNm ZXIKLWZpbmlzaGVzLCB3ZSBjb21lIGJhY2sgdG8gdGhlIHByb21wdCBvbiB0aGUgcmVtb3RlIGhv c3QsIHdoaWNoIG1lYW5zIHdlIGhhdmUKLXNvbWV0aGluZyB0byByZWFkIGZyb20gdGhlIG5ldCBh bmQgd3JpdGUgdG8gdGhlIHB0eSwgYnV0IHRoZSBwdHkgaGFzIGFscmVhZHkKLWV4aXRlZC4gIEFG VEVSIFRIRSBQVFkgSVMgR09ORSwgV0UgRE8gTk9UIFdBTlQgVE8gUkVBRCBGUk9NIFRIRSBORVQg QU5ZCi1NT1JFLiAgQWRkaW5nIHRoaXMgdGVzdCBtYWtlcyBLZXJtaXQgc3VjY2VlZCByaWdodCBh d2F5IHdoZW4gc2VuZGluZyB0aGUKLXNhbWUgbGFyZ2lzaCBmaWxlLCB3aXRoIGEgdHJhbnNmZXIg cmF0ZSBvZiA0TSBjcHMsIHRoYXQncyBiZXR0ZXIuICBCdXQgdGhlCi1yeiBwcm9ncmFtIG9uIHRo ZSBmYXIgZW5kIGlzIGV2aWRlbnRseSBub3QgcmVjZWl2aW5nIHRoZSBnb29kYnllIGhhbmRzaGFr ZQotZnJvbSB0aGUgcmVjZWl2ZXIsIGJlY2F1c2UgaXQgc2l0cyB0aGVyZSBmb3JlZXZlciBpbiBp dHMgKkIwOTAwMjQwMjAwOTQxOAotbW9kZSB1bnRpbCBJIF5YXlheWF5YXlggb3V0IG9mIGl0LCBh dCB3aGljaCBwb2ludCBpdCBkZWxldGVzIHRoZSBmaWxlIGl0Ci1hbHJlYWR5IHJlY2VpdmVkLCBu b3QgdmVyeSBoZWxwZnVsLiAgSW4gdGhlIGNvZGUsIEkgcmVhZCBmcm9tIHRoZSBwdHkgaWYgdGhl Ci1wdHkgaXMgb3BlbiBhbmQgdGhlcmUgaXMgcm9vbSBpbiB0aGUgYnVmZmVyLiAgVGhpcyBtZWFu cyB0aGF0IHdoZW4gd2UgZ2V0IHRvCi10aGUgZW5kLCBlaXRoZXIgdGhlcmUgaXMgbm8gcm9vbSBp biB0aGUgYnVmZmVyICh1bmxpa2VseSkgb3IgdGhlIGxhc3QgYml0Ci1zZW50IGJ5IHN6IGJlZm9y ZSBleGl0aW5nIHdhcyBjdXQgb2ZmIHdoZW4gdGhlIGZvcmsgY2xvc2VkLiAgV2h5IGRvIHdlIGdl dAotaW4gdGhpcyBmaXggb25seSB3aXRoIFptb2RlbSBhbmQgbm90IHdpdGggS2VybWl0PwotCi1J biBNYWMgT1MgWCwgYWZ0ZXIgc3ogZXhpdHMsIHdlIGdldCBFUlJOTz01IGlmIHdlIHRyeSB0byB3 cml0ZSB0byB0aGUgcHR5LAotYnV0IHdlIHN0aWxsIGdldCBubyBlcnJvcnMgYWZ0ZXIgdGhhdCBp ZiB3ZSB0cnkgdG8gcmVhZCBmcm9tIGl0LiAgU3RpbGwsCi1wcmlvciB0byB0aGlzIHdlIGRpZCBt b3JlIHRoYW4gMjAgdW5wcm9kdWN0aXZlIG5vbmJsb2NraW5nIHJlYWRzIGZyb20gdGhlCi1wdHkg KG5vIGVycm9yLCBubyBieXRlcykgd2l0aG91dCBpbmNpZGVudDsgdGhlcmUgZGlkIG5vdCBzZWVt IHRvIGJlIGFueXRoaW5nCi13YWl0aW5nLiAgSW4gZmFjdCwgdGhlIGxhc3QgdGhpbmcgd2UgcmVh ZCBmcm9tIHRoZSBwdHkgd2VyZSB0aGUgdGV4dAotbWVzc2FnZXMgdGhhdCBhcmUgaXNzdWVkIGF0 IHRoZSBlbmQgb2YgdGhlIHRyYW5zZmVyOiAicnogMy43MyAxLTMwLTAzCi1maW5pc2hlZC4iICBB ZnRlciB3aGljaCBpdCBwYXVzZXMgYSBzZWNvbmQgYW5kIHNwaXRzIG91dCBhIG1lc3NhZ2UgYWJv dXQKLVVOUkVHSVNURVJFRCBDT1BZLgotCi1GaWd1cmVkIG91dCBob3cgdG8gYnVpbGQgbHJ6c3os IGluIGhvcGVzIHRoYXQgdGhlIHByZXZpb3VzIHByb2JsZW1zIHdlcmUKLXdpdGggcnpzeiBhbmQg Y3J6c3oncyBmaWRkbGluZyB3aXRoIGZpbGUgZGVzY3JpcHRvcnMsIGJ1dCBJIGdldCB0aGUgc2Ft ZQotYmVoYXZpb3IuICBXaGljaCBpcyBnb29kLCBJIGd1ZXNzLCBiZWNhdXNlIGlmIEkgY2FuIGZp eCBvbmUsIEkgZml4IHRoZW0gYWxsLgotT3Igbm90Li4uICBUZXN0aW5nIGxyeiBieSBpdHNlbGYg KG5vdCB1bmRlciBDLUtlcm1pdCksIEkgc2VlIHRoYXQgaXQgZG9lc24ndAotd29yayBhdCBhbGwg d2l0aCBLZXJtaXQncyBvd24gWm1vZGVtIGltcGxlbWVudGF0aW9uLgotCi1PSywgaGVyZSdzIG9u ZSBwcm9ibGVtOiBhdCB0aGUgZW5kIG9mIHRoZSB0cmFuc2ZlciwgdGhlIE9tZW4gWm1vZGVtcyBw cmludAotc3R1ZmYgbGlrZSAiUGxlYXNlIHJlYWQgdGhlIGxpY2Vuc2UgYWdyZWVtZW50IiwgS2Vy bWl0IGR1dGlmdWxseSByZWFkcyB0aGlzCi1mcm9tIHRoZSBwdHkgYW5kIHNlbmRzIGl0IHRvIHRo ZSBob3N0LCB0aGUgaG9zdCBzaGVsbCBzYXlzICJQbGVhc2U6IGNvbW1hbmQKLW5vdCBmb3VuZCIs IGlzc3VlcyBpdHMgcHJvbXB0IGFnYWluLCB3aGljaCBLZXJtaXQgcmVhZHMsIGZlZWRzIHRvIHRo ZSBwdHksCi1hbmQgYXBwYXJlbnRseSB0aGUgcHR5IGVjaG9lcyBpdCwgc28gd2Ugc2VuZCBpdCBi YWNrIHRvIHRoZSBob3N0LCBhbmQgdGhlcmUKLWVuc3VlcyBhbiBpbmZpbml0ZSBsb29wIG9mIGdl dHR5IGJhYmJsZSB1bnRpbCB0aGUgcHR5IGNsb3Nlcy4gIE5vdywgdGhlcmUKLW91Z2h0IHRvIGJl IGEgd2F5IHRvIG1ha2UgdGhlIGV4dGVybmFsIHByb3RvY29sIHNodXQgdXAsIGxpa2UgS2VybWl0 J3MKLS1xKHVpZXQpIGZsYWcsIGJ1dCB0aGVzZSBhcmUgdW5yZWdpc3RlcmVkIHZlcnNpb25zIHNv IHlvdSBjYW4ndCBzaHV0IHVwIHRoZQotbWVzc2FnZXMuICBJbiBmYWN0LCB0aGUgdHJhbnNmZXIg d29ya3MsIGJ1dCB0aGUgZ2V0dHkgYmFiYmxlIGF0IHRoZSBlbmQKLXJ1aW5zIHRoZSBleHBlcmll bmNlLiAgTm93IEknbSBiZWdpbm5pbmcgdG8gd29uZGVyIGhvdyBhbnkgb2YgdGhlc2UgcHJvZ3Jh bXMKLWV2ZXIgd29ya2VkIGFzIGV4dGVybmFsIHByb3RvY29scy4gIEhtbW0sIG5vdyB0aGF0IEkg dHJ5IGl0LCBJIHNlZSB0aGUKLXNhbWUgdGhpbmcgaGFwcGVucyB0aGUgb2xkIHdheSwgd2hlbiB1 c2luZyB0dHJ1bmNtZCgpIHJhdGhlciB0aGFuIHR0cHR5Y21kKCkuCi0KLVJlYWRpbmcgdGhlIGNy enN6IGRvY3VtZW50YXRpb24gSSBzZWUgaXQgc2F5cyB0aGF0IG1lc3NhZ2VzIGNvbWUgb3V0IG9u Ci1zdGRlcnIuICBPSywgdGhhdCdzIHByb2dyZXNzLiAgSW4gY2t1cHR5LmMgSSB0cnkgcmVkaXJl Y3RpbmcgMiB0byAvZGV2L251bGwuCi1XZWxsIGdvb2QsIHRoaXMgZmlsdGVycyBvdXQgdGhlIG1l c3NhZ2VzIGZyb20gY3N6LCBidXQgd2Ugc3RpbGwgZ2V0IGdldHR5Ci1iYWJibGUgb24gdGhlIHBy b21wdC4gIEluIHRoZSBkZWJ1ZyBsb2csIHdlIHJlYWQgdGhlIGxhc3QgYnVuY2ggb2Ygc3R1ZmYK LWZyb20gbmV0LCA2MTggYnl0ZXMgb2YgWm1vZGVtIHN0dWZmLi4uICAgTm93IHdoYXQgaGFwcGVu cz8KLQotWm1vZGVtIG9uIHRoZSByZW1vdGUgZXhpdHMsIHRoZSBob3N0IHByaW50cyBpdHMgcHJv bXB0LiAgS2VybWl0LCBvZiBjb3Vyc2UsCi1yZWFkcyB0aGUgcHJvbXB0IGZyb20gdGhlIG5ldCwg bm93IGNvbWUgdG8gdGhlIGJvdHRvbSBvZiB0aGUgbG9vcCBhbmQgd2UKLWhhdmUgNyBieXRlcyB0 byB3cml0ZSB0byB0aGUgcHR5LCBhbmQgbm8gZXJyb3IgY29uZGl0aW9uLCBzbyB3ZSBjb250aW51 ZSB0aGUKLWxvb3AuICBzZWxlY3QoKSBzYXlzIHRoYXQgdGhlIHB0eSBpcyByZWFkeSBmb3Igd3Jp dGluZy4gIFdlIHdyaXRlIHRoZSA3Ci1ieXRlcyBhbmQgYW5kIGdldCBubyBlcnJvci4gIExvb3Ag YWdhaW4sIHRoaXMgdGltZSBzZWxlY3QoKSBzYXlzIHRoZSBwdHkgaGFzCi1kYXRhIHdhaXRpbmcu ICBTdXJlIGVub3VnaCB3ZSBnZXQgdGhlIHByb21wdCBiYWNrLCBhbmQgc2VuZCBpdCB0byB0aGUg bmV0LAotYW5kIHRodXMgYmVnaW5zIHRoZSBnZXR0eSBiYWJibGUuICBUaGVyZSBhcmUgdHdvIGNh dXNlcyBmb3IgdGhpczoKLQotICAxLiBjcnpzeiBkb2VzIG5vdCBleGl0IGltbWVkaWF0ZWx5OyBp dCBzbGVlcHMgZm9yIDEwIHNlY29uZHMgYWZ0ZXIKLSAgICAgcHJpbnRpbmcgaXRzIG5hZyBtZXNz YWdlLgotCi0gIDIuIER1cmluZyB0aGlzIGludGVydmFsIHRoZSBwdHkgc2VlbXMgdG8gYmUgZWNo b2luZyB3aGF0IGlzIHNlbnQgdG8gaXQuCi0gICAgIGNzeiBpcyBub3QgZWNob2luZzsgSSBjaGVj a2VkLiAgQW55d2F5LCByZW1vdmluZyB0aGUgcGF1c2UgZG9lc24ndAotICAgICBzZWVtIHRvIG1h a2UgYSBkaWZmZXJlbmNlLgotCi10dHB0eWNtZCgpIG5lZWRzIHRvOgotCi0gLiBURUxMIHRoZSBw dHkgbW9kdWxlIHRvIHJlZGlyZWN0IHN0ZGVyciB0byAvZGV2L251bGwKLSAuIFNFVCBQVFkgVE8g Tk9FQ0hPIChtYXN0ZXIgb3Igc2xhdmU/KQotCi1UcmllZCBzZXR0aW5nIHRoZSBwdHkgdG8gbm9l Y2hvOgotCi0gIHRlcm1idWYuY19sZmxhZyAmPSB+KEVDSE98RUNIT0V8RUNIT0spOwotCi1hbmQg dGhpcyBzZWVtZWQgdG8gc3RvcCB0aGUgZ2V0dHkgYmFiYmxlLiAgQWZ0ZXIgdGhlIGZpbGUgdHJh bnNmZXIsIEkgcmVhZAotYmFjayB0aGUgcHJvbXB0IGZyb20gdGhlIGhvc3Qgc2hlbGwsIEkgd3Jp dGUgdGhlIHByb21wdCBieXRlcyB0byB0aGUgcHR5OwotdGhlcmUgaXMgbm8gZXJyb3IuICBBbmQg bm93IHNlbGVjdCgpIHNpbXBseSBoYW5ncyBmb3JldmVyIChvciB0aW1lcyBvdXQgaWYKLWEgdGlt ZW91dCBpcyBzZXQpLiAgVGhlIHF1ZXN0aW9uIGhlcmUgaXM6IHdoeSBkaWRuJ3Qgd3JpdGluZyB0 byB0aGUgcHR5Ci1wcm9kdWNlIGFuIGVycm9yPyAgQW5kLCBiZWNhdXNlIHdlIG5ldmVyIGRldGVj dCB0aGUgcHR5IGhhcyBleGl0ZWQsIHdlIGNhbid0Ci1zZXQgYSBnb29kIHJldHVybiBjb2RlLiAg NSBKYW4gMjAwNy4KLQotTW92ZWQgcHR5IGZvcmsgdGVzdGluZyB0byBhIHNlcGFyYXRlIHJvdXRp bmUsIHB0eV9nZXRfc3RhdHVzKCksIGFuZCAKLWFkZGVkIGEgY2FsbCB0byBpdCBmcm9tIHRoZSBw bGFjZSB3aGVyZSB3ZSB0aW1lIG91dCwgaW4gY2FzZSB0aGUgZm9yawotdGVybWluYXRlZDsgdGhl biB3ZSBjYW4gZ2V0IGFuZCByZXR1cm4gaXRzIHN0YXR1cy4gIDYgSmFuIDIwMDcuCi0KLUFkZGVk IGNhbGxzIHRvIHB0eV9nZXRfc3RhdHVzKCkgdG8gZXZlcnkgcGxhY2Ugd2hlcmUgd2Ugc3VzcGVj dCBhIHB0eSBlcnJvciwKLXRyaWVkIGFnYWluIHdpdGggbHJ6c3osIGNyenN6LCBhbmQgcmVndWxh ciByenN6LiAgQWxsIHRocmVlIHdvcmssIGJ1dCBpbgotZWFjaCBjYXNlIHdhaXRwaWQoKSBpbmRp Y2F0ZXMgdGhhdCB0aGUgc3ogcHJvZ3JhbSBnYXZlIGV4aXQgY29kZSAxIChmYWlsdXJlKS4KLWNr dXRpby5jLCA3IEphbiAyMDA3LgotCi1DaGFuZ2luZyB0aGUgc3ViamVjdC4uLiAgT24gbXkgdGVz dCBzeXN0ZW0sIGV2ZXJ5IHRpbWUgSSBleGVjdXRlIHR0cHR5Y21kKCksCi1JIGdldCAicGVybWlz c2lvbiBkZW5pZWQiIG9uIC9kZXYvdHR5cDMuICBUaGVuIEkgcnVuIGl0IGFnYWluIGFuZCBnZXQg dG8KLXR0eXA0IHdoaWNoIGlzIE9LLiAgSSB3YW50ZWQgdG8gc2tpcCBwYXN0IGFueSBwdHkgZm9y IHdoaWNoIEkgbGFjawotcGVybWlzc2lvbiBhbmQgdHJ5IHRoZSBuZXh0IHdpdGhvdXQgcmFpc2lu ZyBhbiBlcnJvci4gIEFkZGVkIGRlYnVnZ2luZyBjb2RlOgotCi0gIDE2OjI1OjIzLjUyNCBwdHlf Z2V0cHR5KCkgcHR5IG1hc3RlciBvcGVuIGVycm9yWy9kZXYvcHR5cDBdPTUKLSAgMTY6MjU6MjMu NTI0IHB0eV9nZXRwdHkoKSBwdHkgbWFzdGVyIG9wZW4gZXJyb3JbL2Rldi9wdHlwMV09NQotICAx NjoyNToyMy41MjQgcHR5X2dldHB0eSgpIHB0eSBtYXN0ZXIgb3BlbiBlcnJvclsvZGV2L3B0eXAy XT01Ci0gIDE2OjI1OjIzLjUyNCBwdHlfZ2V0cHR5KCkgZm91bmQgcHR5IG1hc3RlclsvZGV2L3B0 eXAzXQotICAxNjoyNToyMy41MjQgcHR5X2dldHB0eSgpIHNsYXZlYnVmIFsyXVsvZGV2L3R0eXAz XQotCi1TbyBpdCBhbHJlYWR5IHdhcyBza2lwcGluZyBwYXN0IG9wZW4gZXJyb3JzOyB0dHlwMyB3 YXMgb3BlbmVkIHN1Y2Nlc3NmdWxseS4KLVRoZSBwcm9ibGVtIGlzIHRoYXQgcHR5cDMgaXMgcnct cnctcnctLCBidXQgdGhlIGNvcnJlc3BvbmRpbmcgbWFzdGVyLAotdHR5cDMsIGlzIHJ3LS1yLS0t LS4gIEl0IHNlZW1zIHRoZSBjb2RlIGFzc3VtZXMgdGhhdCBpZiB0aGUgbWFzdGVyIGNhbiBiZQot b3BlbmVkLCB0aGVuIHNvIGNhbiB0aGUgY29ycmVzcG9uZGluZyBzbGF2ZS4gIFVuZm9ydHVuYXRl bHksIHRoZSBjb2RlIGlzCi1ub3Qgc3RydWN0dXJlZCB0byBhbGxvdyB1cyB0byBza2lwIGFoZWFk IHRvIHRoZSBuZXh0IG1hc3RlciBpZiB0aGUgc2xhdmUKLWNhbid0IGJlIG9wZW5lZC4gIDcgSmFu IDIwMDcuCi0KLVNwZW50IGEgY291cGxlIGhvdXJzIHRyeWluZyB0byByZWFycmFuZ2UgdGhlIGNv ZGUgaW4gdGhlIHB0eSBtb2R1bGUgdG8gc2tpcAotcGFzdCBpbmFjY2Vzc2libGUgc2xhdmVzIGJ1 dCBpdCB3YXMgYSByYWJiaXQgaG9sZSwgbm90IHdvcnRoIGl0LCBiYWNrZWQgb2ZmLgotOCBKYW4g MjAwOC4KLQotVHJpZWQgYW4gdXBsb2FkIG92ZXIgYSBzZWN1cmUgY29ubmVjdGlvbiB1c2luZyBs c3ouICBVbmV4cGVjdGVkbHksIHRoaXMgdGltZQotaXQgd29ya2VkOyBub3Qgb25seSB3YXMgdGhl IGZpbGUgKGFib3V0IDAuNU1CKSB0cmFuc2ZlcnJlZCBjb3JyZWN0bHksIGJ1dAotS2VybWl0IGRl dGVjdGVkIHRoZSBmb3JrJ3MgdGVybWluYXRpb24gYW5kIGdvdCB0aGUgcGlkJ3MgZXhpdCBzdGF0 dXMsIGFuZCwKLWZvciB0aGUgZmlyc3QgdGltZSwgY29ycmVjdGx5IHJlcG9ydGVkIGEgc3VjY2Vz c2Z1bCB0cmFuc2Zlci4gIEkgaGF2ZSBubwotaWRlYSB3aHkgdGhpcyB3b3JrcyB0b2RheSBhbmQg bm90IHllc3RlcmRheS4gIE1vcmUgdGVzdHM7IGl0IHdvcmtzIG1vc3Qgb2YKLXRoZSB0aW1lLiAg SXQgd29ya3Mgd2l0aCBjc3ogYW5kIHdpdGggcmVndWxhciBzeiB0b28uCi0KLShkYXlzIGxhdGVy Li4uKQotCi1ja3VjbnMuYyBzZWVtcyB0byBkbyB0aGUgcmlnaHQgdGhpbmc7IGl0IHJlY29nbml6 ZSB0aGUgWlNUQVJUIHN0cmluZywKLWFjdGl2YXRlcyB0aGUgWm1vZGVtLVJlY2VpdmUgQVBDLCBh bmQgcmV0dXJucy4gIGRvY29uZWN0KCkgc2VlcyB0aGUgQVBDIGFuZAotYmVnaW5zIHRvIGV4ZWN1 dGUgaXQuICBUaGUgUkVDRUlWRSBjb21tYW5kIHJlc3VsdHMgaW4gYSBjYWxsIHRvIHRoZSBHRVQK LWNvbW1hbmQgcGFyc2VyLCBkb3hnZXQoKSAoSVMgVEhBVCBSSUdIVD8pLCB0aGVuIGNvbWVzIGEg dHRmbHVpKCksIHdoaWNoCi10aHJvd3MgYXdheSBhIGJ1bmNoIG9mIHN0dWZmLiAgRmluYWxseSB3 ZSBnZXQgdG8gdHRwdHljbWQoKSwgd2UgZ2V0IGEgcHR5Ci1hbmQgcnVuIGxyeiBpbiBpdCwgc2Vs ZWN0KCkgc2F5cyBzdHVmZiBpcyB3YWl0aW5nIGZyb20gdGhlIHB0eSwgYnV0IHJlYWQKLXJldHVy bnMgMCwgZXJybm8gMC4gIFNraXBwaW5nIHRoZSB0dGZsdWkoKSBpbiBkb3hnZXQoKSBpZiB0aGUg cHJvdG9jb2wgd2FzCi1ub3QgS2VybWl0IGRpZG4ndCBzZWVtIHRvIG1ha2UgZGlmZmVyZW5jZS4g IGNrdXVzNi5jLCA4IEphbiAyMDA3LgotCi1UaGUgcHJvYmxlbSBpcyB0aGF0IGluIHRoaXMgY2Fz ZSwgcmVhZHMgZnJvbSB0aGUgcHR5IG5ldmVyIGdldCBhbnl0aGluZyAobm8KLWRhdGEsIG5vIGVy cm9yKSwgd3JpdGUgYWx3YXlzIGdldHMgYW4gZXJyb3IuICBJdCdzIGFzIGlmIHRoZSBwdHkgd2Fz IG5vdAotYmVpbmcgc2V0IHVwIHJpZ2h0LCBvciB3ZSdyZSB1c2luZyB0aGUgd3JvbmcgZmlsZSBk ZXNjcmlwdG9yLiAgQW5kIGlmIHdlCi1za2lwIHRoZSBhdXRvZG93bmxvYWQ/ICBTYW1lIHRoaW5n LgotCi1PSywgcHV0dGluZyBkb3dubG9hZHMgYXNpZGUgZm9yIGEgbW9tZW50LCBsZXQncyBnZXQg dXBsb2FkcyB3b3JraW5nIGFzIHdlbGwKLWFzIHBvc3NpYmxlLiAgQXQgdGhpcyBwb2ludCB3ZSBo YXZlIHRoZSBvZGQgc2l0dWF0aW9uIChhdCBsZWFzdCBpbiB0aGlzCi1jb25maWd1cmF0aW9uKSB0 aGF0IHRoZSB1cGxvYWQgc3VjY2VlZHMsIGJ1dCBub3cgZm9yIHNvbWUgcmVhc29uIHdlIGFyZQot dW5hYmxlIHRvIHJlYWQgdGhlIGV4aXQgc3RhdHVzIGZyb20gdGhlIHByb2Nlc3MsIGV2ZW4gdGhv dWdoIHRoaXMgd2FzCi13b3JraW5nIGJlZm9yZSwgc28gdHRwdHljbWQoKSByZXR1cm5zIDAgKGZh aWx1cmUpLCB5ZXQgS2VybWl0IHJlcG9ydHMKLXN1Y2Nlc3MuCi0KLVdlbGwsIGl0IHR1cm5zIG91 dCB0aGF0IGtpbGwocHR5X2ZvcmtfcGlkLDApIHdhcyBndW1taW5nIHVwIHRoZSB3b3Jrcy4KLUlm IHdlIHVzZSBvbmx5IHdhaXRwaWQoKSBhbGwgaXMgd2VsbCwgSSB0aGluay4gIHdhaXRwaWQoKSB3 aXRoIFdOT0hBTkcKLXJldHVybnMgLTEgd2l0aCBzdGF0dXMgLTEgZXJybm8gMCBpZiB0aGUgcGlk IGhhcyBub3QgZXhpdGVkLCBhbmQgaXQgcmV0dXJucwotdGhlIHBpZCBhbmQgc3RhdHVzID4gLTEg aWYgdGhlIHByb2Nlc3MgaGFzIGV4aXRlZC4gIEZpeGVkIHB0eV9nZXRfc3RhdHVzKCkKLXRvIGRv IGl0IHRoaXMgd2F5LiAgY2t1dGlvLmMsIDcgSmFuIDIwMDcuCi0KLUxldCdzIG1vdmUgdGhpcyBm cm9tIE1hYyBPUyB0byBOZXRCU0QgYW5kIHNlZSBob3cgaXQgd29ya3MuICBXZWxsLCB0aGUgZmls ZQotdHJhbnNmZXIgd2FzIGp1c3QgZmluZSwgYnV0IHRoZW4gSSB1c2VkIHNvbWUgc2V4cHMgdG8g Y2FsY3VsYXRlIHRoZSBlbGFwc2VkCi10aW1lIGFuZCB0cmFuc2ZlciByYXRlLCBhbmQgS2VybWl0 IGh1bmcgaW4gZG9zZXhwKCkuICBGaW5lLCBpZ25vcmluZyB0aGF0Li4uCi1UaGUgZGVidWcgbG9n IHNob3dzIHRoYXQgdHRwdHljbWQoKSBnZXRzIHRoZSBwdHkgT0ssIG1hc3RlciBhbmQgc2xhdmUs IHRoZQotaS9vIGdvZXMgc21vb3RobHksIGFuZCB3YWl0cGlkKCkgZG9lcyBpdHMgam9iIHBlcmZl Y3RseS4gIFNvbGFyaXMsIHNhbWUKLWRlYWw7IHR0cnVuY21kKCkgZ29lcyBzbW9vdGhseSwgYnV0 IHRoZW4gdGhlIHNleHBzIGFmdGVyd2FyZCBnZXQgIkFyaXRobWV0aWMKLWV4Y2VwdGlvbiIuICBU dXJucyBvdXQgdGhlcmUgd2FzIGEgQkFEIGJ1ZyBpbiBkb3NleHAoKSB0aGF0IGFsbG93ZWQgYW4K LWludGVnZXIgZGl2aXNpb24gYnkgMCB0byBvY2N1ciB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5j ZXM7IGl0J3MgYWx3YXlzIGJlZW4KLXRoZXJlLiAgRml4ZWQgaW4gZG9zZXhwKCk6IGNrdXVzMy5j LCA4IEphbiAyMDA3LgotCi1BZnRlciBub3RpY2luZyBhIGZldyBwcm9ibGVtcyBydW5uaW5nIHRo ZSBwb3Aua3NjIHNjcmlwdCBpbiBwcm9kdWN0aW9uIG92ZXIKLXRoZSBwYXN0IHllYXIsIHJld3Jv dGUgXGZlbWFpbGFkZHJlc3MoKSB0byBiZSBtb3JlIHJlbGlhYmxlIGFuZCBhIGxvdAotc2ltcGxl ci4gIGNrdXVzNC5jLCA5IEphbiAyMDA3LgotCi1CYWNrIHRvIHR0cHR5Y21kKCkuLi4gIFdoZW4g d2UgbGVmdCBvZmYsIHdlIGNvdWxkIHNlbmQgYnV0IG5vdCByZWNlaXZlLiAgU2V0Ci11cCBhIHRl c3QgY2FzZSB1c2luZyBLZXJtaXQgYXMgdGhlIGV4dGVybmFsIHByb3RvY29sIGZvciByZWNlaXZp bmcgYSBzaG9ydAotZmlsZS4gIElmIEkgU0VUIFNUUkVBTUlORyBPRkYgYW5kIHVzZSBzaG9ydCBw YWNrZXRzLCBpdCBhY3R1YWxseSBkb2VzIHdvcmssCi1zbyBpdCdzIG5vdCBhIGNvbXBsZXRlIGZh aWx1cmUgdG8gZnVuY3Rpb24sIGJ1dCBhcHBhcmVudGx5IGEgbGFjayBvZiBmbG93Ci1jb250cm9s IGZvciB0aGUgcHR5LiAgQmVnYW4gYnkgY29tcGxldGluZyB0aGUgcGFyYW1ldGVyaXphdGlvbiBv ZiB0aGUgcHR5Ci1tb2R1bGUsIHNvIGl0IGNhbiBiZSBjYWxsZWQgZm9yIGludGVyYWN0aXZlIHVz ZSAoZmMgMCkgb3IgZm9yIHJ1bm5pbmcKLXByb3RvY29scyAoMSkuICBDb25maXJtZWQgdGhhdCBl dmVyeXRoaW5nIHdvcmtzIGF0IGxlYXN0IGFzIHdlbGwgYXMgYmVmb3JlCi0oZS5nLiAic2V0IGhv c3QgL3B0eSBlbWFjcyIgdnMgZXh0ZXJuYWwgcHJvdG9jb2xzKS4gIGNrY2RlYi5oLCBja3V0aW8u YywKLWNrdXB0eS5jLCA5IEphbiAyMDA3LgotCi1Gb3VuZCBpbiBIUC1VWCAibWFuIDcgcHR5IiBh IGRlc2NyaXB0aW9uIG9mIGlvY3RsKGZkLFRJT0NUVFksZmMpIHdoaWNoIGlzCi1leGFjdGx5IHdo YXQgd2Ugd2FudDogZmMgMCB0dXJucyBvZmYgYWxsIHRlcm1pbyBwcm9jZXNzaW5nIGFuZCBndWFy YW50ZWVzIGFuCi11bmludGVycnVwdGVkLCB1bm1vbGVzdGVkLCBmbG93LWNvbnRyb2xsZWQgc3Ry ZWFtIG9mIGJ5dGVzIGluIGJvdGgKLWRpcmVjdGlvbnMuICBUaGlzIGZ1bmN0aW9uIGFsc28gZXhp c3RzIGluIExpbnV4LCBidXQgbm90IGluIFNvbGFyaXMsIE5ldEJTRCwKLW9yIE1hYyBPUyBYIChU SU9DTk9UVFkgaXMgbm90IHdoYXQgd2Ugd2FudCwgaXQgZG9lcyBzb21ldGhpbmcgZWxzZSBlbnRp cmVseSkuCi0KLUFub3RoZXIgcG9zc2liaWxpdHkgaXMgVElPQ1JFTU9URSwgd2hpY2ggImNhdXNl cyBpbnB1dCB0byB0aGUgcHNldWRvdGVybWluYWwKLXRvIGJlIGZsb3cgY29udHJvbGxlZCBhbmQg bm90IGlucHV0IGVkaXRlZCwgcmVnYXJkbGVzcyBvZiB0aGUgdGVybWluYWwKLW1vZGUiLiAgVGhp cyBvbmUgZXhpc3RzIGluIGF0IGxlYXN0IEhQVVgsIE5ldEJTRCwgU29sYXJpcywgYW5kIE1hYyBP UyBYLgotCi1Tb2xhcmlzOiBidWlsZHMgT0ssIGJ1dCBhdCBydW50aW1lIHdlIGdldCBFTk9UVFkg KCJJbmFwcHJvcHJpYXRlIGlvY3RsIGZvcgotZGV2aWNlIikuICBCeSB0aGUgdGltZSB0aGlzIGhh cHBlbnMsIGl0J3MgaGFyZCB0byB0ZWxsIGZyb20gdGhlIGNvZGUgd2hldGhlcgotdGhlIGZkIHdl J3JlIHVzaW5nIGlzIGZvciB0aGUgbWFzdGVyIG9yIHRoZSBzbGF2ZTsgVElPQ1JFTU9URSBjYW4g YmUgdXNlZAotb25seSBvbiB0aGUgbWFzdGVyLiAgQ2xvc2UgaW5zcGVjdGlvbiBzaG93cyB0aGF0 IEkgYW0gaW5kZWVkIGRvaW5nIHRoYXQ7Ci1wdHlmZCBhcyBzZWVuIGJ5IHR0cHR5Y21kKCkgaXMg dHJ1bHkgdGhlIG1hc3RlciwgaS5lLiB0aGUgL2Rldi9wdHlYWCBkZXZpY2UsCi1ub3QgdGhlIC9k ZXYvdHR5WFggZGV2aWNlICh0aGUgc2xhdmUgZmQgY2FuJ3QgYmUgc2VlbiBhdCBhbGwsIGFzIGl0 IGV4aXN0cwotb25seSBpbiBhIHNlcGFyYXRlIGZvcmspLiAgT0ssIHNvIG5vdyB3ZSBrbm93IHRo YXQgVElPQ1JFTU9URSBjYW4ndCBiZSB1c2VkCi1vbiBTb2xhcmlzLgotCi1OZXRCU0Q6IFNvbWVo b3csIHdoZXRoZXIgYXMgYSByZXN1bHQgb2YgdG9kYXkncyBmaWRkbGluZyBvciB0aGUgcGhhc2Ug b2YgdGhlCi1tb29uLCB0aGUgY29kZSBpbiBwdHlfb3Blbl9zbGF2ZSgpIHRoYXQgdHJpZXMgdG8g b3BlbiAvZGV2L3R0eSBzdGFydGVkCi1mYWlsaW5nIG9uIE5ldEJTRCAoIkRldmljZSBub3QgY29u ZmlndXJlZCIpLiAgQ2hhbmdpbmcgaXQgdG8gYmUgcnVuIG9ubHkgaWYKLWZjID09IDAgKHdoaWNo IGRvZXNuJ3Qgc2VlbSB0byBodXJ0IGFueXRoaW5nKSwgb25jZSBhZ2FpbiBJIGdldCBFTk9UVFkg b24KLXRoZSBUSU9DUkVNT1RFIGlvY3RsLiAgWm1vZGVtIHdvcmtzIGJ1dCBLZXJtaXQgdG90YWxs eSBmYWlscyAodGhlIGZvcmsgZXhpdHMKLWltbWVkaWF0ZWx5IHdpdGggYW4gZXhpdCBjb2RlIG9m IDAsIGV2ZW4gdGhvdWdoIGl0IGRpZG4ndCBkbyBhbnl0aGluZykuCi0KLU1hYyBPUyBYOiBFeGFj dGx5IHRoZSBzYW1lIHNlcXVlbmNlIGFuZCByZXN1bHRzIGFzIE5ldEJTRC4KLQotTGludXg6ICBJ dCBkaWQgbm90IGV4ZWN1dGUgdGhlIG5ldyBpb2N0bCBhdCBhbGw7IGFwcGFyZW50bHkgdGhlIFRJ T0Mgc3ltYm9scwotYXJlIGhpZGRlbiBvciBub3QgZXhwb3J0ZWQgb3Igc29tZXRoaW5nLgotCi1X aGVyZSB3ZSBzdGFuZDoKLSAuIERvd25sb2FkcyBkb24ndCB3b3JrCi0gLiBVcGxvYWRzIGdvdCBz bG93IGFnYWluCi0gLiBLZXJtaXQgZG9lc24ndCB3b3JrIGF0IGFsbCBhcyBhbiBleHRlcm5hbCBw cm90b2NvbAotCi1BY3R1YWxseSBpZiBJIHRha2UgdGhlIGRlYnVnZ2luZyBvdXQgaXQgZ29lcyBm YXN0LCBidXQgaXQgZG9lc24ndCBmaW5pc2guCi0KLUFsbCB0b2RheSdzIHdvcmsgb24gdHRwdHlj bWQoKSBsb29rcyBsaWtlIGEgZGVhZCBlbmQuICBUbyByb2xsIGJhY2sgdG8KLXllc3RlcmRheToK LQotICBjcCBja3V0aW8uYy0yMDA3MDEwOCBja3V0aW8uYwotICBjcCBja3VwdHkuYy0yMDA3MDEw OCBja3VwdHkuYwotICBjcCBja3VwdHkuaC0yMDA3MDEwOCBja3VwdHkuaAotCi1vciB0byBjb250 aW51ZSB3aXRoIHRvZGF5J3M6Ci0KLSAgY3AgY2t1dGlvLmMtMjAwNzAxMDkgY2t1dGlvLmMKLSAg Y3AgY2t1cHR5LmMtMjAwNzAxMDkgY2t1cHR5LmMKLSAgY3AgY2t1cHR5LmgtMjAwNzAxMDkgY2t1 cHR5LmgKLQotQ29tcGFyaW5nIE1vbmRheSdzIGFuZCBUdWVzZGF5J3MgcHR5LXJlbGF0ZWQgY29k ZSwgdGhlIGRpZmZlcmVuY2VzIGFyZToKLSAxLiBQYXNzaW5nIG9mIGZ1bmN0aW9uIGNvZGUgdG8g YW5kIGFtb25nIHB0eSBtb2R1bGVzLgotIDIuIFNraXBwaW5nIHRoZSBUSU9DU0NUVFkgaW9jdGwg YW5kIHRoZSBvcGVuKCIvZGV2L3R0eSIpIHRlc3QuCi0gMy4gQXR0ZW1wdGluZyB0byBwdXQgcHR5 IGluIFRJT0NUVFkgb3IgVElPQ1JFTU9URSBtb2RlLgotCi1Db21tZW50aW5nIG91dCAyIGFuZCAz IHNob3VsZCBwdXQgdXMgYmFjayB3aGVyZSB3ZSB3ZXJlIG9uIE1vbmRheSBpZiB0aGUKLXBhcmFt ZXRlcml6YXRpb24gd2FzIGRvbmUgcmlnaHQuICBBbmQgd2l0aCB0aGlzLCBvbiBTb2xhcmlzLCBk b3dubG9hZGluZwotd2l0aCBLZXJtaXQgZXh0ZXJuYWwgcHJvdG9jb2wgd29ya3MgYnV0IHNsb3ds eSwgOEsgY3BzLCB3aXRoIG9yIHdpdGhvdXQKLWRlYnVnZ2luZy4gIERlYnVnIGxvZyBkb2VzIG5v dCBzaG93IGFueSBvYnZpb3VzIGJvdHRsZW5lY2tzOyBzZWxlY3QoKSB0YWtlcwotYW55d2hlcmUg YmV0d2VlbiBubyB0aW1lIGF0IGFsbCBhbmQgMC4xIHNlY29uZHMgdG8gcmV0dXJuLiAgSWYgSSBp bmNyZWFzZQotdGhlIHB0eS1uZXQgYnVmZmVyIHNpemUgZnJvbSAxSyB0byA0SywgdGhlIHJhdGUg Z29lcyB1cCB0byA1NUsgY3BzLiAgSWYgSQotbWFrZSBpdCA4SyBJIGdldCAxMzZLIGNwcy4gIFdp dGggMTZLIEkgZ2V0IDM0NksgY3BzLiAgMzJLOiAzOTVLIGNwcyAtLSB0aGlzCi1sYXN0IG9uZSBp c24ndCB3b3J0aCB0aGUgZG91YmxpbmcuICBCdXQgYXQgMjRLIEkgZ2V0IDQ5MEsgY3BzLCBzb21l dGltZXMKLXR3aWNlIHRoYXQuICBMZXQncyBzdGljayB3aXRoIDI0SyBmb3Igbm93LiAgRG93bmxv YWRpbmcgd2l0aCBabW9kZW0gKHJ6c3opCi13b3JrcyBhdCB0aGUgc2FtZSByYXRlLCBidXQgbm93 IHdlJ3JlIGJhY2sgdG8gc2VlaW5nIHRoZSBnZXR0eSBiYWJibGUKLShTZXZlcmFsICIqKkIwODAw MDAwMDAwMDIyZCIpIGF0IHRoZSBlbmQuIDEwIEphbiAyMDA3LgotCi1Nb3ZpbmcgdG8gTWFjIE9T IFgsIGV2ZXJ5dGhpbmcgd29ya3MgdGhlIHNhbWUgYXMgb24gU29sYXJpcywgZXhjZXB0IEkgZG9u J3QKLWdldCB0aGUgWm1vZGVtIGdldHR5IGJhYmJsZSB0aGVyZSwgbm90IGV2ZW4gd2l0aCBPbWVu IHJ6c3ouICBUZXN0ZWQgc2VuZHMKLWluIGJvdGggcmVtb3RlIGFuZCBsb2NhbCBtb2RlLCB0aGUg bGF0dGVyIG92ZXIgYSBzZWN1cmUgS2VyYmVyb3MgNSBUZWxuZXQKLWNvbm5lY3Rpb24sIHVzaW5n IEMtS2VybWl0LCByenN6LCBscnpzeiwgYW5kIGNyenN6LCBhbGwgZ29vZC4gIDEwIEphbiAyMDA3 LgotCi1Ob3cgd2UncmUgYmFjayB3aGVyZSB3ZSB3ZXJlIHllc3RlcmRheSBtb3JuaW5nLCBidXQg d2l0aCBiZXR0ZXIgdGhyb3VnaHB1dC4KLVRoZSBiaWcgaXNzdWUgdGhlbiB3YXMgcmVjZWl2aW5n IGZpbGVzLiAgQnV0IHlpa2VzLCBub3cgaXQgd29ya3MhICBOb3Qgb25seQotdGhhdCwgSSBnb3Qg YSB0cmFuc2ZlciByYXRlIG9mIDIuMU0gY3BzLiAgVGhhdCdzIHVzaW5nIEtlcm1pdCBwcm90b2Nv bCwKLXN0cmVhbWluZywgYW5kIGJpZyAoNEspIHBhY2tldHMuICBXaGljaCBkaWRuJ3Qgd29yayBi ZWZvcmUuICBOb3QgYSBmbHVrZQotZWl0aGVyLCBJIHVwbG9hZGVkIGJpZ2dlciBhbmQgYmlnZ2Vy IGZpbGVzIHVwIHRvIDZNQiwgdGhleSBhbGwgd2VudAotc21vb3RobHksIGF0IHJhdGVzIGJldHdl ZW4gMSBhbmQgMiBNQnBzLiAgMTAgSmFuIDIwMDcuCi0KLU5vdCBzbyBncmVhdCBpbiBabW9kZW0g bGFuZCwgaG93ZXZlci4gIElmIEkgc3RhcnQgdGhlIGV4dGVybmFsLXByb3RvY29sCi1yZWNlaXZl ciBvbiB0aGUgZmFyIGVuZCwgZXNjYXBlIGJhY2sgYW5kIHN0YXJ0IGEgWm1vZGVtIHNlbmQuLi4g bm90aGluZy4KLUlmIEkgbGVhdmUgdGhlIHJlbW90ZSBDLUtlcm1pdCBhdCBpdHMgcHJvbXB0ICh3 aGVyZSBpdCBzdXBwb3NlZCB0byByZWNvZ25pemUKLXRoZSBabW9kZW0gc3RhcnQgc3RyaW5nKSwg c3RpbGwgbm90aGluZy4gIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBJIGRvIGl0Ci13aXRoIGEgc2Ny aXB0IGluc3RlYWQgb2YgYnkgaGFuZDoKLQotICBkZWYgeHggb3V0cHV0IHRha2UgYmxhaFwxMywg c2VuZCAvcHJvdG86em1vZGVtIFwlMQotICAKLWl0IHdvcmtzLCBhdCBsZWFzdCBpbnRlcm1pdHRl bnRseS4gIEJ1dCB0aGF0J3MgaW4gcmVtb3RlIG1vZGUuICBXZSB3b24ndCBiZQotdXNpbmcgdGhp cyBpbiByZW1vdGUgbW9kZS4gIEluIGxvY2FsIG1vZGUsIHdoZXJlIHdlIGhhdmUgYSBzZWN1cmUg Y29ubmVjdGlvbgotdG8gYW5vdGhlciBjb21wdXRlciwgaXQgc2VlbXMgd2UgY2FuIHJlYWQgZnJv bSB0aGUgcHR5IGFuZCB3cml0ZSB0byB0aGUgbmV0LAotYnV0IHdlIHRpbWUgb3V0IHdhaXRpbmcg dG8gcmVhZCBmcm9tIHRoZSBuZXQ7IG5vdGhpbmcgYXJyaXZlcy4gIFdlbGwsIHdlCi1rbm93IHRo YXQgaS9vIHdvcmtzIGJvdGggd2F5cywgc28gdGhlcmUgaXMgc29tZSBraW5kIG9mIHNjcmV3dXAg d2l0aCB0aGUKLVptb2RlbSBwcm90b2NvbCBzdGFydCBpdHNlbGYuICBJbmNyZWFzaW5nIHRoZSAo c3RpbGwgaGFyZHdpcmVkIHRpbWVvdXQpIGZyb20KLTUgdG8gMjJzZWMgYW5kIGRyaXZpbmcgdGhl IHdob2xlIHByb2Nlc3Mgd2l0aCBhIHNjcmlwdCBzbyBhcyB0byBhdm9pZAotYXV0b2Rvd25sb2Fk IGFzIHdlbGwgYXMgbWFudWFsIGRleHRlcml0eSBlZmZlY3RzLi4uICBJdCBqdXN0IHNpdHMgdGhl cmUKLWZvcmV2ZXIsIHdheSBsb25nZXIgdGhhbiAyMiBzZWMuICBeQydpbmcgb3V0LCBJIHNlZSB0 aGF0IHN6IHdhcyBpbmRlZWQKLXN0YXJ0ZWQgb24gdGhlIGZhciBlbmQgYW5kIHRoZSBwcm90b2Nv bCB3YXMgZXhlY3V0aW5nLiAgQnV0IGl0IGxvb2tzIGxpa2UKLXRoZSByZWNlaXZlciAodGhlIG9u ZSBydW5uaW5nIHVuZGVyIHR0cHR5Y21kKCkpIGlzIGdldHRpbmcgdHJhc2hlZCBwYWNrZXRzLAot YmVjYXVzZSAoYSkgaXQgc2VlbXMgdG8gYmUgc2VuZGluZyB0aGUgc2FtZSB0aGluZyBvdmVyIGFu ZCBvdmVyIGFnYWluLCBhbmQKLShiKSBzb21ldGltZXMgaXQgd2FpdHMgYXMgbG9uZyBhcyAxMCBz ZWNvbmRzIGJlZm9yZSBhbnl0aGluZyBhcnJpdmVzIGZyb20KLXRoZSByZW1vdGUuICBNYXliZSBJ IHdhcyB0b28gaW1wYXRpZW50OyBJIGludGVycnVwdGVkIGl0IGFmdGVyIDQgbWludXRlcyBidXQK LWl0IHNlZW1zIHRvIGhhdmUgYmVlbiBtYWtpbmcgc29tZSBwcm9ncmVzcy4gIFdoZW5ldmVyIHRo ZXJlIHdhcyBkYXRhCi1hdmFpbGFibGUgdG8gcmVhZCBmcm9tIHRoZSBuZXQsIGl0IHdhcyBhbHdh eXMgNjUgYnl0ZXMsIGFuZCBpdCB3YXMgbm90Ci1hY3R1YWxseSB0aGUgc2FtZSBkYXRhIG92ZXIg YW5kIG92ZXIuICBUaGlzIGlzIHVzaW5nIGxyeiBhcyB0aGUgZXh0ZXJuYWwKLXByb3RvY29sLiAg Y3J6IGdldHMgYSBiaXQgZmFydGhlci4gIEluIHRoaXMgY2FzZSB3ZSByZWFkIHVwIHRvIDI0SyBh dCBhCi1ndWxwLCBidXQgdGhlIGFtb3VudCB2YXJpZXMgYSBsb3QuICBJdCBsb29rcyBsaWtlIHdl IHRvb2sgaW4gYWJvdXQgMS4yTUIgb2YKLVptb2RlbSBwcm90b2NvbCBkYXRhLCBidXQgd2VyZSBv bmx5IGFibGUgdG8gb3V0cHV0IHRoZSBmaXJzdCAyMEsgb2YgdGhlCi1maWxlLiAgQ2xlYXJseSB0 aGVyZSB3ZXJlIGxvdHMgb2YgZXJyb3JzLiAgSW4gdGhlIGVuZCwgdGhlIGNyeiBleGl0cyB3aXRo Ci1zdGF0dXMgMSAoZmFpbHVyZSkuCi0KLUFueXdheSBpdCBsb29rcyBsaWtlIHdlJ3JlIGJhY2sg YXQgbmVlZGluZyB0byBmaW5kIGEgd2F5IHRvIGFjY29tcGxpc2gKLXNvbWV0aGluZyBsaWtlIFRJ T0NSRU1PVEUgb24gdGhlIHB0eSwgd2hpY2ggaXMgd2hlcmUgd2UgY2FtZSBpbi4gIDEwIEphbiAy MDA3LgotCi1XaXRob3V0IGFueSB3YXkgdG8gbWFrZSB0aGUgcHR5IHRyYW5zcGFyZW50IGFuZCBm bG93IGNvbnRyb2xsZWQsIGl0IHdvdWxkCi1zZWVtIHRvIG1ha2Ugc2Vuc2UgdG8gd3JpdGUgdG8g dGhlIHB0eSBpbiBzbWFsbGVyIGNodW5rcyB0aGFuIHdlIGRvIHRvIHRoZQotbmV0LiAgSSBsZWZ0 IHRoZSByZWFkLWZyb20tcHR5LXdyaXRlLXRvLW5ldCBidWZmZXIgYXQgMjRLIGFuZCBjaGFuZ2Vk IHRoZQotcmVhZC1mcm9tLW5ldC13cml0ZS10by1wdHkgYnVmZmVyIHRvIDQ4IGJ5dGVzLgotCi1V cGxvYWQgdXNpbmcgbHN6IHdvcmtlZCBidXQgdG9vayBhYm91dCAzIG1pbnV0ZXMuICBBY3R1YWxs eSBpdCBkaWRuJ3Qgd29yay4KLU9uIHRoZSBsb2NhbCBlbmQgaXQgc2VlbWVkIHRvIHdvcmssIGJ1 dCB0aGUgZmlsZSBkaWQgbm90IGFwcGVhciBvbiB0aGUKLXJlbW90ZSBlbmQuICBUcmllZCB0aGlz IHNldmVyYWwgdGltZXMsIGVhY2ggdGltZSB3aXRoIGRpZmZlcmVudCByZXN1bHRzLAotYWRkaW5n IG1vcmUgZGVidWdnaW5nIGVhY2ggdGltZS4gIFRoZSBwcm9ibGVtIHRoaXMgdGltZSB3YXMgdGhh dCB0aGUgcHR5Ci1yZWFkIGNvdWxkIGdldCBFV09VTERCTE9DSy4gIENoYW5nZWQgdGhlIGNvZGUg dG8gbm90IHRyZWF0IHRoaXMgYXMgYW4gZXJyb3IsCi1ub3cgWm1vZGVtIHVwbG9hZHMgYXJlIHNv bGlkIGFnYWluIGV4Y2VwdCBJIG5ldmVyIGdvdCBFV09VTERCTE9DSyBhZ2FpbgotZWl0aGVyLCBl dmVuIHRob3VnaCBJIHJlcGVhdGVkIHRoZSBzYW1lIHVwbG9hZCBhYm91dCAxMDAwIHRpbWVzICh3 aXRoCi10aHJvdWdocHV0IG9mIG92ZXIgMk1CcHMgZXZlbiB3aXRoIGRlYnVnZ2luZyBvbiksIHNv IHRoZSB0ZXN0IGZvciBpdCBoYXMKLW5vdCBiZWVuIGV4ZXJjaXNlZC4KLQotT0ssIHVwbG9hZHMg c3RpbGwgd29yay4gIEJhY2sgdG8gZG93bmxvYWRpbmcuLi4gIFRoZSB2ZXJ5IGZpcnN0IHB0eSBy ZWFkCi1nZXRzIDAgYnl0ZXMsIGZvbGxvd2VkIGJ5IHRoZSBmb3JrIHRlc3QgdGhhdCBzaG93cyB0 aGF0IGl0IGV4aXRlZCB3aXRoCi1leGl0IHN0YXR1cyAyLiAKLQotTmV4dCB3ZSB0cnkgc3RhcnRp bmcgc3ogd2l0aCBzb21lIGRpZmZlcmVudCBvcHRpb25zIG9uIHRoZSBmYXIgZW5kOgotCi0gLXE6 IHF1aWV0IChubyBtZXNzYWdlcyk6Ci0gICAgIGZvciBzb21lIHJlYXNvbiB0aGlzIGdldHMgdG90 YWxseSBzdHVjay4KLSAgICAgaXQgbG9va3MgYXMgaWYgdGhpcyBvcHRpb24gaXMgbWlzZG9jdW1l bnRlZDsKLSAgICAgc3ogc2VlbXMgdG8gYmUgc2VuZGluZyB0aGUgbGV0dGVyIEMgKGFzIGluIFht b2RlbSAxSyBvciB3aGF0ZXZlcikKLQotIC1lOiBlc2NhcGUgKGFsbCBjb250cm9sIGNoYXJzKToK LSAgICAgZmlyc3QgYXR0ZW1wdCB0byByZWFkIHB0eSBmaW5kcyB0aGUgcHJvY2VzcyBnb25lIHdp dGggZXhpdCBzdGF0dXMgMi4KLQotIC1rOiBzZW5kIDFrIGJsb2NrczoKLSAgICAgdGhpcyBvbmUg ZGlkbid0IHN0b3AgaW1tZWRpYXRlbHkuICBJdCByZWFkcyA0OCBieXRlcyBmcm9tIG5ldCwgd3Jp dGVzCi0gICAgIDQ4IHRvIHRoZSBwdHkgd2l0aCBubyBlcnJvci4gIFRoZW4gcmVhZHMgMjEgYnl0 ZXMgZnJvbSB0aGUgcHR5LCB3cml0ZXMKLSAgICAgdGhlbSB0byB0aGUgbmV0IE9LLiAgVGhlbiBy ZWFkcyA0OCBieXRlcyBmcm9tIG5ldCwgd3JpdGVzIHRoZW0gdG8gcHR5IE9LLAotICAgICByZWFk cyAyMSBmcm9tIHB0eSwgd3JpdGVzIHRvIG5ldCBPSywgZXRjIGV0Yy4uLiAgSXQgYXBwZWFycyB0 byBoYXZlCi0gICAgIHdvcmtlZCBidXQgKGZpbmFsIHJlYWQgZnJvbSBwdHkgcmV0dXJuZWQgMCwg Zm9yayB0ZXN0IHNob3dlZCBscnogZXhpdGVkCi0gICAgIHdpdGggc3RhdHVzIDApLCBidXQgb25s eSA3NTQgYnl0ZXMgd2VyZSByZWNlaXZlZCBmcm9tIHRoZSBuZXQgd2hlbiB0aGUKLSAgICAgZmls ZSBpcyA0MjBLLi4uCi0KLVdlbGwgdGhpcyBvbmx5IGdvZXMgdG8gc2hvdyB0aGF0IHRoZSBmYXN0 ZXIgd2Ugc2hvdmUgc3R1ZmYgaW50byB0aGUgcHR5LCB0aGUKLXdvcnNlIGl0IGdldHMuICBabW9k ZW0gZG93bmxvYWRzIHdvbid0IHdvcmsgdW5sZXNzIHdlIGNhbiBtYWtlIHRoZSBwdHkKLXRyYW5z cGFyZW50IGFuZCBmbG93LWNvbnRyb2xsZWQuICBTbyB0byBzdW1tYXJpemUgdG9kYXkncyBkZXZl bG9wbWVudHM6Ci0KLSAuIHNlcGFyYXRlZCBpbi9vdXQgYnVmZmVyIHNpemVzCi0gLiBoYW5kbGVk IEVXT1VMREJMT0NLCi0gLiBmb3VuZCBvdXQgdGhhdCBzeiBvcHRpb25zIGRvbid0IGhlbHAgbXVj aAotCi0xMSBKYW4gMjAwNy4KLQotTmV4dCBkYXkuICBUaGlzIGhhcyBnb3QgdG8gYmUgdGhlIG1v c3QgZGVsaWNhdGUgY29kZSBldmVyLCBpdCdzIGxpa2UKLVdoYWNrLUEtTW9sZSwgZml4IEEgYW5k IEIgcG9wcyB1cC4gIEV2ZW4gd2l0aG91dCB0b3VjaGluZyBpdCwgc29tZXRoaW5nIHRoYXQKLXdv cmtlZCBwZXJmZWN0bHkgYSAyOjAwIGRvZXNuJ3Qgd29yayBhdCBhbGwgYW4gaG91ciBsYXRlci4g IE1heWJlIEkgY291bGQKLWhhdmUgdXNlZCBwaXBlcyBpbnN0ZWFkIG9mIHB0eXMsIGJ1dCBwaXBl cyBoYXZlIHByb2JsZW1zIG9mIHRoZWlyIG93bi4KLVRoZXJlIGhhcyB0byBiZSBhIHdheSB0byBk byB0aGlzLiAgVGhlIHRlbG5ldCBzZXJ2ZXIsIHRoZSBTU0ggc2VydmVyLCBldGMgLS0KLXRoZXkg YWxsIHJ1biBvbiBwdHlzLCBhbmQgd2UgY2FuIHVwbG9hZCBmaWxlcyB0byB0aGVtIHdpdGggS2Vy bWl0LiAgV2h5PwotQmVjYXVzZSBLZXJtaXQgcHV0cyBpdHMgdGVybWluYWwgaW50byBhbGwgdGhl IHJpZ2h0IG1vZGVzIHVzaW5nIHRoZQotdGltZS1ob25vcmVkIG1ldGhvZHMgb2YgdHRwa3QoKSBh bmQgdHR2dCgpLiAgUGVyaGFwcyBhbGwgd2UgbmVlZCBpcyBhIGNvcHkKLW9mIHR0cGt0KCkgdGhh dCBvcGVyYXRlcyBvbiB0aGUgcHR5LgotCi1PbiB0aGF0IHRoZW9yeSwgbGV0J3MgZ28gYmFjayB0 byBLZXJtaXQgYXMgdGhlIGV4dGVybmFsIHByb3RvY29sLgotSXQncyBpbXBvcnRhbnQgdG8gc3Vw cHJlc3MgYWxsIG1lc3NhZ2VzIGFuZCBkaXNwbGF5cy4gIFdpdGggdGhhdCwKLXVwbG9hZHMgd29y ayBmaW5lLCBubyBoaXRjaGVzLgotCi1Eb3dubG9hZHM6ICBXZSBmYWlsIHJpZ2h0IGF3YXkuICBU aGUgZGVidWcgbG9nIHNob3dzIHRoZSBLZXJtaXQgcHJvZ3JhbSB0aGF0Ci13ZSBhcmUgc3RhcnRp bmcgaW4gdGhlIHB0eSBzYXlzOgotCi0gICIiIC0gSW52YWxpZCBjb21tYW5kLWxpbmUgb3B0aW9u LCB0eXBlICJrZXJtaXQgLWgiIGZvciBoZWxwLgotCi1CdXQgb2YgY291cnNlIHdlIGFyZSBub3Qg Z2l2aW5nIGl0IGFuIGludmFsaWQgY29tbWFuZC1saW5lIG9wdGlvbi4KLVN3aXRjaGluZyB0byBn a2VybWl0IGZvciB0aGUgZXh0ZXJuYWwgcHJvdG9jb2wsIG5vdyB3ZSBzZWUgdGhhdCBubyBtYXR0 ZXIKLWNvbW1hbmQtbGluZSBvcHRpb25zIHdlIHVzZSwgd2UgcmVhZCAwZCAwZCAwYSBmcm9tIHRo ZSBwdHkgYW5kIHRoZW4gdGhlCi1uZXh0IHRpbWUgd2UgZ28gdG8gcmVhZCBmcm9tIHRoZSBwdHkg d2UgZ2V0IDAgYnl0ZXMgYW5kIHdhaXRwaWQoKSBzYXlzIHRoZQotcHJvZ3JhbSBoYXMgZXhpdGVk IHdpdGggc3RhdHVzIDEuCi0KLVdoeSBzaG91bGQgZG93bmxvYWRpbmcgYmUgZGlmZmVyZW50IGZy b20gdXBsb2FkaW5nPyAgdHRwdHljbWQgaGFzIG5vIGlkZWEsCi1pdCBkb2VzIGV2ZXJ5dGhpbmcg dGhlIHNhbWUuICBUaGUgb25seSBkaWZmZXJlbmNlIHdvdWxkIHNlZW0gdG8gYmUgd2hpY2gKLXNp ZGUgc2VuZHMgZmlyc3QsIGJ1dCBldmVuIHRoYXQgdGVuZHMgdG8gZ2V0IHdhc2hlZCBvdXQgYnkg ZWFjaCBwcm9ncmFtJ3MKLXN0YXJ0dXAgbWVzc2FnZXMuCi0KLURvd25sb2FkaW5nIHdpdGggS2Vy bWl0IHdvcmtlZCAyIGRheXMgYWdvLCB3aGF0J3MgZGlmZmVyZW50IG5vdz8gIFRoZSBidWZmZXIK LXNpemVzLiAgUHV0dGluZyB0aGUgbmV0LXRvLXB0eSBiYWNrIHVwIHRvIDI0SyAoZnJvbSA0OCBi eXRlcykuLi4gIE5vdyBpdAotd29ya3MgYWdhaW4uCi0KLUNvbmNsdXNpb246IEtlcm1pdCBjb25k aXRpb25zIHRoZSBwdHkgY29ycmVjdGx5LCBabW9kZW0gZG9lcyBub3QuICBUaGVyZWZvcmUKLXR0 cnVuY21kKCkgbXVzdCBkdXBsaWNhdGUgd2hhdCB0dHBrdCgpIGRvZXMuCi0KLU9yIG5vdC4gIEJl Y2F1c2Ugcnogd29ya3MgZmluZSBvbiBzc2gvdGVsbmV0IHB0eXMgdG9vLiAgQnV0IG5vdCBvbiBv dXIgcHR5LgotbHJ6IGV4aXRzIGltbWVkaWF0ZWx5IHdpdGggc3RhdHVzIGNvZGUgMiA9IDAxMDAw IGJ1dCB0aGVyZSBhcmUgbm8gY2x1ZXMgaW4KLXRoZSBscnouYyBzb3VyY2UgY29kZSwgSSBkb24n dCBldmVuIHNlZSB0aGlzIGV4aXQgc3RhdHVzIHNldCBhbnl3aGVyZS4KLVVucmVkaXJlY3Rpbmcg c3RkZXJyLCBJIHNlZSB0aGF0IHRoZSBlcnJvciBpcyAibHJ6OiBnYXJiYWdlIG9uIGNvbW1hbmQg bGluZSIuCi0KLVdoeSBkbyBib3RoIEtlcm1pdCBhbmQgWm1vZGVtIHNvbWV0aW1lcyB0aGluayB0 aGV5IGFyZSByZWNlaXZpbmcgYW4gaW52YWxpZAotY29tbWFuZCBsaW5lPyAgSWYgSSBjb3VsZCBj YXB0dXJlIHRoZSBnYXJiYWdlLi4uCi0KLVNpZGUgdHJpcCAjMTogKCJwdHkubG9nIixPX1dST05M WSkgZ2l2ZXMgIm5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiLgotQ2hhbmdlZCB0aGlzIHRvICgi cHR5LmxvZyIsT19DUkVBVCwwNjQ0KSBhbmQgbm93IGl0IGRvZXNuJ3QgZ2V0IGFuIGVycm9yLAot YW5kIGl0IGNyZWF0ZXMgdGhlIGZpbGUsIGJ1dCBub3Qgd2l0aCAwNjQ0IHBlcm1pc3Npb25zLCBh bmQgd2l0aCBub3RoaW5nCi13cml0dGVuIGluIGl0LiAgSG93IGNvbWUgbm90aGluZyB3b3Jrcz8K LQotRmluZSwgdGhlIGRlYnVnIGxvZyBzaG93cyB0aGF0IHR0cHR5Y21kKCkgcmVjZWl2ZXMgdGhl IGNvcnJlY3Qgc3RyaW5nCi0oZS5nLiAibHJ6IC12IikuICBJdCBwYXNzZXMgaXQgdG8gZG9fcHR5 KCkgY29ycmVjdGx5LCBhbmQgZG9fcHR5KCkgcGFzc2VzIGl0Ci10byBleGVjX2NtZCgpLCB3aGlj aCBydW5zIGNrc3BsaXQoKSBvbiBpdCwgY29taW5nIHVwIChpbiB0aGlzIGNhc2UpIHdpdGgKLSJs cnoiIGFuZCAiLXYiLCB3aGljaCBpcyByaWdodCwgYW5kIHRoZW46Ci0KLSAgICBhcmdzID0gcS0+ YV9oZWFkICsgMTsKLSAgICBleGVjdnAoYXJnc1swXSxhcmdzKTsKLQotZXhlY3ZwKCkgd2FudHMg dGhlIGFyZ3MgYXJyYXkgdG8gaGF2ZSBhIG51bGwgZWxlbWVudCBhdCB0aGUgZW5kLiAgY2tzcGxp dCgpCi1kb2VzIGluZGVlZCBkbyB0aGF0LCBvciBhdCBsZWFzdCB0aGUgY29kZSBpcyB0aGVyZS4g IEFkZGVkIGNvZGUgdG8gZXhlY19jbWQoKQotdG8gdmVyaWZ5IHRoZSBhcmd1bWVudCBsaXN0IGFu ZCB0aGF0IGl0IGlzIG51bGwtdGVybWluYXRlZC4gIFNvIGZhciBpdCBpcy4KLQotQW55d2F5LCB3 ZSBoYXZlIHRyYWZmaWMgYmV0d2VlbiB0aGUgWm1vZGVtIHBhcnRuZXJzLCBidXQgbm8gam95Lgot Q29tbWVudGluZyBvdXQgdGhlIGJpdCB0aGF0IHJlZGlyZWN0cyBzdGRlcnIsIG5vdyBJIGNhbiBz ZWUgaXQgb24gbXkgc2NyZWVuCi1pbiByZWFsIHRpbWU6Ci0KLSAgbHJ6IHdhaXRpbmcgdG8gcmVj ZWl2ZS5SZXRyeSAwOiBCYWQgQ1JDCi0gIFJldHJ5IDA6IEdvdCBFUlJPUgotICBSZXRyeSAwOiBU SU1FT1VUCi0gIFJldHJ5IDA6IFRJTUVPVVQKLSAgUmV0cnkgMDogVElNRU9VVAotICBSZXRyeSAw OiBUSU1FT1VUCi0KLWV0YyBldGMsIGZvcmV2ZXIuICBUcnlpbmcgc3ogLWUgb24gdGhlIGZhciBl bmQsIEkgZ2V0OgotCi0gIFJldHJ5IDA6IEJhZCBDUkMKLSAgUmV0cnkgMDogR2FyYmFnZSBjb3Vu dCBleGNlZWRlZAotICBSZXRyeSAwOiBHYXJiYWdlIGNvdW50IGV4Y2VlZGVkCi0gIFJldHJ5IDA6 IEdhcmJhZ2UgY291bnQgZXhjZWVkZWQKLSAgUmV0cnkgMDogR2FyYmFnZSBjb3VudCBleGNlZWRl ZAotICBSZXRyeSAwOiBHYXJiYWdlIGNvdW50IGV4Y2VlZGVkCi0gIFJldHJ5IDA6IEdhcmJhZ2Ug Y291bnQgZXhjZWVkZWQKLSAgUmV0cnkgMDogR2FyYmFnZSBjb3VudCBleGNlZWRlZAotICAuLi4K LSAgUmV0cnkgMDogR290IEVSUk9SCi0gIFJldHJ5IDA6IEJhZCBDUkMKLSAgUmV0cnkgMDogR290 IEVSUk9SCi0gIFJldHJ5IDA6IEdvdCBFUlJPUgotICBscno6IHh4dWZpby5jIHJlbW92ZWQuCi0K LVNvIGFwcGFyZW50bHkgaXQncyBub3QgYSBtYXR0ZXIgb2YgZXNjYXBpbmcuICBUcnlpbmcgc29t ZSBvdGhlciBzdHVmZiwgSQotY2F1Z2h0IHRoZSBjb21tYW5kLWxpbmUgcHJvYmxlbSBpbiB0aGUg YWN0OgotCi0gIGxyejogZ2FyYmFnZSBvbiBjb21tYW5kbGluZQotICBUcnkgYGxyeiAtLWhlbHAn IGZvciBtb3JlIGluZm9ybWF0aW9uLgotCi1EZWJ1ZyBsb2cgc2hvd3M6Ci0KLSAgY2tzcGxpdCBy ZXN1bHRbbHJ6XT0xCi0gIGNrc3BsaXQgcmVzdWx0Wy12XT0yCi0gIGV4ZWNfY21kIGFyZ1tscnpd PTAKLSAgZXhlY19jbWQgYXJnWy12XT0xCi0gIGV4ZWNfY21kIGFyZ1tdPTIKLQotQW4gZW1wdHkg c3RyaW5nIGF0IHRoZSBlbmQgaW5zdGVhZCBvZiBhIG51bGwgcG9pbnRlci4gIEkgcmVhbGx5IGRv IG5vdCBzZWUKLWFueSB3YXkgdGhhdCBjb3VsZCBoYXBwZW4sIGJ1dCByYXRoZXIgdGhhbiBkaWcg aW50byBja3NwbGl0KCkgYWdhaW4gYWZ0ZXIKLWFsbCB0aGVzZSB5ZWFycyBJIGFkZGVkIGEgdGVz dCBmb3IgdGhpcyBpbiBleGVjX2NtZCgpLCB3aGljaCwgb2YgY291cnNlCi1hZnRlciBhZGRpbmcg aXQsIG5ldmVyIGVuY291bnRlcmVkIHRoaXMgYmVoYXZpb3IgYWdhaW4uCi0KLUZpZGRsZWQgd2l0 aCBwdHkgYnVmZmVyIHNpemUgYWdhaW4uICBNYWRlIGl0IDUxMiBieXRlcyBpbnN0ZWFkIG9mIDI0 Sy4KLVptb2RlbSBkb3dubG9hZHMgYXJlIHRoZSBzYW1lIChSZXR5IDA6IFRJTUVPVVQsIG92ZXIg YW5kIG92ZXIpLiAgQnV0IEkgZG9uJ3QKLXNlZSB3aGF0IHRoZSBwcm9ibGVtIGlzIC0tIGV2ZXJ5 IHRpbWUgd2UgcmVjZWl2ZSBuIGJ5dGVzIGZyb20gdGhlIG5ldCwgd2UKLXdyaXRlIG4gYnl0ZXMg c3VjY2Vzc2Z1bGx5IHRvIHRoZSBwdHkgYW5kIHRoZXJlIGFyZSBubyBlcnJvcnMuICBCdXQgaXQg YWxzbwotbG9va3MgbGlrZSB0aGUgcmVtb3RlIHNlbmRlciBpcyBzZW5kaW5nIHRoZSBmaWxlIGhl YWRlciBvdmVyIGFuZCBvdmVyCi1iZWNhdXNlIGl0J3Mgbm90IHJlY2VpdmluZyBhbiBhY2tub3ds ZWRnbWVudC4gIElmIHdlJ3JlIG5vdCBsb3NpbmcgZGF0YSwKLXRoZW4gbWF5YmUgaXQncyBhIHRy YW5zcGFyZW5jeSBwcm9ibGVtLgotCi1UcmllZCB1bmNvbW1lbnRpbmcgdGhlIFRJT0NibGFoIHN0 dWZmIEkgY29tbWVudGVkIG91dCBiZWZvcmUuICBOb3cgaW5zdGVhZAotb2Ygb25seSB0aW1lb3V0 cyBJIGdldDoKLQotICBscnogd2FpdGluZyB0byByZWNlaXZlLlJldHJ5IDA6IEJhZCBDUkMKLSAg UmV0cnkgMDogR290IEVSUk9SCi0gIFJldHJ5IDA6IEJhZCBDUkMKLSAgUmV0cnkgMDogR290IEVS Uk9SCi0gIFJldHJ5IDA6IEJhZCBDUkMKLSAgUmV0cnkgMDogR290IEVSUk9SCi0gIFJldHJ5IDA6 IFRJTUVPVVQKLQotd2hpY2ggaXMgb2RkIGJlY2F1c2UgdGhlIFRJT0NSRU1PVEUgaW9jdGwgZmFp bGVkIHdpdGggZXJybm8gMTQsIEVGQVVMVCwKLWJhZCBhZGRyZXNzLCB3aGljaCBzaG91bGQgaW5k aWNhdGUgaXQgaGFkIG5vIGVmZmVjdC4gIFdlJ3JlIHN0aWxsIHJlY2VpdmluZwotZGF0YSBmcm9t IHRoZSByZW1vdGUgaW4gdGlueSBjaHVua3MgKGZyb20gMTIgdG8gNjUgYnl0ZXMpLCBhcHBhcmVu dGx5IHRoZQotc2FtZSBzdHVmZiAoZmlsZSBoZWFkZXIpLCBhbmQgd3JpdGluZyB0aGVtIHRvIHRo ZSBwdHkgc3VjY2Vzc2Z1bGx5IGJ1dAotbm90aGluZy4uLgotCi1Mb29rZWQgYXQgY2xvbmluZyB0 dHBrdCgpIGZvciB0aGUgcHR5LCBidXQgdGhlc2Ugc3R1cGlkIHJvdXRpbmVzIHVzZSBnbG9iYWwK LXR0eSBtb2RlIHN0cnVjdHMgc28gaXQncyBub3QgZ29pbmcgdG8gYmUgZWFzeS4KLQotV2VsbCwg d2UgZ290IGV4YWN0bHkgbm93aGVyZSB0b2RheSwgYnV0IEkgdGhpbmsgSSdsbCBsZWF2ZSBzdGRl cnIgYXMgaXQgaXMKLXNvIHVzZXJzIHdpbGwgc2VlIHNvbWUgZmVlZGJhY2s7IG5vIHJlYXNvbiBu b3QgdG8uCi0KLVdIWSBETyBLRVJNSVQgRE9XTkxPQURTIFdPUksgQU5EIFpNT0RFTSBOT1Q/Ci0K LUlzIGl0IDgtYml0IHRyYW5zcGFyZW5jeT8gIFVwIHRpbCBub3cgSSd2ZSBiZWVuIHRlc3Rpbmcg d2l0aCB0ZXh0IGZpbGVzLgotSWYgSSB0cnkgdG8gZG93bmxvYWQgYSBiaW5hcnkgd2hhdCBoYXBw ZW5zPyAgRmFpbHMgYWZ0ZXIgOTkgc2Vjb25kcy4gIFBhY2tldAotbG9nIGZyb20gdGhlIGZhciBl bmQgc2hvd3MgdGhhdCBhcyBzb29uIGFzIHRoZSBmaXJzdCBwYWNrZXQgY29udGFpbmluZyA4LWJp dAotZGF0YSBpcyBzZW50LCBldmVyeXRoaW5nIHN0b3BzLiAgQXQgbGVhc3QgSSBnb3Qgb25lIG9m IHRoZXNlOgotCi0gIDE3OjIzOjU2LjQ3NSBleGVjX2NtZCBhcmdbZ2tlcm1pdF09MAotICAxNzoy Mzo1Ni40NzUgZXhlY19jbWQgYXJnWy1xcl09MQotICAxNzoyMzo1Ni40NzUgZXhlY19jbWQgYXJn W109MgotICAxNzoyMzo1Ni40NzUgZXhlY19jbWQgU1VCU1RJVFVUSU5HIE5VTEw9MiAgPC0tIHRo ZSBjb2RlIEkganVzdCBhZGRlZAotCi1Eb2luZyB0aGlzIGFnYWluIHNob3dzIHRoZSBzYW1lIHRo aW5nIG9uIHRoZSBuZWFyIGVuZC4gIEFsbCB0aGUgNy1iaXQtb25seQotcGFja2V0cyBhcmUgc2Vu dCBhbmQgYWNrbm93bGVkZ2VkIE9LLiAgVGhyZWUgOC1iaXQgZGF0YSBwYWNrZXRzIGFycml2ZSBh bmQKLW5vdGhpbmcgZWxzZSBoYXBwZW5zIGFmdGVyIHRoYXQuICBUaGlzIGlzIHdpdGggRy1LZXJt aXQuCi0KLVRoZSBzYW1lIHRoaW5nIGhhcHBlbnMgd2l0aCBDLUtlcm1pdCByZWNlaXZpbmcuICBC dXQgaWYgSSBjaGFuZ2UgQy1LZXJtaXQncwotLmtlcm1yYyB0byB0dXJuIG9mZiBzdHJlYW1pbmcg YW5kIHVzZSBhIHNob3J0IHBhY2tldCBsZW5ndGg6Ci0KLVRoZSB0cmFuc2ZlciB3b3JrcywgZXZl biB0aG91Z2ggaXQncyBzZW5kaW5nIDgtYml0IGJ5dGVzLiAgU28gdGhlIHByb2JsZW0gaXMKLW5v dCA4LWJpdCBkYXRhIGFmdGVyIGFsbCwgcGVyIHNlLiAgRmFjdHM6Ci0KLSAuIEtlcm1pdCBjYW4g cmVjZWl2ZSBzdHJlYW1pbmcgdHJhbnNmZXJzIG9mIDctYml0IGZpbGVzLgotIC4gS2VybWl0IGNh biBub3QgcmVjZWl2ZSBzdHJlYW1pbmcgdHJhbnNmZXJzIG9mIDgtYml0IGZpbGVzLgotIC4gS2Vy bWl0IGNhbiByZWNlaXZlIG5vbnN0cmVhbWluZyB0cmFuc2ZlcnMgb2YgOC1iaXQgZmlsZXMgd2l0 aCBzaG9ydCBwYWNrZXRzLgotIC4gS2VybWl0IGNhbiByZWNlaXZlIG5vbnN0cmVhbWluZyB0cmFu c2ZlcnMgb2YgOC1iaXQgZmlsZXMgd2l0aCAxSyBwYWNrZXRzLgotIC4gS2VybWl0IGNhbiByZWNl aXZlIG5vbnN0cmVhbWluZyB0cmFuc2ZlcnMgb2YgOC1iaXQgZmlsZXMgd2l0aCA0SyBwYWNrZXRz LgotCi1TbyBpdCdzIHRoZSBjb21iaW5hdGlvbiBvZiBzdHJlYW1pbmcgYW5kIDgtYml0IGRhdGE/ ICAxMiBKYW4gMjAwNy4KLQotQXMgYSB0ZXN0IEkgbWFkZSBhIG5ldyByb3V0aW5lIHB0eV9tYWtl X3JhdygpIHRoYXQgZG9lcyBjZm1ha2VyYXcoKSAoYQotbm9ucG9ydGFibGUgIlBPU0lYLWxpa2Ui IGZ1bmN0aW9uIGtub3duIHRvIGJlIHVzZWQgb24gcHR5cyBpbiBhcHBsaWNhdGlvbnMKLXRoYXQg ZG8gYXBwcm94aW1hdGVseSB3aGF0IHdlJ3JlIGF0dGVtcHRpbmcpLiAgUmVzdWx0czoKLQotIFNv bGFyaXM6IGVycm5vIDI1IC0gaW5hcHByb3ByaWF0ZSBpb2N0bCBmb3IgZGV2aWNlLgotCi1UaGlz IGhhcHBlbnMgZXZlbiB3aGVuIHdlIHRyeSB0byBnZXQgdGhlIHRlcm1pbmFsIG1vZGVzIHdpdGgg dGNnZXRhdHRyKCksCi13aGljaCBpcyBjb21wbGV0ZWx5IG51dHMuICBXZSBwYXNzIGl0IHRoZSBm aWxlIGRlc2NyaXB0b3Igb2YgdGhlIHB0eSBtYXN0ZXIsCi13aGljaCBpcyBzdXBwb3NlZCB0byB3 b3JrLiAgQnV0IGluIE1hYyBPUyBYLCB0aGVyZSBhcmUgbm8gZXJyb3JzLiAgQnV0Ci1kb3dubG9h ZHMgc3RpbGwgZG9uJ3Qgd29yazsgbG90cyBvZiBlcnJvcnMgYnV0IHRoZSBwYXR0ZXJuIGlzIGRp ZmZlcmVudC4KLVVzaW5nIGEgdmVyeSBzbWFsbCBidWZmZXI6Ci0KLSAgUmV0cnkgMDogQmFkIENS QwotICBSZXRyeSAwOiBHYXJiYWdlIGNvdW50IGV4Y2VlZGVkCi0gIFJldHJ5IDA6IEdhcmJhZ2Ug Y291bnQgZXhjZWVkZWQKLSAgUmV0cnkgMDogR290IFRJTUVPVVQKLSAgUmV0cnkgMDogVElNRU9V VAotICBSZXRyeSAwOiBCYWQgQ1JDCi0gIFJldHJ5IDA6IEJhZCBDUkMKLSAgUmV0cnkgMDogR2Fy YmFnZSBjb3VudCBleGNlZWRlZAotICBSZXRyeSAwOiBHYXJiYWdlIGNvdW50IGV4Y2VlZGVkCi0g IFJldHJ5IDA6IFRJTUVPVVQKLSAgUmV0cnkgMDogR290IEVSUk9SCi0gIFJldHJ5IDA6IFRJTUVP VVQKLSAgUmV0cnkgMDogR2FyYmFnZSBjb3VudCBleGNlZWRlZAotICBSZXRyeSAwOiBHYXJiYWdl IGNvdW50IGV4Y2VlZGVkCi0gIFJldHJ5IDA6IEJhZCBDUkMKLQotVXNpbmcgYSBiaWdnZXIgYnVm ZmVyOgotCi0gIFJldHJ5IDA6IEdhcmJhZ2UgY291bnQgZXhjZWVkZWQKLSAgUmV0cnkgMDogR2Fy YmFnZSBjb3VudCBleGNlZWRlZAotICBSZXRyeSAwOiBHYXJiYWdlIGNvdW50IGV4Y2VlZGVkCi0g IFJldHJ5IDA6IEdhcmJhZ2UgY291bnQgZXhjZWVkZWQKLSAgUmV0cnkgMDogR2FyYmFnZSBjb3Vu dCBleGNlZWRlZAotICBSZXRyeSAwOiBHYXJiYWdlIGNvdW50IGV4Y2VlZGVkCi0gIChzZXZlcmFs IHNjcmVlbnNmdWwpCi0KLVZhcmlvdXMgb3RoZXIgY29tYmluYXRpb25zLi4uIE5vdGhpbmcgc2Vl bXMgdG8gd29yay4KLQotSW5zaWdodDogdGVsbmV0ZCBkb2VzIGV4YWN0bHkgd2hhdCB3ZSB3YW50 IHRvIGRvLCBzb3J0IG9mLgotQnV0IGl0IHVzZXMgVElPQ1BLVCwgc28gZXZlcnkgdGltZSBpdCBy ZWFkcyBmcm9tIHB0eSwgaXQgcmVjZWl2ZXMKLW9uZSBjb250cm9sIGJ5dGUgYW5kIHRoZW4gdGhl IGRhdGEgYnl0ZXMsIHdoaWNoIHdvdWxkIGNvbXBsaWNhdGUgb3VyCi1idWZmZXJpbmcgc2NoZW1l IGNvbnNpZGVyYWJseS4gIEFueXdheSB0aGUgVElPQ1BLVCBpb2N0bCgpIGZhaWxzIG9uCi1NYWMg T1MgWCB3aXRoIDE0ICJCYWQgYWRkcmVzcyIuCi0KLUFsc28gc2VlOiBzbm9vcHNlcnZlci5jIChm b3VuZCBpbiBHb29nbGUpLiAgSXQgc2VlbXMgdG8gZG8gdGhpbmdzIGluIGEKLXNsaWdodGx5IGRp ZmZlcmVudCB3YXkgLS0gaXQgc2V0cyBzdGRvdXQgdG8gcmF3IGFuZCB0aGVuIGR1cHMgaXQgdG8g dGhlCi1zbGF2ZSBzaWRlIG9mIHRoZSBwdHk/Ci0KLU1heWJlIGl0J3MgYSBtaXN0YWtlIHRvIHVz ZSB0aGUgY2t1cHR5LmMgcm91dGluZXMuICBUaGV5IGFyZSBkZXNpZ25lZCBmb3IKLWNyZWF0aW5n IGFuZCBhY2Nlc3NpbmcgYW4gaW50ZXJhY3RpdmUgc2Vzc2lvbi4gIE1heWJlIGp1c3QgY29weSBv bmUgb2YgdGhlCi1vdGhlciBwcm9ncmFtcy4KLQotMTggSmFuIDIwMDcuICBUcmllZCBnb2luZyBi YWNrIHRvIGJsb2NraW5nIHJhdGhlciB0aGFuIG5vbmJsb2NraW5nIHJlYWRzCi10byBzZWUgaWYg aXQgd291bGQgbWFrZSBhIGRpZmZlcmVuY2UsIGFmdGVyIGFsbCB0aGUgb3RoZXIgY2hhbmdlcy4g IE5vcGUuCi1PSywgbGV0J3MgbG9vayBhdCBzb21lIG9mIHRoZXNlIG90aGVyIHByb2dyYW1zLi4u Ci0KLXNub29wc2VydmVyLmMuICBJIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IHRoaXMgaXMgb3Ig d2hlcmUgaXQncyBmcm9tIG9yIHdoYXQKLXBsYXRmb3JtIGl0IHJ1bnMgb24gYW5kIHRoZXJlIGFy ZSBubyBjb21tZW50cyB0byBzcGVhayBvZiwgYnV0IGl0IGRvZXMKLWFwcHJveGltYXRlbHkgd2hh dCB0dHB0eWNtZCgpIGRvZXMuICBUbyBnZXQgYSBwdHkgaXQgdXNlcyBvcGVucHR5KCk6Ci0KLSAg aWYgKG9wZW5wdHkoJnB0eSwgJnR0eSwgTlVMTCwgTlVMTCwgTlVMTCkgPT0gLTEpCi0KLXRoZW4g Y3JlYXRlcyBhIGZvcmsuICBJbiB0aGUgZm9yaywgaXQgY2xvc2VzIHRoZSBwdHkgKG1hc3Rlcikg YW5kCi1tYW5pcHVsYXRlcyB0aGUgbW9kZXMgb2YgdGhlIHR0eSAoc2xhdmUpLCBkdXBzIHR0eSB0 byBiZSBzdGRpbywgYW5kIHRoZW4KLWRvZXggZXhlY3YoKSBvbiB0aGUgY29tbWFuZC4gIE1lYW53 aGlsZSB0aGUgdXBwZXIgZm9yayBjbG9zZXMgdGhlIHR0eQotKHNsYXZlKSwgZ2V0cyB0aGUgYXR0 cmlidXRlcyBvZiBzdGRpbiwgdXNpbmcgYXRleGl0KCkgdG8gaGF2ZSB0aGVtCi1hdXRvbWF0aWNh bGx5IHJlc3RvcmVkIG9uIGV4aXQuICBUaGVuIGl0IHNldHMgc3RkaW4gdG8gcmF3IG1vZGUgYW5k IGVudGVycwotdGhlIHNlbGVjdCgpIGxvb3Agb24gc3RkaW4sIHRoZSBwdHkgbWFzdGVyLCBhbmQg dGhlIG5ldC4gIEl0IHVzZXMgcmVndWxhcgotYmxvY2tpbmcgcmVhZHMuICBJdCBkb2VzIG5vdCB1 c2UgVElPQ1BLVCBvciBhbnl0aGluZyBsaWtlIGl0LgotCi1vcGVucHR5KCkgaXMgc3VwcG9ydGVk IG9uOiBMaW51eCwgTWFjIE9TIFgsIE5ldEJTRCwgRnJlZUJTRCwgLi4uCi1vcGVucHR5KCkgaXMg Tk9UIHN1cHBvcnRlZCBvbjogU29sYXJpcywgSFAtVVgsIC4uLgotCi0gMS4gVHJ5IGNvcHlpbmcg dGhlIHB0eSBjb2RlLCBidXQga2VlcCBldmVyeXRoaW5nIGVsc2UgdGhlIHNhbWUuCi0KLUkgZGlk IHRoaXM7IGl0IGNvbXBpbGVzIGFuZCBzdGFydHMgT0ssIHVwcGVyIGZvcmsgKHR0cHR5Y21kKSBk ZWJ1ZyBsb2cgc2hvd3MKLW5vIGVycm9ycywgYnV0IG5vdGhpbmcgaGFwcGVucy4gIExvZ3Mgc2hv dyB0aGF0IHRoZSBLZXJtaXQgcHJvZ3JhbSB0aGF0IGlzCi1zdGFydGVkIGluIHRoZSBzdWJmb3Jr IHNlZW1zIHRvIGRpZSBhcyBzb29uIGFzIGl0IHJlYWNoZXMgZW9mIG9uIGl0cyBpbml0Ci1maWxl LiAgVGhlIGdvb2QgbmV3cywgYXQgbGVhc3QsIGlzIHRoYXQgc2VsZWN0KCkgZG9lc24ndCByZXBv cnQgcmVwb3J0IHRoYXQKLXRoZSBwdHkgaXMgcmVhZHkgdG8gYmUgcmVhZC4gIENsZWFybHkgdGhl IGZpbGUgZGVzY3JpcHRvcnMgYXJlbid0IGJlaW5nCi1hc3NpZ25lZCBhcyBleHBlY3RlZCwgb3Ig YXMgYmVmb3JlLgotICAKLUluIGNrdXB0eS5jIGdldHB0eXNsYXZlKCkgZHVwMidzIHRoZSBzbGF2 ZSBmZCB0byAwIGFuZCAxLiAgVGhlIG5ldyBjb2RlCi1kb2VzIGV4YWN0bHkgdGhlIHNhbWUgdGhp bmcuICBEZWJ1ZyBsb2cgbWFrZXMgaXQgbG9vayBsaWtlIHRoZSBmb3JrZWQga2VybWl0Ci1pcyBu b3QgcmVjZWl2aW5nIGl0cyBjb21tYW5kIGxpbmUuICBCdXQgbm93IEknbSBub3QgZXZlbiBzdXJl IHRoYXQgdGhlCi1mb3JrZWQga2VybWl0IHN0YXJ0ZWQgYXQgYWxsLiAgcHMgZnJvbSBhbm90aGVy IHRlcm1pbmFsIGRvZXNuJ3Qgc2hvdyBpdC4KLQotMTkgSmFuIDIwMDc6IE5vdGljZWQgdGhhdCBp biBzbm9vcHNlcnZlciwgdGhlIHNlbGVjdCgpIGNhbGxzIHVzZSBzdGFuZGFyZAotaW5wdXQgYW5k IG91dHB1dCBmaWxlIGRlc2NyaXB0b3JzLCByYXRoZXIgdGhhbiB0aGUgcHR5IG1hc3Rlci4gIE1h ZGUgdGhhdAotY2hhbmdlLi4uICBJbiBkb2luZyB0aGF0IEkgaGFkIHRvIGxvb2sgYXQgZXZlcnkg ZmlsZSBkZXNjcmlwdG9yIGluIGV2ZXJ5Ci1saW5lIG9mIGNvZGUgYW5kIGRpc2NvdmVyZWQgYSBj b3VwbGUgbWlzdGFrZXMsIGZpeGVkIHRoZW0sIHB1dCBiYWNrIHRoZQotb3JpZ2luYWwgY29kZSBi dXQgd2l0aCB0aGUgZml4ZXMsIHRyaWVkIGl0LCBidXQgbm8gY2hhbmdlOyBjYW4gdXBsb2FkIE9L IGJ1dAotc3RpbGwgY2FuJ3QgZG93bmxvYWQgd2l0aCBabW9kZW0gd2l0aG91dCBsb3RzIG9mIGVy cm9ycyBhbmQgdWx0aW1hdGUKLWZhaWx1cmUuICBHb2luZyBiYWNrIHRvIHRoZSBhbHRlcm5hdGl2 ZSB2ZXJzaW9uIGFuZCB0cnlpbmcgdG8gZ2V0IHRoZSB0aGUKLWZpbGUgZGVzY3JpcHRvcnMgc29y dGVkIG91dCwgbm93IGl0IGFwcGVhcnMgdGhhdCB0aGUgZXh0ZXJuYWwgS2VybWl0IHByb2dyYW0K LW5ldmVyIGV2ZW4gc3RhcnRzIGluIHRoZSBsb3dlciBmb3JrLiAgQWZ0ZXIgYSBiaXQgbW9yZSBm aWRkbGluZyBJIHNvcnQgdGhhdAotb3V0LCBidXQgbm93IHdoZW4gdGhlIGxvd2VyIEtlcm1pdCBw cm9ncmFtIGdvZXMgdG8gb3BlbiAiL2Rldi90dHkiIGl0IGdldHMKLWVycm5vIDYgIkRldmljZSBu b3QgY29uZmlndXJlZCIuICBGb3JjaW5nIGl0IHRvIHVzZSBzdGRpbyB3aXRoICItbCAwIiwgaXQK LWdldHMgcGFzdCB0aGlzIGFuZCBhY3R1YWxseSBzZW5kcyBpdHMgZmlyc3QgcGFja2V0LiAgQnV0 IHRoZSBLZXJtaXQgb24gdG9wCi1yZWFkcyBub3RoaW5nIGZyb20gdGhlIHB0eS4KLQotTmV4dCwg SSBjaGFuZ2UgdGhlIHB0eSBmZCBmcm9tIFNURElOX0ZJTEVOTyBhbmQgU1RET1VUX0ZJTEVOTyB0 byBzbGF2ZWZkLgotTm8gZGlmZmVyZW5jZS4gIE5leHQgSSBjb21tZW50IG91dCB0aGUgZHVwMigp IGNhbGxzLiAgVGhpcyB0aW1lIEkgZ2V0IHNvbWUKLWFjdGlvbi4gIFRoZSB0cmFuc2ZlciBzdGFy dHMsIGJ1dCBvbmx5IG9uZSBwYWNrZXQgY29tZXMuICBMb2cgc2hvd3MgdGhhdAotdGhlIGxvd2Vy IEtlcm1pdCBzZW5kcyBpdHMgUyBwYWNrZXQuICBUaGUgdXBwZXIgS2VybWl0IHJlY2VpdmVzIHRo ZSBBQ0sKLWJ1dCB0aGUgbG93ZXIgS2VybWl0IG5ldmVyIGdldHMgaXQuICBUaGUgd3JpdGUgdG8g dGhlIHB0eSBzdWNjZWVkcywgbm8KLWVycm9yLiAgRGlmZmVyZW50IGNvbWJpbmF0aW9ucyBnaXZl IGRpZmZlcmVudCByZXN1bHRzLiAgSWYgd3JpdGUgdG8gbWFzdGVyCi1hbmQgcmVhZCBmcm9tIHRo ZSBzbGF2ZSwgSSBnZXQgcGFja2V0cyBpbiBib3RoIGRpcmVjdGlvbnMgYnV0IHRvbnMgb2YKLWVy cm9ycy4uLi4gIFRoaXMgaGFwcGVucyBvbmx5IGlmIEkgY29tbWVudCBvdXQgdGhlIGR1cDIoKSdz LgotCi0yNSBKYW4gMjAwNzogQWZ0ZXIgbGVhdmluZyBpdCBzaXQgZm9yIGEgd2hpbGUsIGFuZCBy ZWFsaXppbmcgdGhhdCB3aGF0IEknbQotdHJ5aW5nIHRvIGRvIGhhcyB0byBiZSBwb3NzaWJsZSBi ZWNhdXNlIHNvIG11Y2ggb3RoZXIgc29mdHdhcmUgZG9lcyB0aGUgc2FtZQotdGhpbmcgKGUuZy4g VGVsbmV0IHNlcnZlcnMpLCBJIHB1dCB0aGluZ3MgYmFjayB0byBob3cgdGhleSB3ZXJlIG9yaWdp bmFsbHkKLS0tIHRoZSB1cHBlciBmb3JrIChLZXJtaXQpIHVzZXMgdGhlIG1hc3RlciBhbmQgdGhl IGxvd2VyIGZvcmsgdGhlIHNsYXZlLgotVGhlIHVwcGVyIGZvcmsgcHV0cyB0aGUgbWFzdGVyIGlu IHJhdyBtb2RlLCB0aGUgbG93ZXIgZm9yayBwdXRzIHRoZSBzbGF2ZSBpbgotcmF3IG1vZGUuICBU aGUgbG93ZXIgZm9yayBkdXAyJ3MgdGhlIHNsYXZlIGZkIHRvIHN0ZGluL291dC4gIFNlbmQgZmls ZSBpbgotcmVtb3RlIG1vZGUgdXNpbmcgZXh0ZXJuYWwgS2VybWl0OiB3b3JrcyBPSyBidXQgc2Vs ZWN0KCkgdGltZXMgb3V0IGF0IHRoZQotZW5kLiAgVGhpcyBtZWFucyB0aGF0IHRoZSBzZWxmLWNv bnRhaW5lZCBwdHkgY29kZSBpbiB0dHB0eWNtZCgpIGlzIHNvcnRlZAotb3V0IC0tIGFsbCB0aGUg ZmlsZSBkZXNjcmlwdG9ycyBnbyB0byB0aGUgcmlnaHQgcGxhY2UsIGV0YywgYW5kIG5vdyB3ZSBj YW4KLXVzZSB0aGlzIHJvdXRpbmUgYXMgYSB0ZXN0YmVkLCByYXRoZXIgdGhhbiB0aGUgb3JpZ2lu YWwgY2t1cHR5LmMtYmFzZWQgb25lLgotCi1CdXQgc2VuZCB3aXRoIGxzeiwgY3N6LCBhbmQgcmVn dWxhciByejogTm90aGluZyBoYXBwZW5zLCB0aW1lcyBvdXQgYWZ0ZXIgMAotYnl0ZXMgb2YgaS9v LiAgT25jZSBhZ2FpbiwgS2VybWl0IHdvcmtzLCBabW9kZW0gZG9lc24ndC4gIFRoZSByZWFzb24g Zm9yCi1ydW5uaW5nIFptb2RlbSBpbiBhIHB0eSBpcyBzbyBpdHMgaS9vIHdpbGwgd29yayBhcyBp dCBkb2VzIG9uIGEgdGVybWluYWwsCi1ubyBtYXR0ZXIgaG93IGl0IG1heSBmaWRkbGUgdGhlIGZp bGUgZGVzY3JpcHRvcnMuICBTbyB3aHkgZG9uJ3Qgd2Ugc2VlIGEKLXNpbmdsZSBieXRlIGNvbWUg b3V0PwotCi1Db21tZW50aW5nIG91dCBwdHlfbWFrZV9yYXcoKSwgSSBnZXQgYSBzdWNjZXNzZnVs IFptb2RlbSBzZW5kIHVzaW5nIGxzei4KLWNzeiBtYW5hZ2VzIHRvIGdldCB0aGUgZmlsZW5hbWUg YWNyb3NzLCBidXQgdGhlbiBnZXRzIHN0dWNrLiAgcmVndWxhciBzeiwgb24KLXRoZSBvdGhlciBo YW5kLCB3b3JrcyBwZXJmZWN0bHkuICBUZXN0aW5nIGNzeiBieSBpdHNlbGYgKG5vdCB1bmRlciBL ZXJtaXQpLAotSSBzZWUgaXQgZmFpbHMgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgKCJHb3QgcGhv bnkgWkVPRiIsIGV0YykuICBPSywgZm9yZ2V0Ci1jcnpzei4KLQotT0ssIGxldCdzIG1vdmUgdG8g bG9jYWwgbW9kZSBvdmVyIGEgS2VyYmVyaXplZCBUZWxuZXQgY29ubmVjdGlvbi4uLgotVXBsb2Fk aW5nIChzZW5kaW5nKSB3aXRoIGV4dGVybmFsIEtlcm1pdCBwcm90b2NvbC4uLiB3b3Jrcy4KLURv d25sb2FkaW5nIChyZWNlaXZpbmcpIHdpdGggZXh0ZXJuYWwgS2VybWl0IHByb3RvY29sLi4uIHdv cmtzLgotVXBsb2FkaW5nIHdpdGggc3ouLi4gd29ya3MuCi1Eb3dubG9hZGluZyB3aXRoIGxyei4u LiAgR2V0cyB0b25zIG9mIGVycm9ycyBhbmQgZmFpbHMuCi0KLVJ1bm5pbmcgcHR5X21ha2VfcmF3 KCkgb24gdGhlIHNsYXZlIGJ1dCBub3Qgb24gdGhlIG1hc3Rlcjogbm8gZGlmZmVyZW5jZS4KLVJ1 bm5pbmcgcHR5X21ha2VfcmF3KCkgb24gdGhlIG1hc3RlciBidXQgbm90IG9uIHRoZSBzbGF2ZTog bm8gZGlmZmVyZW5jZS4KLQotQmFjayB3aGVyZSB3ZSBzdGFydGVkLi4uICBFaXRoZXI6Ci0KLSAu IFptb2RlbSBpcyBvdmVyZHJpdmluZyB0aGUgcHR5LCBubyBtYXR0ZXIgd2hhdCBtb2RlcyB3ZSBw dXQgaXQgaW4uICAKLSAuIEl0J3MgYSB0cmFuc3BhcmVuY3kgcHJvYmxlbS4KLQotVGhlb3JldGlj YWxseSB3ZSBzaG91bGQgYmUgYWJsZSB0byB0ZXN0IHRoZXNlIGJ5IHVzaW5nIGRpZmZlcmVudCBz eiBzd2l0Y2hlczoKLSAgLXE6ICAgIHF1aWV0IChzaG91bGQgYWx3YXlzIHVzZSB0aGlzKQotICAt ZTogICAgZXNjYXBlIGFsbCBjb250cm9sIGNoYXJhY3RlcnMKLSAgLUIgbjogIEJ1ZmZlciBuIGJ5 dGVzIChyYXRoZXIgdGhhbiB3aG9sZSBmaWxlKQotICAtTCBuOiAgUGFja2V0IGxlbmd0aAotICAt bCBuOiAgRnJhbWUgbGVuZ3RoICg+PSBwYWNrZXQgbGVuZ3RoKQotICAtdyBuOiAgV2luZG93IHNp emUKLSAgLTQ6ICAgIDRLIGJsb2Nrc2l6ZSAoZG9lc24ndCBoZWxwKQotCi0tcSBieSBpdHNlbGYg ZG9lc24ndCBoZWxwLgotLXEgLWUsIHRoaXMgb25lIHdvcmtlZCBidXQgc3RpbGwgZ290IGFib3V0 IDEwMCBlcnJvcnMgYW5kIHdhcyB2ZXJ5IHNsb3cuCi0tcSAtZSAtbCAyMDAgLUwgMTAwLCBmYWls ZWQgZmFzdCBhbmQgYmFkLgotLXEgLWUgLXcgMS4gIEZhaWxlZCBxdWlja2x5LgotLXEgLWUgLXcg MSAtQiAxMDAuICBFdmVudHVhbGx5IGZhaWxlZC4KLS1xIC13IDEsIEV2ZW50dWFsbHkgZmFpbGVk LgotLXEgLWwgMTAyNCwgdGhpcyBnZXRzIG11Y2ggbW9yZSBlcnJvcnMsIGRlZmluaXRlbHkgbmVl ZCAtZS4KLS1xIC1lIC1sIDEwMjQsIGdvdCBwcmV0dHkgZmFyIGJlZm9yZSBmYWlsaW5nLgotLXEg LWUgLXcgMSAtbCAxMDI0LCBhbHNvIGdvdCBwcmV0dHkgZmFyIGJlZm9yZSBmYWlsaW5nLgotLXEg LWUsIHRoaXMgb25lIGdvdCBmYXJ0aGVzdCBvZiBhbGwsIGFib3V0IDQ4SywgYmVmb3JlIGdldHRp bmcgZXJyb3JzLgotCi1JbiB0aGUgbGF0dGVyIGNvbWJpbmF0aW9ucyB0aGF0IHdvcmsgc29tZXdo YXQgYmV0dGVyLCB3ZSBhbHdheXMgZ2V0IHVwIHRvCi0xNkssIG9yIDMySywgb3IgNDhLLCBiZWZv cmUgdGhlIGVycm9ycyBzdGFydCBjb21pbmcgb3V0IGFuZCBwaWxpbmcgdXAuCi1Tb21ldGltZXMg dGhlIGVycm9ycyBhcmUgcmVjb3ZlcmFibGUgYW5kIHdlIHJlY2VpdmUgYXMgbXVjaCBhcyAzMDBL Ci1zdWNjZXNzZnVsbHkgYmVmb3JlIGdpdmluZyB1cC4KLQotTm93IHRoYXQgd2UgaGF2ZSBkYXRh IGZsb3dpbmcgcHJldHR5IHdlbGwgKGJ1dCBub3Qgd2VsbCBlbm91Z2gpLCB0cmllZAotcmVpbnN0 YXRpbmcgcHR5X21ha2VfcmF3KCksIGJ1dCBpdCBodXJ0IG1vcmUgdGhhbiBoZWxwZWQuCi0KLUFz IGEgc2FuaXR5IGNoZWNrLCBJIHRyaWVkIHRyYW5zZmVycmluZyBmcm9tIHRoZSBzYW1lIGhvc3Qg b3ZlciB0aGUgc2FtZQota2luZCBvZiBjb25uZWN0aW9uIChLZXJiZXJpemVkIFRlbG5ldCkgZGly ZWN0bHkgdG8gSzk1J3MgYnVpbHQtaW4gWm1vZGVtCi1wcm90b2NvbCwgYW5kIHRoYXQgd29ya2Vk IGZpbmUuICBTbyB0aGUgcHJvYmxlbSBpcyBkZWZpbml0ZWx5IGluIHRoZSBwdHkuCi1PciBtb3Jl IHByZWNpc2VseSwgd2hlcmUgS2VybWl0IHdyaXRlcyBpbmNvbWluZyBuZXQgZGF0YSB0byB0aGUg cHR5IG1hc3Rlci4KLQotMjYgSmFuIDIwMDc6IFRyaWVkIGNoYW5naW5nIHRoZSBzaXplIG9mIHRo ZSBuZXQtdG8tcHR5IGJ1ZmZlciBmcm9tIDI0SyB0bwotMUsuICBSZXN1bHQ6IHRvdGFsIGZhaWx1 cmUuICBTZXQgYm90aCBidWZmZXJzIHRvIDFLLiAgU3RpbGwgdG90YWwgZmFpbHVyZS4KLVNldCBi b3RoIHRvIDRLOiBub3cgd2UgZ2V0IGFib3V0IDQ1SyBvZiBkYXRhLCB0aGVuIGZhaWx1cmUuICBQ dXQgdGhlbSBib3RoCi1iYWNrIHRvIDI0Sywgc3RpbGwgZmFpbHMgdG90YWxseSAtLSB0aGUgc2Ft ZSBjb2RlIHRoYXQgd29ya2VkIHByZXR0eSB3ZWxsCi15ZXN0ZXJkYXkuICBBY3R1YWxseSwgbm8g ZG93bmxvYWRzIHdvcmssIG5vdCBldmVuIEtlcm1pdCwgbm90IGV2ZW4gb2YKLXRleHQgZmlsZXMu Ci0KLTI3IEphbiAyMDA3OiBTaW5jZSBJIGhhdmUgbm90IGJlZW4gYWJsZSB0byBmaW5kIGEgd2F5 IHRvIG1ha2UgcHR5cyB3b3JrIGZvcgotdGhpcywgSSBtYWRlIGEgdGhpcmQgY29weSBvZiB0aGlz IHJvdXRpbmUsIHRoaXMgdGltZSB1c2luZyBwaXBlcyBpbnN0ZWFkIG9mCi1wdHlzLiAgVGhlIGRp c2FkdmFudGFnZSBoZXJlIGlzIHRoYXQgaWYgdGhlIGV4dGVybmFsIHByb3RvY29sIGRvZXMgbm90 IHVzZQotc3RkaW8sIHRoZSBwaXBlcyB3b24ndCB3b3JrLCBidXQgb25lIHRoaW5nIGEgdGltZS4u LgotCi1JbmZlcmlvciBLZXJtaXQgc3RhcnRzIGluIGxvd2VyIGZvcmssIGJ1dCB3aGVuIGl0IHRy aWVzIHRvIHNlbmQgaXRzIGZpcnN0Ci1wYWNrZXQgaXQgZ2V0cyBlcnJubz05IEVCQURGLCBCYWQg RmlsZSBEZXNjcmlwdG9yLiAgU3Vic3RpdHV0aW5nIEctS2VybWl0IGFzCi10aGUgZXh0ZXJuYWwg cHJvdG9jb2wsIHdoaWNoIGlzIHNpbXBsZXIsIHJldmVhbHMgdGhhdCB0aGUgcHJvYmxlbSBpcyB0 aGF0Ci10aGUgZXh0ZXJuYWwgcHJvdG9jb2wgZ2V0cyBlcnJvcnMgd2hlbiBpdCB0cmllcyB0byBt YW5pcHVsYXRlIHRoZSBpdHMgc3RkaW8KLWZpbGUgZGVzY3JpcHRvcnMgd2l0aCBpb2N0bHMsIGV0 YzsgdGhlc2UgYXJlIG5vdCB2YWxpZCBmb3IgYSBwaXBlLiAgVGhlIHBpcGUKLW1lY2hhbmlzbSBp dHNlbGYgd29ya3MuICBJZiBJIHRha2Ugb3V0IHRoZSB0ZXN0IGZvciB0dHBrdCgpIGZhaWxpbmcg aW4KLWdrZXJtaXQsIHRoZSBmaWxlIHRyYW5zZmVyIHdvcmtzIE9LLiAgVHJ5aW5nIFptb2RlbS4u LiBTZW5kaW5nIHdvcmtzIE9LOwotcmVjZWl2aW5nIHdvcmtzIGEgbG90IGJldHRlciB0aGFuIHdp dGggcHR5cyAoaXQgZ290IDM2MEsgaW50byB0aGUgZmlsZQotYmVmb3JlIGZhaWxpbmcpLiAgTWFr aW5nIHRoZSBidWZmZXJzIHNtYWxsZXIsIGRvZXNuJ3QgaGVscC4KLQotSSdtIHN0YXJ0aW5nIHRv IHdvbmRlciBpZiB0aGUgcHJvYmxlbSBtaWdodCBiZSBpbiBteSBidWZmZXJpbmcgY29kZSwgcmF0 aGVyCi10aGFuIGluIHRoZSBwdHkgb3IgcGlwZSBpbnRlcmZhY2UuLi4gIFRyeSBtYWtpbmcgYSB2 ZXJzaW9uIHRoYXQgZG9lcwotc2luZ2xlLWNoYXJhY3RlciByZWFkcyBhbmQgd3JpdGVzLgotCi1U aGlzIG9uZSByZWFkcyB0aGUgZmlyc3QgcGFja2V0IGZyb20gdGhlIGxvd2VyIEtlcm1pdCBhbmQg c2VuZHMgaXQuICBJdCBpcwotcmVjb2duaXplZCBieSB0aGUgb3RoZXIgS2VybWl0LCB3aGljaCBz ZW5kcyBhbiBBQ0suICBXZSBzZWUgdGhlIF5BIG9mIHRoZQotQUNLLCBidXQgdGhlbiBzZWxlY3Qo KSB0aW1lcyBvdXQgb24gdGhlIG5leHQgY2hhcmFjdGVyIC0tIE9GIENPVVJTRTogYmVjYXVzZQot YXQgYSBsb3dlciBsZXZlbCwgaXQgaGFzIGFscmVhZHkgYmVlbiByZWFkLiAgV2UgaGF2ZSB0byBj aGVjayB0aGUgbXlyZWFkCi1idWZmZXIsIGFuZCB0aGVuIGNhbGwgc2VsZWN0KCkgb25seSBpZiBp dCdzIGVtcHR5LiAgTWFraW5nIHRoaXMgY2hhbmdlOgotCi0gLiBTRU5EIHdpdGggRy1LZXJtaXQg d29ya3MgKGJ1dCB2ZXJ5IHNsb3dseSkuCi0gLiBTRU5EIHdpdGggbHN6IHdvcmtzIGJ1dCBnZXRz IGEgbG90IG9mIGVycm9ycywgZXZlbnR1YWxseSBzdWNjZWVkcy4KLQotTGV0J3Mgd29yayBvdXIg d2F5IGJhY2suLi4gIFdpdGggdGhlIHNhbWUgY2hhbmdlcyB0byB0aGUgYnVmZmVyZWQgcGlwZSB2 ZXJzaW9uOgotCi0gLiBTRU5EIHdpdGggRy1LZXJtaXQvc3RyZWFtaW5nIHdvcmtzIChmYXN0KS4K LSAuIFNFTkQgd2l0aCBsc3ogd29ya3MgdG9vIChmYXN0KSwgYnV0IHdlIGdldCBndWJiaXNoIGF0 IHRoZSBlbmQuCi0gLiBSRUNFSVZFIHdpdGggS2VybWl0IGZhaWxzIGJlY2F1c2UgIi9kZXYvdHR5 IGlzIG5vdCBhIHRlcm1pbmFsIGRldmljZSIuCi0gLiBSRUNFSVZFIHdpdGggcnN6Li4uIGxvdHMg b2YgZXJyb3JzICgiZ2FyYmFnZSBjb3VudCBleGNlZWRlZCIpIGJ1dCBzdWNjZWVkZWQuCi0KLUJ1 dCBtYXliZSBub3cgd2UncmUgc2VlaW5nIHBpcGUgYXJ0aWZhY3RzLCBzbyBnb2luZyBiYWNrIG9u ZSBtb3JlIHN0ZXAgdG8KLXRoZSB2ZXJzaW9uIHRoYXQgZ2V0cyBpdHMgb3duIHB0eSBhbmQgc3Rh cnRzIGl0cyBvd24gZm9yazoKLQotIC4gU0VORCB3aXRoIEctS2VybWl0L1N0cmVhbWluZyB3b3Jr cyAoZmFzdCkgYnV0IHNlbGVjdCgpIHRpbWVzIG91dCBhdCB0aGUgZW5kLgotCi1Bbm90aGVyIGJy ZWFrdGhyb3VnaDogTW92ZWQgdGhlIHdyaXRlIHBpZWNlcyB0byBiZWxvdyB0aGUgcmVhZCBwaWVj ZXMuICBUaGlzCi1pcyB3aGF0IHdhcyBwcmV2ZW50aW5nIHRoZSBidWZmZXIgcmVzZXQgY29kZSBm cm9tIHdvcmtpbmcgLS0gd2l0aCB0aGUgd3JpdGVzCi1kb25lIGJlZm9yZSB0aGUgcmVhZHMsIHdl IG5ldmVyIGNhdGNoIHVwIGFuZCBjYW4gbmV2ZXIgcmVzZXQgdGhlIGJ1ZmZlcnMuCi0KLSAuIFNF TkQgd2l0aCBHLUtlcm1pdC9zdHJlYW1pbmcgd29ya3MgKGZhc3QpIChidXQgdGhlcmUncyBhIHBh dXNlIGF0IHRoZSBlbmQpCi0gLiBTRU5EIHdpdGggbHN6IHdvcmtzIChmYXN0KSAoYnV0IHRoZXJl J3MgYSBwYXVzZSBhdCB0aGUgZW5kKQotIC4gUkVDRUlWRSB3aXRoIHJzei4uLiBsb3RzIG9mIGVy cm9ycyAoImdhcmJhZ2UgY291bnQgZXhjZWVkZWQiKSBhbmQgZmFpbHMuCi0gLiBSRUNFSVZFIHdp dGggS2VybWl0IC0tIG5vdGhpbmcgaGFwcGVucyAoaXQgdGhpbmtzIGl0IHN1Y2NlZWRlZCksIHRo ZW4gd2UKLSAgICAgcmVjb25uZWN0LCB0ZXJtaW5hbCBzZWVzIFMgcGFja2V0IGFuZCBnb2VzIGlu dG8gYXV0b2Rvd25sb2FkCi0KLUZyb20gdGhlIGxvZyBpdCBsb29rcyBsaWtlIHR0cGt0KCkgZmFp bHMgaW4gdGhlIGxvd2VyIEtlcm1pdC4gIFN3aXRjaGluZwotdGhpcyB3aXRoIHRoZSBoYWNrZWQg Ry1LZXJtaXQuLi4gIGl0IGdldHMgInRyYW5zbWlzc2lvbiBlcnJvciBvbiByZWxpYWJsZQotbGlu ayIuICBUcmllZCBhZ2FpbiB3aXRoIHJlYWwgS2VybWl0IGJlbG93LCB0aGlzIHRpbWUgd2l0aCAi LWwgMCIgYW5kIG5vdAotc3RyZWFtaW5nLiAgVGhpcyB3YXMgYWN0dWFsbHkgd29ya2luZywgYnV0 IHNsb3dseSwgSSBkb24ndCBzZWUgYW55IE5BS3MgaW4KLXRoZSBwYWNrZXQgbG9nLCBidXQgdGhl biBzZWxlY3QoKSB0aW1lZCBvdXQuCi0KLTI4IEphbiAyMDA3OiBSZXN0b3JlZCBib3RoIHRoZSBj YWxscyB0byBwdHlfbWFrZV9yYXcoKToKLQotIC4gU0VORCB3aXRoIEMtS2VybWl0IHN0cmVhbWlu ZyB3b3JrcywgYnV0IHNsb3cgKDU0S2NwcykKLSAuIERpdHRvLCBidXQgd2l0aCBkZWJ1Z2dpbmcg b2ZmIC0tIGhhbmdzIGZvcmV2ZXIuCi0gLiBEaXR0bywgYnV0IHVzaW5nIEctS2VybWl0IGluc3Rl YWQgb2YgQy1LZXJtaXQgLS0gYWxzbyBoYW5ncyBmb3JldmVyLgotCi1CYWNrZWQgb2ZmIG9uIGNh bGxpbmcgcHR5X21ha2VfcmF3KCkuICBTYW1lIHRoaW5nLgotUmVkdWNlZCBzaXplIG9mIG5ldC10 by1wdHkgYnVmZmVyLiAgU2FtZSB0aGluZy4KLQotMTUgRmViIDIwMDcuLi4gIERlY2lkZWQgdG8g Z2l2ZSB1cCBvbiB0aGlzIGFuZCBwdWJsaXNoIGl0IGFzIGlzLCBpbiBob3BlcwotdGhhdCBzb21l Ym9keSB3aXRoIG1vcmUgZXhwZXJpZW5jZSB3aXRoIHB0eXMgY2FuIG1ha2UgaXQgd29yaywgYmVj YXVzZSBJJ20KLWp1c3QgZ29pbmcgaW4gY2lyY2xlcy4gIFNvIHRvZGF5IEkganVzdCBoYXZlIHRv IGdldCB0aGUgY29kZSBpbnRvIHNoYXBlIHNvCi1wZW9wbGUgY291bGQgY2hvb3NlIGFtb25nIHRo ZSB0aHJlZSBhbHRlcm5hdGl2ZSByb3V0aW5lcy4gIFRoZSBzZWNvbmQgb25lLAoteXR0eXB0eWNt ZCgpLCBpcyB0aGUgb25lIHRoYXQgdXNlcyBvcGVucHR5KCksIHdoaWNoIGlzIG5vdCBwb3J0YWJs ZSwgc28gaXQKLWNhbiBiZSBlbmFibGVkIG9ubHkgZm9yIE1hYyBPUyBYLCBOZXRCU0QsIEZyZWVC U0QsIGFuZCBMaW51eCwgb3IgYnkgYWxzbwotZGVmaW5pbmcgSEFWRV9PUEVOUFRZIGF0IGNvbXBp bGUgdGltZS4gIEFueXdheSwgaWYgeW91IGJ1aWxkIEtlcm1pdCBpbiB0aGUKLW5vcm1hbCB3YXks IHlvdSBnZXQgdGhlIHJlZ3VsYXIgYmVoYXZpb3IgLS0gdHRydW5jbWQoKSBpcyB1c2VkIHRvIGV4 ZWN1dGUKLWV4dGVybmFsIHByb3RvY29scy4gIElmIHlvdSBidWlsZCBpdCB3aXRoIC1EWFRUUFRZ Q01ELCB5b3UgZ2V0IHRoZSBmaXJzdAotdmVyc2lvbiBvZiB0dHB0eWNtZCgpOyB3aXRoIC1EWVRU UFRZQ01EIHRoZSBzZWNvbmQsIGFuZCB3aXRoIC1EWlRUUFRZQ01EIHRoZQotdGhpcmQuCi0KLShU aGVuIHNvbWUgaW50ZXJydXB0aW9ucywgdGhlbi4uLikKLQotRnJvbSBKZWZmLCBmaXggaG9zdG5h bWUgY29tcGFyaXNvbiBpbiBYLjUwOSBjZXJ0aWZpY2F0ZSBjaGVja2luZyB0byB3b3JrCi1yaWdo dCBpbiB0aGUgY2FzZSBvZiBuYW1lcyB0aGF0IGNvbnRhaW4gbm8gcGVyaW9kcy4gIGROU05hbWVf Y21wKCk6IGNsX3NzbC5jLAotMjEgRmViIDIwMDcuCi0KLUpvaG4gRHVubGFwIG5vdGljZWQgc29t ZSBzdHJhbmdlIGJlaGF2aW9yIHdoZW4gdHJhbnNmZXJyaW5nIGZpbGVzIGJldHdlZW4KLWhvbWUg YmFzZSBhbmQgdGhlIEVNLUFQRVggb2NlYW5vZ3JhcGhpYyBmbG9hdHMgdmlhIHNhdGVsbGl0ZS4u LiBsb25nIHN0b3J5LAotYnV0IGV2ZXJ5IHNvIG9mdGVuIHRoZSB0cmFuc2ZlciB3b3VsZCBnZXQg c3R1Y2sgZm9yIGEgbG9uZyB0aW1lLCBhbmQgaXQKLWhhcHBlbmVkIG9ubHkgd2hlbiBDLUtlcm1p dCB3YXMgc2VuZGluZyBhIGZpbGUgYW5kIHJlY2VpdmVkIHR3byBvciBtb3JlCi1wYWNrZXRzIChB Y2sgb3IgTmFrKSBiYWNrIHRvIGJhY2sgZnJvbSB0aGUgZmxvYXQuICBZZWFycyBhZ28gSSBhZGRl ZCBzb21lCi1sb29rYWhlYWQgY29kZSB0byB0dGlubCgpIHRvIGNsZWFyIHRoZSBpbnB1dCBidWZm ZXIgb2YgYW55IGludGVycGFja2V0IGp1bmsKLXNvIHRoYXQsIGluIHRoZSB3aW5kb3dpbmcgY2Fz ZSwgd2Ugd291bGRuJ3QgYmUgdHJpY2tlZCBuZXh0IHRpbWUgYXJvdW5kIGludG8KLXRoaW5raW5n IGEgcGFja2V0IHdhcyB3YWl0aW5nIHRvIGJlIHJlYWQgd2hlbiB0aGVyZSB3YXNuJ3QuICBUaGUg Y29kZSwgd2hpY2gKLWhhcyBiZWVuIHRoZXJlIGZvciBhIHdoaWxlLCB3YXMgYSBiaXQgZnJhY3R1 cmVkOyBsdWNraWx5LCBpdCB3b3VsZCBiZQotZXhlY3V0ZWQgb25seSB3aGVuIHRoZSBkZWJ1ZyBs b2cgd2FzIGFjdGl2ZSBzbyBpdCBkaWRuJ3QgaGF2ZSBtdWNoIGVmZmVjdC4KLVRoZSBwcm9ibGVt IHdhcyB0aGF0IGlmIHRoZSBTT1AgY2FtZSBpbW1lZGlhdGVseSBhZnRlciB0aGUgRU9QLCBpdCBj b3VsZCBiZQotbWlzc2VkIGJlY2F1c2UgdGhlIGxvb3AgcmVhZCB0aGUgbmV4dCBjaGFyYWN0ZXIg YmVmb3JlIGNoZWNraW5nIHRoZSBjdXJyZW50Ci1vbmUuICBGaXhlZCBieSByZWFycmFuZ2luZyB0 aGUgbG9vcC4gIEFsc28gSSBjaGFuZ2VkIGl0IHNvIGl0IHdvdWxkIGV4ZWN1dGUKLWluIGFsbCBj YXNlcywgbm90IG9ubHkgd2hlbiB0aGUgZGVidWcgbG9nIHdhcyBhY3RpdmUuICBBbHNvLCBjbGVh bmVkIHVwIGEKLWJ1bmNoIG9mIGNvbmZ1c2luZyAjaWZkZWZzIGFuZCByZW1vdmVkIHNvbWUgY2h1 bmtzIHRoYXQgaGFkIGJlZW4gY29tbWVudGVkCi1vdXQgZm9yIHllYXJzLCBkZWNhZGVzIG1heWJl LiAgdHRpbmwoKTogY2t1dGlvLmMsIDIxLTIyIEZlYiAyMDA3LgotCi1BZGRlZCBOT1cga2V5d29y ZCBpbmZvIHRvIEhFTFAgREFURSwgcGx1cyBhIHRpcCBhYm91dCBob3cgdG8gY29udmVydCB0byBV VEM7Ci1zdWdnZXN0ZWQgYnkgQXJ0aHVyIE1hcnNoLiAgY2t1dXMyLmMsIDIyIEZlYiAyMDA3Lgot Ci1XaGVuIGFuIEZUUCBjbGllbnQgc2VuZHMgTkxTVCB0byB0aGUgc2VydmVyIGFuZCBubyBtYXRj aGluZyBmaWxlcyBhcmUgZm91bmQsCi10aGUgc2VydmVyIGlzIHN1cHBvc2VkIHRvIHJlc3BvbmQg d2l0aCBhbiBlcnJvciBtZXNzYWdlIG9uIHRoZSBjb250cm9sCi1jaGFubmVsIGFuZCBub3RoaW5n IG9uIHRoZSBkYXRhIGNoYW5uZWwuICBIb3dldmVyIGl0IHNlZW1zIHRoYXQgYXQgbGVhc3Qgb25l Ci1zZXJ2ZXIgc2VuZHMgdGhlIGVycm9yIG1lc3NhZ2UgYmFjayBvbiB0aGUgZGF0YSBjaGFubmVs LCBhcyBpZiBpdCB3ZXJlIGEKLWZpbGVuYW1lICgiL2Jpbi9sczogYmxhaDogTm8gc3VjaCBmaWxl IG9yIGRpcmVjdG9yeSIpLCBhbmQgb24gdGhlIGNvbnRyb2wKLWNoYW5uZWwgdGhlcmUgaXMgbm8g ZXJyb3IgaW5kaWNhdGlvbiAoIjIyNiBBU0NJSSBUcmFuc2ZlciBjb21wbGV0ZSIpLiAgQXQKLXRo aXMgcG9pbnQgcmVtb3RlX2ZpbGVzKCkgaGFzIGEgbGlzdGZpbGUgYW5kLCBpZiBhIG1hdGNoIHBh dHRlcm4gd2FzIGdpdmVuLAotaXQgbG9va3MgdGhyb3VnaCBsaXN0IHRvIHNlZSBpZiBhbnkgb2Yg dGhlIGxpbmVzIG1hdGNoIHRoZSBnaXZlbiBmaWxlbmFtZSwKLWUuZy4gImJsYWgiLiAgVGhpcyBt YWtlcyBGVFAgQ0hFQ0sgZ2l2ZSBmYWxzZSBwb3NpdGl2ZXMuICBUaGUgcHJvYmxlbQotKGRpYWdu b3NlZCBieSBKZWZmKSBpcyB0aGF0IHRoZSBtYXRjaCBwYXR0ZXJuIHdhcyBub3QgZ2l2ZW4gaW4g dGhpcyBjYXNlLCBzbwotaXQgdGFrZXMgc29tZSByYW5kb20gZGVmYXVsdCBhY3Rpb24sIHJlc3Vs dGluZyBpbiB0aGUgc3B1cmlvdXMgc3VjY2VzcwotcmV0dXJuLiAgRml4ZWQgYnkgdXNpbmcgdGhl IHVzZXIncyBzdHJpbmcgYXMgdGhlIHBhdHRlcm4uICBOb3QgdGVzdGVkLAotaG93ZXZlciwgc2lu Y2UgSSBkb24ndCBoYXZlIGFjY2VzcyB0byBhIHNlcnZlciB0aGF0IGJlaGF2ZXMgdGhpcyB3YXku Ci1ja2NmdHAuYywgMjIgRmViIDIwMDcuCi0KLUlmIGFuIGV4dGVybmFsLXByb3RvY29sIGZpbGUg dHJhbnNmZXIgZmFpbHMsIGRvbid0IHByaW50IEtlcm1pdC1zcGVjaWZpYwotaGludHMuICBja3V1 czUuYywgMjIgRmViIDIwMDcuCi0KLU9uZSBtb3JlIHRpbWUgd2l0aCB0dGlubCgpLiAgR290IHJp ZCBvZiB0aGUgImNzYXZlIiBqdW5rLCB3aGljaCBuZXZlciBjb3VsZAotaGF2ZSB3b3JrZWQgKHdo aWNoIGlzIG5vIGRvdWJ0IHdoeSBpdCB3YXMgaW4gYSBkZWJ1Z2dpbmcgc2VjdGlvbikuICBUaGUK LXByb2JsZW0gd2FzIHRoYXQgc2F2aW5nIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgcGFja2V0 IGxvY2FsbHkgZGlkIG5vdAotc3luY2hyb25pemUgd2l0aCB0aGUgYnVmZmVyIGNsZWFyaW5nICh0 dGZsdWkoKSkgZG9uZSBhdCBhIGhpZ2hlciBsZXZlbCwKLWJldHdlZW4gY2FsbHMgdG8gdHRpbmwo KS4gIFNvIG5vdywgdGhlIGxvb2thaGVhZCBjb2RlLCBpZiBpdCBmaW5kcyB0aGUKLWJlZ2lubmlu ZyBhbiBhcy15ZXQgdW5yZWFkIHBhY2tldCwgcHV0cyBpdCBiYWNrIGF0IHRoZSBoZWFkIG9mIHRo ZSBpbnB1dAotcXVldWUuICBUaGlzIHdheSwgaWYgdGhlIHByb3RvY29sIGVuZ2luZSBjbGVhcnMg dGhlIGlucHV0IGJ1ZmZlciwgaXQgd2lsbAotZ2V0IHRoZSB3aG9sZSBwYWNrZXQsIG5vdCBqdXN0 IHRoZSBwYXJ0IGFmdGVyIHRoZSBTT0guICBja3V0aW8uYywgMjQgRmViIDIwMDcuCi0KLUZyb20g U3RldmVuIE0gU2Nod2VkYSwgU2FpbnQgUGF1bCwgTU46IGFkYXB0YXRpb24gb2YgbGFyZ2UgZmls ZSBzdXBwb3J0IHRvCi1WTVMgKGl0IHdhcyBhbHJlYWR5IHBvc3NpYmxlIHRvIHRyYW5zZmVyIGxh cmdlIGZpbGVzIGluIFZNUyBDLUtlcm1pdCBidXQgdGhlCi1maWxlLXRyYW5zZmVyIGRpc3BsYXkg YW5kIHN0YXRpc3RpY3Mgd2VyZSB3cm9uZykuICBBbmQgYSBtaW5pbWFsIGFkYXB0YXRpb24KLW9m IHRoZSBGVFAgY2xpZW50IHRvIFZNUyAtLSBubyBSTVMsIG5vIHNwZWNpYWwgVk1TIGZpbGUgc3R1 ZmYsIFN0cmVhbV9MRiBhbmQKLWJpbmFyeSBmaWxlcyBvbmx5LCBkZXZlbG9wZWQgYW5kIHRlc3Rl ZCBvbmx5IHdpdGggVUNYLiAgU1NML1RMUyBpcwotc3VwcG9ydGVkLiAgVGhlIHNvdXJjZS1jb2Rl IGNoYW5nZXMgYXJlIG1pbmltYWw7IG1vc3QgaGF2ZSBub3RoaW5nIHRvIGRvCi13aXRoIFZNUywg YnV0IHdpdGggaGVhZGVyIGZpbGVzLCBwcm90b3R5cGVzLCBhbmQgZGF0YSB0eXBlcyAoZS5nLiBm dHBfcG9ydAotaW50IHJhdGhlciB0aGFuIHNob3J0LCB2YXJpb3VzIHNpZ25lZC91bnNpZ25lZCBj b25mbGljdHMpIHRvIHNodXQgdXAKLWNvbXBpbGVyIHdhcm5pbmdzLiAgU29tZSBvZiB0aGVzZSBj b3VsZCBiZSBkYW5nZXJvdXMgaW4gdGVybXMgb2YKLXBvcnRhYmlsaXR5OyBJJ3ZlIG1hcmtlZCB0 aGVtIHdpdGggLyogU01TIDIwMDcvMDIvMTUgKi8uICBja2NmbnMuYywKLWNrY25ldC5oLCBja19z c2wuaCwgY2t1dXMzLmMsIGNrdXVzNC5jLCBja3ZmaW8uYywgY2tjZnRwLmMsIGNrdmtlci5tbXMK LSh3aGljaCB3YXMgcmV3cml0dGVuIHRvIGFjdHVhbGx5IHJlZmxlY3QgdGhlIHNvdXJjZSBtb2R1 bGUgZGVwZW5kZW5jaWVzKSwKLWNrdmtlci5jb20gKGFsc28gaGVhdmlseSBtb2RpZmllZCkuICBj a3ZrZXIuY29tICh0aGUgIm1ha2VmaWxlIiBmb3IgVk1TCi1DLUtlcm1pdCkgbm93IGluY2x1ZGVz ICJGIiBhbmQgIkkiIG9wdGlvbiBmbGFncyBmb3IgdGhlIGxhcmdlIEZpbGUgYW5kCi1JbnRlcm5h bCBmdHAgZmVhdHVyZXMsIHBsdXMgYmV0dGVyIGhhbmRsaW5nIG9mIFZheC9BbHBoYS9JQTY0IGRp c3RpbmN0aW9uLgotMjYgRmViIDIwMDcuCi0KLUNoYW5nZWQgTmV0QlNEIHRhcmdldHMgdG8gaW5j bHVkZSAtREhBVkVfT1BFTlBUWSBhbmQgLWx1dGlsLCBzbyB0aGV5Ci1jYW4gdXNlIG9wZW5wdHko KS4gIG1ha2VmaWxlLCAyNiBGZWIgMjAwNy4KLQotQnVpbHQgb24gU29sYXJpcyB3aXRob3V0IGFu ZCB3aXRoIFNTTCBPSy4KLUJ1aWx0IG9uIE5ldEJTRCB3aXRoIEtlcmJlcm9zIDUsIE9LLgotQnVp bHQgb24gTWFjIE9TIFggMTAuNCwgcmVndWxhciB2ZXJzaW9uLCBPSy4KLUJ1aWx0IG9uIE1hYyBP UyBYIDEwLjQgd2l0aCBTU0wgYW5kIEtlcmJlcm9zIDUsIE9LLgotCi1PbiBWTVMgNy4yLTEvQWxw aGEgd2l0aCBNdWx0aU5ldCA0LjRBLVguLi4KLQotJ0NDJyAnQ0NPUFQnIEtTUDpja3V1czMKLSVE Q0wtVy1US05PVkYsIGNvbW1hbmQgZWxlbWVudCBpcyB0b28gbG9uZyAtIHNob3J0ZW4KLSBcQ0tV VVM0Lk9CSiAiJ0NDJyAnQ0NPUFQnIEtTUDpja3V1czQiICJLU1A6Y2t1dXM0LmMgS1NQOmNrY3N5 bS5oIEtTUDpja2NkZWIuaAotIEtTUDpja2NsaWIuaCIgIktTUDpja2Nhc2MuaCBLU1A6Y2tja2Vy LmggS1NQOmNrY25ldC5oIEtTUDpja3Zpb2MuaCIKLSJLU1A6Y2tjdGVsLmggS1NQOmNrdXVzci5o IEtTUDpja3VjbWQuaCBLU1A6Y2t1dmVyLmgiICJLU1A6Y2tjeGxhLmgKLSBLU1A6Y2t1eGxhLmgg S1NQOmNrY3VuaS5oIEtTUDpja3VhdGguaCIKLQotVGhlIG5ldyBydWxlIGZvciBja3V1czQuYyB3 YXMgdG9vIGxvbmcuICBJIHJlbW92ZWQgb25lIGZpbGUgZnJvbSB0aGUKLWRlcGVuZGVuY3kgbGlz dCAoY2tjeGxhLmgsIHdoaWNoIHdpbGwgcHJvYmFibHkgbmV2ZXIgY2hhbmdlIGFnYWluKSBhbmQg dGhhdAotbWFkZSBpdCBPSy4gIEJ1aWx0IE5vbmV0IGFuZCBOZXQgdmVyc2lvbnMgT0ssIGJ1dCB0 aGlzIGlzIHdpdGhvdXQgdGhlIG5ldwotc3R1ZmYuCi0KLSJtYWtlIGYiIChsYXJnZS1maWxlIHN1 cHBvcnQpIG9uIFZNUyA3LjItMS4uLgotJ0NDJyAnQ0NPUFQnIEtTUDpja3V1czQKLSAgICAgICAg ICAgICAgICAgICAgaWYgKENLRlNFRUsoZnAsKENLX09GRl9UKWosU0VFS19DVVIpICE9IDApIHsK LS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLl4KLSVDQy1JLUlNUExJQ0lURlVOQywgSW4gdGhpcyBz dGF0ZW1lbnQsIHRoZSBpZGVudGlmaWVyICJmc2Vla28iIGlzIGltcGxpY2l0bHkKLWRlY2xhcmVk IGFzIGEgZnVuY3Rpb24uCi0KLURpdHRvIGZvciBmdGVsbG8gYW5kIGZzZWVrbyBpbiB2YXJpb3Vz IG90aGVyIHBsYWNlcywgYW5kIHRoZW4gZnNlZWtvIGFuZAotZnRlbGxvIGNvbWUgdXAgdXAgdW5k ZWZpbmVkIGF0IGxpbmsgdGltZS4KLQotVGhlIHJ1bGUgZm9yIGNrY2Z0cCBpbiAibWFrZSBpIiAo SW50ZXJuYWwgRlRQIHN1cHBvcnQpIGhhZCB0aGUgc2FtZSBwcm9ibGVtLgotSSByZW1vdmVkIGNr Y3hsYS5oIGZyb20gaXRzIGRlcGVuZGVuY3kgbGlzdCB0b28sIGJ1dCAidXRpbWUiIGNvbWVzIHVw Ci11bmRlY2xhcmVkIGF0IGNvbXBpbGUgdGltZSBhbmQgdW5kZWZpbmVkIGF0IGxpbmsgdGltZS4K LQotVmVyZGljdDogbmVpdGhlciBvbmUgb2YgdGhlIHR3byBuZXcgZmVhdHVyZXMgY2FuIGJlIHVz ZWQgaW4gVk1TIDcuMiBvcgotZWFybGllciwgYnV0IHRoZSBjb2RlIHN0aWxsIGJ1aWxkcyBPSyBp ZiB5b3UgZG9uJ3QgYXNrIGZvciB0aGVtLgotCi1WTVMgOC4zIG9uIElBNjQuLi4gIENhbid0IGJ1 aWxkIGFueXRoaW5nOgotJU1NUy1GLUJBRFRBUkcsIFNwZWNpZmllZCB0YXJnZXQgKFdFUk1JVCkg ZG9lcyBub3QgZXhpc3QgaW4gZGVzY3JpcHRpb24gZmlsZQotCi0yNyBGZWIgMjAwNzogQ2hhbmdl ZCBDS1ZLRVIuQ09NIHRvIGtlZXAgYWxsIGl0cyBkZXBlbmRlbmNpZXMgYnV0IHVzZSBhCi1zaG9y dGVyIGxvZ2ljYWwgbmFtZSAoU3RldmVuIE0gU2Nod2VkYSkuICBUaGUgcHJvYmxlbSBvbiBWTVMg OC4zIGlzIHRoYXQgTU1TCi1ub3cgc3VwcG9ydHMgY2FzZS1zZW5zaXRpdmUgZmlsZSBzeXN0ZW1z LCBhbmQgc28gaXQgY2FuJ3QgZmluZCBhbnl0aGluZy4KLVdvcmthcm91bmQ6IGJ5cGFzcyBNTVMg KGluY2x1ZGUgIm0iIGluIFAxKS4gIFdpdGggdGhpcywgIkBja3ZrZXIuY29tIGlmbSIKLWJ1aWxk cyBPSyBvbiBIUCBUZXN0ZHJpdmUsIGJ1dCBJIGNhbid0IHRlc3QgdGhlIG5ldyBmZWF0dXJlcyBz aW5jZSBvdXRib3VuZAotY29ubmVjdGlvbnMgYXJlIG5vdCBhbGxvd2VkIHRoZXJlLiAgQXMgZm9y IGZzZWVrbygpLCBmdGVsbG8oKSwgYW5kIHV0aW1lKCksCi10aGV5IHNpbXBseSBhcmUgbm90IGF2 YWlsYWJsZSBwcmlvciB0byBWTVMgNy4zLiAgSXQgd291bGQgcHJvYmFibHkgYmUgYSBnb29kCi1p ZGVhIHRvIHRlc3QgZm9yIHRoaXMgaW4gQ0tWS0VSLkNPTSwgYnV0IGFjdHVhbGx5IGl0IGlzIHBv c3NpYmxlIHRvIGluc3RhbGwKLW5ld2VyIEMncyBhbmQgQ1JUTHMgb24gb2xkZXIgVk1TIHZlcnNp b25zLCBzbyBkb24ndCBzdGFuZCBpbiB0aGVpciB3YXkuCi0KLTI4IEZlYiAyMDA3OiBXaXRoIGFk ZGl0aW9uYWwgY2hhbmdlcyBmcm9tIFNNUywgYW5kIHRoZW4gc29tZSBmdXJ0aGVyCi1hZGp1c3Rt ZW50cywgSSB3YXMgYWJsZSB0byBidWlsZCB0aGUgRlRQIHZlcnNpb24gb24gVk1TIDcuMi0xLiAg Rmlyc3QgSQotdGVzdGVkIGl0IHdpdGggR0VUIG9mIGEgYmluYXJ5IGZpbGUsIGJ1dCBpdCB0cmFu c2ZlcnJlZCBpdCBpbiB0ZXh0IG1vZGUuCi1BZnRlciBhIGZldyBtb3JlIGF0dGVtcHRzIHdpdGgg UFVUIGFuZCBHRVQsIGl0IGNyYXNoZWQgd2l0aCAiZmxvYXRpbmcvZGVjaW1hbAotZGl2aWRlIGJ5 IHplcm8iIGluIGNrc2NyZWVuLCBja3V1c3guYyBsaW5lIDI3ODU5LiAgT2YgY291cnNlLCB0aGF0 J3MgdGhlCi1saXN0aW5nIGxpbmUsIG5vdCB0aGUgc291cmNlIGxpbmUsIGFuZCBJIGRvbid0IGhh dmUgYSBsaXN0aW5nLgotCi1UbyBnZXQgYSBsaXN0aW5nLCBJIGRlbGV0ZWQgQ0tVVVNYLk9CSiBh bmQgdGhlbiBkaWQ6Ci0KLSAgJCBtYWtlIGkgIiIgIiIgIi9MSVNUIgotCi1TdXJwcmlzaW5nbHks IGl0IHJlY29tcGlsZWQgZXZlcnl0aGluZy4KLQotQW55d2F5LCB0aGUgZGl2aWRlIGJ5IHplcm8g aGFwcGVuZWQgaW4gYSBzZWN0aW9uIG9mIGNvZGUgd2hlcmUgdGhlIGRpdmlzb3IKLXdhcyBub3Qg Y2hlY2tlZCwgYnV0IGl0IHdhcyBhIHNlY3Rpb24gb2YgY29kZSB3ZSBzaG91bGQgbm90IGhhdmUg YmVlbgotZXhlY3V0aW5nIGF0IGFsbCwgc2luY2UgdGhlIGZpbGUtdHJhbnNmZXIgZGlzcGxheSB3 YXMgZnVsbHNjcmVlbiwgYW5kIHRoaXMKLXdhcyBpbiB0aGUgImJyaWVmIiBzZWN0aW9uLiAgQW55 d2F5LCBJIGFkZGVkIHRoZSBuZWVkZWQgY2hlY2suICBBZ2FpbiwgaXQKLXJlY29tcGlsZXMgZXZl cnl0aGluZy4gIE1heWJlIHRoZXJlJ3Mgbm8gTU1TIG9uIGdydW1weSAtLSByaWdodCwgdGhlcmUg aXNuJ3QuCi0KLUFOWVdBWS4uLiBUcnkgdG8gR0VUIGEgYmluYXJ5IGZpbGUgbGlrZSB0aGlzOgot Ci0gIGJpbmFyeQotICAtLS0+IFRZUEUgSQotICAyMDAgVHlwZSBzZXQgdG8gSS4KLSAgZ2V0IGdr ZXJtaXQKLSAgLS0tPiBUWVBFIEEKLSAgMjAwIFR5cGUgc2V0IHRvIEEuCi0gIC0tLT4gU0laRSBn a2VybWl0Ci0gIDU1MCBna2VybWl0OiBmaWxlIHRvbyBsYXJnZSBmb3IgU0laRS4KLSAgR0VUIGdr ZXJtaXQgKHRleHQpICgtMSBieXRlcyktLS0+IFRZUEUgQQotCi1Bbnl3YXkuLi4gImdldCAvYmlu YXJ5IGdrZXJtaXQiIGRvd25sb2FkcyBpdCwgc2VlbWluZ2x5IGNvcnJlY3RseSAodGhlIGJ5dGUK LWNvdW50IGlzIHJpZ2h0KS4KLQotQnV0ICJwdXQgL2JpbmFyeSBna2VybWl0LjsxIiByZXN1bHRz IGluIGEgMC1sZW5ndGggR0tFUk1JVCBmaWxlIGJlaW5nIHNlbnQuCi1IZXJlJ3MgdGhlIGRlYnVn IGxvZzoKLQotRlRQIFBVVCBnbmZpbGVbRElTSyRNU0E0OltDLkZEQy5ORVRdZ2tlcm1pdC47MV09 MQotZnRwIHB1dGZpbGUgZmxnW0RJU0skTVNBNDpbQy5GREMuTkVUXWdrZXJtaXQuOzFdPTAKLXps dG9yIGZuY252W0RJU0skTVNBNDpbQy5GREMuTkVUXWdrZXJtaXQuOzFdPS0xCi1GVFAgUFVUIG56 bHRvcltHS0VSTUlUXQotemZucWZwIDFbRElTSyRNU0E0OltDLkZEQy5ORVRdZ2tlcm1pdC47MV09 Njc1Ci16Zm5xZnAgMltESVNLJE1TQTQ6W0MuRkRDLk5FVF1HS0VSTUlULjsxXT0zMQotemZucWZw IDNbRElTSyRNU0E0OltDLkZEQy5ORVRdR0tFUk1JVC47MV09MzEKLXpyZWxuYW0gcmVzdWx0IDJb Z2tlcm1pdC47MV0KLWZ0cCBzZW5kcmVxdWVzdCByZXN0YXJ0W0RJU0skTVNBNDpbQy5GREMuTkVU XWdrZXJtaXQuOzFdPTAKLW9wZW5pIG5hbWVbRElTSyRNU0E0OltDLkZEQy5ORVRdZ2tlcm1pdC47 MV0KLW9wZW5pIHNuZHNyYz0tMQotb3BlbmkgZmlsZSBudW1iZXI9Mgotem9wZW5pW0RJU0skTVNB NDpbQy5GREMuTkVUXWdrZXJtaXQuOzFdPTIKLXpvcGVuaSBmcD0wCi1jaGtmbj0yCi1jaGtmbiBy ZXR1cm49MAotem9wZW5pIGZpeGVkIGZpbGUgZm9ybWF0IC0gdXNpbmcgYmxrIEkvTwotem9wZW5p IGJpbmFyeSBmbGFnIGF0IG9wZW49MQotem9wZW5pIGlmaWxlX2Jtb2RlPTEKLXpvcGVuaSBiaW5h cnk9MQotem9wZW5pIFJNUyBvcGVyYXRpb25zIGNvbXBsZXRlZCBvawotb3Blbmkgem9wZW5pIDFb RElTSyRNU0E0OltDLkZEQy5ORVRdZ2tlcm1pdC47MV09MQotZnRwY21kIGNtZFtQQVNWXQotRlRQ IFNFTlQgW1BBU1ZdCi1GVFAgUkNWRCBbMjI3IEVudGVyaW5nIFBhc3NpdmUgTW9kZSAoMTY2LDg0 LDEsMiwyMzMsMjE2KV0KLWluaXRjb25uIGNvbm5lY3Qgb2sKLUZUUCBTRU5UIFtTVE9SIEdLRVJN SVRdCi1GVFAgUkNWRCBbMTUwIE9wZW5pbmcgQklOQVJZIG1vZGUgZGF0YSBjb25uZWN0aW9uIGZv ciAnR0tFUk1JVCcuXQotZG9mdHBzZW5kMiBmdHBjb2RlW1NUT1JdPTE1MAotCi0gIEhlcmUgaXMg d2hlcmUgdGhlIGZpbGUgaXMgc3VwcG9zZWQgdG8gYmUgcmVhZCBhbmQgc2VudCBidXQgdGhlcmUg aXMgbm90aGluZwotICBpbiB0aGUgbG9nIGJldHdlZW4gdGhlICJkb2Z0cHNlbmQyIGZ0cGNvZGUi IGxpbmUgYW5kIHRoZSBmb2xsb3dpbmcgbGluZS4KLQotcmZ0aW1lciBzdGF0dXM9MQotZ2Z0aW1l ciBzdGF0dXMgMT0xCi1nZnRpbWVyIHN0YXR1cyAyPTE0MDkwMjUKLWdmdGltZXIgc3RhdHVzIDM9 MTQwOTAyNQotZ2Z0aW1lciBzWzAuMDAwMDAwXQotemNsb3NlIG49MgotY2hrZm49MgotY2hrZm4g cmV0dXJuPTEKLXpjbG9zZSBaSUZJTEUgUk1TIG9wZXJhdGlvbnMgY29tcGxldGVkIG9rCi1mdHAg Z2V0cmVwbHkgbGNzPTAKLWZ0cCBnZXRyZXBseSByY3M9LTEKLWZ0cCBnZXRyZXBseSBmYz0wCi1G VFAgUkNWRCBbMjI2IFRyYW5zZmVyIGNvbXBsZXRlLl0KLWZ0cCBnZXRyZXBseVsyMjYgVHJhbnNm ZXIgY29tcGxldGUuXT0yCi1kb2Z0cHNlbmQyIG9rPTAKLQotRXZlcnl0aGluZyBpcyBPSyB1cCB1 bnRpbCB3ZSBnbyB0byBzZW5kIHRoZSBmaWxlLCB0aGVuIGl0IGJlaGF2ZXMgYXMgaWYgd2UKLWdv dCBFT0YgaW1tZWRpYXRlbHkgYW5kIHNvIGNsb3NlcyB0aGUgZGF0YSBjb25uZWN0aW9uLCBhbmQg cmVwb3J0cyBzdWNjZXNzOwotYW4gZW1wdHkgY29weSBvZiB0aGUgZmlsZSBpcyBsZWZ0IG9uIHRo ZSBmYXIgZW5kLgotCi1TdGFydGluZyBvdmVyIHdpdGggYSB0ZXh0IGZpbGUuLi4uICBQVVQgTE9H SU4uQ09NIGdldHMgYW5vdGhlciBkaXZpZGUgYnkKLXplcm8uICBCdXQgaXQgaGFwcGVuZWQgaW4g dGhlIGNvZGUgSSBqdXN0IGZpeGVkLCB3aGljaCBpcyBpbXBvc3NpYmxlLiAgU3dlbGwuCi1JIHJl Y29tcGlsZWQgZXZlcnl0aGluZyBhbmQgdGhpcyB0aW1lIHRoZSB1cGxvYWQgd29ya2VkLCBhbmQg ZG93bmxvYWRpbmcgaXQKLWFnYWluIHdvcmtlZCB0b28uCi0KLUJ1dCBhIGJpbmFyeSBmaWxlIHN0 aWxsIGNhbid0IGJlIHVwbG9hZGVkLiAgVHJ5aW5nIHRvIHVwbG9hZCBhIHRleHQgZmlsZQotYWZ0 ZXIgZG9pbmcgdGhpcyBzZWVtcyB0byBzdWNjZWVkIChyZXBvcnRzIHRoZSByaWdodCBudW1iZXIg b2YgYnl0ZXMgc2VudCkKLWJ1dCBub3RoaW5nIGFwcGVhcnMgb24gdGhlIGZhciBzaWRlLgotCi1T VU1NQVJZOgotCi0gIFRvIGRvd25sb2FkIGEgdGV4dCBmaWxlOiBHRVQgL0FTQ0lJIGJsYWgudHh0 ICAgICgvQVNDSUkgaXMgb3B0aW9uYWwpCi0gIFRvIGRvd25sb2FkIGEgYmluYXJ5IGZpbGU6IEdF VCAvQklOQVJZIGJsYWguYmluICgvQklOQVJZIGlzIHJlcXVpcmVkKQotICBUbyB1cGxvYWQgYSB0 ZXh0IGZpbGU6IFBVVCBibGFoLnR4dCAgICAgICAgICAgICAoL0FTQ0lJIHN3aXRjaCBub3QgbmVl ZGVkKQotICBUbyB1cGxvYWQgYSBiaW5hcnkgZmlsZTogUFVUIC9CSU5BUlkgYmxhaC5iaW4gICAo ZG9lc24ndCB3b3JrKQotCi1Qcm9ibGVtczoKLSAgLiBXaHkgZG9lc24ndCBCSU5BUlkgInN0aWNr Ij8KLSAgLiBXaHkgZG9uJ3QgYmluYXJ5IHVwbG9hZHMgd29yaz8KLQotVGhlIGN1bHByaXQgc2Vl bXMgdG8gYmUgdGhlIFZNUyB2ZXJzaW9uIG9mIHp4aW4oKS4gIEluIHRoZSBGVFAgbW9kdWxlLAot enhpbigpIGlzIGNhbGxlZCBvbmx5IHdoZW4gc2VuZGluZyBiaW5hcnkgZmlsZXMuICBJbiBWTVMs IHp4aW4oKSBpcyBqdXN0Ci1hIGZyb250IGVuZCBmb3IgQy1MaWJyYXJ5IGZyZWFkKCkuICBJdCBw cm9iYWJseSBuZWVkcyB0byBkbyBqdXN0IGRvCi16bWluY2hhcigpIGluIGEgbG9vcCwgbGlrZSBi aW5hcnkgbW9kZSBkb2VzLCBidXQgY2FsbGluZyB6em91dCBpbnN0ZWFkCi1vZiB4eG91dC4gIE9y IHNvbWV0aGluZyBsaWtlIHRoYXQuICBGSU5JU0ggVEhJUyBUT01PUlJPVyAoZGVidWcgb24gZ3J1 bXB5KS4KLQotMiBNYXIgMjAwNzogTmV3IGxvZ3MgZnJvbSBKb2huIER1bmxhcC4KLQotZW1hLTE2 MzYtbG9nLTAxNzUuZGJnOiBDLUtlcm1pdCB1cGxvYWRzIGEgc2hvcnQgZmlsZS4gSXQgcmVjZWl2 ZXMgYW4gQWNrIGZvcgotdGhlIFogcGFja2V0IGl0IGp1c3Qgc2VudCwgdGFpbGdhdGVkIGJ5IHRo ZSBiZWdpbm5pbmcgb2YgYSBOYWsgZm9yIHRoZSBuZXh0Ci1wYWNrZXQuICBXaGVuIHRoZSBzZWNv bmQgU09IIGlzIGVuY291bnRlcmVkLCBpdCBpcyBwdXQgYmFjayBpbiB0aGUgbXlyZWFkCi1xdWV1 ZS4gIFRoZW4gdGhlIHByb3RvY29sIGVuZ2luZSwgdG8gd2hpY2ggd2UgcmV0dXJuIHRoZSBBY2ss IHNheXMsICJJIGhhdmUKLXRoZSBwYWNrZXQgSSB3YW50ZWQgc28gSSdtIGNsZWFyaW5nIHRoZSBi dWZmZXIiLCBhbmQgYXdheSBnbyB0aGUgZmlyc3QgdHdvCi1ieXRlcyBvZiB0aGUgTmFrIGZyb20g dGhlIG15cmVhZCBidWZmZXIuICBUaGVuLCBoYXZpbmcganVzdCByZWNlaXZlZCB0aGUgQWNrCi1v ZiBvdXIgWiBwYWNrZXQsIHdlIHNlbmQgb3VyIEIsIGFuZCBnbyB0byByZWFkIHRoZSByZXBseS4g IGluX2NoayBmaW5kcyAwIGluCi10aGUgbXlyZWFkIGJ1ZmZlciAod2hpY2ggd2UganVzdCBjbGVh cmVkKSBhbmQgNiB3YWl0aW5nIHRvIGJlIHJlYWQgZnJvbSB0aGUKLWNvbW1zIGNoYW5uZWwsIHdo aWNoIGl0IGRvZXMsIG9idGFpbmluZyB0aGUgcmVtYWluaW5nIDYgYnl0ZXMgb2YgdGhlIE5haywK LXdoaWNoIGl0IHByb3Blcmx5IGRpc2NhcmRzLiAgKFRoZSByZWFzb24gdGhpcyBpcyBwcm9wZXIg aXMgdGhhdCwgaGF2aW5nCi1hbHJlYWR5IHJlY2VpdmVkIHRoZSBBY2sgZm9yIHRoZSBsYXN0IHBh Y2tldCBpdCBzZW50LCBubyBBY2sgb3IgTmFrIHRoYXQKLWFycml2ZXMgc3Vic2VxdWVudGx5IC0t IGluIHRoZSBub24td2luZG93aW5nIGNhc2UgLS0gY291bGQgcG9zc2libHkgYWZmZWN0Ci13aGF0 IGl0IGRvZXMgbmV4dC4pICBTaW5jZSBpdCBoYXNuJ3QgeWV0IGZvdW5kIGEgZ29vZCBwYWNrZXQs IGl0IGtlZXBzCi1yZWFkaW5nLCBhbmQgbm93IGl0IGZpbmRzIHRoZSBBY2sgdG8gdGhlIEIsIGFz IHNvb24gYXMgaXQgc2hvd2VkIHVwLiAgVGhpcwotaXMgaG93IGl0J3Mgc3VwcG9zZWQgdG8gd29y ay4gIE5vIHRpbWUgd2FzIGxvc3QgYmVjYXVzZSBvZiBhbnl0aGluZyB0aGF0Ci1DLUtlcm1pdCBk aWQuCi0KLWVtYS0xNjM2LWxvZy0wMTc0LmRiZzogQy1LZXJtaXQgdXBsb2FkcyBhIHNob3J0IGZp bGUuIEl0IHNlbmRzIERhdGEgcGFja2V0Ci0jMyBhbmQgcmVjZWl2ZXMgdGhlIEFjayBmb2xsb3dl ZCBpbW1lZGlhdGVseSBieSB0aGUgZmlyc3QgMyBieXRlcyBvZiBhIE5hawotZm9yIHBhY2tldCA0 LiAgV2hlbiBpdCBnZXRzIHRvIHRoZSBTT0ggb2YgdGhlIHNlY29uZCBwYWNrZXQsIGl0IHB1c2hl cyBpdAotYmFjayBpbiB0aGUgcXVldWUuICBBZ2FpbiwgaW5wdXQoKSBmbHVzaGVzIHRoZSBpbnB1 dCBidWZmZXIgKG15cmVhZCBxdWV1ZQotYW5kIGRldmljZSBidWZmZXIpLiAgQy1LZXJtaXQgZGV0 ZWN0cyBFT0Ygb24gdGhlIGZpbGUgaXQgaXMgc2VuZGluZywgYW5kCi1zZW5kcyB0aGUgWiBwYWNr ZXQuICBUaGVuIGl0IHJlYWRzIHRoZSByZW1haW5pbmcgYnl0ZXMgb2YgdGhlIE5haywKLXdoaWNo IGl0IGRpc2NhcmRzLCBhbmQgdGhlbiBpdCBmaW5kcyB0aGUgQWNrIGZvciBaIHdoaWNoIGNvbWVz IGluIDIzIHNlY29uZHMKLWxhdGVyLCBzZW5kcyB0aGUgQiwgZ2V0cyBhIE5hayBmb3IgdGhlIEIs IHNlbmRzIHRoZSBCIGFnYWluLCBnZXRzIHRoZSBBY2sKLWZvciB0aGUgQiA0IHNlY29uZHMgbGF0 ZXIsIGFuZCBkb25lLiAgQWdhaW4sIGl0J3Mgd29ya2luZyByaWdodCBhbmQgbG9zaW5nCi1ubyB0 aW1lLgotCi1UaGUgcXVlc3Rpb24gcmVtYWluczogd2hhdCB3b3VsZCBoYXBwZW4gaWYgdGhlIHBy b3RvY29sIGVuZ2luZSBkaWQgbm90IGNsZWFyCi10aGUgYnVmZmVyPyAgV291bGQgdHRpbmwoKSBy ZXRyaWV2ZSBhbGwgcGFja2V0cyBpbiBzZXF1ZW5jZSBldmVuIHdoZW4gdGhleQotY29tZSBiYWNr IHRvIGJhY2s/ICBUbyB0ZXN0IHRoaXMsIEkgaGFkIEMtS2VybWl0IHNlbmQgYSBmaWxlIHVzaW5n IDMwIHdpbmRvdwotc2xvdHMgYW5kIG9ic2VydmVkIHRoZSBzdHJlYW0gb2YgQWNrcyBpbiB0aGUg cmV2ZXJzZSBkaXJlY3Rpb246Ci0KLSAgSEVYRFVNUDogbXlnZXRidWYgcmVhZCAoMTYgYnl0ZXMp Ci0gIDAxIDI1IDIzIDU5IDJmIDUyIDM5IDBkIHwgMDEgMjUgMjQgNTkgMmIgMjYgMzEgMGQgIC4l I1kvUjkuIC4lJFkrJjEuCi0gIHR0aW5sIGxvb2thaGVhZCBteV9jb3VudD05Ci0gIHR0aW5sIGxv b2thaGVhZCByZW1vdmVkPV5NCi0gIHR0aW5sIGxvb2thaGVhZCBwdXNoYmFjayBTT1A9XkEKLSAg SEVYRFVNUDogdHRpbmwgZ290ICg3IGJ5dGVzKQotICAwMSAyNSAyMyA1OSAyZiA1MiAzOSAgICB8 ICAgICAgICAgICAgICAgICAgICAgICAgICAuJSNZL1I5Ci0gIFJFQ0VJVkUgQlVGRkVSUzoKLSAg YnVmZmVyIGludXNlIGFkZHJlc3MgbGVuZ3RoIGRhdGEgdHlwZSBzZXEgZmxhZyByZXRyaWVzCi0g ICAgIDAgICAgIDEgICAgIDI5MjEyIDk2NjcgICAgIDAgICBZICAgIDMgICAgIDAKLSAgWwElI1ld Ci0gIC4uLgotICBpbl9jaGsgbXlfY291bnQ9OAotICAuLi4KLSAgdHRpbmwgbG9va2FoZWFkIG15 X2NvdW50PTEKLSAgdHRpbmwgbG9va2FoZWFkIHJlbW92ZWQ9Xk0KLSAgSEVYRFVNUDogdHRpbmwg Z290ICg3IGJ5dGVzKQotICAwMSAyNSAyNCA1OSAyYiAyNiAzMSAgICB8ICAgICAgICAgICAgICAg ICAgICAgICAgICAuJSRZKyYxCi0gIFJFQ0VJVkUgQlVGRkVSUzoKLSAgYnVmZmVyIGludXNlIGFk ZHJlc3MgbGVuZ3RoIGRhdGEgdHlwZSBzZXEgZmxhZyByZXRyaWVzCi0gICAgIDAgICAgIDEgICAg IDI5MjEyIDk2NjcgICAgIDAgICBZICAgIDQgICAgIDAKLSAgWwElJFldCi0KLUhlcmUgd2UgY2Fu IHNlZSB0aGF0IHRoZSBwdXNoZWQtYmFjayBTT0ggd2FzIHByb3Blcmx5IHJldHJpZXZlZCBuZXh0 IHRpbWUKLWFyb3VuZCwgYW5kIHRoZSB0YWlsZ2F0aW5nIEFjayB3YXMgbm90IGxvc3QuICBUaGlz IHNjZW5hcmlvIHJlcGVhdHMgaXRzZWxmCi0yMTIgdGltZXMgaW4gdGhlIGxvZywgYW5kIHRoZXJl IGFyZSBubyBzY3Jld3Vwcy4KLQotQmFjayB0byBWTVMgRlRQLi4uICBUaGUgcHJvYmxlbSB3aXRo IHNlbmRpbmcgYmluYXJ5IGZpbGVzIGlzIHRoYXQgenhpbigpCi11c2VzIEMtTGlicmFyeSBmb3Bl bigpL2ZyZWFkKCkgaW5zdGVhZCBvZiBSTVMsIHNvIGl0IGNhbid0IGFjY2VzcyB0aGUgaW5wdXQK LWZpbGUsIHdoaWNoIHdhcyBvcGVuZWQgYnkgem9wZW5pKCksIHdoaWNoIGlzIHRvdGFsbHkgUk1T LWlmaWVkIGluIFZNUwotQy1LZXJtaXQuICBGb3IgVk1TIG9ubHksIEkgcmVwbGFjZWQgdGhlIHp4 aW4oKSBsb29wIGJ5IGEgem1pbmNoYXIoKSBsb29wCi1saWtlIHRoZSBvbmUgdXNlZCBpbiB0ZXh0 IG1vZGUsIGV4Y2VwdCB3aXRob3V0IHRoZSBjaGFyYWN0ZXIgc2V0IG9yCi1yZWNvcmQtZm9ybWF0 IGNvbnZlcnNpb24uICBUZXN0ZWQgYnkgUFVUIC9CSU5BUlkgb2Ygc29tZSBiaW5hcnkgZmlsZXMs IHdoaWNoCi13b3JrZWQgZmluZS4gIGNrY2Z0cC5jLCAyIE1hciAyMDA3LgotCi1OZXh0IHByb2Js ZW0uLi4gIFZNUyBDLUtlcm1pdCBmdHAgY2xpZW50IHNlbmRpbmcgYmluYXJ5IGZpbGVzIGluIHRl eHQgbW9kZS4KLVZhcmlhdGlvbiAxOiBXZSBqdXN0IHNlbmQgdGhlIGZpbGUuICB6b3BlbmkoKSBp cyBzdXBwb3NlZCB0byBkZXRlY3QgdGhhdAotaXQncyBhIGJpbmFyeSBmaWxlIGFuZCBhdXRvbWF0 aWNhbGx5IHNldCB0aGUgbW9kZS4gIEFuZCBpdCBkb2VzOgotCi0gIHpvcGVuaSBmaXhlZCBmaWxl IGZvcm1hdCAtIHVzaW5nIGJsayBJL08KLSAgem9wZW5pIGJpbmFyeSBmbGFnIGF0IG9wZW49MAot ICB6b3BlbmkgaWZpbGVfYm1vZGU9MQotICB6b3BlbmkgYmluYXJ5PTAKLSAgem9wZW5pIGF1dG9z d2l0Y2ggZnJvbSBURVhUIHRvIEJJTkFSWQotICB6b3BlbmkgUk1TIG9wZXJhdGlvbnMgY29tcGxl dGVkIG9rCi0KLWJ1dCB0aGVuIGluIGduZmlsZSgpOgotCi0gIGlmICghc2VydmVyIHx8IChzZXJ2 ZXIgJiYgKCh3aGF0cnUgJiBXTUlfRkxBRykgPT0gMCkpKQotICAgIGJpbmFyeSA9IGduZl9iaW5h cnk7CS8qIFJlc3RvcmUgcHJldmFpbGluZyB0cmFuc2ZlciBtb2RlICovCi0KLVdlbGwsIHNpbmNl IFZNUyBzZXRzIHRleHQvYmluYXJ5IG1vZGUgYXV0b21hdGljYWxseSB3aGVuIHNlbmRpbmcgZmls ZXMsCi10aGlzIGNvZGUgY2FuIChhbmQgc2hvdWxkKSBiZSBza2lwcGVkIGluIFZNUy4gIGduZmls ZSgpOiBja2NmbnMuYywgMiBNYXIgMjAwNy4KLQotVmFyaWF0aW9uIDI6IEJJTkFSWSBvciBTRVQg RklMRSBUWVBFIEJJTkFSWSBkb2Vzbid0IGZvcmNlIGJpbmFyeSBtb2RlLiAgQnV0Ci1TRVQgRlRQ IFRZUEUgQklOQVJZIGRvZXMuICBCdXQgQklOQVJZIGRvZXMgaW5kZWVkIGNhbGwgZG9mdHB0eXAo KSBzbyB3aGF0J3MKLXRoZSBwcm9ibGVtPyAgV2UgZG8gaW5kZWVkIHNldCBmdHBfdHlwIHRvIDEg YnV0IGl0IGdldHMgcmVzZXQgc29tZXdoZXJlCi1iZWZvcmUgd2UgY2FsbCB6b3BlbmkoKS4gIEJ1 dCB0aGVuIHpvcGVuaSgpIHB1dHMgaXQgYmFjayB0byAxLiAgVHJhY2luZwotdGhyb3VnaCBhIHRy YW5zZmVyLCBpdCBsb29rcyBsaWtlIGFsbCBvZiB0aGlzIHdvcmtzIHJpZ2h0LCBpdCdzIG9ubHkg dGhhdAotdGhlIGZpbGUgdHJhbnNmZXIgZGlzcGxheSBzYXlzIFRFWFQgd2hlbiB0aGUgdHJhbnNm ZXIgaXMgcmVhbGx5IGluIGJpbmFyeQotbW9kZS4gIFRoaXMgaXMgYmVjYXVzZSBzY3JlZW4oKSBp cyBjYWxsZWQgYmVmb3JlIG9wZW5pKCkuICBJIHdvbmRlciBpZiB3ZQotY2FuIGNhbGwgc2NyZnQo KSBmcm9tIHRoZSBmdHAgbW9kdWxlLi4uICBObywgdGhhdCB3b3VsZCBiZSB0b28gZWFzeS4gIE9L LAotc2VuZHJlcXVlc3QgY2FsbHMgb3BlbmkoKSBhbmQgc2V0cyB0aGUgZmlsZSBtb2RlOyBwdXRm aWxlKCkgY2FsbHMKLXNjcmVlbihTQ1JfRk4pLCB3aGljaCBwcmludHMgdGhlIHRyYW5zZmVyIG1v ZGUuICBCdXQgcHV0ZmlsZSBjYWxscwotc2VuZHJlcXVlc3QoKSBhZnRlciBpdCBwdXRzIHVwIHRo ZSBzY3JlZW4gdGhhdCBzYXlzIHRoZSBmaWxlIHR5cGUuICBTbyBpdAotbG9va3MgbGlrZSBzZW5k cmVxdWVzdCgpIGhhcyB0byBjYWxsIHNjcmVlbihTQ1JfRk4pIGFnYWluIGlmIGl0IGNoYW5nZXMg dGhlCi1maWxlIHR5cGUuICBPSywgdGhhdCBkaWQgaXQuICBja3V1c3guYywgY2tjZnRwLmMsIDIg TWFyIDIwMDcuCi0KLVRoZSBCSU5BUlkgYW5kIFRFWFQgKEFTQ0lJKSBjb21tYW5kcyBkbyBub3Qg aW5oaWJpdCBhdXRvbWF0aWMgdHlwZSBzd2l0Y2hpbmcKLWluIFZNUy4gIFRoZXkgZG9uJ3QgaW4g VW5peCBlaXRoZXIuICBUaGV5IG5ldmVyIGhhdmUuICBTaG91bGQgdGhleT8gIEkgdGhpbmsKLXNv LCBvdGhlcndpc2Ugd2hhdCBnb29kIGFyZSB0aGV5PyAgUGx1cyB3ZSB3YW50IHRoZSBLZXJtaXQg RlRQIGNsaWVudCB0bwotYmVoYXZlIGxpa2UgdGhlIG90aGVycy4gIEkgYWRkZWQgY29kZSBmb3Ig dGhpcyBidXQgaXQgZG9lc24ndCB3b3JrLCBkdWUgdG8KLXRoZSBsYXllcnMgYW5kIGxheWVycyBv ZiB0ZXh0L2JpbmFyeSBkZXRlY3Rpb24gYW5kIHN3aXRjaGluZyBhbmQKLWlmLXRoaXMtYnV0LXRo ZW4taWYtdGhhdC4uLiAgQW55d2F5LCBubyBoYXJtIGRvbmUuICBUaGUgbm9ybWFsIHJ1bGUgaXM6 Ci13aGVuIHlvdSBQVVQgYSBmaWxlLCBLZXJtaXQgZmlndXJlcyBvdXQgb24gYSBwZXItZmlsZSBi YXNpcyB3aGV0aGVyIHRvIHVzZQotdGV4dCBvciBiaW5hcnkgbW9kZSB1bmxlc3MgeW91IGluY2x1 ZGUgYSAvVEVYVCAoL0FTQ0lJKSBvciAvQklOQVJZIHN3aXRjaAotaW4gdGhlIFBVVCAob3IgTVBV VCkgY29tbWFuZC4gIGNrdXVzW3IzXS5jLCBja2NmdHAuYywgMiBNYXIgMjAwNy4KLQotV2VkIE1h ciA3IDE2OjIxOjEzIDIwMDcgV1JPVEUgU0hPUlQgVEVTVCBQUk9HUkFNIGZvciB0dHJ1bmNtZCAo dGhlIG9wZW5wdHkKLXZlcnNpb24pIG9uIE1hYyBPUyBYLiAgT24gZHVsY2U6IH4va2VybWl0L3R0 cHR5LmMgLyB0dHB0eS5zaC4gIEl0IHN0YXJ0cyB0aGUKLWV4dGVybmFsIHByb3RvY29sIGluIHRo ZSBsb3dlciBmb3JrLiAgVGhlIGNvbW1hbmQgdG8gcnVuIGlzIGEgY29tbWFuZC1saW5lCi1hcmd1 bWVudC4gIFNlbmRpbmcgYW5kIHJlY2VpdmluZyBmaWxlcyB3aXRoIEtlcm1pdCB3b3JrcyBPSy4g IEJ1dCBhZ2FpbiwgdGhlCi1zdGFuZGFsb25lIHByb2dyYW0gdG90YWxseSBmYWlscyB3aGVuIEkg dXNlIHN6IG9yIGxzeiBhcyB0aGUgZXh0ZXJuYWwKLXByb3RvY29sLiAgU28gaXQgbG9va3MgbGlr ZSB3ZSBjYW4gcnVsZSBvdXQgYW55IGVudmlyb25tZW50YWwgZWZmZWN0cyBvZgotcnVubmluZyB0 aGUgY29kZSBpbnNpZGUgQy1LZXJtaXQuCi0KLU1vbiBNYXIgMTIgMTY6NTI6MjAgMjAwNzogUHV0 IHNvbWUgZWZmb3J0IGludG8gbWFraW5nIHR0cHR5LmMgbW9yZSB1c2VmdWw7Ci1hZGRlZCBhIGRl YnVnIGxvZy4gIEZvdW5kIHRoYXQgZm9yIHNvbWUgcmVhc29uLCBhdCBsZWFzdCBvbiBNYWMgT1Mg WCwKLXNlbGVjdCgpIGFsd2F5cyB0aW1lZCBvdXQgYXQgdGhlIHRoZSBlbmQuICBJIGFkZGVkIGEg U0lHQ0hMRCBhbGFybSBhbmQgdGhhdAotc2VlbXMgdG8gaGFuZGxlIHRoZSBmb3JrIGV4aXQgY29u ZGl0aW9uIHZlcnkgbmljZWx5LiAgTm93IHdlIGNhbiBzZW5kIChzYXkpCi1hIDNNQiBmaWxlIGF0 IGdvb2Qgc3BlZWQgb24gRXRoZXJuZXQgKDFNY3BzKSBjb25zaWRlcmluZyB0aGUgZGVidWdnaW5n LCBldGMsCi1hbmQgaXQgdGVybWluYXRlcyBpbnN0YW50bHkuICBCdXQgd2hlbiBzZW5kaW5nIGEg ZmlsZSBpbnRvIHR0cHR5Y21kICh3aXRoCi0iZ2tlcm1pdCAtciIpLCB0aGluZ3MgZ28gd3Jvbmcg YXQgdGhlIGVuZCAtLSB0aGUgWiBwYWNrZXQgaXMgbmV2ZXIKLWFja25vd2xlZGdlZC4gIFRoaXMg aXMgcmVwcm9kdWNpYmxlLiAgTWF5YmUgdGhpcyBpcyBhIGdvb2QgbGVhZC4uLi4gIFRoZSBsb2cK LXNob3dzIHRoYXQgc2VsZWN0KCkgdGltZWQgb3V0LCBldmVuIHRob3VnaCB0aGUgZ2tlcm1pdCBm b3JrIGhhZCBub3QgeWV0Ci1leGl0ZWQgKG9yIGZpbmlzaGVkKS4gIEl0IGxvb2tzIGxpa2UgZ2tl cm1pdCBzZW50IHRoZSBBY2ssIHR0cHR5LmMgcmVhZCBpdAotZnJvbSB0aGUgcHR5IGFuZCBzZW50 IGl0IG91dCB0aGUgbmV0OgotCi0gIDAwMDM6IHJlYWQgcHR5PTggICAgICAgICAgICAgICAgPC0t IHJlYWQgQWNrIGZyb20gcHR5Ci0gIDAwMDM6IGxvb3AgdG9wIGhhdmVfcHR5PTEKLSAgMDAwMzog bG9vcCB0b3AgaGF2ZV9uZXQ9MQotICAwMDAzOiBGRF9TRVQgcHR5X2luCi0gIDAwMDM6IEZEX1NF VCB0dHlmZCBpbgotICAwMDAzOiBGRF9TRVQgdHR5ZmQgb3V0PTgKLSAgMDAwMzogbmZkcz01Ci0g IDAwMDM6IHNlbGVjdD0xCi0gIDAwMDM6IEZEX0lTU0VUIHR0eWZkIG91dAotICAwMDAzOiB3cml0 ZSBuZXQ9OCAgICAgICAgICAgICAgIDwtLSBzZW5kIGFjayB0byBuZXQKLSAgMDAwMzogbG9vcCB0 b3AgaGF2ZV9wdHk9MQotICAwMDAzOiBsb29wIHRvcCBoYXZlX25ldD0xCi0gIDAwMDM6IEZEX1NF VCBwdHlfaW4KLSAgMDAwMzogRkRfU0VUIHR0eWZkIGluCi0gIDAwMDM6IG5mZHM9NQotICAwMDA5 OiBzZWxlY3Q9MAotICAwMDA5OiBzZWxlY3QgdGltZW91dCAtIGhhdmVfcHR5PTEKLQotQnV0IEFj ayBuZXZlciBhcnJpdmVkLiAgVGhpcyBpcyBhIHN0cmVhbWluZyB0cmFuc2Zlci4gIEJ1dCBub3Bl LCBzdHJlYW1pbmcKLWlzIG5vdCB0aGUgcHJvYmxlbS4gIElmIEkgZGlzYWJsZSBzdHJlYW1pbmcg KCJna2VybWl0IC1TciIpLCB3ZSBoYW5nIGluIGluCi10aGUgbWlkZGxlIG9mIHNlbmRpbmcgdGhl IGRhdGEuICBJZiBJIHVzZSBzbWFsbCBwYWNrZXRzLCB3ZSBkb24ndCBoYW5nOgotMTAwMCBpcyBP SywgMjAwMCBpcyBub3QuICBJbiBmYWN0LCB0aGUgY3V0b2ZmIGlzIDEwMjQuICBPSywgVEJDLi4u Ci0KLVdlZCAxNCBNYXIgMjAwNzogUmVjZWl2aW5nIGEgZmlsZSB0aHJ1IHR0cHR5ICJna2VybWl0 IC1lIDEyMDAgLVNyZCIKLXByb2R1Y2VzIGEgZGVidWcgbG9nIHRoYXQgc2hvd3MgdGhhdCBna2Vy bWl0IGdldHMgYSBsb3Qgb2YgRUFHQUlOIGVycm9ycwotd2hlbiBpdCB0cmllcyB0byByZWFkIGZy b20gaXRzIHN0ZGluLiAgSW4gZmFjdCwgaXQgdGFrZXMgNiB0cmllcyAocmVhZCgpCi1jYWxscykg dG8gcmVhZCB0aGUgUyBwYWNrZXQgKDI3IGJ5dGVzKS4gIFRoZW4gd2hlbiB0aGUgZmlyc3QgZGF0 YSBwYWNrZXQKLWFycml2ZXMgKDEyMDAgYnl0ZXMpLCByZWFkKCkgbmV2ZXIgcmV0dXJucyBldmVu IG9uZSBzaW5nbGUgYnl0ZS4gIFRoZQotdGltZW91dCBpbnRlcnZhbCBpcyAxNSBzZWNvbmRzIGFu ZCBpdCB0aW1lcyBvdXQgcmVwZWF0ZWRseS4gIEFkZGVkIGEKLXByaW1pdGl2ZSBoZXggZHVtcCB0 byB0aGUgdHRwdHkgZGVidWcgbG9nIGZvciBlYWNoIHJlYWQvd3JpdGUgKHNob3dpbmcgb25seQot dGhlIGZpcnN0IDI0IGNoYXJhY3RlcnMgYW5kIHRoZSBsYXN0IGNoYXJhY3Rlciwgc28gaXQgZml0 cyBvbiBvbmUgbGluZSkuCi1UcmllZCB1cGxvYWRpbmcgYSBmaWxlLiAgVGhlIFMsIEYsIGFuZCBB IHBhY2tldHMgKHNob3J0KSBhcmUgcmVjZWl2ZWQgYW5kCi1BY2snZCBPSywgYnV0IHRoZW4gdHRw dHkgc2VsZWN0KCkgdGltZXMgb3V0LCBuZXZlciByZWNlaXZpbmcgZXZlbiBvbmUgYnl0ZQotZnJv bSB0aGUgRCBwYWNrZXQuICBDbGVhcmx5LCB3aGVuIHRoZSBwdHkgZHJpdmVyIHJlY2VpdmVzIGEg YnVyc3Qgb2YgPiAxSwotYnl0ZXMsIHN0b3BzIHdvcmtpbmcuICBBcyBiZWZvcmUsIGlmIEkgbGlt aXQgdGhlIHBhY2tldHMgdG8gPCAxSywgaXQgd29ya3MKLWZpbmUuCi0KLUNhbiBJIHNlbmQgYW4g OC1iaXQgYmluYXJ5IGZpbGU/ICBOb3BlLiAgdHRwdHkgcmVhZHMgdGhlIGJpbmFyeSBkYXRhIGp1 c3QKLWZpbmUgZnJvbSB0aGUgbmV0IGFuZCB3cml0ZXMgaXQgZXhhY3RseSBhcyBpdCB3YXMgcmVj ZWl2ZWQgdG8gdGhlIHB0eSwgYnV0Ci10aGUgZmlyc3QgdGltZSB3ZSB3cml0ZSBhbiA4LWJpdCBi eXRlLCB3ZSBuZXZlciBoZWFyIGJhY2sgZnJvbSB0aGUgUFRZCi1hZ2Fpbi4gIEJ1dCB0aGUgbG9n IHNob3dzIHRoYXQgd2hlbiB0aGUgaW5pdGlhbCA3LWJpdCBwYWNrZXRzIGZyb20gdGhlIHB0eSwK LWl0IGxvb2tzIGxpa2UgdGhlIFBUWSBpcyBub3QgaW4gcmF3bW9kZSwgYmVjYXVzZSB0aGVzZSBw YWNrZXRzIGVuZCB3aXRoIF5KCi1yYXRoZXIgdGhhbiBeTS4gIENhbGxpbmcgcHR5X21ha2VfcmF3 KCkgb24gdGhlIG1hc3RlcmZkIGFuZCBzbGF2ZWZkCi1leHBsaWNpdGx5LCBob3dldmVyLCBkb2Vz bid0IGNoYW5nZSBhbnl0aGluZy4gIEl0IGRvZXNuJ3QgbWF0dGVyIGlmIEkgZG8KLXRoaXMgaW4g dGhlIGxvd2VyIGZvcmsgb3IgdGhlIHVwcGVyIGZvcmsuICBTbyBtYXliZSBpdCdzIHRoZSBhY3R1 YWwKLXNlbWFudGljcyBvZiBwdHlfbWFrZV9yYXcoKSB0aGF0IGFyZSB3cm9uZy4KLQotVGh1IDE1 IE1hciAyMDA3OiBXZW50IHRocnUgYWxsIHRoZSB0ZXJtaW5hbCBtb2RlIGZsYWdzIGluIE1hYyBP UyBYOyBkaWRuJ3QKLWhlbHAuICBDaGFuZ2VkIGhleCBkdW1wIHRvIHNob3cgd2hvbGUgcGFja2V0 LiAgUHV0IGhleCBkdW1wIHJvdXRpbmUgaW4gYQotcHJpdmF0ZSBjb3B5IG9mIEctS2VybWl0LiAg VHJpZWQgdG8gdHJhbnNmZXIgYW4gOC1iaXQgZmlsZSwgbG9nZ2luZyBib3RoCi10dHB0eSBhbmQg Z2tlcm1pdC4gIENvbXBhcmVkIHdoYXQgdHRwdHkgcmVjZWl2ZWQgb24gc3RkaW4gd2l0aCB3aGF0 IGl0IHNlbnQKLXRvIHRoZSBwdHkgKHNhbWUpIGFuZCB3aGF0IHdhcyByZWNlaXZlZCBieSBHLUtl cm1pdCAoc2FtZSkuICBUaGVuIEkgcmVhbGl6ZWQKLXRoYXQgbXkgbGl0dGxlIHRlc3QgcHJvZ3Jh bSB3YXMgbm90IHB1dHRpbmcgaXRzIGNvbnRyb2xsaW5nIHRlcm1pbmFsIGludG8KLXJhdyBtb2Rl OyB3aGVuIEkgZGlkIHRoYXQsIEkgY291bGQgdXBsb2FkIGJpbmFyeSBmaWxlcyAoc3RyZWFtaW5n LCAyTUIvc2VjKS4KLUFuZCB3aXRoIFptb2RlbSB0b28gKHdpdGggcno7IGxyeiBkb2Vzbid0IHdv cmsgZm9yIHNvbWUgcmVhc29uKS4gIExvb2tpbmcKLWJhY2sgYXQgdGhlIG9yaWdpbmFsIGluIGNr dXRpby5jLCBJIHNlZSB0aGF0IHR0cHR5Y21kKCkgbmV2ZXIgY2FsbGVkCi10dHBrdCgpLiAgTWF5 YmUgdGhhdCB3YXMgdGhlIHRyb3VibGUgYWxsIGFsb25nLiAgKFl1cCwgYnV0IG1heWJlIG5vdCB0 aGUKLXdob2xlIHRyb3VibGUuKQotCi1Nb3ZpbmcgYmFjayB0byBDLUtlcm1pdCBhbmQgdGhlIG9y aWdpbmFsIHR0cHR5Y21kKCkgcm91dGluZSwgYWRkaW5nIHRoZSBjYWxsCi10byB0dHBrdCgpLCBh bmQgc3RyaXBwaW5nIG91dCBhIGxvdCBvZiBjcnVmdCwgYW5kIG1vdmluZyB0aGUgcHR5X21ha2Vf cmF3KCkKLWNvZGUgdG8gY2t1cHR5LmMsIEtlcm1pdCB1cGxvYWRzIGFuZCBkb3dubG9hZHMgKHN0 cmVhbWluZykgd29yayBmaW5lIGluCi1Tb2xhcmlzLiAgWm1vZGVtIHNlbmRzIGEgZmlsZSwgYnV0 IHRoZW4gdGhlIHRyYW5zZmVyIGhhbmdzIGF0IHRoZSB2ZXJ5IGVuZCwKLWFzIGlmIHRoZSBzaWdu b2ZmIHByb3RvY29sIHdlcmUgbG9zdC4gIFRoaXMgaGFwcGVucyBvbiBTb2xhcmlzLiAgSWYgSSBt b3ZlCi1iYWNrIHRvIE1hYyBPUyBYLCBldmVyeXRoaW5nIHdvcmtzIGp1c3QgZmluZS4gIFRoZW4s IG1ha2luZyBhIEtlcmJlcml6ZWQKLWNvbm5lY3Rpb24gZnJvbSB0aGUgTWFjIHRvIE5ldEJTRCwg SSBjYW4gc2VuZCBmaWxlcyBmcm9tIHRoZSBNYWMgd2l0aCBib3RoCi1abW9kZW0gYW5kIEtlcm1p dC4gIFJlY2VpdmluZy4uLiAgS2VybWl0IE9LLiAgWm1vZGVtLi4uICBOb3BlLiAgInJ6OgotUGVy c2lzdGVudCBDUkMgb3Igb3RoZXIgRVJST1IiIChhbmQgY3JlYXRlZCBhIDI2NU1CIGRlYnVnLmxv ZyEpCi0KLUZyaSAxNiBNYXIgMjAwNzogdHRwdHljbWQoKSB3YXMgZm9yIHNlbmRpbmcgZmlsZXMg d2l0aCBabW9kZW0gYWNyb3NzCi1lbmNyeXB0ZWQgY29ubmVjdGlvbnMuICBCdXQgaXQgb2NjdXJy ZWQgdG8gbWUgdGhhdCBpdCdzIG5lY2Vzc2FyeSBmb3IKLWNsZWFyLXRleHQgY29ubmVjdGlvbnMg dG9vOyBlLmcuIFRlbG5ldCwgd2hlcmUgMHhmZiBoYXMgdG8gYmUgZG91YmxlZC4gIE9mCi1jb3Vy c2UgWm1vZGVtIGRvZXNuJ3QgZG8gdGhhdCBpdHNlbGYsIHNvIHRoZXJlJ3Mgbm8gd2F5IFptb2Rl bSBleHRlcm5hbAotcHJvdG9jb2wgY291bGQgd29yayB3aGVuIGV4ZWN1dGVkIG92ZXIgYSBUZWxu ZXQgY29ubmVjdGlvbiwgYW5kIGluIGZhY3QKLWl0IGRvZXNuJ3QuICBJIHdvbmRlciB3aHkgSSBl dmVyIHRob3VnaHQgaXQgZGlkLgotCi1XZWQgMjEgTWFyIDIwMDc6IEJhY2sgdG8gd2hlcmUgd2Ug bGVmdCBvZmYgYSB3ZWVrIGFnby4gIFRyeWluZyBDLUtlcm1pdCdzCi10dHB0eWNtZCgpIG9uIHRo ZSBNYWMgYWdhaW4sIGluIHJlbW90ZSBtb2RlOgotCi0gLiBHLUtlcm1pdCBzZW5kIHR4dCAoa3N0 KTogT0sgIDgzMktjcHMgIAotIC4gRy1LZXJtaXQgcmVjdiB0eHQgKGtyKTogIE9LICA0MjVLY3Bz ICAKLSAuIEctS2VybWl0IHNlbmQgYmluIChrc2IpOiBPSyAxMDAwS2NwcyAgCi0gLiBHLUtlcm1p dCByZWN2IGJpbiAoa3IpOiAgT0sgIDE4OEtjcHMgIAotCi1BbmQgWm1vZGVtOgotCi0gLiBzeiB0 eHQgKHpzdCk6IE9LICA1NjNLY3BzICAKLSAuIHN6IGJpbiAoenNiKTogT0sgIDcxNEtjcHMgIAot IC4gcnogdHh0ICh6cik6ICBPSyAgODYzS2NwcyAgCi0gLiByeiBiaW4gKHpyKTogIE9LICAxOThL Y3BzICAKLQotU28gaW4gcmVtb3RlIG1vZGUsIGV2ZXJ5dGhpbmcgd29ya3MuICBOb3cgbGV0J3Mg dHJ5IGEgY2xlYXItdGV4dCBUZWxuZXQKLWNvbm5lY3Rpb24uLi4KLQotIC4gRy1LZXJtaXQgc2Vu ZCB0eHQgKGtzdCk6IE9LICA4NDFLY3BzCi0gLiBHLUtlcm1pdCByZWN2IHR4dCAoa3J0KTogT0sg IDM5MUtjcHMKLSAuIEctS2VybWl0IHNlbmQgYmluIChrc2IpOiBPSyAgODExS2NwcwotIC4gRy1L ZXJtaXQgcmVjdiBiaW4gKGtyYik6IE9LICAxNzFLY3BzCi0KLUFuZCBabW9kZW0gb3ZlciB0aGUg c2FtZSBjbGVhci10ZXh0IHRlbG5ldCBjb25uZWN0aW9uOgotCi0gLiBzeiB0eHQgKHpzdCk6IE9L ICA5MUtjcHMgKCopCi0KLUtlcm1pdCBpcyBzZW5kaW5nIHN6IG1lc3NhZ2VzIGxpa2UgInN6IDMu NzMgMS0zMC0wMyBmaW5pc2hlZC4iIHRvIHRoZQotaG9zdCwgd2hpY2ggdHJpZXMgdG8gZXhlY3V0 ZSB0aGVtLCBhZnRlciB0aGUgdHJhbnNmZXIgaXMgZmluaXNoZWQuCi1PZiBjb3Vyc2UgInN6IiBp cyBhIGNvbW1hbmQsIGJ1dDoKLQotICBzejogY2Fubm90IG9wZW4gMy43MzogTm8gc3VjaCBmaWxl IG9yIGRpcmVjdG9yeQotICBzejogY2Fubm90IG9wZW4gMS0zMC0wMzogTm8gc3VjaCBmaWxlIG9y IGRpcmVjdG9yeQotICBzejogY2Fubm90IG9wZW4gZmluaXNoZWQuOiBObyBzdWNoIGZpbGUgb3Ig ZGlyZWN0b3J5Ci0KLURpZCBJIGxvc2UgdGhhdCBjb2RlIHRoYXQgZGlzLXJlZGlyZWN0cyBzdGRl cnIgd2hlbiBJIHdlbnQgYmFjayB0byB1c2luZyB0aGUKLXB0eSBjb2RlIGZyb20gdGhlIGNrdXB0 eSBtb2R1bGU/ICBObywgaXQncyB0aGVyZSBhbmQgaXQncyBiZWluZyBleGVjdXRlZC4KLUFwcGFy ZW50bHkgdGhlIGNvcHkgb2Ygc3ogSSBoYXZlIGlzIHdyaXRpbmcgaXRzICJmaW5pc2hlZCIgbWVz c2FnZSB0byBzdGRvdXQKLWJlY2F1c2UgInN6IGJsYWggMj4gL2Rldi9udWxsIiBkb2VzIG5vdCBz dXBwcmVzcyBpdC4gIFN0YXJ0aW5nIGFnYWluIHdpdGgKLWxzeiBpbnN0ZWFkIG9mIHN6OgotCi0g LiBzeiB0eHQgKGx6c3QpOiBPSyAgNDEzS2NwcwotIC4gc3ogYmluIChsenNiKTogT0sgIEZBSUxF RCAoKikKLSAuIHJ6IHR4dCAobHpydCk6IE9LICAKLSAuIHJ6IGJpbiAobHpyYik6IE9LCi0KLSgq KSBTaWdoLiAgVXNpbmcgbHN6LCB3ZSBnZXQgImdhcmJhZ2UgY291bnQgZXhjZWVkZWQiIGVycm9y cyBhbmQgZXZlbnR1YWwKLWZhaWx1cmUuICBCdXQgdXNpbmcgcmVndWxhciBzeiwgd2UgZ2V0IHRo ZSBleHRyYW5lb3VzIG1lc3NhZ2UgdGhhdCBzdGFydHMKLXN6IG9uIHRoZSBmYXIgdGVuZCwgYW5k IHRoZSByZXN1bHRpbmcgZ2V0dHkgYmFiYmxlLgotCi1CdXQgZXZlbiB3aXRob3V0IGNoYW5naW5n IHRoZSBjb2RlLCBpdCB3aWxsIHdvcmsgb25lIG1pbnV0ZSwgYW5kIHRoZW4gZmFpbAotY29uc2lz dGVudGx5IHRoZSBuZXh0LiAgRm9yIGV4YW1wbGUsIEkgd2FzIGFibGUgdG8gc2VuZCBmaWxlcyB3 aXRoIHN6Ci1zdWNjZXNzZnVsbHkgb3ZlciBhbmQgb3ZlciwgYnV0IHdpdGggdGhlIGdldHR5IGJh YmJsZSBhdCB0aGUgZW5kLiAgVGhlbiwKLWFmdGVyIHRyeWluZyBsc3ogYW5kIHRoZW4gZ29pbmcg YmFjayB0byBzeiwgZXZlcnkgYXR0ZW1wdCBhdCBzZW5kaW5nIGEgZmlsZQotcXVpdHMgd2l0aCAi R290IFpDQU4iLiAgVGhlIGRpZmZlcmVuY2UgaGFzIHRvIGJlIHRoYXQgS2VybWl0IGFsd2F5cyBk b2VzIGF0Ci1sZWFzdCBzb21lIG1pbmltYWwgZW5jb2Rpbmcgb2YgQzAvQzEgY29udHJvbCBjaGFy YWN0ZXJzIHN1Y2ggTlVMIGFuZCBERUwgYW5kCi1JQUMsIGFuZCBJIGRvdWJ0IHRoYXQgWm1vZGVt IGRvZXMuCi0KLWh0dHA6Ly96c3NoLnNvdXJjZWZvcmdlLm5ldC8gc2F5czoKLQotICBJZiBmaWxl IHRyYW5zZmVyIGlzIGluaXRpYXRlZCBidXQgbmV2ZXIgY29tcGxldGVzIChpZSBhIGxpbmUgbGlr ZSA6Ci0KLSAgICAgQnl0ZXMgU2VudDogICAgICAwLyAgICA1MTMgICBCUFM6MCAgICAgICAgRVRB IDAwOjAwICBSZXRyeSAwOiBHb3QgWkNBTgotCi0gICBjYW4gYmUgc2VlbiwgYnV0IHRyYW5zZmVy IG5ldmVyIGNvbXBsZXRlcyksIGNoYW5jZXMgYXJlIHRoZSBwdHkvdHR5IG9uIG9uZQotICAgb2Yg dGhlIHN5c3RlbXMgYXJlIG5vdCA4LWJpdCBjbGVhbi4gIChMaW51eCBpcyA4LWJpdCBjbGVhbiwg TmV0QlNEIGlzIG5vdCkuCi0gICBVc2luZyB0aGUgLWUgKGVzY2FwZSkgb3B0aW9uIG9mIHJ6IHNo b3VsZCBzb2x2ZSB0aGlzIHByb2JsZW0uCi0KLUl0IGRvZXNuJ3QsIGF0IGxlYXN0IG5vdCB3aXRo IGxyei4gIEFuZCB5ZXMsIHRoZSByZWNlaXZpbmcgZW5kIGhhcHBlbnMgdG8gYmUKLU5ldEJTRC4g IEJ1dCBpdCBsb29rcyBsaWtlIHRoZSB6c3NoIHBlb3BsZSBoYXZlIGJlZW4gZG93biB0aGlzIHJv YWQgdG9vLgotCi1CdXQgd2l0aCByeiBhbmQgc3osIGl0IHdvcmtlZC4gIE9uY2UuICBUd2ljZS4g IFRocmVlIHRpbWVzLiAgQnV0IG9mIGNvdXJzZSwKLXdpdGggdGhlIGdldHR5IGJhYmJsZSBhdCB0 aGUgZW5kLiAgVGhpcyBjYW4gYmUgdGFrZW4gY2FyZSBvZiBieSBkb2luZzoKLQotICByeiAtZXEg OyBjYXQgPiBmb28KLQotd2hpY2ggcHV0cyAic3ogMy43MyAxLTMwLTAzIGZpbmlzaGVkIiBhbmQg YW55IG90aGVyIG1lc3NhZ2VzIGluIGZvbyAoYnV0IHlvdQotaGF2ZSB0byB0eXBlIF5EIHRvIGZp bmlzaCB0aGUgY2F0KS4gIFVzaW5nIHRoaXMgbWV0aG9kIEkgd2FzIGFsc28gYWJsZSB0bwotc2Vu ZCBhbiA4SyBiaW5hcnkgZmlsZSB0aGF0IGNvbnRhaW5lZCBhIHRlc3QgcGF0dGVybiBvZiBhbGwg MjU2IHBvc3NpYmxlIGJ5dGUKLXZhbHVlcy4gIFRoZW4gSSB0cmllZCBhIDNNQiBiaW5hcnkgZXhl Y3V0YWJsZS4gIEFsbCBPSy4gIFNvIGhlcmUgd2UgZ28gYWdhaW46Ci0KLSAuIHN6IHR4dCAoenN0 KTogT0sKLSAuIHN6IGJpbiAoenNiKTogT0sKLSAuIHJ6IHR4dCAoenJ0KTogCi0gLiByeiBiaW4g KHpyYik6IAotCi1Eb3dubG9hZGluZyBmYWlscyBhYm91dCBoYWxmd2F5IHRocm91Z2ggYSBmYWly bHkgbGFyZ2UgZmlsZS4gIEkgdHJpZWQgYW4KLWV2ZW4gYmlnZ2VyIGZpbGUsIGd1YXJhbnRlZWQg dG8gYmUgMTAwJSBBU0NJSTsgc2FtZSB0aGluZyAtLSBoYWxmd2F5Ci10aHJvdWdoOiAicno6IFBl cnNpc3RlbnQgQ1JDIG9yIG90aGVyIEVSUk9SIi4gIEJ1dCBpdCB3b3JrZWQgd2l0aCBhIHNtYWxs ZXIKLXZlcnNpb24gb2YgdGhlIHNhbWUgZmlsZSAoODJLIHZlcnN1cyAyTUIpLiAgVHJpZWQgYWdh aW4gd2l0aCB0aGUgYmlnZ2VyCi12ZXJzaW9uLCBpdCBmYWlsZWQgaW4gZXhhY3RseSB0aGUgc2Ft ZSB3YXkgYXQgZXhhY3RseSB0aGUgc2FtZSBzcG90OiBieXRlCi1udW1iZXIgMTA0ODMyMC4gIEJ1 dCB0aGlzIGlzIGp1c3QgQVNDSUkgdGV4dCBzbyBpdCBjYW4ndCBiZSBhIHRyYW5zcGFyZW5jeQot cHJvYmxlbS4gIFN1YnN0aXR1dGluZyBhbm90aGVyIHBsYWluIEFTQ0lJIGZpbGUgb2YgdGhlIHNh bWUgc2l6ZSBidXQgdG90YWxseQotZGlmZmVyZW50IGNvbnRlbnRzLCBpdCBkb2Vzbid0IGZhaWwg KDIuMzZNQikuICBCYWNrIHRvIHRoZSBwcmV2aW91cyBmaWxlLCBpdAotZmFpbHMgYWdhaW4sIGJ1 dCBpbiBhIGRpZmZlcmVudCBzcG90ICg4MzI5NjApLiAgU28gaXQncyBub3QgdG90YWxseQotZGV0 ZXJtaW5pc3RpYy4KLQotVG8gcm91bmQgdGhpbmdzIG91dCwgSSB0cmllZCBkb3dubG9hZGluZyB0 aGUgYmluYXJ5IHRlc3QtcGF0dGVybiBmaWxlOyBpdCdzCi1vbmx5IDhLLiAgVGhpcyBmYWlsZWQu Ci0KLSAgLTQsIC0tdHJ5LTRrICAgICAgICAgICAgICAgIGdvIHVwIHRvIDRLIGJsb2Nrc2l6ZQot ICAtQiwgLS1idWZzaXplIE4gICAgICAgICAgICAgYnVmZmVyIE4gYnl0ZXMgKE49PWF1dG86IGJ1 ZmZlciB3aG9sZSBmaWxlKQotICAtZSwgLS1lc2NhcGUgICAgICAgICAgICAgICAgZXNjYXBlIGFs bCBjb250cm9sIGNoYXJhY3RlcnMgKFopCi0gIC1FLCAtLXJlbmFtZSAgICAgICAgICAgICAgICBm b3JjZSByZWNlaXZlciB0byByZW5hbWUgZmlsZXMgaXQgYWxyZWFkeSBoYXMKLSAgLUwsIC0tcGFj a2V0bGVuIE4gICAgICAgICAgIGxpbWl0IHN1YnBhY2tldCBsZW5ndGggdG8gTiBieXRlcyAoWikK LSAgLWwsIC0tZnJhbWVsZW4gTiAgICAgICAgICAgIGxpbWl0IGZyYW1lIGxlbmd0aCB0byBOIGJ5 dGVzIChsPj1MKSAoWikKLQotVHJpZWQgYWdhaW4gd2l0aCAic3ogLUwgMjU2IC1CIDI1NiAtNGFl cSIuICBEb2Vzbid0IGNoYW5nZSBhbnl0aGluZy4KLQotTk9URTogTWFjIE9TIFggcnogMy43MyAx LTMwLTAzIGRvZXMgbm90IHN1cHBvcnQgLWUuCi1OZXRCU0QgcnogMC4xMi4yMCBkb2VzIHN1cHBv cnQgLWUuCi0KLVRodSAyMiBNYXIgMjAwNzogSXQgb2NjdXJzIHRvIG1lIHRoYXQgdHRwa3QoKSBt aWdodCBzdGlsbCBiZSBhIHByb2JsZW07Ci1tYXliZSBpdCdzIHRoZSBuZXR3b3JrIGNvbm5lY3Rp b24gYW5kIG5vdCB0aGUgcHR5IHRoYXQgaXMgbm90IHRyYW5zcGFyZW50Ci1lbm91Z2guICBUbyB0 ZXN0IHRoaXMgdGhlb3J5IEkgZGlkICJzdHR5IHJhdyA7IHN0dHkgLWEiIGFuZCB0aGVuIGNvcGll ZCBhbGwKLW9mIHRoZSBmbGFnIHZhbHVlcyBpbnRvIHR0cGt0IGluIHRoZSBCU0Q0NE9SUE9TSVgg c2VjdGlvbjoKLQotIC4gcnogdHh0ICh6cnQpOiBPSyAoMi4zNk1CIGZpbGUsIHdvcmtlZCAyIG91 dCBvZiAzIHRpbWVzKQotIC4gcnogYmluICh6cmIpOiAicno6IFBlcnNpc3RlbnQgQ1JDIG9yIG90 aGVyIEVSUk9SIgotCi1BIGxpdHRsZSBtb3JlIGZpZGRsaW5nIHdpdGggdGhlIGZsYWdzIGFuZCBJ IGdvdCB0aGUgOEsgYmluYXJ5IHRlc3QgcGF0dGVybgotdG8gU0VFTSB0byBkb3dubG9hZCBPSyAo aW4gdGhlIHNlbnNlIHRoYXQgcnogZ2F2ZSBhIDAgcmV0dXJuIGNvZGUpIGJ1dCB0aGUKLWZpbGUg aXRzZWxmIHdhcyB0cnVuY2F0ZWQsIGFsd2F5cyBhdCAyMjQuICBJZiBJIGNoYW5nZWQgdGhlIHRl c3QgcGF0dGVybgotZmlsZSB0byBub3QgaW5jbHVkZSBhbnkgYnl0ZXMgd2l0aCB2YWx1ZSAyMjQg KDB4ZTApIG9yIDI1NSAoMHhmZiksIHRoZQotZG93bmxvYWQgd29ya2VkLiAgU28gd2UgaGF2ZSBh IHRyYW5zcGFyZW5jeSBwcm9ibGVtIHNvbWV3aGVyZS4gIFRoZSBkZWJ1ZwotbG9nIHNob3dzIHRo YXQgYWxsIGJ5dGUgdmFsdWVzIGFyZSBiZWluZyByZWNlaXZlZCBmcm9tIHRoZSBuZXR3b3JrIGNv cnJlY3RseQotc28gdGhlIHByb2JsZW0gaGFzIHRvIG9jY3VyIHdoZW4gd2UgdHJ5IHRvIGZlZWQg dGhlbSB0byB0aGUgcHR5LgotCi1CdXQgbm8gYW1vdW50IG9mIHR3aWRkbGluZyB3aXRoIHRoZSB0 ZXJtaW9zIGZsYWdzIHNlZW1zIHRvIGxldCB0aGVzZQotY2hhcmFjdGVycyBwYXNzIHRocm91Z2gu ICBPZiBjb3Vyc2UsIHNpbmNlIHRoZXkgYXJlIG5vdCBpbiB0aGUgQzAgb3IgQzEKLWNvbnRyb2wg cmFuZ2UsICJzeiAtZSIgZG9lc24ndCBxdW90ZSB0aGVtICh3aGljaCBpdCBkb2VzIGJ5IHByZWZp eGluZyB3aXRoCi1DdHJsLVggYW5kIHRoZW4gYWRkaW5nIDB4NDAgdG8gdGhlIGJ5dGUgdmFsdWUg c28gKGUuZy4pIE5VTCBiZWNvbWVzIF5YQC4KLU5vdGUgdGhhdCAyNTUgZG9lcyBub3QgY2F1c2Ug cHJvYmxlbXMgYmVjYXVzZSBpdCBjb2luY2lkZXMgd2l0aCB0aGUgSUFDCi1jaGFyYWN0ZXI7IHRo ZSByZW1vdGUgVGVsbmV0IHNlcnZlciBkb3VibGVzIG91dGJvdW5kIElBQ3MsIGFuZCBLZXJtaXQn cwotdHRpbmMoKSB1bmRvdWJsZXMgdGhlbSBhdXRvbWF0aWNhbGx5IChhcyB0aGUgbG9nIHNob3dz KS4KLQotVHJ5aW5nIHRvIHNlbmQgYSBkaWZmZXJlbnQgZmlsZSAoYSBDLUtlcm1pdCBiaW5hcnkp IHNob3dzIHRoYXQgMjU1IGlzIHRoZQotcmVhbCBraWxsZXI7IHRoZSBmaWxlIGlzIHRydW5jYXRl ZCB3aGVyZSB0aGUgZmlyc3Qgb25lIGFwcGVhcnMgKGF0IGFib3V0Ci02SyksIGV2ZW4gdGhvdWdo IHNvbWUgMjI0J3MgcHJlY2VkZSBpdC4gIEdvaW5nIGJhY2sgdG8gdGhlIHJlbW90ZS1tb2RlIHRl c3QsCi1JIHNlZSB0aGUgc2FtZSB0aGluZyBoYXBwZW5zIHdpdGggdGhlIGJpbmFyeSB0ZXN0LXBh dHRlcm4gZmlsZSwgaWYgSSBzZW5kIGl0Ci1mcm9tIEs5NSBkaXJlY3QgdG8gcnotdW5kZXItQy1L ZXJtaXQtaW4tcmVtb3RlLW1vZGUuICBTbyBpdCBoYXMgbm90aGluZyB0bwotZG8gd2l0aCBDLUtl cm1pdCBoYXZpbmcgYSBuZXR3b3JrIGNvbm5lY3Rpb24uICBZZXQgaWYgSSBzZW5kIHRoZSBzYW1l IGZpbGUKLWRpcmVjdCBmcm9tIEs5NSB0byByeiwgaXQgZ29lcyBPSyBhbmQgdGhlIHJlc3VsdCBp cyBub3QgdHJ1bmNhdGVkLCBzbyBpdCdzCi1ub3QgWm1vZGVtIGVpdGhlci4gIFRoZSBkYXRhIGFy cml2ZXMgdG8gQy1LZXJtaXQgaW50YWN0LCBzbyB0aGUgZmFpbHVyZSBpcwotZGVmaW5pdGVseSBp biB3cml0aW5nIGl0IHRvIHRoZSByeiBwcm9jZXNzIHRocm91Z2ggdGhlIHNsYXZlIGFuZCBtYXN0 ZXIgcHR5cy4KLQotQlVUIGlmIEkgc2VuZCB0aGUgc2FtZSBmaWxlIGZyb20gSzk1IHRvIHJ6LXVu ZGVyLXR0cHR5LCB0aGF0IHdvcmtzLiAgV2hhdCdzCi10aGUgZGlmZmVyZW5jZT8gIFN1cHBvc2Ug SSBqdXN0IHRyYW5zcGxhbnQgdHRwdHkgbGl0ZXJhbGx5IGludG8gQy1LZXJtaXQuLi4KLUl0IG1h a2VzIG5vIGRpZmZlcmVuY2UuICBXaGVuIHJlY2VpdmluZyB0aGUgdGVzdC1wYXR0ZXJuLCBpdCB0 cnVuY2F0ZXMgaXQKLWluIGV4YWN0bHkgdGhlIHNhbWUgcGxhY2UuCi0KLVdlbGwsIGFsbCB0aGlz IGlzIG9uIE1hYyBPUyBYLiAgV2hhdCBpZiBJIG1vdmUgaXQgdG8gYSBkaWZmZXJlbnQgcGxhdGZv cm0/Ci1PSywgYnVpbGRpbmcgb24gU29sYXJpcyBhbmQgZm9sbG93aW5nIHRoZSBleGFjdCBzYW1l IHByb2NlZHVyZSwgdHRwdHljbWQoKQotZG9lc24ndCBldmVuIHVzZSB0aGUgbmV0d29yayBjb25u ZWN0aW9uLiAgSSB0aGluayB0aGF0J3MgYmVjYXVzZSByenN6IG9uCi1Tb2xhcmlzIGlzIGhhcmR3 aXJlZCB0byB1c2UgdGhlIGNvbnRyb2xsaW5nIHRlcm1pbmFsIGFuZCBjYW4ndCBiZQotcmVkaXJl Y3RlZCwgZXZlbiBpbiBhIHB0eT8KLQotTW92ZWQgdG8gTmV0QlNELgotCi0gLiBzeiB0eHQgKHpz dCk6IEZhaWxlZCAoIkdvdCBaQ0FOIikKLSAuIHN6IGJpbiAoenNiKTogCi0gLiByeiB0eHQgKHpy dCk6IE9LCi0gLiByeiBiaW4gKHpyYik6IAotCi1XZWxsLCB0aGlzIGlzIGEgYmlnIG1lc3MuICBT ZW5kaW5nIGRvZXNuJ3Qgd29yayAob3Igc29tZXRpbWVzIGl0IGRvZXMgYnV0Ci1yZXBvcnRzIHRo YXQgaXQgZGlkbid0KS4gIFJlY2VpdmluZy4uLiAgd2VsbCwgYWN0dWFsbHkgaXQncyB0aGUgc2Ft ZSB0aGluZzsKLXRoZSBmaWxlIGlzIGNvbXBsZXRlbHkgdHJhbnNmZXJyZWQgYnV0IHRoZW4gdGhl IGZpbmFsIHByb3RvY29sIGhhbmRzaGFrZSBpcwotbG9zdC4gIFRoZSBsb2NhbCBDLUtlcm1pdCBy ZXR1cm5zIHRvIGl0cyBwcm9tcHQsIGJ1dCByeiBpcyBzdGlsbCBydW5uaW5nOgotCi0gIFJldHJ5 IDA6IEdvdCBUSU1FT1VUCi0gIFJldHJ5IDA6IFRJTUVPVVQKLSAgUmV0cnkgMDogR290IFRJTUVP VVQKLSAgUmV0cnkgMDogVElNRU9VVAotICBSZXRyeSAwOiBHb3QgVElNRU9VVAotICBSZXRyeSAw OiBUSU1FT1VUCi0gIFJldHJ5IDA6IEdvdCBUSU1FT1VUCi0gIFJldHJ5IDA6IFRJTUVPVVQKLSAg UmV0cnkgMDogR290IFRJTUVPVVQKLSAgUmV0cnkgMDogVElNRU9VVAotICBSZXRyeSAwOiBHb3Qg VElNRU9VVAotCi1JIGRvbid0IHNlZSBob3cgdGhhdCBpcyBldmVuIHBvc3NpYmxlLiAgRXZlbiBh ZnRlciBJIGV4aXQgZnJvbSBLZXJtaXQgdGhlCi1tZXNzYWdlcyBrZWVwIGNvbWluZywgZXZlbiB0 aG91Z2ggcHMgZG9lc24ndCBzaG93IHRoZSByeiBwcm9jZXNzIGFueXdoZXJlLgotTG9va2luZyBh dCB0aGUgY29kZSwgSSBzZWUgYSBwbGFjZSB3aGVyZSBlbmRfcHR5KCkgd2FzIHN0aWxsIGNvbW1l bnRlZCBvdXQKLWZyb20gdGhlIHR0cHR5LmMgZXBpc29kZSwgSSB1bmNvbW1lbnRlZCBpdC4gIEJ1 dCBzdGlsbDoKLQotIC4gc3ogdHh0ICh6c3QpOiBGYWlscyAoIkdvdCBaQ0FOIikKLSAuIHN6IGJp biAoenNiKTogRmFpbHMgaW5zdGFudGx5IChidXQgd2l0aCBubyBkaWFnbm9zdGljKQotIC4gcnog dHh0ICh6cnQpOiBPSwotIC4gcnogYmluICh6cmIpOiBGYWlscyB3aXRoIHRvbnMgb2YgIkJhZCBD UkMiLCAiR2FyYmFnZSBDb3VudCBleGNlZWRlZCIKLQotQ29uY2x1c2lvbiBmb3IgdGhlIGRheTog SSB0aGluayB0aGlzIGlzIGhvcGVsZXNzLiAgRXZlbiBpZiBJIGNhbiBnZXQgaXQgdG8KLXdvcmsg c29tZXdoZXJlLCB0aGUgcmVzdWx0cyBkZXBlbmQgb24gdGhlIGV4YWN0IFptb2RlbSBzb2Z0d2Fy ZSwgaG93IGl0IHVzZXMKLXN0ZGluL291dCB2cyBzdGRlcnIgdmVyc3VzIGdldHRpbmcgaXRzIG93 biBub25yZWRpcmVjdGFibGUgZmlsZSBkZXNjcmlwdG9yLAotdmVyc3VzIHRoZSBabW9kZW0gdmVy c2lvbiBvbiB0aGUgb3RoZXIgZW5kIGFuZCB3aGljaCBvcHRpb25zIGFyZSBhdmFpbGFibGUKLW9u IGVhY2gsIHZlcnN1cyB0aGUgcHR5IGFuZCBzZWxlY3QoKSBxdWlya3Mgb24gZWFjaCBwbGF0Zm9y bSwgYW5kIG9uIGFuZCBvbi4KLUl0IHdpbGwgYmUgc28gaGFyZCB0byBleHBsYWluIGFuZCB0byBz ZXQgdXAgdGhhdCBub2JvZHkgd291bGQgZXZlciB1c2UgaXQuCi1JdCB3b3VsZCBiZSBiZXR0ZXIg dG8ganVzdCBpbXBsZW1lbnQgWm1vZGVtIGludGVybmFsbHkuCi0KLUZyaSAyMyBNYXIgMjAwNzog V2VudCBiYWNrIHRvIHRoZSBzbWFsbCB0ZXN0IHByb2dyYW0sIHR0cHR5LmMuICBUcmllZAotc2V0 dGluZyBib3RoIHRoZSBtYXN0ZXIgYW5kIHRoZSBzbGF2ZSBwdHkgdG8gcmF3bW9kZSwgZXZlbiB0 aG91Z2ggSSBoYXZlCi1uZXZlciBzZWVuIGFueSBvdGhlciBzb2Z0d2FyZSB0aGF0IGRpZCB0aGlz LiAgSSBoYWQgaXQgcmVjZWl2ZSB0aGUgYmluYXJ5Ci10ZXN0IHBhdHRlcm4gZmlsZTsgaXQgd29y a2VkLiAgSSBtYWRlIGEgYmlnZ2VyIHRlc3QtcGF0dGVybiBmaWxlLCAzTUIsCi1jb250YWluaW5n IHNpbmdsZSwgZG91YmxlLCBhbmQgdHJpcGxlIGNvcGllcyBvZiBlYWNoIGJ5dGUgaW4gYnl0ZSBv cmRlciBhbmQKLWluIHJhbmRvbSBvcmRlciwgdGhpcyBvbmUgd2FzIGFjY2VwdGVkIHRvby4KLQot U28gaXQgd291bGQgc2VlbSB0aGF0IHRoZSBja3VwdHkuYyBtb2R1bGUgaXMgc29tZXRoaW5nIHRv IGF2b2lkIGFmdGVyIGFsbC4KLUl0J3MgZnVsbCBvZiBzdHVmZiBJIGRvbid0IHVuZGVyc3RhbmQg YW5kIHByb2JhYmx5IHNob3VsZCBub3QgdW5kby4gIFNvCi1jaGFuZ2luZyBDLUtlcm1pdCdzIHR0 cHR5Y21kKCkgdG8gbWFuYWdlIGl0cyBvd24gcHR5IGFnYWluLCB1c2luZyBvcGVucHR5KCkKLSh3 aGljaCBpcyBub3QgcG9ydGFibGUpLCBJIGdvdCBpdCBhbGwgdG8gd29yayBpbiByZW1vdGUgbW9k ZTogS2VybWl0Ci10ZXh0L2JpbmFyeSB1cC9kb3duIGFuZCBabW9kZW0gdGV4dC9iaW5hcnkgdXAv ZG93bi4gIEJ1dCBpbiBsb2NhbCBtb2RlIG9uCi10aGUgY2xpZW50IHNpZGUgb2YgYSBUZWxuZXQg Y29ubmVjdGlvbi4uLgotCi0gIHpzdDogT0ssIGJ1dCB3ZSBzdGlsbCBnZXQgdGhlIGdldHR5IGJh YmJsZSBhdCB0aGUgZW5kIHRoYXQgc3RhcnRzIHN6LgotICB6c2I6IE9LLCBkaXR0by4gIFRoaXMg aXMgd2l0aCB0aGUgM01CIHRlc3QtcGF0dGVybiBmaWxlLgotICB6cnQ6IE5vdCBPSyAtLSAiUGVy c2lzdGVudCBDUkMgb3Igb3RoZXIgRVJST1IiCi0gIHpyYjogTm90IE9LIC0tIGdvdCB0aGUgY3V0 b2ZmIGF0IDIyNCBhZ2FpbiAiUGVyc2lzdGVudCBDUkMgb3Igb3RoZXIgRVJST1IiCi0KLUl0J3Mg Y2xvc2UuICBCdXQgYWN0dWFsbHkgdGhpcyB3YXMgc3RpbGwgd2l0aCBVU0VfQ0tVUFRZX0MgZGVm aW5lZC4gIFdoZW4gSQotdW5kZWZpbmVkIGl0LCBpdCB3YXMgYmFjayB0byBiZWluZyB0b3RhbGx5 IGJyb2tlbi4gIFN0YXJ0IG92ZXIuICAoQ2hlY2sgdGhlCi1uZXcgY2ZtYWtlcmF3KCkgY29kZS4p Ci0KLVR1ZSAyNyBNYXIgMjAwNzogU3RhcnRpbmcgb3Zlci4gIEJhY2sgdG8gdHRwdHkuYy4gIExl dCdzIHZlcmlmeSwgVkVSWQotQ0FSRUZVTExZLCB0aGF0IGl0IHJlYWxseSBkb2VzIHdvcmssIHVz aW5nIHRoZSBtb3N0IHN0cmVzc2Z1bCBvZiB0aGUgZm91cgotdGVzdHM6IHNlbmRpbmcgdGhlIGJp ZyAoMy4yNzY4TUIpIGJpbmFyeSB0ZXN0IHBhdHRlcm4gZnJvbSBLOTUgaW50byByegotdGhyb3Vn aCB0dHB0eSwgbG9nZ2luZyBldmVyeXRoaW5nLiAgdHRwdHkgZGVmaW5pdGVseSByZWNlaXZlcyB0 aGUgYmlnIGZpbGUKLXNtb290aGx5IHdpdGggbm8gZXJyb3JzIG9yIGhpY2N1cHMgd2hlbiBJIGhh dmUgaXQgc2V0IHRvIHVzZSB0aGUgbWFzdGVyIHNpZGUKLW9mIHRoZSBwdHkgZm9yIGkvby4gIFRo ZSBhcHBsaWNhdGlvbiBwcm9ncmFtIChabW9kZW0gaW4gdGhpcyBjYXNlKSBydW5zIG9uCi10aGUg c2xhdmUsIGFuZCB0aGUgbmV0d29yayBhbmQvb3IgY29udHJvbCBwcm9ncmFtIGNvbW11bmljYXRl cyB3aXRoIHRoZQotbWFzdGVyLiAgVGhpcyBpbXBsaWVzIHRoYXQgWm1vZGVtIGNvbnRyb2xzIHRo ZSB0ZXJtaW5hbCBtb2RlcyBvZiB0aGUgc2xhdmUsCi1hbmQgdHRwdHkgc2hvdWxkIGJlIGNvbmNl cm5lZCB3aXRoIHRob3NlIG9mIHRoZSBtYXN0ZXIuICBEb2luZyBpdCB0aGlzIHdheQotaW4gdHRw dHkgY29uZmlybXMgdGhpcy4KLQotRmluZS4gIEJ1dCBpZiBJIHRlbGwgdHRwdHkgdG8gU0VORCBh IGZpbGUgd2l0aCBzeiwgbm90aGluZyBoYXBwZW5zLiAgRGl0dG8KLXdpdGggbHN6LiAgU2VsZWN0 IHRpbWVzIG91dCB3YWl0aW5nIGZvciBpbnB1dCBmcm9tIHRoZSBwdHkuICBCdXQgaWYgSQotbWFu dWFsbHkgdGVsbCBLOTUgdG8gUkVDRUlWRSAvUFJPVE9DT0w6Wk1PREVNIGl0IHdvcmtzIE9LLiAg U29tZWhvdyBzeidzCi1pbml0aWFsIEIwMDAwMDAgc3RyaW5nIGlzIGJlaW5nIHN3YWxsb3dlZCBz b21ld2hlcmUsIGFuZCBpdCdzIHdhaXRpbmcgZm9yCi1hIHJlcGx5IGZyb20gdGhlIHJlY2VpdmVy LiAgc2lnaC4uLiAgQnV0ICJ0dHB0eSBna2VybWl0IC1zIGZpbGVuYW1lIiB3b3JrcwotZmluZS4g IFdoYXQncyB0aGUgZGlmZmVyZW5jZT8gIEl0IGhhcyBub3RoaW5nIHRvIGRvIHdpdGggc3Rkb3V0 IHZzIHN0ZGVycjsKLXN6IGlzIG5vdCB3cml0aW5nIHRvIHN0ZGVyciBhdCBhbGwuICBJcyBpdCBz b21lIHRpbWluZyB0aGluZyBiZXR3ZWVuIHRoZQotZm9ya3M/ICBBaGEuICBJdCdzIHRoYXQgSSBj aGFuZ2UgdGhlIG1vZGVzIG9mIHRoZSBwdHkgbWFzdGVyIGluIG9uZSBmb3JrCi13aGlsZSBzeiBp cyBhbHJlYWR5IHN0YXJ0aW5nIGluIHRoZSBvdGhlciBmb3JrLgotCi1PSywgZ29vZCwgbm93IGZv ciB0aGUgZmlyc3QgdGltZSB3ZSBoYXZlIEtlcm1pdCBhbmQgWm1vZGVtIGJvdGggYWJsZSB0bwot dXBsb2FkIGFuZCBkb3dubG9hZCBhIGxhcmdlIHdvcnN0LWNhc2UgYmluYXJ5IHRlc3QtcGF0dGVy biBmaWxlLi4uIGluCi1yZW1vdGUgbW9kZS4gIE5vdyB0YWtpbmcgdG9kYXkncyBsZXNzb25zIGFu ZCBmaXR0aW5nIHRoZW0gYmFjayBpbnRvCi1DLUtlcm1pdCBzbyBJIGNhbiB0cnkgaXQgbG9jYWwg bW9kZS4uLgotCi1Vc2luZyBHLUtlcm1pdCBhcyB0aGUgZXh0ZXJuYWwgcHJvdG9jb2wsIGZpcnN0 IGluIHJlbW90ZSBtb2RlLi4uICBBbGwgZ29vZDoKLXRleHQvYmluYXJ5IHVwL2Rvd24uICBUaGUg ImhhbHRpbmcgcHJvYmxlbSIgaXMgc29sdmVkIGJ5IFNJR0NITEQsIHdoaWNoCi1jYXRjaGVzIGZv cmsgdGVybWluYXRpb24gaW5zdGFudGx5IGFuZCBsZXRzIHR0cHR5Y21kKCkga25vdyB0aGVyZSBp cyBubyBtb3JlCi1wdHkuICBabW9kZW06Ci0KLSAgenN0OiBPSwotICB6c2I6IE9LCi0gIHpydDog T0sKLSAgenJiOiBPSwotCi1UaGF0J3MgYSBmaXJzdC4gIE5leHQsIHJlcGVhdCBpbiBsb2NhbCBt b2RlLCBpbiB3aGljaCBDLUtlcm1pdCBpcyB0aGUgY2xpZW50Ci1hbmQgaGFzIG1hZGUgYSBUZWxu ZXQgY29ubmVjdGlvbiB0byBhbm90aGVyIGhvc3Qgb3ZlciBhIHNlY3VyZSAoS2VyYmVyb3MgVikK LWNvbm5lY3Rpb246Ci0KLSAga3N0OiBPSyAgICAgenN0OiAuLi4KLSAga3NiOiBPSwotICBrcnQ6 IE9LICAKLSAga3JiOiBPSwotICAKLUl0IHNlZW1zIHdlIGNhbiBuZXZlciBlbmQgYSBkYXkgb24g YSBoaWdoIG5vdGUuICBTb21laG93IEkgc2VlbSB0byBoYXZlCi1icm9rZW4gcmVndWxhciBpbnRl cm5hbCBLZXJtaXQgcHJvdG9jb2wgdHJhbnNmZXJzIG92ZXIgZW5jcnlwdGVkIGNvbm5lY3Rpb25z Ci0tLSB0aGUgZW4vZGVjcnlwdGlvbiBlbmdpbmUgbG9zZXMgc3luYy4gIEJ1dCB0aGV5IHN0aWxs IHdvcmsgT0sgb3ZlciBhCi1jbGVhci10ZXh0IFRlbG5ldCBjb25uZWN0aW9uLgotCi1Ub2RheSdz IGNvZGUgaW4gfi84MC9kdWxjZS50YXIgKDI3IE1hciAyMDA3KS4KLQotQWRkZWQgbWFrZWZpbGUg dGFyZ2V0IHNvbGFyaXMxMGcrb3BlbnNzbC4gIEdhdGhlcmVkIGFsbCB0aGUgc3RhbmRhcmQgQ0ZM QUdTCi1mb3IgU29sYXJpcyBpbnRvIGNkY2RlYi5oIHNvIHRoZXkgZG9uJ3QgaGF2ZSB0byBiZSBp bmNsdWRlZCBpbiBldmVyeSBzaW5nbGUKLW1ha2VmaWxlIHRhcmdldCBmb3IgU29sYXJpcy4gIE9u IGxvY2FsIFNvbGFyaXMgMTAgaG9zdCBPcGVuU1NMIGlzIGluCi0vb3B0L29wZW5zc2wtMC45Ljhl Ly4gIFRyaWVkIHRoZSBuZXcgbWFrZWZpbGUgdGFyZ2V0LCB3b3JrcyBPSy4gIEFsc28gbWFkZQot c29sYXJpczEwK29wZW5zc2wgZm9yIFN1biBDQywgYnV0IGNvdWxkbid0IHRlc3QgaXQgYmVjYXVz ZSBJIGNhbid0IGZpbmQgYW55Ci1Tb2xhcmlzIDEwIGhvc3QgdGhhdCBoYXMgU3VuIENDLiAgQnVp bHQgd2l0aCBnY2MgYXQgYW5vdGhlciBzaXRlIHRoYXQgaGFzCi1PcGVuU1NMIDAuOS44Zi1kZXYs IGFsbCBPSy4gIGNrY2RlYi5oLCBtYWtlZmlsZSwgMjQgSnVuIDIwMDcuCi0KLUl0IG9jY3VycyB0 byBtZSB0aGF0IEtlcm1pdCB0cmFuc2ZlcnMgb24gc2VjdXJlIGNvbm5lY3Rpb25zIG1pZ2h0IGhh dmUgYmVlbgotYnJva2VuIGJ5IHRoZSBjaGFuZ2VzIEkgbWFkZSBiYWNrIGluIEZlYnJ1YXJ5IHRv IHR0aW5sKCkgZm9yIEpvaG4gRHVubGFwLgotSGVyZSwgZm9yIHRoZSBmaXJzdCB0aW1lLCB3ZSBp bnZva2UgbXl1bnJkKCkgdG8gcHVzaCBhIGJ5dGUgYmFjayBpbnRvIHRoZQotaW5wdXQgcXVldWUs IGFuZCB0aGVyZSBpcyBhbHNvIHNvbWUgZnVubnkgYnVzaW5lc3Mgd2l0aCAiY3NhdmUiLCB3aGlj aAotY2hhbmdlZCwgYW5kIHdoaWNoIGFuIG9sZCBjb21tZW50IG5vdGVzIHRoYXQgaXQgaGFzIHRv IGJlIHRyZWF0ZWQgc3BlY2lhbGx5Ci13aGVuIGVuY3J5cHRpbmcuICBTbyBpdCBjb3VsZCBiZSB0 aGF0IHRoZSBicm9rZW4gS2VybWl0IHRyYW5zZmVyIGhhcyBub3RoaW5nCi10byBkbyB3aXRoIHRo ZSB3b3JrIG9uIGV4dGVybmFsIHByb3RvY29scywgYW5kIHRoYXQgcHV0dGluZyBiYWNrIHRoZQot cHJldmlvdXMgdHRpbmwoKSB3aWxsIGZpeCBpdC4gIEJ1dCBub3cgSSBjYW4ndCBzZWVtIHRvIG1h a2UgYSBLZXJiZXJpemVkCi1jb25uZWN0aW9uIGZyb20gUGFuaXggdG8gUGFuaXgsIGV2ZW4gdGhv dWdoIEkgY2FuIG1ha2Ugb25lIGZyb20gQ29sdW1iaWEgdG8KLVBhbml4LiAgVGhpcyBtZWFucyBJ IGhhdmUgdG8gYnVpbGQgYSBLZXJiZXJpemVkIGJpbmFyeSBmcm9tIHRoZSBjdXJyZW50Ci1zb3Vy Y2UgY29kZSBvbiBlaXRoZXIgU29sYXJpcyBvciBNYWMgT1MgWC4gIFRyeWluZyBTb2xhcmlzCi1m aXJzdC4uLiBbfi9zb2xhcmlzOWs1L21rNS5zaF0gVGhpcyBkaWRuJ3Qgd29yayB0aGUgZmlyc3Qg dGltZSBkdWUgdG8KLXVuZGVmaW5lZCBrcmI1X2luaXRfZXRzLCB3aGljaCBpcyByZWZlcmVuY2Vk IGlmIE1JVF9DVVJSRU5UIGlzIG5vdCBkZWZpbmVkCi0oaXQgc2hvdWxkIGJlIGZvciBLZXJiZXJv cyA1IDEuMDUgYW5kIGxhdGVyIGFuZCB3ZSBoYXZlIDEuNDIgaGVyZSksIHRyaWVkCi1hZ2FpbiB3 aXRoIC1ETUlUX0NVUlJFTlQ9MS4uLiAgTm9wZSwgdGhhdCBvbmUgdG90YWxseSBibGV3IHVwIGlu IGNrX2NycC5jLgotTGF0ZXIsIEplZmYgc2F5cyBrcmI1X2luaXRfZXRzIGlzIGEgbm8tb3AgaW4g S2VyYmVyb3MgMS40LnggYW5kIGxhdGVyLAotc28gSSBhZGRlZCBhbiAjaWZkZWYgKE5PX0tSQjVf SU5JVF9FVFMpIGZvciBza2lwcGluZyBpdDsgbm93IGl0IGJ1aWxkcyBhbmQKLXJ1bnMgT0suICBj a3VhdGguYywgbWFrZWZpbGUsIDkgSnVsIDIwMDcuCi0KLU1lYW53aGlsZSwgdXNpbmcgQy1LZXJt aXQgb24gTWFjIE9TIFgsIHdoaWNoIG1ha2VzIHRoZSBLZXJiZXJpemVkIGNvbm5lY3Rpb24KLWp1 c3QgZmluZSwgYnV0IHN0aWxsIGhhcyB0aGUgcHJvYmxlbSB0cmFuc2ZlcnJpbmcgZmlsZXMgb3Zl ciBpdC4gIFBhY2tldCBsb2cKLXNob3dzOgotCi0gIHMtMDAtMDEtXkE5IFN6LyBALSNZM35aISB6 MF9fX0YiVTFAQV5NIAotICByLTAwLTAxLV5BOSBZfi8gQC0jWTN+Xj5KKTBfX19KIlUxQEkKLSAg cy0wMS0wMS1eQSghRngueCkoVl5NCi0gIHIteHgtMDgtPHRpbWVvdXQ+Ci0gIFMtMDEtMDgtXkEo IUZ4LngpKFZeTQotICByLXh4LTA4LTx0aW1lb3V0PgotICBTLTAxLTA4LV5BKCFGeC54KShWXk0K LSAgci14eC0xNi08dGltZW91dD4KLQotTm90ZSB0aGF0IFMgcGFja2V0IGlzIHNlbnQsIHJlY2Vp dmVkLCBhbmQgQWNrJ2QgT0suICBUaGUgRiBwYWNrZXQgaXMgc2VudCBidXQKLWlzIG5ldmVyIEFj aydkLiAgVHJpZWQgdGhpcyBzZXZlcmFsIHRpbWVzIGFuZCBub3RpY2VkIHRoYXQgaXQncyBqdXN0 Ci1yZWNlaXZpbmcgdGhhdCBpcyBzY3Jld2VkIHVwLCBub3Qgc2VuZGluZy4gIEFmdGVyIF5DJ2lu ZyBvdXQgb2YgdGhlCi10cmFuc2ZlciwgSSBjYW4gc3RpbGwgdHlwZSBjb21tYW5kcywgYW5kIHRo ZXkgYXJlIGV4ZWN1dGVkIG9uIHRoZSBmYXIgZW5kLAotYnV0IHRoZSByZXN1bHRzIGNvbWluZyBi YWNrIGFyZSBnaWJiZXJpc2guICBNb24gSnVsIDkgMTY6MDg6MjIgMjAwNyAoY29tZQotYmFjayB0 byB0aGlzIGxhdGVyLi4uIHN1YnN0aXR1dGUgRGV2LjI3IHR0aW5sIGZvciBjdXJyZW50IG9uZSBh bmQgc2VlIGlmCi10aGUgcHJvYmxlbSBnb2VzIGF3YXksIGFuZCBpZiBzbywgY29uZGl0aW9uYWxp emUgdGhlIG5ldyBjb2RlIGZvciBjbGVhci10ZXh0Ci1jb25uZWN0aW9ucykuCi0KLUJ1aWx0IEMt S2VybWl0IHdpdGggS2VyYmVyb3MgNSBvbiBTb2xhcmlzIHdpdGggYSB2ZXJzaW9uIG9mIGNrdXRp by5jIHRoYXQKLXVzZXMgdGhlIG9sZCB0dGlubCgpIGFuZCB0cmFuc2ZlcnJlZCBhIGZpbGUgT0sg b3ZlciBhIEtlcmJlcml6ZWQgY29ubmVjdGlvbi4KLVNvIG5vdyBpdCdzIGp1c3QgYSBtYXR0ZXIg b2YgcmVjb25jaWxpbmcgdGhlIG9sZCBhbmQgbmV3IHR0aW5sLiAgVGhlIGVhc2llc3QKLXdheSB0 byBkbyB0aGlzIGlzIHRvIGhhdmUgbmV3IHR0aW5sKCkgY2hhaW4gdG8gb2xkIHR0aW5sKCkgaWYg dGhlIGNvbm5lY3Rpb24KLWlzIGVuY3J5cHRlZCwgd2hpY2ggaXMgd2hhdCBJIGRpZCBhbmQgaXQg d29ya3MgZmluZS4gIEF0IHNvbWUgcG9pbnQgdGhlIHR3bwotdmVyc2lvbnMgb2YgdHRpbmwoKSBz aG91bGQgYmUgcmVjb25jaWxlZC4gIGNrdXRpby5jLCAxMiBBdWcgMjAwNy4KLQotVGhlcmUgd2Fz IGEgZnVuY3Rpb24sIGlzbGluaygpLCB1c2VkIGluIG9ubHkgb25lIHBsYWNlIChja3V1czYuYykg dGhhdCBoYWQKLXRoZSBzYW1lIG5hbWUgYXMgYSBjb21tb25seSB1c2VkIHNjYWxhciB2YXJpYWJs ZSwgYW5kIGl0IHdhcyBtaXNzaW5nIGEKLXByb3RvdHlwZS4gIENoYW5nZWQgaXRzIG5hbWUgdG8g aXNhbGluaygpIGFuZCBhZGRlZCB0aGUgcHJvdG90eXBlIChVbml4Ci1vbmx5KSwgY2t1dXM2LmMs IGNrdWZpby5jLCBja2NkZWIuaC4gMTIgQXVnIDIwMDcuCi0KLVJldmlzaXRpbmcgdGhlIEFTQ0lJ IGFuZCBCSU5BUlkgdG9wLWxldmVsIGNvbW1hbmRzLCB3aGljaCBhcmUgc3VwcG9zZWQgdG8KLWJl IGxpa2UgaW4gb3RoZXIgRlRQIGNsaWVudHMsIGJ1dCBkb24ndCBzZWVtIHRvIGhhdmUgYW55IGVm ZmVjdC4gIEkgYWRkZWQgYQotbmV3IHJvdXRpbmUgdG8gdGhlIEZUUCBtb2R1bGUsIGRvZnRwZ2xv YmFsdHlwZSgpLCB0aGF0IHNldHMgdGhlIGdsb2JhbCwKLXN0aWNreSwgcGVybWFuZW50IHRyYW5z ZmVyIG1vZGUgKEFTQ0lJIG9yIEJJTkFSWSkgKFRFTkVYIGNvdWxkIGJlIGFkZGVkIHRvCi1pZiBh bnlib2R5IGFza3MpLiAgVGhlc2UgY29tbWFuZHMgKG5vdyB0aGF0IHRoZXkgd29yaykgYXJlIGRp ZmZlcmVudCBmcm9tCi1TRVQgRlRQIFRZUEUgeyBBU0NJSSwgQklOQVJZIH0sIHdoaWNoIHNldCB0 aGUgKmRlZmF1bHQqIHRyYW5zZmVyIG1vZGUgd2hlbgotYXV0b21hdGljIHN3aXRjaGluZyBmYWls cyBmb3IgYSBnaXZlbiBmaWxlLiAgY2t1dXNyLmMsIGNrY2Z0cC5jLCAxMiBBdWcgMjAwNy4KLSAo bm90aWZ5OiBNYXR0IDxtbGlzdEBjbWNmbGV4LmNvbT4pCi0KLUV2ZW4gdGhvdWdoIHRoZSBjb2Rl IGhhc24ndCBjaGFuZ2VkLCBzdWRkZW5seSB3ZSdyZSBnZXR0aW5nOgotCi0gICJja3V1c3guYyIs IGxpbmUgNTY4Mjogd2FybmluZzogaW1wbGljaXQgZnVuY3Rpb24gZGVjbGFyYXRpb246IHRnZXRl bnQKLSAgImNrdXVzeC5jIiwgbGluZSA2MTgzOiB3YXJuaW5nOiBpbXBsaWNpdCBmdW5jdGlvbiBk ZWNsYXJhdGlvbjogdGdldHN0cgotICAiY2t1dXN4LmMiLCBsaW5lIDYyNjI6IHdhcm5pbmc6IGlt cGxpY2l0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uOiB0cHV0cwotICAiY2t1dXN4LmMiLCBsaW5lIDYy NjY6IHdhcm5pbmc6IGltcGxpY2l0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uOiB0Z290bwotCi1pbiBj a3V1c3guYyBvbiBTb2xhcmlzIDkuICA8Y3Vyc2VzLmg+IGlzIHN0aWxsIGluIC91c3IvaW5jbHVk ZSwgZGF0ZWQgMjAwMi4KLUEgcXVpY2sgc2VhcmNoIHNob3dzIHRoZSBtaXNzaW5nIGZ1bmN0aW9u cyBhcmUgaGlkaW5nIGluIDx0ZXJtLmg+LCB3aGljaAotdW50aWwgbm93IHdhcyBpbmNsdWRlZCBv bmx5IGluIExpbnV4LiAgQWRkZWQgYSBVU0VfVEVSTV9IIGNsYXVzZS4gIE5vLCB0aGF0Ci1kb2Vz bid0IGhlbHAsIHRoZSBwcm90b3R5cGVzIGFyZSBub3Qgc2VsZWN0ZWQgYXQgY29tcGlsZSB0aW1l OyB0aGVyZSBhcmUKLSNpZmRlZnMgaW4gdGhhdCBmaWxlIHRoYXQgc2tpcCBvdmVyIHRoZXNlIHBy b3RvdHlwZXMuICBJIGhhZCB0byBwdXQgdGhlbSBpbgotdGhlIGNvZGUgdW5kZXIgI2lmZGVmIEJV Rzk5OS4uI2VuZGlmIChJIGNvdWxkIGhhdmUgdXNlZCBhIGxvbmdlciBuYW1lIGxpa2UKLSNpZmRl ZiBBRERfUFJPVE9UWVBFU19GT1JfQ1VSU0VTX0ZVTkNUSU9OUywgYnV0IHRoYXQgd291bGQgbm90 IGJlIHBvcnRhYmxlKS4KLWNrdXVzeC5jLCAxMiBBdWcgMjAwNy4KLQotQWxzbzoKLQotICAiY2t1 dXN4LmMiLCBsaW5lIDkyMzI6IHdhcm5pbmc6IGltcGxpY2l0IGZ1bmN0aW9uIGRlY2xhcmF0aW9u OiBjcmVhdAotCi1UaGlzIGlzIGNhbGxlZCBpbiB0aGUgSUtTRCBkYXRhYmFzZSBjb2RlLCB1c2Vk IGZvciBnZXR0aW5nIGEgbG9ja2ZpbGUuCi1jcmVhdCgpIGlzIGEgVW5peGlzbSBpbiBjb2RlIHRo YXQgaXMgc3VwcG9zZWQgdG8gYmUgcG9ydGFibGUuICBCdXQgSUtTRCBvbmx5Ci1ydW5zIG9uIFVu aXggYW5kIFdpbmRvd3MsIHNvIEkgYXNzdW1lIHRoZSBXaW5kb3dzIEMgbGlicmFyeSBoYXMgYSBj cmVhdCgpCi1mdW5jdGlvbi4gIEFueXdheSwgc3VkZGVubHkgdGhlIFNvbGFyaXMgaGVhZGVyIGZp bGVzIHNlZW0gdG8gaGF2ZSBibG9ja2VkCi13aGF0ZXZlciBwYXRoIHByZXZpb3VzbHkgZXhpc3Rl ZCB0byB0aGUgY3JlYXQoKSBwcm90b3R5cGUgKHdoaWNoIGlzIGluCi08ZmNudGwuaD4pLCBzbyBJ IGFkZGVkIGFuICNpbmNsdWRlIGluIHRoZSBhcHByb3ByaWF0ZSBzcG90LiAgY2t1dXN4LmMsCi0x MiBBdWcgMjAwNy4KLQotS2VybWl0IGZ1bmN0aW9ucyBmb3IgY29udmVydGluZyB0aGUgbnVtYmVy IGJhc2UgLS0gXGZyYWRpeCgpLCBcZmhleGlmeSgpLAotXHVuZmhleGlmeSgpIC0tIGRpZCBub3Qg d29yayB3aXRoIGJpZyBudW1iZXJzOyBja3JhZGl4KCkgd2FzIG1pc3NlZCBpbiB0aGUKLUNLX09G Rl9UIGNvbnZlcnNpb24uICBGaXhlZCBpbiBja2NsaWIuYywgMTIgQXVnIDIwMDcuCi0KLVVwZGF0 ZWQgdGhlIGhlbHAgdGV4dCBmb3IgQVNDSUksIEJJTkFSWSwgYW5kIFNFVCBGVFAgVFlQRSB0byBj bGFyaWZ5IHRoZQotc2VtYW50aWNzLiAgY2t1dXMyLmMsIGNrY2Z0cC5jLCAxMiBBdWcgMjAwNy4K LQotRXJyb3IgbWVzc2FnZXMgd2VyZSBwcmludGVkIHVwb24gZmFpbHVyZSB0byBvcGVuIGFueSBv ZiB0aGUgZm91ciBsb2cgZmlsZSwKLWV2ZW4gd2l0aCBTRVQgUVVJRVQgT04uICBGaXhlZCBpbiBj a3V1czQuYywgMTIgQXVnIDIwMDcuCi0KLUJ1aWx0IE9LIG9uIE5ldEJTRCAxLjNfUkMzLiAgVHJp ZWQgdG8gYnVpbGQgc2VjdXJlIHZlcnNpb24gYnV0IHRoZSBsaWJyYXJpZXMKLWhhZCBkaXNhcHBl YXJlZC4gIDEzIEF1ZyAyMDA3LgotCi1CdWlsdCBPSyBvbiBNYWMgT1MgWCAxMC40LjkuICBUcmll ZCB0aGUgc2VjdXJlIHZlcnNpb24sIG1hY29zeDEwLjQra3JiNStzc2wuCi1IZXJlIHdlIGdldCB0 aGUgdXN1YWwgcGlsZSBvZiAicG9pbnRlciB0YXJnZXRzIGluIHBhc3NpbmcgYXJndW1lbnQgMSBv ZgotKGZ1bmN0aW9uIG5hbWUpIGRpZmZlciBpbiBzaWduZWRuZXNzIiwgcmVnYXJkaW5nIHNlY3Vy aXR5IGZ1bmN0aW9ucywgYnV0IGl0Ci1idWlsdCBPSy4gIDEzIEF1ZyAyMDA3LgotCi1SZWNvbmNp bGluZyB0aGUgdHdvIHR0aW5sJ3MuLi4gIE9uIGVuY3J5cHRlZCBjb25uZWN0aW9ucyBteXJlYWQo KSByZXR1cm5zCi1lbmNyeXB0ZWQgYnl0ZXM7IHR0aW5sKCkgaGFzIHRvIGRlY3J5cHQgdGhlbTsg aXQgd2Fzbid0IGRvaW5nIHRoaXMgaW4gdGhlCi1sb29rYWhlYWQgc2VjdGlvbiBzbyBJIGZpeGVk IGl0LiAgVGhlIG5ldyBjb2RlIHdvcmtzIG9uIGJvdGggZW5jcnlwdGVkIGFuZAotY2xlYXItdGV4 dCBjb25uZWN0aW9ucy4gIEkgcmVtb3ZlZCB0aGUgY2hhaW5pbmcgdG8gb2xkdHRpbmwoKSwgYW5k Ci1vbGR0dGlubCgpIGl0c2VsZi4gIGNrdXRpby5jLCAxMyBBdWcgMjAwNy4KLQotICAoV291bGRu J3QgaXQgbWFrZSBtb3JlIHNlbnNlIGFuZCBiZSBtb3JlIGVmZmljaWVudCBhbmQgbGVzcyBjb25m dXNpbmcKLSAgZm9yIG15ZmlsbGJ1ZigpIHRvIGRvIHRoZSBkZWNyeXB0aW5nPykKLQotV2hlbiBD LUtlcm1pdCB1c2VzIFptb2RlbSBhcyBhbiBleHRlcm5hbCBwcm90b2NvbCwgaXQgZG9lc24ndCBz ZWVtIHRvIHNjYW4KLWZpbGVzIGJlZm9yZSBzZW5kaW5nIHRoZW0gdG8gc2V0IHRleHQgb3IgYmlu YXJ5IG1vZGUgYXBwcm9wcmlhdGVseS4gIEl0J3MKLXRoYXQgZXh0ZXJuYWwgcHJvdG9jb2xzIGJ5 cGFzcyBLZXJtaXQncyB3aG9sZSAiZ2V0IG5leHQgZmlsZSIgbWVjaGFuaXNtOyB0aGUKLShwb3Nz aWJseSB3aWxkKSBmaWxlc3BlYyBpcyBzaW1wbHkgcGFzc2VkIHRvIHRoZSBleHRlcm5hbCBwcm90 b2NvbCBwcm9ncmFtLgotQ2hhbmdpbmcgdGhpcyB3b3VsZCBiZSBhIHZlcnkgYmlnIGRlYWwuICBC dXQgaWYgb25seSBvbmUgZmlsZSBpcyBiZWluZyBzZW50Ci0odGhlIGZpbGVzcGVjIGlzIG5vdCB3 aWxkKSBpdCdzIGVhc3kgZW5vdWdoIHRvIGNoZWNrLiAgSSBhZGRlZCB0aGlzIHRvIHRoZQotZXh0 ZXJuYWwgcHJvdG9jb2xzIHNlY3Rpb24gb2YgdGhlIHByb3RvY29sIG1vZHVsZS4gIEl0IGNhbiBi ZSBvdmVycmlkZGVuIGluCi1hbnkgb2YgdGhlIHJlZ3VsYXIgd2F5cyAoL1RFWFQgb3IgL0JJTkFS WSBzd2l0Y2ggb24gU0VORCBjb21tYW5kLCBTRVQKLVBBVFRFUk5TIE9GRiwgU0VUIFRSQU5TRkVS IE1PREUgTUFOVUFMLCBldGMpLiAgY2tjcHJvLncsIDEzIEF1ZyAyMDA3LgotCi1bRlRQIFNFTkQg L1JFQ1VSU0lWRV0KLVBldGVyIENyb3dsZXkgcmVwb3J0ZWQgYSBwcm9ibGVtIHdpdGggRlRQIHJl Y3Vyc2l2ZSB1cGxvYWRzIGdldHRpbmcgdGhlCi1kaXJlY3RvcnkgdHJlZSB3cm9uZyB3aGVuIHRo ZSBwcmV2aW91cyBwYXRobmFtZSB3YXMgYSBsZWZ0IHN1YnN0cmluZyBvZiB0aGUKLW5ldyBwYXRo bmFtZSAoZS5nLiBmb28vYmFyLyBhbmQgZm9vL2JhcjIvKS4gIFRoZSBsb2dpYyBkaWQgbm90IGhh bmRsZSB0aGlzCi1jYXNlIGFuZCBjcmVhdGVkIHRoZSBiYXIyIGRpcmVjdG9yeSBhcyBhIHN1YmRp cmVjdG9yeSBvZiBiYXIsIHJhdGhlciB0aGFuIGFzCi1hIHBhcmFsbGVsIGRpcmVjdG9yeS4gIEZp eGVkIGluIHN5bmNkaXIoKSBhbmQgdGVzdGVkIHdpdGggdmFyaW91cyBlZGdlIGNhc2VzLgotY2tj ZnRwLmMgMTQgQXVnIDIwMDcuCi0KLSAgbm90aWZ5IDxwZXRlci5jcm93bGV5QGFsdW1uaS51dGV4 YXMubmV0PgotCi1BZGRlZCBDRCBtZXNzYWdlcyB0byBGVFAgQlJJRUYgZGlzcGxheSB0byB0cmFj ayB0aGUgdXBzIGFuZCBkb3ducyBvZgotcmVjdXJzaXZlIHVwbG9hZHMuICBja2NmdHAuYywgMTQg QXVnIDIwMDcuCi0KLVRoZSBPVVRQVVQgY29tbWFuZCBnYXZlIGEgbWlzbGVhZGluZyBlcnJvciBt ZXNzYWdlICgiQ29ubmVjdGlvbiB0byB4eHggbm90Ci1vcGVuIikgd2hlbiB1c2VkIG9uIGEgc2Vy aWFsIHBvcnQgdGhhdCB3YXMsIGluZGVlZCwgb3BlbiBidXQgd2FzIG5vdAotcHJlc2VudGluZyB0 aGUgQ2FycmllciBzaWduYWwsIHdoZW4gQ0FSUklFUi1XQVRDSCB3YXMgbm90IE9GRi4gIEFkZGVk IGEgbmV3Ci1tZXNzYWdlIGZvciB0aGlzLCBhbmQgc29tZSBvdGhlcnMuICBja3V1czUuYywgMTQg QXVnIDIwMDcuCi0KLVNlbmRpbmcgZnJvbSB0aGUgY29tbWFuZCBsaW5lLCBlLmcuIGtlcm1pdCAt cyBmb28sIGRpZCBub3QgZ2l2ZSBhbgotaW5mb3JtYXRpdmUgZXJyb3IgbWVzc2FnZSBpZiB0aGUg ZmlsZSBjb3VsZCBub3QgYmUgZm91bmQgb3Igb3BlbmVkLiAgRml4ZWQKLWluIGNrdXVzeS5jLCAx NCBBdWcgMjAwNy4KLQotT0ssIGJhY2sgdG8gdHRwdHljbWQuLi4uICBJdCBzZWVtcyB0aGF0IGJh Y2sgb24gTWFyY2ggMjd0aCwgSSBnb3QgZXZlcnl0aGluZwotd29ya2luZyBidXQgSSB0aG91Z2h0 IHRoYXQgdGhlcmUgd2FzIHN0aWxsIHNvbWV0aGluZyB3cm9uZyB3aXRoIGl0IGJlY2F1c2UKLWFu IHVucmVsYXRlZCBwcm9ibGVtIHNvIEkgcHV0IGl0IGFzaWRlLiAgVGhlIHZlcnNpb24gb2YgdHRw dHkuYyBmcm9tIHRoYXQKLWRhdGUgd29ya2VkIE9LLCBhbmQgaXQgbG9va3MgbGlrZSBJIHVwZGF0 ZWQgY2t1dGlvLmMgZnJvbSBpdCwgYnV0IHRoYXQKLXZlcnNpb24gb2YgY2t1dGlvLmMgd2FzIHB1 dCBhc2lkZS4gIFNpbmNlIHRoZW4gSSBoYXZlIGJlZW4gd29ya2luZyBvbiB0aGUKLWNrdXRpby5j IHZlcnNpb24gdGhhdCB3YXMgTk9UIHB1dCBhc2lkZSBhbmQgc28gbm93IEkgaGF2ZSB0byByZWNv bmNpbGUgdGhlCi10d286Ci0KLSAgfi84MC90dHlwdHkvMjAwNzAzMjcvY2t1dGlvLmMKLSAgfi84 MC9ja3V0aW8uYwotCi1BcyBhIGZpcnN0IGN1dCBJIGRpZCB0aGlzIHNpbXBseSBieSByZXBsYWNp bmcgdGhlIGNvbnRlbnRzIG9mIHRoZSAjaWZkZWYKLUNLX1JFRElSIHNlY3Rpb24gb2YgdGhlIGxh dHRlciB3aXRoIHRoYXQgb2YgdGhlIGZvcm1lci4gIE9mIGNvdXJzZSBpbgotU29sYXJpcyB0aGlz IGNvbWVzIHVwIHdpdGggb3BlbnB0eSgpIGltcGxpY2l0bHkgZGVjbGFyZWQgYXQgY29tcGlsZSB0 aW1lIGFuZAotdW5yZXNvbHZlZCBhdCBsaW5rIHRpbWUuICBTbyB0aGUgZmlyc3QgdGFzayBpcyB0 byBnZXQgSEFWRV9PUEVOUFRZIGRlZmluZWQKLWZvciBwbGF0Zm9ybXMgdGhhdCBoYXZlIGl0IGFu ZCBoYXZlIHRoZSBvdGhlcnMgdXNlIHRoZSB0dHJ1bmNtZCgpLiAgRm9yCi1zdGFydGVycyBJIHB1 dCBhbiAjaWZkZWYgYmxvY2sgaW4gY2tjZGViLmggdGhhdCBkZWZpbmVzIEhBVkVfT1BFTlBUWSBm b3IKLUxpbnV4LCBGcmVlQlNELCBOZXRCU0QsIE9wZW5CU0QsIGFuZCBNYWMgT1MgWC4gIE9uZXMg dGhhdCBkb24ndCBoYXZlCi1vcGVucHR5KCkgaW5jbHVkZSBBSVgsIEhQLVVYLCBhbmQgU29sYXJp cy4gIE90aGVycyBsaWtlIFNDTyBJIGRvbid0IGtub3cgYnV0Ci1JIGRvdWJ0IGl0LiAgVGhlIHJl YWwgc29sdXRpb24gaXMgdG8gZ2V0IHRoZSBja3VwdHkuYyBtb2R1bGUgdG8gd29yayBidXQgb25l Ci10aGluZyBhdCBhIHRpbWUuLi4gIFRoaXMgdmVyc2lvbiBpcyBzdXBwb3NlZCB3b3JrIHdpdGgg c2VjdXJlIGJ1aWxkcyBvbiB0aGUKLW9wZW5wdHkoKSBwbGF0Zm9ybXMsIGFuZCBvbiB0aGUgb3Ro ZXJzIGxpa2UgU29sYXJpcywgaWYgYW4gZXh0ZXJuYWwgcHJvdG9jb2wKLWlzIGF0dGVtcHRlZCBv biBhIHNlY3VyZSAoZW5jcnlwdGVkKSBjb25uZWN0aW9uLCBhbiBlcnJvciBtZXNzYWdlIGlzCi1w cmludGVkIGFuZCB0aGUgY29tbWFuZCBmYWlscy4gIGNrdXRpby5jLCAxNCBBdWcgMjAwNy4KLQot SG93IHRvIHRlc3Q/ICBBcHBhcmVudGx5IEkgZGlkIGFsbCBteSB0ZXN0aW5nIG9uIFBhbml4IGJl Zm9yZSwgYW5kIHRoYXQncwotd2hlcmUgYWxsIG15IFptb2RlbSBidWlsZHMgYXJlLCBidXQgbm93 IHdoZW4gSSBidWlsZCBhIEtlcmJlcml6ZWQgdmVyc2lvbgotKHdoaWNoIHdvcmtzIGlmIEkgZG8g aXQgb24gdGhlIHJpZ2h0IHBvb2wgaG9zdCksIGl0IHdvbid0IG1ha2UgYSBsb2NhbAotY29ubmVj dGlvbiwgYW5kIHRoZXJlIGlzIG5vIG90aGVyIHBsYWNlIEkgY2FuIGNvbm5lY3QgdG8gdGhhdCBo YXMgYQotS2VyYmVyaXplZCBUZWxuZXQgc2VydmVyLiAgSSBjYW4sIGhvd2V2ZXIsIGNvbm5lY3Qg dG8gUGFuaXggZnJvbSBoZXJlLCB1c2luZwotdGhlIHNhbWUgY29kZSwgYnV0IG9uIE1hYyBPUyBY Li4uCi0KLVNsaWdodCBkZXRvdXI6IEdvdCBhY2Nlc3MgdG8gQUlYIGFnYWluICg1LjMuMC4wKS4g IFBpY2t5IGNvbXBpbGVyLCBzb21lCi10aGluZ3MgbmVlZGVkIGZpeGluZy4uLi4gIEFsc28gaXQg c2F5cyAiMTUwNi01MDcgKFcpIE5vIGxpY2Vuc2VzIGF2YWlsYWJsZS4KLUNvbnRhY3QgeW91ciBw cm9ncmFtIHN1cHBsaWVyIHRvIGFkZCBhZGRpdGlvbmFsIHVzZXJzLiBDb21waWxhdGlvbiB3aWxs Ci1wcm9jZWVkIHNob3J0bHkiIGFuZCBvZiBjb3Vyc2UgaXQgZ29lcyBraW5kIG9mIHNsb3cuICBG b3Igc29tZSByZWFzb24sIEkKLWNhbid0IGRvIHN0cmVhbWluZyB0cmFuc2ZlcnMgaW50byBBSVgg b3ZlciBhIGxvY2FsIG5ldHdvcmsgKHRvIGl0cyBTU0gKLXNlcnZlciksIGJ1dCB3aW5kb3dlZCB0 cmFuc2ZlcnMgYXJlIE9LLiAgQW55d2F5LCBub3RpbmcgdGhhdCB3ZSd2ZSBiZWVuCi11c2luZyB0 aGUgc2FtZSBiYXNpYyBtYWtlZmlsZSB0YXJnZXQgc2luY2UgQUlYIDQuMiwgY2hhbmdpbmcgbm90 aGluZyBidXQgdGhlCi12ZXJzaW9uIGhlcmFsZCwgSSBtYWRlIGEgbmV3IHRhcmdldCwgc2ltcGx5 ICJhaXgiLCB0aGF0IHBpY2tzIHVwIHRoZSBBSVgKLXZlcnNpb24gYXV0b21hdGljYWxseSBhbmQg c2V0cyB0aGUgaGVyYWxkIGZyb20gaXQuICBEaXR0byBmb3IgYWl4K29wZW5zc2wsCi1idXQgb24g dGhpcyBob3N0IHJlcXVpcmVzIHNldHRpbmcgU1NMSU5DIGFuZCBTU0xMSUIgdG8gL29wdC9zc2wv aW5jbHVkZSBhbmQKLS9vcHQvc3NsL2xpYi4gIEFsc28gdGhlIG1ha2UgcHJvZ3JhbSBoZXJlIHdh cyBleHRyZW1lbHkgc2Vuc2l0aXZlIHRvIHNwYWNpbmcKLXNvIEkgaGFkIHRvIG1ha2Ugc29tZSBt aW5vciBlZGl0cyB0byBnZXQgdGhlIGxpbmsgc3RlcCB0byB3b3JrIGZvciB0aGUgU1NMCi12ZXJz aW9uLiAgY2t1dXN5LmMsIG1ha2VmaWxlLCAxNC0xNSBBdWcgMjAwNy4KLQotR290IHJpZCBvZiB0 aGUgc3BlY2lhbCBQYW5peCBzZWN1cmUgTmV0QlNEIHRhcmdldCwgcmVwbGFjZWQgaXQgd2l0aCBh Ci1yZWd1bGFyIG9uZSwgd2hpY2ggaXMgaW52b2tlZCBpbiB0aGUgbm9ybWFsIHdheSBieSBkZWZp bmluZyBLNUlOQyBhbmQgSzVMSUIKLXRvIHBvaW50IHRvIHRvIHdoZXJlIHRoZSBzdHVmZiBpcyBo aWRkZW4uICBDbGVhbmVkIHVwIGFuZCBtb2Rlcm5pemVkIHRoZQotY29tbWVudHMgaW4gdGhlIG1h a2VmaWxlIGEgYml0LiAgbWFrZWZpbGUgMTUgQXVnIDIwMDcuCi0KLUNoYW5nZWQgc29tZSBkYXRh IHR5cGVzIGFuZCBhZGRlZCBzb21lIGNhc3RzIHRvIGNrY3RlbC5jIHRvIGRvIGF3YXkgd2l0aAot dG9ucyBvZiAicG9pbnRlciB0YXJnZXRzIGluIHBhc3NpbmcgYXJndW1lbnQgMSBvZiAneHh4JyBk aWZmZXIgaW4gc2lnbmVkbmVzcyIKLXdhcm5pbmdzLiAgMTUgQXVnIDIwMDcuCi0KLVNldCB1cCBN YWMgT1MgWCBhcyB0aGUgdGVzdGJlZCBmb3IgdHRwdHljbWQoKSwgd2l0aCBQYW5peCBhcyB0aGUg cmVtb3RlCi1wYXJ0bmVyIG92ZXIgYSBLZXJiZXJvcyA1IGNvbm5lY3Rpb24uICBUaGUgZmlyc3Qg dGVzdCBpcyB0byBzZW5kIGEgMzAwSwotdGV4dCBmaWxlIHdpdGggZ2tlcm1pdCBhcyB0aGUgZXh0 ZXJuYWwgcHJvdG9jb2wuICBJdCB3b3JrZWQgZmluZSwgYW5kIHRoZQotZGVidWcgbG9nIHNob3dl ZCBhbGwgdGhlIHJpZ2h0IGNvbXBvbmVudHMgd2VyZSBhY3RpdmUgKG5hbWVseSBlbmNyeXB0aW9u IGFuZAotdHRwdHljbWQpIFtrZXJtaXQvem1vZGVtIHNlbmQvcmVjZWl2ZSB0ZXh0L2JpbmFyeV06 Ci0KLSAgS2VybWl0ICAgIFptb2RlbQotICBrc3QgT0sgICAgenN0IE9LCi0gIGtzYiBPSyAgICB6 c2IgT0sKLSAga3J0IE9LICAgIHpydCBPSwotICBrcmIgT0sgICAgenJiIEZhaWxlZCAicno6IFBl cnNpc3RlbnQgQ1JDIG9yIG90aGVyIEVSUk9SIgotCi1XZSd2ZSBzZWVuIHRoaXMgYmVmb3JlLiAg VGhlIHByb2JsZW0gaXMgMHhmZiwgVGVsbmV0IElBQywgYXMgSSBwcm92ZWQgdG8KLW15c2VsZiBi eSBjb25zdHJ1Y3RpbmcgYSAzTUIgZmlsZSB0aGF0IGNvbnRhaW5lZCBldmVyeSBieXRlIGJ1dCAw eGZmIGluIGV2ZXJ5Ci1taXh0dXJlIGFuZCBvcmRlciBhbmQgdHJhbnNmZXJyaW5nIGl0IHN1Y2Nl c3NmdWxseSBvdmVyIHRoZSBzYW1lIGNvbm5lY3Rpb24uCi1QcmVzdW1hYmx5IHRoZSBUZWxuZXQg c2VydmVyIGlzIGRvdWJsaW5nIElBQ3MsIHdoZXJlYXMgb2YgY291cnNlIHJ6IGlzIG5vdAotdW5k b3VibGluZywgdGh1cyB0aGUgQ1JDIGVycm9yLiAgVGhpcyBpcyBwcm9ncmVzcy4gIDE1IEF1ZyAy MDA3LgotCi1Mb2cgc2hvd3MgdGhhdCBpbmRlZWQgZXZlcnkgSUFDIGluIHRoZSBzb3VyY2UgZmls ZSBhcnJpdmVzIGRvdWJsZWQuICBBZGRpbmcKLWNvZGUgdG8gcmVtb3ZlIHRoZSBmaXJzdCBJQUMg b2YgZXZlcnkgYWRqYWNlbnQgcGFpciwgYSBzbWFsbCB0ZXN0IGZpbGUgd2l0aAotZGlmZmVyZW50 LWxlbmd0aCBydW5zIG9mIElBQ3MgdHJhbnNmZXJzIE9LLiAgVGhlIDNNQiBhbGwuYmluIGZpbGUg ZG9lcyBub3QuCi0KLVN0YXJ0aW5nIG92ZXIuLi4gIEkgY2FuIHJlY2VpdmUgYSBiaWcgdGV4dCBm aWxlIHdpdGggWm1vZGVtIE9LLiAgVGhlIDMuMk1CCi1iaW5hcnkgdGVzdCBwYXR0ZXJuIHRoYXQg Y29udGFpbnMgbm8gSUFDcyBmYWlsZWQgYWZ0ZXIgMS44TUIsIGJ1dCB0aGUgcGFydAotdGhhdCBp dCB0cmFuc2ZlcnJlZCB3YXMgT0suICBBIHNlY29uZCB0cnksIGFsbW9zdCB0aGUgd2hvbGUgdGhp bmcgYXJyaXZlZCwKLWl0IHN0b3BwZWQganVzdCA1ODQgYnl0ZXMgc2hvcnQgb2YgdGhlIGVuZC4g IENvdWxkIGJlIHRoYXQgZmlsZSBzaXplIGlzIGEKLXNlcGFyYXRlIHByb2JsZW0uICBNYWtpbmcg YSBuZXcgY29weSBleGFjdGx5IDFNQiBsb25nLi4uICBXZWxsLCB0aGF0J3MKLWludGVyZXN0aW5n LCB0aGlzIG9uZSB0b28gc3RvcHBlZCBqdXN0IHNob3J0IG9mIHRoZSBlbmQuICBBbmQgYWdhaW4s IHRoZQotc2FtZSB0aGluZy4gIFdoZW4gY29ubmVjdGluZyBiYWNrIHRvIHRoZSBob3N0LCB0aGUg bGFzdCBabW9kZW0gcGFja2V0IGNhbgotYmUgc2VlbiBvbiB0aGUgc2NyZWVuOyBpdCdzIGFzIGlm IHRoZSBsb2NhbCBabW9kZW0gZXhpdGVkIGJlZm9yZSByZWFkaW5nCi10aGUgbGFzdCBwYWNrZXQu Li4gIEJ1dCBPSywgaWYgSSBjaGFuZ2UgdGhlIG9wdGlvbnMgb24gdGhlIHJlbW90ZSBzegotc2Vu ZGVyIHRvIHVzZSBzbWFsbCBibG9ja3MsIGV0YywgdGhlbiBpdCB3b3Jrcy4KLQotTm93LCBjaGFu Z2luZyBmcm9tIHRoZSAxTUIgbm8tSUFDLWJpbmFyeSB0ZXN0IHBhdHRlcm4sIHRvIHRoZSAxTUIg YWxsLXZhbHVlcwotdGVzdCBwYXR0ZXJuLCB3ZSBmYWlsIGFmdGVyIDgxSy4gIEJ1dCB0aGUgcGFy dCB0aGF0IHdhcyB0cmFuc2ZlcnJlZCBpcwotY29ycmVjdC4gIFNlY29uZCB0cnksIHNhbWUgdGhp bmcsIGJ1dCA1N0suICBUaGlyZDogNDBLLiAgRWFjaCB0aW1lLCB1cG9uCi1jb25uZWN0aW5nIGJh Y2ssIHRoZSBzZXNzaW9uIGlzIGNvbXBsZXRlbHkgZGVhZC4KLQotSUYgSSBIQVZFIFRPIHVuZG91 YmxlIElBQ3MgZm9yIGluY29taW5nIGZpbGVzLCBkb24ndCBJIGhhdmUgdG8gZG91YmxlIHRoZW0K LWdvaW5nIG91dD8gIFRvIHNlbmQgYSBibG9jayB0byBuZXQgd2UganVzdCBjYWxsIHR0b2woKSwg YnV0IHR0b2woKSBkb2Vzbid0Ci1kbyBhbnkgZG91YmxpbmcgKGJlY2F1c2UgS2VybWl0IHByb3Rv Y29sIGFsd2F5cyBxdW90ZXMgMHhmZikuICBUbyBzZWUgd2hhdAotaGFwcGVucywgSSBjaGFuZ2Vk IHRoZSB0dG9sKCkgY2FsbCB0byB0dG9jKCkgaW4gYSBsb29wIHRoYXQgZG91YmxlcyBJQUNzLiAg SQotdGVzdGVkIHRoaXMgYnkgc2VuZGluZyB0aGUgZnVsbCAzLjJNQiB0ZXN0IHBhdHRlcm4sIHdo aWNoIHdvcmtlZCBmaW5lLgotCi1Gb3IgcmVjZWl2aW5nLCBpdCdzIHNsb3cgYnV0IGl0IHdvcmtz IE9LIHdpdGggZmlsZXMgdGhhdCBkb24ndCBjb250YWluIElBQ3MKLShteSBjb25jZXJuIHdhcyB0 aGF0IElBQ3MgbWlnaHQgYXBwZWFyIGluIG91dGJvdW5kIGZpbGVzIG9yIGluIFptb2RlbQotcHJv dG9jb2wgbWVzc2FnZXMpLiAgSXQgcmVjZWl2ZXMgdGhlIDFNQiBuby1JQUMgdGVzdCBwYXR0ZXJu LCBzbyB0aGVyZSBhcmUKLW5vIHByb2JsZW1zIHdpdGggcHJvdG9jb2wgb3IgdGltaW5nLiAgQnV0 IHRoZSBmdWxsIHRlc3QgcGF0dGVybiBhbHdheXMgZ2V0cwotY3V0IG9mZiwgYnV0IGF0IGRpZmZl cmVudCBwb2ludHMsIGFzIGJlZm9yZSwgd2l0aCB0aGUgcmVtb3RlIHNlc3Npb24gZGVhZC4KLUNo YW5naW5nIHRoZSBabW9kZW0gcmVjZWl2ZXIgZnJvbSByeiB0byBscnogb24gdGhlIGxvY2FsIGVu ZCAoc2luY2UgdGhlCi1zZW5kZXIgb24gdGhlIHJlbW90ZSBlbmQgaXMgbHN6KSBkb2VzIG5vdCBj aGFuZ2UgdGhlIGJlaGF2aW9yLgotCi1Bbnl3YXksIEkgd2VudCBiYWNrIGFuZCByZXBsYWNlZCB0 aGUgYnl0ZSBsb29wIHdpdGggc29tZXRoaW5nIG1vcmUKLWVmZmljaWVudCwgYW5kIGl0IGdvZXMg YWJvdXQgMjAgdGltZXMgZmFzdGVyLiAgQnV0IHRoaXMgZG9lc24ndCBoZWxwIGVpdGhlciwKLWl0 IG9ubHkgbWFrZXMgaXQgZmFpbCBmYXN0ZXIuICBCdXQgYWhhLCB3aGF0IGlmIGEgZG91YmxlZCBJ QUMgaXMgYnJva2VuCi1hY3Jvc3Mgc3VjY2Vzc2l2ZSBwdHkgcmVhZHMgLS0gd2UgaGF2ZSB0byBt YWtlIHRoZSAicHJldmlvdXMgY2hhcmFjdGVyIgotbWVtb3J5IHBlcnNpc3RlbnQuICBXZWxsLCB0 aGF0IHdhcyBhIGdvb2QgaW5zaWdodCwgYnV0IGl0IHN0aWxsIGRpZG4ndCBmaXgKLWl0LiAgVGhl IGxvZyBzaG93cyB0aGUgSUFDIGhhbmRsaW5nIGNvZGUgaXMgd29ya2luZyBmaW5lLgotCi1XaGF0 IGRvZXMgc3ogc2F5PyAgQ2FwdHVyaW5nIGl0cyBzdGRlcnIgdG8gYSBmaWxlLi4uICJSZXRyeSAx OiBHb3QgWkNBTiIuCi1OZXh0IHRpbWU6ICJSZXRyeSAxOiBHb3QgVElNRU9VVCIuICBOZXh0IHRp bWU6IEdvdCBaQ0FOLgotCi1UcnlpbmcgZGlmZmVyZW50IFptb2RlbSBvcHRpb25zLi4uICBhcHBh cmVudGx5IEkgZG9uJ3QgbmVlZCB0byB1c2Ugc2hvcnQKLWJsb2Nrcy4gIEJ1dCBJIGRvIG5lZWQg dG8gdXNlIC1lLCBwcm9iYWJseSBiZWNhdXNlIG9mIFRlbG5ldCBOVlQgdHJlYXRtZW50Ci1vZiBj YXJyaWFnZSByZXR1cm47IHdpdGhvdXQgLWUsIHRoZXJlIGlzIGEgInBlcnNpc3RlbnQgQ1JDIGVy cm9yIi4gIC1PCi1kaXNhYmxlcyB0aW1lb3V0cywgYnV0IHRoaXMgbWFrZXMgbm8gZGlmZmVyZW5j ZS4KLQotT0ssIHdlIHN0aWxsIGhhdmUgdHdvIEJpZyBQcm9ibGVtczoKLQotIDEuIFdoZW4gYSBs b25nIGZpbGUgaGFzIG5vIElBQ3MsIHRoZSBmaW5hbCA8IDFLIG9mIHRoZSBmaWxlIGlzIG5vdCBy ZWNlaXZlZC4KLSAyLiBXaGVuIGEgbG9uZyBmaWxlIGhhcyBJQUNzLCB0aGUgdHJhbnNmZXIgZ2Vu ZXJhbGx5IHN0b3BzIHZlcnkgZWFybHkuCi0KLVByb2JsZW0gMTogdGhlIHRyYW5zZmVyIGNvbnNp c3RlbnRseSBmYWlscyBsZXNzIHRoYW4gMUsgZnJvbSB0aGUgZW5kIG9mIHRoZQotZmlsZS4gIFVw b24gQ09OTkVDVCBiYWNrIHRvIHRoZSBob3N0LCBhIGJpZyBabW9kZW0gcGFja2V0IGlzIHNpdHRp bmcgdGhlcmUKLXdhaXRpbmcgdG8gYmUgcmVhZCwgd2hpY2ggbWVhbnMgdHRwdHljbWQoKSdzIGNv cHkgb2YgcnogaXMgdGVybWluYXRpbmcKLWVhcmx5LiAgQ2FuIHdlIGNhdGNoIGl0IGluIHRoZSBk ZWJ1ZyBsb2c/ICBEb2luZyB0aGlzIHRha2VzIGZvcmV2ZXIgYW5kCi13cml0ZXMgYSBHQiB0byB0 aGUgZGlzay4uLiAgQW5kIHRoZW4gdGhlIHByb2JsZW0gZG9lc24ndCBoYXBwZW4uICBBbHNvLCBJ Ci1jYW4gcmVjZWl2ZSBhIEhVR0UgdGV4dCBmaWxlIGFsbW9zdCBpbnN0YW50bHkgd2l0aCBubyBl cnJvcnMgYXQgYWxsLgotCi1Td2l0Y2hpbmcgdG8gbHJ6IG9uIHRoZSByZWNlaXZpbmcgZW5kLCBu b3cgSSBzZWUgdGhlIGVycm9yIG1lc3NhZ2VzLCBhYm91dAotMzAwIGxpbmVzIGxpa2UgdGhpczoK LQotICBSZXRyeSAwOiBHYXJiYWdlIGNvdW50IGV4Y2VlZGVkCi0gIEJ5dGVzIHJlY2VpdmVkOiAg ODcyMzUyLzEwMDAwMDAgICBCUFM6ODU0NjQgIEVUQSAwMDowMSAgUmV0cnkgMDogQmFkIENSQwot ICBCeXRlcyByZWNlaXZlZDogIDg5MjQ0OC8xMDAwMDAwICAgQlBTOjg2NjkwICBFVEEgMDA6MDEg IFJldHJ5IDA6IEJhZCBDUkMKLSAgUmV0cnkgMDogR2FyYmFnZSBjb3VudCBleGNlZWRlZAotICBS ZXRyeSAwOiBHYXJiYWdlIGNvdW50IGV4Y2VlZGVkCi0gIFJldHJ5IDA6IEdhcmJhZ2UgY291bnQg ZXhjZWVkZWQKLSAgUmV0cnkgMDogR2FyYmFnZSBjb3VudCBleGNlZWRlZAotICBSZXRyeSAwOiBH YXJiYWdlIGNvdW50IGV4Y2VlZGVkCi0gIFJldHJ5IDA6IEdhcmJhZ2UgY291bnQgZXhjZWVkZWQK LSAgUmV0cnkgMDogR290IEVSUk9SCi0gIEJ5dGVzIHJlY2VpdmVkOiAgODk4MzM2LzEwMDAwMDAg ICBCUFM6ODQyOTMgIEVUQSAwMDowMSAgUmV0cnkgMDogQmFkIENSQwotICBSZXRyeSAwOiBHYXJi YWdlIGNvdW50IGV4Y2VlZGVkCi0gIFJldHJ5IDA6IEdhcmJhZ2UgY291bnQgZXhjZWVkZWQKLSAg Qnl0ZXMgcmVjZWl2ZWQ6ICA5MDAzODQvMTAwMDAwMCAgIEJQUzo4Mzc1MSAgRVRBIDAwOjAxICBC YWQgZXNjYXBlIHNlcXVlbmNlCi0gIDJmUmUKLSAgdHJ5IDA6IEJhZCBkYXRhIHN1YnBhY2tldAot ICBCeXRlcyByZWNlaXZlZDogIDk0MTQ3Mi8xMDAwMDAwICAgQlBTOjg2MTkxICBFVEEgMDA6MDAg IFJldHJ5IDA6IEJhZCBDUkMKLSAgUmV0cnkgMDogR2FyYmFnZSBjb3VudCBleGNlZWRlZAotCi1F dmVuIHdoZW4gaXQgc3VjY2VlZHMsIGl0IGdldHMgdGhlc2UuICBCdXQgaWYgSSByZWNlaXZlIGEg dGV4dCBmaWxlLCBubwotbWF0dGVyIGhvdyBiaWcsIG5vIGVycm9ycyBvciByZXRyaWVzIG9yIHRp bWVvdXRzIGF0IGFsbC4gIFNvIGl0IGFwcGVhcnMgdGhhdAotdGhlcmUgaXMgb25seSBvbmUgcHJv YmxlbTogYSBiaWctdGltZSBsYWNrIG9mIHRyYW5zcGFyZW5jeSByZWdhcmRpbmcgOC1iaXQKLWFu ZC9vciBjb250cm9sIGNoYXJhY3RlcnMuICBUaGUgb2RkIHRoaW5nIGlzLCBpdCdzIG5vdCB0aGF0 IHRoZSBjaGFyYWN0ZXJzCi1jYW4ndCBnZXQgdGhyb3VnaCAtLSB0aGV5IGFsbCBjYW4gLS0gYnV0 IHRoZXkgc2VlbSB0byBjYXVzZSB0cmFuc2l0b3J5Ci1ibG9ja2FnZXMuICAxNiBBdWcgMjAwNy4K LQotQ2xlYW5lZCB1cCB0aGUgcmVtYWluaW5nIHBvaW50ZXIgc2lnbmVkbmVzcyB3YXJuaW5ncyBp biBja3V0aW8uYywgYnV0IHRoaXMKLXdhcyBhIG1pc3Rha2UsIGl0IGJyb2tlIEtlcmJlcm9zIGNv bm5lY3Rpb25zIGNvbXBsZXRlbHkuICBVbmRpZCB0aGUgY2hhbmdlcy4KLWNrdXRpby5jLCAxNyBB dWcgMjAwNy4KLQotQ2hhbmdlZCBhbGwgcmV0dXJuKCkgaW4gdGhlIGZvcmsoKT09MCBzZWN0aW9u IG9mIHR0cHR5Y21kKCkgdG8gZXhpdCgpLgotY2t1dGlvLmMsIDE3IEF1ZyAyMDA3LgotCi1Ucmll ZCBleHBsaWNpdGx5IHNldHRpbmcgdGhlIHNsYXZlIHB0eSB0byByYXdtb2RlLiAgTWFrZXMgbm8g ZGlmZmVyZW5jZS4KLVRyaWVkIHVzaW5nIHRoZSBNYWMgT1MgWCAoY3Vyc2VzKSByYXcoKSBmdW5j dGlvbiwgYW5kIGFsc28gc3lzdGVtKCJzdHR5Ci1yYXciKTsgc3RpbGwgbm8gZGlmZmVyZW5jZS4g IFRyaWVkIGRvaW5nIGFsbCBvZiB0aGVzZSBpbiBkaWZmZXJlbnQKLWNvbWJpbmF0aW9ucyBhbmQg b3JkZXJzLiAgSSBmb3VuZCBvbmUgY29tYmluYXRpb24gdGhhdCBjdXRzIHRoZSBlcnJvcnMgYWJv dXQKLWluIGhhbGYsIGFuZCB0aGUgdHJhbnNmZXIgb2YgdGhlIG5vLUlBQyB0ZXN0IHBhdHRlcm4g YWxtb3N0IGFsd2F5cyBzdWNjZWVkcwotKGJ1dCBpdCdzIHNsb3cpLiAgQW55d2F5LCBpdCBkb2Vz bid0IGhlbHAgbXVjaCB3aXRoIHRoZSB0ZXN0IHBhdHRlcm4gdGhhdAotY29udGFpbnMgSUFDcy4g IFdlbGwsIHRoZSBjb2RlIGlzIG1vcmUgc29saWQgdGhhbiBpdCB3YXMgYmVmb3JlIGJ1dAotZnVu Y3Rpb25hbGx5IHdlIGhhdmUgbm90IGFkdmFuY2VkIG11Y2ggaWYgd2UgY2FuJ3QgZG93bmxvYWQg YSBiaW5hcnkgZmlsZQotd2l0aCBabW9kZW0hICBPbiB0aGUgb3RoZXIgaGFuZCwgd2UgY2FuIHVw bG9hZCB0aGVtLCBhbmQgd2UgY2FuIHRyYW5zZmVyCi10ZXh0IGZpbGVzIGluIGJvdGggZGlyZWN0 aW9ucywgd2hpY2ggaXMgYW4gaW1wcm92ZW1lbnQgb3ZlciB0aGUgcHJldmlvdXMKLXNpdHVhdGlv biwgaW4gd2hpY2ggdGhlIGVudGlyZSBzZXNzaW9uIHdvdWxkIGhhbmcgZHVlIHRvIGxvc3Mgb2YK LXN5bmNocm9uaXphdGlvbiBvZiB0aGUgZW5jcnlwdGlvbiBzdHJlYW0uCi0KLVRyaWVkIGFkZGlu ZyAtZnVuc2lnbmVkLWNoYXIgdG8gQ0ZMQUdTIG9mIE1hYyBPUyBYIHRhcmdldC4gIEl0IGRvZXMg bm90Ci1tYWtlIHRoZSAic2lnbmVkbmVzcyIgd2FybmluZ3MgZ28gYXdheSBhbmQgaXQgZG9lc24n dCBjaGFuZ2UgdGhlIHJ1bnRpbWUKLXN5bXB0b21zLgotCi1JIHRyaWVkIGEgc2ltcGxlciB2ZXJz aW9uIG9mIHB0eV9tYWtlX3JhdygpLCB0aGUgb25lIGZyb20gU2VyZyBJYWtvdmxldiwgYnV0Ci1p dCB3YXMgYSB0b3RhbCBmYWlsdXJlLiAgVGhhdCdzIGVuY291cmFnaW5nIHRob3VnaCwgYmVjYXVz ZSBpdCBpbmRpY2F0ZXMKLXRoYXQgcHR5X21ha2VfcmF3KCkgaXMgdGhlIHJpZ2h0IHBsYWNlIHRv IGJlIHdvcmtpbmcuCi0KLVRoZW4gSSBtYWRlIHB0eV9tYWtlX3JhdygpIHNldCBvciB1bnNldCBl dmVyeSBzaW5nbGUgdGVybWluYWwgZmxhZwotZXhwbGljaXRseS4gIFRoaXMgbWFkZSBubyBkaWZm ZXJlbmNlLCBidXQgZGlkbid0IGh1cnQgYW55dGhpbmcgZWl0aGVyLgotCi1UaGVuIEkgbWFkZSBw dHlfbWFrZV9yYXcoKSBleHBsaWNpdGx5IHNldCBhbGwgdGhlIGNfY2NbXSBjaGFyYWN0ZXJzIHRv IDAKLShidXQgbGVmdCBjX2NjW1ZNSU5dIGFzIDEpLiAgVGhpcyBtYWRlIG5vIGRpZmZlcmVuY2Ug ZWl0aGVyLgotCi1JIGNoZWNrZWQgcHR5X21ha2VfcmF3KCkgYWdhaW5zdCB0dHBrdCgpIGFuZCB0 aGUgb25seSBkaWZmZXJlbmNlIEkgZm91bmQgaW4KLXRoZSB0ZXJtaW5hbCBmbGFncyBpcyB0aGF0 IHR0cGt0KCkgc2V0cyBJR05QQVIgdGhpbmtpbmcgaXQgbWVhbnMgImlnbm9yZQotcGFyaXR5IGVy cm9ycyIgd2hlbiByZWFsbHkgaXQgbWVhbnMgImRpc2NhcmQgYW55IGNoYXJhY3RlciB0aGF0IGhh cyBhIHBhcml0eQotZXJyb3IiIChhdCBsZWFzdCBhY2NvcmRpbmcgdG8gSWFrb3ZsZXYpIC0tIGV4 YWN0bHkgdGhlIG9wcG9zaXRlLiAgQnV0IEkKLXRyaWVkIGl0IGJvdGggd2F5cywgbm8gZGlmZmVy ZW5jZS4gIDE3IEF1ZyAyMDA3LgotCi1JIG5vdGljZWQgdGhhdCBldmVuIFptb2RlbSB0ZXh0IHJl Y2VpdmVzIGNhbiBmYWlsLiAgVGhleSBkb24ndCBnZXQgYW55Ci1lcnJvcnMsIHRoZXkganVzdCBn ZXQgY3V0IG9mZiBzaG9ydGx5IGJlZm9yZSB0aGUgZW5kLiAgKEJ1dCB1c3VhbGx5IHRoZXkKLXN1 Y2NlZWQsIGFuZCBmYXN0IHRvbywgbGlrZSA1MDBLIGNwcykuCi0KLVdoYXQgaWYgSSBkb24ndCBj YWxsIHB0eV9tYWtlX3JhdygpIGF0IGFsbCBvbiB0aGUgc2xhdmUgcHR5PwotCi16cnQ6IEVFU1NT U1NTU1M6IDgwJSBnb29kIChFID0gc3RvcHBlZCBqdXN0IGJlZm9yZSBlbmQgYnV0IG5vIG90aGVy IGVycm9ycykKLQotenJiIG5vLUlBQyB0ZXN0IHBhdHRlcm4sIHNob3J0IGJsb2NrczoKLSAxLiBT LzUgKHN1Y2Nlc3Mgd2l0aCA1IHNjcmVlbnMgb2YgZXJyb3JzLgotIDIuIFMvNwotIDMuIFMvNwot IDQuIFMvNgotIDUuIEUvNyAoZmFpbGVkIGp1c3QgYmVmb3JlIGVuZCkKLSA2LiBTLzcKLSA3LiBT LzYKLSA4LiBTLzYKLSA5LiBTLzYKLTEwLiBTLzQKLQotU28sIGxvdHMgb2YgZXJyb3JzLCBidXQg aXQgcmVjb3ZlcmVkIDkwJSBvZiB0aGUgdGltZS4KLU5leHQsIHNhbWUgdGhpbmcsIGJ1dCB3aXRo b3V0IHJlcXVlc3Rpbmcgc2hvcnQgYmxvY2tzOgotCi0gMS4gRS81Ci0gMi4gUy81Ci0gMy4gRS80 Ci0gNC4gUy81Ci0gNS4gUy81Ci0gNi4gUy81Ci0gNy4gWC8wIChoYXJkIGZhaWx1cmUgcmlnaHQg YXdheTogIkdvdCBaQ0FOIgotIDguIFMvNQotIDkuIFMvNQotMTAuIFMvNQotCi1TbyBpdCBkb2Vz bid0IGxvb2sgbGlrZSBzaG9ydCBibG9ja3MgbWFrZSB0aGF0IG11Y2ggZGlmZmVyZW5jZS4gIE5v dyB3aGF0IGlmCi1JIHR1cm4gb2ZmIHByZWZpeGluZz8gIEJhZCBDUkMsIGZhaWxzIGltbWVkaWF0 ZWx5IGV2ZXJ5IHRpbWUuICBQdXR0aW5nIGJhY2sKLXB0eV9tYWtlX3JhdyhzbGF2ZSksIGl0IHN0 aWxsIGZhaWxzIGhhcmQuCi0KLVRyaWVkIGEgbmV3IHN0cmF0ZWd5IHdpdGggcHR5X21ha2VfcmF3 KCk6IHJhdGhlciB0aGFuIG1vZGlmeSBleGlzdGluZyBmbGFncywKLUkgc2V0IGFsbCBmbGFncyB0 byAwLCBhbmQgdGhlbiB0dXJuIG9uIG9ubHkgdGhvc2UgZmV3IHRoYXQgd2UgbmVlZCBsaWtlIENT OC4KLU5vdyB3ZSBnZXQgb25seSAyLjUgc2NyZWVucyBvZiBlcnJvcnMgaW5zdGVhZCA0LTcgYW5k IHRoZSB0cmFuc2ZlciByYXRlIGlzCi1oaWdoZXIgZm9yIGJpbmFyeSBmaWxlcyAoYWxsIG9mIHRo ZSBwcmV2aW91cyBvbmVzIHdlcmUgdW5kZXIgMTAwSyBDUFMsIHdoaWxlCi1mb3IgdGV4dCBmaWxl cyBpdCB3YXMgNDAwLTUwMEsgQ1BTKToKLQotIDEuIFMvMiAxOTU2NjkgQ1BTCi0gMi4gUy8yIDE5 NDcyMAotIDMuIEUvMwotIDQuIFMvMiAxOTI1NTAKLSA1LiBTLzMgMTkyMzI1Ci0gNi4gUy8zIDE0 NTA2NgotIDcuIFMvMiAyMDA2ODkKLSA4LiBTLzMgMTg4OTQ4Ci0gOS4gUy8yIDIwOTQ2MQotMTAu IFMvMyAxODE5OTEKLQotSSBub3RpY2VkIHRoYXQgdGhlcmUgd2FzIG5vIFRJT0NTVFRZIGlvY3Rs IGluIHRoZSBwdHkvZm9yayBzZXR1cCBzZXF1ZW5jZSwKLXdoaWNoIGlzIHJlY29tbWVuZGVkIHNv bWV3aGVyZSwgc28gSSB0cmllZCB0aGF0IGFuZCBpdCB3YXMgYSBkaXNhc3RlcjsgdGhlCi1lbnRp cmUgc2Vzc2lvbiBodW5nLiAgSSB0b29rIGl0IGJhY2sgb3V0LiAgMTggQXVnIDIwMDcuCi0KLVRy aWVkIHNvbWUgdHJhbnNmZXJzIG92ZXIgYSBjbGVhci10ZXh0IChub3QgZW5jcnlwdGVkKSBjb25u ZWN0aW9uIHdpdGggdGhlCi1zYW1lIHJlc3VsdHM6IHNtb290aCwgZmFzdCB0cmFuc2ZlciBvZiBh IGJpZyB0ZXh0IGZpbGUgKDQwMEsgY3BzKTsgcm9ja3kgYnV0Ci1zdWNjZXNzZnVsIHRyYW5zZmVy IG9mIHRoZSBuby1JQUMgYmluYXJ5IHBhdHRlcm4gZmlsZSAoMTM1SyBjcHMpLiAgU3dpdGNoaW5n Ci1iYWNrIHRvIHR0cnVuY21kKCksIHRoZSBzYW1lIGJpbmFyeSBmaWxlIGlzIHJlY2VpdmVkIGF0 IDEuNU0gY3BzLCBhbmQgdGhlCi1uby1JQUMgYmluYXJ5IGZpbGUgdG90YWxseSBmYWlscyBhZnRl ciB0b28gbWFueSAiQmFkIENSQyJzOyBhbmQgd2UgYWxyZWFkeQota25vdyB0aGF0IGFueSBmaWxl IHRoYXQgY29udGFpbnMgSUFDcyB3aWxsIGZhaWwuICBPbmUgbWlnaHQgc2F5IHRoYXQKLXR0cHR5 Y21kKCkgaXMgYmV0dGVyIGluIGV2ZXJ5IHJlc3BlY3QgdGhhbiB0dHJ1bmNtZCgpIGV4Y2VwdCBp biBzcGVlZAotKHdoZW4gaXQgd29ya3MpLgotCi1MZXQncyBzZWUgaWYgdHR5cHR5Y21kIHN0aWxs IHdvcmtzIGluIHJlbW90ZSBtb2RlICh0byBsb2NhbCBLOTUpOgotIC4gc3ogLyB0ZXh0IHdvcmtz LCBidXQgc2xvd2x5LgotIC4gbHN6IC8gdGV4dCB3b3JrcyBidXQgc29tZSB3ZWlyZCBlcnJvcnMg YXJlIHJlcG9ydGVkLgotIC4gbHN6IC8gYmluYXJ5IC8gbm8gSUFDIGRvZXNuJ3Qgd29yayBhdCBh bGwgKENSQy0zMiBtaXNtYXRjaCBmb3IgYSBoZWFkZXI7Ci0gICAgICAgIFVuZXhwZWN0ZWQgY29u dHJvbCBjaGFyYWN0ZXIgaWdub3JlZDogMTMsIGV0YykuCi0gLiBzeiAvIGJpbmFyeSAvIG5vIElB QyB3b3JrcyBPSyBidXQgc2xvdy4KLSAuIHN6IC8gYmluYXJ5IC8gZnVsbCB0ZXN0IHBhdHRlcm4g d2l0aCBJQUMgd29ya3MgT0sgYnV0IHNsb3cuCi0gLiBTZW5kaW5nIHRleHQgaW50byByeiBmYWls cyBjb21wbGV0ZWx5LgotCi1XaGF0IGFib3V0IHR0cnVuY21kKCkgaW4gcmVtb3RlIG1vZGU/Ci0g LiBzZW5kIC90ZXh0IHdvcmtzLCBmYXN0LgotIC4gc2VuZCAvYmluYXJ5IHdvcmtzLCBmYXN0LiAK LSAuIHJlY2VpdmUgL3RleHQgd29ya3MsIG5vdCBzbyBmYXN0IGJ1dCBub3QgYmFkLgotIC4gcmVj ZWl2ZSAvYmluYXJ5IHdvcmtzLCBub3Qgc28gZmFzdCBidXQgbm90IGJhZC4KLQotU28gd2UgdXNl IHR0cnVuY21kKCkgZm9yIHJlbW90ZSBtb2RlLCBhbmQgd2UgdXNlIGl0IGZvciBsb2NhbCBtb2Rl Ci1zZXJpYWwtcG9ydCBhbmQgbW9kZW0gY29ubmVjdGlvbnMsIGFuZCB3ZSB1c2UgdHRwdHljbWQo KSBvbiBuZXR3b3JrCi1jb25uZWN0aW9ucyBiZWNhdXNlIChhKSB0aGV5IG1pZ2h0IGJlIGVuY3J5 cHRlZCwgYW5kIChiKSBldmVuIGlmIHRoZXkgYXJlCi1ub3QsIHRoZXkgdXNlIHNvbWUgcHJvdG9j b2wgdGhhdCB3ZSBoYXZlIHRvIGhhbmRsZSwgZS5nLiBUZWxuZXQsIFJsb2dpbi4KLTE5IEF1ZyAy MDA3LgotCi1EaXNjb3ZlcmVkIHRoYXQgU2VuZGluZyBiaW5hcnkgZmlsZXMgbm8gbG9uZ2VyIHdv cmtzLiAgVGV4dCBpcyBPSywgYmluYXJ5Ci10cmFuc2ZlcnMgZG9uJ3QgZXZlbiBzdGFydC4gIFRo aXMgaGFwcGVucyBvbiBib3RoIGVuY3J5cHRlZCBhbmQgY2xlYXItdGV4dAotY29ubmVjdGlvbnMu ICB0dHB0eWNtZCgpIGlzIGJlaW5nIHVzZWQgaW4gYm90aCBjYXNlcy4gIEJ1dCBvZGRseSBlbm91 Z2gsCi1yZWNlaXZpbmcgYmluYXJ5IHN0aWxsIHdvcmtzIGFzIGJlZm9yZS4gIFdoYXQgZGlkIEkg YnJlYWssIGFuZCB3aGVuPwotT2gsIGl0IHdhcyBqdXN0IHRoZSBzY3JpcHQsIHdoZW4gSSBjaGFu Z2VkIGl0IGZyb20gdXNpbmcgc3ogdG8gbHN6LiAgUHV0dGluZwotaXQgYmFjayB0byBzeiBtYWtl cyBpdCB3b3JrLCBldmVuIHdpdGggdGhlIGZ1bGwgMy4yTUIgYmluYXJ5IHBhdHRlcm4gd2l0aAot SUFDcy4KLQotSSBiYWNrZWQgb2ZmIHRoZSBjaGFuZ2VzIEkgbWFkZSB0byBja2N0ZWwuYyB0byBz dXBwcmVzcyBzb21lIHdhcm5pbmdzLCBpbgotdmlldyBvZiB0aGUgZmFjdCB0aGF0IHNpbWlsYXIg Y2hhbmdlcyB0byBja3V0aW8uYyBicm9rZSB0aGluZ3Mgc28gYmFkbHkuCi0xOSBBdWcgMjAwNy4K LQotSWYgc3ogaXMgbm90IGdpdmVuIHRoZSAtZSBmbGFnLCBpdCBzZW5kcyBjb250cm9sIGNoYXJh Y3RlcnMgYmFyZSwgZXhjZXB0IF5QLAotXlEsIF5TLCBhbmQgXlguICBeWCBpcyB0aGUgY29udHJv bCBwcmVmaXgsIHNvIF5BIGlzIHNlbnQgXlggZm9sbG93ZWQgYnkgQS4KLVdpdGggLWUsIGFsbCBD MCBjb250cm9sIGNoYXJzIGFyZSBwcmVmaXhlZCwgYnV0IHdpdGggXlgsIHdoaWNoIGlzLCBvZgot Y291cnNlLCBhIGNvbnRyb2wgY2hhcmFjdGVyLiAgSW50ZXJlc3RpbmdseSwgdGhlIEMxIGFuYWxv Z3Mgb2YgXlAsIF5RLCBeUwotKGJ1dCBub3QgXlggYW5kLCB1bmZvcnR1bmF0ZWx5LCBub3QgSUFD KSBhcmUgYWxzbyBwcmVmaXhlZC4gIC1lIG1ha2VzIG5vCi1kaWZmZXJlbmNlIGZvciA4LWJpdCBj aGFyYWN0ZXJzLgotCi1JZiB3ZSBoYXZlIGEgVGVsbmV0IGNvbm5lY3Rpb24gYW5kIHRoZSBzZXJ2 ZXIgaXMgaW4gQVNDSUkgKE5WVCkgbW9kZSwgQ1IgaXMKLWFsd2F5cyBmb2xsb3dlZCBieSBMRiBv ciBOVUwuICBXZWxsLCBpdCBzZWVtcyB0aGUgc2VydmVyIGlzIHB1dHRpbmcgdXMKLShLZXJtaXQp IGluIGJpbmFyeSBtb2RlIGluIHRoaXMgY2FzZSwgYnV0IHN0YXlpbmcgaW4gQVNDSUkgbW9kZSBp dHNlbGYuCi1BZGRlZCBjb2RlIHRvIGhhbmRsZSBOVlQgYnl0ZSBzdHVmZmluZyBhbmQgdW5zdHVm ZmluZyBpbiBlYWNoIGRpcmVjdGlvbgotaW5kZXBlbmRlbnRseSwgYWNjb3JkaW5nIHRvIHRoZSBU UkFOU01JVF9CSU5BUlkgc3RhdGUgaW4gdGhhdCBkaXJlY3Rpb24uICBJCi1tYWRlIGEgZmlsZSBj b250YWluaW5nIGp1c3QgdGhlIGJ5dGVzIDAtMzEgYW5kIDEyNyBhbmQgMTI4LTE1OSBhbmQgMjU1 ICg2NgotYnl0ZXMgYWxsIHRvZ2V0aGVyKSBhbmQgc2VuZGluZyBpdCBmcm9tIHRoZSBob3N0IHRv IEMtS2VybWl0LCB0aGUgbG9jYWwgbG9nCi1zaG93cyB0aGF0IGV2ZXJ5IGNvbnRyb2wgY2hhcmFj dGVyIHdhcyByZWNlaXZlZCBjb3JyZWN0bHkgYW5kIGFsbCBURUxORVQKLWNvbnZlcnNpb25zIHdl cmUgZG9uZSByaWdodCAtLSBOVUwgcmVtb3ZlZCBhZnRlciBDUiAoYW5kIG9ubHkgYWZ0ZXIgQ1Ip OyBJQUMKLXJlbW92ZWQgYWZ0ZXIgSUFDIChhbmQgb25seSBhZnRlciBhbiBJQUMgbWVhbnQgYXMg YSBxdW90ZSkuICBGb3IgdGhlIGZpcnN0Ci10aW1lLCBJIGNhbiByZWNlaXZlIHRoZSAxTUIgYWxs LXZhbHVlcyB0ZXN0IHBhdHRlcm4sIGJ1dCB0aGVyZSBhcmUgc3RpbGwKLXRvbnMgb2YgKGNvcnJl Y3RhYmxlKSBDUkMgZXJyb3JzLCBzbyB0aGUgdHJhbnNmZXIgcmF0ZSBpcyByZWFsbHkgYXdmdWws IGxpa2UKLWFib3V0IDUlIG9mIHdoYXQgd2UgZ2V0IHdpdGggYSB0ZXh0IGZpbGUgKDI1S2NwcyBp bnN0ZWFkIG9mIDUwMCkuCi0KLUZ1cnRoZXIgZXhwZXJpbWVudGF0aW9uIHNob3dzIHRoYXQgdGhl IGZ1bmRhbWVudGFsIHRyYW5zcGFyZW5jeSBwcm9ibGVtIGlzCi1maXhlZDsgd2UgY2FuIHJlY2Vp dmUgc2hvcnQgZmlsZXMgKHNheSwgMUsgb3IgbGVzcykgY29udGFpbmluZyBhYnNvbHV0ZWx5Ci1h bnkgYnl0ZSB2YWx1ZXMgaW4gYW55IGNvbWJpbmF0aW9uIHdpdGggbm8gZXJyb3JzIGF0IGFsbC4g IEJ1dCBvbmNlIHRoZSBmaWxlCi1zaXplIHJlYWNoZXMgKHNheSkgMTBLLCB3ZSBnZXQgQ1JDIGVy cm9ycywgbGlrZSBvbmUgZXZlcnkgMiBvciAzSyBvZiBkYXRhLgotVGhlc2UgYXJlIG5vdCBkZXRl cm1pbmlzdGljLiAgSW4gc3VjY2Vzc2l2ZSB0cmFuc2ZlcnMgb2YgdGhlIHNhbWUgZmlsZSwgdGhl eQotY29tZSBpbiBkaWZmZXJlbnQgc3BvdHMuICBJdCdzIHRlbXB0aW5nIHRvIGJsYW1lIHB0eSBi dWZmZXIgb3ZlcnJ1bnMsIGJ1dAotdGhlbiB0ZXh0IGZpbGVzIHdvdWxkIHNob3cgdGhlIHNhbWUg YmVoYXZpb3IuICBXaGVuIGEgYmluYXJ5IGZpbGUgc2l6ZQotZXhjZWVkcywgc2F5LCAxTUIsIHRo ZSBjaGFuY2VzIG9mIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBnbyB3YXkgZG93biwKLWluZGVwZW5k ZW50IG9mIHdoZXRoZXIgbXkgZXh0ZXJuYWwgcHJvdG9jb2wgaXMgcnogb3IgbHJ6LiAgSSBsaWtl IGxyeiBiZXR0ZXIKLWJlY2F1c2UgdGhlIGVycm9yIHJlcG9ydHMgY29tZSBvdXQgb24gdGhlIHNj cmVlbiBhcyB0aGUgdHJhbnNmZXIgaXMgZ29pbmcKLW9uLiAgVHJ5aW5nIHRvIGRvd25sb2FkIGEg cmVhbC13b3JsZCBiaW5hcnkgZmlsZSAtLSBhIDIuMk1CIEMtS2VybWl0Ci1leGVjdXRhYmxlIC0t IEkgZ2V0IDQ1MDAgZXJyb3IgbWVzc2FnZXMgYnV0IHRoZSB0cmFuc2ZlciBldmVudHVhbGx5IHN1 Y2NlZWRzLAotd2l0aCBhbiBlZmZlY3RpdmUgdGhyb3VnaHB1dCBvZiAyMUtjcHMuCi0KLUFjdHVh bGx5IGl0IHR1cm5zIG91dCB0aGF0ICJzeiAtYSBzb21lYmlndGV4dGZpbGUiICgyLjJNQikgYWxz byBnZXRzIGEgbG90Ci1vZiBDUkMgZXJyb3JzLiAgVGhlIC1lIGZsYWcgKGVzY2FwZSBhbGwgY29u dHJvbCBjaGFyYWN0ZXJzKSBtYWtlcyB0aGUgc2FtZQotYmlnIHRleHQgZmlsZSB0cmFuc2ZlciB3 aXRoIGZldyBvciBubyBlcnJvcnMuICBJdCdzIG5vdCBzdXJlLWZpcmUuCi1Tb21ldGltZXMgbm8g ZXJyb3JzLCBzb21ldGltZXMgb25lIG9yIHR3bywgYW5kIHNvbWV0aW1lcyBhIGZhdGFsIGVycm9y IHRoYXQKLWtpbGxzIHRoZSB0cmFuc2Zlci4KLQotV2l0aCBiaW5hcnkgZmlsZXMuLi4gYSAzMksg YmluYXJ5IGZpbGUgc2VlbXMgdG8gbWFrZSBpdCBldmVyeSB0aW1lLiAgNDBLCi1mYWlscyBhYm91 dCA1MCUgb2YgdGhlIHRpbWUuICA0OEsgZmFpbHMgNjAlIGFuZCBldmVyeSB0aW1lIGl0IGZhaWxz LCBpdCBoYXMKLWNyZWF0ZWQgYSBwYXJ0aWFsIGZpbGUgb2YgZXhhY3RseSAzMksgKDMyNzY4IGJ5 dGVzKS4gIDk2SyBmYWlscyA5IG91dCBvZiAxMAotdGltZXMsIHdoZW4gaXQgZmFpbHMsIHRoZSBw YXJ0aWFsIGZpbGUgaXMgYWx3YXlzIDAgYnl0ZXMsIG9yIDMyNzY4LCBvcgotNjU1MzYsIGJ1dCB0 aGF0IGp1c3QgbWVhbnMgdGhhdCByeidzIGZpbGUgb3V0cHV0IGJ1ZmZlciBpcyAzMksuCi0KLVdo eSwgdGhlbiwgZG8gYmluYXJ5IGZpbGVzIGNhdXNlIHRyb3VibGUgaWYgaXQgaXMgbm90IGEgc29s aWQgdHJhbnNwYXJlbmN5Ci1wcm9ibGVtPyAgSWYgYSBjZXJ0YWluIGZpbGUgY2FuIGdldCB0aHJv dWdoIG9uY2UsIHdoeSBjYW4ndCBpdCBnZXQgdGhyb3VnaAotZXZlcnkgdGltZT8gIFdoZW4gYSBj aGFyYWN0ZXIgYXJyaXZlcyBhdCB0aGUgcHR5LCB0aGUgcHR5IGRyaXZlciBwcm9iYWJseQotdGFr ZXMgYSBkaWZmZXJlbnQgcGF0aCB0aHJvdWdoIGl0cyBjb2RlLCBjaGVja2luZyB0aGUgdGVybWlu YWwgZmxhZ3MgdGhhdAotd291bGQgYWZmZWN0IHRoYXQgY2hhcmFjdGVyLiAgSSB0cmllZCBtYWtp bmcgS2VybWl0J3MgbmV0d29yayByZWFkIGJ1ZmZlcnMKLXZlcnkgc21hbGwgYnV0LCBzdXJwcmlz aW5nbHksIHRoaXMgbWFkZSB0aGluZ3Mgd29yc2UuICBJIGFsc28gdHJpZWQgbWFraW5nCi10aGVt IHZlcnkgbXVjaCBiaWdnZXIsIHdoaWNoIGRpZG4ndCBoZWxwIGVpdGhlci4gIDI0SyBzdGlsbCBz ZWVtcyB0byBiZSB0aGUKLXJpZ2h0IHNpemUuCi0KLVNvLCBpcyBpdCB0aGF0IHNvbWUgY2hhcmFj dGVycyB0YWtlIGxvbmdlciB0byBwcm9jZXNzIHRoYW4gb3RoZXJzPyAgU28gbG9uZwotdGhhdCBk YXRhIGlzIGxvc3QgZHVlIHRvIGxhY2sgb2YgZmxvdyBjb250cm9sIGJldHdlZW4gVENQIGFuZCB0 aGUgcHR5PyAgT25lCi13YXkgdG8gdGVzdCB0aGlzIHRoZW9yeSBpcyB0byBzbG93IFptb2RlbSBk b3duLiAgSSB0cmllZCAiLWwgMzIiIHdoaWNoLAotYWNjb3JkaW5nIHRvIHRoZSBtYW4gcGFnZSwg dGVsbHMgc3ogdG8gIndhaXQgZm9yIHRoZSByZWNlaXZlciB0byBhY2tub3dsZWRnZQotY29ycmVj dCBkYXRhIGV2ZXJ5IE4gKDMyIDw9IE4gPD0gMTAyNCkgY2hhcmFjdGVycy4gIFRoaXMgbWF5IGJl IHVzZWQgdG8KLWF2b2lkIG5ldHdvcmsgb3Zlci1ydW4gd2hlbiBYT0ZGIGZsb3cgY29udHJvbCBp cyBsYWNraW5nLiIgIE1ha2VzIG5vCi1kaWZmZXJlbmNlLiAgSSBhbHNvIHRyaWVkIHRoZSAtdyAo V2luZG93KSBzd2l0Y2gsIGRpdHRvLiAgSW4gZmFjdCB0aGVyZSBhcmUKLWFsbCBzb3J0cyBvZiBv cHRpb25zIHRvIHNldCB0aGUgIndpbmRvdyBzaXplIiwgInBhY2tldCBsZW5ndGgiLCAiYmxvY2sK LXNpemUiLCBhbmQgImZyYW1lIGxlbmd0aCIsIGJ1dCB3aXRoIG5vIGV4cGxhbmF0aW9uIG9mIHdo YXQgdGhlc2UgbWVhbiBvciBob3cKLXRoZXkgYXJlIHJlbGF0ZWQuICBJZiBJIGNyYW5rIGV2ZXJ5 dGhpbmcgZG93biB0byBtaW5pbXVtIHZhbHVlOgotCi0gIGxzeiBxIC1MIDMyIC1sIDMyIC13IDEK LQotSSBnZXQgNTAlIHN1Y2Nlc3Mgd2l0aCB0aGUgOTZLIGZpbGUgaW5zdGVhZCBvZiAxMCUuICBB ZGRpbmcgLWUsIG9kZGx5Ci1lbm91Z2gsIG1hZGUgaXQgd29yc2UuICBJIGFsc28gdHJpZWQgc2V0 dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKLVpOVUxMUyB0byBkaWZmZXJlbnQgbnVtYmVy cyBsaWtlIDUxMiwgbm8gaGVscCB0aGVyZSBlaXRoZXIuCi0KLUkgdHJpZWQgbWFraW5nIHRoZSBy ZWFkLWZyb20tbmV0LXdyaXRlLXRvLXB0eSBidWZmZXIgc21hbGwgKDFLKSBidXQgbGVhdmluZwot dGhlIHB0eS10by1uZXQgb25lIGJpZy4gIFRoaXMgaW1wcm92ZXMgY2hhbmNlcyBvZiBzdWNjZXNz LCBidXQgaXQncwotaW50b2xlcmFibHkgc2xvdyAoM0tjcHMgd2hlbiB0aGUgY29ubmVjdGlvbiBp cyBjYXBhYmxlIG9mIDUwMEspLgotCi1JIGFsc28gY2hhbmdlZCB0aGUgd3JpdGUtdG8tcHR5IG9w ZXJhdGlvbiBmcm9tIGEgc2luZ2xlIHdyaXRlKCkgY2FsbCBvZgotcG9zc2libHkgbWFueSBLIGNo YXJhY3RlcnMgdG8gYSBieXRlIGxvb3AsIG9uZSB3cml0ZSgpIHBlciBieXRlLiAgU2FtZQotcmVz dWx0OiBzdWNjZXNzIChidXQgc3RpbGwgYWJvdXQgMzAwIHJlY292ZXJhYmxlIGVycm9ycyksIHRo cm91Z2hwdXQgM0tjcHMuCi0yMCBBdWcgMjAwNy4KLQotV2l0aCB0dHB0eWNtZCgpIGNvbmZpZ3Vy ZWQgdG8gd3JpdGUgdG8gdGhlIHB0eSBpbiBhIGJ5dGUgbG9vcCwgaXQgaXMKLXBvc3NpYmxlIHRv IGRlbGF5IGVhY2ggd3JpdGUuICBBZGRpbmcgYSAxMG1zZWMgZGVsYXkgcGVyIGNoYXJhY3RlciBy ZXN1bHRzCi1pbiBhIHRyYW5zZmVyIHRoYXQgcnVucyBhdCBhYm91dCAyMCBjcHMgYW5kIChmb3Ig dGhlIDk2SyB0ZXN0IGZpbGUpIHdvdWxkCi10YWtlIGFib3V0IDgwIG1pbnV0ZXMgdG8gY29tcGxl dGUuICBBbmQgeWV0IGl0IHN0aWxsIGdldHMganVzdCBhcyBtYW55Ci1lcnJvcnMuICBTbyBpdCdz IG5vdCBhIG1hdHRlciBvZiB0aW1pbmcgZWl0aGVyLiAgVGhlIGVycm9ycyBjb21lLCBvbgotYXZl cmFnZSwgZXZlcnkgZmlsZSAzODggYnl0ZXMsIGJ1dCBub3QgYXQgcmVndWxhciBpbnRlcnZhbHMu Ci0KLUkgdHJpZWQgdGhlIFRJT0NSRU1PVEUgaW9jdGwgb24gdGhlIHB0eSBtYXN0ZXIsIGFzIGRp c2N1c3NlZCBzb21ld2hhdAotb2JsaXF1ZWx5IGluIHRoZSBNYWMgT1MgWCAibWFuIHB0eSIgcGFn ZTsgIlRoaXMgbW9kZSBjYXVzZXMgaW5wdXQgdG8gdGhlCi1wc2V1ZG8gdGVybWluYWwgdG8gYmUg ZmxvdyBjb250cm9sbGVkIGFuZCBub3QgaW5wdXQgZWRpdGVkIChyZWdhcmRsZXNzIG9mCi10aGUg dGVybWluYWwgbW9kZSkiIC0tIHNvdW5kcyBsaWtlIGp1c3QgdGhlIHRpY2tldCBidXQgaXQgbWFk ZSBubwotZGlmZmVyZW5jZS4gIEFjdHVhbGx5LCBsb29raW5nIGF0IGEgbWFuIHBhZ2Ugb24gYW5v dGhlciBPUyAoU29sYXJpcyksIGl0Ci1zYXlzIHRoaXMgaXMgb25seSBmb3IgbGluZXMgb2YgdGV4 dCwgRU9McyBhcmUgc3VwcGxpZWQsIHNvIHRoYXQgd291bGQgbWVzcwotdXAgdGhlIHByb3RvY29s LiAgU28gcmVtZW1iZXI6IGRvbid0IHVzZSB0aGlzLgotCi1UcmllZCB3aXRob3V0IE9fTkRFTEFZ OyB0aGUgYmVoYXZpb3Igd2FzIHRoZSBzYW1lIGJ1dCB0aGUgc3BlZWQgd2FzIG11Y2gKLXNsb3dl ci4KLQotVHJpZWQgc3dpdGNoaW5nIGJhY2sgdG8gdGhlIGNrdXB0eS5jIHJvdXRpbmVzIG9uIE1h YyBPUyBYIGFuZCBmb3VuZCB0aGF0IGl0Ci13b3JrcyBub3cgdGhlIHNhbWUgYXMgd2l0aCBvcGVu cHR5KCksIGV4Y2VwdCB0aGF0IEkgc2VlbSB0byBnZXQgbW9yZSBnZXR0eQotYmFiYmxlIGF0IHRo ZSBlbmQuICBCdXQgdGhpcyBtZWFucyBJIGNhbiBydW4gc29tZSB0ZXN0cyBvbiBTb2xhcmlzLiAg SSBtb3ZlZAotdGhlIGVudGlyZSB0ZXN0IGVudmlyb25tZW50IGZyb20gTWFjIE9TIFggMTAuNC45 IHRvIFNvbGFyaXMgOS4gIEJ1dCBpdAotZG9lc24ndCB3b3JrIGF0IGFsbC4KLQotVHJ5aW5nIHRv IGZpZ3VyZSBvdXQgdGhlIGNrdXB0eS5jIG1vZHVsZXMgYWdhaW4uCi0gLiBkb19wdHkoKSBjYWxs cyBwdHlfZ2V0cHR5KCkgd2hpY2ggcmV0dXJucyBpbiBhcmcxIHRoZSBmZCBvZiB0aGUgcHR5IG1h c3Rlci4KLSAuIFRoZW4gaXQgY3JlYXRlcyBhIHBpcGUgYXMgYSB3YXkgdG8gdGVsbCB3aGVuIHRo ZSBjaGlsZCBkaWVzCi0gLiBUaGVuIGl0IGNyZWF0ZXMgYSBmb3JrOgotICAgIC0gVGhlIHBhcmVu dCBkb2VzIGEgYmxvY2tpbmcgcmVhZCBmcm9tIHRoZSBwaXBlCi0gICAgLSBUaGUgY2hpbGQgY2Fs bHMgZ2V0cHR5c2xhdmUoKSB0byBnZXQgdGhlIHB0eSBzbGF2ZQotICAgICAgYW5kIHdyaXRlcyBv bmUgYnl0ZSB0byB0aGUgcGlwZQotICAgICAgYW5kIHRoZW4gZXhlY3MgdGhlIGNvbW1hbmQgaXQn cyBzdXBwb3NlZCB0byBydW4KLU5vdGUgdGhhdCB0aGUgZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBz bGF2ZSBpcyBrbm93biBvbmx5IHRvIHRoZSBsb3dlciBmb3JrLgotVGhlcmVmb3JlIHRoZSBsb3dl ciBmb3JrIGlzIHRoZSBvbmUgdGhhdCBoYXMgdG8gc2V0IGFsbCB0aGUgdHR5IG1vZGVzLCBldGMu Ci1JIHRvb2sgY2FyZSBvZiBhbGwgdGhhdCBidXQgdGhlIGNrdXB0eS5jIG1ldGhvZCBkb2Vzbid0 IHdvcmsgYXQgYWxsIG9uCi1Tb2xhcmlzLiAgQnV0IGl0IHdvcmtzICJmaW5lIiBvbiBNYWMgT1Mg WCAodGhlIDMySyBhbGwtYnl0ZXMgdGVzdCBmaWxlCi10cmFuc2ZlcnMgaW5zdGFudGx5IHdpdGgg bm8gZXJyb3JzLCBidXQgdGhlIDk2SyBvbmUgZXJyb3JzIG91dCkuCi0KLVRoZSBwcm9ibGVtIG9u IFNvbGFyaXMgaXMgdGhhdCBwdHlfbWFrZV9yYXcoKSBmYWlscyBvbiB0aGUgbWFzdGVyZmQgKGJ1 dCBub3QKLW9uIHRoZSBzbGF2ZWZkKSB3aXRoIGVycm5vIDI1ICJpb2N0bCBpbmFwcHJvcHJpYXRl IGZvciBkZXZpY2UiLiAgSXQgZG9lc24ndAotbWF0dGVyIHdoZXRoZXIgSSBkbyBpdCBpbiBja3Vw dHkuYyBvciBja3V0aW8uYy4gIEkgZm91bmQgYSB3ZWIgcGFnZSBvbgota2RlLm9yZyB0aGF0IHNh eXMgU29sYXJpcyBkb2VzIG5vdCBhbGxvdyB0Y2dldC9zZXRhdHRyKCkgb24gYSBwdHkgbWFzdGVy LgotQnV0IHRoZSBTdW4gImtub3dsZWRnZSBiYXNlIiBpcyBub3Qgb3BlbiB0byB0aGUgcHVibGlj LiAgV2VsbCwgcHJlc3VtYWJseQotY2hhbmdlcyBtYWRlIHRvIHRoZSBzbGF2ZSBhcmUgcmVmbGVj dGVkIGluIHRoZSBtYXN0ZXIgKGNvbW1lbnRzIGluIFNvbGFyaXMKLXRlbG5ldGQgc2VlbSB0byBj b25maXJtIHRoaXMuLi4pICBMZXQncyBjb21lIGJhY2sgdG8gU29sYXJpcyBsYXRlci4KLQotTW92 aW5nIHRvIGEgTGludXggd2l0aCBscnpzeiBpbnN0YWxsZWQuLi4gIEJ1aWx0IGEgS2VyYmVyb3Mg NSB2ZXJzaW9uIHdpdGgKLVVTRV9DS1VQVFlfQy4gIExpa2Ugb24gTWFjIE9TIFgsIGl0IHRyYW5z ZmVycyBzaG9ydCBmaWxlcyBPSyBhbmQgY2hva2VzIG9uCi1sb25nZXIgb25lcy4gIFN3aXRjaGVk IHRvIG9wZW5wdHkoKSwgaXQgYmVoYXZlcyB0aGUgc2FtZS4gIFNvIHRoZSBwcm9ibGVtcwotb24g TWFjIE9TIFggYXJlIGV2aWRlbnRseSBub3QgT1Mtc3BlY2lmaWMsIHdoaWNoIGlzIGdvb2QgSSBn dWVzcywgc2luY2UgdGhhdAotbWVhbnMgZmluZGluZyB0aGUgd2F5IGFyb3VuZCB0aGVtIHdpbGwg YXBwbHkgdG8gbW9yZSB0aGFuIG9uZSBwbGF0Zm9ybS4KLTIxIEF1ZyAyMDA3LgotCi1Mb29rIGlu dG8gVElPQ1NDVFRZIGFnYWluLiAgT24gU3lzdGVtIFYgYmFzZWQgT1Mncywgb3BlbmluZyBhIHB0 eSBhY3F1aXJlcyBhCi1jb250cm9sbGluZyB0ZXJtaW5hbCBhdXRvbWF0aWNhbGx5LiAgT24gQlNE LWJhc2VkIE9TJ3MsIG5vOyB5b3UgaGF2ZSB0byB1c2UKLXRoZSBUSU9DU0NUVFkgb24gdGhlIHNs YXZlIGZpbGUgZGVzY3JpcHRvciB0byBnaXZlIGl0IG9uZS4gIEknbSBub3Qgc3VyZSB3aHkKLWEg Y29udHJvbGxpbmcgdGVybWluYWwgd291bGQgYmUgbmVlZGVkLCBleGNlcHQgdGhhdCB3aXRob3V0 IG9uZSwgdGhlIHZpcnR1YWwKLWRldmljZSAiL2Rldi90dHkiIGRvZXMgbm90IGV4aXN0IGZvciB0 aGUgcHJvY2VzcyB0aGF0IHJ1bnMgb24gdGhlIHB0eSwgYW5kCi1tYXliZSB0aGUgYXBwbGljYXRp b24gdGhhdCBydW5zIHRoZXJlIChlLmcuIHJ6c3opIGNoZWNrcyBmb3IgaXQuICBPbiB0aGUKLWRv d25zaWRlLCBoYXZpbmcgYSBjb250cm9sbGluZyB0ZXJtaW5hbCBvcGVucyB0aGUgcHJvY2VzcyB1 cCB0byB0ZXJtaW5hbAotaW50ZXJydXB0cyBsaWtlIFNJR0lOVCBhbmQgU0lHUVVJVC4gIFVudGls IG5vdyBJIGhhdmUgbm90IGJlZW4gdXNpbmcgdGhpcwotaW9jdGwoKS4gIFJlc3VsdHMgKGluIExp bnV4KToKLQotICBXaXRoIFRJT0NTQ1RUWTogOTZLIGFsbC1ieXRlcyB0ZXN0OiAxMSBzY3JlZW5z IG9mIGVycm9ycywgdGhlbiBzdWNjZXNzCi0gIFdpdGhvdXQgVElPQ1NDVFRZOiBleGFjdGx5IHRo ZSBzYW1lLgotCi1UcmllZCB0aGUgc2FtZSB0aGluZyB3aXRoIFRJT0NOT1RUWSBpbnN0ZWFkIG9m IFRJT0NTQ1RUWSwgd2l0aCBleGFjdGx5IHRoZQotc2FtZSByZXN1bHRzIChubyBlZmZlY3Qgd2hh dHNvZXZlcikuCi0KLVRoZXJlIGhhcyB0byBiZSBhIHdheSB0byBtYWtlIHRoaXMgd29yaywgYmVj YXVzZSBabW9kZW0gd29ya3MgdGhyb3VnaAotdGVsbmV0ZCwgd2hpY2ggYmFzaWNhbGx5IHRoZSBz YW1lIHRoaW5nIGFzIHR0cHR5Y21kKCk6IGEgcmVsYXkgYmV0d2VlbiB0aGUKLW5ldHdvcmsgYW5k IGEgcHR5LiAgdHRwdHljbWQoKSBpcyBsaWtlIHRlbG5ldGQgYmFja3dhcmRzLiAgTW9kZXJuIHRl bG5ldGRzCi1hcmUgbm90IG11Y2ggaGVscDsgdGhleSBkb24ndCBhY2Nlc3MgcHR5cyBvciB0aGUg bmV0d29yayBkaXJlY3RseSwgdGhleSBnbwotdGhyb3VnaCAibXV4IiBkZXZpY2VzIHNvIEkgY2Fu J3Qgc2VlIHdoYXQgdGhleSdyZSBkb2luZyB0byBnZXQgdHJhbnNwYXJlbmN5Ci1hbmQgZmxvdyBj b250cm9sLiAgQW4gb2xkIEJTRCB0ZWxuZXRkIHVzZXMgcGFja2V0IG1vZGUgYnV0IHRoYXQgd291 bGQgYmUgYQotYmlnIGRlYWwuLi4KLQotSSB0cmllZCBpZ25vcmluZyB2YXJpb3VzIHNpZ25hbHMg bGlrZSBTSUdUVE9VIGFuZCBTSVRTVFAsIHNpbmNlIHNvbWUgVGVsbmV0Ci1jbGllbnRzIGRvIHRo aXMuICBObyBlZmZlY3QsIG5vIGRpZmZlcmVuY2UuICBBbnl3YXksIGluIExpbnV4IHRoZSB0cmFu c2ZlcnMKLWFsbW9zdCBhbHdheXMgZmluaXNoIE9LIGRlc3BpdGUgdGhlIG1hbnkgZXJyb3JzLiAg VGhlcmUgaXMganVzdCBzb21lIHRyaWNrCi1JJ20gbWlzc2luZyB0byBtYWtlIHRoZSBwdHkgYWNj ZXB0IGEgc3RyZWFtIG9mIGFyYml0cmFyeSBieXRlcyB3aXRob3V0Ci1oaWNjdXBpbmcuCi0KLVdo YXQgYWJvdXQgU29sYXJpcywgd2hpY2ggdXNlcyBja3VwdHkuYz8gIEluIHN0cmVhbXMtYmFzZWQg T1Mncywgd2hlcmUgbGluZQotZGlzY2lwbGluZXMgYW5kIHdoYXRub3QgYXJlIHB1c2hlZCBvbiB0 b3Agb2YgdGhlIHB0eSwgaXQgbG9va3MgbGlrZSB0aGUgcHR5Ci1tb2R1bGUgc2F2ZXMgdGhlIGZp bGUgZGVzY3JpcHRvciBvZiB0aGUgImJhcmUiIHNsYXZlIHB0eSAoYXMgJ3NwdHknKSBiZWZvcmUK LXB1c2hpbmcgdGhpbmdzIG9udG8gaXQsIGFuZCB0aGVuIGxhdGVyIHVzZXMgc3B0eSByYXRoZXIg dGhhbiB0aGUgcmVndWxhcgotc2xhdmUgcHR5IGZpbGUgZGVzY3JpcHRvciB3aGVuIGdldHRpbmcv c2V0dGluZyB0ZXJtaW5hbCBtb2Rlcy4gIEknbSBub3Qgc3VyZQotd2hhdCB0aGlzIGlzIGFsbCBh Ym91dCBidXQgaXQncyBkZWZpbml0ZWx5IFN5c1Zpc2guLi4gIEl0IGhhcHBlbnMgaWYKLVNUUkVB TVNQVFkgaXMgZGVmaW5lZCwgYnV0IEkgbm90aWNlZCB0aGF0IFNUUkVBTVNQVFkgaXMgbmV2ZXIg ZGVmaW5lZAotYW55d2hlcmUuICBJIHRyaWVkIGRlZmluaW5nIGl0IHNvIHdlIHRha2UgYW4gZW50 aXJlbHkgZGlmZmVyZW50IHBhdGggdGhyb3VnaAotdGhlIGNvZGUuICBJdCBtYWRlIGFic29sdXRl bHkgbm8gZGlmZmVyZW5jZS4KLQotVGhlbiBJIG5vdGljZWQgdGhhdCBIQVZFX1NUUkVBTVMgaXMg bm90IGRlZmluZWQgZm9yIFNvbGFyaXMgZWl0aGVyLiAgVHJpZWQKLWRlZmluaW5nIGl0LCBidXQg dGhlIHNlc3Npb24gZGlkbid0IHdvcmsgYXQgYWxsLCBubyBpL28uICBSZW1vdmluZyB0aGUKLUhB VkVfU1RSRUFNUyBkZWZpbml0aW9uIGJ1dCBrZWVwaW5nIHRoZSBTVFJFQU1TUFRZIGRlZmluZWQs IEkgcmVidWlsdCBhbmQKLXRyaWVkICJzZXQgaG9zdCAvY29ubmVjdCAvcHR5IGVtYWNzIi4gIEkg Z290IGFuIEVNQUNTIHNjcmVlbiBidXQgY291bGQgbm90Ci10eXBlIGFueXRoaW5nIGludG8gaXQs IHdoaWNoIG1lYW5zIHRoYXQgU1RSRUFNU1BUWSBzaG91bGQgbm90IGJlIGRlZmluZWQKLWVpdGhl ci4gIFJlbW92ZWQgdGhlIGRlZmluaXRpb24gYW5kICJzZXQgaG9zdCAvcHR5IiB3b3JrcyBhZ2Fp bi4gIFNvIHdoYXQncwotdGhlIHByb2JsZW0gd2l0aCB0dHB0eWNtZCgpPwotCi1JbiBmYWN0LCB0 dHB0eWNtZCgpIHdvcmtzIG9uIFNvbGFyaXMgd2l0aCBLZXJtaXQgYXMgdGhlIGV4dGVybmFsIHBy b3RvY29sLAotYnV0IG5vdCB3aXRoIFptb2RlbSwgbm90IGV2ZW4gd2l0aCB0ZXh0IGZpbGVzLiAg U28gYWdhaW4sIHRoZXJlIGlzIG5vCi1mdW5kYW1lbnRhbCBwcm9ibGVtIHdpdGggdGhlIGNvZGUg b3IgdGhlIGxvZ2ljLCBpdCdzIEp1c3QgQSBNYXR0ZXIgT2YKLVRyYW5zcGFyZW5jeSB0byBjb250 cm9sIGFuZC9vciA4LWJpdCBjaGFyYWN0ZXJzIC0tIHNvbWUgdHJpY2sgSSBkb24ndCBrbm93Ci1h Ym91dC4KLQotTG9va2luZyBhdCB0aGUgU29sYXJpcyBkZWJ1ZyBsb2cuLi4gIEkgc2VlIHRoYXQg Y2t1cHR5LmMgaXMgY2FsbGluZwotaW5pdF90ZXJtYnVmKCkgdG8gc2V0IHRoZSB0dHkgbW9kZXMg b2YgdGhlIG1hc3Rlciwgbm90IHRoZSBzbGF2ZSwgYW5kCi1zZXRfdGVybWJ1ZigpIHRvIHNldCB0 aGVtLCBidXQgeW91IGNhbid0IGRvIHRoYXQgaW4gU29sYXJpcywgZXJyb3IgMjUuICBUaGlzCi1p cyBpbiBnZXRwdHlzbGF2ZSgpLiAgU2hvdWxkbid0IGdldHB0eXNsYXZlKCkgYmUgc2V0dGluZyB0 aGUgdHR5IG1vZGVzIG9mCi10aGUgc2xhdmUsIG5vdCB0aGUgbWFzdGVyPyAgSSBjaGFuZ2VkIGl0 IHRvIGRvIHRoaXMsIGJ1dCBsaWtlIGFsbCBvdGhlcgotY2hhbmdlcywgaXQgbWFkZSBubyBkaWZm ZXJlbmNlLiAgSSBjaGVja2VkIHRvIG1ha2Ugc3VyZSB0aGF0IGFmdGVyIHRoZSBjaGFuZ2UsCi0i c2V0IGhvc3QgL3B0eSAvY29ubmVjdCBlbWFjcyIgc3RpbGwgd29ya2VkIGFuZCBpdCBkaWQuCi0K LUFuZCB0aGVuIHdoYXQuLi4gIEkgaGFkIHNvbWUgY29kZSB0byByZWRpcmVjdCBzdGRlcnIgaW4g Y2t1cHR5LmMgdGhhdCB3YXMKLW5vdCBiZWluZyBleGVjdXRpbmcgZHVlIHRvIGEgdHlwby4gIFdo ZW4gSSBmaXhlZCB0aGUgdHlwbywgcG9vZiwgWm1vZGVtCi1iaW5hcnkgdHJhbnNmZXJzIHN0YXJ0 ZWQgd29ya2luZywgb3Igd29ya2luZyBhcyB3ZWxsIGFzIHRoZXkgd29yayBpbiBMaW51eAotYW5k IE1hYyBPUyBYLiAgSXQgdHVybnMgb3V0IHRoYXQgaWYgSSBkb24ndCByZWRpcmVjdCBzdGRlcnIs IHN6IGFuZCByegotanVzdCBkb24ndCB3b3JrLiAgQnV0IGxzeiBhbmQgbHJ6IGRvLiAgQnV0IGlm IEkgZG8gcmVkaXJlY3QgaXQsIEkgZG9uJ3Qgc2VlCi10aGUgcHJvZ3Jlc3MgbWVzc2FnZXMgZnJv bSBsc3ovbHJ6LiAgMjIgQXVnIDIwMDcuCi0KLUJ1aWx0IG9uIEhQLVVYIDExaSB2MyAoQi4xMS4z MSBVIGlhNjQpIHdpdGggb3B0aW1pemluZyBjb21waWxlciwgZ290IHRvbnMgb2YKLXBpY2t5IHdh cm5pbmdzLCBidXQgaXQgZmluaXNoZWQgYW5kIGxpbmtlZCBhbmQgcnVucyBPSy4gIE1hbnkgb2Yg dGhlCi13YXJuaW5ncyB3ZXJlIGxpa2UgdGhpczoKLQotICAiY2t1Y25zLmMiLCBsaW5lIDE2MDY6 IHdhcm5pbmcgIzIwNjgtRDogaW50ZWdlciBjb252ZXJzaW9uIHJlc3VsdGVkIGluIGEKLSAgY2hh bmdlIG9mIHNpZ246ICAgdG5vcHRbMF0gPSAoQ0hBUikgSUFDOwotCi1JQUMgaXMgZGVmaW5lZCBh cyAyNTUgaW4gY2tjdGVsLmguICBJZiBJIGRlZmluZSBpdCBhcyAweGZmLCBJIGRvbid0IGdldCB0 aGUKLXdhcm5pbmdzLiAgSSBjaGFuZ2VkIHRoZSBkZWZpbml0aW9ucyBvZiBhbGwgdGhlIFRlbG5l dCBjb21tYW5kcyB0byBiZSBpbiBoZXgKLW5vdGF0aW9uIHJhdGhlciB0aGFuIGRlY2ltYWwuICBJ ZiBjdXRzIHdheSBkb3duIG9uIHRoZSBIUC1VWCB3YXJuaW5ncyBhbmQKLWRvZXNuJ3Qgc2VlbSB0 byBjYXVzZSBwcm9ibGVtcyBlbHNld2hlcmUuICBja2N0ZWwuaCwgMjMgQXVnIDIwMDcuCi0KLU5v dyBpdCBsb29rcyBsaWtlIFNvbGFyaXMgaXMgd29ya2luZyBidXQgdGhlbiBpdCBoYW5ncyBhdCB0 aGUgZW5kLiAgSXQKLWFwcGVhcnMgYXMgaWYgdGhlIGNrdXB0eS5jIG1vZHVsZSBpcyBibG9ja2lu ZyBTSUdDSExELiAgRGVidWcgbG9nIHNob3dzIHRoYXQKLXdoZW4gdGhlIHRyYW5zZmVyIGlzIGNv bXBsZXRlLCB3ZSByZWNlaXZlZCBJQUMgRE0gKFRlbG5ldCBEYXRhIE1hcmspIGFmdGVyCi1zeidz IGxhc3QgZ2FzcCBhbmQgYmVmb3JlIHRoZSBzaGVsbCBwcm9tcHQgaXMgcHJpbnRlZC4gIEJ1dCBj YWxsaW5nCi10bl9kb29wKCkgaW4gdGhpcyBjYXNlIGlzIGEgbWlzdGFrZSBiZWNhdXNlIHdlIGFy ZSByZWFkaW5nIHRoZSBudW1iZXIgb2YKLWJ5dGVzIHRoYXQgd2Uga25vdyBhcmUgYXZhaWxhYmxl IGluIGEgY291bnRlZCBsb29wLCBidXQgdG5fZG9vcCgpIHdvdWxkCi1jb25zdW1lIGFuIHVua25v d24gbnVtYmVyIG9mIGJ5dGVzIGFuZCB3ZSB3b3VsZCBuZXZlciBrbm93IHdoZW4gdG8gZXhpdCB0 aGUKLWxvb3AuICBBbnl3YXksIEMtS2VybWl0IGRvZXNuJ3QgZG8gYW55dGhpbmcgd2l0aCBETS4g IFNraXBwaW5nIG92ZXIKLXRuX2Rvb3AoKSAoYW5kIG5vdCB3cml0aW5nIG91dCB0aGUgVGVsbmV0 IGNvbW1hbmQgYnl0ZXMpIGZpeGVzIHRoZSBoYW5naW5nCi1jb25kaXRpb24gYXQgdGhlIGVuZCwg ZXZlbiB0aG91Z2ggU0lHQ0hMRCBpcyBuZXZlciByYWlzZWQuICBja3V0aW8uYywKLTIzIEF1ZyAy MDA3LgotCi1Tb21lIHRlc3RzLCBTb2xhcmlzIHRvIE5ldEJTRCBvdmVyIEs1LgotenN0IHNlbmRz IGFzY2lpLnR4dCwgYSAyLjM2TUIgYXNjaWkgdGV4dCBmaWxlIChLY3BzIC8gRXJyb3JzKS4KLXpy dCByZWNlaXZlcyB0aGUgc2FtZSBmaWxlOgotCi0gIHpzdCA1ODcvMCA1MjYvMCA1NDIvMCA0MzQv MCA0MjMvMAotICB6cnQgODI3LzAgODAwLzAgODQ3LzAgRkFJTCAgNjEwLzAKLQotU28gdGV4dCBp cyBnb29kLiAgQmluYXJ5IG5vdCBzbyBnb29kLiAgSGVyZSB3ZSB0cmFuc2ZlciB0aGUgMU1CIGFs bC1ieXRlcwotcGF0dGVybiBmaWxlLiAgenJiIHJlY2VpdmVzIGl0IHN1Y2Nlc3NmdWxseSwgYnV0 IHdpdGggMTI0OCBlcnJvcnMsIGF0IG9ubHkKLTE1S2Nwcy4gIFNlbmRpbmcgdGhlIHNhbWUgZmls ZSBvdXQgYWx3YXlzIGZhaWxzOgotCi0gIEJlZ2luIDIwMDcwODIzIDE2OjMyOjA3OiBTRU5EIEJJ TkFSWSBhbGwyLmJpbiBbc3pdCi0gIFNlbmRpbmc6IGFsbDIuYmluCi0gIEJ5dGVzIFNlbnQ6ICAg NTYwMC8xMDAwMDAwICAgQlBTOjEyNDQ2ICAgIEVUQSAwMToxOSAgIEZBSUxVUkUKLSAgRW5kIDIw MDcwODIzIDE2OjMyOjEzCi0gIEVsYXBzZWQgdGltZTogNi42MTc5OTI5OTk5OTk4NDIKLSAgY3Bz ID0gMTUxMTAzLjIxMjEwNjc1NTYKLSAgbHN6OiBjYXVnaHQgc2lnbmFsIDE7IGV4aXRpbmcKLQot RGVjaWRlZCB0byBtb3ZlIHRvIExpbnV4IGJ1dCBmb3VuZCB0aGF0IHNvbWV0aGluZyBpcyBzY3Jl d2VkIHVwIGluIExpbnV4Ci1DLUtlcm1pdCB3aXRoIHRpbGRlIGV4cGFuc2lvbjoKLQotICBzZW5k IH4vdGVzdGZpbGVzL2FsbC5iaW4KLQotZG9lc24ndCBleHBhbmQgYXQgYWxsIChidXQgaXQgZGlk IHllc3RlcmRheSEpLiAgVGhlIHByb2JsZW0gd2FzIGluIHRoZQotYW5jaWVudCwgYW5jaWVudCBy ZWFsdWlkL3NldHVpZCBoYW5kbGluZyBjb2RlOyByZWFsX3VpZCgpIG5vIGxvbmdlciB3b3JrcyBp bgotTGludXguICBJIHdvcmtlZCBhcm91bmQgdGhpcyBpbiB3aG9hbWkoKSBieSBzZXR0aW5nIHJ1 aWQgdG8gZ2V0dWlkKCkgaWYKLXJlYWxfdWlkKCkgcmV0dXJuZWQgYSBuZWdhdGl2ZSBudW1iZXIu ICBNYXliZSBkYW5nZXJvdXMsIHdvcnJ5IGFib3V0IGl0Ci1sYXRlci4gIGNrdWZpby5jLCAyMyBB dWcgMjAwNy4KLQotQU5ZV0FZLi4uIGFmdGVyIGZpeGluZyB0aGF0LCBJIHRlc3RlZCB6c2Igb24g TGludXgsIGFuZCBpdCdzIGJyb2tlbiB0aGVyZQotdG9vLCB1c2luZyBvcGVucHR5KCksIHNvIGl0 J3Mgbm90aGluZyB0byBkbyB3aXRoIGNrdXB0eS5jLiAgQWZ0ZXIgc2VuZGluZwotdGhlIGZpcnN0 IFptb2RlbSBkYXRhIHBhY2tldCwgaXQganVzdCBoYW5ncywgbm90aGluZyBjb21lcyBiYWNrLiAg SW4gdGV4dAotbW9kZSBpdCBnZXRzIGZhcnRoZXIsIGJ1dCB0aGVuIHRoZSBzYW1lIHRoaW5nIGhh cHBlbnMuICBDYXB0dXJlZCBzdGRlcnIgZnJvbQotcnogb24gdGhlIGZhciBlbmQ6Ci0KLSAgQnl0 ZXMgcmVjZWl2ZWQ6ICAgICA2MDgvMTAwMDAwMCAgIEJQUzoyMTEzNyAgRVRBIDAwOjQ3ICBSZXRy eSAwOiBCYWQgQ1JDCi0gIEJ5dGVzIHJlY2VpdmVkOiAgICAgODY0LzEwMDAwMDAgICBCUFM6MjM1 NDAgIEVUQSAwMDo0MiAgUmV0cnkgMDogQmFkIENSQwotICBCeXRlcyByZWNlaXZlZDogICAgMTEy MC8xMDAwMDAwICAgQlBTOjI1MDAzICBFVEEgMDA6MzkgIFJldHJ5IDA6IEJhZCBDUkMKLSAgQnl0 ZXMgcmVjZWl2ZWQ6ICAgIDU2OTYvMTAwMDAwMCAgIEJQUzo1Njk4OCAgRVRBIDAwOjE3ICBSZXRy eSAwOiBCYWQgQ1JDCi0gIEJ5dGVzIHJlY2VpdmVkOiAgICA5MTIwLzEwMDAwMDAgICBCUFM6NjIy MjcgIEVUQSAwMDoxNSAgUmV0cnkgMDogQmFkIENSQwotICBCeXRlcyByZWNlaXZlZDogICAgOTM3 Ni8xMDAwMDAwICAgQlBTOjYwNzY2ICBFVEEgMDA6MTYgIFJldHJ5IDA6IEJhZCBDUkMKLSAgQnl0 ZXMgcmVjZWl2ZWQ6ICAgIDk2MzIvMTAwMDAwMCAgIEJQUzo2MDM2MSAgRVRBIDAwOjE2ICBSZXRy eSAwOiBHb3QgVElNRU9VVAotICBSZXRyeSAwOiBTZW5kZXIgQ2FuY2VsZWQKLSAgUmV0cnkgMDog R290IFpDQU4KLQotVGhlIGxvY2FsIHN6LCBob3dldmVyLCBkb2Vzbid0IGdpdmUgYW55IGVycm9y IG1lc3NhZ2UuICBaQ0FOIG1lYW5zOiAib3RoZXIKLWVuZCBjYW5jZWxlZCBzZXNzaW9uIGJ5IHNl bmRpbmcgNSBeWCdzIiAob3IgdXNlciB0eXBlZCB0aGVtKS4gIFdoYXQgYWN0dWFsbHkKLWhhcHBl bnMgaXMgdGhhdCB0dHB0eWNtZCgpJ3Mgc2VsZWN0KCkgdGltZXMgb3V0IHdhaXRpbmcgZm9yIHNv bWV0aGluZyBmcm9tCi10aGUgWm1vZGVtIHBhcnRuZXIgYW5kIHR0cHR5Y21kKCkgaXRzZWxmIGtp bGxzIHRoZSBzeiBmb3JrIHdpdGggU0lHSFVQLgotV2hlbiBsc3ogcmVjZWl2ZXMgU0lHSFVQIGl0 IHNlbmRzIHRoZSBaQ0FOLiAgU28gdGhlIHJlYWwgcHJvYmxlbSBpcyB0aGF0Ci1hZnRlciBzb21l IHBvaW50IHdlJ3JlIG5vdCByZWNlaXZpbmcgYW55dGhpbmcuCi0KLUkgY2hhbmdlZCB0aGUgdGlt ZW91dCBmcm9tIDQgc2Vjb25kcyB0byAzMCBzZWNvbmRzIGFuZCBub3cgSSBzZWUgaXQganVzdAot c3RvcHMgZm9yIGxvbmcgcGVyaW9kcyBvZiB0aW1lIGFuZCB0aGVuIHJlc3VtZXMuICBUaGUgbHJ6 IGxvZyBvbiB0aGUKLXJlY2VpdmluZyBlbmQgc2hvd3MgdG9ucyBvZiB0aW1vdXRzLCBDUkMgZXJy b3JzLCBhbmQgb3RoZXIgZXJyb3JzLiAgVGhlCi1sb2NhbCBsb2cgc2hvd3MgdGhhdCBsc3ogd291 bmQgdXAgc2VuZGluZyBaQ0FOICgyIHggKDEwIHggXkgsIDEwIHggXlgpKS4KLQotTW92aW5nIG9u IHRvIGFub3RoZXIgcHJvYmxlbS4uLiAgVHVybnMgb3V0IEN0cmwtQyAoU0lHSU5UKSBpcyB3b3Jr aW5nIHJpZ2h0Ci1hZnRlciBhbGwuICBTaW5jZSBJJ20gdXNpbmcgbXkgdGVzdCBzY3JpcHRzIGxp a2Uga2VyYmFuZyBzY3JpcHRzLCBDdHJsLUMKLWV4aXRzIHRocm91Z2ggdHJhcCgpLCBhcyBpdCBz aG91bGQsIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24gYW5kIGNsZWFuaW5nIHVwLgotSWYgSSBzdGFy dCBLZXJtaXQgYW5kIHRlbGwgaXQgdG8gVEFLRSB0aGUgc2NyaXB0LCB0aGVuIEN0cmwtQyBicmlu Z3MgbWUgYmFjawotdG8gdGhlIHByb21wdCB3aXRoIHRoZSBjb25uZWN0aW9uIHN0aWxsIG9wZW4g KGFzIGl0IHNob3VsZCkuICBIb3dldmVyLCB1bnRpbAotbm93IEkgaGF2ZW4ndCBkb25lIGFueXRo aW5nIGFib3V0IHRoZSBmb3JrIG9yIHRoZSBwdHlzLiAgQWRkZWQgY29kZSB0bwotdHJhcCgpIHRv IGtpbGwgdGhlIGZvcmsgYW5kIGNsb3NlIHRoZSBtYXN0ZXIgcHR5LiAgY2t1dXN4LmMsIDI0IEF1 ZyAyMDA3LgotCi1BZGRlZCBjb2RlIHRvIHRyeSB0byBicmVhayB0aGUgZGVhZGxvY2suICBJZiBz ZWxlY3QoKSB0aW1lcyBvdXQsIGJ1dCB3ZSBoYXZlCi1zdHVmZiB0byB3cml0ZSBlaXRoZXIgdG8g dGhlIHB0eSBvciB0aGUgbmV0LCB0cnkgdG8gZG8gaXQgYW55d2F5LCBldmVuCi10aG91Z2ggc2Vs ZWN0KCkgZGlkIG5vdCBzYXkgd2UgY291bGQuICBCdXQgdGhpcyBkb2Vzbid0IGhlbHAgYmVjYXVz ZSB3aGVuCi1zZWxlY3QoKSB0aW1lcyBvdXQgd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byB3cml0 ZS4gIFRoZSBwcm9ibGVtIGlzIHRoYXQKLWFmdGVyIHJlY2VpdmluZyB0aGF0IGxhc3QgcGFja2V0 IGZyb20gdGhlIHJlbW90ZSByeiwgdGhlIGxvY2FsIGxzeiBkb2Vzbid0Ci1zZWVtIHRvIGRvIGFu eXRoaW5nLCBhcyBpZiB0aGUgbG93ZXIgZm9yayB3YXNuJ3QgcnVubmluZyAoYW5kIHRvIGNvbmZp cm0KLXRoaXMgaHlwb3RoZXNpcywgc29tZXRpbWVzIEkgbm90aWNlZCB0aGF0IHdoZW4gSSBDdHJs LUMnZCBvdXQgb2YgdGhpcywgdGhlCi10cmFuc2ZlciB3b3VsZCB0YWtlIG9mZiBhZ2FpbikuCi0K LUJhY2tpbmcgdXAgYW5kIHRlc3Rpbmcgd2l0aCBna2VybWl0IHJhdGhlciB0aGFuIHptb2RlbToK LQotIGtzdCByaXBwbGUudHh0IFs4MjRLXSBPSwotIGtzdCBhc2NpaS50eHQgWzEzNTlLXSBPSwot IGtydCByaXBwbGUudHh0IC0tIEZBSUxFRAotCi1JdCBzZWVtcyB0aGF0IHdlIGNhbid0IGhhbmRs ZSBzdHJlYW1pbmcuICBJZiBJIHNldCB1cCBrcnQgdG8gZGlzYWJsZQotc3RyZWFtaW5nIG9uIHJl Y2VpcHQsIGl0IHdvcmtzIE9LLgotCi0ga3J0IHJpcHBsZS50eHQgWzgyNEtdIE9LCi0ga3JiIGFs bDIuYmluICBbMTAwMEtdIE9LCi0KLVNvIGhlcmUgd2UgaGF2ZSBubyB0cm91YmxlIHNlbmRpbmcg YnV0IGJpZyB0cm91YmxlIHJlY2VpdmluZyB1bmxlc3Mgd2UKLWRpc2FibGUgc3RyZWFtaW5nLiAg V2hlcmVhcyB3aXRoIFptb2RlbSB3ZSBoYXZlIHRyb3VibGUgcmVjZWl2aW5nLgotCi1CdXQgdGhp cyB3YXNuJ3QgaGFwcGVuaW5nIGJlZm9yZSwgd2hhdCBjaGFuZ2VkPyAgVXNpbmcgQy1LZXJtaXQg b24gdGhlIGZhcgotZW5kIHRvIHJlY2VpdmUgdGhlIGZpbGUgd2l0aCBkZWJ1ZyBsb2cgb24sIEkg c2VlIHRoYXQgaXQgaXMgc2VuZGluZyA0SyBkYXRhCi1wYWNrZXQgYWZ0ZXIgNEsgZGF0YSBwYWNr ZXQsIHdpdGggdGhlIGxvY2FsIGdrZXJtaXQgc2lsZW50LCBhcyBleHBlY3RlZC4KLUFib3V0IG1p ZHdheSB0aHJvdWdoIHRoZSB0cmFuc2ZlciwgdGhlIGxvY2FsIEtlcm1pdCBzZW5kcyBhbiBlcnJv ciBwYWNrZXQKLSJUcmFuc21pc3Npb24gZXJyb3Igb24gcmVsaWFibGUgbGluayIuICBMb29raW5n IGF0IEctS2VybWl0J3MgZGVidWcgbG9nLi4uCi1JdCByZWNlaXZlcyB0aGUgZmlyc3QgZml2ZSA0 SyBkYXRhIHBhY2tldHMgT0ssIGJ1dCBnZXRzIGEgQ1JDIGVycm9yIG9uIHRoZQotZmlmdGggb25l LCBhbmQgc2VuZHMgdGhlIEVycm9yIHBhY2tldC4gIFNvIGl0IGhhcyByZWNlaXZlZCBhIHN0cmVh bSBvZgotMjAtc29tZSB0aG91c2FuZCBieXRlcyBPSyBhbmQgdGhlbiBtZXNzZXMgdXAuICBUaGF0 IG51bWJlciBzb3VuZHMgYSBsb3QgbGlrZQotdHRwdHljbWQoKSdzIGJ1ZmZlciBzaXplLiAgSSBj aGFuZ2VkIHRoZSBidWZmZXIgc2l6ZXMgdG8gYmUgZGlmZmVyZW50OgotCi0gIFJlYWQgZnJvbSBw dHkgYW5kIHdyaXRlIHRvIG5ldDogNEsgIAotICBSZWFkIGZyb20gbmV0IGFuZCB3cml0ZSB0byBw dHk6IDFLCi0KLVRoaXMgdGltZSBpdCByZWNlaXZlZCB0aGUgZmlyc3QgNEsgcGFja2V0IGFuZCBm YWlsZWQgb24gdGhlIHNlY29uZCBvbmUuCi1UaGVuIEkgaW5jcmVhc2VkIHRoZSBidWZmZXJzIHRv IDk4SyBlYWNoLCBleHBlY3RpbmcgdG8gcmVjZWl2ZSBsb3RzIG1vcmUKLXBhY2tldHMgc3VjY2Vz c2Z1bGx5IGJ1dCBpdCBib21iZWQgb3V0IG9uIHRoZSA1dGggb25lLiAgQnV0IHRoYXQncyBnb29k LCBpdAotY29uZmlybXMgdGhlcmUncyBubyBsb2dpYyBlcnJvciBpbiB0aGUgYnVmZmVyIG1hbmFn ZW1lbnQuICBKdXN0IHRvIG1ha2UKLXN1cmUsIHRob3VnaCwgbGV0J3Mgc2V0IHRoZSBidWZmZXIg c2l6ZSBzbWFsbGVyIHRoYW4gdGhlIHBhY2tldCBzaXplIGFuZAotZGlzYWJsZSBzdHJlYW1pbmcu ICBJbiB0aGlzIGNhc2Ugd2UgZ2V0IDQgZ29vZCBkYXRhIHBhY2tldHMgYW5kIGEgQ1JDIGVycm9y Ci1vbiB0aGUgNXRoIG9uZSBhbmQgc28gd2UgcmVxdWVzdCByZXRyYW5zbWlzc2lvbiwgYW5kIHRo ZSBuZXh0IDggdGltZXMgaXQKLWFycml2ZXMgaXQgZ2V0cyBhIGRpZmZlcmVudCBDUkMgZXJyb3Is IGJ1dCB0aGUgOXRoIGNvcHkgaXMgT0suICBUaGVuIHRoZQotbmV4dCBwYWNrZXQgY29tZXMgYW5k IGl0IGdldHMgYSBDUkMgZXJyb3IgZXZlcnkgdGltZS4gIEFuZCB0aGlzIGlzIG5vdGhpbmcKLWJ1 dCBwbGFpbiBBU0NJSSB0ZXh0LgotCi1Td2l0Y2hpbmcgdG8gcmVtb3RlIG1vZGU6Ci0KLSAgUkVN T1RFPTEga2sga3N0Ci0KLShhZnRlciB0cmlja2luZyBteXNlbGYgYmVjYXVzZSBpdCB3YXMgdXNp bmcgdHRydW5jbWQoKSBmb3IgdGhpcy4uLikgSSBzZWUKLXRoYXQgbm90aGluZyB3b3JrcyBhdCBh bGwuICBXaGF0IGRpZCBJIGJyZWFrPyAgMjQgQXVnIDIwMDcuCi0KLUZpeGVkIHR0cHR5Y21kKCkg dG8gcmVzdG9yZSBjb25zb2xlIG1vZGVzIGFmdGVyIGEgcmVtb3RlLW1vZGUgdHJhbnNmZXIuCi1j a3V0aW8uYywgMjUgQXVnIDIwMDcuCi0KLU5vdGljZWQgdGhhdCBlcnJvciBjb2RlcyBsaWtlIEVT UkNIIGFyZSBub3QgYXZhaWxhYmxlIGluIGFsbCBtb2R1bGVzLgotVGhhdCdzIGJlY2F1c2Ugb2Yg c29tZSBjb21wbGljYXRlZCBpbiAjaWZkZWZzIGluIGNrY2RlYi5oIHRoYXQgd2luZCB1cCBub3QK LWFsd2F5cyAjaW5jbHVkaW5nIDxlcnJuby5oPi4gIEJ1dCBJIG5vdGljZSB0aGF0IGNrdXRpby5j IGluY2x1ZGVzIGl0Ci11bmNvbmRpdGlvbmFsbHkgd2l0aCBubyBpbGwgZWZmZWN0cywgYW5kIHNv IGRvZXMgY2t2ZmlvLmMuICBEb2VzIGFueSB2ZXJzaW9uCi1vZiBVbml4IGF0IGFsbCBub3QgaGF2 ZSA8ZXJybm8uaD4/ICBBZGRlZCBhIGNhdGNoLWFsbCBjbGF1c2UgdG8gY2tjZGViLmggdG8KLSNp bmNsdWRlIDxlcnJuby5oPiAoaW4gVU5JWCBvbmx5KSBpZiwgYWZ0ZXIgdGhlIG90aGVyIGNsYXVz ZXMsIEVTUkNIIHdhcwotc3RpbGwgbm90IGRlZmluZWQuICBja2NkZWIuaCwgMjUgQXVnIDIwMDcu Ci0KLU5vdyBiYWNrIHRvIGRlYnVnZ2luZyB0dHB0eWNtZCgpLi4uICBSZW1vdGUtbW9kZSB0cmFu c2ZlcnMgd2l0aCB0dHB0eWNtZCgpCi13ZXJlIGJyb2tlbiBpbiB0d28gcGxhY2VzLCBtYXliZSBh cyBsb25nIGFzIDIgd2Vla3MgYWdvICh0aGlzIHdvdWxkIGhhdmUKLWFmZmVjdGVkIG5vbi1uZXR3 b3JrIHRyYW5zZmVycyB0b28sIHdoaWNoIEkgY2FuJ3QgdGVzdCBhbnkgbW9yZSkuCi1UaGUgbG9n aWMgd2FzIG1pc3NpbmcgaW4gYSBjb3VwbGUgcGxhY2VzIGZvciB0aGUgbm9uLW5ldHdvcmsgYW5k L29yCi1ub24tVGVsbmV0IGFuZC9vciBub24tZW5jcnlwdGluZyBjb25uZWN0aW9ucyAoaWYgc3Rh dGVtZW50cyB3aXRoIG5vIGVsc2UKLXBhcnRzKS4gIEZpeGVkIGluIGNrdXRpby5jLCAyNSBBdWcg MjAwNy4KLQotVGVzdGluZyByZW1vdGUgbW9kZToKLQotIGtzdCBPSyAgIHpzdCBPSwotIGtzYiBP SyAgIHpzYiBPSwotIGtydCBPSyAgIHpydCBPSwotIGtyYiBPSyAgIHpyYiBPSwotCi1GdW5jdGlv bmFsbHkgaXQgYWxsIHdvcmtzIGJ1dCB0aGVyZSBhcmUgaGl0Y2hlcyB3aXRoIFptb2RlbSBhcyBh bHdheXMuCi1XaGVuIHNlbmRpbmcgdG8gSzk1OgotCi0gLiBJZiBJIHNlbmQgd2l0aCBsc3osIHRo ZXJlIGFyZSBodW5kcmVkcyBvZiAiU3VicGFja2V0IHRvbyBsb25nIiBlcnJvcnMsCi0gICBhbmQg dGhlIHRyYW5zZmVyIGlzIHZlcnkgc2xvdywgYnV0IGl0IHN1Y2NlZWRzLgotCi0gLiBJZiBJIHNl bmQgd2l0aCB0aGUgMTk5NCBPbWVuIHZlcnNpb24gb2Ygc3osIHRyYW5zbWlzc2lvbiBpcyBpbnN0 YW50YW5lb3VzCi0gICBhbmQgd2l0aG91dCBlcnJvcnMsIGJ1dCB0aGVuIGl0IGhhbmdzIGF0IHRo ZSBlbmQuCi0KLSAuIElmIEkgYnlwYXNzIEMtS2VybWl0IGFuZCBzZW5kIGRpcmVjdCBmcm9tIGxz eiBvciBzeiwgYm90aCB3b3JrIGZpbmUuCi0KLVNvIGNsZWFybHkgdGhlIHB0eXMgYXJlIGdldHRp bmcgaW4gdGhlIHdheS4gIFRoZSBoYW5naW5nIGF0IHRoZSBlbmQgd291bGQgYmUKLWNhdXNlZCBi eSB0aGUgc3ogcHJvY2VzcyBjbG9zaW5nIGJlZm9yZSBpdHMgbGFzdCBvdXRwdXQgcmVhY2hlZCB0 aGUgbWFzdGVyCi1wdHkuICBJdCB3b3VsZCBuZWVkIHRvIGRvIHNvbWUgZm9ybSBvZiBmbHVzaGlu ZyBhbmQvb3IgcGF1c2luZyBhdCB0aGUgZW5kCi1idXQgdGhlcmUncyBub3RoaW5nIEkgY2FuIGRv IGFib3V0IHRoYXQ7IHRoZXNlIHByb2dyYW1zIHdlcmUgbm90IGRlc2lnbmVkIHRvCi1iZSB1c2Vk IGluIHRoaXMgd2F5LiAgQW55d2F5LCBpdCBvbmx5IHNlZW1zIHRvIGhhcHBlbiB3aXRoIGZpbGVz IGxvbmdlciB0aGFuCi0xMDBLLgotCi1Gb3IgbG9jYWwgbW9kZSwgdGVzdGluZyBpbiBTb2xhcmlz IG92ZXIgb3VyIEtlcmJlcm9zIDUgY29ubmVjdGlvbiBhZ2FpbjoKLQotIGdrZXJtaXQgIGxyenN6 Ci0ga3N0IE9LICAgenN0IEZBSUwKLSBrc2IgT0sgICB6c2IgRkFJTAotIGtydCBPSyAgIHpydCBP SyBidXQgd2l0aCBlcnJvcnMKLSBrcmIgT0sgICB6cmIgRkFJTAotCi1JZiBJIHVzZSBPbWVuIHJ6 c3ogYXMgdGhlIGV4dGVybmFsIHByb3RvY29sIChlLmcuIHdpdGggenN0KSwgaXQgYmxvY2tzCi1y ZWRpcmVjdGlvbiBhbmQgaXQgc2VuZHMgdGhlIGZpbGUgdG8gbXkgdGVybWluYWwsIHJhdGhlciB0 aGFuIG92ZXIgdGhlCi1jb25uZWN0aW9uLiAgVGhpcyB3b3VsZCBwcm9iYWJseSBiZSBiZWNhdXNl IGl0IGZpbmRzIG91dCB0aGUgZGV2aWNlIG5hbWUgb2YKLXRoZSBqb2IncyBjb250cm9sbGluZyB0 ZXJtaW5hbCBhbmQgb3BlbnMgaXQsIHRvIHByZXZlbnQgcmVkaXJlY3Rpb24uICBUaGlzCi1pcyBo YXJkIHRvIHByZXZlbnQgaW4gU29sYXJpcyBiZWNhdXNlIHRoZXJlIGlzIG5vIFRJT0NTVFRZIGlv Y3RsKCkuCi1TdXBwb3NlZGx5IHRoZSBzYW1lIHRoaW5nIGlzIGFjY29tcGxpc2hlZCBieSBjbG9z aW5nIGFuZCByZW9wZW5pbmcgdGhlIHNsYXZlCi1wdHkgYWZ0ZXIgZG9pbmcgc2V0c2lkKCkuICBJ IGFkZGVkIGNvZGUgdG8gZG8gdGhpcywgYnV0IGl0IG1hZGUgbm8KLWRpZmZlcmVuY2UuICAoSWYg SSB1c2UgbHN6IGluc3RlYWQgb2Ygc3osIGl0IGlzIGluZGVlZCByZWRpcmVjdGVkLCBidXQgamFt cwotdXAgYWZ0ZXIgYWJvdXQgMTVLLikgIGNrdXB0eS5jLCAyNyBBdWcgMjAwNy4KLQotT24gTWFj IE9TIFggd2l0aCBzeiAzLjczIDEtMzAtMDMsIGhvd2V2ZXIsIHRoZSByZWRpcmVjdGlvbiB3b3Jr cywgc28gSQotYXNzdW1lIGl0IHdvdWxkIGFsc28gd29yayBpbiBMaW51eCwgRnJlZUJTRCwgTmV0 QlNELCBldGMsIHRvby4gIERvaW5nIHRoZQotZnVsbCB0ZXN0IHN1aXRlIG9uIE1hYyBPUyBYOgot Ci0gZ2tlcm1pdCAgIGxyenN6ICAgICAgICAgIHJ6c3oKLSAga3N0IE9LICAgenN0IEZBSUwgKDEp ICAgIE9LCi0gIGtzYiBPSyAgIHpzYiBGQUlMICgyKSAgICBPSwotICBrcnQgT0sgICB6cnQgT0sg ICAoMykgICAgT0sgZm9yIDEwMEsgZmlsZSwgZmFpbHMgZm9yIGxvbmdlci4KLSAga3JiIE9LICAg enJiIEZBSUwgKDQpICAgIE9LICgxTUIgYWxsLWJ5dGVzIHRlc3QgcGF0dGVybikKLQotKDEpIDY0 SyBmaWxlIE9LIGV2ZXJ5IHRpbWU7IDEwMEsgZmlsZSBmYWlscyBldmVyeSB0aW1lLgotKDIpIDEw SyBmaWxlIGZhaWxzIGV2ZXJ5IHRpbWUuCi0oMykgU3VjY2VlZHMgd2l0aCA4MDBLIGZpbGUgYnV0 IGdldHMgYSBmZXcgcmVjb3ZlcmFibGUgZXJyb3JzLgotKDQpIFN1Y2NlZWRzIHdpdGggNDhLIGJp bmFyeSBmaWxlIHdpdGggc29tZSBlcnJvcnMsIGZhaWxzIHdpdGggbG9uZ2VyIG9uZXMuCi0KLVNv IGFjdHVhbGx5IGl0IGxvb2tzIHByZXR0eSBnb29kLCBpdCdzIGp1c3QgdGhhdCBscnpzeiBtZXNz ZXMgdXAuICBXaGVuCi1zZW5kaW5nIHdpdGggbHN6IGlmIEkgaW5jbHVkZSAtTCA1MTIgaXQgc2Vu ZHMgdGhlIDEwMEsgdGVzdCBmaWxlIHdpdGggbm8KLWVycm9ycywgYnV0IHN0aWxsIGNob2tlcyBv biBsb25nZXIgb25lcy4KLQotVGVzdGluZyBvbiBNYWMgT1MgWCBhZ2FpbiwgYnV0IHRoaXMgdGlt ZSBvdmVyIGEgY2xlYXItdGV4dCBUZWxuZXQgY29ubmVjdGlvbjoKLQotIGdrZXJtaXQgICAgICAg IGxyenN6ICAgIHJ6c3oKLSAga3N0IE9LICAgenN0ICBGQUlMKDEpICAgT0sKLSAga3NiIE9LICAg enNiICBGQUlMKDIpICAgT0sKLSAga3J0IE9LICAgenJ0ICBPSygzKSAgICAgT0sKLSAga3JiIE9L ICAgenJiICBGQUlMKDQpICAgT0sgCi0KLSgxKSBBbG1vc3Qgd29ya2VkLCBmaW5pc2hlZCA3NzdL IG91dCBvZiA4MjRLIHdpdGhvdXQgZXJyb3JzLgotKDIpIEdvdCB0b25zIG9mIGVycm9ycywgZmFp bGVkIGluIGZpcnN0IDMwSyBvdXQgb2YgMTAwMEsuCi0oMykgT0sgZm9yIDEwMEsgZmlsZSBidXQg ZmFpbHMgZm9yIGxhcmdlci4KLSg0KSBPSyBmb3IgNDhLIGJpbmFyeSBmYWlsIGJ1dCBmYWlscyBm b3IgbGFyZ2VyLgotCi1NYXliZSBzZWUgaWYgd2UgY2FuIGRvIHdpdGhvdXQgdGhlIE9QRU5QVFkg cGFydC4KLQotVE9NT1JST1cgLS0ganVzdCBjbGVhbiB1cCB0aGUgY29kZSwgYWRkIHNvbWUgU0VU IC8gU0hPVyAvIEhFTFAgY29tbWFuZHMsCi1kb2N1bWVudCBpdCwgYW5kIG1vdmUgb24uCi0KLU5v dGU6IEluIEs5NSwgU0VUIFdJTkRPVyBzZXRzIHRoZSBabW9kZW0gcGFja2V0IGxlbmd0aCwgMzIg LSAxMDI0LCBtdWx0aXBsZQotb2YgNjQuCi0KLVNFRSB+LzgwL2V4dGVybmFsLnR4dAotCi1DaGFu Z2VkIGZ0cCBwb3J0IGZyb20gaW50IHRvIHVuc2lnbmVkIGludC4gIGNrY2Z0cC5jLCAzMCBBdWcg MjAwNy4KLQotVHJpZWQgYWdhaW4gdG8gYnVpbGQgS1JCNC9LUkI1L1NTTC9UTFMgdmVyc2lvbiBm b3IgU29sYXJpcyA5LiAgSGFkIHRvIHVwZGF0ZQotdGhlIGJ1aWxkIHByb2NlZHVyZSBhZ2Fpbiwg b2YgY291cnNlLCBiZWNhdXNlIG9mIG5ldyBmaWxlIGFuZCBkaXJlY3RvcnkKLW5hbWVzLCBidXQg cmFuIGludG8gcHJvYmxlbXMgYW55d2F5IGJlY2F1c2UgdGhlCi1jdS1zb2xhcmlzOWcra3JiNStr cmI0K29wZW5zc2wrc2hhZG93K3BhbSt6bGliIHRhcmdldCB3YXMgY2FsbGluZyBhbm90aGVyCi10 YXJnZXQgdGhhdCBkaWQgbm90IGtub3cgYWJvdXQgdGhlIGhhcmR3aXJlZCBwYXRobmFtZXMuICBJ bnRlZ3JhdGVkIHRoZSB0d28KLXRhcmdldHMgYW5kIHRyaWVkIGJ1aWxkaW5nIGFnYWluLiAgSXQg YWN0dWFsbHkgY29tcGlsZWQgb2sgKGJ1dCB3aXRoIGxvdHMgb2YKLXdhcm5pbmdzIGZyb20gdGhl IHNlY3VyaXR5IG1vZHVsZXMpLCBidXQgZmFpbGVkIGF0IGxpbmsgdGltZSB3aXRoCi1rcmI1X2lu aXRfZXRzIG5vdCBmb3VuZDsgZml4ZWQgdGhhdCB3aXRoIGFuICNpZmRlZiBOT19LUkI1X0lOSVRf RVRTLCBub3cgaXQKLWJ1aWxkcyBPSyBidXQgd2l0aG91dCB0aGUgZnRwIGNsaWVudC4gIFRyaWVk IGJ1aWxkaW5nIGl0IFdJVEggdGhlIEZUUCBhbmQKLXRoYXQgd2FzIE9LIHRvbywgbm8gY2hhbmdl cyBuZWVkZWQgZXhjZXB0IHRvIHRoZSBidWlsZCBwcm9jZWR1cmUuICAxMiBGZWIKLTIwMDgsIHRo YXQgaXM6IEMtS2VybWl0IDguMC4yMTIgOiAyMDA4MDIxMi4KLQotVHJpZWQgdG8gYnVpbGQgd2l0 aCAtRENLX1NSUCBhbmQgLWxzcnAgYnV0OgotCi0gIGhhc2hfc3VwcG9ydGVkICAgICAgICAgICAg ICAgICAgICAgIGNrY2Z0cC5vCi0gIGhhc2hfZ2V0ZGVzY2J5bmFtZSAgICAgICAgICAgICAgICAg IGNrY2Z0cC5vCi0gIGhhc2hfZ2V0ZGVzY2J5aWQgICAgICAgICAgICAgICAgICAgIGNrY2Z0cC5v Ci0gIGNpcGhlcl9nZXRkZXNjYnluYW1lICAgICAgICAgICAgICAgIGNrY2Z0cC5vCi0gIGtyeXB0 b19kZWxldGUgICAgICAgICAgICAgICAgICAgICAgIGNrY2Z0cC5vCi0gIGtyeXB0b19uZXcgICAg ICAgICAgICAgICAgICAgICAgICAgIGNrY2Z0cC5vCi0gIGNpcGhlcl9zdXBwb3J0ZWQgICAgICAg ICAgICAgICAgICAgIGNrY2Z0cC5vCi0gIGtyeXB0b19tc2dfcHJpdiAgICAgICAgICAgICAgICAg ICAgIGNrY2Z0cC5vCi0gIGtyeXB0b19tc2dfc2FmZSAgICAgICAgICAgICAgICAgICAgIGNrY2Z0 cC5vCi0gIGhhc2hfZ2V0bGlzdCAgICAgICAgICAgICAgICAgICAgICAgIGNrY2Z0cC5vCi0gIGNp cGhlcl9nZXRsaXN0ICAgICAgICAgICAgICAgICAgICAgIGNrY2Z0cC5vCi0gIGNpcGhlcl9nZXRk ZXNjYnlpZCAgICAgICAgICAgICAgICAgIGNrY2Z0cC5vCi0KLVNlbnQgbWFpbCB0byBUb20gV3Ug YW5kIGJhY2tlZCBvZmYgZm9yIG5vdy4gIG1ha2VmaWxlLCAxNCBGZWIgMjAwOC4KLShUb20gV3Ug bmV2ZXIgYW5zd2VyZWQ7IHNlZW1zIGxpa2UgU1JQIGlzIGRlZnVuY3QuKQotCi1UaGUgIi5ibGFo ID0geHh4IiBmb3JtIG9mIHZhcmlhYmxlIGFzc2lnbm1lbnQgb25seSB3b3JrZWQgZm9yIHZhcmlh YmxlcwotbmFtZXMgb2YgbGVuZ3RoIDIyIG9yIGxlc3MsIG5vdGljZWQgYW5kIGZpeGVkIGJ5IFdv bGZyYW0gU2FuZy4gIGNrdWNtZC5jLAotNSBNYXIgMjAwOC4KLQotSW4gInNldCBob3N0IC9wdHkg c3NoIC4uLiIgY29ubmVjdGlvbnMsIHRoZSBJTlBVVCBjb21tYW5kIHN1ZGRlbmx5IHN0b3BwZWQK LXdvcmtpbmcuICBUaGlzIGlzIGluIFNvbGFyaXMgOS4gIEl0IGhhcHBlbnMgd2l0aCBhbGwgOC4w LiogdmVyc2lvbnMgb2YKLUMtS2VybWl0LCBzbyBpdCdzIG5vdGhpbmcgdG8gZG8gd2l0aCB0dHB0 eWNtZCgpLiAgQWRkZWQgc29tZSBkZWJ1ZygpCi1zdGF0ZW1lbnRzIGJ1dCB0aGV5IGRvbid0IHNo b3cgYW55dGhpbmcuICBUdXJucyBvdXQgdGhlcmUgd2Fzbid0IGEgcHJvYmxlbQotYWZ0ZXIgYWxs LiAgV2VkIE1hciAyNiAxNjowNDo1MyAyMDA4Ci0KLUNoYW5nZWQgY21pZmkoKSB0byBub3QgcHJp bnQgIj9ObyBmaWxlcyBtYXRjaCIgKG9yIHdoYXRldmVyKSBpZiBTRVQgUVVJRVQgT04uCi1ja3Vj bWQuYywgMjYgTWFyIDIwMDguCi0KLUFkZGVkIFx2KHJlbW90ZWlwKSBmb3IgdGhlIElQIGFkZHJl c3Mgb2YgdGhlIGhvc3Qgd2UncmUgY29ubmVjdGVkIHRvLAotYW5kIFx2KGlubWVzc2FnZSkgZm9y IElOUFVUIHN0YXR1cyBtZXNzYWdlcyBjb3JyZXNwb25kaW5nIHRvIFx2KGluc3RhdHVzKS4KLWNr dXVzci5oLCBja2NtYWkuYywgY2t1dXNbMjRdLmMsIDI2IE1hciAyMDA4LgotCi1NYWRlIFxma2V5 d29yZHZhbCgpIHN0cmlwIGJyYWNlcy9xdW90ZXMgZnJvbSB0aGUgcmlnaHQtaGFuZCBzaWRlIHNv IHdlIGNhbgotaGFuZGxlIHRoaW5ncyBsaWtlOgotCi0gIHBhc3N3b3JkPSJzdHJpbmd3aXRoc3Bh Y2VhdGVuZCAiCi0KLWNrdXVzNC5jLCA2IEF1ZyAyMDA4LgotCi1BZGRlZCBpbnZpc2libGUgUFVU RU5WIGNvbW1hbmQgZm9yIFVOSVggb25seS4gIFZhbHVlIHNob3VsZCBub3QgYmUgZW5jbG9zZWQK LWluIGRvdWJsZXF1b3Rlcy4gIFJlcXVpcmVzIGxnZSBcdihidWlsZGlkKSAyMDA4MDgyNi4gIGNr dXVzci5bY2hdLCAyNiBBdWcgMjAwOC4KLQotQWRkZWQgU0VUIFZBUklBQkxFLUVWQUxVQVRJT04g eyBSRUNVUlNJVkUsIFNJTVBMRSB9LiAgVGhpcyBpcyBoaWdobHkKLWV4cGVyaW1lbnRhbCwgYnV0 IGFsc28gaGlnaGx5IGRlc2lyYWJsZSBpZiBpdCB3b3JrcyBvdXQuICBTSU1QTEUgaW5oaWJpdHMK LXRoZSBkZWZhdWx0IHJlY3Vyc2l2ZSBtZXRob2Qgb2YgZXZhbHVhdGluZyBcJXggYW5kIFwmeFtd IHZhcmlhYmxlcywgd2hpY2gKLWlzLCBxdWl0ZSBmcmFua2x5LCBudXRzIGFuZCBtYWtlcyBwcm9n cmFtbWluZyBpbiBLZXJtaXQgYXQgYmVzdAotY291bnRlcmludHVpdGl2ZS4gIEkgbWFkZSBhbiBl eGNlcHRpb24gaW4gdGhlIGNhc2Ugb2YgYXJyYXkgc3Vic2NyaXB0cywKLWJlY2F1c2UgY2hhbmdp bmcgaG93IHRoZXkgYXJlIGV2YWx1YXRlZCBjb3VsZCBicmVhayBhIGxvdCBvZiBzY3JpcHRzLCBh bmQKLWFueXdheSB0aGVyZSBzaG91bGQgbmV2ZXIgYmUgYW55IGhhcm0gaW4gZXZhbHVhdGluZyB0 aGVtIHJlY3Vyc2l2ZWx5IGJlY2F1c2UKLXRoZWlyIGZpbmFsIHZhbHVlIGlzIGFsd2F5cyAob3Ig c2hvdWxkIGJlKSBudW1lcmljLCBub3Qgc29tZSBzdHJpbmcgdGhhdAotbWlnaHQgY29udGFpbiBi YWNrc2xhc2hlcy4gIFRoZSBTRVQgVkFSIHNldHRpbmcgaXMgb24gdGhlIHN0YWNrLCBqdXN0IGxp a2UKLVNFVCBRVUlFVCAoaXQgZm9sbG93cyB0aGUgcXVpZXQveHF1aWV0IGNvZGUgaW4gY2t1dXNb MzU2XS5jKSwgc28gbWFjcm9zIG9yCi1jb21tYW5kIGZpbGVzIHRoYXQgY2hhbmdlIGl0IGNhbid0 IGJyZWFrIHRoZSBzY3JpcHQgdGhhdCBpbnZva2VzIHRoZW0uCi1BZGRlZCBcZnJlY3Vyc2UoKSB0 byBmb3JjZSByZWN1cnNpdmUgZXZhbHVhdGlvbiBvZiBhIFwleCBvciBcJnhbXSB2YXJpYWJsZQot cmVnYXJkbGVzcyBvZiB0aGUgVkFSSUFCTEUtRVZBTFVBVElPTiBzZXR0aW5nLiAgQWRkZWQgXHYo dmFyZXZhbCkgdG8gYWxsb3cKLXByb2dyYW1tYXRpYyBzZXR0aW5nIHRvIGN1cnJlbnQgc2V0dGlu Zy4gIFRlc3RlZCBvbiBTb2xhcmlzIDkgYnV0IHNob3VsZCBiZQotdG90YWxseSBwb3J0YWJsZS4g IGNrdXVzci5bY2hdLCBja3V1c1szNTZdLmMsIDExIFNlcCAyMDA4LgotCi1Gcm9tIEfvv71udGVy IEtuYXVmOiA2NC1iaXQgYnVpbGRzIHdlcmUgZmFpbGluZyBvbiBTdVNFIExpbnV4IGJlY2F1c2UK LWxpYnJlc29sdiBhbmQgbGliY3J5cHQgd2VyZSBpbiBsaWI2NCByYXRoZXIgdGhhbiBsaWI7IHVw ZGF0ZWQgdGhlIHRlc3RzIGluCi10aGUgbGludXggbWFrZWZpbGUgdGFyZ2V0IHRvIGZpbmQgdGhl bS4gIG1ha2VmaWxlLCAxMiBKYW4gMjAwOS4KLQotVHJpZWQgYnVpbGRpbmcgb24gUmVkIEhhdCBF bnRlcnByaXNlIExpbnV4IFNlcnZlciByZWxlYXNlIDUuMyA2NC1iaXQuCi1UaGVyZSBpcyBubyBj dXJzZXMgb3IgbmN1cnNlcy4gICJtYWtlIGxpbnV4bmMiIGNvbXBpbGVkIE9LIGJ1dCBjb2xsYXBz ZWQgYXQKLWxpbmsgdGltZSBsb29raW5nIGZvciBjcnlwdCgpLCByZXNfc2VhcmNoKCksIGFuZCBk bl9leHBhbmQoKS4gIFR1cm5lZCBvdXQKLXRoZSBsaW51eG5jIChhbmQgbGludXhjKSB0YXJnZXRz IG5lZWRlZCB0aGUgc2FtZSB0cmVhdG1lbnQgYXMgdGhlIExpbnV4IG9uZQotZm9yIDY0LWJpdCBM aW51eGVzLiAgbWFrZWZpbGUsIDMgTWFyIDIwMDkuCi0KLUNvbnNvbGlkYXRlZCB0aGUgbGludXgg dGFyZ2V0cyBzbyB3ZSBubyBsb25nZXIgbmVlZCB0aHJlZSBzZXBhcmF0ZSBvbmVzIGZvcgotY3Vy c2VzLCBuY3Vyc2VzLCBhbmQgbm8gY3Vyc2VzLiAgIm1ha2UgbGludXgiIHdvcmtzIG9rIG9uIGNv bXB1dGVycyB3aXRoIGFuZAotd2l0aG91dCAobiljdXJzZXMuICAibWFrZSBsaW51eCtzc2wiLCBk aXR0by4gICJsaW51eCtrcmI1K3NzbCBidWlsZHMgT0sgYnV0Ci1uZWVkcyAtRE5PX0tSQjVfSU5J VF9FVFMiLiAgTWFrZWZpbGUsIDMgTWFyIDIwMDkuCi0KLUZpeGVkIGNvcHlyaWdodCBkYXRlIGFu bm91bmNlZCBpbiBoZXJhbGQsIGNrdXVzNS5jLCAzIE1hciAyMDA5LgotCi1QYXRjaCBmcm9tIFNl dGggVGhlcmlhdWx0IHRvIGF2b2lkIGRlcHJlY2F0aW9uIHdhcm5pbmcgZm9yIHV0bXAgcmVmZXJl bmNlcwotaW4gY2t1ZmlvLmMgaW4gTWFjIE9TIFggMTAuNSAobGF0ZXIsIHRoaXMgYmVjYW1lIGEg Y29uc29saWRhdGVkIG1ha2VmaWxlCi10YXJnZXQgdGhhdCB3b3JrcyBhdXRvbWF0aWNhbGx5IGZv ciBhdCBsZWFzdCBNYWMgT1MgWCAxMC4zLjkgdGhyb3VnaAotMTAuNS42KS4gIG1ha2VmaWxlLCBj a3VmaW8uYywgMjggQXByaWwgMjAwOS4KLQotenNoY21kKCkgKHRoZSBmdW5jdGlvbiB1c2VkIGJ5 IFJVTiBhbmQgISB0byBydW4gZXh0ZXJuYWwgY29tbWFuZHMpIHdhcyBub3QKLWZhbGxpbmcgYmFj ayBhcyBleHBlY3RlZCBpbiBMaW51eCBSSEVMNC81IGlmIFNIRUxMIHdhcyBub3QgZGVmaW5lZCBp biB0aGUKLWVudmlyb25tZW50LiAgQWxzbyBpbiBhbGwgVW5peCB2ZXJzaW9ucywgdGhlcmUgd2Fz IG5vIGluZGljYXRpb24gaWYgYSBSVU4vIQotY29tbWFuZCBmYWlsZWQgKG90aGVyIHRoYW4gdGhl IHJldHVybiBjb2RlKSBiZWNhdXNlIHRoZSBzcGVjaWZpZWQgc2hlbGwKLWRpZG4ndCBleGlzdCBv ciB3YXMgbm90IGV4ZWN1dGFibGUgKGUuZy4gdGhlIFNIRUxMIGVudmlyb25tZW50IHZhcmlhYmxl IHdhcwotbWlzZGVmaW5lZCkuICBOb3cgaXQgcHJpbnRzIHRoZSBuYW1lIG9mIHRoZSBvZmZlbmRp bmcgc2hlbGwgYW5kIHRoZSByZWFzb24KLWl0IGNvdWxkbid0IGJlIGV4ZWN1dGVkIChOb3QgZm91 bmQsIFBlcm1pc3Npb24gZGVuaWVkLCBldGMpLiAgY2t1ZmlvLmMsCi0yOCBBcHJpbCAyMDA5Lgot Ci1UaGVyZSBpcyBubyBlYXN5IHdheSB0byBnZXQgdGhlIGxhc3QgZmllbGQgb2Ygc3RyaW5nOyBm b3IgZXhhbXBsZSwgdGhlCi1leHRlbnNpb24gZnJvbSBhIGZpbGVuYW1lLCB3aGljaCBtaWdodCBo YXZlIGFueSBudW1iZXIgb2YgZmllbGRzLiAgSW4KLWdlbmVyYWwgd2Ugd2FudCB0byBiZSBhYmxl IHRvIGdldCAid29yZCBudW1iZXIgbiIgY291bnRpbmcgZnJvbSB0aGUgcmlnaHQ7Ci1cZndvcmQo KSBsYWNrcyB0aGlzIGFiaWxpdHkuICBOb3cgaWYgeW91IGdpdmUgaXQgYSBuZWdhdGl2ZSB3b3Jk IG51bWJlciwKLXRoYXQgc2F5cyB0byBjb3VudCBmcm9tIHRoZSByaWdodDsgZm9yIGV4YW1wbGUg XGZ3b3JkKG9uZSB0d28gdGhyZWUgZm91cgotZml2ZSwgLTIpIHJldHVybnMgImZvdXIiLiAgY2tj bGliLmMsIGNrdXVzci5jLCAxNCBNYXkgMjAwOS4KLQotRml4ZWQgYSB0eXBvIGluIHRoZSBhaXg1 MStvcGVuc3NsIChTU0xMSUJTIHNob3VsZCBoYXZlIGJlZW4gU1NMTElCKS4KLUZyb20gSmFzb24g TGVoci4gIG1ha2VmaWxlLCAyNyBNYXkgMjAwOS4KLQotVXBkYXRlZCB0aGUgbGludXgrb3BlbnNz bCt6bGliK3NoYWRvdytwYW0gdGFyZ2V0IHRvIGNoYWluIHRvIHRoZSBuZXcgbWFpbgotTGludXgg dGFyZ2V0LiAgQSBidW5jaCBvZiBvdGhlciBvbmVzIHJlbWFpbiB1bi11cGRhdGVkLiBtYWtlZmls ZSwgMTIgSnVuIDIwMDkuCi0KLVVwZGF0ZXMgdG8gdGhlIG5ldyBNYWMgT1MgWCAxMC41IHRhcmdl dCBmcm9tIFNldGggVGhlcmlhdWx0ICh3aGljaCBpcwotc3VwcG9zZWQgdG8gd29yayBvbiBhbGwg TWFjIE9TIDEwLXBvaW50LWFueXRoaW5nKSB0byBhdm9pZCB3YXJuaW5ncwotdGhhdCBjYW1lIHVw IG9uIG9uIE1hYyBPUyAxMC40LjExL0ludGVsLiAgT25jZSB0aGlzIG9uZSBpcyBwcm92ZW4gd2Ug c2hvdWxkCi1iZSBhYmxlIHRvIHJlbW92ZS9jb25zb2xpZGF0ZSBsb3RzIG9mIG90aGVyIG9uZXMu ICBtYWtlZmlsZSwgMTIgSnVuIDIwMDkuCi0KLUMtS2VybWl0IGRpc2FibGVzIFNTTCB3aXRoIHRo ZSBtZXNzYWdlICI/T3BlblNTTCBsaWJyYXJpZXMgZG8gbm90IG1hdGNoCi1yZXF1aXJlZCB2ZXJz aW9uLiIgaWYgdGhlIHZlcnNpb24gb2YgT3BlblNTTCB0aGF0IEtlcm1pdCB3YXMgYnVpbHQgd2l0 aCBpcwotbm90IGV4YWN0bHkgdGhlIHNhbWUgYXMgdGhlIHZlcnNpb24gdGhhdCBpcyBsb2FkZWQg ZHluYW1pY2FsbHkgYXQgcnVudGltZS4KLVRoaXMgaXMgYWN0dWFsbHkgdGhlIHByb3BlciBiZWhh dmlvciwgc2luY2UgQVBJcyBhcmUgbm90IGd1YXJhbnRlZWQgbm90IHRvCi1jaGFuZ2UgYmV0d2Vl biBPcGVuU1NMIHZlcnNpb25zIHByaW9yIHRvIDEuMC4wLiAgTWFkZSB0aGUgZXJyb3IgbWVzc2Fn ZSBtb3JlCi1pbmZvcm1hdGl2ZS4gIGNrX3NzbC5jLCAyNiBBdWcgMjAwOSwgYW5kIGFnYWluIDI4 IEF1ZyAyMDA5LgotCi1BSVggNi4xIGlzIG91dCwgaXQgaXMgcmVhbGx5IGp1c3QgYSBuZXcgbmFt ZSBmb3IgQUlYIDUuNC4gIEFkZGVkIG1ha2VmaWxlCi10YXJnZXRzLCBwbHVzIGZvciB0aGUgZmly c3QgSSBtYWRlIEFJWCA0LjIgYW5kIGxhdGVyIGZpZ3VyZSBvdXQgaXRzIHZlcnNpb24KLW51bWJl ciBpbiB0aGUgbWFrZWZpbGUgdGFyZ2V0IHNvIHdlIGRvbid0IGhhdmUgdG8ga2VlcCBhZGRpbmcg bmV3IC1EQUlYbm4KLXNlY3Rpb25zIHRvIHRoZSBjb2RlLCBhbmQgYWxzbyBnZXQgaXRzIGhhcmR3 YXJlIG5hbWUgKGUuZy4gInBvd2VycGMiKSBmcm9tCi11bmFtZSBhdCBtYWtlIHRpbWUsIHJhdGhl ciB0aGFuIGhhcmR3aXJpbmcgInJzNjAwMCIgYXMgSSBkaWQgYmVmb3JlLgotQ29uc29saWRhdGVk IGFsbCBBSVggNC4yIGFuZCBsYXRlciB0YXJnZXRzIHNvIG5vdyBqdXN0ICJtYWtlIGFpeCIgb3Ig Im1ha2UKLWFpeCtzc2wiIGNhbiBiZSB1c2VkLiAgRXhjZXB0IG5vdCB0aGUgZ2NjIG9uZXMgYXMg dGhleSBoYXZlIHNvbWUgcXVpcmtzIHNvCi1JJ2QgcmF0aGVyIG5vdCBkaXN0dXJiIHRoZW0uICBU ZXN0ZWQgdGhpcyBvbiBBSVggNS4zLgotbWFrZWZpbGUsIDI4IEF1ZyAyMDA5LgotCi1Gcm9tIEtp bmphbCBTaGFoLCBhIGNvcnJlY3Rpb24gdG8gdGhlIExpbnV4IG1ha2VmaWxlIGVudHJ5IHRoYXQg YWxsb3dzIGl0Ci1maW5kIHRoZSA2NC1iaXQgY3Vyc2VzIG9yIG5jdXJzZXMgbGlicmFyeS4gIG1h a2VmaWxlLCAyOSBBdWcgMjAwOS4KLQotUmVuYW1lZCBhaXg0WzIzXTogdG8gb2xkYWl4NFsyM106 IGluIG1ha2VmaWxlIHRvIGZpeCB0aGUgd2FybmluZyBtZXNzYWdlcwotSSBkaWRuJ3Qgbm90aWNl IGJlZm9yZS4gIEkgZGlkbid0IHdhbnQgdG8gcmVtb3ZlIHRoZW0gYmVjYXVzZSB0aGV5IGhhdmUK LXNvbWUgc3BlY2lhbCB0aGluZ3MgdGhhdCBtaWdodCBzdGlsbCBiZSBuZWVkZWQsIGlmIGFueWJv ZHkgc3RpbGwgaGFzIHRoZXNlIAotQUlYIHZlcnNpb25zLiAgbWFrZWZpbGUsIDI5IEF1ZyAyMDA5 LgotCi1CdWlsdCBvbiBSSEVMIDUuMyA2NC1iaXQsIHJlZ3VsYXIgYW5kIHdpdGggT3BlblNTTCAw LjkuOGUuICAzMSBBdWcgMjAwOS4KLQotQnVpbHQgb24gTmV0QlNEIDUuMC4xL2kzODYsIHJlZ3Vs YXIgYW5kIHdpdGggT3BlblNTTCAwLjkuOS1kZXYsIDEgU2VwIDIwMDkuCi0KLUNoYW5nZWQgU1NM IG1lc3NhZ2UgdG8gbWVudGlvbiBMRF9MSUJSQVJZX1BBVEggKFNvbGFyaXMpLCBTSExJQl9QQVRI IChIUC1VWCksCi1MSUJQQVRIIChBSVgpLCBvciBMRF9MSUJSQVJZX1BBVEggKExpbnV4KS4gIGNr X3NzbC5jLCAzIFNlcCAyMDA5Ci0KLU5vdGljZWQgdGhhdCAibWFrZSBsaW51eCtvcGVuc3NsIiBm YWlscyB0byBpbmNsdWRlIC1sdXRpbCBhIGxpbmsgdGltZSwgd2hpY2gKLWl0IG5lZWRzIGZvciBv cGVucHR5KCkuICBUaGF0J3MgYmVjYXVzZSB0aGlzIHRhcmdldCBpcyBvYnNvbGV0ZS4gIEkgcmVu YW1lZAotaXQgdG8gYmUgb2xkbGludXgrb3BlbnNzbCBhbmQgYWRkZWQgbGludXgrb3BlbnNzbCBh cyBhIHN5bm9ueW0gZm9yCi1saW51eCtzc2wuICBtYWtlZmlsZSwgMyBTZXAgMjAwOS4KLQotVGVz dGVkIGxpbnV4K29wZW5zc2wremxpYitzaGFkb3crcGFtLCBpdCdzIE9LLiAgQWxzbyBsaW51eCtr cmI1LiAgQWxzbwotbGludXgra3JiNStzc2wuICBtYWtlZmlsZSwgMyBTZXAgMjAwOS4KLQotVHJp ZWQgYnVpbGRpbmcgb24gU29sYXJpcyA5IHdpdGggT3BlblNTTCAwLjkuOGsgd2l0aAotc29sYXJp czlnK29wZW5zc2wrc2hhZG93K3BhbSt6bGliLCBpdCBmYWlsZWQgbGlrZSBzbzoKLQotICBja19z c2wuYzoyODc1OiBlcnJvcjogY29uZmxpY3RpbmcgdHlwZXMgZm9yICdpbmV0X2F0b24nCi0gIC91 c3IvaW5jbHVkZS9hcnBhL2luZXQuaDo1MjogcHJldmlvdXMgZGVjbGFyYXRpb24gb2YgJ2luZXRf YXRvbicgd2FzIGhlcmUKLSAgbWFrZVsyXTogW2NrX3NzbC5vXSBFcnJvciAxCi0gIG1ha2VbMl06 IExlYXZpbmcgZGlyZWN0b3J5IGhtdC9zaXJpdXMxL3BydjAva2QvZmRjL3NvbGFyaXM5c3NsJwot ICBtYWtlWzFdOiBbc29sYXJpczJ4ZytvcGVuc3NsK3psaWIrcGFtK3NoYWRvd10gRXJyb3IgMgot ICBtYWtlWzFdOiBMZWF2aW5nIGRpcmVjdG9yeSBobXQvc2lyaXVzMS9wcnYwL2tkL2ZkYy9zb2xh cmlzOXNzbCcKLSAgbWFrZTogW3NvbGFyaXM5ZytvcGVuc3NsK3NoYWRvdytwYW0remxpYl0gRXJy b3IgMgotCi1UaGUgcHJvYmxlbSB3YXMgY2F1c2VkIGJ5IGluY2x1ZGluZyBhbiBpbmV0X2F0b24o KSBmdW5jdGlvbiBja19zc2wuYyBmb3IKLXRoZSBiZW5lZml0IG9mIHBsYXRmb3JtcyB0aGF0IGRv bid0IGhhdmUgb25lIGluIHRoZWlyIGxpYnJhcmllcy4gIFRoaXMgaXMKLWRlZmVhdGVkIGJ5IGlu Y2x1ZGluZyBOT19EQ0xfSU5FVF9BVE9OIGluIEtGTEFHUy4gIEkgYWRkZWQgdGhpcywgYnV0IHRo ZW4KLUkgdGhvdWdodCBpdCB3b3VsZCBiZSBhIGdvb2QgaWRlYSB0byBhdXRvbWF0aWNhbGx5IHNl bnNlIHRoZSBPcGVuU1NMCi12ZXJzaW9uIHNvIHdlIGNhbiBhdXRvbWF0aWNhbGx5IHNldCBPUEVO U1NMXzA5NyBvciBPUEVOU1NMXzA5OCByYXRoZXIgdGhhbgotYm9tYmluZyBvdXQsIHNvIEkgYWRk ZWQgY29kZSB0byBkbyB0aGF0IHRvbywgYW5kIGFsc28gdG8gc2V0IHRoZSBTb2xhcmlzCi12ZXJz aW9uIG51bWJlcjogOSwgMTAsIG9yIDExLiAgVGhlIG5ldyBlbnRyeSBpcyBzb2xhcmlzOWcrb3Bl bnNzbC4KLWNrY2RlYi5oLCBtYWtlZmlsZSwgMyBTZXAgMjAwOS4KLQotRml4ZWQgYSBjb21wbGFp bnQgaW4gY2t1ZmlvLmMgYWJvdXQgaW1wbGljaXQgZGVjbGFyYXRpb24gb2YgaW5pdGdyb3Vwcy4K LWNrdWZpby5jLCA0IFNlcCAyMDA5LgotCi1CdWlsdCBvbiBTb2xhcmlzIDEwIHdpdGggZ2NjIGFu ZCBTdW4gQ0MgdXNpbmcgbmV3IHNvbGFyaXN7OSwxMCwxMX0gdGFyZ2V0Ci10aGF0IGlzIGxpa2Ug dGhlIG5ldyBzb2xhcmlzezksMTAsMTF9ZyBvbmUgYnV0IHdpdGhvdXQgdGhlIGdjY2lzbXMuCi1t YWtlZmlsZSwgNCBTZXAgMjAwOS4KLQotQ2hhbmdlZCBzb2xhcmlzezksMTAsMTF9Zytzc2wgdGFy Z2V0IHRvIHNldCBvbmx5IHRoZSBTU0wtc3BlY2lmaWMgdGhpbmdzIGFuZAotdGhlbiBjaGFpbiB0 byB0aGUgbWFpbiBzb2xhcmlzezksMTAsMTF9ZyB0YXJnZXQuICBUZXN0ZWQgT0sgb24gU29sYXJp cyA5IGFuZAotMTAuICBtYWtlZmlsZSwgNCBTZXAgMjAwOS4KLQotQ3JlYXRlZCBzb2xhcmlzezks MTAsMTF9K3NzbCB0YXJnZXQgdGhhdCBpcyBleGFjdGx5IGxpa2UgdGhlCi1zb2xhcmlzezksMTAs MTF9Zytzc2wgZXhjZXB0IGl0IGNoYWlucyB0byB0aGUgc29sYXJpc3s5LDEwLDExfSB0YXJnZXQK LWluc3RlYWQgb2YgdGhlIHNvbGFyaXN7OSwxMCwxMX1nIG9uZS4gIFRoYXQgaXMsIGl0IGJ1aWxk cyBhbiBTU0wgdmVyc2lvbiBvZgotQy1LZXJtaXQgdXNpbmcgU3VuIENDIHJhdGhlciB0aGFuIGdj Yy4gIG1ha2VmaWxlLCA0IFNlcCAyMDA5LgotCi1UcmllZCBidWlsZGluZyBvbiBIUC1VWCAxMC4y MCwgYnVuZGxlZCAobm9uLUFOU0kpIGNvbXBpbGVyICgibWFrZQotaHB1eDEwMDAiKS4gIFRoaXMg ZmFpbGVkIHVudGlsIEk6Ci0KLSAuIE1vdmVkIGEgc3RydWN0IGluaXRpYWxpemF0aW9uIG91dCBv ZiBzZXRleHRlcm4oKSwgY2t1dXMzLmMuCi0gLiBSZW1vdmVkIGFuIEFOU0lpc20gZnJvbSB0aGUg ZGVjbGFyYXRpb24gb2Ygc2lnY2hsZF9oYW5kbGVyKCkgaW4gY2t1dGlvLmMKLSAuIEFkZGVkIGEg Y2FzdCB0byBzdHJjbXAoKSBpbiB6dnVzZXIoKSwgY2t1ZmlvLmMuCi0KLUJ1aWxkcyBPSyBub3cu ICBCdWlsdCBPSyB3aXRoICJocHV4MTAwMG8iICh0aGUgQU5TSSBjb21waWxlcikgdG9vLgotQW5k IHdpdGggImhwdXgxMDAwZ2NjIi4gIENvdWxkbid0IHRlc3QgImhwdXgxMDAwbytvcGVuc3NsIi4g IDIxIFNlcCAyMDA5LgotCi1UaGUgU29ueSBQbGF5c3RhdGlvbiAyIGFuZCAzIGFyZSA2NC1iaXQg UG93ZXJQQyBwbGF0Zm9ybXMgdGhhdCBjYW4gcnVuIExpbnV4Ci1pZiBpdCBpcyBpbnN0YWxsZWQg YXMgYW4gIm90aGVyIE9TIiBvbiBpdHMgaGFyZCBkaXNrOyBhbmQgdGhlIExpbnV4IGtlcm5lbAot c2luY2UgMi42LjIxIHN1cHBvcnRzIHRoZSBQUzMgd2l0aG91dCBhbnkgcGF0Y2hpbmcgcmVxdWly ZWQuICBQYXdlbCBSb2dvY3oKLXJlcG9ydGVkIHRoYXQgIm1ha2UgbGludXhwcGMiIChvbmUgb2Yg dGhlIG9sZCB0YXJnZXRzIHRoYXQgaGFzIG5vdCB5ZXQgYmVlbgotaW50ZWdyYXRlZCBpbnRvIHRo ZSBtYWluICJsaW51eCIgdGFyZ2V0KSBjb21waWxlcyBPSyBvbiAyLjYuMjkteWRsNjEuMwotKFll bGxvdyBEb2cgTGludXggcmVsZWFzZSA2LjIgJ1B5eGlzJyksIGJ1dCBmYWlscyBhdCBsaW5rIHRp bWUgYmVjYXVzZQotJ29wZW5wdHknIGlzbid0IGZvdW5kLCBiZWNhdXNlIC1sdXRpbCB3YXMgbm90 IGluY2x1ZGVkLCBiZWNhdXNlIHRoYXQgcGFydAotd2FzIGFkZGVkIG9ubHkgdG8gdGhlIG1haW4g bGludXggdGFyZ2V0LiAgSSBhc2tlZCBoaW0gdG8gdHJ5ICJtYWtlIGxpbnV4IgotYW5kIGhlIHNl bnQgYmFjayBhIHRyYW5zY3JpcHQgaW4gd2hpY2ggdGhlcmUgd2VyZSB0aG91c2FuZHMgb2YgZXJy b3JzIGZyb20KLXRoZSBjdXJzZXMgY29kZSBja3V1c3guYy4gIExhdGVyIEkgdHJpZWQgaXQgbXlz ZWxmIGFuZCBpdCBidWlsdCB3aXRob3V0IGEKLWhpdGNoLiAgTXkgdGhlb3J5IGlzIHRoYXQgYmV0 d2VlbiB0aGVuIGFuZCBub3csIGEgbWlzc2luZyBwaWVjZSBvZiB0aGUKLW5jdXJzZXMgbGlicmFy eSAoL3Vzci9pbmNsdWRlL25jdXJzZXN3KSB3YXMgaW5zdGFsbGVkLiAgMjEgU2VwIDIwMDkuCi0K LUhQLVVYIDkuMDUgb24gUEEtUklTQyA5MDAwLzcxMiBidWlsZGluZyB3aXRoIGhwdXgwOTAwIChi dW5kbGVkIGNvbXBpbGVyKToKLSAuIGNrdXRpby5jIGNvbXBpbGF0aW9uIGZhaWxlZCB3aXRoIFBF TkRJTiBhbmQgRkxVU0hPIG5vdCBkZWZpbmVkIGluCi0gICBwdHlfbWFrZV9yYXcoKS4gIEkgZHVt bWllZCBkZWZpbml0aW9ucyBmb3IgdGhlbSB0byBoYW5kbGUgdGhpcyBzaXR1YXRpb24KLSAgIG9u IHRoaXMgb3IgYW55IG90aGVyIHBsYXRmb3JtIHdoZXJlIGl0IG1pZ2h0IGNyb3AgdXAuCi0gICBj a3V0aW8uYywgMjQgU2VwIDIwMDkuCi0gLiBEaXR0byBmb3IgdGhlIFBUWSBtb2R1bGUsICsgSU1B WEJFTC4gIGNrdXB0eS5jLCAyNCBTZXAgMjAwOS4KLSAuIFJlZmVyZW5jZXMgdG8gZW5kdXNlcnNo ZWxsKCkgd2VyZSBmYXRhbCBpbiB0aGUgYnVuZGxlZCBjb21waWxlci4gIENoYW5nZWQKLSAgIHRo ZSBocHV4MDkwMCB0YXJnZXQgdG8gZGVmaW5lIE5PRENMRU5EVVNFUlNIRUxMLCBhbmQgcHV0IGEg c3BlY2lhbCBjYXNlCi0gICBpbiBja3VmaW8uYyB0byBub3QgcHV0IGEgY2FzdCBpbiBmcm9udCBv ZiB0aGUgY2FsbCBpZiBOT0RDTEVORFVTRVJTSEVMTAotICAgaXMgZGVmaW5lZC4gIE5vdyBpdCBi dWlsZHMgYW5kIGxpbmtzIE9LLiAgbWFrZWZpbGUsIGNrdWZpby5jLCAyNCBTZXAgMjAwOS4KLQot SFAtVVggOS4wNSBvbiBQQS1SSVNDIDkwMDAvNzEyIGJ1aWxkaW5nIHdpdGggaHB1eDA5MDBvIChv cHRpbWl6aW5nIGNvbXBpbGVyKToKLSAuIFdhcm5pbmdzIGluIGNrdXRpby5jIGF0IGxpbmUgMTQ4 NjAgYWJvdXQgYXJndW1lbnRzIHRvIHNlbGVjdCAocG9pbnRlcnMKLSAgIGFyZSBub3QgYXNzaWdu bWVudC1jb21wYXRpYmxlKS4gICJtYW4gc2VsZWN0IiBzYXlzIGFyZ3VtZW50cyBhcmUgaW50cy4K LSAgIERlZmluaW5nIElOVFNFTEVDVCBmaXhlcyB0aGVzZSB3YXJuaW5ncyBidXQgcmVzdWx0cyBp biBmYXRhbCBlcnJvcnMgbGF0ZXIKLSAgIGFyb3VuZCBsaW5lIDE0ODgxIGFuZCBvdGhlcnMgaW4g dGhlIGFyZWEgaW52b2x2aW5nIEZEX1NFVC4gIFRoaXMgd2FzIHRvbwotICAgaW52b2x2ZWQgc28g SSBwdXQgaXQgYmFjayBhcyBpdCB3YXMuICAyNCBTZXAgMjAwOS4KLQotQnVpbHQgT0sgb24gU29s YXJpcyAxMCB3aXRoIFN1biBDQy4gIEEgY291cGxlIHdhcm5pbmdzIGFib3V0IGltcGxpY2l0Ci1m dW5jdGlvbiBkZWNsYXJhdGlvbnMgZm9yIGN1cnNlcyByb3V0aW5lcyBiZWNhdXNlIGFwcGFyZW50 bHkgdGhleSBhcmVuJ3QKLWRlY2xhcmVkIGluIGN1cnNlcy5oLiAgVHVmZi4gIDI1IFNlcCAyMDA5 LgotCi1UcmllZCBidWlsZGluZyBvbiBTb2xhcmlzIDEwIHdpdGggU3VuIENDIGFuZCBPcGVuU1NM IDAuOS44aywgYW5kIHRoaXMKLXVuY292ZXJlZCB2YXJpb3VzIGxvb3NlIGVuZHMgaW4gdGhlIHNv bGFyaXM5K29wZW5zc2wgdGFyZ2V0LCB3aGljaCBJIGZpeGVkLgotbWFrZWZpbGUsIDI1IFNlcCAy MDA1LgotCi1GaXhlZCBmb3VyIHR5cG9zIGluIHByaW50ZnMgaW4gY2tfc3NsLmMsIFwlIGluc3Rl YWQgb2YganVzdCAlLiAgMjUgU2VwIDIwMDkuCi0KLVNxdWVsY2hlZCAyMC1zb21lIGNvbXBsYWlu dHMgYWJvdXQgYSBjaGFyYWN0ZXIgYXJyYXkgYmVpbmcgcmVmZXJyZWQgdG8KLWRpcmVjdGx5IGlu c3RlYWQgb2YgYnkgYSBwb2ludGVyLCBwbHVzIHNldmVyYWwgb3RoZXIgc2ltaWxhciBuaXRzIHRv IGdldCByaWQKLW9mIGFsbCB0aGUgY29tcGlsYXRpb24gd2FybmluZ3Mgb24gU29sYXJpcyAxMCB3 aXRoIFN1biBDIDUuOCBQYXRjaCAxMjEwMTUtMDYKLTIwMDcvMTAvMDMuICBja2N0ZWwuYywgY2tj dGVsLmgsIDI1IFNlcCAyMDA5LgotCi1CdWlsdCB0aGUgcmVzdWx0IG9uIHRoZSBzYW1lIFNvbGFy aXMgMTAgc3lzdGVtIHdpdGggZ2NjIDQuMi40IHVzaW5nIHRoZQotbmV3IHNvbGFyaTEwZytvcGVu c3NsIHRhcmdldCwgd29ya2luZyBvdXQgYSBmZXcga2lua3MgaGVyZSB0b28uCi1tYWtlZmlsZSwg MjUgU2VwIDIwMDkuCi0KLU1hZGUgY29uc29saWRhdGVkIFNvbGFyaXMgOS8xMC8xMSA2NC1iaXQg dGFyZ2V0cyBmb3IgZ2NjLCBzb2xhcmlzOWc2NCwKLXNvbGFyaXMxMGc2NCwgc29sYXJpczExZzY0 LCB0ZXN0ZWQgb24gU29sYXJpcyAxMCBTcGFyYy4gbWFrZWZpbGUsIDI1IFNlcCAyMDA5LgotCi1N YWRlIGNvbnNvbGlkYXRlZCBTb2xhcmlzIDkvMTAvMTEgNjQtYml0IHRhcmdldHMgZm9yIFN1biBj Yzogc29sYXJpczlfNjQsCi1zb2xhcmlzMTBfNjQsIHNvbGFyaXMxMV82NC4gIFRoZXNlIHNpbXBs eSBzZXQgYSBjb3VwbGUgZmxhZ3MgYW5kIGNoYWluIHRvCi10aGUgbWFpbiBzb2xhcmlzOSB0YXJn ZXQuICBtYWtlZmlsZSwgMjUgU2VwIDIwMDkuCi0KLVJlbW92ZWQgYSBidW5jaCBvZiBvbGQgc3Vw ZXJmbHVvdXMgU29sYXJpcyA5IGFuZCAxMCB0YXJnZXRzOiBvbGRzb2xhcmlzOSwKLW9sZHNvbGFy aXM5bGZzLCBzb2xhcmlzOWc2NCBzb2xhcmlzOWdfNjQsIG9sZHNvbGFyaXMxMCBvbGQgc29sYXJp czEwbGZzLAotb2xkc29sYXJpczEwK29wZW5zc2wsIG9sZHNvbGFyaXMxMGcrb3BlbnNzbCwgc29s YXJpczEwXzY0LCBvbGRzb2xhcmlzMTBnLAotc29sYXJpczEwZ182NCwgc29sYXJpczEwZzY0LiAg VGhlcmUgYXJlIHN0aWxsIHBsZW50eSBtb3JlIHRvIHBydW5lIGJ1dCBpdCdzCi1hIHN0YXJ0LiAg bWFrZWZpbGUsIDI1IFNlcCAyMDA5LgotCi1BZGRlZCBvciBmaXhlZCBzb21lIG1pc3NpbmcgcHJv dG90eXBlcyBpbiBja2N0ZWwuaDoKLWZ3ZHhfc2VuZF94YXV0aF90b194c2VydmVyKCksIGZ3ZHhf cGFyc2VfZGlzcGxheW5hbWUuICAyNSBTZXAgMjAwOS4KLQotSW1wcm92ZWQgdGhlIGluc3RydWN0 aW9ucyBmb3IgYnVpbGRpbmcgc2VjdXJlIHZlcnNpb25zIGluIHRoZSBtYWtlZmlsZSwKLXVzaW5n IHRoaXMgZXhhbXBsZToKLQotICBtYWtlIHNvbGFyaXM5K29wZW5zc2wgIlNTTElOQz0tSS9vcHQv b3BlbnNzbC0wLjkuOGsvaW5jbHVkZSIgXAotICAgIlNTTExJQj0tTC9vcHQvb3BlbnNzbC0wLjku OGsvbGliIgotCi1tYWtlZmlsZSwgaHR0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUvc2VjdXJpdHku aHRtbCwgMjUgU2VwIDIwMDkuCi0KLUJ1aWx0IG9uIEhQLVVYIDExLjExLCAyNiBTZXAgMjAwOToK LSAuIG1ha2UgaHB1eDExMDAgKG9rKQotIC4gbWFrZSBocHV4MTEwMGdjYyAob2spCi0gLiBtYWtl IGhwdXgxMTAwbyAoZ2V0cyBhIGxvdCBvZiB3YXJuaW5ncyBhYm91dCBzZW5kcGF0aCBhbmQgc2Vu ZGZpbGUsCi0gICAgYmVjYXVzZSB0aGV5IGFyZSBhbHNvIGRlY2xhcmVkIGluIDxzeXMvc29ja2V0 Lmg+LCBidXQgYnVpbGRzIE9LKQotIC4gbWFrZSBocHV4MTAwMGdjYytvcGVuc3NsIFwKLSAgICBT U0xJTkM9LUkvb3B0L29wZW5zc2wvaW5jbHVkZSBTU0xMSUI9LUwvb3B0L29wZW5zc2wvbGliCi0K LU5vdGU6IHNlbmRwYXRoIGFuZCBzZW5kZmlsZSBhcmUgbm90IEtlcm1pdCBzeW1ib2xzLiAgVGhl IHdhcm5pbmdzIGFyZSBjb21pbmcKLWZyb20gc29ja2V0Lmg6ICdSZWRlY2xhcmF0aW9uIG9mICJz ZW5kZmlsZSIgd2l0aCBhIGRpZmZlcmVudCBzdG9yYWdlIGNsYXNzCi1zcGVjaWZpZXInLiAgVGhp cyBpcyBub3RoaW5nIG5ldzsgc2VlIG5vdGVzIG9mIDItNCBKYW4gMjAwNS4KLQotRnJvbSBQZXRl ciBFaWNoaG9ybjoKLSAuIFVwZGF0ZSB0byBtYWtlZmlsZSB0byBtYWtlIGN1cnJlbnQgY29kZSBi dWlsZCBPSyBvbiBIUC1VWCA4LjAwLgotIC4gQ2hhbmdlcyB0byBmb3JtYXQgb2Ygc29tZSBoaW50 cyB0byBtYWtlIHRoZW0gbW9yZSBjb3B5LWFuZC1wYXN0YWJsZS4KLW1ha2VmaWxlLCBja3V1NS5j LCAyOCBTZXAgMjAwOS4KLQotRnJvbSBQZXRlciBFaWNoaG9ybjogQ2hhbmdlcyB0byBIUC1VWCA3 LjAgdGFyZ2V0IHRvIGluY3JlYXNlIHRoZSBzd2l0Y2ggdGFibGUKLXN0YWNrIHNpemUsIHdoaWNo IHdhcyBvdmVyZmxvd2luZy4gIG1ha2VmaWxlLCAzMCBTZXAgMjAwOQotCi1IUC1VWCA2LjUgKDE5 ODkpLCAibWFrZSBocHV4MDY1MHRjcGMiLi4uICg4OjE5Li4uKSAgTmVlZGVkIHRvIG5vdCBpbmNs dWRlCi1hcnBhL2luZXQuaCAod2hpY2ggZG9lc24ndCBleGlzdCkgYW5kIG5vdCB1c2UgaG9zdCBh ZGRyZXNzIGxpc3RzIChhZGQKLS1ETk9IQUREUkxJU1QpLCB3aGljaCBnZXRzIHVzIHBhc3QgY2tj bmV0LmMsIGJ1dCBpbiBja2NmdHAuYyB3ZSBib21iIG91dCBvbgotRkRfU0VUU0laRSB1bmRlZmlu ZWQuICBTb21laG93IHdlIHdvcmtlZCBhcm91bmQgdGhpcyBpbiBja2NuZXQuYy4gIFBhdGNoZWQK LWluIGEgZGVmaW5pdGlvbiBpbiBja2NmdHAuYywgYW5kIGFsc28gYWRkZWQgLURJTlRTRUxFQ1Qg dG8gY29tcGlsZXIgZmxhZ3MuCi1Db21waWxlcyBvaywgYm9tYnMgYXQgbGluayB0aW1lIG9uIGJj b3B5LCBiemVybywgRkRfWkVSTywgRkRfU0VULCBGRF9JU1NFVC4KLU5vdyBpdCBjb21waWxlcyBh bmQgbGlua3MgT0sgYnV0IGR1bXBzIGNvcmUgd2hlbiBzdGFydGVkLiAgQWRkZWQKLS1ETk9DS0dF VEZRSE9TVCwgcmVidWlsdCBmcm9tIHNjcmF0Y2ggKHRha2VzIDM1IG1pbnV0ZXMpLiAgSXQgc3Rh cnRzIE9LLCBidXQKLWl0IGR1bXBzIGNvcmUgd2hlbiBnaXZlbiBhICJ0ZWxuZXQgeHh4IiBjb21t YW5kLCB3aGVyZSB4eHggaXMgYSBob3N0bmFtZS4KLUhvd2V2ZXIsIGl0IHdvcmtzIE9LIGlmIGFu IElQIGFkZHJlc3MgaXMgdXNlZDogInRlbG5ldCAxMjMuNDUuNi43OCIuICBJdAotdG9vayBhbGwg ZGF5IHRvIHRyYWNrIHRoaXMgZG93biwgYnV0IG5vdyBpdCdzIGZpeGVkIChzZWUgdGhlICNpZmRl ZiBIUFVYNgotc2VjdGlvbnMgb2YgY2tjbmV0LmMpLiAgU28gbm93IChmb3IgdGhlIGZpcnN0IHRp bWUsIEkgdGhpbmspIHdlIGhhdmUgYm90aAotdGVsbmV0IGFuZCBmdHAgaW4gSFAtVVggNi54LCBp ZiBhbnlvbmUgY2FyZXMuICBja2NuZXQuW2NoXSwgY2tjZnRwLmMsCi1tYWtlZmlsZSwgMiBPY3Qg MjAwOS4KLQotQ2hhbmdlZCBkZWZhdWx0IFNFVCBURVJNSU5BTCBUWVBFIHR5cGUgZm9yIEs5NSBm cm9tIHZ0MzIwIHRvIHZ0MjIwLiAgVGhpcyBpcwotYmVjYXVzZSBVbml4IE9TJ3Mgc3VjaCBhcyBT b2xhcmlzIGhhdmUgZHJvcHBlZCB2dDMyMCBhcyBhIHRlcm1pbmFsIHR5cGUuCi1zZXR0cm10eXAo KSwgY2t1dXM3LmMsIDUgT2N0IDIwMDkuCi0KLUkgbW92ZWQgdGhlIFBVVEVOViBjb21tYW5kIGNv ZGUsIHdoaWNoIHdhcyBpbmxpbmUsIHRvIGEgZnVuY3Rpb24sIGRvcHV0ZW52KCkuCi1ja3V1c1ty N10uYywgY2t1dXNyLmgsIDUgT2N0IDIwMDkuCi0KLUNoYW5nZWQgdGhlIFVOSVggdmVyc2lvbiBv ZiBTRVQgVEVSTUlOQUwgVFlQRSB0byB0YWtlIGEgdmFsdWUgYW5kIHRoZW4gZG8KLXRoZSBlcXVp dmFsZW50IG9mICJleHBvcnQgVEVSTT12YWx1ZSIgYnkgY2FsbGluZyBkb3B1dGVudigpLiAgVGhp cyBzZXRzCi1cJChURVJNKSBjb3JyZWN0bHkgYW5kIHBhc3NlcyBpdHMgdmFsdWUgYWxvbmcgdG8g aW5mZXJpb3IgcHJvY2Vzc2VzLgotSG93ZXZlciwgdG8gbWFrZSB0aGlzIHRha2UgZWZmZWN0IHdp dGhpbiBLZXJtaXQgaXRzZWxmIChmb3IgdGhlIGZ1bGxzY3JlZW4KLWZpbGUgdHJhbnNmZXIgZGlz cGxheSBhbmQgZm9yIHRoZSBTQ1JFRU4gY29tbWFuZCwgQ3RybC1MLCBldGMpIEkgYWxzbyBoYWQg dG8KLXJlaW5pdGlhbGl6ZSB0aGUgY3Vyc2VzIGRhdGFiYXNlLCB3aGljaCBpcyB0cmlja3kgYmVj YXVzZSBub3JtYWxseSBpZiB5b3UKLWZlZWQgaXQgYW4gdW5rbm93biB0ZXJtaW5hbCBuYW1lLCBp dCBqdXN0IGV4aXRzLiAgY2t1dXM3LmMsIDUgT2N0IDIwMDkuCi0KLUNoYW5nZWQgdGhlIGxpdHRs ZS1rbm93biBhbmQgbGl0dGxlLXVzZWQgUkVTRVQgY29tbWFuZCAod2hpY2ggY2xvc2VzIGFsbAot b3BlbiBmaWxlcykgdG8gYWxzbyBwdXQgY29tbWFuZCBlY2hvaW5nIGJhY2sgdG8gbm9ybWFsIGlu IGNhc2UgaXQgZ290Ci1tZXNzZWQgdXAgc29tZWhvdyAoYXMgaW4gSFAtVVggNi41LCB1cG9uIHJl dHVybmluZyBmcm9tIFBVU0gpLgotY2t1dXN4LmMsIDUgT2N0IDIwMDkuCi0KLUZvciBVbml4LCBp bmNyZWFzZWQgc3RyaW5nIGJ1ZmZlciBzaXplcyBmb3Igd2lsZGNhcmQgZXhwYW5zaW9uIGZvciBh bGwKLXBsYXRmb3JtcyB0aGF0IGhhdmUgQklHQlVGT0sgZGVmaW5lZCBmcm9tIDUwMDAwMCAoMC41 TSkgdG8gMTAwMDAwMDAgKDEwTSkKLWJ5dGVzLCBhbmQgZm9yIDY0LWJpdCBidWlsZHMgdG8gMjAw MDAwMDAwMCAoMkcpIGJ5dGVzLiAgTm8gcG9pbnQgbWFraW5nCi1pdCBiaWdnZXIgdGhhbiB0aGF0 IGJlY2F1c2UgbWFsbG9jJ3MgYXJndW1lbnQgaXMgYSBzaXplX3QsIHdoaWNoIGlzIGFuIGludC4K LWNrdWZpby5jLCA1IE9jdCAyMDA5LgotCi1CdWlsdCBvbiBNYWMgT1MgWCAxMC40LjExLCByZXF1 aXJlZCBvbmUgbWlub3IgYWRqdXN0bWVudCB0byB0aGUgbWFrZWZpbGUKLSgtRE5PRENMSU5JVEdS T1VQUykuICBUaGlzIHdhcyB1c2luZyB0aGUgbWFjb3N4MTAuNSB0YXJnZXQsIHdoaWNoIGlzCi1z dXBwb3NlZCB0byBiZSB1bml2ZXJzYWwgbGlrZSB0aGUgbGludXggYW5kIG5ldGJzZCB0YXJnZXRz LCBidXQgbm90IHlldAotcHJvdmVuLiAgQWxzbyBidWlsdCBhIDY0LWJpdCB2ZXJzaW9uICgtbXBv d2VycGM2NCAtbWNwdT1HNSAtbXR1bmU9RzUKLS1hcmNoIHBwYzY0KTsgaXQgY29tcGlsZXMgYW5k IGxpbmtzIE9LIGJ1dCB3b24ndCBzdGFydDogIkJhZCBDUFUgVHlwZQotaW4gZXhlY3V0YWJsZSIu ICBGaXggbGF0ZXIuLi4gIG1ha2VmaWxlLCA1IE9jdCAyMDA5LgotCi1DaGFuZ2VzIGZyb20gU2V0 aCBUaGVyaWF1bHQgdG8gc3VwcHJlc3Mgc2lnbmVkIHZzIHVuc2lnbmVkIGNoYXIgd2FybmluZ3Mg aW4KLU1hYyBPUyAxMC41LjggZnJvbSBnY2M0LCBhbmQgYSBuZXcgbWFrZWZpbGUgdGFyZ2V0IGZv ciBNYWMgT1MgWCAocHJlc3VtYWJseQotMTAuMy45IG9yIGxhdGVyKSArIEtlcmJlcm9zIDUgYW5k IE9wZW5TU0wuICBja3V0aW8uYywgY2t1YXRoLmMsIGNrY3RlbC5jLAotY2tjbmV0LmMsIGNrY2Z0 cC5jLCBja19jcnAuYywgbWFrZWZpbGUsIDYgT2N0IDIwMDkuCi0KLSAgTGF0ZXIgSSBoYWQgdG8g YmFjayBvdXQgb2YgdGhlc2UsIGJlY2F1c2UgYWx0aG91Z2ggaXQgbWFkZSBmb3IgYQotICBjbGVh biBidWlsZCwgaW4gdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIFNTTCBjb25uZWN0aW9ucyBkaWRu J3Qgd29yay4KLQotVHVlIE9jdCAgNiAxNzoyMzoyNyAyMDA5Ci1GVFAgYWRkcmVzcyByZXNvbHV0 aW9uIGlzIGJyb2tlbiwgYnV0IGZ0cF9ob29rdXAoKSBoYXNuJ3QgY2hhbmdlZC4KLVNvLi4uIChz ZWUgdGhlICNpZmRlZiBIUFVYNiBzZWN0aW9ucyBvZiBja2NuZXQuYykgIChJIGRpZCwgYW5kIEkg cm9sbGVkCi1iYWNrIHNvbWUgb2YgdGhlIGNoYW5nZXMgZnJvbSB0aGUgb3RoZXIgZGF5LCBidXQg aXQgbWFkZSBubyBkaWZmZXJlbmNlLikKLVB1dHRpbmcgYmFjayB0aGUgY2tjZnRwLmMgZnJvbSBh IGZldyB3ZWVrcyBhZ28gbWFrZXMgbm8gZGlmZmVyZW5jZS4KLVB1dHRpbmcgYmFjayB0aGUgY2tj bmV0LmMgZnJvbSBhIGZldyB3ZWVrcyBhZ28gbWFrZXMgbm8gZGlmZmVyZW5jZS4KLQotQWRkZWQg cGF0Y2hlcyBmcm9tIFNldGggVGhlcmlhdWx0IHNvIG1hY29zeDEwLjUra3JiNStvcGVuc3NsIHdv dWxkIGJ1aWxkCi1vbiBNYWMgT1MgWCAxMC4zLjkuICBtYWtlZmlsZSwgY2tjZnRwLmMsIDcgT2N0 IDIwMDkuCi0KLUJ1aWx0IHRvZGF5J3MgY29kZSBvbiBMaW51eCBSSEVMNCwgTmV0QlNEIDUuMC4x LCBTb2xhcmlzIDksIGFuZCBNYWMgT1MgWAotMTAuNC4xMSwgYm90aCB3aXRoIGFuZCB3aXRob3V0 IFNTTC4gIFRoZSBOZXRCU0Qgc3lzdGVtIGhhcyBPcGVuU1NMIDAuOS45LWRldi4KLTcgT2N0IDIw MDkuCi0KLUluIE1hYyBPUyBYIDEwLjYsIHRoZSBmb2xsb3dpbmcgc3ltYm9scyBhcmUgdW5yZXNv bHZlZCBhdCBsaW5rIHRpbWU6Ci1fZGVzX2tleV9zY2hlZCwgX2Rlc19uZXdfcmFuZG9tX2tleSwg X2Rlc19lY2JfZW5jcnlwdCwKLV9kZXNfaW5pdF9yYW5kb21fbnVtYmVyX2dlbmVyYXRvciwgX2Rl c19maXh1cF9rZXlfcGFyaXR5LiAgVGhpcyBpcwotd2l0aCBPcGVuU1NMIDAuOS44ay4gIEJ1dCBp dCBkb2Vzbid0IGhhcHBlbiBvbiBvdGhlciBwbGF0Zm9ybXMgdGhhdAotaGF2ZSAwLjkuOGsuCi0K LUFkZGVkIFNFVCBTRVNTSU9OLUxPRyBOVUxMLVRFUk1JTkFURUQtVEVYVC4gIFRoaXMgaXMgZm9y IHRoZSBiZW5lZml0IG9mIGEKLXNwZWVjaCBzeW50aGVzaXplciB0aGF0IHdpbGwgc3BlYWsgYSBs aW5lIG9mIHRleHQgb25seSBhZnRlciByZWNlaXZpbmcgYQotTlVMIGNoYXJhY3Rlci4gIEEgbW9y ZSBnZW5lcmFsIHNvbHV0aW9uIHdvdWxkIGJlIHRvIGRlZmluZSBhIGZpbHRlciBvcgotd2hhdGV2 ZXIsIGJ1dCB3aG8gaGFzIHRpbWUuICBja3V1c1syM3hdLmMsIDcgT2N0IDIwMDkuCi0KLUNvbnNv bGlkYXRlZCBNYWMgT1MgWCB0YXJnZXRzLCBhbmQgcmVtb3ZlZCBleHBlcmltZW50YWwgNjQtYml0 IG9uZXMsIGJlY2F1c2UKLXRoZXkgbmV2ZXIgY291bGQgd29yayBpbiAxMC41IGFuZCBlYXJsaWVy IGJlY2F1c2UgNjQtYml0IGxpYnMgYXJlIG1pc3NpbmcsCi1hbmQgMTAuNiBhbmQgbGF0ZXIgYXJl IDY0LWJpdCBhdXRvbWF0aWNhbGx5LiAgbWFrZWZpbGUsIDggT2N0IDIwMDkuCi0KLUJ1aWx0IG9u IE1hYyBPUyBYIDEwLjYuMS4gIEl0IGNhbWUgb3V0IGF1dG9tYXRpY2FsbHkgYXMgYSA2NC1iaXQg YnVpbGQKLWJlY2F1c2UgX19MUDY0X18gaXMgZGVmaW5lZCBzb21ld2hlcmUgdGhhdCBJIGNhbid0 IGZpbmQuICBCdXQgdGhpcyBleHBsYWlucwotd2h5IHRoZSAwLjkuOGsgb24gMTAuNiBjb21lcyB1 cCB3aXRoIG1pc3Npbmcgc3ltYm9scyB3aGVuIHRoZSAwLjkuOGsgbGliCi0xMC41IChvciBvbiBT b2xhcmlzIG9yIG9uIExpbnV4KSBkb2VzIG5vdDogaXQncyBhIGRpZmZlcmVudCBsaWJyYXJ5OiAi TWFjaC1PCi02NC1iaXQgZHluYW1pY2FsbHkgbGlua2VkIHNoYXJlZCBsaWJyYXJ5IHg4Nl82NCIs IHJhdGhlciB0aGFuICJNYWNoLU8KLWR5bmFtaWNhbGx5IGxpbmtlZCBzaGFyZWQgbGlicmFyeSBw cGMiLiAgUHJvYmFibHkgdGhlIDY0LWJpdCB2ZXJzaW9uIGhhcwotc29tZSB0aGluZ3MgI2lmZGVm J2Qgb3V0LiAgQWRkZWQgLW0zMiB0byB0aGUgQ0ZMQUdTIGFuZCBMTktGTEFHUyBmb3IgdGhlCi1t YWNvc3gra3JiNStvcGVuc3NsIHRhcmdldHMsIGFuZCBpdCBidWlsdCBPSyBvbmUgdGltZS4gIEJ1 dCB0aGVuIHRoZSBlcnJvcnMKLWNhbWUgYmFjay4gIG1ha2VmaWxlLCA4IE9jdCAyMDA5LgotCi1V cGRhdGVkIEMtS2VybWl0IGluc3RhbGxhdGlvbiBmb3IgTWFjIE9TIFggaW4gY2t1d3IuaHRtbCBv biB0aGUgd2Vic2l0ZS4KLTggT2N0IDIwMDkuCi0KLVRyaWVkIHNvbWUgdGhpbmdzIHRvIGdldCBh cm91bmQgdGhlIHByb2JsZW0gd2l0aCBPcGVuU1NMIGluIE1hYyBPUyBYIDEwLjYsCi10byBubyBh dmFpbC4gIEFza2VkIEplZmYuICBIZSBzYWlkLCAiTWFjT1MgWCBubyBsb25nZXIgaW5jbHVkZXMg REVTIGFueXdoZXJlCi1vbiB0aGUgc3lzdGVtLiAgTm90IGZvciBTU0wsIG5vdCBmb3IgS2VyYmVy b3MsIG5vdCBmb3IgYW55dGhpbmcuICBUaGlzIHdpbGwKLWluY3JlYXNpbmdseSBiZWNvbWUgdGhl IHNpdHVhdGlvbiBvbiBuZXcgb3BlcmF0aW5nIHN5c3RlbXMuICBXaW5kb3dzIDcgYW5kCi0yMDA4 IFIyIHdpbGwgYWxzbyBzaGlwIHdpdGggbm8gREVTLiIgIFN1cmUgZW5vdWdoLCB0aGUgTWFjIE9T IFggU2VydmVyCi1VcGdyYWRpbmcgYW5kIE1pZ3JhdGluZyBkb2N1bWVudCBmb3IgMTAuNiBzYXlz LCAiTWFjIE9TIFggU2VydmVyIHYxMC42IGRvZXMKLW5vdCBzdXBwb3J0IHNpbmdsZSBERVMgZW5j cnlwdGlvbi4gSXQgc3VwcG9ydHMgQUVTIDEyOCBhbmQgMjU2IGVuY3J5cHRpb24KLXR5cGVzLiBI b3dldmVyLCBkdXJpbmcgYSBtaWdyYXRpb24gb3IgdXBncmFkZSBmcm9tIHYxMC40IHRvIHYxMC42 LCBzZXJ2ZXJzCi10aGF0IHdlcmUgS2VyYmVyaXplZCBieSB0aGUgdjEwLjUgT3BlbiBEaXJlY3Rv cnkgc2VydmVyIHdpbGwgbm90IHVzZSB0aGUgQUVTCi0xMjggb3IgMjU2IGVuY3J5cHRpb24gdHlw ZXMuIFRvIHVzZSB0aGUgQUVTIDEyOCBvciAyNTYgZW5jcnlwdGlvbiB0eXBlcyB5b3UKLW11c3Qg cmUtS2VyYmVyaXplIGFsbCBzZXJ2ZXJzLiIgIDEyIE9jdCAyMDA5LgotCi1ERVMgYW5kIDNERVMg ZW5jcnlwdGlvbiBjYW4gYmUgZXhjbHVkaW5nIHJlbW92aW5nIHRoZSAtRENLX0RFUyBmbGFnLiAg SQotcmVtb3ZlZCB0aGlzIG9uZSBhbmQgLURMSUJERVMgKGFuZCAtbTMyKSBhbmQgdGhpcyBtYWtl cyBhIHdvcmtpbmcgNjQtYml0Ci12ZXJzaW9uLiAgVGhlbiBJIGFkZGVkIGNvZGUgdG8gdGhlIG1h Y29zeCtrcmI1K29wZW5zc2wgdGFyZ2V0IHRvIHVzZSB0aGVzZQotZmxhZ3MgaWYgdGhlIE1hYyBP UyBYIHZlcnNpb24gd2FzIDEwLjUgb3IgbGVzcyBhbmQgbGVhdmUgdGhlbSBvdXQgZm9yIDEwLjYK LW9yIGxhdGVyLiAgVGVzdGVkIG9uIDEwLjQuMTEgYW5kIDEwLjYuMS4gIEEgYmV0dGVyIHdheSB0 byBkbyBpdCBtaWdodCBoYXZlCi1iZWVuICJubSAtZ2ogbGlic3NsLmR5bGliIHwgZ3JlcCBkZXNf IiwgYnV0IHRoYXQgZ2l2ZXMgdGhlIHNhbWUgcmVzdWx0cyBvbgotMTAuNCBhbmQgMTAuNi4gIEFs c28sIDEwLjYgc3RpbGwgaGFzIC91c3IvaW5jbHVkZS9zc2wvZGVzLmguCi1tYWtlZmlsZSwgMTMg T2N0IDIwMDkuCi0KLU5leHQgaXNzdWU6Ci0gIEluIGZpbGUgaW5jbHVkZWQgZnJvbSBja3V0aW8u YzoxNTY3NDoKLSAgL3Vzci9saWIvZ2NjL2kzODYtcmVkaGF0LWxpbnV4LzMuNC42L2luY2x1ZGUv dmFyYXJncy5oOjQ6MjogI2Vycm9yICJHQ0Mgbm8KLSAgbG9uZ2VyIGltcGxlbWVudHMgPHZhcmFy Z3MuaD4uIgotICAvdXNyL2xpYi9nY2MvaTM4Ni1yZWRoYXQtbGludXgvMy40LjYvaW5jbHVkZS92 YXJhcmdzLmg6NToyOiAjZXJyb3IgIlJldmlzZQotICB5b3VyIGNvZGUgdG8gdXNlIDxzdGRhcmcu aD4uIgotCi1UaGUgcHJvYmxlbSBvY2N1cnMgd2hlbiB0cnlpbmcgdG8gZm9yY2UgYSBub24tQU5T SUMgYnVpbGQgd2l0aCBHQ0MuCi1DaGFuZ2luZyB0aGUgc291cmNlIGZpbGUgdG8gaW5jbHVkZSA8 c3RkYXJnLmg+IGluc3RlYWQgb2YgPHZhcmFyZ3MuaD4KLWRvZXNuJ3QgaGVscCBiZWNhdXNlIGV2 aWRlbnRseSA8c3RkYXJnLmg+IHJlcXVpcmVzIGFuIEFOU0kgQyBjb21waWxlci4KLU5vdGhpbmcg Y2FuIGJlIGRvbmUgYWJvdXQgdGhpcy4gIDEzIE9jdCAyMDA5LgotCi1OZXh0IGlzc3VlOiBDYW4n dCBjb21waWxlIGNrY2Z0cC5jIHdpdGggLUROT0NTRVRTIG9yIC1ETk9TUEw7IHNvbWUKLSNpZmRl Zi8jZW5kaWYgZG9lc24ndCBtYXRjaCB1cC4gIFNpZ2gsIHRoaXMgaXMgdGhlIGhhcmRlc3Qga2lu ZCBvZiB0aGluZyB0bwotZGVidWcuICBUaGVyZSdzIDE3LDYyMiBsaW5lcyBvZiBjb2RlIGluIHRo aXMgbW9kdWxlIGFuZCBubyB0b29sIHRoYXQgSSBrbm93Ci1vZi4uLi4gV2FpdCwgSSB3cm90ZSBv bmUuICBCdXQgaXQgc2hvd3MgYWxsIHRoZSAjaWYvI2lmZGVmLyNpZm5kZWYncyBhbmQKLSNlbmRp ZnMgbWF0Y2hpbmcgdXAganVzdCBmaW5lLiAgQmFja2luZyBvZmYgdG8gY2tjZnRwLmMgb2YgYSBm ZXcgZGF5cyBhZ28KLShiZWZvcmUgY2hhciAvIHVuc2lnbmVkIGNoYXIgY2FzdHMgd2VyZSBhZGRl ZCksIEkgc2VlIHRoYXQgaXQgYnVpbGRzIE9LLCBzbwotSSBiYWNrZWQgb2ZmIHRvIHRoYXQgb25l LCBidXQgcHV0IGJhY2sgdGhlIHNwZWNpYWwgY2FzZSAjaWZkZWYgZm9yIE1BQ09TWDEwMwotZGVj bGFyaW5nIENPTlNUIGdzc19PSURfZGVzYywgYW5kIGl0IGJ1aWxkcyBPSyAodGhlIG90aGVyIHN0 dWZmIHdhcyBwdXJlbHkKLWNvc21ldGljLCB3aGVuIHdpbGwgSSBsZWFybj8pLiAgY2tjZnRwLmMs IDEzIE9jdCAyMDA5LgotCi1Qcm90ZWN0ZWQgY3Z0c3RyaW5nKCkgYW5kIHJlbGF0ZWQgZnVuY3Rp b25zIHdpdGggI2lmZGVmIE5PQ1NFVFMuLiNlbmRpZiwKLWFuZCBkaXR0byBmb3IgdGhlIGNoYXJh Y3Rlci1zZXQgY29udmVyc2lvbiBjb2RlIGluIGRvcmVuYW1lKCkuCi1ja3V1czYuYywgMTMgT2N0 IDIwMDkuCi0KLUZpeGVkIGFuICNlbmRpZiAvKiBUTkNPREUgKi8gdGhhdCB3YXMgYSBsaW5lIHRv byBsb3cgaW4gdHRwdHljbWQoKSwKLWNhdXNpbmcgLUROT05FVCBidWlsZHMgdG8gZmFpbC4gIGNr dXRpby5jLCAxMyBPY3QgMjAwOS4KLQotVGhlcmUgd2FzIGEgcmVmZXJlbmNlIHRvIGRvcHV0ZW52 KCkgdGhhdCB3YXNuJ3QgZ3VhcmRlZCBieSAjaWZuZGVmIE5PUFVURU5WLAotZml4ZWQgaW4gY2t1 dXM3LmMsIDEzIE9jdCAyMDA5LgotCi1Nb3ZlZCBkb3B1dGVudigpIGFuZCBzZXR0ZXJtdHlwKCkg b3V0IG9mIGFuICNpZmRlZiBOT0xPQ0FMIHNlY3Rpb24gYmVjYXVzZQotdGhlc2UgYXJlIHVzZWZ1 bCBldmVuIHdoZW4gbm90IG1ha2luZyBjb25uZWN0aW9ucy4gIGNrdXVzNy5jLCAxMyBPY3QgMjAw OS4KLQotTW92ZWQgaGF2ZWxmcyBkZWNsYXJhdGlvbiBvdXRzaWRlIG9mICNpZmRlZiBOT1hGRVIg YmVjYXVzZSBpdCB3YXMgYWxzbyB1c2VkCi1mb3Igb3RoZXIgdGhpbmdzLiAgY2tjbWFpLmMsIDEz IE9jdCAyMDA5LgotCi1DT1BZIC9QUkVTRVJWRSBkZXBlbmRlZCBvbiBjb2RlIGZyb20gdGhlIEtl cm1pdCBwcm90b2NvbCBtb2R1bGUsIHdoaWNoCi1pcyBvbWl0dGVkIGluIC1ETk9YRkVSIGJ1aWxk cy4gIERpc2FibGVkIENPUFkgL1BSRVNFUlZFIGluIC1ETk9YRkVSCi1idWlsZHMuICBja3V1czYu YywgMTQgT2N0IDIwMDkuCi0KLVNIT1cgUFJPVE9DT0wgY29kZSBmb3IgZXh0ZXJuYWwgcHJvdG9j b2xzIGhhZCB0byBiZSAjaWZkZWYnZCBvdXQgZm9yCi0tRE5PUFVTSCBidWlsZHMuICBja3V1czQu YywgMTQgT2N0IDIwMDkuCi0KLVRoZXJlIHdhcyBzb21lIGNvbmZ1c2lvbiBiZXR3ZWVuICJObyBY WVpNT0RFTSIgYW5kICJObyBleHRlcm5hbCBwcm90b2NvbHMiOwotY2xlYXJlZCB1cCBpbiBja3V1 czMuYywgMTQgT2N0IDIwMDkuCi0KLUFmdGVyIGFsbCB0aGF0LCA4NiBkaWZmZXJlbnQgY29tYmlu YXRpb25zIG9mIGZlYXR1cmUgc2VsZWN0aW9ucyBidWlsdCBPSyBvbgotTGludXguICBBbmQgdGhl IEtlcmJlcml6ZWQgdmVyc2lvbiAoSzUpIHdvcmtzIE9LIG9uIExpbnV4IGZvciBUZWxuZXQgYW5k IEZUUC4KLTE0IE9jdCAyMDA5LgotCi1DaGFuZ2VkIHZlcnNpb24gbnVtYmVyIHRvIDkuMC4gIEFs bCBtb2R1bGVzLCAxNiBPY3QgMjAwOS4KLQotTmVlZCB0byBtYWtlIExPRyBTRVNTSU9OIGxvZyB0 byBhIHR0eS4gIFJpZ2h0IG5vdyAibG9nIHNlc3Npb24KLS9kZXYvdHR5S2V5U2VyaWFsMSIgc2F5 cyAiV3JpdGUgcGVybWlzc2lvbiBkZW5pZWQiIGV2ZW4gdGhvdWdoIHRoZSBkZXZpY2UgaXMKLWNy dy1ydy1ydy0uICBUaGlzIGhhcHBlbnMgaW4gemNoa28oKSwgd2hpY2ggaXMgY2FsbGVkIGJ5IGNt b2ZpKCkuICBUaGUKLXByb2JsZW0gaXMgdGhhdCAvZGV2LyBpcyBub3Qgd3JpdGVhYmxlLiAgSSBh ZGRlZCBhIFVuaXgtb25seSBjbGF1c2UgdGhhdAotYXR0ZW1wdHMgdG8gb3BlbiB0aGUgZmlsZSBm b3Igd3JpdGUgYWNjZXNzIHVzaW5nIG9wZW4oKSwgaW4gb3JkZXIgdG8gZ2V0IGEKLWZpbGUgZGVz Y3JpcHRvciwgd2hpY2ggdGhlbiBjYW4gYmUgcGFzc2VkIHRvIGlzYXR0eSgpIHRvIGNoZWNrIGlm IGl0J3MgYQotdHR5LCBhbmQgaWYgc28sIHRvIGFsbG93IGFjY2Vzcy4gIEFuZCB0aGVuIGNsb3Nl IGl0LiAgSSB0ZXN0ZWQgdGhpcyBvbiBNYWMKLU9TIFggYXMgZm9sbG93czoKLQotICBsb2cgc2Vz c2lvbiAvZGV2L3R0eUtleVNlcmlhbDEKLSAgdGVsbmV0IHNvbWVob3N0Ci0KLVRoZSBNYWMncyBz ZXJpYWwgcG9ydCB3YXMgY29ubmVjdGVkIHRvIHRoZSBzZXJpYWwgcG9ydCBvZiBhbm90aGVyIGNv bXB1dGVyCi13aGVyZSBLZXJtaXQgZGlzcGxheWVkIHRoZSBpbmNvbWluZyBjaGFyYWN0ZXJzIGlu IENPTk5FQ1QgbW9kZS4gIEdsaXRjaGVzOgotCi0gMS4gVGhlIHBvcnQgaGFzIHRvIGJlIHNldCB1 cCBhcyBkZXNpcmVkIGluIGFkdmFuY2UsIG91dHNpZGUgb2YgS2VybWl0LgotIDIuIGxvZyBzZXNz aW9uIC9kZXYvdHR5S2V5U2VyaWFsMSB3aWxsIGhhbmcgaWYgYW55IHJlcXVpcmVkIG1vZGVtIHNp Z25hbHMKLSAgICBhcmUgbm90IHByZXNlbnQgd2hlbiB0aGUgcG9ydCBpcyBvcGVuZWQuCi0gMy4g QnlwYXNzZXMgbG9ja2ZpbGUgbWVjaGFuaXNtIC0gc28gd2UgZG8gdGhpcyBvbmx5IGlmIC1ETk9V VUNQLgotCi1Gb3IgKDIpLCBJIHRyaWVkIHNldHRpbmcgT19OREVMQVkgLyBPX05PTkJMT0NLLCBh bmQgdGhpcyBhbGxvd2VkIHpjaGtvKCkgdG8KLWNvbnRpbnVlLCBidXQgdGhlbiBpdCBmcmVlemVz IGluIHRoZSBzdWJzZXF1ZW50IGZvcGVuKCkuICBTbyBJIGNoYW5nZWQKLXpvcGVubygpIHRvIGFs c28gY2hlY2sgaWYgdGhlIGRldmljZSBpcyBhIHNlcmlhbCBwb3J0LCBhbmQgaWYgc28sIHRvIG9w ZW4oKQotaXQgd2l0aCBPX05ERUxBWSAvIE9fTk9OQkxPQ0ssIGFuZCB0aGVuIGNvbnZlcnQgdGhl IGZpbGUgZGVzY3JpcHRvciBpbnRvIGEKLWZpbGUgcG9pbnRlciB3aXRoIGZkb3BlbigpLgotCi1O b3cgZm9yIHRoZSBzcGVha2luZyBkZXZpY2UgdGhhdCBuZWVkcyBsaW5lcyB0byBiZSB0ZXJtaW5h dGVkIGJ5IE5VTC4uLgotCi0gIHNldCBzZXNzaW9uLWxvZyBiaW5hcnkgICAgICAgPC0tIG5lZWQg dG8gcHV0IHRoZXNlIGluIFNIT1cgTE9HCi0gIHNldCBzZXNzaW9uLWxvZyBudWxsLXBhZGRlZCAg ICAgIChhbmQgaW4gSEVMUCBTRVQgTE9HKQotICBzZXQgbGluZSAvZGV2L3R0eUtleVNlcmlhbDEK LQotVGhpcyBwYXJ0IHdvcmtzLgotCi1UaGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBvbmx5IGZvciAt RE5PVVVDUCBidWlsZHMgYmVjYXVzZSBzZXJpYWwgcG9ydHMgYXJlbid0Ci1saWtlIG90aGVyIFVu aXggZmlsZXM7IHdlIHdvdWxkIGhhdmUgdG8gY3JlYXRlIGEgbG9ja2ZpbGUsIGJ1dCB3ZSBjYW4n dCBkbwotdGhhdC4uLiAgYWN0dWFsbHksIHR0bG9jaygpIHRha2VzIGEgbmFtZSBhcyBhbiBhcmd1 bWVudCwgYnV0IHR0dW5sY2soKSBkb2VzCi1ub3QsIHNvIHRoZXJlIHdvdWxkIGJlIG5vIHdheSB0 byByZW1vdmUgdGhlIGxvY2suICBBbnl3YXksIHRoZXJlIGlzIG9ubHkgb25lCi1BUEkgZm9yIGNv bmZpZ3VyaW5nIHRoZSBwb3J0IChzcGVlZCwgZmxvdyBjb250cm9sLCBldGMpIGFuZCBpdCBvbmx5 IHdvcmtzCi13aXRoIHRoZSBTRVQgTElORSBkZXZpY2UsIG5vdCBhbnkgcmFuZG9tIGZpbGUuICBU byBmaXggdGhpcyB3b3VsZCByZXF1aXJlCi1tYXNzaXZlIHJlZGVzaWduIGFuZCBjaGFuZ2VzLiAg Y2t1dXNbMjNdLmMsIGNrdWZpby5jLCAxOS0yMCBPY3QgMjAwOS4KLQotSSBtYWRlIC1ETk9VVUNQ IHRoZSBkZWZhdWx0IGZvciBNYWMgT1MgWCwgc2luY2UgZXZlcnlib2R5IHdpbmRzIHVwIGJ1aWxk aW5nCi1pdCB0aGF0IHdheSBhbnlob3cuICBUbyB1bmRvIHRoaXMsIGRvICJtYWtlIG1hY29zeCBL RkxBR1M9LVVOT1VVQ1AiLgotbWFrZWZpbGUsIDIxIE9jdCAyMDA5LgotCi1DaGFuZ2VkIFNFVCBT RVNTSU9OLUxPRyBURVhUIHRvIHN0cmlwIG91dCBBTlNJIGVzY2FwZSBzZXF1ZW5jZXM7IAotcHJl dmlvdXNseSB0aGVyZSB3YXNuJ3QgdGhhdCBtdWNoIGRpZmZlcmVuY2UgYmV0d2VlbiBURVhUIGFu ZCBCSU5BUlkgbG9ncy4KLUl0J3Mgc3RpbGwgbm90IHBlcmZlY3Q7IGZvciBleGFtcGxlIGl0IGRv ZXNuJ3QgZGVsZXRlIGNoYXJhY3RlcnMgdGhhdCB0aGUKLXVzZXIgZXJhc2VkLiAgKE1hZGUgc3Vy ZSB0aGlzIHN0aWxsIGJ1aWxkcyB3aXRoIC1ETk9FU0NTRVEuKQotY2t1Y25zLmMsIDIyIE9jdCAy MDA5LgotCi1DaGFuZ2VkIFNIT1cgTE9HIHRvIHNob3cgdGhlIFNFVCBTRVNTSU9OLUxPRyBzZXR0 aW5ncywgYXMgd2VsbCBhcwotU0VUIERFQlVHLCB3aGljaCB3YXMgbm90IHNob3duIGJlZm9yZS4g IGNrdXVzNS5jLCAyMiBPY3QgMjAwOS4KLQotSWYgYSBzZXJpZXMgb2YgUFVURU5WIGNvbW1hbmRz IGlzIGdpdmVuLCBlYWNoIG5ldyBvbmUgdW5kb2VzIHRoZSBwcmV2aW91cwotb25lLCBzbyBvbmx5 IHRoZSBsYXN0IGRlZmluaXRpb24gaXMgc2VlbiBieSB0aGUgbmV3IGZvcmsgKG9yIGJ5IEtlcm1p dAotaXRzZWxmKS4gIFR1cm5zIG91dCB5b3UgY2FuJ3QgZmVlZCBhdXRvbWF0aWMgdmFyaWFibGVz IHRvIHB1dGVudigpOyB0aGV5Ci1oYXZlIHRvIGJlIHN0YXRpYywgc28gdG8gYWxsb3cgZm9yIG11 bHRpcGxlIFBVVEVOViBjb21tYW5kcyBLZXJtaXQgaGFzIHRvCi1tYWludGFpbiBhbiBhcnJheSBv ZiBzdGF0aWMgc3RyaW5ncy4gIGNrdXVzNy5jLCA2IE5vdiAyMDA5LgotCi1Gcm9tIFNldGggVGhl cmlhdWx0LCBhIGJldHRlciB3YXkgZm9yIHRoZSBtYWtlZmlsZSB0byBkZXRlcm1pbmUgdGhlCi1N YWMgT1MgWCB2ZXJzaW9uIG51bWJlcjsgdGhlcmUncyBhIHByb2dyYW0gZm9yIHRoaXMsIHN3X3Zl ci4gIG1ha2VmaWxlLAotNiBOb3YgMjAwOS4KLQotUGV0ZXIgRWljaGhvcm4gcmVwb3J0ZWQgdGhh dCBmaWxlLXRyYW5zZmVyIGZhaWx1cmUgaGludHMgd2VyZSBub3QgY29taW5nCi1vdXQgc2luY2Ug RGV2LjI3LiAgVGhlIG9ubHkgY2hhbmdlIEkgbWFkZSBzaW5jZSB0aGVuIHdhcyB0byBza2lwIHRo ZW0gaWYKLXRoZSBmaWxlLXRyYW5zZmVyIHByb3RvY29sIHdhcyBub3QgS2VybWl0LiAgSSB3YXMg dXNpbmcgdGhlIHdyb25nIHZhcmlhYmxlCi1pbiB0aGUgdGVzdHMsICdwcm90bycgaW5zdGVhZCBv ZiAncHJvdG9jb2wnLiAgY2t1dXM1LmMsIDYgTm92IDIwMDkuCi0KLUNoYW5nZWQgTWFjIE9TIFgg dGFyZ2V0cyB0byBjb3JyZWN0bHkgZXh0cmFjdCB0aGUgTWFjIE9TIG1ham9yIHZlcnNpb24KLWZy b20gdW5hbWUgLXIgaW4gb3JkZXIgdG8gY2hvb3NlIGNvcnJlY3RseSBiZXR3ZWVuIHV0bXAgYW5k IHV0bXB4OyB0aGlzCi13YXNuJ3Qgd29ya2luZyBpbiAxMC42LjEuICBtYWtlZmlsZSwgNiBOb3Yg MjAwOS4KLQotRml4IGZyb20gU2V0aCBULiBmb3IgYW4gb3ZlcnNpZ2h0IGluIHRoZSBwcmV2aW91 cyBlZGl0LiAgQWxzbyBhZGQKLU1BQ09TWDEwMyB0byAic2hvdyBmZWF0dXJlcyIgZGlzcGxheS4g IG1ha2VmaWxlLCBja3V1czUuYywgMTAgTm92IDIwMDkuCi0KLUFkZGVkIFJFSkVDVCBhcyBhIHN5 bm9ueW0gZm9yIERJU0NBUkQgaW4gU0VUIEZJTEUgQ09MTElTSU9OOyBpdCdzIG1vcmUKLWludHVp dGl2ZSBhbmQgbW9yZSBhY2N1cmF0ZS4gIGNrdXVzWzI3XS5jLCAxNSBOb3YgMjAwOS4KLQotXGZz cGxpdCgpIGFuZCBcZndvcmQoKSBhbHdheXMgYnJlYWsgb24gOC1iaXQgY2hhcmFjdGVycyB1bmxl c3MgeW91IGV4cGxpY2l0bHkKLXB1dCBldmVyeSBzaW5nbGUgOC1iaXQgdmFsdWUgaW50byB0aGUg aW5jbHVkZSBzZXQsIGUuZy4gKGZvciBhIFRTViBmaWxlKToKLQotICB1bmRlZiBpbmNsdWRlCi0g IGZvciBcJWkgMTI4IDI1NSAxIHsKLSAgICAgIGlmID09IFwlaSA5IGNvbnRpbnVlCi0gICAgICAu aW5jbHVkZSA6PSBcbShpbmNsdWRlKVxmY2hhcihcJWkpCi0gIH0KLSAgLlwlbiA6PSBcZnNwbGl0 KFxtKGxpbmUpLCZhLFw5LFxtKGluY2x1ZGUpKQotCi1JIGNoYW5nZWQgY2tzcGxpdCgpIHRvIHRy ZWF0IGFsbCA4LWJpdCBieXRlcyAxMjgtMjU1IGFzIG5vbi1icmVhayBjaGFyYWN0ZXJzCi1ieSBk ZWZhdWx0LiAgSXQgbWlnaHQgaGF2ZSBtYWRlIG1vcmUgc2Vuc2UgdG8gZG8gdGhpcyBmb3IgMTYw LTI1NSAoc2luY2UKLTEyOC0xNTkgYXJlIHRyYWRpdGlvbmFsbHkgQzEgY29udHJvbCBjaGFyYWN0 ZXJzKSBidXQgdGhhbmtzIHRvIE1pY3Jvc29mdAotdHJhZGl0aW9uIGlzIG91dCB0aGUgd2luZG93 LiAgVG8gdHJlYXQgb25lIG9yIG1vcmUgOC1iaXQgY2hhcmFjdGVycyBhcyBicmVhawotY2hhcmFj dGVycywgcHV0IHRoZW0gaW4gdGhlIGJyZWFrIHNldC4gIFRoaXMgbWlnaHQgYnJlYWsgc29tZSBz Y3JpcHRzLCBidXQgSQotZG91YnQgaXQgYmVjYXVzZSB0aGlzIGZsYXcgd2FzIHNvIGF3ZnVsIHRo YXQgaWYgYW55b25lIGhhZCBjb21lIHVwIGFnYWluc3QKLXRoZXkgd291bGQgaGF2ZSBsZXQgbWUg a25vdy4gIGNrY2xpYi5jLCAxNiBOb3YgMjAwOS4KLQotQ2hhbmdlZCB0aGUgbmV0YnNkIHRhcmdl dCB0byBzZXQgLWZ1bnNpZ25lZC1jaGFyLCBzaW5jZSBjYyBvbiBOZXRCU0QgaXMKLWFjdHVhbGx5 IGdjYy4gIG1ha2VmaWxlLCAxNiBOb3YgMjAwOS4KLQotQ2hhbmdlZCBtYWNvc3ggdGFyZ2V0cyB0 byBnZXQgdGhlIENQVSB0eXBlIGZyb20gdGhlIEhPU1RUWVBFIGVudmlyb25tZW50Ci12YXJpYWJs ZS4gIEFsc28gYWRkZWQgZ2V0ZW52KCJIT1NUVFlQRSIpIGFzIGEgbGFzdC1yZXNvcnQgbWV0aG9k IHRvIHNldCB0aGUKLVx2KGNwdSkgdmFyaWFibGUgYXQgcnVudGltZSAobWF5YmUgaXQgc2hvdWxk IGJlIHRoZSBmaXJzdCByZXNvcnQ/KS4uLgotY2t1dXM0LmMsIG1ha2VmaWxlLCAxNiBOb3YgMjAw OS4KLQotTWFkZSBzdXJlIHRoZSBzb2xhcmlzOV82NCBhbmQgc29sYXJpczEwIHRhcmdldHMgc3Rp bGwgd29yay4gIDE2IE5vdiAyMDA5LgotCi1NYWRlIHN1cmUgdGhlIGN1cnJlbnQgc291cmNlIHBh Y2thZ2UgYnVpbGRzIE9LIG9uIEhQLVVYIDEwLjIwLi4uICBHb3QgYSBsb3QKLW9mICJ3YXJuaW5n IDYwNjI6IE9wdGRyaXZlcjogRXhjZWVkaW5nIGNvbXBpbGVyIHJlc291cmNlIGxpbWl0cyBpbiB4 eHg7IHNvbWUKLW9wdGltaXphdGlvbnMgc2tpcHBlZC4gVXNlICtPbm9saW1pdCBpZiBvdmVycmlk ZSBkZXNpcmVkIiBidXQgaXQgYnVpbGRzIE9LLgotVGVzdGVkIGxvbmcgZmlsZSB0cmFuc2Zlcjsg d29ya3MgT0suICAxNyBOb3YgMjAwOS4KLQotQnVpbHQgb24gRnJlZUJTRCA3LjIgd2l0aCBhbmQg d2l0aG91dCBPcGVuU1NMLCBhbGwgT0suICAxNyBOb3YgMjAwOS4KLQotQnVpbHQgb24gTmV0QlNE IDUuMC4xIHdpdGggYW5kIHdpdGhvdXQgT3BlblNTTCwgYWxsIE9LLCBidXQgbmV0YnNkK2tyYjUK LWZhaWxzIHdpdGggImNhbid0IGZpbmQgLWxnc3NhcGlfa3JiNSI7IHdvcmtlZCBhcm91bmQgdGhp cyB3aXRoCi0iSzVMSUI9LUwvdXNyL2xvY2FsL2tlcmJsaWIiICh3aGVyZSB0aGUgbGliIGFjdHVh bGx5IGlzIG9uIHRoaXMgaG9zdCkgYnV0Ci10aGVuIGl0IGZhaWxlZCB3aXRoICJja2NmdHAuYzox Mzg2ODogZXJyb3I6ICdnc3NfbnRfc2VydmljZV9uYW1lJyB1bmRlY2xhcmVkIi4KLTE3IE5vdiAy MDA5LgotCi1JIGZvdW5kIGEgVk1TIDYuMiBzeXN0ZW0uLi4gVGFrZXMgYSBsb29vb25nIHRpbWUg dG8gYnVpbGQgdGhlcmUuICBJbgotY2t1dXN5LmMsIERFQyBDIGRpZG4ndCBsaWtlIHRoZSBwcm90 b3R5cGVzIGFuZCBkZWNsYXJhdGlvbnMgb2YgZG9ybGdhcmcoKQotYW5kIGRvdG5hcmcoKSBhcyBz dGF0aWMgc28gSSBtYWRlIHRoZW0gbm90IHN0YXRpYy4gIEJ1dCB0aGF0IGRpZG4ndCBoZWxwLAot bm93IGl0IGZhaWxzIGF0IHRoZSB2ZXJ5IGVuZCwgc2F5aW5nIHRoZSBmaW5hbCAjaWZkZWYgaXMg YW4gaW52YWxpZAotc3RhdGVtZW50LiAgSXQgbG9va3MgbGlrZSBhbiAjaWZkZWYgbWlzbWF0Y2gg dGhhdCBhZmZlY3RzIG9ubHkgVk1TLiAgSSByYW4KLW15ICNpZmRlZiBtYXRjaGVyLCBpdCB0dXJu ZWQgdXAgbm90aGluZy4gIEkgc3Vic3RpdHV0ZWQgYSBjb3B5IG9mIGNrdXVzeS5jCi1mcm9tIDIw MDcsIGl0IGNvbWVzIHVwIHdpdGggdGhlIHNhbWUgZXJyb3JzLiAgVGhlbiBJIHN1YnN0aXR1dGVk IHRoZSBjb3B5Ci1mcm9tIDguMC4yMTEgZnJvbSAyMDA0LCBhbmQgdGhpcyBvbmUgY29tcGlsZWQg T0sgYW5kLCBtaXJhY3Vsb3VzbHksIHRoZQotd2hvbGUgbWVzcyBldmVuIGxpbmtlZCBPSyBhbmQg cnVucyBPSy4gIFRoZSBBbHBoYSBiaW5hcnkgaXMgMi44NE1CLiAgTm93IEkKLWhhdmUgNDUwMCBs aW5lcyBvZiBjb2RlIHRvIGNvbXBhcmUuLi4uICBJIHdlbnQgdGhyb3VnaCB0aGUgdHdvIGZpbGVz IGxpbmUgYnkKLWxpbmUgYW5kIEkgY2FuJ3Qgc2VlIGEgc2luZ2xlIHRoaW5nIHdyb25nLiAgSSBn YXZlIHVwIGFuZCB0cmllZCBidWlsZGluZyB0aGUKLVRDUC9JUCB2ZXJzaW9uLiAgSXQgYnVpbGRz IGZpbmUgZXhjZXB0IGZvciBja3V1c3kuYywgd2l0aCB0aGUgdXR0ZXJseQotdXNlbGVzcyBlcnJv ciBtZXNzYWdlOgotCi0gICNlbmRpZiAvKiBOT0NNREwgKi8KLSAgLi4uLi4uLi4uLi4uLi4uLi4u Ll4KLSAgJUNDLUUtQkFEU1RNVCwgSW52YWxpZCBzdGF0ZW1lbnQuCi0KLUluZGljYXRpbmcgdGhl IGxhc3QgbGluZSBpbiB0aGUgZmlsZS4gIEp1c3QgZm9yIHRoZSBoZWNrIG9mIGl0LCBJIHB1dAot YW5vdGhlciBsaW5lIGFmdGVyIHRoYXQgb25lOgotCi0gIC8qIFRoaXMgaXMgYSB0ZXN0ICovCi0K LWFuZCBnb3Q6Ci0KLSAgLyogVGhpcyBpcyBhIHRlc3QgKi8KLSAgLi4uLi4uLi4uLi4uLi4uLi4u Li5eCi0gICVDQy1FLUJBRFNUTVQsIEludmFsaWQgc3RhdGVtZW50LgotCi1TbyBpdCBpcyBub3Qg b2JqZWN0aW5nIHRvIGFueXRoaW5nIGluIHRoZSBmaWxlLiAgVHJ5aW5nIHRoZSBvbGQgTElTUCB0 cmljaywKLUkgcHV0IGFuIGV4dHJhbmVvdXMgY2xvc2luZyBicmFja2V0IGFmdGVyIHRoYXQuICBT dWNjZXNzISAgSG9uZXN0bHksIEkgZG9uJ3QKLXNlZSBhbnl0aGluZyB3cm9uZyB3aXRoIGZpbGUu ICBJdCdzIERFQyBDIFY1LjMtMDA2LiAgSSBzdXNwZWN0IGEgQyBidWcuCi1JJ2xsIGxlYXZlIGl0 IGxpa2UgdGhpcyBmb3Igbm93IHVudGlsIEkgZ2V0IGFjY2VzcyB0byBzb21lIG90aGVyIFZNUwot dmVyc2lvbnMuICBBbm90aGVyIGNsdWUgaXMgdGhhdCB3aGVuIGJ1aWxkaW5nIHRoZSBuZXR3b3Jr IHZlcnNpb24gSSBnZXQgYQotaG9ycmlibGUgd2FybmluZyBJIG5ldmVyIHNhdyBiZWZvcmUgZnJv bSBhIG1vZHVsZSB0aGF0IGhhc24ndCBiZWVuIHRvdWNoZWQKLWluIGEgdmVyeSBsb25nIHRpbWUg KGNrdnJ0bC5jKS4gIEFsc28sIGluIHRoZSBuZXR3b3JrIHZlcnNpb24sIEkgbm90ZSB0aGF0Ci10 aGUgRlRQIGNvZGUgaXMgbm90IGNvbXBpbGVkIGluLiAgV2UgaGF2ZSB0byB0cnkgdGhpcyBhZ2Fp biB3aXRoIHNvbWUKLWNvbW1hbmQtbGluZSBzd2l0Y2hlcywgYnV0IGl0J2xsIGRvIGZvciBub3cu ICBja3V1c3kuYywgMTggTm92IDIwMDkuCi0KLS0tLUMtS2VybWl0IDkuMCBBbHBoYS4wMS0tLQot Ci1Gcm9tIFN0ZXZlbiBTY2h3ZWRhIChTTVMpLCB0aGUgcmVhbCBzb2x1dGlvbiBmb3IgdGhlIFZN UyBjbG9zaW5nIGJyYWNlCi1wcm9ibGVtLCBpdCB3YXNuJ3QgYSBERUNDIGJ1ZywgaXQgd2FzIGEg bWUgYnVnLiAgY2t1dXN5LmMsIDIwIE5vdiAyMDA5LgotCi1SZWRpc2NvdmVyZWQgdGhlIG5ldyBW TVMgYnVpbGQgb3B0aW9uczogZiBmb3IgTG9uZyBGaWxlcywgaSBmb3IgSW50ZXJuYWwKLUZUUC4g ICJtYWtlIG1uZiIgZG9lc24ndCB3b3JrIG9uIFZNUyA2LjIsIGl0IGxvb2tzIGxpa2UgdGhlIFZN UyBkZWZpbml0aW9uCi1mb3IgQ0tfT0ZGX1QgZ290IGxvc3QuICBTYW1lIHRoaW5nIHdpdGggIm1h a2UgbWZpIi4gIENvbWUgYmFjayB0byB0aGlzIGxhdGVyLgotCi1Gcm9tIEdlcnJ5IEJlbGFuZ2Vy LCBhIGZpeCB0byBJTlBVVCAvQ09VTlQ6bi4gIGNrdXVzNC5jLCAyNiBOb3YgMjAwOS4KLQotQWRk ZWQgXGZzcXVlZXplKHMpLCByZXR1cm5zIHN0cmluZyBzIHdpdGggbGVhZGluZyBhbmQgdHJhaWxp bmcgd2hpdGVzcGFjZQotcmVtb3ZlZCwgVGFicyBjb252ZXJ0ZWQgdG8gU3BhY2VzLCBhbmQgbXVs dGlwbGUgc3BhY2VzIGNvbnZlcnRlZCB0byBzaW5nbGUKLXNwYWNlcy4gIEZvciBub3csIEFTQ0lJ IG9ubHksIG5vIG9wdGlvbnMuICBja3V1c3IuaCwgY2t1dXNbMjRdLmMsIDI3IE5vdiAyMDA5Lgot Ci1JIHdyb3RlIGEgS2VybWl0IHNjcmlwdCB0byByZWFkIGEgYmlnIGZpbGUgb2YgYWRkcmVzc2Vz IG9uIFNvbGFyaXMgOSwKLVxmc3F1ZWV6ZSgpaW5nIGVhY2ggbGluZS4gIEFmdGVyIGFib3V0IDE0 MDAwIGxpbmVzLCB0aGVyZSB3YXMgYSBtYWxsb2MKLWZhaWx1cmUgaW4gZ2V0bmN0KCkgKHRoZSBj b21tYW5kLWZpbGUgcmVhZGVyKS4gIFRoZXJlJ3Mgbm90aGluZyB3cm9uZyB3aXRoCi1cZnNxdWVl emUoKSwgdGhlIGZhaWx1cmUgaXMgb24gYSBkZWVwZXIgbGV2ZWwsIGJlY2F1c2UgdGhlIHNhbWUg dGhpbmcKLWhhcHBlbnMgaWYgSSB1c2UgXGZ1cHBlcigpICh3aGljaCBpcyBzdHJ1Y3R1cmFsbHkg aWRlbnRpY2FsIHRvIFxmc3F1ZWV6ZSgpKQotaW4gdGhlIHNhbWUgc2NyaXB0LiAgVGhlIHByb2Js ZW0gaXMgbm90IGluIGdldG5jdCgpIGVpdGhlciwgYmVjYXVzZSBldmVyeQotbWFsbG9jKCkgaXMg ZnJlZWQgKEkgY2hlY2tlZCkuICBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIHNhbWUgc2NyaXB0ICh3 aXRoCi1cZnVwcGVyKCkgaW5zdGVhZCBvZiBcZnNxdWVlemUoKSBjb21wbGV0ZXMgT0sgaW4gQy1L ZXJtaXQgOC4wLjIwMS4gIElmIEkKLXJlbW92ZSB0aGUgZnVuY3Rpb24gY2FsbCAoXGZzcXVlZXpl KCkgb3IgXGZ1cHBlcigpKSBmcm9tIHRoZSBzY3JpcHQsIGl0IGFsc28KLXJ1bnMgT0sgaW4gOS4w LiAgVGhpcyBzZWVtcyB0byBwb2ludCB0aGUgZmluZ2VyIGF0IGZuZXZlbCgpLCB3aGljaCBjb250 YWlucwotY291bnRsZXNzIG1hbGxvYydzIGFuZCBmcmVlJ3MuICBCdXQgY29tcGFyaW5nIGZuZXZh bCgpIGJldHdlZW4gOC4wLjIxMSBhbmQKLTkuMCwgSSBkb24ndCBzZWUgYW55IGRpZmZlcmVuY2Ug dGhhdCB3b3VsZCBleHBsYWluIHRoaXMgYmVoYXZpb3IgLS0gbm90aGluZwotYXQgYWxsIHRoYXQg aW52b2x2ZXMgbWFsbG9jKCksIG1ha3N0cigpLCBvciBmcmVlKCkuICBOb3IgYW55IHBlcnRpbmVu dAotY2hhbmdlIGluIHRoZSBjYWxsZXIgKHp6c3RyaW5nKSBvZiBmbmV2YWwoKS4gIDI3IE5vdiAz MDA5LgotCi1Bbm90aGVyIHByb2JsZW0gaXMgdGhhdCB3aGVuIHRoaXMgaGFwcGVucywgdGhlIGVy cm9yIGlzIG5vdCBjYXVnaHQgKGUuZy4gYnkKLXRoZSBJRiBGQUlMIHN0YXRlbWVudCBhZnRlciB0 aGUgY29tbWFuZCB0aGF0IGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBjYWxsKTsKLWluc3RlYWQsIEMt S2VybWl0IHJldHVybnMgaW1tZWRpYXRlbHkgdG8gaXRzIHByb21wdC4gIDI3IE5vdiAyMDA5Lgot Ci1JdCBjb3VsZCBzaW1wbHkgYmUgdGhhdCBzb21lIG9mIHRoZSBidWZmZXJzIHdlIGFsbG9jYXRl IGFyZSBtdWNoIGJpZ2dlciBub3cuCi1CdXQgYWdhaW4sIEkgZG9uJ3Qgc2VlIG11Y2ggZGlmZmVy ZW5jZSBiZXR3ZWVuIDguMC4yMTEgYW5kIDkuMDsgd2Ugd2VyZQotYWxyZWFkeSBhbGxvY2F0aW5n IDMySyBjb21tYW5kLXJlbGF0ZWQgYnVmZmVycyAobWFsbG9jKCkgdGFrZXMgYSBzaXplX3QsIGFu ZAotc2l6ZV90IGlzIGFuIGludCBhbG1vc3QgZXZlcnl3aGVyZSkuICBJIGJ1aWx0IHRoZSBzYW1l IHNvdXJjZSBvbiBOZXRCU0QgYW5kCi1yYW4gdGhlIHNhbWUgc2NyaXB0ICh3aXRoIFxmcXVlZXpl KCkpLCBhbmQgaXQgd29ya2VkIGZpbmUuICBMZXQncyB3b3JyeQotYWJvdXQgdGhpcyBsYXRlciwg aWYgaXQgY29tZXMgdXAuICAyNyBOb3YgMjAwOS4KLQotQnVpbHQgT0sgb24gU2lsaWNvbiBHcmFw aGljcyBJUklYIDYuNSBSMTAwMDA7IHJlZ3VsYXIgYnVpbGQgT0ssIFNTTCBhbmQKLUtlcmJlcm9z IGJ1aWxkcyBmYWlsZWQuICAzMCBOb3YgMzAwOS4KLQotVHJpZWQgdG8gYnVpbGQgb24gRGlnaXRh bCBVbml4IDQuMEYgYnV0IGl0IGJsZXcgdXAgaW4gY2t1dGlvLmMsIGFwcGFyZW50bHkKLW5vdCBy ZWNvZ25pemluZyBhbnkgb2YgdGhlIHRlcm1pbmFsIHN0cnVjdCBzeW1ib2xzIGZyb20gdGVybWlv cy5oLiAgVHJpZWQKLWFnYWluIHdpdGggZ2NjLCBzYW1lIHRoaW5nLiAgVHJpZWQgZXhwbGljaXRs eSAjaW5jbHVkaW5nIDxzeXMvdGVybWlvcy5oPgotd2l0aGluICNpZmRlZiBUUlU2NCwgc2FtZSB0 aGluZy4gIFdoYXQgY291bGQgaGF2ZSBjaGFuZ2VkPyAgMzAgTm92IDIwMDkuCi0KLUJ1aWx0IE9L IG9uIExpbnV4IFJIRUw1LjQvSXRhbml1bS0yLCBtYWtlIGxpbnV4LiAgVGhlIHNlY3VyZSBidWls ZAotcmVxdWlyZWQgIkZMQUdTPS1ETk9fS1JCNV9JTklUX0VUUyIgYW5kIGJ1aWx0IE9LLiAgMzAg Tm92IDIwMDkuCi0KLUJ1aWx0IE9LIG9uIERpZ2l0YWwgVW5peCA0LjBGIHVzaW5nICJtYWtlIG9z ZiIgaW5zdGVhZCBvZiAibWFrZSB0cnU2NC00MGYiLgotSSBkb24ndCBrbm93IHdoeSB0aGUgc3Bl Y2lmaWMgdGFyZ2V0IGRvZXNuJ3Qgd29yaywgYnV0IGl0J3Mgbm90IHdvcnRoCi1jaGFzaW5nIGRv d24uICAyIERlYyAyMDA5LgotCi1CdWlsdCBPSyBvbiBNaXJCU0QgMTAsIGRlc3BpdGUgYSBsb3Qg b2YgZ3JhdHVpdG91cyBjb21waWxlciB3YXJuaW5ncy4gIEJ1aWx0Ci1PSyBvbiBNaXJCU0QgMTAs IE9wZW5CU0QgNC41LCBhbmQgRmVkb3JhIDEwLiAgMyBEZWMgMjAwOS4KLQotKFZhcmlvdXMgb3Ro ZXIgc3VjY2Vzc2Z1bCBVbml4IGJ1aWxkcyBpbiB0aGVzZSB3ZWVrcy4uLikKLQotQnVpbHQgb24g Vk1TIDcuMiBhbmQgOC4zIHdpdGggYW5kIHdpdGhvdXQgVENQL0lQLCBubyBwcm9ibGVtcy4gIDEx IEphbiAyMDEwLgotCi1CdWlsdCBvbiBWTVMgOC4zIHdpdGggIm1ha2UgZmkiIHRvIGluY2x1ZGUg dGhlIEZUUCBjbGllbnQgYW5kIGxvbmctZmlsZQotc3VwcG9ydCAobWlkIEphbiAyMDEwKS4KLQot QnVpbHQgb24gVk1TIDguMyB3aXRoIFVYQyA1LjYgYW5kIEhQIFNTTCAxLjMsIHdoaWNoIGlzIE9w ZW5TU0wgMC45LjdlLgotSXQgY29tcGlsZWQgYW5kIGxpbmtlZCBPSyBidXQgd2hlbiBJIHRyaWVk IHRvIG1ha2UgYW4gRlRQIFNTTCBjb25uZWN0aW9uCi1pdCBjcmFzaGVkIGluIFNTTCRMSUJTU0xf U0hSLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBzc2xfYXV0aCgpLCBhZnRlciBoYXZpbmcKLWhhZCBU TFMgYWNjZXB0ZWQgYXMgYW4gYXV0aGVudGljYXRpb24gdHlwZSwgYnV0IGJlZm9yZSBhY3R1YWxs eQotYXV0aGVudGljYXRpbmcuICBJbiBVbml4OgotCi0gMTkuIGZ0cCBvcGVuIGZ0cC5zb21lY29t cGFueS5jb20gL3VzZXI6cGdlLmNvbS90ZXN0X3F1b3RhIC9wYXNzd29yZDp4eHh4eHgKLUNvbm5l Y3RlZCB0byBmdHAuc29tZWNvbXBhbnkuY29tLgotMjIwLVNvbWVjb21wYW55IEZUUCB2Ni4wIGZv ciBXaW5Tb2NrIHJlYWR5Li4uCi0yMjAgV2VsY29tZSB0byB0aGUgb25saW5lIHN0b3JhZ2UgRlRQ IHNlcnZlci4gIFBsZWFzZSBjaGVjayB0aGUgbWFpbiB3ZWIKLXNpdGUgZm9yIHN5c3RlbSBhbm5v dW5jZW1lbnRzIGFuZCBBVVAuIChPKQotLS0tPiBBVVRIIFRMUwotMjM0IEFVVEggY29tbWFuZCBP Sy4gSW5pdGlhbGl6aW5nIFNTTCBjb25uZWN0aW9uLgotVExTIGFjY2VwdGVkIGFzIGF1dGhlbnRp Y2F0aW9uIHR5cGUKLVNTTCBERUJVRyBBQ1RJVkUKLT0+U1RBUlQgU1NML1RMUyBjb25uZWN0IG9u IENPTU1BTkQKLQotSW4gVk1TOgotCi0gMTkuIGZ0cCBvcGVuIGZ0cC5zb21lY29tcGFueS5jb20g L3VzZXI6cGdlLmNvbS90ZXN0X3F1b3RhIC9wYXNzd29yZDp4eHh4eHgKLUNvbm5lY3RlZCB0byBm dHAuc29tZWNvbXBhbnkuY29tLgotMjIwIFNvbWVjb21wYW55IEZUUCB2Ni4wIGZvciBXaW5Tb2Nr IHJlYWR5Li4uCi0tLS0+IEFVVEggVExTCi0yMzQgQVVUSCBjb21tYW5kIE9LLiBJbml0aWFsaXpp bmcgU1NMIGNvbm5lY3Rpb24uCi1UTFMgYWNjZXB0ZWQgYXMgYXV0aGVudGljYXRpb24gdHlwZQot U1NMIERFQlVHIEFDVElWRQotJVNZU1RFTS1GLUFDQ1ZJTywgYWNjZXNzIHZpb2xhdGlvbiwgcmVh c29uIG1hc2s9MDQsIHZpcnR1YWwKLWFkZHJlc3M9RkZGRkZGRkY4MDAxQTEyMCwgUEM9MDAwMDAw MDAwMDY4QjExOCwgUFM9MDAwMDAwMUIKLQotTm90ZTogVGhlIFVuaXggdmVyc2lvbiByZWNlaXZl ZCB0aGUgc2Vjb25kIDIyMCByZXNwb25zZSwgdGhlIFZNUyB2ZXJzaW9uIGRpZAotbm90LiAgVGhh dCdzIG9kZCwgaXQncyB0aGUgc2FtZSBjb2RlLi4uICAyNSBKYW4gMjAxMC4KLQotQWRkZWQgc29t ZSBlc3NlbnRpYWwgZGV0YWlscyB0byB0aGUgSEVMUCBGU0VFSyB0ZXh0LiAgY2t1dXMyLmMsIDI1 IEphbiAyMDEwLgotCi1EaXNjb3ZlcmVkIHRoYXQgdGhlIHJlc3VsdCByZXR1cm5lZCBieSBcZnNl YXJjaCgpIGlzIHRvdGFsbHkgdW5yZWxpYWJsZS4KLVRoaXMgaXMgcHJvYmFibHkgdG9vIGhhcmQg dG8gZml4LgotCi1GU0VFSyBkaWQgbm90IHBheSBhdHRlbnRpb24gdG8gU0VUIENBU0UsIHNlYXJj aGVzIHdlcmUgYWx3YXlzIGNhc2Ugc2Vuc2l0aXZlLgotRml4ZWQgaW4gY2t1dXM3LmMsIDI2IEph biAyMDEwLgotCi1GU0VFSyBmYWlsZWQgdG8gZmluZCBhbnl0aGluZyBpZiB0aGUgc2VhcmNoIHBh dHRlcm4gd2FzIG1hdGNoZWQgaW4gdGhlIGZpcnN0Ci1saW5lIG9mIHRoZSBmaWxlLiAgRml4ZWQg aW4gY2t1dXM3LmMsIDI2IEphbiAyMDEwLgotCi1cZndvcmQoKSBhbmQgXGZzcGxpdCgpLi4uLiAg QW5vdGhlciBjaGFuZ2UsIGJ1dCBub3QgYmFja3dhcmRzLWluY29tcGF0aWJsZS4KLU9uZSBtYXkg bm93IHB1dCB0aGUgd29yZCBBTEwgKGp1c3QgbGlrZSB0aGF0LCBhbGwgdXBwZXJjYXNlKSBhcyB0 aGUgaW5jbHVkZQotc2V0ICg0dGggYXJndW1lbnQpIHRvIGluZGljYXRlIHRoYXQgdGhlcmUgd2ls bCBiZSBubyBicmVhayBjaGFyYWN0ZXJzIG90aGVyCi10aGFuIHRob3NlIGV4cGxpY2l0bHkgZ2l2 ZW4gaW4gdGhlIGJyZWFrIHNldCwgZS5nLiBcZnNwbGl0KFxtKHh4KSwmYSw6LEFMTCkKLWJyZWFr cyBhIGxpbmUgb25seSBvbiBhIGNvbG9uICg6KSwgbm90aGluZyBlbHNlLiAgVGhlIG9yaWdpbmFs IHJ1bGVzIGZvcgotY2tzcGxpdCgpIHdlcmUgbW9yZSB0aGFuIGEgbGl0dGxlIGNvdW50ZXJpbnR1 aXRpdmU6IHRoZSBkZWZhdWx0IGJyZWFrIHNldCBpcwotYWxsIG5vbiBhbHBoYW51bXMsIGFuZCB0 aGUgZGVmYXVsdCBpbmNsdWRlIHNldCBpcyBhbGwgYWxwaGFudW1zLCBzbyBpZiB5b3UKLXdhbnRl ZCB0byBwYXJzZSAoc2F5KSBhIENTViBmaWxlLCBicmVha2luZyBvbmx5IG9uIGNvbW1hLCB5b3Ug aGFkIHRvIHRoaW5rCi1vZiBhbGwgdGhlIGNoYXJhY3RlcnMgeW91IHdhbnRlZCB0byBrZWVwLiAg VGhpcyB3YXkgeW91IGp1c3Qgc2F5IEFMTC4KLWNrY2xpYi5jLCAyNiBKYW4gMjAxMC4KLQotU3Bl YWtpbmcgb2YgQ1NWIGZpbGVzLi4uIEhvdyBjYW4geW91IHB1dCBjb21tYSBhcyBhIGZ1bmN0aW9u IGFyZ3VtZW50IHdoZW4KLWNvbW1hIGlzIHRoZSBmdW5jdGlvbi1hcmd1bWVudCBzZXBhcmF0b3I/ ICBVc2Ugb25lIG9mIHRoZXNlIGZvcm1zOgotCi0gXGZzcGxpdChcbSh4eCksJmEsIiwiLEFMTCkK LSBcZnNwbGl0KFxtKHh4KSwmYSx7LH0sQUxMKQotIFxmc3BsaXQoXG0oeHgpLCZhLFw0NCxBTEwp Ci0gXGZzcGxpdChcbSh4eCksJmEsXGZjaGFyKDQ0KSxBTEwpCi0KLUZyb20gSm9obiBEdW5sYXAs IFUuIG9mIFdhc2hpbmd0b24gQXBwbGllZCBQaHlzaWNzIExhYjogJ1doZW4gInN0dHkgLWEgPAot L2Rldi90dHlTMCB8IGdyZXAgY3J0c2N0cyIgc2hvd3MgImNydHNjdHMiIChub3QgIi1jcnRzY3Rz IikgYW5kIHdoZW4gdXNpbmcgYQotdGhyZWUgd2lyZSBzZXJpYWwgaW50ZXJmYWNlIGFuZCB3aGVu IGFza2luZyBrZXJtaXQgdG8gbm90IHVzZSBmbG93IGNvbnRyb2wKLShzZXQgZmxvdyBub25lKSB0 aGVuICJja3V0aW8uYzEiIChzZWUgYXR0YWNobWVudHMpIGZhaWxzIHdoaWxlICJja3V0aW8uYyIK LXdvcmtzLiAgVGhlIHJlc3VsdCBvZiAiZGlmZiAtdSBja3V0aW8uYzEgY2t1dGlvLmMiIGlzIGF0 dGFjaGVkIGFzICJkaWZmcyInLgotY2t1dGlvLmMsIDI2IEphbiAyMDEwLgotCi1DaGFuZ2VkIHRo ZSB5ZWFyIGZyb20gMjAwOSB0byAyMDEwIGluIHRoZSBtb2R1bGVzIEkgd29ya2VkIG9uIHRvZGF5 IGFuZCBpbgotdGhlIGhlcmFsZHMsIGV0Yy4gIGNrY2ttYWkuYywgY2t1dXM1LmMsIGNrdXRpby5j LCBja2NsaWIuYywgY2t1dXM3LmMsCi0yNiBKYW4gMjAxMC4KLQotQnVpbHQgb24gTGludXggRmVk b3JhIENvcmUgMywgcmVndWxhciBhbmQgd2l0aCBPcGVuU1NMIDAuOS43YS4gIEJ1aWx0IG9uCi1V YnVudHUgOS40IE9LLCBidXQgU1NMIGFuZCBLZXJiZXJvcyBidWlsZHMgZmFpbGVkIGR1ZSB0byBu b3QgZmluZGluZyBsaWJzCi1hbmQvb3IgaGVhZGVyIGZpbGVzLiAgSSdtIHN1cmUgdGhpcyBjb3Vs ZCBiZSBmaXhlZC4uLiAgMjcgSmFuIDIwMTAuCi0KLUFkZGVkIFNTTCwgS1JCNCwgYW5kIEtSQjUg dG8gdGhlIHN0YXJ0dXAgaGVyYWxkIGZvciB2ZXJzaW9ucyB0aGF0IHdlcmUKLWJ1aWx0IHdpdGgg U1NMLCBLZXJiZXJvcyA0LCBvciBLZXJiZXJvcyA1LiAgQnVpbHQgT0sgb24gRmVkb3JhIDMgd2l0 aAotbGludXgra3JiNStzc2wgYW5kIG5ldyBiYW5uZXIgc2hvd3MgY29ycmVjdGx5LiAgY2t1dXM1 LmMsIDI3IEphbiAyMDEwLgotCi1TZXQgTk9fS1JCNV9JTklUX0VUUyBieSBkZWZhdWx0IGluIGNr dWF0aC5oIHNpbmNlIGtyYjVfaW5pdF9ldHMoKSBpcyBhIG5vLW9wCi1pbiBLZXJiZXJvcyAxLjQu eCBhbmQgbGF0ZXIgYW5kIGluIHNvbWUgaW5zdGFsbGF0aW9ucyBpdCBjYW4ndCBiZSBmb3VuZCwK LXdoaWNoIGNsb2JiZXJzIHRoZSBidWlsZC4gIGNrdWF0aC5oLCAyNyBKYW4gMjAxMC4KLQotQWRh cHRlZCB0byBNSU5JWCAzIDEuNSwgdGhlIGZpcnN0IHZlcnNpb24gdGhhdCBoYXMgdmlydHVhbCBt ZW1vcnkgYWNjb3JkaW5nCi10byBBbmR5IFQsIHdobyBzaG91bGQga25vdy4gIE9uIGVhcmxpZXIg dmVyc2lvbnMgKGUuZy4gTUlOSVggMyAxLjIpIGFueQotYXR0ZW1wdCB0byBidWlsZCBDLUtlcm1p dCBjYXVzZXMgdGhlIGNvbXBpbGVyIHRvIGNyYXNoLiAgTm93IHRoZSBjb21waWxlcgotZG9lc24n dCBjcmFzaCBidXQgaXQgc3Bld3Mgb3V0IGNvdW50bGVzcyB3YXJuaW5ncyBhYm91dCBvbGQtZmFz aGlvbmVkCi1mdW5jdGlvbiBkZWNsYXJhdGlvbnMgdGhhdCBJIGRvbid0IGdldCBhbnl3aGVyZSBl bHNlLiAgVGhlIHJlYWwgcHJvYmxlbXMKLWNhbWUgaW4gY2t1dGlvLmMgd2hlcmUgbnVtZXJvdXMg c3ltYm9scyB3ZXJlIHVuZGVmaW5lZCBhdCBjb21waWxlIHRpbWUgYW5kCi10aGUgUE9TSVggZnVu Y3Rpb24gdGNnZXRwZ3JwKCkgd2FzIG5vdCBmb3VuZCBhdCBsaW5rIHRpbWUsIGV2ZW4gdGhvdWdo IHRoZXJlCi1pcyBhIHByb3RvdHlwZSBmb3IgaXQgaW4gdGhlIE1JTklYIGhlYWRlciBmaWxlcywg YW5kIHRoZXJlIGlzIG5vIGFsdGVybmF0aXZlCi0oc2luY2UgUE9TSVggZG9lc24ndCBsZXQgdXMg dXNlIGlvY3RsKCkpLiAgQWxzbyBub3RlIHRoYXQgdGhlcmUgaXMgc29tZQotY29uZnVzaW9uIG92 ZXIgdGhlIGNvbXBpbGUtdGltZSBzeW1ib2xzIE1JTklYLCBNSU5JWDIsIE1JTklYMywgYW5kIE1J TklYMzE1LgotWW91IHdvdWxkIGV4cGVjdCBNSU5JWCB0byBtZWFuICJhbnkgdmVyc2lvbiBvZiBN SU5JWCIgYnV0IGluIHNvbWUgcGFydHMgb2YKLWNrdXRpby5jIGl0IG1lYW5zIE1JTklYIDEuMC4g IEkgc2luY2VyZWx5IGRvdWJ0IHRoYXQgQy1LZXJtaXQgOS4wIGNhbiBiZQotYnVpbHQgb24gYW55 IHZlcnNpb24gb2YgTWluaXggYmVmb3JlIDMuMS41IHNvIEkgcmVtb3ZlZCB0aGUgY29uZnVzaW9u IGFuZAotbWFkZSBNSU5JWCBtZWFuICJhbnkgTWluaXgiLiAgSXQgYnVpbGRzIG9uIDMuMS41IE9L IG5vdywgZXhjZXB0IGZvciB0aGUgRlRQCi1jbGllbnQuICBUaGlzIGNhbiBwcm9iYWJseSBiZSBm aXhlZCBidXQuLi4gIE1vZHVsZXMgY2hhbmdlZDogY2tjZGViLmgsCi1ja3V2ZXIuaCwgY2tjbWFp LmMsIGNrdXVzNS5jLCBja3V0aW8uYywgMSBGZWIgMjAxMC4KLQotTGF0ZXIuLiBBbmR5IHNheXMg TUlOSVggZG9lcyBub3Qgc3VwcG9ydCBqb2IgY29udHJvbCwgc28gbm8gcHJvZ3JhbSBpcyBldmVy Ci1pbiB0aGUgYmFja2dyb3VuZC4gIFRoYXQgc2V0dGxlcyB0aGF0ISAgMSBGZWIgMjAxMC4KLQot QnVpbHQgT0sgb24gTWluaXgsIExpbnV4LCBNYWMgT1MgWCwgU29sYXJpcyA5LCBOZXRCU0QgNS4w LjEuLi4gIDEgRmViIDIwMTAuCi0KLS0tLUMtS2VybWl0IDkuMCBBbHBoYS4wMi0tLQotCi1Gcm9t IENocmlzdGlhbiBDb3J0aSBhdCBVbmktU3R1dHRnYXJ0LmRlOiBmaXhlcyB0byBhbGxvdyBidWls ZGluZyBvbiBTdW5PUwotNC4xLCB3aGljaCBvbmNlIHdhcyBteSBtYWluIGRldmVsb3BtZW50IHBs YXRmb3JtIGJ1dCB3aGljaCBpcyBsb25nLWdvbmUgZnJvbQotaGVyZS4gIGNrdXB0eS5jLCBja3V0 aW8uYywgOSBGZWIgMjAxMC4gIChIZSBzYXlzIGl0IGlzIGFsc28gbmVjZXNzYXJ5IHRvCi1jb21t ZW50IG91dCB0aGUgInN0cnVjdCB3aW5zaXplIiBhbmQgInN0cnVjdCB0dHlzaXplIiBpbiBzeXMv aW9jdGwuaDsKLW90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgY29uZmxpY3Qgd2l0aCBzeXMvdHR5 Y29tLmggKGluY2x1ZGVkIGJ5IHRlcm1pb3MuaCkKLXdoaWNoIGFsc28gZGVjbGFyZXMgdGhlc2Ug c3RydWN0cy4gQnV0IHlvdSBuZWVkIGJvdGggaW5jbHVkZXMuJykKLQotRnJvbSBKb2huIER1bmxh cCwgYSBmaXggZm9yIEtlcm1pdCBwcm90b2NvbCBmaXhlZCBwYWNrZXQtdGltZW91dCBpbnRlcnZh bAotZ29pbmcgdG8gYSB1bmV4cGVjdGVkIHZhbHVlIChtaXNzaW5nIGVsc2UgY2xhdXNlIGluIHR3 byBwbGFjZXMpLgotY2tjZm4yLmMsIDkgRmViIDIwMTAuCi0KLUFkZGVkIGFuIGFpeGcgdGFyZ2V0 IHRvIGJ1aWxkIG9uIEFJWCB3aXRoIGdjYyB3aGVuIGdjYyBpcyBub3QgaW5zdGFsbGVkIGFzCi1j YywgYW5kIGFsc28gYWRkZWQgQ0M9JChDQykgQ0MyPSQoQ0MpIGNsYXVzZXMgdG8gdGhlIGFpeCBh bmQgYWl4K3NzbAotdGFyZ2V0cy4gIFdvdywgQUlYIHJlYWxseSBsb3NlcyBiaWd0aW1lIHdoZW4g cmVjZWl2aW5nIGZpbGVzIHRocm91Z2ggaXRzIHNzaAotc2VydmVyLiAgU3RyZWFtaW5nIGNhbid0 IGJlIHVzZWQsIHNsaWRpbmcgd2luZG93cyByZWNvdmVyIGZyb20gZXJyb3JzIGJ1dAotdGhlcmUg YXJlIHRvbnMgb2YgdGhlbSB1c2luZyB0aGUgZGVmYXVsdCA0SyBwYWNrZXRzOyA1MDAgd29ya3Mg bXVjaCBiZXR0ZXIuCi1CdWlsdCB3aXRoIElCTSBjYyBhbmQgZ2NjLCBhbmQgYWxzbyB0ZXN0ZWQg KHN1Y2Nlc3NmdWxseSkgdGhlIG5ldyBhaXgraWJtc3NsCi10YXJnZXQsIGluIHdoaWNoIHRoZSBP cGVuU1NMIGhlYWRlcnMgYW5kIGxpYnMgYXJlIGluIGEgc3RhbmRhcmQgcGxhY2UuCi1tYWtlZmls ZSwgOSBGZWIgMjAxMC4KLQotSW4gY2t1cHR5LmgsIG1ha2UgdGhlICNpbmNsdWRlIDxzeXMvaW9j dGwuaD4gYmUgI2lmbmRlZiBTVU5PUzQxLgotRnJvbSBDaHJpc3RpYW4gQ29ydGkuICAxMCBGZWIg MjAxMC4KLQotQnVpbHQgb24gVk1TIEU4LjQuICAxMiBGZWIgMjAxMC4KLQotVHJpZWQgdG8gYnVp bGQgb24gYSByZWFsIFZBWC0xMS83ODUgYnV0IHRoZSBtYWNoaW5lIHNlZW1zIHRvIGJlIHNlcmlv dXNseQotd2VkZ2VkLiAgMTItMTUgRmViIDIwMTAuCi0KLUFkZGVkIG5vdGUgdG8gQ0tWS0VSLkNP TSB0byB0aGUgZWZmZWN0IHRoZSB0aGUgJ2YnIG9wdGlvbiBoYXMgbm8gZWZmZWN0Ci1vbiBWQVgg YXJjaGl0ZWN0dXJlLiAgMTUgRmViIDIwMTAuCi0KLU1vdmVkIHRoZSAjaW5jbHVkZSAiY2t2cnRs LmgiIGluIHRoZSBGVFAgbW9kdWxlIHRvIGJlbG93IHRoZSBpbmNsdWRlIGZvcgotdXRpbWUuaCwg YmVjYXVzZSBidWlsZGluZyB0aGUgVk1TIHZlcnNpb24gd2l0aCB0aGUgJ2knIG9wdGlvbiAobWVh bmluZwotImluY2x1ZGUgaW50ZXJuYWwgZnRwIGNsaWVudCIpIHJlc3VsdHMgaW4gInN0cnVjdCB1 dGltYnVmIHRwIiBlcnJvcmluZyBvdXQKLWJlY2F1c2Ugc3RydWN0IHV0aW1idWYgaXMgbm90IGRl ZmluZWQgeWV0IChhdCBsZWFzdCBpbiBzb21lIHZlcnNpb24gb2YgVk1TCi13aXRoIHNvbWUgdmVy c2lvbiBvZiBDKS4gIEZyb20gUm9iIEJyb3duLCBja2NmdHAuYywgMjAgRmViIDIwMTAuCi0KLUZy b20gTWFydGluIFZvcmxhZW5kZXI6IG5ldyBjb2RlIGluIFZNUyBDLUtlcm1pdCBidWlsZCBwcm9j ZWR1cmUgdG8gZGV0ZWN0Ci1PcGVuU1NMIHZlcnNpb24gYXV0b21hdGljYWxseS4gIGNrdmtlci5j b20sIDIyIEZlYiAyMDEwLgotCi1BZGRlZCBjb2RlIHRvIElOUFVUIGNvbW1hbmQgdG8gc3RyaXAg QU5TSSBlc2NhcGUgc2VxdWVuY2VzLiAgSXQncyBhY3RpdmF0ZWQKLWJ5IFNFVCBTRVNTSU9OLUxP RyBURVhULiAgY2t1dXNyLmg6IGFkZGVkIHByb3RvdHlwZSBmb3IgY2hrYWVzKCk7Ci1ja3Vjb24u YywgY2t1Y25zLmM6IG1hZGUgaW5lc2NbXSBhbmQgb2xkZXNjW10gZ2xvYmFsIGluc3RlYWQgb2Yg c3RhdGljOyAKLWNrdXVzNC5jOiBkb2lucHV0KCkgY29kZSBmb3Igc2tpcHBpbmcgZXNjYXBlIHNl cXVlbmNlcy4gIDEgTWFyIDIwMTAuCi0KLVBldGVyIEVpY2hob3JuIGNvbXBsYWluZWQgdGhhdCBp ZiB5b3UgbWFrZSBhbiBzc2ggY29ubmVjdGlvbiB3aXRoIEtlcm1pdCwKLXRoZW4gbG9nIG91dCBm cm9tIHRoZSBzc2ggaG9zdCwgYW5kIHRoZW4gdXNlIGEgImNvbm5lY3QiIGNvbW1hbmQgdG8KLW1h a2UgYSBuZXcgY29ubmVjdGlvbiB0byB0aGUgc2FtZSBob3N0ICh3aGljaCB5b3UgY2FuIGRvIHdp dGggVGVsbmV0KSwKLUtlcm1pdCBzYXlzIChlLmcuKToKLQotIEROUyBMb29rdXAuLi4gQ2FuJ3Qg Z2V0IGFkZHJlc3MgZm9yIHNzaCAtZSBub25lIHNvbWVob3N0bmFtZQotIFNvcnJ5LCBjYW4ndCBv cGVuIHNzaCAtZSBub25lIHNvbWVob3N0bmFtZTogRXJyb3IgMAotCi1JIGFkZGVkIGNvZGUgdG8g ZGV0ZWN0IGFuZCBoYW5kbGUgdGhpcyBjYXNlIGFuZCBpdCBzZWVtcyB0byB3b3JrIE9LLCBldmVu Ci10aG91Z2ggaXQncyBraW5kIG9mIGEgaGFjay4gIGNrdXVzci5bY2hdLCBja3V1czcuYywgMSBN YXIgMjAxMC4KLQotVGhlcmUgaGFzIG5ldmVyIGJlZW4gYSBjbGVhbiB3YXkgdG8gcHV0IGRlYnVn Z2luZyBtZXNzYWdlcyAoRUNITyBjb21tYW5kcykKLWluIGEgc2NyaXB0IHdoaWNoIGFyZSBleGVj dXRlZCBvbmx5IGlmIGRlYnVnZ2luZyBpcyBkZXNpcmVkIGFuZCBpZ25vcmVkCi1vdGhlcndpc2Uu ICBZb3UnZCBoYXZlIHRvIHNldCBhIHJhbmRvbSB2YXJpYWJsZSBhbmQgdGVzdCBpdCwgb3IgZGVm aW5lIGEKLW1hY3JvIG9yIHdoYXRldmVyLiAgVG8gbWFrZSB0aGlzIG1vcmUgc3RyYWlnaHRmb3J3 YXJkLCBJIGFkZGVkIFNFVCBERUJVRwotTUVTU0FHRSBPTi9PRkYvU1RERVJSLCBhbmQgYWRkZWQg YSBuZXcgTUVTU0FHRSAoc3luOiBNU0cpIGNvbW1hbmQgZm9yIHByaW50aW5nCi1kZWJ1Z2dpbmcg bWVzc2FnZXMgdG8gc3Rkb3V0IGlmIFNFVCBERUJVRyBNRVNTQUdFIGlzIE9OIG9yIHRvIHN0ZGVy ciBpZiBTRVQKLURFQlVHIE1FU1NBR0UgaXMgU1RERVJSLiAgY2tjbWFpLmMsIGNrdXVzW3IyM10u YywgMTIgTWFyIDIwMTAuCi0KLUFsc28gZm9yIGRlYnVnZ2luZyBhbmQgZXJyb3IgbWVzc2FnZXMs IEkgYWRkZWQgXHYobGFzdGNvbW1tYW5kKSBzbyB0aGF0Ci10aGUgY29tbWFuZCB0aGF0IGZhaWxl ZCBjYW4gYmUgaW5jbHVkZWQgaW4gYW4gSUYgRkFJTCBvciBERUJVRyBlcnJvciBtZXNzYWdlLgot VGhpcyB3b3JrcyBldmVuIGZvciBjb21tYW5kcyB0aGF0IGhhdmUgc3ludGF4IGVycm9ycy4KLWNr dXVzci5oLCBja3V1czUuYywgY2t1Y21kLmMsIDEyIE1hciAyMDEwLgotCi1Gcm9tIFNNUyBmb3Ig Vk1TOiAnQWRkZWQvZG9jdW1lbnRlZCBQMyBvcHRpb25zIElOVFNFTEVDVCwgT0xERklCLCBPTERJ UC4KLURpc2FibGVkIChjb21tZW50ZWQgb3V0KSBhdXRvbWF0aWMgZGVmaW5pdGlvbiBvZiBOT1NF VFRJTUUgZm9yIFZNUyBiZWZvcmUKLVY3LjIgKHZtc192ZXIgLmx0cy4gIlZNU19WNzIiKS4nICBj a2NkZWIuaCwgY2tjZnRwLmMsIGNrY25ldC5jLCBja3V1c1syNTY3XS5jLAotY2t2ZmlvLmMsIGNr dmtlci5jb20sIGNrdnJ0bC5bY2hdLCAxNSBNYXIgMjAxMC4KLQotRXhwb3NlZCBpbmVzY1tdIGFu ZCBvbGRlc2NbXSBmb3IgVk1TLCBzbyBuZXcgSU5QVVQgY29tbWFuZCBlc2NhcGUtc2VxdWVuY2UK LXN0cmlwcGluZyBjYW4gd29yayAocmVhbGx5LCBjaGthZXMoKSBhbmQgcmVsYXRlZCBnbG9iYWwg dmFyaWFibGVzIHNob3VsZCBiZQotbW92ZWQgb3V0IG9mIGNrW3V2ZF1jb24uYy9ja3VjbnMuYyBh bmQgaW50byBhIGNvbW1vbiBtb2R1bGU7IGRvIHRoYXQgbGF0ZXIpLgotY2t1dXNyLmgsIGNrdmNv bi5jLCAxNSBNYXIgMjAxMC4KLQotQnVpbHQgT0sgb24gU29sYXJpczksIE1hYyBPUyBYIDEwLjQu MTEsIFJIRUw0ICgzMi1iaXQpLCBSSEVMNSAoNjQtYml0KSwKLUFJWCA1LjMsIFNDTyBPcGVuU2Vy dnIgNi4wLjAuLi4gIDE1IE1hciAyMDEwLgotCi1Ob3Qgc28gZ29vZCBvbiBWTVMsIHR1cm5zIG91 dCBJIG1hZGUgYSB0eXBvIGluIG9uZSBvZiB0aGUgVk1TIHVwZGF0ZXMKLSgjaWZuZGVmIE9MRElQ IGluc3RlYWQgb2YgI2lmZGVmLi4uKS4gIGNrY25ldC5jLCAxNiBNYXIgMjAxMC4KLQotTW9yZSBm cm9tIFNNUyBmb3IgVk1TLCAxNiBNYXIgMjAxMDoKLSAuIFNldCBNQVhQQVRIIGNvcnJlY3RseSBm b3IgVk1TLCBja2NkZWIuaC4KLSAuIE5BTSAtPiBOQU1MLCBRSU8gcmVwbGFjZXMgc3lzdGVtKCAi U0VUIFBST1RFQ1RJT04iKSwgYnVnZml4ZXMgaW4KLSAgIGN2dGRpcigpIGFuZCBuemx0b3IoKSwg Li4uICAoU2VlIGNvbW1lbnRzKTogY2t2ZmlvLmMsIG5ldyBja3ZybXMuaC4KLSAgIChUaGUgUk1T IGNvZGUgaW4gY2t2ZmlvLmMgd2FzIGFsbW9zdCB0b3RhbGx5IHJld3JpdHRlbikKLSAuIE1vdmVk ICJOQU1YJCoiIChhbmQgcmVsYXRlZCkgbWFjcm9zIHRvIGNrdnJtcy5oLCBhbmQgcmVuYW1lZCB0 bwotICAgIk5BTVhfKiIgKGFuZCBzaW1pbGFyICIkIiAtPiAiXyIpLCBtb3ZlZCAiRklCXyoiIG1h Y3JvcyBmcm9tIGNrdnJ0bC5jLgotCi1UaGVzZSBjaGFuZ2VzIGFyZSBtYWlubHkgdG8gYWNjb21t b2RhdGUgdGhlIE9EUzUgZmlsZSBzeXN0ZW0sIHdoaWNoIGhhcwotbG9uZ2VyIGFuZCBtaXhlZC1j YXNlIGZpbGVuYW1lcywgYW5kIGFsc28gdG8gZXhlY3V0ZSBjZXJ0YWluIGNvbW1hbmRzCi0oZS5n LiBmb3Igc2V0dGluZyBmaWxlIHByb3RlY3Rpb24sIGRlbGV0aW5nIGRpcmVjdG9yaWVzKSBkaXJl Y3RseSBpbnN0ZWFkCi1vZiB1c2luZyBhIHN5c3RlbSgpIGNvbW1hbmQuCi0KLUJ1aWx0IE9LIG9u IFZNUyA4LjMgKHdpdGggYW5kIHdpdGhvdXQgbmV0d29yayBzdXBwb3J0KS4gIDE2IE1hciAyMDEw LgotCi1GYWlsZWQgdG8gYnVpbGQgb24gVk1TIDYuMi4gIDE2IE1hciAyMDEwLgotCi1GcmVlQlNE IDguMCA8bGlidXRpbC5oPiBoYXMgYSBoZXhkdW1wKCkgcHJvdG90eXBlIHRoYXQgY29uZmxpY3Rz IHdpdGggdGhlCi1oZXhkdW1wIG1hY3JvIGRlZmluZWQgaW4gY2tjZGViLmguICBTaW5jZSB0aGUg c2FtZSB0aGluZyBpcyBsaWtlbHkgdG8gaGFwcGVuCi1lbHNld2hlcmUsIEkgY2hhbmdlZCB0aGUg S2VybWl0IG1hY3JvIHRvIGNraGV4ZHVtcCBhcyB3ZWxsIGFsbCByZWZlcmVuY2VzIHRvCi1pdDog Y2tjZGViLmgsIGNrY2Z0cC5jLCBja2NuZXQuYywgY2tjdGVsLmMsIGNrdWF0aC5jLCBja3V0aW8u YywgMTYgTWFyIDIwMTAuCi0KLUJ1aWx0IE9LIG9uIERpZ2l0YWwgVW5peCBUcnUtNjQgNC4wRSB1 c2luZyAibWFrZSBvc2YiLCAxNiBNYXIgMjAxMC4KLQotVHJpZWQgYWdhaW4gdG8gYnVpbGQgRGln aXRhbCBVbml4IFRydTY0IDQuMEUgdXNpbmcgIm1ha2UgdHJ1NjQtNDBlIiwgYnV0Ci1zb21ldGhp bmcgcHJldmVudHMgaXQgZnJvbSBwaWNraW5nIHVwIHRoZSB0ZXJtaW9zIHN5bWJvbHMgYW5kIGl0 IGJsb3dzIHVwIGluCi1ja3V0aW8uYywgd2hlcmVhcyB0aGlzIHVzZWQgdG8gd29yayBpbiBlYXJs aWVyIEMtS2VybWl0IHZlcnNpb25zLiAgVGhpcyBpcwotdGhlIG9ubHkgVHJ1NjQgc3lzdGVtIEkg c3RpbGwgaGF2ZSBhY2Nlc3MgdG8sIHNvIEkgY2FuJ3QgdGVsbCBpZiBpdCdzIGEKLWxvY2FsIHBl Y3VsaWFyaXR5IG9yIHdoYXQuICBOb3RlIHRoYXQgUE9TSVggaXMgbm90IGRlZmluZWQgZm9yIHRo aXMgYnVpbGQuCi1CdXQgaWYgSSBkZWZpbmUgaXQsIEkgZ2V0IGludG8gdHJvdWJsZSB3aXRoICJz dHJ1Y3QgdGltZXZhbCIuICBUcmllZCBhZ2Fpbgotd2l0aCAiS0ZMQUdTPS1EUE9TSVggLUROT1RJ TUVWQUwiIGJ1dCB0aGF0IGRvZXNuJ3QgaGVscC4gIFRyaWVkICJtYWtlCi1kZWMtb3NmIiBhbmQg dGhhdCB3b3JrZWQgT0sgYnV0IG9kZGx5IGVub3VnaCBpdCBtYWtlcyBhIEtlcm1pdCB3aXRoIGxl c3MKLWZlYXR1cmVzIHRoYW4gIm1ha2Ugb3NmIi4gIDE2IE1hciAyMDEwLgotCi1UbyBnbyB3aXRo IE1FU1NBR0UgYW5kIFNFVCBERUJVRyBNRVNTQUdFLCBJIGFkZGVkIElGIERFQlVHLCB3aGljaCBp cyB0cnVlCi1pZiBTRVQgREVCVUcgTUVTU0FHRSBpcyBub3QgT0ZGIGFuZCBmYWxzZSBvdGhlcndp c2UuICBja3V1c3IuaCwgY2t1dXM2LmMsCi0xNiBNYXIgMjAxMC4KLQotRnJvbSBTTVM6IENvcnJl Y3Rpb25zIHRvIG15IG1lcmdpbmcgb2YgU01TJ3MgY2hhbmdlcywgY2tjZnRwLmMsIGNrdnJ0bC5o LgotQnVpbGRzIE9LIG9uIFZNUyA2LjIgbm93LiAgQWxzbyBkaWQgYW4gU1NMIGJ1aWxkIG9uIFZN UyA4LjMgd2l0aCBPcGVuU1NMCi1tMC45LjdlIGFuZCAiT1BFTlNTTF9ESVNBQkxFX09MRF9ERVNf U1VQUE9SVCIgd2FzIGluY2x1ZGVkIGluIFAzCi1hdXRvbWF0aWNhbGx5IGJ5IE1hcnRpbiBWJ3Mg YWRkaXRpb24gdG8gY2t2a2VyLmNvbS4gIDE3IE1hciAyMDEwLgotCi1Gcm9tIFNNUzogI2luY2x1 ZGUgPHR5cGVzLmg+IGVhcmxpZXIgZm9yIFZNUyBpbiBja2NkZWIuaCB0byBwaWNrIHVwIG9mZl90 Ci1iZWZvcmUgaXQgaXMgcmVmZXJlbmNlZC4gIFRoaXMgYWxsb3dzIEMtS2VybWl0IHRvIGNvbXBp bGUgb24gVk1TL0FscGhhIDYuMgotYnV0IGxpbmtpbmcgZmFpbHMgb24gZnNlZWtvKCkgYW5kIGZ0 ZWxsbygpIChhbmQgeWV0LCBhIGZ1bmN0aW9uYWwgZXhlY3V0YWJsZQotaXMgY3JlYXRlZCwgYW5k IEZTRUVLIHdvcmtzIHJpZ2h0KS4gIEJ1aWxkcyB0aGUgc2FtZSB3YXkgd2l0aCBubyBwcm9ibGVt cyBhdAotYWxsIG9uIFZNUyA4LjMgLyBBbHBoYS4gIEluIHRoaXMgY2FzZSB3ZSBnZXQgdGhlIGZ1 bGwgNjQtYml0IGFyaXRobWV0aWMuLi4KLVdlbGwsIDYyIGJpdHM6Ci0KLSAgQVRMQVM6OkMtS2Vy bWl0PiggXiAyIDYzKQotICAgOTIyMzM3MjAzNjg1NDc3NTAwMC4wCi0gIEFUTEFTOjpDLUtlcm1p dD4oIF4gMiA2MikKLSAgIDQ2MTE2ODYwMTg0MjczODc5MDQKLQotd2hlcmVhcyBvbiBWTVMgNi4y IHdlIGdldCBpbnRlZ2VycyBvbmx5IHVwIHRvICheIDIgMzApLiAgMTcgTWFyIDIwMTAuCi0KLUNo YW5nZWQgdGhlIFZNUyBidWlsZCBwcm9jZWR1cmUgdG8gZW5hYmxlIGxhcmdlIGZpbGUgc3VwcG9y dCBhdXRvbWF0aWNhbGx5Ci1mb3Igbm9uLVZBWCBhbmQgVk1TIDcuMyBvciBncmVhdGVyLiAgTm8g cmVhc29uIG5vdCB0byBpbmNsdWRlIHRoaXMgZmVhdHVyZS4KLUNoYW5nZWQgdGhlIHNlbnNlIG9m IHRoZSBGIG9wdGlvbiB0byBESVNBQkxFIGxhcmdlIGZpbGUgc3VwcG9ydCBpbiB0aGUKLXVubGlr ZWx5IGNhc2UgdGhhdCBDLUtlcm1pdCBpcyBiZWluZyBidWlsdCBvbiBhIHN1aXRhYmxlIHBsYXRm b3JtIGJ1dCB0aGUKLUMgbGlicmFyeSBpcyBvbGRlciB0aGFuIFZNUzczX0FDUlRMLVYwMjAwLCBp biB3aGljaCBjYXNlIGZzZWVrbygpIGFuZAotZnRlbGxvKCkgd2lsbCBjb21lIHVwIG1pc3Npbmcg YXQgbGluayB0aW1lLiAgY2t2a2VyLmNvbSwgMTggTWFyIDIwMTAuCi0KLUNoYW5nZWQgVk1TIGJ1 aWxkIHByb2NlZHVyZSB0byBpbmNsdWRlIHRoZSBGVFAgY2xpZW50IGluIGFueSBuZXR3b3JrIGJ1 aWxkCi1ieSBkZWZhdWx0LiAgQ2hhbmdlZCB0aGUgc2Vuc2Ugb2YgdGhlIEkgb3B0aW9uIHRvIGV4 Y2x1ZGUgdGhlIEZUUCBjbGllbnQsCi1pbiBjYXNlIGFueWJvZHkgd291bGQgd2FudCB0byBkbyB0 aGF0LiAgY2t2a2VyLmNvbSwgMTggTWFyIDIwMTAuCi0KLUZyb20gU01TOiB1cGRhdGVkIGRlcGVu ZGVuY2llcyBpbiBDS1ZLRVIuQ09NLCBmaXggdGhlICJkb24ndCByZWluY2x1ZGUgbWUiCi1jbGF1 c2UgaW4gQ0tWUlRMLkguICAxOSBNYXIgMjAxMC4KLQotQnVpbHQgT0sgb24gVk1TIDYuMiBhbmQg OC4zIHdpdGggYW5kIHdpdGhvdXQgbmV0d29ya2luZy4gIExhcmdlIGZpbGUgc3VwcG9ydAotaW5j bHVkZWQgYXV0b21hdGljYWxseSBpbiBWTVMgOC4zICBGVFAgY2xpZW50IGluY2x1ZGVkIGF1dG9t YXRpY2FsbHkgaW4gYm90aAotbmV0d29yayBidWlsZHMuICAxOSBNYXIgMjAxMC4KLQotQ2hhbmdl ZCBoZXhkdW1wKCkgdG8gY2toZXhkdW1wKCkgaW4gY2tfY3JwLmMsIHdoaWNoIEkgbWlzc2VkIGJl Zm9yZS4KLTE5IE1hciAyMDEwLgotCi0tLS1DLUtlcm1pdCA5LjAgQWxwaGEuMDMtLS0KLQotSW4g SFAtVVggd2l0aCB0aGUgYnVuZGxlZC1ub24gQU5TSSBjb21waWxlciwgd2UgZ2V0IHdhcm5pbmdz IGFib3V0IGZ1bmN0aW9ucwotc3VjaCBhcyBlbmR1c2Vyc2hlbGwoKSwgd2hpY2ggYXJlIGRlY2xh cmVkIHZvaWQgaW4gdGhlIGhlYWRlciBmaWxlcy4gIEJ1dCBpbgotbm9uLUFOU0kgYnVpbGRzIHdl IGRlZmluZCBWT0lEIHRvIGJlIGludCByYXRoZXIgdGhhbiB2b2lkLCBzbyBvdXIgcHJvdG90eXBl cwotYXJlIHdyb25nLiAgSSBjaGVja2VkIHRoYXQgSFAtVVggOSwgMTAsIGFuZCAxMSBhbGwgaGF2 ZSB2b2lkIGRhdGF0eXBlIGFuZAotY2hhbmdlZCB0aGUgZGVmaW5pdGlvbiBvZiBWT0lEIHRvIHZv aWQgaW4gdGhvc2UgY2FzZXMuICBja2NkZWIuaCwgMjkgTWFyIDIwMTAuCi0KLUZpeGVkIGEgdHlw byBpbiBhIGRlYnVnKCkgc3RhdGVtZW50IGluIGNrc3BsaXQoKSB0aGF0IHdhcyBjYXVzaW5nIHNv bWUKLXdhcm5pbmdzLiAgY2tjbGliLmMsIDI5IE1hciAyMDEwLgotCi1EaXR0byBpbiB0bHNfbG9h ZF9jZXJ0cygpLiAgY2tfc3NsLmMsIDI5IE1hciAyMDEwLgotCi0ibWFrZSBocHV4MTAwMG8rc3Ns IiBmaWxlcyB3aXRoOgotL3Vzci9jY3MvYmluL2xkOiBVbnNhdGlzZmllZCBzeW1ib2xzOgotICAg X191bW9kZGkzIChjb2RlKQotICAgX191ZGl2ZGkzIChjb2RlKQotICAgX19lcHJpbnRmIChjb2Rl KQotCi1JdCBhcHBlYXJzIHRoYXQgT3BlblNTTCAoMC45LjdjIGluIHRoaXMgY2FzZSkgcmVxdWly ZXMgLWxnY2MuCi1BbmQgaW5kZWVkIGhwdXgxMDAwZ2NjK3NzbCBidWlsZHMgZmluZS4gIDI5IE1h ciAyMDEwLgotCi1UaGVyZSBhcmUgdmFyaW91cyB3YXJuaW5ncyBpbiB0aGUgU1NMIGNvZGUgaW4g Y2t1dGlvLmMsIGNrY2Z0cC5jLCBhbmQKLWNrY25ldC5jIGFib3V0IHBvaW50ZXJzIG5vdCBiZWlu ZyBhc3NpZ25tZW50IGNvbXBhdGlibGUsIGJ1dCBJIGhhdmUgbGVhcm5lZAotZnJvbSBleHBlcmll bmNlIG5vdCB0byB0cnkgdG8gZml4IHRoZXNlIChzZWUgbm90ZXMgZnJvbSA2IE9jdCAyMDA5KS4K LTI5IE1hciAyMDEwLgotCi1jb25uZWN0KHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikmaGlzY3RsYWRk ciwgc2l6ZW9mIChoaXNjdGxhZGRyKSk6IEluIEZUUCwKLXRoaXMgZG9lc24ndCB3b3JrIG9uIFJI RUw1IC8gTWFjIE9YIFggNi4xLzIgNjQtYml0LiAgQnV0IHRoZSBjb25uZWN0KCkgaW4KLVRlbG5l dCB3b3Jrcy4gIE9uIE1hYyBPUyBYIDYuMiBJIHRyaWVkIGNoYW5naW5nIHRoZSBzb2NrZXQoKSBj YWxsIHRvIGJlIGxpa2UKLXRoZSBvbmUgaW4gY2tjbmV0LmMgZm9yIFRlbG5ldCwgYnV0IGl0IG1h ZGUgbm8gZGlmZmVyZW5jZS4gIE9uIGEgUkhFTDUuNAotc3lzdGVtIG9uIGkzODYsIEZUUCB3b3Jr cyBmaW5lLCBzbyBpdCdzIG5vdCB0aGUgUmVkIEhhdCB2ZXJzaW9uLiAgT24gRGlnaXRhbAotVW5p eCA0LjBFIDY0LWJpdCwgc2FtZSB0aGluZzoKLQotICAxMToyMzoxMC43MjIgZnRwX2hvb2t1cFtr ZXJtaXQuY29sdW1iaWEuZWR1XT0yMQotICAxMToyMzoxMC43MjIgZnRwIGhvb2t1cCBBW2tlcm1p dC5jb2x1bWJpYS5lZHVdCi0gIDExOjIzOjEwLjcyMiBmdHAgaG9va3VwIENba2VybWl0LmNvbHVt YmlhLmVkdV0KLSAgMTE6MjM6MTAuNzIyIGZ0cCBob29rdXAgc29ja2V0PTQKLSAgMTE6MjM6MTAu NzIyIGZ0cCBob29rdXAgSEFERFJMSVNUCi0gIDExOjIzOjEwLjcyMyBmdHAgaG9va3VwIGNvbm5l Y3QgZmFpbGVkPTEzCi0gIDExOjIzOjEwLjcyMyBmdHAgaG9va3VwIGJhZAotCi0xMyA9IFBlcm1p c3Npb24gZGVuaWVkOgotCi0gIFtFQUNDRVNTXSBTZWFyY2ggcGVybWlzc2lvbiBpcyBkZW5pZWQg Zm9yIGEgY29tcG9uZW50IG9mIHRoZSBwYXRoIHByZWZpeDsKLSAgICBvciB3cml0ZSBhY2Nlc3Mg dG8gdGhlIG5hbWVkIHNvY2tldCBpcyBkZW5pZWQuCi0KLU9uIEdlbnRvbyBMaW51eCwgYWxzbyBv biBBbHBoYSwgdGhlIGVycm5vIGlzIDUxOiBOZXR3b3JrIGlzIHVucmVhY2hhYmxlLgotQ2xlYXJs eSBzb21lIGRhdGEgdHlwZSBpbiB0aGUgc29ja2V0cyBzdHJ1Y3RzIGlzIG91dCBvZiB3aGFjay4K LQotVGhlIHRoaXJkIGNvbm5lY3QoKSBhcmd1bWVudCBpcyAiYWRkcmVzcyBsZW5ndGgiLiAgVGhl IGFkZHJlc3MgaXMgYQotc3RydWN0IHNvY2thZGRyLiAgQWJvdXQgdGhlIHRoaXJkIGFyZ3VtZW50 LCBSSEVMNSAibWFuIGNvbm5lY3QiIHNheXM6Ci0KLSAgVGhlIHRoaXJkIGFyZ3VtZW50IG9mIGNv bm5lY3QoKSBpcyBpbiByZWFsaXR5IGFuIGludCAoYW5kIHRoaXMgaXMgd2hhdCAKLSAgNC54IEJT RCBhbmQgbGliYzQgYW5kIGxpYmM1IGhhdmUpLiAgU29tZSBQT1NJWCBjb25mdXNpb24gcmVzdWx0 ZWQgaW4gCi0gIHRoZSBwcmVzZW50IHNvY2tsZW5fdCwgYWxzbyB1c2VkIGJ5IGdsaWJjLiAgU2Vl IGFsc28gYWNjZXB0KDIpLgotCi1CdWlsZGluZyBvbiBSSEVMNSBvbiB4ODZfNjQsIHdoZXJlIHNp emVfdCBpcyA4IGFuZCBzb2NrbGVuX3QgaXMgNCwgSSBnZXQgYQotd2FybmluZzoKLQotICBja2Nm dHAuYzogSW4gZnVuY3Rpb24gJ2Z0cF9ob29rdXAnOgotICBja2NmdHAuYzoxNDY2Nzogd2Fybmlu ZzoKLSAgIGNvbXBhcmlzb24gaXMgYWx3YXlzIHRydWUgZHVlIHRvIGxpbWl0ZWQgcmFuZ2Ugb2Yg ZGF0YQotCi1SZWZlcnJpbmcgdG86Ci0KLSAgaWYgKGhpc2N0bGFkZHIuc2luX2FkZHIuc19hZGRy ICE9ICh1bnNpZ25lZCBsb25nKSAtMSkKLQotVGhpcyBzZWVtcyB0byBiZSB0aGUgcHJvYmxlbTsg aWYgSSByZW1vdmUgdGhlICh1bnNpZ25lZCBsb25nKSBjYXN0IChpbiB0d28KLXBsYWNlcyksIHRo ZSBwcm9ibGVtIGdvZXMgYXdheS4gIEFjdHVhbGx5IHdoYXQgSSBzaG91bGQgYmUgY29tcGFyaW5n IGl0IHdpdGgKLWlzIElOQUREUl9OT05FLCB3aGljaCBpcyBkZWZpbmVkIGFwcHJvcHJpYXRlbHkg aW4gc29tZSBoZWFkZXIgZmlsZSwgZS5nLiBhcwotMHhmZmZmZmZmZi4gIEFsc28gSSBkZWZpbmUg aXQgZXhwbGljaXRseSBhcyAtMSBpZiBpdCBpcyBub3QgZGVmaW5lZCBpbiBhbnkKLWhlYWRlciBm aWxlIChhcyBpcyB0aGUgY2FzZSBpbiBTb2xhcmlzIDkpLiAgVGVzdGVkIE9LIG9uIDY0LWJpdCBS SEVMNSwKLTMyLWJpdCBSSEVMNSwgRGlnaXRhbCBVbml4IDQuMEUgNjQtYml0LCBTb2xhcmlzIDkg MzItYml0LCBNYWMgT1MgWCAxMC40LjExCi0zMi1iaXQsIE1hYyBPUyBYIDEwLjYuMyA2NC1iaXQs IEFJWCA1LjMsIEdlbnRvbyBMaW51eCAyLjYuMzEgb24gQWxwaGEKLTY0LWJpdCwgTmV0QlNEIDUu MC4xIDMyLWJpdC4uLi4gIGNrY2Z0cC5jLCAyOSBNYXIgMjAxMC4KLQotLS0tQy1LZXJtaXQgOS4w IEFscGhhLjA0LS0tCi0KLVllc3RlcmRheSdzIFZPSUQgcmVkZWZpbml0aW9uIGNhdXNlZCBwcm9i bGVtcyBmb3IgSFAtVVggaW4gY2t1dXN4LmMsIGluIHRoZQotY3Vyc2VzIHNlY3Rpb24gd2hlcmUg Vk9JRCBpcyB1bmRlZidkIGFuZCBub3QgdXNlZCB0byBhdm9pZCBhIGNvbmZsaWN0IHdpdGgKLWN1 cnNlcy5oLiAgQXMgYSB3b3JrYXJvdW5kIEkgZGVmaW5lZCBhIG5ldyBtYWNybyBDS1ZPSUQgd2l0 aCB0aGUgc2FtZQotZGVmaW5pdGlvbiBhcyBWT0lEIGFuZCB1c2VkIGl0IGluIHRoZSBvZmZlbmRp bmcgc2VjdGlvbiBvZiBja3V1c3guICBUaGUgcmVhbAotc29sdXRpb24gaXMgdG8gcmVwbGFjZSBh bGwgcmVmZXJlbmNlcyB0byBWT0lEIHdpdGggQ0tWT0lEIChzaW5jZSBWT0lEIGlzCi1pbmNyZWFz aW5nbHkgbGlrZWx5IHRvIGNhdXNlIGNvbmZsaWN0cyksIGJ1dCBhIG1hc3Mgc2VhcmNoIGFuZCBy ZXBsYWNlIGlzCi1ub3Qgd2l0aG91dCByaXNrcy4gIGNrY2RlYi5oLCBja3V1c3guYywgMzAgTWFy IDIwMTAuCi0KLUNoYW5nZWQgVk9JRCBhbmQgQ0tWT0lEIGRlZmluaXRpb24gdG8gYmUgJ3ZvaWQn IGZvciBhbGwgSFAtVVggKHZlcmlmaWVkIGJ5Ci1QZXRlckUgYmFjayB0byBIUC1VWCA2LjUsIDE5 ODkpLiAgU3RpbGwgbmVlZCB0byBjaGVjayB0aGlzIG9uIEhQLVVYIDUuMjE7Ci1pZiB0aGF0J3Mg YW4gZXhjZXB0aW9uIGl0IGNhbiBiZSBkb25lIGluIHRoZSBtYWtlZmlsZS4gIGNrY2RlYi5oLCAz MCBNYXIgMjAxMC4KLQotVGhlIGNoYW5nZSBJIG1hZGUgdG8gYWxsb3cgQ09OTkVDVCB0byByZWVz dGFibGlzaCBhIHByZXZpb3VzIFNTSCBjb25uZWN0aW9uCi1wcmV2ZW50ZWQgYSBuZXcgU1NIIGNv bm5lY3Rpb24gdG8gYSBkaWZmZXJlbnQgaG9zdCB0byBiZSBtYWRlLiAgRml4ZWQgaW4KLWNrdXVz Ny5jLCAzMCBNYXIgMjAxMC4KLQotRml4ZWQgbWlzdGFrZW4gZXh0ZXJuIGRlY2xhcmF0aW9ucyBv ZiBrcmI0X2Vycm5vIGFuZCBrcmI1X2Vycm5vIGFzIHN0cmluZ3MKLWluIG52bG9vaygpOyB0aGV5 IGFyZSBpbnRzLiBCdWlsdCBPSyBvbiBNYWMgT1MgWCAxMC42LjMuIGNrdXVzNC5jLCAzMCBNYXIg MjAxMC4KLQotQSBmaXggdG8gVHJ1c3RlZCBIUC1VWCBtYWtlZmlsZSB0YXJnZXQgZnJvbSBQZXRl ckUsIHRvIGFjY291bnQgZm9yIHRoZQotZXF1aXZhbGVuY2Ugb2YgK29wZW5zc2wgYW5kICtzc2wg YXMgdGFyZ2V0IHN1ZmZpeGVzLiAgMzAgTWFyIDIwMTAuCi0KLUFkZGVkIGEgbmV3IGZ1bmN0aW9u IFxmY3Z0Y3NldHMoc3RyaW5nLGNzZXQxLGNzZXQxKSB0aGF0IGNvbnZlcnRzIGEgc3RyaW5nCi1m cm9tIG9uZSBjaGFyYWN0ZXIgc2V0IHRvIGFub3RoZXIuICBUaGUgY3NldHMgYXJlIEZpbGUgQ2hh cmFjdGVyLVNldCBuYW1lcy4KLWNrdXVzNC5jLCAzMSBNYXIgMjAxMC4KLQotQWRkZWQgYSBuZXcg ZnVuY3Rpb24gXGZkZWNvZGVoZXgoc3RyaW5nLHByZWZpeCkgdGhhdCBkZWNvZGVzIGEgc3RyaW5n Ci1jb250YWluaW5nIHByZWZpeGVkIGhleCBieXRlcy4gIERlZmF1bHQgcHJlZml4IGlzICUlLCBi dXQgYW55IHByZWZpeCBvZgotb25lIG9mIHR3byBjaGFycyAoc3VjaCBhcyAlIG9yIDB4KSBjYW4g YmUgc3BlY2lmaWVkLiAgY2t1dXNyLmgsIGNrY2xpYi5oLAotY2tjbGliLmMsIGNrdXVzci5jLCAz MSBNYXIgMjAxMC4KLQotUmljaGFyZCBOb2xkZSByZXBvcnRzIHRoYXQgS2VybWl0IGNhbid0IGZp bmQgLWxwYW0gb24gRmVkb3JhIDEyIGJlY2F1c2UgaXQncwotaW4gL2xpYiByYXRoZXIgdGhhbiAv dXNyL2xpYi4gIFJIRUw1IGhhcyBzeW1saW5rcywgRkMxMiBzaG91bGQgdG9vLiAgQWRkZWQgYQot bm90ZSB0byB0aGUgbWFrZWZpbGUuICAxIEFwciAyMDEwLgotCi1CdWlsZCBvbiBTb2xhcmlzIDEx IGZvciB0aGUgZmlyc3QgdGltZS4gIEhhZCB0byBhZGp1c3QgY2t1dmVyLmggdG8gZ2V0IHRoZQot dmVyc2lvbiBoZXJhbGQgcmlnaHQuICBUaGlzIHdhcyBvbiBhIGJveCB0aGF0IHJlcG9ydGVkIGl0 cyBhcmNoaXRlY3R1cmUgYXMKLWk4NnBjLiAgMSBBcHIgMjAxMC4KLQotQWRkZWQgTUlNRSBjaGFy YWN0ZXItc2V0IG5hbWVzIGFzIGludmlzaWJsZSBzeW5vbnltcyBpbiB0aGUgZmlsZSBhbmQKLXRl cm1pbmFsIGNoYXJhY3Rlci1zZXQgdGFibGVzLCBmY3N0YWJbXSBhbmQgdGNzdGFiW10uICBOb3Rl IHRoYXQgbm90IGFsbCB0aGUKLWNoYXJhY3RlciBzZXRzIGtub3duIHRvIEtlcm1pdCBhcmUgcmVn aXN0ZXJlZCBpbiBNSU1FLiAgQnV0IGF0IGxlYXN0IG5vdwotTUlNRS1yZWdpc3RlcmVkIGNoYXJh Y3RlciBzZXRzIGNhbiBiZSByZWZlcnJlZCB0byBieSB0aGVpciBNSU1FIG5hbWVzLCBlLmcuCi1J U08tODg1OS0xLCBJU082NDYtRVMsIElCTTQzNywgV0lORE9XUy0xMjUyLiAgVGhlc2UgYXJlIG5v dCBsaXN0ZWQgaWYgeW91Ci10eXBlID8gaW4gYSBmaWVsZCB0aGF0IGlzIHBhcnNpbmcgdGhlbSwg dW5sZXNzIHlvdSB0eXBlIGEgbGV0dGVyIGZpcnN0LAotZS5nLiAiaT8iIGxpc3RzIElTTy0gYW5k IElCTSBzZXQgbmFtZXMuICBMYXRlciBtYXliZSBJJ2xsIG1ha2UgcGFyYWxsZWwKLXRhYmxlcywg b3Iga2V5d29yZCBhdHRyaWJ1dGUgYml0IHRoYXQgc2F5cyB3aGV0aGVyIGEgbmFtZSBpcyBNSU1F IG9yIG5vdC4KLVRoZSByZWFsIGJlbmVmaXQgb2YgdGhpcyBjaGFuZ2UgaXMgdGhhdCBub3cgS2Vy bWl0IGNhbiB0YWtlIGl0cwotY2hhcmFjdGVyLXNldCBuYW1lcyBmcm9tIGV4dGVybmFsIHNvdXJj ZXMgbGlrZSBlbWFpbCBoZWFkZXJzIG9yIHdlYiBsb2dzLgotY2t1eGxhLmMsIDEgQXByIDIwMTAu Ci0KLUNoYW5nZWQgdGhlIElGIGNvbW1hbmQgdG8gYWNjZXB0IGEgYmFyZSBtYWNybyBuYW1lIGl0 cyBjb25kaXRpb24uICBUaGlzIHdpbGwKLXBhcnNlIGFuZCBleGVjdXRlIGNvcnJlY3RseSBpZiB0 aGUgbWFjcm8gaXMgZGVmaW5lZCBhbmQgaWYgaXQgaGFzIGEgbnVtZXJpYwotdmFsdWUsIG9yIGlm IGl0IGlzIG5vdCBkZWZpbmVkLCBpbiB3aGljaCBjYXNlIGl0IGV2YWx1YXRlcyB0byAwIChGQUxT RSkuICBJZgotaXQgaXMgZGVmaW5lZCBidXQgaGFzIGEgbm9uLW51bWVyaWMgdmFsdWUsIGEgcGFy c2UgZXJyb3Igb2NjdXJzLiAgY2t1dXM2LmMsCi0yIEFwciAyMDEwLgotCi1BZGRlZCBcZnN0cmlu Z3R5cGUoKSBmdW5jdGlvbi4gIEdpdmVuIGEgc3RyaW5nIGFyZ3VtZW50LCBpdCB0ZWxscyB3aGV0 aGVyCi10aGUgc3RyaW5nIGlzIDdiaXQsIDhiaXQsIHV0ZjgsIGJpbmFyeSwgZXRjLiAgY2t1dXNy LmgsIGNrdXVzWzR4XS5jLAotMiBBcHIgMjAxMC4KLQotRGlkIGEgZmV3IGJ1aWxkcyB0byBtYWtl IHN1cmUgdGhlcmUgd2VyZSBubyBib29ib29zLiAgU29sYXJpcyA5LCBOZXRCU0QKLTUuMDEsIExp bnV4IFJIRUw0LCBIUC1VWCAxMC4yMCAobm9uLUFOU0kgY29tcGlsZXIgYW5kIEFOU0kgb3B0aW1p emluZwotY29tcGlsZXIpLCBNYWMgT1MgWCAxMC40LjExLCBTQ08gT1NSIDYuMDAuICA1IEFwciAy MDEwLgotCi0tLS1DLUtlcm1pdCA5LjAgQWxwaGEuMDUtLS0KLQotSW5jcmVhc2VkIG1heGltdW0g dmFyaWFibGUgbmFtZSBsZW5ndGggZnJvbSA0SyB0byAxNksuIFZlcmlmaWVkIHRoYXQKLXRvby1s b25nIG5hbWVzIGFyZSBjYXVnaHQgYW5kIHJlY292ZXJlZCBmcm9tIGNvcnJlY3RseS4gIGNrdXVz ci5oLCA2IEFwciAyMDEwLgotCi1JbXBsZW1lbnRlZCBhIG5ldyBcZnNwbGl0KCkgb3B0aW9uIGZv ciBwYXJzaW5nIENTViBmaWxlcywgd2hpY2ggdHVybnMgb3V0IHRvCi1iZSBhIGxpdHRsZSBjb21w bGljYXRlZCwgYmVjYXVzZSB0aGUgc2VwYXJhdG9yIGlzIG5vdCBqdXN0IGEgY29tbWEsIGJ1dCBh Ci1jb21tYSBhbmQgYWxsIGl0cyBzdXJyb3VuZGluZyBzcGFjZXMuICBBbHNvIHRoZXJlIGFyZSBz cGVjaWFsIHF1b3RpbmcgcnVsZXMKLWZvciBmaWVsZHMgd2l0aCBlbWJlZGRlZCBjb21tYXMgYW5k IGZpZWxkcyB3aXRoIGVtYmVkZGVkIHF1b3Rlcy4gIGNrY2xpYi5jLAotNyBBcHIgMjAxMC4KLQot LS0tQy1LZXJtaXQgOS4wIEFscGhhLjA2LS0tCi0KLVZNUyBjaGFuZ2VzIGZyb20gU01TLiAgVGhl eSBidWlsZCBPSywgS2VybWl0IGZpbGUgdHJhbnNmZXJzIGFyZSBzdGlsbCBPSywKLWJ1dCBGVFAg dGV4dC1tb2RlIEdFVHMgYWx3YXlzIGhhbmcgb24gdGhlIDEwdGggOEsgbmV0d29yayByZWFkLiAg Q291bGRuJ3QKLWdldCBhIGRlYnVnIGxvZyB0aGlzIHRpbWUuICBja2NtYWkuYywgY2t2ZmlvLmMs IGNrdnJtcy5oLCBja3ZrZXIuY29tLgotOCBBcHIgMjAxMC4KLQotQ2hhbmdpbmcgVk5BTUwgZnJv bSA0SyB0byAxNksgYnJva2UgdGhlIGJ1aWxkIG9uIEhQLVVYIDkuICBQdXQgaXQgYmFjayB0bwot NEsuICA5IEFwciAyMDEwLgotCi1Kb2huIER1bmxhcCwgcnVubmluZyBkYXlzLWxvbmcgc3RyZXNz IHRlc3RzIGJldHdlZW4gRS1LZXJtaXQgYW5kIEMtS2VybWl0LAotZm91bmQgYSBidWcgaW4gdGhl IHBhY2tldC1yZWFkaW5nIGFuZCAtZGVjb2RpbmcgY29kZTogSWYgYSBOQUsgcGFja2V0Ci1hcnJp dmVzIHdpdGggaXRzIGxlbmd0aCBmaWVsZCBjb3JydXB0ZWQgdG8gaW5kaWNhdGUgYSBiaWdnZXIg c2l6ZSwgYW5kIHRoZXJlCi1hcmUgZW5vdWdoIGJ5dGVzIGZvbGxvd2luZyBpbiB0aGUgcGlwZWxp bmUsIHR0aW5sKCkgd2lsbCByZXR1cm4gYSB0b28tbG9uZwotcGFja2V0IChpZiB0aGVyZSBhcmUg bm90IGVub3VnaCBieXRlcyB3YWl0aW5nIHRvIGJlIHJlYWQsIHRoZW4gdHRpbmwoKSB3aWxsCi1w cm9wZXJseSB0aW1lIG91dCkuICBJbiB0aGUgYmFkIGNhc2UgcnBhY2soKSB0cnVzdHMgdGhlIHBh Y2tldCBsZW5ndGgsIHVzZXMKLWl0IGFzIHRoZSBiYXNpcyBmb3IgY29tcHV0YXRpb24gb2YgdGhl IGJsb2NrLWNoZWNrIGxlbmd0aCwgd2hpY2ggaXMgdGhlbgotdXNlZCB0byBhY2Nlc3MgbWVtb3J5 IHRoYXQgbWlnaHQgbm90IGJlIHRoZXJlLCBjYXVzaW5nIChhdCBsZWFzdCBvbiBKb2huJ3MKLUxp bnV4IHN5c3RlbSkgYSBzZWdtZW50YXRpb24gZmF1bHQuICBKb2huIGFkZGVkIHRoZSBub3JtYWwg Y2xhdXNlIHRvIGNoZWNrCi10aGUgcmVzdWx0IG9mIHRoZSBibG9jay1jaGVjayBjYWxjdWxhdGlv biwgYW5kIEkgY2hhbmdlZCB0dGlubCgpIHRvIGFsd2F5cwotYnJlYWsgb24gdGhlIGVvbCBjaGFy YWN0ZXIgKG5vcm1hbGx5IGNhcnJpYWdlIHJldHVybiksIHNpbmNlIHRoaXMgY2FuIG5ldmVyCi1h cHBlYXIgaW4gYSBwYWNrZXQsIGV2ZW4gaWYgd2UgInNldCBjb250cm9sIHVucHJlZml4IGFsbCIu ICBBbHNvIGFkZGVkIGEKLWNoZWNrIHRvIHR0aW5sKCkgdG8gcHJvdGVjdCBhZ2FpbnN0IGxlbmd0 aCBmaWVsZHMgY29ycnVwdGVkIGludG8gaWxsZWdhbAotdmFsdWVzLiAgY2tjZm4yLmMsIGNrdXRp by5jLCAxMyBBcHIgMjAxMC4KLQotRnJvbSBMZXdpcyBNY0NhcnRoeToKLSAgQmFzZWQgb24gY29k ZSBpbnNwZWN0aW9uLCBDLUtlcm1pdCBhcHBlYXJzIHRvIGhhdmUgYW4gU1NMLXJlbGF0ZWQgc2Vj dXJpdHkKLSAgdnVsbmVyYWJpbGl0eSBhbmFsb2dvdXMgdG8gdGhhdCBpZGVudGlmaWVkIGFzIENW RS0yMDA5LTM3NjcgKHNlZSBlLmcuCi0gIGh0dHA6Ly9jdmUubWl0cmUub3JnL2NnaS1iaW4vY3Zl bmFtZS5jZ2k/bmFtZT1DVkUtMjAwOS0zNzY3KS4KLQotICBJJ20gYXR0YWNoaW5nIGEgcGF0Y2gg Zm9yIHRoaXMgaXNzdWUgcmVsYXRpdmUgdG8gdGhlIHJldmlzaW9uIG9mIGNrX3NzbC5jCi0gIG9i dGFpbmVkIGZyb20gYSBjb3B5IG9mIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9mdHAv dGVzdC90YXIveC56aXAKLSAgZG93bmxvYWRlZCBvbiAyMDEwLzA3LzMwLCB3aGljaCBJIGJlbGll dmUgaXMgdGhlIGxhdGVzdC4KLQotICBXaGVuIHRoaXMgZmxhdyB3YXMgZmlyc3Qgd2lkZWx5IHB1 YmxpY2l6ZWQgYXQgbGFzdCB5ZWFyJ3MgQmxhY2sgSGF0Ci0gIGNvbmZlcmVuY2UsIGl0IHdhcyBj bGFpbWVkIHRoYXQgc29tZSBwdWJsaWMgY2VydGlmaWNhdGUgYXV0aG9yaXRpZXMgaGFkCi0gIGlu ZGVlZCBpc3N1ZWQgY2VydGlmaWNhdGVzIHRoYXQgY291bGQgYmUgdXNlZCB0byBleHBsb2l0IHRo aXMgY2xhc3Mgb2YKLSAgdnVsbmVyYWJpbGl0eS4gQXMgZmFyIGFzIEkga25vdyB0aGV5IGhhdmUg bm90IHJldmVhbGVkIHNwZWNpZmljYWxseSB3aGljaAotICBwdWJsaWMgQ0EocykgaGFkIGJlZW4g Zm91bmQgaXNzdWluZyBzdWNoIGNlcnRpZmljYXRlcy4KLSAgU29tZSByZWZlcmVuY2VzOiBodHRw Oi8vd3d3Lm1zZWNsYWIuY29tLz9wPTE4MAotICBodHRwOi8vd3d3LnRoZXJlZ2lzdGVyLmNvLnVr LzIwMDkvMDcvMzAvdW5pdmVyc2FsX3NzbF9jZXJ0aWZpY2F0ZS8KLQotUGF0Y2hlcyBhZGRlZCB0 byBja19zc2wuYywgNCBBdWcgMjAxMC4KLQotUGV0ZXIgRWljaGhvcm4gcmVwb3J0ZWQgdGhhdCAi UkVOQU1FIC4uL3ggLiIgZGlkbid0IHdvcmsuICBUaGlzIGlzIGEgc2lkZQotZWZmZWN0IG9mIHRo ZSBjaGFuZ2VzIG9mIDIwMDYgdG8gdGhlIFJFTkFNRSBjb21tYW5kLCB0aGVyZSB3YXMgYSBsaXR0 bGUKLWNvbmZ1c2lvbiBpbiB0aGUgcmVuYW1lb25lKCkgcm91dGluZTsgZml4ZWQgaW4gY2t1dXM2 LmMsIDQgQXVnIDIwMTAuCi0KLUlmIG9ubHkgb25lIGZpbGUgaXMgRk9QRU4nZCwgRkNMT1NFIGdp dmVuIHdpdGggbm8gYXJndW1lbnRzIHdvdWxkIGNsb3NlIGl0LgotVHVybnMgb3V0IHRvIGJlIGEg YmFkIGlkZWEuIEV4YW1wbGU6IHByb2dyYW0gd2l0aCBhbiBpbnB1dCBhbmQgb3V0cHV0IGZpbGUs Ci10cnkgdG8gY2xvc2UgdGhlIG91dHB1dCBmaWxlIGJlZm9yZSBpdCBpcyBvcGVuZWQgYnkganVz dCB0eXBpbmcgRkNMT1NFOyB0aGlzCi1jYW4gbWVzcyB1cCB0aGUgaW5wdXQgZmlsZS4gICBGb3Ig c2FmZXR5IEZDTE9TRSBoYXMgdG8gcmVxdWlyZSBhIGNoYW5uZWwKLW51bWJlciBvciBBTEwuICBj a3V1czcuYywgNCBBdWcgMjAxMC4KLQotQWRkZWQgXGZzdHJjbXAoczEsczIsY2FzZSxzdGFydCxs ZW5ndGgpLCB3aGljaCBoYXMgdGhlIGFkdmFudGFnZSBvdmVyIElGCi1FUVUsTEdULExMVCB0aGF0 IGNhc2Ugc2Vuc2l0aXZpdHkgY2FuIGJlIHNwZWNpZmllZCBhcyBhIGZ1bmN0aW9uIGFyZywgYW5k Ci1hbHNvIHN1YnN0cmluZ3MgY2FuIGJlIHNwZWNpZmllZC4gIGNrdXVzci5oLCBja3V1c1syNF0u YywgNSBBdWcgMjAxMC4KLQotVGhlIENTViBmZWF0dXJlIG9mIEFscGhhLjA2IGhhZCBhIHN1YnRs ZSBmbGF3LCBuYW1lbHkgdGhhdCBpZiB0aGUgbGFzdCBpdGVtCi1pbiBhIGNvbW1hIHNlcGFyYXRl ZCBsaXN0IHdhcyBlbmNsb3NlZCB3aXRoaW4gZG91YmxlcXVvdGVzIHdpdGggYSB0cmFpbGluZwot c3BhY2UgYWZ0ZXIgdGhlIGNsb3NpbmcgZG91YmxlcXVvdGUsIGEgc3B1cmlvdXMgZW1wdHkgZmlu YWwgZWxlbWVudCB3b3VsZCBiZQotY3JlYXRlZCBpbiB0aGUgcmVzdWx0IGFycmF5LiAgRml4ZWQg aW4gY2tzcGxpdCgpLCBja2NsaWIuYywgNSBBdWcgMjAxMC4KLQotLS0tQWxwaGEuMDctLS0KLQot VGhlIENTViBmZWF0dXJlIG9mIFxmc3BsaXQoKSBzcGxpdHMgYSBjb21tYS1zZXBhcmF0ZWQgbGlz dCBpbnRvIGFuIGFycmF5LgotVG8gdHVybiB0aGUgYXJyYXkgYmFjayBpbnRvIGEgY29tbWEgc2Vw YXJhdGVkIGxpc3QsIFxmam9pbigmYSxcNDQsMSkgYWxtb3N0Ci13b3JrcywgZXhjZXB0IGZvciBl bGVtZW50cyBjb250YWluIGxpdGVyYWwgZG91YmxlcXVvdGVzLCBzdWNoIGFzOgotCi0gIE1vaGFt bWFkICJUaGUgR3JlYXRlc3QiIEFsaQotCi1UaGlzIGNhbGxzIGZvciBtYWtpbmcgYSBzeW1ib2xp YyBDU1YgYXJndW1lbnQgZm9yIFxmam9pbigpIGxpa2UgdGhlIG9uZSB0aGF0Ci13YXMgbWFkZSBm b3IgXGZzcGxpdCgpOiBcZmpvaW4oJmEsQ1NWKS4gIEFsc28gXGZqb2luKCZhLFRTVikgZm9yCi1U YWItc2VwYXJhdGVkIGxpc3QuICBUaHVzIGlmIEtlcm1pdCByZWFkcyBhIHJlY29yZCBpbiBDU1Yg Zm9ybWF0LCBzcGxpdHMgaXQKLWludG8gYW4gYXJyYXksIGFuZCB0aGVuIGpvaW5zIHRoZSBhcnJh eSBiYWNrIGludG8gYSBDU1YgcmVjb3JkLCB0aGUgcmVzdWx0Ci13aWxsIGJlIGVxdWl2YWxlbnQg dG8gdGhlIG9yaWdpbmFsLCBhY2NvcmRpbmcgdG8gdGhlIENTViBkZWZpbml0aW9uLiAgSXQKLW1p Z2h0IG5vdCBiZSBpZGVudGljYWwsIGJlY2F1c2UgaWYgdGhlIHJlc3VsdCBoYWQgZXh0cmFuZW91 cyBzcGFjZXMgYmVmb3JlCi1vciBhZnRlciB0aGUgc2VwYXJhdGluZyBjb21tYXMsIHRoZXNlIGFy ZSBkaXNjYXJkZWQsIGJ1dCB0aGF0IGRvZXMgbm90Ci1hZmZlY3QgdGhlIGVsZW1lbnRzIHRoZW1z ZWx2ZXMuICBGdXJ0aGVybW9yZSBpdCBpcyBub3cgcG9zc2libGUgdG8gY29udmVydAotYSBjb21t YS1zZXBhcmF0ZWQgbGlzdCBpbnRvIGEgdGFiLXNlcGFyYXRlZCBsaXN0LCBhbmQgdmljZSB2ZXJz YSAod2hpY2ggaXMKLW5vdCBhIHNpbXBsZSBtYXR0ZXIgb2YgY2hhbmdpbmcgY29tbWFzIHRvIHRh YnMgb3IgdmljZSB2ZXJzYSkuICBja3V1czQuYywKLTEyIEF1ZyAyMDEwLgotCi1Gcm9tIEpvb3Ag Qm9vbmVuIDI2IEp1bGkgMjAxMDogIkFkZGVkIEhBVkVfTE9DS0RFViBhcyBvcGVuU3VTRSA+PSAx MS4zIHVzZXMKLWxvY2tkZXYgYnV0IG5vdCBiYXVkYm95LiAgVGhleSB1c2UgdHR5bG9jayBkaXJl Y3RseS4gIFRoZSBwcm9ncmFtIGNvZGUgaGFzCi1iZWVuIGFkZGVkIHNvIHRoZSB0aGUgcHJvZ3Jh bSB3b3JrcyB3aXRob3V0IGEgcHJvYmxlbS4iICBtYWtlZmlsZSwgY2tjZGViLmgsCi1ja3V0aW8u YywgY2t1dXM1LmMsIDIzIEF1ZyAyMDEwLgotCi0tLS1BbHBoYS4wOC0tLQotCi1Gcm9tIEdhcnkg TWlsbHMgYXQgdGhlIFUgb2YgTWFuaXRvYmE6IGNvbnZlcnQgU29sYXJpcyB2ZXJzaW9uIGZyb20g QlNEIHB0eXMKLXRvIHN0cmVhbXMgcHR5cyBiZWNhdXNlIHRoZXJlIGFyZSBvbmx5IDQ4IEJTRC1z dHlsZSBwdHlzIGFuZCBoZSB3YXMgcnVubmluZwotb3V0LiAgTm8gY29kZSBjaGFuZ2VzIG5lZWRl ZCwgdGhlIG9ubHkgY2hhbmdlIG5lY2Vzc2FyeSB3YXMgdG8gYWRkIHRoZQotZm9sbG93aW5nIGZs YWdzIHRvIHRoZSBtYWtlZmlsZSB0YXJnZXQ6Ci0KLSAgLURIQVZFX1NUUkVBTVMgLURIQVZFX0dS QU5UUFQgLURIQVZFX1BUU05BTUUKLSAgLURQVVNIX1BURU0gLURQVVNIX0xEVEVSTSAtRFBVU0hf VFRDT01QQVQKLQotbWFrZWZpbGUsIGNrY21haS5jLCAyMSBTZXAgMjAxMC4KLQotVGVzdGluZyB0 aGlzIGluIFNvbGFyaXMgOSBJIHNlZSB0aGF0IHRoZSBERVMgbGlicmFyeSBkaXNhcHBlYXJlZC4g IEFkZGVkCi1jb2RlIHRvIHRoZSBzb2xhcmlzOSB0YXJnZXRzIChhbHNvIHVzZWQgYnkgU29sYXJp cyAxMCBhbmQgMTEpIHRvIGNoZWNrIGZvcgotdGhpcy4gIG1ha2VmaWxlLCAyMSBTZXAgMjAxMC4K LQotVGhlIFNvbGFyaXMgdGFyZ2V0IGNoZWNrZWQgdGhlIE9wZW5TU0wgdmVyc2lvbiBhdXRvbWF0 aWNhbGx5IHRvIHNldCB0aGUKLXJpZ2h0IGZsYWcsIHRoZSBMaW51eCB0YXJnZXQgZGlkbid0LiAg UHV0IHRoZSBPcGVuU1NMLXZlcnNpb24gdGVzdGluZyBjb2RlCi1pbiB0aGUgTGludXggdGFyZ2V0 IHRvby4gIG1ha2VmaWxlLCAyMSBTZXAgMjAxMC4KLQotQSBjb3VwbGUgbWlub3IgY2hhbmdlcyB0 byB0aGUgdHJ1NjQtNTFiIG1ha2VmaWxlIHRhcmdldHMgZnJvbSBTdGV2ZW4gU2Nod2VkYQotYnV0 IHRoZXJlIHN0aWxsIGFyZSBzb21lIHByb2JsZW1zIHdpdGggdGhlIFRydTY0IFVuaXggYnVpbGRz LgotbWFrZWZpbGUsIDIxIFNlcCAyMDEwLgotCi0tLS1BbHBoYS4wOS0tLQotCi1cZmNvbnRlbnRz KFwmYVszXSkgZ290IGFuIGVycm9yIGlmIHRoZSBhcnJheSB3YXMgZGVjbGFyZWQgYnV0IGl0cyBk aW1lbnNpb24KLXdhcyBsZXNzIHRoYW4gMywgd2hpY2ggaXMgYmFkIHdoZW4gZGVhbGluZyB3aXRo IChzYXkpIGFuIGFycmF5IGNyZWF0ZWQKLWR5bmFtaWNhbGx5IGJ5IFxmc3BsaXQoKSwgd2hpY2gg bWlnaHQgb3IgbWlnaHQgbm90IGhhdmUgYSB0aGlyZCBlbGVtZW50LgotSW4gY2FzZSBpdCBkb2Vz bid0IC0tIGkuZS4gaW4gY2FzZSB3ZSBhcmUgcmVmZXJyaW5nIHRvIGFuIG91dCBvZiByYW5nZQot ZWxlbWVudCBvZiBhbnkgYXJyYXkgdGhhdCBpcyBkZWNsYXJlZCAtLSB3ZSBzaG91bGQganVzdCBy ZXR1cm4gYSBudWxsCi1zdHJpbmcsIGFzIHdlIGRvIHdpdGggb3RoZXIgdHlwZXMgb2YgdmFyaWFi bGVzIHRoYXQgYXJlIG5vdCBkZWZpbmVkLgotRm9yIHRoYXQgbWF0dGVyLCBkaXR0byBldmVuIGlm IHRoZSBhcnJheSBpcyBub3QgZGVjbGFyZWQ7IHdoYXQgdXNlZnVsCi1wdXJwb3NlIGlzIHNlcnZl ZCBieSB0aHJvd2luZyBhbiBlcnJvciBpbiB0aGlzIGNhc2U/Ci1ja3V1czQuYywgMzAgRGVjIDIw MTAuCi0KLWNrc3BsaXQoKSB0cmVhdHMgXCBhcyBhIHF1b3RpbmcgY2hhcmFjdGVyLiAgSWYgdGhl IHNvdXJjZSBzdHJpbmcgY29udGFpbnMKLWJhY2tzbGFzaGVzLCB0aGV5IGFyZSBzd2FsbG93ZWQg KG9yLCBpZiBkb3VibGVkLCBvbmUgaXMga2VwdCkuICBUaGF0J3Mgbm90Ci1nb29kIGZvciBwYXJz aW5nIGV4dGVybmFsIGRhdGEsIHN1Y2ggYXMgbGluZXMgcmVhZCBmcm9tIGZpbGVzLCB3aGVyZSB0 aGVyZQotYXJlIG5vIHF1b3RpbmcgcnVsZXMuICBUaGlzIGNhbWUgdXAgd2hlbiBwYXJzaW5nIENT ViBmaWxlczsgYXMgYSB3b3JrYXJvdW5kLAotSSBtYWRlIFxmc3BsaXQoKSB0cmVhdCBiYWNrc2xh c2ggYXMgYW4gb3JkaW5hcnkgY2hhcmFjdGVyIGZvciBDU1YgYW5kIFRTVgotc3BsaXR0aW5nIChh IGJldHRlciBzb2x1dGlvbiBtaWdodCBiZSB5ZXQgYW5vdGhlciBhcmd1bWVudCB0aGF0IHNwZWNp ZmllcwotYSBxdW90ZSBjaGFyYWN0ZXIpLiAgY2tjbGliLmMsIDMwIERlYyAyMDEwLgotCi1CZWdh biBjb252ZXJ0aW5nIEMtS2VybWl0IHRvIE9wZW4gU291cmNlIHdpdGggdGhlIFNpbXBsaWZpZWQg My1DbGF1c2UgQlNECi1saWNlbnNlLiAgVXBkYXRlZCB0aGUgdGV4dCBmb3IgdGhlIElOVFJPLCBM SUNFTlNFLCBORVdTLCBhbmQgU1VQUE9SVAotY29tbWFuZHMuICBGaXhlZCB0aGluZ3Mgc28gdGhl IGNvcHlyaWdodCB5ZWFyIHRvIGJlIGRpc3BsYXllZCBpcyBkZWZpbmVkIGluCi1vbmUgcGxhY2Ug KGNrX2NyeWVhciBpbiBja2NtYWkuYyksIHJhdGhlciB0aGFuIGhhcmR3aXJlZCBpbnRvIHRleHQg c3RyaW5ncwotYWxsIG92ZXIgdGhlIHBsYWNlLiAgQ09QWUlORy5UWFQsIGNrY21haS5jLCBja3V1 c1syNTZdLmMsIDIgSnVuIDIwMTEuCi0KLVdoZW4gSSBhZGRlZCBNSU1FIHN5bm9ueW1zIGZvciBL ZXJtaXQgY2hhcmFjdGVyLXNldCBuYW1lcywgSSBsZWZ0IGEgYm9ndXMKLWVudHJ5IGluIHRoZSB0 YWJsZXMgKCJ3aW5kb3dzLTEyNTEiKSB0aGF0IHdhcyBpbiB0aGUgd3JvbmcgcGxhY2UKLWFscGhh YmV0aWNhbGx5LCB0aHVzIHByZXZlbnRpbmcgbW9zdCByZWZlcmVuY2VzIHRvIGZpbGUgY2hhcmFj dGVyLXNldCBuYW1lcwotZnJvbSB3b3JraW5nIHJpZ2h0LiAgUmVtb3ZlZCB0aGUgYm9ndXMgZW50 cnkuICBja3V4bGEuYywgMiBKdW4gMjAxMS4KLQotTW9zdCBjb21iaW5hdGlvbnMgd29yayBPSywg YnV0IG5vdCB0cmFuc2xhdGluZyBDeXJpbGxpYyB0ZXh0IGZyb20gVVRGLTgKLXRvIExhdGluL0N5 cmlsbGljLCBhbmQgcHJvYmFibHkgdGhlIHNhbWUgd291bGQgYmUgdHJ1ZSBmb3IgYW55IGNhc2Ug b2YKLWNvbnZlcnRpbmcgZnJvbSBVVEYtOCBvciBVQ1MtMiB0byBhbnl0aGluZyBlbHNlLiAgVGhl IHByb2JsZW0gd2FzIGluCi14Z25ieXRlKCksIHdoaWNoIGNvbnZlcnRzIHRoZSBpbnB1dCBzdHJl YW0gZnJvbSB0aGUgc3BlY2lmaWVkIGNoYXJhY3RlciB0bwotVUNTMjsgaXQgbmVlZGVkIHRvIG1h a2UgYSBzcGVjaWFsIGNhc2UgZm9yIHdoZW4gdGhlIGlucHV0IGZpbGUgd2FzIGFscmVhZHkKLVVu aWNvZGUuICBCZWxpZXZlIGl0IG9yIG5vdCwgdGhpcyBwcm9ibGVtIG9jY3VycmVkIGF0IGxlYXN0 IGFzIGZhciBiYWNrIGFzCi04LjAuMjAxICg5LjUgeWVhcnMgYWdvKSBhbmQgbm9ib2R5IG5vdGlj ZWQuICBTbyBpZiB0aGUgZml4IGlzbid0IHBlcmZlY3QKLXByb2JhYmx5IG5vYm9keSB3aWxsIG5v dGljZSB0aGF0IGVpdGhlci4gIGNrY2Zucy5jLCAzIEp1biAyMDExLgotCi1UaGUgU0VUIEJMT0NL IENIRUNLIGNvbW1hbmQgZGlkIG5vdCBwYXJzZSBhbGwgdGhlIGl0ZW1zIGluIGl0cyBrZXl3b3Jk Ci1saXN0LiAgRml4ZWQgaW4gY2t1dXMzLmMsIDMgSnVuIDIwMTEuCi0KLUZvciBFTS1BUEVYIG9j ZWFuIGZsb2F0cyBwcm9qZWN0LCB3aGVyZSBidW95cyBpbiBzdG9ybXkgd2F0ZXJzIGhhdmUgdG8K LXRyYW5zbWl0IGRhdGEgdGhyb3VnaCBhbiBlYXJ0aCBzYXRlbGxpdGUgdXNpbmcgbm9uLWVycm9y LWNvcnJlY3RpbmcgbW9kZW1zLAotSm9obiBEdW5sYXAgcmFuIGV4aGF1c3RpdmUgc3RyZXNzIHRl c3RzIG9mIEtlcm1pdCBwcm90b2NvbCB0cmFuc2ZlcnMgdGhyb3VnaAotYSBzaW11bGF0ZWQgY29u bmVjdGlvbiB0aGF0IGluamVjdGVkIGVycm9ycyBhbmQgZGVsYXlzIGFuZCBpZGVudGlmaWVkIGEK LXdlYWtuZXNzIGluIEtlcm1pdCBwcm90b2NvbCB3aGVuIGl0IGlzIHVzZWQgdW5kZXIgZXh0cmVt ZWx5IGJhZCBjb25kaXRpb25zOgotSWYgYSBkYXRhIGJ5dGUgb2YgdGhlIFMgcGFja2V0IChvciBp dHMgQWNrKSBpcyBjb3JydXB0ZWQgYW5kIHRoZSAxLWJ5dGUKLWNoZWNrc3VtIGlzIGFsc28gY29y cnVwdGVkIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGF0IHRoZSBjaGVja3N1bSBtYXRjaGVzIHRoZQot Y29ycnVwdGVkIGRhdGEsIHRoZSB0d28gS2VybWl0IHByb2dyYW1zIHdpbGwgZGlzYWdyZWUgYXMg dG8gdGhlIG5lZ290aWF0ZWQKLXBhcmFtZXRlcnMuICBGb3IgZXhhbXBsZSwgaWYgZmlsZSBTZW5k ZXIncyBSUFQgZmllbGQgaXMgY2hhbmdlZCBmcm9tICd+JyB0bwotJ14nLCB0aGUgcmVjZWl2ZXIg d2lsbCBkZWNvZGUgdGhlIHBhY2tldCBpbmNvcnJlY3RseS4gIERpdHRvIGZvciBtb3N0IG9mIHRo ZQotb3RoZXIgcGFyYW1ldGVycy4gIFRoZSByZXN1bHQgaXMgdGhhdCBhIGNvcnJ1cHRlZCBmaWxl IGlzIHJlY2VpdmVkIGJ1dAotcmVwb3J0ZWQgY29ycmVjdC4gIEpvaG4gc3VnZ2VzdGVkIGEgbmV3 IG1vZGUgb2Ygb3BlcmF0aW9uIGluIHdoaWNoIHRoZSBUeXBlCi0zIGJsb2NrIGNoZWNrIGlzIHVz ZWQgZm9yIGFsbCBwYWNrZXRzLiAgU3VjaCBhIG1vZGUgY2FuIG5vdCBiZSBuZWdvdGlhdGVkCi1i ZWNhdXNlIHRoZSBuZWdvdGlhdGlvbiBwYWNrZXQgaXRzZWxmIGlzIGFzc3VtZWQgYnkgYWxsIEtl cm1pdCBwcm9ncmFtcyB0bwotaGF2ZSBhIDEtYnl0ZSBjaGVja3N1bS4gIEFkZGVkIFNFVCBCTE9D Sy1DSEVDSyA1IHRvIHRoZSBwYXJzZXIgKHdpdGgKLWludmlzaWJsZSBzeW5vbnltIEZPUkNFLTMi LiAgY2t1dXMzLmMsIDMgSnVuIDIwMTEuCi0KLUFkZGVkIHN1cHBvcnRpbmcgY29kZSBmb3IgU0VU IEJMT0NLIDU6IGNrY2ZuWzIzXS5jLCBja2Nwcm8udywgY2tjbWFpLmMsCi1ja3V1czMuYywgMyBK dW4gMjAxMS4KLQotQWRkZWQgY29kZSB0byBza2lwIHRoZSBoZXVyaXN0aWMgdGhhdCBTIGFuZCBJ IHBhY2tldHMgYWx3YXlzIGhhdmUgYmxvY2sKLWNoZWNrIHR5cGUgMS4gIEZpbGUgdHJhbnNmZXIg T0sgYmV0d2VlbiB0d28gQy1LZXJtaXRzIHdpdGggU0VUIEJMT0NLIDUuCi1ycGFjaygpOiBja2Nm bjIuYywgNSBKdW4gMjAxMS4KLQotTWFkZSB0aGUgZmlsZSByZWNlaXZlciBwdXQgIjUiIGluIHRo ZSBibG9jay1jaGVjay10eXBlIGluIGl0cyBBQ0sgdG8gdGhlCi1TLVBhY2tldC4gIHNwYXIoKTog Y2tjZm5zLmMsIDUgSnVuIDIwMTEuCi0KLU5vdyB0aGUgcXVlc3Rpb24gaXM6IENhbiB3ZSBtYWtl IHRoZSBmaWxlIHJlY2VpdmVyIGF1dG9tYXRpY2FsbHkgYW5kIHNhZmVseQotcmVjb2duaXplIGEg dGhyZWUtYnl0ZSBibG9jayBjaGVjayBvbiBhbiBpbmNvbWluZyBTIG9yIEkgcGFja2V0PyAgSXQn cwotdHJpY2t5IGJlY2F1c2UgdGhlIGJsb2NrIGNoZWNrIGZpZWxkIGlzIG5vdCBzZWxmLWlkZW50 aWZpZWQsIGl0J3MganVzdCB0aGUKLWxhc3QgIm4iIGNoYXJhY3RlcnMgb2Ygc3RyaW5nIGluZGlj YXRlZCBieSB0aGUgbGVuZ3RoIGZpZWxkLCBzbyBjb3JyZWN0Ci1kZWNvZGluZyBvZiB0aGUgcGFj a2V0IGRlcGVuZHMgb24gc3RhdGVmdWwga25vd2xlZGdlIG9mICJuIi4gIEhvdyBhYm91dCB0aGlz OgotcnBhY2soKSBhbHJlYWR5IGtub3dzIHdoYXQgdHlwZSBvZiBwYWNrZXQgaXQgaXMsIHNvIGlm IGl0J3MgYW4gUyBvciBJIHBhY2tldAotYW5kIHRoZSA4dGggYnl0ZSBvZiB0aGUgZGF0YSBmaWVs ZCBpcyAiNSIgYW5kIGxhc3QgMyBieXRlcywgd2hlbiBpbnRlcnByZXRlZAotYXMgdGhlIENSQywg bWF0Y2ggdGhlIHBhY2tldCBjb250ZW50cywgdGhlbiB3ZSBhY2NlcHQgdGhlIHBhY2tldCBhbmQg c3dpdGNoCi10byBCTE9DSyA1IG1vZGUuICAKLQotT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZSAi NSIgd2FzIHB1dCB0aGVyZSBieSBjb3JydXB0aW9uLCB0aGUgQ1JDIHNob3VsZAotY2F0Y2ggdGhl IGVycm9yLiAgSW4gdGhhdCBjYXNlIHdlIE5BSyB0aGUgcGFja2V0IGFuZCBwcmVzdW1hYmx5IGdl dCBhCi1kaWZmZXJlbnQgdmVyc2lvbiBiYWNrLiAgVGhlcmUgd291bGQgYmUgbm8gcmVhc29uIHRv IHRyeSB0byByZS1yZWFkIHRoZSBzYW1lCi1wYWNrZXQgd2l0aCBhIGRpZmZlcmVudCBibG9jayBj aGVjaywgYmVjYXVzZSB0aGUgIjUiIGNvdWxkIG5vdCBwb3NzaWJseSBiZQotdGhlcmUgbGVnaXRp bWF0ZWx5IHVubGVzcyBpdCBoYWQgYSAzLWJ5dGUgQ1JDLiAgVG8gYmUgY2xlYXIsIHRoaXMgaXMK LWNoZWF0aW5nLiAgV2UgcmVhZCB0aGUgcGFja2V0IGNvbnRlbnRzIGJlZm9yZSB3ZSBrbm93IHRo ZSBwYWNrZXQgaXMgY29ycmVjdCwKLXRoZW4gd2UgY2hlY2sgdGhhdCBpdCAqaXMqIGNvcnJlY3Qu ICBJIG1hZGUgdGhlIDQtbGluZSBjaGFuZ2UgdG8gcnBhY2soKQotYW5kIGl0IHdvcmtzIE9LIGlu IHRoZSBhYnNlbmNlIG9mIHRyYW5zbWlzc2lvbiBlcnJvcnMuICBja2NmbjIuYywgMyBKdW4gMjAx MS4KLQotU28gdGhlIHZhcmlvdXMgY29tYmluYXRpb25zIHNob3VsZCB3b3JrIGFzIGRlc2lyZWQ6 Ci0KLSAuIFNlbmRlciBhbmQgcmVjZWl2ZXIgYm90aCBzdXBwb3J0IGFuZCBhcmUgdG9sZCB0byBT RVQgQkxPQ0sgNSAoIlNCNSIpLgotIC4gU2VuZGVyIFNCNSwgYnV0IHJlY2VpdmVyIGRvZXNuJ3Qg c3VwcG9ydCBpdCAoZXJyb3JzIG91dCkuCi0gLiBTZW5kZXIgU0I1LCByZWNlaXZlciBzdXBwb3J0 cyBpdCBidXQgd2Fzbid0IHRvbGQgKGF1dG8tcmVjb2duaXplcyBpdCkuCi0gLiBSZWNlaXZlciBT QjUgYnV0IHNlbmRlciBubyAoZXJyb3JzIG91dCkuCi0KLU5vdGUgaW4gdGhlIGxhc3QgY2FzZSwg dGhlIHJlY2VpdmVyIHNob3VsZCBOT1QgYXV0b21hdGljYWxseSBmYWxsIGJhY2sgdG8KLXN0YW5k YXJkIGJlaGF2aW9yIGJlY2F1c2UgaWYgdGhlIHVzZXIgc2FpZCBTRVQgQkxPQ0sgNSB0aGF0IG1l YW5zIGV2ZXJ5Ci1wYWNrZXQgTVVTVCBiZSBwcm90ZWN0ZWQgYnkgQ1JDIHRvIHByZXZlbnQgdGhl IEkvUyBwYWNrZXRzIGZyb20gYmVpbmcKLWNvcnJ1cHRlZC4KLQotSW5zdGFsbGVkIG5ldyBIRUxQ IFNFVCBCTE9DSy1DSEVDSyB0ZXh0LiAgY2t1dXMyLmMsIDUgSnVuIDIwMTEuCi0KLUF1dG9kb3du bG9hZCBkaWRuJ3Qgd29yayB3aGVuIHRoZSBTIG9yIEkgcGFja2V0IGhhZCBhIDMtYnl0ZSBibG9j ayBjaGVjawotYmVjYXVzZSBrc3RhcnQoKSBjaGVja2VkIGl0IGZvciBhIDEtYnl0ZSBjaGVja3N1 bS4gIEZpeGVkIGluIGtzdGFydCgpLAotY2tjZm4yLmMsIDYgSnVuIDIwMTEuICBIb3dldmVyLCBv bGRlciBLZXJtaXQgdmVyc2lvbnMgYW5kIHByb2dyYW1zIHRoYXQKLWNsYWltIHRvIGRvICJhdXRv ZG93bmxvYWQiIHdpbGwgbmV2ZXIgcmVjb2duaXplIHRoaXMgdHlwZSBvZiBwYWNrZXQuICBObwot YmlnIGRlYWwgc2luY2UgZXZlbiBpZiB0aGV5IGRpZCwgdGhlIHRyYW5zZmVyIHdvdWxkIGZhaWwg YW55d2F5LgotCi1BZGRlZCAnRk9SQ0UgMycgdG8gRS1LZXJtaXQsIGNhbGxlZCBpdCBFSyAxLjcu ICBUaGUgb3B0aW9uIGlzICItYiA1Ii4gIFdvcmtzCi1PSyBmb3Igc2VuZGluZyBhbmQgcmVjZWl2 aW5nLCBib3RoIHdpdGggYW5kIHdpdGhvdXQgdGhlIG5ldyBvcHRpb24uICBBbHNvCi13b3JrcyB3 aXRoICItYiA1IiBpZiB5b3Ugc2VuZCBhbiBTIHBhY2tldCB0byBpdCB3aXRoICc1JyBpbiB0aGUg QkNUIGZpZWxkLgotQ2hhbmdlcyB3ZXJlIG1pbmltYWwsIEkgaGF2ZSB0aGVtIGFsbCBpbiBlazE3 LmRpZmYuCi0KLUkgY291bGQgcHJvYmFibHkgYWxzbyBtYWtlIGEgbmV3IEctS2VybWl0IGluIGFi b3V0IDEwIG1pbnV0ZXMsIGJ1dCB3aG8gY2FyZXMKLWFib3V0IEctS2VybWl0Li4uICBXZSBhbHJl YWR5IGhhdmUgdHdvIHVzZWZ1bCBLZXJtaXQgcHJvZ3JhbXMgdGhhdAotaW50ZXJvcGVyYXRlIHdp dGggdGhlIG5ldyBwcm90b2NvbC4gIDYgSnVuIDIwMTEuCi0KLVJlcGxhY2VkIHRoZSB2ZXJ5IGlu YWRlcXVhdGUgaGVscCB0ZXh0cyBmb3IgZnVuY3Rpb25zIFxmd29yZCgpIGFuZAotXGZzcGxpdCgp IHdpdGggbmV3IG9uZXMuICBja3V1czIuYywgNiBKdW4gMjAxMS4KLQotVGhlcmUgd2VyZSBhIGNv dXBsZSByZXBvcnRzIG9mIGZpbGUgY29ycnVwdGlvbiB0aGF0IEkgd2FzIHNhdmluZyBmb3IgbGF0 ZXIuCi1Ob3cgdGhhdCBub3cgaXMgbGF0ZXIgSSBkdWcgdXAgdGhlIG1lc3NhZ2VzLCBmaWxlcywg YW5kIGxvZ3MgYW5kIGl0IHR1cm5zCi1vdXQgdGhhdCBub2JvZHkgaGFkIHJlcG9ydGVkIGEgcmVw cm9kdWNpYmxlIGNhc2Ugb2YgS2VybWl0IGNvcnJ1cHRpbmcgYQotZmlsZS4gIFRoZXJlIGhhdmUg YmVlbiBub24tcmVwcm9kdWNpYmxlIGNhc2VzIHRob3VnaCwgYWxtb3N0IGNlcnRhaW5seSBkdWUK LXRvIGNvcnJ1cHRpb24gb2YgdGhlIFMgb3IgSSBwYWNrZXQgb3IgaXRzIEFDSywgd2hpY2ggaXMg d2h5IHdlIG5vdyBoYXZlIFNFVAotQkxPQ0sgNS4gIEV2ZW4gd2l0aCBCTE9DSyBDSEVDSyA1LCB0 aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGUgc2FtZSB0aGluZwotd29uJ3QgaGFwcGVuLCBp dCBpcyBqdXN0IGZhciBsZXNzIGxpa2VseS4gIEV2ZW4gaWYgd2UgYWRkZWQgYSAzMi1iaXQgQ1JD IG9yCi1ldmVuIDY0LWJpdCBvbmUsIHRoZXJlIHdvdWxkIHN0aWxsIGJlIGEgc21hbGwgY2hhbmNl IGl0IGNvdWxkIGhhcHBlbi4KLQotNyBKdW4gMjAxMToKLQotQ29ycmVjdGVkIHZhcmlvdXMgI2lm ZGVmcyAob3IgbGFjayBvZiB0aGVtKSB3aGVuIGJ1aWxkaW5nIEMtS2VybWl0IHdpdGgKLWRpZmZl cmVudCBjb21iaW5hdGlvbnMgb2YgZmVhdHVyZS1zZWxlY3Rpb24gb3B0aW9ucyBzdWNoIGFzIE5P Q1NFVFMsIE5PSUNQLAotTk9MT0NBTCwgTk9TUEwsIE5PVU5JQ09ERSwgZXRjLiAgY2tjZm5zLmMg Y2tjbWFpLmMgY2tjeGxhLmggY2t1dXMyLmMKLWNrdXVzNC5jIGNrdXVzNS5jIGNrdXVzNi5jIGNr dXVzci5jLCA3IEp1biAyMDExLiAgQWZ0ZXIgcnVubmluZyB0aGUgc2NyaXB0Ci10aGF0IGRvZXMg YWxsIHRoZXNlIGJ1aWxkcyAoODQgb2YgdGhlbSkgSSByYW4gaXQgYWdhaW4gdG8gbWFrZSBzdXJl IHRoYXQKLW5vbmUgb2YgdGhlIGNoYW5nZXMgYnJva2UgYnVpbGRzIHRoYXQgc3VjY2VlZGVkIGJl Zm9yZSB0aGUgY2hhbmdlcyB3ZXJlIG1hZGUuCi0KLUJ1aWx0IE9LIG9uIFNvbGFyaXM5ICgibWFr ZSBzb2xhcmlzOSIpCi1EaXR0byB3aXRoIEtyYjUgYW5kIE9wZW5TU0wgMC45LjhxICAoIm1ha2Ug c29sYXJpczlnK29wZW5zc2wrc2hhZG93K3BhbSt6bGliIikKLQotQnVpbHQgT0sgb24gTWFjIE9T IFggMTAuNC4xMSAoIm1ha2UgbWFjb3N4IikuCi1BbHNvICJtYWtlIG1hY29zeCtrcmI1K29wZW5z c2wuCi0KLUJ1aWx0IE9LIG9uIExpbnV4IFJIRUw0ICgibWFrZSBsaW51eCIpLgotQnVpbHQgT0sg b24gTGludXggUkhFTDQgd2l0aCBPcGVuU1NMIDAuOS43YSAoIm1ha2UgbGludXgrc3NsIikuCi1C dWlsdCBPSyBvbiBMaW51eCBSSEVMNSAoIm1ha2UgbGludXgiKS4KLQotIm1ha2UgbGludXgrc3Ns IiBmYWlscyBvbiBSSEVMNSBiZWNhdXNlIG9mIERFUywgZXZlbiB0aG91Z2ggdGhlIHRhcmdldAot dGVzdHMgZm9yIHRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIHRoZSBERVMgbGlicmFyaWVzLiAg SW4gdGhpcyBjYXNlIHRoZQotbGlicmFyaWVzIGFyZSB0aGVyZSBidXQgdGhleSBsYWNrIHRoZSBm dW5jdGlvbnMgZGVzX2VjYjNfZW5jcnlwdCwKLWRlc19yYW5kb21fc2VlZCwgYW5kIGRlc19zZXRf b2RkX3Bhcml0eS4gIFRoZSBidWlsZCBzdWNjZWVkcyBhczoKLQotICBtYWtlIGxpbnV4K3NzbCBL RkxBR1M9LVVDS19TU0wKLQotU2luY2UgREVTIGlzIG5vdyBjb25zaWRlcmVkIGhhcm1mdWwsIEpl ZmYgQWx0bWFuIHN1Z2dlc3RzIHRoYXQgYWxsIE9wZW5TU0wKLWJ1aWxkcywgZXZlbiBmb3Igb2xk IHZlcnNpb25zLCBzaG91bGQgb21pdCBpdCAoIklmIHlvdSBhcmUgYnVpbGRpbmcgd2l0aAotb3Bl bnNzbCBhbmQgbm8ga2VyYmVyb3Mgb3Igc3JwLCBqdXN0IGRpc2FibGUgREVTLiAgRGlzYWJsaW5n IERFUyB3aWxsIGltcGFjdAotdGVsbmV0IGFuZCBybG9naW4gYnV0IGl0IHdvbid0IG1hdHRlciBp ZiB5b3UgaGF2ZSBubyBhYmlsaXR5IHRvIG5lZ290aWF0ZSBhCi1zZXNzaW9uIGtleSIpLgotCi1G cm9tIElhbiBCZWNrd2l0aCwgcGF0Y2hlcyBmb3IgRGViaWFuIExpbnV4OgotIC4gQ2hhbmdlIGFs bCAnLScgdG8gJ1woaHknIGluIG1hbiBwYWdlIChuZXcgcGVkYW50cnkpOiBja3VrZXIubnIuCi0g LiBNYWtlIElLU0QgYXV0aGVudGljYXRpb24gKHVzaW5nIFBBTSkgYXNrIGZvciBhIHBhc3N3b3Jk IHdoZW4gYW4gaW52YWxpZAotICAgdXNlcm5hbWUgaGFzIGJlZW4gZ2l2ZW4sIHRvIGF2b2lkIGRp c2Nsb3Npbmcgd2hpY2ggYWNjb3VudCBuYW1lcyBhcmUgdmFsaWQ6Ci0gICBja3VmaW8uYywgY2t1 dXM3LmMuCi0gLiBGaXggc3BlbGxpbmcgZXJyb3JzOiBja2NmdHAuYywgY2t1dXMyLmMsIGNrdWtl ci5uciwgY2tjcHJvLncsIGNrdXVzci5oLgotIC4gUGF0Y2ggbWFrZWZpbGUgdG8gc3VwcG9ydCBp bnN0YWxsIHRvIGEgc3RhZ2luZyBhcmVhIHdpdGggREVTVERJUi4KLSAuIFNvbWUgb3RoZXIgcGF0 Y2hlcyAobWFpbmx5IGZvciB0eXBvcykgd2VyZSBmb3IgcGxhaW4tdGV4dCBkb2N1bWVudGF0aW9u Ci0gICBmaWxlcyB0aGF0IHdlcmUgZ2VuZXJhdGVkIGZyb20gV2ViIHBhZ2VzOyBJIHVwZGF0ZWQg dGhlIHdlYiBwYWdlcy4KLQotQSBiaWcgY29ycG9yYXRlIEMtS2VybWl0IHVzZXIgaGFzIGFuIGFw cGxpY2F0aW9uIHdoZXJlIGEgbG9jYWwgQy1LZXJtaXQKLW1ha2VzIGEgY29ubmVjdGlvbiB0byBh IHJlbW90ZSBvbmUsIHVwbG9hZHMgc29tZSBmaWxlcywgYW5kIHRoZW4gaWYgdGhlCi1zZXJ2ZXIg aGFzIGFueSBuZXcgcGF0Y2ggZmlsZXMgZm9yIHRoZSBsb2NhbCwgaXQgc2VuZHMgdGhlIHBhdGNo ZXMgYW5kCi1kb2VzIGEgUkVNT1RFIEhPU1QgY29tbWFuZCB0byBydW4gdGhlIHBhdGNoIHByb2dy YW0uICBUaGlzIHN0b3BwZWQgd29ya2luZwotaW4gQy1LZXJtaXQgNi4wIG9yIDcuMCB3aGVuIEkg cHV0IGEgY2hlY2sgdG8gcHJldmVudCBpdCwgYmVjYXVzZSAiaXQgbWFrZXMKLW5vIHNlbnNlIHRv IHNlbmQgUkVNT1RFIGNvbW1hbmRzIHRvIHRoZSBsb2NhbCBlbmQsIGJlY2F1c2UgdGhlIHJlc3Vs dHMgYXJlCi1zZW50IGJhY2sgdG8gdGhlIHJlbW90ZSB0byBiZSBkaXNwbGF5ZWQgb24gaXRzIHNj cmVlbiBidXQgaXQgaGFzIG5vIHNjcmVlbiIuCi1UaGF0IG1heSBiZSB0cnVlLCBidXQgaWYgdGhl IHVzZXIgbmVlZHMgdG8gY29udHJvbCB0aGUgbG9jYWwgZnJvbSB0aGUKLXJlbW90ZSwgdGhleSBz aG91bGQgYmUgYWJsZSB0by4gIEkgcmVtb3ZlZCB0aGUgY2hlY2tzLiAgVGhpcyBkb2Vzbid0IHNv bHZlCi10aGUgcHJvYmxlbSBvZiB3aGVyZSB0aGUgb3V0cHV0IGdvZXM7IGlkZWFsbHkgaXQgd291 bGQgZ28gdG8gdGhlIGxvY2FsCi1zY3JlZW4gYnV0IEkgZG9uJ3Qgc2VlIGFueSBlbGVnYW50IGFu ZCBzaW1wbGUgd2F5IHRvIG1ha2UgdGhhdCBjaGFuZ2UuCi1Ib3dldmVyIHRoZSBvdXRwdXQgcmVk aXJlY3RvcnMgY2FuIHN0aWxsIGJlIHVzZWQgd2l0aCB0aGUgUkVNT1RFIGNvbW1hbmQKLXNvIHRo ZSByZXN1bHRzIGNhbiBiZSBjYXB0dXJlZCB0byBhIHJlbW90ZSBmaWxlLCB3aGljaCBjb3VsZCB0 aGVuIGJlIHNlbnQuCi1ja3V1czcuYywgNyBKdW4gMjAxMS4KLQotQ2hhbmdlZCBTRVQgVkFSSUFC TEUtRVZBTFVBVElPTiB0byBTRVQgQ09NTUFORCBWQVJJQUJMRS1FVkFMVUFUSU9OLCBidXQgbGVm dAotdGhlIGZvcm1lciB2ZXJzaW9uIGF2YWlsYWJsZS4gIGNrdXVzci5jLCA5IEp1biAyMDExLgot Ci1Eb2N1bWVudGVkIHRoZSBTRVQgQ09NTUFORCBWQVJJQUJMRS1FVkFMVUFUSU9OIGNvbW1hbmQs IHdoaWNoIEkgYWRkZWQgaW4KLTIwMDguICBjazkwLmh0bWwsIDkgSnVuIDIwMTEuCi0KLVJlbmFt ZWQgYWxsIG9sZCBNYWMgT1MgWCBtYWtlZmlsZSB0YXJnZXRzIHRvIGhhdmUgdGhlIHByZWZpeCAi b2xkIiB0byBhdm9pZAotY29uZnVzaW5nIHRoZW0gd2l0aCB0aGUgY3VycmVudCB0YXJnZXRzLCBh bmQgbWFkZSBtYWNvc3gxMCBhIHN5bm9ueW0gZm9yCi1tYWNvc3gsIHNvIHRob3NlIHdobyB1c2Vk IHByZXZpb3VzIG1ha2VmaWxlcyB3aWxsIGdldCBhIGN1cnJlbnQgdGFyZ2V0Ci13aXRob3V0IGhh dmluZyB0byBrbm93IHRoZSBuZXcgbmFtZS4gIG1ha2VmaWxlLCA5IEp1biAyMDExLgotCi1BZGRl ZCBYTUVTU0FHRSwgd2hpY2ggaXMgdG8gTUVTU0FHRSBhcyBYRUNITyBpcyBFQ0hPOiBwcmludHMg dGhlIHRleHQKLXdpdGhvdXQgYSBsaW5lIHRlcm1pbmF0b3IsIHNvIGl0IGNhbiBiZSBjb250aW51 ZWQgYnkgc3Vic2VxdWVudCBbWF1NRVNTQUdFCi1jb21tYW5kcy4gIGNrdXVzci5bY2hdLCA5IEp1 biAyMDExLgotCi1CYWNrIHRvICJtYWtlIGxpbnV4K3NzbCIgb24gUkhFTDUuLi4gIEkgdG9vayB0 aGUgY293YXJkJ3Mgd2F5IG91dCBhbmQgYWRkZWQKLWNvZGUgdG8gdGhlIG1ha2VmaWxlIHRhcmdl dCB0byBjaGVjayB3aGV0aGVyIHRoZSBidWlsZCB3b3JrZWQgKHNvbWVib2R5IGxldAotbWUga25v dyBpZiB0aGVyZSBpcyBhIGJldHRlciB3YXkgdG8gY2hlY2spLCBhbmQgaWYgbm90IHRvIGdpdmUg YSBtZXNzYWdlCi1zdWdnZXN0aW5nIHRoZXkgIm1ha2UgY2xlYW4gOyBtYWtlIGxpbnV4K3NzbCBL RkxBR1M9LVVDS19ERVMiLiAgbWFrZWZpbGUsCi05IEp1biAyMDExLgotCi1Ob3RpY2VkIHRoYXQg XGZyZWN1cnNlKCkgd291bGQgZHVtcCBjb3JlIGlmIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cy4K LUZpeGVkIGluIGNrdXVzNC5jLCA5IEp1biAyMDExLgotCi1BZGRlZCBccSgpIGFzIGFuIGFsdGVy bmF0aXZlIHRvIHRoZSBtb3JlIHZlcmJvc2UgXGZsaXRlcmFsKCkgZm9yIHF1b3RpbmcKLXN0cmlu Z3MgdGhhdCBjb250YWluIGNoYXJhY3RlcnMgKGxpa2UgXCkgdGhhdCB3b3VsZCBvdGhlcndpc2Ug YmUgc2lnbmlmaWNhbnQKLXRvIEtlcm1pdC4gIEl0J3MgbW9yZSBlZmZpY2llbnQgYmVjYXVzZSBp dCBpc24ndCBhIGZ1bmN0aW9uIGNhbGwsIGFuZCAncScKLWlzIGFuIGludHVpdGl2ZSBsZXR0ZXIg dG8gbWVhbiAncXVvdGUnLiAgSXQgYWxzbyB3b3JrcyBiZXR0ZXIgdGhhbgotXGZsaXRlcmFsKCkg YmVjYXVzZSBmdW5jdGlvbnMgdHJlYXQgY29tbWFzIGFuZCBicmFjZXMgc3BlY2lhbGx5LiAgY2t1 dXM0LmMsCi0xMCBKdW4gMjAxMS4KLQotQnVpbHQgT0sgb24gVk1TIDguMyBvbiBBbHBoYSwgbm8g bmV0LiAgREVDIEMgY2F1Z2h0IGEgY291cGxlIGdsaXRjaGVzIGluIHRoZQotbmV3IGNvZGUgdGhh dCBnY2MgZGlkbid0IGNhdGNoLCB3aGljaCBJIGZpeGVkLiAgY2t1dXNbMjVdLmMsIDEwIEp1biAy MDExLgotCi1CdWlsdCBPSyBvbiBWTVMgOC4zIG9uIEFscGhhIHdpdGggTXVsdGluZXQgNS4zLiAg VGhlIFNTTCBidWlsZCBmYWlsZWQgYnV0Ci1JJ20gbm90IGdvaW5nIHRvIHdvcnJ5IGFib3V0IGl0 LiAgMTAgSnVuIDIwMTEuCi0KLUJ1aWx0IE9LIG9uIE5ldEJTRCA1LjEuICAxMCBKdW4gMjAxMS4K LQotVHJpZWQgdG8gcmVzdXJyZWN0IG15IG9sZCAiYnVpbGQtYWxsIiBtYWNoaW5lLCBhbiBJQk0g TmV0ZmluaXR5IDM1MDAgZnJvbQotMTk5NyB3aXRoIDIwLXNvbWUgbW91bnRhYmxlIGJvb3RhYmxl IGhhcmQgZGlza3Mgd2l0aCBsb3RzIG9mIDE5OTBzIE9TJ3Mgb24KLXRoZW0uICBObyBkaWNlLiAg SSBjYW4gc2VlIHRoZSBCSU9TIGJ1dCBub3QgdGhlIGhhcmQgZGlza3MuICBUaGUKLWNvbmZpZ3Vy YXRpb24gaXMgc3RpbGwgY29ycmVjdCBiZWNhdXNlIGl0IHRyaWVzIHRvIGJvb3QgZnJvbSB0aGUg bW91bnRhYmxlCi1oYXJkIGRpc2ssIGJ1dCBpdCBmYWlscyAoSSB0cmllZCBzaXggZGlmZmVyZW50 IG9uZXMpLgotCi1UcmllZCB0byByZXN1cnJlY3QgbXkgb2xkIFNpZW1lbnMgTml4ZG9yZiBSTSAy MDAgTUlQUyBtYWNoaW5lLiAgQm9vdGVkIE9LLAotaGVhZGxlc3MgZXZlbiwgYnV0IG1ha2VzIGEg aGVsbGlzaCBoaWdoLXBpdGNoZWQgd2hpbmUsIGxpa2UgYSBkZW50aXN0IGRyaWxsLgotSXQncyBw cmV0dHkgc2xvdyB0b28uICAibWFrZSBzaW5peDU0MiIgKGZvciBTSU5JWCA1LjQuMikgYm9tYmVk IGF0IGxpbmsKLXRpbWUgb24gbm8gcmRjaGsoKS4gIEZpeGVkIGJ5ICNpbmNsdWRpbmcgPHN5cy9m aWxpby5oPi4gIGNrdXRpby5jLCAxMCBKdW4gMjAxMS4KLQotVHJpZWQgdG8gcmVzdXJyZWN0IG15 IG9sZCBTQ08gWGVuaXggMi4zLjQgbWFjaGluZSwgYWxzbyBoZWFkbGVzcy4gIEFtYXppbmdseQot aXQgc3RpbGwgd29ya3M7IGl0IGNhbid0IHVzZSBhIG1vbml0b3IgYnV0IEkgY2FuIFRlbG5ldCB0 byBpdC4gIEhhZCB0byB0d2Vhawotc29tZSAjaWZkZWZzIGJ1dCBJIGdvdCBhIG5vLW5ldCB2ZXJz aW9uIGJ1aWx0IHN1Y2Nlc3NmdWxseS4gIEFjY29yZGluZyB0byBteQotbm90ZXMsIGl0IGhhc24n dCBiZWVuIHBvc3NpYmxlIHRvIGJ1aWxkIHdpdGggVENQL0lQIHNpbmNlIEMtS2VybWl0IDguMCwK LWJ1dCBob3cgbWFueSBwZW9wbGUgZXZlciBoYWQgU0NPIFhlbml4IDIuMy40IHdpdGggVENQL0lQ IGFueXdheT8gIEFueXdheSB3ZQotc3RpbGwgaGF2ZSB0aGUgYmluYXJpZXMgZm9yIEMtS2VybWl0 IDcuMC4gIGNrdXVzNC5jLCAxMCBKdW4gMjAxMS4KLQotQnVpbHQgT0sgb24gQUlYIDUuMy4gIEJ1 aWx0IE9LIG9uIFNvbGFyaXMgMTAuICAxMSBKdW4gMjAxMS4KLQotVHJpZWQgaGFyZGVyIHRvIHJl dml2ZSB0aGUgYnVpbGQtYWxsIG1hY2hpbmUsIG5vdyBpdCBzb3J0IG9mIHdvcmtzLCBidXQgbm90 Ci1hbGwgb2YgdGhlIGJvb3RhYmxlIE9TJ3Mgd29yay4gIEJ1aWx0IEMtS2VybWl0IDkuMCBPSyBv biBPcGVuQlNEIDMuMC4gIEJ1aWx0Ci1PSyBvbiBRTlggNC4yNSBidXQgaGFkIHRvICNpZmRlZiBy ZWZlcmVuY2VzIHRvIElYQU5ZIGluIGNrdXRpby5jIGFuZCBja3VwdHkuCi1CdWlsdCBPSyBvbiBO ZXRCU0QgMS41LjEgKDIwMDApLiAgVHJpZWQgIm1ha2UgbmV0YnNkK3NzbCIgb24gdGhpcyBvbmUs IGl0J3MKLU9wZW5TU0wgMC45LjVhIDEgQXByIDIwMDAsIGJ1dCBpdCBib21icyBvdXQgaW4gY2t1 YXRoLmMsIG5vIGJpZyBkZWFsLgotQW5vdGhlciBwcm9ibGVtIGluIE5ldEJTRCAxLjUuMiBpcyB0 aGF0IGV2ZW4gdGhvdWdoIG9mZl90IGlzIDgsIENLX09GRl9UCi1pcyA0LiAgV29ydGggbm90aW5n IGJ1dCBub3Qgd29ydGggZml4aW5nIHVubGVzcyBzb21lb25lIGVsc2Ugbm90aWNlcy4KLTEzIEp1 biAyMDExLgotCi1TdVNFIDcuMC4uLiBib290cyBPSyBidXQgdGVsbmV0IHNlcnZlciBkb2Vzbid0 IHdvcmsuICBDYW4gdGVsbmV0IG91dCBidXQKLWl0J3MgdG9vIGZsYWt5LCBjb25uZWN0aW9uIGRy b3BzIGlmIEkgdHJ5IHRvIHRyYW5zZmVyIGEgZmlsZS4KLQotT3BlbkJTRCAyLjUgWzE5OTldIE9L LiAgUmVkIEhhdCA3LjEgT0suICBSZWQgSGF0IDcuMSB3aXRoIE9wZW5TU0wgMC45LjYKLW5vdCBP Sywgc2FtZSBlcnJvciBhcyB3aXRoIDAuOS41YToKLQotY2t1YXRoLmMKLUluIGZpbGUgaW5jbHVk ZWQgZnJvbSBja19zc2wuaDo0OCwKLSAgICAgICAgICAgICAgICAgZnJvbSBja3VhdGguYzoyMjU6 Ci0vdXNyL2luY2x1ZGUvb3BlbnNzbC9kZXMuaDo3Nzogd2FybmluZzogcmVkZWZpbml0aW9uIG9m IGBCbG9jaycKLWNrdWF0Mi5oOjg2OiB3YXJuaW5nOiBgQmxvY2snIHByZXZpb3VzbHkgZGVjbGFy ZWQgaGVyZQotL3Vzci9pbmNsdWRlL29wZW5zc2wvZGVzLmg6ODM6IHJlZGVmaW5pdGlvbiBvZiBg c3RydWN0IGRlc19rc19zdHJ1Y3QnCi0vdXNyL2luY2x1ZGUvb3BlbnNzbC9kZXMuaDo5MTogd2Fy bmluZzogcmVkZWZpbml0aW9uIG9mIGBTY2hlZHVsZScKLWNrdWF0Mi5oOjkwOiB3YXJuaW5nOiBg U2NoZWR1bGUnIHByZXZpb3VzbHkgZGVjbGFyZWQgaGVyZQotCi1TbyBpdCBhcHBlYXJzIHRoYXQg T3BlblNTTCBzdXBwb3J0IGlzIGJyb2tlbiBmb3IgcHJlLTAuOS43LiAgVHJpZWQKLWJ1aWxkaW5n IGl0IGFnYWluIHdpdGggLVVDS19TU0wgKHNpbmNlIHRoZSBlcnJvcnMgYXJlIG9yaWdpbmF0aW5n IGZyb20KLWZyb20gZGVzLmgpLi4uICBCdXQgaXQgc3RpbGwgZmFpbGVkIGV4YWN0bHkgdGhlIHNh bWUgd2F5LiAgSSBmb3VuZAotI2luY2x1ZGVzIGZvciBkZXMuaCBpbiBja3VhdGguYyBhbmQgYW5k IGNrX3NzbC5oIGFuZCAjaWZkZWYnZCB0aGVtIG91dCwKLWJ1dCBpdCBzdGlsbCBmYWlsczoKLQot SW4gZmlsZSBpbmNsdWRlZCBmcm9tIC91c3IvaW5jbHVkZS9vcGVuc3NsL2V2cC5oOjg5LAotICAg ICAgICAgICAgICAgICBmcm9tIC91c3IvaW5jbHVkZS9vcGVuc3NsL3g1MDkuaDo2NywKLSAgICAg ICAgICAgICAgICAgZnJvbSAvdXNyL2luY2x1ZGUvb3BlbnNzbC9zc2wuaDo2OSwKLSAgICAgICAg ICAgICAgICAgZnJvbSBja19zc2wuaDo1MSwKLSAgICAgICAgICAgICAgICAgZnJvbSBja3VhdGgu YzoyMjc6Ci0vdXNyL2luY2x1ZGUvb3BlbnNzbC9kZXMuaDo3Nzogd2FybmluZzogcmVkZWZpbml0 aW9uIG9mIGBCbG9jaycKLWNrdWF0Mi5oOjg2OiB3YXJuaW5nOiBgQmxvY2snIHByZXZpb3VzbHkg ZGVjbGFyZWQgaGVyZQotL3Vzci9pbmNsdWRlL29wZW5zc2wvZGVzLmg6ODM6IHJlZGVmaW5pdGlv biBvZiBgc3RydWN0IGRlc19rc19zdHJ1Y3QnCi0vdXNyL2luY2x1ZGUvb3BlbnNzbC9kZXMuaDo5 MTogd2FybmluZzogcmVkZWZpbml0aW9uIG9mIGBTY2hlZHVsZScKLWNrdWF0Mi5oOjkwOiB3YXJu aW5nOiBgU2NoZWR1bGUnIHByZXZpb3VzbHkgZGVjbGFyZWQgaGVyZQotCi1CdWlsdCBPSyBvbiBE ZWJpYW4gMi4xLiAgMTMgSnVuIDIwMTEuCi0KLU9uIEZyZWVCU0QgNC40LCBpdCBibG93cyB1cCB3 aXRoOgotY2t1ZmlvLmM6IEluIGZ1bmN0aW9uIHZwYXNzJzoKLWNrdWZpby5jOjgyMDE6IGNvbmZs aWN0aW5nIHR5cGVzIGZvciAnaW5pdGdyb3VwcycKLS91c3IvaW5jbHVkZS91bmlzdGQuaDoxNTQ6 IHByZXZpb3VzIGRlY2xhcmF0aW9uIG9mICdpbml0Z3JvdXBzJwotY2t1ZmlvLmM6ODIwMTogd2Fy bmluZzogZXh0ZXJuIGRlY2xhcmF0aW9uIG9mICdpbml0Z3JvdXBzJyBkb2Vzbid0IG1hdGNoIGds b2JhbAotb25lLiAgRml4ZWQgYnkgZGVmaW5pbmcgTk9EQ0xJTklUR1JPVVBTIGZvciBGcmVlQlNE IGluIGNrdWZpby5jLiBJdCBtaWdodCBub3QgCi1iZSB0aGUgcmlnaHQgZml4LCBidXQgSSBkb24n dCBoYXZlIGEgbG90IG9mIG90aGVyIEZyZWVCU0QgdmVyc2lvbnMgdG8KLWNvbXBhcmUgd2l0aC4g IEFueXdheSBub3cgaXQgYnVpbGRzIE9LIG9uIDQuNCwgYW5kIGFsc28gb24gRnJlZUJTRCAzLjMu Ci1ja3VmaW8uYywgMTMgSnVuIDIwMTEuCi0KLVRyaWVkIHRvIGJ1aWxkIG9uIFNDTyBPcGVuIFNl cnZlciA1LjAuNyBidXQgaXQgZmFpbHMgYXQgbGluayB0aW1lIGJlY2F1c2UKLWl0IGNhbid0IGZp bmQgcmRjaGsoKS4gIEJ1dCBpdCdzIHN1cHBvc2VkIHRvIGJlIHRoZXJlISAgQ29tZSBiYWNrIHRv IHRoaXMKLWxhdGVyLi4uCi0KLVJlZCBIYXQgNi4xICAgICAgICAgICAgIGkzODYgICAzMi82NCAg IGxpbnV4ICAgICAgICAgIDIzMzI1NDUKLVJlZCBIYXQgNy4xICAgICAgICAgICAgIGkzODYgICAz Mi82NCAgIGxpbnV4ICAgICAgICAgIDIzNjg1MjgKLVJlZCBIYXQgRUw0ICAgICAgICAgICAgIGkz ODYgICAzMi83NCAgIGxpbnV4ICAgICAgICAgIDIzNjMwNjcKLVJlZCBIYXQgRUw1LjYgICAgICAg ICAgIGkzODYgICAgNjQgICAgIGxpbnV4ICAgICAgICAgIDIzNzEyNzkKLVNvbGFyaXM5ICAgICAg ICAgICAgICAgIHNwYXJjICAzMi82NCAgIHNvbGFyaXM5ICAgICAgIDI4NDk4OTYKLVNvbGFyaXM5 K3NzbCAgICAgICAgICAgIHNwYXJjICAzMi82NCAgIHNvbGFyaXM5ICAgICAgIDUwMjE3NjQKLVNv bGFyaXMxMCAgICAgICAgICAgICAgIHNwYXJjICAzMi82NCAgIHNvbGFyaXMxMCAgICAgIDI4NTU3 NzYKLVFOWCAgICAgICAgICAgICAgICAgICAgIGkzODYgICAgMzIgICAgIHFueDMyICAgICAgICAg IDIwMTIzMjMgCi1OZXRCU0QgMS41LjEgICAgICAgICAgICBpMzg2ICAgMzIvNjQgICBuZXRic2Qg ICAgICAgICAyMTk4MDU1Ci1OZXRCU0QgNS4xICAgICAgICAgICAgICBpMzg2ICAgMzIvNjQgICBu ZXRic2QgICAgICAgICAyMTU5ODYzCi1PcGVuQlNEIDIuNSAgICAgICAgICAgICBpMzg2ICAgMzIv NjQgICBvcGVuYnNkICAgICAgICAyMjM2MDM2Ci1NYWMgT1MgWCAxMC42LjcgICAgICAgICB4ODZf NjQgIDY0ICAgICBtYWNvc3ggICAgICAgICAyLjdNCi1NYWMgT1MgWCAxMC40LjExICAgICAgICBw cGMgICAgMzIvNjQgICBtYWNvc3ggICAgICAgICAyNDk2MzA0Ci1EZWJpYW4gMi4xICAgICAgICAg ICAgICBpMzg2ICAgMzIvNjQgICBsaW51eCAgICAgICAgICAyMjEzMjIxCi1GcmVlQlNEIDQuNCAg ICAgICAgICAgICBpMzg2ICAgMzIvNjQgICBmcmVlYnNkICAgICAgICAyMjkxMzMzCi1GcmVlQlNE IDMuMyAgICAgICAgICAgICBpMzg2ICAgMzIvNjQgICBmcmVlYnNkICAgICAgICAyMTQ3MzcwCi1T SU5JWCA1LjQyICAgICAgICAgICAgICBtaXBzICAgIDMyICAgICBzaW5peDU0MiAgICAgICAzMzE5 MzI1ICgxOTk1KQotU0NPIFVuaXh3YXJlIDIuMS4zICAgICAgaTM4NiAgICAzMiAgICAgdXcyMTMg ICAgICAgICAgMjI0MjE3NgotU0NPIE9TUjYuMC4wICAgICAgICAgICAgaTM4NiAgIDMyLzY0ICAg c2NvX29zcjYwMCAgICAgMjM2ODMwMAotCi1Nb3JlIGJ1aWxkcywgMTQgSnVuZSAyMDExOgotCi1W TVMgNi4yICAgICAgICAgICAgICAgICBhbHBoYSAgIDMyICAgICBtYWtlIG1uICAgICAgICAyNTU2 OTI4IE5vIFRDUC9JUAotVk1TIDYuMiAgICAgICAgICAgICAgICAgYWxwaGEgICAzMiAgICAgbWFr ZSBtICAgICAgICAgMzExMjk2MCBVQ1ggNC4wCi1Tb2xhcmlzIDExICAgICAgICAgICAgICBpMzg2 ICAgMzIvNjQgICBzb2xhcmlzMTEgICAgICAyODIzODYwCi1Tb2xhcmlzIDExICAgICAgICAgICAg ICBpMzg2ICAgMzIvNjQgICBzb2xhcmlzMTErc3NsICAyOTkzNjYwIE9wZW5TU0wgMC45LjhsCi1O ZXRCU0QgNS4xICAgICAgICAgICAgICBpMzg2ICAgMzIvNjQgICBuZXRic2Qra3JiNSAgICAyMzA3 ODU1IEtlcmJlcm9zIDUKLUxpbnV4IFNsYWNrd2FyZSAxMi4xLjAgIGkzODYgICAzMi82NSAgIGxp bnV4ICAgICAgICAgIDIxNzU3NTQKLUxpbnV4IEZlZG9yYSAxNCAgICAgICAgIGkzODYgICAzMi82 NCAgIGxpbnV4ICAgICAgICAgIDIyNTY1MTQKLUxpbnV4IEZlZG9yYSAxNCAgICAgICAgIGkzODYg ICAzMi82NCAgIGxpbnV4K3NzbCAgICAgIC4uLi4uLi4gT3BlblNTTCAxLjAuMGQKLUxpbnV4IEZl ZG9yYSAxNCAgICAgICAgIGkzODYgICAzMi82NCAgIGxpbnV4K2tyYiAgICAgIDI0NDk2MTQgKCop Ci0KLSgqKSBtYWtlIGxpbnV4K2tyYjUgIkxJQlM9JExJQlMgL2xpYi9saWJrNWNyeXB0by5zby4z IC9saWIvbGliY29tX2Vyci5zby4yIgotCi1Ob3RpY2VkIHRoYXQgbmV0YnNkK3NzbCBidWlsZCBv biBOZXRCU0QgNS4xIHNhaWQgIk5ldEJTRCAxLjUiIGluIGl0cyBiYW5uZXIuCi1GaXhlZCBieSBy ZXBsYWNpbmcgdGhlIG9sZCBoYXJkd2lyZWQgdGFyZ2V0IHdpdGggdGhlIG5ldyAic3Vicm91dGlu aXplZCIKLXRhcmdldCBhJ2xhIGxpbnV4K3NzbCBhbmQgYWRhcHRpbmcgaXQgdG8gTmV0QlNELiAg bWFrZWZpbGUsIDE1IEp1biAyMDExLgotCi1TYW1lIGRlYWwgZm9yIEtlcmJlcm9zIDUsIG1ha2Ug YSBuZXcgbmV0YnNkK2tyYjUgdGFyZ2V0IGFuZCBpdCBidWlsZHMgb2ssCi1hdCBsZWFzdCBvbmNl IG9uZSBmaWd1cmVzIG91dCB3aGVyZSB0aGUgS2VyYmVyb3MgaGVhZGVycyBhbmQgbGlicyBhcmUu Ci1tYWtlZmlsZSwgMTUgSnVuIDIwMTEuCi0KLVNhbWUgZGVhbCBmb3IgdGhlIG5ldGJzZG5jIHRh cmdldCwgbm93IGl0IHNpbXBseSBkZWZpbmVkIE5PQ1VSU0VTIGFuZAotY2hhaW5zIHRvIHRoZSBt YWluIG5ldGJzZCB0YXJnZXQuICBtYWtlZmlsZSwgMTUgSnVuIDIwMTEuCi0KLVRyaWVkIHRvIGJ1 aWxkIHdpdGggS2VyYmVyb3MgNSBvbiBTb2xhcmlzLCBmYWlscyBiZWNhdXNlIHRoZSBERVMgbGli cmFyeQotbm8gbG9uZ2VyIGV4aXN0cy4gIFRoaXMgb25lIGlzIGJleW9uZCBtZSwgc29ycnkuCi0K LU1hZGUgbmV3IHRhcmdldHMgZm9yIE1pckJTRCwgbWlyYnNkIGFuZCBtaXJic2Qrc3NsLCBtYWtl ZmlsZSAxNSBKdW4gMjAxMS4KLQotSW4gT3BlblNVU0UgMTEuMiB3aXRoIE9wZW5TU0wgMC45Ljhy IHdlIGJvbWIgb24gdW5kZWZpbmVkIHJlZmVyZW5jZXMgZnJvbQotdmFyaW91cyBERVMgbGlicmFy eSByb3V0aW5lcy4gIEJ1aWxkcyBPSyB3aXRob3V0IERFUy4KLQotVmFyaW91cyBsaW51eCtrcmI1 IGJ1aWxkcyBmYWlsIGJlY2F1c2UgY2FuJ3QgZmluZCAtbGdzc2FwaV9rcmI1Ci0KLVNTTCBidWls ZHMgd2l0aCBPcGVuU1NMIDwgMC45LjcgZmFpbCBldmVuIHRob3VnaCB0aGVyZSBpcyBjb2RlIHRv IHN1cHBvcnQKLXRoZSBvbGRlciBTU0wuCi0KLUZpeGVkIHNvbWUgcHJpbnRmICVsZCB2cyBpbnQg aW5zdGFuY2VzIGluIHRoZSBzaXplb2ZzIHNlY3Rpb24gb2YgU0hPVyBGRUFUVVJFUy4KLWNrdXVz NS5jLCAxNSBKdW4gMjAxMS4KLQotRml4ZWQgdGhlIG5ldyBsaW51eCtzc2wgdGFyZ2V0IHRvIGFj dHVhbGx5IHVzZSB0aGUgU1NMSU5DIGFuZCBTU0xMSUJTCi1kZWZpbml0aW9ucywgb29wcy4gIG1h a2VmaWxlLCAxNSBKdW4gMjAxMS4KLQotMTUgSnVuZSAyMDExIGJ1aWxkcyAoQmV0YS4wMSk6Ci0K LUFJWCA1LjMgICAgICAgICAgICAgICAgIHBwYyAgICAzMi82NCAgIGFpeCtzc2wgICAgICAgIDMy ODM4NDYgT3BlblNTTCAwLjkuOG0KLU5ldEJTRCA1LjEgICAgICAgICAgICAgIGkzODYgICAzMi82 NCAgIG5ldGJzZCAgICAgICAgIDIxNTk4NjMKLU5ldEJTRCA1LjEgICAgICAgICAgICAgIGkzODYg ICAzMi82NCAgIG5ldGJzZCtzc2wgICAgIDIzNTAyNzQgT3BlblNTTCAwLjkuOS1kZXYKLU5ldEJT RCA1LjEgICAgICAgICAgICAgIGkzODYgICAzMi82NCAgIG5ldGJzZCtrcmI1ICAgIDIzNDk2Mjcg TUlUIEtyYjUgMS42LjMKLUZyZWVCU0QgOC4yICAgICAgICAgICAgIGkzODYgICAzMi82NCAgIGZy ZWVic2QgICAgICAgIDIyOTg0MTQKLUZyZWVCU0QgOC4yICAgICAgICAgICAgIGkzODYgICAzMi82 NCAgIGZyZWVic2Qrc3NsICAgIDI0NDg5NjEgT3BlblNTTCAwLjkuOHEKLU9wZW5CU0QgNC43ICAg ICAgICAgICAgIGkzODYgICAzMi82NCAgIG9wZW5ic2QgICAgICAgIDIyNjYxMzIKLU9wZW5CU0Qg NC43ICAgICAgICAgICAgIGkzODYgICAzMi82NCAgIG9wZW5ic2Qrc3NsICAgIDI0MDkyNjMgT3Bl blNTTCAwLjkuOGsKLU1pckJTRCAxMCAgICAgICAgICAgICAgIGkzODYgICAzMi82NCAgIG1pcmJz ZCAgICAgICAgIDIyMTY2MDEKLU1pckJTRCAxMCAgICAgICAgICAgICAgIGkzODYgICAzMi82NCAg IG1pcmJzZCtzc2wgICAgIDIzNTgzMTggT3BlblNTTCAwLjkuOHIKLU9wZW5TdXNlIDExLjIgICAg ICAgICAgIHg4Nl82NCAgNjQgICAgIGxpbnV4ICAgICAgICAgIDIzNDg0NjgKLU9wZW5TdXNlIDEx LjIgICAgICAgICAgIHg4Nl82NCAgNjQgICAgIGxpbnV4K3NzbCAoKikgIDI1NDY1NDAgT3BlblNT TCAwLjkuOHIKLVJIRUwgNS42ICAgICAgICAgICAgICAgIGlhNjQgICAgNjQgICAgIGxpbnV4ICAg ICAgICAgIDQzOTA2ODcKLVJIRUwgNS42ICAgICAgICAgICAgICAgIGlhNjQgICAgNjQgICAgIGxp bnV4K3NzbCAoKikgIDQ3NzUwMDcgT3BlblNTTCAwLjkuOGUKLVVidW50dSA5LjEwICAgICAgICAg ICAgIGkzODYgICAzMi82NCAgIGxpbnV4ICAgICAgICAgIDIyNzU1MjMKLVVidW50dSA5LjEwICAg ICAgICAgICAgIGkzODYgICAzMi82NCAgIGxpbnV4K3NzbCAgICAgIDI0NjY3MDggT3BlblNTTCAw LjkuOHIKLUdlbnRvbyAxLjEyLjEzICAgICAgICAgIHBwYyAgICAzMi82NCAgIGxpbnV4ICAgICAg ICAgIDIzODY1OTcKLUdlbnRvbyAxLjEyLjEzICAgICAgICAgIHBwYzY0ICAgNjQgICAgIGxpbnV4 ICAgICAgICAgIDI3NDkwMTUKLUdlbnRvbyAxLjEyLjEzICAgICAgICAgIHBwYzY0ICAgNjQgICAg IGxpbnV4K3NzbCAgICAgIDMwMDIxNTAgT3BlblNTTCAwLjkuOHIKLUdlbnRvbyAxLjEyLjEzICAg ICAgICAgIHNwYXJjICAzMi82NCAgIGxpbnV4ICAgICAgICAgIDI0NzgzODIKLUdlbnRvbyAxLjEy LjEzICAgICAgICAgIHNwYXJjICAzMi82NCAgIGxpbnV4K3NzbCAgICAgIDI2OTA0OTkgT3BlblNT TCAwLjkuOHIKLVNvbGFyaXMgOSAgICAgICAgICAgICAgIHNwYXJjICAzMi82NCAgIHNvbGFyaXM5 ICAgICAgIDI4NDk4OTYKLVNvbGFyaXMgMTAgICAgICAgICAgICAgIGkzODYgICAzMi82NCAgIHNv bGFyaXMxMCAgICAgIDI4Mzc2MjAKLUlSSVggNi41ICAgICAgICAgICAgICAgIFIxMDAwMCAzMi82 NCAgIGlyaXg2NSAgICAgICAgIDI4Njk3MDQKLQotKiBhbmQgS0ZMQUdTPS1VQ0tfREVTCi0KLVRy aWVkIGJ1aWxkaW5nIG9uIE5ldEJTRCA1LjEgd2l0aCBIZWltZGFsIEtlcmJlcm9zIHVzaW5nOgot Ci1tYWtlIG5ldGJzZCtrcmI1IFwKLSAiS0ZMQUdTPS1ESEVJTURBTCIgXAotICJLNUlOQz0tSS91 c3IvaW5jbHVkZSIgXAotICJLNUxJQj0tTC91c3IvbGliIgotCi1JdCBmb3VuZCBhbGwgaXRzIGhl YWRlcnMgT0ssIGJ1dCBpdCBibGV3IHVwIGluIGNrdWF0aC5jLiAgU21hbGwgd29uZGVyLAotY2tj Y2ZnLmh0bWwgc2F5czoKLQotSEVJTURBTAotICAgIFNob3VsZCBiZSBkZWZpbmVkIGlmIEtlcmJl cm9zIFYgc3VwcG9ydCBpcyBwcm92aWRlZCBieSBIRUlNREFMLiBTdXBwb3J0Ci0gICAgZm9yIHRo aXMgb3B0aW9uIGlzIG5vdCBjb21wbGV0ZSBpbiBDLUtlcm1pdCA4LjAuIEFueW9uZSBpbnRlcmVz dGVkIGluCi0gICAgd29ya2luZyBvbiB0aGlzIHNob3VsZCBjb250YWN0IGtlcm1pdC1zdXBwb3J0 LiAKLQotJ2tyYjUtY29uZmlnIC0tdmVyc2lvbicgZ2l2ZXMgdGhlIE1JVCBLZXJiZXJvcyA1IHZl cnNpb24gbnVtYmVyLgotCi1NYWtlIGEgbmV3IG5ldGJzZCtrcmI1K3NzbCB0YXJnZXQgYmFzZWQg b24gdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBuZXcKLW5ldGJzZCtzc2wgYW5kIG5ldGJzZCtrcmI1 IHRhcmdldHMuICBUaGVyZSB3ZXJlIGxvdHMgb2Ygd2FybmluZ3MgaW4gdGhlCi1jb21waWxhdGlv biBidXQgbm8gZXJyb3JzLCBidXQgaXQgcHJvZHVjZWQgYW4gZXhlY3V0YWJsZSB0aGF0IHN0YXJ0 cyBhbmQKLWRvZXMgbm9ybWFsIHRoaW5ncyBidXQgSSBoYXZlIG5vIGlkZWEgaWYgdGhlIFNTTCBv ciBLZXJiZXJvcyBmdW5jdGlvbnMgd29yay4KLW1ha2VmaWxlLCAxNiBKdW4gMjAxMS4KLQotQ2hh bmdlZCB0aGUgY3Utc29sYXJpczkta3JiNSB0YXJnZXQgdG8gdGVzdCBmb3IgdGhlIHByZXNlbmNl IG9mIERFUyBiZWNhdXNlCi1ERVMgaXNuJ3QgdGhlcmUsIHRvIHNlZSBpZiB0aGlzIHdvdWxkIGFs bG93IGEgS2VyYmVyb3MgYnVpbGQgdG8gcHJvY2VlZC4KLUFuZCBpdCB3b3JrZWQsIGFtYXppbmcu ICBBdCBsZWFzdCB0aGUgYnVpbGQgY29tcGxldGVkLCBJIGhhdmUgbm8gd2F5IHRvIHRlc3QKLXRo ZSBLZXJiZXJvcyBwYXJ0LiAgbWFrZWZpbGUsIDE2IEp1biAyMDExLgotCi1VcGRhdGVkIHRoZSBz b2xhcmlzOStzc2wgdGFyZ2V0IHRvIGRvIHRoZSBERVMgdGVzdGluZy4gIG1ha2VmaWxlLCAxNiBK dW4gMjAxMS4KLQotVXBkYXRlZCBjdS1zb2xhcmlzK2tyYjUgdGFyZ2V0IHRvIHRlc3Qgd2hldGhl ciB0aGUgR1NTQVBJIGxpYnJhcnkgaXMgY2FsbGVkCi1saWJnYXNzYXBpIG9yIGxpYmdhc3NhcGlf a3JiNS4gIG1ha2VmaWxlLCAxNiBKdW4gMjAxMS4KLQotQWRkZWQgbG90cyBvZiB0ZXN0cyB0byB0 aGUgTGludXggS2VyYmVyb3MgNSBlbnRyaWVzLCBsaW51eCtrcmI1IGFuZAotbGludXgra3JiNStz c2wsIGJlY2F1c2Ugc29tZSBoYXZlIGxpYms1Y3J5cHRvIGFuZCBzb21lIGRvbid0OyBzb21lIGhh dmUKLWxpYmNvbV9lcnIgYW5kIHNvbWUgZG9uJ3Q7IGFuZCBzb21lIGhhdmUgbGliZ3NzYXBpX2ty YjUgKGUuZy4gUkhFTDUsCi1PcGVuU3VzZSAxMS4yKSB3aGVyZWFzIG90aGVycyBoYXZlIGxpYmdz c2FwaSAoR2VudG9vKS4KLQotMTYgSnVuZSAyMDExIGJ1aWxkcyAoQmV0YS4wMSk6Ci0KLU5ldEJT RCA1LjEgaTM4NiAgIDMyLzY0ICBuZXRic2Qra3JiNStzc2wgICAyNDUxNzU3IE9wZW5TU0wgMC45 LjkgTUlUIEtyYjUgMS42LjMKLVNvbGFyaXMgOSAgc3BhcmMgIDMyLzY0ICBzb2xhcmlzOStrcmI1 ICAgICAyNTQzMDM2IE1JVCBLZXJiZXJvcyA1IDEuNy4xCi1Tb2xhcmlzIDkgIHNwYXJjICAzMi82 NCAgc29sYXJpczkrc3NsICAgICAgNTAyMTU0NCBPcGVuU1NMIDAuOS44cSAoZ2NjKQotR2VudG9v Li4uICBwcGMgICAgMzIvNjQgIGxpbnV4ICAgICAgICAgICAgIDIzODY1OTcKLUdlbnRvby4uLiAg cHBjICAgIDMyLzY0ICBsaW51eCtzc2wgICAgICAgICAyNTkzNTYxIE9wZW5TU0wgMC45LjhyIAot R2VudG9vLi4uICBwcGM2NCAgIDY0ICAgIGxpbnV4ICAgICAgICAgICAgIDI3NDkwMTUKLUdlbnRv by4uLiAgcHBjNjQgICA2NCAgICBsaW51eCtzc2wgICAgICAgICAzMDAyMTUwIE9wZW5TU0wgMC45 LjhyIAotUkhFTDUgICAgICB4ODZfNjQgIDY0ICAgIGxpbnV4K2tyYjUgKCopICAgIDI1NjM4Nzgg TUlUIEtlcmJlcm9zIDUgMS42LjEKLVJIRUw1ICAgICAgeDg2XzY0ICA2NCAgICBsaW51eCtrcmI1 K3NzbCgqKSAyNTYzODc4IE1JVCBLZXJiZXJvcyA1IDEuNi4xCi1GZWRvcmEgMTQgIGkzODYgICAz Mi82NCAgbGludXgra3JiNStzc2wgICAgMjUzOTg5MSBNSVQgS3JiNSArIE9wZW5TU0wgMC45Ljhy Ci0KLSogS0ZMQUdTPS1VQ0tfREVTCi0KLS0tLSBDLUtlcm1pdCA5LjAuMjk5IEJldGEuMDEgLS0t Ci0KLXNpemVvZigpIGNhbiByZXR1cm4gYSBsb25nIG9yIGFuIGludCwgc28gbmVpdGhlciBwcmlu dGYoIiVkIixzaXplb2YoYmxhaCkpOwotb3IgcHJpbnRmKCIlbGQiLHNpemVvZihibGFoKSk7IGNh biBiZSB1c2VkIGV2ZXJ5d2hlcmUuICBDaGFuZ2VkIHRoZQotInNpemVvZnMiIHNlY3Rpb24gb2Yg U0hPVyBGRUFUVVJFUyBpbiB0aGUgZHVtYmVzdCAoYW5kIHRoZXJlZm9yZSBtb3N0Ci1wb3J0YWJs ZSkgd2F5IHRvIHNxdWVsY2ggdGhlIHdhcm5pbmdzLiAgY2t1dXM1LmMsIDE3IEp1biAyMDExLgot Ci1Gcm9tIEpvaG4gRHVubGFwOiAiV2F0Y2hpbmcgdGhlIHNlcnZlciBzY3JlZW4gbGVkIG1lIHRv IG9mZmVyIGEgY29zbWV0aWMKLXBhdGNoIGZvciBja3V1c3guYy4gIEkgbm90aWNlZCB0aGF0IHRo ZSBzZXJ2ZXIgc2NyZWVuIHNhaWQgaXQgd2FzCi0iUkVTRU5ESU5HIiB3aGVuIGl0IHJlYWxseSB3 YXNuJ3QuICBUaGUgYXR0YWNoZWQgcGF0Y2ggZW1pdHMgYmxhbmtzIHRvCi1pbnN1cmUgdGhhdCBv bGQgbGFiZWxzIGFyZSBjb21wbGV0ZWx5IGVyYXNlZC4iICBja3V1c3guYywgMTcgSnVuIDIwMTEu Ci0KLU5lbHNvbiBCZWViZSBmb3VuZCB0d28gcGxhY2VzIHdoZXJlIEkgaGFkIFNTTExJQlMgaW4g dGhlIG1ha2VmaWxlIGluc3RlYWQgb2YKLVNTTExJQi4gIG1ha2VmaWxlLCAxOCBKdW4gMjAxMS4K LQotTW9yZSBpbXBvcnRhbnQgaGUga25ldyBob3cgdG8gZm9yY2UgZ2NjIHRvIGxvYWQgdGhlIHJp Z2h0IGhlYWRlciBmaWxlcyBmb3IKLU9wZW5TU0wgMS4wLjBkIChieSB1c2luZyAnLWlzeXN0ZW0n IHJhdGhlciB0aGFuICctSScpLiAgUHJldmlvdXNseSBpdCB3YXMKLXVzaW5nIHRoZSAwLjkuOHIg aGVhZGVyIGZpbGVzIGJ1dCBsaW5raW5nIHdpdGggdGhlIDEuMC4wZCBsaWJyYXJpZXMuICBUaGlz Ci1pcyBub3QgaW4gdGhlIHNvdXJjZXMgb3IgbWFrZWZpbGU7IGl0J3MgZG9uZSB3aGVuIGdpdmlu ZyB0aGUgJ21ha2UnIGNvbW1hbmQ6Ci0KLSAgZXhwb3J0IFBBVEg9L3Vzci9iaW46JFBBVEgKLSAg ZXhwb3J0IFNTTElOQz0taXN5c3RlbS91c3IvaW5jbHVkZQotICBleHBvcnQgIlNTTExJQj0tTC91 c3IvbGliIC1XbCwtcnBhdGgsL3Vzci9saWIiCi0gIG1ha2UgbGludXgrc3NsCi0KLUZvbGRlZCB0 aGUgcHJldmlvdXMgbGludXgrb3BlbnNzbCt6bGliK3NoYWRvdytwYW0gYW5kIGxpbnV4K29wZW5z c2wrc2hhZG93Ci10YXJnZXRzIGludG8gbGludXgrc3NsLiAgQ2hlY2tlZCB0aGUgbGludXhzbyAo c2NyaXB0aW5nIG9ubHkpIHRhcmdldCwgYnVpbGRzCi1PSywgNjAwSy4gIE1hZGUgbmV3IHN1YnJv dXRpbml6ZWQgbGludXgra3JiNStrcmI0IHRhcmdldCBidXQgY2FuJ3QgZmluZAotYW55cGxhY2Ug dG8gdGVzdCBpdC4gICBNYWRlIG5ldyBzdWJyb3V0aW5pemVkIGxpbnV4K3NoYWRvdytwYW0gdGFy Z2V0LCB3b3JrcwotZmluZSBvbiBSSEVMNC4gIFJldmlzZWQgY29tbWVudHMgYW5kIGxpc3RzIGFn YWluLiAgbWFrZWZpbGUsIDE4IEp1biAyMDExLgotCi1Gb3IgdGhlIHBsdWdnYWJsZS1kaXNrIE9T J3MgdGhhdCBib290IE9LIGJ1dCBsYWNrIGEgd29ya2luZyBuZXR3b3JrLCBJCi1yaWdnZWQgdXAg YSBzZXJpYWwgY29ubmVjdGlvbiB1c2luZyBhIERCOS1GRiBudWxsIG1vZGVtIGNhYmxlLCBhbmQg dGhlbiBhCi1EQjktTUYgbW9kZW0gY2FibGUgdG8gbWFrZSBpdCByZWFjaC4gIEkgZG9uJ3Qgc2Vl IGFueSBtb2RlbSBzaWduYWxzIG9uCi1laXRoZXIgZW5kLCBidXQgdGhlIGRhdGEgZ29lcyB0aHJv dWdoIE9LLiAgQ09NMSBvbiB0aGUgZGVza3RvcCBQQywKLS9kZXYvdHR5UzEgb3Igd2hhdGV2ZXIg b24gTGFiLiAgU2luY2UgdGhlcmUgYXJlIG5vIG1vZGVtIHNpZ25hbHMsIGNhbid0IHVzZQotUlRT L0NUUy4gIEF0IDU3NjAwYnBzIHdpdGggWG9uL1hvZmYsIDUwMC1ieXRlIHBhY2tldHMgYW5kIHNs aWRpbmcgd2luZG93cywKLXRyYW5zZmVycyB3b3JrIE9LIGF0IGFib3V0IDUwMDBjcHMgdXNpbmcg NSB3aW5kb3cgc2xvdHM7IHRha2VzIDggbWludXRlcyB0bwotdHJhbnNmZXIgdGhlIGd6aXBwZWQg Qy1LZXJtaXQgdGFyYmFsbC4gIEtlcm1pdCB0byB0aGUgcmVzY3VlLiAgMTkgSnVuIDIwMTEuCi0K LVRyYW5zZmVycmVkIHRoZSB0YXJiYWxsIG92ZXIgc2VyaWFsIHBvcnRzIHRvIFNDTyBPU1I1LjAu NSBhdCAzOC40S2JwcywgdGhlCi1oaWdoZXN0IHNwZWVkIHN1cHBvcnRlZCwgMTIgbWludXRlcywg bm8gZXJyb3JzLCAzMzAwY3BzLiAgVW5wYWNrLCBtYWtlCi1zY28zMnY1MDV1ZGssIE9LLiAgQWxz byBidWlsdCB0aGUgVENQL0lQIHZlcnNpb24gYW5kIGl0IGFsbW9zdCBtYWRlIGFuCi1vdXRib3Vu ZCBjb25uZWN0aW9uLCBidXQgb25seSBvbmNlIChub3QgYSBLZXJtaXQgcHJvYmxlbSBidXQgc29t ZXRoaW5nIHdpdGgKLXRoZSBUQ1AvSVAgc3RhY2spLiAgMTkgSnVuIDIwMTEuCi0KLURpdHRvIGZv ciBTb2xhcmlzIDIuNi9pMzg2LCBleGNlcHQgNTcuNkticHMsIDRLLWJ5dGUgcGFja2V0cywgbm8g cHJvYmxlbS4KLVNvbGFyaXMgOC9pMzg2LCBkaXR0by4gIDE5IEp1biAyMDExLgotCi1TQ08gT3Bl blNlcnZlciA1LjAuNSAgaTM4NiAgIDMyICAgc2NvMzJ2NTA1dWRrICAgICAxOTQwOTY0ICBObyBU Q1AvSVAKLVNDTyBPcGVuU2VydmVyIDUuMC41ICBpMzg2ICAgMzIgICBzY28zMnY1MDV1ZGtuZXQg IDIzMTQ2NjggIFdpdGggVENQL0lQCi1TdW4gU29sYXJpcyAyLjYgICAgICAgaTM4NiAgIDMyICAg c29sYXJpczI2ZyAgICAgICA0NjYxMzY4Ci1TdW4gU29sYXJpcyA4ICAgICAgICAgaTM4NiAgIDMy ICAgc29sYXJpczhnICAgICAgICA0Njc1NDMyCi0KLVdoZW4gdXNpbmcgY29tcGFjdCBzdWJzdHJp bmcgbm90YXRpb24sIFxzKHh4WzRdKSByZXR1cm5zIHRoZSB3aG9sZSBzdHJpbmcKLXh4IHN0YXJ0 aW5nIGF0IHBvc2l0aW9uIDQsIGJ1dCBccyh4eFs0Ol0pIHJldHVybnMgYW4gZW1wdHkgc3RyaW5n LiAgRml4ZWQKLXRoZSBsYXR0ZXIgdG8gYmUgbGlrZSB0aGUgZm9ybWVyLiAgY2t1dXM1LmMsIDIw IEp1biAyMDEwLgotCi1SZWFsbHkgaXQgd291bGQgaGF2ZSBiZWVuIG5pY2VyIGlmIFxzKHh4WzRd KSByZXR1cm5lZCBhIHNpbmdsZSBjaGFyYWN0ZXIsCi10aGUgNHRoIGNoYXJhY3RlciBvZiB4eCwg YnV0IGl0J3MgdG9vIGxhdGUgbm93LiAgQWRkZWQgYW5vdGhlciAic2VwYXJhdG9yIgotY2hhcmFj dGVyICcuJyAocGVyaW9kKSBmb3IgdGhhdDogXHMoeHhbNC5dKSBpcyB0aGUgNHRoIGNoYXJhY3Rl ciBvZiB4eC4KLWNrdXVzNC5jLCAyMCBKdW4gMjAxMC4KLQotQmFjayB0byBTQ08gT1NSNS4wLjcu Li4gVGhpcyBmYWlsZWQgYmVmb3JlIGJlY2F1c2UgJ3JkY2hrJyBjYW1lIHVwIHVua25vd24KLWF0 IGxpbmsgdGltZSwgdW5saWtlIGFsbCBwcmV2aW91cyBPU1I1J3MsIHRoYXQgdXNlZCByZGNoaygp IGluIHBsYWNlIG9mIHRoZQotRklPTlJFQUQgaW9jdGwuICBBZGRlZCAjaWZkZWZzIHRvIG1ha2Ug YSBzcGVjaWFsIGNhc2UgZm9yIDUuMC43LiAgSSdtIG5vdAotc3VyZSB0aGlzIGlzIHRoZSBiZXN0 IHdheSwgYnV0IHRoaXMgaXMgdGhlIG1pbmltYWwgY2hhbmdlIHRvIGdldCBpdCB0byB3b3JrLgot SWYgYW55Ym9keSBjYXJlcywgbWF5YmUgdGhlIHNhbWUgY2FuIGJlIGRvbmUgZm9yIHByZXZpb3Vz IE9TUjUgcmVsZWFzZXMuCi1ja3V0aW8uYywgMjAgSnVuIDIwMTAgKHNlYXJjaCBmb3IgU0NPX09T UjUwNykuCi0KLVNDTyBPcGVuU2VydmVyIDUuMC43ICBpMzg2ICAgMzIgICBzY28zMnY1MDcgICAg ICAgIDE4OTU3MjQgIE5vIFRDUC9JUAotU0NPIE9wZW5TZXJ2ZXIgNS4wLjcgIGkzODYgICAzMiAg IHNjbzMydjUwN25ldCAgICAgMjI0Njc5MiAgV2l0aCBUQ1AvSVAKLQotQ2hlY2tlZCBjdXJyZW50 IGNvZGUgb24gUkhFTDQsIGZvdW5kIHRoYXQgbXkgR1NTQVBJLWxpYiBmaW5kaW5nIG1ha2VmaWxl Ci10YXJnZXQgZGlkbid0IGxvb2sgaW4gZW5vdWdoIHBsYWNlczsgYWRkZWQgc29tZSBtb3JlLiAg bWFrZWZpbGUsIDIxIEp1biAyMDExLgotCi1Hb3QgcmVwb3J0cyBiYWNrIG9uIEhQVVggZnJvbSBQ ZXRlciBFaWNoaG9ybiwgYWxtb3N0IGFsbCBnb29kIG9uIEhQLVVYIDcsIDgsCi05LCAxMCwgYW5k IDExLiAgMjEtMjIgSnVuIDIwMTEuCi0KLUdvdCBhY2Nlc3MgdG8gRGViaWFuIDUuMCBhbmQgNy10 by1iZSAoIldoZWV6eS9TaWQiKS4gIFJlZ3VsYXIgJ21ha2UgbGludXgnIGlzCi1PSyBpbiBEZWJp YW4gNSwgYnV0IGluIDcgY2FuJ3QgZmluZCBjcnlwdCwgcmVzX3NlYXJjaCwgb3IgZG5fZXhwYW5k OyBoYWQKLXRvIGFkZCBtb3JlIGxpYnJhcnkgc2VhcmNoIGNsYXVzZXMgdG8gJ21ha2UgbGludXgn LiAgbWFrZWZpbGUsIDIxIEp1biAyMDExLgotCi1JbiBEZWJpYW4gNy4wLCBsaWJrNWNyeXB0byBj b3VsZCBub3QgYmUgZm91bmQgd2l0aG91dCBhZGRpbmcgYW5vdGhlciBjbGF1c2UKLXRvICdtYWtl IGxpbnV4K2tyYjUnLiAgVGhhdCBkb25lLCB0aGUgU1NMIGJ1aWxkICgxLjAuMGQpIHdhcyBPSywg YXMgd2VsbCBhcwotdGhlIGtyYjUrc3NsIG9uZS4gIG1ha2VmaWxlLCAyMSBKdW4gMjAxMS4KLQot SSBmb3VuZCBhIExpbnV4IGJveCB0aGF0IGhhZCBib3RoIEtlcmJlcm9zIDQgYW5kIDUgaW5zdGFs bGVkIGFuZCB0cmllZCAnbWFrZQotbGludXgra3JiNStrcmI0Jywgd2hpY2ggZmFpbGVkIGJlY2F1 c2Ugb2YgbWlzc2luZyBERVMgZnVuY3Rpb25zLiAgVHJpZWQKLSdtYWtlIGxpbnV4K2tyYjUra3Ji NCBLRkxBR1M9LVVDS19ERVMnLCBidXQgdGhhdCBmYWlscyB0b28sIGV2ZW4gdGhvdWdoIGl0Ci1k b2Vzbid0IGZhaWwgZm9yIEtlcmJlcm9zIDUgYWxvbmUsIHNvIHByb2JhYmx5IHNvbWUgS3JiNCBj b2RlIGlzIG1ha2luZwotdW5ndWFyZGVkIGNhbGxzIHRvIHRoZSBERVMgcm91dGluZXMuICBXaGF0 IGlzIHJlYWxseSBuZWVkZWQgaXMgYSB3YXkgdG8KLWNvbXBsZXRlbHkgc3RyaXAgYWxsIERFUyBy ZWZlcmVuY2VzIGZyb20gYW55IGdpdmVuIGJ1aWxkLCBjb2RlIGFuZCBtYWtlZmlsZSwKLWEgYmln IGRlYWwuICAyMSBKdW4gMjAxMS4KLQotRml4ZWQgc29tZSB0eXBvcyBpbiBDT1BZSU5HLlRYVCAo bm90aWNlZCBieSBJYW4gQmVja3dpdGgpLiAgMjQgSnVuIDIwMTEuCi0KLUdvdCBhY2Nlc3MgdG8g cGVyaGFwcyB0aGUgbGFzdCBsaXZpbmcgNC4zQlNEIFZBWCBzeXN0ZW0uICBJdCBkb2Vzbid0IGhh dmUKLVNFRUtfQ1VSIHNvIEkgaGFkIHRvICNpZmRlZiBvdXQgdGhlIFxmcGljdHVyZSgpIGZ1bmN0 aW9uLiAgQXNpZGUgZnJvbSB0aGF0LAotbm8gcHJvYmxlbXMuICBja3V1czQuYywgMjQgSnVuIDIw MTEuCi0KLUkgaGFkIGJlZW4gd2FudGluZyB0aGUgUy1FeHByZXNzaW9uIChST1VORCB4KSB0byBh bGxvdyBhIHNlY29uZCBhcmd1bWVudCBuLAotd2hpY2gsIGlmIGdpdmVuLCB0ZWxscyB3aGVyZSB0 aGUgcm91bmRpbmcgc2hvdWxkIG9jY3VyLiAgSWYgbiBpcyBwb3NpdGl2ZSwKLXRoZSBudW1iZXIg aXMgcm91bmRlZCB0byBuIGRlY2ltYWwgcGxhY2VzLiAgSWYgemVybywgaXQgaXMgcm91bmRlZCB0 byB0aGUKLW5lYXJlc3QgaW50ZWdldC4gIElmIHBvc2l0aXZlLCB0aGUgbnVtYmVyIGlzIHJvdW5k ZWQgdG8gdGhlIG5lYXJlc3QgcG93ZXIgb2YKLTEwOyBlLmcuIC0yIG1lYW5zICJ0byB0aGUgbmVh cmVzdCBodW5kcmVkIi4gIElmIFJPVU5EIGlzIHVzZWQgYXMgYmVmb3JlLAotd2l0aCBvbmUgYXJn dW1lbnQsIGl0IHdvcmtzIGFzIGJlZm9yZS4gIGNrY2xpYi5jLCBja3V1czMuYywgMjUgSnVuIDIw MTEuCi0KLUZyb20gQXJ0aHVyIE1hcnNoLCBhIGZldyBtb3JlIGRpcmVjdG9yaWVzIHRvIHRlc3Qg Zm9yIGxpYnJlc29sdiBpbiBMaW51eC4KLW1ha2VmaWxlLCAyNiBKdW4gMjAxMS4KLQotRnJvbSBN YXJ0aW4gVm9ybGFlbmRlciwgYSBmaXggZm9yIHRoZSBWTVMgZmlsZS10cmFuc2ZlciBkaXNwbGF5 IGFuZAotc3RhdGlzdGljcywgYSBwbGFjZSB3aGVyZSBhIGZpbGUgbGVuZ3RoIHdhc24ndCBiZWlu ZyBjYXN0IHRvIENLX09GRl9UCi1pbiB6Y2hraSgpLiAgY2t2ZmlvLmMsIDI4IEp1biAyMDExLgot Ci1VcGRhdGVkIHZlcnNpb24gdG8gOS4wLjMwMCBhbmQgcmVtb3ZlZCB0aGUgQmV0YSBkZXNpZ25h dGlvbi4KLWNrY21haS5jLCBtYWtlZmlsZSwgMjggSnVuIDIwMTEuCi0KLVJlbW92ZWQgc29sYXJp czlfNjQgdGFyZ2V0IGZyb20gbWFrZWZpbGUuICBJdCBidWlsZHMgYnV0IGl0IGRvZXNuJ3Qgd29y awotYXQgYWxsLiAgMzAgSnVuIDIwMTEuCi0KLS0tLSBDLUtlcm1pdCA5LjAuMzAwIC0tLQotCi1P biBTb2xhcmlzIDEwIGFuZCAxMSwgRE5TIGxvb2t1cHMgZG9uJ3Qgd29yay4gIEl0IHNlZW1zIHRo ZXNlIFNvbGFyaXMKLXZlcnNpb25zIGhhdmUgSU5BRERSWCBhbmQgSU5BRERSWF9OT05FIGRlZmlu ZWQsIHRodXMgdHJpZ2dlcmluZyB0aGUgY29kZSBpbgotY2tjbmV0LmMsIGNrdWNucy5jLCBhbmQg Y2tjZnRwLmMgI2lmZGVmJ2Qgb24gdGhlc2Ugc3ltYm9scywgYnV0IHRoYXQgY29kZQotZG9lc24n dCB3b3JrIGluIHRoaXMgY2FzZS4gIFRoaXMgaGFwcGVucyBidWlsZGluZyB3aXRoIGdjYyBhcyB3 ZWxsIGFzIHdpdGgKLVN1biBjYy4gIFB1dCAjaWZkZWZzIGluIGNrY25ldC5oIHRvIHVuZGVmaW5l IHRoZXNlIHN5bWJvbHMgKGlmIHRoZXkgYXJlCi1kZWZpbmVkIGFmdGVyIGluY2x1ZGluZyBhbGwg dGhlIGhlYWRlciBmaWxlcykgZm9yIFNvbGFyaXMuICBJIGRpZG4ndCBib3RoZXIKLXRyeWluZyB0 byBkaWZmZXJlbnRpYXRlIHRoZSBTb2xhcmlzIHZlcnNpb25zIGJlY2F1c2UgdGhlIHN5bWJvbHMg YXJlIG5vdAotZGVmaW5lZCBpbiBTb2xhcmlzIDkgb3IgZWFybGllciwgYW5kIHRoZXkgc2hvdWxk IG5vdCBiZSB1c2VkIGluIFNvbGFyaXMgMTAKLW9yIDExLiAgY2tjbmV0LmgsIDYgSnVseSAyMDEx LgotCi1Gcm9tIFNNUzogIFRvIGF2b2lkIHRoZSAlQ0MtVy1QVFJNSVNNQVRDSDEgY29tcGxhaW50 cyBmcm9tIGNrX3NzbC5jLCBhZGQKLXR3byAoaGFybWxlc3MpIHR5cGUgY2FzdHMgYXQgbGluZXMg MjQ2MCBhbmQgMjc3MywgNiBKdWx5IDIwMTEuCi0KLUJ1aWx0IGFuZCB0ZXN0ZWQgb24gU29sYXJp cyA5LCBTb2xhcmlzIDEwLCBhbmQgUkhFTDUuICA2IEp1bHkgMjAxMS4KLQotLS0tIEMtS2VybWl0 IDkuMC4zMDEgQmV0YS4wMSAtLS0KLQotVXBkYXRlZCB2ZXJzaW9uIHRleHQgYW5kIGRhdGUuICBj a2NtYWkuYywgbWFrZWZpbGUsIDExIEp1bHkgMjAxMS4KLQotLS0tIEMtS2VybWl0IDkuMC4zMDEg LS0tCi0KLUFmdGVyIHRoZSBpbml0aWFsIHJlbGVhc2UgSSBtYWRlIHNvbWUgc21hbGwgY2hhbmdl cyB0aGF0IGFmZmVjdCBvbmx5IEhQLVVYCi01Lng6IGFkZGVkIC1EVk9JRD12b2lkIGFuZCAtRENL Vk9JRD12b2lkIHRvIHRoZSBocHV4MDUwMCBtYWtlZmlsZSB0YXJnZXRzLAotYW5kIHB1dCAjaWZk ZWZzIGFyb3VuZCAjaW5jbHVkZSA8ZXJybm8uaD4sIHdoaWNoIChpbiB0aGUgV2luVENQIGNhc2Up IGRpZG4ndAotcHJvdGVjdCBpdHNlbGYgYWdhaW5zdCBtdWx0aXBsZSBpbmNsdXNpb24gKHdoaWNo IGlzIGhhcHBlbmluZyBpbiBvdGhlcgotaGVhZGVyIGZpbGVzLCBub3QgaW4gS2VybWl0KS4gIG1h a2VmaWxlLCBja3VjbWQuYywgY2t1Y29uLmMsIGNrdXRpby5jLAotY2t1ZmlvLmMsIGNrY25ldC5j LCBja2NmdHAuYywgMTQgSnVseSAyMDExLgotCi1JbiB0aGUgbmV3IGNvcHlyaWdodCBub3RpY2Us IGNvcGllZCBmcm9tIHRoZSBCU0QgbGljZW5zZSB0ZW1wbGF0ZSwKLW9uZSBpbnN0YW5jZSBvZiAi dGhlIDxPUkdBTklaQVRJT04+IiB3YXMgbm90IHJlcGxhY2VkIGJ5ICJDb2x1bWJpYQotVW5pdmVy c2l0eSIuICBGaXhlZCBpbiBja2NtYWkuYywgMTkgSnVseSAyMDExLgotCi1BZGRlZCBhbm90aGVy IHNlYXJjaCB0ZXJtIGZvciBsazVjcnlwdG8gaW4gdGhlIGxpbnV4K2tyYjUgdGFyZ2V0cy4KLW1h a2VmaWxlLCAyMCBKdWx5IDIwMTEuCi0KLUFkZGVkIGFuZCBzdWNjZXNzZnVsbHkgdXNlZCBhIG5l dyBzb2xhcmlzOStrcmI1K3NzbCB0YXJnZXQuCi1tYWtlZmlsZSwgOCBBdWcgMjAxMS4KLQotRnJl ZUJTRCA5IHN3aXRjaGVkIGZyb20gdXRtcCB0byB1dG1weCwgd2hpY2ggYnJva2UgY29tcGlsYXRp b24gb2YgS2VybWl0IG9uCi10aGF0IHZlcnNpb24uICBGdXJ0aGVybW9yZSwgdGhlIFVVQ1AgbG9j a2ZpbGUgY29udmVuc2lvbnMgY2hhbmdlZCBpbiBGcmVlQlNECi04LCB3aGljaCBkaWQgbm90IHBy ZXZlbnQgQy1LZXJtaXQgZnJvbSBjb21waWxpbmcsIGJ1dCBhbnkgYXR0ZW1wdCB0byBsb2NrIGEK LXRlcm1pbmFsIG9yIHB0eSBkZXZpY2Ugd291bGQgZmFpbC4gIFRoYW5rcyB0byBBbGV4ZXkgRG9r dWNoYWV2ICJkYW5mZSIgZm9yCi1maW5kaW5nIGFuZCBwYXRjaGluZyB0aGUgcHJvYmxlbXMuICBJ IHVuZGlkIHRoZSBwYXRjaGVzIGFuZCBmaXhlZCB0aGUgY29kZQotc28gaXQgZGlkbid0IG5lZWQg dG8gYmUgcGF0Y2hlZCwgZXhjZXB0IGZvciBzb21lIGRlY2xhcmF0aW9ucyBpbiB0aGUKLWNrX2Ny cC5jIG1vZHVsZSwgd2hpY2ggSSBmZWx0IGhhZCBiZXR0ZXIgbm90IGJlIGNoYW5nZWQgd2l0aG91 dCB0aG9yb3VnaGx5Ci10ZXN0aW5nIHRoZSBjaGFuZ2VzIG9uIGRvemVucyBvZiBkaWZmZXJlbnQg cGxhdGZvcm1zLCB3aGljaCBJIGRvbid0IGhhdmUKLXRpbWUgdG8gZG8gKGluIGFueSBjYXNlLCBp dCBidWlsZHMgT0sgb24gRnJlZUJTRCA5IHdpdGhvdXQgdGhlIHBhdGNoKS4gIEluCi1wYXJ0aWN1 bGFyIEkgbWFkZSBjb21wbGV0ZWx5IG5ldyBtYWtlZmlsZSB0YXJnZXRzIGZvciBGcmVlQlNEIDQu MCBhbmQgbGF0ZXIsCi13aGljaCBhdXRvbWF0aWNhbGx5IGRldGVjdCBGcmVlQlNEIDggYW5kIEZy ZWVCU0QgOSB0byBlbmFibGUgdGhlIGFwcHJvcHJpYXRlCi1mZWF0dXJlIHRlc3RzIGluIHRoZSBj b2RlLCBmb3IgYSByZWd1bGFyIGJ1aWxkIGFuZCBhIGJ1aWxkIHdpdGggT3BlblNTTC4KLVRoZXNl IGNoYW5nZXMgc2hvdWxkIGFmZmVjdCBvbmx5IEZyZWVCU0QuICBja3V0aW8uYywgY2t1ZmlvLmMs IGNrX2NycC5jLAotY2t1dXM1LmMsIG1ha2VmaWxlLCAyMCBBdWcgMjAxMS4KLQotQ2hhbmdlZCB0 aGUgdmVyc2lvbiB0byA5LjAuMzAyLCBja2NtYWkuYywgMjAgQXVnIDIwMTEuCi0KLUZpeGVkIGZy ZWVic2Qrc3NsIGFuZCBuZXRic2Qrc3NsLCBuZXRic2Qra3JiNSwgYW5kIG5ldGJzZCtrcmI1K3Nz bCB0YXJnZXRzCi10byBoYXZlIENDPSQoQ0MpIGluc3RlYWQgb2YgQ0M9Z2NjOyBkaXR0byBmb3Ig Q0MyLCBhbmQgYWRqdXN0ZWQgbGluZSBicmVha3MKLWluIGZyZWVic2QgYW5kIGZyZWVic2Qrc3Ns IHRhcmdldHMuICBtYWtlZmlsZSwgMjEgQXVnIDIwMTEuCi0KLS0tLSA5LjAuMzAyIC0tLQotCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoqKioqKioqKioqKioqKioqKioqKioq KioqKgoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIv Y2tjYXNjLmggYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY2FzYy5o CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGNkMmY3Li4wMDAwMDAwCi0tLSBhL2Nr ZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjYXNjLmgKKysrIC9kZXYvbnVs bApAQCAtMSw2OSArMCwwIEBACi0vKgotICBGaWxlIENLQ0FTQy5ICi0gIE1uZW1vbmljcyBmb3Ig QVNDSUkgY29udHJvbCBjaGFyYWN0ZXJzIChhbmQgU3BhY2UpIGZvciB1c2Ugd2l0aCBDLUtlcm1p dC4KLSovCi0vKgotICBBdXRob3I6IEZyYW5rIGRhIENydXogKGZkY0Bjb2x1bWJpYS5lZHUpLgot ICBDb2x1bWJpYSBVbml2ZXJzaXR5IEFjYWRlbWljIEluZm9ybWF0aW9uIFN5c3RlbXMsIE5ldyBZ b3JrIENpdHkuCi0KLSAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDA5LAotICAgIFRydXN0ZWVzIG9m IENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCi0gICAgQWxsIHJp Z2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBvciB0aGUK LSAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVy IGFuZCBwZXJtaXNzaW9ucy4KLSovCi0jaWZuZGVmIENLQ0FTQ19ICi0jZGVmaW5lIENLQ0FTQ19I Ci0KLSNkZWZpbmUgTlVMICAnXDAnICAgICAgIC8qIE51bGwgQ3RybC1AKi8KLSNkZWZpbmUgU09I ICAgIDEgICAgICAgIC8qIFN0YXJ0IG9mIGhlYWRlciBDdHJsLUEgKi8KLSNkZWZpbmUgU1RYICAg IDIgICAgICAgIC8qIEN0cmwtQiAqLwotI2RlZmluZSBFVFggICAgMyAgICAgICAgLyogQ3RybC1D ICovCi0jZGVmaW5lIEVPVCAgICA0ICAgICAgICAvKiBDdHJsLUQgKi8KLSNkZWZpbmUgRU5RICAg IDUgICAgICAgIC8qIEVOUSBDdHJsLUUgKi8KLSNkZWZpbmUgQUNLICAgIDYgICAgICAgIC8qIEN0 cmwtRiAqLwotI2RlZmluZSBCRUwgICAgNyAgICAgICAgLyogQmVsbCAoQmVlcCkgQ3RybC1HICov Ci0jZGVmaW5lIEJTICAgICA4ICAgICAgICAvKiBCYWNrc3BhY2UgQ3RybC1IICovCi0jZGVmaW5l IEhUICAgICA5ICAgICAgICAvKiBIb3Jpem9udGFsIFRhYiBDdHJsLUkgKi8KLSNkZWZpbmUgTEYg ICAgMTAgICAgICAgIC8qIExpbmVmZWVkIEN0cmwtSiAqLwotI2RlZmluZSBWVCAgICAxMSAgICAg ICAgLyogVmVydGljYWwgVGFiIEN0cmwtSyAqLwotI2RlZmluZSBOTCAgICdcbicgICAgICAgLyog TmV3bGluZSAqLwotI2RlZmluZSBGRiAgICAxMiAgICAgICAgLyogRm9ybWZlZWQgQ3RybC1MICov Ci0jZGVmaW5lIENSICAgIDEzICAgICAgICAvKiBDYXJyaWFnZSBSZXR1cm4gQ3RybC1NICovCi0j ZGVmaW5lIFNPICAgIDE0ICAgICAgICAvKiBTaGlmdCBPdXQgQ3RybC1OICovCi0jZGVmaW5lIFNJ ICAgIDE1ICAgICAgICAvKiBTaGlmdCBJbiBDdHJsLU8gKi8KLSNkZWZpbmUgRExFICAgMTYgICAg ICAgIC8qIERhdGFsaW5rIEVzY2FwZSBDdHJsLVAgKi8KLSNkZWZpbmUgWE9OICAgMTcgICAgICAg IC8qIFhPTiBDdHJsLVEgKi8KLSNkZWZpbmUgREMxICAgMTcKLSNkZWZpbmUgREMyICAgMTggICAg ICAgIC8qIEN0cmwtUiAqLwotI2RlZmluZSBYT0ZGICAxOSAgICAgICAgLyogWE9GRiBDdHJsLVMg Ki8KLSNkZWZpbmUgREMzICAgMTkKLSNkZWZpbmUgREM0ICAgMjAgICAgICAgIC8qIEN0cmwtVCAq LwotI2RlZmluZSBOQUsgICAyMSAgICAgICAgLyogQ3RybC1VICovCi0jZGVmaW5lIFNZTiAgIDIy ICAgICAgICAvKiBTWU4sIEN0cmwtViAqLwotI2RlZmluZSBFVEIgICAyMyAgICAgICAgLyogQ3Ry bC1XICovCi0jZGVmaW5lIENBTiAgIDI0ICAgICAgICAvKiBDQU4sIEN0cmwtWCAqLwotI2RlZmlu ZSBYRU0gICAyNSAgICAgICAgLyogQ3RybC1ZICh3YXMgRU0gYnV0IGNvbmZsaWN0cyB3aXRoIE9w ZW5TU0wpICovCi0jZGVmaW5lIFNVQiAgIDI2ICAgICAgICAvKiBTVUIgQ3RybC1aICovCi0jZGVm aW5lIEVTQyAgIDI3ICAgICAgICAvKiBFc2NhcGUgQ3RybC1bICovCi0jZGVmaW5lIFhGUyAgIDI4 ICAgICAgICAvKiBGaWVsZCBTZXBhcmF0b3IsICBDdHJsLUJhY2tzbGFzaCAqLwotI2RlZmluZSBY R1MgICAyOSAgICAgICAgLyogR3JvdXAgU2VwYXJhdG9yLCAgQ3RybC1SaWdodGJyYWNrZXQgKi8K LSNkZWZpbmUgWFJTICAgMzAgICAgICAgIC8qIFJlY29yZCBTZXBhcmF0b3IsIEN0cmwtQ2lyY3Vt ZmxleCAqLwotI2RlZmluZSBVUyAgICAzMSAgICAgICAgLyogVW5pdCBTZXBhcmF0b3IsICAgQ3Ry bC1VbmRlcnNjb3JlICovCi0jZGVmaW5lIFNQICAgIDMyICAgICAgICAvKiBTcGFjZSAqLwotI2Rl ZmluZSBERUwgIDEyNyAgICAgICAgLyogRGVsZXRlIChSdWJvdXQpICovCi0jZGVmaW5lIFJVQiAg MTI3ICAgICAgICAvKiBEZWxldGUgKFJ1Ym91dCkgKi8KLQotI2lmZGVmIE9TMgotLyoKLSAgVGhl c2UgYXJlIG5lZWRlZCBpbiBPUy8yLCBzbyBsZXQncyBub3QgY2F1c2UgYW55IHVubmVjZXNzYXJ5 IGNvbmZsaWN0cy4KLSovCi0jZGVmaW5lIF9DU0kgIDAyMzMgICAgICAvKiA4LWJpdCBDb250cm9s IFNlcXVlbmNlIEludHJvZHVjZXIgKi8KLSNkZWZpbmUgX1NTMiAgMDIxNiAgICAgIC8qIDgtYml0 IFNpbmdsZSBTaGlmdCAyICovCi0jZGVmaW5lIF9TUzMgIDAyMTcgICAgICAvKiA4LWJpdCBTaW5n bGUgU2hpZnQgMyAqLwotI2RlZmluZSBfRENTICAwMjIwICAgICAgLyogOC1iaXQgRGV2aWNlIENv bnRyb2wgU3RyaW5nIEludHJvZHVjZXIgKi8KLSNkZWZpbmUgX1NUOCAgMDIzNCAgICAgIC8qIDgt Yml0IFN0cmluZyBUZXJtaW5hdG9yICovCi0jZGVmaW5lIF9PU0MgIDAyMzUgICAgICAvKiA4LWJp dCBPcGVyYXRpbmcgU3lzdGVtIENvbW1hbmQgKi8KLSNkZWZpbmUgX1BNOCAgMDIzNiAgICAgIC8q IDgtYml0IFByaXZhY3kgTWVzc2FnZSAqLwotI2RlZmluZSBfQVBDICAwMjM3ICAgICAgLyogOC1i aXQgQXBwbGljYXRpb24gUHJvZ3JhbSBDb21tYW5kICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5k aWYgLyogQ0tDQVNDX0ggKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tl cm1pdC05LjAuMzAyL2NrY2J3ci50eHQgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05 LjAuMzAyL2NrY2J3ci50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzM2M5NDYu LjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2Ni d3IudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTUxNCArMCwwIEBACi0KLSAgIFsxXVRoZSBDb2x1 bWJpYSBDcm93biBUaGUgS2VybWl0IFByb2plY3QgfCBDb2x1bWJpYSBVbml2ZXJzaXR5Ci0gICA2 MTIgV2VzdCAxMTV0aCBTdHJlZXQsIE5ldyBZb3JrIE5ZIDEwMDI1IFVTQSBvIFsyXWtlcm1pdEBj b2x1bWJpYS5lZHUKLSAgIC4uLnNpbmNlIDE5ODEKLSAgIFszXUhvbWUgWzRdS2VybWl0IDk1IFs1 XUMtS2VybWl0IFs2XVNjcmlwdHMgWzddQ3VycmVudCBbOF1OZXcgWzldRkFRCi0gICBbMTBdU3Vw cG9ydAotCi0gICBBcyBvZjogQy1LZXJtaXQgOS4wLjMwMCwgMzAgSnVuZSAyMDExCi0gICBUaGlz IHBhZ2UgbGFzdCB1cGRhdGVkOiBUdWUgSnVuIDI4IDA4OjU0OjMwIDIwMTEgKE5ldyBZb3JrIFVT QSBUaW1lKQotCi0gICAgIElGIFlPVSBBUkUgUkVBRElORyBBIFBMQUlOLVRFWFQgdmVyc2lvbiBv ZiB0aGlzIGRvY3VtZW50LCBpdCBpcyBhCi0gICAgIHBsYWluLXRleHQgZHVtcCBvZiBhIFdlYiBw YWdlLiBZb3UgY2FuIHZpc2l0IHRoZSBvcmlnaW5hbCAoYW5kCi0gICAgIHBvc3NpYmx5IG1vcmUg dXAtdG8tZGF0ZSkgV2ViIHBhZ2UgaGVyZToKLQotICBbMTFdaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrY2J3ci5odG1sCi0KLSAgIFRoaXMgZG9jdW1lbnQgY29udGFpbnMgcGxhdGZv cm0taW5kZXBlbmRlbnQgQy1LZXJtaXQgaGludHMgYW5kIHRpcHMuCi0gICBBbHNvIHNlZSB0aGUg cGxhdGZvcm0tc3BlY2lmaWMgQy1LZXJtaXQgaGludHMgYW5kIHRpcHMgZG9jdW1lbnQgZm9yCi0g ICB5b3VyIHBsYXRmb3JtLCBmb3IgZXhhbXBsZToKLQotICBbMTJdaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sCi0KLSAgIGZvciBVbml4LiBUaGlzIGRvY3VtZW50IGFs c28gYXBwbGllcyB0byBbMTNdS2VybWl0IDk1IGZvciBXaW5kb3dzLAotICAgd2hpY2ggaXMgYmFz ZWQgb24gQy1LZXJtaXQuCi0KLSAgIFsgWzE0XUMtS2VybWl0IF0gWyBbMTVdVFVUT1JJQUwgXQot Ci1DT05URU5UUwotCi0gICAwLiBbMTZdUEFUQ0hFUwotICAgMS4gWzE3XUlOQ09NUEFUSUJMRSBD SEFOR0VTCi0gICAyLiBbMThdVEhFIEMtS0VSTUlUIENPTU1BTkQgUEFSU0VSCi0gICAzLiBbMTld TVVMVElQTEUgU0VTU0lPTlMKLSAgIDQuIFsyMF1ORVRXT1JLIENPTk5FQ1RJT05TCi0gICA1LiBb MjFdTU9ERU1TIEFORCBESUFMSU5HCi0gICA2LiBbMjJdRElBTElORyBISU5UUyBBTkQgVElQUwot ICAgNy4gWzIzXVRFUk1JTkFMIFNFUlZFUlMKLSAgIDguIFsyNF1URVJNSU5BTCBFTVVMQVRJT04K LSAgIDkuIFsyNV1LRVkgTUFQUElORwotICAxMC4gWzI2XUZJTEUgVFJBTlNGRVIKLSAgMTEuIFsy N11TQ1JJUFQgUFJPR1JBTU1JTkcKLQotMC4gUEFUQ0hFUwotCi0gICBbIFsyOF1Ub3AgXSBbIFsy OV1Db250ZW50cyBdIFsgWzMwXU5leHQgXQotCi0gICBTb3VyY2UtbGV2ZWwgcGF0Y2hlcyBmb3Ig Qy1LZXJtaXQgOC4wLjIxMToKLQotICAgICAoTm9uZSkKLQotMS4gSU5DT01QQVRJQkxFIENIQU5H RVMKLQotICAgWyBbMzFdVG9wIF0gWyBbMzJdQ29udGVudHMgXSBbIFszM11OZXh0IF0KLQotICAg VGhlc2UgYXJlIG5vdCBuZWNlc3NhcmlseSBleGhhdXN0aXZlIGxpc3RzLgotCi0xLjEuIEMtS2Vy bWl0IDYuMAotCi0gICBDLUtlcm1pdCA2LjAgd2FzIHJlbGVhc2VkIDYgU2VwdGVtYmVyIDE5OTYg YW5kIGlzIGNvbXBsZXRlbHkgZG9jdW1lbnRlZAotICAgaW4gWzM0XVVzaW5nIEMtS2VybWl0LCAy bmQgRWRpdGlvbi4gVGhlIGZvbGxvd2luZyBpbmNvbXBhdGlibGUgY2hhbmdlcwotICAgd2VyZSBt YWRlIGluIEMtS2VybWl0IDYuMDoKLQotICAgICAqIFVubGVzcyB5b3UgdGVsbCBDLUtlcm1pdCBv dGhlcndpc2UsIGlmIGEgc2VyaWFsIG9yIG5ldHdvcmsKLSAgICAgICBjb25uZWN0aW9uIHNlZW1z IHRvIGJlIG9wZW4sIGFuZCB5b3UgYXR0ZW1wdCB0byBFWElUIG9yIHRvIG9wZW4gYQotICAgICAg IG5ldyBjb25uZWN0aW9uLCBDLUtlcm1pdCB3YXJucyB5b3UgdGhhdCBhbiBhY3RpdmUgY29ubmVj dGlvbgotICAgICAgIGFwcGVhcnMgdG8gYmUgb3BlbiBhbmQgYXNrcyB5b3UgaWYgeW91IHJlYWxs eSB3YW50IHRvIGNsb3NlIGl0LiBJZgotICAgICAgIHlvdSBkbyBub3Qgd2FudCB0aGVzZSB3YXJu aW5ncywgYWRkIFNFVCBFWElUIFdBUk5JTkcgT0ZGIHRvIHlvdXIKLSAgICAgICBjdXN0b21pemF0 aW9uIGZpbGUgb3Igc2NyaXB0LCBvciBnaXZlIHRoaXMgY29tbWFuZCBhdCB0aGUgcHJvbXB0Lgot ICAgICAqIFRoZSBkZWZhdWx0IGZvciBTRVQgeyBTRU5ELCBSRUNFSVZFIH0gUEFUSE5BTUVTIHdh cyBjaGFuZ2VkIGZyb20gT04KLSAgICAgICB0byBPRkYsIHRvIHByZXZlbnQgdW5leHBlY3RlZCBj cmVhdGlvbiBvZiBkaXJlY3RvcmllcyBhbmQKLSAgICAgICBkZXBvc2l0aW5nIG9mIGluY29taW5n IGZpbGVzIGluIHBsYWNlcyB5b3UgbWlnaHQgbm90IGtub3cgdG8gbG9vay4KLSAgICAgKiBUaGUg ZGVmYXVsdCBmb3IgU0VUIEZJTEUgSU5DT01QTEVURSB3YXMgY2hhbmdlZCBmcm9tIERJU0NBUkQg dG8KLSAgICAgICBLRUVQIHRvIGFsbG93IGZvciBmaWxlIHRyYW5zZmVyIHJlY292ZXJ5LgotICAg ICAqIFRoZSBkZWZhdWx0IGZpbGUtdHJhbnNmZXIgYmxvY2stY2hlY2sgaXMgbm93IDMsIHJhdGhl ciB0aGFuIDEuIElmCi0gICAgICAgdGhlIG90aGVyIEtlcm1pdCBkb2VzIG5vdCBzdXBwb3J0IHRo aXMsIHRoZSB0d28gd2lsbCBkcm9wIGJhY2sgdG8KLSAgICAgICB0eXBlIDEgYXV0b21hdGljYWxs eSB1bmxlc3MgdGhlIG90aGVyIEtlcm1pdCBmYWlscyB0byBmb2xsb3cgdGhlCi0gICAgICAgcHJv dG9jb2wgc3BlY2lmaWNhdGlvbi4KLSAgICAgKiBUaGUgZGVmYXVsdCBmbG93LWNvbnRyb2wgaXMg bm93ICJhdXRvIiAoImRvIHRoZSByaWdodCB0aGluZyBmb3IKLSAgICAgICBlYWNoIHR5cGUgb2Yg Y29ubmVjdGlvbiIpLCBub3QgWG9uL1hvZmYuCi0gICAgICogQmFja3NsYXNoIChcKSBpcyBubyBs b25nZXIgYSBjb21tYW5kIGNvbnRpbnVhdGlvbiBjaGFyYWN0ZXIuIE9ubHkgLQotICAgICAgICho eXBoZW4sIGRhc2gpIG1heSBiZSB1c2VkIGZvciB0aGlzIGluIEMtS2VybWl0IDYuMCBhbmQgbGF0 ZXIuCi0gICAgICogTmVnYXRpdmUgSU5QVVQgdGltZW91dCBub3cgcmVzdWx0cyBpbiBpbmZpbml0 ZSB3YWl0LCByYXRoZXIgdGhhbiAxCi0gICAgICAgc2Vjb25kLgotCi0xLjIuIEMtS2VybWl0IDcu MAotCi0gICBDLUtlcm1pdCA3LjAgd2FzIHJlbGVhc2VkIDEgSmFudWFyeSAyMDAwLiBJdHMgbmV3 IGZlYXR1cmVzIGFyZQotICAgZG9jdW1lbnRlZCBpbiB0aGUgQy1LZXJtaXQgNy4wIFN1cHBsZW1l bnQsCi0gICBbMzVdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQyLmh0bWwu IFRoZSBmb2xsb3dpbmcKLSAgIGluY29tcGF0aWJsZSBjaGFuZ2VzIHdlcmUgbWFkZSBpbiBDLUtl cm1pdCA3LjA6Ci0gICAgICogVGhlICJtdWx0aWxpbmUgR0VUIiBjb21tYW5kIGlzIGdvbmUuIE5v dyB1c2UgZWl0aGVyIG9mIHRoZQotICAgICAgIGZvbGxvd2luZyBmb3JtcyBpbnN0ZWFkOgotICBn ZXQgcmVtb3RlLW5hbWUgbG9jYWwtbmFtZQotICBnZXQgL2FzLW5hbWU6bG9jYWwtbmFtZSByZW1v dGUtbmFtZQotCi0gICAgICAgSWYgZWl0aGVyIG5hbWUgY29udGFpbnMgc3BhY2VzLCBlbmNsb3Nl IGl0IGluIGJyYWNlcyAob3IsIGluCi0gICAgICAgQy1LZXJtaXQgOC4wLCBkb3VibGVxdW90ZXMp LgotICAgICAqIFRvIGluY2x1ZGUgbXVsdGlwbGUgZmlsZSBzcGVjaWZpY2F0aW9ucyBpbiBhIEdF VCBjb21tYW5kLCB5b3UgbXVzdAotICAgICAgIG5vdyB1c2UgTUdFVCByYXRoZXIgdGhhbiBHRVQ6 Ci0gIG1nZXQgZmlsZTEgZmlsZTIgZmlsZTMgLi4uCi0KLSAgICAgKiBDLUtlcm1pdCA3LjAgYW5k IGxhdGVyIHVzZSBGQVNUIEtlcm1pdCBwcm90b2NvbCBzZXR0aW5ncyBieQotICAgICAgIGRlZmF1 bHQuIFRoaXMgaW5jbHVkZXMgInVucHJlZml4aW5nIiBvZiBjZXJ0YWluIGNvbnRyb2wgY2hhcmFj dGVycy4KLSAgICAgICBCZWNhdXNlIG9mIHRoaXMsIGZpbGUgdHJhbnNmZXJzIHRoYXQgd29ya2Vk IHdpdGggcHJldmlvdXMgcmVsZWFzZXMKLSAgICAgICBtaWdodCBub3Qgd29yayBpbiB0aGUgbmV3 IHJlbGVhc2UgZXNwZWNpYWxseSBhZ2FpbnN0IGEKLSAgICAgICBub24tS2VybWl0LVByb2plY3Qg S2VybWl0IHByb3RvY29sIGltcGxlbWVudGF0aW9uIChidXQgaXQgaXMgbW9yZQotICAgICAgIGxp a2VseSB0aGF0IHRoZXkgd2lsbCB3b3JrLCBhbmQgbXVjaCBmYXN0ZXIpLiBJZiBhIHRyYW5zZmVy IGZhaWxzLAotICAgICAgIHlvdSdsbCBnZXQgYSBjb250ZXh0LXNlbnNpdGl2ZSBoaW50IHN1Z2dl c3RpbmcgcG9zc2libGUgY2F1c2VzIGFuZAotICAgICAgIGN1cmVzLiBVc3VhbGx5IFNFVCBQUkVG SVhJTkcgQUxMIGRvZXMgdGhlIHRyaWNrLgotICAgICAqIEJ5IGRlZmF1bHQgQy1LZXJtaXQgNy4w IGFuZCBsYXRlciBzZW5kIGZpbGVzIGluIHRleHQgb3IgYmluYXJ5IG1vZGUKLSAgICAgICBieSBs b29raW5nIGF0IGVhY2ggZmlsZSB0byBzZWUgd2hpY2ggaXMgdGhlIGFwcHJvcHJpYXRlIG1vZGUu IFRvCi0gICAgICAgcmVzdG9yZSB0aGUgcHJldmlvdXMgYmVoYXZpb3IsIHB1dCBTRVQgVFJBTlNG RVIgTU9ERSBNQU5VQUwgYW5kIHRoZQotICAgICAgIGRlc2lyZWQgU0VUIEZJTEUgVFlQRSAoVEVY VCBvciBCSU5BUlkpIGluIHlvdXIgQy1LZXJtaXQKLSAgICAgICBpbml0aWFsaXphdGlvbiBmaWxl LgotICAgICAqIFRoZSBSRVNFTkQgYW5kIFJFR0VUIGNvbW1hbmRzIGF1dG9tYXRpY2FsbHkgc3dp dGNoIHRvIGJpbmFyeSBtb2RlOwotICAgICAgIHByZXZpb3VzbHkgaWYgUkVTRU5EIG9yIFJFR0VU IHdlcmUgYXR0ZW1wdGVkIHdoZW4gRklMRSBUWVBFIHdhcwotICAgICAgIFRFWFQsIHRoZXNlIGNv bW1hbmRzIHdvdWxkIGZhaWwgaW1tZWRpYXRlbHksIHdpdGggYSBtZXNzYWdlIHRlbGxpbmcKLSAg ICAgICB5b3UgdGhleSB3b3JrIG9ubHkgd2hlbiB0aGUgRklMRSBUWVBFIGlzIEJJTkFSWS4gTm93 IHRoZXkgc2ltcGx5IGRvCi0gICAgICAgdGhpcyBmb3IgeW91LgotICAgICAqIFNFVCBQUkVGSVhJ TkcgQ0FVVElPVVMgYW5kIE1JTklNQUwgbm93IGJvdGggcHJlZml4IGxpbmVmZWVkICgxMCBhbmQK LSAgICAgICAxMzgpIGluIGNhc2UgcmxvZ2luLCBzc2gsIG9yIGN1IGFyZSAiaW4gdGhlIG1pZGRs ZSIsIHNpbmNlCi0gICAgICAgb3RoZXJ3aXNlIDxMRj5+IG1pZ2h0IGFwcGVhciBpbiBLZXJtaXQg cGFja2V0cywgYW5kIHRoaXMgd291bGQKLSAgICAgICBjYXVzZSBybG9naW4sIHNzaCwgb3IgY3Ug dG8gZGlzY29ubmVjdCwgc3VzcGVuZCxlc2NhcGUgYmFjaywgb3IKLSAgICAgICBvdGhlcndpc2Ug d3JlY2sgdGhlIGZpbGUgdHJhbnNmZXIuIFhvbiBhbmQgWG9mZiBhcmUgbm93IGFsd2F5cwotICAg ICAgIHByZWZpeGVkIHRvbywgZXZlbiB3aGVuIFhvbi9Yb2ZmIGZsb3cgY29udHJvbCBpcyBub3Qg aW4gZWZmZWN0LAotICAgICAgIHNpbmNlIHVucHJlZml4aW5nIHRoZW0gaGFzIHByb3ZlbiBkYW5n ZXJvdXMgb24gVENQL0lQIGNvbm5lY3Rpb25zLgotICAgICAqIEluIFVOSVgsIFZNUywgV2luZG93 cywgYW5kIE9TLzIsIHRoZSBESVJFQ1RPUlkgY29tbWFuZCBpcyBidWlsdAotICAgICAgIGludG8g Qy1LZXJtaXQgaXRzZWxmIHJhdGhlciB0aGFuIGltcGxlbWVudGVkIGJ5IHJ1bm5pbmcgYW4gZXh0 ZXJuYWwKLSAgICAgICBjb21tYW5kIG9yIHByb2dyYW0uIFRoZSBidWlsdC1pbiBjb21tYW5kIG1p Z2h0IG5vdCBiZWhhdmUgdGhlIHdheQotICAgICAgIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBleHRl cm5hbCBvbmUgZGlkLCBidXQgbWFueSBvcHRpb25zIGFyZQotICAgICAgIGF2YWlsYWJsZSBmb3Ig Y3VzdG9taXphdGlvbi4gT2YgY291cnNlIHRoZSB1bmRlcmx5aW5nCi0gICAgICAgcGxhdGZvcm0t c3BlY2lmaWMgY29tbWFuZCBjYW4gc3RpbGwgYmUgYWNjZXNzZWQgd2l0aCAiISIsICJAIiwgb3IK LSAgICAgICAiUlVOIiB3aGVyZXZlciB0aGUgaW5zdGFsbGF0aW9uIGRvZXMgbm90IGZvcmJpZC4g SW4gVU5JWCwgdGhlICJscyIKLSAgICAgICBjb21tYW5kIGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3Rs eSBhcyAibHMiIGluIEMtS2VybWl0LgotICAgICAqIFNFTkQgPyBwcmludHMgYSBsaXN0IG9mIHN3 aXRjaGVzIHJhdGhlciB0aGFuIGEgbGlzdCBvZiBmaWxlbmFtZXMuCi0gICAgICAgSWYgeW91IHdh bnQgdG8gc2VlIGEgbGlzdCBvZiBmaWxlbmFtZXMsIHVzZSBhIChzeXN0ZW0tZGVwZW5kZW50KQot ICAgICAgIGNvbnN0cnVjdGlvbiBzdWNoIGFzIFNFTkQgLi8/IChmb3IgVU5JWCwgV2luZG93cywg b3IgT1MvMiksIFNFTkQKLSAgICAgICBbXT8gKFZNUyksIGV0Yy4KLSAgICAgKiBJbiBVTklYLCBP Uy05LCBhbmQgS2VybWl0IDk1LCB0aGUgd2lsZGNhcmQgY2hhcmFjdGVycyBpbiBwcmV2aW91cwot ICAgICAgIHZlcnNpb25zIHdlcmUgKiBhbmQgPy4gSW4gQy1LZXJtaXQgNy4wIHRoZXkgYXJlICos ID8sIFssIF0sIHssIGFuZAotICAgICAgIH0sIHdpdGggZGFzaCB1c2VkIGluc2lkZSBbXSdzIHRv IGRlbm90ZSByYW5nZXMgYW5kIGNvbW1hIHVzZWQKLSAgICAgICBpbnNpZGUge30gdG8gc2VwYXJh dGUgbGlzdCBlbGVtZW50cy4gSWYgeW91IG5lZWQgdG8gaW5jbHVkZSBhbnkgb2YKLSAgICAgICB0 aGVzZSBjaGFyYWN0ZXJzIGxpdGVyYWxseSBpbiBhIGZpbGVuYW1lLCBwcmVjZWRlIGVhY2ggb25l IHdpdGgKLSAgICAgICBiYWNrc2xhc2ggKFwpLgotICAgICAqIFNFVCBRVUlFVCB7IE9OLCBPRkYg fSBpcyBub3cgb24gdGhlIGNvbW1hbmQgc3RhY2ssIGp1c3QgbGlrZSBTRVQKLSAgICAgICBJTlBV VCBDQVNFLCBTRVQgQ09VTlQsIFNFVCBNQUNSTyBFUlJPUiwgZXRjLCBhcyBkZXNjcmliZWQgb24g cC40NTgKLSAgICAgICBvZiBbMzZdVXNpbmcgQy1LZXJtaXQsIDJuZCBFZGl0aW9uLiBUaGlzIGFs bG93cyBhbnkgbWFjcm8gb3IKLSAgICAgICBjb21tYW5kIGZpbGUgdG8gU0VUIFFVSUVUIE9OIG9y IE9GRiB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IHNhdmluZwotICAgICAgIGFuZCByZXN0b3Jpbmcg dGhlIGdsb2JhbCBRVUlFVCB2YWx1ZS4gRm9yIGV4YW1wbGUsIHRoaXMgbGV0cyB5b3UKLSAgICAg ICB3cml0ZSBhIHNjcmlwdCB0aGF0IHRyaWVzIFNFVCBMSU5FIG9uIGxvdHMgb2YgZGV2aWNlcyB1 bnRpbCBpdAotICAgICAgIGZpbmRzIG9uZSBmcmVlIHdpdGhvdXQgc3Bld2luZyBvdXQgbG9hZHMg b2YgZXJyb3IgbWVzc2FnZXMsIGFuZAotICAgICAgIGFsc28gd2l0aG91dCBkaXN0dXJiaW5nIHRo ZSBnbG9iYWwgUVVJRVQgc2V0dGluZywgd2hhdGV2ZXIgaXQgd2FzLgotICAgICAqIEJlY2F1c2Ug b2YgdGhlIG5ldyAiLiIgb3BlcmF0b3IgKHdoaWNoIGludHJvZHVjZXMgYXNzaWdubWVudHMpLAot ICAgICAgIG1hY3JvcyB3aG9zZSBuYW1lcyBiZWdpbiB3aXRoICIuIiBjYW4gbm90IGJlIGludm9r ZWQgImJ5IG5hbWUiLgotICAgICAgIEhvd2V2ZXIsIHRoZXkgc3RpbGwgY2FuIGJlIGludm9rZWQg d2l0aCBETyBvciBcZmV4ZWN1dGUoKS4KLSAgICAgKiBUaGUgc3ludGF4IG9mIHRoZSBFVkFMVUFU RSBjb21tYW5kIGhhcyBjaGFuZ2VkLiBUbyByZXN0b3JlIHRoZQotICAgICAgIHByZXZpb3VzIHN5 bnRheCwgdXNlIFNFVCBFVkFMVUFURSBPTEQuCi0gICAgICogVGhlIFx2KGRpcmVjdG9yeSkgdmFy aWFibGUgbm93IGluY2x1ZGVzIHRoZSB0cmFpbGluZyBkaXJlY3RvcnkKLSAgICAgICBzZXBhcmF0 b3I7IGluIHByZXZpb3VzIHJlbGVhc2VzIGl0IGRpZCBub3QuIFRoaXMgaXMgdG8gYWxsb3cKLSAg ICAgICBjb25zdHJ1Y3Rpb25zIHN1Y2ggYXM6Ci0gIGNkIFx2KGRpcilkYXRhLnRtcAotCi0gICAg ICAgdG8gd29yayBhY3Jvc3MgcGxhdGZvcm1zIHRoYXQgbWlnaHQgaGF2ZSBkaWZmZXJlbnQgZGly ZWN0b3J5Ci0gICAgICAgbm90YXRpb24sIHN1Y2ggYXMgVU5JWCwgV2luZG93cywgYW5kIFZNUy4K LSAgICAgKiBQcmlvciB0byBDLUtlcm1pdCA3LjAsIHRoZSBGTE9XLUNPTlRST0wgc2V0dGluZyB3 YXMgZ2xvYmFsIGFuZAotICAgICAgIHN0aWNreS4gSW4gQy1LZXJtaXQgNy4wLCB0aGVyZSBpcyBh biBhcnJheSBvZiBkZWZhdWx0IGZsb3ctY29udHJvbAotICAgICAgIHZhbHVlcyBmb3IgZWFjaCBr aW5kIG9mIGNvbm5lY3Rpb24sIHRoYXQgYXJlIGFwcGxpZWQgYXV0b21hdGljYWxseQotICAgICAg IGF0IFNFVCBMSU5FL1BPUlQvSE9TVCB0aW1lLiBUaHVzIGEgU0VUIEZMT1cgY29tbWFuZCBnaXZl biBiZWZvcmUKLSAgICAgICBTRVQgTElORS9QT1JUL0hPU1QgaXMgbGlrZWx5IHRvIGJlIHVuZG9u ZS4gVGhlcmVmb3JlIFNFVCBGTE9XIGNhbgotICAgICAgIGJlIGd1YXJhbnRlZWQgdG8gaGF2ZSB0 aGUgZGVzaXJlZCBlZmZlY3Qgb25seSBpZiBnaXZlbiBhZnRlciB0aGUKLSAgICAgICBTRVQgTElO RS9QT1JUL0hPU1QgY29tbWFuZC4KLSAgICAgKiBDaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uIHdv cmtzIGRpZmZlcmVudGx5IGluIHRoZSBUUkFOU01JVCBjb21tYW5kCi0gICAgICAgd2hlbiAoYSkg dGhlIGZpbGUgY2hhcmFjdGVyLXNldCBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIGxvY2FsIGVuZCBv ZgotICAgICAgIHRoZSB0ZXJtaW5hbCBjaGFyYWN0ZXItc2V0LCBvciAoYikgd2hlbiB0aGUgdGVy bWluYWwgY2hhcmFjdGVyLXNldAotICAgICAgIGlzIFRSQU5TUEFSRU5ULgotCi0xLjMuIEMtS2Vy bWl0IDguMAotCi0gICBUaGUgZm9sbG93aW5nIGluY29tcGF0aWJsZSBjaGFuZ2VzIHdlcmUgbWFk ZSBpbiBDLUtlcm1pdCA4LjA6Ci0gICAgICogQy1LZXJtaXQgbm93IGFjY2VwdHMgZG91YmxlcXVv dGVzIGluIG1vc3QgY29udGV4dHMgd2hlcmUgeW91Ci0gICAgICAgcHJldmlvdXNseSBoYWQgdG8g dXNlIGJyYWNlcyB0byBncm91cCBtdWx0aXBsZSB3b3JkcyBpbnRvIGEgc2luZ2xlCi0gICAgICAg ZmllbGQsIG9yIHRvIGZvcmNlIGluY2x1c2lvbiBvZiBsZWFkaW5nIG9yIHRyYWlsaW5nIGJsYW5r cy4gVGhpcwotICAgICAgIG1pZ2h0IGNhdXNlIHByb2JsZW1zIGluIGNvbnRleHRzIHdoZXJlIHlv dSB3YW50ZWQgdGhlIGRvdWJsZXF1b3RlCi0gICAgICAgY2hhcmFjdGVycyB0byBiZSB0YWtlbiBs aXRlcmFsbHkuIENvbnN1bHQgWzM3XVNlY3Rpb24gNSBvZiB0aGUKLSAgICAgICBbMzhdQy1LZXJt aXQgOC4wIFVwZGF0ZSBOb3RlcyBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi4KLSAgICAgKiBVc2lu ZyB0aGUgU0VUIEhPU1QgY29tbWFuZCB0byBtYWtlIEhUVFAgY29ubmVjdGlvbnMgaXMgbm8gbG9u Z2VyCi0gICAgICAgc3VwcG9ydGVkLiBJbnN0ZWFkLCB1c2UgdGhlIG5ldyBbMzldSFRUUCBPUEVO IGNvbW1hbmQuCi0KLTEuNC4gQy1LZXJtaXQgOS4wCi0KLSAgIFRoZSBbNDBdXGZzcGxpdCgpIGZ1 bmN0aW9uIGlzIGluY3JlZGlibHkgaGFuZHksIGl0IGNhbiBkbyBhbG1vc3QKLSAgIGFueXRoaW5n LCB1cCB0byBhbmQgaW5jbHVkaW5nIHBhcnNpbmcgYSBMSVNQIHByb2dyYW0gKHRoZSB1bmRlcmx5 aW5nCi0gICBjb2RlIGlzIHRoZSBiYXNpcyBvZiB0aGUgWzQxXVMtRXhwcmVzc2lvbiBpbnRlcnBy ZXRlcikuIEJ1dCBkaWQgeW91Ci0gICBldmVyIHRyeSB0byB1c2UgaXQgdG8gcGFyc2UgKHNheSkg YSBUYWItU2VwYXJhdGVkLUxpc3QgKFRTViBmaWxlKSBvcgotICAgQ29tbWEtU2VwYXJhdGVkLUxp c3QgKENTVik/IEl0IHdvcmtzIGFzIGV4cGVjdGVkIGFzIGxvbmcgYXMgdGhlIGRhdGEKLSAgIGNv bnRhaW5zIG9ubHkgNy1iaXQgY2hhcmFjdGVycy4gQnV0IGlmIHlvdXIgZGF0YSBjb250YWlucyAo c2F5KSBTcGFuaXNoCi0gICBvciBHZXJtYW4gb3IgUnVzc2lhbiB0ZXh0IHdyaXR0ZW4gaW4gYW4g OC1iaXQgY2hhcmFjdGVyIHNldCBzdWNoIGFzIElTTwotICAgODg1OS0xLCBldmVyeSA4LWJpdCBj aGFyYWN0ZXIgKGFueSB2YWx1ZSAxMjgtMjU1KSBpcyB0cmVhdGVkIGFzIGEgYnJlYWsKLSAgIGNo YXJhY3Rlci4gVGhpcyBpcyBmaXhlZCBpbiBDLUtlcm1pdCA5LjAgYnkgdHJlYXRpbmcgYWxsIDgt Yml0IGJ5dGVzIGFzCi0gICAiaW5jbHVkZSIgY2hhcmFjdGVycyByYXRoZXIgdGhhbiBicmVhayBj aGFyYWN0ZXJzLCBhIHRvdGFsIHJldmVyc2FsIG9mCi0gICBwYXN0IGJlaGF2aW9yLiBJIGRvbid0 IHRoaW5rIGl0IHdpbGwgYWZmZWN0IGFueW9uZSB0aG91Z2gsIGJlY2F1c2UgaWYKLSAgIHRoaXMg aGFkIGhhcHBlbmVkIHRvIGFueW9uZSwgSSB3b3VsZCBoYXZlIGhlYXJkIGFib3V0IGl0IQotCi0g ICBTaW5jZSBtb3N0IHN0YW5kYXJkIDgtYml0IGNoYXJhY3RlciBzZXRzIGhhdmUgY29udHJvbCBj aGFyYWN0ZXJzIGluCi0gICBwb3NpdGlvbnMgMTI4LTE2MCwgaXQgbWlnaHQgaGF2ZSBtYWRlIHNl bnNlIHRvIGtlZXAgMTI4LTE2MCBpbiB0aGUKLSAgIGJyZWFrIHNldCwgYnV0IHdpdGggdGhlIHBy b2xpZmVyYXRpb24gb2YgTWljcm9zb2Z0IFdpbmRvd3MgY29kZSBwYWdlcywKLSAgIHRoZXJlIGlz IG5vIHRlbGxpbmcgd2hpY2ggOC1iaXQgY2hhcmFjdGVyIGlzIGxpa2VseSB0byBiZSBzb21lIGtp bmQgb2YKLSAgIHRleHQsIGUuZy4gInNtYXJ0IHF1b3RlcyIgb3IgRWFzdCBFdXJvcGVhbiBvciBU dXJraXNoIGFjY2VudGVkIGxldHRlcnMuCi0KLTIuIFRIRSBDLUtFUk1JVCBDT01NQU5EIFBBUlNF UgotCi0gICBbIFs0Ml1Ub3AgXSBbIFs0M11Db250ZW50cyBdIFsgWzQ0XU5leHQgXSBbIFs0NV1Q cmV2aW91cyBdCi0KLSAgIFZhcmlvdXMgY29tbWFuZC1yZWxhdGVkIGxpbWl0cyBhcmUgc2hvd24g aW4gdGhlIGZvbGxvd2luZyB0YWJsZSwgaW4KLSAgIHdoaWNoIHRoZSBzYW1wbGUgdmFsdWVzIGFy ZSBmb3IgYSAibGFyZ2UgbWVtb3J5IG1vZGVsIiBidWlsZCBvZgotICAgQy1LZXJtaXQsIHR5cGlj YWwgZm9yIG1vZGVybiBwbGF0Zm9ybXMgKExpbnV4LCBTb2xhcmlzLCBBSVgsIFZNUywgZXRjKS4K LSAgIFlvdSBjYW4gc2VlIHRoZSB2YWx1ZXMgZm9yIHlvdXIgdmVyc2lvbiBvZiBLZXJtaXQgYnkg Z2l2aW5nIHRoZSBTSE9XCi0gICBGRUFUVVJFUyBjb21tYW5kLiBUaGUgbWF4aW11bSBsZW5ndGgg Zm9yIGEgS2VybWl0IGNvbW1hbmQgKENNREJMKSBhbHNvCi0gICBkZXRlcm1pbmVzIHRoZSBtYXhp bXVtIGxlbmd0aCBmb3IgYSBtYWNybyBkZWZpbml0aW9uLCBzaW5jZSBERUZJTkUgaXMKLSAgIGl0 c2VsZiBhIGNvbW1hbmQuIFRoZSBtYXhpbXVtIGxlbmd0aCBmb3IgYSB2YXJpYWJsZSBuYW1lIGlz IGJldHdlZW4gMjU2Ci0gICBhbmQgNDA5NiBjaGFyYWN0ZXJzLCBkZXBlbmRpbmcgb24gdGhlIHBs YXRmb3JtOyBmb3IgYXJyYXkgZGVjbGFyYXRpb25zCi0gICBhbmQgcmVmZXJlbmNlcywgdGhhdCBp bmNsdWRlcyB0aGUgc3Vic2NyaXB0LgotCi0gICBJdGVtIFN5bWJvbCBTYW1wbGUKLSAgIFZhbHVl IERlZmluaXRpb24KLSAgIE51bWJlciBvZiBjaGFyYWN0ZXJzIGluIGEgY29tbWFuZCBDTURCTCAz Mjc2MyBja3VjbWQuaAotICAgTnVtYmVyIG9mIGNoYXJzIGluIGEgZmllbGQgb2YgYSBjb21tYW5k ICAgIEFUTUJMIDEwMjM4IGNrdWNtZC5oCi0gICBOZXN0aW5nIGxldmVsIGZvciBjb21tYW5kIGZp bGVzIE1BWFRBS0UgNTQgICBja3V1c3IuaAotICAgTmVzdGluZyBsZXZlbCBmb3IgbWFjcm9zIE1B Q0xFVkVMIDEyOCBja3V1c3IuaAotICAgTmVzdGluZyBsZXZlbCBmb3IgRk9SIC8gV0hJTEUgbG9v cHMgRk9SREVQVEggMzIgY2t1dXNyLmgKLSAgIE51bWJlciBvZiBtYWNyb3MgTUFDX01BWCAxNjM4 NCBja3V1c3IuaAotICAgU2l6ZSBvZiBJTlBVVCBidWZmZXIgSU5QQlVGU0laIDQwOTYgY2t1dXNy LmgKLSAgIE1heGltdW0gZmlsZXMgdG8gbWF0Y2ggYSB3aWxkY2FyZCBNQVhXTEQgICAgMTAyNDAw IGNrY2RlYi5oCi0gICBGaWxlc3BlY3MgaW4gTVNFTkQgY29tbWFuZCBNU0VORE1BWCAxMDI0IGNr dXVzci5oCi0gICBMZW5ndGggZm9yIEdPVE8gdGFyZ2V0IGxhYmVsIExCTFNJWiA1MCBja3V1c3Iu aAotICAgXGZleGVjdXRlKCkgcmVjdXJzaW9uIGRlcHRoIGxpbWl0IENNRERFUCA2NCBja3VjbWQu aAotCi0gICBJZiB5b3UgbmVlZCB0byBkZWZpbmUgYSBtYWNybyB0aGF0IGlzIGxvbmdlciB0aGFu IENNREJMLCB5b3UgY2FuIGJyZWFrCi0gICB0aGUgbWFjcm8gdXAgaW50byBzdWItbWFjcm9zIG9y IHJld3JpdGUgdGhlIG1hY3JvIGFzIGEgY29tbWFuZCBmaWxlLiBJbgotICAgYSBwaW5jaCB5b3Ug Y2FuIGFsc28gcmVkZWZpbmUgQ01EQkwgYW5kIHJlY29tcGlsZSBDLUtlcm1pdC4gQWxsIG9mCi0g ICB0aGVzZSBudW1iZXJzIHJlcHJlc2VudCB0cmFkZW9mZnM6IHRoZSBiaWdnZXIgdGhlIG51bWJl ciwgdGhlIG1vcmUKLSAgICJwb3dlcmZ1bCIgS2VybWl0IGluIHRoZSBjb3JyZXNwb25kaW5nIGFy ZWEsIGJ1dCBhbHNvIHRoZSBiaWdnZXIgdGhlCi0gICBwcm9ncmFtIGltYWdlIGFuZCBwb3NzaWJs eSBkaXNrIGZvb3RwcmludCwgYW5kIHRoZSBsb25nZXIgaXQgdGFrZXMgdG8KLSAgIGxvYWQgYW5k IGluaXRpYWxpemUuCi0KLSAgIEluIHRoZSBpbnRlcmFjdGl2ZSBjb21tYW5kIHBhcnNlcjoKLQot ICAgICAqIEVNQUNTLSBvciBWSS1zdHlsZSBjb21tYW5kIGxpbmUgZWRpdGluZyBpcyBub3Qgc3Vw cG9ydGVkLgotICAgICAqIEVkaXRpbmcga2V5cyBhcmUgaGFyZHdpcmVkIChDdHJsLVUsIEN0cmwt VywgZXRjKS4KLQotICAgSWYgeW91IGludGVycnVwdCBDLUtlcm1pdCBiZWZvcmUgaXQgaGFzIGlz c3VlZCBpdHMgZmlyc3QgcHJvbXB0LCBpdAotICAgd2lsbCBleGl0LiBUaGlzIG1lYW5zIHRoYXQg eW91IGNhbm5vdCBpbnRlcnJ1cHQgZXhlY3V0aW9uIG9mIHRoZQotICAgaW5pdGlhbGl6YXRpb24g ZmlsZSwgb3Igb2YgYW4gImFwcGxpY2F0aW9uIGZpbGUiIChmaWxlIHdob3NlIG5hbWUgaXMKLSAg IGdpdmVuIGFzIHRoZSBmaXJzdCBjb21tYW5kLWxpbmUgYXJndW1lbnQpLCBvciBvZiBhbiBhbHRl cm5hdGl2ZQotICAgaW5pdGlhbGl6YXRpb24gZmlsZSAoIi15IGZpbGVuYW1lIiksIGFuZCBnZXQg dG8gdGhlIHByb21wdC4gVGhlcmUgaXMsCi0gICBob3dldmVyLCBvbmUgZXhjZXB0aW9uIHRvIHRo aXMgcnVsZTogeW91ICpjYW4qIGludGVycnVwdCBjb21tYW5kcyAtLQotICAgaW5jbHVkaW5nIFRB S0UgY29tbWFuZHMgLS0gZ2l2ZW4gaW4gdGhlICctQyAiY29tbWFuZCBsaXN0IicKLSAgIGNvbW1h bmQtbGluZSBhcmd1bWVudCBhbmQgLS0gaWYgdGhlcmUgd2VyZSBubyBhY3Rpb24gY29tbWFuZHMg YW1vbmcgdGhlCi0gICBjb21tYW5kLWxpbmUgYXJndW1lbnRzIC0tIHlvdSB3aWxsIGJlIHJldHVy bmVkIHRvIHRoZSBDLUtlcm1pdCBwcm9tcHQuCi0gICBTbywgZm9yIGV4YW1wbGUsIGlmIHlvdSB3 YW50IHRvIHN0YXJ0IEMtS2VybWl0IGluIHN1Y2ggYSB3YXkgdGhhdCBpdAotICAgZXhlY3V0ZXMg YSBjb21tYW5kIGZpbGUgYmVmb3JlIGlzc3VpbmcgaXRzIGZpcnN0IHByb21wdCwgYW5kIHlvdSBh bHNvCi0gICB3YW50IHRvIGJlIGFibGUgdG8gaW50ZXJydXB0IHRoZSBjb21tYW5kIGZpbGUgYW5k IGdldCB0byB0aGUgcHJvbXB0LAotICAgaW5jbHVkZSBhIFRBS0UgY29tbWFuZCBmb3IgdGhlIGRl c2lyZWQgY29tbWFuZCBpbiB0aGUgLUMgYXJndW1lbnQsIGZvcgotICAgZXhhbXBsZToKLQotICBr ZXJtaXQgLUMgInRha2UgZGlhbC5zY3IiCi0KLSAgIEF0IHRoZSBjb21tYW5kIHByb21wdCwgaWYg eW91IHVzZSB0aGUgYmFja3NsYXNoIChcKSBwcmVmaXggdG8gZW50ZXIgYQotICAgY29udHJvbCBj aGFyYWN0ZXIsIHNwYWNlLCBvciBxdWVzdGlvbiBtYXJrIGludG8gYSBjb21tYW5kIGxpdGVyYWxs eSwKLSAgIHRoZSBiYWNrc2xhc2ggZGlzYXBwZWFycyBhbmQgaXMgcmVwbGFjZWQgYnkgdGhlIHF1 b3RlZCBjaGFyYWN0ZXIuIElmIGl0Ci0gICB3YXMgYSBjb250cm9sIGNoYXJhY3RlciwgaXQgaXMg c2hvd24gYXMgYSBjaXJjdW1mbGV4ICheKS4gVGhpcyBhbGxvd3MKLSAgIGVkaXRpbmcgKGJhY2tz cGFjZSwgZGVsZXRlLCBDdHJsLVcpIHRvIHdvcmsgY29ycmVjdGx5IGV2ZW4gZm9yIGNvbnRyb2wK LSAgIGNoYXJhY3RlcnMuCi0KLSAgIFByaW90IHRvIEMtS2VybWl0IDguMCwgdGhlIG9ubHkgd2F5 IHRvIGluY2x1ZGUgYSBjb21tYSBsaXRlcmFsbHkgaW4gYQotICAgbWFjcm8gZGVmaW5pdGlvbiAt LSBhcyBvcHBvc2VkIHRvIGhhdmluZyBpdCBzZXBhcmF0ZSBjb21tYW5kcyB3aXRoaW4KLSAgIHRo ZSBkZWZpbml0aW9uIC0tIGlzIHRvIGVudGVyIGl0cyBBU0NJSSB2YWx1ZSAoNDQpIGluIGJhY2tz bGFzaAotICAgbm90YXRpb24sIGUuZy46Ci0KLSAgREVGSU5FIFJPV1MgUlVOIE1PREUgQ084MFx7 NDR9XCUxCi0KLSAgIEluIEMtS2VybWl0IDguMCB5b3UgY2FuIHVzZSBjb25zdHJ1Y3Rpb25zIGxp a2UgdGhpczoKLQotICBERUZJTkUgUk9XUyBSVU4gTU9ERSAiQ084MCxcJTEiCi0KLSAgIElmIHlv dSBxdW90ZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gYSBmaWxlbmFtZSAoZS5nLiBpbiB0aGUgU0VO RAotICAgY29tbWFuZCksIGZpbGVuYW1lIGNvbXBsZXRpb24gbWF5IHNlZW0gdG8gd29yayBpbmNv cnJlY3RseS4gRm9yCi0gICBleGFtcGxlLCBpZiB5b3UgaGF2ZSBhIGZpbGUgd2hvc2UgbmFtZSBp cyBhKmIgKHRoZSBuYW1lIHJlYWxseSBjb250YWlucwotICAgYW4gYXN0ZXJpc2spLCBhbmQgeW91 IHR5cGUgInNlbmQgYVxcKjxFU0M+IiwgdGhlICJiIiBkb2VzIG5vdCBhcHBlYXIsCi0gICBub3Ig d2lsbCBDdHJsLVIgcmVkaXNwbGF5IHRoZSBjb21wbGV0ZWQgbmFtZSBjb3JyZWN0bHkuIEJ1dCBp bnRlcm5hbGx5Ci0gICB0aGUgZmlsZSBuYW1lIGlzIHJlY29nbml6ZWQgYW55d2F5LgotCi0gICBR dWVzdGlvbi1tYXJrIGhlbHAgZG9lcyBub3Qgd29yayBkdXJpbmcgZXhlY3V0aW9uIG9mIGFuIEFT S1EgY29tbWFuZC4KLSAgIFRoZSBxdWVzdGlvbiBtYXJrcyBhcmUgc2ltcGx5IGFjY2VwdGVkIGFz IHRleHQuCi0KLSAgIEluIE9VVFBVVCBjb21tYW5kcyBvbmx5LCBcQiBzZW5kcyBhIEJSRUFLIHNp Z25hbCwgXEwgc2VuZHMgYSBMb25nIEJSRUFLCi0gICBzaWduYWwsIGFuZCBcTiBzZW5kcyBhIE5V TCAoQVNDSUkgMCkuIEJSRUFLIGFuZCBMb25nIEJSRUFLIGFyZSBzcGVjaWFsCi0gICBzaWduYWxz LCBub3QgY2hhcmFjdGVycywgYW5kIE5VTCBpcyBhIGNoYXJhY3RlciB0aGF0IG5vcm1hbGx5IGNh bm5vdCBiZQotICAgaW5jbHVkZWQgaW4gYSBDIHN0cmluZywgc2luY2UgaXQgaXMgdGhlIEMgc3Ry aW5nIHRlcm1pbmF0b3IuIElmIHlvdQotICAgcmVhbGx5IHdhbnQgdG8gb3V0cHV0IGEgYmFja3Ns YXNoIGZvbGxvd2VkIGJ5IGEgQiwgYW4gTCwgb3IgYW4gTiAoYXMgaXMKLSAgIG5lZWRlZCB0byBj b25maWd1cmUgY2VydGFpbiBtb2RlbXMsIGV0YyksIGRvdWJsZSB0aGUgYmFja3NsYXNoLCBlLmcu Ci0gICAib3V0cHV0IFxcQiIuIEluIEMtS2VybWl0IDcuMCBvciBsYXRlciwgeW91IGNhbiBkaXNh cm0gYW5kIHJlLWFybSB0aGUKLSAgIHNwZWNpYWwgT1VUUFVULWNvbW1hbmQgZXNjYXBlcyAoXEIs IFxMLCBhbmQgXE4pIHdpdGggU0VUIE9VVFBVVAotICAgU1BFQ0lBTC1FU0NBUEVTIHsgT0ZGLCBP TiB9LgotCi0gICBXaGVuIHVzaW5nIHRoZSBjb21tYW5kLWxpbmUgcHJvY2Vzc29yICgia2VybWl0 IC1sIC9kZXYvdHR5MDAgLWIgMTkyMDAiLAotICAgZXRjKSwgbm90ZSB0aGF0IGluIHNvbWUgY2Fz ZXMgdGhlIG9yZGVyIG9mIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucwotICAgbWFrZXMgYSBkaWZm ZXJlbmNlLCBjb250cmFyeSB0byB0aGUgZXhwZWN0YXRpb24gdGhhdCBvcmRlciBvZgotICAgY29t bWFuZC1saW5lIG9wdGlvbnMgc2hvdWxkIG5vdCBtYXR0ZXIuIEZvciBleGFtcGxlLCB0aGUgLWIg b3B0aW9uIG11c3QKLSAgIGJlIGdpdmVuIGFmdGVyIHRoZSAtbCBvcHRpb24gaWYgaXQgaXMgdG8g YWZmZWN0IHRoZSBkZXZpY2Ugc3BlY2lmaWVkIGluCi0gICB0aGUgLWwgb3B0aW9uLgotCi0zLiBN VUxUSVBMRSBTRVNTSU9OUwotCi0gICBbIFs0Nl1Ub3AgXSBbIFs0N11Db250ZW50cyBdIFsgWzQ4 XU5leHQgXSBbIFs0OV1QcmV2aW91cyBdCi0KLSAgIEMtS2VybWl0IDcuMCBhbmQgZWFybGllciBk byBub3Qgc3VwcG9ydCBtdWx0aXBsZSBzZXNzaW9ucy4gV2hlbiB5b3UgU0VUCi0gICBMSU5FIChv ciBTRVQgUE9SVCwgc2FtZSB0aGluZykgdG8gYSBuZXcgZGV2aWNlLCBvciBTRVQgSE9TVCB0byBh IG5ldwotICAgaG9zdCwgdGhlIHByZXZpb3VzIFNFVCBMSU5FIGRldmljZSBvciBuZXR3b3JrIGhv c3QgY29ubmVjdGlvbiBpcwotICAgY2xvc2VkLCByZXN1bHRpbmcgaW4gaGFuZ3VwIG9mIHRoZSBt b2RlbSBvciB0ZXJtaW5hdGlvbiBvZiB0aGUgbmV0d29yawotICAgY29ubmVjdGlvbi4gSW4gd2lu ZG93aW5nIGVudmlyb25tZW50cyBsaWtlIEhQLVZVRSwgTmVYVFNURVAsIFdpbmRvd3MsCi0gICBP Uy8yLCBldGMsIHlvdSBjYW4gcnVuIHNlcGFyYXRlIGNvcGllcyBvZiBLZXJtaXQgaW4gZGlmZmVy ZW50IHdpbmRvd3MKLSAgIHRvIGFjaGlldmUgbXVsdGlwbGUgc2Vzc2lvbnMuCi0KLSAgIFRvIGFj aGlldmUgbXVsdGlwbGUgc2Vzc2lvbnMgdGhyb3VnaCBhIHNpbmdsZSBzZXJpYWwgcG9ydCAoZS5n LiB3aGVuCi0gICBkaWFsaW5nIHVwKSwgeW91IGNhbiBpbnN0YWxsIFNMSVAgb3IgUFBQIG9uIHlv dXIgY29tcHV0ZXIgYW5kIHRoZW4gdXNlCi0gICBDLUtlcm1pdCdzIFRDUC9JUCBzdXBwb3J0IG92 ZXIgdGhlIFNMSVAgb3IgUFBQIGNvbm5lY3Rpb24sIGFzc3VtaW5nIHlvdQotICAgYWxzbyBoYXZl IFRDUC9JUCBuZXR3b3JraW5nIGluc3RhbGxlZCBvbiB5b3VyIGNvbXB1dGVyLgotCi0gICBDLUtl cm1pdCA4LjAgaGFzIHRoZSBzYW1lIHJlc3RyaWN0aW9uIG9uIFNFVCBMSU5FIGFuZCBTRVQgSE9T VAotICAgc2Vzc2lvbnM6IG9ubHkgb25lIHJlZ3VsYXIgc2Vzc2lvbiAoZGlhbG91dCwgVGVsbmV0 LCBldGMpIGNhbiBiZSBvcGVuCi0gICBhdCBhIHRpbWUuIEhvd2V2ZXIsIHZlcnNpb24gOC4wIGFk ZHMgdHdvIG5ldyBraW5kcyBvZiBzZXNzaW9uczogRlRQIGFuZAotICAgSFRUUDsgb25lIG9yIGJv dGggb2YgdGhlc2UgY2FuIGJlIG9wZW4gYXQgdGhlIHNhbWUgYXMgYSByZWd1bGFyCi0gICBzZXNz aW9uLgotCi00LiBORVRXT1JLIENPTk5FQ1RJT05TCi0KLSAgIFsgWzUwXVRvcCBdIFsgWzUxXUNv bnRlbnRzIF0gWyBbNTJdTmV4dCBdIFsgWzUzXVByZXZpb3VzIF0KLQotRlRQIENsaWVudCBCdWdz Ci0KLSAgIFRoZSBVbml4IEMtS2VybWl0IDguMC4yMDYgRlRQIGNsaWVudCBoYWQgdGhlIGZvbGxv d2luZyBidWdzIGF0IHRoZSB0aW1lCi0gICBtb3N0IG9mIHRoZSA4LjAuMjA2IGJpbmFyaWVzIHdl cmUgYnVpbHQgZm9yIHRoZSBDLUtlcm1pdCA4LjAgQ0RST006Ci0KLSAgICAxLiBGVFAgTUdFVCBm YWlscyB3aGVuIGRpcmVjdG9yeSBzZWdtZW50cyBjb250YWluIHdpbGRjYXJkcywgYXMgaW4KLSAg ICAgICAiZnRwIG1nZXQgKi9kYXRhLyouZGF0Ii4gV29yayBhcm91bmQgYnkgZG9pbmcgYSBzZXBh cmF0ZSBNR0VUIGZvcgotICAgICAgIGVhY2ggc291cmNlIGRpcmVjdG9yeS4KLSAgICAyLiBGVFAg TUdFVCBjYW4gZmFpbCBvciBwcm9kdWNlIHJhbmRvbSBzaWRlIGVmZmVjdHMgaWYgeW91IGhhdmUg YQotICAgICAgIFRNUERJUiBvciBDS19UTVAgZW52aXJvbm1lbnQgdmFyaWFibGUgZGVmaW5pdGlv biBpbiBlZmZlY3QsIG9yIGEKLSAgICAgICBTRVQgVEVNUC1ESVJFQ1RPUlkgdmFsdWUsIGxvbmdl ciB0aGFuIDcgY2hhcmFjdGVycy4gV29yayBhcm91bmQgYnkKLSAgICAgICBnaXZpbmcgYSBTRVQg VEVNUC1ESVJFQ1RPUlkgY29tbWFuZCB3aXRoIGEgc2hvcnQgdmFsdWUsIHN1Y2ggYXMKLSAgICAg ICAiL3RtcCIuCi0KLSAgIFRoZXNlIHR3byBidWdzIGFyZSBmaXhlZCBpbiB0aGUgc291cmNlIGNv ZGUgdGhhdCBpcyBpbmNsdWRlZCBvbiB0aGUKLSAgIENEUk9NLCBhbmQgYWxzbyBpbiBLZXJtaXQg OTUgMi4xLjEuIFlvdSBjYW4gdGVsbCBpZiBhIEMtS2VybWl0IDguMC4yMDYKLSAgIGJpbmFyeSBo YXMgdGhlc2UgZml4ZXMgYnkgdHlwaW5nIFNIT1cgVkVSU0lPTjsgaWYgaXQgc2F5cyAiRlRQIENs aWVudCwKLSAgIDguMC4yMDAsIDI0IE9jdCAyMDAyIiBpdCBoYXMgdGhlIGZpeGVzOyBpZiB0aGUg ZWRpdCBudW1iZXIgaXMgbGVzcyB0aGF0Ci0gICAyMDAsIGl0IGRvZXNuJ3QsIGluIHdoaWNoIGNh c2UgY2FuIGJ1aWxkIGEgbmV3IGJpbmFyeSBmcm9tIHRoZSBzb3VyY2UKLSAgIGNvZGUgKG9yIGNv bnRhY3QgdXMgYW5kIHdlJ2xsIHRyeSB0byBnZXQgZ2V0IG9uZSBmb3IgeW91KS4KLQotTWFraW5n IFRDUC9JUCBDb25uZWN0aW9ucyBDYW4gVGFrZSBhIExvbmcgVGltZQotCi0gICBUaGUgbW9zdCBm cmVxdWVudGx5IGFza2VkIHF1ZXN0aW9uIGluIG1hbnkgbmV3c2dyb3VwcyBpcyAiV2h5IGRvZXMg aXQKLSAgIHRha2Ugc3VjaCBhIGxvbmcgdGltZSB0byBtYWtlIGEgVGVsbmV0IGNvbm5lY3Rpb24g dG8gKG9yIGZyb20pIG15Ci0gICAoZS5nLikgTGludXggUEM/IiAodGhpcyBhcHBsaWVzIHRvIEtl cm1pdCBhcyB3ZWxsIGFzIHRvIHJlZ3VsYXIgVGVsbmV0Ci0gICBjbGllbnRzKToKLQotICAgIDEu IE1vc3QgVGVsbmV0IHNlcnZlcnMgcGVyZm9ybSByZXZlcnNlIEROUyBsb29rdXBzIG9uIHRoZSBj bGllbnQgZm9yCi0gICAgICAgc2VjdXJpdHkgYW5kL29yIGxvZ2dpbmcgcmVhc29ucy4gSWYgdGhl IFRlbG5ldCBjbGllbnQncyBob3N0IGNhbm5vdAotICAgICAgIGJlIGZvdW5kIGJ5IHRoZSBzZXJ2 ZXIncyBsb2NhbCBETlMgc2VydmVyLCB0aGUgRE5TIHJlcXVlc3QgZ29lcyBvdXQKLSAgICAgICB0 byB0aGUgSW50ZXJuZXQgYXQgbGFyZ2UsIGFuZCB0aGlzIGNhbiB0YWtlIHF1aXRlIHNvbWUgdGlt ZS4gVGhlCi0gICAgICAgc29sdXRpb24gdG8gdGhpcyBwcm9ibGVtIGlzIHRvIG1ha2Ugc3VyZSB0 aGF0IGJvdGggY2xpZW50IGFuZCBob3N0Ci0gICAgICAgYXJlIHJlZ2lzdGVyZWQgaW4gRE5TLgot ICAgIDIuIEMtS2VybWl0IGl0c2VsZiBwZXJmb3JtcyByZXZlcnNlIEROUyBsb29rdXBzIHVubGVz cyB5b3UgdGVsbCBpdCBub3QKLSAgICAgICB0by4gVGhpcyBpcyB0byBhbGxvdyBDLUtlcm1pdCB0 byBsZXQgeW91IGtub3cgd2hpY2ggaG9zdCBpdCBpcwotICAgICAgIGFjdHVhbGx5IGNvbm5lY3Rl ZCB0byBpbiBjYXNlIHlvdSBoYXZlIG1hZGUgYSBjb25uZWN0aW9uIHRvIGEgImhvc3QKLSAgICAg ICBwb29sIiAobXVsdGlob21lZCBob3N0KS4gWW91IGNhbiBkaXNhYmxlIEMtS2VybWl0J3MgcmV2 ZXJzZSBETlMKLSAgICAgICBsb29rdXAgd2l0aCBTRVQgVENQIFJFVkVSU0UtRE5TLUxPT0tVUCBP RkYuCi0gICAgMy4gQy1LZXJtaXQgNy4wIGFuZCBsYXRlciBzdHJpY3RseSBlbmZvcmNlIFRlbG5l dCBwcm90b2NvbCBydWxlcy4gT25lCi0gICAgICAgc3VjaCBydWxlIGlzIHRoYXQgY2VydGFpbiBu ZWdvdGlhdGlvbnMgbXVzdCBiZSByZXNwb25kZWQgdG8uIElmCi0gICAgICAgQy1LZXJtaXQgc2Vu ZHMgYSBzdWNoIGEgbmVnb3RpYXRpb24gYW5kIHRoZSBob3N0IGRvZXMgbm90IHJlc3BvbmQsCi0g ICAgICAgQy1LZXJtaXQgd2FpdHMgYSBsb25nIHRpbWUgZm9yIHRoZSByZXBseSAoaW4gY2FzZSB0 aGUgbmV0d29yayBpcwotICAgICAgIGNvbmdlc3RlZCBvciB0aGUgaG9zdCBpcyBzbG93KSwgYnV0 IGV2ZW50dWFsbHkgd2lsbCB0aW1lIG91dC4gVG8KLSAgICAgICBlbGltaW5hdGUgdGhlIHdhaXRz IChhbmQgdGhlcmVmb3JlIHJpc2sgcG9zc2libGUgcHJvdG9jb2wKLSAgICAgICBtaXNtYXRjaGVz IC0tIG9yIHdvcnNlIC0tIGJldHdlZW4gVGVsbmV0IGNsaWVudCBhbmQgc2VydmVyKSwgdGVsbAot ICAgICAgIEMtS2VybWl0IHRvIFNFVCBURUxORVQgV0FJVCBPRkYgKG9yIGluY2x1ZGUgdGhlIC9O T1dBSVQgc3dpdGNoIHdpdGgKLSAgICAgICB0aGUgVEVMTkVUIGNvbW1hbmQpLgotCi1UaGUgUmxv Z2luIENsaWVudAotCi0gICBJbiBtdWx0aXVzZXIgb3BlcmF0aW5nIHN5c3RlbXMgc3VjaCBhcyBV TklYIGFuZCBWTVMsIFRDUC9JUCBSbG9naW4KLSAgIGNvbm5lY3Rpb25zIGFyZSBhdmFpbGFibGUg b25seSB0byBwcml2aWxlZ2VkIHVzZXJzLCBzaW5jZSAibG9naW4iIGlzIGEKLSAgIHByaXZpbGVn ZWQgc29ja2V0LiBBc3N1bWluZyB5b3UgYXJlIGFsbG93ZWQgdG8gdXNlIGl0IGluIHRoZSBmaXJz dAotICAgcGxhY2UsIGl0IGlzIGxpa2VseSB0byBiZWhhdmUgZGlmZmVyZW50bHkgZGVwZW5kaW5n IG9uIHdoYXQgdHlwZSBvZgotICAgaG9zdCB5b3UgYXJlIHJsb2dnaW5nIGluIHRvLCBkdWUgdG8g dGVjaG5pY2FsIHJlYXNvbnMgaGF2aW5nIHRvIGRvIHdpdGgKLSAgIGNvbmZsaWN0aW5nIGludGVy cHJldGF0aW9ucyBvZiBSRkM3OTMgKE91dC1PZi1CYW5kIERhdGEpIGFuZCBSbG9naW4KLSAgIChS RkMxMTIyKS4uLiAiU3BlY2lmaWNhbGx5LCB0aGUgVENQIHVyZ2VudCBwb2ludGVyIGluIEJTRCBw b2ludHMgdG8gdGhlCi0gICBieXRlIGFmdGVyIHRoZSB1cmdlbnQgZGF0YSBieXRlLCBhbmQgYW4g UkZDLWNvbXBsaWFudCBUQ1AgdXJnZW50Ci0gICBwb2ludGVyIHBvaW50cyB0byB0aGUgdXJnZW50 IGRhdGEgYnl0ZS4gQXMgYSByZXN1bHQsIGlmIGFuIGFwcGxpY2F0aW9uCi0gICBzZW5kcyB1cmdl bnQgZGF0YSBmcm9tIGEgQlNELWNvbXBhdGlibGUgaW1wbGVtZW50YXRpb24gdG8gYW4KLSAgIFs1 NF1SRkMtMTEyMiBjb21wYXRpYmxlIGltcGxlbWVudGF0aW9uIHRoZW4gdGhlIHJlY2VpdmVyIHdp bGwgcmVhZCB0aGUKLSAgIHdyb25nIHVyZ2VudCBkYXRhIGJ5dGUgKGl0IHdpbGwgcmVhZCB0aGUg Ynl0ZSBsb2NhdGVkIGFmdGVyIHRoZSBjb3JyZWN0Ci0gICBieXRlIGluIHRoZSBkYXRhIHN0cmVh bSBhcyB0aGUgdXJnZW50IGRhdGEgYnl0ZSkuIiBSbG9naW4gcmVxdWlyZXMgdGhlCi0gICB1c2Ug b2YgT09CIGRhdGEgd2hpbGUgVGVsbmV0IGRvZXMgbm90LiBUaGVyZWZvcmUsIGl0IGlzIHBvc3Np YmxlIGZvcgotICAgVGVsbmV0IHRvIHdvcmsgYmV0d2VlbiBhbGwgc3lzdGVtcyB3aGlsZSBCU0Qg YW5kIFN5c3RlbSBWIFRDUC9JUAotICAgaW1wbGVtZW50YXRpb25zIGFyZSBhbG1vc3QgYWx3YXlz IGEgYmFkIG1peC4KLQotVGhlIFRlbG5ldCBDbGllbnQKLQotICAgT24gYSBUQ1AvSVAgVEVMTkVU IGNvbm5lY3Rpb24sIHlvdSBzaG91bGQgbm9ybWFsbHkgaGF2ZSBQQVJJVFkgc2V0IHRvCi0gICBO T05FIGFuZCAoZXhjZXB0IGluIFZNUyBDLUtlcm1pdCkgRkxPVy1DT05UUk9MIGFsc28gc2V0IHRv IE5PTkUuIElmCi0gICBmaWxlIHRyYW5zZmVyIGRvZXMgbm90IHdvcmsgd2l0aCB0aGVzZSBzZXR0 aW5ncyAoZm9yIGV4YW1wbGUsIGJlY2F1c2UKLSAgIHRoZSByZW1vdGUgVEVMTkVUIHNlcnZlciBv bmx5IGdpdmVzIGEgNy1iaXQgZGF0YSBwYXRoKSwgdXNlIFNFVCBQQVJJVFkKLSAgIFNQQUNFLiBE byBub3QgdXNlIFNFVCBQQVJJVFkgTUFSSywgRVZFTiwgb3IgT0REIG9uIGEgVEVMTkVUIGNvbm5l Y3Rpb24KLSAgIC0tIGl0IGludGVyZmVyZXMgd2l0aCBURUxORVQgcHJvdG9jb2wuCi0KLSAgIElm IGVjaG9pbmcgZG9lcyBub3Qgd29yayByaWdodCBhZnRlciBjb25uZWN0aW5nIHRvIGEgbmV0d29y ayBob3N0IG9yCi0gICBhZnRlciBkaWFsaW5nIHRocm91Z2ggYSBUQ1AvSVAgbW9kZW0gc2VydmVy LCBpdCBwcm9iYWJseSBtZWFucyB0aGF0IHRoZQotICAgVEVMTkVUIHNlcnZlciBvbiB0aGUgZmFy IGVuZCBvZiB0aGUgY29ubmVjdGlvbiBpcyBleGVjdXRpbmcgdGhlIFRFTE5FVAotICAgcHJvdG9j b2wgaW5jb3JyZWN0bHkuIEFmdGVyIGluaXRpYWxseSBjb25uZWN0aW5nIGFuZCBkaXNjb3Zlcmlu ZwotICAgaW5jb3JyZWN0IGVjaG9pbmcgKGNoYXJhY3RlcnMgYXJlIGVjaG9lZCB0d2ljZSwgb3Ig bm90IGF0IGFsbCksIGVzY2FwZQotICAgYmFjaywgZ2l2ZSB0aGUgYXBwcm9wcmlhdGUgU0VUIERV UExFWCBjb21tYW5kIChGVUxMIG9yIEhBTEYpLCBhbmQgdGhlbgotICAgQ09OTkVDVCBhZ2Fpbi4g Rm9yIGEgY29uc2lzdGVudGx5IG1pc2JlaGF2aW5nIGNvbm5lY3Rpb24sIHlvdSBjYW4KLSAgIGF1 dG9tYXRlIHRoaXMgcHJvY2VzcyBpbiBhIG1hY3JvIG9yIFRBS0UgZmlsZS4KLQotICAgVEVMTkVU IHNlc3Npb25zIGFyZSB0cmVhdGVkIGp1c3QgbGlrZSBzZXJpYWwgY29tbXVuaWNhdGlvbnMgc2Vz c2lvbnMgYXMKLSAgIGZhciBhcyAidGVybWluYWwgYnl0ZXNpemUiIGFuZCAiY29tbWFuZCBieXRl c2l6ZSIgYXJlIGNvbmNlcm5lZC4gSWYgeW91Ci0gICBuZWVkIHRvIHZpZXcgYW5kL29yIGVudGVy IDgtYml0IGNoYXJhY3RlcnMgZHVyaW5nIGEgVEVMTkVUIHNlc3Npb24sIHlvdQotICAgbXVzdCB0 ZWxsIEMtS2VybWl0IHRvIFNFVCBURVJNSU5BTCBCWVRFU0laRSA4LCBTRVQgQ09NTUFORCBCWVRF U0laRSA4LAotICAgYW5kIFNFVCBQQVJJVFkgTk9ORS4KLQotICAgSWYgeW91IFNFVCBURUxORVQg REVCVUcgT04gcHJpb3IgdG8gbWFraW5nIGEgY29ubmVjdGlvbiwgcHJvdG9jb2wKLSAgIG5lZ290 aWF0aW9ucyB3aWxsIGJlIGRpc3BsYXllZCBvbiB5b3VyIHNjcmVlbi4gWW91IGNhbiBhbHNvIGNh cHR1cmUKLSAgIHRoZW0gaW4gdGhlIGRlYnVnIGxvZyAoYWxvbmcgd2l0aCBldmVyeXRoaW5nIGVs c2UpIGFuZCB0aGVuIGV4dHJhY3QKLSAgIHRoZW0gZWFzaWx5LCBzaW5jZSBhbGwgVGVsbmV0IG5l Z290aWF0aW9ucyBsaW5lcyBiZWdpbiB3aXRoICh1cHBlcmNhc2UpCi0gICAiVEVMTkVUIi4KLQot VGhlIFNTSCBDbGllbnQKLQotICAgQy1LZXJtaXQgZG9lcyBub3QgaGF2ZSBpdHMgb3duIGJ1aWx0 LWluIFNTSCBjbGllbnQ7IGluc3RlYWQsIGluIHRoZQotICAgVW5peCB0cmFkaXRpb24sIHVzZXMg dGhlIGV4dGVybmFsIFNTSCBjbGllbnQgdG8gZG8gdGhlIFNTSCBwYXJ0LCBhbmQKLSAgIEtlcm1p dCBkb2VzIGl0cyB0aGluZyBvbiB0b3AgLS0gZmlsZSB0cmFuc2Zlciwgc2NyaXB0aW5nLCBldGMu IFVuZGVyCi0gICBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbiBp ZGVudGlmaWVkLCBpdCBzb21ldGltZXMKLSAgIGhhcHBlbnMgdGhhdCBhZnRlciBtYWtpbmcgYW4g U1NIIGNvbm5lY3Rpb24gZnJvbSBDLUtlcm1pdCwgbG9nZ2luZyBvdXQKLSAgIGZyb20gdGhlIHJl bW90ZSBob3N0LCBhbmQgcG9wcGluZyBiYWNrIHRvIHRoZSBsb2NhbCBDLUtlcm1pdCBwcm9ncmFt LAotICAgc3Vic2VxdWVudCBTU0ggY29tbWFuZHMgZmlsZSB3aXRoIGEgbWVzc2FnZSBsaWtlICJO ZXR3b3JrIHR5cGUgbm90Ci0gICBzdXBwb3J0ZWQiLiBTdGFydGluZyBhIG5ldyBjb3B5IG9mIEMt S2VybWl0IGlzIHRoZSB3b3JrYXJvdW5kLgotCi01LiBNT0RFTVMgQU5EIERJQUxJTkcKLQotICAg WyBbNTVdVG9wIF0gWyBbNTZdQ29udGVudHMgXSBbIFs1N11OZXh0IF0gWyBbNThdUHJldmlvdXMg XQotCi0gICBFeHRlcm5hbCBtb2RlbXMgYXJlIHJlY29tbWVuZGVkIGJlY2F1c2U6Ci0KLSAgICAg KiBUaGV5IGRvbid0IG5lZWQgYW55IHNwZWNpYWwgZHJpdmVycy4KLSAgICAgKiBUaGV5IGFyZSBs ZXNzIGxpa2VseSB0byBpbnRlcmZlcmUgd2l0aCBub3JtYWwgb3BlcmF0aW9uIG9mIHlvdXIKLSAg ICAgICBjb21wdXRlci4KLSAgICAgKiBZb3UgY2FuIHVzZSB0aGUgbGlnaHRzIGFuZCBzcGVha2Vy IHRvIHRyb3VibGVzaG9vdCBkaWFsaW5nLgotICAgICAqIFlvdSBjYW4gc2hhcmUgdGhlbSBhbW9u ZyBhbGwgdHlwZXMgb2YgY29tcHV0ZXJzLgotICAgICAqIFlvdSBjYW4gZWFzaWx5IHR1cm4gdGhl bSBvZmYgYW5kIG9uIHdoZW4gcG93ZXItY3ljbGluZyBzZWVtcwotICAgICAgIHdhcnJhbnRlZC4K LSAgICAgKiBUaGV5IGFyZSBtb3JlIGxpa2VseSB0byBoYXZlIG1hbnVhbHMuCi0KLSAgIE1vZGVt cyBjYW4gYmUgdXNlZCBieSBDLUtlcm1pdCBvbmx5IHdoZW4gdGhleSBhcmUgdmlzaWJsZSBhcyBv ciB0aHJvdWdoCi0gICBhIHJlZ3VsYXIgc2VyaWFsIHBvcnQgZGV2aWNlLiBDZXJ0YWluIG1vZGVt cyBjYW4gbm90IGJlIHVzZWQgaW4gdGhpcwotICAgbm9ybWFsIHdheSBvbiBtYW55IGtpbmRzIG9m IGNvbXB1dGVyczogV2lubW9kZW1zLCBSUEkgbW9kZW1zLAotICAgQ29udHJvbGxlcmxlc3MgbW9k ZW1zLCB0aGUgSUJNIE13YXZlLCBldGM7IGFsbCBvZiB0aGVzZSByZXF1aXJlIHNwZWNpYWwKLSAg IGRyaXZlcnMgdGhhdCBwZXJmb3JtIHNvbWUsIG1vc3QsIG9yIGFsbCBvZiB0aGUgbW9kZW0ncyBm dW5jdGlvbnMgaW4KLSAgIHNvZnR3YXJlLiBTdWNoIGRyaXZlcnMgYXJlIGdlbmVyYWxseSBOT1Qg YXZhaWxhYmxlIGluIFVOSVggb3Igb3RoZXIKLSAgIG5vbi1XaW5kb3dzIChvciBub24tT1MvMiwg aW4gdGhlIGNhc2Ugb2YgdGhlIE13YXZlKSBwbGF0Zm9ybXMuCi0KLSAgIEluIG9yZGVyIHRvIGRp YWwgYSBtb2RlbSwgQy1LZXJtaXQgbXVzdCBrbm93IHRoZSBtb2RlbSdzIHJlcGVydG9pcmUgb2YK LSAgIGNvbW1hbmRzIGFuZCByZXNwb25zZXMuIEVhY2ggbW9kZW0gbWFrZSBhbmQgbW9kZWwgaXMg bGlrZWx5IHRvIGhhdmUgYQotICAgZGlmZmVyZW50IHJlcGVydG9pcmUuIFNpbmNlIEtlcm1pdCBo YXMgbm8gd2F5IG9mIGtub3dpbmcgd2hpY2gga2luZCBvZgotICAgbW9kZW0gd2lsbCBiZSBkaWFs ZWQsIG5vcm1hbGx5IHlvdSBoYXZlIHRvIHRlbGwgaXQgd2l0aCBhIFNFVCBNT0RFTQotICAgVFlQ RSBjb21tYW5kLCBlLmcuOgotCi0gIHNldCBtb2RlbSB0eXBlIHVzcm9ib3RpY3MKLSAgc2V0IGxp bmUgL2Rldi9jdWEwCi0gIHNldCBzcGVlZCA1NzYwMAotICBkaWFsIDc2NTQzMjEKLQotICAgSW4g dGhlIGVhcmx5IGRheXMsIHRoZXJlIHdhcyBhIHdpZGUgdmFyaWV0eSBvZiBtb2RlbXMgYW5kIGNv bW1hbmQKLSAgIGxhbmd1YWdlcy4gTm93YWRheXMsIGFsbW9zdCBldmVyeSBtb2RlbSB1c2VzIHRo ZSBIYXllcyBBVCBjb21tYW5kIHNldAotICAgKGJ1dCB3aXRoIHNvbWUgZGlmZmVyZW5jZXMgaW4g dGhlIGRldGFpbHMpIGFuZCBpdHMgc3RhcnR1cAotICAgY29uZmlndXJhdGlvbiBpbmNsdWRlcyBl cnJvciBjb3JyZWN0aW9uLCBkYXRhIGNvbXByZXNzaW9uLCBhbmQgaGFyZHdhcmUKLSAgIChSVFMv Q1RTKSBmbG93IGNvbnRyb2wuIEFzIGxvbmcgYXMgQy1LZXJtaXQgaXMgY2FwYWJsZSBvZiBoYXJk d2FyZSBmbG93Ci0gICBjb250cm9sIChhcyBpdCBpcyBvbiBtYW55LCBidXQgbm90IGFsbCwgdGhl IHBsYXRmb3JtcyB3aGVyZSBpdCBydW5zLAotICAgc2luY2Ugc29tZSBvcGVyYXRpbmcgc3lzdGVt cyBkb24ndCBzdXBwb3J0IGl0KSwgdGhlIG1vZGVtIGNhbiBiZSBkaWFsZWQKLSAgIGltbWVkaWF0 ZWx5LCB3aXRob3V0IGxlbmd0aHkgY29uZmlndXJhdGlvbiBkaWFsb2dzLCBhbmQgaW4gZmFjdCB0 aGlzIGlzCi0gICB3aGF0IFNFVCBNT0RFTSBUWVBFIEdFTkVSSUMtSElHSC1TUEVFRCBkb2VzLiBJ biBDLUtlcm1pdCA4LjAsCi0gICBHRU5FUklDLUhJR0gtU1BFRUQgaGFzIGJlY29tZSB0aGUgZGVm YXVsdCBtb2RlbSB0eXBlLCBzbyBub3cgaXQgaXMKLSAgIHVzdWFsbHkgcG9zc2libGUgdG8gU0VU IExJTkUsIFNFVCBTUEVFRCwgYW5kIERJQUwgd2l0aG91dCBoYXZpbmcgdG8KLSAgIGlkZW50aWZ5 IHlvdXIgbW9kZW0uIElmIHRoaXMgZG9lc24ndCB3b3JrLCBvZiBjb3Vyc2UsIHRoZW4geW91IG1p Z2h0Ci0gICBoYXZlIHRvIGZhbGwgYmFjayB0byB0aGUgdHJhZGl0aW9uYWwgbWV0aG9kOiBHaXZl IGEgU0VUIE1PREVNIFRZUEUgZm9yCi0gICBhIHNwZWNpZmljIG1vZGVtIGZpcnN0LCB0aGVuIFNF VCBMSU5FLCBTRVQgU1BFRUQsIGFuZCBESUFMLgotCi0gICBBbiBpbXBvcnRhbnQgY2hhbmdlIGlu IEMtS2VybWl0IDYuMCBpcyB0aGF0IHdoZW4geW91IGdpdmUgYSBTRVQgTU9ERU0KLSAgIFRZUEUg Y29tbWFuZCB0byB0ZWxsIEtlcm1pdCB3aGF0IGtpbmQgb2YgbW9kZW0geW91IGhhdmUsIEtlcm1p dCBhbHNvCi0gICBzZXRzIGEgbnVtYmVyIG9mIG90aGVyIG1vZGVtLXJlbGF0ZWQgcGFyYW1ldGVy cyBhdXRvbWF0aWNhbGx5IGZyb20gaXRzCi0gICBpbnRlcm5hbCBtb2RlbSBkYXRhYmFzZS4gVGh1 cywgdGhlIG9yZGVyIGluIHdoaWNoIHlvdSBnaXZlCi0gICBtb2RlbS1yZWxhdGVkIGNvbW1hbmRz IGlzIHNpZ25pZmljYW50LCB3aGVyZWFzIGluIHByaW9yIHJlbGVhc2VzIHRoZXkKLSAgIGNvdWxk IGJlIGdpdmVuIGluIGFueSBvcmRlci4KLQotICAgSW4gcGFydGljdWxhciwgTU9ERU0gU1BFRUQt TUFUQ0hJTkcgaXMgc2V0IGFjY29yZGluZyB0byB3aGV0aGVyIHRoZQotICAgbW9kZW0gaXMga25v d24gdG8gYmUgY2FwYWJsZSBvZiBzcGVlZCBidWZmZXJpbmcuIFNFVCBNT0RFTSBUWVBFCi0gICBI QVlFUy0yNDAwIGF1dG9tYXRpY2FsbHkgdHVybnMgU1BFRUQtTUFUQ0hJTkcgT04sIGJlY2F1c2Ug d2hlbiB0aGUKLSAgIEhheWVzIDI0MDAgcmVwb3J0cyBhIHBhcnRpY3VsYXIgc3BlZWQgaW4gaXRz IENPTk5FQ1QgbWVzc2FnZSwgdGhhdAotICAgbWVhbnMgaXRzIGludGVyZmFjZSBzcGVlZCBoYXMg Y2hhbmdlZCB0byB0aGF0IHNwZWVkLCBhbmQgQy1LZXJtaXQncwotICAgbXVzdCBjaGFuZ2UgYWNj b3JkaW5nbHkgaWYgaXQgaXMgdG8gY29udGludWUgY29tbXVuaWNhdGluZy4gVGhpcyBtaWdodAot ICAgY2F1c2Ugc29tZSBjb25mdXNpb24gaWYgeW91IHVzZSAic2V0IG1vZGVtIHR5cGUgaGF5ZXMi IGZvciBkaWFsaW5nIGEKLSAgIG1vcmUgYWR2YW5jZWQgdHlwZSBvZiBtb2RlbS4KLQotICAgVGhl IG5ldyBkZWZhdWx0IGZvciBmbG93IGNvbnRyb2wgaXMgImF1dG8iLCBtZWFuaW5nICJkbyB0aGUg cmlnaHQgdGhpbmcKLSAgIGZvciBlYWNoIHR5cGUgb2YgY29ubmVjdGlvbiIuIFNvIChmb3IgZXhh bXBsZSkgaWYgeW91ciB2ZXJzaW9uIG9mCi0gICBDLUtlcm1pdCBzdXBwb3J0cyBTRVQgRkxPVyBS VFMvQ1RTIGFuZCB5b3VyIG1vZGVtIGFsc28gc3VwcG9ydHMKLSAgIFJUUy9DVFMsIHRoZW4gS2Vy bWl0IGF1dG9tYXRpY2FsbHkgc2V0cyBpdHMgZmxvdyBjb250cm9sIHRvIFJUUy9DVFMgYW5kCi0g ICBzZXQgbW9kZW0ncyBmbG93IGNvbnRyb2wgdG8gUlRTL0NUUyB0b28gYmVmb3JlIGF0dGVtcHRp bmcgdG8gdXNlIHRoZQotICAgbW9kZW0uCi0KLSAgIEZvciB0aGVzZSByZWFzb25zLCBkb24ndCBh c3N1bWUgdGhhdCAic2V0IG1vZGVtIHR5cGUgaGF5ZXMiIHNob3VsZCBiZQotICAgdXNlZCBmb3Ig YWxsIG1vZGVtcyB0aGF0IHVzZXMgdGhlIEhheWVzIEFUIGNvbW1hbmQgc2V0LiAic2V0IG1vZGVt IHR5cGUKLSAgIGhheWVzIiByZWFsbHkgZG9lcyBtZWFuIEhheWVzIDEyMDAgb3IgMjQwMCwgd2hp Y2ggaW4gdHVybiBtZWFucyBubwotICAgaGFyZHdhcmUgZmxvdyBjb250cm9sLCBhbmQgbm8gc3Bl ZWQgYnVmZmVyaW5nLiBUaGlzIGNob2ljZSB3aWxsIHJhcmVseQotICAgd29yayB3aXRoIGEgbW9k ZXJuIGhpZ2gtc3BlZWQgbW9kZW0uCi0KLTYuIERJQUxJTkcgSElOVFMgQU5EIFRJUFMKLQotICAg WyBbNTldVG9wIF0gWyBbNjBdQ29udGVudHMgXSBbIFs2MV1OZXh0IF0gWyBbNjJdUHJldmlvdXMg XQotCi0gICBJZiB5b3UgaGF2ZSBhIGhpZ2gtc3BlZWQsIGVycm9yLWNvcnJlY3RpbmcsIGRhdGEt Y29tcHJlc3NpbmcsCi0gICBzcGVlZC1idWZmZXJpbmcgbW9kZW0sIHlvdSBzaG91bGQgZml4IHRo ZSBtb2RlbSdzIGludGVyZmFjZSBzcGVlZCBhcwotICAgaGlnaCBhcyBwb3NzaWJsZSwgcHJlZmVy YWJseSAoYXQgbGVhc3QpIGZvdXIgdGltZXMgaGlnaGVyIHRoYW4gaXRzCi0gICBtYXhpbXVtIGNv bm5lY3Rpb24gKG1vZHVsYXRpb24pIHNwZWVkIHRvIGFsbG93IGNvbXByZXNzaW9uIHRvIHdvcmsg YXQKLSAgIGZ1bGwgYWR2YW50YWdlLiBJbiB0aGlzIHR5cGUgb2Ygc2V0dXAsIHlvdSBtdXN0IGFs c28gaGF2ZSBhbiBlZmZlY3RpdmUKLSAgIG1lYW5zIG9mIGZsb3cgY29udHJvbCBlbmFibGVkIGJl dHdlZW4gQy1LZXJtaXQgYW5kIHRoZSBtb2RlbSwKLSAgIHByZWZlcmFibHkgaGFyZHdhcmUgKFJU Uy9DVFMpIGZsb3cgY29udHJvbC4gT24gcGxhdGZvcm1zIHRoYXQgZG8gbm90Ci0gICBzdXBwb3J0 IGhhcmR3YXJlIGZsb3cgY29udHJvbCwgaXQgaXMgdXN1YWxseSBwb3NzaWJsZSB0byBzZWxlY3QK LSAgIHNvZnR3YXJlIGZsb3cgY29udHJvbCAoWG9uL1hvZmYpLCBhbmQgQy1LZXJtaXQgd2lsbCBk byBpdHMgYmVzdCB0byBzZXQKLSAgIHRoZSBtb2RlbSBmb3IgbG9jYWwgWG9uL1hvZmYgZmxvdyBj b250cm9sIHRvbyAoYnV0IHRoZW4sIG9mIGNvdXJzZSwKLSAgIEN0cmwtUyBhbmQgQ3RybC1RIGNo YXJhY3RlcnMgY2FuIG5vdCBiZSB0cmFuc21pdHRlZCBvbiB0aGUgY29ubmVjdGlvbikuCi0KLSAg IElmIHlvdSBhcmUgaGF2aW5nIHRyb3VibGUgZGlhbGluZyB5b3VyIG1vZGVtLCBTRVQgRElBTCBE SVNQTEFZIE9OIHRvCi0gICB3YXRjaCB0aGUgZGlhbGluZyBpbnRlcmFjdGlvbnMgYmV0d2VlbiBD LUtlcm1pdCBhbmQgeW91ciBtb2RlbS4gQ29uc3VsdAotICAgQ2hhcHRlcnMgMy00IG9mIFs2M11V c2luZyBDLUtlcm1pdCAoMm5kIEVkKSBmb3IgbW9kZW0tZGlhbGluZwotICAgdHJvdWJsZXNob290 aW5nIGluc3RydWN0aW9ucy4gVGhlIGZvbGxvd2luZyBzZWN0aW9ucyBvZmZlciBzb21lCi0gICBh ZGRpdGlvbmFsIGhpbnRzIGFuZCB0aXBzLgotCi02LjEuIFN5bnRheAotCi0gICBJZiB5b3Ugd2Fu dCB0byBkaWFsIGEgbnVtYmVyIHRoYXQgc3RhcnRzIHdpdGggIywgeW91J2xsIG5lZWQgdG8gcXVv dGUKLSAgIHRoZSAiIyIgY2hhcmFjdGVyIChhcyBcIyBvciBcezM1fSksIHNpbmNlIGl0IGlzIGFs c28gYSBjb21tZW50Ci0gICBpbnRyb2R1Y2VyOgotCi0gIEMtS2VybWl0PmRpYWwgIzk4NzY1NDIx LTEtMjEyLTU1NTEyMTIgICA7IExvb2tzIGxpa2UgYSBjb21tZW50Ci0gID9Zb3UgbXVzdCBzcGVj aWZ5IGEgbnVtYmVyIHRvIGRpYWwKLSAgQy1LZXJtaXQ+ZGlhbCBcIzk4NzY1NDIxLTEtMjEyLTU1 NTEyMTIgIDsgV29ya3MgT0sKLSAgQy1LZXJtaXQ+ZGlhbCA9Izk4NzY1NDIxLTEtMjEyLTU1NTEy MTIgIDsgVGhpcyB3b3JrcyB0b28KLQotICAgV2hlbiB1c2luZyBhIGRpYWxpbmcgZGlyZWN0b3J5 LCByZW1lbWJlciB3aGF0IGhhcHBlbnMgaWYgYSBuYW1lIGlzIG5vdAotICAgZm91bmQ6Ci0KLSAg Qy1LZXJtaXQ+ZGlhbCB4eXpjb3JwCi0gIExvb2t1cDogInh5emNvcnAiIC0gbm90IGZvdW5kIC0g ZGlhbGluZyBhcyBnaXZlbgotCi0gICBUaGlzIG5vcm1hbGx5IGRvZXMgbm8gaGFybSwgYnV0IHNv bWUgbW9kZW1zIG1pZ2h0IGJlaGF2ZSBzdHJhbmdlbHkgd2hlbgotICAgZ2l2ZW4gZGlhbCBzdHJp bmdzIHRoYXQgY29udGFpbiBjZXJ0YWluIGxldHRlcnMuIEZvciBleGFtcGxlLCBhIGNlcnRhaW4K LSAgIEdlcm1hbiBtb2RlbSB0cmVhdHMgYW55IGRpYWwgc3RyaW5nIHRoYXQgY29udGFpbnMgdGhl IGxldHRlciAicyIgYXMgYQotICAgY29tbWFuZCB0byBmZXRjaCBhIG51bWJlciBmcm9tIGl0cyBp bnRlcm5hbCBsaXN0LCBhbmQgcmVwbGllcyBPSyB0byB0aGUKLSAgIEFURCBjb21tYW5kLCB3aGlj aCBpcyBub3JtYWxseSBub3QgYSB2YWxpZCByZXNwb25zZSBleGNlcHQgZm9yIHBhcnRpYWwKLSAg IGRpYWxpbmcuIFRvIGF2b2lkIHRoaXMgc2l0dWF0aW9uLCB1c2U6Ci0KLSAgbG9va3VwIHh5emNv cnAKLSAgaWYgc3VjY2VzcyBkaWFsCi0KLTYuMi4gVGhlIENhcnJpZXIgU2lnbmFsCi0KLSAgIFJl bWVtYmVyOiBJbiBtYW55IEMtS2VybWl0IGltcGxlbWVudGF0aW9ucyAoZGVwZW5kaW5nIG9uIHRo ZSB1bmRlcmx5aW5nCi0gICBvcGVyYXRpbmcgc3lzdGVtIC0tIG1vc3RseSBXaW5kb3dzLCBPUy8y LCBhbmQgU3lzdGVtLVYtYmFzZWQgVU5JWAotICAgdmVyc2lvbnMsIGFuZCBpbiBDLUtlcm1pdCA3 LjAsIGFsc28gVk1TKSwgeW91IGNhbid0IENPTk5FQ1QgdG8gYSBtb2RlbQotICAgYW5kIHR5cGUg dGhlIG1vZGVtJ3MgZGlhbGluZyBjb21tYW5kIChsaWtlICJBVERUNzY1NDMyMSIpIG1hbnVhbGx5 LAotICAgdW5sZXNzIHlvdSBmaXJzdCB0ZWxsIEMtS2VybWl0IHRvOgotCi0gIFNFVCBDQVJSSUVS LVdBVENIIE9GRgotCi0gICBUaGlzIGlzIGJlY2F1c2UgKGluIHRoZXNlIGltcGxlbWVudGF0aW9u cyksIHRoZSBDT05ORUNUIGNvbW1hbmQKLSAgIHJlcXVpcmVzIHRoZSBtb2RlbSdzIENhcnJpZXIg RGV0ZWN0IChDRCkgc2lnbmFsIHRvIGJlIG9uLCBidXQgdGhlIENECi0gICBzaWduYWwgZG9lc24n dCBjb21lIG9uIHVudGlsIGFmdGVyIGRpYWxpbmcgaXMgY29tcGxldGUuIFRoaXMKLSAgIHJlcXVp cmVtZW50IGlzIHdoYXQgYWxsb3dzIEMtS2VybWl0IHRvIHBvcCBiYWNrIHRvIGl0cyBwcm9tcHQK LSAgIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBodW5nIHVwLiBTZWUgdGhl IGRlc2NyaXB0aW9uIG9mCi0gICBTRVQgQ0FSUklFUi1XQVRDSCBpbiAiVXNpbmcgQy1LZXJtaXQi LgotCi0gICBTaW1pbGFybHksIGlmIHlvdXIgZGlhbGVkIGNvbm5lY3Rpb24gZHJvcHMgd2hlbiBD QVJSSUVSLVdBVENIIGlzIHNldCB0bwotICAgQVVUTyBvciBPTiwgeW91IGNhbid0IENPTk5FQ1Qg YmFjayB0byB0aGUgKG5vdyBkaXNjb25uZWN0ZWQpIHNjcmVlbiB0bwotICAgc2VlIHdoYXQgbWln aHQgaGF2ZSBoYXBwZW5lZCB1bmxlc3MgeW91IGZpcnN0IFNFVCBDQVJSSUVSLVdBVENIIE9GRi4K LSAgIEJ1dCBzb21ldGltZXMgbm90IGV2ZW4gU0VUIENBUlJJRVItV0FUQ0ggT0ZGIHdpbGwgaGVs cCBpbiB0aGlzCi0gICBzaXR1YXRpb246IGNlcnRhaW4gcGxhdGZvcm1zIChmb3IgZXhhbXBsZSBV bml4d2FyZSAyLjEpLCBvbmNlIGNhcnJpZXIKLSAgIGRyb3BzLCB3b24ndCBsZXQgdGhlIGFwcGxp Y2F0aW9uIGRvIGkvbyB3aXRoIHRoZSBkZXZpY2UgYW55IG1vcmUuIEluCi0gICB0aGF0IGNhc2Us IGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgZGV2aWNlIGFnYWluLCB5b3UgaGF2ZSB0byBDTE9TRSBp dAotICAgYW5kIE9QRU4gaXQgYWdhaW4uIE9yIHlvdSBjYW4gaGF2ZSBLZXJtaXQgZG8gdGhpcyBm b3IgeW91IGF1dG9tYXRpY2FsbHkKLSAgIGJ5IHRlbGxpbmcgaXQgdG8gU0VUIENMT1NFLU9OLURJ U0NPTk5FQ1QgT04uCi0KLTYuMy4gRGlhbGluZyBhbmQgRmxvdyBDb250cm9sCi0KLSAgIERvbid0 IFNFVCBGTE9XIFJUUy9DVFMgaWYgeW91ciBtb2RlbSBpcyB0dXJuZWQgb2ZmLCBvciBpZiBpdCBp cyBub3QKLSAgIHByZXNlbnRpbmcgdGhlIENUUyBzaWduYWwuIE90aGVyd2lzZSwgdGhlIHNlcmlh bCBkZXZpY2UgZHJpdmVyIGNhbiBnZXQKLSAgIHN0dWNrIHdhaXRpbmcgZm9yIHRoaXMgc2lnbmFs IHRvIGFwcGVhci4KLQotICAgTW9zdCBtb2Rlcm4gbW9kZW1zIHN1cHBvcnQgUlRTL0NUUyAoaWYg dGhleSBzdXBwb3J0IGFueSBoYXJkd2FyZSBmbG93Ci0gICBjb250cm9sIGF0IGFsbCksIGJ1dCBz b21lIGNvbXB1dGVycyB1c2UgZGlmZmVyZW50IFJTLTIzMiBjaXJjdWl0cyBmb3IKLSAgIHRoZSBz YW1lIHB1cnBvc2VzLCBlLmcuIERUUiBhbmQgQ0QsIG9yIERUUiBhbmQgQ1RTLiBJbiBzdWNoIGNh c2VzLCB5b3UKLSAgIG1pZ2h0IGJlIGFibGUgdG8gbWFrZSB5b3VyIGNvbXB1dGVyIHdvcmsgd2l0 aCB5b3VyIG1vZGVtIGJ5Ci0gICBhcHByb3ByaWF0ZWx5IGNyb3NzLXdpcmluZyB0aGUgY2lyY3Vp dHMgaW4gdGhlIGNhYmxlIGNvbm5lY3RvciwgZm9yCi0gICBleGFtcGxlIHRoZSBjb21wdXRlcidz IERUUiB0byB0aGUgbW9kZW0ncyBSVFMsIGFuZCBtb2RlbSdzIENEIHRvIHRoZQotICAgY29tcHV0 ZXIncyBDVFMuIEhPV0VWRVIsIEMtS2VybWl0IGRvZXMgbm90IGtub3cgeW91IGhhdmUgZG9uZSB0 aGlzLiBTbwotICAgaWYgeW91IGhhdmUgKHNheSkgU0VUIEZMT1cgRFRSL0NELCBDLUtlcm1pdCB3 aWxsIG1ha2Ugbm8gYXR0ZW1wdCB0bwotICAgdGVsbCB0aGUgbW9kZW0gdG8gdXNlIFJUUy9DVFMu IFlvdSBwcm9iYWJseSBkaWQgdGhpcyB5b3Vyc2VsZiB3aGVuIHlvdQotICAgY29uZmlndXJlZCB0 aGUgbW9kZW0uCi0KLTYuNC4gVGhlIERpYWwgVGltZW91dAotCi0gICBJZiBpdCB0YWtlcyB5b3Vy IGNhbGwgbG9uZ2VyIHRvIGJlIGNvbXBsZXRlZCB0aGFuIHRoZSB0aW1lb3V0IGludGVydmFsCi0g ICB0aGF0IEMtS2VybWl0IGNhbGN1bGF0ZXMsIHlvdSBjYW4gdXNlIHRoZSBTRVQgRElBTCBUSU1F T1VUIGNvbW1hbmQgdG8KLSAgIG92ZXJyaWRlIEMtS2VybWl0J3MgdmFsdWUuIEJ1dCBiZXdhcmU6 IHRoZSBtb2RlbSBoYXMgaXRzIG93biB0aW1lb3V0Ci0gICBmb3IgY29tcGxldGluZyB0aGUgY2Fs bC4gSWYgaXQgaXMgYSBIYXllcy1saWtlIG1vZGVtLCBDLUtlcm1pdCBhZGp1c3RzCi0gICB0aGUg bW9kZW0ncyB2YWx1ZSB0b28gYnkgc2V0dGluZyByZWdpc3RlciBTNy4gQnV0IHRoZSBtYXhpbXVt IHZhbHVlIGZvcgotICAgUzcgbWlnaHQgYmUgc21hbGxlciB0aGFuIHRoZSB0aW1lIHlvdSBuZWVk ISBJbiB0aGF0IGNhc2UsIEMtS2VybWl0IHNldHMKLSAgIFM3IHRvIDAsIDI1NSwgb3Igb3RoZXIg KG1vZGVtLXNwZWNpZmljKSB2YWx1ZSB0byBzaWduaWZ5ICJubyB0aW1lb3V0Ii4KLSAgIElmIEtl cm1pdCBhdHRlbXB0cyB0byBzZXQgcmVnaXN0ZXIgUzcgdG8gYSB2YWx1ZSBoaWdoZXIgdGhhbiB5 b3VyCi0gICBtb2RlbSdzIG1heGltdW0sIHRoZSBtb2RlbSB3aWxsIHNheSAiRVJST1IiIGFuZCB5 b3Ugd2lsbCBnZXQgYSAiRmFpbHVyZQotICAgdG8gaW5pdGlhbGl6ZSBtb2RlbSIgZXJyb3IuIElu IHRoYXQgY2FzZSwgdXNlIFNFVCBESUFMIFRJTUVPVVQgdG8KLSAgIG92ZXJyaWRlIEMtS2VybWl0 J3MgY2FsY3VsYXRpb24gb2YgdGhlIHRpbWVvdXQgdmFsdWUgd2l0aCB0aGUgaGlnaGVzdAotICAg dmFsdWUgdGhhdCBpcyBsZWdhbCBmb3IgeW91ciBtb2RlbSwgZS5nLiA2MC4KLQotNi41LiBFc2Nh cGUgU2VxdWVuY2UgR3VhcmQgVGltZQotCi0gICBBICJUSUVTIiAoVGltZS1JbmRlcGVuZGVudCBF c2NhcGUgU2VxdWVuY2UpIG1vZGVtIGRvZXMgbm90IHJlcXVpcmUgYW55Ci0gICBndWFyZCB0aW1l IGFyb3VuZCBpdHMgZXNjYXBlIHNlcXVlbmNlLiBUaGUgZm9sbG93aW5nIHRleHQ6Ci0KLSAgKysr QVRIMAotCi0gICBpZiBzZW50IHRocm91Z2ggYSBUSUVTIG1vZGVtLCBmb3IgZXhhbXBsZSBiZWNh dXNlIHlvdSB3ZXJlIHVwbG9hZGluZwotICAgdGhpcyBmaWxlIHRocm91Z2ggaXQsIGNvdWxkIHBv cCB0aGUgbW9kZW0gYmFjayBpbnRvIGNvbW1hbmQgbW9kZSBhbmQKLSAgIG1ha2UgaXQgaGFuZyB1 cCB0aGUgY29ubmVjdGlvbi4gTGF0ZXIgdmVyc2lvbnMgb2YgdGhlIFRlbGViaXQgVDE2MDAgYW5k Ci0gICBUMzAwMCAodmVyc2lvbiBMQTMuMDFFIGZpcm13YXJlIGFuZCBsYXRlciksIGFuZCBhbGwg V29ybGRCbGF6ZXJzLCB1c2UKLSAgIFRJRVMuCi0KLSAgIEFsdGhvdWdoIHRoZSBwcm9iYWJpbGl0 eSBvZiAiKysrIiBhcHBlYXJpbmcgaW4gYSBLZXJtaXQgcGFja2V0IGlzCi0gICBtYXJrZWRseSBs b3dlciB0aGFuIHdpdGggbW9zdCBvdGhlciBwcm90b2NvbHMgKHNlZSB0aGUgWzY0XUZpbGUKLSAg IFRyYW5zZmVyIHNlY3Rpb24gYmVsb3cpLCBpdCBjYW4gc3RpbGwgaGFwcGVuIHVuZGVyIGNlcnRh aW4KLSAgIGNpcmN1bXN0YW5jZXMuIEl0IGNhbiBhbHNvIGhhcHBlbiB3aGVuIHVzaW5nIEMtS2Vy bWl0J3MgVFJBTlNNSVQKLSAgIGNvbW1hbmQuIElmIHlvdSBhcmUgdXNpbmcgYSBUZWxlYml0IFRJ RVMgbW9kZW0sIHlvdSBjYW4gY2hhbmdlIHRoZQotICAgbW9kZW0ncyBlc2NhcGUgc2VxdWVuY2Ug dG8gYW4gb3RoZXJ3aXNlIGxpdHRsZS11c2VkIGNvbnRyb2wgY2hhcmFjdGVyCi0gICBzdWNoIGFz IEN0cmwtXyAoQ29udHJvbC1VbmRlcnNjb3JlKToKLQotICBBVCBTMj0zMQotCi0gICBBIHNlcXVl bmNlIG9mIHRocmVlIGNvbnNlY3V0aXZlIEN0cmwtXyBjaGFyYWN0ZXJzIHdpbGwgbm90IGFwcGVh ciBpbiBhCi0gICBLZXJtaXQgcGFja2V0IHVubGVzcyB5b3UgZ28gdG8gZXh0cmFvcmRpbmFyeSBs ZW5ndGhzIHRvIGRlZmVhdCBtb3JlCi0gICB0aGFuIGEgZmV3IG9mIEtlcm1pdCdzIGJ1aWx0LWlu IHNhZmV0eSBtZWNoYW5pc21zLiBBbmQgaWYgeW91IGRvIHRoaXMsCi0gICB0aGVuIHlvdSBzaG91 bGQgYWxzbyB0dXJuIG9mZiB0aGUgbW9kZW0ncyBlc2NhcGUtc2VxdWVuY2UgcmVjb2duaXRpb24K LSAgIGFsdG9nZXRoZXI6Ci0KLSAgQVQgUzQ4PTAgUzI9MjU1Ci0KLSAgIEJ1dCB3aGVuIGVzY2Fw ZSBzZXF1ZW5jZSByZWNvZ25pdGlvbiBpcyB0dXJuZWQgb2ZmLCAibW9kZW0gaGFuZ3VwIgotICAg KDxwYXVzZT4rKys8cGF1c2U+QVRIMDxDUj4pIHdpbGwgbm90IHdvcmssIHNvIHlvdSBzaG91bGQg YWxzbyBTRVQgTU9ERU0KLSAgIEhBTkdVUCBSUzIzMi1TSUdOQUwgKHJhdGhlciB0aGVuIE1PREVN LUNPTU1BTkQpLgotCi02LjYuIEFkYXB0aXZlIERpYWxpbmcKLQotICAgU29tZSBtb2RlbXMgaGF2 ZSBhIGZlYXR1cmUgY2FsbGVkIGFkYXB0aXZlIGRpYWxpbmcuIFdoZW4gdGhleSBhcmUgdG9sZAot ICAgdG8gZGlhbCBhIG51bWJlciB1c2luZyBUb25lIGRpYWxpbmcsIHRoZXkgY2hlY2sgdG8gbWFr ZSBzdXJlIHRoYXQKLSAgIGRpYWx0b25lIGhhcyBnb25lIGF3YXkgYWZ0ZXIgZGlhbGluZyB0aGUg Zmlyc3QgZGlnaXQuIElmIGl0IGhhcyBub3QsCi0gICB0aGUgbW9kZW0gYXNzdW1lcyB0aGUgcGhv bmUgbGluZSBkb2VzIG5vdCBhY2NlcHQgVG9uZSBkaWFsaW5nIGFuZCBzbwotICAgc3dpdGNoZXMg dG8gUHVsc2UuIFdoZW4gZGlhbGluZyBvdXQgZnJvbSBhIFBCWCwgdGhlcmUgaXMgYWxtb3N0IGFs d2F5cwotICAgYSBzZWNvbmRhcnkgZGlhbHRvbmUuIFR5cGljYWxseSB5b3UgdGFrZSB0aGUgcGhv bmUgb2ZmLWhvb2ssIGdldCB0aGUKLSAgIFBCWCBkaWFsdG9uZSwgZGlhbCAiOSIgdG8gZ2V0IGFu IG91dHNpZGUgbGluZSwgYW5kIHRoZW4gZ2V0IHRoZSBwaG9uZQotICAgY29tcGFueSdzIGRpYWx0 b25lLiBJbiBhIHNpdHVhdGlvbiBsaWtlIHRoaXMsIHlvdSBuZWVkIHRvIHRlbGwgdGhlCi0gICBt b2RlbSB0byBleHBlY3QgdGhlIHNlY29uZGFyeSBkaWFsdG9uZS4gT24gSGF5ZXMgYW5kIGNvbXBh dGlibGUgbW9kZW1zLAotICAgdGhpcyBpcyBkb25lIGJ5IHB1dHRpbmcgYSAiVyIgaW4gdGhlIGRp YWwgc3RyaW5nIGF0IHRoZSBhcHByb3ByaWF0ZQotICAgcGxhY2UuIEZvciBleGFtcGxlLCB0byBk aWFsIDkgZm9yIGFuIG91dHNpZGUgbGluZSwgYW5kIHRoZW4gNzY1NDMyMSwKLSAgIHVzZSBBVERU OVc3NjU0MzIxOgotCi0gIFNFVCBQQlgtT1VUU0lERS1QUkVGSVggOVcKLQotICAgKHJlcGxhY2Ug IjkiIHdpdGggd2hhdGV2ZXIgeW91ciBQQlgncyBvdXRzaWRlLWxpbmUgcHJlZml4IGlzKS4KLQot Ni43LiBUaGUgQnVzeSBTaWduYWwKLQotICAgU29tZSBwaG9uZSBjb21wYW5pZXMgYXJlIGVsaW1p bmF0aW5nIHRoZSBidXN5IHNpZ25hbC4gSW5zdGVhZCwgdGhleQotICAgaXNzdWUgYSB2b2ljZSBt ZXNzYWdlIHN1Y2ggYXMgInByZXNzIDEgdG8gYXV0b21hdGljYWxseSByZWRpYWwgdW50aWwKLSAg IHRoZSBudW1iZXIgYW5zd2Vycywgb3IuLi4iLiBPYnZpb3VzbHkgdGhpcyBpcyBhIGRpc2FzdGVy IGZvciBtb2RlbQotICAgY2FsbHMuIElmIHlvdXIgc2VydmljZSBoYXMgdGhpcyBmZWF0dXJlLCB0 aGVyZSdzIG5vdGhpbmcgS2VybWl0IGNhbiBkbwotICAgYWJvdXQgaXQuIFlvdXIgbW9kZW0gd2ls bCByZXNwb25kIHdpdGggTk8gQ0FSUklFUiAoYWZ0ZXIgYSBsb25nIHRpbWUpCi0gICByYXRoZXIg dGhhbiBCVVNZIChpbW1lZGlhdGVseSksIGFuZCBLZXJtaXQgd2lsbCBkZWNsYXJlIHRoZSBjYWxs IGEKLSAgIGZhaWx1cmUsIHJhdGhlciB0aGFuIHRyeWluZyB0byByZWRpYWwgdGhlIHNhbWUgbnVt YmVyLgotCi02LjguIEhhbmdpbmcgVXAKLQotICAgVGhlcmUgYXJlIHR3byB3YXlzIHRvIGhhbmcg dXAgYSBtb2RlbTogYnkgdHVybmluZyBvZmYgdGhlIHNlcmlhbCBwb3J0J3MKLSAgIERUUiBzaWdu YWwgKFNFVCBNT0RFTSBIQU5HVVAtTUVUSE9EIFJTMjMyLVNJR05BTCkgb3Igc2VuZGluZyB0aGUg bW9kZW0KLSAgIGl0cyBlc2NhcGUgc2VxdWVuY2UgZm9sbG93ZWQgYnkgaXRzIGhhbmd1cCBjb21t YW5kIChTRVQgTU9ERU0KLSAgIEhBTkdVUC1NRVRIT0QgTU9ERU0tQ09NTUFORCkuIElmIG9uZSBk b2Vzbid0IHdvcmssIHRyeSB0aGUgb3RoZXIuIElmCi0gICB0aGUgYXV0b21hdGljIGhhbmd1cCBw ZXJmb3JtZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhIERJQUwgY29tbWFuZAotICAgY2F1c2VzIHRy b3VibGUsIHRoZW4gU0VUIERJQUwgSEFOR1VQIE9GRi4KLQotICAgVGhlIEhBTkdVUCBjb21tYW5k IGhhcyBubyBlZmZlY3Qgd2hlbiBDLUtlcm1pdCBpcyBpbiByZW1vdGUgbW9kZS4gVGhpcwotICAg aXMgb24gcHVycG9zZS4gSWYgQy1LZXJtaXQgY291bGQgaGFuZyB1cCBpdHMgb3duIGNvbnRyb2xs aW5nIHRlcm1pbmFsLAotICAgdGhpcyB3b3VsZCAoYSkgbW9zdCBsaWtlbHkgbGVhdmUgYmVoaW5k IHpvbWJpZSBwcm9jZXNzZXMsIGFuZCAoYikgcG9zZQotICAgYSBzZWN1cml0eSByaXNrLgotCi0g ICBJZiB5b3UgRElBTCBhIG1vZGVtLCBkaXNjb25uZWN0LCB0aGVuIFNFVCBIT1NUIG9yIFRFTE5F VCwgYW5kIHRoZW4KLSAgIEhBTkdVUCwgS2VybWl0IHNlbmRzIHRoZSBtb2RlbSdzIGhhbmd1cCBj b21tYW5kLCBzdWNoIGFzICIrKytBVEhPIi4KLSAgIFRoZXJlIGlzIG5vIGdvb2Qgd2F5IHRvIGF2 b2lkIHRoaXMsIGJlY2F1c2UgdGhpcyBjYXNlIGNhbid0IHJlbGlhYmx5IGJlCi0gICBkaXN0aW5n dWlzaGVkIGZyb20gdGhlIGNhc2UgaW4gd2hpY2ggdGhlIHVzZXIgZG9lcyBTRVQgSE9TVAotICAg dGVybWluYWwtc2VydmVyLCBTRVQgTU9ERU0gVFlQRSBuYW1lLCBESUFMLiBJbiBib3RoIGNhc2Vz IHdlIGhhdmUgYQotICAgdmFsaWQgbW9kZW0gdHlwZSBzZWxlY3RlZCBhbmQgd2UgaGF2ZSBhIG5l dHdvcmsgY29ubmVjdGlvbi4gSWYgeW91IHdhbnQKLSAgIHRvIERJQUwgYW5kIHRoZW4gbGF0ZXIg bWFrZSBhIHJlZ3VsYXIgbmV0d29yayBjb25uZWN0aW9uLCB5b3Ugd2lsbCBoYXZlCi0gICB0byBT RVQgTU9ERU0gVFlQRSBOT05FIG9yIFNFVCBESUFMIEhBTkdVUCBPRkYgdG8gYXZvaWQgdGhpcyBw aGVub21lbm9uLgotCi03LiBURVJNSU5BTCBTRVJWRVJTCi0KLSAgIFsgWzY1XVRvcCBdIFsgWzY2 XUNvbnRlbnRzIF0gWyBbNjddTmV4dCBdIFsgWzY4XVByZXZpb3VzIF0KLQotICAgV2F0Y2ggb3V0 IGZvciB0ZXJtaW5hbCBzZXJ2ZXIncyBlc2NhcGUgY2hhcmFjdGVyIC0tIHVzdWFsbHkgYSBjb250 cm9sCi0gICBjaGFyYWN0ZXIgc3VjaCBhcyBDdHJsLUNpcmN1bWZsZXggKEN0cmwtXikuIERvbid0 IHVucHJlZml4IGl0IGluCi0gICBLZXJtaXQhCi0KLSAgIENpc2NvcyAtLSBtdXN0IG9mdGVuIGJl IHRvbGQgdG8gInRlcm1pbmFsIGRvd25sb2FkIi4uLiBDaXNjbyBBU00gbW9kZWxzCi0gICBkb24n dCBoYXZlIGhhcmR3YXJlIGZsb3cgY29udHJvbCBpbiBib3RoIGRpcmVjdGlvbnMuCi0KLSAgIE1h bnkgdGVybWluYWwgc2VydmVycyBvbmx5IGdpdmUgeW91IGEgNy1iaXQgY29ubmVjdGlvbiwgc28g aWYgeW91IGNhbid0Ci0gICBtYWtlIGl0IDgtYml0LCB0ZWxsIEtlcm1pdCB0byAic2V0IHBhcml0 eSBzcGFjZSIuCi0KLSAgIFRoZSBmb2xsb3dpbmcgc3RvcnksIHJlZ2FyZGluZyB0cm91YmxlIHRy YW5zZmVycmluZyA4LWJpdCBmaWxlcyB0aHJvdWdoCi0gICBhIHJldmVyc2UgdGVybWluYWwgc2Vy dmVyLCB3YXMgY29udHJpYnV0ZWQgYnkgYW4gQW5uZXggdGVybWluYWwgc2VydmVyCi0gICB1c2Vy OgotCi0gICAgIFVzaW5nIEMtS2VybWl0IG9uIGFuIEhQIDkwMDAgNzEyLzgwIHJ1bm5pbmcgdGhl IEhQLVVYIDEwLjAwCi0gICAgIG9wZXJhdGluZyBzeXN0ZW0uIFRoZSBIUCB3YXMgY29ubmVjdGVk IHRvIGEgWHlsb2dpY3MgQW5uZXgKLSAgICAgTUlDUk8tRUxTLVVYIFI3LjEgOCBwb3J0IHRlcm1p bmFsIHNlcnZlciB2aWEgZXRoZXJuZXQuIE9uIHRoZSBzZWNvbmQKLSAgICAgcG9ydCBvZiB0aGUg dGVybWluYWwgc2VydmVyIGlzIGFuIEFUJlQgUGFyYWR5bmUgMzgxMCBtb2RlbSwgd2hpY2ggaXMK LSAgICAgY29ubmVjdGVkIHRvIGEgdGVsZXBob25lIGxpbmUuIFRoZXJlIGlzIGEgcHJvZ3JhbSB3 aGljaCBydW5zIG9uIHRoZQotICAgICBIUCB0byBlc3RhYmxpc2ggYSBUZWxuZXQgY29ubmVjdGlv biBiZXR3ZWVuIGEgc2VyaWFsIGxpbmUgb24gdGhlCi0gICAgIEFubmV4IGFuZCBhIGNoYXJhY3Rl ciBzcGVjaWFsIGZpbGUgb24gdGhlIEhQICgvZGV2IGZpbGUpLiBUaGlzIGlzIGFuCi0gICAgIEFu bmV4IHNwZWNpZmljIHByb2dyYW0gY2FsbGVkIHJ0ZWxuZXQgKHJldmVyc2UgdGVsbmV0KSBhbmQg aXMKLSAgICAgcHJvdmlkZWQgd2l0aCB0aGUgdGVybWluYWwgc2VydmVyIHNvZnR3YXJlLiBUaGUg cnRlbG5ldCB1dGlsaXR5IHJ1bnMKLSAgICAgb24gdG9wIG9mIHRoZSBwc2V1ZG8tdGVybWluYWwg ZmFjaWxpdHkgcHJvdmlkZWQgYnkgVU5JWC4gSXQgY3JlYXRlcwotICAgICBob3N0LW9yaWdpbmF0 ZWQgY29ubmVjdGlvbnMgdG8gZGV2aWNlcyBhdHRhY2hlZCBvdCBBbm5leCBzZXJpYWwKLSAgICAg cG9ydHMuIFRoZXJlIGFyZSBzZXZlcmFsIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgdG8gYmUgc3Bl Y2lmaWVkIHdpdGgKLSAgICAgdGhpcyBwcm9ncmFtOiB0aGUgSVAgYWRkcmVzcyBvZiB0aGUgdGVy bWluYWwgc2VydmVyLCB0aGUgbnVtYmVyIG9mCi0gICAgIHRoZSBwb3J0IHRvIGF0dGFjaCB0bywg YW5kIHRoZSBuYW1lIG9mIHRoZSBwc2V1ZG8tZGV2aWNlIHRvIGNyZWF0ZS4KLSAgICAgSW4gYWRk aXRpb24gdG8gdGhlc2UgdGhlcmUgYXJlIG9wdGlvbnMgdG8gdGVsbCBydGVsbmV0IGhvdyB0bwot ICAgICBvcGVyYXRlIG9uIHRoZSBjb25uZWN0OiAtYiByZXF1ZXN0cyBuZWdvdGlhdGlvbiBmb3Ig VGVsbmV0IGJpbmFyeQotICAgICBtb2RlLCAtZCB0dXJucyBvbiBzb2NrZXQtbGV2ZSBkZWJ1Z2dp bmcsIC1mIGVuYWJsZXMgImNvbm5lY3Qgb24gdGhlCi0gICAgIGZseSIgbW9kZSwgLXIgcmVtb3Zl cyB0aGUgZGV2aWNlLW5hbWUgaWYgaXQgYWxyZWFkeSBleGlzdHMsIGV0Yy4gVGhlCi0gICAgIG1v c3QgaW1wb3J0YW50IG9mIHRoZXNlIHRvIGJlIHNwZWNpZmllZCB3aGVuIHVzaW5nIDggZGF0YSBi aXRzIGFuZAotICAgICBubyBwYXJpdHksIGFzIHdlIGZvdW5kIG91dCwgd2FzIHRoZSAtdCBvcHRp b24uIFRoaXMgY3JlYXRlcyBhCi0gICAgIHRyYW5zcGFyZW50IFRDUCBjb25uZWN0aW9uIHRvIHRo ZSB0ZXJtaW5hbCBzZXJ2ZXIuIEFnYWluLCB3aGF0IHdlCi0gICAgIGFzc3VtZWQgdG8gYmUgaGFw cGVuaW5nIHdhcyB0aGF0IHRoZSBydGVsbmV0IHByb2dyYW0gZW5jb3VudGVyZWQgYQotICAgICBj aGFyYWN0ZXIgc2VxdWVuY2Ugc3BlY2lhbCB0byBpdHNlbGYgYW5kIHRoZW4gImVhdGluZyIgdGhv c2Uga2VybWl0Ci0gICAgIHBhY2tldHMuIEkgdGhpbmsgdGhpcyBpcyBhbGwgb2YgdGhlIGluZm9y bWF0aW9uIEkgY2FuIGdpdmUgeW91IG9uCi0gICAgIHRoZSBjb25maWd1cmF0aW9uLCBzaG9ydCBv ZiB0aGUgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcG9ydCBvbgotICAgICB0aGUgdGVybWlu YWwgc2VydmVyLgotCi0gICBIb3cgdG8gRElBTCBmcm9tIGEgVENQL0lQIHJldmVyc2UgdGVybWlu YWwgc2VydmVyIChtb2RlbSBzZXJ2ZXIpOgotCi0gICAgMS4gKG9ubHkgaWYgbmVjZXNzYXJ5KSBT RVQgVEVMTkVUIEVDSE8gUkVNT1RFCi0gICAgMi4gU0VUIEhPU1QgdGVybWluYWwtc2VydmVyLWlw LW5hbWUtb3ItYWRkcmVzcyBbIHBvcnQgXQotICAgIDMuIFNFVCBNT0RFTSBUWVBFIG1vZGVtLXR5 cGUKLSAgICA0LiAob25seSBpZiBuZWNlc3NhcnkpIFNFVCBESUFMIEhBTkdVUCBPRkYKLSAgICA1 LiAoZm9yIHRyb3VibGVzaG9vdGluZykgU0VUIERJQUwgRElTUExBWSBPTgotICAgIDYuIERJQUwg cGhvbmUtbnVtYmVyCi0KLSAgIFRoZSBvcmRlciBpcyBpbXBvcnRhbnQ6IFNFVCBIT1NUIGJlZm9y ZSBTRVQgTU9ERU0gVFlQRS4gU2luY2UgdGhpcyBpcyBhCi0gICBUZWxuZXQgY29ubmVjdGlvbiwg c2VyaWFsLXBvcnQgcmVsYXRlZCBjb21tYW5kcyBzdWNoIGFzIFNFVCBTUEVFRCwgU0VUCi0gICBT VE9QLUJJVFMsIEhBTkdVUCAod2hlbiBNT0RFTSBIQU5HVVAtTUVUSE9EIGlzIFJTMjMyKSwgZXRj LCBoYXZlIG5vCi0gICBlZmZlY3QuIEhvd2V2ZXIsIGluIEMtS2VybWl0IDguMCwgaWYgdGhlIG1v ZGVtIHNlcnZlciBzdXBwb3J0cwotICAgWzY5XVJGQy0yMjE3IFRlbG5ldCBDb20tUG9ydCBDb250 cm9sIHByb3RvY29sLCB0aGVzZSBjb21tYW5kcyBkbyBpbmRlZWQKLSAgIHRha2UgZWZmZWN0IGF0 IHRoZSBzZXJ2ZXIncyBzZXJpYWwgcG9ydC4KLQotOC4gVEVSTUlOQUwgRU1VTEFUSU9OCi0KLSAg IFsgWzcwXVRvcCBdIFsgWzcxXUNvbnRlbnRzIF0gWyBbNzJdTmV4dCBdIFsgWzczXVByZXZpb3Vz IF0KLQotICAgRXhjZXB0IGZvciB0aGUgV2luZG93cywgT1MvMiwgYW5kIE1hY2ludG9zaCB2ZXJz aW9ucywgQy1LZXJtaXQgZG9lcyBub3QKLSAgIGVtdWxhdGUgYW55IGtpbmQgb2YgdGVybWluYWwu IFJhdGhlciwgaXQgYWN0cyBhcyBhICJzZW1pdHJhbnNwYXJlbnQKLSAgIHBpcGUiLCBwYXNzaW5n IHRoZSBjaGFyYWN0ZXJzIHlvdSB0eXBlIGR1cmluZyBhIENPTk5FQ1Qgc2Vzc2lvbiB0byB0aGUK LSAgIHJlbW90ZSBob3N0LCBhbmQgc2VuZGluZyB0aGUgY2hhcmFjdGVycyByZWNlaXZlZCBmcm9t IHRoZSByZW1vdGUgaG9zdAotICAgdG8geW91ciBzY3JlZW4uIFdoYXRldmVyIGlzIGNvbnRyb2xs aW5nIHlvdXIga2V5Ym9hcmQgYW5kIHNjcmVlbgotICAgcHJvdmlkZXMgdGhlIHNwZWNpZmljIHRl cm1pbmFsIGVtdWxhdGlvbjogYSByZWFsIHRlcm1pbmFsLCBhIFBDIHJ1bm5pbmcKLSAgIGEgdGVy bWluYWwgZW11bGF0b3IsIGV0Yywgb3IgKGluIHRoZSBjYXNlIG9mIGEgc2VsZi1jb250YWluZWQK LSAgIHdvcmtzdGF0aW9uKSB5b3VyIGNvbnNvbGUgZHJpdmVyLCBhIHRlcm1pbmFsIHdpbmRvdywg eHRlcm0sIGV0Yy4KLQotICAgS2VybWl0IGlzIHNlbWl0cmFuc3BhcmVudCByYXRoZXIgdGhhbiBm dWxseSB0cmFuc3BhcmVudCBpbiB0aGUKLSAgIGZvbGxvd2luZyB3YXlzOgotCi0gICAgICogRHVy aW5nIGEgVEVMTkVUICgic2V0IGhvc3QiKSBzZXNzaW9uLCBDLUtlcm1pdCBpdHNlbGYgZXhlY3V0 ZXMgdGhlCi0gICAgICAgVEVMTkVUIHByb3RvY29sIGFuZCBwZXJmb3JtcyBURUxORVQgbmVnb3Rp YXRpb25zLiAoQnV0IGl0IGRvZXMgbm90Ci0gICAgICAgcGVyZm9ybSBUTjMyNzAgcHJvdG9jb2wg b3IgYW55IG90aGVyIHR5cGUgb2YgMzI3MCB0ZXJtaW5hbAotICAgICAgIGVtdWxhdGlvbi4pCi0g ICAgICogSWYgeW91IGhhdmUgY2hhbmdlZCB5b3VyIGtleWJvYXJkIG1hcHBpbmcgdXNpbmcgU0VU IEtFWSwgQy1LZXJtaXQKLSAgICAgICByZXBsYWNlcyB0aGUgY2hhcmFjdGVycyB5b3UgdHlwZSB3 aXRoIHRoZSBjaGFyYWN0ZXJzIG9yIHN0cmluZ3MKLSAgICAgICB0aGV5IGFyZSBtYXBwZWQgdG8u Ci0gICAgICogSWYgeW91IFNFVCB5b3VyIFRFUk1JTkFMIENIQVJBQ1RFUi1TRVQgdG8gYW55dGhp bmcgYnV0IFRSQU5TUEFSRU5ULAotICAgICAgIEMtS2VybWl0IHRyYW5zbGF0ZXMgeW91ciBrZXlz dHJva2VzIChhZnRlciBhcHBseWluZyBhbnkgU0VUIEtFWQotICAgICAgIGRlZmluaXRpb25zKSBi ZWZvcmUgdHJhbnNtaXR0aW5nIHRoZW0sIGFuZCB0cmFuc2xhdGVzIHJlY2VpdmVkCi0gICAgICAg Y2hhcmFjdGVycyBiZWZvcmUgc2hvd2luZyB0aGVtIG9uIHlvdXIgc2NyZWVuLgotICAgICAqIElm IHlvdXIgcmVtb3RlIGFuZC9vciBsb2NhbCBURVJNSU5BTCBDSEFSQUNURVItU0VUIGlzIGFuIElT TyA2NDYKLSAgICAgICA3LWJpdCBuYXRpb25hbCBjaGFyYWN0ZXIgc2V0LCBzdWNoIGFzIEdlcm1h biwgRnJlbmNoLCBJdGFsaWFuLAotICAgICAgIFN3ZWRpc2gsIGV0Yywgb3IgU2hvcnQgS09JIHVz ZWQgZm9yIEN5cmlsbGljLCBDLUtlcm1pdCdzIENPTk5FQ1QKLSAgICAgICBjb21tYW5kIGF1dG9t YXRpY2FsbHkgc2tpcHMgb3ZlciBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMgdG8gYXZvaWQKLSAgICAg ICB0cmFuc2xhdGluZyB0aGVpciBjaGFyYWN0ZXJzLiBPbmx5IEFOU0kvSVNPIHN0YW5kYXJkCi0g ICAgICAgKFZUMTAwLzIwMC8zMDAtbGlrZSkgNy1iaXQgZXNjYXBlIHNlcXVlbmNlIGZvcm1hdHMg YXJlIHN1cHBvcnRlZAotICAgICAgIGZvciB0aGlzIHB1cnBvc2UsIG5vIHByb3ByaWV0YXJ5IHNj aGVtZXMgbGlrZSBILVAsIFRlbGV2aWRlbywKLSAgICAgICBUZWt0cm9uaXgsIGV0Yy4KLSAgICAg KiBJZiB5b3VyIHZlcnNpb24gb2YgQy1LZXJtaXQgaW5jbHVkZXMgU0VUIFRFUk1JTkFMIEFQQyBj b21tYW5kLCB0aGVuCi0gICAgICAgQy1LZXJtaXQncyBDT05ORUNUIGNvbW1hbmQgd2lsbCBoYW5k bGUgQVBDIGVzY2FwZSBzZXF1ZW5jZXMgaWYKLSAgICAgICBURVJNSU5BTCBBUEMgaXMgbm90IHNl dCB0byBPRkYgKHdoaWNoIGlzIHRoZSBkZWZhdWx0KS4KLQotICAgWW91IGNhbiBtYWtlIEMtS2Vy bWl0IGZ1bGx5IHRyYW5zcGFyZW50IGJ5IHN0YXJ0aW5nIGl0IHdpdGggdGhlIC0wCi0gICAoZGFz aCB6ZXJvKSBjb21tYW5kLWxpbmUgb3B0aW9uLgotCi0gICBJZiB5b3UgYXJlIHJ1bm5pbmcgQy1L ZXJtaXQgdW5kZXIgYSBjb25zb2xlIGRyaXZlciwgb3IgaW4gYSB0ZXJtaW5hbAotICAgd2luZG93 LCB0aGF0IGVtdWxhdGVzIHRoZSBWVDEwMCwgYW5kIHVzZSBDLUtlcm1pdCB0byBsb2cgaW4gdG8g YSBWTVMKLSAgIHN5c3RlbSwgdGhlIGNvbnNvbGUgZHJpdmVyIG9yIHRlcm1pbmFsIHdpbmRvdyAo bm90IEtlcm1pdCkgaXMgc3VwcG9zZWQKLSAgIHRvIHJlcGx5IHRvIHRoZSAid2hhdCBhcmUgeW91 PyIgcXVlcnkgKEVTQyBaKSBmcm9tIHRoZSBWQVguIElmIGl0Ci0gICBkb2Vzbid0LCBhbmQgeW91 IGNhbid0IG1ha2UgaXQgZG8gc28sIHRoZW4geW91IGNhbiAoYSkgbGl2ZSB3aXRoIHRoZQotICAg InVua25vd24gdGVybWluYWwiIHByb2JsZW07IChiKSB0ZWxsIFZNUyB0byBTRVQgVEVSTUlOQUwv REVWSUNFPVZUMTAwOwotICAgKGMpIHByb2dyYW0gYSBrZXkgdXNpbmcgU0VUIEtFWSB0byBzZW5k IHRoZSBhcHByb3ByaWF0ZSBzZXF1ZW5jZSBhbmQKLSAgIHRoZW4gcHVuY2ggdGhlIGtleSBhdCB0 aGUgcmlnaHQgdGltZTsgb3IgKGQpIHVzZSB0aGUgVk1TTE9HSU4gbWFjcm8KLSAgIHRoYXQgaXMg ZGVmaW5lZCBpbiBDS0VSTUlULklOSSB0byBkbyB0aGlzIGZvciB5b3UgYXV0b21hdGljYWxseS4K LQotICAgU0VUIFNFU1NJT04tTE9HIHsgVEVYVCwgQklOQVJZIH0sIHdoaWNoIGlzIGVmZmVjdGl2 ZSBpbiBVTklYIGFuZCBBT1MvVlMKLSAgIGJ1dCBub3Qgb3RoZXIgQy1LZXJtaXQgdmVyc2lvbnMs IHJlbW92ZXMgQ1IsIERFTCwgTlVMLCBYT04sIGFuZCBYT0ZGCi0gICBjaGFyYWN0ZXJzIChVc2lu ZyBDLUtlcm1pdCBuZWdsZWN0cyB0byBtZW50aW9uIHRoYXQgWE9OIGFuZCBYT0ZGIGFyZQotICAg cmVtb3ZlZCkuIFRoZSBURVhULW1vZGUgc2V0dGluZyBpcyBpbmVmZmVjdGl2ZSBkdXJpbmcgU0NS SVBUIGNvbW1hbmQKLSAgIGV4ZWN1dGlvbiwgYXMgd2VsbCBhcyBvbiBYLjI1IGNvbm5lY3Rpb25z LgotCi05LiBLRVkgTUFQUElORwotCi0gICBbIFs3NF1Ub3AgXSBbIFs3NV1Db250ZW50cyBdIFsg Wzc2XU5leHQgXSBbIFs3N11QcmV2aW91cyBdCi0KLSAgIEV4Y2VwdCBpbiB0aGUgdGVybWluYWwt ZW11bGF0aW5nIHZlcnNpb25zLCBDLUtlcm1pdCdzIGtleSBtYXBwaW5nCi0gICBmYWNpbGl0aWVz IGFyZSBsaW1pdGVkIHRvIG5vcm1hbCAiQVNDSUkiIGtleXMsIGFuZCBjYW5ub3QgYmUgdXNlZCB3 aXRoCi0gICBmdW5jdGlvbiBrZXlzLCBhcnJvdyBrZXlzLCBhcmNhbmUga2V5IGNvbWJpbmF0aW9u cywgZXRjLiBTaW5jZSBDLUtlcm1pdAotICAgcnVucyBvbiBzdWNoIGEgd2lkZSB2YXJpZXR5IG9m IGhhcmR3YXJlIHBsYXRmb3JtcyAoaW5jbHVkaW5nLCBmb3IKLSAgIGV4YW1wbGUsIG1vcmUgdGhh biAzNjAgZGlmZmVyZW50IFVOSVggcGxhdGZvcm1zKSwgaXQgaXMgbm90IHBvc3NpYmxlCi0gICBm b3IgQy1LZXJtaXQgdG8gc3VwcG9ydCBldmVyeSBjb25jZWl2YWJsZSBrZXlib2FyZCB1bmRlciBl dmVyeSByZWxlYXNlCi0gICBvZiBldmVyeSBVTklYIChvciBWTVMsIG9yIC4uLikgcHJvZHVjdCBv biBldmVyeSBkaWZmZXJlbnQga2luZCBvZgotICAgY29tcHV0ZXIgcG9zc2libHkgdW5kZXIgYWxs IG1hbm5lciBvZiBkaWZmZXJlbnQgY29uc29sZSBkcml2ZXJzLCBldmVuCi0gICBpZiBpdCBoYWQg dGhlIG1lYW5zIHRvIGRvIHNvLgotCi0gICBJbiB0ZWNobmljYWwgdGVybXMsIEMtS2VybWl0IHVz ZXMgdGhlIHJlYWQoKSBmdW5jdGlvbiB0byByZWFkCi0gICBrZXlzdHJva2VzLCBhbmQgcmVhZCgp IHJldHVybnMgYSBzaW5nbGUgYnl0ZSAodmFsdWUgMCB0aHJvdWdoIDI1NSkuCi0gICBDLUtlcm1p dCdzIFNFVCBLRVkgZnVuY3Rpb24gYXBwbGllcyB0byB0aGVzZSBzaW5nbGUtYnl0ZSBjb2Rlcy4K LSAgICJFeHRlbmRlZCBmdW5jdGlvbiIga2V5cywgc3VjaCBhcyBGLWtleXMsIGFycm93IGtleXMs IGV0YywgdXN1YWxseQotICAgcmV0dXJuIGVpdGhlciBhIDItYnl0ZSAic2NhbiBjb2RlIiBvciBl bHNlIGEgY2hhcmFjdGVyIHN0cmluZyAoc3VjaCBhcwotICAgYW4gZXNjYXBlIHNlcXVlbmNlIGxp a2UgIjxFU0M+IE8gcCIpLiBJbiBib3RoIGNhc2VzLCBDLUtlcm1pdCBoYXMgbm8KLSAgIHdheSB0 byB0ZWxsIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gc3VjaCBtdWx0aWJ5dGUga2V5IHZhbHVlcywg YW5kIHRoZQotICAgY29ycmVzcG9uZGluZyBzZXJpZXMgb2Ygc2luZ2xlLWJ5dGUga2V5IHZhbHVl cy4gVGhpcyBjb3VsZCBvbmx5IGJlIGRvbmUKLSAgIGJ5IGFjY2Vzc2luZyB0aGUga2V5Ym9hcmQg YXQgYSBtdWNoIGxvd2VyIGxldmVsIGluIGEgaGlnaGx5Ci0gICBwbGF0Zm9ybS1kZXBlbmRlbnQg bWFubmVyLCBwcm9iYWJseSByZXF1aXJpbmcgdGVucyBvZiB0aG91c2FuZHMgb2YKLSAgIGxpbmVz IG9mIGNvZGUgdG8gc3VwcG9ydCBldmVuIGEgc2FtcGxpbmcgb2YgdGhlIG1vc3QgcG9wdWxhcgot ICAgd29ya3N0YXRpb24gLyBPUyBjb21iaW5hdGlvbnMuCi0KLSAgIEhvd2V2ZXIsIG1vc3Qgd29y a3N0YXRpb24gY29uc29sZSBkcml2ZXJzICh0ZXJtaW5hbCBlbXVsYXRpb24gd2luZG93cywKLSAg IGV0YykgaW5jbHVkZSB0aGVpciBvd24ga2V5LW1hcHBpbmcgZmFjaWxpdHkuIEZvciBleGFtcGxl IGluIEFJWCwgdGhlCi0gICBBSVh0ZXJtIHByb2dyYW0gKGluIHdob3NlIHdpbmRvdyB5b3Ugd291 bGQgcnVuIEMtS2VybWl0KSBhbGxvd3MKLSAgIHJlYmluZGluZyBvZiB0aGUgRjEtRjEyIGtleXMg dG8gYXJiaXRyYXJ5IHN0cmluZ3MuIFRoZSBzYW1lIGlzIHRydWUgb2YKLSAgIFh0ZXJtIGFuZCBE RUN0ZXJtIHdpbmRvd3MsIGV0Yy4gQ29uc3VsdCB0aGUgdGVjaG5pY2FsIGRvY3VtZW50YXRpb24g Zm9yCi0gICB5b3VyIHdvcmtzdGF0aW9uIG9yIGVtdWxhdG9yLiBTZWUgc2FtcGxlIFh0ZXJtIChY bW9kbWFwKSBtYXBwaW5ncyBpbgotICAgdGhlIFs3OF1Vbml4IEMtS2VybWl0IEhpbnRzIGFuZCBU aXBzIGRvY3VtZW50LgotCi0gICBUaGUgU0VUIEtFWSBjb21tYW5kIChleGNlcHQgaW4gS2VybWl0 IDk1KSBkb2VzIG5vdCBhbGxvdyBhIGtleQotICAgZGVmaW5pdGlvbiB0byBiZSAob3IgY29udGFp bikgdGhlIE5VTCAoXDApIGNoYXJhY3Rlci4KLQotMTAuIEZJTEUgVFJBTlNGRVIKLQotICAgWyBb NzldVG9wIF0gWyBbODBdQ29udGVudHMgXSBbIFs4MV1OZXh0IF0gWyBbODJdUHJldmlvdXMgXQot Ci0gICBDLUtlcm1pdCA3LjAgaXMgdGhlIGZpcnN0IHJlbGVhc2Ugb2YgQy1LZXJtaXQgdG8gdXNl IGZhc3QgKHJhdGhlciB0aGFuCi0gICByb2J1c3QgYW5kIHRoZXJlZm9yZSBzbG93KSBwcm90b2Nv bCBkZWZhdWx0czogbG9uZyBwYWNrZXRzLCBzbGlkaW5nCi0gICB3aW5kb3dzLCBjb250cm9sLWNo YXJhY3RlciB1bnByZWZpeGluZywgYW5kIHN0cmVhbWluZyB3aGVyZSBwb3NzaWJsZS4KLSAgIFRo aXMgbWFrZXMgbW9zdCB0cmFuc2ZlcnMgKHBhcnRuZXIgd2lsbGluZykgZHJhbWF0aWNhbGx5IGZh c3RlciAib3V0IG9mCi0gICB0aGUgYm94IiBidXQgbWlnaHQgYnJlYWsgc29tZSBjb21iaW5hdGlv bnMgdGhhdCB3b3JrZWQgYmVmb3JlLiBJZgotICAgdHJhbnNmZXJzIHdpdGggQy1LZXJtaXQgNy4w IG9yIGxhdGVyIGZhaWwgd2hlcmUgdHJhbnNmZXJzIHdvcmtlZCB3aXRoCi0gICBlYXJsaWVyIEMt S2VybWl0IHZlcnNpb25zLCB0cnkgdGhlIGZvbGxvd2luZyAob25lIGF0IGEgdGltZSwgaW4gdGhp cwotICAgb3JkZXIpOgotCi0gICAgMS4gU0VUIFBSRUZJWElORyBBTEw6IERpc2FibGVzIGNvbnRy b2wtY2hhcmFjdGVyIHVucHJlZml4aW5nLgotICAgIDIuIFNFVCBTVFJFQU1JTkcgT0ZGOiBEaXNh YmxlcyBzdHJlYW1pbmcuCi0gICAgMy4gQ0FVVElPVVM6IFNlbGVjdHMgbWVkaXVtIGJ1dCBjYXV0 aW91cyBwcm90b2NvbCBzZXR0aW5ncy4KLSAgICA0LiBST0JVU1Q6IHRoaXMgY29tbWFuZCByZXZl cnRzIHRvIHRoZSBtb3N0IGNvbnNlcnZhdGl2ZSBwcm90b2NvbAotICAgICAgIHNldHRpbmdzLgot Ci0gICBFeGVjdXRpb24gb2YgbXVsdGlwbGUgZmlsZSB0cmFuc2ZlcnMgYnkgQy1LZXJtaXQgZnJv bSBhIGNvbW1hbmQgZmlsZQotICAgd2hlbiBpbiByZW1vdGUgbW9kZSBtaWdodCBleGhpYml0IGxv bmcgZGVsYXlzIGJldHdlZW4gZWFjaCB0cmFuc2Zlci4gVG8KLSAgIGF2b2lkIHRoaXMsIGp1c3Qg aW5jbHVkZSB0aGUgY29tbWFuZCAiU0VUIERFTEFZIDAiIGluIHlvdXIgY29tbWFuZCBmaWxlCi0g ICBiZWZvcmUgYW55IG9mIHRoZSBmaWxlLXRyYW5zZmVyIGNvbW1hbmRzLgotCi0gICBGaWxlIHRy YW5zZmVyIGZhaWx1cmVzIGNhbiBvY2N1ciBmb3IgYWxsIHNvcnRzIG9mIHJlYXNvbnMsIG1vc3Qg b2YgdGhlbQotICAgbGlzdGVkIGluIENoYXB0ZXIgMTAgb2YgWzgzXVVzaW5nIEMtS2VybWl0LiBU aGUgZm9sbG93aW5nIHNlY3Rpb25zCi0gICB0b3VjaCBvbiBzb21lIHRoYXQgYXJlbid0LgotCi0g ICBUaGUgWzg0XUMtS2VybWl0IDcuMCBSZWxlYXNlIE5vdGVzIGRvY3VtZW50IFNFTkQgL0NPTU1B TkQgYXMgdGFraW5nIGFuCi0gICBhcmd1bWVudCwgYnV0IGl0IGRvZXNuJ3QuIEluc3RlYWQgb2Yg U0VORCAvQ09NTUFORDp7c29tZSBjb21tYW5kfSwgdXNlOgotCi1TRU5EIC9DT01NQU5EIFsgb3Ro ZXIgc3dpdGNoZXMgc3VjaCBhcyAvQVMtTkFNRTogXSBjb21tYW5kIFsgYXJndW1lbnRzLi4uIF0K LQotMTAuMS4gTGFwdG9wcwotCi0gICBXYXRjaCBvdXQgZm9yIGxhcHRvcHMgYW5kIHRoZWlyIGFz c29ydGVkIHBvd2VyLXNhdmVyIGZlYXR1cmVzOyBmb3IKLSAgIGV4YW1wbGUsIGEgYnVpbHQtaW4g bW9kZW0ncyAiYXV0byB0aW1lb3V0IGRlbGF5IiBoYW5naW5nIHVwIHRoZQotICAgY29ubmVjdGlv biBpbiB0aGUgbWlkZGxlIG9mIGEgZmlsZSB0cmFuc2Zlci4gTW9zdCBtb2RlbXMsIGV2ZW4gaWYg dGhleQotICAgaGF2ZSB0aGlzIGZlYXR1cmUsIGRvIG5vdCBoYXZlIGl0IGVuYWJsZWQgYnkgZGVm YXVsdC4gQnV0IGlmIHlvdQotICAgZXhwZXJpZW5jZSBvdGhlcndpc2UgaW5leHBsaWNhYmxlIGRp c2Nvbm5lY3Rpb25zIGluIHRoZSBtaWRzdCBvZiB5b3VyCi0gICBLZXJtaXQgc2Vzc2lvbnMsIGNo ZWNrIHRoZSBtb2RlbSBtYW51YWwgZm9yIHN1Y2ggdGhpbmdzIGFzICJpZGxlCi0gICB0aW1lb3V0 IiwgImF1dG8gdGltZW91dCIsIGV0YywgYW5kIGFkZCB0aGUgY29tbWFuZCB0byBkaXNhYmxlIHRo aXMKLSAgIGZlYXR1cmUgdG8gS2VybWl0J3MgaW5pdCBzdHJpbmcgZm9yIHRoaXMgbW9kZW0uCi0K LTEwLjIuIE5GUwotCi0gICBJZiB1cGxvYWRpbmcgYSBsYXJnZSBmaWxlIHRvIGFuIE5GUy1tb3Vu dGVkIGRpc2sgZmFpbHMgKG9yIGlzIHBhaW5mdWxseQotICAgc2xvdyksIHRyeSB1cGxvYWRpbmcg aXQgdG8gYSBsb2NhbCBkaXNrIChlLmcuIC90bXAgb24gVW5peCkgYW5kIHRoZW4KLSAgIGNvcHlp bmcgdG8gdGhlIE5GUyBkaXNrIGxhdGVyLgotCi0xMC4zLiBNb2RlbXMKLQotICAgSWYgeW91IGFy ZSBkaWFsaW5nIG91dCBhbmQgZmluZCB0aGF0IGRvd25sb2FkcyB3b3JrIGJ1dCB1cGxvYWRzIGRv bid0LAotICAgdHJ5IGFnYWluIHdpdGggYSBsb3dlciBzZXJpYWwtcG9ydCBzcGVlZC4gQ2FzZSBp biBwb2ludDogZGlhbGluZyBvdXQgb24KLSAgIGEgY2VydGFpbiBQQyBmcm9tIExpbnV4IGF0IDEx NTIwMCBicHMgdXNpbmcgYSBVU1IgQ291cmllciA1NksKLSAgICJWLkV2ZXJ5dGhpbmciIGV4dGVy bmFsIG1vZGVtIGFuZCBSVFMvQ1RTIGZsb3cgY29udHJvbC4gRG93bmxvYWRzCi0gICB3b3JrZWQg Zmxhd2xlc3NseSwgdXBsb2FkcyBzdG9wcGVkIGRlYWQgYWZ0ZXIgdGhlIGZpcnN0IGZldyBwYWNr ZXRzCi0gICB3ZXJlIHNlbnQuIFRoZSBtb2RlbSBsaWdodHMgc2hvd2VkIGNvbnN0YW50IHJldHJh aW5pbmcgKEFSUSBsaWdodAotICAgYmxpbmtzIHNsb3dseSksIGFuZCB0aGUgQ1RTIGxpZ2h0IHdh cyBvZmYgOTUlIG9mIHRoZSB0aW1lLCBhbGxvd2luZwotICAgbm90aGluZyB0byBnZXQgdGhyb3Vn aC4gUmVkdWNpbmcgdGhlIHNlcmlhbCBwb3J0IHNwZWVkIHRvIDU3NjAwIGJwcwotICAgbWFkZSB0 aGUgcHJvYmxlbXMgZ28gYXdheS4gRXZpZGVudGx5IHRoZSBQQyBpbiBxdWVzdGlvbiBoYXMgYSB2 ZXJ5IGZhc3QKLSAgIHNlcmlhbCBwb3J0LCBzaW5jZSBkaWFsaW5nIHRoZSBzYW1lIG1vZGVtIHdp dGggYSBkaWZmZXJlbnQgUEMgYXQgMTE1MjAwCi0gICBicHMgd29ya3Mgd2l0aG91dCBpbmNpZGVu dC4KLQotMTAuNC4gVENQL0lQIENvbm5lY3Rpb25zCi0KLSAgIElmIHlvdSBoYXZlIHRyb3VibGUg dHJhbnNmZXJyaW5nIGZpbGVzIG92ZXIgYSBUQ1AvSVAgY29ubmVjdGlvbiwgdGVsbAotICAgS2Vy bWl0IHRvIFNFVCBQQVJJVFkgU1BBQ0UgYW5kIHRyeSBhZ2Fpbi4gSWYgdGhhdCBkb2Vzbid0IHdv cmssIGFsc28KLSAgIHRyeSBhIHNob3J0ZXIgcGFja2V0IGxlbmd0aCBvciBzbWFsbGVyIHdpbmRv dyBzaXplICh0byBjb21wZW5zYXRlIGZvcgotICAgY2VydGFpbiB3ZWxsLWtub3duIGJyb2tlbiBU ZWxuZXQgc2VydmVycyksIGFuZC9vciBTRVQgUkVMSUFCTEUgT0ZGLgotCi0xMC41LiBNdWx0aWhv cCBDb25uZWN0aW9ucwotCi0gICBJZiB5b3UgaGF2ZSBhIG11bHRpaG9wIGNvbm5lY3Rpb24sIHdp dGggdGhlIGludGVyaW9yIG5vZGVzIGluIENPTk5FQ1QKLSAgIG1vZGUgKEtlcm1pdCwgVGVsbmV0 LCBSbG9naW4sIG9yIGFueSBvdGhlciksIHlvdSBjYW4gZXhwZWN0IChhKSBmaWxlCi0gICB0cmFu c2ZlciB0byBiZSBzbG93ZXIsIGFuZCAoYikgdGhlIGNvbm5lY3Rpb24gdG8gYmUgbGVzcyB0cmFu c3BhcmVudAotICAgKHRvIGNvbnRyb2wgY2hhcmFjdGVycywgcGVyaGFwcyB0byB0aGUgOHRoIGJp dCkgdGhhbiBhIG1vcmUgZGlyZWN0Ci0gICBjb25uZWN0aW9uLiBDLUtlcm1pdCA3LjAgYW5kIGxh dGVyIGhhdmUgYSAiLTAiIChkYXNoLXplcm8pIGNvbW1hbmQtbGluZQotICAgb3B0aW9uIHRvIG1h a2UgaXQgMTAwJSB0cmFuc3BhcmVudCBpbiBjYXNlcyB3aGVyZSBpdCBpcyB0byBiZSB1c2VkIGlu Ci0gICB0aGUgbWlkZGxlLgotCi0xMC42LiBSZWNvdmVyeQotCi0gICBUaGUgcmVjb3ZlcnkgZmVh dHVyZSAoUkVTRU5EIGNvbW1hbmQpIHRoYXQgd2FzIGFkZGVkIGluIHZlcnNpb24gNUEoMTkwKQot ICAgd29ya3Mgb25seSBmb3IgYmluYXJ5LW1vZGUgdHJhbnNmZXJzLiBJbiBvcmRlciBmb3IgdGhp cyBmZWF0dXJlIHRvIGJlCi0gICB1c2VmdWwgYXQgYWxsLCB0aGUgZGVmYXVsdCBmb3IgU0VUIEZJ TEUgSU5DT01QTEVURSB3YXMgY2hhbmdlZCBmcm9tCi0gICBESVNDQVJEIHRvIEtFRVAuIE90aGVy d2lzZSBhbiBpbnRlcnJ1cHRlZCB0cmFuc2ZlciB3b3VsZCBsZWF2ZSBubwotICAgcGFydGlhbCBm aWxlIGJlaGluZCB1bmxlc3MgeW91IGhhZCByZW1lbWJlcmVkIHRvIGNoYW5nZSB0aGUgZGVmYXVs dC4KLSAgIEJ1dCBub3cgeW91IGhhdmUgdG8gcGF5IGNsb3NlciBhdHRlbnRpb24gdG8gS2VybWl0 J3MgbWVzc2FnZXMgdG8ga25vdwotICAgd2hldGhlciBhIHRyYW5zZmVyIHN1Y2NlZWRlZCBvciBm YWlsZWQgLS0gcHJldmlvdXNseSwgaWYgaXQgZmFpbGVkLCB0aGUKLSAgIGZpbGUgd291bGQgbm90 IHNob3cgdXAgb24gdGhlIHJlY2VpdmluZyBlbmQgYXQgYWxsOyBpbiA1QSgxOTApIGFuZAotICAg bGF0ZXIsIHlvdSdsbCBnZXQgYSBwYXJ0aWFsIGZpbGUgd2hpY2ggY291bGQgZWFzaWx5IGJlIG1p c3Rha2VuIGZvciB0aGUKLSAgIGNvbXBsZXRlIGZpbGUgdW5sZXNzIHlvdSBjaGFuZ2UgdGhlIGRl ZmF1bHQgYmFjayB0byBESVNDQVJEIG9yIHJlYWQgdGhlCi0gICBzY3JlZW4gbWVzc2FnZXMsIG9y IGtlZXAgYSB0cmFuc2FjdGlvbiBsb2cuCi0KLTEwLjcuIEZpbGVuYW1lIENvbGxpc2lvbnMKLQot ICAgU0VUIEZJTEUgQ09MTElTSU9OIEJBQ0tVUCBpcyB0aGUgZGVmYXVsdC4gVGhpcyBtZWFuczoK LQotICAgICAqIElmIHlvdSBzZW5kIHRoZSBzYW1lIGZpbGUgbG90cyBvZiB0aW1lcywgdGhlcmUg d2lsbCBiZSBtYW55IGJhY2t1cAotICAgICAgIGZpbGVzLiBUaGVyZSBpcyBubyBhdXRvbWF0aWMg bWVjaGFuaXNtIHdpdGhpbiBLZXJtaXQgdG8gZGVsZXRlCi0gICAgICAgdGhlbSwgbm8gbm90aW9u IG9mIGEgInZlcnNpb24gcmV0ZW50aW9uIGNvdW50IiwgZXRjLCBidXQgeW91IGNhbgotICAgICAg IHVzZSB0aGUgUFVSR0UgY29tbWFuZCB0byBjbGVhbiB0aGVtIHVwLgotICAgICAqIElmIGEgZmls ZSBhcnJpdmVzIHRoYXQgaGFzIHRoZSBzYW1lIG5hbWUgYXMgYSBkaXJlY3RvcnksIHRoZSBmaWxl Ci0gICAgICAgdHJhbnNmZXIgZmFpbHMgYmVjYXVzZSBLZXJtaXQgd2lsbCBub3QgcmVuYW1lIGEg ZGlyZWN0b3J5LiBTZW5kIHRoZQotICAgICAgIGZpbGUgd2l0aCBhbm90aGVyIG5hbWUsIG9yIHVz ZSBTRVQgRklMRSBDT0xMSVNJT04gUkVOQU1FLgotICAgICAqIElmIHRoZSBkaXJlY3RvcnkgbGFj a3Mgd3JpdGUgcGVybWlzc2lvbiwgdGhlIGZpbGUgdHJhbnNmZXIgZmFpbHMKLSAgICAgICBldmVu IGlmIHlvdSBoYXZlIHdyaXRlIGFjY2VzcyB0byB0aGUgZmlsZSB0aGF0IGlzIGJlaW5nIGJhY2tl ZCB1cDsKLSAgICAgICBpbiB0aGF0IGNhc2UsIHN3aXRjaCB0byBTRVQgRklMRSBDT0xMSVNJT04g T1ZFUldSSVRFIG9yIEFQUEVORCwgb3IKLSAgICAgICBzZW5kIHRvIGEgZGlmZmVyZW50IGRpcmVj dG9yeS4KLQotICAgU0VUIEZJTEUgQ09MTElTSU9OIFVQREFURSBkZXBlbmRzIG9uIHRoZSBkYXRl L3RpbWUgc3RhbXAgaW4gdGhlCi0gICBhdHRyaWJ1dGUgcGFja2V0LiBIb3dldmVyLCB0aGlzIGlz IHJlY29yZGVkIGluIGxvY2FsIHRpbWUsIG5vdAotICAgVW5pdmVyc2FsIFRpbWUgKEdNVCksIGFu ZCB0aGVyZSBpcyBubyBpbmRpY2F0aW9uIG9mIHRpbWUgem9uZS4gVGhlIHRpbWUKLSAgIGlzIGV4 cHJlc3NlZCB0byB0aGUgcHJlY2lzaW9uIG9mIDEgc2Vjb25kLCBidXQgc29tZSBmaWxlIHN5c3Rl bXMgZG8gbm90Ci0gICByZWNvcmQgd2l0aCB0aGlzIHByZWNpc2lvbiAtLSBmb3IgZXhhbXBsZSwg TVMtRE9TIHJlY29yZHMgdGhlIGZpbGUKLSAgIGRhdGUvdGltZSBvbmx5IHRvIHRoZSBuZWFyZXN0 IDIgc2Vjb25kcy4gVGhpcyBtaWdodCBjYXVzZSB1cGRhdGUKLSAgIG9wZXJhdGlvbnMgdG8gc2Vu ZCBtb3JlIGZpbGVzIHRoYW4gbmVjZXNzYXJ5LgotCi0gICAoVGhpcyBwYXJhZ3JhcGggZG9lcyBO T1QgYXBwbHkgdG8gVU5JWCwgd2hlcmUsIGFzIG9mIEMtS2VybWl0IDcuMCwKLSAgIEMtS2VybWl0 IHBpcGVzIGluY29taW5nIG1haWwgYW5kIHByaW50IG1hdGVyaWFsIGRpcmVjdGx5IHRoZSBtYWls IG9yCi0gICBwcmludCBwcm9ncmFtKTogV2hlbiBDLUtlcm1pdCBpcyByZWNlaXZpbmcgZmlsZXMg ZnJvbSBhbm90aGVyIEtlcm1pdAotICAgcHJvZ3JhbSB0aGF0IGhhcyBiZWVuIGdpdmVuIHRoZSBN QUlMIG9yIFJFTU9URSBQUklOVCBjb21tYW5kLCBDLUtlcm1pdAotICAgZm9sbG93cyB0aGUgY3Vy cmVudCBmaWxlbmFtZSBjb2xsaXNpb24gYWN0aW9uLiBUaGlzIGNhbiBiZQotICAgZGlzY29uY2Vy dGluZyBpZiB0aGUgYWN0aW9uIHdhcyAoZm9yIGV4YW1wbGUpIEJBQ0tVUCwgYmVjYXVzZSB0aGUK LSAgIGV4aXN0aW5nIGZpbGUgd2lsbCBiZSByZW5hbWVkLCBhbmQgdGhlIG5ldyBmaWxlIHdpbGwg YmUgbWFpbGVkIChvcgotICAgcHJpbnRlZCkgYW5kIHRoZW4gZGVsZXRlZC4gS2VybWl0IGNhbm5v dCB0ZW1wb3JhcmlseSBjaGFuZ2UgdG8gUkVOQU1FCi0gICBiZWNhdXNlIHRoZSBmaWxlIGNvbGxp c2lvbiBhY3Rpb24gb2NjdXJzIHdoZW4gdGhlIGZpbGVuYW1lIHBhY2tldCBpcwotICAgcmVjZWl2 ZWQsIGFuZCB0aGUgUFJJTlQgb3IgTUFJTCBkaXNwb3NpdGlvbiBvbmx5IGNvbWVzIGxhdGVyLCBp biB0aGUKLSAgIEF0dHJpYnV0ZSBwYWNrZXQuCi0KLSAgIFdhdGNoIG91dCBmb3IgU0VUIEZJTEUg Q09MTElTSU9OIFJFTkFNRSwgZXNwZWNpYWxseSB3aGVuIHVzZWQgaW4KLSAgIGNvbmp1bmN0aW9u IHdpdGggcmVjb3ZlcnkuIFJlY2FsbCB0aGF0IHRoaXMgb3B0aW9uICh3aGljaCBpcyBOT1QgdGhl Ci0gICBkZWZhdWx0KSByZW5hbWVzIHRoZSBpbmNvbWluZyBmaWxlIGlmIGEgZmlsZSBhbHJlYWR5 IGV4aXN0cyB3aXRoIHRoZQotICAgc2FtZSBuYW1lICh0aGUgZGVmYXVsdCBpcyB0byByZW5hbWUg dGhlIHByZXZpb3VzbHkgZXhpc3RpbmcgZmlsZSwgYW5kCi0gICBzdG9yZSB0aGUgaW5jb21pbmcg ZmlsZSB3aXRoIGl0cyBvd24gbmFtZSkuIEl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkCi0gICB0 aGF0IHlvdSBkbyBub3QgdXNlIFNFVCBGSUxFIENPTExJU0lPTiBSRU5BTUUgaWYgeW91IGV2ZXIg aW50ZW5kIHRvIHVzZQotICAgdGhlIHJlY292ZXJ5IGZlYXR1cmU6Ci0KLSAgICAgKiBXaGVuIHRo ZSBmaWxlIGlzIGZpcnN0IHJlY2VpdmVkIGJ5IEMtS2VybWl0LCBpdHMgbmFtZSBpcyBjaGFuZ2Vk IGlmCi0gICAgICAgYW5vdGhlciBmaWxlIGFscmVhZHkgaGFzIHRoZSBzYW1lIG5hbWUuIFdoZW4g eW91IFJFU0VORCB0aGUgc2FtZQotICAgICAgIGZpbGUgYWZ0ZXIgYSBmYWlsdXJlLCBDLUtlcm1p dCB3aWxsIHByb2JhYmx5IHRyeSB0byBhcHBlbmQgdGhlCi0gICAgICAgcmUtc2VudCBwb3J0aW9u IHRvIHRoZSB3cm9uZyBmaWxlLgotICAgICAqIEFzc3VtaW5nIHRoYXQgeW91IGdldCBSRVNFTkQg dG8gd29yayB3aXRoIEZJTEUgQ09MTElTSU9OIFJFTkFNRSwKLSAgICAgICBDLUtlcm1pdCwgd2hl biByZWNlaXZpbmcgdGhlIHJlbWFpbmRlciBvZiB0aGUgZmlsZSBkdXJpbmcgYSBSRVNFTkQKLSAg ICAgICBvcGVyYXRpb24sIHdpbGwgcmVwb3J0IGJhY2sgdGhlIHdyb25nIG5hbWUuIE5vdGhpbmcg Y2FuIGJlIGRvbmUKLSAgICAgICBhYm91dCB0aGlzIGJlY2F1c2UgdGhlIG5hbWUgaXMgcmVwb3J0 ZWQgYmFjayBiZWZvcmUgdGhlIHJlY2VpdmluZwotICAgICAgIEtlcm1pdCBwcm9ncmFtIGZpbmRz IG91dCB0aGF0IGl0IGlzIGEgcmVjb3Zlcnkgb3BlcmF0aW9uLgotCi0gICBBbHNvIHdhdGNoIG91 dCBmb3IgRElTQUJMRSBERUxFVEUsIHNpbmNlIHRoaXMgaW1wbGljaXRseSBzZXRzIEZJTEUKLSAg IENPTExJU0lPTiB0byBSRU5BTUUuIEFuZCBub3RlIHRodCBERUxFVEUgaXMgRElTQUJMRWQgYXV0 b21hdGljYWxseSBhbnkKLSAgIHRpbWUgeW91IEtlcm1pdCBpcyBpbiBsb2NhbCBtb2RlIChpLmUu IGl0IG1ha2VzIGEgY29ubmVjdGlvbikuIEFsc28KLSAgIG5vdGUgdGhhdCBmb3IgcHVycG9zZXMg b2YgRElTQUJMRSBhbmQgRU5BQkxFLCAic2V0IGhvc3QgKiIgY29ubmVjdGlvbnMKLSAgIGRvIG5v dCBjb3VudCBhcyBsb2NhbCBtb2RlIGV2ZW4gdGhvdWdoLCBzdHJpY3RseSBzcGVha2luZywgdGhl eSBhcmUuCi0KLTEwLjguIERPUyBQYXRobmFtZXMKLQotICAgV2hlbiByZWZlcnJpbmcgdG8gZm9y ZWlnbiBNUy1ET1MsIFdpbmRvd3MsIEF0YXJpIFNULCBPUy8yLCBvciBvdGhlcgotICAgZmlsZSBz cGVjaWZpY2F0aW9ucyB0aGF0IGNvbnRhaW4gYmFja3NsYXNoIGNoYXJhY3RlcnMgaW4gYSBDLUtl cm1pdAotICAgY29tbWFuZCwgeW91IG1pZ2h0IGhhdmUgdG8gZG91YmxlIGVhY2ggYmFja3NsYXNo LCBmb3IgZXhhbXBsZToKLQotICBDLUtlcm1pdD5nZXQgYzpcXGRpcmVjdG9yeVxcZm9vLnR4dAot Ci0gICBUaGlzIGlzIGJlY2F1c2UgYmFja3NsYXNoIGlzIHVzZWQgaW4gQy1LZXJtaXQgY29tbWFu ZHMgZm9yIGludHJvZHVjaW5nCi0gICBzcGVjaWFsIGNoYXJhY3RlciBjb2RlcywgdmFyaWFibGVz LCBmdW5jdGlvbnMsIGV0Yy4KLQotMTAuOS4gQ2FuY2VsbGF0aW9uCi0KLSAgIElmIGF0dGVtcHRp bmcgdG8gY2FuY2VsIGxvY2FsLW1vZGUgZmlsZSByZWNlcHRpb24gYXQgYSB2ZXJ5IGVhcmx5IHN0 YWdlCi0gICAoaS5lLiBiZWZvcmUgZGF0YSBwYWNrZXRzIGFyZSBleGNoYW5nZWQpIHdpdGggWCBv ciBaIGRvZXMgbm90IHdvcmssIHVzZQotICAgRSBvciBDdHJsLUMgaW5zdGVhZCwgb3Igd2FpdCB1 bnRpbCB0aGUgZmlyc3QgZGF0YSBwYWNrZXRzIGFyZSBzZW50LgotCi0gICBJZiB5b3UgY2FuY2Vs IGEgdHJhbnNmZXIgdGhhdCBpcyB1bmRlcndheSB1c2luZyBYIG9yIFosIGFuZCBhIGxvdCBvZgot ICAgd2luZG93IHNsb3RzIGFyZSBpbiB1c2UsIGl0IG1pZ2h0IHRha2UgYSB3aGlsZSBmb3IgdGhl IGNhbmNlbGxhdGlvbiB0bwotICAgdGFrZSBlZmZlY3QsIGVzcGVjaWFsbHkgaWYgeW91IGRvIHRo aXMgb24gdGhlIHJlY2VpdmluZyBlbmQ7IHRoYXQncwotICAgYmVjYXVzZSBhIGxvdCBvZiBwYWNr ZXRzIG1pZ2h0IGFscmVhZHkgYmUgb24gdGhlaXIgd2F5IHRvIHlvdS4gSW4gdGhhdAotICAgY2Fz ZSwganVzdCBiZSBwYXRpZW50IGFuZCBsZXQgS2VybWl0ICJkcmFpbiIgdGhlbS4KLQotICAgSWYg Qy1LZXJtaXQgaXMgc2VuZGluZyBhIGZpbGUsIHJlbW90ZS1tb2RlIHBhY2tldC1tb2RlIGJyZWFr b3V0ICh0aHJlZQotICAgY29uc2VjdXRpdmUgQ3RybC1DJ3MgYnkgZGVmYXVsdCkgaXMgbm90IGVm ZmVjdGl2ZSB1bnRpbCBhZnRlciBDLUtlcm1pdAotICAgc2VuZHMgaXRzIGZpcnN0IHBhY2tldC4g SWYgQy1LZXJtaXQgaXMgcmVjZWl2aW5nIGEgZmlsZSBvciBpcyBpbiBzZXJ2ZXIKLSAgIG1vZGUs IGl0IGlzIGVmZmVjdGl2ZSByaWdodCBhd2F5LiBJbiB0aGUgZm9ybWVyIGNhc2UsIHRoZSBTRVQg REVMQVkKLSAgIHZhbHVlIGRldGVybWluZXMgdGhlIGVhcmxpZXN0IHRpbWUgYXQgd2hpY2ggeW91 IGNhbiBicmVhayBvdXQgb2YgcGFja2V0Ci0gICBtb2RlLgotCi0xMC4xMC4gUGFydG5lciBQZWN1 bGlhcml0aWVzCi0KLSAgIFdoZW4gb25lIG9yIGJvdGggcGFydG5lcnMgaXMgb24gYW4gU0NPIG9w ZXJhdGluZyBzeXN0ZW0gc3VjaCBhcyBPU1I1LAotICAgeW91IG1pZ2h0IGlzc3VlIHRoZSBjb21t YW5kOgotCi1tYXBjaGFuIC1uCi0KLSAgIHRvIGRpc2FibGUgY2hhcmFjdGVyLXNldCBjb252ZXJz aW9uIGJ5IHRoZSB0ZXJtaW5hbCBkcml2ZXIuIFNpbWlsYXJseQotICAgZm9yIEFJWDoKLQotc2V0 bWFwcyAtdCBOT01BUAotCi0gICBXaGVuIHVzaW5nIEMtS2VybWl0IHRvIHRyYW5zZmVyIGZpbGVz IHdpdGggdGhlIEhQNDhTWCBjYWxjdWxhdG9yLCB5b3UKLSAgIG11c3QgU0VUIEZMT1cgTk9ORS4g VGhlIEhQNDhTWCBkb2VzIG5vdCBzdXBwb3J0IGZsb3cgY29udHJvbCwgYW5kCi0gICBldmlkZW50 bHkgYWxzbyBiZWNvbWVzIGNvbmZ1c2VkIGlmIHlvdSBhdHRlbXB0IHRvIHVzZSBpdC4gWW91IG1p Z2h0Ci0gICBhbHNvIG5lZWQgdG8gdXNlIFNFVCBTRU5EIFBBVVNFIDEwMCAob3Igb3RoZXIgbnVt YmVyKS4gRm9yIGdyZWF0ZXIKLSAgIGRldGFpbCBhYm91dCB0cmFuc2ZlcnJpbmcgZmlsZXMgdGhl IEhQLTQ4LCBzZWU6Ci0KLSAgWzg1XWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ocDQ4 Lmh0bWwKLQotICAgU29tZSBjb21tdW5pY2F0aW9uIHByb2dyYW1zIGhhdmUgZXJyb3JzIGluIHRo ZWlyIGltcGxlbWVudGF0aW9uIG9mCi0gICBLZXJtaXQgYXR0cmlidXRlIHBhY2tldHMuIElmIHlv dSBnZXQgYW4gZXJyb3IgbWVzc2FnZSBmcm9tIHlvdXIKLSAgIGNvbW11bmljYXRpb24gcHJvZ3Jh bSBsaWtlICJBdHRyaWJ1dGUgZXJyb3IiLCB0ZWxsIEMtS2VybWl0IHRvIFNFVAotICAgQVRUUklC VVRFUyBPRkYuIEJldHRlciB5ZXQsIHN3aXRjaCB0byBhIHJlYWwgS2VybWl0IHByb2dyYW0uCi0K LSAgIFNvbWUgY29tbXVuaWNhdGlvbiBzb2Z0d2FyZSBjbGFpbXMgdG8gaW1wbGVtZW50IEtlcm1p dCBzbGlkaW5nIHdpbmRvd3MsCi0gICBidXQgZG9lcyBzbyBpbmNvcnJlY3RseS4gSWYgc2xpZGlu ZyB3aW5kb3cgdHJhbnNmZXJzIGZhaWwsIHNldAotICAgQy1LZXJtaXQncyB3aW5kb3cgc2l6ZSB0 byB0aGUgc21hbGxlc3Qgb25lIHRoYXQgd29ya3MsIGZvciBleGFtcGxlLCBTRVQKLSAgIFdJTkRP VyAxLgotCi0gICBGb3IgbG90cyBtb3JlIGRldGFpbCBhYm91dCBob3cgdG8gY29wZSB3aXRoIGRl ZmVjdGl2ZSBLZXJtaXQgcGFydG5lcnMsCi0gICBzZWU6Ci0KLSAgICAgKiBbODZdQ29waW5nIHdp dGggRmF1bHR5IEtlcm1pdCBJbXBsZW1lbnRhdGlvbnMgKEMtS2VybWl0IDcuMCBhbmQKLSAgICAg ICBsYXRlcikuCi0gICAgICogWzg3XUNvcGluZyB3aXRoIEJyb2tlbiBLZXJtaXQgUGFydG5lcnMg KEMtS2VybWl0IDguMCBhbmQgbGF0ZXIpLgotCi0gICBUaGUgVU5JWCB2ZXJzaW9uIG9mIEMtS2Vy bWl0IGRpc2NhcmRzIGNhcnJpYWdlIHJldHVybnMgd2hlbiByZWNlaXZpbmcKLSAgIGZpbGVzIGlu IHRleHQgbW9kZS4gVGh1cywgImJhcmUiIGNhcnJpYWdlIHJldHVybnMgKHNvbWV0aW1lcyB1c2Vk IHRvCi0gICBhY2hpZXZlIG92ZXJzdHJpa2luZykgYXJlIGxvc3QuCi0KLTExLiBTQ1JJUFQgUFJP R1JBTU1JTkcKLQotICAgWyBbODhdVG9wIF0gWyBbODldQ29udGVudHMgXSBbIFs5MF1QcmV2aW91 cyBdCi0KLTExLjEuIENvbW1lbnRzIFZlcnN1cyB0aGUgU0NSSVBUIENvbW1hbmQKLQotICAgUmVt ZW1iZXIgdGhhdCAiOyIgYW5kICIjIiBpbnRyb2R1Y2UgY29tbWVudHMgd2hlbiAoYSkgdGhleSBh cmUgdGhlCi0gICBmaXJzdCBjaGFyYWN0ZXIgb24gdGhlIGxpbmUsIG9yIChiKSB0aGV5IGFyZSBw cmVjZWRlZCBieSBhdCBsZWFzdCBvbmUKLSAgIGJsYW5rIG9yIHRhYiB3aXRoaW4gYSBsaW5lLiBU aHVzIGNvbnN0cnVjdGlvbnMgbGlrZToKLQotICBJTlBVVCA1IDsKLSAgU0NSSVBUIH4wICMtLSMt LSMKLQotICAgbXVzdCBiZSBjb2RlZCB1c2luZyBiYWNrc2xhc2ggbm90YXRpb24gdG8ga2VlcCB0 aGUgZGF0YSBmcm9tIGJlaW5nCi0gICBpZ25vcmVkOgotCi0gIElOUFVUIDUgXDU5ICAgICAgICAg ICAgICAgICAgIDsgNTkgaXMgdGhlIGRlY2ltYWwgQVNDSUkgY29kZSBmb3IgIjsiCi0gIFNDUklQ VCB+MCBcMzUtLSMtLSMgICAgICAgICAgIDsgNDMgaXMgdGhlIGRlY2ltYWwgQVNDSUkgY29kZSBm b3IgIiMiCi0KLSAgIG9yLCBtb3JlIHNpbXBseToKLQotICBJTlBVVCA1IFw7ICAgICAgICAgICAg ICAgICAgICA7IEp1c3QgcXVvdGUgdGhlIHNlbWljb2xvbgotICBTQ1JJUFQgfjAgXCMtLSMtLSMg ICAgICAgICAgICA7IEp1c3QgcXVvdGUgdGhlICIjIgotCi0xMS4yLiBBbHBoYWJldGljIENhc2Ug YW5kIHRoZSBJTlBVVCBDb21tYW5kCi0KLSAgIElOUFVUIGFuZCBNSU5QVVQgY2FzZWxlc3Mgc3Ry aW5nIGNvbXBhcmlzb25zIGRvIG5vdCB3b3JrIGZvciBub24tQVNDSUkKLSAgIChpbnRlcm5hdGlv bmFsKSBjaGFyYWN0ZXJzLiBXb3JrYXJvdW5kOiBTRVQgSU5QVVQgQ0FTRSBPQlNFUlZFLiBFdmVu Ci0gICB0aGVuLCB0aGUgImxleGljYWxseSBsZXNzIHRoYW4iIGFuZCAibGV4aWNhbGx5IGdyZWF0 ZXIgdGhhbiIgb3BlcmF0aW9ucwotICAgKElGIExMVCwgSUYgTEdUKSBwcm9iYWJseSB3b24ndCB3 b3JrIGFzIGV4cGVjdGVkLiBUaGUgc2FtZSBpcyB0cnVlIGZvcgotICAgdGhlIGNhc2UtY29udmVy c2lvbiBmdW5jdGlvbnMgXEZsb3dlcigpIGFuZCBcRnVwcGVyKCkuIEMtS2VybWl0IGRvZXMKLSAg IG5vdCBrbm93IHRoZSBjb2xsYXRpbmcgc2VxdWVuY2UgZm9yIGRpZmZlcmVudCBjaGFyYWN0ZXIg c2V0cyBhbmQKLSAgIGxhbmd1YWdlcy4gKE9uIHRoZSBvdGhlciBoYW5kLCBpdCBtaWdodCB3b3Jr IGRlcGVuZGluZyBvbiBzdWNoIGl0ZW1zIGFzCi0gICBob3cgS2VybWl0IHdhcyBsaW5rZWQsIHdo ZXRoZXIgeW91ciBvcGVyYXRpbmcgc3VwcG9ydHMgImxvY2FsZXMiLCBldGMpCi0KLTExLjMuIE5V TCAoMCkgQ2hhcmFjdGVycyBpbiBDLUtlcm1pdCBDb21tYW5kcwotCi0gICBZb3UgY2FuJ3QgaW5j bHVkZSBhIE5VTCBjaGFyYWN0ZXIgKFwwKSBpbiBDLUtlcm1pdCBjb21tYW5kIHRleHQgd2l0aG91 dAotICAgdGVybWluYXRpbmcgdGhlIGNoYXJhY3RlciBzdHJpbmcgaW4gd2hpY2ggaXQgYXBwZWFy cy4gRm9yIGV4YW1wbGU6Ci0KLSAgZWNobyBJbiB0aGVzZSBicmFja2V0cyBbXDBdIGlzIGEgTlVM Ci0KLSAgIHdpbGwgZWNobyAiSW4gdGhlc2UgYnJhY2tldHMgWyIuIFRoaXMgYXBwbGllcyB0byBF Q0hPLCBJTlBVVCwgT1VUUFVULAotICAgYW5kIGFsbCBvdGhlciBjb21tYW5kcyAoYnV0IHlvdSBj YW4gcmVwcmVzZW50IE5VTCBieSAiXE4iIGluIGFuIE9VVFBVVAotICAgc3RyaW5nKS4gVGhpcyBp cyBiZWNhdXNlIEMtbGFuZ3VhZ2Ugc3RyaW5ncyBhcmUgdGVybWluYXRlZCBpbnRlcm5hbGx5Ci0g ICBieSB0aGUgTlVMIGNoYXJhY3RlciwgYW5kIGl0IGFsbG93cyBhbGwgb2YgQy1LZXJtaXQncyBz dHJpbmcgY29tcGFyaXNvbgotICAgYW5kIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgdG8gd29yayBp biB0aGUgbm9ybWFsICJDIiB3YXkuCi0KLSAgIFRvIGlsbHVzdHJhdGU6Ci0KLSAgSU5QVVQgNSBc MAotCi0gICBpcyBlcXVpdmFsZW50IHRvOgotCi0gIElOUFVUIDUKLQotICAgYW5kOgotCi0gIElO UFVUIDUgQUJDXDBERUYKLQotICAgaXMgZXF1aXZhbGVudCB0bzoKLQotICBJTlBVVCA1IEFCQwot Ci0gICBJTlBVVCBvcGVyYXRpb25zIGRpc2NhcmQgYW5kIGlnbm9yZSBOVUwgY2hhcmFjdGVycyB0 aGF0IGFycml2ZSBmcm9tIHRoZQotICAgY29tbXVuaWNhdGlvbiBkZXZpY2UsIG1lYW5pbmcgdGhh dCB0aGV5IGRvIG5vdCBmaWd1cmUgaW50byBtYXRjaGluZwotICAgb3BlcmF0aW9ucyAoZS5nLiBB PE5VTD5CIG1hdGNoZXMgQUIpOyB0aGV5IGFyZSBub3QgZGVwb3NpdGVkIGluIHRoZQotICAgSU5Q VVQgYnVmZmVyIChcdihpbnB1dCkpOyBhbmQgdGhleSBhcmUgbm90IGNvdW50ZWQgaW4gXHYoaW5j b3VudCksIHdpdGgKLSAgIHR3byBleGNlcHRpb25zOgotCi0gICAgMS4gQW4gYXJyaXZpbmcgTlVM IGNoYXJhY3RlciByZXN0YXJ0cyB0aGUgSU5QVVQgU0lMRU5DRSB0aW1lci4KLSAgICAyLiBBbiBh cnJpdmluZyBOVUwgY2hhcmFjdGVyIHRlcm1pbmF0ZXMgdGhlIElOUFVUIGNvbW1hbmQgd2l0aCB0 aGUKLSAgICAgICBTVUNDRVNTIGNvbmRpdGlvbiBpZiB0aGUgSU5QVVQgY29tbWFuZCB3YXMgZ2l2 ZW4gYW4gZW1wdHkgc2VhcmNoCi0gICAgICAgc3RyaW5nLiBJbiB0aGlzIGNhc2UgXHYoaW5jb3Vu dCkgaXMgc2V0IHRvIDEuCi0KLSAgIEFsc28sIHRoZSBcdihpbmNoYXIpIHZhcmlhYmxlIGlzIG51 bGwgKGNvbXBsZXRlbHkgZW1wdHkpIGlmIHRoZSBsYXN0Ci0gICBJTlBVVCBjaGFyYWN0ZXIgd2Fz IE5VTC4gVGhhdCBpcywgdGhlcmUgaXMgbm8gd2F5IHRvIHRlbGwgb25seSBieQotICAgbG9va2lu ZyBhdCBcdihpbmNoYXIpIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYSBOVUwgdGhhdCB3YXMgSU5Q VVQgYW5kCi0gICBubyBJTlBVVCBhdCBhbGwuIElmIHRoZSBJTlBVVCBjb21tYW5kIHN1Y2NlZWRl ZCBidXQgXHYoaW5jaGFyKSBpcwotICAgZW1wdHksIHRoZW4gYSBOVUwgY2hhcmFjdGVyIHdhcyBp bnB1dC4gQWxzbywgXHYoaW5jb3VudCkgd2lsbCBiZSBzZXQgdG8KLSAgIDEuCi0KLSAgIEhlcmUn cyBhIHNhbXBsZSBzY3JpcHQgZnJhZ21lbnQgdG8gcmVhZCBjaGFyYWN0ZXJzLCBwb3NzaWJseSBp bmNsdWRpbmcKLSAgIE5VTCwgZnJvbSB0aGUgY29tbXVuaWNhdGlvbiBjb25uZWN0aW9uIGFuZCB3 cml0ZSB0aGVtIHRvIGEgZmlsZToKLQotICB3aGlsZSB0cnVlIHsKLSAgICAgIGlucHV0IDEgICAg ICAgICAgICAgICAgICAgICAgOyByZWFkIG9uZSBieXRlCi0gICAgICBpZiBmYWlsIGJyZWFrICAg ICAgICAgICAgICAgIDsgdGltZWQgb3V0IG9yIGNvbm5lY3Rpb24gY2xvc2VkCi0gICAgICBmd3Jp dGUgL2NoYXIgXCVjIFx2KGluY2hhcikgIDsgcmVjb3JkIHRoZSBieXRlCi0gIH0KLQotICAgVGhp cyB3b3JrcyBiZWNhdXNlIHdoZW4gXHYoaW5jaGFyKSBpcyBOVUwsIHRoYXQncyBlcXVpdmFsZW50 IHRvIEZXUklURQotICAgL0NIQVIgaGF2aW5nIG5vIHRleHQgYXJndW1lbnQgYXQgYWxsLCBpbiB3 aGljaCBjYXNlIGl0IHdyaXRlcyBhIE5VTAotICAgY2hhcmFjdGVyLgotCi0gICBcdihpbmNvdW50 KSBhbmQgXHYoaW5jaGFyKSBhcmUgTk9UIGFmZmVjdGVkIGJ5IHRoZSBDTEVBUiBjb21tYW5kLgot Ci0xMS40LiBcZmZpbGVzKCkgYW5kIFxmbmV4dGZpbGUoKSBQZWN1bGlhcml0aWVzCi0KLSAgIFRo ZSBmb2xsb3dpbmcgc2NyaXB0IHByb2dyYW06Ci0KLSAgZm9yIFwlaSAxIFxmZmlsZXMob29mYS4q KSAxIHsKLSAgICAgIHNlbmQgXGZuZXh0ZmlsZSgpCi0gIH0KLQotICAgZGlkIG5vdCB3b3JrIGFz IGV4cGVjdGVkIGluIEMtS2VybWl0IDYuMCBhbmQgZWFybGllciBidXQgZG9lcyB3b3JrIGluCi0g ICBDLUtlcm1pdCA3LjAgYW5kIGxhdGVyLgotCi0xMS41LiBDb21tYW5kcyBUaGF0IEhhdmUgT25s eSBMb2NhbCBFZmZlY3QKLQotICAgQ2VydGFpbiBzZXR0aW5ncyBhcmUgbG9jYWwgdG8gZWFjaCBj b21tYW5kIGxldmVsLCBtZWFuaW5nIHRoYXQKLSAgIHN1Ym9yZGluYXRlIGNvbW1hbmQgbGV2ZWxz IChtYWNyb3Mgb3IgY29tbWFuZCBmaWxlcykgY2FuIGNoYW5nZSB0aGVtCi0gICB3aXRob3V0IGFm ZmVjdGluZyB0aGVpciB2YWx1ZXMgYXQgaGlnaGVyIGNvbW1hbmQgbGV2ZWxzLiBXaGVuIGEgbmV3 Ci0gICBjb21tYW5kIGxldmVsIGlzIGludm9rZWQsIHRoZSB2YWx1ZSBpcyBpbmhlcml0ZWQgZnJv bSB0aGUgcHJldmlvdXMKLSAgIGxldmVsLiBUaGVzZSBzZXR0aW5ncyBhcmU6Ci0KLSAgQ0FTRQot ICBDT1VOVCBhbmQgXHYoY291bnQpCi0gIElOUFVUIENBU0UKLSAgSU5QVVQgVElNRU9VVAotICBN QUNSTyBFUlJPUgotICBRVUlFVAotICBUQUtFIEVSUk9SCi0KLSAgIFRoaXMgYXJyYW5nZW1lbnQg YWxsb3dzIENBU0UsIFRJTUVPVVQsIGFuZCBFUlJPUiBzZXR0aW5ncywgd2hpY2ggYXJlCi0gICB1 c2VkIHRvIGNvbnRyb2wgYXV0b21hdGljIGV4aXQgZnJvbSBhIGNvbW1hbmQgZmlsZSBvciBtYWNy byB1cG9uIGVycm9yLAotICAgdG8gYmUgYXV0b21hdGljYWxseSByZXN0b3JlZCB3aGVuIHRoZSBj b21tYW5kIGZpbGUgb3IgbWFjcm8gZXhpdHMuCi0KLSAgIFRoZSBDT1VOVCB2YXJpYWJsZSBmb2xs b3dzIHRoaXMgcnVsZSB0b28sIHdoaWNoIHBlcm1pdHMgbmVzdGVkIFNFVAotICAgQ09VTlQgLyBJ RiBDT1VOVCBsb29wcywgYXMgaW4gdGhpcyBleGFtcGxlIGluIHdoaWNoIHRoZSBpbm5lciBsb29w Ci0gICBjb3VudHMgZG93biBmcm9tIHRoZSBjdXJyZW50IENPVU5UIHZhbHVlIG9mIHRoZSBvdXRl ciBsb29wICh0cnkgaXQpOgotCi0gIERFRklORSBJTk5FUiBXSElMRSBDT1VOVCB7IFdSSVRFIFND UkVFTiB7ICAgSW5uZXI6fSwgU0hPVyBDT1VOVCB9Ci0gIFNFVCBDT1VOVCA1Ci0gIFdISUxFIENP VU5UIHsgV1JJVEUgU0NSRUVOIE91dGVyOiwgU0hPVyBDT1VOVCwgRE8gSU5ORVIgfQotCi0gICBL ZWVwIGluIG1pbmQgdGhhdCBhbiBpbmZlcmlvciBjb21tYW5kIGxldmVsIGNhbm5vdCBtYW5pcHVs YXRlIHRoZSBDT1VOVAotICAgdmFsdWUgaGVsZCBieSBhIGhpZ2hlciBsZXZlbC4gRm9yIGV4YW1w bGU6Ci0KLSAgREVGSU5FIE9PRkEgU0hPVyBDT1VOVCwgSUYgQ09VTlQgR09UTyBMT09QCi0gIFNF VCBDT1VOVCA1Ci0gIDpMT09QCi0gIE9PRkEKLSAgRUNITyBEb25lCi0KLSAgIHJlc3VsdHMgaW4g YW4gaW5maW5pdGUgbG9vcDsgdGhlIENPVU5UIHZhbHVlIHJlbWFpbnMgYXQgNSBiZWNhdXNlIGl0 IGlzCi0gICBuZXZlciBkZWNyZW1lbnRlZCBhdCB0aGUgc2FtZSBsZXZlbCBhdCB3aGljaCBpdCB3 YXMgc2V0LgotCi0xMS42LiBMaXRlcmFsIEJyYWNlcyBpbiBGdW5jdGlvbiBDYWxscwotCi0gICBT aW5jZSBicmFjZXMgYXJlIHVzZWQgaW4gZnVuY3Rpb24gY2FsbHMgdG8gaW5kaWNhdGUgZ3JvdXBp bmcsIHRoZXJlIGlzCi0gICBubyB3YXkgdG8gcGFzcyBsaXRlcmFsIGJyYWNlcyB0byB0aGUgZnVu Y3Rpb24gaXRzZWxmLiBTb2x1dGlvbjogRGVmaW5lCi0gICBhIHZhcmlhYmxlIGNvbnRhaW5pbmcg dGhlIHN0cmluZyB0aGF0IGhhcyBicmFjZXMuIEV4YW1wbGU6Ci0KLSAgZGVmaW5lIFwlYSBhYntj ZAotICBlY2hvIFxmc3Vic3RyaW5nKFwlYSkKLSAgYWJ7Y2QKLQotICAgSWYgdGhlIHN0cmluZyBp cyB0byBzdGFydCB3aXRoIGEgbGVhZGluZyBicmFjZSBhbmQgZW5kIHdpdGggYSBjbG9zaW5nCi0g ICBicmFjZSwgdGhlbiBkb3VibGUgYnJhY2VzIG11c3QgYXBwZWFyIGFyb3VuZCB0aGUgc3RyaW5n ICh3aGljaCBpdHNlbGYKLSAgIGlzIGVuY2xvc2VkIGluIGJyYWNlcyk6Ci0KLSAgZGVmaW5lIFwl YSB7e3tmb299fX0KLSAgZWNobyBcZnN1YnN0cmluZyhcJWEpCi0gIHtmb299Ci0KLSAgIFRoaXMg YWxzbyB3b3JrcyBmb3IgYW55IG90aGVyIGtpbmQgb2Ygc3RyaW5nOgotCi0gIGRlZmluZSBcJWEg e3thYntjZH19Ci0gIGVjaG8gXGZzdWJzdHJpbmcoXCVhKQotICBhYntjZAotCi0xMS43LiBEZWZp bmluZyBWYXJpYWJsZXMgb24gdGhlIEMtS2VybWl0IENvbW1hbmQgTGluZQotCi0gICBUbyBkZWZp bmUgdmFyaWFibGVzIG9uIHRoZSBDLUtlcm1pdCBjb21tYW5kIGxpbmUsIHVzZSB0aGUgLUMKLSAg IGNvbW1hbmQtbGluZSBvcHRpb24gd2l0aCBvbmUgb3IgbW9yZSBERUZJTkUgb3IgQVNTSUdOIGNv bW1hbmRzLiBOb3RlCi0gICB0aGF0IHRoZSBDLUtlcm1pdCBjb21tYW5kIGxpbmUgbXVzdCBjb3Bl IHdpdGggdGhlIHF1b3RpbmcgcnVsZXMgb2YgeW91cgotICAgc2hlbGwuIEV4YW1wbGVzOgotCi0g IGtlcm1pdCAtQyAiZGVmaW5lIFxcJWEgZm9vLCBkZWZpbmUgcGhvbmVudW1iZXIgNzY1NDMyMSIK LQotICAgSW4gdGhpcyBjYXNlIHdlIGZvbGxvdyBVTklYIHF1b3RpbmcgcnVsZXMgYnkgZG91Ymxp bmcgdGhlIGJhY2tzbGFzaC4KLSAgIE9uY2UgQy1LZXJtaXQgc3RhcnRzLCB0aGUgXCVhIGFuZCBc bShwaG9uZW51bWJlcikgdmFyaWFibGVzIGFyZSBkZWZpbmVkCi0gICBhcyBpbmRpY2F0ZWQgYW5k IGNhbiBiZSB1c2VkIGluIHRoZSBub3JtYWwgd2F5LgotCi0gICBJbiBET1Mgb3IgV2luZG93cyBv ciBPUy8yIHRoZSBjb21tYW5kIHdvdWxkIGJlOgotCi0gIGtlcm1pdCAtQyAiZGVmaW5lIFwlJWEg Zm9vLCBkZWZpbmUgcGhvbmVudW1iZXIgNzY1NDMyMSIKLQotICAgSGVyZSB3ZSBuZWVkIHRvIGRv dWJsZSB0aGUgcGVyY2VudCBzaWduIHJhdGhlciB0aGFuIHRoZSBiYWNrc2xhc2gKLSAgIGJlY2F1 c2Ugb2YgRE9TIHNoZWxsIHF1b3RpbmcgcnVsZXMuCi0KLTExLjguIFBlci1DaGFyYWN0ZXIgRWNo byBDaGVjayB3aXRoIHRoZSBPVVRQVVQgQ29tbWFuZAotCi0gICBTb21ldGltZXMgdGhlIE9VVFBV VCBjb21tYW5kIG11c3QgYmUgdXNlZCB0byBzZW5kIGNvbW1hbmRzIG9yIGRhdGEgdG8gYQotICAg ZGV2aWNlIGluICJlY2hvcGxleCIgbW9kZSwgbWVhbmluZyB0aGF0IGNoYXJhY3RlcnMgbXVzdCBi ZSBzZW50IG9uZSBhdAotICAgYSB0aW1lLCBhbmQgdGhlIG5leHQgY2hhcmFjdGVyIGNhbiBub3Qg YmUgc2VudCB1bnRpbCB0aGUgZWNobyBmcm9tIHRoZQotICAgcHJldmlvdXMgb25lIGhhcyBiZWVu IHJlY2VpdmVkLiBGb3IgZXhhbXBsZSwgYSBjZXJ0YWluIFBCWCBtaWdodCBoYXZlCi0gICB0aGlz IGNoYXJhY3RlcmlzdGljLiBMZXQncyBzYXkgYSBLZXJtaXQgc2NyaXB0IGlzIHVzZWQgdG8gcHJv Z3JhbSB0aGUKLSAgIFBCWC4gSWYgY2hhcmFjdGVycyBhcmUgc2VudCB0b28gZmFzdCwgdGhleSBj YW4gYmUgbG9zdC4gSXQgd291bGQgc2VlbQotICAgdGhhdCB0aGUgY29tbWFuZDoKLQotICBTRVQg T1VUUFVUIFBBQ0lORyBtaWxsaXNlY29uZHMKLQotICAgY291bGQgYmUgdXNlZCB0byB0YWtlIGNh cmUgb2YgdGhpcywgYnV0IHRoZSBwYWNpbmcgaW50ZXJ2YWwgaXMgY29uc3RhbnQKLSAgIGFuZCBt dXN0IGJlIHNldCBsYXJnZSBlbm91Z2ggdG8gYWxsb3cgZXZlbiB0aGUgc2xvd2VzdCBlY2hvIHRv IGZpbmlzaC4KLSAgIElmIHRoZSBzY3JpcHQgaXMgbGFyZ2UgKGFuIGFjdHVhbCBleGFtcGxlIGlz IDE0LDAwMCBsaW5lcyBsb25nKSwgdGhpcwotICAgY2FuIGNhdXNlIGl0IHRvIHRha2UgaG91cnMg bG9uZ2VyIHRoYW4gaXQgbmVlZHMgdG8uCi0KLSAgIEhlcmUgaXMgYSBtYWNybyB5b3UgY2FuIHVz ZSB0byBPVVRQVVQgYSBzdHJpbmcgaW4gYW4gRWNob3BsZXgKLSAgIGVudmlyb25tZW50OgotCi0g IGRlZmluZSBYT1VUUFVUIHsKLSAgICAgIGxvY2FsIFwlYyBcJWkKLSAgICAgIHNldCBvdXRwdXQg cGFjaW5nIDAKLSAgICAgIGZvciBcJWkgMSBcZmxlbihcJSopIDEgewotICAgICAgICAgIGFzZyBc JWMgXGZzdWJzdHIoXCUqLFwlaSwxKQotICAgICAgICAgIG91dHB1dCBcJWMKLSAgICAgICAgICBp bnB1dCAyIFwlYwotICAgICAgfQotICB9Ci0KLSAgIEMtS2VybWl0IDcuMCBvciBsYXRlciBpcyBy ZXF1aXJlZC4KLQotICAgSXQgc2VuZHMgb25lIGNoYXJhY3RlciBhdCBhIHRpbWUgYW5kIHRoZW4g d2FpdHMgdXAgdG8gMiBzZWNvbmRzIGZvciB0aGUKLSAgIGNoYXJhY3RlciB0byBiZSBlY2hvZWQg YmFjaywgYnV0IGNvbnRpbnVlcyB0byB0aGUgbmV4dCBjaGFyYWN0ZXIgYXMKLSAgIHNvb24gYXMg dGhlIGVjaG8gYXBwZWFycywgc28gbm8gdGltZSBpcyB3YXN0ZWQuIFlvdSBjYW4gYWRkIGFuIElG IEZBSUwKLSAgIGNsYXVzZSBhZnRlciB0aGUgSU5QVVQgaW4gY2FzZSB5b3Ugd2FudCB0byBkbyBz b21ldGhpbmcgc3BlY2lhbCBhYm91dAotICAgZmFpbHVyZSB0byBkZXRlY3QgYW4gZWNobyB3aXRo aW4gdGhlIHRpbWVvdXQgcGVyaW9kLiBPYnZpb3VzbHkgeW91IGNhbgotICAgYWxzbyBjaGFuZ2Ug dGhlIDItc2Vjb25kIGxpbWl0LCBhbmQgYWRqdXN0IHRoZSBzY3JpcHQgaW4gYW55IG90aGVyCi0g ICBkZXNpcmVkIHdheS4KLQotMTEuOS4gU2NyaXB0ZWQgRmlsZSBUcmFuc2ZlcgotCi0gICBTb21l dGltZXMgYSB1c2VyIGNvbXBsYWlucyB0aGF0IHdoZW4gc2hlIG1ha2VzIGEgY29ubmVjdGlvbiBi eSBoYW5kLAotICAgbG9ncyBpbiwgYW5kIHRyYW5zZmVycyBhIGZpbGUsIHRoZXJlIGFyZSBubyBw cm9ibGVtcywgYnV0IHdoZW4gc2hlCi0gICBzY3JpcHRzIHRoZSB0aGUgZXhhY3Qgc2FtZSBzZXF1 ZW5jZSwgdGhlIGZpbGUgdHJhbnNmZXIgYWx3YXlzIGZhaWxzCi0gICBhZnRlciBhIGZldyBwYWNr ZXRzLiBIZXJlJ3MgYSBzY2VuYXJpbyB3aGVyZSB0aGlzIGNhbiBoYXBwZW46Ci0KLSAgICAxLiBV cG9uIGxvZ2dpbmcgaW4gdG8gdGhlIHJlbW90ZSBjb21wdXRlciwgaXQgc2VuZHMgYSAiV2hhdCBB cmUgWW91PyIKLSAgICAgICBlc2NhcGUgc2VxdWVuY2UuCi0gICAgMi4gV2hlbiB5b3UgbG9nIGlu IGludGVyYWN0aXZlbHksIHlvdXIgdGVybWluYWwgZW11bGF0b3Igc2VuZHMgdGhlCi0gICAgICAg cmVzcG9uc2UuIFRoaXMgaXMgaW52aXNpYmxlIHRvIHlvdTsgeW91IGRvbid0IGtub3cgaXQncyBo YXBwZW5pbmcuCi0gICAgMy4gV2hlbiB5b3Ugc2NyaXB0IHRoZSBsb2dpbiwgYW5kIGJlZ2luIGEg ZmlsZSB0cmFuc2ZlciBpbW1lZGlhdGVseQotICAgICAgIHVwb24gbG9nZ2luZyBpbiwgdGhlIGhv c3Qgc3RpbGwgc2VuZHMgdGhlICJXaGF0IEFyZSBZb3U/IiBzZXF1ZW5jZS4KLSAgICAgICBLZXJt aXQncyBJTlBVVCBFQ0hPIHNldHRpbmcgaXMgT04gYnkgZGVmYXVsdCwgc28gdGhlIGVzY2FwZQot ICAgICAgIHNlcXVlbmNlIHBhc3NlcyB0aHJvdWdoIHRvIHRoZSB0ZXJtaW5hbCwgYW5kIHRoZSB0 ZXJtaW5hbCBzZW5kcyBpdHMKLSAgICAgICByZXNwb25zZS4gQnV0IGJ5IHRoaXMgdGltZSBLZXJt aXQgaGFzIGFscmVhZHkgc3RhcnRlZCB0aGUgZmlsZQotICAgICAgIHRyYW5zZmVyLgotICAgIDQu IEJ5IGRlZmF1bHQsIHRoZSBsb2NhbCBLZXJtaXQgcHJvZ3JhbSBleGFtaW5lcyB0aGUga2V5Ym9h cmQgZm9yCi0gICAgICAgaW50ZXJydXB0aW9uIGNoYXJhY3RlcnMgYmV0d2VlbiBldmVyeSBwYWNr ZXQuIFRoZSAiV2hhdCBBcmUgWW91IgotICAgICAgIHJlc3BvbnNlIGlzIHNpdHRpbmcgaW4gdGhl IGtleWJvYXJkIGJ1ZmZlci4gRXZlbnR1YWxseSBLZXJtaXQgd2lsbAotICAgICAgIHJlYWQgYSBj aGFyYWN0ZXIgc3VjaCBhcyAiYyIgdGhhdCBpcyBhIHZhbGlkIGludGVycnVwdGlvbgotICAgICAg IGNoYXJhY3RlciwgYW5kIHRoZSBmaWxlIHRyYW5zZmVyIHN0b3BzIHdpdGggIlVzZXIgY2FuY2Vs ZWQiLgotCi0gICBUaGUgcmlnaHQgd2F5IHRvIGhhbmRsZSB0aGlzIHNpdHVhdGlvbiBpcyB0byBo YXZlIHlvdXIgbG9vayBmb3IgdGhlCi0gICAiV2hhdCBBcmUgWW91PyIgc2VxdWVuY2UgYW5kIHNl bmQgdGhlIHJlc3BvbnNlIGl0c2VsZiwgYXMgZGVzY3JpYmVkIGluCi0gICBVc2luZyBDLUtlcm1p dCwgcHAuNDI5LTQzMS4gT3IgeW91IGNhbiB3b3JrIGFyb3VuZCBpdCBieSB0ZWxsaW5nIHRoZQot ICAgbG9jYWwgS2VybWl0IHRvICJzZXQgaW5wdXQgZWNobyBvZmYiIGFuZC9vciAic2V0IHRyYW5z ZmVyIGludGVycnVwdGlvbgotICAgb2ZmIi4KLQotMTEuMTAuIEhleGFkZWNpbWFsIGFyaXRobWV0 aWMuLi4KLQotICAgQy1LZXJtaXQgY2FuIGRvIGJvdGggaW50ZWdlciBhbmQgZmxvYXRpbmctcG9p bnQgYXJpdGhtZXRpYywgaW4gYm90aAotICAgb3JkaW5hcnkgYWxnZWJyYWljIG5vdGF0aW9uIGFu ZCBpbiBMaXNwIFMtRXhwcmVzc2lvbiBub3RhdGlvbi4gQWxsCi0gICBhcml0aG1ldGljIG9wZXJh dG9ycyBhbmQgZnVuY3Rpb25zIG9wZXJhdGUgb25seSBvbiBkZWNpbWFsIG51bWJlcnMuIEl0Ci0g ICBpcyBwb3NzaWJsZSwgaG93ZXZlciwgdG8gd3JpdGUgc2NyaXB0cyB0aGF0IG9wZXJhdGUgb24g aGV4YWRlY2ltYWwKLSAgIG51bWJlcnMuIFRoaXMgaXMgZG9uZSBieSBjb252ZXJ0aW5nIHRoZW0g dG8gZGVjaW1hbCBwcmlvciB0byBhbnkKLSAgIGFyaXRobWV0aWMgb3BlcmF0aW9ucywgYW5kIHRo ZW4gY29udmVydGluZyB0aGVtIGJhY2sgdG8gaGV4YWRlY2ltYWwgZm9yCi0gICBkaXNwbGF5LiBF eGFtcGxlOgotCi07IEVWQUxVQVRFIGlzIGEgY29tbWFuZCB0aGF0IGV2YWx1YXRlcyBhbiBhcml0 aG1ldGljIGV4cHJlc3Npb24uCi07IFNlZSBIRUxQIEVWQUxVQVRFIGZvciBkZXRhaWxzLiAgVGhp cyBpcyBqdXN0IGZvciBkZW1vbnN0cmF0aW9uLgotOyBBcml0aG1ldGljIGV4cHJlc3Npb25zIGNh biBiZSB1c2VkIGluIGFueSBjb250ZXh0IHdoZXJlIGEgbnVtYmVyCi07IGNhbiBiZSB1c2VkLiAg QWxzbywgdGhlIHNwZWNpYWwgbm90YXRpb246Ci07Ci07IC5cJWEgOjo9IGV4cHJlc3Npb24KLTsK LTsgZXZhbHVhdGlvbnMgdGhlIGV4cHJlc3Npb24gYW5kIGFzc2lnbnMgdGhlIHJlc3VsdCB0byB0 aGUgdmFyaWFibGUuCi07Ci0uXCVhIDo9IGZmZmUgICAgICAgICAgICAgICAgOyBTZXQgdmFyaWFi bGUgdG8gaGV4IHZhbHVlCi1zZXQgZXZhbCBvbGQgICAgICAgICAgICAgICAgOyBTZWUgSEVMUCBF VkFMCi1ldmFsIFxmaGV4Mm4oXCVhKSAgICAgICAgICAgOyBTaG93IHZhbHVlIG9mIHZhcmlhYmxl Ci1ldmFsIFxmaGV4Mm4oXCVhKSArIDEgICAgICAgOyBTaG93IHZhbHVlIG9mIGV4cHJlc3Npb24K LWV2YWwgXGZoZXgybihcJWEpICsgMiAgICAgICA7IFNob3cgdmFsdWUgb2YgZXhwcmVzc2lvbgot LlwleCA6Oj0gXGZoZXgybihcJWEpICsgMSAgIDsgQXNzaWduIHZhbHVlIG9mIGV4cHJlc3Npb24g dG8gdmFyaWFibGUKLWVjaG8gXGZuMmhleChcJXgpICAgICAgICAgICA7IERpc3BsYXkgdmFyaWFi bGUncyB2YWx1ZSBpbiBoZXgKLS5cJXggOjo9IFxmaGV4Mm4oXCVhKSArIDIgICA6IERpdHRvCi1l Y2hvIFxmbjJoZXgoXCV4KQotLlwleCA6Oj0gXGZoZXgybihcJWEpIHwgXGZoZXgybihmZmZmKSAg OyBTaW1pbGFybHkgZm9yIGxvZ2ljYWwgT1IKLWVjaG8gXGZuMmhleChcJXgpCi0uXCV4IDo6PSBc ZmhleDJuKFwlYSkgJiBcZmhleDJuKGZmZmYpICA7IGFuZCBsb2dpY2FsIEFORAotZWNobyBcZm4y aGV4KFwleCkKLQotICAgQnkgdGhlIHdheSwgeW91IG1pZ2h0IGJlIHRlbXB0ZWQgdG8gdXNlIEtl cm1pdCdzIFx4bm4gbm90YXRpb24gdG8gcGx1ZwotICAgaGV4IG51bWJlcnMgaW50byBhcml0aG1l dGljIGV4cHJlc3Npb25zIGJ1dCB0aGlzIGRvZXNuJ3Qgd29yay4gVGhhdAotICAgbm90YXRpb24g aXMgc3RyaWN0bHkgZm9yIGJ5dGVzIChoZXggcmVwcmVzZW50YXRpb24gb2YgY2hhcmFjdGVyCi0g ICB2YWx1ZXMpLCBub3QgZm9yIG51bWJlcnMuCi0KLTExLjExLiBPdGhlci4uLgotCi0gICBFc2Nh cGUgc2VxdWVuY2VzIChvciBhbnkgc3RyaW5ncyB0aGF0IGNvbnRhaW4gY29udHJvbCBjaGFyYWN0 ZXJzKSBjYW4ndAotICAgYmUgdXNlZCBhcyBsYWJlbHMsIEdPVE8gdGFyZ2V0cywgb3IgU1dJVENI IGNhc2VzLgotCi0gICBbIFs5MV1Ub3AgXSBbIFs5Ml1Db250ZW50cyBdIFsgWzkzXUMtS2VybWl0 IEhvbWUgXSBbIFs5NF1DLUtlcm1pdCA4LjAKLSAgIE92ZXJ2aWV3IF0gWyBbOTVdS2VybWl0IEhv bWUgXQotICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KLQotICAgQy1LZXJtaXQgOC4wIFVuaXggSGludHMgYW5kIFRp cHMgLyBbOTZdVGhlIEtlcm1pdCBQcm9qZWN0IC8KLSAgIFs5N11rZXJtaXRAY29sdW1iaWEuZWR1 IC8gMzAgSnVuZSAyMDExCi0KLVJlZmVyZW5jZXMKLQotICAgMS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUvCi0gICAyLiBtYWlsdG86a2VybWl0QGNvbHVtYmlhLmVkdQotICAgMy4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSAgIDQuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9rOTUuaHRtbAotICAgNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQuaHRtbAotICAgNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr c2NyaXB0cy5odG1sCi0gICA3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY3VycmVu dC5odG1sCi0gICA4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvd2hhdHNuZXcuaHRt bAotICAgOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2ZhcS5odG1sCi0gIDEwLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc3VwcG9ydC5odG1sCi0gIDExLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwKLSAgMTIuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbAotICAxMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2s5NS5odG1sCi0gIDE0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdC5odG1sCi0gIDE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0 b3IuaHRtbAotICAxNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1s I3gwCi0gIDE3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDEK LSAgMTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN4MgotICAx OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3gzCi0gIDIwLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDQKLSAgMjEuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN4NQotICAyMi4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3g2Ci0gIDIzLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDcKLSAgMjQuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN4OAotICAyNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrY2J3ci5odG1sI3g5Ci0gIDI2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjYndyLmh0bWwjeDEwCi0gIDI3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tjYndyLmh0bWwjeDExCi0gIDI4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tjYndyLmh0bWwjdG9wCi0gIDI5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tj YndyLmh0bWwjY29udGVudHMKLSAgMzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2Nid3IuaHRtbCN4MgotICAzMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3 ci5odG1sI3RvcAotICAzMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5o dG1sI2NvbnRlbnRzCi0gIDMzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndy Lmh0bWwjeDIKLSAgMzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jazYwbWFudWFs Lmh0bWwKLSAgMzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Mi5odG1s Ci0gIDM2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2s2MG1hbnVhbC5odG1sCi0g IDM3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDUKLSAg MzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbAotICAzOS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gyLjIKLSAgNDAu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC43LjIKLSAg NDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OQotICA0 Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3RvcAotICA0My4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI2NvbnRlbnRzCi0gIDQ0 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDMKLSAgNDUuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN4MQotICA0Ni4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3RvcAotICA0Ny4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI2NvbnRlbnRzCi0gIDQ4LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDQKLSAgNDkuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN4MgotICA1MC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3RvcAotICA1MS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrY2J3ci5odG1sI2NvbnRlbnRzCi0gIDUyLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDUKLSAgNTMuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN4MwotICA1NC4gZnRwOi8vZnRwLmlzaS5lZHUvaW4tbm90 ZXMvcmZjMTEyMi50eHQKLSAgNTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Ni d3IuaHRtbCN0b3AKLSAgNTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3Iu aHRtbCNjb250ZW50cwotICA1Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3 ci5odG1sI3g2Ci0gIDU4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0 bWwjeDQKLSAgNTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN0 b3AKLSAgNjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCNjb250 ZW50cwotICA2MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3g3 Ci0gIDYyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDUKLSAg NjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jazYwbWFudWFsLmh0bWwKLSAgNjQu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN4MTAKLSAgNjUuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN0b3AKLSAgNjYuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCNjb250ZW50cwotICA2Ny4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3g4Ci0gIDY4LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDYKLSAgNjkuIGZ0cDovL2Z0cC5p c2kuZWR1L2luLW5vdGVzL3JmYzIyMTcudHh0Ci0gIDcwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tjYndyLmh0bWwjdG9wCi0gIDcxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjYndyLmh0bWwjY29udGVudHMKLSAgNzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2Nid3IuaHRtbCN4OQotICA3My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrY2J3ci5odG1sI3g3Ci0gIDc0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tjYndyLmh0bWwjdG9wCi0gIDc1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tj YndyLmh0bWwjY29udGVudHMKLSAgNzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2Nid3IuaHRtbCN4MTAKLSAgNzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Ni d3IuaHRtbCN4OAotICA3OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sCi0gIDc5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjdG9w Ci0gIDgwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjY29udGVu dHMKLSAgODEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN4MTEK LSAgODIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN4OQotICA4 My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrNjBtYW51YWwuaHRtbAotICA4NC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaTcwLmh0bQotICA4NS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2hwNDguaHRtbAotICA4Ni4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIyCi0gIDg3LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDE1Ci0gIDg4LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjdG9wCi0gIDg5LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjY29udGVudHMKLSAgOTAuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN4MTAKLSAgOTEuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN0b3AKLSAgOTIuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCNjb250ZW50cwotICA5My4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotICA5NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrODAuaHRtbAotICA5NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2lu ZGV4Lmh0bWwKLSAgOTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1s Ci0gIDk3LiBtYWlsdG86a2VybWl0QGNvbHVtYmlhLmVkdQoKZGlmZiAtLWdpdCBhL2NrZXJtaXQt OS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjY2ZnLnR4dCBiL2NrZXJtaXQtOS4wLjMw Mi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjY2ZnLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDE4NWMzZC4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tl cm1pdC05LjAuMzAyL2NrY2NmZy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNzM4ICswLDAgQEAK LQotICAgWzFdVGhlIENvbHVtYmlhIENyb3duIFRoZSBLZXJtaXQgUHJvamVjdCB8IENvbHVtYmlh IFVuaXZlcnNpdHkKLSAgIDYxMiBXZXN0IDExNXRoIFN0cmVldCwgTmV3IFlvcmsgTlkgMTAwMjUg VVNBIG8gWzJda2VybWl0QGNvbHVtYmlhLmVkdQotICAgLi4uc2luY2UgMTk4MQotICAgWzNdSG9t ZSBbNF1LZXJtaXQgOTUgWzVdQy1LZXJtaXQgWzZdU2NyaXB0cyBbN11DdXJyZW50IFs4XU5ldyBb OV1GQVEKLSAgIFsxMF1TdXBwb3J0Ci0KLUMtS2VybWl0IENvbmZpZ3VyYXRpb24gT3B0aW9ucwot Ci0gICBBcyBvZjogQy1LZXJtaXQgOS4wLjMwMCwgMzAgSnVuZSAyMDExCi0gICBUaGlzIHBhZ2Ug bGFzdCB1cGRhdGVkOiBGcmkgSnVsIDEgMTU6NDg6MjEgMjAxMSAoTmV3IFlvcmsgVVNBIFRpbWUp Ci0KLSAgICAgSUYgWU9VIEFSRSBSRUFESU5HIEEgUExBSU4tVEVYVCB2ZXJzaW9uIG9mIHRoaXMg ZG9jdW1lbnQsIG5vdGUgdGhhdAotICAgICB0aGlzIGZpbGUgaXMgYSBwbGFpbi10ZXh0IGR1bXAg b2YgYSBXZWIgcGFnZS4gWW91IGNhbiB2aXNpdCB0aGUKLSAgICAgb3JpZ2luYWwgKGFuZCBwb3Nz aWJseSBtb3JlIHVwLXRvLWRhdGUpIFdlYiBwYWdlIGhlcmU6Ci0KLSAgWzExXWh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbAotCi0gICBbIFsxMl1DLUtlcm1pdCBIb21l IF0gWyBbMTNdS2VybWl0IEhvbWUgXQotCi0gIENPTlRFTlRTCi0KLSAgMS4gWzE0XUZJTEUgVFJB TlNGRVIKLSAgMi4gWzE1XVNFUklBTCBDT01NVU5JQ0FUSU9OIFNQRUVEUwotICAzLiBbMTZdRlVM TFNDUkVFTiBGSUxFIFRSQU5TRkVSIERJU1BMQVkKLSAgNC4gWzE3XUNIQVJBQ1RFUiBTRVRTCi0g IDUuIFsxOF1BUEMgRVhFQ1VUSU9OCi0gIDYuIFsxOV1QUk9HUkFNIFNJWkUKLSAgNy4gWzIwXU1P REVNIERJQUxJTkcKLSAgOC4gWzIxXU5FVFdPUksgU1VQUE9SVAotICA5LiBbMjJdRVhDRVBUSU9O IEhBTkRMSU5HCi0gMTAuIFsyM11TRUNVUklUWSBGRUFUVVJFUwotIDExLiBbMjRdRU5BQkxJTkcg U0VMRUNUKCkKLSAxMi4gWzI1XUkvTyBSRURJUkVDVElPTgotIDEzLiBbMjZdRkxPQVRJTkctUE9J TlQgTlVNQkVSUywgVElNRVJTLCBBTkQgQVJJVEhNRVRJQwotIDE0LiBbMjddU1BFQ0lBTCBDT05G SUdVUkFUSU9OUwotICBJLiBbMjhdU1VNTUFSWSBPRiBDT01QSUxFLVRJTUUgT1BUSU9OUwotCi0g IE9WRVJWSUVXCi0KLSAgIFRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIGNvbmZpZ3VyYXRpb24gb3B0 aW9ucyBmb3IgQy1LZXJtaXQgKDVBIGFuZAotICAgbGF0ZXIpLiBUaGUgbWFqb3IgdG9waWNzIGNv dmVyZWQgaW5jbHVkZSBwcm9ncmFtIHNpemUgKGFuZCBob3cgdG8KLSAgIHJlZHVjZSBpdCksIGhv dyB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUgcGFydGljdWxhciBmZWF0dXJlcywgbm90ZXMgb24KLSAg IHNlcmlhbC1wb3J0LCBtb2RlbSwgYW5kIG5ldHdvcmsgc3VwcG9ydCwgYW5kIGEgbGlzdCBvZiBD LUtlcm1pdCdzCi0gICBjb21waWxlLXRpbWUgb3B0aW9ucy4KLQotICAgRm9yIGRldGFpbHMgYWJv dXQgeW91ciBwYXJ0aWN1bGFyIG9wZXJhdGluZyBzeXN0ZW0sIGFsc28gc2VlIHRoZQotICAgc3lz dGVtLXNwZWNpZmljIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMgZmlsZSwgc3VjaCBhcyB0aGUK LSAgIFsyOV1DLUtlcm1pdCBJbnN0YWxsYXRpb24gSW5zdHJ1Y3Rpb25zIGZvciBVbml4LgotCi0g ICBbIFszMF1DLUtlcm1pdCBIb21lIF0gWyBbMzFdS2VybWl0IEhvbWUgXQotCi0gIDEuIEZJTEUg VFJBTlNGRVIKLQotICAgWyBbMzJdVG9wIF0gWyBbMzNdQ29udGVudHMgXSBbIFszNF1OZXh0IF0g WyBbMzVdUHJldmlvdXMgXQotCi0gICBQcmlvciB0byB2ZXJzaW9uIDcuMCwgQy1LZXJtaXQgd2Fz IGFsd2F5cyBidWlsdCB3aXRoIHRoZSBtb3N0Ci0gICBjb25zZXJ2YXRpdmUgS2VybWl0IGZpbGUt dHJhbnNmZXIgcHJvdG9jb2wgZGVmYXVsdHMgb24gZXZlcnkgcGxhdGZvcm06Ci0gICBubyBjb250 cm9sLWNoYXJhY3RlciBwcmVmaXhpbmcsIDk0LWJ5dGUgcGFja2V0cywgYW5kIGEgd2luZG93IHNp emUgb2YKLSAgIDEuCi0KLSAgIFN0YXJ0aW5nIGluIHZlcnNpb24gNy4wLCBmYXN0IHNldHRpbmdz IGFyZSB0aGUgZGVmYXVsdC4gVG8gb3ZlcnJpZGUKLSAgIHRoZXNlIGF0IGNvbXBpbGUgdGltZSwg aW5jbHVkZToKLQotICAtRE5PRkFTVAotCi0gICBpbiB0aGUgQyBjb21waWxlciBDRkxBR1MuIEV2 ZW4gd2l0aCB0aGUgZmFzdCBkZWZhdWx0cywgQy1LZXJtaXQKLSAgIGF1dG9tYXRpY2FsbHkgZHJv cHMgZG93biB0byB3aGF0ZXZlciB3aW5kb3cgYW5kIHBhY2tldCBzaXplcyByZXF1ZXN0ZWQKLSAg IGJ5IHRoZSBvdGhlciBLZXJtaXQsIGlmIHRoZXNlIGFyZSBzbWFsbGVyLCB3aGVuIHNlbmRpbmcg ZmlsZXMgKGV4Y2VwdAotICAgZm9yIGNvbnRyb2wtY2hhcmFjdGVyIHVucHJlZml4aW5nLCB3aGlj aCBpcyBub3QgbmVnb3RpYXRlZCwgYW5kIHdoaWNoCi0gICBpcyBub3cgc2V0IHRvIENBVVRJT1VT IHJhdGhlciB0aGFuIE5PTkUgYXQgc3RhcnR1cCkuIEMtS2VybWl0J3MKLSAgIHNldHRpbmdzIHBy ZXZhaWwgd2hlbiBpdCBpcyByZWNlaXZpbmcuCi0KLSAgIFsgWzM2XUMtS2VybWl0IEhvbWUgXSBb IFszN11LZXJtaXQgSG9tZSBdCi0KLSAgMi4gU0VSSUFMIENPTU1VTklDQVRJT04gU1BFRURTCi0K LSAgIFsgWzM4XVRvcCBdIFsgWzM5XUNvbnRlbnRzIF0gWyBbNDBdTmV4dCBdIFsgWzQxXVByZXZp b3VzIF0KLQotICAgQXMgb2YgNiBTZXB0ZW1iZXIgMTk5NywgYSBuZXcgc2ltcGxpZmllZCBtZWNo YW5pc20gZm9yIG9idGFpbmluZyB0aGUKLSAgIGxpc3Qgb2YgbGVnYWwgc2VyaWFsIGludGVyZmFj ZSBzcGVlZHMgaXMgaW4gcGxhY2U6Ci0KLSAgICAgKiBJZiB0aGUgc3ltYm9sIFRUU1BETElTVCBp cyBkZWZpbmVkLCB0aGUgc3lzdGVtLWRlcGVuZGVudCByb3V0aW5lCi0gICAgICAgdHRzcGRsaXN0 KCkgaXMgY2FsbGVkIGF0IHByb2dyYW0gaW5pdGlhbGl6YXRpb24gdG8gb2J0YWluIHRoZSBsaXN0 LgotICAgICAqIFRoaXMgc3ltYm9sIHNob3VsZCBiZSBkZWZpbmVkIG9ubHkgZm9yIEMtS2VybWl0 IGltcGxlbWVudGF0aW9ucwotICAgICAgIHRoYXQgaGF2ZSBpbXBsZW1lbnRlZCB0aGUgdHRzcGRs aXN0KCkgZnVuY3Rpb24sIHR5cGljYWxseSBpbiB0aGUKLSAgICAgICBjaz90aW8uYyBtb2R1bGUu IFNlZSBbNDJdY2t1dGlvLmMgZm9yIGFuIGV4YW1wbGUuCi0gICAgICogVFRTUERMSVNUIGlzIGF1 dG9tYXRpY2FsbHkgZGVmaW5lZCBpbiBbNDNdY2tjZGViLmggZm9yIFVOSVguIEFkZAotICAgICAg IHRoZSBhcHByb3ByaWF0ZSAjaWZkZWZzIGZvciBvdGhlciBwbGF0Zm9ybXMgd2hlbiB0aGUgY29y cmVzcG9uZGluZwotICAgICAgIHR0c3BkbGlzdCgpIGZ1bmN0aW9ucyBhcmUgZmlsbGVkIGluLgot ICAgICAqIElmIFRUU1BETElTVCBpcyAob3Igbm9ybWFsbHkgd291bGQgYmUpIGRlZmluZWQsIHRo ZSBvbGQgY29kZQotICAgICAgIChkZXNjcmliZWQgYmVsb3cpIGNhbiBzdGlsbCBiZSBzZWxlY3Rl ZCBieSBkZWZpbmluZyBOT1RUU1BETElTVC4KLQotICAgVGhlIHR0c3BkbGlzdCgpIGZ1bmN0aW9u IGNhbiBvYnRhaW4gdGhlIHNwZWVkcyBpbiBhbnkgd2F5IHRoYXQgd29ya3MuCi0gICBGb3IgZXhh bXBsZSwgYmFzZWQgc2ltcGx5IG9uICNpZmRlZiBCbm5ubi4uI2VuZGlmIChpbiBVTklYKS4gQWx0 aG91Z2gKLSAgIGl0IG1pZ2h0IGJlIGJldHRlciB0byBhY3R1YWxseSBjaGVjayBlYWNoIHNwZWVk IGFnYWluc3QgdGhlIGN1cnJlbnRseQotICAgc2VsZWN0ZWQgaGFyZHdhcmUgaW50ZXJmYWNlIGJl Zm9yZSBhbGxvd2luZyBpdCBpbiB0aGUgYXJyYXksIHRoZXJlIGlzCi0gICB1c3VhbGx5IG5vIHBh c3NpdmUgYW5kL29yIHJlbGlhYmxlIGFuZCBzYWZlIHdheSB0byBkbyB0aGlzLCBhbmQgc28gaXQn cwotICAgYmV0dGVyIHRvIGxldCBzb21lIHNwZWVkcyBpbnRvIHRoZSBhcnJheSB0aGF0IG1pZ2h0 IG5vdCB3b3JrLCB0aGFuIGl0Ci0gICBpcyB0byBlcnJvbmVvdXNseSBleGNsdWRlIG90aGVycy4g U3BlZWRzIHRoYXQgZG9uJ3Qgd29yayBhcmUgY2F1Z2h0Ci0gICB3aGVuIHRoZSBTRVQgU1BFRUQg Y29tbWFuZCBpcyBhY3R1YWxseSBnaXZlbi4KLQotICAgTm90ZSB0aGF0IHRoaXMgc2NoZW1lIGRv ZXMgbm90IG5lY2Vzc2FyaWx5IHJ1bGUgb3V0IHNwbGl0IHNwZWVkCi0gICBvcGVyYXRpb24sIGJ1 dCBlZmZlY3RpdmVseSBpdCBkb2VzIGluIEMtS2VybWl0IGFzIHByZXNlbnRseSBjb25zdGl0dXRl ZAotICAgc2luY2UgdGhlcmUgYXJlIG5vIGNvbW1hbmRzIHRvIHNldCBpbnB1dCBhbmQgb3V0cHV0 IHNwZWVkIHNlcGFyYXRlbHkKLSAgIChleGNlcHQgdGhlIHNwZWNpYWwgY2FzZSAic2V0IHNwZWVk IDc1LzEyMDAiKS4KLQotICAgTm90ZSB0aGF0IHNvbWUgcGxhdGZvcm1zLCBub3RhYmx5IEFJWCA0 LjIgYW5kIDQuMywgaW1wbGVtZW50IGhpZ2gKLSAgIHNlcmlhbCBzcGVlZHMgdHJhbnNwYXJlbnRs eSB0byB0aGUgYXBwbGljYXRpb24sIGUuZy4gYnkgbWFwcGluZyA1MCBicHMKLSAgIHRvIDU3NjAw IGJwcywgYW5kIHNvIG9uLgotCi0gICBUaGF0J3MgdGhlIHdob2xlIGRlYWwuIFdoZW4gVFRTUERM SVNUIGlzIG5vdCBkZWZpbmVkLCB0aGUgZm9sbG93aW5nCi0gICBhcHBsaWVzOgotCi0gICBTcGVl ZHMgYXJlIGRlZmluZWQgaW4gdHdvIHBsYWNlczogdGhlIFNFVCBTUEVFRCBrZXl3b3JkIGxpc3Qg aW4gdGhlCi0gICBjb21tYW5kIHBhcnNlciAoYXMgb2YgdGhpcyB3cml0aW5nLCBpbiB0aGUgWzQ0 XWNrdXVzMy5jIHNvdXJjZSBmaWxlKSwKLSAgIGFuZCBpbiB0aGUgc3lzdGVtLSBkZXBlbmRlbnQg Y29tbXVuaWNhdGlvbnMgaS9vIG1vZHVsZSwgY2s/dGlvLmMsCi0gICBmdW5jdGlvbnMgdHRzc3Bk KCkgKHNldCBzcGVlZCkgYW5kIHR0Z3NwZCgpIChnZXQgc3BlZWQpLiBUaGUgZm9sbG93aW5nCi0g ICBzcGVlZHMgYXJlIGFzc3VtZWQgdG8gYmUgYXZhaWxhYmxlIGluIGFsbCB2ZXJzaW9uczoKLQot ICAwLCAxMTAsIDMwMCwgNjAwLCAxMjAwLCAyNDAwLCA0ODAwLCA5NjAwCi0KLSAgIElmIG9uZSBv ciBtb3JlIG9mIHRoZXNlIHNwZWVkcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgc3lzdGVtLCB5 b3UnbGwKLSAgIG5lZWQgdG8gY2hhbmdlIHRoZSBzb3VyY2UgY29kZSAodGhpcyBoYXMgbmV2ZXIg aGFwcGVuZWQgc28gZmFyKS4gT3RoZXIKLSAgIHNwZWVkcyB0aGF0IGFyZSBub3QgY29tbW9uIHRv IGFsbCBzeXN0ZW1zIGhhdmUgS2VybWl0LXNwZWNpZmljIHN5bWJvbHM6Ci0KLSAgICAgICAgICAg ICAgIFN5bWJvbCAgICAgICBTeW1ib2wKLSAgU3BlZWQgKGJwcykgIHRvIGVuYWJsZSAgICB0byBk aXNhYmxlCi0gICAgICAgNTAgICAgICAgQlBTXzUwICAgICAgIE5PQl81MAotICAgICAgIDc1ICAg ICAgIEJQU183NSAgICAgICBOT0JfNzUKLSAgICAgICA3NS8xMjAwICBCUFNfNzUxMiAgICAgTk9C Xzc1MTIKLSAgICAgIDEzNC41ICAgICBCUFNfMTM0ICAgICAgTk9CXzEzNAotICAgICAgMTUwICAg ICAgIEJQU18xNTAgICAgICBOT0JfMTUwCi0gICAgICAyMDAgICAgICAgQlBTXzIwMCAgICAgIE5P Ql8yMDAKLSAgICAgMTgwMCAgICAgICBCUFNfMTgwMCAgICAgTk9CXzE4MDAKLSAgICAgMzYwMCAg ICAgICBCUFNfMzYwMCAgICAgTk9CXzM2MDAKLSAgICAgNzIwMCAgICAgICBCUFNfNzIwMCAgICAg Tk9CXzcyMDAKLSAgICAxNDQwMCAgICAgICBCUFNfMTRLICAgICAgTk9CXzE0SwotICAgIDE5MjAw ICAgICAgIEJQU18xOUsgICAgICBOT0JfMTlLCi0gICAgMjg4MDAgICAgICAgQlBTXzI4SyAgICAg IE5PQl8yOEsKLSAgICAzODQwMCAgICAgICBCUFNfMzhLICAgICAgTk9CXzM4SwotICAgIDU3NjAw ICAgICAgIEJQU181N0sgICAgICBOT0JfNTdLCi0gICAgNzY4MDAgICAgICAgQlBTXzc2SyAgICAg IE5PQl83NksKLSAgIDExNTIwMCAgICAgICBCUFNfMTE1SyAgICAgTk9CXzE1NUsKLSAgIDIzMDQw MCAgICAgICBCUFNfMjMwSyAgICAgTk9CXzIzMEsKLSAgIDQ2MDgwMCAgICAgICBCUFNfNDYwSyAg ICAgTk9CXzQ2MEsKLSAgIDkyMTYwMCAgICAgICBCUFNfOTIxSyAgICAgTk9CXzkyMUsKLQotICAg VGhlIFs0NV1ja2NkZWIuaCBoZWFkZXIgZmlsZSBjb250YWlucyBkZWZhdWx0IHNwZWVkIGNvbmZp Z3VyYXRpb25zIGZvcgotICAgdGhlIG1hbnkgc3lzdGVtcyB0aGF0IEMtS2VybWl0IHN1cHBvcnRz LiBZb3UgY2FuIG92ZXJyaWRlIHRoZXNlCi0gICBkZWZhdWx0cyBieSAoYSkgZWRpdGluZyBja2Nk ZWIuaCwgb3IgKGIpIGRlZmluaW5nIHRoZSBhcHByb3ByaWF0ZQotICAgZW5hYmxpbmcgYW5kL29y IGRpc2FibGluZyBzeW1ib2xzIG9uIHRoZSBDQyBjb21tYW5kIGxpbmUsIGZvciBleGFtcGxlOgot Ci0gIC1EQlBTXzE0NDAwIC1ETk9CXzExNTIwMAotCi0gICBvciB0aGUgIm1ha2UiIGNvbW1hbmQg bGluZSwgZS5nLjoKLQotICBtYWtlIGJsYWggIktGTEFHUz0tREJQU18xNDQwMCAtRE5PQl8xMTUy MDAiCi0KLSAgIE5vdGU6IHNvbWUgc3BlZWRzIGhhdmUgbm8gc3ltYm9scyBkZWZpbmVkIGZvciB0 aGVtLCBiZWNhdXNlIHRoZXkgaGF2ZQotICAgbmV2ZXIgYmVlbiBuZWVkZWQ6IDEyLjVicHMsIDQ1 LjVicHMsIDIwMDAwYnBzLCBldGMuIFRoZXNlIGNhbiBlYXNpbHkgYmUKLSAgIGFkZGVkIGlmIHJl cXVpcmVkIChidXQgdGhleSB3aWxsIHdvcmsgb25seSBpZiB0aGUgT1Mgc3VwcG9ydHMgdGhlbSku Ci0KLSAgIElNUE9SVEFOVDogQWRkaW5nIG9uZSBvZiB0aGVzZSBmbGFncyBhdCBjb21waWxlIHRp bWUgZG9lcyBub3QKLSAgIG5lY2Vzc2FyaWx5IG1lYW4gdGhhdCB5b3Ugd2lsbCBiZSBhYmxlIHRv IHVzZSB0aGF0IHNwZWVkLiBBIHBhcnRpY3VsYXIKLSAgIHNwZWVkIGlzIHVzYWJsZSBvbmx5IGlm IHlvdXIgdW5kZXJseWluZyBvcGVyYXRpbmcgc3lzdGVtIHN1cHBvcnRzIGl0LgotICAgSW4gcGFy dGljdWxhciwgaXQgbmVlZHMgdG8gYmUgZGVmaW5lZCBpbiB0aGUgYXBwcm9wcmlhdGUgc3lzdGVt IGhlYWRlcgotICAgZmlsZSAoZS5nLiBpbiBVTklYLCBjZCB0byAvdXNyL2luY2x1ZGUgYW5kIGdy ZXAgZm9yIEI5NjAwIGluICouaCBhbmQKLSAgIHN5cy8qLmggdG8gZmluZCB0aGUgaGVhZGVyIGZp bGUgdGhhdCBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZQotICAgc3VwcG9ydGVkIHNw ZWVkcyksIGFuZCBzdXBwb3J0ZWQgYnkgdGhlIHNlcmlhbCBkZXZpY2UgZHJpdmVyLCBhbmQgb2YK LSAgIGNvdXJzZSBieSB0aGUgcGh5c2ljYWwgZGV2aWNlIGl0c2VsZi4KLQotICAgQUxTTyBJTVBP UlRBTlQ6IFRoZSBsaXN0IG9mIGF2YWlsYWJsZSBzcGVlZHMgaXMgaW5kZXBlbmRlbnQgb2YgaG93 IHRoZXkKLSAgIGFyZSBzZXQuIFRoZSBtYW55IFVOSVhlcywgZm9yIGV4YW1wbGUsIG9mZmVyIGEg d2lkZSB2YXJpZXR5IG9mIEFQSXMKLSAgIHRoYXQgYXJlIEJTRC1iYXNlZCwgU1lTVi1iYXNlZCwg UE9TSVgtYmFzZWQsIGFuZCBwdXJlbHkgbWFkZSB1cC4gU2VlCi0gICB0aGUgdHRzc3BkKCksIHR0 Z3NwZCgpLCBhbmQgdHRzcGRsaXN0KCkgcm91dGluZXMgaW4gWzQ2XWNrdXRpby5jIGZvcgotICAg aWxsdXN0cmF0aW9ucy4KLQotICAgVGhlIGxhdGVzdCBlbnRyaWVzIGluIHRoaXMgaG9yc2VyYWNl IGFyZSB0aGUgdGNnZXRzcGVlZCgpIGFuZAotICAgdHRzZXRzcGVlZCgpIHJvdXRpbmVzIGZvdW5k IGluIFVuaXhXYXJlIDcuIFVubGlrZSBvdGhlciBtZXRob2RzLCB0aGV5Ci0gICBhY2NlcHQgdGhl IGVudGlyZSByYW5nZSBvZiBpbnRlZ2VycyAobG9uZ3MgcmVhbGx5KSBhcyBzcGVlZCB2YWx1ZXMs Ci0gICByYXRoZXIgdGhhbiBjZXJ0YWluIGNvZGVzLCBhbmQgcmV0dXJuIGFuIGVycm9yIGlmIHRo ZSBudW1iZXIgaXMgbm90LCBpbgotICAgZmFjdCwgYSBsZWdhbCBzcGVlZCBmb3IgdGhlIGRldmlj ZS9kcml2ZXIgaW4gcXVlc3Rpb24uIEluIHRoaXMgY2FzZSwKLSAgIHRoZXJlIGlzIG5vIHdheSB0 byBidWlsZCBhIGxpc3Qgb2YgbGVnYWwgc3BlZWRzIGF0IGNvbXBpbGUgdGltZSwgc2luY2UKLSAg IG5vIEJubm5uIHN5bWJvbHMgYXJlIGRlZmluZWQgKGV4Y2VwdCBmb3IgImRlcHJlY2F0ZWQsIGxl Z2FjeSIKLSAgIGludGVyZmFjZXMgbGlrZSBpb2N0bCgpKSBhbmQgc28gdGhlIGxlZ2FsIHNwZWVk IGxpc3QgbXVzdCBiZSBlbnVtZXJhdGVkCi0gICBpbiB0aGUgY29kZSAtLSBzZWUgdHRzcGRsaXN0 KCkgaW4gWzQ3XWNrdXRpby5jLgotCi0gICBbIFs0OF1DLUtlcm1pdCBIb21lIF0gWyBbNDldS2Vy bWl0IEhvbWUgXQotCi0gIDMuIEZVTExTQ1JFRU4gRklMRSBUUkFOU0ZFUiBESVNQTEFZCi0KLSAg IFsgWzUwXVRvcCBdIFsgWzUxXUNvbnRlbnRzIF0gWyBbNTJdTmV4dCBdIFsgWzUzXVByZXZpb3Vz IF0KLQotICAgTmV3IHRvIGVkaXQgMTgwIGlzIHN1cHBvcnQgZm9yIGFuIE1TLURPUy1LZXJtaXQt bGlrZSBsb2NhbC1tb2RlIGZ1bGwKLSAgIHNjcmVlbiBmaWxlIHRyYW5zZmVyIGRpc3BsYXksIGFj Y29tcGxpc2hlZCB1c2luZyB0aGUgY3Vyc2VzIGxpYnJhcnksIG9yCi0gICBzb21ldGhpbmcgZXF1 aXZhbGVudCAoZm9yIGV4YW1wbGUsIHRoZSBTY3JlZW4gTWFuYWdlciBvbiBERUMgVk1TKS4gVG8K LSAgIGVuYWJsZSB0aGlzIGZlYXR1cmUsIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBpbiB5b3VyIENG TEFHUzoKLQotICAtRENLX0NVUlNFUwotCi0gICBhbmQgdGhlbiBjaGFuZ2UgeW91ciBidWlsZCBw cm9jZWR1cmUgKGlmIG5lY2Vzc2FyeSkgdG8gaW5jbHVkZSB0aGUKLSAgIG5lY2Vzc2FyeSBsaWJy YXJpZXMuIEZvciBleGFtcGxlLCBpbiBVbml4IHRoZXNlIGFyZSB1c3VhbGx5ICJjdXJzZXMiIG9y Ci0gICAibmN1cnNlcyIgKGFuZCBtb3JlIHJlY2VudGx5LCAibmN1cnNlc3ciIGFuZCAic2xhbmci KSwgcGVyaGFwcyBhbHNvCi0gICAidGVybWNhcCIsICJ0ZXJtbGliIiwgb3IgInRpbmZvIjoKLQot ICAiTElCUz0gLWxjdXJzZXMgLWx0ZXJtY2FwIgotICAiTElCUz0gLWxjdXJzZXMgLWx0ZXJtbGli IgotICAiTElCUz0gLWxuY3Vyc2VzIgotICAiTElCUz0gLWx0ZXJtbGliIgotICAiTElCUz0gLWx0 aW5mbyIKLQotICAgIm1hbiBjdXJzZXMiIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLCBhbmQgc2Vh cmNoIHRocm91Z2ggdGhlIFVuaXgKLSAgIFs1NF1tYWtlZmlsZSBmb3IgIkNLX0NVUlNFUyIgdG8g c2VlIG1hbnkgZXhhbXBsZXMsIGFuZCBhbHNvIHNlZSB0aGUKLSAgIHJlbGV2YW50IHNlY3Rpb25z IG9mIHRoZSBbNTVdVW5peCBDLUtlcm1pdCBJbnN0YWxsYXRpb24gSW5zdHJ1Y3Rpb25zLAotICAg cGFydGljdWxhcmx5IFNlY3Rpb25zIFs1Nl00IGFuZCBbNTddOS4yLgotCi0gICBUaGVyZSBtaWdo dCBzdGlsbCBiZSBhIGNvbXBsaWNhdGlvbi4gU29tZSBpbXBsZW1lbnRhdGlvbnMgb2YgY3Vyc2Vz Ci0gICByZXNlcnZlIHRoZSByaWdodCB0byBhbHRlciB0aGUgYnVmZmVyaW5nIG9uIHRoZSBvdXRw dXQgZmlsZSB3aXRob3V0Ci0gICByZXN0b3JpbmcgaXQgYWZ0ZXJ3YXJkcywgd2hpY2ggY2FuIGxl YXZlIEtlcm1pdCdzIGNvbW1hbmQgcHJvY2Vzc2luZyBpbgotICAgYSBtZXNzIHdoZW4gdGhlIHBy b21wdCBjb21lcyBiYWNrIGFmdGVyIGEgZnVsbHNjcmVlbiBmaWxlIHRyYW5zZmVyCi0gICBkaXNw bGF5LiBUaGUgdHlwaWNhbCBzeW1wdG9tIGlzIHRoYXQgY2hhcmFjdGVycyB5b3UgdHlwZSBhdCB0 aGUgcHJvbXB0Ci0gICBhZnRlciBhIGxvY2FsLW1vZGUgZmlsZSB0cmFuc2ZlciAoaS5lLiBhZnRl ciBzZWVpbmcgdGhlIGN1cnNlcwotICAgZmlsZS10cmFuc2ZlciBkaXNwbGF5KSBkbyBub3QgZWNo byB1bnRpbCB5b3UgcHJlc3MgdGhlIFJldHVybiAoRW50ZXIpCi0gICBrZXkuIElmIHRoaXMgaGFw cGVucyB0byB5b3UsIHRyeSBhZGRpbmcKLQotICAtRENLX05FV1RFUk0KLQotICAgdG8geW91ciBt YWtlZmlsZSB0YXJnZXQgKHNlZSBjb21tZW50cyBpbiBzY3JlZW5jKCkgaW4gWzU4XWNrdXVzeC5j IGZvcgotICAgYW4gZXhwbGFuYXRpb24pLgotCi0gICBJZiB0aGF0IGRvZXNuJ3QgZml4IHRoZSBw cm9ibGVtLCB0aGVuIHVzZSBhIGJpZ2dlciBoYW1tZXIgYW5kIHJlcGxhY2UKLSAgIC1EQ0tfTkVX VEVSTSB3aXRoOgotCi0gIC1ETk9OT1NFVEJVRgotCi0gICB3aGljaCB0ZWxscyBLZXJtaXQgdG8g Zm9yY2Ugc3Rkb3V0IHRvIGJlIHVuYnVmZmVyZWQgc28gQ0JSRUFLIG1vZGUgY2FuCi0gICB3b3Jr LgotCi0gICBJbiBTQ08gWGVuaXggYW5kIFNDTyBVTklYLCB0aGVyZSBhcmUgdHdvIHNlcGFyYXRl IGN1cnNlcyBsaWJyYXJpZXMsIG9uZQotICAgYmFzZWQgb24gdGVybWNhcCBhbmQgdGhlIG90aGVy IGJhc2VkIG9uIHRlcm1pbmZvLiBUaGUgZGVmYXVsdCBsaWJyYXJ5LAotICAgdXN1YWxseSB0ZXJt aW5mbywgaXMgZXN0YWJsaXNoZWQgd2hlbiB0aGUgZGV2ZWxvcG1lbnQgc3lzdGVtIGlzCi0gICBp bnN0YWxsZWQuIFRvIG1hbnVhbGx5IHNlbGVjdCB0ZXJtaW5mbyAoYXQgY29tcGlsZSB0aW1lKToK LQotICBjb21waWxlIC1ETV9URVJNSU5GTyBhbmQgbGluayAtbHRpbmZvCi0KLSAgIGFuZCB0byBt YW51YWxseSBzZWxlY3QgdGVybWNhcDoKLQotICBjb21waWxlIC1ETV9URVJNQ0FQIGFuZCBsaW5r IC1sdGNhcCAtbHRlcm1saWIKLQotICAgPGN1cnNlcy5oPiBsb29rcyBhdCBNX1RFUk1JTkZPIGFu ZCBNX1RFUk1DQVAgdG8gZGVjaWRlIHdoaWNoIGhlYWRlcgotICAgZmlsZXMgdG8gdXNlLiAvdXNy L2xpYi9saWJjdXJzZXMuYSBpcyBhIGxpbmsgdG8gZWl0aGVyIGxpYnRpbmZvLmEgb3IKLSAgIGxp YnRjYXAuYS4gVGhlIEMtS2VybWl0IGNvbXBpbGF0aW9uIG9wdGlvbnMgbXVzdCBhZ3JlZSB3aXRo IHRoZSB2ZXJzaW9uCi0gICBvZiB0aGUgY3Vyc2VzIGxpYnJhcnkgdGhhdCBpcyBhY3R1YWxseSBp bnN0YWxsZWQuCi0KLSAgIE5PVEU6IElmIHlvdSBhcmUgZG9pbmcgYW4gQU5TSS1DIGNvbXBpbGF0 aW9uIGFuZCB5b3UgZ2V0IGNvbXBpbGUgdGltZQotICAgd2FybmluZ3MgbGlrZSB0aGUgZm9sbG93 aW5nOgotCi0gIFdhcm5pbmc6IGZ1bmN0aW9uIG5vdCBkZWNsYXJlZCBpbiBja3V1c3guYzogd21v dmUsIHByaW50dywgd2NscnRvZW9sLAotICB3Y2xlYXIsIHdyZWZyZXNoLCBlbmR3aW4sIGV0Yy4u LgotCi0gICBpdCBtZWFucyB0aGF0IHlvdXIgPGN1cnNlcy5oPiBmaWxlIGRvZXMgbm90IGNvbnRh aW4gcHJvdG90eXBlcyBmb3IKLSAgIHRoZXNlIGZ1bmN0aW9ucy4gVGhlIHdhcm5pbmdzIHNob3Vs ZCBiZSBoYXJtbGVzcy4KLQotICAgTmV3IHRvIGVkaXQgMTkwIGlzIHRoZSBhYmlsaXR5IHRvIHJl ZnJlc2ggYSBtZXNzZWQtdXAgZnVsbC1zY3JlZW4KLSAgIGRpc3BsYXksIGUuZy4gYWZ0ZXIgcmVj ZWl2aW5nIGEgYnJvYWRjYXN0IG1lc3NhZ2UuIFRoaXMgZGVwZW5kcyBvbiB0aGUKLSAgIGN1cnNl cyBwYWNrYWdlIGluY2x1ZGluZyB0aGUgd3JlZnJlc2goKSBhbmQgY2xlYXJvaygpIGZ1bmN0aW9u cyBhbmQgdGhlCi0gICBjdXJzY3IgdmFyaWFibGUuIElmIHlvdXIgdmVyc2lvbiBoYXMgdGhlc2Us IG9yIGhhcyBjb2RlIHRvIHNpbXVsYXRlCi0gICB0aGVtLCB0aGVuIGFkZDoKLQotICAtRENLX1dS RUZSRVNICi0KLSAgIFRoZSBjdXJzZXMgYW5kIHRlcm1jYXAgbGlicmFyaWVzIGFkZCBjb25zaWRl cmFibGUgc2l6ZSB0byB0aGUgcHJvZ3JhbQotICAgaW1hZ2UgKGUuZy4gYWJvdXQgMjBLIG9uIGEg U1VOLTQsIDQwSyBvbiBhIDM4NikuIE9uIHNvbWUgc21hbGwgc3lzdGVtcywKLSAgIHN1Y2ggYXMg dGhlIEFUJlQgNjMwMCBQTFVTLCBjdXJzZXMgY2FuIHB1c2ggS2VybWl0IG92ZXIgdGhlIGVkZ2Uu Li4KLSAgIGV2ZW4gdGhvdWdoIGl0IGNvbXBpbGVzLCBsb2FkcywgYW5kIHJ1bnMgY29ycmVjdGx5 LCBpdHMgaW5jcmVhc2VkIHNpemUKLSAgIGFwcGFyZW50bHkgbWFrZXMgaXQgc3dhcCBjb25zdGFu dGx5LCBzbG93aW5nIGl0IGRvd24gdG8gYSBjcmF3bCwgZXZlbgotICAgd2hlbiB0aGUgY3Vyc2Vz IGRpc3BsYXkgaXMgbm90IGluIHVzZS4gU29tZSBuZXcgbWFrZWZpbGUgdGFyZ2V0cyBoYXZlCi0g ICBiZWVuIGFkZGVkIHRvIHRha2UgY2FyZSBvZiB0aGlzIChlLmcuIHN5czN1cGNzaGNjKSwgYnV0 IHNpbWlsYXIgdHJpY2tzCi0gICBtaWdodCBiZSBuZWNlc3NhcnkgaW4gb3RoZXIgY2FzZXMgdG9v LgotCi0gICBPbiB0aGUgY3Vyc2VzIGZpbGUtdHJhbnNmZXIgZGlzcGxheSwganVzdCBiZWxvdyB0 aGUgInRoZXJtb21ldGVyIiwgaXMgYQotICAgcnVubmluZyBkaXNwbGF5IG9mIHRoZSB0cmFuc2Zl ciByYXRlLCBhcyBhIGZsYXQgcXVvdGllbnQgb2YgZmlsZQotICAgY2hhcmFjdGVycyBwZXIgZWxh cHNlZCBzZWNvbmRzIHNvIGZhci4gWW91IGNhbiBjaGFuZ2UgdGhpcyB0byBhbgotICAgYXZlcmFn ZSB0aGF0IGdpdmVzIGdyZWF0ZXIgd2VpZ2h0IHRvIHJlY2VudCBoaXN0b3J5ICgwLjI1ICoKLSAg IGluc3RhbnRhbmVvdXMgY3BzICsgMC43NSAqIGhpc3RvcmljYWwgY3BzKSBieSBhZGRpbmcgLURD UFNfV0VJR0hURUQgdG8KLSAgIHlvdXIgQ0ZMQUdTIChzb3JyeSBmb2xrcywgdGhpcyBvbmUgaXMg bm90IHdvcnRoIGEgU0VUIGNvbW1hbmQpLiBZb3UgY2FuCi0gICBjaG9vc2UgYSBzZWNvbmQgdHlw ZSBvZiB3ZWlnaHRlZCBhdmVyYWdlIGluIHdoaWNoIHRoZSB3ZWlnaHRpbmcgc21vb3RocwotICAg b3V0IHByb2dyZXNzaXZlbHkgYXMgdGhlIHRyYW5zZmVyIHByb2dyZXNzZXMgYnkgYWRkaW5nIC1E Q1BTX1ZJTkNFIHRvCi0gICAtRENQU19XRUlHSFRFRC4KLQotICAgQW4gYWx0ZXJuYXRpdmUgdG8g Y3Vyc2VzIGlzIGFsc28gYXZhaWxhYmxlIGF0IGNvbXBpbGUgdGltZSwgYnV0IHNob3VsZAotICAg YmUgc2VsZWN0ZWQgaWYgeW91ciB2ZXJzaW9uIG9mIEtlcm1pdCBpcyB0byBiZSBydW4gaW4gbG9j YWwgbW9kZSBvbmx5Ci0gICBpbiBhbiBBTlNJIHRlcm1pbmFsIGVudmlyb25tZW50LCBmb3IgZXhh bXBsZSBvbiBhIGRlc2t0b3Agd29ya3N0YXRpb24KLSAgIHRoYXQgaGFzIGFuIEFOU0kgY29uc29s ZSBkcml2ZXIuIFRvIHNlbGVjdCB0aGlzIG9wdGlvbiBpbiBwbGFjZSBvZgotICAgY3Vyc2VzLCBk ZWZpbmUgdGhlIHN5bWJvbCBNWUNVUlNFUzoKLQotICAtRE1ZQ1VSU0VTCi0KLSAgIGluc3RlYWQg b2YgQ0tfQ1VSU0VTLiBUaGUgTVlDVVJTRVMgb3B0aW9uIHVzZXMgYnVpbHQtaW4gQU5TSSAoVlQx MDApCi0gICBlc2NhcGUgc2VxdWVuY2VzLCBhbmQgZGVwZW5kcyB1cG9uIHlvdXIgdGVybWluYWwg b3IgY29uc29sZSBkcml2ZXIgdG8KLSAgIGludGVycHJldCB0aGVtIGNvcnJlY3RseS4KLQotICAg SW4gc29tZSBDLUtlcm1pdCBidWlsZHMsIHdlIHJlcGxhY2UgcHJpbnRmKCkgdmlhICNkZWZpbmUg cHJpbnRmLi4uCi0gICBIb3dldmVyLCB0aGlzIGNhbiBjYXVzZSBjb25mbGljdHMgd2l0aCB0aGUg W25dY3Vyc2VzIGhlYWRlciBmaWxlcy4KLSAgIFZhcmlvdXMgaGFja3MgYXJlIHJlcXVpcmVkIHRv IGdldCBhcm91bmQgdGhpcyAtLSBzZWUgWzU5XWNrdXRpby5jLAotICAgWzYwXWNrdWZpby5jLCBb NjFdY2t1dXN4LmMsIFs2Ml1ja3VjbWQuYywgZXRjLgotCi0gICBbIFs2M11DLUtlcm1pdCBIb21l IF0gWyBbNjRdS2VybWl0IEhvbWUgXQotCi0gIDQuIENIQVJBQ1RFUiBTRVRTCi0KLSAgIFsgWzY1 XVRvcCBdIFsgWzY2XUNvbnRlbnRzIF0gWyBbNjddTmV4dCBdIFsgWzY4XVByZXZpb3VzIF0KLQot ICAgU2luY2UgdmVyc2lvbiA1QSwgQy1LZXJtaXQgaGFzIGluY2x1ZGVkIHN1cHBvcnQgZm9yIGNv bnZlcnNpb24gb2YKLSAgIGNoYXJhY3RlciBzZXRzIGZvciBXZXN0ZXJuIEV1cm9wZWFuIGxhbmd1 YWdlcyAoaS5lLiBsYW5ndWFnZXMgdGhhdAotICAgb3JpZ2luYXRlZCBpbiBXZXN0ZXJuIEV1cm9w ZSwgYnV0IGFyZSBub3cgYWxzbyBzcG9rZW4gaW4gdGhlIFdlc3Rlcm4KLSAgIEhlbWlzcGhlcmUg YW5kIG90aGVyIHBhcnRzIG9mIHRoZSB3b3JsZCksIHZpYSBJU08gODg1OS0xIExhdGluIEFscGhh YmV0Ci0gICAxLCBmb3IgRWFzdGVybiBFdXJvcGVhbiBsYW5ndWFnZXMgKElTTyBMYXRpbi0yKSwg SGVicmV3IChhbmQgWWlkZGlzaCksCi0gICBHcmVlaywgYW5kIEN5cmlsbGljLWFscGhhYmV0IGxh bmd1YWdlcyAoSVNPIExhdGluL0N5cmlsbGljKS4gTWFueSBmaWxlCi0gICAobG9jYWwpIGNoYXJh Y3RlciBzZXRzIGFyZSBzdXBwb3J0ZWQ6IElTTyA2NDYgNy1iaXQgbmF0aW9uYWwgc2V0cywgSUJN Ci0gICBjb2RlIHBhZ2VzLCBBcHBsZSwgREVDLCBERywgTmVYVCwgZXRjLgotCi0gICBUbyBidWls ZCBLZXJtaXQgd2l0aCBubyBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uIGF0IGFsbCwgaW5jbHVk ZQotICAgLUROT0NTRVRTIGluIHRoZSBDRkxBR1MuIFRvIGJ1aWxkIHdpdGggbm8gTGF0aW4tMiwg YWRkIC1ETk9MQVRJTjIuIFRvCi0gICBidWlsZCB3aXRoIG5vIEN5cmlsbGljLCBhZGQgLUROT0NZ UklMLiBUbyBvbWl0IEhlYnJldywgYWRkIC1ETk9IRUJSRVcuCi0gICBJZiAtRE5PQ1NFVFMgaXMg Km5vdCogaW5jbHVkZWQsIHlvdSdsbCBhbHdheXMgZ2V0IExBVElOMS4gVG8gYnVpbGQgd2l0aAot ICAgbm8gS0FOSkkgaW5jbHVkZSAtRE5PS0FOSkkuIFRoZXJlIGlzIHByZXNlbnRseSBubyB3YXkg dG8gaW5jbHVkZQotICAgTGF0aW4tMiwgQ3lyaWxsaWMsIEhlYnJldywgb3IgS2Fuamkgd2l0aG91 dCBhbHNvIGluY2x1ZGluZyBMYXRpbi0xLgotCi0gICBbNjldVW5pY29kZSBzdXBwb3J0IHdhcyBh ZGRlZCBpbiBDLUtlcm1pdCA3LjAsIGFuZCBpdCBhZGRzIGEgZmFpcgotICAgYW1vdW50IG9mIHRh YmxlcyBhbmQgY29kZSAoYW5kIHRoaXMgaXMgb25seSBhICJMZXZlbCAxIiBpbXBsZW1lbnRhdGlv bgotICAgLS0gYSBoaWdoZXIgbGV2ZWwgd291bGQgYWxzbyByZXF1aXJlIGJ1aWxkaW5nIGluIHRo ZSBlbnRpcmUgVW5pY29kZQotICAgZGF0YWJhc2UpLiBPbiBhIFBDIHdpdGggUkggNS4yIExpbnV4 LCBidWlsZGluZyBDLUtlcm1pdCA3LjAsIHdlIGdldCB0aGUKLSAgIGZvbGxvd2luZyBzaXplczoK LQotICBOT0NTRVRTIE5PVU5JQ09ERSBOT0tBTkpJICAgQmVmb3JlICAgIEFmdGVyCi0gICBbICAg XSAgICBbICAgXSAgICBbICAgXSAgICAxMzI5MDE0ICAgKEZ1bGwpCi0gICBbICAgXSAgICBbICAg XSAgICBbIFggXSAgICAxMzI1Njg2ICAgKFVuaWNvZGUgYnV0IG5vIEthbmppKQotICAgWyAgIF0g ICAgWyBYIF0gICAgWyAgIF0gICAgMTE1ODgzNyAgIChBbGwgY2hhcnNldHMgZXhjZXB0IFVuaWNv ZGUpCi0gICBbIFggXSAgICBbIHggXSAgICBbIHggXSAgICAxMDkwODQ1ICAgKE5PQ1NFVFMgaW1w bGllcyB0aGUgb3RoZXIgdHdvKQotCi0gICBOb3RlLCBieSB0aGUgd2F5LCB0aGF0IE5PS0FOSkkg d2l0aG91dCBOT1VOSUNPREUgb25seSByZW1vdmVzIHRoZQotICAgbm9uLVVuaWNvZGUgS2Fuamkg c2V0cyAoU2hpZnQtSklTLCBFVUMtSlAsIEpJUy03LCBldGMpLiBLYW5qaSBpcyBzdGlsbAotICAg cmVwcmVzZW50YWJsZSBpbiBVQ1MtMiBhbmQgVVRGLTguCi0KLSAgIFsgWzcwXUMtS2VybWl0IEhv bWUgXSBbIFs3MV1LZXJtaXQgSG9tZSBdCi0KLSAgNS4gQVBDIEVYRUNVVElPTgotCi0gICBbIFs3 Ml1Ub3AgXSBbIFs3M11Db250ZW50cyBdIFsgWzc0XU5leHQgXSBbIFs3NV1QcmV2aW91cyBdCi0K LSAgIFRoZSBLZXJtaXQgQ09OTkVDVCBhbmQgSU5QVVQgY29tbWFuZHMgYXJlIGNvZGVkIHRvIGV4 ZWN1dGUgQXBwbGljYXRpb24KLSAgIFByb2dyYW0gQ29tbWFuZCBlc2NhcGUgc2VxdWVuY2VzIGZy b20gdGhlIGhvc3Q6Ci0KLSAgPEVTQz5fPHRleHQ+PEVTQz5cCi0KLSAgIHdoZXJlIDx0ZXh0PiBp cyBhIEMtS2VybWl0IGNvbW1hbmQsIG9yIGEgbGlzdCBvZiBDLUtlcm1pdCBjb21tYW5kcwotICAg c2VwYXJhdGVkIGJ5IGNvbW1hcywgdXAgdG8gYWJvdXQgMUsgaW4gbGVuZ3RoLgotCi0gICBUbyBk YXRlLCB0aGlzIGZlYXR1cmUgaGFzIGJlZW4gaW5jbHVkZWQgaW4gdGhlIE9TLzIsIFdpbmRvd3Ms IFZNUywKLSAgIE9TLTksIGFuZCBVbml4IHZlcnNpb25zLCBmb3Igd2hpY2ggdGhlIHN5bWJvbDoK LQotICBDS19BUEMKLQotICAgaXMgZGVmaW5lZCBhdXRvbWF0aWNhbGx5IGluIFs3Nl1ja3V1c3Iu aC4gRm9yIE9TLzIsIEFQQyBpcyBlbmFibGVkIGF0Ci0gICBydW50aW1lIGJ5IGRlZmF1bHQsIGZv ciBVTklYIGl0IGlzIGRpc2FibGVkLiBJdCBpcyBjb250cm9sbGVkIGJ5IHRoZQotICAgU0VUIFRF Uk1JTkFMIEFQQyBjb21tYW5kLiBDb25maWd1cmluZyBBUEMgY2FwYWJpbGl0eSBpbnRvIGEgdmVy c2lvbgotICAgdGhhdCBnZXRzIGl0IGJ5IGRlZmF1bHQgKGJlY2F1c2UgQ0tfQVBDIGlzIGRlZmlu ZWQgaW4gWzc3XWNrdXVzci5oKSBjYW4KLSAgIGJlIG92ZXJyaWRkZW4gYnkgaW5jbHVkaW5nOgot Ci0gIC1ETk9BUEMKLQotICAgb24gdGhlIENDIGNvbW1hbmQgbGluZS4KLQotICAgQy1LZXJtaXQn cyBhdXRvZG93bmxvYWQgZmVhdHVyZSBkZXBlbmRzIG9uIHRoZSBBUEMgZmVhdHVyZSwgc28KLSAg IGRlY29uZmlndXJpbmcgQVBDIGFsc28gZGlzYWJsZXMgYXV0b2Rvd25sb2FkIChpdCBkb2Vzbid0 IHVzZSBBUEMgZXNjYXBlCi0gICBzZXF1ZW5jZXMsIGJ1dCB1c2VzIHRoZSBBUEMgc3dpdGNoaW5n IG1lY2hhbmlzbSBpbnRlcm5hbGx5KS4KLQotICAgWyBbNzhdQy1LZXJtaXQgSG9tZSBdIFsgWzc5 XUtlcm1pdCBIb21lIF0KLQotICA2LiBQUk9HUkFNIFNJWkUKLQotICAgWyBbODBdVG9wIF0gWyBb ODFdQ29udGVudHMgXSBbIFs4Ml1OZXh0IF0gWyBbODNdUHJldmlvdXMgXQotCi0gICBTRUNUSU9O IENPTlRFTlRTCi0KLSAgNi4xLiBbODRdRmVhdHVyZSBTZWxlY3Rpb24KLSAgNi4yLiBbODVdQ2hh bmdpbmcgQnVmZmVyIFNpemVzCi0gIDYuMy4gWzg2XU90aGVyIFNpemUtUmVsYXRlZCBJdGVtcwot ICA2LjQuIFs4N11TcGFjZS9UaW1lIFRyYWRlb2ZmcwotCi0gICAoQWxzbyBzZWUgWzg4XVNlY3Rp b24gNCkKLQotICAgRWFjaCByZWxlYXNlIG9mIEMtS2VybWl0IGlzIGxhcmdlciB0aGFuIHRoZSBs YXN0LiBPbiBzb21lIGNvbXB1dGVycwotICAgKHVzdWFsbHkgb2xkIG9uZXMpIHRoZSBzaXplIG9m IHRoZSBwcm9ncmFtIHByZXZlbnRzIGl0IGZyb20gYmVpbmcKLSAgIHN1Y2Nlc3NmdWxseSBsaW5r ZWQgYW5kIGxvYWRlZC4gT24gc29tZSBvdGhlcnMgKGFsc28gdXN1YWxseSBvbGQgb25lcyksCi0g ICBpdCBvY2N1cGllcyBzbyBtdWNoIG1lbW9yeSB0aGF0IGl0IGlzIGNvbnN0YW50bHkgc3dhcHBp bmcgb3IgcGFnaW5nLiBJbgotICAgc3VjaCBjYXNlcywgeW91IGNhbiByZWR1Y2UgQy1LZXJtaXQn cyBzaXplIGluIHZhcmlvdXMgd2F5cywgb3V0bGluZWQgaW4KLSAgIHRoaXMgc2VjdGlvbi4gVGhl IGZvbGxvd2luZyBvcHRpb25zIGNhbiBjdXQgZG93biBvbiB0aGUgcHJvZ3JhbSdzIHNpemUKLSAg IGF0IGNvbXBpbGUgdGltZSBieSByZW1vdmluZyBmZWF0dXJlcyBvciBjaGFuZ2luZyB0aGUgc2l6 ZSBvZiBzdG9yYWdlCi0gICBhcmVhcy4KLQotICAgSWYgeW91IGFyZSByZWFkaW5nIHRoaXMgc2Vj dGlvbiBiZWNhdXNlIGFsbCB5b3Ugd2FudCBpcyBhIHNtYWxsLCBmYXN0LAotICAgcXVpY2stdG8t bG9hZCBLZXJtaXQgZmlsZS10cmFuc2ZlciBhcHBsaWNhdGlvbiBmb3IgdGhlIHJlbW90ZSBlbmQg b2YKLSAgIHlvdXIgY29ubmVjdGlvbiwgYW5kIHRoZSByZW1vdGUgZW5kIGlzIFVuaXggYmFzZWQs IHRha2UgYSBsb29rIGF0Ci0gICBHLUtlcm1pdDoKLQotICBbODldaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2drZXJtaXQuaHRtbAotCi0gIDYuMS4gRmVhdHVyZSBTZWxlY3Rpb24KLQot ICAgRmVhdHVyZXMgY2FuIGJlIGFkZGVkIG9yIHJlbW92ZWQgYnkgZGVmaW5pbmcgc3ltYm9scyBv biB0aGUgQ0MgKEMKLSAgIGNvbXBpbGVyKSBjb21tYW5kIGxpbmUuICItRCIgaXMgdGhlIG5vcm1h bCBDQyBkaXJlY3RpdmUgdG8gZGVmaW5lIGEKLSAgIHN5bWJvbCBzbywgZm9yIGV4YW1wbGUsICIt RE5PREVCVUciIGRlZmluZXMgdGhlIHN5bWJvbCBOT0RFQlVHLiBTb21lIEMKLSAgIGNvbXBpbGVy cyBtaWdodCB1c2UgZGlmZmVyZW50IHN5bnRheCwgZS5nLiAiLWQgTk9ERUJVRyIgb3IKLSAgICIv REVGSU5FPU5PREVCVUciLiBGb3IgQyBjb21waWxlcnMgdGhhdCBkbyBub3QgYWNjZXB0IGNvbW1h bmQtbGluZQotICAgZGVmaW5pdGlvbnMsIHlvdSBjYW4gcHV0IHRoZSBjb3JyZXNwb25kaW5nICNk ZWZpbmUgc3RhdGVtZW50cyBpbiB0aGUKLSAgIGZpbGUgY2tjc3ltLmgsIGZvciBleGFtcGxlOgot Ci0gICNkZWZpbmUgTk9ERUJVRwotCi0gICBUaGUgZm9sbG93aW5nIHRhYmxlIHNob3dzIHRoZSBz YXZpbmdzIGFjaGlldmVkIHdoZW4gYnVpbGRpbmcgQy1LZXJtaXQKLSAgIDguMCAoQmV0YS4wNCkg d2l0aCBzZWxlY3RlZCBmZWF0dXJlLWRlc2VsZWN0aW9uIHN3aXRjaGVzIG9uIGFuCi0gICBJbnRl bC1iYXNlZCBQQyB3aXRoIFJlZCBIYXQgTGludXggNy4wIGFuZCBnY2MgMi45Ni4gVGhlIHNpemVz IGFyZSBmb3IKLSAgIG5vbi1zZWN1cml0eSBidWlsZHMuIFRoZSBmdWxseSBjb25maWd1cmVkIG5v bi1zZWN1cml0eSBidWlsZCBpcyAyMTI3NDA4Ci0gICBieXRlcy4KLQotICAgT3B0aW9uICAgICAg U2l6ZSAgICBTYXZpbmdzIEVmZmVjdAotICAgTk9JQ1AgICAgICAgIDU0NTMzMCAgIDc0LjQlIE5v IEludGVyYWN0aXZlIENvbW1hbmQgUGFyc2VyIChjb21tYW5kLWxpbmUgb25seSkKLSAgIE5PTE9D QUwgICAgIDE1Mzk5OTQgICAyNy42JSBObyBtYWtpbmcgY29ubmVjdGlvbnMuCi0gICBOT1hGRVIg ICAgICAxNTUxMTA4ICAgMjcuMSUgTm8gZmlsZSB0cmFuc2Zlci4KLSAgIElLU0RPTkxZICAgIDE1 NjY2MDggICAyNi40JSBJbnRlcm5ldCBLZXJtaXQgU2VydmVyIG9ubHkuCi0gICBOT0NTRVRTICAg ICAxNzUwMDk3ICAgMTcuNyUgTm8gY2hhcmFjdGVyLXNldCBjb252ZXJzaW9uLgotICAgTk9TUEwg ICAgICAgMTgwMDI5MyAgIDE1LjQlIE5vIFNjcmlwdCBQcm9ncmFtbWluZyBMYW5ndWFnZS4KLSAg IE5PTkVUICAgICAgIDE4MDg1NzUgICAxNS4wJSBObyBtYWtpbmcgbmV0d29yayBjb25uZWN0aW9u cy4KLSAgIE5PVU5JQ09ERSAgIDE4MzQ0MjYgICAxMy44JSBObyBVbmljb2RlIGNoYXJhY3Rlci1z ZXQgY29udmVyc2lvbi4KLSAgIE5PSEVMUCAgICAgIDE4Mzc4NzcgICAxMy42JSBObyBidWlsdC1p biBoZWxwIHRleHQuCi0gICBOT0RFQlVHICAgICAxODkxNjY5ICAgMTEuMSUgTm8gZGVidWcgbG9n LgotICAgTk9GUklMTFMgICAgMTkxODk2NiAgICA5LjglIE5vICJmcmlsbHMiLgotICAgTk9GVFAg ICAgICAgMTk3MjQ5NiAgICA3LjMlIE5vIEZUUCBjbGllbnQuCi0gICBOT0RJQUwgICAgICAxOTg0 NDg4ICAgIDYuNyUgTm8gYXV0b21hdGljIG1vZGVtIGRpYWxpbmcuCi0gICBOT1BVU0ggICAgICAy MDcwMTg0ICAgIDIuNyUgTm8gc2hlbGwgYWNjZXNzLCBydW5uaW5nIGV4dGVybmFsIHByb2dyYW1z LCBldGMuCi0gICBOT0lLU0QgICAgICAyMDc0MTI5ICAgIDIuNSUgTm8gSW50ZXJuZXQgS2VybWl0 IFNlcnZlciBjYXBhYmlsaXR5LgotICAgTk9IVFRQICAgICAgMjA4MjYxMCAgICAyLjElIE5vIEhU VFAgY2xpZW50LgotICAgTk9GTE9BVCAgICAgMjA5MTMzMiAgICAxLjclIE5vIGZsb2F0aW5nLXBv aW50IGFyaXRobWV0aWMuCi0gICBOT0NIQU5ORUxJTyAyMDk1OTc4ICAgIDEuNSUgTm8gRk9QRU4v RlJFQUQvRldSSVRFL0ZDTE9TRSwgZXRjLgotICAgTUlOSURJQUwgICAgMjA5ODAzNSAgICAxLjQl IE5vIGJ1aWx0LWluIHN1cHBvcnQgZm9yIG1hbnkga2luZHMgb2YgbW9kZW1zLgotICAgTk9TRVJW RVIgICAgMjA5ODk4NyAgICAxLjMlIE5vIHNlcnZlciBtb2RlLgotICAgTk9TRVhQICAgICAgMjEw NTg5OCAgICAxLjAlIE5vIFMtRXhwcmVzc2lvbnMuCi0gICBOT1BUWSAgICAgICAyMTE3NzQzICAg IDAuNSUgTm8gcHNldWRvdGVybWluYWwgc3VwcG9ydC4KLSAgIE5PUkxPR0lOICAgIDIxMjEwODkg ICAgMC4zJSBObyBSTE9HSU4gY29ubmVjdGlvbnMuCi0gICBOT09MRE1PREVNUyAyMTI0MDM4ICAg IDAuMiUgTm8gYnVpbHQtaW4gc3VwcG9ydCBmb3Igb2xkIGtpbmRzIG9mIG1vZGVtcy4KLSAgIE5P U1NIICAgICAgIDIxMjU2OTYgICAgMC4xJSBObyBTU0ggY29tbWFuZC4KLQotICAgQW5kIGhlcmUg YXJlIGEgZmV3IGNvbWJpbmF0aW9ucwotCi0gICBPcHRpb25zIFNpemUgU2F2aW5ncyBFZmZlY3QK LSAgIE5PREVCVUcgTk9JQ1AgTk9DU0VUUyBOT0xPQ0FMIDI4MTY0MSA4Ni43JSBObyBkZWJ1ZyBs b2csIHBhcnNlciwKLSAgIGNoYXJhY3RlciBzZXRzLCBvciBtYWtpbmcgY29ubmVjdGlvbnMuCi0g ICBOT0lDUCBOT0NTRVRTIE5PTE9DQUwgMzc2NDY4IDgyLjMlIE5vIHBhcnNlciwgY2hhcmFjdGVy IHNldHMsIG9yIG1ha2luZwotICAgY29ubmVjdGlvbnMuCi0gICBOT0lDUCBOT0NTRVRTIE5PTkVU IDQyNzUxMCA3OS45JSBObyBwYXJzZXIsIGNoYXJhY3RlciBzZXRzLCBvciBuZXR3b3JrCi0gICBj b25uZWN0aW9ucy4KLSAgIE5PU1BMIE5PQ1NFVFMgMTQyMzc4NCAzMy4xJSBObyBzY3JpcHQgbGFu Z3VhZ2UsIG9yIGNoYXJhY3RlciBzZXRzLgotCi0gICAtRE5PRlJJTExTIHJlbW92ZXMgdmFyaW91 cyBjb21tYW5kIHN5bm9ueW1zOyB0aGUgZm9sbG93aW5nIHRvcC1sZXZlbAotICAgY29tbWFuZHM6 IENMRUFSLCBERUxFVEUsIERJU0FCTEUsIEVOQUJMRSwgR0VUT0ssIE1BSUwsIFJFTkFNRSwgVFlQ RSwKLSAgIFdITzsgYW5kIHRoZSBmb2xsb3dpbmcgUkVNT1RFIGNvbW1hbmRzOiBLRVJNSVQsIExP R0lOLCBMT0dPVVQsIFBSSU5ULAotICAgVFlQRSwgV0hPLgotCi0gIDYuMi4gQ2hhbmdpbmcgQnVm ZmVyIFNpemVzCi0KLSAgIE1vc3QgbW9kZXJuIGNvbXB1dGVycyBoYXZlIHNvIG11Y2ggbWVtb3J5 IHRoYXQgKGEpIHRoZXJlIGlzIG5vIG5lZWQgdG8KLSAgIHNjcmltcCBhbmQgc2F2ZSwgYW5kIChi KSBDLUtlcm1pdCwgZXZlbiB3aGVuIGZ1bGx5IGNvbmZpZ3VyZWQsIGlzCi0gICByZWxhdGl2ZWx5 IHNtYWxsIGJ5IHRvZGF5J3Mgc3RhbmRhcmRzLgotCi0gICBUd28gbWFqb3IgZmFjdG9ycyBhZmZl Y3QgS2VybWl0J3Mgc2l6ZTogZmVhdHVyZSBzZWxlY3Rpb24gYW5kIGJ1ZmZlcgotICAgc2l6ZXMu IEJ1ZmZlciBzaXplcyBhZmZlY3Qgc3VjaCB0aGluZ3MgYXMgdGhlIG1heGltdW0gbGVuZ3RoIGZv ciBhCi0gICBLZXJtaXQgcGFja2V0LCB0aGUgbWF4aW11bSBsZW5ndGggZm9yIGEgY29tbWFuZCwg Zm9yIGEgbWFjcm8sIGZvciB0aGUKLSAgIG5hbWUgb2YgYSBtYWNybywgZXRjLiBCaWcgYnVmZmVy IHNpemVzIGFyZSB1c2VkIHdoZW4gdGhlIGZvbGxvd2luZwotICAgc3ltYm9sIGlzIGRlZmluZWQ6 Ci0KLSAgQklHQlVGT0sKLQotICAgYXMgaXQgaXMgYnkgZGVmYXVsdCBmb3IgbW9zdCBtb2Rlcm4g cGxhdGZvcm1zIChMaW51eCwgQUlYIDQgYW5kIDUsCi0gICBIUC1VWCAxMCBhbmQgMTEsIFNvbGFy aXMsIGV0YykgaW4gWzkwXWNrdXVzci5oLiBJZiB5b3VyIGJ1aWxkIGRvZXMgbm90Ci0gICBnZXQg YmlnIGJ1ZmZlcnMgYXV0b21hdGljYWxseSAoU0hPVyBGRUFUVVJFUyB0ZWxscyB5b3UpLCB5b3Ug Y2FuCi0gICBpbmNsdWRlIHRoZW0gYnkgcmVidWlsZGluZyB3aXRoIEJJR0JVRk9LIGRlZmluZWQ7 IGUuZy4gaW4gVW5peDoKLQotICBtYWtlIHh4eHggS0ZMQUdTPS1EQklHQlVGT0sKLQotICAgd2hl cmUgeHh4eCBpcyB0aGUgbWFrZWZpbGUgdGFyZ2V0LiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgeW91 IHdhbnQgdG8KLSAgIGJ1aWxkIHdpdGhvdXQgYmlnIGJ1ZmZlcnMgd2hlbiB0aGV5IG5vcm1hbGx5 IHdvdWxkIGJlIHNlbGVjdGVkLCB1c2U6Ci0KLSAgbWFrZSB4eHh4IEtGTEFHUz0tRE5PQklHQlVG Ci0KLSAgIFRoZXJlIGFyZSBvcHRpb25zIHRvIGNvbnRyb2wgS2VybWl0J3MgcGFja2V0IGJ1ZmZl ciBhbGxvY2F0aW9ucy4gVGhlCi0gICBmb2xsb3dpbmcgc3ltYm9scyBhcmUgZGVmaW5lZCBpbiBb OTFdY2tja2VyLmggaW4gc3VjaCBhIHdheSB0aGF0IHlvdQotICAgY2FuIG92ZXJyaWRlIHRoZW0g YnkgcmVkZWZpbmluZyB0aGVtIGluIENGTEFHUzoKLQotICAtRE1BWFNQPXh4eHggLSBNYXhpbXVt IHNlbmQtcGFja2V0IGxlbmd0aC4KLSAgLURNQVhSUD14eHh4IC0gTWF4aW11bSByZWNlaXZlLXBh Y2tldCBsZW5ndGguCi0gIC1EU0JTSVo9eHh4eCAtIFRvdGFsIGFsbG9jYXRpb24gZm9yIHNlbmQt cGFja2V0IGJ1ZmZlcnMuCi0gIC1EUkJTSVo9eHh4eCAtIFRvdGFsIGFsbG9jYXRpb24gZm9yIHJl Y2VpdmUtcGFja2V0IGJ1ZmZlcnMuCi0KLSAgIFRoZSBkZWZhdWx0cyBkZXBlbmQgb24gdGhlIHBs YXRmb3JtLgotCi0gICBVc2luZyBkeW5hbWljIGFsbG9jYXRpb24gKC1ERFlOQU1JQykgcmVkdWNl cyBzdG9yYWdlIHJlcXVpcmVtZW50cyBmb3IKLSAgIHRoZSBleGVjdXRhYmxlIHByb2dyYW0gb24g ZGlzaywgYW5kIGFsbG93cyBtb3JlIGFuZCBiaWdnZXIgcGFja2V0cyBhdAotICAgcnVudGltZS4g VGhpcyBoYXMgcHJvdmVuIHNhZmUgb3ZlciB0aGUgeWVhcnMsIGFuZCBub3cgbW9zdCBidWlsZHMg KGUuZy4KLSAgIGFsbCBVbml4LCBWTVMsIFdpbmRvd3MsIGFuZCBPUy8yIG9uZXMpIHVzZSBkeW5h bWljIG1lbW9yeSBhbGxvY2F0aW9uIGJ5Ci0gICBkZWZhdWx0LiBJZiBpdCBjYXVzZXMgdHJvdWJs ZSwgaG93ZXZlciwgdGhlbiBvbWl0IHRoZSAtRERZTkFNSUMgb3B0aW9uCi0gICBmcm9tIENGTEFH Uywgb3IgYWRkIC1ETk9EWU5BTUlDLgotCi0gIDYuMy4gT3RoZXIgU2l6ZS1SZWxhdGVkIEl0ZW1z Ci0KLSAgIFRvIG1ha2UgS2VybWl0IGNvbXBpbGUgYW5kIGxvYWQgc3VjY2Vzc2Z1bGx5LCB5b3Ug bWlnaHQgaGF2ZSB0byBjaGFuZ2UKLSAgIHlvdXIgYnVpbGQgcHJvY2VkdXJlIHRvOgotCi0gICAg YS4gUmVxdWVzdCBhIGxhcmdlciAoImxhcmdlIiBvciAiaHVnZSIpIGNvbXBpbGF0aW9uIC8gY29k ZS1nZW5lcmF0aW9uCi0gICAgICAgbW9kZWwuIFRoaXMgaXMgbmVlZGVkIGZvciAxNi1iaXQgUEMt YmFzZWQgVU5JWCB2ZXJzaW9ucyAobW9zdCBvcgotICAgICAgIGFsbCBvZiB3aGljaCBmYWlsIHRv IGJ1aWxkIEMtS2VybWl0IDcuMCBhbmQgbGF0ZXIgYW55d2F5KS4gVGhpcyBpcwotICAgICAgIHR5 cGljYWxseSBkb25lIHdpdGggYSAtTSBhbmQvb3IgLUYgc3dpdGNoIChzZWUgeW91ciBjYyBtYW51 YWwgb3IKLSAgICAgICBtYW4gcGFnZSBmb3IgZGV0YWlscykuCi0gICAgYi4gU29tZSBkZXZlbG9w bWVudCBzeXN0ZW1zIHN1cHBvcnQgb3ZlcmxheXMuIElmIHRoZSBwcm9ncmFtIGlzIHRvbwotICAg ICAgIGJpZyB0byBiZSBidWlsdCBhcyBpcywgY2hlY2sgeW91ciBsb2FkZXIgbWFudWFsICgibWFu IGxkIikgdG8gc2VlCi0gICAgICAgaWYgYW4gb3ZlcmxheSBmZWF0dXJlIGlzIGF2YWlsYWJsZS4g U2VlIHRoZSAyLjEwLzIuMTEgQlNEIGV4YW1wbGUKLSAgICAgICBpbiB0aGUgVU5JWCBtYWtlZmls ZS4gKEFjdHVhbGx5LCBhcyBvZiB2ZXJzaW9uIDcuMCwgQy1LZXJtaXQgaXMgdG9vCi0gICAgICAg YmlnIHRvIGJ1aWxkLCBwZXJpb2QsIGV2ZW4gd2l0aCBvdmVybGF5cywgb24gMi54eCBCU0QpLgot ICAgIGMuIFNpbWlsYXJseSwgc29tZSBzbWFsbCBhbmQvb3Igc2VnbWVudC1iYXNlZCBhcmNoaXRl Y3R1cmVzIHN1cHBvcnQKLSAgICAgICAiY29kZSBtYXBwaW5nIiwgd2hpY2ggaXMgc2ltaWxhciB0 byBvdmVybGF5cyAoUERQMTEtYmFzZWQgVkVOSVgKLSAgICAgICAxLjAsIGNpcmNhIDE5ODQsIHdh cyBhbiBleGFtcGxlKS4gU2VlIHRoZSBsaW5rZXIgZG9jdW1lbnRhdGlvbiBvbgotICAgICAgIHRo ZSBhZmZlY3RlZCBwbGF0Zm9ybS4KLQotICAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byByZWR1Y2Ug dGhlIHNpemUgb2YgdGhlIGV4ZWN1dGFibGUgcHJvZ3JhbSBmaWxlCi0gICBpbiBzZXZlcmFsIG90 aGVyIHdheXM6Ci0KLSAgICBhLiBJbmNsdWRlIHRoZSAtTyAob3B0aW1pemUpIGNvbXBpbGVyIHN3 aXRjaCBpZiBpdCBpc24ndCBhbHJlYWR5Ci0gICAgICAgaW5jbHVkZWQgaW4geW91ciAibWFrZSIg ZW50cnkgKGFuZCBpZiBpdCB3b3JrcyEpLiBJZiB5b3VyIGNvbXBpbGVyCi0gICAgICAgc3VwcG9y dHMgaGlnaGVyIGxldmVscyBvZiBvcHRpbWl6YXRpb24gKGUuZy4gLU8yIG9yIGhpZ2hlciBudW1i ZXIsCi0gICAgICAgLU9ub2xpbWl0IChIUC1VWCksIGV0YyksIHRyeSB0aGVtOyB0aGUgZ3JlYXRl ciB0aGUgbGV2ZWwgb2YKLSAgICAgICBvcHRpbWl6YXRpb24sIHRoZSBsb25nZXIgdGhlIGNvbXBp bGF0aW9uIGFuZCBtb3JlIGxpa2VseSB0aGUKLSAgICAgICBjb21waWxlciB3aWxsIHJ1biBvdXQg b2YgbWVtb3J5LiBUaGUgbGF0dGVyIGV2ZW50dWFsaXR5LCBzb21lCi0gICAgICAgY29tcGlsZXJz IGFsc28gcHJvdmlkZSBjb21tYW5kLWxpbmUgb3B0aW9ucyB0byBhbGxvY2F0ZSBtb3JlIG1lbW9y eQotICAgICAgIGZvciB0aGUgb3B0aW1pemVyLCBsaWtlICItT2xpbWl0IG51bWJlciIgaW4gVWx0 cml4LgotICAgIGIuIElmIHlvdXIgcGxhdGZvcm0gc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcywg Y2hhbmdlIHRoZSBtYWtlIGVudHJ5Ci0gICAgICAgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcyBm ZWF0dXJlLiBUaGUgd2F5IHRvIGRvIHRoaXMgaXMsIG9mCi0gICAgICAgY291cnNlLCBwbGF0Zm9y bSBkZXBlbmRlbnQ7IHNlZSB0aGUgTmVYVCBtYWtlZmlsZSB0YXJnZXQgZm9yIGFuCi0gICAgICAg ZXhhbXBsZS4gc29tZSBwbGF0Zm9ybXMgKGxpa2UgU29sYXJpcykgZG8gaXQgYXV0b21hdGljYWxs eSBhbmQgZ2l2ZQotICAgICAgIHlvdSBubyBjaG9pY2UuIEJ1dCB3YXRjaCBvdXQ6IGV4ZWN1dGFi bGVzIGxpbmtlZCB3aXRoIHNoYXJlZAotICAgICAgIGxpYnJhcmllcyBhcmUgbGVzcyBwb3J0YWJs ZSB0aGFuIHN0YXRpY2FsbHkgbGlua2VkIGV4ZWN1dGFibGVzLgotICAgIGMuIFN0cmlwIHRoZSBw cm9ncmFtIGltYWdlIGFmdGVyIGJ1aWxkaW5nICgibWFuIHN0cmlwIiBmb3IgZnVydGhlcgotICAg ICAgIGluZm8pLCBvciBhZGQgLXMgdG8gdGhlIExOS0ZMQUdTIChVTklYIG9ubHkpLiBUaGlzIHN0 cmlwcyB0aGUKLSAgICAgICBwcm9ncmFtIG9mIGl0cyBzeW1ib2wgdGFibGUgYW5kIHJlbG9jYXRp b24gaW5mb3JtYXRpb24uCi0gICAgZC4gTW92ZSBjaGFyYWN0ZXIgc3RyaW5ncyBpbnRvIGEgc2Vw YXJhdGUgZmlsZS4gU2VlIHRoZSAyLjExIEJTRAotICAgICAgIHRhcmdldCBmb3IgYW4gZXhhbXBs ZS4KLQotICA2LjQuIFNwYWNlL1RpbWUgVHJhZGVvZmZzCi0KLSAgIFRoZXJlIGFyZSBtb3JlIHRo YW4gNjAwMCBkZWJ1ZygpIHN0YXRlbWVudHMgaW4gdGhlIHByb2dyYW0uIElmIHlvdSB3YW50Ci0g ICB0byBzYXZlIGJvdGggc3BhY2UgKHByb2dyYW0gc2l6ZSkgYW5kIHRpbWUgKHByb2dyYW0gZXhl Y3V0aW9uIHRpbWUpLAotICAgaW5jbHVkZSAtRE5PREVCVUcgaW4gdGhlIGNvbXBpbGF0aW9uLiBJ ZiB5b3Ugd2FudCB0byBpbmNsdWRlIGRlYnVnZ2luZwotICAgZm9yIHRyYWNraW5nIGRvd24gcHJv YmxlbXMsIG9taXQgLUROT0RFQlVHIGZyb20gdGhlIG1ha2UgZW50cnkuIEJ1dAotICAgd2hlbiB5 b3UgaW5jbHVkZSBkZWJ1Z2dpbmcsIHlvdSBoYXZlIHR3byBjaG9pY2VzIGZvciBob3cgaXQncyBk b25lLiBPbmUKLSAgIGRlZmluaXRpb24gZGVmaW5lcyBkZWJ1ZygpIHRvIGJlIGEgZnVuY3Rpb24g Y2FsbDsgdGhpcyBpcyBjaGVhcCBpbgotICAgc3BhY2UgYnV0IGV4cGVuc2l2ZSBpbiBleGVjdXRp b24uIFRoZSBvdGhlciBkZWZpbmVzIGRlYnVnIGFzICJpZgotICAgKGRlYmxvZykiIGFuZCB0aGVu IHRoZSBmdW5jdGlvbiBjYWxsLCB0byBvbWl0IHRoZSBmdW5jdGlvbiBjYWxsCi0gICBvdmVyaGVh ZCB3aGVuIHRoZSBkZWJ1ZyBsb2cgaXMgbm90IGFjdGl2ZS4gQnV0IHRoaXMgYWRkcyBhIGxvdCBv ZiBzcGFjZQotICAgdG8gdGhlIHByb2dyYW0uIEJvdGggbWV0aG9kcyB3b3JrLCB0YWtlIHlvdXIg Y2hvaWNlOyBJRkRFQlVHIGlzCi0gICBwcmVmZXJyZWQgaWYgbWVtb3J5IGlzIG5vdCBhIGNvbnN0 cmFpbnQgYnV0IHRoZSBjb21wdXRlciBpcyBsaWtlbHkgdG8KLSAgIGJlIHNsb3cuIFRoZSBmaXJz dCBtZXRob2QgaXMgdGhlIGRlZmF1bHQsIGkuZS4gaWYgbm90aGluZyBpcyBkb25lIHRvCi0gICB0 aGUgQ0ZMQUdTIG9yIGluIFs5Ml1ja2NkZWIuaCAoYnV0IGluIHNvbWUgY2FzZXMsIGUuZy4gVk1T LCBpdCBpcykuIFRvCi0gICBzZWxlY3QgdGhlIHNlY29uZCBtZXRob2QsIGluY2x1ZGUgLURJRkRF QlVHIGluIHRoZSBjb21waWxhdGlvbiAoYW5kCi0gICBkb24ndCBpbmNsdWRlIC1ETk9ERUJVRyku Ci0KLSAgIFsgWzkzXUMtS2VybWl0IEhvbWUgXSBbIFs5NF1LZXJtaXQgSG9tZSBdCi0KLSAgNy4g TU9ERU0gRElBTElORwotCi0gICBbIFs5NV1Ub3AgXSBbIFs5Nl1Db250ZW50cyBdIFsgWzk3XU5l eHQgXSBbIFs5OF1QcmV2aW91cyBdCi0KLSAgIC1ETk9ESUFMIHJlbW92ZXMgYXV0b21hdGljIG1v ZGVtIGRpYWxpbmcgY29tcGxldGVseSwgaW5jbHVkaW5nIHRoZQotICAgZW50aXJlIFs5OV1ja3Vk aWEuYyBtb2R1bGUsIHBsdXMgYWxsIGNvbW1hbmRzIHRoYXQgcmVmZXIgdG8gZGlhbGluZyBpbgot ICAgdGhlIHZhcmlvdXMgY2t1dXMqLmMgbW9kdWxlcy4KLQotICAgLURNSU5JRElBTCBsZWF2ZXMg dGhlIERJQUwgYW5kIHJlbGF0ZWQgY29tbWFuZHMgKFNFVC9TSE9XIE1PREVNLAotICAgU0VUL1NI T1cgRElBTCkgaW50YWN0LCBidXQgcmVtb3ZlcyBzdXBwb3J0IGZvciBhbGwgdHlwZXMgb2YgbW9k ZW1zCi0gICBleGNlcHQgQ0NJVFQsIEhheWVzLCBVbmtub3duLCBVc2VyLWRlZmluZWQsIEdlbmVy aWMtaGlnaC1zcGVlZCwgYW5kCi0gICBOb25lICg9IERpcmVjdCkuIFRoZSBNSU5JRElBTCBvcHRp b24gY3V0cyB0aGUgc2l6ZSBvZiB0aGUgZGlhbCBtb2R1bGUKLSAgIGFwcHJveGltYXRlbHkgaW4g aGFsZi4gVXNlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIG9ubHkgSGF5ZXMgb3IgQ0NJVFQKLSAg IG1vZGVtcyBhbmQgZG9uJ3Qgd2FudCB0byBjYXJyeSB0aGUgYmFnZ2FnZSBmb3IgdGhlIG90aGVy IHR5cGVzLgotCi0gICBBIGNvbXByb21pc2UgYmV0d2VlbiBmdWxsIGRpYWxlciBzdXBwb3J0IGFu ZCBNSU5JRElBTCBpcyBvYnRhaW5lZCBieQotICAgcmVtb3Zpbmcgc3VwcG9ydCBmb3IgIm9sZCIg bW9kZW1zIC0tIGFsbCB0aGUgc3RyYW5nZSBub24tSGF5ZXMKLSAgIGNvbXBhdGlibGUgMTIwMCBh bmQgMjQwMCBicHMgbW9kZW1zIHRoYXQgQy1LZXJtaXQgaGFzIGJlZW4gY2FycnlpbmcKLSAgIGFy b3VuZCBzaW5jZSAxOTg1IG9yIHNvLiBUbyByZW1vdmUgc3VwcG9ydCBmb3IgdGhlc2UgbW9kZW1z LCBhZGQKLSAgIC1ETk9PTERNT0RFTVMgdG8gQ0ZMQUdTIGF0IGNvbXBpbGF0aW9uIHRpbWUuCi0K LSAgIEZpbmFsbHksIGlmIHlvdSBrZWVwIHN1cHBvcnQgZm9yIG9sZCBtb2RlbXMsIHlvdSB3aWxs IG5vdGljZSB0aGF0IHRoZWlyCi0gICBuYW1lcyBhcHBlYXIgb24gdGhlICJzZXQgbW9kZW0gPyIg bWVudS4gVGhhdCdzIGJlY2F1c2UgdGhlaXIgbmFtZXMgYXJlLAotICAgYnkgZGVmYXVsdCwgInZp c2libGUiLiBCdXQgdGhlIGxpc3QgaXMgY29uZnVzaW5nIHRvIHRoZSB5b3VuZ2VyCi0gICBnZW5l cmF0aW9uLCB3aG8gaGF2ZSBvbmx5IGhlYXJkIG9mIG1vZGVtcyBmcm9tIHRoZSBWLjMyYmlzLWFu ZC1sYXRlcgotICAgZXJhLiBJZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSBvbGQgbW9kZW1z LCBidXQgZG9uJ3Qgd2FudCB0aGVpcgotICAgbmFtZXMgY2x1dHRlcmluZyB1cCBtZW51cywgYWRk IHRoaXMgdG8gQ0ZMQUdTOgotCi0gIC1ETV9PTEQ9MQotCi0gICBbIFsxMDBdQy1LZXJtaXQgSG9t ZSBdIFsgWzEwMV1LZXJtaXQgSG9tZSBdCi0KLSAgOC4gTkVUV09SSyBTVVBQT1JUCi0KLSAgIFsg WzEwMl1Ub3AgXSBbIFsxMDNdQ29udGVudHMgXSBbIFsxMDRdTmV4dCBdIFsgWzEwNV1QcmV2aW91 cyBdCi0KLSAgIFNFQ1RJT04gQ09OVEVOVFMKLQotICA4LjEuIFsxMDZdVENQL0lQCi0gIDguMi4g WzEwN11YLjI1Ci0gIDguMy4gWzEwOF1PdGhlciBOZXR3b3JrcwotCi0gICBDLUtlcm1pdCBzdXBw b3J0cyBub3Qgb25seSBzZXJpYWwtcG9ydCBhbmQgbW9kZW0gY29ubmVjdGlvbnMsIGJ1dCBhbHNv Ci0gICBUQ1AvSVAgYW5kIFguMjUgbmV0d29yayBjb25uZWN0aW9ucy4gU29tZSB2ZXJzaW9ucyBz dXBwb3J0IG90aGVyCi0gICBuZXR3b3JrIHR5cGVzIHRvbyBsaWtlIERFQ25ldCwgTEFULCBORVRC SU9TLCBldGMuIElmIHlvdSBkZWZpbmUgdGhlCi0gICBmb2xsb3dpbmcgc3ltYm9sOgotCi0gIE5P TkVUCi0KLSAgIHRoZW4gYWxsIG5ldHdvcmsgc3VwcG9ydCBpcyBjb21waWxlZCBhd2F5LgotCi0g IDguMS4gVENQL0lQCi0KLSAgIFNVQlNFQ1RJT04gQ09OVEVOVFMKLQotICA4LjEuMS4gWzEwOV1G aXJld2FsbHMKLSAgOC4xLjIuIFsxMTBdQ29tcGlsYXRpb24gYW5kIExpbmtpbmcgUHJvYmxlbXMK LSAgOC4xLjMuIFsxMTFdRW5hYmxpbmcgSG9zdCBBZGRyZXNzIExpc3RzCi0gIDguMS40LiBbMTEy XUVuYWJsaW5nIFRlbG5ldCBOQVdTCi0gIDguMS41LiBbMTEzXUVuYWJsaW5nIEluY29taW5nIFRD UC9JUCBDb25uZWN0aW9ucwotICA4LjEuNi4gWzExNF1EaXNhYmxpbmcgU0VUIFRDUCBPcHRpb25z Ci0KLSAgIEMtS2VybWl0J3MgVENQL0lQIGZlYXR1cmVzIHJlcXVpcmUgdGhlIEJlcmtlbGV5IHNv Y2tldHMgbGlicmFyeSBvcgotICAgZXF1aXZhbGVudCwgZ2VuZXJhbGx5IGF2YWlsYWJsZSBvbiBh bnkgVW5peCBzeXN0ZW0sIGFzIHdlbGwgYXMgaW4KLSAgIFdpbmRvd3MgOXgvTlQsIE9TLzIsIFZN UywgQU9TL1ZTLCBWT1MsIGV0Yy4gVGhlIFRDUC9JUCBzdXBwb3J0IGluY2x1ZGVzCi0gICBidWls dC1pbiBURUxORVQsIEZUUCwgYW5kIEhUVFAgcHJvdG9jb2wuIFRvIHNlbGVjdCBUQ1AvSVAgc3Vw cG9ydCwKLSAgIGluY2x1ZGUgLURUQ1BTT0NLRVQgaW4geW91ciBtYWtlZmlsZSB0YXJnZXQncyBD RkxBR1MsIG9yIChpbiBWTVMpIHRoZQotICAgYXBwcm9wcmlhdGUgdmFyaWFudCAoZS5nLiAtRFdP TExPTkdPTkcsIC1ETVVMVElORVQsIC1ERVhDRUxBTiwKLSAgIC1EV0lOVENQLCBldGMpLgotCi0g ICBUaGUgVk1TIGFuZC9vciBlYXJseSBVbml4IHRoaXJkLXBhcnR5IFRDUC9JUCBwcm9kdWN0cyBh cmUgb2Z0ZW4KLSAgIGluY29tcGF0aWJsZSB3aXRoIGVhY2ggb3RoZXIsIGFuZCBzb21ldGltZXMg d2l0aCBkaWZmZXJlbnQgdmVyc2lvbnMgb2YKLSAgIHRoZW1zZWx2ZXMuIEZvciBleGFtcGxlLCBX b2xsb25nb25nIHJlcG9ydGVkbHkgcHV0IGhlYWRlciBmaWxlcyBpbgotICAgZGlmZmVyZW50IGRp cmVjdG9yaWVzIGZvciBkaWZmZXJlbnQgVU5JWCB2ZXJzaW9uczoKLQotICAgICAqIGluLmggY2Fu IGJlIGluIGVpdGhlciAvdXNyL2luY2x1ZGUvc3lzIG9yIC91c2VyL2luY2x1ZGUvbmV0aW5ldC4K LSAgICAgKiB0ZWxuZXQuaCBjYW4gYmUgaW4gZWl0aGVyIC91c3IvaW5jbHVkZS9hcnBhIG9yCi0g ICAgICAgL3VzZXIvaW5jbHVkZS9uZXRpbmV0LgotICAgICAqIGluZXQuaCBjYW4gYmUgaW4gZWl0 aGVyIC91c3IvaW5jbHVkZS9hcnBhIG9yIC91c2VyL2luY2x1ZGUvc3lzLgotCi0gICBJbiBjYXNl cyBsaWtlIHRoaXMsIHVzZSB0aGUgLUkgY2MgY29tbWFuZC1saW5lIG9wdGlvbiB3aGVuIHBvc3Np YmxlOwotICAgb3RoZXJ3aXNlIGl0J3MgYmV0dGVyIHRvIG1ha2UgbGlua3MgaW4gdGhlIGZpbGUg c3lzdGVtIHRoYW4gaXQgaXMgdG8KLSAgIGhhY2sgdXAgdGhlIEMtS2VybWl0IHNvdXJjZSBjb2Rl LiBTdXBwb3NlLCBmb3IgZXhhbXBsZSwgS2VybWl0IGlzCi0gICBsb29raW5nIGZvciB0ZWxuZXQu aCBpbiAvdXNyL2luY2x1ZGUvYXJwYSwgYnV0IG9uIHlvdXIgY29tcHV0ZXIgaXQgaXMKLSAgIGlu IC91c3IvaW5jbHVkZS9uZXRpbmV0LiBEbyB0aGlzIChhcyByb290LCBvciBnZXQgdGhlIHN5c3Rl bQotICAgYWRtaW5pc3RyYXRvciB0byBkbyBpdCk6Ci0KLSAgY2QgL3Vzci9pbmNsdWRlL2FycGEK LSAgbG4gL3Vzci9pbmNsdWRlL25ldGluZXQvdGVsbmV0LmggdGVsbmV0LmgKLQotICAgKCJtYW4g bG4iIGZvciBkZXRhaWxzIGFib3V0IGxpbmtzLikKLQotICAgVGhlIG5ldHdvcmsgc3VwcG9ydCBm b3IgVENQL0lQIGFuZCBYLjI1IGlzIGluIHRoZSBzb3VyY2UgZmlsZXMKLSAgIFsxMTVdY2tjbmV0 LmgsIFsxMTZdY2tjdGVsLmMsIFsxMTddY2tjdGVsLmMsIFsxMThdY2tjdGVsLmgsCi0gICBbMTE5 XWNrY2Z0cC5jLCB3aXRoIG1pc2NlbGxhbmVvdXMgU0hPVyBjb21tYW5kcywgZXRjLCBpbiB0aGUg dmFyaW91cwotICAgY2t1dXMqLmMgbW9kdWxlcywgcGx1cyBjb2RlIGluIHRoZSBjaypjb24uYyBv ciBja3VjbnMuYyAoQ09OTkVDVAotICAgY29tbWFuZCkgYW5kIHNldmVyYWwgb3RoZXIgbW9kdWxl cyB0byBkZXRlY3QgVEVMTkVUIG5lZ290aWF0aW9ucywgZXRjLgotCi0gICBXaXRoaW4gdGhlIFRD UFNPQ0tFVCBjb2RlLCBzb21lIHNvY2tldC1sZXZlbCBjb250cm9scyBhcmUgaW5jbHVkZWQgaWYK LSAgIFRDUFNPQ0tFVCBpcyBkZWZpbmVkIGluIHRoZSBDLUtlcm1pdCBDRkxBR1MgYW5kIFNPTF9T T0NLRVQgaXMgZGVmaW5lZAotICAgaW4gaW4gdGhlIHN5c3RlbSdzIFRDUC1yZWxhdGVkIGhlYWRl ciBmaWxlcywgc3VjaCBhcyA8c3lzL3NvY2tldC5oPi4KLSAgIFRoZXNlIGFyZToKLQotICBTRVQg VENQIEtFRVBBTElWRQotICBTRVQgVENQIExJTkdFUgotICBTRVQgVENQIFJFQ1ZCVUYKLSAgU0VU IFRDUCBTRU5EQlVGCi0KLSAgIEluIGFkZGl0aW9uLCBpZiBUQ1BfTk9ERUxBWSBpcyBkZWZpbmVk LCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgaXMgYWxzbwotICAgZW5hYmxlZDoKLQotICBTRVQgVENQ IE5PREVMQVkgKE5hZ2xlIGFsZ29yaXRobSkKLQotICAgU2VlIHRoZSBbMTIwXUMtS2VybWl0IHVz ZXIgZG9jdW1lbnRhdGlvbiBmb3IgZGVzY3JpcHRpb25zIG9mIHRoZXNlCi0gICBjb21tYW5kcy4K LQotICA4LjEuMS4gRmlyZXdhbGxzCi0KLSAgIFRoZXJlIGV4aXN0IHZhcmlvdXMgdHlwZXMgb2Yg ZmlyZXdhbGxzLCBzZXQgdXAgdG8gc2VwYXJhdGUgdXNlcnMgb2YgYW4KLSAgIGludGVybmFsIFRD UC9JUCBuZXR3b3JrICgiSW50cmFuZXQiKSBmcm9tIHRoZSBncmVhdCB3aWRlIEludGVybmV0LCBi dXQKLSAgIHRoZW4gdG8gbGV0IHNlbGVjdGVkIHVzZXJzIG9yIHNlcnZpY2VzIGdldCB0aHJvdWdo IGFmdGVyIGFsbC4KLQotICAgT25lIGZpcmV3YWxsIG1ldGhvZCBpcyBjYWxsZWQgU09DS1MsIGlu IHdoaWNoIGEgcHJveHkgc2VydmVyIGFsbG93cwotICAgdXNlcnMgaW5zaWRlIGEgZmlyZXdhbGwg dG8gYWNjZXNzIHRoZSBvdXRzaWRlIHdvcmxkLCBiYXNlZCBvbiBhCi0gICBwZXJtaXNzaW9uIGxp c3QgZ2VuZXJhbGx5IHN0b3JlZCBpbiBhIGZpbGUuIFNPQ0tTIGlzIGVuYWJsZWQgaW4gb25lIG9m Ci0gICB0d28gd2F5cy4gRmlyc3QsIHRoZSBzdGFuZGFyZCBzb2NrZXRzIGxpYnJhcnkgaXMgbW9k aWZpZWQgdG8gaGFuZGxlIHRoZQotICAgZmlyZXdhbGwsIGFuZCB0aGVuIGFsbCB0aGUgY2xpZW50 IGFwcGxpY2F0aW9ucyBhcmUgcmVsaW5rZWQgKGlmCi0gICBuZWNlc3NhcnksIGkuZS4gaWYgdGhl IGxpYnJhcmllcyBhcmUgbm90IGR5bmFtaWNhbGx5IGxvYWRlZCkgd2l0aCB0aGUKLSAgIG1vZGlm aWVkIHNvY2tldHMgbGlicmFyeS4gVGhlIEFQSXMgYXJlIGFsbCB0aGUgc2FtZSwgc28gdGhlCi0g ICBhcHBsaWNhdGlvbnMgZG8gbm90IG5lZWQgdG8gYmUgcmVjb2RlZCBvciByZWNvbXBpbGVkLgot Ci0gICBJbiB0aGUgb3RoZXIgbWV0aG9kLCB0aGUgYXBwbGljYXRpb25zIG11c3QgYmUgbW9kaWZp ZWQgdG8gY2FsbAotICAgcmVwbGFjZW1lbnQgcm91dGluZXMsIHN1Y2ggYXMgUmFjY2VwdCgpIGlu c3RlYWQgb2YgYWNjZXB0KCksIFJiaW5kKCkKLSAgIGluc3RlYWQgb2YgYmluZCgpLCBldGMsIGFu ZCB0aGVuIGxpbmtlZCB3aXRoIGEgc2VwYXJhdGUgU09DS1MgbGlicmFyeS4KLSAgIFRoaXMgc2Vj b25kIG1ldGhvZCBpcyBhY2NvbXBsaXNoZWQgKGZvciBTT0NLUzQpIGluIEMtS2VybWl0IGJ5Ci0g ICBpbmNsdWRpbmcgLURDS19TT0NLUyBpbiB5b3VyIENGTEFHUywgYW5kIGFsc28gYWRkaW5nOgot Ci0gIC1sc29ja3MKLQotICAgdG8gTElCUywgb3IgcmVwbGFjaW5nIC1sc29ja2V0cyB3aXRoIC1s c29ja3MgKGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZQotICAgc29ja3MgbGlicmFyeSBhbHNvIGlu Y2x1ZGVzIGFsbCB0aGUgc29ja2V0cyBlbnRyeSBwb2ludHMpLgotCi0gICBGb3IgU09DS1M1LCB1 c2UgLURDS19TT0NLUzUuCi0KLSAgIEV4cGxpY2l0IGZpcmV3YWxsIHN1cHBvcnQgY2FuLCBpbiBn ZW5lcmFsLCBub3QgYmUgYSBzdGFuZGFyZCBmZWF0dXJlIG9yCi0gICBhIGZlYXR1cmUgdGhhdCBp cyBzZWxlY3RlZCBhdCBydW50aW1lLCBiZWNhdXNlIHRoZSBTT0NLUyBsaWJyYXJ5IHRlbmRzCi0g ICB0byBiZSBkaWZmZXJlbnQgYXQgZWFjaCBzaXRlIC0tIGxvY2FsIG1vZGlmaWNhdGlvbnMgYWJv dW5kLgotCi0gICBUaGUgaWRlYWwgc2l0dWF0aW9uIG9jY3VycyB3aGVuIGZpcmV3YWxscyBhcmUg c3VwcG9ydGVkIGJ5IHRoZSBmaXJzdAotICAgbWV0aG9kLCB1c2luZyBkeW5hbWljYWxseSBsaW5r ZWQgc29ja2V0cy1yZXBsYWNlbWVudCBsaWJyYXJpZXM7IGluIHRoaXMKLSAgIGNhc2UsIGFsbCB5 b3VyIFRDUC9JUCBjbGllbnQgYXBwbGljYXRpb25zIG5lZ290aWF0ZSB0aGUgZmlyZXdhbGwKLSAg IHRyYW5zcGFyZW50bHkuCi0KLSAgOC4xLjIuIENvbXBpbGF0aW9uIGFuZCBMaW5raW5nIFByb2Js ZW1zCi0KLSAgIElmIHlvdSBnZXQgYSBjb21waWxhdGlvbiBlcnJvciBpbiBbMTIxXWNrY25ldC5j LCB3aXRoIGEgY29tcGxhaW50IGxpa2UKLSAgICJpbmNvbXBhdGlibGUgdHlwZXMgaW4gYXNzaWdu bWVudCIsIGl0IHByb2JhYmx5IGhhcyBzb21ldGhpbmcgdG8gZG8KLSAgIHdpdGggdGhlIGRhdGEg dHlwZSB5b3VyIHN5c3RlbSB1c2VzIGZvciB0aGUgaW5ldF9hZGRyKCkgZnVuY3Rpb24sIHdoaWNo Ci0gICBpcyBkZWNsYXJlZCAodXN1YWxseSkgaW4gPGFycGEvaW5ldC5oPi4gS2VybWl0IHVzZXMg InVuc2lnbmVkIGxvbmciCi0gICB1bmxlc3MgdGhlIHN5bWJvbCBJTkFERFJYIGlzIGRlZmluZWQs IGluIHdoaWNoIGNhc2UgInN0cnVjdCBpbmFkZHIiIGlzCi0gICB1c2VkIGluc3RlYWQuIFRyeSBh ZGRpbmcgLURJTkFERFJYIHRvIENGTEFHUyBpbiB5b3VyIG1ha2UgZW50cnksIGFuZCBpZgotICAg dGhhdCBmaXhlcyB0aGUgcHJvYmxlbSwgcGxlYXNlIHNlbmQgYSByZXBvcnQgdG8ga2VybWl0QGNv bHVtYmlhLmVkdS4KLQotICAgQ29tcGlsYXRpb24gZXJyb3JzIG1pZ2h0IGFsc28gaGF2ZSB0byBk byB3aXRoIHRoZSBkYXRhIHR5cGUgdXNlZCBmb3IKLSAgIGdldHNvY2tvcHQoKSBhbmQgc2V0c29j a29wdCgpIG9wdGlvbi1sZW5ndGggZmllbGQuIFRoaXMgaXMgbm9ybWFsbHkgYW4KLSAgIGludCwg YnV0IHNvbWV0aW1lcyBpdCdzIGEgc2hvcnQsIGEgbG9uZywgb3IgYW4gdW5zaWduZWQgYW55IG9m IHRob3NlLAotICAgb3IgYSBzaXplX3QuIFRvIGZpeCB0aGUgY29tcGlsYXRpb24gcHJvYmxlbSwg YWRkIC1EU09DS09QVF9UPXh4eCB0byB0aGUKLSAgIENGTEFHUyBpbiB5b3VyIG1ha2VmaWxlIHRh cmdldCwgd2hlcmUgeHh4IGlzIHRoZSBhcHByb3ByaWF0ZSB0eXBlICh1c2UKLSAgICJtYW4gZ2V0 c29ja29wdCIgb3IgZ3JlcCB0aHJvdWdoIHlvdXIgc3lzdGVtL25ldHdvcmsgaGVhZGVyIGZpbGVz IHRvCi0gICBmaW5kIHRoZSBuZWVkZWQgdHlwZSkuCi0KLSAgOC4xLjMuIEVuYWJsaW5nIEhvc3Qg QWRkcmVzcyBMaXN0cwotCi0gICBXaGVuIHlvdSBnaXZlIEtlcm1pdCBhbiBJUCBob3N0IG5hbWUs IGl0IGNhbGxzIHRoZSBzb2NrZXQgcm91dGluZQotICAgZ2V0aG9zdGJ5bmFtZSgpIHRvIHJlc29s dmUgaXQuIGdldGhvc3RieW5hbWUoKSByZXR1cm5zIGEgaG9zdGVudAotICAgc3RydWN0LCB3aGlj aCBtaWdodCBvciBtaWdodCBub3Qgbm90IGluY2x1ZGUgYSBsaXN0IG9mIGFkZHJlc3NlczsgaWYg aXQKLSAgIGRvZXMsIHRoZW4gaWYgdGhlIGZpcnN0IG9uZSBmYWlscywgS2VybWl0IGNhbiB0cnkg dGhlIHNlY29uZCBvbmUsIGFuZAotICAgc28gb24uIEhvd2V2ZXIsIHRoaXMgd2lsbCBvbmx5IHdv cmsgaWYgdGhlIHN5bWJvbCAiaF9hZGRyIiBpcyBhIG1hY3JvCi0gICBkZWZpbmVkIGFzICJoX2Fk ZHJfbGlzdFswXSIsIHVzdWFsbHkgaW4gbmV0ZGIuaC4gSWYgaXQgaXMsIHRoZW4geW91IGNhbgot ICAgYWN0aXZhdGUgdGhpcyBmZWF0dXJlIGJ5IGRlZmluaW5nIHRoZSBmb2xsb3dpbmcgc3ltYm9s IGluIENGTEFHUzoKLQotICBIQUREUkxJU1QKLQotICA4LjEuNC4gRW5hYmxpbmcgVGVsbmV0IE5B V1MKLQotICAgVGhlIFRlbG5ldCBOZWdvdGlhdGlvbiBBYm91dCBXaW5kb3cgU2l6ZSAoTkFXUykg b3B0aW9uIHJlcXVpcmVzIHRoZQotICAgYWJpbGl0eSB0byBmaW5kIG91dCB0aGUgdGVybWluYWwg c2NyZWVuJ3MgZGltZW5zaW9ucy4gRS5nLiBpbiBVbml4LCB3ZQotICAgbmVlZCBzb21ldGhpbmcg bGlrZSBpb2N0bCgwLCBUSU9DR1dJTlNaLCAuLi4pLiBJZiB5b3VyIHZlcnNpb24gb2YKLSAgIEtl cm1pdCB3YXMgYnVpbHQgd2l0aCBOQVdTIGNhcGFiaWxpdHksIFNIT1cgVkVSU0lPTlMgaW5jbHVk ZXMgQ0tfTkFXUwotICAgYW1vbmcgdGhlIGNvbXBpbGVyIG9wdGlvbnMuIElmIGl0IGRvZXNuJ3Qs IHlvdSBjYW4gYWRkIGl0IGJ5IGRlZmluaW5nCi0gICBDS19OQVdTIGF0IGNvbXBpbGUgdGltZS4g VGhlbiwgaWYgdGhlIGNvbXBpbGVyIG9yIGxpbmtlciBjb21wbGFpbiBhYm91dAotICAgdW5kZWZp bmVkIG9yIG1pc3Npbmcgc3ltYm9scywgb3IgdGhlcmUgaXMgbm8gY29tcGxhaW50IGJ1dCBTSE9X Ci0gICBURVJNSU5BTCBmYWlscyB0byBzaG93IHJlYXNvbmFibGUgIlJvd3MgPSwgQ29sdW1ucyA9 IiB2YWx1ZXMsIHRoZW4gdGFrZQotICAgYSBsb29rIGF0IChvciB3cml0ZSkgdGhlIGFwcHJvcHJp YXRlIHR0Z3dzaXooKSByb3V0aW5lLiBPbiB0aGUgb3RoZXIKLSAgIGhhbmQsIGlmIENLX05BV1Mg aXMgZGVmaW5lZCBieSBkZWZhdWx0IGZvciB5b3VyIHN5c3RlbSAoaW4KLSAgIFsxMjJdY2tjbmV0 LmgpLCBidXQgY2F1c2VzIHRyb3VibGUsIHlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBkZWZpbml0aW9u IGJ5Ci0gICBpbmNsdWRpbmcgdGhlIC1ETk9OQVdTIHN3aXRjaCBvbiB5b3VyIENDIGNvbW1hbmQg bGluZSwgdGh1cyBkaXNhYmxpbmcKLSAgIHRoZSBOQVdTIGZlYXR1cmUuCi0KLSAgIFRoaXMgYXBw ZWFycyB0byBiZSBuZWVkZWQgYXQgbGVhc3Qgb24gdGhlIEFUJlQgM0IyLCB3aGVyZSBpbgotICAg WzEyM11ja3V0aW8uYywgdGhlIHJvdXRpbmUgdHRnd3NpeigpIGZpbmRzIHRoYXQgdGhlIFRJT0NH V0lOU1ogc3ltYm9sCi0gICBpcyBkZWZpbmVkIGJ1dCBsYWNrcyBkZWZpbml0aW9ucyBmb3IgdGhl IGNvcnJlc3BvbmRpbmcgd2luc2l6ZSBzdHJ1Y3QKLSAgIGFuZCBpdHMgbWVtYmVycyB3c19jb2wg YW5kIHdzX3Jvdy4KLQotICAgVGhlIFVOSVggdmVyc2lvbiBvZiBDLUtlcm1pdCBhbHNvIHRyYXBz IFNJR1dJTkNILCBzbyBpdCBjYW4gc2VuZCBhIE5BV1MKLSAgIHRvIHRoZSBUZWxuZXQgc2VydmVy IGFueSB0aW1lIHRoZSBsb2NhbCBjb25zb2xlIHRlcm1pbmFsIHdpbmRvdyBzaXplCi0gICBjaGFu Z2VzLCBlLmcuIHdoZW4geW91IHN0cmV0Y2ggaXQgd2l0aCBhIG1vdXNlLiBUaGUgU0lHV0lOQ0gt dHJhcHBpbmcKLSAgIGNvZGUgaXMgZW5hYmxlZCBpZiBTSUdXSU5DSCBpcyBkZWZpbmVkIChpLmUu IGluIHNpZ25hbC5oKS4gSWYgdGhpcyBjb2RlCi0gICBzaG91bGQgY2F1c2UgcHJvYmxlbXMsIHlv dSBjYW4gZGlzYWJsZSBpdCB3aXRob3V0IGRpc2FibGluZyB0aGUgTkFXUwotICAgZmVhdHVyZSBh bHRvZ2V0aGVyLCBieSBkZWZpbmluZyBOT1NJR1dJTkNIIGF0IGNvbXBpbGUgdGltZS4KLQotICA4 LjEuNS4gRW5hYmxpbmcgSW5jb21pbmcgVENQL0lQIENvbm5lY3Rpb25zCi0KLSAgIFRoaXMgZmVh dHVyZSBsZXRzIHlvdSAic2V0IGhvc3QgKiBwb3J0IiBhbmQgd2FpdCBmb3IgYW4gaW5jb21pbmcK LSAgIGNvbm5lY3Rpb24gb24gdGhlIGdpdmVuIHBvcnQuIFRoaXMgZmVhdHVyZSBpcyBlbmFibGVk IGF1dG9tYXRpY2FsbHkgYXQKLSAgIGNvbXBpbGUgaWYgVENQU09DS0VUIGlzIGRlZmluZWQgYW5k IFNFTEVDVCBpcyBhbHNvIGRlZmluZWQuIEJ1dCB3YXRjaAotICAgb3V0LCBzaW1wbHkgZGVmaW5p bmcgU0VMRUNUIG9uIHRoZSBjYyBjb21tYW5kIGxpbmUgZG9lcyBub3QgZ3VhcmFudGVlCi0gICBz dWNjZXNzZnVsIGNvbXBpbGF0aW9uIG9yIGxpbmtpbmcgKHNlZSBbMTI0XVNlY3Rpb24gMTEpLgot Ci0gICBJZiB5b3Ugd2FudCB0byBkaXNhYmxlIGluY29taW5nIFRDUC9JUCBjb25uZWN0aW9ucywg dGhlbiBidWlsZCBDLUtlcm1pdAotICAgd2l0aDoKLQotICAtRE5PTElTVEVOCi0KLSAgOC4xLjYu IERpc2FibGluZyBTRVQgVENQIE9wdGlvbnMKLQotICAgVGhlIG1haW4gcmVhc29uIGZvciB0aGlz IGlzIGJlY2F1c2Ugb2YgaGVhZGVyIGZpbGUgLyBwcm90b3R5cGUKLSAgIGNvbmZsaWN0cyBhdCBj b21waWxlIHRpbWUgcmVnYXJkaW5nIGdldC0gLyBzZXRzb2Nrb3B0KCkuIElmIHlvdSBjYW4ndAot ICAgZml4IHRoZW0gKHdpdGhvdXQgYnJlYWtpbmcgb3RoZXIgYnVpbGRzKSwgYWRkIHRoZSBmb2xs b3dpbmcgaW4gQ0ZMQUdTOgotCi0gIC1ETk9UQ1BPUFRTCi0KLSAgOC4yLiBYLjI1Ci0KLSAgIFgu MjUgc3VwcG9ydCByZXF1aXJlcyAoYSkgYSBTdW4sIChiKSB0aGUgU3VuTGluayBwcm9kdWN0IChs aWJyYXJpZXMgYW5kCi0gICBoZWFkZXIgZmlsZXMpLCBhbmQgKGMpIGFuIFguMjUgY29ubmVjdGlv biBpbnRvIHlvdXIgU3VuLiBTaW1pbGFybHkgKGluCi0gICBDLUtlcm1pdCA3LjAgb3IgbGF0ZXIp IFN0cmF0dXMgVk9TIGFuZCBJQk0gQUlYLgotCi0gICBJbiBVTklYLCBzcGVjaWFsIG1ha2VmaWxl IHRhcmdldHMgc3Vub3M0eDI1IGFuZCBzdW5vczQxeDI1IChmb3IgU1VOT1MKLSAgIDQuMCBhbmQg NC4xLCByZXNwZWN0aXZlbHkpLCBvciBhaXg0MXgyNSwgYXJlIHByb3ZpZGVkIHRvIGJ1aWxkIGlu IHRoaXMKLSAgIGZlYXR1cmUsIGJ1dCB0aGV5IG9ubHkgd29yayBpZiBjb25kaXRpb25zIChhKS0o YykgYXJlIG1ldC4gVG8gcmVxdWVzdAotICAgdGhpcyBmZWF0dXJlLCBpbmNsdWRlIC1EU1VOWDI1 IChvciAtRElCTVgyNSkgaW4gQ0ZMQUdTLgotCi0gICBTVU5YMjUgKG9yIC1ESUJNWDI1KSBhbmQg VENQU09DS0VUIGNhbiBiZSBmcmVlbHkgbWl4ZWQgYW5kIG1hdGNoZWQsIGFuZAotICAgc2VsZWN0 ZWQgYnkgdGhlIHVzZXIgYXQgcnVudGltZSB3aXRoIHRoZSBTRVQgTkVUV09SSyBUWVBFIGNvbW1h bmQgb3IKLSAgIFNFVCBIT1NUIHN3aXRjaGVzLgotCi0gIDguMy4gT3RoZXIgTmV0d29ya3MKLQot ICAgU3VwcG9ydCBmb3Igb3RoZXIgbmV0d29ya2luZyBtZXRob2RzIC0tIE5FVEJJT1MsIExBVCwg TmFtZWQgUGlwZXMsIGV0YwotICAgLS0gaXMgaW5jbHVkZWQgaW4gY2sqbmV0LmggYW5kIGNrKm5l dC5jIGZvciBpbXBsZW1lbnRhdGlvbnMgKHN1Y2ggYXMKLSAgIFdpbmRvd3Mgb3IgT1MvMikgd2hl cmUgdGhlc2UgbWV0aG9kcyBhcmUgc3VwcG9ydGVkLgotCi0gICBQcm92aXNpb24gaXMgbWFkZSBp biB0aGUgb3JnYW5pemF0aW9uIG9mIHRoZSBtb2R1bGVzLCBoZWFkZXIgZmlsZXMsCi0gICBjb21t YW5kcywgZXRjLCBmb3IgYWRkaXRpb24gb2YgbmV3IG5ldHdvcmsgdHlwZXMgc3VjaCBhcyBERUNu ZXQsIFguMjUKLSAgIGZvciBvdGhlciBzeXN0ZW1zIChIUC1VWCwgVk1TLCBldGMpLCBhbmQgc28g b24uIFNlbmQgZW1haWwgdG8KLSAgIFsxMjVda2VybWl0QGNvbHVtYmlhLmVkdSBpZiB5b3UgYXJl IHdpbGxpbmcgYW5kIGFibGUgdG8gd29yayBvbiBzdWNoIGEKLSAgIHByb2plY3QuCi0KLSAgIFsg WzEyNl1DLUtlcm1pdCBIb21lIF0gWyBbMTI3XUtlcm1pdCBIb21lIF0KLQotICA5LiBFWENFUFRJ T04gSEFORExJTkcKLQotICAgWyBbMTI4XVRvcCBdIFsgWzEyOV1Db250ZW50cyBdIFsgWzEzMF1O ZXh0IF0gWyBbMTMxXVByZXZpb3VzIF0KLQotICAgVGhlIEMgbGFuZ3VhZ2Ugc2V0am1wL2xvbmdq bXAgbWVjaGFuaXNtIGlzIHVzZWQgZm9yIGhhbmRsaW5nCi0gICBleGNlcHRpb25zLiBUaGUganVt cCBidWZmZXIgaXMgb2YgdHlwZSBqbXBfYnVmLCB3aGljaCBhbG1vc3QgZXZlcnl3aGVyZQotICAg aXMgdHlwZWRlZidkIGFzIGFuIGFycmF5LCBpbiB3aGljaCBjYXNlIHlvdSBzaG91bGQgaGF2ZSBu byB0cm91YmxlCi0gICBjb21waWxpbmcgdGhlIGV4Y2VwdGlvbi1oYW5kbGluZyBjb2RlLiBIb3dl dmVyLCBpZiB5b3UgYXJlIGJ1aWxkaW5nCi0gICBDLUtlcm1pdCBpbi9mb3IgYW4gZW52aXJvbm1l bnQgd2hlcmUgam1wX2J1ZiBpcyBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbgotICAgYXJyYXkgKGUu Zy4gYSBzdHJ1Y3QpLCB0aGVuIHlvdSdsbCBoYXZlIHRvIGRlZmluZSB0aGUgZm9sbG93aW5nIHN5 bWJvbDoKLQotICBKQk5PVEFSUkFZCi0KLSAgIFsgWzEzMl1DLUtlcm1pdCBIb21lIF0gWyBbMTMz XUtlcm1pdCBIb21lIF0KLQotICAxMC4gU0VDVVJJVFkgRkVBVFVSRVMKLQotICAgWyBbMTM0XVRv cCBdIFsgWzEzNV1Db250ZW50cyBdIFsgWzEzNl1OZXh0IF0gWyBbMTM3XVByZXZpb3VzIF0KLQot ICAgU2VjdXJpdHksIGluIHRoZSBzZW5zZSBvZiBzZWN1cmUgYXV0aGVudGljYXRpb24gYW5kIHN0 cm9uZyBlbmNyeXB0aW9uLAotICAgY2FuIGJlIGJ1aWx0IGludG8gdmVyc2lvbmYgb2YgQy1LZXJt aXQgZm9yIHdoaWNoIHRoZSBhcHByb3ByaWF0ZQotICAgbGlicmFyaWVzIGFuZCBoZWFkZXIgZmls ZXMgYXJlIGF2YWlsYWJsZSAoS2VyYmVyb3MgSVYsIEtlcmJlcm9zIFYsCi0gICBPcGVuU1NMLCBT UlApLCBhcyBleHBsYWluZWQgaW4gZ3JlYXQgZGV0YWlsIGluIHRoZSBLZXJtaXQgU2VjdXJpdHkK LSAgIFJlZmVyZW5jZQotICAgLiBUaGUgZm9sbG93aW5nIHN5bWJvbHMgZ292ZXJuIEMtS2VybWl0 J3Mgc2VjdXJpdHkgZmVhdHVyZXMgYXQgYnVpbGQKLSAgIHRpbWU6Ci0KLSAgIE5PX0FVVEhFTlRJ Q0FUSU9OCi0gICAgICAgICAgTWVhbnMgZG8gbm90IGNvbmZpZ3VyZSBhbnkgVEVMTkVUIEFVVEhF TlRJQ0FUSU9OIHN1cHBvcnQuIEl0Ci0gICAgICAgICAgaW1wbGllcyBOT19FTkNSWVBUSU9OIGFu ZCB1bmRlZmluZXMgYW55IG9mIHRoZSBhdXRoIGFuZCBlbmNyeXB0Ci0gICAgICAgICAgdHlwZXMu IEl0IGRvZXMgbm90IHVuZGVmaW5lIENLX1NTTCBldmVuIHRob3VnaCBidWlsZHMgd2l0aAotICAg ICAgICAgIENLX1NTTCBjYW5ub3Qgc3VjY2VlZCB3aXRob3V0IENLX0FVVEhFTlRJQ0FUSU9OLiAo VGhpcyB3aWxsIGJlCi0gICAgICAgICAgc3VwcG9ydGVkIGluIGEgZnV0dXJlIHJlbGVhc2UuIEl0 IHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93Ci0gICAgICAgICAgQy1LZXJtaXQgdG8gYmUgYnVpbHQg b25seSBhcyBhbiBGVFAgY2xpZW50LikKLQotICAgTk9fS0VSQkVST1MKLSAgICAgICAgICBNZWFu cyBkbyBub3QgY29tcGlsZSBpbiBhbnkgS0VSQkVST1Mgc3VwcG9ydCB3aGVuCi0gICAgICAgICAg Q0tfQVVUSEVOVElDQVRJT04gaGFzIGJlZW4gZGVmaW5lZC4KLQotICAgTk9fU1JQCi0gICAgICAg ICAgRG8gbm90IGNvbXBpbGUgaW4gYW55IFNSUCBzdXBwb3J0IHdoZW4gQ0tfQVVUSEVOVElDQVRJ T04gaGFzCi0gICAgICAgICAgYmVlbiBkZWZpbmVkLgotCi0gICBOT19TU0wKLSAgICAgICAgICBE byBub3QgY29tcGlsZSBpbiBhbnkgU1NML1RMUyBzdXBwb3J0Ci0KLSAgIE5PX0VOQ1JZUFRJT04K LSAgICAgICAgICBEbyBub3QgY29tcGlsZSBpbiBhbnkgVGVsbmV0IGVuY3J5cHRpb24gc3VwcG9y dC4gSXQgZG9lcyBub3QKLSAgICAgICAgICBhZmZlY3QgdGhlIHVzZSBvZiBTU0wvVExTCi0KLSAg IE5PU1NICi0gICAgICAgICAgRG8gbm90IGNvbXBpbGUgaW4gYW55IFNTSCBzdXBwb3J0IHdoZXRo ZXIgaW50ZXJuYWwgb3IgZXh0ZXJuYWwKLQotICAgQ0tfQVVUSEVOVElDQVRJT04KLSAgICAgICAg ICBUZWxuZXQgQVVUSEVOVElDQVRJT04gc3VwcG9ydC4gKEFsc28sIHJlcXVpcmVkIGlmIFNTTC9U TFMKLSAgICAgICAgICBzdXBwb3J0IGlzIGRlc2lyZWQuKSBPbiBtb3N0IHBsYXRmb3JtcyB0aGlz IGRvZXMgbm90IGF1dG9kZWZpbmUKLSAgICAgICAgICBhbnkgYXV0aGVudGljYXRpb24gbWVjaGFu aXNtcyBzdWNoIGFzIEtlcmJlcm9zIFYsIEtlcmJlcm9zIElWLAotICAgICAgICAgIFNSUCwgLi4u IFRob3NlIG5lZWQgdG8gYmUgZGVmaW5lZCBzZXBhcmF0ZWx5LgotCi0gICBDS19LRVJCRVJPUwot ICAgICAgICAgIERlZmluZWQgYXV0b21hdGljYWxseSB3aGVuIEtSQjQsIEtSQjUsIG9yIEtSQjUy NCBhcmUgZGVmaW5lZC4KLSAgICAgICAgICBJbXBsaWVzIHRoYXQgc29tZSB2ZXJzaW9uIG9mIEtl cmJlcm9zIGlzIGluIHVzZS4KLQotICAgS1JCNAotICAgICAgICAgIFNob3VsZCBiZSBkZWZpbmVk IHdoZW4gS2VyYmVyb3MgSVYgc3VwcG9ydCBpcyBkZXNpcmVkLgotCi0gICBLUkI1Ci0gICAgICAg ICAgU2hvdWxkIGJlIGRlZmluZWQgd2hlbiBLZXJiZXJvcyBWIHN1cHBvcnQgaXMgZGVzaXJlZC4K LQotICAgS1JCNTI0Ci0gICAgICAgICAgU2hvdWxkIGJlIGRlZmluZWQgaWYgYm90aCBLZXJiZXJv cyBWIGFuZCBLZXJiZXJvcyBJViBhcmUgdXNlZAotICAgICAgICAgIGFuZCB0aGUgS2VyYmVyb3Mg SVYgc3VwcG9ydCBpcyBwcm92aWRlZCBieSB0aGUgTUlUIEtlcmJlcm9zIElWCi0gICAgICAgICAg Y29tcGF0aWJpbGl0eSBsaWJyYXJ5IGluIHRoZSBjdXJyZW50IEtlcmJlcm9zIDUgZGlzdHJpYnV0 aW9uLgotCi0gICBLUkI1X1UyVQotICAgICAgICAgIFNob3VsZCBiZSBkZWZpbmVkIGlmIEtSQjUg aXMgZGVmaW5lZCBhbmQgS2VyYmVyb3MgNSBVc2VyIHRvIFVzZXIKLSAgICAgICAgICBtb2RlIGlz IGRlc2lyZWQuCi0KLSAgIEhFSU1EQUwKLSAgICAgICAgICBTaG91bGQgYmUgZGVmaW5lZCBpZiBL ZXJiZXJvcyBWIHN1cHBvcnQgaXMgcHJvdmlkZWQgYnkgSEVJTURBTC4KLSAgICAgICAgICBTdXBw b3J0IGZvciB0aGlzIG9wdGlvbiBpcyBub3QgY29tcGxldGUgaW4gQy1LZXJtaXQgOC4wLiBBbnlv bmUKLSAgICAgICAgICBpbnRlcmVzdGVkIGluIHdvcmtpbmcgb24gdGhpcyBzaG91bGQgY29udGFj dCBrZXJtaXQtc3VwcG9ydC4KLQotICAgQ0tfU1JQCi0gICAgICAgICAgU2hvdWxkIGJlIGRlZmlu ZWQgaWYgU1JQIHN1cHBvcnQgaXMgZGVzaXJlZC4KLQotICAgQ0tfRU5DUllQVElPTgotICAgICAg ICAgIFNob3VsZCBiZSBkZWZpbmVkIGlmIFRFTE5FVCBFTkNSWVBUSU9OIG9wdGlvbiBzdXBwb3J0 IGlzCi0gICAgICAgICAgZGVzaXJlZC4gVGhpcyBvcHRpb24gZG9lcyBub3QgZGVmaW5lIGFueSBw YXJ0aWN1bGFyIGVuY3J5cHRpb24KLSAgICAgICAgICB0eXBlcy4gVGhhdCBzaG91bGQgYmUgZG9u ZSBieSBkZWZpbmluZyBDS19ERVMgb3IgQ0tfQ0FTVC4KLQotICAgQ0tfREVTCi0gICAgICAgICAg U2hvdWxkIGJlIGRlZmluZWQgaWYgZWl0aGVyIERFUyBvciAzREVTIFRlbG5ldCBFbmNyeXB0aW9u IG9wdGlvbgotICAgICAgICAgIHN1cHBvcnQgaXMgZGVzaXJlZC4KLQotICAgTElCREVTCi0gICAg ICAgICAgSWYgQ0tfREVTIGlzIGRlZmluZWQgYW5kIERFUyBzdXBwb3J0IGlzIGJlaW5nIHByb3Zp ZGVkIGJ5IGVpdGhlcgotICAgICAgICAgIEVyaWMgWW91bmcncyBsaWJkZXMuYSBvciBPcGVuU1NM IDAuOS42eCBvciBlYXJsaWVyLCB0aGlzIG9wdGlvbgotICAgICAgICAgIG11c3QgYmUgZGVmaW5l ZC4gSWYgaXQgaXMgbm90IGRlZmluZWQsIGl0IHdpbGwgYmUgYXNzdW1lZCB0aGF0Ci0gICAgICAg ICAgREVTIHN1cHBvcnQgaXMgcHJvdmlkZWQgYnkgdGhlIE1JVCBLZXJiZXJvcyBJViBsaWJyYXJp ZXMuCi0KLSAgIENLX0NBU1QKLSAgICAgICAgICBTaG91bGQgYmUgZGVmaW5lZCBpZiBDQVNUIFRl bG5ldCBFbmNyeXB0aW9uIG9wdGlvbiBzdXBwb3J0IGlzCi0gICAgICAgICAgZGVzaXJlZAotCi0g ICBDS19TU0wKLSAgICAgICAgICBTaG91bGQgYmUgZGVmaW5lZCBpZiBTU0wvVExTIHN1cHBvcnQg KE9wZW5TU0wpIGlzIGRlc2lyZWQuCi0KLSAgIFNTTF9LUkI1Ci0gICAgICAgICAgSWYgS1JCNSBp cyBkZWZpbmVkLCBhbmQgT3BlblNTTCBpcyBidWlsdCB0byBzdXBwb3J0IHRoZSBLZXJiZXJvcwot ICAgICAgICAgIDUgY2lwaGVycywgdGhlbiB5b3Ugc2hvdWxkIGRlZmluZSBTU0xfS1JCNQotCi0g ICBOT1NTTEtSQjUKLSAgICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIE9wZW5TU0wgMC45Ljcgb3Ig aGlnaGVyIGFuZCBkbyBub3Qgd2lzaCB0bwotICAgICAgICAgIGJ1aWxkIHdpdGggc3VwcG9ydCBm b3IgS2VyYmVyb3MgNSBUTFMgY2lwaGVycywgdGhpcyBvcHRpb24gbXVzdAotICAgICAgICAgIGJl IGRlZmluZWQuCi0KLSAgIFpMSUIKLSAgICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIE9wZW5TU0wg MC45LjYgb3IgaGlnaGVyIGFuZCBpdCBoYXMgYmVlbgotICAgICAgICAgIGNvbXBpbGVkIHdpdGgg c3VwcG9ydCBmb3IgWkxJQiBjb21wcmVzc2lvbiwgdGhpcyBvcHRpb24gc2hvdWxkCi0gICAgICAg ICAgYmUgZGVmaW5lZCB0byBlbmFibGUgS2VybWl0IHRvIHByb3Blcmx5IGVuYWJsZSB0aGUgdXNl IG9mCi0gICAgICAgICAgY29tcHJlc3Npb24uCi0KLSAgIFNTSENNRAotICAgICAgICAgIERlZmlu ZWQgZm9yIEMtS2VybWl0IHRvIGVuYWJsZSB0aGUgdXNlIG9mIGV4dGVybmFsIFNTSCBjbGllbnRz Ci0gICAgICAgICAgZnJvbSB0aGUgS2VybWl0IGNvbW1hbmQgbGFuZ3VhZ2UKLQotICAgU1NIQlVJ TFRJTgotICAgICAgICAgIERlZmluZWQgZm9yIEtlcm1pdCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBo YXZlIGludGVncmF0ZWQgU1NICi0gICAgICAgICAgc3VwcG9ydC4gQ3VycmVudGx5IG9ubHkgV2lu ZG93cy4KLQotICAgQU5ZU1NICi0gICAgICAgICAgRGVmaW5lZCBpZiBlaXRoZXIgU1NIQ01EIG9y IFNTSEJVSUxUSU4gYXJlIGRlZmluZWQuCi0KLSAgIENLX1NORExPQwotICAgICAgICAgIFRlbG5l dCBTZW5kIExvY2F0aW9uIHN1cHBvcnQuCi0KLSAgIE5PU05ETE9DCi0gICAgICAgICAgRG8gbm90 IGluY2x1ZGUgVGVsbmV0IFNlbmQgTG9jYXRpb24gc3VwcG9ydC4KLQotICAgQ0tfWERJU1BMT0MK LSAgICAgICAgICBUZWxuZXQgWC1EaXNwbGF5IExvY2F0aW9uIHN1cHBvcnQuIERldGVybWluZXMg aWYgdGhlIFgtRGlzcGxheQotICAgICAgICAgIGxvY2F0aW9uIGluZm9ybWF0aW9uIGlzIHNlbnQg dG8gdGhlIFRlbG5ldCBzZXJ2ZXIgZWl0aGVyIHZpYQotICAgICAgICAgIFRlbG5ldCBYRElTUExP QyBvciBORVctRU5WIG9wdGlvbnMuCi0KLSAgIE5PWERJU1BMT0MKLSAgICAgICAgICBEbyBub3Qg aW5jbHVkZSBUZWxuZXQgWC1EaXNwbGF5IExvY2F0aW9uIHN1cHBvcnQuCi0KLSAgIENLX0ZPUldB UkRfWAotICAgICAgICAgIFRlbG5ldCBGb3J3YXJkIFggV2luZG93cyBTZXNzaW9uIERhdGEgb3B0 aW9uLiBVc2VkIHRvIHByb3RlY3QKLSAgICAgICAgICB0aGUgcHJpdmFjeSBhbmQgaW50ZWdyaXR5 IG9mIFggV2luZG93cyBTZXNzaW9ucyB3aGVuIHNlY3VyZQotICAgICAgICAgIHRlbG5ldCBzZXNz aW9ucyBhcmUgaW4gdXNlLgotCi0gICBOT0ZPUldBUkRYCi0gICAgICAgICAgRG8gbm90IGluY2x1 ZGUgVGVsbmV0IEZvcndhcmQgWCBXaW5kb3dzIFNlc3Npb24gRGF0YSBvcHRpb24uCi0KLSAgIEJl c2lkZXMgdGhlIHN0cm9uZyBmb3JtcyBvZiBzZWN1cml0eSBsaXN0ZWQgYWJvdmUsIEMtS2VybWl0 IGFsc28KLSAgIGVtYm9kaWVzIHZhcmlvdXMgaW50ZXJuYWwgc2VjdXJpdHkgZmVhdHVyZXMsIGlu Y2x1ZGluZzoKLQotICAgTk9QVVNICi0gICAgICAgICAgQ29tcGlsaW5nIHdpdGggdGhlIE5PUFVT SCBzeW1ib2wgZGVmaW5lZCByZW1vdmVzIGFsbCB0aGUgInNoZWxsCi0gICAgICAgICAgZXNjYXBl IiBmZWF0dXJlcyBmcm9tIHRoZSBwcm9ncmFtLCBpbmNsdWRpbmcgdGhlIFBVU0gsIFJVTiwgYW5k Ci0gICAgICAgICAgU1BBV04gY29tbWFuZHMsIHRoZSAiISIgYW5kICJAIiBjb21tYW5kIHByZWZp eGVzLCBPUEVOICFSRUFELAotICAgICAgICAgIE9QRU4gIVdSSVRFLCBqb2IgY29udHJvbCAoaW5j bHVkaW5nIHRoZSBTVVNQRU5EIGNvbW1hbmQpLCB0aGUKLSAgICAgICAgICBSRURJUkVDVCBjb21t YW5kLCBzaGVsbC9EQ0wgZXNjYXBlIGZyb20gQ09OTkVDVCBtb2RlLCBhcyB3ZWxsIGFzCi0gICAg ICAgICAgdGhlIHNlcnZlcidzIGV4ZWN1dGlvbiBvZiBSRU1PVEUgSE9TVCBjb21tYW5kcyAoYW5k LCBvZiBjb3Vyc2UsCi0gICAgICAgICAgdGhlIEVOQUJMRSBIT1NUIGNvbW1hbmQpLiBBZGQgTk9E SVNQTyB0byBhbHNvIHByZXZlbnQgYWNjZXB0YW5jZQotICAgICAgICAgIG9mIGluY29taW5nIE1B SUwgb3IgUkVNT1RFIFBSSU5UIGZpbGVzLiBGb3IgVU5JWCwgYWxzbyBiZSBzdXJlCi0gICAgICAg ICAgdG8gcmVhZCBbMTM4XVNlY3Rpb24gMTEgb2YgdGhlIFsxMzldVW5peCBDLUtlcm1pdCBJbnN0 YWxsYXRpb24KLSAgICAgICAgICBJbnN0cnVjdGlvbnMuIGFib3V0IHNldFt1Z11pZCBjb25maWd1 cmF0aW9uLiBBZGRpdGlvbmFsCi0gICAgICAgICAgcmVzdHJpY3Rpb25zIGNhbiBiZSBlbmZvcmNl ZCB3aGVuIGluIHNlcnZlciBtb2RlOyByZWFkIGFib3V0IHRoZQotICAgICAgICAgIERJU0FCTEUg Y29tbWFuZCBpbiB0aGUgdXNlciBtYW51YWwuCi0KLSAgIE5PQ0NUUkFQCi0gICAgICAgICAgQ29t cGlsaW5nIHdpdGggTk9DQ1RSQVAgcHJldmVudHMgdGhlIHRyYXBwaW5nIG9mIFNJR0lOVCBieQot ICAgICAgICAgIEtlcm1pdC4gVGh1cyBpZiB0aGUgdXNlciBnZW5lcmF0ZXMgYSBTSUdJTlQgc2ln bmFsIChlLmcuIGJ5Ci0gICAgICAgICAgdHlwaW5nIHRoZSBzeXN0ZW0ncyBpbnRlcnJ1cHQgY2hh cmFjdGVyKSwgS2VybWl0IHdpbGwgZXhpdAotICAgICAgICAgIGltbWVkaWF0ZWx5LCByYXRoZXIg dGhhbiByZXR1cm5pbmcgdG8gaXRzIHByb21wdC4KLQotICAgTk9QVVNIIGFuZCBOT0NDVFJBUCB0 b2dldGhlciBhbGxvdyBLZXJtaXQgdG8gYmUgcnVuIGZyb20gcmVzdHJpY3RlZAotICAgc2hlbGxz LCBwcmV2ZW50aW5nIGFjY2VzcyB0byBzeXN0ZW0gZnVuY3Rpb25zLgotCi0gICBbIFsxNDBdQy1L ZXJtaXQgSG9tZSBdIFsgWzE0MV1LZXJtaXQgSG9tZSBdCi0KLSAgMTEuIEVOQUJMSU5HIFNFTEVD VCgpCi0KLSAgIFsgWzE0Ml1Ub3AgXSBbIFsxNDNdQ29udGVudHMgXSBbIFsxNDRdTmV4dCBdIFsg WzE0NV1QcmV2aW91cyBdCi0KLSAgIEtlcm1pdCB3b3JrcyBiZXN0IGlmIGl0IGNhbiBkbyBub25i bG9ja2luZyByZWFkcywgbm9uZGVzdHJ1Y3RpdmUgaW5wdXQKLSAgIGJ1ZmZlciBjaGVja2luZywg YW5kIG1pbGxpc2Vjb25kIHNsZWVwcy4gQWxsIG9mIHRoZXNlIGZ1bmN0aW9ucyBjYW4gYmUKLSAg IGFjY29tcGxpc2hlZCBieSB0aGUgc2VsZWN0KCkgZnVuY3Rpb24sIHdoaWNoLCB1bmZvcnR1bmF0 ZWx5LCBpcyBub3QKLSAgIHVuaXZlcnNhbGx5IGF2YWlsYWJsZS4gRnVydGhlcm1vcmUsIHNlbGVj dCgpIGlzIHJlcXVpcmVkIGlmIGluY29taW5nCi0gICBUQ1AvSVAgY29ubmVjdGlvbnMgYXJlIHRv IGJlIHN1cHBvcnRlZC4KLQotICAgc2VsZWN0KCkgd2FzIGludHJvZHVjZWQgd2l0aCBCZXJrZWxl eSBVTklYLCByZWplY3RlZCBieSBBVCZUIGZvciBTeXN0ZW0KLSAgIFYsIGJ1dCBpcyBncmFkdWFs bHkgY3JlZXBpbmcgaW4gdG8gYWxsIFVOSVggdmVyc2lvbnMgKGFuZCBvdGhlcgotICAgb3BlcmF0 aW5nIHN5c3RlbXMgdG9vKSBieSB2aXJ0dWUgb2YgaXRzIHByZXNlbmNlIGluIHRoZSBzb2NrZXRz Ci0gICBsaWJyYXJ5LCB3aGljaCBpcyBuZWVkZWQgZm9yIFRDUC9JUC4gQVQmVCBTVklEIGZvciBT eXN0ZW0gViBSNCBpbmNsdWRlcwotICAgc2VsZWN0KCksIGJ1dCB0aGF0IGRvZXMgbm90IG1lYW4g dGhhdCBhbGwgU1ZSNCBpbXBsZW1lbnRhdGlvbnMgaGF2ZSBpdC4KLQotICAgRnVydGhlcm1vcmUs IGV2ZW4gd2hlbiBzZWxlY3QoKSBpcyBhdmFpbGFibGUsIGl0IG1pZ2h0IHdvcmsgb25seSBvbgot ICAgc29ja2V0IGZpbGUgZGVzY3JpcHRvcnMsIGJ1dCBub3Qgb24gb3RoZXJzIGxpa2Ugc2VyaWFs IHBvcnRzLCBwaXBlcywKLSAgIGV0Yy4gRm9yIGV4YW1wbGUsIGluIEFPUy9WUyBhbmQgQmVPUywg aXQgd29ya3Mgb25seSB3aXRoIGZpbGUKLSAgIGRlc2NyaXB0b3JzIHRoYXQgd2VyZSBjcmVhdGVk IGJ5IHNvY2tldCgpIGFuZCBvcGVuZWQgYnkgY29ubmVjdCgpIG9yCi0gICBhY2NlcHQoKS4KLQot ICAgT3RoZXIgYWx0ZXJuYXRpdmVzIGluY2x1ZGUgcG9sbCgpIGFuZCByZGNoaygpLiBPbmx5IG9u ZSBvZiB0aGVzZSB0aHJlZQotICAgZnVuY3Rpb25zIHNob3VsZCBiZSBpbmNsdWRlZC4gVGhlIGZv bGxvd2luZyBzeW1ib2xzIGdvdmVybiB0aGlzOgotCi0gICAgIFNFTEVDVCAgVXNlIHNlbGVjdCgp IChCU0QsIG9yIHN5c3RlbXMgd2l0aCBzb2NrZXRzIGxpYnJhcmllcykKLSAgICAgQ0tfUE9MTCBV c2UgcG9sbCgpICAgKFN5c3RlbSBWKQotICAgICBSRENISyAgIFVzZSByZGNoaygpICAoU0NPIFhF TklYIGFuZCBVTklYKQotCi0gICBJZiB5b3VyIHN5c3RlbSBzdXBwb3J0cyB0aGUgc2VsZWN0KCkg ZnVuY3Rpb24sIGJ1dCB5b3VyIHZlcnNpb24gb2YKLSAgIEMtS2VybWl0IGRvZXMgbm90LCB0cnkg YWRkaW5nOgotCi0gIC1EU0VMRUNUCi0KLSAgIHRvIHRoZSBDRkxBR1MsIGFuZCByZW1vdmluZyAt RFJEQ0hLIG9yIC1EQ0tfUE9MTCBpZiBpdCBpcyB0aGVyZS4gSWYgeW91Ci0gICBnZXQgY29tcGls YXRpb24gZXJyb3JzLCBzb21lIGFkanVzdG1lbnRzIHRvIGNrKnRpby5jIGFuZC9vciBjaypuZXQu YwotICAgbWlnaHQgYmUgbmVlZGVkOyBzZWFyY2ggZm9yIFNFTEVDVCAodXBwZXJjYXNlKSBpbiB0 aGVzZSBmaWxlcyAobm90ZQotICAgdGhhdCB0aGVyZSBhcmUgc2V2ZXJhbCB2YXJpYXRpb25zIG9u IHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zIGZvcgotICAgc2VsZWN0KCkpLgotCi0gICBWYXJpb3Vz IG1hY3JvcyBhbmQgZGF0YSB0eXBlcyBuZWVkIHRvIGJlIGRlZmluZWQgaW4gb3JkZXIgdG8gdXNl Ci0gICBzZWxlY3QoKS4gVXN1YWxseSB0aGVzZSBhcmUgcGlja2VkIHVwIGZyb20gPHR5cGVzLmg+ IG9yIDxzeXMvdHlwZXMuaD4uCi0gICBCdXQgb24gc29tZSBzeXN0ZW1zLCB0aGV5IGFyZSBpbiA8 c3lzL3NlbGVjdC5oPi4gSW4gdGhhdCBjYXNlLCBhZGQgdGhlCi0gICBmb2xsb3dpbmc6Ci0KLSAg LURTRUxFQ1RfSAotCi0gICB0byB0aGUgQ0ZMQUdTIHRvIHRlbGwgQy1LZXJtaXQgdG8gI2luY2x1 ZGUgPHN5cy9zZWxlY3QuaD4uIEEgZ29vZAotICAgaW5kaWNhdGlvbiB0aGF0IHlvdSBuZWVkIHRv IGRvIHRoaXMgd291bGQgYmUgaWYgeW91IGdldCBjb21waWxlLXRpbWUKLSAgIGNvbXBsYWludHMg YWJvdXQgImZkX3NldCIgb3IgIkZEX1NFVCIgbm90IGJlaW5nIGRlY2xhcmVkIG9yIGRlZmluZWQu Ci0KLSAgIEluIFVOSVgsIHRoZSB1c2Ugb2Ygc2VsZWN0KCkgdnMgZm9yaygpIGluIHRoZSBDT05O RUNUIGNvbW1hbmQgaXMKLSAgIGluZGVwZW5kZW50IG9mIHRoZSBhYm92ZSBjb25zaWRlcmF0aW9u cywgYW5kIGlzIGdvdmVybmVkIGJ5IGNob29zaW5nIGEKLSAgIHBhcnRpY3VsYXIgbWFrZWZpbGUg dGFyZ2V0LgotCi0gICBBcyBvZiBDLUtlcm1pdCA3LjAsIHNlbGVjdCgpIGlzIGFsc28gdGhlIHBy ZWZlcnJlZCBjb250cm9sIG1lY2hhbmlzbQotICAgZm9yIHRoZSBDT05ORUNUIGNvbW1hbmQuIFVu Zm9ydHVuYXRlbHksIHRoZSBzdHJ1Y3R1cmVzIHVzZWQgYnkgdGhlCi0gICBvcmlnaW5hbCBVTklY IENPTk5FQ1QgY29tbWFuZCwgYmFzZWQgb24gZm9yaygpLCBhbmQgdGhvc2UgdXNlZCBieQotICAg c2VsZWN0KCksIGFyZSBzbyBkaWZmZXJlbnQsIGl0IHdhcyBub3QgcHJhY3RpY2FsIHRvIGltcGxl bWVudCB0aGVtIGJvdGgKLSAgIGluIG9uZSBtb2R1bGUuIFNvIHRoZSBzZWxlY3QoKS1iYXNlZCBD T05ORUNUIGNvbW1hbmQgbW9kdWxlIGZvciBVTklYIGlzCi0gICBbMTQ2XWNrdWNucy5jLCBhbmQg dGhlIGZvcmstYmFzZWQgb25lIHJlbWFpbnMgWzE0N11ja3Vjb24uYy4gVG8gY2hvb3NlCi0gICB0 aGUgZm9yay1iYXNlZCBvbmUsIHdoaWNoIGlzIG1vcmUgcG9ydGFibGUgKGJ1dCBzbG93ZXIgYW5k IG1vcmUKLSAgIGZyYWdpbGUpLCB1c2UgIndlcm1pdCIgYXMgdGhlIG1ha2UgdGFyZ2V0LiBUbyBj aG9vc2UgdGhlIHNlbGVjdC1iYXNlZAotICAgb25lLCB1c2UgInhlcm1pdCIuIE9ubHkgZG8gdGhp cyBpZiB5b3UgY2FuIHZlcmlmeSB0aGF0IHRoZSBDT05ORUNUCi0gICBjb21tYW5kIHdvcmtzIG9u IHNlcmlhbCBjb25uZWN0aW9ucyBhbmQgUElQRSBjb25uZWN0aW9ucyBhcyB3ZWxsIGFzIFRDUAot ICAgY29ubmVjdGlvbnMuCi0KLSAgICAgVGhlIHNlbGVjdCgpLWJhc2VkIFVuaXggQ09OTkVDVCBt b2R1bGUsIGNrdWNucy5jLCBtdXN0IGJlIHVzZWQgaWYKLSAgICAgZW5jcnlwdGlvbiBpcyB0byBi ZSBkb25lLCBzaW5jZSB0aGUgZm9yaygpIHZlcnNpb24gKGNrdWNvbi5jKSBsb3NlcwotICAgICBp dHMgYWJpbGl0eSB0byBzaGFyZSB2aXRhbCBzdGF0ZSBpbmZvcm1hdGlvbiBiZXR3ZWVuIHRoZSB0 d28gZm9ya3MuCi0gICAgIEFsc28gbm90ZSB0aGF0IHRoZSBzZWxlY3QoKSB2ZXJzaW9uIGlzIHN1 cGVyaW9yIGluIG1hbnkgb3RoZXIgd2F5cwotICAgICB0b28uIEZvciBleGFtcGxlLCBpdCByZWNv dmVycyBiZXR0ZXIgZnJvbSBleHRlcmlvciBraWxsaW5nLCBmb3JjZWQKLSAgICAgZGlzY29ubmVj dGlvbnMsIGV0YywgcGx1cyBpdCBnb2VzIGZhc3Rlci4KLQotICAgU0hPVyBWRVJTSU9OUyB0ZWxs cyB3aGV0aGVyIHRoZSBDT05ORUNUIG1vZHVsZSB1c2VzIGZvcmsoKSBvciBzZWxlY3QoKS4KLQot ICAgQy1LZXJtaXQgOC4wIGFkZHMgbGVhcm5lZCBzY3JpcHQgY2FwYWJpbGl0eSwgd2hpY2ggZGVw ZW5kcyBvbiBzZWxlY3QoKS4KLSAgIEFsbCB0aGUgIndlcm1pdCIgYmFzZWQgdGFyZ2V0cyAoYXMg b3Bwb3NlZCB0byAieGVybWl0IikgaGFkIE5PTEVBUk4KLSAgIGFkZGVkIHRvIHRoZW0uIFdoZW5l dmVyIGNoYW5naW5nIGEgdGFyZ2V0IG92ZXIgZnJvbSB3ZXJtaXQgdG8geGVybWl0LAotICAgYWxz byByZW1lbWJlciB0byByZW1vdmUgTk9MRUFSTi4KLQotICAgWyBbMTQ4XUMtS2VybWl0IEhvbWUg XSBbIFsxNDldS2VybWl0IEhvbWUgXQotCi0gIDEyLiBJL08gUkVESVJFQ1RJT04KLQotICAgWyBb MTUwXVRvcCBdIFsgWzE1MV1Db250ZW50cyBdIFsgWzE1Ml1OZXh0IF0gWyBbMTUzXVByZXZpb3Vz IF0KLQotICAgVGhlIFJFRElSRUNUIGNvbW1hbmQgYWxsb3dzIGEgbG9jYWwgcHJvZ3JhbSB0byBi ZSBydW4gd2l0aCBpdHMgaS9vCi0gICByZWRpcmVjdGVkIG92ZXIgdGhlIGNvbW11bmljYXRpb25z IGNvbm5lY3Rpb24uIFlvdXIgdmVyc2lvbiBvZiBDLUtlcm1pdAotICAgaGFzIGEgUkVESVJFQ1Qg Y29tbWFuZCBpZiBpdCB3YXMgYnVpbHQgd2l0aCB0aGUgZm9sbG93aW5nIENGTEFHOgotCi0gIC1E Q0tfUkVESVIKLQotICAgVGhpcywgaW4gdHVybiwgaXMgcG9zc2libGUgb25seSBpZiB0aGUgdW5k ZXJseWluZyBBUEkgaXMgdGhlcmUuIEluIHRoZQotICAgY2FzZSBvZiBVTklYIHRoaXMgaXMganVz dCB0aGUgd2FpdCgpIHN5c3RlbSBjYWxsLCBzbyBhbGwgVU5JWCB2ZXJzaW9ucwotICAgZ2V0IHRo aXMgZmVhdHVyZSBhcyBvZiA2LjAuMTkyIChlYXJsaWVyIHZlcnNpb25zIG5lZWRlZCBhIDxzeXMv d2FpdC5oPgotICAgaGVhZGVyIGZpbGUgZGVmaW5pbmcgdGhlIHN5bWJvbHMgV0lGRVhJVEVEIGFu ZCBXRVhJVFNUQVRVUykuCi0KLSAgIEFzIG9mIHZlcnNpb24gNy4wLCBmaWxlIHRyYW5zZmVyIGNh biBiZSBkb25lIHVzaW5nIHBpcGVzIGFuZCBmaWx0ZXJzLgotICAgVG8gZW5hYmxlIHRoaXMgZmVh dHVyZSwgI2RlZmluZSBQSVBFU0VORCAoYW5kIGZpbGwgaW4gdGhlIGNvZGUpLiBUbwotICAgZGlz YWJsZSBvbiBzeXN0ZW1zIHdoZXJlIGl0IGlzIG5vcm1hbGx5IGVuYWJsZWQsIGRlZmluZSBOT1BJ UEVTRU5ELgotICAgVGhpcyBmZWF0dXJlIGlzLCBvZiBjb3Vyc2UsIGFsc28gZGlzYWJsZWQgYnkg YnVpbGRpbmcgd2l0aCBOT1BVU0ggKG9yCi0gICBnaXZpbmcgdGhlICJub3B1c2giIGNvbW1hbmQg YXQgcnVudGltZSkuCi0KLSAgIEMtS2VybWl0IDcuMCBhbHNvIGFkZHMgdGhlIFBJUEUgYW5kIFNF VCBIT1NUIC9DT01NQU5EIGNvbW1hbmRzLCB3aGljaAotICAgcHJvdmlkZSBhbm90aGVyIGZvcm0g b2YgcmVkaXJlY3Rpb24uIFRoaXMgZmVhdHVyZSBpcyBzZWxlY3RlZCB3aXRoCi0gICAtRE5FVENN RC4gQ0tfUkRJUiBtdXN0IGFsc28gYmUgZGVmaW5lZCwgc2luY2UgdGhlIHNhbWUgbWVjaGFuaXNt cyBhcmUKLSAgIHVzZWQgaW50ZXJuYWxseS4KLQotICAgWyBbMTU0XUMtS2VybWl0IEhvbWUgXSBb IFsxNTVdS2VybWl0IEhvbWUgXQotCi0gIDEzLiBGTE9BVElORy1QT0lOVCBOVU1CRVJTLCBUSU1F UlMsIEFORCBBUklUSE1FVElDCi0KLSAgIFsgWzE1Nl1Ub3AgXSBbIFsxNTddQ29udGVudHMgXSBb IFsxNThdTmV4dCBdIFsgWzE1OV1QcmV2aW91cyBdCi0KLSAgIEZsb2F0aW5nLXBvaW50IHN1cHBv cnQgd2FzIGFkZGVkIGluIEMtS2VybWl0IDcuMC4KLQotICAgRmxvYXRpbmctcG9pbnQgbnVtYmVy cyBhcmUgZW5hYmxlZCBpbnRlcm5hbGx5LCBhdCBsZWFzdCBmb3IgdXNlIGluCi0gICBoaWdoLXBy ZWNpc2lvbiBmaWxlLXRyYW5zZmVyIHRpbWVycyBhbmQgc3RhdGlzdGljcywgdW5sZXNzIHRoZQot ICAgZm9sbG93aW5nIHN5bWJvbCBpcyBkZWZpbmVkIGF0IGNvbXBpbGUgdGltZToKLQotICAtRE5P RkxPQVQKLQotICAgVGhpcyBtaWdodCBiZSBuZWNlc3Nhcnkgb24gb2xkIFBDcyB0aGF0IGRvIG5v dCBoYXZlIGJ1aWx0LWluCi0gICBmbG9hdGluZy1wb2ludCBoYXJkd2FyZS4KLQotICAgV2hlbiBO T0ZMT0FUIGlzIG5vdCBkZWZpbmVkLCB0aGUgZm9sbG93aW5nIHN5bWJvbCB0ZWxscyB3aGljaAot ICAgZmxvYXRpbmctcG9pbnQgdHlwZSB0byB1c2U6Ci0KLSAgLURDS0ZMT0FUPXh4eHgKLQotICAg VGhlIHZhbHVlIGlzIGVpdGhlciAiZG91YmxlIiAobm9ybWFsIGZvciAzMi0gYW5kIDE2LWJpdCBh cmNoaXRlY3R1cmVzKQotICAgb3IgImZsb2F0IiAobm9ybWFsIGZvciA2NC1iaXQgYXJjaGl0ZWN0 dXJlcykuCi0KLSAgIEMtS2VybWl0IGNhbiBiZSBjb25maWd1cmVkIHRvIHVzZSBoaWdoLXByZWNp c2lvbiBmaWxlLXRyYW5zZmVyIHRpbWVycwotICAgZm9yIG1vcmUgYWNjdXJhdGUgc3RhdGlzdGlj cy4gVGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQgd2l0aDoKLQotICAtREdGVElNRVIKLQotICAgYW5k IGRpc2FibGVkIHdpdGg6Ci0KLSAgLUROT0dGVElNRVIKLQotICAgSWYgeW91IHRyeSB0byBidWls ZCB3aXRoIC1ER0ZUSU1FUiBidXQgeW91IGdldCBjb21waWxhdGlvbiBlcnJvcnMsCi0gICBlaXRo ZXIgZml4IHRoZW0gKGFuZCBzZW5kIGVtYWlsIHRvIGtlcm1pdEBjb2x1bWJpYS5lZHUgdGVsbGlu ZyB3aGF0IHlvdQotICAgZGlkKSwgb3IgZWxzZSBnaXZlIHVwIGFuZCB1c2UgLUROT0dGVElNRVIg KG9yIC1ETk9GTE9BVCkgaW5zdGVhZC4gSGludDoKLSAgIGRlcGVuZGluZyBvbiB5b3VyIG1hY2hp bmUgYXJjaGl0ZWN0dXJlLCB5b3UgbWlnaHQgaGF2ZSBiZXR0ZXIgbHVjawotICAgdXNpbmcgZG91 YmxlIHRoYW4gZmxvYXQgYXMgdGhlIGRhdGEgdHlwZSBmb3IgZmxvYXRpbmctcG9pbnQgbnVtYmVy cywgb3IKLSAgIHZpY2UgdmVyc2EuIExvb2sgaW4gWzE2MF1ja2NkZWIuaCBmb3IgdGhlIENLRkxP QVQgZGVmaW5pdGlvbi4KLQotICAgRmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYyBpcyBhbHNvIHN1 cHBvcnRlZCBpbiB0aGUgc2NyaXB0IHByb2dyYW1taW5nCi0gICBsYW5ndWFnZS4gRmlyc3Qgdmlh IHRoZSBcZnBwLi4uKCkgZnVuY3Rpb25zLCBzdWNoIGFzIFxmcHBhZGQoKSwgd2hpY2gKLSAgIGFk ZHMgdHdvIGZsb2F0aW5nLXBvaW50IG51bWJlcnMsIHNlY29uZCBpbiBTLUV4cHJlc3Npb25zLiBB ZGRpdGlvbiwKLSAgIHN1YnRyYWN0aW9uLCBtdWx0aXBsaWNhdGlvbiwgYW5kIGRpdmlzaW9uIGFy ZSBhbHdheXMgYXZhaWxhYmxlLiBCdXQKLSAgIG90aGVyIGZ1bmN0aW9ucyBzdWNoIGFzIGxvZ3Ms IHJhaXNpbmcgdG8gcG93ZXJzLCBzaW5lcyBhbmQgY29zaW5lcywKLSAgIGV0YywgcmVxdWlyZSB0 aGUgQyBNYXRoIGxpYnJhcnkuIFRvIGluY2x1ZGUgdXNlci1sZXZlbCBmbG9hdGluZy1wb2ludAot ICAgbWF0aCB5b3UgbXVzdCBwdXQ6Ci0KLSAgLURGTkZMT0FUCi0KLSAgIGFuZCBpbiBVbml4IHlv dSBtdXN0IGxpbmsgd2l0aCB0aGUgTWF0aCBsaWJyYXJ5OgotCi0gIExJQlM9Ii4uLi4gLWxtIgot Ci0gICBJbiBLOTUgYW5kIFZNUywgRk5GTE9BVCBpcyBkZWZpbmVkIGF1dG9tYXRpY2FsbHkgaWYg Q0tGTE9BVCBpcyBkZWZpbmVkLgotICAgSW4gVW5peCwgaG93ZXZlciwgRk5GTE9BVCBtdXN0IGJl IGFkZGVkIHRvIGVhY2ggbWFrZWZpbGUgdGFyZ2V0Ci0gICBpbmRpdmlkdWFsbHksIGJlY2F1c2Ug b2YgdGhlIHNwZWNpYWwgbGlua2luZyBpbnN0cnVjdGlvbnMgdGhhdCBtdXN0Ci0gICBhbHNvIGJl IGFkZGVkIHRvIGVhY2ggdGFyZ2V0LgotCi0gICBOb3RlOiBTLUV4cHJlc3Npb25zIHJlcXVpcmUg Rk5GTE9BVC4KLQotICAgWyBbMTYxXUMtS2VybWl0IEhvbWUgXSBbIFsxNjJdS2VybWl0IEhvbWUg XQotCi0gIDE0LiBTUEVDSUFMIENPTkZJR1VSQVRJT05TCi0KLSAgIFsgWzE2M11Ub3AgXSBbIFsx NjRdQ29udGVudHMgXSBbIFsxNjVdUHJldmlvdXMgXQotCi0gICBBcyBvZiBDLUtlcm1pdCA3LjAs IGlmIHlvdSBidWlsZCBDLUtlcm1pdCBub3JtYWxseSwgYnV0IHdpdGggLUROT0lDUAotICAgKE5v IEludGVyYWN0aXZlIENvbW1hbmQgUGFyc2VyKSwgeW91IGdldCBhIHByb2dyYW0gY2FwYWJsZSBv ZiBtYWtpbmcKLSAgIHNlcmlhbCBjb25uZWN0aW9ucyAoYnV0IG5vdCBkaWFsaW5nKSBhbmQgbmV0 d29yayBjb25uZWN0aW9ucyAoaWYKLSAgIFRDUFNPQ0tFVCBvciBvdGhlciBuZXR3b3JrIG9wdGlv biBpbmNsdWRlZCksIGFuZCBjYW4gYWxzbyB0cmFuc2ZlcgotICAgZmlsZXMgdXNpbmcgS2VybWl0 IHByb3RvY29sLCBidXQgb25seSB2aWEgYXV0b2Rvd25sb2FkL3VwbG9hZC4KLSAgIEZ1cnRoZXJt b3JlLCBpZiB5b3UgY2FsbCB0aGUgZXhlY3V0YWJsZSAidGVsbmV0IiwgaXQgd2lsbCBhY3QgbGlr ZQotICAgVGVsbmV0IC0tIHVzaW5nIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucy4gSG93ZXZlciwg aW4gdGhpcyBjYXNlIHRoZXJlCi0gICBpcyBub3RoaW5nIHRvIGVzY2FwZSBiYWNrIHRvLCBzbyBp ZiB5b3UgdHlwZSBDdHJsLVxjLCBpdCBqdXN0IHByaW50cyBhCi0gICBtZXNzYWdlIHRvIHRoaXMg ZWZmZWN0LgotCi0gICBZb3UgY2FuIGFsc28gYnVpbGQgQy1LZXJtaXQgd2l0aCAtRE5PWEZFUiwg bWVhbmluZyBvbWl0IGFsbCB0aGUKLSAgIGZpbGUtdHJhbnNmZXIgZmVhdHVyZXMuIFRoaXMgbGVh dmVzIHlvdSB3aXRoIGEgc2NyaXB0YWJsZQotICAgY29tbXVuaWNhdGlvbnMgcHJvZ3JhbSB0aGF0 IGlzIGNvbnNpZGVyYWJseSBzbWFsbGVyIHRoYW4gdGhlIGZ1bGwKLSAgIEMtS2VybWl0LgotCi0g ICBbIFsxNjZdQy1LZXJtaXQgSG9tZSBdIFsgWzE2N11LZXJtaXQgSG9tZSBdCi0KLSAgQVBQRU5E SVggSTogU1VNTUFSWSBPRiBDT01QSUxFLVRJTUUgT1BUSU9OUwotCi0gICBbIFsxNjhdVG9wIF0g WyBbMTY5XUNvbnRlbnRzIF0KLQotICAgVGhlc2UgYXJlIHRoZSBzeW1ib2xzIHRoYXQgY2FuIGJl IHNwZWNpZmllZCBvbiB0aGUgY2MgY29tbWFuZCBsaW5lLAotICAgbGlzdGVkIGFscGhhYmV0aWNh bGx5LiBPdGhlcnMgYXJlIHVzZWQgaW50ZXJuYWxseSwgaW5jbHVkaW5nIHRob3NlCi0gICB0YWtl biBmcm9tIGhlYWRlciBmaWxlcywgdGhvc2UgZGVmaW5lZCBieSB0aGUgY29tcGlsZXIgaXRzZWxm LCBhbmQKLSAgIHRob3NlIGluZmVycmVkIGZyb20gdGhlIG9uZXMgZ2l2ZW4gYmVsb3cuIEtlcm1p dCdzIFNIT1cgVkVSU0lPTlMKLSAgIGNvbW1hbmQgYXR0ZW1wdHMgdG8gZGlzcGxheSBtb3N0IG9m IHRoZXNlLiBTZWUgWzE3MF1ja2NkZWIuaCBhbmQKLSAgIFsxNzFdY2tjbmV0LmggZm9yIGluZmVy ZW5jZSBydWxlcy4gRm9yIGV4YW1wbGUgU1ZSMyBpbXBsaWVzIEFUVFNWLAotICAgTVVMVElORVQg aW1wbGllcyBUQ1BTT0NLRVQsIGFuZCBzbyBvbi4KLQotICAgSGVyZSBpcyB0aGUgY29tcGxldGUg bGlzdCBvZiB0aGUgS2VybWl0LXNwZWNpZmljIGNvbXBpbGUtdGltZSBzd2l0Y2hlczoKLQotICAg QUNVQ05UUkwgU2VsZWN0IEJTRCA0LjMtc3R5bGUgYWN1Y250cmwoKSBiaWRpcmVjdGlvbmFsIHR0 eSBjb250cm9sLgotICAgYWVnaXMgQnVpbGQgZm9yIEFwb2xsbyBBZWdpcyAocHJlZGVmaW5lZCBv biBBcG9sbG8gc3lzdGVtcykuCi0gICBBSVgzNzAgQnVpbGQgZm9yIElCTSBBSVgvMzcwIGZvciBJ Qk0gbWFpbmZyYW1lcy4KLSAgIEFJWEVTQSBCdWlsZCBmb3IgSUJNIEFJWC9FU0EgZm9yIElCTSBt YWluZnJhbWVzLgotICAgQUlYUFMyIEJ1aWxkIGZvciBJQk0gQUlYIDMuMCBmb3IgUFMvMiBzZXJp ZXMgKG5ldmVyIGZvcm1hbGx5IHJlbGVhc2VkKS4KLSAgIEFJWFJTIEJ1aWxkIGZvciBJQk0gQUlY IDMueCBvbiBSUy82MDAwLgotICAgQUlYNDEgQnVpbGQgZm9yIElCTSBBSVggNC54IG9uIFJTLzYw MDAuCi0gICBBTUlHQSBCdWlsZCBmb3IgQ29tbW9kb3JlIEFtaWdhIHdpdGggSW50dWl0aW9uIE9T LgotICAgQVRUNjMwMCBCdWlsZCBmb3IgQVQmVCA2MzAwIFBMVVMuCi0gICBBVFQ3MzAwIEJ1aWxk IGZvciBBVCZUIDczMDAgVU5JWCBQQyAoM0IxKS4KLSAgIEFUVFNWIEJ1aWxkIGZvciBBVCZUIFN5 c3RlbSBJSUkgb3IgViBVTklYLgotICAgQVVYIEJ1aWxkIGZvciBBcHBsZSBBL1VYIGZvciB0aGUg TWFjaW50b3NoLgotICAgQklHQlVGT0sgT0sgdG8gdXNlIGJpZyBidWZmZXJzIC0gIm1lbW9yeSBp cyBub3QgYSBwcm9ibGVtIgotICAgQlBTX3h4eHggRW5hYmxlIFNFVCBTUEVFRCB4eHh4Ci0gICBC U0QyOSBCdWlsZCBmb3IgQlNEIDIuOSBvciAyLjEwLgotICAgQlNENCBCdWlsZCBmb3IgQlNEIDQu Mi4KLSAgIEJTRDQxIEJ1aWxkIGZvciBCU0QgNC4xLgotICAgQlNENDMgQnVpbGQgZm9yIEJTRCA0 LjMuCi0gICBCU0Q0NCBCdWlsZCBmb3IgQlNEIDQuNC4KLSAgIEM3MCBCdWlsZCBmb3IgQkJOIEMv NzAuCi0gICBDSUUgQnVpbGQgZm9yIENJRSBTeXN0ZW1zIDY4MC8yMC4KLSAgIENLQ09OSU5UQjRD QiBXb3JrIGFyb3VuZCBwcm9tcHQtZGlzYXBwZWFycyBhZnRlciBlc2NhcGUgYmFjayBmcm9tCi0g ICBDT05ORUNULgotICAgQ0tMRUFSTiBCdWlsZCB3aXRoIHN1cHBvcnQgZm9yIGxlYXJuZWQgc2Ny aXB0cy4KLSAgIENLTE9HRElBTCBFbmFibGUgY29ubmVjdGlvbiBsb2cuCi0gICBDS01BWFBBVEgg TWF4aW11bSBsZW5ndGggZm9yIGEgZnVsbHkgcXVhbGlmaWVkIGZpbGVuYW1lLgotICAgQ0tSRUdF WCAobWlzbm9tZXIpIEluY2x1ZGUgWy4uLl0gb3Ige3h4eCx4eHgseHh4fSBtYXRjaGluZyBpbgot ICAgY2ttYXRjaCgpLgotICAgQ0tTWVNMT0cgRW5hYmxlIHN5c2xvZ2dpbmcuCi0gICBDS19BTlNJ QyBFbmFibGUgQU5TSSBDIGNvbnN0cnVjdHMgLSBwcm90b3R5cGVzLCBldGMuCi0gICBDS19BTlNJ TElCUyBVc2UgaGVhZGVyIGZpbGVzIGZvciBBTlNJIEMgbGlicmFyaWVzLgotICAgQ0tfQVBDIEVu YWJsZSBBUEMgZXhlY3V0aW9uIGJ5IENPTk5FQ1QgbW9kdWxlLgotICAgQ0tfQ1VSU0VTIEVuYWJs ZSBmdWxsc2NyZWVuIGZpbGUgdHJhbnNmZXIgZGlzcGxheS4KLSAgIENLX0RTWVNJTkkgVXNlIHN5 c3RlbS13aWRlIGluaXQgZmlsZSwgd2l0aCBuYW1lIHN1cHBsaWVkIGJ5IEtlcm1pdC4KLSAgIENL X0RUUkNEIERUUi9DRCBmbG93IGNvbnRyb2wgaXMgYXZhaWxhYmxlLgotICAgQ0tfRkFTVCBCdWls ZCB3aXRoIGZhc3QgS2VybWl0IHByb3RvY29sIGRlZmF1bHRzLgotICAgQ0tfRk9SS19TSUcgVU5J WCBvbmx5OiBzaWduYWwoKSBudW1iZXIgZm9yIENPTk5FQ1QgbW9kdWxlIGZvcmtzLgotICAgQ0tf SUZSTyBJRiBSRU1PVEUgY29tbWFuZCBpcyBhdmFpbGFibGUgKGFuZCBjYW4gcnVuIGluIHJlbW90 ZSBtb2RlKS4KLSAgIENLX0lOSV9BIFN5c3RlbS13aWRlIGluaXQgZmlsZSB0YWtlcyBwcmVjZWRl bmNlIG92ZXIgdXNlcidzLgotICAgQ0tfSU5JX0IgVXNlcidzIGluaXQgZmlsZSB0YWtlcyBwcmVj ZWRlbmNlIG92ZXIgdGhlIHN5c3RlbS13aWRlIG9uZS4KLSAgIENLX0xBQkVMRUQgSW5jbHVkZSBz dXBwb3J0IGZvciBTRVQgRklMRSBUWVBFIExBQkVMRUQuCi0gICBDS19MQlJLIFRoaXMgdmVyc2lv biBjYW4gc2VuZCBMb25nIEJSRUFLLgotICAgQ0tfTElOR0VSIEFkZCBjb2RlIHRvIHR1cm4gb2Yg VENQIHNvY2tldCAibGluZ2VyIiBwYXJhbWV0ZXIuCi0gICBDS19NS0RJUiBUaGlzIHZlcnNpb24g aGFzIGEgem1rZGlyKCkgY29tbWFuZCB0byBjcmVhdGUgZGlyZWN0b3JpZXMuCi0gICBDS19OQVdT IEluY2x1ZGUgVEVMTkVUIE5lZ290aWF0ZSBBYm91dCBXaW5kb3cgU2l6ZSBzdXBwb3J0LgotICAg Q0tfTkVXVEVSTSBVc2UgbmV3dGVybSgpIHJhdGhlciB0aGFuIGluaXRzY3IoKSB0byBpbml0aWFs aXplIGN1cnNlcy4KLSAgIENLX1BBTSBJbmNsdWRlIFBBTSBhdXRoZW50aWNhdGlvbiAobWlnaHQg YWxzbyByZXF1aXJlIC1scGFtKS4KLSAgIENLX1BDVF9CQVIgRnVsbHNjcmVlbiBmaWxlIHRyYW5z ZmVyIGRpc3BsYXkgc2hvdWxkIGluY2x1ZGUKLSAgICJ0aGVybW9tZXRlciIuCi0gICBDS19QT0xM IFN5c3RlbS1WIG9yIFBPU0lYIGJhc2VkIFVOSVggaGFzIHBvbGwoKSBmdW5jdGlvbi4KLSAgIENL X1BPU0lYX1NJRyBVc2UgUE9TSVggc2lnbmFsIGhhbmRpbmc6IHNpZ2ptcF9idWYsIHNpZ3NldGpt cCwKLSAgIHNpZ2xvbmdqbXAuCi0gICBDS19SRUFEMCByZWFkKGZkLCZ4LDApIGNhbiBiZSB1c2Vk IHRvIHRlc3QgVENQL0lQIGNvbm5lY3Rpb25zLgotICAgQ0tfUkVESVIgRW5hYmxlIHRoZSBSRURJ UkVDVCBjb21tYW5kLgotICAgQ0tfUkVTRU5EIEluY2x1ZGUgdGhlIFJFU0VORCBjb21tYW5kIChu ZWVkcyB6ZnNlZWsoKSArIGFwcGVuZCkuCi0gICBDS19SVFNDVFMgUlRTL0NUUyBmbG93IGNvbnRy b2wgaXMgYXZhaWxhYmxlLgotICAgQ0tfU0hBRE9XIEluY2x1ZGUgc3VwcG9ydCBmb3Igc2hhZG93 IHBhc3N3b3JkcyAoZS5nLiBmb3IgSUtTRAotICAgYXV0aGVudGljYXRpb24pLgotICAgQ0tfU09D S0JVRiBFbmFibGUgVENQIHNvY2tldC1idWZmZXItc2l6ZS1pbmNyZWFzaW5nIGNvZGUuCi0gICBD S19TT0NLUyBVTklYIG9ubHk6IEJ1aWxkIHdpdGggc29ja3MgbGlicmFyeSByYXRoZXIgdGhhbiBy ZWd1bGFyCi0gICBzb2NrZXRzCi0gICBDS19TT0NLUzUgVU5JWCBvbmx5OiBCdWlsZCB3aXRoIHNv Y2tzIDUgbGliIHJhdGhlciB0aGFuIHJlZ3VsYXIgc29ja2V0cwotICAgQ0tfU1BFRUQgRW5hYmxl IGNvbnRyb2wtY2hhcmFjdGVyIHVucHJlZml4aW5nLgotICAgQ0tfU1lTSU5JPSJ4eHh4eCIgUXVv dGVkIHN0cmluZyB0byBiZSB1c2VkIGFzIHN5c3RlbS13aWRlIGluaXQgZmlsZQotICAgbmFtZS4K LSAgIENLX1RJTUVSUyBCdWlsZCB3aXRoIHN1cHBvcnQgZm9yIGR5bmFtaWNhbGx5IGNhbGN1bGF0 ZWQgcGFja2V0Ci0gICB0aW1lb3V0cy4KLSAgIENLX1RNUERJUiBUaGlzIHZlcnNpb24gb2YgS2Vy bWl0IGhhcyBhbiBpc2RpcigpIGZ1bmN0aW9uLgotICAgQ0tfVFRZRkQgRGVmaW5lZCBvbiBzeXN0 ZW1zIHdoZXJlIHRoZSBjb21tdW5pY2F0aW9ucyBjb25uZWN0aW9uIGZpbGUKLSAgIGRlc2NyaXB0 b3IgKHR0eWZkKSBjYW4gYmUgcGFzc2VkIHRvIG90aGVyIHByb2Nlc3NlcyBhcyBhIGNvbW1hbmQt bGluZQotICAgYXJndW1lbnQgdmlhIFx2KHR0eWZkKS4KLSAgIENLX1VSTCBQYXJzZSBVUkxzIGFz IHdlbGwgYXMgaG9zdG5hbWVzLCBldGMuCi0gICBDS19YT05YT0ZGIFhvbi9Yb2ZmIGZsb3cgY29u dHJvbCBhdmFpbGFibGUuCi0gICBDS19YWVogSW5jbHVkZSBzdXBwb3J0IGZvciBYWVpNT0RFTSBw cm90b2NvbHMuCi0gICBDS19XUkVGUkVTSCBDdXJzZXMgcGFja2FnZSBpbmNsdWRlcyB3cmVmcmVz aCgpLGNsZWFyb2soKSBmb3Igc2NyZWVuCi0gICByZWZyZXNoLgotICAgQ0tGTE9BVD10eXBlIEZs b2F0aW5nLXBvaW50IGRhdGEgdHlwZSwgImRvdWJsZSIgb3IgImZsb2F0Ii4KLSAgIENLVFlQX0g9 eHh4IEZvcmNlIGluY2x1ZGUgb2YgeHh4IGFzIDx0eXBlcy5oPiBmaWxlLgotICAgQ0xTT1BOIFdo ZW4gaGFuZ2luZyB1cCBhIHR0eSBkZXZpY2UsIGFsc28gY2xvc2UgYW5kIHJlb3BlbiBpdC4KLSAg IENNRERFUCBNYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCBmb3Igc2VsZi1yZWZlcmVudGlhbCB1c2Vy LWRlZmluZWQgZm4ncy4KLSAgIENPSEVSRU5UIEJ1aWxkIGZvciBNYXJrIFdpbGxpYW1zIENvaGVy ZW50IFVOSVgKLSAgIENPTkdTUEQgRGVmaW5lIGlmIHRoaXMgdmVyc2lvbiBoYXMgY29uZ3NwZCgp IHJvdXRpbmUgaW4gY2s/dGlvLmMKLSAgIGRhdGFnZW5lcmFsIEJ1aWxkIGZvciBEYXRhIEdlbmVy YWwgQU9TL1ZTIG9yIEFPUy9WUyBJSQotICAgRENMUE9QRU4gcG9wZW4oKSBpcyBhdmFpbGFibGUg YnV0IG5lZWRzIHRvIGJlIGRlY2xhcmVkCi0gICBERUNfVENQSVAgQnVpbGQgd2l0aCBzdXBwb3J0 IGZvciBERUMgVENQL0lQIChVQ1gpIGZvciAoT3BlbilWTVMKLSAgIERHVVg0MzAgQnVpbGQgZm9y IERHL1VYIDQuMzAKLSAgIERHVVg1NDAgQnVpbGQgZm9yIERHL1VYIDUuNDAKLSAgIERFRlBBUj14 IERlZmF1bHQgcGFyaXR5LCAwLCAnZScsICdvJywgJ20nLCBvciAncycuCi0gICBERlRUWT14eHgg RGVmYXVsdCBjb21tdW5pY2F0aW9ucyBkZXZpY2UgbmFtZS4KLSAgIERJUkVOVCBVTklYIGRpcmVj dG9yeSBzdHJ1Y3R1cmUgdG8gYmUgdGFrZW4gZnJvbSA8ZGlyZW50Lmg+LgotICAgRElSUFdEUlAg UHJvbXB0IGZvciBwYXNzd29yZCBpbiBSRU1PVEUgQ1dEIGNvbW1hbmQuCi0gICBEVElMREUgSW5j bHVkZSBVTklYIH4gbm90YXRpb24gZm9yIHVzZXJuYW1lL2hvbWUtZGlyZWN0b3J5Ci0gICBEWU5B TUlDIEFsbG9jYXRlIGZpbGUgdHJhbnNmZXIgcGFja2V0IGJ1ZmZlcnMgZHluYW1pY2FsbHkgd2l0 aCBtYWxsb2MuCi0gICBFTkNPUkUgQnVpbGQgZm9yIEVuY29yZSBNdWx0aW1heCBjb21wdXRlcnMu Ci0gICBFWENFTEFOIEJ1aWxkIHdpdGggZXhjZWxhbiBUQ1AvSVAuCi0gICBGTkZMT0FUIEluY2x1 ZGUgZmxvYXRpbmctcG9pbnQgbWF0aCBmdW5jdGlvbnMgKGxvZ3MsIHNpbiwgY29zLCBleHAsCi0g ICBldGMpCi0gICBGVDE4IEJ1aWxkIGZvciBGb3J0dW5lIEZvcjpQcm8gMS44LgotICAgRlQyMSBC dWlsZCBmb3IgRm9ydHVuZSBGb3I6UHJvIDIuMS4KLSAgIEdFTURPUyBCdWlsZCBmb3IgQXRhcmkg U1QgR0VNRE9TLgotICAgR0ZUSU1FUiBVc2UgaGlnaC1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQg ZmlsZS10cmFuc2ZlciB0aW1lcnMuCi0gICBHSURfVD14eHggR3JvdXAgSURzIGFyZSBvZiB0eXBl IHh4eCAodXN1YWxseSBpbnQsIHNob3J0LCBvciBnaWRfdCkuCi0gICBIQUREUkxJU1QgSWYgZ2V0 aG9zdGJ5bmFtZSgpIGhvc3RlbnQgc3RydWN0IGNvbnRhaW5zIGEgbGlzdCBvZgotICAgYWRkcmVz c2VzLgotICAgSERCVVVDUCBCdWlsZCB3aXRoIHN1cHBvcnQgZm9yIEhvbmV5IERhbkJlciBVVUNQ LgotICAgSFBVWCBCdWlsZCBmb3IgSGV3bGV0dCBQYWNrYXJkIEhQLVVYLgotICAgSFBVWDkgQnVp bGQgZm9yIEhld2xldHQgUGFja2FyZCBIUC1VWCA5LnguCi0gICBIUFVYMTAgQnVpbGQgZm9yIEhl d2xldHQgUGFja2FyZCBIUC1VWCAxMC54LgotICAgSFdQQVJJVFkgRGVmaW5lIGlmIHRoaXMgdmVy c2lvbiBjYW4gU0VUIFBBUklUWSBIQVJEV0FSRSB7IEVWRU4sIE9ERC4uLn0KLSAgIEkzODZJWCBC dWlsZCBmb3IgSW50ZXJhY3RpdmUgU3lzdGVtIFYgUjMuCi0gICBJRkRFQlVHIEFkZCBJRiBzdG10 cyAiaWYgKGRlYmxvZykiIGJlZm9yZSAiZGVidWcoKSIgY2FsbHMuCi0gICBJTkFERFJYIFRDUC9J UCBpbmV0X2FkZHIoKSB0eXBlIGlzIHN0cnVjdCBpbmFkZHIsIG5vdCB1bnNpZ25lZCBsb25nLgot ICAgSU5URVJMQU4gQnVpbGQgd2l0aCBzdXBwb3J0IGZvciBSYWNhbC9JbnRlcmxhbiBUQ1AvSVAu Ci0gICBJU0RJUkJVRyBTeXN0ZW0gZGVmcyBvZiBTX0lTRElSIGFuZCBTX0lTUkVHIGhhdmUgYnVn LCBkZWZpbmUgb3Vyc2VsdmVzLgotICAgSVNJSUkgQnVpbGQgZm9yIEludGVyYWN0aXZlIFN5c3Rl bSBJSUkuCi0gICBJWDM3MCBCdWlsZCBmb3IgSUJNIElYLzM3MC4KLSAgIEtBTkpJIEJ1aWxkIHdp dGggS2FuamkgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiBzdXBwb3J0LgotICAgTENLRElSIFVV Q1AgbG9jayBkaXJlY3RvcnkgaXMgL3Vzci9zcG9vbC91dWNwL0xDSy8uCi0gICBMRkRFVk5PIFVV Q1AgbG9ja2ZpbGUgbmFtZSB1c2VzIGRldmljZSBudW1iZXJzLCBhcyBpbiBTVlI0LgotICAgTElO VVhGU1NUTkQgRm9yIExpbnV4LCB1c2UgRlNTVE5EIFVVQ1AgbG9ja2ZpbGUgY29udmVudGlvbnMg KGRlZmF1bHQpLgotICAgTE9DS19ESVI9eHh4IFVVQ1AgbG9jayBkaXJlY3RvcnkgaXMgeHh4IChx dW90ZWQgc3RyaW5nKS4KLSAgIExPQ0tGIFVzZSBsb2NrZigpIChpbiBhZGRpdGlvbiB0byBsb2Nr ZmlsZXMpIG9uIHNlcmlhbCBsaW5lcwotICAgTE9OR0ZOIEJTRCBsb25nIGZpbGVuYW1lcyBzdXBw b3J0ZWQgdXNpbmcgPGRpci5oPiBhbmQgb3BlbmRpcigpLgotICAgTFlOWE9TIEJ1aWxkIGZvciBM eW54IE9TIDIuMiBvciBsYXRlciAoUE9TSVgtYmFzZWQpLgotICAgTUFDIEJ1aWxkIGZvciBBcHBs ZSBNYWNpbnRvc2ggd2l0aCBNYWMgT1MuCi0gICBNQVRDSERPVCBNYWtlIHdpbGRjYXJkcyBtYXRj aCBmaWxlbmFtZXMgdGhhdCBzdGFydCB3aXRoIHBlcmlvZCAoLikKLSAgIE1BWFJQPW51bWJlciBN YXhpbXVtIHJlY2VpdmUtcGFja2V0IGxlbmd0aC4KLSAgIE1BWFNQPW51bWJlciBNYXhpbXVtIHNl bmQtcGFja2V0IGxlbmd0aC4KLSAgIE1ERUJVRyBNYWxsb2MtZGVidWdnaW5nIHJlcXVlc3RlZC4K LSAgIE1JTklESUFMIE1pbmltdW0gbW9kZW0gZGlhbGVyIHN1cHBvcnQ6IENDSVRULCBIYXllcywg VW5rbm93biwgYW5kIE5vbmUuCi0gICBNSU5JWCBCdWlsZCBmb3IgTUlOSVguCi0gICBNSVBTIEJ1 aWxkIGZvciBNSVBTIHdvcmtzdGF0aW9uLgotICAgTVVMVElORVQgQnVpbGQgd2l0aCBzdXBwb3J0 IGZvciBUR1YgTXVsdGlOZXQgVENQL0lQIChWQVgvVk1TKS4KLSAgIE1fVU5JWCBEZWZpbmVkIGJ5 IFNDTy4KLSAgIE5BUCBUaGUgbmFwKCkgaXMgYXZhaWxhYmxlIChjb25mbGljdHMgd2l0aCBTRUxF Q1QgYW5kIFVTTEVFUCkKLSAgIE5BUEhBQ0sgVGhlIG5hcCgpIGNhbGwgaXMgYXZhaWxhYmxlIGJ1 dCBvbmx5IGFzIHN5c2NhbGwoMzExMiwuLi4pCi0gICBORElSIEJTRCBsb25nIGZpbGVuYW1lcyBz dXBwb3J0ZWQgdXNpbmcgPG5kaXIuaD4gYW5kIG9wZW5kaXIoKS4KLSAgIE5ER1BXTkFNIERvbid0 IGRlY2xhcmUgZ2V0cHduYW0oKS4KLSAgIE5EU1lTRVJSTElTVCBEb24ndCBkZWNsYXJlIHN5c19l cnJsaXN0W10uCi0gICBORUVEU0VMRUNUREVGUyBzZWxlY3QoKSBpcyBhdmFpbGFibGUgYnV0IHdl IG5lZWQgdG8gZGVmaW5lIEZEX2JsYWgKLSAgIG91cnNlbHZlcy4KLSAgIE5FVENNRCBCdWlsZCB3 aXRoIHN1cHBvcnQgZm9yIFNFVCBIT1NUIC9DT01NQU5EIGFuZCBQSVBFIGNvbW1hbmRzLgotICAg TkVYVCBCdWlsZCBmb3IgTmVYVCBNYWNoIDEueCBvciAyLnggb3IgMy4wLCAzLjEsIG9yIDMuMi4K LSAgIE5FWFQzMyBCdWlsZCBmb3IgTmVYVCBNYWNoIDMuMy4KLSAgIE5PQU5TSSBEaXNhYmxlIEFO U0kgQyBmdW5jdGlvbiBwcm90b3R5cGluZy4KLSAgIE5PQVBDIERvIG5vdCBpbmNsdWRlIENLX0FQ QyBjb2RlLgotICAgTk9BUlJPV0tFWVMgRXhjbHVkZSBjb2RlIHRvIHBhcnNlIEFOU0kgYXJyb3ct a2V5IHNlcXVlbmNlcy4KLSAgIE5PQl94eHh4IERpc2FibGUgU0VUIFNQRUVEIHh4eHgKLSAgIE5P QklHQlVGIE92ZXJyaWRlIEJJR0JVRk9LIHdoZW4gaXQgaXMgdGhlIGRlZmF1bHQKLSAgIE5PQlJL QyBEb24ndCB0cnkgdG8gcmVmZXIgdG8gdF9icmtjIG9yIHRfZW9mIHRjaGFycyBzdHJ1Y3R1cmUg bWVtYmVycy4KLSAgIE5PQ0tGUUhPU1ROQU1FIEV4Y2x1ZGUgY29kZSB0byBnZXQgZnVsbHkgcXVh bGlmaWVkIGhvc3RuYW1lIGluIGNhc2UgaXQKLSAgIGNhdXNlcyBjb3JlIGR1bXBzLgotICAgTk9D Q1RSQVAgRGlzYWJsZSBDb250cm9sLUMgKFNJR0lOVCkgdHJhcHBpbmcuCi0gICBOT0NLU1BFRUQg RGlzYWJsZSBjb250cm9sLXByZWZpeCByZW1vdmFsIGZlYXR1cmUgKFNFVCBDT05UUk9MKS4KLSAg IE5PQ0tUSU1FUlMgQnVpbGQgd2l0aG91dCBzdXBwb3J0IGZvciBkeW5hbWljIHRpbWVycy4KLSAg IE5PQ0tYWVogT3ZlcnJpZGVzIENLX1hZWi4KLSAgIE5PQ0tSRUdFWCBEbyBub3QgaW5jbHVkZSBb Li4uXSBvciB7eHh4LHh4eCx4eHh9IG1hdGNoaW5nIGluIGNrbWF0Y2goKS4KLSAgIE5PQ01ETCBC dWlsZCB3aXRoIG5vIGNvbW1hbmQtbGluZSBvcHRpb24gcHJvY2Vzc2luZy4KLSAgIE5PQ09URk1D IE5vIENsb3NlKE9wZW4oKSkgVG8gRm9yY2UgTW9kZSBDaGFuZ2UgKFVOSVggdmVyc2lvbikuCi0g ICBOT0NTRVRTIEJ1aWxkIHdpdGggbm8gc3VwcG9ydCBmb3IgY2hhcmFjdGVyIHNldCB0cmFuc2xh dGlvbi4KLSAgIE5PQ1lSSUwgQnVpbGQgd2l0aCBubyBzdXBwb3J0IGZvciBDeXJpbGxpYyBjaGFy YWN0ZXIgc2V0IHRyYW5zbGF0aW9uLgotICAgTk9DWVJJTExJQyBEaXR0by4KLSAgIE5PREVCVUcg QnVpbGQgd2l0aCBubyBkZWJ1ZyBsb2dnaW5nIGNhcGFiaWxpdHkuCi0gICBOT0RJQUwgQnVpbGQg d2l0aCBubyBESUFMIG9yIFNFVCBESUFMIGNvbW1hbmRzLgotICAgTk9ESVNQTyBCdWlsZCB0byBh bHdheXMgcmVmdXNlIGluY29taW5nIE1BSUwgb3IgUkVNT1RFIFBSSU5UIGZpbGVzLgotICAgRE5P RElTUExBWSBCdWlsZCB3aXRoIG5vIGZpbGUtdHJhbnNmZXIgZGlzcGxheS4KLSAgIE5PRVNDU0VR IEJ1aWxkIHdpdGggbm8gc3VwcG9ydCBmb3IgQU5TSSBlc2NhcGUgc2VxdWVuY2UgcmVjb2duaXRp b24uCi0gICBOT0ZBU1QgRG8gbm90IG1ha2UgRkFTVCBLZXJtaXQgcHJvdG9jb2wgc2V0dGluZ3Mg dGhlIGRlZmF1bHQuCi0gICBOT0ZEWkVSTyBEbyBub3QgdXNlIGZpbGUgZGVzY3JpcHRvciAwIGZv ciByZW1vdGUtbW9kZSBmaWxlIHRyYW5zZmVyLgotICAgTk9GSUxFSCBEbyBub3QgI2luY2x1ZGUg PHN5cy9maWxlLmg+LgotICAgTk9GTE9BVCBEb24ndCBpbmNsdWRlIGFueSBmbG9hdGluZy1wb2lu dCBkYXRhIHR5cGVzIG9yIG9wZXJhdGlvbnMuCi0gICBOT0ZSSUxMUyBCdWlsZCB3aXRoICJubyBm cmlsbHMiICh0aGlzIHNob3VsZCBiZSBwaGFzZWQgb3V0Li4uKQotICAgTk9GVFJVTkNBVEUgSW5j bHVkZSB0aGlzIG9uIFVOSVhlcyB0aGF0IGRvbid0IGhhdmUgZnRydW5jYXRlKCkuCi0gICBOT0dF VFVTRVJTSEVMTCBJbmNsdWRlIHRoaXMgb24gVU5JWGVzIHRoYXQgZG9uJ3QgaGF2ZSBnZXR1c2Vy c2hlbGwoKS4KLSAgIE5PR0ZUSU1FUiBEb24ndCB1c2UgaGlnaC1wcmVjaXNpb24gZmxvYXRpbmct cG9pbnQgZmlsZS10cmFuc2ZlciB0aW1lcnMuCi0gICBOT0hFQlJFVyBCdWlsZCB3aXRoIG5vIHN1 cHBvcnQgZm9yIEhlYnJldyBjaGFyYWN0ZXIgc2V0cy4KLSAgIE5PSEVMUCBCdWlsZCB3aXRoIG5v IGJ1aWx0LWluIGhlbHAuCi0gICBOT0lLU0QgQnVpbGQgd2l0aCBJS1NEIHN1cHBvcnQgZXhjbHVk ZWQuCi0gICBOT0lOSVRHUk9VUFMgSW5jbHVkZSB0aGlzIG9uIFVOSVhlcyB0aGF0IGRvbid0IGhh dmUgaW5pdGdyb3VwcygpLgotICAgTk9JQ1AgQnVpbGQgd2l0aCBubyBpbnRlcmFjdGl2ZSBjb21t YW5kIHBhcnNlci4KLSAgIE5PSkMgQnVpbGQgd2l0aCBubyBzdXBwb3J0IGZvciBqb2IgY29udHJv bCAoc3VzcGVuZCkuCi0gICBOT0tBTkpJIEJ1aWxkIHdpdGggbm8gc3VwcG9ydCBmb3IgSmFwYW5l c2UgS2FuamkgY2hhcmFjdGVyIHNldHMuCi0gICBOT0tWRVJCUyBCdWlsZCB3aXRoIG5vIHN1cHBv cnQgZm9yIGtleWJvYXJkIHZlcmJzIChcS3ZlcmJzKS4KLSAgIE5PTEFUSU4yIEJ1aWxkIHdpdGgg bm8gSVNPIExhdGluLTIgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiBzdXBwb3J0LgotICAgTk9M RUFSTiBCdWlsZCB3aXRoIG5vIHN1cHBvcnQgZm9yIGxlYXJuZWQgc2NyaXB0cy4KLSAgIE5PTElO S0JJVFMgVXNlIG9mIFNfSVNMTksgYW5kIF9JRkxOSyB1bnRydXN0d29ydGh5OyB1c2UgcmVhZGxp bmsoKQotICAgaW5zdGVhZC4KLSAgIE5PTE9DQUwgQnVpbGQgd2l0aG91dCBhbnkgbG9jYWwtbW9k ZSBmZWF0dXJlczogTm8gTWFraW5nIENvbm5lY3Rpb25zLgotICAgTk9MT0dESUFMIERpc2FibGUg Y29ubmVjdGlvbiBsb2cuCi0gICBOT0xPR0lOIEJ1aWxkIHdpdGhvdXQgSUtTRCAobmV0d29yayBs b2dpbikgc3VwcG9ydC4KLSAgIE5PTFNUQVQgTm90IE9LIHRvIHVzZSBsc3RhdCgpLgotICAgTk9N RE1IVVAgQnVpbGQgd2l0aG91dCAibW9kZW0tc3BlY2lmaWMgaGFuZ3VwIiAoZS5nLiBBVEgwKSBm ZWF0dXJlLgotICAgTk9NSEhPU1QgRXhjbHVkZSB0aGUgbXVsdGlob21lZC1ob3N0IFRDUC9JUCBj b2RlIChpZiBjb21waWxhdGlvbgotICAgZXJyb3JzKQotICAgTk9NSU5QVVQgQnVpbGQgd2l0aG91 dCBNSU5QVVQgY29tbWFuZC4KLSAgIE5PTVNFTkQgQnVpbGQgd2l0aCBubyBNU0VORCBjb21tYW5k LgotICAgTk9OQVdTIERvIG5vdCBpbmNsdWRlIFRFTE5FVCBOZWdvdGlhdGUgQWJvdXQgV2luZG93 IFNpemUgc3VwcG9ydC4KLSAgIE5PTkVUIERvIG5vdCBpbmNsdWRlIGFueSBuZXR3b3JrIHN1cHBv cnQuCi0gICBOT05PU0VUQlVGIChTZWUgTk9TRVRCVUYpCi0gICBOT1BBUlNFTiBCdWlsZCB3aXRo b3V0IGF1dG9tYXRpYyBwYXJpdHkgZGV0ZWN0aW9uLgotICAgTk9QSVBFU0VORCBEaXNhYmxlIGZp bGUgdHJhbnNmZXIgdXNpbmcgcGlwZXMgYW5kIGZpbHRlcnMuCi0gICBOT1BPTEwgT3ZlcnJpZGUg Q0tfUE9MTCBkZWZpbml0aW9uLgotICAgTk9QT1BFTiBUaGUgcG9wZW4oKSBsaWJyYXJ5IGNhbGwg aXMgbm90IGF2YWlsYWJsZS4KLSAgIE5PUFVSR0UgQnVpbGQgd2l0aCBubyBQVVJHRSBjb21tYW5k LgotICAgTk9QVVNIIEJ1aWxkIHdpdGggbm8gZXNjYXBlcyB0byBvcGVyYXRpbmcgc3lzdGVtLgot ICAgTk9SRUFMUEFUSCBJbiBVTklYLCByZWFscGF0aCgpIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFi bGUuCi0gICBOT1JFQ0FMTCBEaXNhYmxlIHRoZSBjb21tYW5kLXJlY2FsbCBmZWF0dXJlLgotICAg Tk9SRURJUkVDVCBEaXNhYmxlIFJFRElSRUNUIGNvbW1hbmQuCi0gICBOT1JFTkFNRSBEb24ndCB1 c2UgcmVuYW1lKCkgc3lzdGVtIGNhbGwsIHVzZSBsaW5rKCkvdW5saW5rKCkgKFVOSVgpLgotICAg Tk9SRVNFTkQgQnVpbGQgd2l0aCBubyBSRVNFTkQgY29tbWFuZC4KLSAgIE5PUkVUUlkgQnVpbGQg d2l0aCBubyBjb21tYW5kLXJldHJ5IGZlYXR1cmUuCi0gICBOT1NDUklQVCBCdWlsZCB3aXRoIG5v IFNDUklQVCBjb21tYW5kLgotICAgTk9TRUxFQ1QgRG9uJ3QgdHJ5IHRvIHVzZSBzZWxlY3QoKS4K LSAgIE5PU0VSVkVSIEJ1aWxkIHdpdGggbm8gU0VSVkVSIG1vZGUgYW5kIG5vIHNlcnZlci1yZWxh dGVkIGNvbW1hbmRzLgotICAgTk9TRVRCVUYgRG9uJ3QgbWFrZSBjb25zb2xlIHdyaXRlcyB1bmJ1 ZmZlcmVkLgotICAgTk9OT1NFVEJVRiBETyBtYWtlIGNvbnNvbGUgd3JpdGVzIHVuYnVmZmVyZWQu Ci0gICBOT1NFVFJFVSBzZXRyZXVpZCgpIGFuZC9vciBzZXRyZWdpZCgpIG5vdCBhdmFpbGFibGUu Ci0gICBOT1NIT1cgQnVpbGQgd2l0aCBubyBTSE9XIGNvbW1hbmQgKG5vdCByZWNvbW1lbmRlZCEp LgotICAgTk9TSUdXSU5DSCBEaXNhYmxlIFNJR1dJTkNIIHNpZ25hbCB0cmFwcGluZy4KLSAgIE5P U1BMIEJ1aWxkIHdpdGggbm8gc2NyaXB0IHByb2dyYW1taW5nIGxhbmd1YWdlLgotICAgTk9TVEFU IERvbid0IGNhbGwgc3RhdCgpIGZyb20gbWFpbmxpbmUgY29kZS4KLSAgIE5PU1lNTElOSyBJbmNs dWRlIHRoaXMgZm9yIFVOSVhlcyB0aGF0IGRvbid0IGhhdmUgcmVhZGxpbmsoKS4KLSAgIE5PU1lT SU9DVExIIERvIG5vdCAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+LgotICAgTk9TWVNUSU1FSCBDbyBu b3QgaW5jbHVkZSA8c3lzL3RpbWUuaD4uCi0gICBOT1NZU0xPRyBEaXNhYmxlIHN5c2xvZ2dpbmcg Y29kZS4KLSAgIE5PVENQT1BUUyBCdWlsZCB3aXRoIG5vIFNFVCBUQ1Agb3B0aW9ucyBvciB1bmRl cmx5aW5nIHN1cHBvcnQuCi0gICBOT1RMT0cgQnVpbGQgd2l0aCBubyBzdXBwb3J0IGZvciB0cmFu c2FjdGlvbiBsb2dnaW5nLgotICAgTk9UTV9JU0RTVCBTdHJ1Y3QgdG0gaGFzIG5vIHRtX2lzZHN0 IG1lbWJlci4KLSAgIE5PVU5JQ09ERSBCdWlsZCB3aXRoIG5vIHN1cHBvcnQgZm9yIFVuaWNvZGUg Y2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbi4KLSAgIE5PVVJMIERvbid0IHBhcnNlIFVSTHMKLSAg IE5PVVVDUCBCdWlsZCB3aXRoIG5vIFVVQ1AgbG9ja2ZpbGUgc3VwcG9ydCAoZGFuZ2Vyb3VzISku Ci0gICBOT1dBUk4gTWFrZSBFWElUIFdBUk5JTkcgYmUgT0ZGIGJ5IGRlZmF1bHQgKG90aGVyd2lz ZSBpdCdzIE9OKS4KLSAgIE5PV1JFRlJFU0ggT3ZlcnJpZGUgYnVpbHQtaW4gZGVmaW5pdGlvbiBv ZiBDS19XUkVGUkVTSCAocS52LikuCi0gICBOT1hGRVIgQnVpbGQgd2l0aCBubyBLZXJtaXQgb3Ig b3RoZXIgZmlsZS10cmFuc2ZlciBwcm90b2NvbHMuCi0gICBOT1hNSVQgQnVpbGQgd2l0aCBubyBU UkFOU01JVCBjb21tYW5kLgotICAgTk9YUFJJTlQgRGlzYWJsZXMgdHJhbnNwYXJlbnQgcHJpbnQg Y29kZS4KLSAgIE9MRE1TRyBVc2Ugb2xkICJlbnRlcmluZyBzZXJ2ZXIgbW9kZSIgbWVzc2FnZSAo c2VlIFsxNzJdY2tjbWFpLmMpLgotICAgT0xJTlVYSElTUEVFRCBCdWlsZCBpbiBvbGQgTGludXgg aGktc2VyaWFsLXNwZWVkIGNvZGUgKGZvciBMaW51eCA8PQotICAgMS4wKS4KLSAgIE9QRU5CU0Qg QnVpbGQgZm9yIE9wZW5CU0QuCi0gICBPUzIgQnVpbGQgZm9yIE9TLzIuCi0gICBPU0YgQnVpbGQg Zm9yIE9TRi8xLgotICAgT1NGUEMgQnVpbGQgZm9yIE9TRi8xIG9uIGEgUEMuCi0gICBPU0YzMiBE aWdpdGFsIFVOSVggMy4yIG9yIGxhdGVyLgotICAgT1NGNDAgQnVpbGQgZm9yIERpZ2l0YWwgVU5J WCA0LjAuCi0gICBPU0Y1MCBCdWlsZCBmb3IgRGlnaXRhbCBVTklYIDUuMC4KLSAgIE9TSyBCdWls ZCBmb3IgT1MtOS4KLSAgIE9YT1MgQnVpbGQgZm9yIE9saXZldHRpIFgvT1MgMi4zLgotICAgUENJ WCBCdWlsZCBmb3IgUEMvSVgKLSAgIFBJRF9UPXh4eCBUeXBlIGZvciBwaWRzIGlzIHh4eCAobm9y bWFsbHkgaW50IG9yIHBpZF90KS4KLSAgIFBPU0lYIEJ1aWxkIGZvciBQT1NJWDogdXNlIFBPU0lY IGhlYWRlciBmaWxlcywgZnVuY3Rpb25zLCBldGMuCi0gICBfUE9TSVhfU09VUkNFIERpc2FibGUg bm9uLVBPU0lYIGZlYXR1cmVzLgotICAgUFJPVlgxIEJ1aWxkIGZvciBWZW5peCAxLjAgb24gREVD IFByb2Zlc3Npb25hbCAzeHguCi0gICBQVFggQnVpbGQgZm9yIER5bml4L1BUWAotICAgUFdJRF9U PXh4eCBnZXRwd2lkKCkgdHlwZSBpcyB4eHguCi0gICBSQlNJWj14eHggRGVmaW5lIG92ZXJhbGwg c2l6ZSBvZiByZWNlaXZlLXBhY2tldCBidWZmZXIgKHdpdGggRFlOQU1JQykuCi0gICBSRENISyBy ZGNoaygpIHN5c3RlbSBjYWxsIGlzIGF2YWlsYWJsZS4KLSAgIFJFTkFNRSByZW5hbWUoKSBzeXN0 ZW0gY2FsbCBpcyBhdmFpbGFibGUgKFVOSVgpLgotICAgUlRBSVggQnVpbGQgZm9yIEFJWCAyLjIu MSBvbiBJQk0gUlQgUEMuCi0gICBSVFUgQnVpbGQgZm9yIE1hc3Njb21wIC8gQ29uY3VycmVudCBS VFUuCi0gICBTQVZFRFVJRCBCU0Qgb3Igb3RoZXIgbm9uLUFUJlQgVU5JWCBoYXMgc2F2ZWQtc2V0 dWlkIGZlYXR1cmUuCi0gICBTQlNJWj14eHggRGVmaW5lIG92ZXJhbGwgc2l6ZSBvZiBzZW5kLXBh Y2tldCBidWZmZXIgKHVzZSB3aXRoIERZTkFNSUMpLgotICAgU0RJUkVOVCBEaXJlY3Rvcnkgc3Ry dWN0dXJlIHNwZWNpZmllZCBpbiA8c3lzL2RpcmVudC5oPi4KLSAgIFNFTEVDVCBzZWxlY3QoKSBm dW5jdGlvbiBhdmFpbGFibGUgKGNvbmZsaWN0cyB3aXRoIFJEQ0hLIGFuZCBDS19QT0xMKQotICAg U0VMRUNUX0ggSW5jbHVkZSA8c3lzL3NlbGVjdC5oPiBmb3Igc2VsZWN0KCktcmVsYXRlZCBkZWZp bml0aW9ucy4KLSAgIFNFVEVVSUQgQlNEIDQuNC1zdHlsZSBzZXRlWGlkKCkgZnVuY3Rpb25zIGF2 YWlsYWJsZS4KLSAgIFNJR19WIFR5cGUgZm9yIHNpZ25hbCgpIGlzIHZvaWQuIFVzZWQgdG8gb3Zl cnJpZGUgbm9ybWFsIGFzc3VtcHRpb24uCi0gICBTSUdfSSBUeXBlIGZvciBzaWduYWwoKSBpcyBp bnQuIFVzZWQgdG8gb3ZlcnJpZGUgbm9ybWFsIGFzc3VtcHRpb24uCi0gICBTT0NLT1BUX1QgT3Zl cnJpZGUgZGVmYXVsdCBkYXRhIHR5cGUgZm9yIGdldC9zZXRzb2Nrb3B0KCkgb3B0aW9uCi0gICBs ZW5ndGguCi0gICBTT0xBUklTIEJ1aWxkIGZvciBTb2xhcmlzLgotICAgU09MQVJJUzI1IEJ1aWxk IGZvciBTb2xhcmlzIDIuNSBvciBsYXRlci4KLSAgIFNPTllORVdTIEJ1aWxkIGZvciBTb255IE5F V1MtT1MuCi0gICBTVEVSTUlPWCA8c3lzL3Rlcm1pb3guaD4gaXMgYXZhaWxhYmxlLgotICAgU1RS QVRVUyBCdWlsZCBmb3IgU3RyYXR1cyBWT1MuCi0gICBTVFJBVFVTWDI1IEluY2x1ZGUgU3RyYXR1 cyBWT1MgWC4yNSBzdXBwb3J0LgotICAgU1VONFM1IEJ1aWxkIGZvciBTVU5PUyA0LnggaW4gdGhl IFN5c3RlbSBWIFIzIGVudmlyb25tZW50LgotICAgU1VOT1M0IEJ1aWxkIGZvciBTVU5PUyA0LjAg aW4gdGhlIEJTRCBlbnZpcm9ubWVudC4KLSAgIFNVTk9TNDEgQnVpbGQgZm9yIFNVTk9TIDQuMSBp biB0aGUgQlNEIGVudmlyb25tZW50LgotICAgU1VOWDI1IEJ1aWxkIHdpdGggc3VwcG9ydCBmb3Ig U3VuTGluayBYLjI1LgotICAgU1ZSMyBCdWlsZCBmb3IgQVQmVCBTeXN0ZW0gViBSZWxlYXNlIDMu Ci0gICBTVlIzSkMgQWxsb3cgam9iIGNvbnRyb2wgc3VwcG9ydCBvbiBTeXN0ZW0gViBSZWxlYXNl IDMgVU5JWCB2ZXJzaW9ucy4KLSAgIFNWUjQgQnVpbGQgZm9yIEFUJlQgU3lzdGVtIFYgUmVsZWFz ZSA0LgotICAgU1dfQUNDX0lEIFVOSVggb25seSAtLSBzd2FwIHJlYWwgJiBlZmZlY3RpdmUgaWRz IGFyb3VuZCBhY2Nlc3MoKSBjYWxscy4KLSAgIHN4YUU1MCBCdWlsZCBmb3IgUEZVIENvbXBhY3Qg QSBTZXJpZXMgU1gvQSBUSVNQLgotICAgU1lTTE9HTEVWRUw9biBGb3JjZSBzeXNsb2dnaW5nIGF0 IGdpdmVuIGxldmVsLgotICAgU1lTVElNRUggSW5jbHVkZSA8c3lzL3RpbWUuaD4uCi0gICBTWVNV VElNRUggSW5jbHVkZSA8c3lzL3V0aW1lLmg+IGZvciBzZXR0aW5nIGZpbGUgZGF0ZXMgKDg4T1BF TikKLSAgIFRDUFNPQ0tFVCBCdWlsZCB3aXRoIHN1cHBvcnQgZm9yIFRDUC9JUCB2aWEgQmVya2Vs ZXkgc29ja2V0cyBsaWJyYXJ5LgotICAgVEVSTUlPWCA8dGVybWlveC5oPiBoZWFkZXIgZmlsZSBp cyBhdmFpbGFibGUgKG1vc3RseSBTVlI0KS4KLSAgIFROQ09ERSBJbmNsdWRlIFRFTE5FVC1zcGVj aWZpYyBjb2RlLgotICAgVE9XRVIxIEJ1aWxkIGZvciBOQ1IgVG93ZXIgMTYzMiB3aXRoIE9TIDEu MDIuCi0gICBUUlMxNiBCdWlsZCBmb3IgVGFuZHkgMTYvNjAwMC4KLSAgIFVJRF9UPXh4eCBUeXBl IGZvciB1aWRzIGlzIHh4eCAobm9ybWFsbHkgaW50IG9yIHVpZF90KS4KLSAgIFVOSVggTXVzdCBi ZSBkZWZpbmVkIGZvciBhbGwgVU5JWCB2ZXJzaW9ucy4KLSAgIFVOSVgzNTFNIEFUJlQgVU5JWCAz LjUxbSBvbiB0aGUgQVQmVCA3MzAwIFVOSVggUEMuCi0gICBVU0VfQVJST1dLRVlTIEluY2x1ZGUg Y29kZSB0byBwYXJzZSBBTlNJIGFycm93LWtleSBzZXF1ZW5jZXMuCi0gICBVU0VfTFNUQVQgT0sg dG8gdXNlIGxzdGF0KCkuCi0gICBVU0VfTUVNQ1BZIERlZmluZSB0aGlzIGlmIG1lbWNweSgpL21l bXNldCgpL21lbW1vdmUoKSBhdmFpbGFibGUuCi0gICBVU0VfU1RSRVJST1IgRGVmaW5lIHRoaXMg aWYgc3RyZXJyb3IoKSBpcyBhdmFpbGFibGUuCi0gICBVU0xFRVAgdXNsZWVwKCkgc3lzdGVtIGNh bGwgYXZhaWxhYmxlIChjb25mbGljdHMgd2l0aCBOQVAgJiBTRUxFQ1QpLgotICAgVVRFSyBCdWls ZCBmb3IgVGVrdHJvbml4IHdvcmtzdGF0aW9ucyB3aXRoIFVURUsgT1MuCi0gICBVVElNRUggSW5j bHVkZSA8dXRpbWUuaD4gZm9yIHNldHRpbmcgZmlsZSBkYXRlcyAoU1ZSNCwgUE9TSVgpCi0gICBV VFMyNCBCdWlsZCBmb3IgQW1kYWhsIFVUUyAyLjQuCi0gICBWNyBCdWlsZCBmb3IgVmVyc2lvbiA3 IFVOSVguCi0gICBWTVMgQnVpbGQgZm9yIFZBWC9WTVMuCi0gICBWT0lEPXh4eCBWT0lEIHR5cGUg Zm9yIGZ1bmN0aW9ucyAoaW50IG9yIHZvaWQpLgotICAgVlhWRSBCdWlsZCBmb3IgQ0RDIFZYL1ZF IDUuMi4xLgotICAgV0FJVF9UPXh4eCBUeXBlIG9mIGFyZ3VtZW50IHBhc3NlZCB0byB3YWl0KCku Ci0gICBXSU5UQ1AgQnVpbGQgd2l0aCBXb2xsb25nb25nIFZBWC9WTVMgVENQL0lQIChpbXBsaWVz IFRDUFNPQ0tFVCkKLSAgIFdPTExPTkdPTkcgQnVpbGQgd2l0aCBXb2xsb25nb25nIFVOSVggVENQ L0lQIChpbXBsaWVzIFRDUFNPQ0tFVCkKLSAgIFhFTklYIEJ1aWxkIGZvciBYZW5peCAoU0NPLCBU YW5keSwgb3RoZXJzKS4KLSAgIFhORElSIFN1cHBvcnQgZm9yIEJTRCBsb25nIGZpbGVuYW1lcyB2 aWEgPHN5cy9uZGlyLmg+LgotICAgWFlaX0lOVEVSTkFMIFN1cHBvcnQgZm9yIFhZWk1PREVNIHBy b3RvY29scyBpcyBpbnRlcm5hbCwgbm90IGV4dGVybmFsLgotICAgWkZDREFUIERlZmluZSB0aGlz IGlmIHpmY2RhdCgpIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBpbiBLZXJtaXQuCi0gICBaSUxPRyBC dWlsZCBmb3IgWmlsb2cgWkVVUy4KLSAgIFpKREFURSBIYXMgempkYXRlKCkgZnVuY3Rpb24gdGhh dCBjb252ZXJ0cyBkYXRlIHRvIEp1bGlhbiBmb3JtYXQuCi0gICBYUFJJTlQgVHJhbnNwYXJlbnQg cHJpbnQgY29kZSBpbmNsdWRlZCBpbiBDT05ORUNUIG1vZHVsZS4KLQotICAgWyBbMTczXVRvcCBd IFsgWzE3NF1Db250ZW50cyBdIFsgWzE3NV1DLUtlcm1pdCBIb21lIF0gWyBbMTc2XUtlcm1pdAot ICAgSG9tZSBdCi0gICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwotCi0KLSAgICBDLUtlcm1pdCBDb25maWd1cmF0aW9u IE9wdGlvbnMgLyBbMTc3XVRoZSBLZXJtaXQgUHJvamVjdCAvCi0gICAgWzE3OF1rZXJtaXRAY29s dW1iaWEuZWR1IC8gMzAgSnVuZSAyMDExCi0KLVJlZmVyZW5jZXMKLQotICAgMS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUvCi0gICAyLiBtYWlsdG86a2VybWl0QGNvbHVtYmlhLmVkdQotICAgMy4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSAgIDQuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9rOTUuaHRtbAotICAgNS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotICAgNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2Nrc2NyaXB0cy5odG1sCi0gICA3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY3VycmVudC5odG1sCi0gICA4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvd2hh dHNuZXcuaHRtbAotICAgOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2ZhcS5odG1s Ci0gIDEwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc3VwcG9ydC5odG1sCi0gIDEx LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwKLSAgMTIuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAgMTMuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gIDE0LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDEKLSAgMTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2NjZmcuaHRtbCN4MgotICAxNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrY2NmZy5odG1sI3gzCi0gIDE3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tjY2ZnLmh0bWwjeDQKLSAgMTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nj ZmcuaHRtbCN4NQotICAxOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5o dG1sI3g2Ci0gIDIwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwj eDcKLSAgMjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4OAot ICAyMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g5Ci0gIDIz LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDEwCi0gIDI0LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDExCi0gIDI1LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDEyCi0gIDI2LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDEzCi0gIDI3LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDE0Ci0gIDI4LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeGExCi0gIDI5LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwKLSAgMzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAgMzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9pbmRleC5odG1sCi0gIDMyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2Zn Lmh0bWwjdG9wCi0gIDMzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0 bWwjY29udGVudHMKLSAgMzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcu aHRtbCN4MgotICAzNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1s I3gwCi0gIDM2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0g IDM3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotICAzOC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3RvcAotICAzOS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI2NvbnRlbnRzCi0gIDQwLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDMKLSAgNDEuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4MQotICA0Mi4gZnRwOi8va2VybWl0 LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dGlvLmMKLSAgNDMuIGZ0cDovL2tlcm1p dC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY2RlYi5oCi0gIDQ0LiBmdHA6Ly9rZXJt aXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V1czMuYwotICA0NS4gZnRwOi8va2Vy bWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjZGViLmgKLSAgNDYuIGZ0cDovL2tl cm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXRpby5jCi0gIDQ3LiBmdHA6Ly9r ZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V0aW8uYwotICA0OC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotICA0OS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSAgNTAuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN0b3AKLSAgNTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2NjZmcuaHRtbCNjb250ZW50cwotICA1Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrY2NmZy5odG1sI3g0Ci0gIDUzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjY2ZnLmh0bWwjeDIKLSAgNTQuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2Vy bWl0L2Mta2VybWl0L21ha2VmaWxlCi0gIDU1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1aW5zLmh0bWwKLSAgNTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vp bnMuaHRtbCN4NAotICA1Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5o dG1sI3g5LjIKLSAgNTguIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0 L2NrdXVzeC5jCi0gIDU5LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1p dC9ja3V0aW8uYwotICA2MC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJt aXQvY2t1ZmlvLmMKLSAgNjEuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2Vy bWl0L2NrdXVzeC5jCi0gIDYyLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtl cm1pdC9ja3VjbWQuYwotICA2My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQuaHRtbAotICA2NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwK LSAgNjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN0b3AKLSAg NjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCNjb250ZW50cwot ICA2Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g1Ci0gIDY4 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDMKLSAgNjkuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC91bmljb2RlLmh0bWwKLSAgNzAuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAgNzEuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gIDcyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tjY2ZnLmh0bWwjdG9wCi0gIDczLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjY2ZnLmh0bWwjY29udGVudHMKLSAgNzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2NjZmcuaHRtbCN4NgotICA3NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrY2NmZy5odG1sI3g0Ci0gIDc2LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1p dC9jLWtlcm1pdC9ja3V1c3IuaAotICA3Ny4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJt aXQvYy1rZXJtaXQvY2t1dXNyLmgKLSAgNzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0Lmh0bWwKLSAgNzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRl eC5odG1sCi0gIDgwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwj dG9wCi0gIDgxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjY29u dGVudHMKLSAgODIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4 NwotICA4My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g1Ci0g IDg0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDYuMQotICA4 NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g2LjIKLSAgODYu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4Ni4zCi0gIDg3LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDYuNAotICA4OC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g0Ci0gIDg5LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvZ2tlcm1pdC5odG1sCi0gIDkwLiBmdHA6Ly9rZXJtaXQu Y29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V1c3IuaAotICA5MS4gZnRwOi8va2VybWl0 LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tja2VyLmgKLSAgOTIuIGZ0cDovL2tlcm1p dC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY2RlYi5oCi0gIDkzLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gIDk0LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotICA5NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrY2NmZy5odG1sI3RvcAotICA5Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrY2NmZy5odG1sI2NvbnRlbnRzCi0gIDk3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjY2ZnLmh0bWwjeDgKLSAgOTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2NjZmcuaHRtbCN4NgotICA5OS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQv Yy1rZXJtaXQvY2t1ZGlhLmMKLSAxMDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0Lmh0bWwKLSAxMDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5o dG1sCi0gMTAyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjdG9w Ci0gMTAzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjY29udGVu dHMKLSAxMDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4OQot IDEwNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g3Ci0gMTA2 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDguMQotIDEwNy4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g4LjIKLSAxMDguIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4OC4zCi0gMTA5LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDguMS4xCi0gMTEwLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDguMS4yCi0gMTExLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDguMS4zCi0gMTEyLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDguMS40Ci0gMTEzLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDguMS41Ci0gMTE0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDguMS42Ci0gMTE1LiBmdHA6 Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2NuZXQuaAotIDExNi4gZnRw Oi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjdGVsLmMKLSAxMTcuIGZ0 cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY3RlbC5jCi0gMTE4LiBm dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2N0ZWwuaAotIDExOS4g ZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjZnRwLmMKLSAxMjAu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAxMjEuIGZ0cDov L2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY25ldC5jCi0gMTIyLiBmdHA6 Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2NuZXQuaAotIDEyMy4gZnRw Oi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dGlvLmMKLSAxMjQuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4MTEKLSAxMjUuIG1haWx0 bzprZXJtaXRAY29sdW1iaWEuZWR1Ci0gMTI2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdC5odG1sCi0gMTI3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5k ZXguaHRtbAotIDEyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1s I3RvcAotIDEyOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI2Nv bnRlbnRzCi0gMTMwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwj eDEwCi0gMTMxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDgK LSAxMzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAxMzMu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gMTM0LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjdG9wCi0gMTM1LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjY29udGVudHMKLSAxMzYuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4MTEKLSAxMzcuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4OQotIDEzOC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxMQotIDEzOS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWlucy5odG1sCi0gMTQwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdC5odG1sCi0gMTQxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv aW5kZXguaHRtbAotIDE0Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5o dG1sI3RvcAotIDE0My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1s I2NvbnRlbnRzCi0gMTQ0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0 bWwjeDEyCi0gMTQ1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwj eDEwCi0gMTQ2LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3Vj bnMuYwotIDE0Ny4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1 Y29uLmMKLSAxNDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwK LSAxNDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gMTUwLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjdG9wCi0gMTUxLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjY29udGVudHMKLSAxNTIuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4MTMKLSAxNTMuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4MTEKLSAxNTQuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAxNTUuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gMTU2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tjY2ZnLmh0bWwjdG9wCi0gMTU3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjY2ZnLmh0bWwjY29udGVudHMKLSAxNTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2NjZmcuaHRtbCN4MTQKLSAxNTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2NjZmcuaHRtbCN4MTIKLSAxNjAuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2Vy bWl0L2Mta2VybWl0L2NrY2RlYi5oCi0gMTYxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdC5odG1sCi0gMTYyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5k ZXguaHRtbAotIDE2My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1s I3RvcAotIDE2NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI2Nv bnRlbnRzCi0gMTY1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwj eDEzCi0gMTY2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0g MTY3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDE2OC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3RvcAotIDE2OS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI2NvbnRlbnRzCi0gMTcwLiBmdHA6 Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2NkZWIuaAotIDE3MS4gZnRw Oi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjbmV0LmgKLSAxNzIuIGZ0 cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY21haS5jCi0gMTczLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjdG9wCi0gMTc0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjY29udGVudHMKLSAxNzUuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAxNzYuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gMTc3LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDE3OC4gbWFpbHRvOmtlcm1pdEBjb2x1bWJpYS5l ZHUKCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2Nr Y2RlYi5oIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NkZWIuaApk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRmZjAwOC4uMDAwMDAwMAotLS0gYS9ja2Vy bWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY2RlYi5oCisrKyAvZGV2L251bGwK QEAgLTEsNjYwNyArMCwwIEBACi0vKiAgQyBLIEMgRCBFIEIgLiBIICAqLwotCi0vKgotTW9uIEF1 ZyAyMyAwOToyMjowNSAyMDEwCi0KLSAgTk9URSBUTyBDT05UUklCVVRPUlM6IFRoaXMgZmlsZSwg YW5kIGFsbCB0aGUgb3RoZXIgQy1LZXJtaXQgZmlsZXMsIG11c3QgYmUKLSAgY29tcGF0aWJsZSB3 aXRoIEMgcHJlcHJvY2Vzc29ycyB0aGF0IHN1cHBvcnQgb25seSAjaWZkZWYsICNlbHNlLCAjZW5k aWYsCi0gICNkZWZpbmUsIGFuZCAjdW5kZWYuICBQbGVhc2UgZG8gbm90IHVzZSAjaWYsIGxvZ2lj YWwgb3BlcmF0b3JzLCBvciBvdGhlcgotICBsYXRlci1tb2RlbCBwcmVwcm9jZXNzb3IgZmVhdHVy ZXMgaW4gYW55IG9mIHRoZSBwb3J0YWJsZSBDLUtlcm1pdCBtb2R1bGVzLgotICBZb3UgY2FuLCBv ZiBjb3Vyc2UsIHVzZSB0aGVzZSBjb25zdHJ1Y3Rpb25zIGluIHBsYXRmb3JtLXNwZWNpZmljIG1v ZHVsZXMKLSAgd2hlbiB5b3Uga25vdyB0aGV5IGFyZSBzdXBwb3J0ZWQuCi0qLwotCi0vKgotICBU aGlzIGZpbGUgaXMgaW5jbHVkZWQgYnkgYWxsIEMtS2VybWl0IG1vZHVsZXMsIGluY2x1ZGluZyB0 aGUgbW9kdWxlcwotICB0aGF0IGFyZW4ndCBzcGVjaWZpYyB0byBLZXJtaXQgKGxpa2UgdGhlIGNv bW1hbmQgcGFyc2VyIGFuZCB0aGUgY2s/dGlvIGFuZAotICBjaz9maW8gbW9kdWxlcykuICBJdCBz aG91bGQgYmUgaW5jbHVkZWQgQkVGT1JFIGFueSBvdGhlciBDLUtlcm1pdCBoZWFkZXIKLSAgZmls ZXMuICBJdCBzcGVjaWZpZXMgZm9ybWF0IGNvZGVzIGZvciBkZWJ1ZygpLCB0bG9nKCksIGFuZCBz aW1pbGFyCi0gIGZ1bmN0aW9ucywgYW5kIGluY2x1ZGVzIGFueSBuZWNlc3NhcnkgZGVmaW5pdGlv bnMgdG8gYmUgdXNlZCBieSBhbGwgQy1LZXJtaXQKLSAgbW9kdWxlcywgYW5kIGFsc28gaW5jbHVk ZXMgc29tZSBmZWF0dXJlIHNlbGVjdGlvbiBjb21waWxlLXRpbWUgc3dpdGNoZXMsIGFuZAotICBh bHNvIHN5c3RlbS0gb3IgY29tcGlsZXItZGVwZW5kZW50IGRlZmluaXRpb25zLCBwbHVzICNpbmNs dWRlcyBhbmQgcHJvdG90eXBlcwotICByZXF1aXJlZCBieSBhbGwgQy1LZXJtaXQgbW9kdWxlcy4K LSovCi0KLS8qCi0gIEF1dGhvcjogRnJhbmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4sCi0g IENvbHVtYmlhIFVuaXZlcnNpdHkgQWNhZGVtaWMgSW5mb3JtYXRpb24gU3lzdGVtcywgTmV3IFlv cmsgQ2l0eS4KLQotICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMTAsCi0gICAgVHJ1c3RlZXMgb2Yg Q29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KLSAgICBBbGwgcmln aHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQot ICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIg YW5kIHBlcm1pc3Npb25zLgotKi8KLQotLyoKLSAgRXR5bW9sb2d5OiBUaGUgbmFtZSBvZiB0aGlz IGZpbGUgbWVhbnMgIkMtS2VybWl0IENvbW1vbi1DLUxhbmd1YWdlIERlYnVnZ2luZwotICBIZWFk ZXIiLCBiZWNhdXNlIG9yaWdpbmFsbHkgaXQgY29udGFpbmVkIG9ubHkgdGhlIGZvcm1hdHMgKEYw MDAtRjExMSkgZm9yCi0gIHRoZSBkZWJ1ZygpIGFuZCB0bG9nKCkgZnVuY3Rpb25zLiAgU2luY2Ug dGhlbiBpdCBoYXMgZ3Jvd24gdG8gaW5jbHVkZSBhbGwKLSAgbWF0ZXJpYWwgcmVxdWlyZWQgYnkg YWxsIG90aGVyIEMtS2VybWl0IG1vZHVsZXMsIGluY2x1ZGluZyB0aGUgbm9uLUtlcm1pdAotICBz cGVjaWZpYyBvbmVzLiAgSW4gb3RoZXIgd29yZHMsIHRoaXMgaXMgdGhlIG9uZSBoZWFkZXIgZmls ZSB0aGF0IGlzCi0gIGd1YXJhbnRlZWQgdG8gYmUgaW5jbHVkZWQgYnkgYWxsIEMtS2VybWl0IHNv dXJjZSBtb2R1bGVzLgotKi8KLQotI2lmbmRlZiBDS0NERUJfSAkJCS8qIERvbid0IGluY2x1ZGUg bWUgbW9yZSB0aGFuIG9uY2UuICovCi0jZGVmaW5lIENLQ0RFQl9ICi0KLSNpZmRlZiBPUzIKLSNp bmNsdWRlICJja29rZXIuaCIKLSNlbHNlIC8qIE9TMiAqLwotLyogVW5zaWduZWQgbnVtYmVycyAq LwotCi0jaWZuZGVmIFVTSE9SVAotI2RlZmluZSBVU0hPUlQgdW5zaWduZWQgc2hvcnQKLSNlbmRp ZiAvKiBVU0hPUlQgKi8KLQotI2lmbmRlZiBVSU5UCi0jZGVmaW5lIFVJTlQgdW5zaWduZWQgaW50 Ci0jZW5kaWYgLyogVUlOVCAqLwotCi0jaWZuZGVmIFVMT05HCi0jZGVmaW5lIFVMT05HIHVuc2ln bmVkIGxvbmcKLSNlbmRpZiAvKiBVTE9ORyAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYg TUFDT1NYMTAJCQkJLyogTWFjIE9TIFggMS4wICovCi0jaWZuZGVmIE1BQ09TWAkJCQkvKiBpbXBs aWVzIE1hYyBPUyBYICovCi0jZGVmaW5lIE1BQ09TWAotI2VuZGlmIC8qIE1BQ09TWCAqLwotI2Vu ZGlmIC8qIE1BQ09TWDEwICovCi0KLSNpZmRlZiBNQUNPU1gJCQkJLyogTWFjIE9TIFggKi8KLSNp Zm5kZWYgQlNENDQJCQkJLyogaW1wbGllcyA0LjQgQlNEICovCi0jZGVmaW5lIEJTRDQ0Ci0jZW5k aWYgLyogQlNENDQgKi8KLSNlbmRpZiAvKiBNQUNPU1ggKi8KLQotI2lmZGVmIFNDT19PU1I1MDUJ CQkvKiBTQ08gMy4ydjUuMC41ICovCi0jaWZuZGVmIFNDT19PU1I1MDQJCQkvKiBpbXBsaWVzIFND TyAzLjJ2NS4wLjQgKi8KLSNkZWZpbmUgU0NPX09TUjUwNAotI2VuZGlmIC8qIFNDT19PU1I1MDQg Ki8KLSNlbmRpZiAvKiBTQ09fT1NSNTA1ICovCi0KLSNpZmRlZiBTQ09fT1NSNTA0CQkJLyogU0NP IDMuMnY1LjAuNCAqLwotI2lmbmRlZiBDS19TQ09WNQkJCS8qIGltcGxpZXMgU0NPIDMuMnY1LjAg Ki8KLSNkZWZpbmUgQ0tfU0NPVjUKLSNlbmRpZiAvKiBDS19TQ09WNSAqLwotI2luY2x1ZGUgPHN5 cy90eXBlcy5oPgkJCS8qIFRvIHNpZGVzdGVwIGhlYWRlci1maWxlIG1lc3MgKi8KLSNlbmRpZiAv KiBTQ09fT1NSNTA0ICovCi0KLSNpZmRlZiBDS19TQ09WNQotI2lmbmRlZiBBTllTQ08KLSNkZWZp bmUgQU5ZU0NPCi0jZW5kaWYgLyogQU5ZU0NPICovCi0jZW5kaWYgLyogQ0tfU0NPVjUgKi8KLQot I2lmZGVmIFVOSVhXQVJFCi0jaWZuZGVmIEFOWVNDTwotI2RlZmluZSBBTllTQ08KLSNlbmRpZiAv KiBBTllTQ08gKi8KLSNlbmRpZiAvKiBVTklYV0FSRSAqLwotCi0jaWZuZGVmIE1JTklYCQkJCS8q IE1pbml4IHZlcnNpb25zICovCi0jaWZkZWYgTUlOSVgzMTUKLSNkZWZpbmUgTUlOSVgKLSNlbHNl Ci0jaWZkZWYgTUlOSVgzCi0jZGVmaW5lIE1JTklYCi0jZWxzZQotI2lmZGVmIE1JTklYMgotI2Rl ZmluZSBNSU5JWAotI2VuZGlmCS8qIE1JTklYMiAqLwotI2VuZGlmCS8qIE1JTklYMyAqLwotI2Vu ZGlmCS8qIE1JTklYMzE1ICovCi0jZW5kaWYJLyogTUlOSVggKi8KLQotI2lmZGVmIENLX1NDTzMy VjQJCQkvKiBTQ08gMy4ydjQgKi8KLSNpZm5kZWYgQU5ZU0NPCi0jZGVmaW5lIEFOWVNDTwotI2Vu ZGlmIC8qIEFOWVNDTyAqLwotI2lmbmRlZiBYRU5JWAotI2RlZmluZSBYRU5JWAotI2VuZGlmIC8q IFhFTklYICovCi0jaWZuZGVmIFNWUjMKLSNkZWZpbmUgU1ZSMwotI2VuZGlmIC8qIFNWUjMgKi8K LSNpZm5kZWYgRElSRU5UCi0jZGVmaW5lIERJUkVOVAotI2VuZGlmIC8qIERJUkVOVCAqLwotI2lm bmRlZiBSRU5BTUUKLSNkZWZpbmUgUkVOQU1FCi0jZW5kaWYgLyogUkVOQU1FICovCi0jaWZuZGVm IFNWUjNKQwotI2RlZmluZSBTVlIzSkMKLSNlbmRpZiAvKiBTVlIzSkMgKi8KLSNpZm5kZWYgQ0tf UlRTQ1RTCi0jZGVmaW5lIENLX1JUU0NUUwotI2VuZGlmIC8qIENLX1JUU0NUUyAqLwotI2lmbmRl ZiBQSURfVAotI2RlZmluZSBQSURfVCBwaWRfdAotI2VuZGlmIC8qIFBJRF9UICovCi0jaWZuZGVm IFBXSURfVAotI2RlZmluZSBQV0lEX1QgaW50Ci0jZW5kaWYgLyogUFdJRF9UICovCi0jZW5kaWYg LyogQ0tfU0NPMzJWNCAqLwotCi0jaWZkZWYgTk9JQ1AJCQkJLyogSWYgbm8gY29tbWFuZCBwYXJz ZXIgKi8KLSNpZm5kZWYgTk9TUEwJCQkJLyogVGhlbiBubyBzY3JpcHQgbGFuZ3VhZ2UgZWl0aGVy ICovCi0jZGVmaW5lIE5PU1BMCi0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZm5kZWYgTk9DU0VUUwkJ CQkvKiBPciBjaGFyYWNlciBzZXRzICovCi0jZGVmaW5lIE5PQ1NFVFMKLSNlbmRpZiAvKiBOT0NT RVRTICovCi0jaWZuZGVmIE5PRlRQCQkJCS8qIE9yIEZUUCBjbGllbnQgKi8KLSNkZWZpbmUgTk9G VFAKLSNlbmRpZiAvKiBOT0ZUUCAqLwotI2VuZGlmIC8qIE5PSUNQICovCi0KLS8qIEJ1aWx0LWlu IG1ha2VmaWxlIGVudHJpZXMgKi8KLQotI2lmZGVmIFNPTEFSSVMxMQkJCS8qIFNvbGFyaXMgMTEg aW1wbGllcyAxMCAqLwotI2lmbmRlZiBTT0xBUklTMTAKLSNkZWZpbmUgU09MQVJJUzEwCi0jZW5k aWYgLyogU09MQVJJUzEwICovCi0jZW5kaWYgLyogU09MQVJJUzExICovCi0KLSNpZmRlZiBTT0xB UklTMTAJCQkvKiBTb2xhcmlzIDEwIGltcGxpZXMgOSAqLwotI2lmbmRlZiBTT0xBUklTOQotI2Rl ZmluZSBTT0xBUklTOQotI2VuZGlmIC8qIFNPTEFSSVM5ICovCi0jZW5kaWYgLyogU09MQVJJUzEw ICovCi0KLSNpZmRlZiBTT0xBUklTOQkJCQkvKiBTb2xhcmlzIDkgaW1wbGllcyA4ICovCi0jaWZu ZGVmIFNPTEFSSVM4Ci0jZGVmaW5lIFNPTEFSSVM4Ci0jZW5kaWYgLyogU09MQVJJUzggKi8KLSNl bmRpZiAvKiBTT0xBUklTOSAqLwotCi0jaWZkZWYgU09MQVJJUzgJCQkJLyogU29sYXJpcyA4IGlt cGxpZXMgNyAqLwotI2lmbmRlZiBTT0xBUklTNwotI2RlZmluZSBTT0xBUklTNwotI2VuZGlmIC8q IFNPTEFSSVM3ICovCi0jZW5kaWYgLyogU09MQVJJUzggKi8KLQotI2lmZGVmIFNPTEFSSVM3CQkJ CS8qIFNvbGFyaXMgNyBpbXBsaWVzIDIuNiAqLwotI2lmbmRlZiBTT0xBUklTMjYKLSNkZWZpbmUg U09MQVJJUzI2Ci0jZW5kaWYgLyogU09MQVJJUzI2ICovCi0jZW5kaWYgLyogU09MQVJJUzcgKi8K LQotI2lmZGVmIFNPTEFSSVMyNgkJCS8qIFNvbGFyaXMgMi42IGltcGxpZXMgMi41ICovCi0jaWZu ZGVmIFNPTEFSSVMyNQotI2RlZmluZSBTT0xBUklTMjUKLSNlbmRpZiAvKiBTT0xBUklTMjUgKi8K LSNlbmRpZiAvKiBTT0xBUklTMjYgKi8KLQotI2lmZGVmIFNPTEFSSVMyNQkJCS8qIFNvbGFyaXMg Mi41IGltcGxpZXMgU29sYXJpcyAqLwotI2lmbmRlZiBTT0xBUklTCi0jZGVmaW5lIFNPTEFSSVMK LSNlbmRpZiAvKiBTT0xBUklTICovCi0jaWZuZGVmIFBPU0lYCQkJCS8qIEFuZCBQT1NJWCAqLwot I2RlZmluZSBQT1NJWAotI2VuZGlmIC8qIFBPU0lYICovCi0jaWZuZGVmIENLX1dSRUZSRVNICQkJ LyogQW5kIHRoaXMgKGN1cnNlcykgKi8KLSNkZWZpbmUgQ0tfV1JFRlJFU0gKLSNlbmRpZiAvKiBD S19XUkVGUkVTSCAqLwotI2VuZGlmIC8qIFNPTEFSSVMyNSAqLwotCi0jaWZkZWYgU09MQVJJUzI0 CQkJLyogU29sYXJpcyAyLjQgaW1wbGllcyBTb2xhcmlzICovCi0jaWZuZGVmIFNPTEFSSVMKLSNk ZWZpbmUgU09MQVJJUwotI2VuZGlmIC8qIFNPTEFSSVMgKi8KLSNlbmRpZiAvKiBTT0xBUklTMjQg Ki8KLQotI2lmZGVmIFNPTEFSSVMJCQkJLyogU29sYXJpcyBnZXRzICJQT1NJWCIgUlRTL0NUUyBB UEkgKi8KLSNpZmRlZiBQT1NJWAotI2lmbmRlZiBQT1NJWF9DUlRTQ1RTCi0jZGVmaW5lIFBPU0lY X0NSVFNDVFMKLSNlbmRpZiAvKiBQT1NJWF9DUlRTQ1RTICovCi0jZW5kaWYgLyogUE9TSVggKi8K LSNpZm5kZWYgU1ZSNAotI2RlZmluZSBTVlI0Ci0jZW5kaWYJLyogU1ZSNCAqLwotI2lmbmRlZiBT VEVSTUlPWAotI2RlZmluZSBTVEVSTUlPWAotI2VuZGlmCS8qIFNURVJNSU9YICovCi0jaWZuZGVm IFNFTEVDVAotI2RlZmluZSBTRUxFQ1QKLSNlbmRpZgkvKiBTRUxFQ1QgKi8KLSNpZm5kZWYgRk5G TE9BVAotI2RlZmluZSBGTkZMT0FUCi0jZW5kaWYJLyogRk5GTE9BVCAqLwotI2lmbmRlZiBESVJF TlQKLSNkZWZpbmUgRElSRU5UCi0jZW5kaWYJLyogRElSRU5UICovCi0jaWZuZGVmIEJJR0JVRk9L Ci0jZGVmaW5lIEJJR0JVRk9LCi0jZW5kaWYJLyogQklHQlVGT0sgKi8KLSNpZm5kZWYgQ0tfTkVX VEVSTQotI2RlZmluZSBDS19ORVdURVJNCi0jZW5kaWYJLyogQ0tfTkVXVEVSTSAqLwotI2VuZGlm IC8qIFNPTEFSSVMgKi8KLQotI2lmZGVmIFNVTjRTNQkJCQkvKiBTdW4tNCBTeXN0ZW0gViBlbnZp cm9ubWVudCAqLwotI2lmbmRlZiBTVlIzCQkJCS8qIGltcGxpZXMgU3lzdGVtIFYgUjMgb3IgbGF0 ZXIgKi8KLSNkZWZpbmUgU1ZSMwotI2VuZGlmIC8qIFNWUjMgKi8KLSNlbmRpZiAvKiBTVU40UzUg Ki8KLSNpZmRlZiBTVU5PUzQxCQkJCS8qIFNVTk9TNDEgaW1wbGllcyBTVU5PUzQgKi8KLSNpZm5k ZWYgU1VOT1M0Ci0jZGVmaW5lIFNVTk9TNAotI2VuZGlmIC8qIFNVTk9TNCAqLwotI2VuZGlmIC8q IFNVTk9TNDEgKi8KLQotI2lmZGVmIFNVTjRTNQkJCQkvKiBTdW4tNCBTeXN0ZW0gViBlbnZpcm9u bWVudCAqLwotI2lmbmRlZiBTVlIzCQkJCS8qIGltcGxpZXMgU3lzdGVtIFYgUjMgb3IgbGF0ZXIg Ki8KLSNkZWZpbmUgU1ZSMwotI2VuZGlmIC8qIFNWUjMgKi8KLSNlbmRpZiAvKiBTVU40UzUgKi8K LQotI2lmZGVmIFNVTk9TNDEJCQkJLyogU1VOT1M0MSBpbXBsaWVzIFNVTk9TNCAqLwotI2lmbmRl ZiBTVU5PUzQKLSNkZWZpbmUgU1VOT1M0Ci0jZW5kaWYgLyogU1VOT1M0ICovCi0jZW5kaWYgLyog U1VOT1M0MSAqLwotCi0jaWZkZWYgU1VOT1M0CQkJCS8qIEJ1aWx0LWluIFNVTk9TNCBtYWtlZmls ZSBlbnRyeSAqLwotI2lmbmRlZiBVTklYCi0jZGVmaW5lIFVOSVgKLSNlbmRpZiAvKiBVTklYICov Ci0jaWZuZGVmIEJTRDQKLSNkZWZpbmUgQlNENAotI2VuZGlmIC8qIEJTRDQgKi8KLSNpZm5kZWYg Tk9TRVRCVUYKLSNkZWZpbmUgTk9TRVRCVUYKLSNlbmRpZiAvKiBOT1NFVEJVRiAqLwotI2lmbmRl ZiBESVJFTlQKLSNkZWZpbmUgRElSRU5UCi0jZW5kaWYgLyogRElSRU5UICovCi0jaWZuZGVmIE5P TkVUCi0jaWZuZGVmIFRDUFNPQ0tFVAotI2RlZmluZSBUQ1BTT0NLRVQKLSNlbmRpZiAvKiBUQ1BT T0NLRVQgKi8KLSNlbmRpZiAvKiBOT05FVCAqLwotI2lmbmRlZiBTQVZFRFVJRAotI2RlZmluZSBT QVZFRFVJRAotI2VuZGlmIC8qIFNBVkVEVUlEICovCi0jaWZuZGVmIERZTkFNSUMKLSNkZWZpbmUg RFlOQU1JQwotI2VuZGlmIC8qIERZTkFNSUMgKi8KLSNlbmRpZiAvKiBTVU5PUzQgKi8KLQotI2lm ZGVmIFNPTEFSSVMJCQkJLyogQnVpbHQgaW4gbWFrZWZpbGUgZW50cnkgKi8KLSNpZm5kZWYgTk9T RVRCVUYJCQkvKiBmb3IgU29sYXJpcyAyLnggKi8KLSNkZWZpbmUgTk9TRVRCVUYKLSNlbmRpZiAv KiBOT1NFVEJVRiAqLwotI2lmbmRlZiBOT0NVUlNFUwotI2lmbmRlZiBDS19DVVJTRVMKLSNkZWZp bmUgQ0tfQ1VSU0VTCi0jZW5kaWYgLyogQ0tfQ1VSU0VTICovCi0jZW5kaWYgLyogTk9DVVJTRVMg Ki8KLSNpZm5kZWYgQ0tfTkVXVEVSTQotI2RlZmluZSBDS19ORVdURVJNCi0jZW5kaWYgLyogQ0tf TkVXVEVSTSAqLwotI2lmbmRlZiBESVJFTlQKLSNkZWZpbmUgRElSRU5UCi0jZW5kaWYgLyogRElS RU5UICovCi0jaWZuZGVmIE5PTkVUCi0jaWZuZGVmIFRDUFNPQ0tFVAotI2RlZmluZSBUQ1BTT0NL RVQKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNlbmRpZiAvKiBOT05FVCAqLwotI2lmbmRlZiBV TklYCi0jZGVmaW5lIFVOSVgKLSNlbmRpZiAvKiBVTklYICovCi0jaWZuZGVmIFNWUjQKLSNkZWZp bmUgU1ZSNAotI2VuZGlmIC8qIFNWUjQgKi8KLSNpZm5kZWYgSEFERFJMSVNUCi0jZGVmaW5lIEhB RERSTElTVAotI2VuZGlmIC8qIEhBRERSTElTVCAqLwotI2lmbmRlZiBTVEVSTUlPWAotI2RlZmlu ZSBTVEVSTUlPWAotI2VuZGlmIC8qIFNURVJNSU9YICovCi0jaWZuZGVmIFNFTEVDVAotI2RlZmlu ZSBTRUxFQ1QKLSNlbmRpZiAvKiBTRUxFQ1QgKi8KLSNpZm5kZWYgRFlOQU1JQwotI2RlZmluZSBE WU5BTUlDCi0jZW5kaWYgLyogRFlOQU1JQyAqLwotI2lmbmRlZiBOT1VVQ1AKLSNpZm5kZWYgSERC VVVDUAotI2RlZmluZSBIREJVVUNQCi0jZW5kaWYgLyogSERCVVVDUCAqLwotI2VuZGlmIC8qIE5P VVVDUCAqLwotI2VuZGlmIC8qIFNPTEFSSVMgKi8KLQotLyogRmVhdHVyZXMgdGhhdCBjYW4gYmUg ZWxpbWluYXRlZCBmcm9tIGEgbm8tZmlsZS10cmFuc2ZlciB2ZXJzaW9uICovCi0KLSNpZmRlZiBO T1hGRVIKLSNpZm5kZWYgTk9GVFAKLSNkZWZpbmUgTk9GVFAKLSNlbmRpZiAvKiBOT0ZUUCAqLwot I2lmbmRlZiBPUzIKLSNpZm5kZWYgTk9DVVJTRVMJCQkvKiBGdWxsc2NyZWVuIGZpbGUtdHJhbnNm ZXIgZGlzcGxheSAqLwotI2RlZmluZSBOT0NVUlNFUwotI2VuZGlmIC8qIE5PQ1VSU0VTICovCi0j ZW5kaWYgLyogT1MyICovCi0jaWZuZGVmIE5PQ0tYWVoJCQkJLyogWFlaTU9ERU0gc3VwcG9ydCAq LwotI2RlZmluZSBOT0NLWFlaCi0jZW5kaWYgLyogTk9DS1hZWiAqLwotI2lmbmRlZiBOT0NLU1BF RUQJCQkvKiBDdHJsLWNoYXIgdW5wcmVmaXhpbmcgKi8KLSNkZWZpbmUgTk9DS1NQRUVECi0jZW5k aWYgLyogTk9DS1NQRUVEICovCi0jaWZuZGVmIE5PU0VSVkVSCQkJLyogU2VydmVyIG1vZGUgKi8K LSNkZWZpbmUgTk9TRVJWRVIKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotI2lmbmRlZiBOT0NLVElN RVJTCQkJLyogRHluYW1pYyBwYWNrZXQgdGltZXJzICovCi0jZGVmaW5lIE5PQ0tUSU1FUlMKLSNl bmRpZiAvKiBOT0NLVElNRVJTICovCi0jaWZuZGVmIE5PUEFUVEVSTlMJCQkvKiBGaWxlLXR5cGUg cGF0dGVybnMgKi8KLSNkZWZpbmUgTk9QQVRURVJOUwotI2VuZGlmIC8qIE5PUEFUVEVSTlMgKi8K LSNpZm5kZWYgTk9TVFJFQU1JTkcJCQkvKiBTdHJlYW1pbmcgKi8KLSNkZWZpbmUgTk9TVFJFQU1J TkcKLSNlbmRpZiAvKiBOT1NUUkVBTUlORyAqLwotI2lmbmRlZiBOT0lLU0QJCQkJLyogSW50ZXJu ZXQgS2VybWl0IFNlcnZpY2UgKi8KLSNkZWZpbmUgTk9JS1NECi0jZW5kaWYgLyogTk9JS1NEICov Ci0jaWZuZGVmIE5PUElQRVNFTkQJCQkvKiBTZW5kaW5nIGZyb20gcGlwZXMgKi8KLSNkZWZpbmUg Tk9QSVBFU0VORAotI2VuZGlmIC8qIE5PUElQRVNFTkQgKi8KLSNpZm5kZWYgTk9BVVRPREwJCQkv KiBBdXRvZG93bmxvYWQgKi8KLSNkZWZpbmUgTk9BVVRPREwKLSNlbmRpZiAvKiBOT0FVVE9ETCAq LwotI2lmbmRlZiBOT01TRU5ECQkJCS8qIE1TRU5EICovCi0jZGVmaW5lIE5PTVNFTkQKLSNlbmRp ZiAvKiBOT01TRU5EICovCi0jaWZuZGVmIE5PVExPRwkJCQkvKiBUcmFuc2FjdGlvbiBsb2dnaW5n ICovCi0jZGVmaW5lIE5PVExPRwotI2VuZGlmIC8qIE5PVExPRyAqLwotI2lmbmRlZiBOT0NLWFhD SEFSCQkJLyogUGFja2V0IGNoYXJhY3RlciBkb3VibGluZyAqLwotI2RlZmluZSBOT0NLWFhDSEFS Ci0jZW5kaWYgLyogTk9DS1hYQ0hBUiAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZkZWYg Tk9JQ1AJCQkJLyogTm8gSW50ZXJhY3RpdmUgQ29tbWFuZCBQYXJzZXIgKi8KLSNpZm5kZWYgTk9E SUFMCQkJCS8qIEltcGxpZXMgTm8gRElBTCBjb21tYW5kICovCi0jZGVmaW5lIE5PRElBTAotI2Vu ZGlmIC8qIE5PRElBTCAqLwotI2lmbmRlZiBOT0NLWFlaCQkJCS8qIGFuZCBubyBleHRlcm5hbCBw cm90b2NvbHMgKi8KLSNkZWZpbmUgTk9DS1hZWgotI2VuZGlmIC8qIE5PQ0tYWVogKi8KLSNlbmRp ZiAvKiBOT0lDUCAqLwotCi0jaWZuZGVmIE5PSUtTRAotI2lmZGVmIElLU0RPTkxZCi0jaWZuZGVm IElLU0QKLSNkZWZpbmUgSUtTRAotI2VuZGlmIC8qIElLU0QgKi8KLSNpZm5kZWYgTk9MT0NBTAot I2RlZmluZSBOT0xPQ0FMCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2lmbmRlZiBOT1BVU0gKLSNk ZWZpbmUgTk9QVVNICi0jZW5kaWYgLyogTk9QVVNIICovCi0jaWZuZGVmIFROQ09ERQotI2RlZmlu ZSBUTkNPREUKLSNlbmRpZiAvKiBUTkNPREUgKi8KLSNpZm5kZWYgVENQU09DS0VUCi0jZGVmaW5l IFRDUFNPQ0tFVAotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2lmbmRlZiBORVRDT05OCi0jZGVm aW5lIE5FVENPTk4KLSNlbmRpZiAvKiBORVRDT05OICovCi0jaWZkZWYgU1VOWDI1Ci0jdW5kZWYg U1VOWDI1Ci0jZW5kaWYgLyogU1VOWDI1ICovCi0jaWZkZWYgSUJNWDI1Ci0jdW5kZWYgSUJNWDI1 Ci0jZW5kaWYgLyogSUJNWDI1ICovCi0jaWZkZWYgU1RSQVRVU1gyNQotI3VuZGVmIFNUUkFUVVNY MjUKLSNlbmRpZiAvKiBTVFJBVFVTWDI1ICovCi0jaWZkZWYgQ0tfTkVUQklPUwotI3VuZGVmIENL X05FVEJJT1MKLSNlbmRpZiAvKiBDS19ORVRCSU9TICovCi0jaWZkZWYgU1VQRVJMQVQKLSN1bmRl ZiBTVVBFUkxBVAotI2VuZGlmIC8qIFNVUEVSTEFUICovCi0jaWZkZWYgTlBJUEUKLSN1bmRlZiBO UElQRQotI2VuZGlmIC8qIE5QSVBFICovCi0jaWZkZWYgTkVURklMRQotI3VuZGVmIE5FVEZJTEUK LSNlbmRpZiAvKiBORVRGSUxFICovCi0jaWZkZWYgTkVUQ01ECi0jdW5kZWYgTkVUQ01ECi0jZW5k aWYgLyogTkVUQ01EICovCi0jaWZkZWYgTkVUUFRZCi0jdW5kZWYgTkVUUFRZCi0jZW5kaWYgLyog TkVUUFRZICovCi0jaWZkZWYgUkxPR0NPREUKLSN1bmRlZiBSTE9HQ09ERQotI2VuZGlmIC8qIFJM T0dDT0RFICovCi0jaWZkZWYgTkVURExMCi0jdW5kZWYgTkVURExMCi0jZW5kaWYgLyogTkVURExM ICovCi0jaWZuZGVmIE5PU1NICi0jdW5kZWYgTk9TU0gKLSNlbmRpZiAvKiBOT1NTSCAqLwotI2lm bmRlZiBOT0ZPUldBUkRYCi0jZGVmaW5lIE5PRk9SV0FSRFgKLSNlbmRpZiAvKiBOT0ZPUldBUkRY ICovCi0jaWZuZGVmIE5PQlJPV1NFUgotI2RlZmluZSBOT0JST1dTRVIKLSNlbmRpZiAvKiBOT0JS T1dTRVIgKi8KLSNpZm5kZWYgTk9IVFRQCi0jZGVmaW5lIE5PSFRUUAotI2VuZGlmIC8qIE5PSFRU UCAqLwotI2lmbmRlZiBOT0ZUUAotI2RlZmluZSBOT0ZUUAotI2VuZGlmIC8qIE5PRlRQICovCi0j aWZuZGVmIE5PX0NPTVBPUlQKLSNkZWZpbmUgTk9fQ09NUE9SVAotI2VuZGlmIC8qIE5PX0NPTVBP UlQgKi8KLSNlbmRpZiAvKiBJS1NET05MWSAqLwotI2VuZGlmIC8qIE5PSUtTRCAqLwotCi0vKiBG ZWF0dXJlcyB0aGF0IGNhbiBiZSBlbGltaW5hdGVkIGZyb20gYSByZW1vdGUtb25seSB2ZXJzaW9u ICovCi0KLSNpZmRlZiBOT0xPQ0FMCi0jaWZuZGVmIE5PRlRQCi0jZGVmaW5lIE5PRlRQCi0jZW5k aWYgLyogTk9GVFAgKi8KLSNpZm5kZWYgTk9IVFRQCi0jZGVmaW5lIE5PSFRUUAotI2VuZGlmIC8q IE5PSFRUUCAqLwotI2lmbmRlZiBOT1NTSAotI2RlZmluZSBOT1NTSAotI2VuZGlmIC8qIE5PU1NI ICovCi0jaWZuZGVmIE5PVEVSTQotI2RlZmluZSBOT1RFUk0KLSNlbmRpZiAvKiBOT1RFUk0gKi8K LSNpZm5kZWYgTk9DVVJTRVMJCQkvKiBGdWxsc2NyZWVuIGZpbGUtdHJhbnNmZXIgZGlzcGxheSAq LwotI2RlZmluZSBOT0NVUlNFUwotI2VuZGlmIC8qIE5PQ1VSU0VTICovCi0jaWZuZGVmIE5PRElB TAotI2RlZmluZSBOT0RJQUwKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLSNpZm5kZWYgTk9TQ1JJUFQK LSNkZWZpbmUgTk9TQ1JJUFQKLSNlbmRpZiAvKiBOT1NDUklQVCAqLwotI2lmbmRlZiBOT1NFVEtF WQotI2RlZmluZSBOT1NFVEtFWQotI2VuZGlmIC8qIE5PU0VUS0VZICovCi0jaWZuZGVmIE5PS1ZF UkJTCi0jZGVmaW5lIE5PS1ZFUkJTCi0jZW5kaWYgLyogTk9LVkVSQlMgKi8KLSNpZm5kZWYgTk9Y TUlUCi0jZGVmaW5lIE5PWE1JVAotI2VuZGlmIC8qIE5PWE1JVCAqLwotI2lmZGVmIENLX0NVUlNF UwotI3VuZGVmIENLX0NVUlNFUwotI2VuZGlmIC8qIENLX0NVUlNFUyAqLwotI2lmbmRlZiBJS1NE T05MWQotI2lmbmRlZiBOT0FQQwotI2RlZmluZSBOT0FQQwotI2VuZGlmIC8qIE5PQVBDICovCi0j aWZuZGVmIE5PTkVUCi0jZGVmaW5lIE5PTkVUCi0jZW5kaWYgLyogTk9ORVQgKi8KLSNlbmRpZiAv KiBJS1NET05MWSAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmZGVmIE5PTkVUCi0jaWZk ZWYgTkVUQ09OTgotI3VuZGVmIE5FVENPTk4KLSNlbmRpZiAvKiBORVRDT05OICovCi0jaWZkZWYg VENQU09DS0VUCi0jdW5kZWYgVENQU09DS0VUCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0jaWZu ZGVmIE5PVENQT1BUUwotI2RlZmluZSBOT1RDUE9QVFMKLSNlbmRpZiAvKiBOT1RDUE9QVFMgKi8K LSNpZmRlZiBTVU5YMjUKLSN1bmRlZiBTVU5YMjUKLSNlbmRpZiAvKiBTVU5YMjUgKi8KLSNpZmRl ZiBJQk1YMjUKLSN1bmRlZiBJQk1YMjUKLSNlbmRpZiAvKiBJQk1YMjUgKi8KLSNpZmRlZiBTVFJB VFVTWDI1Ci0jdW5kZWYgU1RSQVRVU1gyNQotI2VuZGlmIC8qIFNUUkFUVVNYMjUgKi8KLSNpZmRl ZiBDS19ORVRCSU9TCi0jdW5kZWYgQ0tfTkVUQklPUwotI2VuZGlmIC8qIENLX05FVEJJT1MgKi8K LSNpZmRlZiBTVVBFUkxBVAotI3VuZGVmIFNVUEVSTEFUCi0jZW5kaWYgLyogU1VQRVJMQVQgKi8K LSNpZmRlZiBOUElQRQotI3VuZGVmIE5QSVBFCi0jZW5kaWYgLyogTlBJUEUgKi8KLSNpZmRlZiBO RVRGSUxFCi0jdW5kZWYgTkVURklMRQotI2VuZGlmIC8qIE5FVEZJTEUgKi8KLSNpZmRlZiBORVRD TUQKLSN1bmRlZiBORVRDTUQKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSNpZmRlZiBORVRQVFkKLSN1 bmRlZiBORVRQVFkKLSNlbmRpZiAvKiBORVRQVFkgKi8KLSNpZmRlZiBSTE9HQ09ERQotI3VuZGVm IFJMT0dDT0RFCi0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNpZmRlZiBORVRETEwKLSN1bmRlZiBO RVRETEwKLSNlbmRpZiAvKiBORVRETEwgKi8KLSNpZm5kZWYgTk9TU0gKLSNkZWZpbmUgTk9TU0gK LSNlbmRpZiAvKiBOT1NTSCAqLwotI2lmbmRlZiBOT0ZUUAotI2RlZmluZSBOT0ZUUAotI2VuZGlm IC8qIE5PRlRQICovCi0jaWZuZGVmIE5PSFRUUAotI2RlZmluZSBOT0hUVFAKLSNlbmRpZiAvKiBO T0hUVFAgKi8KLSNpZm5kZWYgTk9CUk9XU0VSCi0jZGVmaW5lIE5PQlJPV1NFUgotI2VuZGlmIC8q IE5PQlJPV1NFUiAqLwotI2lmbmRlZiBOT0ZPUldBUkRYCi0jZGVmaW5lIE5PRk9SV0FSRFgKLSNl bmRpZiAvKiBOT0ZPUldBUkRYICovCi0jZW5kaWYgLyogTk9ORVQgKi8KLQotI2lmZGVmIElLU0RP TkxZCi0jaWZkZWYgU1VOWDI1Ci0jdW5kZWYgU1VOWDI1Ci0jZW5kaWYgLyogU1VOWDI1ICovCi0j aWZkZWYgSUJNWDI1Ci0jdW5kZWYgSUJNWDI1Ci0jZW5kaWYgLyogSUJNWDI1ICovCi0jaWZkZWYg U1RSQVRVU1gyNQotI3VuZGVmIFNUUkFUVVNYMjUKLSNlbmRpZiAvKiBTVFJBVFVTWDI1ICovCi0j aWZkZWYgQ0tfTkVUQklPUwotI3VuZGVmIENLX05FVEJJT1MKLSNlbmRpZiAvKiBDS19ORVRCSU9T ICovCi0jaWZkZWYgU1VQRVJMQVQKLSN1bmRlZiBTVVBFUkxBVAotI2VuZGlmIC8qIFNVUEVSTEFU ICovCi0jaWZkZWYgTlBJUEUKLSN1bmRlZiBOUElQRQotI2VuZGlmIC8qIE5QSVBFICovCi0jaWZk ZWYgTkVURklMRQotI3VuZGVmIE5FVEZJTEUKLSNlbmRpZiAvKiBORVRGSUxFICovCi0jaWZkZWYg TkVUQ01ECi0jdW5kZWYgTkVUQ01ECi0jZW5kaWYgLyogTkVUQ01EICovCi0jaWZkZWYgTkVUUFRZ Ci0jdW5kZWYgTkVUUFRZCi0jZW5kaWYgLyogTkVUUFRZICovCi0jaWZkZWYgUkxPR0NPREUKLSN1 bmRlZiBSTE9HQ09ERQotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0jaWZkZWYgTkVURExMCi0jdW5k ZWYgTkVURExMCi0jZW5kaWYgLyogTkVURExMICovCi0jaWZuZGVmIE5PU1NICi0jZGVmaW5lIE5P U1NICi0jZW5kaWYgLyogTk9TU0ggKi8KLSNpZm5kZWYgTk9IVFRQCi0jZGVmaW5lIE5PSFRUUAot I2VuZGlmIC8qIE5PSFRUUCAqLwotI2lmbmRlZiBOT0JST1dTRVIKLSNkZWZpbmUgTk9CUk9XU0VS Ci0jZW5kaWYgLyogTk9CUk9XU0VSICovCi0jZW5kaWYgLyogSUtTRE9OTFkgKi8KLS8qCi0gIE5v dGUgdGhhdCBub25lIG9mIHRoZSBhYm92ZSBwcmVjbHVkZXMgVE5DT0RFLCB3aGljaCBjYW4gYmUg ZGVmaW5lZCBpbgotICB0aGUgYWJzZW5jZSBvZiBUQ1BTT0NLRVQsIGV0YywgdG8gZW5hYmxlIHNl cnZlci1zaWRlIFRlbG5ldCBuZWdvdGF0aW9uLgotKi8KLSNpZm5kZWYgVE5DT0RFCQkJCS8qIFRo aXMgaXMgZm9yIHRoZSBiZW5lZml0IG9mICovCi0jaWZkZWYgVENQU09DS0VUCQkJLyogbW9kdWxl cyB0aGF0IG1pZ2h0IG5lZWQgVE5DT0RFICovCi0jZGVmaW5lIFROQ09ERQkJCQkvKiBub3QgYWxs IG9mIGNrY25ldC5oLi4uICovCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0jZW5kaWYgLyogVE5D T0RFICovCi0KLSNpZm5kZWYgTkVUQ09OTgotI2lmZGVmIFRDUFNPQ0tFVAotI2RlZmluZSBORVRD T05OCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotCi0jaWZu ZGVmIERFRlBBUgkJCQkvKiBEZWZhdWx0IHBhcml0eSAqLwotI2RlZmluZSBERUZQQVIgMAkJCS8q IE11c3QgYmUgaGVyZSBiZWNhdXNlIGl0IGlzIHVzZWQgKi8KLSNlbmRpZiAvKiBERUZQQVIgKi8J CQkvKiBieSBhbGwgY2xhc3NlcyBvZiBtb2R1bGVzICovCi0KLSNpZmRlZiBOVAotI2lmbmRlZiBP UzJPUldJTjMyCi0jZGVmaW5lIE9TMk9SV0lOMzIKLSNlbmRpZiAvKiBPUzJPUldJTjMyICovCi0j aWZuZGVmIE9TMgotI2RlZmluZSBXSU4zMk9OTFkKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAv KiBOVCAqLwotCi0jaWZkZWYgT1MyCQkJCS8qIEZvciBPUy8yIGRlYnVnZ2luZyAqLwotI2lmbmRl ZiBPUzJPUldJTjMyCi0jZGVmaW5lIE9TMk9SV0lOMzIKLSNlbmRpZiAvKiBPUzJPUldJTjMyICov Ci0jaWZkZWYgTlQKLSNkZWZpbmUgTk9DUllQVAotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNkZWZp bmUgTlRTSUcKLSNlbHNlIC8qIE5UICovCi0jZGVmaW5lIE9TMk9OTFkKLSNpbmNsdWRlIDxvczJk ZWYuaD4KLSNlbmRpZiAvKiBOVCAqLwotI2lmbmRlZiBPUzJPUlVOSVgKLSNkZWZpbmUgT1MyT1JV TklYCi0jZW5kaWYgLyogT1MyT1JVTklYICovCi0jaWZuZGVmIE9TMk9SVk1TCi0jZGVmaW5lIE9T Mk9SVk1TCi0jZW5kaWYgLyogT1MyT1JWTVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2luY2x1 ZGUgPHN0ZGlvLmg+CQkJLyogQmVnaW4gYnkgaW5jbHVkaW5nIHRoaXMuICovCi0jaW5jbHVkZSA8 Y3R5cGUuaD4JCQkvKiBhbmQgdGhpcy4gKi8KLQotI2lmZGVmIFZNUwotI2luY2x1ZGUgPHR5cGVz Lmg+CQkJLyogRW5zdXJlIG9mZl90LiAqLwotI2luY2x1ZGUgImNrdnJtcy5oIgkJCS8qIEdldCBO QU1ERUYgTkFNWF9DX01BWFJTUy4gKi8KLSNlbmRpZiAvKiBkZWYgVk1TICovCi0KLS8qIFN5c3Rl bS10eXBlIGNvbXBpbGF0aW9uIHN3aXRjaGVzICovCi0KLSNpZmRlZiBGVDIxCQkJCS8qIEZvcnR1 bmUgRm9yOlBybyAyLjEgaW1wbGllcyAxLjggKi8KLSNpZm5kZWYgRlQxOAotI2RlZmluZSBGVDE4 Ci0jZW5kaWYgLyogRlQxOCAqLwotI2VuZGlmIC8qIEZUMjEgKi8KLQotI2lmZGVmIF9fYnNkaV9f Ci0jaWZuZGVmIEJTREkKLSNkZWZpbmUgQlNESQotI2VuZGlmIC8qIEJTREkgKi8KLSNlbmRpZiAv KiBfX2JzZGlfXyAqLwotCi0jaWZkZWYgQUlYUFMyCQkJCS8qIEFJWFBTMiBpbXBsaWVzIEFJWDM3 MCAqLwotI2lmbmRlZiBBSVgzNzAKLSNkZWZpbmUgQUlYMzcwCi0jZW5kaWYgLyogQUlYMzcwICov Ci0jZW5kaWYgLyogQUlYUFMyICovCi0KLSNpZmRlZiBBSVgzNzAJCQkJLyogQUlYIFBTLzIgb3Ig MzcwIGltcGxpZXMgQlNENCAqLwotI2lmbmRlZiBCU0Q0Ci0jZGVmaW5lIEJTRDQKLSNlbmRpZiAv KiBCU0Q0ICovCi0jZW5kaWYgLyogQUlYMzcwICovCi0KLSNpZmRlZiBBSVhFU0EJCQkJLyogQUlY L0VTQSBpbXBsaWVzIEJTRDQuNCAqLwotI2lmbmRlZiBCU0Q0NAotI2RlZmluZSBCU0Q0NAotI2Vu ZGlmIC8qIEJTRDQ0ICovCi0jZW5kaWYgLyogQUlYRVNBICovCi0KLSNpZmRlZiBBSVg1MwkJCQkv KiBBSVg1MyBpbXBsaWVzIEFJWDUyICovCi0jaWZuZGVmIEFJWDUyCi0jZGVmaW5lIEFJWDUyCi0j ZW5kaWYgLyogQUlYNTIgKi8KLSNlbmRpZiAvKiBBSVg1MyAqLwotCi0jaWZkZWYgQUlYNTIJCQkJ LyogQUlYNTIgaW1wbGllcyBBSVg1MSAqLwotI2lmbmRlZiBBSVg1MQotI2RlZmluZSBBSVg1MQot I2VuZGlmIC8qIEFJWDUxICovCi0jZW5kaWYgLyogQUlYNTIgKi8KLQotI2lmZGVmIEFJWDUxCQkJ CS8qIEFJWDUxIGltcGxpZXMgQUlYNTAgKi8KLSNpZm5kZWYgQUlYNTAKLSNkZWZpbmUgQUlYNTAK LSNlbmRpZiAvKiBBSVg1MCAqLwotI2VuZGlmIC8qIEFJWDUxICovCi0KLSNpZmRlZiBBSVg1MAkJ CQkvKiBBSVg1MCBpbXBsaWVzIEFJWDQ1ICovCi0jaWZuZGVmIEFJWDQ1Ci0jZGVmaW5lIEFJWDQ1 Ci0jZW5kaWYgLyogQUlYNDUgKi8KLSNlbmRpZiAvKiBBSVg1MCAqLwotCi0jaWZkZWYgQUlYNDUJ CQkJLyogQUlYNDUgaW1wbGllcyBBSVg0NCAqLwotI2lmbmRlZiBBSVg0NAotI2RlZmluZSBBSVg0 NAotI2VuZGlmIC8qIEFJWDQ0ICovCi0jZW5kaWYgLyogQUlYNDUgKi8KLQotI2lmZGVmIEFJWDQ0 CQkJCS8qIEFJWDQ0IGltcGxpZXMgQUlYNDMgKi8KLSNpZm5kZWYgQUlYNDMKLSNkZWZpbmUgQUlY NDMKLSNlbmRpZiAvKiBBSVg0MyAqLwotI2VuZGlmIC8qIEFJWDQ0ICovCi0KLSNpZmRlZiBBSVg0 MwkJCQkvKiBBSVg0MyBpbXBsaWVzIEFJWDQyICovCi0jaWZuZGVmIEFJWDQyCi0jZGVmaW5lIEFJ WDQyCi0jZW5kaWYgLyogQUlYNDIgKi8KLSNlbmRpZiAvKiBBSVg0MyAqLwotCi0jaWZkZWYgQUlY NDIJCQkJLyogQUlYNDIgaW1wbGllcyBBSVg0MSAqLwotI2lmbmRlZiBBSVg0MQotI2RlZmluZSBB SVg0MQotI2VuZGlmIC8qIEFJWDQxICovCi0jZW5kaWYgLyogQUlYNDIgKi8KLQotI2lmZGVmIFNW NjhSM1Y2CQkJCS8qIFN5c3RlbSBWLzY4IFIzMlY2IGltcGxpZXMgU1ZSMyAqLwotI2lmbmRlZiBT VlIzCi0jZGVmaW5lIFNWUjMKLSNlbmRpZiAvKiBTVlIzICovCi0jZW5kaWYgLyogU1Y2OFIzVjYg Ki8KLQotI2lmZGVmIFNWODhSMzIJCQkJLyogU3lzdGVtIFYvODggUjMyIGltcGxpZXMgU1ZSMyAq LwotI2lmbmRlZiBTVlIzCi0jZGVmaW5lIFNWUjMKLSNlbmRpZiAvKiBTVlIzICovCi0jZW5kaWYg LyogU1Y4OFIzMiAqLwotCi0jaWZkZWYgREdVWDU0MAkJCQkvKiBERyBVWCA1LjQwIGltcGxpZXMg U3lzIFYgUiA0ICovCi0jaWZuZGVmIFNWUjQKLSNkZWZpbmUgU1ZSNAotI2VuZGlmIC8qIFNWUjQg Ki8KLSNlbmRpZiAvKiBER1VYNTQwICovCi0KLSNpZm5kZWYgREdVWAotI2lmZGVmIERHVVg1NDAJ CQkJLyogREcvVVggNS40MCBpbXBsaWVzIERHVVggKi8KLSNkZWZpbmUgREdVWAotI2Vsc2UKLSNp ZmRlZiBER1VYNDMwCQkJCS8qIFNvIGRvZXMgREcvVVggNC4zMCAqLwotI2RlZmluZSBER1VYCi0j ZW5kaWYgLyogREdVWDQzMCAqLwotI2VuZGlmIC8qIERHVVg1NDAgKi8KLSNlbmRpZiAvKiBER1VY ICovCi0KLSNpZmRlZiBJUklYNjUJCQkJLyogSVJJWCA2LjUgaW1wbGllcyBJUklYIDYuNCAqLwot I2lmbmRlZiBJUklYNjQKLSNkZWZpbmUgSVJJWDY0Ci0jZW5kaWYgLyogSVJJWDY0ICovCi0jZW5k aWYgLyogSVJJWDY1ICovCi0KLSNpZmRlZiBJUklYNjQJCQkJLyogSVJJWCA2LjQgaW1wbGllcyBJ UklYIDYuMiAqLwotI2lmbmRlZiBCU0Q0NE9SUE9TSVgKLSNkZWZpbmUgQlNENDRPUlBPU0lYCQkJ LyogZm9yIGNrdXRpbydzIGJlbmVmaXQgKi8KLSNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KLSNp Zm5kZWYgSVJJWDYyCi0jZGVmaW5lIElSSVg2MgotI2VuZGlmIC8qIElSSVg2MiAqLwotI2VuZGlm IC8qIElSSVg2NCAqLwotCi0jaWZkZWYgSVJJWDYyCQkJCS8qIElSSVggNi4yIGltcGxpZXMgSVJJ WCA2LjAgKi8KLSNpZm5kZWYgSVJJWDYwCi0jZGVmaW5lIElSSVg2MAotI2VuZGlmIC8qIElSSVg2 MCAqLwotI2VuZGlmIC8qIElSSVg2MiAqLwotCi0jaWZkZWYgSVJJWDYwCQkJCS8qIElSSVggNi4w IGltcGxpZXMgSVJJWCA1LjEgKi8KLSNpZm5kZWYgSVJJWDUxCi0jZGVmaW5lIElSSVg1MQotI2Vu ZGlmIC8qIElSSVg1MSAqLwotI2lmbmRlZiBJUklYNTIJCQkJLyogQW5kIElSSVggNS4yIChmb3Ig aHdmYykgKi8KLSNkZWZpbmUgSVJJWDUyCi0jZW5kaWYgLyogSVJJWDUyICovCi0jZW5kaWYgLyog SVJJWDYwICovCi0KLSNpZm5kZWYgSVJJWAkJCQkvKiBJUklYIDQuMCBvciBncmVhdGVyIGltcGxp ZXMgSVJJWCAqLwotI2lmZGVmIElSSVg2NAotI2RlZmluZSBJUklYCi0jZWxzZQotI2lmZGVmIElS SVg2MgotI2RlZmluZSBJUklYCi0jZWxzZQotI2lmZGVmIElSSVg2MAotI2RlZmluZSBJUklYCi0j ZWxzZQotI2lmZGVmIElSSVg1MQotI2RlZmluZSBJUklYCi0jZWxzZQotI2lmZGVmIElSSVg0MAot I2RlZmluZSBJUklYCi0jZW5kaWYgLyogSVJJWDQwICovCi0jZW5kaWYgLyogSVJJWDUxICovCi0j ZW5kaWYgLyogSVJJWDYwICovCi0jZW5kaWYgLyogSVJJWDYyICovCi0jZW5kaWYgLyogSVJJWDY0 ICovCi0jZW5kaWYgLyogSVJJWCAqLwotCi0jaWZkZWYgTUlQUwkJCQkvKiBNSVBTIFN5c3RlbSBW IGVudmlyb25tZW50ICovCi0jaWZuZGVmIFNWUjMJCQkJLyogaW1wbGllcyBTeXN0ZW0gViBSMyBv ciBsYXRlciAqLwotI2RlZmluZSBTVlIzCi0jZW5kaWYgLyogU1ZSMyAqLwotI2VuZGlmIC8qIE1J UFMgKi8KLQotI2lmZGVmIEhQVVg5CQkJCS8qIEhQLVVYIDkueCAqLwotI2lmbmRlZiBTVlIzCi0j ZGVmaW5lIFNWUjMKLSNlbmRpZiAvKiBTVlIzICovCi0jaWZuZGVmIEhQVVgKLSNkZWZpbmUgSFBV WAotI2VuZGlmIC8qIEhQVVggKi8KLSNpZm5kZWYgSFBVWDlQTFVTCi0jZGVmaW5lIEhQVVg5UExV UwotI2VuZGlmIC8qIEhQVVg5UExVUyAqLwotI2VuZGlmIC8qIEhQVVg5ICovCi0KLSNpZmRlZiBI UFVYMTAJCQkJLyogSFAtVVggMTAueCAqLwotI2lmbmRlZiBIUFVYMTAxMAkJCS8qIElmIGFueXRo aW5nIGhpZ2hlciBpcyBkZWZpbmVkICovCi0jaWZkZWYgSFBVWDEwMjAJCQkJLyogZGVmaW5lIEhQ VVgxMDEwIHRvby4gKi8KLSNkZWZpbmUgSFBVWDEwMTAKLSNlbmRpZiAvKiBIUFVYMTAyMCAqLwot I2lmZGVmIEhQVVgxMDMwCi0jZGVmaW5lIEhQVVgxMDEwCi0jZW5kaWYgLyogSFBVWDEwMzAgKi8K LSNlbmRpZiAvKiBIUFVYMTAxMCAqLwotCi0jaWZkZWYgSFBVWDExMDAJCQkJLyogSFAtVVggMTEu MDAgaW1wbGllcyAxMC4xMCAqLwotI2lmbmRlZiBIUFVYMTAxMAotI2RlZmluZSBIUFVYMTAxMAot I2VuZGlmIC8qIEhQVVgxMDEwICovCi0jZW5kaWYgLyogSFBVWDExMDAgKi8KLQotI2lmbmRlZiBT VlI0Ci0jZGVmaW5lIFNWUjQKLSNlbmRpZiAvKiBTVlI0ICovCi0jaWZuZGVmIEhQVVgKLSNkZWZp bmUgSFBVWAotI2VuZGlmIC8qIEhQVVggKi8KLSNpZm5kZWYgSFBVWDlQTFVTCi0jZGVmaW5lIEhQ VVg5UExVUwotI2VuZGlmIC8qIEhQVVg5UExVUyAqLwotI2VuZGlmIC8qIEhQVVgxMCAqLwotCi0j aWZkZWYgUU5YCQkJCS8qIFFOWCBTb2Z0d2FyZSBTeXN0ZW1zIEluYyAqLwotI2lmbmRlZiBQT1NJ WAkJCQkvKiBRTlggNC4wIG9yIGxhdGVyIGlzIFBPU0lYICovCi0jZGVmaW5lIFBPU0lYCi0jZW5k aWYgLyogUE9TSVggKi8KLSNpZm5kZWYgX18zODZfXwkJCQkvKiBDb21lcyBpbiAxNi1iaXQgYW5k IDMyLWJpdCAqLwotI2RlZmluZSBfXzE2QklUX18KLSNkZWZpbmUgQ0tfUU5YMTYKLSNlbHNlCi0j ZGVmaW5lIF9fMzJCSVRfXwotI2RlZmluZSBDS19RTlgzMgotI2VuZGlmIC8qIF9fMzg2X18gKi8K LSNlbmRpZiAvKiBRTlggKi8KLQotLyoKLSAgNC40QlNEIGlzIGEgbWl4dHVyZSBvZiBTeXN0ZW0g ViBSNCwgUE9TSVgsIGFuZCA0LjNCU0QuCi0qLwotI2lmZGVmIEJTRDQ0CQkJCS8qIDQuNCBCU0Qg Ki8KLSNpZm5kZWYgU1ZSNAkJCQkvKiBCU0Q0NCBpbXBsaWVzIFNWUjQgKi8KLSNkZWZpbmUgU1ZS NAotI2VuZGlmIC8qIFNWUjQgKi8KLSNpZm5kZWYgTk9TRVRCVUYJCQkvKiBOT1NFVEJVRiBpcyBz YWZlICovCi0jZGVmaW5lIE5PU0VUQlVGCi0jZW5kaWYgLyogTk9TRVRCVUYgKi8KLSNpZm5kZWYg RElSRU5UCQkJCS8qIFVzZXMgPGRpcmVudC5oPiAqLwotI2RlZmluZSBESVJFTlQKLSNlbmRpZiAv KiBESVJFTlQgKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotCi0jaWZkZWYgT1BFTkJTRAkJCQkvKiBP cGVuQlNEIG1pZ2h0IG9yIG1pZ2h0IG5vdCAqLwotI2lmbmRlZiBfX09wZW5CU0RfXwkJCS8qIGhh dmUgdGhpcyBkZWZpbmVkLi4uICovCi0jZGVmaW5lIF9fT3BlbkJTRF9fCi0jZW5kaWYgLyogX19P cGVuQlNEX18gKi8KLSNlbmRpZiAvKiBPUEVOQlNEICovCi0KLSNpZmRlZiBTVlIzCQkJCS8qIFNW UjMgaW1wbGllcyBBVFRTViAqLwotI2lmbmRlZiBBVFRTVgotI2RlZmluZSBBVFRTVgotI2VuZGlm IC8qIEFUVFNWICovCi0jZW5kaWYgLyogU1ZSMyAqLwotCi0jaWZkZWYgU1ZSNAkJCQkvKiBTVlI0 IGltcGxpZXMgQVRUU1YgKi8KLSNpZm5kZWYgQVRUU1YKLSNkZWZpbmUgQVRUU1YKLSNlbmRpZiAv KiBBVFRTViAqLwotI2lmbmRlZiBTVlIzCQkJCS8qIC4uLmFzIHdlbGwgYXMgU1ZSMyAqLwotI2Rl ZmluZSBTVlIzCi0jZW5kaWYgLyogU1ZSMyAqLwotI2VuZGlmIC8qIFNWUjQgKi8KLQotI2lmZGVm IE9YT1MKLSNpZm5kZWYgQVRUU1YKLSNkZWZpbmUgQVRUU1YJCQkJLyogT1hPUyBpbXBsaWVzIEFU VFNWICovCi0jZW5kaWYgLyogISBBVFRTViAqLwotI2RlZmluZSBTV19BQ0NfSUQJCQkvKiBhY2Nl c3MoKSB3YW50cyBwcml2cyBvbiAqLwotI2RlZmluZSBraWxsIHByaXZfa2lsbAkJCS8qIGtpbGwo KSB3YW50cyBwcml2cyBvbiAqLwotI2lmbmRlZiBOT1NFVEJVRgotI2RlZmluZSBOT1NFVEJVRgkJ CS8qIE5PU0VUQlVGIGlzIHNhZmUgKi8KLSNlbmRpZiAvKiAhIE5PU0VUQlVGICovCi0jZW5kaWYg LyogT1hPUyAqLwotCi0jaWZkZWYgVVRTVgkJCQkvKiBVVFNWIGltcGxpZXMgQVRUU1YgKi8KLSNp Zm5kZWYgQVRUU1YKLSNkZWZpbmUgQVRUU1YKLSNlbmRpZiAvKiBBVFRTViAqLwotI2VuZGlmIC8q IFVUU1YgKi8KLQotI2lmZGVmIFhFTklYCQkJCS8qIFhFTklYIGltcGxpZXMgQVRUU1YgKi8KLSNp Zm5kZWYgQVRUU1YKLSNkZWZpbmUgQVRUU1YKLSNlbmRpZiAvKiBBVFRTViAqLwotI2VuZGlmIC8q IFhFTklYICovCi0KLSNpZmRlZiBBVVgJCQkJLyogQVVYIGltcGxpZXMgQVRUU1YgKi8KLSNpZm5k ZWYgQVRUU1YKLSNkZWZpbmUgQVRUU1YKLSNlbmRpZiAvKiBBVFRTViAqLwotI2VuZGlmIC8qIEFV WCAqLwotCi0jaWZkZWYgQVRUNzMwMAkJCQkvKiBBVFQ3MzAwIGltcGxpZXMgQVRUU1YgKi8KLSNp Zm5kZWYgQVRUU1YKLSNkZWZpbmUgQVRUU1YKLSNlbmRpZiAvKiBBVFRTViAqLwotI2VuZGlmIC8q IEFUVDczMDAgKi8KLQotI2lmZGVmIEFUVDYzMDAJCQkJLyogQVRUNjMwMCBpbXBsaWVzIEFUVFNW ICovCi0jaWZuZGVmIEFUVFNWCi0jZGVmaW5lIEFUVFNWCi0jZW5kaWYgLyogQVRUU1YgKi8KLSNl bmRpZiAvKiBBVFQ2MzAwICovCi0KLSNpZmRlZiBIUFVYCQkJCS8qIEhQVVggaW1wbGllcyBBVFRT ViAqLwotI2lmbmRlZiBBVFRTVgotI2RlZmluZSBBVFRTVgotI2VuZGlmIC8qIEFUVFNWICovCi0j ZW5kaWYgLyogSFBVWCAqLwotCi0jaWZkZWYgSVNJSUkJCQkJLyogSVNJSUkgaW1wbGllcyBBVFRT ViAqLwotI2lmbmRlZiBBVFRTVgotI2RlZmluZSBBVFRTVgotI2VuZGlmIC8qIEFUVFNWICovCi0j ZW5kaWYgLyogSVNJSUkgKi8KLQotI2lmZGVmIE5FWFQzMwkJCQkvKiBORVhUMzMgaW1wbGllcyBO RVhUICovCi0jaWZuZGVmIE5FWFQKLSNkZWZpbmUgTkVYVAotI2VuZGlmIC8qIE5FWFQgKi8KLSNl bmRpZiAvKiBORVhUMzMgKi8KLQotI2lmZGVmIE5FWFQJCQkJLyogTkVYVCBpbXBsaWVzIEJTRDQg Ki8KLSNpZm5kZWYgQlNENAotI2RlZmluZSBCU0Q0Ci0jZW5kaWYgLyogQlNENCAqLwotI2VuZGlm IC8qIE5FWFQgKi8KLQotI2lmZGVmIEJTRDQxCQkJCS8qIEJTRDQxIGltcGxpZXMgQlNENCAqLwot I2lmbmRlZiBCU0Q0Ci0jZGVmaW5lIEJTRDQKLSNlbmRpZiAvKiBCU0Q0ICovCi0jZW5kaWYgLyog QlNENDEgKi8KLQotI2lmZGVmIEJTRDQzCQkJCS8qIEJTRDQzIGltcGxpZXMgQlNENCAqLwotI2lm bmRlZiBCU0Q0Ci0jZGVmaW5lIEJTRDQKLSNlbmRpZiAvKiBCU0Q0ICovCi0jZW5kaWYgLyogQlNE NDMgKi8KLQotI2lmZGVmIEJTRDQJCQkJLyogQlNENCBpbXBsaWVzIEFOWUJTRCAqLwotI2lmbmRl ZiBBTllCU0QKLSNkZWZpbmUgQU5ZQlNECi0jZW5kaWYgLyogQU5ZQlNEICovCi0jZW5kaWYgLyog QlNENCAqLwotCi0jaWZkZWYgQlNEMjkJCQkJLyogQlNEMjkgaW1wbGllcyBBTllCU0QgKi8KLSNp Zm5kZWYgQU5ZQlNECi0jZGVmaW5lIEFOWUJTRAotI2VuZGlmIC8qIEFOWUJTRCAqLwotI2VuZGlm IC8qIEJTRDI5ICovCi0KLSNpZmRlZiBBVFRTVgkJCQkvKiBBVFRTViBpbXBsaWVzIFVOSVggKi8K LSNpZm5kZWYgVU5JWAotI2RlZmluZSBVTklYCi0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8q IEFUVFNWICovCi0KLSNpZmRlZiBBTllCU0QJCQkJLyogQU5ZQlNEIGltcGxpZXMgVU5JWCAqLwot I2lmbmRlZiBVTklYCi0jZGVmaW5lIFVOSVgKLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyog QU5ZQlNEICovCi0KLSNpZmRlZiBQT1NJWAkJCQkvKiBQT1NJWCBpbXBsaWVzIFVOSVggKi8KLSNp Zm5kZWYgVU5JWAotI2RlZmluZSBVTklYCi0jZW5kaWYgLyogVU5JWCAqLwotI2lmbmRlZiBESVJF TlQJCQkJLyogYW5kIERJUkVOVCwgaS5lLiA8ZGlyZW50Lmg+ICovCi0jaWZuZGVmIFNESVJFTlQK LSNkZWZpbmUgRElSRU5UCi0jZW5kaWYgLyogU0RJUkVOVCAqLwotI2VuZGlmIC8qIERJUkVOVCAq LwotI2lmbmRlZiBOT0ZJTEVICQkJCS8qIFBPU0lYIGRvZXNuJ3QgdXNlIDxzeXMvZmlsZS5oPiAq LwotI2RlZmluZSBOT0ZJTEVICi0jZW5kaWYgLyogTk9GSUxFSCAqLwotI2VuZGlmIC8qIFBPU0lY ICovCi0KLSNpZmRlZiBWNwotI2lmbmRlZiBVTklYCi0jZGVmaW5lIFVOSVgKLSNlbmRpZiAvKiBV TklYICovCi0jZW5kaWYgLyogVjcgKi8KLQotI2lmZGVmIENPSEVSRU5UCi0jaWZuZGVmIFVOSVgK LSNkZWZpbmUgVU5JWAotI2VuZGlmIC8qIFVOSVggKi8KLSNpZmRlZiBDT01NRU5UCi0jaWZuZGVm IE5PQ1VSU0VTCi0jZGVmaW5lIE5PQ1VSU0VTCi0jZW5kaWYgLyogTk9DVVJTRVMgKi8KLSNlbmRp ZiAvKiBDT01NRU5UICovCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLQotI2lmZGVmIE1JTklYCi0j aWZuZGVmIFVOSVgKLSNkZWZpbmUgVU5JWAotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBN SU5JWCAqLwotLyoKLSAgVGhlIHN5bWJvbCBTVk9SUE9TSVggaXMgZGVmaW5lZCBmb3IgYm90aCBB VCZUIGFuZCBQT1NJWCBjb21waWxhdGlvbnMKLSAgdG8gbWFrZSBpdCBlYXNpZXIgdG8gc2VsZWN0 IGl0ZW1zIHRoYXQgU3lzdGVtIFYgYW5kIFBPU0lYIGhhdmUgaW4gY29tbW9uLAotICBidXQgd2hp Y2ggQlNELCBWNywgZXRjLCBkbyBub3QgaGF2ZS4KLSovCi0jaWZkZWYgQVRUU1YKLSNpZm5kZWYg U1ZPUlBPU0lYCi0jZGVmaW5lIFNWT1JQT1NJWAotI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwotI2Vu ZGlmIC8qIEFUVFNWICovCi0KLSNpZmRlZiBQT1NJWAotI2lmbmRlZiBTVk9SUE9TSVgKLSNkZWZp bmUgU1ZPUlBPU0lYCi0jZW5kaWYgLyogU1ZPUlBPU0lYICovCi0jZW5kaWYgLyogUE9TSVggKi8K LQotLyoKLSAgVGhlIHN5bWJvbCBTVlI0T1JQT1NJWCBpcyBkZWZpbmVkIGZvciBib3RoIEFUJlQg U3lzdGVtIFYgUjQgYW5kIFBPU0lYCi0gIGNvbXBpbGF0aW9ucyB0byBtYWtlIGl0IGVhc2llciB0 byBzZWxlY3QgaXRlbXMgdGhhdCBTeXN0ZW0gViBSNCBhbmQgUE9TSVgKLSAgaGF2ZSBpbiBjb21t b24sIGJ1dCB3aGljaCBCU0QsIFY3LCBhbmQgU3lzdGVtIFYgUjMgYW5kIGVhcmxpZXIsIGV0Yywg ZG8KLSAgbm90IGhhdmUuCi0qLwotI2lmZGVmIFBPU0lYCi0jaWZuZGVmIFNWUjRPUlBPU0lYCi0j ZGVmaW5lIFNWUjRPUlBPU0lYCi0jZW5kaWYgLyogU1ZSNE9SUE9TSVggKi8KLSNlbmRpZiAvKiBQ T1NJWCAqLwotI2lmZGVmIFNWUjQKLSNpZm5kZWYgU1ZSNE9SUE9TSVgKLSNkZWZpbmUgU1ZSNE9S UE9TSVgKLSNlbmRpZiAvKiBTVlI0T1JQT1NJWCAqLwotI2VuZGlmIC8qIFNWUjQgKi8KLQotLyoK LSAgVGhlIHN5bWJvbCBCU0Q0NE9SUE9TSVggaXMgZGVmaW5lZCBmb3IgYm90aCA0LjRCU0QgYW5k IFBPU0lYIGNvbXBpbGF0aW9ucwotICB0byBtYWtlIGl0IGVhc2llciB0byBzZWxlY3QgaXRlbXMg dGhhdCA0LjRCU0QgYW5kIFBPU0lYIGhhdmUgaW4gY29tbW9uLAotICBidXQgd2hpY2ggU3lzdGVt IFYsIEJTRCwgVjcsIGV0YywgZG8gbm90IGhhdmUuCi0qLwotI2lmZGVmIEJTRDQ0Ci0jaWZuZGVm IEJTRDQ0T1JQT1NJWAotI2RlZmluZSBCU0Q0NE9SUE9TSVgKLSNlbmRpZiAvKiBCU0Q0NE9SUE9T SVggKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotCi0jaWZkZWYgUE9TSVgKLSNpZm5kZWYgQlNENDRP UlBPU0lYCi0jZGVmaW5lIEJTRDQ0T1JQT1NJWAotI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLwot I2VuZGlmIC8qIFBPU0lYICovCi0KLSNpZmRlZiBVTklYCQkJCS8qIEZvciBpdGVtcyBjb21tb24g dG8gT1MvMiBhbmQgVU5JWCAqLwotI2lmbmRlZiBPUzJPUlVOSVgKLSNkZWZpbmUgT1MyT1JVTklY Ci0jZW5kaWYgLyogT1MyT1JVTklYICovCi0jZW5kaWYgLyogVU5JWCAqLwotCi0jaWZkZWYgVU5J WAkJCQkvKiBGb3IgaXRlbXMgY29tbW9uIHRvIFZNUyBhbmQgVU5JWCAqLwotI2RlZmluZSBWTVNP UlVOSVgKLSNlbHNlCi0jaWZkZWYgVk1TCi0jZGVmaW5lIFZNU09SVU5JWAotI2lmbmRlZiBPUzJP UlZNUwotI2RlZmluZSBPUzJPUlZNUwotI2VuZGlmIC8qIE9TMk9SVk1TICovCi0jZW5kaWYgLyog Vk1TICovCi0jZW5kaWYgLyogVU5JWCAqLwotCi0jaWZuZGVmIFVOSVhPUk9TSwkJCS8qIFVOSVgg b3IgT1MtOSAob3IgT1MtOTAwMCkgKi8KLSNpZmRlZiBVTklYCi0jZGVmaW5lIFVOSVhPUk9TSwot I2Vsc2UKLSNpZmRlZiBPU0sKLSNkZWZpbmUgVU5JWE9ST1NLCi0jZW5kaWYgLyogT1NLICovCi0j ZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIFVOSVhPUk9TSyAqLwotCi0jaWZuZGVmIE9TS09S VU5JWAotI2lmZGVmIFVOSVhPUk9TSwotI2RlZmluZSBPU0tPUlVOSVgKLSNlbmRpZiAvKiBVTklY T1JPU0sgKi8KLSNlbmRpZiAvKiBPU0tPUlVOSVggKi8KLQotI2lmZGVmIE9TMgotI2RlZmluZSBD S19BTlNJQwkJIC8qIE9TLzIgc3VwcG9ydHMgQU5TSUMgYW5kIG1vcmUgZXh0ZW5zaW9ucyAqLwot I2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgT1NGNTAJCQkgICAvKiBOZXdlciBPU0YvMSB2ZXJz aW9ucyBpbXBseSBvbGRlciBvbmVzICovCi0jaWZuZGVmIE9TRjQwCi0jZGVmaW5lIE9TRjQwCi0j ZW5kaWYgLyogT1NGNDAgKi8KLSNlbmRpZiAvKiBPU0Y1MCAqLwotCi0jaWZkZWYgT1NGNDAKLSNp Zm5kZWYgT1NGMzIKLSNkZWZpbmUgT1NGMzIKLSNlbmRpZiAvKiBPU0YzMiAqLwotI2VuZGlmIC8q IE9TRjQwICovCi0KLSNpZmRlZiBPU0YzMgotI2lmbmRlZiBPU0YzMAotI2RlZmluZSBPU0YzMAot I2VuZGlmIC8qIE9TRjMwICovCi0jZW5kaWYgLyogT1NGMzIgKi8KLQotI2lmZGVmIE9TRjMwCi0j aWZuZGVmIE9TRjIwCi0jZGVmaW5lIE9TRjIwCi0jZW5kaWYgLyogT1NGMjAgKi8KLSNlbmRpZiAv KiBPU0YzMCAqLwotCi0jaWZkZWYgT1NGMjAKLSNpZm5kZWYgT1NGMTAKLSNkZWZpbmUgT1NGMTAK LSNlbmRpZiAvKiBPU0YxMCAqLwotI2VuZGlmIC8qIE9TRjIwICovCi0KLSNpZmRlZiBfX0RFQ0MJ CQkJLyogRm9yIERFQyBBbHBoYSBWTVMgb3IgT1NGLzEgKi8KLSNpZm5kZWYgQ0tfQU5TSUMKLSNk ZWZpbmUgQ0tfQU5TSUMJCQkvKiBFdmVuIHdpdGggL3N0YW5kPXZheGMsIG5lZWQgYW5zaSAqLwot I2VuZGlmIC8qIENLQU5TSUMgKi8KLSNpZm5kZWYgU0lHX1YKLSNkZWZpbmUgU0lHX1YJCQkJLyog YW5kIHNpZ25hbCB0eXBlIGlzIFZPSUQgKi8KLSNlbmRpZiAvKiBTSUdfViAqLwotI2lmbmRlZiBD S19BTlNJTElCUwotI2RlZmluZSBDS19BTlNJTElCUwkJCS8qIChNYXJ0aW4gWmluc2VyLCBGZWIg MTk5NSkgKi8KLSNlbmRpZiAvKiBDS19BTlNJTElCUyAqLwotI2lmbmRlZiBfUE9TSVhfQ19TT1VS Q0UKLSNkZWZpbmUgX1BPU0lYX0NfU09VUkNFIDEKLSNlbmRpZiAvKiBfUE9TSVhfQ19TT1VSQ0Ug Ki8KLSNlbmRpZgkvKiBfX0RFQ0MgKi8KLQotI2lmZGVmIFZNUwotI2lmZGVmIF9faWE2NAkJCQkv KiBWTVMgb24gSXRhbml1bSAqLwotI2lmbmRlZiBWTVNJNjQKLSNkZWZpbmUgVk1TSTY0Ci0jZW5k aWYJLyogVk1TSTY0ICovCi0jZW5kaWYJLyogX19pYTY0ICovCi0jaWZuZGVmIFZNUzY0QklUCQkJ LyogNjQtYml0IFZNUyBvbiBJdGFuaXVtIG9yIEFscGhhICovCi0jaWZkZWYgX19pYTY0Ci0jZGVm aW5lIFZNUzY0QklUCi0jZWxzZQotI2lmZGVmIF9fQUxQSEEKLSNkZWZpbmUgVk1TNjRCSVQKLSNl bmRpZgkvKiBfX2lhNjQgKi8KLSNlbmRpZgkvKiBfX0FMUEhBICovCi0jZW5kaWYJLyogVk1TNjRC SVQgKi8KLSNlbmRpZgkvKiBWTVMgKi8KLQotI2lmZGVmIGFwb2xsbwkJCQkvKiBNYXkgYmUgQU5T SS1DLCBjaGVjayBmdXJ0aGVyICovCi0jaWZkZWYgX19TVERDUFBfXwotI2RlZmluZSBDS19BTlNJ QwkJCS8qIFllcywgdGhpcyBpcyByZWFsIEFOU0ktQyAqLwotI2RlZmluZSBTSUdfVgotI2Vsc2UK LSNkZWZpbmUgTk9BTlNJCQkJCS8qIE5vcGUsIG5vdCBBTlNJICovCi0jdW5kZWYgX19TVERDX18J CQkJLyogRXZlbiB0aG91Z2ggaXQgc2F5IGl0IGlzISAqLwotI2RlZmluZSBTSUdfSQotI2VuZGlm IC8qIF9fU1REQ1BQX18gKi8KLSNlbmRpZiAvKiBhcG9sbG8gKi8KLQotI2lmZGVmIFBPU0lYCQkJ CS8qIC1EUE9TSVggb24gY2MgY29tbWFuZCBsaW5lICovCi0jaWZuZGVmIF9QT1NJWF9TT1VSQ0UJ CQkvKiBJbXBsaWVzIF9QT1NJWF9TT1VSQ0UgKi8KLSNkZWZpbmUgX1BPU0lYX1NPVVJDRQotI2Vu ZGlmIC8qIF9QT1NJWF9TT1VSQ0UgKi8KLSNlbmRpZiAvKiBQT1NJWCAqLwotCi0vKgotICBBTlNJ IEM/ICBUaGF0IGlzLCBkbyB3ZSBoYXZlIGZ1bmN0aW9uIHByb3RvdHlwZXMsIG5ldy1zdHlsZQot ICBmdW5jdGlvbiBkZWNsYXJhdGlvbnMsIGFuZCBwYXJhbWV0ZXIgdHlwZSBjaGVja2luZyBhbmQg Y29lcmNpb24/Ci0qLwotI2lmZGVmIE1BQwkJCQkvKiBNUFcgQyBpcyBBTlNJICovCi0jaWZuZGVm IE5PQU5TSQotI2lmbmRlZiBDS19BTlNJQwotI2RlZmluZSBDS19BTlNJQwotI2VuZGlmIC8qIENL X0FOU0lDICovCi0jZW5kaWYgLyogTk9BTlNJICovCi0jZW5kaWYgLyogTUFDICovCi0KLSNpZmRl ZiBTVFJBVFVTCQkJCS8qIFN0cmF0dXMgVk9TICovCi0jaWZuZGVmIENLX0FOU0lDCi0jZGVmaW5l IENLX0FOU0lDCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSNpZm5kZWYgTk9TVEFUCi0jZGVmaW5l IE5PU1RBVAotI2VuZGlmIC8qIE5PU1RBVCAqLwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLQotI2lm bmRlZiBOT0FOU0kKLSNpZmRlZiBfX1NURENfXwkJCQkvKiBfX1NURENfXyBtZWFucyBBTlNJIEMg Ki8KLSNpZm5kZWYgQ0tfQU5TSUMKLSNkZWZpbmUgQ0tfQU5TSUMKLSNlbmRpZiAvKiBDS19BTlNJ QyAqLwotI2VuZGlmIC8qIF9fU1REQ19fICovCi0jZW5kaWYgLyogTk9BTlNJICovCi0vKgotICBf UFJPVE9UWVAoKSBpcyB1c2VkIGZvciBmb3J3YXJkIGRlY2xhcmF0aW9ucyBvZiBmdW5jdGlvbnMg c28gd2UgY2FuIGhhdmUKLSAgcGFyYW1ldGVyIGFuZCByZXR1cm4gdmFsdWUgdHlwZSBjaGVja2lu ZyBpZiB0aGUgY29tcGlsZXIgb2ZmZXJzIGl0LgotICBfX1NURENfXyBzaG91bGQgYmUgZGVmaW5l ZCBieSB0aGUgY29tcGlsZXIgb25seSBpZiBmdW5jdGlvbiBwcm90b3R5cGVzIGFyZQotICBhbGxv d2VkLiAgT3RoZXJ3aXNlLCB3ZSBnZXQgb2xkLXN0eWxlIGZvcndhcmQgZGVjbGFyYXRpb25zLiAg T3VyIG93biBwcml2YXRlCi0gIENLX0FOU0lDIHN5bWJvbCB0ZWxscyB3aGV0aGVyIHdlIHVzZSBB TlNJIEMgcHJvdG90eXBlcy4gIFRvIGZvcmNlIHVzZSBvZgotICBBTlNJIHByb3RvdHlwZXMsIGlu Y2x1ZGUgLURDS19BTlNJQyBvbiB0aGUgY2MgY29tbWFuZCBsaW5lLiAgVG8gZGlzYWJsZSB0aGUK LSAgdXNlIG9mIEFOU0kgcHJvdG90eXBlcywgaW5jbHVkZSAtRE5PQU5TSS4KLSovCi0jaWZkZWYg Q0tfQU5TSUMKLSNkZWZpbmUgX1BST1RPVFlQKCBmdW5jLCBwYXJtcyApIGZ1bmMgcGFybXMKLSNl bHNlIC8qIE5vdCBBTlNJIEMgKi8KLSNkZWZpbmUgX1BST1RPVFlQKCBmdW5jLCBwYXJtcyApIGZ1 bmMoKQotI2VuZGlmIC8qIENLX0FOU0lDICovCi0KLSNpZm5kZWYgT1MyCi0jaWZkZWYgTk9MT0dJ TgkJCQkvKiBOT0xPR0lOIGltcGxpZXMgTk9JS1NEICovCi0jaWZuZGVmIE5PSUtTRAotI2RlZmlu ZSBOT0lLU0QKLSNlbmRpZiAvKiBOT0lLU0QgKi8KLSNlbmRpZiAvKiBOT0xPR0lOICovCi0jZW5k aWYgLyogT1MyICovCi0KLSNpZmRlZiBOT0lLU0QJCQkJLyogSW50ZXJuZXQgS2VybWl0IFNlcnZp Y2UgRGFlbW9uICovCi0jaWZuZGVmIE9TMgotI2lmbmRlZiBOT1BSSU5URlNVQlNUCi0jZGVmaW5l IE5PUFJJTlRGU1VCU1QKLSNlbmRpZiAvKiBOT1BSSU5URlNVQlNUICovCi0jZW5kaWYgLyogT1My ICovCi0jaWZuZGVmIE5PTE9HSU4KLSNkZWZpbmUgTk9MT0dJTgotI2VuZGlmIC8qIE5PTE9HSU4g Ki8KLSNpZm5kZWYgTk9TWVNMT0cKLSNkZWZpbmUgTk9TWVNMT0cKLSNlbmRpZiAvKiBOT1NZU0xP RyAqLwotI2lmbmRlZiBOT1dUTVAKLSNkZWZpbmUgTk9XVE1QCi0jZW5kaWYgLyogTk9XVE1QICov Ci0jZWxzZQotI2lmbmRlZiBJS1NECi0jaWZkZWYgT1MyT1JVTklYCQkJLyogUGxhdGZvcm1zIHdo ZXJlIElLU0QgaXMgc3VwcG9ydGVkICovCi0jZGVmaW5lIElLU0QKLSNlbmRpZiAvKiBPUzJPUlVO SVggKi8KLSNlbmRpZiAvKiBJS1NEICovCi0jZW5kaWYgLyogTk9JS1NEICovCi0KLSNpZmRlZiBJ S1NECQkJCS8qIElLU0Qgb3B0aW9ucy4uLiAqLwotI2lmbmRlZiBJS1NEQ09ORgkJCS8qIElLU0Qg Y29uZmlndXJhdGlvbiBmaWxlICovCi0jaWZkZWYgVU5JWAotI2RlZmluZSBJS1NEQ09ORiAiL2V0 Yy9pa3NkLmNvbmYiCi0jZWxzZQotI2lmZGVmIE9TMgotI2RlZmluZSBJS1NEQ09ORiAiaWtzZC5r c2MiCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIElLU0RD T05GICovCi0jaWZuZGVmIE5PSUtTREIKLSNpZm5kZWYgSUtTREIJCQkJLyogSUtTRCBkYXRhYmFz ZSAqLwotI2lmZGVmIFVOSVgKLSNkZWZpbmUgSUtTREIKLSNkZWZpbmUgSUtfTENLVFJJRVMgMTYJ CQkvKiBIb3cgbWFueSB0aW1lcyB0byB0cnkgdG8gZ2V0IGxvY2sgKi8KLSNkZWZpbmUgSUtfTENL U0xFRVAgMQkJCS8qIEhvdyBsb25nIHRvIHNsZWVwIGJldHdlZW4gdHJpZXMgKi8KLSNkZWZpbmUg SUtfTE9DS0ZJTEUgImlrc2QubGNrIgkJLyogRGF0YWJhc2UgbG9ja2ZpbGVuYW1lICovCi0jZGVm aW5lIElLX0RCQVNFRElSICIvdmFyL2xvZy8iCQkvKiBEYXRhYmFzZSBkaXJlY3RvcnkgKi8KLSNk ZWZpbmUgSUtfREJBU0VGSUwgImlrc2QuZGIiCQkvKiBEYXRhYmFzZSBmaWxlbmFtZSAqLwotI2Vs c2UgLyogVU5JWCAqLwotI2lmZGVmIE9TMgotI2RlZmluZSBJS1NEQgotI2lmbmRlZiBOT0ZUUlVO Q0FURQkJCS8qIGZ0cnVuY2F0ZSgpIG5vdCBhdmFpbGFibGUgKi8KLSNkZWZpbmUgTk9GVFJVTkNB VEUKLSNlbmRpZiAvKiBOT0ZUUlVOQ0FURSAqLwotI2RlZmluZSBJS19MQ0tUUklFUyAxNgkJCS8q IEhvdyBtYW55IHRpbWVzIHRvIHRyeSB0byBnZXQgbG9jayAqLwotI2RlZmluZSBJS19MQ0tTTEVF UCAxCQkJLyogSG93IGxvbmcgdG8gc2xlZXAgYmV0d2VlbiB0cmllcyAqLwotI2RlZmluZSBJS19M T0NLRklMRSAiaWtzZC5sY2siCQkvKiBEQiBsb2NrZmlsZW5hbWUgKGluIHN5c3RlbXJvb3QpICov Ci0jZGVmaW5lIElLX0RCQVNFRklMICJpa3NkLmRiIgkJLyogRGF0YWJhc2UgZmlsZW5hbWUgKi8K LSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogSUtTREIgKi8K LSNlbmRpZiAvKiBOT0lLU0RCICovCi0jZW5kaWYgLyogSUtTRCAqLwotLyoKLSAgU3Vic3RpdHV0 ZXMgZm9yIHByaW50ZigpIGFuZCBmcmllbmRzIHVzZWQgaW4gSUtTIHRvIGNvbXBlbnNhdGUgZm9y Ci0gIGxhY2sgb2YgYSB0ZXJtaW5hbCBkcml2ZXIsIG1haW5seSB0byBzdXBwbHkgQ1IgYWZ0ZXIg TEYuCi0qLwotI2lmbmRlZiBOT1BSSU5URlNVQlNUCi0jaWZkZWYgTUFDCi0vKgotICogVGhlIE1B QyBkb2Vzbid0IHVzZSBzdGFuZGFyZCBzdGRpbyByb3V0aW5lcy4KLSAqLwotI3VuZGVmIGdldGNo YXIKLSNkZWZpbmUgZ2V0Y2hhcigpICAgbWFjX2dldGNoYXIoKQotI3VuZGVmIHB1dGNoYXIKLSNk ZWZpbmUgcHV0Y2hhcihjKQltYWNfcHV0Y2hhcihjKQotI2RlZmluZSBwcmludGYJCW1hY19wcmlu dGYKLSNkZWZpbmUgcGVycm9yCQltYWNfcGVycm9yCi0jZGVmaW5lIHB1dHMJCW1hY19wdXRzCi1l eHRlcm4gaW50IG1hY19wdXRjaGFyIChpbnQgYyk7Ci1leHRlcm4gaW50IG1hY19wdXRzIChjb25z dCBjaGFyICpzdHJpbmcpOwotZXh0ZXJuIGludCBtYWNfcHJpbnRmKGNvbnN0IGNoYXIgKiwgLi4u KTsKLWV4dGVybiBpbnQgbWFjX2dldGNoYXIgKHZvaWQpOwotI2VuZGlmIC8qIE1BQyAqLwotCi0j aWZkZWYgT1MyCi0jZGVmaW5lIHByaW50ZiBWc2NybnByaW50ZgotI2RlZmluZSBmcHJpbnRmIFZz Y3JuZnByaW50ZgotZXh0ZXJuIGludCBWc2NybnByaW50Zihjb25zdCBjaGFyICosIC4uLik7Ci1l eHRlcm4gaW50IFZzY3JucHJpbnR3KGNvbnN0IGNoYXIgKiwgLi4uKTsKLWV4dGVybiBpbnQgVnNj cm5mcHJpbnRmKEZJTEUgKiwgY29uc3QgY2hhciAqLCAuLi4pOwotI2lmZGVmIHB1dGNoYXIKLSN1 bmRlZiBwdXRjaGFyCi0jZW5kaWYgLyogcHV0Y2hhciAqLwotI2RlZmluZSBwdXRjaGFyKHgpIFZz Y3JucHJpbnRmKCIlYyIseCkKLSNkZWZpbmUgcGVycm9yKHgpICBWc2NybnBlcnJvcih4KQotI2Vu ZGlmIC8qIE9TMiAqLwotCi0jaWZuZGVmIENLV0FSVF9DCi0jaWZkZWYgVU5JWAotI2lmbmRlZiBw ZHAxMQotI2lmbmRlZiBDS1hQUklOVEYKLSNkZWZpbmUgQ0tYUFJJTlRGCi0jZW5kaWYgLyogQ0tY UFJJTlRGICovCi0jZW5kaWYgLyogcGRwMTEgKi8KLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYg LyogQ0tXQVJUX0MgKi8KLSNlbmRpZiAvKiBOT1BSSU5URlNVQlNUICovCi0KLSNpZmRlZiBDS1hQ UklOVEYKLSNkZWZpbmUgcHJpbnRmIGNreHByaW50ZgotI2RlZmluZSBmcHJpbnRmIGNreGZwcmlu dGYKLSNpZmRlZiBDS19BTlNJQwotX1BST1RPVFlQKGludCBja3hwcmludGYsKGNvbnN0IGNoYXIg KiwgLi4uKSk7Ci0jaWZkZWYgTkVYVAotX1BST1RPVFlQKHZvaWQgY2t4cGVycm9yLChjb25zdCBj aGFyICopKTsKLSNlbHNlCi0jaWZkZWYgQ0tfU0NPVjUKLV9QUk9UT1RZUCh2b2lkIGNreHBlcnJv ciwoY29uc3QgY2hhciAqKSk7Ci0jZWxzZQotX1BST1RPVFlQKGludCBja3hwZXJyb3IsKGNvbnN0 IGNoYXIgKikpOwotI2VuZGlmIC8qIENLX1NDT1Y1ICovCi0jZW5kaWYgLyogTkVYVCAqLwotX1BS T1RPVFlQKGludCBja3hmcHJpbnRmLChGSUxFICosIGNvbnN0IGNoYXIgKiwgLi4uKSk7Ci0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLSNpZmRlZiBwdXRjaGFyCi0jdW5kZWYgcHV0Y2hhcgotI2VuZGlm IC8qIHB1dGNoYXIgKi8KLSNkZWZpbmUgcHV0Y2hhcih4KSBja3hwcmludGYoIiVjIix4KQotI2lm ZGVmIHB1dGMKLSN1bmRlZiBwdXRjCi0jZW5kaWYgLyogcHV0YyAqLwotI2RlZmluZSBwdXRjKGEs YikgY2t4ZnByaW50ZihiLCIlYyIsYSkKLSNkZWZpbmUgcGVycm9yKHgpICBja3hwZXJyb3IoeCkK LSNlbmRpZiAvKiBDS1hQUklOVEYgKi8KLQotLyoKLSAgQWx0b3Mtc3BlY2lmaWMgaXRlbXM6IDQ4 NiwgNTg2LCA5ODYgbW9kZWxzLi4uCi0qLwotI2lmZGVmIEE5ODYKLSNkZWZpbmUgTV9WT0lECi0j ZGVmaW5lIHZvaWQgaW50Ci0jZGVmaW5lIENIQVIgY2hhcgotI2RlZmluZSBTSUdfSQotI2VuZGlm IC8qIEE5ODYgKi8KLQotLyogU2lnbmFsIGhhbmRsaW5nICovCi0KLSNpZmRlZiBRTlgKLSNpZm5k ZWYgQ0tfUE9TSVhfU0lHCi0jZGVmaW5lIENLX1BPU0lYX1NJRwotI2VuZGlmIC8qIENLX1BPU0lY X1NJRyAqLwotI2VuZGlmIC8qIFFOWCAqLwotCi0vKiAKLSAgdm9pZCB0eXBlLCBub3JtYWxseSBh dmFpbGFibGUgb25seSBpbiBBTlNJIGNvbXBpbGVycy4KLSAgVGhlIEhQLVVYIGV4Y2VwdGlvbiAo Zm9yIGl0cyAiYnVuZGxlZCIgbm9uLUFOU0kgQyBjb21waWxlcikKLSAgaXMga25vd24gdG8gYmUg dmFsaWQgYmFjayB0byBIUC1VWCA2LjUuCi0gIEFkanVzdG1lbnRzIG1pZ2h0IGJlIG5lZWRlZCBm b3IgZWFybGllciBIUC1VWCB2ZXJzaW9ucy4KLSovCi0jaWZuZGVmIFZPSUQJCQkJLyogVXNlZCB0 aHJvdWdob3V0IGFsbCBDLUtlcm1pdCAqLwotI2lmZGVmIENLX0FOU0lDCQkJCS8qIG1vZHVsZXMu Li4gKi8KLSNkZWZpbmUgVk9JRCB2b2lkCi0jZWxzZQotI2lmZGVmIEhQVVgKLSNkZWZpbmUgVk9J RCB2b2lkCi0jZWxzZQotI2RlZmluZSBWT0lEIGludAotI2VuZGlmIC8qIEhQVVggKi8KLSNlbmRp ZiAvKiBDS19BTlNJQyAqLwotI2VuZGlmIC8qIFZPSUQgKi8KLS8qCi0gIEV4YWN0bHkgdGhlIHNh bWUgYXMgVk9JRCBidXQgZm9yIHVzZSBpbiBjb250ZXh0cyB3aGVyZSB0aGUgVk9JRCBzeW1ib2wK LSAgY29uZmxpY3RzIHNvbWUgaGVhZGVyLWZpbGUgZGVmaW5pdGlvbi4gIFRoaXMgaXMgbmVlZGVk IGZvciB0aGUgc2VjdGlvbgotICBvZiBja3V1c3guYyB0aGF0IHByb3ZpZGVzIEMtS2VybWl0J3Mg Y3Vyc2VzIGludGVyZmFjZSwgcm91Z2hseSB0aGUKLSAgc2Vjb25kIGhhbGYgb2YgY2t1dXN4LmMu Ci0qLwotI2lmbmRlZiBDS1ZPSUQKLSNpZmRlZiBDS19BTlNJQwotI2RlZmluZSBDS1ZPSUQgdm9p ZAotI2Vsc2UKLSNpZmRlZiBIUFVYCi0jZGVmaW5lIENLVk9JRCB2b2lkCi0jZWxzZQotI2RlZmlu ZSBDS1ZPSUQgaW50Ci0jZW5kaWYgLyogSFBVWCAqLwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0j ZW5kaWYgLyogQ0tWT0lEICovCi0KLS8qIENvbnN0IHR5cGUgKi8KLQotI2lmbmRlZiBDT05TVAot I2lmZGVmIE9TSwotI2lmZGVmIF9VQ0MKLSNkZWZpbmUgQ09OU1QgY29uc3QKLSNlbHNlCi0jZGVm aW5lIENPTlNUCi0jZW5kaWYgLyogX1VDQyAqLwotI2Vsc2UgIC8qICFPU0sgKi8KLSNpZmRlZiBD S19TQ08zMlY0Ci0jZGVmaW5lIENPTlNUCi0jZWxzZQotI2lmZGVmIENLX0FOU0lDCi0jZGVmaW5l IENPTlNUIGNvbnN0Ci0jZWxzZQotI2RlZmluZSBDT05TVAotI2VuZGlmIC8qIENLX0FOU0lDICov Ci0jZW5kaWYgLyogQ0tfU0NPMzJWNCAqLwotI2VuZGlmIC8qIE9TSyAqLwotI2VuZGlmIC8qIENP TlNUICovCi0KLS8qIFNpZ25hbCB0eXBlICovCi0KLSNpZm5kZWYgU0lHX1YJCQkJLyogc2lnbmFs KCkgdHlwZSwgaWYgbm90IGRlZidkIHlldCAqLwotI2lmbmRlZiBTSUdfSQotI2lmZGVmIE9TMgot I2RlZmluZSBTSUdfVgotI2Vsc2UKLSNpZmRlZiBQT1NJWAotI2RlZmluZSBTSUdfVgotI2Vsc2UK LSNpZmRlZiBTVlIzCQkJCS8qIFN5c3RlbSBWIFIzIGFuZCBsYXRlciAqLwotI2RlZmluZSBTSUdf VgotI2Vsc2UKLSNpZmRlZiBTVU5PUzQJCQkJLyogU1VOT1MgViA0LjAgYW5kIGxhdGVyICovCi0j aWZuZGVmIHN1bjM4NgotI2RlZmluZSBTSUdfVgotI2Vsc2UKLSNkZWZpbmUgU0lHX0kKLSNlbmRp ZiAvKiBzdW4zODYgKi8KLSNlbHNlCi0jaWZkZWYgTkVYVAkJCQkvKiBOZVhUICovCi0jZGVmaW5l IFNJR19WCi0jZWxzZQotI2lmZGVmIEFJWDM3MAotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2RlZmlu ZSBTSUdfVgotI2RlZmluZSBTSUdUWVAgX19TSUdWT0lECQkvKiBBSVgzNzAgKi8KLSNlbHNlCi0j aWZkZWYgU1RSQVRVUwkJCQkvKiBTdHJhdHVzIFZPUyAqLwotI2RlZmluZSBTSUdfVgotI2Vsc2UK LSNpZmRlZiBNQUMKLSNkZWZpbmUgU0lHVFlQIGxvbmcKLSNkZWZpbmUgU0lHX0kKLSNpZm5kZWYg TVBXMzMKLSNkZWZpbmUgU0lHX0lHTiAwCi0jZW5kaWYgLyogTVBXMzMgKi8KLSNkZWZpbmUgU0lH QUxSTSAxCi0jaWZuZGVmIE1QVzMzCi0jZGVmaW5lIFNJR0lOVCAgMgotI2VuZGlmIC8qIE1QVzMz ICovCi0jZWxzZSAvKiBFdmVyeXRoaW5nIGVsc2UgKi8KLSNkZWZpbmUgU0lHX0kKLSNlbmRpZiAv KiBNQUMgKi8KLSNlbmRpZiAvKiBTVFJBVFVTICovCi0jZW5kaWYgLyogQUlYMzcwICovCi0jZW5k aWYgLyogTkVYVCAqLwotI2VuZGlmIC8qIFNVTk9TNCAqLwotI2VuZGlmIC8qIFNWUjMgKi8KLSNl bmRpZiAvKiBQT1NJWCAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFNJR19JICovCi0j ZW5kaWYgLyogU0lHX1YgKi8KLQotI2lmZGVmIFNJR19JCi0jZGVmaW5lIFNJR1JFVFVSTiByZXR1 cm4oMCkKLSNpZm5kZWYgU0lHVFlQCi0jZGVmaW5lIFNJR1RZUCBpbnQKLSNlbmRpZiAvKiBTSUdU WVAgKi8KLSNlbmRpZiAvKiBTSUdfSSAqLwotCi0jaWZkZWYgU0lHX1YKLSNkZWZpbmUgU0lHUkVU VVJOIHJldHVybgotI2lmbmRlZiBTSUdUWVAKLSNkZWZpbmUgU0lHVFlQIHZvaWQKLSNlbmRpZiAv KiBTSUdUWVAgKi8KLSNlbmRpZiAvKiBTSUdfViAqLwotCi0jaWZkZWYgTlQKLSNpZm5kZWYgU0lH VFlQCi0jZGVmaW5lIFNJR1RZUCB2b2lkCi0jZW5kaWYgLyogU0lHVFlQICovCi0jZW5kaWYgLyog TlQgKi8KLQotI2lmbmRlZiBTSUdUWVAKLSNkZWZpbmUgU0lHVFlQIGludAotI2VuZGlmIC8qIFNJ R1RZUCAqLwotCi0jaWZuZGVmIFNJR1JFVFVSTgotI2RlZmluZSBTSUdSRVRVUk4gcmV0dXJuKDAp Ci0jZW5kaWYgLyogU0lHUkVUVVJOICovCi0KLSNpZmRlZiBDS05UU0lHCi0vKiBUaGlzIGRvZXMg bm90IHdvcmssIHNvIGRvbid0IHVzZSBpdC4gKi8KLSNkZWZpbmUgc2lnbmFsIGNrbnRzaWduYWwK LVNJR1RZUCAoKmNrbnRzaWduYWwoaW50IHR5cGUsIFNJR1RZUCAoKikoaW50KSkpKGludCk7Ci0j ZW5kaWYgLyogQ0tOVFNJRyAqLwotCi0vKiBXZSB3YW50IGFsbCBjaGFyYWN0ZXJzIHRvIGJlIHVu c2lnbmVkIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyBpdCAqLwotCi0jaWZkZWYgS1VJCi0jaWZk ZWYgQ0hBUgotI3VuZGVmIENIQVIKLSNlbmRpZiAvKiBDSEFSICovCi0jZGVmaW5lIENIQVIgdW5z aWduZWQgY2hhcgotI2Vsc2UKLSNpZmRlZiBQUk9WWDEKLXR5cGVkZWYgY2hhciBDSEFSOwotLyog dHlwZWRlZiBsb25nIExPTkc7ICovCi10eXBlZGVmIGludCB2b2lkOwotI2Vsc2UKLSNpZmRlZiBN SU5JWAotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIENIQVI7Ci0jZWxzZQotI2lmZGVmIFY3Ci10eXBl ZGVmIGNoYXIgQ0hBUjsKLSNlbHNlCi0jaWZkZWYgQzcwCi10eXBlZGVmIGNoYXIgQ0hBUjsKLS8q IHR5cGVkZWYgbG9uZyBMT05HOyAqLwotI2Vsc2UKLSNpZmRlZiBCU0QyOQotdHlwZWRlZiBjaGFy IENIQVI7Ci0vKiB0eXBlZGVmIGxvbmcgTE9ORzsgKi8KLSNlbHNlCi0jaWZkZWYgZGF0YWdlbmVy YWwKLSNkZWZpbmUgQ0hBUiB1bnNpZ25lZCBjaGFyCQkJLyogMy4yMiBjb21waWxlciAqLwotI2Vs c2UKLSNpZmRlZiBIUFVYCi0jZGVmaW5lIENIQVIgdW5zaWduZWQgY2hhcgotI2Vsc2UKLSNpZmRl ZiBPUzIKLSNpZmRlZiBOVAotI2RlZmluZSBDSEFSIHVuc2lnbmVkIGNoYXIKLSNlbHNlIC8qIE5U ICovCi0jaWZkZWYgQ0hBUgotI3VuZGVmIENIQVIKLSNlbmRpZiAvKiBDSEFSICovCi10eXBlZGVm IHVuc2lnbmVkIGNoYXIgQ0hBUjsKLSNlbmRpZiAvKiBOVCAqLwotI2Vsc2UgLyogT1MyICovCi0j aWZkZWYgVk1TCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgQ0hBUjsKLSNlbHNlCi0jaWZkZWYgQ0hB UgotI3VuZGVmIENIQVIKLSNlbmRpZiAvKiBDSEFSICovCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIg Q0hBUjsKLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBIUFVY ICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBCU0QyOSAqLwotI2VuZGlm IC8qIEM3MCAqLwotI2VuZGlmIC8qIFY3ICovCi0jZW5kaWYgLyogTUlOSVggKi8KLSNlbmRpZiAv KiBQUk9WWDEgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLQotdW5pb24gY2tfc2hvcnQgewkJCS8qIE1h aW5seSBmb3IgVW5pY29kZSAqLwotICAgIFVTSE9SVCB4X3Nob3J0OwotICAgIENIQVIgeF9jaGFy WzJdOwotfTsKLQotI2lmZGVmIE1BQwkJCQkvKiBNYWNpbnRvc2ggZmlsZSByb3V0aW5lcyAqLwot I2lmbmRlZiBDS1dBUlRfQwkJCS8qIEJ1dCBub3QgaW4gIndhcnQiLi4uICovCi0jaWZkZWYgZmVv ZgotI3VuZGVmIGZlb2YKLSNlbmRpZiAvKiBmZW9mICovCi0jZGVmaW5lIGZlb2YgbWFjX2Zlb2YK LSNkZWZpbmUgcmV3aW5kIG1hY19yZXdpbmQKLSNkZWZpbmUgZmdldHMgbWFjX2ZnZXRzCi0jZGVm aW5lIGZvcGVuIG1hY19mb3BlbgotI2RlZmluZSBmY2xvc2UgbWFjX2ZjbG9zZQotaW50IG1hY19m ZW9mKCk7Ci12b2lkIG1hY19yZXdpbmQoKTsKLWNoYXIgKm1hY19mZ2V0cygpOwotRklMRSAqbWFj X2ZvcGVuKCk7Ci1pbnQgbWFjX2ZjbG9zZSgpOwotI2VuZGlmIC8qIENLQ1BST19XICovCi0jZW5k aWYgLyogTUFDICovCi0vKgotICAgU3lzdGVtcyB3aG9zZSBtYWlubGluZSBtb2R1bGVzIGhhdmUg YWNjZXNzIHRvIHRoZSBjb21tdW5pY2F0aW9uLWxpbmUKLSAgIGZpbGUgZGVzY3JpcHRvciwgdHR5 ZmQuCi0qLwotI2lmbmRlZiBDS19UVFlGRAotI2lmZGVmIFVOSVgKLSNkZWZpbmUgQ0tfVFRZRkQK LSNlbHNlCi0jaWZkZWYgT1MyCi0jZGVmaW5lIENLX1RUWUZECi0jZWxzZQotI2lmZGVmIFZNUwot I2RlZmluZSBDS19UVFlGRAotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2Vu ZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBDS19UVFlGRCAqLwotCi0vKiBTeXN0ZW1zIHdoZXJl IHdlIGNhbiBnZXQgb3VyIG93biBwcm9jZXNzIElEICovCi0KLSNpZm5kZWYgQ0tfUElECi0jaWZk ZWYgVU5JWAotI2RlZmluZSBDS19QSUQKLSNlbmRpZiAvKiBVTklYICovCi0jaWZkZWYgT1MyCi0j ZGVmaW5lIENLX1BJRAotI2VuZGlmIC8qIE9TMiAqLwotI2lmZGVmIFZNUwotI2RlZmluZSBDS19Q SUQKLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBDS19QSUQgKi8KLQotLyogU3lzdGVtcyB0 aGF0IHN1cHBvcnQgdGhlIE1pY3Jvc29mdCBUZWxlcGhvbnkgQVBJIChUQVBJKSAqLwotCi0jaWZu ZGVmIE5PRElBTAotI2lmbmRlZiBDS19UQVBJCi0jaWZkZWYgTlQKLSNkZWZpbmUgQ0tfVEFQSQot I2VuZGlmIC8qIE5UICovCi0jZW5kaWYgLyogQ0tfVEFQSSAqLwotI2VuZGlmIC8qIE5PRElBTCAq LwotCi0jaWZuZGVmIE5PTlpYUEFORAotI2lmbmRlZiBOWlhQQU5ECi0jaWZkZWYgT1MyT1JVTklY Ci0jZGVmaW5lIE5aWFBBTkQKLSNlbHNlCi0jaWZkZWYgVk1TCi0jZGVmaW5lIE5aWFBBTkQKLSNl bHNlCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSNkZWZpbmUgTlpYUEFORAotI2Vsc2UKLSNpZmRlZiBP U0sKLSNkZWZpbmUgTlpYUEFORAotI2VuZGlmIC8qIE9TSyAqLwotI2VuZGlmIC8qIGRhdGFnZW5l cmFsICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyT1JVTklYICovCi0jZW5kaWYg LyogTlpYUEFORCAqLwotI2Vsc2UKLSNpZmRlZiBOWlhQQU5ECi0jdW5kZWYgTlpYUEFORAotI2Vu ZGlmIC8qIE5aWFBBTkQgKi8KLSNlbmRpZiAvKiBOT05aWFBBTkQgKi8KLQotLyogbnp4cGFuZCgp IG9wdGlvbiBmbGFncyAqLwotCi0jZGVmaW5lIFpYX0ZJTE9OTFkgICAxCQkJLyogTWF0Y2ggb25s eSByZWd1bGFyIGZpbGVzICovCi0jZGVmaW5lIFpYX0RJUk9OTFkgICAyCQkJLyogTWF0Y2ggb25s eSBkaXJlY3RvcmllcyAqLwotI2RlZmluZSBaWF9SRUNVUlNFICAgNAkJCS8qIERlc2NlbmQgdGhy b3VnaCBkaXJlY3RvcnkgdHJlZSAqLwotI2RlZmluZSBaWF9NQVRDSERPVCAgOAkJCS8qIE1hdGNo ICJkb3QgZmlsZXMiICovCi0jZGVmaW5lIFpYX05PQkFDS1VQIDE2CQkJLyogRG9uJ3QgbWF0Y2gg ImJhY2t1cCBmaWxlcyIgKi8KLSNkZWZpbmUgWlhfTk9MSU5LUyAgMzIJCQkvKiBEb24ndCBmb2xs b3cgc3ltbGlua3MgKi8KLQotI2lmbmRlZiBOWlhQQU5ECi0jZGVmaW5lIG56eHBhbmQoYSxiKSB6 eHBhbmQoYSkKLSNlbmRpZiAvKiBOWlhQQU5EICovCi0KLSNpZm5kZWYgTk9aWFJFV0lORAotI2lm bmRlZiBaWFJFV0lORAkJCS8qIFBsYXRmb3JtcyB0aGF0IGhhdmUgenhyZXdpbmQoKSAqLwotI2lm ZGVmIE9TMk9SVU5JWAotI2RlZmluZSBaWFJFV0lORAotI2Vsc2UKLSNpZmRlZiBWTVMKLSNkZWZp bmUgWlhSRVdJTkQKLSNlbHNlCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSNkZWZpbmUgWlhSRVdJTkQK LSNlbHNlCi0jaWZkZWYgT1NLCi0jZGVmaW5lIFpYUkVXSU5ECi0jZWxzZQotI2lmZGVmIFNUUkFU VVMKLSNkZWZpbmUgWlhSRVdJTkQKLSNlbmRpZiAvKiBTVFJBVFVTICovCi0jZW5kaWYgLyogT1NL ICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAv KiBPUzJPUlVOSVggKi8KLSNlbmRpZiAvKiBaWFJFV0lORCAqLwotI2Vsc2UKLSNpZmRlZiBaWFJF V0lORAotI3VuZGVmIFpYUkVXSU5ECi0jZW5kaWYgLyogWlhSRVdJTkQgKi8KLSNlbmRpZiAvKiBO T1pYUkVXSU5EICovCi0KLS8qIFRlbXBvcmFyeS1kaXJlY3RvcnktZm9yLVJFQ0VJVkUgZmVhdHVy ZSAuLi4gKi8KLS8qIFRoaXMgc2F5cyB3aGV0aGVyIHdlIGhhdmUgdGhlIGlzZGlyKCkgZnVuY3Rp b24gZGVmaW5lZC4gKi8KLQotI2lmZGVmIFVOSVgJCQkJLyogVU5JWCBoYXMgaXQgKi8KLSNpZm5k ZWYgQ0tfVE1QRElSCi0jaWZuZGVmIHBkcDExCi0jZGVmaW5lIENLX1RNUERJUgotI2RlZmluZSBU TVBESVJMRU4gMjU2Ci0jZW5kaWYgLyogcGRwMTEgKi8KLSNlbmRpZiAvKiBDS19UTVBESVIgKi8K LSNlbmRpZiAvKiBVTklYICovCi0KLSNpZmRlZiBWTVMJCQkJLyogVk1TIHRvbyAqLwotI2lmbmRl ZiBDS19UTVBESVIKLSNkZWZpbmUgQ0tfVE1QRElSCi0jZGVmaW5lIFRNUERJUkxFTiAyNTYKLSNl bmRpZiAvKiBDS19UTVBESVIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQotI2lmZGVmIE9TMgkJCQkv KiBPUyB0d28gdG9vICovCi0jaWZuZGVmIENLX1RNUERJUgotI2RlZmluZSBDS19UTVBESVIKLSNk ZWZpbmUgVE1QRElSTEVOIDEyOQotI2VuZGlmIC8qIENLX1RNUERJUiAqLwotI2VuZGlmIC8qIE9T MiAqLwotCi0jaWZkZWYgU1RSQVRVUwkJCQkvKiBTdHJhdHVzIFZPUyB0b28uICovCi0jaWZuZGVm IENLX1RNUERJUgotI2RlZmluZSBDS19UTVBESVIKLSNkZWZpbmUgVE1QRElSTEVOIDI1NgotI2Vu ZGlmIC8qIENLX1RNUERJUiAqLwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLQotI2lmZGVmIE9TSwkJ CQkvKiBPUy05IHRvbyAqLwotI2lmbmRlZiBDS19UTVBESVIKLSNkZWZpbmUgQ0tfVE1QRElSCi0j ZGVmaW5lIFRNUERJUkxFTiAyNTYKLSNlbmRpZiAvKiBDS19UTVBESVIgKi8KLSNlbmRpZiAvKiBP U0sgKi8KLQotI2lmZGVmIGRhdGFnZW5lcmFsCQkJLyogQU9TL1ZTIHRvbyAqLwotI2lmbmRlZiBD S19UTVBESVIKLSNkZWZpbmUgQ0tfVE1QRElSCi0jZGVmaW5lIFRNUERJUkxFTiAyNTYKLSNlbmRp ZiAvKiBDS19UTVBESVIgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotCi0jaWZkZWYgQ0tf VE1QRElSCQkJLyogTmVlZHMgY29tbWFuZCBwYXJzZXIgKi8KLSNpZmRlZiBOT0lDUAotI3VuZGVm IENLX1RNUERJUgotI2VuZGlmIC8qIE5PSUNQICovCi0jZW5kaWYgLyogQ0tfVE1QRElSICovCi0K LS8qIFdoZXRoZXIgdG8gaW5jbHVkZSA8c3lzL3RpbWUuaD4gKi8KLQotI2lmbmRlZiBOT1RJTUVI CQkJCS8qIDx0aW1lLmg+ICovCi0jaWZuZGVmIFRJTUVICi0jZGVmaW5lIFRJTUVICi0jZW5kaWYg LyogVElNRUggKi8KLSNlbmRpZiAvKiBOT1RJTUVIICovCi0KLSNpZm5kZWYgTk9TWVNUSU1FSAkJ CS8qIDxzeXMvdGltZS5oPiAqLwotI2lmbmRlZiBTWVNUSU1FSAotI2lmZGVmIFVOSVgJCQkJLyog VU5JWCAqLwotI2lmZGVmIFNWT1JQT1NJWAkJCS8qIFN5c3RlbSBWIG9yIFBPU0lYLi4uICovCi0j aWZkZWYgTV9VTklYCi0jZGVmaW5lIFNZU1RJTUVICi0jZWxzZQotI2lmZGVmIFNDT18zMlY0Ci0j ZGVmaW5lIFNZU1RJTUVICi0jZWxzZQotI2lmZGVmIE9YT1MKLSNkZWZpbmUgU1lTVElNRUgKLSNl bHNlCi0jaWZkZWYgQlNENDQKLSNkZWZpbmUgU1lTVElNRUgKLSNlbHNlCi0jaWZkZWYgX19saW51 eF9fCi0jZGVmaW5lIFNZU1RJTUVICi0jZWxzZQotI2lmZGVmIEFJWFJTCi0jaWZuZGVmIEFJWDQx Ci0jZGVmaW5lIFNZU1RJTUVICi0jZW5kaWYgLyogQUlYNDEgKi8KLSNlbHNlCi0jaWZkZWYgSVJJ WDYwCi0jZGVmaW5lIFNZU1RJTUVICi0jZWxzZQotI2lmZGVmIEkzODZJWAotI2RlZmluZSBTWVNU SU1FSAotI2Vsc2UKLSNpZmRlZiBTVjY4UjNWNgotI2RlZmluZSBTWVNUSU1FSAotI2VuZGlmIC8q IFNWNjhSM1Y2ICovCi0jZW5kaWYgLyogSTM4NklYICovCi0jZW5kaWYgLyogSVJJWDYwICovCi0j ZW5kaWYgLyogQUlYUlMgKi8KLSNlbmRpZiAvKiBfX2xpbnV4X18gKi8KLSNlbmRpZiAvKiBCU0Q0 NCAqLwotI2VuZGlmIC8qIE9YT1MgKi8KLSNlbmRpZiAvKiBTQ09fMzJWNCAqLwotI2VuZGlmIC8q IE1fVU5JWCAqLwotCi0jZWxzZSAgLyogTm90IFNWT1JQT1NJWCAqLwotCi0jaWZuZGVmIEJFTExW MTAJCQkJLyogQWxsIGJ1dCB0aGVzZS4uLiAqLwotI2lmbmRlZiBQUk9WWDEKLSNpZm5kZWYgVjcK LSNpZm5kZWYgQlNENDEKLSNpZm5kZWYgQ09IRVJFTlQKLSNkZWZpbmUgU1lTVElNRUgKLSNlbmRp ZiAvKiBDT0hFUkVOVCAqLwotI2VuZGlmIC8qIEJTRDQxICovCi0jZW5kaWYgLyogVjcgKi8KLSNl bmRpZiAvKiBQUk9WWDEgKi8KLSNlbmRpZiAvKiBCRUxMVjEwICovCi0jZW5kaWYgLyogU1ZPUlBP U0lYICovCi0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIFNZU1RJTUVIICovCi0jZW5kaWYg LyogTk9TWVNUSU1FSCAqLwotCi0jaWZuZGVmIE5PU1lTVElNRUJICQkJLyogPHN5cy90aW1lYi5o PiAqLwotI2lmbmRlZiBTWVNUSU1FQkgKLSNpZmRlZiBPU0YKLSNkZWZpbmUgU1lTVElNRUJICi0j ZWxzZQotI2lmZGVmIENPSEVSRU5UCi0jZGVmaW5lIFNZU1RJTUVCSAotI2Vsc2UKLSNpZmRlZiBC U0Q0MQotI2RlZmluZSBTWVNUSU1FQkgKLSNlbHNlCi0jaWZkZWYgQlNEMjkKLSNkZWZpbmUgU1lT VElNRUJICi0jZWxzZQotI2lmZGVmIFRPV0VSMQotI2RlZmluZSBTWVNUSU1FQkgKLSNlbHNlCi0j aWZkZWYgRlQyMQotI2RlZmluZSBTWVNUSU1FQkgKLSNlbHNlCi0jaWZkZWYgQkVMTFYxMAotI2Rl ZmluZSBTWVNUSU1FQkgKLSNlbmRpZiAvKiBCRUxMVjEwICovCi0jZW5kaWYgLyogRlQyMSAqLwot I2VuZGlmIC8qIFRPV0VSMSAqLwotI2VuZGlmIC8qIEJTRDI5ICovCi0jZW5kaWYgLyogQlNENDEg Ki8KLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotI2VuZGlmIC8qIE9TRiAqLwotI2VuZGlmIC8qIFNZ U1RJTUVCSCAqLwotI2VuZGlmIC8qIE5PU1lTVElNRUJIICovCi0KLS8qCi0gRGVidWcgYW5kIHRy YW5zYWN0aW9uIGxvZ2dpbmcgaXMgaW5jbHVkZWQgYXV0b21hdGljYWxseSB1bmxlc3MgeW91IGRl ZmluZQotIE5PREVCVUcgb3IgTk9UTE9HLiAgRG8gdGhpcyBpZiB5b3Ugd2FudCB0byBzYXZlIHRo ZSBzcGFjZSBhbmQgb3ZlcmhlYWQuCi0gKE5vdGUsIGluIHZlcnNpb24gNEYgdGhlc2UgZGVmaW5p dGlvbnMgY2hhbmdlZCBmcm9tICJ7fSIgdG8gdGhlIG51bGwgc3RyaW5nCi0gdG8gYXZvaWQgcHJv YmxlbXMgd2l0aCBzZW1pY29sb25zIGFmdGVyIGJyYWNlcywgYXMgaW46ICJpZiAoeCkgdGxvZyh0 aGlzKTsKLSBlbHNlIHRsb2codGhhdCk7IgotKi8KLSNpZm5kZWYgTk9ERUJVRwotI2lmbmRlZiBE RUJVRwotI2RlZmluZSBERUJVRwotI2VuZGlmIC8qIERFQlVHICovCi0jZWxzZQotI2lmZGVmIERF QlVHCi0jdW5kZWYgREVCVUcKLSNlbmRpZiAvKiBERUJVRyAqLwotI2VuZGlmIC8qIE5PREVCVUcg Ki8KLQotI2lmZGVmIE5PVExPRwotI2lmZGVmIFRMT0cKLSN1bmRlZiBUTE9HCi0jZW5kaWYgLyog VExPRyAqLwotI2Vsc2UgIC8qIE5PVExPRyAqLwotI2lmbmRlZiBUTE9HCi0jZGVmaW5lIFRMT0cK LSNlbmRpZiAvKiBUTE9HICovCi0jZW5kaWYgLyogTk9UTE9HICovCi0KLS8qIGRlYnVnKCkgbWFj cm8gc3R5bGUgc2VsZWN0aW9uLiAqLwotCi0jaWZkZWYgVk1TCi0jaWZuZGVmIElGREVCVUcKLSNk ZWZpbmUgSUZERUJVRwotI2VuZGlmIC8qIElGREVCVUcgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQot I2lmZGVmIE1BQwotI2lmbmRlZiBJRkRFQlVHCi0jZGVmaW5lIElGREVCVUcKLSNlbmRpZiAvKiBJ RkRFQlVHICovCi0jZW5kaWYgLyogTUFDICovCi0KLSNpZmRlZiBPUzIKLSNpZm5kZWYgSUZERUJV RwotI2RlZmluZSBJRkRFQlVHCi0jZW5kaWYgLyogSUZERUJVRyAqLwotI2VuZGlmIC8qIE9TMiAq LwotCi0jaWZkZWYgT1hPUwkJCQkvKiB0c3QgaXMgZmFzdGVyIHRoYW4ganNyICovCi0jaWZuZGVm IElGREVCVUcKLSNkZWZpbmUgSUZERUJVRwotI2VuZGlmIC8qIElGREVCVUcgKi8KLSNlbmRpZiAv KiBPWE9TICovCi0KLSNpZm5kZWYgQ0tDTUFJCi1leHRlcm4gaW50IGRlYmxvZzsKLWV4dGVybiBp bnQgZGVib2s7Ci1leHRlcm4gaW50IGRlYnhsZW47Ci1leHRlcm4gaW50IG1hdGNoZG90OwotZXh0 ZXJuIGludCB0dF9iZWxsOwotI2VuZGlmIC8qIENLQ01BSSAqLwotCi0jaWZkZWYgT1MyCi1fUFJP VE9UWVAoIHZvaWQgYmxlZXAsIChzaG9ydCkgKTsKLSNlbHNlIC8qIE9TMiAqLwotI2RlZmluZSBi bGVlcCh4KSBpZih0dF9iZWxsKXB1dGNoYXIoJ1wwNycpCi0jZW5kaWYgLyogT1MyICovCi0KLSNp Zm5kZWYgQkVPU09SQkVCT1gKLSNpZmRlZiBCRUJPWAkJCQkvKiBUaGlzIHdhcyB1c2VkIG9ubHkg Zm9yIERSNyAqLwotI2RlZmluZSBCRU9TT1JCRUJPWAotI2Vsc2UKLSNpZmRlZiBCRU9TCQkJCS8q IFRoaXMgaXMgdXNlZCBmb3IgQmVPUyA0LnggKi8KLSNkZWZpbmUgQkVPU09SQkVCT1gKLSNlbmRp ZiAvKiBCRU9TICovCi0jZW5kaWYgLyogQkVCT1ggKi8KLSNlbmRpZiAvKiBCRU9TT1JCRUJPWCAq LwotCi0jaWZkZWYgTk9JQ1AKLSNpZmRlZiBUTE9HCi0jdW5kZWYgVExPRwotI2VuZGlmIC8qIFRM T0cgKi8KLSNlbmRpZiAvKiBOT0lDUCAqLwotCi0vKiBGb3JtYXRzIGZvciBkZWJ1ZygpIGFuZCB0 bG9nKCkgKi8KLQotI2RlZmluZSBGMDAwIDAKLSNkZWZpbmUgRjAwMSAxCi0jZGVmaW5lIEYwMTAg MgotI2RlZmluZSBGMDExIDMKLSNkZWZpbmUgRjEwMCA0Ci0jZGVmaW5lIEYxMDEgNQotI2RlZmlu ZSBGMTEwIDYKLSNkZWZpbmUgRjExMSA3Ci0KLSNpZmRlZiBfX2xpbnV4X18KLSNpZm5kZWYgTElO VVgKLSNkZWZpbmUgTElOVVgKLSNlbmRpZiAvKiBMSU5VWCAqLwotI2VuZGlmIC8qIF9fbGludXhf XyAqLwotCi0vKiBQbGF0Zm9ybXMgd2hlcmUgc21hbGwgc2l6ZSBpcyBuZWVkZWQgKi8KLQotI2lm ZGVmIHBkcDExCi0jZGVmaW5lIENLX1NNQUxMCi0jZW5kaWYgLyogcGRwMTEgKi8KLQotLyogQ2Fu IHdlIHVzZSByZWFscGF0aCgpPyAqLwotCi0jaWZuZGVmIE5PUkVBTFBBVEgKLSNpZmRlZiBwZHAx MQotI2RlZmluZSBOT1JFQUxQQVRICi0jZW5kaWYgLyogcGRwMTEgKi8KLSNlbmRpZiAvKiBOT1JF QUxQQVRIICovCi0KLSNpZm5kZWYgTk9SRUFMUEFUSAotI2lmZGVmIFVOSVgKLSNpZmRlZiBIUFVY NQotI2RlZmluZSBOT1JFQUxQQVRICi0jZWxzZQotI2lmZGVmIEhQVVg2Ci0jZGVmaW5lIE5PUkVB TFBBVEgKLSNlbHNlCi0jaWZkZWYgSFBVWDcKLSNkZWZpbmUgTk9SRUFMUEFUSAotI2Vsc2UKLSNp ZmRlZiBIUFVYOAotI2RlZmluZSBOT1JFQUxQQVRICi0jZWxzZQotI2lmZGVmIFNWNjhSM1Y2Ci0j ZGVmaW5lIE5PUkVBTFBBVEgKLSNlbHNlCi0jaWZkZWYgWEVOSVgKLSNkZWZpbmUgTk9SRUFMUEFU SAotI2Vsc2UKLSNpZmRlZiBDS19TQ08zMlY0Ci0jZGVmaW5lIE5PUkVBTFBBVEgKLSNlbHNlCi0j aWZkZWYgQ0tfU0NPVjUKLSNkZWZpbmUgTk9SRUFMUEFUSAotI2Vsc2UKLSNpZmRlZiBPU0YzMgot I2RlZmluZSBOT1JFQUxQQVRICi0jZWxzZQotI2lmZGVmIE9TRjMwCi0jZGVmaW5lIE5PUkVBTFBB VEgKLSNlbHNlCi0jaWZkZWYgdWx0cml4Ci0jZGVmaW5lIE5PUkVBTFBBVEgKLSNlbHNlCi0jaWZk ZWYgQ09IRVJFTlQKLSNkZWZpbmUgTk9SRUFMUEFUSAotI2VuZGlmIC8qIENPSEVSRU5UICovCi0j ZW5kaWYgLyogdWx0cml4ICovCi0jZW5kaWYgLyogT1NGMzAgKi8KLSNlbmRpZiAvKiBPU0YzMiAq LwotI2VuZGlmIC8qIENLX1NDT1Y1ICovCi0jZW5kaWYgLyogQ0tfU0NPMzJWNCAqLwotI2VuZGlm IC8qIFhFTklYICovCi0jZW5kaWYgLyogU1Y2OFIzVjYgKi8KLSNlbmRpZiAvKiBIUFVYOCAqLwot I2VuZGlmIC8qIEhQVVg3ICovCi0jZW5kaWYgLyogSFBVWDYgKi8KLSNlbmRpZiAvKiBIUFVYNSAq LwotI2VuZGlmIC8qIE5PUkVBTFBBVEggKi8KLQotI2lmbmRlZiBOT1JFQUxQQVRICi0jaWZuZGVm IENLUkVBTFBBVEgKLSNkZWZpbmUgQ0tSRUFMUEFUSAotI2VuZGlmIC8qIE5PUkVBTFBBVEggKi8K LSNlbmRpZiAvKiBDS1JFQUxQQVRIICovCi0jZW5kaWYgLyogVU5JWCAqLwotCi0jaWZkZWYgQ0tS RUFMUEFUSAotI2lmZGVmIE9TMk9SVU5JWAotI2lmbmRlZiBDS1JPT1QKLSNkZWZpbmUgQ0tST09U Ci0jZW5kaWYgLyogQ0tST09UICovCi0jZW5kaWYgLyogT1MyT1JVTklYICovCi0jZW5kaWYgLyog Q0tSRUFMUEFUSCAqLwotCi0vKiBDS1NZTUxJTksgc2hvdWxkIGJlIHNldCBvbmx5IGlmIHdlIGNh biB1c2UgcmVhZGxpbmsoKSAqLwotCi0jaWZkZWYgVU5JWAotI2lmbmRlZiBOT1NZTUxJTksKLSNp Zm5kZWYgQ0tTWU1MSU5LCi0jZGVmaW5lIENLU1lNTElOSwotI2VuZGlmIC8qIE5PU1lNTElOSyAq LwotI2VuZGlmIC8qIENLU1lNTElOSyAqLwotI2VuZGlmIC8qIFVOSVggKi8KLQotLyogUGxhdGZv cm1zIHdoZXJlIHdlIGNhbiB1c2UgbHN0YXQoKSBpbnN0ZWFkIG9mIHN0YXQoKSAoZm9yIHN5bWxp bmtzKSAqLwotLyogVGhpcyBzaG91bGQgYmUgc2V0IG9ubHkgaWYgYm90aCBsc3RhdCgpIGFuZCBy ZWFkbGluaygpIGFyZSBhdmFpbGFibGUgKi8KLQotI2lmbmRlZiBOT0xTVEFUCi0jaWZuZGVmIE5P U1lNTElOSwotI2lmbmRlZiBVU0VfTFNUQVQKLSNpZmRlZiBVTklYCi0jaWZkZWYgQ0tTWU1MSU5L Ci0jaWZkZWYgU1ZSNAkJCQkvKiBTVlI0IGhhcyBsc3RhdCgpICovCi0jZGVmaW5lIFVTRV9MU1RB VAotI2Vsc2UKLSNpZmRlZiBCU0Q0MgkJCQkvKiA0LjJCU0QgYW5kIDQuM0JTRCBoYXZlIGl0ICov Ci0jZGVmaW5lIFVTRV9MU1RBVAkJCS8qIFRoaXMgc2hvdWxkIGluY2x1ZGUgb2xkIEhQVVhzICov Ci0jZWxzZQotI2lmZGVmIEJTRDQ0CQkJCS8qIDQuNEJTRCBoYXMgaXQgKi8KLSNkZWZpbmUgVVNF X0xTVEFUCi0jZWxzZQotI2lmZGVmIExJTlVYCQkJCS8qIExJTlVYIGhhcyBpdCAqLwotI2RlZmlu ZSBVU0VfTFNUQVQKLSNlbHNlCi0jaWZkZWYgU1VOT1M0CQkJCS8qIFN1bk9TIGhhcyBpdCAqLwot I2RlZmluZSBVU0VfTFNUQVQKLSNlbmRpZiAvKiBTVU5PUzQgKi8KLSNlbmRpZiAvKiBMSU5VWCAq LwotI2VuZGlmIC8qIEJTRDQ0ICovCi0jZW5kaWYgLyogQlNENDIgKi8KLSNlbmRpZiAvKiBTVlI0 ICovCi0jZW5kaWYgLyogQ0tTWU1MSU5LICovCi0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8q IFVTRV9MU1RBVCAqLwotI2VuZGlmIC8qIE5PU1lNTElOSyAqLwotI2VuZGlmIC8qIE5PTFNUQVQg Ki8KLQotI2lmZGVmIE5PTFNUQVQKLSNpZmRlZiBVU0VfTFNUQVQKLSN1bmRlZiBVU0VfTFNUQVQK LSNlbmRpZiAvKiBVU0VfTFNUQVQgKi8KLSNlbmRpZiAvKiBOT0xTVEFUICovCi0KLSNpZm5kZWYg Tk9UVFlMT0NLCQkJLyogVU5JWCBzeXN0ZW1zIHRoYXQgaGF2ZSB0dHlsb2NrKCkgKi8KLSNpZm5k ZWYgVVNFVFRZTE9DSwotI2lmZGVmIEFJWFJTCQkJCS8qIEFJWCAzLjEgYW5kIGxhdGVyICovCi0j ZGVmaW5lIFVTRVRUWUxPQ0sKLSNlbHNlCi0jaWZkZWYgVVNFX1VVX0xPQ0sJCQkvKiBGcmVlQlNE IG9yIG90aGVyIHdpdGggdXVfbG9jaygpICovCi0jZGVmaW5lIFVTRVRUWUxPQ0sKLSNlbHNlCi0v KgotICBQcmlvciB0byA4LjAuMjk5IEFscGhhLjA4IHRoaXMgd2FzIEhBVkVfQkFVREJPWSB3aGlj aCB3YXMgYWRkZWQgZm9yCi0gIFJlZCBIYXQgNy4yIGluIE1heSAyMDAzIGJ1dCB3aGljaCBpcyBu byBsb25nZXIgc3VwcG9ydGVkIGluIERlYmlhbiBhbmQKLSAgT3BlblN1c2UgKGF0IGxlYXN0KS4K LSovCi0jaWZkZWYgSEFWRV9MT0NLREVWCi0jZGVmaW5lIFVTRVRUWUxPQ0sKLSNlbmRpZiAvKiBI QVZFX0xPQ0tERVYgKi8KLSNlbmRpZiAvKiBVU0VfVVVfTE9DSyAqLwotI2VuZGlmIC8qIEFJWFJT ICovCi0jZW5kaWYgLyogVVNFVFRZTE9DSyAqLwotI2VuZGlmIC8qIE5PVFRZTE9DSyAqLwotCi0j aWZuZGVmIE5PX09QRU5QVFkJCQkvKiBDYW4gdXNlIG9wZW5wdHkoKSAqLwotI2lmbmRlZiBIQVZF X09QRU5QVFkKLSNpZmRlZiBfX2xpbnV4X18KLSNkZWZpbmUgSEFWRV9PUEVOUFRZCi0jZWxzZQot I2lmZGVmIF9fRnJlZUJTRF9fCi0jZGVmaW5lIEhBVkVfT1BFTlBUWQotI2Vsc2UKLSNpZmRlZiBf X09wZW5CU0RfXwotI2RlZmluZSBIQVZFX09QRU5QVFkKLSNlbHNlCi0jaWZkZWYgX19OZXRCU0Rf XwotI2RlZmluZSBIQVZFX09QRU5QVFkKLSNlbHNlCi0jaWZkZWYgTUFDT1NYMTAKLSNkZWZpbmUg SEFWRV9PUEVOUFRZCi0jZW5kaWYJLyogTUFDT1NYMTAgKi8KLSNlbmRpZgkvKiBfX05ldEJTRF9f ICovCi0jZW5kaWYJLyogX19PcGVuQlNEX18gKi8KLSNlbmRpZgkvKiBfX0ZyZWVCU0RfXyAqLwot I2VuZGlmCS8qIF9fbGludXhfXyAqLwotI2VuZGlmCS8qIEhBVkVfT1BFTlBUWSAqLwotI2VuZGlm CS8qIE5PX09QRU5QVFkgKi8KLQotLyogS2VybWl0IGZlYXR1cmUgc2VsZWN0aW9uICovCi0KLSNp Zm5kZWYgTk9TUEwKLSNpZm5kZWYgTk9DSEFOTkVMSU8JCQkvKiBDaGFubmVsLWJhc2VkIGZpbGUg aS9vIHBhY2thZ2UgKi8KLSNpZm5kZWYgQ0tDSEFOTkVMSU8KLSNpZmRlZiBVTklYCi0jZGVmaW5l IENLQ0hBTk5FTElPCi0jZWxzZQotI2lmZGVmIE9TMgotI2RlZmluZSBDS0NIQU5ORUxJTwotI2Vs c2UKLSNpZmRlZiBWTVMKLSNkZWZpbmUgQ0tDSEFOTkVMSU8KLSNlbHNlCi0jaWZkZWYgU1RSQVRV UwotI2RlZmluZSBDS0NIQU5ORUxJTwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSNlbmRpZiAvKiBW TVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogQ0tD SEFOTkVMSU8gKi8KLSNlbmRpZiAvKiBOT0NIQU5ORUxJTyAqLwotI2VuZGlmIC8qIE5PU1BMICov Ci0KLSNpZm5kZWYgTk9DS0VYRUMJCQkvKiBFWEVDIGNvbW1hbmQgKi8KLSNpZm5kZWYgTk9QVVNI Ci0jaWZuZGVmIENLRVhFQwotI2lmZGVmIFVOSVgJCQkJLyogVU5JWCBjYW4gZG8gaXQgKi8KLSNk ZWZpbmUgQ0tFWEVDCi0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIENLRVhFQyAqLwotI2Vu ZGlmIC8qIE5PUFVTSCAqLwotI2VuZGlmIC8qIE5PQ0tFWEVDICovCi0KLSNpZm5kZWYgTk9GQVNU CQkJCS8qIEZhc3QgS2VybWl0IHByb3RvY29sIGJ5IGRlZmF1bHQgKi8KLSNpZm5kZWYgQ0tfRkFT VAotI2lmZGVmIFVOSVgKLSNkZWZpbmUgQ0tfRkFTVAotI2Vsc2UKLSNpZmRlZiBWTVMKLSNkZWZp bmUgQ0tfRkFTVAotI2Vsc2UKLSNpZmRlZiBPUzIKLSNkZWZpbmUgQ0tfRkFTVAotI2VuZGlmIC8q IE9TMiAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBD S19GQVNUICovCi0jZW5kaWYgLyogTk9GQVNUICovCi0KLSNpZmRlZiBVTklYCQkJCS8qIFRyYW5z cGFyZW50IHByaW50ICovCi0jaWZuZGVmIE5PWFBSSU5UCi0jaWZuZGVmIFhQUklOVAotI2RlZmlu ZSBYUFJJTlQKLSNlbmRpZiAvKiBYUFJJTlQgKi8KLSNlbmRpZiAvKiBOT1hQUklOVCAqLwotI2Vu ZGlmIC8qIFVOSVggKi8KLQotI2lmbmRlZiBOT0hXUEFSSVRZCQkJLyogSGFyZHdhcmUgcGFyaXR5 ICovCi0jaWZuZGVmIEhXUEFSSVRZCi0jaWZkZWYgU1ZPUlBPU0lYCQkJLyogU3lzdGVtIFYgb3Ig UE9TSVggY2FuIGhhdmUgaXQgKi8KLSNkZWZpbmUgSFdQQVJJVFkKLSNlbHNlCi0jaWZkZWYgU1VO T1M0MQkJCQkvKiBTdW5PUyA0LjEgY2FuIGhhdmUgaXQgKi8KLSNkZWZpbmUgSFdQQVJJVFkKLSNl bHNlCi0jaWZkZWYgT1MyCQkJCS8qIEs5NSBjYW4gaGF2ZSBpdCAqLwotI2RlZmluZSBIV1BBUklU WQotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFNVTk9TNDEgKi8KLSNlbmRpZiAvKiBTVk9S UE9TSVggKi8KLSNlbmRpZiAvKiBIV1BBUklUWSAqLwotI2VuZGlmIC8qIE5PSFdQQVJJVFkgKi8K LQotI2lmbmRlZiBOT1NUT1BCSVRTCQkJLyogU3RvcC1iaXQgc2VsZWN0aW9uICovCi0jaWZuZGVm IFNUT1BCSVRTCi0jaWZkZWYgT1MyT1JVTklYCi0vKiBJbiBVbml4IHJlYWxseSB0aGlzIHNob3Vs ZCBvbmx5IGJlIGlmIENTVE9QQiBpcyBkZWZpbmVkLiAqLwotLyogQnV0IHdlIGRvbid0IGtub3cg dGhhdCB5ZXQuICovCi0jZGVmaW5lIFNUT1BCSVRTCi0jZWxzZQotI2lmZGVmIFROX0NPTVBPUlQK LSNkZWZpbmUgU1RPUEJJVFMKLSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0jZW5kaWYgLyogT1My T1JVTklYICovCi0jZW5kaWYgLyogU1RPUEJJVFMgKi8KLSNlbmRpZiAvKiBOT1NUT1BCSVRTICov Ci0KLSNpZmRlZiBVTklYCi0jaWZuZGVmIE5FVENNRAkJCQkvKiBDYW4gU0VUIE5FVFdPUksgVFlQ RSBDT01NQU5EICovCi0jZGVmaW5lIE5FVENNRAotI2VuZGlmIC8qIE5FVENNRCAqLwotI2VuZGlm IC8qIFVOSVggKi8KLQotLyogUHR5IHN1cHBvcnQsIG5vbnBvcnRhYmxlLCBhdmFpbGFibGUgb24g YSBjYXNlLWJ5LWNhc2UgYmFzaXMgKi8KLQotI2lmbmRlZiBOT1BUWQotI2lmZGVmIE5FWFQJCQkJ LyogTmVYVFNURVAgKHRlc3RlZCBvbiAzLjEpKi8KLSNkZWZpbmUgTkVUUFRZCi0jZWxzZQotI2lm ZGVmIENLX1NDT1Y1CQkJCS8qIFNDTyBPU1I1ICh0ZXN0ZWQgb24gNS4wLjUpKi8KLSNkZWZpbmUg TkVUUFRZCi0jZWxzZQotI2lmZGVmIFFOWAkJCQkvKiBRTlggKHRlc3RlZCBvbiA0LjI1KSAqLwot I2RlZmluZSBORVRQVFkKLSNlbHNlCi0jaWZkZWYgU0lOSVggICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogU2luaXggKHRlc3RlZCBvbiA1LjQyKSAqLwotI2RlZmluZSBORVRQVFkKLSNlbHNl Ci0jaWZkZWYgREdVWDU0MAkJCQkvKiBERy9VWCA1LjQrKyAodGVzdGVkIG9uIDUuNFI0LjExKSAq LwotI2RlZmluZSBORVRQVFkKLSNlbHNlCi0jaWZkZWYgT1NGMzIJCQkJLyogRGlnaXRhbCBVbml4 IDMuMiAqLwotI2RlZmluZSBORVRQVFkKLSNlbHNlCi0jaWZkZWYgT1NGNDAJCQkJLyogRGlnaXRh bCBVbml4IDQuMCAvIFRydTY0ICovCi0jZGVmaW5lIE5FVFBUWQotI2Vsc2UKLSNpZmRlZiBJUklY NjAJCQkJLyogSVJJWCA2LjAgKG5vdCBlYXJsaWVyKSAqLwotI2RlZmluZSBORVRQVFkKLSNlbHNl Ci0jaWZkZWYgSFBVWDEwCQkJCS8qIEhQVVggMTAuMDAgb3IgbGF0ZXIgKi8KLSNkZWZpbmUgTkVU UFRZCi0jaWZuZGVmIEhBVkVfUFRZVFJBUAotI2RlZmluZSBIQVZFX1BUWVRSQVAKLSNlbmRpZiAv KiBIQVZFX1BUWVRSQVAgKi8KLSNlbHNlCi0jaWZkZWYgSFBVWDkJCQkJLyogSFBVWCA5LjAwIChu b3QgZWFybGllcikgKi8KLSNkZWZpbmUgTkVUUFRZCi0jaWZuZGVmIEhBVkVfUFRZVFJBUAotI2Rl ZmluZSBIQVZFX1BUWVRSQVAKLSNlbmRpZiAvKiBIQVZFX1BUWVRSQVAgKi8KLSNlbHNlCi0jaWZk ZWYgQlNENDQJCQkJLyogQlNENDQsIHtOZXQsRnJlZSxPcGVufUJTRCAqLwotI2RlZmluZSBORVRQ VFkKLSNlbHNlCi0jaWZkZWYgQlNESQkJCQkvKiBCU0RJL09TICh0ZXN0ZWQgaW4gNCkgKi8KLSNk ZWZpbmUgTkVUUFRZCi0jZWxzZQotI2lmZGVmIFNPTEFSSVMJCQkJLyogU29sYXJpcyAodGVzdGVk IGluIDIuNSkgKi8KLSNkZWZpbmUgTkVUUFRZCi0jZWxzZQotI2lmZGVmIFVXNwkJCQkvKiBVbml4 d2FyZSA3ICovCi0jZGVmaW5lIE5FVFBUWQotI2Vsc2UKLSNpZmRlZiBTVU5PUzQxCQkJCS8qIFN1 bk9TICh0ZXN0ZWQgaW4gNC4xLjMpICovCi0jZGVmaW5lIE5FVFBUWQotI2Vsc2UKLSNpZmRlZiBB SVg0MQkJCQkvKiBBSVggNC4xIGFuZCBsYXRlciAqLwotI2RlZmluZSBORVRQVFkKLSNlbHNlCi0j aWZkZWYgTElOVVgJCQkJLyogTGludXggKi8KLSNkZWZpbmUgTkVUUFRZCi0jZW5kaWYgLyogTElO VVggKi8KLSNlbmRpZiAvKiBBSVg0MSAqLwotI2VuZGlmIC8qIFNVTk9TNDEgKi8KLSNlbmRpZiAv KiBVVzcgKi8KLSNlbmRpZiAvKiBTT0xBUklTICovCi0jZW5kaWYgLyogQlNESSAqLwotI2VuZGlm IC8qIEJTRDQ0ICovCi0jZW5kaWYgLyogSFBVWDkgKi8KLSNlbmRpZiAvKiBIUFVYMTAgKi8KLSNl bmRpZiAvKiBJUklYNjAgKi8KLSNlbmRpZiAvKiBPU0Y0MCAqLwotI2VuZGlmIC8qIE9TRjMyICov Ci0jZW5kaWYgLyogREdVWDU0MCAqLwotI2VuZGlmIC8qIFNJTklYICovCi0jZW5kaWYgLyogUU5Y ICovCi0jZW5kaWYgLyogQ0tfU0NPVjUgKi8KLSNlbmRpZiAvKiBORVhUICovCi0KLSNlbHNlIC8q IE5PUFRZICovCi0KLSNpZmRlZiBORVRQVFkKLSN1bmRlZiBORVRQVFkKLSNlbmRpZiAvKiBORVRQ VFkgKi8KLSNlbmRpZiAvKiBOT1BUWSAqLwotCi0jaWZkZWYgTkVUUFRZICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogTkVUQ01EIHJlcXVpcmVkIGZvciBORVRQVFkgKi8KLSNpZm5kZWYgTkVU Q01ECi0jZGVmaW5lIE5FVENNRAotI2VuZGlmIC8qIE5FVENNRCAqLwotI2VuZGlmIC8qIE5FVFBU WSAqLwotCi0jaWZuZGVmIENLX1VUU05BTUUJCQkvKiBDYW4gd2UgY2FsbCB1bmFtZSgpPyAqLwot I2lmZGVmIFZNUwotI2RlZmluZSBDS19VVFNOQU1FCi0jZWxzZQotI2lmZGVmIE9TMgotI2RlZmlu ZSBDS19VVFNOQU1FCi0jZWxzZQotI2lmZGVmIFBPU0lYCQkJCS8qIEl0J3MgaW4gUE9TSVguMSAq LwotI2RlZmluZSBDS19VVFNOQU1FCi0jZWxzZQotI2lmZGVmIFNVTk9TNDEJCQkJLyogSXQncyBp biBTdW5PUyA0LjEgKi8KLSNkZWZpbmUgQ0tfVVRTTkFNRQotI2Vsc2UKLSNpZmRlZiBBSVhSUwkJ CQkvKiBJdCdzIGluIEFJWCAqLwotI2RlZmluZSBDS19VVFNOQU1FCi0jZWxzZQotI2lmZGVmIFNW UjQJCQkJLyogSXQncyBpbiBTVlI0IChidXQgbm90IFNWUjMpICovCi0jZGVmaW5lIENLX1VUU05B TUUKLSNlbHNlCi0jaWZkZWYgSFBVWAkJCQkvKiBJdCdzIGluIEhQLVVYIDUuMDAgYW5kIGxhdGVy ICovCi0jZGVmaW5lIENLX1VUU05BTUUKLSNlbHNlCi0jaWZkZWYgT1NGCQkJCS8qIEl0J3MgaW4g T1NGLzEgLyBEaWdpdGFsIFVOSVggKi8KLSNkZWZpbmUgQ0tfVVRTTkFNRQotI2Vsc2UKLSNpZmRl ZiBDS19TQ09WNQotI2RlZmluZSBDS19VVFNOQU1FCi0jZW5kaWYgLyogQ0tfU0NPVjUgKi8KLSNl bmRpZiAvKiBPU0YgKi8KLSNlbmRpZiAvKiBIUFVYICovCi0jZW5kaWYgLyogU1ZSNCAqLwotI2Vu ZGlmIC8qIEFJWFJTICovCi0jZW5kaWYgLyogU1VOT1M0MSAqLwotI2VuZGlmIC8qIFBPU0lYICov Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogQ0tfVVRTTkFN RSAqLwotCi0vKiBUaGlzIHNlY3Rpb24gZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgdXNlIGZsb2F0 aW5nLXBvaW50ICovCi0KLS8qIElmIHRoZSBmb2xsb3dpbmcgY2F1c2VzIHRyb3VibGUgdXNlIC1E RkxPQVQ9ZmxvYXQgb24gdGhlIGNvbW1hbmQgbGluZSAqLwotCi0jaWZkZWYgTk9TUEwKLSNpZmRl ZiBGTkZMT0FUCi0jdW5kZWYgRk5GTE9BVAotI2VuZGlmIC8qIEZORkxPQVQgKi8KLSNpZmRlZiBD S0ZMT0FUCi0jdW5kZWYgQ0tGTE9BVAotI2VuZGlmIC8qIENLRkxPQVQgKi8KLSNlbmRpZiAvKiBO T1NQTCAqLwotCi0jaWZuZGVmIE5PRkxPQVQKLQotI2lmbmRlZiBDS0ZMT0FUCi0jaWZkZWYgX19h bHBoYQotLyogRG9uJ3QgdXNlIGRvdWJsZSBvbiA2NC1iaXQgcGxhdGZvcm1zIC0tIGJhZCB0aGlu Z3MgaGFwcGVuICovCi0jZGVmaW5lIENLRkxPQVQgZmxvYXQKLSNkZWZpbmUgQ0tGTE9BVF9TICJm bG9hdCIKLSNlbHNlCi0jZGVmaW5lIENLRkxPQVQgZG91YmxlCi0jZGVmaW5lIENLRkxPQVRfUyAi ZG91YmxlIgotI2VuZGlmIC8qIF9fYWxwaGEgKi8KLSNlbmRpZiAvKiBDS0ZMT0FUICovCi0KLSNp Zm5kZWYgTk9HRlRJTUVSCQkJLyogRmxvYXRpbmctcG9pbnQgdGltZXJzICovCi0jaWZuZGVmIEdG VElNRVIKLSNpZmRlZiBVTklYCQkJCS8qIEZvciBVTklYICovCi0jZGVmaW5lIEdGVElNRVIKLSNl bmRpZiAvKiBVTklYICovCi0jaWZkZWYgVk1TCQkJCS8qIFZNUyAqLwotI2lmbmRlZiBPTERfVk1T CQkJCS8qIDUuMCBhbmQgbGF0ZXIgKi8KLSNkZWZpbmUgR0ZUSU1FUgotI2VuZGlmIC8qIE9MRF9W TVMgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNpZmRlZiBPUzIJCQkJLyogQW5kIEs5NSAqLwotI2Rl ZmluZSBHRlRJTUVSCi0jZW5kaWYgLyogT1MyICovCi0jaWZkZWYgU1RSQVRVUwkJCQkvKiBBbmQg U3RyYXR1cyBWT1MgKi8KLSNkZWZpbmUgR0ZUSU1FUgotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSNl bmRpZiAvKiBHRlRJTUVSICovCi0jZW5kaWYgLyogTk9HRlRJTUVSICovCi0KLSNpZm5kZWYgTk9T UEwKLSNpZm5kZWYgRk5GTE9BVAkJCQkvKiBGbG9hdGluZy1wb2ludCBtYXRoIGZ1bmN0aW9ucyAq LwotI2lmZGVmIFZNUwkJCQkvKiBkZWZpbmVkIGJ5IGRlZmF1bHQgaW4gVk1TICovCi0jZGVmaW5l IEZORkxPQVQKLSNlbHNlCi0jaWZkZWYgT1MyCQkJCS8qIGFuZCBLOTUgKi8KLSNkZWZpbmUgRk5G TE9BVAotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIEZORkxP QVQgKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jZWxzZSAgLyogTk9GTE9BVCBpcyBkZWZpbmVk ICovCi0KLSNpZmRlZiBDS0ZMT0FUCi0jdW5kZWYgQ0tGTE9BVAotI2VuZGlmIC8qIENLRkxPQVQg Ki8KLQotI2lmZGVmIEdGVElNRVIKLSN1bmRlZiBHRlRJTUVSCi0jZW5kaWYgLyogR0ZUSU1FUiAq LwotCi0jaWZkZWYgRk5GTE9BVAotI3VuZGVmIEZORkxPQVQKLSNlbmRpZiAvKiBGTkZMT0FUICov Ci0KLSNlbmRpZiAvKiBOT0ZMT0FUICovCi0KLSNpZmRlZiBHRlRJTUVSCQkJCS8qIEZyYWN0aW9u IG9mIHNlY29uZCB0byB1c2Ugd2hlbiAqLwotI2lmbmRlZiBHRk1JTlRJTUUJCQkvKiBlbGFwc2Vk IHRpbWUgaXMgPD0gMCAqLwotI2RlZmluZSBHRk1JTlRJTUUgMC4wMDUKLSNlbmRpZiAvKiBHRk1J TlRJTUUgKi8KLSNlbmRpZiAvKiBHRlRJTUVSICovCi0KLSNpZm5kZWYgQ0tDTUFJCi1leHRlcm4g bG9uZyB6dG1zZWMsIHp0dXNlYzsJCS8qIEZyYWN0aW9uIG9mIHNlYyBvZiBjdXJyZW50IHRpbWUg Ki8KLSNlbmRpZiAvKiBDS0NNQUkgKi8KLQotI2lmbmRlZiBOT1VOUFJFRklYWkVSTwkJCS8qIEFs bG93IHVucHJlZml4aW5nIG9mIE5VTCAoMCkgKi8KLSNpZm5kZWYgVU5QUkVGSVhaRVJPCQkJLyog aW4gZmlsZS10cmFuc2ZlciBwYWNrZXRzICovCi0jZGVmaW5lIFVOUFJFRklYWkVSTwotI2VuZGlm IC8qIFVOUFJFRklYWkVSTyAqLwotI2VuZGlmIC8qIE5PVU5QUkVGSVhaRVJPICovCi0KLSNpZmRl ZiBDS19TTUFMTAotI2RlZmluZSBOT0NBTAkJCQkvKiBDYWxpYnJhdGUgKi8KLSNlbmRpZiAvKiBD S19TTUFMTCAqLwotCi0jaWZuZGVmIE5PUEFUVEVSTlMJCQkvKiBGaWxldHlwZSBtYXRjaGluZyBw YXR0ZXJucyAqLwotI2lmbmRlZiBQQVRURVJOUwotI2lmbmRlZiBWTVMKLSNpZm5kZWYgQ0tfU01B TEwKLSNkZWZpbmUgUEFUVEVSTlMKLSNlbmRpZiAvKiBDS19TTUFMTCAqLwotI2VuZGlmIC8qIFZN UyAqLwotI2VuZGlmIC8qIFBBVFRFUk5TICovCi0jZW5kaWYgLyogTk9QQVRURVJOUyAqLwotCi0j aWZuZGVmIE5PQ0FMCi0jaWZuZGVmIENBTElCUkFURQotI2RlZmluZSBDQUxJQlJBVEUKLSNlbmRp ZiAvKiBDQUxJQlJBVEUgKi8KLSNlbHNlCi0jaWZkZWYgQ0FMSUJSQVRFCi0jdW5kZWYgQ0FMSUJS QVRFCi0jZW5kaWYgLyogQ0FMSUJSQVRFICovCi0jZW5kaWYgLyogTk9DQUwgKi8KLQotI2lmbmRl ZiBOT1JFQ1VSU0UJCQkvKiBSZWN1cnNpdmUgZGlyZWN0b3J5IHRyYXZlcnNhbCAqLwotI2lmbmRl ZiBSRUNVUlNJVkUKLSNpZmRlZiBWTVMKLSNkZWZpbmUgUkVDVVJTSVZFCi0jZWxzZQotI2lmZGVm IE9TMk9SVU5JWAotI2lmbmRlZiBDS19TTUFMTAotI2RlZmluZSBSRUNVUlNJVkUKLSNlbmRpZiAv KiBDS19TTUFMTCAqLwotI2Vsc2UKLSNpZmRlZiBTVFJBVFVTCi0jZGVmaW5lIFJFQ1VSU0lWRQot I2Vsc2UKLSNpZmRlZiBPU0sKLSNkZWZpbmUgUkVDVVJTSVZFCi0jZW5kaWYgLyogT1NLICovCi0j ZW5kaWYgLyogU1RSQVRVUyAqLwotI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwotI2VuZGlmIC8qIFZN UyAqLwotI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLwotI2VuZGlmIC8qIE5PUkVDVVJTRSAqLwotCi0j aWZuZGVmIENLX1NNQUxMCQkJLyogRW5hYmxlIGZpbGUtdHJhbnNmZXIgdHVuaW5nIGNvZGUgKi8K LSNpZm5kZWYgQ0tUVU5JTkcJCQkvKiBpbiB3aGljaCBtb3JlIGNvZGUgaXMgYWRkZWQgKi8KLSNp Zm5kZWYgTk9UVU5JTkcJCQkvKiB0byBhdm9pZCBmdW5jdGlvbiBjYWxscywgZXRjICovCi0jZGVm aW5lIENLVFVOSU5HCi0jZW5kaWYgLyogTk9UVU5JTkcgKi8KLSNlbmRpZiAvKiBDS1RVTklORyAq LwotI2VuZGlmIC8qIENLX1NNQUxMICovCi0KLSNpZm5kZWYgTk9VUkwJCQkJLyogUGFyc2UgVVJM cyBpbiBTRVQgSE9TVCwgZXRjICovCi0jZGVmaW5lIENLX1VSTAotI2RlZmluZSBOT19GVFBfQVVU SCAgICAgICAgICAgICAgICAgICAgIC8qIE5vIGF1dGggImZ0cCIgLyAiYW5vbnltb3VzIiAqLwot I2VuZGlmIC8qIE5PVVJMICovCi0KLSNpZm5kZWYgTk9UUklHR0VSCi0jaWZuZGVmIENLX1RSSUdH RVIJCQkvKiBUcmlnZ2VyIHN0cmluZyB0byBleGl0IENPTk5FQ1QgKi8KLSNpZmRlZiBPUzJPUlVO SVgJCQkvKiBPSyBmb3IgVU5JWCBhbmQgSzk1ICovCi0jZGVmaW5lIENLX1RSSUdHRVIKLSNlbHNl Ci0jaWZkZWYgVk1TCQkJCS8qIGFuZCBWTVMgKi8KLSNkZWZpbmUgQ0tfVFJJR0dFUgotI2Vsc2UK LSNpZmRlZiBkYXRhZ2VuZXJhbAkJCS8qIGFuZCBBT1MvVlMgKi8KLSNkZWZpbmUgQ0tfVFJJR0dF UgotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyogT1MyT1JVTklYICovCi0jZW5k aWYgLyogVk1TICovCi0jZW5kaWYgLyogQ0tfVFJJR0dFUiAqLwotI2VuZGlmIC8qIE5PVFJJR0dF UiAqLwotCi0jaWZkZWYgQ0tfVFJJR0dFUgotI2RlZmluZSBUUklHR0VSUyA4CQkJLyogSG93IG1h bnkgdHJpZ2dlcnMgYWxsb3dlZCAqLwotI2VuZGlmIC8qIENLX1RSSUdHRVIgKi8KLQotI2lmbmRl ZiBYTElNSVRTCQkJCS8qIENPTk5FQ1QgbGltaXRzICovCi0jaWZkZWYgT1MyCi0jZGVmaW5lIFhM SU1JVFMKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBYTElNSVRTICovCi0KLSNpZmRlZiBO T0ZSSUxMUwotI2lmbmRlZiBOT0JST1dTRVIKLSNkZWZpbmUgTk9CUk9XU0VSCi0jZW5kaWYgLyog Tk9CUk9XU0VSICovCi0jaWZuZGVmIE5PRlRQCi0jZGVmaW5lIE5PRlRQCi0jZW5kaWYgLyogTk9G VFAgKi8KLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotCi0jaWZuZGVmIE5PSFRUUAkJCQkvKiBIVFRQ IGZlYXR1cmVzIG5lZWQuLi4gKi8KLSNpZmRlZiBOT0lDUAkJCQkvKiBhbiBpbnRlcmFjdGl2ZSBj b21tYW5kIHBhcnNlciAqLwotI2RlZmluZSBOT0hUVFAKLSNlbmRpZiAvKiBOT0lDUCAqLwotI2lm bmRlZiBWTVMKLSNpZm5kZWYgT1MyT1JVTklYCQkJLyogSzk1IG9yIFVOSVggKGJlY2F1c2Ugb2Yg Ki8KLSNkZWZpbmUgTk9IVFRQCQkJCS8qIHRpbWUgZnVuY3Rpb25zLCB0aW1lX3QsIGV0YykgKi8K LSNlbmRpZiAvKiBPUzJPUlVOSVggKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBOT0hU VFAgKi8KLQotCi0jaWZuZGVmIE5PTkVUCi0jaWZkZWYgVENQU09DS0VUCi0KLS8qIFRoZSBIVFRQ IGNvZGUgaXMgbm90IHZlcnkgcG9ydGFibGUsIHNvIGl0IG11c3QgYmUgYXNrZWQgZm9yIHdpdGgg LURDS0hUVFAgKi8KLQotI2lmbmRlZiBOT0hUVFAKLSNpZm5kZWYgQ0tIVFRQCi0jaWZkZWYgU1VO T1M0CQkJCS8qIFdlIGNhbiB1c2UgaXQgaW4gU3VuT1MgKi8KLSNkZWZpbmUgQ0tIVFRQCi0jZW5k aWYgLyogU1VOT1M0ICovCi0jaWZkZWYgU09MQVJJUwkJCQkvKiBBbmQgaW4gU29sYXJpcyAqLwot I2RlZmluZSBDS0hUVFAKLSNlbmRpZiAvKiBTT0xBUklTICovCi0jaWZkZWYgTElOVVgJCQkJLyog QW5kIExpbnV4ICovCi0jZGVmaW5lIENLSFRUUAotI2VuZGlmIC8qIExJTlVYICovCi0jaWZkZWYg SFBVWDEwCQkJCS8qIEFuZCBIUC1VWCAxMCBhbmQgYWJvdmUgKi8KLSNkZWZpbmUgQ0tIVFRQCi0j ZW5kaWYgLyogSFBVWDEwICovCi0jaWZkZWYgT1MyCQkJCS8qIEFuZCBpbiBLLTk1ICovCi0jZGVm aW5lIENLSFRUUAotI2VuZGlmIC8qIE9TMiAqLwotI2lmZGVmIEFJWDQxCQkJCS8qIEluIEFJWCA0 LjEgYW5kIGhpZ2hlciAqLwotI2RlZmluZSBDS0hUVFAKLSNlbmRpZiAvKiBBSVg0MSAqLwotI2lm ZGVmIFVOSVhXQVJFCQkJCS8qIEluIFVuaXh3YXJlIDIuMSBhbmQgaGlnaGVyICovCi0jZGVmaW5l IENLSFRUUAkJCQkvKiBhbmQgcHJvYmFibHkgYWxzbyBpbiAxLnggYW5kIDIuMCAqLwotI2VuZGlm IC8qIFVOSVhXQVJFICovCi0jaWZkZWYgQ0tfU0NPVjUKLSNkZWZpbmUgQ0tIVFRQCi0jZW5kaWYg LyogQ0tfU0NPVjUgKi8KLSNpZmRlZiBPU0YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBBbmQgaW4gT1NGIERpZ2l0YWwgVU5JWC9UcnVlIDY0ICovCi0jZGVmaW5lIENLSFRUUAotI2Vu ZGlmIC8qIE9TRiAqLwotI2lmZGVmIHVsdHJpeCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IEFuZCBpbiBVbHRyaXggTWlwcyAqLwotI2lmZGVmIG1pcHMKLSNkZWZpbmUgQ0tIVFRQCi0jZW5k aWYgLyogbWlwcyAqLwotI2VuZGlmIC8qIHVsdHJpeCAqLwotI2lmZGVmIF9fTmV0QlNEX18JCQkv KiBOZXRCU0QgKi8KLSNkZWZpbmUgQ0tIVFRQCi0jZW5kaWYJLyogX19OZXRCU0RfXyAqLwotI2lm ZGVmIF9fRnJlZUJTRF9fCi0jZGVmaW5lIENLSFRUUAotI2VuZGlmCS8qIF9fRnJlZUJTRF9fICov Ci0jaWZkZWYgX19PcGVuQlNEX18KLSNkZWZpbmUgQ0tIVFRQCi0jZW5kaWYJLyogX19PcGVuQlNE X18gKi8KLS8qIEFkZCBtb3JlIGhlcmUuLi4gKi8KLSNlbmRpZiAvKiBDS0hUVFAgKi8KLSNpZm5k ZWYgQ0tIVFRQCQkJCS8qIElmIENLSFRUUCBub3QgZGVmaW5lZCB5ZXQgKi8KLSNkZWZpbmUgTk9I VFRQCQkJCS8qIHRoZW4gZGVmaW5lIE5PSFRUUCAqLwotI2VuZGlmIC8qIENLSFRUUCAqLwotI2Vu ZGlmIC8qIE5PSFRUUCAqLwotCi0jaWZkZWYgTkVUQ09OTgkJCQkvKiBTcGVjaWFsICJuZXR3b3Jr IiB0eXBlcy4uLiAqLwotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0jaWZuZGVmIE5FVEZJ TEUKLSNkZWZpbmUgTkVURklMRQotI2VuZGlmIC8qIE5FVEZJTEUgKi8KLSNpZm5kZWYgTk9QVVNI Ci0jaWZuZGVmIE5FVENNRAotI2RlZmluZSBORVRDTUQKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSNl bmRpZiAvKiBOT1BVU0ggKi8KLSNpZmRlZiBOVAotI2lmbmRlZiBORVRETEwKLSNkZWZpbmUgTkVU RExMCi0jZW5kaWYgLyogTkVURExMICovCi0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBPUzIg Ki8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotCi0jaWZuZGVm IE5PRlRQCi0jaWZuZGVmIFNZU0ZUUAotI2lmbmRlZiBORVdGVFAKLSNpZmRlZiBPUzJPUlVOSVgK LSNkZWZpbmUgTkVXRlRQCi0jZW5kaWYgLyogT1MyT1JVTklYICovCi0jZW5kaWYgLyogTkVXRlRQ ICovCi0jZW5kaWYgLyogU1lTRlRQICovCi0jZW5kaWYgLyogTk9GVFAgKi8KLQotI2lmbmRlZiBO T0ZUUAotI2lmZGVmIE5FV0ZUUAotI2lmZGVmIFNZU0ZUUAotI3VuZGVmIFNZU0ZUUAotI2VuZGlm IC8qIFNZU0ZUUCAqLwotI2Vsc2UgLyogTkVXRlRQICovCi0jaWZuZGVmIFNZU0ZUUAotI2RlZmlu ZSBTWVNGVFAKLSNlbmRpZiAvKiBTWVNGVFAgKi8KLSNlbmRpZiAvKiBORVdGVFAgKi8KLSNlbHNl IC8qIE5PRlRQICovCi0jaWZkZWYgTkVXRlRQCi0jdW5kZWYgTkVXRlRQCi0jZW5kaWYgLyogTkVX RlRQICovCi0jaWZkZWYgU1lTRlRQCi0jdW5kZWYgU1lTRlRQCi0jZW5kaWYgLyogU1lTRlRQICov Ci0jZW5kaWYgLyogTk9GVFAgKi8KLQotI2lmbmRlZiBOT0JST1dTRVIKLSNpZmRlZiBVTklYCi0j aWZuZGVmIEJST1dTRVIKLSNpZm5kZWYgTk9QVVNICi0jZGVmaW5lIEJST1dTRVIKLSNlbmRpZiAv KiBOT1BVU0ggKi8KLSNlbmRpZiAvKiBCUk9XU0VSICovCi0jZW5kaWYgLyogVU5JWCAqLwotI2lm ZGVmIE9TMgotI2lmbmRlZiBCUk9XU0VSCi0jaWZuZGVmIE5PUFVTSAotI2RlZmluZSBCUk9XU0VS Ci0jZW5kaWYgLyogTk9QVVNIICovCi0jZW5kaWYgLyogQlJPV1NFUiAqLwotI2VuZGlmIC8qIE9T MiAqLwotI2Vsc2UKLSNpZmRlZiBCUk9XU0VSCi0jdW5kZWYgQlJPV1NFUgotI2VuZGlmIC8qIEJS T1dTRVIgKi8KLSNlbmRpZiAvKiBOT0JST1dTRVIgKi8KLQotI2Vsc2UgLyogVENQU09DS0VUICov Ci0jaWZuZGVmIE5PSFRUUCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSFRUUCByZXF1aXJl cyBUQ1BTT0NLRVQgKi8KLSNkZWZpbmUgTk9IVFRQCi0jZW5kaWYgLyogTk9IVFRQICovCi0jZW5k aWYgLyogVENQU09DS0VUICovCi0jZW5kaWYgLyogTk9ORVQgKi8KLQotI2lmZGVmIFRDUFNPQ0tF VAotI2lmbmRlZiBOT0NLR0VURlFIT1NUCi0jaWZkZWYgX19pYTY0X18KLSNkZWZpbmUgTk9DS0dF VEZRSE9TVAotI2Vsc2UgIC8qIF9faWE2NF9fICovCi0jaWZkZWYgU1Y2OAotI2RlZmluZSBOT0NL R0VURlFIT1NUCi0jZWxzZQotI2lmZGVmIEhQVVhQUkU2NQotI2RlZmluZSBOT0NLR0VURlFIT1NU Ci0jZW5kaWYgLyogSFBVWFBSRTY1ICovCi0jZW5kaWYgLyogU1Y2OCAqLwotI2VuZGlmIC8qIF9f aWE2NCAqLwotI2VuZGlmIC8qIE5PQ0tHRVRGUUhPU1QgKi8KLS8qCi0gIFJlZ2FyZGluZyBTeXN0 ZW0gVi82OCAoU1Y2OCkgKGZyb20gR2VycnkgQmVsYW5nZXIsIE9jdCAyMDAyKToKLQotICAgIDEp IFRoZSBnZXRob3N0YnluYW1lKCkgYXBwZWFycyB0byByZXR1cm4gdGhlIGFjdHVhbCBob3N0IElQ Ci0gICAgICAgYWRkcmVzcyBpbiB0aGUgaG9zdGVudCBzdHJ1Y3QsIGluc3RlYWQgb2YgdGhlIGV4 cGVjdGVkIHBvaW50ZXIKLSAgICAgICB0byB0aGUgYWRkcmVzcy4gSGVuY2UgdGhlIGJvZ3VzIGFk ZHJlc3MgaW4gdGhlIGJjb3B5L21lbWNvcHkuCi0gICAgICAgVGhpcyBpcyBkZXNwaXRlIHRoZSBo ZWFkZXIgYWdyZWVpbmcgd2l0aCBvdXIgZXhwZWN0YXRpb25zLgotCi0gICAgMikgdGhlIGV4cGVj dGVkIGFyZ3VtZW50IHN3YXAgYmV0d2VlbiBiY29weSBhbmQgbWVtY29weQotICAgICAgIGRpZCBu b3QgaGFwcGVuLiAgV2hhdCBncmllZiB0aGlzIG1pZ2h0IGNhdXNlLCBJIGtub3cgbm90LgotKi8K LSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLQotI2lmZGVmIFRDUFNPQ0tFVAotI2lmZGVmIE9TMk9O TFkKLSNpZm5kZWYgTk9TT0NLUwotI2RlZmluZSBOT1NPQ0tTCi0jZW5kaWYgLyogTk9TT0NLUyAq LwotI2VuZGlmIC8qIE9TMk9OTFkgKi8KLSNpZmRlZiBOT1NPQ0tTCi0jaWZkZWYgQ0tfU09DS1MK LSN1bmRlZiBDS19TT0NLUwotI2VuZGlmIC8qIENLX1NPQ0tTICovCi0jaWZkZWYgQ0tfU09DS1M1 Ci0jdW5kZWYgQ0tfU09DS1M1Ci0jZW5kaWYgLyogQ0tfU09DS1M1ICovCi0jZWxzZSAvKiBOT1NP Q0tTICovCi0jaWZkZWYgTlQKLSNpZm5kZWYgQ0tfU09DS1MKLSNkZWZpbmUgQ0tfU09DS1MKLSNl bmRpZiAvKiBDS19TT0NLUyAqLwotI2VuZGlmIC8qIE5UICovCi0jaWZkZWYgQ0tfU09DS1M1CQkJ LyogQ0tfU09DS1M1IGltcGxpZXMgQ0tfU09DS1MgKi8KLSNpZm5kZWYgQ0tfU09DS1MKLSNkZWZp bmUgQ0tfU09DS1MKLSNlbmRpZiAvKiBDS19TT0NLUyAqLwotI2VuZGlmIC8qIENLX1NPQ0tTNSAq LwotI2VuZGlmIC8qIE5PU09DS1MgKi8KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLQotI2lmZGVm IFROQ09ERQotI2lmbmRlZiBDS19BVVRIRU5USUNBVElPTgotI2lmZGVmIE9TMgotI2lmZGVmIF9N X1BQQwotI2RlZmluZSBOT19LRVJCRVJPUwotI2RlZmluZSBOT19TUlAKLSNlbHNlIC8qIF9NX1BQ QyAqLwotI2lmbmRlZiBOT19TU0wKLSNkZWZpbmUgQ0tfU1NMCi0jZGVmaW5lIFNTTERMTAotI2Vu ZGlmIC8qIE5PX1NTTCAqLwotI2VuZGlmIC8qIF9NX1BQQyAqLwotI2lmbmRlZiBOT19LRVJCRVJP UwotI2RlZmluZSBDS19LRVJCRVJPUwotI2RlZmluZSBLUkI0Ci0jZGVmaW5lIEtSQjUKLSNkZWZp bmUgS1JCNTI0Ci0jZGVmaW5lIEtSQjUyNF9DT05WCi0jaWZkZWYgTlQKLSNpZm5kZWYgX01fUFBD Ci0jaWZuZGVmIF9NX0FMUEhBCi0jaWZuZGVmIE5PX1NTTF9LUkI1Ci0jZGVmaW5lIFNTTF9LUkI1 Ci0jZW5kaWYgLyogTk9fU1NMX0tSQjUgKi8KLSNlbmRpZiAvKiBfTV9BTFBIQSAqLwotI2VuZGlm IC8qIF9NX1BQQyAqLwotI2VuZGlmIC8qIE5UICovCi0jZW5kaWYgLyogTk9fS0VSQkVST1MgKi8K LSNpZm5kZWYgTk9fU1JQCi0jZGVmaW5lIENLX1NSUAotI2VuZGlmIC8qIE5PX1NSUCAqLwotI2Rl ZmluZSBDS19BVVRIRU5USUNBVElPTgotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIENLX0FV VEhFTlRJQ0FUSU9OICovCi0KLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgkJLyogRW5jcnlwdGlv biBtdXN0IGhhdmUgQXV0aCAqLwotI2lmbmRlZiBDS19FTkNSWVBUSU9OCi0jaWZuZGVmIE5PX0VO Q1JZUFRJT04KLSNpZmRlZiBPUzIKLSNkZWZpbmUgQ0tfRU5DUllQVElPTgotI2RlZmluZSBDS19E RVMKLSNkZWZpbmUgQ0tfQ0FTVAotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PX0VOQ1JZ UFRJT04gKi8KLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jZW5kaWYgLyogQ0tfQVVUSEVO VElDQVRJT04gKi8KLQotI2lmZGVmIE5PX0FVVEhFTlRJQ0FUSU9OICAgICAgICAgICAgICAgIC8q IEFsbG93IGF1dGhlbnRpY2F0aW9uIHRvIGJlICovCi0jaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04g ICAgICAgICAgICAgICAgLyogZGlzYWJsZWQgaW4gTlQgYW5kIE9TLzIgICAgKi8KLSN1bmRlZiBD S19BVVRIRU5USUNBVElPTgotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0jaWZkZWYg Q0tfS0VSQkVST1MKLSN1bmRlZiBDS19LRVJCRVJPUwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICov Ci0jaWZkZWYgQ0tfU1JQCi0jdW5kZWYgQ0tfU1JQCi0jZW5kaWYgLyogQ0tfU1JQICovCi0jaWZk ZWYgQ0tfRU5DUllQVElPTgotI3VuZGVmIENLX0VOQ1JZUFRJT04KLSNlbmRpZiAvKiBDS19FTkNS WVBUSU9OICovCi0jZW5kaWYgLyogTk9fQVVUSEVOVElDQVRJT04gKi8KLQotI2lmZGVmIE5PX0VO Q1JZUFRJT04gICAgICAgICAgICAgICAgICAgIC8qIEFsbG93IGVuY3J5cHRpb24gdG8gYmUgKi8K LSNpZmRlZiBDS19FTkNSWVBUSU9OICAgICAgICAgICAgICAgICAgICAvKiBkaXNhYmxlZCBpbiBO VCBhbmQgT1MvMiAqLwotI3VuZGVmIENLX0VOQ1JZUFRJT04KLSNlbmRpZiAvKiBDS19FTkNSWVBU SU9OICovCi0jZW5kaWYgLyogTk9fRU5DUllQVElPTiAqLwotCi0jaWZkZWYgQ0tfS0VSQkVST1Mg ICAgICAvKiBEaXNhYmxlIGZ1bmNzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggSGVpbWRhbCAqLwot I2lmZGVmIEtSQjUKLSNpZm5kZWYgSEVJTURBTAotI2RlZmluZSBLUkI1X1UyVQotI2VuZGlmIC8q IEhFSU1EQUwgKi8KLSNlbmRpZiAvKiBLUkI1ICovCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8K LQotLyoKLSAgU1NIIHNlY3Rpb24uICBOT1NTSCBkaXNhYmxlcyBhbnkgZm9ybSBvZiBTU0ggc3Vw cG9ydC4KLSAgSWYgTk9TU0ggaXMgbm90IGRlZmluZWQgKG9yIGltcGxpZWQgYnkgTk9ORVQsIE5P TE9DQUwsIGV0YykKLSAgdGhlbiBTU0hCVUlMVElOIGlzIGRlZmluZWQgZm9yIEs5NSBhbmQgU1NI Q01EIGlzIGRlZmluZWQgZm9yIFVOSVguCi0gIFRoZW4sIGlmIGVpdGhlciBTU0hCVUlMVElOIG9y IFNTSENNRCBpcyBkZWZpbmVkLCBBTllTU0ggaXMgYWxzbyBkZWZpbmVkLgotKi8KLQotI2lmbmRl ZiBOT1NTSAotI2lmbmRlZiBOT19TU0wKLSNpZmRlZiBPUzJPTkxZCi0jZGVmaW5lIE5PU1NICi0j ZW5kaWYgLyogT1MyT05MWSAqLwotI2lmZGVmIE5UCi0jaWZuZGVmIENLX1NTTAotI2RlZmluZSBO T1NTSAotI2VuZGlmIC8qIENLX1NTTCAqLwotI2VuZGlmIC8qIE5UICovCi0jZWxzZSAvKiBOT19T U0wgKi8KLSNkZWZpbmUgTk9TU0gKLSNlbmRpZiAvKiBOT19TU0wgKi8KLSNlbmRpZiAvKiBOT1NT SCAqLwotCi0jaWZkZWYgTk9TU0gJCQkJLyogTk9TU0ggKi8KLSNpZmRlZiBTU0hCVUlMVElOCQkJ LyogdW5kZWZpbmVzIGFueSBTU0ggc2VsY3RvcnMgKi8KLSN1bmRlZiBTU0hCVUlMVElOCi0jZW5k aWYgLyogU1NIQlVJTFRJTiAqLwotI2lmZGVmIFNGVFBfQlVJTFRJTgotI3VuZGVmIFNGVFBfQlVJ TFRJTgotI2VuZGlmIC8qIFNGVFBfQlVJTFRJTiAqLwotI2lmZGVmIFNTSENNRAotI3VuZGVmIFNT SENNRAotI2VuZGlmIC8qIFNTSENNRCAqLwotI2lmZGVmIEFOWVNTSAotI3VuZGVmIEFOWVNTSAot I2VuZGlmIC8qIEFOWVNTSCAqLwotI2Vsc2UgIC8qIE5vdCBOT1NTSCAqLwotI2lmbmRlZiBOT0xP Q0FMCi0jaWZkZWYgT1MyCi0jaWZuZGVmIFNTSEJVSUxUSU4KLSNkZWZpbmUgU1NIQlVJTFRJTgot I2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KLSNlbHNlICAvKiBOb3QgT1MyICovCi0jaWZkZWYgVU5J WAotI2lmbmRlZiBTU0hDTUQKLSNpZmRlZiBORVRQVFkKLSNpZm5kZWYgTk9QVVNICi0jZGVmaW5l IFNTSENNRAotI2VuZGlmIC8qIE5PUFVTSCAqLwotI2VuZGlmIC8qIE5FVFBUWSAqLwotI2VuZGlm IC8qIFNTSENNRCAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNpZm5k ZWYgQU5ZU1NICi0jaWZkZWYgU1NIQlVJTFRJTgotI2RlZmluZSBBTllTU0gKLSNpZmRlZiBTU0hD TUQKLSN1bmRlZiBTU0hDTUQKLSNlbmRpZiAvKiBTU0hDTUQgKi8KLSNlbHNlICAvKiBTU0hCVUlM VElOICovCi0jaWZkZWYgU1NIQ01ECi0jZGVmaW5lIEFOWVNTSAotI2VuZGlmIC8qIFNTSENNRCAq LwotI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KLSNlbmRpZiAvKiBBTllTU0ggKi8KLSNlbmRpZiAv KiBOT0xPQ0FMICovCi0jZW5kaWYgLyogTk9TU0ggKi8KLQotLyogVGhpcyBpcyBpbiBjYXNlICNp ZmRlZiBTU0ggaXMgdXNlZCBhbnl3aGVyZSBpbiB0aGUgSzk1IG1vZHVsZXMgKi8KLQotI2lmZGVm IE9TMgotI2lmZGVmIFNTSEJVSUxUSU4KLSNpZm5kZWYgU1NICi0jZGVmaW5lIFNTSAotI2VuZGlm IC8qIFNTSCAqLwotI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQot I2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0jZGVmaW5lIENLX1NFQ1VSSVRZCi0jZWxzZQotI2lm ZGVmIENLX1NTTAotI2RlZmluZSBDS19BVVRIRU5USUNBVElPTgotI2RlZmluZSBDS19TRUNVUklU WQotI2VuZGlmIC8qIENLX1NTTCAqLwotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0K LS8qIEVudmlyb25tZW50IHN0dWZmICovCi0KLSNpZm5kZWYgT1MyT1JVTklYCi0jaWZuZGVmIE5P UFVURU5WCi0jZGVmaW5lIE5PUFVURU5WCi0jZW5kaWYgLyogTk9QVVRFTlYgKi8KLSNlbmRpZiAv KiBPUzJPUlVOSVggKi8KLQotI2lmbmRlZiBDS19FTlZJUk9OTUVOVAotI2lmZGVmIE9TMgotI2Rl ZmluZSBDS19FTlZJUk9OTUVOVAotI2Vsc2UKLSNpZmRlZiBVTklYCi0jZGVmaW5lIENLX0VOVklS T05NRU5UCi0jZWxzZQotI2lmZGVmIFNUUkFUVVMKLSNkZWZpbmUgQ0tfRU5WSVJPTk1FTlQKLSNl bHNlCi0jaWZkZWYgVk1TCi0jZGVmaW5lIENLX0VOVklST05NRU5UCi0jZW5kaWYgLyogVk1TICov Ci0jZW5kaWYgLyogU1RSQVRVUyAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBPUzIg Ki8KLSNlbmRpZiAvKiBDS19FTlZJUk9OTUVOVCAqLwotI2lmbmRlZiBOT1NORExPQwkJCS8qIFJG QyA3NzkgU0VORCBMT0NBVElPTiAqLwotI2lmbmRlZiBDS19TTkRMT0MKLSNkZWZpbmUgQ0tfU05E TE9DCi0jZW5kaWYgLyogQ0tfU05ETE9DICovCi0jZW5kaWYgLyogTk9TTkRMT0MgKi8KLSNpZm5k ZWYgTk9YRElTUExPQwkJCS8qIFJGQyAxMDk2IFhESVNQTE9DICovCi0jaWZuZGVmIENLX1hESVNQ TE9DCi0jZGVmaW5lIENLX1hESVNQTE9DCi0jZW5kaWYgLyogQ0tfWERJU1BMT0MgKi8KLSNlbmRp ZiAvKiBOT1hESVNQTE9DICovCi0jaWZuZGVmIE5PRk9SV0FSRFgKLSNpZm5kZWYgTk9QVVRFTlYK LSNpZm5kZWYgTk9TRUxFQ1QKLSNpZm5kZWYgQ0tfRk9SV0FSRF9YCi0jaWZkZWYgQ0tfQVVUSEVO VElDQVRJT04KLSNpZm5kZWYgT1MyT05MWQotI2RlZmluZSBDS19GT1JXQVJEX1gKLSNlbmRpZiAv KiBPUzJPTkxZICovCi0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSNlbmRpZiAvKiBD S19GT1JXQVJEX1ggKi8KLSNlbmRpZiAvKiBOT1NFTEVDVCAqLwotI2VuZGlmIC8qIE5PUFVURU5W ICovCi0jZW5kaWYgLyogTk9GT1JXQVJEWCAqLwotI2lmbmRlZiBOT19DT01QT1JUCi0jaWZkZWYg VENQU09DS0VUCi0jaWZuZGVmIFROX0NPTVBPUlQKLSNkZWZpbmUgVE5fQ09NUE9SVAotI2VuZGlm IC8qIFROX0NPTVBPUlQgKi8KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNlbmRpZiAvKiBOT19D T01QT1JUICovCi0jZW5kaWYgLyogVE5DT0RFICovCi0KLSNpZm5kZWYgTk9YRkVSCi0jaWZuZGVm IE5PQ1RSTFoJCQkJLyogQWxsb3cgU0VUIEZJTEUgRU9GIENUUkwtWiAqLwotI2lmbmRlZiBDS19D VFJMWgotI2lmZGVmIE9TMk9SVU5JWAotI2RlZmluZSBDS19DVFJMWgotI2VuZGlmIC8qIE9TMk9S VU5JWCAqLwotI2VuZGlmIC8qIENLX0NUUkxaICovCi0jZW5kaWYgLyogTk9DVFJMWiAqLwotI2Vu ZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZuZGVmIE5PUEVSTVMJCQkJLyogRmlsZSBwZXJtaXNzaW9u cyBpbiBBIHBhY2tldHMgKi8KLSNpZm5kZWYgQ0tfUEVSTVMKLSNpZmRlZiBVTklYCi0jZGVmaW5l IENLX1BFUk1TCi0jZWxzZQotI2lmZGVmIFZNUwotI2RlZmluZSBDS19QRVJNUwotI2VuZGlmIC8q IFZNUyAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBDS19QRVJNUyAqLwotI2VuZGlm IC8qIE5PUEVSTVMgKi8KLSNpZmRlZiBDS19QRVJNUwotI2RlZmluZSBDS19QRVJNTEVOIDI0CQkJ LyogTWF4IGxlbmd0aCBvZiBzeXMtZGVwZW5kZW50IHBlcm1zICovCi0jZW5kaWYgLyogQ0tfUEVS TVMgKi8KLQotI2lmZGVmIFVOSVgJCQkJLyogTk9TRVRCVUYgZm9yIGV2ZXJ5Ym9keSAqLwotI2lm bmRlZiBOT1NFVEJVRgotI2lmbmRlZiBVU0VfU0VUQlVGCQkJLyogVGhpcyBpcyB0aGUgZXNjYXBl IGNsYXVzZSAqLwotI2RlZmluZSBOT1NFVEJVRgotI2VuZGlmIC8qIFVTRV9TRVRCVUYgKi8KLSNl bmRpZiAvKiBOT1NFVEJVRiAqLwotI2VuZGlmIC8qIFVOSVggKi8KLQotI2lmbmRlZiBVU0VfU1RS RVJST1IJCQkvKiBXaGV0aGVyIHRvIHVzZSBzdHJlcnJvcigpICovCi0jaWZkZWYgcGRwMTEKLSNk ZWZpbmUgVVNFX1NUUkVSUk9SCi0jZW5kaWYgLyogcGRwMTEgKi8KLSNlbmRpZiAvKiBVU0VfU1RS RVJST1IgKi8KLQotI2lmZGVmIFZNUwkJCQkvKiBGZWF0dXJlcyBmb3IgYWxsIFZNUyBidWlsZHMg Ki8KLSNpZm5kZWYgTk9KQwotI2RlZmluZSBOT0pDCi0jZW5kaWYgLyogTk9KQyAqLwotI2lmbmRl ZiBOT1NFVEJVRgotI2RlZmluZSBOT1NFVEJVRgotI2VuZGlmIC8qIE5PU0VUQlVGICovCi0jaWZu ZGVmIERZTkFNSUMKLSNkZWZpbmUgRFlOQU1JQwotI2VuZGlmIC8qIERZTkFNSUMgKi8KLSNpZm5k ZWYgTk9DVVJTRVMKLSNpZm5kZWYgQ0tfQ1VSU0VTCi0jZGVmaW5lIENLX0NVUlNFUwotI2VuZGlm IC8qIENLX0NVUlNFUyAqLwotI2VuZGlmIC8qIE5PQ1VSU0VTICovCi0jZW5kaWYgLyogVk1TICov Ci0KLSNpZm5kZWYgTk9DS1RJTUVSUwkJCS8qIER5bmFtaWMgdGltZW91dHMgKi8KLSNpZm5kZWYg Q0tfVElNRVJTCi0jZGVmaW5lIENLX1RJTUVSUwotI2VuZGlmIC8qIENLX1RJTUVSUyAqLwotI2Vu ZGlmIC8qIE5PQ0tUSU1FUlMgKi8KLQotI2RlZmluZSBDS19TUEVFRAkJCS8qIENvbnRyb2wtcHJl Zml4IHJlbW92YWwgKi8KLSNpZmRlZiBOT0NLU1BFRUQKLSN1bmRlZiBDS19TUEVFRAotI2VuZGlm IC8qIE5PQ0tTUEVFRCAqLwotCi0jaWZuZGVmIE5PQ0tYWENIQVIKLSNpZm5kZWYgQ0tYWENIQVIK LSNpZmRlZiBVTklYCi0jZGVmaW5lIENLWFhDSEFSCi0jZWxzZQotI2lmZGVmIE9TMgotI2RlZmlu ZSBDS1hYQ0hBUgotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAv KiBDS1hYQ0hBUiAqLwotI2VuZGlmIC8qIE5PQ0tYWENIQVIgKi8KLQotI2lmZGVmIE1BQwkJCQkv KiBGb3IgTWFjaW50b3NoLCBubyBlc2NhcGUgKi8KLSNkZWZpbmUgTk9QVVNICQkJCS8qIHRvIG9w ZXJhdGluZyBzeXN0ZW0gKi8KLSNlbmRpZiAvKiBNQUMgKi8KLQotLyogU3lzdGVtcyB3aGVyZSB3 ZSBjYW4gY2FsbCB6bWtkaXIoKSB0byBjcmVhdGUgZGlyZWN0b3JpZXMuICovCi0KLSNpZm5kZWYg Q0tfTUtESVIKLSNpZm5kZWYgTk9NS0RJUgotCi0jaWZkZWYgVU5JWAotI2lmbmRlZiBwZHAxMQot I2RlZmluZSBDS19NS0RJUgotI2VuZGlmIC8qIHBkcDExICovCi0jZW5kaWYgLyogVU5JWCAqLwot Ci0jaWZkZWYgT1MyCi0jZGVmaW5lIENLX01LRElSCi0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRl ZiBWTVMKLSNkZWZpbmUgQ0tfTUtESVIKLSNlbmRpZiAvKiBWTVMgKi8KLQotI2lmZGVmIFNUUkFU VVMKLSNkZWZpbmUgQ0tfTUtESVIKLSNlbmRpZiAvKiBTVFJBVFVTICovCi0KLSNpZmRlZiBPU0sK LSNkZWZpbmUgQ0tfTUtESVIKLSNlbmRpZiAvKiBPU0sgKi8KLQotI2lmZGVmIGRhdGFnZW5lcmFs Ci0jZGVmaW5lIENLX01LRElSCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLQotI2VuZGlmIC8q IENLX01LRElSICovCi0jZW5kaWYgLyogTk9NS0RJUiAqLwotCi0jaWZkZWYgTk9NS0RJUgkJCQkv KiBBbGxvdyBmb3IgY29tbWFuZC1saW5lIG92ZXJyaWRlICovCi0jaWZkZWYgQ0tfTUtESVIKLSN1 bmRlZiBDS19NS0RJUgotI2VuZGlmIC8qIENLX01LRElSICovCi0jZW5kaWYgLyogTk9NS0RJUiAq LwotCi0vKiBTeXN0ZW1zIGZvciB3aGljaCB3ZSBjYW4gZW5hYmxlIHRoZSBSRURJUkVDVCBjb21t YW5kIGF1dG9tYXRpY2FsbHkgKi8KLS8qICAgQXMgb2YgNi4wLjE5MywgaXQgc2hvdWxkIHdvcmsg Zm9yIGFsbCBVTklYLi4uICovCi0KLSNpZm5kZWYgTk9SRURJUkVDVAotI2lmbmRlZiBDS19SRURJ UgotI2lmZGVmIFVOSVgKLSNkZWZpbmUgQ0tfUkVESVIKLSNlbmRpZiAvKiBVTklYICovCi0jaWZk ZWYgT1MyCQkJCS8qIEFzIHdlbGwgYXMgT1MvMiBhbmQgZnJpZW5kcy4uLiAqLwotI2RlZmluZSBD S19SRURJUgotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIENLX1JFRElSICovCi0jZW5kaWYg LyogTk9SRURJUkVDVCAqLwotCi0jaWZkZWYgTk9QVVNICQkJCS8qIEJ1dC4uLiBSRURJUkVDVCBj b21tYW5kIGlzIG5vdCAqLwotI2lmZGVmIENLX1JFRElSCQkJCS8qICBhbGxvd2VkIGlmIE5PUFVT SCBpcyBkZWZpbmVkLiAqLwotI3VuZGVmIENLX1JFRElSCi0jZW5kaWYgLyogQ0tfUkVESVIgKi8K LSNpZmRlZiBORVRDTUQJCQkJLyogTm9yIGlzIFNFVCBORVQgQ09NTUFORCAqLwotI3VuZGVmIE5F VENNRAotI2VuZGlmIC8qIE5FVENNRCAqLwotI2lmZGVmIE5FVFBUWQotI3VuZGVmIE5FVFBUWQot I2VuZGlmIC8qIE5FVFBUWSAqLwotI2VuZGlmIC8qIE5PUFVTSCAqLwotCi0jaWZuZGVmIFBFWElU U1RBVAkJCS8qIFx2KHBleGl0c3RhdCkgdmFyaWFibGUgZGVmaW5lZCAqLwotI2lmZGVmIE9TMk9S VU5JWAotI2RlZmluZSBQRVhJVFNUQVQKLSNlbHNlCi0jaWZkZWYgVk1TCi0jZGVmaW5lIFBFWElU U1RBVAotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwotI2VuZGlmIC8q IFBFWElUU1RBVCAqLwotCi0vKiBUaGUgZm9sbG93aW5nIGFsbG93cyBhdXRvbWF0aWMgZW5hYmxp bmcgb2YgUkVESVJFQ1QgdG8gYmUgb3ZlcnJpZGRlbi4uLiAqLwotCi0jaWZkZWYgTk9SRURJUkVD VAotI2lmZGVmIE5FVENNRAotI3VuZGVmIE5FVENNRAotI2VuZGlmIC8qIE5FVENNRCAqLwotI2lm ZGVmIE5FVFBUWQotI3VuZGVmIE5FVFBUWQotI2VuZGlmIC8qIE5FVFBUWSAqLwotI2lmZGVmIENL X1JFRElSCi0jdW5kZWYgQ0tfUkVESVIKLSNlbmRpZiAvKiBDS19SRURJUiAqLwotI2VuZGlmIC8q IE5PUkVESVJFQ1QgKi8KLQotI2lmZGVmIE5PTkVUQ01ECi0jaWZkZWYgTkVUQ01ECi0jdW5kZWYg TkVUQ01ECi0jZW5kaWYgLyogTkVUQ01EICovCi0jaWZkZWYgTkVUUFRZCi0jdW5kZWYgTkVUUFRZ Ci0jZW5kaWYgLyogTkVUUFRZICovCi0jZW5kaWYgLyogTk9ORVRDTUQgKi8KLQotI2lmZGVmIENL X1JFRElSCi1fUFJPVE9UWVAoIGludCB0dHJ1bmNtZCwgKGNoYXIgKikgKTsKLSNlbmRpZiAvKiBD S19SRURJUiAqLwotCi0vKiBVc2UgYnVpbHQtaW4gRElSRUNUT1JZIGNvbW1hbmQgKi8KLQotI2lm bmRlZiBOT01ZRElSCi0jaWZuZGVmIERPTVlESVIKLSNpZmRlZiBVTklYT1JPU0sKLSNkZWZpbmUg RE9NWURJUgotI2Vsc2UKLSNpZmRlZiBPUzIKLSNkZWZpbmUgRE9NWURJUgotI2Vsc2UKLSNpZmRl ZiBWTVMKLSNkZWZpbmUgRE9NWURJUgotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAq LwotI2VuZGlmIC8qIFVOSVhPUk9TSyAqLwotI2VuZGlmIC8qIERPTVlESVIgKi8KLSNlbmRpZiAv KiBOT01ZRElSICovCi0KLS8qIFNlbmRpbmcgZnJvbSBhbmQgcmVjZWl2aW5nIHRvIGNvbW1hbmRz L3BpcGVzICovCi0KLSNpZm5kZWYgUElQRVNFTkQKLSNpZmRlZiBVTklYCi0jZGVmaW5lIFBJUEVT RU5ECi0jZW5kaWYgLyogVU5JWCAqLwotI2lmZGVmIE9TMgotI2RlZmluZSBQSVBFU0VORAotI2Vu ZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFBJUEVTRU5EICovCi0KLSNpZmRlZiBQSVBFU0VORAot I2lmZGVmIE5PUElQRVNFTkQKLSN1bmRlZiBQSVBFU0VORAotI2VuZGlmIC8qIE5PUElQRVNFTkQg Ki8KLSNpZmRlZiBOT1BVU0gKLSN1bmRlZiBQSVBFU0VORAotI2VuZGlmIC8qIE5PUFVTSCAqLwot I2VuZGlmIC8qIFBJUEVTRU5EICovCi0KLSNpZmRlZiBOT1BVU0gKLSNpZmRlZiBCUk9XU0VSCi0j dW5kZWYgQlJPV1NFUgotI2VuZGlmIC8qIEJST1dTRVIgKi8KLSNlbmRpZiAvKiBOT1BVU0ggKi8K LQotLyogVmVyc2lvbnMgd2hlcmUgd2Ugc3VwcG9ydCB0aGUgUkVTRU5EIGNvbW1hbmQgKi8KLQot I2lmbmRlZiBOT1hGRVIKLSNpZm5kZWYgTk9SRVNFTkQKLSNpZm5kZWYgQ0tfUkVTRU5ECi0jaWZk ZWYgVU5JWAotI2lmbmRlZiBwZHAxMQotI2RlZmluZSBDS19SRVNFTkQKLSNlbmRpZiAvKiBwZHAx MSAqLwotI2VuZGlmIC8qIFVOSVggKi8KLQotI2lmZGVmIFZNUwotI2RlZmluZSBDS19SRVNFTkQK LSNlbmRpZiAvKiBWTVMgKi8KLQotI2lmZGVmIE9TMgotI2RlZmluZSBDS19SRVNFTkQKLSNlbmRp ZiAvKiBPUzIgKi8KLQotI2lmZGVmIEFNSUdBCi0jZGVmaW5lIENLX1JFU0VORAotI2VuZGlmIC8q IEFNSUdBICovCi0KLSNpZmRlZiBkYXRhZ2VuZXJhbAotI2RlZmluZSBDS19SRVNFTkQKLSNlbmRp ZiAvKiBkYXRhZ2VuZXJhbCAqLwotCi0jaWZkZWYgU1RSQVRVUwotI2RlZmluZSBDS19SRVNFTkQK LSNlbmRpZiAvKiBTVFJBVFVTICovCi0KLSNpZmRlZiBPU0sKLSNkZWZpbmUgQ0tfUkVTRU5ECi0j ZW5kaWYgLyogT1NLICovCi0KLSNlbmRpZiAvKiBDS19SRVNFTkQgKi8KLSNlbmRpZiAvKiBOT1JF U0VORCAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0vKiBTeXN0ZW1zIGltcGxlbWVudGluZyAi RG9vbXNkYXkgS2VybWl0IiBwcm90b2NvbCAuLi4gKi8KLQotI2lmbmRlZiBET09NU0RBWQotI2lm ZGVmIFVOSVgKLSNkZWZpbmUgRE9PTVNEQVkKLSNlbHNlCi0jaWZkZWYgVk1TCi0jZGVmaW5lIERP T01TREFZCi0jZWxzZQotI2lmZGVmIE9TMgotI2RlZmluZSBET09NU0RBWQotI2Vsc2UKLSNpZmRl ZiBTVFJBVFVTCi0jZGVmaW5lIERPT01TREFZCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotI2VuZGlm IC8qIE9TMiAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAv KiBET09NU0RBWSAqLwotCi0vKiBTeXN0ZW1zIHdoZXJlIHdlIHdhbnQgdGhlIFRoZXJtb21ldGVy IHRvIGJlIHVzZWQgZm9yIGZ1bGxzY3JlZW4gKi8KLQotI2lmZGVmIE9TMgotI2lmbmRlZiBDS19Q Q1RfQkFSCi0jZGVmaW5lIENLX1BDVF9CQVIKLSNlbmRpZiAvKiBDS19QQ1RfQkFSICovCi0jZW5k aWYgLyogT1MyICovCi0KLS8qIFN5c3RlbXMgd2hlcmUgd2UgaGF2ZSBhIFJFWFggY29tbWFuZCAq LwotCi0jaWZkZWYgT1MyCi0jaWZkZWYgX18zMkJJVF9fCi0jaWZuZGVmIE5PUkVYWAotI2RlZmlu ZSBDS19SRVhYCi0jZW5kaWYgLyogTk9SRVhYICovCi0jZW5kaWYgLyogX18zMkJJVF9fICovCi0j ZW5kaWYgLyogT1MyICovCi0KLS8qIFBsYXRmb3JtcyB0aGF0IGhhdmUgYSBaQ0hLUElEIGZ1bmN0 aW9uICovCi0KLSNpZmRlZiBPUzJPUlVOSVgKLSNkZWZpbmUgWkNIS1BJRAotI2VuZGlmIC8qIE9T Mk9SVU5JWCAqLwotCi0jaWZuZGVmIFpDSEtQSUQKLS8qIElmIHdlIGNhbid0IGNoZWNrIHBpZHMg dGhlbiB3ZSBoYXZlIHRyZWF0IGFsbCBwaWRzIGFzIGFjdGl2ZSAmIHZhbGlkLiAqLwotI2RlZmlu ZSB6Y2hrcGlkKHgpIDEKLSNlbmRpZiAvKiBaQ0hLUElEICovCi0KLS8qIFN5c3RlbXMgdGhhdCBo YXZlIGEgWlJFTkFNRSBmdW5jdGlvbiAqLwotCi0jZGVmaW5lIFpSRU5BTUUJCQkJLyogVGhleSBh bGwgZG8gKi8KLQotLyogU3lzdGVtcyB0aGF0IGhhdmUgYSBaQ09QWSBmdW5jdGlvbiAqLwotCi0j aWZuZGVmIFpDT1BZCi0jaWZkZWYgVk1TCi0jZGVmaW5lIFpDT1BZCi0jZWxzZQotI2lmZGVmIE9T MgotI2RlZmluZSBaQ09QWQotI2Vsc2UKLSNpZmRlZiBVTklYCi0jZGVmaW5lIFpDT1BZCi0jZWxz ZQotI2lmZGVmIFNUUkFUVVMKLSNkZWZpbmUgWkNPUFkKLSNlbmRpZiAvKiBTVFJBVFVTICovCi0j ZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2Vu ZGlmIC8qIFpDT1BZICovCi0KLS8qIFN5c3RlbXMgdGhhdCBoYXZlIHR0Z3dzaXooKSAodGhleSBh bGwgc2hvdWxkIGJ1dCB0aGV5IGRvbid0KSAqLwotCi0jaWZuZGVmIE5PVFRHV1NJWgotI2lmbmRl ZiBDS19UVEdXU0laCi0jaWZkZWYgVU5JWAotI2RlZmluZSBDS19UVEdXU0laCi0jZWxzZQotI2lm ZGVmIFZNUwotI2RlZmluZSBDS19UVEdXU0laCi0jZWxzZQotI2lmZGVmIE9TMgotI2RlZmluZSBD S19UVEdXU0laCi0jZWxzZQotI2lmZGVmIE9TSwotI2RlZmluZSBDS19UVEdXU0laCi0jZW5kaWYg LyogT1NLICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyog VU5JWCAqLwotI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KLSNlbmRpZiAvKiBOT1RUR1dTSVogKi8K LQotI2lmZGVmIE5PVFRHV1NJWgotI2lmZGVmIENLX1RUR1dTSVoKLSN1bmRlZiBDS19UVEdXU0la Ci0jZW5kaWYgLyogQ0tfVFRHV1NJWiAqLwotI2VuZGlmIC8qIE5PVFRHV1NJWiAqLwotCi0jaWZk ZWYgT1MyCi0vKiBPUy8yIEMtS2VybWl0IGZlYXR1cmVzIG5vdCBhdmFpbGFibGUgaW4gMTYtYml0 IHZlcnNpb24uLi4gKi8KLQotI2lmZGVmIE9TMk9OTFkKLSNpZm5kZWYgX18zMkJJVF9fCi0jaWZu ZGVmIE5PTE9DQUwKLSNpZmRlZiBQQ0ZPTlRTCQkJCS8qIFBDIEZvbnQgc3VwcG9ydCAqLwotI3Vu ZGVmIFBDRk9OVFMKLSNlbmRpZiAvKiBQQ0ZPTlRTICovCi0jaWZkZWYgTlBJUEUJCQkJLyogTmFt ZWQgUGlwZXMgY29tbXVuaWNhdGlvbiAqLwotI3VuZGVmIE5QSVBFCi0jZW5kaWYgLyogTlBJUEUg Ki8KLSNpZmRlZiBDS19ORVRCSU9TCQkJLyogTkVUQklPUyBjb21tdW5pY2F0aW9uICovCi0jdW5k ZWYgQ0tfTkVUQklPUwotI2VuZGlmIC8qIENLX05FVEJJT1MgKi8KLSNpZmRlZiBPUzJNT1VTRQkJ CQkvKiBNb3VzZSAqLwotI3VuZGVmIE9TMk1PVVNFCi0jZW5kaWYgLyogT1MyTU9VU0UgKi8KLSNp ZmRlZiBPUzJQTQkJCQkvKiBQcmVzZW50YXRpb24gTWFuYWdlciAqLwotI3VuZGVmIE9TMlBNCi0j ZW5kaWYgLyogT1MyUE0gKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jaWZkZWYgQ0tfUkVYWAkJ CQkvKiBSZXh4ICovCi0jdW5kZWYgQ0tfUkVYWAotI2VuZGlmIC8qIENLX1JFWFggKi8KLSNlbmRp ZiAvKiBfXzMyQklUX18gKi8KLSNlbmRpZiAvKiBPUzJPTkxZICovCi0KLS8qIE9TLzIgQy1LZXJt aXQgZmVhdHVyZXMgbm90IGF2YWlsYWJsZSBpbiBXaW5kb3dzIE5UIHZlcnNpb24uLi4gKi8KLQot I2lmZGVmIE5UCi0jaWZkZWYgUENGT05UUwkJCQkvKiBQQyBGb250IHN1cHBvcnQgKi8KLSN1bmRl ZiBQQ0ZPTlRTCi0jZW5kaWYgLyogUENGT05UUyAqLwotI2lmZGVmIE9TMlBNCQkJCS8qIFByZXNl bnRhdGlvbiBNYW5hZ2VyICovCi0jdW5kZWYgT1MyUE0KLSNlbmRpZiAvKiBPUzJQTSAqLwotI2lm ZGVmIENLX1JFWFgJCQkJLyogUmV4eCAqLwotI3VuZGVmIENLX1JFWFgKLSNlbmRpZiAvKiBDS19S RVhYICovCi0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotLyoKLSAgU3lzdGVt cyB0aGF0IGhhdmUgc2VsZWN0KCkuCi0gIFRoaXMgaXMgdXNlZCBmb3IgYm90aCBtc2xlZXAoKSBh bmQgZm9yIHJlYWQtYnVmZmVyIGNoZWNraW5nIGluIGluX2NoaygpLgotKi8KLSNkZWZpbmUgQ0tf U0xFRVBJTlQgMjUwIC8qIG1pbGxpc2Vjb25kcyAtIHNldCB0aGlzIHRvIHNvbWV0aGluZyB0aGF0 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZpZGVzIGV2ZW5seSBpbnRvIDEwMDAgKi8K LSNpZm5kZWYgU0VMRUNUCi0jaWZuZGVmIE5PU0VMRUNUCi0jaWZkZWYgX19saW51eF9fCi0jZGVm aW5lIFNFTEVDVAotI2Vsc2UKLSNpZmRlZiBTVU5PUzQKLSNkZWZpbmUgU0VMRUNUCi0jZWxzZQot I2lmZGVmIE5FWFQKLSNkZWZpbmUgU0VMRUNUCi0jZWxzZQotI2lmZGVmIFJUQUlYCi0jZGVmaW5l IFNFTEVDVAotI2Vsc2UKLSNpZmRlZiBIUFVYCi0vKgotICBOb3QgcmVhbGx5LiAgSSB0aGluayBp dCdzIG9ubHkgaW4gSFAtVVggNy4wIGFuZCBsYXRlciwgZXhjZXB0IGl0J3MgYWxzbwotICBpbiBl YXJsaWVyIHZlcnNpb25zIHRoYXQgaGF2ZSBUQ1AvSVAgaW5zdGFsbGVkLiAgT3ZlcnJpZGUgdGhp cyBkZWZhdWx0Ci0gIGluIHBhcnRpY3VsYXIgSFAtVVggbWFrZWZpbGUgZW50cmllcyBieSBhZGRp bmcgLUROT1NFTEVDVCwgYXMgaW4gKGUuZy4pCi0gIHRoZSBIUC1VWCA2LjUgb25lcy4KLSovCi0j ZGVmaW5lIFNFTEVDVAotI2Vsc2UKLSNpZmRlZiBBSVhSUwotI2RlZmluZSBTRUxFQ1QKLSNlbHNl Ci0jaWZkZWYgQlNENDQKLSNkZWZpbmUgU0VMRUNUCi0jZWxzZQotI2lmZGVmIEJTRDQKLSNkZWZp bmUgU0VMRUNUCi0jZWxzZQotI2lmZGVmIE9YT1MKLSNkZWZpbmUgU0VMRUNUCi0jZWxzZQotI2lm ZGVmIE9TMgotI2RlZmluZSBTRUxFQ1QKLSNlbHNlCi0jaWZkZWYgQkVCT1gKLSNkZWZpbmUgU0VM RUNUCi0jZW5kaWYgLyogQkVCT1ggKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBPWE9T ICovCi0jZW5kaWYgLyogQlNENCAqLwotI2VuZGlmIC8qIEJTRDQ0ICovCi0jZW5kaWYgLyogQUlY UlMgKi8KLSNlbmRpZiAvKiBIUFVYICovCi0jZW5kaWYgLyogUlRBSVggKi8KLSNlbmRpZiAvKiBO RVhUICovCi0jZW5kaWYgLyogX19saW51eF9fICovCi0jZW5kaWYgLyogU1VOT1M0ICovCi0jZW5k aWYgLyogTk9TRUxFQ1QgKi8KLSNlbmRpZiAvKiBTRUxFQ1QgKi8KLQotLyoKLSAgVGhlIGZvbGxv d2luZyBzZWN0aW9uIG1vdmVkIGhlcmUgZnJvbSBja2NuZXQuaCBpbiA2LjEgYmVjYXVzZSBzZWxl Y3QoKQotICBpcyBub3cgdXNlZCBmb3Igbm9uLW5ldHdvcmtpbmcgcHVycG9zZXMuCi0qLwotCi0v KiBPbiBIUC05MDAwLzUwMCBIUC1VWCA1LjIxIHRoaXMgc3R1ZmYgaXMgbm90IGRlZmluZWQgaW4g YW55IGhlYWRlciBmaWxlICovCi0KLSNpZmRlZiBocDkwMDBzNTAwCi0jaWZuZGVmIE5FRURTRUxF Q1RERUZTCi0jZGVmaW5lIE5FRURTRUxFQ1RERUZTCi0jZW5kaWYgLyogTkVFRFNFTEVDVERFRlMg Ki8KLSNlbmRpZiAvKiBocDkwMDBzNTAwICovCi0KLSNpZmRlZiBORUVEU0VMRUNUREVGUwotdHlw ZWRlZiBsb25nIGZkX21hc2s7Ci0jaWZuZGVmIE5CQlkKLSNkZWZpbmUgTkJCWSA4Ci0jZW5kaWYg LyogTkJCWSAqLwotI2lmbmRlZiBGRF9TRVRTSVpFCi0jZGVmaW5lIEZEX1NFVFNJWkUgMzIKLSNl bmRpZiAvKiBGRF9TRVRTSVpFICovCi0jaWZuZGVmIE5GREJJVFMKLSNkZWZpbmUgTkZEQklUUyAo c2l6ZW9mKGZkX21hc2spICogTkJCWSkKLSNlbmRpZiAvKiBORkRCSVRTICovCi0jaWZuZGVmIGhv d21hbnkKLSNkZWZpbmUgaG93bWFueSh4LHkpICgoKHgpKygoeSktMSkpLyh5KSkKLSNlbmRpZiAv KiBob3dtYW55ICovCi10eXBlZGVmIHN0cnVjdCBmZF9zZXQgewotICAgIGZkX21hc2sgZmRzX2Jp dHNbaG93bWFueShGRF9TRVRTSVpFLCBORkRCSVRTKV07Ci19IGZkX3NldDsKLSNpZm5kZWYgRkRf U0VUCi0jZGVmaW5lIEZEX1NFVChuLHApICgocCktPmZkc19iaXRzWyhuKS9ORkRCSVRTXSB8PSAo MSA8PCAoKG4pICUgTkZEQklUUykpKQotI2VuZGlmIC8qIEZEX1NFVCAqLwotI2lmbmRlZiBGRF9D TFIKLSNkZWZpbmUgRkRfQ0xSKG4scCkgKChwKS0+ZmRzX2JpdHNbKG4pL05GREJJVFNdICY9IH4o MSA8PCAoKG4pICUgTkZEQklUUykpKQotI2VuZGlmIC8qIEZEX0NMUiAqLwotI2lmbmRlZiBGRF9J U1NFVAotI2RlZmluZSBGRF9JU1NFVChuLHApICgocCktPmZkc19iaXRzWyhuKS9ORkRCSVRTXSAm ICgxIDw8ICgobikgJSBORkRCSVRTKSkpCi0jZW5kaWYgLyogRkRfSVNTRVQgKi8KLSNpZm5kZWYg RkRfQ09QWQotI2RlZmluZSBGRF9DT1BZKGYsdCkgKGJjb3B5KGYsdCxzaXplb2YoKihmKSkpCi0j ZW5kaWYgLyogRkRfQ09QWSAqLwotI2lmbmRlZiBGRF9aRVJPCi0jZGVmaW5lIEZEX1pFUk8ocCkg Ynplcm8oKGNoYXIgKikocCksc2l6ZW9mKCoocCkpKQotI2VuZGlmIC8qIEZEX1pFUk8gKi8KLSNl bmRpZiAvKiBORUVEU0VMRUNUREVGUyAqLwotCi0vKgotICBDS19ORUVEX1NJRyBpcyBkZWZpbmVk IGlmIHRoZSBzeXN0ZW0gY2Fubm90IGNoZWNrIHRoZSBjb25zb2xlIHRvCi0gIHRvIHNlZSBpZiBj aGFyYWN0ZXJzIGFyZSB3YWl0aW5nLiAgVGhpcyBpcyB1c2VkIGR1cmluZyBsb2NhbC1tb2RlIGZp bGUKLSAgdHJhbnNmZXIgdG8gaW50ZXJydXB0IHRoZSB0cmFuc2ZlciwgcmVmcmVzaCB0aGUgc2Ny ZWVuIGRpc3BsYXksIGV0Yy4KLSAgSWYgQ0tfTkVFRF9TSUcgaXMgZGVmaW5lZCwgdGhlbiBmaWxl LXRyYW5zZmVyIGludGVycnVwdGlvbiBjaGFyYWN0ZXJzCi0gIGhhdmUgdG8gYmUgcHJlY2VkZWQg YSBzcGVjaWFsIGNoYXJhY3RlciwgZS5nLiB0aGUgU0lHUVVJVCBjaGFyYWN0ZXIuCi0gIENLX05F RURfU0lHIHNob3VsZCBiZSBkZWZpbmVkIGlmIHRoZSBjb25jaGsoKSBmdW5jdGlvbiBpcyBub3Qg b3BlcmF0aW9uYWwuCi0qLwotI2lmZGVmIE5PUE9MTAkJCQkvKiBGb3Igb3ZlcnJpZGluZyBDS19Q T0xMIGRlZmluaXRpb24gKi8KLSNpZmRlZiBDS19QT0xMCi0jdW5kZWYgQ0tfUE9MTAotI2VuZGlm IC8qIENLX1BPTEwgKi8KLSNlbmRpZiAvKiBOT1BPTEwgKi8KLQotI2lmbmRlZiBDS19QT0xMCQkJ CS8qIElmIHdlIGRvbid0IGhhdmUgcG9sbCgpICovCi0jaWZuZGVmIFJEQ0hLCQkJCS8qIEFuZCB3 ZSBkb24ndCBoYXZlIHJkY2hrKCkgKi8KLSNpZm5kZWYgU0VMRUNUCQkJCS8qIEFuZCB3ZSBkb24n dCBoYXZlIHNlbGVjdCgpICovCi0jaWZkZWYgQVRUU1YKLSNpZm5kZWYgYWVnaXMKLSNpZm5kZWYg ZGF0YWdlbmVyYWwKLSNpZm5kZWYgT1hPUwotI2RlZmluZSBDS19ORUVEX1NJRwotI2VuZGlmIC8q IE9YT1MgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8qIGFlZ2lzICovCi0j ZW5kaWYgLyogQVRUU1YgKi8KLSNpZmRlZiBQT1NJWAotI2lmbmRlZiBDS19ORUVEX1NJRwotI2Rl ZmluZSBDS19ORUVEX1NJRwotI2VuZGlmIC8qIENLX05FRURfU0lHICovCi0jZW5kaWYgLyogUE9T SVggKi8KLSNlbmRpZiAvKiBTRUxFQ1QgKi8KLSNlbmRpZiAvKiBSRENISyAqLwotI2VuZGlmIC8q IENLX1BPTEwgKi8KLQotI2lmZGVmIEhQVVgJCQkJLyogSFAtVVggaGFzIHNlbGVjdCgpICovCi0j aWZkZWYgQ0tfTkVFRF9TSUcKLSN1bmRlZiBDS19ORUVEX1NJRwotI2VuZGlmIC8qIENLX05FRURf U0lHICovCi0jZW5kaWYgLyogSFBVWCAqLwotCi0jaWZkZWYgQUlYUlMJCQkJLyogQUlYIGhhcyBz ZWxlY3QoKSAqLwotI2lmZGVmIENLX05FRURfU0lHCi0jdW5kZWYgQ0tfTkVFRF9TSUcKLSNlbmRp ZiAvKiBDS19ORUVEX1NJRyAqLwotI2VuZGlmIC8qIEFJWFJTICovCi0KLSNpZmRlZiBCU0Q0NAkJ CQkvKiA0LjRCU0QgaGFzIEZJT05SRUFEICovCi0jaWZkZWYgQ0tfTkVFRF9TSUcKLSN1bmRlZiBD S19ORUVEX1NJRwotI2VuZGlmIC8qIENLX05FRURfU0lHICovCi0jZW5kaWYgLyogQlNENDQgKi8K LQotI2lmZGVmIFFOWAkJCQkvKiBRTlggaGFzIEZJT05SRUFEIGFuZCBzZWxlY3QoKSAqLwotI2lm ZGVmIENLX05FRURfU0lHCi0jdW5kZWYgQ0tfTkVFRF9TSUcKLSNlbmRpZiAvKiBDS19ORUVEX1NJ RyAqLwotI2VuZGlmIC8qIFFOWCAqLwotCi0jaWZkZWYgQ09IRVJFTlQKLSNpZm5kZWYgTk9USU1F Wk9ORQotI2RlZmluZSBOT1RJTUVaT05FCi0jZW5kaWYgLyogTk9USU1FWk9ORSAqLwotI2VuZGlm IC8qIENPSEVSRU5UICovCi0KLSNpZmRlZiBVTklYCi0jaWZuZGVmIEhBVkVfVFoJCQkJLyogQ2Fu IHdlIHVzZSBzdHJ1Y3QgdGltZXpvbmU/ICovCi0jaWZuZGVmIE5PVElNRVpPTkUKLSNpZmRlZiBQ VFgKLSNkZWZpbmUgTk9USU1FWk9ORQotI2Vsc2UKLSNpZm5kZWYgU0VMRUNUCi0jaWZkZWYgQ09I RVJFTlQKLSNkZWZpbmUgTk9USU1FWk9ORQotI2Vsc2UKLSNpZmRlZiBCRUxMVjEwCi0jZGVmaW5l IE5PVElNRVpPTkUKLSNlbmRpZiAvKiBCRUxMVjEwICovCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8K LSNlbmRpZiAvKiBTRUxFQ1QgKi8KLSNlbmRpZiAvKiBQVFggKi8KLSNlbmRpZiAvKiBOT1RJTUVa T05FICovCi0jZW5kaWYgLyogSEFWRV9UWiAqLwotI2lmbmRlZiBOT1RJTUVWQUwJCQkvKiBDYW4g d2UgdXNlIHN0cnVjdCB0aW1ldmFsPyAqLwotI2lmbmRlZiBIQVZFX1RWCi0jZGVmaW5lIEhBVkVf VFYKLSNlbmRpZiAvKiBIQVZFX1RWICovCi0jZW5kaWYgLyogTk9USU1FVkFMICovCi0jaWZuZGVm IE5PVElNRVpPTkUKLSNpZm5kZWYgSEFWRV9UWgotI2RlZmluZSBIQVZFX1RaCi0jZW5kaWYgLyog SEFWRV9UWiAqLwotI2VuZGlmIC8qIE5PVElNRVpPTkUgKi8KLSNlbmRpZiAvKiBVTklYICovCi0K LSNpZmRlZiBTQ08zMgotI2lmZGVmIEhBVkVfVFYKLSN1bmRlZiBIQVZFX1RWCi0jZW5kaWYgLyog SEFWRV9UViAqLwotI2lmZGVmIEhBVkVfVFoKLSN1bmRlZiBIQVZFX1RaCi0jZW5kaWYgLyogSEFW RV9UWiAqLwotI2lmbmRlZiBOT1RJTUVWQUwKLSNkZWZpbmUgTk9USU1FVkFMCi0jZW5kaWYgLyog Tk9USU1FVkFMICovCi0jaWZuZGVmIE5PVElNRVpPTkUKLSNkZWZpbmUgTk9USU1FWk9ORQotI2Vu ZGlmIC8qIE5PVElNRVpPTkUgKi8KLSNlbmRpZiAvKiBTQ08zMiAqLwotCi0jaWZkZWYgQVRUNzMw MAotI2lmZGVmIEhBVkVfVFYKLSN1bmRlZiBIQVZFX1RWCi0jZW5kaWYgLyogSEFWRV9UViAqLwot I2lmZGVmIEhBVkVfVFoKLSN1bmRlZiBIQVZFX1RaCi0jZW5kaWYgLyogSEFWRV9UWiAqLwotI2lm bmRlZiBOT1RJTUVWQUwKLSNkZWZpbmUgTk9USU1FVkFMCi0jZW5kaWYgLyogTk9USU1FVkFMICov Ci0jaWZuZGVmIE5PVElNRVpPTkUKLSNkZWZpbmUgTk9USU1FWk9ORQotI2VuZGlmIC8qIE5PVElN RVpPTkUgKi8KLSNlbmRpZiAvKiBBVFQ3MzAwICovCi0KLS8qCi0gIEF1dG9tYXRpYyBwYXJpdHkg ZGV0ZWN0aW9uLgotICBUaGlzIGFjdHVhbGx5IGltcGxpZXMgYSBsb3QgbW9yZSBub3c6IGxlbmd0 aC1kcml2ZW4gcGFja2V0IHJlYWRpbmcsCi0gICJEb29tc2RheSBLZXJtaXQiIElCTSBNYWluZnJh bWUgZmlsZSB0cmFuc2ZlciB0aHJvdWdoIDMyNzAgZGF0YSBzdHJlYW1zLCBldGMuCi0qLwotI2lm ZGVmIFVOSVgJCQkJLyogRm9yIFVuaXggKi8KLSNpZm5kZWYgTk9QQVJTRU4KLSNkZWZpbmUgUEFS U0VOU0UKLSNlbmRpZiAvKiBOT1BBUlNFTiAqLwotI2VuZGlmIC8qIFVOSVggKi8KLQotI2lmZGVm IFZNUwkJCQkvKiAuLi4gYW5kIFZNUyAqLwotI2lmbmRlZiBOT1BBUlNFTgotI2RlZmluZSBQQVJT RU5TRQotI2VuZGlmIC8qIE5PUEFSU0VOICovCi0jaWZkZWYgX19HTlVDX18KLSNkZWZpbmUgVk1T R0NDCi0jZW5kaWYgLyogX19HTlVDX18gKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQotI2lmZGVmIE1B QwkJCQkvKiBhbmQgTWFjaW50b3NoICovCi0jaWZuZGVmIE5PUEFSU0VOCi0jZGVmaW5lIFBBUlNF TlNFCi0jZW5kaWYgLyogTk9QQVJTRU4gKi8KLSNlbmRpZiAvKiBNQUMgKi8KLQotI2lmZGVmIFNU UkFUVVMJCQkJLyogYW5kIFN0cmF0dXMgVk9TICovCi0jaWZuZGVmIE5PUEFSU0VOCi0jZGVmaW5l IFBBUlNFTlNFCi0jZW5kaWYgLyogTk9QQVJTRU4gKi8KLSNlbmRpZiAvKiBTVFJBVFVTICovCi0K LSNpZmRlZiBPUzIJCQkJLyogYW5kIE9TLzIsIGZpbmFsbHkgKi8KLSNpZm5kZWYgTk9QQVJTRU4K LSNkZWZpbmUgUEFSU0VOU0UKLSNlbmRpZiAvKiBOT1BBUlNFTiAqLwotI2VuZGlmIC8qIE9TMiAq LwotCi0jaWZuZGVmIE5PRFlOQU1JQwkJCS8qIERZTkFNSUMgaXMgZGVmYXVsdCBmb3IgVU5JWCAq LwotI2lmbmRlZiBEWU5BTUlDCQkJCS8qIGFzIG9mIEMtS2VybWl0IDcuMCAqLwotI2lmZGVmIFVO SVgKLSNkZWZpbmUgRFlOQU1JQwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBEWU5BTUlD ICovCi0jZW5kaWYgLyogTk9EWU5BTUlDICovCi0KLSNpZmRlZiBEWU5BTUlDCQkJCS8qIElmIERZ TkFNSUMgaXMgZGVmaW5lZCAqLwotI2RlZmluZSBEQ01EQlVGCQkJCS8qIHRoZW4gYWxzbyBkZWZp bmUgdGhpcy4gKi8KLSNlbmRpZiAvKiBEWU5BTUlDICovCi0KLSNpZm5kZWYgQ0tfTEJSSwkJCQkv KiBDYW4gc2VuZCBMb25nIEJSRUFLICovCi0KLSNpZmRlZiBVTklYCQkJCS8qIChldmVyeWJvZHkg YnV0IE9TLTkpICovCi0jZGVmaW5lIENLX0xCUksKLSNlbmRpZiAvKiBVTklYICovCi0jaWZkZWYg Vk1TCi0jZGVmaW5lIENLX0xCUksKLSNlbmRpZiAvKiBWTVMgKi8KLSNpZmRlZiBkYXRhZ2VuZXJh bAotI2RlZmluZSBDS19MQlJLCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNpZmRlZiBHRU1E T1MKLSNkZWZpbmUgQ0tfTEJSSwotI2VuZGlmIC8qIEdFTURPUyAqLwotI2lmZGVmIE9TMgotI2Rl ZmluZSBDS19MQlJLCi0jZW5kaWYgLyogT1MyICovCi0jaWZkZWYgQU1JR0EKLSNkZWZpbmUgQ0tf TEJSSwotI2VuZGlmIC8qIEFNSUdBICovCi0jaWZkZWYgU1RSQVRVUwotI2RlZmluZSBDS19MQlJL Ci0jZW5kaWYgLyogU1RSQVRVUyAqLwotCi0jZW5kaWYgLyogQ0tfTEJSSyAqLwotCi0vKiBDYXJy aWVyIHRyZWF0bWVudCAqLwotLyogVGhlc2UgYXJlIGRlZmluZWQgaGVyZSBiZWNhdXNlIHRoZXkg YXJlIHNoYXJlZCBieSB0aGUgc3lzdGVtIGRlcGVuZGVudCAqLwotLyogYW5kIHRoZSBzeXN0ZW0g aW5kZXBlbmRlbnQgbW9kdWxlcy4gKi8KLQotI2RlZmluZSAgQ0FSX09GRiAwCS8qIE9mZjogaWdu b3JlIGNhcnJpZXIgYWx3YXlzLiAqLwotI2RlZmluZSAgQ0FSX09OICAxICAgICAgLyogT246IGhl ZWQgY2FycmllciBhbHdheXMsIGV4Y2VwdCBkdXJpbmcgRElBTC4gKi8KLSNkZWZpbmUgIENBUl9B VVQgMiAgICAgIC8qIEF1dG86IGhlZWQgY2FycmllciwgYnV0IG9ubHkgaWYgbGluZSBpcyBkZWNs YXJlZCAqLwotCQkJLyogdG8gYmUgYSBtb2RlbSBsaW5lLCBhbmQgb25seSBkdXJpbmcgQ09OTkVD VC4gKi8KLQotLyogQW5kIG1vcmUgZ2VuZXJpY2FsbHkgKGZvciB1c2Ugd2l0aCBhbnkgT04vT0ZG L0FVVE8gZmVhdHVyZSkgKi8KLSNkZWZpbmUgIENLX09GRiAgMAotI2RlZmluZSAgQ0tfT04gICAx Ci0jZGVmaW5lICBDS19BVVRPIDIKLQotI2lmbmRlZiBOT0xPQ0FMCi0vKgotICBTZXJpYWwgaW50 ZXJmYWNlIHNwZWVkcyBhdmFpbGFibGUuCi0KLSAgQXMgb2YgQy1LZXJtaXQgNi4xIHRoZXJlIGlz IGEgbmV3IG1ldGhvZCB0byBnZXQgdGhlIHN1cHBvcnRlZAotICBzcGVlZHMsIHdoaWNoIG9idmlh dGVzIHRoZSBuZWVkIGZvciBhbGwgdGhlIGNyYXppbmVzcyBiZWxvdy4gIEF0IHJ1bnRpbWUsCi0g IGp1c3QgY2FsbCB0aGUgbmV3IHR0c3BkbGlzdCgpIHJvdXRpbmUgdG8gZ2V0IGEgbGlzdCBvZiBz dXBwb3J0ZWQgc3BlZWRzLgotICBUaGVuIHRoZSB1c2VyIGludGVyZmFjZSBtb2R1bGUgY2FuIGJ1 aWxkIGEga2V5d29yZCB0YWJsZSBvciBtZW51IGZyb20gaXQuCi0qLwotI2lmbmRlZiBUVFNQRExJ U1QKLSNpZmRlZiBVTklYCQkJCS8qIEZvciBub3csIG9ubHkgZm9yIFVOSVggKi8KLSNpZm5kZWYg T0xJTlVYSElTUEVFRAkJCS8qIEJ1dCBub3Qgc3lzdGVtcyB3aXRoIGhhY2tzIGZvciAqLwotI2lm bmRlZiBNSU5JWAkJCQkvKiBoaWdoIHNwZWVkcywgbGlrZSAxMTAgPSAxMTUyMDAgKi8KLSNkZWZp bmUgVFRTUERMSVNUCi0jZW5kaWYgLyogTUlOSVggKi8KLSNlbmRpZiAvKiBPTElOVVhISVNQRUVE ICovCi0jZWxzZQotI2lmZGVmIFZNUwotI2RlZmluZSBUVFNQRExJU1QJCQkvKiBWTVMgZ2V0cyBp dCB0b28gKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyog VFRTUERMSVNUICovCi0KLSNpZm5kZWYgTk9ESUFMCQkJCS8qIEhhbmd1cCBieSBtb2RlbSBjb21t YW5kICovCi0jaWZuZGVmIE5PTURNSFVQCi0jaWZuZGVmIE1ETUhVUAotI2RlZmluZSBNRE1IVVAK LSNlbmRpZiAvKiBNRE1IVVAgKi8KLSNlbmRpZiAvKiBOT01ETUhVUCAqLwotI2VuZGlmIC8qIE5P RElBTCAqLwotCi0jaWZkZWYgTk9TUEwKLSNpZm5kZWYgTk9MT0dESUFMCQkJLyogQ29ubmVjdGlv biBsb2cgbmVlZHMgbWpkKCksIGV0Yy4gKi8KLSNkZWZpbmUgTk9MT0dESUFMCi0jZW5kaWYgLyog Tk9MT0dESUFMICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmZGVmIHBkcDExCi0jZGVmaW5l IE5PTE9HRElBTAotI2VuZGlmIC8qIHBkcDExICovCi0KLSNpZm5kZWYgTk9MT0dESUFMCQkJLyog Q29ubmVjdGlvbiBsb2cgKi8KLSNpZm5kZWYgQ1hMT0dGSUxFCi0jZGVmaW5lIENYTE9HRklMRSAi Q1guTE9HIgkJLyogRGVmYXVsdCBjb25uZWN0aW9uIGxvZyBmaWxlIG5hbWUgKi8KLSNlbmRpZiAv KiBDWExPR0ZJTEUgKi8KLSNpZm5kZWYgQ0tMT0dESUFMCi0jaWZuZGVmIENLX1NNQUxMCi0jZGVm aW5lIENLTE9HRElBTAotI2RlZmluZSBDWExPR0JVRkwgMTAyNAkJCS8qIENvbm5lY3Rpb24gbG9n IHJlY29yZCBidWZmZXIgc2l6ZSAqLwotI2VuZGlmIC8qIENLX1NNQUxMICovCi0jZW5kaWYgLyog Tk9MT0dESUFMICovCi0jZW5kaWYgLyogQ0tMT0dESUFMICovCi0KLSNlbmRpZiAvKiBOT0xPQ0FM ICovCi0KLSNpZmRlZiBOT1RUU1BETElTVAkJCS8qIEV4Y2VwdCBpZiBOT1RUU1BETElTVCBpcyBk ZWZpbmVkICovCi0jaWZkZWYgVFRTUERMSVNUCi0jdW5kZWYgVFRTUERMSVNUCi0jZW5kaWYgLyog VFRTUERMSVNUICovCi0jZW5kaWYgLyogTk9UVFNQRExJU1QgKi8KLQotI2lmZGVmIFRUU1BETElT VAotCi1fUFJPVE9UWVAoIGxvbmcgKiB0dHNwZGxpc3QsICh2b2lkKSApOwotCi0jZWxzZSAvKiBU VFNQRExJU1Qgbm90IGRlZmluZWQgKi8KLS8qCi0gIFdlIG11c3QgdXNlIGEgbG9uZyBhbmQgY29u dm9sdXRlZCBzZXJpZXMgb2YgI2lmZGVmcyB0aGF0IGhhdmUgdG8gYmUga2VwdCBpbgotICBzeW5j IHdpdGggdGhlIGNvZGUgaW4gdGhlIGNrP3Rpby5jIG1vZHVsZS4KLQotICBXZSBhc3N1bWUgdGhh dCBldmVyeWJvZHkgc3VwcG9ydHM6IDAsIDExMCwgMzAwLCA2MDAsIDEyMDAsIDI0MDAsIDQ4MDAs IGFuZAotICA5NjAwIGJwcy4gIFN5bWJvbHMgZm9yIG90aGVyIHNwZWVkcyBhcmUgZGVmaW5lZCBo ZXJlLiAgWW91IGNhbiBhbHNvIGFkZAotICBkZWZpbml0aW9ucyBvbiB0aGUgQ0MgY29tbWFuZCBs aW5lcy4gIFRoZXNlIGRlZmluaXRpb25zIGFmZmVjdCB0aGUgU0VUIFNQRUVECi0gIGtleXdvcmQg dGFibGUsIGFuZCBhcmUgbm90IG5lY2Vzc2FyaWx5IHVzYWJsZSBpbiB0aGUgc3lzdGVtLWRlcGVu ZGVudAotICBzcGVlZC1zZXR0aW5nIGNvZGUgaW4gdGhlIGNrP3Rpby5jIG1vZHVsZXMsIHdoaWNo IGRlcGVuZHMgb24gc3lzdGVtLXNwZWNpZmljCi0gIHN5bWJvbHMgbGlrZSAoaW4gVU5JWCkgQjE5 MjAwLiAgSW4gb3RoZXIgd29yZHMsIGp1c3QgZGVmaW5pbmcgaXQgZG9lc24ndAotICBtZWFuIGl0 J2xsIHdvcmsgLS0geW91IGFsc28gaGF2ZSB0byBzdXBwbHkgdGhlIHN1cHBvcnRpbmcgY29kZSBp biB0dHNzcGQoKQotICBhbmQgdHRnc3BkKCkgaW4gY2s/dGlvLmMuCi0KLSAgVGhlIHN5bWJvbHMg aGF2ZSB0aGUgZm9ybSBCUFNfeHh4eCwgd2hlcmUgeHh4eCBpcyB0aGUgc3BlZWQgaW4gYml0cyBw ZXIKLSAgc2Vjb25kLCBvciAoZm9yIGJwcyB2YWx1ZXMgbGFyZ2VyIHRoYW4gOTk5OSkgdGhvdXNh bmRzIG9mIGJwcyBmb2xsb3dlZCBieSBLLgotICBUaGUgdG90YWwgc3ltYm9sIGxlbmd0aCBzaG91 bGQgYmUgOCBjaGFyYWN0ZXJzIG9yIGxlc3MuICBTb21lIHZhbHVlcyBhcmUKLSAgZW5hYmxlZCBh dXRvbWF0aWNhbGx5IGJlbG93LiAgWW91IGNhbiBkaXNhYmxlIGEgcGFydGljdWxhciB2YWx1ZSBi eSBkZWZpbmluZwotICBOT0JfeHh4eCBvbiB0aGUgQ0MgY29tbWFuZCBsaW5lLgotCi0qLwotCi0j aWZuZGVmIE5PQl81MAotI2RlZmluZSBCUFNfNTAJCQkJLyogNTAgYnBzICovCi0jZW5kaWYKLQot I2lmbmRlZiBOT0JfNzUKLSNkZWZpbmUgQlBTXzc1CQkJCS8qIDc1IGJwcyAqLwotI2VuZGlmCi0K LSNpZm5kZWYgTk9CNzUxMgotI2lmZGVmIEFOWUJTRAotI2RlZmluZSBCUFNfNzUxMgkJCS8qIDc1 LzEyMDAgU3BsaXQgU3BlZWQgKi8KLSNlbmRpZiAvKiBBTllCU0QgKi8KLSNlbmRpZiAvKiBOT0I3 NTEyICovCi0KLSNpZm5kZWYgTk9CMTM0Ci0jaWZkZWYgU09MQVJJUzI1Ci0jZGVmaW5lIEJQU18x MzQKLSNlbHNlCi0jdW5kZWYgQlBTXzEzNAkJCQkvKiAxMzQuNSBicHMgKElCTSAyNzQxKSAqLwot I2VuZGlmIC8qIEJQU18xMzQgKi8KLSNlbmRpZiAvKiBOT0IxMzQgKi8KLQotI2lmbmRlZiBOT0Jf MTUwCi0jZGVmaW5lIEJQU18xNTAJCQkJLyogMTUwIGJwcyAqLwotI2VuZGlmCi0KLSNpZm5kZWYg Tk9CXzIwMAotI2RlZmluZSBCUFNfMjAwCQkJCS8qIDIwMCBicHMgKi8KLSNlbmRpZgotCi0jaWZu ZGVmIE5PQl8xODAwCi0jaWZkZWYgTUFDCi0jZGVmaW5lIEJQU18xODAwCQkJLyogMTgwMCBicHMg Ki8KLSNlbHNlCi0jaWZkZWYgU09MQVJJUzI1Ci0jZGVmaW5lIEJQU18xODAwCi0jZW5kaWYKLSNl bmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgTk9CXzM2MDAKLSNpZm5kZWYgU09MQVJJUzI1Ci0jZGVm aW5lIEJQU18zNjAwCQkJLyogMzYwMCBicHMgKi8KLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYg Tk9CXzcyMDAKLSNpZm5kZWYgU09MQVJJUzI1Ci0jZGVmaW5lIEJQU183MjAwCQkJLyogNzIwMCBi cHMgKi8KLSNlbmRpZiAvKiBTT0xBUklTMjUgKi8KLSNlbmRpZgotCi0jaWZuZGVmIE5PQl8xNEsK LSNpZmRlZiBCU0Q0NAotI2RlZmluZSBCUFNfMTRLCQkJCS8qIDE0NDAwIGJwcyAqLwotI2Vsc2UK LSNpZmRlZiBPUzIKLSNkZWZpbmUgQlBTXzE0SwotI2Vsc2UKLSNpZmRlZiBORVhUCi0jZGVmaW5l IEJQU18xNEsKLSNlbHNlCi0jaWZkZWYgTUFDCi0jZGVmaW5lIEJQU18xNEsKLSNlbHNlCi0jaWZk ZWYgQU1JR0EKLSNkZWZpbmUgQlBTXzE0SwotI2VuZGlmIC8qIEFNSUdBICovCi0jZW5kaWYgLyog TUFDICovCi0jZW5kaWYgLyogTkVYVCAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIEJT RDQ0ICovCi0jZW5kaWYgLyogTk9CXzE0SyAqLwotCi0jaWZuZGVmIE5PQl8xOUsKLSNkZWZpbmUg QlBTXzE5SwkJCQkvKiAxOTIwMCBicHMgKi8KLSNlbmRpZgotCi0jaWZuZGVmIE5PQl8yOEsKLSNp ZmRlZiBCU0Q0NAotI2RlZmluZSBCUFNfMjhLCi0jZWxzZQotI2lmZGVmIE9TMgotI2RlZmluZSBC UFNfMjhLCi0jZWxzZQotI2lmZGVmIE5FWFQKLSNkZWZpbmUgQlBTXzI4SwkJCQkvKiAyODgwMCBi cHMgKi8KLSNlbHNlCi0jaWZkZWYgTUFDCi0jZGVmaW5lIEJQU18yOEsJCQkJLyogMjg4MDAgYnBz ICovCi0jZW5kaWYgLyogTUFDICovCi0jZW5kaWYgLyogTkVYVCAqLwotI2VuZGlmIC8qIE9TMiAq LwotI2VuZGlmIC8qIEJTRDQ0ICovCi0jZW5kaWYgLyogTk9CXzI4SyAqLwotCi0jaWZuZGVmIE5P Ql8zOEsKLSNkZWZpbmUgQlBTXzM4SwkJCQkvKiAzODQwMCBicHMgKi8KLSNlbmRpZgotCi0jaWZu ZGVmIE5PQl81N0sKLSNpZmRlZiBQbGFuOQotI2RlZmluZSBCUFNfNTdLCi0jZWxzZQotI2lmZGVm IFNPTEFSSVMyNQotI2RlZmluZSBCUFNfNTdLCi0jZWxzZQotI2lmZGVmIFZNUwotI2RlZmluZSBC UFNfNTdLCQkJCS8qIDU3NjAwIGJwcyAqLwotI2Vsc2UKLSNpZmRlZiBPUzIKLSNkZWZpbmUgQlBT XzU3SwotI2Vsc2UKLSNpZmRlZiBfX2xpbnV4X18KLSNkZWZpbmUgQlBTXzU3SwotI2Vsc2UKLSNp ZmRlZiBIUFVYCi0jZGVmaW5lIEJQU181N0sKLSNlbHNlCi0jaWZkZWYgTkVYVAotI2RlZmluZSBC UFNfNTdLCi0jZWxzZQotI2lmZGVmIF9fMzg2QlNEX18KLSNkZWZpbmUgQlBTXzU3SwotI2Vsc2UK LSNpZmRlZiBfX0ZyZWVCU0RfXwotI2RlZmluZSBCUFNfNTdLCi0jZWxzZQotI2lmZGVmIF9fTmV0 QlNEX18KLSNkZWZpbmUgQlBTXzU3SwotI2Vsc2UKLSNpZmRlZiBNQUMKLSNkZWZpbmUgQlBTXzU3 SwotI2Vsc2UKLSNpZmRlZiBRTlgKLSNkZWZpbmUgQlBTXzU3SwotI2Vsc2UKLSNpZmRlZiBCRU9T T1JCRUJPWAotI2RlZmluZSBCUFNfNTdLCi0jZWxzZQotI2lmZGVmIElSSVg2MgotI2RlZmluZSBC UFNfNTdLCi0jZWxzZQotI2lmZGVmIFNDT19PU1I1MDQKLSNkZWZpbmUgQlBTXzU3SwotI2Vsc2UK LSNpZmRlZiBCU0RJMgotI2RlZmluZSBCUFNfNTdLCi0jZW5kaWYgLyogQlNESTIgKi8KLSNlbmRp ZiAvKiBTQ09fT1NSNTA0ICovCi0jZW5kaWYgLyogSVJJWDYyICovCi0jZW5kaWYgLyogQkVPU09S QkVCT1ggKi8KLSNlbmRpZiAvKiBRTlggKi8KLSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBf X05ldEJTRF9fICovCi0jZW5kaWYgLyogX19GcmVlQlNEX18gKi8KLSNlbmRpZiAvKiBfXzM4NkJT RF9fICovCi0jZW5kaWYgLyogTkVYVCAqLwotI2VuZGlmIC8qIEhQVVggKi8KLSNlbmRpZiAvKiBf X2xpbnV4X18gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAv KiBTT0xBUklTMjUgKi8KLSNlbmRpZiAvKiBQbGFuOSAqLwotI2VuZGlmIC8qIE5PQl81N0sgKi8K LQotI2lmbmRlZiBOT0JfNzZLCi0jaWZkZWYgQlNESTIKLSNkZWZpbmUgQlBTXzc2SwotI2VuZGlm IC8qIEJTREkyICovCi0jaWZkZWYgUGxhbjkKLSNkZWZpbmUgQlBTXzc2SwotI2VuZGlmIC8qIFBs YW45ICovCi0jaWZkZWYgU09MQVJJUzI1Ci0jZGVmaW5lIEJQU183NksKLSNlbmRpZiAvKiBTT0xB UklTMjUgKi8KLSNpZmRlZiBWTVMKLSNkZWZpbmUgQlBTXzc2SwkJCQkvKiA3NjgwMCBicHMgKi8K LSNlbmRpZiAvKiBWTVMgKi8KLSNpZmRlZiBPUzIKLSNpZmRlZiBfXzMyQklUX18KLSNkZWZpbmUg QlBTXzc2SwotI2VuZGlmIC8qIF9fMzJCSVRfXyAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2lmZGVm IFFOWAotI2RlZmluZSBCUFNfNzZLCi0jZW5kaWYgLyogUU5YICovCi0jaWZkZWYgSVJJWDYyCi0j ZGVmaW5lIEJQU183NksKLSNlbmRpZiAvKiBJUklYNjIgKi8KLSNpZmRlZiBTQ09fT1NSNTA0Ci0j ZGVmaW5lIEJQU183NksKLSNlbmRpZiAvKiBTQ09fT1NSNTA0ICovCi0jZW5kaWYgLyogTk9CXzc2 SyAqLwotCi0jaWZuZGVmIE5PQl8xMTVLCi0jaWZkZWYgQlNESTIKLSNkZWZpbmUgQlBTXzExNUsK LSNlbmRpZiAvKiBCU0RJMiAqLwotI2lmZGVmIFBsYW45Ci0jZGVmaW5lIEJQU18xMTVLCi0jZW5k aWYgLyogUGxhbjkgKi8KLSNpZmRlZiBTT0xBUklTMjUKLSNkZWZpbmUgQlBTXzExNUsKLSNlbmRp ZiAvKiBTT0xBUklTMjUgKi8KLSNpZmRlZiBWTVMKLSNkZWZpbmUgQlBTXzExNUsJCQkvKiAxMTUy MDAgYnBzICovCi0jZWxzZQotI2lmZGVmIFFOWAotI2RlZmluZSBCUFNfMTE1SwotI2Vsc2UKLSNp ZmRlZiBIUFVYCi0jZGVmaW5lIEJQU18xMTVLCi0jZWxzZQotI2lmZGVmIF9fbGludXhfXwotI2Rl ZmluZSBCUFNfMTE1SwotI2Vsc2UKLSNpZmRlZiBfXzM4NkJTRF9fCi0jZGVmaW5lIEJQU18xMTVL Ci0jZWxzZQotI2lmZGVmIF9fRnJlZUJTRF9fCi0jZGVmaW5lIEJQU18xMTVLCi0jZWxzZQotI2lm ZGVmIF9fTmV0QlNEX18KLSNkZWZpbmUgQlBTXzExNUsKLSNlbHNlCi0jaWZkZWYgT1MyCi0jaWZk ZWYgX18zMkJJVF9fCi0jZGVmaW5lIEJQU18xMTVLCi0jZW5kaWYgLyogX18zMkJJVF9fICovCi0j ZWxzZQotI2lmZGVmIEJFT1NPUkJFQk9YCi0jZGVmaW5lIEJQU18xMTVLCi0jZWxzZQotI2lmZGVm IElSSVg2MgotI2RlZmluZSBCUFNfMTE1SwotI2Vsc2UKLSNpZmRlZiBTQ09fT1NSNTA0Ci0jZGVm aW5lIEJQU18xMTVLCi0jZW5kaWYgLyogU0NPX09TUjUwNCAqLwotI2VuZGlmIC8qIElSSVg2MiAq LwotI2VuZGlmIC8qIEJFT1NPUkJFQk9YICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyog X19OZXRCU0RfXyAqLwotI2VuZGlmIC8qIF9fRnJlZUJTRF9fICovCi0jZW5kaWYgLyogX18zODZC U0RfXyAqLwotI2VuZGlmIC8qIF9fbGludXhfXyAqLwotI2VuZGlmIC8qIEhQVVggKi8KLSNlbmRp ZiAvKiBRTlggKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBOT0JfMTE1SyAqLwotCi0j aWZuZGVmIE5PQl8yMzBLCQkJLyogMjMwNDAwIGJwcyAqLwotI2lmZGVmIEJTREkyCi0jZGVmaW5l IEJQU18yMzBLCi0jZWxzZQotI2lmZGVmIFNDT19PU1I1MDQKLSNkZWZpbmUgQlBTXzIzMEsKLSNl bHNlCi0jaWZkZWYgX19saW51eF9fCi0jZGVmaW5lIEJQU18yMzBLCi0jZWxzZQotI2lmZGVmIFNP TEFSSVMyNQotI2RlZmluZSBCUFNfMjMwSwotI2Vsc2UKLSNpZmRlZiBPUzIKLSNpZmRlZiBfXzMy QklUX18KLSNkZWZpbmUgQlBTXzIzMEsKLSNlbmRpZiAvKiBfXzMyQklUX18gKi8KLSNlbHNlCi0j dW5kZWYgQlBTXzIzMEsKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBTT0xBUklTMjUgKi8K LSNlbmRpZiAvKiBfX2xpbnV4X18gKi8KLSNlbmRpZiAvKiBTQ09fT1NSNTA0ICovCi0jZW5kaWYg LyogQlNESTIgKi8KLSNlbmRpZiAvKiBOT0JfMjMwSyAqLwotCi0jaWZuZGVmIE5PQl80NjBLCQkJ LyogNDYwODAwIGJwcyAqLwotI2lmZGVmIFNDT19PU1I1MDQKLSNkZWZpbmUgQlBTXzQ2MEsKLSNl bHNlCi0jaWZkZWYgX19saW51eF9fCi0jZGVmaW5lIEJQU180NjBLCi0jZWxzZQotI2lmZGVmIE9T MgotI2lmZGVmIF9fMzJCSVRfXwotI2RlZmluZSBCUFNfNDYwSwotI2VuZGlmIC8qIF9fMzJCSVRf XyAqLwotI2Vsc2UKLSN1bmRlZiBCUFNfNDYwSwotI2VuZGlmIC8qIF9fbGludXhfXyAqLwotI2Vu ZGlmIC8qIFNDT19PU1I1MDQgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT0JfNDYw SyAqLwotCi0jaWZuZGVmIE5PQl85MjFLCQkJLyogOTIxNjAwIGJwcyAqLwotI2lmZGVmIFNDT19P U1I1MDQKLSNkZWZpbmUgQlBTXzkyMUsKLSNlbmRpZiAvKiBTQ09fT1NSNTA0ICovCi0jZW5kaWYg LyogTk9CXzkyMUsgKi8KLQotI2lmZGVmIEJQU185MjFLCQkJCS8qIE1heGltdW0gc3BlZWQgZGVm aW5lZCAqLwotI2RlZmluZSBNQVhfU1BEIDkyMTYwMEwKLSNlbHNlCi0jaWZkZWYgQlBTXzQ2MEsK LSNkZWZpbmUgTUFYX1NQRCA0NjA4MDBMCi0jZWxzZQotI2lmZGVmIEJQU18yMzBLCi0jZGVmaW5l IE1BWF9TUEQgMjMwNDAwTAotI2Vsc2UKLSNpZmRlZiBCUFNfMTE1SwotI2RlZmluZSBNQVhfU1BE IDExNTIwMEwKLSNlbHNlCi0jaWZkZWYgQlBTXzc2SwotI2RlZmluZSBNQVhfU1BEIDc2ODAwTAot I2Vsc2UKLSNpZmRlZiBCUFNfNTdLCi0jZGVmaW5lIE1BWF9TUEQgNTc2MDBMCi0jZWxzZQotI2lm ZGVmIEJQU18zOEsKLSNkZWZpbmUgTUFYX1NQRCAzODQwMEwKLSNlbHNlCi0jaWZkZWYgQlBTXzI4 SwotI2RlZmluZSBNQVhfU1BEIDI4ODAwTAotI2Vsc2UKLSNpZmRlZiBCUFNfMTlLCi0jZGVmaW5l IE1BWF9TUEQgMTkyMDBMCi0jZWxzZQotI2lmZGVmIEJQU18xNEsKLSNkZWZpbmUgTUFYX1NQRCAx NDQwMEwKLSNlbHNlCi0jZGVmaW5lIE1BWF9TUEQgOTYwMEwKLSNlbmRpZgotI2VuZGlmCi0jZW5k aWYKLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYKLSNlbmRp ZgotI2VuZGlmIC8qIFRUU1BETElTVCAqLwotCi0jaWZuZGVmIENPTkdTUEQJCQkJLyogU3lzdGVt cyB0aGF0IGNhbiBjYWxsIGNvbmdzcGQoKSAqLwotI2lmZGVmIFVOSVgKLSNkZWZpbmUgQ09OR1NQ RAotI2VuZGlmIC8qIFVOSVggKi8KLSNpZmRlZiBWTVMKLSNkZWZpbmUgQ09OR1NQRAotI2VuZGlm IC8qIFZNUyAqLwotI2lmZGVmIFNUUkFUVVMKLSNkZWZpbmUgQ09OR1NQRAotI2VuZGlmIC8qIFNU UkFUVVMgKi8KLSNlbmRpZiAvKiBDT05HU1BEICovCi0KLS8qIFR5cGVzIG9mIGZsb3cgY29udHJv bCBhdmFpbGFibGUgKi8KLQotI2RlZmluZSBDS19YT05YT0ZGCQkJLyogRXZlcnlib2R5IGNhbiBk byB0aGlzLCByaWdodD8gKi8KLQotI2lmZGVmIEFNSUdBCQkJCS8qIENvbW1vZG9yZSBBbWlnYSAq LwotI2RlZmluZSBDS19SVFNDVFMJCQkvKiBoYXMgUlRTL0NUUyAqLwotI2VuZGlmIC8qIEFNSUdB ICovCi0KLSNpZmRlZiBTVU40UzUJCQkJLyogU3VuT1MgaW4gU3lzdGVtIFYgZW52aXJvbm1lbnQg Ki8KLSNkZWZpbmUgQ0tfUlRTQ1RTCi0jZWxzZQkJCQkJLyogU3VuT1MgNC4wLzQuMSBpbiBCU0Qg ZW52aXJvbm1lbnQgKi8KLSNpZmRlZiBTVU5PUzQJCQkJLyogU3VuT1MgNC4wK2xhdGVyIHN1cHBv cnRzIFJUUy9DVFMgKi8KLSNpZmRlZiBTVU5PUzQxCQkJCS8qIEVhc3kgaW4gNC4xIGFuZCBsYXRl ciAqLwotI2RlZmluZSBDS19SVFNDVFMKLSNlbHNlCQkJCQkvKiBIYXJkZXIgaW4gNC4wICovCi0j aWZuZGVmIF9fR05VQ19fCQkJLyogKHNlZSB0dGhmbG93KCkgaW4gY2t1dGlvLmMpICovCi0jaWZu ZGVmIEdOVUMKLSNkZWZpbmUgQ0tfUlRTQ1RTCQkJLyogT25seSBpZiBub3QgdXNpbmcgR05VIGdj YyAqLwotI2VuZGlmIC8qIF9fR05VQ19fICovCi0jZW5kaWYgLyogR05VQyAqLwotI2VuZGlmIC8q IFNVTk9TNDEgKi8KLSNlbmRpZiAvKiBTVU5PUzQgKi8KLSNlbmRpZiAvKiBTVU40UzUgKi8KLQot I2lmZGVmIEJTRDQ0CQkJCS8qIEFuZCBpbiA0LjQgQlNELCBpbmNsdWRpbmcgQlNESSAqLwotI2Rl ZmluZSBDS19SVFNDVFMKLSNlbmRpZiAvKiBCU0Q0NCAqLwotCi0jaWZkZWYgVEVSTUlPWAkJCQkv KiBTeXMgViBSNCA8dGVybWlveC5oPiAqLwotI2lmbmRlZiBDS19SVFNDVFMKLSNkZWZpbmUgQ0tf UlRTQ1RTCi0jZW5kaWYgLyogQ0tfUlRTQ1RTICovCi0jaWZuZGVmIENLX0RUUkNECi0jZGVmaW5l IENLX0RUUkNECi0jZW5kaWYgLyogQ0tfRFRSQ0QgKi8KLSNlbHNlCi0jaWZkZWYgU1RFUk1JT1gJ CQkJLyogU3lzIFYgUjQgPHN5cy90ZXJtaW94Lmg+ICovCi0jaWZuZGVmIENLX1JUU0NUUwotI2Rl ZmluZSBDS19SVFNDVFMKLSNlbmRpZiAvKiBDS19SVFNDVFMgKi8KLSNpZm5kZWYgQ0tfRFRSQ0QK LSNkZWZpbmUgQ0tfRFRSQ0QKLSNlbmRpZiAvKiBDS19EVFJDRCAqLwotI2VuZGlmIC8qIFNURVJN SU9YICovCi0jZW5kaWYgLyogVEVSTUlPWCAqLwotCi0jaWZkZWYgT1hPUwkJCQkvKiBPbGl2ZXR0 aSBYL09TIFIyIHN0cnVjdCB0ZXJtaW9zICovCi0jZGVmaW5lIENLX1JUU0NUUwkJCS8qIERpdHRv LiAqLwotI2RlZmluZSBDS19EVFJDRAotI2VuZGlmIC8qIE9YT1MgKi8KLQotI2lmZGVmIEFJWFJT CQkJCS8qIFJTLzYwMDAgd2l0aCBBSVggMy54ICovCi0jZGVmaW5lIENLX1JUU0NUUwkJCS8qIEhh cyBpdHMgb3duIHBlY3VsaWFyIG1ldGhvZC4uLiAqLwotI2VuZGlmIC8qIEFJWFJTICovCi0KLSNp ZmRlZiBfX2xpbnV4X18JCQkvKiBMaW51eCAqLwotI2RlZmluZSBDS19SVFNDVFMKLSNlbmRpZiAv KiBfX2xpbnV4X18gKi8KLS8qCi0gIEhhcmR3YXJlIGZsb3cgY29udHJvbCBpcyBub3QgZGVmaW5l ZCBpbiBQT1NJWC4xLiAgTmV2ZXJ0aGVsZXNzLCBhIGNlcnRhaW4KLSAgc3R5bGUgQVBJIGZvciBo YXJkd2FyZSBmbG93IGNvbnRyb2wsIHVzaW5nIHRjc2V0YXR0cigpIGFuZCB0aGUgQ1JUU0NUUwot ICBiaXQocyksIHNlZW1zIHRvIGJlIGdhaW5pbmcgY3VycmVuY3kgb24gUE9TSVgtYmFzZWQgVU5J WCBzeXN0ZW1zLiAgVGhlCi0gIGZvbGxvd2luZyBjb2RlIGRlZmluZXMgdGhlIHN5bWJvbCBQT1NJ WF9DUlRTQ1RTIGZvciBzdWNoIHN5c3RlbXMuCi0qLwotI2lmZGVmIENLX1JUU0NUUwotI2lmZGVm IF9fYnNkaV9fCQkJCS8qIEJTREksIGEuay5hLiBCU0QvMzg2ICovCi0jZGVmaW5lIFBPU0lYX0NS VFNDVFMKLSNlbmRpZiAvKiBfX2JzZGlfXyAqLwotI2lmZGVmIF9fbGludXhfXwkJCS8qIExpbnV4 ICovCi0jZGVmaW5lIFBPU0lYX0NSVFNDVFMKLSNlbmRpZiAvKiBfX2xpbnV4X18gKi8KLSNpZmRl ZiBfX05ldEJTRF9fCQkJLyogTmV0QlNEICovCi0jZGVmaW5lIFBPU0lYX0NSVFNDVFMKLSNlbmRp ZiAvKiBfX05ldEJTRF9fICovCi0jaWZkZWYgX19PcGVuQlNEX18KLSNkZWZpbmUgUE9TSVhfQ1JU U0NUUwotI2VuZGlmIC8qIF9fT3BlbkJTRF9fICovCi0jaWZkZWYgQkVPU09SQkVCT1gJCQkvKiBC ZUJPWCAqLwotI2RlZmluZSBQT1NJWF9DUlRTQ1RTCi0vKiBCRUJPWCBkZWZpbmVzIENSVFNGTCBh cyAoQ1RTRkxPVyAmIFJUU0ZMT1cpICovCi0jZGVmaW5lIENSVFNDVFMgQ1JUU0ZMCi0jZW5kaWYg LyogQkVPU09SQkVCT1ggKi8KLSNpZmRlZiBJUklYNTIJCQkJLyogSVJJWCA1LjIgYW5kIGxhdGVy ICovCi0jZGVmaW5lIFBPU0lYX0NSVFNDVFMKLSNkZWZpbmUgQ1JUU0NUUyBDTkVXX1JUU0NUUwkJ LyogU2VlIDxzeXMvdGVybWlvcy5oPiAqLwotI2VuZGlmIC8qIElSSVg1MiAqLwotI2VuZGlmIC8q IENLX1JUU0NUUyAqLwotCi0vKiBJbXBsZW1lbnRhdGlvbnMgdGhhdCBoYXZlIGltcGxlbWVudGVk IHRoZSB0dHNldGZsb3coKSBmdW5jdGlvbi4gKi8KLQotI2lmbmRlZiBDS19UVFNFVEZMT1cKLSNp ZmRlZiBVTklYCi0jZGVmaW5lIENLX1RUU0VURkxPVwotI2VuZGlmIC8qIFVOSVggKi8KLSNpZmRl ZiBPUzIKLSNkZWZpbmUgQ0tfVFRTRVRGTE9XCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyog Q0tfVFRTRVRGTE9XICovCi0KLSNpZmRlZiBDS19UVFNFVEZMT1cKLV9QUk9UT1RZUCggaW50IHR0 c2V0ZmxvdywgKGludCkgKTsKLSNlbmRpZiAvKiBDS19UVFNFVEZMT1cgKi8KLS8qCi0gU3lzdGVt cyB3aGVyZSB3ZSBjYW4gZXhwYW5kIHRpbGRlIGF0IHRoZSBiZWdpbm5pbmcgb2YgZmlsZSBvciBk aXJlY3RvcnkgbmFtZXMKLSovCi0jaWZkZWYgUE9TSVgKLSNpZm5kZWYgRFRJTERFCi0jZGVmaW5l IERUSUxERQotI2VuZGlmIC8qIERUSUxERSAqLwotI2VuZGlmIC8qIFBPU0lYICovCi0jaWZkZWYg QlNENAotI2lmbmRlZiBEVElMREUKLSNkZWZpbmUgRFRJTERFCi0jZW5kaWYgLyogRFRJTERFICov Ci0jZW5kaWYgLyogQlNENCAqLwotI2lmZGVmIEFUVFNWCi0jaWZuZGVmIERUSUxERQotI2RlZmlu ZSBEVElMREUKLSNlbmRpZiAvKiBEVElMREUgKi8KLSNlbmRpZiAvKiBBVFRTViAqLwotI2lmZGVm IE9TSwotI2lmbmRlZiBEVElMREUKLSNkZWZpbmUgRFRJTERFCi0jZW5kaWYgLyogRFRJTERFICov Ci0jZW5kaWYgLyogT1NLICovCi0jaWZkZWYgSFBVWAkJCQkvKiBJIGRvbid0IGtub3cgd2h5IHRo aXMgaXMgKi8KLSNpZm5kZWYgRFRJTERFCQkJCS8qIG5lY2Vzc2FyeSwgc2luY2UgLURIUFVYICov Ci0jZGVmaW5lIERUSUxERQkJCQkvKiBhdXRvbWF0aWNhbGx5IGRlZmluZXMgQVRUU1YgKi8KLSNl bmRpZiAvKiBEVElMREUgKi8JCQkvKiAoc2VlIGFib3ZlKSAuLi4gKi8KLSNlbmRpZiAvKiBIUFVY ICovCi0KLS8qCi0gIFRoaXMgaXMgbWFpbmx5IGZvciB0aGUgYmVuZWZpdCBvZiBja3VmaW8uYyAo VU5JWCBhbmQgT1MvMiBmaWxlIHN1cHBvcnQpLgotICBTeXN0ZW1zIHRoYXQgaGF2ZSBhbiBhdG9t aWMgcmVuYW1lKCkgZnVuY3Rpb24sIHNvIHdlIGRvbid0IGhhdmUgdG8gdXNlCi0gIGxpbmsoKSBh bmQgdW5saW5rKCkuCi0qLwotI2lmZGVmIFBPU0lYCi0jaWZuZGVmIFJFTkFNRQotI2RlZmluZSBS RU5BTUUKLSNlbmRpZiAvKiBSRU5BTUUgKi8KLSNlbmRpZiAvKiBQT1NJWCAqLwotCi0jaWZkZWYg T1MyCi0jaWZuZGVmIFJFTkFNRQotI2RlZmluZSBSRU5BTUUKLSNlbmRpZiAvKiBSRU5BTUUgKi8K LSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIFNVTk9TNDEKLSNpZm5kZWYgUkVOQU1FCi0jZGVm aW5lIFJFTkFNRQotI2VuZGlmIC8qIFJFTkFNRSAqLwotI2VuZGlmIC8qIFNVTk9TNDEgKi8KLQot I2lmZGVmIFNWUjQKLSNpZm5kZWYgUkVOQU1FCi0jZGVmaW5lIFJFTkFNRQotI2VuZGlmIC8qIFJF TkFNRSAqLwotI2VuZGlmIC8qIFNWUjQgKi8KLQotI2lmZGVmIEFJWFJTCi0jaWZuZGVmIFJFTkFN RQotI2RlZmluZSBSRU5BTUUKLSNlbmRpZiAvKiBSRU5BTUUgKi8KLSNlbmRpZiAvKiBBSVhSUyAq LwotCi0jaWZkZWYgQlNENDQKLSNpZm5kZWYgUkVOQU1FCi0jZGVmaW5lIFJFTkFNRQotI2VuZGlm IC8qIFJFTkFNRSAqLwotI2VuZGlmIC8qIEJTRDQ0ICovCi0KLSNpZmRlZiBOT1JFTkFNRQkJCQkv KiBBbGxvdyBmb3IgY29tcGlsZS10aW1lIG92ZXJyaWRlICovCi0jaWZkZWYgUkVOQU1FCi0jdW5k ZWYgUkVOQU1FCi0jZW5kaWYgLyogUkVOQU1FICovCi0jZW5kaWYgLyogTk9SRU5BTUUgKi8KLQot I2lmZGVmIFNUUkFUVVMJCQkJLyogU3RyYXR1cyBWT1MgKi8KLSNpZm5kZWYgUkVOQU1FCi0jZGVm aW5lIFJFTkFNRQotI2VuZGlmIC8qIFJFTkFNRSAqLwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLQot LyogTGluZSBkZWxpbWl0ZXIgZm9yIHRleHQgZmlsZXMgKi8KLQotLyoKLSBJZiB0aGUgc3lzdGVt IHVzZXMgYSBzaW5nbGUgY2hhcmFjdGVyIGZvciB0ZXh0IGZpbGUgbGluZSBkZWxpbWl0YXRpb24s Ci0gZGVmaW5lIE5MQ0hBUiB0byB0aGUgdmFsdWUgb2YgdGhhdCBjaGFyYWN0ZXIuICBGb3IgdGV4 dCBmaWxlcywgdGhhdAotIGNoYXJhY3RlciB3aWxsIGJlIGNvbnZlcnRlZCB0byBDUkxGIHVwb24g b3V0cHV0LCBhbmQgQ1JMRiB3aWxsIGJlIGNvbnZlcnRlZAotIHRvIHRoYXQgY2hhcmFjdGVyIG9u IGlucHV0IGR1cmluZyB0ZXh0LW1vZGUgKGRlZmF1bHQpIHBhY2tldCBvcGVyYXRpb25zLgotKi8K LSNpZmRlZiBNQUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYWNpbnRvc2ggKi8K LSNkZWZpbmUgTkxDSEFSIDAxNQotI2Vsc2UKLSNpZmRlZiBPU0sJCQkJLyogT1MtOS82OEsgKi8K LSNkZWZpbmUgTkxDSEFSIDAxNQotI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEFsbCBVbml4LWxpa2Ugc3lzdGVtcyAqLwotI2RlZmluZSBOTENIQVIgMDEyCi0jZW5k aWYgLyogT1NLICovCi0jZW5kaWYgLyogTUFDICovCi0KLS8qCi0gQXQgdGhpcyBwb2ludCwgaWYg dGhlcmUncyBhIHN5c3RlbSB0aGF0IHVzZXMgb3JkaW5hcnkgQ1JMRiBsaW5lCi0gZGVsaW1pdGF0 aW9uIEFORCB0aGUgQyBjb21waWxlciBhY3R1YWxseSByZXR1cm5zIGJvdGggdGhlIENSIGFuZAot IHRoZSBMRiB3aGVuIGRvaW5nIGlucHV0IGZyb20gYSBmaWxlLCB0aGVuICN1bmRlZiBOTENIQVIu Ci0qLwotI2lmZGVmIE9TMgkJCQkvKiBPUy8yICovCi0jdW5kZWYgTkxDSEFSCi0jZW5kaWYgLyog T1MyICovCi0KLSNpZmRlZiBHRU1ET1MJCQkJLyogQXRhcmkgU1QgKi8KLSN1bmRlZiBOTENIQVIK LSNlbmRpZiAvKiBHRU1ET1MgKi8KLQotLyoKLSAgVk1TIGZpbGUgZm9ybWF0cyBhcmUgc28gY29t cGxpY2F0ZWQgd2UgbmVlZCB0byBkbyBhbGwgdGhlIGNvbnZlcnNpb24KLSAgd29yayBpbiB0aGUg Q0tWRklPIG1vZHVsZSwgc28gd2UgdGVsbCB0aGUgcmVzdCBvZiBDLUtlcm1pdCBub3QgdG8gZmlk ZGxlCi0gIHdpdGggdGhlIGJ5dGVzLgotKi8KLQotI2lmZGVmIHZtcwotI3VuZGVmIE5MQ0hBUgot I2VuZGlmIC8qIHZtcyAqLwotCi0vKiBUaGUgZGV2aWNlIG5hbWUgb2YgYSBqb2IncyBjb250cm9s bGluZyB0ZXJtaW5hbCAqLwotLyogU3BlY2lhbCBmb3IgVk1TLCBzYW1lIGZvciBhbGwgVW5peGVz ICg/KSwgbm90IHVzZWQgYnkgTWFjaW50b3NoICovCi0KLSNpZmRlZiBCRU9TCi0jZGVmaW5lIENU VE5BTSBkZnR0eQotI2Vsc2UKLSNpZmRlZiB2bXMKLSNkZWZpbmUgQ1RUTkFNICJTWVMkSU5QVVQ6 IgkJLyogKDQgSmFuIDIwMDIpIFdhcyBUVDogKi8KLSNlbHNlCi0jaWZkZWYgZGF0YWdlbmVyYWwK LSNkZWZpbmUgQ1RUTkFNICJAb3V0cHV0IgotI2Vsc2UKLSNpZmRlZiBPU0sKLWV4dGVybiBjaGFy IG15dHR5c3RyW107Ci0jZGVmaW5lIENUVE5BTSBteXR0eXN0cgotI2Vsc2UKLSNpZmRlZiBPUzIK LSNkZWZpbmUgQ1RUTkFNICJjb24iCi0jZWxzZQotI2lmZGVmIFVOSVgKLSNkZWZpbmUgQ1RUTkFN ICIvZGV2L3R0eSIKLSNlbHNlCi0jaWZkZWYgR0VNRE9TCi0jZGVmaW5lIENUVE5BTSAiYXV4OiIK LSNlbHNlCi0jaWZkZWYgU1RSQVRVUwotZXh0ZXJuIGNoYXIgbXl0dHlzdHJbXTsKLSNkZWZpbmUg Q1RUTkFNIG15dHR5c3RyCi0jZWxzZSAvKiBBbnlvbmUgZWxzZS4uLiAqLwotI2RlZmluZSBDVFRO QU0gInN0ZG91dCIJCQkvKiBUaGlzIGlzIGEga2x1ZGdlIHVzZWQgYnkgTWFjICovCi0jZW5kaWYg LyogU1RSQVRVUyAqLwotI2VuZGlmIC8qIEdFTURPUyAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSNl bmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBPU0sgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAq LwotI2VuZGlmIC8qIHZtcyAqLwotI2VuZGlmIC8qIEJFT1MgKi8KLQotI2lmbmRlZiBIQVZFQ1RU TkFNCi0jaWZkZWYgVU5JWAotI2RlZmluZSBIQVZFQ1RUTkFNCi0jZWxzZQotI2lmZGVmIFZNUwot I2RlZmluZSBIQVZFQ1RUTkFNCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogVU5JWCAqLwot I2VuZGlmIC8qIEhBVkVDVFROQU0gKi8KLQotI2lmbmRlZiBaRkNEQVQJCQkJLyogemZjZGF0KCkg ZnVuY3Rpb24gYXZhaWxhYmxlPyAqLwotI2lmZGVmIFVOSVgKLSNkZWZpbmUgIFpGQ0RBVAotI2Vs c2UKLSNpZmRlZiBTVFJBVFVTCi0jZGVmaW5lICBaRkNEQVQKLSNlbHNlCi0jaWZkZWYgR0VNRE9T Ci0jZGVmaW5lICBaRkNEQVQKLSNlbHNlCi0jaWZkZWYgQU1JR0EKLSNkZWZpbmUgIFpGQ0RBVAot I2Vsc2UKLSNpZmRlZiBPUzIKLSNkZWZpbmUgIFpGQ0RBVAotI2Vsc2UKLSNpZmRlZiBkYXRhZ2Vu ZXJhbAotI2RlZmluZSAgWkZDREFUCi0jZWxzZQotI2lmZGVmIFZNUwotI2RlZmluZSAgWkZDREFU Ci0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBP UzIgKi8KLSNlbmRpZiAvKiBBTUlHQSAqLwotI2VuZGlmIC8qIEdFTURPUyAqLwotI2VuZGlmIC8q IFNUUkFUVVMgKi8KLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogWkZDREFUICovCi0KLSNp ZmRlZiBTVU5TNFM1Ci0jZGVmaW5lIHRvbG93ZXIgX3RvbG93ZXIKLSNkZWZpbmUgdG91cHBlciBf dG91cHBlcgotI2VuZGlmIC8qIFNVTlM0UzUgKi8KLQotLyogRXJyb3IgbnVtYmVyICovCi0KLSNp ZmRlZiBfQ1JBWQotI2lmZGVmIF9DUkFZQ09NCQkJCS8qIENyYXkgQ29tcHV0ZXIgQ29ycC4gKi8K LWV4dGVybiBpbnQgZXJybm87Ci0jZWxzZSAvKiBfQ1JBWUNPTSAqLwotI2luY2x1ZGUgPGVycm5v Lmg+CQkJLyogQ3JheSBSZXNlYXJjaCBVTklDT1MgZGVmaW5lcyAqLwotCQkJCQkvKiBlcnJubyBh cyBhIGZ1bmN0aW9uLiAqLwotI2VuZGlmIC8qIF9DUkFZQ09NICovCQkJLyogT0sgZm9yIFVOSUNP UyA2LjEgYW5kIDcuMC4gKi8KLSNlbHNlIC8qIF9DUkFZICovCi0jaWZkZWYgU1RSQVRVUwkJCQkv KiBTdHJhdHVzIFZPUyAqLwotI2luY2x1ZGUgPGVycm5vLmg+Ci0jZWxzZSAvKiBub3QgU1RSQVRV UyAqLwotI2lmbmRlZiBWTVMKLSNpZm5kZWYgT1MyCi0jaWZkZWYgX19HTElCQ19fCi0vKgotICAi Z2xpYmMgdXNlcyB0aHJlYWRzLCBrZXJtaXQgdXNlcyBnbGliYzsgZXJybm8gYWNjZXNzIGlzIGlu IFRocmVhZCBMb2NhbAotICBTdG9yYWdlIChUTFMpIGZyb20gZ2xpYmMtMy4yLjIuICAuLi5hIHRo cmVhZCBzcGVjaWZpYyBlcnJubyBpcyBiZWluZyBydW4gaW4KLSAgdGhyZWFkIGxvY2FsIHN0b3Jh Z2UgcmVsYXRpdmUgdG8gdGhlICVncyBzZWdtZW50IHJlZ2lzdGVyLCBzbyBzb21lIG1lYW5zIHRv Ci0gIHJldmVjdG9yIGdldHMvcHV0cyBuZWVkcyB0byBiZSBkb25lLiIgLSBKZWZmIEpvaG5zb24s IFJlZCBIYXQsIEZlYiAyMDAzLgotKi8KLSNpbmNsdWRlIDxlcnJuby5oPgotI2Vsc2UKLS8qCi0g IFRoZSBmb2xsb3dpbmcgZGVjbGFyYXRpb24gd291bGQgY2F1c2UgcHJvYmxlbXMgZm9yIFZNUyBh bmQgT1MvMiwgaW4gd2hpY2gKLSAgZXJybm8gaXMgYW4gImV4dGVybiB2b2xhdGlsZSBpbnQgbm9z aGFyZSIuLi4gIE5PVEU6IGJ5IG5vdyAoMjAwNykgdGhlCi0gIGZvbGxvd2luZyBpcyBhbiBhbmFj aHJvbmlzbSBhbmQgc2hvdWxkIGJlIHRoZSBleGVjcHRpb24gcmF0aGVyIHRoYW4gdGhlCi0gIHJ1 bGUuCi0qLwotZXh0ZXJuIGludCBlcnJubzsKLSNlbmRpZiAvKiBfX0dMSUJDX18gKi8KLSNlbmRp ZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBTVFJBVFVTICovCi0jZW5k aWYgLyogX0NSQVkgKi8KLQotI2lmZGVmIFVOSVgJCQkJLyogQ2F0Y2gtYWxsIHNvIHdlIGNhbiBo YXZlICovCi0jaWZuZGVmIEVTUkNICQkJCS8qIGFjY2VzcyB0byBlcnJvciBtbmVtb25pY3MgKi8K LSNpbmNsdWRlIDxlcnJuby5oPgkJCS8qIGluIGFsbCBtb2R1bGVzIC0gMjAwNy8wOC8yNSAqLwot I2VuZGlmCS8qIEVTUkNIICovCi0jZW5kaWYJLyogVU5JWCAqLwotCi0jaWZkZWYgcGRwMTEJCQkJ LyogVHJ5IHRvIG1ha2Ugc29tZSBzcGFjZSBvbiBQRFAtMTEgKi8KLSNpZm5kZWYgTk9ESUFMCi0j ZGVmaW5lIE5PRElBTAotI2VuZGlmIC8qIE5PRElBTCAqLwotI2lmbmRlZiBOT0NVUlNFUwotI2Rl ZmluZSBOT0NVUlNFUwotI2VuZGlmIC8qIE5PQ1VSU0VTICovCi0jaWZuZGVmIE5PQklHQlVGCi0j ZGVmaW5lIE5PQklHQlVGCi0jZW5kaWYgLyogTk9CSUdCVUYgKi8KLSNlbmRpZiAvKiBwZHAxMSAq LwotCi0jaWZuZGVmIE5PQklHQlVGCi0jaWZuZGVmIEJJR0JVRk9LCQkJLyogUGxhdGZvcm1zIHdp dGggbG90cyBvZiBtZW1vcnkgKi8KLQotI2lmZGVmIFFOWAkJCQkvKiBRTlggKi8KLSNpZm5kZWYg UU5YMTYJCQkJLyogQnV0IG5vdCAxNi1iaXQgdmVyc2lvbnMgKi8KLSNkZWZpbmUgQklHQlVGT0sK LSNlbmRpZiAvKiBRTlgxNiAqLwotI2VuZGlmIC8qIFFOWCAqLwotCi0jaWZkZWYgQlNENDQKLSNk ZWZpbmUgQklHQlVGT0sKLSNlbmRpZiAvKiBCU0Q0NCAqLwotCi0jaWZkZWYgU1RSQVRVUwkJCQkv KiBTdHJhdHVzIFZPUyAqLwotI2RlZmluZSBCSUdCVUZPSwotI2VuZGlmIC8qIFNUUkFUVVMgKi8K LQotI2lmZGVmIHNwYXJjCQkJCS8qIFNQQVJDIHByb2Nlc3NvcnMgKi8KLSNkZWZpbmUgQklHQlVG T0sKLSNlbmRpZiAvKiBzcGFyYyAqLwotCi0jaWZkZWYgbWlwcwkJCQkvKiBNSVBTIHByb2Nlc3Nv cnMgKi8KLSNkZWZpbmUgQklHQlVGT0sKLSNlbmRpZiAvKiBtaXBzICovCi0KLSNpZmRlZiBIUFVY OQkJCQkvKiBIUC1VWCA5LnggKi8KLSNkZWZpbmUgQklHQlVGT0sKLSNlbmRpZiAvKiBIUFVYOSAq LwotCi0jaWZkZWYgSFBVWDEwCQkJCS8qIEhQLVVYIDEwLjAgUEEtUklTQyAqLwotI2RlZmluZSBC SUdCVUZPSwotI2VuZGlmIC8qIEhQVVgxMCAqLwotCi0jaWZkZWYgTkVYVAkJCQkvKiBOZVhUU1RF UCAqLwotI2lmZGVmIG1jNjgwMDAJCQkJLyogb24gTkVYVCBwbGF0Zm9ybXMuLi4gKi8KLSNkZWZp bmUgQklHQlVGT0sKLSNlbmRpZiAvKiBtYzY4MDAwICovCi0jZW5kaWYgLyogTkVYVCAqLwotCi0j aWZkZWYgTElOVVgJCQkJLyogTGludXggaW4gMTk5OCBzaG91bGQgYmUgT0sgKi8KLSNpZm5kZWYg QklHQlVGT0sKLSNkZWZpbmUgQklHQlVGT0sKLSNlbmRpZiAvKiBCSUdCVUZPSyAqLwotI2VuZGlm IC8qIExJTlVYICovCi0KLSNpZmRlZiBPUzIJCQkJLyogMzItYml0IE9TLzIgMi54IGFuZCBhYm92 ZSAqLwotI2lmZGVmIF9fMzJCSVRfXwotI2RlZmluZSBCSUdCVUZPSwotI2VuZGlmIC8qIF9fMzJC SVRfXyAqLwotI2lmZGVmIE5UCi0jZGVmaW5lIEJJR0JVRk9LCi0jZW5kaWYgLyogTlQgKi8KLSNl bmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIFBsYW45CQkJCS8qIFBsYW4gOSBpcyBPSyAqLwotI2Rl ZmluZSBCSUdCVUZPSwotI2VuZGlmIC8qIFBsYW45ICovCi0KLSNpZmRlZiBWTVMJCQkJLyogQW55 IFZNUyBpcyBPSyAqLwotI2lmbmRlZiBCSUdCVUZPSwotI2RlZmluZSBCSUdCVUZPSwotI2VuZGlm IC8qIEJJR0JVRk9LICovCi0jZW5kaWYgLyogVk1TICovCi0KLSNpZmRlZiBfX2FscGhhCQkJCS8q IERFQyA2NC1iaXQgQWxwaGEsIGUuZy4gT1NGLzEgKi8KLSNpZm5kZWYgQklHQlVGT0sJCQkvKiBN aWdodCBhbHJlYWR5IGJlIGRlZmluZWQgZm9yIFZNUyAqLwotI2RlZmluZSBCSUdCVUZPSwotI2Vu ZGlmIC8qIEJJR0JVRk9LICovCi0jZW5kaWYgLyogX19hbHBoYSAqLwotCi0jaWZkZWYgc2dpCQkJ CS8qIFNHSSB3aXRoIElSSVggNC4wIG9yIGxhdGVyICovCi0jaWZuZGVmIEJJR0JVRk9LCi0jZGVm aW5lIEJJR0JVRk9LCi0jZW5kaWYgLyogQklHQlVGT0sgKi8KLSNlbmRpZiAvKiBzZ2kgKi8KLQot I2lmZGVmIEFJWFJTCQkJCS8qIEFJWCBvbiBSSVNDICovCi0jZGVmaW5lIEJJR0JVRk9LCi0jZW5k aWYgLyogQUlYUlMgKi8KLQotI2lmZGVmIENLX1NDT1Y1CQkJCS8qIFNDTyBPU1I1ICovCi0jaWZu ZGVmIEJJR0JVRk9LCi0jZGVmaW5lIEJJR0JVRk9LCi0jZW5kaWYgLyogQklHQlVGT0sgKi8KLSNl bmRpZiAvKiBDS19TQ09WNSAqLwotCi0jaWZkZWYgU09MQVJJUwkJCQkvKiBTb2xhcmlzIHg4NiAq LwotI2lmbmRlZiBCSUdCVUZPSwotI2RlZmluZSBCSUdCVUZPSwotI2VuZGlmIC8qIEJJR0JVRk9L ICovCi0jZW5kaWYgLyogU09MQVJJUyAqLwotCi0jZW5kaWYgLyogQklHQlVGT0sgKi8KLSNlbmRp ZiAvKiBOT0JJR0JVRiAqLwotCi0jaWZkZWYgQ0tfU01BTEwKLSNpZmRlZiBCSUdCVUZPSwotI3Vu ZGVmIEJJR0JVRk9LCi0jZW5kaWYgLyogQklHQlVGT0sgKi8KLSNlbmRpZiAvKiBDS19TTUFMTCAq LwotCi0vKiBJZiAibWVtb3J5IGlzIG5vIHByb2JsZW0iIHRoZW4gdGhpcyBpbXByb3ZlcyBwZXJm b3JtYW5jZSAqLwotCi0jaWZkZWYgREVCVUcKLSNpZmRlZiBCSUdCVUZPSwotI2lmbmRlZiBJRkRF QlVHCi0jZGVmaW5lIElGREVCVUcKLSNlbmRpZiAvKiBJRkRFQlVHICovCi0jZW5kaWYgLyogQklH QlVGT0sgKi8KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0vKiBGaWxlIFN5c3RlbSBEZWZhdWx0cyAq LwotCi0jaWZuZGVmIFVJREJVRkxFTgkJCS8qIExlbmd0aCBvZiBVc2VyIElEICovCi0jaWZkZWYg T1MyCi0jZGVmaW5lIFVJREJVRkxFTiAyNTYKLSNlbHNlIC8qIE9TMiAqLwotI2lmZGVmIEJJR0JV Rk9LCi0jZGVmaW5lIFVJREJVRkxFTiAyNTYKLSNlbHNlCi0jZGVmaW5lIFVJREJVRkxFTiA2NAot I2VuZGlmIC8qIEJJR0JVRk9LICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogVUlEQlVG TEVOICovCi0KLSNpZmRlZiBVTklYCi0jaWZkZWYgUFJPVlgxCi0jZGVmaW5lIE1BWFdMRCA1MAot I2Vsc2UKLSNpZmRlZiBwZHAxMQotI2RlZmluZSBNQVhXTEQgNTAKLSNlbHNlCi0jaWZkZWYgQklH QlVGT0sKLSNkZWZpbmUgTUFYV0xEIDEwMjQwMAotI2Vsc2UKLSNkZWZpbmUgTUFYV0xEIDEwMjQK LSNlbmRpZiAvKiBCSUdCVUZPSyAqLwotI2VuZGlmIC8qIHBkcDExICovCi0jZW5kaWYgLyogUFJP VlgxICovCi0jZWxzZQotI2lmZGVmIFZNUwotI2RlZmluZSBNQVhXTEQgMTAyNDAwCQkJLyogTWF4 aW11bSB3aWxkY2FyZCBmaWxlbmFtZXMgKi8KLSNlbHNlCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSNk ZWZpbmUgTUFYV0xEIDUwMAotI2Vsc2UKLSNpZmRlZiBTVFJBVFVTCi0jZGVmaW5lIE1BWFdMRCA1 MDAwCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5k aWYgLyogVk1TICovCi0jZW5kaWYgLyogVU5JWCAqLwotCi0jaWZkZWYgVk1TCi0jZGVmaW5lIERC TEtTSVogNTEyCi0jZGVmaW5lIERMUkVDTCA1MTIKLSNlbHNlCi0jZGVmaW5lIERCTEtTSVogMAot I2RlZmluZSBETFJFQ0wgMAotI2VuZGlmIC8qIFZNUyAqLwotCi0vKiBDb21tdW5pY2F0aW9uIGRl dmljZSAvIG5ldHdvcmsgaG9zdCBuYW1lIGxlbmd0aCAqLwotCi0jaWZkZWYgQklHQlVGT0sKLSNk ZWZpbmUgVFROQU1MRU4gNTEyCi0jZWxzZQotI2lmZGVmIE1BQwotI2RlZmluZSBUVE5BTUxFTiAy NTYKLSNlbHNlCi0jaWZuZGVmIENLX1NNQUxMCi0jZGVmaW5lIFRUTkFNTEVOIDEyOAotI2Vsc2UK LSNkZWZpbmUgVFROQU1MRU4gODAKLSNlbmRpZiAvKiBDS19TTUFMTCAqLwotI2VuZGlmIC8qIE1B QyAqLwotI2VuZGlmIC8qIEJJR0JVRk9LICovCi0KLS8qIFByb2dyYW0gcmV0dXJuIGNvZGVzIGZv ciBERUNVUyBDIGFuZCBVTklYIChWTVMgdXNlcyBVTklYIGNvZGVzKSAqLwotCi0jaWZkZWYgZGVj dXMKLSNkZWZpbmUgR09PRF9FWElUICAgSU9fTk9STUFMCi0jZGVmaW5lIEJBRF9FWElUICAgIElP X0VSUk9SCi0jZWxzZQotI2RlZmluZSBHT09EX0VYSVQgICAwCi0jZGVmaW5lIEJBRF9FWElUICAg IDEKLSNlbmRpZiAvKiBkZWN1cyAqLwotCi0vKiBTcGVjaWFsIGhhY2sgZm9yIEZvcnR1bmUsIHdo aWNoIGRvZXNuJ3QgaGF2ZSA8c3lzL2ZpbGUuaD4uLi4gKi8KLQotI2lmZGVmIEZUMTgKLSNkZWZp bmUgRlJFQUQgMHgwMQotI2RlZmluZSBGV1JJVEUgMHgxMAotI2VuZGlmIC8qIEZUMTggKi8KLQot LyogU3BlY2lhbCBoYWNrIGZvciBPUy05LzY4ayAqLwotI2lmZGVmIE9TSwotI2lmbmRlZiBfVUND Ci0jZGVmaW5lIFNJR0FMUk0gMzAJCQkvKiBNYXkgYWx3YXlzIGNhbmNlbCBJL08gKi8KLSNlbmRp ZiAvKiBfVUNDICovCi0jZGVmaW5lIFNJR0FSQgkxMjM0CQkJLyogQXJiaXRyYXJ5IGZvciBJL08g Ki8KLVNJR1RZUCAoKnNpZ25hbCgpKSgpOwotI2VuZGlmIC8qIE9TSyAqLwotCi0jaWZkZWYgTUlO SVgKLSNpZmRlZiBwdXRjaGFyCi0jdW5kZWYgcHV0Y2hhcgotI2VuZGlmIC8qIHB1dGNoYXIgKi8K LSNkZWZpbmUgcHV0Y2hhcihjKSAocHV0YyhjLHN0ZG91dCkhPUVPRikmJmZmbHVzaChzdGRvdXQp Ci0jZW5kaWYgLyogTUlOSVggKi8KLQotI2lmZGVmIGRhdGFnZW5lcmFsCQkJLyogRGF0YSBHZW5l cmFsIEFPUy9WUyAqLwotI2lmZGVmIHB1dGNoYXIKLSN1bmRlZiBwdXRjaGFyCi0jZW5kaWYgLyog cHV0Y2hhciAqLwotI2RlZmluZSBwdXRjaGFyKGMpIGNvbm9jKGMpCi0jZW5kaWYgLyogZGF0YWdl bmVyYWwgKi8KLQotLyogRXNjYXBlL3F1b3RlIGNoYXJhY3RlciB1c2VkIGJ5IHRoZSBjb21tYW5k IHBhcnNlciAqLwotCi0jZGVmaW5lIENNRFEgJ1xcJwotCi0vKiBTeW1ib2xzIGZvciBSUy0yMzIg bW9kZW0gc2lnbmFscyAqLwotCi0jZGVmaW5lIEtNX0ZHICAgIDEJCQkvKiBGcmFtZSBncm91bmQg Ki8KLSNkZWZpbmUgS01fVFhEICAgMgkJCS8qIFRyYW5zbWl0ICovCi0jZGVmaW5lIEtNX1JYRCAg IDMJCQkvKiBSZWNlaXZlICovCi0jZGVmaW5lIEtNX1JUUyAgIDQJCQkvKiBSZXF1ZXN0IHRvIFNl bmQgKi8KLSNkZWZpbmUgS01fQ1RTICAgNQkJCS8qIENsZWFyIHRvIFNlbmQgKi8KLSNkZWZpbmUg S01fRFNSICAgNgkJCS8qIERhdGEgU2V0IFJlYWR5ICovCi0jZGVmaW5lIEtNX1NHICAgIDcJCQkv KiBTaWduYWwgZ3JvdW5kICovCi0jZGVmaW5lIEtNX0RDRCAgIDgJCQkvKiBDYXJyaWVyIERldGVj dCAqLwotI2RlZmluZSBLTV9EVFIgIDIwCQkJLyogRGF0YSBUZXJtaW5hbCBSZWFkeSAqLwotI2Rl ZmluZSBLTV9SSSAgIDIyCQkJLyogUmluZyBJbmRpY2F0aW9uICovCi0KLS8qIEJpdCBtYXNrIHZh bHVlcyBmb3IgbW9kZW0gc2lnbmFscyAqLwotCi0jZGVmaW5lIEJNX0NUUyAgIDAwMDEJCQkvKiBD bGVhciB0byBzZW5kICAgICAgIChGcm9tIERDRSkgKi8KLSNkZWZpbmUgQk1fRFNSICAgMDAwMgkJ CS8qIERhdGFzZXQgcmVhZHkgICAgICAgKEZyb20gRENFKSAqLwotI2RlZmluZSBCTV9EQ0QgICAw MDA0CQkJLyogQ2FycmllciAgICAgICAgICAgICAoRnJvbSBEQ0UpICovCi0jZGVmaW5lIEJNX1JO RyAgIDAwMTAJCQkvKiBSaW5nIEluZGljYXRvciAgICAgIChGcm9tIERDRSkgKi8KLSNkZWZpbmUg Qk1fRFRSICAgMDAyMAkJCS8qIERhdGEgVGVybWluYWwgUmVhZHkgKEZyb20gRFRFKSAqLwotI2Rl ZmluZSBCTV9SVFMgICAwMDQwCQkJLyogUmVxdWVzdCB0byBTZW5kICAgICAoRnJvbSBEVEUpICov Ci0KLS8qIENvZGVzIGZvciBmdWxsIGR1cGxleCBmbG93IGNvbnRyb2wgKi8KLQotI2RlZmluZSBG TE9fTk9ORSAwCQkJLyogTm9uZSAqLwotI2RlZmluZSBGTE9fWE9OWCAxCQkJLyogWG9uL1hvZmYg KHNvZnQpICovCi0jZGVmaW5lIEZMT19SVFNDIDIJCQkvKiBSVFMvQ1RTIChoYXJkKSAqLwotI2Rl ZmluZSBGTE9fRFRSQyAzCQkJLyogRFRSL0NEIChoYXJkKSAqLwotI2RlZmluZSBGTE9fRVRYQSA0 CQkJLyogRVRYL0FDSyAoc29mdCkgKi8KLSNkZWZpbmUgRkxPX1NUUkcgNQkJCS8qIFN0cmluZy1i YXNlZCAoc29mdCkgKi8KLSNkZWZpbmUgRkxPX0RJQUwgNgkJCS8qIERJQUxpbmcga2x1ZGdlICov Ci0jZGVmaW5lIEZMT19ESUFYIDcJCQkvKiBDYW5jZWwgZGlhbGluZyBrbHVkZ2UgKi8KLSNkZWZp bmUgRkxPX0RUUlQgOAkJCS8qIERUUi9DVFMgKGhhcmQpICovCi0jZGVmaW5lIEZMT19LRUVQIDkJ CQkvKiBLZWVwLCBpLmUuIGRvbid0IHRvdWNoIG9yIGNoYW5nZSAqLwotI2RlZmluZSBGTE9fQVVU TyAxMAkJCS8qIEZpZ3VyZSBvdXQgYXV0b21hdGljYWxseSAqLwotCi0vKiBUeXBlcyBvZiBjb25u ZWN0aW9ucyAqLwotCi0jZGVmaW5lIENYVF9SRU1PVEUgIDAJCQkvKiBSZW1vdGUgbW9kZSAtIG5v IGNvbm5lY3Rpb24gKi8KLSNkZWZpbmUgQ1hUX0RJUkVDVCAgMQkJCS8qIERpcmVjdCBzZXJpYWwg Y29ubmVjdGlvbiAqLwotI2RlZmluZSBDWFRfTU9ERU0gICAyCQkJLyogTW9kZW0gZGlhbG91dCAq LwotI2RlZmluZSBDWFRfVENQSVAgICAzCQkJLyogVENQL0lQIC0gVGVsbmV0LCBSbG9naW4sIGV0 YyAqLwotI2RlZmluZSBDWFRfWDI1ICAgICA0CQkJLyogWC4yNSBwZWVyLXRvLXBlZXIgKi8KLSNk ZWZpbmUgQ1hUX0RFQ05FVCAgNQkJCS8qIERFQ25ldCAoQ1RFUk0sIGV0YykgKi8KLSNkZWZpbmUg Q1hUX0xBVCAgICAgNgkJCS8qIExBVCAqLwotI2RlZmluZSBDWFRfTkVUQklPUyA3CQkJLyogTkVU QklPUyAqLwotI2RlZmluZSBDWFRfTlBJUEUgICA4CQkJLyogTmFtZWQgUGlwZSAqLwotI2RlZmlu ZSBDWFRfUElQRSAgICA5CQkJLyogUGlwZSwgQ29tbWFuZCwgUFRZLCBETEwsIGV0YyAqLwotI2Rl ZmluZSBDWFRfU1NIICAgICAxMCAgICAgICAgICAgICAgICAgIC8qIFNTSCAqLwotI2RlZmluZSBD WFRfTUFYICAgICAxMAkJCS8qIEhpZ2hlc3QgY29ubmVjdGlvbiB0eXBlICovCi0KLS8qIEF1dG9k b3dubG9hZCBEZXRlY3Rpb24gT3B0aW9ucyAqLwotCi0jZGVmaW5lIEFETF9QQUNLIDAJCQkvKiBB dXRvLURvd25sb2FkIGRldGVjdCBwYWNrZXQgKi8KLSNkZWZpbmUgQURMX1NUUiAgMQkJCS8qIEF1 dG8tRG93bmxvYWQgZGV0ZWN0IHN0cmluZyAqLwotCi0vKiBBbmQgZmluYWxseS4uLiAqLwotCi0j aWZkZWYgQ09NTUVOVAkJCQkvKiBNYWtlIHN1cmUgdGhpcyBpcyBOT1QgZGVmaW5lZCEgKi8KLSN1 bmRlZiBDT01NRU5UCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0vKiB6c3RyIHphdHRyIGZpbGlu Zm8gd2VyZSBoZXJlIChtb3ZlZCB0byB0b3AgZm9yIERFQ0MgNSBKdW4gMjAwMCkgKi8KLQotI2lm bmRlZiBaRk5RRlAJCQkJLyogVmVyc2lvbnMgdGhhdCBoYXZlIHpmbnFmcCgpICovCi0jaWZkZWYg VU5JWAotI2RlZmluZSBaRk5RRlAKLSNlbHNlCi0jaWZkZWYgVk1TCi0jZGVmaW5lIFpGTlFGUAot I2Vsc2UKLSNpZmRlZiBPUzIKLSNkZWZpbmUgWkZOUUZQCi0jZWxzZQotI2lmZGVmIGRhdGFnZW5l cmFsCi0jZGVmaW5lIFpGTlFGUAotI2Vsc2UKLSNpZmRlZiBTVFJBVFVTCi0jZGVmaW5lIFpGTlFG UAotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlm IC8qIE9TMiAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIFVOSVggKi8KLXN0cnVjdCB6 Zm5mcCB7Ci0gICBpbnQgbGVuOwkJCQkvKiBMZW5ndGggb2YgZnVsbCBwYXRobmFtZSAqLwotICAg Y2hhciAqIGZwYXRoOwkJCS8qIFBvaW50ZXIgdG8gZnVsbCBwYXRobmFtZSAqLwotICAgY2hhciAq IGZuYW1lOwkJCS8qIFBvaW50ZXIgdG8gbmFtZSBwYXJ0ICovCi19OwotI2VuZGlmIC8qIFpGTlFG UCAqLwotCi0vKiBTeXN0ZW1zIHRoYXQgc3VwcG9ydCBGSUxFIFRZUEUgTEFCRUxFRCAqLwotCi0j aWZkZWYgVk1TCi0jZGVmaW5lIENLX0xBQkVMRUQKLSNlbHNlCi0jaWZkZWYgT1MyCi0jaWZkZWYg X18zMkJJVF9fCi0jaWZuZGVmIE5UCi0jZGVmaW5lIENLX0xBQkVMRUQKLSNlbmRpZiAvKiBOVCAq LwotI2VuZGlmIC8qIF9fMzJCSVRfXyAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFZN UyAqLwotCi0vKiBMQUJFTEVEIEZJTEUgb3B0aW9ucyBiaXRtYXNrICovCi0KLSNpZmRlZiBWTVMJ CQkJLyogRm9yIFZNUyAqLwotI2RlZmluZSBMQkxfTkFNICAxCQkJLyogSWdub3JlIGluY29taW5n IG5hbWUgaWYgc2V0ICovCi0jZGVmaW5lIExCTF9QVEggIDIJCQkvKiBVc2UgY29tcGxldGUgcGF0 aCBpZiBzZXQgKi8KLSNkZWZpbmUgTEJMX0FDTCAgNAkJCS8qIFByZXNlcnZlIEFDTHMgaWYgc2V0 ICovCi0jZGVmaW5lIExCTF9CQ0sgIDgJCQkvKiBQcmVzZXJ2ZSBiYWNrdXAgZGF0ZSBpZiBzZXQg Ki8KLSNkZWZpbmUgTEJMX09XTiAxNgkJCS8qIFByZXNlcnZlIG93bmVyc2hpcCBpZiBzZXQgKi8K LQotI2Vsc2UKLQotI2lmZGVmIE9TMgkJCQkvKiBEaXR0byBmb3IgT1MvMiAqLwotI2RlZmluZSBM QkxfTk9SICAweDAwMDAJCQkvKiBOb3JtYWwgZmlsZSAqLwotI2RlZmluZSBMQkxfQVJDICAweDAw MjAJCQkvKiBBcmNoaXZlICovCi0jZGVmaW5lIExCTF9ESVIgIDB4MDAxMAkJCS8qIERpcmVjdG9y eSAqLwotI2RlZmluZSBMQkxfSElEICAweDAwMDIJCQkvKiBIaWRkZW4gZmlsZSAqLwotI2RlZmlu ZSBMQkxfUk8gICAweDAwMDEJCQkvKiBSZWFkIG9ubHkgZmlsZSAqLwotI2RlZmluZSBMQkxfU1lT ICAweDAwMDQJCQkvKiBTeXN0ZW0gZmlsZSAqLwotI2RlZmluZSBMQkxfRVhUICAweDAwNDAJCQkv KiBFeHRlbmRlZCAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFZNUyAqLwotCi0vKgot ICBEYXRhIHR5cGVzLiAgRmlyc3QgdGhlIGhlYWRlciBmaWxlIGZvciBkYXRhIHR5cGVzIHNvIHdl IGNhbiBwaWNrIHVwIHRoZQotICB0eXBlcyB1c2VkIGZvciBwaWRzLCB1aWRzLCBhbmQgZ2lkcy4g IE92ZXJyaWRlIHRoaXMgc2VjdGlvbiBieSBwdXR0aW5nCi0gIC1EQ0tUWVBfSD14eHggb24gdGhl IGNvbW1hbmQgbGluZSB0byBzcGVjaWZ5IHRoZSBoZWFkZXIgZmlsZSB3aGVyZSB5b3VyCi0gIHN5 c3RlbSBkZWZpbmVzIHRoZXNlIHR5cGVzLgotKi8KLSNpZm5kZWYgU1RSQVRVUwotI2lmZGVmIF9f QUxQSEEKLSNpZmRlZiBNVUxUSU5FVAotI2RlZmluZSBDS19UR1ZfQVhQCi0jZW5kaWYgLyogTVVM VElORVQgKi8KLSNlbmRpZiAvKiBfX0FMUEhBICovCi0KLSNpZmRlZiBDS19UR1ZfQVhQCQkJLyog QWxwaGEsIFZNUywgTXVsdGlOZXQgKi8KLS8qCi0gIFN0YXJ0aW5nIGluIERFQ0MgNS4wLCA8c3Rk bGliLmg+IG5vIGxvbmdlciBpbmNsdWRlcyA8dHlwZXMuaD4uCi0gIEJ1dCBiZWZvcmUgdGhhdCBh biBlbGFib3JhdGUgd29ya2Fyb3VuZCBpcyByZXF1aXJlZCwgd2hpY2ggcmVzdWx0cyBpbgotICBp bmNsdWRpbmcgPHR5cGVzLmg+IHNvbWV0aW1lcyBidXQgbm90IG90aGVycywgZXZpZGVudGx5IGRl cGVuZGluZyBvbiB3aGV0aGVyCi0gIDx0eXBlcy5oPiBwcm90ZWN0cyBpdHNlbGYgYWdhaW5zdCBt dWx0aXBsZSBpbmNsdXNpb24sIHdoaWNoIGluIHR1cm4gcHJvYmFibHkKLSAgZGlmZmVyZW50aWF0 ZXMgYmV0d2VlbiBERUNDIDx0eXBlcy5oPiBhbmQgVEdWIDx0eXBlcy5oPi4gIFVuZm9ydHVuYXRl bHkgSQotICBkb24ndCByZW1lbWJlciB0aGUgZGV0YWlscy4gIChmZGMsIDI1IE9jdCA5NikKLSov Ci0jaWZkZWYgQ09NTUVOVAotLyoKLSAgUHJldmlvdXNseSB0aGUgdGVzdCBoZXJlIHdhcyBmb3Ig REVDIHZlcnNpb24gcHJpb3IgdG8gNC4wLCBidXQgc2luY2UgdGhlCi0gIHRlc3QgaW52b2x2ZWQg YW4gIiNpZiIgc3RhdGVtZW50LCBpdCB3YXMgbm90IHBvcnRhYmxlIGFuZCBicm9rZSBzb21lIG5v bi1WTVMKLSAgYnVpbGRzLiAgSW4gYW55IGNhc2UsIGNvbmRpdGlvbiB3YXMgbmV2ZXIgc2F0aXNm aWVkLCBzbyB0aGUgcmVzdWx0IG9mCi0gIGNvbW1lbnRpbmcgdGhpcyBzZWN0aW9uIG91dCBpcyB0 aGUgc2FtZSBhcyB0aGUgcHJldmlvdXMgIiNpZiIgY29uZGl0aW9uLgotKi8KLSNpZm5kZWYgX19U WVBFU19MT0FERUQKLSNkZWZpbmUgX19UWVBFU19MT0FERUQJCQkvKiBXb3JrIGFyb3VuZCBidWcg aW4gLmggZmlsZXMgKi8KLSNlbmRpZiAvKiBfX1RZUEVTX0xPQURFRCAqLwotI2VuZGlmIC8qIENP TU1FTlQgKi8KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZmRlZiBJRl9ET1RfSAotI2lmbmRl ZiBNVUxUSU5FVAotI2luY2x1ZGUgPGlmLmg+CQkJCS8qIE5lZWRlZCB0byBwdXQgdXAgdV9pbnQg dHlwZWRlZiAqLwotI2VuZGlmIC8qIE1VTFRJTkVUICovCi0jZWxzZSAvKiBJRl9ET1RfSCAqLwot I2lmZGVmIE5FRURVSU5UCi10eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDsKLSNlbmRpZiAvKiBO RUVEVUlOVCAqLwotI2VuZGlmIC8qIElGX0RPVF9IICovCi0jZWxzZQkJCQkJLyogIUNLX1RHVl9B WFAgKi8KLSNpZmRlZiBPU0sJCQkJLyogT1MtOSAqLwotI2luY2x1ZGUgPHR5cGVzLmg+Ci0jZWxz ZQkJCQkJLyogR2VuZXJhbCBjYXNlLCBub3QgT1MtOSAqLwotI2lmbmRlZiBDS1RZUF9ICi0jaWZu ZGVmIFZNUwotI2lmbmRlZiBNQUMKLSNpZm5kZWYgQU1JR0EKLSNkZWZpbmUgQ0tUWVBfSCA8c3lz L3R5cGVzLmg+Ci0jZW5kaWYgLyogQU1JR0EgKi8KLSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAv KiBWTVMgKi8KLSNlbmRpZiAvKiBDS1RZUF9IICovCi0KLSNpZmRlZiBHRU1ET1MKLSN1bmRlZiBD S1RZUF9ICi0jaW5jbHVkZSA8dHlwZXMuaD4KLSNlbmRpZiAvKiBHRU1ET1MgKi8KLQotI2lmZGVm IE9TMgotI3VuZGVmIENLVFlQX0gKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZiAvKiBP UzIgKi8KLQotI2lmZGVmIENLVFlQX0gJCQkJLyogSW5jbHVkZSBpdC4gKi8KLSNpZmRlZiBDT0hF UkVOVAkJCQkvKiBFeGNlcHQgZm9yIENPSEVSRU5UICovCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0j aW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZWxzZQotI2lmZGVmIGRhdGFnZW5lcmFsCQkJLyogQU9T L1ZTICovCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZWxzZSAgLyogQWxsIG90aGVycyAqLwot I2lmZGVmIF9fYnNkaV9fCQkJCS8qIEJTREkgKi8KLSNpZmRlZiBQT1NJWAotI3VuZGVmIF9QT1NJ WF9TT1VSQ0UKLSNlbmRpZiAvKiBQT1NJWCAqLwotI2VuZGlmIC8qIF9fYnNkaV9fICovCi0jaW5j bHVkZSBDS1RZUF9ICi0jaWZkZWYgX19ic2RpX18KLSNpZmRlZiBQT1NJWAotI2RlZmluZSBfUE9T SVhfU09VUkNFCi0jZW5kaWYgLyogUE9TSVggKi8KLSNlbmRpZiAvKiBfX2JzZGlfXyAqLwotI2Vu ZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLSNlbmRpZiAvKiBD S1RZUF9IICovCi0KLSNlbmRpZiAvKiBPU0sgKi8KLSNlbmRpZiAvKiBDS19UR1ZfQVhQICovCi0j ZW5kaWYgLyogU1RSQVRVUyAqLwkJCS8qIEVuZCBvZiB0eXBlcy5oIHNlY3Rpb24gKi8KLQotLyoK LSAgRmlsZSBsZW5ndGhzIGFuZCBvZmZzZXRzLiAgVGhpcyBzZWN0aW9uIGlzIGV4cGVjdGVkIHRv IGdyb3cgYXMgd2UKLSAgc3VwcG9ydCBsb25nIGZpbGVzIG9uIDMyLWJpdCBwbGF0Zm9ybXMuICBX ZSB3YW50IHRoaXMgZGF0YSB0eXBlIHRvIGJlCi0gIHNpZ25lZCBiZWNhdXNlIHNvIG1hbnkgZnVu Y3Rpb25zIHJldHVybiBlaXRoZXIgYSBmaWxlIHNpemUgb3IgYSBuZWdhdGl2ZQotICB2YWx1ZSB0 byBpbmRpY2F0ZSBhbiBlcnJvci4KLSovCi0jaWZuZGVmIENLX09GRl9UCi0jaWZkZWYgT1MyCi0j aWZkZWYgTlQKLSNkZWZpbmUgQ0tfT0ZGX1QgX19pbnQ2NAotI2Vsc2UKLSNkZWZpbmUgQ0tfT0ZG X1QgbG9uZwotI2VuZGlmICAvKiBOVCAqLwotI2VuZGlmCS8qIE9TMiAqLwotI2VuZGlmCS8qIENL X09GRl9UICovCi0KLS8qIEZyZWVCU0QgYW5kIE9wZW5CU0Qgc2V0IG9mZl90IHRvIHRoZSBhcHBy b3ByaWF0ZSBzaXplIHVuY29uZGl0aW9uYWxseSAqLwotCi0jaWZuZGVmIENLX09GRl9UCi0jaWZk ZWYgX19GcmVlQlNEX18KLSNkZWZpbmUgQ0tfT0ZGX1Qgb2ZmX3QKLSNlbHNlCi0jaWZkZWYgX19P cGVuQlNEX18KLSNkZWZpbmUgQ0tfT0ZGX1Qgb2ZmX3QKLSNlbmRpZgkvKiBfX09wZW5CU0RfXyAq LwotI2VuZGlmCS8qIF9fRnJlZUJTRF9fICovCi0jZW5kaWYJLyogQ0tfT0ZGX1QgKi8KLQotLyog MzItYml0IHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgbG9uZyBmaWxlcyB0aHJ1ICJ0cmFuc2l0aW9u YWwgaW50ZXJmYWNlIiAqLwotLyogVGhlc2UgaW5jbHVkZSBMaW51eCwgU29sYXJpcywgTmV0QlNE Li4uICovCi0KLSNpZmRlZiBBSVhSUwotI2lmZGVmIF9MQVJHRV9GSUxFUwotI2lmbmRlZiBDS19P RkZfVAotI2RlZmluZSBDS19PRkZfVCBvZmZfdAotI2VuZGlmCS8qIENLX09GRl9UICovCi0jZW5k aWYJLyogX0xBUkdFX0ZJTEVTICovCi0jZW5kaWYJLyogQUlYUlMgKi8KLQotI2lmZGVmIF9MQVJH RUZJTEVfU09VUkNFCi0jaWZuZGVmIENLX09GRl9UCi0jZGVmaW5lIENLX09GRl9UIG9mZl90Ci0j ZW5kaWYJLyogQ0tfT0ZGX1QgKi8KLSNpZmRlZiBJUklYCi0jZGVmaW5lIENLRlNFRUsoYSxiLGMp IGZzZWVrNjQoYSxiLGMpCi0jZGVmaW5lIENLRlRFTEwoYSkgZnRlbGw2NChhKQotI2Vsc2UgLyog SVJJWCAqLwotI2RlZmluZSBDS0ZTRUVLKGEsYixjKSBmc2Vla28oYSxiLGMpCi0jZGVmaW5lIENL RlRFTEwoYSkgZnRlbGxvKGEpCi0jZW5kaWYJLyogSVJJWCAqLwotI2Vsc2UgIC8qIE5vdCAgX0xB UkdFRklMRV9TT1VSQ0UgKi8KLSNkZWZpbmUgQ0tGU0VFSyhhLGIsYykgZnNlZWsoYSxiLGMpCi0j ZGVmaW5lIENLRlRFTEwoYSkgZnRlbGwoYSkKLS8qIFNlZSBiZWxvdyB0aGUgbmV4dCBzZWN0aW9u IGZvciB0aGUgY2F0Y2gtYWxsIGNhc2UgKi8KLSNlbmRpZgkvKiBfTEFSR0VGSUxFX1NPVVJDRSAq LwotCi0vKiAzMi1iaXQgb3IgNjQtYml0IHBsYXRmb3JtcyAqLwotCi0vKiBDS182NEJJVCBpcyBh IGNvbXBpbGUtdGltZSBzeW1ib2wgaW5kaWNhdGluZyBhIHRydWUgNjQtYml0IGJ1aWxkICovCi0v KiBtZWFuaW5nIHRoYXQgbG9uZ3MgYW5kIHBvaW50ZXJzIGFyZSA2NCBiaXRzICovCi0KLSNpZm5k ZWYgVk1TCQkJCS8qIFZNUyBBbHBoYSBhbmQgSUE2NCBhcmUgMzItYml0ISAqLwotI2lmbmRlZiBD S182NEJJVAotI2lmZGVmIF9MUDY0CQkJCS8qIFNvbGFyaXMgKi8KLSNkZWZpbmUgQ0tfNjRCSVQK LSNlbHNlCi0jaWZkZWYgX19MUDY0X18JCQkJLyogTWFjT1MgWCAxMC40IChvciBfTFA2NCxfX3Bw YzY0X18pICovCi0jZGVmaW5lIENLXzY0QklUCi0jZWxzZQotI2lmZGVmIF9fYXJjaDY0X18JCQkv KiBnY2MgYWxwaGEsIHNwYXJjICovCi0jZGVmaW5lIENLXzY0QklUCi0jZWxzZQotI2lmZGVmIF9f YWxwaGEJCQkJLyogQWxwaGEgZGVjYyAob3IgX19BTFBIQSkgKi8KLSNkZWZpbmUgQ0tfNjRCSVQK LSNlbHNlCi0jaWZkZWYgX19hbWQ2NAkJCQkvKiBBTUQgeDg2XzY0IChvciBfX3g4Nl82NCkgKi8K LSNkZWZpbmUgQ0tfNjRCSVQKLSNlbHNlCi0jaWZkZWYgX19pYTY0CQkJCS8qIEludGVsIElBNjQg Ki8KLSNpZm5kZWYgSFBVWAotI2RlZmluZSBDS182NEJJVAotI2VuZGlmCS8qIEhQVVggKi8KLSNl bmRpZgkvKiBfX2lhNjQgKi8KLSNlbmRpZgkvKiBfX2FtZDY0ICovCi0jZW5kaWYJLyogX19hbHBo YSAqLwotI2VuZGlmCS8qIF9fYXJjaDY0X18gKi8KLSNlbmRpZgkvKiBfX0xQNjRfXyAqLwotI2Vu ZGlmCS8qIF9MUDY0ICovCi0jZW5kaWYJLyogQ0tfNjRCSVQgKi8KLSNlbmRpZgkvKiBWTVMgKi8K LQotI2lmbmRlZiBDS19PRkZfVAotI2lmZGVmIENLXzY0QklUCi0jZGVmaW5lIENLX09GRl9UIG9m Zl90CQkJLyogVGhpcyBoYXMgdG8gYmUgc2lnbmVkICovCi0jZWxzZSAgLyogQ0tfNjRCSVQgKi8K LSNkZWZpbmUgQ0tfT0ZGX1QgbG9uZwkJCS8qIFNpZ25lZCAqLwotI2VuZGlmCS8qIENLXzY0QklU ICovCi0jZW5kaWYJLyogQ0tfT0ZGX1QgKi8KLQotI2lmbmRlZiBUTE9HCi0jZGVmaW5lIHRsb2co YSxiLGMsZCkKLSNlbHNlCi0jaWZuZGVmIENLQ01BSQotLyogRGVidWdnaW5nIGluY2x1ZGVkLiAg RGVjbGFyZSBkZWJ1ZyBsb2cgZmxhZyBpbiBtYWluIHByb2dyYW0gb25seS4gKi8KLWV4dGVybiBp bnQgdHJhbG9nLCB0bG9nZm10OwotI2VuZGlmIC8qIENLQ01BSSAqLwotX1BST1RPVFlQKFZPSUQg ZG90bG9nLChpbnQsIGNoYXIgKiwgY2hhciAqLCBDS19PRkZfVCkpOwotI2RlZmluZSB0bG9nKGEs YixjLGQpIGlmICh0cmFsb2cgJiYgdGxvZ2ZtdCkgZG90bG9nKGEsYixjLChDS19PRkZfVClkKQot X1BST1RPVFlQKFZPSUQgZG94bG9nLChpbnQsIGNoYXIgKiwgQ0tfT0ZGX1QsIGludCwgaW50LCBj aGFyICopKTsKLSNlbmRpZiAvKiBUTE9HICovCi0KLSNpZm5kZWYgREVCVUcKLS8qIENvbXBpbGUg YWxsIHRoZSBkZWJ1ZygpIHN0YXRlbWVudHMgYXdheS4gIFNhdmVzIGEgbG90IG9mIHNwYWNlIGFu ZCB0aW1lLiAqLwotI2RlZmluZSBkZWJ1ZyhhLGIsYyxkKQotI2RlZmluZSBja2hleGR1bXAoYSxi LGMpCi0vKiBOb3cgZGVmaW5lIHRoZSBkZWJ1ZygpIG1hY3JvLiAqLwotI2Vsc2UgLyogREVCVUcg Ki8KLV9QUk9UT1RZUChpbnQgZG9kZWJ1ZywoaW50LGNoYXIgKixjaGFyICosQ0tfT0ZGX1QpKTsK LV9QUk9UT1RZUChpbnQgZG9oZXhkdW1wLChDSEFSICosQ0hBUiAqLGludCkpOwotI2lmZGVmIElG REVCVUcKLS8qIFVzZSB0aGlzIGZvcm0gdG8gYXZvaWQgZnVuY3Rpb24gY2FsbHM6ICovCi0jaWZk ZWYgQ09NTUVOVAotI2RlZmluZSBkZWJ1ZyhhLGIsYyxkKSBpZiAoZGVibG9nKSBkb2RlYnVnKGEs YiwoY2hhciAqKShjKSwoQ0tfT0ZGX1QpKGQpKQotI2RlZmluZSBja2hleGR1bXAoYSxiLGMpIGlm IChkZWJsb2cpIGRvaGV4ZHVtcCgoQ0hBUiAqKShhKSwoQ0hBUiAqKShiKSxjKQotI2Vsc2UKLSNp ZmRlZiBDS19BTlNJQwotI2RlZmluZSBkZWJ1ZyhhLGIsYyxkKSBcCi0oKHZvaWQpKGRlYmxvZz9k b2RlYnVnKGEsYiwoY2hhciAqKShjKSwoQ0tfT0ZGX1QpKGQpKTowKSkKLSNkZWZpbmUgY2toZXhk dW1wKGEsYixjKSBcCi0oKHZvaWQpKGRlYmxvZz9kb2hleGR1bXAoKENIQVIgKikoYSksKENIQVIg KikoYiksYyk6MCkpCi0jZWxzZQotI2RlZmluZSBkZWJ1ZyhhLGIsYyxkKSAoZGVibG9nP2RvZGVi dWcoYSxiLChjaGFyICopKGMpLChDS19PRkZfVCkoZCkpOjApCi0jZGVmaW5lIGNraGV4ZHVtcChh LGIsYykgKGRlYmxvZz9kb2hleGR1bXAoKENIQVIgKikoYSksKENIQVIgKikoYiksYyk6MCkKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNlbHNlIC8qIElGREVC VUcgKi8KLS8qIFVzZSB0aGlzIGZvcm0gdG8gc2F2ZSBzcGFjZTogKi8KLSNkZWZpbmUgZGVidWco YSxiLGMsZCkgZG9kZWJ1ZyhhLGIsKGNoYXIgKikoYyksKENLX09GRl9UKShkKSkKLSNkZWZpbmUg Y2toZXhkdW1wKGEsYixjKSBkb2hleGR1bXAoKENIQVIgKikoYSksKENIQVIgKikoYiksYykKLSNl bmRpZiAvKiBJRkRFQlVHICovCi0jZW5kaWYgLyogREVCVUcgKi8KLQotCi0vKiBTdHJ1Y3R1cmUg ZGVmaW5pdGlvbnMgZm9yIEtlcm1pdCBmaWxlIGF0dHJpYnV0ZXMgKi8KLS8qIEFsbCBzdHJpbmdz IGNvbWUgYXMgcG9pbnRlciBhbmQgbGVuZ3RoIGNvbWJpbmF0aW9ucyAqLwotLyogRW1wdHkgc3Ry aW5nIChvciBmb3IgbnVtZXJpYyB2YXJpYWJsZXMsIC0xKSA9IHVudXNlZCBhdHRyaWJ1dGUuICov Ci0KLXN0cnVjdCB6c3RyIHsgICAgICAgICAgICAgLyogc3RyaW5nIGZvcm1hdCAqLwotICAgIGlu dCBsZW47CSAgICAgICAgICAvKiBsZW5ndGggKi8KLSAgICBjaGFyICp2YWw7ICAgICAgICAgICAg LyogdmFsdWUgKi8KLX07Ci0KLXN0cnVjdCB6YXR0ciB7ICAgICAgICAgICAgLyogS2VybWl0IEZp bGUgQXR0cmlidXRlIHN0cnVjdHVyZSAqLwotICAgIENLX09GRl9UIGxlbmd0aGs7CSAgLyogKCEp IGZpbGUgbGVuZ3RoIGluIEsgKi8KLSAgICBzdHJ1Y3QgenN0ciB0eXBlOyAgICAgLyogKCIpIGZp bGUgdHlwZSAodGV4dCBvciBiaW5hcnkpICovCi0gICAgc3RydWN0IHpzdHIgZGF0ZTsgICAgIC8q ICgjKSBmaWxlIGNyZWF0aW9uIGRhdGUgeXl5eW1tZGRbIGhoOm1tWzpzc11dICovCi0gICAgc3Ry dWN0IHpzdHIgY3JlYXRvcjsgIC8qICgkKSBmaWxlIGNyZWF0b3IgaWQgKi8KLSAgICBzdHJ1Y3Qg enN0ciBhY2NvdW50OyAgLyogKCUpIGZpbGUgYWNjb3VudCAqLwotICAgIHN0cnVjdCB6c3RyIGFy ZWE7ICAgICAvKiAoJikgYXJlYSAoZS5nLiBkaXJlY3RvcnkpIGZvciBmaWxlICovCi0gICAgc3Ry dWN0IHpzdHIgcGFzc3dvcmQ7IC8qICgnKSBwYXNzd29yZCBmb3IgYXJlYSAqLwotICAgIGxvbmcg Ymxrc2l6ZTsgICAgICAgICAvKiAoKCkgZmlsZSBibG9ja3NpemUgKi8KLSAgICBzdHJ1Y3QgenN0 ciB4YWNjZXNzOyAgLyogKCkpIGZpbGUgYWNjZXNzOiBuZXcsIHN1cGVyc2VkZSwgYXBwZW5kLCB3 YXJuICovCi0gICAgc3RydWN0IHpzdHIgZW5jb2Rpbmc7IC8qICgqKSBlbmNvZGluZyAodHJhbnNm ZXIgc3ludGF4KSAqLwotICAgIHN0cnVjdCB6c3RyIGRpc3A7ICAgICAvKiAoKykgZGlzcG9zaXRp b24gKG1haWwsIG1lc3NhZ2UsIHByaW50LCBldGMpICovCi0gICAgc3RydWN0IHpzdHIgbHByb3Rl Y3Q7IC8qICgsKSBwcm90ZWN0aW9uIChsb2NhbCBzeW50YXgpICovCi0gICAgc3RydWN0IHpzdHIg Z3Byb3RlY3Q7IC8qICgtKSBwcm90ZWN0aW9uIChnZW5lcmljIHN5bnRheCkgKi8KLSAgICBzdHJ1 Y3QgenN0ciBzeXN0ZW1pZDsgLyogKC4pIElEIGZvciBzeXN0ZW0gb2Ygb3JpZ2luICovCi0gICAg c3RydWN0IHpzdHIgcmVjZm07ICAgIC8qICgvKSByZWNvcmQgZm9ybWF0ICovCi0gICAgc3RydWN0 IHpzdHIgc3lzcGFyYW07IC8qICgwKSBzeXN0ZW0tZGVwZW5kZW50IHBhcmFtZXRlciBzdHJpbmcg Ki8KLSAgICBDS19PRkZfVCBsZW5ndGg7ICAgICAgLyogKDEpIGV4YWN0IGxlbmd0aCBvbiBzeXN0 ZW0gb2Ygb3JpZ2luICovCi0gICAgc3RydWN0IHpzdHIgY2hhcnNldDsgIC8qICgyKSB0cmFuc2Zl ciBzeW50YXggY2hhcmFjdGVyIHNldCAqLwotI2lmZGVmIE9TMgotICAgIHN0cnVjdCB6c3RyIGxv bmduYW1lOyAvKiBPUy8yIGxvbmduYW1lIGlmIGFwcGxpY2FibGUgKi8KLSNlbmRpZiAvKiBPUzIg Ki8KLSAgICBzdHJ1Y3QgenN0ciByZXBseTsgICAgLyogVGhpcyBnb2VzIGxhc3QsIHVzZWQgZm9y IGF0dHJpYnV0ZSByZXBseSAqLwotfTsKLQotLyogS2VybWl0IGZpbGUgaW5mb3JtYXRpb24gc3Ry dWN0dXJlICovCi0KLXN0cnVjdCBmaWxpbmZvIHsKLSAgaW50IGJzOwkJCQkvKiBCbG9ja3NpemUg Ki8KLSAgaW50IGNzOwkJCQkvKiBDaGFyYWN0ZXIgc2V0ICovCi0gIGxvbmcgcmw7CQkJCS8qIFJl Y29yZCBsZW5ndGggKi8KLSAgaW50IG9yZzsJCQkJLyogT3JnYW5pemF0aW9uICovCi0gIGludCBm bXQ7CQkJCS8qIFJlY29yZCBmb3JtYXQgKi8KLSAgaW50IGNjOwkJCQkvKiBDYXJyaWFnZSBjb250 cm9sICovCi0gIGludCB0eXA7CQkJCS8qIFR5cGUgKHRleHQvYmluYXJ5KSAqLwotICBpbnQgZHNw OwkJCQkvKiBEaXNwb3NpdGlvbiAqLwotICBjaGFyICpvc19zcGVjaWZpYzsJCQkvKiBPUy1zcGVj aWZpYyBhdHRyaWJ1dGVzICovCi0jaWZkZWYgT1MyCi0gIHVuc2lnbmVkIGxvbmcgaW50IGxibG9w dHM7CQkvKiBMQUJFTEVEIEZJTEUgb3B0aW9ucyBiaXRtYXNrICovCi0jZWxzZQotICBpbnQgbGJs b3B0czsKLSNlbmRpZiAvKiBPUzIgKi8KLX07Ci0KLQotLyoKLSAgRGF0YSB0eXBlIGZvciBwaWRz LiAgSWYgeW91ciBzeXN0ZW0gdXNlcyBhIGRpZmZlcmVudCB0eXBlLCBwdXQgc29tZXRoaW5nCi0g IGxpa2UgLURQSURfVD1waWRfdCBvbiBjb21tYW5kIGxpbmUsIG9yIG92ZXJyaWRlIGhlcmUuCi0q LwotI2lmbmRlZiBQSURfVAotI2RlZmluZSBQSURfVCBpbnQKLSNlbmRpZiAvKiBQSURfVCAqLwot LyoKLSAgRGF0YSB0eXBlcyBmb3IgdWlkcyBhbmQgZ2lkcy4gIFNhbWUgZGVhbCBhcyBmb3IgcGlk cy4KLSAgV291bGRuJ3QgYmUgbmljZSBpZiB0aGVyZSB3YXMgYSBwcmVwcm9jZXNzb3IgdGVzdCB0 byBmaW5kIG91dCBpZiBhCi0gIHR5cGVkZWYgZXhpc3RlZD8KLSovCi0jaWZkZWYgVk1TCi0vKiBO b3QgdXNlZCBpbiBWTVMgc28gd2hvIGNhcmVzICovCi0jZGVmaW5lIFVJRF9UIGludAotI2RlZmlu ZSBHSURfVCBpbnQKLSNlbmRpZiAvKiBWTVMgKi8KLQotI2lmZGVmIFBPU0lYCi0vKiBPciB3b3Vs ZCBpdCBiZSBiZXR0ZXIgKG9yIHdvcnNlPykgdG8gdXNlIF9QT1NJWF9TT1VSQ0UgaGVyZT8gKi8K LSNpZm5kZWYgVUlEX1QKLSNkZWZpbmUgVUlEX1QgdWlkX3QKLSNlbmRpZiAvKiBVSURfVCAqLwot I2lmbmRlZiBHSURfVAotI2RlZmluZSBHSURfVCBnaWRfdAotI2VuZGlmIC8qIEdJRF9UICovCi0j ZWxzZSAvKiBOb3QgUE9TSVggKi8KLSNpZmRlZiBTVlI0Ci0vKiBTVlI0IGFuZCBsYXRlciBoYXZl IHVpZF90IGFuZCBnaWRfdC4gKi8KLS8qIFNWUjMgYW5kIGVhcmxpZXIgdXNlIGludCwgb3IgdW5z aWduZWQgc2hvcnQsIG9yLi4uLiAqLwotI2lmbmRlZiBVSURfVAotI2RlZmluZSBVSURfVCB1aWRf dAotI2VuZGlmIC8qIFVJRF9UICovCi0jaWZuZGVmIEdJRF9UCi0jZGVmaW5lIEdJRF9UIGdpZF90 Ci0jZW5kaWYgLyogR0lEX1QgKi8KLSNlbHNlIC8qIE5vdCBTVlI0ICovCi0jaWZkZWYgQlNENDMK LSNpZm5kZWYgVUlEX1QKLSNkZWZpbmUgVUlEX1QgdWlkX3QKLSNlbmRpZiAvKiBVSURfVCAqLwot I2lmbmRlZiBHSURfVAotI2RlZmluZSBHSURfVCBnaWRfdAotI2VuZGlmIC8qIEdJRF9UICovCi0j ZWxzZSAvKiBOb3QgQlNENDMgKi8KLS8qIERlZmF1bHQgdGhlc2UgdG8gaW50IGZvciBvbGRlciBV TklYIHZlcnNpb25zICovCi0jaWZuZGVmIFVJRF9UCi0jZGVmaW5lIFVJRF9UIGludAotI2VuZGlm IC8qIFVJRF9UICovCi0jaWZuZGVmIEdJRF9UCi0jZGVmaW5lIEdJRF9UIGludAotI2VuZGlmIC8q IEdJRF9UICovCi0jZW5kaWYgLyogQlNENDMgKi8KLSNlbmRpZiAvKiBTVlI0ICAqLwotI2VuZGlm IC8qIFBPU0lYICovCi0KLS8qCi0gIGdldHB3dWlkKCkgYXJnIHR5cGUsIHdoaWNoIGlzIG5vdCBu ZWNlc3NhcmlseSB0aGUgc2FtZSBhcyBVSURfVCwKLSAgZS5nLiBpbiBTQ08gVU5JWCBTVlIzLCBp dCdzIGludC4KLSovCi0jaWZuZGVmIFBXSURfVAotI2RlZmluZSBQV0lEX1QgVUlEX1QKLSNlbmRp ZiAvKiBQV0lEX1QgKi8KLQotI2lmZGVmIENLX1JFRElSCi0jaWZkZWYgTkVYVAotI2RlZmluZSBN QUNIV0FJVAotI2Vsc2UKLSNpZmRlZiBNQUNICi0jZGVmaW5lIE1BQ0hXQUlUCi0jZW5kaWYgLyog TUFDSCAqLwotI2VuZGlmIC8qIE5FWFQgKi8KLQotI2lmZGVmIE1BQ0hXQUlUCQkJCS8qIFdBSVRf VCBhcmd1bWVudCBmb3Igd2FpdCgpICovCi0jaW5jbHVkZSA8c3lzL3dhaXQuaD4KLSNkZWZpbmUg Q0tfV0FJVF9ICi10eXBlZGVmIHVuaW9uIHdhaXQgV0FJVF9UOwotI2Vsc2UKLSNpZmRlZiBQT1NJ WAotI2lmZGVmIE9TRgotLyogT1NGIHdhaXQuaCBkZWZpbmVzIEJTRCB3YWl0IGlmIF9CU0QgaXMg ZGVmaW5lZCBzbyAgaGlkZSBfQlNEIGZyb20gd2FpdC5oICovCi0jaWZkZWYgX0JTRAotI2RlZmlu ZSBDS19PU0ZfQlNECi0jdW5kZWYgIF9CU0QKLSNlbmRpZiAvKiBfQlNEICovCi0jZW5kaWYgLyog T1NGICovCi0jaW5jbHVkZSA8c3lzL3dhaXQuaD4KLSNkZWZpbmUgQ0tfV0FJVF9ICi0jaWZuZGVm IFdBSVRfVAotdHlwZWRlZiBpbnQgV0FJVF9UOwotI2VuZGlmIC8qIFdBSVRfVCAqLwotI2lmZGVm IENLX09TRl9CU0QJCQkvKiBPU0YvMTogUmVzdG9yZSAgX0JTRCBkZWZpbml0aW9uICovCi0jZGVm aW5lIF9CU0QKLSN1bmRlZiBDS19PU0ZfQlNECi0jZW5kaWYgLyogQ0tfT1NGX0JTRCAqLwotI2Vs c2UgLyogIVBPU0lYICovCi10eXBlZGVmIGludCBXQUlUX1Q7Ci0jZW5kaWYgLyogUE9TSVggKi8K LSNlbmRpZiAvKiBNQUNIV0FJVCAqLwotI2Vsc2UKLXR5cGVkZWYgaW50IFdBSVRfVDsKLSNlbmRp ZiAvKiBDS19SRURJUiAqLwotCi0vKiBBc3NvcnRlZCBvdGhlciBibGFoX3QncyBoYW5kbGVkIGhl cmUuLi4gKi8KLQotI2lmbmRlZiBTSVpFX1QKLSNkZWZpbmUgU0laRV9UIHNpemVfdAotI2VuZGlm IC8qIFNJWkVfVCAqLwotCi0vKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyBvZiBzeXN0ZW0tZGVwZW5k ZW50IGZ1bmN0aW9ucyBjYWxsYWJsZSBmcm9tIGFsbCAqLwotLyogQy1LZXJtaXQgbW9kdWxlcy4g Ki8KLQotLyogRmlsZS1yZWxhdGVkIGZ1bmN0aW9ucyBmcm9tIHN5c3RlbS1kZXBlbmRlbnQgZmls ZSBpL28gbW9kdWxlICovCi0KLSNpZm5kZWYgQ0tWRklPX0MKLS8qIEZvciBzb21lIHJlYXNvbiwg dGhpcyBkb2VzIG5vdCBhZ3JlZSB3aXRoIERFQyBDICovCi1fUFJPVE9UWVAoIGludCB6a3NlbGYs ICh2b2lkKSApOwotI2VuZGlmIC8qIENLVkZJT19DICovCi1fUFJPVE9UWVAoIGludCB6b3Blbmks IChpbnQsIGNoYXIgKikgKTsKLV9QUk9UT1RZUCggaW50IHpvcGVubywgKGludCwgY2hhciAqLCBz dHJ1Y3QgemF0dHIgKiwgc3RydWN0IGZpbGluZm8gKikgKTsKLV9QUk9UT1RZUCggaW50IHpjbG9z ZSwgKGludCkgKTsKLSNpZm5kZWYgTUFDCi1fUFJPVE9UWVAoIGludCB6Y2hpbiwgKGludCwgaW50 ICopICk7Ci0jZW5kaWYgLyogTUFDICovCi1fUFJPVE9UWVAoIGludCB6eGluLCAoaW50LCBjaGFy ICosIGludCkgKTsKLV9QUk9UT1RZUCggaW50IHpzaW5sLCAoaW50LCBjaGFyICosIGludCkgKTsK LV9QUk9UT1RZUCggaW50IHppbmZpbGwsICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgenNvdXQs IChpbnQsIGNoYXIqKSApOwotX1BST1RPVFlQKCBpbnQgenNvdXRsLCAoaW50LCBjaGFyKikgKTsK LV9QUk9UT1RZUCggaW50IHpzb3V0eCwgKGludCwgY2hhciosIGludCkgKTsKLV9QUk9UT1RZUCgg aW50IHpjaG91dCwgKGludCwgY2hhcikgKTsKLV9QUk9UT1RZUCggaW50IHpvdXRkdW1wLCAodm9p ZCkgKTsKLV9QUk9UT1RZUCggaW50IHpzeXNjbWQsIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIGlu dCB6c2hjbWQsIChjaGFyICopICk7Ci0jaWZkZWYgVU5JWAotX1BST1RPVFlQKCBpbnQgenNldGZp bCwgKGludCwgaW50KSApOwotX1BST1RPVFlQKCBpbnQgemNoa3BpZCwgKHVuc2lnbmVkIGxvbmcp ICk7Ci0jZW5kaWYJLyogVU5JWCAqLwotI2lmZGVmIENLRVhFQwotX1BST1RPVFlQKCBWT0lEIHpf ZXhlYywgKGNoYXIgKiwgY2hhciAqKiwgaW50KSApOwotI2VuZGlmIC8qIENLRVhFQyAqLwotX1BS T1RPVFlQKCBpbnQgY2hrZm4sIChpbnQpICk7Ci1fUFJPVE9UWVAoIENLX09GRl9UIHpjaGtpLCAo Y2hhciAqKSApOwotI2lmZGVmIFZNU09SVU5JWAotX1BST1RPVFlQKCBDS19PRkZfVCB6Z2V0ZnMs IChjaGFyICopICk7Ci0jZWxzZQotI2lmZGVmIE9TMgotX1BST1RPVFlQKCBDS19PRkZfVCB6Z2V0 ZnMsIChjaGFyICopICk7Ci0jZWxzZQotI2RlZmluZSB6Z2V0ZnMoYSkgemNoa2koYSkKLSNlbmRp ZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBWTVNPUlVOSVggKi8KLV9QUk9UT1RZUCggaW50IGlzd2ls ZCwgKGNoYXIgKikgKTsKLV9QUk9UT1RZUCggaW50IGlzZGlyLCAoY2hhciAqKSApOwotX1BST1RP VFlQKCBpbnQgemNoa28sIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIGludCB6ZGVsZXQsIChjaGFy ICopICk7Ci1fUFJPVE9UWVAoIFZPSUQgenJ0b2wsIChjaGFyICosY2hhciAqKSApOwotX1BST1RP VFlQKCBWT0lEIHpsdG9yLCAoY2hhciAqLGNoYXIgKikgKTsKLV9QUk9UT1RZUCggVk9JRCB6c3Ry aXAsIChjaGFyICosY2hhciAqKikgKTsKLSNpZmRlZiBWTVMKLV9QUk9UT1RZUCggY2hhciAqIHpy ZWxuYW1lLCAoY2hhciAqLCBjaGFyICopICk7Ci0jZW5kaWYgLyogVk1TICovCi1fUFJPVE9UWVAo IGludCB6Y2hkaXIsIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiB6aG9tZSwgKHZvaWQp ICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiB6Z3RkaXIsICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQg enhjbWQsIChpbnQsIGNoYXIgKikgKTsKLSNpZm5kZWYgTUFDCi1fUFJPVE9UWVAoIGludCB6Y2xv c2YsIChpbnQpICk7Ci0jZW5kaWYgLyogTUFDICovCi0jaWZkZWYgTlpYUEFORAotX1BST1RPVFlQ KCBpbnQgbnp4cGFuZCwgKGNoYXIgKiwgaW50KSApOwotI2Vsc2UgLyogTlpYUEFORCAqLwotX1BS T1RPVFlQKCBpbnQgenhwYW5kLCAoY2hhciAqKSApOwotI2VuZGlmIC8qIE5aWFBBTkQgKi8KLV9Q Uk9UT1RZUCggaW50IHpuZXh0LCAoY2hhciAqKSApOwotI2lmZGVmIFpYUkVXSU5ECi1fUFJPVE9U WVAoIGludCB6eHJld2luZCwgKHZvaWQpICk7Ci0jZW5kaWYgLyogWlhSRVdJTkQgKi8KLV9QUk9U T1RZUCggaW50IHpjaGtzcGEsIChjaGFyICosIENLX09GRl9UKSApOwotX1BST1RPVFlQKCBWT0lE IHpuZXduLCAoY2hhciAqLCBjaGFyICoqKSApOwotX1BST1RPVFlQKCBpbnQgenJlbmFtZSwgKGNo YXIgKiwgY2hhciAqKSApOwotX1BST1RPVFlQKCBpbnQgemNvcHksIChjaGFyICosIGNoYXIgKikg KTsKLV9QUk9UT1RZUCggaW50IHpzYXR0ciwgKHN0cnVjdCB6YXR0ciAqKSApOwotX1BST1RPVFlQ KCBpbnQgemZyZWUsIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiB6ZmNkYXQsIChjaGFy ICopICk7Ci1fUFJPVE9UWVAoIGludCB6c3RpbWUsIChjaGFyICosIHN0cnVjdCB6YXR0ciAqLCBp bnQpICk7Ci0jaWZkZWYgQ0tfUEVSTVMKLV9QUk9UT1RZUCggY2hhciAqIHpncGVybSwgKGNoYXIg KikgKTsKLV9QUk9UT1RZUCggY2hhciAqIHppcGVybSwgKGNoYXIgKikgKTsKLSNlbmRpZiAvKiBD S19QRVJNUyAqLwotX1BST1RPVFlQKCBpbnQgem1haWwsIChjaGFyICosIGNoYXIgKikgKTsKLV9Q Uk9UT1RZUCggaW50IHpwcmludCwgKGNoYXIgKiwgY2hhciAqKSApOwotX1BST1RPVFlQKCBjaGFy ICogdGlsZGVfZXhwYW5kLCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBpbnQgem1rZGlyLCAoY2hh ciAqKSApIDsKLV9QUk9UT1RZUCggaW50IHpmc2VlaywgKENLX09GRl9UKSApIDsKLSNpZmRlZiBa Rk5RRlAKLV9QUk9UT1RZUCggc3RydWN0IHpmbmZwICogemZucWZwLCAoY2hhciAqLCBpbnQsIGNo YXIgKiApICkgOwotI2Vsc2UKLSNkZWZpbmUgemZucWZwKGEsYixjKSBja3N0cm5jcHkoYyxhLGIp Ci0jZW5kaWYgLyogWkZOUUZQICovCi1fUFJPVE9UWVAoIGludCB6dnVzZXIsIChjaGFyICopICkg OwotX1BST1RPVFlQKCBpbnQgenZwYXNzLCAoY2hhciAqKSApIDsKLV9QUk9UT1RZUCggVk9JRCB6 dmxvZ291dCwgKHZvaWQpICkgOwotI2lmZGVmIE9TMgotX1BST1RPVFlQKCBpbnQgb3Myc2V0bG9u Z25hbWUsICggY2hhciAqIGZuLCBjaGFyICogbG4gKSApIDsKLV9QUk9UT1RZUCggaW50IG9zMmdl dGxvbmduYW1lLCAoIGNoYXIgKiBmbiwgY2hhciAqKiBsbiApICkgOwotX1BST1RPVFlQKCBpbnQg b3MycmV4eCwgKCBjaGFyICosIGNoYXIgKiwgaW50ICkgKSA7Ci1fUFJPVE9UWVAoIGludCBvczJy ZXh4ZmlsZSwgKCBjaGFyICosIGNoYXIgKiwgY2hhciAqLCBpbnQpICkgOwotX1BST1RPVFlQKCBp bnQgb3MyZ2V0ZWFzLCAoY2hhciAqKSApIDsKLV9QUk9UT1RZUCggaW50IG9zMnNldGVhcywgKGNo YXIgKikgKSA7Ci1fUFJPVE9UWVAoIGNoYXIgKiBnZXRfb3MyX3ZlcnMsICh2b2lkKSApIDsKLV9Q Uk9UT1RZUCggaW50IGRvX2xhYmVsX3NlbmQsIChjaGFyICopICkgOwotX1BST1RPVFlQKCBpbnQg ZG9fbGFiZWxfcmVjdiwgKHZvaWQpICkgOwotI2lmZGVmIE9TMk1PVVNFCi1fUFJPVE9UWVAoIHVu c2lnbmVkIGxvbmcgb3MyX21vdXNlb24sICh2b2lkKSApOwotX1BST1RPVFlQKCB1bnNpZ25lZCBs b25nIG9zMl9tb3VzZWhpZGUsICh2b2lkKSApOwotX1BST1RPVFlQKCB1bnNpZ25lZCBsb25nIG9z Ml9tb3VzZXNob3csICh2b2lkKSApOwotX1BST1RPVFlQKCB1bnNpZ25lZCBsb25nIG9zMl9tb3Vz ZW9mZiwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIHZvaWQgb3MyX21vdXNlZXZ0LCAodm9pZCAqKSAp OwotX1BST1RPVFlQKCBpbnQgbW91c2VidXR0b25jb3VudCwgKHZvaWQpKTsKLSNlbmRpZiAvKiBP UzJNT1VTRSAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0vKiBGdW5jdGlvbnMgZnJvbSBzeXN0ZW0t ZGVwZW5kZW50IHRlcm1pbmFsIGkvbyBtb2R1bGUgKi8KLQotX1BST1RPVFlQKCBpbnQgdHRvcGVu LCAoY2hhciAqLCBpbnQgKiwgaW50LCBpbnQpICk7ICAvKiB0dHkgZnVuY3Rpb25zICovCi0jaWZu ZGVmIE1BQwotX1BST1RPVFlQKCBpbnQgdHRjbG9zLCAoaW50KSApOwotI2VuZGlmIC8qIE1BQyAq LwotX1BST1RPVFlQKCBpbnQgdHRoYW5nLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IHR0cmVz LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IHR0cGt0LCAobG9uZywgaW50LCBpbnQpICk7Ci0j aWZuZGVmIE1BQwotX1BST1RPVFlQKCBpbnQgdHR2dCwgKGxvbmcsIGludCkgKTsKLSNlbmRpZiAv KiBNQUMgKi8KLV9QUk9UT1RZUCggaW50IHR0c3NwZCwgKGludCkgKTsKLV9QUk9UT1RZUCggbG9u ZyB0dGdzcGQsICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgdHRmbHVpLCAodm9pZCkgKTsKLV9Q Uk9UT1RZUCggaW50IHR0Zmx1bywgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCB0dHB1c2hiYWNr LCAoQ0hBUiAqLCBpbnQpICk7Ci1fUFJPVE9UWVAoIGludCB0dHBlZWssICh2b2lkKSApOwotX1BS T1RPVFlQKCBpbnQgdHRnd3NpeiwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCB0dGNoaywgKHZv aWQpICk7Ci1fUFJPVE9UWVAoIGludCB0dHhpbiwgKGludCwgQ0hBUiAqKSApOwotX1BST1RPVFlQ KCBpbnQgdHR4b3V0LCAoQ0hBUiAqLCBpbnQpICk7Ci1fUFJPVE9UWVAoIGludCB0dG9sLCAoQ0hB UiAqLCBpbnQpICk7Ci1fUFJPVE9UWVAoIGludCB0dG9jLCAoY2hhcikgKTsKLV9QUk9UT1RZUCgg aW50IHR0aW5jLCAoaW50KSApOwotX1BST1RPVFlQKCBpbnQgdHRzY2FyciwgKGludCkgKTsKLV9Q Uk9UT1RZUCggaW50IHR0Z21kbSwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCB0dHNuZGIsICh2 b2lkKSApOwotX1BST1RPVFlQKCBpbnQgdHRzbmRsYiwgKHZvaWQpICk7Ci0jaWZkZWYgVU5JWAot X1BST1RPVFlQKCBjaGFyICogdHRnbGNrZGlyLCAodm9pZCkgKTsKLSNlbmRpZiAvKiBVTklYICov Ci0jaWZkZWYgUEFSU0VOU0UKLSNpZmRlZiBVTklYCi1fUFJPVE9UWVAoIGludCB0dGlubCwgKENI QVIgKiwgaW50LCBpbnQsIENIQVIsIENIQVIsIGludCkgKTsKLSNlbHNlCi0jaWZkZWYgVk1TCi1f UFJPVE9UWVAoIGludCB0dGlubCwgKENIQVIgKiwgaW50LCBpbnQsIENIQVIsIENIQVIsIGludCkg KTsKLSNlbHNlCi0jaWZkZWYgU1RSQVRVUwotX1BST1RPVFlQKCBpbnQgdHRpbmwsIChDSEFSICos IGludCwgaW50LCBDSEFSLCBDSEFSLCBpbnQpICk7Ci0jZWxzZQotI2lmZGVmIE9TMgotX1BST1RP VFlQKCBpbnQgdHRpbmwsIChDSEFSICosIGludCwgaW50LCBDSEFSLCBDSEFSLCBpbnQpICk7Ci0j ZWxzZQotI2lmZGVmIE9TSwotX1BST1RPVFlQKCBpbnQgdHRpbmwsIChDSEFSICosIGludCwgaW50 LCBDSEFSLCBDSEFSLCBpbnQpICk7Ci0jZWxzZQotX1BST1RPVFlQKCBpbnQgdHRpbmwsIChDSEFS ICosIGludCwgaW50LCBDSEFSLCBDSEFSKSApOwotI2VuZGlmIC8qIE9TSyAqLwotI2VuZGlmIC8q IE9TMiAqLwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAv KiBVTklYICovCi0jZWxzZSAvKiAhIFBBUlNFTlNFICovCi1fUFJPVE9UWVAoIGludCB0dGlubCwg KENIQVIgKiwgaW50LCBpbnQsIENIQVIpICk7Ci0jZW5kaWYgLyogUEFSU0VOU0UgKi8KLQotLyog WFlaTU9ERU0gc3VwcG9ydCAqLwotCi0vKgotICBDS19YWVogZW5hYmxlcyB0aGUgdmFyaW91cyBj b21tYW5kcyBhbmQgZGF0YSBzdHJ1Y3R1cmVzLgotICBYWVpfSU5URVJOQUwgbWVhbnMgdGhlc2Ug cHJvdG9jb2xzIGFyZSBidWlsdC1pbjsgaWYgbm90IGRlZmluZWQsCi0gIHRoZW4gdGhleSBhcmUg ZXh0ZXJuYWwuICBYWVpfRExMIGlzIHVzZWQgdG8gaW5kaWNhdGUgYSBzZXBhcmF0ZQotICBsb2Fk YWJsZSBsaWJyYXJ5IGNvbnRhaW5pbmcgdGhlIFhZWm1vZGVtIHByb3RvY29sIGNvZGUuCi0qLwot I2lmZGVmIHBkcDExCQkJCS8qIE5vIHJvb20gZm9yIHRoaXMgaW4gUERQLTExICovCi0jZGVmaW5l IE5PQ0tYWVoKLSNlbmRpZiAvKiBwZHAxMSAqLwotCi0jaWZuZGVmIE5PQ0tYWVoJCQkJLyogQWx0 ZXJuYXRpdmUgcHJvdG9jb2xzICovCi0jaWZuZGVmIENLX1hZWgotI2lmZGVmIFVOSVgKLSNkZWZp bmUgQ0tfWFlaCi0jZWxzZQotI2lmZGVmIE9TMgotI2RlZmluZSBDS19YWVoKLSNpZm5kZWYgTk9Y WVpETEwKLSNkZWZpbmUgWFlaX0lOVEVSTkFMCQkJLyogSW50ZXJuYWwgYW5kIERMTCAqLwotI2Rl ZmluZSBYWVpfRExMCi0jZW5kaWYgLyogTk9YWVpETEwgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNl bmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogQ0tfWFlaICovCi0jZW5kaWYgLyogTk9DS1hZWiAq LwotCi0jaWZkZWYgWFlaX0lOVEVSTkFMCQkJLyogVGhpcyBlbnN1cmVzIHRoYXQgWFlaX0lOVEVS TkFMICovCi0jaWZuZGVmIENLX1hZWgkJCQkvKiBpcyBkZWZpbmVkIG9ubHkgaWYgQ0tfWFlaIGlz IHRvbyAqLwotI3VuZGVmIFhZWl9JTlRFUk5BTAotI2VuZGlmIC8qIENLX1hZWiAqLwotI2VuZGlm IC8qIFhZWl9JTlRFUk5BTCAqLwotI2lmZGVmIFhZWl9ETEwJCQkJLyogVGhpcyBlbnN1cmVzIFhZ Wl9ETEwgaXMgZGVmaW5lZCAqLwotI2lmbmRlZiBYWVpfSU5URVJOQUwJCQkvKiBvbmx5IGlmIFhZ Wl9JTlRFUk5BTCBpcyB0b28gKi8KLSN1bmRlZiBYWVpfRExMCi0jZW5kaWYgLyogWFlaX0lOVEVS TkFMICovCi0jZW5kaWYgLyogWFlaX0RMTCAqLwotCi0vKiBDb25zb2xlIGZ1bmN0aW9ucyAqLwot Ci1fUFJPVE9UWVAoIGludCBjb25nbSwgKHZvaWQpICk7Ci0jaWZkZWYgQ09NTUVOVAotX1BST1RP VFlQKCBWT0lEIGNvbmludCwgKFNJR1RZUCAoKikoaW50LCBpbnQpLCBTSUdUWVAgKCopKGludCwg aW50KSkgKTsKLSNlbHNlCi1fUFJPVE9UWVAoIFZPSUQgY29uaW50LCAoU0lHVFlQICgqKShpbnQp LCBTSUdUWVAgKCopKGludCkpICk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotX1BST1RPVFlQKCBW T0lEIGNvbm5vaSwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBjb25jYiwgKGNoYXIpICk7Ci0j aWZkZWYgQ09OR1NQRAotX1BST1RPVFlQKCBsb25nIGNvbmdzcGQsICh2b2lkKSApOwotI2VuZGlm IC8qIENPTkdTUEQgKi8KLV9QUk9UT1RZUCggaW50IGNvbmJpbiwgKGNoYXIpICk7Ci1fUFJPVE9U WVAoIGludCBjb25yZXMsICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgY29ub2MsIChjaGFyKSAp OwotX1BST1RPVFlQKCBpbnQgY29ueG8sIChpbnQsIGNoYXIgKikgKTsKLV9QUk9UT1RZUCggaW50 IGNvbm9sLCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBpbnQgY29ub2xhLCAoY2hhciAqW10pICk7 Ci1fUFJPVE9UWVAoIGludCBjb25vbGwsIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIGludCBjb25j aGssICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgY29uaW5jLCAoaW50KSApOwotX1BST1RPVFlQ KCBjaGFyICogY29ua2JnLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IHBzdXNwZW5kLCAoaW50 KSApOwotX1BST1RPVFlQKCBpbnQgcHJpdl9pbmksICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQg cHJpdl9vbiwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBwcml2X29mZiwgKHZvaWQpICk7Ci1f UFJPVE9UWVAoIGludCBwcml2X2NhbiwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBwcml2X2No aywgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBwcml2X29wbiwgKGNoYXIgKiwgaW50KSApOwot Ci1fUFJPVE9UWVAoIGludCBzeXNpbml0LCAodm9pZCkgKTsJLyogTWlzYyBLZXJtaXQgZnVuY3Rp b25zICovCi1fUFJPVE9UWVAoIGludCBzeXNjbGVhbnVwLCAodm9pZCkgKTsKLV9QUk9UT1RZUCgg aW50IG1zbGVlcCwgKGludCkgKTsKLV9QUk9UT1RZUCggVk9JRCBydGltZXIsICh2b2lkKSApOwot X1BST1RPVFlQKCBpbnQgZ3RpbWVyLCAodm9pZCkgKTsKLSNpZmRlZiBHRlRJTUVSCi1fUFJPVE9U WVAoIFZPSUQgcmZ0aW1lciwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIENLRkxPQVQgZ2Z0aW1lciwg KHZvaWQpICk7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotX1BST1RPVFlQKCBWT0lEIHR0aW1vZmYs ICh2b2lkKSApOwotX1BST1RPVFlQKCBWT0lEIHp0aW1lLCAoY2hhciAqKikgKTsKLV9QUk9UT1RZ UCggaW50IHBhcmNoaywgKENIQVIgKiwgQ0hBUiwgaW50KSApOwotX1BST1RPVFlQKCBWT0lEIGRv ZXhpdCwgKGludCwgaW50KSApOwotX1BST1RPVFlQKCBpbnQgYXNrbW9yZSwgKHZvaWQpICk7Ci1f UFJPVE9UWVAoIFZPSUQgZmF0YWwsIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIFZPSUQgZmF0YWwy LCAoY2hhciAqLCBjaGFyICopICk7Ci0jaWZkZWYgVk1TCi1fUFJPVE9UWVAoIGludCBja19jYW5j aW8sICh2b2lkKSApOwotI2VuZGlmIC8qIFZNUyAqLwotCi0vKiBLZXkgbWFwcGluZyBzdXBwb3J0 ICovCi0KLSNpZmRlZiBOT0lDUAotI2lmbmRlZiBOT1NFVEtFWQotI2RlZmluZSBOT1NFVEtFWQot I2VuZGlmIC8qIE5PU0VUS0VZICovCi0jZW5kaWYgLyogTk9JQ1AgKi8KLQotI2lmZGVmIE1BQwot I2lmbmRlZiBOT1NFVEtFWQotI2RlZmluZSBOT1NFVEtFWQotI2VuZGlmIC8qIE5PU0VUS0VZICov Ci0jZW5kaWYgLyogTUFDICovCi0KLV9QUk9UT1RZUCggaW50IGNvbmdrcywgKGludCkgKTsKLSNp ZmRlZiBPUzIKLS8qIE9TMiByZXF1aXJlcyB0aGVzZSBkZWZpbml0aW9ucyBldmVuIGlmIFNFVCBL RVkgaXMgbm90IGJlaW5nIHN1cHBvcnRlZCAqLwotI2RlZmluZSBLTVNJWkUgODkxNgotdHlwZWRl ZiBVTE9ORyBLRVk7Ci10eXBlZGVmIENIQVIgKk1BQ1JPOwotZXh0ZXJuIGludCB3aWRlcmVzdWx0 OwotI2Vsc2UgLyogTm90IE9TMiAqLwotI2lmbmRlZiBOT1NFVEtFWQotLyoKLSAgQ2F0Y2gtYWxs IGZvciBzeXN0ZW1zIHdoZXJlIHdlIGRvbid0IGtub3cgaG93IHRvIHJlYWQga2V5Ym9hcmQgc2Nh bgotICBjb2RlcyA+IDI1NS4KLSovCi0jZGVmaW5lIEtNU0laRSAyNTYKLS8qIE5vdGU6IENIQVIg KGkuZS4gdW5zaWduZWQgY2hhcikgaXMgdmVyeSBpbXBvcnRhbnQgaGVyZS4gKi8KLXR5cGVkZWYg Q0hBUiBLRVk7Ci10eXBlZGVmIENIQVIgKiBNQUNSTzsKLSNkZWZpbmUgY29uZ2tzIGNvbmluYwot I2VuZGlmIC8qIE5PU0VUS0VZICovCi0jZW5kaWYgLyogT1MyICovCi0KLSNpZm5kZWYgT1MyCi0j aWZuZGVmIE5PS1ZFUkJTCQkJLyogTm8gXEt2ZXJicyB1bmxlc3MuLi4gKi8KLSNkZWZpbmUgTk9L VkVSQlMKLSNlbmRpZiAvKiBOT0tWRVJCUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZuZGVm IE5PS1ZFUkJTCi0jaWZkZWYgT1MyCi0vKgotICBOb3RlOiB0aGlzIHZhbHVlIGNob3NlbiB0byBi ZSBiaWdnZXIgdGhhbiBQQyBCSU9TIGtleSBtb2RpZmllciBiaXRzLAotICBidXQgc3RpbGwgZml0 IGluIDE2IGJpdHMgd2l0aG91dCBhZmZlY3Rpbmcgc2lnbi4KLQotICBBcyBvZiBLOTUgMS4xLjUs IHRoaXMgbm8gbG9uZ2VyIGZpdHMgaW4gMTYgYml0cywgZ29vZCB0aGluZyB3ZSBhcmUgMzIgYml0 LgotKi8KLSNkZWZpbmUgRl9NQUNSTyAweDIwMDAgICAgICAgICAgLyogQml0IGluZGljYXRpbmcg YSBtYWNybyBpbmRpY2UgKi8KLSNkZWZpbmUgSVNfTUFDUk8oeCkgKHggJiBGX01BQ1JPKQotI2Rl ZmluZSBGX0tWRVJCIDB4NDAwMAkJCS8qIEJpdCBpbmRpY2F0aW5nIGEga2V5Ym9hcmQgdmVyYiAq LwotI2RlZmluZSBJU19LVkVSQih4KSAoeCAmIEZfS1ZFUkIpCS8qIFRlc3QgdGhpcyBiaXQgKi8K LSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT0tWRVJCUyAqLwotCi0jZGVmaW5lIEZfRVND ICAgMHg4MDAwCQkvKiBCaXQgaW5kaWNhdGluZyBFU0MgY2hhciBjb21iaW5hdGlvbiAqLwotI2Rl ZmluZSBJU19FU0MoeCkgKHggJiBGX0VTQykKLSNkZWZpbmUgRl9DU0kgICAweDEwMDAwCQkvKiBC aXQgaW5kaWNhdGluZyBDU0kgY2hhciBjb21iaW5hdGlvbiAqLwotI2RlZmluZSBJU19DU0koeCkg KHggJiBGX0NTSSkKLQotI2lmZGVmIE5PU1BMCQkJCS8qIFRoaXMgbWlnaHQgYmUgb3ZlcmtpbGwu LiAqLwotI2lmbmRlZiBOT0tWRVJCUwkJCS8qIE5vdCBhbGwgXEt2ZXJicyByZXF1aXJlICovCi0j ZGVmaW5lIE5PS1ZFUkJTCQkJLyogdGhlIHNjcmlwdCBwcm9ncmFtbWluZyBsYW5ndWFnZS4gKi8K LSNlbmRpZiAvKiBOT0tWRVJCUyAqLwotI2lmbmRlZiBOT1RBS0VBUkdTCi0jZGVmaW5lIE5PVEFL RUFSR1MKLSNlbmRpZiAvKiBOT1RBS0VBUkdTICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotLyoK LSAgRnVuY3Rpb24gcHJvdG90eXBlcyBmb3Igc3lzdGVtIGFuZCBsaWJyYXJ5IGZ1bmN0aW9ucy4K LSovCi0jaWZkZWYgX1BPU0lYX1NPVVJDRQotI2lmbmRlZiBWTVMKLSNpZm5kZWYgTUFDCi0jZGVm aW5lIENLX0FOU0lMSUJTCi0jZW5kaWYgLyogTUFDICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5k aWYgLyogX1BPU0lYX1NPVVJDRSAqLwotCi0jaWZkZWYgTkVYVAotI2RlZmluZSBDS19BTlNJTElC UwotI2VuZGlmIC8qIE5FWFQgKi8KLQotI2lmZGVmIFNWUjQKLSNkZWZpbmUgQ0tfQU5TSUxJQlMK LSNlbmRpZiAvKiBTVlI0ICovCi0KLSNpZmRlZiBTVFJBVFVTCQkJCS8qIFN0cmF0dXMgVk9TIHVz ZXMgQU5TSSBsaWJyYXJpZXMgKi8KLSNkZWZpbmUgQ0tfQU5TSUxJQlMKLSNlbmRpZiAvKiBTVFJB VFVTICovCi0KLSNpZmRlZiBPUzIKLSNkZWZpbmUgQ0tfQU5TSUxJQlMKLSNpZm5kZWYgTk9DVVJT RVMKLSNkZWZpbmUgTVlDVVJTRVMKLSNlbmRpZiAvKiBOT0NVUlNFUyAqLwotI2RlZmluZSBDS19S VFNDVFMKLSNpZmRlZiBfX0lCTUNfXwotI2RlZmluZSBTX0lGTVQgMHhGMDAwCi0jZGVmaW5lIHRp bWV6b25lIF90aW1lem9uZQotI2VuZGlmIC8qIF9fSUJNQ19fICovCi0jaW5jbHVkZSA8ZmNudGwu aD4KLSNpbmNsdWRlIDxpby5oPgotI2lmZGVmIF9fRU1YX18KLSNpZm5kZWYgX18zMkJJVF9fCi0j ZGVmaW5lIF9fMzJCSVRfXwotI2VuZGlmIC8qIF9fMzJCSVRfXyAqLwotI2luY2x1ZGUgPHN5cy90 aW1lYi5oPgotI2Vsc2UgLyogX19FTVhfXyAqLwotI2luY2x1ZGUgPGRpcmVjdC5oPgotI3VuZGVm IFNJR0FMUk0KLSNpZm5kZWYgU0lHVVNSMQotI2RlZmluZSBTSUdVU1IxIDcKLSNlbmRpZiAvKiBT SUdVU1IxICovCi0jZGVmaW5lIFNJR0FMUk0gU0lHVVNSMQotX1BST1RPVFlQKCB1bnNpZ25lZCBh bGFybSwgKHVuc2lnbmVkKSApOwotX1BST1RPVFlQKCB1bnNpZ25lZCBzbGVlcCwgKHVuc2lnbmVk KSApOwotI2VuZGlmIC8qIF9fRU1YX18gKi8KLV9QUk9UT1RZUCggdW5zaWduZWQgbG9uZyB6ZHNr c3BhY2UsIChpbnQpICk7Ci1fUFJPVE9UWVAoIGludCB6Y2hkc2ssIChpbnQpICk7Ci1fUFJPVE9U WVAoIGludCBjb25pbmNyYXcsIChpbnQpICk7Ci1fUFJPVE9UWVAoIGludCB0dGlzY29tLCAoaW50 IGYpICk7Ci1fUFJPVE9UWVAoIGludCBJc0ZpbGVOYW1lVmFsaWQsIChjaGFyICopICk7Ci1fUFJP VE9UWVAoIHZvaWQgQ2hhbmdlTmFtZUZvckZBVCwgKGNoYXIgKikgKTsKLV9QUk9UT1RZUCggY2hh ciAqR2V0TG9hZFBhdGgsICh2b2lkKSApOwotI2VuZGlmIC8qIE9TMiAqLwotCi0vKiBGdWxsc2Ny ZWVuIGZpbGUgdHJhbnNmZXIgZGlzcGxheSBpdGVtcy4uLiAqLwotCi0jaWZuZGVmIE5PQ1VSU0VT Ci0jaWZkZWYgQ0tfTkNVUlNFUwkJCS8qIENLX05DVVJTRVMgaW1wbGllcyBDS19DVVJTRVMgKi8K LSNpZm5kZWYgQ0tfQ1VSU0VTCi0jZGVmaW5lIENLX0NVUlNFUwotI2VuZGlmIC8qIENLX0NVUlNF UyAqLwotI2VuZGlmIC8qIENLX05DVVJTRVMgKi8KLQotI2lmZGVmIE1ZQ1VSU0VTCQkJCS8qIE1Z Q1VSU0VTIGltcGxpZXMgQ0tfQ1VSU0VTICovCi0jaWZuZGVmIENLX0NVUlNFUwotI2RlZmluZSBD S19DVVJTRVMKLSNlbmRpZiAvKiBDS19DVVJTRVMgKi8KLSNlbmRpZiAvKiBNWUNVUlNFUyAqLwot I2VuZGlmIC8qIE5PQ1VSU0VTICovCi0KLSNpZmRlZiBOT0NVUlNFUwotI2lmZGVmIENLX0NVUlNF UwotI3VuZGVmIENLX0NVUlNFUwotI2VuZGlmIC8qIENLX0NVUlNFUyAqLwotI2lmbmRlZiBOT0RJ U1BMQVkKLSNkZWZpbmUgTk9ESVNQTEFZCi0jZW5kaWYgLyogTk9ESVNQTEFZICovCi0jZW5kaWYg LyogTk9DVVJTRVMgKi8KLQotI2lmZGVmIENLX0NVUlNFUwotLyoKLSAgVGhlIENLX1dSRUZSRVNI IHN5bWJvbCBpcyBkZWZpbmVkIGlmIHRoZSBjdXJzZXMgbGlicmFyeSBwcm92aWRlcwotICBjbGVh cm9rKCkgYW5kIHdyZWZyZXNoKCkgZnVuY3Rpb25zLCB3aGljaCBhcmUgdXNlZCBpbiByZXBhaW50 aW5nCi0gIHRoZSBzY3JlZW4uCi0qLwotI2lmZGVmIE5PV1JFRlJFU0gJCQkvKiBPdmVycmlkZSBD S19XUkVGUkVTSCAqLwotCi0jaWZkZWYgQ0tfV1JFRlJFU0gJCQkvKiBJZiB0aGlzIGlzIGRlZmlu ZWQsICovCi0jdW5kZWYgQ0tfV1JFRlJFU0gJCQkvKiB1bmRlZmluZSBpdC4gKi8KLSNlbmRpZiAv KiBDS19XUkVGUkVTSCAqLwotCi0jZWxzZSAvKiAhTk9XUkVGUkVTSCAqLwkJCS8qIE5vIG92ZXJy aWRlLi4uICovCi0KLSNpZm5kZWYgQ0tfV1JFRlJFU0gJCQkvKiBJZiBDS19XUkVGUkVTSCBub3Qg ZGVmaW5lZCAqLwotLyoKLSAgQXV0b21hdGljYWxseSBkZWZpbmUgaXQgZm9yIHN5c3RlbXMga25v d24gdG8gaGF2ZSBpdCAuLi4KLSovCi0jaWZkZWYgVk1TCQkJCS8qIERFQyAoT3BlbilWTVMgaGFz IGl0ICovCi0jZGVmaW5lIENLX1dSRUZSRVNICi0jZWxzZQotI2lmZGVmIHVsdHJpeAkJCQkvKiBE RUMgVUxUUklYIGhhcyBpdCAqLwotI2Vsc2UKLSNpZmRlZiBTVlIzCQkJCS8qIFN5c3RlbSBWIGhh cyBpdCAqLwotI2RlZmluZSBDS19XUkVGUkVTSAotI2Vsc2UKLSNpZmRlZiBCU0Q0NAkJCQkvKiA0 LjQgQlNEIGhhcyBpdCAqLwotI2RlZmluZSBDS19XUkVGUkVTSAotI2Vsc2UKLSNpZmRlZiBORVhU CQkJCS8qIERlZmluZSBpdCBmb3IgTmVYVFNURVAgKi8KLSNkZWZpbmUgQ0tfV1JFRlJFU0gKLSNl bHNlCi0jaWZkZWYgU1VOT1M0CQkJCS8qIFN1bk9TIDQueC4uLiAqLwotI2RlZmluZSBDS19XUkVG UkVTSAotI2Vsc2UKLSNpZmRlZiBTT0xBUklTMjUJCQkvKiBTb2xhcmlzIDIuNSBhbmQgbGF0ZXIg Ki8KLSNkZWZpbmUgQ0tfV1JFRlJFU0gKLSNlbHNlCi0jaWZkZWYgQUlYUlMJCQkJLyogUlMvNjAw MCBBSVggLi4uICovCi0jZGVmaW5lIENLX1dSRUZSRVNICi0jZWxzZQotI2lmZGVmIFJUQUlYCQkJ CS8qIFJUIFBDIEFJWCAuLi4gKi8KLSNkZWZpbmUgQ0tfV1JFRlJFU0gKLSNlbHNlCi0jaWZkZWYg T1NGCQkJCS8qIERFQyBPU0YvMSAuLi4gKi8KLSNkZWZpbmUgQ0tfV1JFRlJFU0gKLQotLyogQWRk IG1vcmUgaGVyZSwgb3IganVzdCBkZWZpbmUgQ0tfV1JFRlJFU0ggb24gdGhlIENDIGNvbW1hbmQg bGluZS4uLiAqLwotCi0jZW5kaWYgLyogT1NGICovCi0jZW5kaWYgLyogUlRBSVggKi8KLSNlbmRp ZiAvKiBBSVhSUyAqLwotI2VuZGlmIC8qIFNPTEFSSVMyNSAqLwotI2VuZGlmIC8qIFNVTk9TNCAq LwotI2VuZGlmIC8qIE5FWFQgKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2VuZGlmIC8qIFNWUjMg Ki8KLSNlbmRpZiAvKiB1bHRyaXggKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQotI2Vsc2UgLyogQ0tf V1JFRlJFU0ggaXMgZGVmaW5lZCAqLwotCi0vKiBUaGlzIGlzIHdpdGhpbiBhbiBpZmRlZiBDS19D VVJTRVMgYmxvY2suICBUaGUgZm9sbG93aW5nIGlzIG5vdCBuZWVkZWQgKi8KLQotI2lmbmRlZiBD S19DVVJTRVMJCQkvKiBDS19XUkVGUkVTSCBpbXBsaWVzIENLX0NVUlNFUyAqLwotI2RlZmluZSBD S19DVVJTRVMKLSNlbmRpZiAvKiBDS19DVVJTRVMgKi8KLQotI2VuZGlmIC8qIENLX1dSRUZSRVNI ICovCi0jZW5kaWYgLyogTk9XUkVGUkVTSCAqLwotCi0jaWZuZGVmIFRSTUJVRkwKLSNpZmRlZiBC SUdCVUZPSwotI2RlZmluZSBUUk1CVUZMIDE2Mzg0Ci0jZWxzZQotI2lmZGVmIERZTkFNSUMKLSNk ZWZpbmUgVFJNQlVGTCA4MTkyCi0jZWxzZQotI2RlZmluZSBUUk1CVUZMIDEwMjQKLSNlbmRpZiAv KiBCSUdCVUZPSyAqLwotI2VuZGlmIC8qIERZTkFNSUMgKi8KLSNlbmRpZiAvKiBUUk1CVUZMICov Ci0jZW5kaWYgLyogQ0tfQ1VSU0VTICovCi0KLS8qCi0gIFdoZXRoZXIgdG8gdXNlIGNrbWF0Y2go KSBpbiBhbGwgaXRzIGdsb3J5IGZvciBDLVNoZWxsLWxpa2UgcGF0dGVybnMuCi0gIElmIENLUkVH RVggaXMgTk9UIGRlZmluZWQsIGFsbCBidXQgKiBhbmQgPyBtYXRjaGluZyBhcmUgcmVtb3ZlZCBm cm9tCi0gIGNrbWF0Y2goKS4gIE5PVEU6IERlZmluaW5nIENLUkVHRVggZG9lcyBub3QgbmVjZXNz YXJpbHkgbWVhbiB0aGF0IGNrbWF0Y2goKQotICByZWdleGVzIGFyZSB1c2VkIGZvciBmaWxlbmFt ZSBtYXRjaGluZy4gIFRoYXQgZGVwZW5kcyBvbiB3aGV0aGVyIHp4cGFuZCgpCi0gIGluIGNrP2Zp by5jIGNhbGxzIGNrbWF0Y2goKS4gIE5PVEUgMjogUkVHRVggaXMgYSBtaXNub21lciAtLSB0aGVz ZSBhcmUgbm90Ci0gIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaW4gdGhlIGNvbXB1dGVyLXNjaWVuY2Ug c2Vuc2UgKGluIHdoaWNoLCBlLmcuICJhKmIiCi0gIG1hdGNoZXMgMCBvciBtb3JlICdhJyBjaGFy YWN0ZXJzIGZvbGxvd2VkIGJ5ICdiJykgYnV0IHBhdHRlcm5zIChpbiB3aGljaAotICAiYSpiIiBt YXRjaGVzICdhJyBmb2xsb3dlZCBieSAwIG9yIG1vcmUgbm9uLWIgY2hhcmFjdGVycywgZm9sbG93 ZWQgYnkgYikuCi0qLwotI2lmbmRlZiBOT0NLUkVHRVgKLSNpZm5kZWYgQ0tSRUdFWAotI2RlZmlu ZSBDS1JFR0VYCi0jZW5kaWYgLyogQ0tSRUdFWCAqLwotI2VuZGlmIC8qIE5PQ0tSRUdFWCAqLwot Ci0vKiBMZWFybmVkLXNjcmlwdCBmZWF0dXJlICovCi0KLSNpZm5kZWYgTk9MRUFSTgotI2lmZGVm IE5PU1BMCi0jZGVmaW5lIE5PTEVBUk4KLSNlbHNlCi0jaWZkZWYgTk9MT0NBTAotI2RlZmluZSBO T0xFQVJOCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0jZW5kaWYg LyogTk9MRUFSTiAqLwotCi0jaWZkZWYgTk9MRUFSTgotI2lmZGVmIENLTEVBUk4KLSN1bmRlZiBD S0xFQVJOCi0jZW5kaWYgLyogQ0tMRUFSTiAqLwotI2Vsc2UgIC8qICFOT0xFQVJOICovCi0jaWZu ZGVmIENLTEVBUk4KLSNpZmRlZiBPUzJPUlVOSVgKLS8qIEluIFVOSVggdGhpcyBjYW4gd29yayBv bmx5IHdpdGggY2t1Y25zLmMgYnVpbGRzICovCi0jZGVmaW5lIENLTEVBUk4KLSNlbHNlCi0jaWZk ZWYgVk1TCi0jZGVmaW5lIENLTEVBUk4KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzJP UlVOSVggKi8KLSNlbmRpZiAvKiBDS0xFQVJOICovCi0jZW5kaWYgLyogTk9MRUFSTiAqLwotCi0j aWZkZWYgQ0tMRUFSTgotI2lmbmRlZiBMRUFSTkJVRlNJWgotI2RlZmluZSBMRUFSTkJVRlNJWiAx MjgKLSNlbmRpZiAvKiBMRUFSTkJVRlNJWiAqLwotI2VuZGlmIC8qIENLTEVBUk4gKi8KLQotI2lm bmRlZiBJS1NET05MWQotI2lmbmRlZiBDS1RJRExFCQkJCS8qIFBzZXVkby1rZWVwYWxpdmUgaW4g Q09OTkVDVCAqLwotI2lmZGVmIE9TMgkJCQkvKiBJbiBLOTUgKi8KLSNkZWZpbmUgQ0tUSURMRQot I2Vsc2UKLSNpZmRlZiBVTklYCQkJCS8qIEluIFVOSVggYnV0IG9ubHkgY2t1Y25zIHZlcnNpb25z ICovCi0jaWZuZGVmIE5PTEVBUk4KLSNpZm5kZWYgTk9TRUxFQ1QKLSNkZWZpbmUgQ0tUSURMRQot I2VuZGlmIC8qIE5PU0VMRUNUICovCi0jZW5kaWYgLyogTk9MRUFSTiAqLwotI2VuZGlmIC8qIFVO SVggKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBDS1RJRExFICovCi0jZW5kaWYgLyog SUtTRE9OTFkgKi8KLQotI2lmZGVmIENLX0FOU0lMSUJTCi0vKgotICBTdHJpbmcgbGlicmFyeSBm dW5jdGlvbnMuCi0gIEZvciBBTlNJIEMsIGdldCBwcm90b3R5cGVzIGZyb20gPHN0cmluZy5oPi4K LSAgT3RoZXJ3aXNlLCBza2lwIHRoZSBwcm90b3R5cGVzLgotKi8KLSNpbmNsdWRlIDxzdHJpbmcu aD4KLQotLyoKLSAgUHJvdG90eXBlcyBmb3Igb3RoZXIgY29tbW9ubHkgdXNlZCBsaWJyYXJ5IGZ1 bmN0aW9ucywgc3VjaCBhcwotICBtYWxsb2MsIGZyZWUsIGdldGVudiwgYXRvbCwgYXRvaSwgYW5k IGV4aXQuICBPdGhlcndpc2UsIG5vIHByb3RvdHlwZXMuCi0qLwotI2luY2x1ZGUgPHN0ZGxpYi5o PgotI2lmZGVmIERJQUIgLyogRElBQiBEUzkwICovCi0vKiAjaW5jbHVkZSA8Y29tbW9uQy5oPiAg Ki8KLSNpbmNsdWRlIDxzeXMvd2FpdC5oPgotI2RlZmluZSBDS19XQUlUX0gKLSNpZmRlZiBDT01N RU5UCi1leHRlcm4gdm9pZCBleGl0KGludCBzdGF0dXMpOwotZXh0ZXJuIHZvaWQgX2V4aXQoaW50 IHN0YXR1cyk7Ci1leHRlcm4gaW50IHVuYW1lKHN0cnVjdCB1dHNuYW1lICpuYW1lKTsKLSNlbmRp ZiAvKiBDT01NRU5UICovCi1leHRlcm4gaW50IGNobW9kKGNoYXIgKnBhdGgsIGludCBtb2RlKTsK LWV4dGVybiBpbnQgaW9jdGwoaW50IGZpbGRlcywgaW50IHJlcXVlc3QsIC4uLik7Ci1leHRlcm4g aW50IHJkY2hrKGludCB0dHlmZCk7Ci1leHRlcm4gaW50IG5hcChpbnQgbSk7Ci0jaWZkZWYgQ09N TUVOVAotZXh0ZXJuIGludCBnZXRwcGlkKHZvaWQpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLWV4 dGVybiBpbnQgX2ZpbGJ1ZihGSUxFICpzdHJlYW0pOwotZXh0ZXJuIGludCBfZmxzYnVmKGNoYXIg YyxGSUxFICpzdHJlYW0pOwotI2VuZGlmIC8qIERJQUIgKi8KLQotLyoKLSAgUHJvdG90eXBlcyBm b3IgVU5JWCBmdW5jdGlvbnMgbGlrZSBhY2Nlc3MsIGFsYXJtLCBjaGRpciwgc2xlZXAsIGZvcmss Ci0gIGFuZCBwYXVzZS4gIE90aGVyd2lzZSwgbm8gcHJvdG90eXBlcy4KLSovCi0jaWZkZWYgVk1T Ci0jaW5jbHVkZSA8c2lnbmFsLmg+ICAvKiBTTVM6IHNsZWVwKCkgZm9yIG9sZCAoVjQuMC0wMDAp IERFQyBDLiAqLwotI2luY2x1ZGUgPHVuaXhpby5oPgotI2luY2x1ZGUgPHVuaXhsaWIuaD4gLyog U01TOiBnZXRwaWQoKSBmb3Igb2xkIChWNC4wLTAwMCkgREVDIEMuICovCi0jZW5kaWYgLyogVk1T ICovCi0KLSNpZmRlZiBORVhUCi0jaWZuZGVmIE5FWFQzMwotI2luY2x1ZGUgPGxpYmMuaD4KLSNl bmRpZiAvKiBORVhUMzMgKi8KLSNlbHNlICAvKiBOb1QgTmVYVCAqLwotI2lmbmRlZiBBTUlHQQot I2lmbmRlZiBPUzIKLSNpZmRlZiBTVFJBVFVTCi0jaW5jbHVkZSA8Y191dGlsaXRpZXMuaD4KLSNl bHNlIC8qICFTVFJBVFVTICovCi0jaWZuZGVmIE9TS1hYQwotI2luY2x1ZGUgPHVuaXN0ZC5oPgot I2VuZGlmIC8qIE9TS1hYQyAqLwotI2lmZGVmIEhBVkVfQ1JZUFRfSAotI2luY2x1ZGUgPGNyeXB0 Lmg+Ci0jZW5kaWYgLyogSEFWRV9DUllQVF9IICovCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotI2Vu ZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIEFNSUdBICovCi0jZW5kaWYgLyogTkVYVCAqLwotCi0j ZWxzZSAvKiBOb3QgQU5TSSBsaWJzLi4uICovCi0KLSNpZmRlZiBNQUMKLSNpbmNsdWRlIDxTdHJp bmcuaD4KLSNpbmNsdWRlIDxTdGRMaWIuaD4KLSNlbmRpZiAvKiBNQUMgKi8KLQotI2lmZGVmIEhQ VVgKLSNpZm5kZWYgSFBVWFBSRTY1Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYgLyogSFBV WFBSRTY1ICovCi0jZW5kaWYgLyogSFBVWCAqLwotCi0jaWZkZWYgU1VOT1M0MQotI2luY2x1ZGUg PHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2Vsc2UKLSNpZm5kZWYgTUFDCi0vKgot ICBJdCBpcyBlc3NlbnRpYWwgdGhhdCB0aGVzZSBhcmUgZGVjbGFyZWQgY29ycmVjdGx5IQotICBX aGljaCBpcyBub3QgYWx3YXlzIGVhc3kuICBUYWtlIG1hbGxvYygpIGZvciBpbnN0YW5jZSAuLi4K LSovCi0jaWZkZWYgUFlSQU1JRAotI2lmZGVmIFNWUjQKLSNpZmRlZiBfX1NURENfXwotI2RlZmlu ZSBTSVpFX1RfTUFMTE9DCi0jZW5kaWYgLyogX19TVERDX18gKi8KLSNlbmRpZiAvKiBTVlI0ICov Ci0jZW5kaWYgLyogUFlSQU1JRCAqLwotLyoKLSAgTWF5YmUgc29tZSBvdGhlciBlbnZpcm9ubWVu dHMgbmVlZCB0aGUgc2FtZSB0cmVhdG1lbnQgZm9yIG1hbGxvYy4KLSAgSWYgc28sIGRlZmluZSBT SVpFX1RfTUFMTE9DIGZvciB0aGVtIGhlcmUgb3IgaW4gY29tcGlsZXIgQ0ZMQUdTLgotKi8KLSNp ZmRlZiBTSVpFX1RfTUFMTE9DCi1fUFJPVE9UWVAoIHZvaWQgKiBtYWxsb2MsIChzaXplX3QpICk7 Ci0jZWxzZQotX1BST1RPVFlQKCBjaGFyICogbWFsbG9jLCAodW5zaWduZWQgaW50KSApOwotI2Vu ZGlmIC8qIFNJWkVfVF9NQUxMT0MgKi8KLQotX1BST1RPVFlQKCBjaGFyICogZ2V0ZW52LCAoY2hh ciAqKSApOwotX1BST1RPVFlQKCBsb25nIGF0b2wsIChjaGFyICopICk7Ci0jZW5kaWYgLyogIU1B QyAqLwotI2VuZGlmIC8qIFNVTk9TNDEgKi8KLSNlbmRpZiAvKiBDS19BTlNJTElCUyAqLwotCi0v KgotICA8c3lzL3BhcmFtLmg+IGdlbmVyYWxseSBwaWNrcyB1cCBOVUxMLCBNQVhQQVRITEVOLCBh bmQgTUFYTkFNTEVOCi0gIGFuZCBzZWVtcyB0byBwcmVzZW50IG9uIGFsbCBVbml4ZXMgZ29pbmcg YmFjayBhdCBsZWFzdCB0byBTQ08gWGVuaXgKLSAgd2l0aCB0aGUgZXhjZXB0aW9uKHMpIG5vdGVk LgotKi8KLSNpZm5kZWYgTk9fUEFSQU1fSAkJCS8qIDIwMDEtMTEtMDMgKi8KLSNpZm5kZWYgVU5J WAkJCQkvKiBOb24tVW5peGVzIGRvbid0IGhhdmUgaXQgKi8KLSNkZWZpbmUgTk9fUEFSQU1fSAot I2Vsc2UKLSNpZmRlZiBUUlMxNgkJCQkvKiBUYW5keSBYZW5peCBkb2Vzbid0IGhhdmUgaXQgKi8K LSNkZWZpbmUgTk9fUEFSQU1fSAotI2VuZGlmIC8qIFRSUzE2ICovCi0jZW5kaWYgLyogVU5JWCAq LwotI2VuZGlmIC8qIE5PX1BBUkFNX0ggKi8KLQotI2lmbmRlZiBOT19QQVJBTV9ICi0jaWZuZGVm IElOQ0xfUEFSQU1fSAotI2RlZmluZSBJTkNMX1BBUkFNX0gKLSNlbmRpZiAvKiBJTkNMX1BBUkFN X0ggKi8KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZiAvKiBOT19QQVJBTV9IICovCi0K LSNpZm5kZWYgTlVMTAkJCQkvKiBJbiBjYXNlIE5VTEwgaXMgc3RpbGwgbm90IGRlZmluZWQgKi8K LSNkZWZpbmUgTlVMTCAwTAotLyogb3IgI2RlZmluZSBOVUxMIDAgKi8KLS8qIG9yICNkZWZpbmUg TlVMTCAoKGNoYXIgKikgMCkgKi8KLS8qIG9yICNkZWZpbmUgTlVMTCAoKHZvaWQgKikgMCkgKi8K LSNlbmRpZiAvKiBOVUxMICovCi0KLS8qIE1hY3JvIHRvIGRpZmZlcmVudGlhdGUgIiIgZnJvbSBO VUxMICh0byBhdm9pZCBjb21wYXJpc29ucyB3aXRoIGxpdGVyYWxzKSAqLwotCi0jaWZuZGVmIGlz ZW1wdHlzdHJpbmcKLSNkZWZpbmUgaXNlbXB0eXN0cmluZyhzKSAoKHM/KCpzPzA6MSk6MCkpCi0j ZW5kaWYJLyogaXNlbXB0eXN0cmluZyAqLwotCi0vKiBNYXhpbXVtIGxlbmd0aCBmb3IgYSBmdWxs eSBxdWFsaWZpZWQgZmlsZW5hbWUsIG5vdCBjb3VudGluZyBcMCBhdCBlbmQuICovCi0vKgotICBU aGlzIGlzIGEgcm91Z2ggY3V0LCBhbmQgZXJycyBvbiB0aGUgc2lkZSBvZiBiZWluZyB0b28gYmln LiAgV2UgZG9uJ3QKLSAgd2FudCB0byBwdWxsIGluIGh1bmRyZWRzIG9mIGhlYWRlciBmaWxlcyBs b29raW5nIGZvciBtYW55IGFuZCB2YXJpZWQKLSAgc3ltYm9scywgZm9yIGZlYXIgb2YgaW50cm9k dWNpbmcgdW5uZWNlc3NhcnkgY29uZmxpY3RzLgotKi8KLSNpZm5kZWYgQ0tNQVhQQVRICi0jaWZk ZWYgVk1TCQkJCS8qIFZNUyBtYXkgaGF2ZSBiYWQgKHNtYWxsLCBPRFMyKSAqLwotI2RlZmluZSBD S01BWFBBVEggTkFNWF9DX01BWFJTUwkJLyogUEFUSF9NQVgsIHNvIHVzZSBOQU1YX0NfTUFYUlNT LiAqLwotI2Vsc2UgLyogZGVmIFZNUyAqLwotI2lmZGVmIE1BWFBBVEhMRU4JCQkvKiAoaXQgcHJv YmFibHkgaXNuJ3QpICovCi0jZGVmaW5lIENLTUFYUEFUSCBNQVhQQVRITEVOCi0jZWxzZQotI2lm ZGVmIFBBVEhfTUFYCQkJCS8qIFBPU0lYICovCi0jZGVmaW5lIENLTUFYUEFUSCBQQVRIX01BWAot I2Vsc2UgLyogZGVmIFBBVEhfTUFYICovCi0jaWZkZWYgTUFDCi0jZGVmaW5lIENLTUFYUEFUSCA2 MwotI2Vsc2UgLyogZGVmIE1BQyAqLwotI2lmZGVmIHBkcDExCi0jZGVmaW5lIENLTUFYUEFUSCAy NTUKLSNlbHNlIC8qIGRlZiBwZHAxMSAqLwotI2lmZGVmIFVOSVgJCQkJLyogRXZlbiB0aG91Z2gg c29tZSBhcmUgd2F5IGxlc3MuLi4gKi8KLSNkZWZpbmUgQ0tNQVhQQVRIIDEwMjQKLSNlbHNlIC8q IGRlZiBVTklYICovCi0jaWZkZWYgU1RSQVRVUwotI2RlZmluZSBDS01BWFBBVEggMjU2CQkJLyog PT0gJE1YUEwgZnJvbSBQQVJVLkggKi8KLSNlbHNlIC8qIGRlZiBTVFJBVFVTICovCi0jaWZkZWYg ZGF0YWdlbmVyYWwKLSNkZWZpbmUgQ0tNQVhQQVRIIDI1NgkJCS8qID09ICRNWFBMIGZyb20gUEFS VS5IICovCi0jZWxzZSAvKiBkZWYgZGF0YWdlbmVyYWwgKi8KLSNkZWZpbmUgQ0tNQVhQQVRIIDI1 NQotI2VuZGlmIC8qIGRlZiBTVFJBVFVTIFtlbHNlXSAqLwotI2VuZGlmIC8qIGRlZiBkYXRhZ2Vu ZXJhbCBbZWxzZV0gKi8KLSNlbmRpZiAvKiBkZWYgVU5JWCBbZWxzZV0gKi8KLSNlbmRpZiAvKiBk ZWYgcGRwMTEgW2Vsc2VdICovCi0jZW5kaWYgLyogZGVmIE1BQyBbZWxzZV0gKi8KLSNlbmRpZiAv KiBkZWYgUEFUSF9NQVggW2Vsc2VdICovCi0jZW5kaWYgLyogZGVmIE1BWFBBVEhMRU4gW2Vsc2Vd ICovCi0jZW5kaWYgLyogZGVmIFZNUyBbZWxzZV0gKi8KLSNlbmRpZiAvKiBuZGVmIENLTUFYUEFU SCAqLwotCi0vKiBNYXhpbXVtIGxlbmd0aCBmb3IgdGhlIG5hbWUgb2YgYSB0dHkgZGV2aWNlICov Ci0KLSNpZm5kZWYgREVWTkFNTEVOCi0jZGVmaW5lIERFVk5BTUxFTiBDS01BWFBBVEgKLSNlbmRp ZiAvKiBERVZOQU1MRU4gKi8KLQotLyogRGlyZWN0b3J5IChwYXRoIHNlZ21lbnQpIHNlcGFyYXRv ciAqLwotLyogTm90IGZ1bGx5IGdlbmVyYWwgLSBUcmlja3kgZm9yIFZNUywgQW1pZ2EsIC4uLiAq LwotCi0jaWZuZGVmIERJUlNFUAotI2lmZGVmIFVOSVgKLSNkZWZpbmUgRElSU0VQICcvJwotI2Rl ZmluZSBJU0RJUlNFUChjKSAoKGMpPT0nLycpCi0jZWxzZQotI2lmZGVmIE9TMgotI2RlZmluZSBE SVJTRVAgJy8nCi0jZGVmaW5lIElTRElSU0VQKGMpICgoYyk9PScvJ3x8KGMpPT0nXFwnKQotI2Vs c2UKLSNpZmRlZiBkYXRhZ2VuZXJhbAotI2RlZmluZSBESVJTRVAgJzonCi0jZGVmaW5lIElTRElS U0VQKGMpICgoKGMpPT0nOicpfHwoKGMpPT0nXicpfHwoKGMpPT0nPScpKQotI2Vsc2UKLSNpZmRl ZiBTVFJBVFVTCi0jZGVmaW5lIERJUlNFUCAnPicKLSNkZWZpbmUgSVNESVJTRVAoYykgKChjKT09 Jz4nKQotI2Vsc2UKLSNpZmRlZiBWTVMKLSNkZWZpbmUgRElSU0VQICddJwkJCS8qIChub3QgcmVh bGx5KSAqLwotI2RlZmluZSBJU0RJUlNFUChjKSAoKGMpPT0nXSd8fChjKT09JzonKQotI2Vsc2UK LSNpZmRlZiBNQUMKLSNkZWZpbmUgRElSU0VQICc6JwotI2RlZmluZSBJU0RJUlNFUChjKSAoKGMp PT0nOicpCi0jZWxzZQotI2lmZGVmIEFNSUdBCi0jZGVmaW5lIERJUlNFUCAnLycKLSNkZWZpbmUg SVNESVJTRVAoYykgKChjKT09Jy8nfHwoYyk9PSc6JykKLSNlbHNlCi0jaWZkZWYgR0VNRE9TCi0j ZGVmaW5lIERJUlNFUCAnXFwnCi0jZGVmaW5lIElTRElSU0VQKGMpICgoYyk9PSdcXCd8fChjKT09 JzonKQotI2Vsc2UKLSNkZWZpbmUgRElSU0VQICcvJwotI2RlZmluZSBJU0RJUlNFUChjKSAoKGMp PT0nLycpCi0jZW5kaWYgLyogR0VNRE9TICovCi0jZW5kaWYgLyogQU1JR0EgKi8KLSNlbmRpZiAv KiBNQUMgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBTVFJBVFVTICovCi0jZW5kaWYg LyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBVTklYICovCi0j ZW5kaWYgLyogRElSU0VQICovCi0KLS8qIEZJTEUgcGFja2FnZSBwYXJhbWV0ZXJzICovCi0KLSNp ZmRlZiBwZHAxMQotI2RlZmluZSBOT0NIQU5ORUxJTwotI2Vsc2UKLQotI2lmbmRlZiBDS01BWE9Q RU4KLSNpZmRlZiBRTlgKLSNkZWZpbmUgQ0tNQVhPUEVOIDM5MAotI2Vsc2UKLSNpZmRlZiBWTVMK LSNkZWZpbmUgQ0tNQVhPUEVOIDY0Ci0jZWxzZQotI2lmZGVmIE9QRU5fTUFYCi0jZGVmaW5lIENL TUFYT1BFTiBPUEVOX01BWAotI2Vsc2UKLSNpZmRlZiBGT1BFTl9NQVgKLSNkZWZpbmUgQ0tNQVhP UEVOIEZPUEVOX01BWAotI2Vsc2UKLSNkZWZpbmUgQ0tNQVhPUEVOIDY0Ci0jZW5kaWYgLyogRk9Q RU5fTUFYICovCi0jZW5kaWYgLyogT1BFTl9NQVggKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRp ZiAvKiBRTlggKi8KLSNlbmRpZiAvKiBDS01BWE9QRU4gKi8KLQotLyogTWF4aW11bSBjaGFubmVs cyBmb3IgRk9QRU4gPSBDS01BWE9QRU4gbWludXMgbG9ncywgc3RkaW8sIGV0YyAqLwotCi0jaWZu ZGVmIFpfTUlOQ0hBTgotI2RlZmluZSBaX01JTkNIQU4gMTYKLSNlbmRpZiAvKiBaX01JTkNIQU4g Ki8KLQotI2lmbmRlZiBaX01BWENIQU4KLSNkZWZpbmUgWl9NQVhDSEFOIChDS01BWE9QRU4tWk5G SUxTLTUpCi0jZW5kaWYgLyogWl9NQVhDSEFOICovCi0jZW5kaWYgLyogcGRwMTEgKi8KLQotLyog TmV3LWZvcm1hdCBuemx0b3IoKSBhbmQgbnpydG9sKCkgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHBh dGhuYW1lcyAqLwotCi0jaWZuZGVmIE5aTFRPUgotI2lmZGVmIFVOSVgKLSNkZWZpbmUgTlpMVE9S Ci0jZWxzZQotI2lmZGVmIFZNUwotI2RlZmluZSBOWkxUT1IKLSNlbHNlCi0jaWZkZWYgT1MyCi0j ZGVmaW5lIE5aTFRPUgotI2Vsc2UKLSNpZmRlZiBTVFJBVFVTCi0jZGVmaW5lIE5aTFRPUgotI2Vu ZGlmIC8qIFNUUkFUVVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNl bmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogTlpMVE9SICovCi0KLSNpZmRlZiBOWkxUT1IKLV9Q Uk9UT1RZUCggVk9JRCBuemx0b3IsIChjaGFyICosIGNoYXIgKiwgaW50LCBpbnQsIGludCkgKTsK LV9QUk9UT1RZUCggVk9JRCBuenJ0b2wsIChjaGFyICosIGNoYXIgKiwgaW50LCBpbnQsIGludCkg KTsKLSNlbmRpZiAvKiBOWkxUT1IgKi8KLQotLyogSW1wbGVtZW50YXRpb25zIHdpdGggYSB6cm1k aXIoKSBmdW5jdGlvbiAqLwotCi0jaWZuZGVmIFpSTURJUgotI2lmZGVmIE9TMgotI2RlZmluZSBa Uk1ESVIKLSNlbHNlIC8qIE9TMiAqLwotI2lmZGVmIFVOSVgKLSNkZWZpbmUgWlJNRElSCi0jZWxz ZQotI2lmZGVmIFZNUwotI2RlZmluZSBaUk1ESVIKLSNlbHNlIC8qIFZNUyAqLwotI2lmZGVmIFNU UkFUVVMKLSNkZWZpbmUgWlJNRElSCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotI2VuZGlmIC8qIFZN UyAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBaUk1E SVIgKi8KLQotI2lmZGVmIFpSTURJUgotX1BST1RPVFlQKCBpbnQgenJtZGlyLCAoY2hhciAqKSAp OwotI2VuZGlmIC8qIFpSTURJUiAqLwotCi0jaWZuZGVmIEZJTEVDQVNFCi0jaWZkZWYgVU5JWE9S T1NLCi0jZGVmaW5lIEZJTEVDQVNFIDEKLSNlbHNlCi0jZGVmaW5lIEZJTEVDQVNFIDAKLSNlbmRp ZiAvKiBVTklYT1JPU0sgKi8KLSNpZm5kZWYgQ0tDTUFJCi1leHRlcm4gaW50IGZpbGVjYXNlOwot I2VuZGlmIC8qIENLQ01BSSAqLwotI2VuZGlmIC8qIEZJTEVDQVNFICovCi0KLS8qIEZ1bm55IG5h bWVzIGZvciBsaWJyYXJ5IGZ1bmN0aW9ucyBkZXBhcnRtZW50Li4uICovCi0KLSNpZmRlZiBaSUxP RwotI2RlZmluZSBzZXRqbXAgc2V0cmV0Ci0jZGVmaW5lIGxvbmdqbXAgbG9uZ3JldAotI2RlZmlu ZSBqbXBfYnVmIHJldF9idWYKLSNkZWZpbmUgZ2V0Y3dkIGN1cmRpcgotI2VuZGlmIC8qIFpJTE9H ICovCi0KLSNpZmRlZiBTVFJBVFVTCi0vKiBUaGUgQy1ydW50aW1lIGNvbmZsaWN0cyB3aXRoIHRo aW5ncyB3ZSBkbyBpbiBTdHJhdHVzIFZPUyBja2x0aW8uYyAuLi4gKi8KLSNkZWZpbmUgcHJpbnRm IHZvc3BydGYKLV9QUk9UT1RZUCggaW50IHZvc3BydGYsIChjaGFyICpmbXQsIC4uLikgKTsKLSNk ZWZpbmUgcGVycm9yKHR4dCkgcHJpbnRmKCIlc1xuIiwgdHh0KQotLyogY2hhcl92YXJ5aW5nIGlz IGEgc3RyaW5nIHR5cGUgZnJvbSBQTC9JIHRoYXQgVk9TIHVzZXMgZXh0ZW5zaXZlbHkgKi8KLSNk ZWZpbmUgQ1YgY2hhcl92YXJ5aW5nCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotCi0jaWZkZWYgTlQK LWV4dGVybiBpbnQgT1NWZXI7Ci0jZGVmaW5lIGlzV2luOTUoKSAoT1NWZXI9PVZFUl9QTEFURk9S TV9XSU4zMl9XSU5ET1dTKQotI2Vsc2UKLSNkZWZpbmUgaXNXaW45NSgpICgwKQotI2VuZGlmIC8q IE5UICovCi0KLSNpZm5kZWYgQlBSSU5UCi0jaWZkZWYgT1MyCi0jZGVmaW5lIEJQUklOVAotI2Vu ZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIEJQUklOVCAqLwotCi0jaWZuZGVmIFNFU0xJTUlUCi0j aWZkZWYgT1MyCi0jZGVmaW5lIFNFU0xJTUlUCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyog U0VTTElNSVQgKi8KLQotI2lmbmRlZiBOT1RFUk0KLSNpZm5kZWYgUENURVJNCi0jaWZkZWYgTlQK LSNkZWZpbmUgUENURVJNCi0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBQQ1RFUk0gKi8KLSNl bmRpZiAvKiBOT1RFUk0gKi8KLQotI2lmZGVmIEJFT1NPUkJFQk9YCi0jZGVmaW5lIHF1ZXJ5IGNr cXVlcnkKLSNlbmRpZiAvKiBCRU9TT1JCRUJPWCAqLwotCi0jaWZuZGVmIFBUWU9SUElQRQkJCS8q IE5FVENNRCBhbmQvb3IgTkVUUFRZIGRlZmluZWQgKi8KLSNpZmRlZiBORVRDTUQKLSNkZWZpbmUg UFRZT1JQSVBFCi0jZWxzZQotI2lmZGVmIE5FVFBUWQotI2RlZmluZSBQVFlPUlBJUEUKLSNlbmRp ZiAvKiBORVRQVFkgKi8KLSNlbmRpZiAvKiBORVRDTUQgKi8KLSNlbmRpZiAvKiBQVFlPUlBJUEUg Ki8KLQotLyogbWt0ZW1wKCkgYW5kIG1rc3RlbXAoKSAqLwotCi0jaWZuZGVmIE5PTUtURU1QCi0j aWZuZGVmIE1LVEVNUAotI2lmZGVmIE9TMk9SVU5JWAotI2RlZmluZSBNS1RFTVAKLSNlbmRpZiAv KiBPUzJPUlVOSVggKi8KLSNlbmRpZiAvKiBNS1RFTVAgKi8KLQotI2lmZGVmIE1LVEVNUAotI2lm bmRlZiBOT01LU1RFTVAKLSNpZm5kZWYgTUtTVEVNUAotI2lmZGVmIEJTRDQ0Ci0jZGVmaW5lIE1L U1RFTVAKLSNlbHNlCi0jaWZkZWYgX19saW51eF9fCi0jZGVmaW5lIE1LU1RFTVAKLSNlbmRpZiAv KiBfX2xpbnV4X18gKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2VuZGlmIC8qIE1LU1RFTVAgKi8K LSNlbmRpZiAvKiBOT01LU1RFTVAgKi8KLSNlbmRpZiAvKiBNS1RFTVAgKi8KLSNlbmRpZiAvKiBO T01LVEVNUCAqLwotCi0vKiBQbGF0Zm9ybXMgdGhhdCBoYXZlIG1lbWNweSgpIC0tIG9ubHkgYWZ0 ZXIgYWxsIGhlYWRlcnMgaW5jbHVkZWQgKi8KLQotI2lmbmRlZiBVU0VfTUVNQ1BZCi0jaWZkZWYg Vk1TCi0jZGVmaW5lIFVTRV9NRU1DUFkKLSNlbHNlCi0jaWZkZWYgTkVYVAotI2RlZmluZSBVU0Vf TUVNQ1BZCi0jZWxzZQotI2lmZGVmIE9TMgotI2RlZmluZSBVU0VfTUVNQ1BZCi0jZWxzZQotI2lm ZGVmIF9fbGludXhfXwotI2RlZmluZSBVU0VfTUVNQ1BZCi0jZWxzZQotI2lmZGVmIFNPTEFSSVMK LSNkZWZpbmUgVVNFX01FTUNQWQotI2Vsc2UKLSNpZmRlZiBTVU5PUzQKLSNkZWZpbmUgVVNFX01F TUNQWQotI2Vsc2UKLSNpZmRlZiBBSVhSUwotI2RlZmluZSBVU0VfTUVNQ1BZCi0jZWxzZQotI2lm ZGVmIEhQVVgKLSNkZWZpbmUgVVNFX01FTUNQWQotI2Vsc2UKLSNpZmRlZiBQT1NJWAotI2RlZmlu ZSBVU0VfTUVNQ1BZCi0jZWxzZQotI2lmZGVmIFNWUjQKLSNkZWZpbmUgVVNFX01FTUNQWQotI2Vs c2UKLSNpZmRlZiBPU0YKLSNkZWZpbmUgVVNFX01FTUNQWQotI2Vsc2UKLSNpZmRlZiBkYXRhZ2Vu ZXJhbAotI2RlZmluZSBVU0VfTUVNQ1BZCi0jZWxzZQotI2lmZGVmIFNUUkFUVVMKLSNkZWZpbmUg VVNFX01FTUNQWQotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAq LwotI2VuZGlmIC8qIE9TRiAqLwotI2VuZGlmIC8qIFNWUjQgKi8KLSNlbmRpZiAvKiBQT1NJWCAq LwotI2VuZGlmIC8qIEhQVVggKi8KLSNlbmRpZiAvKiBBSVhSUyAqLwotI2VuZGlmIC8qIFNVTk9T NCAqLwotI2VuZGlmIC8qIFNPTEFSSVMgKi8KLSNlbmRpZiAvKiBfX2xpbnV4X18gKi8KLSNlbmRp ZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBORVhUICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYg LyogVVNFX01FTUNQWSAqLwotCi0jaWZuZGVmIFVTRV9NRU1DUFkKLSNkZWZpbmUgbWVtY3B5KGEs YixjKSBja21lbWNweSgoYSksKGIpLChjKSkKLSNlbHNlCi0jaWZkZWYgQ0tfU0NPMzJWNAotLyog QmVjYXVzZSB0aGUgcHJvdG90eXBlIGlzbid0IHBpY2tlZCB1cCBpbiB0aGUgbm9ybWFsIGhlYWRl ciBmaWxlcyAqLwotX1BST1RPVFlQKCB2b2lkICptZW1jcHksICh2b2lkICosIGNvbnN0IHZvaWQg Kiwgc2l6ZV90KSk7Ci0jZW5kaWYgLyogQ0tfU0NPMzJWNCAqLwotI2VuZGlmIC8qIFVTRV9NRU1D UFkgKi8KLQotLyogVXNlciBhdXRoZW50aWNhdGlvbiBmb3IgSUtTIC0tIFNvIGZhciBLOTUgYW5k IFVOSVggb25seSAqLwotCi0jaWZkZWYgTk9JQ1AKLSNpZm5kZWYgTk9MT0dJTgotI2RlZmluZSBO T0xPR0lOCi0jZW5kaWYgLyogTk9MT0dJTiAqLwotI2VuZGlmIC8qIE5PSUNQICovCi0KLSNpZm5k ZWYgTk9MT0dJTgotI2lmZGVmIE9TMk9SVU5JWAotI2lmbmRlZiBDS19MT0dJTgotI2RlZmluZSBD S19MT0dJTgotI2lmbmRlZiBOT1NIQURPVwotI2lmZGVmIENLX1NDT1Y1Ci0jZGVmaW5lIENLX1NI QURPVwotI2VuZGlmIC8qIENLX1NDT1Y1ICovCi0jZW5kaWYgLyogTk9TSEFET1cgKi8KLSNlbmRp ZiAvKiBDS19MT0dJTiAqLwotI2lmZGVmIE5UCi0jZGVmaW5lIE5UQ1JFQVRFVE9LRU4KLSNlbmRp ZiAvKiBOVCAqLwotI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwotI2Vsc2UgLyogTk9MT0dJTiAqLwot I2lmZGVmIENLX0xPR0lOCi0jdW5kZWYgQ0tfTE9HSU4KLSNlbmRpZiAvKiBDS19MT0dJTiAqLwot I2VuZGlmIC8qIE5PTE9HSU4gKi8KLQotI2lmZGVmIE9TMgotI2RlZmluZSBDS1NQSU5ORVIKLSNl bmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIENLX0xPR0lOCQkJCS8qIFRlbG5ldCBwcm90b2NvbCBy ZXF1aXJlZCAqLwotI2lmbmRlZiBUTkNPREUJCQkJLyogZm9yIGxvZ2luIHRvIElLU0QuICovCi0j ZGVmaW5lIFROQ09ERQotI2VuZGlmIC8qIFROQ09ERSAqLwotI2VuZGlmIC8qIENLX0xPR0lOICov Ci0KLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotI2lmZGVmIE5PU0VORFVJRAotI3VuZGVmIE5P U0VORFVJRAotI2VuZGlmIC8qIE5PU0VORFVJRCAqLwotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FU SU9OICovCi0KLSNpZmRlZiBUTkNPREUJCQkJLyogU2hvdWxkIFRFTE5FVCBzZW5kIHVzZXIgSUQ/ ICovCi0jaWZuZGVmIE5PU0VORFVJRAotI2lmbmRlZiBDS1NFTkRVSUQKLSNkZWZpbmUgQ0tTRU5E VUlECi0jZW5kaWYgLyogQ0tTRU5EVUlEICovCi0jZW5kaWYgLyogTk9TRU5EVUlEICovCi0jZW5k aWYgLyogVE5DT0RFICovCi0KLS8qIFVOSVggcGxhdGZvcm1zIHRoYXQgZG9uJ3QgaGF2ZSBnZXR1 c2Vyc2hlbGwoKSAqLwotCi0jaWZkZWYgVU5JWAotI2lmbmRlZiBOT0dFVFVTRVJTSEVMTAotI2lm ZGVmIElSSVgKLSNkZWZpbmUgTk9HRVRVU0VSU0hFTEwKLSNlbHNlCi0jaWZkZWYgUFRYCi0jZGVm aW5lIE5PR0VUVVNFUlNIRUxMCi0jZWxzZQotI2lmZGVmIEFJWFJTCi0jZGVmaW5lIE5PR0VUVVNF UlNIRUxMCi0jZWxzZQotI2lmZGVmIFNJTklYCi0jZGVmaW5lIE5PR0VUVVNFUlNIRUxMCi0jZWxz ZQotI2lmZGVmIFVOSVhXQVJFCi0jZGVmaW5lIE5PR0VUVVNFUlNIRUxMCi0jZWxzZQotI2lmZGVm IENPSEVSRU5UCi0jZGVmaW5lIE5PR0VUVVNFUlNIRUxMCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8K LSNlbmRpZiAvKiBVTklYV0FSRSAqLwotI2VuZGlmIC8qIFNJTklYICovCi0jZW5kaWYgLyogQUlY UlMgKi8KLSNlbmRpZiAvKiBQVFggKi8KLSNlbmRpZiAvKiBJUklYICovCi0jZW5kaWYgLyogTk9H RVRVU0VSU0hFTEwgKi8KLSNlbmRpZiAvKiBVTklYICovCi0KLSNpZmRlZiBDS19MT0dJTgotI2lm ZGVmIE5UCi0jaWZuZGVmIE5PU1lTTE9HCi0jaWZuZGVmIENLU1lTTE9HCi0jZGVmaW5lIENLU1lT TE9HCi0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSNlbmRpZiAvKiBOT1NZU0xPRyAqLwotI2VuZGlm IC8qIE5UICovCi0jaWZkZWYgVU5JWAotI2lmbmRlZiBOT1NZU0xPRwotI2lmbmRlZiBDS1NZU0xP RwotI2RlZmluZSBDS1NZU0xPRwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0jZW5kaWYgLyogTk9T WVNMT0cgKi8KLSNpZm5kZWYgTk9XVE1QCi0jaWZuZGVmIENLV1RNUAotI2RlZmluZSBDS1dUTVAK LSNlbmRpZiAvKiBDS1dUTVAgKi8KLSNlbmRpZiAvKiBOT1dUTVAgKi8KLSNpZm5kZWYgTk9HRVRV U0VSU0hFTEwKLSNpZm5kZWYgR0VUVVNFUlNIRUxMCi0jZGVmaW5lIEdFVFVTRVJTSEVMTAotI2Vu ZGlmIC8qIEdFVFVTRVJTSEVMTCAqLwotI2VuZGlmIC8qIE5PR0VUVVNFUlNIRUxMICovCi0jZW5k aWYgLyogVU5JWCAqLwotX1BST1RPVFlQKCBpbnQgY2t4bG9naW4sIChDSEFSICosIENIQVIgKiwg Q0hBUiAqLCBpbnQpKTsKLV9QUk9UT1RZUCggaW50IGNreGxvZ291dCwgKFZPSUQpKTsKLSNlbmRp ZiAvKiBDS19MT0dJTiAqLwotCi0jaWZuZGVmIE5PWkxPQ0FMVElNRQkJCS8qIHpsb2NhbHRpbWUo KSBhdmFpbGFibGUuICovCi0jaWZkZWYgT1MyT1JVTklYCi0jZGVmaW5lIFpMT0NBTFRJTUUKLV9Q Uk9UT1RZUCggY2hhciAqIHpsb2NhbHRpbWUsIChjaGFyICopICk7Ci0jZW5kaWYgLyogT1MyT1JV TklYICovCi0jZW5kaWYgLyogTk9aTE9DQUxUSU1FICovCi0KLSNpZmRlZiBDS1NZU0xPRwkJCQkv KiBTeXNsb2dnaW5nIGxldmVscyAqLwotI2RlZmluZSBTWVNMR19OTyAwCQkJLyogTm8gbG9nZ2lu ZyAqLwotI2RlZmluZSBTWVNMR19MSSAxCQkJLyogTG9naW4vb3V0ICovCi0jZGVmaW5lIFNZU0xH X0RJIDIJCQkvKiBEaWFsaW5nIG91dCAqLwotI2RlZmluZSBTWVNMR19BQyAzCQkJLyogTWFraW5n IGFueSBraW5kIG9mIGNvbm5lY3Rpb24gKi8KLSNkZWZpbmUgU1lTTEdfUFIgNCAgICAgICAgICAg ICAgICAgICAgICAvKiBQcm90b2NvbCBPcGVyYXRpb25zICovCi0jZGVmaW5lIFNZU0xHX0ZDIDUJ CQkvKiBGaWxlIGNyZWF0aW9uICovCi0jZGVmaW5lIFNZU0xHX0ZBIDYJCQkvKiBGaWxlIHJlYWRp bmcgKi8KLSNkZWZpbmUgU1lTTEdfQ00gNwkJCS8qIFRvcC1sZXZlbCBjb21tYW5kcyAqLwotI2Rl ZmluZSBTWVNMR19DWCA4CQkJLyogQWxsIGNvbW1hbmRzICovCi0jZGVmaW5lIFNZU0xHX0RCIDkJ CQkvKiBEZWJ1ZyAqLwotI2RlZmluZSBTWVNMR01BWCA5CQkJLyogSGlnaGVzdCBsZXZlbCAqLwot I2RlZmluZSBTWVNMR19ERiBTWVNMR19GQQkJLyogRGVmYXVsdCBsZXZlbCAqLwotLyogTG9nZ2lu ZyBmdW5jdGlvbiAqLwotX1BST1RPVFlQKFZPSUQgY2tzeXNsb2csKGludCwgaW50LCBjaGFyICos IGNoYXIgKiwgY2hhciAqKSk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSNpZm5kZWYgQ0tDTUFJ Ci1leHRlcm4gaW50IGNreGxvZ2dpbmcsIGNreHN5c2xvZywgaWtkYm9wZW47Ci0jZW5kaWYgLyog Q0tDTUFJICovCi0KLSNpZm5kZWYgQ0tfS0VZVEFCCi0jZGVmaW5lIENLX0tFWVRBQgotLyogS2V5 d29yZCBUYWJsZSBUZW1wbGF0ZSAqLwotCi0vKiBOb3RlOiBmb3JtZXJseSBkZWZpbmVkIGluIGNr dWNtZC5oIGJ1dCBub3cgbW9yZSB3aWRlbHkgdXNlZCAqLwotCi1zdHJ1Y3Qga2V5dGFiIHsJCQkJ LyogS2V5d29yZCB0YWJsZSAqLwotICAgIGNoYXIgKmt3ZDsJCQkJLyogUG9pbnRlciB0byBrZXl3 b3JkIHN0cmluZyAqLwotICAgIGludCBrd3ZhbDsJCQkJLyogQXNzb2NpYXRlZCB2YWx1ZSAqLwot ICAgIGludCBmbGdzOwkJCQkvKiBGbGFncyAoYXMgZGVmaW5lZCBhYm92ZSkgKi8KLX07Ci0jZW5k aWYgLyogQ0tfS0VZVEFCICovCi0KLSNpZmRlZiBVTklYCi1fUFJPVE9UWVAoIGludCBpc2FsaW5r LCAoY2hhciAqKSk7Ci0jZW5kaWYJLyogVU5JWCAqLwotCi0jaWZkZWYgTkVUUFRZCi1fUFJPVE9U WVAoIGludCBkb19wdHksIChpbnQgKiwgY2hhciAqLCBpbnQpKTsKLV9QUk9UT1RZUCggVk9JRCBl bmRfcHR5LCAodm9pZCkpOwotI2VuZGlmIC8qIE5FVFBUWSAqLwotCi0jaWZkZWYgQ0tST09UCi1f UFJPVE9UWVAoIGludCB6c2V0cm9vdCwgKGNoYXIgKikgKTsKLV9QUk9UT1RZUCggY2hhciAqIHpn ZXRyb290LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IHppbnJvb3QsIChjaGFyICopICk7Ci0j ZW5kaWYgLyogQ0tST09UICovCi0KLS8qIExvY2FsIEVjaG8gQnVmZmVyIHByb3RvdHlwZXMgKi8K LV9QUk9UT1RZUCggVk9JRCBsZV9pbml0LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggVk9JRCBsZV9j bGVhbiwgKHZvaWQpKTsKLV9QUk9UT1RZUCggaW50IGxlX2luYnVmLCAodm9pZCkpOwotX1BST1RP VFlQKCBpbnQgbGVfcHV0c3RyLCAoQ0hBUiAqKSk7Ci1fUFJPVE9UWVAoIGludCBsZV9wdXRzLCAo Q0hBUiAqLCBpbnQpKTsKLV9QUk9UT1RZUCggaW50IGxlX3B1dGNoYXIsIChDSEFSKSk7Ci1fUFJP VE9UWVAoIGludCBsZV9nZXRjaGFyLCAoQ0hBUiAqKSk7Ci0KLS8qICNpZm5kZWYgTk9IVFRQICov Ci0jaWZuZGVmIE5PQ01EQVRFMlRNCi0jaWZuZGVmIENNREFURTJUTQotI2lmZGVmIE9TMk9SVU5J WAotI2RlZmluZSBDTURBVEUyVE0KLSNlbmRpZiAvKiBPUzJPUlVOSVggKi8KLSNpZmRlZiBWTVMK LSNkZWZpbmUgQ01EQVRFMlRNCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogQ01EQVRFMlRN ICovCi0jZW5kaWYgLyogTk9DTURBVEUyVE0gKi8KLQotI2lmZGVmIENNREFURTJUTQotX1BST1RP VFlQKCBzdHJ1Y3QgdG0gKiBjbWRhdGUydG0sIChjaGFyICosaW50KSk7Ci0jZW5kaWYgLyogQ01E QVRFMlRNICovCi0vKiAjZW5kaWYgKi8gLyogTk9IVFRQICovCi0KLSNpZm5kZWYgTk9TRVRUSU1F CQkJLyogVGhpcyB3b3VsZCBiZSBzZXQgaW4gQ0ZMQUdTICovCi0jaWZkZWYgU1ZSNE9SUE9TSVgJ CQkvKiBEZWZpbmVkIGluIElFRUUgMTAwMy4xLTE5OTYgKi8KLSNpZm5kZWYgVVRJTUVICQkJCS8q IGFuZCBpbiBTVklEIGZvciBTVlI0ICovCi0jZGVmaW5lIFVUSU1FSAotI2VuZGlmIC8qIFVUSU1F SCAqLwotI2Vsc2UgIC8qIFNWUjRPUlBPU0lYICovCi0jaWZkZWYgT1NGCQkJCS8qIFZlcmlmaWVk IGJ5IEx1Y2FzIEhhcnQgKi8KLSNpZm5kZWYgVVRJTUVICi0jZGVmaW5lIFVUSU1FSAotI2VuZGlm IC8qIFVUSU1FSCAqLwotI2Vsc2UgIC8qIE9TRiAqLwotI2lmZGVmIFNVTk9TNDEJCQkJLyogVmVy aWZpZWQgYnkgTHVjYXMgSGFydCAqLwotI2lmbmRlZiBVVElNRUgKLSNkZWZpbmUgVVRJTUVICi0j ZW5kaWYgLyogVVRJTUVIICovCi0jZWxzZSAgLyogU1VOT1M0MSAqLwotI2lmZGVmIE9TMgotI2lm bmRlZiBTWVNVVElNRUgKLSNkZWZpbmUgU1lTVVRJTUVICi0jZW5kaWYgLyogU1lTVVRJTUVIICov Ci0jZWxzZSAvKiBPUzIgKi8KLSNpZmRlZiBWTVMKLSNpZm5kZWYgVVRJTUVICi0jZGVmaW5lIFVU SU1FSAotI2VuZGlmIC8qIFVUSU1FSCAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9T MiAqLwotI2VuZGlmIC8qIFNVTk9TNDEgKi8KLSNlbmRpZiAvKiBPU0YgKi8KLSNlbmRpZiAvKiBT VlI0T1JQT1NJWCAqLwotI2VuZGlmIC8qIE5PU0VUVElNRSAqLwotCi0jaWZkZWYgTkVXRlRQCi1f UFJPVE9UWVAoIGludCBmdHBpc2Nvbm5lY3RlZCwgKHZvaWQpKTsKLV9QUk9UT1RZUCggaW50IGZ0 cGlzbG9nZ2VkaW4sICh2b2lkKSk7Ci1fUFJPVE9UWVAoIGludCBmdHBpc3NlY3VyZSwgKHZvaWQp KTsKLSNlbmRpZiAvKiBORVdGVFAgKi8KLQotX1BST1RPVFlQKCBpbnQgcmVhZHBhc3MsIChjaGFy ICosIGNoYXIgKiwgaW50KSk7Ci1fUFJPVE9UWVAoIGludCByZWFkdGV4dCwgKGNoYXIgKiwgY2hh ciAqLCBpbnQpKTsKLQotI2lmZGVmIE9TMgotX1BST1RPVFlQKGludCBja19hdXRoX2xvYWRkbGws IChWT0lEKSk7Ci1fUFJPVE9UWVAoaW50IGNrX2F1dGhfdW5sb2FkZGxsLCAoVk9JRCkpOwotI2Vu ZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgTlQKLV9QUk9UT1RZUChEV09SRCBja0dldExvbmdQYXRo bmFtZSwoTFBDU1RSIGxwRmlsZU5hbWUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBMUFNUUiBscEJ1ZmZlciwgRFdPUkQgY2NoQnVmZmVyKSk7Ci0jZW5kaWYgLyogTlQgKi8K LQotCi0jaW5jbHVkZSAiY2tjbGliLmgiCi0KLS8qIEVuZCBvZiBja2NkZWIuaCAqLwotI2VuZGlm IC8qIENLQ0RFQl9IICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJt aXQtOS4wLjMwMi9ja2NmbjIuYyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4z MDIvY2tjZm4yLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmYTA1MDcuLjAwMDAw MDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NmbjIuYwor KysgL2Rldi9udWxsCkBAIC0xLDMzNTAgKzAsMCBAQAotLyogIEMgSyBDIEYgTiAyICAtLSAgU3lz dGVtLWluZGVwZW5kZW50IEtlcm1pdCBwcm90b2NvbCBzdXBwb3J0IGZ1bmN0aW9ucy4uLiAqLwot Ci0vKiAgLi4uUGFydCAyIChjb250aW51ZWQgZnJvbSBja2NmbnMuYykgICovCi0KLS8qCi0gIEF1 dGhvcjogRnJhbmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4sCi0gIENvbHVtYmlhIFVuaXZl cnNpdHkgQWNhZGVtaWMgSW5mb3JtYXRpb24gU3lzdGVtcywgTmV3IFlvcmsgQ2l0eS4KLQotICBD b3B5cmlnaHQgKEMpIDE5ODUsIDIwMTEsCi0gICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVy c2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KLSAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAg U2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQotICAgIGNvcHlyaWdodCB0 ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25z LgotKi8KLS8qCi0gTm90ZSAtLSBpZiB5b3UgY2hhbmdlIHRoaXMgZmlsZSwgcGxlYXNlIGFtZW5k IHRoZSB2ZXJzaW9uIG51bWJlciBhbmQgZGF0ZSBhdAotIHRoZSB0b3Agb2YgY2tjZm5zLmMgYWNj b3JkaW5nbHkuCi0qLwotCi0jaW5jbHVkZSAiY2tjc3ltLmgiCQkJLyogQ29tcGlsYXRpb24gb3B0 aW9ucyAqLwotI2luY2x1ZGUgImNrY2RlYi5oIgkJCS8qIERlYnVnZ2luZyBhbmQgb3RoZXIgc3lt Ym9scyAqLwotI2luY2x1ZGUgImNrY2FzYy5oIgkJCS8qIEFTQ0lJIHN5bWJvbHMgKi8KLSNpbmNs dWRlICJja2NrZXIuaCIJCQkvKiBLZXJtaXQgc3ltYm9scyAqLwotI2luY2x1ZGUgImNrY3hsYS5o IgkJCS8qIFRyYW5zbGF0aW9uICovCi0jaW5jbHVkZSAiY2tjbmV0LmgiCQkJLyogSUtTIGFuZCBW TVMgI2RlZmluZSBUQ1BTT0NLRVQgKi8KLSNpZmRlZiBUQ1BTT0NLRVQJCQkvKiBGb3IgVEVMTkVU IGJ1c2luZXNzIGluIHNwYWNrKCkgKi8KLWV4dGVybiBpbnQgdG5fbmxtLCB0dG5wcm90bywgdG5f Yl9ubG07Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0KLWV4dGVybiBpbnQgcGFyaXR5LCBuZXR3 b3JrLCBsb2NhbCwgaW50ZXJydXB0ZWQsIGZhdGFsaW8sIHdhc2Nsb3NlZDsKLQotaW50IGtzdGFy dGFjdGl2ZSA9IDA7CQkJLyogRmxhZyBmb3Iga3N0YXJ0KCkgaW4gYSBwYWNrZXQgKi8KLQotc3Rh dGljIENIQVIgcF90YmxbXSA9IHsJCQkvKiBFdmVuIHBhcml0eSB0YWJsZSBmb3IgZG9wYXIoKS4g Ki8KLSAgICAoQ0hBUikgJ1wwMDAnLAkJCS8qIEFOU0kgQyBjYXN0cyAnXG9vbycgY29uc3RhbnRz ICAqLwotICAgIChDSEFSKSAnXDIwMScsCQkJLyogdG8gc2lnbmVkIGNoYXIsIHNvIHdlIGhhdmUg dG8gICovCi0gICAgKENIQVIpICdcMjAyJywJCQkvKiBjYXN0IGJhY2sgdG8gdW5zaWduZWQgY2hh ci4uLiAgKi8KLSAgICAoQ0hBUikgJ1wwMDMnLAotICAgIChDSEFSKSAnXDIwNCcsCi0gICAgKENI QVIpICdcMDA1JywKLSAgICAoQ0hBUikgJ1wwMDYnLAotICAgIChDSEFSKSAnXDIwNycsCi0gICAg KENIQVIpICdcMjEwJywKLSAgICAoQ0hBUikgJ1wwMTEnLAotICAgIChDSEFSKSAnXDAxMicsCi0g ICAgKENIQVIpICdcMjEzJywKLSAgICAoQ0hBUikgJ1wwMTQnLAotICAgIChDSEFSKSAnXDIxNScs Ci0gICAgKENIQVIpICdcMjE2JywKLSAgICAoQ0hBUikgJ1wwMTcnLAotICAgIChDSEFSKSAnXDIy MCcsCi0gICAgKENIQVIpICdcMDIxJywKLSAgICAoQ0hBUikgJ1wwMjInLAotICAgIChDSEFSKSAn XDIyMycsCi0gICAgKENIQVIpICdcMDI0JywKLSAgICAoQ0hBUikgJ1wyMjUnLAotICAgIChDSEFS KSAnXDIyNicsCi0gICAgKENIQVIpICdcMDI3JywKLSAgICAoQ0hBUikgJ1wwMzAnLAotICAgIChD SEFSKSAnXDIzMScsCi0gICAgKENIQVIpICdcMjMyJywKLSAgICAoQ0hBUikgJ1wwMzMnLAotICAg IChDSEFSKSAnXDIzNCcsCi0gICAgKENIQVIpICdcMDM1JywKLSAgICAoQ0hBUikgJ1wwMzYnLAot ICAgIChDSEFSKSAnXDIzNycsCi0gICAgKENIQVIpICdcMjQwJywKLSAgICAoQ0hBUikgJ1wwNDEn LAotICAgIChDSEFSKSAnXDA0MicsCi0gICAgKENIQVIpICdcMjQzJywKLSAgICAoQ0hBUikgJ1ww NDQnLAotICAgIChDSEFSKSAnXDI0NScsCi0gICAgKENIQVIpICdcMjQ2JywKLSAgICAoQ0hBUikg J1wwNDcnLAotICAgIChDSEFSKSAnXDA1MCcsCi0gICAgKENIQVIpICdcMjUxJywKLSAgICAoQ0hB UikgJ1wyNTInLAotICAgIChDSEFSKSAnXDA1MycsCi0gICAgKENIQVIpICdcMjU0JywKLSAgICAo Q0hBUikgJ1wwNTUnLAotICAgIChDSEFSKSAnXDA1NicsCi0gICAgKENIQVIpICdcMjU3JywKLSAg ICAoQ0hBUikgJ1wwNjAnLAotICAgIChDSEFSKSAnXDI2MScsCi0gICAgKENIQVIpICdcMjYyJywK LSAgICAoQ0hBUikgJ1wwNjMnLAotICAgIChDSEFSKSAnXDI2NCcsCi0gICAgKENIQVIpICdcMDY1 JywKLSAgICAoQ0hBUikgJ1wwNjYnLAotICAgIChDSEFSKSAnXDI2NycsCi0gICAgKENIQVIpICdc MjcwJywKLSAgICAoQ0hBUikgJ1wwNzEnLAotICAgIChDSEFSKSAnXDA3MicsCi0gICAgKENIQVIp ICdcMjczJywKLSAgICAoQ0hBUikgJ1wwNzQnLAotICAgIChDSEFSKSAnXDI3NScsCi0gICAgKENI QVIpICdcMjc2JywKLSAgICAoQ0hBUikgJ1wwNzcnLAotICAgIChDSEFSKSAnXDMwMCcsCi0gICAg KENIQVIpICdcMTAxJywKLSAgICAoQ0hBUikgJ1wxMDInLAotICAgIChDSEFSKSAnXDMwMycsCi0g ICAgKENIQVIpICdcMTA0JywKLSAgICAoQ0hBUikgJ1wzMDUnLAotICAgIChDSEFSKSAnXDMwNics Ci0gICAgKENIQVIpICdcMTA3JywKLSAgICAoQ0hBUikgJ1wxMTAnLAotICAgIChDSEFSKSAnXDMx MScsCi0gICAgKENIQVIpICdcMzEyJywKLSAgICAoQ0hBUikgJ1wxMTMnLAotICAgIChDSEFSKSAn XDMxNCcsCi0gICAgKENIQVIpICdcMTE1JywKLSAgICAoQ0hBUikgJ1wxMTYnLAotICAgIChDSEFS KSAnXDMxNycsCi0gICAgKENIQVIpICdcMTIwJywKLSAgICAoQ0hBUikgJ1wzMjEnLAotICAgIChD SEFSKSAnXDMyMicsCi0gICAgKENIQVIpICdcMTIzJywKLSAgICAoQ0hBUikgJ1wzMjQnLAotICAg IChDSEFSKSAnXDEyNScsCi0gICAgKENIQVIpICdcMTI2JywKLSAgICAoQ0hBUikgJ1wzMjcnLAot ICAgIChDSEFSKSAnXDMzMCcsCi0gICAgKENIQVIpICdcMTMxJywKLSAgICAoQ0hBUikgJ1wxMzIn LAotICAgIChDSEFSKSAnXDMzMycsCi0gICAgKENIQVIpICdcMTM0JywKLSAgICAoQ0hBUikgJ1wz MzUnLAotICAgIChDSEFSKSAnXDMzNicsCi0gICAgKENIQVIpICdcMTM3JywKLSAgICAoQ0hBUikg J1wxNDAnLAotICAgIChDSEFSKSAnXDM0MScsCi0gICAgKENIQVIpICdcMzQyJywKLSAgICAoQ0hB UikgJ1wxNDMnLAotICAgIChDSEFSKSAnXDM0NCcsCi0gICAgKENIQVIpICdcMTQ1JywKLSAgICAo Q0hBUikgJ1wxNDYnLAotICAgIChDSEFSKSAnXDM0NycsCi0gICAgKENIQVIpICdcMzUwJywKLSAg ICAoQ0hBUikgJ1wxNTEnLAotICAgIChDSEFSKSAnXDE1MicsCi0gICAgKENIQVIpICdcMzUzJywK LSAgICAoQ0hBUikgJ1wxNTQnLAotICAgIChDSEFSKSAnXDM1NScsCi0gICAgKENIQVIpICdcMzU2 JywKLSAgICAoQ0hBUikgJ1wxNTcnLAotICAgIChDSEFSKSAnXDM2MCcsCi0gICAgKENIQVIpICdc MTYxJywKLSAgICAoQ0hBUikgJ1wxNjInLAotICAgIChDSEFSKSAnXDM2MycsCi0gICAgKENIQVIp ICdcMTY0JywKLSAgICAoQ0hBUikgJ1wzNjUnLAotICAgIChDSEFSKSAnXDM2NicsCi0gICAgKENI QVIpICdcMTY3JywKLSAgICAoQ0hBUikgJ1wxNzAnLAotICAgIChDSEFSKSAnXDM3MScsCi0gICAg KENIQVIpICdcMzcyJywKLSAgICAoQ0hBUikgJ1wxNzMnLAotICAgIChDSEFSKSAnXDM3NCcsCi0g ICAgKENIQVIpICdcMTc1JywKLSAgICAoQ0hBUikgJ1wxNzYnLAotICAgIChDSEFSKSAnXDM3NycK LX07Ci0KLS8qICBEIE8gUCBBIFIgIC0tICBBZGQgYW4gYXBwcm9wcmlhdGUgcGFyaXR5IGJpdCB0 byBhIGNoYXJhY3RlciAgKi8KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi1kb3BhcihyZWdpc3Rl ciBDSEFSIGNoKQotI2Vsc2UKLWRvcGFyKGNoKSByZWdpc3RlciBDSEFSIGNoOwotI2VuZGlmIC8q IENLX0FOU0lDICovCi0gICAgewotICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBhOwotICAgIGlm ICghcGFyaXR5Ci0jaWZkZWYgVENQU09DS0VUCi0gICAgICAgIHx8IChuZXR3b3JrICYmICh0dG5w cm90byA9PSBOUF9URUxORVQpICYmIChURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkpKQotI2lmbmRl ZiBOT1hGRVIKLQl8fCAoIWxvY2FsICYmIHNzdGVsbmV0KQkJLyogVEVMTkVUIEJJTkFSWSBNT0RF ICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0gICAgICAg ICkgcmV0dXJuKChDSEFSKSAoY2ggJiAyNTUpKTsgZWxzZSBhID0gY2ggJiAxMjc7Ci0gICAgc3dp dGNoIChwYXJpdHkpIHsKLQljYXNlICdlJzogIHJldHVybihwX3RibFthXSk7CSAgICAgICAgICAg ICAvKiBFdmVuICovCi0JY2FzZSAnbSc6ICByZXR1cm4oKENIQVIpIChhIHwgMTI4KSk7ICAgICAg ICAgLyogTWFyayAqLwotCWNhc2UgJ28nOiAgcmV0dXJuKChDSEFSKSAocF90YmxbYV0gXiAxMjgp KTsgIC8qIE9kZCAqLwotCWNhc2UgJ3MnOiAgcmV0dXJuKChDSEFSKSBhKTsJICAgICAgICAgICAg IC8qIFNwYWNlICovCi0JZGVmYXVsdDogICByZXR1cm4oKENIQVIpIGEpOyAgICAgICAgICAgICAg ICAgLyogU29tZXRoaW5nIGlsbGVnYWwgKi8KLSAgICB9Ci19Ci0KLSNpZm5kZWYgTk9YRkVSCQkJ CS8qIFJlc3Qgb2YgdGhpcyBmaWxlLi4uICovCi0KLSNkZWZpbmUgTkVXRFBMCQkJCS8qIE5ldyBk eW5hbWljIHBhY2tldCBsZW5ndGggbWV0aG9kICovCi0KLSNpZmRlZiBWTVMKLWV4dGVybiBpbnQg YmF0Y2g7Ci0jZWxzZQotZXh0ZXJuIGludCBiYWNrZ3JkOwotI2VuZGlmIC8qIFZNUyAqLwotCi0j aWZkZWYgRFlOQU1JQwotZXh0ZXJuIHN0cnVjdCBwa3RpbmZvICpzX3BrdDsJCS8qIGFycmF5IG9m IHBrdGluZm8gc3RydWN0dXJlcyAqLwotZXh0ZXJuIHN0cnVjdCBwa3RpbmZvICpyX3BrdDsJCS8q IGFycmF5IG9mIHBrdGluZm8gc3RydWN0dXJlcyAqLwotI2Vsc2UKLWV4dGVybiBzdHJ1Y3QgcGt0 aW5mbyBzX3BrdFtdOwkJLyogYXJyYXkgb2YgcGt0aW5mbyBzdHJ1Y3R1cmVzICovCi1leHRlcm4g c3RydWN0IHBrdGluZm8gcl9wa3RbXTsJCS8qIGFycmF5IG9mIHBrdGluZm8gc3RydWN0dXJlcyAq LwotI2VuZGlmIC8qIERZTkFNSUMgKi8KLQotZXh0ZXJuIGludCBzc2VxdGJsW10sIHJzZXF0Ymxb XSwgc2J1ZnVzZVtdLCBzYWNrdGJsW10sIHdzbG90cywgd2lubG8sIHdzbG90biwKLSAgc2J1Zm51 bSwgcmJ1Zm51bSwgcGt0cGF1cywgcmVsaWFibGU7Ci0KLSNpZmRlZiBTVFJFQU1JTkcKLXN0YXRp YyBpbnQgZG9udHNlbmQgPSAwOwotZXh0ZXJuIGludCBzdHJlYW1pbmc7Ci0jZW5kaWYgLyogU1RS RUFNSU5HICovCi0KLWV4dGVybiBpbnQgdHRwcnR5OwkJCS8qIGZyb20gY2sqdGlvLmMgKi8KLWV4 dGVybiBpbnQgYXV0b3BhcjsKLQotZXh0ZXJuIGludCBzcHNpeiwgc3BtYXgsIHJwc2l6LCB0aW1p bnQsIHRpbWVmLCBucGFkLCBiZXN0bGVuLCBtYXhzZW5kOwotZXh0ZXJuIGludCBycHQsIHJwdHEs IHJwdGZsZywgY2FwYXMsIHNwc2l6ZiwgZW5fZmluLCB0c2VjcywgZmxvdzsKLWV4dGVybiBpbnQg cGt0bnVtLCBzbmR0eXAsIHJjdnR5cCwgYmN0ciwgYmN0dSwgYmN0ZiwgYmN0bCwgcnNuLCBybG4s IG1heHRyeTsKLWV4dGVybiBpbnQgc2l6ZSwgb3NpemUsIG1heHNpemUsIHNwa3RsLCBycGt0bCwg bmZpbHMsIHN0ZG91ZiwgZnNlY3M7Ci1leHRlcm4gaW50IHR1cm4sIHR1cm5jaCwgZGlzcGxhLCBw a3Rsb2csIHNlc2xvZywgeGZsZywgbXlwYWRuOwotZXh0ZXJuIGludCBoY2ZsZywgc2VydmVyLCBj eHNlZW4sIGN6c2VlbiwgZGlzY2FyZCwgc2xvc3RhcnQ7Ci1leHRlcm4gaW50IG5ha3N0YXRlLCBx dWlldCwgc3VjY2VzcywgeGl0c3RhLCB3aGF0LCBmaWxlc3RhdHVzOwotZXh0ZXJuIGludCBzcGFj a2V0cywgcnBhY2tldHMsIHRpbWVvdXRzLCByZXRyYW5zLCBjcnVuY2hlZCwgdXJwc2l6OwotZXh0 ZXJuIGludCBjYXJyaWVyLCBmZGlzcGxhLCBzcnZpZGw7Ci0KLSNpZmRlZiBHRlRJTUVSCi1leHRl cm4gQ0tGTE9BVCBmcHRzZWNzLCBmcGZzZWNzLCBmcHhmc2VjczsKLSNlbmRpZiAvKiBHRlRJTUVS ICovCi0KLWV4dGVybiBsb25nIGZpbGNudCwgZmlscmVqLCBzcGVlZCwgZmlsY3BzLCB0ZmNwczsK LWV4dGVybiBDS19PRkZfVCBmZmMsIGZsY2ksIGZsY28sIHRsY2ksIHRsY28sIHRmYzsKLQotZXh0 ZXJuIGNoYXIgKmNtYXJnLCBmaWxuYW1bXTsKLQotZXh0ZXJuIENIQVIgcGFkY2gsIG15cGFkYywg ZW9sLCBzZW9sLCBjdGxxLCBzc3RhdGU7Ci1leHRlcm4gQ0hBUiAqcmVjcGt0LCAqZGF0YSwgbXlp bml0W107Ci1leHRlcm4gQ0hBUiAqc3J2cHRyLCBzdGNociwgbXlzdGNoLCAqcmRhdGFwOwotZXh0 ZXJuIENIQVIgcGFkYnVmW107Ci1leHRlcm4gQ0hBUiAqIGVwa3Rtc2c7Ci1leHRlcm4gaW50IGVw a3RyY3ZkLCBlcGt0c2VudDsKLQotI2lmZGVmIE9TMgkJCQkvKiBBVVRPRE9XTkxPQUQgcGFyYW1l dGVycyAqLwotZXh0ZXJuIGludCBhZGxfa21vZGUsIGFkbF96bW9kZTsJLyogTWF0Y2ggUGFja2V0 IHRvIHNpZ25hbCBkb3dubG9hZCAqLwotZXh0ZXJuIGNoYXIgKiBhZGxfa3N0cjsJCQkvKiBLRVJN SVQgRG93bmxvYWQgU3RyaW5nICovCi1leHRlcm4gY2hhciAqIGFkbF96c3RyOwkJCS8qIFpNT0RF TSBEb3dubG9hZCBTdHJpbmcgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIENLX0FVVE9E TAotQ0hBUiBrc2J1Zls5Nl0gPSB7IE5VTCwgTlVMIH07CQkvKiBBdXRvZG93bmxvYWQgIktlcm1p dCBTdGFydCIgYnVmICovCi0jZW5kaWYgLyogQ0tfQVVUT0RMICovCi0KLWludCBudW1lcnJzID0g MDsJCQkvKiBOdW1iZXIgb2YgcGFja2V0IGVycm9ycyBzbyBmYXIgKi8KLWludCByY3Z0aW1vID0g MDsJCQkvKiBUaW1lb3V0IGZvciByZWNlaXZpbmcgYSBwYWNrZXQgKi8KLWludCBpZGxldG1vID0g MDsJCQkvKiBGbGFnIGZvciBpZGxlIHRpbWVvdXQgKi8KLQotbG9uZyBmaWxjcHMgPSAwTDsJCQkv KiBDUFMgbW9zdCByZWNlbnQgZmlsZSB0cmFuc2ZlcnJlZCAqLwotbG9uZyB0ZmNwcyAgPSAwTDsJ CQkvKiBDUFMgbW9zdCByZWNlbnQgdHJhbnNhY3Rpb24gKi8KLWxvbmcgeGZzZWNzID0gMEw7CQkJ LyogRWxhcHNlZCB0aW1lIGZvciBtb3N0IHJlY2VudCBmaWxlICovCi0jaWZkZWYgR0ZUSU1FUgot Q0tGTE9BVCBmcHhmc2VjcyA9IDAuMDsJCQkvKiBEaXR0bywgYnV0IGZsb2F0aW5nIHBvaW50ICov Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotCi0jaWZkZWYgQ0tfVElNRVJTCi1pbnQgcnJ0dGJsWzY0 XSwgc3J0dGJsWzY0XTsJCS8qIFBhY2tldCB0aW1lc3RhbXAgdGFibGVzICovCi1leHRlcm4gaW50 IHJ0dGZsZzsKLSNkZWZpbmUgUlRUX1NDQUxFIDEwMDAKLWxvbmcKLSAgcnR0c2FtcGxlcywJCQkJ LyogUm91bmQgdHJpcCB0aW1lIHNhbXBsZXMgKi8KLSAgcnR0ZGVsYXksCQkJCS8qIFJUVCBkZWxh eSAqLwotICBwa3RpbnR2bCwJCQkJLyogSW50ZXJwYWNrZXQgYXJyaXZhbCB0aW1lICovCi0gIHJ0 dHZhcmlhbmNlLAkJCQkvKiBSVFQgdmFyaWFuY2UgKi8KLSAgcnR0c3RkZGV2OwkJCQkvKiBSVFQg c3RhbmRhcmQgZGV2aWF0aW9uICovCi0jZW5kaWYgLyogQ0tfVElNRVJTICovCi0KLS8qIENSQyBn ZW5lcmF0aW9uIHRhYmxlcyAqLwotCi1sb25nIGNyY3RhWzE2XSA9IHsgMEwsIDAxMDIwMUwsIDAy MDQwMkwsIDAzMDYwM0wsIDA0MTAwNEwsCi0gIDA1MTIwNUwsIDA2MTQwNkwsIDA3MTYwN0wsIDAx MDIwMTBMLCAwMTEyMjExTCwgMDEyMjQxMkwsIDAxMzI2MTNMLCAwMTQzMDE0TCwKLSAgMDE1MzIx NUwsIDAxNjM0MTZMLCAwMTczNjE3TAotfTsKLQotbG9uZyBjcmN0YlsxNl0gPSB7IDBMLCAwMTA2 MTFMLCAwMjE0MjJMLCAwMzEyMzNMLCAwNDMwNDRMLAotICAwNTM2NTVMLCAwNjI0NjZMLCAwNzIy NzdMLCAwMTA2MTEwTCwgMDExNjcwMUwsIDAxMjc1MzJMLCAwMTM3MzIzTCwgMDE0NTE1NEwsCi0g IDAxNTU3NDVMLCAwMTY0NTc2TCwgMDE3NDM2N0wKLX07Ci0KLSNpZmRlZiBDS19USU1FUlMKLS8q Ci0gIFJvdW5kLXRyaXAgdGltZXIgY2FsY3VsYXRpb25zIGFkYXB0ZWQgZnJvbSBUaW0gS2llbnR6 bGUncyBhcnRpY2xlLAotICAiSW1wcm92aW5nIEtlcm1pdCBQZXJmb3JtYW5jZSIsIERyIERvYmIn cyBKb3VybmFsLCBGZWJydWFyeSAxOTk2LgotKi8KLQotCi0vKiAgUiBUIFQgSSBOIEkgVCAgLS0g IEluaXRpYWxpemUgdGltZXJzIGF0IHN0YXJ0IG9mIHRyYW5zYWN0aW9uICAqLwotCi1WT0lECi1y dHRpbml0KCkgewkJCQkvKiBJbml0aWFsaXplIHJvdW5kLXRyaXAgdGltaW5nICovCi0gICAgaW50 IGk7Ci0KLSAgICBpZiAodGltaW50ID09IDApCi0gICAgICByZXR1cm47Ci0KLSAgICBydHRzYW1w bGVzICA9IDBMOwkJCS8qIFNhbXBsZXMgKHBhY2tldHMpICovCi0gICAgcnR0dmFyaWFuY2UgPSAw TDsJCQkvKiBWYXJpYW5jZSBpbiBkZWxheSAqLwotICAgIHJ0dGRlbGF5ICAgID0gKGxvbmcpIHRp bWludCAqIFJUVF9TQ0FMRTsgLyogRGVsYXkgKi8KLSAgICBwa3RpbnR2bCAgICA9IChsb25nKSB0 aW1pbnQgKiBSVFRfU0NBTEU7IC8qIERlbGF5ICovCi0gICAgcnR0c3RkZGV2ICAgPSAobG9uZykg dGltaW50ICogUlRUX1NDQUxFOyAvKiBTdGFuZGFyZCBkZXZpYXRpb24gb2YgZGVsYXkgKi8KLQot ICAgIC8qIFRhYmxlcyBvZiB0aW1lc3RhbXBzIGluZGV4ZWQgYnkgcGFja2V0IHNlcXVlbmNlIG51 bWJlciAqLwotCi0gICAgZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsKLQlycnR0YmxbaV0gPSAt MTsJCQkvKiBUaW1lIGVhY2ggcGFja2V0IHdhcyByZWNlaXZlZCAqLwotCXNydHRibFtpXSA9IC0x OwkJCS8qIFRpbWUgZWFjaCBwYWNrZXQgd2FzIHNlbnQgKi8KLSAgICB9Ci0gICAgcmN2dGltbyA9 IHRpbWludDsJCQkvKiBJbml0aWFsIHRpbWVvdXQgaXMgd2hhdCB1c2VyIHNhaWQgKi8KLX0KLQot LyogIEcgRSBUIFIgVCBUICAtLSAgR2V0IHBhY2tldCByb3VuZCB0cmlwIHRpbWUgICovCi0vKgot ICBDYWxsIHdpdGggbmFrc3RhdGUgPT0gMCBpZiBmaWxlIHNlbmRlciwgbm9uemVybyBpZiByZWNl aXZlciwKLSAgYW5kIG4gPT0gcGFja2V0IHNlcXVlbmNlIG51bWJlciBvZiB0aGUgcGFja2V0IHdl IGp1c3QgcmVjZWl2ZWQuCi0KLSAgUmV0dXJuczoKLSAgLTEgb24gZmFpbHVyZSB3aXRoIHJjdnRp bW8gc2V0IHRvIHRpbWludCAod2hhdCB0aGUgdXNlciBzYWlkKSwgb3I6Ci0gICAwIG9uIHN1Y2Nl c3Mgd2l0aCByY3Z0aW1vIHNldCB0byBkeW5hbWljYWxseSBjYWxjdWxhdGVkIHZhbHVlOgotICAg ICAxIDw9IHJjdnRpbW8gPD0gdGltaW50ICogMy4KLSovCi1pbnQKLWdldHJ0dChuYWtzdGF0ZSwg bikgaW50IG5ha3N0YXRlLCBuOyB7Ci0gICAgZXh0ZXJuIGludCBtaW50aW1lLCBtYXh0aW1lOwot ICAgIHN0YXRpYyBpbnQgcHJldnogPSAwLCBwcmV2ciA9IDA7Ci0gICAgaW50IHgsIHksIHl5LCB6 ID0gMCwgenogPSAwOwkvKiBIb3cgbG9uZyBkaWQgaXQgdGFrZSB0byBnZXQgaGVyZT8gKi8KLQot ICAgIHJjdnRpbW8gPSB0aW1pbnQ7CQkJLyogRGVmYXVsdCB0aW1lb3V0IGlzIHdoYXQgdXNlciBz YWlkICovCi0KLSAgICBpZiAodGltaW50ID09IDApCQkJLyogV2UncmUgbm90IHRpbWluZyBvdXQu ICovCi0gICAgICByZXR1cm4oMCk7Ci0KLSAgICBpZiAoIXJ0dGZsZykJCQkvKiBOb3Qgc3VwcG9z ZWQgdG8gYmUgZG9pbmcgdGhpcz8gKi8KLSAgICAgIHJldHVybigtMSk7CQkJLyogIFNvIGRvbid0 ICovCi0KLSAgICBpZiAoIVJUVF9TQ0FMRSkJCQkvKiBQYXJhbm9pYS4uLiAqLwotICAgICAgcmV0 dXJuKC0xKTsKLQotICAgIC8qIHJ0aW1lcigpIChyZXNldCB0aW1lcikgaXMgbm90IGNhbGxlZCB1 bnRpbCAxc3QgZGF0YSBwYWNrZXQgKi8KLSNpZmRlZiBHRlRJTUVSCi0gICAgLyogcmZ0aW1lcigp OyAqLwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLSAgICAvKiBTIChGIFsgQSBdIEQqIFopKiBCICov Ci0KLSAgICAvKiBOT1RFOiB3ZSBjYWxjdWxhdGUgYm90aCB0aGUgcm91bmQtdHJpcCB0aW1lIEFO RCB0aGUgcGFja2V0ICovCi0gICAgLyogYXJyaXZhbCByYXRlLiAgV2UgZG9uJ3QgdXNlIHRoZSBS VFQgZm9yIGFueXRoaW5nLCB3ZSBqdXN0IGRpc3BsYXkgaXQuICovCi0gICAgLyogVGltZW91dHMg YXJlIGJhc2VkIG9uIHRoZSBwYWNrZXQgYXJyaXZhbCByYXRlLiAqLwotCi0gICAgaWYgKHNwYWNr ZXRzID4gMykgewkJCS8qIERvbid0IHN0YXJ0IHRpbGwgNHRoIHBhY2tldCAqLwotCWlmIChuYWtz dGF0ZSkgewkJCS8qIEZpbGUgcmVjZWl2ZXIgKi8KLQkgICAgeCA9IHJydHRibFtuXTsJCSAgICAg LyogVGltZSB3aGVuIEkgZ290IHBhY2tldCBuICovCi0JICAgIHkgPSBycnR0YmxbbiA+IDAgPyBu IC0gMSA6IDYzXTsgIC8qIFRpbWUgd2hlbiBJIGdvdCBwYWNrZXQgbi0xICovCi0JICAgIHl5ID0g c3J0dGJsW24gPiAwID8gbiAtIDEgOiA2M107IC8qIFRpbWUgd2hlbiBJIHNlbnQgQUNLKG4tMSkg Ki8KLQkgICAgaWYgKHggPiAtMSAmJiB5ID4gLTEpIHsJLyogQmUgY2FyZWZ1bCAqLwotCQl6ID0g eCAtIHk7CQkvKiBQYWNrZXQgcmF0ZSAqLwotCQl6eiA9IHggLSB5eTsJCS8qIFJvdW5kIHRyaXAg dGltZSAqLwotCQl6Kys7CQkJLyogU28gc2VuZGVyICYgcmVjZWl2ZXIgZGlmZmVyICovCi0JCWRl YnVnKEYxMDEsIlJUVCBSRUNWIiwiIix6KTsKLQkgICAgfSBlbHNlIHsJCQkvKiBUaGlzIHNob3Vs ZG4ndCBoYXBwZW4gKi8KLQkJZGVidWcoRjEwMSwiUlRUIFJFQ1YgRVJST1Igc3BhY2tldHMiLCIi LHNwYWNrZXRzKTsKLQkJZGVidWcoRjEwMSwiUlRUIFJFQ1YgRVJST1Igc2VxdWVuY2UiLCIiLG4p OwotCQlyZXR1cm4oLTEpOwotCSAgICB9Ci0JfSBlbHNlIHsJCQkvKiBGaWxlIHNlbmRlciAqLwot CSAgICB4ID0gcnJ0dGJsW25dOwkJLyogVGltZSB3aGVuIEkgZ290IEFDSyhuKSAqLwotCSAgICB5 ID0gcnJ0dGJsW24gPiAwID8gbiAtIDEgOiA2M107IC8qIFRpbWUgd2hlbiBJIGdvdCBwYWNrZXQg bi0xICovCi0JICAgIHl5ID0gc3J0dGJsW25dOwkJLyogVGltZSB3aGVuIEkgc2VudCBuICovCi0J ICAgIGlmICh4ID4gLTEgJiYgeSA+IC0xKSB7Ci0JCXogPSB4IC0geTsJCS8qIFBhY2tldCByYXRl ICovCi0JCXp6ID0geCAtIHl5OwkJLyogUm91bmQgdHJpcCB0aW1lICovCi0JCWRlYnVnKEYxMDEs IlJUVCBTRU5EIiwiIix6KTsKLQkgICAgfSBlbHNlIHsKLQkJZGVidWcoRjEwMCwiUlRUIFNFTkQg RVJST1IiLCIiLDApOwotCQlyZXR1cm4oLTEpOwotCSAgICB9Ci0JfQotCWlmICh6IDwgMSkJCQkv KiBGb3IgZmFzdCBjb25uZWN0aW9ucyAqLwotCSAgeiA9IFJUVF9TQ0FMRSAvIDI7CQkvKiBDb252 ZXJ0IHRvIHNjYWxlLi4uICovCi0JZWxzZQotCSAgeiAqPSBSVFRfU0NBTEU7Ci0JZGVidWcoRjEw MSwiUlRUIHogc2NhbGVkIiwiIix6KTsKLQotCWlmICh6eiA8IDEpCQkJLyogRm9yIGZhc3QgY29u bmVjdGlvbnMgKi8KLQkgIHp6ID0gUlRUX1NDQUxFIC8gMjsJCS8qIENvbnZlcnQgdG8gc2NhbGUu Li4gKi8KLQllbHNlCi0JICB6eiAqPSBSVFRfU0NBTEU7Ci0KLQlydHRkZWxheSA9IHp6OwkJCS8q IFJvdW5kIHRyaXAgdGltZSBvZiB0aGlzIHBhY2tldCAqLwotI2lmZGVmIENPTU1FTlQKLS8qCi0g IFRoaXMgd2FzIHVzZWQgaW4gQy1LZXJtaXQgNy4wIChhbmQgNi4wPykgYnV0IG5vdCBvbmx5IGlz IGl0IG92ZXJraWxsLAotICBpdCBhbHNvIGNhbiBwcm9kdWNlIHJpZGljdWxvdXNseSBsb25nIHRp bWVvdXRzIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4KLSAgUmVwbGFjZWQgaW4gOC4wIGJ5IGEg ZmFyIHNpbXBsZXIgYW5kIG1vcmUgYWdncmVzc2l2ZSBzdHJhdGVneS4KLSovCi0JaWYgKHJ0dHNh bXBsZXMrKyA9PSAwTCkgewkvKiBGaXJzdCBzYW1wbGUgKi8KLQkgICAgcGt0aW50dmwgPSB6Owot CX0gZWxzZSB7CQkJLyogU3Vic2VxdWVudCBzYW1wbGVzICovCi0JICAgIGxvbmcgb2xkYXZnID0g cGt0aW50dmw7Ci0JICAgIGxvbmcgcnR0ZGlmZnNxOwotCi0JICAgIGlmIChydHRzYW1wbGVzID4g MzApCS8qIFVzZSByZWFsIGF2ZXJhZ2UgZm9yIGZpcnN0IDMwICovCi0JICAgICAgcnR0c2FtcGxl cyA9IDMwOwkJLyogIHRoZW4gZGVjYXlpbmcgYXZlcmFnZS4gKi8KLQotCSAgICAvKiBBdmVyYWdl IGRlbGF5LCBkaWZmZXJlbmNlIHNxdWFyZWQsIHZhcmlhbmNlLCBzdGQgZGV2aWF0aW9uICovCi0K LQkgICAgcGt0aW50dmwgKz0gKHogLSBwa3RpbnR2bCkgLyBydHRzYW1wbGVzOwotCSAgICBydHRk aWZmc3EgPSAoeiAtIG9sZGF2ZykgKiAoeiAtIG9sZGF2Zyk7Ci0JICAgIHJ0dHZhcmlhbmNlICs9 IChydHRkaWZmc3EgLSBydHR2YXJpYW5jZSkgLyBydHRzYW1wbGVzOwotCSAgICBkZWJ1ZyhGMTAx LCJSVFQgc3RkZGV2MSIsIiIscnR0c3RkZGV2KTsKLQkgICAgaWYgKHJ0dHN0ZGRldiA8IDFMKQkJ LyogSXQgY2FuIGJlIHplcm8sIGluIHdoaWNoIGNhc2UgKi8KLQkgICAgICBydHRzdGRkZXYgPSBS VFRfU0NBTEUgLyAzOyAvKiBzZXQgaXQgdG8gc29tZXRoaW5nIHNtYWxsLi4uICovCi0JICAgIHJ0 dHN0ZGRldiA9IChydHRzdGRkZXYgKyBydHR2YXJpYW5jZSAvIHJ0dHN0ZGRldikgLyAyOwotCX0K LQlkZWJ1ZyhGMTAxLCJSVFQgc3RkZGV2MiIsIiIscnR0c3RkZGV2KTsKLQlkZWJ1ZyhGMTAxLCJS VFQgZGVsYXkgICIsIiIscGt0aW50dmwpOwotCXJjdnRpbW8gPSAocGt0aW50dmwgKyAoM0wgKiBy dHRzdGRkZXYpKSAvIFJUVF9TQ0FMRSArIDE7Ci0JaWYgKHJwYWNrZXRzIDwgMzIpCQkvKiBBbGxv dyBmb3Igc2xvdyBzdGFydCAqLwotCSAgcmN2dGltbyArPSByY3Z0aW1vICsgMjsKLQllbHNlIGlm IChycGFja2V0cyA8IDY0KQotCSAgcmN2dGltbyArPSByY3Z0aW1vIC8gMiArIDE7Ci0gICAgICAg IC8qIE9uIGEgcmVsaWFibGUgbGluaywgZG9uJ3QgdHJ5IHRvbyBoYXJkIHRvIHRpbWUgb3V0LiAq LwotCS8qIEVzcGVjaWFsbHkgb24gZmFzdCBsb2NhbCBuZXR3b3JrIGNvbm5lY3Rpb25zLiAqLwot ICAgICAgICBpZiAoc2VydmVyICYmIHdoYXQgPT0gV19OT1RISU5HKSAvKiBTZXJ2ZXIgY29tbWFu ZCB3YWl0ICovCi0JICByY3Z0aW1vID0gcmN2dGltbzsJCS8qID09IHNydnRpbSAqLwotICAgICAg ICBlbHNlIGlmIChyZWxpYWJsZSA9PSBTRVRfT04gJiYgcmN2dGltbyA+IDApIC8qIFJlbGlhYmxl ICovCi0JICByY3Z0aW1vID0gcmN2dGltbyArMTU7CS8qIGFuZCBub3Qgc2VydmVyIGNvbW1hbmQg d2FpdCAqLwotICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBy ZWxpYWJsZSBvciBzZXJ2ZXIgY21kIHdhaXQgKi8KLQkgIHJjdnRpbW8gPSByY3Z0aW1vOwotCWlm IChyY3Z0aW1vIDwgbWludGltZSkJCS8qIExvd2VyIGJvdW5kICovCi0JICByY3Z0aW1vID0gbWlu dGltZTsKLQlpZiAobWF4dGltZSA+IDApIHsJCS8qIFVzZXIgc3BlY2lmaWVkIGFuIHVwcGVyIGJv dW5kICovCi0JICAgIGlmIChyY3Z0aW1vID4gbWF4dGltZSkKLQkgICAgICByY3Z0aW1vID0gbWF4 dGltZTsKLQl9IGVsc2UgaWYgKG1heHRpbWUgPT0gMCkgewkvKiBVc2VyIGRpZG4ndCBzcGVjaWZ5 ICovCi0JICAgIGlmIChyY3Z0aW1vID4gdGltaW50ICogNikKLQkgICAgICByY3Z0aW1vID0gdGlt aW50ICogNjsKLQl9Ci0jZWxzZSAgLyogQ09NTUVOVCAqLwotI2lmZGVmIENLRkxPQVQKLQl7Ci0J ICAgIENLRkxPQVQgeDsKLQkgICAgeCA9IChDS0ZMT0FUKShwcmV2eiArIHogKyB6KSAvIDMuMDsK LQkgICAgcmN2dGltbyA9IChpbnQpKCgoKENLRkxPQVQpeCAqIDIuNjYpIC8gUlRUX1NDQUxFKSAr IDAuNSk7Ci0JICAgIGRlYnVnKEYxMDEsIlJUVCByY3Z0aW1vIChmbG9hdCkiLCIiLHJjdnRpbW8p OwotCX0KLSNlbHNlCi0JcmN2dGltbyA9IChwcmV2eiArIHogKyB6KSAvIFJUVF9TQ0FMRTsKLQlk ZWJ1ZyhGMTAxLCJSVFQgcmN2dGltbyAoaW50KSIsIiIscmN2dGltbyk7Ci0jZW5kaWYgLyogQ0tG TE9BVCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotCXp6ID0gKHJ0dGRlbGF5ICsgNTAwKSAv IDEwMDA7Ci0JaWYgKHJjdnRpbW8gPiAoenogKiAzKSkKLQkgIHJjdnRpbW8gPSB6eiAqIDM7Ci0K LQlpZiAocmN2dGltbyA8IDEpCi0JICByY3Z0aW1vID0gMTsKLQlpZiAobWludGltZSA+IDApIHsK LQkgICAgaWYgKHJjdnRpbW8gPCBtaW50aW1lKQkvKiBMb3dlciBib3VuZCAqLwotCSAgICAgIHJj dnRpbW8gPSBtaW50aW1lOwotCX0KLQlpZiAobWF4dGltZSA+IDApIHsJCS8qIFVwcGVyIGJvdW5k ICovCi0JICAgIGlmIChyY3Z0aW1vID4gbWF4dGltZSkKLQkgICAgICByY3Z0aW1vID0gbWF4dGlt ZTsKLQl9Ci0JaWYgKHJjdnRpbW8gPT0gKHByZXZyIC0gMSkpCi0JICByY3Z0aW1vKys7Ci0KLQlk ZWJ1ZyhGMTAxLCJSVFQgZmluYWwgcmN2dGltbyIsIiIscmN2dGltbyk7Ci0gICAgfQotICAgIHBy ZXZ6ID0gejsKLSAgICBwcmV2ciA9IHJjdnRpbW87Ci0gICAgcmV0dXJuKDApOwotfQotI2VuZGlm IC8qIENLX1RJTUVSUyAqLwotCi0vKiAgSSBOIFAgVSBUICAtLSAgQXR0ZW1wdCB0byByZWFkIHBh Y2tldCBudW1iZXIgJ3BrdG51bScuICAqLwotCi0vKgotIFRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRo YXQgZmVlZHMgaW5wdXQgdG8gS2VybWl0J3MgZmluaXRlIHN0YXRlIG1hY2hpbmUsCi0gaW4gdGhl IGZvcm0gb2YgYSBjaGFyYWN0ZXIgaW4gdGhlIHJhbmdlIDMyLTEyNiwgbm9ybWFsbHkgYSBwYWNr ZXQgdHlwZQotICh1cHBlcmNhc2UgbGV0dGVyKSBvciBwc2V1ZG8tcGFja2V0LXR5cGUgKGxvd2Vy Y2FzZSBsZXR0ZXIpLgotCi0gSWYgYSBzcGVjaWFsIHN0YXJ0IHN0YXRlIGlzIGluIGVmZmVjdCwg dGhhdCBzdGF0ZSBpcyByZXR1cm5lZCBhcyBpZiBpdCB3ZXJlCi0gdGhlIHR5cGUgb2YgYW4gaW5j b21pbmcgcGFja2V0LgotKi8KLWludAotaW5wdXQoKSB7Ci0gICAgaW50IHR5cGUgPSAwLCBhY2t0 eXBlOwkJLyogUmVjZWl2ZWQgcGFja2V0IHR5cGUgKi8KLSAgICBpbnQgeCwgeSwgazsJCQkvKiBX b3JrZXJzICovCi0gICAgaW50IHosIHBpLCBuZjsJCQkvKiBXb3JrZXIsIHBhY2tldCBpbmRleCwg TkFLIGZsYWcgKi8KLSAgICBpbnQgbmFrMmFjayA9IDA7Ci0KLSAgICBkZWJ1ZyhGMDAwLCJpbnB1 dCBzc3RhdGUiLCIiLHNzdGF0ZSk7Ci0gICAgZGVidWcoRjEwMSwiaW5wdXQgbmFrc3RhdGUiLCIi LG5ha3N0YXRlKTsKLSAgICBkZWJ1ZyhGMDAwLCJpbnB1dCBzbmR0eXAiLCIiLHNuZHR5cCk7Ci0g ICAgZGVidWcoRjEwMSwiaW5wdXQgeGl0c3RhIiwiIix4aXRzdGEpOwotICAgIGRlYnVnKEYxMDEs ImlucHV0IHdoYXQiLCIiLHdoYXQpOwotCi0gICAgd2hpbGUgKDEpIHsJCQkJLyogQmlnIGxvb3Au Li4gKi8KLS8qCi0gIEl0IGlzIHR0Y2hrKCkncyByZXNwb25zaWJpbGl0eSB0byB0ZWxsIHVzIGlm IHRoZSBjb25uZWN0aW9uIGlzIGJyb2tlbiwKLSAgYW5kIHRvIGRvIHNvIGluc3RhbnRseSBhbmQg bm9uZGVzdHJ1Y3RpdmVseSAtLSBubyBibG9ja2luZywgZXRjLCB0aGF0IHdvdWxkCi0gIHNsb3cg ZG93biBmaWxlIHRyYW5zZmVyLgotKi8KLQlpZiAodHRjaGsoKSA8IDApIHsKLQkgICAgZGVidWco RjEwMCwiaW5wdXQgQ09OTkVDVElPTiBCUk9LRU4iLCIiLDApOwotCSAgICBmYXRhbGlvID0gMTsK LQkgICAgcmV0dXJuKCdxJyk7Ci0JfQotCWlmIChzc3RhdGUgIT0gMCkgewkJLyogSWYgYSBzdGFy dCBzdGF0ZSBpcyBpbiBlZmZlY3QsICovCi0JICAgIHR5cGUgPSBzc3RhdGU7CQkvKiByZXR1cm4g aXQgbGlrZSBhIHBhY2tldCB0eXBlLCAqLwotCSAgICBzc3RhdGUgPSAwOwkJCS8qIGFuZCB0aGVu IG51bGxpZnkgaXQuICovCi0JICAgIG51bWVycnMgPSAwOwkJLyogKFBXUCkgbm8gZXJyb3JzIHNv IGZhciAqLwotCSAgICByZXR1cm4odHlwZSk7Ci0JfQotCWlmIChuYWtzdGF0ZSkgewkJCS8qIFRo aXMgc2VjdGlvbiBmb3IgZmlsZSByZWNlaXZlci4gKi8KLQkgICAgaWYgKHdzbG90cyA+IDEpIHsJ CS8qIElmIHdlJ3JlIGRvaW5nIHdpbmRvd3MsICovCi0JCXggPSByc2VxdGJsW3dpbmxvXTsJLyog c2VlIGlmIGRlc2lyZWQgcGFja2V0IGFscmVhZHkgaW4uICovCi0JCWRlYnVnKEYxMDEsImlucHV0 IHdpbmxvIiwiIix3aW5sbyk7Ci0JCWRlYnVnKEYxMDEsImlucHV0IHJzZXF0Ymxbd2lubG9dIiwi Iixyc2VxdGJsW3dpbmxvXSk7Ci0JCWlmICh4ID4gLTEpIHsJCS8qIEFscmVhZHkgdGhlcmU/ICov Ci0JCSAgICBpZiAocl9wa3RbeF0ucGtfc2VxID09IHdpbmxvKSB7IC8qIChkb3VibGUgY2hlY2sp ICovCi0JCQlyc24gPSB3aW5sbzsJICAgICAgICAgICAgLyogWWVzLCByZXR1cm4gaXRzIGluZm8g Ki8KLQkJCWRlYnVnKEYxMDEsImlucHV0IHJldHVybiBwcmUtc3Rhc2hlZCBwYWNrZXQiLCIiLHJz bik7Ci0JCQlkdW1wcmJ1ZigpOwotCQkJcmRhdGFwID0gcl9wa3RbeF0ucGtfYWRyOyAgIC8qIGxp a2UgcnBhY2sgd291bGQgZG8uICovCi0JCQlybG4gPSAoaW50KXN0cmxlbigoY2hhciAqKSByZGF0 YXApOwotCQkJdHlwZSA9IHJfcGt0W3hdLnBrX3R5cDsKLQkJCWJyZWFrOwotCQkgICAgfQotCQl9 Ci0JICAgIH0KLQkgICAgdHlwZSA9IHJwYWNrKCk7CSAgICAgICAgLyogVHJ5IHRvIHJlYWQgYSBw YWNrZXQuICovCi0JICAgIGRlYnVnKEYxMDEsImlucHV0IHJwYWNrIiwiIix0eXBlKTsKLQotCSAg ICB3aGlsZSAodHlwZSA9PSAnZScpIHsJLyogSGFuZGxlIGVjaG9lcyAqLwotCQlkZWJ1ZyhGMTAx LCJpbnB1dCBlY2hvIGRpc2NhcmRlZCIsIiIsdHlwZSk7Ci0JCXR5cGUgPSBycGFjaygpOwotCSAg ICB9Ci0jaWZkZWYgREVCVUcKLQkgICAgaWYgKGRlYmxvZykgewotCQlpZiAodHlwZSA9PSAnRCcp Ci0JCSAgZGVidWcoRjAxMSwiaW5wdXQgdHlwZSBEPSIsKGNoYXIgKilyZGF0YXAsMzkpOwotCQll bHNlCi0JCSAgZGVidWcoRjAwMCwiaW5wdXQgdHlwZSIsKGNoYXIgKilyZGF0YXAsdHlwZSk7Ci0J ICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotI2lmbmRlZiBPTERDSEtJTlQKLQkgICAgaWYgKHR5 cGUgPT0gJ3onKSB7Ci0JCWVwa3RyY3ZkID0gMTsKLQkJZXJycGt0KChDSEFSICopIlVzZXIgY2Fu Y2VsbGVkLiIpOwotCQl0eXBlID0gJ0UnOwotCQlicmVhazsKLQkgICAgfQotI2VuZGlmIC8qIE9M RENIS0lOVCAqLwotCSAgICBpZiAodHlwZSA8IC0xKSB7Ci0JCWNoYXIgKiBzOwotCQlzID0gKHR5 cGUgPT0gLTIpID8KLQkJICAiRkFJTEVEIC0gSW50ZXJydXB0ZWQiIDoKLQkJICAgICJGQUlMRUQg LSBDb25uZWN0aW9uIGxvc3QiOwotCi0JCXh4c2NyZWVuKFNDUl9QVCwncScsMEwscyk7Ci0JCWRv bG9nZW5kKCk7Ci0JCXJldHVybigncScpOwkJLyogQ3RybC1DIG9yIGNvbm5lY3Rpb24gbG9zdCAq LwotCSAgICB9Ci0JICAgIGlmICh0eXBlIDwgMCkgewkJLyogUmVjZWl2ZSB3aW5kb3cgZnVsbCAq LwotCQkvKiBBbm90aGVyIHRoaW5nIHRvIGRvIGhlcmUgd291bGQgYmUgdG8gZGVsZXRlICovCi0J CS8qIHRoZSBoaWdoZXN0IHBhY2tldCBhbmQgTkFLIHdpbmxvLiAgQnV0IHRoYXQgKi8KLQkJLyog c2hvdWxkbid0IGJlIG5lY2Vzc2FyeSBzaW5jZSB0aGUgb3RoZXIgS2VybWl0ICovCi0JCS8qIHNo b3VsZCBub3QgaGF2ZSBzZW50IGEgcGFja2V0IG91dHNpZGUgdGhlIHdpbmRvdy4gKi8KLSNpZmRl ZiBDT01NRU5UCi0gICAgICAgICAgICAgICAgY2hhciBmb29bMjU2XTsKLSAgICAgICAgICAgICAg ICBja21ha3htc2coZm9vLDI1NiwiUmVjZWl2ZSB3aW5kb3cgZnVsbCAocnBhY2spOiB3c2xvdHM9 IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2tpdG9hKHdzbG90cyksIiB3aW5sbz0iLGNr aXRvYSh3aW5sbyksIiBwa3RudW09IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2tpdG9h KHBrdG51bSksIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLQkJZXJycGt0KChDSEFS ICopZm9vKTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLGZvbywiIiwwKTsKLSNlbHNlCi0J CWVycnBrdCgoQ0hBUiAqKSJSZWNlaXZlIHdpbmRvdyBmdWxsIik7Ci0JCWRlYnVnKEYxMDEsInJw YWNrIHJlY2VpdmUgd2luZG93IGZ1bGwiLCIiLDApOwotICAgICAgICAgICAgICAgIGRlYnVnKEYx MDEsIiB3c2xvdHMiLCIiLHdzbG90cyk7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiIHdp bmxvIiwiIix3aW5sbyk7Ci0JCWRlYnVnKEYxMDEsIiBwa3RudW0iLCIiLHBrdG51bSk7Ci0jZW5k aWYKLQkJZHVtcHJidWYoKTsKLQkJdHlwZSA9ICdFJzsKLQkJYnJlYWs7Ci0JICAgIH0KLQkgICAg ZHVtcHJidWYoKTsKLQotI2lmZGVmIE9MRENIS0lOVAotCSAgICBpZiAoY2hraW50KCkgPCAwKSB7 CQkvKiBDaGVjayBmb3IgY29uc29sZSBpbnRlcnJ1cHRzLiAqLwotCQllcnJwa3QoKENIQVIgKiki VXNlciBjYW5jZWxsZWQuIik7IC8qIChvbGQgd2F5KSAqLwotCQl0eXBlID0gJ0UnOwotCQlicmVh azsKLQkgICAgfQotI2VuZGlmIC8qIE9MRENIS0lOVCAqLwotCi0jaWZkZWYgU1RSRUFNSU5HCi0J ICAgIGlmIChzdHJlYW1pbmcpIHsJCS8qIFN0cmVhbWluZyAqLwotCQlpZiAodHlwZSA9PSAnUScg fHwgdHlwZSA9PSAnVCcpIHsgLyogRXJyb3JzIGFyZSBmYXRhbC4gKi8KLQkJICAgIGNydW5jaGVk Kys7CQkvKiBGb3Igc3RhdGlzdGljcyAqLwotCQkgICAgZXJycGt0KChDSEFSICopIlRyYW5zbWlz c2lvbiBlcnJvciBvbiByZWxpYWJsZSBsaW5rLiIpOwotCQkgICAgdHlwZSA9ICdFJzsKLQkJfQot CSAgICB9Ci0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0JICAgIGlmICh0eXBlID09ICdFJykgewot CQlkZWJ1ZyhGMTAxLCJpbnB1dCBnb3QgRSwgbmFrc3RhdGUiLCIiLG5ha3N0YXRlKTsKLQkJYnJl YWs7CQkJLyogRXJyb3IgcGFja2V0ICovCi0JICAgIH0KLQkgICAgaWYgKHR5cGUgPT0gJ1EnKSB7 CQkvKiBDcnVuY2hlZCBwYWNrZXQuICovCi0JCWNydW5jaGVkKys7Ci0JCW51bWVycnMrKzsKLS8q Ci0gIFBhY2tldCBhcnJpdmVkIGRhbWFnZWQuICBJdCB3YXMgbW9zdCBsaWtlbHkgdGhlIHBhY2tl dCB3ZSB3ZXJlIGV4cGVjdGluZwotICBuZXh0LCBzbyB3ZSBzZW5kIGEgTkFLIGZvciB0aGF0IHBh Y2tldC4gIFByaW9yIHRvIDVBKDE4OSksIHdlIGFsd2F5cwotICBOQUsnZCB3aW5sbyBoZXJlLCBi dXQgdGhhdCB3YXMgYmFkIGJlY2F1c2UgaWYgdHdvIChvciBtb3JlKSBkaWZmZXJlbnQKLSAgcGFj a2V0cyB3ZXJlIGRhbWFnZWQsIHdlIHdvdWxkIGtlZXAgTkFLaW5nIHRoZSBmaXJzdCBvbmUgYW5k IG5ldmVyIE5BSyB0aGUKLSAgb3RoZXIgb25lcywgd2hpY2ggY291bGQgcmVzdWx0IGluIGEgbGVu Z3RoeSBzZXJpZXMgb2YgdGltZW91dHMuICBOb3cgd2UKLSAgTkFLIHRoZSBvbGRlc3QgYXMteWV0 LXVuTkFLJ2QgbWlzc2luZyBwYWNrZXQuCi0qLwotI2lmZGVmIENLX1RJTUVSUwotCQlyY3Z0aW1v Kys7CQkvKiBTdHJldGNoIHRoZSB0aW1lb3V0IGEgbGl0dGxlICovCi0jZW5kaWYgLyogQ0tfVElN RVJTICovCi0JCXogPSAod2lubG8gKyB3c2xvdHMpICUgNjQ7ICAvKiBTZWFyY2ggZnJvbSB3aW5s byB0byB6ICovCi0JCWRlYnVnKEYxMDEsIlpaWiBjcnVuY2hlZCB6IiwiIix6KTsKLQkJbmYgPSAw OwkJCSAgICAvKiBOQUsgZmxhZyBub3Qgc2V0IHlldCAqLwotCQlmb3IgKHggPSB3aW5sbzsgeCAh PSB6OyB4ID0gKHggKyAxKSAlIDY0KSB7Ci0JCSAgICBkZWJ1ZyhGMTAxLCJaWlogeCIsIiIseCk7 Ci0JCSAgICBpZiAocnNlcXRibFt4XSA+IC0xKSAvKiBIYXZlIEkgcmVjZWl2ZWQgcGFja2V0IHg/ ICovCi0JCSAgICAgIGNvbnRpbnVlOwkJIC8qIFllcywgZ28gb24uICovCi0JCSAgICBkZWJ1ZyhG MTAxLCJaWlogeCBub3QgcmVjZCB5ZXQiLCIiLHgpOwotCQkgICAgcGkgPSBzc2VxdGJsW3hdOwkg LyogTm8sIGhhdmUgSSBOQUsnZCBpdCB5ZXQ/ICovCi0JCSAgICBpZiAocGkgPCAwIHx8IHNfcGt0 W3BpXS5wa19ydHIgPT0gMCkgewotCQkJZGVidWcoRjEwMSwiWlpaIHggbm90IE5BSydkIHlldCIs IiIseCk7Ci0JCQluYWNrKHgpOwkgLyogTm8sIE5BSyBpdCBub3cuICovCi0JCQluZiA9IDE7CQkg LyogRmxhZyB0aGF0IEkgZGlkLiAqLwotCQkJYnJlYWs7Ci0JCSAgICB9Ci0JCX0KLQkJaWYgKCFu ZikgewkJLyogSWYgd2UgZGlkbid0IE5BSyBhbnl0aGluZyBhYm92ZSwgKi8KLQkJICAgIGRlYnVn KEYxMDEsIlpaWiBOQUtpbmcgd2lubG8iLCIiLHdpbmxvKTsKLQkJICAgIGlmIChuYWNrKHdpbmxv KSA8IDApIHsgLyogd2UgaGF2ZSB0byBOQUsgd2lubG8gKGFnYWluKSAqLwotCQkJZXJycGt0KChD SEFSICopIlRvbyBtYW55IHJldHJpZXMuIik7IC8qIFRvbyBtYW55ICovCi0JCQl0eXBlID0gJ0Un OwotCQkJYnJlYWs7Ci0JCSAgICB9Ci0JCX0KLQkJY29udGludWU7Ci0JICAgIH0KLQotCSAgICBp ZiAodHlwZSA9PSAnVCcpIHsJCS8qIFRpbWVvdXQgKi8KLSNpZm5kZWYgT1MyCi0JCS8qIEs5NSBk b2VzIHRoaXMgaXRzIG93biB3YXkgKi8KLQkJaWYgKHNlcnZlciAmJiBzcnZpZGwpIHsKLQkJICAg IGlkbGV0bW8gPSAxOwotCQkgICAgZGVidWcoRjEwMSwiU0VSVkVSIElETEUgVElNRU9VVCIsIiIs c3J2aWRsKTsKLQkJICAgIHJldHVybigncScpOwotCQl9Ci0jZW5kaWYgLyogT1MyICovCi0jaWZk ZWYgQ0tfVElNRVJTCi0JCXJjdnRpbW8rKzsJCS8qIFN0cmV0Y2ggdGhlIHRpbWVvdXQgYSBsaXR0 bGUgKi8KLSNlbmRpZiAvKiBDS19USU1FUlMgKi8KLQkJdGltZW91dHMrKzsKLQkJZGVidWcoRjEw MSwiaW5wdXQgcmVjZWl2ZS1zdGF0ZSB0aW1lb3V0LCB3aW5sbyIsIiIsd2lubG8pOwotCQkvKiBO QUsgb25seSB0aGUgcGFja2V0IGF0IHdpbmRvdy1sb3cgKi8KLQkJZGVidWcoRjEwMSwiaW5wdXQg c2VuZGluZyBOQUsgZm9yIHdpbmxvIiwiIix3aW5sbyk7Ci0JCXggPSB0dGNoaygpOwotCQlpZiAo eCA+IDApCQkvKiBEb24ndCBnaXZlIHVwIGlmIHRoZXJlIGlzIHN0aWxsICovCi0JCSAgY29udGlu dWU7CQkvKiBzb21ldGhpbmcgdG8gcmVhZC4gKi8KLQkJZWxzZSBpZiAoeCA8IDApIHsKLQkJICAg IGRvbG9nZW5kKCk7Ci0JCSAgICBmYXRhbGlvID0gMTsKLQkJICAgIHJldHVybigncScpOwkvKiBD b25uZWN0aW9uIExvc3QgKi8KLQkJfQotCQlpZiAobmFjayh3aW5sbykgPCAwKSB7Ci0JCSAgICBk ZWJ1ZyhGMTAxLCJpbnB1dCBzZW50IHRvbyBtYW55IG5ha3MiLCIiLHdpbmxvKTsKLQkJICAgIGVy cnBrdCgoQ0hBUiAqKSJUb28gbWFueSByZXRyaWVzLiIpOwotCQkgICAgdHlwZSA9ICdFJzsKLQkJ ICAgIGJyZWFrOwotCQl9IGVsc2UgY29udGludWU7Ci0JICAgIH0KLQkgICAgaWYgKHJzbiA9PSB3 aW5sbykgewkJLyogR290IHRoZSBwYWNrZXQgd2Ugd2FudCwgZG9uZS4gKi8KLSNpZmRlZiBDS19U SU1FUlMKLQkJaWYgKHJ0dGZsZyAmJiB0aW1pbnQpCS8qIER5bmFtaWMgcm91bmQgdHJpcCB0aW1l cnM/ICovCi0JCSAgZ2V0cnR0KG5ha3N0YXRlLCByc24pOyAvKiB5ZXMsIGRvIGl0LiAqLwotICAg ICAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAvKiBKSEQgMjAxMDAyMDggKi8K LSAgICAgICAgICAgICAgICAgIHJjdnRpbW8gPSB0aW1pbnQ7ICAgICAgLyogSkhEIDIwMTAwMjA4 ICovCi0jZW5kaWYgLyogQ0tfVElNRVJTICovCi0JCWRlYnVnKEYxMDEsImlucHV0IHJzbj13aW5s byIsIiIscnNuKTsKLQkJYnJlYWs7Ci0JICAgIH0KLQotCSAgICAvKiBHb3QgYSBwYWNrZXQgb3V0 IG9mIG9yZGVyLiAqLwotCi0JICAgIGRlYnVnKEYxMDEsImlucHV0IG91dCBvZiBzZXF1ZW5jZSwg cnNuIiwiIixyc24pOwotCSAgICBrID0gcnNlcXRibFtyc25dOwkJLyogR2V0IHdpbmRvdyBzbG90 IG9mIHRoaXMgcGFja2V0LiAqLwotCSAgICBkZWJ1ZyhGMTAxLCJpbnB1dCByc2VxdGJsW3Jzbl0i LCIiLGspOwotCSAgICBpZiAoayA8IDApIHsKLQkJZGVidWcoRjEwMSwiaW5wdXQgcmVjdiBjYW4n dCBmaW5kIGluZGV4IGZvciByY3ZkIHBrdCIsIiIscnNuKTsKLQkJLyogV2FzICJJbnRlcm5hbCBl cnJvciAyMSIgKi8KLQkJLyogVGhpcyBzaG91bGQgbm90IGhhcHBlbiAgKi8KLQkJZXJycGt0KChD SEFSICopIlNsaWRpbmcgd2luZG93cyBwcm90b2NvbCBlcnJvci4iKTsKLQkJdHlwZSA9ICdFJzsK LQkJYnJlYWs7Ci0JICAgIH0KLQkgICAgeSA9IGNoa3dpbihyc24sd2lubG8sd3Nsb3RzKTsgLyog U2VlIHdoYXQgd2luZG93IGl0J3MgaW4uICovCi0JICAgIGRlYnVnKEYxMDEsImlucHV0IHJlY3Yg Y2hrd2luIiwiIix5KTsKLQkgICAgaWYgKHkgPT0gMSkgewkJLyogRnJvbSBwcmV2aW91cyB3aW5k b3cuICovCi0jaWZkZWYgU1RSRUFNSU5HCi0JCWlmICghc3RyZWFtaW5nKQkJLyogTk8gUkVTRU5E IElGIFNUUkVBTUlORyEgKi8KLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLQkJICByZXNlbmQocnNu KTsJCS8qIFJlc2VuZCB0aGUgQUNLIChtaWdodCBoYXZlIGRhdGEpICovCi0JCWZyZWVycGt0KHJz bik7CQkvKiBHZXQgcmlkIG9mIHJlY2VpdmVkIHBhY2tldCAqLwotCQljb250aW51ZTsJCS8qIEJh Y2sgdG8gd2FpdCBmb3IgYW5vdGhlciBwYWNrZXQgKi8KLQkgICAgfSBlbHNlIHsJCQkvKiBJbiB0 aGlzIHdpbmRvdyBvciBvdXQgb2YgcmFuZ2UgKi8KLQkJaWYgKHkgPCAwKQkJLyogSWYgb3V0IG9m IHJhbmdlIGVudGlyZWx5LCAqLwotCQkgIGZyZWVycGt0KHJzbik7CS8qIHJlbGVhc2UgaXRzIGJ1 ZmZlciAqLwotCi0jaWZkZWYgU1RSRUFNSU5HCi0JCWlmIChzdHJlYW1pbmcpIHsJLyogU3RyZWFt aW5nICh0aGlzIHNob3VsZG4ndCBoYXBwZW4pICovCi0JCSAgICBlcnJwa3QoKENIQVIgKikiU2Vx dWVuY2UgZXJyb3Igb24gcmVsaWFibGUgbGluay4iKTsKLQkJICAgIHR5cGUgPSAnRSc7Ci0JCSAg ICBicmVhazsKLQkJfQotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotCi0vKiBJZiBvdXIgcmVjZWl2 ZSB3aW5kb3cgaXMgZnVsbCwgTkFLIHdpbmRvdy1sb3cgKi8KLQotCQlpZiAocmJ1Zm51bSA8IDEp IHsJLyogUmVjZWl2ZSB3aW5kb3cgZnVsbD8gKi8KLQkJICAgIGlmIChuYWNrKHdpbmxvKSA8IDAp IHsgICAgLyogTm8gY2hvaWNlLCBtdXN0IE5BSyB3aW5sby4gKi8KLQkJCWVycnBrdCgoQ0hBUiAq KSJUb28gbWFueSByZXRyaWVzLiIpOyAvKiBUb28gbWFueSAqLwotCQkJdHlwZSA9ICdFJzsKLQkJ CWJyZWFrOwotCQkgICAgfSBlbHNlIGNvbnRpbnVlOwotCQl9Ci0vKgotICBSZWNlaXZlIHdpbmRv dyBub3QgZnVsbC4gIFRoaXMgaXMgYSBwYWNrZXQgaW4gdGhlIGN1cnJlbnQgd2luZG93IGJ1dCBp dCBpcwotICBub3QgdGhlIGRlc2lyZWQgcGFja2V0IGF0IHdpbmxvLiAgU28gdGhlcmVmb3JlIHRo ZXJlIGFyZSBnYXBzIGJlZm9yZSB0aGlzCi0gIHBhY2tldC4gIFNvIHdlIGZpbmQgdGhlICJsb3dl c3QiIHVuTkFLJ2QgbWlzc2luZyBwYWNrZXQsIGlmIGFueSwgYmV0d2VlbgotICB3aW5sbyBhbmQg dGhpcyBvbmUsIGFuZCBOQUsgaXQuICBJZiB0aGVyZSBhcmUgbm8gYXMteWV0LXVuTkFLJ2QgbWlz c2luZwotICBwYWNrZXRzIGluIHRoZSB3aW5kb3csIHRoZW4gd2Ugc2VuZCBub3RoaW5nIGFuZCBn byB3YWl0IGZvciBhbm90aGVyIHBhY2tldC4KLSAgSW4gdGhlb3J5LCB0aGlzIGNvdWxkIHJlc3Vs dCBpbiBhIHRpbWVvdXQsIGJ1dCBpbiBwcmFjdGljZSBpdCBpcyBsaWtlbHkgdGhhdAotICB0aGUg YWxyZWFkeS1OQUsnZCBtaXNzaW5nIHBhY2tldHMgYXJlIGFscmVhZHkgb24gdGhlaXIgd2F5LiAg Tm90ZSwgd2UgZG8gbm90Ci0gIE5BSyBhaGVhZCBvZiBvdXJzZWx2ZXMsIGFzIHRoYXQgb25seSBj cmVhdGVzIHVubmVjZXNzYXJ5IHJldHJhbnNtaXNzaW9ucy4KLSovCi0JCWZvciAoeCA9IHdpbmxv OyB4ICE9IHJzbjsgeCA9ICh4ICsgMSkgJSA2NCkgewotCQkgICAgaWYgKHJzZXF0YmxbeF0gPiAt MSkgLyogSGF2ZSBJIHJlY2VpdmVkIHBhY2tldCB4PyAqLwotCQkgICAgICBjb250aW51ZTsJCSAv KiBZZXMsIGNoZWNrIG5leHQgc2VxdWVuY2UgbnVtYmVyLiAqLwotCQkgICAgcGkgPSBzc2VxdGJs W3hdOwkgLyogTm8sIGhhdmUgSSBOQUsnZCBpdCB5ZXQ/ICovCi0JCSAgICBpZiAocGkgPCAwIHx8 IHNfcGt0W3BpXS5wa19ydHIgPT0gMCkgewotCQkJbmFjayh4KTsJIC8qIE5vLCBOQUsgaXQgbm93 LiAqLwotCQkJYnJlYWs7Ci0JCSAgICB9Ci0JCX0KLQkgICAgfQotLyohISEqLwotCX0gZWxzZSB7 CQkJLyogT3RoZXJ3aXNlIGZpbGUgc2VuZGVyLi4uICovCi0KLSNpZmRlZiBTVFJFQU1JTkcKLQkg ICAgaWYgKHN0cmVhbWluZyAmJiBzbmR0eXAgPT0gJ0QnKSB7Ci0JCWRlYnVnKEYxMDEsIlNUUkVB TUlORyBpbnB1dCBzdHJlYW1pbmciLCIiLHN0cmVhbWluZyk7Ci0JCWRlYnVnKEYwMDAsIlNUUkVB TUlORyBpbnB1dCBzbmR0eXAiLCIiLHNuZHR5cCk7Ci0JCXJzbiA9IHdpbmxvOwotCQl0eXBlID0g J1knOwkJLyogUHJldGVuZCB3ZSBnb3QgYW4gQUNLICovCi0JICAgIH0KLSNlbmRpZiAvKiBTVFJF QU1JTkcgKi8KLQkgICAgaWYgKCFuYWsyYWNrKSB7CQkvKiBOQUsobisxKSA9IEFDSyhuKSAqLwot CQlpZiAod3Nsb3RzID4gMSkgewkvKiBQYWNrZXQgYXQgd2lubG8gYWxyZWFkeSBBQ0snZD8gKi8K LQkJICAgIGlmIChzYWNrdGJsW3dpbmxvXSkgeyAvKiBJZiBzbywgICovCi0JCQlzYWNrdGJsW3dp bmxvXSA9IDA7IC8qIFR1cm4gb2ZmIHRoZSBBQ0snZCBmbGFnICovCi0JCQl3aW5sbyA9ICh3aW5s byArIDEpICUgNjQ7IC8qIFJvdGF0ZSB0aGUgd2luZG93ICovCi0JCQl0eXBlID0gJ1knOwkvKiBB bmQgcmV0dXJuIEFDSyAqLwotCQkJZGVidWcoRjEwMSwKLQkJCSAgICAgICJpbnB1dCBzZW5kIHJl dHVybmluZyBwcmUtc3Rhc2hlZCBBQ0siLCIiLAotCQkJICAgICAgd2lubG8tMSk7Ci0JCQlicmVh azsKLQkJICAgIH0KLQkJfQotI2lmZGVmIFNUUkVBTUlORwotCQlpZiAoIShzdHJlYW1pbmcgJiYg c25kdHlwID09ICdEJykpIHsgLyogTm90IHN0cmVhbWluZyB8IGRhdGEgKi8KLQkJICAgIHR5cGUg PSBycGFjaygpOwkvKiBUcnkgdG8gcmVhZCBhbiBhY2tub3dsZWRnZW1lbnQgKi8KLQkJfSBlbHNl IHsJCS8qIFN0cmVhbWluZyBhbmQgaW4gRGF0YSBwaGFzZSAqLwotCQkgICAgdHlwZSA9ICdZJzsJ CS8qIEFzc3VtZSBhbGwgaXMgbm9ybWFsICovCi0JCSAgICBpZiAoY2hraW50KCkgPCAwKQkvKiBD aGVjayBmb3IgY29uc29sZSBpbnRlcnJ1cHRzLiAqLwotCQkgICAgICB0eXBlID0gJ3onOwotCQkg ICAgZWxzZSBpZiAodHRjaGsoKSA+IDQgKyBiY3R1KSAvKiBDaGVjayBmb3IgcmV0dXJuIHRyYWZm aWMgKi8KLQkJICAgICAgdHlwZSA9IHJwYWNrKCk7Ci0JCSAgICBkZWJ1ZyhGMDAwLCJpbnB1dCBz dHJlYW1pbmcgdHlwZSIsIiIsdHlwZSk7Ci0JCX0KLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLQkJ ZGVidWcoRjExMSwiaW5wdXQgc2VuZCIsKGNoYXIgKikgcmRhdGFwLChpbnQpIHR5cGUpOwotCQl3 aGlsZSAodHlwZSA9PSAnZScpIHsJLyogSGFuZGxlIGVjaG9lcyAqLwotCQkgICAgZGVidWcoRjAw MCwiZWNobyBkaXNjYXJkZWQiLCIiLHR5cGUpOwotCQkgICAgdHlwZSA9IHJwYWNrKCk7Ci0JCX0K LSNpZm5kZWYgT0xEQ0hLSU5UCi0JCWlmICh0eXBlID09ICd6JykgewotCQkgICAgZXBrdHJjdmQg PSAxOwotCQkgICAgZXJycGt0KChDSEFSICopIlVzZXIgY2FuY2VsbGVkLiIpOwotCQkgICAgdHlw ZSA9ICdFJzsKLQkJICAgIGJyZWFrOwotCQl9Ci0jZW5kaWYgLyogT0xEQ0hLSU5UICovCi0JCWlm ICh0eXBlIDwgLTEpIHsKLQkJICAgIHh4c2NyZWVuKFNDUl9QVCwncScsMEwsCi0JCQkgICAoKGNo YXIgKikoKHR5cGUgPT0gLTIpID8KLQkJCSAgICJJbnRlcnJ1cHRlZCIgOgotCQkJICAgIkNvbm5l Y3Rpb24gbG9zdCIpKQotCQkJICAgKTsKLQkJICAgIGlmICh0eXBlICE9IC0yKQotCQkgICAgICBk b2xvZ2VuZCgpOwotCQkgICAgcmV0dXJuKCdxJyk7CS8qIEN0cmwtQyBvciBjb25uZWN0aW9uIGxv c3QgKi8KLQkJfQotCQlpZiAodHlwZSA9PSAtMSkgewotI2lmZGVmIENPTU1FTlQKLSAgICAgICAg ICAgICAgICAgICAgY2hhciBmb29bMjU2XTsKLSAgICAgICAgICAgICAgICAgICAgY2ttYWt4bXNn KGZvbywyNTYsCi0JCQkgICAgICAiUmVjZWl2ZSB3aW5kb3cgZnVsbCAoZXJyb3IgMTgpOiB3c2xv dHM9IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNraXRvYSh3c2xvdHMpLAotCQkJ ICAgICAgIiB3aW5sbz0iLGNraXRvYSh3aW5sbyksIiBwa3RudW09IiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNraXRvYShwa3RudW0pLCBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEws TlVMTCk7Ci0JCSAgICBlcnJwa3QoKENIQVIgKilmb28pOwotICAgICAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTAwLGZvbywiIiwwKTsKLSNlbHNlCi0JCSAgICBlcnJwa3QoKENIQVIgKikiUmVjZWl2 ZSB3aW5kb3cgZnVsbCIpOyAvKiB3YXMgImludGVybmFsICovCi0gICAgICAgICAgICAgICAgICAg IGRlYnVnKEYxMDEsIiB3c2xvdHMiLCIiLHdzbG90cyk7IC8qIGVycm9yIDE4IiAqLwotICAgICAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCIgd2lubG8iLCIiLHdpbmxvKTsKLQkJICAgIGRlYnVn KEYxMDEsIiBwa3RudW0iLCIiLHBrdG51bSk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCQkgICAg ZHVtcHJidWYoKTsKLQkJICAgIHR5cGUgPSAnRSc7Ci0JCSAgICBicmVhazsKLQkJfQotCQlkdW1w cmJ1ZigpOwkJLyogRGVidWdnaW5nICovCi0KLSNpZmRlZiBPTERDSEtJTlQKLQkJaWYgKGNoa2lu dCgpIDwgMCkgewkvKiBDaGVjayBmb3IgY29uc29sZSBpbnRlcnJ1cHRzLiAqLwotCQkgICAgZXJy cGt0KChDSEFSICopIlVzZXIgY2FuY2VsbGVkLiIpOwotCQkgICAgcmV0dXJuKHR5cGUgPSAnRScp OwotCQl9Ci0jZW5kaWYgLyogT0xEQ0hLSU5UICovCi0KLQkJLyogR290IGEgcGFja2V0ICovCi0K LSNpZmRlZiBTVFJFQU1JTkcKLQkJaWYgKHN0cmVhbWluZykgewkJLyogU3RyZWFtaW5nICovCi0J CSAgICBpZiAodHlwZSA9PSAnUScgfHwgdHlwZSA9PSAnVCcpIHsgLyogRXJyb3JzIGFyZSBmYXRh bC4gKi8KLQkJCWNydW5jaGVkKys7CS8qIEZvciBzdGF0aXN0aWNzICovCi0JCQllcnJwa3QoKENI QVIgKikiVHJhbnNtaXNzaW9uIGVycm9yIG9uIHJlbGlhYmxlIGxpbmsuIik7Ci0JCQl0eXBlID0g J0UnOwotCQkgICAgfQotCQl9Ci0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0JCWlmICh0eXBlID09 ICdFJykgewotCQkgICAgZGVidWcoRjEwMSwiaW5wdXQgc2VuZCBnb3QgRSwgbmFrc3RhdGUiLCIi LG5ha3N0YXRlKTsKLQkJICAgIGJyZWFrOwkJLyogRXJyb3IgcGFja2V0ICovCi0JCX0KLQkJaWYg KHR5cGUgPT0gJ1EnKSB7CS8qIENydW5jaGVkIHBhY2tldCAqLwotCQkgICAgY3J1bmNoZWQrKzsJ CS8qIEZvciBzdGF0aXN0aWNzICovCi0JCSAgICBudW1lcnJzKys7CQkvKiBGb3IgcGFja2V0IHJl c2l6aW5nICovCi0JCSAgICB4ID0gcmVzZW5kKHdpbmxvKTsJLyogUmVzZW5kIHdpbmRvdy1sb3cg Ki8KLQkJICAgIGlmICh4IDwgMCkgewotCQkJdHlwZSA9ICdFJzsKLQkJCWVycnBrdCgoQ0hBUiAq KSJUb28gbWFueSByZXRyaWVzIik7Ci0JCQlicmVhazsKLQkJICAgIH0KLQkJICAgIGNvbnRpbnVl OwotCQl9Ci0JCWlmICh0eXBlID09ICdUJykgewkvKiBUaW1lb3V0IHdhaXRpbmcgZm9yIEFDS3Mu ICovCi0JCSAgICB0aW1lb3V0cysrOwkJLyogQ291bnQgaXQgKi8KLQkJICAgIG51bWVycnMrKzsJ CS8qIENvdW50IGFuIGVycm9yIHRvbyAqLwotCQkgICAgZGVidWcoRjEwMSwiaW5wdXQgc2VuZCBz dGF0ZSB0aW1lb3V0LCB3aW5sbyIsIiIsd2lubG8pOwotCi0JCSAgICAvKiBSZXRyYW5zbWl0IHRo ZSBvbGRlc3QgdW4tQUNLJ2QgcGFja2V0LiAqLwotCi0JCSAgICBkZWJ1ZyhGMTAxLCJpbnB1dCBz ZW5kIHJlc2VuZGluZyB3aW5sbyIsIiIsd2lubG8pOwotCQkgICAgaWYgKHJlc2VuZCh3aW5sbykg PCAwKSB7IC8qIENoZWNrIHJldHJpZXMgKi8KLQkJCWRlYnVnKEYxMDEsImlucHV0IHNlbmQgdG9v IG1hbnkgcmVzZW5kcyIsIiIsbWF4dHJ5KTsKLQkJCWVycnBrdCgoQ0hBUiAqKSJUb28gbWFueSBy ZXRyaWVzIik7Ci0JCQlyZXR1cm4odHlwZSA9ICdFJyk7Ci0JCSAgICB9Ci0jaWZkZWYgTkVXRFBM Ci0JCSAgICAvKiBSZWR1Y2UgcHJldmFpbGluZyBwYWNrZXQgbGVuZ3RoICovCi0JCSAgICB4ID0g c3NlcXRibFt3aW5sb107CS8qIEdldCBsZW5ndGggb2YgcGFja2V0IHdlIHdhbnQgQUNLZCAqLwot CQkgICAgaWYgKHggPiAtMSkgewkvKiBPbmx5IGlmIHdlIGhhdmUgYSB2YWxpZCBpbmRleCAqLwot CQkJaWYgKHNfcGt0W3hdLnBrX3R5cCA9PSAnRCcpIHsgLyogb25seSBmb3IgRCBwYWNrZXRzICov Ci0JCQkgICAgc3BzaXogPSAoc19wa3RbeF0ucGtfbGVuICsgOCkgPj4gMTsgLyogaGFsdmUgaXQg Ki8KLQkJCSAgICBpZiAoc3BzaXogPCAyMCkgc3BzaXogPSAyMDsgLyogd2l0aGluIHJlYXNvbiAq LwotCQkJICAgIGRlYnVnKEYxMDEsImlucHV0IFQgY3V0IHBhY2tldCBsZW5ndGgiLCIiLHNwc2l6 KTsKLQkJCX0KLQkJICAgIH0KLSNlbmRpZiAvKiBORVdEUEwgKi8KLQkJICAgIGNvbnRpbnVlOwot CQl9Ci0JICAgIH0KLQkgICAgLyogR290IGFuIGFjdHVhbCBub3JtYWwgcGFja2V0ICovCi0KLQkg ICAgbmFrMmFjayA9IDA7CQkvKiBVbnNldCB0aGlzIGZsYWcuICovCi0JICAgIHkgPSBjaGt3aW4o cnNuLHdpbmxvLHdzbG90cyk7IC8qIElzIGl0IGluIHRoZSB3aW5kb3c/ICovCi0JICAgIGRlYnVn KEYxMDEsImlucHV0IHNlbmQgcnNuIiwiIixyc24pOwotCSAgICBkZWJ1ZyhGMTAxLCJpbnB1dCBz ZW5kIHdpbmxvIiwiIix3aW5sbyk7Ci0JICAgIGRlYnVnKEYxMDEsImlucHV0IHNlbmQgY2hrd2lu IiwiIix5KTsKLQotCSAgICBpZiAodHlwZSA9PSAnWScpIHsJCS8qIEdvdCBhbiBBQ0sgKi8KLQkJ aWYgKHkgPT0gMCkgewkJLyogSW4gY3VycmVudCB3aW5kb3cgKi8KLQkJICAgIGlmIChzcGFja2V0 cyA8IDQpCS8qIEVycm9yIGNvdW50ZXIgZG9lc24ndCBjb3VudCAqLwotCQkgICAgICBudW1lcnJz ID0gMDsJLyogdW50aWwgZGF0YSBwaGFzZS4gKi8KLQkJICAgIHNhY2t0YmxbcnNuXSsrOwkvKiBN YXJrIHRoZSBwYWNrZXQgYXMgQUNLJ2QgKi8KLQkJICAgIHggPSBzc2VxdGJsW3Jzbl07CS8qIEdl dCBBQ0snZCBwYWNrZXQncyBidWZmZXIgaW5kZXggKi8KLQkJICAgIGRlYnVnKEYxMDEsImJlc3Rs ZW4gYWNrIHgiLCIiLHgpOwotI2lmZGVmIE5FV0RQTAotCQkgICAgaWYgKHggPiAtMSkgewotCQkJ YWNrdHlwZSA9IHNfcGt0W3hdLnBrX3R5cDsgLyogR2V0IHR5cGUgKi8KLQkJCWRlYnVnKEYwMDAs ImJlc3RsZW4gYWNrIHR5cGUiLCIiLGFja3R5cGUpOwotCi0JCQlpZiAoYWNrdHlwZSA9PSAnRCcp IHsgLyogQWRqdXN0IGRhdGEgcGFja2V0IGxlbmd0aCAqLwotCQkJICAgIGlmIChzcHNpeiA+IGJl c3RsZW4pIHsKLQkJCQliZXN0bGVuID0gc3BzaXo7Ci0JCQkJZGVidWcoRjEwMSwiYmVzdGxlbiBC IiwiIixiZXN0bGVuKTsKLQkJCSAgICB9Ci0jaWZkZWYgREVCVUcKLQkJCSAgICBpZiAoZGVibG9n KSB7Ci0JCQkJZGVidWcoRjEwMSwiYmVzdGxlbiByZXRyeSIsIiIsc19wa3RbeF0ucGtfcnRyKTsK LQkJCQlkZWJ1ZyhGMTAxLCJiZXN0bGVuIGxlbiIsIiIsc19wa3RbeF0ucGtfbGVuKTsKLQkJCQlk ZWJ1ZyhGMTAxLCJiZXN0bGVuIHNwYWNrZXRzIiwiIixzcGFja2V0cyk7Ci0JCQkgICAgfQotI2Vu ZGlmIC8qIERFQlVHICovCi0JCQkgICAgLyogU2V0IG5ldyBiZXN0IGxlbmd0aCAqLwotCQkJICAg IGlmIChzX3BrdFt4XS5wa19ydHIgPT0gMCAmJgotCQkJCXNfcGt0W3hdLnBrX2xlbiArIDggPiBi ZXN0bGVuKSB7Ci0JCQkJYmVzdGxlbiA9IHNfcGt0W3hdLnBrX2xlbiArIDg7Ci0JCQkJaWYgKGJl c3RsZW4gPiBzcG1heCkKLQkJCQkgIGJlc3RsZW4gPSBzcG1heDsKLQkJCQlkZWJ1ZyhGMTAxLCJi ZXN0bGVuIEEiLCIiLGJlc3RsZW4pOwotCQkJICAgIH0KLSNpZmRlZiBERUJVRwotCQkJICAgIGlm IChkZWJsb2cpIHsKLQkJCQlkZWJ1ZyhGMTAxLCJiZXN0bGVuIHdzbG90cyIsIiIsd3Nsb3RzKTsK LQkJCQlkZWJ1ZyhGMTAxLCJiZXN0bGVuIG1heHNlbmQiLCIiLG1heHNlbmQpOwotCQkJICAgIH0K LSNlbmRpZiAvKiBERUJVRyAqLwotCQkJICAgIC8qIFNsb3cgc3RhcnQgKi8KLQkJCSAgICBpZiAo c2xvc3RhcnQgJiYKLQkJCQkobWF4c2VuZCA8PSBzcG1heCkgJiYKLQkJCQkocnBhY2tldHMgPCAx MSkgJiYKLQkJCQkobnVtZXJycyA9PSAwKSkgewotCQkJCXNwc2l6ID0gc3BzaXogPDwgMTsKLQkJ CQlkZWJ1ZyhGMTAxLCJiZXN0bGVuIHNwc2l6IEEiLCIiLHNwc2l6KTsKLQotCQkJICAgIC8qIENy ZWVwIHVwIHRvIGJlc3QgbGVuZ3RoICovCi0JCQkgICAgfSBlbHNlIGlmICgoc3BhY2tldHMgPiA1 KSAmJgotCQkJCSAgICAgICAoc3BzaXogPCBiZXN0bGVuIC0gOCkpIHsKLQkJCQlzcHNpeiArPSAo YmVzdGxlbiAtIHNwc2l6KSAvIDM7Ci0JCQkJZGVidWcoRjEwMSwiYmVzdGxlbiBzcHNpeiBCIiwi IixzcHNpeik7Ci0KLQkJCSAgICAvKiBQdXNoIHRoZSBlbnZlbG9wZSAqLwotCQkJICAgIH0gZWxz ZSBpZiAoKHNwYWNrZXRzICUgKHdzbG90cyArIDEpID09IDApICYmCi0JCQkJICAgICAgIChzcGFj a2V0cyA+IDYpICYmCi0JCQkJICAgICAgIChiZXN0bGVuIDwgc3BtYXggLSA4KSAmJgotCQkJCSAg ICAgICAoc3BzaXogPCBzcG1heCkpIHsKLQkJCQlzcHNpeiArPSAoc3BtYXggLSBiZXN0bGVuKSAv IDM7Ci0JCQkJZGVidWcoRjEwMSwiYmVzdGxlbiBzcHNpeiBDIiwiIixzcHNpeik7Ci0JCQkgICAg fQotCQkJICAgIC8qIEJ1dCBub3QgdG9vIGZhciAqLwotCQkJICAgIGlmIChzcHNpeiA+IHNwbWF4 KSB7Ci0JCQkJc3BzaXogPSBzcG1heDsKLQkJCQlkZWJ1ZyhGMTAxLCJiZXN0bGVuIHNwc2l6IEQi LCIiLHNwc2l6KTsKLQkJCSAgICB9Ci0JCQl9Ci0JCSAgICB9Ci0jZW5kaWYgLyogTkVXRFBMICov Ci0KLSNpZmRlZiBDS19USU1FUlMKLQkJICAgIGlmIChydHRmbGcgJiYgdGltaW50KSAvKiBJZiBk b2luZyBkeW5hbWljIHRpbWVycyAqLwotCQkgICAgICBnZXRydHQobmFrc3RhdGUsIHJzbik7IC8q IGNhbGwgcm91dGluZSB0byBzZXQgaXQuICovCi0JCSAgICBlbHNlICAgICAgICAgICAgICAgICAg ICAgLyogSkhEIDIwMTAwMjA4ICovCi0JCSAgICAgIHJjdnRpbW8gPSB0aW1pbnQ7CSAgICAgLyog SkhEIDIwMTAwMjA4ICovCi0jZW5kaWYgLyogQ0tfVElNRVJTICovCi0vKgotICBOT1RFOiBUaGUg Zm9sbG93aW5nIHN0YXRlbWVudCBmcmVlcyB0aGUgYnVmZmVyIG9mIHRoZSBBQ0sgd2UganVzdCBn b3QuCi0gIEJ1dCB0aGUgdXBwZXIgbGF5ZXJzIHN0aWxsIG5lZWQgdGhlIGRhdGEsIGxpa2UgaWYg aXQncyB0aGUgQUNLIHRvIGFuIEksCi0gIFMsIEYsIEQsIFosIG9yIGp1c3QgYWJvdXQgYW55IGtp bmQgb2YgcGFja2V0LiAgU28gZm9yIG5vdywgZnJlZXJidWYoKQotICBkZWFsbG9jYXRlcyB0aGUg YnVmZmVyLCBidXQgZG9lcyBub3QgZXJhc2UgdGhlIGRhdGEgb3IgZGVzdHJveSB0aGUgcG9pbnRl cgotICB0byBpdC4gIFRoZXJlJ3Mgbm8gb3RoZXIgc2luZ2xlIHBsYWNlIHdoZXJlIHRoZXNlIHJl Y2VpdmUgYnVmZmVycyBjYW4gYmUKLSAgY29ycmVjdGx5IGZyZWVkICg/KSAuLi4KLSovCi0JCSAg ICBmcmVlcnBrdChyc24pOwkvKiBGcmVlIHRoZSBBQ0sncyBidWZmZXIgKi8KLQkJICAgIGZyZWVz YnVmKHJzbik7CS8qICoqKiBGcmVlIHRoZSBzZW50IHBhY2tldCdzIGJ1ZmZlciAqLwotCQkgICAg aWYgKHJzbiA9PSB3aW5sbykgewkvKiBHb3QgdGhlIG9uZSB3ZSB3YW50ICovCi0JCQlzYWNrdGJs W3dpbmxvXSA9IDA7Ci0JCQl3aW5sbyA9ICh3aW5sbyArIDEpICUgNjQ7Ci0JCQlkZWJ1ZyhGMTAx LCJpbnB1dCBzZW5kIHJvdGF0ZWQgc2VuZCB3aW5kb3ciLCIiLHdpbmxvKTsKLQkJCWJyZWFrOwkJ LyogUmV0dXJuIHRoZSBBQ0sgKi8KLQkJICAgIH0gZWxzZSB7Ci0JCQlkZWJ1ZyhGMTAxLCJpbnB1 dCBzZW5kIG1hcmsgcGt0IiwiIixyc24pOwotCQkJY29udGludWU7CS8qIE90aGVyd2lzZSBnbyBy ZWFkIGFub3RoZXIgcGFja2V0ICovCi0JCSAgICB9Ci0JCX0gZWxzZSBpZiAoeSA9PSAxICYmIHdz bG90cyA8IDIpIHsgLyogKDE5MCkgQUNLIGZvciBwcmV2aW91cyAqLwotCQkgICAgbnVtZXJycysr OwkJLyogPT0gTkFLIGZvciBjdXJyZW50LCBjb3VudCBlcnJvciAqLwotCQkgICAgZGVidWcoRjEw MSwiaW5wdXQgc2VuZCBBQ0sgZm9yIHByZXZpb3VzIiwiIixyc24pOwotCQkgICAgZnJlZXJwa3Qo cnNuKTsJLyogRnJlZSBOQUsncyBidWZmZXIgKi8KLQkJICAgIHggPSByZXNlbmQod2lubG8pOwkv KiBSZXNlbmQgY3VycmVudCBwYWNrZXQgKi8KLQkJICAgIGlmICh4IDwgMCkgewotCQkJdHlwZSA9 ICdFJzsKLQkJCWVycnBrdCgoQ0hBUiAqKSJUb28gbWFueSByZXRyaWVzIik7Ci0JCQlicmVhazsK LQkJICAgIH0gZWxzZSBjb250aW51ZTsJLyogUmVzZW5kIG9rLCBnbyByZWFkIGFub3RoZXIgcGFj a2V0ICovCi0JCX0gZWxzZSB7CQkvKiBPdGhlciBjYXNlcywganVzdCBpZ25vcmUgKi8KLQkJICAg IGRlYnVnKEYxMDEsImlucHV0IHNlbmQgQUNLIG91dCBvZiB3aW5kb3ciLCIiLHJzbik7Ci0JCSAg ICBmcmVlcnBrdChyc24pOwotCQkgICAgY29udGludWU7Ci0JCX0KLQkgICAgfQotCSAgICBpZiAo dHlwZSA9PSAnTicpIHsJCS8qIE5BSyAqLwotCQludW1lcnJzKys7CQkvKiBDb3VudCBhbiBlcnJv ciAqLwotI2lmZGVmIFNUUkVBTUlORwotCQlpZiAoc3RyZWFtaW5nKSB7CQkvKiBTdHJlYW1pbmcg Ki8KLQkJICAgIGVycnBrdCgoQ0hBUiAqKSJOQUsgcmVjZWl2ZWQgb24gcmVsaWFibGUgbGluay4i KTsKLQkJICAgIHR5cGUgPSAnRSc7Ci0JCSAgICBicmVhazsKLQkJfQotI2VuZGlmIC8qIFNUUkVB TUlORyAqLwotCi0JCWRlYnVnKEYxMDEsImlucHV0IHNlbmQgTkFLIiwiIixyc24pOwotI2lmZGVm IE5FV0RQTAotCQkvKiBSZWR1Y2UgcHJldmFpbGluZyBwYWNrZXQgbGVuZ3RoICovCi0JCXggPSBz c2VxdGJsW3Jzbl07CS8qIExlbmd0aCBvZiBwYWNrZXQgdGhhdCB3YXMgTkFLJ2QgKi8KLQkJaWYg KHggPiAtMSkgewkJLyogSWYgaXQncyBhIERhdGEgcGFja2V0IHdlJ3ZlIHNlbnQgKi8KLQkJICAg IGlmIChzX3BrdFt4XS5wa190eXAgPT0gJ0QnKSB7Ci0JCQlzcHNpeiA9IChzX3BrdFt4XS5wa19s ZW4gKyA4KSA+PiAxOyAvKiBIYWx2ZSBsZW5ndGggKi8KLSNpZmRlZiBDT01NRU5UCi0JCQkvKiBU aGlzIG1pZ2h0IGJlIGEgZ29vZCBpZGVhIC0tIGhhdmVuJ3QgdHJpZWQgaXQgLi4uICovCi0JCQlp ZiAoYmVzdGxlbiA+IDAgJiYgc3BzaXogPiBiZXN0bGVuKQotCQkJICBzcHNpeiA9IGJlc3RsZW47 Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCQkJaWYgKHNwc2l6IDwgMjApIHNwc2l6ID0gMjA7Ci0J CQlkZWJ1ZyhGMTAxLCJpbnB1dCBOIGN1dCBwYWNrZXQgbGVuZ3RoIiwiIixzcHNpeik7Ci0JCSAg ICB9Ci0JCX0KLSNlbmRpZiAvKiBORVdEUEwgKi8KLQkJZnJlZXJwa3QocnNuKTsJCS8qIEZyZWUg YnVmZmVyIHdoZXJlIE5BSyBsaWVzLiAqLwotCQlpZiAoeSA9PSAwKSB7CQkvKiBJbiBjdXJyZW50 IHdpbmRvdyAqLwotCQkgICAgZGVidWcoRjEwMCwiIGluIHdpbmRvdyIsIiIsMCk7Ci0JCSAgICBr ID0gc3NlcXRibFtyc25dOwkvKiBHZXQgcG9pbnRlciB0byBOQUsnZCBwYWNrZXQuICovCi0JCSAg ICBpZiAoayA8IDAgfHwgKGsgPiAtMSAmJiBzX3BrdFtrXS5wa190eXAgPT0gJyAnKSkgewotCQkJ eCA9IHJlc2VuZCh3aW5sbyk7IC8qIFBhY2tldCB3ZSBoYXZlbid0IHNlbnQgeWV0LiAqLwotCQkg ICAgfSBlbHNlIHsKLQkJCXggPSByZXNlbmQocnNuKTsgLyogUmVzZW5kIHJlcXVlc3RlZCBwYWNr ZXQuICovCi0JCSAgICB9Ci0JCSAgICBpZiAoeCA8IDApIHsJLyogUmVzZW5kIGVycm9yIGlzIGZh dGFsLiAgKi8KLQkJCXR5cGUgPSAnRSc7Ci0JCQllcnJwa3QoKENIQVIgKikiVG9vIG1hbnkgcmV0 cmllcyIpOwotCQkJYnJlYWs7Ci0JCSAgICB9IGVsc2UgY29udGludWU7CS8qIFJlc2VuZCBvaywg Z28gcmVhZCBhbm90aGVyIHBhY2tldCAqLwotCQl9IGVsc2UgaWYgKChyc24gPT0gKHBrdG51bSAr IDEpICUgNjQpKSB7IC8qIE5BSyBmb3IgbmV4dCBwa3QgKi8KLQkJICAgIGlmICh3c2xvdHMgPiAx KSB7Ci0JCQlkZWJ1ZyggRjEwMSwiTkFLIGZvciBuZXh0IHBhY2tldCwgd2luZG93aW5nIiwiIixy c24pOwotCQkJeCA9IHJlc2VuZCh3aW5sbyk7IC8qIFJlc2VuZCB3aW5kb3ctbG93ICovCi0JCQlp ZiAoeCA8IDApIHsKLQkJCSAgICB0eXBlID0gJ0UnOwotCQkJICAgIGVycnBrdCgoQ0hBUiAqKSJU b28gbWFueSByZXRyaWVzIik7Ci0JCQkgICAgYnJlYWs7Ci0JCQl9Ci0JCQljb250aW51ZTsJLyog R28gYmFjayBhbmQgcmVhZCBhbm90aGVyIHBrdCAqLwotCQkgICAgfQotCQkgICAgZGVidWcoRjEw MSwiTkFLIGZvciBuZXh0IHBhY2tldCwgbm8gd2luZG93aW5nIiwiIixyc24pOwotCQkgICAgeCA9 IChyc24gPT0gMCkgPyA2MyA6IHJzbiAtIDE7Ci0JCSAgICBpZiAoeCA9PSAwICYmIChzbmR0eXAg PT0gJ1MnIHx8IHNuZHR5cCA9PSAnSScpKSB7Ci0JCQlyZXNlbmQoMCk7CS8qIEFDSyBmb3IgUyBv ciBJIHBhY2tldCBtaXNzaW5nICovCi0JCQljb250aW51ZTsJLyogc28gcmVzZW5kIHRoZSBTIG9y IEkgKi8KLQkJICAgIH0KLQkJICAgIHJzbiA9IHg7CQkvKiBFbHNlLCB0cmVhdCBOQUsobisxKSBh cyBBQ0sobikgKi8KLQkJICAgIG5hazJhY2sgPSAxOwkvKiBHbyBiYWNrIGFuZCBwcm9jZXNzIHRo ZSBBQ0sgKi8KLQkJICAgIGNvbnRpbnVlOwotCQl9IGVsc2UgaWYgKHkgPiAwKSB7CS8qIE5BSyBm b3IgcGt0IHdlIGNhbid0IHJlc2VuZCAqLwotCQkgICAgZGVidWcoRjEwMSwiIE5BSyBvdXQgb2Yg d2luZG93IiwiIixyc24pOyAvKiBiYWQuLi4gKi8KLQkJICAgIHR5cGUgPSAnRSc7Ci0JCSAgICBl cnJwa3QoKENIQVIgKikiTkFLIG91dCBvZiB3aW5kb3ciKTsKLQkJICAgIGJyZWFrOwotCQl9IGVs c2UgY29udGludWU7CS8qIElnbm9yZSBvdGhlciBOQUtzICovCi0JICAgIH0JCQkJLyogRW5kIG9m IGZpbGUtc2VuZGVyIE5BSyBoYW5kbGVyICovCi0KLSAgICAgICAgICAgIGlmIChyc24gPT0gd2lu bG8pIHsJCS8qIE5vdCBBQ0ssIE5BSywgdGltZW91dCwgZXRjLiAqLwotCQlkZWJ1ZyhGMDAwLCJp bnB1dCBzZW5kIHVuZXhwZWN0ZWQgdHlwZSIsIiIsdHlwZSk7Ci0JCWJyZWFrOwotCSAgICB9Ci0J fQkJCQkvKiBFbmQgb2YgZmlsZS1zZW5kZXIgc2VjdGlvbiAqLwotICAgIH0JCQkJCS8qIEVuZCBv ZiBpbnB1dCgpIHdoaWxlKCkgbG9vcCAqLwotLyoKLSAgV2hlbiB0aGUgd2luZG93IHNpemUgaXMg MSBhbmQgd2UgaGF2ZSB0aGUgcGFja2V0IHdlIHdhbnQsIHRoZXJlIGNhbiBub3QKLSAgcG9zc2li bHkgYmUgYW55dGhpbmcgd2FpdGluZyBmb3IgdXMgb24gdGhlIGNvbm5lY3Rpb24gdGhhdCBpcyB1 c2VmdWwgdG8gdXMuCi0gIEhvd2V2ZXIsIHRoZXJlIG1pZ2h0IGJlIHJlZHVuZGFudCBjb3BpZXMg b2YgYSBwYWNrZXQgd2UgYWxyZWFkeSBnb3QsIHdoaWNoCi0gIHdvdWxkIGNhdXNlIG5lZWRsZXNz IGN5Y2xlcyBvZiByZXBlYXRlZCBwYWNrZXRzLiAgVGhlcmVmb3JlIHdlIGZsdXNoIHRoZQotICBj b21tdW5pY2F0aW9ucyBpbnB1dCBidWZmZXIgbm93IHRvIHRyeSB0byBnZXQgcmlkIG9mIHVuZGVz aXJlZCBhbmQgdW5uZWVkZWQKLSAgcGFja2V0cyB0aGF0IHdlIGhhdmUgbm90IHJlYWQgeWV0Lgot Ci0gIEFjdHVhbGx5LCB0aGUgZmlyc3Qgc2VudGVuY2UgYWJvdmUgaXMgbm90IGVudGlyZWx5IHRy dWU6IHRoZXJlIGNvdWxkIGJlIGFuCi0gIEVycm9yIHBhY2tldCB3YWl0aW5nIHRvIGJlIHJlYWQu ICBGbHVzaGluZyBhbiBFIHBhY2tldCBpcyBiYWQgYmVjYXVzZSBpdAotICB3aWxsIG5vdCBiZSBy ZXNlbnQsIGFuZCB3ZSdsbCBnbyBpbnRvIGEgY3ljbGUgb2YgdGltaW5nIG91dCBhbmQKLSAgcmV0 cmFuc21pdHRpbmcgdXAgdG8gdGhlIHJldHJ5IGxpbWl0LiAgLSBmZGMgMjAwNy8wMy8wMgotKi8K LSAgICBpZiAod3Nsb3RuID09IDEJCQkvKiAobm90IHdzbG90cyEpICovCi0jaWZkZWYgU1RSRUFN SU5HCi0JJiYgIXN0cmVhbWluZwkJCS8qIEJ1dCBub3Qgd2hlbiBzdHJlYW1pbmcgKi8KLSNlbmRp ZiAvKiBTVFJFQU1JTkcgKi8KLQkpIHsKLQlkZWJ1ZyhGMTAwLCJpbnB1dCBhYm91dCB0byBmbHVz aCIsIiIsMCk7Ci0JdHRmbHVpKCk7CQkvKiBHb3Qgd2hhdCB3ZSB3YW50LCBjbGVhciBpbnB1dCBi dWZmZXIuICovCi0gICAgfQotI2lmbmRlZiBORVdEUEwKLSAgICBpZiAoIW5ha3N0YXRlKQkJCS8q IFdoZW4gc2VuZGluZyAqLwotICAgICAgcmNhbGNwc3ooKTsJCQkvKiByZWNhbGN1bGF0ZSBzaXpl IGV2ZXJ5IHBhY2tldCAqLwotI2VuZGlmIC8qIE5FV0RQTCAqLwotICAgIGlmICh0eXBlID09ICdF JykKLSAgICAgIHhpdHN0YSB8PSAod2hhdCA/IHdoYXQgOiAxKTsJLyogUmVtZW1iZXIgd2hhdCBm YWlsZWQuICovCi0gICAgZGVidWcoRjEwMSwiaW5wdXQgd2lubG8iLCIiLHdpbmxvKTsKLSAgICBk ZWJ1ZyhGMTAxLCJpbnB1dCByc24iLCIiLHJzbik7Ci0gICAgZGVidWcoRjAwMCwiaW5wdXQgcmV0 dXJuaW5nIHR5cGUiLCIiLHR5cGUpOwotICAgIHJldHVybihyY3Z0eXAgPSB0eXBlKTsJCS8qIFN1 Y2Nlc3MsIHJldHVybiBwYWNrZXQgdHlwZS4gKi8KLX0KLQotI2lmZGVmIFBBUlNFTlNFCi0vKiAg UCBBIFIgQyBIIEsgIC0tICBDaGVjayBpZiBLZXJtaXQgcGFja2V0IGhhcyBwYXJpdHkgICovCi0K LS8qCi0gIENhbGwgd2l0aCBzID0gcG9pbnRlciB0byBwYWNrZXQsIHN0YXJ0ID0gcGFja2V0IHN0 YXJ0IGNoYXJhY3RlciwgbiA9IGxlbmd0aC4KLSAgUmV0dXJucyAwIGlmIHBhY2tldCBoYXMgbm8g cGFyaXR5LCAtMSBvbiBlcnJvciwgb3IsIGlmIHBhY2tldCBoYXMgcGFyaXR5OgotICAgICdlJyBm b3IgZXZlbiwgJ28nIGZvciBvZGQsICdtJyBmb3IgbWFyay4gIFNwYWNlIHBhcml0eSBjYW5ub3Qg YmUgc2Vuc2VkLgotICBTbyBhIHJldHVybiB2YWx1ZSBvZiAwIHJlYWxseSBtZWFucyBlaXRoZXIg c3BhY2Ugb3Igbm9uZS4KLSAgUmV0dXJucyAtMiBpZiBwYXJpdHkgaGFzIGFscmVhZHkgYmVlbiBj aGVja2VkIGR1cmluZyB0aGlzIHByb3RvY29sIG9wZXJhdGlvbi4KLSovCi1pbnQKLSNpZmRlZiBD S19BTlNJQwotcGFyY2hrKENIQVIgKnMsIENIQVIgc3RhcnQsIGludCBuKQotI2Vsc2UKLXBhcmNo ayhzLHN0YXJ0LG4pIENIQVIgKnMsIHN0YXJ0OyBpbnQgbjsKLSNlbmRpZiAvKiBDS19BTlNJQyAq LwotLyogcGFyY2hrICovIHsKLSAgICBDSEFSIHMwLCBzMSwgczIsIHMzOwotCi0gICAgZGVidWco RjEwMSwicGFyY2hrIG4iLCIiLG4pOwotICAgIGRlYnVnKEYxMDEsInBhcmNoayBzdGFydCIsIiIs c3RhcnQpOwotCi0gICAgczAgPSBzWzBdICYgMHg3ZjsJCQkvKiBNYXJrIGZpZWxkICh1c3VhbGx5 IEN0cmwtQSkgKi8KLQotICAgIGlmIChzMCAhPSBzdGFydCB8fCBuIDwgNSkgcmV0dXJuKC0xKTsg LyogTm90IGEgdmFsaWQgcGFja2V0ICovCi0KLS8qIExvb2sgYXQgcGFja2V0IGNvbnRyb2wgZmll bGRzLCB3aGljaCBuZXZlciBoYXZlIDh0aCBiaXQgc2V0ICovCi0vKiBGaXJzdCBjaGVjayBmb3Ig bm8gcGFyaXR5LCBtb3N0IGNvbW1vbiBjYXNlLiAqLwotCi0gICAgaWYgKCgoc1swXSB8IHNbMV0g fCBzWzJdIHwgc1szXSkgJiAweDgwKSA9PSAwKQotICAgICAgcmV0dXJuKDApOwkJCS8qIE5vIHBh cml0eSBvciBzcGFjZSBwYXJpdHkgKi8KLQotLyogQ2hlY2sgZm9yIG1hcmsgcGFyaXR5ICovCi0K LSAgICBpZiAoKChzWzBdICYgc1sxXSAmIHNbMl0gJiBzWzNdKSAmIDB4ODApID09IDB4ODApCi0g ICAgICByZXR1cm4oJ20nKTsJCQkvKiBNYXJrIHBhcml0eSAqLwotCi0vKiBQYWNrZXQgaGFzIHNv bWUga2luZCBvZiBwYXJpdHkgKi8KLS8qIE1ha2UgNy1iaXQgY29waWVzIG9mIGNvbnRyb2wgZmll bGRzICovCi0KLSAgICBzMSA9IHNbMV0gJiAweDdmOwkJCS8qIExFTiAqLwotICAgIHMyID0gc1sy XSAmIDB4N2Y7CQkJLyogU0VRICovCi0gICAgczMgPSBzWzNdICYgMHg3ZjsJCQkvKiBUWVBFICov Ci0KLS8qIENoZWNrIGZvciBldmVuIHBhcml0eSAqLwotCi0gICAgaWYgKChzWzBdID09IHBfdGJs W3MwXSkgJiYKLSAgICAgICAgKHNbMV0gPT0gcF90YmxbczFdKSAmJgotICAgICAgICAoc1syXSA9 PSBwX3RibFtzMl0pICYmCi0JKHNbM10gPT0gcF90YmxbczNdKSkKLSAgICAgIHJldHVybignZScp OwotCi0vKiBDaGVjayBmb3Igb2RkIHBhcml0eSAqLwotCi0gICAgaWYgKChzWzBdICE9IHBfdGJs W3MwXSkgJiYKLSAgICAgICAgKHNbMV0gIT0gcF90YmxbczFdKSAmJgotICAgICAgICAoc1syXSAh PSBwX3RibFtzMl0pICYmCi0JKHNbM10gIT0gcF90YmxbczNdKSkKLSAgICAgIHJldHVybignbycp OwotCi0vKiBPdGhlcndpc2UgaXQncyBwcm9iYWJseSBsaW5lIG5vaXNlLiAgTGV0IGNoZWNrc3Vt IGNhbGN1bGF0aW9uIGNhdGNoIGl0LiAqLwotCi0gICAgcmV0dXJuKC0xKTsKLX0KLSNlbmRpZiAv KiBQQVJTRU5TRSAqLwotDAotLyoKLSAgQ2hlY2sgdG8gbWFrZSBzdXJlIHRpbWVvdXQgaW50ZXJ2 YWxzIGFyZSBsb25nIGVub3VnaCB0byBhbGxvdyBtYXhpbXVtCi0gIGxlbmd0aCBwYWNrZXRzIHRv IGdldCB0aHJvdWdoIGJlZm9yZSB0aGUgdGltZXIgZ29lcyBvZmYuICBJZiBub3QsIHRoZQotICB0 aW1lb3V0IGludGVydmFsIGlzIGFkanVzdGVkIHVwd2FyZHMuCi0KLSAgVGhpcyByb3V0aW5lIGlz IGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgdHJhbnNhY3Rpb24sIGJlZm9yZSB3ZQotICBr bm93IGFueXRoaW5nIGFib3V0IHRoZSBkZWxheSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIGxpbmUu ICBJdCB3b3JrcwotICBvbmx5IGZvciBzZXJpYWwgY29tbXVuaWNhdGlvbiBkZXZpY2VzOyBpdCB0 cnVzdHMgdGhlIHNwZWVkIHJlcG9ydGVkIGJ5Ci0gIHRoZSBvcGVyYXRpbmcgc3lzdGVtLgotCi0g IENhbGwgd2l0aCBhIHRpbW91dCBpbnRlcnZhbC4gIFJldHVybnMgaXQsIGFkanVzdGVkIGlmIG5l Y2Vzc2FyeS4KLSovCi1pbnQKLWNoa3RpbW8odGltbyxmbGFnKSBpbnQgdGltbywgZmxhZzsgewot ICAgIGxvbmcgY3BzLCB6OyBpbnQgeCwgeTsKLSNpZmRlZiBTVFJFQU1JTkcKLSAgICBkZWJ1ZyhG MTAxLCJjaGt0aW1vIHN0cmVhbWluZyIsIiIsc3RyZWFtaW5nKTsKLSAgICBpZiAoc3RyZWFtaW5n KQotICAgICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotCi0gICAgZGVidWco RjEwMSwiY2hrdGltbyB0aW1vIiwiIix0aW1vKTsgLyogVGltZW91dCBiZWZvcmUgYWRqdXN0bWVu dCAqLwotICAgIGRlYnVnKEYxMDEsImNoa3RpbW8gZmxhZyIsIiIsZmxhZyk7Ci0KLSAgICBpZiAo ZmxhZykJCQkJLyogRG9uJ3QgY2hhbmdlIHRpbWVvdXQgaWYgdXNlciAqLwotICAgICAgcmV0dXJu KHRpbW8pOwkJCS8qIGdhdmUgU0VUIFNFTkQgVElNRU9VVCBjb21tYW5kLiAqLwotICAgIGRlYnVn KEYxMDEsImNoa3RpbW8gc3BtYXgiLCIiLHNwbWF4KTsKLSAgICBkZWJ1ZyhGMTAxLCJjaGt0aW1v IHVycHNpeiIsIiIsdXJwc2l6KTsKLQotICAgIGlmICghbmV0d29yaykgewkJCS8qIE9uIHNlcmlh bCBjb25uZWN0aW9ucy4uLiAqLwotCXNwZWVkID0gdHRnc3BkKCk7CQkvKiBHZXQgY3VycmVudCBz cGVlZC4gKi8KLQlpZiAoc3BlZWQgPiAwTCkgewotCSAgICBjcHMgPSBzcGVlZCAvIDEwTDsJCS8q IENvbnZlcnQgdG8gY2hhcnMgcGVyIHNlY29uZCAqLwotCSAgICBpZiAoY3BzID4gMEwpIHsKLQkJ bG9uZyBwbGVuOwkJLyogTWF4aW11bSBvZiBzZW5kIGFuZCByY3YgcGt0IHNpemUgKi8KLQkJeiA9 IGNwcyAqIChsb25nKSB0aW1vOwkvKiBDaGFycyBwZXIgdGltZW91dCBpbnRlcnZhbCAqLwotCQl6 IC09IHogLyAxMEw7CQkvKiBMZXNzIDEwIHBlcmNlbnQgKi8KLQkJcGxlbiA9IHNwbWF4OwotCQlp ZiAodXJwc2l6ID4gc3BtYXgpIHBsZW4gPSB1cnBzaXo7Ci0JCWRlYnVnKEYxMDEsImNoa3RpbW8g cGxlbiIsIiIscGxlbik7Ci0JCWlmICh6IDwgcGxlbikgewkJLyogQ29tcGFyZSB3aXRoIHBhY2tl dCBzaXplICovCi0JCSAgICB4ID0gKGludCkgKChsb25nKSBwbGVuIC8gY3BzKTsgLyogQWRqdXN0 IGlmIG5lY2Vzc2FyeSAqLwotCQkgICAgeSA9IHggLyAxMDsJCS8qIEFkZCAxMCBwZXJjZW50IGZv ciBzYWZldHkgKi8KLQkJICAgIGlmICh5IDwgMikgeSA9IDI7CS8qIE9yIDIgc2Vjb25kcywgd2hp Y2hldmVyIGlzIG1vcmUgKi8KLQkJICAgIHggKz0geTsKLQkJICAgIGlmICh4ID4gdGltbykJLyog SWYgdGhpcyBpcyBncmVhdGVyIHRoYW4gY3VycmVudCAqLwotCQkgICAgICB0aW1vID0geDsJCS8q IHRpbWVvdXQsIGNoYW5nZSB0aGUgdGltZW91dCAqLwotCQkgICAgZGVidWcoRjEwMSwiY2hrdGlt byBuZXcgdGltbyIsIiIsdGltbyk7Ci0JCX0KLQkgICAgfQotCX0KLSAgICB9Ci0gICAgcmV0dXJu KHRpbW8pOwotfQotDAotLyogIFMgUCBBIEMgSyAgLS0gIENvbnN0cnVjdCBhbmQgc2VuZCBhIHBh Y2tldCAgKi8KLQotLyoKLSAgc3BhY2soKSBzZW5kcyBhIHBhY2tldCBvZiB0aGUgZ2l2ZW4gdHlw ZSwgc2VxdWVuY2UgbnVtYmVyIG4sIHdpdGggbGVuIGRhdGEKLSAgY2hhcmFjdGVycyBwb2ludGVk IHRvIGJ5IGQsIGluIGVpdGhlciBhIHJlZ3VsYXIgb3IgZXh0ZW5kZWQtIGxlbmd0aCBwYWNrZXQs Ci0gIGRlcGVuZGluZyBvbiBsZW4uICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFs bHkgc2VudCwgb3IgZWxzZSAtMQotICB1cG9uIGZhaWx1cmUuICBVc2VzIGdsb2JhbCBucGFkLCBw YWRjaCwgbXlzdGNoLCBiY3R1LCBkYXRhLiAgTGVhdmVzIHBhY2tldAotICBmdWxseSBidWlsdCBh bmQgbnVsbC10ZXJtaW5hdGVkIGZvciBsYXRlciByZXRyYW5zbWlzc2lvbiBieSByZXNlbmQoKS4K LSAgVXBkYXRlcyBnbG9iYWwgc25kcGt0bCAoc2VuZC1wYWNrZXQgbGVuZ3RoKS4KLQotICBOT1RF OiBUaGUgZ2xvYmFsIHBvaW50ZXIgImRhdGEiIGlzIGFzc3VtZWQgdG8gcG9pbnQgaW50byB0aGUg N3RoIHBvc2l0aW9uCi0gIG9mIGEgY2hhcmFjdGVyIGFycmF5IChwcmVzdW1hYmx5IGluIHBhY2tl dCBidWZmZXIgZm9yIHRoZSBjdXJyZW50IHBhY2tldCkuCi0gIEl0IHdhcyB1c2VkIGJ5IGdldHBr dCgpIHRvIGJ1aWxkIHRoZSBwYWNrZXQgZGF0YSBmaWVsZC4gIHNwYWNrKCkgZmlsbHMgaW4KLSAg dGhlIGhlYWRlciB0byB0aGUgbGVmdCBvZiB0aGUgZGF0YSBwb2ludGVyICh0aGUgZGF0YSBwb2lu dGVyIGlzIGRlZmluZWQKLSAgaW4gZ2V0c2J1ZigpIGluIGNrY2ZuMy5jKS4gIElmIHRoZSBhZGRy ZXNzICJkIiBpcyB0aGUgc2FtZSBhcyAiZGF0YSIsIHRoZW4KLSAgdGhlIHBhY2tldCdzIGRhdGEg ZmllbGQgaGFzIGJlZW4gYnVpbHQgImluIHBsYWNlIiBhbmQgbmVlZCBub3QgYmUgY29waWVkLgot Ki8KLWludAotI2lmZGVmIENLX0FOU0lDCi1zcGFjayhjaGFyIHBrdHR5cCwgaW50IG4sIGludCBs ZW4sIENIQVIgKmQpCi0jZWxzZQotc3BhY2socGt0dHlwLG4sbGVuLGQpIGNoYXIgcGt0dHlwOyBp bnQgbiwgbGVuOyBDSEFSICpkOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBzcGFjayAqLyB7 Ci0gICAgcmVnaXN0ZXIgaW50IGk7Ci0gICAgaW50IGl4LCBqLCBrLCB4LCBscCwgbG9uZ3BrdCwg Y29weSwgbG9nbGVuOwotCi0jaWZkZWYgR0ZUSU1FUgotICAgIENLRkxPQVQgdDEgPSAwLjAsIHQy ID0gMC4wOwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLQotICAgIHJlZ2lzdGVyIENIQVIgKmNwLCAq bXlkYXRhOwotICAgIHVuc2lnbmVkIGNyYzsKLQotICAgIGNvcHkgPSAoZCAhPSBkYXRhKTsJCQkv KiBGbGFnIHdoZXRoZXIgZGF0YSBtdXN0IGJlIGNvcGllZCAgKi8KLQotI2lmZGVmIERFQlVHCi0g ICAgaWYgKGRlYmxvZykgewkJCS8qIFNhdmUgbG90cyBvZiBmdW5jdGlvbiBjYWxscyEgKi8KLQlk ZWJ1ZyhGMTAxLCJzcGFjayBuIiwiIixuKTsKLSNpZmRlZiBDT01NRU5UCi0JaWYgKHBrdHR5cCAh PSAnRCcpIHsJCS8qIERhdGEgcGFja2V0cyB3b3VsZCBiZSB0b28gbG9uZyAqLwotCSAgICBkZWJ1 ZyhGMTExLCJzcGFjayBkYXRhIixkYXRhLGRhdGEpOwotCSAgICBkZWJ1ZyhGMTExLCJzcGFjayBk IixkLGQpOwotCX0KLSNlbmRpZgkvKiBDT01NRU5UICovCi0JZGVidWcoRjEwMSwic3BhY2sgbGVu IiwiIixsZW4pOwotCWRlYnVnKEYxMDEsInNwYWNrIGNvcHkiLCIiLGNvcHkpOwotICAgIH0KLSNl bmRpZiAvKiBERUJVRyAqLwotCi0gICAgbG9uZ3BrdCA9IChsZW4gKyBiY3RsICsgMikgPiA5NDsJ LyogRGVjaWRlIHdoZXRoZXIgaXQncyBhIGxvbmcgcGFja2V0ICovCi0gICAgbXlkYXRhID0gZGF0 YSAtIDcgKyAobG9uZ3BrdCA/IDAgOiAzKTsgLyogU3RhcnRpbmcgcG9zaXRpb24gb2YgaGVhZGVy ICovCi0gICAgayA9IHNzZXF0Ymxbbl07CQkJLyogUGFja2V0IHN0cnVjdHVyZSBpbmZvIGZvciBw a3QgbiAqLwotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsJ CQkvKiBTYXZlIDIgbW9yZSBmdW5jdGlvbiBjYWxscy4uLiAqLwotCWRlYnVnKEYxMDEsInNwYWNr IG15ZGF0YSIsIiIsbXlkYXRhKTsKLQlkZWJ1ZyhGMTAxLCJzcGFjayBzc2VxdGJsW25dIiwiIixr KTsKLQlpZiAoayA8IDApIHsKLSNpZmRlZiBTVFJFQU1JTkcKLQkgICAgaWYgKCFzdHJlYW1pbmcp Ci0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0JICAgICAgZGVidWcoRjEwMSwic3BhY2sgc2VuZGlu ZyBwYWNrZXQgb3V0IG9mIHdpbmRvdyIsIiIsbik7Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBERUJV RyAqLwotI2VuZGlmCS8qIENPTU1FTlQgKi8KLSAgICBpZiAoayA+IC0xKSB7Ci0Jc19wa3Rba10u cGtfYWRyID0gbXlkYXRhOwkvKiBSZW1lbWJlciBhZGRyZXNzIG9mIHBhY2tldC4gKi8KLQlzX3Br dFtrXS5wa19zZXEgPSBuOwkJLyogUmVjb3JkIHNlcXVlbmNlIG51bWJlciAqLwotCXNfcGt0W2td LnBrX3R5cCA9IHBrdHR5cDsJLyogUmVjb3JkIHBhY2tldCB0eXBlICovCi0gICAgfQotICAgIHNw a3RsID0gMDsJCQkJLyogSW5pdGlhbGl6ZSBsZW5ndGggb2YgdGhpcyBwYWNrZXQgKi8KLSAgICBp ID0gMDsJCQkJLyogYW5kIHBvc2l0aW9uIGluIHBhY2tldC4gKi8KLQotLyogTm93IGZpbGwgdGhl IHBhY2tldCAqLwotCi0gICAgbXlkYXRhW2krK10gPSBteXN0Y2g7CQkvKiBNQVJLICovCi0gICAg bHAgPSBpKys7CQkJCS8qIFBvc2l0aW9uIG9mIExFTiwgZmlsbCBpbiBsYXRlciAqLwotCi0gICAg bXlkYXRhW2krK10gPSB0b2NoYXIobik7CQkvKiBTRVEgZmllbGQgKi8KLSAgICBteWRhdGFbaSsr XSA9IHBrdHR5cDsJCS8qIFRZUEUgZmllbGQgKi8KLSAgICBqID0gbGVuICsgYmN0bDsJCQkvKiBM ZW5ndGggb2YgZGF0YSArIGJsb2NrIGNoZWNrICovCi0gICAgaWYgKGxvbmdwa3QpIHsJCQkvKiBM b25nIHBhY2tldD8gKi8KLQlpbnQgeDsJCQkJLyogWWVzLCB3b3JrIGFyb3VuZCBTQ08gWGVuaXgv Mjg2ICovCi0jaWZkZWYgQ0tUVU5JTkcKLQl1bnNpZ25lZCBpbnQgY2hrOwotI2VuZGlmIC8qIENL VFVOSU5HICovCi0JeCA9IGogLyA5NTsJCQkvKiBjb21waWxlciBidWcuLi4gKi8KLSAgICAgICAg bXlkYXRhW2xwXSA9IHRvY2hhcigwKTsJCS8qIFNldCBMRU4gdG8gemVybyAqLwotICAgICAgICBt eWRhdGFbaSsrXSA9IHRvY2hhcih4KTsJLyogRXh0ZW5kZWQgbGVuZ3RoLCBoaWdoIGJ5dGUgKi8K LSAgICAgICAgbXlkYXRhW2krK10gPSB0b2NoYXIoaiAlIDk1KTsJLyogRXh0ZW5kZWQgbGVuZ3Ro LCBsb3cgYnl0ZSAqLwotI2lmZGVmIENLVFVOSU5HCi0gICAgICAgIC8qIEhlYWRlciBjaGVja3N1 bSAtIHNraXAgdGhlIGZ1bmN0aW9uIGNhbGxzIGFuZCBsb29wcyAqLwotCSAgY2hrID0gKHVuc2ln bmVkKSBteWRhdGFbbHBdICAgKwotCSAgICAgICAgKHVuc2lnbmVkKSBteWRhdGFbbHArMV0gKwot CSAgICAgICAgKHVuc2lnbmVkKSBteWRhdGFbbHArMl0gKwotCQkodW5zaWduZWQpIG15ZGF0YVts cCszXSArCi0JCSh1bnNpZ25lZCkgbXlkYXRhW2xwKzRdIDsKLQlteWRhdGFbaSsrXSA9IHRvY2hh cigoQ0hBUikgKCgoKGNoayAmIDAzMDApID4+IDYpICsgY2hrKSAmIDA3NykpOwotI2Vsc2UKLSAg ICAgICAgbXlkYXRhW2ldID0gJ1wwJzsJCS8qIFRlcm1pbmF0ZSBmb3IgaGVhZGVyIGNoZWNrc3Vt ICovCi0gICAgICAgIG15ZGF0YVtpKytdID0gdG9jaGFyKGNoazEobXlkYXRhK2xwLDUpKTsKLSNl bmRpZiAvKiBDS1RVTklORyAqLwotICAgIH0gZWxzZSBteWRhdGFbbHBdID0gdG9jaGFyKGorMik7 CS8qIE5vcm1hbCBMRU4gKi8KLS8qCi0gIFdoZW4gc2VuZGluZyBhIGZpbGUsIHRoZSBkYXRhIGlz IGFscmVhZHkgaW4gdGhlIHJpZ2h0IHBsYWNlLiAgSWYgaXQgd2VyZW4ndCwKLSAgaXQgbWlnaHQg bWFrZSBzZW5zZSB0byBvcHRpbWl6ZSB0aGlzIHNlY3Rpb24gYnkgdXNpbmcgbWVtY3B5IG9yIGJj b3B5Ci0gIChuZWl0aGVyIG9mIHdoaWNoIGFyZSBwb3J0YWJsZSksIGJ1dCBvbmx5IGlmIG91ciBw YWNrZXRzIHdlcmUgcmF0aGVyIGxvbmcuCi0gIFdoZW4gcmVjZWl2aW5nLCB3ZSdyZSBvbmx5IHNl bmRpbmcgQUNLcyBzbyBpdCBkb2Vzbid0IG1hdHRlci4gIFNvIGNvdW50IHRoZQotICBmb2xsb3dp bmcgbG9vcCBhcyBhIHNsZWVwaW5nIGRvZy4KLSovCi0gICAgaWYgKGNvcHkpCQkJCS8qIERhdGEg ZmllbGQgYnVpbHQgaW4gcGxhY2U/ICovCi0gICAgICBmb3IgKCA7IGxlbi0tOyBpKyspIG15ZGF0 YVtpXSA9ICpkKys7IC8qIE5vLCBtdXN0IGNvcHkuICovCi0gICAgZWxzZQkJCQkvKiBPdGhlcndp c2UsICovCi0gICAgICBpICs9IGxlbjsJCQkJLyogSnVzdCBza2lwIHBhc3QgZGF0YSBmaWVsZC4g Ki8KLSAgICBteWRhdGFbaV0gPSAnXDAnOwkJCS8qIE51bGwtdGVybWluYXRlIGZvciBjaGVja3N1 bSBjYWxjLiAqLwotCi0gICAgc3dpdGNoIChiY3R1KSB7CQkJLyogQmxvY2sgY2hlY2sgKi8KLSAg ICAgICAgY2FzZSAxOgkJCQkvKiAxID0gNi1iaXQgY2hrc3VtICovCi0JICAgIGl4ID0gaSAtIGxw OwkJLyogQXZvaWQgIm9yZGVyIG9mIG9wZXJhdGlvbiIgZXJyb3IgKi8KLQkgICAgbXlkYXRhW2kr K10gPSB0b2NoYXIoY2hrMShteWRhdGErbHAsaXgpKTsKLQkgICAgYnJlYWs7Ci0JY2FzZSAyOgkJ CQkvKiAyID0gMTItYml0IGNoa3N1bSAqLwotCSAgICBqID0gY2hrMihteWRhdGErbHAsaS1scCk7 Ci0JICAgIG15ZGF0YVtpKytdID0gKHVuc2lnbmVkKXRvY2hhcigoaiA+PiA2KSAmIDA3Nyk7Ci0g ICAJICAgIG15ZGF0YVtpKytdID0gKHVuc2lnbmVkKXRvY2hhcihqICYgMDc3KTsKLQkgICAgYnJl YWs7Ci0gICAgICAgIGNhc2UgMzoJCQkJLyogMyA9IDE2LWJpdCBDUkMgKi8KLQkgICAgY3JjID0g Y2hrMyhteWRhdGErbHAsaS1scCk7Ci0JICAgIG15ZGF0YVtpKytdID0gKHVuc2lnbmVkKXRvY2hh cigoKGNyYyAmIDAxNzAwMDApKSA+PiAxMik7Ci0JICAgIG15ZGF0YVtpKytdID0gKHVuc2lnbmVk KXRvY2hhcigoY3JjID4+IDYpICYgMDc3KTsKLQkgICAgbXlkYXRhW2krK10gPSAodW5zaWduZWQp dG9jaGFyKGNyYyAmIDA3Nyk7Ci0JICAgIGJyZWFrOwotCWNhc2UgNDoJCQkJLyogMiA9IDEyLWJp dCBjaGtzdW0sIGJsYW5rLWZyZWUgKi8KLQkgICAgaiA9IGNoazIobXlkYXRhK2xwLGktbHApOwot CSAgICBteWRhdGFbaSsrXSA9Ci0JICAgICAgKHVuc2lnbmVkKSh0b2NoYXIoKHVuc2lnbmVkKSgo KGogPj4gNikgJiAwNzcpICsgMSkpKTsKLSAgIAkgICAgbXlkYXRhW2krK10gPSAodW5zaWduZWQp KHRvY2hhcigodW5zaWduZWQpKChqICYgMDc3KSArIDEpKSk7Ci0JICAgIGJyZWFrOwotICAgIH0K LSAgICBsb2dsZW4gPSBpOwotICAgIG15ZGF0YVtpKytdID0gc2VvbDsJCQkvKiBFbmQgb2YgbGlu ZSAocGFja2V0IHRlcm1pbmF0b3IpICovCi0jaWZkZWYgVENQU09DS0VUCi0vKgotICBJZiBURUxO RVQgY29ubmVjdGlvbiBhbmQgcGFja2V0IHRlcm1pbmF0b3IgaXMgY2FycmlhZ2UgcmV0dXJuLAot ICB3ZSBtdXN0IHN0dWZmIGVpdGhlciBMRiBvciBOVUwsIGFjY29yZGluZyB0byBTRVQgVEVMTkVU IE5FV0xJTkUtTU9ERQotICAodG5fbmxtKSwgdG8gbWVldCB0aGUgVEVMTkVUIE5WVCBzcGVjaWZp Y2F0aW9uLCB1bmxlc3MgdXNlciBzYWlkIFJBVy4KLQotICBJZiBORVdMSU5FLU1PREUgaXMgc2V0 IHRvIExGIGluc3RlYWQgb2YgQ1IsIHdlIHN0aWxsIHNlbmQgQ1ItTlVMCi0gIG9uIGEgTlZUIGNv bm5lY3Rpb24gYW5kIENSIG9uIGEgYmluYXJ5IGNvbm5lY3Rpb24uCi0qLwotICAgIGlmICgKLSNp ZmRlZiBTVFJFQU1JTkcKLQkhZG9udHNlbmQgJiYKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLQko KG5ldHdvcmsgJiYgdHRucHJvdG8gPT0gTlBfVEVMTkVUKSB8fCAoIWxvY2FsICYmIHNzdGVsbmV0 KSkKLQkmJiBzZW9sID09IENSKSB7Ci0gICAgICAgIHN3aXRjaCAoVEVMT1BUX01FKFRFTE9QVF9C SU5BUlkpID8gdG5fYl9ubG0gOiB0bl9ubG0pIHsKLQkgIGNhc2UgVE5MX0NSOgkJCS8qIE5WVCBv ciBCSU5BUlkgKi8KLQkgICAgYnJlYWs7Ci0JICBjYXNlIFROTF9DUk5VTDoKLQkgICAgbXlkYXRh W2krK10gPSBOVUw7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBUTkxfQ1JMRjoKLQkgICAgbXlkYXRh W2krK10gPSBMRjsKLQkgICAgYnJlYWs7Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBUQ1BTT0NLRVQg Ki8KLSAgICBteWRhdGFbaV0gPSAnXDAnOwkJCS8qIFRlcm1pbmF0ZSBzdHJpbmcgKi8KLSAgICBp ZiAoCi0jaWZkZWYgU1RSRUFNSU5HCi0JIWRvbnRzZW5kICYmCi0jZW5kaWYgLyogU1RSRUFNSU5H ICovCi0JcGt0bG9nCi0JKQkJCQkvKiBTYXZlIGEgZnVuY3Rpb24gY2FsbCEgKi8KLSAgICAgIGxv Z3BrdCgncycsbixteWRhdGEsbG9nbGVuKTsJLyogTG9nIHRoZSBwYWNrZXQgKi8KLQotICAgIC8q IChQV1ApIGFkZCB0aGUgcGFyaXR5IHF1aWNrbHkgYXQgdGhlIGVuZCAqLwotICAgIGlmIChwYXJp dHkpIHsKLQlzd2l0Y2ggKHBhcml0eSkgewotCSAgY2FzZSAnZSc6CQkJLyogRXZlbiAqLwotCSAg ICBmb3IgKGNwID0gJm15ZGF0YVtpLTFdOyBjcCA+PSBteWRhdGE7IGNwLS0pCi0JICAgICAgKmNw ID0gcF90YmxbKmNwXTsKLQkgICAgYnJlYWs7Ci0JICBjYXNlICdtJzoJCQkvKiBNYXJrICovCi0J ICAgIGZvciAoY3AgPSAmbXlkYXRhW2ktMV07IGNwID49IG15ZGF0YTsgY3AtLSkKLQkgICAgICAq Y3AgfD0gMTI4OwotCSAgICBicmVhazsKLQkgIGNhc2UgJ28nOgkJCS8qIE9kZCAqLwotCSAgICBm b3IgKGNwID0gJm15ZGF0YVtpLTFdOyBjcCA+PSBteWRhdGE7IGNwLS0pCi0JICAgICAgKmNwID0g cF90YmxbKmNwXSBeIDEyODsKLQkgICAgYnJlYWs7Ci0JICBjYXNlICdzJzoJCQkvKiBTcGFjZSAq LwotCSAgICBmb3IgKGNwID0gJm15ZGF0YVtpLTFdOyBjcCA+PSBteWRhdGE7IGNwLS0pCi0JICAg ICAgKmNwICY9IDEyNzsKLQkgICAgYnJlYWs7Ci0JfQotICAgIH0KLSAgICBpZiAocGt0cGF1cykg bXNsZWVwKHBrdHBhdXMpOwkvKiBQYXVzZSBpZiByZXF1ZXN0ZWQgKi8KLSAgICB4ID0gMDsKLQot ICAgIGlmIChucGFkKSB7Ci0jaWZkZWYgU1RSRUFNSU5HCi0JaWYgKGRvbnRzZW5kKQotCSAgeCA9 IDA7Ci0JZWxzZQotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotCSAgeCA9IHR0b2wocGFkYnVmLG5w YWQpOwkvKiBTZW5kIGFueSBwYWRkaW5nICovCi0gICAgfQotICAgIGlmICh4ID4gLTEpIHsKLSNp ZmRlZiBDS19USU1FUlMKLQlpZiAodGltaW50ID4gMCkgewotCSAgICBpZiAocGt0dHlwID09ICdO JykKLQkgICAgICBzcnR0YmxbbiA+IDAgPyBuLTEgOiA2M10gPSBndGltZXIoKTsKLQkgICAgZWxz ZQotCSAgICAgIHNydHRibFtuXSA9IGd0aW1lcigpOwotCX0KLSNlbmRpZiAvKiBDS19USU1FUlMg Ki8KLQlzcGt0bCA9IGk7CQkJLyogUmVtZW1iZXIgcGFja2V0IGxlbmd0aCAqLwotCWlmIChrID4g LTEpCi0JICBzX3BrdFtrXS5wa19sZW4gPSBzcGt0bDsJLyogYWxzbyBpbiBwYWNrZXQgaW5mbyBz dHJ1Y3R1cmUgKi8KLQotI2lmZGVmIERFQlVHCi0jaWZkZWYgR0ZUSU1FUgotLyoKLSAgVGhpcyBj b2RlIHNob3dzIChpbiB0aGUgZGVidWcgbG9nKSBob3cgbG9uZyBpdCB0YWtlcyB3cml0ZSgpIHRv IGV4ZWN1dGUuCi0gIFNvbWV0aW1lcyBvbiBhIGNvbmdlc3RlZCBUQ1AgY29ubmVjdGlvbiwgaXQg Y2FuIHN1cnByaXNlIHlvdSAtLSA5MCBzZWNvbmRzCi0gIG9yIG1vcmUuLi4KLSovCi0JaWYgKAot I2lmZGVmIFNUUkVBTUlORwotCSAgICAhZG9udHNlbmQgJiYKLSNlbmRpZiAvKiBTVFJFQU1JTkcg Ki8KLQkgICAgZGVibG9nCi0JICAgICkKLQkgIHQxID0gZ2Z0aW1lcigpOwotI2VuZGlmIC8qIEdG VElNRVIgKi8KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0jaWZkZWYgU1RSRUFNSU5HCi0JaWYgKGRv bnRzZW5kKSB7Ci0JICAgIGRlYnVnKEYwMDAsIlNUUkVBTUlORyBzcGFjayBza2lwcGluZyIsIiIs cGt0dHlwKTsKLQkgICAgeCA9IDA7Ci0JfSBlbHNlCi0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0J eCA9IHR0b2wobXlkYXRhLHNwa3RsKTsJCS8qIFNlbmQgdGhlIHBhY2tldCAqLwotICAgIH0KLSNp ZmRlZiBTVFJFQU1JTkcKLSAgICBpZiAoIWRvbnRzZW5kKSB7Ci0jZW5kaWYgLyogU1RSRUFNSU5H ICovCi0JZGVidWcoRjEwMSwic3BhY2sgc3BrdGwiLCIiLHNwa3RsKTsKLQlkZWJ1ZyhGMTAxLCJz cGFjayB0dG9sIHJldHVybnMiLCIiLHgpOwotCWlmICh4IDwgMCkgewkJCS8qIEZhaWxlZC4gKi8K LQkgICAgaWYgKGxvY2FsICYmIHggPCAtMSkgewotCQl4eHNjcmVlbihTQ1JfU1QsU1RfRVJSLDBM LCJGQUlMRUQ6IENvbm5lY3Rpb24gbG9zdCIpOwotCQkvKiBXZSBjYW4ndCBzZW5kIGFuIEUgcGFj a2V0IGJlY2F1c2UgdGhlIGNvbm5lY3Rpb24gaXMgbG9zdC4gKi8KLQkJZXBrdHNlbnQgPSAxOwkJ LyogU28gcHJldGVuZCB3ZSBzZW50IG9uZS4gKi8KLQkJZmF0YWxpbyA9IDE7CQkvKiBSZW1lbWJl ciB3ZSBnb3QgYSBmYXRhbCBpL28gZXJyb3IgKi8KLQkJZG9sb2dlbmQoKTsKLQkJY2tzdHJuY3B5 KChjaGFyICopZXBrdG1zZywiQ29ubmVjdGlvbiBsb3N0IixQS1RNU0dMRU4pOwotCSAgICB9Ci0J ICAgIHJldHVybih4KTsKLQl9Ci0JaWYgKHNwa3RsID4gbWF4c2VuZCkJCS8qIEtlZXAgdHJhY2sg b2YgbG9uZ2VzdCBwYWNrZXQgc2VudCAqLwotCSAgbWF4c2VuZCA9IHNwa3RsOwotI2lmZGVmIERF QlVHCi0jaWZkZWYgR0ZUSU1FUgotCWlmIChkZWJsb2cpICB7CQkJLyogTG9nIGVsYXBzZWQgdGlt ZSBmb3Igd3JpdGUoKSAqLwotCSAgICB0MiA9IGdmdGltZXIoKTsKLQkgICAgZGVidWcoRjEwMSwi c3BhY2sgdHRvbCBtc2VjIiwiIiwobG9uZykoKHQyLXQxKSoxMDAwLjApKTsKLQl9Ci0jZW5kaWYg LyogR0ZUSU1FUiAqLwotI2VuZGlmIC8qIERFQlVHICovCi0jaWZkZWYgU1RSRUFNSU5HCi0gICAg fQotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotCi0gICAgc25kdHlwID0gcGt0dHlwOwkJCS8qIFJl bWVtYmVyIHBhY2tldCB0eXBlIGZvciBlY2hvcyAqLwotI2lmZGVmIFNUUkVBTUlORwotICAgIGlm ICghZG9udHNlbmQpIHsJCQkvKiBJZiByZWFsbHkgc2VudCwgKi8KLQlzcGFja2V0cysrOwkJCS8q IGNvdW50IGl0LiAqLwotCWZsY28gKz0gc3BrdGw7CQkJLyogQ291bnQgdGhlIGNoYXJhY3RlcnMg Ki8KLQl0bGNvICs9IHNwa3RsOwkJCS8qIGZvciBzdGF0aXN0aWNzLi4uICovCi0jaWZkZWYgREVC VUcKLQlpZiAoZGVibG9nKSB7CQkJLyogU2F2ZSB0d28gZnVuY3Rpb24gY2FsbHMhICovCi0JICAg IGR1bXBzYnVmKCk7CQkJLyogRHVtcCBzZW5kIGJ1ZmZlcnMgdG8gZGVidWcgbG9nICovCi0JICAg IGRlYnVnKEYxMTEsInNwYWNrIGNhbGxpbmcgc2NyZWVuLCBteWRhdGE9IixteWRhdGEsbik7Ci0J fQotI2VuZGlmIC8qIERFQlVHICovCi0gICAgfQotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotICAg IGlmIChsb2NhbCkgewotCWludCB4ID0gMDsKLQlpZiAoZmRpc3BsYSAhPSBYWUZEX04pIHggPSAx OwotCWlmICgoZmRpc3BsYSA9PSBYWUZEX0IpICYmIChwa3R0eXAgPT0gJ0QnIHx8IHBrdHR5cCA9 PSAnWScpKSB4ID0gMDsKLQlpZiAoeCkKLQkgIHh4c2NyZWVuKFNDUl9QVCxwa3R0eXAsKGxvbmcp biwoY2hhciAqKW15ZGF0YSk7IC8qIFVwZGF0ZSBzY3JlZW4gKi8KLSAgICB9Ci0gICAgcmV0dXJu KHNwa3RsKTsJCQkvKiBSZXR1cm4gbGVuZ3RoICovCi19Ci0KLS8qICBDIEggSyAxICAtLSAgQ29t cHV0ZSBhIHR5cGUtMSBLZXJtaXQgNi1iaXQgY2hlY2tzdW0uICAqLwotCi1pbnQKLWNoazEocGt0 LGxlbikgcmVnaXN0ZXIgQ0hBUiAqcGt0OyByZWdpc3RlciBpbnQgbGVuOyB7Ci0gICAgcmVnaXN0 ZXIgdW5zaWduZWQgaW50IGNoazsKLSNpZmRlZiBDS1RVTklORwotI2lmZGVmIENPTU1FTlQKLSAg ICByZWdpc3RlciB1bnNpZ25lZCBpbnQgbTsJCS8qIEF2b2lkIGZ1bmN0aW9uIGNhbGwgKi8KLSAg ICBtID0gKHBhcml0eSkgPyAwMTc3IDogMDM3NzsKLSAgICBmb3IgKGNoayA9IDA7IGxlbi0tID4g MDsgcGt0KyspCi0gICAgICBjaGsgKz0gKnBrdCAmIG07Ci0jZWxzZQotICAgIGNoayA9IDA7Ci0g ICAgd2hpbGUgKGxlbi0tID4gMCkgY2hrICs9ICh1bnNpZ25lZCkgKnBrdCsrOwotI2VuZGlmIC8q IENPTU1FTlQgKi8KLSNlbHNlCi0gICAgY2hrID0gY2hrMihwa3QsbGVuKTsKLSNlbmRpZiAvKiBD S1RVTklORyAqLwotICAgIGNoayA9ICgoKGNoayAmIDAzMDApID4+IDYpICsgY2hrKSAmIDA3NzsK LSAgICBkZWJ1ZyhGMTAxLCJjaGsxIiwiIixjaGspOwotICAgIHJldHVybigoaW50KSBjaGspOwot fQotCi0vKiAgQyBIIEsgMiAgLS0gIENvbXB1dGUgdGhlIG51bWVyaWMgc3VtIG9mIGFsbCB0aGUg Ynl0ZXMgaW4gdGhlIHBhY2tldC4gICovCi0KLXVuc2lnbmVkIGludAotY2hrMihwa3QsbGVuKSBy ZWdpc3RlciBDSEFSICpwa3Q7IHJlZ2lzdGVyIGludCBsZW47IHsKLSAgICByZWdpc3RlciBsb25n IGNoazsKLSNpZmRlZiBDT01NRU5UCi0gICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IG07Ci0gICAg bSA9IChwYXJpdHkpID8gMDE3NyA6IDAzNzc7Ci0gICAgZm9yIChjaGsgPSAwOyBsZW4tLSA+IDA7 IHBrdCsrKQotICAgICAgY2hrICs9ICpwa3QgJiBtOwotI2Vsc2UKLSAgICAvKiBQYXJpdHkgaGFz IGFscmVhZHkgYmVlbiBzdHJpcHBlZCAqLwotICAgIGNoayA9IDBMOwotICAgIHdoaWxlIChsZW4t LSA+IDApIGNoayArPSAodW5zaWduZWQpICpwa3QrKzsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0g ICAgZGVidWcoRjEwMSwiY2hrMiIsIiIsKHVuc2lnbmVkIGludCkgKGNoayAmIDA3Nzc3KSk7Ci0g ICAgcmV0dXJuKCh1bnNpZ25lZCBpbnQpIChjaGsgJiAwNzc3NykpOwotfQotCi0vKiAgQyBIIEsg MyAgLS0gIENvbXB1dGUgYSB0eXBlLTMgS2VybWl0IGJsb2NrIGNoZWNrLiAgKi8KLS8qCi0gQ2Fs Y3VsYXRlIHRoZSAxNi1iaXQgQ1JDLUNDSVRUIG9mIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyB1 c2luZyBhIGxvb2t1cAotIHRhYmxlLiAgQXNzdW1lcyB0aGUgYXJndW1lbnQgc3RyaW5nIGNvbnRh aW5zIG5vIGVtYmVkZGVkIG51bGxzLgotKi8KLSNpZmRlZiBDT01NRU5UCi11bnNpZ25lZCBpbnQK LWNoazMocGt0LHBhcml0eSxsZW4pIHJlZ2lzdGVyIENIQVIgKnBrdDsgaW50IHBhcml0eTsgcmVn aXN0ZXIgaW50IGxlbjsgewotICAgIHJlZ2lzdGVyIGxvbmcgYywgY3JjOwotICAgIHJlZ2lzdGVy IHVuc2lnbmVkIGludCBtOwotICAgIG0gPSAocGFyaXR5KSA/IDAxNzcgOiAwMzc3OwotICAgIGZv ciAoY3JjID0gMDsgbGVuLS0gPiAwOyBwa3QrKykgewotCWMgPSBjcmMgXiAobG9uZykoKnBrdCAm IG0pOwotCWNyYyA9IChjcmMgPj4gOCkgXiAoY3JjdGFbKGMgJiAweEYwKSA+PiA0XSBeIGNyY3Ri W2MgJiAweDBGXSk7Ci0gICAgfQotICAgIHJldHVybigodW5zaWduZWQgaW50KSAoY3JjICYgMHhG RkZGKSk7Ci19Ci0jZWxzZQotdW5zaWduZWQgaW50Ci1jaGszKHBrdCxsZW4pIHJlZ2lzdGVyIENI QVIgKnBrdDsgcmVnaXN0ZXIgaW50IGxlbjsgewotICAgIHJlZ2lzdGVyIGxvbmcgYywgY3JjOwot ICAgIGZvciAoY3JjID0gMDsgbGVuLS0gPiAwOyBwa3QrKykgewotCWMgPSBjcmMgXiAobG9uZyko KnBrdCk7Ci0JY3JjID0gKGNyYyA+PiA4KSBeIChjcmN0YVsoYyAmIDB4RjApID4+IDRdIF4gY3Jj dGJbYyAmIDB4MEZdKTsKLSAgICB9Ci0gICAgZGVidWcoRjEwMSwiY2hrMyIsIiIsKHVuc2lnbmVk IGludCkgKGNyYyAmIDB4RkZGRikpOwotICAgIHJldHVybigodW5zaWduZWQgaW50KSAoY3JjICYg MHhGRkZGKSk7Ci19Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0vKiAgTiBYIFQgUCBLIFQgIC0t ICBOZXh0IFBhY2tldCAgKi8KLS8qCi0gIEdldCBwYWNrZXQgbnVtYmVyIG9mIG5leHQgcGFja2V0 IHRvIHNlbmQgYW5kIGFsbG9jYXRlIGEgYnVmZmVyIGZvciBpdC4KLSAgUmV0dXJuczoKLSAgICAw IG9uIHN1Y2Nlc3MsIHdpdGggZ2xvYmFsIHBrdG51bSBzZXQgdG8gdGhlIHBhY2tldCBudW1iZXI7 Ci0gICAtMSBvbiBmYWlsdXJlIHRvIGFsbG9jYXRlIGJ1ZmZlciAoZmF0YWwpOwotICAgLTIgaWYg cmVzdWx0aW5nIHBhY2tldCBudW1iZXIgaXMgb3V0c2lkZSB0aGUgY3VycmVudCB3aW5kb3cuCi0q LwotaW50Ci1ueHRwa3QoKSB7CQkJCS8qIENhbGxlZCBieSBmaWxlIHNlbmRlciAqLwotICAgIGlu dCBqLCBuLCB4OwotCi0gICAgZGVidWcoRjEwMSwibnh0cGt0IHBrdG51bSIsIiIscGt0bnVtKTsK LSAgICBkZWJ1ZyhGMTAxLCJueHRwa3Qgd2lubG8gIiwiIix3aW5sbyk7Ci0gICAgbiA9IChwa3Ru dW0gKyAxKSAlIDY0OwkJLyogSW5jcmVtZW50IHBhY2tldCBudW1iZXIgbW9kIDY0ICovCi0gICAg ZGVidWcoRjEwMSwibnh0cGt0IG4iLCIiLG4pOwotI2lmZGVmIFNUUkVBTUlORwotICAgIGlmICgh c3RyZWFtaW5nKSB7Ci0JeCA9IGNoa3dpbihuLHdpbmxvLHdzbG90cyk7CS8qIERvbid0IGV4Y2Vl ZCB3aW5kb3cgYm91bmRhcnkgKi8KLQlkZWJ1ZyhGMTAxLCJueHRwa3QgY2hrd2luIiwiIix4KTsK LQlpZiAoeCkKLQkgIHJldHVybigtMik7Ci0JaiA9IGdldHNidWYobik7CQkJLyogR2V0IGEgYnVm ZmVyIGZvciBwYWNrZXQgbiAqLwotCWlmIChqIDwgMCkgewotCSAgICBkZWJ1ZyhGMTAxLCJueHRw a3QgZ2V0c2J1ZiBmYWlsdXJlIiwiIixqKTsKLQkgICAgcmV0dXJuKC0xKTsKLQl9Ci0gICAgfQot I2VuZGlmIC8qIFNUUkVBTUlORyAqLwotICAgIHBrdG51bSA9IG47Ci0gICAgcmV0dXJuKDApOwot fQotCi0vKiBGdW5jdGlvbnMgZm9yIHNlbmRpbmcgQUNLcyBhbmQgTkFLcyAqLwotCi0vKiBOb3Rl LCB3ZSBzaG91bGQgb25seSBBQ0sgdGhlIHBhY2tldCBhdCB3aW5kb3ctbG93ICh3aW5sbykgKi8K LS8qIEhvd2V2ZXIsIGlmIGFuIG9sZCBwYWNrZXQgYXJyaXZlcyBhZ2FpbiAoZS5nLiBiZWNhdXNl IHRoZSBBQ0sgd2Ugc2VudCAqLwotLyogZWFybGllciB3YXMgbG9zdCksIHdlIEFDSyBpdCBhZ2Fp bi4gKi8KLQotaW50Ci1hY2soKSB7CQkJCQkvKiBBY2tub3dsZWRnZSB0aGUgY3VycmVudCBwYWNr ZXQuICovCi0gICAgcmV0dXJuKGFja25zKHdpbmxvLChDSEFSICopIiIpKTsKLX0KLQotI2lmZGVm IFNUUkVBTUlORwotaW50Ci1mYXN0YWNrKCkgewkJCQkvKiBBY2tub3dsZWRnZSBwYWNrZXQgbiAq LwotICAgIGludCBqLCBrLCBuLCB4OwotICAgIG4gPSB3aW5sbzsKLQotICAgIGsgPSByc2VxdGJs W25dOwkJCS8qIEZpcnN0IGZpbmQgcmVjZWl2ZWQgcGFja2V0IG4uICovCi0gICAgZGVidWcoRjEw MSwiU1RSRUFNSU5HIGZhc3RhY2sgayIsIiIsayk7Ci0gICAgZnJlZXNidWYobik7CQkJLyogRnJl ZSBjdXJyZW50IHNlbmQtYnVmZmVyLCBpZiBhbnkgKi8KLSAgICBpZiAoKGogPSBnZXRzYnVmKG4p KSA8IDApIHsKLQkvKiBUaGlzIGNhbiBoYXBwZW4gaWYgd2UgaGF2ZSB0byByZS1BQ0sgYW4gb2xk IHBhY2tldCB0aGF0IGhhcyAqLwotICAgICAgICAvKiBhbHJlYWR5IGxlZnQgdGhlIHdpbmRvdy4g IEl0IGRvZXMgbm8gaGFybS4gKi8KLQlkZWJ1ZyhGMTAxLCJTVFJFQU1JTkcgZmFzdGFjayBjYW4n dCBnZXRzYnVmIiwiIixuKTsKLSAgICB9Ci0gICAgZG9udHNlbmQgPSAxOwotICAgIHggPSBzcGFj aygnWScsbiwwLChDSEFSICopIiIpOwkvKiBOb3cgc2VuZCBpdCAoYnV0IG5vdCByZWFsbHkpICov Ci0gICAgZG9udHNlbmQgPSAwOwotICAgIGlmICh4IDwgMCkgcmV0dXJuKHgpOwotICAgIGRlYnVn KEYxMDEsIlNUUkVBTUlORyBmYXN0YWNrIHgiLCIiLHgpOwotICAgIGlmIChrID4gLTEpCi0gICAg ICBmcmVlcmJ1ZihrKTsJCQkvKiBkb24ndCBuZWVkIGl0IGFueSBtb3JlICovCi0gICAgaWYgKGog PiAtMSkKLSAgICAgIGZyZWVzYnVmKGopOwkJCS8qIGFuZCBkb24ndCBuZWVkIHRvIGtlZXAgQUNL IGVpdGhlciAqLwotICAgIHdpbmxvID0gKHdpbmxvICsgMSkgJSA2NDsKLSAgICByZXR1cm4oMCk7 Ci19Ci0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0KLWludAotYWNrbnMobixzKSBpbnQgbjsgQ0hB UiAqczsgewkJLyogQWNrbm93bGVkZ2UgcGFja2V0IG4gKi8KLSAgICBpbnQgaiwgaywgeDsKLSAg ICBkZWJ1ZyhGMTExLCJhY2tucyIscyxuKTsKLQotICAgIGsgPSByc2VxdGJsW25dOwkJCS8qIEZp cnN0IGZpbmQgcmVjZWl2ZWQgcGFja2V0IG4uICovCi0gICAgZGVidWcoRjEwMSwiYWNrbnMgayIs IiIsayk7Ci0gICAgZnJlZXNidWYobik7CQkJLyogRnJlZSBjdXJyZW50IHNlbmQtYnVmZmVyLCBp ZiBhbnkgKi8KLSAgICBpZiAoKGogPSBnZXRzYnVmKG4pKSA8IDApIHsKLQkvKiBUaGlzIGNhbiBo YXBwZW4gaWYgd2UgaGF2ZSB0byByZS1BQ0sgYW4gb2xkIHBhY2tldCB0aGF0IGhhcyAqLwotICAg ICAgICAvKiBhbHJlYWR5IGxlZnQgdGhlIHdpbmRvdy4gIEl0IGRvZXMgbm8gaGFybS4gKi8KLQlk ZWJ1ZyhGMTAxLCJhY2tucyBjYW4ndCBnZXRzYnVmIiwiIixuKTsKLSAgICB9Ci0gICAgeCA9IHNw YWNrKCdZJyxuLChpbnQpc3RybGVuKChjaGFyICopcykscyk7IC8qIE5vdyBzZW5kIGl0LiAqLwot ICAgIGlmICh4IDwgMCkgcmV0dXJuKHgpOwotICAgIGRlYnVnKEYxMDEsImFja25zIHdpbmxvIiwi Iix3aW5sbyk7Ci0gICAgZGVidWcoRjEwMSwiYWNrbnMgbiIsIiIsbik7Ci0gICAgaWYgKG4gPT0g d2lubG8pIHsJCQkvKiBJZiB3ZSdyZSBhY2tpbmcgd2lubG8gKi8KLQlpZiAoayA+IC0xKQotCSAg ZnJlZXJidWYoayk7CQkJLyogZG9uJ3QgbmVlZCBpdCBhbnkgbW9yZSAqLwotCWlmIChqID4gLTEp Ci0JICBmcmVlc2J1ZihqKTsJCQkvKiBhbmQgZG9uJ3QgbmVlZCB0byBrZWVwIEFDSyBlaXRoZXIg Ki8KLQl3aW5sbyA9ICh3aW5sbyArIDEpICUgNjQ7Ci0gICAgfQotICAgIHJldHVybigwKTsKLX0K LQotaW50Ci1hY2tuKG4pIGludCBuOyB7CQkJLyogU2VuZCBBQ0sgZm9yIHBhY2tldCBudW1iZXIg biAqLwotICAgIHJldHVybihhY2tucyhuLChDSEFSICopIiIpKTsKLX0KLQotaW50Ci1hY2sxKHMp IENIQVIgKnM7IHsJCQkvKiBTZW5kIGFuIEFDSyB3aXRoIGRhdGEuICovCi0gICAgaWYgKCFzKSBz ID0gKENIQVIgKikiIjsKLSAgICBkZWJ1ZyhGMTEwLCJhY2sxIiwoY2hhciAqKXMsMCk7Ci0gICAg cmV0dXJuKGFja25zKHdpbmxvLHMpKTsKLX0KLQotLyogTiBBIEMgSyAgLS0gICBTZW5kIGEgTmVn YXRpdmUgQUNLbm93bGVkZ21lbnQuICovCi0vKgotIENhbGwgd2l0aCB0aGUgcGFja2V0IG51bWJl ciwgbiwgdG8gYmUgTkFLJ2QuCi0gUmV0dXJucyAtMSBpZiB0aGF0IHBhY2tldCBoYXMgYmVlbiBO QUsnZCB0b28gbWFueSB0aW1lcywgb3RoZXJ3aXNlIDAuCi0gQnR3LCBpdCBpcyBub3QgcmlnaHQg dG8gcmV0dXJuIDAgdW5kZXIgZXJyb3IgY29uZGl0aW9ucy4gIFRoaXMgaXMKLSBkb25lIGJlY2F1 c2UgdGhlIC0xIGNvZGUgaXMgdXNlZCBmb3IgY2FuY2VsbGluZyB0aGUgZmlsZSB0cmFuc2Zlci4K LSBNb3JlIHdvcmsgaXMgbmVlZGVkIGhlcmUuCi0qLwotaW50Ci1uYWNrKG4pIGludCBuOyB7Ci0g ICAgaW50IGksIHg7Ci0KLSAgICBpZiAobiA8IDAgfHwgbiA+IDYzKSB7Ci0JZGVidWcoRjEwMSwi bmFjayBiYWQgcGt0IG51bSIsIiIsbik7Ci0JcmV0dXJuKDApOwotICAgIH0gZWxzZSBkZWJ1ZyhG MTAxLCJuYWNrIiwiIixuKTsKLSAgICBpZiAoKGkgPSBzc2VxdGJsW25dKSA8IDApIHsJCS8qIElm IG5lY2Vzc2FyeSAqLwotCWlmIChnZXRzYnVmKG4pIDwgMCkgewkJLyogZ2V0IGEgYnVmZmVyIGZv ciB0aGlzIE5BSyAqLwotCSAgICBkZWJ1ZyhGMTAxLCJuYWNrIGNhbid0IGdldHNidWYiLCIiLG4p OwotCSAgICByZXR1cm4oMCk7Ci0JfSBlbHNlIGkgPSBzc2VxdGJsW25dOwkJLyogTmV3IHNsb3Qg bnVtYmVyICovCi0gICAgfQotICAgIGlmIChtYXh0cnkgPiAwICYmIHNfcGt0W2ldLnBrX3J0cisr ID4gbWF4dHJ5KSAvKiBIb3cgbWFueT8gKi8KLSAgICAgIHJldHVybigtMSk7CQkJLyogVG9vIG1h bnkuLi4gKi8KLQotLyogTm90ZSwgZG9uJ3QgZnJlZSB0aGlzIGJ1ZmZlci4gIEV2ZW50dWFsbHkg YW4gQUNLIHdpbGwgY29tZSwgYW5kIHRoYXQgKi8KLS8qIHdpbGwgc2V0IGl0IGZyZWUuICBJZiBu b3QsIHdlbGwsIGl0J3MgYmFjayB0byBncm91bmQgemVybyBhbnl3YXkuLi4gICovCi0KLSAgICB4 ID0gc3BhY2soJ04nLG4sMCwoQ0hBUiAqKSAiIik7CS8qIE5BS3MgbmV2ZXIgaGF2ZSBkYXRhLiAq LwotICAgIHJldHVybih4KTsKLX0KLQotI2lmbmRlZiBORVdEUEwJCQkJLyogVGhpcyByb3V0aW5l IG5vIGxvbmdlciB1c2VkICovCi0vKgotICogKFBXUCkgcmVjYWxjdWxhdGUgdGhlIG9wdGltYWwg cGFja2V0IGxlbmd0aCBpbiB0aGUgZmFjZSBvZiBlcnJvcnMuCi0gKiBUaGlzIGlzIGEgbW9kaWZp ZWQgdmVyc2lvbiBvZiB0aGUgYWxnb3JpdGhtIGJ5IEpvaG4gQ2hhbmRsZXIgaW4gS2VybWl0LzM3 MCwKLSAqIHNlZSAiRHluYW1pYyBQYWNrZXQgU2l6ZSBDb250cm9sIiwgS2VybWl0IE5ld3MsIFYy ICMxLCBKdW5lIDE5ODguCi0gKgotICogVGhpcyBpbXBsZW1lbnRhdGlvbiBtaW5pbWl6ZXMgdGhl IHRvdGFsIG92ZXJoZWFkIGVxdWF0aW9uLCB3aGljaCBpcwotICoKLSAqICAgVG90YWwgY2hhcnMg PSBmaWxlX2NoYXJzICsgKGhlYWRlcl9sZW4gKiBudW1fcGFja3MpCi0gKiAgICAgICAgICAgICAg ICAgICAgICAgICAgICArIChlcnJvcnMgKiAoaGVhZGVyX2xlbiArIHBhY2tldF9sZW4pKQotICoK LSAqIERpZmZlcmVudGlhdGUgd2l0aCByZXNwZWN0IHRvIG51bWJlciBvZiBjaGFycywgc29sdmUg Zm9yIHBhY2tldF9sZW4sIGdldDoKLSAqCi0gKiAgIHBhY2tldF9sZW4gPSBzcXJ0IChmaWxlX2No YXJzICogaGVhZGVyX2xlbiAvIGVycm9ycykKLSAqLwotCi0vKgotIChGREMpIE5ldyBzdXBlci1z aW1wbGUgYWxnb3JpdGhtLiAgSWYgdGhlcmUgd2FzIGFuIGVycm9yIGluIHRoZSBtb3N0IHJlY2Vu dAotIHBhY2tldCBleGNoYW5nZSwgY3V0IHRoZSBzZW5kLXBhY2tldCBzaXplIGluIGhhbGYsIGRv d24gdG8gYSBtaW5pbXVtIG9mIDIwLgotIElmIHRoZXJlIHdhcyBubyBlcnJvciwgaW5jcmVhc2Ug dGhlIHNpemUgYnkgNS80LCB1cCB0byB0aGUgbWF4aW11bSBuZWdvdGlhdGVkCi0gbGVuZ3RoLiAg U2VlbXMgdG8gYmUgbXVjaCBtb3JlIHJlc3BvbnNpdmUgdGhhbiBwcmV2aW91cyBhbGdvcml0aG0s IHdoaWNoIHRvb2sKLSBmb3JldmVyIHRvIHJlY292ZXIgdGhlIG9yaWdpbmFsIHBhY2tldCBsZW5n dGgsIGFuZCBpdCBhbHNvIHdlbnQgY3JhenkgdW5kZXIKLSBjZXJ0YWluIGNvbmRpdGlvbnMuCi0K LSBIZXJlJ3MgYW5vdGhlciBpZGVhIGZvciBwYWNrZXQgbGVuZ3RoIHJlc2l6aW5nIHRoYXQga2Vl cHMgYSBoaXN0b3J5IG9mIHRoZQotIGxhc3QgbiBwYWNrZXRzLiAgUHVzaCBhIDEgaW50byB0aGUg bGVmdCBlbmQgb2YgYW4gbi1iaXQgc2hpZnQgcmVnaXN0ZXIgaWYgdGhlCi0gY3VycmVudCBwYWNr ZXQgaXMgZ29vZCwgb3RoZXJ3aXNlIHB1c2ggYSB6ZXJvLiAgVGhlIGN1cnJlbnQgbi1iaXQgdmFs dWUsIHcsIG9mCi0gdGhpcyByZWdpc3RlciBpcyBhIHdlaWdodGVkIHN1bSBvZiB0aGUgbm9pc2Ug aGl0cyBmb3IgdGhlIGxhc3QgbiBwYWNrZXRzLCB3aXRoCi0gdGhlIG1vc3QgcmVjZW50IHdlaWdo aW5nIHRoZSBtb3N0LiAgVGhlIGN1cnJlbnQgcGFja2V0IGxlbmd0aCBpcyBzb21lIGZ1bmN0aW9u Ci0gb2YgdyBhbmQgdGhlIG5lZ290aWF0ZWQgcGFja2V0IGxlbmd0aCwgbGlrZToKLQotICAgKDJe biAtIHcpIC8gKDJebikgKiAobmVnb3RpYXRlZCBsZW5ndGgpCi0KLSBJZiB0aGUgcHJlc2VudCBy ZXNpemluZyBtZXRob2QgY2F1c2VzIHByb2JsZW1zLCB0aGluayBhYm91dCB0aGlzIG9uZSBhIGxp dHRsZQotIG1vcmUuCi0qLwotVk9JRAotcmNhbGNwc3ooKSB7Ci0KLSNpZmRlZiBDT01NRU5UCi0v KiBPbGQgd2F5ICovCi0gICAgcmVnaXN0ZXIgbG9uZyB4LCBxOwotICAgIGlmIChudW1lcnJzID09 IDApIHJldHVybjsJCS8qIGJvdW5kcyBjaGVjayBqdXN0IGluIGNhc2UgKi8KLQotICAgIC8qIG92 ZXJoZWFkIG9uIGEgZGF0YSBwYWNrZXQgaXMgbnBhZCs1K2JjdHIsIHBsdXMgMyBpZiBleHRlbmRl ZCBwYWNrZXQgKi8KLSAgICAvKiBhbiBBQ0sgaXMgNStiY3RyICovCi0KLSAgICAvKiBmaXJzdCBz ZXQgeCA9IHBlciBwYWNrZXQgb3ZlcmhlYWQgKi8KLSAgICBpZiAod3Nsb3RzID4gMSkJCQkvKiBT bGlkaW5nIHdpbmRvd3MgKi8KLSAgICAgIHggPSAobG9uZykgKG5wYWQrNStiY3RyKTsJCS8qIHBh Y2tldCBvbmx5LCBkb24ndCBjb3VudCBhY2sgKi8KLSAgICBlbHNlCQkJCS8qIFN0b3Atbi13YWl0 ICovCi0gICAgICB4ID0gKGxvbmcpIChucGFkKzUrMytiY3RyKzUrYmN0cik7IC8qIGNvdW50IHBh Y2tldCBhbmQgYWNrLiAqLwotCi0gICAgLyogdGhlbiBzZXQgeCA9IHBhY2tldCBsZW5ndGggKiog MiAqLwotICAgIHggPSB4ICogKCBmZmMgLyAoQ0tfT0ZGX1QpIG51bWVycnMpOyAvKiBjYXJlZnVs IG9mIG92ZXJmbG93ICovCi0KLSAgICAvKiBjYWxjdWxhdGUgdGhlIGxvbmcgaW50ZWdlciBzcXJ0 KHgpIHF1aWNrbHkgKi8KLSAgICBxID0gNTAwOwotICAgIHEgPSAocSArIHgvcSkgPj4gMTsKLSAg ICBxID0gKHEgKyB4L3EpID4+IDE7Ci0gICAgcSA9IChxICsgeC9xKSA+PiAxOwotICAgIHEgPSAo cSArIHgvcSkgPj4gMTsJCS8qIHNob3VsZCBjb252ZXJnZSBpbiBhYm91dCA0IHN0ZXBzICovCi0g ICAgaWYgKChxID4gOTQpICYmIChxIDwgMTMwKSkJLyogYnJlYWstZXZlbiBwb2ludCBmb3IgbG9u ZyBwYWNrZXRzICovCi0gICAgICBxID0gOTQ7Ci0gICAgaWYgKHEgPiBzcG1heCkgcSA9IHNwbWF4 OwkvKiBtYXhpbXVtIGJvdW5kcyAqLwotICAgIGlmIChxIDwgMTApIHEgPSAxMDsJCS8qIG1pbmlt dW0gYm91bmRzICovCi0gICAgc3BzaXogPSBxOwkJCS8qIHNldCBuZXcgc2VuZCBwYWNrZXQgc2l6 ZSAqLwotICAgIGRlYnVnKEYxMDEsInJjYWxjcHNpeiIsIiIscSk7Ci0jZWxzZQotLyogTmV3IHdh eSAqLwotICAgIGRlYnVnKEYxMDEsInJjYWxjcHNpeiBudW1lcnJzIiwiIixudW1lcnJzKTsKLSAg ICBkZWJ1ZyhGMTAxLCJyY2FsY3BzaXogc3BzaXoiLCIiLHNwc2l6KTsKLSAgICBpZiAoc3BhY2tl dHMgPCAzKSB7Ci0JbnVtZXJycyA9IDA7Ci0JcmV0dXJuOwotICAgIH0KLSAgICBpZiAobnVtZXJy cykKLSAgICAgIHNwc2l6ID0gc3BzaXogLyAyOwotICAgIGVsc2UKLSAgICAgIHNwc2l6ID0gKHNw c2l6IC8gNCkgKiA1OwotICAgIGlmIChzcHNpeiA8IDIwKSBzcHNpeiA9IDIwOwotICAgIGlmIChz cHNpeiA+IHNwbWF4KSBzcHNpeiA9IHNwbWF4OwotICAgIGRlYnVnKEYxMDEsInJjYWxjcHNpeiBu ZXcgc3BzaXoiLCIiLHNwc2l6KTsKLSAgICBudW1lcnJzID0gMDsKLSNlbmRpZiAvKiBDT01NRU5U ICovCi19Ci0jZW5kaWYgLyogTkVXRFBMICovCi0KLS8qICBSIEUgUyBFIE4gRCAgLS0gIFJldHJh bnNtaXQgcGFja2V0IG4uICAqLwotCi0vKgotICBSZXR1cm5zIDAgb3IgcG9zaXRpdmUgb24gc3Vj Y2VzcyAodGhlIG51bWJlciBvZiByZXRyaWVzIGZvciBwYWNrZXQgbikuCi0gIE9uIGZhaWx1cmUs IHJldHVybnMgYSBuZWdhdGl2ZSBudW1iZXIsIGFuZCBhbiBlcnJvciBtZXNzYWdlIGlzIHBsYWNl ZAotICBpbiByZWNwa3QuCi0qLwotaW50Ci1yZXNlbmQobikgaW50IG47IHsJCQkvKiBTZW5kIHBh Y2tldCBuIGFnYWluLiAqLwotICAgIGludCBqLCBrLCB4OwotI2lmZGVmIEdGVElNRVIKLSAgICBD S0ZMT0FUIHQxID0gMC4wLCB0MiA9IDAuMDsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0KLSAgICBk ZWJ1ZyhGMTAxLCJyZXNlbmQgc2VxIiwiIixuKTsKLQotICAgIGsgPSBjaGt3aW4obix3aW5sbyx3 c2xvdHMpOwkJLyogU2VlIGlmIHBhY2tldCBpbiBjdXJyZW50IHdpbmRvdyAqLwotICAgIGogPSAt MTsJCQkJLyogQXNzdW1lIGl0J3MgbG9zdCAqLwotICAgIGlmIChrID09IDApIGogPSBzc2VxdGJs W25dOwkJLyogU2VlIGlmIHdlIHN0aWxsIGhhdmUgYSBjb3B5IG9mIGl0ICovCi0gICAgaWYgKGsg IT0gMCB8fCBqIDwgMCkgewkJLyogSWYgbm90Li4uLiAqLwotCWlmIChuYWtzdGF0ZSAmJiBrID09 IDEpIHsKLS8qCi0gIFBhY2tldCBuIGlzIGluIHRoZSBwcmV2aW91cyB3aW5kb3cgYW5kIHdlIGFy ZSB0aGUgZmlsZSByZWNlaXZlci4KLSAgV2UgYWxyZWFkeSBzZW50IHRoZSBBQ0sgYW5kIGRlYWxs b2NhdGVkIGl0cyBidWZmZXIgc28gd2UgY2FuJ3QganVzdAotICByZXRyYW5zbWl0IHRoZSBBQ0su ICBSYXRoZXIgdGhhbiBnaXZlIHVwLCB3ZSB0cnkgc29tZSB0cmlja3MuLi4KLSovCi0JICAgIGlm IChuID09IDAgJiYgc3BhY2tldHMgPCA2MyAmJiBteWluaXRbMF0pIHsgLyogQUNLIHRvIFNlbmQt SW5pdCAqLwotLyoKLSAgSWYgdGhlIHBhY2tldCBudW1iZXIgaXMgMCwgYW5kIHdlJ3JlIGF0IHRo ZSBiZWdpbm5pbmcgb2YgYSBwcm90b2NvbAotICBvcGVyYXRpb24gKHNwYWNrZXRzIDwgNjMpLCB0 aGVuIHdlIGhhdmUgdG8gcmVzZW5kIHRoZSBBQ0sgdG8gYW4gSSBvciBTCi0gIHBhY2tldCwgY29t cGxldGUgd2l0aCBwYXJhbWV0ZXJzIGluIHRoZSBkYXRhIGZpZWxkLiAgU28gd2UgdGFrZSBhIGNo YW5jZSBhbmQKLSAgc2VuZCBhIGNvcHkgb2YgdGhlIHBhcmFtZXRlcnMgaW4gYW4gQUNLIHBhY2tl dCB3aXRoIGJsb2NrIGNoZWNrIHR5cGUgMS4KLSAgKE9yIDMgaWYgU0VUIEJMT0NLIDUuKQotKi8K LQkJaWYgKGJjdGYpIHsJCS8qIEZvcmNlIFR5cGUgMyBvbiBhbGwgcGFja2V0cz8gKi8KLQkJICAg eCA9IHNwYWNrKCdZJywwLChpbnQpc3RybGVuKChjaGFyICopbXlpbml0KSwoQ0hBUiAqKW15aW5p dCk7Ci0JCSAgICBpZiAoeCA8IDApIHJldHVybih4KTsKLQkJICAgIGxvZ3BrdCgnIycsbiwoQ0hB UiAqKSI8cmVjb25zdHJ1Y3RlZD4iLDApOyAvKiBMb2cgaXQgKi8KLQkJfSBlbHNlIHsJCS8qIFJl Z3VsYXIgS2VybWl0IHByb3RvY29sICovCi0JCSAgICBpbnQgYmN0bHNhdjsJLyogVGVtcG9yYXJ5 IHN0b3JhZ2UgKi8KLQkJICAgIGludCBiY3R1c2F2OwotCQkgICAgYmN0bHNhdiA9IGJjdGw7CS8q IFNhdmUgY3VycmVudCBibG9jayBjaGVjayBsZW5ndGggKi8KLQkJICAgIGJjdHVzYXYgPSBiY3R1 OwkvKiBhbmQgdHlwZSAqLwotCQkgICAgYmN0dSA9IGJjdGwgPSAxOwkvKiBTZXQgYmxvY2sgY2hl Y2sgdG8gMSAqLwotCQkgICB4ID0gc3BhY2soJ1knLDAsKGludClzdHJsZW4oKGNoYXIgKilteWlu aXQpLChDSEFSICopbXlpbml0KTsKLQkJICAgIGlmICh4IDwgMCkgcmV0dXJuKHgpOwotCQkgICAg bG9ncGt0KCcjJyxuLChDSEFSICopIjxyZWNvbnN0cnVjdGVkPiIsMCk7IC8qIExvZyBpdCAqLwot CQkgICAgYmN0dSA9IGJjdHVzYXY7CS8qIFJlc3RvcmUgYmxvY2sgY2hlY2sgdHlwZSAqLwotCQkg ICAgYmN0bCA9IGJjdGxzYXY7CS8qIGFuZCBsZW5ndGggKi8KLQkJfQotCSAgICB9IGVsc2UgewkJ CS8qIE5vdCB0aGUgZmlyc3QgcGFja2V0ICovCi0vKgotICBJdCdzIG5vdCB0aGUgZmlyc3QgcGFj a2V0IG9mIHRoZSBwcm90b2NvbCBvcGVyYXRpb24uICBJdCdzIHNvbWUgb3RoZXIgcGFja2V0Ci0g IHRoYXQgd2UgaGF2ZSBhbHJlYWR5IEFDSydkIGFuZCBmb3Jnb3R0ZW4gYWJvdXQuICBTbyB3ZSB0 YWtlIGEgY2hhbmNlIGFuZAotICBzZW5kIGFuIGVtcHR5IEFDSyB1c2luZyB0aGUgY3VycmVudCBi bG9jay1jaGVjayB0eXBlLiAgVXN1YWxseSB0aGlzIHdpbGwKLSAgd29yayBvdXQgT0sgKGxpa2Ug d2hlbiBhY2tpbmcgRGF0YSBwYWNrZXRzKSwgYW5kIG5vIGdyZWF0IGhhcm0gd2lsbCBiZSBkb25l Ci0gIGlmIGl0IHdhcyBzb21lIG90aGVyIGtpbmQgb2YgcGFja2V0IChGLCBldGMpLiAgSWYgd2Ug YXJlIHJlcXVlc3RpbmcgYW4KLSAgaW50ZXJydXB0aW9uIG9mIHRoZSBmaWxlIHRyYW5zZmVyLCB0 aGUgZmxhZ3MgYXJlIHN0aWxsIHNldCwgc28gd2UnbGwgY2F0Y2gKLSAgdXAgb24gdGhlIG5leHQg cGFja2V0LgotKi8KLQkJeCA9IHNwYWNrKCdZJyxuLDAsKENIQVIgKikgIiIpOwotCQlpZiAoeCA8 IDApIHJldHVybih4KTsKLQkgICAgfQotCSAgICByZXRyYW5zKys7Ci0JICAgIHh4c2NyZWVuKFND Ul9QVCwnJScsKGxvbmcpcGt0bnVtLCJSZXRyYW5zbWlzc2lvbiIpOwotCSAgICByZXR1cm4oMCk7 Ci0JfSBlbHNlIHsKLS8qCi0gIFBhY2tldCBudW1iZXIgaXMgbm90IGluIGN1cnJlbnQgb3IgcHJl dmlvdXMgd2luZG93LiAgV2Ugc2VlbSB0byBoaXQgdGhpcwotICBjb2RlIG9jY2FzaW9uYWxseSBh dCB0aGUgYmVnaW5uaW5nIG9mIGEgdHJhbnNhY3Rpb24sIGZvciBhcHBhcmVudGx5IG5vIGdvb2QK LSAgcmVhc29uLiAgTGV0J3MganVzdCBsb2cgaXQgZm9yIGRlYnVnZ2luZywgc2VuZCBub3RoaW5n LCBhbmQgdHJ5IHRvIHByb2NlZWQKLSAgd2l0aCB0aGUgcHJvdG9jb2wgcmF0aGVyIHRoYW4ga2ls bGluZyBpdC4KLSovCi0JICAgIGRlYnVnKEYxMDEsInJlc2VuZCBQS1QgTk9UIElOIFdJTkRPVyIs IiIsbik7Ci0JICAgIGRlYnVnKEYxMDEsInJlc2VuZCBrIiwiIixrKTsKLQkgICAgcmV0dXJuKDAp OwotCX0KLSAgICB9Ci0KLS8qIE9LLCBpdCdzIGluIHRoZSB3aW5kb3cgYW5kIGl0J3Mgbm90IGxv c3QuICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJyZXNlbmQgcGt0aW5mbyBpbmRleCIsIiIsayk7Ci0K LSAgICBpZiAobWF4dHJ5ID4gMCAmJiBzX3BrdFtqXS5wa19ydHIrKyA+IG1heHRyeSkgeyAvKiBP dmVyIHJldHJ5IGxpbWl0ICovCi0JeGl0c3RhIHw9IHdoYXQ7Ci0JcmV0dXJuKC0xKTsKLSAgICB9 Ci0gICAgZGVidWcoRjEwMSwicmVzZW5kIHJldHJ5IiwiIixzX3BrdFtqXS5wa19ydHIpOyAvKiBP SyBzbyBmYXIgKi8KLSAgICBkdW1wc2J1ZigpOwkJCQkvKiAoZGVidWdnaW5nKSAqLwotICAgIGlm IChzX3BrdFtqXS5wa190eXAgPT0gJyAnKSB7CS8qIEluY29tcGxldGVseSBmb3JtZWQgcGFja2V0 ICovCi0JaWYgKG5ha3N0YXRlKSB7CQkJLyogKFRoaXMgc2hvdWxkbid0IGhhcHBlbiBhbnkgbW9y ZSkgKi8KLQkgICAgbmFjayhuKTsKLQkgICAgcmV0cmFucysrOwotCSAgICB4eHNjcmVlbihTQ1Jf UFQsJyUnLChsb25nKXBrdG51bSwiKHJlc2VuZCkiKTsKLQkgICAgcmV0dXJuKHNfcGt0W2pdLnBr X3J0cik7Ci0JfSBlbHNlIHsJCQkvKiBObyBwYWNrZXQgdG8gcmVzZW5kISAqLwotI2lmZGVmIENP TU1FTlQKLS8qCi0gIFRoaXMgaGFwcGVuZWQgKG9uY2UpIHdoaWxlIHNlbmRpbmcgYSBmaWxlIHdp dGggMiB3aW5kb3cgc2xvdHMgYW5kIHR5cGluZwotICBYIHRvIHRoZSBzZW5kZXIgdG8gY2FuY2Vs IHRoZSBmaWxlLiAgQnV0IHNpbmNlIHdlJ3JlIGNhbmNlbGxpbmcgYW55d2F5LAotICB0aGVyZSdz IG5vIG5lZWQgdG8gZ2l2ZSBhIHNjYXJ5IG1lc3NhZ2UuCi0qLwotCSAgICBzcHJpbnRmKChjaGFy ICopZXBrdG1zZywKLQkJICAgICJyZXNlbmQgbG9naWMgZXJyb3I6IE5QUywgbj0lZCwgaj0lZC4i LG4saik7Ci0JICAgIHJldHVybigtMik7Ci0jZWxzZQotLyogSnVzdCBpZ25vcmUgaXQuICovCi0J ICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0JfQotICAgIH0KLSNpZmRlZiBE RUJVRwotI2lmZGVmIEdGVElNRVIKLSAgICBpZiAoZGVibG9nKSB0MSA9IGdmdGltZXIoKTsKLSNl bmRpZiAvKiBHRlRJTUVSICovCi0jZW5kaWYgLyogREVCVUcgKi8KLQotICAgIC8qIEV2ZXJ5dGhp bmcgb2ssIHNlbmQgdGhlIHBhY2tldCAqLwotI2lmZGVmIENLX1RJTUVSUwotICAgIGlmICh0aW1p bnQgPiAwKQotICAgICAgc3J0dGJsW25dID0gZ3RpbWVyKCk7CQkvKiBVcGRhdGUgdGhlIHRpbWVy ICovCi0jZW5kaWYgLyogQ0tfVElNRVJTICovCi0gICAgeCA9IHR0b2woc19wa3Rbal0ucGtfYWRy LHNfcGt0W2pdLnBrX2xlbik7Ci0KLSNpZmRlZiBERUJVRwotI2lmZGVmIEdGVElNRVIKLSAgICBp ZiAoZGVibG9nKSAgewotCXQyID0gZ2Z0aW1lcigpOwotCWRlYnVnKEYxMDEsInJlc2VuZCB0dG9s IG1zZWMiLCIiLChsb25nKSgodDItdDEpKjEwMDAuMCkpOwotICAgIH0KLSNlbmRpZiAvKiBHRlRJ TUVSICovCi0jZW5kaWYgLyogREVCVUcgKi8KLSAgICBkZWJ1ZyhGMTAxLCJyZXNlbmQgdHRvbCBy ZXR1cm5zIiwiIix4KTsKLQotICAgIHJldHJhbnMrKzsJCQkJLyogQ291bnQgYSByZXRyYW5zbWlz c2lvbiAqLwotICAgIHh4c2NyZWVuKFNDUl9QVCwnJScsKGxvbmcpcGt0bnVtLCIocmVzZW5kKSIp OyAvKiBUZWxsIHVzZXIgYWJvdXQgcmVzZW5kICovCi0gICAgbG9ncGt0KCdTJyxuLHNfcGt0W2pd LnBrX2Fkciwgc19wa3Rbal0ucGtfbGVuKTsgLyogTG9nIHRoZSByZXNlbnQgcGFja2V0ICovCi0g ICAgcmV0dXJuKHNfcGt0W2pdLnBrX3J0cik7CQkvKiBSZXR1cm4gdGhlIG51bWJlciBvZiByZXRy aWVzLiAqLwotfQotCi0vKiAgRSBSIFIgUCBLIFQgIC0tICBTZW5kIGFuIEVycm9yIFBhY2tldCAg Ki8KLQotaW50Ci1lcnJwa3QocmVhc29uKSBDSEFSICpyZWFzb247IHsJCS8qIC4uLmNvbnRhaW5p bmcgdGhlIHJlYXNvbiBnaXZlbiAqLwotICAgIGV4dGVybiBpbnQgcnRpbW8sIHN0YXRlLCBqdXN0 b25lOwotICAgIGludCB4LCB5OwotICAgIGN6c2VlbiA9IDE7CQkJCS8qIEFsc28gY2FuY2VscyBi YXRjaCAqLwotICAgIHN0YXRlID0gMDsJCQkJLyogUmVzZXQgcHJvdG9jb2wgc3RhdGUgKi8KLSAg ICBkZWJ1ZyhGMTEwLCJlcnJwa3QiLHJlYXNvbiwwKTsKLSAgICB0bG9nKEYxMTAsIlByb3RvY29s IEVycm9yOiIsKGNoYXIgKilyZWFzb24sMEwpOwotICAgIHh4c2NyZWVuKFNDUl9FTSwwLDBMLHJl YXNvbik7Ci0gICAgZW5jc3RyKHJlYXNvbik7Ci0gICAgeCA9IHNwYWNrKCdFJyxwa3RudW0sc2l6 ZSxkYXRhKTsKLSAgICBja3N0cm5jcHkoKGNoYXIgKillcGt0bXNnLChjaGFyICopcmVhc29uLFBL VE1TR0xFTik7Ci0gICAgeSA9IHF1aWV0OyBxdWlldCA9IDE7IGVwa3RzZW50ID0gMTsJLyogQ2xv c2UgZmlsZXMgc2lsZW50bHkuICovCi0gICAgY2xzaWYoKTsgY2xzb2YoMSk7Ci0gICAgcXVpZXQg PSB5OwotLyoKLSAgSSBqdXN0IHNlbnQgYW4gRS1wYWNrZXQuICBJJ20gaW4gbG9jYWwgbW9kZSwg SSB3YXMgcmVjZWl2aW5nIGEgZmlsZSwKLSAgSSdtIG5vdCBhIHNlcnZlciwgYW5kIHNsaWRpbmcg d2luZG93cyBhcmUgaW4gdXNlLiAgVGhlcmVmb3JlLCB0aGVyZSBhcmUKLSAgbGlrZWx5IHRvIGJl IGEgYnVuY2ggb2YgcGFja2V0cyBhbHJlYWR5ICJpbiB0aGUgcGlwZSIgb24gdGhlaXIgd2F5IHRv IG1lCi0gIGJ5IHRoZSB0aW1lIHRoZSByZW1vdGUgc2VuZGVyIGdldHMgdGhlIEUtcGFja2V0LiAg U28gdGhlIG5leHQgdGltZSBJCi0gIENPTk5FQ1Qgb3IgdHJ5IHRvIHN0YXJ0IGFub3RoZXIgcHJv dG9jb2wgb3BlcmF0aW9uLCBJIGFtIGxpa2VseSB0byBiZWNvbWUKLSAgdGVycmlibHkgY29uZnVz ZWQgYnkgdG9ycmVudHMgb2YgaW5jb21pbmcgbWF0ZXJpYWwuICBUbyBwcmV2ZW50IHRoaXMsCi0g IHRoZSBmb2xsb3dpbmcgY29kZSBzb2FrcyB1cCBwYWNrZXRzIGZyb20gdGhlIGNvbm5lY3Rpb24g dW50aWwgdGhlcmUgaXMgYW4KLSAgZXJyb3Igb3IgdGltZW91dCwgd2l0aG91dCB3YXN0aW5nIHRv byBtdWNoIHRpbWUgd2FpdGluZy4KLQotICBFeGFjdGx5IHRoZSBzYW1lIHByb2JsZW0gb2NjdXJz IHdoZW4gSSBhbSBpbiByZW1vdGUgbW9kZSBvciBpZiBJIGFtCi0gIGluIHNlcnZlciBtb2RlIHdp dGggdGhlIGp1c3RvbmUgZmxhZyBzZXQuICBJbiByZW1vdGUgbW9kZSBub3Qgb25seQotICBkb2Vz IHRoZSBwYWNrZXQgZGF0YSBwb3RlbnRpYWxseSBnZXQgZWNobydkIGJhY2sgdG8gdGhlIHNlbmRl ciB3aGljaAotICBpcyBjb25mdXNpbmcgdG8gdGhlIHVzZXIgaW4gQ09OTkVDVCBtb2RlLCBidXQg aXQgYWxzbyBtYXkgcmVzdWx0IGluIHRoZQotICBob3N0IHBlcmZvcm1pbmcgYml6YXJyZSBhY3Rp b25zIHN1Y2ggYXMgc3VzcGVuZGluZyB0aGUgcHJvY2VzcyBpZiBeWiBpcwotICB1bnByZWZpeGVk LCBldGMuCi0KLSAgRnVydGhlcm1vcmUsIHRob3VzYW5kcyBvZiBwYWNrZXRzIGJ5dGVzIGluIHRo ZSBkYXRhIHN0cmVhbSBwcmV2ZW50IHRoZQotICBjbGllbnQgZnJvbSBiZWluZyBhYmxlIHRvIHBy b2Nlc3MgVGVsbmV0IEtlcm1pdCBPcHRpb24gbmVnb3RpYXRpb25zCi0gIHByb3Blcmx5LgotKi8K LSNpZmRlZiBTVFJFQU1JTkcKLSAgICAvKiBCZWNhdXNlIHN0cmVhbWluZyBzZXRzIHRoZSB0aW1l b3V0IHRvIDAuLi4gKi8KLSAgICBpZiAoc3RyZWFtaW5nKSB7Ci0JdGltaW50ID0gcmN2dGltbyA9 IHJ0aW1vOwotCXN0cmVhbWluZyA9IDA7Ci0gICAgfQotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwot ICAgIGlmICh3aGF0ICYgV19SRUNWICYmCi0gICAgICAgICghc2VydmVyIHx8IChzZXJ2ZXIgJiYg anVzdG9uZSkpICYmCi0gICAgICAgICh3c2xvdHMgPiAxCi0jaWZkZWYgU1RSRUFNSU5HCi0JIHx8 IHN0cmVhbWluZwotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotCSApKSB7Ci0jaWZkZWYgR0ZUSU1F UgotCUNLRkxPQVQgb2xkc2VjLCBzZWMgPSAoQ0tGTE9BVCkgMC4wOwotI2Vsc2UKLQlpbnQgb2xk c2VjLCBzZWMgPSAwOwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLQlkZWJ1ZyhGMTAxLCJlcnJwa3Qg ZHJhaW5pbmciLCIiLHdzbG90cyk7Ci0JeHhzY3JlZW4oU0NSX1NULFNUX01TRywwbCwiRHJhaW5p bmcgaW5jb21pbmcgcGFja2V0cywgd2FpdC4uLiIpOwotCXdoaWxlICh4ID4gLTEpIHsJCS8qIERv bid0IGJvdGhlciBpZiBubyBjb25uZWN0aW9uICovCi0JICAgIG9sZHNlYyA9IHNlYzsKLSNpZmRl ZiBHRlRJTUVSCi0JICAgIHNlYyA9IGdmdGltZXIoKTsKLQkgICAgaWYgKG9sZHNlYyAhPSAoQ0tG TE9BVCkgMC4wKQotCSAgICAgIHRpbWludCA9IHJjdnRpbW8gPSAoaW50KSAoc2VjIC0gb2xkc2Vj ICsgMC41KTsKLSNlbHNlCi0JICAgIHNlYyA9IGd0aW1lcigpOwotCSAgICBpZiAob2xkc2VjICE9 IDApCi0JICAgICAgdGltaW50ID0gcmN2dGltbyA9IHNlYyAtIG9sZHNlYyArIDE7Ci0jZW5kaWYg LyogR0ZUSU1FUiAqLwotCSAgICBpZiAodGltaW50IDwgMSkKLQkgICAgICB0aW1pbnQgPSByY3Z0 aW1vID0gMTsKLQkgICAgbXNsZWVwKDUwKTsJCQkvKiBBbGxvdyBhIGJpdCBvZiBzbG9wICovCi0J ICAgIHggPSBycGFjaygpOwkJLyogUmVhZCBhIHBhY2tldCAqLwotCSAgICBpZiAoeCA9PSAnVCcg fHwgeCA9PSAneicpCS8qIFRpbWVkIG91dCBtZWFucyB3ZSdyZSBkb25lICovCi0JICAgICAgYnJl YWs7Ci0JICAgIHh4c2NyZWVuKFNDUl9QVCx4LHJzbiwiIik7CS8qIExldCB1c2VyIGtub3cgKi8K LQl9Ci0JeHhzY3JlZW4oU0NSX1NULFNUX01TRywwbCwiRHJhaW4gY29tcGxldGUuIik7Ci0gICAg fQotICAgIGlmICgoeCA9ICh3aGF0ICYgV19LRVJNSVQpKSkKLSAgICAgIHhpdHN0YSB8PSB4OwkJ CS8qIFJlbWVtYmVyIHdoYXQgZmFpbGVkLiAqLwotICAgIHN1Y2Nlc3MgPSAwOwotICAgIHJldHVy bih5KTsKLX0KLQotLyogc2NtZCgpICAtLSAgU2VuZCBhIHBhY2tldCBvZiB0aGUgZ2l2ZW4gdHlw ZSAqLwotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotc2NtZChjaGFyIHQsIENIQVIgKmRhdCkKLSNl bHNlCi1zY21kKHQsZGF0KSBjaGFyIHQ7IENIQVIgKmRhdDsKLSNlbmRpZiAvKiBDS19BTlNJQyAq LwotLyogc2NtZCAqLyB7Ci0gICAgaW50IHg7Ci0gICAgZXh0ZXJuIGNoYXIgKiBzcmltc2c7Ci0g ICAgZGVidWcoRjAwMCwic2NtZCIsZGF0LHQpOwotICAgIGlmIChlbmNzdHIoZGF0KSA8IDApIHsJ CS8qIEVuY29kZSB0aGUgY29tbWFuZCBzdHJpbmcgKi8KLQlzcmltc2cgPSAiU3RyaW5nIHRvbyBs b25nIjsKLQlyZXR1cm4oLTEpOwotICAgIH0KLSAgICB4ID0gc3BhY2sodCxwa3RudW0sc2l6ZSxk YXRhKTsKLSAgICBkZWJ1ZyhGMTAxLCJzY21kIHNwYWNrIiwiIix4KTsKLSAgICByZXR1cm4oeCk7 Ci19Ci0KLS8qIENvbXBvc2UgYW5kIFNlbmQgR0VUIHBhY2tldCAqLwotCi1zdHJ1Y3Qgb3BrdHBh cm0gewkJCS8qIE8tUGFja2V0IGl0ZW0gbGlzdCAqLwotICAgIENIQVIgKiBvcGt0aXRlbTsKLSAg ICBzdHJ1Y3Qgb3BrdHBhcm0gKiBvcGt0bmV4dDsKLX07Ci0KLXN0cnVjdCBvcGt0cGFybSAqIG9w a3RoZWFkID0gTlVMTDsJLyogTGlua2VkIGxpc3Qgb2YgTy1wYWNrZXQgZmllbGRzICovCi1pbnQg b3BrdGNudCA9IDA7CQkJLyogTy1QYWNrZXQgY291bnRlciAqLwotY2hhciAqIHNyaW1zZyA9IE5V TEw7CQkJLyogR0VULVBhY2tldCBlcnJvciBtZXNzYWdlICovCi0KLS8qIFMgTyBQIEsgVCAgLS0g IFNlbmQgTy1QYWNrZXQgKi8KLS8qCi0gIFNlbmRzIG9uZSBPLVBhY2tldCBlYWNoIHRpbWUgY2Fs bGVkLCB1c2luZyBmaXJzdC1maXQgbWV0aG9kIG9mIGZpbGxpbmcKLSAgdGhlIHBhY2tldCBmcm9t IGxpbmtlZCBsaXN0IG9mIHBhcmFtZXRlcnMgcG9pbnRlZCB0byBieSBvcGt0aGVhZC4KLSAgVG8g YmUgY2FsbGVkIHJlcGVhdGVkbHkgdW50aWwgbGlzdCBpcyBlbXB0eSBvciB0aGVyZSBpcyBhbiBl cnJvci4KLSAgUmV0dXJuczoKLSAgIC0xIG9uIGZhaWx1cmUuCi0gICAgMCBvbiBzdWNjZXNzIGFu ZCBubyBtb3JlIGZpZWxkcyBsZWZ0IHRvIHNlbmQuCi0gICAgMSBvbiBzdWNjZXNzIGJ1dCB3aXRo IG1vcmUgZmllbGRzIGxlZnQgdG8gYmUgc2VudC4KLSovCi0KLWludAotc29wa3QoKSB7Ci0gICAg aW50IG4gPSAwOwkJCQkvKiBGaWVsZCBudW1iZXIgaW4gdGhpcyBwYWNrZXQgKi8KLSAgICBpbnQg cmMgPSAwOwkJCQkvKiBSZXR1cm4gY29kZSAqLwotICAgIGludCBsZW4gPSAwOwkJCS8qIERhdGEg ZmllbGQgbGVuZ3RoICovCi0gICAgY2hhciBjID0gTlVMOwotICAgIHN0cnVjdCBvcGt0cGFybSAq IG8gPSBOVUxMOwotICAgIHN0cnVjdCBvcGt0cGFybSAqIHQgPSBOVUxMOwotICAgIHN0cnVjdCBv cGt0cGFybSAqIHByZXYgPSBOVUxMOwotICAgIENIQVIgKiBkc2F2ZSA9IGRhdGE7Ci0gICAgaW50 IHgsIHNzYXZlID0gc3BzaXo7Ci0KLSAgICBzcmltc2cgPSBOVUxMOwkJCS8qIEVycm9yIG1lc3Nh Z2UgKi8KLSAgICBvID0gb3BrdGhlYWQ7CQkJLyogUG9pbnQgdG8gaGVhZCBvZiBsaXN0ICovCi0g ICAgaWYgKCFvKSB7CQkJCS8qIE9vcHMsIG5vIGxpc3QuLi4gKi8KLQlzcmltc2cgPSAiR0VUIFBh Y2tldCBJbnRlcm5hbCBFcnJvciAxIjsKLQlkZWJ1ZyhGMTAwLCJzb3BrdCBOVUxMIGxpc3QiLCIi LDApOwotCXJldHVybigtMSk7Ci0gICAgfQotICAgIHdoaWxlIChvKSB7CQkJCS8qIEdvIHRocnUg bGlua2VkIGxpc3QuLi4gKi8KLQljID0gKihvLT5vcGt0aXRlbSk7CQkvKiBQYXJhbWV0ZXIgY29k ZSAqLwotCWRlYnVnKEYwMDAsInNvcGt0IixvLT5vcGt0aXRlbSxjKTsKLQl4ID0gZW5jc3RyKChD SEFSICopby0+b3BrdGl0ZW0pOwotCWRlYnVnKEYxMTEsInNvcGt0IGVuY3N0ciIsZHNhdmUseCk7 Ci0JaWYgKHggPCAwKSB7CQkJLyogRW5jb2RlIHRoaXMgaXRlbSAqLwotCSAgICBpZiAobiA9PSAw KSB7CQkvKiBGYWlsdXJlLCBmaXJzdCBmaWVsZCBpbiBwYWNrZXQgKi8KLQkJZGVidWcoRjEwMCwi c29wa3Qgb3ZlcmZsb3ciLCIiLDApOwotCQlzcHNpeiA9IHNzYXZlOwkJLyogUmVzdG9yZSB0aGVz ZSAqLwotCQlkYXRhID0gZHNhdmU7Ci0JCW8gPSBvcGt0aGVhZDsJCS8qIEZyZWUgbGlua2VkIGxp c3QgKi8KLQkJd2hpbGUgKG8pIHsKLQkJICAgIGlmIChvLT5vcGt0aXRlbSkgZnJlZShvLT5vcGt0 aXRlbSk7Ci0JCSAgICB0ID0gby0+b3BrdG5leHQ7Ci0JCSAgICBmcmVlKChjaGFyICopbyk7Ci0J CSAgICBvID0gdDsKLQkJfQotCQlvcGt0aGVhZCA9IE5VTEw7Ci0JCXNyaW1zZyA9ICJHRVQgUGFj a2V0IFRvbyBMb25nIGZvciBTZXJ2ZXIiOwotCQlyZXR1cm4oLTEpOwkJLyogRmFpbCAqLwotCSAg ICB9IGVsc2UgewkJCS8qIE5vdCBmaXJzdCBmaWVsZCBpbiBwYWNrZXQgKi8KLQkJZGVidWcoRjEx MCwic29wa3QgbGVmdG92ZXIiLG8tPm9wa3RpdGVtLDApOwotCQlwcmV2ID0gbzsJCS8qIE1ha2Ug dGhpcyBvbmUgdGhlIG5ldyBwcmV2aW91cyAqLwotCQlvID0gby0+b3BrdG5leHQ7CS8qIEdldCBu ZXh0ICovCi0JCWMgPSBOVUw7CQkvKiBTbyB3ZSBrbm93IHdlJ3JlIG5vdCBkb25lICovCi0JCSpk YXRhID0gTlVMOwkJLyogRXJhc2UgYW55IHBhcnRpYWwgZW5jb2RpbmcgKi8KLQkJY29udGludWU7 CQkvKiBXZSBjYW4gdHJ5IHRoaXMgb25lIGFnYWluIGxhdGVyICovCi0JICAgIH0KLQl9Ci0Jbisr OwkJCQkvKiBFbmNvZGluZyB3YXMgc3VjY2Vzc2Z1bCAqLwotCWRlYnVnKEYxMTEsInNvcGt0IGZp ZWxkIixkYXRhLHgpOwotCWxlbiArPSB4OwkJCS8qIFRvdGFsIGRhdGEgZmllbGQgbGVuZ3RoICov Ci0JZGF0YSArPSB4OwkJCS8qIFNldCB1cCBmb3IgbmV4dCBmaWVsZC4uLiAqLwotCXNwc2l6IC09 IHg7Ci0JZnJlZShvLT5vcGt0aXRlbSk7CQkvKiBGcmVlIGl0ZW0ganVzdCBlbmNvZGVkICovCi0J aWYgKG8gPT0gb3BrdGhlYWQpIHsJCS8qIElmIGhlYWQgKi8KLQkgICAgb3BrdGhlYWQgPSBvLT5v cGt0bmV4dDsJLyogTW92ZSBoZWFkIHRvIG5leHQgKi8KLQkgICAgZnJlZSgoY2hhciAqKW8pOwkJ LyogRnJlZSB0aGlzIGxpc3Qgbm9kZSAqLwotCSAgICBvID0gb3BrdGhlYWQ7Ci0JfSBlbHNlIHsJ CQkvKiBJZiBub3QgaGVhZCAqLwotCSAgICBvID0gby0+b3BrdG5leHQ7CQkvKiBHZXQgbmV4dCAq LwotCSAgICBwcmV2LT5vcGt0bmV4dCA9IG87CQkvKiBMaW5rIHByZXZpb3VzIHRvIG5leHQgKi8K LQl9Ci0JaWYgKGMgPT0gJ0AnKQkJCS8qIExvb3AgZXhpdCAqLwotCSAgYnJlYWs7Ci0JaWYgKCFv ICYmICFvcGt0aGVhZCkgewkJLyogU2V0IHVwIEVuZCBPZiBQYXJhbWV0ZXJzIEZpZWxkICovCi0J ICAgIG8gPSAoc3RydWN0IG9wa3RwYXJtICopbWFsbG9jKHNpemVvZihzdHJ1Y3Qgb3BrdHBhcm0p KTsKLQkgICAgaWYgKG8pIHsKLQkJb3BrdGhlYWQgPSBvOwotCQlpZiAoIShvLT5vcGt0aXRlbSA9 IChDSEFSICopbWFsbG9jKDMpKSkgewotCQkgICAgZnJlZSgoY2hhciAqKW8pOwotCQkgICAgc3Jp bXNnID0gIkdFVCBQYWNrZXQgSW50ZXJuYWwgRXJyb3IgOCI7Ci0JCSAgICByZXR1cm4oLTEpOwot CQl9Ci0JCWNrc3RybmNweSgoY2hhciAqKShvLT5vcGt0aXRlbSksICJAICIsIDMpOwotCQlkZWJ1 ZyhGMTExLCJzb3BrdCBvLT5vcGt0aXRlbSIsby0+b3BrdGl0ZW0sCi0JCSAgICAgIHN0cmxlbigo Y2hhciAqKShvLT5vcGt0aXRlbSkpKTsKLQkJby0+b3BrdG5leHQgPSBOVUxMOwotCSAgICB9Ci0J fQotICAgIH0KLSAgICBkYXRhID0gZHNhdmU7CQkJLyogUmVzdG9yZSBnbG9iYWxzICovCi0gICAg c3BzaXogPSBzc2F2ZTsKLSAgICBkZWJ1ZyhGMTEwLCJzb3BrdCBkYXRhIixkYXRhLDApOwotICAg IGRlYnVnKEYxMDEsInNvcGt0IG9wa3RjbnQiLCIiLG9wa3RjbnQpOwotICAgIGlmIChvcGt0Y250 KysgPiAwKSB7Ci0JaWYgKG54dHBrdCgpIDwgMCkgewkJLyogR2V0IG5leHQgcGFja2V0IG51bWJl ciBhbmQgYnVmZmVyICovCi0JICAgIHNyaW1zZyA9ICJHRVQgUGFja2V0IEludGVybmFsIEVycm9y IDkiOwotCSAgICByZXR1cm4oLTEpOwotCX0KLSAgICB9Ci0gICAgZGVidWcoRjEwMSwic29wa3Qg cGt0bnVtIiwiIixwa3RudW0pOwotICAgIHJjID0gc3BhY2soKGNoYXIpJ08nLHBrdG51bSxsZW4s ZGF0YSk7IC8qIFNlbmQgTy1QYWNrZXQgKi8KLSAgICBkZWJ1ZyhGMTAxLCJzb3BrdCBzcGFjayIs IiIscmMpOwotICAgIGlmIChyYyA8IDApCQkJCS8qIEZhaWxlZCAqLwotICAgICAgc3JpbXNnID0g IlNlbmQgUGFja2V0IEZhaWx1cmUiOwkvKiBTZXQgbWVzc2FnZSAqLwotICAgIGVsc2UJCQkJLyog U3VjY2VlZGVkICovCi0gICAgICByYyA9IChjID09ICdAJykgPyAwIDogMTsJCS8qIDEgPSBjb21l IGJhY2sgZm9yIG1vcmUsIDAgPSBkb25lICovCi0gICAgZGVidWcoRjEwMSwic29wa3QgcmMiLCIi LHJjKTsKLSAgICByZXR1cm4ocmMpOwotfQotCi0vKiBTIFIgSSBOIEkgVCAgLS0gIFNlbmQgR0VU IHBhY2tldCAgKi8KLS8qCi0gIFNlbmRzIHRoZSBhcHByb3ByaWF0ZSBHRVQtQ2xhc3MgcGFja2V0 LgotICBSZXR1cm5zOgotICAtMSBvbiBlcnJvcgotICAgMCBpZiBwYWNrZXQgc2VudCBzdWNjZXNz ZnVsbHkgYW5kIHdlIGNhbiBtb3ZlIG9uIHRvIHRoZSBuZXh0IHN0YXRlCi0gICAxIGlmIGFuIE8t cGFja2V0IHdhcyBzZW50IE9LIGJ1dCBtb3JlIE8gcGFja2V0cyBzdGlsbCBuZWVkIHRvIGJlIHNl bnQuCi0qLwotaW50Ci1zcmluaXQocmVnZXQsIHJldHJpZXZlLCBvcGt0KSBpbnQgcmVnZXQsIHJl dHJpZXZlLCBvcGt0OyB7Ci0gICAgaW50IHggPSAwLCBsZWZ0ID0gMDsKLSAgICBleHRlcm4gaW50 IG9vcHRzLCBvbW9kZTsKLSAgICBDSEFSICogcCA9IE5VTEw7Ci0jaWZkZWYgUkVDVVJTSVZFCi0g ICAgZXh0ZXJuIGludCByZWN1cnNpdmU7Ci0gICAgZGVidWcoRjEwMSwic3Jpbml0IHJlY3Vyc2l2 ZSIsIiIscmVjdXJzaXZlKTsKLSNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KLSAgICBkZWJ1ZyhGMTAx LCJzcmluaXQgcmVnZXQiLCIiLHJlZ2V0KTsKLSAgICBkZWJ1ZyhGMTAxLCJzcmluaXQgcmV0cmll dmUiLCIiLHJldHJpZXZlKTsKLSAgICBkZWJ1ZyhGMTAxLCJzcmluaXQgb3BrdCIsIiIsb3BrdCk7 Ci0gICAgZGVidWcoRjEwMSwic3Jpbml0IG9vcHRzIiwiIixvb3B0cyk7Ci0gICAgZGVidWcoRjEw MSwic3Jpbml0IG9tb2RlIiwiIixvbW9kZSk7Ci0gICAgZGVidWcoRjExMCwic3Jpbml0IGNtYXJn IixjbWFyZywwKTsKLSAgICBzcmltc2cgPSBOVUxMOwotCi0gICAgb3BrdGNudCA9IDA7Ci0gICAg aWYgKCFjbWFyZykgY21hcmcgPSAiIjsKLSAgICBpZiAoISpjbWFyZykgewotCXNyaW1zZyA9ICJH RVQgd2l0aCBubyBmaWxlbmFtZSI7Ci0JZGVidWcoRjEwMCwic3Jpbml0IG51bGwgY21hcmciLCIi LDApOwotCXJldHVybigtMSk7Ci0gICAgfQotICAgIGlmIChvcGt0KSB7CQkJCS8qIEV4dGVuZGVk IEdFVCBpcyB0b3RhbGx5IGRpZmZlcmVudCAqLwotCWNoYXIgYnVmWzE2XTsKLQlzdHJ1Y3Qgb3Br dHBhcm0gKiBvID0gTlVMTDsKLQlzdHJ1Y3Qgb3BrdHBhcm0gKiBwcmV2ID0gTlVMTDsKLQotICAg ICAgICBidWZbMF0gPSBOVUw7Ci0KLQkvKiBCdWlsZCBPLVBhY2tldCBmaWVsZHMgYW5kIHNlbmQg KHBlcmhhcHMgZmlyc3QpIE8tUGFja2V0ICovCi0KLQlpZiAob29wdHMgPiAtMSkgewkJLyogV3Jp dGUgT3B0aW9uIGZsYWdzICovCi0JICAgIG8gPSAoc3RydWN0IG9wa3RwYXJtICopbWFsbG9jKHNp emVvZihzdHJ1Y3Qgb3BrdHBhcm0pKTsKLQkgICAgaWYgKCFvKSB7Ci0JCXNyaW1zZyA9ICJHRVQg UGFja2V0IEludGVybmFsIEVycm9yIDIiOwotCQlkZWJ1ZyhGMTAwLCJzcmluaXQgbWFsbG9jIGZh aWwgTzEiLCIiLDApOwotCQlyZXR1cm4oLTEpOwotCSAgICB9Ci0JICAgIHNwcmludGYoYnVmLCJP eCVkIixvb3B0cyk7CS8qIHNhZmUgKi8KLQkgICAgeCA9IChpbnQpIHN0cmxlbihidWYrMik7Ci0J ICAgIGJ1ZlsxXSA9IHRvY2hhcih4KTsKLQkgICAgby0+b3BrdGl0ZW0gPSAoQ0hBUiAqKW1hbGxv Yyh4ICsgMyk7Ci0JICAgIGlmICghby0+b3BrdGl0ZW0pIHsKLQkJc3JpbXNnID0gIkdFVCBQYWNr ZXQgSW50ZXJuYWwgRXJyb3IgMyI7Ci0JCWRlYnVnKEYxMDAsInNyaW5pdCBtYWxsb2MgZmFpbCBP MiIsIiIsMCk7Ci0JCXJldHVybigtMSk7Ci0JICAgIH0KLQkgICAgY2tzdHJuY3B5KChjaGFyICop KG8tPm9wa3RpdGVtKSxidWYseCszKTsKLQkgICAgby0+b3BrdG5leHQgPSBOVUxMOwotCSAgICBp ZiAoIW9wa3RoZWFkKQotCSAgICAgIG9wa3RoZWFkID0gbzsKLQkgICAgcHJldiA9IG87Ci0JfQot CWlmIChvbW9kZSA+IC0xKSB7CQkvKiBJZiBYZmVyIE1vZGUgc3BlY2lmaWVkLCB3cml0ZSBpdCAq LwotCSAgICBvID0gKHN0cnVjdCBvcGt0cGFybSAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IG9wa3Rw YXJtKSk7Ci0JICAgIGlmICghbykgewotCQlzcmltc2cgPSAiR0VUIFBhY2tldCBJbnRlcm5hbCBF cnJvciA0IjsKLQkJZGVidWcoRjEwMCwic3Jpbml0IG1hbGxvYyBmYWlsIE0xIiwiIiwwKTsKLQkJ cmV0dXJuKC0xKTsKLQkgICAgfQotCSAgICBzcHJpbnRmKGJ1ZiwiTXglZCIsb21vZGUpOwkvKiBz YWZlICovCi0JICAgIHggPSAoaW50KSBzdHJsZW4oYnVmKzIpOwotCSAgICBidWZbMV0gPSB0b2No YXIoeCk7Ci0JICAgIG8tPm9wa3RpdGVtID0gKENIQVIgKiltYWxsb2MoeCArIDMpOwotCSAgICBp ZiAoIW8tPm9wa3RpdGVtKSB7Ci0JCXNyaW1zZyA9ICJHRVQgUGFja2V0IEludGVybmFsIEVycm9y IDUiOwotCQlkZWJ1ZyhGMTAwLCJzcmluaXQgbWFsbG9jIGZhaWwgTzIiLCIiLDApOwotCQlyZXR1 cm4oLTEpOwotCSAgICB9Ci0JICAgIGNrc3RybmNweSgoY2hhciAqKShvLT5vcGt0aXRlbSksYnVm LHgrMyk7Ci0JICAgIG8tPm9wa3RuZXh0ID0gTlVMTDsKLQkgICAgaWYgKCFvcGt0aGVhZCkKLQkg ICAgICBvcGt0aGVhZCA9IG87Ci0JICAgIGVsc2UKLQkgICAgICBwcmV2LT5vcGt0bmV4dCA9IG87 Ci0JICAgIHByZXYgPSBvOwotCX0KLQotCS8qIFNhbWUgZGVhbCBmb3Igb25hbWUgYW5kIG9wYXRo IGV2ZW50dWFsbHkgYnV0IG5vdCBuZWVkZWQgbm93Li4uICovCi0KLQl4ID0gc3RybGVuKGNtYXJn KTsJCS8qIE5vdyBkbyBmaWxlbmFtZSAqLwotCWlmICh4ID4gc3BzaXogLSA0KSB7Ci0JICAgIHNy aW1zZyA9ICJHRVQgUGFja2V0IFRvbyBMb25nIGZvciBTZXJ2ZXIiOwotCSAgICByZXR1cm4oLTEp OwotCX0KLQlvID0gKHN0cnVjdCBvcGt0cGFybSAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IG9wa3Rw YXJtKSk7Ci0JaWYgKCFvKSB7Ci0JICAgIHNyaW1zZyA9ICJHRVQgUGFja2V0IEludGVybmFsIEVy cm9yIDYiOwotCSAgICBkZWJ1ZyhGMTAwLCJzcmluaXQgbWFsbG9jIGZhaWwgRjEiLCIiLDApOwot CSAgICByZXR1cm4oLTEpOwotCX0KLQlsZWZ0ID0geCArIDY7Ci0Jby0+b3BrdGl0ZW0gPSAoQ0hB UiAqKW1hbGxvYyhsZWZ0ICsgMSk7Ci0JaWYgKCFvLT5vcGt0aXRlbSkgewotCSAgICBzcmltc2cg PSAiR0VUIFBhY2tldCBJbnRlcm5hbCBFcnJvciA3IjsKLQkgICAgZGVidWcoRjEwMCwic3Jpbml0 IG1hbGxvYyBmYWlsIEYyIiwiIiwwKTsKLQkgICAgcmV0dXJuKC0xKTsKLQl9Ci0JcCA9IG8tPm9w a3RpdGVtOwotCSpwKysgPSAnRic7Ci0JbGVmdC0tOwotCWlmICh4ID4gOTQpIHsJCQkvKiBUb28g bG9uZyBmb3Igbm9ybWFsIGxlbmd0aCAqLwotCSAgICAqcCsrID0gU1lOOwkJCS8qIEVzY2FwZSBs ZW5ndGggd2l0aCBDdHJsLVYgKi8KLQkgICAgKnArKyA9IHRvY2hhcih4IC8gOTUpOwotCSAgICAq cCsrID0gdG9jaGFyKHggJSA5NSk7Ci0JICAgIGxlZnQgLT0gMzsKLQl9IGVsc2UgewkJCS8qIE5v cm1hbCBlbmNvZGluZyBmb3IgOTQgb3IgbGVzcyAqLwotCSAgICAqcCsrID0gdG9jaGFyKHgpOwot CSAgICBsZWZ0LS07Ci0JfQotCWNrc3RybmNweSgoY2hhciAqKXAsY21hcmcsbGVmdCk7IC8qIENv cHkgdGhlIGZpbGVuYW1lICovCi0Jby0+b3BrdG5leHQgPSBOVUxMOwotCWlmICghb3BrdGhlYWQp Ci0JICBvcGt0aGVhZCA9IG87Ci0JZWxzZQotCSAgcHJldi0+b3BrdG5leHQgPSBvOwotCXByZXYg PSBvOwotCi0JLyogRW5kIG9mIFBhcmFtZXRlcnMgKi8KLQotCXByZXYtPm9wa3RuZXh0ID0gTlVM TDsJCS8qIEVuZCBvZiBsaXN0LiAqLwotCXJldHVybihzb3BrdCgpKTsKLSAgICB9Ci0KLSAgICAv KiBOb3QgRXh0ZW5kZWQgR0VUICovCi0KLSAgICBpZiAoZW5jc3RyKChDSEFSICopY21hcmcpIDwg MCkgewkvKiBFbmNvZGUgdGhlIGZpbGVuYW1lLiAqLwotCXNyaW1zZyA9ICJHRVQgUGFja2V0IFRv byBMb25nIGZvciBTZXJ2ZXIiOwotCXJldHVybigtMSk7Ci0gICAgfQotICAgIGlmIChyZXRyaWV2 ZSkgewkJCS8qIFNlbmQgdGhlIHBhY2tldC4gKi8KLSNpZmRlZiBSRUNVUlNJVkUKLQlpZiAocmVj dXJzaXZlKQotCSAgeCA9IHNwYWNrKChjaGFyKSdXJyxwa3RudW0sc2l6ZSxkYXRhKTsgLyogR0VU IC9ERUxFVEUgL1JFQ1VSU0lWRSAqLwotCWVsc2UKLSNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KLQkg IHggPSBzcGFjaygoY2hhciknSCcscGt0bnVtLHNpemUsZGF0YSk7IC8qIEdFVCAvREVMRVRFICov Ci0gICAgfQotI2lmZGVmIFJFQ1VSU0lWRQotICAgIGVsc2UgaWYgKHJlY3Vyc2l2ZSkKLSAgICAg IHggPSBzcGFjaygoY2hhciknVicscGt0bnVtLHNpemUsZGF0YSk7IC8qIEdFVCAvUkVDVVJTSVZF ICovCi0jZW5kaWYgLyogUkVDVVJTSVZFICovCi0gICAgZWxzZQotICAgICAgeCA9IHNwYWNrKChj aGFyKShyZWdldCA/ICdKJyA6ICdSJykscGt0bnVtLHNpemUsZGF0YSk7IC8qIEdFVCAqLwotICAg IGlmICh4IDwgMCkKLSAgICAgIHNyaW1zZyA9ICJTZW5kIFBhY2tldCBGYWlsdXJlIjsKLSAgICBy ZXR1cm4oeCA8IDAgPyB4IDogMCk7Ci19Ci0KLQotLyogIEsgUyBUIEEgUiBUICAtLSAgQ2hlY2tz IGZvciBhIEtlcm1pdCBwYWNrZXQgd2hpbGUgaW4gdGVybWluYWwgbW9kZS4gICovCi0KLS8qICAo b3IgY29tbWFuZCBtb2RlLi4uKSAgKi8KLQotI2lmZGVmIENLX0FVVE9ETAotaW50Ci0jaWZkZWYg Q0tfQU5TSUMKLWtzdGFydChDSEFSIGNoKQotI2Vsc2UKLWtzdGFydChjaCkgQ0hBUiBjaDsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwotLyoga3N0YXJ0ICovIHsKLSAgICBzdGF0aWMgQ0hBUiAqIHAg PSBOVUxMOwotCi0jaWZkZWYgT1MyCi0gICAgc3RhdGljIENIQVIgKiBwayA9IE5VTEw7Ci0jZW5k aWYgLyogT1MyICovCi0gICAgY2ggJj0gMDE3NzsJCQkJLyogU3RyaXAgOHRoIGJpdCAqLwotCi0g ICAgLyogQmVjYXVzZSB3ZSdyZSBpbiBjb29rZWQgbW9kZSBhdCB0aGUgY29tbWFuZCBwcm9tcHQu Li4gKi8KLQotICAgIGlmIChjaCA9PSBMRikgewotCWRlYnVnKEYxMTAsImtzdGFydCIsImNoID09 IExGIiwwKTsKLQlpZiAoKHdoYXQgPT0gV19DT01NQU5EIHx8IHdoYXQgPT0gV19JTklUIHx8IHdo YXQgPT0gV19OT1RISU5HKSkgewotCSAgICBpZiAoZW9sID09IENSKSB7Ci0JCWNoID0gZW9sOwot CQlkZWJ1ZyhGMTEwLCJrc3RhcnQiLCJjaCA9IENSIiwwKTsKLQkgICAgfQotCX0KLSAgICB9Ci0K LSNpZmRlZiBPUzIKLSAgICBpZiAoYWRsX2ttb2RlID09IEFETF9TVFIpIHsKLQlpZiAoIWNoKQot CSAgcmV0dXJuKDApOwotCWlmICghcGspCi0JICBwayA9IGFkbF9rc3RyOwotCi0JaWYgKGNoID09 ICpwaykgewotCSAgICBwaysrOwotCSAgICBpZiAoKnBrID09ICdcMCcpIHsKLQkJcGsgPSBhZGxf a3N0cjsKLQkJZGVidWcoRjEwMCwgImtzdGFydCBLZXJtaXQgU3RhcnQgU3RyaW5nIiwiIiwwKTsK LQkJcmV0dXJuKFBST1RPX0sgKyAxKTsKLQkgICAgfQotCX0gZWxzZQotCSAgcGsgPSBhZGxfa3N0 cjsKLSAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0KLSAgICBpZiAoY2ggPT0gc3RjaHIpIHsJCQkv KiBTdGFydCBvZiBwYWNrZXQgKi8KLQlrc3RhcnRhY3RpdmUgPSAxOwotCXAgPSBrc2J1ZjsKLQkq cCA9IGNoOwotCWRlYnVnKEYxMDEsImtzdGFydCBTT1AiLCIiLGNoKTsKLSAgICB9IGVsc2UgaWYg KGNoID09IGVvbCkgewkJLyogRW5kIG9mIHBhY2tldCAqLwotCWtzdGFydGFjdGl2ZSA9IDA7Ci0J aWYgKHApIHsKLQkgICAgZGVidWcoRjEwMSwia3N0YXJ0IEVPTCIsIiIsY2gpOwotCSAgICBwKys7 Ci0JICAgIGlmIChwIC0ga3NidWYgPCA5NCApIHsKLQkJaW50IHJjID0gMDsKLQkJKnArKyA9IGNo OwotCQkqcCA9IE5VTDsKLQkJcmMgPSBjaGtzcGt0KChjaGFyICopa3NidWYpOwotCQlkZWJ1ZyhG MTExLCJrc3RhcnQgRU9QIGNoa3Nwa3QiLCBrc2J1ZiwgcmMpOwotCQlwID0gTlVMTDsKLQkJaWYg KCFyYykgcmV0dXJuKDApOwotCQlpZiAocmMgPT0gMikgcmMgPSAtMTsKLQkJZGVidWcoRjExMSwi a3N0YXJ0IGtzYnVmIixrc2J1ZixyYyk7Ci0JCXJldHVybihyYyk7Ci0JICAgIH0gZWxzZSB7Ci0J CWRlYnVnKEYxMTAsImtzdGFydCIsInAgLSBrc2J1ZiA+PSA5NCIsMCk7Ci0JCXAgPSBOVUxMOwot CSAgICB9Ci0JfQotICAgIH0gZWxzZSBpZiAocCkgewotCWlmIChjaCA8IFNQKQotCSAga3N0YXJ0 YWN0aXZlID0gMDsKLQlwKys7Ci0JaWYgKHAgLSBrc2J1ZiA8IDk0KSB7Ci0JICAgICpwID0gY2g7 Ci0JfSBlbHNlIHsKLQkgICAgcCA9IE5VTEw7Ci0JICAgIGRlYnVnKEYxMTAsImtzdGFydCIsInAg LSBrc2J1ZiA+PSA5NCIsMCk7Ci0JfQotICAgIH0KLSAgICByZXR1cm4oMCk7Ci19Ci0KLSNpZmRl ZiBDS19YWVoKLQotLyogIFogUyBUIEEgUiBUICAtLSAgQ2hlY2tzIGZvciBhIFpNT0RFTSBwYWNr ZXQgd2hpbGUgaW4gdGVybWluYWwgbW9kZS4gICovCi0KLWludAotI2lmZGVmIENLX0FOU0lDCi16 c3RhcnQoQ0hBUiBjaCkKLSNlbHNlCi16c3RhcnQoY2gpIENIQVIgY2g7Ci0jZW5kaWYgLyogQ0tf QU5TSUMgKi8KLS8qIHpzdGFydCAqLyB7Ci0gICAgc3RhdGljIENIQVIgKiBtYXRjaHN0ciA9IChD SEFSICopICJcMDMwQjAwIjsKLSAgICAvKiAicnpccioqXDAzMEIwMDAwMDAwMDAwMDAwMFxyXDAz M0pcMDIxIjsgKi8KLSAgICBzdGF0aWMgQ0hBUiAqIHAgPSBOVUxMOwotICAgIGV4dGVybiBpbnQg aW5zZXJ2ZXI7Ci0KLSAgICBpZiAoaW5zZXJ2ZXIpCi0gICAgICByZXR1cm4oMCk7Ci0KLSAgICBp ZiAoIWNoKQotICAgICAgcmV0dXJuKDApOwotICAgIGlmICghcCkgewotI2lmZGVmIE9TMgotCXAg PSBhZGxfem1vZGUgPT0gQURMX1BBQ0sgPyBtYXRjaHN0ciA6IGFkbF96c3RyOwotI2Vsc2UKLQlw ID0gbWF0Y2hzdHI7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgfQotICAgIGlmIChjaCA9PSAqcCkg ewotCXArKzsKLQlpZiAoKnAgPT0gJ1wwJykgewotI2lmZGVmIE9TMgotCSAgICBpZiAoYWRsX3pt b2RlID09IEFETF9QQUNLKSB7Ci0JCXAgPSBtYXRjaHN0cjsKLQkJZGVidWcoRjEwMCwgInpzdGFy dCBabW9kZW0gU09QIiwiIiwwKTsKLQkgICAgfSBlbHNlIHsKLQkJcCA9IGFkbF96c3RyOwotCQlk ZWJ1ZyhGMTAwLCAienN0YXJ0IFptb2RlbSBTdGFydCBTdHJpbmciLCIiLDApOwotCSAgICB9Ci0j ZWxzZQotCSAgICBwID0gbWF0Y2hzdHI7Ci0JICAgIGRlYnVnKEYxMDAsICJ6c3RhcnQgWm1vZGVt IFNPUCIsIiIsMCk7Ci0jZW5kaWYgLyogT1MyICovCi0JICAgIHJldHVybihQUk9UT19aICsgMSk7 Ci0JfQotICAgIH0gZWxzZSB7Ci0jaWZkZWYgT1MyCi0JcCA9IGFkbF96bW9kZSA9PSBBRExfUEFD SyA/IG1hdGNoc3RyIDogYWRsX3pzdHI7Ci0jZWxzZQotCXAgPSBtYXRjaHN0cjsKLSNlbmRpZiAv KiBPUzIgKi8KLSAgICB9Ci0gICAgcmV0dXJuKDApOwotfQotI2VuZGlmIC8qIENLX1hZWiAqLwot Ci0jaWZuZGVmIE5PSUNQCi0jaWZkZWYgQ0tfQVBDCi0vKiAgQSBVIFQgTyBEIE8gVyBOICAqLwot Ci0jaWZkZWYgQ0tfQU5TSUMKLVZPSUQKLWF1dG9kb3duKGludCBjaCkKLSNlbHNlCi1WT0lECi1h dXRvZG93bihjaCkgaW50IGNoOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBhdXRvZG93biAq LyB7Ci0KLS8qIFRoZSBLZXJtaXQgYW5kIFptb2RlbSBBdXRvLWRvd25sb2FkIGNhbGxzIGdvIGhl cmUgKi8KLQotICAgIGV4dGVybiBpbnQganVzdG9uZTsJCQkvKiBGcm9tIHByb3RvY29sIG1vZHVs ZSAqLwotICAgIGV4dGVybiBpbnQgZGVic2VzLCBwcm90b2NvbCwgYXBjYWN0aXZlLCBhdXRvZGws IGluYXV0b2RsOwotI2lmZGVmIERDTURCVUYKLSAgICBleHRlcm4gY2hhciAqYXBjYnVmOwotI2Vs c2UKLSAgICBleHRlcm4gY2hhciBhcGNidWZbXTsKLSNlbmRpZiAvKiBEQ01EQlVGICovCi0jaWZk ZWYgT1MyCi0gICAgZXh0ZXJuIGludCBhcGNsZW5ndGgsIHRlcm1faW87Ci0jZW5kaWYgLyogT1My ICovCi0gICAgaW50IGsgPSAwOwotCi0gICAgaWYgKChhdXRvZGwgfHwgaW5hdXRvZGwKLSNpZmRl ZiBJS1NfT1BUSU9OCi0JIHx8IFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3Rh cnQKLSNlbmRpZiAvKiBJS1NfT1BUSU9OICovCi0JICkgJiYgIWRlYnNlcykgewotI2lmZGVmIENL X1hZWgotI2lmZGVmIFhZWl9JTlRFUk5BTAotCWV4dGVybiBpbnQgcF9hdmFpbDsKLSNlbHNlCi0J aW50IHBfYXZhaWwgPSAxOwotI2VuZGlmIC8qIFhZWl9JTlRFUk5BTCAqLwotCWlmIChwX2F2YWls ICYmIHpzdGFydCgoQ0hBUikgY2gpKSB7Ci0JICAgIGRlYnVnKEYxMDAsICJabW9kZW0gZG93bmxv YWQiLCIiLDApOwotI2lmZGVmIE9TMgotI2lmbmRlZiBOT1RFUk0KLSAgICAgICAgICAgIGFwY19j b21tYW5kKEFQQ19MT0NBTCwicmVjZWl2ZSAvcHJvdG9jb2w6em1vZGVtIik7Ci0jZW5kaWYgLyog Tk9URVJNICovCi0jZWxzZSAvKiBPUzIgKi8KLSAgICAgICAgICAgIGNrc3RybmNweShhcGNidWYs InJlY2VpdmUgL3Byb3RvY29sOnptb2RlbSIsQVBDQlVGTEVOKTsKLQkgICAgYXBjYWN0aXZlID0g QVBDX0xPQ0FMOwotI2VuZGlmIC8qIE9TMiAqLwotCSAgICByZXR1cm47Ci0JfQotI2VuZGlmIC8q IENLX1hZWiAqLwotCi0JLyogRmlyc3QgdHJ5Li4uICovCi0JayA9IGtzdGFydCgoQ0hBUikgY2gp OwotCWlmICgKLSNpZmRlZiBOT1NFUlZFUgotCSAgICBrID4gMAotI2Vsc2UgLyogTk9TRVJWRVIg Ki8KLQkgICAgawotI2VuZGlmIC8qIE5PU0VSVkVSICovCi0JICAgICkgewkJCQkvKiBXZSBzYXcg YSB2YWxpZCBTIG9yIEkgcGFja2V0ICovCi0JICAgIGlmIChrIDwgMCkgewkJLyogU3R1ZmYgUkVD RUlWRSBpbnRvIEFQQyBidWZmZXIgKi8KLQkJanVzdG9uZSA9IDE7Ci0JCXN3aXRjaCAocHJvdG9j b2wpIHsKLSNpZmRlZiBDS19YWVoKLQkJICBjYXNlIFBST1RPX0c6Ci0JCSAgICBja3N0cm5jcHko YXBjYnVmLAotCQkJICAgICAgInNldCBwcm90byBrZXJtaXQsIHNlcnZlciwgc2V0IHByb3RvY29s IGciLAotCQkJICAgICAgQVBDQlVGTEVOCi0JCQkgICAgICApOwotCQkgICAgYnJlYWs7Ci0JCSAg Y2FzZSBQUk9UT19YOgotCQkgICAgY2tzdHJuY3B5KGFwY2J1ZiwKLQkJCSAgICAgICJzZXQgcHJv dG8ga2VybWl0LHNlcnZlcixzZXQgcHJvdG8geG1vZGVtIiwKLQkJCSAgICAgIEFQQ0JVRkxFTgot CQkJICAgICAgKTsKLQkJICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBQUk9UT19Y QzoKLQkJICAgIGNrc3RybmNweShhcGNidWYsCi0JCQkgICAic2V0IHByb3RvIGtlcm1pdCxzZXJ2 ZXIsc2V0IHByb3RvIHhtb2RlbS1jcmMiLAotCQkJICAgICAgQVBDQlVGTEVOCi0JCQkgICAgICAp OwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCQkgIGNhc2UgUFJPVE9fWToKLQkJICAg IGNrc3RybmNweShhcGNidWYsCi0JCQkgICAgICAic2V0IHByb3RvIGtlcm1pdCxzZXJ2ZXIsIHNl dCBwcm90b2NvbCB5IiwKLQkJCSAgICAgIEFQQ0JVRkxFTgotCQkJICAgICAgKTsKLQkJICAgIGJy ZWFrOwotCQkgIGNhc2UgUFJPVE9fWjoKLQkJICAgIGNrc3RybmNweShhcGNidWYsCi0JCQkgICAg ICAic2V0IHByb3RvIGtlcm1pdCxzZXJ2ZXIsc2V0IHByb3RvIHptb2RlbSIsCi0JCQkgICAgICBB UENCVUZMRU4KLQkJCSAgICAgICk7Ci0JCSAgICBicmVhazsKLSNlbmRpZiAvKiBDS19YWVogKi8K LQkJICBjYXNlIFBST1RPX0s6Ci0JCSAgICBja3N0cm5jcHkoYXBjYnVmLCJzZXJ2ZXIiLEFQQ0JV RkxFTik7Ci0JCSAgICBicmVhazsKLQkJfQotCSAgICB9IGVsc2UgewotCQlqdXN0b25lID0gMDsK LSAgICAgICAgICAgICAgICBja3N0cm5jcHkoYXBjYnVmLCJyZWNlaXZlIC9wcm90b2NvbDprZXJt aXQiLEFQQ0JVRkxFTik7Ci0JICAgIH0KLSNpZmRlZiBPUzIKLSNpZm5kZWYgTk9URVJNCi0gICAg ICAgICAgICBhcGNfY29tbWFuZChBUENfTE9DQUwsYXBjYnVmKTsKLSNlbmRpZiAvKiBOT1RFUk0g Ki8KLSNlbHNlIC8qIE9TMiAqLwotICAgICAgICAgICAgY2tzdHJuY3B5KGFwY2J1ZiwicmVjZWl2 ZSAvcHJvdG9jb2w6em1vZGVtIixBUENCVUZMRU4pOwotCSAgICBhcGNhY3RpdmUgPSBBUENfTE9D QUw7Ci0jZW5kaWYgLyogT1MyICovCi0JICAgIHJldHVybjsKLQl9Ci0gICAgfQotfQotI2VuZGlm IC8qIENLX0FQQyAqLwotI2VuZGlmIC8qIE5PSUNQICovCi0KLS8qICBDIEggSyBTIFAgSyBUICAt LSAgQ2hlY2sgaWYgYnVmIGNvbnRhaW5zIGEgdmFsaWQgUyBvciBJIHBhY2tldCAgKi8KLQotaW50 Ci1jaGtzcGt0KHBhY2tldCkgY2hhciAqcGFja2V0OyB7Ci0gICAgaW50IGk7Ci0gICAgaW50IGJ1 ZmxlbjsKLSAgICBpbnQgbGVuID0gLTE7Ci0gICAgQ0hBUiBjaGs7Ci0gICAgY2hhciB0eXBlID0g MDsKLSAgICBjaGFyICpzID0gTlVMTDsKLSAgICBjaGFyICpidWYgPSBOVUxMOwotICAgIGNoYXIg dG1wYnVmWzEwMF07CQkJLyogTG9uZ2VzdCBTL0kgcGFja2V0IGlzIGFib3V0IDMwICovCi0KLSAg ICBpZiAoIXBhY2tldCkgcmV0dXJuKDApOwotICAgIGJ1ZmxlbiA9IGNrc3RybmNweSh0bXBidWYs cGFja2V0LDEwMCk7IC8qIE1ha2UgYSBwb2tlYWJsZSBjb3B5ICovCi0gICAgaWYgKGJ1ZmxlbiA8 IDUpIHJldHVybigwKTsJCS8qIFRvbyBzaG9ydCAqLwotICAgIGlmIChidWZsZW4gPiAxMDApIHJl dHVybigwKTsgCS8qIFRvbyBsb25nIHRvIGJlIGFuIFMgb3IgSSBwYWNrZXQgKi8KLSAgICBzID0g YnVmID0gdG1wYnVmOwkJCS8qIFBvaW50IHRvIGJlZ2lubmluZyBvZiBjb3B5ICovCi0KLSAgICBp ZiAoKnMrKyAhPSBzdGNocikgcmV0dXJuKDApOwkvKiBTT0ggKi8KLSAgICBsZW4gPSB4dW5jaGFy KCpzKyspOwkJLyogTGVuZ3RoICovCi0gICAgaWYgKGxlbiA8IDApIHJldHVybigwKTsKLSAgICBp ZiAoKnMrKyAhPSBTUCkgcmV0dXJuKDApOwkJLyogU2VxdWVuY2UgbnVtYmVyICovCi0gICAgdHlw ZSA9ICpzKys7CQkJLyogVHlwZSAqLwotICAgIGlmICh0eXBlICE9ICdTJyAmJiB0eXBlICE9ICdJ JykKLSAgICAgIHJldHVybigwKTsKLSAgICBpZiAoYnVmbGVuIDwgbGVuICsgMikgcmV0dXJuKDAp OwotICAgIHMgKz0gKGxlbiAtIDMpOwkJCS8qIFBvc2l0aW9uIG9mIGNoZWNrc3VtICovCi0gICAg Y2hrID0gKENIQVIpICgqcyk7CQkJLyogQ2hlY2tzdW0gKi8KLSAgICAqcyA9IE5VTDsJCQkgICAv KiBUZW1wb3JhcmlseSBudWxsLXRlcm1pbmF0ZSBkYXRhIGZpZWxkICovCi0gICAgaWYgKHh1bmNo YXIoY2hrKSAhPSBjaGsxKChDSEFSICopKGJ1ZisxKSxidWZsZW4tMikpIHsgLyogQ2hlY2sgaXQg Ki8KLQkvKgotCSAgSW4gQy1LZXJtaXQgOS4wIGFuZCBsYXRlciwgYW4gUyBvciBJIHBhY2tldCBj YW4gaGF2ZSBhIAotCSAgVHlwZSAzIEJsb2NrIGNoZWNrICgiaGVscCBzZXQgYmxvY2stY2hlY2si IGZvciBkZXRhaWxzKS4KLQkqLwotCXVuc2lnbmVkIGNyYzsJCQkvKiBGYWlsZWQuLi4gVHJ5IFR5 cGUgMyBibG9jayBjaGVjayAqLwotCSpzID0gY2hrOwkJCS8qIFJlcGxhY2UgbGFzdCBieXRlICov Ci0JcyAtPSAyOwkJCQkvKiBCYWNrIHVwIHR3byBieXRlcyAqLwotCWNyYyA9ICh4dW5jaGFyKHNb MF0pIDw8IDEyKQkvKiBDb252ZXJ0IDMgYnl0ZXMgdG8gbnVtZXJpYyBDUkMgKi8KLQkgICAgfCAo eHVuY2hhcihzWzFdKSA8PCA2KQotCSAgICB8ICh4dW5jaGFyKHNbMl0pKTsKLQljaGsgPSAoQ0hB UikoKnMpOwkJLyogQ29weSAxc3QgYnl0ZSBvZiAzLWJ5dGUgQ1JDICovCi0JKnMgPSBOVUw7CQkJ LyogTnVsbC10ZXJtaW5hdGUgZGF0YSBmaWVsZCAqLwotCWlmIChjcmMgIT0gY2hrMygoQ0hBUiAq KShidWYrMSksc3RybGVuKGJ1ZisxKSkpCi0JICByZXR1cm4oMCk7Ci0gICAgfQotICAgIHJldHVy bih0eXBlID09ICdTJyA/IDEgOiAyKTsKLX0KLSNlbmRpZiAvKiBDS19BVVRPREwgKi8KLQotLyog UiBQIEEgQyBLICAtLSAgUmVhZCBhIFBhY2tldCAqLwotCi0vKgotICBycGFjayByZWFkcyBhIHBh Y2tldCBhbmQgcmV0dXJucyB0aGUgcGFja2V0IHR5cGUsIG9yIGVsc2UgUSBpZiB0aGUKLSAgcGFj a2V0IHdhcyBpbnZhbGlkLCBvciBUIGlmIGEgdGltZW91dCBvY2N1cnJlZC4gIFVwb24gc3VjY2Vz c2Z1bCByZXR1cm4sCi0gIHNldHMgdGhlIHZhbHVlcyBvZiBnbG9iYWwgcnNuIChyZWNlaXZlZCBz ZXF1ZW5jZSBudW1iZXIpLCAgcmxuIChyZWNlaXZlZAotICBkYXRhIGxlbmd0aCksIGFuZCByZGF0 YXAgKHBvaW50ZXIgdG8gbnVsbC10ZXJtaW5hdGVkIGRhdGEgZmllbGQpLCBhbmQKLSAgcmV0dXJu cyB0aGUgcGFja2V0IHR5cGUuICBOT1RFOiBUaGlzIGlzIGFuIGlubmVyLWxvb3AgZnVuY3Rpb24g c28gbXVzdCBiZQotICBlZmZpY2llbnQuICBQcm90ZWN0IGZ1bmN0aW9uIGNhbGxzIGJ5IGlmLXRl c3RzIHdoZXJlIHBvc3NpYmxlLCBlLmcuCi0gICJpZiAocGt0bG9nKSBsb2dwa3QoLi4uKTsiLgot Ki8KLWludAotcnBhY2soKSB7Ci0gICAgcmVnaXN0ZXIgaW50IGksIGosIHgsIGxwOwkJLyogTG9j YWwgdmFyaWFibGVzICovCi0jaWZkZWYgQ0tUVU5JTkcKLSAgICB1bnNpZ25lZCBpbnQgY2hrOwot I2VuZGlmIC8qIENLVFVOSU5HICovCi0gICAgaW50IGssIHR5cGUsIGNoa2xlbjsKLSAgICB1bnNp Z25lZCBjcmM7Ci0gICAgQ0hBUiBwYmNbNV07CQkJLyogUGFja2V0IGJsb2NrIGNoZWNrICovCi0g ICAgQ0hBUiAqc29ocDsJCQkJLyogUG9pbnRlciB0byBTT0ggKi8KLSAgICBDSEFSIGU7CQkJCS8q IFBhY2tldCBlbmQgY2hhcmFjdGVyICovCi0KLSNpZmRlZiBHRlRJTUVSCi0gICAgQ0tGTE9BVCB0 MSA9IDAuMCwgdDIgPSAwLjA7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotCi0gICAgZGVidWcoRjEw MSwicnBhY2sgcGt0bnVtIiwiIixwa3RudW0pOwotCi0jaWZuZGVmIE9MRENIS0lOVAotICAgIGlm IChjaGtpbnQoKSA8IDApCQkJLyogQ2hlY2sgZm9yIGNvbnNvbGUgaW50ZXJydXB0cy4gKi8KLSAg ICAgIHJldHVybigneicpOwotI2VuZGlmIC8qIE9MRENIS0lOVCAqLwotCi0gICAgayA9IGdldHJi dWYoKTsJCQkvKiBHZXQgYSBuZXcgcGFja2V0IGlucHV0IGJ1ZmZlci4gKi8KLSAgICBkZWJ1ZyhG MTAxLCJycGFjayBnZXRyYnVmIiwiIixrKTsKLSAgICBpZiAoayA8IDApIHsJCQkvKiBSZXR1cm4g bGlrZSB0aGlzIGlmIG5vbmUgZnJlZS4gKi8KLQlyZXR1cm4oLTEpOwotICAgIH0KLSAgICByZWNw a3QgPSByX3BrdFtrXS5iZl9hZHI7Ci0gICAgKnJlY3BrdCA9ICdcMCc7CQkJLyogQ2xlYXIgcmVj ZWl2ZSBidWZmZXIuICovCi0gICAgc29ocCA9IHJlY3BrdDsJCQkvKiBJbml0aWFsaXplIHBvaW50 ZXJzIHRvIGl0LiAqLwotICAgIHJkYXRhcCA9IHJlY3BrdDsKLSAgICByc24gPSBybG4gPSAtMTsJ CQkvKiBJbiBjYXNlIG9mIGZhaWx1cmUuICovCi0gICAgZSA9ICh0dXJuKSA/IHR1cm5jaCA6IGVv bDsJCS8qIFVzZSBhbnkgaGFuZHNoYWtlIGNoYXIgZm9yIGVvbCAqLwotCi0vKiBUcnkgdG8gZ2V0 IGEgImxpbmUiLiAqLwotCi0jaWZkZWYgQ0tfQVVUT0RMCi0gICAgZGVidWcoRjExMCwicnBhY2sg a3NidWYiLGtzYnVmLDApOwotICAgIGlmIChrc2J1ZlswXSkgewkJCS8qIEtlcm1pdCBwYWNrZXQg YWxyZWFkeSAqLwotCWludCB4OwkJCQkvKiBjb2xsZWN0ZWQgZm9yIHVzIGluIENPTk5FQ1QgbW9k ZSAqLwotCUNIQVIgKnMxID0gcmVjcGt0LCAqczIgPSBrc2J1ZjsKLQlqID0gMDsKLQl3aGlsZSAo KnMyKSB7CQkJLyogQ29weSBhbmQgZ2V0IGxlbmd0aCAqLwotCSAgICAqczErKyA9ICpzMisrOwkJ LyogTm8gcG9pbnQgb3B0aW1pemluZyB0aGlzIHNpbmNlICovCi0JICAgIGorKzsJCQkvKiBpdCdz IG5ldmVyIG1vcmUgdGhhbiB+MjAgY2hhcnMgKi8KLQl9Ci0JKnMxID0gTlVMOwotI2lmZGVmIFBB UlNFTlNFCi0JeCA9IHBhcmNoayhyZWNwa3QsIHN0Y2hyLCBqKTsJLyogQ2hlY2sgcGFyaXR5ICov Ci0JZGVidWcoRjAwMCwiYXV0b2Rvd25sb2FkIHBhcml0eSIsIiIscGFyaXR5KTsKLQlkZWJ1ZyhG MDAwLCJhdXRvZG93bmxvYWQgcGFyY2hrIiwiIix4KTsKLQlpZiAoeCA+IDAgJiYgcGFyaXR5ICE9 IHgpIHsKLQkgICAgYXV0b3BhciA9IDE7Ci0JICAgIHBhcml0eSA9IHg7Ci0JfQotI2VuZGlmIC8q IFBBUlNFTlNFICovCi0Ja3NidWZbMF0gPSBOVUw7CQkJLyogRG9uJ3QgZG8gdGhpcyBuZXh0IHRp bWUhICovCi0KLSAgICB9IGVsc2UgewkJCQkvKiBOb3JtYWxseSBnbyByZWFkIGEgcGFja2V0ICov Ci0jZW5kaWYgLyogQ0tfQVVUT0RMICovCi0KLSNpZmRlZiBERUJVRwotCWlmIChkZWJsb2cpIHsK LQkgICAgZGVidWcoRjEwMSwicnBhY2sgdGltaW50IiwiIix0aW1pbnQpOwotCSAgICBkZWJ1ZyhG MTAxLCJycGFjayByY3Z0aW1vIiwiIixyY3Z0aW1vKTsKLSNpZmRlZiBTVFJFQU1JTkcKLQkgICAg ZGVidWcoRjEwMSwicnBhY2sgc3RyZWFtaW5nIiwiIixzdHJlYW1pbmcpOwotI2VuZGlmIC8qIFNU UkVBTUlORyAqLwotI2lmZGVmIEdGVElNRVIKLQkgICAgLyogTWVhc3VyZSBob3cgbG9uZyBpdCB0 YWtlcyB0byByZWFkIGEgcGFja2V0ICovCi0JICAgIHQxID0gZ2Z0aW1lcigpOwotI2VuZGlmIC8q IEdGVElNRVIgKi8KLQl9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotLyogSlVTVCBJTiBDQVNFIChv dGhlcndpc2UgdGhpcyBjb3VsZCBjbG9iYmVyIHN0cmVhbWluZykgKi8KLQotCWlmICgodGltaW50 ID09IDAKLSNpZmRlZiBTVFJFQU1JTkcKLQkgICAgIHx8IHN0cmVhbWluZwotI2VuZGlmIC8qIFNU UkVBTUlORyAqLwotCSAgICAgKSAmJiAocmN2dGltbyAhPSAwKSkgewotCSAgICBkZWJ1ZyhGMTAx LCJycGFjayB0aW1pbnQgMCB8fCBzdHJlYW1pbmcgYnV0IHJjdnRpbW8iLCIiLHJjdnRpbW8pOwot CSAgICByY3Z0aW1vID0gMDsKLQl9Ci0KLSNpZmRlZiBQQVJTRU5TRQotI2lmZGVmIFVOSVgKLS8q Ci0gIFNvIGZhciB0aGUgZmluYWwgdHVybiBhcmd1bWVudCBpcyBvbmx5IGZvciBja1t1dmRsXXRp by5jLiAgU2hvdWxkIGJlIGFkZGVkCi0gIHRvIHRoZSBvdGhlcnMgdG9vLiAgKHR1cm4gPT0gaGFu ZHNoYWtlIGNoYXJhY3Rlci4pCi0qLwotCWogPSB0dGlubChyZWNwa3Qscl9wa3Rba10uYmZfbGVu IC0gMSxyY3Z0aW1vLGUsc3RjaHIsdHVybik7Ci0jZWxzZQotI2lmZGVmIFZNUwotCWogPSB0dGlu bChyZWNwa3Qscl9wa3Rba10uYmZfbGVuIC0gMSxyY3Z0aW1vLGUsc3RjaHIsdHVybik7Ci0jZWxz ZQotI2lmZGVmIGRhdGFnZW5lcmFsCi0JaiA9IHR0aW5sKHJlY3BrdCxyX3BrdFtrXS5iZl9sZW4g LSAxLHJjdnRpbW8sZSxzdGNocix0dXJuKTsKLSNlbHNlCi0jaWZkZWYgU1RSQVRVUwotCWogPSB0 dGlubChyZWNwa3Qscl9wa3Rba10uYmZfbGVuIC0gMSxyY3Z0aW1vLGUsc3RjaHIsdHVybik7Ci0j ZWxzZQotI2lmZGVmIE9TMgotCWogPSB0dGlubChyZWNwa3Qscl9wa3Rba10uYmZfbGVuIC0gMSxy Y3Z0aW1vLGUsc3RjaHIsdHVybik7Ci0jZWxzZQotI2lmZGVmIE9TSwotCWogPSB0dGlubChyZWNw a3Qscl9wa3Rba10uYmZfbGVuIC0gMSxyY3Z0aW1vLGUsc3RjaHIsdHVybik7Ci0jZWxzZQotCWog PSB0dGlubChyZWNwa3Qscl9wa3Rba10uYmZfbGVuIC0gMSxyY3Z0aW1vLGUsc3RjaHIpOwotI2Vu ZGlmIC8qIE9TSyAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSNl bmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIFVOSVgg Ki8KLQlpZiAocGFyaXR5ICE9IDAgJiYgcGFyaXR5ICE9ICdzJyAmJiB0dHBydHkgIT0gMCkgewot CSAgICBpZiAocGFyaXR5ICE9IHR0cHJ0eSkgYXV0b3BhciA9IDE7Ci0JICAgIHBhcml0eSA9IHR0 cHJ0eTsKLQl9Ci0jZWxzZSAvKiAhUEFSU0VOU0UgKi8KLQlqID0gdHRpbmwocmVjcGt0LHJfcGt0 W2tdLmJmX2xlbiAtIDEscmN2dGltbyxlKTsKLSNlbmRpZiAvKiBQQVJTRU5TRSAqLwotCi0jaWZk ZWYgREVCVUcKLQlpZiAoZGVibG9nKSAgewotCSAgICBkZWJ1ZyhGMTAxLCJycGFjayB0dGlubCBs ZW4iLCIiLGopOwotI2lmZGVmIEdGVElNRVIKLQkgICAgdDIgPSBnZnRpbWVyKCk7Ci0JICAgIGRl YnVnKEYxMDEsInJwYWNrIHR0aW5sIG1zZWMiLCIiLChsb25nKSgodDItdDEpKjEwMDAuMCkpOwot I2VuZGlmIC8qIEdGVElNRVIgKi8KLQl9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotI2lmZGVmIFNU UkVBTUlORwotICAgIGlmIChzdHJlYW1pbmcgJiYgc25kdHlwID09ICdEJyAmJiBqID09IDApCi0g ICAgICAgIHJldHVybignWScpOwotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotCi0JaWYgKGogPCAw KSB7Ci0JICAgIC8qIC0xID09IHRpbWVvdXQsIC0yID09IF5DLCAtMyA9PSBjb25uZWN0aW9uIGxv c3Qgb3IgZmF0YWwgaS9vICovCi0JICAgIGRlYnVnKEYxMDEsInJwYWNrOiB0dGlubCBmYWlscyIs IiIsaik7IC8qIE90aGVyd2lzZSwgKi8KLQkgICAgZnJlZXJidWYoayk7CQkvKiBGcmVlIHRoaXMg YnVmZmVyICovCi0JICAgIGlmIChqIDwgLTEpIHsJCS8qIEJhaWwgb3V0IGlmIF5DXkMgdHlwZWQu ICovCi0JCWlmIChqID09IC0yKSB7Ci0JCSAgICBpbnRlcnJ1cHRlZCA9IDE7Ci0JCSAgICBkZWJ1 ZyhGMTAxLCJycGFjayBeQyBzZXJ2ZXIiLCIiLHNlcnZlcik7Ci0JCSAgICBkZWJ1ZyhGMTAxLCJy cGFjayBeQyBlbl9maW4iLCIiLGVuX2Zpbik7Ci0JCX0gZWxzZSBpZiAoaiA9PSAtMykgewotCQkg ICAgZmF0YWxpbyA9IDE7Ci0JCSAgICBkZWJ1ZyhGMTAxLCJycGFjayBmYXRhbGlvIiwiIixlbl9m aW4pOwotCQl9Ci0JCXJldHVybihqKTsKLQkgICAgfQotCSAgICBpZiAobmFrc3RhdGUpCQkvKiBq ID09IC0xIGlzIGEgcmVhZCB0aW1lb3V0ICovCi0JICAgICAgeHhzY3JlZW4oU0NSX1BULCdUJywo bG9uZyl3aW5sbywiIik7Ci0JICAgIGVsc2UKLQkgICAgICB4eHNjcmVlbihTQ1JfUFQsJ1QnLChs b25nKXBrdG51bSwiIik7Ci0JICAgIGxvZ3BrdCgncicsLTEsKENIQVIgKikiPHRpbWVvdXQ+Iiww KTsKLQkgICAgaWYgKGZsb3cgPT0gMSkgdHRvYyhYT04pOwkvKiBJbiBjYXNlIG9mIFhvZmYgYmxv Y2thZ2UuICovCi0JICAgIHJldHVybignVCcpOwotCX0KLSNpZmRlZiBDS19BVVRPREwKLSAgICB9 Ci0jZW5kaWYgLyogQ0tfQVVUT0RMICovCi0KLSAgICBycGt0bCA9IGo7Ci0gICAgdGxjaSArPSBq OwkJCQkvKiBBbGwgT0ssIENvdW50IHRoZSBjaGFyYWN0ZXJzLiAqLwotICAgIGZsY2kgKz0gajsK LQotLyogRmluZCBzdGFydCBvZiBwYWNrZXQgKi8KLQotI2lmbmRlZiBQQVJTRU5TRQotICAgIGZv ciAoaSA9IDA7IChyZWNwa3RbaV0gIT0gc3RjaHIpICYmIChpIDwgaik7IGkrKykKLSAgICAgIHNv aHArKzsJCQkJLyogRmluZCBtYXJrICovCi0gICAgaWYgKGkrKyA+PSBqKSB7CQkJLyogRGlkbid0 IGZpbmQgaXQuICovCi0JbG9ncGt0KCdyJywtMSwiPHRpbWVvdXQ+IiwwKTsKLQlmcmVlcmJ1Zihr KTsKLQlyZXR1cm4oJ1QnKTsKLSAgICB9Ci0jZWxzZQotICAgIGkgPSAxOwkJCQkvKiB0dGlubCBk b2VzIHRoaXMgZm9yIHVzICovCi0jZW5kaWYgLyogUEFSU0VOU0UgKi8KLQotICAgIHJwYWNrZXRz Kys7CQkJCS8qIENvdW50IHJlY2VpdmVkIHBhY2tldC4gKi8KLSAgICBscCA9IGk7CQkJCS8qIFJl bWVtYmVyIExFTiBwb3NpdGlvbi4gKi8KLSAgICBpZiAoKGogPSB4dW5jaGFyKHJlY3BrdFtpKytd KSkgPT0gMCkgeyAvKiBHZXQgcGFja2V0IGxlbmd0aC4gICovCi0gICAgICAgIGlmICgoaiA9IGxw KzUpID4gTUFYUlApIHsJLyogTG9uZyBwYWNrZXQgKi8KLQkgICAgcmV0dXJuKCdRJyk7CQkvKiBU b28gbG9uZyAqLwotCX0KLQotI2lmZGVmIENLVFVOSU5HCi0JLyogU2F2ZSBzb21lIGZ1bmN0aW9u LWNhbGwgYW5kIGxvb3Agb3ZlcmhlYWQuLi4gKi8KLSNpZmRlZiBDT01NRU5UCi0JLyogdHRpbmwo KSBhbHJlYWR5IHJlbW92ZWQgcGFyaXR5ICovCi0JaWYgKHBhcml0eSkKLSNlbmRpZiAvKiBDT01N RU5UICovCi0JICBjaGsgPSAodW5zaWduZWQpICgodW5zaWduZWQpIHJlY3BrdFtpLTFdICsKLQkJ CSAgICAodW5zaWduZWQpIHJlY3BrdFtpXSAgICsKLQkJCSAgICAodW5zaWduZWQpIHJlY3BrdFtp KzFdICsKLQkJCSAgICAodW5zaWduZWQpIHJlY3BrdFtpKzJdICsKLQkJCSAgICAodW5zaWduZWQp IHJlY3BrdFtpKzNdCi0JCQkgICAgKTsKLSNpZmRlZiBDT01NRU5UCi0JZWxzZQotCSAgY2hrID0g KHVuc2lnbmVkKSAoKHVuc2lnbmVkKSAocmVjcGt0W2ktMV0gJiAwNzcpICsKLQkJCSAgICAodW5z aWduZWQpIChyZWNwa3RbaV0gICAmIDA3NykgKwotCQkJICAgICh1bnNpZ25lZCkgKHJlY3BrdFtp KzFdICYgMDc3KSArCi0JCQkgICAgKHVuc2lnbmVkKSAocmVjcGt0W2krMl0gJiAwNzcpICsKLQkJ CSAgICAodW5zaWduZWQpIChyZWNwa3RbaSszXSAmIDA3NykKLQkJCSAgICApOwotI2VuZGlmIC8q IENPTU1FTlQgKi8KLQlpZiAoeHVuY2hhcihyZWNwa3Rbal0pICE9ICgoKChjaGsgJiAwMzAwKSA+ PiA2KSArIGNoaykgJiAwNzcpKQotI2Vsc2UKLQl4ID0gcmVjcGt0W2pdOwkJCS8qIEhlYWRlciBj aGVja3N1bS4gKi8KLQlyZWNwa3Rbal0gPSAnXDAnOwkJLyogQ2FsY3VsYXRlICYgY29tcGFyZS4g Ki8KLQlpZiAoeHVuY2hhcih4KSAhPSBjaGsxKHJlY3BrdCtscCw1KSkKLSNlbmRpZiAvKiBDS1RV TklORyAqLwotCSAgewotCSAgICAgIGZyZWVyYnVmKGspOwotCSAgICAgIGxvZ3BrdCgncicsLTEs KENIQVIgKikiPGNydW5jaGVkOmhkcj4iLDApOwotCSAgICAgIHh4c2NyZWVuKFNDUl9QVCwnJScs KGxvbmcpcGt0bnVtLCJCYWQgcGFja2V0IGhlYWRlciIpOwotCSAgICAgIHJldHVybignUScpOwot CSAgfQotI2lmbmRlZiBDS1RVTklORwotCXJlY3BrdFtqXSA9IHg7CQkJLyogQ2hlY2tzdW0gb2ss IHB1dCBpdCBiYWNrLiAqLwotI2VuZGlmIC8qIENLVFVOSU5HICovCi0JcmxuID0geHVuY2hhcihy ZWNwa3Rbai0yXSkgKiA5NSArIHh1bmNoYXIocmVjcGt0W2otMV0pIC0gYmN0bDsKLQlqID0gMzsJ CQkJLyogRGF0YSBvZmZzZXQuICovCi0gICAgfSBlbHNlIGlmIChqIDwgMykgewotCWRlYnVnKEYx MDEsInJwYWNrIHBhY2tldCBsZW5ndGggbGVzcyB0aGFuIDMiLCIiLGopOwotCWZyZWVyYnVmKGsp OwotCWxvZ3BrdCgncicsLTEsKENIQVIgKikiPGNydW5jaGVkOmxlbj4iLDApOwotCXh4c2NyZWVu KFNDUl9QVCwnJScsKGxvbmcpcGt0bnVtLCJCYWQgcGFja2V0IGxlbmd0aCIpOwotCXJldHVybign UScpOwotICAgIH0gZWxzZSB7Ci0JcmxuID0gaiAtIGJjdGwgLSAyOwkJLyogUmVndWxhciBwYWNr ZXQgKi8KLQlqID0gMDsJCQkJLyogTm8gZXh0ZW5kZWQgaGVhZGVyICovCi0gICAgfQotICAgIHJz biA9IHh1bmNoYXIocmVjcGt0W2krK10pOwkJLyogU2VxdWVuY2UgbnVtYmVyICovCi0gICAgaWYg KHBrdGxvZykJCQkJLyogU2F2ZSBhIGZ1bmN0aW9uIGNhbGwhICovCi0gICAgICBsb2dwa3QoJ3In LHJzbixzb2hwLHJsbitiY3RsK2orNCk7Ci0gICAgaWYgKHJzbiA8IDAgfHwgcnNuID4gNjMpIHsK LQlkZWJ1ZyhGMTAxLCJycGFjayBiYWQgc2VxdWVuY2UgbnVtYmVyIiwiIixyc24pOwotCWZyZWVy YnVmKGspOwotCWlmIChwa3Rsb2cpCi0JICBsb2dwa3QoJ3InLHJzbiwoQ0hBUiAqKSI8Y3J1bmNo ZWQ6c2VxPiIsMCk7Ci0JeHhzY3JlZW4oU0NSX1BULCclJywobG9uZylwa3RudW0sIkJhZCBzZXF1 ZW5jZSBudW1iZXIiKTsKLQlyZXR1cm4oJ1EnKTsKLSAgICB9Ci0vKgotICBJZiB0aGlzIHBhY2tl dCBoYXMgdGhlIHNhbWUgdHlwZSBhcyB0aGUgcGFja2V0IGp1c3Qgc2VudCwgYXNzdW1lIGl0IGlz Ci0gIGFuIGVjaG8gYW5kIGlnbm9yZSBpdC4gIERvbid0IGV2ZW4gYm90aGVyIHdpdGggdGhlIGJs b2NrIGNoZWNrIGNhbGN1bGF0aW9uOgotICBldmVuIGlmIHRoZSBwYWNrZXQgaXMgY29ycnVwdGVk LCB3ZSBkb24ndCB3YW50IHRvIE5BSyBhbiBlY2hvZWQgcGFja2V0LgotICBOb3IgbXVzdCB3ZSBO QUsgYW4gQUNLIG9yIE5BSy4KLSovCi0gICAgdHlwZSA9IHJlY3BrdFtpKytdOwkJCS8qIEdldCBw YWNrZXQncyBUWVBFIGZpZWxkICovCi0gICAgaWYgKHR5cGUgPT0gc25kdHlwIHx8IChuYWtzdGF0 ZSAmJiAodHlwZSA9PSAnTicgLyogfHwgdHlwZSA9PSAnWScgKi8gKSkpIHsKLQlkZWJ1ZyhGMDAw LCJycGFjayBlY2hvIiwiIix0eXBlKTsgLyogSWYgaXQncyBhbiBlY2hvICovCi0JZnJlZXJidWYo ayk7CQkJLyogRnJlZSB0aGlzIGJ1ZmZlciAqLwotCWxvZ3BrdCgnIycscnNuLChDSEFSICopIjxl Y2hvOmlnbm9yZWQ+IiwwKTsKLQlyZXR1cm4oJ2UnKTsJCQkvKiBSZXR1cm4gc3BlY2lhbCAobG93 ZXJjYXNlKSBjb2RlICovCi0gICAgfQotLyoKLSAgU2VwYXJhdGUgdGhlIGRhdGEgZnJvbSB0aGUg YmxvY2sgY2hlY2ssIGFjY291bnRpbmcgZm9yIHRoZSBjYXNlIHdoZXJlCi0gIGEgcGFja2V0IHdh cyByZXRyYW5zbWl0dGVkIGFmdGVyIHRoZSBibG9jayBjaGVjayBzd2l0Y2hlZC4gIFRoZSAiVHlw ZSAzCi0gIEZvcmNlZCIgYnVzaW5lc3MgaXMgbmV3IHRvIEMtS2VybWl0IDkuMC4KLSovCi0gICAg aWYgKGJjdGYpIHsgCQkJLyogVHlwZSAzIGZvcmNlZCBvbiBhbGwgcGFja2V0cyAqLwotCWJjdGwg PSBjaGtsZW4gPSAzOwotICAgIH0gZWxzZSBpZiAoKHR5cGUgPT0gJ0knIHx8IHR5cGUgPT0gJ1Mn KSkgeyAvKiBPdGhlcndpc2UuLi4gKi8KLQlpZiAocmVjcGt0WzExXSA9PSAnNScpIHsJLyogU2Vu ZGVyIGlzIGZvcmNpbmcgVHlwZSAzICovCi0JICAgIGJjdGYgPSAxOwkJCS8qIFNvIHdlIHdpbGwg dG9vICovCi0JICAgIGJjdGwgPSBjaGtsZW4gPSAzOwotCSAgICBkZWJ1ZyhGMTAwLCJSRUNPR05J WkUgQkxPQ0sgQ0hFQ0sgVFlQRSA1IiwiIiwwKTsKLQl9IGVsc2UgewkJCS8qIE5vcm1hbCBjYXNl ICovCi0JICAgIC8qIEkgJiBTIHBhY2tldHMgYWx3YXlzIGhhdmUgdHlwZSAxICovCi0JICAgIGNo a2xlbiA9IDE7Ci0JICAgIHJsbiA9IHJsbiArIGJjdGwgLSAxOwotCX0KLSAgICB9IGVsc2UgaWYg KHR5cGUgPT0gJ04nKSB7CQkvKiBBIE5BSyBwYWNrZXQgbmV2ZXIgaGFzIGRhdGEgKi8KLQljaGts ZW4gPSB4dW5jaGFyKHJlY3BrdFtscF0pIC0gMjsKLQlpZiAoY2hrbGVuIDwgMSB8fCBjaGtsZW4g PiAzKSB7CS8qIEpIRCAxMyBBcHIgMjAxMCAqLwotCSAgICBkZWJ1ZyhGMTAxLCJycGFjayBiYWQg bmFrIGNoa2xlbiIsIiIsY2hrbGVuKTsKLQkgICAgZnJlZXJidWYoayk7Ci0JICAgIGxvZ3BrdCgn cicsLTEsKENIQVIgKikiPGNydW5jaGVkOmNoa2xlbj4iLDApOwotCSAgICB4eHNjcmVlbihTQ1Jf UFQsJyUnLChsb25nKXBrdG51bSwiKGJhZCBuYWspIik7Ci0JICAgIHJldHVybignUScpOwotCX0K LQlybG4gPSBybG4gKyBiY3RsIC0gY2hrbGVuOwotICAgIH0gZWxzZSBjaGtsZW4gPSBiY3RsOwot I2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewkJCS8qIFNhdmUgMiBmdW5jdGlvbiBjYWxs cyAqLwotCWRlYnVnKEYxMDEsInJwYWNrIGJjdGwiLCIiLGJjdGwpOwotCWRlYnVnKEYxMDEsInJw YWNrIGNoa2xlbiIsIiIsY2hrbGVuKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICBp ICs9IGo7CQkJCS8qIEJ1ZmZlciBpbmRleCBvZiBEQVRBIGZpZWxkICovCi0gICAgcmRhdGFwID0g cmVjcGt0K2k7CQkJLyogUG9pbnRlciB0byBEQVRBIGZpZWxkICovCi0gICAgaWYgKChqID0gcmxu ICsgaSkgPiByX3BrdFtrXS5iZl9sZW4pIHsgLyogTWFrZSBzdXJlIGl0IGZpdHMgKi8KLQlkZWJ1 ZyhGMTAxLCJwYWNrZXQgdG9vIGxvbmciLCIiLGopOwotCWZyZWVyYnVmKGspOwotCWxvZ3BrdCgn cicscnNuLChDSEFSICopIjxvdmVyZmxvdz4iLDApOwotCXJldHVybignUScpOwotICAgIH0KLSAg ICBmb3IgKHggPSAwOyB4IDwgY2hrbGVuOyB4KyspCS8qIENvcHkgdGhlIGJsb2NrIGNoZWNrICov Ci0gICAgICBwYmNbeF0gPSByZWNwa3Rbait4XTsJCS8qIDMgYnl0ZXMgYXQgbW9zdC4gKi8KLSAg ICBwYmNbeF0gPSAnXDAnOwkJCS8qIE51bGwtdGVybWluYXRlIGJsb2NrIGNoZWNrIHN0cmluZyAq LwotICAgIHJlY3BrdFtqXSA9ICdcMCc7CQkJLyogYW5kIHRoZSBwYWNrZXQgRGF0YSBmaWVsZC4g Ki8KLQotICAgIGlmIChjaGtsZW4gPT0gMiAmJiBiY3R1ID09IDQpIHsJLyogQWRqdXN0IGZvciBC bGFuay1GcmVlLTIgKi8KLQljaGtsZW4gPSA0OwkJCS8qIChjaGtsZW4gaXMgbm93IGEgbWlzbm9t ZXIuLi4pICovCi0JZGVidWcoRjEwMCwicnBhY2sgYmxvY2sgY2hlY2sgQiIsIiIsMCk7Ci0gICAg fQotICAgIHN3aXRjaCAoY2hrbGVuKSB7CQkJLyogQ2hlY2sgdGhlIGJsb2NrIGNoZWNrICovCi0g ICAgICBjYXNlIDE6CQkJCS8qIFR5cGUgMSwgNi1iaXQgY2hlY2tzdW0gKi8KLQlpZiAoeHVuY2hh cigqcGJjKSAhPSBjaGsxKHJlY3BrdCtscCxqLWxwKSkgewotI2lmZGVmIERFQlVHCi0JICAgIGlm IChkZWJsb2cpIHsKLQkJZGVidWcoRjExMCwiY2hlY2tlZCBjaGFycyIscmVjcGt0K2xwLDApOwot CQlkZWJ1ZyhGMTAxLCJibG9jayBjaGVjayAoMSkiLCIiLChpbnQpIHh1bmNoYXIoKnBiYykpOwot CQlkZWJ1ZyhGMTAxLCJzaG91bGQgYmUgKDEpIiwiIixjaGsxKHJlY3BrdCtscCxqLWxwKSk7Ci0J ICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotCSAgICBmcmVlcmJ1ZihrKTsKLQkgICAgbG9ncGt0 KCdyJywtMSwoQ0hBUiAqKSI8Y3J1bmNoZWQ6Y2hrMT4iLDApOwotCSAgICB4eHNjcmVlbihTQ1Jf UFQsJyUnLChsb25nKXBrdG51bSwiQ2hlY2tzdW0gZXJyb3IiKTsKLQkgICAgcmV0dXJuKCdRJyk7 Ci0JfQotCWJyZWFrOwotICAgICAgY2FzZSAyOgkJCQkvKiBUeXBlIDIsIDEyLWJpdCBjaGVja3N1 bSAqLwotCXggPSB4dW5jaGFyKCpwYmMpIDw8IDYgfCB4dW5jaGFyKHBiY1sxXSk7Ci0JaWYgKHgg IT0gY2hrMihyZWNwa3QrbHAsai1scCkpIHsgLyogTm8gbWF0Y2ggKi8KLQkgICAgaWYgKHR5cGUg PT0gJ0UnKSB7CQkvKiBBbGxvdyBFIHBhY2tldHMgdG8gaGF2ZSB0eXBlIDEgKi8KLQkJcmVjcGt0 W2orK10gPSBwYmNbMF07Ci0JCXJlY3BrdFtqXSA9ICdcMCc7Ci0JCWlmICh4dW5jaGFyKHBiY1sx XSkgPT0gY2hrMShyZWNwa3QrbHAsai1scCkpCi0JCSAgYnJlYWs7Ci0JCWVsc2UKLQkJICByZWNw a3RbLS1qXSA9ICdcMCc7Ci0JICAgIH0KLSNpZmRlZiBERUJVRwotCSAgICBpZiAoZGVibG9nKSB7 Ci0JCWRlYnVnKEYxMTAsImNoZWNrZWQgY2hhcnMiLHJlY3BrdCtscCwwKTsKLQkJZGVidWcoRjEw MSwiYmxvY2sgY2hlY2sgKDIpIiwiIiwgeCk7Ci0JCWRlYnVnKEYxMDEsInNob3VsZCBiZSAoMiki LCIiLCAoaW50KSBjaGsyKHJlY3BrdCtscCxqLWxwKSk7Ci0JICAgIH0KLSNlbmRpZiAvKiBERUJV RyAqLwotCSAgICBmcmVlcmJ1ZihrKTsKLQkgICAgbG9ncGt0KCdyJywtMSwoQ0hBUiAqKSI8Y3J1 bmNoZWQ6Y2hrMj4iLDApOwotCSAgICB4eHNjcmVlbihTQ1JfUFQsJyUnLChsb25nKXBrdG51bSwi Q2hlY2tzdW0gZXJyb3IiKTsKLQkgICAgcmV0dXJuKCdRJyk7Ci0JfQotCWJyZWFrOwotICAgICAg Y2FzZSAzOgkJCQkvKiBUeXBlIDMsIDE2LWJpdCBDUkMgKi8KLQljcmMgPSAoeHVuY2hhcihwYmNb MF0pIDw8IDEyKQotCSAgICB8ICh4dW5jaGFyKHBiY1sxXSkgPDwgNikKLQkgICAgfCAoeHVuY2hh cihwYmNbMl0pKTsKLQlpZiAoY3JjICE9IGNoazMocmVjcGt0K2xwLGotbHApKSB7Ci0JICAgIGlm ICh0eXBlID09ICdFJykgewkJLyogQWxsb3cgRSBwYWNrZXRzIHRvIGhhdmUgdHlwZSAxICovCi0J CXJlY3BrdFtqKytdID0gcGJjWzBdOwotCQlyZWNwa3RbaisrXSA9IHBiY1sxXTsKLQkJcmVjcGt0 W2pdID0gJ1wwJzsKLQkJaWYgKHh1bmNoYXIocGJjWzJdKSA9PSBjaGsxKHJlY3BrdCtscCxqLWxw KSkKLQkJICBicmVhazsKLQkJZWxzZSB7IGogLT0yOyByZWNwa3Rbal0gPSAnXDAnOyB9Ci0JICAg IH0KLSNpZmRlZiBERUJVRwotCSAgICBpZiAoZGVibG9nKSB7Ci0JCWRlYnVnKEYxMTAsImNoZWNr ZWQgY2hhcnMiLHJlY3BrdCtscCwwKTsKLQkJZGVidWcoRjEwMSwiYmxvY2sgY2hlY2sgKDMpIiwi IixjcmMpOwotCQlkZWJ1ZyhGMTAxLCJzaG91bGQgYmUgKDMpIiwiIiwoaW50KSBjaGszKHJlY3Br dCtscCxqLWxwKSk7Ci0JICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotCSAgICBmcmVlcmJ1Zihr KTsKLQkgICAgbG9ncGt0KCdyJywtMSwoQ0hBUiAqKSI8Y3J1bmNoZWQ6Y2hrMz4iLDApOwotCSAg ICB4eHNjcmVlbihTQ1JfUFQsJyUnLChsb25nKXBrdG51bSwiQ1JDIGVycm9yIik7Ci0JICAgIHJl dHVybignUScpOwotCX0KLQlicmVhazsKLSAgICAgIGNhc2UgNDoJCQkJLyogVHlwZSA0ID0gVHlw ZSAyLCBubyBibGFua3MuICovCi0JeCA9ICh1bnNpZ25lZCkoKHh1bmNoYXIoKnBiYykgLSAxKSA8 PCA2KSB8Ci0JICAodW5zaWduZWQpKHh1bmNoYXIocGJjWzFdKSAtIDEpOwotCWlmICh4ICE9IGNo azIocmVjcGt0K2xwLGotbHApKSB7Ci0JICAgIGlmICh0eXBlID09ICdFJykgewkvKiBBbGxvdyBF IHBhY2tldHMgdG8gaGF2ZSB0eXBlIDEgKi8KLQkJcmVjcGt0W2orK10gPSBwYmNbMF07Ci0JCXJl Y3BrdFtqXSA9ICdcMCc7Ci0JCWlmICh4dW5jaGFyKHBiY1sxXSkgPT0gY2hrMShyZWNwa3QrbHAs ai1scCkpCi0JCSAgYnJlYWs7Ci0JCWVsc2UKLQkJICByZWNwa3RbLS1qXSA9ICdcMCc7Ci0JICAg IH0KLQkgICAgZGVidWcoRjEwMSwiYmFkIHR5cGUgQiBibG9jayBjaGVjayIsIiIseCk7Ci0JICAg IGZyZWVyYnVmKGspOwotCSAgICBsb2dwa3QoJ3InLC0xLChDSEFSICopIjxjcnVuY2hlZDpjaGti PiIsMCk7Ci0JICAgIHh4c2NyZWVuKFNDUl9QVCwnJScsKGxvbmcpcGt0bnVtLCJDaGVja3N1bSBl cnJvciIpOwotCSAgICByZXR1cm4oJ1EnKTsKLQl9Ci0JYnJlYWs7Ci0gICAgICBkZWZhdWx0OgkJ CS8qIFNob3VsZG4ndCBoYXBwZW4uLi4gKi8KLQlmcmVlcmJ1ZihrKTsKLQlsb2dwa3QoJ3InLC0x LChDSEFSICopIjxjcnVuY2hlZDpjaGt4PiIsMCk7Ci0JeHhzY3JlZW4oU0NSX1BULCclJywobG9u Zylwa3RudW0sIihjcnVuY2hlZCkiKTsKLQlyZXR1cm4oJ1EnKTsKLSAgICB9Ci0gICAgZGVidWco RjEwMSwicnBhY2sgYmxvY2sgY2hlY2sgT0siLCIiLHJzbik7Ci0KLS8qIE5vdyB3ZSBjYW4gYmVs aWV2ZSB0aGUgc2VxdWVuY2UgbnVtYmVyLCBhbmQgb3RoZXIgZmllbGRzLiAqLwotLyogSGVyZSB3 ZSB2aW9sYXRlIHN0cmljdCBwcmluY2lwbGVzIG9mIGxheWVyaW5nLCBldGMsIGFuZCBsb29rIGF0 IHRoZSAgKi8KLS8qIHBhY2tldCBzZXF1ZW5jZSBudW1iZXIuICBJZiB0aGVyZSdzIGFscmVhZHkg YSBwYWNrZXQgd2l0aCB0aGUgc2FtZSAgICovCi0vKiBudW1iZXIgaW4gdGhlIHdpbmRvdywgd2Ug cmVtb3ZlIHRoaXMgb25lIHNvIHRoYXQgdGhlIHdpbmRvdyB3aWxsIG5vdCAqLwotLyogZmlsbCB1 cC4gKi8KLQotICAgIGlmICgoeCA9IHJzZXF0YmxbcnNuXSkgIT0gLTEpIHsJLyogQWxyZWFkeSBh IHBhY2tldCB3aXRoIHRoaXMgbnVtYmVyICovCi0JcmV0cmFucysrOwkJCS8qIENvdW50IGl0IGZv ciBzdGF0aXN0aWNzICovCi0JZGVidWcoRjEwMSwicnBhY2sgZ290IGR1cCIsIiIscnNuKTsKLQls b2dwa3QoJ3InLHJzbiwoQ0hBUiAqKSI8ZHVwbGljYXRlPiIsMCk7Ci0JZnJlZXJidWYoeCk7CQkJ LyogRnJlZSBvbGQgYnVmZmVyLCBrZWVwIG5ldyBwYWNrZXQuICovCi0Jcl9wa3Rba10ucGtfcnRy Kys7CQkvKiBDb3VudCB0aGlzIGFzIGEgcmV0cmFuc21pc3Npb24uICovCi0gICAgfQotCi0vKiBO ZXcgcGFja2V0LCBub3Qgc2VlbiBiZWZvcmUsIGVudGVyIGl0IGludG8gdGhlIHJlY2VpdmUgd2lu ZG93LiAqLwotCi0jaWZkZWYgQ0tfVElNRVJTCi0gICAgaWYgKHRpbWludCA+IDApCi0gICAgICBy cnR0YmxbcnNuXSA9IGd0aW1lcigpOwkJLyogVGltZXN0YW1wICovCi0jZW5kaWYgLyogQ0tfVElN RVJTICovCi0KLSAgICByc2VxdGJsW3Jzbl0gPSBrOwkJCS8qIE1ha2UgYmFjayBwb2ludGVyICov Ci0gICAgcl9wa3Rba10ucGtfc2VxID0gcnNuOwkJLyogUmVjb3JkIGluIHBhY2tldCBpbmZvIHN0 cnVjdHVyZSAqLwotICAgIHJfcGt0W2tdLnBrX3R5cCA9IHR5cGU7CQkvKiBTZXF1ZW5jZSwgdHlw ZSwuLi4gKi8KLSAgICByX3BrdFtrXS5wa19hZHIgPSByZGF0YXA7CQkvKiBwb2ludGVyIHRvIGRh dGEgYnVmZmVyICovCi0gICAgaWYgKGxvY2FsKSB7CQkJLyogU2F2ZSBhIGZ1bmN0aW9uIGNhbGwh ICovCi0JaW50IHggPSAwOwotCWlmIChmZGlzcGxhICE9IFhZRkRfTikgeCA9IDE7Ci0JaWYgKGZk aXNwbGEgPT0gWFlGRF9CICYmICh0eXBlID09ICdEJyB8fCBzbmR0eXAgPT0gJ0QnKSkgeCA9IDA7 Ci0JaWYgKHgpCQkJCS8qIFVwZGF0ZSBzY3JlZW4gKi8KLQkgIHh4c2NyZWVuKFNDUl9QVCwoY2hh cil0eXBlLChsb25nKXJzbiwoY2hhciAqKXNvaHApOwotICAgIH0KLSAgICByZXR1cm4odHlwZSk7 CQkJLyogUmV0dXJuIHBhY2tldCB0eXBlICovCi19Ci0KLS8qICBMIE8gRyBQIEsgVCAgLS0gIExv ZyBwYWNrZXQgbnVtYmVyIG4sIHBvaW50ZWQgdG8gYnkgcy4gICovCi0KLS8qIGMgPSAncycgKHNl bmQpIG9yICdyJyAocmVjZWl2ZSkgKi8KLQotVk9JRAotI2lmZGVmIENLX0FOU0lDCi1sb2dwa3Qo Y2hhciBjLGludCBuLCBDSEFSICpzLCBpbnQgbGVuKQotI2Vsc2UKLWxvZ3BrdChjLG4scyxsZW4p IGNoYXIgYzsgaW50IG47IENIQVIgKnM7IGludCBsZW47Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8K LS8qIGxvZ3BrdCAqLyB7Ci0gICAgY2hhciBwbG9nWzIwXTsKLSAgICBpZiAoIXMpIHMgPSAoQ0hB UiAqKSIiOwotICAgIGlmIChwa3Rsb2cpIGlmIChjaGtmbihaUEZJTEUpID4gMCkgewotCWlmIChu IDwgMCkJCQkvKiBDb25zdHJ1Y3QgZW50cnkgaGVhZGVyICovCi0JICBzcHJpbnRmKHBsb2csIiVj LXh4LSUwMmQtIixjLChndGltZXIoKSU2MCkpOyAvKiBzYWZlICovCi0JZWxzZQotCSAgc3ByaW50 ZihwbG9nLCIlYy0lMDJkLSUwMmQtIixjLG4sKGd0aW1lcigpJTYwKSk7IC8qIHNhZmUgKi8KLQlp ZiAoenNvdXR4KFpQRklMRSxwbG9nLChpbnQpc3RybGVuKHBsb2cpKSA8IDApIHsKLQkgICAgcGt0 bG9nID0gMDsKLQkgICAgcmV0dXJuOwotCX0gZWxzZSB7Ci0JICAgIGlmIChsZW4gPT0gMCkKLQkg ICAgICBsZW4gPSBzdHJsZW4oKGNoYXIgKilzKTsKLQkgICAgaWYgKGxlbiA+IDApIHsKLQkJY2hh ciAqIHA7CQkvKiBNYWtlIFNPUCBwcmludGFibGUgKi8KLQkJaW50IHg7CQkJLyogc28gd2UgY2Fu IGxvb2sgYXQgbG9ncyB3aXRob3V0ICovCi0JCXAgPSBkYmNocigqcyk7CQkvKiB0cmlnZ2VyaW5n IGF1dG9kb3dubG9hZC4gKi8KLQkJeCA9IHN0cmxlbihkYmNocigqcykpOwotCQlpZiAoKnMgPCAz MiB8fCAoKnMgPiAxMjcgJiYgKnMgPCAxNjApKSB7Ci0JCSAgICBpZiAoenNvdXR4KFpQRklMRSxw LHgpIDwgMCkgewotCQkJcGt0bG9nID0gMDsKLQkJCXJldHVybjsKLQkJICAgIH0gZWxzZSB7Ci0J CQlsZW4tLTsKLQkJCXMrKzsKLQkJICAgIH0KLQkJfQotCSAgICB9Ci0JICAgIGlmICh6c291dHgo WlBGSUxFLChjaGFyICopcyxsZW4pIDwgMCkgewotCQlwa3Rsb2cgPSAwOwotCQlyZXR1cm47Ci0J ICAgIH0gZWxzZSBpZiAoenNvdXR4KFpQRklMRSwKLSNpZmRlZiBVTklYCi0JCQkgICAgICAiXG4i LCAxCi0jZWxzZQotI2lmZGVmIGRhdGFnZW5lcmFsCi0JCQkgICAgICAiXG4iLCAxCi0jZWxzZQot I2lmZGVmIE9TSwotCQkJICAgICAgIlxyIiwgMQotI2Vsc2UKLSNpZmRlZiBNQUMKLQkJCSAgICAg ICJcciIsIDEKLSNlbHNlCi0JCQkgICAgICAiXDAxNVwwMTIiLCAyCi0jZW5kaWYgLyogTUFDICov Ci0jZW5kaWYgLyogT1NLICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBV TklYICovCi0JCQkgICAgICApIDwgMCkgewotCQlwa3Rsb2cgPSAwOwotCSAgICB9Ci0JfQotICAg IH0KLX0KLQotLyogIFQgUyBUIEEgVCBTICAtLSAgUmVjb3JkIHN0YXRpc3RpY3MgaW4gdHJhbnNh Y3Rpb24gbG9nICAqLwotCi1WT0lECi10c3RhdHMoKSB7Ci0gICAgY2hhciAqdHAgPSBOVUxMOwot I2lmZGVmIEdGVElNRVIKLSAgICBDS0ZMT0FUIHh4OwkJCQkvKiBFbGFwc2VkIHRpbWUgZGl2aXNv ciAqLwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLQotICAgIGRlYnVnKEYxMDEsInRzdGF0cyB4ZnNl Y3MiLCIiLHhmc2Vjcyk7Ci0gICAgZGVidWcoRjEwMSwidHN0YXRzIGZpbGNudCIsIiIsZmlsY250 KTsKLSAgICBpZiAoZmlsY250ID09IDEpIHsJCQkvKiBHZXQgdGltaW5nIGZvciBzdGF0aXN0aWNz ICovCi0JdHNlY3MgPSB4ZnNlY3M7CQkJLyogU2luZ2xlIGZpbGUsIHdlIGFscmVhZHkgaGF2ZSBp dCAqLwotI2lmZGVmIEdGVElNRVIKLQlkZWJ1ZyhGMTAxLCJ0c3RhdHMgZnB4ZnNlY3MiLCIiLChp bnQpZnB4ZnNlY3MpOwotCWZwdHNlY3MgPSBmcHhmc2VjczsKLSNlbmRpZiAvKiBHRlRJTUVSICov Ci0gICAgfSBlbHNlIHsJCQkJLyogTXVsdGlwbGUgZmlsZXMgKi8KLQl0c2VjcyA9IGd0aW1lcigp OwkJLyogR2V0IGN1cnJlbnQgdGltZSAqLwotI2lmZGVmIEdGVElNRVIKLQlmcHRzZWNzID0gZ2Z0 aW1lcigpOwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLSAgICB9Ci0jaWZkZWYgR0ZUSU1FUgotICAg IGlmIChmcHRzZWNzIDw9IEdGTUlOVElNRSkJCS8qIENhbGN1bGF0ZSBDUFMgKi8KLSAgICAgIGZw dHNlY3MgPSAoQ0tGTE9BVCkgR0ZNSU5USU1FOwotICAgIGRlYnVnKEYxMDEsInRzdGF0cyBmcHRz ZWNzIiwiIiwoaW50KWZwdHNlY3MpOwotICAgIHh4ID0gKENLRkxPQVQpIHRmYyAvIGZwdHNlY3M7 Ci0gICAgaWYgKHNpemVvZihsb25nKSA8PSA0KSB7CQkvKiBkb2Vzbid0IGFjY291bnQgZm9yIDE2 LWJpdCBsb25ncyAqLwotCWlmICh4eCAgPiAyMTQ3NDgzNjQ3LjApCi0JICB0ZmNwcyA9IDIxNDc0 ODM2NDdMOwkgICAgICAgIC8qIDMxIGJpdHMgKi8KLQllbHNlCi0JICB0ZmNwcyA9IChsb25nKSB4 eDsKLSAgICB9IGVsc2UKLSAgICAgIHRmY3BzID0gKGxvbmcpIHh4OwotI2Vsc2UKLSAgICBpZiAo dHNlY3MgPCAyTCkKLSAgICAgIHRzZWNzID0gMUw7Ci0gICAgZGVidWcoRjEwMSwidHN0YXRzIHRz ZWNzIiwiIix0c2Vjcyk7Ci0gICAgdGZjcHMgPSB0ZmMgLyB0c2VjczsKLSNlbmRpZiAvKiBHRlRJ TUVSICovCi0KLSAgICB6dGltZSgmdHApOwkJCQkvKiBHZXQgdGltZSBzdGFtcCAqLwotICAgIHRs b2coRjEwMCwiIiwiIiwwTCk7CQkvKiBMZWF2ZSBhIGJsYW5rIGxpbmUgKi8KLSAgICB0bG9nKEYx MTAsIlRyYW5zYWN0aW9uIGNvbXBsZXRlIix0cCwwTCk7ICAvKiBSZWNvcmQgaXQgKi8KLQotICAg IGlmIChmaWxjbnQgPCAxKSByZXR1cm47CQkvKiBJZiBubyBmaWxlcywgZG9uZS4gKi8KLQotLyog SWYgbXVsdGlwbGUgZmlsZXMsIHJlY29yZCBjaGFyYWN0ZXIgdG90YWxzIGZvciBhbGwgZmlsZXMg Ki8KLQotICAgIGlmIChmaWxjbnQgPiAxKSB7Ci0JdGxvZyhGMTAxLCIgZmlsZXMgdHJhbnNmZXJy ZWQgICAgICAgIiwiIixmaWxjbnQgLSBmaWxyZWopOwotCXRsb2coRjEwMSwiIHRvdGFsIGZpbGUg Y2hhcmFjdGVycyAgICIsIiIsdGZjKTsKLQl0bG9nKEYxMDEsIiBjb21tdW5pY2F0aW9uIGxpbmUg aW4gICAiLCIiLHRsY2kpOwotCXRsb2coRjEwMSwiIGNvbW11bmljYXRpb24gbGluZSBvdXQgICIs IiIsdGxjbyk7Ci0gICAgfQotCi0vKiBSZWNvcmQgdGltaW5nIGluZm8gZm9yIG9uZSBvciBtb3Jl IGZpbGVzICovCi0KLSNpZmRlZiBHRlRJTUVSCi0gICAgaWYgKGZpbGNudCAtIGZpbHJlaiA9PSAx KSB7Ci0JdGxvZyhGMTAxLCIgZWxhcHNlZCB0aW1lIChzZWNvbmRzKSAgIiwiIiwobG9uZykgZnB4 ZnNlY3MpOwotCXRsb2coRjEwMSwiIGVmZmVjdGl2ZSBkYXRhIHJhdGUgICAgICIsIiIsZmlsY3Bz KTsKLSAgICB9IGVsc2UgewotCXRsb2coRjEwMSwiIGVsYXBzZWQgdGltZSAoc2Vjb25kcykgICIs IiIsKGxvbmcpIGZwdHNlY3MpOwotCXRsb2coRjEwMSwiIGVmZmVjdGl2ZSBkYXRhIHJhdGUgICAg ICIsIiIsKGxvbmcpIHh4KTsKLSAgICB9Ci0jZWxzZQotICAgIHRsb2coRjEwMSwiIGVsYXBzZWQg dGltZSAoc2Vjb25kcykgICIsIiIsdHNlY3MpOwotICAgIGlmICh0c2VjcyA+IDApCi0gICAgICB0 bG9nKEYxMDEsIiBlZmZlY3RpdmUgZGF0YSByYXRlICAgICAiLCIiLCh0ZmMgLyB0c2VjcykpOwot I2VuZGlmIC8qIEdGVElNRVIgKi8KLQotICAgIHRsb2coRjEwMCwiIiwiIiwwTCk7CQkvKiBMZWF2 ZSBhIGJsYW5rIGxpbmUgKi8KLX0KLQotLyogIEYgUyBUIEEgVCBTICAtLSAgUmVjb3JkIGZpbGUg c3RhdGlzdGljcyBpbiB0cmFuc2FjdGlvbiBsb2cgICovCi0KLVZPSUQKLWZjcHMoKSB7Ci0jaWZk ZWYgR0ZUSU1FUgotICAgIGRvdWJsZSB4eDsKLSAgICBmcHhmc2VjcyA9IGdmdGltZXIoKSAtIGZw ZnNlY3M7Ci0gICAgaWYgKGZweGZzZWNzIDw9IEdGTUlOVElNRSkKLSAgICAgIGZweGZzZWNzID0g KENLRkxPQVQpIEdGTUlOVElNRTsKLSAgICB4eCA9IChDS0ZMT0FUKSBmZmMgLyBmcHhmc2VjczsK LSAgICBpZiAoc2l6ZW9mKGxvbmcpIDw9IDQpIHsKLQlpZiAoeHggID4gMjE0NzQ4MzY0Ny4wKQot CSAgdGZjcHMgPSAyMTQ3NDgzNjQ3TDsJCS8qIDMxIGJpdHMgKi8KLQllbHNlCi0JICBmaWxjcHMg PSAobG9uZykgeHg7Ci0gICAgfSBlbHNlCi0gICAgICBmaWxjcHMgPSAobG9uZykgeHg7Ci0gICAg aWYgKHNpemVvZihpbnQpID49IDQpCi0gICAgICB4ZnNlY3MgPSAoaW50KSBmcHhmc2VjczsKLSAg ICBlbHNlIGlmIChmcHhmc2VjcyA8IDMyNzY4LjApCi0gICAgICB4ZnNlY3MgPSAoaW50KSBmcHhm c2VjczsKLSAgICBlbHNlCi0gICAgICB4ZnNlY3MgPSAzMjc2NzsKLSNlbHNlIC8qIEdGVElNRVIg Ki8KLSAgICB4ZnNlY3MgPSBndGltZXIoKSAtIGZzZWNzOwotICAgIGlmICh4ZnNlY3MgPCAxTCkg eGZzZWNzID0gMUw7Ci0gICAgZmlsY3BzID0gZmZjIC8geGZzZWNzOwotI2VuZGlmIC8qIEdGVElN RVIgKi8KLX0KLQotVk9JRAotZnN0YXRzKCkgewotICAgIHRmYyArPSBmZmM7Ci0jaWZkZWYgREVC VUcKLSAgICBpZiAoZGVibG9nKSB7Ci0JZGVidWcoRjEwMSwiZnN0YXRzIHRmYyIsIiIsdGZjKTsK LQlkZWJ1ZyhGMTAxLCJmc3RhdHMgd2hhdCIsIiIsd2hhdCk7Ci0JZGVidWcoRjExMCwiZnN0YXRz IGVwa3Rtc2ciLGVwa3Rtc2csMCk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0jaWZkZWYg VExPRwotICAgIGlmICghZGlzY2FyZCAmJiAhY3hzZWVuICYmICFjenNlZW4gJiYgd2hhdCAhPSBX X05PVEhJTkcgJiYgISplcGt0bXNnKQotICAgICAgdGxvZyhGMTAxLCIgY29tcGxldGUsIHNpemUi LCIiLGZmYyk7Ci0jZW5kaWYgLyogVExPRyAqLwotfQotCi0jZW5kaWYgLyogTk9YRkVSICovCgpk aWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NmbjMu YyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjZm4zLmMKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkNThhNTYuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05 LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NmbjMuYworKysgL2Rldi9udWxsCkBAIC0x LDI2MDYgKzAsMCBAQAotLyogIEMgSyBDIEYgTiAzICAtLSAgUGFja2V0IGJ1ZmZlciBtYW5hZ2Vt ZW50IGZvciBDLUtlcm1pdCAgKi8KLQotLyogKHBsdXMgYXNzb3J0ZWQgZnVuY3Rpb25zIHRhY2tl ZCBvbiBhdCB0aGUgZW5kKSAqLwotCi0vKgotICBBdXRob3I6IEZyYW5rIGRhIENydXogPGZkY0Bj b2x1bWJpYS5lZHU+LAotICBDb2x1bWJpYSBVbml2ZXJzaXR5IEFjYWRlbWljIEluZm9ybWF0aW9u IFN5c3RlbXMsIE5ldyBZb3JrIENpdHkuCi0KLSAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDEwLAot ICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlv cmsuCi0gICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5U WFQgZmlsZSBvciB0aGUKLSAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxl IGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KLSovCi0vKgotIE5vdGUgLS0gaWYgeW91 IGNoYW5nZSB0aGlzIGZpbGUsIHBsZWFzZSBhbWVuZCB0aGUgdmVyc2lvbiBudW1iZXIgYW5kIGRh dGUgYXQKLSB0aGUgdG9wIG9mIGNrY2Zucy5jIGFjY29yZGluZ2x5LgotKi8KLQotI2luY2x1ZGUg ImNrY3N5bS5oIgotI2luY2x1ZGUgImNrY2RlYi5oIgotI2luY2x1ZGUgImNrY2FzYy5oIgotI2lu Y2x1ZGUgImNrY2tlci5oIgotI2luY2x1ZGUgImNrY3hsYS5oIgotCi0vKiAgQyBLIE0gSyBEIEkg UiAgLS0gIENyZWF0ZSBhIGRpcmVjdG9yeSAgKi8KLS8qCi0gIENhbGwgd2l0aDoKLSAgICBpbnQg ZmMgICAgPSAwIHRvIGNyZWF0ZSwgbm9uemVybyB0byByZW1vdmUsIGEgZGlyZWN0b3J5LgotICAg IGNoYXIgKiBzICA9IHBvaW50ZXIgdG8gbmFtZSBvZiBkaXJlY3RvcnkgdG8gY3JlYXRlIG9yIHJl bW92ZS4KLSAgICBjaGFyICoqIHIgPSBhZGRyZXNzIG9mIHBvaW50ZXIgdG8gcmV0dXJuIG5hbWUg b3IgbWVzc2FnZS4KLSAgICBpbnQgbSAgICAgPSAxIHRvIHByaW50IGVycm9yIG1lc3NhZ2VzLCAw IHRvIGJlIHNpbGVudC4KLSAgICBpbnQgY3Z0ICAgPSAxIG1lYW5zIGNvbnZlcnQgcyBmcm9tIHN0 YW5kYXJkIGZvcm1hdCB0byBsb2NhbCBmb3JtYXQ7Ci0gICAgICAgICAgICAgICAgMCBtZWFucyB1 c2UgcyBhcyBpcy4KLSAgUmV0dXJuczoKLSAgICAwIG9uIHN1Y2Nlc3MgKGRpcmVjdG9yeSB3YXMg Y3JlYXRlZCBvciByZW1vdmVkKS4KLSAgIC0xIHdoZW4gYXR0ZW1wdCB0byBjcmVhdGUgdGhlIGRp cmVjdG9yeSBmYWlsZWQuCi0gICAtMiBvbiBpbnRlcm5hbCBlcnJvciAoZS5nLiBubyBjb2RlIGZv ciBjcmVhdGluZyBkaXJlY3RvcmllcykuCi0gIE9uIHN1Y2Nlc3MsIHRoZSBuYW1lIGlzIHBvaW50 ZWQgdG8gYnkgcC4KLSAgT24gZmFpbHVyZSwgdGhlIHJlYXNvbiBpcyBwb2ludGVkIHRvIGJ5IHAu Ci0qLwotI2lmZGVmIENLX01LRElSCi1zdGF0aWMgY2hhciBja21rZGJ1ZltDS01BWFBBVEgrMV07 Ci0jZWxzZQotI2lmZGVmIGRhdGFnZW5lcmFsCi1zdGF0aWMgY2hhciBja21rZGJ1ZltDS01BWFBB VEgrMV07Ci0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBDS19NS0RJUiAqLwot Ci0jaWZkZWYgQ0tfTUtESVIKLWludAotY2tta2RpcihmYyxzLHIsbSxjdnQpIGludCBmYzsgY2hh ciAqIHM7IGNoYXIgKiogcjsgaW50IG07IGludCBjdnQ7IHsKLSAgICBpbnQgeCwgcmMgPSAtMjsK LSAgICBjaGFyIHRtcGJ1ZltDS01BWFBBVEgrMV07Ci0gICAgY2hhciBidWYyW0NLTUFYUEFUSCsx XTsKLSAgICBpZiAoIXMpIHMgPSAiIjsKLSAgICBkZWJ1ZyhGMTEwLCJja21rZGlyIDEgZmMiLHMs ZmMpOwotICAgIGlmICghKnMpIHsKLQlja21ha21zZyhja21rZGJ1ZiwKLQkJIENLTUFYUEFUSCsx LAotCQkgKGZjID09IDApID8gIm1rZGlyIiA6ICJybWRpciIsCi0JCSAiOiBubyBuYW1lIGdpdmVu IiwKLQkJIE5VTEwsCi0JCSBOVUxMCi0JCSApOwotCSpyID0gY2tta2RidWY7Ci0JcmV0dXJuKC0y KTsKLSAgICB9Ci0jaWZkZWYgZGF0YWdlbmVyYWwKLS8qIENvbWUgYmFjayBhbmQgbWFrZSB0aGlz IG5pY2VyIGxhdGVyIGlmIGFueWJvZHkgbm90aWNlcyAqLwotICAgIGlmIChmYyA9PSAwKSB7CQkJ LyogbWtkaXIgKi8KLQlyYyA9IGNyZWF0ZWRpcihzLDApOwotICAgIH0gZWxzZSB7CQkJCS8qIHJt ZGlyICovCi0JLyogQU9TL1ZTIHJtZGlyKCkgaXMgYSBuby1vcC4gKi8KLQlja21ha21zZyh0bXBi dWYsQ0tNQVhQQVRIKzEsImRlbGV0ZSAiLHMsTlVMTCxOVUxMKTsKLQlkZWJ1ZyhGMTEwLCJja21r ZGlyIDIiLHRtcGJ1ZiwwKTsKLQlyYyA9IHN5c3RlbSh0bXBidWYpOwotICAgIH0KLSAgICAqciA9 IE5VTEw7Ci0jZWxzZSAvKiBub3QgZGF0YWdlbmVyYWwgKi8KLQotLyogRmlyc3QgbWFrZSBzdXJl IHRoZSBuYW1lIGhhcyBhbiBhY2NlcHRhYmxlIGRpcmVjdG9yeS1uYW1lIGZvcm1hdCAqLwotCi0j aWZkZWYgVk1TCi0gICAgewotCWNoYXIgKnAgPSBzOwotCWludCBsYiA9IDAsIHJiID0gMCwgc2wg PSAwOwotCXdoaWxlICgqcCkgewotCSAgICBpZiAgICAgICgqcCA9PSAnWycgfHwgKnAgPT0gJzwn KSBsYisrOyAgIC8qIENvdW50IGJyYWNrZXRzICovCi0JICAgIGVsc2UgaWYgKCpwID09ICddJyB8 fCAqcCA9PSAnPicpIHJiKys7Ci0JICAgIGVsc2UgaWYgKCpwID09ICcvJykgCSAgICAgc2wrKzsJ LyogYW5kIHNsYXNoZXMgKi8KLQkgICAgcCsrOwotCX0KLQlpZiAobGIgIT0gMSAmJiByYiAhPSAx ICYmIHNsID09IDAgJiYgcCA+IHMgJiYgKihwLTEpICE9ICc6JykgewotCSAgICAvKiBQcm9iYWJs eSBqdXN0IGEgd29yZCAtIGNvbnZlcnQgdG8gVk1TIGZvcm1hdCAqLwotCSAgICBja21ha21zZyhi dWYyLAotCQkgICAgIENLTUFYUEFUSCsxLAotCQkgICAgICJbIiwKLQkJICAgICAoKnMgPT0gJy4n KSA/ICIiIDogIi4iLAotCQkgICAgIHMsCi0JCSAgICAgIl0iCi0JCSAgICAgKTsKLQkgICAgcyA9 IGJ1ZjI7Ci0JfSBlbHNlIGlmIChsYiA9PSAwICYmIHJiID09IDAgJiYgc2wgIT0gMCAmJiBwID4g cyAmJiAqKHAtMSkgIT0gJzonKSB7Ci0JICAgIGludCBmbGFnID0gMDsKLQkgICAgLyogU2VlbXMg dG8gYmUgaW4gVU5JWCBmb3JtYXQgKi8KLQkgICAgeCA9IHN0cmxlbihzKTsKLQkgICAgaWYgKHgg PiAwICYmIHNbeC0xXSAhPSAnLycpCi0JICAgICAgZmxhZyA9IDE7Ci0JICAgIGNrbWFrbXNnKGJ1 ZjIsQ0tNQVhQQVRIKzEscyxmbGFnID8gIi8iIDogIiIsTlVMTCxOVUxMKTsKLQkgICAgcyA9IGJ1 ZjI7Ci0JfQotCWlmIChzID09IGJ1ZjIpIHsKLQkgICAgY2tzdHJuY3B5KHRtcGJ1ZixzLENLTUFY UEFUSCsxKTsKLQkgICAgcyA9IHRtcGJ1ZjsKLQl9Ci0JZGVidWcoRjExMCwiY2tta2RpciAyK1ZN UyIscywwKTsKLSAgICB9Ci0jZWxzZQotI2lmZGVmIFVOSVhPUk9TSwotI2lmZGVmIERUSUxERQot ICAgIHMgPSB0aWxkZV9leHBhbmQocyk7Ci0jZW5kaWYgLyogRFRJTERFICovCi0gICAgY2tzdHJu Y3B5KHRtcGJ1ZixzLENLTUFYUEFUSCsxKTsKLSAgICBzID0gdG1wYnVmOwotICAgIHggPSBzdHJs ZW4ocyk7Ci0gICAgaWYgKHggPiAwICYmIHNbeC0xXSAhPSAnLycpIHsJLyogTXVzdCBlbmQgaW4g Ii8iIGZvciB6bWtkaXIoKSAqLwotCXNbeF0gPSAnLyc7Ci0Jc1t4KzFdID0gTlVMOwotCWRlYnVn KEYxMTAsImNrbWtkaXIgMitVTklYT1JPU0siLHMsMCk7Ci0gICAgfQotI2Vsc2UgLyogVU5JWE9S T1NLICovCi0jaWZkZWYgT1MyCi0gICAgY2tzdHJuY3B5KHRtcGJ1ZixzLENLTUFYUEFUSCsxKTsK LSAgICBzID0gdG1wYnVmOwotICAgIHggPSBzdHJsZW4ocyk7Ci0gICAgaWYgKGZjID09IDAgJiYg eCA+IDAgJiYgc1t4LTFdICE9ICcvJykgeyAvKiBNdXN0IGVuZCBpbiAiLyIgZm9yIHpta2Rpcigp ICovCi0Jc1t4XSA9ICcvJzsKLQlzW3grMV0gPSBOVUw7Ci0JZGVidWcoRjExMCwiY2tta2RpciAy K09TMiIscywwKTsKLSAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogVU5JWE9ST1NL ICovCi0jZW5kaWYgLyogVk1TICovCi0jaWZkZWYgTlpMVE9SCi0gICAgLyogU2VydmVyIGlzIGNh bGxpbmcgdXMsIHNvIGNvbnZlcnQgdG8gbG9jYWwgZm9ybWF0IGlmIG5lY2Vzc2FyeSAqLwotICAg IGlmIChjdnQpIHsKLQluenJ0b2wocywoY2hhciAqKWJ1ZjIsMSxQQVRIX0FCUyxDS01BWFBBVEgp OwotCXMgPSBidWYyOwotCWRlYnVnKEYxMTAsImNrbWtkaXIgMyIscywwKTsKLSAgICB9Ci0jZW5k aWYgLyogTlpMVE9SICovCi0gICAgZGVidWcoRjExMCwiY2tta2RpciA0IixzLDApOwotICAgIGlm IChmYyA9PSAwKSB7CQkJLyogTWFraW5nICovCi0jaWZkZWYgQ0tfTUtESVIKLQlyYyA9IHpta2Rp cihzKTsKLSNlbHNlCi0jaWZkZWYgTlQKLQlyYyA9IF9ta2RpcihzKTsKLSNlbHNlCi0JcmMgPSBt a2RpcihzLDA3NzcpOwotI2VuZGlmIC8qIE5UICovCi0jZW5kaWYgLyogQ0tfTUtESVIgKi8KLSAg ICB9IGVsc2UgewkJCQkvKiBSZW1vdmluZyAqLwotI2lmZGVmIFpSTURJUgotCXJjID0genJtZGly KHMpOwotI2Vsc2UKLSNpZmRlZiBOVAotCXJjID0gX3JtZGlyKHMpOwotI2Vsc2UKLSNpZmRlZiBP U0sKLQlyYyA9IC0yOwotI2Vsc2UKLQlyYyA9IHJtZGlyKHMpOwotI2VuZGlmIC8qIE9TSyAqLwot I2VuZGlmIC8qIE5UICovCi0jZW5kaWYgLyogWlJNRElSICovCi0gICAgfQotI2VuZGlmIC8qIGRh dGFnZW5lcmFsICovCi0gICAgZGVidWcoRjEwMSwiY2tta2RpciByYyIsIiIscmMpOwotICAgIGlm IChyYyA9PSAtMikgewotCWNrbWFrbXNnKGNrbWtkYnVmLAotCQkgQ0tNQVhQQVRILAotCQkgIkRp cmVjdG9yeSAiLAotCQkgKGZjID09IDApID8gImNyZWF0aW9uIiA6ICJyZW1vdmFsIiwKLQkJICJu b3QgaW1wbGVtZW50ZWQgaW4gdGhpcyB2ZXJzaW9uIG9mIEMtS2VybWl0IiwKLQkJIE5VTEwKLQkJ ICk7Ci0JKnIgPSBja21rZGJ1ZjsKLQlpZiAobSkgcHJpbnRmKCIlc1xuIiwqcik7Ci0gICAgfSBl bHNlIGlmIChyYyA8IDApIHsKLQlpZiAobSkgcGVycm9yKHMpOwotCWNrbWFrbXNnKGNrbWtkYnVm LENLTUFYUEFUSCxzLCI6ICIsY2tfZXJyc3RyKCksTlVMTCk7Ci0JKnIgPSBja21rZGJ1ZjsKLSAg ICB9IGVsc2UgaWYgKGZjID09IDAgJiYgemZucWZwKHMsQ0tNQVhQQVRILGNrbWtkYnVmKSkgewot CSpyID0gY2tta2RidWY7Ci0gICAgfSBlbHNlIGlmIChmYyAhPSAwKSB7Ci0JY2ttYWttc2coY2tt a2RidWYsQ0tNQVhQQVRILHMsIjogcmVtb3ZlZCIsTlVMTCxOVUxMKTsKLQkqciA9IGNrbWtkYnVm OwotICAgIH0KLSAgICByZXR1cm4ocmMpOwotfQotI2VuZGlmIC8qIENLX01LRElSICovCi0KLSNp Zm5kZWYgTk9YRkVSCQkJCS8qIFJlc3Qgb2YgdGhpcyBmaWxlLi4uICovCi0KLSNpZm5kZWYgTk9E SVNQTwotI2lmZGVmIHBkcDExCi0jZGVmaW5lIE5PRElTUE8KLSNlbmRpZiAvKiBwZHBkMTEgKi8K LSNlbmRpZiAvKiBOT0RJU1BPICovCi0KLWV4dGVybiBpbnQgcGlwZXNlbmQ7Ci0jaWZkZWYgUElQ RVNFTkQKLWV4dGVybiBjaGFyICoqIHNuZGZpbHRlcjsKLSNlbmRpZiAvKiBQSVBFU0VORCAqLwot Ci1leHRlcm4gaW50IHVua2NzLCB3bWF4LCB3Y3VyLCBkaXNjYXJkLCBiY3R1LCBiY3RsLCBsb2Nh bCwgZmRpc3BsYSwgd2hhdCwKLSAgICBzZW5kbW9kZSwgb3BuZXJyLCBkZXN0LCBlcGt0cmN2ZCwg ZXBrdHNlbnQsIGZpbGVzdGF0dXMsIGVvZm1ldGhvZCwgZGlzcG9zLAotICAgIGZuY252LCBmbnJw YXRoOwotCi1leHRlcm4gY2hhciAqIG9mbjI7Ci1leHRlcm4gY2hhciAqIHJmc3BlYywgKiBzZnNw ZWMsICogcHJmc3BlYywgKiBwc2ZzcGVjLCAqIHJyZnNwZWMsICogcHJyZnNwZWM7Ci1leHRlcm4g Y2hhciBvZm4xW107Ci1leHRlcm4gaW50IG9mbjF4OwotZXh0ZXJuIGNoYXIgKiBvZnBlcm1zOwot Ci0jaWZkZWYgVk1TCi1leHRlcm4gaW50IGJhdGNoOwotI2Vsc2UKLWV4dGVybiBpbnQgYmFja2dy ZDsKLSNlbmRpZiAvKiBWTVMgKi8KLQotZXh0ZXJuIGludCB4ZmxnLCByZW1maWxlLCByZW1hcHBk OwotZXh0ZXJuIENIQVIgKmRhdGE7Ci1leHRlcm4gY2hhciBmaWxuYW1bXTsKLSNpZm5kZWYgTk9G UklMTFMKLWV4dGVybiBpbnQgcnByaW50Ziwgcm1haWxmOwkJLyogUkVNT1RFIE1BSUwsIFBSSU5U ICovCi1jaGFyIG9wdGJ1ZltPUFRCVUZMRU5dOwkJCS8qIE9wdGlvbnMgZm9yIE1BSUwgb3IgUkVN T1RFIFBSSU5UICovCi0jZW5kaWYgLyogTk9GUklMTFMgKi8KLWV4dGVybiBpbnQgd3Nsb3RzOwot ZXh0ZXJuIGludCBmYmxrc2l6LCBmcmVjbCwgZm9yZywgZnJlY2ZtLCBmbmNhY3QsIGZuY3Nhdiwg ZmNjdHJsLCBsZl9vcHRzOwotZXh0ZXJuIENIQVIgKiBzcnZjbWQ7Ci1leHRlcm4gaW50IHNydmNt ZGxlbjsKLQotZXh0ZXJuIGludCBiaW5hcnksIHNwc2l6OwotZXh0ZXJuIGludCBwa3RudW0sIGN4 c2VlbiwgY3pzZWVuLCBuZmlscywgc3RkaW5mOwotZXh0ZXJuIGludCBtZW1zdHIsIHN0ZG91Ziwg a2VlcCwgc25kc3JjLCBoY2ZsZzsKLWV4dGVybiBpbnQgc2VydmVyLCBlbl9jd2QsIGVuX21haSwg ZW5fcHJpOwotCi0vKiBBdHRyaWJ1dGVzIGluL291dCBlbmFibGVkIGZsYWdzICovCi0KLWV4dGVy biBpbnQKLSAgYXRlbmNpLCBhdGVuY28sIGF0ZGF0aSwgYXRkYXRvLCBhdGxlbmksIGF0bGVubywg YXRibGtpLCBhdGJsa28sCi0gIGF0dHlwaSwgYXR0eXBvLCBhdHNpZGksIGF0c2lkbywgYXRzeXNp LCBhdHN5c28sIGF0ZGlzaSwgYXRkaXNvOwotCi0jaWZkZWYgQ0tfUEVSTVMKLWV4dGVybiBpbnQg YXRscHJpLCBhdGxwcm8sIGF0Z3ByaSwgYXRncHJvOwotI2VuZGlmIC8qIENLX1BFUk1TICovCi0K LSNpZmRlZiBTVFJBVFVTCi1leHRlcm4gaW50IGF0ZnJtaSwgYXRmcm1vLCBhdGNyZWksIGF0Y3Jl bywgYXRhY3RpLCBhdGFjdG87Ci0jZW5kaWYgLyogU1RSQVRVUyAqLwotCi0jaWZkZWYgZGF0YWdl bmVyYWwKLWV4dGVybiBpbnQgcXVpZXQ7Ci0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLQotZXh0 ZXJuIGxvbmcgZmlsY250OwotZXh0ZXJuIENLX09GRl9UIGZzaXplLCBmZmMsIHRmYywgc2VuZHN0 YXJ0LCBjYWxpYnJhdGU7Ci1DS19PRkZfVCByc19sZW47Ci0KLSNpZm5kZWYgTk9DU0VUUwotX1BS T1RPVFlQIChWT0lEIHNldHhsYXRlLCAodm9pZCkpOwotZXh0ZXJuIGludCB0Y2hhcnNldCwgZmNo YXJzZXQ7Ci1leHRlcm4gaW50IG50Y3NldHMsIHhsYXR5cGUsIHhmcnhsYTsKLWV4dGVybiBzdHJ1 Y3QgY3NpbmZvIHRjc2luZm9bXSwgZmNzaW5mb1tdOwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQot LyogVmFyaWFibGVzIGdsb2JhbCB0byBLZXJtaXQgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGlzIG1v ZHVsZSAqLwotCi0jaWZkZWYgQ0tYWENIQVIJCQkJLyogRE9VQkxFIC8gSUdOT1JFIGNoYXIgdGFi bGUgKi8KLWludCBkYmxmbGFnID0gMDsKLWludCBpZ25mbGFnID0gMDsKLXNob3J0IGRibHRbMjU2 XSA9IHsKLSAgICAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAs MCwwLDAsMCwwLDAsMCwwLDAsCi0gICAgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCww LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAotICAgIDAsMCwwLDAsMCwwLDAsMCwwLDAs MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwKLSAgICAwLDAsMCww LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAs Ci0gICAgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCww LDAsMCwwLDAsMCwwLAotICAgIDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAs MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwKLSAgICAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCww LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCi0gICAgMCwwLDAsMCwwLDAs MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCi19Owot I2VuZGlmIC8qIENLWFhDSEFSICovCi0KLWludCB3aW5sbzsJCQkJLyogcGFja2V0IG51bWJlciBh dCBsb3cgd2luZG93IGVkZ2UgICovCi0KLWludCBzYnVmbnVtOwkJCQkvKiBudW1iZXIgb2YgZnJl ZSBidWZmZXJzICovCi1pbnQgZHVtMDAxID0gMTIzNDsJCQkvKiBwcm90ZWN0aW9uLi4uICovCi1p bnQgc2J1ZnVzZVtNQVhXU107CQkJLyogYnVmZmVyIGluLXVzZSBmbGFnICovCi1pbnQgZHVtMDAz ID0gMTExMTsKLWludCByYnVmbnVtOwkJCQkvKiBudW1iZXIgb2YgZnJlZSBidWZmZXJzICovCi1p bnQgZHVtMDAyID0gNDMyMTsJCQkvKiBtb3JlIHByb3RlY3Rpb24gKi8KLWludCByYnVmdXNlW01B WFdTXTsJCQkvKiBidWZmZXIgaW4tdXNlIGZsYWcgKi8KLWludCBzc2VxdGJsWzY0XTsJCQkvKiBz ZXF1ZW5jZSAjIHRvIGJ1ZmZlciAjIHRhYmxlICovCi1pbnQgcnNlcXRibFs2NF07CQkJLyogc2Vx dWVuY2UgIyB0byBidWZmZXIgIyB0YWJsZSAqLwotaW50IHNhY2t0YmxbNjRdOwkJCS8qIHNlcXVl bmNlICMgYWNrIHRhYmxlICovCi0KLWludCBvX2lzb3BlbiA9IDAsIGlfaXNvcGVuID0gMDsJCS8q IElucHV0ICYgb3V0cHV0IGZpbGVzIGFyZSBvcGVuICovCi0KLSNpZmRlZiBEWU5BTUlDCi1zdHJ1 Y3QgcGt0aW5mbyAqc19wa3QgPSBOVUxMOwkJLyogYXJyYXkgb2YgcGt0aW5mbyBzdHJ1Y3R1cmVz ICovCi1zdHJ1Y3QgcGt0aW5mbyAqcl9wa3QgPSBOVUxMOwkJLyogYXJyYXkgb2YgcGt0aW5mbyBz dHJ1Y3R1cmVzICovCi0jZWxzZQotc3RydWN0IHBrdGluZm8gc19wa3RbTUFYV1NdOwkJLyogYXJy YXkgb2YgcGt0aW5mbyBzdHJ1Y3R1cmVzICovCi1zdHJ1Y3QgcGt0aW5mbyByX3BrdFtNQVhXU107 CQkvKiBhcnJheSBvZiBwa3RpbmZvIHN0cnVjdHVyZXMgKi8KLSNlbmRpZiAvKiBEWU5BTUlDICov Ci0KLSNpZmRlZiBERUJVRwotY2hhciB4YnVmWzIwMF07CQkJCS8qIEZvciBkZWJ1ZyBsb2dnaW5n ICovCi0jZW5kaWYgLyogREVCVUcgKi8KLQotI2lmZGVmIERZTkFNSUMKLUNIQVIgKmJpZ3NidWYg PSBOVUxMLCAqYmlncmJ1ZiA9IE5VTEw7Ci0jZWxzZQotY2hhciBiaWdzYnRbOF07CQkJCS8qIFBy b3RlY3Rpb24gKHNob3VsZG4ndCBuZWVkIHRoaXMpLiAqLwotCQkJCQkvKiBCVVQgRE9OJ1QgUkVN T1ZFIElUISAqLwotQ0hBUiBiaWdzYnVmW1NCU0laICsgNV07CQkvKiBTZW5kLXBhY2tldCBidWZm ZXIgYXJlYSAqLwotY2hhciBiaWdyYnRbOF07CQkJCS8qIFNhZmV0eSBwYWRkaW5nICovCi1DSEFS IGJpZ3JidWZbUkJTSVogKyA1XTsJCS8qIFJlY2VpdmUtcGFja2V0IGFyZWEgKi8KLSNlbmRpZgot aW50IGJpZ3Nic2l6ID0gU0JTSVo7CQkJLyogU2l6ZXMgb2YgYmlnIHNlbmQgJiByY3YgYnVmZmVy cy4gKi8KLWludCBiaWdyYnNpeiA9IFJCU0laOwotCi0jaWZkZWYgVk1TCi1pbnQgemNoa3BhdGgo Y2hhciAqcyk7Ci0jZW5kaWYgLyogVk1TICovCi0KLS8qIEZVTkNUSU9OUyAqLwotCi1WT0lECi1k b2Zhc3QoKSB7Ci0gICAgbG9uZyBtYXhidWZzaXogPSBSQlNJWjsJCS8qIENvbmZpZ3VyYXRpb24g cGFyYW1ldGVycyAqLwotICAgIGludCBtYXhwa3RzaXogPSBNQVhTUDsKLSAgICBleHRlcm4gaW50 IHNwc2l6ZiwJCQkvKiBGb3IgYnVnIGluIElSSVggVGVsbmV0IHNlcnZlciAqLwotICAgICAgcnBz aXosIHVycHNpeiwgc3BzaXpyLCBzcG1heCwgd3Nsb3RyOwotICAgIGV4dGVybiBzdHJ1Y3QgY2tf cCBwdGFiW107Ci0KLSAgICBpZiAobWF4cGt0c2l6IDwgNDApCQkJLyogTG9uZyBwYWNrZXQgbGVu Z3RoICovCi0gICAgICBtYXhwa3RzaXogPSA0MDsKLSAgICBlbHNlIGlmIChtYXhwa3RzaXogPiA0 MDAwKQotICAgICAgbWF4cGt0c2l6ID0gNDAwMDsKLSAgICB3c2xvdHIgPSBtYXhidWZzaXogLyBt YXhwa3RzaXo7Ci0gICAgaWYgKHdzbG90ciA+IE1BWFdTKQkJCS8qIFdpbmRvdyBzbG90cyAqLwot ICAgICAgd3Nsb3RyID0gTUFYV1M7Ci0gICAgaWYgKHdzbG90ciA+IDMwKQotICAgICAgd3Nsb3Ry ID0gMzA7Ci0gICAgZWxzZSBpZiAod3Nsb3RyIDwgMSkKLSAgICAgIHdzbG90ciA9IDE7Ci0gICAg dXJwc2l6ID0gYWRqcGtsKG1heHBrdHNpeix3c2xvdHIsbWF4YnVmc2l6KTsKLSAgICBwdGFiW1BS T1RPX0tdLnJwa3RsZW4gPSB1cnBzaXo7Ci0gICAgcnBzaXogPSAodXJwc2l6ID4gOTQpID8gOTQg OiB1cnBzaXo7IC8qIE1heCBub24tbG9uZyBwYWNrZXQgbGVuZ3RoICovCi0gICAgZGVidWcoRjEx MSwiZG9mYXN0IiwidXByc2l6Iix1cnBzaXopOwotI2lmZGVmIElSSVgKLSNpZm5kZWYgSVJJWDY1 Ci0gICAgLyogSVJJWCBUZWxuZXQgc2VydmVyIGNob3BzIG9mZiB3cml0ZXMgbG9uZ2VyIHRoYW4g NEsgKi8KLSAgICBzcHNpeiA9IHNwbWF4ID0gc3BzaXpyID0gdXJwc2l6OwotICAgIGRlYnVnKEYx MDEsImRvYXJnIFEgSVJJWCBzcHNpeiIsIiIsc3BzaXopOwotICAgIHNwc2l6ZiA9IDE7Ci0jZW5k aWYgLyogSVJJWDY1ICovCi0jZW5kaWYgLyogSVJJWCAqLwotI2lmZGVmIENLX1NQRUVECi0gICAg c2V0cHJlZml4KFBYX0NBVSk7CQkJLyogQ2F1dGlvdXMgdW5wcmVmaXhpbmcgKi8KLSNlbmRpZiAv KiBDS19TUEVFRCAqLwotfQotCi0KLS8qIEZvciBzYW5pdHksIHVzZSAiaSIgZm9yIGJ1ZmZlciBz bG90cywgIm4iIGZvciBwYWNrZXQgbnVtYmVycy4gKi8KLQotLyogSSBOIEkgQiBVIEYgUyAqLwot Ci0vKgotICBBbGxvY2F0ZXMgdGhlIGJpZyBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlcnMuCi0gIENh bGwgd2l0aCBzaXplIGZvciBiaWcgc2VuZCBidWZmZXIgKHMpIGFuZCByZWNlaXZlIGJ1ZmZlciAo cikuCi0gIFRoZXNlIHNpemVzIGNhbiBiZSBkaWZmZXJlbnQuCi0gIEF0dGVtcHRzIHRvIGFsbG9j YXRlIGJ1ZmZlcnMgb2YgdGhlIHJlcXVlc3RlZCBzaXplLCBidXQgaWYgaXQgY2FuJ3QsCi0gIGl0 IHdpbGwgYWxsb2NhdGUgc21hbGxlciBvbmVzLgotICBTZXRzIGdsb2JhbCB2YXJpYWJsZXMgYmln c2JzaXogYW5kIGJpZ3Jic2l6IHRvIHRoZSBhY3R1YWwgc2l6ZXMsCi0gIGFuZCBiaWdzYnVmIGFu ZCBiaWdyYnVmIHBvaW50aW5nIHRvIHRoZSBhY3R1YWwgYnVmZmVycy4KLSAgRGVzaWduZWQgdG8g YmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlLgotICBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24g ZmFpbHVyZS4KLSovCi0KLUNIQVIgKmJpZ2J1ZnAgPSBOVUxMOwotCi1pbnQKLWluaWJ1ZnMocyxy KSBpbnQgcywgcjsgewotI2lmZGVmIERZTkFNSUMKLSAgICB1bnNpZ25lZAotICAgICAgaW50IHNp emU7Ci0jaWZkZWYgT1MyCi0gICAgdW5zaWduZWQJCS8qIERvbid0IHlvdSB3aXNoIGV2ZXJ5Ym9k eSBoYWQgdW5zaWduZWQgbG9uZy4uLiAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgbG9uZyB6 OwotICAgIGludCB4OwotCi0gICAgZGVidWcoRjEwMSwiaW5pYnVmcyBzIiwiIixzKTsKLSAgICBk ZWJ1ZyhGMTAxLCJpbmlidWZzIHIiLCIiLHIpOwotCi0gICAgaWYgKHMgPCA4MCB8fCByIDwgODAp IHJldHVybigtMSk7CS8qIFZhbGlkYXRlIGFyZ3VtZW50cy4gKi8KLQotICAgIGlmICghc19wa3Qp IHsJCQkvKiBBbGxvY2F0ZSBwYWNrZXQgaW5mbyBzdHJ1Y3R1cmVzICovCi0JaWYgKCEoc19wa3Qg PSAoc3RydWN0IHBrdGluZm8gKikgbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGt0aW5mbykqTUFYV1Mp KSkKLQkgIGZhdGFsKCJpbmlfcGt0czogbm8gbWVtb3J5IGZvciBzX3BrdCIpOwotICAgIH0KLSAg ICBmb3IgKHggPSAwOyB4IDwgTUFYV1M7IHgrKykKLSAgICAgIHNfcGt0W3hdLnBrX2FkciA9IE5V TEw7CQkvKiBJbml0aWFsaXplIGFkZHJlc3NlcyAqLwotCi0gICAgaWYgKCFyX3BrdCkgewotCWlm ICghKHJfcGt0ID0gKHN0cnVjdCBwa3RpbmZvICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IHBrdGlu Zm8pKk1BWFdTKSkpCi0JICBmYXRhbCgiaW5pX3BrdHM6IG5vIG1lbW9yeSBmb3Igc19wa3QiKTsK LSAgICB9Ci0gICAgZm9yICh4ID0gMDsgeCA8IE1BWFdTOyB4KyspCi0gICAgICByX3BrdFt4XS5w a19hZHIgPSBOVUxMOwkJLyogSW5pdGlhbGl6ZSBhZGRyZXNzZXMgKi8KLQotICAgIGlmICghc3J2 Y21kKSB7CQkJLyogQWxsb2NhdGUgc3J2Y21kIGJ1ZmZlciAqLwotCXNydmNtZCA9IChDSEFSICop IG1hbGxvYyhyICsgMTAwKTsKLQlpZiAoIXNydmNtZCkgcmV0dXJuKC0xKTsKLQlzcnZjbWRsZW4g PSByICsgOTk7Ci0JKnNydmNtZCA9IE5VTDsKLSAgICB9Ci0gICAgaWYgKGJpZ2J1ZnApIHsJCQkv KiBGcmVlIHByZXZpb3VzIGJ1ZmZlcnMsIGlmIGFueS4gKi8KLQlmcmVlKGJpZ2J1ZnApOwotCWJp Z2J1ZnAgPSBOVUxMOwotICAgIH0KLSAgICBzaXplID0gcyArIHIgKyA0MDsJCQkvKiBDb21iaW5l ZCByZXF1ZXN0ZWQgc2l6ZSArIHBhZGRpbmcgKi8KLSAgICB6ICA9ICh1bnNpZ25lZCkgcyArICh1 bnNpZ25lZCkgciArIDQwOwotICAgIGRlYnVnKEYxMDEsImluaWJ1ZnMgc2l6ZSAxIiwiIixzaXpl KTsKLSAgICBkZWJ1ZyhGMTAxLCJpbmlidWZzIHNpemUgeiIsIiIseik7Ci0gICAgaWYgKChsb25n KSBzaXplICE9IHopIHsKLQlkZWJ1ZyhGMTAwLCJpbmlidWZzIG92ZXJmbG93IiwiIiwwKTsKLQlz aXplID0gNjU1MzU7Ci0gICAgfQotCi0gICAgLyogVHJ5IHRvIGdldCB0aGUgc3BhY2UuICBJZiBt YWxsb2MgZmFpbHMsIHRyeSB0byBnZXQgYSBsaXR0bGUgbGVzcy4gKi8KLSAgICAvKiAoT2J2aW91 c2x5LCB0aGlzIGFsZ29yaXRobSBjYW4gYmUgcmVmaW5lZC4pICovCi0KLSAgICB3aGlsZSAoIShi aWdidWZwID0gKENIQVIgKikgbWFsbG9jKHNpemUpKSkgewotCWRlYnVnKEYxMDEsImluaWJ1ZnMg YmlnYnVmIG1hbGxvYyBmYWlsZWQiLCIiLHNpemUpOwotCXNpemUgPSAoc2l6ZSAqIDIpIC8gMzsJ CS8qIEZhaWxlZCwgY3V0IHNpemUgYnkgMS8zLiAqLwotCWlmIChzaXplIDwgMjAwKQkJCS8qIFRy eSBhZ2FpbiB1bnRpbCB0b28gc21hbGwuICovCi0JICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBk ZWJ1ZyhGMTAxLCJpbmlidWZzIHNpemUgMiIsIiIsc2l6ZSk7IC8qIE9LLCB3ZSBnb3Qgc29tZSBz cGFjZS4gKi8KLQotLyoKLSAgTm93IGRpdmlkZSB0aGUgYWxsb2NhdGVkIHNwYWNlIGJldHdlZW4g dGhlIHNlbmQgYW5kIHJlY2VpdmUgYnVmZmVycyBpbiB0aGUKLSAgcmVxdWVzdGVkIHByb3BvcnRp b24uICBUaGUgbmF0dXJhbCBmb3JtdWxhIHdvdWxkIGJlIChzIC8gKHMgKyByKSkgKiBzaXplCi0g IChmb3IgdGhlIHNlbmQgYnVmZmVyKSwgYnV0IHRoYXQgZG9lc24ndCB3b3JrIHdpdGggaW50ZWdl ciBhcml0aG1ldGljIGFuZCB3ZQotICBjYW4ndCB1c2UgZmxvYXRpbmcgcG9pbnQgYmVjYXVzZSBz b21lIG1hY2hpbmVzIGRvbid0IGhhdmUgaXQuICBUaGlzIGNhbiBiZQotICByZWFycmFuZ2VkIGFz IChzICogc2l6ZSkgLyAocyArIHIpLiAgQnV0IChzICogc2l6ZSkgY2FuIGJlIFZFUlkgbGFyZ2Us IHRvbwotICBsYXJnZSBmb3IgMzIgYml0cy4gIFNvIGxldCdzIGRvIGl0IHRoaXMgd2F5LiAgVGhp cyBhcml0aG1ldGljIHdvcmtzIGZvcgotICBidWZmZXIgc2l6ZXMgdXAgdG8gYWJvdXQgNSwwMDAs MDAwLgotKi8KLSNkZWZpbmUgRkFDVE9SIDIwTAotICAgIHogPSAoIChsb25nKSBzICogRkFDVE9S ICkgLyAoIChsb25nKSBzICsgKGxvbmcpIHIgKTsKLSAgICB4ID0gKCB6ICogKCAobG9uZykgc2l6 ZSAvIEZBQ1RPUiApICk7Ci0gICAgaWYgKHggPCAwKSByZXR1cm4oLTEpOwkJLyogQ2F0Y2ggb3Zl cmZsb3cgKi8KLQotICAgIGJpZ3Nic2l6ID0geCAtIDU7CQkJLyogU2l6ZSBvZiBzZW5kIGJ1ZmZl ciAqLwotICAgIGJpZ3NidWYgPSBiaWdidWZwOwkJCS8qIEFkZHJlc3Mgb2Ygc2VuZCBidWZmZXIg Ki8KLSAgICBkZWJ1ZyhGMTAxLCJpbmlidWZzIGJpZ3Nic2l6IiwiIixiaWdzYnNpeik7Ci0KLSAg ICBiaWdyYnNpeiA9IHNpemUgLSB4IC0gNTsJCS8qIFNpemUgb2YgcmVjZWl2ZSBidWZmZXIgKi8K LSAgICBiaWdyYnVmID0gYmlnYnVmcCArIHg7CQkvKiBBZGRyZXNzcyBvZiByZWNlaXZlIGJ1ZmZl ciAqLwotICAgIGRlYnVnKEYxMDEsImluaWJ1ZnMgYmlncmJzaXoiLCIiLGJpZ3Jic2l6KTsKLQot ICAgIHJldHVybigwKTsJCQkJLyogU3VjY2VzcyAqLwotI2Vsc2UJCQkJCS8qIE5vIGR5bmFtaWMg YWxsb2NhdGlvbiAqLwotICAgIGJpZ3Nic2l6ID0gU0JTSVo7CQkJLyogSnVzdCB1c2UgdGhlIHN5 bWJvbHMgKi8KLSAgICBiaWdyYnNpeiA9IFJCU0laOwkJCS8qIC4uLiAqLwotICAgIHJldHVybigw KTsJCQkJLyogU3VjY2Vzcy4gKi8KLSNlbmRpZiAvKiBEWU5BTUlDICovCi19Ci0KLQotLyogTSBB IEsgRSBCIFUgRiAgLS0gIE1ha2VzIGFuZCBjbGVhcnMgYSBuZXcgYnVmZmVycy4gICovCi0KLS8q IENhbGwgd2l0aDogKi8KLS8qICBzbG90czogIG51bWJlciBvZiBidWZmZXIgc2xvdHMgdG8gbWFr ZSwgMSB0byAzMiAqLwotLyogIGJ1ZnNpejogc2l6ZSBvZiB0aGUgYmlnIGJ1ZmZlciAqLwotLyog IGJ1ZjogICAgYWRkcmVzcyBvZiB0aGUgYmlnIGJ1ZmZlciAqLwotLyogIHh4OiAgICAgcG9pbnRl ciB0byBhcnJheSBvZiBwa3RpbmZvIHN0cnVjdHVyZXMgZm9yIHRoZXNlIGJ1ZmZlcnMgKi8KLQot LyogU3ViZGl2aWRlcyB0aGUgYmlnIGJ1ZmZlciBpbnRvICJzbG90cyIgYnVmZmVycy4gKi8KLQot LyogUmV0dXJuczogKi8KLS8qICAtMSBpZiB0b28gbWFueSBvciB0b28gZmV3IHNsb3RzIHJlcXVl c3RlZCwgICAgICovCi0vKiAgLTIgaWYgc2xvdHMgd291bGQgYmUgdG9vIHNtYWxsLiAgICAgICov Ci0vKiAgIG4gKHBvc2l0aXZlKSBvbiBzdWNjZXNzID0gc2l6ZSBvZiBvbmUgYnVmZmVyLiAqLwot LyogICB3aXRoIHBrdGluZm8gc3RydWN0dXJlIGluaXRpYWxpemVkIGZvciB0aGlzIHNldCBvZiBi dWZmZXJzLiAqLwotCi1pbnQKLW1ha2VidWYoc2xvdHMsYnVmc2l6LGJ1Zix4eCkKLS8qIG1ha2Vi dWYgKi8gaW50IHNsb3RzLCBidWZzaXo7IENIQVIgYnVmW107IHN0cnVjdCBwa3RpbmZvICp4eDsg ewotCi0gICAgQ0hBUiAqYTsKLSAgICBpbnQgaSwgc2l6ZTsKLQotICAgIGRlYnVnKEYxMDEsIm1h a2VidWYiLCIiLHNsb3RzKTsKLSAgICBkZWJ1ZyhGMTAxLCJtYWtlYnVmIGJ1ZnNpeiIsIiIsYnVm c2l6KTsKLSAgICBkZWJ1ZyhGMTAxLCJtYWtlYnVmIE1BWFdTIiwiIixNQVhXUyk7Ci0KLSAgICBp ZiAoc2xvdHMgPiBNQVhXUyB8fCBzbG90cyA8IDEpIHJldHVybigtMSk7Ci0gICAgaWYgKGJ1ZnNp eiA8IHNsb3RzICogMTAgKSByZXR1cm4oLTIpOwotCi0gICAgc2l6ZSA9IGJ1ZnNpeiAvIHNsb3Rz OwkJLyogRGl2aWRlIHVwIHRoZSBiaWcgYnVmZmVyLiAqLwotICAgIGEgPSBidWY7CQkJCS8qIEFk ZHJlc3Mgb2YgZmlyc3QgcGllY2UuICovCi0KLSAgICBmb3IgKGkgPSAwOyBpIDwgc2xvdHM7IGkr KykgewotCXN0cnVjdCBwa3RpbmZvICp4ID0gJnh4W2ldOwotCXgtPmJmX2FkciA9IGE7CQkJLyog QWRkcmVzcyBvZiB0aGlzIGJ1ZmZlciAqLwotCXgtPmJmX2xlbiA9IHNpemU7CQkvKiBMZW5ndGgg b2YgdGhpcyBidWZmZXIgKi8KLQl4LT5wa19sZW4gPSAwOwkJCS8qIExlbmd0aCBvZiBkYXRhIGZp ZWxkICovCi0gICAgICAgIHgtPnBrX3R5cCA9ICcgJzsJCS8qIHBhY2tldCB0eXBlICovCi0JeC0+ cGtfc2VxID0gLTE7CQkJLyogcGFja2V0IHNlcXVlbmNlIG51bWJlciAqLwotICAgICAgICB4LT5w a19ydHIgPSAwOwkJCS8qIHJldHJhbnNtaXNzaW9ucyAqLwotCSphID0gJ1wwJzsJCQkvKiBDbGVh ciB0aGUgYnVmZmVyICovCi0JYSArPSBzaXplOwkJCS8qIFBvc2l0aW9uIHRvIG5leHQgYnVmZmVy IHNsb3QgKi8KLSAgICB9Ci0gICAgcmV0dXJuKHNpemUpOwotfQotCi0vKiAgTSBBIEsgUyBCIFUg RiAgLS0gIE1ha2VzIHRoZSBzZW5kLXBhY2tldCBidWZmZXIgICovCi0KLWludAotbWtzYnVmKHNs b3RzKSBpbnQgc2xvdHM7IHsKLSAgICBpbnQgaSwgeDsKLSAgICBzYnVmbnVtID0gMDsKLSAgICBp ZiAoKHggPSBtYWtlYnVmKHNsb3RzLGJpZ3Nic2l6LGJpZ3NidWYsc19wa3QpKSA8IDApIHsKLQlk ZWJ1ZyhGMTAxLCJta3NidWYgbWFrZWJ1ZiByZXR1cm4iLCIiLHgpOwotCXJldHVybih4KTsKLSAg ICB9Ci0gICAgZGVidWcoRjEwMSwibWtzYnVmIG1ha2VidWYgcmV0dXJuIiwiIix4KTsKLSAgICBm b3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgewkJLyogSW5pdGlhbGl6ZSBzZXF1ZW5jZS1udW1iZXIt ICovCi0Jc3NlcXRibFtpXSA9IC0xOwkJLyogdG8tYnVmZmVyLW51bWJlciB0YWJsZS4gKi8KLSAg ICAgICAgc2Fja3RibFtpXSA9IDA7Ci0gICAgfQotICAgIGZvciAoaSA9IDA7IGkgPCBNQVhXUzsg aSsrKQotICAgICAgc2J1ZnVzZVtpXSA9IDA7CQkJLyogTWFyayBlYWNoIGJ1ZmZlciBhcyBmcmVl ICovCi0gICAgc2J1Zm51bSA9IHNsb3RzOwotICAgIHdjdXIgPSAwOwotICAgIHJldHVybih4KTsK LX0KLQotLyogIE0gQSBLIFIgQiBVIEYgIC0tICBNYWtlcyB0aGUgcmVjZWl2ZS1wYWNrZXQgYnVm ZmVyICAqLwotCi1pbnQKLW1rcmJ1ZihzbG90cykgaW50IHNsb3RzOyB7Ci0gICAgaW50IGksIHg7 Ci0gICAgcmJ1Zm51bSA9IDA7Ci0gICAgaWYgKCh4ID0gbWFrZWJ1ZihzbG90cyxiaWdyYnNpeixi aWdyYnVmLHJfcGt0KSkgPCAwKSB7Ci0JZGVidWcoRjEwMSwibWtyYnVmIG1ha2VidWYgcmV0dXJu IiwiIix4KTsKLQlyZXR1cm4oeCk7Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsIm1rcmJ1ZiBtYWtl YnVmIHJldHVybiIsIiIseCk7Ci0gICAgZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsJCS8qIElu aXRpYWxpemUgc2VxdWVuY2UtbnVtYmVyLSAqLwotCXJzZXF0YmxbaV0gPSAtMTsJCS8qIHRvLWJ1 ZmZlci1udW1iZXIgdGFibGUuICovCi0gICAgfQotICAgIGZvciAoaSA9IDA7IGkgPCBNQVhXUzsg aSsrKQotICAgICAgcmJ1ZnVzZVtpXSA9IDA7CQkJLyogTWFyayBlYWNoIGJ1ZmZlciBhcyBmcmVl ICovCi0gICAgcmJ1Zm51bSA9IHNsb3RzOwotICAgIHdjdXIgPSAwOwotICAgIHJldHVybih4KTsK LX0KLQotLyogIFcgSSBOIEQgTyBXICAtLSAgUmVzaXplIHRoZSB3aW5kb3cgdG8gbiAgKi8KLQot aW50Ci13aW5kb3cobikgaW50IG47IHsKLSAgICBkZWJ1ZyhGMTAxLCJ3aW5kb3ciLCIiLG4pOwot ICAgIGlmIChuIDwgMSB8fCBuID4gTUFYV1MpIHJldHVybigtMSk7Ci0gICAgaWYgKG1rc2J1Zihu KSA8IDApIHJldHVybigtMSk7Ci0gICAgaWYgKG1rcmJ1ZihuKSA8IDApIHJldHVybigtMSk7Ci0g ICAgd3Nsb3RzID0gbjsKLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIGR1bXBzYnVmKCk7 Ci0gICAgaWYgKGRlYmxvZykgZHVtcHJidWYoKTsKLSNlbmRpZiAvKiBERUJVRyAqLwotICAgIHJl dHVybigwKTsKLX0KLQotLyogIEcgRSBUIFMgQiBVIEYgIC0tICBBbGxvY2F0ZSBhIHNlbmQtYnVm ZmVyLiAgKi8KLQotLyogIENhbGwgd2l0aCBwYWNrZXQgc2VxdWVuY2UgbnVtYmVyIHRvIGFsbG9j YXRlIGJ1ZmZlciBmb3IuICovCi0vKiAgUmV0dXJuczogKi8KLS8qICAgLTQgaWYgYXJndW1lbnQg aXMgaW52YWxpZCAobmVnYXRpdmUsIG9yIGdyZWF0ZXIgdGhhbiA2MykgKi8KLS8qICAgLTMgaWYg YnVmZmVycyB3ZXJlIHRob3VnaHQgdG8gYmUgYXZhaWxhYmxlIGJ1dCByZWFsbHkgd2VyZW4ndCAo YnVnISkgKi8KLS8qICAgLTIgaWYgdGhlIG51bWJlciBvZiBmcmVlIGJ1ZmZlcnMgaXMgbmVnYXRp dmUgKGJ1ZyEpICovCi0vKiAgIC0xIGlmIG5vIGZyZWUgYnVmZmVycy4gKi8KLS8qICAgMCBvciBw b3NpdGl2ZSwgcGFja2V0IHNlcXVlbmNlIG51bWJlciwgd2l0aCBidWZmZXIgYWxsb2NhdGVkIGZv ciBpdC4gKi8KLQotaW50Ci1nZXRzYnVmKG4pIGludCBuOyB7CQkJLyogQWxsb2NhdGUgYSBzZW5k LWJ1ZmZlciAqLwotICAgIGludCBpOwotICAgIENIQVIgKiBwID0gTlVMTDsKLSAgICBpZiAobiA8 IDAgfHwgbiA+IDYzKSB7Ci0JZGVidWcoRjEwMSwiZ2V0c2J1ZiBiYWQgYXJnIiwiIixuKTsKLQly ZXR1cm4oLTQpOwkvKiBCYWQgYXJndW1lbnQgKi8KLSAgICB9Ci0gICAgZGVidWcoRjEwMSwiZ2V0 c2J1ZiBwYWNrZXQiLCIiLG4pOwotICAgIC8qIGRlYnVnKEYxMDEsImdldHNidWYsIHNidWZudW0i LCIiLHNidWZudW0pOyAqLwotICAgIGlmIChzYnVmbnVtID09IDApIHJldHVybigtMSk7CS8qIE5v IGZyZWUgYnVmZmVycy4gKi8KLSAgICBpZiAoc2J1Zm51bSA8IDApIHJldHVybigtMik7CS8qIFNo b3VsZG4ndCBoYXBwZW4uICovCi0gICAgZm9yIChpID0gMDsgaSA8IHdzbG90czsgaSsrKQkvKiBG aW5kIHRoZSBmaXJzdCBvbmUgbm90IGluIHVzZS4gKi8KLSAgICAgIGlmIChzYnVmdXNlW2ldID09 IDApIHsJCS8qIEdvdCBvbmU/ICovCi0JICBzYnVmdXNlW2ldID0gMTsJCS8qIE1hcmsgaXQgYXMg aW4gdXNlLiAqLwotCSAgc2J1Zm51bS0tOwkJCS8qIE9uZSBsZXNzIGZyZWUgYnVmZmVyLiAqLwot CSAgKnNfcGt0W2ldLmJmX2FkciA9ICdcMCc7CS8qIFplcm8gdGhlIGJ1ZmZlciBkYXRhIGZpZWxk ICovCi0JICBzX3BrdFtpXS5wa19zZXEgPSBuOwkJLyogUHV0IGluIHRoZSBzZXF1ZW5jZSBudW1i ZXIgKi8KLSAgICAgICAgICBzc2VxdGJsW25dID0gaTsJCS8qIEJhY2sgcG9pbnRlciBmcm9tIHNl cXVlbmNlIG51bWJlciAqLwotICAgICAgICAgIHNhY2t0Ymxbbl0gPSAwOwkJLyogQUNLIGZsYWcg Ki8KLQkgIHNfcGt0W2ldLnBrX2xlbiA9IDA7CQkvKiBEYXRhIGZpZWxkIGxlbmd0aCBub3cgemVy by4gKi8KLQkgIHNfcGt0W2ldLnBrX3R5cCA9ICcgJzsJLyogQmxhbmsgdGhlIHBhY2tldCB0eXBl IHRvby4gKi8KLQkgIHNfcGt0W2ldLnBrX3J0ciA9IDA7CQkvKiBaZXJvIHRoZSByZXRyYW5zbWlz c2lvbiBjb3VudCAqLwotCSAgcCA9IHNfcGt0W2ldLmJmX2FkciArIDc7CS8qIFNldCBnbG9iYWwg ImRhdGEiIGFkZHJlc3MuICovCi0JICBkZWJ1ZyhGMTAxLCJnZXRzYnVmIHAiLCIiLDApOwotCSAg ZGF0YSA9IHA7Ci0JICBpZiAoIWRhdGEpIHsKLQkgICAgICBkZWJ1ZyhGMTAwLCJnZXRzYnVmIGRh dGEgPT0gTlVMTCIsIiIsMCk7Ci0gICAgICAgICAgICAgIHJldHVybigtMyk7Ci0gICAgICAgICAg fQotCSAgaWYgKCh3aGF0ICYgKFdfU0VORHxXX1JFTU8pKSAmJiAoKyt3Y3VyID4gd21heCkpCi0J ICAgIHdtYXggPSB3Y3VyOwkJLyogRm9yIHN0YXRpc3RpY3MuICovCi0JICAvKiBkZWJ1ZyhGMTAx LCJnZXRzYnVmIHdjdXIiLCIiLHdjdXIpOyAqLwotCSAgcmV0dXJuKG4pOwkJCS8qIFJldHVybiBp dHMgaW5kZXguICovCi0gICAgICB9Ci0gICAgc2J1Zm51bSA9IDA7CQkJLyogRGlkbid0IGZpbmQg b25lLiAqLwotICAgIHJldHVybigtMyk7CQkJCS8qIFNob3VsZG4ndCBoYXBwZW4hICovCi19Ci0K LWludAotZ2V0cmJ1ZigpIHsJCQkJLyogQWxsb2NhdGUgYSByZWNlaXZlIGJ1ZmZlciAqLwotICAg IGludCBpOwotI2lmZGVmIENPTU1FTlQKLSAgICAvKiBUaGlzIGNvZGUgaXMgcHJldHR5IHN0YWJs ZSBieSBub3cuLi4gKi8KLSAgICAvKiBMb29rcyBsaWtlIHdlIG1pZ2h0IG5lZWQgdGhpcyBhZnRl ciBhbGwgKi8KLSAgICBkZWJ1ZyhGMTAxLCJnZXRyYnVmIHJidWZudW0iLCIiLHJidWZudW0pOwot ICAgIGRlYnVnKEYxMDEsImdldHJidWYgd3Nsb3RzIiwiIix3c2xvdHMpOwotICAgIGRlYnVnKEYx MDEsImdldHJidWYgZHVtMDAyIiwiIixkdW0wMDIpOwotICAgIGRlYnVnKEYxMDEsImdldHJidWYg ZHVtMDAzIiwiIixkdW0wMDMpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICBpZiAocmJ1Zm51 bSA9PSAwKSByZXR1cm4oLTEpOwkvKiBObyBmcmVlIGJ1ZmZlcnMuICovCi0gICAgaWYgKHJidWZu dW0gPCAwKSByZXR1cm4oLTIpOwkvKiBTaG91bGRuJ3QgaGFwcGVuLiAqLwotICAgIGZvciAoaSA9 IDA7IGkgPCB3c2xvdHM7IGkrKykJLyogRmluZCB0aGUgZmlyc3Qgb25lIG5vdCBpbiB1c2UuICov Ci0gICAgICBpZiAocmJ1ZnVzZVtpXSA9PSAwKSB7CQkvKiBHb3Qgb25lPyAqLwotCSAgcmJ1ZnVz ZVtpXSA9IDE7CQkvKiBNYXJrIGl0IGFzIGluIHVzZS4gKi8KLQkgICpyX3BrdFtpXS5iZl9hZHIg PSAnXDAnOwkvKiBaZXJvIHRoZSBidWZmZXIgZGF0YSBmaWVsZCAqLwotCSAgcmJ1Zm51bS0tOwkJ CS8qIE9uZSBsZXNzIGZyZWUgYnVmZmVyLiAqLwotCSAgZGVidWcoRjEwMSwiZ2V0cmJ1ZiBuZXcg cmJ1Zm51bSIsIiIscmJ1Zm51bSk7Ci0JICBpZiAoKHdoYXQgJiBXX1JFQ1YpICYmICgrK3djdXIg PiB3bWF4KSkKLQkgICAgd21heCA9IHdjdXI7CQkvKiBGb3Igc3RhdGlzdGljcy4gKi8KLQkgIC8q IGRlYnVnKEYxMDEsImdldHJidWYgd2N1ciIsIiIsd2N1cik7ICovCi0JICByZXR1cm4oaSk7CQkJ LyogUmV0dXJuIGl0cyBpbmRleC4gKi8KLSAgICAgIH0KLSAgICAvKiBkZWJ1ZyhGMTAxLCJnZXRy YnVmIGZvdWx1cCIsIiIsaSk7ICovCi0gICAgcmJ1Zm51bSA9IDA7CQkJLyogRGlkbid0IGZpbmQg b25lLiAqLwotICAgIHJldHVybigtMyk7CQkJCS8qIFNob3VsZG4ndCBoYXBwZW4hICovCi19Ci0K LS8qICBGIFIgRSBFIFMgQiBVIEYgIC0tICBGcmVlIHNlbmQtYnVmZmVyIGZvciBnaXZlbiBwYWNr ZXQgc2VxdWVuY2UgbnVtYmVyICovCi0KLS8qICBSZXR1cm5zOiAgKi8KLS8qICAgMSB1cG9uIHN1 Y2Nlc3MgICovCi0vKiAgLTEgaWYgc3BlY2lmaWVkIGJ1ZmZlciBkb2VzIG5vdCBleGlzdCAqLwot Ci1pbnQKLWZyZWVzYnVmKG4pIGludCBuOyB7CQkJLyogUmVsZWFzZSBzZW5kLWJ1ZmZlciBmb3Ig cGFja2V0IG4uICovCi0gICAgaW50IGk7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJmcmVlc2J1ZiIsIiIs bik7Ci0gICAgaWYgKG4gPCAwIHx8IG4gPiA2MykJCS8qIE5vIHN1Y2ggcGFja2V0LiAqLwotICAg ICAgcmV0dXJuKC0xKTsKLSAgICBpID0gc3NlcXRibFtuXTsJCQkvKiBHZXQgdGhlIHdpbmRvdyBz bG90IG51bWJlci4gKi8KLSAgICBpZiAoaSA+IC0xICYmIGkgPD0gd3Nsb3RzKSB7Ci0Jc3NlcXRi bFtuXSA9IC0xOwkJLyogSWYgdmFsaWQsIHJlbW92ZSBmcm9tIHNlcXRibCAqLwotIAlzYnVmbnVt Kys7CQkJLyogYW5kIGNvdW50IG9uZSBtb3JlIGZyZWUgYnVmZmVyICovCi0Jc2J1ZnVzZVtpXSA9 IDA7CQkJLyogYW5kIG1hcmsgaXQgYXMgZnJlZSwgKi8KLQlpZiAod2hhdCAmIChXX1NFTkR8V19S RU1PKSkJLyogZGVjcmVtZW50IGFjdGl2ZSBzbG90cyAqLwotCSAgd2N1ci0tOwkJCS8qIGZvciBz dGF0aXN0aWNzIGFuZCBkaXNwbGF5LiAqLwotICAgIH0gZWxzZSB7Ci0JZGVidWcoRjEwMSwiIHNz ZXF0Ymxbbl0iLCIiLHNzZXF0Ymxbbl0pOwotCXJldHVybigtMSk7Ci0gICAgfQotCi0vKiBUaGUg Zm9sbG93aW5nIGlzIGRvbmUgb25seSBzbyBkdW1wZWQgYnVmZmVycyB3aWxsIGxvb2sgcmlnaHQu ICovCi0KLSAgICBpZiAoMSkgewotCSpzX3BrdFtpXS5iZl9hZHIgPSAnXDAnOwkvKiBaZXJvIHRo ZSBidWZmZXIgZGF0YSBmaWVsZCAqLwotCXNfcGt0W2ldLnBrX3NlcSA9IC0xOwkJLyogSW52YWxp ZGF0ZSB0aGUgc2VxdWVuY2UgbnVtYmVyICovCi0Jc19wa3RbaV0ucGtfbGVuID0gMDsJCS8qIERh dGEgZmllbGQgbGVuZ3RoIG5vdyB6ZXJvLiAqLwotCXNfcGt0W2ldLnBrX3R5cCA9ICcgJzsJCS8q IEJsYW5rIHRoZSBwYWNrZXQgdHlwZSB0b28uICovCi0Jc19wa3RbaV0ucGtfcnRyID0gMDsJCS8q IEFuZCB0aGUgcmV0cmllcyBmaWVsZC4gKi8KLSAgICB9Ci0gICAgcmV0dXJuKDEpOwotfQotCi1p bnQKLWZyZWVyYnVmKGkpIGludCBpOyB7CQkJLyogUmVsZWFzZSByZWNlaXZlLWJ1ZmZlciBzbG90 ICJpIi4gKi8KLSAgICBpbnQgbjsKLQotLyogTk9URSAhISBDdXJyZW50bHksIHRoaXMgZnVuY3Rp b24gZnJlZXMgdGhlIGluZGljYXRlZCBidWZmZXIsIGJ1dCAqLwotLyogZG9lcyBOT1QgZXJhc2Ug dGhlIGRhdGEuICBUaGUgcHJvZ3JhbSBjb3VudHMgb24gdGhpcy4gIFdpbGwgZmluZCBhICovCi0v KiBiZXR0ZXIgd2F5IGxhdGVyLi4uLiAqLwotCi0gICAgLyogZGVidWcoRjEwMSwiZnJlZXJidWYs IHNsb3QiLCIiLGkpOyAqLwotICAgIGlmIChpIDwgMCB8fCBpID49IHdzbG90cykgewkJLyogTm8g c3VjaCBzbG90LiAqLwotCWRlYnVnKEYxMDEsImZyZWVyYnVmIG5vIHN1Y2ggc2xvdCIsIiIsaSk7 Ci0JcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgbiA9IHJfcGt0W2ldLnBrX3NlcTsJCS8qIEdldCB0 aGUgcGFja2V0IHNlcXVlbmNlIG51bWJlciAqLwotICAgIGRlYnVnKEYxMDEsImZyZWVyYnVmIHBh Y2tldCIsIiIsbik7Ci0gICAgaWYgKG4gPiAtMSAmJiBuIDwgNjQpCQkvKiBJZiB2YWxpZCwgcmVt b3ZlIGZyb20gc2VxdGJsICovCi0gICAgICByc2VxdGJsW25dID0gLTE7Ci0gICAgaWYgKHJidWZ1 c2VbaV0gIT0gMCkgewkJLyogSWYgcmVhbGx5IGFsbG9jYXRlZCwgKi8KLQlyYnVmdXNlW2ldID0g MDsJCQkvKiBtYXJrIGl0IGFzIGZyZWUsICovCi0JcmJ1Zm51bSsrOwkJCS8qIGFuZCBjb3VudCBv bmUgbW9yZSBmcmVlIGJ1ZmZlci4gKi8KLQlpZiAod2hhdCAmIFdfUkVDVikJCS8qIEtlZXAgdHJh Y2sgb2YgY3VycmVudCBzbG90cyAqLwotCSAgd2N1ci0tOwkJCS8qICBmb3Igc3RhdGlzdGljcyBh bmQgZGlzcGxheSAqLwotCWRlYnVnKEYxMDEsImZyZWVyYnVmIHJidWZudW0iLCIiLHJidWZudW0p OwotICAgIH0KLQotLyogVGhlIGZvbGxvd2luZyBpcyBkb25lIG9ubHkgc28gZHVtcGVkIGJ1ZmZl cnMgd2lsbCBsb29rIHJpZ2h0LiAqLwotCi0gICAgaWYgKDEpIHsKLSAgICAgLyogKnJfcGt0W2ld LmJmX2FkciA9ICdcMCc7ICovCS8qIFplcm8gdGhlIGJ1ZmZlciBkYXRhIGZpZWxkICovCi0Jcl9w a3RbaV0ucGtfc2VxID0gLTE7CQkvKiBBbmQgZnJvbSBwYWNrZXQgbGlzdCAqLwotCXJfcGt0W2ld LnBrX2xlbiA9IDA7CQkvKiBEYXRhIGZpZWxkIGxlbmd0aCBub3cgemVyby4gKi8KLQlyX3BrdFtp XS5wa190eXAgPSAnICc7CQkvKiBCbGFuayB0aGUgcGFja2V0IHR5cGUgdG9vLiAqLwotCXJfcGt0 W2ldLnBrX3J0ciA9IDA7CQkvKiBBbmQgdGhlIHJldHJpZXMgZmllbGQuICovCi0gICAgfQotICAg IHJldHVybigxKTsKLX0KLQotLyogVGhpcyBpcyBsaWtlIGZyZWVyYnVmLCBleGNlcHQgaXQncyBj YWxsZWQgd2l0aCBhIHBhY2tldCBzZXF1ZW5jZSBudW1iZXIgKi8KLS8qIHJhdGhlciB0aGFuIGEg cGFja2V0IGJ1ZmZlciBpbmRleC4gKi8KLQotVk9JRAotZnJlZXJwa3Qoc2VxKSBpbnQgc2VxOyB7 Ci0gICAgaW50IGs7Ci0gICAgZGVidWcoRjEwMSwiZnJlZXJwa3Qgc2VxIiwiIixzZXEpOwotICAg IGsgPSByc2VxdGJsW3NlcV07Ci0gICAgLyogZGVidWcoRjEwMSwiZnJlZXJwa3QgayIsIiIsayk7 ICovCi0gICAgaWYgKGsgPiAtMSkgewotCWsgPSBmcmVlcmJ1ZihrKTsKLQkvKiBkZWJ1ZyhGMTAx LCJmcmVlcnBrdCBmcmVlcmJ1ZiIsIiIsayk7ICovCi0gICAgfQotfQotCi0KLS8qICBDIEggSyBX IEkgTiAgLS0gIENoZWNrIGlmIHBhY2tldCBuIGlzIGluIHdpbmRvdy4gKi8KLQotLyogIFJldHVy bnM6ICovCi0vKiAgICAwIGlmIGl0IGlzIGluIHRoZSBjdXJyZW50IHdpbmRvdywgICovCi0vKiAg ICsxIGlmIGl0IHdvdWxkIGhhdmUgYmVlbiBpbiBwcmV2aW91cyB3aW5kb3cgKGUuZy4gaWYgYWNr IHdhcyBsb3N0KSwgKi8KLS8qICAgLTEgaWYgaXQgaXMgb3V0c2lkZSBhbnkgd2luZG93IChwcm90 b2NvbCBlcnJvciksICAgKi8KLS8qICAgLTIgaWYgZWl0aGVyIG9mIHRoZSBhcmd1bWVudCBwYWNr ZXQgbnVtYmVycyBpcyBvdXQgb2YgcmFuZ2UuICAqLwotCi0vKiBDYWxsIHdpdGggcGFja2V0IG51 bWJlciB0byBjaGVjayAobiksIGxvd2VzdCBwYWNrZXQgbnVtYmVyIGluIHdpbmRvdyAqLwotLyog KGJvdHRvbSksIGFuZCBudW1iZXIgb2Ygc2xvdHMgaW4gd2luZG93IChzbG90cykuICAqLwotCi1p bnQKLWNoa3dpbihuLGJvdHRvbSxzbG90cykgaW50IG4sIGJvdHRvbSwgc2xvdHM7IHsKLSAgICBp bnQgdG9wLCBwcmV2OwotCi0gICAgZGVidWcoRjEwMSwiY2hrd2luIHBhY2tldCIsIiIsbik7Ci0g ICAgZGVidWcoRjEwMSwiY2hrd2luIHdpbmxvIiwiIixib3R0b20pOwotICAgIGRlYnVnKEYxMDEs ImNoa3dpbiBzbG90cyIsIiIsc2xvdHMpOwotCi0vKiBGaXJzdCBkbyB0aGUgZWFzeSBhbmQgY29t bW9uIGNhc2VzLCB3aGVyZSB0aGUgd2luZG93cyBhcmUgbm90IHNwbGl0LiAqLwotCi0gICAgaWYg KG4gPCAwIHx8IG4gPiA2MyB8fCBib3R0b20gPCAwIHx8IGJvdHRvbSA+IDYzKQotICAgICAgcmV0 dXJuKC0yKTsKLQotICAgIGlmIChuID09IGJvdHRvbSkgcmV0dXJuKDApOwkJLyogSW4gYSBwZXJm ZWN0IHdvcmxkLi4uICovCi0KLSAgICB0b3AgPSBib3R0b20gKyBzbG90czsJCS8qIENhbGN1bGF0 ZSB3aW5kb3cgdG9wLiAqLwotICAgIGlmICh0b3AgPCA2NCAmJiBuIDwgdG9wICYmIG4gPj0gYm90 dG9tKQotICAgICAgcmV0dXJuKDApOwkJCS8qIEluIGN1cnJlbnQgd2luZG93LiAqLwotCi0gICAg cHJldiA9IGJvdHRvbSAtIHNsb3RzOwkJLyogQm90dG9tIG9mIHByZXZpb3VzIHdpbmRvdy4gKi8K LSAgICBpZiAocHJldiA+IC0xICYmIG4gPCBib3R0b20gJiYgbiA+IHByZXYpCi0gICAgICByZXR1 cm4oMSk7CQkJLyogSW4gcHJldmlvdXMuICovCi0KLS8qIE5vdyBjb25zaWRlciB0aGUgY2FzZSB3 aGVyZSB0aGUgY3VycmVudCB3aW5kb3cgaXMgc3BsaXQuICovCi0KLSAgICBpZiAodG9wID4gNjMp IHsJCQkvKiBXcmFwYXJvdW5kLi4uICovCi0JdG9wIC09IDY0OwkJCS8qIEdldCBtb2R1bG8tNjQg c2VxdWVuY2UgbnVtYmVyICovCi0JaWYgKG4gPCB0b3AgfHwgbiA+PSBib3R0b20pIHsKLQkgICAg cmV0dXJuKDApOwkJCS8qIEluIGN1cnJlbnQgd2luZG93LiAqLwotCX0gZWxzZSB7CQkJLyogTm90 IGluIGN1cnJlbnQgd2luZG93LiAqLwotCSAgICBpZiAobiA8IGJvdHRvbSAmJiBuID49IHByZXYp IC8qIFByZXZpb3VzIHdpbmRvdyBjYW4ndCBiZSBzcGxpdC4gKi8KLQkgICAgICByZXR1cm4oMSk7 CQkvKiBJbiBwcmV2aW91cyB3aW5kb3cuICovCi0JICAgIGVsc2UKLQkgICAgICByZXR1cm4oLTEp OwkJLyogTm90IGluIHByZXZpb3VzIHdpbmRvdy4gKi8KLQl9Ci0gICAgfQotCi0vKiBOb3cgdGhl IGNhc2Ugd2hlcmUgY3VycmVudCB3aW5kb3cgbm90IHNwbGl0LCBidXQgcHJldmlvdXMgd2luZG93 IGlzLiAqLwotCi0gICAgaWYgKHByZXYgPCAwKSB7CQkJLyogSXMgcHJldmlvdXMgd2luZG93IHNw bGl0PyAqLwotCXByZXYgKz0gNjQ7CQkJLyogWWVzLiAqLwotCWlmIChuIDwgYm90dG9tIHx8IG4g Pj0gcHJldikKLQkgIHJldHVybigxKTsJCQkvKiBJbiBwcmV2aW91cyB3aW5kb3cuICovCi0gICAg fSBlbHNlIHsJCQkJLyogUHJldmlvdXMgd2luZG93IG5vdCBzcGxpdC4gKi8KLQlpZiAobiA8IGJv dHRvbSAmJiBuID49IHByZXYpCi0JICByZXR1cm4oMSk7CQkJLyogSW4gcHJldmlvdXMgd2luZG93 LiAqLwotICAgIH0KLQotLyogSXQncyBub3QgaW4gdGhlIGN1cnJlbnQgd2luZG93LCBhbmQgbm90 IGluIHRoZSBwcmV2aW91cyB3aW5kb3cuLi4gKi8KLQotICAgIHJldHVybigtMSk7CQkJCS8qIFNv IGl0J3Mgbm90IGluIGFueSB3aW5kb3cuICovCi19Ci0KLWludAotZHVtcHNidWYoKSB7CQkJCS8q IER1bXAgc2VuZC1idWZmZXJzICovCi0jaWZkZWYgREVCVUcKLSAgICBpbnQgaiwgeCwgejsJCQkv KiB0byBkZWJ1ZyBsb2cuICovCi0KLSAgICBpZiAoISBkZWJsb2cpIHJldHVybigwKTsKLSAgICB4 ID0genNvdXRsKFpERklMRSwiU0VORCBCVUZGRVJTOiIpOwotICAgIGlmICh4IDwgMCkgewotCWRl YmxvZyA9IDA7Ci0JcmV0dXJuKDApOwotICAgIH0KLSAgICB4PXpzb3V0bChaREZJTEUsImJ1ZmZl ciBpbnVzZSBhZGRyZXNzIGxlbmd0aCBkYXRhIHR5cGUgc2VxIGZsYWcgcmV0cmllcyIpOwotICAg IGlmICh4IDwgMCkgewotCWRlYmxvZyA9IDA7Ci0JcmV0dXJuKDApOwotICAgIH0KLSAgICBmb3Ig KGogPSAwOyBqIDwgd3Nsb3RzOyBqKyspIHsKLQlpZiAoIXNidWZ1c2Vbal0pCi0JICBjb250aW51 ZTsKLQl6ID0gKCh1bnNpZ25lZCBsb25nKShzX3BrdFtqXS5iZl9hZHIpKSAmIDB4ZmZmZjsKLQot CXNwcmludGYoeGJ1ZiwJCQkvKiBzYWZlICgyMDApICovCi0JCSIlNGQlNmQlMTBkJTVkJTZkJTRj JTVkJTZkXG4iLAotCQlqLAotCQlzYnVmdXNlW2pdLAotCQkvKiBBdm9pZCB3YXJuaW5ncyB3aGVu IGFkZHJlc3NlcyBhcmUgYmlnZ2VyIHRoYW4gaW50cyAqLwotCQl6LAotCQlzX3BrdFtqXS5iZl9s ZW4sCi0JCXNfcGt0W2pdLnBrX2xlbiwKLQkJc19wa3Rbal0ucGtfdHlwLAotCQlzX3BrdFtqXS5w a19zZXEsCi0JCXNfcGt0W2pdLnBrX3J0cgotCQkpOwotCWlmICh6c291dChaREZJTEUseGJ1Zikg PCAwKSAgewotCSAgICBkZWJsb2cgPSAwOwotCSAgICByZXR1cm4oMCk7Ci0JfQotCWlmIChzX3Br dFtqXS5wa19hZHIpIHsKLQkgICAgeCA9IChpbnQpc3RybGVuKChjaGFyICopIHNfcGt0W2pdLnBr X2Fkcik7Ci0JICAgIGlmICh4KQotCSAgICAgIHNwcmludGYoeGJ1ZiwJCS8qIHNhZmUgKGNoZWNr ZWQpICovCi0JCSAgICAgICJbJS43MnMlc11cbiIsc19wa3Rbal0ucGtfYWRyLCB4ID4gNzIgPyAi Li4uIiA6ICIiKTsKLQkgICAgZWxzZQotCSAgICAgIHNwcmludGYoeGJ1ZiwiWyhlbXB0eSBzdHJp bmcpXVxuIik7IC8qIHNhZmUgKDIwMCkgKi8KLQl9IGVsc2UgewotCSAgICBzcHJpbnRmKHhidWYs IlsobnVsbCBwb2ludGVyKV1cbiIpOwkvKiBzYWZlICgyMDApICovCi0JfQotCWlmICh6c291dCha REZJTEUseGJ1ZikgPCAwKSB7Ci0JICAgIGRlYmxvZyA9IDA7Ci0JICAgIHJldHVybigwKTsKLQl9 Ci0gICAgfQotICAgIHNwcmludGYoeGJ1ZiwiZnJlZTogJWQsIHdpbmxvOiAlZFxuIiwgc2J1Zm51 bSwgd2lubG8pOyAvKiBzYWZlICgyMDApICovCi0gICAgaWYgKHpzb3V0KFpERklMRSx4YnVmKSA8 IDApIHsKLQlkZWJsb2cgPSAwOwotCXJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcg Ki8KLSAgICByZXR1cm4oMCk7Ci19Ci1pbnQKLWR1bXByYnVmKCkgewkJCQkvKiBEdW1wIHJlY2Vp dmUtYnVmZmVycyAqLwotI2lmZGVmIERFQlVHCi0gICAgaW50IGosIHgsIHo7Ci0gICAgaWYgKCEg ZGVibG9nKSByZXR1cm4oMCk7Ci0gICAgaWYgKHpzb3V0bChaREZJTEUsIlJFQ0VJVkUgQlVGRkVS UzoiKSA8IDApIHsKLQlkZWJsb2cgPSAwOwotCXJldHVybigwKTsKLSAgICB9Ci0gICAgeD16c291 dGwoWkRGSUxFLCJidWZmZXIgaW51c2UgYWRkcmVzcyBsZW5ndGggZGF0YSB0eXBlIHNlcSBmbGFn IHJldHJpZXMiKTsKLSAgICBpZiAoeCA8IDApIHsKLQlkZWJsb2cgPSAwOwotCXJldHVybigwKTsK LSAgICB9Ci0gICAgZm9yICggaiA9IDA7IGogPCB3c2xvdHM7IGorKyApIHsKLQlpZiAoIXJidWZ1 c2Vbal0pCi0JICBjb250aW51ZTsKLQl6ID0gKCh1bnNpZ25lZCBsb25nKShyX3BrdFtqXS5iZl9h ZHIpKSAmIDB4ZmZmZjsKLQlzcHJpbnRmKHhidWYsCQkJLyogMjAwLCBzYWZlICovCi0JCSIlNGQl NmQlMTBkJTVkJTZkJTRjJTVkJTZkXG4iLAotCQlqLAotCQlyYnVmdXNlW2pdLAotCQkvKiBBdm9p ZCB3YXJuaW5ncyB3aGVuIGFkZHJlc3NlcyBhcmUgYmlnZ2VyIHRoYW4gaW50cyAqLwotCQl6LAot CQlyX3BrdFtqXS5iZl9sZW4sCi0JCXJfcGt0W2pdLnBrX2xlbiwKLQkJcl9wa3Rbal0ucGtfdHlw LAotCQlyX3BrdFtqXS5wa19zZXEsCi0JCXJfcGt0W2pdLnBrX3J0cgotCQkpOwotCWlmICh6c291 dChaREZJTEUseGJ1ZikgPCAwKSB7Ci0JICAgIGRlYmxvZyA9IDA7Ci0JICAgIHJldHVybigwKTsK LQl9Ci0JeCA9IChpbnQpc3RybGVuKChjaGFyICopcl9wa3Rbal0uYmZfYWRyKTsKLQlzcHJpbnRm KHhidWYsCQkJLyogc2FmZSAoY2hlY2tlZCkgKi8KLQkJIlslLjcycyVzXVxuIixyX3BrdFtqXS5i Zl9hZHIsIHggPiA3MiA/ICIuLi4iIDogIiIpOwotCWlmICh6c291dChaREZJTEUseGJ1ZikgPCAw KSAgewotCSAgICBkZWJsb2cgPSAwOwotCSAgICByZXR1cm4oMCk7Ci0JfQotICAgIH0KLSAgICBz cHJpbnRmKHhidWYsImZyZWU6ICVkLCB3aW5sbzogJWRcbiIsIHJidWZudW0sIHdpbmxvKTsgLyog c2FmZSAoMjAwKSAqLwotICAgIGlmICh6c291dChaREZJTEUseGJ1ZikgPCAwKSAgewotCWRlYmxv ZyA9IDA7Ci0JcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotICAgIHJldHVy bigwKTsKLX0KLQotLyogIFMgQSBUIFQgUiAgLS0gIFNlbmQgYW4gQXR0cmlidXRlIFBhY2tldCAg Ki8KLQotLyoKLSAgU2VuZHMgYXR0cmlidXRlIHBhY2tldChzKSBmb3IgdGhlIGN1cnJlbnQgZmls ZS4gIElmIHRoZSBpbmZvIHdpbGwgbm90Ci0gIGZpdCBpbnRvIG9uZSBwYWNrZXQsIGl0IGNhbiBi ZSBjYWxsZWQgcmVwZWF0ZWRseSB1bnRpbCBhbGwgdGhlIGZpZWxkcwotICB0aGF0IHdpbGwgZml0 IGFyZSBzZW50LgotCi0gIENhbGwgd2l0aDoKLSAgICB4cCA9PSAwIGlmIHdlJ3JlIHNlbmRpbmcg YSByZWFsIGZpbGUgKEYgcGFja2V0KSwgb3I6Ci0gICAgeHAgIT0gMCBmb3Igc2NyZWVuIGRhdGEg KFggcGFja2V0KS4KLSAgQW5kOgotICAgIGZsYWcgPT0gMSBmb3IgZmlyc3QgQSBwYWNrZXQKLSAg ICBmbGFnID09IDAgZm9yIHN1YnNlcXVlbnQgQSBwYWNrZXRzLgotICBSZXR1cm5zOgotICAgIDEg b3IgZ3JlYXRlciBpZiBhbiBBIHBhY2tldCB3YXMgc2VudCwgb3I6Ci0gICAgMCBpZiBhbiBTLXBh Y2tldCB3YXMgbm90IHNlbnQgYmVjYXVzZSB0aGVyZSB3YXMgbm8gZGF0YSB0byBzZW5kIG9yCi0g ICAgICB0aGVyZSB3YXMgbm8gZGF0YSBsZWZ0IHRoYXQgd2FzIHNob3J0IGVub3VnaCB0byBzZW5k LCBvcjoKLSAgIC0xIG9uIGFueSBraW5kIG9mIGVycm9yLgotKi8KLQotLyogKGRvbid0KSAjZGVm aW5lIFRTT0ZPUk1BVCAqLwotLyogd2hpY2ggd2FzIG9ubHkgZm9yIG1ha2luZyBDLUtlcm1pdCBz ZW5kIFRTTy1LZXJtaXQtbGlrZSBBIHBhY2tldHMgKi8KLS8qIHRvIHRyeSB0byB0cmFjayBkb3du IGEgcHJvYmxlbSBzb21lYm9keSByZXBvcnRlZC4uLiAqLwotCi1pbnQKLXNhdHRyKHhwLCBmbGFn KSBpbnQgeHAsIGZsYWc7IHsJCS8qIFNlbmQgQXR0cmlidXRlcyAqLwotCi0gICAgc3RhdGljIGlu dCBtYXg7CQkJLyogTWF4aW11bSBsZW5ndGggZm9yIEF0dHJpYnV0ZXMgKi8KLSAgICBzdGF0aWMg c2hvcnQgZG9uZVs5NV07CQkvKiBGaWVsZC1jb21wbGV0ZSBhcnJheSAqLwotICAgIHN0YXRpYyBz dHJ1Y3QgemF0dHIgeDsJCS8qIEZpbGUgYXR0cmlidXRlIHN0cnVjdCAqLwotICAgIHN0YXRpYyBj aGFyIHhkYXRlWzI0XTsKLQotICAgIGV4dGVybiBjaGFyICogY2tzeXNpZDsKLQotICAgIC8qIFNv bWUgZXh0cmEgZmxhZ3MgYXJlIHVzZWQgYmVjYXVzZSB0aGUgImRvbmUiIGFycmF5IGlzIHNwYXJz ZSAqLwotCi0gICAgaW50IGksIGosIHJjLCBhbG4sIGxlZnQgPSAwLCBudW1zZXQgPSAwLCB4Ymlu ID0gMDsgLyogV29ya2VycyAqLwotICAgIGludCBub3RhZmlsZSA9IDA7Ci0gICAgY2hhciAqdHAs IGM7Ci0KLSAgICBub3RhZmlsZSA9IHNuZGFycmF5IHx8IHBpcGVzZW5kIHx8Ci0jaWZkZWYgUElQ RVNFTkQKLSAgICAgIHNuZGZpbHRlciB8fAotI2VuZGlmIC8qIFBJUEVTRU5EICovCi0JY2FsaWJy YXRlOwotCi0gICAgZGVidWcoRjEwMSwic2F0dHIgZmxhZyIsIiIsZmxhZyk7Ci0gICAgaWYgKCFm bGFnKQkJCQkvKiBObyBtb3JlIGF0dHJpYnV0ZXMgdG8gc2VuZCAqLwotICAgICAgaWYgKGRvbmVb eHVuY2hhcignQCcpXSkKLQlyZXR1cm4oMCk7Ci0KLSAgICAvKiBJbml0aWFsaXplIEF0dHJpYnV0 ZSBtZWNoYW5pc20gKi8KLQotICAgIGlmIChmbGFnKSB7CQkJCS8qIEZpcnN0IHRpbWUgaGVyZSBm b3IgdGhpcyBmaWxlPyAqLwotCWluaXRhdHRyKCZ4KTsJCQkvKiBCbGFuayBvdXQgYWxsIHRoZSBm aWVsZHMuICovCi0JZm9yIChqID0gMDsgaiA8IDk1OyBqKyspCS8qIEluaXQgYXJyYXkgb2YgY29t cGxldGVkIGZpZWxkcyAqLwotCSAgZG9uZVtqXSA9IDA7Ci0JbWF4ID0gbWF4ZGF0YSgpOwkJLyog R2V0IG1heGltdW0gZGF0YSBmaWVsZCBsZW5ndGggKi8KLQlpZiAobm90YWZpbGUgfHwgeHAgPT0g MSkgewkvKiBJcyBpdCBub3QgYSByZWFsIGZpbGU/ICovCi0JICAgIGV4dGVybiBjaGFyICogenpu ZGF0ZSgpOwotCSAgICBjaGFyICogcDsKLQkgICAgaW50IGk7Ci0jaWZkZWYgQ0FMSUJSQVRFCi0J ICAgIGlmIChjYWxpYnJhdGUpIHsJCS8qIENhbGlicmF0aW9uIHJ1bi4uLiAqLwotCQl4Lmxlbmd0 aGsgPSBjYWxpYnJhdGUgLyAxMDI0TDsgLyogV2Uga25vdyB0aGUgbGVuZ3RoICovCi0JCXgubGVu Z3RoID0gY2FsaWJyYXRlOwotCSAgICB9Ci0jZW5kaWYgLyogQ0FMSUJSQVRFICovCi0JICAgIHgu c3lzdGVtaWQudmFsID0gY2tzeXNpZDsJLyogU3lzdGVtIElEICovCi0JICAgIHguc3lzdGVtaWQu bGVuID0gKGludClzdHJsZW4oY2tzeXNpZCk7Ci0JICAgIGNrc3RybmNweSh4ZGF0ZSx6em5kYXRl KCksMjQpOwotCSAgICB4ZGF0ZVs4XSA9IFNQOwotCSAgICB6dGltZSgmcCk7Ci0JICAgIGZvciAo aSA9IDExOyBpIDwgMTk7IGkrKykJLyogY29weSBoaDptbTpzcyAqLwotCSAgICAgIHhkYXRlW2kg LSAyXSA9IHBbaV07CS8qIHRvIHhkYXRlICovCi0JICAgIHhkYXRlWzE3XSA9IE5VTDsJCS8qIHRl cm1pbmF0ZSAqLwotCSAgICB4LmRhdGUudmFsID0geGRhdGU7Ci0JICAgIHguZGF0ZS5sZW4gPSAx NzsKLQkgICAgZGVidWcoRjExMSwic2F0dHIgbm90YWZpbGUgZGF0ZSIseC5kYXRlLnZhbCx4LmRh dGUubGVuKTsKLQl9IGVsc2UgewkJCS8qIFJlYWwgZmlsZSAqLwotCSAgICByYyA9IHpzYXR0cigm eCk7CQkvKiBHZXQgYXR0cmlidXRlcyBmb3IgdGhpcyBmaWxlICAqLwotCSAgICBkZWJ1ZyhGMTAx LCJzYXR0ciB6c2F0dHIiLCIiLHJjKTsKLQkgICAgaWYgKHJjIDwgMCkJCQkvKiBDYW4ndCBnZXQg J2VtIHNvIGRvbid0IHNlbmQgJ2VtICovCi0JICAgICAgcmV0dXJuKDApOwotCSAgICBkZWJ1ZyhG MTAxLCJzYXR0ciBpbml0IG1heCIsIiIsbWF4KTsKLQl9Ci0gICAgfQotICAgIGlmIChueHRwa3Qo KSA8IDApCQkJLyogR290ICdlbSwgZ2V0IG5leHQgcGFja2V0IG51bWJlciAqLwotICAgICAgcmV0 dXJuKC0xKTsJCQkvKiBCYWQgbmV3cyBpZiB3ZSBjYW4ndCAqLwotCi0gICAgaSA9IDA7CQkJCS8q IEluaXQgZGF0YSBmaWVsZCBjaGFyYWN0ZXIgbnVtYmVyICovCi0KLSAgICAvKiBEbyBlYWNoIGF0 dHJpYnV0ZSB1c2luZyBmaXJzdC1maXQgbWV0aG9kLCBtYXJraW5nIGFzIHdlIGdvICovCi0gICAg LyogVGhpcyBpcyByYXRoZXIgbG9uZyBhbmQgcmVwaXRpdGlvdXMgLSBjb3VsZCBiZSBkb25lIG1v cmUgY2xldmVybHkgKi8KLQotICAgIGlmIChhdHNpZG8gJiYgIWRvbmVbeHVuY2hhcihjID0gJy4n KV0pIHsgLyogU3lzdGVtIHR5cGUgKi8KLQlpZiAobWF4IC0gaSA+PSB4LnN5c3RlbWlkLmxlbiAr IDIpIHsgLyogRW5vdWdoIHNwYWNlID8gKi8KLQkgICAgZGF0YVtpKytdID0gYzsJCSAgICAgLyog WWVzLCBhZGQgcGFyYW1ldGVyICovCi0JICAgIGRhdGFbaSsrXSA9IHRvY2hhcih4LnN5c3RlbWlk Lmxlbik7CSAvKiBBZGQgbGVuZ3RoICovCi0JICAgIGZvciAoaiA9IDA7IGogPCB4LnN5c3RlbWlk LmxlbjsgaisrKSAvKiBBZGQgZGF0YSAqLwotCSAgICAgIGRhdGFbaSsrXSA9IHguc3lzdGVtaWQu dmFsW2pdOwotCSAgICBudW1zZXQrKzsJCQkvKiBDb3VudCB0aGF0IHdlIGRpZCBhdCBsZWFzdCBv bmUgKi8KLQkgICAgZG9uZVt4dW5jaGFyKGMpXSA9IDE7CS8qIE1hcmsgdGhpcyBhdHRyaWJ1dGUg YXMgZG9uZSAqLwotCX0gZWxzZQkJCQkvKiBObyAqLwotCSAgbGVmdCsrOwkJCS8qIHNvIG1hcmsg dGhpcyBvbmUgbGVmdCB0byBkbyAqLwotICAgIH0KLSNpZmRlZiBTVFJBVFVTCi0gICAgaWYgKGF0 Y3JlbyAmJiAhZG9uZVt4dW5jaGFyKGMgPSAnJCcpXSkgeyAvKiBDcmVhdG9yICovCi0JaWYgKG1h eCAtIGkgPj0geC5jcmVhdG9yLmxlbiArIDIpIHsgLyogRW5vdWdoIHNwYWNlID8gKi8KLQkgICAg ZGF0YVtpKytdID0gYzsKLQkgICAgZGF0YVtpKytdID0gdG9jaGFyKHguY3JlYXRvci5sZW4pOwot CSAgICBmb3IgKGogPSAwOyBqIDwgeC5jcmVhdG9yLmxlbjsgaisrKQotCSAgICAgIGRhdGFbaSsr XSA9IHguY3JlYXRvci52YWxbal07Ci0JICAgIG51bXNldCsrOwotCSAgICBkb25lW3h1bmNoYXIo YyldID0gMTsKLQl9IGVsc2UKLQkgIGxlZnQrKzsKLSAgICB9Ci0gICAgaWYgKGF0YWN0byAmJiAh ZG9uZVt4dW5jaGFyKGMgPSAnJScpXSkgeyAvKiBGaWxlIGFjY291bnQgKi8KLQlpZiAobWF4IC0g aSA+PSB4LmFjY291bnQubGVuICsgMikgewotCSAgICBkYXRhW2krK10gPSBjOwotCSAgICBkYXRh W2krK10gPSB0b2NoYXIoeC5hY2NvdW50Lmxlbik7Ci0JICAgIGZvciAoaiA9IDA7IGogPCB4LmFj Y291bnQubGVuOyBqKyspCi0JICAgICAgZGF0YVtpKytdID0geC5hY2NvdW50LnZhbFtqXTsKLQkg ICAgbnVtc2V0Kys7Ci0JICAgIGRvbmVbeHVuY2hhcihjKV0gPSAxOwotCX0gZWxzZQotCSAgbGVm dCsrOwotICAgIH0KLSAgICBpZiAoYXRmcm1vICYmICFkb25lW3h1bmNoYXIoYyA9ICcvJyldKSB7 IC8qIFBhY2tldCBkYXRhIGZvcm1hdCAqLwotCWlmIChtYXggLSBpID49IHgucmVjZm0ubGVuICsg MikgewotCSAgICBkYXRhW2krK10gPSBjOwotCSAgICBkYXRhW2krK10gPSB0b2NoYXIoeC5yZWNm bS5sZW4pOyAvKiAgQ29weSBmcm9tIGF0dHIgc3RydWN0dXJlICovCi0JICAgIGZvciAoaiA9IDA7 IGogPCB4LnJlY2ZtLmxlbjsgaisrKQotCSAgICAgIGRhdGFbaSsrXSA9IHgucmVjZm0udmFsW2pd OwotCSAgICBudW1zZXQrKzsKLQkgICAgZG9uZVt4dW5jaGFyKGMpXSA9IDE7Ci0JfSBlbHNlCi0J ICBsZWZ0Kys7Ci0gICAgfQotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLQotICAgIHhiaW4gPQkJCQkv KiBJcyB0aGUgdHJhbnNmZXIgaW4gYmluYXJ5IG1vZGU/ICovCi0jaWZkZWYgVk1TCi0gICAgICBi aW5hcnkgPT0gWFlGVF9JIHx8IGJpbmFyeSA9PSBYWUZUX0wgfHwgLyogSU1BR0Ugb3IgTEFCRUxF RCAqLwotCSFzdHJuY21wKHgucmVjZm0udmFsLCJGIiwxKQkvKiBvciBSRUNGTT1GeHh4eHh4ICov Ci0jZWxzZQotICAgICAgYmluYXJ5CQkJCS8qIFVzZXIgc2FpZCBTRVQgRklMRSBUWVBFIEJJTkFS WSAgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQk7Ci0KLSAgICBpZiAoYXR0eXBvICYmICFkb25lW3h1 bmNoYXIoYyA9ICciJyldKSB7IC8qIEZpbGUgdHlwZSAqLwotCWlmIChtYXggLSBpID49IDUpIHsJ CS8qIE1heCBsZW5ndGggZm9yIHRoaXMgZmllbGQgKi8KLQkgICAgZGF0YVtpKytdID0gYzsKLQkg ICAgaWYgKHhiaW4pIHsJCQkvKiBCaW5hcnkgKi8KLQkJZGF0YVtpKytdID0gdG9jaGFyKDIpOwkv KiAgVHdvIGNoYXJhY3RlcnMgKi8KLQkJZGF0YVtpKytdID0gJ0InOwkvKiAgQiBmb3IgQmluYXJ5 ICovCi0JCWRhdGFbaSsrXSA9ICc4JzsJLyogIDgtYml0IGJ5dGVzIChub3RlIGFzc3VtcHRpb24u Li4pICovCi0jaWZkZWYgQ0tfTEFCRUxFRAotCQlpZiAoYmluYXJ5ICE9IFhZRlRfTAotI2lmZGVm IFZNUwotCQkgICAgJiYgYmluYXJ5ICE9IFhZRlRfSQotI2VuZGlmIC8qIFZNUyAqLwotCQkgICAg KQotCQkgIGJpbmFyeSA9IFhZRlRfQjsKLSNlbmRpZiAvKiBDS19MQUJFTEVEICovCi0JICAgIH0g ZWxzZSB7CQkJLyogVGV4dCAqLwotI2lmZGVmIFRTT0ZPUk1BVAotCQlkYXRhW2krK10gPSB0b2No YXIoMSk7CS8qICBPbmUgY2hhcmFjdGVyICovCi0JCWRhdGFbaSsrXSA9ICdBJzsJLyogIEEgPSAo ZXh0ZW5kZWQpIEFTQ0lJIHdpdGggQ1JMRnMgKi8KLSNlbHNlCi0JCWRhdGFbaSsrXSA9IHRvY2hh cigzKTsJLyogIFRocmVlIGNoYXJhY3RlcnMgKi8KLQkJZGF0YVtpKytdID0gJ0EnOwkvKiAgQSA9 IChleHRlbmRlZCkgQVNDSUkgd2l0aCBDUkxGcyAqLwotCQlkYXRhW2krK10gPSAnTSc7CS8qICBN IGZvciBjYXJyaWFnZSByZXR1cm4gKi8KLQkJZGF0YVtpKytdID0gJ0onOwkvKiAgSiBmb3IgbGlu ZWZlZWQgKi8KLSNlbmRpZiAvKiBUU09GT1JNQVQgKi8KLQotI2lmZGVmIFZNUwotCQliaW5hcnkg PSBYWUZUX1Q7CS8qIFdlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQgdGV4dCAqLwotI2VuZGlmIC8q IFZNUyAqLwotCSAgICB9Ci0JICAgIG51bXNldCsrOwotCSAgICBkb25lW3h1bmNoYXIoYyldID0g MTsKLQl9IGVsc2UKLQkgIGxlZnQrKzsKLSAgICB9Ci0KLSNpZmRlZiBUU09GT1JNQVQKLSAgICBp ZiAoYXR0eXBvICYmICF4YmluICYmICFkb25lW3h1bmNoYXIoYyA9ICcvJyldKSB7IC8qIFJlY29y ZCBmb3JtYXQgKi8KLQlpZiAobWF4IC0gaSA+PSA1KSB7Ci0JICAgIGRhdGFbaSsrXSA9IGM7Ci0J ICAgIGRhdGFbaSsrXSA9IHRvY2hhcigzKTsJLyogIFRocmVlIGNoYXJhY3RlcnMgKi8KLQkgICAg ZGF0YVtpKytdID0gJ0EnOwkJLyogIEEgPSB2YXJpYWJsZSB3aXRoIENSTEZzICovCi0JICAgIGRh dGFbaSsrXSA9ICdNJzsJCS8qICBNIGZvciBjYXJyaWFnZSByZXR1cm4gKi8KLQkgICAgZGF0YVtp KytdID0gJ0onOwkJLyogIEogZm9yIGxpbmVmZWVkICovCi0JfQotICAgIH0KLSNlbmRpZiAvKiBU U09GT1JNQVQgKi8KLQotICAgIGlmIChhdHR5cG8gJiYgIXhiaW4gJiYgIWRvbmVbeHVuY2hhcihj ID0gJyonKV0pIHsgLyogVGV4dCBlbmNvZGluZyAqLwotI2lmZGVmIE5PQ1NFVFMKLQlpZiAobWF4 IC0gaSA+PSAzKSB7Ci0JICAgIGRhdGFbaSsrXSA9IGM7Ci0JICAgIGRhdGFbaSsrXSA9IHRvY2hh cigxKTsJLyogTGVuZ3RoIG9mIHZhbHVlIGlzIDEgKi8KLQkgICAgZGF0YVtpKytdID0gJ0EnOwkJ LyogQSBmb3IgQVNDSUkgKi8KLQkgICAgbnVtc2V0Kys7Ci0JICAgIGRvbmVbeHVuY2hhcihjKV0g PSAxOwotCX0gZWxzZQotCSAgbGVmdCsrOwotI2Vsc2UKLQlpZiAodGNoYXJzZXQgPT0gVENfVFJB TlNQIHx8ICF4ZnJ4bGEpIHsJLyogVHJhbnNmZXIgY2hhcmFjdGVyIHNldCAqLwotCSAgICBpZiAo bWF4IC0gaSA+PSAzKSB7Ci0JCWRhdGFbaSsrXSA9IGM7CQkvKiBFbmNvZGluZyAqLwotCQlkYXRh W2krK10gPSB0b2NoYXIoMSk7CS8qIExlbmd0aCBvZiB2YWx1ZSBpcyAxICovCi0JCWRhdGFbaSsr XSA9ICdBJzsJLyogQSBmb3IgQVNDSUkgKGkuZS4gdGV4dCkgKi8KLQkJbnVtc2V0Kys7Ci0JCWRv bmVbeHVuY2hhcihjKV0gPSAxOwotCSAgICB9IGVsc2UKLQkgICAgICBsZWZ0Kys7Ci0JfSBlbHNl IHsKLQkgICAgdHAgPSB0Y3NpbmZvW3RjaGFyc2V0XS5kZXNpZ25hdG9yOwotCSAgICBpZiAoIXRw KSB0cCA9ICIiOwotCSAgICBhbG4gPSBzdHJsZW4odHApOwotCSAgICBpZiAoYWxuID4gMCkgewot CQlpZiAobWF4IC0gaSA+PSBhbG4gKyAyKSB7Ci0JCSAgICBkYXRhW2krK10gPSBjOwkvKiBFbmNv ZGluZyAqLwotCQkgICAgZGF0YVtpKytdID0gdG9jaGFyKGFsbisxKTsgLyogTGVuZ3RoIG9mIGRl c2lnbmF0b3IuICovCi0JCSAgICBkYXRhW2krK10gPSAnQyc7IC8qIFRleHQgaW4gc3BlY2lmaWVk IGNoYXJzZXQuICovCi0JCSAgICBmb3IgKGogPSAwOyBqIDwgYWxuOyBqKyspIC8qIENvcHkgZGVz aWduYXRvciAqLwotCQkgICAgICBkYXRhW2krK10gPSAqdHArKzsgLyogIEV4YW1wbGU6IComSTYv MTAwICovCi0JCSAgICBudW1zZXQrKzsKLQkJICAgIGRvbmVbeHVuY2hhcihjKV0gPSAxOwotCQl9 IGVsc2UKLQkJICBsZWZ0Kys7Ci0JICAgIH0gZWxzZQotCSAgICAgIGRvbmVbeHVuY2hhcihjKV0g PSAxOwotCX0KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0gICAgfQotICAgIGlmIChhdGRhdG8gJiYg IWRvbmVbeHVuY2hhcihjID0gJyMnKV0gJiYgLyogQ3JlYXRpb24gZGF0ZSwgaWYgYW55ICovCi0J KGFsbiA9IHguZGF0ZS5sZW4pID4gMCkgewotCWlmIChtYXggLSBpID49IGFsbiArIDIpIHsKLQkg ICAgZGF0YVtpKytdID0gYzsKLQkgICAgZGF0YVtpKytdID0gdG9jaGFyKGFsbik7Ci0JICAgIGZv ciAoaiA9IDA7IGogPCBhbG47IGorKykKLQkgICAgICBkYXRhW2krK10gPSB4LmRhdGUudmFsW2pd OwotCSAgICBudW1zZXQrKzsKLQkgICAgZG9uZVt4dW5jaGFyKGMpXSA9IDE7Ci0JfSBlbHNlCi0J ICBsZWZ0Kys7Ci0gICAgfQotICAgIC8qIEZpbGUgbGVuZ3RoIGluIEsgKi8KLSAgICBpZiAoYXRs ZW5vICYmICFkb25lW3h1bmNoYXIoYyA9ICchJyldICYmIHgubGVuZ3RoayA+IChDS19PRkZfVCkt MSkgewotI2lmZGVmIENPTU1FTlQKLQlzcHJpbnRmKChjaGFyICopICZkYXRhW2krMl0sIiVsZCIs eC5sZW5ndGhrKTsgLyogc2FmZSAqLwotI2Vsc2UKLQlja3N0cm5jcHkoKGNoYXIgKikmZGF0YVtp KzJdLGNrZnN0b2EoeC5sZW5ndGhrKSwzMik7Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwotCWFsbiA9 IChpbnQpc3RybGVuKChjaGFyICopKGRhdGEraSsyKSk7Ci0JaWYgKG1heCAtIGkgPj0gYWxuICsg MikgewotCSAgICBkYXRhW2ldID0gYzsKLQkgICAgZGF0YVtpKzFdID0gdG9jaGFyKGFsbik7Ci0J ICAgIGkgKz0gYWxuICsgMjsKLQkgICAgbnVtc2V0Kys7Ci0JICAgIGRvbmVbeHVuY2hhcihjKV0g PSAxOwotCX0gZWxzZSB7Ci0JICAgIGRhdGFbaV0gPSBOVUw7Ci0JICAgIGxlZnQrKzsKLQl9Ci0g ICAgfQotICAgIC8qIEZpbGUgbGVuZ3RoIGluIGJ5dGVzICovCi0gICAgaWYgKGF0bGVubyAmJiAh ZG9uZVt4dW5jaGFyKGMgPSAnMScpXSAmJiB4Lmxlbmd0aCA+IChDS19PRkZfVCktMSkgewotI2lm ZGVmIENPTU1FTlQKLQlzcHJpbnRmKChjaGFyICopICZkYXRhW2krMl0sIiVsZCIseC5sZW5ndGgp OyAvKiBzYWZlICovCi0jZWxzZQotCWNrc3RybmNweSgoY2hhciAqKSZkYXRhW2krMl0sY2tmc3Rv YSh4Lmxlbmd0aCksMzIpOwotI2VuZGlmCS8qIENPTU1FTlQgKi8KLQlhbG4gPSAoaW50KXN0cmxl bigoY2hhciAqKShkYXRhK2krMikpOwotCWlmIChtYXggLSBpID49IGFsbiArIDIpIHsKLQkgICAg ZGF0YVtpXSA9IGM7Ci0JICAgIGRhdGFbaSsxXSA9IHRvY2hhcihhbG4pOwotCSAgICBpICs9IGFs biArIDI7Ci0JICAgIG51bXNldCsrOwotCSAgICBkb25lW3h1bmNoYXIoYyldID0gMTsKLQl9IGVs c2UgewotCSAgICBkYXRhW2ldID0gTlVMOwotCSAgICBsZWZ0Kys7Ci0JfQotICAgIH0KLSNpZmRl ZiBDS19QRVJNUwotICAgIGlmIChhdGxwcm8gJiYgIWRvbmVbeHVuY2hhcihjID0gJywnKV0gJiYg LyogTG9jYWwgcHJvdGVjdGlvbiAqLwotCShhbG4gPSB4Lmxwcm90ZWN0LmxlbikgPiAwICYmICFu b3RhZmlsZSAmJiB4cCA9PSAwKSB7Ci0JaWYgKG1heCAtIGkgPj0gYWxuICsgMikgewotCSAgICBk YXRhW2krK10gPSBjOwotCSAgICBkYXRhW2krK10gPSB0b2NoYXIoYWxuKTsKLQkgICAgZm9yIChq ID0gMDsgaiA8IGFsbjsgaisrKQotCSAgICAgIGRhdGFbaSsrXSA9IHgubHByb3RlY3QudmFsW2pd OwotCSAgICBudW1zZXQrKzsKLQkgICAgZG9uZVt4dW5jaGFyKGMpXSA9IDE7Ci0JfSBlbHNlCi0J ICBsZWZ0Kys7Ci0gICAgfQotICAgIGlmIChhdGdwcm8gJiYgIWRvbmVbeHVuY2hhcihjID0gJy0n KV0gJiYgLyogR2VuZXJpYyBwcm90ZWN0aW9uICovCi0JKGFsbiA9IHguZ3Byb3RlY3QubGVuKSA+ IDAgJiYgIW5vdGFmaWxlICYmIHhwID09IDApIHsKLQlpZiAobWF4IC0gaSA+PSBhbG4gKyAyKSB7 Ci0JICAgIGRhdGFbaSsrXSA9IGM7Ci0JICAgIGRhdGFbaSsrXSA9IHRvY2hhcihhbG4pOwotCSAg ICBmb3IgKGogPSAwOyBqIDwgYWxuOyBqKyspCi0JICAgICAgZGF0YVtpKytdID0geC5ncHJvdGVj dC52YWxbal07Ci0JICAgIG51bXNldCsrOwotCSAgICBkb25lW3h1bmNoYXIoYyldID0gMTsKLQl9 IGVsc2UKLQkgIGxlZnQrKzsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfUEVSTVMgKi8KLSAgICBpZiAo YXRibGtvICYmIGZibGtzaXogJiYgIWRvbmVbeHVuY2hhcihjID0gJygnKV0gJiYKLQkhbm90YWZp bGUgJiYgeHAgPT0gMCkgewkvKiBCbG9ja3NpemUgKi8KLQlzcHJpbnRmKChjaGFyICopICZkYXRh W2krMl0sIiVkIixmYmxrc2l6KTsgLyogc2FmZSAqLwotCWFsbiA9IChpbnQpc3RybGVuKChjaGFy ICopKGRhdGEraSsyKSk7Ci0JaWYgKG1heCAtIGkgPj0gYWxuICsgMikgewotCSAgICBkYXRhW2ld ID0gYzsKLQkgICAgZGF0YVtpKzFdID0gdG9jaGFyKGFsbik7Ci0JICAgIGkgKz0gYWxuICsgMjsK LQkgICAgbnVtc2V0Kys7Ci0JICAgIGRvbmVbeHVuY2hhcihjKV0gPSAxOwotCX0gZWxzZSB7Ci0J ICAgIGRhdGFbaV0gPSBOVUw7Ci0JICAgIGxlZnQrKzsKLQl9Ci0gICAgfQotI2lmbmRlZiBOT0ZS SUxMUwotICAgIGlmICgocnByaW50ZiB8fCBybWFpbGYpICYmIGF0ZGlzbyAmJiAvKiBNQUlMLCBv ciBSRU1PVEUgUFJJTlQ/ICAqLwotCSFkb25lW3h1bmNoYXIoYyA9ICcrJyldKSB7Ci0JYWxuID0g KGludCkgc3RybGVuKG9wdGJ1ZikgKyAxOwkvKiBPcHRpb25zLCBpZiBhbnkgKi8KLQlpZiAobWF4 IC0gaSA+PSBhbG4gKyAyKSB7Ci0JICAgIGRhdGFbaSsrXSA9IGM7CQkvKiBEaXNwb3NpdGlvbiAq LwotCSAgICBkYXRhW2krK10gPSB0b2NoYXIoYWxuKTsJLyogT3B0aW9ucywgaWYgYW55ICovCi0J ICAgIGlmIChycHJpbnRmKQotCSAgICAgIGRhdGFbaSsrXSA9ICdQJzsJCS8qIFAgZm9yIFByaW50 ICovCi0JICAgIGVsc2UKLQkgICAgICBkYXRhW2krK10gPSAnTSc7CQkvKiBNIGZvciBNYWlsICov Ci0JICAgIGZvciAoaiA9IDA7IG9wdGJ1ZltqXTsgaisrKQkvKiBDb3B5IGFueSBvcHRpb25zICov Ci0JICAgICAgZGF0YVtpKytdID0gb3B0YnVmW2pdOwotCSAgICBudW1zZXQrKzsKLQkgICAgZG9u ZVt4dW5jaGFyKGMpXSA9IDE7Ci0JfSBlbHNlIHsKLQkgICAgZGF0YVtpXSA9IE5VTDsKLQkgICAg bGVmdCsrOwotCX0KLSAgICB9Ci0jZW5kaWYgLyogTk9GUklMTFMgKi8KLSNpZmRlZiBDS19SRVNF TkQKLSAgICBpZiAoc2VuZG1vZGUgPT0gU01fUkVTRU5EICYmICFkb25lW3h1bmNoYXIoYyA9ICcr JyldKSB7Ci0JaWYgKG1heCAtIGkgPj0gMykgewotCSAgICBkYXRhW2krK10gPSBjOwkJLyogRGlz cG9zaXRpb24gKi8KLQkgICAgZGF0YVtpKytdID0gdG9jaGFyKDEpOwotCSAgICBkYXRhW2krK10g PSAnUic7CQkvKiBpcyBSRVNFTkQgKi8KLQkgICAgbnVtc2V0Kys7Ci0JICAgIGRvbmVbeHVuY2hh cihjKV0gPSAxOwotCX0gZWxzZQotCSAgbGVmdCsrOwotICAgIH0KLSNlbmRpZiAvKiBDS19SRVNF TkQgKi8KLQotICAgIC8qIEVuZCBvZiBBdHRyaWJ1dGVzIC0tIHRvIGJlIHNlbnQgb25seSBhZnRl ciBzZW5kaW5nIGFsbCBvdGhlcnMgKi8KLQotICAgIGRlYnVnKEYxMTEsInNhdHRyIiwiQCIsaSk7 Ci0gICAgZGVidWcoRjEwMSwic2F0dHIgbnVtc2V0IiwiIixudW1zZXQpOwotICAgIGRlYnVnKEYx MDEsInNhdHRyIGxlZnQiLCIiLGxlZnQpOwotCi0gICAgaWYgKChsZWZ0ID09IDAgfHwgbnVtc2V0 ID09IDApICYmICFkb25lW3h1bmNoYXIoYyA9ICdAJyldKSB7Ci0JaWYgKG1heCAtIGkgPj0gMykg ewotCSAgICBkYXRhW2krK10gPSBjOwkJLyogRW5kIG9mIEF0dHJpYnV0ZXMgKi8KLQkgICAgZGF0 YVtpKytdID0gU1A7CQkvKiBMZW5ndGggMCAqLwotCSAgICBkYXRhW2ldID0gTlVMOwkJLyogTWFr ZSBzdXJlIGl0J3MgbnVsbC10ZXJtaW5hdGVkICovCi0JICAgIG51bXNldCsrOwotCSAgICBkb25l W3h1bmNoYXIoYyldID0gMTsKLQl9Ci0gICAgfQotCi0gICAgLyogRmluaXNoZWQgLSBzZW5kIHRo ZSBwYWNrZXQgb2ZmIGlmIHdlIGhhdmUgYW55dGhpbmcgaW4gaXQgKi8KLQotICAgIGlmIChudW1z ZXQpIHsKLQlkYXRhW2ldID0gTlVMOwkJCS8qIFRlcm1pbmF0ZSBsYXN0IGdvb2QgZmllbGQgKi8K LQlkZWJ1ZyhGMTExLCJzYXR0ciBzZW5kaW5nIixkYXRhLGxlZnQpOwotCWFsbiA9IChpbnQpc3Ry bGVuKChjaGFyICopZGF0YSk7IC8qIEdldCBvdmVyYWxsIGxlbmd0aCBvZiBhdHRyaWJ1dGVzICov Ci0JcmV0dXJuKHNwYWNrKCdBJyxwa3RudW0sYWxuLGRhdGEpKTsgLyogU2VuZCBpdCAqLwotICAg IH0gZWxzZQotICAgICAgcmV0dXJuKDApOwotfQotCi1zdGF0aWMgY2hhciAqcmVmdXNlZCA9ICIi OwotCi1zdGF0aWMgY2hhciAqcmVhc29uW10gPSB7Ci0gICAgInNpemUiLCAidHlwZSIsICJkYXRl IiwgImNyZWF0b3IiLCAiYWNjb3VudCIsICJhcmVhIiwgInBhc3N3b3JkIiwKLSAgICAiYmxvY2tz aXplIiwgImFjY2VzcyIsICJlbmNvZGluZyIsICJkaXNwb3NpdGlvbiIsICJwcm90ZWN0aW9uIiwK LSAgICAicHJvdGVjdGlvbiIsICJvcmlnaW4iLCAiZm9ybWF0IiwKLSAgICAic3lzLWRlcGVuZGVu dCIsCQkJLyogMCAqLwotICAgICJzaXplIiwJCQkJLyogMSAqLwotICAgICIyIiwJCQkJLyogMiAq LwotICAgICIzIiwJCQkJLyogMyAqLwotICAgICI0IiwJCQkJLyogNCAqLwotICAgICI1IiwJCQkJ LyogNSAqLwotICAgICI2IiwJCQkJLyogNiAqLwotICAgICI3IiwJCQkJLyogNyAqLwotICAgICI4 IiwJCQkJLyogOCAqLwotICAgICI5IiwJCQkJLyogOSAqLwotICAgICI6IiwJCQkJLyogOiAqLwot ICAgICI7IiwJCQkJLyogOyAqLwotICAgICI8IiwJCQkJLyogPCAqLwotICAgICI9IiwJCQkJLyog PSAqLwotICAgICI+IiwJCQkJLyogPiAqLwotICAgICJuYW1lIiwJCQkJLyogPyAqLwotICAgICJA IgotfTsKLXN0YXRpYyBpbnQgbnJlYXNvbiA9IHNpemVvZihyZWFzb24pIC8gc2l6ZW9mKGNoYXIg Kik7Ci1pbnQgcmVqZWN0aW9uID0gLTE7Ci0KLWNoYXIgKgotZ2V0cmVhc29uKHMpIGNoYXIgKnM7 IHsJCQkvKiBEZWNvZGUgYXR0cmlidXRlIHJlZnVzYWwgcmVhc29uICovCi0gICAgY2hhciBjLCAq cDsKLSAgICBpZiAocmVqZWN0aW9uID09IDEpCQkJLyogS2x1ZGdlIGZvciBTRVQgRklMIENPTEwg RElTQ0FSRCAqLwotICAgICAgcmV0dXJuKCJuYW1lIik7CQkJLyogd2hlbiBvdGhlciBLZXJtaXQg ZG9lc24ndC4uLiAqLwotICAgIHAgPSBzOwotICAgIGlmICgqcCsrICE9ICdOJykgcmV0dXJuKCIi KTsJLyogU2hvdWxkIHN0YXJ0IHdpdGggTiAqLwotICAgIGVsc2UgaWYgKChjID0gKnApID4gU1Ap IHsJCS8qIGdldCByZWFzb24sICovCi0JcmVqZWN0aW9uID0gYzsJCQkvKiByZW1lbWJlciBpdCwg Ki8KLQljIC09ICchJzsJCQkvKiBnZXQgb2Zmc2V0ICovCi0JcCA9ICgodW5zaWduZWQgaW50KSAo KENIQVIpIGMpIDw9ICh1bnNpZ25lZCBpbnQpIG5yZWFzb24pID8KLQkgIHJlYXNvbltjXSA6Ci0J ICAgICJ1bmtub3duIjsKLSAgICB9Ci0gICAgcmV0dXJuKHApOwotfQotCi1pbnQKLXJzYXR0cihz KSBDSEFSICpzOyB7CQkJLyogUmVhZCByZXNwb25zZSB0byBhdHRyaWJ1dGUgcGFja2V0ICovCi0g ICAgZGVidWcoRjExMSwicnNhdHRyIixzLCpzKTsKLSAgICBpZiAoKnMgPT0gJ04nKSB7CQkJLyog SWYgaXQncyAnTicgZm9sbG93ZWQgYnkgYW55dGhpbmcsICovCi0JcmVmdXNlZCA9IGdldHJlYXNv bigoY2hhciAqKXMpOwkvKiB0aGV5IGFyZSByZWZ1c2luZywgZ2V0IHJlYXNvbi4gKi8KLQlkZWJ1 ZyhGMTEwLCJyc2F0dHIgcmVmdXNlZCIscmVmdXNlZCwwKTsKLQl0bG9nKEYxMTAsIiByZWZ1c2Vk OiIscmVmdXNlZCwwTCk7Ci0JcmV0dXJuKC0xKTsKLSAgICB9Ci0jaWZkZWYgQ0tfUkVTRU5ECi0g ICAgaWYgKHNlbmRtb2RlID09IFNNX1JFU0VORCAmJiAqcyA9PSAnMScpIHsgLyogUkVTRU5EIGxl bmd0aCAqLwotCWludCBuOyBDS19PRkZfVCB6OyBDSEFSICpwOwotCXAgPSBzICsgMTsKLQluID0g eHVuY2hhcigqcCsrKTsKLQlkZWJ1ZyhGMTAxLCJyc2F0dHIgUkVTRU5EIG4iLCIiLG4pOwotCXog PSAoQ0tfT0ZGX1QpMDsKLQl3aGlsZSAobi0tID4gMCkJCQkvKiBXZSBhc3N1bWUgdGhlIGZvcm1h dCBpcyBnb29kLiAqLwotCSAgeiA9IChDS19PRkZfVCkxMCAqIHogKyAoQ0tfT0ZGX1QpKCpwKysg LSAnMCcpOwotCWRlYnVnKEYxMDEsInJzYXR0ciBSRVNFTkQgeiIsIiIseik7Ci0JaWYgKHogPiAo Q0tfT0ZGX1QpMCkgc2VuZHN0YXJ0ID0gejsKLQlkZWJ1ZyhGMTAxLCJyc2F0dHIgUkVTRU5EIHNl bmRzdGFydCIsIiIsc2VuZHN0YXJ0KTsKLQlpZiAoc2VuZHN0YXJ0ID4gKENLX09GRl9UKTApCi0J ICBpZiAoemZzZWVrKHNlbmRzdGFydCkgPCAwKQkvKiBJbnB1dCBmaWxlIGlzIGFscmVhZHkgb3Bl bi4gKi8KLQkgICAgcmV0dXJuKDApOwotI2lmZGVmIENLX0NVUlNFUwotCWlmIChmZGlzcGxhID09 IFhZRkRfQykKLQkgIHh4c2NyZWVuKFNDUl9GUywwLGZzaXplLCIiKTsJLyogUmVmcmVzaCBmaWxl IHRyYW5zZmVyIGRpc3BsYXkgKi8KLSNlbmRpZiAvKiBDS19DVVJTRVMgKi8KLSAgICB9Ci0jZW5k aWYgLyogQ0tfUkVTRU5EICovCi0gICAgcmVmdXNlZCA9ICIiOwotICAgIHJldHVybigwKTsKLX0K LQotLyoKLSAgR2V0IGF0dHJpYnV0ZXMgZnJvbSBpbmNvbWluZyBBIHBhY2tldC4gIFJldHVybnM6 Ci0gICAwIG9uIHN1Y2Nlc3MsIGZpbGUgaXMgdG8gYmUgYWNjZXB0ZWQKLSAgLTEgb24gZmFpbHVy ZSwgZmlsZSBpcyB0byBiZSByZWZ1c2VkCi0qLwotaW50Ci1nYXR0cihzLCB5eSkgQ0hBUiAqczsg c3RydWN0IHphdHRyICp5eTsgeyAvKiBSZWFkIGluY29taW5nIGF0dHJpYnV0ZSBwYWNrZXQgKi8K LSAgICBjaGFyIGMsIGQ7Ci0gICAgY2hhciAqZmY7Ci0gICAgaW50IGFsbiwgaSwgb3ZlcmZsb3cg PSAwOwotCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICBleHRlcm4gaW50IHJfY3NldCwgYXhjc2V0W107 Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi0jZGVmaW5lIEFCVUZMIDQwCQkJLyogVGVtcG9yYXJ5 IGJ1ZmZlciBmb3IgY29udmVyc2lvbnMgKi8KLSAgICBjaGFyIGFidWZbQUJVRkwrMV07Ci0jZGVm aW5lIFJGQlVGTCAxMAkJCS8qIFJlY29yZC1mb3JtYXQgYnVmZmVyICovCi0gICAgc3RhdGljIGNo YXIgcmZidWZbUkZCVUZMKzFdOwotI2RlZmluZSBGVEJVRkwgMTAJCQkvKiBGaWxlIHR5cGUgYnVm ZmVyICovCi0gICAgc3RhdGljIGNoYXIgZnRidWZbRlRCVUZMKzFdOwotI2RlZmluZSBEVEJVRkwg NDAJCQkvKiBGaWxlIGNyZWF0aW9uIGRhdGUgKi8KLSAgICBzdGF0aWMgY2hhciBkdGJ1ZltEVEJV RkwrMV07Ci0jZGVmaW5lIFRTQlVGTCAxMAkJCS8qIFRyYW5zZmVyIHN5bnRheCAqLwotICAgIHN0 YXRpYyBjaGFyIHRzYnVmW1RTQlVGTCsxXTsKLSNkZWZpbmUgSURCVUZMIDEwCQkJLyogU3lzdGVt IElEICovCi0gICAgc3RhdGljIGNoYXIgaWRidWZbSURCVUZMKzFdOwotI2lmbmRlZiBEWU5BTUlD Ci0jZGVmaW5lIERTQlVGTCAxMDAJCQkvKiBEaXNwb3NpdGlvbiAqLwotICAgIHN0YXRpYyBjaGFy IGRzYnVmW0RTQlVGTCsxXTsKLSNkZWZpbmUgU1BCVUZMIDUxMgkJCS8qIFN5c3RlbS1kZXBlbmRl bnQgcGFyYW1ldGVycyAqLwotICAgIHN0YXRpYyBjaGFyIHNwYnVmW1NQQlVGTCsxXTsKLSNlbHNl Ci0jZGVmaW5lIERTQlVGTCAxMDAJCQkvKiBEaXNwb3NpdGlvbiAqLwotICAgIHN0YXRpYyBjaGFy ICpkc2J1ZiA9IE5VTEw7Ci0jZGVmaW5lIFNQQlVGTCA1MTIJCQkvKiBTeXN0ZW0tZGVwZW5kZW50 IHBhcmFtZXRlcnMgKi8KLSAgICBzdGF0aWMgY2hhciAqc3BidWYgPSBOVUxMOwotI2VuZGlmIC8q IERZTkFNSUMgKi8KLSNkZWZpbmUgUlBCVUZMIDIwCQkJLyogQXR0cmlidXRlIHJlcGx5ICovCi0g ICAgc3RhdGljIGNoYXIgcnBidWZbUlBCVUZMKzFdOwotCi0jaWZkZWYgQ0tfUEVSTVMKLSAgICBz dGF0aWMgY2hhciBscHJtYnVmW0NLX1BFUk1MRU4rMV07Ci0gICAgc3RhdGljIGNoYXIgZ3BybWJ1 ZlsyXTsKLSNlbmRpZiAvKiBDS19QRVJNUyAqLwotCi0gICAgY2hhciAqcnA7CQkJCS8qIFBvaW50 ZXIgdG8gcmVwbHkgYnVmZmVyICovCi0gICAgaW50IHJldGNvZGU7CQkJLyogUmV0dXJuIGNvZGUg Ki8KLQotICAgIGQgPSBTUDsJCQkJLyogSW5pdGlhbGl6ZSBkaXNwb3NpdGlvbiAqLwotICAgIGZm ID0gZmlsbmFtOwkJCS8qIEZpbGVuYW1lIHJldHVybmVkIGJ5IHJjdmZpbCAqLwotICAgIGlmIChm bmNhY3QgPT0gWFlGWF9SICYmIG9mbjF4ICYmIG9mbjFbMF0pIC8qIEJ1dCB3YXRjaCBvdXQgZm9y IEZDPVJFTkFNRSAqLwotICAgICAgZmYgPSBvZm4xOwkJCS8qIGJlY2F1c2Ugd2UgaGF2ZW4ndCBy ZW5hbWVkIGl0IHlldCAqLwotCi0vKiBGaWxsIGluIHRoZSBhdHRyaWJ1dGVzIHdlIGhhdmUgcmVj ZWl2ZWQgKi8KLQotICAgIHJwID0gcnBidWY7CQkJCS8qIEluaXRpYWxpemUgcmVwbHkgYnVmZmVy ICovCi0gICAgKnJwKysgPSAnTic7CQkJLyogZm9yIG5lZ2F0aXZlIHJlcGx5LiAqLwotICAgICpy cCA9IE5VTDsKLSAgICByZXRjb2RlID0gMDsJCQkvKiBJbml0aWFsaXplIHJldHVybiBjb2RlLiAq LwotCi0gICAgaWYgKGRlc3QgPT0gREVTVF9QKSB7CQkvKiBTRVQgREVTVElOQVRJT04gUFJJTlRF UiAqLwotI2lmZGVmIERZTkFNSUMKLQlpZiAoIWRzYnVmKQotCSAgaWYgKChkc2J1ZiA9IG1hbGxv YyhEU0JVRkwrMSkpID09IE5VTEwpCi0JICAgIGZhdGFsKCJndGF0dHI6IG5vIG1lbW9yeSBmb3Ig ZHNidWYiKTsKLSNlbmRpZiAvKiBEWU5BTUlDICovCi0JZHNidWZbMF0gPSAnUCc7Ci0JZHNidWZb MV0gPSAnXDAnOwotCXl5LT5kaXNwLnZhbCA9IGRzYnVmOwotCXl5LT5kaXNwLmxlbiA9IDE7Ci0g ICAgfQotICAgIHdoaWxlIChjID0gKnMrKykgewkJCS8qIEdldCBhdHRyaWJ1dGUgdGFnICovCi0J YWxuID0geHVuY2hhcigqcysrKTsJCS8qIExlbmd0aCBvZiBhdHRyaWJ1dGUgc3RyaW5nICovCi0J c3dpdGNoIChjKSB7Ci0jaWZkZWYgQ09NTUVOVAkJCQkvKiBUaGlzIGNhc2UgY29tYmluZWQgd2l0 aCAnMScgYmVsb3cgKi8KLQkgIGNhc2UgJyEnOgkJCS8qIEZpbGUgbGVuZ3RoIGluIEsgKi8KLQkg ICAgZm9yIChpID0gMDsgKGkgPCBhbG4pICYmIChpIDwgQUJVRkwpOyBpKyspIC8qIENvcHkgaXQg Ki8KLQkgICAgICBhYnVmW2ldID0gKnMrKzsKLQkgICAgYWJ1ZltpXSA9ICdcMCc7CQkvKiBUZXJt aW5hdGUgd2l0aCBudWxsICovCi0JICAgIGlmIChpIDwgYWxuKSBzICs9IChhbG4gLSBpKTsgLyog SWYgZmllbGQgd2FzIHRvbyBsb25nIGZvciBidWZmZXIgKi8KLQkgICAgeXktPmxlbmd0aGsgPSBj a2F0b2ZzKGFidWYpOyAvKiBDb252ZXJ0IHRvIG51bWJlciAqLwotCSAgICBicmVhazsKLSNlbmRp ZgkvKiBDT01NRU5UICovCi0KLQkgIGNhc2UgJy8nOgkJCS8qIFJlY29yZCBmb3JtYXQgKi8KLQkg ICAgcmZidWZbMV0gPSBOVUw7Ci0JICAgIHJmYnVmWzJdID0gTlVMOwotCSAgICBmb3IgKGkgPSAw OyAoaSA8IGFsbikgJiYgKGkgPCBSRkJVRkwpOyBpKyspIC8qIENvcHkgaXQgKi8KLQkgICAgICBy ZmJ1ZltpXSA9ICpzKys7Ci0JICAgIHJmYnVmW2ldID0gTlVMOwkJLyogVGVybWluYXRlIHdpdGgg bnVsbCAqLwotCSAgICB5eS0+cmVjZm0udmFsID0gcmZidWY7CS8qIFBvaW50ZXIgdG8gc3RyaW5n ICovCi0JICAgIHl5LT5yZWNmbS5sZW4gPSBpOwkJLyogTGVuZ3RoIG9mIHN0cmluZyAqLwotCSAg ICBpZiAoKHJmYnVmWzBdICE9ICdBJykgfHwKLQkJKHJmYnVmWzFdICYmIHJmYnVmWzFdICE9ICdN JykgfHwKLQkJKHJmYnVmWzJdICYmIHJmYnVmWzJdICE9ICdKJykpIHsKLQkJZGVidWcoRjExMCwi Z2F0dHIgYmFkIHJlY2ZtIixyZmJ1ZiwwKTsKLQkJKnJwKysgPSBjOwotCQlyZXRjb2RlID0gLTE7 Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0KLQkgIGNhc2UgJyInOgkJCS8qIEZpbGUgdHlwZSAodGV4 dCwgYmluYXJ5LCAuLi4pICovCi0JICAgIGZvciAoaSA9IDA7IChpIDwgYWxuKSAmJiAoaSA8IEZU QlVGTCk7IGkrKykKLQkgICAgICBmdGJ1ZltpXSA9ICpzKys7CQkvKiBDb3B5IGl0IGludG8gYSBz dGF0aWMgc3RyaW5nICovCi0JICAgIGZ0YnVmW2ldID0gJ1wwJzsKLQkgICAgaWYgKGkgPCBhbG4p IHMgKz0gKGFsbiAtIGkpOwotCSAgICAvKiBUWVBFIGF0dHJpYnV0ZSBpcyBlbmFibGVkPyAqLwot CSAgICBpZiAoYXR0eXBpKSB7Ci0JCXl5LT50eXBlLnZhbCA9IGZ0YnVmOwkvKiBQb2ludGVyIHRv IHN0cmluZyAqLwotCQl5eS0+dHlwZS5sZW4gPSBpOwkvKiBMZW5ndGggb2Ygc3RyaW5nICovCi0J CWRlYnVnKEYxMTEsImdhdHRyIGZpbGUgdHlwZSIsIGZ0YnVmLCBpKTsKLQkJZGVidWcoRjEwMSwi Z2F0dHIgYmluYXJ5IDEiLCIiLGJpbmFyeSk7Ci0JCS8qIFVua25vd24gdHlwZT8gKi8KLQkJaWYg KCgqZnRidWYgIT0gJ0EnICYmICpmdGJ1ZiAhPSAnQicgJiYgKmZ0YnVmICE9ICdJJykKLSNpZmRl ZiBDS19MQUJFTEVECi0vKiAuLi4gT3Igb3VyIEZJTEUgVFlQRSBpcyBMQUJFTEVEIGFuZCB0aGUg aW5jb21pbmcgZmlsZSBpcyB0ZXh0Li4uICovCi0JCSAgICB8fCAoYmluYXJ5ID09IFhZRlRfTCAm JiAqZnRidWYgPT0gJ0EnICYmICF4ZmxnKQotI2VuZGlmIC8qIENLX0xBQkVMRUQgKi8KLQkJICAg ICkgewotCQkgICAgcmV0Y29kZSA9IC0xOwkvKiBSZWplY3QgdGhlIGZpbGUgKi8KLQkJICAgICpy cCsrID0gYzsKLQkJICAgIGlmICghb3BuZXJyKSB0bG9nKEYxMDAsIiByZWZ1c2VkOiB0eXBlIiwi IiwwKTsKLQkJICAgIGJyZWFrOwotCQl9Ci0vKgotICBUaGUgZm9sbG93aW5nIGNvZGUgbW92ZWQg aGVyZSBmcm9tIG9wZW5hKCkgc28gd2Ugc2V0IGJpbmFyeSBtb2RlCi0gIGFzIHNvb24gYXMgcmVx dWVzdGVkIGJ5IHRoZSBhdHRyaWJ1dGUgcGFja2V0LiAgVGhhdCB3YXkgd2hlbiB0aGUgZmlyc3QK LSAgZGF0YSBwYWNrZXQgY29tZXMsIHRoZSBtb2RlIG9mIHRyYW5zZmVyIGNhbiBiZSBkaXNwbGF5 ZWQgY29ycmVjdGx5Ci0gIGJlZm9yZSBvcGVuYSgpIGlzIGNhbGxlZC4KLSovCi0JCWlmICh5eS0+ dHlwZS52YWxbMF0gPT0gJ0EnKSB7IC8qIENoZWNrIHJlY2VpdmVkIGF0dHJpYnV0ZXMuICovCi0j aWZkZWYgVk1TCi0JCSAgICBpZiAoYmluYXJ5ICE9IFhZRlRfSSkgLyogVk1TIElNQUdFIG92ZXJy aWRlcyB0aGlzICovCi0jZW5kaWYgLyogVk1TICovCi0JCSAgICAgIGJpbmFyeSA9IFhZRlRfVDsJ LyogU2V0IGN1cnJlbnQgdHlwZSB0byBUZXh0LiAqLwotCQkgICAgZGVidWcoRjEwMSwiZ2F0dHIg YmluYXJ5IDIiLCIiLGJpbmFyeSk7Ci0JCX0gZWxzZSBpZiAoeXktPnR5cGUudmFsWzBdID09ICdC JykgewotI2lmZGVmIENLX0xBQkVMRUQKLQkJICAgIGlmIChiaW5hcnkgIT0gWFlGVF9MCi0jaWZk ZWYgVk1TCi0JCQkmJiBiaW5hcnkgIT0gWFlGVF9VIC8qIFZNUyBzcGVjaWFsIGNhc2UgKi8KLSNl bmRpZiAvKiBWTVMgKi8KLQkJCSkKLSNlbmRpZiAvKiBDS19MQUJFTEVEICovCi0jaWZkZWYgTUFD Ci0JCSAgICBpZiAoYmluYXJ5ICE9IFhZRlRfTSkgLyogSWYgbm90IE1hY0JpbmFyeS4uLiAqLwot I2VuZGlmIC8qIE1BQyAqLwotCQkgICAgICBiaW5hcnkgPSBYWUZUX0I7Ci0JCSAgICBkZWJ1ZyhG MTAxLCJnYXR0ciBiaW5hcnkgMyIsIiIsYmluYXJ5KTsKLQkJfQotCSAgICB9Ci0JICAgIGJyZWFr OwotCi0JICBjYXNlICcjJzoJCQkvKiBGaWxlIGNyZWF0aW9uIGRhdGUgKi8KLQkgICAgZm9yIChp ID0gMDsgKGkgPCBhbG4pICYmIChpIDwgRFRCVUZMKTsgaSsrKQotCSAgICAgIGR0YnVmW2ldID0g KnMrKzsJCS8qIENvcHkgaXQgaW50byBhIHN0YXRpYyBzdHJpbmcgKi8KLQkgICAgaWYgKGkgPCBh bG4pIHMgKz0gKGFsbiAtIGkpOwotCSAgICBkdGJ1ZltpXSA9ICdcMCc7Ci0JICAgIGlmIChhdGRh dGkgJiYgIXhmbGcpIHsJLyogUmVhbCBmaWxlIGFuZCBkYXRlcyBlbmFibGVkICovCi0JCXl5LT5k YXRlLnZhbCA9IGR0YnVmOwkvKiBQb2ludGVyIHRvIHN0cmluZyAqLwotCQl5eS0+ZGF0ZS5sZW4g PSBpOwkvKiBMZW5ndGggb2Ygc3RyaW5nICovCi0JCWlmIChmbmNhY3QgPT0gWFlGWF9VKSB7CS8q IFJlY2VpdmluZyBpbiB1cGRhdGUgbW9kZT8gKi8KLQkJICAgIGlmICh6c3RpbWUoZmYseXksMSkg PiAwKSB7IC8qIENvbXBhcmUgZGF0ZXMgKi8KLQkJCSpycCsrID0gYzsJLyogRGlzY2FyZCBpZiBv bGRlciwgcmVhc29uID0gZGF0ZS4gKi8KLQkJCWlmICghb3BuZXJyKSB0bG9nKEYxMDAsIiByZWZ1 c2VkOiBkYXRlIiwiIiwwKTsKLQkJCXJldGNvZGUgPSAtMTsJLyogUmVqZWN0aW9uIG5vdGljZS4g Ki8KLQkJICAgIH0KLQkJfQotCSAgICB9Ci0JICAgIGJyZWFrOwotCi0JICBjYXNlICcoJzoJCQkv KiBGaWxlIEJsb2NrIFNpemUgKi8KLQkgICAgZm9yIChpID0gMDsgKGkgPCBhbG4pICYmIChpIDwg QUJVRkwpOyBpKyspIC8qIENvcHkgaXQgKi8KLQkgICAgICBhYnVmW2ldID0gKnMrKzsKLQkgICAg YWJ1ZltpXSA9ICdcMCc7CQkvKiBUZXJtaW5hdGUgd2l0aCBudWxsICovCi0JICAgIGlmIChpIDwg YWxuKSBzICs9IChhbG4gLSBpKTsKLQkgICAgaWYgKGF0YmxraSkKLQkgICAgICB5eS0+Ymxrc2l6 ZSA9IGF0b2woYWJ1Zik7IC8qIENvbnZlcnQgdG8gbnVtYmVyICovCi0JICAgIGJyZWFrOwotCi0J ICBjYXNlICcqJzoJCQkvKiBFbmNvZGluZyAodHJhbnNmZXIgc3ludGF4KSAqLwotCSAgICBmb3Ig KGkgPSAwOyAoaSA8IGFsbikgJiYgKGkgPCBUU0JVRkwpOyBpKyspCi0JICAgICAgdHNidWZbaV0g PSAqcysrOwkJLyogQ29weSBpdCBpbnRvIGEgc3RhdGljIHN0cmluZyAqLwotCSAgICBpZiAoaSA8 IGFsbikgcyArPSAoYWxuIC0gaSk7Ci0JICAgIHRzYnVmW2ldID0gJ1wwJzsKLSNpZm5kZWYgTk9D U0VUUwotCSAgICB4bGF0eXBlID0gWExBX05PTkU7CQkvKiBBc3N1bWUgbm8gdHJhbnNsYXRpb24g Ki8KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0JICAgIGlmIChhdGVuY2kpIHsKLQkJY2hhciAqIHNz OwotCQl5eS0+ZW5jb2RpbmcudmFsID0gdHNidWY7IC8qIFBvaW50ZXIgdG8gc3RyaW5nICovCi0J CXl5LT5lbmNvZGluZy5sZW4gPSBpOwkvKiBMZW5ndGggb2Ygc3RyaW5nICovCi0JCWRlYnVnKEYx MDEsImdhdHRyIGVuY29kaW5nIix0c2J1ZixpKTsKLQkJc3MgPSB0c2J1ZisxOwotCQlzd2l0Y2gg KCp0c2J1ZikgewotI2lmbmRlZiBOT0NTRVRTCi0JCSAgY2FzZSAnQSc6CQkgIC8qIE5vcm1hbCwg bm90aGluZyBzcGVjaWFsICovCi0JCSAgICB0Y2hhcnNldCA9IFRDX1RSQU5TUDsgLyogVHJhbnNw YXJlbnQgY2hhcnMgdW50cmFuc2xhdGVkICovCi0JCSAgICBkZWJ1ZyhGMTEwLCJnYXR0ciBzZXRz IHRjaGFyc2V0IFRDX1RSQU5TUCIsIkEiLDApOwotCQkgICAgYnJlYWs7Ci0JCSAgY2FzZSAnQyc6 CQkgIC8qIFNwZWNpZmllZCBjaGFyYWN0ZXIgc2V0ICovCi0JCSAgICBpZiAoIXhmcnhsYSkgewkg IC8qIEJ1dCB0cmFuc2xhdGlvbiBkaXNhYmxlZCAqLwotCQkJdGNoYXJzZXQgPSBUQ19UUkFOU1A7 Ci0JCQlkZWJ1ZyhGMTEwLCJnYXR0ciBzZXRzIHRjaGFyc2V0IFRDX1RSQU5TUCIsIkMiLDApOwot CQkJYnJlYWs7Ci0JCSAgICB9Ci0jaWZkZWYgVU5JQ09ERQotCQkgICAgaWYgKCFzdHJjbXAoIkkx OTYiLHNzKSkgLyogVHJlYXQgSTE5NiAoVVRGLTggbm8gbGV2ZWwpICovCi0JCSAgICAgIHNzID0g IkkxOTAiOwkgICAgLyogYXMgSTE5MCAoVVRGLTggTGV2ZWwgMSkgKi8KLSNlbmRpZiAvKiBVTklD T0RFICovCi0JCSAgICBpZiAoIXN0cmNtcCgiSTYvMjA0IixzcykpIC8qIFRyZWF0ICJMYXRpbi0x ICsgRXVybyIgKi8KLQkJICAgICAgc3MgPSAiSTYvMTAwIjsJICAgICAgLyogYXMgSTYvMTAwIChy ZWd1bGFyIExhdGluLTEpICovCi0JCSAgICBmb3IgKGkgPSAwOyBpIDwgbnRjc2V0czsgaSsrKSB7 Ci0JCQlpZiAoIXN0cmNtcCh0Y3NpbmZvW2ldLmRlc2lnbmF0b3Isc3MpKQotCQkJICBicmVhazsK LQkJICAgIH0KLQkJICAgIGRlYnVnKEYxMDEsImdhdHRyIHhmZXIgY2hhcnNldCBsb29rdXAiLCIi LGkpOwotCQkgICAgaWYgKGkgPT0gbnRjc2V0cykgewkvKiBJZiB1bmtub3duIGNoYXJhY3RlciBz ZXQsICovCi0JCQlkZWJ1ZyhGMTEwLCJnYXR0cjogeGZlciBjaGFyc2V0IHVua25vd24iLHNzLDAp OwotCQkJaWYgKCF1bmtjcykgewkvKiBhbmQgU0VUIFVOS05PV04gRElTQ0FSRCwgKi8KLQkJCSAg ICByZXRjb2RlID0gLTE7IC8qIHJlamVjdCB0aGUgZmlsZS4gKi8KLQkJCSAgICAqcnArKyA9IGM7 Ci0JCQkgICAgaWYgKCFvcG5lcnIpCi0JCQkgICAgICB0bG9nKEYxMDAsIiByZWZ1c2VkOiBjaGFy YWN0ZXIgc2V0IiwiIiwwKTsKLQkJCX0KLQkJICAgIH0gZWxzZSB7Ci0JCQl0Y2hhcnNldCA9IHRj c2luZm9baV0uY29kZTsgLyogaXQncyBrbm93biwgdXNlIGl0ICovCi0JCQlkZWJ1ZyhGMTAxLCJn YXR0ciBzd2l0Y2ggdGNoYXJzZXQiLCIiLHRjaGFyc2V0KTsKLQkJCWRlYnVnKEYxMDEsImdhdHRy IGZjaGFyc2V0IiwiIixmY2hhcnNldCk7Ci0JCQlpZiAocl9jc2V0ID09IFhNT0RFX0EpIHsgLyog QXV0b21hdGljIHN3aXRjaGluZz8gKi8KLQkJCSAgICBpZiAodGNoYXJzZXQgPiAtMSAmJiB0Y2hh cnNldCA8PSBNQVhUQ1NFVFMpIHsKLQkJCQlpbnQgeDsKLQkJCQl4ID0gYXhjc2V0W3RjaGFyc2V0 XTsKLQkJCQlpZiAoeCA+IDAgJiYgeCA8PSBNQVhGQ1NFVFMpIHsKLQkJCQkgICAgZmNoYXJzZXQg PSB4OwotCQkJCSAgICBkZWJ1ZyhGMTAxLCJnYXR0ciBzd2l0Y2ggZmNoYXJzZXQiLCIiLHgpOwot CQkJCX0KLQkJCSAgICB9Ci0JCQl9Ci0JCQkvKiBTZXQgdXAgdHJhbnNsYXRpb24gdHlwZSBhbmQg ZnVuY3Rpb24gKi8KLQkJCXNldHhsYXR5cGUodGNoYXJzZXQsZmNoYXJzZXQpOwotCQkgICAgfQot CQlicmVhazsKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0JICAgICAgZGVmYXVsdDoJCQkvKiBTb21l dGhpbmcgZWxzZS4gKi8KLQkJZGVidWcoRjExMCwiZ2F0dHIgdW5rIGVuY29kaW5nIGF0dHJpYnV0 ZSIsdHNidWYsMCk7Ci0JCWlmICghdW5rY3MpIHsJCS8qIElmIFNFVCBVTksgRElTQyAqLwotCQkg ICAgcmV0Y29kZSA9IC0xOwotCQkgICAgKnJwKysgPSBjOwotCQkgICAgaWYgKCFvcG5lcnIpIHRs b2coRjEwMCwiIHJlZnVzZWQ6IGVuY29kaW5nIiwiIiwwKTsKLQkJfQotCQlicmVhazsKLQkJfQot CSAgICB9Ci0JICAgIGJyZWFrOwotCi0JICBjYXNlICcrJzoJCQkvKiBEaXNwb3NpdGlvbiAqLwot I2lmZGVmIERZTkFNSUMKLQkgICAgaWYgKCFkc2J1ZikKLQkgICAgICBpZiAoKGRzYnVmID0gbWFs bG9jKERTQlVGTCsxKSkgPT0gTlVMTCkKLQkJZmF0YWwoImd0YXR0cjogbm8gbWVtb3J5IGZvciBk c2J1ZiIpOwotI2VuZGlmIC8qIERZTkFNSUMgKi8KLQkgICAgZm9yIChpID0gMDsgKGkgPCBhbG4p ICYmIChpIDwgRFNCVUZMKTsgaSsrKQotCSAgICAgIGRzYnVmW2ldID0gKnMrKzsJCS8qIENvcHkg aXQgaW50byBhIHNlcGFyYXRlIHN0cmluZyAqLwotCSAgICBkc2J1ZltpXSA9ICdcMCc7Ci0JICAg IGlmIChpIDwgYWxuKSBzICs9IChhbG4gLSBpKTsKLQkgICAgcnNfbGVuID0gKENLX09GRl9UKTA7 Ci0JICAgIGlmIChhdGRpc2kpIHsJCS8qIFdlIGFyZSBkb2luZyB0aGlzIGF0dHJpYnV0ZSAqLwot CQkvKiBDb3B5IGl0IGludG8gdGhlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUgKi8KLQkJeXktPmRpc3Au dmFsID0gZHNidWY7CS8qIFBvaW50ZXIgdG8gc3RyaW5nICovCi0JCXl5LT5kaXNwLmxlbiA9IGk7 CS8qIExlbmd0aCBvZiBzdHJpbmcgKi8KLQkJZCA9ICpkc2J1ZjsKLSNpZm5kZWYgTk9ESVNQTwot LyoKLSAgRGVmaW5lIE5PRElTUE8gdG8gZGlzYWJsZSByZWNlaXB0IG9mIG1haWwgb3IgcHJpbnQg ZmlsZXMgYW5kIG9mIFJFU0VORC4KLSovCi0JCWlmICgKLSNpZm5kZWYgZGF0YWdlbmVyYWwJCQkv KiBNQUlMIHN1cHBvcnRlZCBvbmx5IGZvciAqLwotI2lmbmRlZiBPUzIJCQkJLyogVU5JWCwgVk1T LCBhbmQgT1MtOSAqLwotI2lmbmRlZiBNQUMKLSNpZm5kZWYgR0VNRE9TCi0jaWZuZGVmIEFNSUdB Ci0JCSAgICBkICE9ICdNJyAmJgkJLyogTUFJTCAqLwotI2VuZGlmIC8qIEFNSUdBICovCi0jZW5k aWYgLyogR0VNRE9TICovCi0jZW5kaWYgLyogTUFDICovCi0jZW5kaWYgLyogT1MvMiAqLwotI2Vu ZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jaWZkZWYgQ0tfUkVTRU5ECi0JCSAgICBkICE9ICdSJyAm JgkJLyogUkVTRU5EICovCi0jZW5kaWYgLyogQ0tfUkVTRU5EICovCi0JCSAgICBkICE9ICdQJykg ewkJLyogUFJJTlQgKi8KLQkJICAgIHJldGNvZGUgPSAtMTsJLyogVW5rbm93bi91bnN1cHBvcnRl ZCBkaXNwb3NpdGlvbiAqLwotCQkgICAgKnJwKysgPSBjOwotCQkgICAgaWYgKCFvcG5lcnIpIHRs b2coRjEwMSwiIHJlZnVzZWQ6IGJhZCBkaXNwb3NpdGlvbiIsIiIsZCk7Ci0JCX0KLQkJZGlzcG9z ID0gZDsKLQkJZGVidWcoRjAwMCwiZ2F0dHIgZGlzcG9zIiwiIixkaXNwb3MpOwotCQlzd2l0Y2gg KGQpIHsKLSNpZm5kZWYgTk9GUklMTFMKLQkJICBjYXNlICdNJzoKLQkJICAgIGlmICghZW5fbWFp KSB7Ci0JCQlyZXRjb2RlID0gLTE7Ci0JCQkqcnArKyA9IGM7Ci0JCQlpZiAoIW9wbmVycikgdGxv ZyhGMTAwLCIgcmVmdXNlZDogbWFpbCBkaXNhYmxlZCIsIiIsMCk7Ci0JCQlkaXNwb3MgPSAwOwot CQkgICAgfQotCQkgICAgYnJlYWs7Ci0jZW5kaWYgLyogTk9GUklMTFMgKi8KLQkJICBjYXNlICdQ JzoKLQkJICAgIGlmICghZW5fcHJpKSB7Ci0JCQlyZXRjb2RlID0gLTE7Ci0JCQkqcnArKyA9IGM7 Ci0JCQlpZiAoIW9wbmVycikKLQkJCSAgdGxvZyhGMTAwLCIgcmVmdXNlZDogcHJpbnQgZGlzYWJs ZWQiLCIiLDApOwotCQkJZGlzcG9zID0gMDsKLQkJICAgIH0KLQkJICAgIGJyZWFrOwotCi0JCSAg Y2FzZSAnUic6Ci0JCSAgICBkaXNwb3MgPSAwOwotI2lmZGVmIENLX1JFU0VORAotCQkgICAgcnNf bGVuID0gemdldGZzKGZmKTsgLyogR2V0IGxlbmd0aCBvZiBmaWxlICovCi0JCSAgICBkZWJ1ZyhG MTExLCJnYXR0ciBSRVNFTkQiLGZmLHJzX2xlbik7Ci0jaWZkZWYgVk1TCi0JCSAgICByc19sZW4g Jj0gKGxvbmcpIC01MTI7IC8qIEVuc3VyZSBibG9jayBib3VuZGFyeSBpZiBWTVMgKi8KLQkJICAg IHJzX2xlbiAtPSA1MTI7CSAgLyogSW4gY2FzZSBsYXN0IGJsb2NrIG5vdCBjb21wbGV0ZSAqLwot CQkgICAgZGVidWcoRjExMSwiZ2F0dHIgcnNfbGVuIixmZixyc19sZW4pOwotI2VuZGlmIC8qIFZN UyAqLwotI2lmZGVmIENPTU1FTlQKLQkJICAgIGlmIChyc19sZW4gPCAwTCkJLyogTG9jYWwgZmls ZSBkb2Vzbid0IGV4aXN0ICovCi0JCSAgICAgIHJzX2xlbiA9IDBMOwotI2VuZGlmIC8qIENPTU1F TlQgKi8KLS8qCi0gIEFub3RoZXIgcG9zc2liaWxpdHkgaGVyZSAob3IgbGF0ZXIsIHJlYWxseSkg d291bGQgYmUgdG8gY2hlY2sgaWYgdGhlIHR3bwotICBmaWxlIGxlbmd0aHMgYXJlIHRoZSBzYW1l LCBhbmQgaWYgc28sIGtlZXAgdGhlIHByZXZhaWxpbmcgY29sbGlzaW9uIGFjdGlvbgotICBhcyBp cyAobm90ZTogcnNfbGVuID09IGxlbmd0aCBvZiBleGlzdGluZyBmaWxlOyB5eS0+bGVuZ3RoID09 IGZzaXplID09Ci0gIGxlbmd0aCBvZiBpbmNvbWluZyBmaWxlKS4gIFRoaXMgY291bGQgYmUgY29t cGxpY2F0ZWQsIHRob3VnaCwgc2luY2UKLSAgKGEpIHdlIG1pZ2h0IG5vdCBoYXZlIHJlY2VpdmVk IHRoZSBsZW5ndGggYXR0cmlidXRlIHlldCwgYW5kIGluIGZhY3QgaXQKLSAgbWlnaHQgZXZlbiBi ZSBpbiBhIHN1YnNlcXVlbnQgQS1wYWNrZXQsIHlldCAoYikgd2UgaGF2ZSB0byBhY2NlcHQgb3Ig cmVqZWN0Ci0gIHRoZSBSZWNvdmVyIGF0dHJpYnV0ZSBub3cuICBTbyBiZXR0ZXIgdG8gbGVhdmUg YXMtaXMuICBBbnl3YXksIGl0J3MgcHJvYmFibHkKLSAgbW9yZSB1c2VmdWwgdGhpcyB3YXkuCi0q LwotCQkgICAgaWYgKHJzX2xlbiA+IChDS19PRkZfVCkwKSB7Ci0JCQlmbmNzYXYgPSBmbmNhY3Q7 IC8qIFNhdmUgY29sbGlzaW9uIGFjdGlvbiAqLwotCQkJZm5jYWN0ID0gWFlGWF9BOyAvKiBTd2l0 Y2ggdG8gQVBQRU5EICovCi0JCSAgICB9Ci0jZWxzZQotCQkgICAgcmV0Y29kZSA9IC0xOwkvKiBU aGlzIHNob3VsZG4ndCBoYXBwZW4gKi8KLQkJICAgICpycCsrID0gYzsJCS8qICdjYXVzZSBpdCB3 YXNuJ3QgbmVnb3RpYXRlZC4gKi8KLQkJICAgIGlmICghb3BuZXJyKSB0bG9nKEYxMDAsIiByZWZ1 c2VkOiByZXNlbmQiLCIiLDApOwotI2VuZGlmIC8qIENLX1JFU0VORCAqLwotCQl9Ci0jZWxzZSAg LyogTk9ESVNQTyAqLwotCQlyZXRjb2RlID0gLTE7Ci0JCSpycCsrID0gYzsKLQkJaWYgKCFvcG5l cnIpIHRsb2coRjEwMCwiIHJlZnVzZWQ6IE5PRElTUE8iLCIiLDApOwotI2VuZGlmIC8qIE5PRElT UE8gKi8KLQkgICAgfQotCSAgICBicmVhazsKLQotCSAgY2FzZSAnLic6CQkJLyogU2VuZGVyJ3Mg c3lzdGVtIElEICovCi0JICAgIGZvciAoaSA9IDA7IChpIDwgYWxuKSAmJiAoaSA8IElEQlVGTCk7 IGkrKykKLQkgICAgICBpZGJ1ZltpXSA9ICpzKys7CQkvKiBDb3B5IGl0IGludG8gYSBzdGF0aWMg c3RyaW5nICovCi0JICAgIGlkYnVmW2ldID0gJ1wwJzsKLQkgICAgaWYgKGkgPCBhbG4pIHMgKz0g KGFsbiAtIGkpOwotCSAgICBpZiAoYXRzaWRpKSB7Ci0JCXl5LT5zeXN0ZW1pZC52YWwgPSBpZGJ1 ZjsgLyogUG9pbnRlciB0byBzdHJpbmcgKi8KLQkJeXktPnN5c3RlbWlkLmxlbiA9IGk7CS8qIExl bmd0aCBvZiBzdHJpbmcgKi8KLQkgICAgfQotCSAgICBicmVhazsKLQotCSAgY2FzZSAnMCc6CQkJ LyogU3lzdGVtLWRlcGVuZGVudCBwYXJhbWV0ZXJzICovCi0jaWZkZWYgRFlOQU1JQwotCSAgICBp ZiAoIXNwYnVmICYmICEoc3BidWYgPSBtYWxsb2MoU1BCVUZMKSkpCi0JCWZhdGFsKCJnYXR0cjog bm8gbWVtb3J5IGZvciBzcGJ1ZiIpOwotI2VuZGlmIC8qIERZTkFNSUMgKi8KLQkgICAgZm9yIChp ID0gMDsgKGkgPCBhbG4pICYmIChpIDwgU1BCVUZMKTsgaSsrKQotCSAgICAgIHNwYnVmW2ldID0g KnMrKzsJCS8qIENvcHkgaXQgaW50byBhIHN0YXRpYyBzdHJpbmcgKi8KLQkgICAgc3BidWZbaV0g PSAnXDAnOwotCSAgICBpZiAoaSA8IGFsbikgcyArPSAoYWxuIC0gaSk7Ci0JICAgIGlmIChhdHN5 c2kpIHsKLQkJeXktPnN5c3BhcmFtLnZhbCA9IHNwYnVmOyAvKiBQb2ludGVyIHRvIHN0cmluZyAq LwotCQl5eS0+c3lzcGFyYW0ubGVuID0gaTsJLyogTGVuZ3RoIG9mIHN0cmluZyAqLwotCSAgICB9 Ci0JICAgIGJyZWFrOwotCi0JICBjYXNlICchJzoJCQkvKiBGaWxlIGxlbmd0aCBpbiBLICovCi0J ICBjYXNlICcxJzogewkJCS8qIEZpbGUgbGVuZ3RoIGluIGJ5dGVzICovCi0JICAgICAgY2hhciAq IGwyOwotCSAgICAgIENLX09GRl9UIHhsZW47Ci0JICAgICAgZm9yIChpID0gMDsgKGkgPCBhbG4p ICYmIChpIDwgQUJVRkwpOyBpKyspIC8qIENvcHkgaXQgKi8KLQkJYWJ1ZltpXSA9ICpzKys7Ci0J ICAgICAgYWJ1ZltpXSA9ICdcMCc7CQkvKiBUZXJtaW5hdGUgd2l0aCBudWxsICovCi0JICAgICAg aWYgKGkgPCBhbG4pIHMgKz0gKGFsbiAtIGkpOwotCSAgICAgIGlmIChyZGlnaXRzKGFidWYpKSB7 CS8qIE1ha2Ugc3VyZSBzdHJpbmcgaXMgYWxsIGRpZ2l0cyAqLwotCQkgIHhsZW4gPSBja2F0b2Zz KGFidWYpOwkvKiBDb252ZXJ0IHRvIG51bWJlciAqLwotCQkgIGwyID0gY2tmc3RvYSh4bGVuKTsJ LyogQ29udmVydCBudW1iZXIgYmFjayB0byBzdHJpbmcgKi8KLQkJICBpZiAoYyA9PSAnMScpCi0J CSAgICBkZWJ1ZyhGMTExLCJnYXR0ciBsZW5ndGgiLGFidWYseGxlbik7Ci0JCSAgZWxzZQotCQkg ICAgZGVidWcoRjExMSwiZ2F0dHIgbGVuZ3RoayIsYWJ1Zix4bGVuKTsKLQkJICBpZiAoY2tzdHJj bXAoYWJ1ZixsMiwtMSwxKSkgeyAvKiBUaGlzIGlzIGhvdyB3ZSBjaGVjay4uLiAqLwotCQkgICAg ICB4bGVuID0gKENLX09GRl9UKS0yOyAvKiAtMiA9IHVuaywgcG9zc2libHkgdG9vIGxvbmcgKi8K LQkJICAgICAgb3ZlcmZsb3crKzsKLQkJICAgICAgZGVidWcoRjExMSwiZ2F0dHIgb3ZlcmZsb3ci LAotCQkJICAgIChjID09ICcxJykgPyAibGVuZ3RoIiA6ICJsZW5ndGhrIiwKLQkJCSAgICB4bGVu KTsKLQkJICB9Ci0JCSAgaWYgKGMgPT0gJzEnKSB7Ci0JCSAgICAgIHl5LT5sZW5ndGggPSB4bGVu OwotCQkgICAgICBkZWJ1ZyhGMTAxLCJnYXR0ciBsZW5ndGgiLCIiLHhsZW4pOwotCQkgIH0gZWxz ZSB7Ci0JCSAgICAgIHl5LT5sZW5ndGhrID0geGxlbjsKLQkJICAgICAgZGVidWcoRjEwMSwiZ2F0 dHIgbGVuZ3RoayIsIiIseGxlbik7Ci0JCSAgfQotCSAgICAgIH0KLQkgICAgICAvKiBJZiB0aGUg bGVuZ3RoIGZpZWxkIGlzIG5vdCBudW1lcmljIGFjY2VwdCB0aGUgZmlsZSAqLwotCSAgICAgIC8q IGFueXdheSBidXQgd2l0aCBhbiB1bmtub3duIGxlbmd0aCAqLwotCSAgICAgIGJyZWFrOwotCSAg fQotCi0jaWZkZWYgQ0tfUEVSTVMKLQkgIGNhc2UgJywnOgkJCS8qIFN5c3RlbS1kZXBlbmRlbnQg cHJvdGVjdGlvbiBjb2RlICovCi0JICAgIGZvciAoaSA9IDA7IChpIDwgYWxuKSAmJiAoaSA8IENL X1BFUk1MRU4pOyBpKyspCi0JICAgICAgbHBybWJ1ZltpXSA9ICpzKys7CS8qIEp1c3QgY29weSBp dCAtIGRlY29kZSBsYXRlciAqLwotCSAgICBscHJtYnVmW2ldID0gJ1wwJzsJCS8qIFRlcm1pbmF0 ZSB3aXRoIG51bGwgKi8KLQkgICAgaWYgKGkgPCBhbG4pIHMgKz0gKGFsbiAtIGkpOwotCSAgICBp ZiAoYXRscHJpKSB7Ci0JCXl5LT5scHJvdGVjdC52YWwgPSAoY2hhciAqKWxwcm1idWY7Ci0JCXl5 LT5scHJvdGVjdC5sZW4gPSBpOwotCSAgICB9IGVsc2UKLQkgICAgICBscHJtYnVmWzBdID0gTlVM OwotCSAgICBicmVhazsKLQotCSAgY2FzZSAnLSc6CQkJLyogR2VuZXJpYyAid29ybGQiIHByb3Rl Y3Rpb24gY29kZSAqLwotCSAgICBncHJtYnVmWzBdID0gTlVMOwkJLyogSnVzdCAxIGJ5dGUgYnkg ZGVmaW5pdGlvbiAqLwotCSAgICBmb3IgKGkgPSAwOyBpIDwgYWxuOyBpKyspCS8qIEJ1dCBhbGxv dyBmb3IgbW9yZS4uLiAqLwotCSAgICAgIGlmIChpID09IDApIGdwcm1idWZbMF0gPSAqcysrOwot CSAgICBncHJtYnVmWzFdID0gTlVMOwotCSAgICBpZiAoYXRncHJpKSB7Ci0JCXl5LT5ncHJvdGVj dC52YWwgPSAoY2hhciAqKWdwcm1idWY7Ci0JCXl5LT5ncHJvdGVjdC5sZW4gPSBncHJtYnVmWzBd ID8gMSA6IDA7Ci0JICAgIH0gZWxzZQotCSAgICAgIGdwcm1idWZbMF0gPSBOVUw7Ci0JICAgIGJy ZWFrOwotI2VuZGlmIC8qIENLX1BFUk1TICovCi0KLQkgIGRlZmF1bHQ6CQkJLyogVW5rbm93biBh dHRyaWJ1dGUgKi8KLQkgICAgcyArPSBhbG47CQkJLyogSnVzdCBza2lwIHBhc3QgaXQgKi8KLQkg ICAgYnJlYWs7Ci0JfQotICAgIH0KLQotICAgIC8qIENoZWNrIHNwYWNlIG5vdywgYmVjYXVzZSB3 ZSBhbHNvIG5lZWQgdG8ga25vdyB0aGUgZmlsZSB0eXBlICovCi0gICAgLyogaW4gY2FzZSB6Y2hr c3BhKCkgZGlmZmVyZW50aWF0ZXMgdGV4dCBhbmQgYmluYXJ5IChWTVMgdmVyc2lvbiBkb2VzKSAq LwotCi0gICAgaWYgKGF0bGVuaSAmJiAhY2FsaWJyYXRlKSB7CQkvKiBMZW5ndGggYXR0cmlidXRl IGVuYWJsZWQ/ICovCi0JaWYgKHl5LT5sZW5ndGggPiAoQ0tfT0ZGX1QpLTEpIHsgLyogTGVuZ3Ro LWluLWJ5dGVzIGF0dHJpYnV0ZSByZWMnZD8gKi8KLQkgICAgaWYgKCF6Y2hrc3BhKGZmLCh5eS0+ bGVuZ3RoKSkpIHsgLyogQ2hlY2sgc3BhY2UgKi8KLQkJcmV0Y29kZSA9IC0xOwkJICAgICAvKiBO b3QgZW51ZiAqLwotCQkqcnArKyA9ICcxJzsKLQkJaWYgKCFvcG5lcnIpIHRsb2coRjEwMCwiIHJl ZnVzZWQ6IGxlbmd0aCBieXRlcyIsIiIsMCk7Ci0JICAgIH0KLQl9IGVsc2UgaWYgKHl5LT5sZW5n dGhrID4gKENLX09GRl9UKS0xKSB7IC8qIExlbmd0aCBpbiBLIHJlY2VpdmVkPyAqLwotCSAgICBs b25nIHhsZW47Ci0JICAgIHhsZW4gPSB5eS0+bGVuZ3RoayAqIDEwMjQ7Ci0JICAgIGlmICghemNo a3NwYShmZix4bGVuKSkgewotCQlyZXRjb2RlID0gLTE7CQkvKiBDaGVjayBzcGFjZSAqLwotCQkq cnArKyA9ICchJzsKLQkJaWYgKCFvcG5lcnIpIHRsb2coRjEwMCwiIHJlZnVzZWQ6IGxlbmd0aCBL IiwiIiwwKTsKLQkgICAgfQotCX0KLSAgICB9Ci0gICAgaWYgKHJldGNvZGUgPiAtMUwpIHsJCS8q IFJlbWVtYmVyIHRoZSBmaWxlIHNpemUgKi8KLQlpZiAoeXktPmxlbmd0aCA+IChDS19PRkZfVCkt MSkgewotCSAgICBmc2l6ZSA9IHl5LT5sZW5ndGg7Ci0JfSBlbHNlIGlmICh5eS0+bGVuZ3RoayA+ IChDS19PRkZfVCktMSAmJiAhb3ZlcmZsb3cpIHsKLQkgICAgZnNpemUgPSB5eS0+bGVuZ3RoayAq IDEwMjRMOwotCX0gZWxzZSBmc2l6ZSA9IHl5LT5sZW5ndGg7CS8qIChlLmcuIC0yTCkgKi8KLSAg ICB9Ci0KLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsKLSNpZmRlZiBDT01NRU5UCi0J c3ByaW50ZihhYnVmLCIlbGQiLGZzaXplKTsJLyogc2FmZSAqLwotI2Vsc2UKLQlja3N0cm5jcHko YWJ1Zixja2ZzdG9hKGZzaXplKSxBQlVGTCk7Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwotZGVidWco RjExMCwiZ2F0dHIgZnNpemUiLGFidWYsMCk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0K LSAgICBpZiAocmV0Y29kZSA9PSAwKSBycCA9IHJwYnVmOwkvKiBOdWxsIHJlcGx5IHN0cmluZyBp ZiBhY2NlcHRlZCAqLwotICAgICpycCA9ICdcMCc7CQkJCS8qIEVuZCBvZiByZXBseSBzdHJpbmcg Ki8KLQotI2lmZGVmIENLX1JFU0VORAotICAgIGlmIChkID09ICdSJykgewkJCS8qIFJlY2Vpdmlu ZyBhIFJFU0VORD8gKi8KLQlkZWJ1ZyhGMTAxLCJnYXR0ciBSRVNFTkQiLCIiLHJldGNvZGUpOwot CS8qIFdlIGlnbm9yZSByZXRjb2RlcyBiZWNhdXNlIHRoaXMgb3ZlcnJpZGVzICovCi0JaWYgKGJp bmFyeSAhPSBYWUZUX0IpIHsJCS8qIFJlamVjdCBpZiBub3QgYmluYXJ5ICovCi0JICAgIHJldGNv ZGUgPSAtMTsJCS8qIGluIGNhc2UgdHlwZSBmaWVsZCBjYW1lICovCi0JICAgIGNrc3RybmNweShy cGJ1ZiwiTisiLFJQQlVGTCk7IC8qIGFmdGVyIHRoZSBkaXNwb3NpdGlvbiBmaWVsZCAqLwotCSAg ICBkZWJ1ZyhGMTExLCJnYXR0ciBSRVNFTkQgbm90IGJpbmFyeSIscnBidWYsYmluYXJ5KTsKLQl9 IGVsc2UgewkJCS8qIEJpbmFyeSBtb2RlICovCi0JICAgIHJldGNvZGUgPSAwOwkJLyogQWNjZXB0 IHRoZSBmaWxlICovCi0JICAgIGRpc2NhcmQgPSAwOwkJLyogSWYgU0VUIEZJTEUgQ09MTElTSU9O IERJU0NBUkQgKi8KLSNpZmRlZiBDT01NRU5UCi0JICAgIHNwcmludGYocnBidWYrMiwiJWxkIixy c19sZW4pOyAvKiBSZXBseSB3aXRoIGxlbmd0aCBvZiBmaWxlICovCi0jZWxzZQotCSAgICBja3N0 cm5jcHkocnBidWYrMixja2ZzdG9hKHJzX2xlbiksUlBCVUZMLTIpOwotI2VuZGlmCS8qIENPTU1F TlQgKi8KLQkgICAgcnBidWZbMF0gPSAnMSc7CQkvKiAnMScgbWVhbnMgTGVuZ3RoIGluIEJ5dGVz ICovCi0JICAgIHJwYnVmWzFdID0gdG9jaGFyKChpbnQpc3RybGVuKHJwYnVmKzIpKTsgLyogTGVu Z3RoIG9mIGxlbmd0aCAqLwotCSAgICBkZWJ1ZyhGMTExLCJnYXR0ciBSRVNFTkQgT0siLHJwYnVm LHJldGNvZGUpOwotCX0KLSAgICB9Ci0jZW5kaWYgLyogQ0tfUkVTRU5EICovCi0gICAgaWYgKHJl dGNvZGUgPT0gMCAmJiBkaXNjYXJkICE9IDApIHsJLyogRG8gd2Ugc3RpbGwgaGF2ZSBhIGRpc2Nh cmQgZmxhZz8gKi8KLQlja3N0cm5jcHkocnBidWYsIk4/IixSUEJVRkwpOwkvKiBZZXMsIG11c3Qg YmUgZmlsZW5hbWUgY29sbGlzaW9uICovCi0JcmV0Y29kZSA9IC0xOwkJCS8qICI/IiA9IG5hbWUg KHJlcGx5LW9ubHkgY29kZSkgKi8KLSAgICB9Ci0gICAgeXktPnJlcGx5LnZhbCA9IHJwYnVmOwkJ LyogQWRkIGl0IHRvIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUgKi8KLSAgICB5eS0+cmVwbHkubGVuID0g KGludClzdHJsZW4ocnBidWYpOwotICAgIGlmIChyZXRjb2RlIDwgMCkgewkJCS8qIElmIHdlIGFy ZSByZWplY3RpbmcgKi8KLQlkaXNjYXJkID0gMTsJCQkvKiByZW1lbWJlciB0byBkaXNjYXJkIHRo ZSBmaWxlICovCi0JcmVqZWN0aW9uID0gcnBidWZbMV07CQkvKiBhbmQgdXNlIHRoZSBmaXJzdCBy ZWFzb24gZ2l2ZW4uICovCi0JaWYgKGZuY3NhdiAhPSAtMSkgewotCSAgICBmbmNhY3QgPSBmbmNz YXY7Ci0JICAgIGZuY3NhdiA9IC0xOwotCX0KLSAgICB9Ci0gICAgZGVidWcoRjExMSwiZ2F0dHIg cmV0dXJuIixycGJ1ZixyZXRjb2RlKTsKLSAgICByZXR1cm4ocmV0Y29kZSk7Ci19Ci0KLS8qICBJ IE4gSSBUIEEgVCBUIFIgIC0tICBJbml0aWFsaXplIGZpbGUgYXR0cmlidXRlIHN0cnVjdHVyZSAg Ki8KLQotaW50Ci1pbml0YXR0cih5eSkgc3RydWN0IHphdHRyICp5eTsgewotICAgIHl5LT5sZW5n dGhrID0geXktPmxlbmd0aCA9IChDS19PRkZfVCktMTsKLSAgICB5eS0+dHlwZS52YWwgPSAiIjsK LSAgICB5eS0+dHlwZS5sZW4gPSAwOwotICAgIHl5LT5kYXRlLnZhbCA9ICIiOwotICAgIHl5LT5k YXRlLmxlbiA9IDA7Ci0gICAgeXktPmVuY29kaW5nLnZhbCA9ICIiOwotICAgIHl5LT5lbmNvZGlu Zy5sZW4gPSAwOwotICAgIHl5LT5kaXNwLnZhbCA9ICIiOwotICAgIHl5LT5kaXNwLmxlbiA9IDA7 Ci0gICAgeXktPnN5c3RlbWlkLnZhbCA9ICIiOwotICAgIHl5LT5zeXN0ZW1pZC5sZW4gPSAwOwot ICAgIHl5LT5zeXNwYXJhbS52YWwgPSAiIjsKLSAgICB5eS0+c3lzcGFyYW0ubGVuID0gMDsKLSAg ICB5eS0+Y3JlYXRvci52YWwgPSAiIjsKLSAgICB5eS0+Y3JlYXRvci5sZW4gPSAwOwotICAgIHl5 LT5hY2NvdW50LnZhbCA9ICIiOwotICAgIHl5LT5hY2NvdW50LmxlbiA9IDA7Ci0gICAgeXktPmFy ZWEudmFsID0gIiI7Ci0gICAgeXktPmFyZWEubGVuID0gMDsKLSAgICB5eS0+cGFzc3dvcmQudmFs ID0gIiI7Ci0gICAgeXktPnBhc3N3b3JkLmxlbiA9IDA7Ci0gICAgeXktPmJsa3NpemUgPSAtMUw7 Ci0gICAgeXktPnhhY2Nlc3MudmFsID0gIiI7Ci0gICAgeXktPnhhY2Nlc3MubGVuID0gMDsKLSNp ZmRlZiBDS19QRVJNUwotICAgIGlmICghb2ZwZXJtcykgb2ZwZXJtcyA9ICIiOwotICAgIGRlYnVn KEYxMTAsImluaXRhdHRyIG9mcGVybXMiLG9mcGVybXMsMCk7Ci0gICAgeXktPmxwcm90ZWN0LnZh bCA9IG9mcGVybXM7Ci0gICAgeXktPmxwcm90ZWN0LmxlbiA9IDAgLSBzdHJsZW4ob2ZwZXJtcyk7 IC8qIDwtLSBOT1RFISAqLwotICAgIC8qCi0gICAgICBBIG5lZ2F0aXZlIGxlbmd0aCBpbmRpY2F0 ZXMgdGhhdCB3ZSBoYXZlIGEgcGVybWlzc2lvbnMgc3RyaW5nIGJ1dCBpdCBoYXMKLSAgICAgIGJl ZW4gaW5oZXJpdGVkIGZyb20gYSBwcmV2aW91c2x5IGV4aXN0aW5nIGZpbGUgcmF0aGVyIHRoYW4g cGlja2VkIHVwCi0gICAgICBmcm9tIGFuIGluY29taW5nIEEtcGFja2V0LgotICAgICovCi0jZWxz ZQotICAgIHl5LT5scHJvdGVjdC52YWwgPSAiIjsKLSAgICB5eS0+bHByb3RlY3QubGVuID0gMDsK LSNlbmRpZiAvKiBDS19QRVJNUyAqLwotICAgIHl5LT5ncHJvdGVjdC52YWwgPSAiIjsKLSAgICB5 eS0+Z3Byb3RlY3QubGVuID0gMDsKLSAgICB5eS0+cmVjZm0udmFsID0gIiI7Ci0gICAgeXktPnJl Y2ZtLmxlbiA9IDA7Ci0gICAgeXktPnJlcGx5LnZhbCA9ICIiOwotICAgIHl5LT5yZXBseS5sZW4g PSAwOwotI2lmZGVmIE9TMgotICAgIHl5LT5sb25nbmFtZS5sZW4gPSAwIDsKLSAgICB5eS0+bG9u Z25hbWUudmFsID0gIiIgOwotI2VuZGlmIC8qIE9TMiAqLwotICAgIHJldHVybigwKTsKLX0KLQot LyogIEEgRCBFIEIgVSAtLSBXcml0ZSBhdHRyaWJ1dGUgcGFja2V0IGluZm8gdG8gZGVidWcgbG9n ICAqLwotCi1pbnQKLWFkZWJ1KGYsenopIGNoYXIgKmY7IHN0cnVjdCB6YXR0ciAqeno7IHsKLSNp ZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cgPT0gMCkgcmV0dXJuKDApOwotICAgIGRlYnVnKEYx MTAsIkF0dHJpYnV0ZXMgZm9yIGluY29taW5nIGZpbGUgIixmLDApOwotICAgIGRlYnVnKEYxMDEs IiBsZW5ndGggaW4gSyIsIiIsKGludCkgenotPmxlbmd0aGspOwotICAgIGRlYnVnKEYxMTEsIiBm aWxlIHR5cGUiLHp6LT50eXBlLnZhbCx6ei0+dHlwZS5sZW4pOwotICAgIGRlYnVnKEYxMTEsIiBj cmVhdGlvbiBkYXRlIix6ei0+ZGF0ZS52YWwsenotPmRhdGUubGVuKTsKLSAgICBkZWJ1ZyhGMTEx LCIgY3JlYXRvciIsenotPmNyZWF0b3IudmFsLHp6LT5jcmVhdG9yLmxlbik7Ci0gICAgZGVidWco RjExMSwiIGFjY291bnQiLHp6LT5hY2NvdW50LnZhbCx6ei0+YWNjb3VudC5sZW4pOwotICAgIGRl YnVnKEYxMTEsIiBhcmVhIix6ei0+YXJlYS52YWwsenotPmFyZWEubGVuKTsKLSAgICBkZWJ1ZyhG MTExLCIgcGFzc3dvcmQiLHp6LT5wYXNzd29yZC52YWwsenotPnBhc3N3b3JkLmxlbik7Ci0gICAg ZGVidWcoRjEwMSwiIGJsa3NpemUiLCIiLChpbnQpIHp6LT5ibGtzaXplKTsKLSAgICBkZWJ1ZyhG MTExLCIgYWNjZXNzIix6ei0+eGFjY2Vzcy52YWwsenotPnhhY2Nlc3MubGVuKTsKLSAgICBkZWJ1 ZyhGMTExLCIgZW5jb2RpbmciLHp6LT5lbmNvZGluZy52YWwsenotPmVuY29kaW5nLmxlbik7Ci0g ICAgZGVidWcoRjExMSwiIGRpc3Bvc2l0aW9uIix6ei0+ZGlzcC52YWwsenotPmRpc3AubGVuKTsK LSAgICBkZWJ1ZyhGMTExLCIgbHByb3RlY3Rpb24iLHp6LT5scHJvdGVjdC52YWwsenotPmxwcm90 ZWN0Lmxlbik7Ci0gICAgZGVidWcoRjExMSwiIGdwcm90ZWN0aW9uIix6ei0+Z3Byb3RlY3QudmFs LHp6LT5ncHJvdGVjdC5sZW4pOwotICAgIGRlYnVnKEYxMTEsIiBzeXN0ZW1pZCIsenotPnN5c3Rl bWlkLnZhbCx6ei0+c3lzdGVtaWQubGVuKTsKLSAgICBkZWJ1ZyhGMTExLCIgcmVjZm0iLHp6LT5y ZWNmbS52YWwsenotPnJlY2ZtLmxlbik7Ci0gICAgZGVidWcoRjExMSwiIHN5c3BhcmFtIix6ei0+ c3lzcGFyYW0udmFsLHp6LT5zeXNwYXJhbS5sZW4pOwotICAgIGRlYnVnKEYxMDEsIiBsZW5ndGgi LCIiLChpbnQpIHp6LT5sZW5ndGgpOwotICAgIGRlYnVnKEYxMTAsIiByZXBseSIsenotPnJlcGx5 LnZhbCwwKTsKLSNlbmRpZiAvKiBERUJVRyAqLwotICAgIHJldHVybigwKTsKLX0KLQotLyogIE8g UCBFIE4gQSAtLSBPcGVuIGEgZmlsZSwgd2l0aCBhdHRyaWJ1dGVzLiAgKi8KLS8qCi0gIFRoaXMg ZnVuY3Rpb24gdHJpZXMgdG8gb3BlbiBhIG5ldyBmaWxlIHRvIHB1dCB0aGUgYXJyaXZpbmcgZGF0 YSBpbi4gIFRoZQotICBmaWxlbmFtZSBpcyB0aGUgb25lIGluIHRoZSBzcnZjbWQgYnVmZmVyLiAg RmlsZSBjb2xsaXNpb24gYWN0aW9ucyBhcmU6Ci0gIE9WRVJXUklURSAodGhlIGV4aXN0aW5nIGZp bGUgaXMgb3ZlcndyaXR0ZW4pLCBSRU5BTUUgKHRoZSBuZXcgZmlsZSBpcwotICByZW5hbWVkKSwg QkFDS1VQICh0aGUgZXhpc3RpbmcgZmlsZSBpcyByZW5hbWVkKSwgRElTQ0FSRCAodGhlIG5ldyBm aWxlIGlzCi0gIHJlZnVzZWQpLCBVUERBVEUgKHRoZSBpbmNvbWluZyBmaWxlIHJlcGxhY2VzIHRo ZSBleGlzdGluZyBmaWxlIG9ubHkgaWYgdGhlCi0gIGluY29taW5nIGZpbGUgaGFzIGEgbmV3ZXIg Y3JlYXRpb24gZGF0ZSkuCi0KLSAgUmV0dXJucyAwIG9uIGZhaWx1cmUsIG5vbnplcm8gb24gc3Vj Y2Vzcy4KLSovCi1leHRlcm4gY2hhciAqcmZfZXJyOwotCi1pbnQKLW9wZW5hKGYsenopIGNoYXIg KmY7IHN0cnVjdCB6YXR0ciAqeno7IHsKLSAgICBpbnQgeCwgZGlzcG9zID0gMDsKLSAgICBzdGF0 aWMgc3RydWN0IGZpbGluZm8gZmNiOwkJLyogTXVzdCBiZSBzdGF0aWMhICovCi0KLSAgICBkZWJ1 ZyhGMTEwLCJvcGVuYSBmIixmLDApOwotICAgIGRlYnVnKEYxMDEsIm9wZW5hIGRpc2NhcmQiLCIi LGRpc2NhcmQpOwotCi0gICAgYWRlYnUoZix6eik7CQkJLyogV3JpdGUgYXR0cmlidXRlcyB0byBk ZWJ1ZyBsb2cgKi8KLQotICAgIGZmYyA9IChDS19PRkZfVCkwOwkJCS8qIEluaXQgZmlsZS1jaGFy YWN0ZXIgY291bnRlciAqLwotCi0jaWZkZWYgUElQRVNFTkQKLSAgICBpZiAocGlwZXNlbmQpCQkJ LyogUmVjZWl2aW5nIHRvIGEgcGlwZSAtIGVhc3kuICovCi0gICAgICByZXR1cm4ob3Blbm8oZix6 eiwmZmNiKSk7CQkvKiBKdXN0IG9wZW4gdGhlIHBpcGUuICovCi0jZW5kaWYgLyogUElQRVNFTkQg Ki8KLQotICAgIC8qIFJlY2VpdmluZyB0byBhIGZpbGUgLSBzZXQgdXAgZmlsZSBjb250cm9sIHN0 cnVjdHVyZSAqLwotCi0gICAgZmNiLmJzID0gZmJsa3NpejsJCQkvKiBCbG9ja3NpemUgKi8KLSNp Zm5kZWYgTk9DU0VUUwotICAgIGZjYi5jcyA9IGZjaGFyc2V0OwkJCS8qIENoYXJhY3RlciBzZXQg Ki8KLSNlbHNlCi0gICAgZmNiLmNzID0gMDsJCQkJLyogQ2hhcmFjdGVyIHNldCAqLwotI2VuZGlm IC8qIE5PQ1NFVFMgKi8KLSAgICBmY2IucmwgPSBmcmVjbDsJCQkvKiBSZWNvcmQgTGVuZ3RoICov Ci0gICAgZmNiLmZtdCA9IGZyZWNmbTsJCQkvKiBSZWNvcmQgRm9ybWF0ICovCi0gICAgZmNiLm9y ZyA9IGZvcmc7CQkJLyogT3JnYW5pemF0aW9uICovCi0gICAgZmNiLmNjID0gZmNjdHJsOwkJCS8q IENhcnJpYWdlIGNvbnRyb2wgKi8KLSAgICBmY2IudHlwID0gYmluYXJ5OwkJCS8qIFR5cGUgKi8K LSAgICBkZWJ1ZyhGMTAxLCJvcGVuYSB4ZmxnIiwiIix4ZmxnKTsKLSAgICBkZWJ1ZyhGMTAxLCJv cGVuYSByZW1maWxlIiwiIixyZW1maWxlKTsKLSAgICBkZWJ1ZyhGMTAxLCJvcGVuYSByZW1hcHBk IiwiIixyZW1hcHBkKTsKLSAgICBpZiAoeGZsZyAmJiByZW1maWxlICYmIHJlbWFwcGQpCS8qIFJF TU9URSBvdXRwdXQgcmVkaXJlY3RlZCB3aXRoID4+ICovCi0gICAgICBmY2IuZHNwID0gWFlGWl9B OwotICAgIGVsc2UKLSAgICAgIGZjYi5kc3AgPSAoZm5jYWN0ID09IFhZRlhfQSkgPyBYWUZaX0Eg OiBYWUZaX047IC8qIERpc3Bvc2l0aW9uICovCi0gICAgZGVidWcoRjEwMSwib3BlbmEgZGlzcCIs IiIsZmNiLmRzcCk7Ci0gICAgZmNiLm9zX3NwZWNpZmljID0gIiI7CQkvKiBPUy1zcGVjaWZpYyBp bmZvICovCi0jaWZkZWYgQ0tfTEFCRUxFRAotICAgIGZjYi5sYmxvcHRzID0gbGZfb3B0czsJCS8q IExhYmVsZWQgZmlsZSBvcHRpb25zICovCi0jZWxzZQotICAgIGZjYi5sYmxvcHRzID0gMDsKLSNl bmRpZiAvKiBDS19MQUJFTEVEICovCi0KLSAgICBpZiAoenotPmRpc3AubGVuID4gMCkgewkJLyog SW5jb21pbmcgZmlsZSBoYXMgYSBkaXNwb3NpdGlvbj8gKi8KLQlkZWJ1ZyhGMTExLCJvcGVuIGRp c3Bvc2l0aW9uIix6ei0+ZGlzcC52YWwsenotPmRpc3AubGVuKTsKLQlkaXNwb3MgPSAoaW50KSAo Kih6ei0+ZGlzcC52YWwpKTsKLSAgICB9Ci0gICAgaWYgKCFkaXNwb3MgJiYgeGZsZyAmJiByZW1m aWxlICYmIHJlbWFwcGQpIC8qIFJFTU9URSByZWRpcmVjdCBhcHBlbmQgPyAqLwotICAgICAgZGlz cG9zID0gZmNiLmRzcDsKLQotICAgIGRlYnVnKEYxMDEsIm9wZW5hIGRpc3BvcyIsIiIsZGlzcG9z KTsKLQotICAgIGlmICghZGlzcG9zKSB7CQkJICAgICAgICAgLyogTm8gc3BlY2lhbCBkaXNwb3Np dGlvbj8gKi8KLQlpZiAoZm5jYWN0ID09IFhZRlhfQiAmJiBvZm4xeCAmJiBvZm4yKSB7IC8qIEZp bGUgY29sbGlzaW9uID0gQkFDS1VQPyAqLwotCSAgICBpZiAoenJlbmFtZShvZm4xLG9mbjIpIDwg MCkgeyAgICAgICAgLyogUmVuYW1lIGV4aXN0aW5nIGZpbGUuICovCi0JCWRlYnVnKEYxMTAsIm9w ZW5hIHJlbmFtZSBmYWlscyIsb2ZuMSwwKTsKLQkJcmZfZXJyID0gIkNhbid0IGNyZWF0ZSBiYWNr dXAgZmlsZSI7Ci0JCXJldHVybigwKTsKLQkgICAgfSBlbHNlIGRlYnVnKEYxMTAsIm9wZW5hIHJl bmFtZSBvayIsb2ZuMiwwKTsKLQl9Ci0gICAgfSBlbHNlIGlmIChkaXNwb3MgPT0gJ1InKSB7CQkv KiBSZWNlaXZpbmcgYSBSRVNFTkQgKi8KLQlkZWJ1ZyhGMTAxLCJvcGVuYSByZW1vdGUgbGVuIiwi Iix6ei0+bGVuZ3RoKTsKLQlkZWJ1ZyhGMTAxLCJvcGVuYSBsb2NhbCBsZW4iLCIiLHJzX2xlbik7 Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICBpZiAoZm5jYWN0ID09IFhZRlhfUikJCS8qIGFuZCBm aWxlIGNvbGxpc2lvbiA9IFJFTkFNRSAqLwotCSAgaWYgKG9mbjF4KQotI2VuZGlmIC8qIENPTU1F TlQgKi8KLQlpZiAob2ZuMVswXSkKLQkgIGYgPSBvZm4xOwkJCS8qIHVzZSBvcmlnaW5hbCBuYW1l LiAqLwotICAgICAgICBpZiAoZm5jYWN0ID09IFhZRlhfUikJCS8qIGlmIGZpbGUgY29sbGlzaW9u IGlzIFJFTkFNRSAqLwotICAgICAgICAgIGNrc3RybmNweShmaWxuYW0sb2ZuMSxDS01BWFBBVEgr MSk7IC8qIHJlc3RvcmUgdGhlIHJlYWwgbmFtZSAqLwotICAgICAgICB4eHNjcmVlbihTQ1JfQU4s MCwwTCxmKTsJLyogdXBkYXRlIG5hbWUgb24gc2NyZWVuICovCi0JaWYgKHp6LT5sZW5ndGggPT0g cnNfbGVuKQkvKiBMb2NhbCBhbmQgcmVtb3RlIGxlbmd0aHMgZXF1YWw/ICovCi0JICByZXR1cm4o LTE3KTsJCQkvKiBTZWNyZXQgY29kZSAqLwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJvcGVuYSBb ZmlsZV09bW9kZTogIixmLGZjYi5kc3ApOwotICAgIGlmICh4ID0gb3Blbm8oZix6eiwmZmNiKSkg ewkJLyogVHJ5IHRvIG9wZW4gdGhlIGZpbGUuICovCi0jaWZkZWYgcGRwMTEKLQl0bG9nKEYxMTAs IiBsb2NhbCBuYW1lOiIsZiwwTCk7CS8qIE9LLCBvcGVuLCByZWNvcmQgbG9jYWwgbmFtZS4gKi8K LQltYWtlc3RyKCZwcmZzcGVjLGYpOwkJLyogTmV3IHByZWxpbWluYXJ5IG5hbWUgKi8KLSNlbHNl Ci0jaWZuZGVmIFpGTlFGUAotCXRsb2coRjExMCwiIGxvY2FsIG5hbWU6IixmLDBMKTsKLQltYWtl c3RyKCZwcmZzcGVjLGYpOwotI2Vsc2UKLQl7CQkJCS8qIExvZyBmdWxsIGxvY2FsIHBhdGhuYW1l ICovCi0JICAgIGNoYXIgKnAgPSBOVUxMLCAqcSA9IGY7Ci0JICAgIGlmICgocCA9IG1hbGxvYyhD S01BWFBBVEgrMSkpKQotCSAgICAgIGlmICh6Zm5xZnAoZmlsbmFtLCBDS01BWFBBVEgsIHApKQot CQlxID0gcDsKLQkgICAgdGxvZyhGMTEwLCIgbG9jYWwgbmFtZToiLHEsMEwpOwotCSAgICBtYWtl c3RyKCZwcmZzcGVjLHEpOwotCSAgICBpZiAocCkgZnJlZShwKTsKLQl9Ci0jZW5kaWYgLyogWkZO UUZQICovCi0jZW5kaWYgLyogcGRwMTEgKi8KLQotCWlmIChiaW5hcnkpIHsJCQkvKiBMb2cgZmls ZSBtb2RlIGluIHRyYW5zYWN0aW9uIGxvZyAqLwotCSAgICB0bG9nKEYxMDEsIiBtb2RlOiBiaW5h cnkiLCIiLChsb25nKSBiaW5hcnkpOwotCX0gZWxzZSB7CQkJLyogSWYgdGV4dCBtb2RlLCBjaGVj ayBjaGFyYWN0ZXIgc2V0ICovCi0JICAgIHRsb2coRjEwMCwiIG1vZGU6IHRleHQiLCIiLDBMKTsK LSNpZm5kZWYgTk9DU0VUUwotCSAgICBpZiAoeGZyeGxhKSB7Ci0JCWlmIChmY2hhcnNldCA+IC0x ICYmIGZjaGFyc2V0IDw9IE1BWEZDU0VUUykKLQkJICB0bG9nKEYxMTAsIiBmaWxlIGNoYXJhY3Rl ci1zZXQ6IixmY3NpbmZvW2ZjaGFyc2V0XS5uYW1lLDBMKTsKLQkJaWYgKHRjaGFyc2V0ID4gLTEg JiYgdGNoYXJzZXQgPD0gTUFYVENTRVRTKQotCQkgIHRsb2coRjExMCwiIHhmZXIgY2hhcmFjdGVy LXNldDoiLHRjc2luZm9bdGNoYXJzZXRdLm5hbWUsMEwpOwotCSAgICB9IGVsc2UgewotCQkgIHRs b2coRjExMCwiIGNoYXJhY3Rlci1zZXQ6IiwidHJhbnNwYXJlbnQiLDBMKTsKLQkgICAgfQotI2Vu ZGlmIC8qIE5PQ1NFVFMgKi8KLQkgICAgZGVidWcoRjExMSwib3BlbmEgY2hhcnNldCIsenotPmVu Y29kaW5nLnZhbCx6ei0+ZW5jb2RpbmcubGVuKTsKLQl9Ci0JZGVidWcoRjEwMSwib3BlbmEgYmlu YXJ5IiwiIixiaW5hcnkpOwotCi0jaWZkZWYgQ09NTUVOVAotCWlmIChmc2l6ZSA+PSAwKQotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLQkgIHh4c2NyZWVuKFNDUl9GUywwLGZzaXplLCIiKTsKLQotI2lm ZGVmIGRhdGFnZW5lcmFsCi0vKgotICBOZWVkIHRvIHR1cm4gb24gbXVsdGktdGFza2luZyBjb25z b2xlIGludGVycnVwdCB0YXNrIGhlcmUsIHNpbmNlIG11bHRpcGxlCi0gIGZpbGVzIG1heSBiZSBy ZWNlaXZlZCAoaHVoPykgLi4uCi0qLwotICAgICAgICBpZiAoKGxvY2FsKSAmJiAoIXF1aWV0KSkg ICAgICAgIC8qIE9ubHkgZG8gdGhpcyBpZiBsb2NhbCAmIG5vdCBxdWlldCAqLwotCSAgY29uc3Rh X210KCk7CQkJLyogU3RhcnQgdGhlIGFzeW5jIHJlYWQgdGFzayAqLwotI2VuZGlmIC8qIGRhdGFn ZW5lcmFsICovCi0KLSAgICB9IGVsc2UgewkJCQkvKiBEaWQgbm90IG9wZW4gZmlsZSBPSy4gKi8K LQotCXJmX2VyciA9IGNrX2VycnN0cigpOwkJLyogR2V0IHN5c3RlbSBlcnJvciBtZXNzYWdlICov Ci0JaWYgKCpyZl9lcnIpCi0JICB4eHNjcmVlbihTQ1JfRU0sMCwwbCxyZl9lcnIpOwotCWVsc2UK LQkgIHh4c2NyZWVuKFNDUl9FTSwwLDBsLCJDYW4ndCBvcGVuIG91dHB1dCBmaWxlIik7Ci0gICAg ICAgIHRsb2coRjExMCwiRmFpbHVyZSB0byBvcGVuIixmLDBMKTsKLSAgICAgICAgdGxvZyhGMTEw LCJFcnJvcjoiLHJmX2VyciwwTCk7Ci0JZGVidWcoRjExMCwib3BlbmEgZXJyb3IiLHJmX2Vyciww KTsKLSAgICB9Ci0gICAgcmV0dXJuKHgpOwkJCQkvKiBQYXNzIG9uIHJldHVybiBjb2RlIGZyb20g b3Blbm8gKi8KLX0KLQotLyogIE8gUCBFIE4gQyAgLS0gIE9wZW4gYSBjb21tYW5kIChpbiBwbGFj ZSBvZiBhIGZpbGUpIGZvciBvdXRwdXQgKi8KLQotaW50Ci1vcGVuYyhuLHMpIGludCBuOyBjaGFy ICogczsgewotICAgIGludCB4OwotI2lmbmRlZiBOT1BVU0gKLSAgICB4ID0genhjbWQobixzKTsK LSNlbHNlCi0gICAgeCA9IDA7Ci0jZW5kaWYgLyogTk9QVVNIICovCi0gICAgZGVidWcoRjExMSwi b3BlbmMgenhjbWQiLHMseCk7Ci0gICAgb19pc29wZW4gPSAoeCA+IDApID8gMSA6IDA7Ci0gICAg cmV0dXJuKHgpOwotfQotCi0vKiAgQyBBIE4gTiBFIEQgIC0tICBDaGVjayBpZiBjdXJyZW50IGZp bGUgdHJhbnNmZXIgY2FuY2VsbGVkICovCi0KLWludAotY2FubmVkKGJ1ZikgQ0hBUiAqYnVmOyB7 Ci0gICAgZXh0ZXJuIGludCBpbnRlcnJ1cHRlZDsKLSAgICBpZiAoKmJ1ZiA9PSAnWCcpIGN4c2Vl biA9IDE7Ci0gICAgaWYgKCpidWYgPT0gJ1onKSBjenNlZW4gPSAxOwotICAgIGlmIChjenNlZW4g fHwgY3hzZWVuKQotICAgICAgaW50ZXJydXB0ZWQgPSAxOwotICAgIGRlYnVnKEYxMDEsImNhbm5l ZDogY3hzZWVuIiwiIixjeHNlZW4pOwotICAgIGRlYnVnKEYxMDEsIiBjenNlZW4iLCIiLGN6c2Vl bik7Ci0gICAgcmV0dXJuKChjenNlZW4gfHwgY3hzZWVuKSA/IDEgOiAwKTsKLX0KLQotCi0vKiAg TyBQIEUgTiBJICAtLSAgT3BlbiBhbiBleGlzdGluZyBmaWxlIGZvciBpbnB1dCAgKi8KLQotaW50 Ci1vcGVuaShuYW1lKSBjaGFyICpuYW1lOyB7Ci0jaWZuZGVmIE5PU0VSVkVSCi0gICAgZXh0ZXJu IGludCBmcm9tZ2V0cGF0aDsKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotICAgIGludCB4LCBmaWxu bzsKLSAgICBjaGFyICpuYW1lMjsKLSAgICBleHRlcm4gQ0hBUiAqZXBrdG1zZzsKLQotICAgIGVw a3Rtc2dbMF0gPSBOVUw7CQkJLyogSW5pdGlhbGl6ZSBlcnJvciBtZXNzYWdlICovCi0gICAgaWYg KG1lbXN0ciB8fCBzbmRhcnJheSkgewkJLyogSnVzdCByZXR1cm4gaWYgImZpbGUiIGlzIG1lbW9y eS4gKi8KLQlpX2lzb3BlbiA9IDE7Ci0JcmV0dXJuKDEpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTEw LCJvcGVuaSBuYW1lIixuYW1lLDApOwotICAgIGRlYnVnKEYxMDEsIm9wZW5pIHNuZHNyYyIsIiIs c25kc3JjKTsKLQotICAgIGZpbG5vID0gKHNuZHNyYyA9PSAwKSA/IFpTVERJTyA6IFpJRklMRTsg ICAgLyogLi4uICovCi0gICAgZGVidWcoRjEwMSwib3BlbmkgZmlsZSBudW1iZXIiLCIiLGZpbG5v KTsKLQotI2lmbmRlZiBOT1NFUlZFUgotICAgIC8qIElmIEknbSBhIHNlcnZlciBhbmQgQ1dEIGlz IGRpc2FibGVkIGFuZCBuYW1lIGlzIG5vdCBmcm9tIEdFVC1QQVRILi4uICovCi0KLSAgICBpZiAo c2VydmVyICYmICFlbl9jd2QgJiYgIWZyb21nZXRwYXRoKSB7Ci0JenN0cmlwKG5hbWUsJm5hbWUy KTsKLQlpZiAoCQkJCS8qIC4uLiBjaGVjayBpZiBwYXRobmFtZSBpbmNsdWRlZC4gKi8KLSNpZmRl ZiBWTVMKLQkgICAgemNoa3BhdGgobmFtZSkKLSNlbHNlCi0JICAgIHN0cmNtcChuYW1lLG5hbWUy KQotI2VuZGlmIC8qIFZNUyAqLwotCSAgICApIHsKLQkgICAgdGxvZyhGMTEwLG5hbWUsImFjY2Vz cyBkZW5pZWQiLDBMKTsKLQkgICAgZGVidWcoRjExMCwib3BlbmkgQ0QgZGlzYWJsZWQiLG5hbWUs MCk7Ci0JICAgIGNrc3RybmNweSgoY2hhciAqKWVwa3Rtc2csIkFjY2VzcyBkZW5pZWQiLFBLVE1T R0xFTik7Ci0JICAgIHJldHVybigwKTsKLQl9IGVsc2UgbmFtZSA9IG5hbWUyOwotICAgIH0KLSNl bmRpZiAvKiBOT1NFUlZFUiAqLwotCi0jaWZkZWYgUElQRVNFTkQKLSAgICBkZWJ1ZyhGMTAxLCJv cGVuaSBwaXBlc2VuZCIsIiIscGlwZXNlbmQpOwotICAgIGlmIChwaXBlc2VuZCkgewotCWludCB4 OwotI2lmbmRlZiBOT1BVU0gKLQl4ID0genhjbWQoWklGSUxFLG5hbWUpOwotI2Vsc2UKLQl4ID0g MDsKLSNlbmRpZiAvKiBOT1BVU0ggKi8KLQlpX2lzb3BlbiA9ICh4ID4gMCkgPyAxIDogMDsKLQlp ZiAoIWlfaXNvcGVuKQotCSAgY2tzdHJuY3B5KChjaGFyICopZXBrdG1zZywiQ29tbWFuZCBvciBw aXBlIGZhaWx1cmUiLFBLVE1TR0xFTik7Ci0JZGVidWcoRjExMSwib3BlbmkgcGlwZXNlbmQgenhj bWQiLG5hbWUseCk7Ci0JcmV0dXJuKGlfaXNvcGVuKTsKLSAgICB9Ci0jZW5kaWYgLyogUElQRVNF TkQgKi8KLQotI2lmZGVmIENBTElCUkFURQotICAgIGlmIChjYWxpYnJhdGUpIHsKLQlpX2lzb3Bl biA9IDE7Ci0gICAgCXJldHVybigxKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0FMSUJSQVRFICovCi0K LSAgICB4ID0gem9wZW5pKGZpbG5vLG5hbWUpOwkJLyogT3RoZXJ3aXNlLCB0cnkgdG8gb3BlbiBp dC4gKi8KLSAgICBkZWJ1ZyhGMTExLCJvcGVuaSB6b3BlbmkgMSIsbmFtZSx4KTsKLSAgICBpZiAo eCkgewotCWlfaXNvcGVuID0gMTsKLSAgICAJcmV0dXJuKDEpOwotICAgIH0gZWxzZSB7CQkJCS8q IElmIG5vdCBmb3VuZCwgKi8KLQljaGFyIHhuYW1lW0NLTUFYUEFUSF07CQkvKiBjb252ZXJ0IHRo ZSBuYW1lICovCi0jaWZkZWYgTlpMVE9SCi0JbnpydG9sKG5hbWUseG5hbWUsZm5jbnYsZm5ycGF0 aCxDS01BWFBBVEgpOwotI2Vsc2UKLQl6cnRvbChuYW1lLHhuYW1lKTsJCS8qIHRvIGxvY2FsIGZv cm0gYW5kIHRoZW4gKi8KLSNlbmRpZiAvKiAgTlpMVE9SICovCi0JeCA9IHpvcGVuaShmaWxubyx4 bmFtZSk7CS8qIHRyeSBvcGVuaW5nIGl0IGFnYWluLiAqLwotCWRlYnVnKEYxMTEsIm9wZW5pIHpv cGVuaSAyIix4bmFtZSx4KTsKLQlpZiAoeCkgewotCSAgICBpX2lzb3BlbiA9IDE7Ci0JICAgIHJl dHVybigxKTsJCQkvKiBJdCB3b3JrZWQuICovCi0gICAgICAgIH0gZWxzZSB7Ci0JICAgIGNoYXIg KiBzOwotCSAgICBzID0gY2tfZXJyc3RyKCk7Ci0JICAgIGlmIChzKSBpZiAoIXMpIHMgPSBOVUxM OwotCSAgICBpZiAoIXMpIHMgPSAiQ2FuJ3Qgb3BlbiBmaWxlIjsKLQkgICAgY2tzdHJuY3B5KChj aGFyICopZXBrdG1zZyxzLFBLVE1TR0xFTik7Ci0JICAgIHRsb2coRjExMCx4bmFtZSxzLDBMKTsK LQkgICAgZGVidWcoRjExMCwib3BlbmkgZmFpbGVkIix4bmFtZSwwKTsKLQkgICAgZGVidWcoRjEx MCwib3BlbmkgbWVzc2FnZSIscywwKTsKLQkgICAgaV9pc29wZW4gPSAwOwotCSAgICByZXR1cm4o MCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8qICBPIFAgRSBOIE8gIC0tICBPcGVuIGEgbmV3 IGZpbGUgZm9yIG91dHB1dC4gICovCi0KLWludAotb3Blbm8obmFtZSx6eixmY2IpIGNoYXIgKm5h bWU7IHN0cnVjdCB6YXR0ciAqeno7IHN0cnVjdCBmaWxpbmZvICpmY2I7IHsKLSAgICBjaGFyICpu YW1lMjsKLSNpZmRlZiBEVElMREUKLSAgICBjaGFyICpkaXJwOwotI2VuZGlmIC8qIERUSUxERSAq LwotCi0gICAgaW50IGNoYW5uZWwsIHg7Ci0KLSAgICBpZiAoc3Rkb3VmKSB7CQkJCS8qIFJlY2Vp dmluZyB0byBzdGRvdXQ/ICovCi0JeCA9IHpvcGVubyhaU1RESU8sIiIsenosTlVMTCk7Ci0Jb19p c29wZW4gPSAoeCA+IDApOwotCWRlYnVnKEYxMDEsIm9wZW5vIHN0ZG91ZiB6b3Blbm8iLCIiLHgp OwotCXJldHVybih4KTsKLSAgICB9Ci0gICAgZGVidWcoRjExMCwib3Blbm86IG5hbWUiLG5hbWUs MCk7Ci0KLSAgICBpZiAoY3hzZWVuIHx8IGN6c2VlbiB8fCBkaXNjYXJkKSB7CS8qIElmIGludGVy cnVwdGVkLCBnZXQgb3V0IGJlZm9yZSAqLwotCWRlYnVnKEYxMDAsIiBvcGVuIGNhbmNlbGxlZCIs IiIsMCk7IC8qIGRlc3Ryb3lpbmcgZXhpc3RpbmcgZmlsZS4gKi8KLQlyZXR1cm4oMSk7CQkJLyog UHJldGVuZCB0byBzdWNjZWVkLiAqLwotICAgIH0KLSAgICBjaGFubmVsID0gWk9GSUxFOwkJCS8q IFNFVCBERVNUSU5BVElPTiBESVNLIG9yIFBSSU5URVIgKi8KLQotI2lmZGVmIFBJUEVTRU5ECi0g ICAgZGVidWcoRjEwMSwib3Blbm8gcGlwZXNlbmQiLCIiLHBpcGVzZW5kKTsKLSAgICBpZiAocGlw ZXNlbmQpIHsKLQlpbnQgeDsKLSNpZm5kZWYgTk9QVVNICi0JeCA9IHp4Y21kKFpPRklMRSwoY2hh ciAqKXNydmNtZCk7Ci0jZWxzZQotCXggPSAwOwotI2VuZGlmIC8qIE5PUFVTSCAqLwotCW9faXNv cGVuID0geCA+IDA7Ci0JZGVidWcoRjEwMSwib3Blbm8genhjbWQiLCIiLHgpOwotCXJldHVybih4 KTsKLSAgICB9Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLQotICAgIGlmIChkZXN0ID09IERFU1Rf UykgewkJLyogU0VUIERFU1QgU0NSRUVOLi4uICovCi0JY2hhbm5lbCA9IFpDVEVSTTsKLQlmY2Ig PSBOVUxMOwotICAgIH0KLSNpZmRlZiBEVElMREUKLSAgICBpZiAoKm5hbWUgPT0gJ34nKSB7Ci0J ZGlycCA9IHRpbGRlX2V4cGFuZChuYW1lKTsKLQlpZiAoKmRpcnApIGNrc3RybmNweShuYW1lLGRp cnAsQ0tNQVhQQVRIKzEpOwotICAgIH0KLSNlbmRpZiAvKiBEVElMREUgKi8KLSAgICBpZiAoc2Vy dmVyICYmICFlbl9jd2QpIHsJCS8qIElmIHJ1bm5pbmcgYXMgc2VydmVyICovCi0JenN0cmlwKG5h bWUsJm5hbWUyKTsJCS8qIGFuZCBDV0QgaXMgZGlzYWJsZWQsICovCi0JaWYgKHN0cmNtcChuYW1l LG5hbWUyKSkgewkvKiBjaGVjayBpZiBwYXRobmFtZSB3YXMgaW5jbHVkZWQuICovCi0JICAgIHRs b2coRjExMCxuYW1lLCJhdXRob3JpemF0aW9uIGZhaWx1cmUiLDBMKTsKLQkgICAgZGVidWcoRjEx MCwib3Blbm8gQ0QgZGlzYWJsZWQiLG5hbWUsMCk7Ci0JICAgIHJldHVybigwKTsKLQl9IGVsc2Ug bmFtZSA9IG5hbWUyOwotICAgIH0KLSAgICBpZiAoem9wZW5vKGNoYW5uZWwsbmFtZSx6eixmY2Ip IDw9IDApIHsgLyogVHJ5IHRvIG9wZW4gdGhlIGZpbGUgKi8KLQlvX2lzb3BlbiA9IDA7Ci0JZGVi dWcoRjExMCwib3Blbm8gZmFpbGVkIixuYW1lLDApOwotCS8qIHRsb2coRjExMCwiRmFpbHVyZSB0 byBvcGVuIixuYW1lLDBMKTsgKi8KLQlyZXR1cm4oMCk7Ci0gICAgfSBlbHNlIHsKLQlvX2lzb3Bl biA9IDE7Ci0JZGVidWcoRjExMCwib3Blbm8gb2ssIG5hbWUiLG5hbWUsMCk7Ci0JcmV0dXJuKDEp OwotICAgIH0KLX0KLQotLyogIE8gUCBFIE4gVCAgLS0gIE9wZW4gdGhlIHRlcm1pbmFsIGZvciBv dXRwdXQsIGluIHBsYWNlIG9mIGEgZmlsZSAgKi8KLQotaW50Ci1vcGVudCh6eikgc3RydWN0IHph dHRyICp6ejsgewotICAgIGludCB4OwotICAgIGZmYyA9IHRmYyA9IChDS19PRkZfVCkwOwotICAg IHggPSB6b3Blbm8oWkNURVJNLCIiLHp6LE5VTEwpOwotICAgIGRlYnVnKEYxMDEsIm9wZW50IHpv cGVubyIsIiIseCk7Ci0gICAgaWYgKHggPj0gMCkgewotCW9faXNvcGVuID0gMTsKLQliaW5hcnkg PSBYWUZUX1Q7Ci0gICAgfSBlbHNlCi0gICAgICByZXR1cm4oMCk7Ci0gICAgcmV0dXJuKHgpOwot fQotCi0vKiAgTyBQIEUgTiBYICAtLSAgT3BlbiBub3RoaW5nIChpbmNvbWluZyBmaWxlIHRvIGJl IGFjY2VwdGVkIGJ1dCBpZ25vcmVkKSAgKi8KLQotaW50Ci1ja29wZW54KHp6KSBzdHJ1Y3QgemF0 dHIgKnp6OyB7Ci0gICAgZmZjID0gdGZjID0gKENLX09GRl9UKTA7CQkvKiBSZXNldCBjb3VudGVy cyAqLwotICAgIG9faXNvcGVuID0gMTsKLSAgICBkZWJ1ZyhGMTAxLCJja29wZW54IGZzaXplIiwi Iixmc2l6ZSk7Ci0gICAgeHhzY3JlZW4oU0NSX0ZTLDAsZnNpemUsIiIpOwkvKiBMZXQgc2NyZWVu IGRpc3BsYXkga25vdyB0aGUgc2l6ZSAqLwotICAgIHJldHVybigxKTsKLX0KLQotLyogIEMgTCBT IEkgRiAgLS0gIENsb3NlIHRoZSBjdXJyZW50IGlucHV0IGZpbGUuICovCi0KLWludAotY2xzaWYo KSB7Ci0gICAgZXh0ZXJuIGludCB4ZmVyc3RhdCwgc3VjY2VzczsKLSAgICBpbnQgeCA9IDA7Ci0K LSAgICBmY3BzKCk7CQkJLyogQ2FsY3VsYXRlIENQUyBxdWlja2x5ICovCi0KLSNpZmRlZiBkYXRh Z2VuZXJhbAotICAgIGlmICgobG9jYWwpICYmICghcXVpZXQpKSAgICAvKiBPbmx5IGRvIHRoaXMg aWYgbG9jYWwgJiBub3QgcXVpZXQgKi8KLSAgICAgIGlmIChuZmlscyA8IDEpCQkvKiBNb3JlIGZp bGVzIHRvIHNlbmQgLi4uIGxlYXZlIGl0IG9uISAqLwotCWNvbm5vaV9tdCgpOwotI2VuZGlmIC8q IGRhdGFnZW5lcmFsICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJjbHNpZiBpX2lzb3BlbiIsIiIsaV9p c29wZW4pOwotICAgIGlmIChpX2lzb3BlbikgewkJCS8qIElmIGlucHV0IGZpbGUgaXMgb3Blbi4u LiAqLwotCWlmIChtZW1zdHIpIHsJCQkvKiBJZiBpbnB1dCB3YXMgbWVtb3J5IHN0cmluZywgKi8K LQkgICAgbWVtc3RyID0gMDsJCQkvKiBpbmRpY2F0ZSBubyBtb3JlLiAqLwotCX0gZWxzZSB7Ci0J ICAgIHggPSB6Y2xvc2UoWklGSUxFKTsJCS8qIGVsc2UgY2xvc2UgaW5wdXQgZmlsZS4gKi8KLQl9 Ci0jaWZkZWYgREVCVUcKLQlpZiAoZGVibG9nKSB7Ci0JICAgIGRlYnVnKEYxMDEsImNsc2lmIHpj bG9zZSIsIiIseCk7Ci0JICAgIGRlYnVnKEYxMDEsImNsc2lmIHN1Y2Nlc3MiLCIiLHN1Y2Nlc3Mp OwotCSAgICBkZWJ1ZyhGMTAxLCJjbHNpZiB4ZmVyc3RhdCIsIiIseGZlcnN0YXQpOwotCSAgICBk ZWJ1ZyhGMTAxLCJjbHNpZiBmc2l6ZSIsIiIsZnNpemUpOwotCSAgICBkZWJ1ZyhGMTAxLCJjbHNp ZiBmZmMiLCIiLGZmYyk7Ci0JICAgIGRlYnVnKEYxMDEsImNsc2lmIGN4c2VlbiIsIiIsY3hzZWVu KTsKLQkgICAgZGVidWcoRjEwMSwiY2xzaWYgY3pzZWVuIiwiIixjenNlZW4pOwotCSAgICBkZWJ1 ZyhGMTAxLCJjbHNpZiBkaXNjYXJkIiwiIixjenNlZW4pOwotCX0KLSNlbmRpZiAvKiBERUJVRyAq LwotCWlmICgoY3hzZWVuIHx8IGN6c2VlbikgJiYgIWVwa3RzZW50KSB7IC8qIElmIGludGVycnVw dGVkICovCi0JICAgIHh4c2NyZWVuKFNDUl9TVCxTVF9JTlQsMGwsIiIpOyAvKiBzYXkgc28gKi8K LSNpZmRlZiBUTE9HCi0JICAgIGlmICh0cmFsb2cgJiYgIXRsb2dmbXQpCi0JICAgICAgZG94bG9n KHdoYXQscHNmc3BlYyxmc2l6ZSxiaW5hcnksMSwiSW50ZXJydXB0ZWQiKTsKLSNlbmRpZiAvKiBU TE9HICovCi0JfSBlbHNlIGlmIChkaXNjYXJkICYmICFlcGt0c2VudCkgeyAvKiBJZiBJJ20gcmVm dXNpbmcgKi8KLQkgICAgeHhzY3JlZW4oU0NSX1NULFNUX1JFRlUsMGwscmVmdXNlZCk7IC8qIHNh eSB3aHkgKi8KLSNpZmRlZiBUTE9HCi0JICAgIGlmICh0cmFsb2cgJiYgIXRsb2dmbXQpIHsKLQkJ Y2hhciBidWZbMTI4XTsKLQkJY2ttYWttc2coYnVmLDEyOCwiUmVmdXNlZDogIixyZWZ1c2VkLE5V TEwsTlVMTCk7Ci0JCWRveGxvZyh3aGF0LHBzZnNwZWMsZnNpemUsYmluYXJ5LDEsYnVmKTsKLQkg ICAgfQotI2VuZGlmIC8qIFRMT0cgKi8KLQl9IGVsc2UgaWYgKCFlcGt0cmN2ZCAmJiAhZXBrdHNl bnQgJiYgIWN4c2VlbiAmJiAhY3pzZWVuKSB7Ci0JICAgIENLX09GRl9UIHp6OwotCSAgICB6eiA9 IGZmYzsKLSNpZmRlZiBDS19SRVNFTkQKLQkgICAgaWYgKHNlbmRtb2RlID09IFNNX1JFU0VORCB8 fCBzZW5kbW9kZSA9PSBTTV9QU0VORCkKLQkgICAgICB6eiArPSBzZW5kc3RhcnQ7Ci0jZW5kaWYg LyogQ0tfUkVTRU5EICovCi0JICAgIGRlYnVnKEYxMDEsImNsc2lmIGZzdGF0cyIsIiIsenopOwot CSAgICBmc3RhdHMoKTsJCQkvKiBVcGRhdGUgc3RhdGlzdGljcyAqLwotCSAgICBpZiAoCQkJLyog V2FzIHRoZSB3aG9sZSBmaWxlIHNlbnQ/ICovCi0jaWZkZWYgVk1TCi0JCTAJCQkvKiBOb3QgYSBy ZWxpYWJsZSBjaGVjayBpbiBWTVMgKi8KLSNlbHNlCi0jaWZkZWYgU1RSQVRVUwotCQkwCQkJLyog UHJvYmFibHkgbm90IGZvciBWT1MgZWl0aGVyICovCi0jZWxzZQotCQl6eiA8IGZzaXplCi0jaWZk ZWYgQ0tfQ1RSTFoKLQkJJiYgKChlb2ZtZXRob2QgIT0gWFlFT0ZfWiAmJiAhYmluYXJ5KSB8fCBi aW5hcnkpCi0jZW5kaWYgLyogQ0tfQ1RSTFogKi8KLSNlbmRpZiAvKiBTVFJBVFVTICovCi0jZW5k aWYgLyogVk1TICovCi0JCSkgewotCQl4eHNjcmVlbihTQ1JfU1QsU1RfSU5ULDBsLCIiKTsKLSNp ZmRlZiBUTE9HCi0JCWlmICh0cmFsb2cgJiYgIXRsb2dmbXQpCi0JCSAgZG94bG9nKHdoYXQscHNm c3BlYyxmc2l6ZSxiaW5hcnksMSwiSW5jb21wbGV0ZSIpOwotI2VuZGlmIC8qIFRMT0cgKi8KLQkg ICAgfSBlbHNlIHsKLSNpZmRlZiBDT01NRU5UCi0JCS8qIE5vdCB5ZXQgLS0gd2UgZG9uJ3QgaGF2 ZSBjb25maXJtYXRpb24gZnJvbSB0aGUgcmVjZWl2ZXIgKi8KLQkJeHhzY3JlZW4oU0NSX1NULFNU X09LLDBsLCIiKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0jaWZkZWYgVExPRwotCQlpZiAodHJh bG9nICYmICF0bG9nZm10KQotCQkgIGRveGxvZyh3aGF0LHBzZnNwZWMsZnNpemUsYmluYXJ5LDAs IiIpOwotI2VuZGlmIC8qIFRMT0cgKi8KLQkgICAgfQotCX0KLSAgICB9Ci0gICAgaV9pc29wZW4g PSAwOwotICAgIGhjZmxnID0gMDsJCQkJLyogUmVzZXQgZmxhZ3MgKi8KLSAgICBzZW5kc3RhcnQg PSAoQ0tfT0ZGX1QpMDsJCS8qIERvbid0IGRvIHRoaXMgYWdhaW4hICovCi0jaWZkZWYgQ09NTUVO VAotLyoKLSAgVGhpcyBwcmV2ZW50cyBhIHN1YnNlcXVlbnQgY2FsbCB0byBjbHNvZigpIGZyb20g ZGVsZXRpbmcgdGhlIGZpbGUKLSAgd2hlbiBnaXZlbiB0aGUgZGlzY2FyZCBmbGFnLgotKi8KLSAg ICAqZmlsbmFtID0gJ1wwJzsJCQkvKiBhbmQgY3VycmVudCBmaWxlIG5hbWUgKi8KLSNlbmRpZiAv KiBDT01NRU5UICovCi0gICAgcmV0dXJuKHgpOwotfQotCi0KLS8qICBDIEwgUyBPIEYgIC0tICBD bG9zZSBhbiBvdXRwdXQgZmlsZS4gICovCi0KLS8qICBDYWxsIHdpdGggZGlzcCAhPSAwIGlmIGZp bGUgaXMgdG8gYmUgZGlzY2FyZGVkLiAgKi8KLS8qICBSZXR1cm5zIC0xIHVwb24gZmFpbHVyZSB0 byBjbG9zZSwgMCBvciBncmVhdGVyIG9uIHN1Y2Nlc3MuICovCi0KLWludAotY2xzb2YoZGlzcCkg aW50IGRpc3A7IHsKLSAgICBpbnQgeCA9IDA7Ci0gICAgZXh0ZXJuIGludCBzdWNjZXNzOwotCi0g ICAgZmNwcygpOwkJCQkvKiBDYWxjdWxhdGUgQ1BTIHF1aWNrbHkgKi8KLQotICAgIGRlYnVnKEYx MDEsImNsc29mIGRpc3AiLCIiLGRpc3ApOwotICAgIGRlYnVnKEYxMDEsImNsc29mIGN4c2VlbiIs IiIsY3hzZWVuKTsKLSAgICBkZWJ1ZyhGMTAxLCJjbHNvZiBzdWNjZXNzIiwiIixzdWNjZXNzKTsK LQotICAgIGRlYnVnKEYxMDEsImNsc29mIG9faXNvcGVuIiwiIixvX2lzb3Blbik7Ci0gICAgaWYg KGZuY3NhdiAhPSAtMSkgewkJCS8qIFNhdmVkIGZpbGUgY29sbGlzaW9uIGFjdGlvbi4uLiAqLwot CWZuY2FjdCA9IGZuY3NhdjsJCS8qIFJlc3RvcmUgaXQuICovCi0JZm5jc2F2ID0gLTE7CQkJLyog VW5zYXZlIGl0LiAqLwotICAgIH0KLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgIGlmICgobG9jYWwp ICYmICghcXVpZXQpKQkJLyogT25seSBkbyB0aGlzIGlmIGxvY2FsICYgbm90IHF1aWV0ICovCi0g ICAgICBjb25ub2lfbXQoKTsKLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotICAgIGlmIChvX2lz b3BlbiAmJiAhY2FsaWJyYXRlKSB7Ci0JaWYgKCh4ID0gemNsb3NlKFpPRklMRSkpIDwgMCkgeyAv KiBUcnkgdG8gY2xvc2UgdGhlIGZpbGUgKi8KLQkgICAgdGxvZyhGMTAwLCJGYWlsdXJlIHRvIGNs b3NlIixmaWxuYW0sMEwpOwotCSAgICB4eHNjcmVlbihTQ1JfU1QsU1RfRVJSLDBsLCJDYW4ndCBj bG9zZSBmaWxlIik7Ci0jaWZkZWYgVExPRwotCSAgICBpZiAodHJhbG9nICYmICF0bG9nZm10KQot CSAgICAgIGRveGxvZyh3aGF0LHByZnNwZWMsZnNpemUsYmluYXJ5LDEsIkNhbid0IGNsb3NlIGZp bGUiKTsKLSNlbmRpZiAvKiBUTE9HICovCi0JfSBlbHNlIGlmIChkaXNwKSB7CQkvKiBJbnRlcnJ1 cHRlZCBvciByZWZ1c2VkICovCi0JICAgIGlmIChrZWVwID09IDAgfHwJCS8qIElmIG5vdCBrZWVw aW5nIGluY29tcGxldGUgZmlsZXMgKi8KLQkJKGtlZXAgPT0gU0VUX0FVVE8gJiYgYmluYXJ5ID09 IFhZRlRfVCkKLQkJKSB7Ci0JCWlmICgqZmlsbmFtICYmICh3aGF0ICYgV19SRUNWKSkgLyogQU5E IHdlJ3JlIHJlY2VpdmluZyAqLwotCQkgIHpkZWxldChmaWxuYW0pOwkvKiBPTkxZIFRIRU4sIGRl bGV0ZSBpdCAqLwotCQlpZiAod2hhdCAmIFdfS0VSTUlUKSB7Ci0JCSAgICBkZWJ1ZyhGMTAwLCJj bHNvZiBpbmNvbXBsZXRlIGRpc2NhcmRlZCIsIiIsMCk7Ci0JCSAgICB0bG9nKEYxMDAsIiBpbmNv bXBsZXRlOiBkaXNjYXJkZWQiLCIiLDBMKTsKLQkJICAgIGlmICghZXBrdHJjdmQgJiYgIWVwa3Rz ZW50KSB7Ci0JCQl4eHNjcmVlbihTQ1JfU1QsU1RfRElTQywwbCwiIik7Ci0jaWZkZWYgVExPRwot CQkJaWYgKHRyYWxvZyAmJiAhdGxvZ2ZtdCkKLQkJCSAgZG94bG9nKHdoYXQscHJmc3BlYyxmc2l6 ZSxiaW5hcnksMSwiRGlzY2FyZGVkIik7Ci0jZW5kaWYgLyogVExPRyAqLwotCQkgICAgfQotCQl9 Ci0JICAgIH0gZWxzZSB7CQkJLyogS2VlcCBpbmNvbXBsZXRlIGNvcHkgKi8KLQkJZGVidWcoRjEw MCwiY2xzb2YgZnN0YXRzIDEiLCIiLDApOwotCQlmc3RhdHMoKTsKLQkJaWYgKCFkaXNjYXJkKSB7 CSAvKiBVbmxlc3MgZGlzY2FyZGluZyBmb3Igb3RoZXIgcmVhc29uLi4uICovCi0JCSAgICBpZiAo d2hhdCAmIFdfS0VSTUlUKSB7Ci0JCQlkZWJ1ZyhGMTAwLCJjbG9zZiBpbmNvbXBsZXRlIGtlcHQi LCIiLDApOwotCQkJdGxvZyhGMTAwLCIgaW5jb21wbGV0ZToga2VwdCIsIiIsMEwpOwotCQkgICAg fQotCQl9Ci0JCWlmICh3aGF0ICYgV19LRVJNSVQpIHsKLQkJICAgIGlmICghZXBrdHJjdmQgJiYg IWVwa3RzZW50KSB7Ci0JCQl4eHNjcmVlbihTQ1JfU1QsU1RfSU5DLDBsLCIiKTsKLSNpZmRlZiBU TE9HCi0JCQlpZiAodHJhbG9nICYmICF0bG9nZm10KQotCQkJICBkb3hsb2cod2hhdCxwcmZzcGVj LGZzaXplLGJpbmFyeSwxLCJJbmNvbXBsZXRlIik7Ci0jZW5kaWYgLyogVExPRyAqLwotCQkgICAg fQotCQl9Ci0JICAgIH0KLQl9Ci0gICAgfQotICAgIGlmIChvX2lzb3BlbiAmJiB4ID4gLTEgJiYg IWRpc3ApIHsKLQlkZWJ1ZyhGMTEwLCJjbHNvZiBPSyIscmZzcGVjLDApOwotCW1ha2VzdHIoJnJm c3BlYyxwcmZzcGVjKTsKLQltYWtlc3RyKCZycmZzcGVjLHBycmZzcGVjKTsKLQlmc3RhdHMoKTsK LQlpZiAoIWVwa3RyY3ZkICYmICFlcGt0c2VudCAmJiAhY3hzZWVuICYmICFjenNlZW4pIHsKLQkg ICAgeHhzY3JlZW4oU0NSX1NULFNUX09LLDBMLCIiKTsKLSNpZmRlZiBUTE9HCi0JICAgIGlmICh0 cmFsb2cgJiYgIXRsb2dmbXQpCi0JICAgICAgZG94bG9nKHdoYXQscmZzcGVjLGZzaXplLGJpbmFy eSwwLCIiKTsKLSNlbmRpZiAvKiBUTE9HICovCi0JfQotICAgIH0KLSAgICByc19sZW4gPSAoQ0tf T0ZGX1QpMDsKLSAgICBvX2lzb3BlbiA9IDA7CQkJLyogVGhlIGZpbGUgaXMgbm90IG9wZW4gYW55 IG1vcmUuICovCi0gICAgY3hzZWVuID0gMDsJCQkJLyogUmVzZXQgcGVyLWZpbGUgaW50ZXJydXB0 aW9uIGZsYWcgKi8KLSAgICByZXR1cm4oeCk7CQkJCS8qIFNlbmQgYmFjayB6Y2xvc2UoKSByZXR1 cm4gY29kZS4gKi8KLX0KLQotI2lmZGVmIFNVTk9TNFM1Ci10b2xvd2VyKGMpIGNoYXIgYzsgeyBy ZXR1cm4oKGMpLSdBJysnYScpOyB9Ci10b3VwcGVyKGMpIGNoYXIgYzsgeyByZXR1cm4oKGMpLSdh JysnQScpOyB9Ci0jZW5kaWYgLyogU1VOT1M0UzUgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KCmRp ZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY2Zucy5j IGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NmbnMuYwpkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGYyYmQ4Ni4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTku MC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY2Zucy5jCisrKyAvZGV2L251bGwKQEAgLTEs NzE2NSArMCwwIEBACi1jaGFyICpmbnN2ID0gIkMtS2VybWl0IGZ1bmN0aW9ucywgOS4wLjIzMywg MyBKdW4gMjAxMSI7Ci0KLWNoYXIgKm5tW10gPSAgeyAiRGlzYWJsZWQiLCAiTG9jYWwgb25seSIs ICJSZW1vdGUgb25seSIsICJFbmFibGVkIiB9OwotCi0vKiAgQyBLIEMgRiBOIFMgIC0tICBTeXN0 ZW0taW5kZXBlbmRlbnQgS2VybWl0IHByb3RvY29sIHN1cHBvcnQgZnVuY3Rpb25zLiAgKi8KLQot LyogIC4uLlBhcnQgMSAob3RoZXJzIG1vdmVkIHRvIGNrY2ZuMiwzIHRvIG1ha2UgdGhpcyBtb2R1 bGUgc21hbGxlcikgKi8KLQotLyoKLSAgQXV0aG9yOiBGcmFuayBkYSBDcnV6IDxmZGNAY29sdW1i aWEuZWR1PiwKLSAgQ29sdW1iaWEgVW5pdmVyc2l0eSBBY2FkZW1pYyBJbmZvcm1hdGlvbiBTeXN0 ZW1zLCBOZXcgWW9yayBDaXR5LgotCi0gIENvcHlyaWdodCAoQykgMTk4NSwgMjAxMSwKLSAgICBU cnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgot ICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZp bGUgb3IgdGhlCi0gICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3Ig ZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCi0qLwotLyoKLSBTeXN0ZW0tZGVwZW5kZW50IHBy aW1pdGl2ZXMgZGVmaW5lZCBpbjoKLQotICAgY2s/dGlvLmMgLS0gdGVybWluYWwgKGNvbW11bmlj YXRpb25zKSBpL28KLSAgIGN4P2Zpby5jIC0tIGZpbGUgaS9vLCBkaXJlY3Rvcnkgc3RydWN0dXJl Ci0qLwotI2luY2x1ZGUgImNrY3N5bS5oIgkJCS8qIE5lZWRlZCBmb3IgU3RyYXR1cyBWT1MgKi8K LSNpbmNsdWRlICJja2Nhc2MuaCIJCQkvKiBBU0NJSSBzeW1ib2xzICovCi0jaW5jbHVkZSAiY2tj ZGViLmgiCQkJLyogRGVidWcgZm9ybWF0cywgdHlwZWRlZnMsIGV0Yy4gKi8KLSNpbmNsdWRlICJj a2NrZXIuaCIJCQkvKiBTeW1ib2wgZGVmaW5pdGlvbnMgZm9yIEtlcm1pdCAqLwotI2luY2x1ZGUg ImNrY3hsYS5oIgkJCS8qIENoYXJhY3RlciBzZXQgc3ltYm9scyAqLwotI2luY2x1ZGUgImNrY25l dC5oIiAgICAgICAgICAgICAgICAgICAgIC8qIFZNUyBkZWZpbml0aW9uIG9mIFRDUFNPQ0tFVCAq LwotI2lmZGVmIE9TMgotI2lmZGVmIE9TMk9OTFkKLSNpbmNsdWRlIDxvczIuaD4KLSNlbmRpZiAv KiBPUzJPTkxZICovCi0jaW5jbHVkZSAiY2tvY29uLmgiCi0jZW5kaWYgLyogT1MyICovCi0KLWlu dCBkb2NyYyAgPSAwOwkJCQkvKiBBY2N1bXVsYXRlIENSQyBmb3IgXHYoY3JjMTYpICovCi1sb25n IGNyYzE2ID0gMEw7CQkJLyogRmlsZSBDUkMgPSBcdihjcmMxNikgKi8KLWludCBnbmZlcnJvciA9 IDA7CQkJLyogZ25maWxlKCkgZmFpbHVyZSByZWFzb24gKi8KLQotZXh0ZXJuIENIQVIgZmVvbDsK LWV4dGVybiBpbnQgYnl0ZW9yZGVyLCB4ZmxnLCB3aGF0LCBmbWFzaywgY3hzZWVuLCBjenNlZW4s IG5zY2FuZmlsZSwgc3lzaW5kZXg7Ci1leHRlcm4gaW50IHhjbWRzcmMsIGRpc3BvcywgbWF0Y2hm aWZvOwotZXh0ZXJuIGludCBpbnNlcnZlcjsKLQotZXh0ZXJuIGludCBub2xpbmtzOwotI2lmZGVm IFZNU09SVU5JWAotZXh0ZXJuIGludCB6Z2ZzX2RpcjsKLSNpZmRlZiBDS1NZTUxJTksKLWV4dGVy biBpbnQgemdmc19saW5rOwotI2VuZGlmIC8qIENLU1lNTElOSyAqLwotI2VuZGlmIC8qIFZNU09S VU5JWCAqLwotCi0jaWZuZGVmIE5PWEZFUgotCi0jaWZuZGVmIE5PSUNQCi0jaWZuZGVmIE5PU1BM Ci1leHRlcm4gY2hhciAqIGNsY21kczsKLWV4dGVybiBpbnQgaGF2ZXVybDsKLSNpZmRlZiBDS19B UEMKLWV4dGVybiBpbnQgYXBjYWN0aXZlLCBhZGxfYXNrOwotI2VuZGlmIC8qIENLX0FQQyAqLwot I2VuZGlmIC8qIE5PU1BMICovCi0jZW5kaWYgLyogTk9JQ1AgKi8KLQotZXh0ZXJuIGludCByZW1m aWxlOwotCi0vKiAobW92ZSB0aGVzZSBwcm90b3R5cGVzIHRvIHRoZSBhcHByb3ByaWF0ZSAuaCBm aWxlcy4uLikgKi8KLQotI2lmZGVmIENPTU1FTlQKLS8qIE5vdCB1c2VkICovCi0jaWZkZWYgVk1T Ci1fUFJPVE9UWVAoIGludCBnZXR2bnVtLCAoY2hhciAqKSApOwotI2VuZGlmIC8qIFZNUyAqLwot I2VuZGlmIC8qIENPTU1FTlQgKi8KLQotX1BST1RPVFlQKCBzdGF0aWMgaW50IGJnZXRwa3QsIChp bnQpICk7Ci0jaWZuZGVmIE5PQ1NFVFMKLV9QUk9UT1RZUCggaW50IGxvb2t1cCwgKHN0cnVjdCBr ZXl0YWJbXSwgY2hhciAqLCBpbnQsIGludCAqKSApOwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSNp Zm5kZWYgTk9TUEwKLV9QUk9UT1RZUCggaW50IHp6c3RyaW5nLCAoY2hhciAqLCBjaGFyICoqLCBp bnQgKikgKTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZkZWYgT1MyCi0jaW5jbHVkZSA8aW8u aD4KLSNpZmRlZiBPUzJPTkxZCi0jaW5jbHVkZSA8b3MyLmg+Ci0jZW5kaWYgLyogT1MyT05MWSAq LwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgVk1TCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNl bmRpZiAvKiBWTVMgKi8KLQotLyogRXh0ZXJuYWxzIGZyb20gY2tjbWFpLmMgKi8KLQotZXh0ZXJu IGludCBzcnZjZG1zZywgc3J2aWRsLCBpZGxldG1vOwotZXh0ZXJuIGNoYXIgKiBjZG1zZ2ZpbGVb XTsKLWV4dGVybiBpbnQgc3BzaXosIHNwbWF4LCBycHNpeiwgdGltaW50LCBzcnZ0aW0sIHJ0aW1v LCBucGFkLCBlYnEsIGVicWZsZywKLSBycHQsIHJwdHEsIHJwdGZsZywgY2FwYXMsIGtlZXAsIGZu Y2FjdCwgcGt0dGltLCBhdXRvcGFyLCBzcHNpenIsIHhpdHN0YTsKLWV4dGVybiBpbnQgcGt0bnVt LCBiY3RyLCBiY3R1LCBiY3RmLCBiY3RsLCBjbGZpbHMsIHNidWZudW0sIHByb3RvY29sLAotIHNp emUsIG9zaXplLCBzcGt0bCwgbmZpbHMsIGNrd2FybiwgdGltZWYsIHNwc2l6Ziwgc25kdHlwLCBy Y3Z0eXAsIHN1Y2Nlc3M7Ci1leHRlcm4gaW50IHBhcml0eSwgdHVybiwgbmV0d29yaywgd2hhdHJ1 LCBmc2VjcywganVzdG9uZSwgc2xvc3RhcnQsCi0gY2tkZWxheSwgZGlzcGxhLCBteXBhZG4sIG1v dmluZywgcmVjdXJzaXZlLCBuZXR0eXBlOwotZXh0ZXJuIGxvbmcgZmlsY250OwotZXh0ZXJuIENL X09GRl9UCi0gdGZjLCBmc2l6ZSwgc2VuZHN0YXJ0LCByc19sZW4sIGZsY2ksIGZsY28sIHRsY2ks IHRsY28sIGNhbGlicmF0ZTsKLWV4dGVybiBsb25nIGZpbHJlaiwgb2xkY3BzLCBjcHMsIHBlYWtj cHMsIGNjdSwgY2NwLCBmaWxlc3RhdHVzOwotZXh0ZXJuIGludCBmYmxrc2l6LCBmcmVjbCwgZnJl Y2ZtLCBmb3JnLCBmY2N0cmwsIGZkaXNwbGEsIHNraXBidXA7Ci1leHRlcm4gaW50IHNwYWNrZXRz LCBycGFja2V0cywgdGltZW91dHMsIHJldHJhbnMsIGNydW5jaGVkLCB3bWF4LCB3Y3VyOwotZXh0 ZXJuIGludCBoY2ZsZywgYmluYXJ5LCBmbmNudiwgYl9zYXZlLCBmX3NhdmUsIHNlcnZlcjsKLWV4 dGVybiBpbnQgbmFrc3RhdGUsIGRpc2NhcmQsIHJlamVjdGlvbiwgbG9jYWwsIHhmZXJtb2RlLCBp bnRlcnJ1cHRlZDsKLWV4dGVybiBpbnQgcnEsIHJxZiwgc3EsIHdzbG90cywgd3Nsb3RuLCB3c2xv dHIsIHdpbmxvLCB1cnBzaXosIHJsbjsKLWV4dGVybiBpbnQgZm5zcGF0aCwgZm5ycGF0aCwgZW9m bWV0aG9kLCBkaXJhY3RpdmUsIHdoYXRydTIsIHdlYXJlYWxpa2U7Ci1leHRlcm4gaW50IGF0Y2Fw ciwgYXRjYXBiLCBhdGNhcHU7Ci1leHRlcm4gaW50IGxwY2FwciwgbHBjYXBiLCBscGNhcHU7Ci1l eHRlcm4gaW50IHN3Y2Fwciwgc3djYXBiLCBzd2NhcHU7Ci1leHRlcm4gaW50IGxzY2FwciwgbHNj YXBiLCBsc2NhcHU7Ci1leHRlcm4gaW50IHJzY2FwciwgcnNjYXBiLCByc2NhcHU7Ci1leHRlcm4g aW50IHJwdGVuYSwgcnB0bWluOwotZXh0ZXJuIGludCBzc2VxdGJsW107Ci1leHRlcm4gaW50IG51 bWVycnMsIG56eG9wdHM7Ci1leHRlcm4gbG9uZyBycHRuOwotZXh0ZXJuIGludCBtYXh0cnk7Ci1l eHRlcm4gaW50IHN0ZG91ZjsKLWV4dGVybiBpbnQgc2VuZG1vZGU7Ci1leHRlcm4gaW50IGNhcnJp ZXIsIHR0cHJ0eTsKLWV4dGVybiBpbnQgZ19mbnJwYXRoOwotI2lmZGVmIFRDUFNPQ0tFVAotZXh0 ZXJuIGludCB0dG5wcm90bzsKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLQotI2lmbmRlZiBOT1NQ TAotZXh0ZXJuIGludCBzbmR4aW4sIHNuZHhoaSwgc25keGxvOwotI2VuZGlmIC8qIE5PU1BMICov Ci0KLWV4dGVybiBpbnQgZ19iaW5hcnksIGdfZm5jbnY7Ci0KLSNpZmRlZiBHRlRJTUVSCi1leHRl cm4gQ0tGTE9BVCBmcGZzZWNzOwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLQotI2lmZGVmIE9TMgot ZXh0ZXJuIHN0cnVjdCB6YXR0ciBpYXR0cjsKLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIFBJ UEVTRU5ECi1leHRlcm4gaW50IHVzZXBpcGVzOwotI2VuZGlmIC8qIFBJUEVTRU5EICovCi1leHRl cm4gaW50IHBpcGVzZW5kOwotCi0jaWZkZWYgU1RSRUFNSU5HCi1leHRlcm4gaW50IHN0cmVhbXJx LCBzdHJlYW1pbmcsIHN0cmVhbWVkLCBzdHJlYW1vazsKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8K LWV4dGVybiBpbnQgcmVsaWFibGUsIGNsZWFycnEsIGNsZWFyZWQsIHVyY2xlYXI7Ci0KLWV4dGVy biBpbnQKLSAgYXRlbmNpLCBhdGVuY28sIGF0ZGF0aSwgYXRkYXRvLCBhdGxlbmksIGF0bGVubywg YXRibGtpLCBhdGJsa28sCi0gIGF0dHlwaSwgYXR0eXBvLCBhdHNpZGksIGF0c2lkbywgYXRzeXNp LCBhdHN5c28sIGF0ZGlzaSwgYXRkaXNvOwotCi1leHRlcm4gaW50IGJpZ3Nic2l6LCBiaWdyYnNp ejsKLWV4dGVybiBjaGFyICp2ZXJzaW87Ci1leHRlcm4gY2hhciAqZmlsZWZpbGU7Ci1leHRlcm4g Y2hhciB3aG9hcmV1W10sICogY2tzeXNpZDsKLQotI2lmbmRlZiBOT1NFUlZFUgotZXh0ZXJuIGlu dCBuZ2V0cGF0aDsKLWV4dGVybiBjaGFyICogZ2V0cGF0aFtdOwotZXh0ZXJuIGludCBmcm9tZ2V0 cGF0aDsKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotCi0jaWZkZWYgQ0tfTE9HSU4KLWV4dGVybiBp bnQgaXNndWVzdDsKLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotCi1leHRlcm4gaW50IHNydmNtZGxl bjsKLWV4dGVybiBDSEFSICpzcnZjbWQsICogZXBrdG1zZzsKLWV4dGVybiBDSEFSIHBhZGNoLCBt eXBhZGMsIGVvbCwgc2VvbCwgY3RscSwgbXljdGxxLCBzc3RhdGUsIG15cnB0cTsKLWV4dGVybiBD SEFSICpkYXRhLCBwYWRidWZbXSwgc3RjaHIsIG15c3RjaDsKLWV4dGVybiBDSEFSICpzcnZwdHI7 Ci1leHRlcm4gQ0hBUiAqcmRhdGFwOwotZXh0ZXJuIGNoYXIgKmNtYXJnLCAqY21hcmcyLCAqKmNt bGlzdCwgZmlsbmFtW10sIG9maWxuYW1bXTsKLWV4dGVybiBjaGFyICpyZnNwZWMsICpwcmZzcGVj LCAqcnJmc3BlYywgKnBycmZzcGVjLCAqc2ZzcGVjLCAqcHNmc3BlYywgKnJmc3BlYzsKLWV4dGVy biBjaGFyIGZzcGVjW107Ci1leHRlcm4gaW50IGZzcGVjbGVuOwotCi0jaWZuZGVmIE5PTVNFTkQK LWV4dGVybiBzdHJ1Y3QgZmlsZWxpc3QgKiBmaWxlaGVhZCwgKiBmaWxlbmV4dDsKLWV4dGVybiBp bnQgYWRkbGlzdDsKLSNlbmRpZiAvKiBOT01TRU5EICovCi0KLV9QUk9UT1RZUCggaW50IGxzbG9v aywgKHVuc2lnbmVkIGludCBiKSApOyAvKiBMb2NraW5nIFNoaWZ0IExvb2thaGVhZCAqLwotX1BS T1RPVFlQKCBpbnQgc3plb2YsIChDSEFSICpzKSApOwotX1BST1RPVFlQKCBWT0lEIGZubGlzdCwg KHZvaWQpICk7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLWV4dGVybiBDS19PRkZfVCBmZmM7Ci0K LS8qIENoYXJhY3RlciBzZXQgVHJhbnNsYXRpb24gKi8KLQotI2lmbmRlZiBOT0NTRVRTCi1leHRl cm4gaW50IHRjaGFyc2V0LCBmY2hhcnNldCwgZGNzZXQ3LCBkY3NldDg7Ci1leHRlcm4gaW50IGZj c19zYXZlLCB0Y3Nfc2F2ZTsKLWV4dGVybiBpbnQgbnRjc2V0cywgeGxhdHlwZSwgY3NlcXRhYltd OwotZXh0ZXJuIHN0cnVjdCBjc2luZm8gdGNzaW5mb1tdLCBmY3NpbmZvW107Ci1leHRlcm4gaW50 IHJfY3NldCwgc19jc2V0LCBhZmNzZXRbXTsKLSNpZmRlZiBVTklDT0RFCi1leHRlcm4gaW50IHVj c29yZGVyLCBmaWxlb3JkZXI7Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotCi1fUFJPVE9UWVAoIENI QVIgaWRlbnQsIChDSEFSKSApOwkvKiBJZGVudGl0eSB0cmFuc2xhdGlvbiBmdW5jdGlvbiAqLwot Ci0vKiBBcnJheXMgb2YgYW5kIHBvaW50ZXJzIHRvIGNoYXJhY3RlciB0cmFuc2xhdGlvbiBmdW5j dGlvbnMgKi8KLQotI2lmZGVmIENLX0FOU0lDCi1leHRlcm4gQ0hBUiAoKnJ4KShDSEFSKTsgLyog UG9pbnRlciB0byBpbnB1dCBjaGFyYWN0ZXIgdHJhbnNsYXRpb24gZnVuY3Rpb24gKi8KLWV4dGVy biBDSEFSICgqc3gpKENIQVIpOyAvKiBQb2ludGVyIHRvIG91dHB1dCBjaGFyYWN0ZXIgdHJhbnNs YXRpb24gZnVuY3Rpb24gKi8KLWV4dGVybiBDSEFSICgqeGxzW01BWFRDU0VUUysxXVtNQVhGQ1NF VFMrMV0pKENIQVIpOyAvKiBCeXRlLXRvLUJ5dGUgU2VuZCAqLwotZXh0ZXJuIENIQVIgKCp4bHJb TUFYVENTRVRTKzFdW01BWEZDU0VUUysxXSkoQ0hBUik7IC8qIEJ5dGUtdG8tQnl0ZSBSZWN2ICov Ci0jaWZkZWYgVU5JQ09ERQotZXh0ZXJuIGludCAoKnh1dCkoVVNIT1JUKTsJLyogVHJhbnNsYXRp b24gZnVuY3Rpb24gVUNTIHRvIFRDUyAqLwotZXh0ZXJuIGludCAoKnh1ZikoVVNIT1JUKTsJLyog VHJhbnNsYXRpb24gZnVuY3Rpb24gVUNTIHRvIEZDUyAqLwotZXh0ZXJuIFVTSE9SVCAoKnh0dSko Q0hBUik7CS8qIFRyYW5zbGF0aW9uIGZ1bmN0aW9uIFRDUyB0byBVQ1MgKi8KLWV4dGVybiBVU0hP UlQgKCp4ZnUpKENIQVIpOwkvKiBUcmFuc2xhdGlvbiBmdW5jdGlvbiBGQ1MgdG8gVUNTICovCi0j ZW5kaWYgLyogVU5JQ09ERSAqLwotCi0jZWxzZSAvKiBUaGUgc2FtZSBkZWNsYXJhdGlvbnMgYWdh aW4gZm9yIG5vbi1BTlNJIGNvbWlsZXJzLi4uICovCi0KLWV4dGVybiBDSEFSICgqcngpKCk7Ci1l eHRlcm4gQ0hBUiAoKnN4KSgpOwotZXh0ZXJuIENIQVIgKCp4bHNbTUFYVENTRVRTKzFdW01BWEZD U0VUUysxXSkoKTsKLWV4dGVybiBDSEFSICgqeGxyW01BWFRDU0VUUysxXVtNQVhGQ1NFVFMrMV0p KCk7Ci0jaWZkZWYgVU5JQ09ERQotZXh0ZXJuIGludCAoKnh1dCkoKTsKLWV4dGVybiBpbnQgKCp4 dWYpKCk7Ci1leHRlcm4gVVNIT1JUICgqeHR1KSgpOwotZXh0ZXJuIFVTSE9SVCAoKnhmdSkoKTsK LSNlbmRpZiAvKiBVTklDT0RFICovCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSNlbmRpZiAvKiBO T0NTRVRTICovCi0KLS8qIChQV1ApIGV4dGVybmFsIGRlZi4gb2YgdGhpbmdzIHVzZWQgaW4gYnVm ZmVyZWQgZmlsZSBpbnB1dCBhbmQgb3V0cHV0ICovCi0KLSNpZmRlZiBEWU5BTUlDCi1leHRlcm4g Y2hhciAqemluYnVmZmVyLCAqem91dGJ1ZmZlcjsKLSNlbHNlCi1leHRlcm4gY2hhciB6aW5idWZm ZXJbXSwgem91dGJ1ZmZlcltdOwotI2VuZGlmIC8qIERZTkFNSUMgKi8KLWV4dGVybiBjaGFyICp6 aW5wdHIsICp6b3V0cHRyOwotZXh0ZXJuIGludCB6aW5jbnQsIHpvdXRjbnQsIHpvYnVmc2l6ZSwg eGZyeGxhOwotCi1leHRlcm4gbG9uZyBjcmN0YVtdLCBjcmN0YltdOwkJLyogQ1JDLTE2IGdlbmVy YXRpb24gdGFibGVzICovCi1leHRlcm4gaW50IHJzZXF0YmxbXTsJCQkvKiBSZWMnZC1wYWNrZXQg c2VxdWVuY2UgIyB0YWJsZSAqLwotCi0jaWZuZGVmIE5PWEZFUgotCi0vKiBDcml0ZXJpYSB1c2Vk IGJ5IGduZmlsZSgpLi4uICovCi0KLWNoYXIgc25kYWZ0ZXJbMTldICAgPSB7IE5VTCwgTlVMIH07 Ci1jaGFyIHNuZGJlZm9yZVsxOV0gID0geyBOVUwsIE5VTCB9OwotY2hhciBzbmRuYWZ0ZXJbMTld ICA9IHsgTlVMLCBOVUwgfTsKLWNoYXIgc25kbmJlZm9yZVsxOV0gPSB7IE5VTCwgTlVMIH07Ci1j aGFyICpzbmRleGNlcHRbTlNOREVYQ0VQVF0gID0geyBOVUxMLCBOVUxMIH07Ci1jaGFyICpyY3Zl eGNlcHRbTlNOREVYQ0VQVF0gID0geyBOVUxMLCBOVUxMIH07Ci1DS19PRkZfVCBzbmRzbWFsbGVy ID0gKENLX09GRl9UKS0xOwotQ0tfT0ZGX1Qgc25kbGFyZ2VyICA9IChDS19PRkZfVCktMTsKLQot LyogVmFyaWFibGVzIGRlZmluZWQgaW4gdGhpcyBtb2R1bGUgYnV0IHNoYXJlZCBieSBvdGhlciBt b2R1bGVzLiAqLwotCi1pbnQgeGZyYmVsID0gMTsKLWNoYXIgKiBvZnBlcm1zID0gIiI7CQkJLyog T3V0cHV0IGZpbGUgcGVybWlzc2lvbnMgKi8KLWludCBhdXRvcGF0aCA9IDA7CQkJLyogU0VUIFJF Q0VJVkUgUEFUSE5BTUVTIEFVVE8gZmxhZyAqLwotCi0jaWZkZWYgQ0FMSUJSQVRFCi0jZGVmaW5l IENBTF9PIDMKLSNkZWZpbmUgQ0FMX00gMjUzCi0KLWludCBjYWxfaiA9IDA7Ci0KLUNIQVIKLWNh bF9hW10gPSB7Ci0gMTYsIDQ1LCA5OCwgIDMsIDUyLCA0MSwgMTQsICA3LCA3NiwxNjUsMTIyLCAx MSwxMDQsIDc3LDE2NiwgMTUsCi0xNjAsIDkzLCAxOCwgMTksMTEyLCA4NSwgNTQsIDIzLDIzMiwy MTMsIDkwLCAyNywgMTIsIDgxLDEyNiwgMzEsCi0gIDQsMjA1LCAzNCwgMzUsMTQ0LCA3MywxMTAs IDM5LCAyOCwxMzMsMjE4LCA0MywxNTYsIDY1LDEwMiwgNDcsCi0gODQsIDYxLCA1MCwgNTEsMjA4 LDExNywgODYsIDU1LCAgOCwyNDUsIDc0LCA1OSwgNDQsMTI1LDIyMiwgNjMsCi0gODAsICAxLDE2 MiwgNjcsMTE2LDEwNSwyMDYsIDcxLDEyMCwgIDksMjUwLCA3NSwgODgsIDk3LCAgNiwgNzksCi0x MDAsMjIxLCA4MiwgODMsIDM2LCA4OSwgOTQsIDg3LCA0MCwgMjEsMTA2LCA5MSwyMzYsMTQ1LDE1 MCwgOTUsCi0yMjgsIDMzLDEzMCwgOTksMTQ4LDEzNywxOTgsMTAzLDEwOCwxNjksIDQyLDEwNywx ODQsMTI5LCA3OCwxMTEsCi0gIDAsIDQ5LDExNCwxMTUsIDMyLDEyMSwyNTQsMTE5LDE3MiwgNTcs MTM4LDEyMywxNTIsMTc3LCAyMiwxMjcsCi0yNDAsMTkzLCAgMiwxMzEsMTc2LCAgNSwgMzgsMTM1 LDIwNCwyMjksIDEwLDEzOSwyMDAsMTYxLDE3NCwxNDMsCi0xMjgsIDE3LDE0NiwxNDcsIDY4LDE1 MywgMzAsMTUxLCA3MiwyMTcsMTcwLDE1NSwgMjQsMjA5LCA2MiwxNTksCi0gNjQsMjI1LDE5NCwx NjMsMjQ0LDIwMSwgNzAsMTY3LDIxNiwxOTcsMjM0LDE3MSwxODgsMTA5LDIzMCwxNzUsCi0yMTIs MTEzLDE3OCwxNzksMTMyLDE4NSwxOTAsMTgzLDEzNiwyNDksMjAyLDE4NywgOTIsMjQxLDExOCwx OTEsCi0gNDgsMjM3LCA2NiwxOTUsIDk2LDIzMywxNDIsMTk5LDI0OCwgMzcsIDU4LDIwMywgNjAs IDEzLDEzNCwyMDcsCi0gMjAsIDI5LDIxMCwyMTEsMTY0LDE0OSwxODIsMjE1LDIyMCwgMjUsIDI2 LDIxOSwxMjQsMTU3LDI0NiwyMjMsCi0xODAsMTQxLDIyNiwyMjcsMTkyLDEwMSwyMzgsMjMxLCA1 NiwgNjksMTU0LDIzNSwyNTIsMTczLCA0NiwyMzksCi0yMjQsMjUzLDI0MiwyNDMsMTk2LCA1Mywy MTQsMjQ3LDE2OCwxODEsMTg2LDI1MSwxNDAsMTg5LDE1OCwyNTUKLX07Ci0jZW5kaWYgLyogQ0FM SUJSQVRFICovCi0KLWNoYXIgKiByZl9lcnIgPSAiRXJyb3IgcmVjZWl2aW5nIGZpbGUiOwkvKiBy Y3ZmaWwoKSBlcnJvciBtZXNzYWdlICovCi0KLSNpZmRlZiBDS19TUEVFRAotc2hvcnQgY3RscFsy NTZdID0gewkJLyogQ29udHJvbC1QcmVmaXggdGFibGUgKi8KLSAgMSwxLDEsMSwxLDEsMSwxLDEs MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLCAvKiBDMCAgKi8K LSAgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAs MCwwLDAsMCwwLCAvKiBHMCAgKi8KLSAgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCww LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAotICAwLDAsMCwwLDAsMCwwLDAsMCwwLDAs MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsIC8qIERFTCAqLwotICAx LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEs MSwxLDEsIC8qIEMxICAqLwotICAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCww LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsIC8qIEcxICAqLwotICAwLDAsMCwwLDAsMCwwLDAs MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCi0gIDAsMCww LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAs MSAgLyogMjU1ICovCi19OwotI2VuZGlmIC8qIENLX1NQRUVEICovCi0KLWludCBzbmRzcmM7CQkv KiBGbGFnIGZvciB3aGVyZSB0byBnZXQgbmFtZXMgb2YgZmlsZXMgdG8gc2VuZDogKi8KLQkJCQkJ LyogLTE6IHpuZXh0KCkgZnVuY3Rpb24gKi8KLQkJCQkJLyogIDA6IHN0ZGluICovCi0JCQkJCS8q ID4wOiBsaXN0IGluIGNtbGlzdCBvciBvdGhlciBsaXN0ICovCi0JCQkJCS8qIC05OiBjYWxpYnJh dGUgKi8KLQotaW50ICBtZW1zdHI7CQkJCS8qIEZsYWcgZm9yIGlucHV0IGZyb20gbWVtb3J5IHN0 cmluZyAqLwotaW50ICBmdW5jc3RyOwkJCQkvKiBGbGFnIGZvciBpbnB1dCBmcm9tIGZ1bmN0aW9u ICovCi1pbnQgIGJlc3RsZW4gPSAwOwotaW50ICBtYXhzZW5kID0gMDsKLQotaW50IGduZl9iaW5h cnkgPSAwOwkJCS8qIFByZXZhaWxpbmcgeGZlciBtb2RlIGZvciBnbmZpbGUgKi8KLQotI2lmZGVm IHBkcDExCi0jZGVmaW5lIE1ZSU5JVExFTiAzMgotI2Vsc2UKLSNkZWZpbmUgTVlJTklUTEVOIDEw MAotI2VuZGlmIC8qIHBkcDExICovCi1DSEFSIG15aW5pdFtNWUlOSVRMRU5dOwkJCS8qIENvcHkg b2YgbXkgU2VuZC1Jbml0IGRhdGEgKi8KLQotLyogVmFyaWFibGVzIGxvY2FsIHRvIHRoaXMgbW9k dWxlICovCi0KLSNpZmRlZiBUTE9HCi0jaWZuZGVmIFhZWl9JTlRFUk5BTAotc3RhdGljCi0jZW5k aWYgLyogWFlaX0lOVEVSTkFMICovCi1jaGFyICpmbmNuYW1bXSA9IHsKLSAgInJlbmFtZSIsICJy ZXBsYWNlIiwgImJhY2t1cCIsICJhcHBlbmQiLCAiZGlzY2FyZCIsICJhc2siLAotICAidXBkYXRl IiwgImRhdGVzLWRpZmZlciIsICIiCi19OwotI2VuZGlmIC8qIFRMT0cgKi8KLQotc3RhdGljIGNo YXIgKm1lbXB0cjsJCQkvKiBQb2ludGVyIGZvciBtZW1vcnkgc3RyaW5ncyAqLwotCi0jaWZkZWYg Vk1TCi1leHRlcm4gaW50IGJhdGNoOwotI2Vsc2UKLWV4dGVybiBpbnQgYmFja2dyZDsKLSNlbmRp ZiAvKiBWTVMgKi8KLQotI2lmZGVmIENLX0NUUkxaCi1zdGF0aWMgaW50IGxhc3RjaGFyID0gMDsK LSNlbmRpZiAvKiBDS19DVFJMWiAqLwotCi0jaWZkZWYgQ0tfQU5TSUMKLXN0YXRpYyBpbnQgKCpm dW5jcHRyKSh2b2lkKTsJCS8qIFBvaW50ZXIgZm9yIGZ1bmN0aW9uIHN0cmluZ3MgKi8KLSNlbHNl Ci1zdGF0aWMgaW50ICgqZnVuY3B0cikoKTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotCi0jaWZk ZWYgcGRwMTEKLSNkZWZpbmUgQ01EU1RSTCA1MAotc3RhdGljIGNoYXIgY21kc3RyWzUwXTsJCQkv KiBTeXN0ZW0gY29tbWFuZCBzdHJpbmcuICovCi0jZWxzZQotI2lmZGVmIEJJR0JVRk9LCi0jZGVm aW5lIENNRFNUUkwgMTAyNAotI2Vsc2UKLSNkZWZpbmUgQ01EU1RSTCAyNTYKLSNlbmRpZiAvKiBC SUdCVUZPSyAqLwotc3RhdGljIGNoYXIgY21kc3RyW0NNRFNUUkwrMV07Ci0jZW5kaWYgLyogcGRw MTEgKi8KLQotc3RhdGljIGludCBkcmFpbjsJCQkvKiBGb3IgZHJhaW5pbmcgc3RhY2tlZC11cCBB Q0tzLiAqLwotCi1zdGF0aWMgaW50IGZpcnN0OwkJCS8qIEZsYWcgZm9yIGZpcnN0IGNoYXIgZnJv bSBpbnB1dCAqLwotc3RhdGljIENIQVIgdDsJCQkJLyogQ3VycmVudCBjaGFyYWN0ZXIgKi8KLSNp ZmRlZiBDT01NRU5UCi1zdGF0aWMgQ0hBUiBuZXh0OwkJCS8qIE5leHQgY2hhcmFjdGVyICovCi0j ZW5kaWYgLyogQ09NTUVOVCAqLwotCi1zdGF0aWMgaW50IGVicXNlbnQgPSAwOwkJCS8qIDh0aC1i aXQgcHJlZml4IGJpZCB0aGF0IEkgc2VudCAqLwotc3RhdGljIGludCBsc3N0YXRlID0gMDsJCQkv KiBMb2NraW5nIHNoaWZ0IHN0YXRlICovCi1zdGF0aWMgaW50IGxzcXVvdGUgPSAwOwkJCS8qIExv Y2tpbmcgc2hpZnQgcXVvdGUgKi8KLQotZXh0ZXJuIGludCBxdWlldDsKLQotLyogIEUgTiBDIFMg VCBSICAtLSAgRW5jb2RlIGEgc3RyaW5nIGZyb20gbWVtb3J5LiAqLwotCi0vKgotICBDYWxsIHRo aXMgaW5zdGVhZCBvZiBnZXRwa3QoKSBpZiBzb3VyY2UgaXMgYSBzdHJpbmcsIHJhdGhlciB0aGFu IGEgZmlsZS4KLSAgTm90ZTogQ2hhcmFjdGVyIHNldCB0cmFuc2xhdGlvbiBpcyBuZXZlciBkb25l IGluIHRoaXMgY2FzZS4KLSovCi0KLSNpZmRlZiBDT01NRU5UCi0jZGVmaW5lIEVOQ0JVRkwgMjAw Ci0jaWZuZGVmIHBkcDExCi1DSEFSIGVuY2J1ZltFTkNCVUZMXTsKLSNlbHNlCi0vKiBUaGlzIGlz IGdyb3NzLCBidXQgdGhlIHBkcDExIHJvb3Qgc2VnbWVudCBpcyBvdXQgb2Ygc3BhY2UgKi8KLS8q IFdpbGwgYWxsb2NhdGUgaXQgaW4gY2t1dXNyLmMuICovCi1leHRlcm4gQ0hBUiBlbmNidWZbXTsK LSNlbmRpZiAvKiBwZHAxMSAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotLyoKLSAgRW5jb2Rl IHBhY2tldCBkYXRhIGZyb20gYSBzdHJpbmcgaW4gbWVtb3J5IHJhdGhlciB0aGFuIGZyb20gYSBm aWxlLgotICBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGVuY29kZWQgc3RyaW5nIG9uIHN1Y2Nl c3MsIC0xIGlmIHRoZSBzdHJpbmcKLSAgY291bGQgbm90IGJlIGNvbXBsZXRlbHkgZW5jb2RlZCBp bnRvIHRoZSBjdXJyZW50bHkgbmVnb3RpYXRlZCBkYXRhCi0gIGZpZWxkIGxlbmd0aC4KLSovCi1p bnQKLSNpZmRlZiBDS19BTlNJQwotZW5jc3RyKENIQVIgKnMpCi0jZWxzZSAvKiBDS19BTlNJQyAq LwotZW5jc3RyKHMpIENIQVIqIHM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLS8qCi0gIFJl Y29kZWQgMzAgSnVsIDk0IHRvIHVzZSB0aGUgcmVndWxhciBkYXRhIGJ1ZmZlciBhbmQgdGhlIG5l Z290aWF0ZWQKLSAgbWF4aW11bSBwYWNrZXQgc2l6ZS4gIFByZXZpb3VzbHkgd2Ugd2VyZSBsaW1p dGVkIHRvIHRoZSBsZW5ndGggb2YgZW5jYnVmW10uCi0gIEFsc28sIHRvIHJldHVybiBhIGZhaWx1 cmUgY29kZSBpZiB0aGUgZW50aXJlIGVuY29kZWQgc3RyaW5nIHdvdWxkIG5vdCBmaXQuCi0gIE1v ZGlmaWVkIDE0IEp1bCA5OCB0byByZXR1cm4gbGVuZ3RoIG9mIGVuY29kZWQgc3RyaW5nLgotKi8K LSAgICBpbnQgbSwgcmMsIHNsZW47IGNoYXIgKnA7Ci0gICAgaWYgKCFkYXRhKSB7CQkJLyogV2F0 Y2ggb3V0IGZvciBudWxsIHBvaW50ZXJzLiAqLwotCWRlYnVnKEYxMDAsIlNFUklPVVMgRVJST1I6 IGVuY3N0ciBkYXRhID09IE5VTEwiLCIiLDApOwotCXJldHVybigtMSk7Ci0gICAgfQotICAgIGlm ICghcykgcyA9IChDSEFSICopIiI7CQkvKiBEaXR0by4gKi8KLSAgICBzbGVuID0gc3RybGVuKChj aGFyICopcyk7CQkvKiBMZW5ndGggb2Ygc291cmNlIHN0cmluZy4gKi8KLSAgICBkZWJ1ZyhGMTEx LCJlbmNzdHIiLHMsc2xlbik7Ci0gICAgcmMgPSAwOwkJCQkvKiBSZXR1cm4gY29kZS4gKi8KLSAg ICBtID0gbWVtc3RyOyBwID0gbWVtcHRyOwkJLyogU2F2ZSB0aGVzZS4gKi8KLSAgICBtZW1wdHIg PSAoY2hhciAqKXM7CQkJLyogUG9pbnQgdG8gdGhlIHN0cmluZy4gKi8KLSAgICAvKiBkZWJ1ZyhG MTAxLCJlbmNzdHIgbWVtcHRyIDEiLCIiLG1lbXB0cik7ICovCi0gICAgbWVtc3RyID0gMTsJCQkJ LyogRmxhZyBtZW1vcnkgc3RyaW5nIGFzIHNvdXJjZS4gKi8KLSAgICBmaXJzdCA9IDE7CQkJCS8q IEluaXRpYWxpemUgY2hhcmFjdGVyIGxvb2thaGVhZC4gKi8KLSAgICAqZGF0YSA9IE5VTDsJCQkv KiBJbiBjYXNlIHMgaXMgZW1wdHkgKi8KLSAgICBkZWJ1ZyhGMTAxLCJlbmNzdHIgc3BzaXoiLCIi LHNwc2l6KTsKLSAgICByYyA9IGdldHBrdChzcHNpeiwwKTsJCS8qIEZpbGwgYSBwYWNrZXQgZnJv bSB0aGUgc3RyaW5nLiAqLwotICAgIGRlYnVnKEYxMDEsImVuY3N0ciBnZXRwa3QgcmMiLCIiLHJj KTsKLSAgICBpZiAocmMgPiAtMSAmJiBtZW1wdHIgPCAoY2hhciAqKShzICsgc2xlbikpIHsgLyog TWVhbnMgd2UgZGlkbid0IGVuY29kZSAqLwotCXJjID0gLTE7CQkJLyogdGhlIHdob2xlIHN0cmlu Zy4gKi8KLQlkZWJ1ZyhGMTAxLCJlbmNzdHIgc3RyaW5nIHRvbyBiaWciLCIiLHNpemUpOwotICAg IH0KLSAgICBkZWJ1ZyhGMTAxLCJlbmNzdHIgZ2V0cGt0IHJjIiwiIixyYyk7Ci0gICAgbWVtc3Ry ID0gbTsJCQkJLyogUmVzdG9yZSBtZW1vcnkgc3RyaW5nIGZsYWcgKi8KLSAgICBtZW1wdHIgPSBw OwkJCQkvKiBhbmQgcG9pbnRlciAqLwotICAgIGZpcnN0ID0gMTsJCQkJLyogUHV0IHRoaXMgYmFj ayBhcyB3ZSBmb3VuZCBpdC4gKi8KLSAgICByZXR1cm4ocmMpOwotfQotCi0vKiAgT3V0cHV0IGZ1 bmN0aW9ucyBwYXNzZWQgdG8gJ2RlY29kZSc6ICAqLwotCi1pbnQJCQkgICAgICAgLyogIFB1dCBj aGFyYWN0ZXIgaW4gc2VydmVyIGNvbW1hbmQgYnVmZmVyICAqLwotI2lmZGVmIENLX0FOU0lDCi1w dXRzcnYoY2hhciBjKQotI2Vsc2UKLXB1dHNydihjKSByZWdpc3RlciBjaGFyIGM7Ci0jZW5kaWYg LyogQ0tfQU5TSUMgKi8KLS8qIHB1dHNydiAqLyB7Ci0gICAgKnNydnB0cisrID0gYzsKLSAgICAq c3J2cHRyID0gJ1wwJzsJCS8qIE1ha2Ugc3VyZSBidWZmZXIgaXMgbnVsbC10ZXJtaW5hdGVkICov Ci0gICAgcmV0dXJuKDApOwotfQotCi1pbnQJCQkJCS8qICBPdXRwdXQgY2hhcmFjdGVyIHRvIGNv bnNvbGUuICAqLwotI2lmZGVmIENLX0FOU0lDCi1wdXR0cm0oY2hhciBjKQotI2Vsc2UKLXB1dHRy bShjKSByZWdpc3RlciBjaGFyIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHB1dHRybSAq LyB7Ci0gICAgZXh0ZXJuIGludCByY2RhY3RpdmU7Ci0jaWZuZGVmIE5PU1BMCi0gICAgZXh0ZXJu IGNoYXIgKiBxYnVmcDsJCS8qIElmIFJFTU9URSBRVUVSWSBhY3RpdmUsICovCi0gICAgZXh0ZXJu IGludCBxdWVyeSwgcWJ1Zm47CQkvKiBhbHNvIHN0b3JlIHJlc3BvbnNlIGluICovCi0gICAgaWYg KHF1ZXJ5ICYmIHFidWZuKysgPCAxMDI0KSB7CS8qIHF1ZXJ5IGJ1ZmZlci4gKi8KLQkqcWJ1ZnAr KyA9IGM7Ci0JKnFidWZwID0gTlVMOwotICAgIH0KLSAgICBpZiAoIXF1ZXJ5IHx8ICF4Y21kc3Jj KQotI2VuZGlmIC8qIE5PU1BMICovCi0vKgotICBUaGlzIHJvdXRpbmUgaXMgdXNlZCAoYW1vbmcg b3RoZXIgdGhpbmdzKSBmb3IgcHJpbnRpbmcgdGhlIHNlcnZlcidzIGFuc3dlcgotICB0byBhIFJF TU9URSBjb21tYW5kLiAgQnV0IFJFTU9URSBDRCBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgaXNuJ3Qg cmVhbGx5IAotICBhc2tpbmcgZm9yIGFuIGFuc3dlciBmcm9tIHRoZSBzZXJ2ZXIuICBUaHVzIHNv bWUgcGVvcGxlIHdhbnQgdG8gc3VwcHJlc3MKLSAgdGhlIGNvbmZpcm1hdGlvbiBtZXNzYWdlIChl LmcuIHdoZW4gdGhlIHNlcnZlciBzZW5kcyBiYWNrIHRoZSBhY3R1YWwgcGF0aAotICBvZiB0aGUg ZGlyZWN0b3J5IENEJ2QgdG8pLCBhbmQgZXhwZWN0IHRvIGJlIGFibGUgdG8gZG8gdGhpcyB3aXRo IFNFVCBRVUlFVAotICBPTi4gIEJ1dCB0aGV5IHdvdWxkIG5vdCB3YW50IFNFVCBRVUlFVCBPTiB0 byBzdXBwcmVzcyB0aGUgb3RoZXIgc2VydmVyCi0gIHJlcGxpZXMsIHdoaWNoIGFyZSBwb2ludGxl c3Mgd2l0aG91dCB0aGVpciBhbnN3ZXJzLiAgVGh1cyB0aGUgInJjZGFjdGl2ZSIKLSAgZmxhZyAo UkVNT1RFIENEIGNvbW1hbmQgaXMgYWN0aXZlKS4gIFRodSBPY3QgMTAgMTY6Mzg6MjEgMjAwMgot Ki8KLSAgICAgIGlmICghKHF1aWV0ICYmIHJjZGFjdGl2ZSkpCS8qIGdyb3NzLCB5dWsgKi8KLQlj b25vYyhjKTsKLSAgICByZXR1cm4oMCk7Ci19Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLWludAkJ CQkJLyogIE91dHB1dCBjaGFyIHRvIGZpbGUuICovCi0jaWZkZWYgQ0tfQU5TSUMKLXB1dG1maWwo Y2hhciBjKQkJCQkvKiBKdXN0IGxpa2UgcHV0ZmlsIGJ1dCB0byBaTUZJTEUgKi8KLSNlbHNlCQkJ CQkvKiByYXRoZXIgdGhhbiBaT0ZJTEUuLi4gKi8KLXB1dG1maWwoYykgcmVnaXN0ZXIgY2hhciBj OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBwdXRtZmlsICovIHsKLSAgICBkZWJ1ZyhGMDAw LCJwdXRmaWwiLCIiLGMpOwotICAgIGlmICh6Y2hvdXQoWk1GSUxFLCAoY2hhcikgKGMgJiBmbWFz aykpIDwgMCkgewotCWN6c2VlbiA9IDE7Ci0JZGVidWcoRjEwMSwicHV0ZmlsIHpjaG91dCB3cml0 ZSBlcnJvciwgc2V0dGluZyBjenNlZW4iLCIiLDEpOwotCXJldHVybigtMSk7Ci0gICAgfQotICAg IHJldHVybigwKTsKLX0KLQotaW50CQkJCQkvKiAgT3V0cHV0IGNoYXIgdG8gbm93aGVyZS4gKi8K LSNpZmRlZiBDS19BTlNJQwotcHV0bm93aGVyZShjaGFyIGMpCi0jZWxzZQotcHV0bm93aGVyZShj KSByZWdpc3RlciBjaGFyIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHB1dG5vd2hlcmUg Ki8gewotICAgIHJldHVybigwKTsKLX0KLQotCi1pbnQJCQkJCS8qICBPdXRwdXQgY2hhciB0byBm aWxlLiAqLwotI2lmZGVmIENLX0FOU0lDCi1wdXRmaWwoY2hhciBjKQotI2Vsc2UKLXB1dGZpbChj KSByZWdpc3RlciBjaGFyIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHB1dGZpbCAqLyB7 Ci0gICAgZGVidWcoRjAwMCwicHV0ZmlsIiwiIixjKTsKLSAgICBpZiAoemNob3V0KFpPRklMRSwg KGNoYXIpIChjICYgZm1hc2spKSA8IDApIHsKLQljenNlZW4gPSAxOyAgIAkJCS8qIElmIHdyaXRl IGVycm9yLi4uICovCi0JZGVidWcoRjEwMSwicHV0ZmlsIHpjaG91dCB3cml0ZSBlcnJvciwgc2V0 dGluZyBjenNlZW4iLCIiLDEpOwotCXJldHVybigtMSk7Ci0gICAgfQotICAgIHJldHVybigwKTsK LX0KLQotLyoKLSAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBpcyBhIHdyYXBwZXIgZm9yIHB1dGZp bCgpLiAgVGhlIG9ubHkgcmVhc29uIGZvciBpdHMKLSAgZXhpc3RlbmNlIGlzIHRvIGJlIHBhc3Nl ZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgdG8gZGVjb2RlKCksIHdoaWNoIHRyZWF0cwotICBwdXRm aWwoKSBpdHNlbGYgc3BlY2lhbGx5IC0tIGJ5cGFzc2luZyBpdCBhbmQgdXNpbmcgYW4gaW50ZXJu YWwgbWFjcm8KLSAgaW5zdGVhZCB0byBzcGVlZCB0aGluZ3MgdXAuICBVc2UgenB1dGZpbCgpIGlu c3RlYWQgb2YgcHV0ZmlsKCkgaW4gY2FzZXMgd2hlcmUKLSAgd2UgZG8gbm90IHdhbnQgdGhpcyB0 byBoYXBwZW4sIGUuZy4gd2hlbiB3ZSBuZWVkIHRvIHNlbmQgb3V0cHV0IHRvIHRoZSBmaWxlCi0g IHdpdGggYSBtaXh0dXJlIG9mIHpjaG91dCgpIGFuZCB6c291dCgpL3pzb3V0bCgpIGNhbGxzIChh cyBpcyB0aGUgY2FzZSB3aXRoCi0gIGluY29taW5nIHNob3J0LWZvcm0gUkVNT1RFIGNvbW1hbmQg cmVwbGllcyByZWRpcmVjdGVkIHRvIGEgZmlsZSksIHdoaWNoIHdvdWxkCi0gIG90aGVyd2lzZSBy ZXN1bHQgaW4gZGF0YSB3cml0dGVuIHRvIHRoZSBmaWxlIG91dCBvZiBvcmRlci4KLSovCi1pbnQK LSNpZmRlZiBDS19BTlNJQwotenB1dGZpbChjaGFyIGMpCi0jZWxzZQotenB1dGZpbChjKSByZWdp c3RlciBjaGFyIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHpwdXRmaWwgKi8gewotICAg IHJldHVybihwdXRmaWwoYykpOwotfQotCi0jaWZuZGVmIE5PWEZFUgotCi0vKiBEIEUgQyBPIEQg RSAgLS0gIEtlcm1pdCBwYWNrZXQgZGVjb2RpbmcgcHJvY2VkdXJlICovCi0KLS8qCi0gQ2FsbCB3 aXRoIHN0cmluZyB0byBiZSBkZWNvZGVkIGFuZCBhbiBvdXRwdXQgZnVuY3Rpb24uCi0gUmV0dXJu cyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUgKGUuZy4gZGlzayBmdWxsKS4KLQotIFRoaXMg aXMgdGhlICJpbm5lciBsb29wIiB3aGVuIHJlY2VpdmluZyBmaWxlcywgYW5kIG11c3QgYmUgY29k ZWQgYXMKLSBlZmZpY2llbnRseSBhcyBwb3NzaWJsZS4gIE5vdGUgc29tZSBwb3RlbnRpYWwgcHJv YmxlbXM6ICBpZiBhIHBhY2tldAotIGlzIGJhZGx5IGZvcm1lZCwgaGF2aW5nIGEgcHJlZml4ZWQg c2VxdWVuY2UgZW5kaW5nIHByZW1hdHVyZWx5LCB0aGlzCi0gZnVuY3Rpb24sIGFzIGNvZGVkLCBj b3VsZCByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgcGFja2V0LiAgVGhpcyBoYXMKLSBuZXZlciBo YXBwZW5lZCwgdGh1cyB0aGUgYWRkaXRpb25hbCAodGltZS1jb25zdW1pbmcpIHRlc3RzIGhhdmUg bm90Ci0gYmVlbiBhZGRlZC4KLSovCi0KLXN0YXRpYyBDSEFSICp4ZGJ1ZjsJLyogR2xvYmFsIHZl cnNpb24gb2YgZGVjb2RlKCkncyBidWZmZXIgcG9pbnRlciAqLwotICAgICAgICAgICAgICAgICAg ICAgICAgLyogZm9yIHVzZSBieSB0cmFuc2xhdGlvbiBmdW5jdGlvbnMuICovCi0KLS8qIEZ1bmN0 aW9uIGZvciBwdXNoaW5nIGEgY2hhcmFjdGVyIG9udG8gZGVjb2RlKCkncyBpbnB1dCBzdHJlYW0u ICovCi0KLVZPSUQKLSNpZmRlZiBDS19BTlNJQwotemRzdHVmZihDSEFSIGMpCi0jZWxzZQotemRz dHVmZihjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHpkc3R1ZmYgKi8gewot ICAgIHhkYnVmLS07CQkJCS8qIEJhY2sgdXAgdGhlIHBvaW50ZXIuICovCi0gICAgKnhkYnVmID0g YzsJCQkJLyogU3R1ZmYgdGhlIGNoYXJhY3Rlci4gKi8KLX0KLQotI2lmZGVmIENLVFVOSU5HCi0v KgotICBUcmltbWVkLWRvd24gcGFja2V0IGRlY29kZXIgZm9yIGJpbmFyeS1tb2RlIG5vLXBhcml0 eSB0cmFuc2ZlcnMuCi0gIGRlY29kZSgpIGlzIHRoZSBmdWxsIHZlcnNpb24uCi0qLwotaW50Ci0j aWZkZWYgQ0tfQU5TSUMKLWJkZWNvZGUoQ0hBUiAqYnVmLCBpbnQgKCpmbikoY2hhcikpCi0jZWxz ZQotYmRlY29kZShidWYsZm4pIHJlZ2lzdGVyIENIQVIgKmJ1ZjsgcmVnaXN0ZXIgaW50ICgqZm4p KCk7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGJkZWNvZGUgKi8gewotICAgIHJlZ2lzdGVy IHVuc2lnbmVkIGludCBhLCBhNzsJLyogVmFyaW91cyBjb3BpZXMgb2YgY3VycmVudCBjaGFyICov Ci0gICAgaW50IGNjcGZsZzsJCQkJLyogRm9yIEN0cmwtdW5wcmVmaXhpbmcgc3RhdHMgKi8KLSAg ICBpbnQgdDsJCQkJLyogSW50IHZlcnNpb24gb2YgY2hhcmFjdGVyICovCi0gICAgaW50IGxlbjsK LSAgICBsb25nIHo7CQkJCS8qIEZvciBDUkMgY2FsY3VsYXRpb24gKi8KLSAgICBDSEFSIGM7CQkJ CS8qIEN1cnJlbnQgY2hhcmFjdGVyICovCi0KLSAgICBpZiAoIWJpbmFyeSB8fCBwYXJpdHkgfHwg Zm4gIT0gcHV0ZmlsKSAvKiBKVVNUIElOIENBU0UgKi8KLSAgICAgIHJldHVybihkZWNvZGUoYnVm LGZuLDEpKTsKLSAgICBkZWJ1ZyhGMTAwLCJCREVDT0RFIiwiIiwwKTsKLQotICAgIHhkYnVmID0g YnVmOwkJCS8qIEdsb2JhbCBjb3B5IG9mIHNvdXJjZSBwb2ludGVyLiAqLwotCi0gICAgbGVuID0g cmxuOwkJCQkvKiBOdW1iZXIgb2YgYnl0ZXMgaW4gZGF0YSBmaWVsZCAqLwotICAgIHdoaWxlIChs ZW4gPiAwKSB7Ci0gICAgICAgIGEgPSAqeGRidWYrKyAmIDB4ZmY7CQkvKiBHZXQgbmV4dCBjaGFy YWN0ZXIgKi8KLQlsZW4tLTsKLQlycHQgPSAwOwkJCS8qIEluaXRpYWxpemUgcmVwZWF0IGNvdW50 LiAqLwotCWlmIChhID09IHJwdHEgJiYgcnB0ZmxnKSB7CS8qIEdvdCBhIHJlcGVhdCBwcmVmaXg/ ICovCi0JICAgIHJwdCA9IHh1bmNoYXIoKnhkYnVmKysgJiAweEZGKTsgLyogWWVzLCBnZXQgdGhl IHJlcGVhdCBjb3VudCwgKi8KLQkgICAgcnB0biArPSBycHQ7Ci0JICAgIGEgPSAqeGRidWYrKyAm IDB4RkY7CS8qIGFuZCBnZXQgdGhlIHByZWZpeGVkIGNoYXJhY3Rlci4gKi8KLQkgICAgbGVuIC09 IDI7Ci0JfQotCWNjcGZsZyA9IDA7CQkJLyogQ29udHJvbCBwcmVmaXggZmxhZy4gKi8KLQlpZiAo YSA9PSBjdGxxKSB7CQkvKiBJZiBjb250cm9sIHByZWZpeCwgKi8KLQkgICAgYSAgPSAqeGRidWYr KyAmIDB4RkY7CS8qIGdldCBpdHMgb3BlcmFuZCAqLwotCSAgICBsZW4tLTsKLQkgICAgYTcgPSBh ICYgMHg3RjsJCS8qIGFuZCBpdHMgbG93IDcgYml0cy4gKi8KLQkgICAgaWYgKChhNyA+PSAwMTAw ICYmIGE3IDw9IDAxMzcpIHx8IGE3ID09ICc/JykgeyAvKiBDb250cm9sbGlmeSAqLwotCQlhID0g Y3RsKGEpOwkJLyogaWYgaW4gY29udHJvbCByYW5nZS4gKi8KLQkJYTcgPSBhICYgMHg3RjsKLQkJ Y2NwZmxnID0gMTsJCS8qIE5vdGUgdGhhdCB3ZSBkaWQgdGhpcyAqLwotCQljY3ArKzsJCQkvKiBD b3VudCBmb3Igc3RhdHMgKi8KLQkgICAgfQotCX0gZWxzZSBhNyA9IGEgJiAweDdmOwkJLyogTm90 IGNvbnRyb2wgcXVvdGUgKi8KLQlpZiAoYTcgPCAzMiB8fCBhNyA9PSAxMjcpCS8qIEEgYmFyZSBj b250cm9sIGNoYXJhY3Rlcj8gKi8KLQkgIGlmICghY2NwZmxnKSBjY3UrKzsJCS8qIENvdW50IGl0 ICovCi0JaWYgKCFycHQpIHJwdCA9IDE7Ci0JZm9yICg7IHJwdCA+IDA7IHJwdC0tKSB7CS8qIE91 dHB1dCB0aGUgY2hhciBSUFQgdGltZXMgKi8KLSNpZmRlZiBDQUxJQlJBVEUKLQkgICAgaWYgKGNh bGlicmF0ZSkgewotCQlmZmMrKzsKLQkJY29udGludWU7Ci0JICAgIH0KLSNlbmRpZiAvKiBDQUxJ QlJBVEUgKi8KLSNpZmRlZiBPUzIKLSAgICAgICAgICAgIGlmICh4ZmxnICYmICFyZW1maWxlKSB7 CQkvKiBXcml0ZSB0byB2aXJ0dWFsIHNjcmVlbiAqLwotICAgICAgICAgICAgICAgIGNoYXIgX2E7 Ci0gICAgICAgICAgICAgICAgX2EgPSBhICYgZm1hc2s7Ci0gICAgICAgICAgICAgICAgdCA9IGNv bm9jKF9hKTsKLSAgICAgICAgICAgICAgICBpZiAodCA8IDEpCi0gICAgICAgICAgICAgICAgICAg IHQgPSAtMTsKLSAgICAgICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIE9TMiAqLwotCSAgICAgIHQg PSB6bWNob3V0KGEgJiBmbWFzayk7CS8qIHptY2hvdXQgaXMgYSBtYWNybyAqLwotCSAgICBpZiAo dCA8IDApIHsKLQkJZGVidWcoRjEwMSwiYmRlY29kZSB3cml0ZSBlcnJvciAtIGVycm5vIiwiIixl cnJubyk7Ci0JCXJldHVybigtMSk7Ci0JICAgIH0KLQkgICAgZmZjKys7CQkJLyogQ291bnQgdGhl IGNoYXJhY3RlciAqLwotCSAgICBpZiAoZG9jcmMgJiYgIXJlbWZpbGUpIHsJLyogVXBkYXRlIGZp bGUgQ1JDICovCi0JCWMgPSBhOwkJCS8qIEZvcmNlIGNvbnZlcnNpb24gdG8gdW5zaWduZWQgY2hh ciAqLwotCQl6ID0gY3JjMTYgXiAobG9uZyljOwotCQljcmMxNiA9IChjcmMxNiA+PiA4KSBeCi0J CSAgKGNyY3RhWyh6ICYgMHhGMCkgPj4gNF0gXiBjcmN0Ylt6ICYgMHgwRl0pOwotCSAgICB9Ci0J fQotI2lmZGVmIENLX0NUUkxaCi0JbGFzdGNoYXIgPSBhOwotI2VuZGlmIC8qIENLX0NUUkxaICov Ci0gICAgfQotICAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAvKiBDS1RVTklORyAqLwotI2VuZGlm IC8qIE5PWEZFUiAqLwotCi0vKiAgUCBOIEIgWSBUIEUgIC0tICBPdXRwdXQgbmV4dCBieXRlIHRv IGZpbGUgb3Igb3RoZXIgZGVzdGluYXRpb24gICovCi0KLXN0YXRpYyBDS19PRkZfVCBvZmZjID0g MEw7Ci0KLXN0YXRpYyBpbnQKLSNpZmRlZiBDS19BTlNJQwotcG5ieXRlKENIQVIgYywgaW50ICgq Zm4pKGNoYXIpKQotI2Vsc2UKLXBuYnl0ZShjLGZuKSBDSEFSIGM7IGludCAoKmZuKSgpOwotI2Vu ZGlmIC8qIENLX0FOU0lDICovCi0vKiBwbmJ5dGUgKi8gewotICAgIGludCByYzsKLSAgICBsb25n IHo7Ci0KLSNpZmRlZiBPUzIKLSNpZm5kZWYgTk9YRkVSCi0gICAgaWYgKHhmbGcgJiYgIXJlbWZp bGUpIHsJCS8qIFdyaXRlIHRvIHZpcnR1YWwgc2NyZWVuICovCi0JY2hhciBfYTsKLQlfYSA9IGMg JiBmbWFzazsKLQlyYyA9IGNvbm9jKF9hKTsKLQlpZiAocmMgPCAxKQotCSAgcmV0dXJuKC0xKTsK LSAgICB9IGVsc2UKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB7 Ci0JaWYgKGZuID09IHB1dGZpbCkgewkJLyogRXhlY3V0ZSBvdXRwdXQgZnVuY3Rpb24gKi8KLQkg ICAgcmMgPSB6bWNob3V0KGMpOwkJLyogdG8tZmlsZSBtYWNybyAoZmFzdCkgKi8KLQl9IGVsc2Ug aWYgKCFmbikgewotCSAgICByYyA9IHB1dGNoYXIoYyk7CQkvKiB0by1zY3JlZW4gbWFjcm8gKGZh c3QpICovCi0gICAgICAgIH0gZWxzZSB7Ci0JICAgIHJjID0gKCpmbikoYyk7CQkvKiBmdW5jdGlv biBjYWxsIChub3QgYXMgZmFzdCkgKi8KLQl9Ci0JaWYgKHJjIDwgMCkKLQkgIHJldHVybihyYyk7 Ci0gICAgfQotLyoKLSAgQm90aCB4Z25ieXRlKCkgYW5kIHhwbmJ5dGUoKSBpbmNyZW1lbnQgZmZj ICh0aGUgZmlsZSBieXRlIGNvdW50ZXIpLgotICBEdXJpbmcgZmlsZSB0cmFuc2Zlciwgb25seSBv bmUgb2YgdGhlc2UgZnVuY3Rpb25zIGlzIGNhbGxlZC4gIEhvd2V2ZXIsCi0gIHRoZSBUUkFOU0xB VEUgY29tbWFuZCBpcyBsaWtlbHkgdG8gY2FsbCB0aGVtIGJvdGguICBvZmZjLCB0aGVyZWZvcmUs Ci0gIGNvbnRhaW5zIHRoZSBvdXRwdXQgYnl0ZSBjb3VudCwgbmVjZXNzYXJ5IGZvciBoYW5kbGlu ZyB0aGUgVUNTLTIgQk9NLgotICBOT1RFOiBJdCBtaWdodCBiZSBzYWZlIHRvIGp1c3QgdGVzdCBm b3IgV19TRU5ELCBGVFAgb3Igbm90LgotKi8KLSAgICBpZiAoKHdoYXQgJiAoV19GVFB8V19TRU5E KSkgIT0gKFdfRlRQfFdfU0VORCkpIHsKLQlvZmZjKys7CQkJCS8qIENvdW50IHRoZSBieXRlICov Ci0JZmZjKys7CQkJCS8qIENvdW50IHRoZSBieXRlICovCi0gICAgfQotI2lmbmRlZiBOT1hGRVIK LSAgICBpZiAoZG9jcmMgJiYgIXhmbGcgJiYgIXJlbWZpbGUpIHsJLyogVXBkYXRlIGZpbGUgQ1JD ICovCi0JeiA9IGNyYzE2IF4gKGxvbmcpYzsKLQljcmMxNiA9IChjcmMxNiA+PiA4KSBeCi0JICAo Y3JjdGFbKHogJiAweEYwKSA+PiA0XSBeIGNyY3RiW3ogJiAweDBGXSk7Ci0gICAgfQotI2VuZGlm IC8qIE5PWEZFUiAqLwotICAgIHJldHVybigxKTsKLX0KLQotLyoKLSAgWCBQIE4gQiBZIFQgRSAg LS0gIFRyYW5zbGF0ZSBhbmQgcHV0IG5leHQgYnl0ZSB0byBmaWxlLgotCi0gIE9ubHkgZm9yIFVu aWNvZGUuICBDYWxsIHdpdGggbmV4dCB1bnRyYW5zbGF0ZWQgYnl0ZSBmcm9tIGluY29taW5nCi0g IGJ5dGUgc3RyZWFtLCB3aGljaCBjYW4gYmUgaW4gYW55IFRyYW5zZmVyIENoYXJhY3RlciBTZXQ6 IFVDUy0yLCBVVEYtOCwKLSAgTGF0aW4tMSwgTGF0aW4tSGVicmV3LCBldGMuICBUcmFuc2xhdGVz IHRvIHRoZSBmaWxlIGNoYXJhY3RlciBzZXQgYW5kCi0gIHdyaXRlcyBieXRlcyB0byB0aGUgb3V0 cHV0IGZpbGUuICBDYWxsIHdpdGggY2hhcmFjdGVyIHRvIHRyYW5zbGF0ZQotICBhcyBhbiBpbnQs IHBsdXMgdGhlIHRyYW5zZmVyIGNoYXJhY3RlciBzZXQgKHRvIHRyYW5zbGF0ZSBmcm9tKSBhbmQg dGhlCi0gIGZpbGUgY2hhcmFjdGVyIHNldCAodG8gdHJhbnNsYXRlIHRvKSwgb3IgLTEsMCwwIHRv IHJlc2V0IHRoZSBVQ1MtMiBieXRlCi0gIG51bWJlciAod2hpY2ggc2hvdWxkIGJlIGRvbmUgYXQg dGhlIGJlZ2lubmluZyBvZiBhIGZpbGUpLiAgSWYgdGhlIHRyYW5zZmVyCi0gIChzb3VyY2UpIGNo YXJhY3Rlci1zZXQgaXMgVUNTLTIsIGJ5dGVzIE1VU1QgYXJyaXZlIGluIEJpZy1FbmRpYW4gb3Jk ZXIuCi0gIFJldHVybnM6Ci0gICAtMTogT24gZXJyb3IKLSAgICAwOiBOb3RoaW5nIHRvIHdyaXRl IChtaWQtc2VxdWVuY2UpCi0gICA+MDogTnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4uCi0qLwotI2lm ZGVmIEtBTkpJCi1zdGF0aWMgaW50IGpzdGF0ZSA9IDAsIGp4ID0gMDsJCS8qIEZvciBvdXRwdXR0 aW5nIEpJUy03ICovCi1zdGF0aWMgY2hhciBqYnVmWzE2XSA9IHsgTlVMLCBOVUwgfTsKLSNlbmRp ZiAvKiBLQU5KSSAqLwotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwoteHBuYnl0ZShpbnQgYSwgaW50 IHRjcywgaW50IGZjcywgaW50ICgqZm4pKGNoYXIpKQotI2Vsc2UKLXhwbmJ5dGUoYSx0Y3MsZmNz LGZuKSBpbnQgYSwgdGNzLCBmY3M7IGludCAoKmZuKSgpOwotI2VuZGlmIC8qIENLX0FOU0lDICov Ci0vKiB4cG5ieXRlICovIHsKLSNpZmRlZiBVTklDT0RFCi0gICAgZXh0ZXJuIGludCB1Y3Nib207 CQkJLyogQnl0ZSBvcmRlciAqLwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSAgICAvKiBDSEFSIGM7 ICovCQkJLyogVW5zaWduZWQgY2hhciB3b3JrZXIgKi8KLSAgICBzdGF0aWMgdW5pb24gY2tfc2hv cnQgdWMsIGV1LCBzajsJLyogVUNTLTIsIEVVQywgYW5kIFNoaWZ0LUpJUyB3b3JrZXJzICovCi0g ICAgVVNIT1JUIGNoOwkJCQkvKiBkaXR0by4uLiAqLwotICAgIFVTSE9SVCAqIHVzID0gTlVMTDsJ CQkvKiBkaXR0by4uLiAqLwotICAgIGludCBjNywgcmMsIGhhdmV1YyA9IDA7CQkvKiBSZXR1cm4g Y29kZSBhbmQgVUNTLTIgZmxhZyAqLwotICAgIGludCB1dGZlcnJvciA9IDA7CQkJLyogVVRGLTgg ZXJyb3IgKi8KLSAgICBzdGF0aWMgaW50IGJuID0gMDsJCQkvKiBVQ1MtMiBieXRlIG51bWJlciAq LwotICAgIGludCBzd2FwcGluZyA9IDA7CQkJLyogU3dhcHBpbmcgVUNTIGJ5dGVzIHRvIG91dHB1 dD8gKi8KLQkJCQkJLyogc3dhcHBpbmcgbXVzdCBiZSAwIG9yIDEgKi8KLSAgICBpZiAoYSA9PSAt MSAmJiAodGNzIHwgZmNzKSA9PSAwKSB7CS8qIFJlc2V0IGluIGNhc2UgcHJldmlvdXMgcnVuICov Ci0JYm4gPSAwOwkJCQkvKiBsZWZ0IGJuIGF0IDEuLi4gKi8KLQlvZmZjID0gKENLX09GRl9UKTA7 Ci0JZGVidWcoRjEwMSwieHBuYnl0ZSBSRVNFVCIsIiIsYm4pOwotCXJldHVybigwKTsKLSAgICB9 Ci0gICAgZGVidWcoRjAwMSwieHBuYnl0ZSBhIiwiIixhKTsKLQotI2lmZGVmIFVOSUNPREUKLQot LyoKLSAgYnl0ZW9yZGVyID0gaGFyZHdhcmUgYnl0ZSBvcmRlciBvZiB0aGlzIG1hY2hpbmUuCi0g IHVjc29yZGVyICA9IG92ZXJyaWRlIGJ5IFNFVCBGSUxFIFVDUyBCWVRFLU9SREVSIGNvbW1hbmQu Ci0gIGZpbGVvcmRlciA9IGJ5dGUgb3JkZXIgb2YgVUNTLTIgaW5wdXQgZmlsZSBkZXRlY3RlZCBm cm9tIEJPTS4KLSAgc3dhcHBpbmcgYXBwbGllcyBvbmx5IHdoZW4gb3V0cHV0IGNoYXJzZXQgaXMg VUNTLTIuCi0qLwotICAgIGlmICh1Y3NvcmRlciAhPSAxICYmIHVjc29yZGVyICE9IDApCS8qIEFs c28ganVzdCBpbiBjYXNlLi4uICovCi0gICAgICB1Y3NvcmRlciA9IGJ5dGVvcmRlcjsKLSAgICBp ZiAoKGJ5dGVvcmRlciAmJiAhdWNzb3JkZXIpIHx8ICghYnl0ZW9yZGVyICYmIGZpbGVvcmRlcikp Ci0gICAgICBzd2FwcGluZyA9IDE7CQkJLyogU3dhcHBpbmcgYnl0ZXMgdG8gb3V0cHV0ICovCi0K LSNpZmRlZiBDT01NRU5UCi0gICAgZGVidWcoRjEwMSwieHBuYnl0ZSB1Y3NvcmRlciIsIiIsdWNz b3JkZXIpOwotICAgIGRlYnVnKEYxMDEsInhwbmJ5dGUgc3dhcHBpbmciLCIiLHN3YXBwaW5nKTsK LSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICBpZiAodGNzID09IFRDX1VURjgpIHsJCS8qICdh JyBpcyBmcm9tIGEgVVRGLTggc3RyZWFtICovCi0JY2ggPSBhOwotCWlmIChmY3MgPT0gVENfVVRG OCkJCS8qIE91dHB1dCBpcyBVVEYtOCB0b28gKi8KLQkgIHJldHVybihwbmJ5dGUoY2gsZm4pKTsJ Lyogc28ganVzdCBjb3B5LiAqLwotCXJjID0gdXRmOF90b191Y3MyKGNoLCZ1cyk7CS8qIE90aGVy d2lzZSBjb252ZXJ0IHRvIFVDUy0yICovCi0JaWYgKHJjID09IDApIHsJCQkvKiBEb25lIHdpdGgg dGhpcyBzZXF1ZW5jZSAqLwotCSAgICB1Yy54X3Nob3J0ID0gKnVzOwkJLyogV2UgaGF2ZSBhIFVu aWNvZGUgKi8KLQkgICAgaGF2ZXVjID0gMTsKLQl9IGVsc2UgaWYgKHJjIDwgMCkgewkJLyogRXJy b3IgKi8KLQkgICAgZGVidWcoRjEwMSwieHBuYnl0ZSBVVEYtOCBjb252ZXJzaW9uIGVycm9yIiwi IixyYyk7Ci0JICAgIGhhdmV1YyA9IDE7CQkJLyogUmVwbGFjZSBieSBVK0ZGRkQgKi8KLQkgICAg dWMueF9zaG9ydCA9ICp1czsKLQkgICAgdXRmZXJyb3IgPSAxOwotCX0gZWxzZQkJCQkvKiBTZXF1 ZW5jZSBpbmNvbXBsZXRlICovCi0JICByZXR1cm4oMCk7Ci0gICAgfSBlbHNlIGlmICh0Y3MgPT0g VENfVUNTMikgewkvKiAnYScgaXMgVUNTLTIgKi8KLQkvKiBIZXJlIHdlIGhhdmUgaW5jb21pbmcg VUNTLTIgaW4gZ3VhcmFudGVlZCBCaWcgRW5kaWFuIG9yZGVyICovCi0JLyogc28gd2UgbXVzdCBl eGNoYW5nZSBieXRlcyBpZiBsb2NhbCBtYWNoaW5lIGlzIExpdHRsZSBFbmRpYW4uICovCi0Jc3dp dGNoIChibikgewkJCS8qIFdoaWNoIGJ5dGU/ICovCi0JICBjYXNlIDA6CQkJLyogSGlnaC4uLiAq LwotCSAgICB1Yy54X2NoYXJbYnl0ZW9yZGVyXSA9ICh1bnNpZ25lZClhICYgMHhmZjsKLQkgICAg Ym4rKzsKLQkgICAgcmV0dXJuKDApOwkJCS8qIFdhaXQgZm9yIG5leHQgKi8KLQkgIGNhc2UgMToJ CQkvKiBMb3cuLi4gKi8KLQkgICAgdWMueF9jaGFyWzEtYnl0ZW9yZGVyXSA9ICh1bnNpZ25lZClh ICYgMHhmZjsKLQkgICAgYm4gPSAwOwkJCS8qIERvbmUgd2l0aCBzZXF1ZW5jZSAqLwotCSAgICBo YXZldWMgPSAxOwkJCS8qIEhhdmUgYSBVbmljb2RlICovCi0JfQotICAgIH0gZWxzZQotI2VuZGlm IC8qIFVOSUNPREUgKi8KLQotI2lmZGVmIEtBTkpJCQkJCS8qIFdoZXRoZXIgVU5JQ09ERSBpcyBk ZWZpbmVkIG9yIG5vdCAqLwotICAgICAgaWYgKHRjcyA9PSBUQ19KRVVDKSB7CQkvKiBJbmNvbWlu ZyBKYXBhbmVzZSBFVUMgKi8KLQlpbnQgYmFkID0gMDsKLQlzdGF0aWMgaW50IGthbmppID0gMDsJ CS8qIEZsYWdzIHNldCBpbiBjYXNlIDAgZm9yIGNhc2UgMSAqLwotCXN0YXRpYyBpbnQga2FuYSA9 IDA7Ci0Jc3dpdGNoIChibikgewkJCS8qIEJ5dGUgbnVtYmVyICovCi0JICBjYXNlIDA6CQkJLyog Qnl0ZSAwICovCi0JICAgIGV1Lnhfc2hvcnQgPSAwOwotCSAgICBpZiAoKGEgJiAweDgwKSA9PSAw KSB7Ci0JCXNqLnhfc2hvcnQgPSAodW5zaWduZWQpYSAmIDB4ZmY7IC8qIFNpbmdsZSBieXRlICov Ci0JCWthbmppID0ga2FuYSA9IDA7Ci0JICAgIH0gZWxzZSB7CQkJLyogRG91YmxlIGJ5dGUgKi8K LQkJYzcgPSBhICYgMHg3ZjsKLQkJaWYgKGM3ID4gMHgyMCAmJiBjNyA8IDB4N2YpIHsgLyogS2Fu amkgKi8KLQkJICAgIGV1LnhfY2hhcltieXRlb3JkZXJdID0gKENIQVIpIGE7ICAvKiBTdG9yZSBm aXJzdCBieXRlICovCi0JCSAgICBibisrOwkJICAgICAgLyogU2V0IHVwIGZvciBzZWNvbmQgYnl0 ZSAqLwotCQkgICAga2FuamkgPSAxOwotCQkgICAga2FuYSA9IDA7Ci0JCSAgICByZXR1cm4oMCk7 Ci0JCX0gZWxzZSBpZiAoYSA9PSAweDhlKSB7CS8qIFNTMiAtLSBLYXRha2FuYSBwcmVmaXggKi8K LQkJICAgIGV1LnhfY2hhcltieXRlb3JkZXJdID0gKENIQVIpIGE7IC8qIFNhdmUgaXQgKi8KLQkJ ICAgIGJuKys7Ci0JCSAgICBrYW5hID0gMTsKLQkJICAgIGthbmppID0gMDsKLQkJICAgIHJldHVy bigwKTsKLQkJfSBlbHNlIHsKLQkJICAgIGJhZCsrOwotCQl9Ci0JICAgIH0KLQkgICAgYnJlYWs7 Ci0JICBjYXNlIDE6CQkJLyogQnl0ZSAxICovCi0JICAgIGJuID0gMDsKLQkgICAgaWYgKGthbmpp KSB7Ci0JCWV1LnhfY2hhclsxLWJ5dGVvcmRlcl0gPSAoQ0hBUikgYTsKLQkJc2oueF9zaG9ydCA9 IGV1X3RvX3NqKGV1Lnhfc2hvcnQpOwotCQlicmVhazsKLQkgICAgfSBlbHNlIGlmIChrYW5hKSB7 Ci0JCXNqLnhfc2hvcnQgPSAoQ0hBUikgKGEgfCAweDgwKTsKLQkJYnJlYWs7Ci0JICAgIH0gZWxz ZSB7CQkJLyogKHNob3VsZG4ndCBoYXBwZW4pICovCi0JCWJhZCsrOwotCSAgICB9Ci0JfQotCS8q IENvbWUgaGVyZSB3aXRoIG9uZSBTaGlmdC1KSVMgY2hhcmFjdGVyICovCi0KLSNpZmRlZiBVTklD T0RFCi0JaWYgKGJhZCkgewotCSAgICB1Yy54X3Nob3J0ID0gMHhmZmZkOwotCX0gZWxzZSB7Ci0J ICAgIHVjLnhfc2hvcnQgPSBzal90b191bihzai54X3Nob3J0KTsgLyogQ29udmVydCB0byBVbmlj b2RlICovCi0JfQotCWhhdmV1YyA9IDE7Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotICAgIH0gZWxz ZQotI2VuZGlmIC8qIEtBTkpJICovCi0KLSNpZmRlZiBVTklDT0RFCi0JdWMueF9zaG9ydCA9ICh1 bnNpZ25lZClhICYgMHhmZjsgLyogTGF0aW4tMSBvciB3aGF0ZXZlci4uLiAqLwotCi0gICAgLyog Q29tZSBoZXJlIHdpdGggdWMgPSB0aGUgY2hhcmFjdGVyIHRvIGJlIHRyYW5zbGF0ZWQuICovCi0g ICAgLyogSWYgKGhhdmV1YykgaXQncyBVQ1MtMiBpbiBuYXRpdmUgb3JkZXIsIG90aGVyd2lzZSBp dCdzIGEgYnl0ZS4gKi8KLQotICAgIGRlYnVnKEYxMDEsInhwbmJ5dGUgaGF2ZXVjIiwiIixoYXZl dWMpOwotCi0gICAgaWYgKGhhdmV1YykgewkJCS8qIElmIHdlIGhhdmUgYSBVbmljb2RlLi4uICov Ci0JZGVidWcoRjAwMSwieHBuYnl0ZSB1Yy54X3Nob3J0IiwiW0FdIix1Yy54X3Nob3J0KTsKLQlk ZWJ1ZyhGMTAxLCJ4cG5ieXRlIGZlb2wiLCIiLGZlb2wpOwotCWlmICh3aGF0ICYgV19YRkVSKSB7 CQkvKiBJZiB0cmFuc2ZlcnJpbmcgYSBmaWxlICovCi0JICAgIGlmIChmZW9sICYmIHVjLnhfc2hv cnQgPT0gQ1IpIHsgLyogaGFuZGxlIGVvbCBjb252ZXJzaW9uLiAqLwotCQlyZXR1cm4oMCk7Ci0J ICAgIH0gZWxzZSBpZiAoZmVvbCAmJiB1Yy54X3Nob3J0ID09IExGKSB7Ci0JCXVjLnhfc2hvcnQg PSBmZW9sOwotCSAgICB9Ci0JfQotCWRlYnVnKEYwMDEsInhwbmJ5dGUgdWMueF9zaG9ydCIsIltC XSIsdWMueF9zaG9ydCk7Ci0JaWYgKGZjcyA9PSBGQ19VQ1MyKSB7CQkvKiBBbmQgRkNTIGlzIFVD Uy0yICovCi0JICAgIC8qIFdyaXRlIG91dCB0aGUgYnl0ZXMgaW4gdGhlIGFwcHJvcHJpYXRlIGJ5 dGUgb3JkZXIgKi8KLQkgICAgaW50IGNvdW50ID0gMDsKLSNpZm5kZWYgSUtTRE9OTFkKLSNpZmRl ZiBPUzIKLSAgICAgICAgICAgIGV4dGVybiBpbnQgazk1c3Rkb3V0LHdoZXJleFtdLHdoZXJleVtd OwotCQkJZXh0ZXJuIHVuc2lnbmVkIGNoYXIgY29sb3JjbWQ7Ci0gICAgICAgICAgICB1bmlvbiB7 Ci0gICAgICAgICAgICAgICAgVVNIT1JUIHVjczI7Ci0gICAgICAgICAgICAgICAgVUNIQVIgIGJ5 dGVzWzJdOwotICAgICAgICAgICAgfSBvdXRwdXQ7Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYg LyogSUtTRE9OTFkgKi8KLQkgICAgaWYgKCFvZmZjICYmIHVjc2JvbSkgewkvKiBCZWdpbm5pbmcg b2YgZmlsZT8gKi8KLQotI2lmbmRlZiBJS1NET05MWQotI2lmZGVmIE9TMgotICAgICAgICAgICAg ICAgIGlmIChmbiA9PSBOVUxMICYmICFrOTVzdGRvdXQgJiYgIWluc2VydmVyKSB7Ci0JCSAgICBv ZmZjKys7Ci0jaWZkZWYgQ09NTUVOVAotCQkgICAgLyogRG9uJ3QgcHJpbnQgdGhlIEJPTSB0byB0 aGUgZGlzcGxheSAqLwotICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYnl0ZXNbMF0gPSAoIXVj c29yZGVyID8gMHhmZiA6IDB4ZmUpOwotICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYnl0ZXNb MV0gPSAoIXVjc29yZGVyID8gMHhmZSA6IDB4ZmYpOwotCi0gICAgICAgICAgICAgICAgICAgIFZz Y3JuV3J0VUNTMlN0ckF0dChWQ01ELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJm91dHB1dC51Y3MyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJleVtWQ01E XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJleFtWQ01EXSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb2xvcmNtZAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbmRpZiAvKiBDT01NRU5UICov Ci0gICAgICAgICAgICAgICAgfSBlbHNlIAotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIElL U0RPTkxZICovCi0gICAgICAgICAgICAgICAgewotCQkgICAgaWYgKChyYyA9IHBuYnl0ZSgodWNz b3JkZXIgPyAweGZmIDogMHhmZSksZm4pKSA8IDApCi0JCSAgICAgIHJldHVybihyYyk7CS8qIEJP TSAqLwotCQkgICAgaWYgKChyYyA9IHBuYnl0ZSgodWNzb3JkZXIgPyAweGZlIDogMHhmZiksZm4p KSA8IDApCi0JCSAgICAgIHJldHVybihyYyk7Ci0JCX0KLQkJY291bnQgKz0gMjsKLQkgICAgfQot CSAgICBpZiAodXRmZXJyb3IpIHsKLSNpZm5kZWYgSUtTRE9OTFkKLSNpZmRlZiBPUzIKLSAgICAg ICAgICAgICAgICBpZiAoZm4gPT0gTlVMTCAmJiAhazk1c3Rkb3V0ICYmICFpbnNlcnZlcikgewot ICAgICAgICAgICAgICAgICAgICBvZmZjKys7Ci0gICAgICAgICAgICAgICAgICAgIG91dHB1dC5i eXRlc1swXSA9ICghdWNzb3JkZXIgPyAweGZkIDogMHhmZik7Ci0gICAgICAgICAgICAgICAgICAg IG91dHB1dC5ieXRlc1sxXSA9ICghdWNzb3JkZXIgPyAweGZmIDogMHhmZCk7Ci0KLSAgICAgICAg ICAgICAgICAgICAgVnNjcm5XcnRVQ1MyU3RyQXR0KFZDTUQsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmb3V0cHV0LnVjczIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgd2hlcmV5W1ZDTURdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg d2hlcmV4W1ZDTURdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNv bG9yY21kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAg ICAgICAgICAgIH0gZWxzZSAKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBJS1NET05MWSAq LwotCQl7Ci0JCSAgICBpZiAoKHJjID0gcG5ieXRlKCh1Y3NvcmRlciA/IDB4ZmQgOiAweGZmKSxm bikpIDwgMCkKLQkJICAgICAgcmV0dXJuKHJjKTsKLQkJICAgIGlmICgocmMgPSBwbmJ5dGUoKHVj c29yZGVyID8gMHhmZiA6IDB4ZmQpLGZuKSkgPCAwKQotCQkgICAgICByZXR1cm4ocmMpOwotCQl9 Ci0JCWNvdW50ICs9IDI7Ci0JICAgIH0KLSNpZm5kZWYgSUtTRE9OTFkKLSNpZmRlZiBPUzIKLSAg ICAgICAgICAgIGlmIChmbiA9PSBOVUxMICYmICFrOTVzdGRvdXQgJiYgIWluc2VydmVyKSB7Ci0g ICAgICAgICAgICAgICAgb2ZmYysrOwotICAgICAgICAgICAgICAgIG91dHB1dC5ieXRlc1swXSA9 IHVjLnhfY2hhcltzd2FwcGluZ107Ci0gICAgICAgICAgICAgICAgb3V0cHV0LmJ5dGVzWzFdID0g dWMueF9jaGFyWzEtc3dhcHBpbmddOwotCi0gICAgICAgICAgICAgICAgVnNjcm5XcnRVQ1MyU3Ry QXR0KFZDTUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRwdXQudWNz MiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgd2hlcmV5W1ZDTURdLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB3aGVyZXhbVkNNRF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZjb2xvcmNtZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwot ICAgICAgICAgICAgfSBlbHNlIAotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIElLU0RPTkxZ ICovCi0gICAgICAgICAgICB7Ci0JCWlmICgocmMgPSBwbmJ5dGUodWMueF9jaGFyW3N3YXBwaW5n XSxmbikpIDwgMCkKLQkJICByZXR1cm4ocmMpOwotCQlpZiAoKHJjID0gcG5ieXRlKHVjLnhfY2hh clsxLXN3YXBwaW5nXSxmbikpIDwgMCkKLQkJICByZXR1cm4ocmMpOwotCSAgICB9Ci0JICAgIGNv dW50ICs9IDI7Ci0JICAgIHJldHVybihjb3VudCk7Ci0JfSBlbHNlIGlmIChmY3MgPT0gRkNfVVRG OCkgewkvKiBDb252ZXJ0IHRvIFVURi04ICovCi0JICAgIENIQVIgKiBidWYgPSBOVUxMOwotCSAg ICBpbnQgaSwgY291bnQ7Ci0JICAgIGlmICh1dGZlcnJvcikgewotCQlpZiAoKHJjID0gcG5ieXRl KCh1Y3NvcmRlciA/IDB4YmQgOiAweGZmKSxmbikpIDwgMCkKLQkJICByZXR1cm4ocmMpOwotCQlp ZiAoKHJjID0gcG5ieXRlKCh1Y3NvcmRlciA/IDB4ZmYgOiAweGJkKSxmbikpIDwgMCkKLQkJICBy ZXR1cm4ocmMpOwotCSAgICB9Ci0JICAgIGlmICgoY291bnQgPSB1Y3MyX3RvX3V0ZjgodWMueF9z aG9ydCwmYnVmKSkgPCAxKQotCSAgICAgIHJldHVybigtMSk7Ci0JICAgIGRlYnVnKEYwMTEsInhw bmJ5dGUgYnVmIixidWYsY291bnQpOwotCSAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykK LQkgICAgICBpZiAoKHJjID0gcG5ieXRlKGJ1ZltpXSxmbikpIDwgMCkKLQkJcmV0dXJuKHJjKTsK LQkgICAgaWYgKHV0ZmVycm9yKQotCSAgICAgIGNvdW50ICs9IDI7Ci0JICAgIHJldHVybihjb3Vu dCk7Ci0JfSBlbHNlIHsJCQkvKiBUcmFuc2xhdGUgVUNTLTIgdG8gYnl0ZSAqLwotCSAgICBpZiAo dWMueF9zaG9ydCA9PSAweDIwMjggfHwgdWMueF9zaG9ydCA9PSAweDIwMjkpIHsKLQkJaWYgKHV0 ZmVycm9yKQotCQkgIHBuYnl0ZShVTkssZm4pOwotCQlpZiAoZmVvbCkKLQkJICByZXR1cm4ocG5i eXRlKChDSEFSKWZlb2wsZm4pKTsKLQkJaWYgKChyYyA9IHBuYnl0ZSgoQ0hBUilDUixmbikpIDwg MCkKLQkJICByZXR1cm4ocmMpOwotCQlpZiAoKHJjID0gcG5ieXRlKChDSEFSKUxGLGZuKSkgPCAw KQotCQkgIHJldHVybihyYyk7Ci0JCWVsc2UKLQkJICByZXR1cm4odXRmZXJyb3IgPyAzIDogMik7 Ci0JICAgIH0gZWxzZSBpZiAoeHVmKSB7CQkvKiBVQ1MtdG8tRkNTIGZ1bmN0aW9uICovCi0JCWlu dCB4ID0gMDsKLQkJaWYgKHV0ZmVycm9yKQotCQkgIHBuYnl0ZShVTkssZm4pOwotCQlpZiAoKHJj ID0gKCp4dWYpKHVjLnhfc2hvcnQpKSA8IDApIC8qIFRoZXNlIGNhbiBmYWlsLi4uICovCi0JCSAg Y2ggPSBVTks7Ci0JCWVsc2UKLQkJICBjaCA9ICh1bnNpZ25lZCkoKHVuc2lnbmVkKXJjICYgMHhm ZmZmKTsKLQkJeCA9IHBuYnl0ZShjaCxmbik7Ci0JCWlmICh4IDwgMCkKLQkJICByZXR1cm4oeCk7 Ci0JCWVsc2UgaWYgKHV0ZmVycm9yKQotCQkgIHgrKzsKLQkJcmV0dXJuKHgpOwotI2lmZGVmIEtB TkpJCi0KLS8qICBBbHNvIHNlZSB0aGUgbm9uLVVuaWNvZGUgS2Fuamkgc2VjdGlvbiBmdXJ0aGVy IGRvd24gaW4gdGhpcyBmdW5jdGlvbi4gKi8KLQotCSAgICB9IGVsc2UgaWYgKGZjc2luZm9bZmNz XS5hbHBoYWJldCA9PSBBTF9KQVBBTikgewotCi0JCS8qIFRyYW5zbGF0ZSBVQ1MtMiB0byBKYXBh bmVzZSBzZXQgKi8KLQkJZGVidWcoRjAwMSwieHBuYnl0ZSB1YyIsIiIsdWMueF9zaG9ydCk7Ci0J CXNqLnhfc2hvcnQgPSB1bl90b19zaih1Yy54X3Nob3J0KTsgLyogRmlyc3QgdG8gU2hpZnQtSklT ICovCi0JCWRlYnVnKEYwMDEsInhwbmJ5dGUgc2oiLCIiLHNqLnhfc2hvcnQpOwotCi0JCXN3aXRj aCAoZmNzKSB7CQkvKiBGaWxlIGNoYXJhY3RlciBzZXQgKi8KLQkJICBjYXNlIEZDX1NISklTOgkv KiBTaGlmdC1KSVMgLS0ganVzdCBvdXRwdXQgaXQgKi8KLQkJICAgIGlmIChzai54X2NoYXJbYnl0 ZW9yZGVyXSkgLyogQnV0IG5vdCBoaWdoIGJ5dGUgaWYgemVybyAqLwotCQkgICAgICBpZiAoKHJj ID0gcG5ieXRlKChDSEFSKXNqLnhfY2hhcltieXRlb3JkZXJdLGZuKSkgPCAwKQotCQkJcmV0dXJu KHJjKTsKLQkJICAgIGlmICgocmMgPSBwbmJ5dGUoKENIQVIpc2oueF9jaGFyWzEtYnl0ZW9yZGVy XSxmbikpIDwgMCkKLQkJICAgICAgcmV0dXJuKHJjKTsKLQkJICAgIHJldHVybigyKTsKLQkJICBj YXNlIEZDX0pFVUM6CQkvKiBFVUMtSlAgKi8KLQkJICAgIGV1Lnhfc2hvcnQgPSBzal90b19ldShz ai54X3Nob3J0KTsgLyogU2hpZnQtSklTIHRvIEVVQyAqLwotCQkgICAgZGVidWcoRjAwMSwieHBu Ynl0ZSBldSIsIiIsZXUueF9zaG9ydCk7Ci0JCSAgICBpZiAoZXUueF9zaG9ydCA9PSAweGZmZmYp IHsgLyogQmFkICovCi0JCQlpZiAoKHJjID0gcG5ieXRlKFVOSyxmbikpIDwgMCkKLQkJCSAgcmV0 dXJuKHJjKTsKLQkJCXJldHVybigxKTsKLQkJICAgIH0gZWxzZSB7CQkvKiBHb29kICovCi0JCQlp bnQgY291bnQgPSAwOwkvKiBXcml0ZSBoaWdoIGJ5dGUgaWYgbm90IHplcm8gKi8KLQkJCWlmIChl dS54X2NoYXJbYnl0ZW9yZGVyXSkgewotCQkJICAgIGlmICgocmM9cG5ieXRlKChDSEFSKWV1Lnhf Y2hhcltieXRlb3JkZXJdLGZuKSkgPCAwKQotCQkJICAgICAgcmV0dXJuKHJjKTsKLQkJCSAgICBj b3VudCsrOwotCQkJfQotCQkJLyogQWx3YXlzIHdyaXRlIGxvdyBieXRlICovCi0JCQlpZiAoKHJj ID0gcG5ieXRlKChDSEFSKWV1LnhfY2hhclsxLWJ5dGVvcmRlcl0sZm4pKSA8IDApCi0JCQkgIHJl dHVybihyYyk7Ci0JCQljb3VudCsrOwotCQkJcmV0dXJuKGNvdW50KTsKLQkJICAgIH0KLQkJICAg IGJyZWFrOwotCi0JCSAgY2FzZSBGQ19KSVM3OgkJLyogSklTLTcgKi8KLQkJICBjYXNlIEZDX0pE RUM6CQkvKiBERUMgS2FuamkgKi8KLQkJICAgIGV1Lnhfc2hvcnQgPSBzal90b19ldShzai54X3No b3J0KTsgLyogU2hpZnQtSklTIHRvIEVVQyAqLwotCQkgICAgaWYgKGV1Lnhfc2hvcnQgPT0gMHhm ZmZmKSB7IC8qIEJhZCAqLwotCQkJZGVidWcoRjAwMSwieHBuYnl0ZSBiYWQgZXUiLCIiLGV1Lnhf c2hvcnQpOwotCQkJaWYgKChyYyA9IHBuYnl0ZShVTkssZm4pKSA8IDApCi0JCQkgIHJldHVybihy Yyk7Ci0JCQlyZXR1cm4oMSk7Ci0JCSAgICB9IGVsc2UgewkJLyogR29vZCAqLwotCQkJaW50IGk7 Ci0JCQkvKiBVc2UgYW5vdGhlciBuYW1lIC0gJ2EnIGhpZGVzIHBhcmFtZXRlciAqLwotCQkJLyog SXQncyBPSyBhcyBpcyBidXQgY2F1c2VzIGNvbXBpbGVyIHdhcm5pbmdzICovCi0JCQljaGFyIGEg PSBldS54X2NoYXJbMS1ieXRlb3JkZXJdOyAvKiBMb3cgYnl0ZSAqLwotCQkJZGVidWcoRjAwMSwi eHBuYnl0ZSBldSIsIiIsZXUueF9zaG9ydCk7Ci0JCQlpZiAoZXUueF9jaGFyW2J5dGVvcmRlcl0g PT0gMCkgeyAvKiBSb21hbiAqLwotCQkJICAgIHN3aXRjaCAoanN0YXRlKSB7Ci0JCQkgICAgICBj YXNlIDE6CS8qIEN1cnJlbnQgc3RhdGUgaXMgS2F0YWthbmEgKi8KLQkJCQlqYnVmWzBdID0gMHgw ZjsJLyogU0kgKi8KLQkJCQlqYnVmWzFdID0gYTsKLQkJCQlqeCA9IDI7Ci0JCQkJYnJlYWs7Ci0J CQkgICAgICBjYXNlIDI6CS8qIEN1cnJlbnQgc3RhdGUgaXMgS2FuamkgKi8KLQkJCQlqYnVmWzBd ID0gMHgxYjsJLyogRVNDICovCi0JCQkJamJ1ZlsxXSA9IDB4Mjg7CS8qICggKi8KLQkJCQlqYnVm WzJdID0gMHg0YTsJLyogSiAqLwotCQkJCWpidWZbM10gPSBhOwotCQkJCWp4ID0gNDsKLQkJCQli cmVhazsKLQkJCSAgICAgIGRlZmF1bHQ6CS8qIEN1cnJlbnQgc3RhdGUgaXMgUm9tYW4gKi8KLQkJ CQlqYnVmWzBdID0gYTsKLQkJCQlqeCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQkgICAgfQotCQkJICAg IGpzdGF0ZSA9IDA7CS8qIE5ldyBzdGF0ZSBpcyBSb21hbiAqLwotCQkJfSBlbHNlIGlmIChldS54 X2NoYXJbYnl0ZW9yZGVyXSA9PSAweDhlKSB7IC8qIEthbmEgKi8KLQkJCSAgICBqeCA9IDA7Ci0J CQkgICAgc3dpdGNoIChqc3RhdGUpIHsKLQkJCSAgICAgIGNhc2UgMjoJCSAgIC8qIGZyb20gS2Fu amkgKi8KLQkJCQlqYnVmW2p4KytdID0gMHgxYjsgLyogRVNDICovCi0JCQkJamJ1ZltqeCsrXSA9 IDB4Mjg7IC8qICggKi8KLQkJCQlqYnVmW2p4KytdID0gMHg0YTsgLyogSiAqLwotCQkJICAgICAg Y2FzZSAwOgkJICAgLyogZnJvbSBSb21hbiAqLwotCQkJCWpidWZbangrK10gPSAweDBlOyAvKiBT TyAqLwotCQkJICAgICAgZGVmYXVsdDoJCSAgIC8qIFN0YXRlIGlzIGFscmVhZHkgS2FuYSovCi0J CQkJamJ1ZltqeCsrXSA9IChhICYgMHg3Zik7IC8qIGFuZCB0aGUgY2hhciAqLwotCQkJCWJyZWFr OwotCQkJICAgIH0KLQkJCSAgICBqc3RhdGUgPSAxOwkvKiBOZXcgc3RhdGUgaXMgS2F0YWthbmEg Ki8KLQkJCX0gZWxzZSB7CS8qIEthbmppICovCi0JCQkgICAganggPSAwOwotCQkJICAgIHN3aXRj aCAoanN0YXRlKSB7Ci0JCQkgICAgICBjYXNlIDE6CS8qIEN1cnJlbnQgc3RhdGUgaXMgS2F0YWth bmEgKi8KLQkJCQlqYnVmW2p4KytdID0gMHgwZjsgLyogU0kgICovCi0JCQkgICAgICBjYXNlIDA6 CS8qIEN1cnJlbnQgc3RhdGUgaXMgUm9tYW4gKi8KLQkJCQlqYnVmW2p4KytdID0gMHgxYjsgLyog RVNDICovCi0JCQkJamJ1ZltqeCsrXSA9IDB4MjQ7IC8qICQgICAqLwotCQkJCWpidWZbangrK10g PSAweDQyOyAvKiBCICAgKi8KLQkJCSAgICAgIGRlZmF1bHQ6CS8qIEN1cnJlbnQgc3RhdGUgaXMg YWxyZWFkeSBLYW5qaSAqLwotCQkJCWpidWZbangrK10gPSBldS54X2NoYXJbYnl0ZW9yZGVyXSAm IDB4N2Y7Ci0JCQkJamJ1ZltqeCsrXSA9IGV1LnhfY2hhclsxLWJ5dGVvcmRlcl0gJiAweDdmOwot CQkJCWJyZWFrOwotCQkJICAgIH0KLQkJCSAgICBqc3RhdGUgPSAyOwkvKiBTZXQgc3RhdGUgdG8g S2FuamkgKi8KLQkJCX0KLQkJCWZvciAoaSA9IDA7IGkgPCBqeDsgaSsrKSAvKiBPdXRwdXQgdGhl IHJlc3VsdCAqLwotCQkJICBpZiAoKHJjID0gcG5ieXRlKGpidWZbaV0sZm4pKSA8IDApCi0JCQkg ICAgcmV0dXJuKHJjKTsKLQkJCXJldHVybihqeCk7CS8qIFJldHVybiBpdHMgbGVuZ3RoICovCi0J CSAgICB9Ci0JCX0KLSNlbmRpZiAvKiBLQU5KSSAqLwotCSAgICB9IGVsc2UgewkJCS8qIE5vIHRy YW5zbGF0aW9uIGZ1bmN0aW9uICovCi0JCWludCBjb3VudCA9IDA7Ci0JCWlmICh1dGZlcnJvcikg ewotCQkgICAgaWYgKChyYyA9IHBuYnl0ZSgodWNzb3JkZXIgPyAweGZkIDogMHhmZiksZm4pKSA8 IDApCi0JCSAgICAgIHJldHVybihyYyk7Ci0JCSAgICBpZiAoKHJjID0gcG5ieXRlKCh1Y3NvcmRl ciA/IDB4ZmYgOiAweGZkKSxmbikpIDwgMCkKLQkJICAgICAgcmV0dXJuKHJjKTsKLQkJICAgIGNv dW50ICs9IDI7Ci0JCX0KLQkJaWYgKChyYyA9IHBuYnl0ZSh1Yy54X2NoYXJbc3dhcHBpbmddLGZu KSkgPCAwKQotCQkgIHJldHVybihyYyk7Ci0JCWlmICgocmMgPSBwbmJ5dGUodWMueF9jaGFyWzEt c3dhcHBpbmddLGZuKSkgPCAwKQotCQkgIHJldHVybihyYyk7Ci0JCWNvdW50ICs9IDI7Ci0JCXJl dHVybihjb3VudCk7Ci0JICAgIH0KLQl9Ci0gICAgfSBlbHNlIHsJCQkJLyogQnl0ZSB0byBVbmlj b2RlICovCi0JaWYgKHh0dSkgewkJCS8qIFRDUy10by1VQ1MgZnVuY3Rpb24gKi8KLQkgICAgaWYg KCgodGNzaW5mb1t0Y3NdLnNpemUgPiAxMjgpICYmICh1Yy54X3Nob3J0ICYgMHg4MCkpIHx8Ci0J CXRjc2luZm9bdGNzXS5zaXplIDw9IDEyOCkKLQkgICAgICB1Yy54X3Nob3J0ID0gKCp4dHUpKHVj Lnhfc2hvcnQpOwotCX0KLQlpZiAoZmNzID09IEZDX1VDUzIpIHsJCS8qIEFuZCBGQ1MgaXMgVUNT LTIgKi8KLQkgICAgLyogV3JpdGUgb3V0IHRoZSBieXRlcyBpbiB0aGUgYXBwcm9wcmlhdGUgYnl0 ZSBvcmRlciAqLwotCSAgICBpZiAoIW9mZmMgJiYgdWNzYm9tKSB7CS8qIEJlZ2lubmluZyBvZiBm aWxlPyAqLwotCQlpZiAoKHJjID0gcG5ieXRlKCh1Y3NvcmRlciA/IDB4ZmYgOiAweGZlKSxmbikp IDwgMCkgLyogQk9NICovCi0JCSAgcmV0dXJuKHJjKTsKLQkJaWYgKChyYyA9IHBuYnl0ZSgodWNz b3JkZXIgPyAweGZlIDogMHhmZiksZm4pKSA8IDApCi0JCSAgcmV0dXJuKHJjKTsKLQkgICAgfQot CSAgICBpZiAoKHJjID0gcG5ieXRlKHVjLnhfY2hhcltzd2FwcGluZ10sZm4pKSA8IDApCi0JICAg ICAgcmV0dXJuKHJjKTsKLQkgICAgaWYgKChyYyA9IHBuYnl0ZSh1Yy54X2NoYXJbMS1zd2FwcGlu Z10sZm4pKSA8IDApCi0JICAgICAgcmV0dXJuKHJjKTsKLQkgICAgcmV0dXJuKDIpOwotCX0gZWxz ZSBpZiAoZmNzID09IEZDX1VURjgpIHsJLyogQ29udmVydCB0byBVVEYtOCAqLwotCSAgICBDSEFS ICogYnVmID0gTlVMTDsKLQkgICAgaW50IGksIGNvdW50OwotCSAgICBpZiAoKGNvdW50ID0gdWNz Ml90b191dGY4KHVjLnhfc2hvcnQsJmJ1ZikpIDwgMSkKLQkgICAgICByZXR1cm4oLTEpOwotCSAg ICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLQkgICAgICBpZiAoKHJjID0gcG5ieXRlKGJ1 ZltpXSxmbikpIDwgMCkKLQkJcmV0dXJuKHJjKTsKLQkgICAgcmV0dXJuKGNvdW50KTsKLQl9IGVs c2UgewotCSAgICBkZWJ1ZyhGMTAwLCJ4cG5ieXRlIGltcG9zc2libGUgY29tYmluYXRpb24iLCIi LDApOwotCSAgICByZXR1cm4oLTEpOwotCX0KLSAgICB9Ci0jZWxzZQotI2lmZGVmIEtBTkpJCi0v KgotICBUaGlzIGFsbW9zdCwgYnV0IG5vdCBxdWl0ZSwgZHVwbGljYXRlcyB0aGUgS2Fuamkgc2Vj dGlvbiBhYm92ZS4KLSAgVGhlcmUgaXMgbm8gZG91YnQgYSB3YXkgdG8gY29tYmluZSB0aGUgc2Vj dGlvbnMgbW9yZSBlbGVnYW50bHksCi0gIGJ1dCBwcm9iYWJseSBvbmx5IGF0IHRoZSBleHBlbnNl IG9mIGFkZGl0aW9uYWwgZXhlY3V0aW9uIG92ZXJoZWFkLgotICBBcyBtYXR0ZXJzIHN0YW5kLCBi ZSBjYXJlZnVsIHRvIHJlZmxlY3QgYW55IGNoYW5nZXMgaW4gdGhpcyBzZWN0aW9uCi0gIHRvIHRo ZSBvdGhlciBLYW5qaSBzZWN0aW9uIGFib3ZlLgotKi8KLSAgICBpZiAodGNzID09IFRDX0pFVUMp IHsJCS8qIEluY29taW5nIEphcGFuZXNlIEVVQyAqLwotCWludCBjb3VudCA9IDA7Ci0Jc3dpdGNo IChmY3MpIHsJCQkvKiBGaWxlIGNoYXJhY3RlciBzZXQgKi8KLQkgIGNhc2UgRkNfU0hKSVM6CQkv KiBTaGlmdC1KSVMgLS0ganVzdCBvdXRwdXQgaXQgKi8KLQkgICAgaWYgKHNqLnhfY2hhcltieXRl b3JkZXJdKQkvKiBCdXQgbm90IGhpZ2ggYnl0ZSBpZiB6ZXJvICovCi0JICAgICAgaWYgKChyYyA9 IHBuYnl0ZSgoQ0hBUilzai54X2NoYXJbYnl0ZW9yZGVyXSxmbikpIDwgMCkKLQkJcmV0dXJuKHJj KTsKLQkgICAgY291bnQrKzsKLQkgICAgaWYgKChyYyA9IHBuYnl0ZSgoQ0hBUilzai54X2NoYXJb MS1ieXRlb3JkZXJdLGZuKSkgPCAwKQotCSAgICAgIHJldHVybihyYyk7Ci0JICAgIGNvdW50Kys7 Ci0JICAgIHJldHVybihjb3VudCk7Ci0JICBjYXNlIEZDX0pFVUM6CQkJLyogRVVDLUpQICovCi0J ICAgIGV1Lnhfc2hvcnQgPSBzal90b19ldShzai54X3Nob3J0KTsgLyogU2hpZnQtSklTIHRvIEVV QyAqLwotCSAgICBkZWJ1ZyhGMDAxLCJ4cG5ieXRlIEZDX0pFVUMgZXUiLCIiLGV1Lnhfc2hvcnQp OwotCSAgICBpZiAoZXUueF9zaG9ydCA9PSAweGZmZmYpIHsgLyogQmFkICovCi0JCWlmICgocmMg PSBwbmJ5dGUoVU5LLGZuKSkgPCAwKQotCQkgIHJldHVybihyYyk7Ci0JCXJldHVybigxKTsKLQkg ICAgfSBlbHNlIHsJCQkvKiBHb29kICovCi0JCWludCBjb3VudCA9IDA7CQkvKiBXcml0ZSBoaWdo IGJ5dGUgaWYgbm90IHplcm8gKi8KLQkJaWYgKGV1LnhfY2hhcltieXRlb3JkZXJdKSB7Ci0JCSAg ICBpZiAoKHJjID0gcG5ieXRlKChDSEFSKWV1LnhfY2hhcltieXRlb3JkZXJdLGZuKSkgPCAwKQot CQkgICAgICByZXR1cm4ocmMpOwotCQkgICAgY291bnQrKzsKLQkJfQotCQkvKiBBbHdheXMgd3Jp dGUgbG93IGJ5dGUgKi8KLQkJaWYgKChyYyA9IHBuYnl0ZSgoQ0hBUilldS54X2NoYXJbMS1ieXRl b3JkZXJdLGZuKSkgPCAwKQotCQkgIHJldHVybihyYyk7Ci0JCWNvdW50Kys7Ci0JCXJldHVybihj b3VudCk7Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0KLQkgIGNhc2UgRkNfSklTNzoJCQkvKiBKSVMt NyAqLwotCSAgY2FzZSBGQ19KREVDOgkJCS8qIERFQyBLYW5qaSAqLwotCSAgICBldS54X3Nob3J0 ID0gc2pfdG9fZXUoc2oueF9zaG9ydCk7IC8qIFNoaWZ0LUpJUyB0byBFVUMgKi8KLQkgICAgaWYg KGV1Lnhfc2hvcnQgPT0gMHhmZmZmKSB7IC8qIEJhZCAqLwotCQlkZWJ1ZyhGMDAxLCJ4cG5ieXRl IEZDX0pJUzcgYmFkIGV1IiwiIixldS54X3Nob3J0KTsKLQkJaWYgKChyYyA9IHBuYnl0ZShVTkss Zm4pKSA8IDApCi0JCSAgcmV0dXJuKHJjKTsKLQkJcmV0dXJuKDEpOwotCSAgICB9IGVsc2UgewkJ CS8qIEdvb2QgKi8KLQkJaW50IGk7Ci0JCWNoYXIgYSA9IGV1LnhfY2hhclsxLWJ5dGVvcmRlcl07 IC8qIExvdyBieXRlICovCi0JCWRlYnVnKEYwMDEsInhwbmJ5dGUgRkNfSklTNyBldSIsIiIsZXUu eF9zaG9ydCk7Ci0JCWlmIChldS54X2NoYXJbYnl0ZW9yZGVyXSA9PSAwKSB7IC8qIFJvbWFuICov Ci0JCSAgICBzd2l0Y2ggKGpzdGF0ZSkgewotCQkgICAgICBjYXNlIDE6CQkvKiBDdXJyZW50IHN0 YXRlIGlzIEthdGFrYW5hICovCi0JCQlqYnVmWzBdID0gMHgwZjsJLyogU0kgKi8KLQkJCWpidWZb MV0gPSBhOwotCQkJanggPSAyOwotCQkJYnJlYWs7Ci0JCSAgICAgIGNhc2UgMjoJCS8qIEN1cnJl bnQgc3RhdGUgaXMgS2FuamkgKi8KLQkJCWpidWZbMF0gPSAweDFiOwkvKiBFU0MgKi8KLQkJCWpi dWZbMV0gPSAweDI4OwkvKiAoICovCi0JCQlqYnVmWzJdID0gMHg0YTsJLyogSiAqLwotCQkJamJ1 ZlszXSA9IGE7Ci0JCQlqeCA9IDQ7Ci0JCQlicmVhazsKLQkJICAgICAgZGVmYXVsdDoJCS8qIEN1 cnJlbnQgc3RhdGUgaXMgUm9tYW4gKi8KLQkJCWpidWZbMF0gPSBhOwotCQkJanggPSAxOwotCQkJ YnJlYWs7Ci0JCSAgICB9Ci0JCSAgICBqc3RhdGUgPSAwOwkJLyogTmV3IHN0YXRlIGlzIFJvbWFu ICovCi0JCX0gZWxzZSBpZiAoZXUueF9jaGFyW2J5dGVvcmRlcl0gPT0gMHg4ZSkgeyAvKiBLYW5h ICovCi0JCSAgICBqeCA9IDA7Ci0JCSAgICBzd2l0Y2ggKGpzdGF0ZSkgewotCQkgICAgICBjYXNl IDI6CQkgICAvKiBmcm9tIEthbmppICovCi0JCQlqYnVmW2p4KytdID0gMHgxYjsgLyogRVNDICov Ci0JCQlqYnVmW2p4KytdID0gMHgyODsgLyogKCAqLwotCQkJamJ1ZltqeCsrXSA9IDB4NGE7IC8q IEogKi8KLQkJICAgICAgY2FzZSAwOgkJICAgLyogZnJvbSBSb21hbiAqLwotCQkJamJ1ZltqeCsr XSA9IDB4MGU7IC8qIFNPICovCi0JCSAgICAgIGRlZmF1bHQ6CQkgICAvKiBTdGF0ZSBpcyBhbHJl YWR5IEthbmEqLwotCQkJamJ1ZltqeCsrXSA9IChhICYgMHg3Zik7IC8qIGFuZCB0aGUgY2hhciAq LwotCQkJYnJlYWs7Ci0JCSAgICB9Ci0JCSAgICBqc3RhdGUgPSAxOwkJLyogTmV3IHN0YXRlIGlz IEthdGFrYW5hICovCi0JCX0gZWxzZSB7CQkvKiBLYW5qaSAqLwotCQkgICAganggPSAwOwotCQkg ICAgc3dpdGNoIChqc3RhdGUpIHsKLQkJICAgICAgY2FzZSAxOgkJLyogQ3VycmVudCBzdGF0ZSBp cyBLYXRha2FuYSAqLwotCQkJamJ1ZltqeCsrXSA9IDB4MGY7IC8qIFNJICAqLwotCQkgICAgICBj YXNlIDA6CQkvKiBDdXJyZW50IHN0YXRlIGlzIFJvbWFuICovCi0JCQlqYnVmW2p4KytdID0gMHgx YjsgLyogRVNDICovCi0JCQlqYnVmW2p4KytdID0gMHgyNDsgLyogJCAgICovCi0JCQlqYnVmW2p4 KytdID0gMHg0MjsgLyogQiAgICovCi0JCSAgICAgIGRlZmF1bHQ6CQkvKiBDdXJyZW50IHN0YXRl IGlzIGFscmVhZHkgS2FuamkgKi8KLQkJCWpidWZbangrK10gPSBldS54X2NoYXJbYnl0ZW9yZGVy XSAmIDB4N2Y7Ci0JCQlqYnVmW2p4KytdID0gZXUueF9jaGFyWzEtYnl0ZW9yZGVyXSAmIDB4N2Y7 Ci0JCQlicmVhazsKLQkJICAgIH0KLQkJICAgIGpzdGF0ZSA9IDI7CQkvKiBTZXQgc3RhdGUgdG8g S2FuamkgKi8KLQkJfQotCQlmb3IgKGkgPSAwOyBpIDwgang7IGkrKykgLyogT3V0cHV0IHRoZSBy ZXN1bHQgKi8KLQkJICBpZiAoKHJjID0gcG5ieXRlKGpidWZbaV0sZm4pKSA8IDApCi0JCSAgICBy ZXR1cm4ocmMpOwotCQlyZXR1cm4oangpOwkJLyogUmV0dXJuIGl0cyBsZW5ndGggKi8KLQkgICAg fQotCSAgZGVmYXVsdDoKLQkgICAgaWYgKHNqLnhfc2hvcnQgPCAweDgwKQotCSAgICAgIHJldHVy bihzai54X3Nob3J0KTsKLQkgICAgZWxzZQotCSAgICAgIHJldHVybignPycpOwotCX0KLSAgICB9 Ci0jZW5kaWYgLyogS0FOSkkgKi8KLSNlbmRpZiAvKiBVTklDT0RFICovCi0gICAgZGVidWcoRjEw MCwieHBuYnl0ZSBCQUQgRkFMTFRIUlUiLCIiLDApOwotICAgIHJldHVybigtMSk7Ci19Ci0KLSNp Zm5kZWYgTk9YRkVSCi0KLS8qICBEIEUgQyBPIEQgRSAgLS0gIEtlcm1pdCBEYXRhLXBhY2tldCBk ZWNvZGVyICAqLwotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotZGVjb2RlKENIQVIgKmJ1ZiwgaW50 ICgqZm4pKGNoYXIpLCBpbnQgeGxhdGUpCi0jZWxzZQotZGVjb2RlKGJ1Zixmbix4bGF0ZSkgcmVn aXN0ZXIgQ0hBUiAqYnVmOyByZWdpc3RlciBpbnQgKCpmbikoKTsgaW50IHhsYXRlOwotI2VuZGlm IC8qIENLX0FOU0lDICovCi0vKiBkZWNvZGUgKi8gewotICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGlu dCBhLCBhNywgYTgsIGI4OyAvKiBWYXJpb3VzIGNvcGllcyBvZiBjdXJyZW50IGNoYXIgKi8KLSAg ICBpbnQgdDsJCQkJLyogSW50IHZlcnNpb24gb2YgY2hhcmFjdGVyICovCi0gICAgaW50IHNzZmxn OwkJCQkvKiBDaGFyYWN0ZXIgd2FzIHNpbmdsZS1zaGlmdGVkICovCi0gICAgaW50IGNjcGZsZzsJ CQkJLyogRm9yIEN0cmwtdW5wcmVmaXhpbmcgc3RhdHMgKi8KLSAgICBpbnQgbGVuOwotICAgIGxv bmcgejsKLSAgICBDSEFSIGM7Ci0vKgotICBDYXRjaCB0aGUgY2FzZSBpbiB3aGljaCB3ZSBhcmUg YXNrZWQgdG8gZGVjb2RlIGludG8gYSBmaWxlIHRoYXQgaXMgbm90IG9wZW4sCi0gIGZvciBleGFt cGxlLCBpZiB0aGUgdXNlciBpbnRlcnJ1cHRlZCB0aGUgdHJhbnNmZXIsIGJ1dCB0aGUgb3RoZXIg S2VybWl0Ci0gIGtlZXBzIHNlbmRpbmcuCi0qLwotICAgIGlmICgoY3hzZWVuIHx8IGN6c2VlbiB8 fCBkaXNjYXJkKSAmJiAoZm4gPT0gcHV0ZmlsKSkKLSAgICAgIHJldHVybigwKTsKLQotI2lmZGVm IENPTU1FTlQKLSNpZmRlZiBDS1RVTklORwotICAgIGlmIChiaW5hcnkgJiYgIXBhcml0eSkKLSAg ICAgIHJldHVybihiZGVjb2RlKGJ1ZixmbikpOwotI2VuZGlmIC8qIENLVFVOSU5HICovCi0jZW5k aWYgLyogQ09NTUVOVCAqLwotICAgIGRlYnVnKEYxMDAsIkRFQ09ERSIsIiIsMCk7Ci0KLSAgICB4 ZGJ1ZiA9IGJ1ZjsJCQkvKiBNYWtlIGdsb2JhbCBjb3B5IG9mIHBvaW50ZXIuICovCi0gICAgcnB0 ID0gMDsJCQkJLyogSW5pdGlhbGl6ZSByZXBlYXQgY291bnQuICovCi0KLSAgICBsZW4gPSBybG47 CQkJCS8qIE51bWJlciBvZiBieXRlcyBpbiBkYXRhIGZpZWxkICovCi0gICAgd2hpbGUgKGxlbiA+ IDApIHsJCQkvKiBMb29wIGZvciBlYWNoIGJ5dGUgKi8KLSAgICAgICAgYSA9ICp4ZGJ1ZisrICYg MHhmZjsJCS8qIEdldCBuZXh0IGNoYXJhY3RlciAqLwotCWxlbi0tOwotCWlmIChhID09IHJwdHEg JiYgcnB0ZmxnKSB7CS8qIEdvdCBhIHJlcGVhdCBwcmVmaXg/ICovCi0JICAgIHJwdCA9IHh1bmNo YXIoKnhkYnVmKysgJiAweEZGKTsgLyogWWVzLCBnZXQgdGhlIHJlcGVhdCBjb3VudCwgKi8KLQkg ICAgcnB0biArPSBycHQ7Ci0JICAgIGEgPSAqeGRidWYrKyAmIDB4RkY7CS8qIGFuZCBnZXQgdGhl IHByZWZpeGVkIGNoYXJhY3Rlci4gKi8KLQkgICAgbGVuIC09IDI7Ci0JfQotCWI4ID0gbHNzdGF0 ZSA/IDAyMDAgOiAwOwkvKiA4dGgtYml0IHZhbHVlIGZyb20gU0hJRlQtU1RBVEUgKi8KLQlpZiAo ZWJxZmxnICYmIGEgPT0gZWJxKSB7CS8qIEhhdmUgOHRoLWJpdCBwcmVmaXg/ICovCi0JICAgIGI4 IF49IDAyMDA7CQkJLyogWWVzLCBpbnZlcnQgdGhlIDh0aCBiaXQncyB2YWx1ZSwgKi8KLQkgICAg c3NmbGcgPSAxOwkJCS8qIHJlbWVtYmVyIHdlIGRpZCB0aGlzLCAqLwotCSAgICBhID0gKnhkYnVm KysgJiAweEZGOwkvKiBhbmQgZ2V0IHRoZSBwcmVmaXhlZCBjaGFyYWN0ZXIuICovCi0JICAgIGxl bi0tOwotCX0gZWxzZSBzc2ZsZyA9IDA7Ci0JY2NwZmxnID0gMDsKLQlpZiAoYSA9PSBjdGxxKSB7 CQkvKiBJZiBjb250cm9sIHByZWZpeCwgKi8KLQkgICAgYSAgPSAqeGRidWYrKyAmIDB4RkY7CS8q IGdldCBpdHMgb3BlcmFuZCAqLwotCSAgICBsZW4tLTsKLQkgICAgYTcgPSBhICYgMHg3RjsJCS8q IGFuZCBpdHMgbG93IDcgYml0cy4gKi8KLQkgICAgaWYgKChhNyA+PSAwMTAwICYmIGE3IDw9IDAx MzcpIHx8IGE3ID09ICc/JykgeyAvKiBDb250cm9sbGlmeSAqLwotCQlhID0gY3RsKGEpOwkJLyog aWYgaW4gY29udHJvbCByYW5nZS4gKi8KLQkJYTcgPSBhICYgMHg3RjsKLQkJY2NwZmxnID0gMTsJ CS8qIE5vdGUgdGhhdCB3ZSBkaWQgdGhpcyAqLwotCQljY3ArKzsJCQkvKiBDb3VudCBmb3Igc3Rh dHMgKi8KLQkgICAgfQotCX0gZWxzZSBhNyA9IGEgJiAweDdmOwkJLyogTm90IGNvbnRyb2wgcXVv dGUgKi8KLQlpZiAoYTcgPCAzMiB8fCBhNyA9PSAxMjcpIHsJLyogQ29udHJvbCBjaGFyYWN0ZXI/ ICovCi0JICAgIGlmICghY2NwZmxnKSBjY3UrKzsJCS8qIEEgYmFyZSBvbmUsIGNvdW50IGl0ICov Ci0JICAgIGlmIChsc2NhcHUpIHsJCS8qIElmIGRvaW5nIGxvY2tpbmcgc2hpZnRzLi4uICovCi0J CWlmIChsc3N0YXRlKQkJLyogSWYgU0hJRlRFRCAqLwotCQkgIGE4ID0gKGEgJiB+YjgpICYgMHhG RjsgLyogSW52ZXJ0IG1lYW5pbmcgb2YgOHRoIGJpdCAqLwotCQllbHNlCQkJLyogb3RoZXJ3aXNl ICovCi0JCSAgYTggPSBhIHwgYjg7CQkvKiBPUiBpbiA4dGggYml0ICovCi0JCS8qIElmIHdlJ3Jl IG5vdCBpbiBhIHF1b3RlZCBzZXF1ZW5jZSAqLwotCQlpZiAoIWxzcXVvdGUgJiYgKCFsc3N0YXRl IHx8ICFzc2ZsZykpIHsKLQkJICAgIGlmIChhOCA9PSBETEUpIHsJLyogQ2hlY2sgZm9yIERMRSBx dW90ZSAqLwotCQkJbHNxdW90ZSA9IDE7CS8qIHByZWZpeGVkIGJ5IHNpbmdsZSBzaGlmdCEgKi8K LQkJCWNvbnRpbnVlOwotCQkgICAgfSBlbHNlIGlmIChhOCA9PSBTTykgeyAvKiBDaGVjayBmb3Ig U2hpZnQtT3V0ICovCi0JCQlsc3N0YXRlID0gMTsJLyogU0hJRlQtU1RBVEUgPSBTSElGVEVEICov Ci0JCQljb250aW51ZTsKLQkJICAgIH0gZWxzZSBpZiAoYTggPT0gU0kpIHsgLyogb3IgU2hpZnQt SW4gKi8KLQkJCWxzc3RhdGUgPSAwOwkvKiBTSElGVC1TVEFURSA9IFVOU0hJRlRFRCAqLwotCQkJ Y29udGludWU7Ci0JCSAgICB9Ci0JCX0gZWxzZSBsc3F1b3RlID0gMDsKLQkgICAgfQotCX0KLQlh IHw9IGI4OwkJCS8qIE9SIGluIHRoZSA4dGggYml0ICovCi0JaWYgKHJwdCA9PSAwKSBycHQgPSAx OwkJLyogSWYgbm8gcmVwZWF0cywgdGhlbiBvbmUgKi8KLSNpZm5kZWYgTk9DU0VUUwotCWlmICgh YmluYXJ5KSB7CQkJLyogSWYgaW4gdGV4dCBtb2RlLCAqLwotCSAgICBpZiAodGNoYXJzZXQgIT0g VENfVUNTMikgewotCQlpZiAoZmVvbCAmJiBhID09IENSKQkvKiBDb252ZXJ0IENSTEYgdG8gbmV3 bGluZSBjaGFyICovCi0JCSAgY29udGludWU7Ci0JCWlmIChmZW9sICYmIGEgPT0gTEYpCi0JCSAg YSA9IGZlb2w7Ci0JICAgIH0KLQkgICAgaWYgKHhsYXR5cGUgPT0gWExBX0JZVEUpCS8qIEJ5dGUt Zm9yLWJ5dGUgLSBkbyBpdCBub3cgKi8KLQkgICAgICBpZiAoeGxhdGUgJiYgcngpIGEgPSAoKnJ4 KSgoQ0hBUikgYSk7Ci0gICAgCX0KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0JLyogKFBXUCkgRGVj b2Rpbmcgc3BlZWR1cCB2aWEgYnVmZmVyZWQgb3V0cHV0IGFuZCBhIG1hY3JvLi4uICovCi0JaWYg KGZuID09IHB1dGZpbCkgewotCSAgICBmb3IgKDsgcnB0ID4gMDsgcnB0LS0pIHsJLyogT3V0cHV0 IHRoZSBjaGFyIFJQVCB0aW1lcyAqLwotI2lmZGVmIENBTElCUkFURQotCQlpZiAoY2FsaWJyYXRl KSB7Ci0JCSAgICBmZmMrKzsKLQkJICAgIGNvbnRpbnVlOwotCQl9Ci0jZW5kaWYgLyogQ0FMSUJS QVRFICovCi0KLS8qIE5vdGU6IFRoZSBVbmljb2RlIGFuZCBLYW5qaSBzZWN0aW9ucyBjYW4gcHJv YmFibHkgYmUgY29tYmluZWQgbm93OyAqLwotLyogdGhlIFVuaWNvZGUgbWV0aG9kICh4cG5ieXRl KCkpIGNvdmVycyBLYW5qaSB0b28uICovCi0KLSNpZmRlZiBVTklDT0RFCi0JCWlmICghYmluYXJ5 ICYmIHhsYXR5cGUgPT0gWExBX1VOSUNPREUpCi0JCSAgdCA9IHhwbmJ5dGUoKHVuc2lnbmVkKSgo dW5zaWduZWQpYSAmIDB4ZmYpLAotCQkJICAgICAgdGNoYXJzZXQsCi0JCQkgICAgICBmY2hhcnNl dCwKLQkJCSAgICAgIGZuCi0JCQkgICAgICApOwotCQllbHNlCi0jZW5kaWYgLyogVU5JQ09ERSAq LwotI2lmZGVmIEtBTkpJCi0JCWlmICghYmluYXJ5ICYmIHRjaGFyc2V0ID09IFRDX0pFVUMgJiYK LQkJICAgIGZjaGFyc2V0ICE9IEZDX0pFVUMpIHsgLyogVHJhbnNsYXRpbmcgZnJvbSBKLUVVQyAq LwotCQkgICAgaWYgKCFmZmMpIHhrYW5qZigpOwotCQkgICAgaWYgKHhrYW5qaShhLGZuKSA8IDAp ICAvKiB0byBzb21ldGhpbmcgZWxzZT8gKi8KLQkJICAgICAgcmV0dXJuKC0xKTsKLQkJICAgIGVs c2UgdCA9IDE7Ci0JCX0gZWxzZQotI2VuZGlmIC8qIEtBTkpJICovCi0JCXsKLSNpZmRlZiBPUzIK LQkJICAgICAgaWYgKHhmbGcgJiYgIXJlbWZpbGUpIHsgLyogV3JpdGUgdG8gdmlydHVhbCBzY3Jl ZW4gKi8KLQkJCSAgY2hhciBfYTsKLQkJCSAgX2EgPSBhICYgZm1hc2s7Ci0JCQkgIHQgPSBjb25v YyhfYSk7Ci0JCQkgIGlmICh0IDwgMSkKLQkJCSAgICB0ID0gLTE7Ci0JCSAgICAgIH0gZWxzZQot I2VuZGlmIC8qIE9TMiAqLwotCQkJdCA9IHptY2hvdXQoYSAmIGZtYXNrKTsgLyogem1jaG91dCBp cyBhIG1hY3JvICovCi0JCX0KLQkJaWYgKHQgPCAwKSB7Ci0JCSAgICBkZWJ1ZyhGMTAxLCJkZWNv ZGUgd3JpdGUgZXJybm8iLCIiLGVycm5vKTsKLQkJICAgIHJldHVybigtMSk7Ci0JCX0KLSNpZmRl ZiBVTklDT0RFCi0JCWlmICh4bGF0eXBlICE9IFhMQV9VTklDT0RFIHx8IGJpbmFyeSkgewotCQkg ICAgZmZjKys7CQkvKiBDb3VudCB0aGUgY2hhcmFjdGVyICovCi0JCSAgICBpZiAoZG9jcmMgJiYg IXhmbGcgJiYgIXJlbWZpbGUpIHsgLyogVXBkYXRlIGZpbGUgQ1JDICovCi0JCQljID0gYTsJCS8q IEZvcmNlIGNvbnZlcnNpb24gdG8gdW5zaWduZWQgY2hhciAqLwotCQkJeiA9IGNyYzE2IF4gKGxv bmcpYzsKLQkJCWNyYzE2ID0gKGNyYzE2ID4+IDgpIF4KLQkJCSAgKGNyY3RhWyh6ICYgMHhGMCkg Pj4gNF0gXiBjcmN0Ylt6ICYgMHgwRl0pOwotCQkgICAgfQotCQl9Ci0jZW5kaWYgLyogVU5JQ09E RSAqLwotCSAgICB9Ci0JfSBlbHNlIHsJCQkvKiBPdXRwdXQgdG8gc29tZXRoaW5nIGVsc2UuICov Ci0JICAgIGEgJj0gZm1hc2s7CQkJLyogQXBwbHkgZmlsZSBtYXNrICovCi0JICAgIGZvciAoOyBy cHQgPiAwOyBycHQtLSkgewkvKiBPdXRwdXQgdGhlIGNoYXIgUlBUIHRpbWVzICovCi0jaWZkZWYg Q0FMSUJSQVRFCi0JCWlmIChjYWxpYnJhdGUpIHsKLQkJICAgIGZmYysrOwotCQkgICAgY29udGlu dWU7Ci0JCX0KLSNlbmRpZiAvKiBDQUxJQlJBVEUgKi8KLQkJaWYgKCgqZm4pKChjaGFyKSBhKSA8 IDApIHJldHVybigtMSk7IC8qIFNlbmQgdG8gb3V0cHV0IGZ1bmMuICovCi0JICAgIH0KLQl9Ci0j aWZkZWYgQ0tfQ1RSTFoKLQlsYXN0Y2hhciA9IGE7Ci0jZW5kaWYgLyogQ0tfQ1RSTFogKi8KLSAg ICB9Ci0gICAgcmV0dXJuKDApOwotfQotCi0vKiAgRyBFIFQgUCBLIFQgLS0gRmlsbCBhIHBhY2tl dCBkYXRhIGZpZWxkICAqLwotCi0vKgotICBHZXRzIGNoYXJhY3RlcnMgZnJvbSB0aGUgY3VycmVu dCBzb3VyY2UgLS0gZmlsZSBvciBtZW1vcnkgc3RyaW5nLgotICBFbmNvZGVzIHRoZSBkYXRhIGlu dG8gdGhlIHBhY2tldCwgZmlsbGluZyB0aGUgcGFja2V0IG9wdGltYWxseS4KLSAgU2V0IGZpcnN0 ID0gMSB3aGVuIGNhbGxpbmcgZm9yIHRoZSBmaXJzdCB0aW1lIG9uIGEgZ2l2ZW4gaW5wdXQgc3Ry ZWFtCi0gIChzdHJpbmcgb3IgZmlsZSkuCi0KLSAgQ2FsbCB3aXRoOgotICAgIGJ1Zm1heCAtLSBj dXJyZW50IHNlbmQtcGFja2V0IHNpemUKLSAgICB4bGF0ZSAgLS0gZmxhZzogMCB0byBza2lwIGNo YXJhY3Rlci1zZXQgdHJhbnNsYXRpb24sIDEgdG8gdHJhbnNsYXRlCi0KLSAgVXNlcyBnbG9iYWwg dmFyaWFibGVzOgotICAgIHQgICAgIC0tIGN1cnJlbnQgY2hhcmFjdGVyLgotICAgIGZpcnN0IC0t IGZsYWc6IDEgdG8gc3RhcnQgdXAsIDAgZm9yIGlucHV0IGluIHByb2dyZXNzLCAtMSBmb3IgRU9G LgotICAgIG5leHQgIC0tIG5leHQgY2hhcmFjdGVyIChub3QgdXNlZCBhbnkgbW9yZSkuCi0gICAg ZGF0YSAgLS0gcG9pbnRlciB0byB0aGUgcGFja2V0IGRhdGEgYnVmZmVyLgotICAgIHNpemUgIC0t IG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoZSBkYXRhIGJ1ZmZlci4KLSAgICBtZW1zdHIgLSBm bGFnIHRoYXQgaW5wdXQgaXMgY29taW5nIGZyb20gYSBtZW1vcnkgc3RyaW5nIGluc3RlYWQgb2Yg YSBmaWxlLgotICAgIG1lbXB0ciAtIHBvaW50ZXIgdG8gc3RyaW5nIGluIG1lbW9yeS4KLSAgICAo KnN4KSgpICBjaGFyYWN0ZXIgc2V0IHRyYW5zbGF0aW9uIGZ1bmN0aW9uCi0KLSAgUmV0dXJuczoK LSAgICBUaGUgc2l6ZSBhcyB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24sIGFuZCBhbHNvIHNldHMgZ2xv YmFsICJzaXplIiwKLSAgICBhbmQgZmlsbHMgKGFuZCBudWxsLXRlcm1pbmF0ZXMpIHRoZSBnbG9i YWwgZGF0YSBhcnJheS4KLSAgICBSZXR1cm5zOgotICAgICAgMCBvbiBFT0YuCi0gICAgIC0xIG9u IGZhdGFsIChpbnRlcm5hbCkgZXJyb3IuCi0gICAgIC0zIG9uIHRpbWVvdXQgKGUuZy4gd2hlbiBy ZWFkaW5nIGRhdGEgZnJvbSBhIHBpcGUpLgotCi0gIFJld3JpdHRlbiBieSBQYXVsIFcuIFBsYWNl d2F5IChQV1ApIG9mIE9oaW8gU3RhdGUgVW5pdmVyc2l0eSwgTWFyY2ggMTk4OS4KLSAgSW5jb3Jw b3JhdGVzIG9sZCBnZXRjaHgoKSBhbmQgZW5jb2RlKCkgaW5saW5lIHRvIHJlZHVjZSBmdW5jdGlv biBjYWxscywKLSAgdXNlcyBidWZmZXJlZCBpbnB1dCBmb3IgbXVjaC1pbXByb3ZlZCBlZmZpY2ll bmN5LCBhbmQgY2xlYXJzIHVwIHNvbWUKLSAgY29uZnVzaW9uIHdpdGggbGluZSB0ZXJtaW5hdGlv biAoQ1JMRiB2cyBMRiB2cyBDUikuCi0KLSAgUmV3cml0dGVuIGFnYWluIGJ5IEZyYW5rIGRhIENy dXogdG8gaW5jb3Jwb3JhdGUgbG9ja2luZyBzaGlmdCBtZWNoYW5pc20sCi0gIE1heSAxOTkxLiAg QW5kIGFnYWluIGluIDE5OTggZm9yIGVmZmljaWVuY3ksIGV0Yywgd2l0aCBhIHNlcGFyYXRlCi0g IGJnZXRwa3QoKSBzcGxpdCBvdXQgZm9yIGJpbmFyeS1tb2RlIG5vLXBhcml0eSB0cmFuc2ZlcnMu Ci0qLwotCi0vKgotICBOb3RlOiBTZXBhcmF0ZSBLYW5qaSBzdXBwb3J0IGRhdGVzIGZyb20gY2ly Y2EgMTk5MSBhbmQgbm93ICgxOTk5KSBjYW4gbW9zdAotICBsaWtlbHkgYmUgY29tYmluZWQgd2l0 aCB0aGUgdGhlIFVuaWNvZGUgc3VwcG9ydDogdGhlIHhnbmJ5dGUoKS94cG5ieXRlKCkKLSAgbWVj aGFuaXNtIHdvcmtzIGZvciBib3RoIFVuaWNvZGUgYW5kIEthbmppLgotKi8KLSNpZmRlZiBLQU5K SQotaW50Ci1rZ2V0ZigKLSNpZmRlZiBDS19BTlNJQwotICAgICAgVk9JRAotI2VuZGlmIC8qIENL X0FOU0lDICovCi0gICAgICApIHsKLSAgICBpZiAoZnVuY3N0cikKLSAgICAgIHJldHVybigoKmZ1 bmNwdHIpKCkpOwotICAgIGVsc2UKLSAgICAgIHJldHVybih6bWluY2hhcigpKTsKLX0KLQotaW50 Ci1rZ2V0bSgKLSNpZmRlZiBDS19BTlNJQwotICAgICAgVk9JRAotI2VuZGlmIC8qIENLX0FOU0lD ICovCi0gICAgICApIHsKLSAgICBpbnQgeDsKLSAgICBpZiAoKHggPSAqbWVtcHRyKyspKSByZXR1 cm4oeCk7Ci0gICAgZWxzZSByZXR1cm4oLTEpOwotfQotI2VuZGlmIC8qIEtBTkpJICovCi0KLS8q Ci0gIExvb2thaGVhZCBmdW5jdGlvbiB0byBkZWNpZGUgd2hldGhlciBsb2NraW5nIHNoaWZ0IGlz IHdvcnRoIGl0LiAgTG9va3MgYXQKLSAgdGhlIG5leHQgZm91ciBpbnB1dCBjaGFyYWN0ZXJzIHRv IHNlZSBpZiBhbGwgb2YgdGhlaXIgOHRoIGJpdHMgbWF0Y2ggdGhlCi0gIGFyZ3VtZW50LiAgQ2Fs bCB3aXRoIDAgb3IgMDIwMC4gIFJldHVybnMgMSBvbiBtYXRjaCwgMCBpZiB0aGV5IGRvbid0IG1h dGNoLgotICBJZiB3ZSBkb24ndCBoYXBwZW4gdG8gaGF2ZSBhdCBsZWFzdCA0IG1vcmUgY2hhcmFj dGVycyB3YWl0aW5nIGluIHRoZSBpbnB1dAotICBidWZmZXIsIHJldHVybnMgMS4gIE5vdGUgdGhh dCB6aW5wdHIgcG9pbnRzIHR3byBjaGFyYWN0ZXJzIGFoZWFkIG9mIHRoZQotICBjdXJyZW50IGNo YXJhY3RlciBiZWNhdXNlIG9mIHJlcGVhdC1jb3VudCBsb29rYWhlYWQuCi0qLwotaW50Ci1sc2xv b2soYikgdW5zaWduZWQgaW50IGI7IHsJCS8qIExvY2tpbmcgU2hpZnQgTG9va2FoZWFkICovCi0g ICAgaW50IGk7Ci0gICAgaWYgKHppbmNudCA8IDMpCQkJLyogSWYgbm90IGVub3VnaCBjaGFycyBp biBidWZmZXIsICovCi0gICAgICByZXR1cm4oMSk7CQkJLyogZm9yY2Ugc2hpZnQtc3RhdGUgc3dp dGNoLiAqLwotICAgIGIgJj0gMDIwMDsJCQkJLyogRm9yY2UgYXJndW1lbnQgdG8gcHJvcGVyIGZv cm0uICovCi0gICAgZm9yIChpID0gLTE7IGkgPCAzOyBpKyspCQkvKiBMb29rIGF0IG5leHQgNSBj aGFyYWN0ZXJzIHRvICovCi0gICAgICBpZiAoKCgqKHppbnB0citpKSkgJiAwMjAwKSAhPSBiKQkv KiBzZWUgaWYgYWxsIHRoZWlyIDh0aCBiaXRzIG1hdGNoLiAgKi8KLQlyZXR1cm4oMCk7CQkJLyog VGhleSBkb24ndC4gKi8KLSAgICByZXR1cm4oMSk7CQkJCS8qIFRoZXkgZG8uICovCi19Ci0KLS8q IFJvdXRpbmUgdG8gY29tcHV0ZSBtYXhpbXVtIGRhdGEgbGVuZ3RoIGZvciBwYWNrZXQgdG8gYmUg ZmlsbGVkICovCi0KLWludAotbWF4ZGF0YSgpIHsJCQkJLyogR2V0IG1heGltdW0gZGF0YSBsZW5n dGggKi8KLSAgICBpbnQgbiwgbGVuOwotICAgIGRlYnVnKEYxMDEsIm1heGRhdGEgc3BzaXogMSIs IiIsc3BzaXopOwotICAgIGlmIChzcHNpeiA8IDApCQkJLyogSG93IGNvdWxkIHRoaXMgaGFwcGVu PyAqLwotICAgICAgc3BzaXogPSBEU1BTSVo7Ci0gICAgZGVidWcoRjEwMSwibWF4ZGF0YSBzcHNp eiAyIiwiIixzcHNpeik7Ci0gICAgbiA9IHNwc2l6IC0gNTsJCQkvKiBTcGFjZSBmb3IgRGF0YSBh bmQgQ2hlY2tzdW0gKi8KLSAgICBpZiAobiA+IDkyICYmIG4gPCA5NikgbiA9IDkyOwkvKiAiU2hv cnQiIExvbmcgcGFja2V0cyBkb24ndCBwYXkgKi8KLSAgICBpZiAobiA+IDkyICYmIGxwY2FwdSA9 PSAwKQkJLyogSWYgbG9uZyBwYWNrZXRzIG5lZWRlZCwgKi8KLSAgICAgIG4gPSA5MjsJCQkJLyog bWFrZSBzdXJlIHRoZXkndmUgYmVlbiBuZWdvdGlhdGVkICovCi0gICAgbGVuID0gbiAtIGJjdGw7 CQkJLyogU3BhY2UgZm9yIGRhdGEgKi8KLSAgICBpZiAobiA+IDkyKSBsZW4gLT0gMzsJCS8qIExv bmcgcGFja2V0IG5lZWRzIGhlYWRlciBjaGtzdW0gKi8KLSAgICBkZWJ1ZyhGMTAxLCJtYXhkYXRh IGxlbiAxIiwiIixsZW4pOwotICAgIGlmIChsZW4gPCAwKSBsZW4gPSAxMDsKLSAgICBkZWJ1ZyhG MTAxLCJtYXhkYXRhIGxlbiAyIiwiIixsZW4pOwotICAgIHJldHVybihsZW4pOwotfQotCi1zdGF0 aWMgQ0hBUiBsZWZ0b3Zlcls5XSA9IHsgJ1wwJywnXDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsJ1ww JywnXDAnLCdcMCcgfTsKLXN0YXRpYyBpbnQgbmxlZnQgPSAwOwotCi0jaWZkZWYgQ0tUVU5JTkcK LS8qCi0gIFdoZW4gQ0tUVU5JTkcgaXMgZGVmaW5lZCB3ZSB1c2UgdGhpcyBzcGVjaWFsIHRyaW1t ZWQtZG93biB2ZXJzaW9uIG9mIGdldHBrdAotICB0byBzcGVlZCB1cCBiaW5hcnktbW9kZSBuby1w YXJpdHkgdHJhbnNmZXJzLiAgV2hlbiBDS1RVTklORyBpcyBub3QgZGVmaW5lZCwKLSAgb3IgZm9y IHRleHQtbW9kZSBvciBwYXJpdHkgdHJhbnNmZXJzLCB3ZSB1c2UgdGhlIHJlZ3VsYXIgZ2V0cGt0 KCkgZnVuY3Rpb24uCi0gIENhbGwganVzdCBsaWtlIGdldHBrdCgpIGJ1dCB0ZXN0IGZpcnN0IGZv ciB0cmFuc2ZlciBtb2RlIGFuZCBwYXJpdHkuICBOT1RFOgotICBUaGlzIHJvdXRpbmUgaXMgb25s eSB0byBiZSBjYWxsZWQgd2hlbiBzZW5kaW5nIGEgcmVhbCBmaWxlIC0tIG5vdCBmb3IKLSAgZmls ZW5hbWVzLCBzZXJ2ZXIgcmVzcG9uc2VzLCBldGMsIGJlY2F1c2UgaXQgb25seSByZWFkcyBmcm9t IHRoZSBpbnB1dCBmaWxlLgotICBTZWUgZ2V0cGt0KCkgZm9yIG1vcmUgZGV0YWlsZWQgY29tbWVu dGFyeS4KLSovCi1zdGF0aWMgaW50Ci1iZ2V0cGt0KGJ1Zm1heCkgaW50IGJ1Zm1heDsgewotICAg IHJlZ2lzdGVyIENIQVIgcnQgPSB0LCBybmV4dDsKLSAgICByZWdpc3RlciBDSEFSICpkcCwgKm9k cCwgKnAxLCAqcDI7Ci0gICAgcmVnaXN0ZXIgaW50IHggPSAwLCBhNzsKLQotICAgIENIQVIgeHhy YywgeHhjcTsJCQkvKiBQaWVjZXMgb2YgcHJlZml4ZWQgc2VxdWVuY2UgKi8KLQotICAgIGxvbmcg ejsJCQkJLyogQSBsb25nIHdvcmtlciAoZm9yIENSQykgKi8KLQotICAgIGlmICghYmluYXJ5IHx8 IHBhcml0eSB8fCBtZW1zdHIpCS8qIEpVU1QgSU4gQ0FTRSBjYWxsZXIgZGlkbid0IHRlc3QgKi8K LSAgICAgIHJldHVybihnZXRwa3QoYnVmbWF4LCFiaW5hcnkpKTsKLQotICAgIGlmICghZGF0YSkg ewotCWRlYnVnKEYxMDAsIlNFUklPVVMgRVJST1I6IGJnZXRwa3QgZGF0YSA9PSBOVUxMIiwiIiww KTsKLQlyZXR1cm4oLTEpOwotICAgIH0KLSAgICBkcCA9IGRhdGE7CQkJCS8qIFBvaW50IHRvIHBh Y2tldCBkYXRhIGJ1ZmZlciAqLwotICAgIHNpemUgPSAwOwkJCQkvKiBBbmQgaW5pdGlhbGl6ZSBp dHMgc2l6ZSAqLwotICAgIGJ1Zm1heCA9IG1heGRhdGEoKTsJCQkvKiBHZXQgbWF4aW11bSBkYXRh IGxlbmd0aCAqLwotCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKQotICAgICAgZGVidWco RjEwMSwiYmdldHBrdCBidWZtYXgiLCIiLGJ1Zm1heCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLQot ICAgIGlmIChmaXJzdCA9PSAxKSB7CQkJLyogSWYgZmlyc3QgY2hhcmFjdGVyIG9mIHRoaXMgZmls ZS4uICovCi0JZmZjID0gKENLX09GRl9UKTA7CQkvKiByZXNldCBmaWxlIGNoYXJhY3RlciBjb3Vu dGVyICovCi0jaWZkZWYgQ09NTUVOVAotLyogTW92ZWQgdG8gYmVsb3cgKi8KLQlmaXJzdCA9IDA7 CQkJLyogTmV4dCBjaGFyYWN0ZXIgd29uJ3QgYmUgZmlyc3QgKi8KLSNlbmRpZiAvKiBDT01NRU5U ICovCi0JKmxlZnRvdmVyID0gJ1wwJzsJCS8qIERpc2NhcmQgYW55IGludGVycnVwdGVkIGxlZnRv dmVycyAqLwotCW5sZWZ0ID0gMDsKLQotCS8qIEdldCBmaXJzdCBjaGFyYWN0ZXIgb2YgZmlsZSBp bnRvIHJ0LCB3YXRjaGluZyBvdXQgZm9yIG51bGwgZmlsZSAqLwotCi0jaWZkZWYgQ0FMSUJSQVRF Ci0JaWYgKGNhbGlicmF0ZSkgewotI2lmZGVmIE5PUkFORE9NCi0JICAgIHJ0ID0gMTc7Ci0jZWxz ZQotCSAgICBydCA9IGNhbF9hW3JhbmQoKSAmIDB4ZmZdOwotI2VuZGlmIC8qIE5PUkFORE9NICov Ci0JICAgIGZpcnN0ID0gMDsKLQl9IGVsc2UKLSNlbmRpZiAvKiBDQUxJQlJBVEUgKi8KLQotCWlm ICgoeCA9IHptaW5jaGFyKCkpIDwgMCkgewkvKiBFT0Ygb3IgZXJyb3IgKi8KLQkgICAgaWYgKHgg PT0gLTMpIHsJCS8qIFRpbWVvdXQuICovCi0JCXNpemUgPSAoZHAgLSBkYXRhKTsKLQkJZGVidWco RjEwMSwiYmdldHBrdCB0aW1lb3V0IHNpemUiLCIiLHNpemUpOwotCQlyZXR1cm4oKHNpemUgPT0g MCkgPyB4IDogc2l6ZSk7Ci0JICAgIH0KLQkgICAgZmlyc3QgPSAtMTsKLQkgICAgc2l6ZSA9IDA7 Ci0JICAgIGlmICh4ID09IC0yKSB7CQkvKiBFcnJvciAqLwotCQlkZWJ1ZyhGMTAwLCJiZ2V0cGt0 OiBpbnB1dCBlcnJvciIsIiIsMCk7Ci0JCWN4c2VlbiA9IDE7CQkvKiBJbnRlcnJ1cHQgdGhlIGZp bGUgdHJhbnNmZXIgKi8KLQkgICAgfSBlbHNlIHsKLQkJZGVidWcoRjEwMCwiYmdldHBrdCBlbXB0 eSBmaWxlIiwiIiwwKTsKLQkgICAgfQotCSAgICByZXR1cm4oMCk7Ci0JfQotCWZpcnN0ID0gMDsJ CQkvKiBOZXh0IGNoYXIgd2lsbCBub3QgYmUgdGhlIGZpcnN0ICovCi0JZmZjKys7CQkJCS8qIENv dW50IGEgZmlsZSBjaGFyYWN0ZXIgKi8KLQlydCA9IChDSEFSKSB4OwkJCS8qIENvbnZlcnQgaW50 IHRvIGNoYXIgKi8KLQlpZiAoZG9jcmMgJiYgKHdoYXQgJiBXX1NFTkQpKSB7CS8qIEFjY3VtdWxh dGUgZmlsZSBjcmMgKi8KLQkgICAgeiA9IGNyYzE2IF4gKGxvbmcpcnQ7Ci0JICAgIGNyYzE2ID0g KGNyYzE2ID4+IDgpIF4KLQkgICAgICAoY3JjdGFbKHogJiAweEYwKSA+PiA0XSBeIGNyY3RiW3og JiAweDBGXSk7Ci0JfQotCXJ0ICY9IGZtYXNrOwkJCS8qIEFwcGx5IFNFVCBGSUxFIEJZVEVTSVpF IG1hc2sgKi8KLQotICAgIH0gZWxzZSBpZiAoZmlyc3QgPT0gLTEgJiYgbmxlZnQgPT0gMCkgeyAv KiBFT0YgZnJvbSBsYXN0IHRpbWUgKi8KLQotICAgICAgICByZXR1cm4oc2l6ZSA9IDApOwotICAg IH0KLS8qCi0gIEhlcmUgd2UgaGFuZGxlIGNoYXJhY3RlcnMgdGhhdCB3ZXJlIGVuY29kZWQgZm9y IHRoZSBsYXN0IHBhY2tldCBidXQKLSAgZGlkIG5vdCBmaXQsIGFuZCBzbyB3ZXJlIHNhdmVkIGlu IHRoZSAibGVmdG92ZXIiIGFycmF5LgotKi8KLSAgICBpZiAobmxlZnQpIHsKLQlmb3IgKHAxID0g bGVmdG92ZXI7IG5sZWZ0ID4gMDsgbmxlZnQtLSkgLyogQ29weSBsZWZ0b3ZlcnMgKi8KLQkgICpk cCsrID0gKnAxKys7Ci0JKmxlZnRvdmVyID0gJ1wwJzsJCS8qIERlbGV0ZSBsZWZ0b3ZlcnMgKi8K LQlubGVmdCA9IDA7Ci0gICAgfQotICAgIGlmIChmaXJzdCA9PSAtMSkJCQkvKiBIYW5kbGUgRU9G ICovCi0gICAgICByZXR1cm4oc2l6ZSA9IChkcCAtIGRhdGEpKTsKLQotLyogTm93IGZpbGwgdXAg dGhlIHJlc3Qgb2YgdGhlIHBhY2tldC4gKi8KLQotICAgIHJwdCA9IDA7CQkJCS8qIEluaXRpYWxp emUgY2hhcmFjdGVyIHJlcGVhdCBjb3VudCAqLwotCi0gICAgd2hpbGUgKGZpcnN0ID4gLTEpIHsJ CS8qIFVudGlsIEVPRi4uLiAqLwotI2lmZGVmIENBTElCUkFURQotCWlmIChjYWxpYnJhdGUpIHsJ CS8qIFdlIGdlbmVyYXRlIG91ciBvd24gImZpbGUiICovCi0JICAgIGlmIChmZmMgPj0gY2FsaWJy YXRlKSB7CS8qIEVPRiAqLwotCQlmaXJzdCA9IC0xOwotCQlmZmMtLTsKLQkgICAgfSBlbHNlIHsJ CQkvKiBHZW5lcmF0ZSBuZXh0IGNoYXJhY3RlciAqLwotCQlpZiAoY2FsX2ogPiBDQUxfTSAqIGZm YykKLQkJICBjYWxfaiA9IGNhbF9hW2ZmYyAmIDB4ZmZdOwotCQl4ID0gKHVuc2lnbmVkKWNhbF9h WyhjYWxfaiAmIDB4ZmYpXTsKLQkJaWYgKHggPT0gcnQpIHggXj0gMjsKLQkgICAgfQotCSAgICBm ZmMrKzsKLQkgICAgY2FsX2ogKz0gKHVuc2lnbmVkIGludCkoZmZjICsgQ0FMX08pOwotCX0gZWxz ZQotI2VuZGlmIC8qIENBTElCUkFURSAqLwotCWlmICgoeCA9IHptaW5jaGFyKCkpIDwgMCkgewkv KiBDaGVjayBmb3IgRU9GICovCi0JICAgIGlmICh4ID09IC0zKSB7CQkvKiBUaW1lb3V0LiAqLwot CQl0ID0gcnQ7Ci0JCXNpemUgPSAoZHAtZGF0YSk7Ci0JCWRlYnVnKEYxMDEsImJnZXRwa3QgdGlt ZW91dCBzaXplIiwiIixzaXplKTsKLQkJcmV0dXJuKChzaXplID09IDApID8geCA6IHNpemUpOwot CSAgICB9Ci0JICAgIGZpcnN0ID0gLTE7CQkJLyogRmxhZyBlb2YgZm9yIG5leHQgdGltZS4gKi8K LQkgICAgaWYgKHggPT0gLTIpIGN4c2VlbiA9IDE7CS8qIElmIGVycm9yLCBjYW5jZWwgdGhpcyBm aWxlLiAqLwotCX0gZWxzZSB7Ci0JICAgIGZmYysrOwkJCS8qIENvdW50IHRoZSBjaGFyYWN0ZXIg Ki8KLQkgICAgaWYgKGRvY3JjICYmICh3aGF0ICYgV19TRU5EKSkgeyAvKiBBY2N1bXVsYXRlIGZp bGUgY3JjICovCi0JCXogPSBjcmMxNiBeIChsb25nKSgoQ0hBUil4ICYgMHhmZik7Ci0JCWNyYzE2 ID0gKGNyYzE2ID4+IDgpIF4KLQkJICAoY3JjdGFbKHogJiAweEYwKSA+PiA0XSBeIGNyY3RiW3og JiAweDBGXSk7Ci0JICAgIH0KLQl9Ci0Jcm5leHQgPSAoQ0hBUikgKHggJiBmbWFzayk7CS8qIEFw cGx5IGZpbGUgbWFzayAqLwotLyoKLSAgQXQgdGhpcyBwb2ludCwgdGhlIGNoYXJhY3RlciB3ZSBq dXN0IHJlYWQgaXMgaW4gcm5leHQsCi0gIGFuZCB0aGUgY2hhcmFjdGVyIHdlIGFyZSBhYm91dCB0 byBlbmNvZGUgaW50byB0aGUgcGFja2V0IGlzIGluIHJ0LgotKi8KLQlvZHAgPSBkcDsJCQkvKiBS ZW1lbWJlciB3aGVyZSB3ZSBzdGFydGVkLiAqLwotCXh4cmMgPSB4eGNxID0gTlVMOwkJLyogQ2xl YXIgdGhlc2UuICovCi0vKgotICBOb3cgZW5jb2RlIHRoZSBjaGFyYWN0ZXIgYWNjb3JkaW5nIHRv IHRoZSBvcHRpb25zIHRoYXQgYXJlIGluIGVmZmVjdDoKLSAgICBjdGxwW106IHdoZXRoZXIgdGhp cyBjb250cm9sIGNoYXJhY3RlciBuZWVkcyBwcmVmaXhpbmcuCi0gICAgcnB0ZmxnOiByZXBlYXQg Y291bnRzIGVuYWJsZWQuCi0gICAgT3RoZXIgb3B0aW9ucyBkb24ndCBhcHBseSBpbiB0aGlzIHJv dXRpbmUuCi0qLwotCWlmIChycHRmbGcgJiYgKHJ0ID09IHJuZXh0KSAmJiAoZmlyc3QgPT0gMCkp IHsgLyogR290IGEgcnVuLi4uICovCi0JICAgIGlmICgrK3JwdCA8IDk0KSB7CQkvKiBCZWxvdyBt YXgsIGp1c3QgY291bnQgKi8KLQkJY29udGludWU7CQkvKiBnbyBiYWNrIGFuZCBnZXQgYW5vdGhl ciAqLwotCSAgICB9IGVsc2UgaWYgKHJwdCA9PSA5NCkgewkvKiBSZWFjaGVkIG1heCwgbXVzdCBk dW1wICovCi0JCXh4cmMgPSAoQ0hBUikgdG9jaGFyKHJwdCk7IC8qIFB1dCB0aGUgcmVwZWF0IGNv dW50IGhlcmUgKi8KLQkJcnB0biArPSBycHQ7CQkvKiBBY2N1bXVsYXRlIGl0IGZvciBzdGF0aXN0 aWNzICovCi0JCXJwdCA9IDA7CQkvKiBBbmQgcmVzZXQgaXQgKi8KLQkgICAgfQotCX0gZWxzZSBp ZiAocnB0ID4gMCkgewkJLyogRW5kIG9mIHJ1biAqLwotCSAgICB4eHJjID0gKENIQVIpdG9jaGFy KCsrcnB0KTsgLyogVGhlIGNvdW50ICovCi0JICAgIHJwdG4gKz0gcnB0OwkJLyogRm9yIHN0YXRz ICovCi0JICAgIHJwdCA9IDA7CQkJLyogUmVzZXQgcmVwZWF0IGNvdW50ICovCi0JfQotCWE3ID0g cnQgJiAwMTc3OwkJCS8qIEdldCBsb3cgNyBiaXRzIG9mIGNoYXJhY3RlciAqLwotCWlmICgKLSNp ZmRlZiBDS19TUEVFRAotCSAgICBjdGxwWyh1bnNpZ25lZCkocnQgJiAweGZmKV0JLyogTG9wIG9m ZiBhbnkgInNpZ24iIGV4dGVuc2lvbiAqLwotI2Vsc2UKLQkgICAgKGE3IDwgU1ApIHx8IChhNyA9 PSBERUwpCi0jZW5kaWYgLyogQ0tfU1BFRUQgKi8KLQkgICAgKSB7CQkJCS8qIERvIGNvbnRyb2wg cHJlZml4aW5nIGlmIG5lY2Vzc2FyeSAqLwotCSAgICB4eGNxID0gbXljdGxxOwkJLyogVGhlIHBy ZWZpeCAqLwotCSAgICBjY3ArKzsJCQkvKiBDb3VudCBpdCAqLwotCSAgICBydCA9IChDSEFSKSBj dGwocnQpOwkvKiBVbmNvbnRyb2xsaWZ5IHRoZSBjaGFyYWN0ZXIgKi8KLQl9Ci0jaWZkZWYgQ0tf U1BFRUQKLQllbHNlIGlmICgoYTcgPCBTUCkgfHwgKGE3ID09IERFTCkpIC8qIENvdW50IGFuIHVu cHJlZml4ZWQgb25lICovCi0JICBjY3UrKzsKLSNlbmRpZiAvKiBDS19TUEVFRCAqLwotCi0JaWYg KGE3ID09IG15Y3RscSkJCS8qIEFsd2F5cyBwcmVmaXggdGhlIGNvbnRyb2wgcHJlZml4ICovCi0J ICB4eGNxID0gbXljdGxxOwotCi0JaWYgKChycHRmbGcpICYmIChhNyA9PSBycHRxKSkJLyogSWYg aXQncyB0aGUgcmVwZWF0IHByZWZpeCwgKi8KLQkgIHh4Y3EgPSBteWN0bHE7CQkvKiBwcmVmaXgg aXQgaWYgZG9pbmcgcmVwZWF0IGNvdW50cyAqLwotCi0vKiBOb3cgY29uc3RydWN0IHRoZSBwcmVm aXhlZCBzZXF1ZW5jZSAqLwotCi0JaWYgKHh4cmMpIHsJCQkvKiBSZXBlYXQgY291bnQgKi8KLSNp ZmRlZiBDT01NRU5UCi0JICAgIGlmICh4eHJjID09IChDSEFSKSAnIicgJiYgIXh4Y3EpIHsgLyog MiBpbiBhIHJvdyAmIG5vdCBwcmVmaXhlZCAqLwotCQkqZHArKyA9IHJ0OwkJLyogU28ganVzdCBk byB0aGlzICovCi0JICAgIH0gZWxzZSB7CQkJLyogTW9yZSB0aGFuIHR3byBvciBwcmVmaXhlZCAq LwotCQkqZHArKyA9IChDSEFSKSBycHRxOyAqZHArKyA9IHh4cmM7IC8qIEVtaXQgcmVwZWF0IHNl cXVlbmNlICovCi0JICAgIH0KLSNlbHNlCQkJCQkvKiBDSEVDSyBUSElTICovCi0JICAgIGlmICh4 eHJjID09IChDSEFSKSAnIicgJiYgIXh4Y3EpIHsgLyogMiBpbiBhIHJvdyAmIG5vdCBwcmVmaXhl ZCAqLwotICAgICAgICAgICAgICAgIGlmIChkcCA9PSBkYXRhKSB7Ci0gICAgICAgICAgICAgICAg ICAgICpkcCsrID0gcnQ7CQkvKiBTbyBqdXN0IGRvIHRoaXMgKi8KLSAgICAgICAgICAgICAgICB9 IGVsc2UgaWYgKCooZHAtMSkgPT0gcnQpIHsKLSAgICAgICAgICAgICAgICAgICAgKmRwKysgPSAo Q0hBUikgcnB0cTsKLQkJICAgICpkcCsrID0geHhyYzsJLyogRW1pdCByZXBlYXQgc2VxdWVuY2Ug Ki8KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAqZHArKyA9 IHJ0OwkJLyogU28ganVzdCBkbyB0aGlzICovCi0gICAgICAgICAgICAgICAgfQotCSAgICB9IGVs c2UgewkJCS8qIE1vcmUgdGhhbiB0d28gb3IgcHJlZml4ZWQgKi8KLQkJKmRwKysgPSAoQ0hBUikg cnB0cTsKLQkJKmRwKysgPSB4eHJjOwkJLyogRW1pdCByZXBlYXQgc2VxdWVuY2UgKi8KLQkgICAg fQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQl9Ci0JaWYgKHh4Y3EpIHsgKmRwKysgPSBteWN0bHE7 IH0JLyogQ29udHJvbCBwcmVmaXggKi8KLQkqZHArKyA9IHJ0OwkJCS8qIEZpbmFsbHksIHRoZSBj aGFyYWN0ZXIgaXRzZWxmICovCi0JcnQgPSBybmV4dDsJCQkvKiBOZXh0IGNoYXJhY3RlciBpcyBu b3cgY3VycmVudC4gKi8KLQotLyogRG9uZSBlbmNvZGluZyB0aGUgY2hhcmFjdGVyLiAgTm93IHRh a2UgY2FyZSBvZiBwYWNrZXQgYnVmZmVyIG92ZXJmbG93LiAqLwotCi0Jc2l6ZSA9IGRwIC0gZGF0 YTsJCS8qIEhvdyBtYW55IGJ5dGVzIHdlIHB1dCBpbiBidWZmZXIuICovCi0JaWYgKHNpemUgPj0g YnVmbWF4KSB7CQkvKiBJZiB0b28gYmlnLCBzYXZlIHNvbWUgZm9yIG5leHQuICovCi0JICAgICpk cCA9ICdcMCc7CQkJLyogTWFyayB0aGUgZW5kLiAqLwotCSAgICBpZiAoc2l6ZSA+IGJ1Zm1heCkg ewkvKiBpZiBwYWNrZXQgaXMgb3ZlcmZ1bGwgKi8KLQkJLyogQ29weSB0aGUgcGFydCB0aGF0IGRv ZXNuJ3QgZml0IGludG8gdGhlIGxlZnRvdmVyIGJ1ZmZlciwgKi8KLQkJLyogdGFraW5nIGNhcmUg bm90IHRvIHNwbGl0IGEgcHJlZml4ZWQgc2VxdWVuY2UuICovCi0JCWludCBpOwotCQlubGVmdCA9 IGRwIC0gb2RwOwotCQlwMSA9IGxlZnRvdmVyOwotCQlwMiA9IG9kcDsKLQkJZm9yIChpID0gMDsg aSA8IG5sZWZ0OyBpKyspCi0JCSAgKnAxKysgPSAqcDIrKzsKLQkJc2l6ZSA9IG9kcCAtIGRhdGE7 CS8qIFJldHVybiB0cnVuY2F0ZWQgcGFja2V0LiAqLwotCQkqb2RwID0gJ1wwJzsJCS8qIE1hcmsg dGhlIG5ldyBlbmQgKi8KLQkgICAgfQotCSAgICB0ID0gcnQ7CQkJLyogU2F2ZSBmb3IgbmV4dCB0 aW1lICovCi0JICAgIHJldHVybihzaXplKTsKLQl9Ci0gICAgfQkJCQkJLyogT3RoZXJ3aXNlLCBr ZWVwIGZpbGxpbmcuICovCi0gICAgc2l6ZSA9IGRwIC0gZGF0YTsJCQkvKiBFbmQgb2YgZmlsZSAq LwotICAgICpkcCA9ICdcMCc7CQkJCS8qIE1hcmsgdGhlIGVuZCBvZiB0aGUgZGF0YS4gKi8KLSAg ICByZXR1cm4oc2l6ZSk7CQkgICAgIC8qIFJldHVybiBwYXJ0aWFsbHkgZmlsbGVkIGxhc3QgcGFj a2V0LiAqLwotfQotI2VuZGlmIC8qIENLVFVOSU5HICovCi0KLVZPSUQKLWRvZmlsY3JjKGMpIGlu dCBjOyB7CQkJLyogQWNjdW11bGF0ZSBmaWxlIGNyYyAqLwotICAgIGxvbmcgejsKLSAgICB6ID0g Y3JjMTYgXiAobG9uZyljOwotICAgIGNyYzE2ID0gKGNyYzE2ID4+IDgpIF4KLSAgICAgIChjcmN0 YVsoeiAmIDB4RjApID4+IDRdIF4gY3JjdGJbeiAmIDB4MEZdKTsKLX0KLQotLyogRm9yIFNFTkRp bmcgZnJvbSBhbiBhcnJheS4uLiAqLwotCi1pbnQKLWFnbmJ5dGUoKSB7CQkJCS8qIEdldCBuZXh0 IGJ5dGUgZnJvbSBhcnJheSAqLwotI2lmbmRlZiBOT1NQTAotICAgIGNoYXIgYzsKLSAgICBzdGF0 aWMgaW50IHNhdmUgPSAwOwkJLyogRm9yIENSTEYgKi8KLSAgICBzdGF0aWMgY2hhciAqKiBhcCA9 IE5VTEw7CQkvKiBBcnJheSBwb2ludGVyICovCi0gICAgc3RhdGljIGNoYXIgKiBwID0gTlVMTDsJ CS8qIENoYXJhY3RlciBwb2ludGVyICovCi0gICAgc3RhdGljIGludCBpID0gMCwgbiA9IDA7CQkv KiBBcnJheSBpbmRleCBhbmQgbGltaXQgKi8KLSAgICBleHRlcm4gaW50IGFfZGltW107CQkJLyog QXJyYXkgZGltZW5zaW9uICovCi0KLSAgICBpZiAoIWFwKSB7CQkJCS8qIEZpcnN0IHRpbWUgdGhy dSAqLwotCWFwID0gc25kYXJyYXk7CQkJLyogU2V0IHVwIGFycmF5IHBvaW50ZXJzICovCi0JaWYg KCFhcCB8fCAoaSA9IHNuZHhsbykgPiBhX2RpbVtzbmR4aW5dKSB7Ci0JICAgIHNuZGFycmF5ID0g TlVMTDsKLQkgICAgYXAgPSBOVUxMOwotCSAgICByZXR1cm4oLTEpOwotCX0KLQlwID0gYXBbaV07 CQkJLyogUG9pbnQgdG8gZmlyc3QgZWxlbWVudCBpbiByYW5nZSAqLwotCW4gPSBzbmR4aGk7CQkJ LyogSW5kZXggb2YgbGFzdCBlbGVtZW50IGluIHJhbmdlICovCi0JaWYgKHNuZHhoaSA+IGFfZGlt W3NuZHhpbl0pCS8qIEFkanVzdCBpZiBuZWNlc3NhcnkgKi8KLQkgIG4gPSBhX2RpbVtzbmR4aW5d OwotICAgIH0KLSAgICBpZiAoc2F2ZSkgewkJCQkvKiBJZiBhbnl0aGluZyBzYXZlZCAqLwotCWMg PSBzYXZlOwkJCS8qIHVuc2F2ZSBpdCAqLwotCXNhdmUgPSAwOwkJCS8qIGFuZCByZXR1cm4gaXQg Ki8KLQlyZXR1cm4oYyAmIDB4ZmYpOwotICAgIH0KLSAgICBpZiAoaSA+IG4pIHsJCQkvKiBObyBt b3JlIGVsZW1lbnRzICovCi0Jc25kYXJyYXkgPSBOVUxMOwotCWFwID0gTlVMTDsKLQlyZXR1cm4o LTEpOwotICAgIH0KLSAgICBpZiAoIXApCQkJCS8qIFNvdXJjZSBwb2ludGVyIGlzIE5VTEwgKi8K LSAgICAgIGMgPSBOVUw7CQkJCS8qIHRoaXMgbWVhbnMgYW4gZW1wdHkgbGluZSAqLwotICAgIGVs c2UJCQkJLyogU291cmNlIHBvaW50ZXIgbm90IE5VTEwgKi8KLSAgICAgIGMgPSAqcCsrOwkJCQkv KiBOZXh0IGNoYXIgKi8KLSAgICBpZiAoIWMpIHsJCQkJLyogQ2hhciBpcyBlbXB0eT8gKi8KLQlp ZiAoIWJpbmFyeSkgewkJCS8qIFRleHQ6IGVuZCBvZiBsaW5lLiAqLwotCSAgICBpZiAoZmVvbCkg ewkJCS8qIFN1cHBseSBOTCAqLwotCQljID0gZmVvbDsKLQkgICAgfSBlbHNlIHsJCQkvKiBvciBD UkxGICovCi0JCXNhdmUgPSBMRjsKLQkJYyA9IENSOwotCSAgICB9Ci0JICAgIHAgPSBhcFsrK2ld OwotCSAgICByZXR1cm4oYyAmIDB4ZmYpOwotCX0KLQl3aGlsZSAoaSsrIDwgbikgewkJLyogQmlu YXJ5IC0gZ2V0IG5leHQgZWxlbWVudCAqLwotCSAgICBwID0gYXBbaV07Ci0JICAgIGlmICghcCkJ CQkvKiBFbXB0eSBsaW5lPyAqLwotCSAgICAgIGNvbnRpbnVlOwkJCS8qIElnbm9yZSBpdCBhbmQg Z2V0IGFub3RoZXIgKi8KLQkgICAgYyA9ICpwKys7CQkJLyogR2V0IG5leHQgY2hhciAqLwotCSAg ICBpZiAoIWMpCQkJLyogRW10cHkgY2hhcj8gKi8KLQkgICAgICBjb250aW51ZTsJCQkvKiBJZ25v cmUgaXQgYW5kIGdldCBhbm90aGVyICovCi0JICAgIHJldHVybihjICYgMHhmZik7CQkvKiBOb3Qg ZW1wdHkgLSByZXR1cm4gaXQgKi8KLQl9Ci0Jc25kYXJyYXkgPSBOVUxMOwotCWFwID0gTlVMTDsK LQlyZXR1cm4oLTEpOwkJCS8qIERvbmUgKi8KLSAgICB9Ci0gICAgcmV0dXJuKGMgJiAweGZmKTsJ CQkvKiBDaGFyIGlzIG5vdCBlbXB0eSAqLwotI2Vsc2UKLSAgICBzbmRhcnJheSA9IE5VTEw7Ci0g ICAgcmV0dXJuKC0xKTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotfQotI2VuZGlmIC8qIE5PWEZFUiAq LwotCi0jaWZuZGVmIE5PQ1NFVFMKLXN0YXRpYyBDSEFSIHhsYWJ1ZlszMl0gPSB7IDAsIDAsIDAs IDAsIDAsIDAsIDAsIDAgfTsKLXN0YXRpYyBpbnQgeGxhY291bnQgPSAwOwotc3RhdGljIGludCB4 bGFwdHIgPSAwOwotLyogc3RhdGljIFVTSE9SVCBsYXN0dWNzMiA9IDA7ICovCi0KLS8qCi0gIFgg RyBOIEIgWSBUIEUgLS0gIEdldCBuZXh0IHRyYW5zbGF0ZWQgYnl0ZSBmcm9tIHRoZSBpbnB1dCBm aWxlLgotCi0gIFJldHVybnMgdGhlIG5leHQgYnl0ZSB0aGF0IGlzIHRvIGJlIHB1dCBpbnRvIHRo ZSBwYWNrZXQsIGFscmVhZHkgdHJhbnNsYXRlZC4KLSAgVGhpcyBpc29sYXRlcyBnZXRwa3QoKSBm cm9tIGhhdmluZyB0byBrbm93IGFueXRoaW5nIGFib3V0IHRyYW5zbGF0aW9uLAotICBzaW5nbGUt IHZzIG11bHRpYnl0ZSBjaGFyYWN0ZXIgc2V0cywgb25lLXRvLW1hbnkgdnMgbWFueS10by1vbmUs IGV0YywgYnV0IGl0Ci0gIGhhcyByYXRoZXIgaGlnaCBvdmVyaGVhZCwgc28gZG9uJ3QgY2FsbCBp dCB1bmxlc3MgeW91IGtub3cgdHJhbnNsYXRpb24gaXMKLSAgbmVlZGVkIHRvIG9yIGZyb20gVW5p Y29kZSwgSmFwYW5lc2UsIG9yIG90aGVyIG11bHRpYnl0ZSBjaGFyYWN0ZXIgc2V0LgotCi0gIENh bGwgd2l0aDoKLSAgICBmY3M6ICBGaWxlIGNoYXJhY3RlciBzZXQgKHNvdXJjZSwgZmlsZSB3ZSBh cmUgcmVhZGluZyBmcm9tKQotICAgIHRjczogIFRhcmdldCBjaGFyYWN0ZXIgc2V0ICh1c2UgYW4g RkNfeHh4IGNvZGUsIG5vdCBhIFRDX3h4eCBjb2RlKQotICBSZXR1cm5zOgotICAgID49IDA6IEEg dHJhbnNsYXRlZCBieXRlIHN1aXRhYmxlIGZvciB3cml0aW5nLgotICAgIDwgIDA6IEZhdGFsIGVy cm9yIChzdWNoIGFzIEVPRiBvbiBpbnB1dCBzb3VyY2UpLgotICBBcyBvZiBTYXQgU2VwICA3IDE4 OjM3OjQxIDIwMDI6ICAKLSAgICBXaGVuIHRoZSBvdXRwdXQgY2hhcmFjdGVyLXNldCBpcyBVQ1Mt MiwgYnl0ZXMgYXJlIEFMV0FZUyByZXR1cm5lZCBpbgotICAgIGJpZy1lbmRpYW4gb3JkZXIgKHBy ZXZpb3VzbHkgdGhleSBjb3VsZCBhbHNvIGJlIHJldHVybmVkIGluIExFIG9yZGVyCi0gICAgdW5k ZXIgY2VydGFpbiBjb25kaXRpb25zLCB3aGljaCB3YXMganVzdCB3YXkgdG9vIGNvbmZ1c2luZyku Ci0qLwotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXhnbmJ5dGUoaW50IHRjcywgaW50IGZjcywgaW50 ICgqZm4pKHZvaWQpKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLXhnbmJ5dGUodGNzLGZjcyxmbikg aW50IHRjcywgZmNzLCAoKmZuKSgpOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB4Z25ieXRl ICovIHsKLSAgICBfUFJPVE9UWVAoIGludCAoKnh4KSwgKFVTSE9SVCkgKSA9IE5VTEw7Ci0gICAg aW50IGhhdmV1YyA9IDA7CQkJLyogRmxhZyBmb3IgaGF2ZSBVbmljb2RlIGNoYXJhY3RlciAqLwot I2lmZGVmIEtBTkpJCi0gICAgaW50IGhhdmVzaiA9IDA7CQkJLyogSGF2ZSBTaGlmdC1KSVMgY2hh cmFjdGVyICovCi0gICAgaW50IGhhdmVldSA9IDA7CQkJLyogSGF2ZSBFVUMtSlAgY2hhcmFjdGVy ICovCi0jZW5kaWYgLyogS0FOSkkgKi8KLSAgICBpbnQgcmMgPSAtMSwgeCA9IDAsIGZsYWcgPSAw OwotICAgIGludCB1dGZlcnJvciA9IDA7Ci0gICAgaW50IGVvbGZsYWcgPSAwOwotICAgIHVuc2ln bmVkIGludCB4YywgdGhpc2NoYXI7Ci0gICAgc3RhdGljIGludCBzd2FwcGluZyA9IDA7Ci0gICAg Q0hBUiBydDsKLSAgICAvKiBVU0hPUlQgY2g7ICovCi0jaWZkZWYgVU5JQ09ERQotICAgIHVuaW9u IGNrX3Nob3J0IHVjOwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSNpZmRlZiBLQU5KSQotICAgIHVu aW9uIGNrX3Nob3J0IHNqLCBldTsJCS8qIFNoaWZ0LUpJUyBjaGFyYWN0ZXIgKi8KLSNlbmRpZiAv KiBLQU5KSSAqLwotCi0jaWZkZWYgS0FOSkkKLSAgICBzai54X3Nob3J0ID0gMDsKLSNlbmRpZiAv KiBLQU5KSSAqLwotCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nICYmICFmZmMpIHsKLQlk ZWJ1ZyhGMTAxLCJ4Z25ieXRlIGluaXRpYWwgc3dhcCIsIiIsc3dhcHBpbmcpOwotICAgIH0KLSNl bmRpZiAvKiBERUJVRyAqLwotCi0gICAgaWYgKHhsYWNvdW50LS0gPiAwKSB7CQkvKiBXZSBhbHJl YWR5IGhhdmUgc29tZSAqLwotCXggPSB4bGFidWZbeGxhcHRyKytdOwotCWRlYnVnKEYwMDEsInhn bmJ5dGUgZnJvbSBidWYiLCIiLHgpOwotCXJldHVybih4KTsKLSAgICB9Ci0gICAgaWYgKHhsYXR5 cGUgIT0gWExBX05PTkUpIHsJCS8qIE5vdCBub3QgdHJhbnNsYXRpbmcuLi4gKi8KLQloYXZldWMg PSAwOwotI2lmZGVmIFVOSUNPREUKLQlpZiAoZmNzID09IEZDX1VDUzIpIHsJCS8qIFVDUy0yOiBS ZWFkIHR3byBieXRlcyAqLwotCSAgICBpZiAoIWZmYykJCQkvKiBCZWdpbm5pbmcgb2YgZmlsZT8g Ki8KLQkgICAgICBzd2FwcGluZyA9IDA7CQkvKiBSZXNldCBieXRlLXN3YXBwaW5nIGZsYWcgKi8K LQkgICAgdWMueF9zaG9ydCA9IDA7Ci0JICBib21za2lwOgotCSAgICB4ID0gZm4gPyAoKmZuKSgp IDogem1pbmNoYXIoKTsgLyogR2V0IGZpcnN0IGJ5dGUgKi8KLQkgICAgZGVidWcoRjAwMSwiem1p bmNoYXIgc3dhcHBpbmciLCIiLHN3YXBwaW5nKTsKLQkgICAgZGVidWcoRjAwMSwiem1pbmNoYXIg QzAiLCIiLHgpOwotCSAgICBmbGFnID0gMTsJCQkvKiBSZW1lbWJlciB3ZSBjYWxsZWQgem1pbmNo YXIoKSAqLwotCSAgICBpZiAoeCA+IC0xKSB7CQkvKiBEaWRuJ3QgZmFpbCAqLwotCQlmZmMrKzsJ CQkvKiBDb3VudCBhIGZpbGUgYnl0ZSAqLwotCQl1Yy54X2NoYXJbc3dhcHBpbmddID0geCAmIDB4 ZmY7Ci0jaWZuZGVmIE5PWEZFUgotCQlpZiAoZG9jcmMgJiYgKHdoYXQgJiBXX1NFTkQpKQotCQkg IGRvZmlsY3JjKHgpOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCQl4ID0gZm4gPyAoKmZuKSgpIDog em1pbmNoYXIoKTsgLyogR2V0IHNlY29uZCBieXRlICovCi0JCWlmICh4ID4gLTEpIHsJCS8qIElm IGRpZG4ndCBmYWlsICovCi0JCSAgICBkZWJ1ZyhGMDAxLCJ6bWluY2hhciBDMSIsIiIseCk7Ci0J CSAgICBmZmMrKzsJCS8qIGNvdW50IGFub3RoZXIgZmlsZSBieXRlICovCi0JCSAgICB1Yy54X2No YXJbMS1zd2FwcGluZ10gPSB4ICYgMHhmZjsKLQkJICAgIGhhdmV1YyA9IDE7CQkvKiBBbmQgcmVt ZW1iZXIgd2UgaGF2ZSBVbmljb2RlICovCi0jaWZuZGVmIE5PWEZFUgotCQkgICAgaWYgKGRvY3Jj ICYmICh3aGF0ICYgV19TRU5EKSkKLQkJICAgICAgZG9maWxjcmMoeCk7Ci0jZW5kaWYgLyogTk9Y RkVSICovCi0JCSAgICBpZiAoZmZjID09IChDS19PRkZfVCkyKSB7IC8qIFNlY29uZCBjaGFyIG9m IGZpbGUgKi8KLQkJCWRlYnVnKEYwMDEsInhnbmJ5dGUgMXN0IFVDUzIiLCIiLHVjLnhfc2hvcnQp OwotCQkJZGVidWcoRjExMSwieGduYnl0ZSBmaWxlb3JkZXIiLCJBIixmaWxlb3JkZXIpOwotCQkJ aWYgKGZpbGVvcmRlciA8IDApIC8qIEJ5dGUgb3JkZXIgb2YgdGhpcyBmaWxlICovCi0JCQkgIGZp bGVvcmRlciA9IHVjc29yZGVyOwkvKiBEZWZhdWx0IGlzIHVjc29yZGVyICovCi0JCQlpZiAoZmls ZW9yZGVyID4gMSkKLQkJCSAgZmlsZW9yZGVyID0gMTsKLQkJCWRlYnVnKEYxMTEsInhnbmJ5dGUg ZmlsZW9yZGVyIiwiQiIsZmlsZW9yZGVyKTsKLQkJCWlmICh1Yy54X3Nob3J0ID09IChVU0hPUlQp MHhmZWZmKSB7Ci0JCQkgICAgc3dhcHBpbmcgPSAwOwotCQkJICAgIGRlYnVnKEYxMDEsCi0JCQkJ ICAieGduYnl0ZSBVQ1MyIGdvb2Rib20gc3dhcCIsIiIsc3dhcHBpbmcpOwotCQkJICAgIGZpbGVv cmRlciA9IGJ5dGVvcmRlcjsgLyogTm90ZTogTk9UIDAgKi8KLQkJCSAgICBnb3RvIGJvbXNraXA7 Ci0JCQl9IGVsc2UgaWYgKHVjLnhfc2hvcnQgPT0gKFVTSE9SVCkweGZmZmUpIHsKLQkJCSAgICBz d2FwcGluZyA9IDE7Ci0JCQkgICAgZGVidWcoRjEwMSwKLQkJCQkgICJ4Z25ieXRlIFVDUzIgYmFk Ym9tIHN3YXAiLCIiLHN3YXBwaW5nKTsKLQkJCSAgICBmaWxlb3JkZXIgPSAoMSAtIGJ5dGVvcmRl cik7IC8qIE5vdGU6IE5PVCAxICovCi0JCQkgICAgZ290byBib21za2lwOwotCQkJfSBlbHNlIGlm ICgoYnl0ZW9yZGVyICYmICFmaWxlb3JkZXIpIHx8IC8qIE5vIEJPTSAqLwotCQkJCSAgICghYnl0 ZW9yZGVyICYmIGZpbGVvcmRlciA+IDApKSB7Ci0JCQkgICAgLyogZmlsZW9yZGVyIG1pZ2h0IGhh dmUgYmVlbiBzZXQgYnkgc2NhbmZpbGUoKSAqLwotCQkJICAgIENIQVIgYzsKLQkJCSAgICBjID0g dWMueF9jaGFyWzBdOwotCQkJICAgIHVjLnhfY2hhclswXSA9IHVjLnhfY2hhclsxXTsKLQkJCSAg ICB1Yy54X2NoYXJbMV0gPSBjOwotCQkJICAgIHN3YXBwaW5nID0gMTsKLQkJCSAgICBkZWJ1ZyhG MTExLCJ4Z25ieXRlIFVDUzIgbm9CT00gc3dhcCIsIkEiLHN3YXBwaW5nKTsKLQkJCX0gZWxzZSB7 Ci0JCQkgICAgc3dhcHBpbmcgPSAwOwotCQkJICAgIGRlYnVnKEYxMTEsInhnbmJ5dGUgVUNTMiBu b0JPTSBzd2FwIiwiQiIsc3dhcHBpbmcpOwotCQkJfQotCQkJZGVidWcoRjExMSwieGduYnl0ZSBm aWxlb3JkZXIiLCJDIixmaWxlb3JkZXIpOwotCQkgICAgfQotCQl9IGVsc2UKLQkJICByZXR1cm4o eCk7Ci0JICAgIH0gZWxzZQotCSAgICAgIHJldHVybih4KTsKLQkgICAgZGVidWcoRjAwMSwieGdu Ynl0ZSBVQ1MyIiwiIix1Yy54X3Nob3J0KTsKLQotCX0gZWxzZSBpZiAoZmNzID09IEZDX1VURjgp IHsJLyogRmlsZSBpcyBVVEYtOCAqLwotCSAgICBDSEFSIGNoID0gMDsJCS8qIERhdGEgdHlwZXMg bmVlZGVkIGZvciBBUEkuLi4gKi8KLQkgICAgVVNIT1JUICogdXMgPSBOVUxMOwotCSAgICB1Yy54 X3Nob3J0ID0gMDsKLQkgICAgZmxhZyA9IDE7CQkJLyogV2UgKHdpbGwpIGhhdmUgY2FsbGVkIHpt aW5jaGFyKCkgKi8KLQkgICAgLyogUmVhZCBzb3VyY2UgYnl0ZXMgKi8KLQkgICAgd2hpbGUgKCh4 ID0gZm4gPyAoKmZuKSgpIDogem1pbmNoYXIoKSkgPiAtMSkgewotCQlmZmMrKzsJCQkvKiBHb3Qg YSBieXRlIC0gY291bnQgaXQgKi8KLSNpZm5kZWYgTk9YRkVSCi0JCWlmIChkb2NyYyAmJiAod2hh dCAmIFdfU0VORCkpCi0JCSAgZG9maWxjcmMoeCk7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0JCWNo ID0geDsKLQkJcmMgPSB1dGY4X3RvX3VjczIoY2gsJnVzKTsgLyogQ29udmVydCB0byBVQ1MtMiAq LwotCQlpZiAocmMgPT0gMCkgewkJLyogRG9uZSAqLwotCQkgICAgdWMueF9zaG9ydCA9ICp1czsK LQkJICAgIGhhdmV1YyA9IDE7Ci0JCSAgICBicmVhazsKLQkJfSBlbHNlIGlmIChyYyA8IDApIHsJ LyogRXJyb3IgKi8KLQkJICAgIHV0ZmVycm9yID0gMTsKLQkJICAgIGRlYnVnKEYxMDEsInhnbmJ5 dGUgVVRGLTggaW5wdXQgZXJyb3IiLCIiLHJjKTsKLQkJICAgIGhhdmV1YyA9IDE7Ci0JCSAgICB1 Yy54X3Nob3J0ID0gKnVzOwotCQkgICAgYnJlYWs7Ci0JCX0KLQkgICAgfQotCSAgICBpZiAoeCA8 IDApCi0JICAgICAgcmV0dXJuKHgpOwotCSAgICBkZWJ1ZyhGMDAxLCJ4Z25ieXRlIFVURjgtPlVD UzIiLCIiLHVjLnhfc2hvcnQpOwotCX0KLSNlbmRpZiAvKiBVTklDT0RFICovCi0KLSNpZmRlZiBL QU5KSQotI2lmZGVmIFVOSUNPREUKLQllbHNlCi0jZW5kaWYgLyogVU5JQ09ERSAqLwotCSAgaWYg KGZjc2luZm9bZmNzXS5hbHBoYWJldCA9PSBBTF9KQVBBTikgeyAvKiBKYXBhbmVzZSBzb3VyY2Ug ZmlsZSAqLwotCSAgICBpbnQgYzcsIHgsIHk7Ci0JICAgIGlmIChmY3MgPT0gRkNfSklTNykgewkv KiBJZiBmaWxlIGNoYXJzZXQgaXMgSklTLTcgKi8KLQkJaWYgKCFmZmMpCQkvKiBJZiBmaXJzdCBi eXRlIG9mIGZpbGUgKi8KLQkJICBqN2luaXQoKTsJCS8qIEluaXRpYWxpemUgSklTLTcgcGFyc2Vy ICovCi0JCXggPSBnZXRqNygpOwkJLyogR2V0IGEgSklTLTcgYnl0ZSAqLwotCSAgICB9IGVsc2UJ CQkvKiBPdGhlcndpc2UgKi8KLQkgICAgICB4ID0gZm4gPyAoKmZuKSgpIDogem1pbmNoYXIoKTsg LyogSnVzdCBnZXQgYnl0ZSAqLwotCSAgICBpZiAoeCA8IDApIHsJCS8qIFByb3BvZ2F0ZSBFT0Yg b3IgZXJyb3IgKi8KLQkJZGVidWcoRjEwMCwiWEdOQllURSBFT0YiLCIiLDApOwotCQlyZXR1cm4o eCk7Ci0JICAgIH0KLQkgICAgZGVidWcoRjAwMSwiWEdOQllURSB4IiwiIix4KTsKLQkgICAgZmZj Kys7CQkJLyogQ291bnQgKi8KLSNpZm5kZWYgTk9YRkVSCi0JICAgIGlmIChkb2NyYyAmJiAod2hh dCAmIFdfU0VORCkpIGRvZmlsY3JjKHgpOyAvKiBEbyBDUkMgKi8KLSNlbmRpZiAvKiBOT1hGRVIg Ki8KLQkgICAgc3dpdGNoIChmY3MpIHsJCS8qIFdoYXQgbmV4dCBkZXBlbmRzIG9uIGNoYXJzZXQg Ki8KLQkgICAgICBjYXNlIEZDX1NISklTOgkJLyogU2hpZnQtSklTICovCi0JCWlmICgoeCA8PSAw eDgwKSB8fAkvKiBBbnkgNy1iaXQgY2hhci4uLiAqLwotCQkgICAgKHggPj0gMHhhMCAmJiB4IDw9 IDB4ZGYpKSB7IC8qIG9yIGhhbGZ3aWR0aCBLYXRha2FuYSAqLwotCQkgICAgc2oueF9zaG9ydCA9 IChVU0hPUlQpIHg7ICAgIC8qIHdlIHJlYWQgb25lIGJ5dGUuICovCi0JCX0gZWxzZSB7CQkvKiBB bnl0aGluZyBlbHNlICovCi0JCSAgICBpZiAoKHkgPSBmbiA/ICgqZm4pKCkgOiB6bWluY2hhcigp KSA8IDApIC8qIGdldCBhbm90aGVyICovCi0JCSAgICAgIHJldHVybih5KTsKLSNpZm5kZWYgTk9Y RkVSCi0JCSAgICBpZiAoZG9jcmMgJiYgKHdoYXQgJiBXX1NFTkQpKSBkb2ZpbGNyYyh5KTsKLSNl bmRpZiAvKiBOT1hGRVIgKi8KLQkJICAgIGZmYysrOwotCQkgICAgc2oueF9jaGFyW2J5dGVvcmRl cl0gPSAoQ0hBUikgeDsKLQkJICAgIHNqLnhfY2hhclsxLWJ5dGVvcmRlcl0gPSAoQ0hBUikgeTsK LQkJfQotCQlicmVhazsKLQotCSAgICAgIGNhc2UgRkNfSklTNzoJCS8qIEpJUy03ICovCi0JICAg ICAgY2FzZSBGQ19KREVDOgkJLyogREVDIEthbmppICovCi0JICAgICAgY2FzZSBGQ19KRVVDOgkJ LyogRVVDLUpQICovCi0JCWlmICgoeCAmIDB4ODApID09IDApIHsJLyogQ29udmVydCB0byBTaGlm dC1KSVMgKi8KLQkJICAgIHNqLnhfc2hvcnQgPSAoVVNIT1JUKSB4OyAvKiBDMCBvciBHMDogb25l IGJ5dGUgKi8KLQkJICAgIGV1Lnhfc2hvcnQgPSAoVVNIT1JUKSB4OwotCQkgICAgaGF2ZWV1ID0g MTsKLQkJfSBlbHNlIHsKLQkJICAgIGM3ID0geCAmIDB4N2Y7Ci0JCSAgICBpZiAoYzcgPiAweDIw ICYmIGM3IDwgMHg3ZikgeyAvKiBLYW5qaTogdHdvIGJ5dGVzICovCi0JCQlpZiAoKHkgPSAoZmNz ID09IEZDX0pFVUMpID8KLQkJCSAgICAgKGZuID8gKCpmbikoKSA6IHptaW5jaGFyKCkpIDoKLQkJ CSAgICAgZ2V0ajcoKQkvKiBeXl4gKi8KLQkJCSAgICAgKSA8IDApCi0JCQkgIHJldHVybih5KTsK LQkJCWZmYysrOwotI2lmbmRlZiBOT1hGRVIKLQkJCWlmIChkb2NyYyAmJiAod2hhdCAmIFdfU0VO RCkpIGRvZmlsY3JjKHkpOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCQkJZXUueF9jaGFyW2J5dGVv cmRlcl0gPSAoQ0hBUikgeDsKLQkJCWV1LnhfY2hhclsxLWJ5dGVvcmRlcl0gPSAoQ0hBUikgeTsK LQkJCXNqLnhfc2hvcnQgPSBldV90b19zaihldS54X3Nob3J0KTsKLQkJCWhhdmVldSA9IDE7Ci0J CSAgICB9IGVsc2UgaWYgKHggPT0gMHg4ZSkgeyAvKiBTUzIgS2F0YWthbmEgcHJlZml4OiAyIGJ5 dGVzICovCi0JCQlpZiAoKHkgPSAoZmNzID09IEZDX0pJUzcpID8KLQkJCSAgICAgZ2V0ajcoKSA6 CS8qIF5eXiAqLwotCQkJICAgICAoZm4gPyAoKmZuKSgpIDogem1pbmNoYXIoKSkKLQkJCSAgICAg KSA8IDApCi0JCQkgIHJldHVybih5KTsKLQkJCWZmYysrOwotI2lmbmRlZiBOT1hGRVIKLQkJCWlm IChkb2NyYyAmJiAod2hhdCAmIFdfU0VORCkpIGRvZmlsY3JjKHkpOwotI2VuZGlmIC8qIE5PWEZF UiAqLwotCQkJc2oueF9zaG9ydCA9IHkgfCAweDgwOwotCQkJZGVidWcoRjAwMSwiWEdOQllURSBL QU5BIFNKIiwiIixzai54X3Nob3J0KTsKLQkJICAgIH0gZWxzZSB7Ci0JCQkvKiBTb21ldGhpbmcg dGhhdCB0cmFuc2xhdGVzIHRvIFUrRkZGRCAqLwotCQkJc2oueF9zaG9ydCA9IFVOS1NKSVM7Ci0J CSAgICB9Ci0JCX0KLQkJYnJlYWs7Ci0JICAgIH0KLQkgICAgaGF2ZXNqID0gMTsJCQkvKiBIYXZl IFNoaWZ0LUpJUyAqLwotI2lmZGVmIFVOSUNPREUKLQkgICAgdWMueF9zaG9ydCA9IHNqX3RvX3Vu KHNqLnhfc2hvcnQpOyAvKiBUcmFuc2xhdGUgdG8gVUNTLTIgKi8KLQkgICAgaGF2ZXVjID0gMTsJ CQkvKiBIYXZlIFVuaWNvZGUgKi8KLSNlbmRpZiAvKiBVTklDT0RFICovCi0JICAgIGZsYWcgPSAx OwkJCS8qIEhhdmUgYSBjaGFyICovCi0JfQotI2VuZGlmIC8qIEtBTkpJICovCi0gICAgfQotICAg IGlmICghZmxhZykgewkJCS8qIElmIG5vIGNoYXJhY3RlciB3YXMgcmVhZCB5ZXQuLi4gKi8KLQlp ZiAoKHggPSAoZm4gPyAoKmZuKSgpIDogem1pbmNoYXIoKSkpID4gLTEpCS8qIHJlYWQgb25lIG5v dyAqLwotCSAgZmZjKys7Ci0JZGVidWcoRjEwMSwieGduYnl0ZSB6bWluY2hhciAxIiwiIix4KTsK LQlpZiAoeCA8IDApCi0JICByZXR1cm4oeCk7Ci0JaGF2ZXVjID0gMDsKLSAgICB9Ci0jaWZkZWYg VU5JQ09ERQotICAgIGlmIChoYXZldWMpIHsKLQl0aGlzY2hhciA9IHVjLnhfc2hvcnQ7Ci0JLyog bGFzdHVjczIgPSB1Yy54X3Nob3J0OyAqLwotICAgIH0gZWxzZQotI2VuZGlmIC8qIFVOSUNPREUg Ki8KLSAgICAgIHRoaXNjaGFyID0geDsKLSAgICBkZWJ1ZyhGMDAxLCJ4Z25ieXRlIHRoaXNjaGFy IixoYXZldWMgPyAiW1VOSUNPREVdIiA6ICJbb3RoZXJdIix0aGlzY2hhcik7Ci0KLSNpZmRlZiBD S19DVFJMWgkJCQkvKiBTRVQgRU9GIENUUkxaICovCi0gICAgaWYgKGVvZm1ldGhvZCA9PSBYWUVP Rl9aICYmICFiaW5hcnkgJiYgdGhpc2NoYXIgPT0gMjYpIHsKLQlkZWJ1ZyhGMTAwLCJ4Z25ieXRl IEVPRiBvbiBDdHJsLVogMSIsIiIsMCk7Ci0JcmV0dXJuKC0xKTsKLSAgICB9Ci0jZW5kaWYgLyog Q0tfQ1RSTFogKi8KLQotI2lmZGVmIFVOSUNPREUKLSAgICBpZiAoIWhhdmV1YykJCQkvKiBJZiBu b3QgVW5pY29kZS4uLiAqLwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSAgICAgIHggJj0gZm1hc2s7 CQkJLyogQXBwbHkgU0VUIEZJTEUgQllURVNJWkUgbWFzayAqLwotCi0gICAgc3dpdGNoICh4bGF0 eXBlKSB7CQkJLyogVHJhbnNsYXRpb24gdHlwZS4uLiAqLwotI2lmZGVmIFVOSUNPREUKLSAgICAg IGNhc2UgWExBX1VOSUNPREU6IHsJCS8qIFVuaWNvZGUgaXMgaW52b2x2ZWQgKi8KLQkgIHhjID0g MDsKLS8qCi0gIEhlcmUgd2UgbXVzdCBjaG9vc2UgdGhlIGFwcHJvcHJpYXRlIHRyYW5zbGF0aW9u IGZ1bmN0aW9uLiAgSWYgd2UgYXJlIGJlaW5nCi0gIGNhbGxlZCBieSBnZXRwa3QoKSAoaS5lLiB3 aGVuIHRyYW5zZmVycmluZyBhIGZpbGUpLCB3ZSBhcmUgdHJhbnNsYXRpbmcgZnJvbQotICBVbmlj b2RlIHRvIHRoZSBUcmFuc2ZlciBDaGFyYWN0ZXIgU2V0IGFuZCB0aGVyZWZvcmUgbXVzdCB1c2Ug dGhlIGZ1bmN0aW9uCi0gIHBvaW50ZWQgdG8gYnkgeHV0LiAgT3RoZXJ3aXNlLCBlLmcuIGR1cmlu ZyBUUkFOU0xBVEUsIENPTk5FQ1QsIFRSQU5TTUlULCBldGMsCi0gIHdlIGFyZSB0cmFuc2xhdGlu ZyBmcm9tIFVuaWNvZGUgdG8gdGhlIEZpbGUgQ2hhcmFjdGVyIFNldCBhbmQgc28gbXVzdCBjYWxs Ci0gIHRoZSBmdW5jdGlvbiBwb2ludGVkIHRvIGJ5IHh1Zi4gIFRoZXJlIG1pZ2h0IGJlIGEgY2xl YW5lciB3YXkgdG8gc2V0IHRoaXMKLSAgdXAgYnV0IEkgZG9uJ3QgdGhpbmsgc28uICBGb3IgZXhh bXBsZSwgc2V0eGxhdHlwZSgpIG1pZ2h0IGhhdmUgYmVlbiBjYWxsZWQKLSAgdG9vIHNvb24gYW5k IHNvIG1pZ2h0IG5vdCBoYXZlIGtub3duIHdoZXRoZXIgaXQgd2FzIGEgZmlsZSB0cmFuc2ZlciBv ciBhCi0gIGxvY2FsIG9wZXJhdGlvbi4KLSovCi0vKgotICAoTWFueSB5ZWFycyBsYXRlci4uLikg SW4gdGVzdGluZyB0aGlzIGNvZGUgSSBub3RpY2VkIHRoYXQgVFJBTlNMQVRFJ2luZwotICBSdXNz aWFuIHRleHQgZnJvbSBVVEYtOCB0byBJU08gTGF0aW4vQ3lyaWxsaWMgcHJvZHVjZWQgYWxsIHF1 ZXN0aW9uIG1hcmtzLgotICBSZXJlYWRpbmcgdGhlIHByZXZpb3VzIHBhcmFncmFwaCBpdCBzZWVt cyB0byBtZSB3ZSBhcmUgKEkgYW0pIG92ZXJsb2FkaW5nCi0gIHRoaXMgZnVuY3Rpb24gd2l0aCBy ZXNwb25zaWJpbGl0ZXMsIHNhdGlzZnlpbmcgdGhlIG5lZWRzIG9mIGZpbGUgdHJhbnNmZXIKLSAg KGxvY2FsIGZpbGUgY2hhcnNldCAtPiB0cmFuc2ZlciBjaGFyc2V0IGZvciBvdXRib3VuZCBwYWNr ZXQpIGFuZCBsb2NhbCBmaWxlCi0gIGNvbnZlcnNpb24uICBJbiB0aGUgY2FzZSBvZiBUUkFOU0xB VEUsIHdlIGNhbGwgKHhnbmJ5dGUoKSwgeHBuYnl0ZSgpKSBpbiBhCi0gIGxvb3AsIGV4cGVjdGlu ZyB0aGUgeGduYnl0ZSgpIHdpbGwgZmVlZCBVQ1MyIHRvIHhwbmJ5dGUoKS4gIEJ1dCB0aGUKLSAg Zm9sbG93aW5nIGNvZGUgZG9lcyB3aGF0IHhwbmJ5dGUoKSBpcyBnb2luZyB0byBkbywgcmV0dXJu aW5nIChpbiB0aGlzIGNhc2UpCi0gIGFuIElTTyBMYXRpbi9DeXJpbGxpYyBieXRlIHN0cmVhbSwg d2hpY2ggeHBuYnl0ZSgpIGJlbGlldmVzIHRvIGJlIFVDUzIsIGFuZAotICBjb21lcyB1cCB3aXRo IG5vbnNlbnNlLiAgTm90IHdhbnRpbmcgdG8gcmlwIHRoZSB3aG9sZSB0aGluZyBhcGFydCBhbmQg c3RhcnQKLSAgb3ZlciwgSSBtYWRlIHRoZSBmb2xsb3dpbmcgY2hhbmdlIHRoYXQgc2hvdWxkIGRv IG5vIGhhcm0sIHVwb24gb2JzZXJ2aW5nCi0gIHRoYXQgaWYgdGhlIGlucHV0IGNoYXJhY3RlciBz ZXQgaXMgVVRGLTggb3IgVUNTLTIsIHRoZW4gd2hlbiB3ZSBnZXQgaGVyZSBpdAotICBoYXMgYWxy ZWFkeSBiZWVuIGNvbnZlcnRlZCB0byBVQ1MyLCBzbyBpZiB3ZSBhcmUgbm90IHRyYW5zZmVycmlu ZyBhIGZpbGUsIHdlCi0gIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgZWxzZSBleGNlcHQgcHV0 IHRoZSBieXRlcyBpbiB0aGUgcmlnaHQgcGxhY2UgdG8gYmUKLSAgcmV0dXJuZWQsIHdoaWNoIGlz IGRvbmUgZnVydGhlciBhbG9uZy4KLSovCi0jaWZkZWYgQ09NTUVOVAotCSAgLyogUHJldmlvdXMg Y29kZSAqLwotCSAgeHggPSAod2hhdCAmIFdfU0VORCkgPyB4dXQgOiB4dWY7Ci0jZWxzZQotCSAg LyogTmV3IGNvZGUgMjAxMS0wNi0wMyAqLwotCSAgaWYgKHdoYXQgJiBXX1NFTkQpIHsKLQkgICAg ICB4eCA9IHh1dDsKLQkgIH0gZWxzZSB7Ci0JICAgICAgaWYgKGZjcyA9PSBGQ19VQ1MyIHx8IGZj cyA9PSBGQ19VVEY4KQotCQl4eCA9IE5VTEw7Ci0JICAgICAgZWxzZQotCQl4eCA9IHh1ZjsKLQkg IH0KLSNlbmRpZgkvKiBDT01NRU5UICovCi0KLQkgIGVvbGZsYWcgPSAwOwotCSAgaWYgKGhhdmV1 YykgewkJCS8qIEZpbGUgaXMgVW5pY29kZSAqLwotCSAgICAgIC8qIFNlZSBVbmljb2RlIFRSMTMs ICJDb252ZXJ0aW5nIHRvIE90aGVyIENoYXJhY3RlciBTZXRzIiAqLwotCSAgICAgIGlmICh1Yy54 X3Nob3J0ID09IDB4MjAyOCB8fCAvKiBMaW5lIFNlcGFyYXRvcj8gKi8KLQkJICB1Yy54X3Nob3J0 ID09IDB4MjAyOSB8fCAvKiBQYXJhZ3JhcGggU2VwYXJhdG9yICovCi0JCSAgKGZlb2wgJiYgKHVj Lnhfc2hvcnQgPT0gKFVTSE9SVClmZW9sKSkKLQkJICApIHsKLQkJICBkZWJ1ZyhGMDAxLCJ4Z25i eXRlIHVjIGVvbCIsIiIsdWMueF9zaG9ydCk7Ci0JCSAgcmMgPSAwOwotCQkgIGVvbGZsYWcgPSAx OwkJLyogRG9uJ3QgdHJhbnNsYXRlIGFuZCBoYW5kbGUgbGF0ZXIgKi8KLQkgICAgICB9Ci0JICAg ICAgaWYgKHh4ICYmICFlb2xmbGFnKSB7CS8qIFVDUy10by1UQ1MgZnVuY3Rpb24gKFVDUy0+Ynl0 ZSkgKi8KLQkJICByYyA9ICgqeHgpKHVjLnhfc2hvcnQpOyAvKiBUaGVzZSBjYW4gZmFpbC4uLiAq LwotCQkgIGRlYnVnKEYxMDEsInhnbmJ5dGUgeHggcmMiLCIiLHJjKTsKLQkJICBpZiAocmMgPCAw KQkJLyogSWYgaXQgY2FuJ3QgYmUgdHJhbnNsYXRlZCAqLwotCQkgICAgdWMueF9zaG9ydCA9IFVO SzsJLyogUHV0IHVua25vd24tY2hhcmFjdGVyIHN5bWJvbCAqLwotCQkgIGVsc2UKLQkJICAgIHVj Lnhfc2hvcnQgPSAodW5zaWduZWQpKCh1bnNpZ25lZClyYyAmIDB4ZmZmZik7Ci0JCSAgZGVidWco RjEwMSwieGduYnl0ZSB4eCB1YyIsIiIsdWMueF9zaG9ydCk7Ci0JICAgICAgfQotI2lmZGVmIEtB TkpJCi0JICAgICAgaWYgKHRjcyA9PSBGQ19KRVVDKSB7CS8qIFRyYW5zbGF0aW5nIHRvIEVVQy1K UCAqLwotCQkgIFVTSE9SVCBzaiA9IDA7Ci0JCSAgdW5pb24gY2tfc2hvcnQgZXU7Ci0JCSAgZGVi dWcoRjAwMSwieGduYnl0ZSBVQ1MtPkVVQyBVQ1MiLCIiLHVjLnhfc2hvcnQpOwotCQkgIGlmICgh aGF2ZXNqKQkJLyogSWYgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGl0ICovCi0JCSAgICBzaiA9IHVu X3RvX3NqKHVjLnhfc2hvcnQpOyAvKiBjb252ZXJ0IHRvIFNoaWZ0LUpJUyAqLwotCQkgIGV1Lnhf c2hvcnQgPSBzal90b19ldShzaik7Ci0JCSAgZGVidWcoRjAwMSwieGduYnl0ZSBVQ1MtPkVVQyBF VUMiLCIiLGV1Lnhfc2hvcnQpOwotCQkgIHhsYXB0ciA9IDA7Ci0JCSAgeGxhY291bnQgPSAwOwot CQkgIGlmIChlb2xmbGFnKSB7Ci0JCSAgICAgIGlmICh3aGF0ICYgV19TRU5EKSB7Ci0JCQkgIHhs YWJ1Zlt4bGFjb3VudCsrXSA9IExGOwotCQkJICByZXR1cm4oQ1IpOwotCQkgICAgICB9IGVsc2Ug ewotCQkJICByZXR1cm4oZmVvbCk7Ci0JCSAgICAgIH0KLQkJICB9Ci0JCSAgaWYgKGV1LnhfY2hh cltieXRlb3JkZXJdKSB7CS8qIFR3byBieXRlcyAqLwotCQkgICAgICByYyA9IGV1LnhfY2hhclti eXRlb3JkZXJdOwotCQkgICAgICB4bGFidWZbeGxhY291bnQrK10gPSBldS54X2NoYXJbMS1ieXRl b3JkZXJdOwotCQkgICAgICBkZWJ1ZyhGMDAxLCJ4Z25ieXRlIFVDUy0+RVVDIHhsYWJ1ZlswXSIs IiIseGxhYnVmWzBdKTsKLQkJICB9IGVsc2UgewkJLyogT25lIGJ5dGUgKi8KLQkJICAgICAgcmMg PSBldS54X2NoYXJbMS1ieXRlb3JkZXJdOwotCQkgIH0KLQkJICBkZWJ1ZyhGMTAxLCJ4Z25ieXRl IFVDUy0+RVVDIHhsYWNvdW50IiwiIix4bGFjb3VudCk7Ci0JCSAgZGVidWcoRjAwMSwieGduYnl0 ZSBVQ1MtPkVVQyByYyIsIiIscmMpOwotCQkgIHJldHVybihyYyk7Ci0JICAgICAgfSBlbHNlCi0j ZW5kaWYgLyogS0FOSkkgKi8KLQkgICAgICBpZiAodGNzICE9IEZDX1VDUzIgJiYgdGNzICE9IEZD X1VURjgpIHsKLQkJICBpZiAodWMueF9zaG9ydCAmIDB4ZmYwMCkgewkvKiBEZWNvZGluZyBlcnJv ciAqLwotCQkgICAgICBkZWJ1ZyhGMDAxLCJ4Z25ieXRlIGRlY29kaW5nIGVycm9yIiwiIix1Yy54 X3Nob3J0KTsKLQkJICAgICAgcmV0dXJuKC0yKTsKLQkJICB9IGVsc2UKLQkJICAgIHJldHVybigo dW5zaWduZWQgaW50KSh1Yy54X3Nob3J0ICYgMHhmZikpOwotCSAgICAgIH0KLQkgICAgICB4YyA9 IHVjLnhfc2hvcnQ7Ci0KLQkgIH0gZWxzZSB7CQkJLyogRmlsZSBpcyBub3QgVW5pY29kZSAqLwot CSAgICAgIFVTSE9SVCBjaDsKLQkgICAgICAvKiBUcmFuc2xhdGUgZnJvbSBzaW5nbGUgRkNTIGJ5 dGUgdG8gVUNTLTIgKi8KLS8qCi0gIFRoaXMgaXMgYSBiaXQgbm9ub2J2aW91cy4uLiAgVGhlIGJs YWhfdSgpIChCbGFoLXRvLVVuaWNvZGUpIHJvdXRpbmVzIGFyZQotICBjYWxsZWQgb25seSB3aXRo IHBpZWNlcyBvZiBjaGFyYWN0ZXIgc2V0cywgaW4gdGhlIElTTyAyMDIyIHNlbnNlLiAgU28sCi0g IGZvciBleGFtcGxlLCBpZiBjaCBpcyBhIExhdGluLTEgY2hhcmFjdGVyLCB3ZSBjYWxsIHRoZSB0 cmFuc2xhdGlvbgotICByb3V0aW5lIG9ubHkgaWYgaXQgaXMgaW4gdGhlIHJpZ2h0IGhhbGY7IGlm IGl0J3MgaW4gdGhlIGxlZnQgaGFsZiwgaXQKLSAgaXNuJ3QgdHJhbnNsYXRlZCwgYW5kIGluIGZh Y3Qgd2lsbCBnaXZlIHRoZSB3cm9uZyByZXN1bHQgaWYgc2VudCB0byB0aGUKLSAgdHJhbnNsYXRp b24gZnVuY3Rpb24uICBUaGF0J3MgYmVjYXVzZSB0aG9zZSBmdW5jdGlvbnMgd2VyZSBkZXNpZ25l ZCBmb3IKLSAgdXNlIHdpdGggdGhlIElTTyAyMDIyIEcwLi5HMyBzZXRzLCBub3QgZm9yIGZpbGUg dHJhbnNmZXIuICBPbiB0aGUgb3RoZXIKLSAgaGFuZCwgaWYgaXQncyBhIDctYml0IGNoYXJhY3Rl ciBzZXQsIHdlICpkbyogY2FsbCB0aGUgdHJhbnNsYXRpb24KLSAgZnVuY3Rpb24uICAoVG8gcHV0 IGl0IGFub3RoZXIgd2F5LCB0aGUgbGVmdCBoYWxmIG9mIGFueSA4LWJpdCBjaGFyYWN0ZXIKLSAg c2V0IGlzIEFTQ0lJIGFuZCB0aGVyZWZvcmUgZG9lc24ndCBuZWVkIHRvIGJlIHRyYW5zbGF0ZWQg YnV0IDctYml0IHNldHMKLSAgc3VjaCBhcyBJU08gNjQ2IEdlcm1hbiBkbyBuZWVkIHRyYW5zbGF0 aW9uKS4KLSovCi0JICAgICAgY2ggPSAodW5zaWduZWQpKHRoaXNjaGFyICYgMHhmZik7Ci0JICAg ICAgaWYgKCgoZmNzaW5mb1tmY3NdLnNpemUgPiAxMjgpICYmIChjaCAmIDB4ODApKSB8fAotCQkg IGZjc2luZm9bZmNzXS5zaXplIDw9IDEyOCkgewotCQkgIGlmICh4ZnUpIHsJCSAvKiBGQ1MtdG8t VUNTIGZ1bmN0aW9uICovCi0JCSAgICAgIGNoID0gKCp4ZnUpKGNoKTsKLQkJICB9Ci0JICAgICAg fQotCSAgICAgIHhjID0gY2g7Ci0JICB9Ci0JICAvKiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgYSBV Q1MtMiBjaGFyYWN0ZXIgaW4gbmF0aXZlIGZvcm1hdCAqLwotCSAgLyogKEJpZyBFbmRpYW4gb3Ig TGl0dGxlIEVuZGlhbikgaW4geGMsIHdoaWNoIGlzIGFuIHVuc2lnbmVkIGludC4gKi8KLQotCSAg ZGVidWcoRjAwMSwieGduYnl0ZSB4YyIsIiIseGMpOwotCi0JICBpZiAodGNzID09IEZDX1VURjgp IHsJCS8qIE5vdyBjb252ZXJ0IHRvIFVURi04ICovCi0JICAgICAgVVNIT1JUIGM7CQkJLyogTk9U RTogdGhpcyBpcyBGQ19VVEY4IG9uIHB1cnBvc2UhICovCi0JICAgICAgQ0hBUiAqIGJ1ZiA9IE5V TEw7Ci0JICAgICAgaW50IGksIGsgPSAwLCB4OwotCi0JICAgICAgeGxhcHRyID0gMDsKLQkgICAg ICBpZiAodXRmZXJyb3IpIHsKLQkJICB4bGFidWZbaysrXSA9IDB4ZmY7Ci0JCSAgeGxhYnVmW2sr K10gPSAweGJkOwotCSAgICAgIH0KLQkgICAgICBpZiAoZW9sZmxhZykgewkJLyogV2UgZGV0ZWN0 ZWQgRU9MIGluIHNvdXJjZSBmaWxlICovCi0JCSAgaWYgKHdoYXQgJiBXX1NFTkQpIHsJLyogQ29u dmVydCB0byBDUkxGICovCi0JCSAgICAgIHhsYWJ1ZltrKytdID0gTEY7Ci0JCSAgICAgIHhsYWNv dW50ID0gazsKLQkJICAgICAgcmV0dXJuKCh1bnNpZ25lZCBpbnQpQ1IpOwotI2lmZGVmIENPTU1F TlQKLQkJICB9IGVsc2UgewkJLyogT3IgdG8gbG9jYWwgbGluZS1lbmQgKi8KLQkJICAgICAgeGxh Y291bnQgPSBrOwotCQkgICAgICByZXR1cm4oKHVuc2lnbmVkIGludClmZW9sKTsKLSNlbmRpZiAv KiBDT01NRU5UICovCi0JCSAgfQotCSAgICAgIH0KLQkgICAgICBjID0geGM7Ci0JICAgICAgaWYg KCh4ID0gdWNzMl90b191dGY4KGMsJmJ1ZikpIDwgMSkgewotCQkgIGRlYnVnKEYxMDEsInhnbmJ5 dGUgdWNzMl90b191dGY4IGVycm9yIiwiIixjKTsKLQkJICByZXR1cm4oLTIpOwotCSAgICAgIH0K LQkgICAgICBkZWJ1ZyhGMTAxLCJ4Z25ieXRlIFVURjggYnVmWzBdIiwiIixidWZbMF0pOwotCSAg ICAgIGZvciAoaSA9IDE7IGkgPCB4OyBpKyspIHsKLQkJICB4bGFidWZbaytpLTFdID0gYnVmW2ld OwotCQkgIGRlYnVnKEYxMTEsInhnbmJ5dGUgVVRGOCB4bGFidWYiLGNraXRvYShpLTEpLGJ1Zltp XSk7Ci0JICAgICAgfQotCSAgICAgIHhsYXB0ciA9IDA7Ci0JICAgICAgeGxhY291bnQgPSB4IC0g MTsKLQkgICAgICBkZWJ1ZyhGMTAxLCJ4Z25ieXRlIFVURjggeGxhY291bnQiLCIiLHhsYWNvdW50 KTsKLQkgICAgICByZXR1cm4oKHVuc2lnbmVkIGludClidWZbMF0pOwotCSAgfSBlbHNlIHsJCQkv KiBPciBrZWVwIGl0IGFzIFVDUy0yICovCi0JICAgICAgaW50IGsgPSAwOwotCSAgICAgIENIQVIg YzsKLQkgICAgICB4bGFwdHIgPSAwOwotCSAgICAgIGlmICh1dGZlcnJvcikgewotCQkgIHhsYWJ1 ZltrKytdID0gMHhmZjsKLQkJICB4bGFidWZbaysrXSA9IDB4ZmQ7Ci0JCSAgZGVidWcoRjEwMSwi eGduYnl0ZSBlcnJvciIsIiIsayk7Ci0JICAgICAgfQotCSAgICAgIGlmIChlb2xmbGFnKSB7CQkv KiBXZSBkZXRlY3RlZCBFT0wgaW4gc291cmNlIGZpbGUgKi8KLQkJICBpZiAod2hhdCAmIFdfU0VO RCkgewkvKiBDb252ZXJ0IHRvIENSTEYgKi8KLQkJICAgICAgeGxhYnVmW2srK10gPSBDUjsKLQkJ ICAgICAgeGxhYnVmW2srK10gPSBOVUw7Ci0JCSAgICAgIHhsYWJ1ZltrKytdID0gTEY7Ci0JCSAg ICAgIHhsYWNvdW50ID0gazsKLQkJICAgICAgZGVidWcoRjEwMSwieGduYnl0ZSBzZW5kIENSTEYi LCIiLGspOwotCQkgICAgICByZXR1cm4oMCk7CS8qIFJldHVybiBOVUwgKi8KLQkJICB9IGVsc2Ug ewkJLyogT3IgdG8gbG9jYWwgbGluZS1lbmQgKi8KLSNpZmRlZiBDT01NRU5UCi0JCSAgICAgIC8q IFRoaXMgYnlwYXNzZXMgYnl0ZSBzd2FwcGluZyB0aGF0IHdlIG1pZ2h0IG5lZWQgKi8KLQkJICAg ICAgeGxhYnVmW2srK10gPSAoQ0hBUilmZW9sOwotCQkgICAgICB4bGFjb3VudCA9IGs7Ci0JCSAg ICAgIGRlYnVnKEYxMDEsInhnbmJ5dGUgc2VuZCBmZW9sIiwiIixrKTsKLQkJICAgICAgcmV0dXJu KDApOwkvKiBSZXR1cm4gTlVMICovCi0jZWxzZQotCQkgICAgICB4YyA9IChDSEFSKWZlb2w7Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotCQkgIH0KLQkgICAgICB9Ci0JICAgICAgLyogSW4gd2hpY2gg b3JkZXIgc2hvdWxkIHdlIHJldHVybiB0aGUgYnl0ZXM/ICovCi0jaWZkZWYgQ09NTUVOVAotCSAg ICAgIGlmICggKHdoYXQgJiBXX1NFTkQpIHx8ICh3aGF0ICYgV19GVFApIHx8IChmaWxlb3JkZXIg PT0gMCkpIHsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0JCSAgLyogQUxXQVlTIFJFVFVSTiBJTiBC SUcgRU5ESUFOIE9SREVSLi4uIDcgU2VwIDIwMDIgICAqLwotCQkgIC8qIHhnbmJ5dGUoKSBpcyBh bG1vc3QgYWx3YXlzIHVzZWQgdG8gZmVlZCB4cG5ieXRlKCkgKi8KLQkJICAvKiB3aGljaCByZXF1 aXJlcyBieXRlcyBpbiBCRSBvcmRlci4gSW4gY2FzZXMgd2hlcmUgICovCi0JCSAgLyogeGduYnl0 ZSBpcyB1c2VkIGluIGlzb2xhdGlvbiwgdGhlIGNhbGxlciBjYW4gc3dhcCAqLwotCQkgIC8qIGJ5 dGVzIGl0c2VsZiBhZnRlcndhcmRzLiAqLwotCQkgIHhsYWJ1ZltrKytdID0gKHhjID4+IDgpICYg MHhmZjsgLyogQmlnIEVuZGlhbiAqLwotCQkgIHhsYWJ1ZltrKytdID0geGMgJiAweGZmOwotCQkg IGRlYnVnKEYwMDEsInhnbmJ5dGUtPlVDUzJCRSIsCi0JCQlja2l0b3goKGludCl4bGFidWZbMF0p LHhsYWJ1ZlsxXSk7Ci0jaWZkZWYgQ09NTUVOVAotCSAgICAgIH0gZWxzZSB7CQkJLyogTGl0dGxl IEVuZGlhbiAqLwotCQkgIHhsYWJ1ZltrKytdID0geGMgJiAweGZmOwotCQkgIHhsYWJ1ZltrKytd ID0gKHhjID4+IDgpICYgMHhmZjsKLQkJICBkZWJ1ZyhGMDAxLCJ4Z25ieXRlLT5VQ1MyTEUiLAot CQkJY2tpdG94KChpbnQpeGxhYnVmWzBdKSx4bGFidWZbMV0pOwotCSAgICAgIH0KLSNlbmRpZiAv KiBDT01NRU5UICovCi0JICAgICAgYyA9IHhsYWJ1ZlswXTsKLQkgICAgICB4bGFwdHIgPSAxOwot CSAgICAgIHhsYWNvdW50ID0gay0xOwotCSAgICAgIGRlYnVnKEYxMDEsInhnbmJ5dGUgYyIsIiIs Yyk7Ci0JICAgICAgZGVidWcoRjEwMSwieGduYnl0ZSB4bGFwdHIiLCIiLHhsYXB0cik7Ci0JICAg ICAgZGVidWcoRjAxMSwieGduYnl0ZSB4bGFidWYiLHhsYWJ1Zix4bGFjb3VudCk7Ci0JICAgICAg cmV0dXJuKCh1bnNpZ25lZCBpbnQpYyk7Ci0JICB9Ci0gICAgICB9Ci0jZW5kaWYgLyogVU5JQ09E RSAqLwotICAgICAgY2FzZSBYTEFfTk9ORToKLQlyZXR1cm4oKGZuID8gKCpmbikoKSA6IHptaW5j aGFyKCkpKTsKLSAgICAgIGNhc2UgWExBX0JZVEU6CQkJLyogQnl0ZS1mb3ItQnl0ZSB0cmFuc2xh dGlvbiAqLwotCXJ0ID0geDsKLQlpZiAoc3gpCi0JICBydCA9ICgqc3gpKHJ0KTsKLSNpZmRlZiBV TklDT0RFCi0JaWYgKHV0ZmVycm9yKSB7Ci0JICAgIHhsYXB0ciA9IDA7Ci0JICAgIHhsYWNvdW50 ID0gMTsKLQkgICAgeGxhYnVmWzBdID0gcnQ7Ci0JICAgIHJldHVybihVTkspOwotCX0gZWxzZQot I2VuZGlmIC8qIFVOSUNPREUgKi8KLQkgIHJldHVybigodW5zaWduZWQgaW50KXJ0KTsKLQotI2lm ZGVmIEtBTkpJCi0gICAgICBjYXNlIFhMQV9KQVBBTjoJCQkvKiBDb21lIGhlcmUgd2l0aCBTaGlm dC1KSVMgKi8KLQlpZiAodGNzID09IEZDX0pFVUMpIHsJCS8qIEl0IGJldHRlciBiZS4uLiAqLwot CSAgICB4bGFwdHIgPSAwOwotCSAgICB4bGFjb3VudCA9IDA7Ci0JICAgIGlmICghaGF2ZXNqKSB7 Ci0JCXByaW50ZigiQkFEIEJBRFxuIik7Ci0JCXJldHVybigtMik7Ci0JICAgIH0KLQkgICAgaWYg KCFoYXZlZXUpCQkvKiBXZSBtaWdodCBhbHJlYWR5IGhhdmUgRVVDIHRvbyAqLwotCSAgICAgIGV1 Lnhfc2hvcnQgPSBzal90b19ldShzai54X3Nob3J0KTsKLQkgICAgaWYgKGV1LnhfY2hhcltieXRl b3JkZXJdKSB7Ci0JCXhsYWJ1Zlt4bGFjb3VudCsrXSA9IGV1LnhfY2hhclsxLWJ5dGVvcmRlcl07 Ci0JCXJldHVybihldS54X2NoYXJbYnl0ZW9yZGVyXSk7Ci0JICAgIH0gZWxzZSB7Ci0JCXJldHVy bihldS54X2NoYXJbMS1ieXRlb3JkZXJdKTsKLQkgICAgfQotCSAgICBicmVhazsKLQl9Ci0jZW5k aWYgLyogS0FOSkkgKi8KLQotICAgICAgZGVmYXVsdDoKLQlkZWJ1ZyhGMTAxLCJ4Z25ieXRlIGJh ZCB4bGF0eXBlIiwiIix4bGF0eXBlKTsKLQlyZXR1cm4oLTIpOwotICAgIH0KLSNpZmRlZiBDT01N RU5UCi0vKiAgICAKLSAgSWYgdGhlcmUgaXMgYSByZXR1cm4oKSBzdGF0ZW1lbnQgaGVyZSwgc29t ZSBjb21waWxlcnMgY29tcGxhaW4KLSAgYWJvdXQgInN0YXRlbWVudCBub3QgcmVhY2hlZCIuICBJ ZiB0aGVyZSBpcyBubyByZXR1cm4oKSBzdGF0ZW1lbnQsCi0gIG90aGVyIGNvbXBpbGVycyBjb21w bGFpbiB0aGF0ICJOb24tdm9pZCBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGEgdmFsdWUiLgotICBU aGVyZSBpcyBubyBwYXRoIHRocm91Z2ggdGhpcyBmdW5jdGlvbiB0aGF0IGZhbGxzIHRocm91Z2gg dG8gaGVyZS4KLSovCi0gICAgZGVidWcoRjEwMCwieGduYnl0ZSBzd2l0Y2ggZmFpbHVyZSIsIiIs MCk7Ci0gICAgcmV0dXJuKC0yKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi19Ci0jZW5kaWYgLyog Tk9DU0VUUyAqLwotCi0jaWZuZGVmIE5PWEZFUgotCi0vKiAgRyBFIFQgUCBLIFQgIC0tICBGaWxs IGEgcGFja2V0IGRhdGEgZmllbGQgZnJvbSB0aGUgaW5kaWNhdGVkIHNvdXJjZS4gICovCi0KLS8q Ci0gIFBhcmFtZXRlcnM6Ci0gICAgYnVmbWF4OiBNYXhpbXVtIGxlbmd0aCBvZiBlbnRpcmUgcGFj a2V0LgotICAgIHhsYXRlOiAgRmxhZyBmb3Igd2hldGhlciB0byB0cmFuc2xhdGUgY2hhcnNldHMg d2hlbiBpbiB0ZXh0IG1vZGUuCi0gIFJldHVybnM6ICBOdW1iZXIgb2YgY2hhcmFjdGVycyB3cml0 dGVuIHRvIHBhY2tldCBkYXRhIGZpZWxkLCAwIG9yIG1vcmUsCi0gICAgICAgICAgICBPciAtMSBv biBmYWlsdXJlIChpbnRlcm5hbCBlcnJvciksCi0gICAgICAgICAgICBvciAtMyBvbiB0aW1lb3V0 IChlLmcuIHdoZW4gcmVhZGluZyBmcm9tIGEgcGlwZSkuCi0KLSAgVGhpcyBpcyB0aGUgZnVsbCB2 ZXJzaW9uIGFsbG93aW5nIGZvciBwYXJpdHkgYW5kIHRleHQtbW9kZSBjb252ZXJzaW9uczsKLSAg aS5lLiBpdCB3b3JrcyBpbiBhbGwgY2FzZXMuICAgQWxzbyBzZWUgYmdldHBrdCgpLCBhIHNwZWNp YWwgbGVhbi9tZWFuL2Zhc3QKLSAgcGFja2V0IGVuY29kZXIgdGhhdCB3b3JrcyBvbmx5IGZvciBi aW5hcnktbW9kZSBuby1wYXJpdHkgdHJhbnNmZXJzLgotKi8KLXN0YXRpYyBpbnQgdWZsYWcgPSAw OwotCi1pbnQKLWdldHBrdChidWZtYXgseGxhdGUpIGludCBidWZtYXgsIHhsYXRlOyB7IC8qIEZp bGwgb25lIHBhY2tldCBidWZmZXIgKi8KLSAgICByZWdpc3RlciBDSEFSIHJ0ID0gdCwgcm5leHQg PSBOVUw7CSAgLyogUmVnaXN0ZXIgc2hhZG93cyBvZiB0aGUgZ2xvYmFscyAqLwotICAgIHJlZ2lz dGVyIENIQVIgKmRwLCAqb2RwLCAqb2RwMiwgKnAxLCAqcDI7IC8qIHBvaW50ZXJzLi4uICovCi0g ICAgcmVnaXN0ZXIgaW50IHg7CQkJLyogTG9vcCBpbmRleC4gKi8KLSAgICByZWdpc3RlciBpbnQg YTc7CQkJLyogTG93IDcgYml0cyBvZiBjaGFyYWN0ZXIgKi8KLQotICAgIENIQVIgeHhscywgeHhk bCwgeHhyYywgeHhzcywgeHhjcTsJLyogUGllY2VzIG9mIHByZWZpeGVkIHNlcXVlbmNlICovCi0K LSAgICBpZiAoYmluYXJ5KSB4bGF0ZSA9IDA7CQkvKiBXZSBkb24ndCB0cmFuc2xhdGUgaWYgYmlu YXJ5ICovCi0KLSAgICBpZiAoIWRhdGEpIHsKLQlkZWJ1ZyhGMTAwLCJTRVJJT1VTIEVSUk9SOiBn ZXRwa3QgZGF0YSA9PSBOVUxMIiwiIiwwKTsKLQlyZXR1cm4oLTEpOwotICAgIH0KLSAgICBkcCA9 IGRhdGE7CQkJCS8qIFBvaW50IHRvIHBhY2tldCBkYXRhIGJ1ZmZlciAqLwotICAgIHNpemUgPSAw OwkJCQkvKiBBbmQgaW5pdGlhbGl6ZSBpdHMgc2l6ZSAqLwotLyoKLSAgQXNzdW1lIGJ1Zm1heCBp cyB0aGUgcmVjZWl2ZXIncyB0b3RhbCByZWNlaXZlLXBhY2tldCBidWZmZXIgbGVuZ3RoLgotICBP dXIgd2hvbGUgcGFja2V0IGhhcyB0byBmaXQgaW50byBpdCwgc28gd2UgYWRqdXN0IHRoZSBkYXRh IGZpZWxkIGxlbmd0aC4KLSAgV2UgYWxzbyBkZWNpZGUgb3B0aW1hbGx5IHdoZXRoZXIgaXQgaXMg YmV0dGVyIHRvIHVzZSBhIHNob3J0LWZvcm1hdCBvcgotICBsb25nLWZvcm1hdCBwYWNrZXQgd2hl biB3ZSdyZSBuZWFyIHRoZSBib3JkZXJsaW5lLgotKi8KLSAgICBidWZtYXggPSBtYXhkYXRhKCk7 CQkJLyogR2V0IG1heGltdW0gZGF0YSBsZW5ndGggKi8KLQotICAgIGlmIChmaXJzdCA9PSAxKSB7 CQkJLyogSWYgZmlyc3QgY2hhcmFjdGVyIG9mIHRoaXMgZmlsZS4uICovCi0jaWZkZWYgVU5JQ09E RQotCS8qIFNwZWNpYWwgZW5kLW9mLWxpbmUgaGFuZGxpbmcgZm9yIFVuaWNvZGUgKi8KLQlpZiAo dGNoYXJzZXQgPT0gVENfVUNTMiB8fCB0Y2hhcnNldCA9PSBUQ19VVEY4KQotCSAgdWZsYWcgPSAx OwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQlkZWJ1ZyhGMTAxLCJnZXRwa3QgZmlyc3QgdWZsYWci LCIiLHVmbGFnKTsKLQlkZWJ1ZyhGMTAxLCJnZXRwa3QgZmlyc3QgcnQiLCIiLHJ0KTsKLQlpZiAo IW1lbXN0ciAmJiAhZnVuY3N0cikJLyogYW5kIHJlYWwgZmlsZS4uLiAqLwotCSAgZmZjID0gKENL X09GRl9UKTA7CQkvKiByZXNldCBmaWxlIGNoYXJhY3RlciBjb3VudGVyICovCi0jaWZkZWYgQ09N TUVOVAotCS8qIE1vdmVkIHRvIGJlbG93Li4uICovCi0JZmlyc3QgPSAwOwkJCS8qIE5leHQgY2hh cmFjdGVyIHdvbid0IGJlIGZpcnN0ICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCSpsZWZ0b3Zl ciA9ICdcMCc7CQkvKiBEaXNjYXJkIGFueSBpbnRlcnJ1cHRlZCBsZWZ0b3ZlcnMgKi8KLQlubGVm dCA9IDA7Ci0jaWZuZGVmIE5PQ1NFVFMKLQlzZXR4bGF0eXBlKHRjaGFyc2V0LGZjaGFyc2V0KTsJ LyogU2V0IHVwIGNoYXJzZXQgdHJhbnNsYXRpb25zICovCi0jZW5kaWYgLyogTk9DU0VUUyAqLwot Ci0JLyogR2V0IGZpcnN0IGNoYXJhY3RlciBvZiBmaWxlIGludG8gcnQsIHdhdGNoaW5nIG91dCBm b3IgbnVsbCBmaWxlICovCi0KLSNpZmRlZiBDQUxJQlJBVEUKLQlpZiAoY2FsaWJyYXRlICYmICFt ZW1zdHIpIHsKLSNpZmRlZiBOT1JBTkRPTQotCSAgICB4ID0gcnQgPSA1MzsKLSNlbHNlCi0JICAg IHggPSBydCA9IGNhbF9hW3JhbmQoKSAmIDB4ZmZdOwotI2VuZGlmIC8qIE5PUkFORE9NICovCi0J ICAgIGZpcnN0ID0gMDsKLQkgICAgZmZjKys7Ci0JfSBlbHNlCi0jZW5kaWYgLyogQ0FMSUJSQVRF ICovCi0jaWZkZWYgS0FOSkkKLQlpZiAoeGxhdGUgJiYgdGNoYXJzZXQgPT0gVENfSkVVQykgeyAv KiBLYW5qaSB0ZXh0ICovCi0JICAgIHggPSB6a2FuamYoKTsKLQkgICAgaWYgKCh4ID0gemthbmpp KG1lbXN0ciA/IGtnZXRtIDoga2dldGYpKSA8IDApIHsKLQkgICAgICAgIGZpcnN0ID0gLTE7Ci0J ICAgICAgICBzaXplID0gMDsKLQkgICAgICAgIGlmICh4ID09IC0yKSB7Ci0JICAgICAgICAgICAg ZGVidWcoRjEwMCwiZ2V0cGt0IHprYW5qaTogaW5wdXQgZXJyb3IiLCIiLDApOwotCSAgICAgICAg ICAgIGN4c2VlbiA9IDE7Ci0JICAgICAgICB9IGVsc2UgZGVidWcoRjEwMCwiZ2V0cGt0IHprYW5q aTogZW1wdHkgc3RyaW5nL2ZpbGUiLCIiLDApOwotCSAgICAgICAgcmV0dXJuKDApOwotCSAgICB9 Ci0JICAgIHJ0ID0geDsKLQkgICAgZmlyc3QgPSAwOwotCSAgICBpZiAoIW1lbXN0cikgewotCQlm ZmMrKzsKLQkJaWYgKGRvY3JjICYmICh3aGF0ICYgV19TRU5EKSkgLyogQWNjdW11bGF0ZSBmaWxl IGNyYyAqLwotCQkgIGRvZmlsY3JjKChpbnQpcnQpOwotCSAgICB9Ci0JfSBlbHNlIHsJCQkvKiBO b3QgS2FuamkgdGV4dCAqLwotI2VuZGlmIC8qIEtBTkpJICovCi0JICAgIGlmIChtZW1zdHIpIHsJ CS8qIFJlYWRpbmcgZGF0YSBmcm9tIG1lbW9yeSBzdHJpbmcgKi8KLQkJLyogVGhpcyB3aWxsIG5v dCBiZSBVbmljb2RlICovCi0JCWlmICgocnQgPSAqbWVtcHRyKyspID09ICdcMCcpIHsgLyogZW5k IG9mIHN0cmluZyA9PT4gRU9GICovCi0JCSAgICBmaXJzdCA9IC0xOwotCQkgICAgc2l6ZSA9IDA7 Ci0JCSAgICBkZWJ1ZyhGMTAwLCJnZXRwa3Q6IGVtcHR5IHN0cmluZyIsIiIsMCk7Ci0JCSAgICBy ZXR1cm4oMCk7Ci0JCX0KLQkJZmlyc3QgPSAwOwotCSAgICB9IGVsc2UgaWYgKGZ1bmNzdHIpIHsJ LyogUmVhZGluZyBkYXRhIGZyb20gYSBmdW5jdGlvbiAqLwotCQkvKiBUaGlzIHdpbGwgbm90IGJl IFVuaWNvZGUgKi8KLQkJaWYgKCh4ID0gKCpmdW5jcHRyKSgpKSA8IDApIHsgLyogRW5kIG9mIGlu cHV0ICAqLwotCQkgICAgZmlyc3QgPSAtMTsKLQkJICAgIHNpemUgPSAwOwkJLyogRW1wdHkgKi8K LQkJICAgIHJldHVybigwKTsKLQkJfQotCQlmZmMrKzsJCQkvKiBDb3VudCBhIGZpbGUgY2hhcmFj dGVyICovCi0JCXJ0ID0gKENIQVIpIHg7CQkvKiBDb252ZXJ0IGludCB0byBjaGFyICovCi0JCWZp cnN0ID0gMDsKLQkJZGVidWcoRjAwMCwiZ2V0cGt0IGZ1bmNzdHIiLCIiLHJ0KTsKLQotCSAgICB9 IGVsc2UgewkJCS8qIFJlYWRpbmcgZGF0YSBmcm9tIGEgZmlsZSAqLwotI2lmbmRlZiBOT0NTRVRT Ci0JCWlmICh4bGF0ZSAmJiAhYmluYXJ5KSB7CS8qIENvdWxkIGJlIFVuaWNvZGUgKi8KLQkJICAg IGlmICh4bGF0eXBlID09IFhMQV9VTklDT0RFKSB7Ci0JCQkvKiBHZXQgbmV4dCB0cmFuc2xhdGVk IGJ5dGUgKi8KLQkJCXggPSB4Z25ieXRlKGNzZXF0YWJbdGNoYXJzZXRdLGZjaGFyc2V0LE5VTEwp OwotCQkJZGVidWcoRjEwMSwiZ2V0cGt0IHhnbmJ5dGUiLCIiLHgpOwotCQkgICAgfSBlbHNlIHsJ CS8qIE5vdCBVbmljb2RlICovCi0JCQl4ID0gem1pbmNoYXIoKTsJLyogR2V0IG5leHQgYnl0ZSwg dHJhbnNsYXRlIGJlbG93ICovCi0JCQlkZWJ1ZyhGMTAxLCJnZXRwa3Qgem1pbmNoYXIgQSIsIiIs eCk7Ci0JCSAgICB9Ci0JCX0gZWxzZSB7CQkvKiBKdXN0IGdldCBuZXh0IGJ5dGUgKi8KLSNlbmRp ZiAvKiBOT0NTRVRTICovCi0JCSAgICB4ID0gem1pbmNoYXIoKTsKLQkJICAgIGRlYnVnKEYxMDEs ImdldHBrdCB6bWluY2hhciBCIiwiIix4KTsKLSNpZm5kZWYgTk9DU0VUUwotCQl9Ci0jZW5kaWYg LyogTk9DU0VUUyAqLwotCQlpZiAoeCA8IDApIHsJCS8qIEVuZCBvZiBmaWxlIG9yIGlucHV0IGVy cm9yICovCi0JCSAgICBpZiAoeCA9PSAtMykgewkvKiBUaW1lb3V0LiAqLwotCQkJc2l6ZSA9IChk cC1kYXRhKTsKLQkJCWRlYnVnKEYxMDEsImdldHBrdCB0aW1lb3V0IHNpemUiLCIiLHNpemUpOwot CQkJcmV0dXJuKChzaXplID09IDApID8geCA6IHNpemUpOwotCQkgICAgfQotCQkgICAgZmlyc3Qg PSAtMTsKLQkJICAgIHNpemUgPSAwOwotCQkgICAgaWYgKHggPT0gLTIpIHsJLyogRXJyb3IgKi8K LQkJCWRlYnVnKEYxMDAsImdldHBrdDogaW5wdXQgZXJyb3IiLCIiLDApOwotCQkJY3hzZWVuID0g MTsJLyogSW50ZXJydXB0IHRoZSBmaWxlIHRyYW5zZmVyICovCi0JCSAgICB9IGVsc2UgewotCQkJ ZGVidWcoRjEwMCwiZ2V0cGt0IGVtcHR5IGZpbGUiLCIiLDApOwotCQkgICAgfQotCQkgICAgcmV0 dXJuKDApOwotCQl9Ci0JCWZpcnN0ID0gMDsJCS8qIE5leHQgY2hhcmFjdGVyIHdvbid0IGJlIGZp cnN0ICovCi0JCXJ0ID0gKENIQVIpIHg7CQkvKiBDb252ZXJ0IGludCB0byBjaGFyICovCi0jaWZu ZGVmIE5PQ1NFVFMKLQkJaWYgKHhsYXR5cGUgIT0gWExBX1VOSUNPREUgfHwgYmluYXJ5KSB7Ci0J CSAgICBmZmMrKzsKLQkJICAgIGlmIChzeCkKLQkJICAgICAgcnQgPSAoKnN4KShydCk7Ci0JCSAg ICBpZiAoZG9jcmMgJiYgKHdoYXQgJiBXX1NFTkQpKQotCQkgICAgICBkb2ZpbGNyYyh4KTsKLQkJ fQotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSNpZmRlZiBERUJVRwotCQlpZiAoZGVibG9nKQotCQkg IGRlYnVnKEYxMDEsImdldHBrdCAxc3QgY2hhciIsIiIscnQpOwotI2VuZGlmIC8qIERFQlVHICov Ci0JCWlmICgvKiAhaGF2ZXVjICYmICovIGRvY3JjICYmICh3aGF0ICYgV19TRU5EKSkgLyogRmls ZSBDUkMgKi8KLQkJICBkb2ZpbGNyYyh4KTsKLQkgICAgfQotI2lmZGVmIEtBTkpJCi0JfQotI2Vu ZGlmIC8qIEtBTkpJICovCi0JLyogUFdQOiBoYW5kbGluZyBvZiBmZW9sIGlzIGRvbmUgbGF0ZXIg KGluIHRoZSB3aGlsZSBsb29wKS4uLiAqLwotCi0gICAgfSBlbHNlIGlmICgoZmlyc3QgPT0gLTEp ICYmIChubGVmdCA9PSAwKSkgeyAvKiBFT0YgZnJvbSBsYXN0IHRpbWUgKi8KLSNpZmRlZiBERUJV RwotCWlmIChkZWJsb2cpIHsKLQkgICAgZGVidWcoRjEwMSwiZ2V0cGt0IGVvZiBjcmMxNiIsIiIs Y3JjMTYpOwotCSAgICBkZWJ1ZyhGMTAxLCJnZXRwa3QgZW9mIGZmYyIsIiIsZmZjKTsKLQl9Ci0j ZW5kaWYgLyogREVCVUcgKi8KLSAgICAgICAgcmV0dXJuKHNpemUgPSAwKTsKLSAgICB9Ci0vKgot ICBIZXJlIHdlIGhhbmRsZSBjaGFyYWN0ZXJzIHRoYXQgd2VyZSBlbmNvZGVkIGZvciB0aGUgbGFz dCBwYWNrZXQgYnV0Ci0gIGRpZCBub3QgZml0LCBhbmQgc28gd2VyZSBzYXZlZCBpbiB0aGUgImxl ZnRvdmVyIiBhcnJheS4KLSovCi0gICAgZGVidWcoRjEwMSwiZ2V0cGt0IG5sZWZ0IiwiIixubGVm dCk7Ci0gICAgaWYgKG5sZWZ0KSB7Ci0JZm9yIChwMSA9IGxlZnRvdmVyOyBubGVmdCA+IDA7IG5s ZWZ0LS0pIC8qIENvcHkgbGVmdG92ZXJzICovCi0JICAqZHArKyA9ICpwMSsrOwotCSpsZWZ0b3Zl ciA9ICdcMCc7CQkJLyogRGVsZXRlIGxlZnRvdmVycyAqLwotCW5sZWZ0ID0gMDsKLSAgICB9Ci0g ICAgaWYgKGZpcnN0ID09IC0xKQkJCS8qIEhhbmRsZSBFT0YgKi8KLSAgICAgIHJldHVybihzaXpl ID0gKGRwIC0gZGF0YSkpOwotCi0vKiBOb3cgZmlsbCB1cCB0aGUgcmVzdCBvZiB0aGUgcGFja2V0 LiAqLwotCi0gICAgcnB0ID0gMDsJCQkJLyogSW5pdGlhbGl6ZSBjaGFyYWN0ZXIgcmVwZWF0IGNv dW50ICovCi0KLSAgICB3aGlsZSAoZmlyc3QgPiAtMSkgewkJLyogVW50aWwgRU9GLi4uICovCi0j aWZkZWYgQ0FMSUJSQVRFCi0JaWYgKGNhbGlicmF0ZSAmJiAhbWVtc3RyKSB7CS8qIFdlIGdlbmVy YXRlIG91ciBvd24gImZpbGUiICovCi0JICAgIGlmIChmZmMgPj0gY2FsaWJyYXRlKSB7CS8qIEVP RiAqLwotCQlmaXJzdCA9IC0xOwotCQlmZmMtLTsKLQkgICAgfSBlbHNlIHsJCQkvKiBHZW5lcmF0 ZSBuZXh0IGNoYXJhY3RlciAqLwotCQlpZiAoY2FsX2ogPiBDQUxfTSAqIGZmYykKLQkJICBjYWxf aiA9IGNhbF9hW2ZmYyAmIDB4ZmZdOwotCQl4ID0gKHVuc2lnbmVkKWNhbF9hWyhjYWxfaiAmIDB4 ZmYpXTsKLQkJaWYgKHggPT0gcnQpIHggXj0gMjsKLQkgICAgfQotCSAgICBjYWxfaiArPSAodW5z aWduZWQgaW50KShmZmMgKyBDQUxfTyk7Ci0JICAgIGZmYysrOwotCX0gZWxzZQotI2VuZGlmIC8q IENBTElCUkFURSAqLwotI2lmZGVmIEtBTkpJCi0JICBpZiAoeGxhdGUgJiYgdGNoYXJzZXQgPT0g VENfSkVVQykgewotCSAgICAgIGlmICgoeCA9IHprYW5qaShtZW1zdHIgPyBrZ2V0bSA6IGtnZXRm KSkgPCAwKSB7Ci0JCSAgZmlyc3QgPSAtMTsKLQkJICBpZiAoeCA9PSAtMikgY3hzZWVuID0gMTsK LQkgICAgICB9IGVsc2UgaWYgKCFtZW1zdHIpIGZmYysrOwotCSAgICAgIHJuZXh0ID0gKENIQVIp ICh4ICYgZm1hc2spOwotCSAgfSBlbHNlIHsKLSNlbmRpZiAvKiBLQU5KSSAqLwotCSAgICBpZiAo bWVtc3RyKSB7CQkvKiBHZXQgbmV4dCBjaGFyIGZyb20gbWVtb3J5IHN0cmluZyAqLwotCQlpZiAo KHggPSAqbWVtcHRyKyspID09ICdcMCcpIC8qIEVuZCBvZiBzdHJpbmcgbWVhbnMgRU9GICovCi0J CSAgZmlyc3QgPSAtMTsJCS8qIEZsYWcgRU9GIGZvciBuZXh0IHRpbWUuICovCi0JCXJuZXh0ID0g KENIQVIpICh4ICYgZm1hc2spOyAvKiBBcHBseSBmaWxlIG1hc2sgKi8KLQkgICAgfSBlbHNlIGlm IChmdW5jc3RyKSB7CS8qIEdldCBuZXh0IGNoYXIgZnJvbSBmdW5jdGlvbiAqLwotCQlpZiAoKHgg PSAoKmZ1bmNwdHIpKCkpIDwgMCkgLyogRW5kIG9mIHN0cmluZyBtZWFucyBFT0YgKi8KLQkJICBm aXJzdCA9IC0xOwkJLyogRmxhZyBFT0YgZm9yIG5leHQgdGltZS4gKi8KLQkJcm5leHQgPSAoQ0hB UikgKHggJiBmbWFzayk7IC8qIEFwcGx5IGZpbGUgbWFzayAqLwotCSAgICB9IGVsc2UgewkJCS8q IEZyb20gZmlsZS4uLiAqLwotI2lmbmRlZiBOT0NTRVRTCi0JCWlmICh4bGF0ZSAmJiAhYmluYXJ5 KSB7CS8qIENvdWxkIGJlIFVuaWNvZGUgKi8KLQkJICAgIGlmICh4bGF0eXBlID09IFhMQV9VTklD T0RFKSB7Ci0JCQkvKiBHZXQgbmV4dCB0cmFuc2xhdGVkIGJ5dGUgKi8KLQkJCXggPSB4Z25ieXRl KGNzZXF0YWJbdGNoYXJzZXRdLGZjaGFyc2V0LE5VTEwpOwotCQkgICAgfSBlbHNlIHsJCS8qIE5v dCBVbmljb2RlICovCi0JCQl4ID0gem1pbmNoYXIoKTsgLyogR2V0IG5leHQgYnl0ZSwgdHJhbnNs YXRlIGJlbG93ICovCi0JCQkvKiBkZWJ1ZyhGMTAxLCJ4Z25ieXRlIEIgem1pbmNoYXIiLCIiLHgp OyAqLwotCQkgICAgfQotCQl9IGVsc2UgewkJLyogSnVzdCBnZXQgbmV4dCBieXRlICovCi0jZW5k aWYgLyogTk9DU0VUUyAqLwotCQkgICAgeCA9IHptaW5jaGFyKCk7Ci0JCSAgICAvKiBkZWJ1ZyhG MTAxLCJ4Z25ieXRlIEMgem1pbmNoYXIiLCIiLHgpOyAqLwotI2lmbmRlZiBOT0NTRVRTCi0JCX0K LSNlbmRpZiAvKiBOT0NTRVRTICovCi0JCWlmICh4IDwgMCkgewkJLyogQ2hlY2sgZm9yIEVPRiAq LwotCQkgICAgaWYgKHggPT0gLTMpIHsJLyogVGltZW91dCByZWFkaW5nIGZyb20gcGlwZSAqLwot CQkJdCA9IHJ0OwotCQkJc2l6ZSA9IChkcC1kYXRhKTsKLQkJCWRlYnVnKEYxMDEsImdldHBrdCB0 aW1lb3V0IHNpemUiLCIiLHNpemUpOwotCQkJcmV0dXJuKChzaXplID09IDApID8geCA6IHNpemUp OwotCQkgICAgfQotCQkgICAgZmlyc3QgPSAtMTsJCS8qIEZsYWcgZW9mIGZvciBuZXh0IHRpbWUu ICovCi0JCSAgICBpZiAoeCA9PSAtMikgY3hzZWVuID0gMTsgLyogSWYgZXJyb3IsIGNhbmNlbCB0 aGlzIGZpbGUuICovCi0JCX0KLQkJcm5leHQgPSAoQ0hBUikgKHggJiBmbWFzayk7IC8qIEFwcGx5 IGZpbGUgbWFzayAqLwotI2lmbmRlZiBOT0NTRVRTCi0JCWlmICh4bGF0eXBlICE9IFhMQV9VTklD T0RFKSB7Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotCQkgICAgZmZjKys7Ci0jaWZuZGVmIE5PQ1NF VFMKLQkJICAgIGlmIChzeCkKLQkJICAgICAgcnQgPSAoKnN4KShydCk7Ci0jZW5kaWYgLyogTk9D U0VUUyAqLwotCQkgICAgaWYgKGRvY3JjICYmICh3aGF0ICYgV19TRU5EKSkKLQkJICAgICAgZG9m aWxjcmMoeCk7Ci0KLSNpZm5kZWYgTk9DU0VUUwotCQl9Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwot CSAgICB9Ci0jaWZkZWYgS0FOSkkKLQl9Ci0jZW5kaWYgLyogS0FOSkkgKi8KLS8qCi0gIEF0IHRo aXMgcG9pbnQsIHRoZSBjaGFyYWN0ZXIgd2UganVzdCByZWFkIGlzIGluIHJuZXh0LAotICBhbmQg dGhlIGNoYXJhY3RlciB3ZSBhcmUgYWJvdXQgdG8gZW5jb2RlIGludG8gdGhlIHBhY2tldCBpcyBp biBydC4KLSovCi0Jb2RwID0gZHA7CQkJLyogUmVtZW1iZXIgd2hlcmUgd2Ugc3RhcnRlZC4gKi8K LSAJeHhscyA9IHh4ZGwgPSB4eHJjID0geHhzcyA9IHh4Y3EgPSBOVUw7CS8qIENsZWFyIHRoZXNl LiAqLwotLyoKLSAgTm93IGVuY29kZSB0aGUgY2hhcmFjdGVyIGFjY29yZGluZyB0byB0aGUgb3B0 aW9ucyB0aGF0IGFyZSBpbiBlZmZlY3Q6Ci0gICAgY3RscFtdOiB3aGV0aGVyIHRoaXMgY29udHJv bCBjaGFyYWN0ZXIgbmVlZHMgcHJlZml4aW5nLgotICAgIGJpbmFyeTogdGV4dCBvciBiaW5hcnkg bW9kZS4KLSAgICBycHRmbGc6IHJlcGVhdCBjb3VudHMgZW5hYmxlZC4KLSAgICBlYnFmbGc6IDh0 aC1iaXQgcHJlZml4aW5nIGVuYWJsZWQuCi0gICAgbHNjYXB1OiBsb2NraW5nIHNoaWZ0cyBlbmFi bGVkLgotKi8KLQlpZiAocnB0ZmxnKSB7CQkJLyogUmVwZWF0IHByb2Nlc3NpbmcgaXMgb24/ICov Ci0JICAgIGlmICghdWZsYWcgJiYKLQkJLyoKLQkJICogSWYgdGhlIG5leHQgY2hhciBpcyByZWFs bHkgQ1JMRiwgdGhlbiB3ZSBjYW5ub3QKLQkJICogYmUgZG9pbmcgYSByZXBlYXQgKHVubGVzcyBD UixDUixMRiB3aGljaCBiZWNvbWVzCi0JCSAqICJ+IDxuLTE+IENSIENSIExGIiwgd2hpY2ggaXMg T0sgYnV0IG5vdCBtb3N0IGVmZmljaWVudCkuCi0JCSAqIEkganVzdCBwbGFpbiBkb24ndCB3b3Jy eSBhYm91dCB0aGlzIGNhc2UuICBUaGUgYWN0dWFsCi0JCSAqIGNvbnZlcnNpb24gZnJvbSBOTCB0 byBDUkxGIGlzIGRvbmUgYWZ0ZXIgdGhlIHJwdGZsZyBpZi4uLgotCQkgKi8KLQkJKCFmZW9sIHx8 IGJpbmFyeSB8fCAoZmVvbCAmJiAocm5leHQgIT0gZmVvbCkpKSAmJgotCQkocnQgPT0gcm5leHQp ICYmIChmaXJzdCA9PSAwKSkgeyAvKiBHb3QgYSBydW4uLi4gKi8KLQkJaWYgKCsrcnB0IDwgOTQp IHsJLyogQmVsb3cgbWF4LCBqdXN0IGNvdW50ICovCi0JCSAgICBjb250aW51ZTsJCS8qIGdvIGJh Y2sgYW5kIGdldCBhbm90aGVyICovCi0JCX0gZWxzZSBpZiAocnB0ID09IDk0KSB7CS8qIFJlYWNo ZWQgbWF4LCBtdXN0IGR1bXAgKi8KLQkJICAgIHh4cmMgPSAoQ0hBUikgdG9jaGFyKHJwdCk7IC8q IFB1dCB0aGUgcmVwZWF0IGNvdW50IGhlcmUgKi8KLQkJICAgIHJwdG4gKz0gcnB0OwkvKiBBY2N1 bXVsYXRlIGl0IGZvciBzdGF0aXN0aWNzICovCi0JCSAgICBycHQgPSAwOwkJLyogQW5kIHJlc2V0 IGl0ICovCi0JCX0KLQkgICAgfSBlbHNlIGlmIChycHQgPiAxKSB7CS8qIE1vcmUgdGhhbiB0d28g Ki8KLQkJeHhyYyA9IChDSEFSKSB0b2NoYXIoKytycHQpOyAvKiBhbmQgY291bnQuICovCi0JCXJw dG4gKz0gcnB0OwotCQlycHQgPSAwOwkJLyogUmVzZXQgcmVwZWF0IGNvdW50ZXIuICovCi0JICAg IH0KLQkgICAgLyoKLQkgICAgICBJZiAocnB0ID09IDEpIHdlIG11c3QgZW5jb2RlIGV4YWN0bHkg dHdvIGNoYXJhY3RlcnMuCi0JICAgICAgVGhpcyBpcyBkb25lIGxhdGVyLCBhZnRlciB0aGUgZmly c3QgY2hhcmFjdGVyIGlzIGVuY29kZWQuCi0JICAgICovCi0JfQotCS8qIElmIGl0J3MgdGhlIG5l d2xpbmUgY2hhcmFjdGVyLi4uICovCi0JaWYgKCF1ZmxhZyAmJiAhYmluYXJ5ICYmIGZlb2wgJiYg KHJ0ID09IGZlb2wpKSB7Ci0JICAgIGlmIChsc2NhcHUgJiYgbHNzdGF0ZSkgewkvKiBJZiBTSElG VC1TVEFURSBpcyBTSElGVEVEICovCi0JCWlmIChlYnFmbGcpIHsJCS8qIElmIHNpbmdsZSBzaGlm dHMgZW5hYmxlZCwgKi8KLQkJICAgICpkcCsrID0gKENIQVIpIGVicTsJLyogaW5zZXJ0IGEgc2lu Z2xlIHNoaWZ0LiAqLwotCQl9IGVsc2UgewkJLyogT3RoZXJ3aXNlIG11c3Qgc2hpZnQgaW4uICov Ci0JCSAgICAqZHArKyA9IG15Y3RscTsJLyogSW5zZXJ0IHNoaWZ0LW91dCBjb2RlICovCi0JCSAg ICAqZHArKyA9ICdPJzsKLQkJICAgIGxzc3RhdGUgPSAwOwkvKiBDaGFuZ2Ugc2hpZnQgc3RhdGUg Ki8KLQkJfQotCSAgICB9Ci0jaWZkZWYgQ0tfU1BFRUQKLQkgICAgaWYgKGN0bHBbQ1JdKSB7Ci0J CSpkcCsrID0gbXljdGxxOwkJLyogSW5zZXJ0IGNhcnJpYWdlIHJldHVybiBkaXJlY3RseSAqLwot CQkqZHArKyA9ICdNJzsKLQkJY2NwKys7Ci0JICAgIH0gZWxzZSB7Ci0JCSpkcCsrID0gQ1I7CQkv KiBQZXJoYXBzIGxpdGVyYWxseSAqLwotCQljY3UrKzsKLQkgICAgfQotI2Vsc2UgLyogIUNLX1NQ RUVEICovCi0JICAgICpkcCsrID0gbXljdGxxOwkJLyogSW5zZXJ0IGNhcnJpYWdlIHJldHVybiBk aXJlY3RseSAqLwotCSAgICAqZHArKyA9ICdNJzsKLQkgICAgY2NwKys7Ci0jZW5kaWYgLyogQ0tf U1BFRUQgKi8KLQkgICAgcnQgPSBMRjsJCQkvKiBOb3cgbWFrZSBuZXh0IGNoYXIgYmUgbGluZWZl ZWQuICovCi0JfQotLyoKLSAgTm93IGhhbmRsZSB0aGUgOHRoIGJpdCBvZiB0aGUgZmlsZSBjaGFy YWN0ZXIuICBJZiB3ZSBoYXZlIGFuIDgtYml0Ci0gIGNvbm5lY3Rpb24sIHdlIHByZXNlcnZlIHRo ZSA4dGggYml0LiAgSWYgd2UgaGF2ZSBhIDctYml0IGNvbm5lY3Rpb24sCi0gIHdlIGVtcGxveSBl aXRoZXIgc2luZ2xlIG9yIGxvY2tpbmcgc2hpZnRzIChpZiB0aGV5IGFyZSBlbmFibGVkKS4KLSov Ci0JYTcgPSBydCAmIDAxNzc7CQkJLyogR2V0IGxvdyA3IGJpdHMgb2YgY2hhcmFjdGVyICovCi0J aWYgKHJ0ICYgMDIwMCkgewkJLyogOC1iaXQgY2hhcmFjdGVyPyAqLwotCSAgICBpZiAobHNjYXB1 KSB7CQkvKiBMb2NraW5nIHNoaWZ0cyBlbmFibGVkPyAqLwotCQlpZiAoIWxzc3RhdGUpIHsJCS8q IE5vdCBjdXJyZW50bHkgc2hpZnRlZD8gKi8KLQkJICAgIHggPSBsc2xvb2soMDIwMCk7CS8qIExv b2sgYWhlYWQgKi8KLQkJICAgIGlmICh4ICE9IDAgfHwgZWJxZmxnID09IDApIHsgLyogTG9ja2lu ZyBzaGlmdCBkZWNpc2lvbiAqLwotCQkJeHhscyA9ICdOJzsJICAgLyogTmVlZCBsb2NraW5nIHNo aWZ0LW91dCAqLwotCQkJbHNzdGF0ZSA9IDE7CSAgIC8qIGFuZCBjaGFuZ2UgdG8gc2hpZnRlZCBz dGF0ZSAqLwotCQkgICAgfSBlbHNlIGlmIChlYnFmbGcpIHsgICAvKiBOb3Qgd29ydGggaXQgKi8K LQkJCXh4c3MgPSAoQ0hBUikgZWJxOyAvKiBVc2Ugc2luZ2xlIHNoaWZ0ICovCi0JCSAgICB9Ci0J CX0KLQkJcnQgPSAoQ0hBUikgYTc7CQkvKiBSZXBsYWNlIGNoYXJhY3RlciBieSA3LWJpdCB2YWx1 ZSAqLwotCSAgICB9IGVsc2UgaWYgKGVicWZsZykgewkvKiA4dGggYml0IHByZWZpeGluZyBpcyBv bj8gKi8KLQkJeHhzcyA9IChDSEFSKSBlYnE7CS8qIEluc2VydCBzaW5nbGUgc2hpZnQgKi8KLQkJ cnQgPSAoQ0hBUikgYTc7CQkvKiBSZXBsYWNlIGNoYXJhY3RlciBieSA3LWJpdCB2YWx1ZSAqLwot CSAgICB9Ci0vKgotICBJbiBjYXNlIHdlIGhhdmUgYSA3LWJpdCBjb25uZWN0aW9uIGFuZCB0aGlz IGlzIGFuIDgtYml0IGNoYXJhY3RlciwgQU5ECi0gIG5laXRoZXIgbG9ja2luZyBzaGlmdHMgbm9y IHNpbmdsZSBzaGlmdHMgYXJlIGVuYWJsZWQsIHRoZW4gdGhlIGNoYXJhY3RlcidzCi0gIDh0aCBi aXQgd2lsbCBiZSBkZXN0cm95ZWQgaW4gdHJhbnNtaXNzaW9uLCBhbmQgYSBibG9jayBjaGVjayBl cnJvciB3aWxsCi0gIG9jY3VyLgotKi8KLQl9IGVsc2UgaWYgKGxzY2FwdSkgewkJLyogNy1iaXQg Y2hhcmFjdGVyICovCi0KLQkgICAgaWYgKGxzc3RhdGUpIHsJCS8qIENvbWVzIHdoaWxlIHNoaWZ0 ZWQgb3V0PyAqLwotCQl4ID0gbHNsb29rKDApOwkJLyogWWVzLCBsb29rIGFoZWFkICovCi0JCWlm ICh4IHx8IGVicWZsZyA9PSAwKSB7CS8qIFRpbWUgdG8gc2hpZnQgaW4uICovCi0JCSAgICB4eGxz ID0gJ08nOwkJLyogU2V0IHNoaWZ0LWluIGNvZGUgKi8KLQkJICAgIGxzc3RhdGUgPSAwOwkvKiBF eGl0IHNoaWZ0ZWQgc3RhdGUgKi8KLQkJfSBlbHNlIGlmIChlYnFmbGcpIHsJLyogTm90IHdvcnRo IGl0LCBzdGF5IHNoaWZ0ZWQgb3V0ICovCi0JCSAgICB4eHNzID0gKENIQVIpIGVicTsJLyogSW5z ZXJ0IHNpbmdsZSBzaGlmdCAqLwotCQl9Ci0JICAgIH0KLQl9Ci0JLyogSWYgZGF0YSBjaGFyYWN0 ZXIgaXMgc2lnbmlmaWNhbnQgdG8gbG9ja2luZyBzaGlmdCBwcm90b2NvbC4uLiAqLwotCWlmIChs c2NhcHUgJiYgKGE3ID09IFNPIHx8IGE3ID09IFNJIHx8IGE3ID09IERMRSkpCi0JICB4eGRsID0g J1AnOwkJCS8qIEluc2VydCBkYXRhbGluayBlc2NhcGUgKi8KLQotCWlmICgKLSNpZmRlZiBDS19T UEVFRAotCSAgICAvKgotCSAgICAgIFRod2FydCBZRVQgQU5PVEhFUiB1bndhbnRlZCwgdW5uZWVk ZWQsIGFuZCB1bmxvdmVkIHNpZ24KLQkgICAgICBleHRlbnNpb24uICBUaGlzIG9uZSB3YXMgcGFy dGljdWxhcmx5IG5hc3R5IGJlY2F1c2UgaXQgcHJldmVudGVkCi0JICAgICAgMjU1IChUZWxuZXQg SUFDKSBmcm9tIGJlaW5nIHByZWZpeGVkIG9uIHNvbWUgcGxhdGZvcm1zIC0tIGUuZy4KLQkgICAg ICBWTVMgd2l0aCBWQVggQyAtLSBidXQgbm90IG90aGVycywgdGh1cyBjYXVzaW5nIGZpbGUgdHJh bnNmZXJzIHRvCi0JICAgICAgZmFpbCBvbiBUZWxuZXQgY29ubmVjdGlvbnMgYnkgc2VuZGluZyBi YXJlIElBQ3MuICBOb3QgdG8gbWVudGlvbgotCSAgICAgIHRoZSBzdHJheSBtZW1vcnkgcmVmZXJl bmNlLiAgU2lnbmVkIGNoYXJzIGFyZSBhIEJBRCBpZGVhLgotCSAgICAqLwotCSAgICBjdGxwWyh1 bnNpZ25lZCkocnQgJiAweGZmKV0JLyogTG9wIG9mZiBhbnkgInNpZ24iIGV4dGVuc2lvbiAqLwot I2Vsc2UKLQkgICAgKGE3IDwgU1ApIHx8IChhNyA9PSBERUwpCi0jZW5kaWYgLyogQ0tfU1BFRUQg Ki8KLQkgICAgKSB7CQkJCS8qIERvIGNvbnRyb2wgcHJlZml4aW5nIGlmIG5lY2Vzc2FyeSAqLwot CSAgICB4eGNxID0gbXljdGxxOwkJLyogVGhlIHByZWZpeCAqLwotCSAgICBjY3ArKzsJCQkvKiBD b3VudCBpdCAqLwotCSAgICBydCA9IChDSEFSKSBjdGwocnQpOwkvKiBVbmNvbnRyb2xsaWZ5IHRo ZSBjaGFyYWN0ZXIgKi8KLQl9Ci0jaWZkZWYgQ0tfU1BFRUQKLQllbHNlIGlmICgoYTcgPCBTUCkg fHwgKGE3ID09IERFTCkpIC8qIENvdW50IGFuIHVucHJlZml4ZWQgb25lICovCi0JICBjY3UrKzsK LSNlbmRpZiAvKiBDS19TUEVFRCAqLwotCi0JaWYgKGE3ID09IG15Y3RscSkJCS8qIEFsd2F5cyBw cmVmaXggdGhlIGNvbnRyb2wgcHJlZml4ICovCi0JICB4eGNxID0gbXljdGxxOwotCi0JaWYgKChy cHRmbGcpICYmIChhNyA9PSBycHRxKSkJLyogSWYgaXQncyB0aGUgcmVwZWF0IHByZWZpeCwgKi8K LQkgIHh4Y3EgPSBteWN0bHE7CQkvKiBwcmVmaXggaXQgaWYgZG9pbmcgcmVwZWF0IGNvdW50cyAq LwotCi0JaWYgKChlYnFmbGcpICYmIChhNyA9PSBlYnEpKQkvKiBQcmVmaXggdGhlIDh0aC1iaXQg cHJlZml4ICovCi0JICB4eGNxID0gbXljdGxxOwkJLyogaWYgZG9pbmcgOHRoLWJpdCBwcmVmaXhl cyAqLwotCi0vKiBOb3cgY29uc3RydWN0IHRoZSBlbnRpcmUgc2VxdWVuY2UgKi8KLQotCWlmICh4 eGxzKSB7ICpkcCsrID0gbXljdGxxOyAqZHArKyA9IHh4bHM7IH0gLyogTG9ja2luZyBzaGlmdCAq LwotCW9kcDIgPSBkcDsJCQkJICAgIC8qIChTYXZlIHRoaXMgcGxhY2UpICovCi0JaWYgKHh4ZGwp IHsgKmRwKysgPSBteWN0bHE7ICpkcCsrID0geHhkbDsgfSAvKiBEYXRhbGluayBlc2NhcGUgKi8K LQlpZiAoeHhyYykgeyAqZHArKyA9IChDSEFSKSBycHRxOyAqZHArKyA9IHh4cmM7IH0gLyogUmVw ZWF0IGNvdW50ICovCi0JaWYgKHh4c3MpIHsgKmRwKysgPSAoQ0hBUikgZWJxOyB9ICAgICAgICAg ICAvKiBTaW5nbGUgc2hpZnQgKi8KLQlpZiAoeHhjcSkgeyAqZHArKyA9IG15Y3RscTsgfQkgICAg CSAgICAvKiBDb250cm9sIHByZWZpeCAqLwotCSpkcCsrID0gcnQ7CQkJLyogRmluYWxseSwgdGhl IGNoYXJhY3RlciBpdHNlbGYgKi8KLQotCWlmIChycHQgPT0gMSkgewkJCS8qIEV4YWN0bHkgdHdv IGNvcGllcz8gKi8KLQkgICAgcnB0ID0gMDsKLQkgICAgcDIgPSBkcDsJCQkvKiBTYXZlIHBsYWNl IHRlbXBvcmFyaWx5ICovCi0JICAgIGZvciAocDEgPSBvZHAyOyBwMSA8IHAyOyBwMSsrKSAvKiBD b3B5IHRoZSBvbGQgY2hhcnMgb3ZlciBhZ2FpbiAqLwotCSAgICAgICpkcCsrID0gKnAxOwotCSAg ICBpZiAoKHAyLWRhdGEpIDw9IGJ1Zm1heCkgb2RwID0gcDI7IC8qIENoZWNrIHBhY2tldCBib3Vu ZHMgKi8KLQkgICAgaWYgKChwMi1kYXRhKSA8IGJ1Zm1heCkgb2RwID0gcDI7IC8qIENoZWNrIHBh Y2tldCBib3VuZHMgKi8KLQl9Ci0JcnQgPSBybmV4dDsJCQkvKiBOZXh0IGNoYXJhY3RlciBpcyBu b3cgY3VycmVudC4gKi8KLQotLyogRG9uZSBlbmNvZGluZyB0aGUgY2hhcmFjdGVyLiAgTm93IHRh a2UgY2FyZSBvZiBwYWNrZXQgYnVmZmVyIG92ZXJmbG93LiAqLwotCi0JaWYgKChkcC1kYXRhKSA+ PSBidWZtYXgpIHsJLyogSWYgdG9vIGJpZywgc2F2ZSBzb21lIGZvciBuZXh0LiAqLwotCi0JICAg IGRlYnVnKEYwMDAsImdldHBrdCBFT1AiLCIiLHJ0KTsKLQotCSAgICBzaXplID0gKGRwLWRhdGEp OwkJLyogQ2FsY3VsYXRlIHRoZSBzaXplLiAqLwotCSAgICAqZHAgPSAnXDAnOwkJCS8qIE1hcmsg dGhlIGVuZC4gKi8KLQkgICAgaWYgKG1lbXN0cikgewkJLyogTm8gbGVmdG92ZXJzIGZvciBtZW1v cnkgc3RyaW5ncyAqLwotCQlpZiAocnQpCQkJLyogQ2hhciB3ZSBkaWRuJ3QgZW5jb2RlIHlldCAq LwotCQkgIG1lbXB0ci0tOwkJLyogKGZvciBlbmNzdHIoKSkgKi8KLQkJcmV0dXJuKHNpemUpOwot CSAgICB9Ci0JICAgIGlmICgoZHAtZGF0YSkgPiBidWZtYXgpIHsJLyogaWYgcGFja2V0IGlzIG92 ZXJmdWxsICovCi0JCS8qIGNvcHkgdGhlIHBhcnQgdGhhdCBkb2Vzbid0IGZpdCBpbnRvIHRoZSBs ZWZ0b3ZlciBidWZmZXIsICovCi0JCS8qIHRha2luZyBjYXJlIG5vdCB0byBzcGxpdCBhIHByZWZp eGVkIHNlcXVlbmNlLiAqLwotCQlpbnQgaTsKLQkJbmxlZnQgPSBkcCAtIG9kcDsKLQkJZm9yIChp ID0gMCwgcDEgPSBsZWZ0b3ZlciwgcDIgPSBvZHA7IGkgPCBubGVmdDsgaSsrKSB7Ci0JCSAgICAq cDErKyA9ICpwMisrOwotCQkgICAgaWYgKG1lbXN0cikgbWVtcHRyLS07IC8qIChmb3IgZW5jc3Ry KSAqLwotCQl9Ci0JCWRlYnVnKEYxMTEsImdldHBrdCBsZWZ0b3ZlciIsbGVmdG92ZXIsc2l6ZSk7 Ci0JCWRlYnVnKEYxMDEsImdldHBrdCBvc2l6ZSIsIiIsKG9kcC1kYXRhKSk7Ci0JCXNpemUgPSAo b2RwLWRhdGEpOwkvKiBSZXR1cm4gdHJ1bmNhdGVkIHBhY2tldC4gKi8KLQkJKm9kcCA9ICdcMCc7 CQkvKiBNYXJrIHRoZSBuZXcgZW5kICovCi0JICAgIH0KLQkgICAgdCA9IHJ0OwkJCS8qIFNhdmUg Zm9yIG5leHQgdGltZSAqLwotCSAgICByZXR1cm4oc2l6ZSk7Ci0JfQotICAgIH0JCQkJCS8qIE90 aGVyd2lzZSwga2VlcCBmaWxsaW5nLiAqLwotICAgIHNpemUgPSAoZHAtZGF0YSk7CQkJLyogRW5k IG9mIGZpbGUgKi8KLSAgICAqZHAgPSAnXDAnOwkJCQkvKiBNYXJrIHRoZSBlbmQgb2YgdGhlIGRh dGEuICovCi0gICAgZGVidWcoRjExMSwiZ2V0cGt0IGVvZi9lb3QiLGRhdGEsc2l6ZSk7IC8qIEZl bGwgdGhydSBiZWZvcmUgcGFja2V0IGZ1bGwsICovCi0gICAgcmV0dXJuKHNpemUpOwkJICAgICAv KiByZXR1cm4gcGFydGlhbGx5IGZpbGxlZCBsYXN0IHBhY2tldC4gKi8KLX0KLQotLyogIFQgSSBO IEkgVCAgLS0gIEluaXRpYWxpemUgYSB0cmFuc2FjdGlvbiAgKi8KLQotaW50IGVwa3RyY3ZkID0g MCwgZXBrdHNlbnQgPSAwOwotCi0vKgotICBDYWxsIHdpdGggMSB0byByZXNldCBldmVyeXRoaW5n IGJlZm9yZSBTL0kvWSBuZWdvdGlhdGlvbiwgb3IgMCB0bwotICByZXNldCBvbmx5IHRoZSB0aGlu Z3MgdGhhdCBhcmUgbm90IHNldCBpbiB0aGUgUy9JL1kgbmVnb3RpYXRpb24uCi0gIFJldHVybnMg LTEgb24gZmFpbHVyZSAoZS5nLiB0byBjcmVhdGUgcGFja2V0IGJ1ZmZlcnMpLCAwIG9uIHN1Y2Nl c3MuCi0qLwotaW50Ci10aW5pdChmbGFnKSBpbnQgZmxhZzsgewotICAgIGludCB4OwotI2lmZGVm IENLX1RJTUVSUwotICAgIGV4dGVybiBpbnQgcnR0ZmxnOwotI2VuZGlmIC8qIENLX1RJTUVSUyAq LwotICAgIGV4dGVybiBpbnQgcmN2dGltbzsKLSAgICBleHRlcm4gaW50IGZhdGFsaW87Ci0KLSAg ICBkZWJ1ZyhGMTAxLCJ0aW5pdCBmbGFnIiwiIixmbGFnKTsKLQotICAgICplcGt0bXNnID0gTlVM OwotICAgIGVwa3RyY3ZkID0gMDsKLSAgICBlcGt0c2VudCA9IDA7Ci0gICAgb2ZwZXJtcyA9ICIi OwotICAgIGRpcmFjdGl2ZSA9IDA7CQkJLyogRElSIC8gUkVNT1RFIERJUiBub3QgYWN0aXZlICov Ci0gICAgaW50ZXJydXB0ZWQgPSAwOwkJCS8qIE5vdCBpbnRlcnJ1cHRlZCAqLwotICAgIGZhdGFs aW8gPSAwOwkJCS8qIE5vIGZhdGFsIGkvbyBlcnJvciAqLwotICAgIGlmIChzZXJ2ZXIpIHsKLQlt b3ZpbmcgID0gMDsKLQlwaXBlc2VuZCA9IDA7IC8qIFRoaXMgdGFrZXMgY2FyZSBvZiBtdWx0aXBs ZSBHRVRzIHNlbnQgdG8gYSBzZXJ2ZXIuICovCi0gICAgfQotICAgIGJlc3RsZW4gPSAwOwkJCS8q IEZvciBwYWNrZXQgbGVuZ3RoIG9wdGltaXphdGlvbiAqLwotICAgIG1heHNlbmQgPSAwOwkJCS8q IEJpZ2dlc3QgZGF0YSBmaWVsZCB3ZSBjYW4gc2VuZCAqLwotI2lmZGVmIFNUUkVBTUlORwotICAg IHN0cmVhbW9rID0gMDsJCQkvKiBTdHJlYW1pbmcgbmVnb3RpYXRlZCAqLwotICAgIHN0cmVhbWlu ZyA9IDA7CQkJLyogU3RyZWFtaW5nIGJlaW5nIGRvbmUgbm93ICovCi0jZW5kaWYgLyogU1RSRUFN SU5HICovCi0KLSAgICBiaW5hcnkgPSBiX3NhdmU7CQkJLyogLi4uICovCi0gICAgZ25mX2JpbmFy eSA9IGJpbmFyeTsJCS8qIFBlci1maWxlIHRyYW5zZmVyIG1vZGUgKi8KLSAgICByZXRyYW5zID0g MDsJCQkvKiBQYWNrZXQgcmV0cmFuc21pc3Npb24gY291bnQgKi8KLSAgICBzbmR0eXAgPSAwOwkJ CQkvKiBObyBwcmV2aW91cyBwYWNrZXQgKi8KLSAgICB4ZmxnID0gMDsJCQkJLyogUmVzZXQgeC1w YWNrZXQgZmxhZyAqLwotICAgIG1lbXN0ciA9IDA7CQkJCS8qIFJlc2V0IG1lbW9yeS1zdHJpbmcg ZmxhZyAqLwotICAgIG1lbXB0ciA9IE5VTEw7CQkJLyogIGFuZCBidWZmZXIgcG9pbnRlciAqLwot ICAgIGZ1bmNzdHIgPSAwOwkJCS8qIFJlc2V0ICJyZWFkIGZyb20gZnVuY3Rpb24iIGZsYWcgKi8K LSAgICBmdW5jcHRyID0gTlVMTDsJCQkvKiAgYW5kIGZ1bmN0aW9uIHBvaW50ZXIgKi8KLSAgICBh dXRvcGFyID0gMDsJCQkvKiBBdXRvbWF0aWMgcGFyaXR5IGRldGVjdGlvbiBmbGFnICovCi0KLSAg ICAvKiBUaGlzIHN0dWZmIGlzIG9ubHkgZm9yIEJFRk9SRSBTL0kvWSBuZWdvdGlhdGlvbiwgbm90 IGFmdGVyICovCi0KLSAgICBpZiAoZmxhZykgewotCWlmIChiY3RmKSB7CQkgICAgICAvKiBGb3Jj ZSBCbG9jayBDaGVjayAzIG9uIGFsbCBwYWNrZXRzICovCi0JICAgIGJjdHUgPSBiY3RsID0gMzsJ CS8qIFNldCBibG9jayBjaGVjayB0eXBlIHRvIDMgKi8KLQl9IGVsc2UgewotCSAgICBiY3R1ID0g YmN0bCA9IDE7CQkvKiBSZXNldCBibG9jayBjaGVjayB0eXBlIHRvIDEgKi8KLQl9Ci0JbXlpbml0 WzBdID0gJ1wwJzsJCS8qIEhhdmVuJ3Qgc2VudCBpbml0IHN0cmluZyB5ZXQgKi8KLQlycWYgPSAt MTsJCQkvKiBSZXNldCA4dGgtYml0LXF1b3RlIHJlcXVlc3QgZmxhZyAqLwotCWVicSA9IE1ZRUJR OwkJCS8qIFJlc2V0IDh0aC1iaXQgcXVvdGluZyBzdHVmZiAqLwotCWVicWZsZyA9IDA7CQkJLyog OHRoIGJpdCBxdW90aW5nIG5vdCBlbmFibGVkICovCi0JZWJxc2VudCA9IDA7CQkJLyogTm8gOHRo LWJpdCBwcmVmaXggYmlkIHNlbnQgeWV0ICovCi0Jc3EgPSAnWSc7CQkJLyogOHRoLWJpdCBwcmVm aXggYmlkIEkgdXN1YWxseSBzZW5kICovCi0Jc3BzaXogPSBzcHNpenI7CQkJLyogSW5pdGlhbCBz ZW5kLXBhY2tldCBzaXplICovCi0JZGVidWcoRjEwMSwidGluaXQgc3BzaXoiLCIiLHNwc2l6KTsK LQl3c2xvdHMgPSAxOwkJCS8qIE9uZSB3aW5kb3cgc2xvdCAqLwotCXdzbG90biA9IDE7CQkJLyog Tm8gd2luZG93IG5lZ290aWF0ZWQgeWV0ICovCi0JanVzdG9uZSA9IDA7CQkJLyogKHNob3VsZCB0 aGlzIGJlIHplcm8nZCBoZXJlPykgKi8KLQl3aG9hcmV1WzBdID0gTlVMOwkJLyogUGFydG5lcidz IHN5c3RlbSB0eXBlICovCi0Jc3lzaW5kZXggPSAtMTsKLQl3ZWFyZWFsaWtlID0gMDsKLQl3aGF0 ID0gV19JTklUOwkJCS8qIERvaW5nIG5vdGhpbmcgc28gZmFyLi4uICovCi0gICAgfQotICAgIGZu Y252ID0gZl9zYXZlOwkJCS8qIEJhY2sgdG8gd2hhdCB1c2VyIGxhc3Qgc2FpZCAqLwotICAgIHBr dG51bSA9IDA7CQkJCS8qIEluaXRpYWwgcGFja2V0IG51bWJlciB0byBzZW5kICovCi0gICAgY3hz ZWVuID0gY3pzZWVuID0gZGlzY2FyZCA9IDA7CS8qIFJlc2V0IGludGVycnVwdCBmbGFncyAqLwot ICAgICpmaWxuYW0gPSAnXDAnOwkJCS8qIENsZWFyIGZpbGUgbmFtZSAqLwotICAgIHNwa3RsID0g MDsJCQkJLyogQW5kIGl0cyBsZW5ndGggKi8KLSAgICBuYWtzdGF0ZSA9IDA7CQkJLyogQXNzdW1l IHdlJ3JlIG5vdCBpbiBhIE5BSyBzdGF0ZSAqLwotICAgIG51bWVycnMgPSAwOwkJCS8qIFRyYW5z bWlzc2lvbiBlcnJvciBjb3VudGVyICovCi0gICAgaWRsZXRtbyA9IDA7CQkJLyogTm8gaWRsZSB0 aW1lb3V0IHlldCAqLwotICAgIGlmIChzZXJ2ZXIpIHsgCQkJLyogSWYgYWN0aW5nIGFzIHNlcnZl ciwgKi8KLQlpZiAoc3J2aWRsID4gMCkJCQkvKiBJZiBhbiBpZGxlIHRpbWVvdXQgaXMgZ2l2ZW4g Ki8KLQkgIHRpbWludCA9IHNydmlkbDsKLQllbHNlCi0JICB0aW1pbnQgPSBzcnZ0aW07CQkvKiB1 c2Ugc2VydmVyIHRpbWVvdXQgaW50ZXJ2YWwuICovCi0gICAgfSBlbHNlIHsJCQkJLyogT3RoZXJ3 aXNlICovCi0JdGltaW50ID0gY2hrdGltbyhydGltbyx0aW1lZik7CS8qIGFuZCB1c2UgbG9jYWwg dGltZW91dCB2YWx1ZSAqLwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJ0aW5pdCB0aW1pbnQiLCIi LHRpbWludCk7Ci0KLSNpZmRlZiBDS19USU1FUlMKLSAgICBpZiAocnR0ZmxnICYmIHRpbWludCA+ IDApCQkvKiBVc2luZyByb3VuZC10cmlwIHRpbWVycz8gKi8KLSAgICAgIHJ0dGluaXQoKTsKLSAg ICBlbHNlCi0jZW5kaWYgLyogQ0tfVElNRVJTICovCi0gICAgICByY3Z0aW1vID0gdGltaW50Owot Ci0gICAgd2lubG8gPSAwOwkJCQkvKiBQYWNrZXQgMCBpcyBhdCB3aW5kb3ctbG93ICovCi0gICAg ZGVidWcoRjEwMSwidGluaXQgd2lubG8iLCIiLHdpbmxvKTsKLSAgICB4ID0gbWtzYnVmKDEpOwkJ CS8qIE1ha2UgYSAxLXNsb3Qgc2VuZC1wYWNrZXQgYnVmZmVyICovCi0gICAgaWYgKHggPCAwKSBy ZXR1cm4oeCk7Ci0gICAgeCA9IGdldHNidWYoMCk7CQkJLyogQWxsb2NhdGUgZmlyc3Qgc2VuZC1i dWZmZXIuICovCi0gICAgZGVidWcoRjEwMSwidGluaXQgZ2V0c2J1ZiIsIiIseCk7Ci0gICAgaWYg KHggPCAwKSByZXR1cm4oeCk7Ci0gICAgZHVtcHNidWYoKTsKLSAgICB4ID0gbWtyYnVmKHdzbG90 cyk7CQkJLyogJiBhIDEtc2xvdCByZWNlaXZlLXBhY2tldCBidWZmZXIuICovCi0gICAgaWYgKHgg PCAwKSByZXR1cm4oeCk7Ci0gICAgbHNzdGF0ZSA9IDA7CQkJLyogSW5pdGlhbGl6ZSBsb2NraW5n IHNoaWZ0IHN0YXRlICovCi0gICAgaWYgKGF1dG9wYXRoKSB7CQkJLyogU0VUIFJFQ0VJVkUgUEFU SE5BTUVTIEFVVE8gZml4dXAgKi8KLQlmbnJwYXRoID0gUEFUSF9BVVRPOwotCWF1dG9wYXRoID0g MDsKLSAgICB9Ci0gICAgcmV0dXJuKDApOwotfQotCi1WT0lECi1wa3Rpbml0KCkgewkJCQkvKiBJ bml0aWFsaXplIHBhY2tldCBzZXF1ZW5jZSAqLwotICAgIHBrdG51bSA9IDA7CQkJCS8qIG51bWJl ciAmIHdpbmRvdyBsb3cuICovCi0gICAgd2lubG8gPSAwOwotICAgIGRlYnVnKEYxMDEsInBrdGlu aXQgd2lubG8iLCIiLHdpbmxvKTsKLX0KLQotLyogIFIgSSBOIEkgVCAgLS0gIFJlc3BvbmQgdG8g UyBvciBJIHBhY2tldCAgKi8KLQotVk9JRAotcmluaXQoZCkgQ0hBUiAqZDsgewotICAgIGNoYXIg KnRwID0gTlVMTDsKLSAgICB6dGltZSgmdHApOwotICAgIHRsb2coRjExMCwiVHJhbnNhY3Rpb24g YmVnaW5zIix0cCwwTCk7IC8qIE1ha2UgdHJhbnNhY3Rpb24gbG9nIGVudHJ5ICovCi0gICAgdGxv ZyhGMTEwLCJHbG9iYWwgZmlsZSBtb2RlOiIsIGJpbmFyeSA/ICJiaW5hcnkiIDogInRleHQiLCAw TCk7Ci0gICAgdGxvZyhGMTEwLCJDb2xsaXNpb24gYWN0aW9uOiIsIGZuY25hbVtmbmNhY3RdLDAp OwotICAgIHRsb2coRjEwMCwiIiwiIiwwKTsKLSAgICBkZWJ1ZyhGMTAxLCJyaW5pdCBmbmNhY3Qi LCIiLGZuY2FjdCk7Ci0gICAgZmlsY250ID0gZmlscmVqID0gMDsJCS8qIEluaXQgZmlsZSBjb3Vu dGVycyAqLwotICAgIHNwYXIoZCk7Ci0gICAgYWNrMShycGFyKCkpOwotI2lmZGVmIGRhdGFnZW5l cmFsCi0gICAgaWYgKChsb2NhbCkgJiYgKCFxdWlldCkpICAgICAgICAgICAgLyogT25seSBkbyB0 aGlzIGlmIGxvY2FsICYgbm90IHF1aWV0ICovCi0gICAgICAgIGNvbnN0YV9tdCgpOyAgICAgICAg ICAgICAgICAgICAgLyogU3RhcnQgdGhlIGFzeW5jaCByZWFkIHRhc2sgKi8KLSNlbmRpZiAvKiBk YXRhZ2VuZXJhbCAqLwotfQotCi0KLS8qICBSIEUgUyBFIFQgQyAgLS0gIFJlc2V0IHBlci10cmFu c2FjdGlvbiBjaGFyYWN0ZXIgY291bnRlcnMgKi8KLQotVk9JRAotcmVzZXRjKCkgewotICAgIHJw dG4gPSAwOwkJCQkvKiBSZXBlYXQgY291bnRzICovCi0gICAgZnNlY3MgPSBmbGNpID0gZmxjbyA9 IChDS19PRkZfVCkwOwkvKiBGaWxlIGNoYXJzIGluIGFuZCBvdXQgKi8KLSNpZmRlZiBHRlRJTUVS Ci0gICAgZnBmc2VjcyA9IDAuMDsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0gICAgdGZjID0gdGxj aSA9IHRsY28gPSAoQ0tfT0ZGX1QpMDsJLyogVG90YWwgZmlsZSwgbGluZSBjaGFycyBpbiAmIG91 dCAqLwotICAgIGNjdSA9IGNjcCA9IDBMOwkJCS8qIENvbnRyb2wtY2hhciBzdGF0aXN0aWNzICov Ci0jaWZkZWYgQ09NTUVOVAotICAgIGZzaXplID0gKENLX09GRl9UKS0xOwkJLyogRmlsZSBzaXpl ICovCi0jZWxzZQotICAgIGlmICghKHdoYXQgJiBXX1NFTkQpKQotICAgICAgZnNpemUgPSAoQ0tf T0ZGX1QpLTE7Ci0gICAgZGVidWcoRjEwMSwicmVzZXRjIGZzaXplIiwiIixmc2l6ZSk7Ci0jZW5k aWYgLyogQ09NTUVOVCAqLwotICAgIHRpbWVvdXRzID0gcmV0cmFucyA9IDA7CQkvKiBUaW1lb3V0 cywgcmV0cmFuc21pc3Npb25zICovCi0gICAgc3BhY2tldHMgPSBycGFja2V0cyA9IDA7CQkvKiBQ YWNrZXQgY291bnRzIG91dCAmIGluICovCi0gICAgY3J1bmNoZWQgPSAwOwkJCS8qIENydW5jaGVk IHBhY2tldHMgKi8KLSAgICB3Y3VyID0gMDsJCQkJLyogQ3VycmVudCB3aW5kb3cgc2l6ZSAqLwot ICAgIHdtYXggPSAwOwkJCQkvKiBNYXhpbXVtIHdpbmRvdyBzaXplIHVzZWQgKi8KLSAgICBwZWFr Y3BzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBQZWFrIGNoYXJzIHBlciBzZWNvbmQg Ki8KLX0KLQotLyogIFMgSSBOIEkgVCAgLS0gIEdldCAmIHZlcmlmeSBmaXJzdCBmaWxlIG5hbWUs IHRoZW4gc2VuZCBTZW5kLUluaXQgcGFja2V0ICovCi0vKgotIFJldHVybnM6Ci0gICAxIGlmIHNl bmQgb3BlcmF0aW9uIGJlZ2lucyBzdWNjZXNzZnVsbHkKLSAgIDAgaWYgc2VuZCBvcGVyYXRpb24g ZmFpbHMKLSovCi0jaWZkZWYgRFlOQU1JQwotY2hhciAqY21hcmdidWYgPSBOVUxMOwotI2Vsc2UK LWNoYXIgY21hcmdidWZbQ0tNQVhQQVRIKzFdOwotI2VuZGlmIC8qIERZTkFNSUMgKi8KLWNoYXIg KmNtYXJncFsyXTsKLQotVk9JRAotZm5saXN0KCkgewotICAgIGlmICghY2FsaWJyYXRlKQotICAg ICAgc25kc3JjID0gKG5maWxzIDwgMCkgPyAtMSA6IG5maWxzOyAvKiBTb3VyY2UgZm9yIGZpbGVu YW1lcyAqLwotI2lmZGVmIERZTkFNSUMKLSAgICBpZiAoIWNtYXJnYnVmICYmICEoY21hcmdidWYg PSBtYWxsb2MoQ0tNQVhQQVRIKzEpKSkKLSAgICAgIGZhdGFsKCJmbmxpc3Q6IG5vIG1lbW9yeSBm b3IgY21hcmdidWYiKTsKLSNlbmRpZiAvKiBEWU5BTUlDICovCi0gICAgY21hcmdidWZbMF0gPSBO VUw7CQkJLyogSW5pdGlhbGl6ZSBuYW1lIGJ1ZmZlciAqLwotCi0gICAgZGVidWcoRjEwMSwiZm5s aXN0IG5maWxzIiwiIixuZmlscyk7Ci0gICAgZGVidWcoRjExMCwiZm5saXN0IGNtYXJnIixjbWFy ZywwKTsKLSAgICBkZWJ1ZyhGMTEwLCJmbmxpc3QgY21hcmcyIixjbWFyZzIsMCk7Ci0gICAgaWYg KCFjbWFyZzIpIGNtYXJnMiA9ICIiOwotICAgIGlmIChuZmlscyA9PSAwKSB7CQkJLyogU2VuZGlu ZyBmcm9tIHN0ZGluIG9yIG1lbW9yeS4gKi8KLQlpZiAoKGNtYXJnMiAhPSBOVUxMKSAmJiAoKmNt YXJnMikpIHsKLQkgICAgY21hcmcgPSBjbWFyZzI7CQkvKiBJZiBGIHBhY2tldCwgImFzLW5hbWUi IGlzIHVzZWQgKi8KLQkgICAgY21hcmcyID0gIiI7CQkvKiBpZiBwcm92aWRlZCAqLwotCX0gZWxz ZQotCSAgY21hcmcgPSAic3RkaW4iOwkJLyogb3RoZXJ3aXNlIGp1c3QgdXNlICJzdGRpbiIgKi8K LQlja3N0cm5jcHkoY21hcmdidWYsY21hcmcsQ0tNQVhQQVRIKzEpOwotCWNtYXJncFswXSA9IGNt YXJnYnVmOwotCWNtYXJncFsxXSA9ICIiOwotCWNtbGlzdCA9IGNtYXJncDsKLQluZmlscyA9IDE7 Ci0gICAgfQotfQotCi1pbnQKLXNpbml0KCkgewotICAgIGludCB4OwkJCQkvKiBXb3JrZXIgaW50 ICovCi0gICAgY2hhciAqdHAsICp4cCwgKm07CQkJLyogV29ya2VyIHN0cmluZyBwb2ludGVycyAq LwotCi0gICAgZmlsY250ID0gZmlscmVqID0gMDsJCS8qIEluaXRpYWxpemUgZmlsZSBjb3VudGVy cyAqLwotCi0gICAgZm5saXN0KCk7Ci0KLSAgICB4cCA9ICIiOwotICAgIGlmIChuZmlscyA8IDAp IHsKLSNpZmRlZiBQSVBFU0VORAotCWlmICh1c2VwaXBlcyAmJiBwcm90b2NvbCA9PSBQUk9UT19L ICYmICpjbWFyZyA9PSAnIScpIHsKLQkgICAgcGlwZXNlbmQgPSAxOwotCSAgICBjbWFyZysrOwot CX0KLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotCXhwID0gY21hcmc7Ci0gICAgfSBlbHNlIHsKLSNp Zm5kZWYgTk9NU0VORAotCWlmIChhZGRsaXN0KQotCSAgeHAgPSBmaWxlaGVhZC0+ZmxfbmFtZTsK LQllbHNlCi0jZW5kaWYgLyogTk9NU0VORCAqLwotCSAgaWYgKGZpbGVmaWxlKQotCSAgICB4cCA9 IGZpbGVmaWxlOwotCSAgZWxzZSBpZiAoY2FsaWJyYXRlKQotCSAgICB4cCA9ICJDYWxpYnJhdGlv biI7Ci0JICBlbHNlCi0JICAgIHhwID0gKmNtbGlzdDsKLSAgICB9Ci0gICAgZGVidWcoRjExMCwi c2luaXQgeHAiLHhwLDApOwotICAgIHggPSBnbmZpbGUoKTsJCQkvKiBHZXQgZmlyc3QgZmlsZW5h bWUuICovCi0gICAgZGVidWcoRjExMSwic2luaXQgZ25maWxlIixja2l0b2EoZ25mZXJyb3IpLHgp OwotICAgIGlmICh4ID09IDApIHggPSBnbmZlcnJvcjsJCS8qIElmIG5vbmUsIGdldCBlcnJvciBy ZWFzb24gKi8KLSAgICBtID0gTlVMTDsJCQkJLyogRXJyb3IgbWVzc2FnZSBwb2ludGVyICovCi0g ICAgZGVidWcoRjEwMSwic2luaXQgZ25maWwiLCIiLHgpOwotICAgIHN3aXRjaCAoeCkgewotICAg ICAgY2FzZSAtNjogbSA9ICJObyBmaWxlcyBtZWV0IHNlbGVjdGlvbiBjcml0ZXJpYSI7IGJyZWFr OwotICAgICAgY2FzZSAtNTogbSA9ICJUb28gbWFueSBmaWxlcyBtYXRjaCB3aWxkY2FyZCI7IGJy ZWFrOwotICAgICAgY2FzZSAtNDogbSA9ICJDYW5jZWxsZWQiOyBicmVhazsKLSAgICAgIGNhc2Ug LTM6IG0gPSAiUmVhZCBhY2Nlc3MgZGVuaWVkIjsgYnJlYWs7Ci0gICAgICBjYXNlIC0yOiBtID0g IkZpbGUgaXMgbm90IHJlYWRhYmxlIjsgYnJlYWs7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgY2Fz ZSAtMTogbSA9IGlzd2lsZChmaWxuYW0pID8gIk5vIGZpbGVzIG1hdGNoIiA6ICJGaWxlIG5vdCBm b3VuZCI7Ci0JYnJlYWs7Ci0gICAgICBjYXNlICAwOiBtID0gIk5vIGZpbGVzcGVjIGdpdmVuISI7 IGJyZWFrOwotI2Vsc2UKLSAgICAgIGNhc2UgIDA6Ci0gICAgICBjYXNlIC0xOiBtID0gaXN3aWxk KGZpbG5hbSkgPyAiTm8gZmlsZXMgbWF0Y2giIDogIkZpbGUgbm90IGZvdW5kIjsKLQlicmVhazsK LSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICBkZWZhdWx0OgotCWJyZWFrOwotICAgIH0KLSAg ICBkZWJ1ZyhGMTAxLCJzaW5pdCBuZmlscyIsIiIsbmZpbHMpOwotICAgIGRlYnVnKEYxMTAsInNp bml0IGZpbG5hbSIsZmlsbmFtLDApOwotICAgIGlmICh4IDwgMSkgewkJCS8qIERpZG4ndCBnZXQg YSBmaWxlLiAqLwotCWRlYnVnKEYxMTEsInNpbml0IG1zZyIsbSx4KTsKLQlpZiAoc2VydmVyKSB7 CQkJLyogRG9pbmcgR0VUIGNvbW1hbmQgKi8KLQkgICAgZXJycGt0KChDSEFSICopbSk7CQkvKiBz byBzZW5kIEVycm9yIHBhY2tldC4gKi8KLQl9IGVsc2UgaWYgKCFsb2NhbCkgeyAJCS8qIERvaW5n IFNFTkQgY29tbWFuZCAqLwotCSAgICBpbnRlcnJ1cHRlZCA9IDE7CQkvKiAoVG8gc3VwcHJlc3Mg aGludCkgKi8KLQkgICAgcHJpbnRmKCI/JXNcclxuIixtKTsKLQl9IGVsc2UgewotCSAgICB4eHNj cmVlbihTQ1JfRU0sMCwwbCxtKTsJLyogc28gcHJpbnQgbWVzc2FnZS4gKi8KLQl9Ci0JdGxvZyhG MTEwLHhwLG0sMEwpOwkJLyogTWFrZSB0cmFuc2FjdGlvbiBsb2cgZW50cnkuICovCi0JZnJlZXJi dWYocnNlcXRibFswXSk7CQkvKiBGcmVlIHRoZSBidWZmZXIgdGhlIEdFVCBjYW1lIGluLiAqLwot CXJldHVybigwKTsJCQkvKiBSZXR1cm4gZmFpbHVyZSBjb2RlICovCi0gICAgfQotICAgIGlmICgh bG9jYWwgJiYgIXNlcnZlciAmJiBja2RlbGF5ID4gMCkgLyogT1MtOSBzbGVlcCgwKSA9PSBpbmZp bml0ZSAqLwotICAgICAgc2xlZXAoY2tkZWxheSk7CQkJLyogRGVsYXkgaWYgcmVxdWVzdGVkICov Ci0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICBpZiAoKGxvY2FsKSAmJiAoIXF1aWV0KSkgICAgICAg ICAgICAvKiBPbmx5IGRvIHRoaXMgaWYgbG9jYWwgJiBub3QgcXVpZXQgKi8KLSAgICAgIGNvbnN0 YV9tdCgpOwkJCS8qIFN0YXJ0IHRoZSBhc3luYyByZWFkIHRhc2sgKi8KLSNlbmRpZiAvKiBkYXRh Z2VuZXJhbCAqLwotICAgIGZyZWVyYnVmKHJzZXF0YmxbMF0pOwkJLyogRnJlZSB0aGUgYnVmZmVy IHRoZSBHRVQgY2FtZSBpbi4gKi8KLSAgICBzaXBrdCgnUycpOwkJCQkvKiBTZW5kIHRoZSBTZW5k LUluaXQgcGFja2V0LiAqLwotICAgIHp0aW1lKCZ0cCk7CQkJCS8qIEdldCBjdXJyZW50IGRhdGUv dGltZSAqLwotICAgIHRsb2coRjExMCwiVHJhbnNhY3Rpb24gYmVnaW5zIix0cCwwTCk7IC8qIE1h a2UgdHJhbnNhY3Rpb24gbG9nIGVudHJ5ICovCi0gICAgdGxvZyhGMTEwLCJHbG9iYWwgZmlsZSBt b2RlOiIsIGJpbmFyeSA/ICJiaW5hcnkiIDogInRleHQiLCAwTCk7Ci0gICAgdGxvZyhGMTAwLCIi LCIiLDApOwotICAgIGRlYnVnKEYxMTEsInNpbml0IG9rIixmaWxuYW0sMCk7Ci0gICAgcmV0dXJu KDEpOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotc2lwa3QoY2hhciBjKQkJCQkvKiBTZW5k IFMgb3IgSSBwYWNrZXQuICovCi0jZWxzZQotc2lwa3QoYykgY2hhciBjOwotI2VuZGlmCi0vKiBz aXBrdCAqLyB7Ci0gICAgQ0hBUiAqcnA7IGludCBrLCB4OwotICAgIGV4dGVybiBpbnQgc2VuZGlw a3RzOwotICAgIGRlYnVnKEYxMDEsInNpcGt0IHBrdG51bSIsIiIscGt0bnVtKTsgLyogKGJldHRl ciBiZSAwLi4uKSAqLwotICAgIHR0Zmx1aSgpOwkJCQkvKiBGbHVzaCBwZW5kaW5nIGlucHV0LiAq LwotICAgIC8qCi0gICAgICBJZiB0aGlzIGlzIGFuIEkgcGFja2V0IGFuZCBTRVQgU0VORCBJLVBB Q0tFVFMgaXMgT0ZGLCBkb24ndCBzZW5kIGl0OwotICAgICAgc2V0IHNzdGF0ZSB0byAnWScgd2hp Y2ggbWFrZXMgdGhlIG5leHQgaW5wdXQoKSBjYWxsIHJldHVybiAnWScgYXMgaWYgd2UKLSAgICAg IGhhZCByZWNlaXZlZCBhbiBBQ0sgdG8gdGhlIEkgcGFja2V0IHdlIGRpZG4ndCBzZW5kLiAgVGhp cyBpcyB0byB3b3JrCi0gICAgICBhcm91bmQgYnVnZ3kgS2VybWl0IHNlcnZlcnMgdGhhdCBjYW4n dCBoYW5kbGUgSSBwYWNrZXRzLgotICAgICovCi0gICAgaWYgKChzZW5kaXBrdHMgPT0gMCkgJiYg KGMgPT0gJ0knKSkgeyAvKiBJIHBhY2tldCBidXQgZG9uJ3Qgc2VuZCBJIHBrdHM/ICovCi0Jc3N0 YXRlID0gJ1knOwkJCSAgLyogWWlrZXMhICovCi0JcmV0dXJuKDApOwkJCSAgLyogKHNlZSBpbnB1 dCgpLi4pKi8KLSAgICB9Ci0gICAgayA9IHNzZXF0YmxbcGt0bnVtXTsJCS8qIEZpbmQgc2xvdCBm b3IgdGhpcyBwYWNrZXQgKi8KLSAgICBpZiAoayA8IDApIHsJCQkvKiBObyBzbG90PyAqLwotCWsg PSBnZXRzYnVmKHdpbmxvID0gcGt0bnVtKTsJLyogTWFrZSBvbmUuICovCi0JZGVidWcoRjEwMSwi c2lwa3QgZ2V0c2J1ZiIsIiIsayk7Ci0gICAgfQotICAgIHJwID0gcnBhcigpOwkJCS8qIEdldCBw cm90b2NvbCBwYXJhbWV0ZXJzLiAqLwotICAgIGlmICghcnApIHJwID0gKENIQVIgKikiIjsKLSAg ICB4ID0gc3BhY2soYyxwa3RudW0sKGludClzdHJsZW4oKGNoYXIgKilycCkscnApOyAvKiBTZW5k IHRoZW0uICovCi0gICAgcmV0dXJuKHgpOwotfQotCi0vKiAgWCBTIEkgTiBJIFQgIC0tICBSZXRy YW5zbWl0IFMtcGFja2V0ICAqLwotLyoKLSAgRm9yIHVzZSBpbiB0aGUgR0VULVNFTkQgc2VxdWVu Y2UsIHdoZW4gd2Ugc3RhcnQgdG8gc2VuZCwgYnV0IHJlY2VpdmUgYW5vdGhlcgotICBjb3B5IG9m IHRoZSBHRVQgY29tbWFuZCBiZWNhdXNlIHRoZSByZWNlaXZlciBkaWRuJ3QgZ2V0IG91ciBTIHBh Y2tldC4KLSAgVGhpcyByZXRyYW5zbWl0cyB0aGUgUyBwYWNrZXQgYW5kIGZyZWVzIHRoZSByZWNl aXZlIGJ1ZmZlciBmb3IgdGhlIEFDSy4KLSAgVGhpcyBzcGVjaWFsIGNhc2UgaXMgbmVjZXNzYXJ5 IGJlY2F1c2UgcGFja2V0IG51bWJlciB6ZXJvIGlzIGJlaW5nIHJlLXVzZWQuCi0qLwotVk9JRAot eHNpbml0KCkgewotICAgIGludCBrOwotICAgIGsgPSByc2VxdGJsWzBdOwotICAgIGRlYnVnKEYx MDEsInhzaW5pdCBrIiwiIixrKTsKLSAgICBpZiAoayA+IC0xKQotICAgIGZyZWVyYnVmKGspOwot ICAgIHJlc2VuZCgwKTsKLX0KLQotLyogIFIgQyBWIEYgSSBMIC0tIFJlY2VpdmUgYSBmaWxlICAq LwotCi0vKgotICBJbmNvbWluZyBmaWxlbmFtZSBpcyBpbiBkYXRhIGZpZWxkIG9mIEYgcGFja2V0 LgotICBUaGlzIGZ1bmN0aW9uIGRlY29kZXMgaXQgaW50byB0aGUgc3J2Y21kIGJ1ZmZlciwgc3Vi c3RpdHV0aW5nIGFuCi0gIGFsdGVybmF0ZSAiYXMtbmFtZSIsIGlmIG9uZSB3YXMgZ2l2ZW4uCi0g IFRoZW4gaXQgZG9lcyBhbnkgcmVxdWVzdGVkIHRyYW5zZm9ybWF0aW9ucyAobGlrZSBjb252ZXJ0 aW5nIHRvCi0gIGxvd2VyY2FzZSksIGFuZCBmaW5hbGx5IGlmIGEgZmlsZSBvZiB0aGUgc2FtZSBu YW1lIGFscmVhZHkgZXhpc3RzLAotICB0YWtlcyB0aGUgZGVzaXJlZCBjb2xsaXNpb24gYWN0aW9u LgotICBSZXR1cm5zOgotICAgIDEgb24gc3VjY2Vzcy4KLSAgICAwIG9uIGZhaWx1cmUuCi0qLwot Y2hhciBvZm4xW0NLTUFYUEFUSCs0XTsJCQkvKiBCdWZmZXIgZm9yIG91dHB1dCBmaWxlIG5hbWUg Ki8KLWNoYXIgKiBvZm4yOwkJCQkvKiBQb2ludGVyIHRvIGJhY2t1cCBmaWxlIG5hbWUgKi8KLWlu dCBvZm4xeDsJCQkJLyogRmxhZyBvdXRwdXQgZmlsZSBhbHJlYWR5IGV4aXN0cyAqLwotQ0tfT0ZG X1Qgb2ZuMWxlbiA9IChDS19PRkZfVCkwOwotaW50IG9wbmVycjsJCQkJLyogRmxhZyBmb3Igb3Bl biBlcnJvciAqLwotCi1pbnQJCQkJCS8qIFJldHVybnMgc3VjY2VzcyA/IDEgOiAwICovCi1yY3Zm aWwobikgY2hhciAqbjsgewotICAgIGV4dGVybiBpbnQgZW5fY3dkOwotICAgIGludCBpLCBza2lw dGhpczsKLSAgICBjaGFyICogbjI7Ci0gICAgY2hhciAqIGRpc3BvOwotI2lmZGVmIE9TMk9OTFkK LSAgICBjaGFyICp6cywgKmxvbmduYW1lLCAqbmV3bG9uZ25hbWUsICpwbjsgLyogT1MvMiBsb25n IG5hbWUgaXRlbXMgKi8KLSNlbmRpZiAvKiBPUzJPTkxZICovCi0jaWZkZWYgRFRJTERFCi0gICAg Y2hhciAqZGlycDsKLSNlbmRpZiAvKiBEVElMREUgKi8KLSAgICBpbnQgZGlyZmxnLCB4LCB5Owot I2lmZGVmIFBJUEVTRU5ECi0gICAgZXh0ZXJuIGNoYXIgKiByY3ZmaWx0ZXI7Ci0jZW5kaWYgLyog UElQRVNFTkQgKi8KLSNpZmRlZiBDQUxJQlJBVEUKLSAgICBleHRlcm4gaW50IGRlc3Q7Ci0gICAg Q0tfT0ZGX1QgY3NhdmU7Ci0gICAgY3NhdmUgPSBjYWxpYnJhdGU7CQkJLyogU28gd2UgY2FuIGRl Y29kZSBmaWxlbmFtZSAqLwotICAgIGNhbGlicmF0ZSA9IChDS19PRkZfVCkwOwotI2VuZGlmIC8q IENBTElCUkFURSAqLwotCi0gICAgb2ZwZXJtcyA9ICIiOwkJCS8qIFJlc2V0IG9sZC1maWxlIHBl cm1pc3Npb25zICovCi0gICAgb3BuZXJyID0gMDsJCQkJLyogTm8gb3BlbiBlcnJvciAoeWV0KSAq LwotICAgIG9mbjIgPSBOVUxMOwkJCS8qIE5vIG5ldyBuYW1lICh5ZXQpICovCi0gICAgbHNzdGF0 ZSA9IDA7CQkJLyogQ2FuY2VsIGxvY2tpbmctc2hpZnQgc3RhdGUgKi8KLSAgICBzcnZwdHIgPSBz cnZjbWQ7CQkJLyogRGVjb2RlIGZpbGUgbmFtZSBmcm9tIHBhY2tldC4gKi8KLQotI2lmZGVmIFVO SUNPREUKLSAgICB4cG5ieXRlKC0xLDAsMCxOVUxMKTsJCS8qIFJlc2V0IFVDUy0yIGJ5dGUgY291 bnRlci4gKi8KLSNlbmRpZiAvKiBVTklDT0RFICovCi0KLSAgICBkZWJ1ZyhGMTEwLCJyY3ZmaWwg cmRhdGFwIixyZGF0YXAsMCk7Ci0gICAgZGVjb2RlKHJkYXRhcCxwdXRzcnYsMCk7CQkvKiBEb24n dCB4bGF0ZSBjaGFyc2V0cy4gKi8KLSNpZmRlZiBDQUxJQlJBVEUKLSAgICBjYWxpYnJhdGUgPSBj c2F2ZTsKLSAgICBpZiAoZGVzdCA9PSBERVNUX04pIHsKLQljYWxpYnJhdGUgPSAxOwotCWNtYXJn MiA9ICJDQUxJQlJBVEUiOwotICAgIH0KLSNlbmRpZiAvKiBDQUxJQlJBVEUgKi8KLSAgICBpZiAo KnNydmNtZCA9PSAnXDAnKQkJLyogV2F0Y2ggb3V0IGZvciBudWxsIEYgcGFja2V0LiAqLwotICAg ICAgY2tzdHJuY3B5KChjaGFyICopc3J2Y21kLCJOT05BTUUiLHNydmNtZGxlbik7Ci0gICAgbWFr ZXN0cigmcHJyZnNwZWMsKGNoYXIgKilzcnZjbWQpOwkvKiBOZXcgcHJlbGltaW5hcnkgZmlsZW5h bWUgKi8KLSNpZmRlZiBEVElMREUKLSAgICBpZiAoKnNydmNtZCA9PSAnficpIHsKLQlkaXJwID0g dGlsZGVfZXhwYW5kKChjaGFyICopc3J2Y21kKTsgLyogRXhwYW5kIHRpbGRlLCBpZiBhbnkuICov Ci0JaWYgKCpkaXJwICE9ICdcMCcpCi0JICBja3N0cm5jcHkoKGNoYXIgKilzcnZjbWQsZGlycCxz cnZjbWRsZW4pOwotICAgIH0KLSNlbHNlCi0jaWZkZWYgT1MyCi0gICAgaWYgKGlzYWxwaGEoKnNy dmNtZCkgJiYgc3J2Y21kWzFdID09ICc6JyAmJiBzcnZjbWRbMl0gPT0gJ1wwJykKLSAgICAgIGNr c3RybmNhdCgoY2hhciAqKXNydmNtZCwiTk9OQU1FIixzcnZjbWRsZW4pOwotI2VuZGlmIC8qIE9T MiAqLwotI2VuZGlmIC8qIERUSUxERSAqLwotCi0jaWZuZGVmIE5PSUNQCi0jaWZuZGVmIE5PU1BM Ci0vKiBGaWxlIGRpYWxvZyB3aGVuIGRvd25sb2FkaW5nLi4uICAqLwotICAgIGlmICgKLSNpZmRl ZiBDS19BUEMKLQkoYXBjYWN0aXZlID09IEFQQ19MT0NBTCAmJiBhZGxfYXNrKSB8fCAvKiBBdXRv ZG93bmxvYWQgd2l0aCBBU0sgKi8KLSNlbmRpZiAvKiBDS19BUEMgKi8KLQkoY2xjbWRzICYmIGhh dmV1cmwpCQkvKiBPciAia2VybWl0OiIgb3IgImlrc2Q6IiBVUkwgKi8KLQkpIHsKLQlpbnQgeDsK LQljaGFyIGZuYnVmW0NLTUFYUEFUSCsxXTsJLyogUmVzdWx0IGJ1ZmZlciAqLwotCWNoYXIgKiBw cmVmYWNlOwotCi0JaWYgKGNsY21kcyAmJiBoYXZldXJsKQotCSAgcHJlZmFjZSA9ICJcclxuSW5j b21pbmcgZmlsZSBmcm9tIEtlcm1pdCBzZXJ2ZXIuLi5cclxuXAotUGxlYXNlIGNvbmZpcm0gb3V0 cHV0IGZpbGUgc3BlY2lmaWNhdGlvbiBvciBzdXBwbHkgYW4gYWx0ZXJuYXRpdmU6IjsKLQllbHNl Ci0JICBwcmVmYWNlID0gIlxyXG5JbmNvbWluZyBmaWxlIGZyb20gcmVtb3RlIEtlcm1pdC4uLlxy XG5cCi1QbGVhc2UgY29uZmlybSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uIG9yIHN1cHBseSBh biBhbHRlcm5hdGl2ZToiOwotCi0JeCA9IHVxX2ZpbGUocHJlZmFjZSwJCS8qIFByZWZhY2UgKi8K LQkJICAgIE5VTEwsCQkvKiBQcm9tcHQgKGxldCB1cV9maWxlKCkgYnVpbHQgaXQpICovCi0JCSAg ICAzLAkJCS8qIE91dHB1dCBmaWxlICovCi0JCSAgICBOVUxMLAkJLyogSGVscCB0ZXh0ICovCi0J CSAgICAoY2hhciAqKXNydmNtZCwJLyogRGVmYXVsdCAqLwotCQkgICAgZm5idWYsCQkvKiBSZXN1 bHQgYnVmZmVyICovCi0JCSAgICBDS01BWFBBVEgrMQkJLyogU2l6ZSBvZiByZXN1bHQgYnVmZmVy ICovCi0JCSAgICApOwotCWlmICh4IDwgMSkgewkJCS8qIFJlZnVzZWQgKi8KLQkgICAgcmZfZXJy ID0gIlJlZnVzZWQgYnkgdXNlciI7Ci0JICAgIHJldHVybigwKTsKLQl9Ci0JY2tzdHJuY3B5KChj aGFyICopc3J2Y21kLGZuYnVmLENLTUFYUEFUSCsxKTsKLQlpZiAoaXNhYnNvbHV0ZSgoY2hhciAq KXNydmNtZCkpIHsgLyogVXNlciBnYXZlIGFuIGFic29sdXRlIHBhdGggKi8KLQkgICAgZ19mbnJw YXRoID0gZm5ycGF0aDsJLyogU2F2ZSBjdXJyZW50IFJFQ0VJVkUgUEFUSE5BTUVTICovCi0JICAg IGZucnBhdGggPSBQQVRIX0FCUzsJCS8qIHN3aXRjaCB0byBBQlNPTFVURSAqLwotCX0KLSAgICB9 Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSNlbmRpZiAvKiBOT0lDUCAqLwotCi0gICAgaWYgKCFFTkFC TEVEKGVuX2N3ZCkpIHsJCS8qIENEIGlzIGRpc2FibGVkICovCi0JenN0cmlwKChjaGFyICopKHNy dmNtZCsyKSwmbjIpOyAvKiBhbmQgdGhleSBpbmNsdWRlZCBhIHBhdGhuYW1lLCAqLwotCWlmIChz dHJjbXAoKGNoYXIgKikoc3J2Y21kKzIpLG4yKSkgeyAvKiBzbyByZWZ1c2UuICovCi0JICAgIHJm X2VyciA9ICJBY2Nlc3MgZGVuaWVkIjsKLQkgICAgcmV0dXJuKDApOwotCX0KLSAgICB9Ci0jaWZk ZWYgQ09NTUVOVAotICAgIC8qIFdyb25nIHBsYWNlIGZvciB0aGlzIC0tIGhhbmRsZSBjbWFyZzIg Zmlyc3QgLS0gc2VlIGJlbG93Li4uICAqLwotCi0gICAgaWYgKHpjaGtvKChjaGFyICopc3J2Y21k KSA8IDApIHsJLyogUHJlY2hlY2sgZm9yIHdyaXRlIGFjY2VzcyAqLwotCWRlYnVnKEYxMTAsInJj dmZpbCBhY2Nlc3MgZGVuaWVkIixzcnZjbWQsMCk7Ci0JcmZfZXJyID0gIldyaXRlIGFjY2VzcyBk ZW5pZWQiOwotCWRpc2NhcmQgPSBvcG5lcnIgPSAxOwotCXJldHVybigwKTsKLSAgICB9Ci0gICAg eHhzY3JlZW4oU0NSX0ZOLDAsMGwsKGNoYXIgKilzcnZjbWQpOyAvKiBQdXQgaXQgb24gc2NyZWVu IGlmIGxvY2FsICovCi0gICAgZGVidWcoRjExMCwicmN2ZmlsIHNydmNtZCAxIixzcnZjbWQsMCk7 Ci0gICAgdGxvZyhGMTEwLCJSZWNlaXZpbmciLChjaGFyICopc3J2Y21kLDBMKTsgLyogVHJhbnNh Y3Rpb24gbG9nIGVudHJ5ICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgc2tpcHRoaXMg PSAwOwkJCS8qIFRoaXMgZmlsZSBpbiBvdXIgZXhjZXB0aW9uIGxpc3Q/ICovCi0gICAgZm9yIChp ID0gMDsgaSA8IE5TTkRFWENFUFQ7IGkrKykgewotCWlmICghcmN2ZXhjZXB0W2ldKSB7Ci0JICAg IGJyZWFrOwotCX0KLQlpZiAoY2ttYXRjaChyY3ZleGNlcHRbaV0sKGNoYXIgKilzcnZjbWQsZmls ZWNhc2UsMSkpIHsKLQkgICAgc2tpcHRoaXMgPSAxOwotCSAgICBicmVhazsKLQl9Ci0gICAgfQot Ci0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nICYmIHNraXB0aGlzKSB7Ci0JZGVidWcoRjEx MSwicmN2ZmlsIHJjdmV4Y2VwdCIscmN2ZXhjZXB0W2ldLGkpOwotCWRlYnVnKEYxMTAsInJjdmZp bCBza2lwcGluZyIsc3J2Y21kLDApOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0gICAg aWYgKHNraXB0aGlzKSB7CQkJLyogU2tpcHBpbmcgdGhpcyBmaWxlICovCi0JZGlzY2FyZCA9IDE7 Ci0JcmVqZWN0aW9uID0gMTsKLQlyZl9lcnIgPSAiRXhjZXB0aW9uIGxpc3QiOwotCWRlYnVnKEYx MDEsInJjdmZpbCBkaXNjYXJkIiwiIixkaXNjYXJkKTsKLQl0bG9nKEYxMDAsIiByZWZ1c2VkOiBl eGNlcHRpb24gbGlzdCIsIiIsMCk7Ci0JcmV0dXJuKDEpOwotICAgIH0KLQotICAgIC8qIEZpbGUg aXMgbm90IGluIGV4Y2VwdGlvbiBsaXN0ICovCi0KLSAgICBpZiAoIWNtYXJnMikJCQkvKiBObyBj b3JlIGR1bXBzIHBsZWFzZSAqLwotICAgICAgY21hcmcyID0gIiI7Ci0gICAgZGVidWcoRjExMCwi cmN2ZmlsIGNtYXJnMiIsY21hcmcyLDApOwotCi0gICAgaWYgKCpjbWFyZzIpIHsJCQkvKiBDaGVj ayBmb3IgYWx0ZXJuYXRlIG5hbWUgKi8KLSNpZm5kZWYgTk9TUEwKLQlpbnQgeTsgY2hhciAqczsJ CQkvKiBQYXNzIGl0IHRocnUgdGhlIGV2YWx1YXRvciAqLwotCWV4dGVybiBpbnQgY21kX3F1b3Rp bmc7Ci0JaWYgKGNtZF9xdW90aW5nKSB7Ci0JICAgIHkgPSBNQVhSUDsKLQkgICAgY2tzdHJuY3B5 KG9mbjEsKGNoYXIgKilzcnZjbWQsQ0tNQVhQQVRIKzEpOyAvKiBmb3IgXHYoZmlsZW5hbWUpICov Ci0JICAgIHMgPSAoY2hhciAqKXNydmNtZDsKLQkgICAgenpzdHJpbmcoY21hcmcyLCZzLCZ5KTsK LQl9IGVsc2UKLQkgICpzcnZjbWQgPSBOVUw7Ci0JaWYgKCEqc3J2Y21kKQkJCS8qIElmIHdlIGdv dCBzb21ldGhpbmcgKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotCSAgY2tzdHJuY3B5KChjaGFyICop c3J2Y21kLGNtYXJnMixzcnZjbWRsZW4pOwotICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJyY3ZmaWwg c3J2Y21kIDIiLHNydmNtZCwwKTsKLQotI2lmZGVmIFBJUEVTRU5ECi0gICAgLyogSWYgaXQgc3Rh cnRzIHdpdGggImJhbmciLCBpdCdzIGEgcGlwZSwgbm90IGEgZmlsZS4gKi8KLSAgICBpZiAodXNl cGlwZXMgJiYgcHJvdG9jb2wgPT0gUFJPVE9fSyAmJiAqc3J2Y21kID09ICchJyAmJiAhcmN2Zmls dGVyKSB7Ci0JQ0hBUiAqczsKLQlzID0gc3J2Y21kKzE7CQkJLyogc3J2Y21kW10gaXMgbm90IGEg cG9pbnRlci4gKi8KLQl3aGlsZSAoKnMpIHsJCQkvKiBTbyB3ZSBoYXZlIHRvIHNsaWRlIHRoZSBj b250ZW50cyAqLwotCSAgICAqKHMtMSkgPSAqczsJCS8qIG92ZXIgMSBzcGFjZSB0byB0aGUgbGVm dC4gKi8KLQkgICAgcysrOwotCX0KLQkqKHMtMSkgPSBOVUw7Ci0JcGlwZXNlbmQgPSAxOwotICAg IH0KLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotCi0jaWZkZWYgQ09NTUVOVAotLyoKLSAgVGhpcyBp cyBjb21tZW50ZWQgb3V0IGJlY2F1c2Ugd2UgbmVlZCB0byBrbm93IHdoZXRoZXIgdGhlIG5hbWUg d2UgYXJlCi0gIHVzaW5nIHdhcyBzcGVjaWZpZWQgYnkgdGhlIGxvY2FsIHVzZXIgYXMgYW4gb3Zl cnJpZGUsIG9yIGNhbWUgZnJvbSB0aGUKLSAgaW5jb21pbmcgcGFja2V0LiAgSW4gdGhlIGZvcm1l ciBjYXNlLCB3ZSBkb24ndCBkbyBzdHVmZiB0byBpdCAobGlrZQotICBzdHJpcCB0aGUgcGF0aG5h bWUpIHRoYXQgd2UgbWlnaHQgZG8gdG8gaXQgaW4gdGhlIGxhdHRlci4KLSovCi0gICAgY21hcmcy ID0gIiI7CQkJLyogRG9uZSB3aXRoIGFsdGVybmF0ZSBuYW1lICovCi0jZW5kaWYgLyogQ09NTUVO VCAqLwotCi0gICAgaWYgKChpbnQpc3RybGVuKChjaGFyICopc3J2Y21kKSA+IENLTUFYUEFUSCkg LyogV2F0Y2ggb3V0IGZvciBvdmVyZmxvdyAqLwotICAgICAgKihzcnZjbWQgKyBDS01BWFBBVEgg LSAxKSA9IE5VTDsKLQotICAgIC8qIEF0IHRoaXMgcG9pbnQsIHNydmNtZFtdIGNvbnRhaW5zIHRo ZSBpbmNvbWluZyBmaWxlbmFtZSBvciBhcy1uYW1lLiAqLwotICAgIC8qIFNvIE5PVyB3ZSBjaGVj ayBmb3Igd3JpdGUgYWNjZXNzLiAqLwotCi0gICAgaWYgKHpjaGtvKChjaGFyICopc3J2Y21kKSA8 IDApIHsJLyogUHJlY2hlY2sgZm9yIHdyaXRlIGFjY2VzcyAqLwotCWRlYnVnKEYxMTAsInJjdmZp bCBhY2Nlc3MgZGVuaWVkIixzcnZjbWQsMCk7Ci0JcmZfZXJyID0gIldyaXRlIGFjY2VzcyBkZW5p ZWQiOwotCWRpc2NhcmQgPSBvcG5lcnIgPSAxOwotCXJldHVybigwKTsKLSAgICB9Ci0gICAgeHhz Y3JlZW4oU0NSX0ZOLDAsMGwsKGNoYXIgKilzcnZjbWQpOyAvKiBQdXQgaXQgb24gc2NyZWVuIGlm IGxvY2FsICovCi0gICAgZGVidWcoRjExMCwicmN2ZmlsIHNydmNtZCAxIixzcnZjbWQsMCk7Ci0g ICAgdGxvZyhGMTEwLCJSZWNlaXZpbmciLChjaGFyICopc3J2Y21kLDBMKTsgLyogVHJhbnNhY3Rp b24gbG9nIGVudHJ5ICovCi0KLSNpZmRlZiBDS19MQUJFTEVECi0jaWZkZWYgVk1TCi0vKgotICBJ ZiB3ZSBoYXZlIGFuIGFzLW5hbWUsIHRoaXMgb3ZlcnJpZGVzIHRoZSBpbnRlcm5hbCBuYW1lIGlm IHdlIGFyZSBkb2luZwotICBhIGxhYmVsZWQtbW9kZSB0cmFuc2Zlci4KLSovCi0gICAgaWYgKCpj bWFyZzIpIHsKLQlleHRlcm4gaW50IGxmX29wdHM7Ci0JbGZfb3B0cyAmPSB+TEJMX05BTTsKLSAg ICB9Ci0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogQ0tfTEFCRUxFRCAqLwotCi0gICAgZGVi dWcoRjExMSwicmN2ZmlsIHBpcGVzZW5kIixzcnZjbWQscGlwZXNlbmQpOwotCi0jaWZkZWYgUElQ RVNFTkQKLSAgICAvKiBTa2lwIGFsbCB0aGUgZmlsZW5hbWUgbWFuaXB1bGF0aW9uIGFuZCBjb2xs aXNpb24gYWN0aW9ucyAqLwotICAgIGlmIChwaXBlc2VuZCkgewotCWRpcmZsZyA9IDA7Ci0Jb2Zu MVswXSA9ICchJzsKLQlja3N0cm5jcHkoJm9mbjFbMV0sKGNoYXIgKilzcnZjbWQsQ0tNQVhQQVRI KzEpOwotCWNrc3RybmNweShuLG9mbjEsQ0tNQVhQQVRIKzEpOwotCWNrc3RybmNweShmc3BlYyxv Zm4xLENLTUFYUEFUSCsxKTsKLQltYWtlc3RyKCZwcmZzcGVjLGZzcGVjKTsJLyogTmV3IHByZWxp bWluYXJ5IGZpbGVuYW1lICovCi0JZGVidWcoRjExMCwicmN2ZmlsIHBpcGVzZW5kIixvZm4xLDAp OwotCWdvdG8gcmN2ZmlseDsKLSAgICB9Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLS8qCi0gIFRo aXMgaXMgdG8gYXZvaWQgcGFzc2luZyBlbWFpbCBzdWJqZWN0cyB0aHJvdWdoIG56cnRvbCgpLgot ICBXZSBoYXZlbid0IHlldCByZWNlaXZlZCB0aGUgQSBwYWNrZXQgc28gd2UgZG9uJ3QgeWV0IGtu b3cgaXQncyBlLW1haWwsCi0gIHNvIGluIGZhY3Qgd2UgZ28gYWhlYWQgYW5kIGNvbnZlcnQgaXQg YW55d2F5LCBidXQgbGF0ZXIgd2UgZ2V0IHRoZQotICBvcmlnaW5hbCBiYWNrIGZyb20gb2ZpbG5h bVtdLgotKi8gIAotICAgIGRpc3BvcyA9IDA7Ci0gICAgY2tzdHJuY3B5KG9maWxuYW0sKGNoYXIg KilzcnZjbWQsQ0tNQVhQQVRIKzEpOwotCi0jaWZkZWYgTlpMVE9SCi0gICAgaWYgKCpjbWFyZzIp Ci0gICAgICBja3N0cm5jcHkoKGNoYXIgKilvZm4xLChjaGFyICopc3J2Y21kLENLTUFYUEFUSCsx KTsKLSAgICBlbHNlCi0gICAgICBuenJ0b2woKGNoYXIgKilzcnZjbWQsCQkvKiBGaWxlbmFtZSBm cm9tIHBhY2tldCAqLwotCSAgICAgKGNoYXIgKilvZm4xLAkJLyogV2hlcmUgdG8gcHV0IHJlc3Vs dCAqLwotCSAgICAgZm5jbnYsCQkJLyogRmlsZW5hbWUgY29udmVyc2lvbiAqLwotCSAgICAgZm5y cGF0aCwJCQkvKiBQYXRobmFtZSBoYW5kbGluZyAqLwotCSAgICAgQ0tNQVhQQVRICQkJLyogU2l6 ZSBvZiByZXN1bHQgYnVmZmVyICovCi0JICAgICApOwotI2Vsc2UKLSAgICBkZWJ1ZyhGMTAxLCJy Y3ZmaWwgZm5ycGF0aCIsIiIsZm5ycGF0aCk7IC8qIEhhbmRsZSBwYXRobmFtZXMgKi8KLSAgICBp ZiAoZm5ycGF0aCA9PSBQQVRIX09GRiAmJiAhKmNtYXJnMikgeyAvKiBSRUNFSVZFIFBBVEhOQU1F UyBPRkY/ICovCi0JY2hhciAqdDsJCQkvKiBZZXMuICovCi0JenN0cmlwKChjaGFyICopc3J2Y21k LCZ0KTsJLyogSWYgdGhlcmUgaXMgYSBwYXRobmFtZSwgc3RyaXAgaXQgKi8KLQlkZWJ1ZyhGMTEw LCJyY3ZmaWwgUEFUSF9PRkYgenN0cmlwIix0LDApOwotCWlmICghdCkJCQkJLyogQmUgc3VyZSB3 ZSBkaWRuJ3Qgc3RyaXAgdG9vIG11Y2ggKi8KLQkgIHNwcmludGYob2ZuMSwiRklMRSUwMmxkIixm aWxjbnQpOwotCWVsc2UgaWYgKCp0ID09ICdcMCcpCi0JICBzcHJpbnRmKG9mbjEsIkZJTEUlMDJs ZCIsZmlsY250KTsKLQllbHNlCi0JICBja3N0cm5jcHkob2ZuMSx0LENLTUFYUEFUSCsxKTsKLQlj a3N0cm5jcHkoKGNoYXIgKilzcnZjbWQsb2ZuMSxzcnZjbWRsZW4pOyAvKiBOb3cgY29weSBpdCBi YWNrLiAqLwotICAgIH0KLS8qCi0gIFNFVCBSRUNFSVZFIFBBVEhOQU1FUyBSRUxBVElWRS4uLgot ICBUaGUgZm9sbG93aW5nIGRvZXNuJ3QgYmVsb25nIGhlcmUgYnV0IGRvaW5nIGl0IHJpZ2h0IHdv dWxkIHJlcXVpcmUKLSAgZGVmaW5pbmcgYW5kIGltcGxlbWVudGluZyBhIG5ldyBmaWxlIHJvdXRp bmUgZm9yIGFsbCBjaz9maW8uYyBtb2R1bGVzLgotICBTbyBmb3Igbm93Li4uCi0qLwotI2lmZGVm IFVOSVhPUk9TSwotICAgIGVsc2UgaWYgKGZucnBhdGggPT0gUEFUSF9SRUwgJiYgISpjbWFyZzIp IHsKLQlpZiAoaXNhYnNvbHV0ZSgoY2hhciAqKXNydmNtZCkpIHsKLQkgICAgb2ZuMVswXSA9ICcu JzsKLQkgICAgY2tzdHJuY3B5KCZvZjFuWzFdLChjaGFyICopc3J2Y21kLENLTUFYUEFUSCsxKTsK LQkgICAgY2tzdHJuY3B5KChjaGFyICopc3J2Y21kLG9mbjEsc3J2Y21kbGVuKTsKLQkgICAgZGVi dWcoRjExMCwicmN2ZmlsIFBBVEhfUkVMIixvZm4xLDApOwotCX0KLSAgICB9Ci0jZWxzZQotI2lm ZGVmIE9TMgotICAgIGVsc2UgaWYgKGZucnBhdGggPT0gUEFUSF9SRUwgJiYgISpjbWFyZzIpIHsK LQlpZiAoaXNhYnNvbHV0ZSgoY2hhciAqKXNydmNtZCkpIHsKLQkgICAgY2hhciAqcCA9IChjaGFy ICopc3J2Y21kOwotCSAgICBpZiAoaXNhbHBoYSgqcCkgJiYgKihwKzEpID09ICc6JykKLQkgICAg ICBwICs9IDI7Ci0JICAgIGlmICgqcCA9PSAnXFwnIHx8ICpwID09ICcvJykKLQkgICAgICBwKys7 Ci0JICAgIGNrc3RybmNweShvZm4xLHAsQ0tNQVhQQVRIKzEpOwotCSAgICBja3N0cm5jcHkoKGNo YXIgKilzcnZjbWQsb2ZuMSxzcnZjbWRsZW4pOwotCSAgICBkZWJ1ZyhGMTEwLCJyY3ZmaWwgT1My IFBBVEhfUkVMIixvZm4xLDApOwotCX0KLSAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYg LyogVU5JWE9ST1NLICovCi0KLSAgICAvKiBOb3cgc3J2Y21kIGNvbnRhaW5zIGluY29taW5nIGZp bGVuYW1lIHdpdGggcGF0aCBwb3NzaWJseSBzdHJpcHBlZCAqLwotCi0gICAgaWYgKGZuY252KQkJ CQkvKiBGSUxFIE5BTUVTIENPTlZFUlRFRD8gKi8KLSAgICAgIHpydG9sKChjaGFyICopc3J2Y21k LChjaGFyICopb2ZuMSk7IC8qIFllcywgY29udmVydCB0byBsb2NhbCBmb3JtICovCi0gICAgZWxz ZQotICAgICAgY2tzdHJuY3B5KG9mbjEsKGNoYXIgKilzcnZjbWQsQ0tNQVhQQVRIKzEpOyAvKiBO bywgY29weSBsaXRlcmFsbHkuICovCi0jZW5kaWYgLyogTlpMVE9SICovCi0KLSNpZmRlZiBQSVBF U0VORAotICAgIGlmIChyY3ZmaWx0ZXIpIHsKLQljaGFyICogcCA9IE5VTEwsICogcTsKLQlpbnQg bm4gPSBNQVhSUDsKLQlwaXBlc2VuZCA9IDE7Ci0JZGVidWcoRjExMCwicmN2ZmlsIHJjdmZpbHRl ciAiLHJjdmZpbHRlciwwKTsKLSNpZm5kZWYgTk9TUEwKLQlpZiAoKHAgPSAoY2hhciAqKSBtYWxs b2Mobm4gKyAxKSkpIHsKLQkgICAgcSA9IHA7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAg LyogV2UgaGF2ZSBhbHJlYWR5IHByb2Nlc3NlZCBzcnZjbWQgYW5kIHBsYWNlZCBpdCBpbnRvIG9m bjEgKi8KLSAgICAgICAgICAgIGNrc3RybmNweShvZm4xLChjaGFyICopc3J2Y21kLENLTUFYUEFU SCsxKTsgLyogRm9yIFx2KGZpbGVuYW1lKSAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkgICAg ZGVidWcoRjExMCwicmN2ZmlsZSBwaXBlc2VuZCBmaWx0ZXIiLHJjdmZpbHRlciwwKTsKLQkgICAg enpzdHJpbmcocmN2ZmlsdGVyLCZwLCZubik7Ci0JICAgIGRlYnVnKEYxMTEsInJjdmZpbCBwaXBl bmFtZSIscSxubik7Ci0JICAgIGlmIChubiA8PSAwKSB7Ci0JCXByaW50ZigKLQkJICAgICAgICI/ U29ycnksIHJlY2VpdmUgZmlsdGVyICsgZmlsZW5hbWUgdG9vIGxvbmcsICVkIG1heC5cbiIsCi0J CSAgICAgICBDS01BWFBBVEgKLQkJICAgICAgICk7Ci0JCXJmX2VyciA9ICJOYW1lIHRvbyBsb25n IjsKLQkJZnJlZShxKTsKLQkJcmV0dXJuKDApOwotCSAgICB9Ci0JICAgIGNrc3RybmNweSgoY2hh ciAqKXNydmNtZCxxLE1BWFJQKTsKLQkgICAgZnJlZShxKTsKLQl9Ci0jZW5kaWYgLyogTk9TUEwg Ki8KLSAgICB9Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLQotICAgIC8qIE5vdyB0aGUgaW5jb21p bmcgZmlsZW5hbWUsIHBvc3NpYmx5IGNvbnZlcnRlZCwgaXMgaW4gb2ZuMVtdLiAqLwotCi0jaWZk ZWYgT1MyCi0gICAgLyogRG9uJ3QgcmVmdXNlIHRoZSBmaWxlIGp1c3QgYmVjYXVzZSB0aGUgbmFt ZSBpcyBpbGxlZ2FsLiAqLwotICAgIGlmICghSXNGaWxlTmFtZVZhbGlkKG9mbjEpKSB7CS8qIE5h bWUgaXMgT0sgZm9yIE9TLzI/ICovCi0jaWZkZWYgT1MyT05MWQotCWNoYXIgKnpzID0gTlVMTDsK LQl6c3RyaXAob2ZuMSwgJnpzKTsJCS8qIE5vdCB2YWxpZCwgc3RyaXAgdW5jb25kaXRpb25hbGx5 ICovCi0JaWYgKHpzKSB7Ci0JICAgIGlmIChpYXR0ci5sb25nbmFtZS5sZW4gJiYJLyogRnJlZSBw cmV2aW91cyBsb25nbmFtZSwgaWYgYW55ICovCi0JCWlhdHRyLmxvbmduYW1lLnZhbCkKLQkgICAg ICBmcmVlKGlhdHRyLmxvbmduYW1lLnZhbCk7Ci0JICAgIGlhdHRyLmxvbmduYW1lLmxlbiA9IHN0 cmxlbih6cyk7IC8qIFN0b3JlIGluIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUgKi8KLQkgICAgaWF0dHIu bG9uZ25hbWUudmFsID0gKGNoYXIgKikgbWFsbG9jKGlhdHRyLmxvbmduYW1lLmxlbiArIDEpOwot CSAgICBpZiAoaWF0dHIubG9uZ25hbWUudmFsKQkvKiBSZW1lbWJlciB0aGlzIChpbGxlZ2FsKSBu YW1lICovCi0JICAgICAgc3RyY3B5KGlhdHRyLmxvbmduYW1lLnZhbCwgenMpOyAvKiBzYWZlICov Ci0JfQotI2VuZGlmIC8qIE9TMk9OTFkgKi8KLQlkZWJ1ZyhGMTEwLCJyY3ZmaWw6IGludmFsaWQg ZmlsZSBuYW1lIixvZm4xLDApOwotCUNoYW5nZU5hbWVGb3JGQVQob2ZuMSk7CS8qIENoYW5nZSB0 byBhbiBhY2NlcHRhYmxlIG5hbWUgKi8KLQlkZWJ1ZyhGMTEwLCJyY3ZmaWw6IEZBVCBmaWxlIG5h bWUiLG9mbjEsMCk7Ci0KLSAgICB9IGVsc2UgewkJCQkvKiBOYW1lIGlzIE9LLiAqLwotCi0JZGVi dWcoRjExMCwicmN2ZmlsOiB2YWxpZCBmaWxlIG5hbWUiLG9mbjEsMCk7Ci0jaWZkZWYgT1MyT05M WQotCWlmIChpYXR0ci5sb25nbmFtZS5sZW4gJiYKLQkgICAgIGlhdHRyLmxvbmduYW1lLnZhbCkJ LyogRnJlZSBwcmV2aW91cyBsb25nbmFtZSwgaWYgYW55ICovCi0JICBmcmVlKGlhdHRyLmxvbmdu YW1lLnZhbCk7Ci0JaWF0dHIubG9uZ25hbWUubGVuID0gMDsKLQlpYXR0ci5sb25nbmFtZS52YWwg PSBOVUxMOwkvKiBUaGlzIGZpbGUgZG9lc24ndCBuZWVkIGEgbG9uZ25hbWUgKi8KLSNlbmRpZiAv KiBPUzJPTkxZICovCi0gICAgfQotI2VuZGlmIC8qIE9TMiAqLwotICAgIGRlYnVnKEYxMTAsInJj dmZpbCBhcyIsb2ZuMSwwKTsKLQotLyogRmlsZW5hbWUgY29sbGlzaW9uIGFjdGlvbiBzZWN0aW9u LiAqLwotCi0gICAgZGlyZmxnID0JCQkJLyogSXMgaXQgYSBkaXJlY3RvcnkgbmFtZT8gKi8KLSNp ZmRlZiBDS19UTVBESVIKLSAgICAgICAgaXNkaXIob2ZuMSkKLSNlbHNlCi0JMAotI2VuZGlmIC8q IENLX1RNUERJUiAqLwotCSAgOwotICAgIGRlYnVnKEYxMDEsInJjdmZpbCBkaXJmbGciLCIiLGRp cmZsZyk7Ci0gICAgb2ZuMWxlbiA9IHpjaGtpKG9mbjEpOwkJLyogRmlsZSBhbHJlYWR5IGV4aXN0 cz8gKi8KLSAgICBkZWJ1ZyhGMTExLCJyY3ZmaWwgb2ZuMWxlbiIsb2ZuMSxvZm4xbGVuKTsKLSAg ICBvZm4xeCA9IChvZm4xbGVuICE9IChDS19PRkZfVCktMSk7Ci0KLSAgICBpZiAoICgKLSNpZmRl ZiBVTklYCi0Jc3RyY21wKG9mbjEsIi9kZXYvbnVsbCIpICYmCS8qIEl0J3Mgbm90IHRoZSBudWxs IGRldmljZT8gKi8KLSNlbHNlCi0jaWZkZWYgT1NLCi0Jc3RyY21wKG9mbjEsIi9uaWwiKSAmJgot I2VuZGlmIC8qIE9TSyAqLwotI2VuZGlmIC8qIFVOSVggKi8KLQkhc3Rkb3VmICkgJiYJCQkvKiBO b3QgY29weWluZyB0byBzdGFuZGFyZCBvdXRwdXQ/ICovCi0Jb2ZuMXggfHwJCQkvKiBGaWxlIG9m IHNhbWUgbmFtZSBleGlzdHM/ICovCi0JZGlyZmxnICkgewkJCS8qIE9yIGZpbGUgaXMgYSBkaXJl Y3Rvcnk/ICovCi0gICAgICAgIGRlYnVnKEYxMTEsInJjdmZpbCBleGlzdHMiLG9mbjEsZm5jYWN0 KTsKLSNpZmRlZiBDS19QRVJNUwotCW9mcGVybXMgPSB6Z3Blcm0oKGNoYXIgKilvZm4xKTsJLyog R2V0IG9sZCBmaWxlJ3MgcGVybWlzc2lvbnMgKi8KLQlkZWJ1ZyhGMTEwLCJyY3ZmaWwgcGVybXMi LG9mcGVybXMsMCk7Ci0jZW5kaWYgLyogQ0tfUEVSTVMgKi8KLQotCWRlYnVnKEYxMDEsInJjdmZp bCBmbmNhY3QiLCIiLGZuY2FjdCk7Ci0Jc3dpdGNoIChmbmNhY3QpIHsJCS8qIFllcywgZG8gd2hh dCB1c2VyIHNhaWQuICovCi0JICBjYXNlIFhZRlhfQToJCQkvKiBBcHBlbmQgKi8KLQkgICAgb2Zw ZXJtcyA9ICIiOwotCSAgICBkZWJ1ZyhGMTAwLCJyY3ZmaWwgYXBwZW5kIiwiIiwwKTsKLQkgICAg aWYgKGRpcmZsZykgewotCQlyZl9lcnIgPSAiQ2FuJ3QgYXBwZW5kIHRvIGEgZGlyZWN0b3J5IjsK LQkJdGxvZyhGMTAwLCIgZXJyb3IgLSBjYW4ndCBhcHBlbmQgdG8gZGlyZWN0b3J5IiwiIiwwKTsK LQkJZGlzY2FyZCA9IG9wbmVyciA9IDE7Ci0JCXJldHVybigwKTsKLQkgICAgfQotCSAgICB0bG9n KEYxMTAsIiBhcHBlbmRpbmcgdG8iLG9mbjEsMCk7Ci0JICAgIGJyZWFrOwotI2lmZGVmIENPTU1F TlQKLQkgIGNhc2UgWFlGWF9ROgkJCS8qIFF1ZXJ5IChBc2spICovCi0JICAgIGJyZWFrOwkJCS8q IG5vdCBpbXBsZW1lbnRlZCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkgIGNhc2UgWFlGWF9C OgkJCS8qIEJhY2t1cCAocmVuYW1lIG9sZCBmaWxlKSAqLwotCSAgICBpZiAoZGlyZmxnKSB7Ci0J CXJmX2VyciA9ICJDYW4ndCByZW5hbWUgZXhpc3RpbmcgZGlyZWN0b3J5IjsKLQkJdGxvZyhGMTAw LCIgZXJyb3IgLSBjYW4ndCByZW5hbWUgZGlyZWN0b3J5IiwiIiwwKTsKLQkJZGlzY2FyZCA9IG9w bmVyciA9IDE7Ci0JCXJldHVybigwKTsKLQkgICAgfQotCSAgICB6bmV3bihvZm4xLCZvZm4yKTsJ CS8qIEdldCBuZXcgdW5pcXVlIG5hbWUgKi8KLQkgICAgdGxvZyhGMTEwLCIgYmFja3VwOiIsb2Zu MiwwKTsKLQkgICAgZGVidWcoRjExMCwicmN2ZmlsIGJhY2t1cCBvZm4xIixvZm4xLDApOwotCSAg ICBkZWJ1ZyhGMTEwLCJyY3ZmaWwgYmFja3VwIG9mbjIiLG9mbjIsMCk7Ci0jaWZkZWYgQ0tfTEFC RUxFRAotI2lmZGVmIE9TMk9OTFkKLS8qCi0gIEluIGNhc2UgdGhpcyBpcyBhIEZBVCBmaWxlIHN5 c3RlbSwgd2UgY2FuJ3QgY2hhbmdlIG9ubHkgdGhlIEZBVCBuYW1lLCB3ZQotICBhbHNvIGhhdmUg dG8gY2hhbmdlIHRoZSBsb25nbmFtZSBmcm9tIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGVzIGJsb2Nr LgotICBPdGhlcndpc2UsIHdlJ2xsIGhhdmUgbWFueSBmaWxlcyB3aXRoIHRoZSBzYW1lIGxvbmdu YW1lIGFuZCBpZiB3ZSBjb3B5IHRoZW0KLSAgdG8gYW4gSFBGUyB2b2x1bWUsIG9ubHkgb25lIHdp bGwgc3Vydml2ZS4KLSovCi0JICAgIGlmIChvczJnZXRsb25nbmFtZShvZm4xLCAmbG9uZ25hbWUp ID4gLTEpIHsKLQkJaWYgKHN0cmxlbihsb25nbmFtZSkpIHsKLQkJICAgIGNoYXIgdG1wWzEwXTsK LQkJICAgIGV4dGVybiBpbnQgY2tfem5ld247Ci0JCSAgICBzcHJpbnRmKHRtcCwiLn4lZH4iLGNr X3puZXduKTsKLQkJICAgIG5ld2xvbmduYW1lID0KLQkJICAgICAgKGNoYXIgKikgbWFsbG9jKHN0 cmxlbihsb25nbmFtZSkgKyBzdHJsZW4odG1wKSArIDEpOwotCQkgICAgaWYgKG5ld2xvbmduYW1l KSB7Ci0JCQlzdHJjcHkobmV3bG9uZ25hbWUsIGxvbmduYW1lKTsgLyogc2FmZSAocHJlY2hlY2tl ZCkgKi8KLQkJCXN0cmNhdChuZXdsb25nbmFtZSwgdG1wKTsgLyogc2FmZSAocHJlY2hlY2tlZCkg Ki8KLQkJCW9zMnNldGxvbmduYW1lKG9mbjEsIG5ld2xvbmduYW1lKTsKLQkJCWZyZWUobmV3bG9u Z25hbWUpOwotCQkJbmV3bG9uZ25hbWUgPSBOVUxMOwotCQkgICAgfQotCQl9Ci0JICAgIH0gZWxz ZSBkZWJ1ZyhGMTAwLCJyY3ZmaWwgb3MyZ2V0bG9uZ25hbWUgZmFpbGVkIiwiIiwwKTsKLSNlbmRp ZiAvKiBPUzJPTkxZICovCi0jZW5kaWYgLyogQ0tfTEFCRUxFRCAqLwotCi0jaWZkZWYgQ09NTUVO VAotCSAgICAvKiBEbyB0aGlzIGxhdGVyLCBpbiBvcGVuYSgpLi4uICovCi0JICAgIGlmICh6cmVu YW1lKG9mbjEsb2ZuMikgPCAwKSB7Ci0JCXJmX2VyciA9ICJDYW4ndCB0cmFuc2Zvcm0gZmlsZW5h bWUiOwotCQlkZWJ1ZyhGMTEwLCJyY3ZmaWwgcmVuYW1lIGZhaWxzIixvZm4xLDApOwotCQlkaXNj YXJkID0gb3BuZXJyID0gMTsKLQkJcmV0dXJuKDApOwotCSAgICB9Ci0jZW5kaWYgLyogQ09NTUVO VCAqLwotCSAgICBicmVhazsKLQotCSAgY2FzZSBYWUZYX0Q6CQkJLyogRGlzY2FyZCAocmVmdXNl IG5ldyBmaWxlKSAqLwotCSAgICBvZnBlcm1zID0gIiI7Ci0JICAgIGRpc2NhcmQgPSAxOwotCSAg ICByZWplY3Rpb24gPSAxOwkJLyogSG9ycmlibGUgaGFjazogcmVhc29uID0gbmFtZSAqLwotCSAg ICBkZWJ1ZyhGMTAxLCJyY3ZmaWwgZGlzY2FyZCIsIiIsZGlzY2FyZCk7Ci0JICAgIHRsb2coRjEw MCwiIHJlZnVzZWQ6IG5hbWUiLCIiLDApOwotCSAgICBicmVhazsKLQotCSAgY2FzZSBYWUZYX1I6 CQkJLyogUmVuYW1lIGluY29taW5nIGZpbGUgKi8KLQkgICAgem5ld24ob2ZuMSwmb2ZuMik7CQkv KiBNYWtlIG5ldyBuYW1lIGZvciBpdCAqLwotI2lmZGVmIE9TMk9OTFkKLQkgICAgaWYgKGlhdHRy LmxvbmduYW1lLmxlbikgewotCQljaGFyIHRtcFsxMF07Ci0JCWV4dGVybiBpbnQgY2tfem5ld247 Ci0JCXNwcmludGYodG1wLCIufiVkfiIsY2tfem5ld24pOwotCQluZXdsb25nbmFtZSA9Ci0JCSAg KGNoYXIgKikgbWFsbG9jKGlhdHRyLmxvbmduYW1lLmxlbiArIHN0cmxlbih0bXApICsgMSk7Ci0J CWlmIChuZXdsb25nbmFtZSkgewotCQkgICAgc3RyY3B5KG5ld2xvbmduYW1lLCBpYXR0ci5sb25n bmFtZS52YWwpOyAvKiBzYWZlICovCi0JCSAgICBzdHJjYXQobmV3bG9uZ25hbWUsIHRtcCk7IC8q IHNhZmUgKi8KLQkJICAgIGRlYnVnKEYxMTAsCi0JCQkgICJSZW5hbWUgSW5jb21pbmc6IG5ld2xv bmduYW1lIixuZXdsb25nbmFtZSwwKTsKLQkJICAgIGlmIChpYXR0ci5sb25nbmFtZS5sZW4gJiYK LQkJCWlhdHRyLmxvbmduYW1lLnZhbCkKLQkJICAgICAgZnJlZShpYXR0ci5sb25nbmFtZS52YWwp OwotCQkgICAgaWF0dHIubG9uZ25hbWUubGVuID0gc3RybGVuKG5ld2xvbmduYW1lKTsKLQkJICAg IGlhdHRyLmxvbmduYW1lLnZhbCA9IG5ld2xvbmduYW1lOwotCQkgICAgLyogZnJlZShuZXdsb25n bmFtZSkgaGVyZSA/ICovCi0JCX0KLQkgICAgfQotI2VuZGlmIC8qIE9TMk9OTFkgKi8KLQkgICAg YnJlYWs7Ci0JICBjYXNlIFhZRlhfWDoJCQkvKiBSZXBsYWNlIG9sZCBmaWxlICovCi0JICAgIGRl YnVnKEYxMDAsInJjdmZpbCBvdmVyd3JpdGUiLCIiLDApOwotCSAgICBpZiAoZGlyZmxnKSB7Ci0J CXJmX2VyciA9ICJDYW4ndCBvdmVyd3JpdGUgZXhpc3RpbmcgZGlyZWN0b3J5IjsKLQkJdGxvZyhG MTAwLCIgZXJyb3IgLSBjYW4ndCBvdmVyd3JpdGUgZGlyZWN0b3J5IiwiIiwwKTsKLQkJZGlzY2Fy ZCA9IG9wbmVyciA9IDE7Ci0jaWZkZWYgQ09NTUVOVAotCQlyZXR1cm4oMCk7Ci0jZWxzZQotCQli cmVhazsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0JICAgIH0KLQkgICAgdGxvZyhGMTEwLCJvdmVy d3JpdGluZyIsb2ZuMSwwKTsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIFhZRlhfVToJCQkvKiBSZWZ1 c2UgaWYgb2xkZXIgKi8KLQkgICAgZGVidWcoRjExMCwicmN2ZmlsIHVwZGF0ZSIsb2ZuMSwwKTsK LQkgICAgaWYgKGRpcmZsZykgewotCQlyZl9lcnIgPSAiRmlsZSBoYXMgc2FtZSBuYW1lIGFzIGV4 aXN0aW5nIGRpcmVjdG9yeSI7Ci0JCXRsb2coRjExMCwiIGVycm9yIC0gZGlyZWN0b3J5IGV4aXN0 czoiLG9mbjEsMCk7Ci0JCWRpc2NhcmQgPSBvcG5lcnIgPSAxOwotI2lmZGVmIENPTU1FTlQKLQkJ LyogRG9uJ3Qgc2VuZCBhbiBlcnJvciBwYWNrZXQsIGp1c3QgcmVmdXNlIHRoZSBmaWxlICovCi0J CXJldHVybigwKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0JICAgIH0KLQkgICAgYnJlYWs7CQkJ LyogTm90IGhlcmUsIHdlIGRvbid0IGhhdmUgKi8KLQkJCQkJLyogdGhlIGF0dHJpYnV0ZSBwYWNr ZXQgeWV0LiAqLwotCSAgZGVmYXVsdDoKLQkgICAgb2ZwZXJtcyA9ICIiOwotCSAgICBkZWJ1ZyhG MTAxLCJyY3ZmaWwgYmFkIGNvbGxpc2lvbiBhY3Rpb24iLCIiLGZuY2FjdCk7Ci0JICAgIGJyZWFr OwotCX0KLSAgICB9Ci0gICAgZGVidWcoRjExMCwicmN2ZmlsIG9mbjEiLG9mbjEsMCk7Ci0gICAg ZGVidWcoRjExMCwicmN2ZmlsIG9mbjIiLG9mbjIsMCk7Ci0gICAgZGVidWcoRjExMCwicmN2Zmls IG9mcGVybXMiLG9mcGVybXMsMCk7Ci0gICAgaWYgKGZuY2FjdCA9PSBYWUZYX1IgJiYgb2ZuMXgg JiYgb2ZuMikgeyAvKiBSZW5hbWluZyBpbmNvbWluZyBmaWxlPyAqLwotCXh4c2NyZWVuKFNDUl9B TiwwLDBsLG9mbjIpOwkvKiBEaXNwbGF5IHJlbmFtZWQgbmFtZSAqLwotCWNrc3RybmNweShuLCBv Zm4yLCBDS01BWFBBVEgrMSk7IC8qIFJldHVybiBpdCAqLwotICAgIH0gZWxzZSB7CQkJCS8qIE5v ICovCi0JeHhzY3JlZW4oU0NSX0FOLDAsMGwsb2ZuMSk7CS8qIERpc3BsYXkgcmVndWxhciBuYW1l ICovCi0JY2tzdHJuY3B5KG4sIG9mbjEsIENLTUFYUEFUSCsxKTsgLyogYW5kIHJldHVybiBpdC4g Ki8KLSAgICB9Ci0KLSNpZmRlZiBDS19NS0RJUgotLyogIENyZWF0ZSBkaXJlY3RvcnkocykgaWYg bmVjZXNzYXJ5LiAgKi8KLSAgICBpZiAoIWRpc2NhcmQgJiYgZm5ycGF0aCAhPSBQQVRIX09GRikg eyAvKiBSRUNFSVZFIFBBVEhBTUVTIE9OPyAqLwotCWludCB4OwotCWRlYnVnKEYxMTAsInJjdmZp bCBjYWxsaW5nIHpta2RpciIsb2ZuMSwwKTsgLyogWWVzICovCi0JaWYgKCh4ID0gem1rZGlyKG9m bjEpKSA8IDApIHsKLQkgICAgZGVidWcoRjEwMCwiem1rZGlyIGZhaWxzIiwiIiwwKTsKLQkgICAg dGxvZyhGMTEwLCIgZXJyb3IgLSBkaXJlY3RvcnkgY3JlYXRpb24gZmFpbHVyZToiLG9mbjEsMCk7 Ci0JICAgIHJmX2VyciA9ICJEaXJlY3RvcnkgY3JlYXRpb24gZmFpbHVyZS4iOwotCSAgICBkaXNj YXJkID0gMTsKLQkgICAgcmV0dXJuKDApOwotCX0KLSNpZmRlZiBUTE9HCi0JZWxzZSBpZiAoeCA+ IDApCi0JICB0bG9nKEYxMTAsIiBwYXRoIGNyZWF0ZWQ6IixvZm4xLDApOwotI2VuZGlmIC8qIFRM T0cgKi8KLSAgICB9Ci0jZWxzZQotICAgIGRlYnVnKEYxMTAsInJjdmZpbCBDS19NS0RJUiBub3Qg ZGVmaW5lZCIsb2ZuMSwwKTsKLSNlbmRpZiAvKiBDS19NS0RJUiAqLwotCi0gICAgaWYgKGNhbGli cmF0ZSkKLSAgICAgIGNrc3RybmNweShmc3BlYyxvZm4xLENLTUFYUEFUSCsxKTsKLSAgICBlbHNl Ci0gICAgICB6Zm5xZnAob2ZuMSxmc3BlY2xlbixmc3BlYyk7Ci0gICAgZGVidWcoRjExMCwicmN2 ZmlsIGZzcGVjIixmc3BlYywwKTsKLQotI2lmZGVmIENPTU1FTlQKLSAgICAvKiBTZWUgY29tbWVu dHMgd2l0aCBWTVMgemZucWZwKCkuLi4gKi8KLSNpZmRlZiBWTVMKLSAgICAvKiB6Zm5xZnAoKSBk b2VzIG5vdCByZXR1cm4gdGhlIHZlcnNpb24gbnVtYmVyICovCi0gICAgaWYgKCFjYWxpYnJhdGUp IHsKLQlpbnQgeCwgdjsKLQl4ID0gc3RybGVuKG9mbjEpOwotCWlmICh4ID4gMCkgewotCSAgICBp ZiAob2ZuMVt4LTFdID09ICc7JykgewotCQl2ID0gZ2V0dm51bShvZm4xKTsKLQkJY2tzdHJuY3B5 KCZvZm4xW3hdLGNraXRvYSh2KSxDS01BWFBBVEgteCk7Ci0JICAgIH0KLQl9Ci0gICAgfQotI2Vu ZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICBmc3BlY1tmc3BlY2xlbl0g PSBOVUw7Ci0gICAgbWFrZXN0cigmcHJmc3BlYyxmc3BlYyk7CQkvKiBOZXcgcHJlbGltaW5hcnkg ZmlsZW5hbWUgKi8KLQotI2lmZGVmIFBJUEVTRU5ECi0gIHJjdmZpbHg6Ci0jZW5kaWYgLyogUElQ RVNFTkQgKi8KLQotICAgIGRlYnVnKEYxMTAsInJjdmZpbHg6IG4iLG4sMCk7Ci0gICAgZGVidWco RjExMCwicmN2ZmlseDogb2ZuMSIsb2ZuMSwwKTsKLSAgICBmZmMgPSAoQ0tfT0ZGX1QpMDsJCQkv KiBJbml0IHBlci1maWxlIGNvdW50ZXJzICovCi0gICAgY3BzID0gb2xkY3BzID0gMEw7Ci0gICAg cnNfbGVuID0gKENLX09GRl9UKTA7Ci0gICAgcmVqZWN0aW9uID0gLTE7Ci0gICAgZnNlY3MgPSBn dGltZXIoKTsJCQkvKiBUaW1lIHRoaXMgZmlsZSBzdGFydGVkICovCi0jaWZkZWYgR0ZUSU1FUgot ICAgIGZwZnNlY3MgPSBnZnRpbWVyKCk7Ci0gICAgZGVidWcoRjEwMSwicmN2ZmlsIGZwZnNlY3Mi LCIiLGZwZnNlY3MpOwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLSAgICBmaWxjbnQrKzsKLSAgICBp bnRtc2coZmlsY250KTsKLSAgICByZXR1cm4oMSk7CQkJCS8qIFN1Y2Nlc3NmdWwgcmV0dXJuICov Ci19Ci0KLQotLyogIFIgRSBPIEYgIC0tICBSZWNlaXZlIEVuZCBPZiBGaWxlIHBhY2tldCBmb3Ig aW5jb21pbmcgZmlsZSAqLwotCi0vKgotICBDbG9zZXMgdGhlIHJlY2VpdmVkIGZpbGUuCi0gIFJl dHVybnM6Ci0gICAgMCBvbiBzdWNjZXNzLgotICAgLTEgaWYgZmlsZSBjb3VsZCBub3QgYmUgY2xv c2VkLgotICAgIDIgaWYgZGlzcG9zaXRpb24gd2FzIG1haWwsIG1haWwgd2FzIHNlbnQsIGJ1dCB0 ZW1wIGZpbGUgbm90IGRlbGV0ZWQuCi0gICAgMyBpZiBkaXNwb3NpdGlvbiB3YXMgcHJpbnQsIGZp bGUgd2FzIHByaW50ZWQsIGJ1dCBub3QgZGVsZXRlZC4KLSAgIC0yIGlmIGRpc3Bvc2l0aW9uIHdh cyBtYWlsIGFuZCBtYWlsIGNvdWxkIG5vdCBiZSBzZW50Ci0gICAtMyBpZiBkaXNwb3NpdGlvbiB3 YXMgcHJpbnQgYW5kIGZpbGUgY291bGQgbm90IGJlIHByaW50ZWQKLSAgIC00IGlmIE1PVkUtVE86 IGZhaWxlZAotICAgLTUgaWYgUkVOQU1FLVRPOiBmYWlsZWQKLSovCi1pbnQKLXJlb2YoZix5eSkg Y2hhciAqZjsgc3RydWN0IHphdHRyICp5eTsgewotICAgIGV4dGVybiBjaGFyICogcmN2X21vdmUs ICogcmN2X3JlbmFtZTsKLSAgICBleHRlcm4gaW50IG9faXNvcGVuOwotICAgIGludCByYyA9IDA7 CQkJCS8qIFJldHVybiBjb2RlICovCi0gICAgY2hhciAqcDsKLSAgICBjaGFyIGM7Ci0KLSAgICBk ZWJ1ZyhGMTExLCJyZW9mIGZuY2FjdCIsZixmbmNhY3QpOwotICAgIGRlYnVnKEYxMDEsInJlb2Yg ZGlzY2FyZCIsIiIsZGlzY2FyZCk7Ci0gICAgc3VjY2VzcyA9IDE7CQkJLyogQXNzdW1lIHN0YXR1 cyBpcyBPSyAqLwotICAgIGxzc3RhdGUgPSAwOwkJCS8qIENhbmNlbCBsb2NraW5nLXNoaWZ0IHN0 YXRlICovCi0gICAgaWYgKGRpc2NhcmQpIHsJCQkvKiBIYW5kbGUgYXR0cmlidXRlIHJlZnVzYWxz LCBldGMuICovCi0JZGVidWcoRjEwMSwicmVvZiBkaXNjYXJkaW5nIiwiIiwwKTsKLQlzdWNjZXNz ID0gMDsJCQkvKiBTdGF0dXMgPSBmYWlsZWQuICovCi0JaWYgKHJlamVjdGlvbiA9PSAnIycgfHwJ CS8qIFVubGVzcyByZWplY3Rpb24gcmVhc29uIGlzICovCi0JICAgIHJlamVjdGlvbiA9PSAgMSAg fHwJCS8qIGRhdGUgb3IgbmFtZSAoU0VUIEZJTEUgQ09MTElTSU9OICovCi0JICAgIHJlamVjdGlv biA9PSAnPycpCQkvKiBVUERBVEUgb3IgRElTQ0FSRCkgKi8KLQkgIHN1Y2Nlc3MgPSAxOwotCWRl YnVnKEYxMDEsInJlb2Ygc3VjY2VzcyIsIiIsc3VjY2Vzcyk7Ci0JZmlscmVqKys7CQkJLyogQ291 bnQgdGhpcyByZWplY3Rpb24uICovCi0JZGlzY2FyZCA9IDA7CQkJLyogV2UgbmV2ZXIgb3BlbmVk IHRoZSBmaWxlLCAqLwotCXJldHVybigwKTsJCQkvKiBzbyB3ZSBkb24ndCBjbG9zZSBpdC4gKi8K LSAgICB9Ci0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKSB7Ci0JZGVidWcoRjEwMSwicmVv ZiBjeHNlZW4iLCIiLGN4c2Vlbik7Ci0JZGVidWcoRjEwMSwicmVvZiBjenNlZW4iLCIiLGN6c2Vl bik7Ci0JZGVidWcoRjExMCwicmVvZiByZGF0YXAiLHJkYXRhcCwwKTsKLSAgICB9Ci0jZW5kaWYg LyogREVCVUcgKi8KLQotICAgIGlmIChjeHNlZW4gPT0gMCkJCQkvKiBHb3QgY2FuY2VsIGRpcmVj dGl2ZT8gKi8KLSAgICAgIGN4c2VlbiA9ICgqcmRhdGFwID09ICdEJyk7Ci0gICAgaWYgKGN4c2Vl biB8fCBjenNlZW4pCQkvKiAoZm9yIGhpbnRzKSAqLwotICAgICAgaW50ZXJydXB0ZWQgPSAxOwot ICAgIHN1Y2Nlc3MgPSAoY3hzZWVuIHx8IGN6c2VlbikgPyAwIDogMTsgLyogU2V0IFNVQ0NFU1Mg ZmxhZyBhcHByb3ByaWF0ZWx5ICovCi0gICAgaWYgKCFzdWNjZXNzKQkJCSAgLyogIlVuY291bnQi IHRoaXMgZmlsZSAqLwotICAgICAgZmlscmVqKys7Ci0gICAgZGVidWcoRjEwMSwicmVvZiBvX2lz b3BlbiIsIiIsb19pc29wZW4pOwotCi0gICAgaWYgKG9faXNvcGVuKSB7CQkJLyogSWYgYW4gb3V0 cHV0IGZpbGUgd2FzIG9wZW4uLi4gKi8KLQotI2lmZGVmIENLX0NUUkxaCi0JaWYgKHN1Y2Nlc3Mp IHsKLQkgICAgZGVidWcoRjEwMSwicmVvZiBsYXN0Y2hhciIsIiIsbGFzdGNoYXIpOwotCSAgICBp ZiAoIWJpbmFyeSAmJiBlb2ZtZXRob2QgPT0gWFlFT0ZfWiAmJiBsYXN0Y2hhciAhPSAyNiAmJgot CQkoIXhmbGcgfHwgKHhmbGcgJiYgcmVtZmlsZSkpKQotCSAgICAgIHBuYnl0ZSgoY2hhcikyNixw dXRmaWwpOwotCX0KLSNlbmRpZiAvKiBDS19DVFJMWiAqLwotCi0JcmMgPSBjbHNvZihjeHNlZW4g fHwgY3pzZWVuKTsJLyogQ2xvc2UgdGhlIGZpbGUgKHJlc2V0cyBjeHNlZW4pICovCi0JZGVidWco RjEwMSwicmVvZiBjbG9zZiIsIiIscmMpOwotCWlmIChyYyA8IDApIHsJCQkvKiBJZiBmYWlsdXJl IHRvIGNsb3NlLCBGQUlMICovCi0JICAgIGlmIChzdWNjZXNzKSBmaWxyZWorKzsKLQkgICAgc3Vj Y2VzcyA9IDA7Ci0JfQotCWlmICghY2FsaWJyYXRlKSB7Ci0JICAgIC8qIFNldCBmaWxlIG1vZGlm aWNhdGlvbiBkYXRlIGFuZC9vciBwZXJtaXNzaW9ucyAqLwotCSAgICBpZiAoc3VjY2VzcykKLQkg ICAgICB6c3RpbWUoZix5eSwwKTsKLSNpZmRlZiBPUzJPTkxZCi0jaWZkZWYgQ0tfTEFCRUxFRAot CSAgICBpZiAoc3VjY2VzcyAmJiB5eS0+bG9uZ25hbWUubGVuKQotCSAgICAgIG9zMnNldGxvbmdu YW1lKGYsIHl5LT5sb25nbmFtZS52YWwpOwotI2VuZGlmIC8qIENLX0xBQkVMRUQgKi8KLSNlbmRp ZiAvKiBPUzJPTkxZICovCi0JfQotCWlmIChzdWNjZXNzID09IDApIHsJCS8qIEFuZCBwcm9ncmFt IHJldHVybiBjb2RlICovCi0JICAgIHhpdHN0YSB8PSBXX1JFQ1Y7Ci0JfSBlbHNlIGlmIChzdWNj ZXNzID09IDEpIHsJLyogRmlsZSByZWMnZCBzdWNjZXNzZnVsbHkgKi8KLQkgICAgbWFrZXN0cigm cnJmc3BlYyxwcnJmc3BlYyk7CS8qIFJlY29yZCBpdCBmb3Igd2hlcmVtc2cgKi8KLQkgICAgbWFr ZXN0cigmcmZzcGVjLHByZnNwZWMpOwotCX0KLQotLyogSGFuZGxlIGRpc3Bvc2l0aW9ucyBmcm9t IGF0dHJpYnV0ZSBwYWNrZXQuLi4gKi8KLQotCWMgPSBOVUw7Ci0jaWZuZGVmIE5PRlJJTExTCi0J aWYgKCFjYWxpYnJhdGUgJiYgeXktPmRpc3AubGVuICE9IDApIHsKLQkgICAgcCA9IHl5LT5kaXNw LnZhbDsKLQkgICAgYyA9ICpwKys7Ci0jaWZuZGVmIFVOSVgKLS8qCi0gIFNlZSBja2Nwcm8udy4g IEluIFVOSVggd2UgZG9uJ3QgdXNlIHRlbXAgZmlsZXMgYW55IG1vcmUgLS0gd2UgcGlwZSB0aGUK LSAgc3R1ZmYgcmlnaHQgaW50byBtYWlsIG9yIGxwci4KLSovCi0JICAgIGlmIChjID09ICdNJykg ewkJLyogTWFpbCB0byB1c2VyLiAqLwotCQlyYyA9IHptYWlsKHAsZmlsbmFtKTsJLyogRG8gdGhl IHN5c3RlbSdzIG1haWwgY29tbWFuZCAqLwotCQlpZiAocmMgPCAwKSBzdWNjZXNzID0gMDsJLyog UmVtZW1iZXIgc3RhdHVzICovCi0JCXRsb2coRjExMCwibWFpbGVkIixmaWxuYW0sMEwpOwotCQl0 bG9nKEYxMTAsIiB0byIscCwwTCk7Ci0JCXpkZWxldChmaWxuYW0pOwkJLyogRGVsZXRlIHRoZSBm aWxlICovCi0JICAgIH0gZWxzZSBpZiAoYyA9PSAnUCcpIHsJLyogUHJpbnQgdGhlIGZpbGUuICov Ci0JCXJjID0genByaW50KHAsZmlsbmFtKTsJLyogRG8gdGhlIHN5c3RlbSdzIHByaW50IGNvbW1h bmQgKi8KLQkJaWYgKHJjIDwgMCkgc3VjY2VzcyA9IDA7IC8qIFJlbWVtYmVyIHN0YXR1cyAqLwot CQl0bG9nKEYxMTAsInByaW50ZWQiLGZpbG5hbSwwTCk7Ci0JCXRsb2coRjExMCwiIHdpdGggb3B0 aW9ucyIscCwwTCk7Ci0jaWZuZGVmIFZNUwotI2lmbmRlZiBTVFJBVFVTCi0JCS8qIHNwb29sZXIg ZGVsZXRlcyBmaWxlIGFmdGVyIHByaW50IGNvbXBsZXRlIGluIFZPUyAmIFZNUyAqLwotCQlpZiAo emRlbGV0KGZpbG5hbSkgJiYgcmMgPT0gMCkgcmMgPSAzOyAvKiBEZWxldGUgdGhlIGZpbGUgKi8K LSNlbmRpZiAvKiBTVFJBVFVTICovCi0jZW5kaWYgLyogVk1TICovCi0JICAgIH0KLSNlbmRpZiAv KiBVTklYICovCi0JfQotI2VuZGlmIC8qIE5PRlJJTExTICovCi0KLQlpZiAoc3VjY2VzcyAmJgot CSAgICAhcGlwZXNlbmQgJiYKLQkgICAgIWNhbGlicmF0ZSAmJiBjICE9ICdNJyAmJiBjICE9ICdQ JykgewotCSAgICBpZiAocmN2X21vdmUpIHsJCS8qIElmIC9NT1ZFLVRPIHdhcyBnaXZlbi4uLiAq LwotCQljaGFyICogcCA9IHJjdl9tb3ZlOwotI2lmZGVmIENPTU1FTlQKLS8qIE5vIG5lZWQgZm9y IHRoaXMgLSBpdCdzIGEgZGlyZWN0b3J5IG5hbWUgKi8KLQkJY2hhciB0bXBidWZbQ0tNQVhQQVRI KzFdOwotCQlleHRlcm4gaW50IGNtZF9xdW90aW5nOwkvKiBmb3IgXHYoZmlsZW5hbWUpICovCi0J CWlmIChjbWRfcXVvdGluZykgewkvKiBCdXQgb25seSBpZiBjbWRfcXVvdGluZyBpcyBvbiAqLwot CQkgICAgaW50IG47Ci0JCSAgICBuID0gQ0tNQVhQQVRIOwotCQkgICAgcCA9IHRtcGJ1ZjsKLQkJ ICAgIGRlYnVnKEYxMTEsInJlb2YgL21vdmUtdG8iLHJjdl9tb3ZlLDApOwotCQkgICAgenpzdHJp bmcocmN2X21vdmUsJnAsJm4pOwotCQkgICAgcCA9IHRtcGJ1ZjsKLQkJfQotI2VuZGlmIC8qIENP TU1FTlQgKi8KLS8qCi0gIEhlcmUgd2UgY291bGQgY3JlYXRlIHRoZSBkaXJlY3RvcnkgaWYgaXQg ZGlkbid0IGV4aXN0IChhbmQgaXQgd2FzIHJlbGF0aXZlKQotICBidXQgdGhlcmUgd291bGQgaGF2 ZSB0byBiZSBhIHVzZXItc2V0dGFibGUgb3B0aW9uIHRvIHNheSB3aGV0aGVyIHRvIGRvIHRoaXMu Ci0qLwotCQlyYyA9IHpyZW5hbWUoZmlsbmFtLHApOwotCQlkZWJ1ZyhGMTExLCJyZW9mIE1PVkUg enJlbmFtZSIscmN2X21vdmUscmMpOwotCQlpZiAocmMgPiAtMSkgewotCQkgICAgdGxvZyhGMTEw LCIgbW92aW5nIHJlY2VpdmVkIGZpbGUgdG8iLHJjdl9tb3ZlLDApOwotCQl9IGVsc2UgewotCQkg ICAgcmMgPSAtNDsKLQkJICAgIHRsb2coRjExMCwiIEZBSUxFRCB0byBtb3ZlIHJlY2VpdmVkIGZp bGUgdG8iLHJjdl9tb3ZlLDApOwotCQl9Ci0JICAgIH0gZWxzZSBpZiAocmN2X3JlbmFtZSkgewkv KiBPciAvUkVOQU1FLVRPOiAqLwotCQljaGFyICpzID0gcmN2X3JlbmFtZTsJLyogVGhpcyBpcyB0 aGUgcmVuYW1pbmcgc3RyaW5nICovCi0jaWZuZGVmIE5PU1BMCi0JCWNoYXIgdG1wbmFtW0NLTUFY UEFUSCsxNl07Ci0JCWV4dGVybiBpbnQgY21kX3F1b3Rpbmc7CS8qIGZvciBcdihmaWxlbmFtZSkg Ki8KLQkJaWYgKGNtZF9xdW90aW5nKSB7CS8qIEJ1dCBvbmx5IGlmIGNtZF9xdW90aW5nIGlzIG9u ICovCi0JCSAgICBpbnQgbjsJCS8qIFBhc3MgaXQgdGhydSB0aGUgZXZhbHVhdG9yICovCi0JCSAg ICBuID0gQ0tNQVhQQVRIOwotCQkgICAgcyA9IChjaGFyICopdG1wbmFtOwotCQkgICAgenpzdHJp bmcocmN2X3JlbmFtZSwmcywmbik7Ci0JCSAgICBzID0gKGNoYXIgKil0bXBuYW07Ci0JCX0KLSNl bmRpZiAvKiBOT1NQTCAqLwotCQlpZiAocykgaWYgKCpzKSB7Ci0JCSAgICByYyA9IHpyZW5hbWUo ZmlsbmFtLHMpOwotCQkgICAgZGVidWcoRjExMSwicmVvZiBSRU5BTUUgenJlbmFtZSIscyxyYyk7 Ci0JCSAgICBpZiAocmMgPiAtMSkgewotCQkJdGxvZyhGMTEwLCIgcmVuYW1pbmcgcmVjZWl2ZWQg ZmlsZSB0byIscywwKTsKLQkJICAgIH0gZWxzZSB7Ci0JCQlyYyA9IC01OwotCQkJdGxvZyhGMTEw LCIgRkFJTEVEIHRvIHJlbmFtZSByZWNlaXZlZCBmaWxlIHRvIixzLDApOwotCQkgICAgfQotCQl9 Ci0JICAgIH0KLQl9Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsInJlb2Ygc3VjY2VzcyIsIiIsc3Vj Y2Vzcyk7Ci0gICAgZGVidWcoRjEwMSwicmVvZiByZXR1cm5zIiwiIixyYyk7Ci0KLSAgICBmaWxu YW1bMF0gPSBOVUw7CQkJLyogRXJhc2UgdGhlIGZpbGVuYW1lICovCi0gICAgcmV0dXJuKHJjKTsK LX0KLQotLyogIFIgRSBPIFQgIC0tICBSZWNlaXZlIEVuZCBPZiBUcmFuc2FjdGlvbiAgKi8KLQot Vk9JRAotcmVvdCgpIHsKLSAgICBjeHNlZW4gPSBjenNlZW4gPSBkaXNjYXJkID0gMDsJLyogUmVz ZXQgaW50ZXJydXB0aW9uIGZsYWdzICovCi0gICAgdHN0YXRzKCk7CQkJCS8qIEZpbmFsaXplIHRy YW5zZmVyIHN0YXRpc3RpY3MgKi8KLX0KLQotLyogIFMgRiBJIEwgRSAtLSBTZW5kIEZpbGUgaGVh ZGVyIG9yIHRlWHQgaGVhZGVyIHBhY2tldCAgKi8KLQotLyoKLSAgQ2FsbCB3aXRoIHggbm9uemVy byBmb3IgWCBwYWNrZXQsIHplcm8gZm9yIEYgcGFja2V0LgotICBJZiBYID09IDAsIGZpbGVuYW1l IHRvIHNlbmQgaXMgaW4gZmlsbmFtW10sIGFuZCBpZiBjbWFyZzIgaXMgbm90IG51bGwKLSAgb3Ig ZW1wdHksIHRoZSBmaWxlIHNob3VsZCBiZSBzZW50IHVuZGVyIHRoaXMgbmFtZSByYXRoZXIgdGhh biBmaWxuYW1bXS4KLSAgSWYgc25kZmlsdGVyIG5vdCBOVUxMLCBpdCBpcyB0aGUgbmFtZSBvZiBh IHNlbmQgZmlsdGVyLgotICBSZXR1cm5zIDEgb24gc3VjY2VzcywgMCBvbiBmYWlsdXJlLgotKi8K LWludAotc2ZpbGUoeCkgaW50IHg7IHsKLSNpZmRlZiBwZHAxMQotI2RlZmluZSBQS1ROTCA2NAot I2Vsc2UKLSNkZWZpbmUgUEtUTkwgMjU2Ci0jZW5kaWYgLyogcGRwMTEgKi8KLSAgICBjaGFyIHBr dG5hbVtQS1ROTCsxXTsJCS8qIExvY2FsIGNvcHkgb2YgbmFtZSAqLwotICAgIGNoYXIgKnM7Ci0g ICAgaW50IHJjOwotICAgIGludCBub3RhZmlsZSA9IDA7Ci0gICAgZXh0ZXJuIGludCBmaWxlcGVl azsKLSNpZmRlZiBQSVBFU0VORAotICAgIGV4dGVybiBjaGFyICogc25kZmlsdGVyOwotCi0gICAg aWYgKHNuZGZpbHRlcikgewotCXBpcGVzZW5kID0gMTsKLQlkZWJ1ZyhGMTEwLCJzZmlsZSBzZW5k IGZpbHRlciAiLHNuZGZpbHRlciwwKTsKLSAgICB9Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLQot ICAgIG5vdGFmaWxlID0gY2FsaWJyYXRlIHx8IHNuZGFycmF5IHx8IHBpcGVzZW5kIHx8IHg7Ci0g ICAgZGVidWcoRjEwMSwic2ZpbGUgeCIsIiIseCk7Ci0gICAgZGVidWcoRjEwMSwic2ZpbGUgbm90 YWZpbGUiLCIiLG5vdGFmaWxlKTsKLQotI2lmbmRlZiBOT0NTRVRTCi0gICAgaWYgKHRjc19zYXZl ID4gLTEpIHsgICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVyIHNldHMgKi8KLSAgICAgICAgdGNo YXJzZXQgPSB0Y3Nfc2F2ZTsKLSAgICAgICAgdGNzX3NhdmUgPSAtMTsKLQlkZWJ1ZyhGMTAxLCJz ZmlsZSByZXN0b3JlZCB0Y2hhcnNldCIsIiIsdGNoYXJzZXQpOwotICAgIH0KLSAgICBpZiAoZmNz X3NhdmUgPiAtMSkgewotICAgICAgICBmY2hhcnNldCA9IGZjc19zYXZlOwotICAgICAgICBmY3Nf c2F2ZSA9IC0xOwotCWRlYnVnKEYxMDEsInNmaWxlIHJlc3RvcmVkIGZjaGFyc2V0IiwiIixmY2hh cnNldCk7Ci0gICAgfQotICAgIHNldHhsYXR5cGUodGNoYXJzZXQsZmNoYXJzZXQpOyAgICAgIC8q IFRyYW5zbGF0aW9uIHR5cGUgKi8KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSAgICAvKiBjbWFy ZzIgb3IgZmlsbmFtICh3aXRoIHRoYXQgcHJlY2VkZW5jZSkgaGF2ZSB0aGUgZmlsZSdzIG5hbWUg Ki8KLQotICAgIGxzc3RhdGUgPSAwOwkJCS8qIENhbmNlbCBsb2NraW5nLXNoaWZ0IHN0YXRlICov Ci0jaWZkZWYgQ09NTUVOVAotICAgIC8qIERvIHRoaXMgYWZ0ZXIgbWFraW5nIHN1cmUgd2UgY2Fu IG9wZW4gdGhlIGZpbGUgKi8KLSAgICBpZiAobnh0cGt0KCkgPCAwKSByZXR1cm4oMCk7CS8qIEJ1 bXAgcGFja2V0IG51bWJlciwgZ2V0IGJ1ZmZlciAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAg ICBwa3RuYW1bMF0gPSBOVUw7CQkJLyogQnVmZmVyIGZvciBuYW1lIHdlIHdpbGwgc2VuZCAqLwot ICAgIGlmICh4ID09IDApIHsJCQkvKiBGLVBhY2tldCBzZXR1cCAqLwotCWlmICghY21hcmcyKSBj bWFyZzIgPSAiIjsKLSNpZmRlZiBERUJVRwotCWlmIChkZWJsb2cpIHsKLQkgICAgLyogZGVidWco RjExMSwic2ZpbGUgY21hcmcyIixjbWFyZzIsY21hcmcyKTsgKi8KLQkgICAgZGVidWcoRjEwMSwi c2ZpbGUgYmluYXJ5IDEiLCIiLGJpbmFyeSk7Ci0JICAgIGRlYnVnKEYxMDEsInNmaWxlIHdlYXJl YWxpa2UiLCIiLHdlYXJlYWxpa2UpOwotCSAgICBkZWJ1ZyhGMTAxLCJzZmlsZSB4ZmVybW9kZSIs IiIseGZlcm1vZGUpOwotCSAgICBkZWJ1ZyhGMTAxLCJzZmlsZSBmaWxlcGVlayIsIiIsZmlsZXBl ZWspOwotI2lmbmRlZiBOT0NTRVRTCi0JICAgIGRlYnVnKEYxMDEsInNmaWxlIHNfY3NldCIsIiIs c19jc2V0KTsKLQkgICAgZGVidWcoRjEwMSwic2ZpbGUgdGNoYXJzZXQiLCIiLHRjaGFyc2V0KTsK LQkgICAgZGVidWcoRjEwMSwic2ZpbGUgeGZyeGxhIiwiIix4ZnJ4bGEpOwotI2VuZGlmIC8qIE5P Q1NFVFMgKi8KLQl9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQlpZiAoeGZlcm1vZGUgPT0gWE1PREVf QQkJLyogVFJBTlNGRVIgTU9ERSBBVVRPTUFUSUMgKi8KLSNpZm5kZWYgTk9NU0VORAotCSAgICAm JiAhYWRkbGlzdAkJCS8qIEFuZCBub3Qgd29ya2luZyBmcm9tIGEgU0VORC1MSVNUICovCi0jZW5k aWYgLyogTk9NU0VORCAqLwotCSAgICApIHsKLQkgICAgLyogT3RoZXIgS2VybWl0IGlzIG9uIGEg bGlrZSBzeXN0ZW0gYW5kIG5vIGNoYXJzZXQgdHJhbnNsYXRpb24gKi8KLQkgICAgaWYgKHdlYXJl YWxpa2UKLSNpZm5kZWYgTk9DU0VUUwotCQkmJiAodGNoYXJzZXQgPT0gVENfVFJBTlNQIHx8IHhm cnhsYSA9PSAwKQotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQkJKSB7Ci0jaWZkZWYgVk1TCi0JCWlm IChiaW5hcnkgIT0gWFlGVF9JKQotI2VuZGlmIC8qIFZNUyAqLwotI2lmZGVmIENLX0xBQkVMRUQK LQkJICBpZiAoYmluYXJ5ICE9IFhZRlRfTCkKLSNlbmRpZiAvKiBDS19MQUJFTEVEICovCi0JCSAg ICBiaW5hcnkgPSBYWUZUX0I7CS8qIFNlbmQgYWxsIGZpbGVzIGluIGJpbmFyeSBtb2RlICovCi0J ICAgIH0KLQotCSAgICAvKiBPdGhlcndpc2Ugc2VsZWN0IHRyYW5zZmVyIG1vZGUgYmFzZWQgb24g ZmlsZSBpbmZvICovCi0KLQkgICAgZWxzZSBpZiAoIW5vdGFmaWxlCQkvKiBidXQgbm90IGlmIHNl bmRpbmcgZnJvbSBwaXBlICovCi0jaWZkZWYgQ0tfTEFCRUxFRAotCQkgICAgICYmIGJpbmFyeSAh PSBYWUZUX0wgLyogYW5kIG5vdCBpZiBGSUxFIFRZUEUgTEFCRUxFRCAqLwotI2VuZGlmIC8qIENL X0xBQkVMRUQgKi8KLSNpZmRlZiBWTVMKLQkJICAgICAmJiBiaW5hcnkgIT0gWFlGVF9JIC8qIG9y IEZJTEUgVFlQRSBJTUFHRSAqLwotI2VuZGlmIC8qIFZNUyAqLwotCQkgICAgICkgewotI2lmZGVm IFVOSUNPREUKLQkJZmlsZW9yZGVyID0gLTE7CQkvKiBGaWxlIGJ5dGUgb3JkZXIgKi8KLSNlbmRp ZiAvKiBVTklDT0RFICovCi0JCWlmIChmaWxlcGVlayAmJiAhbm90YWZpbGUpIHsgLyogUmVhbCBm aWxlLCBGSUxFIFNDQU4gaXMgT04gKi8KLQkJICAgIGludCBrLCB4OwotCQkgICAgayA9IHNjYW5m aWxlKGZpbG5hbSwmeCxuc2NhbmZpbGUpOyAvKiBTY2FuIHRoZSBmaWxlICovCi0JCSAgICBkZWJ1 ZyhGMTAxLCJzZmlsZSBzY2FuZmlsZSIsIiIsayk7Ci0JCSAgICBzd2l0Y2ggKGspIHsKLQkJICAg ICAgY2FzZSBGVF9URVhUOgkvKiBVbnNwZWNpZmllZCB0ZXh0ICovCi0JCQlkZWJ1ZyhGMTAwLCJz ZmlsZSBzY2FuZmlsZSB0ZXh0IiwiIiwwKTsKLQkJCWJpbmFyeSA9IFhZRlRfVDsgLyogU0VUIEZJ TEUgVFlQRSBURVhUICovCi0JCQlicmVhazsKLSNpZm5kZWYgTk9DU0VUUwotCQkgICAgICBjYXNl IEZUXzdCSVQ6CQkvKiA3LWJpdCB0ZXh0ICovCi0JCQliaW5hcnkgPSBYWUZUX1Q7CS8qIFNFVCBG SUxFIFRZUEUgVEVYVCAqLwotCQkJLyogSWYgU0VORCBDSEFSU0VULVNFTEVDVElPTiBBVVRPICAq LwotCQkJLyogYW5kIFNFVCBUUkFOU0ZFUiBUUkFOU0xBVElPTiBpcyBPTiAqLwotCQkJZGVidWco RjEwMCwic2ZpbGUgc2NhbmZpbGUgdGV4dDciLCIiLDApOwotCQkJaWYgKHNfY3NldCA9PSBYTU9E RV9BICYmIHhmcnhsYSkgewotCQkJICAgIGlmIChmY3NpbmZvW2ZjaGFyc2V0XS5zaXplICE9IDEy OCkgewotCQkJCWZjc19zYXZlID0gZmNoYXJzZXQ7IC8qIEN1cnJlbnQgRkNTIG5vdCA3Yml0ICov Ci0JCQkJZmNoYXJzZXQgPSBkY3NldDc7ICAgLyogVXNlIGRlZmF1bHQgN2JpdCBzZXQgKi8KLQkJ CQlkZWJ1ZyhGMTAxLCJzZmlsZSBzY2FuZmlsZSA3IGZjaGFyc2V0IiwKLQkJCQkgICAgICAiIixm Y2hhcnNldCk7Ci0JCQkgICAgfQotCQkJICAgIC8qIEFuZCBhbHNvIHN3aXRjaCB0byBhcHByb3By aWF0ZSBUQ1MgKi8KLQkJCSAgICBpZiAoYWZjc2V0W2ZjaGFyc2V0XSA+IC0xICYmCi0JCQkJYWZj c2V0W2ZjaGFyc2V0XSA8PSBNQVhUQ1NFVFMpIHsKLQkJCQl0Y3Nfc2F2ZSA9IHRjaGFyc2V0Owot CQkJCXRjaGFyc2V0ID0gYWZjc2V0W2ZjaGFyc2V0XTsKLQkJCQlkZWJ1ZyhGMTAxLCJzZmlsZSBz Y2FuZmlsZSA3IHRjaGFyc2V0IiwiIiwKLQkJCQkgICAgICB0Y2hhcnNldCk7Ci0JCQkgICAgfQot CQkJICAgIHNldHhsYXR5cGUodGNoYXJzZXQsZmNoYXJzZXQpOwotCQkJfQotCQkJYnJlYWs7Ci0K LQkJICAgICAgY2FzZSBGVF84QklUOgkvKiA4LWJpdCB0ZXh0ICovCi0JCQliaW5hcnkgPSBYWUZU X1Q7IC8qIFNFVCBGSUxFIFRZUEUgVEVYVCAqLwotCQkJLyogSWYgU0VORCBDSEFSU0VULVNFTEVD IEFVVE8gICovCi0JCQkvKiBhbmQgU0VUIFRSQU5TRkVSIFRSQU5TTEFUSU9OIGlzIE9OICovCi0J CQlkZWJ1ZyhGMTAwLCJzZmlsZSBzY2FuZmlsZSB0ZXh0OCIsIiIsMCk7Ci0JCQlpZiAoc19jc2V0 ID09IFhNT0RFX0EgJiYgeGZyeGxhKSB7Ci0JCQkgICAgaWYgKGZjc2luZm9bZmNoYXJzZXRdLnNp emUgIT0gMjU2KSB7Ci0JCQkJZmNzX3NhdmUgPSBmY2hhcnNldDsgLyogQ3VycmVudCBGQ1Mgbm90 IDhiaXQgKi8KLQkJCQlmY2hhcnNldCA9IGRjc2V0ODsgLyogVXNlIGRlZmF1bHQgOGJpdCBzZXQg Ki8KLQkJCQlkZWJ1ZyhGMTAxLCJzZmlsZSBzY2FuZmlsZSA4IGZjaGFyc2V0IiwKLQkJCQkgICAg ICAiIixmY2hhcnNldCk7Ci0JCQkgICAgfQotCQkJICAgIC8qIFN3aXRjaCB0byBjb3JyZXNwb25k aW5nIHRyYW5zZmVyIGNoYXJzZXQgKi8KLQkJCSAgICBpZiAoYWZjc2V0W2ZjaGFyc2V0XSA+IC0x ICYmCi0JCQkJYWZjc2V0W2ZjaGFyc2V0XSA8PSBNQVhUQ1NFVFMpIHsKLQkJCQl0Y3Nfc2F2ZSA9 IHRjaGFyc2V0OwotCQkJCXRjaGFyc2V0ID0gYWZjc2V0W2ZjaGFyc2V0XTsKLQkJCQlkZWJ1ZyhG MTAxLCJzZmlsZSBzY2FuZmlsZSA4IHRjaGFyc2V0IiwiIiwKLQkJCQkgICAgICB0Y2hhcnNldCk7 Ci0JCQkgICAgfQotCQkJICAgIHNldHhsYXR5cGUodGNoYXJzZXQsZmNoYXJzZXQpOwotCQkJfQot CQkJYnJlYWs7Ci0jaWZkZWYgVU5JQ09ERQotCQkgICAgICBjYXNlIEZUX1VURjg6CS8qIFVURi04 IHRleHQgKi8KLQkJICAgICAgY2FzZSBGVF9VQ1MyOgkvKiBVQ1MtMiB0ZXh0ICovCi0JCQlkZWJ1 ZyhGMTAxLCJzZmlsZSBzY2FuZmlsZSBVbmljb2RlIiwiIixrKTsKLQkJCWJpbmFyeSA9IFhZRlRf VDsKLQkJCS8qIElmIFNFTkQgQ0hBUlNFVC1TRUxFQyBBVVRPICAqLwotCQkJLyogYW5kIFNFVCBU UkFOU0ZFUiBUUkFOU0xBVElPTiBpcyBPTiAqLwotCQkJaWYgKHNfY3NldCA9PSBYTU9ERV9BICYm IHhmcnhsYSkgewotCQkJICAgIGZjc19zYXZlID0gZmNoYXJzZXQ7Ci0JCQkgICAgdGNzX3NhdmUg PSB0Y2hhcnNldDsKLQkJCSAgICBmY2hhcnNldCA9IChrID09IEZUX1VDUzIpID8gRkNfVUNTMiA6 IEZDX1VURjg7Ci0JCQkgICAgaWYgKGsgPT0gRlRfVUNTMiAmJiB4ID4gLTEpCi0JCQkgICAgICBm aWxlb3JkZXIgPSB4OwotCQkJfQotCQkJLyogU3dpdGNoIHRvIGFzc29jaWF0ZWQgdHJhbnNmZXIg Y2hhcnNldCBpZiBhbnkgKi8KLQkJCWlmIChhZmNzZXRbZmNoYXJzZXRdID4gLTEgJiYKLQkJCSAg ICBhZmNzZXRbZmNoYXJzZXRdIDw9IE1BWFRDU0VUUykKLQkJCSAgdGNoYXJzZXQgPSBhZmNzZXRb ZmNoYXJzZXRdOwotCQkJaWYgKHRjaGFyc2V0ID09IFRDX1RSQU5TUCkgLyogSWYgbm9uZSAqLwot CQkJICB0Y2hhcnNldCA9IFRDX1VURjg7ICAgICAgLyogdXNlIFVURi04ICovCi0JCQlzZXR4bGF0 eXBlKHRjaGFyc2V0LGZjaGFyc2V0KTsKLQkJCWRlYnVnKEYxMDEsInNmaWxlIFVuaWNvZGUgdGNo YXJzZXQiLCIiLHRjaGFyc2V0KTsKLQkJCWJyZWFrOwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSNl bmRpZiAvKiBOT0NTRVRTICovCi0JCSAgICAgIGNhc2UgRlRfQklOOgotCQkJZGVidWcoRjEwMSwi c2ZpbGUgc2NhbmZpbGUgYmluYXJ5IiwiIixrKTsKLQkJCWJpbmFyeSA9IFhZRlRfQjsKLQkJCWJy ZWFrOwotCQkgICAgLyogRGVmYXVsdDogRG9uJ3QgY2hhbmdlIGFueXRoaW5nICovCi0JCSAgICB9 Ci0JCX0KLQkgICAgfQotCSAgICBkZWJ1ZyhGMTAxLCJzZmlsZSBiaW5hcnkgMiIsIiIsYmluYXJ5 KTsKLQkgICAgZGVidWcoRjEwMSwic2ZpbGUgc2VuZG1vZGUiLCIiLHNlbmRtb2RlKTsKLQl9Ci0g ICAgCWlmICgqY21hcmcyKSB7CQkJLyogSWYgd2UgaGF2ZSBhIHNlbmQtYXMgbmFtZS4uLiAqLwot CSAgICBpbnQgeTsgY2hhciAqczsKLSNpZm5kZWYgTk9TUEwJCQkJLyogYW5kIGEgc2NyaXB0IHBy b2dyYW1taW5nIGxhbmd1YWdlICovCi0JICAgIGV4dGVybiBpbnQgY21kX3F1b3Rpbmc7Ci0JICAg IGlmIChjbWRfcXVvdGluZykgewkJLyogYW5kIGl0J3Mgbm90IHR1cm5lZCBvZmYgKi8KLQkJeSA9 IFBLVE5MOwkJLyogcGFzcyBhcy1uYW1lIHRocnUgdGhlIGV2YWx1YXRvciAqLwotCQlzID0gcGt0 bmFtOwotCQl6enN0cmluZyhjbWFyZzIsJnMsJnkpOwotI2lmZGVmIENPTU1FTlQKLS8qIFRoaXMg cnVpbnMgbWFjcm9zIGxpa2UgQlNFTkQgKi8KLQkJaWYgKCFwa3RuYW1bMF0pCQkvKiBhbmQgbWFr ZSBzdXJlIHJlc3VsdCBpcyBub3QgZW1wdHkgKi8KLQkJICBzcHJpbnRmKHBrdG5hbSwiRklMRSUw MmxkIixmaWxjbnQpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkgICAgfSBlbHNlCi0jZW5kaWYg LyogTk9TUEwgKi8KLQkgICAgICBja3N0cm5jcHkocGt0bmFtLGNtYXJnMixQS1ROTCk7IC8qIGNv cHkgaXQgbGl0ZXJhbGx5LCAqLwotCi0JICAgIGRlYnVnKEYxMTAsInNmaWxlIHBrdG5hbSIscGt0 bmFtLDApOwotI2lmZGVmIENPTU1FTlQKLS8qIFdlIGRvbid0IGRvIHRoaXMgYW55IG1vcmUgYmVj YXVzZSBub3cgd2UgaGF2ZSBmaWxlbmFtZSB0ZW1wbGF0ZXMgKi8KLQkgICAgY21hcmcyID0gIiI7 CQkvKiBhbmQgYmxhbmsgaXQgb3V0IGZvciBuZXh0IHRpbWUuICovCi0jZW5kaWYgLyogQ09NTUVO VCAqLwotICAgIAl9Ci0JaWYgKCEqcGt0bmFtKSB7CQkJLyogTm8gYXMtbmFtZS4uLiAqLwotI2lm ZGVmIE5aTFRPUgotCSAgICBpbnQgeGZuY252LCB4cGF0aDsKLQkgICAgZGVidWcoRjEwMSwic2Zp bGUgZm5zcGF0aCIsIiIsZm5zcGF0aCk7Ci0JICAgIGRlYnVnKEYxMDEsInNmaWxlIGZuY252Iiwi IixmbmNudik7Ci0JICAgIHhmbmNudiA9IGZuY252OwotCSAgICB4cGF0aCA9IGZuc3BhdGg7Ci0J ICAgIGlmIChub3RhZmlsZSkgewkJLyogSWYgbm90IGFuIGFjdHVhbCBmaWxlICovCi0JCXhmbmNu diA9IDA7CQkvKiBEb24ndCBjb252ZXJ0IG5hbWUgKi8KLQkJeHBhdGggPSBQQVRIX09GRjsJLyog TGVhdmUgcGF0aCBvZmYgKi8KLQkgICAgfSBlbHNlIGlmICh4Zm5jbnYgJiYKLQkJICAgICAgICgh c3RyY21wKHdob2FyZXUsIlUxIikgfHwgIXN0cmNtcCh3aG9hcmV1LCJVTiIpKQotCQkgICAgICAg KSB7Ci0JCS8qIExlc3Mtc3RyaWN0IGNvbnZlcnNpb24gaWYgcGFydG5lciBpcyBVTklYIG9yIFdp bjMyICovCi0JCXhmbmNudiA9IC0xOwotCSAgICB9Ci0JICAgIGRlYnVnKEYxMDEsInNmaWxlIHhw YXRoIiwiIix4cGF0aCk7Ci0JICAgIGRlYnVnKEYxMDEsInNmaWxlIHhmbmNudiIsIiIseGZuY252 KTsKLQkgICAgbnpsdG9yKGZpbG5hbSxwa3RuYW0seGZuY252LHhwYXRoLFBLVE5MKTsKLQotI2Vs c2UgIC8qIE5vdCBOWkxUT1IgKi8KLQotCSAgICBkZWJ1ZyhGMTAxLCJzZmlsZSBmbnNwYXRoIiwi IixmbnNwYXRoKTsKLQkgICAgaWYgKGZuc3BhdGggPT0gUEFUSF9PRkYJLyogU3RyaXBwaW5nIHBh dGggbmFtZXM/ICovCi0JCSYmICghbm90YWZpbGUpCQkvKiAob2YgYWN0dWFsIGZpbGVzKSAqLwot CQkpIHsKLQkJY2hhciAqdDsJCS8qIFllcy4gKi8KLQkJenN0cmlwKGZpbG5hbSwmdCk7CS8qIFN0 cmlwIG9mZiB0aGUgcGF0aC4gKi8KLQkJZGVidWcoRjExMCwic2ZpbGUgenN0cmlwIix0LDApOwot CQlpZiAoIXQpIHQgPSAiVU5LTk9XTiI7CS8qIEJlIGNhdXRpb3VzLi4uICovCi0JCWVsc2UgaWYg KCp0ID09ICdcMCcpCi0JCSAgdCA9ICJVTktOT1dOIjsKLQkJY2tzdHJuY3B5KHBrdG5hbSx0LFBL VE5MKTsgLyogQ29weSBzdHJpcHBlZCBuYW1lIGxpdGVyYWxseS4gKi8KLQkgICAgfSBlbHNlIGlm IChmbnNwYXRoID09IFBBVEhfQUJTICYmICFub3RhZmlsZSkgewotCQkvKiBDb252ZXJ0aW5nIHRv IGFic29sdXRlIGZvcm0gKi8KLQkJemZucWZwKGZpbG5hbSxQS1ROTCxwa3RuYW0pOwotCSAgICB9 IGVsc2UKLQkJY2tzdHJuY3B5KHBrdG5hbSxmaWxuYW0sUEtUTkwpOwotCi0JICAgIC8qIHBrdG5h bVtdIGhhcyB0aGUgcGFja2V0IG5hbWUsIGZpbG5hbVtdIGhhcyB0aGUgb3JpZ2luYWwgbmFtZS4g Ki8KLQkgICAgLyogQnV0IHdlIHN0aWxsIG5lZWQgdG8gY29udmVydCBwa3RuYW0gaWYgRklMRSBO QU1FUyBDT05WRVJURUQuICAqLwotCi0JICAgIGRlYnVnKEYxMDEsInNmaWxlIGZuY252IiwiIixm bmNudik7Ci0JICAgIGlmIChmbmNudiAmJiAhbm90YWZpbGUpIHsJLyogSWYgY29udmVydGluZyBu YW1lcyBvZiBmaWxlcyAqLwotCQl6bHRvcihwa3RuYW0sKGNoYXIgKilzcnZjbWQpOyAvKiBjb252 ZXJ0IGl0IHRvIGNvbW1vbiBmb3JtLCAqLwotCQlja3N0cm5jcHkocGt0bmFtLChjaGFyICopc3J2 Y21kLFBLVE5MKTsKLQkJKnNydmNtZCA9IE5VTDsKLQkgICAgfQotI2VuZGlmIC8qIE5aTFRPUiAq LwotICAgIAl9Ci0JaWYgKCEqcGt0bmFtKQkJCS8qIEZhaWxzYWZlLi4uICovCi0JICBzcHJpbnRm KHBrdG5hbSwiRklMRSUwMmxkIixmaWxjbnQpOwotCWRlYnVnKEYxMTAsInNmaWxlIGZpbG5hbSAx IixmaWxuYW0sMCk7Ci0JZGVidWcoRjExMCwic2ZpbGUgcGt0bmFtIDEiLHBrdG5hbSwwKTsKLSNp ZmRlZiBQSVBFU0VORAotLyogSWYgd2UgaGF2ZSBhIHNlbmQgZmlsdGVyLCBzdWJzdGl0dXRlIHRo ZSBjdXJyZW50IGZpbGVuYW1lIGludG8gaXQgKi8KLQotCWlmIChzbmRmaWx0ZXIpIHsKLQkgICAg Y2hhciAqIHAgPSBOVUxMLCAqIHE7Ci0JICAgIGludCBuID0gQ0tNQVhQQVRIOwotI2lmbmRlZiBO T1NQTAotCSAgICBpZiAoKHAgPSAoY2hhciAqKSBtYWxsb2MobiArIDEpKSkgewotCQlxID0gcDsK LQkJZGVidWcoRjExMCwic2ZpbGUgcGlwZXNlbmQgZmlsdGVyIixzbmRmaWx0ZXIsMCk7Ci0JCXp6 c3RyaW5nKHNuZGZpbHRlciwmcCwmbik7Ci0JCWRlYnVnKEYxMTEsInNmaWxlIHBpcGVuYW1lIixx LG4pOwotCQlpZiAobiA8PSAwKSB7Ci0JCSAgICBwcmludGYoCi0JCQkgICI/U29ycnksIHNlbmQg ZmlsdGVyICsgZmlsZW5hbWUgdG9vIGxvbmcsICVkIG1heC5cbiIsCi0JCQkgICBDS01BWFBBVEgK LQkJCSAgICk7Ci0JCSAgICBmcmVlKHEpOwotCQkgICAgcmV0dXJuKDApOwotCQl9Ci0JCWNrc3Ry bmNweShmaWxuYW0scSxDS01BWFBBVEgrMSk7Ci0JCWZyZWUocSk7Ci0JICAgIH0KLSNlbmRpZiAv KiBOT1NQTCAqLwotCX0KLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotCi0gICAgCWRlYnVnKEYxMTAs InNmaWxlIGZpbG5hbSAyIixmaWxuYW0sMCk7IC8qIExvZyBkZWJ1Z2dpbmcgaW5mbyAqLwotICAg IAlkZWJ1ZyhGMTEwLCJzZmlsZSBwa3RuYW0gMiIscGt0bmFtLDApOwotICAgIAlpZiAob3Blbmko ZmlsbmFtKSA9PSAwKSAJLyogVHJ5IHRvIG9wZW4gdGhlIGlucHV0IGZpbGUgKi8KLQkgIHJldHVy bigwKTsKLQotI2lmZGVmIENLX1JFU0VORAotLyoKLSAgVGhlIGZvbGxvd2luZyBjaGVjayBpcyBk b25lIGFmdGVyIG9wZW5pKCkgaXMgY2FsbGVkLCBzaW5jZSBvcGVuaSgpIGl0c2VsZgotICBjYW4g Y2hhbmdlIHRoZSB0cmFuc2ZlciBtb2RlIChhcyBpbiBWTVMpLgotKi8KLSAgICAgICAgaWYgKChi aW5hcnkgPT0gWFlGVF9UCi0jaWZkZWYgVk1TCi0JICAgICB8fCBiaW5hcnkgPT0gWFlGVF9MCi0j ZW5kaWYgLyogVk1TICovCi0JICAgICApICYmIHNlbmRtb2RlID09IFNNX1JFU0VORCkgewotICAg ICAgICAgICAgLyogVHJ5aW5nIHRvIFJFU0VORC9SRUdFVCBhIGZpbGUgZmlyc3Qgc2VudCBpbiBU RVhUIG1vZGUuICovCi0JICAgIGRlYnVnKEYxMTEsInNmaWxlIGVycm9yIC0gUmVjb3ZlciB2cyBU ZXh0IixmaWxuYW0sYmluYXJ5KTsKLSAgICAgICAgICAgIC8qIFNldCBhcHByb3ByaWF0ZSBlcnJv ciBtZXNzYWdlcyBhbmQgbWFrZSBsb2cgZW50cmllcyBoZXJlICovCi0jaWZkZWYgVk1TCi0JICAg IGlmIChiaW5hcnkgPT0gWFlGVF9MKQotCSAgICAgIGNrbWFrbXNnKChjaGFyICopZXBrdG1zZywK LQkJICAgICAgIFBLVE1TR0xFTiwKLQkJICAgICAgICJSZWNvdmVyeSBhdHRlbXB0ZWQgaW4gTEFC RUxFRCBtb2RlOiAiLAotCQkgICAgICAgZmlsbmFtLAotCQkgICAgICAgTlVMTCwKLQkJICAgICAg IE5VTEwKLQkJICAgICAgICk7Ci0JICAgIGVsc2UKLSNlbmRpZiAvKiBWTVMgKi8KLQkgICAgICBj a21ha21zZygoY2hhciAqKWVwa3Rtc2csCi0JCSAgICAgICBQS1RNU0dMRU4sCi0JCSAgICAgICAi UmVjb3ZlcnkgYXR0ZW1wdGVkIGluIFRFWFQgbW9kZTogIiwKLQkJICAgICAgIGZpbG5hbSwKLQkJ ICAgICAgIE5VTEwsCi0JCSAgICAgICBOVUxMCi0JCSAgICAgICApOwotICAgICAgICAgICAgcmV0 dXJuKDApOwotICAgICAgICB9Ci0JaWYgKHNlbmRtb2RlID09IFNNX1BTRU5EKQkvKiBQU0VORGlu Zz8gKi8KLQkgIGlmIChzZW5kc3RhcnQgPiAoQ0tfT0ZGX1QpMCkJLyogU3RhcnRpbmcgcG9zaXRp b24gKi8KLQkgICAgaWYgKHpmc2VlayhzZW5kc3RhcnQpIDwgMCkJLyogc2VlayB0byBpdC4uLiAq LwotCSAgICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBDS19SRVNFTkQgKi8KLSAgICAJcyA9IHBr dG5hbTsJCQkvKiBOYW1lIGZvciBwYWNrZXQgZGF0YSBmaWVsZCAqLwotI2lmZGVmIE9TMgotCS8q IE5ldmVyIHNlbmQgYSBkaXNrIGxldHRlci4gKi8KLQlpZiAoaXNhbHBoYSgqcykgJiYgKCoocysx KSA9PSAnOicpKQotCSAgcyArPSAyOwotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAgfSBlbHNlIHsJ CQkJLyogWC1wYWNrZXQgc2V0dXAsIG5vdCBGLXBhY2tldC4gKi8KLQliaW5hcnkgPSBYWUZUX1Q7 CQkvKiBUZXh0IGFsd2F5cyAqLwotICAgIAlkZWJ1ZyhGMTEwLCJzZmlsZSBYIHBhY2tldCIsY21k c3RyLDApOyAvKiBMb2cgZGVidWdnaW5nIGluZm8gKi8KLSAgICAJcyA9IGNtZHN0cjsJCQkvKiBO YW1lIGZvciBkYXRhIGZpZWxkICovCi0gICAgfQotCi0gICAgLyogTm93IHMgcG9pbnRzIHRvIHRo ZSBzdHJpbmcgdGhhdCBnb2VzIGluIHRoZSBwYWNrZXQgZGF0YSBmaWVsZC4gKi8KLQotICAgIGRl YnVnKEYxMDEsInNmaWxlIGJpbmFyeSIsIiIsYmluYXJ5KTsgLyogTG9nIGRlYnVnZ2luZyBpbmZv ICovCi0gICAgZW5jc3RyKChDSEFSICopcyk7CQkJLyogRW5jb2RlIHRoZSBuYW1lLiAqLwotCQkJ CQkvKiBTZW5kIHRoZSBGIG9yIFggcGFja2V0ICovCi0gICAgLyogSWYgdGhlIGVuY29kZWQgc3Ry aW5nIGRpZCBub3QgZml0IGludG8gdGhlIHBhY2tldCwgaXQgd2FzIHRydW5jYXRlZC4gKi8KLQot ICAgIGlmIChueHRwa3QoKSA8IDApIHJldHVybigwKTsJLyogQnVtcCBwYWNrZXQgbnVtYmVyLCBn ZXQgYnVmZmVyICovCi0KLSAgICByYyA9IHNwYWNrKChjaGFyKSAoeCA/ICdYJyA6ICdGJyksIHBr dG51bSwgc2l6ZSwgZGF0YSk7Ci0gICAgaWYgKHJjIDwgMCkKLSAgICAgIHJldHVybihyYyk7Ci0K LSNpZm5kZWYgTk9DU0VUUwotICAgIHNldHhsYXR5cGUodGNoYXJzZXQsZmNoYXJzZXQpOwkvKiBT ZXQgdXAgY2hhcnNldCB0cmFuc2xhdGlvbnMgKi8KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSAg ICBpZiAoeCA9PSAwKSB7CQkJLyogRGlzcGxheSBmb3IgRiBwYWNrZXQgKi8KLSAgICAJaWYgKGRp c3BsYSkgewkJCS8qIFNjcmVlbiAqLwotCSAgICB4eHNjcmVlbihTQ1JfRk4sJ0YnLChsb25nKXBr dG51bSxmaWxuYW0pOwotCSAgICB4eHNjcmVlbihTQ1JfQU4sMCwwTCxwa3RuYW0pOwotCSAgICB4 eHNjcmVlbihTQ1JfRlMsMCxjYWxpYnJhdGUgPyBjYWxpYnJhdGUgOiBmc2l6ZSwiIik7Ci0gICAg CX0KLSNpZmRlZiBwZHAxMQotICAgIAl0bG9nKEYxMTAsIlNlbmRpbmciLGZpbG5hbSwwTCk7IC8q IFRyYW5zYWN0aW9uIGxvZyBlbnRyeSAqLwotCW1ha2VzdHIoJnBzZnNwZWMsZmlsbmFtKTsJLyog TmV3IGZpbGVuYW1lICovCi0jZWxzZQotI2lmbmRlZiBaRk5RRlAKLSAgICAJdGxvZyhGMTEwLCJT ZW5kaW5nIixmaWxuYW0sMEwpOwotCW1ha2VzdHIoJnBzZnNwZWMsZmlsbmFtKTsJLyogTmV3IGZp bGVuYW1lICovCi0jZWxzZQotCWlmIChub3RhZmlsZSkgewkJCS8qIElmIG5vdCBhIGZpbGUgbG9n IHNpbXBsZSBuYW1lICovCi0JICAgIHRsb2coRjExMCwiU2VuZGluZyIsIGZpbG5hbSwgMEwpOwot CX0gZWxzZSB7CQkJLyogTG9nIGZ1bGx5IHF1YWxpZmllZCBmaWxlbmFtZSAqLwotI2lmZGVmIENP TU1FTlQKLQkgICAgLyogVGhpcyBzZWN0aW9uIGdlbmVyYXRlcyBiYWQgY29kZSBpbiBTQ08gMy4y djUuMC41J3MgY2MgKi8KLQkgICAgY2hhciAqcCA9IE5VTEwsICpxID0gZmlsbmFtOwotCSAgICBk ZWJ1ZyhGMTAxLCJzZmlsZSBDS01BWFBBVEgiLCIiLENLTUFYUEFUSCk7Ci0JICAgIGlmICgocCA9 IG1hbGxvYyhDS01BWFBBVEgrMSkpKSB7Ci0JCWRlYnVnKEYxMTEsInNmaWxlIGNhbGxpbmcgemZu cWZwIixmaWxuYW0sc3RybGVuKGZpbG5hbSkpOwotCQlpZiAoemZucWZwKGZpbG5hbSwgQ0tNQVhQ QVRILCBwKSkgewotCQkgICAgZGVidWcoRjExMSwic2ZpbGUgemZucWZwIG9rIixwLHN0cmxlbihw KSk7Ci0JCSAgICBxID0gcDsKLQkJfQotCSAgICB9Ci0jZWxzZQotCSAgICBjaGFyIHRtcGJ1ZltD S01BWFBBVEgrMV07Ci0JICAgIGNoYXIgKnAgPSB0bXBidWYsICpxID0gZmlsbmFtOwotCSAgICBp ZiAoemZucWZwKGZpbG5hbSwgQ0tNQVhQQVRILCBwKSkKLQkgICAgICBxID0gcDsKLSNlbmRpZiAv KiBDT01NRU5UICovCi0JICAgIGRlYnVnKEYxMTEsInNmaWxlIHEiLHEsc3RybGVuKHEpKTsKLQkg ICAgdGxvZyhGMTEwLCJTZW5kaW5nIixxLDBMKTsKLQkgICAgbWFrZXN0cigmcHNmc3BlYyxxKTsJ LyogTmV3IHByZWxpbWluYXJ5IGZpbGVuYW1lICovCi0jaWZkZWYgQ09NTUVOVAotCSAgICBpZiAo cCkgZnJlZShwKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0JfQotI2VuZGlmIC8qIFpGTlFGUCAq LwotI2VuZGlmIC8qIHBkcDExICovCi0gICAgCXRsb2coRjExMCwiIGFzIixwa3RuYW0sMEwpOwot CWlmIChiaW5hcnkpIHsJCQkvKiBMb2cgZmlsZSBtb2RlIGluIHRyYW5zYWN0aW9uIGxvZyAqLwot CSAgICB0bG9nKEYxMDEsIiBtb2RlOiBiaW5hcnkiLCIiLChsb25nKSBiaW5hcnkpOwotCX0gZWxz ZSB7CQkJLyogSWYgdGV4dCBtb2RlLCBjaGVjayBjaGFyYWN0ZXIgc2V0ICovCi0JICAgIHRsb2co RjEwMCwiIG1vZGU6IHRleHQiLCIiLDBMKTsKLSNpZm5kZWYgTk9DU0VUUwotCSAgICBpZiAodGNo YXJzZXQgPT0gVENfVFJBTlNQIHx8IHhmcnhsYSA9PSAwKSB7Ci0JCXRsb2coRjExMCwiIGNoYXJh Y3RlciBzZXQiLCJ0cmFuc3BhcmVudCIsMEwpOwotCSAgICB9IGVsc2UgewotCQl0bG9nKEYxMTAs IiB4ZmVyIGNoYXJhY3RlciBzZXQiLHRjc2luZm9bdGNoYXJzZXRdLm5hbWUsMEwpOwotCQl0bG9n KEYxMTAsIiBmaWxlIGNoYXJhY3RlciBzZXQiLGZjc2luZm9bZmNoYXJzZXRdLm5hbWUsMEwpOwot CSAgICB9Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotCX0KLSAgICB9IGVsc2UgewkJCQkvKiBEaXNw bGF5IGZvciBYLXBhY2tldCAqLwotCi0gICAgCXh4c2NyZWVuKFNDUl9YRCwnWCcsKGxvbmcpcGt0 bnVtLGNtZHN0cik7IC8qIFNjcmVlbiAqLwotICAgIAl0bG9nKEYxMTAsIlNlbmRpbmcgZnJvbToi LGNtZHN0ciwwTCk7CS8qIFRyYW5zYWN0aW9uIGxvZyAqLwotICAgIH0KLSAgICBpbnRtc2coKytm aWxjbnQpOwkJCS8qIENvdW50IGZpbGUsIGdpdmUgaW50ZXJydXB0IG1zZyAqLwotICAgIGZpcnN0 ID0gMTsJCQkJLyogSW5pdCBmaWxlIGNoYXJhY3RlciBsb29rYWhlYWQuICovCi0gICAgZmZjID0g KENLX09GRl9UKTA7CQkJLyogSW5pdCBmaWxlIGNoYXJhY3RlciBjb3VudGVyLiAqLwotICAgIGNw cyA9IG9sZGNwcyA9IDBMOwkJCS8qIEluaXQgY3BzIHN0YXRpc3RpY3MgKi8KLSAgICByZWplY3Rp b24gPSAtMTsKLSAgICBmc2VjcyA9IGd0aW1lcigpOwkJCS8qIFRpbWUgdGhpcyBmaWxlIHN0YXJ0 ZWQgKi8KLSNpZmRlZiBHRlRJTUVSCi0gICAgZnBmc2VjcyA9IGdmdGltZXIoKTsKLSAgICBkZWJ1 ZyhGMTAxLCJTRklMRSBmcGZzZWNzIiwiIixmcGZzZWNzKTsKLSNlbmRpZiAvKiBHRlRJTUVSICov Ci0gICAgZGVidWcoRjEwMSwiU0ZJTEUgZnNlY3MiLCIiLGZzZWNzKTsKLSAgICByZXR1cm4oMSk7 Ci19Ci0KLS8qICBTIEQgQSBUIEEgLS0gU2VuZCBhIGRhdGEgcGFja2V0ICovCi0KLS8qCi0gIFJl dHVybnMgLTEgaWYgbm8gZGF0YSB0byBzZW5kIChlbmQgb2YgZmlsZSksIC0yIGlmIGNvbm5lY3Rp b24gaXMgYnJva2VuLgotICBJZiB0aGVyZSBpcyBkYXRhLCBhIGRhdGEgcGFja2V0IGlzIHNlbnQs IGFuZCBzZGF0YSgpIHJldHVybnMgMS4KLQotICBJbiB0aGUgc3RyZWFtaW5nIGNhc2UsIHRoZSB3 aW5kb3cgaXMgcmVnYXJkZWQgYXMgaW5maW5pdGUgYW5kIHdlIGtlZXAKLSAgc2VuZGluZyBkYXRh IHBhY2tldHMgdW50aWwgRU9GIG9yIHRoZXJlIGFwcGVhcnMgdG8gYmUgYSBLZXJtaXQgcGFja2V0 IG9uIHRoZQotICByZXZlcnNlIGNoYW5uZWwuICBXaGVuIG5vdCBzdHJlYW1pbmcgYW5kIHRoZSB3 aW5kb3cgc2l6ZSBpcyBncmVhdGVyIHRoYW4gMSwKLSAgd2Uga2VlcCBzZW5kaW5nIGRhdGEgcGFj a2V0cyB1bnRpbCB3aW5kb3cgaXMgZnVsbCBvciBjaGFyYWN0ZXJzIHN0YXJ0IHRvCi0gIGFwcGVh ciBmcm9tIHRoZSBvdGhlciBLZXJtaXQuCi0KLSAgSW4gdGhlIHdpbmRvd2luZyBvciBzdHJlYW1p bmcgY2FzZSwgd2hlbiB0aGVyZSBpcyBubyBtb3JlIGRhdGEgbGVmdCB0byBzZW5kCi0gIChvciB3 aGVuIHNlbmRpbmcgaGFzIGJlZW4gaW50ZXJydXB0ZWQpLCBzZGF0YSgpIGRvZXMgbm90aGluZyBh bmQgcmV0dXJucyAwCi0gIGVhY2ggdGltZSBpdCBpcyBjYWxsZWQgdW50aWwgdGhlIGFja25vd2xl ZGdlbWVudCBzZXF1ZW5jZSBudW1iZXIgY2F0Y2hlcyB1cAotICB0byB0aGUgbGFzdCBkYXRhIHBh Y2tldCB0aGF0IHdhcyBzZW50LgotKi8KLWludAotc2RhdGEoKSB7Ci0gICAgaW50IGksIHgsIGxl bjsKLSAgICBjaGFyICogczsKLQotICAgIGRlYnVnKEYxMDEsInNkYXRhIGVudHJ5LCBmaXJzdCIs IiIsZmlyc3QpOwotICAgIGRlYnVnKEYxMDEsInNkYXRhIGRyYWluIiwiIixkcmFpbik7Ci0vKgot ICBUaGUgImRyYWluIiBmbGFnIGlzIHVzZWQgd2l0aCB3aW5kb3cgc2l6ZSA+IDEuICBJdCBtZWFu cyB3ZSBoYXZlIHNlbnQKLSAgb3VyIGxhc3QgZGF0YSBwYWNrZXQuICBJZiBjYWxsZWQgYW5kIGRy YWluIGlzIG5vdCB6ZXJvLCB0aGVuIHdlIHJldHVybgotICAwIGFzIGlmIHdlIGhhZCBzZW50IGFu IGVtcHR5IGRhdGEgcGFja2V0LCB1bnRpbCBhbGwgZGF0YSBwYWNrZXRzIGhhdmUKLSAgYmVlbiBB Q0snZCwgdGhlbiB0aGVuIHdlIGNhbiBmaW5hbGx5IHJldHVybiAtMSBpbmRpY2F0aW5nIEVPRiwg c28gdGhhdAotICB0aGUgcHJvdG9jb2wgY2FuIHN3aXRjaCB0byBzZW9mIHN0YXRlLiAgVGhpcyBp cyBhIGtsdWRnZSwgYnV0IGF0IGxlYXN0Ci0gIGl0J3MgbG9jYWxpemVkLi4uCi0qLwotICAgIGlm IChmaXJzdCA9PSAxKSBkcmFpbiA9IDA7CQkvKiBTdGFydCBvZiBmaWxlLCBpbml0IGRyYWluIGZs YWcuICovCi0KLSAgICBpZiAoZHJhaW4pIHsJCQkvKiBJZiBkcmFpbmluZy4uLiAqLwotCWRlYnVn KEYxMDEsInNkYXRhIGRyYWluaW5nLCB3aW5sbyIsIiIsd2lubG8pOwotCWlmICh3aW5sbyA9PSBw a3RudW0pCQkvKiBJZiBhbGwgZGF0YSBwYWNrZXRzIGFyZSBBQ0snZCAqLwotCSAgcmV0dXJuKC0x KTsJCQkvKiByZXR1cm4gRU9GIGluZGljYXRpb24gKi8KLQllbHNlCQkJCS8qIG90aGVyd2lzZSAq LwotCSAgcmV0dXJuKDApOwkJCS8qIHByZXRlbmQgd2Ugc2VudCBhIGRhdGEgcGFja2V0LiAqLwot ICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJzZGF0YSBzYnVmbnVtIiwiIixzYnVmbnVtKTsKLSAgICBm b3IgKGkgPSBzYnVmbnVtOwotCSBpID4gMAotI2lmZGVmIFNUUkVBTUlORwotCSB8fCBzdHJlYW1p bmcKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLQkgOwotCSBpLS0pIHsKLQlpZiAoaSA8IDApCi0J ICBicmVhazsKLSAgICAgICAgZGVidWcoRjEwMSwic2RhdGEgY291bnRkb3duIiwiIixpKTsKLSNp ZmRlZiBTVFJFQU1JTkcKLQlpZiAoc3RyZWFtaW5nKSB7Ci0JICAgIHBrdG51bSA9IChwa3RudW0g KyAxKSAlIDY0OwotCSAgICB3aW5sbyA9IHBrdG51bTsKLQkgICAgZGVidWcoRjEwMSwic2RhdGEg c3RyZWFtaW5nIHBrdG51bSIsIiIscGt0bnVtKTsKLQl9IGVsc2UgewotI2VuZGlmIC8qIFNUUkVB TUlORyAqLwotCSAgICB4ID0gbnh0cGt0KCk7CQkvKiBHZXQgbmV4dCBwa3QgbnVtYmVyIGFuZCBi dWZmZXIgKi8KLQkgICAgZGVidWcoRjEwMSwic2RhdGEgbnh0cGt0IHBrdG51bSIsIiIscGt0bnVt KTsKLQkgICAgaWYgKHggPCAwKSByZXR1cm4oMCk7Ci0jaWZkZWYgU1RSRUFNSU5HCi0JfQotI2Vu ZGlmIC8qIFNUUkVBTUlORyAqLwotCWRlYnVnKEYxMDEsInNkYXRhIHBhY2tldCIsIiIscGt0bnVt KTsKLQlpZiAoY2hraW50KCkgPCAwKQkJLyogRXNwZWNpYWxseSBpbXBvcnRhbnQgaWYgc3RyZWFt aW5nICovCi0JICByZXR1cm4oLTkpOwotCWlmIChjeHNlZW4gfHwgY3pzZWVuKSB7CQkvKiBJZiBp bnRlcnJ1cHRlZCwgZG9uZS4gKi8KLQkgICAgaWYgKHdzbG90cyA+IDEpIHsKLQkJZHJhaW4gPSAx OwotCQlkZWJ1ZyhGMTAwLCJzZGF0YSBjeC96c2VlbiB3aW5kb3dpbmciLCIiLDApOwotCQlyZXR1 cm4oMCk7Ci0JICAgIH0gZWxzZSB7Ci0JCWRlYnVnKEYxMDAsInNkYXRhIGN4L3pzZWVuIG5vbndp bmRvd2luZyIsIiIsMCk7Ci0JCXJldHVybigtMSk7Ci0JICAgIH0KLQl9Ci0jaWZkZWYgREVCVUcK LQlpZiAoZGVibG9nKSB7Ci0JICAgIGRlYnVnKEYxMDEsInNkYXRhIHNwc2l6IiwiIixzcHNpeik7 Ci0JICAgIGRlYnVnKEYxMDEsInNkYXRhIGJpbmFyeSIsIiIsYmluYXJ5KTsKLQkgICAgZGVidWco RjEwMSwic2RhdGEgcGFyaXR5IiwiIixwYXJpdHkpOwotCX0KLSNlbmRpZiAvKiBERUJVRyAqLwot I2lmZGVmIENLVFVOSU5HCi0JaWYgKGJpbmFyeSAmJiAhcGFyaXR5ICYmICFtZW1zdHIgJiYgIWZ1 bmNzdHIpCi0JICBsZW4gPSBiZ2V0cGt0KHNwc2l6KTsKLQllbHNlCi0JICBsZW4gPSBnZXRwa3Qo c3BzaXosMSk7Ci0jZWxzZQotCWxlbiA9IGdldHBrdChzcHNpeiwxKTsKLSNlbmRpZiAvKiBDS1RV TklORyAqLwotCXMgPSAoY2hhciAqKWRhdGE7Ci0JaWYgKGxlbiA9PSAtMykgewkJLyogVGltZWQg b3V0IChlLmcucmVhZGluZyBmcm9tIHBpcGUpICovCi0JICAgIHMgPSAiIjsJCQkvKiBTZW5kIGFu IGVtcHR5IGRhdGEgcGFja2V0LiAqLwotCSAgICBsZW4gPSAwOwotCX0gZWxzZSBpZiAobGVuID09 IDApIHsJCS8qIERvbmUgaWYgbm8gZGF0YS4gKi8KLQkgICAgaWYgKHBrdG51bSA9PSB3aW5sbykK LQkgICAgICByZXR1cm4oLTEpOwotCSAgICBkcmFpbiA9IDE7CQkJLyogQnV0IGNhbid0IHJldHVy biAtMSB1bnRpbCBhbGwgKi8KLQkgICAgZGVidWcoRjEwMSwic2RhdGEgZW9mLCBkcmFpbiIsIiIs ZHJhaW4pOwotCSAgICByZXR1cm4oMCk7CQkJLyogQUNLcyBhcmUgZHJhaW5lZC4gKi8KLQl9Ci0J ZGVidWcoRjEwMSwic2RhdGEgcGt0bnVtIiwiIixwa3RudW0pOwotCWRlYnVnKEYxMDEsInNkYXRh IGxlbiIsIiIsbGVuKTsKLQlkZWJ1ZyhGMDExLCJzZGF0YSBkYXRhIixkYXRhLDUyKTsKLQotCXgg PSBzcGFjaygnRCcscGt0bnVtLGxlbiwoQ0hBUiAqKXMpOyAvKiBTZW5kIHRoZSBkYXRhIHBhY2tl dC4gKi8KLQlkZWJ1ZyhGMTAxLCJzZGF0YSBzcGFjayIsIiIseCk7Ci0JaWYgKHggPCAwKSB7CQkJ LyogRXJyb3IgKi8KLQkgICAgdHRjaGsoKTsJCQkvKiBTZWUgaWYgY29ubmVjdGlvbiBpcyBzdGls bCB0aGVyZSAqLwotCSAgICByZXR1cm4oLTIpOwotCX0KLSNpZmRlZiBTVFJFQU1JTkcKLQlpZiAo c3RyZWFtaW5nKQkJCS8qIFdoYXQgYW4gQUNLIHdvdWxkIGRvLiAqLwotCSAgd2lubG8gPSBwa3Ru dW07Ci0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0JeCA9IHR0Y2hrKCk7CQkJLyogUGVlayBhdCBp bnB1dCBidWZmZXIuICovCi0JZGVidWcoRjEwMSwic2RhdGEgdHRjaGsiLCIiLHgpOwkvKiBBQ0tz IHdhaXRpbmcsIG1heWJlPyAgKi8KLQlpZiAoeCA8IDApCQkJLyogT3IgY29ubmVjdGlvbiBicm9r ZW4/ICovCi0JICByZXR1cm4oLTIpOwotLyoKLSAgSGVyZSB3ZSBjaGVjayB0byBzZWUgaWYgYW55 IEFDS3Mgb3IgTkFLcyBoYXZlIGFycml2ZWQsIGluIHdoaWNoIGNhc2Ugd2UKLSAgYnJlYWsgb3V0 IG9mIHRoZSBELXBhY2tldC1zZW5kaW5nIGxvb3AgYW5kIHJldHVybiB0byB0aGUgc3RhdGUgc3dp dGNoZXIKLSAgdG8gcHJvY2VzcyB0aGVtLiAgVGhpcyBpcyB3aGF0IG1ha2VzIG91ciB3aW5kb3dz IHNsaWRlIGluc3RlYWQgb2YgbHVyY2guCi0qLwotCWlmICgKLSNpZmRlZiBHRU1ET1MKLS8qCi0g IEluIHRoZSBBdGFyaSBTVCB2ZXJzaW9uLCB0dGNoaygpIGNhbiBvbmx5IHJldHVybiAwIG9yIDEu ICBCdXQgbm90ZTogeCB3aWxsCi0gIHByb2JhYmx5IGFsd2F5cyBiZSA+IDAsIHNpbmNlIHRoZSBh cy15ZXQtdW5yZWFkIHBhY2tldCB0ZXJtaW5hdG9yIGZyb20gdGhlCi0gIGxhc3QgcGFja2V0IGlz IHByb2JhYmx5IHN0aWxsIGluIHRoZSBidWZmZXIsIHNvIHNsaWRpbmcgd2luZG93cyB3aWxsCi0g IHByb2JhYmx5IG5ldmVyIGhhcHBlbiB3aGVuIHRoZSBBdGFyaSBTVCBpcyB0aGUgZmlsZSBzZW5k ZXIuICBUaGUgYWx0ZXJuYXRpdmUKLSAgaXMgdG8gc2F5ICJpZiAoMCkiLCBpbiB3aGljaCBjYXNl IHRoZSBTVCB3aWxsIGFsd2F5cyBzZW5kIGEgd2luZG93IGZ1bGwgb2YKLSAgcGFja2V0cyBiZWZv cmUgcmVhZGluZyBhbnkgQUNLcyBvciBOQUtzLgotKi8KLQkgICAgeCA+IDAKLQotI2Vsc2UgLyog IUdFTURPUyAqLwotLyoKLSAgSW4gbW9zdCBvdGhlciB2ZXJzaW9ucywgdHRjaGsoKSByZXR1cm5z IHRoZSBhY3R1YWwgY291bnQuCi0gIEl0IGNhbid0IGJlIGEgS2VybWl0IHBhY2tldCBpZiBpdCdz IGxlc3MgdGhhbiBmaXZlIGJ5dGVzIGxvbmcuCi0qLwotCSAgICB4ID4gNCArIGJjdHUKLQotI2Vu ZGlmIC8qIEdFTURPUyAqLwotCSAgICApCi0JICByZXR1cm4oMSk7CQkJLyogWWVzLCBzdG9wIHNl bmRpbmcgZGF0YSBwYWNrZXRzICovCi0gICAgfQkJCQkJLyogYW5kIGdvIHRyeSB0byByZWFkIHRo ZSBBQ0tzLiAqLwotICAgIHJldHVybigxKTsKLX0KLQotCi0vKiAgUyBFIE8gRiAtLSBTZW5kIGFu IEVuZC1PZi1GaWxlIHBhY2tldCAqLwotCi0vKiAgQ2FsbCB3aXRoIGEgc3RyaW5nIHBvaW50ZXIg dG8gY2hhcmFjdGVyIHRvIHB1dCBpbiB0aGUgZGF0YSBmaWVsZCwgKi8KLS8qICBvciBlbHNlIGEg bnVsbCBwb2ludGVyIG9yICIiIGZvciBubyBkYXRhLiAgKi8KLQotLyoKLSAgVGhlcmUgYXJlIHR3 byAic2VuZC1lb2YiIGZ1bmN0aW9ucy4gIHNlb2YoKSBpcyB1c2VkIHRvIHNlbmQgdGhlIG5vcm1h bCBlb2YKLSAgcGFja2V0IGF0IHRoZSBlbmQgb2YgYSBmaWxlJ3MgZGF0YSAoZXZlbiBpZiB0aGUg ZmlsZSBoYXMgbm8gZGF0YSksIG9yIHdoZW4KLSAgYSBmaWxlIHRyYW5zZmVyIGlzIGludGVycnVw dGVkLiAgc3hlb2YoKSBpcyB1c2VkIHRvIHNlbmQgYW4gRU9GIHBhY2tldCB0aGF0Ci0gIG9jY3Vy cyBiZWNhdXNlIG9mIGF0dHJpYnV0ZSByZWZ1c2FsIG9yIGludGVycnVwdGlvbiBwcmlvciB0byBl bnRlcmluZyBkYXRhCi0gIHN0YXRlLiAgVGhlIGRpZmZlcmVuY2UgaXMgcHVyZWx5IGEgbWF0dGVy IG9mIGJ1ZmZlciBhbGxvY2F0aW9uIGFuZCBwYWNrZXQKLSAgc2VxdWVuY2UgbnVtYmVyIG1hbmFn ZW1lbnQuICBCb3RoIGZ1bmN0aW9ucyBhY3QgYXMgImZyb250IGVuZHMiIHRvIHRoZQotICBjb21t b24gc2VuZC1lb2YgZnVuY3Rpb24sIHN6ZW9mKCkuCi0qLwotCi0vKiBDb2RlIGNvbW1vbiB0byBi b3RoIHNlb2YoKSBhbmQgc3hlb2YoKSAqLwotCi1pbnQKLXN6ZW9mKHMpIENIQVIgKnM7IHsKLSAg ICBpbnQgeDsKLSAgICBsc3N0YXRlID0gMDsJCQkvKiBDYW5jZWwgbG9ja2luZy1zaGlmdCBzdGF0 ZSAqLwotICAgIGlmICghcykgcyA9IChDSEFSICopIiI7Ci0gICAgZGVidWcoRjExMSwic3plb2Yi LHMscGt0bnVtKTsKLSAgICBpZiAoKnMpIHsKLQl4ID0gc3BhY2soJ1onLHBrdG51bSwxLHMpOwot CXhpdHN0YSB8PSBXX1NFTkQ7Ci0jaWZkZWYgQ09NTUVOVAotCXRsb2coRjEwMCwiICoqKiBpbnRl cnJ1cHRlZCwgc2VuZGluZyBkaXNjYXJkIHJlcXVlc3QiLCIiLDBMKTsKLSNlbmRpZiAvKiBDT01N RU5UICovCi0JZmlscmVqKys7Ci0gICAgfSBlbHNlIHsKLQl4ID0gc3BhY2soJ1onLHBrdG51bSww LChDSEFSICopIiIpOwotICAgIH0KLSAgICBpZiAoeCA8IDApCi0gICAgICByZXR1cm4oeCk7Ci0K LSNpZmRlZiBDT01NRU5UCi0gICAgLyogTm8sIHRvbyBzb29uICovCi0gICAgZGlzY2FyZCA9IDA7 CQkJLyogVHVybiBvZmYgcGVyLWZpbGUgZGlzY2FyZCBmbGFnICovCi0jZW5kaWYgLyogQ09NTUVO VCAqLwotCi0vKiBJZiB3ZSB3ZXJlIHNlbmRpbmcgZnJvbSBhIHBpcGUsIHdlJ3JlIG5vdCBhbnkg bW9yZS4uLiAqLwotICAgIHBpcGVzZW5kID0gMDsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLWludAot c2VvZih4KSBpbnQgeDsgewotICAgIGNoYXIgKiBzOwotLyoKLSAgY2tjcHJvLncsIGJlZm9yZSBj YWxsaW5nIHNlb2YoKSwgc2V0cyB3aW5kb3cgc2l6ZSBiYWNrIHRvIDEgYW5kIHRoZW4gY2FsbHMK LSAgd2luZG93KCksIHdoaWNoIGNsZWFycyBvdXQgdGhlIG9sZCBidWZmZXJzLiAgVGhpcyBpcyBP SyBiZWNhdXNlIHRoZSBmaW5hbAotICBkYXRhIHBhY2tldCBmb3IgdGhlIGZpbGUgaGFzIGJlZW4g QUNLJ2QuICBIb3dldmVyLCBzZGF0YSgpIGhhcyBhbHJlYWR5Ci0gIGNhbGxlZCBueHRwa3QoKSwg d2hpY2ggc2V0IHRoZSBuZXcgdmFsdWUgb2YgcGt0bnVtIHdoaWNoIHNlb2YoKSB3aWxsIHVzZS4K LSAgU28gYWxsIHdlIG5lZWQgdG8gZG8gaGVyZSBpcyBpcyBhbGxvY2F0ZSBhIG5ldyBzZW5kLWJ1 ZmZlci4KLSovCi0gICAgcyA9IHggPyAiRCIgOiAiIjsKLSAgICBkZWJ1ZyhGMTExLCJzZW9mIixz LHBrdG51bSk7Ci0gICAgaWYgKGdldHNidWYocGt0bnVtKSA8IDApIHsJLyogR2V0IGEgYnVmZmVy IGZvciBwYWNrZXQgbiAqLwotCWRlYnVnKEYxMDEsInNlb2YgY2FuJ3QgZ2V0IHMtYnVmZmVyIiwi Iixwa3RudW0pOwotCXJldHVybigtMSk7Ci0gICAgfQotICAgIHJldHVybihzemVvZigoQ0hBUiAq KXMpKTsKLX0KLQotLyoKLSAgVmVyc2lvbiBvZiBzZW9mKCkgdG8gYmUgY2FsbGVkIHdoZW4gc2Rh dGEoKSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZS4gIFRoZQotICBkaWZmZXJlbmNlIGlzIHRo YXQgdGhpcyB2ZXJzaW9uIGNhbGxzIG54dHBrdCgpIHRvIGFsbG9jYXRlIGEgc2VuZC1idWZmZXIg YW5kCi0gIGdldCB0aGUgbmV4dCBwYWNrZXQgbnVtYmVyLgotKi8KLWludAotc3hlb2YoeCkgaW50 IHg7IHsKLSAgICBjaGFyICogczsKLSAgICBzID0geCA/ICJEIiA6ICIiOwotICAgIGlmIChueHRw a3QoKSA8IDApCQkJLyogR2V0IG5leHQgcGt0IG51bWJlciBhbmQgYnVmZmVyICovCi0gICAgICBk ZWJ1ZyhGMTAxLCJzeGVvZiBueHRwa3QgZmFpbHMiLCIiLHBrdG51bSk7Ci0gICAgZWxzZQotICAg ICAgZGVidWcoRjEwMSwic3hlb2YgcGFja2V0IiwiIixwa3RudW0pOwotICAgIHJldHVybihzemVv ZigoQ0hBUiAqKXMpKTsKLX0KLQotLyogIFMgRSBPIFQgLS0gU2VuZCBhbiBFbmQtT2YtVHJhbnNh Y3Rpb24gcGFja2V0ICovCi0KLWludAotc2VvdCgpIHsKLSAgICBpbnQgeDsKLSAgICB4ID0gbnh0 cGt0KCk7Ci0gICAgZGVidWcoRjEwMSwic2VvdCBueHRwa3QiLCIiLHgpOwotICAgIGlmICh4IDwg MCkgcmV0dXJuKC0xKTsJCS8qIEJ1bXAgcGFja2V0IG51bWJlciwgZ2V0IGJ1ZmZlciAqLwotICAg IHggPSBzcGFjaygnQicscGt0bnVtLDAsKENIQVIgKikiIik7CS8qIFNlbmQgdGhlIEVPVCBwYWNr ZXQgKi8KLSAgICBpZiAoeCA8IDApCi0gICAgICByZXR1cm4oeCk7Ci0gICAgY3hzZWVuID0gY3pz ZWVuID0gZGlzY2FyZCA9IDA7CS8qIFJlc2V0IGludGVycnVwdGlvbiBmbGFncyAqLwotICAgIHRz dGF0cygpOwkJCQkvKiBMb2cgdGltaW5nIGluZm8gKi8KLSAgICByZXR1cm4oMCk7Ci19Ci0KLQot LyogICBSIFAgQSBSIC0tIEZpbGwgdGhlIGRhdGEgYXJyYXkgd2l0aCBteSBzZW5kLWluaXQgcGFy YW1ldGVycyAgKi8KLQotaW50IHE4ZmxhZyA9IDA7Ci0KLUNIQVIgZGFkYVszMl07CQkJCS8qIFVz ZSB0aGlzIGluc3RlYWQgb2YgZGF0YVtdLiAqLwotCQkJCQkvKiBUbyBhdm9pZCBzb21lIGtpbmQg b2Ygd2llcmQgKi8KLQkJCQkJLyogYWRkcmVzc2luZyBmb3VsdXAgaW4gc3BhY2soKS4uLiAqLwot CQkJCQkvKiAod2hpY2ggbWlnaHQgYmUgZml4ZWQgbm93Li4uKSAqLwotCi1DSEFSICoKLXJwYXIo KSB7Ci0gICAgY2hhciAqcDsKLSAgICBpbnQgaSwgeCwgbWF4OwotICAgIGV4dGVybiBpbnQgc3By bWxlbjsKLQotICAgIG1heCA9IG1heGRhdGEoKTsJCQkvKiBCaWdnZXN0IGRhdGEgZmllbGQgSSBj YW4gc2VuZCAqLwotICAgIGRlYnVnKEYxMDEsICJycGFyIG1heCAxIiwiIixtYXgpOwotICAgIGRl YnVnKEYxMDEsICJycGFyIHNwcm1sZW4iLCIiLHNwcm1sZW4pOwotICAgIGlmIChzcHJtbGVuID4g MSAmJiBzcHJtbGVuIDwgbWF4KQkvKiBVc2VyIG92ZXJyaWRlICovCi0gICAgICBtYXggPSBzcHJt bGVuOwotICAgIGRlYnVnKEYxMDEsICJycGFyIG1heCAyIiwiIixtYXgpOwotCi0gICAgaWYgKHJw c2l6ID4gTUFYUEFDSykJCS8qIEJpZ2dlc3Qgbm9ybWFsIHBhY2tldCBJIHdhbnQuICovCi0gICAg ICBkYWRhWzBdID0gKGNoYXIpIHRvY2hhcihNQVhQQUNLKTsJLyogSWYgPiA5NCwgdXNlIDk0LCBi dXQgc3BlY2lmeSAqLwotICAgIGVsc2UJCQkJLyogZXh0ZW5kZWQgcGFja2V0IGxlbmd0aCBiZWxv dy4uLiAqLwotICAgICAgZGFkYVswXSA9IChjaGFyKSB0b2NoYXIocnBzaXopOwkvKiBlbHNlIHVz ZSB3aGF0IHRoZSB1c2VyIHNhaWQuICovCi0gICAgZGFkYVsxXSA9IChjaGFyKSB0b2NoYXIoY2hr dGltbyhwa3R0aW0sMCkpOyAvKiBXaGVuIHRvIHRpbWUgbWUgb3V0ICovCi0gICAgZGFkYVsyXSA9 IChjaGFyKSB0b2NoYXIobXlwYWRuKTsJLyogSG93IG11Y2ggcGFkZGluZyBJIG5lZWQgKG5vbmUp ICovCi0gICAgZGFkYVszXSA9IChjaGFyKSBjdGwobXlwYWRjKTsJLyogUGFkZGluZyBjaGFyYWN0 ZXIgSSB3YW50ICovCi0gICAgZGFkYVs0XSA9IChjaGFyKSB0b2NoYXIoZW9sKTsJLyogRW5kLU9m LUxpbmUgY2hhcmFjdGVyIEkgd2FudCAqLwotICAgIGRhZGFbNV0gPSBteWN0bHE7CQkJLyogQ29u dHJvbC1RdW90ZSBjaGFyYWN0ZXIgSSBzZW5kICovCi0KLSAgICBpZiAobWF4IDwgNikgeyBkYWRh WzZdID0gTlVMOyBycWYgPSAwOyBlYnEgPSBzcSA9IE5VTDsgcmV0dXJuKGRhZGEpOyB9Ci0KLSAg ICBzd2l0Y2ggKHJxZikgewkJCS8qIDh0aC1iaXQgcHJlZml4IChzaW5nbGUtc2hpZnQpICovCi0g ICAgICBjYXNlIC0xOgkJCQkvKiBJJ20gb3BlbmluZyB0aGUgYmlkcyAqLwotICAgICAgY2FzZSAg MToJCQkJLyogT3RoZXIgS2VybWl0IGFscmVhZHkgYmlkICdZJyAqLwotCWlmIChwYXJpdHkpIGVi cSA9IHNxID0gTVlFQlE7CS8qIFNvIEkgcmVwbHkgd2l0aCAnJicgaWYgcGFyaXR5ICovCi0JYnJl YWs7CQkJCS8qICBvdGhlcndpc2Ugd2l0aCAnWScuICovCi0gICAgICBjYXNlICAyOgkJCQkvKiBP dGhlciBLZXJtaXQgc2VudCBhIHZhbGlkIHByZWZpeCAqLwotCWlmIChxOGZsYWcpCi0JICBzcSA9 IGVicTsJCQkvKiBGYWxsIHRocm91Z2ggb24gcHVycG9zZSAqLwotICAgICAgY2FzZSAgMDoJCQkJ LyogT3RoZXIgS2VybWl0IGJpZCBub3RoaW5nICovCi0JYnJlYWs7CQkJCS8qIFNvIEkgcmVwbHkg d2l0aCAnWScuICovCi0gICAgfQotICAgIGRlYnVnKEYwMDAsInJwYXIgOGJxIHNxIiwiIixzcSk7 Ci0gICAgZGVidWcoRjAwMCwicnBhciA4YnEgZWJxIiwiIixlYnEpOwotICAgIGlmIChsc2NhcHUg PT0gMikJCQkvKiBMT0NLSU5HLVNISUZUIEZPUkNFRCAqLwotICAgICAgZGFkYVs2XSA9ICdOJzsJ CQkvKiByZXF1aXJlcyBubyBzaW5nbGUtc2hpZnQgKi8KLSAgICBlbHNlCQkJCS8qIG90aGVyd2lz ZSBzZW5kIHByZWZpeCBvciAnWScgKi8KLSAgICAgIGRhZGFbNl0gPSAoY2hhcikgc3E7Ci0gICAg ZWJxc2VudCA9IGRhZGFbNl07CQkJLyogQW5kIHJlbWVtYmVyIHdoYXQgSSByZWFsbHkgc2VudCAq LwotCi0gICAgaWYgKG1heCA8IDcpIHsgZGFkYVs3XSA9IE5VTDsgYmN0ciA9IDE7IHJldHVybihk YWRhKTsgfQotCi0gICAgZGFkYVs3XSA9IChjaGFyKSAoYmN0ciA9PSA0KSA/ICdCJyA6IGJjdHIg KyAnMCc7IC8qIEJsb2NrIGNoZWNrIHR5cGUgKi8KLQotICAgIGlmIChtYXggPCA4KSB7IGRhZGFb OF0gPSBOVUw7IHJwdGZsZyA9IDA7IHJldHVybihkYWRhKTsgfQotCi0gICAgaWYgKHJwdGVuYSkg ewotCWlmIChycHRmbGcpCQkJLyogUnVuIGxlbmd0aCBlbmNvZGluZyAqLwotCSAgZGFkYVs4XSA9 IChjaGFyKSBycHRxOwkvKiBJZiByZWNlaXZpbmcsIGFncmVlICovCi0JZWxzZQkJCQkvKiBieSBy ZXBseWluZyB3aXRoIHNhbWUgY2hhcmFjdGVyLiAqLwotCSAgZGFkYVs4XSA9IChjaGFyKSAocnB0 cSA9IG15cnB0cSk7IC8qIFdoZW4gc2VuZGluZyB1c2UgdGhpcy4gKi8KLSAgICB9IGVsc2UgZGFk YVs4XSA9IFNQOwkJLyogTm90IGVuYWJsZWQsIHB1dCBhIHNwYWNlIGhlcmUuICovCi0KLSAgICAv KiBDQVBBUyBtYXNrICovCi0KLSAgICBpZiAobWF4IDwgOSkgewotCWRhZGFbOV0gPSBOVUw7Ci0J YXRjYXByID0gMDsKLQlscGNhcHIgPSAwOwotCXN3Y2FwciA9IDA7Ci0JcnNjYXByID0gMDsKLQly ZXR1cm4oZGFkYSk7Ci0gICAgfQotICAgIGRhZGFbOV0gPSAoY2hhcikgdG9jaGFyKChsc2NhcHIg PyBsc2NhcGIgOiAwKSB8IC8qIExvY2tpbmcgc2hpZnRzICovCi0JCSAgICAgKGF0Y2FwciA/IGF0 Y2FwYiA6IDApIHwgLyogQXR0cmlidXRlIHBhY2tldHMgKi8KLQkJICAgICAobHBjYXByID8gbHBj YXBiIDogMCkgfCAvKiBMb25nIHBhY2tldHMgKi8KLQkJICAgICAoc3djYXByID8gc3djYXBiIDog MCkgfCAvKiBTbGlkaW5nIHdpbmRvd3MgKi8KLQkJICAgICAocnNjYXByID8gcnNjYXBiIDogMCkp OyAvKiBSRVNFTkQgKi8KLSAgICBpZiAobWF4IDwgMTApIHsgd3Nsb3RyID0gMTsgcmV0dXJuKGRh ZGEpOyB9Ci0gICAgZGFkYVsxMF0gPSAoY2hhcikgdG9jaGFyKHN3Y2FwciA/IHdzbG90ciA6IDEp OyAvKiBDQVBBUysxID0gV2luZG93IHNpemUgKi8KLQotICAgIGlmIChtYXggPCAxMikgeyBycHNp eiA9IDgwOyByZXR1cm4oZGFkYSk7IH0KLSAgICBpZiAodXJwc2l6ID4gOTQpCi0gICAgICBycHNp eiA9IHVycHNpeiAtIDE7CQkvKiBMb25nIHBhY2tldHMgLi4uICovCi0gICAgZGFkYVsxMV0gPSAo Y2hhcikgdG9jaGFyKHJwc2l6IC8gOTUpOyAvKiBMb25nIHBhY2tldCBzaXplLCBiaWcgcGFydCAq LwotICAgIGRhZGFbMTJdID0gKGNoYXIpIHRvY2hhcihycHNpeiAlIDk1KTsgLyogTG9uZyBwYWNr ZXQgc2l6ZSwgbGl0dGxlIHBhcnQgKi8KLQotICAgIGlmIChtYXggPCAxNikgcmV0dXJuKGRhZGEp OwotICAgIGRhZGFbMTNdID0gJzAnOwkJCS8qIENBUEFTKzQgPSBXT05UIENIS1BOVCAqLwotICAg IGRhZGFbMTRdID0gJ18nOwkJCS8qIENBUEFTKzUgPSBDSEtJTlQgKHJlc2VydmVkKSAqLwotICAg IGRhZGFbMTVdID0gJ18nOwkJCS8qIENBUEFTKzYgPSBDSEtJTlQgKHJlc2VydmVkKSAqLwotICAg IGRhZGFbMTZdID0gJ18nOwkJCS8qIENBUEFTKzcgPSBDSEtJTlQgKHJlc2VydmVkKSAqLwotICAg IGlmIChtYXggPCAxNykgcmV0dXJuKGRhZGEpOwotI2lmbmRlZiBXSEFUQU1JCi0gICAgZGFkYVsx N10gPSAnICc7Ci0jZWxzZQotICAgIHggPSAwOwotICAgIGlmIChzZXJ2ZXIpIHggfD0gV01JX1NF UlZFOwkJLyogV2hldGhlciBJIGFtIGEgc2VydmVyICovCi0gICAgaWYgKGJpbmFyeSkgeCB8PSBX TUlfRk1PREU7CQkvKiBNeSBmaWxlIHRyYW5zZmVyIG1vZGUgaXMgLi4uICovCi0gICAgaWYgKGZu Y252KSAgeCB8PSBXTUlfRk5BTUU7CQkvKiBNeSBmaWxlbmFtZSBjb252ZXJzaW9uIGlzIC4uLiAq LwotI2lmZGVmIFNUUkVBTUlORwotICAgIGlmIChzdHJlYW1ycSA9PSBTRVRfT04pCi0gICAgICB4 IHw9IFdNSV9TVFJFQU07Ci0gICAgZWxzZSBpZiAoc3RyZWFtcnEgPT0gU0VUX0FVVE8gJiYgcmVs aWFibGUgPT0gU0VUX09OKQotICAgICAgeCB8PSBXTUlfU1RSRUFNOwotICAgIC8qCi0gICAgICBB bHdheXMgb2ZmZXIgdG8gc3RyZWFtIHdoZW4gaW4gcmVtb3RlIG1vZGUgYW5kIFNUUkVBTUlORyBp cyBBVVRPCi0gICAgICBhbmQgUkVMSUFCTEUgaXMgbm90IE9GRiAoaS5lLiBpcyBPTiBvciBBVVRP KS4KLSAgICAqLwotICAgIGVsc2UgaWYgKCFsb2NhbCAmJiBzdHJlYW1ycSA9PSBTRVRfQVVUTyAm JiByZWxpYWJsZSAhPSBTRVRfT0ZGKQotICAgICAgeCB8PSBXTUlfU1RSRUFNOwotI2VuZGlmIC8q IFNUUkVBTUlORyAqLwotI2lmZGVmIFRDUFNPQ0tFVAotICAgIGlmIChjbGVhcnJxID09IFNFVF9P TikKLSAgICAgIHggfD0gV01JX0NMRUFSOwotICAgIGVsc2UgaWYgKGNsZWFycnEgPT0gU0VUX0FV VE8gJiYJLyogU0VUIENMRUFSLUNIQU5ORUwgQVVUTyAqLwotCSAgICAgKChuZXR3b3JrICYmIG5l dHR5cGUgPT0gTkVUX1RDUEIgLyogVENQL0lQICovCi0jaWZkZWYgUkxPR0NPREUKLSAgICAgICAg ICAgICAgICAmJiB0dG5wcm90byAhPSBOUF9STE9HSU4vKiBSbG9naW4gaXMgbm90IGNsZWFyICov Ci0gICAgICAgICAgICAgICAgJiYgISh0dG5wcm90byA+PSBOUF9LNExPR0lOICYmIHR0bnByb3Rv IDw9IE5QX0VLNUxPR0lOKQotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0JICAgICAgICkKLSNpZmRl ZiBTU0hCVUlMVElOCi0gICAgICAgICAgICAgIHx8IChuZXR3b3JrICYmIG5ldHR5cGUgPT0gTkVU X1NTSCkKLSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0jaWZkZWYgSUtTRAotCSAgICAgIHx8IGlu c2VydmVyCQkvKiBXZSBhcmUgSUtTRCAqLwotI2VuZGlmIC8qIElLU0QgKi8KLQkgICAgICApKQot ICAgICAgeCB8PSBXTUlfQ0xFQVI7Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0gICAgeCB8PSBX TUlfRkxBRzsKLSAgICBkYWRhWzE3XSA9IChjaGFyKSB0b2NoYXIoeCk7Ci0jZW5kaWYgLyogV0hB VEFNSSAqLwotICAgIGkgPSAxODsJCQkJLyogUG9zaXRpb24gb2YgbmV4dCBmaWVsZCAqLwotICAg IHAgPSBja3N5c2lkOwkJCS8qIFdIT0FNSSAobXkgc3lzdGVtIElEKSAqLwotICAgIHggPSBzdHJs ZW4ocCk7Ci0gICAgaWYgKG1heCAtIGkgPCB4ICsgMSkgcmV0dXJuKGRhZGEpOwotICAgIGlmICh4 ID4gMCkgewotCWRhZGFbaSsrXSA9IChjaGFyKSB0b2NoYXIoeCk7Ci0Jd2hpbGUgKCpwKQotCSAg ZGFkYVtpKytdID0gKnArKzsKLSAgICB9Ci0KLSAgICBpZiAobWF4IDwgaSsxKSByZXR1cm4oZGFk YSk7Ci0jaWZuZGVmIFdIQVRBTUkJCQkJLyogV0hBVEFNSTIgKi8KLSAgICBkYWRhW2krK10gPSAn ICc7Ci0jZWxzZQotICAgIGRlYnVnKEYxMDEsInJwYXIgeGZlcm1vZGUiLCIiLHhmZXJtb2RlKTsK LSAgICB4ID0gV01JMl9GTEFHOwkJCS8qIElzLVZhbGlkIGZsYWcgKi8KLSAgICBpZiAoeGZlcm1v ZGUgIT0gWE1PREVfQSkJCS8qIElmIFRSQU5TRkVSIE1PREUgaXMgTUFOVUFMICovCi0gICAgICB4 IHw9IFdNSTJfWE1PREU7CQkJLyogc2V0IHRoZSBYRkVSTU9ERSBiaXQgKi8KLSAgICBpZiAocmVj dXJzaXZlID4gMCkJCQkvKiBJZiB0aGlzIGlzIGEgcmVjdXJzaXZlIHRyYW5zZmVyICovCi0gICAg ICB4IHw9IFdNSTJfUkVDVTsJCQkvKiBzZXQgdGhlIFJFQ1VSU0lWRSBiaXQgKi8KLSAgICBkYWRh W2krK10gPSB0b2NoYXIoeCk7Ci0gICAgZGVidWcoRjEwMSwicnBhciB3aGF0YW1pMiIsIiIseCk7 Ci0jZW5kaWYgLyogV0hBVEFNSSAqLwotCi0gICAgZGFkYVtpXSA9ICdcMCc7CQkJLyogVGVybWlu YXRlIHRoZSBpbml0IHN0cmluZyAqLwotCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKSB7 Ci0JZGVidWcoRjExMCwicnBhciIsZGFkYSwwKTsKLQlyZGVidShkYWRhLChpbnQpc3RybGVuKChj aGFyICopZGFkYSkpOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotICAgIGNrc3RybmNweSgo Y2hhciAqKW15aW5pdCwoY2hhciAqKWRhZGEsTVlJTklUTEVOKTsKLSAgICByZXR1cm4oZGFkYSk7 CQkJLyogUmV0dXJuIHBvaW50ZXIgdG8gc3RyaW5nLiAqLwotfQotCi1pbnQKLXNwYXIocykgQ0hB UiAqczsgewkJCS8qIFNldCBwYXJhbWV0ZXJzICovCi0gICAgaW50IHgsIHksIGxwc2l6LCBiaWdn ZXN0OwotICAgIGV4dGVybiBpbnQgcnBybWxlbiwgbGFzdHNwbWF4OwotICAgIGV4dGVybiBzdHJ1 Y3Qgc3lzZGF0YSBzeXNpZGxpc3RbXTsKLQotICAgIHdoYXRydSA9IDA7Ci0gICAgd2hvYXJldVsw XSA9IE5VTDsKLSNpZmRlZiBTVFJFQU1JTkcKLSAgICBzdHJlYW1vayA9IDA7Ci0gICAgc3RyZWFt aW5nID0gMDsKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLSAgICBiaWdnZXN0ID0gcmxuOwotCi0g ICAgZGVidWcoRjEwMSwgInNwYXIgYmlnZ2VzdCAxIiwiIixiaWdnZXN0KTsKLSAgICBkZWJ1ZyhG MTAxLCAic3BhciBycHJtbGVuIiwiIixycHJtbGVuKTsKLSAgICBpZiAocnBybWxlbiA+IDEgJiYg cnBybWxlbiA8IGJpZ2dlc3QpCi0gICAgICBiaWdnZXN0ID0gcnBybWxlbjsKLSAgICBkZWJ1ZyhG MTAxLCAicnBhciBiaWdnZXN0IDIiLCIiLGJpZ2dlc3QpOwotICAgIGRlYnVnKEYxMTAsInNwYXIg cGFja2V0IixzLDApOwotCi0gICAgcy0tOwkJCQkvKiBMaW5lIHVwIHdpdGggZmllbGQgbnVtYmVy cy4gKi8KLQotLyogTGltaXQgb24gc2l6ZSBvZiBvdXRib3VuZCBwYWNrZXRzICovCi0gICAgeCA9 IChiaWdnZXN0ID49IDEpID8geHVuY2hhcihzWzFdKSA6IDgwOwotICAgIGxwc2l6ID0gc3BzaXpy OwkJCS8qIFJlbWVtYmVyIHdoYXQgdGhleSBTRVQuICovCi0gICAgaWYgKHNwc2l6ZikgewkJCS8q IFNFVC1jb21tYW5kIG92ZXJyaWRlPyAqLwotCWlmICh4IDwgc3BzaXpyKSBzcHNpeiA9IHg7CS8q IElnbm9yZSBMRU4gdW5sZXNzIHNtYWxsZXIgKi8KLSAgICB9IGVsc2UgewkJCQkvKiBvdGhlcndp c2UgKi8KLQlzcHNpeiA9ICh4IDwgMTApID8gODAgOiB4OwkvKiBiZWxpZXZlIHRoZW0gaWYgcmVh c29uYWJsZSAqLwotICAgIH0KLSAgICBzcG1heCA9IHNwc2l6OwkJCS8qIFJlbWVtYmVyIG1heGlt dW0gc2l6ZSAqLwotCi0vKiBUaW1lb3V0IG9uIGluYm91bmQgcGFja2V0cyAqLwotICAgIGlmICh0 aW1lZikgewotCXRpbWludCA9IHJ0aW1vOwkJCS8qIFNFVCBTRU5EIFRJTUVPVVQgdmFsdWUgb3Zl cnJpZGVzICovCi0gICAgfSBlbHNlIHsJCQkJLyogT3RoZXJ3aXNlIHVzZSByZXF1ZXN0ZWQgdmFs dWUsICovCi0JeCA9IChiaWdnZXN0ID49IDIpID8geHVuY2hhcihzWzJdKSA6IHJ0aW1vOyAvKiBp ZiBpdCBpcyBsZWdhbC4gKi8KLQl0aW1pbnQgPSAoeCA8IDApID8gcnRpbW8gOiB4OwotICAgIH0K LSAgICB0aW1pbnQgPSBjaGt0aW1vKHRpbWludCx0aW1lZik7CS8qIEFkanVzdCBpZiBuZWNlc3Nh cnkgKi8KLQotLyogT3V0Ym91bmQgUGFkZGluZyAqLwotICAgIG5wYWQgPSAwOyBwYWRjaCA9ICdc MCc7Ci0gICAgaWYgKGJpZ2dlc3QgPj0gMykgewotCW5wYWQgPSB4dW5jaGFyKHNbM10pOwotCWlm IChiaWdnZXN0ID49IDQpIHBhZGNoID0gKENIQVIpIGN0bChzWzRdKTsgZWxzZSBwYWRjaCA9IDA7 Ci0gICAgfQotICAgIGlmIChucGFkKSB7Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IG5wYWQ7 IGkrKykgcGFkYnVmW2ldID0gZG9wYXIocGFkY2gpOwotICAgIH0KLQotLyogT3V0Ym91bmQgUGFj a2V0IFRlcm1pbmF0b3IgKi8KLSAgICBzZW9sID0gKENIQVIpIChiaWdnZXN0ID49IDUpID8geHVu Y2hhcihzWzVdKSA6IENSOwotICAgIGlmICgoc2VvbCA8IDEpIHx8IChzZW9sID4gMzEpKSBzZW9s ID0gQ1I7Ci0KLS8qIENvbnRyb2wgcHJlZml4IHRoYXQgdGhlIG90aGVyIEtlcm1pdCBpcyBzZW5k aW5nICovCi0gICAgeCA9IChiaWdnZXN0ID49IDYpID8gc1s2XSA6ICcjJzsKLSAgICBjdGxxID0g KENIQVIpICgoKHggPiAzMiAmJiB4IDwgNjMpIHx8ICh4ID4gOTUgJiYgeCA8IDEyNykpID8geCA6 ICcjJyk7Ci0KLS8qIDh0aC1iaXQgcHJlZml4ICovCi0vKgotICBOT1RFOiBNYXliZSB0aGlzIGNv dWxkIGJlIHNpbXBsaWZpZWQgdXNpbmcgcmN2dHlwLgotICBJZiByY3Z0eXAgPT0gJ1knIHRoZW4g d2UncmUgcmVhZGluZyB0aGUgQUNLLAotICBvdGhlcndpc2Ugd2UncmUgcmVhZGluZyB0aGUgb3Ro ZXIgS2VybWl0J3MgaW5pdGlhbCBiaWQuCi0gIEJ1dCBoaXMgaG9ycmVuZG91cyBjb2RlIGhhcyBi ZWVuIHdvcmtpbmcgT0sgZm9yIHllYXJzLCBzby4uLgotKi8KLSAgICBycSA9IChiaWdnZXN0ID49 IDcpID8gc1s3XSA6IDA7Ci0gICAgaWYgKHJxID09ICdZJykgcnFmID0gMTsKLSAgICAgIGVsc2Ug aWYgKChycSA+IDMyICYmIHJxIDwgNjMpIHx8IChycSA+IDk1ICYmIHJxIDwgMTI3KSkgcnFmID0g MjsKLSAgICAgICAgZWxzZSBycWYgPSAwOwotICAgIGRlYnVnKEYwMDAsInNwYXIgOGJxIHJxIiwi IixycSk7Ci0gICAgZGVidWcoRjAwMCwic3BhciA4YnEgc3EiLCIiLHNxKTsKLSAgICBkZWJ1ZyhG MDAwLCJzcGFyIDhicSBlYnEiLCIiLGVicSk7Ci0gICAgZGVidWcoRjEwMSwic3BhciA4YnEgcnFm IiwiIixycWYpOwotICAgIHN3aXRjaCAocnFmKSB7Ci0gICAgICBjYXNlIDA6CQkJCS8qIEZpZWxk IGlzIG1pc3NpbmcgZnJvbSBwYWNrZXQuICovCi0JZWJxZmxnID0gMDsJCQkvKiBTbyBubyA4dGgt Yml0IHByZWZpeGluZy4gKi8KLQlicmVhazsKLSAgICAgIGNhc2UgMToJCQkJLyogT3RoZXIgS2Vy bWl0IHNlbnQgJ1knID0gV2lsbCBEby4gKi8KLQkvKgotICAgICAgICAgIFdoZW4gSSBhbSB0aGUg ZmlsZSByZWNlaXZlciwgZWJxc2VudCBpcyAwIGJlY2F1c2UgSSBkaWRuJ3Qgc2VuZCBhCi0gICAg ICAgICAgbmVnb3RpYXRpb24geWV0LiAgSWYgbXkgcGFyaXR5IGlzIHNldCB0byBhbnl0aGluZyBv dGhlciB0aGFuIE5PTkUsCi0gICAgICAgICAgZWl0aGVyIGJlY2F1c2UgbXkgdXNlciBTRVQgUEFS SVRZIG9yIGJlY2F1c2UgSSBkZXRlY3RlZCBwYXJpdHkgYml0cwotICAgICAgICAgIG9uIHRoaXMg cGFja2V0LCBJIHJlcGx5IHdpdGggJyYnLCBvdGhlcndpc2UgJ1knLgotCi0JICBXaGVuIEkgYW0g dGhlIGZpbGUgc2VuZGVyLCBlYnFzZW50IGlzIHdoYXQgSSBqdXN0IHNlbnQgaW4gcnBhcigpLAot ICAgICAgICAgIHdoaWNoIGNhbiBiZSAnWScsICdOJywgb3IgJyYnLiAgSWYgSSBzZW50ICcmJywg dGhlbiB0aGlzICdZJyBtZWFucwotICAgICAgICAgIHRoZSBvdGhlciBLZXJtaXQgYWdyZWVzIHRv IGRvIDh0aC1iaXQgcHJlZml4aW5nLgotCi0gICAgICAgICAgSWYgSSBzZW50ICdZJyBvciAnTics IGJ1dCB0aGVuIGRldGVjdGVkIHBhcml0eSBvbiB0aGUgQUNLIHBhY2tldAotICAgICAgICAgIHRo YXQgY2FtZSBiYWNrLCB0aGVuIGl0J3MgdG9vIGxhdGU6IHRoZXJlIGlzIG5vIGxvbmdlciBhbnkg d2F5IGZvcgotICAgICAgICAgIG1lIHRvIHRlbGwgdGhlIG90aGVyIEtlcm1pdCB0aGF0IEkgd2Fu dCB0byBkbyA4dGgtYml0IHByZWZpeGluZywgc28KLSAgICAgICAgICBJIG11c3Qgbm90IGRvIGl0 LCBhbmQgaW4gdGhhdCBjYXNlLCBpZiB0aGVyZSBpcyBhbnkgOC1iaXQgZGF0YSBpbgotICAgICAg ICAgIHRoZSBmaWxlIHRvIGJlIHRyYW5zZmVycmVkLCB0aGUgdHJhbnNmZXIgd2lsbCBmYWlsIGJl Y2F1c2Ugb2YgYmxvY2sKLSAgICAgICAgICBjaGVjayBlcnJvcnMuCi0KLSAgICAgICAgICBUaGUg Zm9sbG93aW5nIGNsYXVzZSBjb3ZlcnMgYWxsIG9mIHRoZXNlIHNpdHVhdGlvbnM6Ci0JKi8KLQlp ZiAocGFyaXR5ICYmIChlYnFzZW50ID09IDAgfHwgZWJxc2VudCA9PSAnJicpKSB7Ci0JICAgIGVi cWZsZyA9IDE7Ci0JICAgIGVicSA9IE1ZRUJROwotCX0KLQlicmVhazsKLSAgICAgIGNhc2UgMjoJ CQkJLyogT3RoZXIgS2VybWl0IHNlbnQgYSB2YWxpZCBwcmVmaXggKi8KLQllYnFmbGcgPSAoZWJx ID09IHNxIHx8IHNxID09ICdZJyk7Ci0JaWYgKGVicWZsZykgewotCSAgICBlYnEgPSBycTsKLQkg ICAgZGVidWcoRjEwMSwic3BhciBzZXR0aW5nIHBhcml0eSB0byBzcGFjZSIsIiIsZWJxKTsKLQkg ICAgaWYgKCFwYXJpdHkpIHBhcml0eSA9IHR0cHJ0eSA9ICdzJzsKLQl9Ci0gICAgfQotICAgIGlm IChsc2NhcHUgPT0gMikgeyAgICAgLyogQnV0IG5vIHNpbmdsZS1zaGlmdHMgaWYgTE9DS0lORy1T SElGVCBGT1JDRUQgKi8KLQllYnFmbGcgPSAwOwotCWVicSA9ICdOJzsKLSAgICB9Ci0KLS8qIEJs b2NrIGNoZWNrICovCi0gICAgeCA9IDE7Ci0gICAgaWYgKGJpZ2dlc3QgPj0gOCkgewotCWlmIChz WzhdID09ICdCJykgeCA9IDQ7Ci0JZWxzZSB4ID0gc1s4XSAtICcwJzsKLQlpZiAoKHggPCAxKSB8 fCAoeCA+IDUpKSB4ID0gMTsJLyogIjUiIDIwMTEwNjA1ICovCi0gICAgfQotICAgIGJjdHIgPSB4 OwotCi0vKiBSZXBlYXQgcHJlZml4ICovCi0KLSAgICBycHRmbGcgPSAwOwkJCQkvKiBBc3N1bWUg bm8gcmVwZWF0LWNvdW50cyAqLwotICAgIGlmIChiaWdnZXN0ID49IDkpIHsJCQkvKiBJcyB0aGVy ZSBhIHJlcGVhdC1jb3VudCBmaWVsZD8gKi8KLQljaGFyIHQ7CQkJCS8qIFllcy4gKi8KLQl0ID0g c1s5XTsJCQkvKiBHZXQgaXRzIGNvbnRlbnRzLiAqLwotLyoKLSAgSWYgSSdtIHNlbmRpbmcgZmls ZXMsIHRoZW4gSSdtIHJlYWRpbmcgdGhlc2UgcGFyYW1ldGVycyBmcm9tIGFuIEFDSywgYW5kIHNv Ci0gIHRoaXMgY2hhcmFjdGVyIG11c3QgYWdyZWUgd2l0aCB3aGF0IEkgc2VudC4KLSovCi0JaWYg KHJwdGVuYSkgewkJCS8qIElmIGVuYWJsZWQgLi4uICovCi0JICAgIGlmICgoY2hhcikgcmN2dHlw ID09ICdZJykgewkvKiBTZW5kaW5nIGZpbGVzLCByZWFkaW5nIEFDSy4gKi8KLQkJaWYgKHQgPT0g bXlycHRxKSBycHRmbGcgPSAxOwotCSAgICB9IGVsc2UgewkJCS8qIEknbSByZWNlaXZpbmcgZmls ZXMgKi8KLQkJaWYgKCh0ID4gMzIgJiYgdCA8IDYzKSB8fCAodCA+IDk1ICYmIHQgPCAxMjcpKSB7 Ci0JCSAgICBycHRmbGcgPSAxOwotCQkgICAgcnB0cSA9IHQ7Ci0JCX0KLQkgICAgfQotCX0gZWxz ZSBycHRmbGcgPSAwOwotICAgIH0KLQotLyogQ2FwYWJpbGl0aWVzICovCi0KLSAgICBhdGNhcHUg PSBscGNhcHUgPSBzd2NhcHUgPSByc2NhcHUgPSAwOyAvKiBBc3N1bWUgbm9uZSBvZiB0aGVzZS4g Ki8KLSAgICBpZiAobHNjYXB1ICE9IDIpIGxzY2FwdSA9IDA7CS8qIEFzc3VtZSBubyBMUyB1bmxl c3MgZm9yY2VkLiAqLwotICAgIHkgPSAxMTsJCQkJLyogUG9zaXRpb24gb2YgbmV4dCBmaWVsZCwg aWYgYW55ICovCi0gICAgaWYgKGJpZ2dlc3QgPj0gMTApIHsKLSAgICAgICAgeCA9IHh1bmNoYXIo c1sxMF0pOwotCWRlYnVnKEYxMDEsInNwYXIgY2FwYXMiLCIiLHgpOwotICAgICAgICBhdGNhcHUg PSAoeCAmIGF0Y2FwYikgJiYgYXRjYXByOyAvKiBBdHRyaWJ1dGVzICovCi0JbHBjYXB1ID0gKHgg JiBscGNhcGIpICYmIGxwY2FwcjsgLyogTG9uZyBwYWNrZXRzICovCi0Jc3djYXB1ID0gKHggJiBz d2NhcGIpICYmIHN3Y2FwcjsgLyogU2xpZGluZyB3aW5kb3dzICovCi0JcnNjYXB1ID0gKHggJiBy c2NhcGIpICYmIHJzY2FwcjsgLyogUkVTRU5EICovCi0JZGVidWcoRjEwMSwic3BhciBsc2NhcHUi LCIiLGxzY2FwdSk7Ci0JZGVidWcoRjEwMSwic3BhciBsc2NhcHIiLCIiLGxzY2Fwcik7Ci0JZGVi dWcoRjEwMSwic3BhciBlYnFmbGciLCIiLGVicWZsZyk7Ci0JaWYgKGxzY2FwdSAhPSAyKSBsc2Nh cHUgPSAoKHggJiBsc2NhcGIpICYmIGxzY2FwciAmJiBlYnFmbGcpID8gMSA6IDA7Ci0JZGVidWco RjEwMSwic3BhciBzd2NhcHIiLCIiLHN3Y2Fwcik7Ci0JZGVidWcoRjEwMSwic3BhciBzd2NhcHUi LCIiLHN3Y2FwdSk7Ci0JZGVidWcoRjEwMSwic3BhciBsc2NhcHUiLCIiLGxzY2FwdSk7Ci0JZm9y ICh5ID0gMTA7ICh4dW5jaGFyKHNbeV0pICYgMSkgJiYgKGJpZ2dlc3QgPj0geSk7IHkrKyk7Ci0J ZGVidWcoRjEwMSwic3BhciB5IiwiIix5KTsKLSAgICB9Ci0KLS8qIExvbmcgUGFja2V0cyAqLwot ICAgIGRlYnVnKEYxMDEsInNwYXIgbHBjYXB1IiwiIixscGNhcHUpOwotICAgIGlmIChscGNhcHUp IHsKLSAgICAgICAgaWYgKGJpZ2dlc3QgPiB5KzEpIHsKLQkgICAgeCA9IHh1bmNoYXIoc1t5KzJd KSAqIDk1ICsgeHVuY2hhcihzW3krM10pOwotCSAgICBkZWJ1ZyhGMTAxLCJzcGFyIGxwIGxlbiIs IiIseCk7Ci0JICAgIGlmIChzcHNpemYpIHsJCS8qIElmIG92ZXJyaWRpbmcgbmVnb3RpYXRpb25z ICovCi0JCXNwc2l6ID0gKHggPCBscHNpeikgPyB4IDogbHBzaXo7IC8qIGRvIHRoaXMsICovCi0J ICAgIH0gZWxzZSB7CQkJICAgICAgICAgLyogb3RoZXJ3aXNlICovCi0JCXNwc2l6ID0gKHggPiBN QVhTUCkgPyBNQVhTUCA6IHg7IC8qIGRvIHRoaXMuICovCi0JICAgIH0KLQkgICAgaWYgKHNwc2l6 IDwgMTApIHNwc2l6ID0gODA7CS8qIEJlIGRlZmVuc2l2ZS4uLiAqLwotCX0KLSAgICB9Ci0gICAg LyogKFBXUCkgc2F2ZSBjdXJyZW50IHNlbmQgcGFja2V0IHNpemUgZm9yIG9wdGltYWwgcGFja2V0 IHNpemUgY2FsY3MgKi8KLSAgICBzcG1heCA9IHNwc2l6OwkJCS8qIE1heGltdW0gbmVnb3RpYXRl ZCBsZW5ndGggKi8KLSAgICBsYXN0c3BtYXggPSBzcHNpejsJCQkvKiBGb3Igc3RhdHMgKi8KLSAg ICBpZiAoc2xvc3RhcnQgJiYgc3BzaXogPiA0OTkpCS8qIFNsb3cgc3RhcnQgbGVuZ3RoICovCi0g ICAgICBzcHNpeiA9IDI0NDsKLSAgICBkZWJ1ZyhGMTAxLCJzcGFyIHNsb3ctc3RhcnQgc3BzaXoi LCIiLHNwc2l6KTsKLSAgICBkZWJ1ZyhGMTAxLCJzcGFyIGxwIHNwbWF4IiwiIixzcG1heCk7Ci0g ICAgdGltaW50ID0gY2hrdGltbyh0aW1pbnQsdGltZWYpOwkvKiBSZWNhbGN1bGF0ZSB0aGUgcGFj a2V0IHRpbWVvdXQgKi8KLQotLyogU2xpZGluZyBXaW5kb3dzLi4uICovCi0KLSAgICBpZiAoc3dj YXByKSB7CQkJLyogT25seSBpZiByZXF1ZXN0ZWQuLi4gKi8KLSAgICAgICAgaWYgKGJpZ2dlc3Qg PiB5KSB7CQkvKiBTZWUgd2hhdCBvdGhlciBLZXJtaXQgc2F5cyAqLwotCSAgICB4ID0geHVuY2hh cihzW3krMV0pOwotCSAgICBkZWJ1ZyhGMTAxLCJzcGFyIHdpbmRvdyIsIiIseCk7Ci0JICAgIHdz bG90biA9ICh4ID4gTUFYV1MpID8gTUFYV1MgOiB4OwotLyoKLSAgd3Nsb3RuID0gbmVnb3RpYXRl ZCBzaXplIChmcm9tIG90aGVyIEtlcm1pdCdzIFMgb3IgSSBwYWNrZXQpLgotICB3c2xvdHIgPSBy ZXF1ZXN0ZWQgd2luZG93IHNpemUgKGZyb20gdGhpcyBLZXJtaXQncyBTRVQgV0lORE9XIGNvbW1h bmQpLgotKi8KLQkgICAgaWYgKHdzbG90biA+IHdzbG90cikJLyogVXNlIHRoZSBzbWFsbGVyIG9m IHRoZSB0d28gKi8KLQkgICAgICB3c2xvdG4gPSB3c2xvdHI7Ci0JICAgIGlmICh3c2xvdG4gPCAx KQkJLyogV2F0Y2ggb3V0IGZvciBiYWQgbmVnb3RpYXRpb24gKi8KLQkgICAgICB3c2xvdG4gPSAx OwotCSAgICBpZiAod3Nsb3RuID4gMSkgewotCQlzd2NhcHUgPSAxOwkJLyogV2UgZG8gd2luZG93 cy4uLiAqLwotCQlpZiAod3Nsb3RuID4gbWF4dHJ5KQkvKiBSZXRyeSBsaW1pdCBtdXN0IGJlIGdy ZWF0ZXIgKi8KLQkJICBtYXh0cnkgPSB3c2xvdG4gKyAxOwkvKiB0aGFuIHdpbmRvdyBzaXplLiAq LwotCSAgICB9Ci0JICAgIGRlYnVnKEYxMDEsInNwYXIgd2luZG93IGFmdGVyIGFkanVzdG1lbnQi LCIiLHgpOwotCX0gZWxzZSB7CQkJLyogTm8gd2luZG93IHNpemUgc3BlY2lmaWVkLiAqLwotCSAg ICB3c2xvdG4gPSAxOwkJCS8qIFdlIGRvbid0IGRvIHdpbmRvd3MuLi4gKi8KLQkgICAgZGVidWco RjEwMSwic3BhciB3aW5kb3ciLCIiLHgpOwotCSAgICBzd2NhcHUgPSAwOwotCSAgICBkZWJ1ZyhG MTAxLCJzcGFyIG5vIHdpbmRvd3MiLCIiLHdzbG90bik7Ci0JfQotICAgIH0KLQotLyogTm93IHJl Y2FsY3VsYXRlIHBhY2tldCBsZW5ndGggYmFzZWQgb24gbnVtYmVyIG9mIHdpbmRvd3MuICAgKi8K LS8qIFRoZSBub2dvdGlhdGVkIG51bWJlciBvZiB3aW5kb3cgc2xvdHMgd2lsbCBiZSBhbGxvY2F0 ZWQsICAgICovCi0vKiBhbmQgdGhlIG1heGltdW0gcGFja2V0IGxlbmd0aCB3aWxsIGJlIHJlZHVj ZWQgaWYgbmVjZXNzYXJ5LCAqLwotLyogc28gdGhhdCBhIHdpbmRvd2Z1bCBvZiBwYWNrZXRzIGNh biBmaXQgaW4gdGhlIGJpZyBidWZmZXIuICAgKi8KLQotICAgIGlmICh3c2xvdG4gPiAxKSB7CQkJ LyogU2hyaW5rIHRvIGZpdC4uLiAqLwotCXggPSBhZGpwa2woc3BtYXgsd3Nsb3RuLGJpZ3Nic2l6 KTsKLQlpZiAoeCA8IHNwbWF4KSB7Ci0JICAgIHNwbWF4ID0geDsKLQkgICAgbGFzdHNwbWF4ID0g c3BzaXo7Ci0JICAgIGlmIChzbG9zdGFydCAmJiBzcHNpeiA+IDQ5OSkgc3BzaXogPSAyNDQ7IC8q IFNsb3cgc3RhcnQgYWdhaW4gKi8KLQkgICAgZGVidWcoRjEwMSwic3BhciBzZW5kaW5nLCByZWRl ZmluZSBzcG1heCIsIiIsc3BtYXgpOwotCX0KLSAgICB9Ci0jaWZkZWYgV0hBVEFNSQotICAgIGRl YnVnKEYxMDEsInNwYXIgYmlnZ2VzdCIsIiIsYmlnZ2VzdCk7Ci0gICAgaWYgKGJpZ2dlc3QgPiB5 KzcpIHsJCS8qIEdldCBXSEFUQU1JIGluZm8gaWYgYW55ICovCi0Jd2hhdHJ1ID0geHVuY2hhcihz W3krOF0pOwotCWRlYnVnKEYxMDEsInNwYXIgd2hhdHJ1IiwiIix3aGF0cnUpOwotICAgIH0KLSAg ICBpZiAod2hhdHJ1ICYgV01JX0ZMQUcpIHsJCS8qIE9ubHkgdmFsaWQgaWYgdGhpcyBiaXQgaXMg c2V0ICovCi0jaWZkZWYgU1RSRUFNSU5HCi0JaWYgKHdoYXRydSAmIFdNSV9TVFJFQU0pIHsKLQkg ICAgaWYgKHN0cmVhbXJxID09IFNFVF9PTiB8fAotCQkoc3RyZWFtcnEgPT0gU0VUX0FVVE8gJiYK LQkJIChyZWxpYWJsZSA9PSBTRVRfT04gfHwgKHJlbGlhYmxlID09IFNFVF9BVVRPICYmICFsb2Nh bCkKLSNpZmRlZiBUTl9DT01QT1JUCi0gICAgICAgICAgICAgICAgICAmJiAhaXN0bmNvbXBvcnQo KQotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLSNpZmRlZiBJS1NECi0gICAgICAgICAgICAgICAg ICAgfHwgaW5zZXJ2ZXIKLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAgICAgICAgICAgICAgKSkp IHsKLQkJc3RyZWFtb2sgPSAxOwkJLyogU3RyZWFtaW5nIG5lZ290aWF0ZWQgKi8KLQkJc2xvc3Rh cnQgPSAwOwkJLyogVW5kbyBzbG93LXN0YXJ0IG1hY2hpbmF0aW9ucyAqLwotCQlzcHNpeiA9IGxh c3RzcG1heDsKLQkgICAgfQotCX0KLQlzdHJlYW1lZCA9IHN0cmVhbW9rOwotCWRlYnVnKEYxMDEs InNwYXIgc3RyZWFtb2siLCIiLHN0cmVhbW9rKTsKLQlkZWJ1ZyhGMTAxLCJzcGFyIGNsZWFycnEi LCIiLGNsZWFycnEpOwotCWlmIChjbGVhcnJxID09IFNFVF9PTiB8fAotICAgICAgICAgICAgIChj bGVhcnJxID09IFNFVF9BVVRPICYmCi0gICAgICAgICAgICAgICAoKG5ldHdvcmsgJiYgbmV0dHlw ZSA9PSBORVRfVENQQgotI2lmZGVmIFJMT0dDT0RFCi0gICAgICAgICAgICAgICAgJiYgdHRucHJv dG8gIT0gTlBfUkxPR0lOLyogUmxvZ2luIGlzIG5vdCBjbGVhciAqLwotICAgICAgICAgICAgICAg ICYmICEodHRucHJvdG8gPj0gTlBfSzRMT0dJTiAmJiB0dG5wcm90byA8PSBOUF9FSzVMT0dJTikK LSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotI2lmZGVmIFROX0NPTVBPUlQKLSAgICAgICAgICAgICAg ICAmJiAhaXN0bmNvbXBvcnQoKQotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLSAgICAgICAgICAg ICAgICAgICkKLSNpZmRlZiBTU0hCVUlMVElOCi0gICAgICAgICAgICAgICAgIHx8IChuZXR3b3Jr ICYmIG5ldHR5cGUgPT0gTkVUX1NTSCkKLSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0jaWZkZWYg SUtTRAotICAgICAgICAgICAgICAgICB8fCBpbnNlcnZlcgotI2VuZGlmIC8qIElLU0QgKi8KLSAg ICAgICAgICAgICAgICAgKSkpCi0gICAgICAgICAgdXJjbGVhciA9ICh3aGF0cnUgJiBXTUlfQ0xF QVIpOwotCWRlYnVnKEYxMDEsInNwYXIgdXJjbGVhciIsIiIsdXJjbGVhcik7Ci0jaWZkZWYgQ0tf U1BFRUQKLQlpZiAodXJjbGVhcikKLQkgIHNldHByZWZpeChQWF9OT04pOwotI2VuZGlmIC8qIENL X1NQRUVEICovCi0JY2xlYXJlZCA9IHVyY2xlYXI7Ci0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0g ICAgfQotI2VuZGlmIC8qIFdIQVRBTUkgKi8KLQotICAgIGlmIChiaWdnZXN0ID4geSs4KSB7CQkv KiBHZXQgV0hPQVJFWU9VIGluZm8gaWYgYW55ICovCi0JaW50IHgsIHo7Ci0JeCA9IHh1bmNoYXIo c1t5KzldKTsJCS8qIExlbmd0aCBvZiBpdCAqLwotCXogPSB5OwotCXkgKz0gKDkgKyB4KTsKLQlk ZWJ1ZyhGMTAxLCJzcGFyIHN5c2luZGV4IHgiLCIiLHgpOwotCWRlYnVnKEYxMDEsInNwYXIgc3lz aW5kZXggeSIsIiIseSk7Ci0JZGVidWcoRjEwMSwic3BhciBzeXNpbmRleCBiaWdnZXN0IiwiIixi aWdnZXN0KTsKLQotCWlmICh4ID4gMCAmJiB4IDwgMTYgJiYgYmlnZ2VzdCA+PSB5KSB7Ci0JICAg IHN0cm5jcHkod2hvYXJldSwoY2hhciAqKXMreisxMCx4KTsgLyogT3RoZXIgS2VybWl0J3Mgc3lz dGVtIElEICovCi0JICAgIGRlYnVnKEYxMTEsInNwYXIgd2hvYXJleW91Iix3aG9hcmV1LHdob2Fy ZXVbMF0pOwotCSAgICBpZiAod2hvYXJldVswXSkgewkJLyogR290IG9uZT8gKi8KLQkJc3lzaW5k ZXggPSBnZXRzeXNpeCgoY2hhciAqKXdob2FyZXUpOwotCQlkZWJ1ZyhGMTAxLCJzcGFyIHN5c2lu ZGV4Iix3aG9hcmV1LHN5c2luZGV4KTsKLQkgICAgfQotCX0KLSAgICB9IGVsc2UKLSAgICAgIGdv dG8geHNwYXI7Ci0KLSNpZmRlZiBXSEFUQU1JCi0gICAgeSsrOwkJCQkvKiBBZHZhbmNlIHBvaW50 ZXIgKi8KLSAgICBpZiAoYmlnZ2VzdCA+PSB5KSB7Ci0Jd2hhdHJ1MiA9IHh1bmNoYXIoc1t5XSk7 CS8qIE5leHQgZmllbGQgaXMgV0hBVEFNSTIgKi8KLQlkZWJ1ZyhGMTAxLCJzcGFyIHdoYXRydTIi LCIiLHdoYXRydTIpOwotCWlmICh3aGF0cnUyICYgV01JMl9GTEFHKSB7CS8qIFZhbGlkIG9ubHkg aWYgdGhpcyBiaXQgaXMgc2V0ICovCi0JICAgIGlmIChzZXJ2ZXIpIHsJCS8qIFNlcnZlciBvYmV5 cyBjbGllbnQncyB4ZmVyIG1vZGUgKi8KLQkJeGZlcm1vZGUgPSAod2hhdHJ1MiAmIFdNSTJfWE1P REUpID8gWE1PREVfTSA6IFhNT0RFX0E7Ci0JCWRlYnVnKEYxMDEsInNwYXIgd2hhdHJ1MiB4ZmVy bW9kZSIsIiIseGZlcm1vZGUpOwotCSAgICB9Ci0JICAgIGlmICh3aGF0cnUyICYgV01JMl9SRUNV KSB7CS8qIFJFQ1VSU0lWRSB0cmFuc2ZlciAqLwotCQlpZiAoZm5ycGF0aCA9PSBQQVRIX0FVVE8p IHsgLyogSWYgUkVDIFBBVEggQVVUTyAqLwotCQkgICAgZm5ycGF0aCA9IFBBVEhfUkVMOwkvKiBT ZXQgaXQgdG8gUkVMQVRJVkUgKi8KLQkJICAgIGF1dG9wYXRoID0gMTsJLyogYW5kIHJlbWVtYmVy IHdlIGRpZCB0aGlzICovCi0JCX0KLQkgICAgfQotCX0KLSAgICB9Ci0jZW5kaWYgLyogV0hBVEFN SSAqLwotCi0gIHhzcGFyOgotICAgIGlmIChzeXNpbmRleCA+IC0xKSB7Ci0JY2hhciAqIHA7Ci0J cCA9IHN5c2lkbGlzdFtzeXNpbmRleF0uc2lkX25hbWU7Ci0JdGxvZyhGMTEwLCJSZW1vdGUgc3lz dGVtIHR5cGU6ICIscCwwTCk7Ci0JaWYgKHN5c2luZGV4ID4gMCkgewkJLyogSWYgcGFydG5ldCdz IHN5c3RlbSB0eXBlIGtub3duICovCi0JICAgIHdob2FyZXdlKCk7CQkJLyogc2VlIGlmIHdlIGFy ZSBhIG1hdGNoLiAqLwotI2lmZGVmIENLX1NQRUVECi0vKiBOZXZlciB1bnByZWZpeCBYT04gYW5k IFhPRkYgd2hlbiBzZW5kaW5nIHRvIFZNUyAqLwotCSAgICBkZWJ1ZyhGMTExLCJwcm90byB3aG9h cmV1Iix3aG9hcmV1LHN5c2luZGV4KTsKLQkgICAgaWYgKCFzdHJjbXAoKGNoYXIgKil3aG9hcmV1 LCJENyIpKSB7Ci0JCWRlYnVnKEYxMTEsInByb3RvIHNwZWNpYWwgVk1TIHByZWZpeGluZyIsIiIs MCk7Ci0JCWN0bHBbWE9OXSA9IGN0bHBbWE9GRl0gPSAxOwotCQljdGxwW1hPTisxMjhdID0gY3Rs cFtYT0ZGKzEyOF0gPSAxOwotCQljdGxwWzNdID0gMTsJCS8qIEN0cmwtQyBtaWdodCBiZSBkYW5n ZXJvdXMgdG9vICovCi0JCWN0bHBbMTRdID0gY3RscFsxNV0gPSAxOyAvKiBBbmQgU08vU0kgKi8K LQkJY3RscFsyNF0gPSBjdGxwWzI1XSA9IDE7IC8qIEFuZCBeWC9eWSAqLwotCQljdGxwWzE0MV0g PSAxOwkJLyogQW5kIENSKzEyOCAqLwotCSAgICB9Ci0jZW5kaWYgLyogQ0tfU1BFRUQgKi8KLQl9 Ci0gICAgfQotCi0vKiBSZWNvcmQgcGFyYW1ldGVycyBpbiBkZWJ1ZyBsb2cgKi8KLSNpZmRlZiBE RUJVRwotICAgIGlmIChkZWJsb2cpIHNkZWJ1KGJpZ2dlc3QpOwotI2VuZGlmIC8qIERFQlVHICov Ci0gICAgbnVtZXJycyA9IDA7CQkJLyogU3RhcnQgY291bnRpbmcgZXJyb3JzIGhlcmUuICovCi0g ICAgcmV0dXJuKDApOwotfQotCi0vKiAgRyBOIEYgSSBMIEUgIC0tICBHZXQgbmFtZSBvZiBuZXh0 IGZpbGUgdG8gc2VuZCAgKi8KLS8qCi0gIEV4cGVjdHMgZ2xvYmFsIHNuZHNyYyB0byBiZToKLSAg IC05OiBpZiB3ZSBhcmUgZ2VuZXJhdGluZyBhIGZpbGUgaW50ZXJuYWxseSBmb3IgY2FsaWJyYXRp b24uCi0gICAtMTogbmV4dCBmaWxlbmFtZSB0byBiZSBvYnRhaW5lZCBieSBjYWxsaW5nIHpuZXh0 KCkuCi0gICAgMDogbm8gbmV4dCBmaWxlIG5hbWUKLSAgICAxOiAob3IgZ3JlYXRlcikgbmV4dCBm aWxlbmFtZSB0byBiZSBvYnRhaW5lZCBmcm9tICoqY21saXN0LAotICAgICAgIG9yIGlmIGFkZGxp c3QgIT0gMCwgZnJvbSB0aGUgImZpbGVoZWFkIiBsaW5rZWQgbGlzdCwKLSAgICAgICBvciBpZiBm aWxlZmlsZSBwb2ludGVyIG5vdCBudWxsIGZyb20gdGhhdCBmaWxlICh3aGljaCBpcyBhbHJlYWR5 IG9wZW4pLgotICBSZXR1cm5zOgotICAgIDEsIHdpdGggbmFtZSBvZiBuZXh0IGZpbGUgaW4gZmls bmFtLgotICAgIDAsIG5vIG1vcmUgZmlsZXMsIHdpdGggZmlsbmFtIHNldCB0byBlbXB0eSBzdHJp bmcuCi0gICAtMSwgZmlsZSBub3QgZm91bmQKLSAgIC0yLCBmaWxlIGlzIG5vdCByZWFkYWJsZSAo YnV0IHRoZW4gd2UganVzdCBza2lwIHRvIHRoZSBuZXh0IG9uZSBpZiBhbnkpCi0gICAtMywgcmVh ZCBhY2Nlc3MgZGVuaWVkCi0gICAtNCwgY2FuY2VsbGVkCi0gICAtNSwgdG9vIG1hbnkgZmlsZXMg bWF0Y2ggd2lsZGNhcmQKLSAgIC02LCBubyBmaWxlcyBzZWxlY3RlZAotICBOT1RFOgotICAgIElm IGduZmlsZSgpIHJldHVybnMgMCwgdGhlbiB0aGUgZ2xvYmFsIHZhcmlhYmxlIGduZmVycm9yIHNo b3VsZCBiZSBjaGVja2VkCi0gICAgdG8gZmluZCBvdXQgdGhlIG1vc3QgcmVjZW50IGduZmlsZSgp IGVycm9yLCBhbmQgdXNlIHRoYXQgaW5zdGVhZCBvZiB0aGUKLSAgICByZXR1cm4gY29kZSAoZm9y IHJlYXNvbnMgdG8gaGFyZCB0byBleHBsYWluKS4KLSovCi1pbnQKLWduZmlsZSgpIHsKLSAgICBp bnQgaSA9IDAsIHggPSAwOwotICAgIENLX09GRl9UIGZpbGVzaXplID0gMDsKLSAgICBpbnQgZG9k aXJzdG9vID0gMDsKLSAgICBpbnQgcmV0Y29kZSA9IDA7Ci0KLSAgICBjaGFyIGZ1bGxuYW1lW0NL TUFYUEFUSCsxXTsKLQotICAgIGRvZGlyc3RvbyA9ICgod2hhdCAmIChXX0ZUUHxXX1NFTkQpKSA9 PSAoV19GVFB8V19TRU5EKSkgJiYgcmVjdXJzaXZlOwotCi0gICAgZGVidWcoRjEwMSwiZ25maWxl IHNuZHNyYyIsIiIsc25kc3JjKTsKLSAgICBkZWJ1ZyhGMTAxLCJnbmZpbGUgZmlsY250IiwiIixm aWxjbnQpOwotICAgIGRlYnVnKEYxMDEsImduZmlsZSB3aGF0IiwiIix3aGF0KTsKLSAgICBkZWJ1 ZyhGMTAxLCJnbmZpbGUgcmVjdXJzaXZlIiwiIixyZWN1cnNpdmUpOwotICAgIGRlYnVnKEYxMDEs ImduZmlsZSBkb2RpcnN0b28iLCIiLGRvZGlyc3Rvbyk7Ci0gICAgZ25mZXJyb3IgPSAwOwotICAg IGZzaXplID0gKENLX09GRl9UKS0xOwkJLyogSW5pdGlhbGl6ZSBmaWxlIHNpemUgKi8KLSAgICBm dWxsbmFtZVswXSA9IE5VTDsKLQotI2lmZGVmIFZNUwotICAgIC8qIAotICAgICAgSW4gVk1TLCB6 b3BlbmkoKSBzZXRzIGJpbmFyeSAwLzEgYXV0b21hdGljYWxseSBmcm9tIHRoZSBmaWxlCi0gICAg ICBhdHRyaWJ1dGVzLiAgRG9uJ3QgdW5kbyBpdCBoZXJlLgotICAgICovCi0gICAgZGVidWcoRjEw MSwiZ25maWxlIFZNUyBiaW5hcnkiLCIiLGJpbmFyeSk7Ci0jZWxzZSAgLyogVk1TICovCi0gICAg aWYgKCEod2hhdCAmIFdfUkVNTykgJiYgKHhmZXJtb2RlID09IFhNT0RFX0EpCi0jaWZuZGVmIE5P TVNFTkQKLQkmJiAhYWRkbGlzdAotI2VuZGlmIC8qIE5PTVNFTkQgKi8KLQkpIHsKLQlleHRlcm4g aW50IHN0ZGluZjsKLQlpZiAoIXN0ZGluZikJCQkvKiBOb3QgaWYgc2VuZGluZyBmcm9tIHN0ZGlu ICovCi0jaWZkZWYgV0hBVEFNSQotCSAgLyogV2UgZG9uJ3QgZG8gdGhpcyBpbiBzZXJ2ZXIgbW9k ZSBiZWNhdXNlIGl0IHVuZG9lcyBXSEFUQU1JICovCi0JICBpZiAoIXNlcnZlciB8fCAoc2VydmVy ICYmICgod2hhdHJ1ICYgV01JX0ZMQUcpID09IDApKSkKLSNlbmRpZiAvKiBXSEFUQU1JICovCi0J ICAgIGJpbmFyeSA9IGduZl9iaW5hcnk7CS8qIFJlc3RvcmUgcHJldmFpbGluZyB0cmFuc2ZlciBt b2RlICovCi0JZGVidWcoRjEwMSwiZ25maWxlIGJpbmFyeSA9IGduZl9iaW5hcnkiLCIiLGduZl9i aW5hcnkpOwotICAgIH0KLSNlbmRpZgkvKiBWTVMgKi8KLQotI2lmZGVmIFBJUEVTRU5ECi0gICAg ZGVidWcoRjEwMSwiZ25maWxlIHBpcGVzZW5kIiwiIixwaXBlc2VuZCk7Ci0gICAgaWYgKHBpcGVz ZW5kKSB7CQkJLyogRmlyc3Qgb25lICovCi0JaWYgKGZpbGNudCA9PSAwKSB7Ci0JICAgIGNrc3Ry bmNweShmaWxuYW0sY21hcmcsQ0tNQVhQQVRIKzEpOwotCSAgICByZXR1cm4oMSk7Ci0JfSBlbHNl IHsJCQkvKiBUaGVyZSdzIG9ubHkgb25lLi4uICovCi0JICAgICpmaWxuYW0gPSBOVUw7Ci0JICAg IHBpcGVzZW5kID0gMDsKLQkgICAgcmV0dXJuKDApOwotCX0KLSAgICB9Ci0jZW5kaWYgLyogUElQ RVNFTkQgKi8KLQotI2lmZGVmIENBTElCUkFURQotICAgIGlmIChzbmRzcmMgPT0gLTkpIHsKLQlk ZWJ1ZyhGMTAwLCJnbmZpbGUgY2FsaWJyYXRlIiwiIiwwKTsKLQlja3N0cm5jcHkoZmlsbmFtLCJD QUxJQlJBVElPTiIsQ0tNQVhQQVRIKTsKLQluZmlscyA9IDA7Ci0JY2FsX2ogPSAwOwotCWZzaXpl ID0gY2FsaWJyYXRlOwotCXNuZHNyYyA9IDA7CQkJLyogRm9yIG5leHQgdGltZSAqLwotCW5maWxz ID0gMDsKLQlyZXR1cm4oMSk7Ci0gICAgfQotI2VuZGlmIC8qIENBTElCUkFURSAqLwotCi0jaWZu ZGVmIE5PU1BMCi0gICAgaWYgKHNuZGFycmF5KSB7CQkJLyogU2VuZGluZyBmcm9tIGFuIGFycmF5 ICovCi0JZXh0ZXJuIGNoYXIgc25keG5hbVtdOwkJLyogUHNldWRvIGZpbGVuYW1lICovCi0JZGVi dWcoRjEwMCwiZ25maWxlIGFycmF5IiwiIiwwKTsKLQluZmlscyA9IDA7Ci0JZnNpemUgPSAoQ0tf T0ZGX1QpLTE7CQkvKiBTaXplIHVua25vd24gKi8KLQlzbmRzcmMgPSAwOwotCWNrc3RybmNweShm aWxuYW0sc25keG5hbSxDS01BWFBBVEgpOwotCXJldHVybigxKTsKLSAgICB9Ci0jZW5kaWYgLyog Tk9TUEwgKi8KLQotICAgIGlmIChzbmRzcmMgPT0gMCkgewkJCS8qIEl0J3Mgbm90IHJlYWxseSBh IGZpbGUgKi8KLQlpZiAobmZpbHMgPiAwKSB7CQkvKiBJdCdzIGEgcGlwZSwgb3Igc3RkaW4gKi8K LQkgICAgY2tzdHJuY3B5KGZpbG5hbSwqY21saXN0LENLTUFYUEFUSCsxKTsgLyogQ29weSBpdHMg Im5hbWUiICovCi0JICAgIG5maWxzID0gMDsJCQkvKiBUaGVyZSBpcyBubyBuZXh0IGZpbGUgKi8K LQkgICAgcmV0dXJuKDEpOwkJCS8qIE9LIHRoaXMgdGltZSAqLwotCX0gZWxzZSByZXR1cm4oMCk7 CQkvKiBidXQgbm90IG5leHQgdGltZSAqLwotICAgIH0KLQotLyogSWYgZmlsZSBncm91cCBpbnRl cnJ1cHRpb24gKEMtWikgb2NjdXJyZWQsIGZhaWwuICAqLwotCi0gICAgaWYgKGN6c2Vlbikgewot CXRsb2coRjEwMCwiVHJhbnNhY3Rpb24gY2FuY2VsbGVkIiwiIiwwTCk7Ci0gICAgICAgIGRlYnVn KEYxMDAsImduZmlsZSBjenNlZW4iLCIiLDApOwotCXJldHVybigtNCk7Ci0gICAgfQotCi0vKiBM b29wIHRocm91Z2ggZmlsZSBsaXN0IHRpbGwgd2UgZmluZCBhIHJlYWRhYmxlLCBzZW5kYWJsZSBm aWxlICovCi0KLSAgICBmaWxlc2l6ZSA9IChDS19PRkZfVCktMTsJCS8qIExvb3AgZXhpdCAoZmls ZSBzaXplKSB2YXJpYWJsZSAqLwotICAgIHdoaWxlIChmaWxlc2l6ZSA8IDApIHsJCS8qIEtlZXAg dHJ5aW5nIHRpbGwgd2UgZ2V0IG9uZS4uLiAqLwotCXJldGNvZGUgPSAwOwotCWlmIChzbmRzcmMg PiAwKSB7CQkvKiBGaWxlIGxpc3QgaW4gY21saXN0IG9yIGZpbGUgKi8KLQkgICAgaWYgKGZpbGVm aWxlKSB7CQkvKiBSZWFkaW5nIGxpc3QgZnJvbSBmaWxlLi4uICovCi0JCWlmICh6c2lubChaTUZJ TEUsZmlsbmFtLENLTUFYUEFUSCkgPCAwKSB7IC8qIFJlYWQgYSBsaW5lICovCi0JCSAgICB6Y2xv c2UoWk1GSUxFKTsJICAgICAgICAgICAgICAgICAgLyogRmFpbGVkICovCi0JCSAgICBkZWJ1ZyhG MTEwLCJnbmZpbGUgZmlsZWZpbGUgRU9GIixmaWxlZmlsZSwwKTsKLQkJICAgIG1ha2VzdHIoJmZp bGVmaWxlLE5VTEwpOwotCQkgICAgcmV0dXJuKDApOwotCQl9Ci0JCWRlYnVnKEYxMTAsImduZmls ZSBmaWxlZmlsZSBmaWxuYW0iLGZpbG5hbSwwKTsKLQkgICAgfQotCSAgICBkZWJ1ZyhGMTAxLCJn bmZpbGUgbmZpbHMiLCIiLG5maWxzKTsKLQkgICAgaWYgKG5maWxzLS0gPiAwIHx8IGZpbGVmaWxl KSB7IC8qIFN0aWxsIHNvbWUgbGVmdD8gKi8KLSNpZm5kZWYgTk9NU0VORAotCQlpZiAoYWRkbGlz dCkgewotCQkgICAgaWYgKGZpbGVuZXh0ICYmIGZpbGVuZXh0LT5mbF9uYW1lKSB7Ci0JCQlja3N0 cm5jcHkoZmlsbmFtLGZpbGVuZXh0LT5mbF9uYW1lLENLTUFYUEFUSCsxKTsKLQkJCWNtYXJnMiA9 Ci0JCQkgIGZpbGVuZXh0LT5mbF9hbGlhcyA/Ci0JCQkgICAgZmlsZW5leHQtPmZsX2FsaWFzIDoK LQkJCSAgICAgICIiOwotCQkJYmluYXJ5ID0gZmlsZW5leHQtPmZsX21vZGU7Ci0JCSAgICB9IGVs c2UgewotCQkJcHJpbnRmKCI/SW50ZXJuYWwgZXJyb3IgZXhwYW5kaW5nIEFERCBsaXN0XG4iKTsK LQkJCXJldHVybigtNSk7Ci0JCSAgICB9Ci0JCSAgICBmaWxlbmV4dCA9IGZpbGVuZXh0LT5mbF9u ZXh0OwotCQkgICAgZGVidWcoRjExMSwiZ25maWxlIGFkZGxpc3QgZmlsbmFtIixmaWxuYW0sbmZp bHMpOwotCQl9IGVsc2UgaWYgKHNuZHNyYyA+IDAgJiYgIWZpbGVmaWxlKSB7Ci0jZW5kaWYgLyog Tk9NU0VORCAqLwotCQkgICAgY2tzdHJuY3B5KGZpbG5hbSwqY21saXN0KyssQ0tNQVhQQVRIKzEp OwotCQkgICAgZGVidWcoRjExMSwiZ25maWxlIGNtbGlzdCBmaWxuYW0iLGZpbG5hbSxuZmlscyk7 Ci0jaWZuZGVmIE5PTVNFTkQKLQkJfQotI2VuZGlmIC8qIE5PTVNFTkQgKi8KLQkJaSA9IDA7Ci0j aWZuZGVmIE5PU0VSVkVSCi0JCWRlYnVnKEYxMDEsImduZmlsZSBuZ2V0cGF0aCIsIiIsbmdldHBh dGgpOwotI2VuZGlmIC8qIE5PU0VSVkVSICovCi1uZXh0aW5wYXRoOgotI2lmbmRlZiBOT1NFUlZF UgotCQlmcm9tZ2V0cGF0aCA9IDA7Ci0JCWlmIChzZXJ2ZXIgJiYgIWlzYWJzb2x1dGUoZmlsbmFt KSAmJiAobmdldHBhdGggPiBpKSkgewotCQkgICAgY2tzdHJuY3B5KGZ1bGxuYW1lLGdldHBhdGhb aV0sQ0tNQVhQQVRIKzEpOwotCQkgICAgY2tzdHJuY2F0KGZ1bGxuYW1lLGZpbG5hbSxDS01BWFBB VEgpOwotCQkgICAgZGVidWcoRjExMSwiZ25maWxlIGdldHBhdGgiLGZ1bGxuYW1lLGkpOwotCQkg ICAgZnJvbWdldHBhdGggPSAxOwotCQkgICAgaSsrOwotCQl9IGVsc2UgewotCQkgICAgaSA9IG5n ZXRwYXRoICsgMTsKLSNlbHNlCi0JCSAgICBpID0gMTsJCS8qID8gKi8KLSNlbmRpZiAvKiBOT1NF UlZFUiAqLwotCQkgICAgY2tzdHJuY3B5KGZ1bGxuYW1lLGZpbG5hbSxDS01BWFBBVEgrMSk7Ci0J CSAgICBkZWJ1ZyhGMTEwLCJnbmZpbGUgYWJzb2x1dGUiLGZ1bGxuYW1lLDApOwotI2lmbmRlZiBO T1NFUlZFUgotCQl9Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLQkJaWYgKGlzd2lsZChmdWxsbmFt ZSkKLSNpZmRlZiBSRUNVUlNJVkUKLQkJICAgIHx8IHJlY3Vyc2l2ZSA+IDAgfHwgIXN0cmNtcChm dWxsbmFtZSwiLiIpCi0jZW5kaWYgLyogUkVDVVJTSVZFICovCi0JCSAgICApIHsJLyogSXQgbG9v a3Mgd2lsZC4uLiAqLwotCQkgICAgLyogRmlyc3QgY2hlY2sgaWYgYSBmaWxlIHdpdGggdGhpcyBu YW1lIGV4aXN0cyAqLwotCQkgICAgZGVidWcoRjExMCwiZ25maWxlIHdpbGQiLGZ1bGxuYW1lLDAp OwotCQkgICAgaWYgKHpjaGtpKGZ1bGxuYW1lKSA+PSAwKSB7Ci0JCQkvKgotCQkJICAgSGVyZSB3 ZSBoYXZlIGEgZmlsZSB3aG9zZSBuYW1lIGFjdHVhbGx5Ci0JCQkgICBjb250YWlucyB3aWxkY2Fy ZCBjaGFyYWN0ZXJzLgotCQkJKi8KLQkJCWdvdG8gZ290bmFtOwotCQkgICAgfQotI2lmZGVmIENP TU1FTlQKLQkJICAgIG56eG9wdHMgPSBaWF9GSUxPTkxZOyAvKiAod2FzIDA6IDI1IEp1bCAyMDAx IGZkYykgKi8KLSNlbHNlCi0JCSAgICBuenhvcHRzID0gcmVjdXJzaXZlID8gMCA6IFpYX0ZJTE9O TFk7IC8qIDMwIEp1bCAyMDAxICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCQkgICAgaWYgKG5v bGlua3MpIG56eG9wdHMgfD0gWlhfTk9MSU5LUzsJLyogKDI2IEp1bCAyMDAxIGZkYykgKi8KLSNp ZmRlZiBVTklYT1JPU0sKLQkJICAgIGlmIChtYXRjaGRvdCkgbnp4b3B0cyB8PSBaWF9NQVRDSERP VDsKLSNlbmRpZiAvKiBVTklYT1JPU0sgKi8KLQkJICAgIGlmIChyZWN1cnNpdmUpIG56eG9wdHMg fD0gWlhfUkVDVVJTRTsKLQkJICAgIHggPSBuenhwYW5kKGZ1bGxuYW1lLG56eG9wdHMpOyAvKiBF eHBhbmQgd2lsZGNhcmRzICovCi0JCSAgICBkZWJ1ZyhGMTAxLCJnbmZpbGUgbnp4cGFuZCIsIiIs eCk7Ci0JCSAgICBpZiAoeCA9PSAxKSB7Ci0JCQlpbnQgeHg7Ci0JCQl4eCA9IHpuZXh0KGZ1bGxu YW1lKTsKLQkJCWRlYnVnKEYxMTEsImduZmlsZSB6bmV4dCBBIixmdWxsbmFtZSx4eCk7Ci0JCQln b3RvIGdvdG5hbTsKLQkJICAgIH0KLQkJICAgIGlmICh4ID09IDApIHsJLyogTm9uZSBtYXRjaCAq LwotI2lmbmRlZiBOT1NFUlZFUgotCQkJaWYgKHNlcnZlciAmJiBuZ2V0cGF0aCA+IGkpCi0JCQkg IGdvdG8gbmV4dGlucGF0aDsKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotCQkJcmV0Y29kZSA9IC0x OwotCQkJZGVidWcoRjEwMSwiZ25maWxlIGduZmVycm9yIEEiLCIiLGduZmVycm9yKTsKLQkJCWdu ZmVycm9yID0gLTE7Ci0JCQljb250aW51ZTsKLQkJICAgIH0KLQkJICAgIGlmICh4IDwgMCkgewkv KiBUb28gbWFueSB0byBleHBhbmQgKi8KLQkJCWRlYnVnKEYxMDEsImduZmlsZSBnbmZlcnJvciBC IiwiIixnbmZlcnJvcik7Ci0JCQlnbmZlcnJvciA9IC01OwotCQkJcmV0dXJuKC01KTsKLQkJICAg IH0KLQkJICAgIHNuZHNyYyA9IC0xOwkvKiBDaGFuZ2Ugc2VuZC1zb3VyY2UgdG8gem5leHQoKSAq LwotCQl9Ci0JICAgIH0gZWxzZSB7CQkJLyogV2UncmUgb3V0IG9mIGZpbGVzLiAqLwotCQlkZWJ1 ZyhGMTExLCJnbmZpbGUgZG9uZSIsY2tpdG9hKGduZmVycm9yKSxuZmlscyk7Ci0JCSpmaWxuYW0g PSAnXDAnOwotCQlyZXR1cm4oMCk7Ci0JICAgIH0KLQl9Ci0KLS8qIE90aGVyd2lzZSwgc3RlcCB0 byBuZXh0IGVsZW1lbnQgb2YgaW50ZXJuYWwgd2lsZGNhcmQgZXhwYW5zaW9uIGxpc3QuICovCi0K LQlpZiAoc25kc3JjID09IC0xKSB7Ci0JICAgIGludCB4eCA9IDA7Ci0JICAgIHdoaWxlICgxKSB7 Ci0JCWRlYnVnKEYxMTEsImduZmlsZSB6bmV4dCBYIixmaWxuYW0seHgpOwotCQl4eCA9IHpuZXh0 KGZpbG5hbSk7Ci0JCWRlYnVnKEYxMTEsImduZmlsZSB6bmV4dCBCIixmaWxuYW0seHgpOwotCQlp ZiAoIWZpbG5hbVswXSkKLQkJICBicmVhazsKLQkJaWYgKGRvZGlyc3RvbykgewotCQkgICAgZGVi dWcoRjExMSwiZ25maWxlIEZUUCBNUFVUIC9SRUNVUlNJVkUiLGZpbG5hbSx4eCk7Ci0JCSAgICBi cmVhazsKLQkJfQotCQlpZiAoIWlzZGlyKGZpbG5hbSkpCi0JCSAgYnJlYWs7Ci0JICAgIH0KLQkg ICAgZGVidWcoRjExMSwiZ25maWxlIHpuZXh0IEMiLGZpbG5hbSx4KTsKLQkgICAgaWYgKCFmaWxu YW1bMF0pIHsJCS8qIElmIG5vIG1vcmUsICovCi0JCXNuZHNyYyA9IDE7CQkvKiBnbyBiYWNrIHRv IHByZXZpb3VzIGxpc3QgKi8KLQkJZGVidWcoRjEwMSwiZ25maWxlIHNldHRpbmcgc25kc3JjIGJh Y2siLCIiLHNuZHNyYyk7Ci0JCWNvbnRpbnVlOwotCSAgICB9IGVsc2UKLQkgICAgICBja3N0cm5j cHkoZnVsbG5hbWUsZmlsbmFtLENLTUFYUEFUSCsxKTsKLQl9Ci0KLS8qIEdldCBoZXJlIHdpdGgg YSBmaWxlbmFtZS4gKi8KLQotZ290bmFtOgotCWRlYnVnKEYxMTAsImduZmlsZSBmdWxsbmFtZSIs ZnVsbG5hbWUsMCk7Ci0JaWYgKGZ1bGxuYW1lWzBdKSB7Ci0jaWZkZWYgRFRJTERFCi0JICAgIGNo YXIgKiBkaXJwID0gIiI7Ci0JICAgIGlmIChmdWxsbmFtZVswXSA9PSAnficpIHsKLQkJZGlycCA9 IHRpbGRlX2V4cGFuZCgoY2hhciAqKWZ1bGxuYW1lKTsKLQkJaWYgKCpkaXJwKSBja3N0cm5jcHko ZnVsbG5hbWUsZGlycCxDS01BWFBBVEgrMSk7Ci0JICAgIH0KLSNlbmRpZiAvKiBEVElMREUgKi8K LQkgICAgZmlsZXNpemUgPSB6Y2hraShmdWxsbmFtZSk7CS8qIENoZWNrIGlmIGZpbGUgcmVhZGFi bGUgKi8KLQkgICAgZGVidWcoRjExMSwiZ25maWxlIHpjaGtpIixmdWxsbmFtZSxmaWxlc2l6ZSk7 Ci0JICAgIHJldGNvZGUgPSBmaWxlc2l6ZTsJCS8qIFBvc3NpYmxlIHJldHVybiBjb2RlICovCi0J ICAgIGlmIChmaWxlc2l6ZSA9PSAoQ0tfT0ZGX1QpLTIgJiYgZG9kaXJzdG9vKSB7Ci0JCWZpbGVz aXplID0gMDsKLQkgICAgfQotCSAgICBpZiAoZmlsZXNpemUgPCAwKSB7Ci0JCWduZmVycm9yID0g KGludClmaWxlc2l6ZTsKLQkJZGVidWcoRjEwMSwiZ25maWxlIGduZmVycm9yIEMiLCIiLGduZmVy cm9yKTsKLQkgICAgfQotCSAgICBpZiAoZmlsZXNpemUgPT0gKENLX09GRl9UKS0xKSB7IC8qIElm IG5vdCBmb3VuZCAqLwotCQlkZWJ1ZyhGMTAwLCJnbmZpbGUgLTEiLCIiLDApOwotI2lmbmRlZiBO T1NFUlZFUgotCQlpZiAoc2VydmVyICYmIG5nZXRwYXRoID4gaSkKLQkJICBnb3RvIG5leHRpbnBh dGg7Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLQkJZGVidWcoRjExMCwiZ25maWxlIHNraXBwaW5n OiIsZnVsbG5hbWUsMCk7Ci0JCXRsb2coRjExMCxmdWxsbmFtZSwiOiBvcGVuIGZhaWx1cmUgLSBz a2lwcGVkIiwwKTsKLQkJeHhzY3JlZW4oU0NSX0ZOLDAsMGwsZnVsbG5hbWUpOwotCQl4eHNjcmVl bihTQ1JfU1QsU1RfU0tJUCxTS1BfQUNDLGZ1bGxuYW1lKTsKLSNpZmRlZiBUTE9HCi0JCWlmICh0 cmFsb2cgJiYgIXRsb2dmbXQpCi0JCSAgZG94bG9nKHdoYXQsZnVsbG5hbWUsZnNpemUsYmluYXJ5 LDEsIlNraXBwZWQiKTsKLSNlbmRpZiAvKiBUTE9HICovCi0JCWNvbnRpbnVlOwotCSAgICB9IGVs c2UgaWYgKGZpbGVzaXplIDwgMCkgewotCQlpZiAoZmlsZXNpemUgPT0gKENLX09GRl9UKS0zKSB7 IC8qIEV4aXN0cyBidXQgbm90IHJlYWRhYmxlICovCi0JCSAgICBkZWJ1ZyhGMTAwLCJnbmZpbGUg LTMiLCIiLDApOwotCQkgICAgZmlscmVqKys7CQkvKiBDb3VudCB0aGlzIG9uZSBhcyBub3Qgc2Vu dCAqLwotCQkgICAgdGxvZyhGMTEwLCJSZWFkIGFjY2VzcyBkZW5pZWQiLGZ1bGxuYW1lLDApOyAv KiBMb2cgdGhpcyAqLwotCQkgICAgeHhzY3JlZW4oU0NSX0ZOLDAsMGwsZnVsbG5hbWUpOwotCQkg ICAgeHhzY3JlZW4oU0NSX1NULFNUX1NLSVAsU0tQX0FDQyxmdWxsbmFtZSk7IC8qIERpc3BsYXkg aXQgKi8KLSNpZmRlZiBUTE9HCi0JCSAgICBpZiAodHJhbG9nICYmICF0bG9nZm10KQotCQkgICAg ICBkb3hsb2cod2hhdCxmdWxsbmFtZSxmc2l6ZSxiaW5hcnksMSwiU2tpcHBlZCIpOwotI2VuZGlm IC8qIFRMT0cgKi8KLQkJfQotCQljb250aW51ZTsKLQkgICAgfSBlbHNlIHsKLQkJaW50IHh4Owot CQlmc2l6ZSA9IGZpbGVzaXplOwotLyogKysrICovCi0gICAgZGVidWcoRjExMSwiZ25maWxlIHNu ZHNtYWxsZXIiLGNrZnN0b2Eoc25kc21hbGxlciksc25kc21hbGxlcik7Ci0gICAgZGVidWcoRjEx MSwiZ25maWxlIHNuZGxhcmdlciIsY2tmc3RvYShzbmRsYXJnZXIpLHNuZGxhcmdlcik7Ci0gICAg ZGVidWcoRjExMSwiZ25maWxlIChDS19PRkZfVCktMSIsY2tmc3RvYSgoQ0tfT0ZGX1QpLTEpLChD S19PRkZfVCktMSk7Ci0KLQkJeHggPSBmaWxlc2VsZWN0KGZ1bGxuYW1lLAotCQkJCXNuZGFmdGVy LCBzbmRiZWZvcmUsCi0JCQkJc25kbmFmdGVyLHNuZG5iZWZvcmUsCi0JCQkJc25kc21hbGxlcixz bmRsYXJnZXIsCi0JCQkJc2tpcGJ1cCwKLQkJCQlOU05ERVhDRVBULHNuZGV4Y2VwdCk7Ci0JCWRl YnVnKEYxMTEsImduZmlsZSBmaWxlc2VsZWN0IixmdWxsbmFtZSx4eCk7Ci0JCWlmICgheHgpIHsK LQkJICAgIGZpbGVzaXplID0gKENLX09GRl9UKS0xOwotCQkgICAgZ25mZXJyb3IgPSAtNjsKLQkJ ICAgIGRlYnVnKEYxMDEsImduZmlsZSBnbmZlcnJvciBEIiwiIixnbmZlcnJvcik7Ci0JCSAgICBj b250aW51ZTsKLQkJfQotCQlja3N0cm5jcHkoZmlsbmFtLGZ1bGxuYW1lLENLTUFYUEFUSCsxKTsK LQkJcmV0dXJuKDEpOwotCSAgICB9Ci0jaWZkZWYgQ09NTUVOVAotCS8qIFRoaXMgY2FuJ3QgYmUg cmlnaHQhICovCi0JfSBlbHNlIHsJCQkvKiBzbmRzcmMgaXMgMC4uLiAqLwotCSAgICBpZiAoIWZp bGVzZWxlY3QoZnVsbG5hbWUsCi0JCQkgICAgc25kYWZ0ZXIsIHNuZGJlZm9yZSwKLQkJCSAgICBz bmRuYWZ0ZXIsc25kbmJlZm9yZSwKLQkJCSAgICBzbmRzbWFsbGVyLHNuZGxhcmdlciwKLQkJCSAg ICBza2lwYnVwLAotCQkJICAgIE5TTkRFWENFUFQsc25kZXhjZXB0KSkgewotCQlnbmZlcnJvciA9 IC02OwotCQlkZWJ1ZyhGMTExLCJnbmZpbGUgZmlsZXNlbGVjdCIsZnVsbG5hbWUsZ25mZXJyb3Ip OwotCQlmaWxlc2l6ZSA9IChDS19PRkZfVCktMTsKLQkJY29udGludWU7Ci0JICAgIH0KLQkgICAg Y2tzdHJuY3B5KGZpbG5hbSxmdWxsbmFtZSxDS01BWFBBVEgrMSk7Ci0JICAgIHJldHVybigxKTsK LSNlbmRpZiAvKiBDT01NRU5UICovCi0JfQotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJnbmZpbGUg cmVzdWx0IiwiIixyZXRjb2RlKTsKLSAgICAqZmlsbmFtID0gJ1wwJzsKLSAgICByZXR1cm4oMCk7 Ci19Ci0KLS8qCi0gIFRoZSBmb2xsb3dpbmcgYnVuY2ggb2Ygcm91dGluZXMgZmVlZCBpbnRlcm5h bGx5IGdlbmVyYXRlZCBkYXRhIHRvIHRoZSBzZXJ2ZXIKLSAgdG8gc2VuZCB0byB0aGUgY2xpZW50 IGluIHJlc3BvbnNlIHRvIFJFTU9URSBjb21tYW5kcyBsaWtlIERJUkVDVE9SWSwgREVMRVRFLAot ICBhbmQgc28gb24uICBXZSBoYXZlIHRvIHdyaXRlIHRoZXNlIGxpbmVzIGluIHRoZSBmb3JtYXQg YXBwcm9wcmlhdGUgdG8gb3VyCi0gIHBsYXRmb3JtLCBzbyB0aGV5IGNhbiBiZSBjb252ZXJ0ZWQg dG8gZ2VuZXJpYyAoQ1JMRikgdGV4dCBmb3JtYXQgYnkgdGhlCi0gIHBhY2tldGl6ZXIuCi0qLwot I2lmZGVmIFVOSVgKLWNoYXIgKiBlbmRsaW5lID0gIlwxMiI7Ci0jZWxzZQotI2lmZGVmIGRhdGFn ZW5lcmFsCi1jaGFyICogZW5kbGluZSA9ICJcMTIiOwotI2Vsc2UKLSNpZmRlZiBNQUMKLWNoYXIg KiBlbmRsaW5lID0gIlwxNSI7Ci0jZWxzZQotI2lmZGVmIE9TSwotY2hhciAqIGVuZGxpbmUgPSAi XDE1IjsKLSNlbHNlCi1jaGFyICogZW5kbGluZSA9ICJcMTVcMTIiOwotI2VuZGlmIC8qIE9TSyAq LwotI2VuZGlmIC8qIE1BQyAqLwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyog VU5JWCAqLwotCi0jaWZkZWYgTUFDCi0jZGVmaW5lIEZOQ0JVRkwgMjU2Ci0jZWxzZQotI2lmZGVm IENLU1lNTElOSwotI2RlZmluZSBGTkNCVUZMIChDS01BWFBBVEggKyBDS01BWFBBVEggKyA2NCkK LSNlbHNlCi0jZGVmaW5lIEZOQ0JVRkwgKENLTUFYUEFUSCArIDY0KQotI2VuZGlmIC8qIENLU1lN TElOSyAqLwotI2VuZGlmIC8qIE1BQyAqLwotCi0vKiBOQjogVGhlIG1pbmltdW0gRk5DQlVGTCBp cyAyNTUgKi8KLQotc3RhdGljIENIQVIgZnVuY2J1ZltGTkNCVUZMXTsKLXN0YXRpYyBpbnQgIGZ1 bmNueHQgPSAgMDsKLXN0YXRpYyBpbnQgIGZ1bmNsZW4gPSAgMDsKLXN0YXRpYyBpbnQgIG54cG5k ICAgPSAtMTsKLXN0YXRpYyBsb25nIG5kaXJzICAgPSAgMDsKLXN0YXRpYyBsb25nIG5maWxlcyAg PSAgMDsKLXN0YXRpYyBDS19PRkZfVCBuYnl0ZXMgID0gIDA7Ci0KLWludAotc25kc3RyaW5nKHAp IGNoYXIgKiBwOyB7Ci0jaWZuZGVmIE5PU0VSVkVSCi0gICAgbmZpbHMgPSAwOwkJCQkvKiBObyBm aWxlcywgbm8gbGlzdHMuICovCi0gICAgeGZsZyA9IDE7CQkJCS8qIEZsYWcgd2UgbXVzdCBzZW5k IFggcGFja2V0LiAqLwotICAgIGNrc3RybmNweShjbWRzdHIsdmVyc2lvLENNRFNUUkwpOwkvKiBE YXRhIGZvciBYIHBhY2tldC4gKi8KLSAgICBmaXJzdCA9IDE7CQkJCS8qIEluaXQgZ2V0Y2h4IGxv b2thaGVhZCAqLwotICAgIG1lbXN0ciA9IDE7CQkJCS8qIEp1c3Qgc2V0IHRoZSBmbGFnLiAqLwot ICAgIG1lbXB0ciA9IHA7CQkJCS8qIEFuZCB0aGUgcG9pbnRlci4gKi8KLSAgICBiaW5hcnkgPSBY WUZUX1Q7CQkJLyogVGV4dCBtb2RlIGZvciB0aGlzLiAqLwotICAgIHJldHVybihzaW5pdCgpKTsK LSNlbHNlCi0gICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIE5PU0VSVkVSICovCi19Ci0KLS8qICBT IE4gRCBIIEwgUCAgLS0gIFJvdXRpbmUgdG8gc2VuZCBidWlsdGluIGhlbHAgICovCi0KLXN0YXRp YyBpbnQgc3J2aGxwbnVtID0gMDsKLQotI2lmZGVmIElLU0QKLXN0YXRpYyBjaGFyICpubXhbXSA9 ICB7ICJEaXNhYmxlZCIsICJEaXNhYmxlZCIsICJFbmFibGVkIiwgIkVuYWJsZWQiIH07Ci0jZW5k aWYgLyogSUtTRCAqLwotCi1zdGF0aWMgY2hhciAqCi14bm0oeCkgaW50IHg7IHsKLSNpZmRlZiBJ S1NECi0gICAgaWYgKGluc2VydmVyKQotICAgICAgcmV0dXJuKG5teFt4XSk7Ci0gICAgZWxzZQot I2VuZGlmIC8qIElLU0QgKi8KLSAgICAgIHJldHVybihubVt4XSk7Ci19Ci0KLXN0YXRpYyBpbnQK LW54dGhscCgKLSNpZmRlZiBDS19BTlNJQwotICAgICAgIHZvaWQKLSNlbmRpZiAvKiBDS19BTlNJ QyAqLwotICAgICAgICkgewotICAgIGludCB4ID0gMDsKLSAgICBleHRlcm4gaW50Ci0gICAgICBl bl9jcHksIGVuX2N3ZCwgZW5fZGVsLCBlbl9kaXIsIGVuX2ZpbiwgZW5fZ2V0LCBlbl9ieWUsIGVu X21haSwKLSAgICAgIGVuX3ByaSwgZW5faG9zLCBlbl9yZW4sIGVuX3NlbiwgZW5fc3BhLCBlbl9z ZXQsIGVuX3R5cCwgZW5fd2hvLAotICAgICAgLyogZW5fcmV0LCAqLyBlbl9ta2QsIGVuX3JtZCwg ZW5fYXNnLCBlbl9xdWUsIGVuX3hpdCwgeF9sb2dpbiwgeF9sb2dnZWQsCi0gICAgICB4ZmluaXNo OwotICAgIGV4dGVybiBjaGFyICogY2t4c3lzOwotCi0gICAgaWYgKGZ1bmNueHQgPCBmdW5jbGVu KQotICAgICAgcmV0dXJuIChmdW5jYnVmW2Z1bmNueHQrK10pOwotCi0gICAgc3dpdGNoIChzcnZo bHBudW0rKykgewotICAgICAgY2FzZSAwOgotCXggPSBja3N0cm5jcHkoKGNoYXIgKilmdW5jYnVm LAotCQkgICAgICAiQ2xpZW50IENvbW1hbmQgICAgIFN0YXR1cyAgICAgICAgRGVzY3JpcHRpb25c biIsCi0JCSAgICAgIEZOQ0JVRkwKLQkJICAgICAgKTsKLQlpZiAoeF9sb2dpbiAmJiAheF9sb2dn ZWQpIHsKLQkgICAgeCArPSBja3N0cm5jYXQoKGNoYXIgKilmdW5jYnVmLAotCQkJICAgIiBSRU1P VEUgTE9HSU4gICAgICAgcmVxdWlyZWRcbiIsCi0JCQkgICBGTkNCVUZMCi0JCQkgICApOwotCX0K LQlpZiAoRk5DQlVGTCAtIHggPiA3NCkKLQlzcHJpbnRmKChjaGFyICopKGZ1bmNidWYreCksIiBH RVQgICAgICAgICAgICAgICAgJS0xNHMlc1xuIiwKLQkJeG5tKGVuX2dldCksCi0JCSJUcmFuc2Zl ciBmaWxlKHMpIGZyb20gc2VydmVyIHRvIGNsaWVudC4iCi0JCSk7Ci0JYnJlYWs7Ci0KLS8qIE5P VEU6IFRoZSBtaW5pbXVtIGZ1bmNidWZbXSBzaXplIGlzIDI1NTsgYWxsIG9mIHRoZSBmb2xsb3dp bmcgYXJlIHNhZmUuICovCi0KLSAgICAgIGNhc2UgMToKLQlzcHJpbnRmKChjaGFyICopZnVuY2J1 ZiwiIFNFTkQgICAgICAgICAgICAgICAlLTE0cyVzXG4iLAotCQl4bm0oZW5fc2VuKSwKLQkJIlRy YW5zZmVyIGZpbGUocykgZnJvbSBjbGllbnQgdG8gc2VydmVyLiIKLQkJKTsKLQlicmVhazsKLQot ICAgICAgY2FzZSAyOgotCXNwcmludGYoKGNoYXIgKilmdW5jYnVmLCIgTUFJTCAgICAgICAgICAg ICAgICUtMTRzJXNcbiIsCi0JCXhubShpbnNlcnZlciA/IDAgOiBlbl9tYWkpLAotCQkiU2VuZCBm aWxlKHMpIGFzIGUtbWFpbC4iCi0JCSk7Ci0JYnJlYWs7Ci0KLSAgICAgIGNhc2UgMzoKLSNpZm5k ZWYgTk9TUEwKLQlzcHJpbnRmKChjaGFyICopZnVuY2J1ZiwiIFJFTU9URSBBU1NJR04gICAgICAl LTE0cyVzXG4iLAotCQl4bm0oZW5fYXNnKSwKLQkJIkFzc2lnbiB2YWx1ZSB0byBzZXJ2ZXIgdmFy aWFibGUgb3IgbWFjcm8uIgotCQkpOwotI2Vsc2UKLQlzcHJpbnRmKChjaGFyICopZnVuY2J1Ziwi IFJFTU9URSBBU1NJR04gICAgICBub3QgY29uZmlndXJlZFxuIik7Ci0jZW5kaWYgLyogTk9TUEwg Ki8KLQotCWJyZWFrOwotICAgICAgY2FzZSA0OgotCXNwcmludGYoKGNoYXIgKilmdW5jYnVmLCIg UkVNT1RFIENEICAgICAgICAgICUtMTRzJXNcbiIsCi0JCXhubShlbl9jd2QpLAotCQkiQ2hhbmdl IHNlcnZlcidzIGRpcmVjdG9yeS4iCi0JCSk7Ci0JYnJlYWs7Ci0KLSAgICAgIGNhc2UgNToKLSNp ZmRlZiBaQ09QWQotCXNwcmludGYoKGNoYXIgKilmdW5jYnVmLCIgUkVNT1RFIENPUFkgICAgICAg ICUtMTRzJXNcbiIsCi0JCXhubShlbl9jcHkpLAotCQkiQ29weSBhIGZpbGUgb24gdGhlIHNlcnZl ci4iCi0JCSk7Ci0jZWxzZQotCXNwcmludGYoKGNoYXIgKilmdW5jYnVmLCIgUkVNT1RFIENPUFkg ICAgICAgIG5vdCBjb25maWd1cmVkXG4iKTsKLSNlbmRpZiAvKiBaQ09QWSAqLwotCi0JYnJlYWs7 Ci0gICAgICBjYXNlIDY6Ci0Jc3ByaW50ZigoY2hhciAqKWZ1bmNidWYsIiBSRU1PVEUgREVMRVRF ICAgICAgJS0xNHMlc1xuIiwKLQkJeG5tKGVuX2RlbCksCi0JCSJEZWxldGUgYSBmaWxlIG9uIHRo ZSBzZXJ2ZXIuIgotCQkpOwotCWJyZWFrOwotCi0gICAgICBjYXNlIDc6Ci0Jc3ByaW50ZigoY2hh ciAqKWZ1bmNidWYsIiBSRU1PVEUgRElSRUNUT1JZICAgJS0xNHMlc1xuIiwKLQkJeG5tKGVuX2Rp ciksCi0JCSJMaXN0IGZpbGVzIG9uIHRoZSBzZXJ2ZXIuIgotCQkpOwotCWJyZWFrOwotCi0gICAg ICBjYXNlIDg6Ci0Jc3ByaW50ZigoY2hhciAqKWZ1bmNidWYsIiBSRU1PVEUgRVhJVCAgICAgICAg JS0xNHMlc1xuIiwKLQkJeG5tKGVuX3hpdCksCi0JCSJFeGl0IGZyb20gS2VybWl0IHNlcnZlciBw cm9ncmFtLiIKLQkJKTsKLQlicmVhazsKLQotICAgICAgY2FzZSA5OgotCXNwcmludGYoKGNoYXIg KilmdW5jYnVmLCIgUkVNT1RFIEhPU1QgICAgICAgICUtMTRzJXNcbiIsCi0JCXhubShpbnNlcnZl ciA/IDAgOiBlbl9ob3MpLAotI2lmZGVmIGRhdGFnZW5lcmFsCi0JCSJFeGVjdXRlIGEgQ0xJIGNv bW1hbmQgb24gdGhlIHNlcnZlci4iCi0jZWxzZQotI2lmZGVmIFZNUwotCQkiRXhlY3V0ZSBhIERD TCBjb21tYW5kIG9uIHRoZSBzZXJ2ZXIuIgotI2Vsc2UKLQkJIkV4ZWN1dGUgYSBzaGVsbCBjb21t YW5kIG9uIHRoZSBzZXJ2ZXIuIgotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIGRhdGFnZW5l cmFsICovCi0JCSk7Ci0JYnJlYWs7Ci0KLSAgICAgIGNhc2UgMTA6Ci0Jc3ByaW50ZigoY2hhciAq KWZ1bmNidWYsIiBSRU1PVEUgUFJJTlQgICAgICAgJS0xNHMlc1xuIiwKLQkJeG5tKGluc2VydmVy ID8gMCA6IGVuX3ByaSksCi0JCSJTZW5kIGEgZmlsZSB0byB0aGUgc2VydmVyIGZvciBwcmludGlu Zy4iCi0JCSk7Ci0JYnJlYWs7Ci0KLSAgICAgIGNhc2UgMTE6Ci0jaWZuZGVmIE5PU1BMCi0Jc3By aW50ZigoY2hhciAqKWZ1bmNidWYsIiBSRU1PVEUgUVVFUlkgICAgICAgJS0xNHMlc1xuIiwKLQkJ eG5tKGVuX3F1ZSksCi0JCSJHZXQgdmFsdWUgb2Ygc2VydmVyIHZhcmlhYmxlIG9yIG1hY3JvLiIK LQkJKTsKLQotI2Vsc2UKLQlzcHJpbnRmKChjaGFyICopZnVuY2J1ZiwiIFJFTU9URSBRVUVSWSAg ICAgICBub3QgY29uZmlndXJlZFxuIik7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotCWJyZWFrOwot ICAgICAgY2FzZSAxMjoKLQlzcHJpbnRmKChjaGFyICopZnVuY2J1ZiwiIFJFTU9URSBNS0RJUiAg ICAgICAlLTE0cyVzXG4iLAotCQl4bm0oZW5fbWtkKSwKLQkJIkNyZWF0ZSBhIGRpcmVjdG9yeSBv biB0aGUgc2VydmVyLiIKLQkJKTsKLQlicmVhazsKLQotICAgICAgY2FzZSAxMzoKLQlzcHJpbnRm KChjaGFyICopZnVuY2J1ZiwiIFJFTU9URSBSTURJUiAgICAgICAlLTE0cyVzXG4iLAotCQl4bm0o ZW5fcm1kKSwKLQkJIlJlbW92ZSBhIGRpcmVjdG9yeSBvbiB0aGUgc2VydmVyLiIKLQkJKTsKLQli cmVhazsKLQotICAgICAgY2FzZSAxNDoKLQlzcHJpbnRmKChjaGFyICopZnVuY2J1ZiwiIFJFTU9U RSBSRU5BTUUgICAgICAlLTE0cyVzXG4iLAotCQl4bm0oZW5fcmVuKSwKLQkJIlJlbmFtZSBhIGZp bGUgb24gdGhlIHNlcnZlci4iCi0JCSk7Ci0JYnJlYWs7Ci0KLSAgICAgIGNhc2UgMTU6Ci0Jc3By aW50ZigoY2hhciAqKWZ1bmNidWYsIiBSRU1PVEUgU0VUICAgICAgICAgJS0xNHMlc1xuIiwKLQkJ eG5tKGVuX3NldCksCi0JCSJTZXQgYSBwYXJhbWV0ZXIgb24gdGhlIHNlcnZlciIKLQkJKTsKLQli cmVhazsKLQotICAgICAgY2FzZSAxNjoKLQlzcHJpbnRmKChjaGFyICopZnVuY2J1ZiwiIFJFTU9U RSBTUEFDRSAgICAgICAlLTE0cyVzXG4iLAotCQl4bm0oZW5fc3BhKSwKLQkJIklucXVpcmUgYWJv dXQgZGlzayBzcGFjZSBvbiB0aGUgc2VydmVyLiIKLQkJKTsKLQlicmVhazsKLQotICAgICAgY2Fz ZSAxNzoKLQlzcHJpbnRmKChjaGFyICopZnVuY2J1ZiwiIFJFTU9URSBUWVBFICAgICAgICAlLTE0 cyVzXG4iLAotCQl4bm0oZW5fdHlwKSwKLQkJIkRpc3BsYXkgYSBzZXJ2ZXIgZmlsZSBvbiB5b3Vy IHNjcmVlbi4iCi0JCSk7Ci0JYnJlYWs7Ci0KLSAgICAgIGNhc2UgMTg6Ci0Jc3ByaW50ZigoY2hh ciAqKWZ1bmNidWYsIiBSRU1PVEUgV0hPICAgICAgICAgJS0xNHMlc1xuIiwKLQkJeG5tKGluc2Vy dmVyID8gMCA6IGVuX3dobyksCi0JCSJMaXN0IHdobyBpcyBsb2dnZWQgaW4gdG8gdGhlIHNlcnZl ci4iCi0JCSk7Ci0JYnJlYWs7Ci0KLSAgICAgIGNhc2UgMTk6Ci0Jc3ByaW50ZigoY2hhciAqKWZ1 bmNidWYsIiBGSU5JU0ggICAgICAgICAgICAgJS0xNHMlc1xuIiwKLQkJeG5tKGVuX2ZpbiksCi0J CXhmaW5pc2ggPwotCQkiRXhpdCBmcm9tIEtlcm1pdCBzZXJ2ZXIgcHJvZ3JhbS4iIDoKLQkJIlJl dHVybiB0aGUgc2VydmVyIHRvIGl0cyBjb21tYW5kIHByb21wdC4iCi0JCSk7Ci0JYnJlYWs7Ci0K LSAgICAgIGNhc2UgMjA6Ci0Jc3ByaW50ZigoY2hhciAqKWZ1bmNidWYsIiBCWUUgICAgICAgICAg ICAgICAgJS0xNHMlc1xuXG4iLAotCQl4bm0oZW5fYnllKSwKLQkJIkxvZyB0aGUgc2VydmVyIG91 dCBhbmQgZGlzY29ubmVjdC4iCi0JCSk7Ci0JYnJlYWs7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0JcmV0 dXJuKC0xKTsKLSAgICB9Ci0gICAgZnVuY254dCA9IDA7Ci0gICAgZnVuY2xlbiA9IHN0cmxlbigo Y2hhciAqKWZ1bmNidWYpOwotICAgIHJldHVybihmdW5jYnVmW2Z1bmNueHQrK10pOwotfQotCi1p bnQKLXNuZGhscCgpIHsKLSNpZm5kZWYgTk9TRVJWRVIKLSAgICBleHRlcm4gY2hhciAqIGNreHN5 czsKLQotICAgIGZpcnN0ID0gMTsJCQkJLyogSW5pdCBnZXRjaHggbG9va2FoZWFkICovCi0gICAg bmZpbHMgPSAwOwkJCQkvKiBObyBmaWxlcywgbm8gbGlzdHMuICovCi0gICAgeGZsZyA9IDE7CQkJ CS8qIEZsYWcgd2UgbXVzdCBzZW5kIFggcGFja2V0LiAqLwotICAgIGNrc3RybmNweShjbWRzdHIs IlJFTU9URSBIRUxQIixDTURTVFJMKTsgLyogRGF0YSBmb3IgWCBwYWNrZXQuICovCi0gICAgc3By aW50ZigoY2hhciAqKWZ1bmNidWYsICJDLUtlcm1pdCAlcywlc1xuXG4iLCB2ZXJzaW8sIGNreHN5 cyk7Ci0gICAgZnVuY2xlbiA9IHN0cmxlbigoY2hhciAqKWZ1bmNidWYpOwotI2lmZGVmIElLU0QK LSAgICBpZiAoaW5zZXJ2ZXIpIHsKLQlzcHJpbnRmKChjaGFyICopKGZ1bmNidWYrZnVuY2xlbiks Ci0JCSJJbnRlcm5ldCBLZXJtaXQgU2VydmljZSAoRVhQRVJJTUVOVEFMKVxuXG4iKTsKLQlmdW5j bGVuID0gc3RybGVuKChjaGFyICopZnVuY2J1Zik7Ci0gICAgfQotI2VuZGlmIC8qIElLU0QgKi8K LSAgICBmdW5jbnh0ID0gMDsKLSAgICBmdW5jcHRyID0gbnh0aGxwOwotICAgIGZ1bmNzdHIgPSAx OwotICAgIHNydmhscG51bSA9IDA7Ci0gICAgYmluYXJ5ID0gWFlGVF9UOwkJCS8qIFRleHQgbW9k ZSBmb3IgdGhpcy4gKi8KLSAgICByZXR1cm4oc2luaXQoKSk7Ci0jZWxzZQotICAgIHJldHVybigw KTsKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotfQotCi0vKgotICAgUmV0dXJucyB0aGUgbmV4dCBh dmFpbGFibGUgY2hhcmFjdGVyLAotICAtMSBpZiBubyBtb3JlIGRhdGEuCi0qLwotc3RhdGljIGlu dAotbnh0dHlwZSgKLSNpZmRlZiBDS19BTlNJQwotICAgICAgIHZvaWQKLSNlbmRpZiAvKiBDS19B TlNJQyAqLwotCSkgewotICAgIGludCBjOwotICAgIGlmICh6Y2hpbihaSUZJTEUsJmMpIDwgMCkg ewotICAgICAgICB6Y2xvc2UoWklGSUxFKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9IGVs c2UgewotCXJldHVybigodW5zaWduZWQpYyk7Ci0gICAgfQotfQotCi0vKiAgUyBOIEQgVCBZIFAg LS0gVFlQRSBhIGZpbGUgdG8gcmVtb3RlIGNsaWVudCAqLwotCi1pbnQKLXNuZHR5cGUoZmlsZSkg Y2hhciAqIGZpbGU7IHsKLSNpZm5kZWYgTk9TRVJWRVIKLSAgICBjaGFyIG5hbWVbQ0tNQVhQQVRI KzFdOwotCi0jaWZkZWYgT1MyCi0gICAgY2hhciAqIHAgPSBOVUxMOwotCi0gICAgaWYgKCpmaWxl KSB7Ci0gICAgICAgIGNrc3RybmNweShuYW1lLCBmaWxlLCBDS01BWFBBVEgrMSk7Ci0gICAgICAg IC8qIGNoYW5nZSAvIHRvIFwuICovCi0gICAgICAgIHAgPSBuYW1lOwotICAgICAgICB3aGlsZSAo KnApIHsJCQkvKiBDaGFuZ2UgdGhlbSBiYWNrIHRvIFwgKi8KLSAgICAgICAgICAgIGlmICgqcCA9 PSAnLycpICpwID0gJ1xcJzsKLSAgICAgICAgICAgIHArKzsKLSAgICAgICAgfQotICAgIH0gZWxz ZQotICAgICAgcmV0dXJuKDApOwotI2Vsc2UKLSAgICBja3N0cm5jcHkobmFtZSwgZmlsZSwgQ0tN QVhQQVRIKzEpOwotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAgZnVuY254dCA9IDA7Ci0gICAgZnVu Y2xlbiA9IHN0cmxlbigoY2hhciAqKWZ1bmNidWYpOwotICAgIGlmICh6Y2hraShuYW1lKSA9PSAt MikgewotICAgICAgICAvKiBGb3VuZCBhIGRpcmVjdG9yeSAqLwotICAgICAgICByZXR1cm4oMCk7 Ci0gICAgfQotICAgIGlmICghem9wZW5pKFpJRklMRSxuYW1lKSkKLSAgICAgIHJldHVybigwKTsK LQotICAgIG5maWxzID0gMDsJCQkJLyogTm8gZmlsZXMsIG5vIGxpc3RzLiAqLwotICAgIHhmbGcg PSAxOwkJCQkvKiBGbGFnIHdlIG11c3Qgc2VuZCBYIHBhY2tldC4gKi8KLSAgICBja3N0cm5jcHko Y21kc3RyLCJ0eXBlIixDTURTVFJMKTsJLyogRGF0YSBmb3IgWCBwYWNrZXQuICovCi0gICAgZmly c3QgPSAxOwkJCQkvKiBJbml0IGdldGNoeCBsb29rYWhlYWQgKi8KLSAgICBmdW5jc3RyID0gMTsJ CQkvKiBKdXN0IHNldCB0aGUgZmxhZy4gKi8KLSAgICBmdW5jcHRyID0gbnh0dHlwZTsJCQkvKiBB bmQgdGhlIHBvaW50ZXIuICovCi0gICAgYmluYXJ5ID0gWFlGVF9UOwkJCS8qIFRleHQgbW9kZSBm b3IgdGhpcyAqLwotICAgIHJldHVybihzaW5pdCgpKTsKLSNlbHNlCi0gICAgcmV0dXJuKDApOwot I2VuZGlmIC8qIE5PU0VSVkVSICovCi19Ci0KLS8qCi0gICBOIFggVCBEIEkgUiAgLS0gIFByb3Zp ZGUgZGF0YSBmb3Igc2VuZGRpcigpCi0KLSAgIFJldHVybnMgdGhlIG5leHQgYXZhaWxhYmxlIGNo YXJhY3RlciBvciAtMSBpZiBubyBtb3JlIGRhdGEuCi0qLwotI2lmbmRlZiBOT0lDUAotLyogRGly ZWN0b3J5IGxpc3RpbmcgcGFyYW1ldGVycyBzZXQgYnkgdGhlIHVzZXIgaW50ZXJmYWNlLCBpZiBh bnkuICovCi1leHRlcm4gaW50IGRpcl9oZWFkLCBkaXJfZG90cywgZGlyX2JhY2s7Ci0jZW5kaWYg LyogTk9JQ1AgKi8KLXN0YXRpYyBpbnQgc2RfaGRnLCBzZF9ia3AsIHNkX2RvdDsJLyogTG9jYWwg bGlzdGluZyBwYXJhbWV0ZXJzICovCi0KLXN0YXRpYyBpbnQKLW54dGRpcigKLSNpZmRlZiBDS19B TlNJQwotICAgICAgIHZvaWQKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotICAgICAgICkgewotICAg IGNoYXIgbmFtZVtDS01BWFBBVEgrMV0sIGRidWZbMjRdLCAqcCA9IE5VTEw7Ci0gICAgY2hhciAq ZHN0ciA9IE5VTEwsICogbG5rID0gIiI7Ci0gICAgQ0hBUiBjLCAqIGxpbmVidWYgPSBmdW5jYnVm OwotI2lmZGVmIE9TSwotICAgIC8qIFdvcmsgYXJvdW5kIGJ1Z3MgaW4gT1NLIGNvbXBpbGVyICov Ci0gICAgY2hhciAqZGlydGFnID0gImRpcmVjdG9yaWVzIjsKLSAgICBjaGFyICpmaWxldGFnID0g ImZpbGVzIjsKLSAgICBjaGFyICpieXRldGFnID0gImJ5dGVzIjsKLSNlbmRpZiAvKiBPU0sgKi8K LSAgICBDS19PRkZfVCBsZW4gPSAwOwotICAgIGludCB4LCBpdHNhZGlyID0gMCwgZ290b25lID0g MDsKLQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewotCWRlYnVnKEYxMDEsIm54dGRp ciBmdW5jbnh0IiwiIixmdW5jbnh0KTsKLQlkZWJ1ZyhGMTAxLCJueHRkaXIgZnVuY2xlbiIsIiIs ZnVuY2xlbik7Ci0JZGVidWcoRjExMCwibnh0ZGlyIGZ1bmNidWYiLGZ1bmNidWYrZnVuY254dCww KTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICBpZiAoZnVuY254dCA8IGZ1bmNsZW4p IHsJCS8qIFJldHVybiBuZXh0IGNoYXJhY3RlciBmcm9tIGJ1ZmZlciAqLwotCWMgPSBmdW5jYnVm W2Z1bmNueHQrK107Ci0JZGVidWcoRjAwMCwibnh0ZGlyIHJldHVybiAxIiwiIiwodW5zaWduZWQp KGMgJiAweGZmKSk7Ci0JcmV0dXJuKCh1bnNpZ25lZCkoYyAmIDB4ZmYpKTsKLSAgICB9Ci0gICAg d2hpbGUgKG54cG5kID4gMCkgewkJCS8qIEJ1ZmZlciBuZWVkcyByZWZpbGwgKi8KLSAgICAgICAg bnhwbmQtLTsKLQl6bmV4dChuYW1lKTsJCQkvKiBHZXQgbmV4dCBmaWxlbmFtZSAqLwotICAgICAg ICBpZiAoIW5hbWVbMF0pIHsJCQkvKiBOb25lIGxlZnQgLSBkb25lICovCi0gICAgICAgICAgICBu eHBuZCA9IDA7Ci0gICAgICAgICAgICByZXR1cm4obnh0ZGlyKCkpOwotICAgICAgICB9Ci0JaWYg KHNkX2JrcCkgewkJCS8qIFNob3dpbmcgYmFja3VwIGZpbGVzPyAqLwotCSAgICBnb3RvbmUgPSAx OwkJCS8qIFllcywgbm8gbmVlZCB0byBjaGVjay4gKi8KLQkgICAgYnJlYWs7Ci0JfQotCXggPSBj a21hdGNoKAkJCS8qIE5vIC0gc2VlIGlmIHRoaXMgaXMgb25lICovCi0jaWZkZWYgQ0tSRUdFWAot CQkgICAgIiouflswLTldKn4iCS8qIE5vdCBwZXJmZWN0IGJ1dCBjbG9zZSBlbm91Z2guICovCi0j ZWxzZQotCQkgICAgIioufip+IgkJLyogTGVzcyBjbG9zZS4gKi8KLSNlbmRpZiAvKiBDS1JFR0VY ICovCi0JCSAgICAsbmFtZSxmaWxlY2FzZSwxKTsKLQlkZWJ1ZyhGMTExLCJueHRkaXIgY2ttYXRj aCIsbmFtZSx4KTsKLQlpZiAoeCkgewotCSAgICBjb250aW51ZTsJCQkvKiBJdCdzIGEgYmFja3Vw IGZpbGUgLSBza2lwIGl0ICovCi0JfSBlbHNlIHsKLQkgICAgZ290b25lID0gMTsJCQkvKiBJdCdz IG5vdCwgYnJlYWsgZnJvbSBsb29wLiAqLwotCSAgICBicmVhazsKLQl9Ci0gICAgfQotICAgIGlm IChnb3RvbmUpIHsKLSAgICAgICAgbGVuID0gemdldGZzKG5hbWUpOwkJLyogR2V0IGZpbGUgc2l6 ZSAqLwotCWRlYnVnKEYxMTEsIm54dGRpciB6Z2V0ZnMiLG5hbWUsbGVuKTsKLSNpZmRlZiBWTVNP UlVOSVgKLQlpdHNhZGlyID0gemdmc19kaXI7CQkvKiBTZWUgaWYgaXQncyBhIGRpcmVjdG9yeSAq LwotI2Vsc2UKLQlpdHNhZGlyID0gKGxlbiA9PSAtMiB8fCBpc2RpcihuYW1lKSk7Ci0jZW5kaWYg LyogVk1TT1JVTklYICovCi0gICAgICAgIGRzdHIgPSB6ZmNkYXQobmFtZSk7Ci0JZGVidWcoRjEx MSwibnh0ZGlyIHpjZmRhdCIsZHN0ciwwKTsKLQlpZiAoIWRzdHIpCi0JICBkc3RyID0gIjAwMDAt MDAtMDAgMDA6MDA6MDAiOwotCWlmICghKmRzdHIpIHsKLQkgIGRzdHIgPSAiMDAwMC0wMC0wMCAw MDowMDowMCI7Ci0JfSBlbHNlIHsKLQkgICAgZGJ1ZlswXSA9IGRzdHJbMF07Ci0JICAgIGRidWZb MV0gPSBkc3RyWzFdOwotCSAgICBkYnVmWzJdID0gZHN0clsyXTsKLQkgICAgZGJ1ZlszXSA9IGRz dHJbM107Ci0JICAgIGRidWZbNF0gPSAnLSc7Ci0JICAgIGRidWZbNV0gPSBkc3RyWzRdOwotCSAg ICBkYnVmWzZdID0gZHN0cls1XTsKLQkgICAgZGJ1Zls3XSA9ICctJzsKLQkgICAgZGJ1Zls4XSA9 IGRzdHJbNl07Ci0JICAgIGRidWZbOV0gPSBkc3RyWzddOwotCSAgICBzdHJjcHkoZGJ1ZisxMCxk c3RyKzgpOwotCSAgICBkc3RyID0gZGJ1ZjsKLQl9Ci0jaWZkZWYgQ0tfUEVSTVMKLSNpZmRlZiBW TVNPUlVOSVgKLQlwID0gemlwZXJtKG5hbWUpOwkJLyogR2V0IHBlcm1pc3Npb25zICovCi0jZWxz ZQotCXAgPSB6Z3Blcm0obmFtZSk7Ci0jZW5kaWYgLyogVk1TT1JVTklYICovCi0jZWxzZQotCXAg PSBOVUxMOwotI2VuZGlmIC8qIENLX1BFUk1TICovCi0JZGVidWcoRjExMCwiZG9teWRpciBwZXJt cyIscCwwKTsKLQotI2lmZGVmIFZNUwotCS8qIE1ha2UgbmFtZSByZWxhdGl2ZSAqLwotCWNrc3Ry bmNweShuYW1lLHpyZWxuYW1lKG5hbWUsemd0ZGlyKCkpLENLTUFYUEFUSCsxKTsKLSNlbmRpZiAv KiBWTVMgKi8KLQotCWlmIChpdHNhZGlyKSB7Ci0JICAgIG5kaXJzKys7Ci0JfSBlbHNlIHsKLQkg ICAgbmZpbGVzKys7Ci0JICAgIG5ieXRlcyArPSBsZW47Ci0JfQotCWxuayA9ICIiOwotI2lmZGVm IFVOSVgKLSNpZmRlZiBDS1NZTUxJTksKLQlpZiAoemdmc19saW5rKSB7Ci0JICAgIGV4dGVybiBj aGFyIGxpbmtuYW1lW107Ci0JICAgIGxuayA9IGxpbmtuYW1lOwotCX0KLQlkZWJ1ZyhGMTExLCJu eHRkaXIgbGlua25hbWUiLGxuayx6Z2ZzX2xpbmspOwotI2VuZGlmIC8qIENLU1lNTElOSyAqLwot I2VuZGlmIC8qIFVOSVggKi8KLQotLyoKLSAgVGhlIGZvbGxvd2luZyBzcHJpbnRmJ3MgYXJlIHNh ZmU7IGxpbmVidWYgaXMgYSBwb2ludGVyIHRvIGZ1bmNidWYsCi0gIHdoaWNoIGlzIDY0IGJ5dGVz IGxhcmdlciB0aGFuIENLTUFYUEFUSCAob3IgZG91YmxlIENLTUFYUEFUSCB3aGVuCi0gIHN5bWxp bmtzIGFyZSBwb3NzaWJsZSkuICA2NCBhbGxvd3MgZm9yIHRoZSBmaXhlZC1maWVsZCBwb3J0aW9u cyBvZgotICB0aGUgZmlsZSBsaXN0aW5nIGxpbmU6IHBlcm1pc3Npb25zLCBzaXplLCBhbmQgZGF0 ZS4gIENLTUFYUEFUSCBhbGxvd3MKLSAgZm9yIHRoZSBsb25nZXN0IHBvc3NpYmxlIHBhdGhuYW1l LgotKi8KLQlpZiAoaXRzYWRpciAmJiBsZW4gPCAwKSB7CS8qIERpcmVjdG9yeSAqLwotI2lmZGVm IFZNUwotCSAgICBzcHJpbnRmKChjaGFyICopbGluZWJ1ZiwKLQkJICAgICIlLTIycyUtMTBzICAl cyAgJXNcbiIscCwiPERJUj4iLGRzdHIsbmFtZSk7Ci0jZWxzZQotCSAgICBpZiAocCkKLQkgICAg ICBzcHJpbnRmKChjaGFyICopbGluZWJ1ZiwKLQkJICAgICAgIiUxMHMlLTEwcyAgJXMgICVzXG4i LHAsIjxESVI+Iixkc3RyLG5hbWUpOwotCSAgICBlbHNlCi0JICAgICAgc3ByaW50ZigoY2hhciAq KWxpbmVidWYsCi0JCSAgICAgICIlLTEwcyAgJXMgICVzXG4iLCAiPERJUj4iLCBkc3RyLCBuYW1l KTsKLSNlbmRpZiAvKiBWTVMgKi8KLQl9IGVsc2UgewkJCS8qIFJlZ3VsYXIgZmlsZSAqLwotI2lm ZGVmIFZNUwotCSAgICBzcHJpbnRmKChjaGFyICopbGluZWJ1ZiwKLQkJICAgICIlLTIycyUxMHMg ICVzICAlc1xuIiwgcCwgY2tmc3RvYShsZW4pLCBkc3RyLCBuYW1lKTsKLSNlbHNlCi0JICAgIGlm IChwKQotCSAgICAgIHNwcmludGYoKGNoYXIgKilsaW5lYnVmLAotCQkgICAgICAiJTEwcyUxMHMg ICVzICAlcyVzJXNcbiIsCi0JCSAgICAgIHAsIGNrZnN0b2EobGVuKSwgZHN0ciwgbmFtZSwKLQkJ ICAgICAgKmxuayA/ICIgLT4gIiA6ICIiLAotCQkgICAgICBsbmsKLQkJICAgICAgKTsKLQkgICAg ZWxzZQotCSAgICAgIHNwcmludGYoKGNoYXIgKilsaW5lYnVmLAotCQkgICAgICAiJTEwcyAgJXMg ICVzJXMlc1xuIiwKLQkJICAgICAgY2tmc3RvYShsZW4pLCBkc3RyLCBuYW1lLAotCQkgICAgICAq bG5rID8gIiAtPiAiIDogIiIsCi0JCSAgICAgIGxuawotCQkgICAgICApOwotI2VuZGlmIC8qIFZN UyAqLwotCX0KLSAgICAgICAgZnVuY254dCA9IDA7Ci0gICAgICAgIGZ1bmNsZW4gPSBzdHJsZW4o KGNoYXIgKilmdW5jYnVmKTsKLSAgICB9IGVsc2UgaWYgKHNkX2hkZyAmJiBueHBuZCA9PSAwKSB7 CS8qIERvbmUsIHNlbmQgc3VtbWFyeSAqLwotCWNoYXIgKmJsYW5rbGluZSA9ICIiOwkJLyogQXQg YmVnaW5uaW5nIG9mIHN1bW1hcnkgKi8KLS8qCi0gIFRoZSBpZGVhIGlzIHRvIHByZXZlbnQgKGEp IHVubmVjZXNzYXJ5IG11bHRpcGxlIGJsYW5rbGluZXMsIGFuZCAoYikKLSAgcHJvbXB0LXN0b21w aW5nLiAgUHJldmVudGluZyAoYikgaXMgcHJhY3RpY2FsbHkgaW1wb3NzaWJsZSwgYmVjYXVzZSBp dAotICBkZXBlbmRzIG9uIHRoZSBjbGllbnQgc28gZm9yIG5vdyBhbHdheXMgaW5jbHVkZSB0aGF0 IGZpbmFsIENSTEYuCi0qLwotCWlmICghbmRpcnMgfHwgIW5ieXRlcyB8fCAhbmZpbGVzKQotCSAg YmxhbmtsaW5lID0gZW5kbGluZTsKLSNpZmRlZiBPU0sKLS8qIFdvcmthcm91bmQgYnVncyBpbiBP Uy05IGNvbXBpbGVyLi4uICovCi0gICAgICAgIGlmIChuZGlycyA9PSAxKQotICAgICAgICAgICBk aXJ0YWcgPSAiZGlyZWN0b3J5IjsKLSAgICAgICAgaWYgKG5maWxlcyA9PSAxKQotICAgICAgICAg ICBmaWxldGFnID0gImZpbGUiOwotICAgICAgICBpZiAobmJ5dGVzID09IChDS19PRkZfVCkxKQot ICAgICAgICAgICBieXRldGFnID0gImJ5dGUiOwotICAgICAgICBzcHJpbnRmKChjaGFyICopZnVu Y2J1ZiwKLQkJIiVzU3VtbWFyeTogJWxkICVzLCAlbGQgJXMsICVzICVzJXMiLAotCQlibGFua2xp bmUsCi0JCW5kaXJzLAotCQlkaXJ0YWcsCi0JCW5maWxlcywKLQkJZmlsZXRhZywKLQkJY2tmc3Rv YShuYnl0ZXMpLAotCQlieXRldGFnLAotCQllbmRsaW5lKTsKLSNlbHNlCi0gICAgICAgIHNwcmlu dGYoKGNoYXIgKilmdW5jYnVmLAotCQkiJXNTdW1tYXJ5OiAlbGQgZGlyZWN0b3IlcywgJWxkIGZp bGUlcywgJXMgYnl0ZSVzJXMiLAotCQlibGFua2xpbmUsCi0JCW5kaXJzLAotCQkobmRpcnMgPT0g MSkgPyAieSIgOiAiaWVzIiwKLQkJbmZpbGVzLAotCQkobmZpbGVzID09IDEpID8gIiIgOiAicyIs Ci0JCWNrZnN0b2EobmJ5dGVzKSwKLQkJKG5ieXRlcyA9PSAoQ0tfT0ZGX1QpMSkgPyAiIiA6ICJz IiwKLQkJZW5kbGluZQotCQkpOwotI2VuZGlmIC8qIE9TSyAqLwotICAgICAgICBueHBuZC0tOwot ICAgICAgICBmdW5jbnh0ID0gMDsKLSAgICAgICAgZnVuY2xlbiA9IHN0cmxlbigoY2hhciAqKWZ1 bmNidWYpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZ1bmNidWZbMF0gPSAnXDAnOwotICAgICAg ICBmdW5jbnh0ID0gMDsKLSAgICAgICAgZnVuY2xlbiA9IDA7Ci0gICAgfQotICAgIGRlYnVnKEYx MDEsIm54dGRpciBmdW5jbGVuIiwiIixmdW5jbGVuKTsKLQotICAgIGlmIChmdW5jbnh0IDwgZnVu Y2xlbikgewkJLyogSWYgd2UgaGF2ZSBkYXRhIHRvIHNlbmQuLi4gKi8KLQljID0gZnVuY2J1Zltm dW5jbnh0KytdOwotCWRlYnVnKEYwMDAsIm54dGRpciByZXR1cm4gMiIsIiIsKHVuc2lnbmVkKShj ICYgMHhmZikpOwotCXJldHVybigodW5zaWduZWQpKGMgJiAweGZmKSk7Ci0gICAgfSBlbHNlCi0g ICAgICByZXR1cm4oLTEpOwkJCS8qIE5vdGhpbmcgbGVmdCwgZG9uZS4gKi8KLX0KLQotLyogIFMg TiBEIEQgSSBSIC0tIHNlbmQgZGlyZWN0b3J5IGxpc3RpbmcgICovCi0KLWludAotc25kZGlyKHNw ZWMpIGNoYXIgKiBzcGVjOyB7Ci0jaWZuZGVmIE5PU0VSVkVSCi0gICAgY2hhciAqIHAgPSBOVUxM LCBuYW1lW0NLTUFYUEFUSCsxXTsKLSAgICBpbnQgdCA9IDAsIHJjID0gMDsKLSAgICBjaGFyIGZu YnVmW0NLTUFYUEFUSCsxXTsKLQotICAgIGRlYnVnKEYxMTEsInNuZGRpciBtYXRjaGRvdCIsc3Bl YyxtYXRjaGRvdCk7Ci0KLSNpZm5kZWYgTk9JQ1AKLSAgICBkZWJ1ZyhGMTExLCJzbmRkaXIgZGly X2RvdHMiLHNwZWMsZGlyX2RvdHMpOwotICAgIHNkX2hkZyA9IGRpcl9oZWFkID4gMDsJCS8qIElt cG9ydCBsaXN0aW5nIHBhcmFtZXRlcnMgaWYgYW55ICovCi0gICAgc2RfYmtwID0gZGlyX2JhY2sg PiAwOwotICAgIGlmIChkaXJfZG90cyA+IC0xKQotICAgICAgc2RfZG90ID0gZGlyX2RvdHM7Ci0g ICAgZWxzZQotICAgICAgc2RfZG90ID0gbWF0Y2hkb3Q7Ci0jZWxzZQotICAgIHNkX2hkZyA9IDE7 CQkJCS8qIE9yIHVzZSBoYXJkd2lyZWQgZGVmYXVsdHMgKi8KLSAgICBzZF9ia3AgPSAxOwotICAg IHNkX2RvdCA9IG1hdGNoZG90OwotI2VuZGlmIC8qIE5PSUNQICovCi0KLSAgICBpZiAoIXNwZWMp IHNwZWMgPSAiIjsKLSAgICBkZWJ1ZyhGMTExLCJzbmRkaXIgc2RfZG90IixzcGVjLHNkX2RvdCk7 Ci0gICAgaWYgKCpzcGVjKSB7Ci0jaWZkZWYgQ09NTUVOVAotCXpmbnFmcChzcGVjLENLTUFYUEFU SCxuYW1lKTsKLQlkZWJ1ZyhGMTEwLCJzbmRkaXIgemZucWZwIixuYW1lLDApOwotI2Vsc2UKLQlj a3N0cm5jcHkobmFtZSxzcGVjLENLTUFYUEFUSCsxKTsKLQlkZWJ1ZyhGMTEwLCJzbmRkaXIgbmFt ZSIsbmFtZSwwKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgfSBlbHNlIHsKLSNpZmRlZiBP UzIKLQlzdHJjcHkobmFtZSwgIioiKTsKLSNlbHNlCi0jaWZkZWYgVU5JWE9ST1NLCi0Jc3RyY3B5 KG5hbWUsICIuLyoiKTsKLSNlbHNlCi0jaWZkZWYgVk1TCi0Jc3RyY3B5KG5hbWUsICIqLioiKTsK LSNlbHNlCi0jaWZkZWYgZGF0YWdlbmVyYWwKLQlzdHJjcHkobmFtZSwgIisiKTsKLSNlbHNlCi0J ZGVidWcoRjEwMSwic25kZGlyIHF1aXQgKG5vIGZpbGVzcGVjKSIsIiIsMCk7Ci0JcmV0dXJuKDAp OwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyog VU5JWCAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJzbmRkaXIg bmFtZSAxIixuYW1lLDApOwotICAgIG5kaXJzID0gMEw7Ci0gICAgbmZpbGVzID0gMEw7Ci0gICAg bmJ5dGVzID0gKENLX09GRl9UKTA7Ci0KLSAgICBpZiAoemZucWZwKG5hbWUsQ0tNQVhQQVRILGZu YnVmKSkKLQotICAgIGRlYnVnKEYxMTAsInNuZGRpciBuYW1lIDIiLG5hbWUsMCk7Ci0gICAgcCA9 IG5hbWUgKyBzdHJsZW4obmFtZSk7CQkvKiBNb3ZlIGl0IHRvIGVuZCBvZiBsaXN0ICovCi0KLSAg ICAvKiBzcHJpbnRmIHNhZmUgYmVjYXVzZSBmdW5jYnVmIHNpemUgPj0gbWF4IHBhdGggbGVuICsg NjQgKi8KLQotICAgIGlmIChzZF9oZGcpIHsKLQlzcHJpbnRmKChjaGFyICopZnVuY2J1ZiwiTGlz dGluZyBmaWxlczogJXMlcyVzIixmbmJ1ZixlbmRsaW5lLGVuZGxpbmUpOwotCWZ1bmNueHQgPSAw OwotCWZ1bmNsZW4gPSBzdHJsZW4oKGNoYXIgKilmdW5jYnVmKTsKLSAgICB9Ci0gICAgZGlyYWN0 aXZlID0gMTsKLQotI2lmZGVmIE9TMgotICAgIGlmICh6Y2hraShuYW1lKSA9PSAtMikgewkJLyog Rm91bmQgYSBkaXJlY3RvcnkgKi8KLSAgICAgICAgcC0tOwotICAgICAgICBpZiAoKnAgPT0gJ1xc JyB8fCAqcCA9PSAnLycpCi0gICAgICAgICAgY2tzdHJuY2F0KG5hbWUsICIqIiwgQ0tNQVhQQVRI KTsKLSAgICAgICAgZWxzZSBpZiAoKnAgPT0gJzonKQotICAgICAgICAgIGNrc3RybmNhdChuYW1l LCAiLiIsIENLTUFYUEFUSCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBja3N0cm5jYXQobmFt ZSwgIlxcKiIsIENLTUFYUEFUSCk7Ci0JZGVidWcoRjExMCwic25kZGlyIGRpcmVjdG9yeSIsbmFt ZSwwKTsKLSAgICB9Ci0jZWxzZQotICAgIGlmICghaXN3aWxkKG5hbWUpICYmIGlzZGlyKG5hbWUp KSB7Ci0JY2hhciAqIHMgPSBuYW1lOwotCXAtLTsKLSNpZmRlZiBVTklYT1JPU0sKLQlpZiAoKnAg PT0gJy8nKQkJCS8qIFNvIGFwcGVuZCB3aWxkY2FyZCB0byBpdCAqLwotCSAgY2tzdHJuY2F0KHMs ICIqIiwgQ0tNQVhQQVRIKTsKLQllbHNlCi0JICBja3N0cm5jYXQocywgIi8qIiwgQ0tNQVhQQVRI KTsKLSNlbHNlCi0jaWZkZWYgVk1TCi0JaWYgKCpwID09ICddJyB8fCAqcCA9PSAnPicgfHwgKnAg PT0gJzonKQotCSAgY2tzdHJuY2F0KHMsICIqLioiLCBDS01BWFBBVEgpOwotI2Vsc2UKLSNpZmRl ZiBkYXRhZ2VuZXJhbAotCWlmICgqcCA9PSAnOicpCi0JICBja3N0cm5jYXQocywgIisiLCBDS01B WFBBVEgpOwotCWVsc2UKLQkgIGNrc3RybmNhdChzLCAiOisiLCBDS01BWFBBVEgpOwotI2Vsc2UK LSNpZmRlZiBWT1MKLQlpZiAoKnAgPT0gJz4nKQotCSAgY2tzdHJuY2F0KHMsICIqIiwgQ0tNQVhQ QVRIKTsKLQllbHNlCi0JICBja3N0cm5jYXQocywgIj4qIiwgQ0tNQVhQQVRIKTsKLSNlbmRpZiAv KiBWT1MgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2Vu ZGlmIC8qIFVOSVhPUk9TSyAqLwotCWRlYnVnKEYxMTAsInNuZGRpciBkaXJlY3RvcnkiLG5hbWUs MCk7Ci0gICAgfQotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAgbnp4b3B0cyA9IDA7Ci0jaWZkZWYg VU5JWAotICAgIHsKLQlleHRlcm4gY2hhciAqKiBtdGNoczsKLQlkZWJ1ZyhGMTExLCJzbmRkaXIg c2RfZG90IixzcGVjLHNkX2RvdCk7Ci0JaWYgKHNkX2RvdCA+IDApCi0JICBuenhvcHRzIHw9IFpY X01BVENIRE9UOwotCWlmIChyZWN1cnNpdmUpCi0JICBuenhvcHRzIHw9IFpYX1JFQ1VSU0U7Ci0J ZGVidWcoRjExMSwic25kZGlyIG56eG9wdHMiLHNwZWMsbnp4b3B0cyk7Ci0JbnhwbmQgPSBuenhw YW5kKG5hbWUsbnp4b3B0cyk7CS8qIEdldCB0aGUgYXJyYXkgb2YgbmFtZXMgKi8KLQlzaF9zb3J0 KG10Y2hzLE5VTEwsbnhwbmQsMCwwLDEpOyAvKiBTb3J0IHRoZSBhcnJheSAqLwotICAgIH0KLSNl bHNlCi0gICAgaWYgKHJlY3Vyc2l2ZSkgbnp4b3B0cyB8PSBaWF9SRUNVUlNFOwotICAgIG54cG5k ID0gbnp4cGFuZChuYW1lLG56eG9wdHMpOwotI2VuZGlmIC8qIFVOSVggKi8KLQotICAgIGRlYnVn KEYxMDEsInNuZGRpciBuenhwYW5kIG54cG5kIiwiIixueHBuZCk7Ci0gICAgaWYgKG54cG5kIDwg MSkKLSAgICAgIHJldHVybigtMSk7Ci0gICAgbmZpbHMgPSAwOwkJCQkvKiBObyBmaWxlcywgbm8g bGlzdHMuICovCi0gICAgeGZsZyA9IDE7CQkJCS8qIEZsYWcgd2UgbXVzdCBzZW5kIFggcGFja2V0 LiAqLwotICAgIGlmICgoaW50KXN0cmxlbihuYW1lKSA8IENNRFNUUkwgLSAxMSkgLyogRGF0YSBm b3IgWCBwYWNrZXQuICovCi0gICAgICBzcHJpbnRmKGNtZHN0ciwiRElSRUNUT1JZICVzIixuYW1l KTsgLyogc2FmZSAqLwotICAgIGVsc2UKLSAgICAgIGNrc3RybmNweShjbWRzdHIsIkRJUkVDVE9S WSIsQ01EU1RSTCk7Ci0gICAgZmlyc3QgPSAxOwkJCQkvKiBJbml0IGdldGNoeCBsb29rYWhlYWQg Ki8KLSAgICBmdW5jc3RyID0gMTsJCQkvKiBKdXN0IHNldCB0aGUgZmxhZy4gKi8KLSAgICBmdW5j cHRyID0gbnh0ZGlyOwkJCS8qIEFuZCB0aGUgcG9pbnRlci4gKi8KLSAgICBiaW5hcnkgPSBYWUZU X1Q7CQkJLyogVGV4dCBtb2RlIGZvciB0aGlzICovCi0gICAgcmMgPSBzaW5pdCgpOwkJCS8qIDI2 IEF1ZyAyMDA1ICovCi0gICAgZGVidWcoRjExMSwic25kZGlyIiwic2luaXQoKSIscmMpOwotICAg IHJldHVybihyYyk7Ci0jZWxzZQotICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBOT1NFUlZFUiAq LwotfQotCi0vKiAgTiBYIFQgRCBFIEwgLS0gcHJvdmlkZSBkYXRhIGZvciBkZWxldGUgICAqLwot Ci0vKiAgUmV0dXJucyB0aGUgbmV4dCBhdmFpbGFibGUgY2hhcmFjdGVyIG9yIC0xIGlmIG5vIG1v cmUgZGF0YSAgKi8KLQotc3RhdGljIGludAotbnh0ZGVsKAotI2lmZGVmIENLX0FOU0lDCi0gICAg ICAgdm9pZAotI2VuZGlmIC8qIENLX0FOU0lDICovCi0gICAgICAgKSB7Ci0gICAgY2hhciBuYW1l WzI1N10sICpwID0gTlVMTDsKLSAgICBpbnQgbGVuID0gMDsKLQotICAgIGlmIChmdW5jbnh0IDwg ZnVuY2xlbikKLSAgICAgIHJldHVybiAoKHVuc2lnbmVkKWZ1bmNidWZbZnVuY254dCsrXSk7Ci0K LSAgICBpZiAobnhwbmQgPiAwKSB7Ci0gICAgICAgIG54cG5kLS07Ci0Jem5leHQobmFtZSk7Ci0g ICAgICAgIGlmICghbmFtZVswXSkgewotICAgICAgICAgICAgbnhwbmQgPSAwOwotICAgICAgICAg ICAgcmV0dXJuKG54dGRlbCgpKTsKLSAgICAgICAgfQotICAgICAgICBsZW4gPSB6Y2hraShuYW1l KTsKLQotICAgICAgICAvKiBGaW5kIGp1c3QgdGhlIG5hbWUgb2YgdGhlIGZpbGUgKi8KLQotICAg ICAgICBmb3IgKHAgPSBuYW1lICsgc3RybGVuKG5hbWUpOyBwICE9IG5hbWUgJiYgKnAgIT0gJy8n IDsgcC0tKSA7Ci0gICAgICAgIGlmICgqcCA9PSAnLycpIHArKzsKLQotCS8qIHNwcmludGYncyBz YWZlIGJlY2F1c2Ugc2l6ZSBvZiBmdW5jYnVmID49IDY0ICsgbWF4cGF0aGxlbiAqLwotCi0gICAg ICAgIGlmIChsZW4gPiAtMUwpIHsKLQkgICAgaWYgKHpkZWxldChuYW1lKSkgewotCQlzcHJpbnRm KChjaGFyICopZnVuY2J1ZiwiICUxMHM6ICVzJXMiLCJza2lwcGluZyIscCxlbmRsaW5lKTsKLQkg ICAgfSBlbHNlIHsKLQkJbmZpbGVzKys7Ci0JCW5ieXRlcyArPSBsZW47Ci0JCXNwcmludGYoKGNo YXIgKilmdW5jYnVmLCIgJTEwczogJXMlcyIsImRlbGV0ZWQiLHAsZW5kbGluZSk7Ci0JICAgIH0K LSAgICAgICAgfSBlbHNlCi0JICBzcHJpbnRmKChjaGFyICopZnVuY2J1ZiwiIGRpcmVjdG9yeTog JXMlcyIsIHAsIGVuZGxpbmUpOwotICAgICAgICBmdW5jbnh0ID0gMDsKLSAgICAgICAgZnVuY2xl biA9IHN0cmxlbigoY2hhciAqKWZ1bmNidWYpOwotICAgIH0gZWxzZQotCi0gICAgLyogSWYgZG9u ZSBwcm9jZXNzaW5nIHRoZSBleHBhbmRlZCBlbnRyaWVzIHNlbmQgYSBzdW1tYXJ5IHN0YXRlbWVu dCAqLwotCi0gICAgICBpZiAobnhwbmQgPT0gMCkgewotCSAgc3ByaW50ZigoY2hhciAqKWZ1bmNi dWYsCi0JCSAgIiVzJWxkIGZpbGUlcyBkZWxldGVkLCAlcyBieXRlJXMgZnJlZWQlcyIsCi0JCSAg ZW5kbGluZSwKLQkJICBuZmlsZXMsCi0JCSAgKG5maWxlcyA9PSAxKSA/ICIiIDogInMiLAotCQkg IGNrZnN0b2EobmJ5dGVzKSwKLQkJICAobmJ5dGVzID09IChDS19PRkZfVCkxKSA/ICIiIDogInMi LAotCQkgIGVuZGxpbmUKLQkJICApOwotCSAgbnhwbmQtLTsKLQkgIGZ1bmNueHQgPSAwOwotCSAg ZnVuY2xlbiA9IHN0cmxlbigoY2hhciAqKWZ1bmNidWYpOwotICAgICAgfSBlbHNlIHsKLQkgIGZ1 bmNidWZbMF0gPSAnXDAnOwotCSAgZnVuY254dCA9IDA7Ci0JICBmdW5jbGVuID0gMDsKLSAgICAg IH0KLQotICAgIC8qIElmIHdlIGhhdmUgZGF0YSB0byBzZW5kICovCi0KLSAgICBpZiAoZnVuY254 dCA8IGZ1bmNsZW4pCi0gICAgICByZXR1cm4gKCh1bnNpZ25lZClmdW5jYnVmW2Z1bmNueHQrK10p OyAvKiBSZXR1cm4gYSBjaGFyYWN0ZXIgKi8KLSAgICBlbHNlCi0gICAgICByZXR1cm4oLTEpOwkJ CS8qIE5vIG1vcmUgaW5wdXQgKi8KLX0KLQotLyogIFMgTiBEIEQgRSBMICAtLSAgU2VuZCBkZWxl dGUgbWVzc2FnZSAgKi8KLQotaW50Ci1zbmRkZWwoc3BlYykgY2hhciAqIHNwZWM7IHsKLSNpZm5k ZWYgTk9TRVJWRVIKLSAgICBjaGFyIG5hbWVbQ0tNQVhQQVRIKzFdOwotI2lmZGVmIE9TMgotICAg IGNoYXIgKiBwID0gTlVMTDsKLSNlbmRpZiAvKiAjaWZkZWYgT1MyICovCi0KLSAgICBpZiAoISpz cGVjKQotICAgICAgcmV0dXJuKDApOwotCi0gICAgY2tzdHJuY3B5KG5hbWUsIHNwZWMsIENLTUFY UEFUSCsxKTsKLQotI2lmZGVmIE9TMgotICAgIC8qIGNoYW5nZSAvIHRvIFwuICovCi0gICAgcCA9 IG5hbWU7Ci0gICAgd2hpbGUgKCpwKSB7CQkJLyogQ2hhbmdlIHRoZW0gYmFjayB0byBcICovCi0g ICAgICAgIGlmICgqcCA9PSAnLycpICpwID0gJ1xcJzsKLSAgICAgICAgcCsrOwotICAgIH0KLSNl bmRpZiAvKiBPUzIgKi8KLQotICAgIG5maWxlcyA9IDBMOwotICAgIG5ieXRlcyA9IChDS19PRkZf VCkwOwotICAgIHNwcmludGYoKGNoYXIgKilmdW5jYnVmLCJEZWxldGluZyBcIiVzXCIlcyIsbmFt ZSxlbmRsaW5lKTsKLSAgICBmdW5jbnh0ID0gMDsKLSAgICBmdW5jbGVuID0gc3RybGVuKChjaGFy ICopZnVuY2J1Zik7Ci0KLSAgICBuenhvcHRzID0gWlhfRklMT05MWTsJCS8qIEZpbGVzIG9ubHkg Ki8KLSNpZmRlZiBVTklYT1JPU0sKLSAgICBpZiAobWF0Y2hkb3QpIG56eG9wdHMgfD0gWlhfTUFU Q0hET1Q7Ci0jZW5kaWYgLyogVU5JWE9ST1NLICovCi0jaWZkZWYgQ09NTUVOVAotICAgIC8qIFJl Y3Vyc2l2ZSBkZWxldGluZyBub3Qgc3VwcG9ydGVkIHlldCAqLwotICAgIGlmIChyZWN1cnNpdmUp IG56eG9wdHMgfD0gWlhfUkVDVVJTRTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgbnhwbmQg PSBuenhwYW5kKG5hbWUsbnp4b3B0cyk7Ci0gICAgaWYgKG54cG5kIDwgMSkKLSAgICAgIHJldHVy bigtMSk7Ci0gICAgbmZpbHMgPSAwOwkJCQkvKiBObyBmaWxlcywgbm8gbGlzdHMuICovCi0gICAg eGZsZyA9IDE7CQkJCS8qIEZsYWcgd2UgbXVzdCBzZW5kIFggcGFja2V0LiAqLwotICAgIGNrc3Ry bmNweShjbWRzdHIsIlJFTU9URSBERUxFVEUiLENNRFNUUkwpOyAvKiBEYXRhIGZvciBYIHBhY2tl dC4gKi8KLSAgICBmaXJzdCA9IDE7CQkJCS8qIEluaXQgZ2V0Y2h4IGxvb2thaGVhZCAqLwotICAg IGZ1bmNzdHIgPSAxOwkJCS8qIEp1c3Qgc2V0IHRoZSBmbGFnLiAqLwotICAgIGZ1bmNwdHIgPSBu eHRkZWw7CQkJLyogQW5kIHRoZSBwb2ludGVyLiAqLwotICAgIGJpbmFyeSA9IFhZRlRfVDsJCQkv KiBVc2UgdGV4dCBtb2RlIGZvciB0aGlzLCAqLwotICAgIHJldHVybihzaW5pdCgpKTsKLSNlbHNl Ci0gICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIE5PU0VSVkVSICovCi19Ci0KLSNpZmRlZiBPUzIK LS8qICBTIE4gRCBTIFAgQSBDIEUgLS0gc2VuZCBkaXNrIHNwYWNlIG1lc3NhZ2UgICovCi1pbnQK LXNuZHNwYWNlKGRyaXZlKSBpbnQgZHJpdmU7IHsKLSNpZm5kZWYgTk9TRVJWRVIKLSAgICBzdGF0 aWMgY2hhciBzcGN0ZXh0WzY0XTsKLSAgICB1bnNpZ25lZCBsb25nIHNwYWNlOwotCi0gICAgaWYg KGRyaXZlKSB7Ci0Jc3BhY2UgPSB6ZHNrc3BhY2UoZHJpdmUgLSAnQScgKyAxKTsKLQlpZiAoc3Bh Y2UgPiAwICYmIHNwYWNlIDwgMTAyNCkKLQkgIHNwcmludGYoc3BjdGV4dCwKLQkJICAiIERyaXZl ICVjOiB1bmtub3duJXMiLAotCQkgIGRyaXZlLAotCQkgIGVuZGxpbmUKLQkJICApOwotCWVsc2UK LQkgIHNwcmludGYoc3BjdGV4dCwKLQkJICAiIERyaXZlICVjOiAlbGRLIGZyZWUlcyIsCi0JCSAg ZHJpdmUsCi0JCSAgc3BhY2UgLyAxMDI0TCwKLQkJICBlbmRsaW5lCi0JCSAgKTsKLSAgICB9IGVs c2UgewotCXNwYWNlID0gemRza3NwYWNlKDApOwotCWlmIChzcGFjZSA+IDAgJiYgc3BhY2UgPCAx MDI0KQotCSAgc3ByaW50ZihzcGN0ZXh0LCAiIEZyZWUgc3BhY2U6IHVua25vd24lcyIsIGVuZGxp bmUpOwotCWVsc2UKLQkgIHNwcmludGYoc3BjdGV4dCwgIiBGcmVlIHNwYWNlOiAlbGRLJXMiLCBz cGFjZSAvIDEwMjRMLCBlbmRsaW5lKTsKLSAgICB9Ci0gICAgbmZpbHMgPSAwOwkJCQkvKiBObyBm aWxlcywgbm8gbGlzdHMuICovCi0gICAgeGZsZyA9IDE7CQkJCS8qIEZsYWcgd2UgbXVzdCBzZW5k IFggcGFja2V0LiAqLwotICAgIGNrc3RybmNweShjbWRzdHIsImZyZWUgc3BhY2UiLENNRFNUUkwp OyAvKiBEYXRhIGZvciBYIHBhY2tldC4gKi8KLSAgICBmaXJzdCA9IDE7CQkJCS8qIEluaXQgZ2V0 Y2h4IGxvb2thaGVhZCAqLwotICAgIG1lbXN0ciA9IDE7CQkJCS8qIEp1c3Qgc2V0IHRoZSBmbGFn LiAqLwotICAgIG1lbXB0ciA9IHNwY3RleHQ7CQkJLyogQW5kIHRoZSBwb2ludGVyLiAqLwotICAg IGJpbmFyeSA9IFhZRlRfVDsJCQkvKiBUZXh0IG1vZGUgZm9yIHRoaXMuICovCi0gICAgcmV0dXJu KHNpbml0KCkpOwotI2Vsc2UKLSAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8K LX0KLQotLyogIFMgTiBEIFcgSCBPIC0tIHNlbmQgd2hvIG1lc3NhZ2UgICovCi1pbnQKLXNuZHdo byh3aG8pIGNoYXIgKiB3aG87IHsKLSNpZm5kZWYgTk9TRVJWRVIKLSAgICBuZmlscyA9IDA7CQkJ CS8qIE5vIGZpbGVzLCBubyBsaXN0cy4gKi8KLSAgICB4ZmxnID0gMTsJCQkJLyogRmxhZyB3ZSBt dXN0IHNlbmQgWCBwYWNrZXQuICovCi0gICAgY2tzdHJuY3B5KGNtZHN0ciwid2hvIixDTURTVFJM KTsJLyogRGF0YSBmb3IgWCBwYWNrZXQuICovCi0gICAgZmlyc3QgPSAxOwkJCQkvKiBJbml0IGdl dGNoeCBsb29rYWhlYWQgKi8KLSAgICBtZW1zdHIgPSAxOwkJCQkvKiBKdXN0IHNldCB0aGUgZmxh Zy4gKi8KLSNpZmRlZiBOVAotICAgIG1lbXB0ciA9ICJcMTVcMTJLOTUgU0VSVkVSXDE1XDEyIjsJ LyogQW5kIHRoZSBwb2ludGVyLiAqLwotI2Vsc2UKLSAgICBtZW1wdHIgPSAiXDE1XDEySy8yIFNF UlZFUlwxNVwxMiI7Ci0jZW5kaWYgLyogTlQgKi8KLSAgICBiaW5hcnkgPSBYWUZUX1Q7CQkJLyog VXNlIHRleHQgbW9kZSAqLwotICAgIHJldHVybihzaW5pdCgpKTsKLSNlbHNlCi0gICAgcmV0dXJu KDApOwotI2VuZGlmIC8qIE5PU0VSVkVSICovCi19Ci0jZW5kaWYgLyogT1MyICovCi0KLS8qICBD IFcgRCAgLS0gIENoYW5nZSBzZXJ2ZXIncyB3b3JraW5nIGRpcmVjdG9yeSAgKi8KLQotLyoKLSBT dHJpbmcgcGFzc2VkIGhhcyBmaXJzdCBieXRlIGFzIGxlbmd0aCBvZiBkaXJlY3RvcnkgbmFtZSwg cmVzdCBvZiBzdHJpbmcKLSBpcyBuYW1lLiAgUmV0dXJuczoKLSAgMCBvbiBmYWlsdXJlLgotICAx IG9uIHN1Y2Nlc3MgYWZ0ZXIgc2VuZGluZyBzaG9ydC1mb3JtIHJlc3BvbnNlIChBQ0sgd2l0aCBu YW1lKS4KLSAgMiBvbiBzdWNjZXNzIGlmIGEgQ0QgTWVzc2FnZSBmaWxlIGlzIHRvIGJlIHNlbnQu Ci0qLwotaW50Ci1jd2QodmRpcikgY2hhciAqdmRpcjsgewotICAgIGNoYXIgKmNkZCwgKmRpcnA7 Ci0KLSAgICB2ZGlyW3h1bmNoYXIoKnZkaXIpICsgMV0gPSAnXDAnOwkvKiBUZXJtaW5hdGUgc3Ry aW5nIHdpdGggYSBudWxsICovCi0gICAgZGlycCA9IHZkaXIrMTsKLSAgICB0bG9nKEYxMTAsIkRp cmVjdG9yeSByZXF1ZXN0ZWQ6ICIsZGlycCwwTCk7Ci0gICAgaWYgKHpjaGRpcihkaXJwKSkgewkJ CS8qIFRyeSB0byBjaGFuZ2UgKi8KLQljZGQgPSB6Z3RkaXIoKTsJCQkvKiBHZXQgbmV3IHdvcmtp bmcgZGlyZWN0b3J5LiAqLwotCWRlYnVnKEYxMTAsImN3ZCIsY2RkLDApOwotCWlmIChzcnZjZG1z ZykgewkJCS8qIFNlbmQgb3JpZW50YXRpb24gZmlsZT8gKi8KLQkgICAgaW50IGk7Ci0JICAgIGZv ciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJaWYgKHpjaGtpKGNkbXNnZmlsZVtpXSkgPiAtMSkg ewotCQkgICAgeHhzY3JlZW4oU0NSX0NELDAsMGwsY2RkKTsKLQkJICAgIHRsb2coRjExMCwiQ2hh bmdlZCBkaXJlY3RvcnkgdG8iLGNkZCwwTCk7Ci0JCSAgICByZXR1cm4oMik7Ci0JCX0KLQkgICAg fQotCX0KLQllbmNzdHIoKENIQVIgKiljZGQpOwkJLyogU2VuZCBzaG9ydC1mb3JtIHJlcGx5ICov Ci0JYWNrMShkYXRhKTsJCQkvKiBjb250YWluaW5nIGRpcmVjdG9yeSBuYW1lLiAqLwotCXh4c2Ny ZWVuKFNDUl9DRCwwLDBsLGNkZCk7Ci0JdGxvZyhGMTEwLCJDaGFuZ2VkIGRpcmVjdG9yeSB0byIs Y2RkLDBMKTsKLQlyZXR1cm4oMSk7Ci0gICAgfSBlbHNlIHsKLQlkZWJ1ZyhGMTEwLCJjd2QgZmFp bGVkIixkaXJwLDApOwotCXRsb2coRjExMCwiRmFpbGVkIHRvIGNoYW5nZSBkaXJlY3RvcnkgdG8i LGRpcnAsMEwpOwotCXJldHVybigwKTsKLSAgICB9Ci19Ci0KLQotLyogIFMgWSBTIEMgTSBEICAt LSAgRG8gYSBzeXN0ZW0gY29tbWFuZCAgKi8KLQotLyogIENvbW1hbmQgc3RyaW5nIGlzIGZvcm1l ZCBieSBjb25jYXRlbmF0aW5nIHRoZSB0d28gYXJndW1lbnRzLiAgKi8KLQotaW50Ci1zeXNjbWQo cHJlZml4LHN1ZmZpeCkgY2hhciAqcHJlZml4LCAqc3VmZml4OyB7Ci0gICAgZXh0ZXJuIGludCBp X2lzb3BlbjsKLSNpZm5kZWYgTk9QVVNICi0gICAgY2hhciAqY3A7Ci0KLSAgICBpX2lzb3BlbiA9 IDA7Ci0gICAgaWYgKCFwcmVmaXgpCi0gICAgICByZXR1cm4oMCk7Ci0gICAgaWYgKCEqcHJlZml4 KQotICAgICAgcmV0dXJuKDApOwotICAgIGZvciAoY3AgPSBjbWRzdHI7ICpwcmVmaXggIT0gJ1ww JzsgKCpjcCsrID0gKnByZWZpeCsrKSk7Ci0gICAgd2hpbGUgKCgqY3ArKyA9ICpzdWZmaXgrKykp Ci0jaWZkZWYgT1MyCi0gICAgICAgIC8qIFRoaXMgdGFrZXMgYXdheSBtb3JlIHRoYW4gd2UgZ2Fp biBpbiBjb252ZW5pZW5jZQotICAgICAgICBpZiAoKihjcC0xKSA9PSAnLycpICooY3AtMSkgPSAn XFwnICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgICA7CQkJCQkvKiBDb3B5IHN1ZmZpeCAqLwot Ci0gICAgZGVidWcoRjExMCwic3lzY21kIixjbWRzdHIsMCk7Ci0KLSAgICBpZiAoenhjbWQoWklG SUxFLGNtZHN0cikgPiAwKSB7Ci0gICAgCWRlYnVnKEYxMTAsInN5c2NtZCB6eGNtZCBvayIsY21k c3RyLDApOwotCW5maWxzID0gc25kc3JjID0gMDsJCS8qIEZsYWcgdGhhdCBpbnB1dCBpcyBmcm9t IHN0ZGluICovCi0gICAgCXhmbGcgPSBoY2ZsZyA9IDE7CQkvKiBBbmQgc3BlY2lhbCBmbGFncyBm b3IgcGlwZSAqLwotCWJpbmFyeSA9IFhZRlRfVDsJCS8qIEdvIHRvIHRleHQgbW9kZSAqLwotCWlf aXNvcGVuID0gMTsKLSAgICAJcmV0dXJuIChzaW5pdCgpKTsJCS8qIFNlbmQgUyBwYWNrZXQgKi8K LSAgICB9IGVsc2UgewotICAgIAlkZWJ1ZyhGMTAwLCJzeXNjbWQgenhjbWQgZmFpbGVkIixjbWRz dHIsMCk7Ci0JaV9pc29wZW4gPSAwOwotICAgIAlyZXR1cm4oMCk7Ci0gICAgfQotI2Vsc2UKLSAg ICBkZWJ1ZyhGMTAwLCJzeXNjbWQgenhjbWQgTk9QVVNIIixjbWRzdHIsMCk7Ci0gICAgaV9pc29w ZW4gPSAwOwotICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBOT1BVU0ggKi8KLX0KLQotLyogIFIg RSBNIFMgRSBUICAtLSAgUmVtb3RlIFNldCAgKi8KLS8qICBDYWxsZWQgYnkgc2VydmVyIHRvIHNl dCB2YXJpYWJsZXMgYXMgY29tbWFuZGVkIGluIFJFTU9URSBTRVQgcGFja2V0cy4gICovCi0vKiAg UmV0dXJucyAxIG9uIHN1Y2Nlc3MsIDAgb24gZmFpbHVyZS4gICovCi0KLWludAotcmVtc2V0KHMp IGNoYXIgKnM7IHsKLSAgICBleHRlcm4gaW50IGNfc2F2ZSwgZW5fZGVsOwotICAgIGludCBsZW4s IGksIHgsIHk7Ci0gICAgY2hhciAqcDsKLQotICAgIGxlbiA9IHh1bmNoYXIoKnMrKyk7CQkvKiBM ZW5ndGggb2YgZmlyc3QgZmllbGQgKi8KLSAgICBwID0gcyArIGxlbjsJCQkvKiBQb2ludGVyIHRv IHNlY29uZCBsZW5ndGggZmllbGQgKi8KLSAgICAqcCsrID0gJ1wwJzsJCQkvKiBaZXJvIG91dCBz ZWNvbmQgbGVuZ3RoIGZpZWxkICovCi0gICAgeCA9IGF0b2kocyk7CQkJLyogVmFsdWUgb2YgZmly c3QgZmllbGQgKi8KLSAgICBkZWJ1ZyhGMTExLCJyZW1zZXQiLHMseCk7Ci0gICAgZGVidWcoRjEx MCwicmVtc2V0IixwLDApOwotICAgIHN3aXRjaCAoeCkgewkJCS8qIERvIHRoZSByaWdodCB0aGlu ZyAqLwotICAgICAgY2FzZSAxMzI6CQkJCS8qIEF0dHJpYnV0ZXMgKGFsbCwgaW4pICovCi0JYXRj YXByID0gYXRvaShwKTsKLQlyZXR1cm4oMSk7Ci0gICAgICBjYXNlIDEzMzoJCQkJLyogRmlsZSBs ZW5ndGggYXR0cmlidXRlcyAqLwotICAgICAgY2FzZSAyMzM6CQkJCS8qIElOL09VVCBjb21iaW5l ZCAqLwotICAgICAgY2FzZSAxNDg6CQkJCS8qIEJvdGgga2luZHMgb2YgbGVuZ3RocyAqLwotICAg ICAgY2FzZSAyNDg6Ci0JYXRsZW5pID0gYXRsZW5vID0gYXRvaShwKTsKLQlyZXR1cm4oMSk7Ci0g ICAgICBjYXNlIDEzNDoJCQkJLyogRmlsZSBUeXBlICh0ZXh0L2JpbmFyeSkgKi8KLSAgICAgIGNh c2UgMjM0OgotCWF0dHlwaSA9IGF0dHlwbyA9IGF0b2kocCk7Ci0JcmV0dXJuKDEpOwotICAgICAg Y2FzZSAxMzU6CQkJCS8qIEZpbGUgY3JlYXRpb24gZGF0ZSAqLwotICAgICAgY2FzZSAyMzU6Ci0J YXRkYXRpID0gYXRkYXRvID0gYXRvaShwKTsKLQlyZXR1cm4oMSk7Ci0gICAgICBjYXNlIDEzOToJ CQkJLyogRmlsZSBCbG9ja3NpemUgKi8KLSAgICAgIGNhc2UgMjM5OgotCWF0YmxraSA9IGF0Ymxr byA9IGF0b2kocCk7Ci0JcmV0dXJuKDEpOwotICAgICAgY2FzZSAxNDE6CQkJCS8qIEVuY29kaW5n IC8gQ2hhcmFjdGVyIFNldCAqLwotICAgICAgY2FzZSAyNDE6Ci0JYXRlbmNpID0gYXRlbmNvID0g YXRvaShwKTsKLQlyZXR1cm4oMSk7Ci0gICAgICBjYXNlIDE0MjoJCQkJLyogRGlzcG9zaXRpb24g Ki8KLSAgICAgIGNhc2UgMjQyOgotCWF0ZGlzaSA9IGF0ZGlzbyA9IGF0b2kocCk7Ci0JcmV0dXJu KDEpOwotICAgICAgY2FzZSAxNDU6CQkJCS8qIFN5c3RlbSBJRCAqLwotICAgICAgY2FzZSAyNDU6 Ci0JYXRzaWRpID0gYXRzaWRvID0gYXRvaShwKTsKLQlyZXR1cm4oMSk7Ci0gICAgICBjYXNlIDE0 NzoJCQkJLyogU3lzdGVtLURlcGVuZGVudCBJbmZvICovCi0gICAgICBjYXNlIDI0NzoKLQlhdHN5 c2kgPSBhdHN5c28gPSBhdG9pKHApOwotCXJldHVybigxKTsKLSAgICAgIGNhc2UgMjMyOgkJCQkv KiBBdHRyaWJ1dGVzIChhbGwsIG91dCkgKi8KLQlhdGNhcHIgPSBhdG9pKHApOwotCXJldHVybigx KTsKLSAgICAgIGNhc2UgMzAwOgkJCQkvKiBGaWxlIHR5cGUgKHRleHQsIGJpbmFyeSkgKi8KLQli aW5hcnkgPSBhdG9pKHApOwotCWJfc2F2ZSA9IGJpbmFyeTsKLSNpZm5kZWYgTk9JQ1AKLQlnX2Jp bmFyeSA9IC0xOwotI2VuZGlmIC8qIE5PSUNQICovCi0JcmV0dXJuKDEpOwotICAgICAgY2FzZSAz MDE6CQkJCS8qIEZpbGUgbmFtZSBjb252ZXJzaW9uICovCi0JZm5jbnYgPSAxIC0gYXRvaShwKTsJ CS8qIChvb3BzKSAqLwotCWZfc2F2ZSA9IGZuY252OwotI2lmbmRlZiBOT0lDUAotCWdfZm5jbnYg PSAtMTsKLSNlbmRpZiAvKiBOT0lDUCAqLwotCXJldHVybigxKTsKLSAgICAgIGNhc2UgMzAyOgkJ CQkvKiBGaWxlIG5hbWUgY29sbGlzaW9uICovCi0jaWZkZWYgSUtTRAotI2lmZGVmIENLX0xPR0lO Ci0JaWYgKGluc2VydmVyICYmIGlzZ3Vlc3QpCS8qIE1heSBub3QgYmUgY2hhbmdlZCBieSBndWVz dCAqLwotCSAgcmV0dXJuKDApOwotI2VuZGlmIC8qIENLX0xPR0lOICovCi0jZW5kaWYgLyogSUtT RCAqLwotCXggPSBhdG9pKHApOwotCWlmICghRU5BQkxFRChlbl9kZWwpICYmICh4ID09IFhZRlhf WCB8fCB4ID09IFhZRlhfVSkpCi0JICByZXR1cm4oMCk7Ci0JaWYgKHggPT0gWFlGWF9SKSBja3dh cm4gPSAxOwkvKiBSZW5hbWUgKi8KLQlpZiAoeCA9PSBYWUZYX1gpIGNrd2FybiA9IDA7CS8qIFJl cGxhY2UgKi8KLQlmbmNhY3QgPSB4OwotCXJldHVybigxKTsKLSAgICAgIGNhc2UgMzEwOgkJCQkv KiBJbmNvbXBsZXRlIEZpbGUgRGlzcG9zaXRpb24gKi8KLQlrZWVwID0gYXRvaShwKTsJCQkvKiBL ZWVwLCBEaXNjYXJkLCBBdXRvICovCi0JcmV0dXJuKDEpOwotICAgICAgY2FzZSAzMTE6CQkJCS8q IEJsb2Nrc2l6ZSAqLwotCWZibGtzaXogPSBhdG9pKHApOwotCXJldHVybigxKTsKLSAgICAgIGNh c2UgMzEyOgkJCQkvKiBSZWNvcmQgTGVuZ3RoICovCi0JZnJlY2wgPSBhdG9pKHApOwotCXJldHVy bigxKTsKLSAgICAgIGNhc2UgMzEzOgkJCQkvKiBSZWNvcmQgZm9ybWF0ICovCi0JZnJlY2ZtID0g YXRvaShwKTsKLQlyZXR1cm4oMSk7Ci0gICAgICBjYXNlIDMxNDoJCQkJLyogRmlsZSBvcmdhbml6 YXRpb24gKi8KLQlmb3JnID0gYXRvaShwKTsKLQlyZXR1cm4oMSk7Ci0gICAgICBjYXNlIDMxNToJ CQkJLyogRmlsZSBjYXJyaWFnZSBjb250cm9sICovCi0JZmNjdHJsID0gYXRvaShwKTsKLQlyZXR1 cm4oMSk7Ci0gICAgICBjYXNlIDMzMDoJCQkJLyogTWF0Y2ggZG90ZmlsZXMgKi8KLSNpZm5kZWYg Tk9JQ1AKLQlkaXJfZG90cyA9IC0xOwkJCS8qIFRoaXMgdW5kb2VzIERJUiAvRE9UIG9wdGlvbiAq LwotI2VuZGlmIC8qIE5PSUNQICovCi0JbWF0Y2hkb3QgPSBhdG9pKHApOwotCXJldHVybigxKTsK LSAgICAgIGNhc2UgMzMxOgkJCQkvKiBNYXRjaCBGSUZPcyAqLwotCW1hdGNoZmlmbyA9IGF0b2ko cCk7Ci0JcmV0dXJuKDEpOwotICAgICAgY2FzZSA0MDA6CQkJCS8qIEJsb2NrIGNoZWNrICovCi0J eSA9IGF0b2kocCk7Ci0JaWYgKHkgPCA1ICYmIHkgPiAwKSB7Ci0JICAgIGJjdHIgPSB5OwotCSAg ICBjX3NhdmUgPSAtMTsKLQkgICAgcmV0dXJuKDEpOwotCX0gZWxzZSBpZiAoKnAgPT0gJ0InKSB7 Ci0JICAgIGJjdHIgPSA0OwotCSAgICBjX3NhdmUgPSAtMTsKLQkgICAgcmV0dXJuKDEpOwotCX0g ZWxzZSBpZiAoKnAgPT0gJzUnKSB7Ci0JICAgIGJjdHIgPSAzOwotCSAgICBjX3NhdmUgPSAtMTsK LQkgICAgcmV0dXJuKDEpOwotCX0KLQlyZXR1cm4oMCk7Ci0gICAgICBjYXNlIDQwMToJCQkJLyog UmVjZWl2ZSBwYWNrZXQtbGVuZ3RoICovCi0JcnBzaXogPSB1cnBzaXogPSBhdG9pKHApOwotCWlm ICh1cnBzaXogPiBNQVhSUCkgdXJwc2l6ID0gTUFYUlA7IC8qIE1heCBsb25nLXBhY2tldCBsZW5n dGggKi8KLQlpZiAocnBzaXogPiA5NCkgcnBzaXogPSA5NDsJICAgIC8qIE1heCBzaG9ydC1wYWNr ZXQgbGVuZ3RoICovCi0JdXJwc2l6ID0gYWRqcGtsKHVycHNpeix3c2xvdHMsYmlncmJzaXopOwot CXJldHVybigxKTsKLSAgICAgIGNhc2UgNDAyOgkJCQkvKiBSZWNlaXZlIHRpbWVvdXQgKi8KLQl5 ID0gYXRvaShwKTsJCQkvKiBDbGllbnQgaXMgdGVsbGluZyB1cyAqLwotCWlmICh5ID4gLTEgJiYg eSA8IDk5OSkgewkvKiB0aGUgdGltZW91dCB0aGF0IGl0IHdhbnRzICovCi0JICAgIHBrdHRpbSA9 IGNoa3RpbW8oeSx0aW1lZik7CS8qIHVzIHRvIHRlbGwgaXQgdG8gdXNlLiAqLwotCSAgICByZXR1 cm4oMSk7Ci0JfSBlbHNlIHJldHVybigwKTsKLSAgICAgIGNhc2UgNDAzOgkJCQkvKiBSZXRyeSBs aW1pdCAqLwotCXkgPSBhdG9pKHApOwotCWlmICh5ID4gLTEgJiYgeSA8IDk1KSB7Ci0JICAgIG1h eHRyeSA9IHk7Ci0JICAgIHJldHVybigxKTsKLQl9IGVsc2UgcmV0dXJuKDApOwotICAgICAgY2Fz ZSA0MDQ6CQkJCS8qIFNlcnZlciB0aW1lb3V0ICovCi0JeSA9IGF0b2kocCk7Ci0JaWYgKHkgPCAw KSByZXR1cm4oMCk7Ci0Jc3J2dGltID0geTsKLQlyZXR1cm4oMSk7Ci0KLSNpZm5kZWYgTk9DU0VU UwotICAgICAgY2FzZSA0MDU6IHsJCQkJLyogVHJhbnNmZXIgY2hhcmFjdGVyIHNldCAqLwotCSAg ZXh0ZXJuIGludCBzX2NzZXQsIGF4Y3NldFtdOwotCSAgaW50IGk7Ci0JICBmb3IgKGkgPSAwOyBp IDwgbnRjc2V0czsgaSsrKSB7Ci0JICAgICAgaWYgKCFzdHJjbXAodGNzaW5mb1tpXS5kZXNpZ25h dG9yLHApKSBicmVhazsKLQkgIH0KLQkgIGRlYnVnKEYxMDEsInJlbXNldCB0Y2hhcnNldCBsb29r dXAiLCIiLGkpOwotCSAgaWYgKGkgPT0gbnRjc2V0cykgcmV0dXJuKDApOwotCSAgdGNoYXJzZXQg PSB0Y3NpbmZvW2ldLmNvZGU7CS8qIElmIGtub3duLCB1c2UgaXQgKi8KLQkgIGRlYnVnKEYxMDEs InJlbXNldCB0Y2hhcnNldCIsIiIsdGNoYXJzZXQpOwotCSAgaWYgKHNfY3NldCA9PSBYTU9ERV9B KQotCSAgICBpZiAoYXhjc2V0W3RjaGFyc2V0XSA+IC0xICYmIGF4Y3NldFt0Y2hhcnNldF0gPiBN QVhGQ1NFVFMpCi0JICAgICAgZmNoYXJzZXQgPSBheGNzZXRbdGNoYXJzZXRdOyAvKiBBdXRvLXBp Y2sgZmlsZSBjaGFyc2V0ICovCi0JICBkZWJ1ZyhGMTAxLCJyZW1zZXQgdGNoYXJzZXQgZmNoYXJz ZXQiLCIiLGZjaGFyc2V0KTsKLQkgIHNldHhsYXR5cGUodGNoYXJzZXQsZmNoYXJzZXQpOyAvKiBT ZXQgdXAgY2hhcnNldCB0cmFuc2xhdGlvbnMgKi8KLQkgIGRlYnVnKEYxMDEsInJlbXNldCB4bGF0 eXBlIiwiIix4bGF0eXBlKTsKLQkgIGRlYnVnKEYxMDEsInJlbXNldCB0Y2hhcnNldCBhZnRlciBz ZXR4bGF0eXBlIiwiIix0Y2hhcnNldCk7Ci0JICB0Y3Nfc2F2ZSA9IC0xOwotCSAgcmV0dXJuKDEp OwotICAgICAgfQotICAgICAgY2FzZSAzMjA6IHsJCQkvKiBGaWxlIGNoYXJhY3RlciBzZXQgKi8K LQkgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiIGZjc3RhYltdOwotCSAgZXh0ZXJuIGludCBuZmlsYywg c19jc2V0LCByX2NzZXQ7Ci0JICB4ID0gbG9va3VwKGZjc3RhYixwLG5maWxjLCZ5KTsKLQkgIGRl YnVnKEYxMTEsIlJTRVQgRklMRSBDSEFSIG5hbWUiLHAseCk7Ci0JICBpZiAoeCA8IDApCi0JICAg IHJldHVybigwKTsKLQkgIHNfY3NldCA9IFhNT0RFX007CQkvKiBObyBhdXRvbWF0aWMgY2hhcnNl dCBzd2l0Y2hpbmcgKi8KLQkgIHJfY3NldCA9IFhNT0RFX007Ci0JICBmY2hhcnNldCA9IHg7CQkJ LyogU2V0IGZpbGUgY2hhcnNldCAqLwotCSAgc2V0eGxhdHlwZSh0Y2hhcnNldCxmY2hhcnNldCk7 IC8qIGFuZCB0cmFuc2xhdGlvbiB0eXBlICovCi0JICBmY3Nfc2F2ZSA9IC0xOwotCSAgcmV0dXJu KDEpOwotICAgICAgfQotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQotICAgICAgY2FzZSA0MDY6CQkJ CS8qIFdpbmRvdyBzbG90cyAqLwotCXkgPSBhdG9pKHApOwotCWlmICh5ID09IDApIHkgPSAxOwot CWlmICh5IDwgMSB8fCB5ID4gTUFYV1MpIHJldHVybigwKTsKLQl3c2xvdHIgPSB5OwotCXN3Y2Fw ciA9IDE7Ci0JdXJwc2l6ID0gYWRqcGtsKHVycHNpeix3c2xvdHIsYmlncmJzaXopOwotCXJldHVy bigxKTsKLQotICAgICAgY2FzZSA0MTA6CQkJCS8qIFRyYW5zZmVyIG1vZGUgKi8KLQl5ID0gYXRv aShwKTsJCQkvKiAwID0gYXV0b21hdGljLCBub256ZXJvID0gbWFudWFsICovCi0JaWYgKHkgIT0g MCkgeSA9IDE7Ci0JeGZlcm1vZGUgPSB5OwotCWRlYnVnKEYxMDEsIlJFTU9URSBTRVQgeGZlcm1v ZGUiLCIiLHhmZXJtb2RlKTsKLQlyZXR1cm4oMSk7Ci0KLSAgICAgIGNhc2UgNDIwOgkJCQkvKiBT RVJWRVIgQ0QtTUVTU0FHRSB7IE9OLCBPRkYgfSAqLwotCXkgPSBhdG9pKHApOwkJCS8qIDAgPSBh dXRvbWF0aWMsIG5vbnplcm8gPSBtYW51YWwgKi8KLQlzcnZjZG1zZyA9IHk7Ci0JcmV0dXJuKDEp OwotCi0gICAgICBkZWZhdWx0OgkJCQkvKiBBbnl0aGluZyBlbHNlLi4uICovCi0JcmV0dXJuKDAp OwotICAgIH0KLX0KLQotLyogQWRqdXN0IHBhY2tldCBsZW5ndGggYmFzZWQgb24gbnVtYmVyIG9m IHdpbmRvdyBzbG90cyBhbmQgYnVmZmVyIHNpemUgKi8KLQotaW50Ci1hZGpwa2wocGt0bGVuLHNs b3RzLGJ1ZnNpeikgaW50IHBrdGxlbiwgc2xvdHMsIGJ1ZnNpejsgewotICAgIGlmIChwcm90b2Nv bCAhPSBQUk9UT19LKSByZXR1cm4ocGt0bGVuKTsKLSAgICBkZWJ1ZyhGMTAxLCJhZGpwa2wgbGVu IiwiIixwa3RsZW4pOwotICAgIGRlYnVnKEYxMDEsImFkanBrbCBzbG90cyIsIiIsc2xvdHMpOwot ICAgIGRlYnVnKEYxMDEsImFkanBrbCBidWZzaXoiLCIiLGJ1ZnNpeik7Ci0gICAgaWYgKCgocGt0 bGVuICsgNikgKiBzbG90cykgPiBidWZzaXopCi0gICAgICBwa3RsZW4gPSAoYnVmc2l6IC8gc2xv dHMpIC0gNjsKLSAgICBkZWJ1ZyhGMTAxLCJhZGpwa2wgbmV3IGxlbiIsIiIscGt0bGVuKTsKLSAg ICByZXR1cm4ocGt0bGVuKTsKLX0KLQotLyogU2V0IHRyYW5zZmVyIG1vZGUgYW5kIGZpbGUgbmFt aW5nIGJhc2VkIG9uIGNvbXBhcmlzb24gb2Ygc3lzdGVtIHR5cGVzICovCi0KLQotVk9JRAotd2hv YXJld2UoKSB7Ci0jaWZuZGVmIE5PSUNQCi0gICAgZXh0ZXJuIGludCBnX3hmZXJtb2RlOwotI2Vu ZGlmIC8qIE5PSUNQICovCi0KLSAgICB3ZWFyZWFsaWtlID0gMDsKLQotICAgIGRlYnVnKEYxMDEs Indob2FyZXdlIHhmZXJtb2RlIiwiIix4ZmVybW9kZSk7Ci0jaWZuZGVmIE5PSUNQCi0gICAgZGVi dWcoRjEwMSwid2hvYXJld2UgZ194ZmVybW9kZSIsIiIsZ194ZmVybW9kZSk7Ci0jZW5kaWYgLyog Tk9JQ1AgKi8KLSAgICBpZiAod2hvYXJldVswXSkgewkJCS8qIElmIHdlIGtub3cgcGFydG5lcidz IHN5c3RlbSB0eXBlICovCi0JY2hhciAqIHAgPSAoY2hhciAqKXdob2FyZXU7Ci0JZGVidWcoRjEx MCwid2hvYXJld2UgcmVtb3RlIHN5c2lkIix3aG9hcmV1LDApOwotCWlmICghc3RyY21wKHAsY2tz eXNpZCkpCQkvKiBPdGhlciBzeXN0ZW0gc2FtZSBhcyB1cyAqLwotCSAgd2VhcmVhbGlrZSA9IDE7 Ci0KLSNpZmRlZiBVTklYCi0JZWxzZSBpZiAoIXN0cmNtcChwLCJMMyIpKQkvKiBVTklYIGlzIHNv cnQgb2YgbGlrZSBBbWlnYURPUyAqLwotCSAgd2VhcmVhbGlrZSA9IDE7CQkvKiAoc2FtZSBkaXJl Y3Rvcnkgc2VwYXJhdG9yKSAqLwotCWVsc2UgaWYgKCFzdHJjbXAocCwiTjMiKSkJLyogVU5JWCBs aWtlIEFlZ2lzICovCi0JICB3ZWFyZWFsaWtlID0gMTsKLSNlbHNlCi0jaWZkZWYgQU1JR0EKLS8q IExpa2UgVU5JWCwgYnV0IGNhc2UgZGlzdGluY3Rpb25zIGFyZSBpZ25vcmVkIGFuZCBjYW4gYmVn aW4gd2l0aCBkZXZpY2U6LiAqLwotCWVsc2UgaWYgKCFzdHJjbXAocCwiVTEiKSkJLyogQW1pZ2Eg aXMgc29ydCBvZiBsaWtlIFVOSVggKi8KLQkgIHdlYXJlYWxpa2UgPSAxOwotCWVsc2UgaWYgKCFz dHJjbXAocCwiTjMiKSkJLyogQW1pZ2EgaXMgc29ydCBvZiBsaWtlIEFlZ2lzICovCi0JICB3ZWFy ZWFsaWtlID0gMTsKLSNlbHNlCi0jaWZkZWYgT1MyCQkJCS8qIChJbmNsdWRlcyBXaW5kb3dzIDk1 L05UKSAqLwotCi0JLyogRE9TLCBHRU1ET1MsIFdpbmRvd3MgMy54LCBXaW5kb3dzIDk1LCBXaW5k b3dzIE5UICovCi0JLyogQWxsICJ0aGUgc2FtZSIgZm9yIEZBVCBwYXJ0aXRpb25zIGJ1dCBhbGwg YmV0cyBvZmYgb3RoZXJ3aXNlICovCi0JLyogc28gdGhpcyBwYXJ0IG5lZWRzIHNvbWUgcmVmaW5l bWVudCAuLi4gICovCi0KLQllbHNlIGlmICghc3RyY21wKHAsIlU4IikpCS8qIE1TLURPUyAqLwot CSAgd2VhcmVhbGlrZSA9IDE7Ci0JZWxzZSBpZiAoIXN0cmNtcChwLCJVTyIpKQkvKiBPUy8yICov Ci0JICB3ZWFyZWFsaWtlID0gMTsKLQllbHNlIGlmICghc3RyY21wKHAsIlVOIikpCS8qIFdpbmRv d3MgTlQgb3IgOTUgKi8KLQkgIHdlYXJlYWxpa2UgPSAxOwotCWVsc2UgaWYgKCFzdHJjbXAocCwi SzIiKSkJLyogR0VNRE9TICovCi0JICB3ZWFyZWFsaWtlID0gMTsKLSNlbHNlCi0jaWZkZWYgR0VN RE9TCi0JZWxzZSBpZiAoIXN0cmNtcChwLCJVOCIpKQotCSAgd2VhcmVhbGlrZSA9IDE7Ci0JZWxz ZSBpZiAoIXN0cmNtcChwLCJVTyIpKQotCSAgd2VhcmVhbGlrZSA9IDE7Ci0JZWxzZSBpZiAoIXN0 cmNtcChwLCJVTiIpKQotCSAgd2VhcmVhbGlrZSA9IDE7Ci0JZWxzZSBpZiAoIXN0cmNtcChwLCJL MiIpKQotCSAgd2VhcmVhbGlrZSA9IDE7Ci0jZW5kaWYgLyogR0VNRE9TICovCi0jZW5kaWYgLyog T1MyICovCi0jZW5kaWYgLyogQU1JR0EgKi8KLSNlbmRpZiAvKiBVTklYICovCi0KLQkvKiBHZXQg aGVyZSB3aXRoIHdlYXJlYWxpa2UgPT0gMSBpZiBzeXN0ZW0gdHlwZXMgbWF0Y2ggKi8KLQotCWRl YnVnKEYxMDEsIndob2FyZXdlIHdlYXJlYWxpa2UiLCIiLHdlYXJlYWxpa2UpOwotCWlmICghd2Vh cmVhbGlrZSkJCS8qIE5vdCBhbGlrZSAqLwotCSAgcmV0dXJuOwotCi0JZm5jbnYgPSBYWUZOX0w7 CQkJLyogQWxpa2UsIHNvIGxpdGVyYWwgZmlsZW5hbWVzICovCi0JZGVidWcoRjEwMSwid2hvYXJl d2Ugc2V0dGluZyBmbmNudiIsIiIsZm5jbnYpOwotCi0JaWYgKHhmZXJtb2RlID09IFhNT0RFX0Ep IHsJLyogQ3VycmVudCB4ZmVyIG1vZGUgaXMgYXV0byAqLwotI2lmZGVmIFZNUwotCSAgICBiaW5h cnkgPSBYWUZUX0w7CQkvKiBGb3IgVk1TLXRvLVZNUywgdXNlIGxhYmVsZWQgKi8KLSNlbHNlCi0j aWZkZWYgT1MyCi0JICAgIC8qIE9TLzIgYnV0IG5vdCBXaW5kb3dzICovCi0JICAgIGlmICghc3Ry Y21wKGNrc3lzaWQsIlVPIikgJiYgIXN0cmNtcCgoY2hhciAqKXdob2FyZXUsIlVPIikpCi0JICAg ICAgYmluYXJ5ID0gWFlGVF9MOwkJLyogRm9yIE9TLzItdG8tT1MvMiwgdXNlIGxhYmVsZWQgKi8K LSNlbHNlCi0JICAgIGJpbmFyeSA9IFhZRlRfQjsJCS8qIEZvciBhbGwgb3RoZXJzIHVzZSBiaW5h cnkgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQkgICAgZ25mX2JpbmFy eSA9IGJpbmFyeTsJLyogUHJldmFpbGluZyB0eXBlIGZvciBnbmZpbGUoKSAqLwotCSAgICBkZWJ1 ZyhGMTAxLCJ3aG9hcmV3ZSBzZXR0aW5nIGJpbmFyeSIsIiIsYmluYXJ5KTsKLQl9Ci0gICAgfQot fQotI2VuZGlmIC8qIE5PWEZFUiAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWls ZC9ja2VybWl0LTkuMC4zMDIvY2tjZnRwLmMgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1p dC05LjAuMzAyL2NrY2Z0cC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmM3OTQw Li4wMDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tj ZnRwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzY1NCArMCwwIEBACi0jZGVmaW5lIEZUUF9USU1F T1VUCi0KLS8qICBDIEsgQyBGIFQgUCAgLS0gIEZUUCBDbGllbnQgZm9yIEMtS2VybWl0ICAqLwot Ci1jaGFyICpja2Z0cHYgPSAiRlRQIENsaWVudCwgOS4wLjI2MCwgMTQgSnVsIDIwMTEiOwotCi0v KgotICBBdXRob3JzOgotICAgIEplZmZyZXkgRSBBbHRtYW4gPGphbHRtYW5Ac2VjdXJlLWVuZHBv aW50cy5jb20+Ci0gICAgICBTZWN1cmUgRW5kcG9pbnRzIEluYy4sIE5ldyBZb3JrIENpdHkKLSAg ICBGcmFuayBkYSBDcnV6IDxmZGNAY29sdW1iaWEuZWR1PiwKLSAgICAgIFRoZSBLZXJtaXQgUHJv amVjdCwgQ29sdW1iaWEgVW5pdmVyc2l0eS4KLQotICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMTEs Ci0gICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcg WW9yay4KLSAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5H LlRYVCBmaWxlIG9yIHRoZQotICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1 bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgotCi0gIFBvcnRpb25zIG9mIGNvbmRp dGlvbmFsbHkgaW5jbHVkZWQgY29kZSBDb3B5cmlnaHQgUmVnZW50cyBvZiB0aGUKLSAgICBVbml2 ZXJzaXR5IG9mIENhbGlmb3JuaWEgYW5kIFRoZSBTdGFuZm9yZCBTUlAgQXV0aGVudGljYXRpb24g UHJvamVjdDsKLSAgICBzZWUgbm90aWNlcyBiZWxvdy4KLSovCi0KLS8qCi0gIFBlbmRpbmcuLi4K LQotICAuIEltcGxlbWVudCByZWN1cnNpdmUgTkxTVCBkb3dubG9hZHMgYnkgdHJ5aW5nIHRvIENE IHRvIGVhY2ggZmlsZW5hbWUuCi0gICAgSWYgaXQgd29ya3MsIGl0J3MgYSBkaXJlY3Rvcnk7IGlm IG5vdCwgaXQncyBhIGZpbGUgLS0gR0VUIGl0LiAgQnV0Ci0gICAgdGhhdCB3b24ndCB3b3JrIHdp dGggc2VydmVycyBsaWtlIHd1LWZ0cGQgdGhhdCBkb24ndCBzZW5kIGRpcmVjdG9yeSAKLSAgICBu YW1lcy4gIFJlY3Vyc2lvbiB3aXRoIE1MU0QgaXMgZG9uZS4KLQotICAuIE1ha2Ugc3lzbG9nIGVu dHJpZXMgZm9yIHNlc3Npb24/ICBGaWxlcz8KLQotICAuIE1lc3NhZ2VzIGFyZSBwcmludGVkIHRv IHN0ZG91dCBhbmQgc3RkZXJyIGluIHJhbmRvbSBmYXNoaW9uLiAgV2Ugc2hvdWxkCi0gICAgZWl0 aGVyIHByaW50IGV2ZXJ5dGhpbmcgdG8gc3Rkb3V0LCBvciBlbHNlIGJlIHN5c3RlbWF0aWMgYWJv dXQgd2hlbgotICAgIHRvIHVzZSBzdGRlcnIuCi0KLSAgLiBJbXBsZW1lbnQgbWFpbCAoTUFJTCwg TUxGTCwgTVNPTSwgZXRjKSBpZiBhbnkgc2VydmVycyBzdXBwb3J0IGl0LgotCi0gIC4gQWRhcHQg dG8gVk1TLiAgQmlnIGpvYiBiZWNhdXNlIG9mIGl0cyByZWNvcmQtb3JpZW50ZWQgZmlsZSBzeXN0 ZW0uCi0gICAgUk1TIHByb2dyYW1tZXIgcmVxdWlyZWQuICBUaGVyZSBhcmUgcHJvYmFibHkgYWxz byBzb21lIFZNUyBUQ1AvSVAKLSAgICBwcm9kdWN0LXNwZWNpZmljIHdyaW5rbGVzLCBlLmcuIGF0 dHJpYnV0ZSBwcmVzZXJ2YXRpb24gaW4gVk1TLXRvLVZNUwotICAgIHRyYW5zZmVycyB1c2luZyBz cGVjaWFsIG9wdGlvbnMgZm9yIE11bHRpbmV0IG9yIG90aGVyIEZUUCBzZXJ2ZXJzCi0gICAgKGZp bmQgb3V0IGFib3V0IFNUUlUgVk1TKS4KLSovCi0KLS8qCi0gIFF1aWNrIEZUUCBjb21tYW5kIHJl ZmVyZW5jZToKLQotICBSRkM3NjUgKDE5ODApIGFuZCBlYXJsaWVyOgotICAgIE1PREUgIFModHJl YW0pLCBCKGxvY2spLCBDKG9tcHJlc3NlZCkKLSAgICBTVFJVICBGKElMRSksIFIoRUNPUkQpLCBQ KEFHRSkKLSAgICBUWVBFICBBKFNDSUkpIDxmb3JtYXQ+LCAgRShCQ0RJQykgPGZvcm1hdD4sIEko TUFHRSksIEwoT0NBTCkgPGJ5dGVzaXplPgotICAgIFBPUlQgIC0gUG9ydAotICAgIFBBU1YgIC0g UGFzc2l2ZSBtb2RlCi0gICAgVVNFUiAgLSBVc2VyCi0gICAgUEFTUyAgLSBQYXNzd29yZAotICAg IEFDQ1QgIC0gQWNjb3VudAotICAgIENXRCAgIC0gQ2hhbmdlIFdvcmtpbmcgRGlyZWN0b3J5Ci0g ICAgUkVJTiAgLSBMb2dvdXQgYnV0IG5vdCBkaXNjb25uZWN0Ci0gICAgUVVJVCAgLSBCeWUKLSAg ICBSRVRSICAtIFJldHJlaXZlCi0gICAgU1RPUiAgLSBTdG9yZQotICAgIEFQUEUgIC0gQXBwZW5k Ci0gICAgQUxMTyAgLSBBbGxvY2F0ZQotICAgIFJFU1QgIC0gUmVzdGFydAotICAgIFJORlIgIC0g UmVuYW1lIGZyb20KLSAgICBSTlRPICAtIFJlbmFtZSB0bwotICAgIEFCT1IgIC0gQ2FuY2VsCi0g ICAgREVMRSAgLSBEZWxldGUKLSAgICBMSVNUICAtIERpcmVjdG9yeQotICAgIE5MU1QgIC0gTmFt ZSBMaXN0Ci0gICAgU0lURSAgLSBTaXRlIHBhcmFtZXRlcnMgb3IgY29tbWFuZHMKLSAgICBTVEFU ICAtIFN0YXR1cwotICAgIEhFTFAgIC0gSGVscAotICAgIE5PT1AgIC0gTm9vcAotCi0gIFJGQzk1 OSAoMTk4NSk6Ci0gICAgQ0RVUCAgLSBDaGFuZ2UgdG8gUGFyZW50IERpcmVjdG9yeQotICAgIFNN TlQgIC0gU3RydWN0dXJlIE1vdW50Ci0gICAgU1RPVSAgLSBTdG9yZSBVbmlxdWUKLSAgICBSTUQg ICAtIFJlbW92ZSBEaXJlY3RvcnkKLSAgICBNS0QgICAtIE1ha2UgRGlyZWN0b3J5Ci0gICAgUFdE ICAgLSBQcmludCBEaXJlY3RvcnkKLSAgICBTWVNUICAtIFN5c3RlbQotCi0gIFJGQzIzODkgKDE5 OTgpOgotICAgIEZFQVQgIC0gTGlzdCBGZWF0dXJlcyAoZG9uZSkKLSAgICBPUFRTICAtIFNlbmQg b3B0aW9ucyAoZG9uZSkKLQotICBSRkMyNjQwICgxOTk5KToKLSAgICBMQU5HICAtIFNwZWNpZnkg bGFuZ3VhZ2UgZm9yIG1lc3NhZ2VzIChub3QgZG9uZSkKLQotICBQZW5kaW5nIChJbnRlcm5ldCBE cmFmdHMpOgotICAgIFNJWkUgIC0gRmlsZSBzaXplIChkb25lKQotICAgIE1EVE0gIC0gRmlsZSBt b2RpZmljYXRpb24gZGF0ZS10aW1lIChkb25lKQotICAgIE1MU1QgIC0gRmlsZSBuYW1lIGFuZCBh dHRyaWJ1dGUgbGlzdCAoc2luZ2xlIGZpbGUpIChub3QgZG9uZSkKLSAgICBNTFNEICAtIEZpbGUg bGlzdCB3aXRoIGF0dHJpYnV0ZXMgKG11bHRpcGxlIGZpbGVzKSAoZG9uZSkKLSAgICBNQUlMLCBN TEZMLCBNU09NIC0gbWFpbCBkZWxpdmVyeSAobm90IGRvbmUpCi0KLSAgQWxwaGFiZXRpY2FsIHN5 bnRheCBsaXN0OgotICAgIEFCT1IgPENSTEY+Ci0gICAgQUNDVCA8U1A+IDxhY2NvdW50LWluZm9y bWF0aW9uPiA8Q1JMRj4KLSAgICBBTExPIDxTUD4gPGRlY2ltYWwtaW50ZWdlcj4gWzxTUD4gUiA8 U1A+IDxkZWNpbWFsLWludGVnZXI+XSA8Q1JMRj4KLSAgICBBUFBFIDxTUD4gPHBhdGhuYW1lPiA8 Q1JMRj4KLSAgICBDRFVQIDxDUkxGPgotICAgIENXRCAgPFNQPiA8cGF0aG5hbWU+IDxDUkxGPgot ICAgIERFTEUgPFNQPiA8cGF0aG5hbWU+IDxDUkxGPgotICAgIEZFQVQgPENSTEY+Ci0gICAgSEVM UCBbPFNQPiA8c3RyaW5nPl0gPENSTEY+Ci0gICAgTEFORyBbPFNQPiA8bGFuZ3VhZ2UtdGFnPiBd IDxDUkxGPgotICAgIExJU1QgWzxTUD4gPHBhdGhuYW1lPl0gPENSTEY+Ci0gICAgTUtEICA8U1A+ IDxwYXRobmFtZT4gPENSTEY+Ci0gICAgTUxTRCBbPFNQPiA8cGF0aG5hbWU+XSA8Q1JMRj4KLSAg ICBNTFNUIFs8U1A+IDxwYXRobmFtZT5dIDxDUkxGPgotICAgIE1PREUgPFNQPiA8bW9kZS1jb2Rl PiA8Q1JMRj4KLSAgICBOTFNUIFs8U1A+IDxwYXRobmFtZS1vci13aWxkY2FyZD5dIDxDUkxGPgot ICAgIE5PT1AgPENSTEY+Ci0gICAgT1BUUyA8U1A+IDxjb21tYW5kbmFtZT4gWyA8U1A+IDxjb21t YW5kLW9wdGlvbnM+IF0gPENSTEY+Ci0gICAgUEFTUyA8U1A+IDxwYXNzd29yZD4gPENSTEY+Ci0g ICAgUEFTViA8Q1JMRj4KLSAgICBQT1JUIDxTUD4gPGhvc3QtcG9ydD4gPENSTEY+Ci0gICAgUFdE ICA8Q1JMRj4KLSAgICBRVUlUIDxDUkxGPgotICAgIFJFSU4gPENSTEY+Ci0gICAgUkVTVCA8U1A+ IDxtYXJrZXI+IDxDUkxGPgotICAgIFJFVFIgPFNQPiA8cGF0aG5hbWU+IDxDUkxGPgotICAgIFJN RCAgPFNQPiA8cGF0aG5hbWU+IDxDUkxGPgotICAgIFJORlIgPFNQPiA8cGF0aG5hbWU+IDxDUkxG PgotICAgIFJOVE8gPFNQPiA8cGF0aG5hbWU+IDxDUkxGPgotICAgIFNJVEUgPFNQPiA8c3RyaW5n PiA8Q1JMRj4KLSAgICBTSVpFIDxTUD4gPHBhdGhuYW1lPiA8Q1JMRj4KLSAgICBTTU5UIDxTUD4g PHBhdGhuYW1lPiA8Q1JMRj4KLSAgICBTVEFUIFs8U1A+IDxwYXRobmFtZT5dIDxDUkxGPgotICAg IFNUT1IgPFNQPiA8cGF0aG5hbWU+IDxDUkxGPgotICAgIFNUT1UgPENSTEY+Ci0gICAgU1RSVSA8 U1A+IDxzdHJ1Y3R1cmUtY29kZT4gPENSTEY+Ci0gICAgU1lTVCA8Q1JMRj4KLSAgICBUWVBFIDxT UD4gPHR5cGUtY29kZT4gPENSTEY+Ci0gICAgVVNFUiA8U1A+IDx1c2VybmFtZT4gPENSTEY+Ci0q LwotI2luY2x1ZGUgImNrY3N5bS5oIiAgICAgICAgICAgICAgICAgICAgIC8qIFN0YW5kYXJkIGlu Y2x1ZGVzICovCi0jaW5jbHVkZSAiY2tjZGViLmgiCi0KLSNpZm5kZWYgTk9GVFAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBOT0ZUUCAgPSBubyBGVFAgKi8KLSNpZm5kZWYgU1lTRlRQICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBTWVNGVFAgPSB1c2UgZXh0ZXJuYWwgZnRwIGNsaWVu dCAqLwotI2lmZGVmIFRDUFNPQ0tFVCAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJ1aWxkIG9u bHkgaWYgVENQL0lQIGluY2x1ZGVkICovCi0jZGVmaW5lIENLQ0ZUUF9DCi0KLS8qIE5vdGU6IG11 Y2ggb2YgdGhlIGZvbGxvd2luZyBkdXBsaWNhdGVzIHdoYXQgd2FzIGRvbmUgaW4gY2tjZGViLmgg Ki8KLS8qIGJ1dCBsZXQncyBub3QgbWVzcyB3aXRoIGl0IHVubGVzcyBpdCBjYXVzZXMgdHJvdWJs ZS4gKi8KLQotI2lmZGVmIENLX0FOU0lDCi0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jZWxzZSAvKiBD S19BTlNJQyAqLwotI2luY2x1ZGUgPHZhcmFyZ3MuaD4KLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot I2luY2x1ZGUgPHNpZ25hbC5oPgotI2lmZGVmIE9TMgotI2lmZGVmIE9TMk9OTFkKLSNpbmNsdWRl IDxvczIuaD4KLSNlbmRpZiAvKiBPUzJPTkxZICovCi0jaW5jbHVkZSAiY2tvd2luLmgiCi0jaW5j bHVkZSAiY2tvY29uLmgiCi0jZW5kaWYgLyogT1MyICovCi0jaWZuZGVmIFpJTE9HCi0jaWZkZWYg TlQKLSNpbmNsdWRlIDxzZXRqbXBleC5oPgotI2lmZGVmIE5UU0lHCi1leHRlcm4gaW50IFRsc0lu ZGV4OwotI2VuZGlmIC8qIE5UU0lHICovCi0jZWxzZSAvKiBOVCAqLwotI2luY2x1ZGUgPHNldGpt cC5oPgotI2VuZGlmIC8qIE5UICovCi0jZWxzZQotI2luY2x1ZGUgPHNldHJldC5oPgotI2VuZGlm IC8qIFpJTE9HICovCi0jaW5jbHVkZSAiY2tjc2lnLmgiCi0jaWZkZWYgVk1TCi0vKiAyMDEwLTAz LTA5IFNNUy4gIFZBWCBDIG5lZWRzIGhlbHAgdG8gZmluZCAic3lzIi4gIEl0J3MgZWFzaWVyIG5v dCB0byB0cnkuICovCi0jaW5jbHVkZSA8c3RhdC5oPgotI2Vsc2UgLyogZGVmIFZNUyAqLwotI2lu Y2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jZW5kaWYgLyogZGVmIFZNUyBbZWxzZV0gKi8KLSNpbmNsdWRl IDxjdHlwZS5oPgotCi0jaWZuZGVmIEhQVVhQUkU2NQotI2luY2x1ZGUgPGVycm5vLmg+CQkJLyog RXJyb3IgbnVtYmVyIHN5bWJvbHMgKi8KLSNlbHNlCi0jaWZuZGVmIEVSUk5PX0lOQ0xVREVECi0j aW5jbHVkZSA8ZXJybm8uaD4JCQkvKiBFcnJvciBudW1iZXIgc3ltYm9scyAqLwotI2VuZGlmCS8q IEVSUk5PX0lOQ0xVREVEICovCi0jZW5kaWYJLyogSFBVWFBSRTY1ICovCi0KLSNpZm5kZWYgTk9U SU1FSAotI2luY2x1ZGUgPHRpbWUuaD4KLSNlbmRpZiAvKiBOT1RJTUVIICovCi0jaWZuZGVmIEVQ SVBFCi0jZGVmaW5lIEVQSVBFIDMyICAgICAgICAgICAgICAgICAgICAgICAgLyogQnJva2VuIHBp cGUgZXJyb3IgKi8KLSNlbmRpZiAvKiBFUElQRSAqLwotCi0vKiBLZXJtaXQgaW5jbHVkZXMgKi8K LQotI2luY2x1ZGUgImNrY2FzYy5oIgotI2luY2x1ZGUgImNrY2tlci5oIgotI2luY2x1ZGUgImNr dWNtZC5oIgotI2luY2x1ZGUgImNrdXVzci5oIgotI2luY2x1ZGUgImNrY25ldC5oIiAgICAgICAg ICAgICAgICAgICAgIC8qIEluY2x1ZGVzIGNrY3RlbC5oICovCi0jaW5jbHVkZSAiY2tjdGVsLmgi ICAgICAgICAgICAgICAgICAgICAgLyogKHRoZW4gd2h5IGluY2x1ZGUgaXQgYWdhaW4/KSAqLwot I2luY2x1ZGUgImNrY3hsYS5oIgotCi0jaWZkZWYgQ0tfU1NMCi0jaW5jbHVkZSAiY2t1YXRoLmgi CQkJLyogU01TIDIwMDcvMDIvMTUgKi8KLSNlbmRpZiAvKiBkZWYgQ0tfU1NMICovCi0KLS8qCi0g IEhvdyB0byBnZXQgdGhlIHN0cnVjdCB0aW1ldmFsIGRlZmluaXRpb24gc28gd2UgY2FuIGNhbGwg c2VsZWN0KCkuICBUaGUKLSAgeHhUSU1FSCBzeW1ib2xzIGFyZSBkZWZpbmVkIGluIGNrY2RlYi5o LCBvdmVycmlkZGVuIGluIHZhcmlvdXMgbWFrZWZpbGUKLSAgdGFyZ2V0cy4gIFRoZSBwcm9ibGVt IGlzOiBtYXliZSB3ZSBoYXZlIGFscmVhZHkgaW5jbHVkZWQgc29tZSBoZWFkZXIgZmlsZQotICB0 aGF0IGRlZmluZWQgc3RydWN0IHRpbWV2YWwsIGFuZCBtYXliZSB3ZSBkaWRuJ3QuICBJZiB3ZSBk aWQsIHdlIGRvbid0IHdhbnQKLSAgdG8gaW5jbHVkZSBhbm90aGVyIGhlYWRlciBmaWxlIHRoYXQg ZGVmaW5lcyBpdCBhZ2FpbiBvciB0aGUgY29tcGlsYXRpb24gd2lsbAotICBmYWlsLiAgSWYgd2Ug ZGlkbid0LCB3ZSBoYXZlIHRvIGluY2x1ZGUgdGhlIGhlYWRlciBmaWxlIHdoZXJlIGl0J3MgZGVm aW5lZC4KLSAgQnV0IGluIHNvbWUgY2FzZXMgZXZlbiB0aGF0IHdvbid0IHdvcmsgYmVjYXVzZSBv ZiBzdHJpY3QgUE9TSVggY29uc3RyYWludHMKLSAgb3Igc29tZXN1Y2gsIG9yIGJlY2F1c2UgdGhp cyBpbnRyb2R1Y2VzIG90aGVyIGNvbmZsaWN0cyAoZS5nLiBzdHJ1Y3QgdG0KLSAgbXVsdGlwbHkg ZGVmaW5lZCksIGluIHdoaWNoIGNhc2Ugd2UgaGF2ZSB0byBkZWZpbmUgaXQgb3Vyc2VsdmVzLCBi dXQgdGhpcwotICBjYW4gd29yayBvbmx5IGlmIHdlIGRpZG4ndCBhbHJlYWR5IGVuY291bnRlciBh IGRlZmluaXRpb24uCi0qLwotI2lmbmRlZiBEQ0xUSU1FVkFMCi0jaWZkZWYgU1Y2OFIzVjYKLSNk ZWZpbmUgRENMVElNRVZBTAotI2Vsc2UKLSNpZmRlZiBTQ08yMzQKLSNkZWZpbmUgRENMVElNRVZB TAotI2VuZGlmIC8qIFNDTzIzNCAqLwotI2VuZGlmIC8qIFNWNjhSM1Y2ICovCi0jZW5kaWYgLyog RENMVElNRVZBTCAqLwotCi0jaWZkZWYgRENMVElNRVZBTAotLyogQWxzbyBtYXliZSBpbiBzb21l IHBsYWNlcyB0aGUgZWxlbWVudHMgbXVzdCBiZSB1bnNpZ25lZC4uLiAqLwotc3RydWN0IHRpbWV2 YWwgewotICAgIGxvbmcgdHZfc2VjOwotICAgIGxvbmcgdHZfdXNlYzsKLX07Ci0jaWZkZWYgQ09N TUVOVAotLyogQ3VycmVudGx5IHdlIGRvbid0IHVzZSB0aGlzLi4uICovCi1zdHJ1Y3QgdGltZXpv bmUgewotICAgIGludCB0el9taW51dGVzd2VzdDsKLSAgICBpbnQgdHpfZHN0dGltZTsKLX07Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotI2Vsc2UgIC8qICFEQ0xUSU1FVkFMICovCi0jaWZuZGVmIE5P U1lTVElNRUgKLSNpZmRlZiBTWVNUSU1FSAotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYg LyogU1lTVElNRUggKi8KLSNlbmRpZiAvKiBOT1NZU1RJTUVIICovCi0jaWZuZGVmIE5PU1lTVElN RUJICi0jaWZkZWYgU1lTVElNRUJICi0jaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jZW5kaWYgLyog U1lTVElNRUJIICovCi0jZW5kaWYgLyogTk9TWVNUSU1FQkggKi8KLSNlbmRpZiAvKiBEQ0xUSU1F VkFMICovCi0KLS8qIDIwMTAtMDMtMDkgU01TLiAgVkFYIEMgbmVlZHMgaGVscCB0byBmaW5kICJz eXMiLiAgSXQncyBlYXNpZXIgbm90IHRvIHRyeS4gKi8KLSNpZmRlZiBWTVMKLSNpbmNsdWRlIDx0 eXBlcy5oPgotI2Vsc2UgLyogZGVmIFZNUyAqLwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2Vu ZGlmIC8qIGRlZiBWTVMgW2Vsc2VdICovCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxz dHJpbmcuaD4KLSNpZmRlZiBIQVZFX1NURExJQl9ICi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jZW5k aWYgLyogSEFWRV9TVERMSUJfSCAqLwotCi0jaWZuZGVmIE5PU0VUVElNRQotI2lmZGVmIENPTU1F TlQKLS8qIFRoaXMgc2VjdGlvbiBtb3ZlZCB0byBja2NkZWIuaCAqLwotI2lmZGVmIFBPU0lYCi0j ZGVmaW5lIFVUSU1FSAotI2Vsc2UKLSNpZmRlZiBIUFVYOQotI2RlZmluZSBVVElNRUgKLSNlbHNl Ci0jaWZkZWYgT1MyCi0jZGVmaW5lIFNZU1VUSU1FSAotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlm IC8qIEhQVVg5ICovCi0jZW5kaWYgLyogUE9TSVggKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0K LSNpZmRlZiBWTVMJCQkJLyogU01TIDIwMDcvMDIvMTUgKi8KLSNpbmNsdWRlICJja3ZydGwuaCIJ CQkvKiBmb3IgdXRpbWUoKSAqLwotI2Vsc2UgIC8qIGRlZiBWTVMgKi8KLSNpZmRlZiBTWVNVVElN RUgKLSNpbmNsdWRlIDxzeXMvdXRpbWUuaD4KLSNlbHNlCi0jaWZkZWYgVVRJTUVICi0jaW5jbHVk ZSA8dXRpbWUuaD4KLSNkZWZpbmUgU1lTVVRJTUVICi0jZW5kaWYgLyogVVRJTUVIICovCi0jZW5k aWYgLyogU1lTVVRJTUVIICovCi0jZW5kaWYgLyogZGVmIFZNUyAqLwotI2VuZGlmIC8qIE5PU0VU VElNRSAqLwotCi0jaWZuZGVmIFNDT19PU1I1MDQKLSNpZmRlZiBTRUxFQ1RfSAotI2luY2x1ZGUg PHN5cy9zZWxlY3QuaD4KLSNlbmRpZiAvKiBTRUxFQ1RfSCAqLwotI2VuZGlmIC8qIFNDT19PU1I1 MDQgKi8KLQotI2lmbmRlZiBJTkFERFJfTk9ORQkJCS8qIDIwMTAtMDMtMjkgKi8KLSNkZWZpbmUg SU5BRERSX05PTkUgLTEKLSNlbmRpZgkvKiBJTkFERFJfTk9ORSAqLwotCi0vKiBzZWxlY3QoKSBk aWFsZWN0cy4uLiAqLwotCi0jaWZkZWYgVU5JWAotI2RlZmluZSBCU0RTRUxFQ1QgICAgICAgICAg ICAgICAgICAgICAgIC8qIEJTRCBzZWxlY3QoKSBzeW50YXgvc2VtYW50aWNzICovCi0jaWZuZGVm IEZEX1NFVFNJWkUKLSNkZWZpbmUgRkRfU0VUU0laRSAxMjgKLSNlbmRpZgkvKiBGRF9TRVRTSVpF ICovCi0jaWZkZWYgSFBVWDYJCQkJLyogRm9yIEhQLVVYIDYuNSBjaXJjYSAxOTg5ICovCi10eXBl ZGVmIGxvbmcgZmRfbWFzazsKLSNkZWZpbmUgTkZEQklUUyAoc2l6ZW9mKGZkX21hc2spICogTkJC WSkgLyogYml0cyBwZXIgbWFzayAqLwotI2lmbmRlZiBob3dtYW55Ci0jZGVmaW5lIGhvd21hbnko eCwgeSkgICAoKCh4KSsoKHkpLTEpKS8oeSkpCi0jZW5kaWYJLyogaG93bWFueSAqLwotI2RlZmlu ZSBGRF9TRVQobiwgcCkgICAgKChwKS0+ZmRzX2JpdHNbKG4pL05GREJJVFNdIHw9ICgxIDw8ICgo bikgJSBORkRCSVRTKSkpCi0jZGVmaW5lIEZEX0NMUihuLCBwKSAgICAoKHApLT5mZHNfYml0c1so bikvTkZEQklUU10gJj0gfigxIDw8ICgobikgJSBORkRCSVRTKSkpCi0jZGVmaW5lIEZEX0lTU0VU KG4sIHApICAoKHApLT5mZHNfYml0c1sobikvTkZEQklUU10gJiAoMSA8PCAoKG4pICUgTkZEQklU UykpKQotI2RlZmluZSBGRF9DT1BZKGYsIHQpICAgYmNvcHkoZiwgdCwgc2l6ZW9mKCooZikpKQot I2RlZmluZSBGRF9aRVJPKHApICAgICAgYnplcm8ocCwgc2l6ZW9mKCoocCkpKQotI2VuZGlmCS8q IEhQVVg2ICovCi0KLSNlbHNlCi0jaWZkZWYgT1MyICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogT1MvMiBvciBXaW4zMiAqLwotI2lmZGVmIE5UCi0jZGVmaW5lIEJTRFNFTEVDVAotI2Vs c2UgLyogTlQgKi8KLSNkZWZpbmUgSUJNU0VMRUNUCi0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAv KiBPUzIgKi8KLSNlbmRpZiAvKiBVTklYICovCi0KLSNpZmRlZiBWTVMKLSNkZWZpbmUgQlNEU0VM RUNUCQkJLyogU01TIDIwMDcvMDIvMTUgKi8KLSNlbmRpZiAvKiBkZWYgVk1TICovCi0KLS8qIE90 aGVyIHNlbGVjdCgpIHBlY3VsaWFyaXRpZXMgKi8KLQotI2lmZGVmIEhQVVgKLSNpZm5kZWYgSFBV WDEwICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIUC1VWCA5Lnh4IGFuZCBlYXJsaWVyICov Ci0jaWZuZGVmIEhQVVgxMTAwCi0vKiBUaGUgdGhyZWUgaW50ZXJpb3IgYXJncyB0byBzZWxlY3Qo KSBhcmUgKGludCAqKSByYXRoZXIgdGhhbiAoZmRfc2V0ICopICovCi0jaWZuZGVmIElOVFNFTEVD VAotI2RlZmluZSBJTlRTRUxFQ1QKLSNlbmRpZiAvKiBJTlRTRUxFQ1QgKi8KLSNlbmRpZiAvKiBI UFVYMTEwMCAqLwotI2VuZGlmIC8qIEhQVVgxMCAqLwotI2VuZGlmIC8qIEhQVVggKi8KLQotI2lm ZGVmIENLX1NPQ0tTICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNPQ0tTIEludGVybmV0IHJl bGF5IHBhY2thZ2UgKi8KLSNpZmRlZiBDS19TT0NLUzUgICAgICAgICAgICAgICAgICAgICAgICAv KiBTT0NLUyA1ICovCi0jZGVmaW5lIGFjY2VwdCAgU09DS1NhY2NlcHQKLSNkZWZpbmUgYmluZCAg ICBTT0NLU2JpbmQKLSNkZWZpbmUgY29ubmVjdCBTT0NLU2Nvbm5lY3QKLSNkZWZpbmUgZ2V0c29j a25hbWUgU09DS1NnZXRzb2NrbmFtZQotI2RlZmluZSBsaXN0ZW4gU09DS1NsaXN0ZW4KLSNlbHNl ICAvKiBOb3QgU09DS1MgNSAqLwotI2RlZmluZSBhY2NlcHQgIFJhY2NlcHQKLSNkZWZpbmUgYmlu ZCAgICBSYmluZAotI2RlZmluZSBjb25uZWN0IFJjb25uZWN0Ci0jZGVmaW5lIGdldHNvY2tuYW1l IFJnZXRzb2NrbmFtZQotI2RlZmluZSBsaXN0ZW4gUmxpc3RlbgotI2VuZGlmIC8qIENLX1NPQ0tT NSAqLwotI2VuZGlmIC8qIENLX1NPQ0tTICovCi0KLSNpZm5kZWYgTk9IVFRQCi1leHRlcm4gY2hh ciAqIHRjcF9odHRwX3Byb3h5OyAgICAgICAgICAgLyogTmFtZVs6cG9ydF0gb2YgaHR0cCBwcm94 eSBzZXJ2ZXIgKi8KLWV4dGVybiBpbnQgICAgdGNwX2h0dHBfcHJveHlfZXJybm87Ci1leHRlcm4g Y2hhciAqIHRjcF9odHRwX3Byb3h5X3VzZXI7Ci1leHRlcm4gY2hhciAqIHRjcF9odHRwX3Byb3h5 X3B3ZDsKLWV4dGVybiBjaGFyICogdGNwX2h0dHBfcHJveHlfYWdlbnQ7Ci0jZGVmaW5lIEhUVFBD UFlMIDEwMjQKLXN0YXRpYyBjaGFyIHByb3h5aG9zdFtIVFRQQ1BZTF07Ci0jZW5kaWYgLyogTk9I VFRQICovCi1pbnQgc3NsX2Z0cF9wcm94eSA9IDA7ICAgICAgICAgICAgICAgICAgLyogRlRQIG92 ZXIgU1NML1RMUyBQcm94eSBTZXJ2ZXIgKi8KLQotLyogRmVhdHVyZSBzZWxlY3Rpb24gKi8KLQot I2lmbmRlZiBVU0VfU0hVVERPV04KLS8qCi0gIFdlIGRvbid0IHVzZSBzaHV0ZG93bigpIGJlY2F1 c2UgKGEpIHdlIGFsd2F5cyBjYWxsIGl0IGp1c3QgYmVmb3JlIGNsb3NlKCkKLSAgc28gaXQncyBy ZWR1bmRhbnQgYW5kIHVubmVjZXNzYXJ5LCBhbmQgKGIpIGl0IGludHJvZHVjZXMgYSBsb25nIHBh dXNlIG9uCi0gIHNvbWUgcGxhdGZvcm1zIGxpa2UgU1YvNjggUjMuCi0qLwotLyogI2RlZmluZSBV U0VfU0hVVERPV04gKi8KLSNlbmRpZiAvKiBVU0VfU0hVVERPV04gKi8KLQotI2lmbmRlZiBOT1JF U0VORAotI2lmbmRlZiBOT1JFU1RBUlQgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc3RhcnQg LyByZWNvdmVyICovCi0jaWZuZGVmIEZUUF9SRVNUQVJUCi0jZGVmaW5lIEZUUF9SRVNUQVJUCi0j ZW5kaWYgLyogRlRQX1JFU1RBUlQgKi8KLSNlbmRpZiAvKiBOT1JFU1RBUlQgKi8KLSNlbmRpZiAv KiBOT1JFU0VORCAqLwotCi0jaWZuZGVmIE5PVVBEQVRFICAgICAgICAgICAgICAgICAgICAgICAg LyogVXBkYXRlIG1vZGUgKi8KLSNpZm5kZWYgRE9VUERBVEUKLSNkZWZpbmUgRE9VUERBVEUKLSNl bmRpZiAvKiBET1VQREFURSAqLwotI2VuZGlmIC8qIE5PVVBEQVRFICovCi0KLSNpZm5kZWYgVU5J Q09ERSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmljb2RlIHJlcXVpcmVkICovCi0jaWZu ZGVmIE5PQ1NFVFMgICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIGNoYXJzZXQgdHJhbnNs YXRpb24gKi8KLSNkZWZpbmUgTk9DU0VUUwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSNlbmRpZiAv KiBVTklDT0RFICovCi0KLSNpZm5kZWYgT1MyCi0jaWZuZGVmIEhBVkVfTVNFQ1MgICAgICAgICAg ICAgICAgICAgICAgLyogTWlsbGlzZWNvbmQgdGltZXIgKi8KLSNpZmRlZiBVTklYCi0jaWZkZWYg R0ZUSU1FUgotI2RlZmluZSBIQVZFX01TRUNTCi0jZW5kaWYgLyogR0ZUSU1FUiAqLwotI2VuZGlm IC8qIFVOSVggKi8KLSNlbmRpZiAvKiBIQVZFX01TRUNTICovCi0jZW5kaWYgLyogT1MyICovCi0K LSNpZmRlZiBQSVBFU0VORCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQVVQgZnJvbSBwaXBl ICovCi0jaWZuZGVmIFBVVFBJUEUKLSNkZWZpbmUgUFVUUElQRQotI2VuZGlmIC8qIFBVVFBJUEUg Ki8KLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotCi0jaWZuZGVmIE5PU1BMICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogUFVUIGZyb20gYXJyYXkgKi8KLSNpZm5kZWYgUFVUQVJSQVkKLSNkZWZp bmUgUFVUQVJSQVkKLSNlbmRpZiAvKiBQVVRBUlJBWSAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0K LS8qIFNlY3VyaXR5Li4uICovCi0KLSNpZmRlZiBDS19TUlAKLSNkZWZpbmUgRlRQX1NSUAotI2Vu ZGlmIC8qIENLX1NSUCAqLwotCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSNpZmRlZiBLUkI0Ci0vKgot ICBUaGVyZSBpcyBhIGNvbmZsaWN0IGJldHdlZW4gdGhlIEtleSBTY2hlZHVsZSBmb3JtYXRzIHVz ZWQgaW50ZXJuYWxseQotICB3aXRoaW4gdGhlIHN0YW5kYWxvbmUgTUlUIEtSQjQgbGlicmFyeSBh bmQgdGhhdCB1c2VkIGJ5IEVyaWMgWW91bmcKLSAgaW4gT3BlblNTTCBhbmQgaGlzIHN0YW5kYWxv bmUgREVTIGxpYnJhcnkuICBUaGVyZWZvcmUsIEtSQjQgRlRQIEFVVEgKLSAgY2Fubm90IGJlIHN1 cHBvcnRlZCB3aGVuIGVpdGhlciBvZiB0aG9zZSB0d28gcGFja2FnZXMgYXJlIHVzZWQuCi0qLwot I2lmZGVmIEtSQjUyNAotI2RlZmluZSBGVFBfS1JCNAotI2Vsc2UgLyogS1JCNTI0ICovCi0jaWZu ZGVmIENLX1NTTAotI2lmbmRlZiBMSUJERVMKLSNkZWZpbmUgRlRQX0tSQjQKLSNlbmRpZiAvKiBM SUJERVMgKi8KLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNlbmRpZiAvKiBLUkI1MjQgKi8KLSNlbmRp ZiAvKiBLUkI0ICovCi0jaWZkZWYgS1JCNQotI2lmbmRlZiBIRUlNREFMCi0jaWZuZGVmIE5PRlRQ X0dTU0FQSQkJCS8qIDI5OSAqLwotI2RlZmluZSBGVFBfR1NTQVBJCi0jZW5kaWYJLyogTk9GVFBf R1NTQVBJICovCi0jZW5kaWYgLyogSEVJTURBTCAqLwotI2VuZGlmIC8qIEtSQjUgKi8KLSNlbmRp ZiAvKiBDS19LRVJCRVJPUyAqLwotCi0vKiBGVFBfU0VDVVJJVFkgaXMgZGVmaW5lZCBpZiBhbnkg b2YgdGhlIGFib3ZlIGlzIHNlbGVjdGVkICovCi0jaWZuZGVmIEZUUF9TRUNVUklUWQotI2lmZGVm IEZUUF9HU1NBUEkKLSNkZWZpbmUgRlRQX1NFQ1VSSVRZCi0jZWxzZQotI2lmZGVmIEZUUF9LUkI0 Ci0jZGVmaW5lIEZUUF9TRUNVUklUWQotI2Vsc2UKLSNpZmRlZiBGVFBfU1JQCi0jZGVmaW5lIEZU UF9TRUNVUklUWQotI2Vsc2UKLSNpZmRlZiBDS19TU0wKLSNkZWZpbmUgRlRQX1NFQ1VSSVRZCi0j ZW5kaWYgLyogQ0tfU1NMICovCi0jZW5kaWYgLyogRlRQX1NSUCAqLwotI2VuZGlmIC8qIEZUUF9L UkI0ICovCi0jZW5kaWYgLyogRlRQX0dTU0FQSSAqLwotI2VuZGlmIC8qIEZUUF9TRUNVUklUWSAq LwotCi0jaWZkZWYgQ0tfREVTCi0jaWZkZWYgQ0tfU1NMCi0jaWZuZGVmIExJQkRFUwotI2RlZmlu ZSBMSUJERVMKLSNlbmRpZiAvKiBMSUJERVMgKi8KLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNlbmRp ZiAvKiBDS19ERVMgKi8KLQotI2lmZGVmIENSWVBUX0RMTAotI2lmbmRlZiBMSUJERVMKLSNkZWZp bmUgTElCREVTCi0jZW5kaWYgLyogTElCREVTICovCi0jZW5kaWYgLyogQ1JZUFRfRExMICovCi0K LSNpZmRlZiBGVFBfS1JCNAotI2RlZmluZSBkZXNfY2Jsb2NrIEJsb2NrCi0jZGVmaW5lIGRlc19r ZXlfc2NoZWR1bGUgU2NoZWR1bGUKLSNpZmRlZiBLUkI1MjQKLSNpZmRlZiBOVAotI2RlZmluZSBf V0lORE9XUwotI2VuZGlmIC8qIE5UICovCi0jaW5jbHVkZSAia2VyYmVyb3NJVi9rcmIuaCIKLSNl bHNlIC8qIEtSQjUyNCAqLwotI2lmZGVmIFNPTEFSSVMKLSNpZm5kZWYgc3VuCi0vKiBGb3Igc29t ZSByZWFzb24gbG9zdCBpbiBoaXN0b3J5IHRoZSBNYWtlZmlsZSBTb2xhcmlzIHRhcmdldHMgaGF2 ZSAtVXN1biAqLwotI2RlZmluZSBzdW4KLSNlbmRpZiAvKiBzdW4gKi8KLSNlbmRpZiAvKiBTT0xB UklTICovCi0jaW5jbHVkZSAia3JiLmgiCi0jZGVmaW5lIGtyYl9nZXRfZXJyX3RleHRfZW50cnkg a3JiX2dldF9lcnJfdGV4dAotI2VuZGlmIC8qIEtSQjUyNCAqLwotI2VuZGlmIC8qIEZUUF9LUkI0 ICovCi0KLSNpZmRlZiBDS19TU0wKLSNpZmRlZiBGVFBfS1JCNAotI2lmbmRlZiBIRUFERVJfREVT X0gKLSNkZWZpbmUgSEVBREVSX0RFU19ICi0jZW5kaWYgLyogSEVBREVSX0RFU19IICovCi0jZW5k aWYgLyogRlRQX0tSQjQgKi8KLSNpbmNsdWRlICJja19zc2wuaCIKLSNlbmRpZiAvKiBDS19TU0wg Ki8KLQotI2lmZGVmIEZUUF9TUlAKLSNpZmRlZiBIQVZFX1BXRF9ICi0jaW5jbHVkZSAicHdkLmgi Ci0jZW5kaWYgLyogSEFWRV9QV0RfSCAqLwotI2luY2x1ZGUgInRfcHdkLmgiCi0jaW5jbHVkZSAi dF9jbGllbnQuaCIKLSNpbmNsdWRlICJrcnlwdG8uaCIKLSNlbmRpZiAvKiBGVFBfU1JQICovCi0K LSNpZmRlZiBGVFBfR1NTQVBJCi0jaW5jbHVkZSA8Z3NzYXBpL2dzc2FwaS5oPgotLyoKLSAgTmVl ZCB0byBpbmNsdWRlIHRoZSBrcmI1IGZpbGUsIGJlY2F1c2Ugd2UncmUgZG9pbmcgbWFudWFsIGZh bGxiYWNrCi0gIGZyb20gdGhlIHYyIG1lY2ggdG8gdGhlIHYxIG1lY2guICBPbmNlIHRoZXJlJ3Mg cmVhbCBuZWdvdGlhdGlvbiwKLSAgd2UgY2FuIGJlIGdlbmVyaWMgYWdhaW4uCi0qLwotI2luY2x1 ZGUgPGdzc2FwaS9nc3NhcGlfZ2VuZXJpYy5oPgotI2luY2x1ZGUgPGdzc2FwaS9nc3NhcGlfa3Ji NS5oPgotc3RhdGljIGdzc19jdHhfaWRfdCBnY29udGV4dDsKLQotI2lmZGVmIE1BQ09TWAotLyoq IGV4cG9ydGVkIGNvbnN0YW50cyBkZWZpbmVkIGluIGdzc2FwaV9rcmI1eyxfbnh9LmggKiovCi0K LS8qIHRoZXNlIGFyZSBib2d1cywgYnV0IHdpbGwgY29tcGlsZSAqLwotCi0vKgotICogVGhlIE9J RCBvZiB0aGUgZHJhZnQga3JiNSBtZWNoYW5pc20sIGFzc2lnbmVkIGJ5IElFVEYsIGlzOgotICog ICAgICBpc28oMSkgb3JnKDMpIGRvZCg1KSBpbnRlcm5ldCgxKSBzZWN1cml0eSg1KQotICogICAg ICBrZXJiZXJvc3Y1KDIpID0gMS4zLjUuMS41LjIKLSAqIFRoZSBPSUQgb2YgdGhlIGtyYjVfbmFt ZSB0eXBlIGlzOgotICogICAgICBpc28oMSkgbWVtYmVyLWJvZHkoMikgVVMoODQwKSBtaXQoMTEz NTU0KSBpbmZvc3lzKDEpIGdzc2FwaSgyKQotICogICAgICBrcmI1KDIpIGtyYjVfbmFtZSgxKSA9 IDEuMi44NDAuMTEzNTU0LjEuMi4yLjEKLSAqIFRoZSBPSUQgb2YgdGhlIGtyYjVfcHJpbmNpcGFs IHR5cGUgaXM6Ci0gKiAgICAgIGlzbygxKSBtZW1iZXItYm9keSgyKSBVUyg4NDApIG1pdCgxMTM1 NTQpIGluZm9zeXMoMSkgZ3NzYXBpKDIpCi0gKiAgICAgIGtyYjUoMikga3JiNV9wcmluY2lwYWwo MikgPSAxLjIuODQwLjExMzU1NC4xLjIuMi4yCi0gKiBUaGUgT0lEIG9mIHRoZSBwcm9wb3NlZCBz dGFuZGFyZCBrcmI1IG1lY2hhbmlzbSBpczoKLSAqICAgICAgaXNvKDEpIG1lbWJlci1ib2R5KDIp IFVTKDg0MCkgbWl0KDExMzU1NCkgaW5mb3N5cygxKSBnc3NhcGkoMikKLSAqICAgICAga3JiNSgy KSA9IDEuMi44NDAuMTEzNTU0LjEuMi4yCi0gKiBUaGUgT0lEIG9mIHRoZSBwcm9wb3NlZCBzdGFu ZGFyZCBrcmI1IHYyIG1lY2hhbmlzbSBpczoKLSAqICAgICAgaXNvKDEpIG1lbWJlci1ib2R5KDIp IFVTKDg0MCkgbWl0KDExMzU1NCkgaW5mb3N5cygxKSBnc3NhcGkoMikKLSAqICAgICAga3JiNXYy KDMpID0gMS4yLjg0MC4xMTM1NTQuMS4yLjMKLSAqCi0gKi8KLQotLyoKLSAqIEVuY29kaW5nIHJ1 bGVzOiBUaGUgZmlyc3QgdHdvIHZhbHVlcyBhcmUgZW5jb2RlZCBpbiBvbmUgYnl0ZSBhcyA0MAot ICogKiB2YWx1ZTEgKyB2YWx1ZTIuICBTdWJzZXF1ZW50IHZhbHVlcyBhcmUgZW5jb2RlZCBiYXNl IDEyOCwgbW9zdAotICogc2lnbmlmaWNhbnQgZGlnaXQgZmlyc3QsIHdpdGggdGhlIGhpZ2ggYml0 IChcMjAwKSBzZXQgb24gYWxsIG9jdGV0cwotICogZXhjZXB0IHRoZSBsYXN0IGluIGVhY2ggdmFs dWUncyBlbmNvZGluZy4KLSAqLwotCi1zdGF0aWMgQ09OU1QgZ3NzX09JRF9kZXNjCi1ja19rcmI1 X2dzc19vaWRfYXJyYXlbXSA9IHsKLSAgIC8qIHRoaXMgaXMgdGhlIG9mZmljaWFsLCByZmMtc3Bl Y2lmaWVkIE9JRCAqLwotICAgezksICJcMDUyXDIwNlwxMTBcMjA2XDM2N1wwMjJcMDAxXDAwMlww MDIifSwKLSAgIC8qIHRoaXMgaXMgdGhlIHVub2ZmaWNpYWwsIHdyb25nIE9JRCAqLwotICAgezUs ICJcMDUzXDAwNVwwMDFcMDA1XDAwMiJ9LAotICAgLyogdGhpcyBpcyB0aGUgdjIgYXNzaWduZWQg T0lEICovCi0gICB7OSwgIlwwNTJcMjA2XDExMFwyMDZcMzY3XDAyMlwwMDFcMDAyXDAwMyJ9LAot ICAgLyogdGhlc2UgdHdvIGFyZSBuYW1lIHR5cGUgT0lEJ3MgKi8KLSAgIHsxMCwgIlwwNTJcMjA2 XDExMFwyMDZcMzY3XDAyMlwwMDFcMDAyXDAwMlwwMDEifSwKLSAgIHsxMCwgIlwwNTJcMjA2XDEx MFwyMDZcMzY3XDAyMlwwMDFcMDAyXDAwMlwwMDIifSwKLSAgIHsgMCwgMCB9Ci19OwotCi1zdGF0 aWMKLUNPTlNUIGdzc19PSURfZGVzYyAqIENPTlNUIGdzc19tZWNoX2tyYjVfdjIgPSBja19rcmI1 X2dzc19vaWRfYXJyYXkrMjsKLQotI2lmZGVmIE1BQ09TWDEwMwotc3RhdGljCi1DT05TVCBnc3Nf T0lEX2Rlc2MgKiBDT05TVCBnc3NfbWVjaF9rcmI1ID0gY2tfa3JiNV9nc3Nfb2lkX2FycmF5KzA7 Ci0jZW5kaWYgLyogTUFDT1NYMTAzICovCi0KLSNpZm5kZWYgTUFDT1NYCi1zdGF0aWMKLUNPTlNU IGdzc19PSURfZGVzYyAqIENPTlNUIGdzc19tZWNoX2tyYjUgPSBja19rcmI1X2dzc19vaWRfYXJy YXkrMDsKLXN0YXRpYwotQ09OU1QgZ3NzX09JRF9kZXNjICogQ09OU1QgZ3NzX21lY2hfa3JiNV9v bGQgPSBja19rcmI1X2dzc19vaWRfYXJyYXkrMTsKLXN0YXRpYwotQ09OU1QgZ3NzX09JRF9kZXNj ICogQ09OU1QgZ3NzX250X2tyYjVfbmFtZSA9IGNrX2tyYjVfZ3NzX29pZF9hcnJheSszOwotc3Rh dGljCi1DT05TVCBnc3NfT0lEX2Rlc2MgKiBDT05TVCBnc3NfbnRfa3JiNV9wcmluY2lwYWwgPSBj a19rcmI1X2dzc19vaWRfYXJyYXkrNDsKLSNlbmRpZgkvKiBNQUNPU1ggKi8KLQotLyoKLSAqIFNl ZSBrcmI1L2dzc2FwaV9rcmI1LmMgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGFsZ29yaXRobSBm b3IKLSAqIGVuY29kaW5nIGFuIG9iamVjdCBpZGVudGlmaWVyLgotICovCi0KLS8qCi0gKiBUaGUg T0lEIG9mIHVzZXJfbmFtZSBpczoKLSAqICAgICAgaXNvKDEpIG1lbWJlci1ib2R5KDIpIFVTKDg0 MCkgbWl0KDExMzU1NCkgaW5mb3N5cygxKSBnc3NhcGkoMikKLSAqICAgICAgZ2VuZXJpYygxKSB1 c2VyX25hbWUoMSkgPSAxLjIuODQwLjExMzU1NC4xLjIuMS4xCi0gKiBtYWNoaW5lX3VpZF9uYW1l OgotICogICAgICBpc28oMSkgbWVtYmVyLWJvZHkoMikgVVMoODQwKSBtaXQoMTEzNTU0KSBpbmZv c3lzKDEpIGdzc2FwaSgyKQotICogICAgICBnZW5lcmljKDEpIG1hY2hpbmVfdWlkX25hbWUoMikg PSAxLjIuODQwLjExMzU1NC4xLjIuMS4yCi0gKiBzdHJpbmdfdWlkX25hbWU6Ci0gKiAgICAgIGlz bygxKSBtZW1iZXItYm9keSgyKSBVUyg4NDApIG1pdCgxMTM1NTQpIGluZm9zeXMoMSkgZ3NzYXBp KDIpCi0gKiAgICAgIGdlbmVyaWMoMSkgc3RyaW5nX3VpZF9uYW1lKDMpID0gMS4yLjg0MC4xMTM1 NTQuMS4yLjEuMwotICogc2VydmljZV9uYW1lOgotICogICAgICBpc28oMSkgbWVtYmVyLWJvZHko MikgVVMoODQwKSBtaXQoMTEzNTU0KSBpbmZvc3lzKDEpIGdzc2FwaSgyKQotICogICAgICBnZW5l cmljKDEpIHNlcnZpY2VfbmFtZSg0KSA9IDEuMi44NDAuMTEzNTU0LjEuMi4xLjQKLSAqIGV4cG9y dGVkX25hbWU6Ci0gKiAgICAgIDEoaXNvKSwgMyhvcmcpLCA2KGRvZCksIDEoaW50ZXJuZXQpLCA1 KHNlY3VyaXR5KSwgNihuYW1ldHlwZXMpLAotICogICAgICAgICAgNChnc3MtYXBpLWV4cG9ydGVk LW5hbWUpCi0gKiBob3N0X2Jhc2VkX3NlcnZpY2VfbmFtZSAodjIpOgotICogICAgICBpc28gKDEp IG9yZyAoMyksIGRvZCAoNiksIGludGVybmV0ICgxKSwgc2VjdXJpdHkgKDUpLCBuYW1ldHlwZXMo NiksCi0gKiAgICAgIGdzcy1ob3N0LWJhc2VkLXNlcnZpY2VzKDIpCi0gKi8KLQotc3RhdGljIGdz c19PSURfZGVzYyBja19vaWRzW10gPSB7Ci0gICB7MTAsICJcMDUyXDIwNlwxMTBcMjA2XDM2N1ww MjJcMDAxXDAwMlwwMDFcMDAxIn0sCi0gICB7MTAsICJcMDUyXDIwNlwxMTBcMjA2XDM2N1wwMjJc MDAxXDAwMlwwMDFcMDAyIn0sCi0gICB7MTAsICJcMDUyXDIwNlwxMTBcMjA2XDM2N1wwMjJcMDAx XDAwMlwwMDFcMDAzIn0sCi0gICB7MTAsICJcMDUyXDIwNlwxMTBcMjA2XDM2N1wwMjJcMDAxXDAw MlwwMDFcMDA0In0sCi0gICB7IDYsICJcMDUzXDAwNlwwMDFcMDA1XDAwNlwwMDQifSwKLSAgIHsg NiwgIlwwNTNcMDA2XDAwMVwwMDVcMDA2XDAwMiJ9LAotfTsKLQotc3RhdGljIGdzc19PSUQgY2tf Z3NzX250X3VzZXJfbmFtZSA9IGNrX29pZHMrMDsKLXN0YXRpYyBnc3NfT0lEIGNrX2dzc19udF9t YWNoaW5lX3VpZF9uYW1lID0gY2tfb2lkcysxOwotc3RhdGljIGdzc19PSUQgY2tfZ3NzX250X3N0 cmluZ191aWRfbmFtZSA9IGNrX29pZHMrMjsKLXN0YXRpYyBnc3NfT0lEIGNrX2dzc19udF9zZXJ2 aWNlX25hbWUgPSBja19vaWRzKzM7Ci1zdGF0aWMgZ3NzX09JRCBja19nc3NfbnRfZXhwb3J0ZWRf bmFtZSA9IGNrX29pZHMrNDsKLXN0YXRpYyBnc3NfT0lEIGNrX2dzc19udF9zZXJ2aWNlX25hbWVf djIgPSBja19vaWRzKzU7Ci0jZW5kaWYgLyogTUFDT1NYICovCi0jZW5kaWYgLyogRlRQX0dTU0FQ SSAqLwotCi0jaWZkZWYgT1MyCi0jaWZkZWYgRlRQX1NSUAotI2RlZmluZSBNQVBfS1JZUFRPCi0j aWZkZWYgU1JQRExMCi0jZGVmaW5lIE1BUF9TUlAKLSNlbmRpZiAvKiBTUlBETEwgKi8KLSNlbmRp ZiAvKiBGVFBfU1JQICovCi0jaWZkZWYgRlRQX0tSQjQKLSNkZWZpbmUgTUFQX0tSQjQKLSNpZmRl ZiBDS19FTkNSWVBUSU9OCi0jZGVmaW5lIE1BUF9ERVMKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9O ICovCi0jZW5kaWYgLyogRlRQX0tSQjQgKi8KLSNpZmRlZiBGVFBfR1NTQVBJCi0jZGVmaW5lIE1B UF9HU1NBUEkKLSNkZWZpbmUgR1NTX09JRFMKLSNlbmRpZiAvKiBGVFBfR1NTQVBJICovCi0jaW5j bHVkZSAiY2tvYXRoLmgiCi0KLWV4dGVybiBpbnQgazk1c3Rkb3V0LCB3aGVyZXhbXSwgd2hlcmV5 W107Ci1leHRlcm4gdW5zaWduZWQgY2hhciBjb2xvcmNtZDsKLSNlbmRpZiAvKiBPUzIgKi8KLQot I2lmZGVmIEZUUF9LUkI0Ci1zdGF0aWMgY2hhciBmdHBfcmVhbG1bUkVBTE1fU1ogKyAxXTsKLXN0 YXRpYyBLVEVYVF9TVCBmdHBfdGt0OwotI2lmZGVmIE9TMgotc3RhdGljIExFQVNIX0NSRURFTlRJ QUxTIGZ0cF9jcmVkOwotI2Vsc2UgLyogT1MyICovCi1zdGF0aWMgQ1JFREVOVElBTFMgZnRwX2Ny ZWQ7Ci0jZW5kaWYgLyogT1MyICovCi1zdGF0aWMgTVNHX0RBVCBmdHBfbXNnX2RhdGE7Ci1zdGF0 aWMgZGVzX2tleV9zY2hlZHVsZSBmdHBfc2NoZWQ7Ci1zdGF0aWMgaW50IGZvb1s0XSA9IHs5OSw5 OSw5OSw5OX07Ci0jZW5kaWYgLyogRlRQX0tSQjQgKi8KLQotLyogZ2V0cmVwbHkoKSBmdW5jdGlv biBjb2RlcyAqLwotCi0jZGVmaW5lIEdSRl9BVVRIIDEJCQkvKiBSZXBseSB0byBBVVRIIGNvbW1h bmQgKi8KLSNkZWZpbmUgR1JGX0ZFQVQgMgkJCS8qIFJlcGx5IHRvIEZFQVQgY29tbWFuZCAqLwot Ci0vKiBPcGVyYXRpb25hbCBkZWZpbml0aW9ucyAqLwotCi0jZGVmaW5lIERFRl9WQk0gMCAgICAg ICAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCB2ZXJib3NlIG1vZGUgKi8KLS8qICNkZWZpbmUg U0VUVkJNICovICAgICAgICAgICAgICAgICAgICAvKiAoc2VlIGdldHJlcGx5KSAqLwotCi0jZGVm aW5lIFVSTF9PTkVGSUxFICAgICAgICAgICAgICAgICAgICAgLyogR0VULCBub3QgTUdFVCwgZm9y IEZUUCBVUkwgKi8KLQotI2RlZmluZSBGVFBfQlVGU0laIDEwMjQwICAgICAgICAgICAgICAgIC8q IE1heCBzaXplIGZvciBGVFAgY21kcyAmIHJlcGxpZXMgKi8KLSNkZWZpbmUgU1JWTkFNTEVOIDMy ICAgICAgICAgICAgICAgICAgICAvKiBNYXggbGVuZ3RoIGZvciBzZXJ2ZXIgdHlwZSBuYW1lICov Ci0jZGVmaW5lIFBXRFNJWiAyNTYKLSNkZWZpbmUgUEFTU0JVRlNJWiAyNTYKLSNkZWZpbmUgUFJP TVBUU0laIDI1NgotCi0jaWZuZGVmIE1HRVRNQVggICAgICAgICAgICAgICAgICAgICAgICAgLyog TWF4IG9wZXJhbmRzIGZvciBNR0VUIGNvbW1hbmQgKi8KLSNkZWZpbmUgTUdFVE1BWCAxMDAwCi0j ZW5kaWYgLyogTUdFVE1BWCAqLwotCi0jaWZkZWYgRlRQX1NSUAotI2RlZmluZSBGVURHRV9GQUNU T1IgMTAwCi0jZW5kaWYgLyogRlRQX1NSUCAqLwotCi0vKgotICBBbW91bnQgb2YgZ3Jvd3RoIGZy b20gY2xlYXJ0ZXh0IHRvIGNpcGhlcnRleHQuICBrcmJfbWtfcHJpdiBhZGRzIHRoaXMKLSAgbnVt YmVyIGJ5dGVzLiAgTXVzdCBiZSBkZWZpbmVkIGZvciBlYWNoIGF1dGggdHlwZS4KLSAgR1NTQVBJ IGFwcGVhcnMgdG8gYWRkIDUyIGJ5dGVzLCBidXQgSSdtIG5vdCBzdXJlIGl0IGlzIGEgY29uc3Rh bnQtLWhhcnRtYW5zCi0gIDNERVMgcmVxdWlyZXMgNTYgYnl0ZXMuICBMZXRzIHVzZSA5NiBqdXN0 IHRvIGJlIHN1cmUuCi0qLwotI2lmZGVmIEZUUF9HU1NBUEkKLSNpZm5kZWYgRlVER0VfRkFDVE9S Ci0jZGVmaW5lIEZVREdFX0ZBQ1RPUiA5NgotI2VuZGlmIC8qIEZVREdFX0ZBQ1RPUiAqLwotI2Vu ZGlmIC8qIEZUUF9HU1NBUEkgKi8KLQotI2lmZGVmIEZUUF9LUkI0Ci0jaWZuZGVmIEZVREdFX0ZB Q1RPUgotI2RlZmluZSBGVURHRV9GQUNUT1IgMzIKLSNlbmRpZiAvKiBGVURHRV9GQUNUT1IgKi8K LSNlbmRpZiAvKiBGVFBfS1JCNCAqLwotCi0jaWZuZGVmIEZVREdFX0ZBQ1RPUiAgICAgICAgICAg ICAgICAgICAgLyogSW4gY2FzZSBubyBhdXRoIHR5cGVzIGRlZmluZSBpdCAqLwotI2RlZmluZSBG VURHRV9GQUNUT1IgMAotI2VuZGlmIC8qIEZVREdFX0ZBQ1RPUiAqLwotCi0jaWZuZGVmIE1BWEhP U1ROQU1FTEVOCi0jZGVmaW5lIE1BWEhPU1ROQU1FTEVOIDY0Ci0jZW5kaWYgLyogTUFYSE9TVE5B TUVMRU4gKi8KLSNkZWZpbmUgTUFYX0ROU19OQU1FTEVOICgxNSooTUFYSE9TVE5BTUVMRU4gKyAx KSsxKQotCi0vKiBGYXNjaXN0IGNvbXBpbGVyIHRvYWR5aW5nICovCi0KLSNpZm5kZWYgU0VOREFS RzJUWVBFCi0jaWZkZWYgQ09NTUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWlnaHQg YmUgbmVlZGVkIGhlcmUgYW5kIHRoZXJlICovCi0jZGVmaW5lIFNFTkRBUkcyVFlQRSBjb25zdCBj aGFyICoKLSNlbHNlCi0jZGVmaW5lIFNFTkRBUkcyVFlQRSBjaGFyICoKLSNlbmRpZiAvKiBDT01N RU5UICovCi0jZW5kaWYgLyogU0VOREFSRzJUWVBFICovCi0KLS8qIENvbW1vbiB0ZXh0IG1lc3Nh Z2VzICovCi0KLXN0YXRpYyBjaGFyICpub2N4ID0gIj9ObyBGVFAgY29udHJvbCBjb25uZWN0aW9u XG4iOwotCi1zdGF0aWMgY2hhciAqZm5jbmFtW10gPSB7Ci0gICJyZW5hbWUiLCAib3ZlcndyaXRl IiwgImJhY2t1cCIsICJhcHBlbmQiLCAiZGlzY2FyZCIsICJhc2siLCAidXBkYXRlIiwKLSAgImRh dGVzLWRpZmZlciIsICIiCi19OwotCi0vKiBNYWNybyBkZWZpbml0aW9ucyAqLwotCi0vKiBVc2Vk IHRvIHNwZWVkIHVwIHRleHQtbW9kZSBQVVRzICovCi0jZGVmaW5lIHp6b3V0KGZkLGMpIFwKLSgo ZmQ8MCk/KC0xKTooKG5vdXQ+PXVjYnVmc2l6KT8oenpzZW5kKGZkLGMpKToodWNidWZbbm91dCsr XT1jKSkpCi0KLSNkZWZpbmUgQ0hFQ0tDT05OKCkgaWYoIWNvbm5lY3RlZCl7cHJpbnRmKG5vY3gp O3JldHVybigtOSk7fQotCi0vKiBFeHRlcm5hbHMgKi8KLQotI2lmZGVmIENLX1VSTAotZXh0ZXJu IHN0cnVjdCB1cmxkYXRhIGdfdXJsOwotI2VuZGlmIC8qIENLX1VSTCAqLwotCi0jaWZkZWYgRFlO QU1JQwotZXh0ZXJuIGNoYXIgKnppbmJ1ZmZlciwgKnpvdXRidWZmZXI7ICAgIC8qIFJlZ3VsYXIg S2VybWl0IGZpbGUgaS9vICovCi0jZWxzZQotZXh0ZXJuIGNoYXIgemluYnVmZmVyW10sIHpvdXRi dWZmZXJbXTsKLSNlbmRpZiAvKiBEWU5BTUlDICovCi1leHRlcm4gY2hhciAqemlucHRyLCAqem91 dHB0cjsKLWV4dGVybiBpbnQgemluY250LCB6b3V0Y250LCB6b2J1ZnNpemUsIGZuY2FjdDsKLQot I2lmZGVmIENLX1RNUERJUgotZXh0ZXJuIGludCBmX3RtcGRpcjsgICAgICAgICAgICAgICAgICAg IC8qIERpcmVjdG9yeSBjaGFuZ2VkIHRlbXBvcmFyaWx5ICovCi1leHRlcm4gY2hhciBzYXZkaXJb XTsgICAgICAgICAgICAgICAgICAgLyogRm9yIHNhdmluZyBjdXJyZW50IGRpcmVjdG9yeSAqLwot ZXh0ZXJuIGNoYXIgKiBkbGRpcjsKLSNlbmRpZiAvKiBDS19UTVBESVIgKi8KLQotZXh0ZXJuIGNo YXIgKiByZnNwZWMsICogc2ZzcGVjLCAqIHNyZnNwZWMsICogcnJmc3BlYzsgLyogRm9yIFdIRVJF IGNvbW1hbmQgKi8KLQotZXh0ZXJuIHh4X3N0cnAgeHhzdHJpbmc7Ci1leHRlcm4gc3RydWN0IGtl eXRhYiBvbm9mZltdLCB0eHRiaW5bXSwgcnBhdGh0YWJbXTsKLWV4dGVybiBpbnQgbnJwYXRodGFi LCB4ZmlsZXR5cGUsIHBhdHRlcm5zLCBnbmZlcnJvciwgbW92aW5nLCB3aGF0LCBwa3RudW07Ci1l eHRlcm4gaW50IHN1Y2Nlc3MsIG5maWxzLCBzbmRzcmMsIHF1aWV0LCBub3B1c2gsIHJlY3Vyc2l2 ZSwgaW5zZXJ2ZXIsIGJpbmFyeTsKLWV4dGVybiBpbnQgZmlsZXBlZWssIG5zY2FuZmlsZSwgZnNl Y3MsIHhmZXJzdGF0LCB4ZmVybW9kZSwgbGFzdHhmZXIsIHRzZWNzOwotZXh0ZXJuIGludCBiYWNr Z3JkLCBzcGFja2V0cywgcnBhY2tldHMsIHNwa3RsLCBycGt0bCwgeGFza21vcmUsIGNtZF9yb3dz OwotZXh0ZXJuIGludCBub2xpbmtzLCBtc2dmbGcsIGtlZXA7Ci1leHRlcm4gQ0tfT0ZGX1QgZnNp emUsIGZmYywgdGZjLCBzZW5kc3RhcnQsIHNuZHNtYWxsZXIsIHNuZGxhcmdlciwgcnNfbGVuOwot ZXh0ZXJuIGxvbmcgZmlsY250LCB4ZnNlY3MsIHRmY3BzLCBjcHMsIG9sZGNwczsKLQotI2lmZGVm IEZUUF9USU1FT1VUCi1pbnQgZnRwX3RpbWVkX291dCA9IDA7Ci1sb25nIGZ0cF90aW1lb3V0ID0g MDsKLSNlbmRpZgkvKiBGVFBfVElNRU9VVCAqLwotCi0jaWZkZWYgR0ZUSU1FUgotZXh0ZXJuIENL RkxPQVQgZnB0c2VjcywgZnBmc2VjcywgZnB4ZnNlY3M7Ci0jZWxzZQotZXh0ZXJuIGxvbmcgeGZz ZWNzOwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLQotZXh0ZXJuIGNoYXIgZmlsbmFtW10sICogZmls ZWZpbGUsIG15aG9zdFtdOwotZXh0ZXJuIGNoYXIgKiBzbmRfbW92ZSwgKiByY3ZfbW92ZSwgKiBz bmRfcmVuYW1lLCAqIHJjdl9yZW5hbWU7Ci1leHRlcm4gaW50IGdfc2tpcGJ1cCwgc2tpcGJ1cCwg c2VuZG1vZGU7Ci1leHRlcm4gaW50IGdfZGlzcGxhLCBmZGlzcGxhLCBkaXNwbGE7Ci0KLSNpZmRl ZiBMT0NVUwotZXh0ZXJuIGludCBsb2N1cywgYXV0b2xvY3VzOwotI2VuZGlmIC8qIExPQ1VTICov Ci0KLSNpZm5kZWYgTk9DU0VUUwotZXh0ZXJuIGludCBuZmlsYywgZGNzZXQ3LCBkY3NldDgsIGZp bGVvcmRlcjsKLWV4dGVybiBzdHJ1Y3QgY3NpbmZvIGZjc2luZm9bXTsKLWV4dGVybiBzdHJ1Y3Qg a2V5dGFiIGZjc3RhYltdOwotZXh0ZXJuIGludCBmY2hhcnNldDsKLSNlbmRpZiAvKiBOT0NTRVRT ICovCi0KLWV4dGVybiBjaGFyIHNuZGJlZm9yZVtdLCBzbmRhZnRlcltdLCAqc25kZXhjZXB0W107 IC8qIFNlbGVjdGlvbiBjcml0ZXJpYSAqLwotZXh0ZXJuIGNoYXIgc25kbmJlZm9yZVtdLCBzbmRu YWZ0ZXJbXSwgKnJjdmV4Y2VwdFtdOwotZXh0ZXJuIENIQVIgZmVvbDsKLQotZXh0ZXJuIGNoYXIg KiByZW1kZXN0OwotZXh0ZXJuIGludCByZW1maWxlLCByZW1hcHBkLCByZW1waXBlOwotCi0jaWZu ZGVmIE5PU1BMCi1leHRlcm4gaW50IGNtZF9xdW90aW5nOwotI2lmZGVmIFBVVEFSUkFZCi1leHRl cm4gaW50IHNuZHhsbywgc25keGhpLCBzbmR4aW47Ci1leHRlcm4gY2hhciBzbmR4bmFtW107Ci1l eHRlcm4gY2hhciAqKmFfcHRyW107ICAgICAgICAgICAgICAgICAgLyogQXJyYXkgcG9pbnRlcnMg Ki8KLWV4dGVybiBpbnQgYV9kaW1bXTsgICAgICAgICAgICAgICAgICAgICAvKiBBcnJheSBkaW1l bnNpb25zICovCi0jZW5kaWYgLyogUFVUQVJSQVkgKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0j aWZuZGVmIE5PTVNFTkQgICAgICAgICAgICAgICAgICAgICAgICAgLyogTVBVVCBhbmQgQUREIFNF TkQtTElTVCBsaXN0cyAqLwotZXh0ZXJuIGNoYXIgKm1zZmlsZXNbXTsKLWV4dGVybiBpbnQgZmls ZXNpbmxpc3Q7Ci1leHRlcm4gc3RydWN0IGZpbGVsaXN0ICogZmlsZWhlYWQ7Ci1leHRlcm4gc3Ry dWN0IGZpbGVsaXN0ICogZmlsZXRhaWw7Ci1leHRlcm4gc3RydWN0IGZpbGVsaXN0ICogZmlsZW5l eHQ7Ci1leHRlcm4gaW50IGFkZGxpc3Q7Ci1leHRlcm4gY2hhciBmc3BlY1tdOyAgICAgICAgICAg ICAgICAgICAgLyogTW9zdCByZWNlbnQgZmlsZXNwZWMgKi8KLWV4dGVybiBpbnQgZnNwZWNsZW47 ICAgICAgICAgICAgICAgICAgICAvKiBMZW5ndGggb2YgZnNwZWNbXSBidWZmZXIgKi8KLSNlbmRp ZiAvKiBOT01TRU5EICovCi0KLWV4dGVybiBpbnQgcGlwZXNlbmQ7Ci0jaWZkZWYgUElQRVNFTkQK LWV4dGVybiBjaGFyICogc25kZmlsdGVyLCAqIHJjdmZpbHRlcjsKLSNlbmRpZiAvKiBQSVBFU0VO RCAqLwotCi0jaWZkZWYgQ0tST09UCi1leHRlcm4gaW50IGNrcm9vdGVycjsKLSNlbmRpZiAvKiBD S1JPT1QgKi8KLQotI2lmZGVmIEtSQjQKLWV4dGVybiBpbnQga3JiNF9hdXRvZ2V0OwotX1BST1RP VFlQKGNoYXIgKiBja19rcmI0X3JlYWxtb2Zob3N0LChjaGFyICopKTsKLSNlbmRpZiAvKiBLUkI0 ICovCi0KLSNpZmRlZiBLUkI1Ci1leHRlcm4gaW50IGtyYjVfYXV0b2dldDsKLWV4dGVybiBpbnQg a3JiNV9kX25vX2FkZHJlc3NlczsKLV9QUk9UT1RZUChjaGFyICogY2tfa3JiNV9yZWFsbW9maG9z dCwoY2hhciAqKSk7Ci0jZW5kaWYgLyogS1JCNSAqLwotCi0jaWZkZWYgRENNREJVRgotZXh0ZXJu IGNoYXIgKmF0bWJ1ZjsgICAgICAgICAgICAgICAgICAgIC8qIEF0b20gYnVmZmVyIChtYWxsb2Mn ZCkgKi8KLWV4dGVybiBjaGFyICpjbWRidWY7ICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5k IGJ1ZmZlciAobWFsbG9jJ2QpICovCi1leHRlcm4gY2hhciAqbGluZTsgICAgICAgICAgICAgICAg ICAgICAgLyogQmlnIHN0cmluZyBidWZmZXIgIzEgKi8KLWV4dGVybiBjaGFyICp0bXBidWY7ICAg ICAgICAgICAgICAgICAgICAvKiBCaWcgc3RyaW5nIGJ1ZmZlciAjMiAqLwotI2Vsc2UKLWV4dGVy biBjaGFyIGF0bWJ1ZltdOyAgICAgICAgICAgICAgICAgICAvKiBUaGUgc2FtZSwgYnV0IHN0YXRp YyAqLwotZXh0ZXJuIGNoYXIgY21kYnVmW107Ci1leHRlcm4gY2hhciBsaW5lW107Ci1leHRlcm4g Y2hhciB0bXBidWZbXTsKLSNlbmRpZiAvKiBEQ01EQlVGICovCi0KLWV4dGVybiBjaGFyICogY21h cmcsICogY21hcmcyLCAqKiBjbWxpc3Q7IC8qIEZvciBzZXR0aW5nIHVwIGZpbGUgbGlzdHMgKi8K LQotLyogUHVibGljIHZhcmlhYmxlcyBkZWNsYXJlZCBoZXJlICovCi0KLSNpZmRlZiBOT1hGRVIK LWludCBmdHBnZXQgID0gIDE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBHRVQvUFVUL1JFTU9U RSBvcmllbnRhdGlvbiBGVFAgKi8KLSNlbHNlCi1pbnQgZnRwZ2V0ICA9ICAyOyAgICAgICAgICAg ICAgICAgICAgICAgLyogR0VUL1BVVC9SRU1PVEUgb3JpZW50YXRpb24gQVVUTyAqLwotI2VuZGlm IC8qIE5PWEZFUiAqLwotaW50IGZ0cGNvZGUgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgIC8q IExhc3QgRlRQIHJlc3BvbnNlIGNvZGUgKi8KLWludCBmdHBfY21kbGluID0gMDsgICAgICAgICAg ICAgICAgICAgICAvKiBGVFAgaW52b2tlZCBmcm9tIGNvbW1hbmQgbGluZSAqLwotaW50IGZ0cF9m YWkgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZUUCBmYWlsdXJlIGNvdW50ICovCi1p bnQgZnRwX2RlYiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRlRQIGRlYnVnZ2luZyAq LwotaW50IGZ0cF9kaXMgPSAtMTsJCQkvKiBGVFAgZGlzcGxheSBzdHlsZSAqLwotaW50IGZ0cF9s b2cgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZUUCBBdXRvLWxvZ2luICovCi1pbnQg c2F2X2xvZyA9IC0xOwotaW50IGZ0cF9hY3Rpb24gPSAwOyAgICAgICAgICAgICAgICAgICAgIC8q IEZUUCBhY3Rpb24gZnJvbSBjb21tYW5kIGxpbmUgKi8KLWludCBmdHBfZGF0ZXMgPSAxOyAgICAg ICAgICAgICAgICAgICAgICAvKiBTZXQgZmlsZSBkYXRlcyBmcm9tIHNlcnZlciAqLwotaW50IGZ0 cF94ZmVybW9kZSA9IFhNT0RFX0E7CQkvKiBGVFAtc3BlY2lmaWMgdHJhbnNmZXIgbW9kZSAqLwot Ci1jaGFyIGZ0cF9yZXBseV9zdHJbRlRQX0JVRlNJWl0gPSAiIjsgICAgLyogTGFzdCBsaW5lIG9m IHByZXZpb3VzIHJlcGx5ICovCi1jaGFyIGZ0cF9zcnZ0eXBbU1JWTkFNTEVOXSA9IHsgTlVMLCBO VUwgfTsgLyogU2VydmVyJ3Mgc3lzdGVtIHR5cGUgKi8KLWNoYXIgZnRwX3VzZXJfaG9zdFtNQVhf RE5TX05BTUVMRU5dPSAiIjsgLyogRlRQIGhvc3RuYW1lIHNwZWNpZmllZCBieSB1c2VyICovCi1j aGFyICogZnRwX2hvc3QgPSBOVUxMOyAgICAgICAgICAgICAgICAgLyogRlRQIGhvc3RuYW1lICov Ci1jaGFyICogZnRwX2xvZ25hbWUgPSBOVUxMOyAgICAgICAgICAgICAgLyogRlRQIHVzZXJuYW1l ICovCi1jaGFyICogZnRwX3JkaXIgPSBOVUxMOyAgICAgICAgICAgICAgICAgLyogUmVtb3RlIGRp cmVjdG9yeSBmcm9tIGNtZGxpbmUgKi8KLWNoYXIgKiBmdHBfYXB3ID0gTlVMTDsJCQkvKiBBbm9u eW1vdXMgcGFzc3dvcmQgKi8KLQotLyogRGVmaW5pdGlvbnMgYW5kIHR5cGVkZWZzIG5lZWRlZCBm b3IgcHJvdG90eXBlcyAqLwotCi0jZGVmaW5lIHNpZ190IG15X3NpZ190Ci0jZGVmaW5lIHNpZ3R5 cGUgU0lHVFlQCi10eXBlZGVmIHNpZ3R5cGUgKCpzaWdfdCkoKTsKLQotLyogU3RhdGljIGdsb2Jh bCB2YXJpYWJsZXMgKi8KLQotc3RhdGljIGNoYXIgZnRwc25kYnVmW0ZUUF9CVUZTSVorNjRdOwot Ci1zdGF0aWMgY2hhciAqIGZ0c19zdG8gPSBOVUxMOwotCi1zdGF0aWMgaW50IGZ0cHNuZHJldCA9 IDA7Ci1zdGF0aWMgc3RydWN0IF9mdHBzbmQgewotICAgIHNpZ190IG9sZGludHIsIG9sZGludHA7 Ci0gICAgaW50ICAgICAgICAgICAgcmVwbHk7Ci0gICAgaW50ICAgICAgICAgICAgaW5jcywKLSAg ICAgICAgICAgICAgICAgICBvdXRjczsKLSAgICBjaGFyICogICAgICAgICBjbWQsICogbG9jYWws ICogcmVtb3RlOwotICAgIGludCAgICAgICAgICAgIGJ5dGVzOwotICAgIGludCAgICAgICAgICAg IHJlc3RhcnQ7Ci0gICAgaW50ICAgICAgICAgICAgeGxhdGU7Ci0gICAgY2hhciAqICAgICAgICAg bG1vZGU7Ci19IGZ0cHNuZDsKLQotLyoKLSAgVGhpcyBpcyBqdXN0IGEgZmlyc3Qgc3RhYiAtLSB0 aGVzZSBzdHJpbmdzIHNob3VsZCBtYXRjaCBob3cgdGhlCi0gIGNvcnJlc3BvbmRpbmcgRlRQIHNl cnZlcnMgaWRlbnRpZnkgdGhlbXNlbHZlcy4KLSovCi0jaWZkZWYgVU5JWAotc3RhdGljIGNoYXIg KiBteW9zdHlwZSA9ICJVTklYIjsKLSNlbHNlCi0jaWZkZWYgVk1TCi0vKiBub3QgeWV0Li4uICov Ci1zdGF0aWMgY2hhciAqIG15b3N0eXBlID0gIlZNUyI7Ci0jZWxzZQotI2lmZGVmIE9TMgotI2lm ZGVmIE5UCi1zdGF0aWMgY2hhciAqIG15b3N0eXBlID0gIldJTjMyIjsKLSNlbHNlCi1zdGF0aWMg Y2hhciAqIG15b3N0eXBlID0gIk9TLzIiOwotI2VuZGlmIC8qIE5UICovCi0jZWxzZQotc3RhdGlj IGNoYXIgKiBteW9zdHlwZSA9ICJVTlNVUFBPUlRFRCI7Ci0jZW5kaWYgLyogT1MyICAqLwotI2Vu ZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIFVOSVggKi8KLQotc3RhdGljIGludCBub2luaXQgPSAw OyAgICAgICAgICAgICAgICAgIC8qIERvbid0IHNlbmQgUkVTVCwgU1RSVSwgTU9ERSAqLwotc3Rh dGljIGludCBhbGlrZSA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIENsaWVudC9zZXJ2ZXIgbGlr ZSBwbGF0Zm9ybXMgKi8KLXN0YXRpYyBpbnQgbG9jYWwgPSAxOyAgICAgICAgICAgICAgICAgICAv KiBTaGFkb3dzIEtlcm1pdCBnbG9iYWwgJ2xvY2FsJyAqLwotc3RhdGljIGludCBkb3V0ID0gLTE7 ICAgICAgICAgICAgICAgICAgIC8qIERhdGEgY29ubmVjdGlvbiBmaWxlIGRlc2NyaXB0b3IgKi8K LXN0YXRpYyBpbnQgZHB5YWN0aXZlID0gMDsgICAgICAgICAgICAgICAvKiBEYXRhIHRyYW5zZmVy IGlzIGFjdGl2ZSAqLwotc3RhdGljIGludCBnbG9iYWxkaW4gPSAtMTsgICAgICAgICAgICAgIC8q IERhdGEgY29ubmVjdGlvbiBmLmQuICovCi1zdGF0aWMgaW50IG91dDJzY3JlZW4gPSAwOyAgICAg ICAgICAgICAgLyogR0VUIG91dHB1dCBpcyB0byBzY3JlZW4gKi8KLXN0YXRpYyBpbnQgZm9yY2V0 eXBlID0gMDsgICAgICAgICAgICAgICAvKiBGb3JjZSB0ZXh0IG9yIGJpbmFyeSBtb2RlICovCi1z dGF0aWMgaW50IGNhbmNlbGZpbGUgPSAwOyAgICAgICAgICAgICAgLyogRmlsZSBjYW5jZWxlZCAq Lwotc3RhdGljIGludCBjYW5jZWxncm91cCA9IDA7ICAgICAgICAgICAgIC8qIEdyb3VwIGNhbmNl bGVkICovCi1zdGF0aWMgaW50IGFub255bW91cyA9IDA7ICAgICAgICAgICAgICAgLyogTG9nZ2lu ZyBpbiBhcyBhbm9ueW1vdXMgKi8KLXN0YXRpYyBpbnQgbG9nZ2VkaW4gPSAwOyAgICAgICAgICAg ICAgICAvKiBMb2dnZWQgaW4gKG9yIG5vdCkgKi8KLXN0YXRpYyBpbnQgcHV0ZXJyb3IgPSAwOyAg ICAgICAgICAgICAgICAvKiBXaGF0IHRvIGRvIG9uIFBVVCBlcnJvciAqLwotc3RhdGljIGludCBn ZXRlcnJvciA9IDA7ICAgICAgICAgICAgICAgIC8qIFdoYXQgdG8gZG8gb24gR0VUIGVycm9yICov Ci1zdGF0aWMgaW50IHJmcmMgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogcmVtb3RlX2ZpbGVz KCkgcmV0dXJuIGNvZGUgKi8KLXN0YXRpYyBpbnQgb2tyZXN0YXJ0ID0gMDsgICAgICAgICAgICAg ICAvKiBTZXJ2ZXIgdW5kZXJzdGFuZHMgUkVTVCAqLwotc3RhdGljIGludCBwcmludGxpbmVzID0g MDsgICAgICAgICAgICAgIC8qIGdldHJlcGx5KClzaG91bGQgcHJpbnQgZGF0YSBsaW5lcyAqLwot c3RhdGljIGludCBoYXZldXJsID0gMDsgICAgICAgICAgICAgICAgIC8qIEludm9rZWQgYnkgY29t bWFuZC1saW5lIEZUUCBVUkwgKi8KLXN0YXRpYyBpbnQgbWR0bW9rID0gMTsJCQkvKiBTZXJ2ZXIg c3VwcG9ydHMgTURUTSAqLwotc3RhdGljIGludCBzaXplb2sgPSAxOwotc3RhdGljIGludCBmZWF0 b2sgPSAxOwotc3RhdGljIGludCBtbHN0b2sgPSAxOwotc3RhdGljIGludCBzdG91YXJnID0gMTsK LXN0YXRpYyBpbnQgdHlwZXNlbnQgPSAwOwotc3RhdGljIGludCBoYXZlc2lnaW50ID0gMDsKLXN0 YXRpYyBsb25nIGhhdmV0eXBlID0gIDA7Ci1zdGF0aWMgQ0tfT0ZGX1QgaGF2ZXNpemUgPSAoQ0tf T0ZGX1QpLTE7Ci1zdGF0aWMgY2hhciAqIGhhdmVtZHRtID0gTlVMTDsKLXN0YXRpYyBpbnQgbWdl dG1ldGhvZCA9IDA7CQkvKiBOTFNUIG9yIE1MU0QgKi8KLXN0YXRpYyBpbnQgbWdldGZvcmNlZCA9 IDA7Ci0KLXN0YXRpYyBpbnQgaSwgLyogaiwgaywgKi8geCwgeSwgejsgICAgICAvKiBWb2xhdGls ZSB0ZW1wb3JhcmllcyAqLwotc3RhdGljIGludCBjMCwgYzE7ICAgICAgICAgICAgICAgICAgICAg IC8qIFRlbXAgdmFyaWFibGVzIGZvciBjaGFyYWN0ZXJzICovCi0KLXN0YXRpYyBjaGFyIHB1dHBh dGhbQ0tNQVhQQVRIKzFdID0geyBOVUwsIE5VTCB9Owotc3RhdGljIGNoYXIgYXNuYW1idWZbQ0tN QVhQQVRIKzFdID0geyBOVUwsIE5VTCB9OwotCi0jZGVmaW5lIFJGTkJVRlNJWiA0MDk2CQkJLyog UmVtb3RlIGZpbGVuYW1lIGJ1ZmZlciBzaXplICovCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbWF4 YnVmID0gMCwgYWN0dWFsYnVmID0gMDsKLXN0YXRpYyBDSEFSICp1Y2J1ZiA9IE5VTEw7Ci1zdGF0 aWMgaW50IHVjYnVmc2l6ID0gMDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbm91dCA9IDA7ICAgICAg ICAgICAvKiBOdW1iZXIgb2YgY2hhcnMgaW4gdWNidWYgKi8KLQotc3RhdGljIGptcF9idWYgcmVj dmNhbmNlbDsKLXN0YXRpYyBqbXBfYnVmIHNlbmRjYW5jZWw7Ci1zdGF0aWMgam1wX2J1ZiBwdGNh bmNlbDsKLXN0YXRpYyBqbXBfYnVmIGpjYW5jZWw7Ci1zdGF0aWMgaW50IHB0YWJmbGcgPSAwOwot Ci0vKiBQcm90ZWN0aW9uIGxldmVsIHN5bWJvbHMgKi8KLQotI2RlZmluZSBGUExfQ0xSIDEgICAg ICAgICAgICAgICAgICAgICAgIC8qIENsZWFyICovCi0jZGVmaW5lIEZQTF9TQUYgMiAgICAgICAg ICAgICAgICAgICAgICAgLyogU2FmZSAqLwotI2RlZmluZSBGUExfUFJWIDMgICAgICAgICAgICAg ICAgICAgICAgIC8qIFByaXZhdGUgKi8KLSNkZWZpbmUgRlBMX0NPTiA0ICAgICAgICAgICAgICAg ICAgICAgICAvKiBDb25maWRlbnRpYWwgKi8KLQotLyogU3ltYm9scyBmb3IgZmlsZSB0eXBlcyBy ZXR1cm5lZCBieSBNTFNUL01MU0QgKi8KLQotI2RlZmluZSBGVFlQX0ZJTEUgMQkJCS8qIFJlZ3Vs YXIgZmlsZSAqLwotI2RlZmluZSBGVFlQX0RJUiAgMgkJCS8qIERpcmVjdG9yeSAqLwotI2RlZmlu ZSBGVFlQX0NESVIgMwkJCS8qIEN1cnJlbnQgZGlyZWN0b3J5ICovCi0jZGVmaW5lIEZUWVBfUERJ UiA0CQkJLyogUGFyZW50IGRpcmVjdG9yeSAqLwotCi0vKiBGaWxlIHR5cGUgc3ltYm9scyBrZXll ZCB0byB0aGUgZmlsZS10eXBlIHN5bWJvbHMgZnJvbSBja2NrZXIuaCAqLwotCi0jZGVmaW5lIEZU VF9BU0MgWFlGVF9UICAgICAgICAgICAgICAgICAgLyogQVNDSUkgKHRleHQpICovCi0jZGVmaW5l IEZUVF9CSU4gWFlGVF9CICAgICAgICAgICAgICAgICAgLyogQmluYXJ5IChpbWFnZSkgKi8KLSNk ZWZpbmUgRlRUX1RFTiBYWUZUX1ggICAgICAgICAgICAgICAgICAvKiBURU5FWCAoVE9QUy0yMCkg Ki8KLQotLyogU2VydmVyIGZlYXR1cmUgdGFibGUgLSBzZnR0YWJbMF0gPiAwIG1lYW5zIHNlcnZl ciBzdXBwb3J0cyBGRUFUIGFuZCBPUFRTICovCi0KLXN0YXRpYyBpbnQgc2Z0dGFiWzE2XSA9IHsg MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCB9OwotCi0jZGVmaW5lIFNGVF9BVVRIICAx CQkJLyogRlRQIHNlcnZlciBmZWF0dXJlIGNvZGVzICovCi0jZGVmaW5lIFNGVF9MQU5HICAyCi0j ZGVmaW5lIFNGVF9NRFRNICAzCi0jZGVmaW5lIFNGVF9NTFNUICA0Ci0jZGVmaW5lIFNGVF9QQlNa ICA1Ci0jZGVmaW5lIFNGVF9QUk9UICA2Ci0jZGVmaW5lIFNGVF9SRVNUICA3Ci0jZGVmaW5lIFNG VF9TSVpFICA4Ci0jZGVmaW5lIFNGVF9UVkZTICA5Ci0jZGVmaW5lIFNGVF9VVEY4IDEwCi0KLSNk ZWZpbmUgQ05WX0FVVE8gIDIJCQkvKiBGVFAgZmlsZW5hbWUgY29udmVyc2lvbiAqLwotI2RlZmlu ZSBDTlZfQ05WICAgMQotI2RlZmluZSBDTlZfTElUICAgMAotCi0vKiBTRVQgRlRQIHZhbHVlcyAq LwotCi1zdGF0aWMgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0VUIEZUUCB2 YWx1ZXMuLi4gKi8KLSAgZnRwX2F1dCA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBB dXRvLWF1dGhlbnRpY2F0aW9uICovCi0jaWZkZWYgRlRQX1NFQ1VSSVRZCi0gIGZ0cF9jcnkgPSAx LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXV0by1lbmNyeXB0aW9uICovCi0gIGZ0cF9j ZncgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ3JlZGVudGlhbCBmb3J3YXJkaW5n ICovCi0jZW5kaWYgLyogRlRQX1NFQ1VSSVRZICovCi0gIGZ0cF9jcGwgPSBGUExfQ0xSLCAgICAg ICAgICAgICAgICAgICAgLyogQ29tbWFuZCBwcm90ZWN0aW9uIGxldmVsICovCi0gIGZ0cF9kcGwg PSBGUExfQ0xSLCAgICAgICAgICAgICAgICAgICAgLyogRGF0YSBwcm90ZWN0aW9uIGxldmVsICov Ci0jaWZkZWYgRlRQX1BST1hZCi0gIGZ0cF9wcnggPSAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogVXNlIHByb3h5ICovCi0jZW5kaWYgLyogRlRQX1BST1hZICovCi0gIHNhdl9wc3YgPSAt MSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIHNhdmluZyBwYXNzaXZlIG1vZGUgKi8K LSAgZnRwX3BzdiA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQYXNzaXZlIG1vZGUg Ki8KLSAgZnRwX3NwYyA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIHBvcnQg Y29tbWFuZHMgKi8KLSAgZnRwX3R5cCA9IEZUVF9BU0MsICAgICAgICAgICAgICAgICAgICAvKiBU eXBlICovCi0gIGdldF9hdXRvID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXV0b21h dGljIHR5cGUgc3dpdGNoaW5nIGZvciBHRVQgKi8KLSAgdGVuZXggPSAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBUeXBlIGlzIFRlbmV4ICovCi0gIGZ0cF91c24gPSAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogVW5pcXVlIHNlcnZlciBuYW1lcyAqLwotICBmdHBfcHJtID0g MCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBlcm1pc3Npb25zICovCi0gIGZ0cF9jbnYg PSBDTlZfQVVUTywJCQkvKiBGaWxlbmFtZSBjb252ZXJzaW9uICgyID0gYXV0bykgKi8KLSAgZnRw X3ZibSA9IERFRl9WQk0sICAgICAgICAgICAgICAgICAgICAvKiBWZXJib3NlIG1vZGUgKi8KLSAg ZnRwX3ZieCA9IERFRl9WQk0sICAgICAgICAgICAgICAgICAgICAvKiBTdGlja3kgdmVyc2lvbiBv ZiBzYW1lICovCi0gIGZ0cF9lcnIgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRXJy b3IgYWN0aW9uICovCi0gIGZ0cF9mbmMgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyog RmlsZW5hbWUgY29sbGlzaW9uIGFjdGlvbiAqLwotCi0jaWZkZWYgQ0tfU1NMCi1zdGF0aWMgaW50 IGZ0cF9idWdfdXNlX3NzbF92MiA9IDA7ICAgICAgLyogdXNlIFNTTHYyIGZvciBBVVRIIFNTTCAq LwotI2VuZGlmIC8qIENLX1NTTCAqLwotCi1zdGF0aWMgaW50Ci0jaWZkZWYgTk9DU0VUUwotICBm dHBfY3NyID0gLTEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlbW90ZSAoc2VydmVyKSBj aGFyYWN0ZXIgc2V0ICovCi0jZWxzZQotICBmdHBfY3NyID0gRkNfVVRGOCwKLSNlbmRpZiAvKiBO T0NTRVRTICovCi0gIGZ0cF94bGEgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hh cmFjdGVyLXNldCB0cmFuc2xhdGlvbiBvbi9vZmYgKi8KLWludAotICBmdHBfY3N4ID0gLTEsICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFJlbW90ZSBjaGFyc2V0IGN1cnJlbnRseSBpbiB1c2Ug Ki8KLSAgZnRwX2NzbCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb2NhbCBjaGFy c2V0IGN1cnJlbnRseSBpbiB1c2UgKi8KLQotc3RhdGljIGludCBnX2Z0cF90eXAgPSBGVFRfQVND OyAgICAgICAgIC8qIEZvciBzYXZpbmcgYW5kIHJlc3RvcmluZyBmdHBfdHlwICovCi0KLWNoYXIg KiBmdHBfbm1sID0gTlVMTDsgICAgICAgICAgICAgICAgICAvKiAvTkFNRUxJU1QgKi8KLWNoYXIg KiBmdHBfdG1wID0gTlVMTDsgICAgICAgICAgICAgICAgICAvKiBUZW1wb3Jhcnkgc3RyaW5nICov Ci1zdGF0aWMgY2hhciAqIGZ0cF9hY2MgPSBOVUxMOyAgICAgICAgICAgLyogQWNjb3VudCBzdHJp bmcgKi8KLXN0YXRpYyBjaGFyICogYXV0aF90eXBlID0gTlVMTDsgICAgICAgICAvKiBBdXRoZW50 aWNhdGlvbiB0eXBlICovCi1zdGF0aWMgY2hhciAqIHNydl9yZW5hbSA9IE5VTEw7ICAgICAgICAg LyogU2VydmVyLXJlbmFtZSBzdHJpbmcgKi8KLUZJTEUgKiBmcF9ubWwgPSBOVUxMOyAgICAgICAg ICAgICAgICAgICAvKiBOYW1lbGlzdCBmaWxlIHBvaW50ZXIgKi8KLQotc3RhdGljIGludCBjc29j a2V0ID0gLTE7ICAgICAgICAgICAgICAgIC8qIENvbnRyb2wgc29ja2V0ICovCi1zdGF0aWMgaW50 IGNvbm5lY3RlZCA9IDA7ICAgICAgICAgICAgICAgLyogQ29ubmVjdGVkIHRvIEZUUCBzZXJ2ZXIg Ki8KLS8qIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBmdHBfcG9ydCA9IDA7ICovIC8qIEZUUCBwb3J0 ICovIAotLyogc3RhdGljIGludCBmdHBfcG9ydCA9IDA7ICovCQkvKiBTTVMgMjAwNy8wMi8xNSAq Lwotc3RhdGljIGludCBmdHBfcG9ydCA9IDA7CQkvKiBmZGMgMjAwNy8wOC8zMCAqLwotI2lmZGVm IEZUUEhPU1QKLXN0YXRpYyBpbnQgaG9zdGNtZCA9IDA7ICAgICAgICAgICAgICAgICAvKiBIYXMg SE9TVCBjb21tYW5kIGJlZW4gc2VudCAqLwotI2VuZGlmIC8qIEZUUEhPU1QgKi8KLXN0YXRpYyBp bnQgZm9ybSwgbW9kZSwgc3RydSwgYnl0ZXNpemUsIGN1cnR5cGUgPSBGVFRfQVNDOwotc3RhdGlj IGNoYXIgYnl0ZW5hbWVbOF07Ci0KLS8qIEZvciBwYXJzaW5nIHJlcGxpZXMgdG8gRlRQIHNlcnZl ciBjb21tYW5kICovCi1zdGF0aWMgY2hhciAqcmVwbHlfcGFyc2UsIHJlcGx5X2J1ZltGVFBfQlVG U0laXSwgKnJlcGx5X3B0cjsKLQotI2lmZGVmIEZUUF9QUk9YWQotc3RhdGljIGludCBwcm94eSwg dW5peF9wcm94eQotI2VuZGlmIC8qIEZUUF9QUk9YWSAqLwotCi1zdGF0aWMgY2hhciBwYXN2WzY0 XTsgICAgICAgICAgICAgICAgICAgLyogUGFzc2l2ZS1tb2RlIHBvcnQgKi8KLXN0YXRpYyBpbnQg cGFzc2l2ZW1vZGUgPSAwOwotc3RhdGljIGludCBzZW5kcG9ydCA9IDA7Ci1zdGF0aWMgaW50IHNl cnZlcnR5cGUgPSAwOyAgICAgICAgICAgICAgLyogRlRQIHNlcnZlcidzIE9TIHR5cGUgKi8KLQot c3RhdGljIGludCB0ZXN0aW5nID0gMDsKLXN0YXRpYyBjaGFyIGZ0cGNtZGJ1ZltGVFBfQlVGU0la XTsKLQotLyogTWFjcm8gZGVmaW5pdGlvbnMgKi8KLQotI2RlZmluZSBVQyhiKSBja2l0b2EoKChp bnQpYikmMHhmZikKLSNkZWZpbmUgbnooeCkgKCh4KSA9PSAwID8gMSA6ICh4KSkKLQotLyogQ29t bWFuZCB0YWJsZXMgYW5kIGRlZmluaXRpb25zICovCi0KLSNkZWZpbmUgRlRQX0FDQyAgMSAgICAg ICAgICAgICAgICAgICAgICAvKiBGVFAgY29tbWFuZCBrZXl3b3JkIGNvZGVzICovCi0jZGVmaW5l IEZUUF9BUFAgIDIKLSNkZWZpbmUgRlRQX0NXRCAgMwotI2RlZmluZSBGVFBfQ0hNICA0Ci0jZGVm aW5lIEZUUF9DTFMgIDUKLSNkZWZpbmUgRlRQX0RFTCAgNgotI2RlZmluZSBGVFBfRElSICA3Ci0j ZGVmaW5lIEZUUF9HRVQgIDgKLSNkZWZpbmUgRlRQX0lETCAgOQotI2RlZmluZSBGVFBfTURFIDEw Ci0jZGVmaW5lIEZUUF9NREkgMTEKLSNkZWZpbmUgRlRQX01HRSAxMgotI2RlZmluZSBGVFBfTUtE IDEzCi0jZGVmaW5lIEZUUF9NT0QgMTQKLSNkZWZpbmUgRlRQX01QVSAxNQotI2RlZmluZSBGVFBf T1BOIDE2Ci0jZGVmaW5lIEZUUF9QVVQgMTcKLSNkZWZpbmUgRlRQX1BXRCAxOAotI2RlZmluZSBG VFBfUkdFIDE5Ci0jZGVmaW5lIEZUUF9SRU4gMjAKLSNkZWZpbmUgRlRQX1JFUyAyMQotI2RlZmlu ZSBGVFBfSExQIDIyCi0jZGVmaW5lIEZUUF9STUQgMjMKLSNkZWZpbmUgRlRQX1NUQSAyNAotI2Rl ZmluZSBGVFBfU0lUIDI1Ci0jZGVmaW5lIEZUUF9TSVogMjYKLSNkZWZpbmUgRlRQX1NZUyAyNwot I2RlZmluZSBGVFBfVU1BIDI4Ci0jZGVmaW5lIEZUUF9HVVAgMjkKLSNkZWZpbmUgRlRQX1VTUiAz MAotI2RlZmluZSBGVFBfUVVPIDMxCi0jZGVmaW5lIEZUUF9UWVAgMzIKLSNkZWZpbmUgRlRQX0ZF QSAzMwotI2RlZmluZSBGVFBfT1BUIDM0Ci0jZGVmaW5lIEZUUF9DSEsgMzUKLSNkZWZpbmUgRlRQ X1ZESSAzNgotI2RlZmluZSBGVFBfRU5BIDM3Ci0jZGVmaW5lIEZUUF9ESVMgMzgKLSNkZWZpbmUg RlRQX1JFUCAzOQotCi1zdHJ1Y3Qga2V5dGFiIGdwcnRhYltdID0geyAgICAgICAgICAgICAgLyog R0VULVBVVC1SRU1PVEUga2V5d29yZHMgKi8KLSAgICB7ICJhdXRvIiwgICAgMiwgMCB9LAotICAg IHsgImZ0cCIsICAgICAxLCAwIH0sCi0gICAgeyAia2VybWl0IiwgIDAsIDAgIH0KLX07Ci0KLXN0 YXRpYyBzdHJ1Y3Qga2V5dGFiIHFvcnBbXSA9IHsgICAgICAgICAvKiBRVUlUIG9yIFBST0NFRUQg a2V5d29yZHMgKi8KLSAgICB7ICJwcm9jZWVkIiwgMCwgMCB9LCAgICAgICAgICAgICAgICAvKiAw ID0gcHJvY2VlZCAqLwotICAgIHsgInF1aXQiLCAgICAxLCAwIH0gICAgICAgICAgICAgICAgIC8q IDEgPSBxdWl0ICovCi19OwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBmdHBjbWR0YWJbXSA9IHsg ICAgLyogRlRQIGNvbW1hbmQgdGFibGUgKi8KLSAgICB7ICJhY2NvdW50IiwgICBGVFBfQUNDLCAw IH0sCi0gICAgeyAiYXBwZW5kIiwgICAgRlRQX0FQUCwgMCB9LAotICAgIHsgImJ5ZSIsICAgICAg IEZUUF9DTFMsIDAgfSwKLSAgICB7ICJjZCIsICAgICAgICBGVFBfQ1dELCAwIH0sCi0gICAgeyAi Y2R1cCIsICAgICAgRlRQX0dVUCwgMCB9LAotICAgIHsgImNoZWNrIiwgICAgIEZUUF9DSEssIDAg fSwKLSAgICB7ICJjaG1vZCIsICAgICBGVFBfQ0hNLCAwIH0sCi0gICAgeyAiY2xvc2UiLCAgICAg RlRQX0NMUywgMCB9LAotICAgIHsgImN3ZCIsICAgICAgIEZUUF9DV0QsIENNX0lOViB9LAotICAg IHsgImRlbGV0ZSIsICAgIEZUUF9NREUsIDAgfSwKLSAgICB7ICJkaXJlY3RvcnkiLCBGVFBfRElS LCAwIH0sCi0gICAgeyAiZGlzYWJsZSIsICAgRlRQX0RJUywgMCB9LAotICAgIHsgImVuYWJsZSIs ICAgIEZUUF9FTkEsIDAgfSwKLSAgICB7ICJmZWF0dXJlcyIsICBGVFBfRkVBLCAwIH0sCi0gICAg eyAiZ2V0IiwgICAgICAgRlRQX0dFVCwgMCB9LAotICAgIHsgImhlbHAiLCAgICAgIEZUUF9ITFAs IDAgfSwKLSAgICB7ICJpZGxlIiwgICAgICBGVFBfSURMLCAwIH0sCi0gICAgeyAibG9naW4iLCAg ICAgRlRQX1VTUiwgQ01fSU5WIH0sCi0gICAgeyAibWRlbGV0ZSIsICAgRlRQX01ERSwgQ01fSU5W IH0sCi0gICAgeyAibWdldCIsICAgICAgRlRQX01HRSwgMCB9LAotICAgIHsgIm1rZGlyIiwgICAg IEZUUF9NS0QsIDAgfSwKLSAgICB7ICJtb2R0aW1lIiwgICBGVFBfTU9ELCAwIH0sCi0gICAgeyAi bXB1dCIsICAgICAgRlRQX01QVSwgMCB9LAotICAgIHsgIm9wZW4iLCAgICAgIEZUUF9PUE4sIDAg fSwKLSAgICB7ICJvcHQiLCAgICAgICBGVFBfT1BULCBDTV9JTlZ8Q01fQUJSIH0sCi0gICAgeyAi b3B0cyIsICAgICAgRlRQX09QVCwgQ01fSU5WIH0sCi0gICAgeyAib3B0aW9ucyIsICAgRlRQX09Q VCwgMCB9LAotICAgIHsgInB1dCIsICAgICAgIEZUUF9QVVQsIDAgfSwKLSAgICB7ICJwd2QiLCAg ICAgICBGVFBfUFdELCAwIH0sCi0gICAgeyAicXVpdCIsICAgICAgRlRQX0NMUywgQ01fSU5WIH0s Ci0gICAgeyAicXVvdGUiLCAgICAgRlRQX1FVTywgMCB9LAotICAgIHsgInJlZ2V0IiwgICAgIEZU UF9SR0UsIDAgfSwKLSAgICB7ICJyZW5hbWUiLCAgICBGVFBfUkVOLCAwIH0sCi0gICAgeyAicmVw dXQiLCAgICAgRlRQX1JFUCwgMCB9LAotICAgIHsgInJlc2VuZCIsICAgIEZUUF9SRVAsIENNX0lO ViB9LAotICAgIHsgInJlc2V0IiwgICAgIEZUUF9SRVMsIDAgfSwKLSAgICB7ICJybWRpciIsICAg ICBGVFBfUk1ELCAwIH0sCi0gICAgeyAic2VuZCIsICAgICAgRlRQX1BVVCwgQ01fSU5WIH0sCi0g ICAgeyAic2l0ZSIsICAgICAgRlRQX1NJVCwgMCB9LAotICAgIHsgInNpemUiLCAgICAgIEZUUF9T SVosIDAgfSwKLSAgICB7ICJzdGF0dXMiLCAgICBGVFBfU1RBLCAwIH0sCi0gICAgeyAic3lzdGVt IiwgICAgRlRQX1NZUywgMCB9LAotICAgIHsgInR5cGUiLCAgICAgIEZUUF9UWVAsIDAgfSwKLSAg ICB7ICJ1bWFzayIsICAgICBGVFBfVU1BLCAwIH0sCi0gICAgeyAidXAiLCAgICAgICAgRlRQX0dV UCwgQ01fSU5WIH0sCi0gICAgeyAidXNlciIsICAgICAgRlRQX1VTUiwgMCB9LAotICAgIHsgInZk aXJlY3RvcnkiLEZUUF9WREksIDAgfSwKLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50 IG5mdHBjbWQgPSAoc2l6ZW9mKGZ0cGNtZHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0g MTsKLQotI2RlZmluZSBPUE5fQU5PIDEJCQkvKiBGVFAgT1BFTiBzd2l0Y2ggY29kZXMgKi8KLSNk ZWZpbmUgT1BOX1BTVyAyCi0jZGVmaW5lIE9QTl9VU1IgMwotI2RlZmluZSBPUE5fQUNDIDQKLSNk ZWZpbmUgT1BOX0FDVCA1Ci0jZGVmaW5lIE9QTl9QU1YgNgotI2RlZmluZSBPUE5fVExTIDcKLSNk ZWZpbmUgT1BOX05JTiA4Ci0jZGVmaW5lIE9QTl9OT0wgOQotCi0jaWZkZWYgRlRQX1NFQ1VSSVRZ Ci0jaWZkZWYgQ0tfU1NMCi0jZGVmaW5lIFVTRVRMU1RBQgotc3RhdGljIHN0cnVjdCBrZXl0YWIg dGxzdGFiW10gPSB7ICAgICAgIC8qIEZUUCBTU0wvVExTIHN3aXRjaGVzICovCi0gICAgeyAiL3Nz bCIsICAgICAgIE9QTl9UTFMsIDAgICAgfSwKLSAgICB7ICIvdGxzIiwgICAgICAgT1BOX1RMUywg MCAgICB9LAotICAgIHsgIiIsIDAsIDAgfQotfTsKLXN0YXRpYyBpbnQgbnRsc3RhYiA9IChzaXpl b2YodGxzdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwotI2VuZGlmIC8qIENLX1NT TCAqLwotI2VuZGlmIC8qIEZUUF9TRUNVUklUWSAqLwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBm dHBzd2l0YWJbXSA9IHsgICAgLyogRlRQIGNvbW1hbmQgc3dpdGNoZXMgKi8KLSAgICB7ICIvYWNj b3VudCIsICAgT1BOX0FDQywgQ01fQVJHIH0sCi0gICAgeyAiL2FjdGl2ZSIsICAgIE9QTl9BQ1Qs IDAgICAgICB9LAotICAgIHsgIi9hbm9ueW1vdXMiLCBPUE5fQU5PLCAwICAgICAgfSwKLSAgICB7 ICIvbm9pbml0IiwgICAgT1BOX05JTiwgMCAgICAgIH0sCi0gICAgeyAiL25vbG9naW4iLCAgIE9Q Tl9OT0wsIDAgICAgICB9LAotICAgIHsgIi9wYXNzaXZlIiwgICBPUE5fUFNWLCAwICAgICAgfSwK LSAgICB7ICIvcGFzc3dvcmQiLCAgT1BOX1BTVywgQ01fQVJHIH0sCi0gICAgeyAiL3VzZXIiLCAg ICAgIE9QTl9VU1IsIENNX0FSRyB9LAotICAgIHsgIiIsIDAsIDAgfQotfTsKLXN0YXRpYyBpbnQg bmZ0cHN3aSA9IChzaXplb2YoZnRwc3dpdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAx OwotCi0vKiBGVFAgeyBFTkFCTEUsIERJU0FCTEUgfSBpdGVtcyAqLwotCi0jZGVmaW5lIEVOQV9G RUFUIDEKLSNkZWZpbmUgRU5BX01EVE0gMgotI2RlZmluZSBFTkFfTUxTVCAzCi0jZGVmaW5lIEVO QV9TSVpFIDQKLSNkZWZpbmUgRU5BX0FVVEggNQotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBmdHBl bmF0YWJbXSA9IHsKLSAgICB7ICJBVVRIIiwgIEVOQV9BVVRILCAwIH0sCi0gICAgeyAiRkVBVCIs ICBFTkFfRkVBVCwgMCB9LAotICAgIHsgIk1EVE0iLCAgRU5BX01EVE0sIDAgfSwKLSAgICB7ICJN TCIsICAgIEVOQV9NTFNULCBDTV9JTlZ8Q01fQUJSIH0sCi0gICAgeyAiTUxTIiwgICBFTkFfTUxT VCwgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgIk1MU0QiLCAgRU5BX01MU1QsIENNX0lOViB9LAot ICAgIHsgIk1MU1QiLCAgRU5BX01MU1QsIDAgfSwKLSAgICB7ICJTSVpFIiwgIEVOQV9TSVpFLCAw IH0sCi0gICAgeyAiIiwgMCwgMCB9Ci19Owotc3RhdGljIGludCBuZnRwZW5hID0gKHNpemVvZihm dHBlbmF0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLS8qIFNFVCBGVFAgY29t bWFuZCBrZXl3b3JkIGluZGljZXMgKi8KLQotI2RlZmluZSBGVFNfQVVUICAxICAgICAgICAgICAg ICAgICAgICAgIC8qIEF1dG9hdXRoZW50aWNhdGlvbiAqLwotI2RlZmluZSBGVFNfQ1JZICAyICAg ICAgICAgICAgICAgICAgICAgIC8qIEVuY3J5cHRpb24gKi8KLSNkZWZpbmUgRlRTX0xPRyAgMyAg ICAgICAgICAgICAgICAgICAgICAvKiBBdXRvbG9naW4gKi8KLSNkZWZpbmUgRlRTX0NQTCAgNCAg ICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIHByb3RlY3Rpb24gbGV2ZWwgKi8KLSNkZWZp bmUgRlRTX0NGVyAgNSAgICAgICAgICAgICAgICAgICAgICAvKiBDcmVkZW50aWFscyBmb3J3YXJk aW5nICovCi0jZGVmaW5lIEZUU19EUEwgIDYgICAgICAgICAgICAgICAgICAgICAgLyogRGF0YSBw cm90ZWN0aW9uIGxldmVsICovCi0jZGVmaW5lIEZUU19EQkcgIDcgICAgICAgICAgICAgICAgICAg ICAgLyogRGVidWdnaW5nICovCi0jZGVmaW5lIEZUU19QU1YgIDggICAgICAgICAgICAgICAgICAg ICAgLyogUGFzc2l2ZSBtb2RlICovCi0jZGVmaW5lIEZUU19TUEMgIDkgICAgICAgICAgICAgICAg ICAgICAgLyogU2VuZCBwb3J0IGNvbW1hbmRzICovCi0jZGVmaW5lIEZUU19UWVAgMTAgICAgICAg ICAgICAgICAgICAgICAgLyogKGZpbGUpIFR5cGUgKi8KLSNkZWZpbmUgRlRTX1VTTiAxMSAgICAg ICAgICAgICAgICAgICAgICAvKiBVbmlxdWUgc2VydmVyIG5hbWVzIChmb3IgZmlsZXMpICovCi0j ZGVmaW5lIEZUU19WQk0gMTIgICAgICAgICAgICAgICAgICAgICAgLyogVmVyYm9zZSBtb2RlICov Ci0jZGVmaW5lIEZUU19BVFAgMTMgICAgICAgICAgICAgICAgICAgICAgLyogQXV0aGVudGljYXRp b24gdHlwZSAqLwotI2RlZmluZSBGVFNfQ05WIDE0ICAgICAgICAgICAgICAgICAgICAgIC8qIEZp bGVuYW1lIGNvbnZlcnNpb24gKi8KLSNkZWZpbmUgRlRTX1RTVCAxNSAgICAgICAgICAgICAgICAg ICAgICAvKiBUZXN0IChwcm9ncmVzcykgbWVzc2FnZXMgKi8KLSNkZWZpbmUgRlRTX1BSTSAxNiAg ICAgICAgICAgICAgICAgICAgICAvKiAoZmlsZSkgUGVybWlzc2lvbnMgKi8KLSNkZWZpbmUgRlRT X1hMQSAxNyAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFyc2V0IHRyYW5zbGF0aW9uICovCi0j ZGVmaW5lIEZUU19DU1IgMTggICAgICAgICAgICAgICAgICAgICAgLyogU2VydmVyIGNoYXJzZXQg Ki8KLSNkZWZpbmUgRlRTX0VSUiAxOSAgICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciBhY3Rp b24gKi8KLSNkZWZpbmUgRlRTX0ZOQyAyMCAgICAgICAgICAgICAgICAgICAgICAvKiBDb2xsaXNp b24gKi8KLSNkZWZpbmUgRlRTX1NSUCAyMSAgICAgICAgICAgICAgICAgICAgICAvKiBTUlAgb3B0 aW9ucyAqLwotI2RlZmluZSBGVFNfR0ZUIDIyICAgICAgICAgICAgICAgICAgICAgIC8qIEdFVCBh dXRvbWF0aWMgZmlsZS10eXBlIHN3aXRjaGluZyAqLwotI2RlZmluZSBGVFNfREFUIDIzICAgICAg ICAgICAgICAgICAgICAgIC8qIFNldCBmaWxlIGRhdGVzICovCi0jZGVmaW5lIEZUU19TVE8gMjQJ CQkvKiBTZXJ2ZXIgdGltZSBvZmZzZXQgKi8KLSNkZWZpbmUgRlRTX0FQVyAyNQkJCS8qIEFub255 bW91cyBwYXNzd29yZCAqLwotI2RlZmluZSBGVFNfRElTIDI2CQkJLyogRmlsZS10cmFuc2ZlciBk aXNwbGF5IHN0eWxlICovCi0jZGVmaW5lIEZUU19CVUcgMjcgICAgICAgICAgICAgICAgICAgICAg LyogQnVnKHMpICovCi0jZGVmaW5lIEZUU19UTU8gMjgJCQkvKiBUaW1lb3V0ICovCi0KLS8qIEZU UCBCVUdTICovCi0KLSNkZWZpbmUgRlRCX1NWMiAgMSAgICAgICAgICAgICAgICAgICAgICAvKiB1 c2UgU1NMdjIgKi8KLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgZnRwYnVndGFiW10gPSB7Ci0gICAg eyAidXNlLXNzbC12MiIsICAgICBGVEJfU1YyLCAgICAgICAgMCB9Ci19Owotc3RhdGljIGludCBu ZnRwYnVnID0gKHNpemVvZihmdHBidWd0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQot LyogRlRQIFBVVCBvcHRpb25zIChtdXR1YWxseSBleGNsdXNpdmUsIG5vdCBhIGJpdG1hc2spICov Ci0KLSNkZWZpbmUgUFVUX1VQRCAxICAgICAgICAgICAgICAgICAgICAgICAvKiBVcGRhdGUgKi8K LSNkZWZpbmUgUFVUX1JFUyAyICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXN0YXJ0ICovCi0j ZGVmaW5lIFBVVF9TSU0gNCAgICAgICAgICAgICAgICAgICAgICAgLyogU2ltdWxhdGlvbiAqLwot I2RlZmluZSBQVVRfRElGIDgJCQkvKiBEYXRlcyBEaWZmZXIgKi8KLQotc3RhdGljIHN0cnVjdCBr ZXl0YWIgZnRwY29seHRhYltdID0geyAvKiBTRVQgRlRQIENPTExJU0lPTiBvcHRpb25zICovCi0j aWZuZGVmIE1BQwotICAgIHsgImFwcGVuZCIsICAgIFhZRlhfQSwgMCB9LCAgICAgICAgIC8qIGFw cGVuZCB0byBvbGQgZmlsZSAqLwotI2VuZGlmIC8qIE1BQyAqLwotI2lmZGVmIENPTU1FTlQKLSAg ICB7ICJhc2siLCAgICAgICBYWUZYX1EsIDAgfSwgICAgICAgICAvKiBhc2sgd2hhdCB0byBkbyAo bm90IGltcGxlbWVudGVkKSAqLwotI2VuZGlmCi0gICAgeyAiYmFja3VwIiwgICAgWFlGWF9CLCAw IH0sICAgICAgICAgLyogcmVuYW1lIG9sZCBmaWxlICovCi0jaWZuZGVmIE1BQwotICAgIHsgImRh dGVzLWRpZmZlciIsIFhZRlhfTSwgMCB9LAkvKiBhY2NlcHQgaWYgZGF0ZXMgZGlmZmVyICovCi0g ICAgeyAiZGlzY2FyZCIsICAgWFlGWF9ELCAwIH0sICAgICAgICAgLyogZG9uJ3QgYWNjZXB0IG5l dyBmaWxlICovCi0gICAgeyAibm8tc3VwZXJzZWRlIiwgWFlGWF9ELCBDTV9JTlYgfSwgLyogZGl0 dG8gKE1TSyBjb21wYXRpYmlsaXR5KSAqLwotI2VuZGlmIC8qIE1BQyAqLwotICAgIHsgIm92ZXJ3 cml0ZSIsIFhZRlhfWCwgMCB9LCAgICAgICAgIC8qIG92ZXJ3cml0ZSB0aGUgb2xkIGZpbGUgKi8K LSAgICB7ICJyZW5hbWUiLCAgICBYWUZYX1IsIDAgfSwgICAgICAgICAvKiByZW5hbWUgdGhlIGlu Y29taW5nIGZpbGUgKi8KLSNpZm5kZWYgTUFDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBUaGlzIGNyYXNoZXMgTWFjIEtlcm1pdC4gKi8KLSAgICB7ICJ1cGRhdGUiLCAgICBYWUZYX1Us IDAgfSwgICAgICAgICAvKiByZXBsYWNlIGlmIG5ld2VyICovCi0jZW5kaWYgLyogTUFDICovCi0g ICAgeyAiIiwgMCwgMCB9Ci19Owotc3RhdGljIGludCBuZnRwY29seCA9IChzaXplb2YoZnRwY29s eHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLQotCi0jaWZkZWYgRlRQX1NFQ1VS SVRZCi0vKiBGVFAgYXV0aGVudGljYXRpb24gb3B0aW9ucyAqLwotCi0jZGVmaW5lIEZUQV9BVVRP IDAgICAgICAgICAgICAgICAgICAgICAgLyogQXV0byAqLwotI2RlZmluZSBGVEFfU1JQICAxICAg ICAgICAgICAgICAgICAgICAgIC8qIFNSUCAqLwotI2RlZmluZSBGVEFfR0s1ICAyICAgICAgICAg ICAgICAgICAgICAgIC8qIEtlcmJlcm9zIDUgKi8KLSNkZWZpbmUgRlRBX0s0ICAgMyAgICAgICAg ICAgICAgICAgICAgICAvKiBLZXJiZXJvcyA0ICovCi0jZGVmaW5lIEZUQV9TU0wgIDQgICAgICAg ICAgICAgICAgICAgICAgLyogU1NMICovCi0jZGVmaW5lIEZUQV9UTFMgIDUgICAgICAgICAgICAg ICAgICAgICAgLyogVExTICovCi0KLS8qIEZUUCBhdXRoZW50aWNhdGlvbiB0eXBlcyAqLwotCi0j ZGVmaW5lIEZUUEFUWVBTIDgKLXN0YXRpYyBpbnQgZnRwX2F1dGhfdHlwZVtGVFBBVFlQU10gPSB7 Ci0jaWZkZWYgRlRQX0dTU0FQSQotICAgIEZUQV9HSzUsICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEdTU0FQSSBLZXJiZXJvcyA1ICovCi0jZW5kaWYgLyogRlRQX0dLNSAqLwotI2lmZGVm IEZUUF9TUlAKLSAgICBGVEFfU1JQLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTUlAg Ki8KLSNlbmRpZiAvKiBGVFBfU1JQICovCi0jaWZkZWYgRlRQX0tSQjQKLSAgICBGVEFfSzQsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBLZXJiZXJvcyA0ICovCi0jZW5kaWYgLyogRlRQ X0tSQjQgKi8KLSNpZmRlZiBDS19TU0wKLSAgICBGVEFfVExTLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBUTFMgKi8KLSAgICBGVEFfU1NMLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBTU0wgKi8KLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAwCi19OwotCi1zdGF0aWMgc3Ry dWN0IGtleXRhYiBmdHBhdXRoW10gPSB7ICAgICAgLyogU0VUIEZUUCBBVVRIVFlQRSBjbWQgdGFi bGUgKi8KLSAgICB7ICJhdXRvbWF0aWMiLCBGVEFfQVVUTywgIENNX0lOViB9LAotI2lmZGVmIEZU UF9HU1NBUEkKLSAgICB7ICJnc3NhcGkta3JiNSIsIEZUQV9HSzUsIDAgfSwKLSNlbmRpZiAvKiBG VFBfR1NTQVBJICovCi0jaWZkZWYgRlRQX0tSQjQKLSAgICB7ICJrNCIsICAgICAgIEZUQV9LNCwg ICAgIENNX0lOViB9LAotI2VuZGlmIC8qIEZUUF9LUkI0ICovCi0jaWZkZWYgRlRQX0dTU0FQSQot ICAgIHsgIms1IiwgICAgICAgIEZUQV9HSzUsICAgQ01fSU5WIH0sCi0jZW5kaWYgLyogRlRQX0dT U0FQSSAqLwotI2lmZGVmIEZUUF9LUkI0Ci0gICAgeyAia2VyYmVyb3M0IiwgRlRBX0s0LCAgICAw IH0sCi0jZW5kaWYgLyogRlRQX0tSQjQgKi8KLSNpZmRlZiBGVFBfR1NTQVBJCi0gICAgeyAia2Vy YmVyb3M1IiwgRlRBX0dLNSwgICBDTV9JTlYgfSwKLSNlbmRpZiAvKiBGVFBfR1NTQVBJICovCi0j aWZkZWYgRlRQX0tSQjQKLSAgICB7ICJrZXJiZXJvc19pdiIsRlRBX0s0LCAgIENNX0lOViB9LAot I2VuZGlmIC8qIEZUUF9LUkI0ICovCi0jaWZkZWYgRlRQX0dTU0FQSQotICAgIHsgImtlcmJlcm9z X3YiLCBGVEFfR0s1LCAgQ01fSU5WIH0sCi0jZW5kaWYgLyogRlRQX0dTU0FQSSAqLwotI2lmZGVm IEZUUF9LUkI0Ci0gICAgeyAia3JiNCIsICAgICBGVEFfSzQsICAgICBDTV9JTlYgfSwKLSNlbmRp ZiAvKiBGVFBfS1JCNCAqLwotI2lmZGVmIEZUUF9HU1NBUEkKLSAgICB7ICJrcmI1IiwgICAgIEZU QV9HSzUsICAgIENNX0lOViB9LAotI2VuZGlmIC8qIEZUUF9HU1NBUEkgKi8KLSNpZmRlZiBGVFBf U1JQCi0gICAgeyAic3JwIiwgICAgICBGVEFfU1JQLCAgICAgMCB9LAotI2VuZGlmIC8qIEZUUF9T UlAgKi8KLSNpZmRlZiBDS19TU0wKLSAgICB7ICJzc2wiLCAgICAgIEZUQV9TU0wsICAgICAwIH0s Ci0gICAgeyAidGxzIiwgICAgICBGVEFfVExTLCAgICAgMCB9LAotI2VuZGlmIC8qIENLX1NTTCAq LwotICAgIHsgIiIsIDAsIDAgfQotfTsKLXN0YXRpYyBpbnQgbmZ0cGF1dGggPSAoc2l6ZW9mKGZ0 cGF1dGgpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLSNpZmRlZiBGVFBfU1JQCi0j ZGVmaW5lIFNSUF9DSVBIRVIgMQotI2RlZmluZSBTUlBfSEFTSCAgIDIKLXN0YXRpYyBzdHJ1Y3Qg a2V5dGFiIGZ0cHNycFtdID0geyAgICAgIC8qIFNFVCBGVFAgU1JQIGNvbW1hbmQgdGFibGUgKi8K LSAgICB7ICJjaXBoZXIiLCAgIFNSUF9DSVBIRVIsICAgICAwIH0sCi0gICAgeyAiaGFzaCIsICAg ICBTUlBfSEFTSCwgICAgICAgMCB9LAotICAgIHsgIiIsIDAsIDAgfQotfTsKLXN0YXRpYyBpbnQg bmZ0cHNycCA9IChzaXplb2YoZnRwc3JwKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwot I2VuZGlmIC8qIEZUUF9TUlAgKi8KLSNlbmRpZiAvKiBGVFBfU0VDVVJJVFkgKi8KLQotc3RhdGlj IHN0cnVjdCBrZXl0YWIgZnRwc2V0W10gPSB7ICAgICAgIC8qIFNFVCBGVFAgY29tbW1hbmQgdGFi bGUgKi8KLSAgICB7ICJhbm9ueW1vdXMtcGFzc3dvcmQiLCAgICAgICBGVFNfQVBXLCAwIH0sCi0j aWZkZWYgRlRQX1NFQ1VSSVRZCi0gICAgeyAiYXV0aHR5cGUiLCAgICAgICAgICAgICAgICAgRlRT X0FUUCwgMCB9LAotICAgIHsgImF1dG9hdXRoZW50aWNhdGlvbiIsICAgICAgIEZUU19BVVQsIDAg fSwKLSAgICB7ICJhdXRvZW5jcnlwdGlvbiIsICAgICAgICAgICBGVFNfQ1JZLCAwIH0sCi0jZW5k aWYgLyogRlRQX1NFQ1VSSVRZICovCi0gICAgeyAiYXV0b2xvZ2luIiwgICAgICAgICAgICAgICAg RlRTX0xPRywgMCB9LAotICAgIHsgImJ1ZyIsICAgICAgICAgICAgICAgICAgICAgIEZUU19CVUcs IDAgfSwKLSNpZm5kZWYgTk9DU0VUUwotICAgIHsgImNoYXJhY3Rlci1zZXQtdHJhbnNsYXRpb24i LEZUU19YTEEsIDAgfSwKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0gICAgeyAiY29sbGlzaW9uIiwg ICAgICAgICAgICAgICAgRlRTX0ZOQywgMCB9LAotI2lmZGVmIEZUUF9TRUNVUklUWQotICAgIHsg ImNvbW1hbmQtcHJvdGVjdGlvbi1sZXZlbCIsIEZUU19DUEwsIDAgfSwKLSAgICB7ICJjcGwiLCAg ICAgICAgICAgICAgICAgICAgICBGVFNfQ1BMLCBDTV9JTlYgfSwKLSAgICB7ICJjcmVkZW50aWFs LWZvcndhcmRpbmciLCAgICBGVFNfQ0ZXLCAwIH0sCi0gICAgeyAiZGEiLCAgICAgICAgICAgICAg ICAgICAgICAgRlRTX0RBVCwgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgImRhdGEtcHJvdGVjdGlv bi1sZXZlbCIsICAgIEZUU19EUEwsIDAgfSwKLSNlbmRpZiAvKiBGVFBfU0VDVVJJVFkgKi8KLSAg ICB7ICJkYXRlcyIsICAgICAgICAgICAgICAgICAgICBGVFNfREFULCAwIH0sCi0gICAgeyAiZGVi dWciLCAgICAgICAgICAgICAgICAgICAgRlRTX0RCRywgMCB9LAotICAgIHsgImRpc3BsYXkiLCAg ICAgICAgICAgICAgICAgIEZUU19ESVMsIDAgfSwKLSNpZmRlZiBGVFBfU0VDVVJJVFkKLSAgICB7 ICJkcGwiLCAgICAgICAgICAgICAgICAgICAgICBGVFNfRFBMLCBDTV9JTlYgfSwKLSNlbmRpZiAv KiBGVFBfU0VDVVJJVFkgKi8KLSAgICB7ICJlcnJvci1hY3Rpb24iLCAgICAgICAgICAgICBGVFNf RVJSLCAwIH0sCi0gICAgeyAiZmlsZW5hbWVzIiwgICAgICAgICAgICAgICAgRlRTX0NOViwgMCB9 LAotICAgIHsgImdldC1maWxldHlwZS1zd2l0Y2hpbmciLCAgIEZUU19HRlQsIDAgfSwKLSAgICB7 ICJwYXNzaXZlLW1vZGUiLCAgICAgICAgICAgICBGVFNfUFNWLCAwIH0sCi0gICAgeyAicGFzdiIs ICAgICAgICAgICAgICAgICAgICAgRlRTX1BTViwgQ01fSU5WIH0sCi0gICAgeyAicGVybWlzc2lv bnMiLCAgICAgICAgICAgICAgRlRTX1BSTSwgMCB9LAotICAgIHsgInByb2dyZXNzLW1lc3NhZ2Vz IiwgICAgICAgIEZUU19UU1QsIDAgfSwKLSAgICB7ICJzZW5kLXBvcnQtY29tbWFuZHMiLCAgICAg ICBGVFNfU1BDLCAwIH0sCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICB7ICJzZXJ2ZXItY2hhcmFjdGVy LXNldCIsICAgICBGVFNfQ1NSLCAwIH0sCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotICAgIHsgInNl cnZlci10aW1lLW9mZnNldCIsICAgICAgIEZUU19TVE8sIDAgfSwKLSNpZmRlZiBGVFBfU1JQCi0g ICAgeyAic3JwIiwgICAgICAgICAgICAgICAgICAgICAgRlRTX1NSUCwgMCB9LAotI2Vsc2UKLSAg ICB7ICJzcnAiLCAgICAgICAgICAgICAgICAgICAgICBGVFNfU1JQLCBDTV9JTlYgfSwKLSNlbmRp ZiAvKiBGVFBfU1JQICovCi0jaWZkZWYgRlRQX1RJTUVPVVQKLSAgICB7ICJ0aW1lb3V0IiwgICAg ICAgICAgICAgICAgICBGVFNfVE1PLCAwIH0sCi0jZW5kaWYJLyogRlRQX1RJTUVPVVQgKi8KLSAg ICB7ICJ0eXBlIiwgICAgICAgICAgICAgICAgICAgICBGVFNfVFlQLCAwIH0sCi0gICAgeyAidW5p cXVlLXNlcnZlci1uYW1lcyIsICAgICAgRlRTX1VTTiwgMCB9LAotICAgIHsgInZlcmJvc2UtbW9k ZSIsICAgICAgICAgICAgIEZUU19WQk0sIDAgfSwKLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1zdGF0 aWMgaW50IG5mdHBzZXQgPSAoc2l6ZW9mKGZ0cHNldCkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikp IC0gMTsKLQotLyoKLSAgR0VUIGFuZCBQVVQgc3dpdGNoZXMgYXJlIGFwcHJveGltYXRlbHkgdGhl IHNhbWUgYXMgS2VybWl0IEdFVCBhbmQgU0VORCwKLSAgYW5kIHVzZSB0aGUgc2FtZSBTTkRfeHh4 IGRlZmluaXRpb25zLCBidXQgaGlqYWNrIGEgY291cGxlIGZvciBGVFAgdXNlLgotICBEb24ndCBq dXN0IG1ha2UgdXAgbmV3IG9uZXMsIHNpbmNlIHRoZSBudW1iZXIgb2YgU05EX3h4eCBvcHRpb25z IG11c3QgYmUKLSAga25vd24gaW4gYWR2YW5jZSBmb3IgdGhlIHN3aXRjaC1wYXJzaW5nIGFycmF5 cy4KLSovCi0jZGVmaW5lIFNORF9VU04gU05EX1BSTyAgICAgICAgICAgICAgICAgLyogL1VOSVFV RSBpbnN0ZWFkIG9mIC9QUk9UT0NPTCAqLwotI2RlZmluZSBTTkRfUFJNIFNORF9QSVAgICAgICAg ICAgICAgICAgIC8qIC9QRVJNSVNTSU9OUyBpbnN0ZWFkIG9mIC9QSVBFUyAqLwotI2RlZmluZSBT TkRfVEVOIFNORF9DQUwgICAgICAgICAgICAgICAgIC8qIC9URU5FWCBpbnN0ZWFkIG9mIC9DQUxJ QlJBVEUgKi8KLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgcHV0c3dpW10gPSB7ICAgICAgIC8qIEZU UCBQVVQgc3dpdGNoIHRhYmxlICovCi0gICAgeyAiL2FmdGVyIiwgICAgICAgICAgICAgICAgU05E X0FGVCwgQ01fQVJHIH0sCi0jaWZkZWYgUFVUQVJSQVkKLSAgICB7ICIvYXJyYXkiLCAgICAgICAg ICAgICAgICBTTkRfQVJSLCBDTV9BUkcgfSwKLSNlbmRpZiAvKiBQVVRBUlJBWSAqLwotICAgIHsg Ii9hcyIsICAgICAgICAgICAgICAgICAgIFNORF9BU04sIENNX0FSR3xDTV9JTlZ8Q01fQUJSIH0s Ci0gICAgeyAiL2FzLW5hbWUiLCAgICAgICAgICAgICAgU05EX0FTTiwgQ01fQVJHIH0sCi0gICAg eyAiL2FzY2lpIiwgICAgICAgICAgICAgICAgU05EX1RYVCwgQ01fSU5WIH0sCi0gICAgeyAiL2Ii LCAgICAgICAgICAgICAgICAgICAgU05EX0JJTiwgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgIi9i ZWZvcmUiLCAgICAgICAgICAgICAgIFNORF9CRUYsIENNX0FSRyB9LAotICAgIHsgIi9iaW5hcnki LCAgICAgICAgICAgICAgIFNORF9CSU4sIDAgfSwKLSNpZmRlZiBQVVRQSVBFCi0gICAgeyAiL2Nv bW1hbmQiLCAgICAgICAgICAgICAgU05EX0NNRCwgQ01fUFNIIH0sCi0jZW5kaWYgLyogUFVUUElQ RSAqLwotI2lmZGVmIENPTU1FTlQKLS8qIFRoaXMgd29ya3MgYnV0IGl0J3MgZGFuZ2Vyb3VzICov Ci0jaWZkZWYgRE9VUERBVEUKLSAgICB7ICIvZGF0ZXMtZGlmZmVyIiwgICAgICAgICBTTkRfRElG LCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBET1VQREFURSAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8K LSAgICB7ICIvZGVsZXRlIiwgICAgICAgICAgICAgICBTTkRfREVMLCAwIH0sCi0jaWZkZWYgVU5J WE9ST1NLCi0gICAgeyAiL2RvdGZpbGVzIiwgICAgICAgICAgICAgU05EX0RPVCwgMCB9LAotI2Vu ZGlmIC8qIFVOSVhPUk9TSyAqLwotICAgIHsgIi9lcnJvci1hY3Rpb24iLCAgICAgICAgIFNORF9F UlIsIENNX0FSRyB9LAotICAgIHsgIi9leGNlcHQiLCAgICAgICAgICAgICAgIFNORF9FWEMsIENN X0FSRyB9LAotICAgIHsgIi9maWxlbmFtZXMiLCAgICAgICAgICAgIFNORF9OQU0sIENNX0FSRyB9 LAotI2lmZGVmIFBJUEVTRU5ECi0jaWZuZGVmIE5PU1BMCi0gICAgeyAiL2ZpbHRlciIsICAgICAg ICAgICAgICAgU05EX0ZMVCwgQ01fQVJHfENNX1BTSCB9LAotI2VuZGlmIC8qIE5PU1BMICovCi0j ZW5kaWYgLyogUElQRVNFTkQgKi8KLSNpZmRlZiBDS1NZTUxJTksKLSAgICB7ICIvZm9sbG93bGlu a3MiLCAgICAgICAgICBTTkRfTE5LLCAwIH0sCi0jZW5kaWYgLyogQ0tTWU1MSU5LICovCi0jaWZk ZWYgVk1TCi0gICAgeyAiL2ltYWdlIiwgICAgICAgICAgICAgICAgU05EX0lNRywgMCB9LAotI2Vs c2UKLSAgICB7ICIvaW1hZ2UiLCAgICAgICAgICAgICAgICBTTkRfQklOLCBDTV9JTlYgfSwKLSNl bmRpZiAvKiBWTVMgKi8KLSAgICB7ICIvbGFyZ2VyLXRoYW4iLCAgICAgICAgICBTTkRfTEFSLCBD TV9BUkcgfSwKLSAgICB7ICIvbGlzdGZpbGUiLCAgICAgICAgICAgICBTTkRfRklMLCBDTV9BUkcg fSwKLSNpZm5kZWYgTk9DU0VUUwotICAgIHsgIi9sb2NhbC1jaGFyYWN0ZXItc2V0IiwgIFNORF9D U0wsIENNX0FSRyB9LAotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSNpZmRlZiBDS19UTVBESVIKLSAg ICB7ICIvbW92ZS10byIsICAgICAgICAgICAgICBTTkRfTU9WLCBDTV9BUkcgfSwKLSNlbmRpZiAv KiBDS19UTVBESVIgKi8KLSAgICB7ICIvbm9iYWNrdXBmaWxlcyIsICAgICAgICBTTkRfTk9CLCAw IH0sCi0jaWZkZWYgVU5JWE9ST1NLCi0gICAgeyAiL25vZG90ZmlsZXMiLCAgICAgICAgICAgU05E X05PRCwgMCB9LAotI2VuZGlmIC8qIFVOSVhPUk9TSyAqLwotI2lmZGVmIENLU1lNTElOSwotICAg IHsgIi9ub2ZvbGxvd2xpbmtzIiwgICAgICAgIFNORF9OTEssIDAgfSwKLSNlbmRpZiAvKiBDS1NZ TUxJTksgKi8KLQotICAgIHsgIi9ub3QtYWZ0ZXIiLCAgICAgICAgICAgIFNORF9OQUYsIENNX0FS RyB9LAotICAgIHsgIi9ub3QtYmVmb3JlIiwgICAgICAgICAgIFNORF9OQkUsIENNX0FSRyB9LAot I2lmZGVmIFVOSVgKLSAgICB7ICIvcGVybWlzc2lvbnMiLCAgICAgICAgICBTTkRfUFJNLCBDTV9B UkcgfSwKLSNlbHNlCi0gICAgeyAiL3Blcm1pc3Npb25zIiwgICAgICAgICAgU05EX1BSTSwgQ01f QVJHfENNX0lOViB9LAotI2VuZGlmIC8qIFVOSVggKi8KLSAgICB7ICIvcXVpZXQiLCAgICAgICAg ICAgICAgICBTTkRfU0hILCAwIH0sCi0jaWZkZWYgRlRQX1JFU1RBUlQKLSAgICB7ICIvcmVjb3Zl ciIsICAgICAgICAgICAgICBTTkRfUkVTLCAwIH0sCi0jZW5kaWYgLyogRlRQX1JFU1RBUlQgKi8K LSNpZmRlZiBSRUNVUlNJVkUKLSAgICB7ICIvcmVjdXJzaXZlIiwgICAgICAgICAgICBTTkRfUkVD LCAwIH0sCi0jZW5kaWYgLyogUkVDVVJTSVZFICovCi0gICAgeyAiL3JlbmFtZS10byIsICAgICAg ICAgICAgU05EX1JFTiwgQ01fQVJHIH0sCi0jaWZkZWYgRlRQX1JFU1RBUlQKLSAgICB7ICIvcmVz dGFydCIsICAgICAgICAgICAgICBTTkRfUkVTLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBGVFBfUkVT VEFSVCAqLwotI2lmbmRlZiBOT0NTRVRTCi0gICAgeyAiL3NlcnZlci1jaGFyYWN0ZXItc2V0Iiwg U05EX0NTUiwgQ01fQVJHIH0sCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotICAgIHsgIi9zZXJ2ZXIt cmVuYW1lLXRvIiwgICAgIFNORF9TUk4sIENNX0FSRyB9LAotICAgIHsgIi9zaW11bGF0ZSIsICAg ICAgICAgICAgIFNORF9TSU0sIDAgfSwKLSAgICB7ICIvc2luY2UiLCAgICAgICAgICAgICAgICBT TkRfQUZULCBDTV9JTlZ8Q01fQVJHIH0sCi0gICAgeyAiL3NtYWxsZXItdGhhbiIsICAgICAgICAg U05EX1NNQSwgQ01fQVJHIH0sCi0jaWZkZWYgQ09NTUVOVAotICAgIHsgIi9zdGFydGluZy1hdCIs ICAgICAgICAgIFNORF9TVEEsIENNX0FSRyB9LAotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNpZmRl ZiBSRUNVUlNJVkUKLSAgICB7ICIvc3ViZGlyZWN0b3JpZXMiLCAgICAgICBTTkRfUkVDLCBDTV9J TlYgfSwKLSNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KLSAgICB7ICIvdGVuZXgiLCAgICAgICAgICAg ICAgICBTTkRfVEVOLCAwIH0sCi0gICAgeyAiL3RleHQiLCAgICAgICAgICAgICAgICAgU05EX1RY VCwgMCB9LAotI2lmbmRlZiBOT0NTRVRTCi0gICAgeyAiL3RyYW5zcGFyZW50IiwgICAgICAgICAg U05EX1hQQSwgMCB9LAotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSAgICB7ICIvdHlwZSIsICAgICAg ICAgICAgICAgICBTTkRfVFlQLCBDTV9BUkcgfSwKLSNpZmRlZiBET1VQREFURQotICAgIHsgIi91 cGRhdGUiLCAgICAgICAgICAgICAgIFNORF9VUEQsIDAgfSwKLSNlbmRpZiAvKiBET1VQREFURSAq LwotICAgIHsgIi91bmlxdWUtc2VydmVyLW5hbWVzIiwgIFNORF9VU04sIDAgfSwKLSAgICB7ICIi LCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5wdXRzd2kgPSAoc2l6ZW9mKHB1dHN3aSkgLyBzaXpl b2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgZ2V0c3dpW10g PSB7ICAgICAgIC8qIEZUUCBbTV1HRVQgc3dpdGNoIHRhYmxlICovCi0gICAgeyAiL2FmdGVyIiwg ICAgICAgICAgICAgICAgU05EX0FGVCwgQ01fSU5WIH0sCi0gICAgeyAiL2FzIiwgICAgICAgICAg ICAgICAgICAgU05EX0FTTiwgQ01fQVJHfENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICIvYXMtbmFt ZSIsICAgICAgICAgICAgICBTTkRfQVNOLCBDTV9BUkcgfSwKLSAgICB7ICIvYXNjaWkiLCAgICAg ICAgICAgICAgICBTTkRfVFhULCBDTV9JTlYgfSwKLSAgICB7ICIvYmVmb3JlIiwgICAgICAgICAg ICAgICBTTkRfQkVGLCBDTV9JTlYgfSwKLSAgICB7ICIvYmluYXJ5IiwgICAgICAgICAgICAgICBT TkRfQklOLCAwIH0sCi0gICAgeyAiL2NvbGxpc2lvbiIsICAgICAgICAgICAgU05EX0NPTCwgQ01f QVJHIH0sCi0jaWZkZWYgUFVUUElQRQotICAgIHsgIi9jb21tYW5kIiwgICAgICAgICAgICAgIFNO RF9DTUQsIENNX1BTSCB9LAotI2VuZGlmIC8qIFBVVFBJUEUgKi8KLSAgICB7ICIvZGVsZXRlIiwg ICAgICAgICAgICAgICBTTkRfREVMLCAwIH0sCi0gICAgeyAiL2Vycm9yLWFjdGlvbiIsICAgICAg ICAgU05EX0VSUiwgQ01fQVJHIH0sCi0gICAgeyAiL2V4Y2VwdCIsICAgICAgICAgICAgICAgU05E X0VYQywgQ01fQVJHIH0sCi0gICAgeyAiL2ZpbGVuYW1lcyIsICAgICAgICAgICAgU05EX05BTSwg Q01fQVJHIH0sCi0jaWZkZWYgUElQRVNFTkQKLSNpZm5kZWYgTk9TUEwKLSAgICB7ICIvZmlsdGVy IiwgICAgICAgICAgICAgICBTTkRfRkxULCBDTV9BUkd8Q01fUFNIIH0sCi0jZW5kaWYgLyogTk9T UEwgKi8KLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotI2lmZGVmIFZNUwotICAgIHsgIi9pbWFnZSIs ICAgICAgICAgICAgICAgIFNORF9JTUcsIDAgfSwKLSNlbHNlCi0gICAgeyAiL2ltYWdlIiwgICAg ICAgICAgICAgICAgU05EX0JJTiwgQ01fSU5WIH0sCi0jZW5kaWYgLyogVk1TICovCi0gICAgeyAi L2xhcmdlci10aGFuIiwgICAgICAgICAgU05EX0xBUiwgQ01fQVJHIH0sCi0gICAgeyAiL2xpc3Rm aWxlIiwgICAgICAgICAgICAgU05EX0ZJTCwgQ01fQVJHIH0sCi0jaWZuZGVmIE5PQ1NFVFMKLSAg ICB7ICIvbG9jYWwtY2hhcmFjdGVyLXNldCIsICBTTkRfQ1NMLCBDTV9BUkcgfSwKLSNlbmRpZiAv KiBOT0NTRVRTICovCi0gICAgeyAiL21hdGNoIiwgICAgICAgICAgICAgICAgU05EX1BBVCwgQ01f QVJHIH0sCi0gICAgeyAiL21sIiwgICAgICAgICAgICAgICAgICAgU05EX01MUywgQ01fSU5WfENN X0FCUiB9LAotICAgIHsgIi9tbHMiLCAgICAgICAgICAgICAgICAgIFNORF9NTFMsIENNX0lOVnxD TV9BQlIgfSwKLSAgICB7ICIvbWxzZCIsICAgICAgICAgICAgICAgICBTTkRfTUxTLCAwIH0sCi0g ICAgeyAiL21sc3QiLCAgICAgICAgICAgICAgICAgU05EX01MUywgQ01fSU5WIH0sCi0jaWZkZWYg Q0tfVE1QRElSCi0gICAgeyAiL21vdmUtdG8iLCAgICAgICAgICAgICAgU05EX01PViwgQ01fQVJH IH0sCi0jZW5kaWYgLyogQ0tfVE1QRElSICovCi0gICAgeyAiL25hbWVsaXN0IiwgICAgICAgICAg ICAgU05EX05NTCwgQ01fQVJHIH0sCi0gICAgeyAiL25sc3QiLCAgICAgICAgICAgICAgICAgU05E X05MUywgMCB9LAotICAgIHsgIi9ub2JhY2t1cGZpbGVzIiwgICAgICAgIFNORF9OT0IsIDAgfSwK LSAgICB7ICIvbm9kb3RmaWxlcyIsICAgICAgICAgICBTTkRfTk9ELCAwIH0sCi0jaWZkZWYgRE9V UERBVEUKLSAgICB7ICIvZGF0ZXMtZGlmZmVyIiwgICAgICAgICBTTkRfRElGLCBDTV9JTlYgfSwK LSNlbmRpZiAvKiBET1VQREFURSAqLwotICAgIHsgIi9ub3QtYWZ0ZXIiLCAgICAgICAgICAgIFNO RF9OQUYsIENNX0lOViB9LAotICAgIHsgIi9ub3QtYmVmb3JlIiwgICAgICAgICAgIFNORF9OQkUs IENNX0lOViB9LAotICAgIHsgIi9wZXJtaXNzaW9ucyIsICAgICAgICAgIFNORF9QUk0sIENNX0lO ViB9LAotICAgIHsgIi9xdWlldCIsICAgICAgICAgICAgICAgIFNORF9TSEgsIDAgfSwKLSNpZmRl ZiBGVFBfUkVTVEFSVAotICAgIHsgIi9yZWNvdmVyIiwgICAgICAgICAgICAgIFNORF9SRVMsIDAg fSwKLSNlbmRpZiAvKiBGVFBfUkVTVEFSVCAqLwotI2lmZGVmIFJFQ1VSU0lWRQotICAgIHsgIi9y ZWN1cnNpdmUiLCAgICAgICAgICAgIFNORF9SRUMsIDAgfSwKLSNlbmRpZiAvKiBSRUNVUlNJVkUg Ki8KLSAgICB7ICIvcmVuYW1lLXRvIiwgICAgICAgICAgICBTTkRfUkVOLCBDTV9BUkcgfSwKLSNp ZmRlZiBGVFBfUkVTVEFSVAotICAgIHsgIi9yZXN0YXJ0IiwgICAgICAgICAgICAgIFNORF9SRVMs IENNX0lOViB9LAotI2VuZGlmIC8qIEZUUF9SRVNUQVJUICovCi0jaWZuZGVmIE5PQ1NFVFMKLSAg ICB7ICIvc2VydmVyLWNoYXJhY3Rlci1zZXQiLCBTTkRfQ1NSLCBDTV9BUkcgfSwKLSNlbmRpZiAv KiBOT0NTRVRTICovCi0gICAgeyAiL3NlcnZlci1yZW5hbWUtdG8iLCAgICAgU05EX1NSTiwgQ01f QVJHIH0sCi0gICAgeyAiL3NtYWxsZXItdGhhbiIsICAgICAgICAgU05EX1NNQSwgQ01fQVJHIH0s Ci0jaWZkZWYgUkVDVVJTSVZFCi0gICAgeyAiL3N1YmRpcmVjdG9yaWVzIiwgICAgICAgU05EX1JF QywgQ01fSU5WIH0sCi0jZW5kaWYgLyogUkVDVVJTSVZFICovCi0gICAgeyAiL3RleHQiLCAgICAg ICAgICAgICAgICAgU05EX1RYVCwgMCB9LAotICAgIHsgIi90ZW5leCIsICAgICAgICAgICAgICAg IFNORF9URU4sIDAgfSwKLSNpZm5kZWYgTk9DU0VUUwotICAgIHsgIi90cmFuc3BhcmVudCIsICAg ICAgICAgIFNORF9YUEEsIDAgfSwKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0gICAgeyAiL3RvLXNj cmVlbiIsICAgICAgICAgICAgU05EX01BSSwgMCB9LAotI2lmZGVmIERPVVBEQVRFCi0gICAgeyAi L3VwZGF0ZSIsICAgICAgICAgICAgICAgU05EX1VQRCwgQ01fSU5WIH0sCi0jZW5kaWYgLyogRE9V UERBVEUgKi8KLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5nZXRzd2kgPSAoc2l6 ZW9mKGdldHN3aSkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLQotc3RhdGljIHN0cnVj dCBrZXl0YWIgZGVsc3dpW10gPSB7ICAgICAgIC8qIEZUUCBbTV1ERUxFVEUgc3dpdGNoIHRhYmxl ICovCi0gICAgeyAiL2Vycm9yLWFjdGlvbiIsICAgICAgICAgU05EX0VSUiwgQ01fQVJHIH0sCi0g ICAgeyAiL2V4Y2VwdCIsICAgICAgICAgICAgICAgU05EX0VYQywgQ01fQVJHIH0sCi0gICAgeyAi L2ZpbGVuYW1lcyIsICAgICAgICAgICAgU05EX05BTSwgQ01fQVJHIH0sCi0gICAgeyAiL2xhcmdl ci10aGFuIiwgICAgICAgICAgU05EX0xBUiwgQ01fQVJHIH0sCi0gICAgeyAiL25vYmFja3VwZmls ZXMiLCAgICAgICAgU05EX05PQiwgMCB9LAotI2lmZGVmIFVOSVhPUk9TSwotICAgIHsgIi9ub2Rv dGZpbGVzIiwgICAgICAgICAgIFNORF9OT0QsIDAgfSwKLSNlbmRpZiAvKiBVTklYT1JPU0sgKi8K LSAgICB7ICIvcXVpZXQiLCAgICAgICAgICAgICAgICBTTkRfU0hILCAwIH0sCi0jaWZkZWYgUkVD VVJTSVZFCi0gICAgeyAiL3JlY3Vyc2l2ZSIsICAgICAgICAgICAgU05EX1JFQywgMCB9LAotI2Vu ZGlmIC8qIFJFQ1VSU0lWRSAqLwotICAgIHsgIi9zbWFsbGVyLXRoYW4iLCAgICAgICAgIFNORF9T TUEsIENNX0FSRyB9LAotI2lmZGVmIFJFQ1VSU0lWRQotICAgIHsgIi9zdWJkaXJlY3RvcmllcyIs ICAgICAgIFNORF9SRUMsIENNX0lOViB9LAotI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLwotICAgIHsg IiIsIDAsIDAgfQotfTsKLXN0YXRpYyBpbnQgbmRlbHN3aSA9IChzaXplb2YoZGVsc3dpKSAvIHNp emVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBmbnRhYltd ID0geyAgICAgICAgLyogRmlsZW5hbWUgY29udmVyc2lvbiBrZXl3b3JkIHRhYmxlICovCi0gICAg eyAiYXV0b21hdGljIiwgICAgMiwgQ05WX0FVVE8gfSwKLSAgICB7ICJjb252ZXJ0ZWQiLCAgICAx LCBDTlZfQ05WICB9LAotICAgIHsgImxpdGVyYWwiLCAgICAgIDAsIENOVl9MSVQgIH0KLX07Ci1z dGF0aWMgaW50IG5mbnRhYiA9IChzaXplb2YoZm50YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIp KTsKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgZnRwdHlwW10gPSB7ICAgICAgIC8qIFNFVCBGVFAg VFlQRSB0YWJsZSAqLwotICAgIHsgImFzY2lpIiwgICAgICAgIEZUVF9BU0MsIDAgfSwKLSAgICB7 ICJiaW5hcnkiLCAgICAgICBGVFRfQklOLCAwIH0sCi0gICAgeyAidGVuZXgiLCAgICAgICAgRlRU X1RFTiwgMCB9LAotICAgIHsgInRleHQiLCAgICAgICAgIEZUVF9BU0MsIENNX0lOViB9LAotICAg IHsgIiIsIDAsIDAgfQotfTsKLXN0YXRpYyBpbnQgbmZ0cHR5cCA9IChzaXplb2YoZnRwdHlwKSAv IHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwotCi0jaWZkZWYgRlRQX1NFQ1VSSVRZCi1zdGF0 aWMgc3RydWN0IGtleXRhYiBmdHBwcm9bXSA9IHsgICAgICAgLyogU0VUIEZUUCBQUk9URUNUSU9O LUxFVkVMIHRhYmxlICovCi0gICAgeyAiY2xlYXIiLCAgICAgICAgRlBMX0NMUiwgMCB9LAotICAg IHsgImNvbmZpZGVudGlhbCIsIEZQTF9DT04sIDAgfSwKLSAgICB7ICJwcml2YXRlIiwgICAgICBG UExfUFJWLCAwIH0sCi0gICAgeyAic2FmZSIsICAgICAgICAgRlBMX1NBRiwgMCB9LAotICAgIHsg IiIsIDAsIDAgfQotfTsKLXN0YXRpYyBpbnQgbmZ0cHBybyA9IChzaXplb2YoZnRwcHJvKSAvIHNp emVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwotI2VuZGlmIC8qIEZUUF9TRUNVUklUWSAqLwotCi0v KiBEZWZpbml0aW9ucyBmb3IgRlRQIGZyb20gUkZDNzY1LiAqLwotCi0vKiBSZXBseSBjb2RlcyAq LwotCi0jZGVmaW5lIFJFUExZX1BSRUxJTSAgICAxICAgICAgICAgICAgICAgLyogUG9zaXRpdmUg cHJlbGltaW5hcnkgKi8KLSNkZWZpbmUgUkVQTFlfQ09NUExFVEUgIDIgICAgICAgICAgICAgICAv KiBQb3NpdGl2ZSBjb21wbGV0aW9uICovCi0jZGVmaW5lIFJFUExZX0NPTlRJTlVFICAzICAgICAg ICAgICAgICAgLyogUG9zaXRpdmUgaW50ZXJtZWRpYXRlICovCi0jZGVmaW5lIFJFUExZX1RSQU5T SUVOVCA0ICAgICAgICAgICAgICAgLyogVHJhbnNpZW50IG5lZ2F0aXZlIGNvbXBsZXRpb24gKi8K LSNkZWZpbmUgUkVQTFlfRVJST1IgICAgIDUgICAgICAgICAgICAgICAvKiBQZXJtYW5lbnQgbmVn YXRpdmUgY29tcGxldGlvbiAqLwotI2RlZmluZSBSRVBMWV9TRUNVUkUgICAgNiAgICAgICAgICAg ICAgIC8qIFNlY3VyaXR5IGVuY29kZWQgbWVzc2FnZSAqLwotCi0vKiBGb3JtIGNvZGVzIGFuZCBu YW1lcyAqLwotCi0jZGVmaW5lIEZPUk1fTiAxICAgICAgICAgICAgICAgICAgICAgICAgLyogTm9u LXByaW50ICovCi0jZGVmaW5lIEZPUk1fVCAyICAgICAgICAgICAgICAgICAgICAgICAgLyogVGVs bmV0IGZvcm1hdCBlZmZlY3RvcnMgKi8KLSNkZWZpbmUgRk9STV9DIDMgICAgICAgICAgICAgICAg ICAgICAgICAvKiBDYXJyaWFnZSBjb250cm9sIChBU0EpICovCi0KLS8qIFN0cnVjdHVyZSBjb2Rl cyBhbmQgbmFtZXMgKi8KLQotI2RlZmluZSBTVFJVX0YgMSAgICAgICAgICAgICAgICAgICAgICAg IC8qIEZpbGUgKG5vIHJlY29yZCBzdHJ1Y3R1cmUpICovCi0jZGVmaW5lIFNUUlVfUiAyICAgICAg ICAgICAgICAgICAgICAgICAgLyogUmVjb3JkIHN0cnVjdHVyZSAqLwotI2RlZmluZSBTVFJVX1Ag MyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhZ2Ugc3RydWN0dXJlICovCi0KLS8qIE1vZGUg dHlwZXMgYW5kIG5hbWVzICovCi0KLSNkZWZpbmUgTU9ERV9TIDEgICAgICAgICAgICAgICAgICAg ICAgICAvKiBTdHJlYW0gKi8KLSNkZWZpbmUgTU9ERV9CIDIgICAgICAgICAgICAgICAgICAgICAg ICAvKiBCbG9jayAqLwotI2RlZmluZSBNT0RFX0MgMyAgICAgICAgICAgICAgICAgICAgICAgIC8q IENvbXByZXNzZWQgKi8KLQotLyogUHJvdGVjdGlvbiBsZXZlbHMgYW5kIG5hbWVzICovCi0KLSNk ZWZpbmUgUFJPVF9DIDEgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciAqLwotI2RlZmlu ZSBQUk9UX1MgMiAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNhZmUgKi8KLSNkZWZpbmUgUFJP VF9QIDMgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcml2YXRlICovCi0jZGVmaW5lIFBST1Rf RSA0ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29uZmlkZW50aWFsICovCi0KLSNpZmRlZiBD T01NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgdXNlZCAqLwotI2lmZGVmIEZU UF9OQU1FUwotY2hhciAqc3RydW5hbWVzW10gID0gIHsiMCIsICJGaWxlIiwgICAgICJSZWNvcmQi LCAiUGFnZSIgfTsKLWNoYXIgKmZvcm1uYW1lc1tdICA9ICB7IjAiLCAiTm9ucHJpbnQiLCAiVGVs bmV0IiwgIkNhcnJpYWdlLWNvbnRyb2wiIH07Ci1jaGFyICptb2RlbmFtZXNbXSAgPSAgeyIwIiwg IlN0cmVhbSIsICAgIkJsb2NrIiwgICJDb21wcmVzc2VkIiB9OwotY2hhciAqbGV2ZWxuYW1lc1td ID0gIHsiMCIsICJDbGVhciIsICAgICJTYWZlIiwgICAiUHJpdmF0ZSIsICAiQ29uZmlkZW50aWFs IiB9OwotI2VuZGlmIC8qIEZUUF9OQU1FUyAqLwotCi0vKiBSZWNvcmQgVG9rZW5zICovCi0KLSNk ZWZpbmUgUkVDX0VTQyAnXDM3NycgICAgICAgICAgICAgICAgICAvKiBSZWNvcmQtbW9kZSBFc2Nh cGUgKi8KLSNkZWZpbmUgUkVDX0VPUiAnXDAwMScgICAgICAgICAgICAgICAgICAvKiBSZWNvcmQt bW9kZSBFbmQtb2YtUmVjb3JkICovCi0jZGVmaW5lIFJFQ19FT0YgJ1wwMDInICAgICAgICAgICAg ICAgICAgLyogUmVjb3JkLW1vZGUgRW5kLW9mLUZpbGUgKi8KLQotLyogQmxvY2sgSGVhZGVyICov Ci0KLSNkZWZpbmUgQkxLX0VPUiAgICAgICAgICAgMHg4MCAgICAgICAgICAvKiBCbG9jayBpcyBF bmQtb2YtUmVjb3JkICovCi0jZGVmaW5lIEJMS19FT0YgICAgICAgICAgIDB4NDAgICAgICAgICAg LyogQmxvY2sgaXMgRW5kLW9mLUZpbGUgKi8KLSNkZWZpbmUgQkxLX1JFUExZX0VSUk9SUyAgMHgy MCAgICAgICAgICAvKiBCbG9jayBtaWdodCBoYXZlIGVycm9ycyAqLwotI2RlZmluZSBCTEtfUkVT VEFSVCAgICAgICAweDEwICAgICAgICAgIC8qIEJsb2NrIGlzIFJlc3RhcnQgTWFya2VyICovCi0j ZGVmaW5lIEJMS19CWVRFQ09VTlQgMiAgICAgICAgICAgICAgICAgLyogQnl0ZXMgaW4gdGhpcyBi bG9jayAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2RlZmluZSBSQURJWF9FTkNPREUgMCAg ICAgICAgICAgICAgICAgIC8qIHJhZGl4X2VuY29kZSgpIGZ1bmN0aW9uIGNvZGVzICovCi0jZGVm aW5lIFJBRElYX0RFQ09ERSAxCi0KLS8qCi0gIFRoZSBkZWZhdWx0IHNldHBic3ooKSB2YWx1ZSBp biB0aGUgVW5peCBGVFAgY2xpZW50IGlzIDE8PDIwICgxTUIpLiAgVGhpcwotICByZXN1bHRzIGlu IGEgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBkdWUgdG8gdGhlIGluY3JlYXNlZCBu dW1iZXIKLSAgb2YgcGFnZSBmYXVsdHMgYW5kIHRoZSBpbmFiaWxpdHkgdG8gb3ZlcmxhcCBlbmNy eXB0L2RlY3J5cHQsIGZpbGUgaS9vLCBhbmQKLSAgbmV0d29yayBpL28uICBTbyBpbnN0ZWFkIHdl IHNldCB0aGUgdmFsdWUgdG8gMTw8MTMgKDhLKSwgYWJvdXQgaGFsZiB0aGUgc2l6ZQotICBvZiB0 aGUgdHlwaWNhbCBUQ1Agd2luZG93LiAgTWF5YmUgd2Ugc2hvdWxkIGFkZCBhIGNvbW1hbmQgdG8g YWxsb3cgdGhlIHZhbHVlCi0gIHRvIGJlIGNoYW5nZWQuCi0qLwotI2RlZmluZSBERUZBVUxUX1BC U1ogMTw8MTMKLQotLyogUHJvdG90eXBlcyAqLwotCi1fUFJPVE9UWVAoaW50IHJlbXR4dCwgKGNo YXIgKiopICk7Ci1fUFJPVE9UWVAoY2hhciAqIGdza3JlYXNvbiwgKGludCkgKTsKLV9QUk9UT1RZ UChzdGF0aWMgaW50IGZ0cGNsb3NlLCh2b2lkKSk7Ci1fUFJPVE9UWVAoc3RhdGljIGludCB6enNl bmQsIChpbnQsIENIQVIpKTsKLV9QUk9UT1RZUChzdGF0aWMgaW50IGdldHJlcGx5LChpbnQsaW50 LGludCxpbnQsaW50KSk7Ci1fUFJPVE9UWVAoc3RhdGljIGludCByYWRpeF9lbmNvZGUsKENIQVJb XSwgQ0hBUltdLCBpbnQsIGludCAqLCBpbnQpKTsKLV9QUk9UT1RZUChzdGF0aWMgaW50IHNldHBi c3osKHVuc2lnbmVkIGludCkpOwotX1BST1RPVFlQKHN0YXRpYyBpbnQgcmVjdnJlcXVlc3QsKGNo YXIgKixjaGFyICosY2hhciAqLGNoYXIgKiwKLSAgaW50LGludCxjaGFyICosaW50LGludCxpbnQp KTsKLV9QUk9UT1RZUChzdGF0aWMgaW50IGZ0cGNtZCwoY2hhciAqLGNoYXIgKixpbnQsaW50LGlu dCkpOwotX1BST1RPVFlQKHN0YXRpYyBpbnQgZnRzX2NwbCwoaW50KSk7Ci1fUFJPVE9UWVAoc3Rh dGljIGludCBmdHNfZHBsLChpbnQpKTsKLSNpZmRlZiBGVFBfU0VDVVJJVFkKLV9QUk9UT1RZUChz dGF0aWMgaW50IGZ0cF9hdXRoLCAodm9pZCkpOwotI2VuZGlmIC8qIEZUUF9TRUNVUklUWSAqLwot X1BST1RPVFlQKHN0YXRpYyBpbnQgZnRwX3VzZXIsIChjaGFyICosIGNoYXIgKiwgY2hhciAqKSk7 Ci1fUFJPVE9UWVAoc3RhdGljIGludCBmdHBfbG9naW4sIChjaGFyICopKTsKLV9QUk9UT1RZUChz dGF0aWMgaW50IGZ0cF9yZXNldCwgKHZvaWQpKTsKLV9QUk9UT1RZUChzdGF0aWMgaW50IGZ0cF9y ZW5hbWUsIChjaGFyICosIGNoYXIgKikpOwotX1BST1RPVFlQKHN0YXRpYyBpbnQgZnRwX3VtYXNr LCAoY2hhciAqKSk7Ci1fUFJPVE9UWVAoc3RhdGljIGludCBzZWN1cmVfZmx1c2gsIChpbnQpKTsK LSNpZmRlZiBDT01NRU5UCi1fUFJPVE9UWVAoc3RhdGljIGludCBzZWN1cmVfcHV0YywgKGNoYXIs IGludCkpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLV9QUk9UT1RZUChzdGF0aWMgaW50IHNlY3Vy ZV93cml0ZSwgKGludCwgQ0hBUiAqLCB1bnNpZ25lZCBpbnQpKTsKLV9QUk9UT1RZUChzdGF0aWMg aW50IHNjb21tYW5kLCAoY2hhciAqKSk7Ci1fUFJPVE9UWVAoc3RhdGljIGludCBzZWN1cmVfcHV0 YnVmLCAoaW50LCBDSEFSICosIHVuc2lnbmVkIGludCkpOwotX1BST1RPVFlQKHN0YXRpYyBpbnQg c2VjdXJlX2dldGMsIChpbnQsIGludCkpOwotX1BST1RPVFlQKHN0YXRpYyBpbnQgc2VjdXJlX2dl dGJ5dGUsIChpbnQsIGludCkpOwotX1BST1RPVFlQKHN0YXRpYyBpbnQgc2VjdXJlX3JlYWQsIChp bnQsIGNoYXIgKiwgaW50KSk7Ci1fUFJPVE9UWVAoc3RhdGljIGludCBpbml0Y29ubiwgKHZvaWQp KTsKLV9QUk9UT1RZUChzdGF0aWMgaW50IGRhdGFjb25uLCAoY2hhciAqKSk7Ci1fUFJPVE9UWVAo c3RhdGljIGludCBzZXRwcm90YnVmLCh1bnNpZ25lZCBpbnQpKTsKLV9QUk9UT1RZUChzdGF0aWMg aW50IHNlbmRyZXF1ZXN0LCAoY2hhciAqLCBjaGFyICosIGNoYXIgKiwgaW50LGludCxpbnQsaW50 KSk7Ci0KLV9QUk9UT1RZUChzdGF0aWMgY2hhciAqIHJhZGl4X2Vycm9yLChpbnQpKTsKLV9QUk9U T1RZUChzdGF0aWMgY2hhciAqIGZ0cF9ob29rdXAsKGNoYXIgKiwgaW50LCBpbnQpKTsKLV9QUk9U T1RZUChzdGF0aWMgQ0hBUiAqIHJlbW90ZV9maWxlcywgKGludCwgQ0hBUiAqLCBDSEFSICosIGlu dCkpOwotCi1fUFJPVE9UWVAoc3RhdGljIFZPSUQgbWxzcmVzZXQsICh2b2lkKSk7Ci1fUFJPVE9U WVAoc3RhdGljIFZPSUQgc2VjdXJlX2Vycm9yLCAoY2hhciAqZm10LCAuLi4pKTsKLV9QUk9UT1RZ UChzdGF0aWMgVk9JRCBsb3N0cGVlciwgKHZvaWQpKTsKLV9QUk9UT1RZUChzdGF0aWMgVk9JRCBj YW5jZWxfcmVtb3RlLCAoaW50KSk7Ci1fUFJPVE9UWVAoc3RhdGljIFZPSUQgY2hhbmdldHlwZSwg KGludCwgaW50KSk7Ci0KLV9QUk9UT1RZUChzdGF0aWMgc2lndHlwZSBjbWRjYW5jZWwsIChpbnQp KTsKLQotI2lmZGVmIEZUUF9TUlAKLV9QUk9UT1RZUChzdGF0aWMgaW50IHNycF9yZXNldCwgKCkp OwotX1BST1RPVFlQKHN0YXRpYyBpbnQgc3JwX2Z0cF9hdXRoLCAoY2hhciAqLGNoYXIgKixjaGFy ICopKTsKLV9QUk9UT1RZUChzdGF0aWMgaW50IHNycF9wdXQsIChDSEFSICosIENIQVIgKiosIGlu dCwgaW50ICopKTsKLV9QUk9UT1RZUChzdGF0aWMgaW50IHNycF9nZXQsIChDSEFSICoqLCBDSEFS ICoqLCBpbnQgKiwgaW50ICopKTsKLV9QUk9UT1RZUChzdGF0aWMgaW50IHNycF9lbmNvZGUsIChp bnQsIENIQVIgKiwgQ0hBUiAqLCB1bnNpZ25lZCBpbnQpKTsKLV9QUk9UT1RZUChzdGF0aWMgaW50 IHNycF9kZWNvZGUsIChpbnQsIENIQVIgKiwgQ0hBUiAqLCB1bnNpZ25lZCBpbnQpKTsKLV9QUk9U T1RZUChzdGF0aWMgaW50IHNycF9zZWxjaXBoZXIsIChjaGFyICopKTsKLV9QUk9UT1RZUChzdGF0 aWMgaW50IHNycF9zZWxoYXNoLCAoY2hhciAqKSk7Ci0jZW5kaWYgLyogRlRQX1NSUCAqLwotCi0j aWZkZWYgRlRQX0dTU0FQSQotX1BST1RPVFlQKHN0YXRpYyB2b2lkIHVzZXJfZ3NzX2Vycm9yLChP TV91aW50MzIsIE9NX3VpbnQzMixjaGFyICopKTsKLSNlbmRpZiAvKiBGVFBfR1NTQVBJICovCi0K LS8qICBEIE8gRiBUIFAgQSBSIEcgIC0tICBEbyBhbiBGVFAgY29tbWFuZC1saW5lIGFyZ3VtZW50 LiAgKi8KLQotI2lmZGVmIEZUUF9TRUNVUklUWQotI2lmbmRlZiBOT0lDUAotI2RlZmluZSBGVF9O T0dTUyAgIDEKLSNkZWZpbmUgRlRfTk9LNCAgICAyCi0jZGVmaW5lIEZUX05PU1JQICAgMwotI2Rl ZmluZSBGVF9OT1NTTCAgIDQKLSNkZWZpbmUgRlRfTk9UTFMgICA1Ci0jZGVmaW5lIEZUX0NFUlRG SSAgNgotI2RlZmluZSBGVF9PS0NFUlQgIDcKLSNkZWZpbmUgRlRfREVCVUcgICA4Ci0jZGVmaW5l IEZUX0tFWSAgICAgOQotI2RlZmluZSBGVF9TRUNVUkUgMTAKLSNkZWZpbmUgRlRfVkVSSUZZIDEx Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGZ0cHp0YWJbXSA9IHsKLSAgICB7ICIhZ3NzIiwgICAg RlRfTk9HU1MsICAwIH0sCi0gICAgeyAiIWtyYjQiLCAgIEZUX05PSzQsICAgMCB9LAotICAgIHsg IiFzcnAiLCAgICBGVF9OT1NSUCwgIDAgfSwKLSAgICB7ICIhc3NsIiwgICAgRlRfTk9TU0wsICAw IH0sCi0gICAgeyAiIXRscyIsICAgIEZUX05PVExTLCAgMCB9LAotICAgIHsgImNlcnQiLCAgICBG VF9DRVJURkksIENNX0FSRyB9LAotICAgIHsgImNlcnRzb2siLCBGVF9PS0NFUlQsIDAgfSwKLSAg ICB7ICJkZWJ1ZyIsICAgRlRfREVCVUcsICAwIH0sCi0gICAgeyAia2V5IiwgICAgIEZUX0tFWSwg ICAgQ01fQVJHIH0sCi0gICAgeyAibm9nc3MiLCAgIEZUX05PR1NTLCAgMCB9LAotICAgIHsgIm5v a3JiNCIsICBGVF9OT0s0LCAgIDAgfSwKLSAgICB7ICJub3NycCIsICAgRlRfTk9TUlAsICAwIH0s Ci0gICAgeyAibm9zc2wiLCAgIEZUX05PU1NMLCAgMCB9LAotICAgIHsgIm5vdGxzIiwgICBGVF9O T1RMUywgIDAgfSwKLSNpZmRlZiBDT01NRU5UCi0gICAgeyAic2VjdXJlIiwgIEZUX1NFQ1VSRSwg MCB9LAotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB7ICJ2ZXJpZnkiLCAgRlRfVkVSSUZZLCBD TV9BUkcgfSwKLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5mdHB6dGFiID0gc2l6 ZW9mKGZ0cHp0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpIC0gMTsKLQotLyoKLSAgVGhlIGZv bGxvd2luZyBjaXBoZXIgYW5kIGhhc2ggdGFibGVzIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoCi0g IGR5bmFtaWNseSBjcmVhdGVkIHZlcnNpb25zIGJhc2VkIHVwb24gdGhlIGxpbmtlZCBsaWJyYXJ5 LgotKi8KLSNkZWZpbmUgU1JQX0JMT1dGSVNIX0VDQiAgICAxCi0jZGVmaW5lIFNSUF9CTE9XRklT SF9DQkMgICAgMgotI2RlZmluZSBTUlBfQkxPV0ZJU0hfQ0ZCNjQgIDMKLSNkZWZpbmUgU1JQX0JM T1dGSVNIX09GQjY0ICA0Ci0jZGVmaW5lIFNSUF9DQVNUNV9FQ0IgICAgICAgNQotI2RlZmluZSBT UlBfQ0FTVDVfQ0JDICAgICAgIDYKLSNkZWZpbmUgU1JQX0NBU1Q1X0NGQjY0ICAgICA3Ci0jZGVm aW5lIFNSUF9DQVNUNV9PRkI2NCAgICAgOAotI2RlZmluZSBTUlBfREVTX0VDQiAgICAgICAgIDkK LSNkZWZpbmUgU1JQX0RFU19DQkMgICAgICAgIDEwCi0jZGVmaW5lIFNSUF9ERVNfQ0ZCNjQgICAg ICAxMQotI2RlZmluZSBTUlBfREVTX09GQjY0ICAgICAgMTIKLSNkZWZpbmUgU1JQX0RFUzNfRUNC ICAgICAgIDEzCi0jZGVmaW5lIFNSUF9ERVMzX0NCQyAgICAgICAxNAotI2RlZmluZSBTUlBfREVT M19DRkI2NCAgICAgMTUKLSNkZWZpbmUgU1JQX0RFUzNfT0ZCNjQgICAgIDE2Ci0KLXN0YXRpYyBz dHJ1Y3Qga2V5dGFiIGNpcGhlcnRhYltdID0gewotICAgIHsgImJsb3dmaXNoX2VjYiIsICAgU1JQ X0JMT1dGSVNIX0VDQiwgICAwIH0sCi0gICAgeyAiYmxvd2Zpc2hfY2JjIiwgICBTUlBfQkxPV0ZJ U0hfQ0JDLCAgIDAgfSwKLSAgICB7ICJibG93ZmlzaF9jZmI2NCIsIFNSUF9CTE9XRklTSF9DRkI2 NCwgMCB9LAotICAgIHsgImJsb3dmaXNoX29mYjY0IiwgU1JQX0JMT1dGSVNIX09GQjY0LCAwIH0s Ci0gICAgeyAiY2FzdDVfZWNiIiwgICAgICBTUlBfQ0FTVDVfRUNCLCAgICAgIDAgfSwKLSAgICB7 ICJjYXN0NV9jYmMiLCAgICAgIFNSUF9DQVNUNV9DQkMsICAgICAgMCB9LAotICAgIHsgImNhc3Q1 X2NmYjY0IiwgICAgU1JQX0NBU1Q1X0NGQjY0LCAgICAwIH0sCi0gICAgeyAiY2FzdDVfb2ZiNjQi LCAgICBTUlBfQ0FTVDVfT0ZCNjQsICAgIDAgfSwKLSAgICB7ICJkZXNfZWNiIiwgICAgICAgIFNS UF9ERVNfRUNCLCAgICAgICAgMCB9LAotICAgIHsgImRlc19jYmMiLCAgICAgICAgU1JQX0RFU19D QkMsICAgICAgICAwIH0sCi0gICAgeyAiZGVzX2NmYjY0IiwgICAgICBTUlBfREVTX0NGQjY0LCAg ICAgIDAgfSwKLSAgICB7ICJkZXNfb2ZiNjQiLCAgICAgIFNSUF9ERVNfT0ZCNjQsICAgICAgMCB9 LAotICAgIHsgImRlczNfZWNiIiwgICAgICAgU1JQX0RFUzNfRUNCLCAgICAgICAwIH0sCi0gICAg eyAiZGVzM19jYmMiLCAgICAgICBTUlBfREVTM19DQkMsICAgICAgIDAgfSwKLSAgICB7ICJkZXMz X2NmYjY0IiwgICAgIFNSUF9ERVMzX0NGQjY0LCAgICAgMCB9LAotICAgIHsgImRlczNfb2ZiNjQi LCAgICAgU1JQX0RFUzNfT0ZCNjQsICAgICAwIH0sCi0gICAgeyAibm9uZSIsICAgICAgICAgICAw LCAwIH0sCi0gICAgeyAiIiwgMCwgMCB9Ci19Owotc3RhdGljIGludCBuY2lwaGVydGFiID0gc2l6 ZW9mKGNpcGhlcnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikgLSAxOwotCi0jZGVmaW5lIFNS UF9NRDUgIDEKLSNkZWZpbmUgU1JQX1NIQSAgMgotc3RhdGljIHN0cnVjdCBrZXl0YWIgaGFzaHRh YltdID0gewotICAgIHsgIm1kNSIsICAgICAgICAgICAgICBTUlBfTUQ1LCAgICAgICAgMCB9LAot ICAgIHsgIm5vbmUiLCAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgMCB9LAotICAgIHsgInNo YSIsICAgICAgICAgICAgICBTUlBfU0hBLCAgICAgICAgMCB9LAotICAgIHsgIiIsIDAsIDAgfQot fTsKLXN0YXRpYyBpbnQgbmhhc2h0YWIgPSBzaXplb2YoaGFzaHRhYikgLyBzaXplb2Yoc3RydWN0 IGtleXRhYikgLSAxOwotI2VuZGlmIC8qIE5PSUNQICovCi0jZW5kaWYgLyogRlRQX1NFQ1VSSVRZ ICovCi0KLXN0YXRpYyBjaGFyICoKLXN0cnZhbChzMSxzMikgY2hhciAqIHMxLCAqIHMyOyB7Ci0g ICAgaWYgKCFzMSkgczEgPSAiIjsKLSAgICBpZiAoIXMyKSBzMiA9ICIiOwotICAgIHJldHVybigq czEgPyBzMSA6ICgqczIgPyBzMiA6ICIobm9uZSkiKSk7Ci19Ci0KLSNpZm5kZWYgTk9DU0VUUwot c3RhdGljIGNoYXIgKiByZm5wdHIgPSBOVUxMOwotc3RhdGljIGludCByZm5sZW4gPSAwOwotc3Rh dGljIGNoYXIgcmZuYnVmW1JGTkJVRlNJWl07ICAgICAgICAgIC8qIFJlbW90ZSBmaWxlbmFtZSB0 cmFuc2xhdGUgYnVmZmVyICovCi1zdGF0aWMgY2hhciAqIHhnbmJwID0gTlVMTDsKLQotc3RhdGlj IGludAotc3RyZ2V0YygpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhlbHBlciBm dW5jdGlvbiBmb3IgeGduYnl0ZSgpICovCi0gICAgaW50IGM7Ci0gICAgaWYgKCF4Z25icCkKLSAg ICAgIHJldHVybigtMSk7Ci0gICAgaWYgKCEqeGduYnApCi0gICAgICByZXR1cm4oLTEpOwotICAg IGMgPSAodW5zaWduZWQpICp4Z25icCsrOwotICAgIHJldHVybigoKHVuc2lnbmVkKSBjKSAmIDB4 ZmYpOwotfQotCi1zdGF0aWMgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSGVs cGVyIGZ1bmN0aW9uIGZvciB4cG5ieXRlKCkgKi8KLSNpZmRlZiBDS19BTlNJQwotc3RycHV0Yyhj aGFyIGMpCi0jZWxzZQotc3RycHV0YyhjKSBjaGFyIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8K LXsKLSAgICByZm5sZW4gPSByZm5wdHIgLSByZm5idWY7Ci0gICAgaWYgKHJmbmxlbiA+PSAoUkZO QlVGU0laIC0gMSkpCi0gICAgICByZXR1cm4oLTEpOwotICAgICpyZm5wdHIrKyA9IGM7Ci0gICAg KnJmbnB0ciA9IE5VTDsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLXN0YXRpYyBpbnQKLSNpZmRlZiBD S19BTlNJQwoteHByaW50YyhjaGFyIGMpCi0jZWxzZQoteHByaW50YyhjKSBjaGFyIGM7Ci0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBwcmludGYoIiVjIixjKTsKLSAgICByZXR1cm4oMCk7 Ci19Ci0KLXN0YXRpYyBWT0lECi1ieXRzd2FwKGMwLGMxKSBpbnQgKiBjMCwgKiBjMTsgewotICAg IGludCB0OwotICAgIHQgPSAqYzA7Ci0gICAgKmMwID0gKmMxOwotICAgICpjMSA9IHQ7Ci19Ci0j ZW5kaWYgLyogTk9DU0VUUyAqLwotCi0jaWZkZWYgQ0tMT0dESUFMCi1jaGFyIGZ0cGxvZ2J1ZltD WExPR0JVRkxdID0geyBOVUwsIE5VTCB9OyAvKiBDb25uZWN0aW9uIExvZyAqLwotaW50IGZ0cGxv Z2FjdGl2ZSA9IDA7Ci1sb25nIGZ0cGxvZ3ByZXYgPSAwTDsKLQotVk9JRAotZnRwbG9nZW5kKCkg ewotICAgIGV4dGVybiBpbnQgZGlhbG9nOwotICAgIGV4dGVybiBjaGFyIGRpYWZpbFtdOwotICAg IGxvbmcgZDEsIGQyLCB0MSwgdDI7Ci0gICAgY2hhciBidWZbMzJdLCAqIHA7Ci0KLSAgICBkZWJ1 ZyhGMTExLCJmdHAgY3ggbG9nIGFjdGl2ZSIsY2tpdG9hKGRpYWxvZyksZnRwbG9nYWN0aXZlKTsK LSAgICBkZWJ1ZyhGMTEwLCJmdHAgY3ggbG9nIGJ1ZiIsZnRwbG9nYnVmLDApOwotCi0gICAgaWYg KCFmdHBsb2dhY3RpdmUgfHwgIWZ0cGxvZ2J1ZlswXSkgLyogTm8gYWN0aXZlIHJlY29yZCAqLwot ICAgICAgcmV0dXJuOwotCi0gICAgZnRwbG9nYWN0aXZlID0gMDsgICAgICAgICAgICAgICAgICAg LyogUmVjb3JkIGlzIG5vdCBhY3RpdmUgKi8KLQotICAgIGQxID0gbWpkKChjaGFyICopZnRwbG9n YnVmKTsgICAgICAgIC8qIEdldCBzdGFydCBkYXRlIG9mIHRoaXMgc2Vzc2lvbiAqLwotICAgIGNr c3RybmNweShidWYsY2tkYXRlKCksMzEpOyAgICAgICAgIC8qIEdldCBjdXJyZW50IGRhdGUgKi8K LSAgICBkMiA9IG1qZChidWYpOyAgICAgICAgICAgICAgICAgICAgICAvKiBDb252ZXJ0IHRoZW0g dG8gbWpkcyAqLwotICAgIHAgPSBmdHBsb2didWY7ICAgICAgICAgICAgICAgICAgICAgIC8qIEdl dCBzdGFydCB0aW1lICovCi0gICAgcFsxMV0gPSBOVUw7Ci0gICAgcFsxNF0gPSBOVUw7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogQ29udmVydCB0byBzZWNvbmRzICovCi0gICAgdDEgPSBhdG9s KHArOSkgKiAzNjAwTCArIGF0b2wocCsxMikgKiA2MEwgKyBhdG9sKHArMTUpOwotICAgIHBbMTFd ID0gJzonOwotICAgIHBbMTRdID0gJzonOwotICAgIHAgPSBidWY7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEdldCBlbmQgdGltZSAqLwotICAgIHBbMTFdID0gTlVMOwotICAgIHBbMTRd ID0gTlVMOwotICAgIHQyID0gYXRvbChwKzkpICogMzYwMEwgKyBhdG9sKHArMTIpICogNjBMICsg YXRvbChwKzE1KTsKLSAgICB0MiA9ICgoZDIgLSBkMSkgKiA4NjQwMEwpICsgKHQyIC0gdDEpOyAv KiBDb21wdXRlIGVsYXBzZWQgdGltZSAqLwotICAgIGlmICh0MiA+IC0xTCkgewotICAgICAgICBm dHBsb2dwcmV2ID0gdDI7Ci0gICAgICAgIHAgPSBoaG1tc3ModDIpOwotICAgICAgICBja3N0cm5j YXQoZnRwbG9nYnVmLCJFPSIsQ1hMT0dCVUZMKTsgLyogQXBwZW5kIHRvIGxvZyByZWNvcmQgKi8K LSAgICAgICAgY2tzdHJuY2F0KGZ0cGxvZ2J1ZixwLENYTE9HQlVGTCk7Ci0gICAgfSBlbHNlCi0g ICAgICBmdHBsb2dwcmV2ID0gMEw7Ci0gICAgZGVidWcoRjEwMSwiZnRwIGN4IGxvZyBkaWFsb2ci LCIiLGRpYWxvZyk7Ci0gICAgaWYgKGRpYWxvZykgeyAgICAgICAgICAgICAgICAgICAgICAgLyog SWYgbG9nZ2luZyAqLwotICAgICAgICBpbnQgeDsKLSAgICAgICAgeCA9IGRpYW9wbihkaWFmaWws MSwxKTsgICAgICAgICAvKiBPcGVuIGxvZyBpbiBhcHBlbmQgbW9kZSAqLwotICAgICAgICBpZiAo eCA+IDApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImZ0cCBjeCBsb2cgb3BlbiIsIiIseCk7 Ci0gICAgICAgICAgICB4ID0genNvdXRsKFpESUZJTCxmdHBsb2didWYpOyAvKiBXcml0ZSB0aGUg cmVjb3JkICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgY3ggbG9nIHdyaXRlIiwiIix4 KTsKLSAgICAgICAgICAgIHggPSB6Y2xvc2UoWkRJRklMKTsgICAgICAgICAvKiBDbG9zZSB0aGUg bG9nICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgY3ggbG9nIGNsb3NlIiwiIix4KTsK LSAgICAgICAgfQotICAgIH0KLX0KLQotVk9JRAotZG9sb2dmdHAoKSB7Ci0gICAgZnRwbG9nZW5k KCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJldmlvdXMgc2Vzc2lvbiBub3QgY2xvc2Vk IG91dD8gKi8KLSAgICBmdHBsb2dwcmV2ID0gMEw7Ci0gICAgZnRwbG9nYWN0aXZlID0gMTsgICAg ICAgICAgICAgICAgICAgLyogUmVjb3JkIGlzIGFjdGl2ZSAqLwotCi0gICAgY2ttYWt4bXNnKGZ0 cGxvZ2J1ZixDWExPR0JVRkwsCi0gICAgICAgICAgICAgIGNrZGF0ZSgpLCIgIixzdHJ2YWwoZnRw X2xvZ25hbWUsTlVMTCksIiAiLGNrZ2V0cGlkKCksCi0gICAgICAgICAgICAgICIgVD1GVFAgTj0i LCBzdHJ2YWwoZnRwX2hvc3QsTlVMTCksIiBIPSIsbXlob3N0LAotICAgICAgICAgICAgICAiIFA9 IiwgY2tpdG9hKGZ0cF9wb3J0KSwiICIpOyAvKiBTTVMgMjAwNy8wMi8xNSAqLwotICAgIGRlYnVn KEYxMTAsImZ0cCBjeCBsb2cgYmVnaW4iLGZ0cGxvZ2J1ZiwwKTsKLX0KLSNlbmRpZiAvKiBDS0xP R0RJQUwgKi8KLQotc3RhdGljIGNoYXIgKiBkdW1teVsyXSA9IHsgTlVMTCwgTlVMTCB9OwotCi1z dGF0aWMgc3RydWN0IGtleXRhYiBtb2RldGFiW10gPSB7Ci0gICAgeyAiYWN0aXZlIiwgIDAsIDAg fSwKLSAgICB7ICJwYXNzaXZlIiwgMSwgMCB9Ci19OwotCi0jaWZuZGVmIE5PQ01ETAotaW50ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENhbGxlZCBmcm9tIGNrdXVzeS5j ICovCi0jaWZkZWYgQ0tfQU5TSUMKLWRvZnRwYXJnKGNoYXIgYykKLSNlbHNlCi1kb2Z0cGFyZyhj KSBjaGFyIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGRvZnRwYXJnICovIHsKLSAgICBp bnQgeCwgejsKLSAgICBjaGFyICp4cDsKLSAgICBleHRlcm4gY2hhciAqKnhhcmd2LCAqeGFyZzA7 Ci0gICAgZXh0ZXJuIGludCB4YXJnYywgc3RheWZsZywgaGF2ZWZ0cHVpZDsKLSAgICBleHRlcm4g Y2hhciB1aWRidWZbXTsKLQotICAgIHhwID0gKnhhcmd2KzE7ICAgICAgICAgICAgICAgICAgICAg IC8qIFBvaW50ZXIgZm9yIGJ1bmRsZWQgYXJncyAqLwotICAgIHdoaWxlIChjKSB7Ci0gICAgICAg IGlmIChja3N0cmNocigiTXVEUGtjSHptIixjKSkgeyAgLyogT3B0aW9ucyB0aGF0IHRha2UgYXJn dW1lbnRzICovCi0gICAgICAgICAgICBpZiAoKih4cCsxKSkgewotICAgICAgICAgICAgICAgIGZh dGFsKCI/SW52YWxpZCBhcmd1bWVudCBidW5kbGluZyIpOwotICAgICAgICAgICAgfQotICAgICAg ICAgICAgeGFyZ3YrKywgeGFyZ2MtLTsKLSAgICAgICAgICAgIGlmICgoeGFyZ2MgPCAxKSB8fCAo Kip4YXJndiA9PSAnLScpKSB7Ci0gICAgICAgICAgICAgICAgZmF0YWwoIj9SZXF1aXJlZCBhcmd1 bWVudCBtaXNzaW5nIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgc3dpdGNo IChjKSB7ICAgICAgICAgICAgICAgICAgICAvKiBCaWcgc3dpdGNoIG9uIGFyZyAqLwotICAgICAg ICAgIGNhc2UgJ2gnOiAgICAgICAgICAgICAgICAgICAgIC8qIGhlbHAgKi8KLSAgICAgICAgICAg cHJpbnRmKCJDLUtlcm1pdCdzIEZUUCBjbGllbnQgY29tbWFuZC1saW5lIHBlcnNvbmFsaXR5LiAg VXNhZ2U6XG4iKTsKLSAgICAgICAgICAgIHByaW50ZigiICAlcyBbIG9wdGlvbnMgXSBob3N0IFsg cG9ydCBdIFstcGcgZmlsZXMgXVxuXG4iLHhhcmcwKTsKLSAgICAgICAgICAgIHByaW50ZigiT3B0 aW9uczpcbiIpOwotICAgICAgICAgICAgcHJpbnRmKCIgIC1oICAgICAgICAgICA9IGhlbHAgKHRo aXMgbWVzc2FnZSlcbiIpOwotICAgICAgICAgICAgcHJpbnRmKCIgIC1tIG1vZGUgICAgICA9IFwi cGFzc2l2ZVwiIChkZWZhdWx0KSBvciBcImFjdGl2ZVwiXG4iKTsKLSAgICAgICAgICAgIHByaW50 ZigiICAtdSBuYW1lICAgICAgPSB1c2VybmFtZSBmb3IgYXV0b2xvZ2luIChvciAtTSlcbiIpOwot ICAgICAgICAgICAgcHJpbnRmKCIgIC1QIHBhc3N3b3JkICA9IHBhc3N3b3JkIGZvciBhdXRvbG9n aW4gKFJJU0tZKVxuIik7Ci0gICAgICAgICAgICBwcmludGYoIiAgLUEgICAgICAgICAgID0gYXV0 b2xvZ2luIGFub255bW91c2x5XG4iKTsKLSAgICAgICAgICAgIHByaW50ZigiICAtRCBkaXJlY3Rv cnkgPSBjZCBhZnRlciBhdXRvbG9naW5cbiIpOwotICAgICAgICAgICAgcHJpbnRmKCIgIC1iICAg ICAgICAgICA9IGZvcmNlIGJpbmFyeSBtb2RlXG4iKTsKLSAgICAgICAgICAgIHByaW50ZigiICAt YSAgICAgICAgICAgPSBmb3JjZSB0ZXh0IChcImFzY2lpXCIpIG1vZGUgKG9yIC1UKVxuIik7Ci0g ICAgICAgICAgICBwcmludGYoIiAgLWQgICAgICAgICAgID0gZGVidWcgKGRvdWJsZSB0byBhZGQg dGltZXN0YW1wcylcbiIpOwotICAgICAgICAgICAgcHJpbnRmKCIgIC1uICAgICAgICAgICA9IG5v IGF1dG9sb2dpblxuIik7Ci0gICAgICAgICAgICBwcmludGYoIiAgLXYgICAgICAgICAgID0gdmVy Ym9zZSAoZGVmYXVsdClcbiIpOwotICAgICAgICAgICAgcHJpbnRmKCIgIC1xICAgICAgICAgICA9 IHF1aWV0XG4iKTsKLSAgICAgICAgICAgIHByaW50ZigiICAtUyAgICAgICAgICAgPSBTdGF5IChp c3N1ZSBjb21tYW5kIHByb21wdCB3aGVuIGRvbmUpXG4iKTsKLSAgICAgICAgICAgIHByaW50Zigi ICAtWSAgICAgICAgICAgPSBkbyBub3QgZXhlY3V0ZSBLZXJtaXQgaW5pdCBmaWxlXG4iKTsKLSAg ICAgICAgICAgIHByaW50ZigiICAtcCBmaWxlcyAgICAgPSBmaWxlcyB0byBwdXQgYWZ0ZXIgYXV0 b2xvZ2luIChvciAtcylcbiIpOwotICAgICAgICAgICAgcHJpbnRmKCIgIC1nIGZpbGVzICAgICA9 IGZpbGVzIHRvIGdldCBhZnRlciBhdXRvbG9naW5cbiIpOwotICAgICAgICAgICAgcHJpbnRmKCIg IC1SICAgICAgICAgICA9IHJlY3Vyc2l2ZSAoZm9yIHVzZSB3aXRoIC1wKVxuIik7Ci0KLSNpZmRl ZiBGVFBfU0VDVVJJVFkKLSAgICAgICAgICAgIHByaW50ZigiXG5TZWN1cml0eSBvcHRpb25zOlxu Iik7Ci0gICAgICAgICAgICBwcmludGYoIiAgLWsgcmVhbG0gICAgID0gS2VyYmVyb3MgNCByZWFs bVxuIik7Ci0gICAgICAgICAgICBwcmludGYoIiAgLWYgICAgICAgICAgID0gS2VyYm9yb3MgNSBj cmVkZW50aWFscyBmb3J3YXJkaW5nXG4iKTsKLSAgICAgICAgICAgIHByaW50ZigiICAteCAgICAg ICAgICAgPSBhdXRvZW5jcnlwdGlvbiBtb2RlXG4iKTsKLSAgICAgICAgICAgIHByaW50ZigiICAt YyBjaXBoZXIgICAgPSBTUlAgY2lwaGVyIHR5cGVcbiIpOwotICAgICAgICAgICAgcHJpbnRmKCIg IC1IIGhhc2ggICAgICA9IFNSUCBlbmNyeXB0aW9uIGhhc2hcbiIpOwotICAgICAgICAgICAgcHJp bnRmKCIgIC16IG9wdGlvbiAgICA9IFNlY3VyaXR5IG9wdGlvbnNcbiIpOwotI2VuZGlmIC8qIEZU UF9TRUNVUklUWSAqLwotCi0gICAgICAgICAgICBwcmludGYoIlxuLXAgb3IgLWcsIGlmIGdpdmVu LCBzaG91bGQgYmUgbGFzdC4gIEV4YW1wbGU6XG4iKTsKLSAgICAgICAgICAgIHByaW50ZigiICBm dHAgLUEga2VybWl0LmNvbHVtYmlhLmVkdSAtRCBrZXJtaXQgLWFnIFRFU1RGSUxFXG4iKTsKLQot ICAgICAgICAgICAgZG9leGl0KEdPT0RfRVhJVCwtMSk7Ci0gICAgICAgICAgICBicmVhazsKLQot ICAgICAgICAgIGNhc2UgJ1InOiAgICAgICAgICAgICAgICAgICAgIC8qIFJlY3Vyc2l2ZSAqLwot ICAgICAgICAgICAgcmVjdXJzaXZlID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg ICAgY2FzZSAnZCc6ICAgICAgICAgICAgICAgICAgICAgLyogRGVidWcgKi8KLSNpZmRlZiBERUJV RwotICAgICAgICAgICAgaWYgKGRlYmxvZykgewotICAgICAgICAgICAgICAgIGV4dGVybiBpbnQg ZGVidGltOwotICAgICAgICAgICAgICAgIGRlYnRpbSA9IDE7Ci0gICAgICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgICAgIGRlYmxvZyA9IGRlYm9wbigiZGVidWcubG9nIiwwKTsKLSAgICAg ICAgICAgICAgICBkZWJvayA9IDE7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8K LSAgICAgICAgICAgIC8qIGZhbGwgdGhydSBvbiBwdXJwb3NlICovCi0KLSAgICAgICAgICBjYXNl ICd0JzogICAgICAgICAgICAgICAgICAgICAvKiBUcmFjZSAqLwotICAgICAgICAgICAgZnRwX2Rl YisrOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlICduJzogICAgICAgICAg ICAgICAgICAgICAvKiBObyBhdXRvbG9naW4gKi8KLSAgICAgICAgICAgIGZ0cF9sb2cgPSAwOwot ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlICdpJzogICAgICAgICAgICAgICAg ICAgICAvKiBObyBwcm9tcHQgKi8KLSAgICAgICAgICBjYXNlICd2JzogICAgICAgICAgICAgICAg ICAgICAvKiBWZXJib3NlICovCi0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAg ICAgLyogKGlnbm9yZWQpICovCi0KLSAgICAgICAgICBjYXNlICdxJzogICAgICAgICAgICAgICAg ICAgICAvKiBRdWlldCAqLwotICAgICAgICAgICAgcXVpZXQgPSAxOwotICAgICAgICAgICAgYnJl YWs7Ci0KLSAgICAgICAgICBjYXNlICdTJzogICAgICAgICAgICAgICAgICAgICAvKiBTdGF5ICov Ci0gICAgICAgICAgICBzdGF5ZmxnID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg ICAgY2FzZSAnTSc6Ci0gICAgICAgICAgY2FzZSAndSc6ICAgICAgICAgICAgICAgICAgICAgLyog TXkgVXNlciBOYW1lICovCi0gICAgICAgICAgICBpZiAoKGludClzdHJsZW4oKnhhcmd2KSA+IDYz KSB7Ci0gICAgICAgICAgICAgICAgZmF0YWwoInVzZXJuYW1lIHRvbyBsb25nIik7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgICAgICBja3N0cm5jcHkodWlkYnVmLCp4YXJndixVSURCVUZMRU4pOwot ICAgICAgICAgICAgaGF2ZWZ0cHVpZCA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAg ICAgIGNhc2UgJ0EnOgotICAgICAgICAgICAgY2tzdHJuY3B5KHVpZGJ1ZiwiYW5vbnltb3VzIixV SURCVUZMRU4pOwotICAgICAgICAgICAgaGF2ZWZ0cHVpZCA9IDE7Ci0gICAgICAgICAgICBicmVh azsKLQotICAgICAgICAgIGNhc2UgJ1QnOiAgICAgICAgICAgICAgICAgICAgIC8qIFRleHQgKi8K LSAgICAgICAgICBjYXNlICdhJzogICAgICAgICAgICAgICAgICAgICAvKiAiYXNjaWkiICovCi0g ICAgICAgICAgY2FzZSAnYic6ICAgICAgICAgICAgICAgICAgICAgLyogQmluYXJ5ICovCi0gICAg ICAgICAgICBiaW5hcnkgPSAoYyA9PSAnYicpID8gRlRUX0JJTiA6IEZUVF9BU0M7Ci0gICAgICAg ICAgICBmdHBfeGZlcm1vZGUgPSBYTU9ERV9NOwotICAgICAgICAgICAgZmlsZXBlZWsgPSAwOwot ICAgICAgICAgICAgcGF0dGVybnMgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg ICBjYXNlICdnJzogICAgICAgICAgICAgICAgICAgICAvKiBHZXQgKi8KLSAgICAgICAgICBjYXNl ICdwJzogICAgICAgICAgICAgICAgICAgICAvKiBQdXQgKi8KLSAgICAgICAgICBjYXNlICdzJzog eyAgICAgICAgICAgICAgICAgICAvKiBTZW5kICg9IFB1dCkgKi8KLSAgICAgICAgICAgICAgaW50 IGhhdmVmaWxlcywgcmM7Ci0gICAgICAgICAgICAgIGlmIChmdHBfYWN0aW9uKSB7Ci0gICAgICAg ICAgICAgICAgICBmYXRhbCgiT25seSBvbmUgRlRQIGFjdGlvbiBhdCBhIHRpbWUgcGxlYXNlIik7 Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgaWYgKCooeHArMSkpIHsKLSAgICAgICAg ICAgICAgICAgIGZhdGFsKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRsaW5nIGFmdGVyIC1zIik7Ci0g ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgbmZpbHMgPSAwOyAgICAgICAgICAgICAgICAv KiBJbml0aWFsaXplIGZpbGUgY291bnRlciAqLwotICAgICAgICAgICAgICBoYXZlZmlsZXMgPSAw OyAgICAgICAgICAgIC8qIEFzc3VtZSBub3RoaW5nIHRvIHNlbmQgICovCi0gICAgICAgICAgICAg IGNtbGlzdCA9IHhhcmd2ICsgMTsgICAgICAgLyogUmVtZW1iZXIgdGhpcyBwb2ludGVyICovCi0K LSAgICAgICAgICAgICAgd2hpbGUgKCsreGFyZ3YsIC0teGFyZ2MgPiAwKSB7IC8qIFRyYXZlcnNl IHRoZSBsaXN0ICovCi0gICAgICAgICAgICAgICAgICBpZiAoYyA9PSAnZycpIHsKLSAgICAgICAg ICAgICAgICAgICAgICBoYXZlZmlsZXMrKzsKLSAgICAgICAgICAgICAgICAgICAgICBuZmlscysr OwotICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgfQot I2lmZGVmIFJFQ1VSU0lWRQotICAgICAgICAgICAgICAgICAgaWYgKCFzdHJjbXAoKnhhcmd2LCIu IikpIHsKLSAgICAgICAgICAgICAgICAgICAgICBoYXZlZmlsZXMgPSAxOwotICAgICAgICAgICAg ICAgICAgICAgIG5maWxzKys7Ci0gICAgICAgICAgICAgICAgICAgICAgcmVjdXJzaXZlID0gMTsK LSAgICAgICAgICAgICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLwotICAgICAg ICAgICAgICAgICAgICBpZiAoKHJjID0gemNoa2koKnhhcmd2KSkgPiAtMSB8fCAocmMgPT0gLTIp KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAgKHJjICE9IC0yKQotICAgICAgICAgICAg ICAgICAgICAgICAgICBoYXZlZmlsZXMgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgbmZp bHMrKzsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc3dpbGQoKnhhcmd2KSAmJiBu enhwYW5kKCp4YXJndiwwKSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVmaWxl cyA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZmlscysrOwotICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgeGFyZ2MrKywgeGFyZ3YtLTsg ICAgICAgICAvKiBBZGp1c3QgYXJndi9hcmdjICovCi0gICAgICAgICAgICAgIGlmICghaGF2ZWZp bGVzKSB7Ci0gICAgICAgICAgICAgICAgICBpZiAoYyA9PSAnZycpIHsKLSAgICAgICAgICAgICAg ICAgICAgICBmYXRhbCgiTm8gZmlsZXMgdG8gcHV0Iik7Ci0gICAgICAgICAgICAgICAgICB9IGVs c2UgewotICAgICAgICAgICAgICAgICAgICAgIGZhdGFsKCJObyBmaWxlcyB0byBnZXQiKTsKLSAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBmdHBfYWN0 aW9uID0gYzsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNh c2UgJ0QnOiAgICAgICAgICAgICAgICAgICAgIC8qIERpcmVjdG9yeSAqLwotICAgICAgICAgICAg bWFrZXN0cigmZnRwX3JkaXIsKnhhcmd2KTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg ICAgY2FzZSAnbSc6ICAgICAgICAgICAgICAgICAgICAgLyogTW9kZSAoQWN0aXZlL1Bhc3NpdmUg Ki8KLSAgICAgICAgICAgIGZ0cF9wc3YgPSBsb29rdXAobW9kZXRhYiwqeGFyZ3YsMixOVUxMKTsK LSAgICAgICAgICAgIGlmIChmdHBfcHN2IDwgMCkgZmF0YWwoIkludmFsaWQgbW9kZSIpOwotICAg ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlICdQJzoKLSAgICAgICAgICAgIG1ha2Vz dHIoJmZ0cF90bXAsKnhhcmd2KTsgICAvKiBZb3UtS25vdy1XaGF0ICovCi0gICAgICAgICAgICBi cmVhazsKLQotICAgICAgICAgIGNhc2UgJ1knOiAgICAgICAgICAgICAgICAgICAgIC8qIE5vIGlu aXRpYWxpemF0aW9uIGZpbGUgKi8KLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAg ICAgICAvKiAoYWxyZWFkeSBkb25lIGluIHByZXNjYW4pICovCi0KLSNpZmRlZiBDS19VUkwKLSAg ICAgICAgICBjYXNlICdVJzogeyAgICAgICAgICAgICAgICAgICAvKiBVUkwgKi8KLSAgICAgICAg ICAgICAgLyogVGhlc2UgYXJlIHNldCBieSB1cmxwYXJzZSgpIC0gYW55IG5vdCBzZXQgYXJlIE5V TEwgKi8KLSAgICAgICAgICAgICAgaWYgKGdfdXJsLmhvcykgewotLyoKLSAgS2VybWl0IGhhcyBh Y2NlcHRlZCBob3N0OnBvcnQgbm90YXRpb24gc2luY2UgbWFueSB5ZWFycyBiZWZvcmUgVVJMcyB3 ZXJlCi0gIGludmVudGVkLiAgVW5mb3J0dW5hdGVseSwgVVJMcyBjb25mbGljdCB3aXRoIHRoaXMg bm90YXRpb24uICBUaHVzICJmdHAKLSAgaG9zdDo0NDkiIGxvb2tzIGxpa2UgYSBVUkwgYW5kIHJl c3VsdHMgaW4gc2VydmljZSA9IGhvc3QgYW5kIGhvc3QgPSA0NDkuCi0gIEhlcmUgd2UgdHJ5IHRv IGNhdGNoIHRoaXMgc2l0dWF0aW9uIHRyYW5zcGFyZW50bHkgdG8gdGhlIHVzZXIuCi0qLwotICAg ICAgICAgICAgICAgICAgaWYgKGNrc3RyY21wKGdfdXJsLnN2YywiZnRwIiwtMSwwKQotI2lmZGVm IENLX1NTTAotICAgICAgICAgICAgICAgICAgICAgICAmJiBja3N0cmNtcChnX3VybC5zdmMsImZ0 cHMiLC0xLDApCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgICAgICAgICAgICAgICAgICkg ewotICAgICAgICAgICAgICAgICAgICAgIGlmICghZ191cmwudXNyICYmCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICFnX3VybC5wc3cgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIWdf dXJsLnBvciAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAhZ191cmwucHRoKSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgIGdfdXJsLnBvciA9IGdfdXJsLmhvczsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgZ191cmwuaG9zID0gZ191cmwuc3ZjOwotICAgICAgICAgICAgICAgICAg ICAgICAgICBnX3VybC5zdmMgPSAiZnRwIjsKLSAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgICAgICAgICAgICAgICBja21ha21zZyh0bXBidWYsVE1QQlVGU0laLCJO b24tRlRQIFVSTDogc2VydmljZT0iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBnX3VybC5zdmMsIiBob3N0PSIsZ191cmwuaG9zKTsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgZmF0YWwodG1wYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgICBtYWtlc3RyKCZmdHBfaG9zdCxnX3VybC5ob3MpOwot ICAgICAgICAgICAgICAgICAgaWYgKGdfdXJsLnVzcikgewotICAgICAgICAgICAgICAgICAgICAg IGhhdmVmdHB1aWQgPSAxOwotICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweSh1aWRidWYs Z191cmwudXNyLFVJREJVRkxFTik7Ci0gICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmZnRw X2xvZ25hbWUsdWlkYnVmKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg IGlmIChnX3VybC5wc3cpIHsKLSAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZmdHBfdG1w LGdfdXJsLnBzdyk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBpZiAo Z191cmwucHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgaWYgKCFnX3VybC51c3IpIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWZ0cHVpZCA9IDE7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgIGNrc3RybmNweSh1aWRidWYsImFub255bW91cyIsVUlEQlVGTEVOKTsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmZnRwX2xvZ25hbWUsdWlkYnVmKTsKLSAgICAg ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgaWYgKGZ0cF9hY3Rpb24p IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZmF0YWwoIk9ubHkgb25lIEZUUCBhY3Rpb24g YXQgYSB0aW1lIHBsZWFzZSIpOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICAgICAgICBpZiAoIXN0YXlmbGcpCi0gICAgICAgICAgICAgICAgICAgICAgICBxdWlldCA9 IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgbmZpbHMgPSAxOwotICAgICAgICAgICAgICAgICAg ICAgIGR1bW15WzBdID0gZ191cmwucHRoOwotICAgICAgICAgICAgICAgICAgICAgIGNtbGlzdCA9 IGR1bW15OwotICAgICAgICAgICAgICAgICAgICAgIGZ0cF9hY3Rpb24gPSAnZyc7Ci0gICAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB4cCA9IE5VTEw7Ci0gICAgICAgICAgICAg ICAgICBoYXZldXJsID0gMTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfVVJMICovCi0KLSNpZmRlZiBGVFBfU0VDVVJJVFkK LSAgICAgICAgICBjYXNlICdrJzogeyAgICAgICAgICAgICAgICAgICAvKiBLNCBSZWFsbSAqLwot I2lmZGVmIEZUUF9LUkI0Ci0gICAgICAgICAgICAgIGNrc3RybmNweShmdHBfcmVhbG0sKnhhcmd2 LCBSRUFMTV9TWik7Ci0jZW5kaWYgLyogRlRQX0tSQjQgKi8KLSAgICAgICAgICAgICAgaWYgKGZ0 cF9kZWIpIHByaW50ZigiSzQgUmVhbG0gPSBbJXNdXG4iLCp4YXJndik7Ci0gICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlICdmJzogewotI2lmZGVmIEZUUF9H U1NBUEkKLSAgICAgICAgICAgICAgZnRwX2NmdyA9IDE7Ci0gICAgICAgICAgICAgIGlmIChmdHBf ZGViKSBwcmludGYoIks1IENyZWRlbnRpYWxzIEZvcndhcmRpbmdcbiIpOwotI2Vsc2UgLyogRlRQ X0dTU0FQSSAqLwotICAgICAgICAgICAgICBwcmludGYoIks1IENyZWRlbnRpYWxzIEZvcndhcmRp bmcgbm90IHN1cHBvcnRlZFxuIik7Ci0jZW5kaWYgLyogRlRQX0dTU0FQSSAqLwotICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAneCc6IHsKLSAgICAgICAg ICAgICAgZnRwX2NyeSA9IDE7Ci0gICAgICAgICAgICAgIGlmIChmdHBfZGViKSBwcmludGYoIkF1 dG9lbmNyeXB0aW9uXG4iKTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAg ICAgICAgIGNhc2UgJ2MnOiB7ICAgICAgICAgICAgICAgICAgIC8qIENpcGhlciAqLwotI2lmZGVm IEZUUF9TUlAKLSAgICAgICAgICAgICAgaWYgKCFzcnBfc2VsY2lwaGVyKCp4YXJndikpIHsKLSAg ICAgICAgICAgICAgICAgIGlmIChmdHBfZGViKSBwcmludGYoIlNSUCBjaXBoZXIgdHlwZTogXCIl c1wiXG4iLCp4YXJndik7Ci0gICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHBy aW50ZigiP0ludmFsaWQgU1JQIGNpcGhlciB0eXBlOiBcIiVzXCJcbiIsKnhhcmd2KTsKLSNlbHNl IC8qIEZUUF9TUlAgKi8KLSAgICAgICAgICAgICAgcHJpbnRmKCI/U1JQIG5vdCBzdXBwb3J0ZWRc biIpOwotI2VuZGlmIC8qIEZUUF9TUlAgKi8KLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgfQotICAgICAgICAgIGNhc2UgJ0gnOiB7Ci0jaWZkZWYgRlRQX1NSUAotICAgICAgICAgICAg ICBpZiAoIXNycF9zZWxoYXNoKCp4YXJndikpIHsKLSAgICAgICAgICAgICAgICAgIGlmIChmdHBf ZGViKSBwcmludGYoIlNSUCBoYXNoIHR5cGU6IFwiJXNcIlxuIiwqeGFyZ3YpOwotICAgICAgICAg ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBwcmludGYoIj9JbnZhbGlkIFNSUCBoYXNoIHR5 cGU6IFwiJXNcIlxuIiwqeGFyZ3YpOwotI2Vsc2UgLyogRlRQX1NSUCAqLwotICAgICAgICAgICAg ICBwcmludGYoIj9TUlAgbm90IHN1cHBvcnRlZFxuIik7Ci0jZW5kaWYgLyogRlRQX1NSUCAqLwot ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSAneic6IHsK LSAgICAgICAgICAgICAgLyogKnhhcmd2IGNvbnRhaW5zIGEgdmFsdWUgb2YgdGhlIGZvcm0gdGFn PXZhbHVlICovCi0gICAgICAgICAgICAgIC8qIHdlIG5lZWQgdG8gbG9va3VwIHRoZSB0YWcgYW5k IHNhdmUgdGhlIHZhbHVlICAqLwotICAgICAgICAgICAgICBjaGFyICogcCA9IE5VTEwsICogcSA9 IE5VTEw7Ci0gICAgICAgICAgICAgIG1ha2VzdHIoJnAsKnhhcmd2KTsKLSAgICAgICAgICAgICAg eSA9IGNraW5kZXgoIj0iLHAsMCwwLDEpOwotICAgICAgICAgICAgICBpZiAoeSA+IDApCi0gICAg ICAgICAgICAgICAgcFt5LTFdID0gJ1wwJzsKLSAgICAgICAgICAgICAgeCA9IGxvb2t1cChmdHB6 dGFiLHAsbmZ0cHp0YWIsJnopOwotICAgICAgICAgICAgICBpZiAoeCA8IDApIHsKLSAgICAgICAg ICAgICAgICAgIHByaW50ZigiP0ludmFsaWQgc2VjdXJpdHkgb3B0aW9uOiBcIiVzXCJcbiIscCk7 Ci0gICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICBpZiAoZnRwX2RlYikK LQkJICAgIHByaW50ZigiU2VjdXJpdHkgb3B0aW9uOiBcIiVzIixwKTsKLSAgICAgICAgICAgICAg ICAgIGlmIChmdHB6dGFiW3pdLmZsZ3MgJiBDTV9BUkcpIHsKLSAgICAgICAgICAgICAgICAgICAg ICBpZiAoeSA8PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgZmF0YWwoIj9NaXNzaW5nIHJl cXVpcmVkIHZhbHVlIik7Ci0gICAgICAgICAgICAgICAgICAgICAgcSA9ICZwW3ldOwotICAgICAg ICAgICAgICAgICAgICAgIGlmICghKnEpCi0gICAgICAgICAgICAgICAgICAgICAgICBmYXRhbCgi P01pc3NpbmcgcmVxdWlyZWQgdmFsdWUiKTsKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoZnRw X2RlYikKLQkJCXByaW50ZigiPSVzXCIiLHEpOwotICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgICAgc3dpdGNoIChmdHB6dGFiW3pdLmt3dmFsKSB7IC8qIC16IG9wdGlvbnMgdy9h cmdzICovCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgRlRfTk9HU1M6Ci0jaWZkZWYgRlRQX0dT U0FQSQotICAgICAgICAgICAgICAgICAgICAgIGZvciAoeiA9IDA7IHogPCBGVFBBVFlQUyAmJiBm dHBfYXV0aF90eXBlW3pdOyB6KyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ0 cF9hdXRoX3R5cGVbel0gPT0gRlRBX0dLNSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZm9yICh5ID0gejsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA8IChG VFBBVFlQUy0xKSAmJiBmdHBfYXV0aF90eXBlW3ldOwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB5KysKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdHBfYXV0aF90eXBlW3ldID0gZnRwX2F1dGhf dHlwZVt5KzFdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRwX2F1dGhfdHlwZVtG VFBBVFlQUy0xXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIH0KLSNlbmRp ZiAvKiBGVFBfR1NTQVBJICovCi0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgICAgICAgIGNhc2UgRlRfTk9LNDoKLSNpZmRlZiBGVFBfS1JCNAotICAgICAgICAgICAg ICAgICAgICAgIGZvciAoeiA9IDA7IHogPCBGVFBBVFlQUyAmJiBmdHBfYXV0aF90eXBlW3pdOyB6 KyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ0cF9hdXRoX3R5cGVbel0gPT0g RlRBX0s0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHkgPSB6OwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5IDwgKEZUUEFUWVBTLTEpICYmIGZ0cF9h dXRoX3R5cGVbeV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkrKwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZ0cF9hdXRoX3R5cGVbeV0gPSBmdHBfYXV0aF90eXBlW3krMV07Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBmdHBfYXV0aF90eXBlW0ZUUEFUWVBTLTFdID0gMDsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIEZUUF9LUkI0ICovCi0g ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRlRf Tk9TUlA6Ci0jaWZkZWYgRlRQX1NSUAotICAgICAgICAgICAgICAgICAgICAgIGZvciAoeiA9IDA7 IHogPCBGVFBBVFlQUyAmJiBmdHBfYXV0aF90eXBlW3pdOyB6KyspIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKGZ0cF9hdXRoX3R5cGVbel0gPT0gRlRBX1NSUCkgewotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZm9yICh5ID0gejsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgeSA8IChGVFBBVFlQUy0xKSAmJiBmdHBfYXV0aF90eXBlW3ldOwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5KysKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdHBfYXV0aF90 eXBlW3ldID0gZnRwX2F1dGhfdHlwZVt5KzFdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZnRwX2F1dGhfdHlwZVtGVFBBVFlQUy0xXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgICAgICAgIH0KLSNlbmRpZiAvKiBGVFBfU1JQICovCi0gICAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRlRfTk9TU0w6Ci0jaWZkZWYgQ0tfU1NM Ci0gICAgICAgICAgICAgICAgICAgICAgZm9yICh6ID0gMDsgeiA8IEZUUEFUWVBTICYmIGZ0cF9h dXRoX3R5cGVbel07IHorKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnRwX2F1 dGhfdHlwZVt6XSA9PSBGVEFfU1NMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm b3IgKHkgPSB6OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5IDwgKEZUUEFU WVBTLTEpICYmIGZ0cF9hdXRoX3R5cGVbeV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHkrKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZ0cF9hdXRoX3R5cGVbeV0gPSBmdHBfYXV0aF90eXBl W3krMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdHBfYXV0aF90eXBlW0ZUUEFU WVBTLTFdID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlmIC8q IENLX1NTTCAqLwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg ICAgICBjYXNlIEZUX05PVExTOgotI2lmZGVmIENLX1NTTAotICAgICAgICAgICAgICAgICAgICAg IGZvciAoeiA9IDA7IHogPCBGVFBBVFlQUyAmJiBmdHBfYXV0aF90eXBlW3pdOyB6KyspIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ0cF9hdXRoX3R5cGVbel0gPT0gRlRBX1RMUykg ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh5ID0gejsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgeSA8IChGVFBBVFlQUy0xKSAmJiBmdHBfYXV0aF90eXBl W3ldOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5KysKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmdHBfYXV0aF90eXBlW3ldID0gZnRwX2F1dGhfdHlwZVt5KzFdOwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZnRwX2F1dGhfdHlwZVtGVFBBVFlQUy0xXSA9IDA7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBGVF9DRVJURkk6Ci0j aWZkZWYgQ0tfU1NMCi0gICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NsX3JzYV9jZXJ0 X2ZpbGUscSk7Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRlRfT0tDRVJUOgotI2lmZGVmIENLX1NTTAot ICAgICAgICAgICAgICAgICAgICAgIHNzbF9jZXJ0c29rX2ZsYWcgPSAxOwotI2VuZGlmIC8qIENL X1NTTCAqLwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg ICBjYXNlIEZUX0RFQlVHOgotI2lmZGVmIERFQlVHCi0gICAgICAgICAgICAgICAgICAgICAgaWYg KGRlYmxvZykgewotICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlcm4gaW50IGRlYnRpbTsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidGltID0gMTsKLSAgICAgICAgICAgICAgICAg ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJsb2cgPSBkZWJvcG4o ImRlYnVnLmxvZyIsMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIERFQlVH ICovCi0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNh c2UgRlRfS0VZOgotI2lmZGVmIENLX1NTTAotICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIo JnNzbF9yc2Ffa2V5X2ZpbGUscSk7Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRlRfU0VDVVJFOgotICAg ICAgICAgICAgICAgICAgICAgIC8qIG5vIGVxdWl2YWxlbnQgKi8KLSAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBGVF9WRVJJRlk6Ci0jaWZkZWYg Q0tfU1NMCi0gICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZGlnaXRzKHEpKQotICAgICAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCI/QmFkIG51bWJlcjogJXNcbiIscSk7Ci0gICAgICAgICAg ICAgICAgICAgICAgc3NsX3ZlcmlmeV9mbGFnID0gYXRvaShxKTsKLSNlbmRpZiAvKiBDS19TU0wg Ki8KLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICBpZiAoZnRwX2RlYikgcHJpbnRmKCJcIlxuIik7 Ci0gICAgICAgICAgICAgIGZyZWUocCk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg IH0KLSNlbmRpZiAvKiBGVFBfU0VDVVJJVFkgKi8KLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg ICAgICAgICBmYXRhbDIoKnhhcmd2LAotICAgICAgICAgICAgICAgICAgICJ1bmtub3duIGNvbW1h bmQtbGluZSBvcHRpb24sIHR5cGUgXCJmdHAgLWhcIiBmb3IgaGVscCIKLSAgICAgICAgICAgICAg ICAgICApOwotICAgICAgICB9Ci0gICAgICAgIGlmICgheHApIGJyZWFrOwotICAgICAgICBjID0g KisreHA7ICAgICAgICAgICAgICAgICAgICAgIC8qIFNlZSBpZiBvcHRpb25zIGFyZSBidW5kbGVk ICovCi0gICAgfQotICAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAvKiBOT0NNREwgKi8KLQotaW50 Ci1mdHBpc2Nvbm5lY3RlZCgpIHsKLSAgICByZXR1cm4oY29ubmVjdGVkKTsKLX0KLQotaW50Ci1m dHBpc2xvZ2dlZGluKCkgewotICAgIHJldHVybihjb25uZWN0ZWQgPyBsb2dnZWRpbiA6IDApOwot fQotCi1pbnQKLWZ0cGlzc2VjdXJlKCkgewotICAgIHJldHVybigoZnRwX2RwbCA9PSBGUExfQ0xS ICYmICFzc2xfZnRwX3Byb3h5KSA/IDAgOiAxKTsKLX0KLQotc3RhdGljIFZPSUQKLWZ0c2NyZWVu KG4sIGMsIHosIHMpIGludCBuOyBjaGFyIGM7IENLX09GRl9UIHo7IGNoYXIgKiBzOyB7Ci0gICAg aWYgKGRpc3BsYSAmJiBmZGlzcGxhICYmICFiYWNrZ3JkICYmICFxdWlldCAmJiAhb3V0MnNjcmVl bikgewotICAgICAgICBpZiAoIWRweWFjdGl2ZSkgewotICAgICAgICAgICAgY2tzY3JlZW4oU0NS X1BULCdTJywoQ0tfT0ZGX1QpMCwiIik7Ci0gICAgICAgICAgICBkcHlhY3RpdmUgPSAxOwotICAg ICAgICB9Ci0gICAgICAgIGNrc2NyZWVuKG4sYyx6LHMpOwotICAgIH0KLX0KLQotI2lmbmRlZiBP UzIKLS8qICBnIG0gcyB0IGkgbSBlIHIgIC0tICBNaWxsaXNlY29uZCB0aW1lciAqLwotCi1sb25n Ci1nbXN0aW1lcigpIHsKLSNpZmRlZiBIQVZFX01TRUNTCi0gICAgLyogRm9yIHRob3NlIHZlcnNp b25zIG9mIHp0aW1lKCkgdGhhdCBhbHNvIHNldCBnbG9iYWwgenRtc2VjLiAqLwotICAgIGNoYXIg KnAgPSBOVUxMOwotICAgIGxvbmcgejsKLSAgICB6dGltZSgmcCk7Ci0gICAgaWYgKCFwKSByZXR1 cm4oMEwpOwotICAgIGlmICghKnApIHJldHVybigwTCk7Ci0gICAgeiA9IGF0b2wocCsxMSkgKiAz NjAwTCArIGF0b2wocCsxNCkgKiA2MEwgKyBhdG9sKHArMTcpOwotICAgIHJldHVybih6ICogMTAw MCArIHp0bXNlYyk7Ci0jZWxzZQotICAgIHJldHVybigobG9uZyl0aW1lKE5VTEwpICogMTAwMEwp OwotI2VuZGlmIC8qIEhBVkVfTVNFQ1MgKi8KLX0KLSNlbmRpZiAvKiBPUzIgKi8KLQotLyogIGQg byBzIGUgdCBmIHQgcCAgLS0gIFRoZSBTRVQgRlRQIGNvbW1hbmQgICovCi0KLWludAotZG9zZXRm dHAoKSB7Ci0gICAgaW50IGN4OwotICAgIGlmICgoY3ggPSBjbWtleShmdHBzZXQsbmZ0cHNldCwi IiwiIix4eHN0cmluZykpIDwgMCkgLyogU2V0IHdoYXQ/ICovCi0gICAgICByZXR1cm4oY3gpOwot ICAgIHN3aXRjaCAoY3gpIHsKLQotICAgICAgY2FzZSBGVFNfRk5DOiAgICAgICAgICAgICAgICAg ICAgIC8qIEZpbGVuYW1lIGNvbGxpc2lvbiBhY3Rpb24gKi8KLSAgICAgICAgaWYgKCh4ID0gY21r ZXkoZnRwY29seHRhYixuZnRwY29seCwiIiwiIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICBy ZXR1cm4oeCk7Ci0gICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICByZXR1 cm4oeSk7Ci0gICAgICAgIGZ0cF9mbmMgPSB4OwotICAgICAgICByZXR1cm4oMSk7Ci0KLSAgICAg IGNhc2UgRlRTX0NOVjogICAgICAgICAgICAgICAgICAgICAvKiBGaWxlbmFtZSBjb252ZXJzaW9u ICovCi0gICAgICAgIGlmICgoeCA9IGNta2V5KGZudGFiLG5mbnRhYiwiIiwiYXV0b21hdGljIix4 eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIGlmICgoeSA9IGNt Y2ZtKCkpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgIGZ0cF9jbnYgPSB4Owot ICAgICAgICByZXR1cm4oMSk7Ci0KLSAgICAgIGNhc2UgRlRTX0RCRzogICAgICAgICAgICAgICAg ICAgICAvKiBEZWJ1ZyBtZXNzYWdlcyAqLwotICAgICAgICByZXR1cm4oc2V0b24oJmZ0cF9kZWIp KTsKLQotICAgICAgY2FzZSBGVFNfTE9HOiAgICAgICAgICAgICAgICAgICAgIC8qIEF1dG8tbG9n aW4gKi8KLSAgICAgICAgcmV0dXJuKHNldG9uKCZmdHBfbG9nKSk7Ci0KLSAgICAgIGNhc2UgRlRT X1BTVjogICAgICAgICAgICAgICAgICAgICAvKiBQYXNzaXZlIG1vZGUgKi8KLQlyZXR1cm4oZG9z ZXRmdHBwc3YoKSk7Ci0KLSAgICAgIGNhc2UgRlRTX1NQQzogICAgICAgICAgICAgICAgICAgICAv KiBTZW5kIHBvcnQgY29tbWFuZHMgKi8KLSAgICAgICAgeCA9IHNldG9uKCZmdHBfc3BjKTsKLSAg ICAgICAgaWYgKHggPiAwKSBzZW5kcG9ydCA9IGZ0cF9zcGM7Ci0gICAgICAgIHJldHVybih4KTsK LQotICAgICAgY2FzZSBGVFNfVFlQOiAgICAgICAgICAgICAgICAgICAgIC8qIFR5cGUgKi8KLSAg ICAgICAgaWYgKCh4ID0gY21rZXkoZnRwdHlwLG5mdHB0eXAsIiIsIiIseHhzdHJpbmcpKSA8IDAp Ci0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJl dHVybih5KTsKLQlmdHBfdHlwID0geDsKLQlnX2Z0cF90eXAgPSB4OwotCXRlbmV4ID0gKGZ0cF90 eXAgPT0gRlRUX1RFTik7Ci0gICAgICAgIHJldHVybigxKTsKLQotICAgICAgY2FzZSBGVFNfVVNO OiAgICAgICAgICAgICAgICAgICAgIC8qIFVuaXF1ZSBzZXJ2ZXIgbmFtZXMgKi8KLSAgICAgICAg cmV0dXJuKHNldG9uKCZmdHBfdXNuKSk7Ci0KLSAgICAgIGNhc2UgRlRTX1ZCTTogICAgICAgICAg ICAgICAgICAgICAvKiBWZXJib3NlIG1vZGUgKi8KLSAgICAgICAgaWYgKCh4ID0gc2V0b24oJmZ0 cF92Ym0pKSA8IDApICAvKiBQZXItY29tbWFuZCBjb3B5ICovCi0gICAgICAgICAgcmV0dXJuKHgp OwotICAgICAgICBmdHBfdmJ4ID0gZnRwX3ZibTsgICAgICAgICAgICAgIC8qIEdsb2JhbCBzdGlj a3kgY29weSAqLwotICAgICAgICByZXR1cm4oeCk7Ci0KLSAgICAgIGNhc2UgRlRTX1RTVDogICAg ICAgICAgICAgICAgICAgICAvKiAiaWYgKHRlc3RpbmcpIiBtZXNzYWdlcyAqLwotICAgICAgICBy ZXR1cm4oc2V0b24oJnRlc3RpbmcpKTsKLQotICAgICAgY2FzZSBGVFNfUFJNOiAgICAgICAgICAg ICAgICAgICAgIC8qIFNlbmQgcGVybWlzc2lvbnMgKi8KLSAgICAgICAgcmV0dXJuKHNldG9uYXV0 KCZmdHBfcHJtKSk7Ci0KLSAgICAgIGNhc2UgRlRTX0FVVDogICAgICAgICAgICAgICAgICAgICAv KiBBdXRvLWF1dGhlbnRpY2F0aW9uICovCi0gICAgICAgIHJldHVybihzZXRvbigmZnRwX2F1dCkp OwotCi0gICAgICBjYXNlIEZUU19FUlI6ICAgICAgICAgICAgICAgICAgICAgLyogRXJyb3IgYWN0 aW9uICovCi0gICAgICAgIGlmICgoeCA9IGNta2V5KHFvcnAsMiwiIiwiIix4eHN0cmluZykpIDwg MCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkK LSAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgIGZ0cF9lcnIgPSB4OwotICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IDEpOwotCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICAgIGNhc2UgRlRTX1hMQTog ICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2xhdGlvbiAqLwotICAgICAgICByZXR1cm4oc2V0 b24oJmZ0cF94bGEpKTsKLQotICAgICAgY2FzZSBGVFNfQ1NSOiAgICAgICAgICAgICAgICAgICAg IC8qIFNlcnZlciBjaGFyc2V0ICovCi0gICAgICAgIGlmICgoeCA9IGNta2V5KGZjc3RhYixuZmls YywiY2hhcmFjdGVyLXNldCIsInV0ZjgiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVy bih4KTsKLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgIHJldHVybih5 KTsKLSAgICAgICAgZnRwX2NzciA9IHg7Ci0gICAgICAgIGZ0cF94bGEgPSAxOyAgICAgICAgICAg ICAgICAgICAgLyogQWxzbyBlbmFibGUgdHJhbnNsYXRpb24gKi8KLSAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSAgICAgIGNhc2UgRlRTX0dGVDoK LSAgICAgICAgcmV0dXJuKHNldG9uKCZnZXRfYXV0bykpOyAgICAgICAvKiBHRVQtZmlsZXR5cGUt c3dpdGNoaW5nICovCi0KLSAgICAgIGNhc2UgRlRTX0RBVDoKLSAgICAgICAgcmV0dXJuKHNldG9u KCZmdHBfZGF0ZXMpKTsgICAgICAvKiBTZXQgZmlsZSBkYXRlcyAqLwotCi0jaWZkZWYgRlRQX1RJ TUVPVVQKLSAgICAgIGNhc2UgRlRTX1RNTzoJCQkvKiBUaW1lb3V0ICovCi0gICAgICAgIGlmICgo eCA9IGNtbnVtKCJOdW1iZXIgb2Ygc2Vjb25kcyIsIjAiLDEwLCZ6LHh4c3RyaW5nKSkgPCAwKQot ICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQotICAg ICAgICAgIHJldHVybih5KTsKLQlmdHBfdGltZW91dCA9IHo7Ci0JcmV0dXJuKHN1Y2Nlc3MgPSAx KTsKLSNlbmRpZgkvKiBGVFBfVElNRU9VVCAqLwotCi0gICAgICBjYXNlIEZUU19TVE86IHsJCQkv KiBTZXJ2ZXIgdGltZSBvZmZzZXQgKi8KLQkgIGNoYXIgKiBzLCAqIHAgPSBOVUxMOwotCSAgbG9u ZyBrOwotCSAgaWYgKCh4ID0gY21mbGQoIlsrLV1oaFs6bW1bOnNzXV0iLCIrMCIsJnMseHhzdHJp bmcpKSA8IDApCi0JICAgIHJldHVybih4KTsKLQkgIGlmICghc3RyY21wKHMsIiswIikpIHsKLQkg ICAgICBzID0gTlVMTDsKLQkgIH0gZWxzZSBpZiAoKHggPSBkZWx0YTJzZWMocywmaykpIDwgMCkg eyAvKiBDaGVjayBmb3JtYXQgKi8KLQkgICAgICBwcmludGYoIj9JbnZhbGlkIHRpbWUgb2Zmc2V0 XG4iKTsKLQkgICAgICByZXR1cm4oLTkpOwotCSAgfQotCSAgbWFrZXN0cigmcCxzKTsJCS8qIE1h a2UgYSBzYWZlIGNvcHkgdGhlIHN0cmluZyAqLwotCSAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSB7 CS8qIEdldCBjb25maXJtYXRpb24gKi8KLQkgICAgICBpZiAocCkKLQkJbWFrZXN0cigmcCxOVUxM KTsKLQkgICAgICByZXR1cm4oeCk7Ci0JICB9Ci0JICBmdHNfc3RvID0gcDsJCQkvKiBDb25maXJt ZWQgLSBzZXQgdGhlIHN0cmluZy4gKi8KLQkgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICB9 Ci0gICAgICBjYXNlIEZUU19BUFc6IHsKLQkgIGNoYXIgKiBzOwotCSAgaWYgKCh4ID0gY210eHQo IlRleHQiLCAiIiwgJnMsIHh4c3RyaW5nKSkgPCAwKQotCSAgICByZXR1cm4oeCk7Ci0JICBtYWtl c3RyKCZmdHBfYXB3LCAqcyA/IHMgOiBOVUxMKTsKLQkgIHJldHVybihzdWNjZXNzID0gMSk7Ci0g ICAgICB9Ci0KLSAgICAgIGNhc2UgRlRTX0JVRzogewotICAgICAgICAgIGlmICgoeCA9IGNta2V5 KGZ0cGJ1Z3RhYixuZnRwYnVnLCIiLCIiLHh4c3RyaW5nKSkgPCAwKSAKLQkgICAgcmV0dXJuKHgp OwotICAgICAgICAgIHN3aXRjaCAoeCkgewotI2lmZGVmIENLX1NTTAotICAgICAgICAgIGNhc2Ug RlRCX1NWMjoKLQkgICAgcmV0dXJuIHNldG9uKCZmdHBfYnVnX3VzZV9zc2xfdjIpOwotI2VuZGlm IC8qIENLX1NTTCAqLwotICAgICAgICAgIGRlZmF1bHQ6Ci0JICAgIHJldHVybigtMik7Ci0gICAg ICAgICAgfQotICAgICAgfQotCi0jaWZkZWYgRlRQX1NFQ1VSSVRZCi0gICAgICBjYXNlIEZUU19D Ulk6ICAgICAgICAgICAgICAgICAgICAgLyogQXV0by1lbmNyeXB0aW9uICovCi0gICAgICAgIHJl dHVybihzZXRvbigmZnRwX2NyeSkpOwotCi0gICAgICBjYXNlIEZUU19DRlc6ICAgICAgICAgICAg ICAgICAgICAgLyogQ3JlZGVudGlhbC1mb3J3YXJkaW5nICovCi0gICAgICAgIHJldHVybihzZXRv bigmZnRwX2NmdykpOwotCi0gICAgICBjYXNlIEZUU19DUEw6ICAgICAgICAgICAgICAgICAgICAg LyogQ29tbWFuZCBwcm90ZWN0aW9uIGxldmVsICovCi0gICAgICAgIGlmICgoeCA9IGNta2V5KGZ0 cHBybyxuZnRwcHJvLCIiLCIiLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIGlm ICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBzdWNjZXNzID0gZnRzX2Nw bCh4KTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOwotCi0gICAgICBjYXNlIEZUU19EUEw6ICAg ICAgICAgICAgICAgICAgICAgLyogRGF0YSBwcm90ZWN0aW9uIGxldmVsICovCi0gICAgICAgIGlm ICgoeCA9IGNta2V5KGZ0cHBybyxuZnRwcHJvLCIiLCIiLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4o eCk7Ci0gICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICAg IHN1Y2Nlc3MgPSBmdHNfZHBsKHgpOwotICAgICAgICAgIHJldHVybihzdWNjZXNzKTsKLQotICAg ICAgY2FzZSBGVFNfQVRQOiB7ICAgICAgICAgICAgICAgICAgIC8qIEZUUCBBdXRoIFR5cGUgKi8K LSAgICAgICAgICBpbnQgaSwgaiwgYXR5cGVzWzhdOwotCi0gICAgICAgICAgZm9yIChpID0gMDsg aSA8IDg7IGkrKykgewotICAgICAgICAgICAgICBpZiAoKHkgPSBjbWtleShmdHBhdXRoLG5mdHBh dXRoLCIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaSA9PSAwKSA/ICJhdXRvbWF0 aWMiIDogIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKSB7 Ci0gICAgICAgICAgICAgICAgICBpZiAoeSA9PSAtMykKLSAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgaWYgKGkgPiAwICYmICh5ID09IEZUQV9BVVRPKSkgewotICAgICAgICAgICAgICAg ICAgcHJpbnRmKCI/Q2hvaWNlIG1heSBvbmx5IGJlIHVzZWQgaW4gZmlyc3QgcG9zaXRpb24uXHJc biIpOwotICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICBp ZiAoYXR5cGVzW2pdID09IHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxyXG4/ Q2hvaWNlIGhhcyBhbHJlYWR5IGJlZW4gdXNlZC5cclxuIik7Ci0gICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICBhdHlwZXNbaV0gPSB5OwotICAgICAgICAgICAgICBpZiAoeSA9PSBGVEFfQVVU TykgewotICAgICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGkgPCA4KQotICAgICAg ICAgICAgYXR5cGVzW2ldID0gMDsKLSAgICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApCi0g ICAgICAgICAgICByZXR1cm4oeik7Ci0gICAgICAgICAgaWYgKGF0eXBlc1swXSA9PSBGVEFfQVVU TykgewotICAgICAgICAgICAgICBpID0gMDsKLSNpZmRlZiBGVFBfR1NTQVBJCi0gICAgICAgICAg ICAgIGZ0cF9hdXRoX3R5cGVbaSsrXSA9IEZUQV9HSzU7Ci0jZW5kaWYgLyogRlRQX0dTU0FQSSAq LwotI2lmZGVmIEZUUF9TUlAKLSAgICAgICAgICAgICAgZnRwX2F1dGhfdHlwZVtpKytdID0gRlRB X1NSUDsKLSNlbmRpZiAvKiBGVFBfU1JQICovCi0jaWZkZWYgRlRQX0tSQjQKLSAgICAgICAgICAg ICAgZnRwX2F1dGhfdHlwZVtpKytdID0gRlRBX0s0OwotI2VuZGlmIC8qIEZUUF9LUkI0ICovCi0j aWZkZWYgQ0tfU1NMCi0gICAgICAgICAgICAgIGZ0cF9hdXRoX3R5cGVbaSsrXSA9IEZUQV9UTFM7 Ci0gICAgICAgICAgICAgIGZ0cF9hdXRoX3R5cGVbaSsrXSA9IEZUQV9TU0w7Ci0jZW5kaWYgLyog Q0tfU1NMICovCi0gICAgICAgICAgICAgIGZ0cF9hdXRoX3R5cGVbaV0gPSAwOwotICAgICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0gICAgICAg ICAgICAgICAgZnRwX2F1dGhfdHlwZVtpXSA9IGF0eXBlc1tpXTsKLSAgICAgICAgICB9Ci0gICAg ICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgIH0KLQotICAgICAgY2FzZSBGVFNfU1JQ OgotI2lmZGVmIEZUUF9TUlAKLSAgICAgICAgaWYgKCh4ID0gY21rZXkoZnRwc3JwLG5mdHBzcnAs IiIsIiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBzd2l0 Y2ggKHgpIHsKLSAgICAgICAgICBjYXNlIFNSUF9DSVBIRVI6Ci0gICAgICAgICAgICBpZiAoKHgg PSBjbWtleShjaXBoZXJ0YWIsbmNpcGhlcnRhYiwiIiwiIix4eHN0cmluZykpIDwgMCkKLSAgICAg ICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKQot ICAgICAgICAgICAgICByZXR1cm4oeik7Ci0gICAgICAgICAgICBzdWNjZXNzID0gIXNycF9zZWxj aXBoZXIoY2lwaGVydGFiW3hdLmt3ZCk7Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2Vzcyk7Ci0g ICAgICAgICAgY2FzZSBTUlBfSEFTSDoKLSAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KGhhc2h0 YWIsbmhhc2h0YWIsIiIsIiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih4 KTsKLSAgICAgICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAgcmV0 dXJuKHopOwotICAgICAgICAgICAgc3VjY2VzcyA9ICFzcnBfc2VsaGFzaChoYXNodGFiW3hdLmt3 ZCk7Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICAgIGRlZmF1bHQ6 Ci0gICAgICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVy bih6KTsKLSAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgIH0KLSNlbHNlIC8qIEZUUF9T UlAgKi8KLSAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgIHJldHVybih6 KTsKLSAgICAgICAgcmV0dXJuKC0yKTsKLSNlbmRpZiAvKiBGVFBfU1JQICovCi0jZW5kaWYgLyog RlRQX1NFQ1VSSVRZICovCi0KLSAgICAgIGNhc2UgRlRTX0RJUzoKLQlkb3hkaXMoMik7CQkJLyog MiA9PSBmdHAgKi8KLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQotICAgICAgZGVmYXVs dDoKLSAgICAgICAgcmV0dXJuKC0yKTsKLSAgICB9Ci19Ci0KLWludAotZnRwYnllKCkgewotICAg IGludCB4OwotICAgIGlmICghY29ubmVjdGVkKQotICAgICAgcmV0dXJuKDEpOwotICAgIGlmICh0 ZXN0aW5nKQotICAgICAgcHJpbnRmKCIgZnRwIGNsb3NpbmcgJXMuLi5cbiIsZnRwX2hvc3QpOwot ICAgIHggPSBmdHBjbG9zZSgpOwotICAgIHJldHVybigoeCA+IC0xKSA/IDEgOiAwKTsKLX0KLQot LyogIG8gcCBlIG4gZiB0IHAgIC0tICBQYXJzZSBGVFAgaG9zdG5hbWUgJiBwb3J0IGFuZCBvcGVu ICovCi0KLXN0YXRpYyBpbnQKLW9wZW5mdHAocyxvcG5fdGxzKSBjaGFyICogczsgaW50IG9wbl90 bHM7IHsKLSAgICBjaGFyIGMsICogcCwgKiBob3N0bmFtZSA9IE5VTEwsICpob3N0c2F2ZSA9IE5V TEwsICogc2VydmljZSA9IE5VTEw7Ci0gICAgaW50IGksIG4sIGhhdmVob3N0ID0gMCwgZ2V0dmFs ID0gMCwgcmMgPSAtOSwgb3BuX3BzdiA9IC0xLCBub2xvZ2luID0gMDsKLSAgICBpbnQgaGF2ZXVz ZXIgPSAwOwotICAgIHN0cnVjdCBGREIgc3csIGZsLCBjbTsKLSAgICBleHRlcm4gaW50IG5uZXRk aXI7ICAgICAgICAgICAgICAgICAvKiBOZXR3b3JrIHNlcnZpY2VzIGRpcmVjdG9yeSAqLwotICAg IGV4dGVybiBpbnQgbmhjb3VudDsgICAgICAgICAgICAgICAgIC8qIExvb2t1cCByZXN1bHQgKi8K LSAgICBleHRlcm4gY2hhciAqbmhfcFtdOyAgICAgICAgICAgICAgICAvKiBOZXR3b3JrIGRpcmVj dG9yeSBlbnRyeSBwb2ludGVycyAqLwotICAgIGV4dGVybiBjaGFyICpuaF9wMltdOyAgICAgICAg ICAgICAgIC8qIE5ldHdvcmsgZGlyZWN0b3J5IGVudHJ5IG5ldHR5cGUgKi8KLQotICAgIGlmICgh cykgcmV0dXJuKC0yKTsKLSAgICBpZiAoISpzKSByZXR1cm4oLTIpOwotCi0gICAgbWFrZXN0cigm aG9zdG5hbWUscyk7Ci0gICAgaG9zdHNhdmUgPSBob3N0bmFtZTsKLSAgICBtYWtlc3RyKCZmdHBf bG9nbmFtZSxOVUxMKTsKLSAgICBhbm9ueW1vdXMgPSAwOwotICAgIG5vaW5pdCA9IDA7Ci0KLSAg ICBkZWJ1ZyhGMTEwLCJmdHAgb3BlbiIsaG9zdG5hbWUsMCk7Ci0KLSAgICBpZiAoc2F2X3BzdiA+ IC0xKSB7ICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIHByZXZhaWxpbmcgYWN0aXZlL3Bhc3Np dmUgKi8KLSAgICAgICAgZnRwX3BzdiA9IHNhdl9wc3Y7ICAgICAgICAgICAgICAvKiBzZWxlY3Rp b24gaW4gY2FzZSBpdCB3YXMgKi8KLSAgICAgICAgc2F2X3BzdiA9IC0xOyAgICAgICAgICAgICAg ICAgICAvKiB0ZW1wb3JhcmlseSBvdmVycmlkZW4gYnkgYSBzd2l0Y2ggKi8KLSAgICB9Ci0gICAg aWYgKHNhdl9sb2cgPiAtMSkgeyAgICAgICAgICAgICAgICAgLyogRGl0dG8gZm9yIGF1dG9sb2dp biAqLwotICAgICAgICBmdHBfbG9nID0gc2F2X2xvZzsKLSAgICAgICAgc2F2X2xvZyA9IC0xOwot ICAgIH0KLSAgICBjbWZkYmkoJnN3LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTd2l0Y2hl cyAqLwotICAgICAgICAgICBfQ01LRVksCi0gICAgICAgICAgICJTZXJ2aWNlIG5hbWUgb3IgcG9y dDtcbiBvciBzd2l0Y2giLAotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAgICAgICBuZnRwc3dpLCAgICAgICAgICAgICAg ICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLwotICAgICAgICAgICA0 LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiBub25l ICovCi0gICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAgICAgLyogUHJvY2Vzc2lu ZyBmdW5jdGlvbiAqLwotICAgICAgICAgICBmdHBzd2l0YWIsICAgICAgICAgICAgICAgICAgIC8q IEtleXdvcmQgdGFibGUgKi8KLSAgICAgICAgICAgJmZsICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCi0gICAgICAgICAgICk7Ci0gICAgY21mZGJpKCZm bCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQSBob3N0IG5hbWUgb3IgYWRkcmVzcyAqLwot ICAgICAgICAgICBfQ01GTEQsICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAg ICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaGVscCAqLwotICAgICAgICAg ICAieFl6Qm9vIiwgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAg IiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAg ICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0 YSAxICovCi0gICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwg bnVtZXJpYyBkYXRhIDIgKi8KLSAgICAgICAgICAgeHhzdHJpbmcsCi0gICAgICAgICAgIE5VTEws Ci0gICAgICAgICAgICZjbQotICAgICAgICAgICApOwotICAgIGNtZmRiaSgmY20sICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgY29uZmlybWF0aW9uICovCi0gICAgICAgICAgIF9D TUNGTSwKLSAgICAgICAgICAgIiIsCi0gICAgICAgICAgICIiLAotICAgICAgICAgICAiIiwKLSAg ICAgICAgICAgMCwKLSAgICAgICAgICAgMCwKLSAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAg TlVMTCwKLSAgICAgICAgICAgTlVMTAotICAgICAgICAgICApOwotCi0gICAgZm9yIChuID0gMDs7 IG4rKykgewotICAgICAgICByYyA9IGNtZmRiKCZzdyk7ICAgICAgICAgICAgICAgIC8qIFBhcnNl IGEgc2VydmljZSBuYW1lIG9yIGEgc3dpdGNoICovCi0gICAgICAgIGlmIChyYyA8IDApCi0gICAg ICAgICAgZ290byB4b3BlbmZ0cDsKLQotICAgICAgICBpZiAoY21yZXN1bHQuZmNvZGUgPT0gX0NN Q0ZNKSB7IC8qIERvbmU/ICovCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSBlbHNlIGlm IChjbXJlc3VsdC5mY29kZSA9PSBfQ01GTEQpIHsgIC8qIFBvcnQgKi8KLSAgICAgICAgICAgIGlm IChja3N0cmNtcCgieFl6Qm9vIixjbXJlc3VsdC5zcmVzdWx0LC0xLDEpKQotICAgICAgICAgICAg ICBtYWtlc3RyKCZzZXJ2aWNlLGNtcmVzdWx0LnNyZXN1bHQpOwotICAgICAgICAgICAgZWxzZQot ICAgICAgICAgICAgICBtYWtlc3RyKCZzZXJ2aWNlLG9wbl90bHM/ImZ0cHMiOiJmdHAiKTsKLSAg ICAgICAgfSBlbHNlIGlmIChjbXJlc3VsdC5mY29kZSA9PSBfQ01LRVkpIHsgLyogSGF2ZSBhIHN3 aXRjaCAqLwotICAgICAgICAgICAgYyA9IGNtZ2JyaygpOyAgICAgICAgICAgICAgIC8qIGdldCBi cmVhayBjaGFyYWN0ZXIgKi8KLSAgICAgICAgICAgIGdldHZhbCA9IChjID09ICc6JyB8fCBjID09 ICc9Jyk7Ci0gICAgICAgICAgICByYyA9IC05OwotICAgICAgICAgICAgaWYgKGdldHZhbCAmJiAh KGNtcmVzdWx0LmtmbGFncyAmIENNX0FSRykpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9U aGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50c1xuIik7Ci0gICAgICAgICAgICAgICAg Z290byB4b3BlbmZ0cDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghZ2V0dmFsICYm IChjbXJlc3VsdC5rZmxhZ3MgJiBDTV9BUkcpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/ VGhpcyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOwotICAgICAgICAgICAgICAgIGdv dG8geG9wZW5mdHA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzd2l0Y2ggKGNtcmVzdWx0 Lm5yZXN1bHQpIHsgLyogU3dpdGNoICovCi0gICAgICAgICAgICAgIGNhc2UgT1BOX0FOTzogICAg ICAgICAgICAgLyogL0FOT05ZTU9VUyAqLwotICAgICAgICAgICAgICAgIGFub255bW91cysrOwot CQlub2xvZ2luID0gMDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz ZSBPUE5fTklOOiAgICAgICAgICAgICAvKiAvTk9JTklUICovCi0gICAgICAgICAgICAgICAgbm9p bml0Kys7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgT1BOX05P TDogICAgICAgICAgICAgLyogL05PTE9HSU4gKi8KLSAgICAgICAgICAgICAgICBub2xvZ2luKys7 Ci0JCWFub255bW91cyA9IDA7Ci0JCW1ha2VzdHIoJmZ0cF9sb2duYW1lLE5VTEwpOwotICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIE9QTl9QU1c6ICAgICAgICAgICAg IC8qIC9QQVNTV09SRCAqLwotICAgICAgICAgICAgICAgIGlmICghYW5vbnltb3VzKSAgICAgICAg IC8qIERvbid0IGxvZyByZWFsIHBhc3N3b3JkcyAqLwotICAgICAgICAgICAgICAgICAgZGVib2sg PSAwOwotICAgICAgICAgICAgICAgIHJjID0gY21mbGQoIlBhc3N3b3JkIGZvciBGVFAgc2VydmVy IiwiIiwmcCx4eHN0cmluZyk7Ci0gICAgICAgICAgICAgICAgaWYgKHJjID09IC0zKSB7Ci0gICAg ICAgICAgICAgICAgICAgIG1ha2VzdHIoJmZ0cF90bXAsTlVMTCk7Ci0gICAgICAgICAgICAgICAg fSBlbHNlIGlmIChyYyA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgZ290byB4b3BlbmZ0cDsK LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZm dHBfdG1wLGJyc3RyaXAocCkpOwotCQkgICAgbm9sb2dpbiA9IDA7Ci0gICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIE9QTl9VU1I6ICAg ICAgICAgICAgIC8qIC9VU0VSICovCi0gICAgICAgICAgICAgICAgcmMgPSBjbWZsZCgiVXNlcm5h bWUgZm9yIEZUUCBzZXJ2ZXIiLCIiLCZwLHh4c3RyaW5nKTsKLSAgICAgICAgICAgICAgICBpZiAo cmMgPT0gLTMpIHsKLSAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmZnRwX2xvZ25hbWUsTlVM TCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyYyA8IDApIHsKLSAgICAgICAgICAgICAg ICAgICAgZ290byB4b3BlbmZ0cDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotCQkgICAgbm9s b2dpbiA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGFub255bW91cyA9IDA7Ci0JCSAgICBoYXZl dXNlciA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmZ0cF9sb2duYW1lLGJyc3Ry aXAocCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgICAgY2FzZSBPUE5fQUNDOgotICAgICAgICAgICAgICAgIHJjID0gY21mbGQoIkFjY291 bnQgZm9yIEZUUCBzZXJ2ZXIiLCIiLCZwLHh4c3RyaW5nKTsKLSAgICAgICAgICAgICAgICBpZiAo cmMgPT0gLTMpIHsKLSAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmZnRwX2FjYyxOVUxMKTsK LSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJjIDwgMCkgewotICAgICAgICAgICAgICAgICAg ICBnb3RvIHhvcGVuZnRwOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg ICAgICAgIG1ha2VzdHIoJmZ0cF9hY2MsYnJzdHJpcChwKSk7Ci0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIE9QTl9BQ1Q6Ci0gICAg ICAgICAgICAgICAgb3BuX3BzdiA9IDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgIGNhc2UgT1BOX1BTVjoKLSAgICAgICAgICAgICAgICBvcG5fcHN2ID0gMTsKLSAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBPUE5fVExTOgotICAgICAgICAg ICAgICAgIG9wbl90bHMgPSAxOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg ICB9Ci0gICAgICAgIGlmIChuID09IDApIHsgICAgICAgICAgICAgICAgICAgLyogQWZ0ZXIgZmly c3QgdGltZSB0aHJvdWdoICovCi0gICAgICAgICAgICBjbWZkYmkoJnN3LCAgICAgICAgICAgICAg ICAgLyogYWNjZXB0IG9ubHkgc3dpdGNoZXMgKi8KLSAgICAgICAgICAgICAgICAgICBfQ01LRVks Ci0gICAgICAgICAgICAgICAgICAgIlxuQ2FycmlhZ2UgcmV0dXJuIHRvIGNvbmZpcm0gdG8gY29t bWFuZCwgb3Igc3dpdGNoIiwKLSAgICAgICAgICAgICAgICAgICAiIiwKLSAgICAgICAgICAgICAg ICAgICAiIiwKLSAgICAgICAgICAgICAgICAgICBuZnRwc3dpLAotICAgICAgICAgICAgICAgICAg IDQsCi0gICAgICAgICAgICAgICAgICAgeHhzdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgZnRw c3dpdGFiLAotICAgICAgICAgICAgICAgICAgICZjbQotICAgICAgICAgICAgICAgICAgICk7Ci0g ICAgICAgIH0KLSAgICB9Ci0jaWZkZWYgQ09NTUVOVAotICAgIGRlYnVnKEYxMDAsImZ0cCBvcGVu ZnRwIHdoaWxlIGV4aXQiLCIiLDApOwotICAgIHJjID0gY21jZm0oKTsKLSAgICBkZWJ1ZyhGMTAx LCJmdHAgb3BlbmZ0cCBjbWNmbSByYyIsIiIscmMpOwotICAgIGlmIChyYyA8IDApCi0gICAgICBn b3RvIHhvcGVuZnRwOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgIGlmIChvcG5fcHN2ID4g LTEpIHsgICAgICAgICAgICAgICAgIC8qIC9QQVNTSVZFIG9yIC9BQ1RJVkUgc3dpdGNoIGdpdmVu ICovCi0gICAgICAgIHNhdl9wc3YgPSBmdHBfcHN2OwotICAgICAgICBmdHBfcHN2ID0gb3BuX3Bz djsKLSAgICB9Ci0gICAgaWYgKG5vbG9naW4gfHwgaGF2ZXVzZXIpIHsJCS8qIC9OT0xPR0lOIG9y IC9VU0VSIHN3aXRjaCBnaXZlbiAqLwotCXNhdl9sb2cgPSBmdHBfbG9nOwotCWZ0cF9sb2cgPSBo YXZldXNlciA/IDEgOiAwOwotICAgIH0KLSAgICBpZiAoKmhvc3RuYW1lID09ICc9JykgeyAgICAg ICAgICAgICAvKiBCeXBhc3MgZGlyZWN0b3J5IGxvb2t1cCAqLwotICAgICAgICBob3N0bmFtZSsr OyAgICAgICAgICAgICAgICAgICAgIC8qIGlmIGhvc3RuYW1lIHN0YXJ0cyB3aXRoICc9JyAqLwot ICAgICAgICBoYXZlaG9zdCsrOwotICAgIH0gZWxzZSBpZiAoaXNkaWdpdCgqaG9zdG5hbWUpKSB7 ICAgIC8qIG9yIGlmIGl0IHN0YXJ0cyB3aXRoIGEgZGlnaXQgKi8KLSAgICAgICAgaGF2ZWhvc3Qr KzsKLSAgICB9Ci0gICAgaWYgKCFzZXJ2aWNlKQotICAgICAgbWFrZXN0cigmc2VydmljZSxvcG5f dGxzPyJmdHBzIjoiZnRwIik7Ci0KLSNpZm5kZWYgTk9ESUFMCi0gICAgaWYgKCFoYXZlaG9zdCAm JiBubmV0ZGlyID4gMCkgeyAgICAgLyogSWYgdGhlcmUgaXMgYSBuZXR3b3JrcyBkaXJlY3Rvcnkg Ki8KLSAgICAgICAgbHVuZXQoaG9zdG5hbWUpOyAgICAgICAgICAgICAgICAvKiBMb29rIHVwIHRo ZSBuYW1lICovCi0gICAgICAgIGRlYnVnKEYxMTEsImZ0cCBvcGVuZnRwIGx1bmV0Iixob3N0bmFt ZSxuaGNvdW50KTsKLSAgICAgICAgaWYgKG5oY291bnQgPT0gMCkgewotICAgICAgICAgICAgaWYg KHRlc3RpbmcpCi0gICAgICAgICAgICAgIHByaW50ZigiIGZ0cCBvcGVuIHRyeWluZyBcIiVzICVz XCIuLi5cbiIsaG9zdG5hbWUsc2VydmljZSk7Ci0gICAgICAgICAgICBzdWNjZXNzID0gZnRwb3Bl bihob3N0bmFtZSxzZXJ2aWNlLG9wbl90bHMpOwotICAgICAgICAgICAgZGVidWcoRjEwMSwiZnRw IG9wZW5mdHAgQSBmdHBvcGVuIHN1Y2Nlc3MiLCIiLHN1Y2Nlc3MpOwotICAgICAgICAgICAgcmMg PSBzdWNjZXNzOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaW50IGZvdW5kID0gMDsK LSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuaGNvdW50OyBpKyspIHsKLSAgICAgICAgICAg ICAgICBpZiAobmhfcDJbaV0pICAgICAgICAgICAvKiBJZiBuZXR3b3JrIHR5cGUgc3BlY2lmaWVk ICovCi0gICAgICAgICAgICAgICAgICBpZiAoY2tzdHJjbXAobmhfcDJbaV0sInRjcC9pcCIsc3Ry bGVuKG5oX3AyW2ldKSwwKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg ICAgICAgICAgZm91bmQrKzsKLSAgICAgICAgICAgICAgICBtYWtlc3RyKCZob3N0bmFtZSxuaF9w W2ldKTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHBvcGVuIGx1bmV0IHN1YnN0aXR1 dGlvbiIsaG9zdG5hbWUsaSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRlc3RpbmcpCi0gICAgICAg ICAgICAgICAgICBwcmludGYoIiBmdHAgb3BlbiB0cnlpbmcgXCIlcyAlc1wiLi4uXG4iLGhvc3Ru YW1lLHNlcnZpY2UpOwotICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmdHBvcGVuKGhvc3RuYW1l LHNlcnZpY2Usb3BuX3Rscyk7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiZnRwIG9wZW5m dHAgQiBmdHBvcGVuIHN1Y2Nlc3MiLCIiLHN1Y2Nlc3MpOwotICAgICAgICAgICAgICAgIHJjID0g c3VjY2VzczsKLSAgICAgICAgICAgICAgICBpZiAoc3VjY2VzcykKLSAgICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFmb3VuZCkgeyAgICAgICAg ICAgICAgIC8qIEUuZy4gaWYgbm8gbmV0d29yayB0eXBlcyBtYXRjaCAqLwotICAgICAgICAgICAg ICAgIGlmICh0ZXN0aW5nKQotICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgZnRwIG9wZW4gdHJ5 aW5nIFwiJXMgJXNcIi4uLlxuIixob3N0bmFtZSxzZXJ2aWNlKTsKLSAgICAgICAgICAgICAgICBz dWNjZXNzID0gZnRwb3Blbihob3N0bmFtZSxzZXJ2aWNlLG9wbl90bHMpOwotICAgICAgICAgICAg ICAgIGRlYnVnKEYxMDEsImZ0cCBvcGVuZnRwIEMgZnRwb3BlbiBzdWNjZXNzIiwiIixzdWNjZXNz KTsKLSAgICAgICAgICAgICAgICByYyA9IHN1Y2Nlc3M7Ci0gICAgICAgICAgICB9Ci0gICAgICAg IH0KLSAgICB9IGVsc2UgewotI2VuZGlmIC8qIE5PRElBTCAqLwotICAgICAgICBpZiAodGVzdGlu ZykKLSAgICAgICAgICBwcmludGYoIiBmdHAgb3BlbiB0cnlpbmcgXCIlcyAlc1wiLi4uXG4iLGhv c3RuYW1lLHNlcnZpY2UpOwotICAgICAgICBzdWNjZXNzID0gZnRwb3Blbihob3N0bmFtZSxzZXJ2 aWNlLG9wbl90bHMpOwotICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgb3BlbmZ0cCBEIGZ0cG9wZW4g c3VjY2VzcyIsaG9zdG5hbWUsc3VjY2Vzcyk7Ci0gICAgICAgIGRlYnVnKEYxMTEsImZ0cCBvcGVu ZnRwIEQgZnRwb3BlbiBjb25uZWN0ZWQiLGhvc3RuYW1lLGNvbm5lY3RlZCk7Ci0gICAgICAgIHJj ID0gc3VjY2VzczsKLSNpZm5kZWYgTk9ESUFMCi0gICAgfQotI2VuZGlmIC8qIE5PRElBTCAqLwot Ci0gIHhvcGVuZnRwOgotICAgIGRlYnVnKEYxMDEsImZ0cCBvcGVuZnRwIHhvcGVuZnRwIHJjIiwi IixyYyk7Ci0gICAgaWYgKGhvc3RzYXZlKSBmcmVlKGhvc3RzYXZlKTsKLSAgICBpZiAoc2Vydmlj ZSkgZnJlZShzZXJ2aWNlKTsKLSAgICBpZiAocmMgPCAwICYmIGZ0cF9sb2duYW1lKSB7Ci0gICAg ICAgIGZyZWUoZnRwX2xvZ25hbWUpOwotICAgICAgICBmdHBfbG9nbmFtZSA9IE5VTEw7Ci0gICAg fQotICAgIGlmIChmdHBfdG1wKSB7Ci0gICAgICAgIGZyZWUoZnRwX3RtcCk7Ci0gICAgICAgIGZ0 cF90bXAgPSBOVUxMOwotICAgIH0KLSAgICByZXR1cm4ocmMpOwotfQotCi1WT0lECQkJCQkvKiAx MiBBdWcgMjAwNyAqLwotZG9mdHBnbG9iYWx0eXBlKHgpIGludCB4OyB7Ci0gICAgZnRwX3hmZXJt b2RlID0gWE1PREVfTTsJCS8qIFNldCBtYW51YWwgRlRQIHRyYW5zZmVyIG1vZGUgKi8KLSAgICBm dHBfdHlwID0geDsJCQkvKiBVc2VkIGJ5IHRvcC1sZXZlbCBCSU5BUlkgYW5kICovCi0gICAgZ19m dHBfdHlwID0geDsJCQkvKiBBU0NJSSBjb21tYW5kcy4gKi8KLSAgICBnZXRfYXV0byA9IDA7Ci0g ICAgZm9yY2V0eXBlID0gMTsKLX0KLQotaW50Ci1kb2Z0cGFjY3QoKSB7Ci0gICAgaW50IHg7Ci0g ICAgY2hhciAqIHM7Ci0gICAgaWYgKCh4ID0gY210eHQoIlJlbW90ZSBhY2NvdW50IiwgIiIsICZz LCB4eHN0cmluZykpIDwgMCkKLSAgICAgIHJldHVybih4KTsKLSAgICBDSEVDS0NPTk4oKTsKLSAg ICBtYWtlc3RyKCZmdHBfYWNjLGJyc3RyaXAocykpOwotICAgIGlmICh0ZXN0aW5nKQotICAgICAg cHJpbnRmKCIgZnRwIGFjY291bnQ6IFwiJXNcIlxuIixmdHBfYWNjKTsKLSAgICBzdWNjZXNzID0g KGZ0cGNtZCgiQUNDVCIsZnRwX2FjYywtMSwtMSxmdHBfdmJtKSA9PSBSRVBMWV9DT01QTEVURSk7 Ci0gICAgcmV0dXJuKHN1Y2Nlc3MpOwotfQotCi1pbnQKLWRvZnRwdXNyKCkgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBMb2cgaW4gYXMgVVNFUiAqLwotICAgIGV4dGVybiBjaGFyIHVp ZGJ1ZltdOwotICAgIGV4dGVybiBjaGFyIHB3YnVmW107Ci0gICAgZXh0ZXJuIGludCAgcHdmbGcs IHB3Y3J5cHQ7Ci0gICAgaW50IHg7Ci0gICAgY2hhciAqcywgKiBhY2N0ID0gIiI7Ci0KLSAgICBk ZWJvayA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEb24ndCBsb2cgKi8KLQotICAg IGlmICgoeCA9IGNtZmxkKCJSZW1vdGUgdXNlcm5hbWUgb3IgSUQiLHVpZGJ1Ziwmcyx4eHN0cmlu ZykpIDwgMCkKLSAgICAgIHJldHVybih4KTsKLSAgICBja3N0cm5jcHkobGluZSxicnN0cmlwKHMp LExJTkJVRlNJWik7IC8qIGJyc3RyaXA6IDE1IEphbiAyMDAzICovCi0gICAgaWYgKCh4ID0gY21m bGQoIlJlbW90ZSBwYXNzd29yZCIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAgaWYg KHggPT0gLTMpIHsgLyogbm8gaW5wdXQgKi8KLSAgICAgICAgICAgIGlmICggcHdidWZbMF0gJiYg cHdmbGcgKSB7Ci0gICAgICAgICAgICAgICAgY2tzdHJuY3B5KHRtcGJ1ZiwoY2hhciAqKXB3YnVm LFRNUEJVRlNJWik7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgaWYgKCBwd2NyeXB0ICkK LSAgICAgICAgICAgICAgICAgICAgY2tfZW5jcnlwdCgoY2hhciAqKXRtcGJ1Zik7Ci0jZW5kaWYg LyogT1MyICovCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBy ZXR1cm4oeCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBja3N0cm5jcHkodG1w YnVmLGJyc3RyaXAocyksVE1QQlVGU0laKTsKLSAgICB9Ci0gICAgaWYgKCh4ID0gY210eHQoIlJl bW90ZSBhY2NvdW50XG4gb3IgRW50ZXIgb3IgQ1IgdG8gY29uZmlybSB0aGUgY29tbWFuZCIsCi0g ICAgICAgICAgICAgICAgICAgIiIsICZzLCB4eHN0cmluZykpIDwgMCkKLSAgICAgIHJldHVybih4 KTsKLSAgICBDSEVDS0NPTk4oKTsKLSAgICBpZiAoKnMpIHsKLSAgICAgICAgeCA9IHN0cmxlbih0 bXBidWYpOwotICAgICAgICBpZiAoeCA+IDApIHsKLSAgICAgICAgICAgIGFjY3QgPSAmdG1wYnVm W3grMl07Ci0gICAgICAgICAgICBja3N0cm5jcHkoYWNjdCxicnN0cmlwKHMpLFRNUEJVRlNJWiAt IHggLSAyKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAodGVzdGluZykKLSAgICAgIHByaW50 ZigiIGZ0cCB1c2VyIFwiJXNcIiBwYXNzd29yZCBcIiVzXCIuLi5cbiIsbGluZSx0bXBidWYpOwot ICAgIHN1Y2Nlc3MgPSBmdHBfdXNlcihsaW5lLHRtcGJ1ZixhY2N0KTsKLSNpZmRlZiBDS0xPR0RJ QUwKLSAgICBkb2xvZ2Z0cCgpOwotI2VuZGlmIC8qIENLTE9HRElBTCAqLwotICAgIHJldHVybihz dWNjZXNzKTsKLX0KLQotLyogRE8gKHZhcmlvdXMgRlRQIGNvbW1hbmRzKS4uLiAqLwotCi1pbnQK LWRvZnRwdHlwKHR5cGUpIGludCB0eXBlOyB7ICAgICAgICAgICAgICAvKiBUWVBFICovCi0gICAg Q0hFQ0tDT05OKCk7Ci0gICAgZnRwX3R5cCA9IHR5cGU7Ci0gICAgY2hhbmdldHlwZShmdHBfdHlw LGZ0cF92Ym0pOwotICAgIGRlYnVnKEYxMDEsImRvZnRwdHlwIGNoYW5nZWQgdHlwZSIsIiIsdHlw ZSk7Ci0gICAgcmV0dXJuKDEpOwotfQotCi1zdGF0aWMgaW50Ci1kb2Z0cHhta2Qocyx2Ym0pIGNo YXIgKiBzOyBpbnQgdmJtOyB7ICAgLyogTUtESVIgYWN0aW9uICovCi0gICAgaW50IGxjcyA9IC0x LCByY3MgPSAtMTsKLSNpZm5kZWYgTk9DU0VUUwotICAgIGlmIChmdHBfeGxhKSB7Ci0gICAgICAg IGxjcyA9IGZ0cF9jc2w7Ci0gICAgICAgIGlmIChsY3MgPCAwKSBsY3MgPSBmY2hhcnNldDsKLSAg ICAgICAgcmNzID0gZnRwX2NzeDsKLSAgICAgICAgaWYgKHJjcyA8IDApIHJjcyA9IGZ0cF9jc3I7 Ci0gICAgfQotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSAgICBkZWJ1ZyhGMTEwLCJmdHAgZG9mdHBt a2QiLHMsMCk7Ci0gICAgaWYgKGZ0cGNtZCgiTUtEIixzLGxjcyxyY3MsdmJtKSA9PSBSRVBMWV9D T01QTEVURSkKLSAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgaWYgKGZ0cGNvZGUgPT0g NTAwIHx8IGZ0cGNvZGUgPT0gNTAyKSB7Ci0gICAgICAgIGlmICghcXVpZXQpCi0gICAgICAgICAg cHJpbnRmKCJNS0QgY29tbWFuZCBub3QgcmVjb2duaXplZCwgdHJ5aW5nIFhNS0RcbiIpOwotICAg ICAgICBpZiAoZnRwY21kKCJYTUtEIixzLGxjcyxyY3MsdmJtKSA9PSBSRVBMWV9DT01QTEVURSkK LSAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgIH0KLSAgICByZXR1cm4oc3VjY2Vz cyA9IDApOwotfQotCi1zdGF0aWMgaW50Ci1kb2Z0cG1rZCgpIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogTUtESVIgcGFyc2UgKi8KLSAgICBpbnQgeDsKLSAgICBjaGFyICogczsKLSAg ICBpZiAoKHggPSBjbXR4dCgiUmVtb3RlIGRpcmVjdG9yeSBuYW1lIiwgIiIsICZzLCB4eHN0cmlu ZykpIDwgMCkKLSAgICAgIHJldHVybih4KTsKLSAgICBDSEVDS0NPTk4oKTsKLSAgICBja3N0cm5j cHkobGluZSxzLExJTkJVRlNJWik7Ci0gICAgaWYgKHRlc3RpbmcpCi0gICAgICBwcmludGYoIiBm dHAgbWtkaXIgXCIlc1wiLi4uXG4iLGxpbmUpOwotICAgIHJldHVybihzdWNjZXNzID0gZG9mdHB4 bWtkKGxpbmUsLTEpKTsKLX0KLQotc3RhdGljIGludAotZG9mdHBybWQoKSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFJNRElSICovCi0gICAgaW50IHgsIGxjcyA9IC0xLCByY3MgPSAt MTsKLSAgICBjaGFyICogczsKLSAgICBpZiAoKHggPSBjbXR4dCgiUmVtb3RlIGRpcmVjdG9yeSIs ICIiLCAmcywgeHhzdHJpbmcpKSA8IDApCi0gICAgICByZXR1cm4oeCk7Ci0gICAgQ0hFQ0tDT05O KCk7Ci0gICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOwotICAgIGlmICh0ZXN0aW5nKQot ICAgICAgcHJpbnRmKCIgZnRwIHJtZGlyIFwiJXNcIi4uLlxuIixsaW5lKTsKLSNpZm5kZWYgTk9D U0VUUwotICAgIGlmIChmdHBfeGxhKSB7Ci0gICAgICAgIGxjcyA9IGZ0cF9jc2w7Ci0gICAgICAg IGlmIChsY3MgPCAwKSBsY3MgPSBmY2hhcnNldDsKLSAgICAgICAgcmNzID0gZnRwX2NzeDsKLSAg ICAgICAgaWYgKHJjcyA8IDApIHJjcyA9IGZ0cF9jc3I7Ci0gICAgfQotI2VuZGlmIC8qIE5PQ1NF VFMgKi8KLSAgICBpZiAoZnRwY21kKCJSTUQiLGxpbmUsbGNzLHJjcyxmdHBfdmJtKSA9PSBSRVBM WV9DT01QTEVURSkKLSAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgaWYgKGZ0cGNvZGUg PT0gNTAwIHx8IGZ0cGNvZGUgPT0gNTAyKSB7Ci0gICAgICAgIGlmICghcXVpZXQpCi0gICAgICAg ICAgcHJpbnRmKCJSTUQgY29tbWFuZCBub3QgcmVjb2duaXplZCwgdHJ5aW5nIFhNS0RcbiIpOwot ICAgICAgICBzdWNjZXNzID0gKGZ0cGNtZCgiWFJNRCIsbGluZSxsY3MscmNzLGZ0cF92Ym0pID09 IFJFUExZX0NPTVBMRVRFKTsKLSAgICB9IGVsc2UKLSAgICAgIHN1Y2Nlc3MgPSAwOwotICAgIHJl dHVybihzdWNjZXNzKTsKLX0KLQotc3RhdGljIGludAotZG9mdHByZW4oKSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFJFTkFNRSAqLwotICAgIGludCB4OwotICAgIGNoYXIgKiBzOwot ICAgIGlmICgoeCA9IGNtZmxkKCJSZW1vdGUgZmlsZW5hbWUiLCIiLCZzLHh4c3RyaW5nKSkgPCAw KQotICAgICAgcmV0dXJuKHgpOwotICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKLSAg ICBpZiAoKHggPSBjbWZsZCgiTmV3IG5hbWUgZm9yIHJlbW90ZSBmaWxlIiwiIiwmcyx4eHN0cmlu ZykpIDwgMCkKLSAgICAgIHJldHVybih4KTsKLSAgICBja3N0cm5jcHkodG1wYnVmLHMsVE1QQlVG U0laKTsKLSAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAgICByZXR1cm4oeCk7Ci0gICAg Q0hFQ0tDT05OKCk7Ci0gICAgaWYgKHRlc3RpbmcpCi0gICAgICBwcmludGYoIiBmdHAgcmVuYW1l IFwiJXNcIiAodG8pIFwiJXNcIi4uLlxuIixsaW5lLHRtcGJ1Zik7Ci0gICAgc3VjY2VzcyA9IGZ0 cF9yZW5hbWUobGluZSx0bXBidWYpOwotICAgIHJldHVybihzdWNjZXNzKTsKLX0KLQotaW50Ci1k b2Z0cHJlcygpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUkVTRVQgKGxvZyBvdXQg d2l0aG91dCBjbG9zZSkgKi8KLSAgICBpbnQgeDsKLSAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDAp Ci0gICAgICByZXR1cm4oeCk7Ci0gICAgQ0hFQ0tDT05OKCk7Ci0gICAgaWYgKHRlc3RpbmcpCi0g ICAgICBwcmludGYoIiBmdHAgcmVzZXQuLi5cbiIpOwotICAgIHJldHVybihzdWNjZXNzID0gZnRw X3Jlc2V0KCkpOwotfQotCi1zdGF0aWMgaW50Ci1kb2Z0cHhobHAoKSB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogSEVMUCAqLwotICAgIGludCB4OwotICAgIGNoYXIgKiBzOwotICAgIGlm ICgoeCA9IGNtdHh0KCJDb21tYW5kIG5hbWUiLCAiIiwgJnMsIHh4c3RyaW5nKSkgPCAwKQotICAg ICAgcmV0dXJuKHgpOwotICAgIENIRUNLQ09OTigpOwotICAgIGNrc3RybmNweShsaW5lLHMsTElO QlVGU0laKTsKLSAgICBpZiAodGVzdGluZykKLSAgICAgIHByaW50ZigiIGZ0cCBoZWxwIFwiJXNc Ii4uLlxuIixsaW5lKTsKLSAgICAvKiBObyBuZWVkIHRvIHRyYW5zbGF0ZSAtLSBhbGwgRlRQIGNv bW1hbmRzIGFyZSBBU0NJSSAqLwotICAgIHJldHVybihzdWNjZXNzID0gKGZ0cGNtZCgiSEVMUCIs bGluZSwwLDAsMSkgPT0gUkVQTFlfQ09NUExFVEUpKTsKLX0KLQotc3RhdGljIGludAotZG9mdHBk aXIoY3gpIGludCBjeDsgeyAgICAgICAgICAgICAgICAgIC8qIFtWXURJUkVDVE9SWSAqLwotICAg IGludCB4LCBsY3MgPSAwLCByY3MgPSAwLCB4bGF0ZSA9IDA7Ci0gICAgY2hhciAqIHAsICogcywg KiBtID0gIiI7Ci0gICAgaWYgKGN4ID09IEZUUF9WREkpIHsKLSAgICAgICAgc3dpdGNoIChzZXJ2 ZXJ0eXBlKSB7Ci0gICAgICAgICAgY2FzZSBTWVNfVk1TOgotICAgICAgICAgIGNhc2UgU1lTX0RP UzoKLSAgICAgICAgICBjYXNlIFNZU19UT1BTMTA6Ci0gICAgICAgICAgY2FzZSBTWVNfVE9QUzIw OgotICAgICAgICAgICAgbSA9ICIqLioiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ZGVmYXVsdDoKLSAgICAgICAgICAgIG0gPSAiKiI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYg KCh4ID0gY210eHQoIlJlbW90ZSBmaWxlc3BlYyIsbSwmcyx4eHN0cmluZykpIDwgMCkKLSAgICAg IHJldHVybih4KTsKLSAgICBpZiAoKHggPSByZW10eHQoJnMpKSA8IDApCi0gICAgICByZXR1cm4o eCk7Ci0jaWZkZWYgTk9DU0VUUwotICAgIHhsYXRlID0gMDsKLSNlbHNlCi0gICAgeGxhdGUgPSBm dHBfeGxhOwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSAgICBsaW5lWzBdID0gTlVMOwotICAgIGNr c3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKLSAgICBzID0gbGluZTsKLSAgICBDSEVDS0NPTk4o KTsKLQotI2lmbmRlZiBOT0NTRVRTCi0gICAgaWYgKHhsYXRlKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgLyogU0VUIEZUUCBDSEFSQUNURVItU0VULVRSQU5TTEFUSU9OICovCi0gICAgICAgIGxj cyA9IGZ0cF9jc2w7ICAgICAgICAgICAgICAgICAgLyogTG9jYWwgY2hhcnNldCAqLwotICAgICAg ICBpZiAobGNzIDwgMCkgbGNzID0gZmNoYXJzZXQ7Ci0gICAgICAgIGlmIChsY3MgPCAwKSB4bGF0 ZSA9IDA7Ci0gICAgfQotICAgIGlmICh4bGF0ZSkgeyAgICAgICAgICAgICAgICAgICAgICAgIC8q IFN0aWxsIE9OPyAqLwotICAgICAgICByY3MgPSBmdHBfY3N4OyAgICAgICAgICAgICAgICAgIC8q IFJlbW90ZSAoU2VydmVyKSBjaGFyc2V0ICovCi0gICAgICAgIGlmIChyY3MgPCAwKSByY3MgPSBm dHBfY3NyOwotICAgICAgICBpZiAocmNzIDwgMCkgeGxhdGUgPSAwOwotICAgIH0KLSNlbmRpZiAv KiBOT0NTRVRTICovCi0KLSAgICBpZiAodGVzdGluZykgewotICAgICAgICBwID0gczsKLSAgICAg ICAgaWYgKCFwKSBwID0gIiI7Ci0gICAgICAgIGlmICgqcCkKLSAgICAgICAgICBwcmludGYoIkRp cmVjdG9yeSBvZiBmaWxlcyAlcyBhdCAlczpcbiIsIGxpbmUsIGZ0cF9ob3N0KTsKLSAgICAgICAg ZWxzZQotICAgICAgICAgIHByaW50ZigiRGlyZWN0b3J5IG9mIGZpbGVzIGF0ICVzOlxuIiwgZnRw X2hvc3QpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJkb2Z0cGRpciIscyxjeCk7Ci0KLSAgICBp ZiAoY3ggPT0gRlRQX0RJUikgewotICAgICAgICAvKiBUcmFuc2xhdGlvbiBvZiBsaW5lW10gaXMg ZG9uZSBpbnNpZGUgcmVjdnJlcXVlc3QoKSAqLwotICAgICAgICAvKiB3aGVuIGl0IGNhbGxzIGZ0 cGNtZCgpLiAqLwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9Ci0gICAgICAgICAgKHJlY3ZyZXF1 ZXN0KCJMSVNUIiwiLSIscywid2IiLDAsMCxOVUxMLHhsYXRlLGxjcyxyY3MpID09IDApKTsKLSAg ICB9Ci0gICAgc3VjY2VzcyA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgLyogVkRJUiAtIG9u ZSBmaWxlIGF0IGEgdGltZS4uLiAqLwotICAgIHAgPSAoY2hhciAqKXJlbW90ZV9maWxlcygxLChD SEFSICopcyxOVUxMLDApOyAvKiBHZXQgdGhlIGZpbGUgbGlzdCAqLwotICAgIGNhbmNlbGdyb3Vw ID0gMDsKLSAgICBpZiAoIWZ0cF92Ym0gJiYgIXF1aWV0KQotICAgICAgcHJpbnRsaW5lcyA9IDE7 Ci0gICAgd2hpbGUgKHAgJiYgIWNhbmNlbGZpbGUgJiYgIWNhbmNlbGdyb3VwKSB7IC8qIFNUQVQg b25lIGZpbGUgKi8KLSAgICAgICAgaWYgKGZ0cGNtZCgiU1RBVCIscCxsY3MscmNzLGZ0cF92Ym0p IDwgMCkgewotICAgICAgICAgICAgc3VjY2VzcyA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAg ICAgICAgfQotICAgICAgICBwID0gKGNoYXIgKilyZW1vdGVfZmlsZXMoMCxOVUxMLE5VTEwsMCk7 IC8qIEdldCBuZXh0IGZpbGUgKi8KLSAgICAgICAgZGVidWcoRjExMCwiZnRwIHZkaXIgZmlsZSIs cywwKTsKLSAgICB9Ci0gICAgcmV0dXJuKHN1Y2Nlc3MpOwotfQotCi1zdGF0aWMgaW50Ci1kb2Z0 cHB3ZCgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUFdEICovCi0gICAgaW50IHgs IGxjcyA9IC0xLCByY3MgPSAtMTsKLSNpZm5kZWYgTk9DU0VUUwotICAgIGlmIChmdHBfeGxhKSB7 Ci0gICAgICAgIGxjcyA9IGZ0cF9jc2w7Ci0gICAgICAgIGlmIChsY3MgPCAwKSBsY3MgPSBmY2hh cnNldDsKLSAgICAgICAgcmNzID0gZnRwX2NzeDsKLSAgICAgICAgaWYgKHJjcyA8IDApIHJjcyA9 IGZ0cF9jc3I7Ci0gICAgfQotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSAgICBpZiAoKHggPSBjbWNm bSgpKSA8IDApCi0gICAgICByZXR1cm4oeCk7Ci0gICAgQ0hFQ0tDT05OKCk7Ci0gICAgaWYgKGZ0 cGNtZCgiUFdEIixOVUxMLGxjcyxyY3MsMSkgPT0gUkVQTFlfQ09NUExFVEUpIHsKLSAgICAgICAg c3VjY2VzcyA9IDE7Ci0gICAgfSBlbHNlIGlmIChmdHBjb2RlID09IDUwMCB8fCBmdHBjb2RlID09 IDUwMikgewotICAgICAgICBpZiAoZnRwX2RlYikKLSAgICAgICAgICBwcmludGYoIlBXRCBjb21t YW5kIG5vdCByZWNvZ25pemVkLCB0cnlpbmcgWFBXRFxuIik7Ci0gICAgICAgIHN1Y2Nlc3MgPSAo ZnRwY21kKCJYUFdEIixOVUxMLGxjcyxyY3MsMSkgPT0gUkVQTFlfQ09NUExFVEUpOwotICAgIH0K LSAgICByZXR1cm4oc3VjY2Vzcyk7Ci19Ci0KLXN0YXRpYyBpbnQKLWRvZnRwY3dkKHMsdmJtKSBj aGFyICogczsgaW50IHZibTsgeyAgICAvKiBDRCAoQ1dEKSAqLwotICAgIGludCBsY3MgPSAtMSwg cmNzID0gLTE7Ci0jaWZuZGVmIE5PQ1NFVFMKLSAgICBpZiAoZnRwX3hsYSkgewotICAgICAgICBs Y3MgPSBmdHBfY3NsOwotICAgICAgICBpZiAobGNzIDwgMCkgbGNzID0gZmNoYXJzZXQ7Ci0gICAg ICAgIHJjcyA9IGZ0cF9jc3g7Ci0gICAgICAgIGlmIChyY3MgPCAwKSByY3MgPSBmdHBfY3NyOwot ICAgIH0KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSAgICBkZWJ1ZyhGMTEwLCJmdHAgZG9mdHBj d2QiLHMsMCk7Ci0gICAgaWYgKGZ0cGNtZCgiQ1dEIixzLGxjcyxyY3MsdmJtKSA9PSBSRVBMWV9D T01QTEVURSkKLSAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgaWYgKGZ0cGNvZGUgPT0g NTAwIHx8IGZ0cGNvZGUgPT0gNTAyKSB7Ci0gICAgICAgIGlmICghcXVpZXQpCi0gICAgICAgICAg cHJpbnRmKCJDV0QgY29tbWFuZCBub3QgcmVjb2duaXplZCwgdHJ5aW5nIFhDV0RcbiIpOwotICAg ICAgICBpZiAoZnRwY21kKCJYQ1dEIixzLGxjcyxyY3MsdmJtKSA9PSBSRVBMWV9DT01QTEVURSkK LSAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgIH0KLSAgICByZXR1cm4oc3VjY2Vz cyA9IDApOwotfQotCi1zdGF0aWMgaW50Ci1kb2Z0cGNkdXAoKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogQ0RVUCAqLwotICAgIGRlYnVnKEYxMDAsImZ0cCBkb2Z0cGNkdXAiLCIiLDAp OwotICAgIGlmIChmdHBjbWQoIkNEVVAiLE5VTEwsMCwwLDEpID09IFJFUExZX0NPTVBMRVRFKQot ICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICBpZiAoZnRwY29kZSA9PSA1MDAgfHwgZnRw Y29kZSA9PSA1MDIpIHsKLSAgICAgICAgaWYgKCFxdWlldCkKLSAgICAgICAgICBwcmludGYoIkNE VVAgY29tbWFuZCBub3QgcmVjb2duaXplZCwgdHJ5aW5nIFhDVVBcbiIpOwotICAgICAgICBpZiAo ZnRwY21kKCJYQ1VQIixOVUxMLDAsMCwxKSA9PSBSRVBMWV9DT01QTEVURSkKLSAgICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgIH0KLSAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotfQot Ci0vKiBzIHkgbiBjIGQgaSByICAtLSAgU3luY2hyb25pemVzIGNsaWVudCAmIHNlcnZlciBkaXJl Y3RvcmllcyAqLwotCi0vKgotICBDYWxsIHdpdGg6Ci0gICAgbG9jYWwgPSBwb2ludGVyIHRvIHBh dGhuYW1lIG9mIGxvY2FsIGZpbGUgdG8gYmUgc2VudC4KLSAgICBzaW0gICA9IDEgZm9yIHNpbXVs YXRpb24sIDAgZm9yIHJlYWwgdXBsb2FkaW5nLgotICBSZXR1cm5zIDAgb24gZmFpbHVyZSwgMSBv biBzdWNjZXNzLgotCi0gIFRoZSAnbG9jYWwnIGFyZ3VtZW50IGlzIHJlbGF0aXZlIHRvIHRoZSBp bml0aWFsIGRpcmVjdG9yeSBvZiB0aGUgTVBVVCwKLSAgaS5lLiB0aGUgcm9vdCBvZiB0aGUgdHJl ZSBiZWluZyB1cGxvYWRlZC4gIElmIHRoZSBkaXJlY3Rvcnkgb2YgdGhlCi0gIGFyZ3VtZW50IGZp bGUgaXMgZGlmZmVyZW50IGZyb20gdGhlIGRpcmVjdG9yeSBvZiB0aGUgcHJldmlvdXMgZmlsZQot ICAod2hpY2ggaXMgc3RvcmVkIGluIGdsb2JhbCBwdXRwYXRoW10pLCB0aGlzIHJvdXRpbmUgZG9l cyB0aGUgYXBwcm9wcmlhdGUKLSAgQ1dEcywgQ0RVUHMsIGFuZC9vciBNS0RJUnMgdG8gcG9zaXRp b24gdGhlIEZUUCBzZXJ2ZXIgaW4gdGhlIHNhbWUgcGxhY2UuCi0qLwotc3RhdGljIGludCBjZGxl dmVsID0gMCwgY2RzaW1sdmwgPSAwOwkvKiBUcmVlLWxldmVsIHRyYWNrZXJzICovCi0KLXN0YXRp YyBpbnQKLXN5bmNkaXIobG9jYWwsc2ltKSBjaGFyICogbG9jYWw7IGludCBzaW07IHsKLSAgICBj aGFyIGJ1ZltDS01BWFBBVEgrMV07Ci0gICAgY2hhciB0bXBbQ0tNQVhQQVRIKzFdOwotICAgIGNo YXIgbXNnYnVmW0NLTUFYUEFUSCs2NF07Ci0gICAgY2hhciBjLCAqIHAgPSBsb2NhbCwgKiBzID0g YnVmLCAqIHEgPSBidWYsICogcHNlcCwgKiBzc2VwOwotICAgIGludCBpLCBrID0gMCwgZG9uZSA9 IDAsIGl0c2FkaXIgPSAwLCBzYXZlcTsKLQotICAgIGRlYnVnKEYxMTAsImZ0cCBzeW5jZGlyIGxv Y2FsIChuZXcpIixsb2NhbCwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJmdHAgc3luY2RpciBwdXRwYXRo IChvbGQpIixwdXRwYXRoLDApOwotCi0gICAgaXRzYWRpciA9IGlzZGlyKGxvY2FsKTsJCS8qIElz IHRoZSBsb2NhbCBmaWxlIGEgZGlyZWN0b3J5PyAqLwotICAgIHNhdmVxID0gcXVpZXQ7Ci0KLSAg ICB3aGlsZSAoKCpzID0gKnApKSB7ICAgICAgICAgICAgICAgICAvKiBDb3B5IHRoZSBhcmd1bWVu dCBmaWxlbmFtZSAqLwotICAgICAgICBpZiAoKytrID09IENLTUFYUEFUSCkgICAgICAgICAgIC8q IHNvIHdlIGNhbiBwb2tlIGl0LiAqLwotICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIGlm ICgqcyA9PSAnLycpICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byByaWdodG1vc3QgZGly c2VwICovCi0gICAgICAgICAgcSA9IHM7Ci0gICAgICAgIHMrKzsKLSAgICAgICAgcCsrOwotICAg IH0KLSAgICBpZiAoIWl0c2FkaXIpCQkJLyogSWYgaXQncyBhIHJlZ3VsYXIgZmlsZSAqLwotICAg ICAgKnEgPSBOVUw7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGtlZXAganVzdCB0aGUgcGF0 aCBwYXJ0ICovCi0KLSAgICBkZWJ1ZyhGMTEwLCJmdHAgc3luY2RpciBidWYiLGJ1ZiwwKTsKLSAg ICBpZiAoIXN0cmNtcChidWYscHV0cGF0aCkpIHsgICAgICAgICAvKiBTYW1lIHBhdGggYXMgcHJl dmlvdXMgZmlsZT8gKi8KLSAgICAgICAgaWYgKGl0c2FkaXIpIHsgICAgICAgICAgICAgICAgICAv KiBUaGlzIGZpbGUgaXMgYSBkaXJlY3Rvcnk/ICovCi0gICAgICAgICAgICBpZiAoZG9mdHBjd2Qo bG9jYWwsMCkpIHsgICAgLyogVHJ5IHRvIENEIHRvIGl0ICovCi0gICAgICAgICAgICAgICAgZG9m dHBjZHVwKCk7ICAgICAgICAgICAgLyogV29ya2VkIC0gQ0QgYmFjayB1cCAqLwotICAgICAgICAg ICAgfSBlbHNlIGlmIChzaW0pIHsgICAgICAgICAgIC8qIFNpbXVsYXRpbmcuLi4gKi8KLSAgICAg ICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKLSAgICAgICAgICAgICAgICAgICAg cHJpbnRmKCJXT1VMRCBDUkVBVEUgRElSRUNUT1JZICVzXG4iLGxvY2FsKTsKLSAgICAgICAgICAg ICAgICB9IGVsc2UgaWYgKGZkaXNwbGEpIHsKLSAgICAgICAgICAgICAgICAgICAgY2ttYWttc2co bXNnYnVmLENLTUFYUEFUSCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldPVUxEIENS RUFURSBESVJFQ1RPUlkiLGxvY2FsLE5VTEwsTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgIGZ0 c2NyZWVuKFNDUl9TVCxTVF9NU0csKENLX09GRl9UKTAsbXNnYnVmKTsKLSAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgLyogU2VlIG5vdGUgYWJvdmUgKi8KLSAgICAgICAgICAgICAg ICByZXR1cm4oMCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCFkb2Z0cHhta2QobG9jYWwsMCkp IHsgLyogQ2FuJ3QgQ0QgLSB0cnkgdG8gY3JlYXRlICovCi0gICAgICAgICAgICAgICAgcmV0dXJu KDApOwotICAgICAgICAgICAgfSBlbHNlIHsJCQkvKiBSZW1vdGUgZGlyZWN0b3J5IGNyZWF0ZWQg T0sgKi8KLSAgICAgICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKLSAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKCJDUkVBVEVEIERJUkVDVE9SWSAlc1xuIixsb2NhbCk7Ci0gICAg ICAgICAgICAgICAgfSBlbHNlIGlmIChmZGlzcGxhKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNr bWFrbXNnKG1zZ2J1ZixDS01BWFBBVEgrNjQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJDUkVBVEVEIERJUkVDVE9SWSAiLGxvY2FsLE5VTEwsTlVMTCk7Ci0gICAgICAgICAgICAgICAg ICAgIGZ0c2NyZWVuKFNDUl9TVCxTVF9NU0csKENLX09GRl9UKTAsbXNnYnVmKTsKLSAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZGVidWcoRjExMCwi ZnRwIHN5bmNkaXIgbm8gY2hhbmdlIixidWYsMCk7Ci0gICAgICAgIHJldHVybigxKTsgICAgICAg ICAgICAgICAgICAgICAgLyogWWVzLCBkb25lLiAqLwotICAgIH0KLSAgICBja3N0cm5jcHkodG1w LGJ1ZixDS01BWFBBVEgrMSk7ICAgICAvKiBNYWtlIGEgc2FmZSAocHJlLXBva2VkKSBjb3B5ICov Ci0gICAgZGVidWcoRjExMCwiZnRwIHN5bmNkaXIgbmV3IHBhdGgiLGJ1ZiwwKTsgLyogZm9yIGxh dGVyIChzZWUgZW5kKSAqLwotCi0gICAgcCA9IGJ1ZjsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogTmV3ICovCi0gICAgcyA9IHB1dHBhdGg7ICAgICAgICAgICAgICAgICAgICAgICAgLyog T2xkICovCi0KLSAgICBkZWJ1ZyhGMTEwLCJmdHAgc3luY2RpciBBIChvbGQpIHMiLHMsMCk7IC8q IFByZXZpb3VzICovCi0gICAgZGVidWcoRjExMCwiZnRwIHN5bmNkaXIgQSAobmV3KSBwIixwLDAp OyAvKiBOZXcgKi8KLQotICAgIHBzZXAgPSBidWY7Ci0gICAgc3NlcCA9IHB1dHBhdGg7Ci0gICAg d2hpbGUgKCpwICE9IE5VTCAmJiAqcyAhPSBOVUwgJiYgKnAgPT0gKnMpIHsKLQlpZiAoKnAgPT0g Jy8nKSB7IHBzZXAgPSBwKzE7IHNzZXAgPSBzKzE7IH0KLQlwKysscysrOwotICAgIH0KLSAgICAv KgotICAgICAgcHNlcCBhbmQgc3NlcCBwb2ludCB0byB0aGUgZmlyc3QgcGF0aCBzZWdtZW50IHRo YXQgZGlmZmVycy4KLSAgICAgIFdlIGhhdmUgdG8gZG8gYXMgbWFueSBDRFVQcyBhcyB0aGVyZSBh cmUgcGF0aCBzZWdtZW50cyBpbiBzc2VwLgotICAgICAgdGhlbiB3ZSBoYXZlIHRvIGRvIGFzIG1h bnkgTUtEcyBhbmQgQ1dEcyBhcyB0aGVyZSBhcmUgc2VnbWVudHMgaW4gcHNlcC4KLSAgICAqLwot ICAgIHMgPSBzc2VwOwotICAgIHAgPSBwc2VwOwotCi0gICAgZGVidWcoRjExMCwiZnRwIHN5bmNk aXIgQiAob2xkKSBzIixzLDApOyAvKiBQcmV2aW91cyAqLwotICAgIGRlYnVnKEYxMTAsImZ0cCBz eW5jZGlyIEIgKG5ldykgcCIscCwwKTsgLyogTmV3ICovCi0KLSAgICAvKiBwIGFuZCBzIG5vdyBw b2ludCB0byB0aGUgbGVmdG1vc3Qgc3BvdCB3aGVyZSB0aGUgcGF0aHMgZGlmZmVyICovCi0KLSAg ICBpZiAoKnMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXZSBoYXZlIHRvIGJhY2sg dXAgKi8KLSAgICAgICAgayA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIb3cgbWFu eSBsZXZlbHMgY291bnRpbmcgdGhpcyBvbmUgKi8KLSAgICAgICAgd2hpbGUgKChjID0gKnMrKykp IHsgICAgICAgICAgICAvKiBDb3VudCBkaXJzZXBzIHJlbWFpbmluZyBpbiBwcmV2ICovCi0gICAg ICAgICAgICBpZiAoYyA9PSAnLycgJiYgKnMpCi0gICAgICAgICAgICAgIGsrKzsKLSAgICAgICAg fQotCWRlYnVnKEYxMDEsImZ0cCBzeW5jZGlyIGxldmVscyB1cCIsIiIsayk7Ci0KLSAgICAgICAg Zm9yIChpID0gMTsgaSA8PSBrOyBpKyspIHsgICAgICAgLyogRG8gdGhhdCBtYW55IENEVVBzICov Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgc3luY2RpciBDRFVQIEEiLHAsaSk7Ci0JICAg IGlmIChmZGlzcGxhID09IFhZRkRfQikKLQkgICAgICBwcmludGYoIiBDRFVQXG4iKTsKLSAgICAg ICAgICAgIGlmIChzaW0gJiYgY2RzaW1sdmwpIHsKLSAgICAgICAgICAgICAgICBjZHNpbWx2bC0t OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoIWRvZnRwY2R1cCgp KSB7Ci0gICAgICAgICAgICAgICAgICAgIHF1aWV0ID0gc2F2ZXE7Ci0gICAgICAgICAgICAgICAg ICAgIHJldHVybigwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICBjZGxldmVsLS07Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCEqcCkgICAgICAgICAgICAg ICAgICAgICAgICAvKiBJZiB3ZSBkb24ndCBoYXZlIHRvIGdvIGRvd24gKi8KLSAgICAgICAgICBn b3RvIHhjd2Q7ICAgICAgICAgICAgICAgICAgICAvKiB3ZSdyZSBkb25lLiAqLwotICAgIH0KLSNp ZmRlZiBDT01NRU5UCi0gICAgd2hpbGUgKHAgPiBidWYgJiYgKnAgJiYgKnAgIT0gJy8nKSAgLyog SWYgaW4gbWlkZGxlIG9mIHNlZ21lbnQgKi8KLSAgICAgIHAtLTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBiYWNrIHVwIHRvIGJlZ2lubmluZyAqLwotICAgIGlmICgqcCA9PSAnLycp ICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCB0ZXJtaW5hdGUgdGhlcmUgKi8KLSAgICAgIHAr KzsKLSNlbmRpZgkvKiBDT01NRU5UICovCi0KLSAgICBkZWJ1ZyhGMTEwLCJmdHAgc3luY2RpciBO RVcgUEFUSCIscCwwKTsKLQotICAgIHMgPSBwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFBvaW50IHRvIHN0YXJ0IG9mIG5ldyBkb3duIHBhdGguICovCi0gICAgd2hpbGUgKDEpIHsg ICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9vcCB0aHJvdWdoIGNoYXJhY3RlcnMuICovCi0g ICAgICAgIGlmICgqcyA9PSAnLycgfHwgISpzKSB7ICAgICAgICAgLyogSGF2ZSBhIHNlZ21lbnQu ICovCi0gICAgICAgICAgICBpZiAoISpzKSAgICAgICAgICAgICAgICAgICAgLyogSWYgZW5kIG9m IHN0cmluZywgKi8KLSAgICAgICAgICAgICAgZG9uZSsrOyAgICAgICAgICAgICAgICAgICAvKiBh ZnRlciB0aGlzIHNlZ21lbnQgd2UncmUgZG9uZS4gKi8KLSAgICAgICAgICAgIGVsc2UKLSAgICAg ICAgICAgICAgKnMgPSBOVUw7ICAgICAgICAgICAgICAgICAvKiBOVUwgb3V0IHRoZSBzZXBhcmF0 b3IuICovCi0gICAgICAgICAgICBpZiAoKnApIHsgICAgICAgICAgICAgICAgICAgLyogSWYgc2Vn bWVudCBpcyBub3QgZW1wdHkgKi8KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgc3lu Y2RpciBkb3duIHNlZ21lbnQiLHAsMCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFkb2Z0cGN3ZChw LDApKSB7ICAgLyogVHJ5IHRvIENEIHRvIGl0ICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChz aW0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikgewot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiIFdPVUxEIENSRUFURSBESVJFQ1RP UlkgJXNcbiIsbG9jYWwpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmZGlz cGxhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ttYWttc2cobXNnYnVmLENLTUFY UEFUSCwKLQkJCQkgICAgICJXT1VMRCBDUkVBVEUgRElSRUNUT1JZIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCxOVUxMLE5VTEwpOwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGZ0c2NyZWVuKFNDUl9TVCxTVF9NU0csKENLX09GRl9UKTAsbXNnYnVmKTsK LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNkc2lt bHZsKys7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBpZiAoIWRvZnRweG1rZChwLDApKSB7IC8qIENhbid0IENEIC0gdHJ5IHRvIGNyZWF0ZSAq LwotCQkJICAgIGRlYnVnKEYxMTAsImZ0cCBzeW5jZGlyIG1rZGlyIGZhaWxlZCIscCwwKTsgCi0v KgotICBTdXBwb3NlIHdlIGFyZSBleGVjdXRpbmcgU0VORCAvUkVDVVJTSVZFLiAgTG9jYWxseSB3 ZSBoYXZlIGEgZGlyZWN0b3J5Ci0gIEZPTyBidXQgdGhlIHJlbW90ZSBoYXMgYSByZWd1bGFyIGZp bGUgd2l0aCB0aGUgc2FtZSBuYW1lLiAgV2UgY2FuJ3QgQ0QKLSAgdG8gaXQsIGNhbid0IE1LRElS IGl0IGVpdGhlci4gIFRoZXJlJ3Mgbm8gd2F5IG91dCBidXQgdG8gZmFpbCBhbmQgbGV0Ci0gIHRo ZSB1c2VyIGhhbmRsZSB0aGUgcHJvYmxlbS4KLSovCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgcXVpZXQgPSBzYXZlcTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oMCk7 Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0JCQlkZWJ1ZyhGMTEwLCJmdHAgc3luY2RpciBt a2RpciBPSyIscCwwKTsgCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBY WUZEX0IpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiBDUkVBVEVEIERJ UkVDVE9SWSAlc1xuIixwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmRp c3BsYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKG1zZ2J1ZixDS01B WFBBVEgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNSRUFURUQgRElS RUNUT1JZICIscCxOVUxMLE5VTEwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0c2Ny ZWVuKFNDUl9TVCxTVF9NU0csKENLX09GRl9UKTAsbXNnYnVmKTsKLSAgICAgICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZG9mdHBjd2QocCwwKSkgeyAv KiBUcnkgYWdhaW4gdG8gQ0QgKi8KLQkJCSAgICBkZWJ1ZyhGMTEwLCJmdHAgc3luY2RpciBDRCBm YWlsZWQiLHAsMCk7IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1aWV0ID0gc2F2ZXE7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICAgICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9C KSBwcmludGYoIiBDV0QgJXNcbiIscCk7Ci0JCQlkZWJ1ZyhGMTEwLCJmdHAgc3luY2RpciBDRCBP SyIscCwwKTsgCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgY2RsZXZlbCsrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGRv bmUpICAgICAgICAgICAgICAgICAgIC8qIFF1aXQgaWYgbm8gbmV4dCBzZWdtZW50ICovCi0gICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgcCA9IHMrMTsgICAgICAgICAgICAgICAgICAg IC8qIFBvaW50IHRvIG5leHQgc2VnbWVudCAqLwotICAgICAgICB9Ci0gICAgICAgIHMrKzsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gbmV4dCBzb3VyY2UgY2hhciAqLwot ICAgIH0KLQotICB4Y3dkOgotICAgIGNrc3RybmNweShwdXRwYXRoLHRtcCxDS01BWFBBVEgrMSk7 IC8qIEFsbCBPSyAtIG1ha2UgdGhpcyB0aGUgbmV3IHBhdGggKi8KLSAgICBxdWlldCA9IHNhdmVx OwotICAgIHJldHVybigxKTsKLX0KLQotI2lmZGVmIERPVVBEQVRFCi0jaWZkZWYgREVCVUcKLXN0 YXRpYyBWT0lECi1kYnRpbWUocyx4eCkgY2hhciAqIHM7IHN0cnVjdCB0bSAqIHh4OyB7IC8qIFdy aXRlIHN0cnVjdCB0bSB0byBkZWJ1ZyBsb2cgKi8KLSAgICBpZiAoZGVibG9nKSB7Ci0gICAgICAg IGRlYnVnKEYxMTEsImZ0cCB5ZWFyICIscyx4eC0+dG1feWVhcik7Ci0gICAgICAgIGRlYnVnKEYx MTEsImZ0cCBtb250aCIscyx4eC0+dG1fbW9uKTsKLSAgICAgICAgZGVidWcoRjExMSwiZnRwIGRh eSAgIixzLHh4LT50bV9tZGF5KTsKLSAgICAgICAgZGVidWcoRjExMSwiZnRwIGhvdXIgIixzLHh4 LT50bV9ob3VyKTsKLSAgICAgICAgZGVidWcoRjExMSwiZnRwIG1pbiAgIixzLHh4LT50bV9taW4p OwotICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgc2VjICAiLHMseHgtPnRtX3NlYyk7Ci0gICAgfQot fQotI2VuZGlmIC8qIERFQlVHICovCi0KLS8qICB0IG0gYyBvIG0gcCBhIHIgZSAgLS0gIENvbXBh cmUgdHdvIHN0cnVjdCB0bSdzICovCi0KLS8qICBMaWtlIHN0cmNtcCgpIGJ1dCBmb3Igc3RydWN0 IHRtJ3MgICovCi0vKiAgUmV0dXJucyAtMSBpZiB4eCA8IHl5LCAwIGlmIHRoZXkgYXJlIGVxdWFs LCAxIGlmIHh4ID4geXkgKi8KLQotc3RhdGljIGludAotdG1jb21wYXJlKHh4LHl5KSBzdHJ1Y3Qg dG0gKiB4eCwgKiB5eTsgewotCi0gICAgaWYgKHh4LT50bV95ZWFyIDwgeXktPnRtX3llYXIpICAg ICAgLyogRmlyc3QgeWVhciBsZXNzIHRoYW4gc2Vjb25kICovCi0gICAgICByZXR1cm4oLTEpOwot ICAgIGlmICh4eC0+dG1feWVhciA+IHl5LT50bV95ZWFyKSAgICAgIC8qIEZpcnN0IHllYXIgZ3Jl YXRlciB0aGFuIHNlY29uZCAqLwotICAgICAgcmV0dXJuKDEpOwotCi0gICAgLyogWWVhcnMgYXJl IGVxdWFsIHNvIGNvbXBhcmUgbW9udGhzICovCi0KLSAgICBpZiAoeHgtPnRtX21vbiAgPCB5eS0+ dG1fbW9uKSAgICAgICAvKiBBbmQgc28gb24uLi4gKi8KLSAgICAgIHJldHVybigtMSk7Ci0gICAg aWYgKHh4LT50bV9tb24gID4geXktPnRtX21vbikKLSAgICAgIHJldHVybigxKTsKLQotICAgIGlm ICh4eC0+dG1fbWRheSA8IHl5LT50bV9tZGF5KQotICAgICAgcmV0dXJuKC0xKTsKLSAgICBpZiAo eHgtPnRtX21kYXkgPiB5eS0+dG1fbWRheSkKLSAgICAgIHJldHVybigxKTsKLQotICAgIGlmICh4 eC0+dG1faG91ciA8IHl5LT50bV9ob3VyKQotICAgICAgcmV0dXJuKC0xKTsKLSAgICBpZiAoeHgt PnRtX2hvdXIgPiB5eS0+dG1faG91cikKLSAgICAgIHJldHVybigxKTsKLQotICAgIGlmICh4eC0+ dG1fbWluICA8IHl5LT50bV9taW4pCi0gICAgICByZXR1cm4oLTEpOwotICAgIGlmICh4eC0+dG1f bWluICA+IHl5LT50bV9taW4pCi0gICAgICByZXR1cm4oMSk7Ci0KLSAgICBpZiAoeHgtPnRtX3Nl YyAgPCB5eS0+dG1fc2VjKQotICAgICAgcmV0dXJuKC0xKTsKLSAgICBpZiAoeHgtPnRtX3NlYyAg PiB5eS0+dG1fc2VjKQotICAgICAgcmV0dXJuKDEpOwotCi0gICAgcmV0dXJuKDApOwotfQotI2Vu ZGlmIC8qIERPVVBEQVRFICovCi0KLSNpZm5kZWYgSEFWRV9USU1FR00gICAgICAgICAgICAgLyog Rm9yIHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBoYXZlIHRpbWVnbSgpICovCi1zdGF0aWMgQ09OU1Qg aW50IE1PTlRIREFZU1tdID0geyAvKiBOdW1iZXIgb2YgZGF5cyBpbiBlYWNoIG1vbnRoLiAqLwot ICAgIDMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzEKLX07Ci0K LS8qIE1hY3JvIGZvciB3aGV0aGVyIGEgZ2l2ZW4geWVhciBpcyBhIGxlYXAgeWVhci4gKi8KLSNk ZWZpbmUgSVNMRUFQKHllYXIpIFwKLSgoKHllYXIpICUgNCkgPT0gMCAmJiAoKCh5ZWFyKSAlIDEw MCkgIT0gMCB8fCAoKHllYXIpICUgNDAwKSA9PSAwKSkKLSNlbmRpZiAvKiBIQVZFX1RJTUVHTSAq LwotCi0vKiAgbSBrIHUgdCBpIG0gZSAgLS0gIExpa2UgbWt0aW1lKCkgYnV0IGFyZ3VtZW50IGlz IGFscmVhZHkgVVRDICovCi0KLXN0YXRpYyB0aW1lX3QKLSNpZmRlZiBDS19BTlNJQwotbWt1dGlt ZShzdHJ1Y3QgdG0gKiB0bSkKLSNlbHNlCi1ta3V0aW1lKHRtKSBzdHJ1Y3QgdG0gKiB0bTsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwotLyogbWt1dGltZSAqLyB7Ci0jaWZkZWYgSEFWRV9USU1FR00K LSAgICByZXR1cm4odGltZWdtKHRtKSk7ICAgICAgICAgICAgICAgICAvKiBIYXZlIHN5c3RlbSBz ZXJ2aWNlLCB1c2UgaXQuICovCi0jZWxzZQotLyoKLSAgQ29udHJpYnV0ZWQgYnkgUnVzcyBBbGxi ZXJ5IChycmFAc3RhbmZvcmQuZWR1KSwgdXNlZCBieSBwZXJtaXNzaW9uLgotICBHaXZlbiBhIHN0 cnVjdCB0bSByZXByZXNlbnRpbmcgYSBjYWxlbmRhciB0aW1lIGluIFVUQywgY29udmVydCBpdCB0 bwotICBzZWNvbmRzIHNpbmNlIGVwb2NoLiAgUmV0dXJucyAodGltZV90KSAtMSBpZiB0aGUgdGlt ZSBpcyBub3QKLSAgY29udmVydGFibGUuICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIG5v dCBjYW5vbmljYWxpemUgdGhlIHByb3ZpZGVkCi0gIHN0cnVjdCB0bSwgbm9yIGRvZXMgaXQgYWxs b3cgb3V0LW9mLXJhbmdlIHZhbHVlcyBvciB5ZWFycyBiZWZvcmUgMTk3MC4KLSAgUmVzdWx0IHNo b3VsZCBiZSBpZGVudGljYWwgd2l0aCB0aW1lZ20oKS4KLSovCi0gICAgdGltZV90IHJlc3VsdCA9 IDA7Ci0gICAgaW50IGk7Ci0gICAgLyoKLSAgICAgIFdlIGRvIGFsbG93IHNvbWUgaWxsLWZvcm1l ZCBkYXRlcywgYnV0IHdlIGRvbid0IGRvIGFueXRoaW5nIHNwZWNpYWwKLSAgICAgIHdpdGggdGhl bSBhbmQgb3VyIGNhbGxlcnMgcmVhbGx5IHNob3VsZG4ndCBwYXNzIHRoZW0gdG8gdXMuICBEbwot ICAgICAgZXhwbGljaXRseSBkaXNhbGxvdyB0aGUgb25lcyB0aGF0IHdvdWxkIGNhdXNlIGludmFs aWQgYXJyYXkgYWNjZXNzZXMKLSAgICAgIG9yIG90aGVyIGFsZ29yaXRobSBwcm9ibGVtcy4KLSAg ICAqLwotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewotICAgICAgICBkZWJ1ZyhGMTAx LCJta3V0aW1lIHRtX21vbiIsIiIsdG0tPnRtX21vbik7Ci0gICAgICAgIGRlYnVnKEYxMDEsIm1r dXRpbWUgdG1feWVhciIsIiIsdG0tPnRtX3llYXIpOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAq LwotICAgIGlmICh0bS0+dG1fbW9uIDwgMCB8fCB0bS0+dG1fbW9uID4gMTEgfHwgdG0tPnRtX3ll YXIgPCA3MCkKLSAgICAgIHJldHVybigodGltZV90KSAtMSk7Ci0KLSAgICAvKiBDb252ZXJ0IHRv IHRpbWVfdC4gKi8KLSAgICBmb3IgKGkgPSAxOTcwOyBpIDwgdG0tPnRtX3llYXIgKyAxOTAwOyBp KyspCi0gICAgICByZXN1bHQgKz0gMzY1ICsgSVNMRUFQKGkpOwotICAgIGZvciAoaSA9IDA7IGkg PCB0bS0+dG1fbW9uOyBpKyspCi0gICAgICByZXN1bHQgKz0gTU9OVEhEQVlTW2ldOwotICAgIGlm ICh0bS0+dG1fbW9uID4gMSAmJiBJU0xFQVAodG0tPnRtX3llYXIgKyAxOTAwKSkKLSAgICAgIHJl c3VsdCsrOwotICAgIHJlc3VsdCA9IDI0ICogKHJlc3VsdCArIHRtLT50bV9tZGF5IC0gMSkgKyB0 bS0+dG1faG91cjsKLSAgICByZXN1bHQgPSA2MCAqIHJlc3VsdCArIHRtLT50bV9taW47Ci0gICAg cmVzdWx0ID0gNjAgKiByZXN1bHQgKyB0bS0+dG1fc2VjOwotICAgIGRlYnVnKEYxMDEsIm1rdXRp bWUgcmVzdWx0IiwiIixyZXN1bHQpOwotICAgIHJldHVybihyZXN1bHQpOwotI2VuZGlmIC8qIEhB VkVfVElNRUdNICovCi19Ci0KLQotLyoKLSAgcyBlIHQgbSBvIGQgdCBpIG0gZSAgLS0gIFNldCBm aWxlIG1vZGlmaWNhdGlvbiB0aW1lLgotCi0gIGYgPSBjaGFyICogZmlsZW5hbWU7Ci0gIHQgPSB0 aW1lX3QgZGF0ZS90aW1lIHRvIHNldCAoU2VjcyBzaW5jZSAxOTcwMDEwMSAwOjAwOjAwIFVUQywg Tk9UIGxvY2FsKQotCi0gIFVOSVgtc3BlY2lmaWM7IGlzb2xhdGVzIG1haW5saW5lIGNvZGUgZnJv bSBoaWRlb3VzICNpZmRlZnMuCi0gIFJldHVybnM6Ci0gICAgMCBvbiBzdWNjZXNzLAotICAgLTEg b24gZXJyb3IuCi0KLSovCi1zdGF0aWMgaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXNldG1vZHRpbWUo Y2hhciAqIGYsIHRpbWVfdCB0KQotI2Vsc2UKLXNldG1vZHRpbWUoZix0KSBjaGFyICogZjsgdGlt ZV90IHQ7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHNldG1vZHRpbWUgKi8gewotI2lmZGVm IE5UCi0gICAgc3RydWN0IF9zdGF0IHNiOwotI2Vsc2UgLyogTlQgKi8KLSAgICBzdHJ1Y3Qgc3Rh dCBzYjsKLSNlbmRpZiAvKiBOVCAqLwotICAgIGludCB4LCByYyA9IDA7Ci0jaWZkZWYgQlNENDQK LSAgICBzdHJ1Y3QgdGltZXZhbCB0cFsyXTsKLSNlbHNlICAvKiBkZWYgQlNENDQgKi8KLSNpZmRl ZiBWNwotICAgIHN0cnVjdCB1dGltYnVmIHsKLSAgICAgICAgdGltZV90IHRpbWVwWzJdOwotICAg IH0gdHA7Ci0jZWxzZSAgLyogZGVmIFY3ICovCi0jaWZkZWYgU1lTVVRJTUVICi0jaWZkZWYgTlQK LSAgICBzdHJ1Y3QgX3V0aW1idWYgdHA7Ci0jZWxzZSAvKiBOVCAqLwotICAgIHN0cnVjdCB1dGlt YnVmIHRwOwotI2VuZGlmIC8qIE5UICovCi0jZWxzZSAvKiBkZWYgU1lTVVRJTUVIICovCi0jaWZk ZWYgVk1TCi0gICAgc3RydWN0IHV0aW1idWYgdHA7Ci0jZGVmaW5lIFNZU1VUSU1FSCAgICAgICAg ICAgICAgIC8qIE91ciB1dGltYnVmIG1hdGNoZXMgdGhpcyBvbmUuICovCi0jZWxzZSAvKiBkZWYg Vk1TICovCi0gICAgc3RydWN0IHV0aW1idWYgewotICAgICAgICB0aW1lX3QgYXRpbWU7Ci0gICAg ICAgIHRpbWVfdCBtdGltZTsKLSAgICB9IHRwOwotI2VuZGlmIC8qIGRlZiBWTVMgW2Vsc2VdICov Ci0jZW5kaWYgLyogZGVmIFNZU1VUSU1FSCBbZWxzZV0gKi8KLSNlbmRpZiAvKiBkZWYgVjcgW2Vs c2VdICovCi0jZW5kaWYgLyogZGVmIEJTRDQ0IFtlbHNlXSAqLwotCi0gICAgaWYgKHN0YXQoZiwm c2IpIDwgMCkgewotICAgICAgICBkZWJ1ZyhGMTExLCJzZXRtb2R0aW1lIHN0YXQgZmFpbHVyZSIs ZixlcnJubyk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotI2lmZGVmIEJTRDQ0Ci0gICAg dHBbMF0udHZfc2VjID0gc2Iuc3RfYXRpbWU7ICAgICAgICAgLyogQWNjZXNzIHRpbWUgZmlyc3Qg Ki8KLSAgICB0cFsxXS50dl9zZWMgPSB0OyAgICAgICAgICAgICAgICAgICAvKiBVcGRhdGUgdGlt ZSBzZWNvbmQgKi8KLSAgICBkZWJ1ZyhGMTExLCJzZXRtb2R0aW1lIEJTRDQ0IixmLHQpOwotI2Vs c2UKLSNpZmRlZiBWNwotICAgIHRwLnRpbWVwWzBdID0gdDsgICAgICAgICAgICAgICAgICAgIC8q IFNldCBtb2RpZi4gdGltZSB0byBjcmVhdGlvbiBkYXRlICovCi0gICAgdHAudGltZXBbMV0gPSBz Yi5zdF9hdGltZTsgICAgICAgICAgLyogRG9uJ3QgY2hhbmdlIHRoZSBhY2Nlc3MgdGltZSAqLwot ICAgIGRlYnVnKEYxMTEsInNldG1vZHRpbWUgVjciLGYsdCk7Ci0jZWxzZQotI2lmZGVmIFNZU1VU SU1FSAotICAgIHRwLm1vZHRpbWUgPSB0OyAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBtb2Rp Zi4gdGltZSB0byBjcmVhdGlvbiBkYXRlICovCi0gICAgdHAuYWN0aW1lID0gc2Iuc3RfYXRpbWU7 ICAgICAgICAgICAgLyogRG9uJ3QgY2hhbmdlIHRoZSBhY2Nlc3MgdGltZSAqLwotICAgIGRlYnVn KEYxMTEsInNldG1vZHRpbWUgU1lTVVRJTUVIIixmLHQpOwotI2Vsc2UKLSAgICB0cC5tdGltZSA9 IHQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgbW9kaWYuIHRpbWUgdG8gY3JlYXRpb24g ZGF0ZSAqLwotICAgIHRwLmF0aW1lID0gc2Iuc3RfYXRpbWU7ICAgICAgICAgICAgIC8qIERvbid0 IGNoYW5nZSB0aGUgYWNjZXNzIHRpbWUgKi8KLSAgICBkZWJ1ZyhGMTExLCJzZXRtb2R0aW1lIChv dGhlcikiLGYsdCk7Ci0jZW5kaWYgLyogU1lTVVRJTUVIICovCi0jZW5kaWYgLyogVjcgKi8KLSNl bmRpZiAvKiBCU0Q0NCAqLwotCi0gICAgLyogVHJ5IHRvIHNldCB0aGUgZmlsZSBkYXRlICovCi0K LSNpZmRlZiBCU0Q0NAotICAgIHggPSB1dGltZXMoZix0cCk7Ci0gICAgZGVidWcoRjExMSwic2V0 bW9kdGltZSB1dGltZXMoKSIsIkJTRDQ0Iix4KTsKLSNlbHNlCi0jaWZkZWYgSVJJWDY1Ci0gICAg ewotICAgICAgLyoKLSAgICAgICAgVGhlIGZvbGxvd2luZyBwcm9kdWNlcyB0aGUgbm9uc2Vuc2lj YWwgd2FybmluZzoKLSAgICAgICAgQXJndW1lbnQgIG9mIHR5cGUgImNvbnN0IHN0cnVjdCB1dGlt YnVmICoiIGlzIGluY29tcGF0aWJsZSB3aXRoCi0gICAgICAgIHBhcmFtZXRlciBvZiB0eXBlICJj b25zdCBzdHJ1Y3QgdXRpbWJ1ZiAqIi4gIElmIHlvdSBjYW4gbWFrZSBpdAotICAgICAgICBnbyBh d2F5LCBiZSBteSBndWVzdC4KLSAgICAgICovCi0gICAgICAgIGNvbnN0IHN0cnVjdCB1dGltYnVm ICogdDIgPSAmdHA7Ci0gICAgICAgIHggPSB1dGltZShmLHQyKTsKLSAgICB9Ci0jZWxzZQotICAg IHggPSB1dGltZShmLCZ0cCk7Ci0gICAgZGVidWcoRjExMSwic2V0bW9kdGltZSB1dGltZSgpIiwi b3RoZXIiLHgpOwotI2VuZGlmIC8qIElSSVg2NSAqLwotI2VuZGlmIC8qIEJTRDQ0ICovCi0gICAg aWYgKHgpCi0gICAgICByYyA9IC0xOwotCi0gICAgZGVidWcoRjEwMSwic2V0bW9kdGltZSByZXN1 bHQiLCIiLHJjKTsKLSAgICByZXR1cm4ocmMpOwotfQotCi0KLS8qCi0gIGMgaCBrIG0gbyBkIHQg aSBtIGUgIC0tICBDaGVjay9TZXQgZmlsZSBtb2RpZmljYXRpb24gdGltZS4KLQotICBmYyA9IGZ1 bmN0aW9uIGNvZGU6Ci0gICAgMCA9IENoZWNrOyByZXR1cm5zOgotICAgICAgLTEgb24gZXJyb3Is Ci0gICAgICAgMCBpZiBsb2NhbCBvbGRlciB0aGFuIHJlbW90ZSwKLSAgICAgICAxIGlmIG1vZHRp bWVzIGFyZSBlcXVhbCwKLSAgICAgICAyIGlmIGxvY2FsIG5ld2VyIHRoYW4gcmVtb3RlLgotICAg IDEgPSBTZXQgKGxvY2FsIGZpbGUncyBtb2R0aW1lIGZyb20gcmVtb3RlJ3MpOyByZXR1cm5zOgot ICAgICAgLTEgb24gZXJyb3IsCi0gICAgICAgMCBvbiBzdWNjZXNzLgotKi8KLXN0YXRpYyBpbnQK LWNoa21vZHRpbWUobG9jYWwscmVtb3RlLGZjKSBjaGFyICogbG9jYWwsICogcmVtb3RlOyBpbnQg ZmM7IHsKLSNpZmRlZiBOVAotICAgIHN0cnVjdCBfc3RhdCBzdGF0YnVmOwotI2Vsc2UgLyogTlQg Ki8KLSAgICBzdHJ1Y3Qgc3RhdCBzdGF0YnVmOwotI2VuZGlmIC8qIE5UICovCi0gICAgc3RydWN0 IHRtICogdG1sb2NhbCA9IE5VTEw7Ci0gICAgc3RydWN0IHRtIHRtcmVtb3RlOwotICAgIGludCBy YyA9IDAsIGhhdmVkYXRlID0gMCwgbGNzID0gLTEsIHJjcyA9IC0xLCBmbGFnID0gMDsKLSAgICBj aGFyICogcywgdGltZWJ1Zls2NF07Ci0KLSAgICBkZWJ1ZyhGMTExLCJjaGttb2R0aW1lIixsb2Nh bCxtZHRtb2spOwotICAgIGlmICghbWR0bW9rKQkJCS8qIFNlcnZlciBzdXBwb3J0cyBNRFRNPyAq LwotICAgICAgcmV0dXJuKC0xKTsJCQkvKiBObyBkb24ndCBib3RoZXIuICovCi0KLSNpZm5kZWYg Tk9DU0VUUwotICAgIGlmIChmdHBfeGxhKSB7Ci0gICAgICAgIGxjcyA9IGZ0cF9jc2w7Ci0gICAg ICAgIGlmIChsY3MgPCAwKSBsY3MgPSBmY2hhcnNldDsKLSAgICAgICAgcmNzID0gZnRwX2NzeDsK LSAgICAgICAgaWYgKHJjcyA8IDApIHJjcyA9IGZ0cF9jc3I7Ci0gICAgfQotI2VuZGlmIC8qIE5P Q1NFVFMgKi8KLQotICAgIGlmIChmYyA9PSAwKSB7Ci0gICAgICAgIHJjID0gc3RhdChsb2NhbCwm c3RhdGJ1Zik7Ci0gICAgICAgIGlmIChyYyA9PSAwKSB7ICAgICAgICAgICAgICAgICAgLyogR2V0 IGxvY2FsIGZpbGUncyBtb2QgdGltZSAqLwotCSAgICAvKiBDb252ZXJ0IHRvIHN0cnVjdCB0bSAq LwotICAgICAgICAgICAgdG1sb2NhbCA9IGdtdGltZSgodGltZV90ICopJnN0YXRidWYuc3RfbXRp bWUpOwotI2lmZGVmIERFQlVHCi0gICAgICAgICAgICBpZiAodG1sb2NhbCkgewotICAgICAgICAg ICAgICAgIGRidGltZShsb2NhbCx0bWxvY2FsKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBE RUJVRyAqLwotICAgICAgICB9Ci0gICAgfQotICAgIC8qIEdldCByZW1vdGUgZmlsZSdzIG1vZCB0 aW1lIGFzIHl5eXltbWRkaGhtbXNzICovCi0KLSAgICBpZiAoaGF2ZW1kdG0pIHsJCQkvKiBBbHJl YWR5IGdvdCBpdCBmcm9tIE1MU0Q/ICovCi0JcyA9IGhhdmVtZHRtOwotCWZsYWcrKzsKLSAgICB9 IGVsc2UgaWYgKGZ0cGNtZCgiTURUTSIscmVtb3RlLGxjcyxyY3MsMCkgPT0gUkVQTFlfQ09NUExF VEUpIHsKLSAgICAgICAgY2hhciBjOwotICAgICAgICBiemVybygoY2hhciAqKSZ0bXJlbW90ZSwg c2l6ZW9mKHN0cnVjdCB0bSkpOwotICAgICAgICBzID0gZnRwX3JlcGx5X3N0cjsKLSAgICAgICAg d2hpbGUgKChjID0gKnMrKykpIHsgICAgICAgICAgICAvKiBTa2lwIHBhc3QgcmVzcG9uc2UgY29k ZSAqLwotICAgICAgICAgICAgaWYgKGMgPT0gU1ApIHsKLSAgICAgICAgICAgICAgICBmbGFnKys7 Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9 Ci0gICAgaWYgKGZsYWcpIHsKLQlkZWJ1ZyhGMTExLCJmdHAgY2hrbW9kdGltZSBzdHJpbmciLHMs ZmxhZyk7Ci0JaWYgKGZ0c19zdG8pIHsJCQkvKiBVc2VyIGdhdmUgc2VydmVyIHRpbWUgb2Zmc2V0 PyAqLwotCSAgICBjaGFyICogcDsKLQkgICAgZGVidWcoRjExMCwiZnRwIGNoa21vZHRpbWUgb2Zm c2V0IixmdHNfc3RvLDApOwotCSAgICBja21ha21zZyh0aW1lYnVmLDY0LHMsIiAiLGZ0c19zdG8s TlVMTCk7IC8qIEJ1aWxkIGRlbHRhIHRpbWUgKi8KLQkgICAgaWYgKChwID0gY21jdnRkYXRlKHRp bWVidWYsMSkpKSB7IC8qIEFwcGx5IGRlbHRhIHRpbWUgKi8KLQkJY2tzdHJuY3B5KHRpbWVidWYs cCw2NCk7ICAgICAgLyogQ29udmVydCB0byBNRFRNIGZvcm1hdCAqLwotCQl0aW1lYnVmWzhdICA9 IHRpbWVidWZbOV07ICAvKiBoICovCi0JCXRpbWVidWZbOV0gID0gdGltZWJ1ZlsxMF07IC8qIGgg Ki8KLQkJdGltZWJ1ZlsxMF0gPSB0aW1lYnVmWzEyXTsgLyogbSAqLwotCQl0aW1lYnVmWzExXSA9 IHRpbWVidWZbMTNdOyAvKiBtICovCi0JCXRpbWVidWZbMTJdID0gdGltZWJ1ZlsxMl07IC8qIHMg Ki8KLQkJdGltZWJ1ZlsxM10gPSB0aW1lYnVmWzEzXTsgLyogcyAqLwotCQl0aW1lYnVmWzE0XSA9 IE5VTDsKLQkJcyA9IHRpbWVidWY7Ci0JCWRlYnVnKEYxMTAsImZ0cCBjaGttb2R0aW1lIGFkanVz dCIscywwKTsKLQkgICAgfQotCX0KLSAgICAgICAgaWYgKGZsYWcpIHsgICAgICAgICAgICAgICAg ICAgICAvKiBDb252ZXJ0IHRvIHN0cnVjdCB0bSAqLwotICAgICAgICAgICAgY2hhciAqIHBhdDsK LSAgICAgICAgICAgIGludCB5MmtidWcgPSAwOyAgICAgICAgICAgICAvKiBTZWVuIGluIEtlcmJl cm9zIDQgRlRQIHNlcnZlcnMgKi8KLSAgICAgICAgICAgIGlmICghY2tzdHJjbXAocywiMTkxIiwz LDApKSB7Ci0gICAgICAgICAgICAgICAgcGF0ID0gIiUwNWQlMDJkJTAyZCUwMmQlMDJkJTAyZCI7 Ci0gICAgICAgICAgICAgICAgeTJrYnVnKys7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwi ZnRwIGNoa21vZHRpbWUgWTJLIEJVRyBkZXRlY3RlZCIscywwKTsKLSAgICAgICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICAgICAgcGF0ID0gIiUwNGQlMDJkJTAyZCUwMmQlMDJkJTAyZCI7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3NjYW5mKHMsICAgICAgICAgICAgICAgLyog UGFyc2UgaW50byBzdHJ1Y3QgdG0gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgcGF0LAotICAg ICAgICAgICAgICAgICAgICAgICAmKHRtcmVtb3RlLnRtX3llYXIpLAotICAgICAgICAgICAgICAg ICAgICAgICAmKHRtcmVtb3RlLnRtX21vbiksCi0gICAgICAgICAgICAgICAgICAgICAgICYodG1y ZW1vdGUudG1fbWRheSksCi0gICAgICAgICAgICAgICAgICAgICAgICYodG1yZW1vdGUudG1faG91 ciksCi0gICAgICAgICAgICAgICAgICAgICAgICYodG1yZW1vdGUudG1fbWluKSwKLSAgICAgICAg ICAgICAgICAgICAgICAgJih0bXJlbW90ZS50bV9zZWMpCi0gICAgICAgICAgICAgICAgICAgICAg ICkgPT0gNikgewotICAgICAgICAgICAgICAgIHRtcmVtb3RlLnRtX3llYXIgLT0gKHkya2J1ZyA/ IDE5MDAwIDogMTkwMCk7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiZnRwIGNoa21vZHRp bWUgeWVhciIsIiIsdG1yZW1vdGUudG1feWVhcik7Ci0gICAgICAgICAgICAgICAgdG1yZW1vdGUu dG1fbW9uLS07Ci0KLSNpZmRlZiBERUJVRwotCQlkZWJ1ZyhGMTAwLCJTRVJWRVIgVElNRSBGT0xM T1dTOiIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgZGJ0aW1lKHJlbW90ZSwmdG1yZW1vdGUpOwot I2VuZGlmIC8qIERFQlVHICovCi0KLSAgICAgICAgICAgICAgICBpZiAoaGF2ZWRhdGUgPiAtMSkK LQkJICBoYXZlZGF0ZSA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug ewkJCQkvKiBGYWlsZWQgKi8KLQlkZWJ1ZyhGMTAxLCJmdHAgY2hrbW9kdGltZSBmdHBjb2RlIiwi IixmdHBjb2RlKTsKLQlpZiAoZnRwY29kZSA9PSA1MDAgfHwJCS8qIENvbW1hbmQgdW5yZWNvZ25p emVkICovCi0JICAgIGZ0cGNvZGUgPT0gNTAyIHx8CQkvKiBDb21tYW5kIG5vdCBpbXBsZW1lbnRl ZCAqLwotCSAgICBmdHBjb2RlID09IDIwMikJCS8qIENvbW1hbmQgc3VwZXJmbHVvdXMgKi8KLQkg IG1kdG1vayA9IDA7CQkJLyogRG9uJ3QgYXNrIHRoaXMgc2VydmVyIGFnYWluICovCi0JcmV0dXJu KC0xKTsKLSAgICB9Ci0gICAgaWYgKGZjID09IDApIHsgICAgICAgICAgICAgICAgICAgICAgLyog Q29tcGFyZSAqLwotICAgICAgICBpZiAoaGF2ZWRhdGUgPT0gMSkgewkJLyogT25seSBpZiB3ZSBo YXZlIGJvdGggZmlsZSBkYXRlcyAqLwotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgQ29t cGFyZSB3aXRoIGxvY2FsIGZpbGUncyB0aW1lLiAgV2UgZG9uJ3QgdXNlCi0gICAgICAgICAgICAg IGNsb2NrIHRpbWUgKHRpbWVfdCkgaGVyZSBpbiBjYXNlIG9mIHNpZ25lZC91bnNpZ25lZAotICAg ICAgICAgICAgICBjb25mdXNpb24sIGV0Yy4KLSAgICAgICAgICAgICovCi0JICAgIGludCB4eDsK LSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgREVCVUcJICAgIAotCSAgICBpZiAoZGVibG9nKSB7Ci0J CWRidGltZSgiTE9DQUwiLHRtbG9jYWwpOwotCQlkYnRpbWUoIlJFTU9UIiwmdG1yZW1vdGUpOwot CSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0JICAgIHh4 ID0gdG1jb21wYXJlKHRtbG9jYWwsJnRtcmVtb3RlKTsKLQkgICAgZGVidWcoRjEwMSwiY2hrbW9k dGltZSB0bWNvbXBhcmUiLCIiLHh4KTsKLSAgICAgICAgICAgIHJldHVybih4eCArIDEpOwotICAg ICAgICB9Ci0gICAgfSBlbHNlIGlmIChmdHBfZGF0ZXMpIHsgICAgICAgICAgICAgLyogU2V0ICov Ci0gICAgICAgIC8qCi0gICAgICAgICAgSGVyZSB3ZSBtdXN0IGNvbnZlcnQgc3RydWN0IHRtIHRv IHRpbWVfdAotICAgICAgICAgIHdpdGhvdXQgYXBwbHlpbmcgdGltZXpvbmUgY29udmVyc2lvbiwg Zm9yIHdoaWNoCi0gICAgICAgICAgdGhlcmUgaXMgbm8gcG9ydGFibGUgQVBJLiAgVGhlIG1ldGhv ZCBpcyBoaWRkZW4KLSAgICAgICAgICBpbiBta3V0aW1lKCksIGRlZmluZWQgYWJvdmUuCi0gICAg ICAgICovCi0gICAgICAgIHRpbWVfdCB1dGM7Ci0gICAgICAgIHV0YyA9IG1rdXRpbWUoJnRtcmVt b3RlKTsKLSAgICAgICAgZGVidWcoRjExMSwiZnRwIGNoa21vZHRpbWUgbWt1dGltZSIscmVtb3Rl LHV0Yyk7Ci0gICAgICAgIGlmICh1dGMgIT0gKHRpbWVfdCktMSkKLSAgICAgICAgICByZXR1cm4o c2V0bW9kdGltZShsb2NhbCx1dGMpKTsKLSAgICB9Ci0gICAgcmV0dXJuKC0xKTsKLX0KLQotLyog Z2V0ZmlsZSgpIHJldHVybnM6IC0xIG9uIGVycm9yLCAwIGlmIGZpbGUgcmVjZWl2ZWQsIDEgaWYg ZmlsZSBza2lwcGVkICovCi0KLXN0YXRpYyBpbnQKLWdldGZpbGUocmVtb3RlLGxvY2FsLHJlY292 ZXIsYXBwZW5kLHBpcGVuYW1lLHhsYXRlLGZjcyxyY3MpCi0gICAgY2hhciAqIGxvY2FsLCAqIHJl bW90ZSwgKiBwaXBlbmFtZTsgaW50IHJlY292ZXIsIGFwcGVuZCwgeGxhdGUsIGZjcywgcmNzOwot LyogZ2V0ZmlsZSAqLyB7Ci0gICAgaW50IHJjID0gLTE7Ci0gICAgVUxPTkcgdDAsIHQxOwotCi0j aWZkZWYgR0ZUSU1FUgotICAgIENLRkxPQVQgc2VjOwotI2Vsc2UKLSAgICBpbnQgc2VjID0gMDsK LSNlbmRpZiAvKiBHRlRJTUVSICovCi0gICAgY2hhciBmdWxsbmFtZVtDS01BWFBBVEgrMV07Ci0K LSAgICBkZWJ1ZyhGMTEwLCJmdHAgZ2V0ZmlsZSByZW1vdGUgQSIscmVtb3RlLDApOwotICAgIGRl YnVnKEYxMTAsImZ0cCBnZXRmaWxlIGxvY2FsIEEiLGxvY2FsLDApOwotICAgIGRlYnVnKEYxMTAs ImZ0cCBnZXRmaWxlIHBpcGVuYW1lIixwaXBlbmFtZSwwKTsKLSAgICBpZiAoIXJlbW90ZSkgcmVt b3RlID0gIiI7Ci0KLSNpZmRlZiBQQVRURVJOUwotICAgIC8qIEF1dG9tYXRpYyB0eXBlIHN3aXRj aGluZz8gKi8KLSAgICBpZiAoZnRwX3hmZXJtb2RlID09IFhNT0RFX0EgJiYgcGF0dGVybnMgJiYg Z2V0X2F1dG8gJiYgIWZvcmNldHlwZSkgewotICAgICAgICBpbnQgeDsKLSAgICAgICAgeCA9IG1h dGNobmFtZShyZW1vdGUsMCxzZXJ2ZXJ0eXBlKTsKLSAgICAgICAgZGVidWcoRjExMSwiZnRwIGdl dGZpbGUgbWF0Y2huYW1lIixyZW1vdGUseCk7Ci0gICAgICAgIHN3aXRjaCAoeCkgewotICAgICAg ICAgIGNhc2UgMDogZnRwX3R5cCA9IEZUVF9BU0M7IGJyZWFrOwotICAgICAgICAgIGNhc2UgMTog ZnRwX3R5cCA9IHRlbmV4ID8gRlRUX1RFTiA6IEZUVF9CSU47IGJyZWFrOwotICAgICAgICAgIGRl ZmF1bHQ6IGlmIChnX2Z0cF90eXAgPiAtMSkgZnRwX3R5cCA9IGdfZnRwX3R5cDsKLSAgICAgICAg fQotICAgICAgICBjaGFuZ2V0eXBlKGZ0cF90eXAsZnRwX3ZibSk7Ci0gICAgICAgIGJpbmFyeSA9 IGZ0cF90eXA7ICAgICAgICAgICAgICAgLyogRm9yIGZpbGUtdHJhbnNmZXIgZGlzcGxheSAqLwot ICAgIH0KLSNlbmRpZiAvKiBQQVRURVJOUyAqLwotCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICBmdHBf Y3N4ID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgZmlsZS10cmFuc2ZlciBkaXNw bGF5ICovCi0gICAgZnRwX2NzbCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgLyogLi4uICov Ci0KLSAgICBpZiAocmNzID4gLTEpICAgICAgICAgICAgICAgICAgICAgICAvKiAtMSBtZWFucyBu byB0cmFuc2xhdGlvbiAqLwotICAgICAgaWYgKGZ0cF90eXAgPT0gRlRUX0FTQykgICAgICAgICAg IC8qIEZpbGUgdHlwZSBpcyAiYXNjaWkiPyAqLwotICAgICAgICBpZiAoZmNzIDwgMCkgICAgICAg ICAgICAgICAgICAgIC8qIEZpbGUgY2hhcnNldCBub3QgZm9yY2VkPyAqLwotICAgICAgICAgIGZj cyA9IGZjaGFyc2V0OyAgICAgICAgICAgICAgIC8qIHVzZSBwcmV2YWlsaW5nIEZJTEUgQ0hBUkFD VEVSLVNFVCAqLwotICAgIGlmIChmY3MgPiAtMSAmJiByY3MgPiAtMSkgeyAgICAgICAgIC8qIFNl dCB1cCB0cmFuc2xhdGlvbiBmdW5jdGlvbnMgKi8KLSAgICAgICAgZGVidWcoRjExMCwiZnRwIGdl dGZpbGUiLCJpbml0eGxhdGUiLDApOwotICAgICAgICBpbml0eGxhdGUocmNzLGZjcyk7ICAgICAg ICAgICAgIC8qIE5COiBvcHBvc2l0ZSBvcmRlciBvZiBQVVQgKi8KLSAgICAgICAgZnRwX2NzeCA9 IHJjczsKLSAgICAgICAgZnRwX2NzbCA9IGZjczsKLSAgICB9IGVsc2UKLSAgICAgIHhsYXRlID0g MDsKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSAgICBpZiAoIWxvY2FsKSBsb2NhbCA9ICIiOwot ICAgIGlmICghcGlwZW5hbWUgJiYgISpsb2NhbCkKLSAgICAgIGxvY2FsID0gcmVtb3RlOwotCi0g ICAgb3V0MnNjcmVlbiA9ICFzdHJjbXAobG9jYWwsIi0iKTsKLQotICAgIGZ1bGxuYW1lWzBdID0g TlVMOwotICAgIGlmIChwaXBlbmFtZSkgewotICAgICAgICBja3N0cm5jcHkoZnVsbG5hbWUscGlw ZW5hbWUsQ0tNQVhQQVRIKzEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHpmbnFmcChsb2NhbCxD S01BWFBBVEgsZnVsbG5hbWUpOwotICAgICAgICBpZiAoIWZ1bGxuYW1lWzBdKQotICAgICAgICAg IGNrc3RybmNweShmdWxsbmFtZSxsb2NhbCxDS01BWFBBVEgrMSk7Ci0gICAgfQotICAgIGlmICgh b3V0MnNjcmVlbiAmJiBkaXNwbGEgJiYgZmRpc3BsYSkgeyAvKiBTY3JlZW4gKi8KLSAgICAgICAg ZnRzY3JlZW4oU0NSX0ZOLCdGJywoQ0tfT0ZGX1QpcGt0bnVtLHJlbW90ZSk7Ci0gICAgICAgIGZ0 c2NyZWVuKFNDUl9BTiwwLChDS19PRkZfVCkwLGZ1bGxuYW1lKTsKLSAgICAgICAgZnRzY3JlZW4o U0NSX0ZTLDAsZnNpemUsIiIpOwotICAgIH0KLSAgICB0bG9nKEYxMTAsZnRwX3R5cCA/ICJmdHAg Z2V0IEJJTkFSWToiIDogImZ0cCBnZXQgVEVYVDoiLCByZW1vdGUsIDApOwotICAgIHRsb2coRjEx MCwiIGFzIixmdWxsbmFtZSwwKTsKLSAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0ZmlsZSBzaXplIixy ZW1vdGUsZnNpemUpOwotICAgIGRlYnVnKEYxMTEsImZ0cCBnZXRmaWxlIGxvY2FsIixsb2NhbCxv dXQyc2NyZWVuKTsKLQotICAgIGNrc3RybmNweShmaWxuYW0sIHBpcGVuYW1lID8gcmVtb3RlIDog bG9jYWwsIENLTUFYUEFUSCk7Ci0KLSAgICB0MCA9IGdtc3RpbWVyKCk7ICAgICAgICAgICAgICAg ICAgICAvKiBTdGFydCB0aW1lICovCi0gICAgZGVidWcoRjExMSwiZnRwIGdldGZpbGUgdDAiLHJl bW90ZSx0MCk7IC8qIF5eXiAqLwotICAgIHJjID0gcmVjdnJlcXVlc3QoIlJFVFIiLAotICAgICAg ICAgICAgICAgICAgICAgbG9jYWwsCi0gICAgICAgICAgICAgICAgICAgICByZW1vdGUsCi0gICAg ICAgICAgICAgICAgICAgICBhcHBlbmQgPyAiYWIiIDogIndiIiwKLSAgICAgICAgICAgICAgICAg ICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICByZWNvdmVyLAotICAgICAgICAgICAgICAgICAg ICAgcGlwZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICB4bGF0ZSwKLSAgICAgICAgICAgICAg ICAgICAgIGZjcywKLSAgICAgICAgICAgICAgICAgICAgIHJjcwotICAgICAgICAgICAgICAgICAg ICAgKTsKLSAgICB0MSA9IGdtc3RpbWVyKCk7ICAgICAgICAgICAgICAgICAgICAvKiBFbmQgdGlt ZSAqLwotICAgIGRlYnVnKEYxMTEsImZ0cCBnZXRmaWxlIHQxIixyZW1vdGUsdDEpOwotICAgIGRl YnVnKEYxMTEsImZ0cCBnZXRmaWxlIHNlYyIscmVtb3RlLCh0MS10MCkvMTAwMCk7Ci0jaWZkZWYg R0ZUSU1FUgotICAgIHNlYyA9IChDS0ZMT0FUKSgoQ0tGTE9BVCkodDEgLSB0MCkgLyAxMDAwLjAp OyAvKiBTdGF0cyAqLwotICAgIGZweGZzZWNzID0gc2VjOyAgICAgICAgICAgICAgICAgICAgIC8q IChmb3IgZG94bG9nKCkpICovCi0jZWxzZQotICAgIHNlYyA9ICh0MSAtIHQwKSAvIDEwMDA7Ci0g ICAgeGZzZWNzID0gKGludClzZWM7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotCi0jaWZkZWYgRlRQ X1RJTUVPVVQKLSAgICBpZiAoZnRwX3RpbWVkX291dCkKLSAgICAgIHJjID0gLTQ7Ci0jZW5kaWYJ LyogRlRQX1RJTUVPVVQgKi8KLQotICAgIGRlYnVnKEYxMTEsImZ0cCByZWN2cmVxdWVzdCByYyIs cmVtb3RlLHJjKTsKLSAgICBpZiAoY2FuY2VsZmlsZSB8fCBjYW5jZWxncm91cCkgewotICAgICAg ICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IGNhbmNlbGVkIixja2l0b2EoY2FuY2VsZmlsZSksY2FuY2Vs Z3JvdXApOwotICAgICAgICBmdHNjcmVlbihTQ1JfU1QsU1RfSU5ULChDS19PRkZfVCkwLCIiKTsK LSAgICB9IGVsc2UgaWYgKHJjID4gMCkgewotICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IHNr aXBwZWQiLGNraXRvYShjYW5jZWxmaWxlKSxjYW5jZWxncm91cCk7Ci0gICAgICAgIGZ0c2NyZWVu KFNDUl9TVCxTVF9TS0lQLChDS19PRkZfVCkwLGNtYXJnKTsKLSAgICB9IGVsc2UgaWYgKHJjIDwg MCkgewotICAgICAgICBzd2l0Y2ggKGZ0cGNvZGUpIHsKLSAgICAgICAgICBjYXNlIC00OiAgICAg ICAgICAgICAgICAgICAgICAvKiBOZXR3b3JrIGVycm9yICovCi0gICAgICAgICAgY2FzZSAtMjog ICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBlcnJvciAqLwotICAgICAgICAgICAgZnRzY3Jl ZW4oU0NSX1NULFNUX01TRywoQ0tfT0ZGX1QpMCxja19lcnJzdHIoKSk7Ci0gICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICBjYXNlIC0zOgotICAgICAgICAgICAgZnRzY3JlZW4oU0NSX1NULFNU X01TRywoQ0tfT0ZGX1QpMCwKLQkJICAgICAiRmFpbHVyZSB0byBtYWtlIGRhdGEgY29ubmVjdGlv biIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAtMToJCQkvKiAoc2hvdWxk IGJlIGNvdmVyZWQgYWJvdmUpICovCi0gICAgICAgICAgICBmdHNjcmVlbihTQ1JfU1QsU1RfSU5U LChDS19PRkZfVCkwLCIiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6 Ci0gICAgICAgICAgICBmdHNjcmVlbihTQ1JfU1QsU1RfTVNHLChDS19PRkZfVCkwLCZmdHBfcmVw bHlfc3RyWzRdKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFR1ZG8gYmVtICovCi0gICAgICAgIGZ0c2NyZWVuKFNDUl9QVCwnWicsKENLX09G Rl9UKTAsIiIpOwotICAgICAgICBpZiAocmMgPT0gMCkgewotICAgICAgICAgICAgZnRzY3JlZW4o U0NSX1NULFNUX09LLChDS19PRkZfVCkwLCIiKTsgLyogRm9yIHNjcmVlbiAqLwotICAgICAgICAg ICAgbWFrZXN0cigmcnJmc3BlYyxyZW1vdGUpOyAgICAgLyogRm9yIFdIRVJFIGNvbW1hbmQgKi8K LSAgICAgICAgICAgIG1ha2VzdHIoJnJmc3BlYyxmdWxsbmFtZSk7Ci0gICAgICAgIH0KLSAgICB9 Ci0gICAgaWYgKHJjID4gLTEpIHsKLQlpZiAoZnRwX2RhdGVzKQkJCS8qIElmIEZUUCBEQVRFUyBP Ti4uLiAqLwotCSAgaWYgKCFwaXBlbmFtZSAmJiAhb3V0MnNjcmVlbikJLyogYW5kIGl0J3MgYSBy ZWFsIGZpbGUgKi8KLQkgICAgaWYgKHJjIDwgMSAmJiByYyAhPSAtMykJLyogYW5kIGl0IHdhc24n dCBza2lwcGVkICovCi0JICAgICAgaWYgKGNvbm5lY3RlZCkJCS8qIGFuZCB3ZSBzdGlsbCBoYXZl IGEgY29ubmVjdGlvbiAqLwotCQlpZiAoemNoa2kobG9jYWwpID4gLTEpIHsgLyogYW5kIHRoZSBm aWxlIHdhc24ndCBkaXNjYXJkZWQgKi8KLQkJICAgIGNoa21vZHRpbWUobG9jYWwscmVtb3RlLDEp OyAvKiBzZXQgbG9jYWwgZmlsZSBkYXRlICovCi0JCSAgICBkZWJ1ZyhGMTEwLCJmdHAgZ2V0IHNl dCBkYXRlIixsb2NhbCwwKTsKLQkJfQotCWZpbGNudCsrOwkJCS8qIFVzZWQgYnkgXHYoZmlsZW51 bSkgKi8KLSAgICB9Ci0jaWZkZWYgVExPRwotICAgIGlmICh0cmFsb2cpIHsKLSAgICAgICAgaWYg KHJjID4gMCkgewotICAgICAgICAgICAgdGxvZyhGMTAwLCIgcmVjb3Zlcnkgc2tpcHBlZCIsIiIs MCk7Ci0gICAgICAgIH0gZWxzZSBpZiAocmMgPT0gMCkgewotICAgICAgICAgICAgdGxvZyhGMTAx LCIgY29tcGxldGUsIHNpemUiLCAiIiwgZnNpemUpOwotICAgICAgICB9IGVsc2UgaWYgKGNhbmNl bGZpbGUpIHsKLSAgICAgICAgICAgIHRsb2coRjEwMCwiIGNhbmNlbGVkIGJ5IHVzZXIiLCIiLDAp OwotI2lmZGVmIEZUUF9USU1FT1VUCi0gICAgICAgIH0gZWxzZSBpZiAoZnRwX3RpbWVkX291dCkg ewotICAgICAgICAgICAgdGxvZyhGMTAwLCIgdGltZWQgb3V0IiwiIiwwKTsKLSNlbmRpZgkvKiBG VFBfVElNRU9VVCAqLwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGxvZyhGMTEwLCIg ZmFpbGVkOiIsZnRwX3JlcGx5X3N0ciwwKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXRsb2dm bXQpCi0gICAgICAgICAgZG94bG9nKHdoYXQsbG9jYWwsZnNpemUsZnRwX3R5cCxyYywiIik7Ci0g ICAgfQotI2VuZGlmIC8qIFRMT0cgKi8KLSAgICByZXR1cm4ocmMpOwotfQotCi0vKiBwdXRmaWxl KCkgcmV0dXJuczogLTEgb24gZXJyb3IsID4wIGlmIGZpbGUgbm90IHNlbGVjdGVkLCAwIG9uIHN1 Y2Nlc3MuICovCi0vKiBQb3NpdGl2ZSByZXR1cm4gdmFsdWUgaXMgU2tpcCBSZWFzb24sIFNLUF94 eHgsIGZyb20gY2tja2VyLmguICovCi0KLXN0YXRpYyBpbnQKLXB1dGZpbGUoY3gsCi0gICAgbG9j YWwscmVtb3RlLGZvcmNlLG1vdmluZyxtdnRvLHJudG8sc3J2cm4seF9jbnYseF91c24seGZ0LHBy bSxmY3MscmNzLGZsZykKLSAgICBjaGFyICogbG9jYWwsICogcmVtb3RlLCAqIG12dG8sICpybnRv LCAqc3J2cm47Ci0gICAgaW50IGN4LCBmb3JjZSwgbW92aW5nLCB4X2NudiwgeF91c24sIHhmdCwg ZmNzLCByY3MsIGZsZywgcHJtOwotCi0vKiBwdXRmaWxlICovIHsKLQotICAgIGNoYXIgYXNuYW1l W0NLTUFYUEFUSCsxXTsKLSAgICBjaGFyIGZ1bGxuYW1lW0NLTUFYUEFUSCsxXTsKLSAgICBpbnQg ayA9IC0xLCB4ID0gMCwgeSA9IDAsIG8gPSAtMSwgcmMgPSAwLCBuYyA9IDA7Ci0gICAgaW50IHhs YXRlID0gMCwgcmVzdGFydCA9IDAsIG10ID0gLTE7Ci0gICAgY2hhciAqIHMgPSBOVUxMLCAqIGNt ZCA9IE5VTEw7Ci0gICAgVUxPTkcgdDAgPSAwLCB0MSA9IDA7CQkvKiBUaW1lcyBmb3Igc3RhdHMg Ki8KLSAgICBpbnQgb2ZjcyA9IDAsIG9yY3MgPSAwOwotCi0jaWZkZWYgR0ZUSU1FUgotICAgIENL RkxPQVQgc2VjID0gMC4wOwotI2Vsc2UKLSAgICBpbnQgc2VjID0gMDsKLSNlbmRpZiAvKiBHRlRJ TUVSICovCi0gICAgZGVidWcoRjExMSwiZnRwIHB1dGZpbGUgZmxnIixsb2NhbCxmbGcpOwotICAg IGRlYnVnKEYxMTAsImZ0cCBwdXRmaWxlIHNydl9yZW5hbSIsc3J2cm4sMCk7Ci0gICAgZGVidWco RjEwMSwiZnRwIHB1dGZpbGUgZmNzIiwiIixmY3MpOwotICAgIGRlYnVnKEYxMDEsImZ0cCBwdXRm aWxlIHJjcyIsIiIscmNzKTsKLQotICAgIG9mY3MgPSBmY3M7ICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFNhdmUgY2hhcnNldCBhcmdzICovCi0gICAgb3JjcyA9IHJjczsKLQotICAgIHNlbmRz dGFydCA9IChDS19PRkZfVCkwOwotICAgIHJlc3RhcnQgPSBmbGcgJiBQVVRfUkVTOwotICAgIGlm ICghcmVtb3RlKQotICAgICAgcmVtb3RlID0gIiI7Ci0KLSAgICAvKiBGVFAgcHJvdG9jb2wgY29t bWFuZCB0byBzZW5kIHRvIHNlcnZlciAqLwotICAgIGNtZCA9IChjeCA9PSBGVFBfQVBQKSA/ICJB UFBFIiA6ICh4X3VzbiA/ICJTVE9VIiA6ICJTVE9SIik7Ci0KLSAgICBpZiAoeF9jbnYgPT0gU0VU X0FVVE8pIHsgICAgICAgICAgICAvKiBOYW1lIGNvbnZlcnNpb24gaXMgYXV0byAqLwotICAgICAg ICBpZiAoYWxpa2UpIHsgICAgICAgICAgICAgICAgICAgIC8qIElmIHNlcnZlciAmIGNsaWVudCBh cmUgYWxpa2UgKi8KLSAgICAgICAgICAgIG5jID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBu byBjb252ZXJzaW9uICovCi0gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAg LyogSWYgdGhleSBhcmUgZGlmZmVyZW50ICovCi0gICAgICAgICAgICBpZiAoc2VydmVydHlwZSA9 PSBTWVNfVU5JWCB8fCBzZXJ2ZXJ0eXBlID09IFNZU19XSU4zMikKLSAgICAgICAgICAgICAgbmMg PSAtMTsgICAgICAgICAgICAgICAgICAvKiBvbmx5IG1pbmltYWwgY29udmVyc2lvbnMgbmVlZGVk ICovCi0gICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgLyogb3RoZXJ3aXNl ICovCi0gICAgICAgICAgICAgIG5jID0gMTsgICAgICAgICAgICAgICAgICAgLyogZnVsbCBjb252 ZXJzaW9uICovCi0gICAgICAgIH0KLSAgICB9IGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBOb3QgYXV0byAtIGRvIHdoYXQgdXNlciBzYWlkICovCi0gICAgICBuYyA9IHhfY252 OwotCi0gICAgLyogSWYgVHJhbnNmZXIgTW9kZSBpcyBBdXRvbWF0aWMsIGRldGVybWluZSBmaWxl IHR5cGUgKi8KLSAgICBpZiAoZnRwX3hmZXJtb2RlID09IFhNT0RFX0EgJiYgZmlsZXBlZWsgJiYg IXBpcGVzZW5kKSB7Ci0gICAgICAgIGlmIChpc2Rpcihsb2NhbCkpIHsgICAgICAgICAgICAgLyog SWYgaXQncyBhIGRpcmVjdG9yeSAqLwotICAgICAgICAgICAgayA9IEZUX0JJTjsgICAgICAgICAg ICAgICAgIC8qIHNraXAgdGhlIGZpbGUgc2NhbiAqLwotICAgICAgICB9IGVsc2UgewotICAgICAg ICAgICAgZGVidWcoRjExMCwiRlRQIFBVVCBjYWxsaW5nIHNjYW5maWxlIixsb2NhbCwwKTsKLSAg ICAgICAgICAgIGsgPSBzY2FuZmlsZShsb2NhbCwmbyxuc2NhbmZpbGUpOyAvKiBTY2FuIHRoZSBm aWxlICovCi0gICAgICAgIH0KLSAgICAgICAgZGVidWcoRjExMSwiRlRQIFBVVCBzY2FuZmlsZSIs bG9jYWwsayk7Ci0gICAgICAgIGlmIChrID4gLTEgJiYgIWZvcmNldHlwZSkgewotICAgICAgICAg ICAgZnRwX3R5cCA9IChrID09IEZUX0JJTikgPyAxIDogMDsKLSAgICAgICAgICAgIGlmICh4ZnQg PiAtMSAmJiBmdHBfdHlwICE9IHhmdCkgewotICAgICAgICAgICAgICAgIGlmIChmbGcgJiBQVVRf U0lNKQotICAgICAgICAgICAgICAgICAgdGxvZyhGMTEwLCJmdHAgcHV0IFNLSVAgKFR5cGUpOiIs IGxvY2FsLCAwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oU0tQX1RZUCk7Ci0gICAgICAgICAg ICB9Ci0gICAgICAgICAgICBpZiAoZnRwX3R5cCA9PSAxICYmIHRlbmV4KSAgLyogVXNlciBzYWlk IFRFTkVYPyAqLwotICAgICAgICAgICAgICBmdHBfdHlwID0gRlRUX1RFTjsKLSAgICAgICAgfQot ICAgIH0KLSNpZm5kZWYgTk9DU0VUUwotICAgIGZ0cF9jc3ggPSAtMTsgICAgICAgICAgICAgICAg ICAgICAgIC8qIEZvciBmaWxlLXRyYW5zZmVyIGRpc3BsYXkgKi8KLSAgICBmdHBfY3NsID0gLTE7 ICAgICAgICAgICAgICAgICAgICAgICAvKiAuLi4gKi8KLQotICAgIGlmIChyY3MgPiAtMSkgeyAg ICAgICAgICAgICAgICAgICAgIC8qIC0xIG1lYW5zIG5vIHRyYW5zbGF0aW9uICovCi0gICAgICAg IGlmIChmdHBfdHlwID09IDApIHsgICAgICAgICAgICAgLyogRmlsZSB0eXBlIGlzICJhc2NpaSI/ ICovCi0gICAgICAgICAgICBpZiAoZmNzIDwgMCkgeyAgICAgICAgICAgICAgLyogRmlsZSBjaGFy c2V0IG5vdCBmb3JjZWQ/ICovCi0gICAgICAgICAgICAgICAgaWYgKGsgPCAwKSB7ICAgICAgICAg ICAgLyogSWYgd2UgZGlkbid0IHNjYW4gKi8KLSAgICAgICAgICAgICAgICAgICAgZmNzID0gZmNo YXJzZXQ7ICAgICAvKiB1c2UgcHJldmFpbGluZyBGSUxFIENIQVJBQ1RFUi1TRVQgKi8KLSAgICAg ICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAvKiBJZiB3ZSBkaWQgc2NhbiwgdXNl IHNjYW4gcmVzdWx0ICovCi0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoaykgewotICAgICAg ICAgICAgICAgICAgICAgIGNhc2UgRlRfVEVYVDogICAgIC8qIFVua25vd24gdGV4dCAqLwotICAg ICAgICAgICAgICAgICAgICAgICAgZmNzID0gZmNoYXJzZXQ7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZUXzdCSVQ6ICAgICAvKiA3 LWJpdCB0ZXh0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBmY3MgPSBkY3NldDc7Ci0gICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZU XzhCSVQ6ICAgICAvKiA4LWJpdCB0ZXh0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBmY3Mg PSBkY3NldDg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg ICAgICAgICBjYXNlIEZUX1VURjg6ICAgICAvKiBVVEYtOCAqLwotICAgICAgICAgICAgICAgICAg ICAgICAgZmNzID0gRkNfVVRGODsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgICAgICAgICAgIGNhc2UgRlRfVUNTMjogICAgIC8qIFVDUy0yICovCi0gICAgICAg ICAgICAgICAgICAgICAgICBmY3MgPSBGQ19VQ1MyOwotICAgICAgICAgICAgICAgICAgICAgICAg aWYgKG8gPiAtMSkgICAgIC8qIElucHV0IGZpbGUgYnl0ZSBvcmRlciAqLwotICAgICAgICAgICAg ICAgICAgICAgICAgICBmaWxlb3JkZXIgPSBvOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAg ICAgIHJjcyA9IC0xOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChmY3MgPiAtMSAmJiByY3Mg PiAtMSkgeyAgICAgICAgIC8qIFNldCB1cCB0cmFuc2xhdGlvbiBmdW5jdGlvbnMgKi8KLSAgICAg ICAgZGVidWcoRjExMCwiZnRwIHB1dGZpbGUiLCJpbml0eGxhdGUiLDApOwotICAgICAgICBpbml0 eGxhdGUoZmNzLHJjcyk7Ci0gICAgICAgIGRlYnVnKEYxMTEsImZ0cCBwdXRmaWxlIHJjcyIsZmNz aW5mb1tyY3NdLmtleXdvcmQscmNzKTsKLSAgICAgICAgeGxhdGUgPSAxOwotICAgICAgICBmdHBf Y3N4ID0gcmNzOwotICAgICAgICBmdHBfY3NsID0gZmNzOwotICAgIH0KLSNlbmRpZiAvKiBOT0NT RVRTICovCi0KLSAgICBiaW5hcnkgPSBmdHBfdHlwOyAgICAgICAgICAgICAgICAgICAvKiBGb3Ig ZmlsZS10cmFuc2ZlciBkaXNwbGF5ICovCi0gICAgYXNuYW1lWzBdID0gTlVMOwotCi0gICAgaWYg KHJlY3Vyc2l2ZSkgeyAgICAgICAgICAgICAgICAgICAgLyogSWYgc2VuZGluZyByZWN1cnNpdmVs eSwgKi8KLSAgICAgICAgaWYgKCFzeW5jZGlyKGxvY2FsLGZsZyAmIFBVVF9TSU0pKSAvKiBzeW5j aHJvbml6ZSBkaXJlY3Rvcmllcy4gKi8KLSAgICAgICAgICByZXR1cm4oLTEpOyAgICAgICAgICAg ICAgICAgICAvKiBEb24ndCBQVVQgaWYgaXQgZmFpbHMuICovCi0gICAgICAgIGVsc2UgaWYgKGlz ZGlyKGxvY2FsKSkgICAgICAgICAgLyogSXQncyBhIGRpcmVjdG9yeSAqLwotICAgICAgICAgIHJl dHVybigwKTsgICAgICAgICAgICAgICAgICAgIC8qIERvbid0IHNlbmQgaXQhICovCi0gICAgfQot ICAgIGlmICgqcmVtb3RlKSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIElmIGFuIGFzLW5hbWUg dGVtcGxhdGUgd2FzIGdpdmVuICovCi0jaWZuZGVmIE5PU1BMCi0gICAgICAgIGlmIChjbWRfcXVv dGluZykgeyAgICAgICAgICAgICAgLyogYW5kIENPTU1BTkQgUVVPVElORyBpcyBPTiAqLwotICAg ICAgICAgICAgeSA9IENLTUFYUEFUSDsgICAgICAgICAgICAgIC8qIGV2YWx1YXRlIGl0IGZvciB0 aGlzIGZpbGUgKi8KLSAgICAgICAgICAgIHMgPSBhc25hbWU7Ci0gICAgICAgICAgICB6enN0cmlu ZyhyZW1vdGUsJnMsJnkpOwotICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBOT1NQTCAqLwotICAg ICAgICAgIGNrc3RybmNweShhc25hbWUscmVtb3RlLENLTUFYUEFUSCk7ICAgLyogKG9yIHRha2Ug aXQgbGl0ZXJhbGx5KSAqLwotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogTm8gYXMtbmFtZSAqLwotICAgICAgICBuemx0b3IobG9jYWwsYXNuYW1lLG5j LDAsQ0tNQVhQQVRIKTsgICAgLyogdXNlIGxvY2FsIG5hbWUgc3RyaXAgcGF0aCAqLwotICAgICAg ICBkZWJ1ZyhGMTEwLCJGVFAgUFVUIG56bHRvciIsYXNuYW1lLDApOwotICAgIH0KLSAgICAvKiBQ cmVsaW1pbmFyeSBtZXNzYWdlcyBhbmQgbG9nIGVudHJpZXMgKi8KLQotICAgIGZ1bGxuYW1lWzBd ID0gTlVMOwotICAgIHpmbnFmcChsb2NhbCxDS01BWFBBVEgsZnVsbG5hbWUpOwotICAgIGlmICgh ZnVsbG5hbWVbMF0pIGNrc3RybmNweShmdWxsbmFtZSxsb2NhbCxDS01BWFBBVEgrMSk7Ci0gICAg ZnVsbG5hbWVbQ0tNQVhQQVRIXSA9IE5VTDsKLQotICAgIGlmIChkaXNwbGEgJiYgZmRpc3BsYSkg eyAgICAgICAgICAgIC8qIFNjcmVlbiAqLwotICAgICAgICBmdHNjcmVlbihTQ1JfRk4sJ0YnLChD S19PRkZfVClwa3RudW0sbG9jYWwpOwotICAgICAgICBmdHNjcmVlbihTQ1JfQU4sMCwoQ0tfT0ZG X1QpMCxhc25hbWUpOwotICAgICAgICBmdHNjcmVlbihTQ1JfRlMsMCxmc2l6ZSwiIik7Ci0gICAg fQotI2lmZGVmIERPVVBEQVRFCi0gICAgaWYgKGZsZyAmIChQVVRfVVBEfFBVVF9ESUYpKSB7CS8q IERhdGUtY2hlY2tpbmcgbW9kZXMuLi4gKi8KLSAgICAgICAgbXQgPSBjaGttb2R0aW1lKGZ1bGxu YW1lLGFzbmFtZSwwKTsKLSAgICAgICAgZGVidWcoRjExMSwiZnRwIHB1dGZpbGUgY2hrbW9kdGlt ZSIsYXNuYW1lLG10KTsKLSAgICAgICAgaWYgKG10ID09IDAgJiYgKChmbGcgJiBQVVRfRElGKSA9 PSAwKSkgeyAvKiBMb2NhbCBpcyBvbGRlciAqLwotICAgICAgICAgICAgdGxvZyhGMTEwLCJmdHAg cHV0IC91cGRhdGUgU0tJUCAoT2xkZXIgbW9kdGltZSk6ICIsZnVsbG5hbWUsMCk7Ci0JICAgIC8q IFNraXAgdGhpcyBvbmUgKi8KLSAgICAgICAgICAgIGZ0c2NyZWVuKFNDUl9TVCxTVF9TS0lQLChD S19PRkZfVClTS1BfREFULGZ1bGxuYW1lKTsKLSAgICAgICAgICAgIGZpbGNudCsrOwotICAgICAg ICAgICAgcmV0dXJuKFNLUF9EQVQpOwotICAgICAgICB9IGVsc2UgaWYgKG10ID09IDEpIHsgICAg ICAgICAgIC8qIFRpbWVzIGFyZSBlcXVhbCAqLwotICAgICAgICAgICAgdGxvZyhGMTEwLCJmdHAg cHV0IC91cGRhdGUgU0tJUCAoRXF1YWwgbW9kdGltZSk6ICIsZnVsbG5hbWUsMCk7Ci0gICAgICAg ICAgICBmdHNjcmVlbihTQ1JfU1QsU1RfU0tJUCwoQ0tfT0ZGX1QpU0tQX0VRVSxmdWxsbmFtZSk7 IC8qIFNraXAgaXQgKi8KLSAgICAgICAgICAgIGZpbGNudCsrOwotICAgICAgICAgICAgcmV0dXJu KFNLUF9EQVQpOwotICAgICAgICB9Ci0JLyogTG9jYWwgZmlsZSBpcyBuZXdlciAqLwotICAgICAg ICB0bG9nKEYxMTAsZnRwX3R5cCA/ICJmdHAgcHV0IC91cGRhdGUgQklOQVJZOiIgOgotICAgICAg ICAgICAgICJmdHAgcHV0IC91cGRhdGUgVEVYVDoiLCBmdWxsbmFtZSwgMCk7Ci0gICAgfSBlbHNl IGlmIChmbGcgJiBQVVRfUkVTKSB7Ci0gICAgICAgIHRsb2coRjExMCxmdHBfdHlwID8gImZ0cCBw dXQgL3JlY292ZXIgQklOQVJZOiIgOgotICAgICAgICAgICAgICJmdHAgcHV0IC9yZWNvdmVyIFRF WFQ6IiwgZnVsbG5hbWUsIDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHRsb2coRjExMCxmdHBf dHlwID8gImZ0cCBwdXQgQklOQVJZOiIgOiAiZnRwIHB1dCBURVhUOiIsIGZ1bGxuYW1lLCAwKTsK LSAgICB9Ci0jZWxzZQotICAgIHRsb2coRjExMCxmdHBfdHlwID8gImZ0cCBwdXQgQklOQVJZOiIg OiAiZnRwIHB1dCBURVhUOiIsIGZ1bGxuYW1lLCAwKTsKLSNlbmRpZiAvKiBET1VQREFURSAqLwot ICAgIHRsb2coRjExMCwiIGFzIixhc25hbWUsMCk7Ci0KLSNpZm5kZWYgTk9DU0VUUwotICAgIGlm ICh4bGF0ZSkgewotICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgcHV0ZmlsZSBmY3MiLGZjc2luZm9b ZmNzXS5rZXl3b3JkLGZjcyk7Ci0gICAgICAgIHRsb2coRjExMCwiIGZpbGUgY2hhcmFjdGVyIHNl dDoiLGZjc2luZm9bZmNzXS5rZXl3b3JkLDApOwotICAgICAgICB0bG9nKEYxMTAsIiBzZXJ2ZXIg Y2hhcmFjdGVyIHNldDoiLGZjc2luZm9bcmNzXS5rZXl3b3JkLDApOwotICAgIH0gZWxzZSBpZiAo IWZ0cF90eXApIHsKLSAgICAgICAgdGxvZyhGMTEwLCIgY2hhcmFjdGVyIHNldHM6Iiwibm8gY29u dmVyc2lvbiIsMCk7Ci0gICAgICAgIGZjcyA9IG9mY3M7ICAgICAgICAgICAgICAgICAgICAgLyog QmluYXJ5IGZpbGUgYnV0IHdlIHN0aWxsIG11c3QgKi8KLSAgICAgICAgcmNzID0gb3JjczsgICAg ICAgICAgICAgICAgICAgICAvKiB0cmFuc2xhdGUgaXRzIG5hbWUgKi8KLSAgICB9Ci0jZW5kaWYg LyogTk9DU0VUUyAqLwotCi0gICAgLyogUFVUIFRIRSBGSUxFICovCi0KLSAgICB0MCA9IGdtc3Rp bWVyKCk7ICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCB0aW1lICovCi0gICAgaWYgKGZsZyAm IFBVVF9TSU0pIHsgICAgICAgICAgICAgICAgLyogcmMgPiAwIGlzIGEgc2tpcCByZWFzb24gY29k ZSAqLwotICAgICAgICBpZiAoZmxnICYgKFBVVF9VUER8UFVUX0RJRikpIHsJLyogKHNlZSBTS1Bf eHh4IGluIGNrY2tlci5oKSAqLwotICAgICAgICAgICAgcmMgPSAobXQgPCAwKSA/ICAgICAgICAg ICAgIC8qIFVwZGF0ZSBtb2RlLi4uICovCi0gICAgICAgICAgICAgIFNLUF9YTlggOiAgICAgICAg ICAgICAgICAgLyogUmVtb3RlIGZpbGUgZG9lc24ndCBleGlzdCAqLwotICAgICAgICAgICAgICAg IFNLUF9YVVA7ICAgICAgICAgICAgICAgIC8qIFJlbW90ZSBmaWxlIGlzIG9sZGVyICovCi0gICAg ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByYyA9IFNLUF9TSU07ICAgICAgICAgICAgICAgLyog IldvdWxkIGJlIHNlbnQiLCBwZXJpb2QuICovCi0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAg ICAgICByYyA9IHNlbmRyZXF1ZXN0KGNtZCxsb2NhbCxhc25hbWUseGxhdGUsZmNzLHJjcyxyZXN0 YXJ0KTsKLSAgICB9Ci0gICAgdDEgPSBnbXN0aW1lcigpOyAgICAgICAgICAgICAgICAgICAgLyog RW5kIHRpbWUgKi8KLSAgICBmaWxjbnQrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBG aWxlIG51bWJlciAqLwotCi0jaWZkZWYgR0ZUSU1FUgotICAgIHNlYyA9IChDS0ZMT0FUKSgoQ0tG TE9BVCkodDEgLSB0MCkgLyAxMDAwLjApOyAvKiBTdGF0cyAqLwotICAgIGZweGZzZWNzID0gc2Vj OyAgICAgICAgICAgICAgICAgICAgIC8qIChmb3IgZG94bG9nKCkpICovCi0jZWxzZQotICAgIHNl YyA9ICh0MSAtIHQwKSAvIDEwMDA7Ci0gICAgeGZzZWNzID0gKGludClzZWM7Ci0jZW5kaWYgLyog R0ZUSU1FUiAqLwotCi0gICAgZGVidWcoRjExMSwiZnRwIHNlbmRyZXF1ZXN0IHJjIixsb2NhbCxy Yyk7Ci0KLSAgICBpZiAoY2FuY2VsZmlsZSB8fCBjYW5jZWxncm91cCkgewotICAgICAgICBkZWJ1 ZyhGMTExLCJmdHAgcHV0IGNhbmNlbGVkIixja2l0b2EoY2FuY2VsZmlsZSksY2FuY2VsZ3JvdXAp OwotICAgICAgICBmdHNjcmVlbihTQ1JfU1QsU1RfSU5ULChDS19PRkZfVCkwLCIiKTsKLSAgICB9 IGVsc2UgaWYgKHJjID4gMCkgewotICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgcHV0IHNraXBwZWQi LGxvY2FsLHJjKTsKLSAgICAgICAgZnRzY3JlZW4oU0NSX1NULFNUX1NLSVAsKENLX09GRl9UKXJj LGZ1bGxuYW1lKTsKLSAgICB9IGVsc2UgaWYgKHJjIDwgMCkgewotICAgICAgICBkZWJ1ZyhGMTEx LCJmdHAgcHV0IGVycm9yIixsb2NhbCxmdHBjb2RlKTsKLSAgICAgICAgZnRzY3JlZW4oU0NSX1NU LFNUX01TRywoQ0tfT0ZGX1QpMCwmZnRwX3JlcGx5X3N0cls0XSk7Ci0gICAgfSBlbHNlIHsKLSAg ICAgICAgZGVidWcoRjExMSwiZnRwIHB1dCBub3QgY2FuY2VsZWQiLGNraXRvYShkaXNwbGEpLGZk aXNwbGEpOwotICAgICAgICBmdHNjcmVlbihTQ1JfUFQsJ1onLChDS19PRkZfVCkwLCIiKTsKLSAg ICAgICAgZGVidWcoRjExMSwiZnRwIHB1dCBTVF9PSyIsbG9jYWwscmMpOwotICAgICAgICBmdHNj cmVlbihTQ1JfU1QsU1RfT0ssKENLX09GRl9UKTAsIiIpOwotICAgICAgICBkZWJ1ZyhGMTEwLCJm dHAgcHV0IG9sZCBzZnNwZWMiLHNmc3BlYywwKTsKLSAgICAgICAgbWFrZXN0cigmc2ZzcGVjLGZ1 bGxuYW1lKTsgICAgICAvKiBGb3IgV0hFUkUgY29tbWFuZCAqLwotICAgICAgICBkZWJ1ZyhGMTEw LCJmdHAgcHV0IG5ldyBzZnNwZWMiLHNmc3BlYywwKTsKLSAgICAgICAgZGVidWcoRjExMCwiZnRw IHB1dCBvbGQgc3Jmc3BlYyIsc3Jmc3BlYywwKTsKLSAgICAgICAgbWFrZXN0cigmc3Jmc3BlYyxh c25hbWUpOwotICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgcHV0IG5ldyBzcmZzcGVjIixzcmZzcGVj LDApOwotICAgIH0KLQotICAgIC8qIEZpbmFsIGxvZyBlbnRyaWVzICovCi0KLSNpZmRlZiBUTE9H Ci0gICAgaWYgKHRyYWxvZykgewotICAgICAgICBpZiAocmMgPiAwKSB7Ci0gICAgICAgICAgICBp ZiAocmMgPT0gU0tQX1hOWCkKLSAgICAgICAgICAgICAgdGxvZyhGMTAwLCIgL3NpbXVsYXRlOiBX T1VMRCBCRSBTRU5UOiIsIm5vIHJlbW90ZSBmaWxlIiwwKTsKLSAgICAgICAgICAgIGVsc2UgaWYg KHJjID09IFNLUF9YVVApCi0gICAgICAgICAgICAgIHRsb2coRjEwMCwiIC9zaW11bGF0ZTogV09V TEQgQkUgU0VOVDoiLCJyZW1vdGUgZmlsZSBvbGRlciIsMCk7Ci0gICAgICAgICAgICBlbHNlIGlm IChyYyA9PSBTS1BfU0lNKQotICAgICAgICAgICAgICB0bG9nKEYxMDAsIiAvc2ltdWxhdGU6IFdP VUxEIEJFIFNFTlQiLCIiLDApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB0bG9n KEYxMTAsIiBza2lwcGVkOiIsZ3NrcmVhc29uKHJjKSwwKTsKLSAgICAgICAgfSBlbHNlIGlmIChy YyA9PSAwKSB7Ci0gICAgICAgICAgICB0bG9nKEYxMDEsIiBjb21wbGV0ZSwgc2l6ZSIsICIiLCBm c2l6ZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2FuY2VsZmlsZSkgewotICAgICAgICAgICAgdGxv ZyhGMTAwLCIgY2FuY2VsZWQgYnkgdXNlciIsIiIsMCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg ICAgICAgICB0bG9nKEYxMTAsIiBmYWlsZWQ6IixmdHBfcmVwbHlfc3RyLDApOwotICAgICAgICB9 Ci0gICAgICAgIGlmICghdGxvZ2ZtdCkKLSAgICAgICAgICBkb3hsb2cod2hhdCxsb2NhbCxmc2l6 ZSxmdHBfdHlwLHJjLCIiKTsKLSAgICB9Ci0jZW5kaWYgLyogVExPRyAqLwotCi0gICAgaWYgKHJj IDwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgLyogUFVUIGRpZCBub3Qgc3VjY2VlZCAqLwot ICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIHNvIGRvbmUuICovCi0K LSAgICBpZiAoZmxnICYgUFVUX1NJTSkgICAgICAgICAgICAgICAgICAvKiBTaW11bGF0aW5nLCBz a2lwIHRoZSByZXN0LiAqLwotICAgICAgcmV0dXJuKFNLUF9TSU0pOwotCi0jaWZkZWYgVU5JWAot ICAgIC8qIFNldCBwZXJtaXNzaW9ucyB0b28/ICovCi0KLSAgICBpZiAocHJtKSB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBDaGFuZ2UgcGVybWlzc2lvbnM/ICovCi0gICAgICAgIHMgPSB6 Z3Blcm0obG9jYWwpOyAgICAgICAgICAgICAgLyogR2V0IHBlcm1zIG9mIGxvY2FsIGZpbGUgKi8K LSAgICAgICAgaWYgKCFzKSBzID0gIiI7Ci0gICAgICAgIHggPSBzdHJsZW4ocyk7Ci0gICAgICAg IGlmICh4ID4gMykgcyArPSAoeCAtIDMpOwotICAgICAgICBpZiAocmRpZ2l0cyhzKSkgewotICAg ICAgICAgICAgY2ttYWttc2coZnRwY21kYnVmLEZUUF9CVUZTSVoscywiICIsYXNuYW1lLE5VTEwp OwotICAgICAgICAgICAgeCA9Ci0gICAgICAgICAgICAgIGZ0cGNtZCgiU0lURSBDSE1PRCIsZnRw Y21kYnVmLGZjcyxyY3MsZnRwX3ZibSkgPT0gUkVQTFlfQ09NUExFVEU7Ci0gICAgICAgICAgICB0 bG9nKEYxMTAsIHggPyAiIGNobW9kIiA6ICIgY2htb2QgZmFpbGVkIiwKLSAgICAgICAgICAgICAg ICAgcywKLSAgICAgICAgICAgICAgICAgMAotICAgICAgICAgICAgICAgICApOwotICAgICAgICAg ICAgaWYgKCF4KQotICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0gICAgfQot I2VuZGlmIC8qIFVOSVggKi8KLQotICAgIC8qIERpc3Bvc2l0aW9uIG9mIHNvdXJjZSBmaWxlICov Ci0KLSAgICBpZiAobW92aW5nKSB7Ci0gICAgICAgIHggPSB6ZGVsZXQobG9jYWwpOwotICAgICAg ICB0bG9nKEYxMTAsICh4ID4gLTEpID8KLSAgICAgICAgICAgICAiIGRlbGV0ZWQiIDogIiBmYWls ZWQgdG8gZGVsZXRlIiwKLSAgICAgICAgICAgICBsb2NhbCwKLSAgICAgICAgICAgICAwCi0gICAg ICAgICAgICAgKTsKLSAgICAgICAgaWYgKHggPCAwKQotICAgICAgICAgIHJldHVybigtMSk7Ci0g ICAgfSBlbHNlIGlmIChtdnRvKSB7Ci0gICAgICAgIHggPSB6cmVuYW1lKGxvY2FsLG12dG8pOwot ICAgICAgICB0bG9nKEYxMTAsICh4ID4gLTEpID8KLSAgICAgICAgICAgICAiIG1vdmVkIHNvdXJj ZSB0byIgOiAiIGZhaWxlZCB0byBtb3ZlIHNvdXJjZSB0byIsCi0gICAgICAgICAgICAgbXZ0bywK LSAgICAgICAgICAgICAwCi0gICAgICAgICAgICAgKTsKLSAgICAgICAgaWYgKHggPCAwKQotICAg ICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIC8qIGZ0c2NyZWVuKFNDUl9TVCxTVF9NU0csKENL X09GRl9UKTAsbXZ0byk7ICovCi0KLSAgICB9IGVsc2UgaWYgKHJudG8pIHsKLSAgICAgICAgY2hh ciAqIHMgPSBybnRvOwotI2lmbmRlZiBOT1NQTAotICAgICAgICBpbnQgeTsgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFBhc3MgaXQgdGhydSB0aGUgZXZhbHVhdG9yICovCi0gICAgICAgIGV4 dGVybiBpbnQgY21kX3F1b3Rpbmc7ICAgICAgICAgLyogZm9yIFx2KGZpbGVuYW1lKSAqLwotICAg ICAgICBpZiAoY21kX3F1b3RpbmcpIHsgICAgICAgICAgICAgIC8qIEJ1dCBvbmx5IGlmIGNtZF9x dW90aW5nIGlzIG9uICovCi0gICAgICAgICAgICB5ID0gQ0tNQVhQQVRIOwotICAgICAgICAgICAg cyA9IChjaGFyICopYXNuYW1lOwotICAgICAgICAgICAgenpzdHJpbmcocm50bywmcywmeSk7Ci0g ICAgICAgICAgICBzID0gKGNoYXIgKilhc25hbWU7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT1NQ TCAqLwotICAgICAgICBpZiAocykgaWYgKCpzKSB7Ci0gICAgICAgICAgICBpbnQgeDsKLSAgICAg ICAgICAgIHggPSB6cmVuYW1lKGxvY2FsLHMpOwotICAgICAgICAgICAgdGxvZyhGMTEwLCAoeCA+ IC0xKSA/Ci0gICAgICAgICAgICAgICAgICIgcmVuYW1lZCBzb3VyY2UgZmlsZSB0byIgOgotICAg ICAgICAgICAgICAgICAiIGZhaWxlZCB0byByZW5hbWUgc291cmNlIGZpbGUgdG8iLAotICAgICAg ICAgICAgICAgICBzLAotICAgICAgICAgICAgICAgICAwCi0gICAgICAgICAgICAgICAgICk7Ci0g ICAgICAgICAgICBpZiAoeCA8IDApCi0gICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAg ICAgICAvKiBmdHNjcmVlbihTQ1JfU1QsU1RfTVNHLChDS19PRkZfVCkwLHMpOyAqLwotICAgICAg ICB9Ci0gICAgfQotCi0gICAgLyogRGlzcG9zaXRpb24gb2YgZGVzdGluYXRpb24gZmlsZSAqLwot Ci0gICAgaWYgKHNydnJuKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogL1NFUlZFUi1SRU5B TUU6ICovCi0gICAgICAgIGNoYXIgKiBzID0gc3J2cm47Ci0jaWZuZGVmIE5PU1BMCi0gICAgICAg IGludCB5OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFzcyBpdCB0aHJ1IHRoZSBldmFs dWF0b3IgKi8KLSAgICAgICAgZXh0ZXJuIGludCBjbWRfcXVvdGluZzsgLyogZm9yIFx2KGZpbGVu YW1lKSAqLwotICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgcHV0ZmlsZSBzcnZybiIscywxKTsKLQot ICAgICAgICBpZiAoY21kX3F1b3RpbmcpIHsgICAgICAgICAgICAgIC8qIEJ1dCBvbmx5IGlmIGNt ZF9xdW90aW5nIGlzIG9uICovCi0gICAgICAgICAgICB5ID0gQ0tNQVhQQVRIOwotICAgICAgICAg ICAgcyA9IChjaGFyICopZnVsbG5hbWU7ICAgICAgIC8qIFdlIGNhbiByZWN5Y2xlIHRoaXMgYnVm ZmVyIG5vdyAqLwotICAgICAgICAgICAgenpzdHJpbmcoc3J2cm4sJnMsJnkpOwotICAgICAgICAg ICAgcyA9IChjaGFyICopZnVsbG5hbWU7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwot ICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgcHV0ZmlsZSBzcnZybiIscywyKTsKLSAgICAgICAgaWYg KHMpIGlmICgqcykgewotICAgICAgICAgICAgaW50IHg7Ci0gICAgICAgICAgICB4ID0gZnRwX3Jl bmFtZShhc25hbWUscyk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgcHV0ZmlsZSBmdHBf cmVuYW1lIixhc25hbWUseCk7Ci0gICAgICAgICAgICB0bG9nKEYxMTAsICh4ID4gMCkgPwotICAg ICAgICAgICAgICAgICAiIHJlbmFtZWQgZGVzdGluYXRpb24gZmlsZSB0byIgOgotICAgICAgICAg ICAgICAgICAiIGZhaWxlZCB0byByZW5hbWUgZGVzdGluYXRpb24gZmlsZSB0byIsCi0gICAgICAg ICAgICAgICAgIHMsCi0gICAgICAgICAgICAgICAgIDAKLSAgICAgICAgICAgICAgICAgKTsKLSAg ICAgICAgICAgIGlmICh4IDwgMSkKLSAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAg fQotICAgIH0KLSAgICByZXR1cm4oMCk7Ci19Ci0KLS8qIHh4b3V0IG11c3Qgb25seSBiZSB1c2Vk IGZvciBBU0NJSSB0cmFuc2ZlcnMgKi8KLXN0YXRpYyBpbnQKLSNpZmRlZiBDS19BTlNJQwoteHhv dXQoY2hhciBjKQotI2Vsc2UKLXh4b3V0KGMpIGNoYXIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAq LwotewotI2lmbmRlZiBPUzIKLSNpZm5kZWYgVk1TCi0jaWZuZGVmIE1BQwotI2lmbmRlZiBPU0sK LSAgICAvKiBGb3IgVW5peCwgREcsIFN0cmF0dXMsIEFtaWdhLCBHZW1kb3MsIG90aGVyICovCi0g ICAgaWYgKGMgPT0gJ1wwMTInKSB7Ci0JaWYgKHp6b3V0KGRvdXQsKENIQVIpJ1wwMTUnKSA8IDAp Ci0JICByZXR1cm4oLTEpOwotCWZ0cHNuZC5ieXRlcysrOwotICAgIH0KLSNlbHNlIC8qIE9TSyAq LwotICAgIGlmIChjID09ICdcMDE1JykgewotCWMgPSAnXDAxMic7Ci0JaWYgKHp6b3V0KGRvdXQs KENIQVIpJ1wwMTUnKSA8IDApCi0JICByZXR1cm4oLTEpOwotCWZ0cHNuZC5ieXRlcysrOwotICAg IH0KLSNlbmRpZiAvKiBPU0sgKi8KLSNlbHNlIC8qIE1BQyAqLwotICAgIGlmIChjID09ICdcMDE1 JykgewotCWMgPSAnXDAxMic7Ci0JaWYgKHp6b3V0KGRvdXQsKENIQVIpJ1wwMTUnKSA8IDApCi0J ICByZXR1cm4oLTEpOwotCWZ0cHNuZC5ieXRlcysrOwotICAgIH0KLSNlbmRpZiAvKiBNQUMgKi8K LSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICBpZiAoenpvdXQoZG91dCwo Q0hBUiljKSA8IDApCi0gICAgICByZXR1cm4oLTEpOwotICAgIGZ0cHNuZC5ieXRlcysrOwotICAg IHJldHVybigwKTsKLX0KLQotc3RhdGljIGludAotI2lmZGVmIENLX0FOU0lDCi1zY3Jub3V0KGNo YXIgYykKLSNlbHNlCi1zY3Jub3V0KGMpIGNoYXIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot ewotICAgIHJldHVybihwdXRjaGFyKGMpKTsKLX0KLQotc3RhdGljIGludAotI2lmZGVmIENLX0FO U0lDCi1waXBlb3V0KGNoYXIgYykKLSNlbHNlCi1waXBlb3V0KGMpIGNoYXIgYzsKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwotewotICAgIHJldHVybih6bWNob3V0KGMpKTsKLX0KLQotc3RhdGljIGlu dAotaXNwYXRoc2VwKGMpIGludCBjOyB7Ci0gICAgc3dpdGNoIChzZXJ2ZXJ0eXBlKSB7Ci0gICAg ICBjYXNlIFNZU19WTVM6Ci0gICAgICBjYXNlIFNZU19UT1BTMTA6Ci0gICAgICBjYXNlIFNZU19U T1BTMjA6Ci0gICAgICAgIHJldHVybigoKGMgPT0gJ10nKSB8fCAoYyA9PSAnPicpIHx8IChjID09 ICc6JykpID8gMSA6IDApOwotICAgICAgY2FzZSBTWVNfT1MyOgotICAgICAgY2FzZSBTWVNfV0lO MzI6Ci0gICAgICBjYXNlIFNZU19ET1M6Ci0gICAgICAgIHJldHVybigoKGMgPT0gJ1xcJykgfHwg KGMgPT0gJy8nKSB8fCAoYyA9PSAnOicpKSA/IDEgOiAwKTsKLSAgICAgIGNhc2UgU1lTX1ZPUzoK LSAgICAgICAgcmV0dXJuKChjID09ICc+JykgPyAxIDogMCk7Ci0gICAgICBkZWZhdWx0OgotICAg ICAgICByZXR1cm4oKGMgPT0gJy8nKSA/IDEgOiAwKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbnQK LWlzY2FuY2VsZWQoKSB7Ci0jaWZkZWYgQ0tfQ1VSU0VTCi0gICAgZXh0ZXJuIGludCBja19yZXBh aW50KCk7Ci0jZW5kaWYgLyogQ0tfQ1VSU0VTICovCi0gICAgaW50IHgsIHJjID0gMDsKLSAgICBj aGFyIGMgPSAwOwotICAgIGlmIChjYW5jZWxmaWxlKQotICAgICAgcmV0dXJuKDEpOwotICAgIHgg PSBjb25jaGsoKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIEFueSBjaGFycyB3YWl0aW5nIGF0 IGNvbnNvbGU/ICovCi0gICAgaWYgKHgtLSA+IDApIHsgICAgICAgICAgICAgICAgICAgICAgLyog WWVzLi4uICAqLwotICAgICAgICBjID0gY29uaW5jKDUpOyAgICAgICAgICAgICAgICAgIC8qIEdl dCBvbmUgKi8KLSAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgY2FzZSAwMzI6ICAgICAg ICAgICAgICAgICAgICAgLyogQ3RybC1YIG9yIFggKi8KLSAgICAgICAgICBjYXNlICd6JzoKLSAg ICAgICAgICBjYXNlICdaJzogY2FuY2VsZ3JvdXArKzsgICAgICAvKiBmYWxsIHRocnUgb24gcHVy cG9zZSAqLwotICAgICAgICAgIGNhc2UgMDMwOiAgICAgICAgICAgICAgICAgICAgIC8qIEN0cmwt WiBvciBaICovCi0gICAgICAgICAgY2FzZSAneCc6Ci0gICAgICAgICAgY2FzZSAnWCc6IGNhbmNl bGZpbGUrKzsgcmMrKzsgYnJlYWs7Ci0jaWZkZWYgQ0tfQ1VSU0VTCi0gICAgICAgICAgY2FzZSAn TCc6Ci0gICAgICAgICAgY2FzZSAnbCc6Ci0gICAgICAgICAgY2FzZSAwMTQ6ICAgICAgICAgICAg ICAgICAgICAgLyogQ3RybC1MIG9yIEwgb3IgQ3RybC1XICovCi0gICAgICAgICAgY2FzZSAwMjc6 Ci0gICAgICAgICAgICBja19yZXBhaW50KCk7ICAgICAgICAgICAgICAgLyogUmVmcmVzaCBzY3Jl ZW4gKi8KLSNlbmRpZiAvKiBDS19DVVJTRVMgKi8KLSAgICAgICAgfQotICAgIH0KLSAgICB3aGls ZSAoeC0tID4gMCkgICAgICAgICAgICAgICAgICAgICAvKiBTb2FrIHVwIGFueSByZXN0ICovCi0g ICAgICBjID0gY29uaW5jKDEpOwotICAgIHJldHVybihyYyk7Ci19Ci0KLSNpZmRlZiBGVFBfVElN RU9VVAotLyogZmMgPSAwIGZvciByZWFkOyAxIGZvciB3cml0ZSAqLwotc3RhdGljIGludAotY2hl Y2tfZGF0YV9jb25uZWN0aW9uKGZkLGZjKSBpbnQgZmQsIGZjOyB7Ci0gICAgaW50IHg7Ci0gICAg c3RydWN0IHRpbWV2YWwgdHY7Ci0gICAgZmRfc2V0IGluLCBvdXQsIGVycjsKLQotICAgIGlmIChm dHBfdGltZW91dCA8IDFMKQotICAgICAgcmV0dXJuKDApOwotCi0gICAgRkRfWkVSTygmaW4pOwot ICAgIEZEX1pFUk8oJm91dCk7Ci0gICAgRkRfWkVSTygmZXJyKTsKLSAgICBGRF9TRVQoZmQsZmMg PyAmb3V0IDogJmluKTsKLSAgICB0di50dl9zZWMgPSBmdHBfdGltZW91dDsJCS8qIFRpbWUgbGlt aXQgKi8KLSAgICB0di50dl91c2VjID0gMEw7Ci0KLSNpZmRlZiBJTlRTRUxFQ1QKLSAgICB4ID0g c2VsZWN0KEZEX1NFVFNJWkUsKGludCAqKSZpbiwoaW50ICopJm91dCwoaW50ICopJmVyciwmdHYp OwotI2Vsc2UKLSAgICB4ID0gc2VsZWN0KEZEX1NFVFNJWkUsJmluLCZvdXQsJmVyciwmdHYpOwot I2VuZGlmIC8qIElOVFNFTEVDVCAqLwotCi0gICAgaWYgKHggPT0gMCkgewotI2lmZGVmIEVXT1VM REJMT0NLCi0JZXJybm8gPSBFV09VTERCTE9DSzsKLSNlbHNlCi0jaWZkZWYgRUFHQUlOCi0JZXJy bm8gPSBFQUdBSU47Ci0jZWxzZQotCWVycm5vID0gMTE7Ci0jZW5kaWYJLyogRUFHQUlOICovCi0j ZW5kaWYJLyogRVdPVUxEQkxPQ0sgKi8KLQlkZWJ1ZyhGMTAwLCJmdHAgY2hlY2tfZGF0YV9jb25u ZWN0aW9uIFRJTU9VVCIsIiIsMCk7Ci0JcmV0dXJuKC0zKTsKLSAgICB9Ci0gICAgcmV0dXJuKDAp OwotfQotI2VuZGlmCS8qIEZUUF9USU1FT1VUICovCi0KLS8qIHp6c2VuZCAtIHVzZWQgYnkgYnVm ZmVyZWQgb3V0cHV0IG1hY3Jvcy4gKi8KLQotc3RhdGljIGludAotI2lmZGVmIENLX0FOU0lDCi16 enNlbmQoaW50IGZkLCBDSEFSIGMpCi0jZWxzZQotenpzZW5kKGZkLGMpIGludCBmZDsgQ0hBUiBj OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaW50IHJjOwotCi0gICAgZGVidWcoRjEw MSwienpzZW5kIHVjYnVmc2l6IiwiIix1Y2J1ZnNpeik7Ci0gICAgZGVidWcoRjEwMSwienpzZW5k IG5vdXQiLCIiLG5vdXQpOwotICAgIGRlYnVnKEYxMTEsInp6c2VuZCIsInNlY3VyZT8iLGZ0cGlz c2VjdXJlKCkpOwotCi0gICAgaWYgKGlzY2FuY2VsZWQoKSkgICAgICAgICAgICAgICAgICAgLyog Q2hlY2sgZm9yIGNhbmNlbGxhdGlvbiAqLwotICAgICAgcmV0dXJuKC05KTsKLQotI2lmZGVmIEZU UF9USU1FT1VUICAgIAotICAgIGZ0cF90aW1lZF9vdXQgPSAwOwotICAgIGlmIChjaGVja19kYXRh X2Nvbm5lY3Rpb24oZmQsMSkgPCAwKSB7Ci0JZnRwX3RpbWVkX291dCA9IDE7Ci0JcmV0dXJuKC0z KTsKLSAgICB9Ci0jZW5kaWYJLyogRlRQX1RJTUVPVVQgKi8KLQotICAgIHJjID0gKCFmdHBpc3Nl Y3VyZSgpKSA/Ci0gICAgICBzZW5kKGZkLCAoU0VOREFSRzJUWVBFKXVjYnVmLCBub3V0LCAwKSA6 Ci0gICAgICAgIHNlY3VyZV9wdXRidWYoZmQsIHVjYnVmLCBub3V0KTsKLSAgICB1Y2J1Zltub3V0 XSA9IE5VTDsKLSAgICBub3V0ID0gMDsKLSAgICB1Y2J1Zltub3V0KytdID0gYzsKLSAgICBzcGFj a2V0cysrOwotICAgIHBrdG51bSsrOwotICAgIGlmIChyYyA+IC0xICYmIGZkaXNwbGEgIT0gWFlG RF9CKSB7Ci0gICAgICAgIHNwa3RsID0gbm91dDsKLSAgICAgICAgZnRzY3JlZW4oU0NSX1BULCdE JywoQ0tfT0ZGX1Qpc3BhY2tldHMsTlVMTCk7Ci0gICAgfQotICAgIHJldHVybihyYyk7Ci19Ci0K LS8qIGMgbSBkIGwgaSBuIHAgdSB0ICAtLSAgQ29tbWFuZC1saW5lIFBVVCAqLwotCi1pbnQKLWNt ZGxpbnB1dChzdGF5KSBpbnQgc3RheTsgewotICAgIGludCB4LCByYyA9IDAsIGRvbmUgPSAwLCBn b29kID0gMCwgc3RhdHVzID0gMDsKLSAgICBVTE9ORyB0MCwgdDE7ICAgICAgICAgICAgICAgICAg ICAgICAvKiBUaW1lcyBmb3Igc3RhdHMgKi8KLSNpZmRlZiBHRlRJTUVSCi0gICAgQ0tGTE9BVCBz ZWM7Ci0jZWxzZQotICAgIGludCBzZWMgPSAwOwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLQotICAg IGlmIChxdWlldCkgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1xIHJlYWxseSBtZWFucyBx dWlldCAqLwotICAgICAgICBkaXNwbGEgPSAwOwotICAgICAgICBmZGlzcGxhID0gMDsKLSAgICB9 IGVsc2UgewotICAgICAgICBkaXNwbGEgPSAxOwotICAgICAgICBmZGlzcGxhID0gWFlGRF9COwot ICAgIH0KLSAgICB0ZXN0aW5nID0gMDsKLSAgICBvdXQyc2NyZWVuID0gMDsKLSAgICBkcHlhY3Rp dmUgPSAwOwotICAgIHdoYXQgPSBXX0ZUUHxXX1NFTkQ7Ci0KLSNpZm5kZWYgTk9TUEwKLSAgICBj bWRfcXVvdGluZyA9IDA7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICBzbmRzcmMgPSBuZmlsczsK LQotICAgIHQwID0gZ21zdGltZXIoKTsgICAgICAgICAgICAgICAgICAgIC8qIFJlY29yZCBzdGFy dGluZyB0aW1lICovCi0KLSAgICB3aGlsZSAoIWRvbmUgJiYgIWNhbmNlbGdyb3VwKSB7ICAgICAv KiBMb29wIGZvciBhbGwgZmlsZXMgKi8KLQotICAgICAgICBjYW5jZWxmaWxlID0gMDsKLSAgICAg ICAgeCA9IGduZmlsZSgpOyAgICAgICAgICAgICAgICAgICAvKiBHZXQgbmV4dCBmaWxlIGZyb20g bGlzdChzKSAqLwotICAgICAgICBpZiAoeCA9PSAwKSAgICAgICAgICAgICAgICAgICAgIC8qIChz ZWUgZ25maWxlKCkgY29tbWVudHMuLi4pICovCi0gICAgICAgICAgeCA9IGduZmVycm9yOwotCi0g ICAgICAgIHN3aXRjaCAoeCkgewotICAgICAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAg ICAgIC8qIEZpbGUgdG8gc2VuZCAqLwotICAgICAgICAgICAgcmMgPSBwdXRmaWxlKEZUUF9QVVQs ICAgICAgIC8qIEZ1bmN0aW9uIChQVVQsIEFQUEVORCkgKi8KLSAgICAgICAgICAgICAgICAgICAg ICAgICBmaWxuYW0sICAgICAgICAvKiBMb2NhbCBmaWxlIHRvIHNlbmQgKi8KLSAgICAgICAgICAg ICAgICAgICAgICAgICBmaWxuYW0sICAgICAgICAvKiBSZW1vdGUgbmFtZSBmb3IgZmlsZSAqLwot ICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNldHlwZSwgICAgIC8qIFRleHQvYmluYXJ5IG1v ZGUgZm9yY2VkICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgLyog Tm90IG1vdmluZyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICAgICAgICAgIC8q IE5vIG1vdmUtdG8gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAgICAgICAgICAv KiBObyByZW5hbWUtdG8gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAgICAgICAg ICAvKiBObyBzZXJ2ZXItcmVuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgZnRwX2Nu diwgICAgICAgLyogRmlsZW5hbWUgY29udmVyc2lvbiAqLwotICAgICAgICAgICAgICAgICAgICAg ICAgIDAsICAgICAgICAgICAgIC8qIFVuaXF1ZS1zZXJ2ZXItbmFtZXMgKi8KLSAgICAgICAgICAg ICAgICAgICAgICAgICAtMSwgICAgICAgICAgICAvKiBBbGwgZmlsZSB0eXBlcyAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgIC8qIE5vIHBlcm1pc3Npb25zICovCi0g ICAgICAgICAgICAgICAgICAgICAgICAgLTEsICAgICAgICAgICAgLyogTm8gY2hhcmFjdGVyIHNl dHMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgICAgICAgICAgICAvKiBObyBjaGFy YWN0ZXIgc2V0cyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgIC8q IE5vIHVwZGF0ZSBvciByZXN0YXJ0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAg ICAgICAgICAgIGlmIChyYyA+IC0xKSB7Ci0gICAgICAgICAgICAgICAgZ29vZCsrOwotICAgICAg ICAgICAgICAgIHN0YXR1cyA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY2Fu Y2VsZmlsZSkgewotICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgIC8qIE9y IGJyZWFrPyAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJjIDwgMCkgewotICAg ICAgICAgICAgICAgIGZ0cF9mYWkrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRp bnVlOyAgICAgICAgICAgICAgICAgICAvKiBPciBicmVhaz8gKi8KLQotICAgICAgICAgIGNhc2Ug MDogICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIG1vcmUgZmlsZXMsIGRvbmUgKi8KLSAgICAg ICAgICAgIGRvbmUrKzsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgY2FzZSAt MjoKLSAgICAgICAgICBjYXNlIC0xOgotICAgICAgICAgICAgcHJpbnRmKCI/JXM6IGZpbGUgbm90 IGZvdW5kIC0gXCIlc1wiXG4iLAotICAgICAgICAgICAgICAgICAgIHB1dGVycm9yID8gIkZhdGFs IiA6ICJXYXJuaW5nIiwKLSAgICAgICAgICAgICAgICAgICBmaWxuYW0KLSAgICAgICAgICAgICAg ICAgICApOwotICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgICAgICAgIC8qIG9yIGJy ZWFrPyAqLwotICAgICAgICAgIGNhc2UgLTM6Ci0gICAgICAgICAgICBwcmludGYoIj9XYXJuaW5n IGFjY2VzcyBkZW5pZWQgLSBcIiVzXCJcbiIsIGZpbG5hbSk7Ci0gICAgICAgICAgICBjb250aW51 ZTsgICAgICAgICAgICAgICAgICAgLyogb3IgYnJlYWs/ICovCi0gICAgICAgICAgY2FzZSAtNToK LSAgICAgICAgICAgIHByaW50ZigiP1RvbyBtYW55IGZpbGVzIG1hdGNoXG4iKTsKLSAgICAgICAg ICAgIGRvbmUrKzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgLTY6Ci0gICAg ICAgICAgICBpZiAoZ29vZCA8IDEpCi0gICAgICAgICAgICAgIHByaW50ZigiP05vIGZpbGVzIHNl bGVjdGVkXG4iKTsKLSAgICAgICAgICAgIGRvbmUrKzsKLSAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBwcmludGYoIj9nZXRuZXh0ZmlsZSgpIC0gdW5r bm93biBmYWlsdXJlXG4iKTsKLSAgICAgICAgICAgIGRvbmUrKzsKLSAgICAgICAgfQotICAgIH0K LSAgICBpZiAoc3RhdHVzID4gMCkgewotICAgICAgICBpZiAoY2FuY2VsZ3JvdXApCi0gICAgICAg ICAgc3RhdHVzID0gMDsKLSAgICAgICAgZWxzZSBpZiAoY2FuY2VsZmlsZSAmJiBnb29kIDwgMSkK LSAgICAgICAgICBzdGF0dXMgPSAwOwotICAgIH0KLSAgICBzdWNjZXNzID0gc3RhdHVzOwotICAg IHggPSBzdWNjZXNzOwotICAgIGlmICh4ID4gLTEpIHsKLSAgICAgICAgbGFzdHhmZXIgPSBXX0ZU UHxXX1NFTkQ7Ci0gICAgICAgIHhmZXJzdGF0ID0gc3VjY2VzczsKLSAgICB9Ci0gICAgdDEgPSBn bXN0aW1lcigpOyAgICAgICAgICAgICAgICAgICAgLyogRW5kIHRpbWUgKi8KLSNpZmRlZiBHRlRJ TUVSCi0gICAgc2VjID0gKENLRkxPQVQpKChDS0ZMT0FUKSh0MSAtIHQwKSAvIDEwMDAuMCk7IC8q IFN0YXRzICovCi0gICAgaWYgKCFzZWMpIHNlYyA9IDAuMDAxOwotICAgIGZwdHNlY3MgPSBzZWM7 Ci0jZWxzZQotICAgIHNlYyA9ICh0MSAtIHQwKSAvIDEwMDA7Ci0gICAgaWYgKCFzZWMpIHNlYyA9 IDE7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotICAgIHRmY3BzID0gKGxvbmcpICh0ZmMgLyBzZWMp OwotICAgIHRzZWNzID0gKGludClzZWM7Ci0gICAgbGFzdHhmZXIgPSBXX0ZUUHxXX1NFTkQ7Ci0g ICAgeGZlcnN0YXQgPSBzdWNjZXNzOwotICAgIGlmIChkcHlhY3RpdmUpCi0gICAgICBmdHNjcmVl bihzdGF0dXMgPiAwID8gU0NSX1RDIDogU0NSX0NXLCAwLCAoQ0tfT0ZGX1QpMCwgIiIpOwotICAg IGlmICghc3RheSkKLSAgICAgIGRvZXhpdChzdWNjZXNzID8gR09PRF9FWElUIDogQkFEX0VYSVQs IC0xKTsKLSAgICByZXR1cm4oc3VjY2Vzcyk7Ci19Ci0KLQotLyogIGQgbyBmIHQgcCBwIHUgdCAg LS0gIFBhcnNlIGFuZCBleGVjdXRlIFBVVCwgTVBVVCwgYW5kIEFQUEVORCAgKi8KLQotaW50Ci0j aWZkZWYgQ0tfQU5TSUMKLWRvZnRwcHV0KGludCBjeCwgaW50IHdobykgICAgICAgICAgICAgICAv KiB3aG8gPT0gMSBmb3IgZnRwLCAwIGZvciBrZXJtaXQgKi8KLSNlbHNlCi1kb2Z0cHB1dChjeCx3 aG8pIGludCBjeCwgd2hvOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgc3RydWN0IEZE QiBzZiwgZmwsIHN3LCBjbTsKLSAgICBpbnQgbiwgcmMsIGNvbmZpcm1lZCA9IDAsIHdpbGQgPSAw LCBnZXR2YWwgPSAwLCBtcHV0ID0gMCwgZG9uZSA9IDA7Ci0gICAgaW50IHhfY252ID0gMCwgeF91 c24gPSAwLCB4X3BybSA9IDAsIHB1dGZsYWdzID0gMCwgc3RhdHVzID0gMCwgZ29vZCA9IDA7Ci0g ICAgY2hhciAqIHMsICogczI7Ci0KLSAgICBpbnQgeF9jc2wsIHhfY3NyID0gLTE7ICAgICAgICAg ICAgICAvKiBMb2NhbCBhbmQgcmVtb3RlIGNoYXJzZXRzICovCi0gICAgaW50IHhfeGxhID0gMDsK LSAgICBpbnQgeF9yZWN1cnNlID0gMDsKLSAgICBjaGFyIGMsICogcDsgICAgICAgICAgICAgICAg ICAgICAgICAvKiBXb3JrZXJzICovCi0jaWZkZWYgUFVUQVJSQVkKLSAgICBpbnQgcmFuZ2VbMl07 ICAgICAgICAgICAgICAgICAgICAgICAvKiBBcnJheSByYW5nZSAqLwotICAgIGNoYXIgKiogYXAg PSBOVUxMOyAgICAgICAgICAgICAgICAgIC8qIEFycmF5IHBvaW50ZXIgKi8KLSAgICBpbnQgYXJy YXl4ID0gLTE7ICAgICAgICAgICAgICAgICAgICAvKiBBcnJheSBpbmRleCAqLwotI2VuZGlmIC8q IFBVVEFSUkFZICovCi0gICAgVUxPTkcgdDAgPSAwTCwgdDEgPSAwTDsgICAgICAgICAgICAgLyog VGltZXMgZm9yIHN0YXRzICovCi0jaWZkZWYgR0ZUSU1FUgotICAgIENLRkxPQVQgc2VjOwotI2Vs c2UKLSAgICBpbnQgc2VjID0gMDsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0KLSAgICBzdHJ1Y3Qg c3RyaW5naW50IHB2W1NORF9NQVgrMV07ICAgIC8qIFRlbXBvcmFyeSBhcnJheSBmb3Igc3dpdGNo IHZhbHVlcyAqLwotICAgIHN1Y2Nlc3MgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFz c3VtZSBmYWlsdXJlICovCi0gICAgZm9yY2V0eXBlID0gMDsgICAgICAgICAgICAgICAgICAgICAg LyogTm8gL1RFWFQgb3IgL0JJTkFSWSBnaXZlbiB5ZXQgKi8KLSAgICBvdXQyc2NyZWVuID0gMDsg ICAgICAgICAgICAgICAgICAgICAvKiBOb3Qgb3V0cHV0dGluZyBmaWxlIHRvIHNjcmVlbiAqLwot ICAgIHB1dGZsYWdzID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFBVVCBvcHRpb25zICov Ci0gICAgeF9jbnYgPSBmdHBfY252OyAgICAgICAgICAgICAgICAgICAgLyogRmlsZW5hbWUgY29u dmVyc2lvbiAqLwotICAgIHhfdXNuID0gZnRwX3VzbjsgICAgICAgICAgICAgICAgICAgIC8qIFVu aXF1ZSBzZXJ2ZXIgbmFtZXMgKi8KLSAgICB4X3BybSA9IGZ0cF9wcm07ICAgICAgICAgICAgICAg ICAgICAvKiBQZXJtaXNzaW9ucyAqLwotICAgIGlmICh4X3BybSA9PSBTRVRfQVVUTykgICAgICAg ICAgICAgIC8qIFBlcm1pc3Npb25zIEFVVE8gKi8KLSAgICAgIHhfcHJtID0gYWxpa2U7Ci0KLSNp Zm5kZWYgTk9DU0VUUwotICAgIHhfY3NyID0gZnRwX2NzcjsgICAgICAgICAgICAgICAgICAgIC8q IEluaGVyaXQgZ2xvYmFsIHNlcnZlciBjaGFyc2V0ICovCi0gICAgeF9jc2wgPSBmdHBfY3NsOwot ICAgIGlmICh4X2NzbCA8IDApCi0gICAgICB4X2NzbCA9IGZjaGFyc2V0OwotICAgIHhfeGxhID0g ZnRwX3hsYTsKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSAgICBtYWtlc3RyKCZmaWxlZmlsZSxO VUxMKTsgICAgICAgICAgICAvKiBObyBmaWxlbmFtZSBsaXN0IGZpbGUgeWV0LiAqLwotICAgIG1h a2VzdHIoJnNydl9yZW5hbSxOVUxMKTsJCS8qIENsZWFyIC9TRVJWRVItUkVOQU1FOiAqLwotICAg IG1ha2VzdHIoJnNuZF9yZW5hbWUsTlVMTCk7CQkvKiAgUFVUIC9SRU5BTUUgKi8KLSAgICBtYWtl c3RyKCZzbmRfbW92ZSxOVUxMKTsJCS8qICBQVVQgL01PVkUgKi8KLSAgICBwdXRwYXRoWzBdID0g TlVMOyAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIGZvciBzeW5jZGlyKCkuICovCi0g ICAgcHV0ZXJyb3IgPSBmdHBfZXJyOyAgICAgICAgICAgICAgICAgLyogSW5oZXJpdCBnbG9iYWwg ZXJyb3IgYWN0aW9uLiAqLwotICAgIHdoYXQgPSBXX1NFTkR8V19GVFA7ICAgICAgICAgICAgICAg IC8qIFdoYXQgd2UncmUgZG9pbmcgKHNlbmRpbmcgdy9GVFApICovCi0gICAgYXNuYW1idWZbMF0g PSBOVUw7ICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgYXMtbmFtZSBidWZmZXIgKi8KLQotICAg IGlmIChnX2Z0cF90eXAgPiAtMSkgeyAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgVFlQRSBpZiBz YXZlZCAqLwotICAgICAgICBmdHBfdHlwID0gZ19mdHBfdHlwOwotICAgICAgICAvKiBnX2Z0cF90 eXAgPSAtMTsgKi8KLSAgICB9Ci0gICAgZm9yIChpID0gMDsgaSA8PSBTTkRfTUFYOyBpKyspIHsg ICAgLyogSW5pdGlhbGl6ZSBzd2l0Y2ggdmFsdWVzICovCi0gICAgICAgIHB2W2ldLnN2YWwgPSBO VUxMOyAgICAgICAgICAgICAgLyogdG8gbnVsbCBwb2ludGVycyAqLwotICAgICAgICBwdltpXS5p dmFsID0gLTE7ICAgICAgICAgICAgICAgIC8qIGFuZCAtMSBpbnQgdmFsdWVzICovCi0gICAgICAg IHB2W2ldLnd2YWwgPSAoQ0tfT0ZGX1QpLTE7CS8qIGFuZCAtMSB3aWRlIHZhbHVlcyAqLwotICAg IH0KLSAgICBpZiAod2hvID09IDApIHsgICAgICAgICAgICAgICAgICAgICAvKiBDYWxsZWQgd2l0 aCB1bnByZWZpeGVkIGNvbW1hbmQgKi8KLSAgICAgICAgc3dpdGNoIChjeCkgewotICAgICAgICAg IGNhc2UgWFhSU0VOOiAgcHZbU05EX1JFU10uaXZhbCA9IDE7IGJyZWFrOwotICAgICAgICAgIGNh c2UgWFhDU0VOOiAgcHZbU05EX0NNRF0uaXZhbCA9IDE7IGJyZWFrOwotICAgICAgICAgIGNhc2Ug WFhNT1ZFOiAgcHZbU05EX0RFTF0uaXZhbCA9IDE7IGJyZWFrOwotICAgICAgICAgIGNhc2UgWFhN TU9WRTogcHZbU05EX0RFTF0uaXZhbCA9IDE7IC8qIGZhbGwgdGhydSAqLwotICAgICAgICAgIGNh c2UgWFhNU0U6ICAgbXB1dCsrOyBicmVhazsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0JaWYg KGN4ID09IEZUUF9SRVApCi0JICBwdltTTkRfUkVTXS5pdmFsID0gMTsKLSAgICAgICAgaWYgKGN4 ID09IEZUUF9NUFUpCi0gICAgICAgICAgbXB1dCsrOwotICAgIH0KLSAgICBjbWZkYmkoJnN3LCAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBGaXJzdCBGREIgLSBjb21tYW5kIHN3aXRjaGVzICov Ci0gICAgICAgICAgIF9DTUtFWSwgICAgICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KLSAg ICAgICAgICAgIkZpbGVuYW1lLCBvciBzd2l0Y2giLCAgICAgICAvKiBobHBtc2cgKi8KLSAgICAg ICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAgICAg ICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8K LSAgICAgICAgICAgbnB1dHN3aSwgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmlj IGRhdGEgMTogdGJsIHNpemUgKi8KLSAgICAgICAgICAgNCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICovCi0gICAgICAgICAgIHh4 c3RyaW5nLCAgICAgICAgICAgICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotICAg ICAgICAgICBwdXRzd2ksICAgICAgICAgICAgICAgICAgICAgIC8qIEtleXdvcmQgdGFibGUgKi8K LSAgICAgICAgICAgJnNmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIG5l eHQgRkRCICovCi0gICAgICAgICAgICk7Ci0gICAgY21mZGJpKCZmbCwgICAgICAgICAgICAgICAg ICAgICAgICAgLyogM3JkIEZEQiAtIGxvY2FsIGZpbGVzcGVjICovCi0gICAgICAgICAgIF9DTUZM RCwgICAgICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KLSAgICAgICAgICAgIiIsICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBobHBtc2cgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAgICAgICAgMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLwotICAgICAg ICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAy ICovCi0gICAgICAgICAgIHh4c3RyaW5nLAotICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAm Y20KLSAgICAgICAgICAgKTsKLSAgICBjbWZkYmkoJmNtLCAgICAgICAgICAgICAgICAgICAgICAg ICAvKiA0dGggRkRCIC0gQ29uZmlybWF0aW9uICovCi0gICAgICAgICAgIF9DTUNGTSwgICAgICAg ICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBobHBtc2cgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAgICAgICAgMCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLwotICAgICAgICAgICAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCi0gICAg ICAgICAgIE5VTEwsCi0gICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgIE5VTEwKLSAgICAgICAg ICAgKTsKLQotICBhZ2FpbjoKLSAgICBjbWZkYmkoJnNmLCAgICAgICAgICAgICAgICAgICAgICAg ICAvKiAybmQgRkRCIC0gZmlsZSB0byBzZW5kICovCi0gICAgICAgICAgIF9DTUlGSSwgICAgICAg ICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBobHBtc2cgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAgICAgICAgLyogMCA9IHBhcnNlIGZp bGVzLCAxID0gcGFyc2UgZmlsZXMgb3IgZGlycywgMiA9IHNraXAgc3ltbGlua3MgKi8KLSAgICAg ICAgICAgbm9saW5rcyB8IHhfcmVjdXJzZSwgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEg MSAqLwotICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRpcmZsZyAw IG1lYW5zICJub3QgZGlycyBvbmx5IiAqLwotICAgICAgICAgICB4eHN0cmluZywKLSAgICAgICAg ICAgTlVMTCwKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgIG1wdXQgPyAmY20gOiAmZmwKLSNl bHNlCi0JICAgJmZsCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICApOwotCi0gICAg d2hpbGUgKDEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFyc2UgemVybyBvciBtb3Jl IHN3aXRjaGVzICovCi0gICAgICAgIHggPSBjbWZkYigmc3cpOyAgICAgICAgICAgICAgICAgLyog UGFyc2Ugc29tZXRoaW5nICovCi0gICAgICAgIGRlYnVnKEYxMDEsImZ0cCBwdXQgY21mZGIgQSIs IiIseCk7Ci0gICAgICAgIGRlYnVnKEYxMDEsImZ0cCBwdXQgZmNvZGUgQSIsIiIsY21yZXN1bHQu ZmNvZGUpOwotICAgICAgICBpZiAoeCA8IDApICAgICAgICAgICAgICAgICAgICAgIC8qIEVycm9y ICovCi0gICAgICAgICAgZ290byB4cHV0eDsgICAgICAgICAgICAgICAgICAgLyogb3IgcmVwYXJz ZSBuZWVkZWQgKi8KLSAgICAgICAgaWYgKGNtcmVzdWx0LmZjb2RlICE9IF9DTUtFWSkgICAvKiBC cmVhayBvdXQgb2YgbG9vcCBpZiBub3QgYSBzd2l0Y2ggKi8KLSAgICAgICAgICBicmVhazsKLSAg ICAgICAgYyA9IGNtZ2JyaygpOyAgICAgICAgICAgICAgICAgICAvKiBHZXQgYnJlYWsgY2hhcmFj dGVyICovCi0gICAgICAgIGdldHZhbCA9IChjID09ICc6JyB8fCBjID09ICc9Jyk7IC8qIHRvIHNl ZSBob3cgdGhleSBlbmRlZCB0aGUgc3dpdGNoICovCi0gICAgICAgIGlmIChnZXR2YWwgJiYgIShj bXJlc3VsdC5rZmxhZ3MgJiBDTV9BUkcpKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9UaGlzIHN3 aXRjaCBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50c1xuIik7Ci0gICAgICAgICAgICB4ID0gLTk7Ci0g ICAgICAgICAgICBnb3RvIHhwdXR4OwotICAgICAgICB9Ci0gICAgICAgIGlmICghZ2V0dmFsICYm IChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKLSAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dp dGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKLSAgICAgICAgICAgIHggPSAtOTsKLSAgICAg ICAgICAgIGdvdG8geHB1dHg7Ci0gICAgICAgIH0KLSAgICAgICAgbiA9IGNtcmVzdWx0Lm5yZXN1 bHQ7ICAgICAgICAgICAvKiBOdW1lcmljIHJlc3VsdCA9IHN3aXRjaCB2YWx1ZSAqLwotICAgICAg ICBkZWJ1ZyhGMTAxLCJmdHAgcHV0IHN3aXRjaCIsIiIsbik7Ci0KLSAgICAgICAgc3dpdGNoIChu KSB7ICAgICAgICAgICAgICAgICAgICAvKiBQcm9jZXNzIHRoZSBzd2l0Y2ggKi8KLSAgICAgICAg ICBjYXNlIFNORF9BRlQ6ICAgICAgICAgICAgICAgICAvKiBTZW5kIC9BRlRFUjpkYXRlLXRpbWUg Ki8KLSAgICAgICAgICBjYXNlIFNORF9CRUY6ICAgICAgICAgICAgICAgICAvKiBTZW5kIC9CRUZP UkU6ZGF0ZS10aW1lICovCi0gICAgICAgICAgY2FzZSBTTkRfTkFGOiAgICAgICAgICAgICAgICAg LyogU2VuZCAvTk9ULUFGVEVSOmRhdGUtdGltZSAqLwotICAgICAgICAgIGNhc2UgU05EX05CRTog ICAgICAgICAgICAgICAgIC8qIFNlbmQgL05PVC1CRUZPUkU6ZGF0ZS10aW1lICovCi0gICAgICAg ICAgICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoKHggPSBjbWRhdGUoIkZp bGUgZGF0ZS10aW1lIiwiIiwmcywwLHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAg aWYgKHggPT0gLTMpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/RGF0ZS10aW1lIHJl cXVpcmVkXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICBnb3RvIHhwdXR4OwotICAgICAgICAgICAgfQotICAgICAgICAg ICAgcHZbbl0uaXZhbCA9IDE7Ci0gICAgICAgICAgICBtYWtlc3RyKCYocHZbbl0uc3ZhbCkscyk7 Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgU05EX0FTTjogICAgICAgICAg ICAgICAgIC8qIC9BUy1OQU1FOiAqLwotICAgICAgICAgICAgZGVidWcoRjEwMSwiZnRwIHB1dCAv YXMtbmFtZSBnZXR2YWwiLCIiLGdldHZhbCk7Ci0gICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJl YWs7Ci0gICAgICAgICAgICBpZiAoKHggPSBjbWZsZCgiTmFtZSB0byBzZW5kIHVuZGVyIiwiIiwm cyxOVUxMKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKLSAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKCI/bmFtZSByZXF1aXJlZFxuIik7Ci0gICAgICAgICAgICAgICAg ICAgIHggPSAtOTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZ290byB4cHV0 eDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1ha2VzdHIoJihwdltuXS5zdmFsKSxicnN0 cmlwKHMpKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBwdXQgL2FzLW5hbWUgMSIscHZb bl0uc3ZhbCwwKTsKLSAgICAgICAgICAgIGlmIChwdltuXS5zdmFsKSBwdltuXS5pdmFsID0gMTsK LSAgICAgICAgICAgIGJyZWFrOwotCi0jaWZkZWYgUFVUQVJSQVkKLSAgICAgICAgICBjYXNlIFNO RF9BUlI6ICAgICAgICAgICAgICAgICAvKiAvQVJSQVkgKi8KLSAgICAgICAgICAgIGlmICghZ2V0 dmFsKSBicmVhazsKLSAgICAgICAgICAgIGFwID0gTlVMTDsKLSAgICAgICAgICAgIGlmICgoeCA9 IGNtZmxkKCJBcnJheSBuYW1lIChhIHNpbmdsZSBsZXR0ZXIgd2lsbCBkbykiLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmcywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICkpIDwgMCkgewotICAgICAgICAgICAgICAgIGlmICh4ID09IC0zKQotCQkgIGJyZWFrOwotCQll bHNlCi0JCSAgcmV0dXJuKHgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCh4ID0g YXJyYXlib3VuZHMocywmKHJhbmdlWzBdKSwmKHJhbmdlWzFdKSkpIDwgMCkgewotICAgICAgICAg ICAgICAgIHByaW50ZigiP0JhZCBhcnJheTogJXNcbiIscyk7Ci0gICAgICAgICAgICAgICAgcmV0 dXJuKC05KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghKGFwID0gYV9wdHJbeF0p KSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/Tm8gc3VjaCBhcnJheTogJXNcbiIscyk7Ci0g ICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHB2 W25dLml2YWwgPSAxOwotICAgICAgICAgICAgcHZbU05EX0NNRF0uaXZhbCA9IDA7ICAgICAgIC8q IFVuZG8gYW55IGNvbmZsaWN0aW5nIG9uZXMuLi4gKi8KLSAgICAgICAgICAgIHB2W1NORF9SRVNd Lml2YWwgPSAwOwotICAgICAgICAgICAgcHZbU05EX0ZJTF0uaXZhbCA9IDA7Ci0gICAgICAgICAg ICBhcnJheXggPSB4OwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogUFVUQVJSQVkgKi8K LQotICAgICAgICAgIGNhc2UgU05EX0JJTjogICAgICAgICAgICAgICAgIC8qIC9CSU5BUlkgKi8K LSAgICAgICAgICBjYXNlIFNORF9UWFQ6ICAgICAgICAgICAgICAgICAvKiAvVEVYVCBvciAvQVND SUkgKi8KLSAgICAgICAgICBjYXNlIFNORF9URU46ICAgICAgICAgICAgICAgICAvKiAvVEVORVgg Ki8KLSAgICAgICAgICAgIHB2W1NORF9CSU5dLml2YWwgPSAwOwotICAgICAgICAgICAgcHZbU05E X1RYVF0uaXZhbCA9IDA7Ci0gICAgICAgICAgICBwdltTTkRfVEVOXS5pdmFsID0gMDsKLSAgICAg ICAgICAgIHB2W25dLml2YWwgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSNpZmRlZiBQVVRQ SVBFCi0gICAgICAgICAgY2FzZSBTTkRfQ01EOiAgICAgICAgICAgICAgICAgLyogVGhlc2UgdGFr ZSBubyBhcmdzICovCi0gICAgICAgICAgICBpZiAobm9wdXNoKSB7Ci0gICAgICAgICAgICAgICAg cHJpbnRmKCI/U29ycnksIHN5c3RlbSBjb21tYW5kIGFjY2VzcyBpcyBkaXNhYmxlZFxuIik7Ci0g ICAgICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgICAgIGdvdG8geHB1dHg7Ci0gICAg ICAgICAgICB9Ci0jaWZkZWYgUElQRVNFTkQKLSAgICAgICAgICAgIGVsc2UgaWYgKHNuZGZpbHRl cikgewotICAgICAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBubyBQVVQgL0NPTU1BTkQgd2hl biBTRU5EIEZJTFRFUiBzZWxlY3RlZFxuIik7Ci0gICAgICAgICAgICAgICAgeCA9IC05OwotICAg ICAgICAgICAgICAgIGdvdG8geHB1dHg7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogUElQRVNF TkQgKi8KLSAgICAgICAgICAgIHN3LmhscG1zZyA9ICJDb21tYW5kLCBvciBzd2l0Y2giOyAvKiBD aGFuZ2UgaGVscCBtZXNzYWdlICovCi0gICAgICAgICAgICBwdltuXS5pdmFsID0gMTsgICAgICAg ICAgICAgLyogSnVzdCBzZXQgdGhlIGZsYWcgKi8KLSAgICAgICAgICAgIHB2W1NORF9BUlJdLml2 YWwgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogUFVUUElQRSAqLwotCi0jaWZk ZWYgQ0tTWU1MSU5LCi0gICAgICAgICAgY2FzZSBTTkRfTE5LOgotICAgICAgICAgICAgbm9saW5r cyA9IDA7Ci0gICAgICAgICAgICBnb3RvIGFnYWluOwkJCS8qIEJlY2F1c2UgQ01JRkkgcGFyYW1z IGNoYW5nZWQuLi4gKi8KLSAgICAgICAgICBjYXNlIFNORF9OTEs6Ci0gICAgICAgICAgICBub2xp bmtzID0gMjsKLSAgICAgICAgICAgIGdvdG8gYWdhaW47Ci0jZW5kaWYgLyogQ0tTWU1MSU5LICov Ci0KLSNpZmRlZiBGVFBfUkVTVEFSVAotICAgICAgICAgIGNhc2UgU05EX1JFUzogICAgICAgICAg ICAgICAgIC8qIC9SRUNPVkVSIChyZXNlbmQpICovCi0gICAgICAgICAgICBwdltTTkRfQVJSXS5p dmFsID0gMDsgICAgICAgLyogZmFsbCB0aHJ1IG9uIHB1cnBvc2UuLi4gKi8KLSNlbmRpZiAvKiBG VFBfUkVTVEFSVCAqLwotCi0gICAgICAgICAgY2FzZSBTTkRfTk9COgotICAgICAgICAgIGNhc2Ug U05EX0RFTDogICAgICAgICAgICAgICAgIC8qIC9ERUxFVEUgKi8KLSAgICAgICAgICBjYXNlIFNO RF9TSEg6ICAgICAgICAgICAgICAgICAvKiAvUVVJRVQgKi8KLSAgICAgICAgICBjYXNlIFNORF9V UEQ6ICAgICAgICAgICAgICAgICAvKiAvVVBEQVRFICovCi0gICAgICAgICAgY2FzZSBTTkRfU0lN OiAgICAgICAgICAgICAgICAgLyogL1VQREFURSAqLwotICAgICAgICAgIGNhc2UgU05EX1VTTjog ICAgICAgICAgICAgICAgIC8qIC9VTklRVUUgKi8KLSAgICAgICAgICAgIHB2W25dLml2YWwgPSAx OyAgICAgICAgICAgICAvKiBKdXN0IHNldCB0aGUgZmxhZyAqLwotICAgICAgICAgICAgYnJlYWs7 Ci0KLSAgICAgICAgICBjYXNlIFNORF9SRUM6ICAgICAgICAgICAgICAgICAvKiAvUkVDVVJTSVZF ICovCi0gICAgICAgICAgICByZWN1cnNpdmUgPSAyOyAgICAgICAgICAgICAgLyogTXVzdCBiZSBz ZXQgYmVmb3JlIGNtaWZpKCkgKi8KLSAgICAgICAgICAgIHhfcmVjdXJzZSA9IDE7Ci0gICAgICAg ICAgICBnb3RvIGFnYWluOwkJCS8qIEJlY2F1c2UgQ01JRkkgcGFyYW1zIGNoYW5nZWQuLi4gKi8K LSAgICAgICAgICAgIGJyZWFrOwotCi0jaWZkZWYgVU5JWE9ST1NLCi0gICAgICAgICAgY2FzZSBT TkRfRE9UOiAgICAgICAgICAgICAgICAgLyogL0RPVEZJTEVTICovCi0gICAgICAgICAgICBtYXRj aGRvdCA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFNORF9OT0Q6ICAg ICAgICAgICAgICAgICAvKiAvTk9ET1RGSUxFUyAqLwotICAgICAgICAgICAgbWF0Y2hkb3QgPSAw OwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogVU5JWE9ST1NLICovCi0KLSAgICAgICAg ICBjYXNlIFNORF9FUlI6ICAgICAgICAgICAgICAgICAvKiAvRVJST1ItQUNUSU9OICovCi0gICAg ICAgICAgICBpZiAoKHggPSBjbWtleShxb3JwLDIsIiIsIiIseHhzdHJpbmcpKSA8IDApCi0gICAg ICAgICAgICAgIGdvdG8geHB1dHg7Ci0gICAgICAgICAgICBwdltuXS5pdmFsID0geDsKLSAgICAg ICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBTTkRfRVhDOiAgICAgICAgICAgICAgICAg LyogRXhjbHVkZXMgKi8KLSAgICAgICAgICAgIGlmICghZ2V0dmFsKSBicmVhazsKLSAgICAgICAg ICAgIGlmICgoeCA9IGNtZmxkKCJQYXR0ZXJuIiwiIiwmcyx4eHN0cmluZykpIDwgMCkgewotICAg ICAgICAgICAgICAgIGlmICh4ID09IC0zKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50Zigi P1BhdHRlcm4gcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAgICAgICAgICB4ID0gLTk7Ci0gICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGdvdG8geHB1dHg7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgICAgICBpZiAocykgaWYgKCEqcykgcyA9IE5VTEw7Ci0gICAgICAgICAgICBtYWtl c3RyKCYocHZbbl0uc3ZhbCkscyk7Ci0gICAgICAgICAgICBpZiAocHZbbl0uc3ZhbCkKLSAgICAg ICAgICAgICAgcHZbbl0uaXZhbCA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg IGNhc2UgU05EX1BSTTogICAgICAgICAgICAgICAgIC8qIC9QRVJNSVNTSU9OUyAqLwotICAgICAg ICAgICAgaWYgKCFnZXR2YWwpCi0gICAgICAgICAgICAgIHggPSAxOwotICAgICAgICAgICAgZWxz ZSBpZiAoKHggPSBjbWtleShvbm9mZiwyLCIiLCJvbiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAg ICAgICAgIGdvdG8geHB1dHg7Ci0gICAgICAgICAgICBwdltTTkRfUFJNXS5pdmFsID0geDsKLSAg ICAgICAgICAgIGJyZWFrOwotCi0jaWZkZWYgUElQRVNFTkQKLSAgICAgICAgICBjYXNlIFNORF9G TFQ6ICAgICAgICAgICAgICAgICAvKiAvRklMVEVSICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTAx LCJmdHAgcHV0IC9maWx0ZXIgZ2V0dmFsIiwiIixnZXR2YWwpOwotICAgICAgICAgICAgaWYgKCFn ZXR2YWwpIGJyZWFrOwotICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQoIkZpbHRlciBwcm9ncmFt IHRvIHNlbmQgdGhyb3VnaCIsIiIsJnMsTlVMTCkpIDwgMCkgewotICAgICAgICAgICAgICAgIGlm ICh4ID09IC0zKQotICAgICAgICAgICAgICAgICAgcyA9ICIiOwotICAgICAgICAgICAgICAgIGVs c2UKLSAgICAgICAgICAgICAgICAgIGdvdG8geHB1dHg7Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICBpZiAoKnMpIHMgPSBicnN0cmlwKHMpOwotICAgICAgICAgICAgeSA9IHN0cmxlbihzKTsK LSAgICAgICAgICAgIGZvciAoeCA9IDA7IHggPCB5OyB4KyspIHsgICAvKiBNYWtlIHN1cmUgdGhl eSBpbmNsdWRlZCAiXHYoLi4uKSIgKi8KLSAgICAgICAgICAgICAgICBpZiAoc1t4XSAhPSAnXFwn KSBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAoc1t4KzFdID09ICd2JykgYnJlYWs7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoeCA9PSB5KSB7Ci0gICAgICAgICAgICAgICAg cHJpbnRmKAotICAgICAgICAgICAgICAgICI/RmlsdGVyIG11c3QgY29udGFpbiBhIHJlcGxhY2Vt ZW50IHZhcmlhYmxlIGZvciBmaWxlbmFtZS5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgKTsK LSAgICAgICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICAgICAgZ290byB4cHV0eDsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzKSBpZiAoISpzKSBzID0gTlVMTDsKLSAgICAg ICAgICAgIG1ha2VzdHIoJihwdltuXS5zdmFsKSxzKTsKLSAgICAgICAgICAgIGlmIChwdltuXS5z dmFsKQotICAgICAgICAgICAgICBwdltuXS5pdmFsID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwot I2VuZGlmIC8qIFBJUEVTRU5EICovCi0KLSAgICAgICAgICBjYXNlIFNORF9OQU06ICAgICAgICAg ICAgICAgICAvKiAvRklMRU5BTUVTICovCi0gICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7 Ci0gICAgICAgICAgICBpZiAoKHggPSBjbWtleShmbnRhYixuZm50YWIsIiIsImF1dG9tYXRpYyIs eHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgIGdvdG8geHB1dHg7Ci0gICAgICAgICAgICBk ZWJ1ZyhGMTAxLCJmdHAgcHV0IC9maWxlbmFtZXMiLCIiLHgpOwotICAgICAgICAgICAgcHZbbl0u aXZhbCA9IHg7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgU05EX1NNQTog ICAgICAgICAgICAgICAgIC8qIFNtYWxsZXIgLyBsYXJnZXIgdGhhbiAqLwotICAgICAgICAgIGNh c2UgU05EX0xBUjogewotCSAgICAgIENLX09GRl9UIHk7Ci0JICAgICAgaWYgKCFnZXR2YWwpIGJy ZWFrOwotCSAgICAgIGlmICgoeCA9IGNtbnVtdygiU2l6ZSBpbiBieXRlcyIsIjAiLDEwLCZ5LHh4 c3RyaW5nKSkgPCAwKQotCQlnb3RvIHhwdXR4OwotCSAgICAgIHB2W25dLnd2YWwgPSB5OwotCSAg ICAgIGJyZWFrOwotCSAgfQotICAgICAgICAgIGNhc2UgU05EX0ZJTDogICAgICAgICAgICAgICAg IC8qIE5hbWUgb2YgZmlsZSBjb250YWluaW5nIGZpbGVuYW1lcyAqLwotICAgICAgICAgICAgaWYg KCFnZXR2YWwpIGJyZWFrOwotICAgICAgICAgICAgaWYgKCh4ID0gY21pZmkoIk5hbWUgb2YgZmls ZSBjb250YWluaW5nIGxpc3Qgb2YgZmlsZW5hbWVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiIiwmcywmeSx4eHN0cmluZykpIDwgMCkgewotICAgICAgICAgICAgICAgIGlmICh4 ID09IC0zKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0ZpbGVuYW1lIHJlcXVpcmVk XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICBnb3RvIHhwdXR4OwotICAgICAgICAgICAgfSBlbHNlIGlmICh5ICYmIGlz d2lsZChzKSkgewotICAgICAgICAgICAgICAgIHByaW50ZigiP1dpbGRjYXJkcyBub3QgYWxsb3dl ZFxuIik7Ci0gICAgICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgICAgIGdvdG8geHB1 dHg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocykgaWYgKCEqcykgcyA9IE5VTEw7 Ci0gICAgICAgICAgICBtYWtlc3RyKCYocHZbbl0uc3ZhbCkscyk7Ci0gICAgICAgICAgICBpZiAo cHZbbl0uc3ZhbCkgewotICAgICAgICAgICAgICAgIHB2W25dLml2YWwgPSAxOwotICAgICAgICAg ICAgICAgIHB2W1NORF9BUlJdLml2YWwgPSAwOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg ICAgICAgICAgICBwdltuXS5pdmFsID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1w dXQgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFNORF9NT1Y6ICAg ICAgICAgICAgICAgICAvKiBNT1ZFIGFmdGVyICovCi0gICAgICAgICAgY2FzZSBTTkRfUkVOOiAg ICAgICAgICAgICAgICAgLyogUkVOQU1FIGFmdGVyICovCi0gICAgICAgICAgY2FzZSBTTkRfU1JO OiB7ICAgICAgICAgICAgICAgLyogU0VSVkVSLVJFTkFNRSBhZnRlciAqLwotICAgICAgICAgICAg ICBjaGFyICogbSA9ICIiOwotICAgICAgICAgICAgICBzd2l0Y2ggKG4pIHsKLSAgICAgICAgICAg ICAgICBjYXNlIFNORF9NT1Y6Ci0gICAgICAgICAgICAgICAgICBtID0gImRldmljZSBhbmQvb3Ig ZGlyZWN0b3J5IGZvciBzb3VyY2UgZmlsZSBhZnRlciBzZW5kaW5nIjsKLSAgICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgU05EX1JFTjoKLSAgICAgICAgICAgICAg ICAgIG0gPSAibmV3IG5hbWUgZm9yIHNvdXJjZSBmaWxlIGFmdGVyIHNlbmRpbmciOwotICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBTTkRfU1JOOgotICAgICAg ICAgICAgICAgICAgbSA9ICJuZXcgbmFtZSBmb3IgZGVzdGluYXRpb24gZmlsZSBhZnRlciBzZW5k aW5nIjsKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgIGlmICghZ2V0dmFsKSBicmVhazsKLSAgICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQo bSwgIiIsICZzLCBuID09IFNORF9NT1YgPyB4eHN0cmluZyA6IE5VTEwpKSA8IDApIHsKLSAgICAg ICAgICAgICAgICAgIGlmICh4ID09IC0zKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgcHJpbnRm KCIlc1xuIiwgbiA9PSBTTkRfTU9WID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj9E ZXN0aW5hdGlvbiByZXF1aXJlZCIgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiP05l dyBuYW1lIHJlcXVpcmVkIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAg ICAgICAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICAgIGdvdG8geHB1dHg7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgaWYgKHMp IGlmICghKnMpIHMgPSBOVUxMOwotICAgICAgICAgICAgICBtYWtlc3RyKCYocHZbbl0uc3ZhbCks cyA/IGJyc3RyaXAocykgOiBOVUxMKTsKLSAgICAgICAgICAgICAgcHZbbl0uaXZhbCA9IChwdltu XS5zdmFsKSA/IDEgOiAwOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAg ICAgICAgY2FzZSBTTkRfU1RBOiAgICAgICAgICAgICAgICAgLyogU3RhcnRpbmcgcG9zaXRpb24g KD0gUFNFTkQpICovCi0gICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0gICAgICAgICAg ICBpZiAoKHggPSBjbW51bSgiMC1iYXNlZCBwb3NpdGlvbiIsIjAiLDEwLCZ5LHh4c3RyaW5nKSkg PCAwKQotICAgICAgICAgICAgICBnb3RvIHhwdXR4OwotICAgICAgICAgICAgcHZbbl0uaXZhbCA9 IHk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgU05EX1RZUDogICAgICAg ICAgICAgICAgIC8qIC9UWVBFICovCi0gICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0g ICAgICAgICAgICBpZiAoKHggPSBjbWtleSh0eHRiaW4sMywiIiwiYWxsIix4eHN0cmluZykpIDwg MCkKLSAgICAgICAgICAgICAgZ290byB4cHV0eDsKLSAgICAgICAgICAgIHB2W25dLml2YWwgPSAo eCA9PSAyKSA/IC0xIDogeDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0jaWZuZGVmIE5PQ1NFVFMK LSAgICAgICAgICBjYXNlIFNORF9DU0w6ICAgICAgICAgICAgICAgICAvKiBMb2NhbCBjaGFyYWN0 ZXIgc2V0ICovCi0gICAgICAgICAgY2FzZSBTTkRfQ1NSOiAgICAgICAgICAgICAgICAgLyogUmVt b3RlIChzZXJ2ZXIpIGNoYXJzZXQgKi8KLSAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KGZjc3Rh YixuZmlsYywiIiwiIix4eHN0cmluZykpIDwgMCkgewotCQlyZXR1cm4oKHggPT0gLTMpID8gLTIg OiB4KTsKLSAgICAgICAgICAgIH0KLQkgICAgaWYgKG4gPT0gU05EX0NTTCkKLSAgICAgICAgICAg ICAgeF9jc2wgPSB4OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB4X2NzciA9IHg7 Ci0gICAgICAgICAgICB4X3hsYSA9IDE7ICAgICAgICAgICAgICAgICAgLyogT3ZlcnJpZGVzIGds b2JhbCBPRkYgc2V0dGluZyAqLwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNl IFNORF9YUEE6ICAgICAgICAgICAgICAgICAvKiBUcmFuc3BhcmVudCAqLwotICAgICAgICAgICAg eF94bGEgPSAwOwotICAgICAgICAgICAgeF9jc3IgPSAtMTsKLSAgICAgICAgICAgIHhfY3NsID0g LTE7Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0gICAgICAgIH0K LSAgICB9Ci0jaWZkZWYgUElQRVNFTkQKLSAgICBpZiAocHZbU05EX1JFU10uaXZhbCA+IDApIHsg LyogL1JFQ09WRVIgKi8KLSAgICAgICAgaWYgKHNuZGZpbHRlciB8fCBwdltTTkRfRkxUXS5pdmFs ID4gMCkgewotICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksIG5vIC9SRUNPVkVSIG9yIC9TVEFS VCBpZiBTRU5EIEZJTFRFUiBzZWxlY3RlZFxuIik7Ci0gICAgICAgICAgICB4ID0gLTk7Ci0gICAg ICAgICAgICBnb3RvIHhwdXR4OwotICAgICAgICB9Ci0JaWYgKHNmdHRhYlswXSA+IDAgJiYgc2Z0 dGFiW1NGVF9SRVNUXSA9PSAwKQotCSAgcHJpbnRmKCJXQVJOSU5HOiBTZXJ2ZXIgc2F5cyBpdCBk b2Vzbid0IHN1cHBvcnQgUkVTVC5cbiIpOwotICAgIH0KLSNlbmRpZiAvKiBQSVBFU0VORCAqLwot Ci0gICAgY21hcmcgPSAiIjsKLSAgICBjbWFyZzIgPSBhc25hbWJ1ZjsKLSAgICBsaW5lWzBdID0g TlVMOwotICAgIHMgPSBsaW5lOwotICAgIHdpbGQgPSAwOwotCi0gICAgc3dpdGNoIChjbXJlc3Vs dC5mY29kZSkgeyAgICAgICAgICAgLyogSG93IGRpZCB3ZSBnZXQgb3V0IG9mIHN3aXRjaCBsb29w ICovCi0gICAgICBjYXNlIF9DTUlGSTogICAgICAgICAgICAgICAgICAgICAgLyogSW5wdXQgZmls ZW5hbWUgKi8KLSAgICAgICAgaWYgKHB2W1NORF9GSUxdLml2YWwgPiAwKSB7Ci0gICAgICAgICAg ICBwcmludGYoIj9Zb3UgbWF5IG5vdCBnaXZlIGEgUFVUIGZpbGVzcGVjIGFuZCBhIC9MSVNURklM RVxuIik7Ci0gICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICBnb3RvIHhwdXR4OwotICAg ICAgICB9Ci0gICAgICAgIGNrc3RybmNweShsaW5lLGNtcmVzdWx0LnNyZXN1bHQsTElOQlVGU0la KTsgLyogTmFtZSAqLwotICAgICAgICBpZiAocHZbU05EX0FSUl0uaXZhbCA+IDApCi0gICAgICAg ICAgY2tzdHJuY3B5KGFzbmFtYnVmLGxpbmUsQ0tNQVhQQVRIKTsKLSAgICAgICAgZWxzZQotICAg ICAgICAgIHdpbGQgPSBjbXJlc3VsdC5ucmVzdWx0OyAgICAgIC8qIFdpbGQgZmxhZyAqLwotICAg ICAgICBkZWJ1ZyhGMTExLCJmdHAgcHV0IHdpbGQiLGxpbmUsd2lsZCk7Ci0gICAgICAgIGlmICgh d2lsZCAmJiAhcmVjdXJzaXZlICYmICFtcHV0KQotICAgICAgICAgIG5vbGlua3MgPSAwOwotICAg ICAgICBicmVhazsKLSAgICAgIGNhc2UgX0NNRkxEOiAgICAgICAgICAgICAgICAgICAgICAvKiBG aWVsZCAqLwotICAgICAgICAvKiBPbmx5IGFsbG93ZWQgd2l0aCAvQ09NTUFORCBhbmQgL0FSUkFZ ICovCi0gICAgICAgIGlmIChwdltTTkRfRklMXS5pdmFsID4gMCkgewotICAgICAgICAgICAgcHJp bnRmKCI/WW91IG1heSBub3QgZ2l2ZSBhIFBVVCBmaWxlc3BlYyBhbmQgYSAvTElTVEZJTEVcbiIp OwotICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgZ290byB4cHV0eDsKLSAgICAgICAg fQotCS8qIEZvciBNUFVUIGl0J3MgT0sgdG8gaGF2ZSBmaWxlc3BlY3MgdGhhdCBkb24ndCBtYXRj aCBhbnkgZmlsZXMgKi8KLQlpZiAobXB1dCkKLQkgIGJyZWFrOwotICAgICAgICBpZiAocHZbU05E X0NNRF0uaXZhbCA8IDEgJiYgcHZbU05EX0FSUl0uaXZhbCA8IDEpIHsKLSNpZmRlZiBDS1JPT1QK LSAgICAgICAgICAgIGlmIChja3Jvb3RlcnIpCi0gICAgICAgICAgICAgIHByaW50ZigiP09mZiBs aW1pdHM6ICVzXG4iLGNtcmVzdWx0LnNyZXN1bHQpOwotICAgICAgICAgICAgZWxzZQotI2VuZGlm IC8qIENLUk9PVCAqLwotICAgICAgICAgICAgICBwcmludGYoIj8lcyAtIFwiJXNcIlxuIiwKLSAg ICAgICAgICAgICAgICAgICBpc3dpbGQoY21yZXN1bHQuc3Jlc3VsdCkgPwotICAgICAgICAgICAg ICAgICAgICJObyBmaWxlcyBtYXRjaCIgOiAiRmlsZSBub3QgZm91bmQiLAotICAgICAgICAgICAg ICAgICAgIGNtcmVzdWx0LnNyZXN1bHQKLSAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAg ICAgeCA9IC05OwotICAgICAgICAgICAgZ290byB4cHV0eDsKLSAgICAgICAgfQotICAgICAgICBj a3N0cm5jcHkobGluZSxjbXJlc3VsdC5zcmVzdWx0LExJTkJVRlNJWik7Ci0gICAgICAgIGlmIChw dltTTkRfQVJSXS5pdmFsID4gMCkKLSAgICAgICAgICBja3N0cm5jcHkoYXNuYW1idWYsbGluZSxD S01BWFBBVEgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgX0NNQ0ZNOiAgICAgICAgICAg ICAgICAgICAgICAvKiBDb25maXJtYXRpb24gKi8KLSAgICAgICAgY29uZmlybWVkID0gMTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBwcmludGYoIj9VbmV4cGVjdGVk IGZ1bmN0aW9uIGNvZGU6ICVkXG4iLGNtcmVzdWx0LmZjb2RlKTsKLSAgICAgICAgeCA9IC05Owot ICAgICAgICBnb3RvIHhwdXR4OwotICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJmdHAgcHV0IHN0cmlu ZyIscywwKTsKLSAgICBkZWJ1ZyhGMTAxLCJmdHAgcHV0IGNvbmZpcm1lZCIsIiIsY29uZmlybWVk KTsKLQotICAgIC8qIFNhdmUgYW5kIGNoYW5nZSBwcm90b2NvbCBhbmQgdHJhbnNmZXIgbW9kZSAq LwotICAgIC8qIEdsb2JhbCB2YWx1ZXMgYXJlIHJlc3RvcmVkIGluIG1haW4gcGFyc2UgbG9vcCAq LwotCi0gICAgZ19kaXNwbGEgPSBmZGlzcGxhOwotICAgIGlmIChmdHBfZGlzID4gLTEpCi0gICAg ICBmZGlzcGxhID0gZnRwX2RpczsKLSAgICBnX3NraXBidXAgPSBza2lwYnVwOwotCi0gICAgaWYg KHB2W1NORF9OT0JdLml2YWwgPiAtMSkgeyAgICAgICAgLyogL05PQkFDS1VQIChza2lwIGJhY2t1 cCBmaWxlKSAqLwotICAgICAgICBnX3NraXBidXAgPSBza2lwYnVwOwotICAgICAgICBza2lwYnVw ID0gMTsKLSAgICB9Ci0gICAgaWYgKHB2W1NORF9UWVBdLml2YWwgPiAtMSkgeyAgICAgICAgLyog L1RZUEUgKi8KLSAgICAgICAgeGZpbGV0eXBlID0gcHZbU05EX1RZUF0uaXZhbDsKLSAgICAgICAg aWYgKHhmaWxldHlwZSA9PSAyKQotICAgICAgICAgIHhmaWxldHlwZSA9IC0xOwotICAgIH0KLSAg ICBpZiAocHZbU05EX0JJTl0uaXZhbCA+IDApIHsgICAgICAgICAvKiAvQklOQVJZIHJlYWxseSBt ZWFucyBiaW5hcnkuLi4gKi8KLSAgICAgICAgZm9yY2V0eXBlID0gMTsgICAgICAgICAgICAgICAg ICAvKiBTbyBza2lwIGZpbGUgc2NhbiAqLwotICAgICAgICBmdHBfdHlwID0gRlRUX0JJTjsgICAg ICAgICAgICAgIC8qIFNldCBiaW5hcnkgKi8KLSAgICB9IGVsc2UgaWYgKHB2W1NORF9UWFRdLml2 YWwgPiAwKSB7ICAvKiBTaW1pbGFybHkgZm9yIC9URVhULi4uICovCi0gICAgICAgIGZvcmNldHlw ZSA9IDE7Ci0gICAgICAgIGZ0cF90eXAgPSBGVFRfQVNDOwotICAgIH0gZWxzZSBpZiAocHZbU05E X1RFTl0uaXZhbCA+IDApIHsgIC8qIGFuZCAvVEVORVgqLwotICAgICAgICBmb3JjZXR5cGUgPSAx OwotICAgICAgICBmdHBfdHlwID0gRlRUX1RFTjsKLSAgICB9IGVsc2UgaWYgKGZ0cF9jbWRsaW4g JiYgZnRwX3hmZXJtb2RlID09IFhNT0RFX00pIHsKLSAgICAgICAgZm9yY2V0eXBlID0gMTsKLSAg ICAgICAgZnRwX3R5cCA9IGJpbmFyeTsKLSAgICAgICAgZ19mdHBfdHlwID0gYmluYXJ5OwotICAg IH0KLQotI2lmZGVmIFBJUEVTRU5ECi0gICAgaWYgKHB2W1NORF9DTURdLml2YWwgPiAwKSB7ICAg ICAgICAgLyogL0NPTU1BTkQgLSBzdHJpcCBhbnkgYnJhY2VzICovCi0gICAgICAgIGRlYnVnKEYx MTAsIlBVVCAvQ09NTUFORCBiZWZvcmUgc3RyaXBwaW5nIixzLDApOwotICAgICAgICBzID0gYnJz dHJpcChzKTsKLSAgICAgICAgZGVidWcoRjExMCwiUFVUIC9DT01NQU5EIGFmdGVyIHN0cmlwcGlu ZyIscywwKTsKLSAgICAgICAgaWYgKCEqcykgewotICAgICAgICAgICAgcHJpbnRmKCI/U29ycnks IGEgY29tbWFuZCB0byBzZW5kIGZyb20gaXMgcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAgeCA9 IC05OwotICAgICAgICAgICAgZ290byB4cHV0eDsKLSAgICAgICAgfQotICAgICAgICBjbWFyZyA9 IHM7Ci0gICAgfQotI2VuZGlmIC8qIFBJUEVTRU5EICovCi0KLS8qIFNldCB1cCAvTU9WRSBhbmQg L1JFTkFNRSAqLwotCi0gICAgaWYgKHB2W1NORF9ERUxdLml2YWwgPiAwICYmCi0gICAgICAgIChw dltTTkRfTU9WXS5pdmFsID4gMCB8fCBwdltTTkRfUkVOXS5pdmFsID4gMCkpIHsKLSAgICAgICAg cHJpbnRmKCI/U29ycnksIC9ERUxFVEUgY29uZmxpY3RzIHdpdGggL01PVkUgb3IgL1JFTkFNRVxu Iik7Ci0gICAgICAgIHggPSAtOTsKLSAgICAgICAgZ290byB4cHV0eDsKLSAgICB9Ci0jaWZkZWYg Q0tfVE1QRElSCi0gICAgaWYgKHB2W1NORF9NT1ZdLml2YWwgPiAwKSB7Ci0gICAgICAgIGludCBs ZW47Ci0gICAgICAgIGNoYXIgKiBwID0gcHZbU05EX01PVl0uc3ZhbDsKLSAgICAgICAgbGVuID0g c3RybGVuKHApOwotICAgICAgICBpZiAoIWlzZGlyKHApKSB7ICAgICAgICAgICAgICAgIC8qIENo ZWNrIGRpcmVjdG9yeSAqLwotI2lmZGVmIENLX01LRElSCi0gICAgICAgICAgICBjaGFyICogcyA9 IE5VTEw7Ci0gICAgICAgICAgICBzID0gKGNoYXIgKiltYWxsb2MobGVuICsgNCk7Ci0gICAgICAg ICAgICBpZiAocykgewotICAgICAgICAgICAgICAgIHN0cmNweShzLHApOyAgICAgICAgICAgIC8q IHNhZmUgKi8KLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgICAgICAgICAgICAgIGlmIChzW2xlbi0x XSAhPSAnOicpIHsgc1tsZW4rK10gPSAnOic7IHNbbGVuXSA9IE5VTDsgfQotI2Vsc2UKLSAgICAg ICAgICAgICAgICBpZiAoc1tsZW4tMV0gIT0gJy8nKSB7IHNbbGVuKytdID0gJy8nOyBzW2xlbl0g PSBOVUw7IH0KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotICAgICAgICAgICAgICAgIHNbbGVu KytdID0gJ1gnOwotICAgICAgICAgICAgICAgIHNbbGVuXSA9IE5VTDsKLSNpZmRlZiBOT01LRElS Ci0gICAgICAgICAgICAgICAgeCA9IC0xOwotI2Vsc2UKLSAgICAgICAgICAgICAgICB4ID0gem1r ZGlyKHMpOwotI2VuZGlmIC8qIE5PTUtESVIgKi8KLSAgICAgICAgICAgICAgICBmcmVlKHMpOwot ICAgICAgICAgICAgICAgIGlmICh4IDwgMCkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYo Ij9DYW4ndCBjcmVhdGUgXCIlc1wiXG4iLHApOwotICAgICAgICAgICAgICAgICAgICB4ID0gLTk7 Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8geHB1dHg7Ci0gICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgIHByaW50ZigiP0RpcmVjdG9yeSBcIiVzXCIg bm90IGZvdW5kXG4iLHApOwotICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgZ290byB4 cHV0eDsKLSNlbmRpZiAvKiBDS19NS0RJUiAqLwotICAgICAgICB9Ci0gICAgICAgIG1ha2VzdHIo JnNuZF9tb3ZlLHApOwotICAgIH0KLSNlbmRpZiAvKiBDS19UTVBESVIgKi8KLQotICAgIGlmIChw dltTTkRfUkVOXS5pdmFsID4gMCkgeyAgICAgICAgIC8qIC9SRU5BTUUgKi8KLSAgICAgICAgY2hh ciAqIHAgPSBwdltTTkRfUkVOXS5zdmFsOwotICAgICAgICBpZiAoIXApIHAgPSAiIjsKLSAgICAg ICAgaWYgKCEqcCkgewotICAgICAgICAgICAgcHJpbnRmKCI/TmV3IG5hbWUgcmVxdWlyZWQgZm9y IC9SRU5BTUVcbiIpOwotICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgZ290byB4cHV0 eDsKLSAgICAgICAgfQotICAgICAgICBwID0gYnJzdHJpcChwKTsKLSNpZm5kZWYgTk9TUEwKLSAg ICAvKiBJZiBuYW1lIGdpdmVuIGlzIHdpbGQsIHJlbmFtZSBzdHJpbmcgbXVzdCBjb250YWluIHZh cmlhYmxlcyAqLwotICAgICAgICBpZiAod2lsZCkgewotICAgICAgICAgICAgY2hhciAqIHMgPSB0 bXBidWY7Ci0gICAgICAgICAgICB4ID0gVE1QQlVGU0laOwotICAgICAgICAgICAgenpzdHJpbmco cCwmcywmeCk7Ci0gICAgICAgICAgICBpZiAoIXN0cmNtcCh0bXBidWYscCkpIHsKLSAgICAgICAg ICAgICAgICBwcmludGYoCi0gICAgIj8vUkVOQU1FIGZvciBmaWxlIGdyb3VwIG11c3QgY29udGFp biB2YXJpYWJsZXMgc3VjaCBhcyBcXHYoZmlsZW5hbWUpXG4iCi0gICAgICAgICAgICAgICAgICAg ICAgICk7Ci0gICAgICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgICAgIGdvdG8geHB1 dHg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgICAg ICBtYWtlc3RyKCZzbmRfcmVuYW1lLHApOwotICAgICAgICBkZWJ1ZyhGMTEwLCJGVFAgc25kX3Jl bmFtZSIsc25kX3JlbmFtZSwwKTsKLSAgICB9Ci0gICAgaWYgKHB2W1NORF9TUk5dLml2YWwgPiAw KSB7ICAgICAgICAgLyogL1NFUlZFUi1SRU5BTUUgKi8KLSAgICAgICAgY2hhciAqIHAgPSBwdltT TkRfU1JOXS5zdmFsOwotICAgICAgICBpZiAoIXApIHAgPSAiIjsKLSAgICAgICAgaWYgKCEqcCkg ewotICAgICAgICAgICAgcHJpbnRmKCI/TmV3IG5hbWUgcmVxdWlyZWQgZm9yIC9TRVJWRVItUkVO QU1FXG4iKTsKLSAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgIGdvdG8geHB1dHg7Ci0g ICAgICAgIH0KLSAgICAgICAgcCA9IGJyc3RyaXAocCk7Ci0jaWZuZGVmIE5PU1BMCi0gICAgICAg IGlmICh3aWxkKSB7Ci0gICAgICAgICAgICBjaGFyICogcyA9IHRtcGJ1ZjsKLSAgICAgICAgICAg IHggPSBUTVBCVUZTSVo7Ci0gICAgICAgICAgICB6enN0cmluZyhwLCZzLCZ4KTsKLSAgICAgICAg ICAgIGlmICghc3RyY21wKHRtcGJ1ZixwKSkgewotICAgICAgICAgICAgICAgIHByaW50ZigKLSI/ L1NFUlZFUi1SRU5BTUUgZm9yIGZpbGUgZ3JvdXAgbXVzdCBjb250YWluIHZhcmlhYmxlcyBzdWNo IGFzIFxcdihmaWxlbmFtZSlcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAg ICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICAgICAgZ290byB4cHV0eDsKLSAgICAgICAgICAg IH0KLSAgICAgICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgICAgIG1ha2VzdHIoJnNydl9y ZW5hbSxwKTsKLSAgICAgICAgZGVidWcoRjExMCwiZnRwIHB1dCBzcnZfcmVuYW0iLHNydl9yZW5h bSwwKTsKLSAgICB9Ci0gICAgaWYgKCFjb25maXJtZWQpIHsgICAgICAgICAgICAgICAgICAgLyog Q1Igbm90IHR5cGVkIHlldCwgZ2V0IG1vcmUgZmllbGRzICovCi0gICAgICAgIGNoYXIgKiBscDsK LSAgICAgICAgaWYgKG1wdXQpIHsgICAgICAgICAgICAgICAgICAgICAvKiBNUFVUIG9yIE1NT1ZF ICovCi0gICAgICAgICAgICBuZmlscyA9IDA7ICAgICAgICAgICAgICAgICAgLyogV2UgYWxyZWFk eSBoYXZlIHRoZSBmaXJzdCBvbmUgKi8KLSNpZm5kZWYgTk9NU0VORAotCSAgICBpZiAoY21yZXN1 bHQuZmNvZGUgPT0gX0NNSUZJKSB7Ci0JCS8qIEZpcnN0IGZpbGVzcGVjIGlzIHZhbGlkICovCi0J CW1zZmlsZXNbbmZpbHMrK10gPSBsaW5lOyAgICAvKiBTdG9yZSBwb2ludGVyICovCi0JCWxwID0g bGluZSArIChpbnQpc3RybGVuKGxpbmUpICsgMTsgLyogUG9pbnQgcGFzdCBpdCAqLwotCQlkZWJ1 ZyhGMTExLCJmdHAgcHV0IG1wdXQiLG1zZmlsZXNbbmZpbHMtMV0sbmZpbHMtMSk7Ci0JICAgIH0g ZWxzZSB7Ci0JCS8qIEZpcnN0IGZpbGVzcGVjIG1hdGNoZXMgbm8gZmlsZXMgKi8KLQkJZGVidWco RjExMCwiZnRwIHB1dCBtcHV0IHNraXBwaW5nIGZpcnN0IGZpbGVzcGVjIiwKLQkJICAgICAgY21y ZXN1bHQuc3Jlc3VsdCwKLQkJICAgICAgMAotCQkgICAgICApOwotCQlscCA9IGxpbmU7Ci0JICAg IH0KLQkgICAgLyogUGFyc2UgYSBmaWxlc3BlYywgYSAiZmllbGQiLCBvciBjb25maXJtYXRpb24g Ki8KLQotCSAgICBjbWZkYmkoJnNmLAkJCS8qIDFzdCBGREIgLSBmaWxlIHRvIHNlbmQgKi8KLQkJ ICAgX0NNSUZJLAkJLyogZmNvZGUgKi8KLQkJICAgIiIsCQkJLyogaGxwbXNnICovCi0JCSAgICIi LAkJCS8qIGRlZmF1bHQgKi8KLQkJICAgIiIsCQkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLQkJ ICAgbm9saW5rcyB8IHhfcmVjdXJzZSwJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KLQkJICAg MCwJCQkvKiBkaXJmbGcgMCBtZWFucyAibm90IGRpcnMgb25seSIgKi8KLQkJICAgeHhzdHJpbmcs Ci0JCSAgIE5VTEwsCi0JCSAgICZmbAotCQkgICApOwotCSAgICBjbWZkYmkoJmZsLAkJCS8qIDJu ZCBGREIgLSBsb2NhbCBmaWxlc3BlYyAqLwotCQkgICBfQ01GTEQsCQkvKiBmY29kZSAqLwotCQkg ICAiIiwJCQkvKiBobHBtc2cgKi8KLQkJICAgIiIsCQkJLyogZGVmYXVsdCAqLwotCQkgICAiIiwJ CQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotCQkgICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0 YSAxICovCi0JCSAgIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KLQkJICAgeHhzdHJp bmcsCi0JCSAgIE5VTEwsCi0JCSAgICZjbQotCQkgICApOwotCSAgICBjbWZkYmkoJmNtLAkJCS8q IDNyZCBGREIgLSBDb25maXJtYXRpb24gKi8KLQkJICAgX0NNQ0ZNLAkJLyogZmNvZGUgKi8KLQkJ ICAgIiIsCi0JCSAgICIiLAotCQkgICAiIiwKLQkJICAgMCwKLQkJICAgMCwKLQkJICAgTlVMTCwK LQkJICAgTlVMTCwKLQkJICAgTlVMTAotCQkgICApOwotCi0gICAgICAgICAgICB3aGlsZSAoIWNv bmZpcm1lZCkgewkvKiBHZXQgbW9yZSBmaWxlbmFtZXMgKi8KLQkJeCA9IGNtZmRiKCZzZik7CQkv KiBQYXJzZSBzb21ldGhpbmcgKi8KLQkJZGVidWcoRjEwMSwiZnRwIHB1dCBjbWZkYiBCIiwiIix4 KTsKLQkJZGVidWcoRjEwMSwiZnRwIHB1dCBmY29kZSBCIiwiIixjbXJlc3VsdC5mY29kZSk7Ci0J CWlmICh4IDwgMCkJCS8qIEVycm9yICovCi0JCSAgZ290byB4cHV0eDsJCS8qIG9yIHJlcGFyc2Ug bmVlZGVkICovCi0JCXN3aXRjaCAoY21yZXN1bHQuZmNvZGUpIHsKLQkJICBjYXNlIF9DTUNGTToJ CS8qIEVuZCBvZiBjb21tYW5kICovCi0JCSAgICBjb25maXJtZWQrKzsKLQkJICAgIGlmIChuZmls cyA8IDEpIHsKLQkJCWRlYnVnKEYxMDAsImZ0cCBwdXQgbXB1dCBubyBmaWxlcyBtYXRjaCIsIiIs MCk7Ci0JCQlwcmludGYoIj9ObyBmaWxlcyBtYXRjaCBNUFVUIGxpc3RcbiIpOwotCQkJeCA9IC05 OwotCQkJZ290byB4cHV0eDsKLQkJICAgIH0KLQkJICAgIGJyZWFrOwotCQkgIGNhc2UgX0NNRkxE OgkJLyogTm8gbWF0Y2ggKi8KLQkJICAgIGRlYnVnKEYxMTAsImZ0cCBwdXQgbXB1dCBza2lwcGlu ZyIsY21yZXN1bHQuc3Jlc3VsdCwwKTsKLQkJICAgIGNvbnRpbnVlOwotCQkgIGNhc2UgX0NNSUZJ OgkJLyogR29vZCBtYXRjaCAqLwotCQkgICAgcyA9IGNtcmVzdWx0LnNyZXN1bHQ7Ci0JCSAgICBt c2ZpbGVzW25maWxzKytdID0gbHA7IC8qIEdvdCBvbmUsIGNvdW50LCBwb2ludCB0byBpdCwgKi8K LQkJICAgIHAgPSBscDsJCSAgIC8qIHJlbWVtYmVyIHBvaW50ZXIsICovCi0JCSAgICB3aGlsZSAo KCpscCsrID0gKnMrKykpIC8qIGFuZCBjb3B5IGl0IGludG8gYnVmZmVyICovCi0JCSAgICAgIGlm IChscCA+IChsaW5lICsgTElOQlVGU0laKSkgeyAvKiBBdm9pZCBtZW1vcnkgbGVhayAqLwotCQkJ ICBwcmludGYoIj9NUFVUIGxpc3QgdG9vIGxvbmdcbiIpOwotCQkJICBsaW5lWzBdID0gTlVMOwot CQkJICB4ID0gLTk7Ci0JCQkgIGdvdG8geHB1dHg7Ci0JCSAgICAgIH0KLQkJICAgIGRlYnVnKEYx MTEsImZ0cCBwdXQgbXB1dCBhZGRpbmciLG1zZmlsZXNbbmZpbHMtMV0sbmZpbHMtMSk7Ci0JCSAg ICBpZiAobmZpbHMgPT0gMSkJLyogVGFrZSBjYXJlIG9mIFx2KGZpbGVzcGVjKSAqLwotCQkgICAg ICBmc3BlY1swXSA9IE5VTDsKLSNpZmRlZiBaRk5RRlAKLQkJICAgIHpmbnFmcChwLFRNUEJVRlNJ Wix0bXBidWYpOwotCQkgICAgcCA9IHRtcGJ1ZjsKLSNlbmRpZiAvKiBaRk5RRlAgKi8KLQkJICAg IGlmICgoKGludClzdHJsZW4oZnNwZWMpICsgKGludClzdHJsZW4ocCkgKyAxKSA8IGZzcGVjbGVu KSB7Ci0JCQlzdHJjYXQoZnNwZWMscCk7ICAgIC8qIHNhZmUgKi8KLQkJCXN0cmNhdChmc3BlYywi ICIpOyAgLyogc2FmZSAqLwotCQkgICAgfSBlbHNlIHsKLSNpZmRlZiBDT01NRU5UCi0JCQlwcmlu dGYoIldBUk5JTkcgLSBcXHYoZmlsZXNwZWMpIGJ1ZmZlciBvdmVyZmxvd1xuIik7Ci0jZWxzZQot CQkJZGVidWcoRjEwMSwiZG94cHV0IGZpbGVzcGVjIGJ1ZmZlciBvdmVyZmxvdyIsIiIsMCk7Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotCQkgICAgfQotCQl9Ci0JICAgIH0KLSNlbmRpZiAvKiBOT01T RU5EICovCi0gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVndWxh ciBQVVQgKi8KLSAgICAgICAgICAgIG5maWxzID0gLTE7Ci0gICAgICAgICAgICBpZiAoKHggPSBj bXR4dCh3aWxkID8KLSJcbk9wdGlvbmFsIGFzLW5hbWUgdGVtcGxhdGUgY29udGFpbmluZyByZXBs YWNlbWVudCB2YXJpYWJsZXMgXAotbGlrZSBcXHYoZmlsZW5hbWUpIiA6Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAiT3B0aW9uYWwgbmFtZSB0byBzZW5kIGl0IHdpdGgiLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIiIsJnAsTlVMTCkpIDwgMCkKLSAgICAgICAgICAgICAgZ290byB4 cHV0eDsKLQotICAgICAgICAgICAgaWYgKHApIGlmICghKnApIHAgPSBOVUxMOwotICAgICAgICAg ICAgcCA9IGJyc3RyaXAocCk7Ci0KLSAgICAgICAgICAgIGlmIChwICYmICpwKSB7Ci0gICAgICAg ICAgICAgICAgbWFrZXN0cigmKHB2W1NORF9BU05dLnN2YWwpLHApOwotICAgICAgICAgICAgICAg IGlmIChwdltTTkRfQVNOXS5zdmFsKQotICAgICAgICAgICAgICAgICAgcHZbU05EX0FTTl0uaXZh bCA9IDE7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwIHB1dCAvYXMtbmFtZSAyIixw dltTTkRfQVNOXS5zdmFsLDApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAg IC8qIFNldCBjbWFyZzIgZnJvbSBhcy1uYW1lLCBob3dldmVyIHdlIGdvdCBpdC4gKi8KLQotICAg IENIRUNLQ09OTigpOwotICAgIGlmIChwdltTTkRfQVNOXS5pdmFsID4gMCAmJiBwdltTTkRfQVNO XS5zdmFsICYmICFhc25hbWJ1ZlswXSkgewotICAgICAgICBjaGFyICogcDsKLSAgICAgICAgcCA9 IGJyc3RyaXAocHZbU05EX0FTTl0uc3ZhbCk7Ci0gICAgICAgIGNrc3RybmNweShhc25hbWJ1Zixw LENLTUFYUEFUSCsxKTsKLSAgICB9Ci0gICAgZGVidWcoRjExMCwiZnRwIHB1dCBhc25hbWJ1ZiIs YXNuYW1idWYsMCk7Ci0KLSAgICBpZiAocHZbU05EX0ZJTF0uaXZhbCA+IDApIHsKLSAgICAgICAg aWYgKGNvbmZpcm1lZCkgewotICAgICAgICAgICAgaWYgKHpvcGVuaShaTUZJTEUscHZbU05EX0ZJ TF0uc3ZhbCkgPCAxKSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwIHB1dCBjYW4n dCBvcGVuIixwdltTTkRfRklMXS5zdmFsLDApOwotICAgICAgICAgICAgICAgIHByaW50ZigiP0Zh aWx1cmUgdG8gb3BlbiAlc1xuIixwdltTTkRfRklMXS5zdmFsKTsKLSAgICAgICAgICAgICAgICB4 ID0gLTk7Ci0gICAgICAgICAgICAgICAgZ290byB4cHV0eDsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIG1ha2VzdHIoJmZpbGVmaWxlLHB2W1NORF9GSUxdLnN2YWwpOyAvKiBPcGVuLCByZW1l bWJlciBuYW1lICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgUFVUIC9MSVNURklMRSBv cGVuZWQiLGZpbGVmaWxlLDApOwotICAgICAgICAgICAgd2lsZCA9IDE7Ci0gICAgICAgIH0KLSAg ICB9Ci0gICAgaWYgKGNvbmZpcm1lZCAmJiAhbGluZVswXSAmJiAhZmlsZWZpbGUpIHsKLSNpZm5k ZWYgTk9NU0VORAotICAgICAgICBpZiAoZmlsZWhlYWQpIHsgICAgICAgICAgICAgICAgIC8qIE9L IGlmIHdlIGhhdmUgYSBTRU5ELUxJU1QgKi8KLSAgICAgICAgICAgIG5maWxzID0gZmlsZXNpbmxp c3Q7Ci0gICAgICAgICAgICBzbmRzcmMgPSBuZmlsczsgICAgICAgICAgICAgLyogTGlrZSBNU0VO RCAqLwotICAgICAgICAgICAgYWRkbGlzdCA9IDE7ICAgICAgICAgICAgICAgIC8qIEJ1dCB1c2lu ZyBhIGRpZmZlcmVudCBsaXN0Li4uICovCi0gICAgICAgICAgICBmaWxlbmV4dCA9IGZpbGVoZWFk OwotICAgICAgICAgICAgZ290byBkb3B1dDsKLSAgICAgICAgfQotI2VuZGlmIC8qIE5PTVNFTkQg Ki8KLSAgICAgICAgcHJpbnRmKCI/RmlsZW5hbWUgcmVxdWlyZWQgYnV0IG5vdCBnaXZlblxuIik7 Ci0gICAgICAgIHggPSAtOTsKLSAgICAgICAgZ290byB4cHV0eDsKLSAgICB9Ci0jaWZuZGVmIE5P TVNFTkQKLSAgICBhZGRsaXN0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBEb24ndCB1 c2UgU0VORC1MSVNULiAqLwotI2VuZGlmIC8qIE5PTVNFTkQgKi8KLQotICAgIGlmIChtcHV0KSB7 ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1QVVQgKHJhdGhlciB0aGFuIFBVVCkgKi8KLSNp Zm5kZWYgTk9NU0VORAotICAgICAgICBjbWxpc3QgPSBtc2ZpbGVzOyAgICAgICAgICAgICAgIC8q IExpc3Qgb2YgZmlsZXNwZWNzICovCi0gICAgICAgIHNuZHNyYyA9IG5maWxzOyAgICAgICAgICAg ICAgICAgLyogcmF0aGVyIGZpbGVzcGVjIGFuZCBhcy1uYW1lICovCi0jZW5kaWYgLyogTk9NU0VO RCAqLwotICAgICAgICBwaXBlc2VuZCA9IDA7Ci0gICAgfSBlbHNlIGlmIChmaWxlZmlsZSkgeyAg ICAgICAgICAgICAgLyogRmlsZSBjb250YWlucyBsaXN0IG9mIGZpbGVuYW1lcyAqLwotICAgICAg ICBzID0gIiI7Ci0gICAgICAgIGNtYXJnID0gIiI7Ci0gICAgICAgIGxpbmVbMF0gPSBOVUw7Ci0g ICAgICAgIG5maWxzID0gMTsKLSAgICAgICAgc25kc3JjID0gMTsKLQotICAgIH0gZWxzZSBpZiAo cHZbU05EX0FSUl0uaXZhbCA8IDEgJiYgcHZbU05EX0NNRF0uaXZhbCA8IDEpIHsKLQotICAgICAg ICAvKiBOb3QgTVNFTkQsIE1NT1ZFLCAvTElTVCwgb3IgL0FSUkFZICovCi0gICAgICAgIG5maWxz ID0gc25kc3JjID0gLTE7Ci0gICAgICAgIGlmICghd2lsZCkgewotICAgICAgICAgICAgaWYgKHpj aGtpKHMpIDwgMCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiP1JlYWQgYWNjZXNzIGRlbmll ZCAtIFwiJXNcIlxuIiwgcyk7Ci0gICAgICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAg ICAgIGdvdG8geHB1dHg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHMg IT0gbGluZSkgICAgICAgICAgICAgICAgICAvKiBXZSBtaWdodCBhbHJlYWR5IGhhdmUgZG9uZSB0 aGlzLiAqLwotICAgICAgICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsgIC8qIENvcHkg b2Ygc3RyaW5nIGp1c3QgcGFyc2VkLiAqLwotI2lmZGVmIERFQlVHCi0gICAgICAgIGVsc2UKLSAg ICAgICAgICBkZWJ1ZyhGMTEwLCJkb3hwdXQgbGluZT1zIixsaW5lLDApOwotI2VuZGlmIC8qIERF QlVHICovCi0gICAgICAgIGNtYXJnID0gbGluZTsgICAgICAgICAgICAgICAgICAgLyogRmlsZSB0 byBzZW5kICovCi0gICAgfQotI2lmbmRlZiBOT01TRU5ECi0gICAgemZucWZwKGNtYXJnLGZzcGVj bGVuLGZzcGVjKTsgICAgICAgLyogR2V0IGZ1bGwgbmFtZSAqLwotI2VuZGlmIC8qIE5PTVNFTkQg Ki8KLQotICAgIGlmICghbXB1dCkgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBhbGwg YnV0IE1QVVQuLi4gKi8KLSNpZmRlZiBQSVBFU0VORAotICAgICAgICBpZiAocHZbU05EX0NNRF0u aXZhbCA+IDApICAgICAgIC8qIC9DT01NQU5EIHNldHMgcGlwZXNlbmQgZmxhZyAqLwotICAgICAg ICAgIHBpcGVzZW5kID0gMTsKLSAgICAgICAgZGVidWcoRjEwMSwiZnRwIHB1dCAvQ09NTUFORCBw aXBlc2VuZCIsIiIscGlwZXNlbmQpOwotICAgICAgICBpZiAocGlwZXNlbmQgJiYgZmlsZWZpbGUp IHsKLSAgICAgICAgICAgIHByaW50ZigiP0ludmFsaWQgc3dpdGNoIGNvbWJpbmF0aW9uXG4iKTsK LSAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgIGdvdG8geHB1dHg7Ci0gICAgICAgIH0K LSNlbmRpZiAvKiBQSVBFU0VORCAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgLyogSWYgYXMtbmFt ZSBnaXZlbiBhbmQgZmlsZXNwZWMgaXMgd2lsZCwgYXMtbmFtZSBtdXN0IGNvbnRhaW4gdmFyaWFi bGVzICovCi0gICAgICAgIGlmICgod2lsZCB8fCBtcHV0KSAmJiBhc25hbWJ1ZlswXSkgewotICAg ICAgICAgICAgY2hhciAqIHMgPSB0bXBidWY7Ci0gICAgICAgICAgICB4ID0gVE1QQlVGU0laOwot ICAgICAgICAgICAgenpzdHJpbmcoYXNuYW1idWYsJnMsJngpOwotICAgICAgICAgICAgaWYgKCFz dHJjbXAodG1wYnVmLGFzbmFtYnVmKSkgewotICAgICAgICAgICAgICAgIHByaW50ZigKLSAgICAi P0FzLW5hbWUgZm9yIGZpbGUgZ3JvdXAgbXVzdCBjb250YWluIHZhcmlhYmxlcyBzdWNoIGFzIFxc dihmaWxlbmFtZSlcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAg ICB4ID0gLTk7Ci0gICAgICAgICAgICAgICAgZ290byB4cHV0eDsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgfQotCi0gIGRvcHV0OgotCi0gICAgaWYg KHB2W1NORF9TSEhdLml2YWwgPiAwKSB7ICAgICAgICAgLyogU0VORCAvUVVJRVQuLi4gKi8KLSAg ICAgICAgZmRpc3BsYSA9IDA7Ci0gICAgICAgIGRlYnVnKEYxMDEsImZ0cCBwdXQgZGlzcGxheSIs IiIsZmRpc3BsYSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZGlzcGxhID0gMTsKLSAgICAgICAg aWYgKGZ0cF9kZWIpCi0JICBmZGlzcGxhID0gWFlGRF9COwotICAgIH0KLQotI2lmZGVmIFBVVEFS UkFZICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNFTkQgL0FSUkFZLi4uICovCi0gICAgaWYg KHB2W1NORF9BUlJdLml2YWwgPiAwKSB7Ci0gICAgICAgIGlmICghYXApIHsgeCA9IC0yOyBnb3Rv IHhwdXR4OyB9IC8qIChzaG91bGRuJ3QgaGFwcGVuKSAqLwotICAgICAgICBpZiAocmFuZ2VbMF0g PT0gLTEpICAgICAgICAgICAgIC8qIElmIGxvdyBlbmQgb2YgcmFuZ2Ugbm90IHNwZWNpZmllZCAq LwotICAgICAgICAgIHJhbmdlWzBdID0gMTsgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgdG8g MSAqLwotICAgICAgICBpZiAocmFuZ2VbMV0gPT0gLTEpICAgICAgICAgICAgIC8qIElmIGhpZ2gg bm90IHNwZWNpZmllZCAqLwotICAgICAgICAgIHJhbmdlWzFdID0gYV9kaW1bYXJyYXl4XTsgICAg IC8qIGRlZmF1bHQgdG8gc2l6ZSBvZiBhcnJheSAqLwotICAgICAgICBpZiAoKHJhbmdlWzBdIDwg MCkgfHwgICAgICAgICAgIC8qIENoZWNrIHJhbmdlICovCi0gICAgICAgICAgICAocmFuZ2VbMF0g PiBhX2RpbVthcnJheXhdKSB8fAotICAgICAgICAgICAgKHJhbmdlWzFdIDwgcmFuZ2VbMF0pIHx8 Ci0gICAgICAgICAgICAocmFuZ2VbMV0gPiBhX2RpbVthcnJheXhdKSkgewotICAgICAgICAgICAg cHJpbnRmKCI/QmFkIGFycmF5IHJhbmdlIC0gWyVkOiVkXVxuIixyYW5nZVswXSxyYW5nZVsxXSk7 Ci0gICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICBnb3RvIHhwdXR4OwotICAgICAgICB9 Ci0gICAgICAgIHNuZGFycmF5ID0gYXA7ICAgICAgICAgICAgICAgICAgLyogQXJyYXkgcG9pbnRl ciAqLwotICAgICAgICBzbmR4aW4gPSBhcnJheXg7ICAgICAgICAgICAgICAgIC8qIEFycmF5IGlu ZGV4ICovCi0gICAgICAgIHNuZHhsbyA9IHJhbmdlWzBdOyAgICAgICAgICAgICAgLyogQXJyYXkg cmFuZ2UgKi8KLSAgICAgICAgc25keGhpID0gcmFuZ2VbMV07Ci0gICAgICAgIHNuZHhuYW1bN10g PSAoY2hhcikoKHNuZHhpbiA9PSAxKSA/IDY0IDogc25keGluICsgQVJSQVlCQVNFKTsKLSAgICAg ICAgaWYgKCFhc25hbWJ1ZlswXSkKLSAgICAgICAgICBja3N0cm5jcHkoYXNuYW1idWYsc25keG5h bSxDS01BWFBBVEgpOwotICAgICAgICBjbWFyZyA9ICIiOwotICAgIH0KLSNlbmRpZiAvKiBQVVRB UlJBWSAqLwotCi0gICAgbW92aW5nID0gMDsKLQotICAgIGlmIChwdltTTkRfQVJSXS5pdmFsIDwg MSkgeyAgICAgICAgIC8qIEZpbGUgc2VsZWN0aW9uICYgZGlzcG9zaXRpb24uLi4gKi8KLSAgICAg ICAgaWYgKHB2W1NORF9ERUxdLml2YWwgPiAwKSAgICAgICAvKiAvREVMRVRFIHdhcyBzcGVjaWZp ZWQgKi8KLSAgICAgICAgICBtb3ZpbmcgPSAxOwotICAgICAgICBpZiAocHZbU05EX0FGVF0uaXZh bCA+IDApICAgICAgIC8qIENvcHkgU0VORCBjcml0ZXJpYSAqLwotICAgICAgICAgIGNrc3RybmNw eShzbmRhZnRlcixwdltTTkRfQUZUXS5zdmFsLDE5KTsKLSAgICAgICAgaWYgKHB2W1NORF9CRUZd Lml2YWwgPiAwKQotICAgICAgICAgIGNrc3RybmNweShzbmRiZWZvcmUscHZbU05EX0JFRl0uc3Zh bCwxOSk7Ci0gICAgICAgIGlmIChwdltTTkRfTkFGXS5pdmFsID4gMCkKLSAgICAgICAgICBja3N0 cm5jcHkoc25kbmFmdGVyLHB2W1NORF9OQUZdLnN2YWwsMTkpOwotICAgICAgICBpZiAocHZbU05E X05CRV0uaXZhbCA+IDApCi0gICAgICAgICAgY2tzdHJuY3B5KHNuZG5iZWZvcmUscHZbU05EX05C RV0uc3ZhbCwxOSk7Ci0gICAgICAgIGlmIChwdltTTkRfRVhDXS5pdmFsID4gMCkKLSAgICAgICAg ICBtYWtlbGlzdChwdltTTkRfRVhDXS5zdmFsLHNuZGV4Y2VwdCxOU05ERVhDRVBUKTsKLSAgICAg ICAgaWYgKHB2W1NORF9TTUFdLml2YWwgPiAtMSkKLSAgICAgICAgICBzbmRzbWFsbGVyID0gcHZb U05EX1NNQV0ud3ZhbDsKLSAgICAgICAgaWYgKHB2W1NORF9MQVJdLml2YWwgPiAtMSkKLSAgICAg ICAgICBzbmRsYXJnZXIgPSBwdltTTkRfTEFSXS53dmFsOwotICAgICAgICBpZiAocHZbU05EX05B TV0uaXZhbCA+IC0xKQotICAgICAgICAgIHhfY252ID0gcHZbU05EX05BTV0uaXZhbDsKLSAgICAg ICAgaWYgKHB2W1NORF9VU05dLml2YWwgPiAtMSkKLSAgICAgICAgICB4X3VzbiA9IHB2W1NORF9V U05dLml2YWw7Ci0gICAgICAgIGlmIChwdltTTkRfRVJSXS5pdmFsID4gLTEpCi0gICAgICAgICAg cHV0ZXJyb3IgPSBwdltTTkRfRVJSXS5pdmFsOwotCi0jaWZkZWYgRE9VUERBVEUKLSAgICAgICAg aWYgKHB2W1NORF9VUERdLml2YWwgPiAwKSB7Ci0gICAgICAgICAgICBpZiAoeF91c24pIHsKLSAg ICAgICAgICAgICAgICBwcmludGYoIj9Db25mbGljdGluZyBzd2l0Y2hlczogL1VQREFURSAvVU5J UVVFXG4iKTsKLSAgICAgICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICAgICAgZ290byB4 cHV0eDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHB1dGZsYWdzIHw9IFBVVF9VUEQ7Ci0J ICAgIGZ0cF9kYXRlcyB8PSAyOwotICAgICAgICB9Ci0jaWZkZWYgQ09NTUVOVAotCS8qIFRoaXMg d29ya3MgYnV0IGl0J3MgdXNlbGVzcywgbWF5YmUgZGFuZ2Vyb3VzICovCi0gICAgICAgIGlmIChw dltTTkRfRElGXS5pdmFsID4gMCkgewotICAgICAgICAgICAgaWYgKHhfdXNuKSB7Ci0gICAgICAg ICAgICAgICAgcHJpbnRmKCI/Q29uZmxpY3Rpbmcgc3dpdGNoZXM6IC9EQVRFUy1ESUZGRVIgL1VO SVFVRVxuIik7Ci0gICAgICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgICAgIGdvdG8g eHB1dHg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdXRmbGFncyB8PSBQVVRfRElGOwot CSAgICBmdHBfZGF0ZXMgfD0gMjsKLSAgICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNl bmRpZiAvKiBET1VQREFURSAqLwotCi0gICAgICAgIGlmIChwdltTTkRfU0lNXS5pdmFsID4gMCkK LSAgICAgICAgICBwdXRmbGFncyB8PSBQVVRfU0lNOwotCi0gICAgICAgIGlmIChwdltTTkRfUFJN XS5pdmFsID4gLTEpIHsKLSNpZmRlZiBVTklYCi0gICAgICAgICAgICBpZiAoeF91c24pIHsKLSAg ICAgICAgICAgICAgICBwcmludGYoIj9Db25mbGljdGluZyBzd2l0Y2hlczogL1BFUk1JU1NJT05T IC9VTklRVUVcbiIpOwotICAgICAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgICAgICBn b3RvIHhwdXR4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgeF9wcm0gPSBwdltTTkRfUFJN XS5pdmFsOwotI2Vsc2UgLyogVU5JWCAqLwotICAgICAgICAgICAgcHJpbnRmKCI/L1BFUk1JU1NJ T05TIHN3aXRjaCBpcyBub3Qgc3VwcG9ydGVkXG4iKTsKLSNlbmRpZiAvKiBVTklYICovCi0gICAg ICAgIH0KLSNpZmRlZiBGVFBfUkVTVEFSVAotICAgICAgICBpZiAocHZbU05EX1JFU10uaXZhbCA+ IDApIHsKLQkgICAgaWYgKCFzaXplb2spIHsKLQkJcHJpbnRmKCI/UFVUIC9SRVNUQVJUIGNhbid0 IGJlIHVzZWQgYmVjYXVzZSBTSVpFIGRpc2FibGVkLlxuIik7Ci0gICAgICAgICAgICAgICAgeCA9 IC05OwotICAgICAgICAgICAgICAgIGdvdG8geHB1dHg7Ci0JICAgIH0KLSAgICAgICAgICAgIGlm ICh4X3VzbiB8fCBwdXRmbGFncykgewotICAgICAgICAgICAgICAgIHByaW50ZigiP0NvbmZsaWN0 aW5nIHN3aXRjaGVzOiAvUkVDT1ZFUiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgeF91 c24gJiYgcHV0ZmxhZ3MgPyAiL1VOSVFVRSAvVVBEQVRFIiA6Ci0gICAgICAgICAgICAgICAgICAg ICAgICh4X3VzbiA/ICIvVU5JUVVFIiA6ICIvVVBEQVRFIikKLSAgICAgICAgICAgICAgICAgICAg ICAgKTsKLSAgICAgICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICAgICAgZ290byB4cHV0 eDsKLSAgICAgICAgICAgIH0KLSNpZm5kZWYgTk9DU0VUUwotICAgICAgICAgICAgaWYgKHhfeGxh ICYmCi0gICAgICAgICAgICAgICAgKHhfY3NsID09IEZDX1VDUzIgfHwKLSAgICAgICAgICAgICAg ICAgeF9jc2wgPT0gRkNfVVRGOCB8fAotICAgICAgICAgICAgICAgICB4X2NzciA9PSBGQ19VQ1My IHx8Ci0gICAgICAgICAgICAgICAgIHhfY3NyID09IEZDX1VURjgpKSB7Ci0gICAgICAgICAgICAg ICAgcHJpbnRmKCI/L1JFQ09WRVIgY2FuIG5vdCBiZSB1c2VkIHdpdGggVW5pY29kZSB0cmFuc2xh dGlvblxuIik7Ci0gICAgICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgICAgIGdvdG8g eHB1dHg7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotICAgICAgICAgICAg cHV0ZmxhZ3MgPSBQVVRfUkVTOwotICAgICAgICB9Ci0jZW5kaWYgLyogRlRQX1JFU1RBUlQgKi8K LSAgICB9Ci0gICAgZGVidWcoRjEwMSwiZnRwIFBVVCByZXN0YXJ0IiwiIixwdXRmbGFncyAmIFBV VF9SRVMpOwotICAgIGRlYnVnKEYxMDEsImZ0cCBQVVQgdXBkYXRlIiwiIixwdXRmbGFncyAmIFBV VF9VUEQpOwotCi0jaWZkZWYgUElQRVNFTkQKLSAgICBpZiAocHZbU05EX0ZMVF0uaXZhbCA+IDAp IHsgICAgICAgICAvKiBIYXZlIFNFTkQgRklMVEVSPyAqLwotICAgICAgICBpZiAoIXB2W1NORF9G TFRdLnN2YWwpIHsKLSAgICAgICAgICAgIHNuZGZpbHRlciA9IE5VTEw7Ci0gICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICBzbmRmaWx0ZXIgPSAoY2hhciAqKSBtYWxsb2MoKGludCkgc3RybGVu KHB2W1NORF9GTFRdLnN2YWwpICsgMSk7Ci0gICAgICAgICAgICBpZiAoc25kZmlsdGVyKSBzdHJj cHkoc25kZmlsdGVyLHB2W1NORF9GTFRdLnN2YWwpOyAvKiBzYWZlICovCi0gICAgICAgIH0KLSAg ICAgICAgZGVidWcoRjExMCwiZnRwIHB1dCAvRklMVEVSIiwgc25kZmlsdGVyLCAwKTsKLSAgICB9 Ci0gICAgaWYgKHNuZGZpbHRlciB8fCBwaXBlc2VuZCkgICAgICAgICAgLyogTm8gL1VQREFURSBv ciAvUkVTVEFSVCAqLwotICAgICAgaWYgKHB1dGZsYWdzKSAgICAgICAgICAgICAgICAgICAgIC8q IHdpdGggcGlwZXMgb3IgZmlsdGVycyAqLwotICAgICAgICBwdXRmbGFncyA9IDA7Ci0jZW5kaWYg LyogUElQRVNFTkQgKi8KLQotICAgIHRmYyA9IChDS19PRkZfVCkwOwkJCS8qIEluaXRpYWxpemUg c3RhdHMgYW5kIGNvdW50ZXJzICovCi0gICAgZmlsY250ID0gMDsKLSAgICBwa3RudW0gPSAwOwot ICAgIHNwYWNrZXRzID0gMEw7Ci0KLSAgICBpZiAod2lsZCkgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiAoaXMgdGhpcyBuZWNlc3Nhcnk/KSAqLwotICAgICAgY3ggPSBGVFBfTVBVOwotCi0g ICAgdDAgPSBnbXN0aW1lcigpOyAgICAgICAgICAgICAgICAgICAgLyogUmVjb3JkIHN0YXJ0aW5n IHRpbWUgKi8KLQotICAgIGRvbmUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExv b3AgY29udHJvbCAqLwotICAgIGNhbmNlbGdyb3VwID0gMDsKLQotICAgIGNkbGV2ZWwgPSAwOwot ICAgIGNkc2ltbHZsID0gMDsKLSAgICB3aGlsZSAoIWRvbmUgJiYgIWNhbmNlbGdyb3VwKSB7ICAg ICAvKiBMb29wIGZvciBhbGwgZmlsZXMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBvciB1bnRpbCBjYW5jZWxlZC4gKi8KLSNpZmRlZiBGVFBfUFJPWFkKLSAg ICAgICAgLyoKLSAgICAgICAgICAgSWYgd2UgYXJlIHVzaW5nIGEgcHJveHksIHdlIGRvbid0IHVz ZSB0aGUgbG9jYWwgZmlsZSBsaXN0OwotICAgICAgICAgICBpbnN0ZWFkIHdlIHVzZSB0aGUgbGlz dCBvbiB0aGUgcmVtb3RlIG1hY2hpbmUgd2hpY2ggd2Ugd2FudAotICAgICAgICAgICBzZW50IHRv IHNvbWVvbmUgZWxzZSwgYW5kIHdlIHVzZSByZW1nbG9iKCkgdG8gZ2V0IHRoZSBuYW1lcy4KLSAg ICAgICAgICAgQnV0IGluIHRoYXQgY2FzZSB3ZSBzaG91bGRuJ3QgZXZlbiBiZSBleGVjdXRpbmcg dGhpcyByb3V0aW5lOwotICAgICAgICAgICBzZWUgZnRwX21wdXQoKS4KLSAgICAgICAgKi8KLSNl bmRpZiAvKiBGVFBfUFJPWFkgKi8KLQotICAgICAgICBjYW5jZWxmaWxlID0gMDsKLSAgICAgICAg eCA9IGduZmlsZSgpOyAgICAgICAgICAgICAgICAgICAvKiBHZXQgbmV4dCBmaWxlIGZyb20gbGlz dChzKSAqLwotCi0gICAgICAgIGlmICh4ID09IDApICAgICAgICAgICAgICAgICAgICAgLyogKHNl ZSBnbmZpbGUoKSBjb21tZW50cy4uLikgKi8KLSAgICAgICAgICB4ID0gZ25mZXJyb3I7Ci0gICAg ICAgIGRlYnVnKEYxMTEsIkZUUCBQVVQgZ25maWxlIixmaWxuYW0seCk7Ci0gICAgICAgIGRlYnVn KEYxMTEsIkZUUCBQVVQgYmluYXJ5IixmaWxuYW0sYmluYXJ5KTsKLQotICAgICAgICBzd2l0Y2gg KHgpIHsKLSAgICAgICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIHRv IHNlbmQgKi8KLSAgICAgICAgICAgIHMyID0gYXNuYW1idWY7Ci0jaWZuZGVmIE5PU1BMCi0gICAg ICAgICAgICBpZiAoYXNuYW1idWZbMF0pIHsgICAgICAgICAgLyogQXMtbmFtZSAqLwotICAgICAg ICAgICAgICAgIGludCBuOyBjaGFyICpwOyAgICAgICAgIC8qIHRvIGJlIGV2YWx1YXRlZC4uLiAq LwotICAgICAgICAgICAgICAgIG4gPSBUTVBCVUZTSVo7Ci0gICAgICAgICAgICAgICAgcCA9IHRt cGJ1ZjsKLSAgICAgICAgICAgICAgICB6enN0cmluZyhhc25hbWJ1ZiwmcCwmbik7Ci0gICAgICAg ICAgICAgICAgczIgPSB0bXBidWY7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwIHB1 dCBhc25hbWUiLHMyLDApOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0gICAg ICAgICAgICByYyA9IHB1dGZpbGUoY3gsICAgICAgICAgICAgLyogRnVuY3Rpb24gKFBVVCwgQVBQ RU5EKSAqLwotICAgICAgICAgICAgICAgICAgICBmaWxuYW0sIHMyLCAgICAgICAgIC8qIE5hbWUg dG8gc2VuZCwgYXMtbmFtZSAqLwotICAgICAgICAgICAgICAgICAgICBmb3JjZXR5cGUsIG1vdmlu ZywgIC8qIFBhcmFtZXRlcnMgZnJvbSBzd2l0Y2hlcy4uLiAqLwotICAgICAgICAgICAgICAgICAg ICBzbmRfbW92ZSwgc25kX3JlbmFtZSwgc3J2X3JlbmFtLAotICAgICAgICAgICAgICAgICAgICB4 X2NudiwgeF91c24sIHhmaWxldHlwZSwgeF9wcm0sCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICAgICAg ICAgICAgICAgICAgeF9jc2wsICgheF94bGEgPyAtMSA6IHhfY3NyKSwKLSNlbHNlCi0gICAgICAg ICAgICAgICAgICAgIC0xLCAtMSwKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0gICAgICAgICAgICAg ICAgICAgIHB1dGZsYWdzCi0gICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBkZWJ1 ZyhGMTExLCJmdHAgcHV0IHB1dGZpbGUgcmMiLGZpbG5hbSxyYyk7Ci0gICAgICAgICAgICBkZWJ1 ZyhGMTExLCJmdHAgcHV0IHB1dGZpbGUgY2FuY2VsZmlsZSIsZmlsbmFtLGNhbmNlbGZpbGUpOwot ICAgICAgICAgICAgZGVidWcoRjExMSwiZnRwIHB1dCBwdXRmaWxlIGNhbmNlbGdyb3VwIixmaWxu YW0sY2FuY2VsZ3JvdXApOwotICAgICAgICAgICAgaWYgKHJjID4gLTEpIHsKLSAgICAgICAgICAg ICAgICBnb29kKys7Ci0gICAgICAgICAgICAgICAgc3RhdHVzID0gMTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIGlmIChjYW5jZWxmaWxlKQotICAgICAgICAgICAgICBjb250aW51ZTsKLSAg ICAgICAgICAgIGlmIChyYyA8IDApIHsKLSAgICAgICAgICAgICAgICBmdHBfZmFpKys7Ci0gICAg ICAgICAgICAgICAgaWYgKHB1dGVycm9yKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9 IDA7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0ZhdGFsIHVwbG9hZCBlcnJvcjogJXNc biIsZmlsbmFtKTsKLSAgICAgICAgICAgICAgICAgICAgZG9uZSsrOwotICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgIGNhc2Ug MDogICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIG1vcmUgZmlsZXMsIGRvbmUgKi8KLSAgICAg ICAgICAgIGRvbmUrKzsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgIGNhc2UgLTE6 Ci0gICAgICAgICAgICBwcmludGYoIj8lczogZmlsZSBub3QgZm91bmQgLSBcIiVzXCJcbiIsCi0g ICAgICAgICAgICAgICAgICAgcHV0ZXJyb3IgPyAiRmF0YWwiIDogIldhcm5pbmciLAotICAgICAg ICAgICAgICAgICAgIGZpbG5hbQotICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBp ZiAocHV0ZXJyb3IpIHsKLSAgICAgICAgICAgICAgICBzdGF0dXMgPSAwOwotICAgICAgICAgICAg ICAgIGRvbmUrKzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgIGNhc2UgLTI6Ci0gICAgICAgICAgICBpZiAocHV0 ZXJyb3IpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9GYXRhbDogZmlsZSBub3QgZm91bmQg LSBcIiVzXCJcbiIsIGZpbG5hbSk7Ci0gICAgICAgICAgICAgICAgc3RhdHVzID0gMDsKLSAgICAg ICAgICAgICAgICBkb25lKys7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgICAgICAgLyogTm90IHJlYWRhYmxl LCBrZWVwIGdvaW5nICovCi0gICAgICAgICAgY2FzZSAtMzoKLSAgICAgICAgICAgIGlmIChwdXRl cnJvcikgewotICAgICAgICAgICAgICAgIHByaW50ZigiP0ZhdGFsOiBSZWFkIGFjY2VzcyBkZW5p ZWQgLSBcIiVzXCJcbiIsIGZpbG5hbSk7Ci0gICAgICAgICAgICAgICAgc3RhdHVzID0gMDsKLSAg ICAgICAgICAgICAgICBkb25lKys7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICB9Ci0gICAgICAgICAgICBwcmludGYoIj9XYXJuaW5nIGFjY2VzcyBkZW5pZWQgLSBcIiVzXCJc biIsIGZpbG5hbSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSNpZmRlZiBDT01NRU5UCi0gICAg ICAgICAgY2FzZSAtNDogICAgICAgICAgICAgICAgICAgICAgLyogQ2FuY2VsZWQgKi8KLSAgICAg ICAgICAgIGRvbmUrKzsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIENPTU1FTlQgKi8K LSAgICAgICAgICBjYXNlIC01OgotICAgICAgICAgICAgcHJpbnRmKCI/VG9vIG1hbnkgZmlsZXMg bWF0Y2hcbiIpOwotICAgICAgICAgICAgZG9uZSsrOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgY2FzZSAtNjoKLSAgICAgICAgICAgIGlmIChnb29kIDwgMSkKLSAgICAgICAgICAgICAg cHJpbnRmKCI/Tm8gZmlsZXMgc2VsZWN0ZWRcbiIpOwotICAgICAgICAgICAgZG9uZSsrOwotICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHByaW50Zigi P2dldG5leHRmaWxlKCkgLSB1bmtub3duIGZhaWx1cmVcbiIpOwotICAgICAgICAgICAgZG9uZSsr OwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChjZGxldmVsID4gMCkgewotICAgICAgICB3aGls ZSAoY2RsZXZlbC0tKSB7Ci0gICAgICAgICAgICBpZiAoY2RzaW1sdmwpIHsKLSAgICAgICAgICAg ICAgICBjZHNpbWx2bC0tOwotICAgICAgICAgICAgfSBlbHNlIGlmICghZG9mdHBjZHVwKCkpCi0g ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChzdGF0dXMgPiAw KSB7Ci0gICAgICAgIGlmIChjYW5jZWxncm91cCkKLSAgICAgICAgICBzdGF0dXMgPSAwOwotICAg ICAgICBlbHNlIGlmIChjYW5jZWxmaWxlICYmIGdvb2QgPCAxKQotICAgICAgICAgIHN0YXR1cyA9 IDA7Ci0gICAgfQotICAgIHN1Y2Nlc3MgPSBzdGF0dXM7Ci0gICAgeCA9IHN1Y2Nlc3M7Ci0KLSAg eHB1dHg6Ci0gICAgaWYgKHggPiAtMSkgewotI2lmZGVmIEdGVElNRVIKLSAgICAgICAgdDEgPSBn bXN0aW1lcigpOyAgICAgICAgICAgICAgICAvKiBFbmQgdGltZSAqLwotICAgICAgICBzZWMgPSAo Q0tGTE9BVCkoKENLRkxPQVQpKHQxIC0gdDApIC8gMTAwMC4wKTsgLyogU3RhdHMgKi8KLSAgICAg ICAgaWYgKCFzZWMpIHNlYyA9IDAuMDAxOwotICAgICAgICBmcHRzZWNzID0gc2VjOwotI2Vsc2UK LSAgICAgICAgc2VjID0gKHQxIC0gdDApIC8gMTAwMDsKLSAgICAgICAgaWYgKCFzZWMpIHNlYyA9 IDE7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotICAgICAgICB0ZmNwcyA9IChsb25nKSAodGZjIC8g c2VjKTsKLSAgICAgICAgdHNlY3MgPSAoaW50KXNlYzsKLSAgICAgICAgbGFzdHhmZXIgPSBXX0ZU UHxXX1NFTkQ7Ci0gICAgICAgIHhmZXJzdGF0ID0gc3VjY2VzczsKLSAgICAgICAgaWYgKGRweWFj dGl2ZSkKLQkgIGZ0c2NyZWVuKHN0YXR1cyA+IDAgPyBTQ1JfVEMgOiBTQ1JfQ1csIDAsIChDS19P RkZfVCkwLCAiIik7Ci0gICAgfQotICAgIGZvciAoaSA9IDA7IGkgPD0gU05EX01BWDsgaSsrKSB7 ICAgIC8qIEZyZWUgbWFsbG9jJ2QgbWVtb3J5ICovCi0gICAgICAgIGlmIChwdltpXS5zdmFsKQot ICAgICAgICAgIGZyZWUocHZbaV0uc3ZhbCk7Ci0gICAgfQotICAgIGZ0cmVzZXQoKTsgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFVuZG8gc3dpdGNoIGVmZmVjdHMgKi8KLSAgICBkcHlhY3Rp dmUgPSAwOwotICAgIHJldHVybih4KTsKLX0KLQotCi1zdGF0aWMgY2hhciAqKiBtZ2V0bGlzdCA9 IE5VTEw7ICAgICAgICAgLyogRm9yIE1HRVQgKi8KLXN0YXRpYyBpbnQgbWdldG4gPSAwLCBtZ2V0 eCA9IDA7Ci1zdGF0aWMgY2hhciB4dG1wYnVmWzQwOTZdOwotCi0vKgotICBjIG0gZCBsIGkgbiBn IGUgdAotCi0gIEdldCBmaWxlcyBzcGVjaWZpZWQgYnkgLWcgY29tbWFuZC1saW5lIG9wdGlvbi4K LSAgRmlsZSBsaXN0IGlzIHNldCB1cCBpbiBjbWxpc3RbXSBieSBja3V1c3kuYzsgbmZpbHMgaXMg bGVuZ3RoIG9mIGxpc3QuCi0qLwotaW50Ci1jbWRsaW5nZXQoc3RheSkgaW50IHN0YXk7IHsKLSAg ICBpbnQgaSwgeCwgcmMgPSAwLCBkb25lID0gMCwgZ29vZCA9IDAsIHN0YXR1cyA9IDAsIGFwcGVu ZCA9IDA7Ci0gICAgaW50IGxjcyA9IC0xLCByY3MgPSAtMSwgeGxhdGUgPSAwOwotICAgIGludCBm aXJzdCA9IDE7Ci0gICAgaW50IG1nZXQgPSAxOwotICAgIGludCBuYzsKLSAgICBjaGFyICogcywg KiBzMiwgKiBzMzsKLSAgICBVTE9ORyB0MCwgdDE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBU aW1lcyBmb3Igc3RhdHMgKi8KLSNpZmRlZiBHRlRJTUVSCi0gICAgQ0tGTE9BVCBzZWM7Ci0jZWxz ZQotICAgIGludCBzZWMgPSAwOwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLQotICAgIGlmIChxdWll dCkgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1xIHJlYWxseSBtZWFucyBxdWlldCAqLwot ICAgICAgICBkaXNwbGEgPSAwOwotICAgICAgICBmZGlzcGxhID0gMDsKLSAgICB9IGVsc2Ugewot ICAgICAgICBkaXNwbGEgPSAxOwotICAgICAgICBmZGlzcGxhID0gWFlGRF9COwotICAgIH0KLSAg ICB0ZXN0aW5nID0gMDsKLSAgICBkcHlhY3RpdmUgPSAwOwotICAgIG91dDJzY3JlZW4gPSAwOwot ICAgIHdoYXQgPSBXX0ZUUHxXX1JFQ1Y7Ci0gICAgbWdldG1ldGhvZCA9IDA7Ci0gICAgbWdldGZv cmNlZCA9IDA7Ci0KLSAgICBoYXZldHlwZSA9IDA7Ci0gICAgaGF2ZXNpemUgPSAoQ0tfT0ZGX1Qp LTE7Ci0gICAgbWFrZXN0cigmaGF2ZW1kdG0sTlVMTCk7Ci0KLSAgICBpZiAoZnRwX2ZuYyA8IDAp Ci0gICAgICBmdHBfZm5jID0gZm5jYWN0OwotCi0jaWZuZGVmIE5PU1BMCi0gICAgY21kX3F1b3Rp bmcgPSAwOwotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgZGVidWcoRjEwMSwiZnRwIGNtZGxpbmdl dCBuZmlscyIsIiIsbmZpbHMpOwotCi0gICAgaWYgKGZ0cF9jbnYgPT0gQ05WX0FVVE8pIHsgICAg ICAgICAgLyogTmFtZSBjb252ZXJzaW9uIGlzIGF1dG8gKi8KLSAgICAgICAgaWYgKGFsaWtlKSB7 ICAgICAgICAgICAgICAgICAgICAvKiBJZiBzZXJ2ZXIgJiBjbGllbnQgYXJlIGFsaWtlICovCi0g ICAgICAgICAgICBuYyA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogbm8gY29udmVyc2lvbiAq LwotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHRoZXkgYXJl IGRpZmZlcmVudCAqLwotICAgICAgICAgICAgaWYgKHNlcnZlcnR5cGUgPT0gU1lTX1VOSVggfHwg c2VydmVydHlwZSA9PSBTWVNfV0lOMzIpCi0gICAgICAgICAgICAgIG5jID0gLTE7ICAgICAgICAg ICAgICAgICAgLyogb25seSBtaW5pbWFsIGNvbnZlcnNpb25zIG5lZWRlZCAqLwotICAgICAgICAg ICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIC8qIG90aGVyd2lzZSAqLwotICAgICAgICAg ICAgICBuYyA9IDE7ICAgICAgICAgICAgICAgICAgIC8qIGZ1bGwgY29udmVyc2lvbiAqLwotICAg ICAgICB9Ci0gICAgfSBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IGF1 dG8gLSBkbyB3aGF0IHVzZXIgc2FpZCAqLwotICAgICAgbmMgPSBmdHBfY252OwotCi0gICAgaWYg KG5maWxzIDwgMSkKLSAgICAgIGRvZXhpdChCQURfRVhJVCwtMSk7Ci0KLSAgICB0MCA9IGdtc3Rp bWVyKCk7ICAgICAgICAgICAgICAgICAgICAvKiBTdGFydGluZyB0aW1lIGZvciB0aGlzIGJhdGNo ICovCi0KLSNpZm5kZWYgTk9DU0VUUwotICAgIGlmICh4bGF0ZSkgeyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFNFVCBGVFAgQ0hBUkFDVEVSLVNFVC1UUkFOU0xBVElPTiAqLwotICAgICAgICBs Y3MgPSBmdHBfY3NsOyAgICAgICAgICAgICAgICAgIC8qIExvY2FsIGNoYXJzZXQgKi8KLSAgICAg ICAgaWYgKGxjcyA8IDApIGxjcyA9IGZjaGFyc2V0OwotICAgICAgICBpZiAobGNzIDwgMCkgeGxh dGUgPSAwOwotICAgIH0KLSAgICBpZiAoeGxhdGUpIHsgICAgICAgICAgICAgICAgICAgICAgICAv KiBTdGlsbCBPTj8gKi8KLSAgICAgICAgcmNzID0gZnRwX2NzeDsgICAgICAgICAgICAgICAgICAv KiBSZW1vdGUgKFNlcnZlcikgY2hhcnNldCAqLwotICAgICAgICBpZiAocmNzIDwgMCkgcmNzID0g ZnRwX2NzcjsKLSAgICAgICAgaWYgKHJjcyA8IDApIHhsYXRlID0gMDsKLSAgICB9Ci0jZW5kaWYg LyogTk9DU0VUUyAqLwotICAgIC8qCi0gICAgICBJZiB3ZSBoYXZlIG9ubHkgb25lIGZpbGUgYW5k IGl0IGlzIGEgZGlyZWN0b3J5LCB0aGVuIHdlIGFzayBmb3IgYQotICAgICAgbGlzdGluZyBvZiBp dHMgY29udGVudHMsIHJhdGhlciB0aGFuIHJldHJpZXZpbmcgdGhlIGRpcmVjdG9yeSBmaWxlCi0g ICAgICBpdHNlbGYuICBUaGlzIGlzIHdoYXQgKGUuZy4pIE5ldHNjYXBlIGRvZXMuCi0gICAgKi8K LSAgICBpZiAobmZpbHMgPT0gMSkgewotICAgICAgICBpZiAoZG9mdHBjd2QoKGNoYXIgKiljbWxp c3RbbWdldHhdLC0xKSkgewotICAgICAgICAgICAgLyogSWYgd2UgY2FuIENEIHRvIGl0LCBpdCBt dXN0IGJlIGEgZGlyZWN0b3J5ICovCi0gICAgICAgICAgICBpZiAocmVjdXJzaXZlKSB7Ci0gICAg ICAgICAgICAgICAgY21saXN0W21nZXR4XSA9ICIqIjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g ICAgICAgICAgICAgICAgc3RhdHVzID0KLSAgICAgICAgICAgICAgICAgIChyZWN2cmVxdWVzdCgi TElTVCIsIi0iLCIiLCJ3YiIsMCwwLE5VTEwseGxhdGUsbGNzLHJjcyk9PTApOwotICAgICAgICAg ICAgICAgIGRvbmUgPSAxOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotLyoKLSAg VGhlIGZvbGxvd2luZyBpcyB0byB3b3JrIGFyb3VuZCBVTklYIHNlcnZlcnMgd2hpY2gsIHdoZW4g Z2l2ZW4gYSBjb21tYW5kCi0gIGxpa2UgIk5MU1QgcGF0aC9ibGFoIiAobm90IHdpbGQpIHJldHVy bnMgdGhlIGJhc2VuYW1lIHdpdGhvdXQgdGhlIHBhdGguCi0qLwotICAgIGlmICghZG9uZSAmJiBz ZXJ2ZXJ0eXBlID09IFNZU19VTklYICYmIG5maWxzID09IDEpIHsKLSAgICAgICAgbWdldCA9IGlz d2lsZChjbWxpc3RbbWdldHhdKTsKLSAgICB9Ci0gICAgaWYgKCFtZ2V0ICYmICFkb25lKSB7ICAg ICAgICAgICAgICAgLyogSW52b2tlZCBieSBjb21tYW5kLWxpbmUgRlRQIFVSTCAqLwotICAgICAg ICBpZiAoZnRwX2RlYikKLSAgICAgICAgICBwcmludGYoIkRPSU5HIEdFVC4uLlxuIik7Ci0gICAg ICAgIGRvbmUrKzsKLSAgICAgICAgY2FuY2VsZmlsZSA9IDA7ICAgICAgICAgICAgICAgICAvKiBU aGlzIGZpbGUgbm90IGNhbmNlbGVkIHlldCAqLwotICAgICAgICBzID0gY21saXN0W21nZXR4XTsK LSAgICAgICAgcmMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsIHJldHVy biBjb2RlICovCi0JZnNpemUgPSAoQ0tfT0ZGX1QpLTE7Ci0JaWYgKHNpemVvaykgewotCSAgICB4 ID0gZnRwY21kKCJTSVpFIixzLGxjcyxyY3MsZnRwX3ZibSk7IC8qIEdldCByZW1vdGUgZmlsZSdz IHNpemUgKi8KLQkgICAgaWYgKHggPT0gUkVQTFlfQ09NUExFVEUpCi0JICAgICAgZnNpemUgPSBj a2F0b2ZzKCZmdHBfcmVwbHlfc3RyWzRdKTsKLQl9Ci0gICAgICAgIGNrc3RybmNweShmaWxuYW0s cyxDS01BWFBBVEgpOyAgLyogRm9yIFx2KGZpbGVuYW1lKSAqLwotICAgICAgICBkZWJ1ZyhGMTEx LCJmdHAgY21kbGluZ2V0IGZpbG5hbSIsZmlsbmFtLGZzaXplKTsKLQotICAgICAgICBuenJ0b2wo cyx0bXBidWYsbmMsMCxDS01BWFBBVEgpOyAvKiBTdHJpcCBwYXRoIGFuZCBtYXliZSBjb252ZXJ0 ICovCi0gICAgICAgIHMyID0gdG1wYnVmOwotCi0gICAgICAgIC8qIElmIGxvY2FsIGZpbGUgYWxy ZWFkeSBleGlzdHMsIHRha2UgY29sbGlzaW9uIGFjdGlvbiAqLwotCi0gICAgICAgIGlmICh6Y2hr aShzMikgPiAtMSkgewotICAgICAgICAgICAgc3dpdGNoIChmdHBfZm5jKSB7Ci0gICAgICAgICAg ICAgIGNhc2UgWFlGWF9BOiAgICAgICAgICAgICAgLyogQXBwZW5kICovCi0gICAgICAgICAgICAg ICAgYXBwZW5kID0gMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz ZSBYWUZYX1I6ICAgICAgICAgICAgICAvKiBSZW5hbWUgKi8KLSAgICAgICAgICAgICAgY2FzZSBY WUZYX0I6IHsgICAgICAgICAgICAvKiBCYWNrdXAgKi8KLSAgICAgICAgICAgICAgICAgIGNoYXIg KiBwID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgIGludCB4ID0gLTE7Ci0gICAgICAgICAgICAg ICAgICB6bmV3bihzMiwmcCk7ICAgICAgICAgLyogTWFrZSB1bmlxdWUgbmFtZSAqLwotICAgICAg ICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwIGNtZGxpbmdldCB6bmV3biIscCwwKTsKLSAgICAg ICAgICAgICAgICAgIGlmIChmdHBfZm5jID09IFhZRlhfQikgeyAvKiBCYWNrdXAgZXhpc3Rpbmcg ZmlsZSAqLwotICAgICAgICAgICAgICAgICAgICAgIHggPSB6cmVuYW1lKHMyLHApOwotICAgICAg ICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBjbWRsaW5nZXQgYmFja3VwIHpyZW5hbWUi LHAseCk7Ci0gICAgICAgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgLyogUmVuYW1l IGluY29taW5nIGZpbGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICB4ID0gY2tzdHJuY3B5KHRt cGJ1ZixwLENLTUFYUEFUSCsxKTsKLSAgICAgICAgICAgICAgICAgICAgICBzMiA9IHRtcGJ1ZjsK LSAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgY21kbGluZ2V0IHJlbmFtZSBp bmNvbWluZyIscCx4KTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGlm ICh4IDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0JhY2t1cC9SZW5hbWUg ZmFpbGVkXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwot ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgY2FzZSBYWUZYX0Q6ICAgICAgICAgICAgICAvKiBEaXNjYXJk ICovCi0gICAgICAgICAgICAgICAgZnRzY3JlZW4oU0NSX0ZOLCdGJywoQ0tfT0ZGX1QpMCxzKTsK LSAgICAgICAgICAgICAgICBmdHNjcmVlbihTQ1JfU1QsU1RfU0tJUCwoQ0tfT0ZGX1QpU0tQX05B TSxzKTsKLSAgICAgICAgICAgICAgICB0bG9nKEYxMDAsIiByZWZ1c2VkOiBuYW1lIiwiIiwwKTsK LSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgY21kbGluZ2V0IHNraXAgbmFtZSIsczIs MCk7Ci0gICAgICAgICAgICAgICAgZ290byB4Y2xnZXQ7Ci0KLSAgICAgICAgICAgICAgY2FzZSBY WUZYX1g6ICAgICAgICAgICAgICAvKiBPdmVyd3JpdGUgKi8KLSAgICAgICAgICAgICAgY2FzZSBY WUZYX1U6ICAgICAgICAgICAgICAvKiBVcGRhdGUgKGFscmVhZHkgaGFuZGxlZCBhYm92ZSkgKi8K LQkgICAgICBjYXNlIFhZRlhfTToJCS8qIGRpdHRvICovCi0gICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmMgPSBnZXRmaWxlKHMsICAgICAg ICAgICAgICAgICAvKiBSZW1vdGUgbmFtZSAqLwotICAgICAgICAgICAgICAgICAgICAgczIsICAg ICAgICAgICAgICAgIC8qIExvY2FsIG5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgIDAsICAg ICAgICAgICAgICAgICAvKiBSZWNvdmVyL1Jlc3RhcnQgKi8KLSAgICAgICAgICAgICAgICAgICAg IGFwcGVuZCwgICAgICAgICAgICAvKiBBcHBlbmQgKi8KLSAgICAgICAgICAgICAgICAgICAgIE5V TEwsICAgICAgICAgICAgICAvKiBQaXBlbmFtZSAqLwotICAgICAgICAgICAgICAgICAgICAgMCwg ICAgICAgICAgICAgICAgIC8qIFRyYW5zbGF0ZSBjaGFyc2V0cyAqLwotICAgICAgICAgICAgICAg ICAgICAgLTEsICAgICAgICAgICAgICAgIC8qIEZpbGUgY2hhcnNldCAobm9uZSkgKi8KLSAgICAg ICAgICAgICAgICAgICAgIC0xICAgICAgICAgICAgICAgICAvKiBTZXJ2ZXIgY2hhcnNldCAobm9u ZSkgKi8KLSAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIGRlYnVnKEYxMTEsImZ0cCBj bWRsaW5nZXQgcmMiLHMscmMpOwotICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgY21kbGluZ2V0IGNh bmNlbGZpbGUiLHMsY2FuY2VsZmlsZSk7Ci0gICAgICAgIGRlYnVnKEYxMTEsImZ0cCBjbWRsaW5n ZXQgY2FuY2VsZ3JvdXAiLHMsY2FuY2VsZ3JvdXApOwotCi0gICAgICAgIGlmIChyYyA8IDAgJiYg aGF2ZXVybCAmJiBzWzBdID09ICcvJykgLyogVVJMIGZhaWxlZCAtIHRyeSBhZ2FpbiAqLwotICAg ICAgICAgICAgcmMgPSBnZXRmaWxlKCZzWzFdLCAgICAgICAgIC8qIFJlbW90ZSBuYW1lIHdpdGhv dXQgbGVhZGluZyAnLycgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICBzMiwgICAgICAgICAg ICAvKiBMb2NhbCBuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAg ICAgLyogUmVjb3Zlci9SZXN0YXJ0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5k LCAgICAgICAgLyogQXBwZW5kICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgICAg ICAgICAgLyogUGlwZW5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAg ICAgICAvKiBUcmFuc2xhdGUgY2hhcnNldHMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAt MSwgICAgICAgICAgICAvKiBGaWxlIGNoYXJzZXQgKG5vbmUpICovCi0gICAgICAgICAgICAgICAg ICAgICAgICAgLTEgICAgICAgICAgICAgLyogU2VydmVyIGNoYXJzZXQgKG5vbmUpICovCi0gICAg ICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgaWYgKHJjID4gLTEpIHsKLSAgICAgICAg ICAgIGdvb2QrKzsKLSAgICAgICAgICAgIHN0YXR1cyA9IDE7Ci0gICAgICAgIH0KLSAgICAgICAg aWYgKGNhbmNlbGZpbGUpCi0gICAgICAgICAgZ290byB4Y2xnZXQ7Ci0gICAgICAgIGlmIChyYyA8 IDApIHsKLSAgICAgICAgICAgIGZ0cF9mYWkrKzsKLSNpZmRlZiBGVFBfVElNRU9VVAotCSAgICBp ZiAoZnRwX3RpbWVkX291dCkKLQkgICAgICBzdGF0dXMgPSAwOwotI2VuZGlmCS8qIEZUUF9USU1F T1VUICovCi0gICAgICAgICAgICBpZiAoZ2V0ZXJyb3IpIHsKLSAgICAgICAgICAgICAgICBzdGF0 dXMgPSAwOwotICAgICAgICAgICAgICAgIGRvbmUrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAg fQotICAgIH0KLSAgICBpZiAoZnRwX2RlYiAmJiAhZG9uZSkKLSAgICAgIHByaW50ZigiRE9JTkcg TUdFVC4uLlxuIik7Ci0gICAgd2hpbGUgKCFkb25lICYmICFjYW5jZWxncm91cCkgewotICAgICAg ICBjYW5jZWxmaWxlID0gMDsgICAgICAgICAgICAgICAgIC8qIFRoaXMgZmlsZSBub3QgY2FuY2Vs ZWQgeWV0ICovCi0gICAgICAgIHMgPSAoY2hhciAqKXJlbW90ZV9maWxlcyhmaXJzdCwoQ0hBUiAq KWNtbGlzdFttZ2V0eF0sTlVMTCwwKTsKLSAgICAgICAgaWYgKCFzKSBzID0gIiI7Ci0gICAgICAg IGlmICghKnMpIHsKLSAgICAgICAgICAgIGZpcnN0ID0gMTsKLSAgICAgICAgICAgIG1nZXR4Kys7 Ci0gICAgICAgICAgICBpZiAobWdldHggPCBuZmlscykKLSAgICAgICAgICAgICAgcyA9IChjaGFy ICopcmVtb3RlX2ZpbGVzKGZpcnN0LChDSEFSICopY21saXN0W21nZXR4XSxOVUxMLDApOwotICAg ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBzID0gTlVMTDsKLSAgICAgICAgICAgIGRlYnVn KEYxMTEsImZ0cCBjbWRsaW5nZXQgcmVtb3RlX2ZpbGVzIEIiLHMsMCk7Ci0gICAgICAgICAgICBp ZiAoIXMpIHsKLSAgICAgICAgICAgICAgICBkb25lID0gMTsKLSAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvKgotICAgICAgICAgIFRoZSBz ZW1hbnRpY3Mgb2YgTkxTVCBhcmUgaWxsLWRlZmluZWQuICBTdXBwb3NlIHdlIGhhdmUganVzdCBz ZW50Ci0gICAgICAgICAgTkxTVCAvcGF0aC9bYS16XSouICBNb3N0IHNlcnZlcnMgc2VuZCBiYWNr IG5hbWVzIGxpa2UgL3BhdGgvZm9vLAotICAgICAgICAgIC9wYXRoL2JhciwgZXRjLiAgQnV0IHNv bWUgc2VuZCBiYWNrIG9ubHkgZm9vIGFuZCBiYXIsIGFuZCBzdWJzZXF1ZW50Ci0gICAgICAgICAg UkVUUiBjb21tYW5kcyBiYXNlZCBvbiB0aGUgcGF0aGxlc3MgbmFtZXMgYXJlIG5vdCBnb2luZyB0 byB3b3JrLgotICAgICAgICAqLwotICAgICAgICBpZiAoc2VydmVydHlwZSA9PSBTWVNfVU5JWCAm JiAhY2tzdHJjaHIocywnLycpKSB7Ci0gICAgICAgICAgICBpZiAoKHMzID0gY2tzdHJyY2hyKGNt bGlzdFttZ2V0eF0sJy8nKSkpIHsKLSAgICAgICAgICAgICAgICBpbnQgbGVuLCBsZWZ0ID0gNDA5 NjsKLSAgICAgICAgICAgICAgICBjaGFyICogdG1wID0geHRtcGJ1ZjsKLSAgICAgICAgICAgICAg ICBsZW4gPSBzMyAtIGNtbGlzdFttZ2V0eF0gKyAxOwotICAgICAgICAgICAgICAgIGNrc3RybmNw eSh0bXAsY21saXN0W21nZXR4XSxsZWZ0KTsKLSAgICAgICAgICAgICAgICB0bXAgKz0gbGVuOwot ICAgICAgICAgICAgICAgIGxlZnQgLT0gbGVuOwotICAgICAgICAgICAgICAgIGNrc3RybmNweSh0 bXAscyxsZWZ0KTsKLSAgICAgICAgICAgICAgICBzID0geHRtcGJ1ZjsKLQkJZGVidWcoRjExMSwi ZnRwIGNtZGxpbmdldCByZW1vdGVfZmlsZXMgWCIscywwKTsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgfQotICAgICAgICBmaXJzdCA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBmaXJz dCBhbnkgbW9yZSAqLwotCi0JZGVidWcoRjExMSwiZnRwIGNtZGxpbmdldCBoYXZldHlwZSIscyxo YXZldHlwZSk7Ci0JaWYgKGhhdmV0eXBlID4gMCAmJiBoYXZldHlwZSAhPSBGVFlQX0ZJTEUpIHsg LyogU2VydmVyIHNheXMgbm90IGZpbGUgKi8KLQkgICAgZGVidWcoRjExMCwiZnRwIGNtZGxpbmdl dCBub3QtYS1maWxlIixzLDApOwotCSAgICBjb250aW51ZTsKLQl9Ci0gICAgICAgIHJjID0gMDsg ICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbCByZXR1cm4gY29kZSAqLwotCWlmICho YXZlc2l6ZSA+IChDS19PRkZfVCktMSkgewkvKiBBbHJlYWR5IGhhdmUgZmlsZSBzaXplPyAqLwot CSAgICBmc2l6ZSA9IGhhdmVzaXplOwotCX0gZWxzZSB7CQkJLyogTm8gLSBtdXN0IGFzayBzZXJ2 ZXIgKi8KLQkgICAgLyoKLQkgICAgICBQcmlvciB0byBzZW5kaW5nIHRoZSBOTFNUIGNvbW1hbmQg d2UgbmVjZXNzYXJpbHkgcHV0IHRoZQotCSAgICAgIHNlcnZlciBpbnRvIEFTQ0lJIG1vZGUuICBX ZSBtdXN0IG5vdyBwdXQgaXQgYmFjayBpbnRvIHRoZQotCSAgICAgIHRoZSByZXF1ZXN0ZWQgbW9k ZSBzbyB0aGUgdXBjb21pbmcgU0laRSBjb21tYW5kIHJldHVybnMKLQkgICAgICByaWdodCBraW5k IG9mIHNpemU7IHRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yCi0JICAgICAgR0VUIC9S RUNPVkVSOyBvdGhlcndpc2UgdGhlIHNlcnZlciByZXR1cm5zIHRoZSAiQVNDSUkiIHNpemUKLQkg ICAgICBvZiB0aGUgZmlsZSwgcmF0aGVyIHRoYW4gaXRzIHRydWUgc2l6ZS4KLQkgICAgKi8KLQkg ICAgY2hhbmdldHlwZShmdHBfdHlwLDApOwkvKiBDaGFuZ2UgdG8gcmVxdWVzdGVkIHR5cGUgKi8K LQkgICAgZnNpemUgPSAoQ0tfT0ZGX1QpLTE7Ci0JICAgIGlmIChzaXplb2spIHsKLQkJeCA9IGZ0 cGNtZCgiU0laRSIscyxsY3MscmNzLGZ0cF92Ym0pOwotCQlpZiAoeCA9PSBSRVBMWV9DT01QTEVU RSkKLQkJICBmc2l6ZSA9IGNrYXRvZnMoJmZ0cF9yZXBseV9zdHJbNF0pOwotCSAgICB9Ci0JfQot ICAgICAgICBja3N0cm5jcHkoZmlsbmFtLHMsQ0tNQVhQQVRIKTsgIC8qIEZvciBcdihmaWxlbmFt ZSkgKi8KLSAgICAgICAgZGVidWcoRjExMSwiZnRwIGNtZGxpbmdldCBmaWxuYW0iLGZpbG5hbSxm c2l6ZSk7Ci0KLSAgICAgICAgbnpydG9sKHMsdG1wYnVmLG5jLDAsQ0tNQVhQQVRIKTsgLyogU3Ry aXAgcGF0aCBhbmQgbWF5YmUgY29udmVydCAqLwotICAgICAgICBzMiA9IHRtcGJ1ZjsKLQotICAg ICAgICAvKiBJZiBsb2NhbCBmaWxlIGFscmVhZHkgZXhpc3RzLCB0YWtlIGNvbGxpc2lvbiBhY3Rp b24gKi8KLQotICAgICAgICBpZiAoemNoa2koczIpID4gLTEpIHsKLSAgICAgICAgICAgIHN3aXRj aCAoZnRwX2ZuYykgewotICAgICAgICAgICAgICBjYXNlIFhZRlhfQTogICAgICAgICAgICAgIC8q IEFwcGVuZCAqLwotICAgICAgICAgICAgICAgIGFwcGVuZCA9IDE7Ci0gICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgWFlGWF9SOiAgICAgICAgICAgICAgLyogUmVuYW1l ICovCi0gICAgICAgICAgICAgIGNhc2UgWFlGWF9COiB7ICAgICAgICAgICAgLyogQmFja3VwICov Ci0gICAgICAgICAgICAgICAgICBjaGFyICogcCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICBp bnQgeCA9IC0xOwotICAgICAgICAgICAgICAgICAgem5ld24oczIsJnApOyAgICAgICAgIC8qIE1h a2UgdW5pcXVlIG5hbWUgKi8KLSAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBjbWRs aW5nZXQgem5ld24iLHAsMCk7Ci0gICAgICAgICAgICAgICAgICBpZiAoZnRwX2ZuYyA9PSBYWUZY X0IpIHsgLyogQmFja3VwIGV4aXN0aW5nIGZpbGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICB4 ID0genJlbmFtZShzMixwKTsKLSAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHAg Y21kbGluZ2V0IGJhY2t1cCB6cmVuYW1lIixwLHgpOwotICAgICAgICAgICAgICAgICAgfSBlbHNl IHsgICAgICAgICAgICAgIC8qIFJlbmFtZSBpbmNvbWluZyBmaWxlICovCi0gICAgICAgICAgICAg ICAgICAgICAgeCA9IGNrc3RybmNweSh0bXBidWYscCxDS01BWFBBVEgrMSk7Ci0gICAgICAgICAg ICAgICAgICAgICAgczIgPSB0bXBidWY7Ci0gICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEx MSwiZnRwIGNtZGxpbmdldCByZW5hbWUgaW5jb21pbmciLHAseCk7Ci0gICAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgICBpZiAoeCA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAg ICBwcmludGYoIj9CYWNrdXAvUmVuYW1lIGZhaWxlZFxuIik7Ci0gICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGNhc2UgWFlGWF9E OiAgICAgIC8qIERpc2NhcmQgKi8KLSAgICAgICAgICAgICAgICBmdHNjcmVlbihTQ1JfRk4sJ0Yn LChDS19PRkZfVCkwLHMpOwotICAgICAgICAgICAgICAgIGZ0c2NyZWVuKFNDUl9TVCxTVF9TS0lQ LChDS19PRkZfVClTS1BfTkFNLHMpOwotICAgICAgICAgICAgICAgIHRsb2coRjEwMCwiIHJlZnVz ZWQ6IG5hbWUiLCIiLDApOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBjbWRsaW5n ZXQgc2tpcCBuYW1lIixzMiwwKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg ICAgICAgY2FzZSBYWUZYX1g6ICAgICAgICAgICAgICAvKiBPdmVyd3JpdGUgKi8KLSAgICAgICAg ICAgICAgY2FzZSBYWUZYX1U6ICAgICAgICAgICAgICAvKiBVcGRhdGUgKGFscmVhZHkgaGFuZGxl ZCBhYm92ZSkgKi8KLSAgICAgICAgICAgICAgY2FzZSBYWUZYX006ICAgICAgICAgICAgICAvKiBk aXR0byAqLwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogXl5eIEFERCBDSEFS U0VUIFNUVUZGIEhFUkUgXl5eICovCi0gICAgICAgIHJjID0gZ2V0ZmlsZShzLCAgICAgICAgICAg ICAgICAgLyogUmVtb3RlIG5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgIHMyLCAgICAgICAg ICAgICAgICAvKiBMb2NhbCBuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAg ICAgICAgICAgLyogUmVjb3Zlci9SZXN0YXJ0ICovCi0gICAgICAgICAgICAgICAgICAgICBhcHBl bmQsICAgICAgICAgICAgLyogQXBwZW5kICovCi0gICAgICAgICAgICAgICAgICAgICBOVUxMLCAg ICAgICAgICAgICAgLyogUGlwZW5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgIDAsICAgICAg ICAgICAgICAgICAvKiBUcmFuc2xhdGUgY2hhcnNldHMgKi8KLSAgICAgICAgICAgICAgICAgICAg IC0xLCAgICAgICAgICAgICAgICAvKiBGaWxlIGNoYXJzZXQgKG5vbmUpICovCi0gICAgICAgICAg ICAgICAgICAgICAtMSAgICAgICAgICAgICAgICAgLyogU2VydmVyIGNoYXJzZXQgKG5vbmUpICov Ci0gICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgY21kbGlu Z2V0IHJjIixzLHJjKTsKLSAgICAgICAgZGVidWcoRjExMSwiZnRwIGNtZGxpbmdldCBjYW5jZWxm aWxlIixzLGNhbmNlbGZpbGUpOwotICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgY21kbGluZ2V0IGNh bmNlbGdyb3VwIixzLGNhbmNlbGdyb3VwKTsKLQotICAgICAgICBpZiAocmMgPiAtMSkgewotICAg ICAgICAgICAgZ29vZCsrOwotICAgICAgICAgICAgc3RhdHVzID0gMTsKLSAgICAgICAgfQotICAg ICAgICBpZiAoY2FuY2VsZmlsZSkKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHJj IDwgMCkgewotICAgICAgICAgICAgZnRwX2ZhaSsrOwotI2lmZGVmIEZUUF9USU1FT1VUCi0JICAg IGlmIChmdHBfdGltZWRfb3V0KQotCSAgICAgIHN0YXR1cyA9IDA7Ci0jZW5kaWYJLyogRlRQX1RJ TUVPVVQgKi8KLSAgICAgICAgICAgIGlmIChnZXRlcnJvcikgewotICAgICAgICAgICAgICAgIHN0 YXR1cyA9IDA7Ci0gICAgICAgICAgICAgICAgZG9uZSsrOwotICAgICAgICAgICAgfQotICAgICAg ICB9Ci0gICAgfQotCi0gIHhjbGdldDoKLSAgICBpZiAoY2FuY2VsZ3JvdXApCi0gICAgICBtbHNy ZXNldCgpOwotICAgIGlmIChzdGF0dXMgPiAwKSB7Ci0gICAgICAgIGlmIChjYW5jZWxncm91cCkK LSAgICAgICAgICBzdGF0dXMgPSAwOwotICAgICAgICBlbHNlIGlmIChjYW5jZWxmaWxlICYmIGdv b2QgPCAxKQotICAgICAgICAgIHN0YXR1cyA9IDA7Ci0gICAgfQotICAgIHN1Y2Nlc3MgPSBzdGF0 dXM7Ci0KLSNpZmRlZiBHRlRJTUVSCi0gICAgdDEgPSBnbXN0aW1lcigpOyAgICAgICAgICAgICAg ICAgICAgLyogRW5kIHRpbWUgKi8KLSAgICBzZWMgPSAoQ0tGTE9BVCkoKENLRkxPQVQpKHQxIC0g dDApIC8gMTAwMC4wKTsgLyogU3RhdHMgKi8KLSAgICBpZiAoIXNlYykgc2VjID0gMC4wMDE7Ci0g ICAgZnB0c2VjcyA9IHNlYzsKLSNlbHNlCi0gICAgc2VjID0gKHQxIC0gdDApIC8gMTAwMDsKLSAg ICBpZiAoIXNlYykgc2VjID0gMTsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0KLSAgICB0ZmNwcyA9 IChsb25nKSAodGZjIC8gc2VjKTsKLSAgICB0c2VjcyA9IChpbnQpc2VjOwotICAgIGxhc3R4ZmVy ID0gV19GVFB8V19SRUNWOwotICAgIHhmZXJzdGF0ID0gc3VjY2VzczsKLSAgICBpZiAoZHB5YWN0 aXZlKQotICAgICAgZnRzY3JlZW4oc3RhdHVzID4gMCA/IFNDUl9UQyA6IFNDUl9DVywgMCwgKENL X09GRl9UKTAsICIiKTsKLSAgICBpZiAoIXN0YXkpCi0gICAgICBkb2V4aXQoc3VjY2VzcyA/IEdP T0RfRVhJVCA6IEJBRF9FWElULCAtMSk7Ci0gICAgcmV0dXJuKHN1Y2Nlc3MpOwotfQotCi0vKiAg ZCBvIGYgdCBwIGcgZSB0ICAtLSAgUGFyc2UgYW5kIGV4ZWN1dGUgR0VULCBNR0VULCBNREVMRVRF LCAuLi4gICovCi0KLS8qCi0gIE5vdGU6IGlmIHdlIHdhbnRlZCB0byBpbXBsZW1lbnQgL0FGVEVS OiwgL0JFRk9SRTosIGV0Yywgd2UgY291bGQgdXNlCi0gIHpzdHJkYXQoKSB0byBjb252ZXJ0IHRv IFVUQy1iYXNlZCB0aW1lX3QuICBCdXQgaXQgZG9lc24ndCBtYWtlIHNlbnNlIGZyb20KLSAgdGhl IHVzZXItaW50ZXJmYWNlIHBlcnNwZWN0aXZlLCBzaW5jZSB0aGUgc2VydmVyJ3MgZGlyZWN0b3J5 IGxpc3RpbmdzIHNob3cKLSAgaXRzIG93biBsb2NhbCB0aW1lcyBhbmQgc2luY2Ugd2UgZG9uJ3Qg a25vdyB3aGF0IHRpbWV6b25lIGl0J3MgaW4sIHRoZXJlJ3MKLSAgbm8gd2F5IHRvIHJlY29uY2ls ZSBvdXIgbG9jYWwgdGltZXMgd2l0aCB0aGUgc2VydmVyJ3MuCi0qLwotaW50Ci1kb2Z0cGdldChj eCx3aG8pIGludCBjeCwgd2hvOyB7ICAgICAgICAgLyogd2hvID09IDEgZm9yIGZ0cCwgMCBmb3Ig a2VybWl0ICovCi0gICAgc3RydWN0IEZEQiBmbCwgc3csIGNtOwotICAgIGludCBpLCBuLCByYywg Z2V0dmFsID0gMCwgbWdldCA9IDAsIGRvbmUgPSAwLCBwaXBlc2F2ZSA9IDA7Ci0gICAgaW50IHhf Y252ID0gMCwgeF9wcm0gPSAwLCByZXN0YXJ0ID0gMCwgc3RhdHVzID0gMCwgZ29vZCA9IDA7Ci0g ICAgaW50IHhfZm5jID0gMCwgZmlyc3QgPSAwLCBza2lwdGhpcyA9IDAsIGFwcGVuZCA9IDAsIHNl bGVjdGVkID0gMDsKLSAgICBpbnQgcmVuYW1pbmcgPSAwLCBtZGVsID0gMCwgbGlzdGZpbGUgPSAw LCB1cGRhdGluZyA9IDAsIGdldG9uZSA9IDA7Ci0gICAgaW50IG1vdmluZyA9IDAsIGRlbGV0aW5n ID0gMCwgdG9zY3JlZW4gPSAwLCBoYXNwYXRoID0gMDsKLSAgICBpbnQgZ290c2l6ZSA9IDA7Ci0g ICAgaW50IG1hdGNoZG90ID0gMDsKLSAgICBDS19PRkZfVCBnZXRsYXJnZXIgPSAoQ0tfT0ZGX1Qp LTE7Ci0gICAgQ0tfT0ZGX1QgZ2V0c21hbGxlciA9IChDS19PRkZfVCktMTsKLSAgICBjaGFyICog bXNnLCAqIHMsICogczIsICogbmFtLCAqIHBpcGVuYW1lID0gTlVMTCwgKiBwbiA9IE5VTEw7Ci0g ICAgY2hhciAqIHNyYyA9ICIiLCAqIGxvY2FsID0gIiI7Ci0gICAgY2hhciAqIHBhdCA9ICIiOwot Ci0gICAgaW50IHhfY3NsID0gLTEsIHhfY3NyID0gLTE7ICAgICAgICAgLyogTG9jYWwgYW5kIHJl bW90ZSBjaGFyc2V0cyAqLwotICAgIGludCB4X3hsYSA9IDA7Ci0gICAgY2hhciBjOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogV29ya2VyIGNoYXIgKi8KLSAgICBVTE9ORyB0MCA9IDBM LCB0MTsgICAgICAgICAgICAgICAgICAvKiBUaW1lcyBmb3Igc3RhdHMgKi8KLSNpZmRlZiBHRlRJ TUVSCi0gICAgQ0tGTE9BVCBzZWM7Ci0jZWxzZQotICAgIGludCBzZWMgPSAwOwotI2VuZGlmIC8q IEdGVElNRVIgKi8KLQotICAgIHN0cnVjdCBzdHJpbmdpbnQgcHZbU05EX01BWCsxXTsgICAgLyog VGVtcG9yYXJ5IGFycmF5IGZvciBzd2l0Y2ggdmFsdWVzICovCi0KLSAgICBzdWNjZXNzID0gMDsg ICAgICAgICAgICAgICAgICAgICAgICAvKiBBc3N1bWUgZmFpbHVyZSAqLwotICAgIGZvcmNldHlw ZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIC9URVhUIG9yIC9CSU5BUlkgZ2l2ZW4g eWV0ICovCi0gICAgcmVzdGFydCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gcmVz dGFydCB5ZXQgKi8KLSAgICBvdXQyc2NyZWVuID0gMDsJCQkvKiBObyBUTy1TQ1JFRU4gc3dpdGNo IGdpdmVuIHlldCAqLwotICAgIG1nZXRtZXRob2QgPSAwOwkJCS8qIE5vIE5MU1Qgb3IgTUxTRCBz d2l0Y2ggeWV0ICovCi0gICAgbWdldGZvcmNlZCA9IDA7Ci0KLSAgICBnX2Rpc3BsYSA9IGZkaXNw bGE7Ci0gICAgaWYgKGZ0cF9kaXMgPiAtMSkKLSAgICAgIGZkaXNwbGEgPSBmdHBfZGlzOwotCi0g ICAgeF9jbnYgPSBmdHBfY252OyAgICAgICAgICAgICAgICAgICAgLyogRmlsZW5hbWUgY29udmVy c2lvbiAqLwotICAgIGlmICh4X2NudiA9PSBDTlZfQVVUTykgewkJLyogTmFtZSBjb252ZXJzaW9u IGlzIGF1dG8gKi8KLSAgICAgICAgaWYgKGFsaWtlKSB7ICAgICAgICAgICAgICAgICAgICAvKiBJ ZiBzZXJ2ZXIgJiBjbGllbnQgYXJlIGFsaWtlICovCi0gICAgICAgICAgICB4X2NudiA9IDA7CQkJ Lyogbm8gY29udmVyc2lvbiAqLwotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIElmIHRoZXkgYXJlIGRpZmZlcmVudCAqLwotICAgICAgICAgICAgaWYgKHNlcnZlcnR5 cGUgPT0gU1lTX1VOSVggfHwgc2VydmVydHlwZSA9PSBTWVNfV0lOMzIpCi0gICAgICAgICAgICAg IHhfY252ID0gLTE7CQkvKiBvbmx5IG1pbmltYWwgY29udmVyc2lvbnMgbmVlZGVkICovCi0gICAg ICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgLyogb3RoZXJ3aXNlICovCi0gICAg ICAgICAgICAgIHhfY252ID0gMTsJCS8qIGZ1bGwgY29udmVyc2lvbiAqLwotICAgICAgICB9Ci0g ICAgfSBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IGF1dG8gLSBkbyB3 aGF0IHVzZXIgc2FpZCAqLwotICAgICAgeF9jbnYgPSBmdHBfY252OwotCi0gICAgeF9wcm0gPSBm dHBfcHJtOyAgICAgICAgICAgICAgICAgICAgLyogUGVybWlzc2lvbnMgKi8KLSAgICBpZiAoeF9w cm0gPT0gU0VUX0FVVE8pICAgICAgICAgICAgICAvKiBQZXJtaXNzaW9ucyBBVVRPICovCi0gICAg ICB4X3BybSA9IGFsaWtlOwotCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICB4X2NzciA9IGZ0cF9jc3I7 ICAgICAgICAgICAgICAgICAgICAvKiBJbmhlcml0IGdsb2JhbCBzZXJ2ZXIgY2hhcnNldCAqLwot ICAgIHhfY3NsID0gZnRwX2NzbDsgICAgICAgICAgICAgICAgICAgIC8qIEluaGVyaXQgZ2xvYmFs IGxvY2FsIGNoYXJzZXQgKi8KLSAgICBpZiAoeF9jc2wgPCAwKSAgICAgICAgICAgICAgICAgICAg ICAvKiBJZiBub25lLCB1c2UgY3VycmVudCAqLwotICAgICAgeF9jc2wgPSBmY2hhcnNldDsgICAg ICAgICAgICAgICAgIC8qIGZpbGUgY2hhcmFjdGVyLXNldC4gKi8KLSAgICB4X3hsYSA9IGZ0cF94 bGE7ICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2xhdGlvbiBPbi9PZmYgKi8KLSNlbmRpZiAv KiBOT0NTRVRTICovCi0KLSAgICBnZXRlcnJvciA9IGZ0cF9lcnI7ICAgICAgICAgICAgICAgICAv KiBJbmhlcml0IGdsb2JhbCBlcnJvciBhY3Rpb24uICovCi0gICAgYXNuYW1idWZbMF0gPSBOVUw7 ICAgICAgICAgICAgICAgICAgLyogTm8gYXMtbmFtZSB5ZXQuICovCi0gICAgcGlwZXNhdmUgPSBw aXBlc2VuZDsKLSAgICBwaXBlc2VuZCA9IDA7Ci0KLSAgICBoYXZldHlwZSA9IDA7Ci0gICAgaGF2 ZXNpemUgPSAoQ0tfT0ZGX1QpLTE7Ci0gICAgbWFrZXN0cigmaGF2ZW1kdG0sTlVMTCk7Ci0KLSAg ICBpZiAoZ19mdHBfdHlwID4gLTEpIHsgICAgICAgICAgICAgICAvKiBSZXN0b3JlIFRZUEUgaWYg c2F2ZWQgKi8KLSAgICAgICAgZnRwX3R5cCA9IGdfZnRwX3R5cDsKLSAgICAgICAgLyogZ19mdHBf dHlwID0gLTE7ICovCi0gICAgfQotICAgIGZvciAoaSA9IDA7IGkgPD0gU05EX01BWDsgaSsrKSB7 ICAgIC8qIEluaXRpYWxpemUgc3dpdGNoIHZhbHVlcyAqLwotICAgICAgICBwdltpXS5zdmFsID0g TlVMTDsgICAgICAgICAgICAgIC8qIHRvIG51bGwgcG9pbnRlcnMgKi8KLSAgICAgICAgcHZbaV0u aXZhbCA9IC0xOyAgICAgICAgICAgICAgICAvKiBhbmQgLTEgaW50IHZhbHVlcyAqLwotICAgICAg ICBwdltpXS53dmFsID0gKENLX09GRl9UKS0xOwkvKiBhbmQgLTEgd2lkZSB2YWx1ZXMgKi8KLSAg ICB9Ci0gICAgemNsb3NlKFpNRklMRSk7ICAgICAgICAgICAgICAgICAgICAgLyogSW4gY2FzZSBp dCB3YXMgbGVmdCBvcGVuICovCi0KLSAgICB4X2ZuYyA9IGZ0cF9mbmMgPiAtMSA/IGZ0cF9mbmMg OiBmbmNhY3Q7IC8qIEZpbGVuYW1lIGNvbGxpc2lvbiBhY3Rpb24gKi8KLQotICAgIGlmIChmcF9u bWwpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IC9OQU1FTElTVCAqLwotICAgICAg ICBpZiAoZnBfbm1sICE9IHN0ZG91dCkKLSAgICAgICAgICBmY2xvc2UoZnBfbm1sKTsKLSAgICAg ICAgZnBfbm1sID0gTlVMTDsKLSAgICB9Ci0gICAgbWFrZXN0cigmZnRwX25tbCxOVUxMKTsKLQot ICAgIC8qIEluaXRpYWxpemUgbGlzdCBvZiByZW1vdGUgZmlsZXNwZWNzICovCi0KLSAgICBpZiAo IW1nZXRsaXN0KSB7Ci0gICAgICAgIG1nZXRsaXN0ID0gKGNoYXIgKiopbWFsbG9jKE1HRVRNQVgg KiBzaXplb2YoY2hhciAqKSk7Ci0gICAgICAgIGlmICghbWdldGxpc3QpIHsKLSAgICAgICAgICAg IHByaW50ZigiP01lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgLSBNR0VUIGxpc3RcbiIpOwotICAg ICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwg TUdFVE1BWDsgaSsrKQotICAgICAgICAgIG1nZXRsaXN0W2ldID0gTlVMTDsKLSAgICB9Ci0gICAg bWdldG4gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIG1nZXQgYXJn dW1lbnRzICovCi0gICAgbWdldHggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ3Vy cmVudCBhcmcgKi8KLQotICAgIGlmICh3aG8gPT0gMCkgeyAgICAgICAgICAgICAgICAgICAgIC8q IENhbGxlZCB3aXRoIHVucHJlZml4ZWQgY29tbWFuZCAqLwotICAgICAgICBpZiAoY3ggPT0gWFhH RVQgfHwgY3ggPT0gWFhSRUdFVCB8fCBjeCA9PSBYWFJFVFIpCi0gICAgICAgICAgZ2V0b25lKys7 Ci0gICAgICAgIHN3aXRjaCAoY3gpIHsKLSAgICAgICAgICBjYXNlIFhYUkVHRVQ6IHB2W1NORF9S RVNdLml2YWwgPSAxOyBicmVhazsKLSAgICAgICAgICBjYXNlIFhYUkVUUjogIHB2W1NORF9ERUxd Lml2YWwgPSAxOyBicmVhazsKLSAgICAgICAgICBjYXNlIFhYR0VUOgotICAgICAgICAgIGNhc2Ug WFhNR0VUOiAgbWdldCsrOyBicmVhazsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEZUUCBjb21tYW5kICovCi0gICAgICAgIGlmIChjeCA9PSBG VFBfR0VUIHx8IGN4ID09IEZUUF9SR0UpCi0gICAgICAgICAgZ2V0b25lKys7Ci0gICAgICAgIHN3 aXRjaCAoY3gpIHsKLSAgICAgICAgICBjYXNlIEZUUF9ERUw6ICAgICAgICAgICAgICAgICAvKiAo ZmFsbCB0aHJ1IG9uIHB1cnBvc2UpICovCi0gICAgICAgICAgY2FzZSBGVFBfTURFOiBtZGVsKys7 ICAgICAgICAgLyogKGRpdHRvKSAqLwotICAgICAgICAgIGNhc2UgRlRQX0dFVDogICAgICAgICAg ICAgICAgIC8qIChkaXR0bykgKi8KLSAgICAgICAgICBjYXNlIEZUUF9NR0U6IG1nZXQrKzsgYnJl YWs7Ci0gICAgICAgICAgY2FzZSBGVFBfUkdFOiBwdltTTkRfUkVTXS5pdmFsID0gMTsgYnJlYWs7 Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY21mZGJpKCZzdywgICAgICAgICAgICAgICAgICAgICAg ICAgLyogRmlyc3QgRkRCIC0gY29tbWFuZCBzd2l0Y2hlcyAqLwotICAgICAgICAgICBfQ01LRVks ICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgICJSZW1vdGUgZmls ZW5hbWU7XG4gb3Igc3dpdGNoIiwgLyogaGxwbXNnICovCi0gICAgICAgICAgICIiLCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAiIiwgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAgICAgIG1kZWwg PyBuZGVsc3dpIDogbmdldHN3aSwgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXpl ICovCi0gICAgICAgICAgIDQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVt ZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLwotICAgICAgICAgICB4eHN0cmluZywgICAgICAgICAg ICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KLSAgICAgICAgICAgbWRlbCA/IGRl bHN3aSA6IGdldHN3aSwgICAgICAvKiBLZXl3b3JkIHRhYmxlICovCi0gICAgICAgICAgICZmbCAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLwotICAgICAg ICAgICApOwotICAgIGNtZmRiaSgmZmwsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDJuZCBG REIgLSByZW1vdGUgZmlsZW5hbWUgKi8KLSAgICAgICAgICAgX0NNRkxELCAgICAgICAgICAgICAg ICAgICAgICAvKiBmY29kZSAqLwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIGhscG1zZyAqLwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCi0gICAgICAgICAgIDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KLSAgICAgICAgICAg eHhzdHJpbmcsCi0gICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICZjbQotICAgICAgICAgICAp OwotICAgIGNtZmRiaSgmY20sICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDNyZCBGREIgLSBD b25maXJtYXRpb24gKi8KLSAgICAgICAgICAgX0NNQ0ZNLCAgICAgICAgICAgICAgICAgICAgICAv KiBmY29kZSAqLwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhs cG1zZyAqLwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1 bHQgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBz dHJpbmcgZGF0YSAqLwotICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IGFkZHRsIG51bWVyaWMgZGF0YSAxICovCi0gICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KLSAgICAgICAgICAgTlVMTCwKLSAg ICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgTlVMTAotICAgICAgICAgICApOwotCi0gICAgd2hp bGUgKDEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFyc2UgMCBvciBtb3JlIHN3aXRj aGVzICovCi0gICAgICAgIHggPSBjbWZkYigmc3cpOyAgICAgICAgICAgICAgICAgLyogUGFyc2Ug c29tZXRoaW5nICovCi0gICAgICAgIGRlYnVnKEYxMDEsImZ0cCBnZXQgY21mZGIiLCIiLHgpOwot ICAgICAgICBpZiAoeCA8IDApICAgICAgICAgICAgICAgICAgICAgIC8qIEVycm9yICovCi0gICAg ICAgICAgZ290byB4Z2V0eDsgICAgICAgICAgICAgICAgICAgLyogb3IgcmVwYXJzZSBuZWVkZWQg Ki8KLSAgICAgICAgaWYgKGNtcmVzdWx0LmZjb2RlICE9IF9DTUtFWSkgICAvKiBCcmVhayBvdXQg b2YgbG9vcCBpZiBub3QgYSBzd2l0Y2ggKi8KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgYyA9 IGNtZ2JyaygpOyAgICAgICAgICAgICAgICAgICAvKiBHZXQgYnJlYWsgY2hhcmFjdGVyICovCi0g ICAgICAgIGdldHZhbCA9IChjID09ICc6JyB8fCBjID09ICc9Jyk7IC8qIHRvIHNlZSBob3cgdGhl eSBlbmRlZCB0aGUgc3dpdGNoICovCi0gICAgICAgIGlmIChnZXR2YWwgJiYgIShjbXJlc3VsdC5r ZmxhZ3MgJiBDTV9BUkcpKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCBkb2Vz IG5vdCB0YWtlIGFyZ3VtZW50c1xuIik7Ci0gICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAg ICBnb3RvIHhnZXR4OwotICAgICAgICB9Ci0gICAgICAgIG4gPSBjbXJlc3VsdC5ucmVzdWx0OyAg ICAgICAgICAgLyogTnVtZXJpYyByZXN1bHQgPSBzd2l0Y2ggdmFsdWUgKi8KLSAgICAgICAgZGVi dWcoRjEwMSwiZnRwIGdldCBzd2l0Y2giLCIiLG4pOwotCi0gICAgICAgIGlmICghZ2V0dmFsICYm IChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKLSAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dp dGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKLSAgICAgICAgICAgIHggPSAtOTsKLSAgICAg ICAgICAgIGdvdG8geGdldHg7Ci0gICAgICAgIH0KLSAgICAgICAgc3dpdGNoIChuKSB7ICAgICAg ICAgICAgICAgICAgICAvKiBQcm9jZXNzIHRoZSBzd2l0Y2ggKi8KLSAgICAgICAgICBjYXNlIFNO RF9BU046ICAgICAgICAgICAgICAgICAvKiAvQVMtTkFNRTogKi8KLSAgICAgICAgICAgIGRlYnVn KEYxMDEsImZ0cCBnZXQgL2FzLW5hbWUgZ2V0dmFsIiwiIixnZXR2YWwpOwotICAgICAgICAgICAg aWYgKCFnZXR2YWwpIGJyZWFrOwotICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQoIk5hbWUgdG8g c3RvcmUgaXQgdW5kZXIiLCIiLCZzLE5VTEwpKSA8IDApIHsKLSAgICAgICAgICAgICAgICBpZiAo eCA9PSAtMykgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9uYW1lIHJlcXVpcmVkXG4i KTsKLSAgICAgICAgICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICBnb3RvIHhnZXR4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcyA9IGJy c3RyaXAocyk7Ci0gICAgICAgICAgICBpZiAoISpzKSBzID0gTlVMTDsKLSAgICAgICAgICAgIG1h a2VzdHIoJihwdltuXS5zdmFsKSxzKTsKLSAgICAgICAgICAgIHB2W25dLml2YWwgPSAxOwotICAg ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFNORF9CSU46ICAgICAgICAgICAgICAg ICAvKiAvQklOQVJZICovCi0gICAgICAgICAgY2FzZSBTTkRfVFhUOiAgICAgICAgICAgICAgICAg LyogL1RFWFQgb3IgL0FTQ0lJICovCi0gICAgICAgICAgY2FzZSBTTkRfVEVOOiAgICAgICAgICAg ICAgICAgLyogL1RFTkVYICovCi0gICAgICAgICAgICBwdltTTkRfQklOXS5pdmFsID0gMDsKLSAg ICAgICAgICAgIHB2W1NORF9UWFRdLml2YWwgPSAwOwotICAgICAgICAgICAgcHZbU05EX1RFTl0u aXZhbCA9IDA7Ci0gICAgICAgICAgICBwdltuXS5pdmFsID0gMTsKLSAgICAgICAgICAgIGJyZWFr OwotCi0jaWZkZWYgUFVUUElQRQotICAgICAgICAgIGNhc2UgU05EX0NNRDogICAgICAgICAgICAg ICAgIC8qIFRoZXNlIHRha2Ugbm8gYXJncyAqLwotICAgICAgICAgICAgaWYgKG5vcHVzaCkgewot ICAgICAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBzeXN0ZW0gY29tbWFuZCBhY2Nlc3MgaXMg ZGlzYWJsZWRcbiIpOwotICAgICAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgICAgICBn b3RvIHhnZXR4OwotICAgICAgICAgICAgfQotI2lmZGVmIFBJUEVTRU5ECi0gICAgICAgICAgICBl bHNlIGlmIChyY3ZmaWx0ZXIpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgbm8g UFVUIC9DT01NQU5EIHdoZW4gU0VORCBGSUxURVIgc2VsZWN0ZWRcbiIpOwotICAgICAgICAgICAg ICAgIHggPSAtOTsKLSAgICAgICAgICAgICAgICBnb3RvIHhnZXR4OwotICAgICAgICAgICAgfQot I2VuZGlmIC8qIFBJUEVTRU5EICovCi0gICAgICAgICAgICBzdy5obHBtc2cgPSAiQ29tbWFuZCwg b3Igc3dpdGNoIjsgLyogQ2hhbmdlIGhlbHAgbWVzc2FnZSAqLwotICAgICAgICAgICAgcHZbbl0u aXZhbCA9IDE7ICAgICAgICAgICAgIC8qIEp1c3Qgc2V0IHRoZSBmbGFnICovCi0gICAgICAgICAg ICBwdltTTkRfQVJSXS5pdmFsID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIFBV VFBJUEUgKi8KLQotICAgICAgICAgIGNhc2UgU05EX1NISDogICAgICAgICAgICAgICAgIC8qIC9R VUlFVCAqLwotICAgICAgICAgIGNhc2UgU05EX1JFUzogICAgICAgICAgICAgICAgIC8qIC9SRUNP VkVSIChyZWdldCkgKi8KLSAgICAgICAgICBjYXNlIFNORF9OT0I6ICAgICAgICAgICAgICAgICAv KiAvTk9CQUNLVVBGSUxFUyAqLwotICAgICAgICAgIGNhc2UgU05EX0RFTDogICAgICAgICAgICAg ICAgIC8qIC9ERUxFVEUgKi8KLSAgICAgICAgICBjYXNlIFNORF9VUEQ6ICAgICAgICAgICAgICAg ICAvKiAvVVBEQVRFICovCi0gICAgICAgICAgY2FzZSBTTkRfVVNOOiAgICAgICAgICAgICAgICAg LyogL1VOSVFVRSAqLwotICAgICAgICAgIGNhc2UgU05EX05PRDogICAgICAgICAgICAgICAgIC8q IC9OT0RPVEZJTEVTICovCi0gICAgICAgICAgY2FzZSBTTkRfUkVDOiAgICAgICAgICAgICAgICAg LyogL1JFQ09WRVIgKi8KLSAgICAgICAgICBjYXNlIFNORF9NQUk6ICAgICAgICAgICAgICAgICAv KiAvVE8tU0NSRUVOICovCi0gICAgICAgICAgICBwdltuXS5pdmFsID0gMTsgICAgICAgICAgICAg LyogSnVzdCBzZXQgdGhlIGZsYWcgKi8KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAg Y2FzZSBTTkRfRElGOiAgICAgICAgICAgICAgICAgLyogL0RBVEVTLURJRkZFUiAqLwotCSAgICBw dltTTkRfQ09MXS5pdmFsID0gWFlGWF9NOwkvKiBOb3cgaXQncyBhIGNvbGxpc2lvbiBvcHRpb24g Ki8KLQkgICAgcHZbbl0uaXZhbCA9IDE7Ci0JICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBT TkRfQ09MOiAgICAgICAgICAgICAgICAgLyogL0NPTExJU0lPTjogKi8KLSAgICAgICAgICAgIGlm ICgoeCA9IGNta2V5KGZ0cGNvbHh0YWIsbmZ0cGNvbHgsIiIsIiIseHhzdHJpbmcpKSA8IDApCi0g ICAgICAgICAgICAgIGdvdG8geGdldHg7Ci0JICAgIGlmICh4ID09IFhZRlhfTSkKLQkgICAgICBw dltTTkRfRElGXS5pdmFsID0gMTsJLyogKHBoYXNlIHRoaXMgb3V0KSAqLwotCSAgICBwdltuXS5p dmFsID0geDsJCS8qIHRoaXMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgKi8KLSAgICAgICAgICAgIGJy ZWFrOwotCi0gICAgICAgICAgY2FzZSBTTkRfRVJSOiAgICAgICAgICAgICAgICAgLyogL0VSUk9S LUFDVElPTiAqLwotICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkocW9ycCwyLCIiLCIiLHh4c3Ry aW5nKSkgPCAwKQotICAgICAgICAgICAgICBnb3RvIHhnZXR4OwotICAgICAgICAgICAgcHZbbl0u aXZhbCA9IHg7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgU05EX0VYQzog ICAgICAgICAgICAgICAgIC8qIEV4Y2VwdGlvbiBsaXN0ICovCi0gICAgICAgICAgICBpZiAoIWdl dHZhbCkgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoKHggPSBjbWZsZCgiUGF0dGVybiIsIiIsJnMs eHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAg ICAgICAgICAgICAgICBwcmludGYoIj9QYXR0ZXJuIHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAg ICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBnb3Rv IHhnZXR4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHMpIGlmICghKnMpIHMgPSBO VUxMOwotICAgICAgICAgICAgbWFrZXN0cigmKHB2W25dLnN2YWwpLHMpOwotICAgICAgICAgICAg aWYgKHB2W25dLnN2YWwpCi0gICAgICAgICAgICAgIHB2W25dLml2YWwgPSAxOwotICAgICAgICAg ICAgYnJlYWs7Ci0KLSNpZmRlZiBQSVBFU0VORAotICAgICAgICAgIGNhc2UgU05EX0ZMVDoKLSAg ICAgICAgICAgIGRlYnVnKEYxMDEsImZ0cCBnZXQgL2ZpbHRlciBnZXR2YWwiLCIiLGdldHZhbCk7 Ci0gICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoKHggPSBj bWZsZCgiRmlsdGVyIHByb2dyYW0gdG8gc2VuZCB0aHJvdWdoIiwiIiwmcyxOVUxMKSkgPCAwKSB7 Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gLTMpCi0gICAgICAgICAgICAgICAgICBzID0gIiI7 Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgZ290byB4Z2V0eDsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIHMgPSBicnN0cmlwKHMpOwotICAgICAgICAgICAgaWYg KHB2W1NORF9NQUldLml2YWwgPCAxKSB7Ci0gICAgICAgICAgICAgICAgeSA9IHN0cmxlbihzKTsK LSAgICAgICAgICAgICAgICAvKiBNYWtlIHN1cmUgdGhleSBpbmNsdWRlZCAiXHYoLi4uKSIgKi8K LSAgICAgICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgeTsgeCsrKSB7Ci0gICAgICAgICAgICAg ICAgICAgIGlmIChzW3hdICE9ICdcXCcpIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBp ZiAoc1t4KzFdID09ICd2JykgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgIGlmICh4ID09IHkpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAotICAgICAgICAg ICAgICAgICI/RmlsdGVyIG11c3QgY29udGFpbiBhIHJlcGxhY2VtZW50IHZhcmlhYmxlIGZvciBm aWxlbmFtZS5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAg ICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgICAgICAgICAgZ290byB4Z2V0eDsKLSAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKnMpIHsKLSAgICAgICAg ICAgICAgICBwdltuXS5pdmFsID0gMTsKLSAgICAgICAgICAgICAgICBtYWtlc3RyKCYocHZbbl0u c3ZhbCkscyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHB2W25dLml2 YWwgPSAwOwotICAgICAgICAgICAgICAgIG1ha2VzdHIoJihwdltuXS5zdmFsKSxOVUxMKTsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIFBJUEVTRU5EICovCi0K LSAgICAgICAgICBjYXNlIFNORF9OQU06Ci0gICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7 Ci0gICAgICAgICAgICBpZiAoKHggPSBjbWtleShmbnRhYixuZm50YWIsIiIsImF1dG9tYXRpYyIs eHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgIGdvdG8geGdldHg7Ci0gICAgICAgICAgICBk ZWJ1ZyhGMTAxLCJmdHAgZ2V0IC9maWxlbmFtZXMiLCIiLHgpOwotICAgICAgICAgICAgcHZbbl0u aXZhbCA9IHg7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgU05EX1NNQTog ICAgICAgICAgICAgICAgIC8qIFNtYWxsZXIgLyBsYXJnZXIgdGhhbiAqLwotICAgICAgICAgIGNh c2UgU05EX0xBUjogewotCSAgICAgIENLX09GRl9UIHk7Ci0JICAgICAgaWYgKCFnZXR2YWwpIGJy ZWFrOwotCSAgICAgIGlmICgoeCA9IGNtbnVtdygiU2l6ZSBpbiBieXRlcyIsIjAiLDEwLCZ5LHh4 c3RyaW5nKSkgPCAwKQotCQlnb3RvIHhnZXR4OwotCSAgICAgIHB2W25dLnd2YWwgPSB5OwotCSAg ICAgIGJyZWFrOwotCSAgfQotICAgICAgICAgIGNhc2UgU05EX0ZJTDogICAgICAgICAgICAgICAg IC8qIE5hbWUgb2YgZmlsZSBjb250YWluaW5nIGZpbG5hbWVzICovCi0gICAgICAgICAgICBpZiAo IWdldHZhbCkgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoKHggPSBjbWlmaSgiTmFtZSBvZiBmaWxl IGNvbnRhaW5pbmcgbGlzdCBvZiBmaWxlbmFtZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICIiLCZzLCZ5LHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHgg PT0gLTMpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/RmlsZW5hbWUgcmVxdWlyZWRc biIpOwotICAgICAgICAgICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICAgIGdvdG8geGdldHg7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHkgJiYgaXN3 aWxkKHMpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/V2lsZGNhcmRzIG5vdCBhbGxvd2Vk IEJCQlxuIik7Ci0gICAgICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgICAgIGdvdG8g eGdldHg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocykgaWYgKCEqcykgcyA9IE5V TEw7Ci0gICAgICAgICAgICBtYWtlc3RyKCYocHZbbl0uc3ZhbCkscyk7Ci0gICAgICAgICAgICBp ZiAocHZbbl0uc3ZhbCkKLSAgICAgICAgICAgICAgcHZbbl0uaXZhbCA9IDE7Ci0gICAgICAgICAg ICBicmVhazsKLQotICAgICAgICAgIGNhc2UgU05EX01PVjogICAgICAgICAgICAgICAgIC8qIE1P VkUgYWZ0ZXIgKi8KLSAgICAgICAgICBjYXNlIFNORF9SRU46ICAgICAgICAgICAgICAgICAvKiBS RU5BTUUgYWZ0ZXIgKi8KLSAgICAgICAgICBjYXNlIFNORF9TUk46IHsgICAgICAgICAgICAgICAv KiBTRVJWRVItUkVOQU1FICovCi0gICAgICAgICAgICAgIGNoYXIgKiBtID0gIiI7Ci0gICAgICAg ICAgICAgIHN3aXRjaCAobikgewotICAgICAgICAgICAgICAgIGNhc2UgU05EX01PVjoKLSAgICAg ICAgICAgICAgICAgIG0gPQotICAgICAgICAgICAgICAgICAgICJEZXZpY2UgYW5kL29yIGRpcmVj dG9yeSBmb3IgaW5jb21pbmcgZmlsZSBhZnRlciByZWNlcHRpb24iOwotICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBTTkRfUkVOOgotICAgICAgICAgICAgICAg ICAgbSA9ICJOZXcgbmFtZSBmb3IgaW5jb21pbmcgZmlsZSBhZnRlciByZWNlcHRpb24iOwotICAg ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBTTkRfU1JOOgotICAg ICAgICAgICAgICAgICAgbSA9ICJOZXcgbmFtZSBmb3Igc291cmNlIGZpbGUgb24gc2VydmVyIGFm dGVyIHJlY2VwdGlvbiI7Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0gICAgICAgICAgICAgIGlmICgo eCA9IGNtZmxkKG0sICIiLCAmcywgbiA9PSBTTkRfTU9WID8geHhzdHJpbmcgOiBOVUxMKSkgPCAw KSB7Ci0gICAgICAgICAgICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAgICAgICAgICAgICAg ICAgIHByaW50ZigiJXNcbiIsIG4gPT0gU05EX01PViA/Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICI/RGVzdGluYXRpb24gcmVxdWlyZWQiIDoKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIj9OZXcgbmFtZSByZXF1aXJlZCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKLSAgICAgICAgICAgICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgICBnb3RvIHhnZXR4OwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgIG1ha2VzdHIoJihwdltuXS5zdmFsKSwqcyA/IGJyc3RyaXAocykgOiBOVUxMKTsKLSAgICAg ICAgICAgICAgcHZbbl0uaXZhbCA9IChwdltuXS5zdmFsKSA/IDEgOiAwOwotICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICB9Ci0jaWZuZGVmIE5PQ1NFVFMKLSAgICAgICAgICBjYXNlIFNO RF9DU0w6ICAgICAgICAgICAgICAgICAvKiBMb2NhbCBjaGFyYWN0ZXIgc2V0ICovCi0gICAgICAg ICAgY2FzZSBTTkRfQ1NSOiAgICAgICAgICAgICAgICAgLyogUmVtb3RlIChzZXJ2ZXIpIGNoYXJz ZXQgKi8KLSAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KGZjc3RhYixuZmlsYywiIiwiIix4eHN0 cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKCh4ID09IC0zKSA/IC0yIDogeCk7Ci0g ICAgICAgICAgICBpZiAobiA9PSBTTkRfQ1NMKQotICAgICAgICAgICAgICB4X2NzbCA9IHg7Ci0g ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHhfY3NyID0geDsKLSAgICAgICAgICAgIHhf eGxhID0gMTsgICAgICAgICAgICAgICAgICAvKiBPdmVycmlkZXMgZ2xvYmFsIE9GRiBzZXR0aW5n ICovCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgU05EX1hQQTogICAgICAg ICAgICAgICAgIC8qIFRyYW5zcGFyZW50ICovCi0gICAgICAgICAgICB4X3hsYSA9ICAwOwotICAg ICAgICAgICAgeF9jc3IgPSAtMTsKLSAgICAgICAgICAgIHhfY3NsID0gLTE7Ci0gICAgICAgICAg ICBicmVhazsKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSAgICAgICAgICBjYXNlIFNORF9OTUw6 Ci0gICAgICAgICAgICBpZiAoKHggPSBjbW9maSgiTG9jYWwgZmlsZW5hbWUiLCItIiwmcyx4eHN0 cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgZ290byB4Z2V0eDsKLSAgICAgICAgICAgIG1ha2Vz dHIoJmZ0cF9ubWwscyk7Ci0gICAgICAgICAgICBicmVhazsKLQotCSAgY2FzZSBTTkRfUEFUOgkJ CS8qIC9QQVRURVJOOiAqLwotCSAgICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0JICAgIGlmICgoeCA9 IGNtZmxkKCJQYXR0ZXJuIiwiKiIsICZzLCB4eHN0cmluZykpIDwgMCkKLQkgICAgICBnb3RvIHhn ZXR4OwotCSAgICBtYWtlc3RyKCYocHZbbl0uc3ZhbCksKnMgPyBicnN0cmlwKHMpIDogTlVMTCk7 Ci0JICAgIHB2W25dLml2YWwgPSAocHZbbl0uc3ZhbCkgPyAxIDogMDsKLQkgICAgYnJlYWs7Ci0K LQkgIGNhc2UgU05EX05MUzoJCQkvKiAvTkxTVCAqLwotICAgICAgICAgICAgcHZbbl0uaXZhbCA9 IDE7CQkvKiBVc2UgTkxTVCAqLwotCSAgICBwdltTTkRfTUxTXS5pdmFsID0gMDsJLyogRG9uJ3Qg dXNlIE1MU0QgKi8KLQkgICAgYnJlYWs7Ci0KLQkgIGNhc2UgU05EX01MUzoJCQkvKiAvTUxTRCAq LwotICAgICAgICAgICAgcHZbbl0uaXZhbCA9IDE7CQkvKiBVc2UgTUxTRCAqLwotCSAgICBwdltT TkRfTkxTXS5pdmFsID0gMDsJLyogRG9uJ3QgdXNlIE5MU1QgKi8KLQkgICAgYnJlYWs7Ci0KLSAg ICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAvKiAvQUZURVIsIC9QRVJNSVNT SU9OUywgZXRjLi4uICovCi0gICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgXCIlc1wiIHdvcmtz IG9ubHkgd2l0aCBbTV1QVVRcbiIsYXRtYnVmKTsKLSAgICAgICAgICAgIHggPSAtOTsKLSAgICAg ICAgICAgIGdvdG8geGdldHg7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbGluZVswXSA9IE5VTDsK LSAgICBjbWFyZyA9IGxpbmU7Ci0gICAgY21hcmcyID0gYXNuYW1idWY7Ci0gICAgcyA9IGxpbmU7 Ci0vKgotICBGb3IgR0VULCB3ZSB3YW50IHRvIHBhcnNlIGFuIG9wdGlvbmFsIGFzLW5hbWUsIGxp a2Ugd2l0aCBQVVQuCi0gIEZvciBNR0VULCB3ZSBtdXN0IHBhcnNlIGEgbGlzdCBvZiBuYW1lcywg YW5kIHRoZW4gc2VuZCBOTFNUIG9yIE1MU0QKLSAgY29tbWFuZHMgZm9yIGVhY2ggbmFtZSBzZXBh cmF0ZWx5LgotKi8KLSAgICBzd2l0Y2ggKGNtcmVzdWx0LmZjb2RlKSB7ICAgICAgICAgICAvKiBI b3cgZGlkIHdlIGdldCBvdXQgb2Ygc3dpdGNoIGxvb3AgKi8KLSAgICAgIGNhc2UgX0NNRkxEOiAg ICAgICAgICAgICAgICAgICAgICAvKiBGaWVsZCAqLwotICAgICAgICBpZiAoIWdldG9uZSkgewot ICAgICAgICAgICAgcyA9IGJyc3RyaXAoY21yZXN1bHQuc3Jlc3VsdCk7Ci0gICAgICAgICAgICBt YWtlc3RyKCYobWdldGxpc3RbbWdldG4rK10pLHMpOwotICAgICAgICAgICAgd2hpbGUgKCh4ID0g Y21mbGQoIlJlbW90ZSBmaWxlbmFtZSIsIiIsJnMseHhzdHJpbmcpKSAhPSAtMykgewotICAgICAg ICAgICAgICAgIGlmICh4IDwgMCkKLSAgICAgICAgICAgICAgICAgIGdvdG8geGdldHg7Ci0gICAg ICAgICAgICAgICAgbWFrZXN0cigmKG1nZXRsaXN0W21nZXRuKytdKSxicnN0cmlwKHMpKTsKLSAg ICAgICAgICAgICAgICBpZiAobWdldG4gPj0gTUdFVE1BWCkgewotICAgICAgICAgICAgICAgICAg ICBwcmludGYoIj9Ub28gbWFueSBpdGVtcyBpbiBNR0VUIGxpc3RcbiIpOwotICAgICAgICAgICAg ICAgICAgICBnb3RvIHhnZXR4OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAgZ290byB4Z2V0 eDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHMgPSBicnN0cmlwKGNtcmVzdWx0LnNy ZXN1bHQpOwotICAgICAgICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOwotICAgICAg ICAgICAgaWYgKCh4ID0gY21mbGQoIk5hbWUgdG8gc3RvcmUgaXQgdW5kZXIiLCIiLCZzLHh4c3Ry aW5nKSkgPCAwKQotICAgICAgICAgICAgICBpZiAoeCAhPSAtMykKLSAgICAgICAgICAgICAgICBn b3RvIHhnZXR4OwotICAgICAgICAgICAgcyA9IGJyc3RyaXAocyk7Ci0gICAgICAgICAgICBja3N0 cm5jcHkoYXNuYW1idWYscyxDS01BWFBBVEgrMSk7Ci0gICAgICAgICAgICBpZiAoKHggPSBjbWNm bSgpKSA8IDApCi0gICAgICAgICAgICAgIGdvdG8geGdldHg7Ci0gICAgICAgIH0KLSAgICAgICAg YnJlYWs7Ci0gICAgICBjYXNlIF9DTUNGTTogICAgICAgICAgICAgICAgICAgICAgLyogQ29uZmly bWF0aW9uICovCi0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcHJpbnRm KCI/VW5leHBlY3RlZCBmdW5jdGlvbiBjb2RlOiAlZFxuIixjbXJlc3VsdC5mY29kZSk7Ci0gICAg ICAgIHggPSAtOTsKLSAgICAgICAgZ290byB4Z2V0eDsKLSAgICB9Ci0gICAgaWYgKHB2W1NORF9S RUNdLml2YWwgPiAwKSAgICAgICAgICAgLyogL1JFQ1VSU0lWRSAqLwotICAgICAgcmVjdXJzaXZl ID0gMjsKLQotICAgIGlmIChwdltTTkRfQklOXS5pdmFsID4gMCkgeyAgICAgICAgIC8qIC9CSU5B UlkgcmVhbGx5IG1lYW5zIGJpbmFyeS4uLiAqLwotICAgICAgICBmb3JjZXR5cGUgPSAxOyAgICAg ICAgICAgICAgICAgIC8qIFNvIHNraXAgdGhlIG5hbWUtcGF0dGVybiBtYXRjaCAqLwotICAgICAg ICBmdHBfdHlwID0gWFlGVF9COyAgICAgICAgICAgICAgIC8qIFNldCBiaW5hcnkgKi8KLSAgICB9 IGVsc2UgaWYgKHB2W1NORF9UWFRdLml2YWwgPiAwKSB7ICAvKiBTaW1pbGFybHkgZm9yIC9URVhU Li4uICovCi0gICAgICAgIGZvcmNldHlwZSA9IDE7Ci0gICAgICAgIGZ0cF90eXAgPSBYWUZUX1Q7 Ci0gICAgfSBlbHNlIGlmIChwdltTTkRfVEVOXS5pdmFsID4gMCkgeyAgLyogYW5kIC9URU5FWCov Ci0gICAgICAgIGZvcmNldHlwZSA9IDE7Ci0gICAgICAgIGZ0cF90eXAgPSBGVFRfVEVOOwotICAg IH0gZWxzZSBpZiAoZnRwX2NtZGxpbiAmJiBmdHBfeGZlcm1vZGUgPT0gWE1PREVfTSkgewotICAg ICAgICBmb3JjZXR5cGUgPSAxOwotICAgICAgICBmdHBfdHlwID0gYmluYXJ5OwotICAgICAgICBn X2Z0cF90eXAgPSBiaW5hcnk7Ci0gICAgfQotICAgIGlmIChwdltTTkRfQVNOXS5pdmFsID4gMCAm JiBwdltTTkRfQVNOXS5zdmFsICYmICFhc25hbWJ1ZlswXSkgewotICAgICAgICBjaGFyICogcDsK LSAgICAgICAgcCA9IGJyc3RyaXAocHZbU05EX0FTTl0uc3ZhbCk7ICAvKiBBcy1uYW1lICovCi0g ICAgICAgIGNrc3RybmNweShhc25hbWJ1ZixwLENLTUFYUEFUSCsxKTsKLSAgICB9Ci0gICAgZGVi dWcoRjExMCwiZnRwIGdldCBhc25hbWJ1ZiIsYXNuYW1idWYsMCk7Ci0KLSNpZmRlZiBQSVBFU0VO RAotICAgIGlmIChwdltTTkRfQ01EXS5pdmFsID4gMCkgeyAgICAgICAgIC8qIC9DT01NQU5EIC0g c3RyaXAgYW55IGJyYWNlcyAqLwotICAgICAgICBjaGFyICogcDsKLSAgICAgICAgcCA9IGFzbmFt YnVmOwotICAgICAgICBkZWJ1ZyhGMTEwLCJHRVQgL0NPTU1BTkQgYmVmb3JlIHN0cmlwcGluZyIs cCwwKTsKLSAgICAgICAgcCA9IGJyc3RyaXAocCk7Ci0gICAgICAgIGRlYnVnKEYxMTAsIkdFVCAv Q09NTUFORCBhZnRlciBzdHJpcHBpbmciLHAsMCk7Ci0gICAgICAgIGlmICghKnApIHsKLSAgICAg ICAgICAgIHByaW50ZigiP1NvcnJ5LCBhIGNvbW1hbmQgdG8gd3JpdGUgdG8gaXMgcmVxdWlyZWRc biIpOwotICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgZ290byB4Z2V0eDsKLSAgICAg ICAgfQotICAgICAgICBwaXBlbmFtZSA9IHA7Ci0gICAgICAgIHBpcGVzZW5kID0gMTsKLSAgICB9 Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLQotLyogU2V0IHVwIC9NT1ZFIGFuZCAvUkVOQU1FICov Ci0KLSNpZmRlZiBDT01NRU5UCi0gICAgLyogQ29uZmxpY3QgZXhpc3RzIG9ubHkgZm9yIFBVVCAt IHJlbW92ZWQgMTMgTWFyIDIwMDYgLSBmZGMgKi8KLSAgICBpZiAocHZbU05EX0RFTF0uaXZhbCA+ IDAgJiYKLSAgICAgICAgKHB2W1NORF9NT1ZdLml2YWwgPiAwIHx8IHB2W1NORF9SRU5dLml2YWwg PiAwKSkgewotICAgICAgICBwcmludGYoIj9Tb3JyeSwgL0RFTEVURSBjb25mbGljdHMgd2l0aCAv TU9WRSBvciAvUkVOQU1FXG4iKTsKLSAgICAgICAgeCA9IC05OwotICAgICAgICBnb3RvIHhnZXR4 OwotICAgIH0KLSNlbmRpZgkvKiBDT01NRU5UICovCi0jaWZkZWYgQ0tfVE1QRElSCi0gICAgaWYg KHB2W1NORF9NT1ZdLml2YWwgPiAwICYmIHB2W1NORF9NT1ZdLnN2YWwpIHsKLSAgICAgICAgaW50 IGxlbjsKLSAgICAgICAgY2hhciAqIHAgPSBwdltTTkRfTU9WXS5zdmFsOwotICAgICAgICBsZW4g PSBzdHJsZW4ocCk7Ci0gICAgICAgIGlmICghaXNkaXIocCkpIHsgICAgICAgICAgICAgICAgLyog Q2hlY2sgZGlyZWN0b3J5ICovCi0jaWZkZWYgQ0tfTUtESVIKLSAgICAgICAgICAgIGNoYXIgKiBz ID0gTlVMTDsKLSAgICAgICAgICAgIHMgPSAoY2hhciAqKW1hbGxvYyhsZW4gKyA0KTsKLSAgICAg ICAgICAgIGlmIChzKSB7Ci0gICAgICAgICAgICAgICAgc3RyY3B5KHMscCk7ICAgICAgICAgICAg Lyogc2FmZSAqLwotI2lmZGVmIGRhdGFnZW5lcmFsCi0gICAgICAgICAgICAgICAgaWYgKHNbbGVu LTFdICE9ICc6JykgeyBzW2xlbisrXSA9ICc6Jzsgc1tsZW5dID0gTlVMOyB9Ci0jZWxzZQotICAg ICAgICAgICAgICAgIGlmIChzW2xlbi0xXSAhPSAnLycpIHsgc1tsZW4rK10gPSAnLyc7IHNbbGVu XSA9IE5VTDsgfQotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0gICAgICAgICAgICAgICAgc1ts ZW4rK10gPSAnWCc7Ci0gICAgICAgICAgICAgICAgc1tsZW5dID0gTlVMOwotI2lmZGVmIE5PTUtE SVIKLSAgICAgICAgICAgICAgICB4ID0gLTE7Ci0jZWxzZQotICAgICAgICAgICAgICAgIHggPSB6 bWtkaXIocyk7Ci0jZW5kaWYgLyogTk9NS0RJUiAqLwotICAgICAgICAgICAgICAgIGZyZWUocyk7 Ci0gICAgICAgICAgICAgICAgaWYgKHggPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50 ZigiP0Nhbid0IGNyZWF0ZSBcIiVzXCJcbiIscCk7Ci0gICAgICAgICAgICAgICAgICAgIHggPSAt OTsKLSAgICAgICAgICAgICAgICAgICAgZ290byB4Z2V0eDsKLSAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgcHJpbnRmKCI/RGlyZWN0b3J5IFwiJXNc IiBub3QgZm91bmRcbiIscCk7Ci0gICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICBnb3Rv IHhnZXR4OwotI2VuZGlmIC8qIENLX01LRElSICovCi0gICAgICAgIH0KLSAgICAgICAgbWFrZXN0 cigmcmN2X21vdmUscCk7Ci0gICAgICAgIG1vdmluZyA9IDE7Ci0gICAgfQotI2VuZGlmIC8qIENL X1RNUERJUiAqLwotCi0gICAgaWYgKHB2W1NORF9SRU5dLml2YWwgPiAwKSB7ICAgICAgICAgLyog L1JFTkFNRSAqLwotICAgICAgICBjaGFyICogcCA9IHB2W1NORF9SRU5dLnN2YWw7Ci0gICAgICAg IGlmICghcCkgcCA9ICIiOwotICAgICAgICBpZiAoISpwKSB7Ci0gICAgICAgICAgICBwcmludGYo Ij9OZXcgbmFtZSByZXF1aXJlZCBmb3IgL1JFTkFNRVxuIik7Ci0gICAgICAgICAgICB4ID0gLTk7 Ci0gICAgICAgICAgICBnb3RvIHhnZXR4OwotICAgICAgICB9Ci0gICAgICAgIHAgPSBicnN0cmlw KHApOwotI2lmbmRlZiBOT1NQTAotICAgIC8qIElmIG5hbWUgZ2l2ZW4gaXMgd2lsZCwgcmVuYW1l IHN0cmluZyBtdXN0IGNvbnRhaW4gdmFyaWFibGVzICovCi0gICAgICAgIGlmIChtZ2V0ICYmICFn ZXRvbmUpIHsKLSAgICAgICAgICAgIGNoYXIgKiBzID0gdG1wYnVmOwotICAgICAgICAgICAgeCA9 IFRNUEJVRlNJWjsKLSAgICAgICAgICAgIHp6c3RyaW5nKHAsJnMsJngpOwotICAgICAgICAgICAg aWYgKCFzdHJjbXAodG1wYnVmLHApKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKAotICAgICI/ L1JFTkFNRSBmb3IgZmlsZSBncm91cCBtdXN0IGNvbnRhaW4gdmFyaWFibGVzIHN1Y2ggYXMgXFx2 KGZpbGVuYW1lKVxuIgotICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAg IHggPSAtOTsKLSAgICAgICAgICAgICAgICBnb3RvIHhnZXR4OwotICAgICAgICAgICAgfQotICAg ICAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICAgICAgcmVuYW1pbmcgPSAxOwotICAgICAg ICBtYWtlc3RyKCZyY3ZfcmVuYW1lLHApOwotICAgICAgICBkZWJ1ZyhGMTEwLCJGVFAgcmN2X3Jl bmFtZSIscmN2X3JlbmFtZSwwKTsKLSAgICB9Ci0gICAgaWYgKCFjbWFyZ1swXSAmJiBtZ2V0biA9 PSAwICYmIGdldG9uZSAmJiBwdltTTkRfRklMXS5pdmFsIDwgMSkgewotICAgICAgICBwcmludGYo Ij9GaWxlbmFtZSByZXF1aXJlZCBidXQgbm90IGdpdmVuXG4iKTsKLSAgICAgICAgeCA9IC05Owot ICAgICAgICBnb3RvIHhnZXR4OwotICAgIH0gZWxzZSBpZiAoKGNtYXJnWzBdIHx8IG1nZXRuID4g MCkgJiYgcHZbU05EX0ZJTF0uaXZhbCA+IDApIHsKLSAgICAgICAgcHJpbnRmKCI/WW91IGNhbid0 IGdpdmUgYm90aCAvTElTVEZJTEUgYW5kIGEgcmVtb3RlIGZpbGVuYW1lXG4iKTsKLSAgICAgICAg eCA9IC05OwotICAgICAgICBnb3RvIHhnZXR4OwotICAgIH0KLSAgICBDSEVDS0NPTk4oKTsgICAg ICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBjb25uZWN0aW9uICovCi0KLSAgICBpZiAocHZb U05EX0NPTF0uaXZhbCA+IC0xKQotICAgICAgeF9mbmMgPSBwdltTTkRfQ09MXS5pdmFsOwotCi0j aWZuZGVmIE5PU1BMCi0gICAgLyogSWYgYXMtbmFtZSBnaXZlbiBmb3IgTUdFVCwgYXMtbmFtZSBt dXN0IGNvbnRhaW4gdmFyaWFibGVzICovCi0gICAgaWYgKG1nZXQgJiYgIWdldG9uZSAmJiBhc25h bWJ1ZlswXSAmJiB4X2ZuYyAhPSBYWUZYX0EpIHsKLSAgICAgICAgY2hhciAqIHMgPSB0bXBidWY7 Ci0gICAgICAgIHggPSBUTVBCVUZTSVo7Ci0gICAgICAgIHp6c3RyaW5nKGFzbmFtYnVmLCZzLCZ4 KTsKLSAgICAgICAgaWYgKCFzdHJjbXAodG1wYnVmLGFzbmFtYnVmKSkgewotICAgICAgICAgICAg cHJpbnRmKAotICAgICI/QXMtbmFtZSBmb3IgTUdFVCBtdXN0IGNvbnRhaW4gdmFyaWFibGVzIHN1 Y2ggYXMgXFx2KGZpbGVuYW1lKVxuIgotICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAg ICB4ID0gLTk7Ci0gICAgICAgICAgICBnb3RvIHhnZXR4OwotICAgICAgICB9Ci0gICAgfQotI2Vu ZGlmIC8qIE5PU1BMICovCi0KLS8qIGRvZ2V0OiAqLwotCi0gICAgaWYgKHB2W1NORF9TSEhdLml2 YWwgPiAwIHx8IGZ0cF9ubWwpIHsgLyogR0VUIC9RVUlFVC4uLiAqLwotICAgICAgICBmZGlzcGxh ID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICBkaXNwbGEgPSAxOwotICAgICAgICBpZiAobWRl bCB8fCBmdHBfZGViKQotCSAgZmRpc3BsYSA9IFhZRkRfQjsKLSAgICB9Ci0gICAgZGVsZXRpbmcg PSAwOwotICAgIGlmIChwdltTTkRfREVMXS5pdmFsID4gMCkgICAgICAgICAgIC8qIC9ERUxFVEUg d2FzIHNwZWNpZmllZCAqLwotICAgICAgZGVsZXRpbmcgPSAxOwotICAgIGlmIChwdltTTkRfRVhD XS5pdmFsID4gMCkKLSAgICAgIG1ha2VsaXN0KHB2W1NORF9FWENdLnN2YWwscmN2ZXhjZXB0LE5T TkRFWENFUFQpOwotICAgIGlmIChwdltTTkRfU01BXS53dmFsID4gLTEpCi0gICAgICBnZXRzbWFs bGVyID0gcHZbU05EX1NNQV0ud3ZhbDsKLSAgICBpZiAocHZbU05EX0xBUl0ud3ZhbCA+IC0xKQot ICAgICAgZ2V0bGFyZ2VyID0gcHZbU05EX0xBUl0ud3ZhbDsKLSAgICBpZiAocHZbU05EX05BTV0u aXZhbCA+IC0xKQotICAgICAgeF9jbnYgPSBwdltTTkRfTkFNXS5pdmFsOwotICAgIGlmIChwdltT TkRfRVJSXS5pdmFsID4gLTEpCi0gICAgICBnZXRlcnJvciA9IHB2W1NORF9FUlJdLml2YWw7Ci0g ICAgaWYgKHB2W1NORF9NQUldLml2YWwgPiAtMSkKLSAgICAgIHRvc2NyZWVuID0gMTsKLQotICAg IGlmIChwdltTTkRfTkxTXS5pdmFsID4gMCkgewkJLyogRm9yY2UgTkxTVCBvciBNTFNEPyAqLwot CW1nZXRtZXRob2QgPSBTTkRfTkxTOwotCW1nZXRmb3JjZWQgPSAxOwotICAgIH0gZWxzZSBpZiAo cHZbU05EX01MU10uaXZhbCA+IDApIHsKLQltZ2V0bWV0aG9kID0gU05EX01MUzsKLQltZ2V0Zm9y Y2VkID0gMTsKLSAgICB9Ci0KLSNpZmRlZiBGVFBfUkVTVEFSVAotICAgIGlmIChwdltTTkRfUkVT XS5pdmFsID4gMCkgewotICAgICAgICBpZiAoIWZ0cF90eXApIHsKLSAgICAgICAgICAgIHByaW50 ZigiP1NvcnJ5LCBHRVQgL1JFQ09WRVIgcmVxdWlyZXMgYmluYXJ5IG1vZGVcbiIpOwotICAgICAg ICAgICAgeCA9IC05OwotICAgICAgICAgICAgZ290byB4Z2V0eDsKLSNpZmRlZiBDT01NRU5UCi0g ICAgICAgIC8qIE5vdCB0cnVlIC0gdGhlIGZhY3QgdGhhdCB0aGUgaW5pdGlhbCBSRVNUIGZhaWxz IGRvZXMgbm90IG1lYW4gKi8KLSAgICAgICAgLyogaXQgd2lsbCBmYWlsIGhlcmUuICAqLwotICAg ICAgICB9IGVsc2UgaWYgKCFva3Jlc3RhcnQpIHsKLSAgICAgICAgICAgIHByaW50ZigiV0FSTklO RzogU2VydmVyIG1pZ2h0IG5vdCBzdXBwb3J0IHJlc3RhcnQuLi5cbiIpOwotI2VuZGlmIC8qIENP TU1FTlQgKi8KLSAgICAgICAgfQotICAgICAgICByZXN0YXJ0ID0gMTsKLSAgICB9Ci0jZW5kaWYg LyogRlRQX1JFU1RBUlQgKi8KLQotI2lmZGVmIFBJUEVTRU5ECi0gICAgaWYgKHB2W1NORF9GTFRd Lml2YWwgPiAwKSB7ICAgICAgICAgLyogSGF2ZSBTRU5EIEZJTFRFUj8gKi8KLSAgICAgICAgaWYg KHBpcGVzZW5kKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9Td2l0Y2ggY29uZmxpY3Q6IC9GSUxU RVIgYW5kIC9DT01NQU5EXG4iKTsKLSAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgIGdv dG8geGdldHg7Ci0gICAgICAgIH0KLSAgICAgICAgbWFrZXN0cigmcmN2ZmlsdGVyLHB2W1NORF9G TFRdLnN2YWwpOwotICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgZ2V0IC9GSUxURVIiLCByY3ZmaWx0 ZXIsIDApOwotICAgIH0KLSAgICBpZiAocmN2ZmlsdGVyIHx8IHBpcGVzZW5kKSB7ICAgICAgICAv KiAvUkVTVEFSVCAqLwotI2lmZGVmIEZUUF9SRVNUQVJUCi0gICAgICAgIGlmIChyZXN0YXJ0KSB7 ICAgICAgICAgICAgICAgICAgLyogd2l0aCBwaXBlcyBvciBmaWx0ZXJzICovCi0gICAgICAgICAg ICBwcmludGYoIj9Td2l0Y2ggY29uZmxpY3Q6IC9GSUxURVIgb3IgL0NPTU1BTkQgYW5kIC9SRUNP VkVSXG4iKTsKLSAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgIGdvdG8geGdldHg7Ci0g ICAgICAgIH0KLSNlbmRpZiAvKiBGVFBfUkVTVEFSVCAqLwotICAgICAgICBpZiAocHZbU05EX1VQ RF0uaXZhbCA+IDAgfHwgeF9mbmMgPT0gWFlGWF9NIHx8IHhfZm5jID09IFhZRlhfVSkgewotICAg ICAgICAgICAgcHJpbnRmKAotCQkiP1N3aXRjaCBjb25mbGljdDogL0ZJTFRFUiBvciAvQ09NTUFO RCBhbmQgRGF0ZSBDaGVja2luZ1xuIik7Ci0gICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAg ICBnb3RvIHhnZXR4OwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIFBJUEVTRU5EICovCi0K LSAgICB0ZmMgPSAoQ0tfT0ZGX1QpMDsJCQkvKiBJbml0aWFsaXplIHN0YXRzIGFuZCBjb3VudGVy cyAqLwotICAgIGZpbGNudCA9IDA7Ci0gICAgcGt0bnVtID0gMDsKLSAgICBycGFja2V0cyA9IDBM OwotCi0gICAgaWYgKHB2W1NORF9GSUxdLml2YWwgPiAwKSB7Ci0gICAgICAgIGlmICh6b3Blbmko Wk1GSUxFLHB2W1NORF9GSUxdLnN2YWwpIDwgMSkgewotICAgICAgICAgICAgZGVidWcoRjExMSwi ZnRwIGdldCBjYW4ndCBvcGVuIGxpc3RmaWxlIixwdltTTkRfRklMXS5zdmFsLGVycm5vKTsKLSAg ICAgICAgICAgIHByaW50ZigiP0ZhaWx1cmUgdG8gb3BlbiBsaXN0ZmlsZSAtIFwiJXNcIlxuIixw dltTTkRfRklMXS5zdmFsKTsKLSAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgIGdvdG8g eGdldHg7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHpzaW5sKFpNRklMRSx0bXBidWYsQ0tNQVhQ QVRIKSA8IDApIHsgLyogUmVhZCBhIGxpbmUgKi8KLSAgICAgICAgICAgIHpjbG9zZShaTUZJTEUp OyAgICAgICAgICAgICAgICAgICAgICAgLyogRmFpbGVkICovCi0gICAgICAgICAgICBkZWJ1ZyhG MTEwLCJmdHAgZ2V0IGxpc3RmaWxlIEVPRiIscHZbU05EX0ZJTF0uc3ZhbCwwKTsKLSAgICAgICAg ICAgIHByaW50ZigiP0VtcHR5IGxpc3RmaWxlIC0gXCIlc1wiXG4iLHB2W1NORF9GSUxdLnN2YWwp OwotICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgZ290byB4Z2V0eDsKLSAgICAgICAg fQotICAgICAgICBsaXN0ZmlsZSA9IDE7Ci0gICAgICAgIGRlYnVnKEYxMTAsImZ0cCBnZXQgbGlz dGZpbGUgZmlyc3QiLHRtcGJ1ZiwwKTsKLSAgICAgICAgbWFrZXN0cigmKG1nZXRsaXN0WzBdKSx0 bXBidWYpOwotICAgIH0KLSAgICB0MCA9IGdtc3RpbWVyKCk7ICAgICAgICAgICAgICAgICAgICAv KiBSZWNvcmQgc3RhcnRpbmcgdGltZSAqLwotCi0gICAgdXBkYXRpbmcgPSAwOwkJCS8qIENoZWNr aW5nIGRhdGVzPyAqLwotICAgIGlmIChwdltTTkRfVVBEXS5pdmFsID4gMCB8fCAoIW1kZWwgJiYg eF9mbmMgPT0gWFlGWF9VKSkKLSAgICAgIHVwZGF0aW5nID0gMTsKLSAgICBpZiAocHZbU05EX0RJ Rl0uaXZhbCA+IDAgfHwgeF9mbmMgPT0gWFlGWF9NKQotICAgICAgdXBkYXRpbmcgPSAyOwotICAg IGlmICh1cGRhdGluZykJCQkvKiBUaGVzZSBzd2l0Y2hlcyBmb3JjZSBGVFAgREFURVMgT04gKi8K LSAgICAgIGZ0cF9kYXRlcyB8PSAyOwotCi0gICAgd2hhdCA9IG1kZWwgPyBXX0ZUUHxXX0ZUX0RF TEUgOiBXX1JFQ1Z8V19GVFA7IC8qIFdoYXQgd2UncmUgZG9pbmcgKi8KLQotICAgIGNhbmNlbGdy b3VwID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIEdyb3VwIG5vdCBjYW5jZWxlZCB5ZXQgKi8K LSAgICBpZiAoIShmdHBfeGZlcm1vZGUgPT0gWE1PREVfQSAmJiBwYXR0ZXJucyAmJiBnZXRfYXV0 byAmJiAhZm9yY2V0eXBlKSkKLSAgICAgIGNoYW5nZXR5cGUoZnRwX3R5cCwwKTsJCS8qIENoYW5n ZSB0byByZXF1ZXN0ZWQgdHlwZSAqLwotICAgIGJpbmFyeSA9IGZ0cF90eXA7ICAgICAgICAgICAg ICAgICAgIC8qIEZvciBmaWxlLXRyYW5zZmVyIGRpc3BsYXkgKi8KLSAgICBmaXJzdCA9IDE7ICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgTUdFVCBsaXN0ICovCi0gICAgZG9uZSA9IDA7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9vcCBjb250cm9sICovCi0KLSNpZmRlZiBD S19UTVBESVIKLSAgICBpZiAoZGxkaXIgJiYgIWZfdG1wZGlyKSB7ICAgICAgICAgICAvKiBJZiB0 aGV5IGhhdmUgYSBkb3dubG9hZCBkaXJlY3RvcnkgKi8KLSAgICAgICAgaWYgKChzID0gemd0ZGly KCkpKSB7ICAgICAgICAgICAvKiBHZXQgY3VycmVudCBkaXJlY3RvcnkgKi8KLSAgICAgICAgICAg IGlmICh6Y2hkaXIoZGxkaXIpKSB7ICAgICAgICAvKiBDaGFuZ2UgdG8gZG93bmxvYWQgZGlyZWN0 b3J5ICovCi0gICAgICAgICAgICAgICAgY2tzdHJuY3B5KHNhdmRpcixzLFRNUERJUkxFTik7Ci0g ICAgICAgICAgICAgICAgZl90bXBkaXIgPSAxOyAgICAgICAgICAgLyogUmVtZW1iZXIgdGhhdCB3 ZSBkaWQgdGhpcyAqLwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8q IENLX1RNUERJUiAqLwotCi0gICAgaWYgKGZ0cF9ubWwpIHsgICAgICAgICAgICAgICAgICAgICAg LyogL05BTUVMSVNUICovCi0gICAgICAgIGRlYnVnKEYxMTAsImZ0cCBHRVQgZnRwX25tbCIsZnRw X25tbCwwKTsKLSAgICAgICAgaWYgKGZ0cF9ubWxbMF0gPT0gJy0nICYmIGZ0cF9ubWxbMV0gPT0g MCkKLSAgICAgICAgICBmcF9ubWwgPSBzdGRvdXQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBm cF9ubWwgPSBmb3BlbihmdHBfbm1sLCAid2IiKTsKLSAgICAgICAgaWYgKCFmcF9ubWwpIHsKLSAg ICAgICAgICAgIHByaW50ZigiPyVzOiAlc1xuIixmdHBfbm1sLGNrX2VycnN0cigpKTsKLSAgICAg ICAgICAgIGdvdG8geGdldHg7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgd2hpbGUgKCFkb25lICYm ICFjYW5jZWxncm91cCkgeyAgICAgLyogTG9vcCBmb3IgYWxsIGZpbGVzICovCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb3IgdW50aWwgY2FuY2VsZWQuICovCi0j aWZkZWYgRlRQX1BST1hZCi0gICAgICAgIC8qIGRvIHNvbWV0aGluZyBoZXJlIGlmIHByb3h5ICov Ci0jZW5kaWYgLyogRlRQX1BST1hZICovCi0KLSAgICAgICAgcnNfbGVuID0gKENLX09GRl9UKTA7 CQkvKiBSRUdFVCBwb3NpdGlvbiAqLwotICAgICAgICBjYW5jZWxmaWxlID0gMDsgICAgICAgICAg ICAgICAgIC8qIFRoaXMgZmlsZSBub3QgY2FuY2VsZWQgeWV0ICovCi0gICAgICAgIGhhc3BhdGgg PSAwOyAgICAgICAgICAgICAgICAgICAgLyogUmVjYWxjdWxhdGUgdGhpcyBlYWNoIHRpbWUgdGhy dSAqLwotCi0gICAgICAgIGlmIChnZXRvbmUpIHsgICAgICAgICAgICAgICAgICAgLyogR0VUICov Ci0gICAgICAgICAgICBjaGFyICogcDsKLSAgICAgICAgICAgIHMgPSBsaW5lOwotICAgICAgICAg ICAgc3JjID0gbGluZTsgICAgICAgICAgICAgICAgIC8qIFNlcnZlciBuYW1lICovCi0gICAgICAg ICAgICBkb25lID0gMTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBnZXQgZmlsZSIscyww KTsKLSAgICAgICAgfSBlbHNlIGlmIChtZ2V0KSB7ICAgICAgICAgICAgICAvKiBNR0VUICovCi0g ICAgICAgICAgICBzcmMgPSBtZ2V0bGlzdFttZ2V0eF07Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEx LCJmdHAgbWdldCByZW1vdGVfZmlsZXMgQSIsc3JjLGZpcnN0KTsKLSAgICAgICAgICAgIHMgPSAo Y2hhciAqKXJlbW90ZV9maWxlcyhmaXJzdCwKLQkJCQkgICAgIChDSEFSICopbWdldGxpc3RbbWdl dHhdLAotCQkJCSAgICAgKENIQVIgKilwdltTTkRfUEFUXS5zdmFsLAotCQkJCSAgICAgMAotCQkJ CSAgICAgKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBtZ2V0IHJlbW90ZV9maWxlcyBC IixzLDApOwotICAgICAgICAgICAgaWYgKCFzKSBzID0gIiI7Ci0gICAgICAgICAgICBpZiAoISpz KSB7Ci0gICAgICAgICAgICAgICAgZmlyc3QgPSAxOwotICAgICAgICAgICAgICAgIGlmIChsaXN0 ZmlsZSkgewkJLyogTmFtZXMgZnJvbSBsaXN0ZmlsZSAqLwotICAgICAgICAgICAgICAgICAgYWdh aW46Ci0gICAgICAgICAgICAgICAgICAgIHRtcGJ1ZlswXSA9IE5VTDsKLSAgICAgICAgICAgICAg ICAgICAgd2hpbGUgKCF0bXBidWZbMF0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh6 c2lubChaTUZJTEUsdG1wYnVmLENLTUFYUEFUSCkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgemNsb3NlKFpNRklMRSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVi dWcoRjExMCwiZnRwIGdldCBsaXN0ZmlsZSBFT0YiLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHB2W1NORF9GSUxdLnN2YWwsMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgbWFrZXN0cigmKG1nZXRsaXN0WzBdKSxOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gMTsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoZG9uZSkK LSAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgICAgICBt YWtlc3RyKCYobWdldGxpc3RbMF0pLHRtcGJ1Zik7Ci0JCSAgICBkZWJ1ZyhGMTEwLCJmdHAgZ2V0 IGxpc3RmaWxlIG5leHQiLHRtcGJ1ZiwwKTsKLSAgICAgICAgICAgICAgICAgICAgcyA9IChjaGFy ICopcmVtb3RlX2ZpbGVzKGZpcnN0LAotCQkJCQkgICAgIChDSEFSICopbWdldGxpc3RbMF0sCi0J CQkJCSAgICAgKENIQVIgKilwdltTTkRfUEFUXS5zdmFsLAotCQkJCQkgICAgIDAKLQkJCQkJICAg ICApOwotCQkgICAgZGVidWcoRjExMCwiZnRwIG1nZXQgcmVtb3RlX2ZpbGVzIEMiLHMsMCk7Ci0g ICAgICAgICAgICAgICAgICAgIGlmICghcykgewotICAgICAgICAgICAgICAgICAgICAgICAgZnRz Y3JlZW4oU0NSX0ZOLCdGJywoQ0tfT0ZGX1QpMCxzKTsKLSAgICAgICAgICAgICAgICAgICAgICAg IGZ0c2NyZWVuKFNDUl9TVCxTVF9NU0csKENLX09GRl9UKTAsIkZpbGUgbm90IGZvdW5kIik7Ci0g ICAgICAgICAgICAgICAgICAgICAgICB0bG9nKEYxMTAsImZ0cCBnZXQgZmlsZSBub3QgZm91bmQ6 IixzLDApOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBhZ2FpbjsKLSAgICAgICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7CQkvKiBOYW1lcyBmcm9tIGNvbW1h bmQgbGluZSAqLwotICAgICAgICAgICAgICAgICAgICBtZ2V0eCsrOwotICAgICAgICAgICAgICAg ICAgICBpZiAobWdldHggPCBtZ2V0bikKLQkJICAgICAgcyA9IChjaGFyICopcmVtb3RlX2ZpbGVz KGZpcnN0LAotCQkJCQkgICAgICAgKENIQVIgKiltZ2V0bGlzdFttZ2V0eF0sCi0JCQkJCSAgICAg ICAoQ0hBUiAqKXB2W1NORF9QQVRdLnN2YWwsCi0JCQkJCSAgICAgICAwCi0JCQkJCSAgICAgICAp OwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0JCSAgICAgIHMgPSBOVUxMOwotCQkgICAgaWYg KCFzKSBtZ2V0eCsrOwotCQkgICAgZGVidWcoRjExMSwiZnRwIG1nZXQgcmVtb3RlX2ZpbGVzIEQi LHMsbWdldHgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIXMpIHsK LQkJICAgIGlmICghZmlyc3QgfHwgbWdldHggPj0gbWdldG4pIHsKLQkJCWRvbmUgPSAxOwotCQkJ YnJlYWs7Ci0JCSAgICB9IGVsc2UgaWYgKGdldGVycm9yKSB7Ci0JCQlzdGF0dXMgPSAwOwotCQkJ ZG9uZSA9IDE7Ci0JCQlicmVhazsKLQkJICAgIH0gZWxzZSB7Ci0JCQljb250aW51ZTsKLQkJICAg IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQlkZWJ1ZyhG MTExLCJmdHAgbWdldCByZW1vdGVfZmlsZXMgRSIscywwKTsKLSAgICAgICAgLyoKLSAgICAgICAg ICBUaGUgc2VtYW50aWNzIG9mIE5MU1QgYXJlIGlsbC1kZWZpbmVkLiAgU3VwcG9zZSB3ZSBoYXZl IGp1c3Qgc2VudAotICAgICAgICAgIE5MU1QgL3BhdGgvW2Etel0qLiAgTW9zdCBzZXJ2ZXJzIHNl bmQgYmFjayBuYW1lcyBsaWtlIC9wYXRoL2ZvbywKLSAgICAgICAgICAvcGF0aC9iYXIsIGV0Yy4g IEJ1dCBzb21lIHNlbmQgYmFjayBvbmx5IGZvbyBhbmQgYmFyLCBhbmQgc3Vic2VxdWVudAotICAg ICAgICAgIFJFVFIgY29tbWFuZHMgYmFzZWQgb24gdGhlIHBhdGhsZXNzIG5hbWVzIGFyZSBub3Qg Z29pbmcgdG8gd29yay4KLSAgICAgICAgKi8KLSAgICAgICAgaWYgKHNlcnZlcnR5cGUgPT0gU1lT X1VOSVggJiYgIWNrc3RyY2hyKHMsJy8nKSkgewotICAgICAgICAgICAgY2hhciAqIHMzOwotICAg ICAgICAgICAgaWYgKChzMyA9IGNrc3RycmNocihtZ2V0bGlzdFttZ2V0eF0sJy8nKSkpIHsKLSAg ICAgICAgICAgICAgICBpbnQgbGVuLCBsZWZ0ID0gNDA5NjsKLSAgICAgICAgICAgICAgICBjaGFy ICogdG1wID0geHRtcGJ1ZjsKLSAgICAgICAgICAgICAgICBsZW4gPSBzMyAtIG1nZXRsaXN0W21n ZXR4XSArIDE7Ci0gICAgICAgICAgICAgICAgY2tzdHJuY3B5KHRtcCxtZ2V0bGlzdFttZ2V0eF0s bGVmdCk7Ci0gICAgICAgICAgICAgICAgdG1wICs9IGxlbjsKLSAgICAgICAgICAgICAgICBsZWZ0 IC09IGxlbjsKLSAgICAgICAgICAgICAgICBja3N0cm5jcHkodG1wLHMsbGVmdCk7Ci0gICAgICAg ICAgICAgICAgcyA9IHh0bXBidWY7Ci0JCWRlYnVnKEYxMTEsImZ0cCBtZ2V0IHJlbW90ZV9maWxl cyBGIixzLDApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZpcnN0ID0gMDsK LSAgICAgICAgc2tpcHRoaXMgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBGaWxlIHNlbGVjdGlv bi4uLiAqLwotICAgICAgICBtc2cgPSAiIjsKLSAgICAgICAgbmFtID0gczsgICAgICAgICAgICAg ICAgICAgICAgICAvKiBGaWxlbmFtZSAod2l0aG91dCBwYXRoKSAqLwotICAgICAgICByYyA9IDA7 ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWwgcmV0dXJuIGNvZGUgKi8KLSAgICAg ICAgczIgPSAiIjsKLQotICAgICAgICBpZiAoIWdldG9uZSAmJiAhc2tpcHRoaXMpIHsgICAgIC8q IEZvciBNR0VUIGFuZCBNREVMRVRFLi4uICovCi0gICAgICAgICAgICBjaGFyIGMsICogcCA9IHM7 Ci0gICAgICAgICAgICBpbnQgc3J2cGF0aCA9IDA7Ci0gICAgICAgICAgICBpbnQgdXNycGF0aCA9 IDA7Ci0gICAgICAgICAgICBpbnQgaSwgayA9IDA7Ci0KLQkgICAgZGVidWcoRjExMSwiZnRwIG1n ZXQgaGF2ZXR5cGUiLHMsaGF2ZXR5cGUpOwotCSAgICBpZiAoaGF2ZXR5cGUgPiAwICYmIGhhdmV0 eXBlICE9IEZUWVBfRklMRSkgewotCQkvKiBTZXJ2ZXIgc2F5cyBpdCdzIG5vdCBmaWxlLi4uICov Ci0JCWRlYnVnKEYxMTAsImZ0cCBtZ2V0IG5vdC1hLWZpbGUiLHMsMCk7Ci0JCWNvbnRpbnVlOwot CSAgICB9Ci0vKgotICBFeHBsYW5hdGlvbjogU29tZSBmdHAgc2VydmVycyAoc3VjaCBhcyB3dS1m dHBkKSByZXR1cm4gYSByZWN1cnNpdmUgbGlzdC4KLSAgQnV0IGlmIHRoZSBjbGllbnQgZGlkIG5v dCBhc2sgZm9yIGEgcmVjdXJzaXZlIGxpc3QsIHdlIGhhdmUgdG8gaWdub3JlIGFueQotICBzZXJ2 ZXIgZmlsZXMgdGhhdCBpbmNsdWRlIGEgcGF0aG5hbWUgdGhhdCBleHRlbmRzIGJleW9uZCBhbnkg cGF0aCB0aGF0Ci0gIHdhcyBpbmNsdWRlZCBpbiB0aGUgdXNlcidzIHJlcXVlc3QuCi0KLSAgVXNl cidzIGZpbGVzcGVjIGlzIGJsYWggb3IgcGF0aC9ibGFoIChvciBvdGhlciBub24tVU5JWCBzeW50 YXgpLiAgV2UgbmVlZCB0bwotICBnZXQgdGhlIHVzZXIncyBwYXRoIHNlZ21lbnQuICBUaGVuLCBm b3IgZWFjaCBpbmNvbWluZyBmaWxlLCBpZiBpdCBiZWdpbnMKLSAgd2l0aCB0aGUgc2FtZSBwYXRo IHNlZ21lbnQsIHdlIG11c3Qgc3RyaXAgaXQgKHBvaW50IHBhc3QgaXQpLgotKi8KLSAgICAgICAg ICAgIHNyYyA9IG1nZXRsaXN0W21nZXR4XTsgICAgICAvKiBJbiBjYXNlIGl0IG1vdmVkISAqLwot CSAgICBpZiAoc3JjKSB7Ci0JCWZvciAoaSA9IDA7IHNyY1tpXTsgaSsrKSB7IC8qIEZpbmQgcmln aHRtb3N0IHBhdGggc2VwYXJhdG9yICovCi0JCSAgICBpZiAoaXNwYXRoc2VwKHNyY1tpXSkpIC8q IGluIHVzZXIncyBwYXRobmFtZSAqLwotCQkgICAgICBrID0gaSArIDE7Ci0JCX0KLQkgICAgfSBl bHNlIHsKLQkJc3JjID0gIiI7Ci0JICAgIH0KLSAgICAgICAgICAgIHVzcnBhdGggPSBrOyAgICAg ICAgICAgICAgICAvKiBVc2VyIHBhdGggc2VnbWVudCBsZW5ndGggKi8KLSAgICAgICAgICAgIGRl YnVnKEYxMTEsImZ0cCBnZXQgdXNycGF0aCIsc3JjLHVzcnBhdGgpOwotCi0gICAgICAgICAgICBw ID0gczsgICAgICAgICAgICAgICAgICAgICAgLyogU2VydmVyIGZpbGVuYW1lICovCi0gICAgICAg ICAgICB3aGlsZSAoKGMgPSAqcCsrKSkgeyAgICAgICAgLyogTG9vayBmb3IgcGF0aCBpbiBzZXJ2 ZXIgZmlsZW5hbWUgKi8KLSAgICAgICAgICAgICAgICBpZiAoaXNwYXRoc2VwKGMpKSB7Ci0JCSAg ICAvKiBoYXNwYXRoKys7ICovCi0gICAgICAgICAgICAgICAgICAgIG5hbSA9IHA7ICAgICAgICAg ICAgLyogUGF0aGxlc3MgbmFtZSAoZm9yIGNrbWF0Y2gpICovCi0gICAgICAgICAgICAgICAgICAg IHNydnBhdGggPSBwIC0gczsgICAgLyogU2VydmVyIHBhdGggc2VnbWVudCBsZW5ndGggKi8KLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJm dHAgZ2V0IHNydnBhdGgiLHMsc3J2cGF0aCk7Ci0KLQkgICAgaWYgKHVzcnBhdGggPT0gMCkgewot LyoKLSAgSGVyZSB3ZSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIgc2FpZCAibWdldCBm b28iIHdoZXJlIGZvbyBpcyBhCi0gIGRpcmVjdG9yeSBuYW1lLCBhbmQgdGhlIHNlcnZlciBpcyBz ZW5kaW5nIGJhY2sgbmFtZXMgbGlrZSAiZm9vL2ZpbGUxIiwKLSAgImZvby9maWxlMiIsIGV0Yy4g IFRoaXMgaXMgYSBuYXN0eSB0cmljayBidXQgaXQncyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUKLSAg dXNlciBjYW4ndCBjb21wZW5zYXRlIGJ5IHR5cGluZyAibWdldCBmb28vIiBiZWNhdXNlIHRoZW4g dGhlIHNlcnZlciBpcwotICBsaWtlbHkgdG8gc2VuZCBiYWNrICJmb28vL2ZpbGUxLCBmb28vL2Zp bGUyIiBldGMsIGFuZCB3ZSBzdGlsbCB3b24ndAotICBnZXQgYSBtYXRjaC4uLgotKi8KLQkJaW50 IHNyY2xlbiA9IDAsIHNydmxlbiA9IDA7Ci0JCWlmIChzcmMpIHNyY2xlbiA9IHN0cmxlbihzcmMp OwotCQlpZiAocykgc3J2bGVuID0gc3RybGVuKHMpOwotCQlpZiAoc3JjICYmIChzcnZsZW4gPiBz cmNsZW4pKSB7Ci0JCSAgICBpZiAoIXN0cm5jbXAoc3JjLHMsc3JjbGVuKSAmJiBpc3BhdGhzZXAo c1tzcmNsZW5dKSkgewotCQkJY2hhciAqIHRtcHNyYyA9IE5VTEw7Ci0JCQl0bXBzcmMgPSAoY2hh ciAqKW1hbGxvYyhzcmNsZW4gKyAyKTsKLQkJCXN0cm5jcHkodG1wc3JjLHNyYyxzcmNsZW4pOwot CQkJdG1wc3JjW3NyY2xlbl0gPSBzW3NyY2xlbl07Ci0JCQl0bXBzcmNbc3JjbGVuKzFdID0gTlVM OwotCQkJZnJlZShtZ2V0bGlzdFttZ2V0eF0pOwotCQkJbWdldGxpc3RbbWdldHhdID0gdG1wc3Jj OwotCQkJdG1wc3JjID0gTlVMTDsKLQkJCXNyYyA9IG1nZXRsaXN0W21nZXR4XTsKLQkJCXVzcnBh dGggPSBzcmNsZW4rMTsKLQkJICAgIH0JCQkgICAgICAKLQkJfQotCSAgICB9Ci0vKgotICBJZiBh cy1uYW1lIG5vdCBnaXZlbiBhbmQgc2VydmVyIGZpbGVuYW1lIGluY2x1ZGVzIHBhdGggdGhhdCBt YXRjaGVzCi0gIHRoZSBwYXRobmFtZSBmcm9tIHRoZSB1c2VyJ3MgZmlsZSBzcGVjaWZpY2F0aW9u LCB3ZSBtdXN0IHRyaW0gdGhlIGNvbW1vbgotICBwYXRoIHByZWZpeCBmcm9tIHRoZSBzZXJ2ZXIn cyBuYW1lIHdoZW4gY29uc3RydWN0aW5nIHRoZSBsb2NhbCBuYW1lLgotKi8KLSAgICAgICAgICAg IGlmIChzcmMgJiYJCQkvKiBXZWQgU2VwIDI1IDE3OjI3OjQ4IDIwMDIgKi8KLQkJIWFzbmFtYnVm WzBdICYmCi0JCSFyZWN1cnNpdmUgJiYJCS8qIFRodSBTZXAgMTkgMTY6MTE6NTkgMjAwMiAqLwot CQkoc3J2cGF0aCA+IDApICYmCi0JCSFzdHJuY21wKHNyYyxzLHVzcnBhdGgpKSB7Ci0gICAgICAg ICAgICAgICAgczIgPSBzICsgdXNycGF0aDsgICAgICAgLyogTG9jYWwgbmFtZSBza2lwcyBwYXN0 IHJlbW90ZSBwYXRoICovCi0gICAgICAgICAgICB9Ci0jaWZkZWYgQ09NTUVOVAotCSAgICAvKiBU aGlzIGRvZXNuJ3Qgd29yayBpZiB0aGUgcGF0aCBwcmVmaXggY29udGFpbnMgd2lsZGNhcmRzISAq LwotCSAgICBoYXNwYXRoID0gKHNydnBhdGggPiB1c3JwYXRoKTsKLSNlbHNlCi0JICAgIHsJCQkJ LyogQ291bnQgcGF0aCBzZWdtZW50cyBpbnN0ZWFkICovCi0JCWludCB4MSA9IDAsIHgyID0gMDsK LQkJY2hhciAqcDsKLQkJZm9yIChwID0gczsgKnA7IHArKykKLQkJICBpZiAoaXNwYXRoc2VwKCpw KSkgeDErKzsKLQkJZm9yIChwID0gc3JjOyAqcDsgcCsrKSB7Ci0JCSAgICBpZiAoaXNwYXRoc2Vw KCpwKSkgeDIrKzsKLQkJfQotCQloYXNwYXRoID0gcmVjdXJzaXZlID8geDEgfHwgeDIgOiB4MSA+ IHgyOwotCQlkZWJ1ZyhGMTExLCJmdHAgZ2V0IHNlcnZlciBwYXRoIHNlZ21lbnRzIixzLHgxKTsK LQkJZGVidWcoRjExMSwiZnRwIGdldCB1c2VyICAgcGF0aCBzZWdtZW50cyIsc3JjLHgyKTsKLQkg ICAgfQotCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgZGVidWcoRjExMSwiZnRw IGdldCBoYXNwYXRoIixzK3VzcnBhdGgsaGFzcGF0aCk7Ci0KLSAgICAgICAgICAgIGlmIChoYXNw YXRoKSB7ICAgICAgICAgICAgICAvKiBTZXJ2ZXIgZmlsZSBoYXMgcGF0aCBzZWdtZW50cz8gKi8K LSAgICAgICAgICAgICAgICBpZiAoIXJlY3Vyc2l2ZSkgeyAgICAgICAvKiBbTV1HRVQgL1JFQ1VS U0lWRT8gKi8KLS8qCi0gIFdlIGRpZCBub3QgYXNrIGZvciBhIHJlY3Vyc2l2ZSBsaXN0aW5nLCBi dXQgdGhlIHNlcnZlciBpcyBzZW5kaW5nIHVzIG9uZQotICBhbnl3YXkgKGFzIHd1LWZ0cGQgaXMg d29udCB0byBkbykuICBXZSBnZXQgaGVyZSBpZiB0aGUgY3VycmVudCBmaWxlbmFtZQotICBpbmNs dWRlcyBhIHBhdGggc2VnbWVudCBiZXlvbmQgYW55IHBhdGggc2VnbWVudCB3ZSBhc2tlZCBmb3Ig aW4gb3VyCi0gIG5vbi1yZWN1cnNpdmUgW01dR0VUIGNvbW1hbmQuICBXZSBNVVNUIHNraXAgdGhp cyBmaWxlLgotKi8KLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiZnRwIGdldCBza2lw cGluZyBiZWNhdXNlIG9mIHBhdGgiLHMsMCk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChn ZXRvbmUgJiYgIXNraXB0aGlzKSB7IC8qIEdFVCAobm90IE1HRVQpICovCi0gICAgICAgICAgICBj aGFyICogcCA9IG5hbTsKLQkgICAgd2hpbGUgKChjID0gKnArKykpIHsJLyogSGFuZGxlIHBhdGgg aW4gbG9jYWwgbmFtZSAqLwotCQlpZiAoaXNwYXRoc2VwKGMpKSB7Ci0JCSAgICBpZiAocmVjdXJz aXZlKSB7CS8qIElmIHJlY3Vyc2l2ZSwga2VlcCBpdCAqLwotCQkJaGFzcGF0aCA9IDE7Ci0JCQli cmVhazsKLQkJICAgIH0gZWxzZSB7CQkvKiBPdGhlcndpc2UgbG9zZSBpdC4gKi8KLQkJICAgICAg bmFtID0gcDsKLQkJICAgIH0KLQkJfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgczIgPSBu YW07Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCEqbmFtKSAgICAgICAgICAgICAgICAgICAgICAv KiBOYW1lIHdpdGhvdXQgcGF0aCAqLwotICAgICAgICAgIG5hbSA9IHM7Ci0KLSAgICAgICAgaWYg KCFza2lwdGhpcyAmJiBwdltTTkRfTk9EXS5pdmFsID4gMCkgeyAvKiAvTk9ET1RGSUxFUyAqLwot ICAgICAgICAgICAgaWYgKG5hbVswXSA9PSAnLicpCi0JICAgICAgY29udGludWU7Ci0gICAgICAg IH0KLSAgICAgICAgaWYgKCFza2lwdGhpcyAmJiByY3ZleGNlcHRbMF0pIHsgLyogL0VYQ0VQVDog bGlzdCAqLwotCSAgICBpbnQgeHg7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTlNOREVY Q0VQVDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFyY3ZleGNlcHRbaV0pIHsKLSAgICAg ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCQl4eCA9IGNrbWF0Y2go cmN2ZXhjZXB0W2ldLCBuYW0sIHNlcnZlcnR5cGUgPT0gU1lTX1VOSVgsIDEpOwotCQlkZWJ1ZyhG MTExLCJmdHAgbWdldCAvZXhjZXB0IG1hdGNoIixyY3ZleGNlcHRbaV0seHgpOwotICAgICAgICAg ICAgICAgIGlmICh4eCkgewotICAgICAgICAgICAgICAgICAgICB0bG9nKEYxMDAsIiByZWZ1c2Vk OiBleGNlcHRpb24gbGlzdCIsIiIsMCk7Ci0JCSAgICBtc2cgPSAiUmVmdXNlZDogRXhjZXB0aW9u IExpc3QiOwotICAgICAgICAgICAgICAgICAgICBza2lwdGhpcysrOwotICAgICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K LSAgICAgICAgaWYgKCFza2lwdGhpcyAmJiBwdltTTkRfTk9CXS5pdmFsID4gMCkgeyAvKiAvTk9C QUNLVVBGSUxFUyAqLwotICAgICAgICAgICAgaWYgKGNrbWF0Y2goCi0jaWZkZWYgQ0tSRUdFWAot ICAgICAgICAgICAgICAgICAgICAgICAgIiouflswLTldKn4iCi0jZWxzZQotICAgICAgICAgICAg ICAgICAgICAgICAgIioufip+IgotI2VuZGlmIC8qIENLUkVHRVggKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgICxuYW0sMCwxKSA+IDApCi0gICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg ICB9Ci0gICAgICAgIGlmICgheF94bGEpIHsgICAgICAgICAgICAgICAgICAgLyogSWYgdHJhbnNs YXRpb24gaXMgb2ZmICovCi0gICAgICAgICAgICB4X2NzbCA9IC0yOyAgICAgICAgICAgICAgICAg LyogdW5zZXQgdGhlIGNoYXJzZXRzICovCi0gICAgICAgICAgICB4X2NzciA9IC0yOwotICAgICAg ICB9Ci0gICAgICAgIGNrc3RybmNweShmaWxuYW0scyxDS01BWFBBVEgpOyAgLyogRm9yIFx2KGZp bGVuYW1lKSAqLwotICAgICAgICBpZiAoISpzMikgICAgICAgICAgICAgICAgICAgICAgIC8qIExv Y2FsIG5hbWUgKi8KLSAgICAgICAgICBzMiA9IGFzbmFtYnVmOyAgICAgICAgICAgICAgICAvKiBB cy1uYW1lICovCi0KLQlpZiAoISpzMikJCQkvKiBTYXQgTm92IDE2IDE5OjE5OjM5IDIwMDIgKi8K LQkgIHMyID0gcmVjdXJzaXZlID8gcyA6IG5hbTsJLyogRnJpIEphbiAxMCAxMzoxNToxOSAyMDAz ICovCi0KLSAgICAgICAgZGVidWcoRjExMCwiZnRwIGdldCBmaWxuYW0gICIscywwKTsKLSAgICAg ICAgZGVidWcoRjExMCwiZnRwIGdldCBhc25hbWUgQSIsczIsMCk7Ci0KLSAgICAgICAgLyogUmVj ZWl2aW5nIHRvIHJlYWwgZmlsZSAqLwotICAgICAgICBpZiAoIXBpcGVzZW5kICYmCi0jaWZkZWYg UElQRVNFTkQKLSAgICAgICAgICAgICFyY3ZmaWx0ZXIgJiYKLSNlbmRpZiAvKiBQSVBFU0VORCAq LwotICAgICAgICAgICAgIXRvc2NyZWVuKSB7Ci0jaWZuZGVmIE5PU1BMCi0gICAgICAgICAgICAv KiBEbyB0aGlzIGhlcmUgc28gd2UgY2FuIGRlY2lkZSB3aGV0aGVyIHRvIHNraXAgKi8KLSAgICAg ICAgICAgIGlmIChjbWRfcXVvdGluZyAmJiAhc2tpcHRoaXMgJiYgYXNuYW1idWZbMF0pIHsKLSAg ICAgICAgICAgICAgICBpbnQgbjsgY2hhciAqcDsKLSAgICAgICAgICAgICAgICBuID0gVE1QQlVG U0laOwotICAgICAgICAgICAgICAgIHAgPSB0bXBidWY7Ci0gICAgICAgICAgICAgICAgenpzdHJp bmcoYXNuYW1idWYsJnAsJm4pOwotICAgICAgICAgICAgICAgIHMyID0gdG1wYnVmOwotICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBnZXQgYXNuYW1lIEIiLHMyLHVwZGF0aW5nKTsKLSAg ICAgICAgICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0JICAgIGxvY2FsID0gKnMyID8gczIg OiBzOwotCi0JICAgIGlmICghc2tpcHRoaXMgJiYgeF9mbmMgPT0gWFlGWF9EKSB7IC8qIEZpbGUg Q29sbGlzaW9uID0gRGlzY2FyZCAqLwotCQlDS19PRkZfVCB4OwotCQl4ID0gemNoa2kobG9jYWwp OwotCQlkZWJ1ZyhGMTExLCJmdHAgZ2V0IERJU0NBUkQgemNoa2kiLGxvY2FsLHgpOwotCQlpZiAo eCA+IC0xKSB7Ci0JCSAgICBza2lwdGhpcysrOwotCQkgICAgZGVidWcoRjExMCwiZnRwIGdldCBz a2lwIG5hbWUiLGxvY2FsLDApOwotCQkgICAgdGxvZyhGMTAwLCIgcmVmdXNlZDogbmFtZSIsIiIs MCk7Ci0JCSAgICBtc2cgPSAiUmVmdXNlZDogTmFtZSI7Ci0JCX0KLQkgICAgfQotCi0jaWZkZWYg RE9VUERBVEUKLSAgICAgICAgICAgIGlmICghc2tpcHRoaXMgJiYgdXBkYXRpbmcpIHsgLyogSWYg dXBkYXRpbmcgYW5kIG5vdCB5ZXQgc2tpcHBpbmcgKi8KLSAgICAgICAgICAgICAgICBpZiAoemNo a2kobG9jYWwpID4gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgeCA9IGNoa21vZHRpbWUobG9j YWwscywwKTsKLSNpZmRlZiBERUJVRwotCQkgICAgaWYgKGRlYmxvZykgewotCQkJaWYgKHVwZGF0 aW5nID09IDIpCi0JCQkgIGRlYnVnKEYxMTEsImZ0cCBnZXQgL2RhdGVzLWRpZmYgY2hrbW9kdGlt ZSIsbG9jYWwseCk7Ci0JCQllbHNlCi0JCQkgIGRlYnVnKEYxMTEsImZ0cCBnZXQgL3VwZGF0ZSBj aGttb2R0aW1lIixsb2NhbCx4KTsKLQkJICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotCQkgICAg aWYgKCh1cGRhdGluZyA9PSAxICYmIHggPiAwKSB8fCAgLyogL1VQREFURSAqLwotCQkJKHVwZGF0 aW5nID09IDIgJiYgeCA9PSAxKSkgeyAvKiAvREFURVMtRElGRkVSICovCi0JCQlza2lwdGhpcysr OwotCQkJdGxvZyhGMTAwLCIgcmVmdXNlZDogZGF0ZSIsIiIsMCk7Ci0JCQltc2cgPSAiUmVmdXNl ZDogRGF0ZSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgZ2V0IHNr aXAgZGF0ZSIsbG9jYWwsMCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogRE9VUERBVEUgKi8KLSAgICAgICAgfQotICAg ICAgICAvKiBJbml0aWFsaXplIGZpbGUgc2l6ZSB0byAtMSBpbiBjYXNlIHNlcnZlciBkb2Vzbid0 IHVuZGVyc3RhbmQgKi8KLSAgICAgICAgLyogU0laRSBjb21tYW5kLCBzbyB4eHNjcmVlbigpIHdp bGwga25vdyB3ZSBkb24ndCBrbm93IHRoZSBzaXplICovCi0KLSAgICAgICAgZnNpemUgPSAoQ0tf T0ZGX1QpLTE7Ci0KLQkvKiBBc2sgZm9yIHNpemUgbm93IG9ubHkgaWYgd2UgbmVlZCBpdCBmb3Ig c2VsZWN0aW9uICovCi0JLyogYmVjYXVzZSBpZiB5b3UncmUgZ29pbmcgdGhydSBhIGxpc3QgMTAw LDAwMCBmaWxlcyB0byBzZWxlY3QgKi8KLQkvKiBhIHNtYWxsIHN1YnNldCwgMTAwLDAwMCBTSVpF IGNvbW1hbmRzIGNhbiB0YWtlIGhvdXJzLi4uICovCi0KLQlnb3RzaXplID0gMDsKLSAgICAgICAg aWYgKCFtZGVsICYmICFza2lwdGhpcyAmJiAgICAgICAgLyogRG9uJ3QgbmVlZCBzaXplIGZvciBE RUxFLi4uICovCi0JICAgIChnZXRzbWFsbGVyID49IChDS19PRkZfVCkwICB8fCBnZXRsYXJnZXIg Pj0gKENLX09GRl9UKTApKSB7Ci0JICAgIGlmIChoYXZlc2l6ZSA+PSAoQ0tfT0ZGX1QpMCkgeyAv KiBBbHJlYWR5IGhhdmUgZmlsZSBzaXplPyAqLwotCQlmc2l6ZSA9IGhhdmVzaXplOwotCQlnb3Rz aXplID0gMTsKLQkgICAgfSBlbHNlIHsJCQkvKiBObyAtIG11c3QgYXNrIHNlcnZlciAqLwotCQkv KgotCQkgIFByaW9yIHRvIHNlbmRpbmcgdGhlIE5MU1QgY29tbWFuZCB3ZSBuZWNlc3NhcmlseSBw dXQgdGhlCi0JCSAgc2VydmVyIGludG8gQVNDSUkgbW9kZS4gIFdlIG11c3Qgbm93IHB1dCBpdCBi YWNrIGludG8gdGhlCi0JCSAgdGhlIHJlcXVlc3RlZCBtb2RlIHNvIHRoZSB1cGNvbWluZyBTSVpF IGNvbW1hbmQgcmV0dXJucwotCQkgIHJpZ2h0IGtpbmQgb2Ygc2l6ZTsgdGhpcyBpcyBlc3BlY2lh bGx5IGltcG9ydGFudCBmb3IKLQkJICBHRVQgL1JFQ09WRVI7IG90aGVyd2lzZSB0aGUgc2VydmVy IHJldHVybnMgdGhlICJBU0NJSSIgc2l6ZQotCQkgIG9mIHRoZSBmaWxlLCByYXRoZXIgdGhhbiBp dHMgdHJ1ZSBzaXplLgotCQkqLwotCQljaGFuZ2V0eXBlKGZ0cF90eXAsMCk7CS8qIENoYW5nZSB0 byByZXF1ZXN0ZWQgdHlwZSAqLwotCQlmc2l6ZSA9IChDS19PRkZfVCktMTsKLQkJaWYgKHNpemVv aykgewotCQkgICAgeCA9IGZ0cGNtZCgiU0laRSIscyx4X2NzbCx4X2NzcixmdHBfdmJtKTsKLQkJ ICAgIGlmICh4ID09IFJFUExZX0NPTVBMRVRFKSB7Ci0JCQlmc2l6ZSA9IGNrYXRvZnMoJmZ0cF9y ZXBseV9zdHJbNF0pOwotCQkJZ290c2l6ZSA9IDE7Ci0JCSAgICB9Ci0JCX0KLQkgICAgfQotICAg ICAgICAgICAgaWYgKGdvdHNpemUpIHsKLSAgICAgICAgICAgICAgICBpZiAoZ2V0c21hbGxlciA+ PSAoQ0tfT0ZGX1QpMCAmJiBmc2l6ZSA+PSBnZXRzbWFsbGVyKQotICAgICAgICAgICAgICAgICAg c2tpcHRoaXMrKzsKLSAgICAgICAgICAgICAgICBpZiAoZ2V0bGFyZ2VyID49IChDS19PRkZfVCkw ICYmIGZzaXplIDw9IGdldGxhcmdlcikKLSAgICAgICAgICAgICAgICAgIHNraXB0aGlzKys7Ci0g ICAgICAgICAgICAgICAgaWYgKHNraXB0aGlzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVn KEYxMTEsImZ0cCBnZXQgc2tpcCBzaXplIixzLGZzaXplKTsKLSAgICAgICAgICAgICAgICAgICAg dGxvZyhGMTAwLCIgcmVmdXNlZDogc2l6ZSIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgICAgIG1z ZyA9ICJSZWZ1c2VkOiBTaXplIjsKLSAgICAgICAgICAgICAgICB9Ci0jaWZkZWYgQ09NTUVOVAot ICAgICAgICAgICAgfSBlbHNlIGlmIChnZXRvbmUpIHsKLSAgICAgICAgICAgICAgICAvKiBTSVpF IGNhbiBmYWlsIGZvciBtYW55IHJlYXNvbnMuICBEb2VzIHRoZSBmaWxlIGV4aXN0PyAqLwotICAg ICAgICAgICAgICAgIHggPSBmdHBjbWQoIk5MU1QiLHMseF9jc2wseF9jc3IsZnRwX3ZibSk7Ci0g ICAgICAgICAgICAgICAgaWYgKHggIT0gUkVQTFlfQ09NUExFVEUpIHsKLSAgICAgICAgICAgICAg ICAgICAgcHJpbnRmKCI+Pj4gRklMRSBOT1QgRk9VTkQ6ICVzXG4iLHMpOwotICAgICAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwot ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChza2lwdGhpcykgeyAgICAgICAg ICAgICAgICAgLyogU2tpcHBpbmcgdGhpcyBmaWxlPyAqLwotICAgICAgICAgICAgZnRzY3JlZW4o U0NSX0ZOLCdGJywoQ0tfT0ZGX1QpMCxzKTsKLSAgICAgICAgICAgIGlmIChtc2cpCi0gICAgICAg ICAgICAgIGZ0c2NyZWVuKFNDUl9TVCxTVF9FUlIsKENLX09GRl9UKTAsbXNnKTsKLSAgICAgICAg ICAgIGVsc2UKLSAgICAgICAgICAgICAgZnRzY3JlZW4oU0NSX1NULFNUX1NLSVAsKENLX09GRl9U KTAscyk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZnBf bm1sKSB7ICAgICAgICAgICAgICAgICAgIC8qIC9OQU1FTElTVCBvbmx5IC0gbm8gdHJhbnNmZXIg Ki8KLSAgICAgICAgICAgIGZwcmludGYoZnBfbm1sLCIlc1xuIixzKTsKLSAgICAgICAgICAgIGNv bnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZWN1cnNpdmUgJiYgaGFzcGF0aCAmJiAh cGlwZXNlbmQKLSNpZmRlZiBQSVBFU0VORAotICAgICAgICAgICAgJiYgIXJjdmZpbHRlcgotI2Vu ZGlmIC8qIFBJUEVTRU5EICovCi0gICAgICAgICAgICApIHsKLQkgICAgaW50IHg7Ci0KLSNpZmRl ZiBOT01LRElSCi0JICAgIHggPSAtMTsKLSNlbHNlCi0gICAgICAgICAgICB4ID0gem1rZGlyKHMp OwkJLyogVHJ5IHRvIG1ha2UgdGhlIGRpcmVjdG9yeSAqLwotI2VuZGlmIC8qIE5PTUtESVIgKi8K LQotICAgICAgICAgICAgaWYgKHggPCAwKSB7Ci0gICAgICAgICAgICAgICAgcmMgPSAtMTsgICAg ICAgICAgICAgICAgLyogRmFpbHVyZSBpcyBmYXRhbCAqLwotICAgICAgICAgICAgICAgIGlmIChn ZXRlcnJvcikgewotICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAwOwotICAgICAgICAgICAg ICAgICAgICBmdHNjcmVlbihTQ1JfRU0sMCwoQ0tfT0ZGX1QpMCwKLQkJCSAgICAgIkRpcmVjdG9y eSBjcmVhdGlvbiBmYWlsdXJlIik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qIE5vdCBz a2lwcGluZyAqLwotCi0Jc2VsZWN0ZWQrKzsJCQkvKiBDb3VudCB0aGlzIGZpbGUgYXMgc2VsZWN0 ZWQgKi8KLSAgICAgICAgcG4gPSBOVUxMOwotCi0JaWYgKCFnb3RzaXplICYmICFtZGVsKSB7CS8q IERpZG4ndCBnZXQgc2l6ZSB5ZXQgKi8KLQkgICAgaWYgKGhhdmVzaXplID4gKENLX09GRl9UKS0x KSB7IC8qIEFscmVhZHkgaGF2ZSBmaWxlIHNpemU/ICovCi0JCWZzaXplID0gaGF2ZXNpemU7Ci0J CWdvdHNpemUgPSAxOwotCSAgICB9IGVsc2UgewkJCS8qIE5vIC0gbXVzdCBhc2sgc2VydmVyICov Ci0JCWZzaXplID0gKENLX09GRl9UKS0xOwotCQlpZiAoc2l6ZW9rKSB7Ci0JCSAgICB4ID0gZnRw Y21kKCJTSVpFIixzLHhfY3NsLHhfY3NyLGZ0cF92Ym0pOwotCQkgICAgaWYgKHggPT0gUkVQTFlf Q09NUExFVEUpIHsKLQkJCWZzaXplID0gY2thdG9mcygmZnRwX3JlcGx5X3N0cls0XSk7Ci0JCQln b3RzaXplID0gMTsKLQkJICAgIH0KLQkJfQotCSAgICB9Ci0JfQotICAgICAgICBpZiAobWRlbCkg eyAgICAgICAgICAgICAgICAgICAgIC8qIFtNXURFTEVURSAqLwotICAgICAgICAgICAgaWYgKGRp c3BsYSAmJiAhZnRwX3ZibSkKLSAgICAgICAgICAgICAgcHJpbnRmKCIgJXMuLi4iLHMpOwotICAg ICAgICAgICAgcmMgPQotICAgICAgICAgICAgIChmdHBjbWQoIkRFTEUiLHMseF9jc2wseF9jc3Is ZnRwX3ZibSkgPT0gUkVQTFlfQ09NUExFVEUpID8gMSA6IC0xOwotICAgICAgICAgICAgaWYgKHJj ID4gLTEpIHsKLSAgICAgICAgICAgICAgICB0bG9nKEYxMTAsImZ0cCBtZGVsZXRlIixzLDApOwot ICAgICAgICAgICAgICAgIGlmIChkaXNwbGEgJiYgIWZ0cF92Ym0pCi0gICAgICAgICAgICAgICAg ICBwcmludGYoIk9LXG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg dGxvZyhGMTEwLCJmdHAgbWRlbGV0ZSBmYWlsZWQ6IixzLDApOwotICAgICAgICAgICAgICAgIGlm IChkaXNwbGEpCi0gICAgICAgICAgICAgICAgICBwcmludGYoIkZhaWxlZFxuIik7Ci0gICAgICAg ICAgICB9Ci0jaWZuZGVmIE5PU1BMCi0jaWZkZWYgUElQRVNFTkQKLSAgICAgICAgfSBlbHNlIGlm IChyY3ZmaWx0ZXIpIHsgICAgICAgICAvKiBbTV1HRVQgd2l0aCBmaWx0ZXIgKi8KLSAgICAgICAg ICAgIGludCBuOyBjaGFyICogcDsKLSAgICAgICAgICAgIG4gPSBDS01BWFBBVEg7Ci0gICAgICAg ICAgICBwID0gdG1wYnVmOyAgICAgICAgICAgICAgICAgLyogU2FmZSAtIG5vIGFzbmFtZSB3aXRo IGZpbHRlciAqLwotICAgICAgICAgICAgenpzdHJpbmcocmN2ZmlsdGVyLCZwLCZuKTsKLSAgICAg ICAgICAgIGlmIChuID4gLTEpCi0gICAgICAgICAgICAgIHBuID0gdG1wYnVmOwotICAgICAgICAg ICAgZGVidWcoRjExMSwiZnRwIGdldCByY3ZmaWx0ZXIiLHBuLG4pOwotI2VuZGlmIC8qIFBJUEVT RU5EICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICAgICAgICAgIGlmICh0b3NjcmVlbikgczIg PSAiLSI7Ci0gICAgICAgIH0gZWxzZSBpZiAocGlwZXNlbmQpIHsgICAgICAgICAgLyogW01dR0VU IC9DT01NQU5EICovCi0gICAgICAgICAgICBpbnQgbjsgY2hhciAqIHA7Ci0gICAgICAgICAgICBu ID0gQ0tNQVhQQVRIOwotICAgICAgICAgICAgcCA9IHRtcGJ1ZjsgICAgICAgICAgICAgICAgIC8q IFNhZmUgLSBubyBhc25hbWUgd2l0aCBmaWx0ZXIgKi8KLSAgICAgICAgICAgIHp6c3RyaW5nKHBp cGVuYW1lLCZwLCZuKTsKLSAgICAgICAgICAgIGlmIChuID4gLTEpCi0gICAgICAgICAgICAgIHBu ID0gdG1wYnVmOwotICAgICAgICAgICAgZGVidWcoRjExMSwiZnRwIGdldCBwaXBlbmFtZSIscGlw ZW5hbWUsbik7Ci0gICAgICAgICAgICBpZiAodG9zY3JlZW4pIHMyID0gIi0iOwotICAgICAgICB9 IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFtNXUdFVCB3aXRoIG5vIHBpcGVzIG9y IGZpbHRlcnMgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBnZXQgczIgQSIsczIseF9j bnYpOwotICAgICAgICAgICAgaWYgKHRvc2NyZWVuKSB7Ci0gICAgICAgICAgICAgICAgczIgPSAi LSI7ICAgICAgICAgICAgICAgLyogKGhva2V5IGNvbnZlbnRpb24gZm9yIHN0ZG91dCkgKi8KLSAg ICAgICAgICAgIH0gZWxzZSBpZiAoISpzMikgeyAgICAgICAgICAvKiBObyBhc25hbWU/ICovCi0g ICAgICAgICAgICAgICAgaWYgKHhfY252KSB7ICAgICAgICAgICAgLyogSWYgY29udmVydGluZyAq LwotICAgICAgICAgICAgICAgICAgICBuenJ0b2wocyx0bXBidWYseF9jbnYsMSxDS01BWFBBVEgp OyAvKiBjb252ZXJ0ICovCi0gICAgICAgICAgICAgICAgICAgIHMyID0gdG1wYnVmOwotICAgICAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgZ2V0IG56cnRvbCIsczIsMCk7Ci0gICAgICAg ICAgICAgICAgfSBlbHNlICAgICAgICAgICAgICAgICAgLyogb3RoZXJ3aXNlICovCi0gICAgICAg ICAgICAgICAgICBzMiA9IHM7ICAgICAgICAgICAgICAgLyogdXNlIGluY29taW5nIGZpbGUncyBu YW1lICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgZ2V0IHMy IEIiLHMyLDApOwotCi0gICAgICAgICAgICAvKiBJZiBsb2NhbCBmaWxlIGFscmVhZHkgZXhpc3Rz LCB0YWtlIGNvbGxpc2lvbiBhY3Rpb24gKi8KLQotICAgICAgICAgICAgaWYgKCFwaXBlc2VuZCAm JgotI2lmZGVmIFBJUEVTRU5ECi0gICAgICAgICAgICAgICAgIXJjdmZpbHRlciAmJgotI2VuZGlm IC8qIFBJUEVTRU5EICovCi0gICAgICAgICAgICAgICAgIXRvc2NyZWVuKSB7Ci0JCUNLX09GRl9U IHg7Ci0gICAgICAgICAgICAgICAgeCA9IHpjaGtpKHMyKTsKLSAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTExLCJmdHAgZ2V0IHpjaGtpIixzMix4KTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEx LCJmdHAgZ2V0IHhfZm5jIixzMix4X2ZuYyk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoeCA+IChD S19PRkZfVCktMSAmJiAhcmVzdGFydCkgewotCQkgICAgaW50IHggPSAtMTsKLQkJICAgIGNoYXIg KiBuZXduYW1lID0gTlVMTDsKLQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHhfZm5jKSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBYWUZYX0E6ICAgICAgLyogQXBwZW5kICovCi0g ICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQgPSAxOwotICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBYWUZYX1I6ICAgICAgLyogUmVu YW1lICovCi0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBYWUZYX0I6CS8qIEJhY2t1cCAqLwot CQkJem5ld24oczIsJm5ld25hbWUpOyAvKiBNYWtlIHVuaXF1ZSBuYW1lICovCi0JCQlkZWJ1ZyhG MTEwLCJmdHAgZ2V0IHpuZXduIixuZXduYW1lLDApOwotCQkJaWYgKHhfZm5jID09IFhZRlhfQikg eyAvKiBCYWNrdXAgZXhpc3RpbmcgZmlsZSAqLwotCQkJICAgIHggPSB6cmVuYW1lKHMyLG5ld25h bWUpOwotCQkJICAgIGRlYnVnKEYxMTEsImZ0cCBnZXQgYmFja3VwIHpyZW5hbWUiLG5ld25hbWUs eCk7Ci0JCQl9IGVsc2UgeyAgICAgIC8qIFJlbmFtZSBpbmNvbWluZyBmaWxlICovCi0JCQkgICAg eCA9IGNrc3RybmNweSh0bXBidWYsbmV3bmFtZSxDS01BWFBBVEgrMSk7Ci0JCQkgICAgczIgPSB0 bXBidWY7Ci0JCQkgICAgZGVidWcoRjExMSwiZnRwIGdldCByZW5hbWUgaW5jb21pbmciLG5ld25h bWUseCk7Ci0JCQl9Ci0JCQlpZiAoeCA8IDApIHsKLQkJCSAgICBmdHNjcmVlbihTQ1JfRU0sMCwo Q0tfT0ZGX1QpMCwKLQkJCQkgICAgICJCYWNrdXAvUmVuYW1lIGZhaWxlZCIpOwotCQkJICAgIHgg PSAwOwotCQkJICAgIGdvdG8geGdldHg7Ci0JCQl9Ci0JCQlicmVhazsKLSAgICAgICAgICAgICAg ICAgICAgICBjYXNlIFhZRlhfRDogICAgICAvKiBEaXNjYXJkIChhbHJlYWR5IGhhbmRsZWQgYWJv dmUpICovCi0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBYWUZYX1U6ICAgICAgLyogVXBkYXRl IChkaXR0bykgKi8KLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIFhZRlhfTTogICAgICAvKiBV cGRhdGUgKGRpdHRvKSAqLwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWFlGWF9YOiAgICAg IC8qIE92ZXJ3cml0ZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg IH0KLSAgICAgICAgaWYgKCFtZGVsKSB7Ci0jaWZkZWYgUElQRVNFTkQKLSAgICAgICAgICAgIGRl YnVnKEYxMTEsImZ0cCBnZXQgcG4iLHBuLHJjdmZpbHRlciA/IDEgOiAwKTsKLSNlbmRpZiAvKiBQ SVBFU0VORCAqLwotICAgICAgICAgICAgaWYgKHBpcGVzZW5kICYmICF0b3NjcmVlbikKLSAgICAg ICAgICAgICAgczIgPSBOVUxMOwotI2lmZGVmIERFQlVHCi0gICAgICAgICAgICBpZiAoZGVibG9n KSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiZnRwIGdldCB4X3hsYSIsIiIseF94bGEp OwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImZ0cCBnZXQgeF9jc2wiLCIiLHhfY3NsKTsK LSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgZ2V0IHhfY3NyIiwiIix4X2Nzcik7Ci0g ICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiZnRwIGdldCBhcHBlbmQiLCIiLGFwcGVuZCk7Ci0g ICAgICAgICAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotICAgICAgICAgICAgcmMgPSBnZXRm aWxlKHMsczIscmVzdGFydCxhcHBlbmQscG4seF94bGEseF9jc2wseF9jc3IpOwotCi0jaWZkZWYg REVCVUcKLSAgICAgICAgICAgIGlmIChkZWJsb2cpIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhG MTExLCJmdHAgZ2V0IHJjIixzLHJjKTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHAg Z2V0IGZ0cF90aW1lZF9vdXQiLHMsZnRwX3RpbWVkX291dCk7Ci0gICAgICAgICAgICAgICAgZGVi dWcoRjExMSwiZnRwIGdldCBjYW5jZWxmaWxlIixzLGNhbmNlbGZpbGUpOwotICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTEsImZ0cCBnZXQgY2FuY2VsZ3JvdXAiLHMsY2FuY2VsZ3JvdXApOwotICAg ICAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBnZXQgcmVuYW1pbmciLHMscmVuYW1pbmcpOwot ICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBnZXQgbW92aW5nIixzLG1vdmluZyk7Ci0g ICAgICAgICAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICAgICAgfQotICAgICAgICBpZiAo cmMgPiAtMSkgewotICAgICAgICAgICAgZ29vZCsrOwotICAgICAgICAgICAgc3RhdHVzID0gMTsK LSAgICAgICAgICAgIGlmICghY2FuY2VsZmlsZSkgewotICAgICAgICAgICAgICAgIGlmIChkZWxl dGluZykgeyAgICAgICAgIC8qIEdFVCAvREVMRVRFIChzb3VyY2UgZmlsZSkgKi8KLSAgICAgICAg ICAgICAgICAgICAgcmMgPQotICAgICAgICAgICAgICAgICAgICAgIChmdHBjbWQoIkRFTEUiLHMs eF9jc2wseF9jc3IsZnRwX3ZibSkgPT0gUkVQTFlfQ09NUExFVEUpCi0gICAgICAgICAgICAgICAg ICAgICAgICA/IDEgOiAtMTsKLSAgICAgICAgICAgICAgICAgICAgdGxvZyhGMTEwLCAocmMgPiAt MSkgPwotICAgICAgICAgICAgICAgICAgICAgICAgICIgZGVsZXRlZCIgOiAiIGZhaWxlZCB0byBk ZWxldGUiLCBzLCAwKTsKLSAgICAgICAgICAgICAgICB9Ci0JCWlmIChyZW5hbWluZyAmJiByY3Zf cmVuYW1lICYmICF0b3NjcmVlbikgewotICAgICAgICAgICAgICAgICAgICBjaGFyICpwOyAgICAg ICAgICAgIC8qIFJlbmFtZSBkb3dubG9hZGVkIGZpbGUgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICAg ICAgICAgICAgICAgICAgY2hhciB0bXBidWZbQ0tNQVhQQVRIKzFdOwotICAgICAgICAgICAgICAg ICAgICBpbnQgbjsKLSAgICAgICAgICAgICAgICAgICAgbiA9IENLTUFYUEFUSDsKLSAgICAgICAg ICAgICAgICAgICAgcCA9IHRtcGJ1ZjsKLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwi ZnRwIGdldCAvcmVuYW1lIixyY3ZfcmVuYW1lLDApOwotICAgICAgICAgICAgICAgICAgICB6enN0 cmluZyhyY3ZfcmVuYW1lLCZwLCZuKTsKLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwi ZnRwIGdldCAvcmVuYW1lIixyY3ZfcmVuYW1lLDApOwotICAgICAgICAgICAgICAgICAgICBwID0g dG1wYnVmOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgcCA9IHJjdl9yZW5hbWU7Ci0jZW5k aWYgLyogTk9TUEwgKi8KLSAgICAgICAgICAgICAgICAgICAgcmMgPSAoenJlbmFtZShzMixwKSA8 IDApID8gLTEgOiAxOwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJkb2Z0cGdldCAv UkVOQU1FIHpyZW5hbWUiLHAscmMpOwotICAgICAgICAgICAgICAgICAgICB0bG9nKEYxMTAsIChy YyA+IC0xKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIiByZW5hbWVkIHRvIiA6Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgIiBmYWlsZWQgdG8gcmVuYW1lIHRvIiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICBwLAotICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSAgICAgICAgICAg ICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobW92aW5nICYmIHJj dl9tb3ZlICYmICF0b3NjcmVlbikgewotICAgICAgICAgICAgICAgICAgICBjaGFyICpwOyAgICAg ICAgICAgIC8qIE1vdmUgZG93bmxvYWRlZCBmaWxlICovCi0jaWZuZGVmIE5PU1BMCi0gICAgICAg ICAgICAgICAgICAgIGNoYXIgdG1wYnVmW0NLTUFYUEFUSCsxXTsKLSAgICAgICAgICAgICAgICAg ICAgaW50IG47Ci0gICAgICAgICAgICAgICAgICAgIG4gPSBUTVBCVUZTSVo7Ci0gICAgICAgICAg ICAgICAgICAgIHAgPSB0bXBidWY7Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0 cCBnZXQgL21vdmUtdG8iLHJjdl9tb3ZlLDApOwotICAgICAgICAgICAgICAgICAgICB6enN0cmlu ZyhyY3ZfbW92ZSwmcCwmbik7Ci0gICAgICAgICAgICAgICAgICAgIHAgPSB0bXBidWY7Ci0jZWxz ZQotICAgICAgICAgICAgICAgICAgICBwID0gcmN2X21vdmU7Ci0jZW5kaWYgLyogTk9TUEwgKi8K LSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiZnRwIGdldCAvbW92ZS10byIscCwwKTsK LSAgICAgICAgICAgICAgICAgICAgcmMgPSAoenJlbmFtZShzMixwKSA8IDApID8gLTEgOiAxOwot ICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJkb2Z0cGdldCAvTU9WRSB6cmVuYW1lIixw LHJjKTsKLSAgICAgICAgICAgICAgICAgICAgdGxvZyhGMTEwLCAocmMgPiAtMSkgPwotICAgICAg ICAgICAgICAgICAgICAgICAgICIgbW92ZWQgdG8iIDogIiBmYWlsZWQgdG8gbW92ZSB0byIsIHAs IDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAocHZbU05EX1NSTl0u aXZhbCA+IDAgJiYgcHZbU05EX1NSTl0uc3ZhbCkgewotICAgICAgICAgICAgICAgICAgICBjaGFy ICogcyA9IHB2W1NORF9TUk5dLnN2YWw7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIgKiBzcnZy biA9IHB2W1NORF9TUk5dLnN2YWw7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIgdG1wYnVmW0NL TUFYUEFUSCsxXTsKLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgICAgICAgICAgICAgaW50IHk7ICAg ICAgICAgICAgICAvKiBQYXNzIGl0IHRocnUgdGhlIGV2YWx1YXRvciAqLwotICAgICAgICAgICAg ICAgICAgICBleHRlcm4gaW50IGNtZF9xdW90aW5nOyAvKiBmb3IgXHYoZmlsZW5hbWUpICovCi0g ICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBnZXQgc3J2X3JlbmFtIixzLDEpOwot Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjbWRfcXVvdGluZykgewotICAgICAgICAgICAgICAg ICAgICAgICAgeSA9IENLTUFYUEFUSDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHMgPSAoY2hh ciAqKXRtcGJ1ZjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHp6c3RyaW5nKHNydnJuLCZzLCZ5 KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHMgPSAoY2hhciAqKXRtcGJ1ZjsKLSAgICAgICAg ICAgICAgICAgICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgICAgICAgICAgICAgICAgIGRl YnVnKEYxMTEsImZ0cCBnZXQgc3J2X3JlbmFtIixzLDEpOwotICAgICAgICAgICAgICAgICAgICBp ZiAocykgaWYgKCpzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgeDsKLSAgICAgICAg ICAgICAgICAgICAgICAgIHggPSBmdHBfcmVuYW1lKHMyLHMpOwotICAgICAgICAgICAgICAgICAg ICAgICAgZGVidWcoRjExMSwiZnRwIGdldCBmdHBfcmVuYW1lIixzMix4KTsKLSAgICAgICAgICAg ICAgICAgICAgICAgIHRsb2coRjExMCwgKHggPiAwKSA/Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICIgcmVuYW1lZCBzb3VyY2UgZmlsZSB0byIgOgotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiIGZhaWxlZCB0byByZW5hbWUgc291cmNlIGZpbGUgdG8iLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo eCA8IDEpCi0JCQkgIHJldHVybigtMSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNhbmNlbGZp bGUpCi0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChyYyA8IDApIHsKLSAgICAgICAg ICAgIGZ0cF9mYWkrKzsKLSNpZmRlZiBGVFBfVElNRU9VVAotCSAgICBkZWJ1ZyhGMTAxLCJmdHAg Z2V0IGZ0cF90aW1lZF9vdXQiLCIiLGZ0cF90aW1lZF9vdXQpOwotCSAgICBpZiAoZnRwX3RpbWVk X291dCkgewotCQlzdGF0dXMgPSAwOwotICAgICAgICAgICAgICAgIGZ0c2NyZWVuKFNDUl9FTSww LChDS19PRkZfVCkwLCJHRVQgdGltZWQgb3V0Iik7Ci0JICAgIH0KLSNlbmRpZgkvKiBGVFBfVElN RU9VVCAqLwotICAgICAgICAgICAgaWYgKGdldGVycm9yKSB7Ci0gICAgICAgICAgICAgICAgc3Rh dHVzID0gMDsKLSAgICAgICAgICAgICAgICBmdHNjcmVlbihTQ1JfRU0sMCwoQ0tfT0ZGX1QpMCwi RmF0YWwgZG93bmxvYWQgZXJyb3IiKTsKLSAgICAgICAgICAgICAgICBkb25lKys7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKSB7 Ci0JZGVidWcoRjEwMSwiZnRwIGdldCBzdGF0dXMiLCIiLHN0YXR1cyk7Ci0JZGVidWcoRjEwMSwi ZnRwIGdldCBjYW5jZWxncm91cCIsIiIsY2FuY2VsZ3JvdXApOwotCWRlYnVnKEYxMDEsImZ0cCBn ZXQgY2FuY2VsZmlsZSIsIiIsY2FuY2VsZmlsZSk7Ci0JZGVidWcoRjEwMSwiZnRwIGdldCBzZWxl Y3RlZCIsIiIsc2VsZWN0ZWQpOwotCWRlYnVnKEYxMDEsImZ0cCBnZXQgZ29vZCIsIiIsZ29vZCk7 Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0KLSAgICBpZiAoc2VsZWN0ZWQgPT0gMCkgewkJ LyogTm8gZmlsZXMgbWV0IHNlbGVjdGlvbiBjcml0ZXJpYSAqLwotCXN0YXR1cyA9IDE7CQkJLyog d2hpY2ggaXMgYSBraW5kIG9mIHN1Y2Nlc3MuICovCi0gICAgfSBlbHNlIGlmIChzdGF0dXMgPiAw KSB7CQkvKiBTb21lIGZpbGVzIHdlcmUgc2VsZWN0ZWQgKi8KLSAgICAgICAgaWYgKGNhbmNlbGdy b3VwKQkJLyogYnV0IE1HRVQgd2FzIGNhbmNlbGVkICovCi0gICAgICAgICAgc3RhdHVzID0gMDsJ CQkvKiBzbyBNR0VUIGZhaWxlZCAqLwotICAgICAgICBlbHNlIGlmIChjYW5jZWxmaWxlICYmIGdv b2QgPCAxKSAvKiBJZiBmaWxlIHdhcyBjYW5jZWxlZCAqLwotICAgICAgICAgIHN0YXR1cyA9IDA7 CQkJLyogTUdFVCBmYWlsZWQgaWYgaXQgZ290IG5vIGZpbGVzICovCi0gICAgfQotICAgIHN1Y2Nl c3MgPSBzdGF0dXM7Ci0gICAgeCA9IHN1Y2Nlc3M7Ci0gICAgZGVidWcoRjEwMSwiZnRwIGdldCBz dWNjZXNzIiwiIixzdWNjZXNzKTsKLQotICB4Z2V0eDoKLSAgICBwaXBlc2VuZCA9IHBpcGVzYXZl OyAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIGdsb2JhbCBwaXBlIHNlbGVjdGlvbiAqLwotICAg IGlmIChmcF9ubWwpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIENsb3NlIC9OQU1FTElTVCAq LwotICAgICAgICBpZiAoZnBfbm1sICE9IHN0ZG91dCkKLSAgICAgICAgICBmY2xvc2UoZnBfbm1s KTsKLSAgICAgICAgZnBfbm1sID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKAotI2lmZGVmIENPTU1F TlQKLQl4ID4gLTEKLSNlbHNlCi0Jc3VjY2VzcwotI2VuZGlmCS8qIENPTU1FTlQgKi8KLQkpIHsJ CQkJLyogRG93bmxvYWQgc3VjY2Vzc2Z1bCAqLwotI2lmZGVmIEdGVElNRVIKLSAgICAgICAgdDEg PSBnbXN0aW1lcigpOyAgICAgICAgICAgICAgICAvKiBFbmQgdGltZSAqLwotICAgICAgICBzZWMg PSAoQ0tGTE9BVCkoKENLRkxPQVQpKHQxIC0gdDApIC8gMTAwMC4wKTsgLyogU3RhdHMgKi8KLSAg ICAgICAgaWYgKCFzZWMpIHNlYyA9IDAuMDAxOwotICAgICAgICBmcHRzZWNzID0gc2VjOwotI2Vs c2UKLSAgICAgICAgc2VjID0gKHQxIC0gdDApIC8gMTAwMDsKLSAgICAgICAgaWYgKCFzZWMpIHNl YyA9IDE7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotICAgICAgICB0ZmNwcyA9IChsb25nKSAodGZj IC8gc2VjKTsKLSAgICAgICAgdHNlY3MgPSAoaW50KXNlYzsKLSAgICAgICAgbGFzdHhmZXIgPSBX X0ZUUHxXX1JFQ1Y7Ci0gICAgICAgIHhmZXJzdGF0ID0gc3VjY2VzczsKLSAgICB9Ci0gICAgaWYg KGRweWFjdGl2ZSkKLSAgICAgIGZ0c2NyZWVuKHN1Y2Nlc3MgPiAwID8gU0NSX1RDIDogU0NSX0NX LCAwLCAoQ0tfT0ZGX1QpMCwgIiIpOwotI2lmZGVmIENLX1RNUERJUgotICAgIGlmIChmX3RtcGRp cikgeyAgICAgICAgICAgICAgICAgICAgIC8qIElmIHdlIGNoYW5nZWQgdG8gZG93bmxvYWQgZGly ICovCi0gICAgICAgIHpjaGRpcigoY2hhciAqKSBzYXZkaXIpOyAgICAgICAgLyogR28gYmFjayB3 aGVyZSB3ZSBjYW1lIGZyb20gKi8KLSAgICAgICAgZl90bXBkaXIgPSAwOwotICAgIH0KLSNlbmRp ZiAvKiBDS19UTVBESVIgKi8KLQotICAgIGZvciAoaSA9IDA7IGkgPD0gU05EX01BWDsgaSsrKSB7 ICAgIC8qIEZyZWUgbWFsbG9jJ2QgbWVtb3J5ICovCi0gICAgICAgIGlmIChwdltpXS5zdmFsKQot ICAgICAgICAgIGZyZWUocHZbaV0uc3ZhbCk7Ci0gICAgfQotICAgIGZvciAoaSA9IDA7IGkgPCBt Z2V0bjsgaSsrKSAgICAgICAgIC8qIE1HRVQgbGlzdCB0b28gKi8KLSAgICAgIG1ha2VzdHIoJiht Z2V0bGlzdFtpXSksTlVMTCk7Ci0KLSAgICBpZiAoY2FuY2VsZ3JvdXApCQkJLyogQ2xlYXIgdGVt cC1maWxlIHN0YWNrICovCi0gICAgICBtbHNyZXNldCgpOwotCi0gICAgZnRyZXNldCgpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogVW5kbyBzd2l0Y2ggZWZmZWN0cyAqLwotICAgIGRweWFj dGl2ZSA9IDA7Ci0gICAgcmV0dXJuKHgpOwotfQotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBmdHBy bXRbXSA9IHsKLSAgICB7ICJjZCIsICAgICAgICBYWkNXRCwgMCB9LAotICAgIHsgImNkdXAiLCAg ICAgIFhaQ0RVLCAwIH0sCi0gICAgeyAiY3dkIiwgICAgICAgWFpDV0QsIENNX0lOViB9LAotICAg IHsgImRlbGV0ZSIsICAgIFhaREVMLCAwIH0sCi0gICAgeyAiZGlyZWN0b3J5IiwgWFpESVIsIDAg fSwKLSAgICB7ICJleGl0IiwgICAgICBYWlhJVCwgMCB9LAotICAgIHsgImhlbHAiLCAgICAgIFha SExQLCAwIH0sCi0gICAgeyAibG9naW4iLCAgICAgWFpMR0ksIDAgfSwKLSAgICB7ICJsb2dvdXQi LCAgICBYWkxHTywgMCB9LAotICAgIHsgIm1rZGlyIiwgICAgIFhaTUtELCAwIH0sCi0gICAgeyAi cHdkIiwgICAgICAgWFpQV0QsIDAgfSwKLSAgICB7ICJyZW5hbWUiLCAgICBYWlJFTiwgMCB9LAot ICAgIHsgInJtZGlyIiwgICAgIFhaUk1ELCAwIH0sCi0gICAgeyAidHlwZSIsICAgICAgWFpUWVAs IDAgfSwKLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5mdHBybXQgPSAoc2l6ZW9m KGZ0cHJtdCkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLQotaW50Ci1kb2Z0cHNpdGUo KSB7CQkJCS8qIFNlbmQgYSBTSVRFIGNvbW1hbmQgKi8KLSAgICBpbnQgcmVwbHk7Ci0gICAgY2hh ciAqIHM7Ci0gICAgaW50IGxjcyA9IC0xLCByY3MgPSAtMTsKLSAgICBpbnQgc2F2ZV92Ym0gPSBm dHBfdmJtOwotCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICBpZiAoZnRwX3hsYSkgewotICAgICAgICBs Y3MgPSBmdHBfY3NsOwotICAgICAgICBpZiAobGNzIDwgMCkgbGNzID0gZmNoYXJzZXQ7Ci0gICAg ICAgIHJjcyA9IGZ0cF9jc3g7Ci0gICAgICAgIGlmIChyY3MgPCAwKSByY3MgPSBmdHBfY3NyOwot ICAgIH0KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0gICAgaWYgKCh4ID0gY210eHQoIkNvbW1hbmQi LCAiIiwgJnMsIHh4c3RyaW5nKSkgPCAwKQotICAgICAgcmV0dXJuKHgpOwotICAgIENIRUNLQ09O TigpOwotICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKLSAgICBpZiAodGVzdGluZykg cHJpbnRmKCIgZnRwIHNpdGUgXCIlc1wiLi4uXG4iLGxpbmUpOwotICAgIGlmICghZnRwX3ZibSkK LSAgICAgICAgZnRwX3ZibSA9ICFja3N0cmNtcCgiSEVMUCIsbGluZSw0LDApOwotICAgIGlmICgo cmVwbHkgPSBmdHBjbWQoIlNJVEUiLGxpbmUsbGNzLHJjcyxmdHBfdmJtKSkgPT0gUkVQTFlfUFJF TElNKSB7Ci0JZG8gewotCSAgICByZXBseSA9IGdldHJlcGx5KDAsbGNzLHJjcyxmdHBfdmJtLDAp OwotCX0gd2hpbGUgKHJlcGx5ID09IFJFUExZX1BSRUxJTSk7Ci0gICAgfQotICAgIGZ0cF92Ym0g PSBzYXZlX3ZibTsKLSAgICByZXR1cm4oc3VjY2VzcyA9IChyZXBseSA9PSBSRVBMWV9DT01QTEVU RSkpOwotfQotCi0KLWludAotZG9zZXRmdHBwc3YoKSB7CQkJCS8qIFBhc3NpdmUgbW9kZSAqLwot ICAgIHggPSBzZXRvbigmZnRwX3Bzdik7Ci0gICAgaWYgKHggPiAwKSBwYXNzaXZlbW9kZSA9IGZ0 cF9wc3Y7Ci0gICAgcmV0dXJuKHgpOwotfQotCi0vKiAgZCBvIGYgdCBwIHIgbSB0ICAtLSAgUGFy c2UgYW5kIGV4ZWN1dGUgUkVNT1RFIGNvbW1hbmRzICAqLwotCi1pbnQKLWRvZnRwcm10KGN4LHdo bykgaW50IGN4LCB3aG87IHsgICAgICAgICAvKiB3aG8gPT0gMSBmb3IgZnRwLCAwIGZvciBrZXJt aXQgKi8KLSAgICAvKiBjeCA9PSAwIG1lYW5zIFJFTU9URSAqLwotICAgIC8qIGN4ICE9IDAgaXMg YSBYWnh4eCB2YWx1ZSAqLwotICAgIGNoYXIgKiBzOwotCi0gICAgaWYgKHdobyAhPSAwKQotICAg ICAgcmV0dXJuKDApOwotCi0gICAgaWYgKGN4ID09IDApIHsKLSAgICAgICAgaWYgKCh4ID0gY21r ZXkoZnRwcm10LG5mdHBybXQsIiIsIiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJu KHgpOwotICAgICAgICBjeCA9IHg7Ci0gICAgfQotICAgIHN3aXRjaCAoY3gpIHsKLSAgICAgIGNh c2UgWFpDRFU6ICAgICAgICAgICAgICAgICAgICAgICAvKiBDRFVQICovCi0gICAgICAgIGlmICgo eCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICByZXR1cm4oZG9mdHBjZHVwKCkp OwotCi0gICAgICBjYXNlIFhaQ1dEOiAgICAgICAgICAgICAgICAgICAgICAgLyogUkNEICovCi0g ICAgICAgIGlmICgoeCA9IGNtdHh0KCJSZW1vdGUgZGlyZWN0b3J5IiwgIiIsICZzLCB4eHN0cmlu ZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIGNrc3RybmNweShsaW5lLHMs TElOQlVGU0laKTsKLQlzID0gYnJzdHJpcChsaW5lKTsKLSAgICAgICAgcmV0dXJuKGRvZnRwY3dk KHMsMSkpOwotICAgICAgY2FzZSBYWlBXRDogICAgICAgICAgICAgICAgICAgICAgIC8qIFJQV0Qg Ki8KLSAgICAgICAgcmV0dXJuKGRvZnRwcHdkKCkpOwotICAgICAgY2FzZSBYWkRFTDogICAgICAg ICAgICAgICAgICAgICAgIC8qIFJERUwgKi8KLSAgICAgICAgcmV0dXJuKGRvZnRwZ2V0KEZUUF9N REUsMSkpOwotICAgICAgY2FzZSBYWkRJUjogICAgICAgICAgICAgICAgICAgICAgIC8qIFJESVIg Ki8KLSAgICAgICAgcmV0dXJuKGRvZnRwZGlyKEZUUF9ESVIpKTsKLSAgICAgIGNhc2UgWFpITFA6 ICAgICAgICAgICAgICAgICAgICAgICAvKiBSSEVMUCAqLwotICAgICAgICByZXR1cm4oZG9mdHB4 aGxwKCkpOwotICAgICAgY2FzZSBYWk1LRDogICAgICAgICAgICAgICAgICAgICAgIC8qIFJNS0RJ UiAqLwotICAgICAgICByZXR1cm4oZG9mdHBta2QoKSk7Ci0gICAgICBjYXNlIFhaUkVOOiAgICAg ICAgICAgICAgICAgICAgICAgLyogUlJFTkFNRSAqLwotICAgICAgICByZXR1cm4oZG9mdHByZW4o KSk7Ci0gICAgICBjYXNlIFhaUk1EOiAgICAgICAgICAgICAgICAgICAgICAgLyogUlJNRElSICov Ci0gICAgICAgIHJldHVybihkb2Z0cHJtZCgpKTsKLSAgICAgIGNhc2UgWFpMR086ICAgICAgICAg ICAgICAgICAgICAgICAvKiBMT0dPVVQgKi8KLSAgICAgICAgcmV0dXJuKGRvZnRwcmVzKCkpOwot ICAgICAgY2FzZSBYWlhJVDogICAgICAgICAgICAgICAgICAgICAgIC8qIEVYSVQgKi8KLSAgICAg ICAgcmV0dXJuKGZ0cGJ5ZSgpKTsKLSAgICB9Ci0gICAgcHJpbnRmKCI/Tm90IHVzYWJsZSB3aXRo IEZUUCAtIFwiJXNcIlxuIiwgYXRtYnVmKTsKLSAgICByZXR1cm4oLTkpOwotfQotCi1pbnQKLWRv eGZ0cCgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIHBhcnNlciBm b3IgYnVpbHQtaW4gRlRQICovCi0gICAgaW50IGN4LCBuOwotICAgIHN0cnVjdCBGREIga3csIGZs OwotICAgIGNoYXIgKiBzOwotICAgIGludCB1c2V0bHMgPSAwOwotICAgIGludCBsY3MgPSAtMSwg cmNzID0gLTE7Ci0KLSNpZm5kZWYgTk9DU0VUUwotICAgIGlmIChmdHBfeGxhKSB7Ci0gICAgICAg IGxjcyA9IGZ0cF9jc2w7Ci0gICAgICAgIGlmIChsY3MgPCAwKSBsY3MgPSBmY2hhcnNldDsKLSAg ICAgICAgcmNzID0gZnRwX2NzeDsKLSAgICAgICAgaWYgKHJjcyA8IDApIHJjcyA9IGZ0cF9jc3I7 Ci0gICAgfQotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQotICAgIGlmIChpbnNlcnZlcikgICAgICAg ICAgICAgICAgICAgICAgIC8qIEZUUCBub3QgYWxsb3dlZCBpbiBJS1NELiAqLwotICAgICAgcmV0 dXJuKC0yKTsKLQotICAgIGlmIChnX2Z0cF90eXAgPiAtMSkgeyAgICAgICAgICAgICAgIC8qIFJl c3RvcmUgVFlQRSBpZiBzYXZlZCAqLwotICAgICAgICBmdHBfdHlwID0gZ19mdHBfdHlwOwotICAg ICAgICAvKiBnX2Z0cF90eXAgPSAtMTsgKi8KLSAgICB9Ci0jaWZkZWYgQ09NTUVOVAotLyoKLSAg V2UnbGwgc2V0IHRoZSBjb2xsaXNpb24gYWN0aW9uIGxvY2FsbHkgaW4gZG9mdHBnZXQoKSBiYXNl ZCBvbiB3aGV0aGVyCi0gIGZ0cF9mbmMgd2FzIGV2ZXIgc2V0IHRvIGEgdmFsdWUuICBpZiBub3Qs IHdlJ2xsIHVzZSB0aGUgZm5jYWN0IHZhbHVlLgotKi8KLSAgICBpZiAoZnRwX2ZuYyA8IDApICAg ICAgICAgICAgICAgICAgICAvKiBJbmhlcml0IGdsb2JhbCBjb2xsaXNpb24gYWN0aW9uICovCi0g ICAgICBmdHBfZm5jID0gZm5jYWN0OyAgICAgICAgICAgICAgICAgLyogaWYgbm9uZSBzcGVjaWZp ZWQgZm9yIEZUUCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgIC8qIFJlc3RvcmUgZ2xv YmFsIHZlcmJvc2UgbW9kZSAqLwotICAgIGlmIChmdHBfZGViKQotICAgICAgZnRwX3ZibSA9IDE7 Ci0gICAgZWxzZSBpZiAocXVpZXQpCi0gICAgICBmdHBfdmJtID0gMDsKLSAgICBlbHNlCi0gICAg ICBmdHBfdmJtID0gZnRwX3ZieDsKLQotICAgIGZ0cF9kYXRlcyAmPSAxOwkJCS8qIFVuZG8gYW55 IHByZXZpb3VzIC9VUERBVEUgc3dpdGNoICovCi0KLSAgICBkcHlhY3RpdmUgPSAwOyAgICAgICAg ICAgICAgICAgICAgICAvKiBSZXNldCBnbG9iYWwgdHJhbnNmZXItYWN0aXZlIGZsYWcgKi8KLSAg ICBwcmludGxpbmVzID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBwcmludGxpbmVz ICovCi0KLSAgICBpZiAoZnBfbm1sKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCAv TkFNRUxJU1QgKi8KLSAgICAgICAgaWYgKGZwX25tbCAhPSBzdGRvdXQpCi0gICAgICAgICAgZmNs b3NlKGZwX25tbCk7Ci0gICAgICAgIGZwX25tbCA9IE5VTEw7Ci0gICAgfQotICAgIG1ha2VzdHIo JmZ0cF9ubWwsTlVMTCk7Ci0KLSAgICBjbWZkYmkoJmt3LCAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBGaXJzdCBGREIgLSBjb21tYW5kcyAqLwotICAgICAgICAgICBfQ01LRVksICAgICAgICAg ICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgICJIb3N0bmFtZTsgb3IgRlRQIGNv bW1hbmQiLCAgLyogaGVscCAqLwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAgICAgICBuZnRwY21kLCAgICAgICAgICAg ICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLwotICAgICAgICAg ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiBu b25lICovCi0gICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAgICAgLyogUHJvY2Vz c2luZyBmdW5jdGlvbiAqLwotICAgICAgICAgICBmdHBjbWR0YWIsICAgICAgICAgICAgICAgICAg IC8qIEtleXdvcmQgdGFibGUgKi8KLSAgICAgICAgICAgJmZsICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCi0gICAgICAgICAgICk7Ci0gICAgY21mZGJp KCZmbCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQSBob3N0IG5hbWUgb3IgYWRkcmVzcyAq LwotICAgICAgICAgICBfQ01GTEQsICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCi0g ICAgICAgICAgICJIb3N0bmFtZSBvciBhZGRyZXNzIiwgICAgICAgLyogaGVscCAqLwotICAgICAg ICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KLSAgICAgICAg ICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwot ICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMg ZGF0YSAxICovCi0gICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRk dGwgbnVtZXJpYyBkYXRhIDIgKi8KLSAgICAgICAgICAgeHhzdHJpbmcsCi0gICAgICAgICAgIE5V TEwsCi0gICAgICAgICAgIE5VTEwKLSAgICAgICAgICAgKTsKLSAgICB4ID0gY21mZGIoJmt3KTsg ICAgICAgICAgICAgICAgICAgICAvKiBQYXJzZSBhIGhvc3RuYW1lIG9yIGEga2V5d29yZCAqLwot ICAgIGlmICh4ID09IC0zKSB7Ci0gICAgICAgIHByaW50ZigiP2Z0cCB3aGF0PyBcImhlbHAgZnRw XCIgZm9yIGhpbnRzXG4iKTsKLSAgICAgICAgcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgaWYgKHgg PCAwKQotICAgICAgcmV0dXJuKHgpOwotICAgIGlmIChjbXJlc3VsdC5mY29kZSA9PSBfQ01GTEQp IHsgICAgIC8qIElmIGhvc3RuYW1lICovCi0gICAgICAgIHJldHVybihvcGVuZnRwKGNtcmVzdWx0 LnNyZXN1bHQsMCkpOyAvKiBnbyBvcGVuIHRoZSBjb25uZWN0aW9uICovCi0gICAgfSBlbHNlIHsK LSAgICAgICAgY3ggPSBjbXJlc3VsdC5ucmVzdWx0OwotICAgIH0KLSAgICBzd2l0Y2ggKGN4KSB7 Ci0gICAgICBjYXNlIEZUUF9BQ0M6ICAgICAgICAgICAgICAgICAgICAgLyogQUNDT1VOVCAqLwot ICAgICAgICBpZiAoKHggPSBjbXR4dCgiUmVtb3RlIGFjY291bnQiLCAiIiwgJnMsIHh4c3RyaW5n KSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgQ0hFQ0tDT05OKCk7Ci0gICAg ICAgIG1ha2VzdHIoJmZ0cF9hY2Mscyk7Ci0gICAgICAgIGlmICh0ZXN0aW5nKQotICAgICAgICAg IHByaW50ZigiIGZ0cCBhY2NvdW50OiBcIiVzXCJcbiIsZnRwX2FjYyk7Ci0gICAgICAgIHN1Y2Nl c3MgPSAoZnRwY21kKCJBQ0NUIixmdHBfYWNjLC0xLC0xLGZ0cF92Ym0pID09IFJFUExZX0NPTVBM RVRFKTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOwotCi0gICAgICBjYXNlIEZUUF9HVVA6ICAg ICAgICAgICAgICAgICAgICAgLyogR28gVVAgKi8KLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkg PCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIENIRUNLQ09OTigpOwotICAgICAgICBpZiAodGVzdGlu ZykgcHJpbnRmKCIgZnRwIGNkOiBcIih1cClcIlxuIik7Ci0gICAgICAgIHJldHVybihzdWNjZXNz ID0gZG9mdHBjZHVwKCkpOwotCi0gICAgICBjYXNlIEZUUF9DV0Q6ICAgICAgICAgICAgICAgICAg ICAgLyogQ0QgKi8KLSAgICAgICAgaWYgKCh4ID0gY210eHQoIlJlbW90ZSBkaXJlY3RvcnkiLCAi IiwgJnMsIHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgQ0hF Q0tDT05OKCk7Ci0gICAgICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKLSAgICAgICAg aWYgKHRlc3RpbmcpCi0gICAgICAgICAgcHJpbnRmKCIgZnRwIGNkOiBcIiVzXCJcbiIsIGxpbmUp OwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IGRvZnRwY3dkKGxpbmUsMSkpOwotCi0gICAgICBj YXNlIEZUUF9DSE06ICAgICAgICAgICAgICAgICAgICAgLyogQ0hNT0QgKi8KLSAgICAgICAgaWYg KCh4ID0gY21mbGQoIlBlcm1pc3Npb25zIG9yIHByb3RlY3Rpb24gY29kZSIsIiIsJnMseHhzdHJp bmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBja3N0cm5jcHkodG1wYnVm LHMsVE1QQlVGU0laKTsKLSAgICAgICAgaWYgKCh4ID0gY210eHQoIlJlbW90ZSBmaWxlbmFtZSIs ICIiLCAmcywgeHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBD SEVDS0NPTk4oKTsKLSAgICAgICAgY2ttYWttc2coZnRwY21kYnVmLEZUUF9CVUZTSVosdG1wYnVm LCIgIixzLE5VTEwpOwotICAgICAgICBpZiAodGVzdGluZykKLSAgICAgICAgICBwcmludGYoIiBm dHAgY2htb2Q6ICVzXG4iLGZ0cGNtZGJ1Zik7Ci0gICAgICAgIHN1Y2Nlc3MgPQotICAgICAgICAg IChmdHBjbWQoIlNJVEUgQ0hNT0QiLGZ0cGNtZGJ1ZixsY3MscmNzLGZ0cF92Ym0pID09IFJFUExZ X0NPTVBMRVRFKTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOwotCi0gICAgICBjYXNlIEZUUF9D TFM6ICAgICAgICAgICAgICAgICAgICAgLyogQ0xPU0UgRlRQIGNvbm5lY3Rpb24gKi8KLSAgICAg ICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAg Q0hFQ0tDT05OKCk7Ci0gICAgICAgIGlmICh0ZXN0aW5nKQotICAgICAgICAgIHByaW50ZigiIGZ0 cCBjbG9zaW5nLi4uXG4iKTsKLSAgICAgICAgZnRwY2xvc2UoKTsKLSAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsKLQotICAgICAgY2FzZSBGVFBfRElSOiAgICAgICAgICAgICAgICAgICAgIC8q IERJUkVDVE9SWSBvZiByZW1vdGUgZmlsZXMgKi8KLSAgICAgIGNhc2UgRlRQX1ZESToKLSAgICAg ICAgcmV0dXJuKGRvZnRwZGlyKGN4KSk7Ci0KLSAgICAgIGNhc2UgRlRQX0dFVDogICAgICAgICAg ICAgICAgICAgICAvKiBHRVQgYSByZW1vdGUgZmlsZSAqLwotICAgICAgY2FzZSBGVFBfUkdFOiAg ICAgICAgICAgICAgICAgICAgIC8qIFJFR0VUICovCi0gICAgICBjYXNlIEZUUF9NR0U6ICAgICAg ICAgICAgICAgICAgICAgLyogTUdFVCAqLwotICAgICAgY2FzZSBGVFBfTURFOiAgICAgICAgICAg ICAgICAgICAgIC8qIE1ERUxFVEUgKi8KLSAgICAgICAgcmV0dXJuKGRvZnRwZ2V0KGN4LDEpKTsK LQotICAgICAgY2FzZSBGVFBfSURMOiAgICAgICAgICAgICAgICAgICAgIC8qIElETEUgKi8KLSAg ICAgICAgaWYgKCh4ID0gY21udW0oIk51bWJlciBvZiBzZWNvbmRzIiwiLTEiLDEwLCZ6LHh4c3Ry aW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgaWYgKCh5ID0gY21jZm0o KSkgPCAwKQotICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgQ0hFQ0tDT05OKCk7Ci0gICAg ICAgIGlmICh6IDwgMCkgIHsgICAgICAgICAgICAgICAgICAgLyogRGlzcGxheSBpZGxlIHRpbWVv dXQgKi8KLSAgICAgICAgICAgIGlmICh0ZXN0aW5nKQotICAgICAgICAgICAgICBwcmludGYoIiBm dHAgcXVlcnkgaWRsZSB0aW1lb3V0Li4uXG4iKTsKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSAoZnRw Y21kKCJTSVRFIElETEUiLE5VTEwsMCwwLDEpID09IFJFUExZX0NPTVBMRVRFKTsKLSAgICAgICAg fSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgaWRsZSB0aW1lb3V0ICovCi0g ICAgICAgICAgICBpZiAodGVzdGluZykKLSAgICAgICAgICAgICAgcHJpbnRmKCIgZnRwIGlkbGUg dGltZW91dCBzZXQ6ICVkLi4uXG4iLHopOwotICAgICAgICAgICAgc3VjY2VzcyA9Ci0gICAgICAg ICAgICAgIChmdHBjbWQoIlNJVEUgSURMRSIsY2tpdG9hKHopLDAsMCwxKSA9PSBSRVBMWV9DT01Q TEVURSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOwotCi0gICAgICBjYXNl IEZUUF9NS0Q6ICAgICAgICAgICAgICAgICAgICAgLyogTUtESVIgKi8KLSAgICAgICAgcmV0dXJu KGRvZnRwbWtkKCkpOwotCi0gICAgICBjYXNlIEZUUF9NT0Q6ICAgICAgICAgICAgICAgICAgICAg LyogTU9EVElNRSAqLwotICAgICAgICBpZiAoKHggPSBjbXR4dCgiUmVtb3RlIGZpbGVuYW1lIiwg IiIsICZzLCB4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIENI RUNLQ09OTigpOwotICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7Ci0gICAgICAg IGlmICh0ZXN0aW5nKQotICAgICAgICAgIHByaW50ZigiIGZ0cCBtb2R0aW1lIFwiJXNcIi4uLlxu IixsaW5lKTsKLSAgICAgICAgc3VjY2VzcyA9IDA7Ci0gICAgICAgIGlmIChmdHBjbWQoIk1EVE0i LGxpbmUsbGNzLHJjcyxmdHBfdmJtKSA9PSBSRVBMWV9DT01QTEVURSkgewotCSAgICBzdWNjZXNz ID0gMTsKLQkgICAgbWR0bW9rID0gMTsKLQkgICAgaWYgKCFxdWlldCkgewotCQlpbnQgZmxhZyA9 IDA7Ci0JCWNoYXIgYywgKiBzOwotCQlzdHJ1Y3QgdG0gdG1yZW1vdGU7Ci0KLQkJYnplcm8oKGNo YXIgKikmdG1yZW1vdGUsIHNpemVvZihzdHJ1Y3QgdG0pKTsKLQkJcyA9IGZ0cF9yZXBseV9zdHI7 Ci0JCXdoaWxlICgoYyA9ICpzKyspKSB7Ci0JCSAgICBpZiAoYyA9PSBTUCkgewotCQkJZmxhZysr OwotCQkJYnJlYWs7Ci0JCSAgICB9Ci0JCX0KLQkJaWYgKGZsYWcpIHsKLQkJICAgIGlmIChzc2Nh bmYocywgIiUwNGQlMDJkJTAyZCUwMmQlMDJkJTAyZCIsCi0JCQkgICAgICAgJnRtcmVtb3RlLnRt X3llYXIsCi0JCQkgICAgICAgJnRtcmVtb3RlLnRtX21vbiwKLQkJCSAgICAgICAmdG1yZW1vdGUu dG1fbWRheSwKLQkJCSAgICAgICAmdG1yZW1vdGUudG1faG91ciwKLQkJCSAgICAgICAmdG1yZW1v dGUudG1fbWluLAotCQkJICAgICAgICZ0bXJlbW90ZS50bV9zZWMKLQkJCSAgICAgICApID09IDYp IHsKLQkJCXByaW50ZigiICVzICUwNGQtJTAyZC0lMDJkICUwMmQ6JTAyZDolMDJkIEdNVFxuIiwK LQkJCSAgICAgICBsaW5lLAotCQkJICAgICAgIHRtcmVtb3RlLnRtX3llYXIsCi0JCQkgICAgICAg dG1yZW1vdGUudG1fbW9uLAotCQkJICAgICAgIHRtcmVtb3RlLnRtX21kYXksCi0JCQkgICAgICAg dG1yZW1vdGUudG1faG91ciwKLQkJCSAgICAgICB0bXJlbW90ZS50bV9taW4sCi0JCQkgICAgICAg dG1yZW1vdGUudG1fc2VjCi0JCQkgICAgICAgKTsKLQkJICAgIH0gZWxzZSB7Ci0JCQlzdWNjZXNz ID0gMDsKLQkJICAgIH0KLQkJfQotCSAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MpOwotCi0gICAgICBjYXNlIEZUUF9PUE46ICAgICAgICAgICAgICAgICAgICAgLyogT1BF TiBjb25uZWN0aW9uICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICB4ID0gY21mbGQoIklQIGhv c3RuYW1lIG9yIGFkZHJlc3MiLCIiLCZzLHh4c3RyaW5nKTsKLSAgICAgICAgaWYgKHggPCAwKSB7 Ci0gICAgICAgICAgICBzdWNjZXNzID0gMDsKLSAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAg ICAgfQotICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7Ci0gICAgICAgIHMgPSBs aW5lOwotICAgICAgICByZXR1cm4ob3BlbmZ0cChzLDApKTsKLSNlbHNlCi0gICAgICAgIHsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT1BFTiBjb25uZWN0aW9uICovCi0gICAgICAg ICAgICBjaGFyIG5hbWVbVFROQU1MRU4rMV0sICpwOwotICAgICAgICAgICAgZXh0ZXJuIGludCBu ZXR3b3JrOwotICAgICAgICAgICAgZXh0ZXJuIGNoYXIgdHRuYW1lW107Ci0gICAgICAgICAgICBp ZiAobmV0d29yaykgICAgICAgICAgICAgICAgLyogSWYgd2UgaGF2ZSBhIGN1cnJlbnQgY29ubmVj dGlvbiAqLwotICAgICAgICAgICAgICBja3N0cm5jcHkobmFtZSx0dG5hbWUsTElOQlVGU0laKTsg LyogZ2V0IHRoZSBob3N0IG5hbWUgKi8KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg Km5hbWUgPSAnXDAnOyAgICAgICAgICAgICAvKiBhcyBkZWZhdWx0IGhvc3QgKi8KLSAgICAgICAg ICAgIGZvciAocCA9IG5hbWU7ICpwOyBwKyspICAgICAvKiBSZW1vdmUgIjpzZXJ2aWNlIiBmcm9t IGVuZC4gKi8KLSAgICAgICAgICAgICAgaWYgKCpwID09ICc6JykgeyAqcCA9ICdcMCc7IGJyZWFr OyB9Ci0jaWZuZGVmIFVTRVRMU1RBQgotICAgICAgICAgICAgeCA9IGNtZmxkKCJJUCBob3N0bmFt ZSBvciBhZGRyZXNzIixuYW1lLCZzLHh4c3RyaW5nKTsKLSNlbHNlCi0gICAgICAgICAgICBjbWZk YmkoJmt3LCAgICAgICAgICAgICAgICAgLyogRmlyc3QgRkRCIC0gY29tbWFuZHMgKi8KLSAgICAg ICAgICAgICAgICAgICBfQ01LRVksICAgICAgICAgICAgICAvKiBmY29kZSAqLwotICAgICAgICAg ICAgICAgICAgICJIb3N0bmFtZSBvciBzd2l0Y2giLCAvKiBoZWxwICovCi0gICAgICAgICAgICAg ICAgICAgIiIsICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAgICAg ICAgICIiLCAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAg ICAgICAgICAgICAgbnRsc3RhYiwgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6 IHRibCBzaXplICovCi0gICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgLyog YWRkdGwgbnVtZXJpYyBkYXRhIDI6IG5vbmUgKi8KLSAgICAgICAgICAgICAgICAgICB4eHN0cmlu ZywgICAgICAgICAgICAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0gICAgICAgICAgICAgICAg ICAgdGxzdGFiLCAgICAgICAgICAgICAgLyogS2V5d29yZCB0YWJsZSAqLwotICAgICAgICAgICAg ICAgICAgICZmbCAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KLSAg ICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgY21mZGJpKCZmbCwgICAgICAgICAgICAg ICAgIC8qIEEgaG9zdCBuYW1lIG9yIGFkZHJlc3MgKi8KLSAgICAgICAgICAgICAgICAgICBfQ01G TEQsICAgICAgICAgICAgICAvKiBmY29kZSAqLwotICAgICAgICAgICAgICAgICAgICJIb3N0bmFt ZSBvciBhZGRyZXNzIiwgLyogaGVscCAqLwotICAgICAgICAgICAgICAgICAgICIiLCAgICAgICAg ICAgICAgICAgIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgICAgICAgICAiIiwgICAgICAgICAg ICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAgICAgICAgICAgICAgIDAsICAg ICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCi0gICAgICAgICAgICAg ICAgICAgMCwgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KLSAg ICAgICAgICAgICAgICAgICB4eHN0cmluZywKLSAgICAgICAgICAgICAgICAgICBOVUxMLAotICAg ICAgICAgICAgICAgICAgIE5VTEwKLSAgICAgICAgICAgICAgICAgICApOwotCi0gICAgICAgICAg ICBmb3IgKG4gPSAwOzsgbisrKSB7Ci0gICAgICAgICAgICAgICAgeCA9IGNtZmRiKCZrdyk7ICAg ICAgICAgLyogUGFyc2UgYSBob3N0bmFtZSBvciBhIGtleXdvcmQgKi8KLSAgICAgICAgICAgICAg ICBpZiAoeCA9PSAtMykgewotICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/ZnRwIG9wZW4gd2hh dD8gXCJoZWxwIGZ0cFwiIGZvciBoaW50c1xuIik7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4o LTkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoeCA8IDApCi0gICAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAoY21yZXN1bHQuZmNvZGUg PT0gX0NNRkxEKSB7IC8qIEhvc3RuYW1lICovCi0gICAgICAgICAgICAgICAgICAgIHMgPSBjbXJl c3VsdC5zcmVzdWx0OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg ICB9IGVsc2UgaWYgKGNtcmVzdWx0Lm5yZXN1bHQgPT0gT1BOX1RMUykgewotICAgICAgICAgICAg ICAgICAgICB1c2V0bHMgPSAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSNl bmRpZiAvKiBVU0VUTFNUQUIgKi8KLSAgICAgICAgICAgIGlmICh4IDwgMCkgewotICAgICAgICAg ICAgICAgIHN1Y2Nlc3MgPSAwOwotICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKLSAgICAgICAg ICAgIHMgPSBsaW5lOwotICAgICAgICAgICAgcmV0dXJuKG9wZW5mdHAocyx1c2V0bHMpKTsKLSAg ICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgICAgY2FzZSBGVFBfUFVUOiAgICAg ICAgICAgICAgICAgICAgIC8qIFBVVCAqLwotICAgICAgY2FzZSBGVFBfTVBVOiAgICAgICAgICAg ICAgICAgICAgIC8qIE1QVVQgKi8KLSAgICAgIGNhc2UgRlRQX0FQUDogICAgICAgICAgICAgICAg ICAgICAvKiBBUFBFTkQgKi8KLSAgICAgIGNhc2UgRlRQX1JFUDoJCQkvKiBSRVBVVCAqLwotICAg ICAgICByZXR1cm4oZG9mdHBwdXQoY3gsMSkpOwotCi0gICAgICBjYXNlIEZUUF9QV0Q6ICAgICAg ICAgICAgICAgICAgICAgLyogUFdEICovCi0gICAgICAgIHggPSBkb2Z0cHB3ZCgpOwotICAgICAg ICBpZiAoeCA+IC0xKSBzdWNjZXNzID0geDsKLSAgICAgICAgcmV0dXJuKHgpOwotCi0gICAgICBj YXNlIEZUUF9SRU46ICAgICAgICAgICAgICAgICAgICAgLyogUkVOQU1FICovCi0gICAgICAgIHJl dHVybihkb2Z0cHJlbigpKTsKLQotICAgICAgY2FzZSBGVFBfUkVTOiAgICAgICAgICAgICAgICAg ICAgIC8qIFJFU0VUICovCi0gICAgICAgIHJldHVybihkb2Z0cHJlcygpKTsKLQotICAgICAgY2Fz ZSBGVFBfSExQOiAgICAgICAgICAgICAgICAgICAgIC8qIChyZW1vdGUpIEhFTFAgKi8KLSAgICAg ICAgcmV0dXJuKGRvZnRweGhscCgpKTsKLQotICAgICAgY2FzZSBGVFBfUk1EOiAgICAgICAgICAg ICAgICAgICAgIC8qIFJNRElSICovCi0gICAgICAgIHJldHVybihkb2Z0cHJtZCgpKTsKLQotICAg ICAgY2FzZSBGVFBfU1RBOiAgICAgICAgICAgICAgICAgICAgIC8qIFNUQVRVUyAqLwotICAgICAg ICBpZiAoKHggPSBjbXR4dCgiQ29tbWFuZCIsICIiLCAmcywgeHhzdHJpbmcpKSA8IDApCi0gICAg ICAgICAgcmV0dXJuKHgpOwotICAgICAgICBDSEVDS0NPTk4oKTsKLSAgICAgICAgY2tzdHJuY3B5 KGxpbmUscyxMSU5CVUZTSVopOwotICAgICAgICBpZiAodGVzdGluZykgcHJpbnRmKCIgZnRwIHN0 YXR1cyBcIiVzXCIuLi5cbiIsbGluZSk7Ci0gICAgICAgIHN1Y2Nlc3MgPSAoZnRwY21kKCJTVEFU IixsaW5lLGxjcyxyY3MsMSkgPT0gUkVQTFlfQ09NUExFVEUpOwotICAgICAgICByZXR1cm4oc3Vj Y2Vzcyk7Ci0KLSAgICAgIGNhc2UgRlRQX1NJVDogeyAgICAgICAgICAgICAgICAgICAvKiBTSVRF ICovCi0JICByZXR1cm4oZG9mdHBzaXRlKCkpOwotICAgICAgfQotCi0gICAgICBjYXNlIEZUUF9T SVo6ICAgICAgICAgICAgICAgICAgICAgLyogKGFzayBmb3IpIFNJWkUgKi8KLSAgICAgICAgaWYg KCh4ID0gY210eHQoIlJlbW90ZSBmaWxlbmFtZSIsICIiLCAmcywgeHhzdHJpbmcpKSA8IDApCi0g ICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBDSEVDS0NPTk4oKTsKLSAgICAgICAgY2tzdHJu Y3B5KGxpbmUscyxMSU5CVUZTSVopOwotICAgICAgICBpZiAodGVzdGluZykKLSAgICAgICAgICBw cmludGYoIiBmdHAgc2l6ZSBcIiVzXCIuLi5cbiIsbGluZSk7Ci0gICAgICAgIHN1Y2Nlc3MgPSAo ZnRwY21kKCJTSVpFIixsaW5lLGxjcyxyY3MsMSkgPT0gUkVQTFlfQ09NUExFVEUpOwotCWlmIChz dWNjZXNzKQotCSAgc2l6ZW9rID0gMTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOwotCi0gICAg ICBjYXNlIEZUUF9TWVM6ICAgICAgICAgICAgICAgICAgICAgLyogQXNrIGZvciBzZXJ2ZXIncyBT WVNURU0gdHlwZSAqLwotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsK LSAgICAgICAgQ0hFQ0tDT05OKCk7Ci0gICAgICAgIGlmICh0ZXN0aW5nKQotICAgICAgICAgIHBy aW50ZigiIGZ0cCBzeXN0ZW0uLi5cbiIpOwotICAgICAgICBzdWNjZXNzID0gKGZ0cGNtZCgiU1lT VCIsTlVMTCwwLDAsMSkgPT0gUkVQTFlfQ09NUExFVEUpOwotICAgICAgICByZXR1cm4oc3VjY2Vz cyk7Ci0KLSAgICAgIGNhc2UgRlRQX1VNQTogICAgICAgICAgICAgICAgICAgICAvKiBTZXQvcXVl cnkgVU1BU0sgKi8KLSAgICAgICAgaWYgKCh4ID0gY21mbGQoIlVtYXNrIHRvIHNldCBvciBub3Ro aW5nIHRvIHF1ZXJ5IiwiIiwmcyx4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICBpZiAoeCAhPSAt MykKLSAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgY2tzdHJuY3B5KHRtcGJ1ZixzLFRN UEJVRlNJWik7Ci0gICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAg ICAgICBDSEVDS0NPTk4oKTsKLSAgICAgICAgaWYgKHRlc3RpbmcpIHsKLSAgICAgICAgICAgIGlm ICh0bXBidWZbMF0pCi0gICAgICAgICAgICAgIHByaW50ZigiIGZ0cCB1bWFzayBcIiVzXCIuLi5c biIsdG1wYnVmKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcHJpbnRmKCIgZnRw IHF1ZXJ5IHVtYXNrLi4uXG4iKTsKLSAgICAgICAgfQotICAgICAgICBzdWNjZXNzID0gZnRwX3Vt YXNrKHRtcGJ1Zik7Ci0gICAgICAgIHJldHVybihzdWNjZXNzKTsKLQotICAgICAgY2FzZSBGVFBf VVNSOgotICAgICAgICByZXR1cm4oZG9mdHB1c3IoKSk7Ci0KLSAgICAgIGNhc2UgRlRQX1FVTzoK LSAgICAgICAgaWYgKCh4ID0gY210eHQoIkZUUCBwcm90b2NvbCBjb21tYW5kIiwgIiIsICZzLCB4 eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIENIRUNLQ09OTigp OwotICAgICAgICBzdWNjZXNzID0gKGZ0cGNtZChzLE5VTEwsMCwwLGZ0cF92Ym0pID09IFJFUExZ X0NPTVBMRVRFKTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOwotCi0gICAgICBjYXNlIEZUUF9U WVA6ICAgICAgICAgICAgICAgICAgICAgLyogVHlwZSAqLwotICAgICAgICBpZiAoKHggPSBjbWtl eShmdHB0eXAsbmZ0cHR5cCwiIiwiIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4o eCk7Ci0gICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBD SEVDS0NPTk4oKTsKLSAgICAgICAgZnRwX3R5cCA9IHg7Ci0gICAgICAgIGdfZnRwX3R5cCA9IHg7 Ci0gICAgICAgIHRlbmV4ID0gKGZ0cF90eXAgPT0gRlRUX1RFTik7Ci0gICAgICAgIGNoYW5nZXR5 cGUoZnRwX3R5cCxmdHBfdmJtKTsKLSAgICAgICAgcmV0dXJuKDEpOwotCi0gICAgICBjYXNlIEZU UF9DSEs6ICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgaWYgcmVtb3RlIGZpbGUocykgZXhp c3QocykgKi8KLSAgICAgICAgaWYgKCh4ID0gY210eHQoInJlbW90ZSBmaWxlbmFtZSIsICIiLCAm cywgeHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBDSEVDS0NP Tk4oKTsKLSAgICAgICAgc3VjY2VzcyA9IHJlbW90ZV9maWxlcygxLChDSEFSICopcywoQ0hBUiAq KXMsMCkgPyAxIDogMDsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOwotCi0gICAgICBjYXNlIEZU UF9GRUE6ICAgICAgICAgICAgICAgICAgICAgLyogUkZDMjM4OSAqLwotICAgICAgICBpZiAoKHkg PSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICBDSEVDS0NPTk4o KTsKLQlzdWNjZXNzID0gKGZ0cGNtZCgiRkVBVCIsTlVMTCwwLDAsMSkgPT0gUkVQTFlfQ09NUExF VEUpOwotCWlmIChzdWNjZXNzKSB7Ci0JICAgIGlmIChzZnR0YWJbMF0gPiAwKSB7Ci0JCWZ0cF9h dXQgPSBzZnR0YWJbU0ZUX0FVVEhdOwotCQlzaXplb2sgID0gc2Z0dGFiW1NGVF9TSVpFXTsKLQkJ bWR0bW9rICA9IHNmdHRhYltTRlRfTURUTV07Ci0JCW1sc3RvayAgPSBzZnR0YWJbU0ZUX01MU1Rd OwotCSAgICB9Ci0JfQotCXJldHVybihzdWNjZXNzKTsKLQotICAgICAgY2FzZSBGVFBfT1BUOiAg ICAgICAgICAgICAgICAgICAgIC8qIFJGQzIzODkgKi8KLSAgICAgICAgLyogUGVyaGFwcyB0aGlz IHNob3VsZCBiZSBhIGtleXdvcmQgbGlzdC4uLiAqLwotICAgICAgICBpZiAoKHggPSBjbWZsZCgi RlRQIGNvbW1hbmQiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsK LSAgICAgICAgQ0hFQ0tDT05OKCk7Ci0gICAgICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0la KTsKLSAgICAgICAgaWYgKCh4ID0gY210eHQoIk9wdGlvbnMgZm9yIHRoaXMgY29tbWFuZCIsICIi LCAmcywgeHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBzdWNj ZXNzID0gKGZ0cGNtZCgiT1BUUyIsbGluZSxsY3MscmNzLGZ0cF92Ym0pID09IFJFUExZX0NPTVBM RVRFKTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOwotCi0gICAgICBjYXNlIEZUUF9FTkE6CQkJ LyogRlRQIEVOQUJMRSAqLwotICAgICAgY2FzZSBGVFBfRElTOgkJCS8qIEZUUCBESVNBQkxFICov Ci0gICAgICAgIGlmICgoeCA9IGNta2V5KGZ0cGVuYXRhYixuZnRwZW5hLCIiLCIiLHh4c3RyaW5n KSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkg PCAwKSByZXR1cm4oeSk7Ci0Jc3dpdGNoICh4KSB7Ci0JICBjYXNlIEVOQV9BVVRIOgkJLyogT0sg dG8gdXNlIGF1dG9hdXRoZW50aWNhdGlvbiAqLwotCSAgICBmdHBfYXV0ID0gKGN4ID09IEZUUF9F TkEpID8gMSA6IDA7Ci0JICAgIHNmdHRhYltTRlRfQVVUSF0gPSBmdHBfYXV0OwotCSAgICBicmVh azsKLQkgIGNhc2UgRU5BX0ZFQVQ6CQkvKiBPSyB0byBzZW5kIEZFQVQgY29tbWFuZCAqLwotCSAg ICBmZWF0b2sgPSAoY3ggPT0gRlRQX0VOQSkgPyAxIDogMDsKLQkgICAgYnJlYWs7Ci0JICBjYXNl IEVOQV9NTFNUOgkJLyogT0sgdG8gdXNlIE1MU1QvTUxTRCAqLwotCSAgICBtbHN0b2sgPSAoY3gg PT0gRlRQX0VOQSkgPyAxIDogMDsKLQkgICAgc2Z0dGFiW1NGVF9NTFNUXSA9IG1sc3RvazsKLQkg ICAgYnJlYWs7Ci0JICBjYXNlIEVOQV9NRFRNOgkJLyogT0sgdG8gdXNlIE1EVE0gKi8KLQkgICAg bWR0bW9rID0gKGN4ID09IEZUUF9FTkEpID8gMSA6IDA7Ci0JICAgIHNmdHRhYltTRlRfTURUTV0g PSBtZHRtb2s7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBFTkFfU0laRToJCS8qIE9LIHRvIHVzZSBT SVpFICovCi0JICAgIHNpemVvayA9IChjeCA9PSBGVFBfRU5BKSA/IDEgOiAwOwotCSAgICBzZnR0 YWJbU0ZUX1NJWkVdID0gc2l6ZW9rOwotCSAgICBicmVhazsKLQl9Ci0JcmV0dXJuKHN1Y2Nlc3Mg PSAxKTsKLSAgICB9Ci0gICAgcmV0dXJuKC0yKTsKLX0KLQotI2lmbmRlZiBOT1NIT1cKLXN0YXRp YyBjaGFyICoKLXNob3BsKHgpIGludCB4OyB7Ci0gICAgc3dpdGNoICh4KSB7Ci0gICAgICBjYXNl IEZQTF9DTFI6IHJldHVybigiY2xlYXIiKTsKLSAgICAgIGNhc2UgRlBMX1BSVjogcmV0dXJuKCJw cml2YXRlIik7Ci0gICAgICBjYXNlIEZQTF9TQUY6IHJldHVybigic2FmZSIpOwotICAgICAgY2Fz ZSAwOiAgcmV0dXJuKCIobm90IHNldCkiKTsKLSAgICAgIGRlZmF1bHQ6IHJldHVybigiKHVua25v d24pIik7Ci0gICAgfQotfQotCi1pbnQKLXNob2Z0cChicmllZikgaW50IGJyaWVmOyB7Ci0gICAg Y2hhciAqIHMgPSAiPyI7Ci0gICAgaW50IG4sIHg7Ci0KLSAgICBpZiAoZ19mdHBfdHlwID4gLTEp IHsgICAgICAgICAgICAgICAvKiBSZXN0b3JlIFRZUEUgaWYgc2F2ZWQgKi8KLSAgICAgICAgZnRw X3R5cCA9IGdfZnRwX3R5cDsKLSAgICAgICAgLyogZ19mdHBfdHlwID0gLTE7ICovCi0gICAgfQot ICAgIHByaW50ZigiXG4iKTsKLSAgICBwcmludGYoIkZUUCBjb25uZWN0aW9uOiAgICAgICAgICAg ICAgICAgJXNcbiIsY29ubmVjdGVkID8KLSAgICAgICAgICAgZnRwX2hvc3QgOgotICAgICAgICAg ICAiKG5vbmUpIgotICAgICAgICAgICApOwotICAgIG4gPSAyOwotICAgIGlmIChjb25uZWN0ZWQp IHsKLSAgICAgICAgbisrOwotICAgICAgICBwcmludGYoIkZUUCBzZXJ2ZXIgdHlwZTogICAgICAg ICAgICAgICAgJXNcbiIsCi0gICAgICAgICAgICAgICBmdHBfc3J2dHlwWzBdID8gZnRwX3NydnR5 cCA6ICIodW5rbm93bikiKTsKLSAgICB9Ci0gICAgaWYgKGxvZ2dlZGluKQotICAgICAgcHJpbnRm KCJMb2dnZWQgaW4gYXM6ICAgICAgICAgICAgICAgICAgICVzXG4iLAotICAgICAgICAgICAgIHN0 cnZhbChmdHBfbG9nbmFtZSwiKHVua25vd24pIikpOwotICAgIGVsc2UKLSAgICAgIHByaW50Zigi Tm90IGxvZ2dlZCBpblxuIik7Ci0gICAgbisrOwotICAgIGlmIChicmllZikgcmV0dXJuKDApOwot Ci0gICAgcHJpbnRmKCJcblNFVCBGVFAgdmFsdWVzOlxuXG4iKTsKLSAgICBuICs9IDM7Ci0KLSAg ICBwcmludGYoIiBmdHAgYW5vbnltb3VzLXBhc3N3b3JkOiAgICAgICAgJXNcbiIsCi0JICAgZnRw X2FwdyA/IGZ0cF9hcHcgOiAiKGRlZmF1bHQpIgotCSAgICk7Ci0gICAgcHJpbnRmKCIgZnRwIGF1 dG8tbG9naW46ICAgICAgICAgICAgICAgICVzXG4iLHNob3dvZmYoZnRwX2xvZykpOwotICAgIHBy aW50ZigiIGZ0cCBhdXRvLWF1dGhlbnRpY2F0aW9uOiAgICAgICAlc1xuIixzaG93b2ZmKGZ0cF9h dXQpKTsKLSAgICBzd2l0Y2ggKGZ0cF90eXApIHsKLSAgICAgIGNhc2UgRlRUX0FTQzogcyA9ICJ0 ZXh0IjsgYnJlYWs7Ci0gICAgICBjYXNlIEZUVF9CSU46IHMgPSAiYmluYXJ5IjsgYnJlYWs7Ci0g ICAgICBjYXNlIEZUVF9URU46IHMgPSAidGVuZXgiOyBicmVhazsKLSAgICB9Ci0jaWZkZWYgRlRQ X1RJTUVPVVQKLSAgICBwcmludGYoIiBmdHAgdGltZW91dDogICAgICAgICAgICAgICAgICAgJWxk XG4iLGZ0cF90aW1lb3V0KTsKLSNlbmRpZgkvKiBGVFBfVElNRU9VVCAqLwotICAgIHByaW50Zigi IGZ0cCB0eXBlOiAgICAgICAgICAgICAgICAgICAgICAlc1xuIixzKTsKLSAgICBwcmludGYoIiBm dHAgZ2V0LWZpbGV0eXBlLXN3aXRjaGluZzogICAgJXNcbiIsc2hvd29mZihnZXRfYXV0bykpOwot ICAgIHByaW50ZigiIGZ0cCBkYXRlczogICAgICAgICAgICAgICAgICAgICAlc1xuIixzaG93b2Zm KGZ0cF9kYXRlcykpOwotICAgIHByaW50ZigiIGZ0cCBlcnJvci1hY3Rpb246ICAgICAgICAgICAg ICAlc1xuIixmdHBfZXJyID8gInF1aXQiOiJwcm9jZWVkIik7Ci0gICAgcHJpbnRmKCIgZnRwIGZp bGVuYW1lczogICAgICAgICAgICAgICAgICVzXG4iLAotICAgICAgICAgICBmdHBfY252ID09IENO Vl9BVVRPID8gImF1dG8iIDogKGZ0cF9jbnYgPyAiY29udmVydGVkIiA6ICJsaXRlcmFsIikKLSAg ICAgICAgICAgKTsKLSAgICBwcmludGYoIiBmdHAgZGVidWcgICAgICAgICAgICAgICAgICAgICAg JXNcbiIsc2hvd29mZihmdHBfZGViKSk7Ci0KLSAgICBwcmludGYoIiBmdHAgcGFzc2l2ZS1tb2Rl OiAgICAgICAgICAgICAgJXNcbiIsc2hvd29mZihmdHBfcHN2KSk7Ci0gICAgcHJpbnRmKCIgZnRw IHBlcm1pc3Npb25zOiAgICAgICAgICAgICAgICVzXG4iLHNob3dvb2EoZnRwX3BybSkpOwotICAg IHByaW50ZigiIGZ0cCB2ZXJib3NlLW1vZGU6ICAgICAgICAgICAgICAlc1xuIixzaG93b2ZmKGZ0 cF92YngpKTsKLSAgICBwcmludGYoIiBmdHAgc2VuZC1wb3J0LWNvbW1hbmRzOiAgICAgICAgJXNc biIsc2hvd29mZihmdHBfcHN2KSk7Ci0gICAgcHJpbnRmKCIgZnRwIHVuaXF1ZS1zZXJ2ZXItbmFt ZXM6ICAgICAgICVzXG4iLHNob3dvZmYoZnRwX3VzbikpOwotI2lmZGVmIENPTU1FTlQKLSAgICAv KiBTZWUgbm90ZSBpbiBkb3hmdHAoKSAqLwotICAgIGlmIChmdHBfZm5jIDwgMCkKLSAgICAgIGZ0 cF9mbmMgPSBmbmNhY3Q7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIHByaW50ZigiIGZ0cCBj b2xsaXNpb246ICAgICAgICAgICAgICAgICAlc1xuIiwKLQkgICBmbmNuYW1bZnRwX2ZuYyA+IC0x ID8gZnRwX2ZuYyA6IGZuY2FjdF0pOwotICAgIHByaW50ZigiIGZ0cCBzZXJ2ZXItdGltZS1vZmZz ZXQ6ICAgICAgICAlc1xuIiwKLQkgICBmdHNfc3RvID8gZnRzX3N0byA6ICIobm9uZSkiKTsKLSAg ICBuICs9IDE1OwotCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICBwcmludGYoIiBmdHAgY2hhcmFjdGVy LXNldC10cmFuc2xhdGlvbjogJXNcbiIsc2hvd29mZihmdHBfeGxhKSk7Ci0gICAgaWYgKCsrIG4g PiBjbWRfcm93cy0zKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4gMDsgZWxzZSBuID0gMDsgfQot Ci0gICAgcHJpbnRmKCIgZnRwIHNlcnZlci1jaGFyYWN0ZXItc2V0OiAgICAgICVzXG4iLGZjc2lu Zm9bZnRwX2Nzcl0ua2V5d29yZCk7Ci0gICAgaWYgKCsrIG4gPiBjbWRfcm93cy0zKSB7IGlmICgh YXNrbW9yZSgpKSByZXR1cm4gMDsgZWxzZSBuID0gMDsgfQotCi0gICAgcHJpbnRmKCIgZmlsZSBj aGFyYWN0ZXItc2V0OiAgICAgICAgICAgICVzXG4iLGZjc2luZm9bZmNoYXJzZXRdLmtleXdvcmQp OwotICAgIGlmICgrKyBuID4gY21kX3Jvd3MtMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuIDA7 IGVsc2UgbiA9IDA7IH0KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSAgICB4ID0gZnRwX2RpczsK LSAgICBpZiAoeCA8IDApCi0gICAgICB4ID0gZmRpc3BsYTsKLSAgICBzd2l0Y2ggKHgpIHsKLSAg ICAgIGNhc2UgWFlGRF9OOiBzID0gIm5vbmUiOyBicmVhazsKLSAgICAgIGNhc2UgWFlGRF9SOiBz ID0gInNlcmlhbCI7IGJyZWFrOwotICAgICAgY2FzZSBYWUZEX0M6IHMgPSAiZnVsbHNjcmVlbiI7 IGJyZWFrOwotICAgICAgY2FzZSBYWUZEX1M6IHMgPSAiY3J0IjsgYnJlYWs7Ci0gICAgICBjYXNl IFhZRkRfQjogcyA9ICJicmllZiI7IGJyZWFrOwotICAgIH0KLSAgICBwcmludGYoIiBmdHAgZGlz cGxheTogICAgICAgICAgICAgICAgICAgJXNcbiIscyk7Ci0gICAgaWYgKCsrIG4gPiBjbWRfcm93 cy0zKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4gMDsgZWxzZSBuID0gMDsgfQotCi0gICAgaWYg KG1sc3RvayB8fCBmZWF0b2sgfHwgbWR0bW9rIHx8IHNpemVvayB8fCBmdHBfYXV0KSB7Ci0JcHJp bnRmKCIgZW5hYmxlZDogICAgICAgICAgICAgICAgICAgICAgIik7Ci0JaWYgKGZ0cF9hdXQpIHBy aW50ZigiIEFVVEgiKTsKLQlpZiAoZmVhdG9rKSAgcHJpbnRmKCIgRkVBVCIpOwotCWlmIChtZHRt b2spICBwcmludGYoIiBNRFRNIik7Ci0JaWYgKG1sc3RvaykgIHByaW50ZigiIE1MU1QiKTsKLQlp ZiAoc2l6ZW9rKSAgcHJpbnRmKCIgU0laRSIpOwotCXByaW50ZigiXG4iKTsKLQlpZiAoKysgbiA+ IGNtZF9yb3dzLTMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybiAwOyBlbHNlIG4gPSAwOyB9Ci0g ICAgfQotICAgIGlmICghbWxzdG9rIHx8ICFmZWF0b2sgfHwgIW1kdG1vayB8fCAhc2l6ZW9rIHx8 ICFmdHBfYXV0KSB7Ci0JcHJpbnRmKCIgZGlzYWJsZWQ6ICAgICAgICAgICAgICAgICAgICAgIik7 Ci0JaWYgKCFmdHBfYXV0KSBwcmludGYoIiBBVVRIIik7Ci0JaWYgKCFmZWF0b2spICBwcmludGYo IiBGRUFUIik7Ci0JaWYgKCFtZHRtb2spICBwcmludGYoIiBNRFRNIik7Ci0JaWYgKCFtbHN0b2sp ICBwcmludGYoIiBNTFNUIik7Ci0JaWYgKCFzaXplb2spICBwcmludGYoIiBTSVpFIik7Ci0JcHJp bnRmKCJcbiIpOwotCWlmICgrKyBuID4gY21kX3Jvd3MtMykgeyBpZiAoIWFza21vcmUoKSkgcmV0 dXJuIDA7IGVsc2UgbiA9IDA7IH0KLSAgICB9Ci0gICAgc3dpdGNoIChmdHBnZXQpIHsKLSAgICAg IGNhc2UgMDogcyA9ICJrZXJtaXQiOyBicmVhazsKLSAgICAgIGNhc2UgMTogcyA9ICJmdHAiOyBi cmVhazsKLSAgICAgIGNhc2UgMjogcyA9ICJhdXRvIjsgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBz ID0gIj8iOwotICAgIH0KLSAgICBwcmludGYoIiBnZXQtcHV0LXJlbW90ZTogICAgICAgICAgICAg ICAgJXNcbiIscyk7Ci0gICAgaWYgKCsrIG4gPiBjbWRfcm93cy0zKSB7IGlmICghYXNrbW9yZSgp KSByZXR1cm4gMDsgZWxzZSBuID0gMDsgfQotCi0gICAgcHJpbnRmKCJcbiIpOwotICAgIGlmICgr KyBuID4gY21kX3Jvd3MtMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuIDA7IGVsc2UgbiA9IDA7 IH0KLQotI2lmZGVmIEZUUF9TRUNVUklUWQotICAgIHByaW50ZigiQXZhaWxhYmxlIHNlY3VyaXR5 IG1ldGhvZHM6ICAgICIpOwotI2lmZGVmIEZUUF9HU1NBUEkKLSAgICBwcmludGYoIkdTU0FQSSAi KTsKLSNlbmRpZiAvKiBGVFBfR1NTQVBJICovCi0jaWZkZWYgRlRQX0tSQjQKLSAgICBwcmludGYo IktlcmJlcm9zNCAiKTsKLSNlbmRpZiAvKiBGVFBfS1JCNCAqLwotI2lmZGVmIEZUUF9TUlAKLSAg ICBwcmludGYoIlNSUCAiKTsKLSNlbmRpZiAvKiBGVFBfU1JQICovCi0jaWZkZWYgRlRQX1NTTAot ICAgIHByaW50ZigiU1NMICIpOwotI2VuZGlmIC8qIEZUUF9TU0wgKi8KLQotICAgIG4rKzsKLSAg ICBwcmludGYoIlxuXG4iKTsKLSAgICBpZiAoKysgbiA+IGNtZF9yb3dzLTMpIHsgaWYgKCFhc2tt b3JlKCkpIHJldHVybiAwOyBlbHNlIG4gPSAwOyB9Ci0gICAgcHJpbnRmKCIgZnRwIGF1dGh0eXBl OiAgICAgICAgICAgICAgICAgICVzXG4iLHN0cnZhbChhdXRoX3R5cGUsTlVMTCkpOwotICAgIGlm ICgrKyBuID4gY21kX3Jvd3MtMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuIDA7IGVsc2UgbiA9 IDA7IH0KLSAgICBwcmludGYoIiBmdHAgYXV0by1lbmNyeXB0aW9uOiAgICAgICAgICAgJXNcbiIs c2hvd29mZihmdHBfY3J5KSk7Ci0gICAgaWYgKCsrIG4gPiBjbWRfcm93cy0zKSB7IGlmICghYXNr bW9yZSgpKSByZXR1cm4gMDsgZWxzZSBuID0gMDsgfQotICAgIHByaW50ZigiIGZ0cCBjcmVkZW50 aWFsLWZvcndhcmRpbmc6ICAgICAlc1xuIixzaG93b2ZmKGZ0cF9jZncpKTsKLSAgICBpZiAoKysg biA+IGNtZF9yb3dzLTMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybiAwOyBlbHNlIG4gPSAwOyB9 Ci0gICAgcHJpbnRmKCIgZnRwIGNvbW1hbmQtcHJvdGVjdGlvbi1sZXZlbDogICVzXG4iLHNob3Bs KGZ0cF9jcGwpKTsKLSAgICBpZiAoKysgbiA+IGNtZF9yb3dzLTMpIHsgaWYgKCFhc2ttb3JlKCkp IHJldHVybiAwOyBlbHNlIG4gPSAwOyB9Ci0gICAgcHJpbnRmKCIgZnRwIGRhdGEtcHJvdGVjdGlv bi1sZXZlbDogICAgICVzXG4iLHNob3BsKGZ0cF9kcGwpKTsKLSAgICBpZiAoKysgbiA+IGNtZF9y b3dzLTMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybiAwOyBlbHNlIG4gPSAwOyB9Ci0gICAgcHJp bnRmKCIgZnRwIHNlY3VyZSBwcm94eTogICAgICAgICAgICAgICVzXG4iLHNob3BsKHNzbF9mdHBf cHJveHkpKTsKLSAgICBpZiAoKysgbiA+IGNtZF9yb3dzLTMpIHsgaWYgKCFhc2ttb3JlKCkpIHJl dHVybiAwOyBlbHNlIG4gPSAwOyB9Ci0jZWxzZQotICAgIHByaW50ZigiQXZhaWxhYmxlIHNlY3Vy aXR5IG1ldGhvZHM6ICAgICAobm9uZSlcbiIpOwotICAgIGlmICgrKyBuID4gY21kX3Jvd3MtMykg eyBpZiAoIWFza21vcmUoKSkgcmV0dXJuIDA7IGVsc2UgbiA9IDA7IH0KLSNlbmRpZiAvKiBGVFBf U0VDVVJJVFkgKi8KLQotICAgIGlmIChuIDw9IGNtZF9yb3dzIC0gMykKLSAgICAgIHByaW50Zigi XG4iKTsKLSAgICByZXR1cm4oMCk7Ci19Ci0jZW5kaWYgLyogTk9TSE9XICovCi0KLSNpZm5kZWYg Tk9IRUxQCi0vKiBGVFAgSEVMUCB0ZXh0IHN0cmluZ3MgKi8KLQotc3RhdGljIGNoYXIgKiBmaHNf ZnRwW10gPSB7Ci0gICAgIlN5bnRheDogRlRQIHN1YmNvbW1hbmQgWyBvcGVyYW5kcyBdIiwKLSAg ICAiICBNYWtlcyBhbiBGVFAgY29ubmVjdGlvbiwgb3Igc2VuZHMgYSBjb21tYW5kIHRvIHRoZSBG VFAgc2VydmVyLiIsCi0gICAgIiAgVG8gc2VlIGEgbGlzdCBvZiBhdmFpbGFibGUgRlRQIHN1YmNv bW1hbmRzLCB0eXBlIFwiZnRwID9cIi4iLAotICAgICIgIGFuZCB0aGVuIHVzZSBIRUxQIEZUUCB4 eHggdG8gZ2V0IGhlbHAgYWJvdXQgc3ViY29tbWFuZCB4eHguIiwKLSAgICAiICBBbHNvIHNlZSBI RUxQIFNFVCBGVFAsIEhFTFAgU0VUIEdFVC1QVVQtUkVNT1RFLCBhbmQgSEVMUCBGSVJFV0FMTC4i LAotICAgICIiCi19OwotCi1zdGF0aWMgY2hhciAqIGZoc19hY2NbXSA9IHsgICAgICAgICAgICAg LyogQUNDT1VOVCAqLwotICAgICJTeW50YXg6IEZUUCBBQ0NPVU5UIHRleHQiLAotICAgICIgIFNl bmRzIGFuIGFjY291bnQgZGVzaWduYXRvciB0byBhbiBGVFAgc2VydmVyIHRoYXQgbmVlZHMgb25l LiIsCi0gICAgIiAgTW9zdCBGVFAgc2VydmVycyBkbyBub3QgdXNlIGFjY291bnRzOyBzb21lIHVz ZSB0aGVtIGZvciBvdGhlciIsCi0gICAgIiAgb3RoZXIgcHVycG9zZXMsIHN1Y2ggYXMgZGlzay1h Y2Nlc3MgcGFzc3dvcmRzLiIsCi0gICAgIiIKLX07Ci1zdGF0aWMgY2hhciAqIGZoc19hcHBbXSA9 IHsgICAgICAgICAgICAgLyogQVBQRU5EICovCi0gICAgIlN5bnRheDogRlRQIEFQUEVORCBmaWxu YW1lIiwKLSAgICAiICBFcXVpdmFsZW50IHRvIFsgRlRQIF0gUFVUIC9BUFBFTkQuICBTZWUgSEVM UCBGVFAgUFVULiIsCi0gICAgIiIKLX07Ci1zdGF0aWMgY2hhciAqIGZoc19jbHNbXSA9IHsgICAg ICAgICAgICAgLyogQllFLCBDTE9TRSAqLwotICAgICJTeW50YXg6IFsgRlRQIF0gQllFIiwKLSAg ICAiICBMb2dzIG91dCBmcm9tIHRoZSBGVFAgc2VydmVyIGFuZCBjbG9zZXMgdGhlIEZUUCBjb25u ZWN0aW9uLiIsCi0gICAgIiAgQWxzbyBzZWUgSEVMUCBTRVQgR0VULVBVVC1SRU1PVEUuICBTeW5v bnltOiBbIEZUUCBdIENMT1NFLiIsCi0gICAgIiIKLX07Ci1zdGF0aWMgY2hhciAqIGZoc19jd2Rb XSA9IHsgICAgICAgICAgICAgLyogQ0QsIENXRCAqLwotICAgICJTeW50YXg6IFsgRlRQIF0gQ0Qg ZGlyZWN0b3J5IiwKLSAgICAiICBBc2tzIHRoZSBGVFAgc2VydmVyIHRvIGNoYW5nZSB0byB0aGUg Z2l2ZW4gZGlyZWN0b3J5LiIsCi0gICAgIiAgQWxzbyBzZWUgSEVMUCBTRVQgR0VULVBVVC1SRU1P VEUuICBTeW5vbnltczogWyBGVFAgXSBDV0QsIFJDRCwgUkNXRC4iLAotICAgICIiCi19Owotc3Rh dGljIGNoYXIgKiBmaHNfZ3VwW10gPSB7ICAgICAgICAgICAgIC8qIENEVVAsIFVQICovCi0gICAg IlN5bnRheDogRlRQIENEVVAiLAotICAgICIgIEFza3MgdGhlIEZUUCBzZXJ2ZXIgdG8gY2hhbmdl IHRvIHRoZSBwYXJlbnQgZGlyZWN0b3J5IG9mIGl0cyBjdXJyZW50IiwKLSAgICAiICBkaXJlY3Rv cnkuICBBbHNvIHNlZSBIRUxQIFNFVCBHRVQtUFVULVJFTU9URS4gIFN5bm9ueW06IEZUUCBVUC4i LAotICAgICIiCi19Owotc3RhdGljIGNoYXIgKiBmaHNfY2htW10gPSB7ICAgICAgICAgICAgIC8q IENITU9EICovCi0gICAgIlN5bnRheDogRlRQIENITU9EIGZpbGVuYW1lIHBlcm1pc3Npb25zIiwK LSAgICAiICBBc2tzIHRoZSBGVFAgc2VydmVyIHRvIGNoYW5nZSB0aGUgcGVybWlzc2lvbnMsIHBy b3RlY3Rpb24sIG9yIG1vZGUgb2YiLAotICAgICIgIHRoZSBnaXZlbiBmaWxlLiAgVGhlIGdpdmVu IHBlcm1pc3Npb25zIG11c3QgYmUgaW4gdGhlIHN5bnRheCBvZiB0aGUiLAotICAgICIgIHRoZSBz ZXJ2ZXIncyBmaWxlIHN5c3RlbSwgZS5nLiBhbiBvY3RhbCBudW1iZXIgZm9yIFVOSVguICBBbHNv IHNlZSIsCi0gICAgIiAgRlRQIFBVVCAvUEVSTUlTU0lPTlMiLAotICAgICIiCi19Owotc3RhdGlj IGNoYXIgKiBmaHNfbWRlW10gPSB7ICAgICAgICAgICAgIC8qIERFTEVURSAqLwotICAgICJTeW50 YXg6IEZUUCBERUxFVEUgWyBzd2l0Y2hlcyBdIGZpbGVzcGVjIiwKLSAgICAiICBBc2tzIHRoZSBG VFAgc2VydmVyIHRvIGRlbGV0ZSB0aGUgZ2l2ZW4gZmlsZSBvciBmaWxlcy4iLAotICAgICIgIFN5 bm9ueW06IE1ERUxFVEUgKEtlcm1pdCBtYWtlcyBubyBkaXN0aW5jdGlvbiBiZXR3ZWVuIHNpbmds ZSBhbmQiLAotICAgICIgIG11bHRpcGxlIGZpbGUgZGVsZXRpb24pLiAgT3B0aW9uYWwgc3dpdGNo ZXM6IiwKLSAgICAiICIsCi0gICAgIiAgL0VSUk9SLUFDVElPTjp7UFJPQ0VFRCxRVUlUfSIsCi0g ICAgIiAgL0VYQ0VQVDpwYXR0ZXJuIiwKLSAgICAiICAvRklMRU5BTUVTOntBVVRPLENPTlZFUlRF RCxMSVRFUkFMfSIsCi0gICAgIiAgL0xBUkdFUi1USEFOOm51bWJlciIsCi0jaWZkZWYgVU5JWE9S T1NLCi0gICAgIiAgL05PRE9URklMRVMiLAotI2VuZGlmIC8qIFVOSVhPUk9TSyAqLwotICAgICIg IC9RVUlFVCIsCi0jaWZkZWYgUkVDVVJTSVZFCi0gICAgIiAgL1JFQ1VSU0lWRSAoZGVwZW5kcyBv biBzZXJ2ZXIpIiwKLSAgICAiICAvU1VCRElSRUNUT1JJRVMiLAotI2VuZGlmIC8qIFJFQ1VSU0lW RSAqLwotICAgICIgIC9TTUFMTEVSLVRIQU46bnVtYmVyIiwKLSAgICAiIgotfTsKLXN0YXRpYyBj aGFyICogZmhzX2RpcltdID0geyAgICAgICAgICAgICAvKiBESVJFQ1RPUlkgKi8KLSAgICAiU3lu dGF4OiBGVFAgRElSRUNUT1JZIFsgZmlsZXNwZWMgXSIsCi0gICAgIiAgQXNrcyB0aGUgc2VydmVy IHRvIHNlbmQgYSBkaXJlY3RvcnkgbGlzdGluZyBvZiB0aGUgZmlsZXMgdGhhdCBtYXRjaCIsCi0g ICAgIiAgdGhlIGdpdmVuIGZpbGVzcGVjLCBvciBpZiBub25lIGlzIGdpdmVuLCBhbGwgdGhlIGZp bGVzIGluIGl0cyBjdXJyZW50IiwKLSAgICAiICBkaXJlY3RvcnkuICBUaGUgZmlsZXNwZWMsIGlu Y2x1ZGluZyBhbnkgd2lsZGNhcmRzLCBtdXN0IGJlIGluIHRoZSIsCi0gICAgIiAgc3ludGF4IG9m IHRoZSBzZXJ2ZXIncyBmaWxlIHN5c3RlbS4gIEFsc28gc2VlIEhFTFAgU0VUIEdFVC1QVVQtUkVN T1RFLiIsCi0gICAgIiAgU3lub255bTogUkRJUkVDVE9SWS4iLAotICAgICIiCi19Owotc3RhdGlj IGNoYXIgKiBmaHNfdmRpW10gPSB7ICAgICAgICAgICAgIC8qIFZESVJFQ1RPUlkgKi8KLSAgICAi U3ludGF4OiBGVFAgVkRJUkVDVE9SWSBbIGZpbGVzcGVjIF0iLAotICAgICIgIEFza3MgdGhlIHNl cnZlciB0byBzZW5kIGEgZGlyZWN0b3J5IGxpc3Rpbmcgb2YgdGhlIGZpbGVzIHRoYXQgbWF0Y2gi LAotICAgICIgIHRoZSBnaXZlbiBmaWxlc3BlYywgb3IgaWYgbm9uZSBpcyBnaXZlbiwgYWxsIHRo ZSBmaWxlcyBpbiBpdHMgY3VycmVudCIsCi0gICAgIiAgZGlyZWN0b3J5LiAgVkRJUkVDVE9SWSBp cyBuZWVkZWQgZm9yIGdldHRpbmcgdmVyYm9zZSBkaXJlY3RvcnkiLAotICAgICIgIGxpc3Rpbmdz IGZyb20gY2VydGFpbiBGVFAgc2VydmVycywgc3VjaCBhcyBvbiBUT1BTLTIwLiAgVHJ5IGl0IGlm IiwKLSAgICAiICBGVFAgRElSRUNUT1JZIGxpc3RzIG9ubHkgZmlsZW5hbWVzIHdpdGhvdXQgZGV0 YWlscy4iLAotICAgICIiCi19Owotc3RhdGljIGNoYXIgKiBmaHNfZmVhW10gPSB7ICAgICAgICAg ICAgIC8qIEZFQVRVUkVTICovCi0gICAgIlN5bnRheDogRlRQIEZFQVRVUkVTIiwKLSAgICAiICBB c2tzIHRoZSBGVFAgc2VydmVyIHRvIGxpc3QgaXRzIHNwZWNpYWwgZmVhdHVyZXMuICBNb3N0IEZU UCBzZXJ2ZXJzIiwKLSAgICAiICBkbyBub3QgcmVjb2duaXplIHRoaXMgY29tbWFuZC4iLAotICAg ICIiCi19Owotc3RhdGljIGNoYXIgKiBmaHNfbWdlW10gPSB7ICAgICAgICAgICAgIC8qIE1HRVQg Ki8KLSAgICAiU3ludGF4OiBbIEZUUCBdIE1HRVQgWyBvcHRpb25zIF0gZmlsZXNwZWMgWyBmaWxl c3BlYyBbIGZpbGVzcGVjIC4uLiBdIF0iLAotICAgICIgIERvd25sb2FkIGEgc2luZ2xlIGZpbGUg b3IgbXVsdGlwbGUgZmlsZXMuICBBc2tzIHRoZSBGVFAgc2VydmVyIHRvIHNlbmQiLAotICAgICIg IHRoZSBnaXZlbiBmaWxlIG9yIGZpbGVzLiAgQWxzbyBzZWUgRlRQIEdFVC4gIE9wdGlvbmFsIHN3 aXRjaGVzOiIsCi0gICAgIiAiLAotICAgICIgIC9BUy1OQU1FOnRleHQiLAotICAgICIgICAgTmFt ZSB1bmRlciB3aGljaCB0byBzdG9yZSBpbmNvbWluZyBmaWxlLiIsCi0gICAgIiAgICBQYXR0ZXJu IHJlcXVpcmVkIGZvciBmb3IgbXVsdGlwbGUgZmlsZXMuIiwKLSAgICAiICAvQklOQVJZIiwgICAg ICAgICAgICAgICAgICAgICAgICAvKiAvSU1BR0UgKi8KLSAgICAiICAgIEZvcmNlIGJpbmFyeSBt b2RlLiAgU3lub255bTogL0lNQUdFLiIsCi0gICAgIiAgL0NPTExJU0lPTjp7QkFDS1VQLFJFTkFN RSxVUERBVEUsRElTQ0FSRCxBUFBFTkQsT1ZFUldSSVRFfSIsCi0gICAiICAgIFdoYXQgdG8gZG8g aWYgYW4gaW5jb21pbmcgZmlsZSBoYXMgdGhlIHNhbWUgbmFtZSBhcyBhbiBleGlzdGluZyBmaWxl LiIsCi0KLSNpZmRlZiBQVVRQSVBFCi0gICAgIiAgL0NPTU1BTkQiLAotICAgICIgICAgU3BlY2lm aWVzIHRoYXQgdGhlIGFzLW5hbWUgaXMgYSBjb21tYW5kIHRvIHdoaWNoIHRoZSBpbmNvbWluZyBm aWxlIiwKLSAgICAiICAgIGlzIHRvIGJlIHBpcGVkIGFzIHN0YW5kYXJkIGlucHV0LiIsCi0jZW5k aWYgLyogUFVUUElQRSAqLwotCi0jaWZkZWYgRE9VUERBVEUKLSAgICAiICAvREFURVMtRElGRkVS IiwKLSAgICAiICAgIERvd25sb2FkIG9ubHkgdGhvc2UgZmlsZXMgd2hvc2UgbW9kaWZpY2F0aW9u IGRhdGUtdGltZXMgZGlmZmVyIGZyb20iLAotICAgICIgICAgdGhvc2Ugb2YgdGhlIGNvcnJlc3Bv bmRpbmcgbG9jYWwgZmlsZXMsIG9yIHRoYXQgZG8gbm90IGFscmVhZHkiLAotICAgICIgICAgZXhp c3Qgb24gdGhlIGxvY2FsIGNvbXB1dGVyLiIsCi0jZW5kaWYgLyogRE9VUERBVEUgKi8KLQotICAg ICIgIC9ERUxFVEUiLAotICAgICIgICAgU3BlY2lmaWVzIHRoYXQgZWFjaCBmaWxlIGlzIHRvIGJl IGRlbGV0ZWQgZnJvbSB0aGUgc2VydmVyIGFmdGVyLCIsCi0gICAgIiAgICBhbmQgb25seSBpZiwg aXQgaXMgc3VjY2Vzc2Z1bGx5IGRvd25sb2FkZWQuIiwKLSAgICAiICAvRVJST1ItQUNUSU9OOntQ Uk9DRUVELFFVSVR9IiwKLSAgICAiICAgIFdoZW4gZG93bmxvYWRpbmcgYSBncm91cCBvZiBmaWxl cywgd2hhdCB0byBkbyB1cG9uIGZhaWx1cmUgdG8iLAotICAgICIgICAgdHJhbnNmZXIgYSBmaWxl OiBxdWl0IG9yIHByb2NlZWQgdG8gdGhlIG5leHQgb25lLiIsCi0gICAgIiAgL0VYQ0VQVDpwYXR0 ZXJuIiwKLSAgICAiICAgIEV4Y2VwdGlvbiBsaXN0OiBkb24ndCBkb3dubG9hZCBhbnkgZmlsZXMg dGhhdCBtYXRjaCB0aGlzIHBhdHRlcm4uIiwKLSAgICAiICAgIFNlZSBIRUxQIFdJTERDQVJEIGZv ciBwYXR0ZXJuIHN5bnRheC4iLAotICAgICIgIC9GSUxFTkFNRVM6e0FVVE9NQVRJQyxDT05WRVJU RUQsTElURVJBTH0iLAotICAgICIgICAgV2hldGhlciB0byBjb252ZXJ0IGluY29taW5nIGZpbGVu YW1lcyB0byBsb2NhbCBzeW50YXguIiwKLSNpZmRlZiBQSVBFU0VORAotI2lmbmRlZiBOT1NQTAot ICAgICIgIC9GSUxURVI6Y29tbWFuZCIsCi0gICAgIiAgICBQYXNzIGluY29taW5nIGZpbGVzIHRo cm91Z2ggdGhlIGdpdmVuIGNvbW1hbmQuIiwKLSNlbmRpZiAvKiBOT1NQTCAqLwotI2VuZGlmIC8q IFBJUEVTRU5EICovCi0gICAgIiAgL0xBUkdFUi1USEFOOm51bWJlciIsCi0gICAgIiAgICBPbmx5 IGRvd25sb2FkIGZpbGVzIHRoYXQgYXJlIGxhcmdlciB0aGFuIHRoZSBnaXZlbiBudW1iZXIgb2Yg Ynl0ZXMuIiwKLSAgICAiICAvTElTVEZJTEU6ZmlsZW5hbWUiLAotICAgICIgICAgT2J0YWluIHRo ZSBsaXN0IG9mIGZpbGVzIHRvIGRvd25sb2FkIGZyb20gdGhlIGdpdmVuIGZpbGUuIiwKLSNpZm5k ZWYgTk9DU0VUUwotICAgICIgIC9MT0NBTC1DSEFSQUNURVItU0VUOm5hbWUiLAotICAgICIgICAg V2hlbiBkb3dubG9hZGluZyBpbiB0ZXh0IG1vZGUgYW5kIGNoYXJhY3Rlci1zZXQgY29udmVyc2lv biBpcyIsCi0gICAgIiAgICBkZXNpcmVkLCB0aGlzIHNwZWNpZmllcyB0aGUgdGFyZ2V0IHNldC4i LAotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSAgICAiICAvTUFUQ0g6cGF0dGVybiIsCi0gICAgIiAg ICBTcGVjaWZpZXMgYSBwYXR0ZXJuIHRvIGJlIHVzZWQgdG8gc2VsZWN0IGZpbGVuYW1lcyBsb2Nh bGx5IGZyb20gdGhlIiwKLSAgICAiICAgIHNlcnZlcidzIGxpc3QuIiwKLSAgICAiICAvTUxTRCIs Ci0gICAgIiAgICBGb3JjZXMgc2VuZGluZyBvZiBNTFNEIChyYXRoZXIgdGhhbiBOTFNUKSB0byBn ZXQgdGhlIGZpbGUgbGlzdC4iLAotI2lmZGVmIENLX1RNUERJUgotICAgICIgIC9NT1ZFLVRPOmRp cmVjdG9yeSIsCi0gICAgIiAgICBFYWNoIGZpbGUgdGhhdCBpcyBkb3dubG9hZGVkIGlzIHRvIGJl IG1vdmVkIHRvIHRoZSBnaXZlbiBsb2NhbCIsCi0gICAgIiAgICBkaXJlY3RvcnkgaW1tZWRpYXRl bHkgYWZ0ZXIsIGFuZCBvbmx5IGlmLCBpdCBoYXMgYmVlbiByZWNlaXZlZCIsCi0gICAgIiAgICBz dWNjZXNzZnVsbHkuIiwKLSNlbmRpZiAvKiBDS19UTVBESVIgKi8KLSAgICAiICAvTkFNRUxJU1Q6 ZmlsZW5hbWUiLAotICAgICIgICAgSW5zdGVhZCBvZiBkb3dubG9hZGluZyB0aGUgZmlsZXMsIHN0 b3JlcyB0aGUgbGlzdCBvZiBmaWxlcyB0aGF0IiwKLSAgICAiICAgIHdvdWxkIGJlIGRvd25sb2Fk ZWQgaW4gdGhlIGdpdmVuIGxvY2FsIGZpbGUsIG9uZSBmaWxlbmFtZSBwZXIgbGluZS4iLAotICAg ICIgIC9OTFNUIiwKLSAgICAiICAgIEZvcmNlcyBzZW5kaW5nIG9mIE5MU1QgKHJhdGhlciB0aGFu IE1MU0QpIHRvIGdldCB0aGUgZmlsZSBsaXN0LiIsCi0gICAgIiAgL05PQkFDS1VQRklMRVMiLAot ICAgICIgICAgRG9uJ3QgZG93bmxvYWQgYW55IGZpbGVzIHdob3NlIG5hbWVzIGVuZCB3aXRoIC5+ PG51bWJlcj5+LiIsCi0gICAgIiAgL05PRE9URklMRVMiLAotICAgICIgICAgRG9uJ3QgZG93bmxv YWQgYW55IGZpbGVzIHdob3NlIG5hbWVzIGJlZ2luIHdpdGggcGVyaW9kICguKS4iLAotICAgICIg IC9RVUlFVCIsCi0gICAgIiAgICBTdXBwcmVzcyB0aGUgZmlsZS10cmFuc2ZlciBkaXNwbGF5LiIs Ci0jaWZkZWYgRlRQX1JFU1RBUlQKLSAgICAiICAvUkVDT1ZFUiIsICAgICAgICAgICAgICAgICAg ICAgICAvKiAvUkVTVEFSVCAqLwotICAgICIgICAgUmVzdW1lIGEgZG93bmxvYWQgdGhhdCB3YXMg cHJldmlvdXNseSBpbnRlcnJ1cHRlZCBmcm9tIHRoZSBwb2ludCBvZiIsCi0gICAgIiAgICBmYWls dXJlLiAgV29ya3Mgb25seSBpbiBiaW5hcnkgbW9kZS4gIE5vdCBzdXBwb3J0ZWQgYnkgYWxsIHNl cnZlcnMuIiwKLSAgICAiICAgIFN5bm9ueW06IC9SRVNUQVJULiIsCi0jZW5kaWYgLyogRlRQX1JF U1RBUlQgKi8KLSNpZmRlZiBSRUNVUlNJVkUKLSAgICAiICAvUkVDVVJTSVZFIiwgICAgICAgICAg ICAgICAgICAgICAvKiAvU1VCRElSRUNUT1JJRVMgKi8KLSAgICAiICAgIENyZWF0ZSBzdWJkaXJl Y3RvcmllcyBhdXRvbWF0aWNhbGx5IGlmIHRoZSBzZXJ2ZXIgc2VuZHMgZmlsZXMiLAotICAgICIg ICAgcmVjdXJzaXZlbHkgYW5kIGluY2x1ZGVzIHBhdGhuYW1lcyAobW9zdCBkb24ndCkuIiwKLSNl bmRpZiAvKiBSRUNVUlNJVkUgKi8KLSAgICAiICAvUkVOQU1FLVRPOnRleHQiLAotICAgICIgICAg RWFjaCBmaWxlIHRoYXQgaXMgZG93bmxvYWRlZCBpcyB0byBiZSByZW5hbWVkIGFzIGluZGljYXRl ZCBqdXN0LCIsCi0gICAgIiAgICBhZnRlciwgYW5kIG9ubHkgaWYsIGl0IGhhcyBhcnJpdmVkIHN1 Y2Nlc3NmdWxseS4iLAotI2lmbmRlZiBOT0NTRVRTCi0gICAgIiAgL1NFUlZFUi1DSEFSQUNURVIt U0VUOm5hbWUiLAotICAgICIgICAgV2hlbiBkb3dubG9hZGluZyBpbiB0ZXh0IG1vZGUgYW5kIGNo YXJhY3Rlci1zZXQgY29udmVyc2lvbiBpcyBkZXNpcmVkIgotLCAgICIgICAgdGhpcyBzcGVjaWZp ZXMgdGhlIG9yaWdpbmFsIGZpbGUncyBjaGFyYWN0ZXIgc2V0IG9uIHRoZSBzZXJ2ZXIuIiwKLSNl bmRpZiAvKiBOT0NTRVRTICovCi0gICAgIiAgL1NFUlZFUi1SRU5BTUU6dGV4dCIsCi0gICAgIiAg ICBFYWNoIHNlcnZlciBzb3VyY2UgZmlsZSBpcyB0byBiZSByZW5hbWVkIG9uIHRoZSBzZXJ2ZXIg YXMgaW5kaWNhdGVkIiwKLSAgICAiICAgIGltbWVkaWF0ZWx5IGFmdGVyLCBidXQgb25seSBpZiwg aXQgaGFzIGFycml2ZWQgc3VjY2Vzc2Z1bGx5LiIsCi0gICAgIiAgL1NNQUxMRVItVEhBTjpudW1i ZXIiLAotICAgICIgICAgRG93bmxvYWQgb25seSB0aG9zZSBmaWxlcyBzbWFsbGVyIHRoYW4gdGhl IGdpdmVuIG51bWJlciBvZiBieXRlcy4iLAotICAgICIgIC9URVhUIiwgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIC9BU0NJSSAqLwotICAgICIgICAgRm9yY2UgdGV4dCBtb2RlLiAgU3lub255 bTogL0FTQ0lJLiIsCi0gICAgIiAgL1RFTkVYIiwKLSAgICAiICAgIEZvcmNlIFRFTkVYIChUT1BT LTIwKSBtb2RlIChzZWUgSEVMUCBTRVQgRlRQIFRZUEUpLiIsCi0jaWZuZGVmIE5PQ1NFVFMKLSAg ICAiICAvVFJBTlNQQVJFTlQiLAotICAgICIgICAgV2hlbiBkb3dubG9hZGluZyBpbiB0ZXh0IG1v ZGUsIGRvIG5vdCBjb252ZXJ0IGNocmFjdGVyLXNldHMuIiwKLSNlbmRpZiAvKiBOT0NTRVRTICov Ci0gICAgIiAgL1RPLVNDUkVFTiIsCi0gICAgIiAgICBUaGUgZG93bmxvYWRlZCBmaWxlIGlzIHRv IGJlIGRpc3BsYXllZCBvbiB0aGUgc2NyZWVuLiIsCi0jaWZkZWYgRE9VUERBVEUKLSAgICAiICAv VVBEQVRFIiwKLSAgICAiICAgIEVxdWl2YWxlbnQgdG8gL0NPTExJU0lPTjpVUERBVEUuICBEb3du bG9hZCBvbmx5IHRob3NlIGZpbGVzIHRoYXQgYXJlIiwKLSAgICAiICAgIG5ld2VyIHRoYW4gdGhh biB0aGVpciBsb2NhbCBjb3VudGVycGFydHMsIG9yIHRoYXQgZG8gbm90IGV4aXN0IG9uIiwKLSAg ICAiICAgIHRoZSBsb2NhbCBjb21wdXRlci4iLAotI2VuZGlmIC8qIERPVVBEQVRFICovCi0gICAg IiIKLX07Ci1zdGF0aWMgY2hhciAqIGZoc19obHBbXSA9IHsgICAgICAgICAgICAgLyogSEVMUCAq LwotICAgICJTeW50YXg6IEZUUCBIRUxQIFsgY29tbWFuZCBbIHN1YmNvbW1hbmQuLi4gXSBdIiwK LSAgICAiICBBc2tzIHRoZSBGVFAgc2VydmVyIGZvciBoZWxwIGFib3V0IHRoZSBnaXZlbiBjb21t YW5kLiAgRmlyc3QgdXNlIiwKLSAgICAiICBGVFAgSEVMUCBieSBpdHNlbGYgdG8gZ2V0IGEgbGlz dCBvZiBjb21tYW5kcywgdGhlbiB1c2UgSEVMUCBGVFAgeHh4IiwKLSAgICAiICB0byBnZXQgaGVs cCBmb3IgY29tbWFuZCBcInh4eFwiLiAgU3lub255bXM6IFJFTU9URSBIRUxQLCBSSEVMUC4iLAot ICAgICIiCi19Owotc3RhdGljIGNoYXIgKiBmaHNfaWRsW10gPSB7ICAgICAgICAgICAgIC8qIElE TEUgKi8KLSAgICAiU3ludGF4OiBGVFAgSURMRSBbIG51bWJlciBdIiwKLSAgICAiICBJZiBnaXZl biB3aXRob3V0IGEgbnVtYmVyLCB0aGlzIGFza3MgdGhlIEZUUCBzZXJ2ZXIgdG8gdGVsbCBpdHMi LAotICAgICIgIGN1cnJlbnQgaWRsZS10aW1lIGxpbWl0LiAgSWYgZ2l2ZW4gd2l0aCBhIG51bWJl ciwgaXQgYXNrcyB0aGUgc2VydmVyIiwKLSAgICAiICB0byBjaGFuZ2UgaXRzIGlkbGUtdGltZSBs aW1pdCB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMuIiwKLSAgICAiIgotfTsKLXN0YXRp YyBjaGFyICogZmhzX3VzcltdID0geyAgICAgICAgICAgICAvKiBVU0VSLCBMT0dJTiAqLwotICAg ICJTeW50YXg6IEZUUCBVU0VSIHVzZXJuYW1lIFsgcGFzc3dvcmQgWyBhY2NvdW50IF0gXSIsCi0g ICAgIiAgTG9nIGluIHRvIHRoZSBGVFAgc2VydmVyLiAgVG8gYmUgdXNlZCB3aGVuIGNvbm5lY3Rl ZCBidXQgbm90IHlldCIsCi0gICAgIiAgbG9nZ2VkIGluLCBlLmcuIHdoZW4gU0VUIEZUUCBBVVRP TE9HSU4gaXMgT0ZGIG9yIGF1dG9sb2dpbiBmYWlsZWQuIiwKLSAgICAiICBJZiB5b3Ugb21pdCB0 aGUgcGFzc3dvcmQsIGFuZCBvbmUgaXMgcmVxdWlyZWQgYnkgdGhlIHNlcnZlciwgeW91IGFyZSIs Ci0gICAgIiAgcHJvbXB0ZWQgZm9yIGl0LiAgSWYgeW91IG9taXQgdGhlIGFjY291bnQsIG5vIGFj Y291bnQgaXMgc2VudC4iLAotICAgICIgIFN5bm9ueW06IEZUUCBMT0dJTi4iLAotICAgICIiCi19 Owotc3RhdGljIGNoYXIgKiBmaHNfZ2V0W10gPSB7ICAgICAgICAgICAgIC8qIEdFVCAqLwotICAg ICJTeW50YXg6IFsgRlRQIF0gR0VUIFsgb3B0aW9ucyBdIGZpbGVuYW1lIFsgYXMtbmFtZSBdIiwK LSAgICAiICBEb3dubG9hZCBhIHNpbmdsZSBmaWxlLiAgQXNrcyB0aGUgRlRQIHNlcnZlciB0byBz ZW5kIHRoZSBnaXZlbiBmaWxlLiIsCi0gICAgIiAgVGhlIG9wdGlvbmFsIGFzLW5hbWUgaXMgdGhl IG5hbWUgdG8gc3RvcmUgaXQgdW5kZXIgd2hlbiBpdCBhcnJpdmVzOyIsCi0gICAgIiAgaWYgb21p dHRlZCwgdGhlIGZpbGUgaXMgc3RvcmVkIHdpdGggdGhlIG5hbWUgaXQgYXJyaXZlZCB3aXRoLCBh cyIsCi0gICAgIiAgbW9kaWZpZWQgYWNjb3JkaW5nIHRvIHRoZSBGVFAgRklMRU5BTUVTIHNldHRp bmcgb3IgL0ZJTEVOQU1FUzogc3dpdGNoIiwKLSAgICAiICB2YWx1ZS4gIEFzaWRlIGZyb20gdGhl IGZpbGUgbGlzdCBhbmQgYXMtbmFtZSwgc3ludGF4IGFuZCBvcHRpb25zIGFyZSIsCi0gICAgIiAg dGhlIHNhbWUgYXMgZm9yIEZUUCBNR0VULCB3aGljaCBpcyB1c2VkIGZvciBkb3dubG9hZGluZyBt dWx0aXBsZSBmaWxlcy4iCi0sICAgIiIKLX07Ci1zdGF0aWMgY2hhciAqIGZoc19ta2RbXSA9IHsg ICAgICAgICAgICAgLyogTUtESVIgKi8KLSAgICAiU3ludGF4OiBGVFAgTUtESVIgZGlyZWN0b3J5 IiwKLSAgICAiICBBc2tzIHRoZSBGVFAgc2VydmVyIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSB3aXRo IHRoZSBnaXZlbiBuYW1lLCIsCi0gICAgIiAgd2hpY2ggbXVzdCBiZSBpbiB0aGUgc3ludGF4IG9m IHRoZSBzZXJ2ZXIncyBmaWxlIHN5c3RlbS4gIFN5bm9ueW1zOiIsCi0gICAgIiAgUkVNT1RFIE1L RElSLCBSTUtESVIuIiwKLSAgICAiIgotfTsKLXN0YXRpYyBjaGFyICogZmhzX21vZFtdID0geyAg ICAgICAgICAgICAvKiBNT0RUSU1FICovCi0gICAgIlN5bnRheDogRlRQIE1PRFRJTUUgZmlsZW5h bWUiLAotICAgICIgIEFza3MgdGhlIEZUUCBzZXJ2ZXIgdG8gc2VuZCB0aGUgbW9kaWZpY2F0aW9u IHRpbWUgb2YgdGhlIGdpdmVuIGZpbGUsIiwKLSAgICAiICB0byBiZSBkaXNwbGF5ZWQgb24gdGhl IHNjcmVlbi4gIFRoZSBkYXRlLXRpbWUgZm9ybWF0IGlzIGFsbCBudW1lcmljOiIsCi0gICAgIiAg eXl5eW1tZGRoaG1tc3N4eHguLi4gKHdoZXJlIHh4eC4uLiBpcyAwIG9yIG1vcmUgZGlnaXRzIGlu ZGljYXRpbmciLAotICAgICIgIGZyYWN0aW9ucyBvZiBzZWNvbmRzKS4iLAotICAgICIiCi19Owot c3RhdGljIGNoYXIgKiBmaHNfbXB1W10gPSB7ICAgICAgICAgICAgIC8qIE1QVVQgKi8KLSAgICAi U3ludGF4OiBbIEZUUCBdIE1QVVQgWyBzd2l0Y2hlcyBdIGZpbGVzcGVjIFsgZmlsZXNwZWMgWyBm aWxlc3BlYyAuLi4gXSBdIiwKLSAgICAiICBVcGxvYWRzIGZpbGVzLiAgU2VuZHMgdGhlIGdpdmVu IGZpbGUgb3IgZmlsZXMgdG8gdGhlIEZUUCBzZXJ2ZXIuIiwKLSAgICAiICBBbHNvIHNlZSBGVFAg UFVULiAgT3B0aW9uYWwgc3dpdGNoZXMgYXJlOiIsCi0gICAgIiAiLAotICAgICIgIC9BRlRFUjpk YXRlLXRpbWUiLAotICAgICIgICAgVXBsb2FkcyBvbmx5IHRob3NlIGZpbGVzIG5ld2VyIHRoYW4g dGhlIGdpdmVuIGRhdGUtdGltZS4iLAotICAgICIgICAgSEVMUCBEQVRFIGZvciBpbmZvIGFib3V0 IGRhdGUtdGltZSBmb3JtYXRzLiAgU3lub255bTogL1NJTkNFLiIsCi0jaWZkZWYgUFVUQVJSQVkK LSAgICAiICAvQVJSQVk6YXJyYXktZGVzaWduYXRvciIsCi0gICAgIiAgICBUZWxscyBLZXJtaXQg dG8gdXBsb2FkIHRoZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gYXJyYXksIHJhdGhlciB0aGFuIiwK LSAgICAiICAgIGEgZmlsZS4iLAotI2VuZGlmIC8qIFBVVEFSUkFZICovCi0gICAgIiAgL0FTLU5B TUU6dGV4dCIsCi0gICAgIiAgICBOYW1lIHVuZGVyIHdoaWNoIHRvIHNlbmQgZmlsZXMuIiwKLSAg ICAiICAgIFBhdHRlcm4gcmVxdWlyZWQgZm9yIGZvciBtdWx0aXBsZSBmaWxlcy4iLAotICAgICIg IC9CRUZPUkU6ZGF0ZS10aW1lIiwKLSAgICAiICAgIFVwbG9hZCBvbmx5IHRob3NlIGZpbGVzIG9s ZGVyIHRoYW4gdGhlIGdpdmVuIGRhdGUtdGltZS4iLAotICAgICIgIC9CSU5BUlkiLAotICAgICIg ICAgRm9yY2UgYmluYXJ5IG1vZGUuICBTeW5vbnltOiAvSU1BR0UuIiwKLSNpZmRlZiBQVVRQSVBF Ci0gICAgIiAgL0NPTU1BTkQiLAotICAgICIgICAgU3BlY2lmaWVzIHRoYXQgdGhlIGZpbGVzcGVj IGlzIGEgY29tbWFuZCB3aG9zZSBzdGFuZGFyZCBvdXRwdXQgaXMiLAotICAgICIgICAgdG8gYmUg c2VudC4iLAotI2VuZGlmIC8qIFBVVFBJUEUgKi8KLQotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBE T1VQREFURQotICAgICIgIC9EQVRFUy1ESUZGRVIiLAotICAgICIgICAgVXBsb2FkIG9ubHkgdGhv c2UgZmlsZXMgd2hvc2UgbW9kaWZpY2F0aW9uIGRhdGUtdGltZXMgZGlmZmVyIGZyb20iLAotICAg ICIgICAgdGhvc2Ugb24gdGhlIHNlcnZlciwgb3IgdGhhdCBkb24ndCBleGlzdCBvbiB0aGUgc2Vy dmVyIGF0IGFsbC4iLAotI2VuZGlmIC8qIERPVVBEQVRFICovCi0jZW5kaWYgLyogQ09NTUVOVCAq LwotCi0gICAgIiAgL0RFTEVURSIsCi0gICAgIiAgICBTcGVjaWZpZXMgdGhhdCBlYWNoIHNvdXJj ZSBmaWxlIGlzIHRvIGJlIGRlbGV0ZWQgYWZ0ZXIsIGFuZCBvbmx5IGlmLCIsCi0gICAgIiAgICBp dCBpcyBzdWNjZXNzZnVsbHkgdXBsb2FkZWQuIiwKLSAgICAiICAvRE9URklMRVMiLAotICAgICIg ICAgSW5jbHVkZSBmaWxlcyB3aG9zZSBuYW1lcyBiZWdpbiB3aXRoIHBlcmlvZCAoLikuIiwKLSAg ICAiICAvRVJST1ItQUNUSU9OOntQUk9DRUVELFFVSVR9IiwKLSAgICAiICAgIFdoZW4gdXBsb2Fk aW5nIGEgZ3JvdXAgb2YgZmlsZXMsIHdoYXQgdG8gZG8gdXBvbiBmYWlsdXJlIHRvIiwKLSAgICAi ICAgIHRyYW5zZmVyIGEgZmlsZTogcXVpdCBvciBwcm9jZWVkIHRvIHRoZSBuZXh0IG9uZS4iLAot ICAgICIgIC9FWENFUFQ6cGF0dGVybiIsCi0gICAgIiAgICBFeGNlcHRpb24gbGlzdDogZG9uJ3Qg dXBsb2FkIGFueSBmaWxlcyB0aGF0IG1hdGNoIHRoaXMgcGF0dGVybi4iLAotICAgICIgICAgU2Vl IEhFTFAgV0lMRENBUkQgZm9yIHBhdHRlcm4gc3ludGF4LiIsCi0gICAgIiAgL0ZJTEVOQU1FUzp7 QVVUT01BVElDLENPTlZFUlRFRCxMSVRFUkFMfSIsCi0gICAgIiAgICBXaGV0aGVyIHRvIGNvbnZl cnQgb3V0Ym91bmQgZmlsZW5hbWVzIHRvIGNvbW1vbiBzeW50YXguIiwKLSNpZmRlZiBQSVBFU0VO RAotI2lmbmRlZiBOT1NQTAotICAgICIgIC9GSUxURVI6Y29tbWFuZCIsCi0gICAgIiAgICBQYXNz IG91dGJvdW5kIGZpbGVzIHRocm91Z2ggdGhlIGdpdmVuIGNvbW1hbmQuIiwKLSNlbmRpZiAvKiBO T1NQTCAqLwotI2VuZGlmIC8qIFBJUEVTRU5EICovCi0jaWZkZWYgQ0tTWU1MSU5LCi0gICAgIiAg L0ZPTExPV0lOS1MiLAotICAgICIgICAgU2VuZCBmaWxlcyB0aGF0IGFyZSBwb2ludGVkIHRvIGJ5 IHN5bWJvbGljIGxpbmtzLiIsCi0gICAgIiAgL05PRk9MTE9XSU5LUyIsCi0gICAgIiAgICBTa2lw IG92ZXIgc3ltYm9saWMgbGlua3MgKGRlZmF1bHQpLiIsCi0jZW5kaWYgLyogQ0tTWU1MSU5LICov Ci0gICAgIiAgL0xBUkdFUi1USEFOOm51bWJlciIsCi0gICAgIiAgICBPbmx5IHVwbG9hZCBmaWxl cyB0aGF0IGFyZSBsYXJnZXIgdGhhbiB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGJ5dGVzLiIsCi0gICAg IiAgL0xJU1RGSUxFOmZpbGVuYW1lIiwKLSAgICAiICAgIE9idGFpbiB0aGUgbGlzdCBvZiBmaWxl cyB0byB1cGxvYWQgZnJvbSB0aGUgZ2l2ZW4gZmlsZS4iLAotI2lmbmRlZiBOT0NTRVRTCi0gICAg IiAgL0xPQ0FMLUNIQVJBQ1RFUi1TRVQ6bmFtZSIsCi0gICAgIiAgICBXaGVuIHVwbG9hZGluZyBp biB0ZXh0IG1vZGUgYW5kIGNoYXJhY3Rlci1zZXQgY29udmVyc2lvbiBpcyIsCi0gICAgIiAgICBk ZXNpcmVkLCB0aGlzIHNwZWNpZmllcyB0aGUgc291cmNlLWZpbGUgY2hhcmFjdGVyIHNldC4iLAot I2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSNpZmRlZiBDS19UTVBESVIKLSAgICAiICAvTU9WRS1UTzpk aXJlY3RvcnkiLAotICAgICIgICAgRWFjaCBzb3VyY2UgZmlsZSB0aGF0IGlzIHVwbG9hZGVkIGlz IHRvIGJlIG1vdmVkIHRvIHRoZSBnaXZlbiBsb2NhbCIsCi0gICAgIiAgICBkaXJlY3Rvcnkgd2hl biwgYW5kIG9ubHkgaWYsIHRoZSB0cmFuc2ZlciBpcyBzdWNjZXNzZnVsLiIsCi0jZW5kaWYgLyog Q0tfVE1QRElSICovCi0gICAgIiAgL05PQkFDS1VQRklMRVMiLAotICAgICIgICAgRG9uJ3QgdXBs b2FkIGFueSBmaWxlcyB3aG9zZSBuYW1lcyBlbmQgd2l0aCAufjxudW1iZXI+fi4iLAotI2lmZGVm IFVOSVhPUk9TSwotICAgICIgIC9OT0RPVEZJTEVTIiwKLSAgICAiICAgIERvbid0IHVwbG9hZCBh bnkgZmlsZXMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCBwZXJpb2QgKC4pLiIsCi0jZW5kaWYgLyog VU5JWE9ST1NLICovCi0gICAgIiAgL05PVC1BRlRFUjpkYXRlLXRpbWUiLAotICAgICIgICAgVXBs b2FkIG9ubHkgZmlsZXMgdGhhdCBhcmUgbm90IG5ld2VyIHRoYW4gdGhlIGdpdmVuIGRhdGUtdGlt ZSIsCi0gICAgIiAgL05PVC1CRUZPUkU6ZGF0ZS10aW1lIiwKLSAgICAiICAgIFVwbG9hZCBvbmx5 IGZpbGVzIHRoYXQgYXJlIG5vdCBvbGRlciB0aGFuIHRoZSBnaXZlbiBkYXRlLXRpbWUiLAotI2lm ZGVmIFVOSVgKLSAgICAiICAvUEVSTUlTU0lPTlMiLAotICAgICIgICAgQXNrIHRoZSBzZXJ2ZXIg dG8gc2V0IHRoZSBwZXJtaXNzaW9ucyBvZiBlYWNoIGZpbGUgaXQgcmVjZWl2ZXMiLAotICAgICIg ICAgYWNjb3JkaW5nIHRvIHRoZSBzb3VyY2UgZmlsZSdzIHBlcm1pc3Npb25zLiIsCi0jZW5kaWYg LyogVU5JWCAqLwotICAgICIgIC9RVUlFVCIsCi0gICAgIiAgICBTdXBwcmVzcyB0aGUgZmlsZS10 cmFuc2ZlciBkaXNwbGF5LiIsCi0jaWZkZWYgRlRQX1JFU1RBUlQKLSAgICAiICAvUkVDT1ZFUiIs Ci0gICAgIiAgICBSZXN1bWUgYW4gdXBsb2FkIHRoYXQgd2FzIHByZXZpb3VzbHkgaW50ZXJydXB0 ZWQgZnJvbSB0aGUgcG9pbnQgb2YiLAotICAgICIgICAgZmFpbHVyZS4gIFN5bm9ueW06IC9SRVNU QVJULiIsCi0jZW5kaWYgLyogRlRQX1JFU1RBUlQgKi8KLSNpZmRlZiBSRUNVUlNJVkUKLSAgICAi ICAvUkVDVVJTSVZFIiwKLSAgICAiICAgIFNlbmQgZmlsZXMgZnJvbSB0aGUgZ2l2ZW4gZGlyZWN0 b3J5IGFuZCBhbGwgdGhlIGRpcmVjdG9yaWVzIGJlbmVhdGgiLAotICAgICIgICAgaXQuICBTeW5v bnltOiAvU1VCRElSRUNUT1JJRVMuIiwKLSNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KLSAgICAiICAv UkVOQU1FLVRPOnRleHQiLAotICAgICIgICAgRWFjaCBzb3VyY2UgZmlsZSB0aGF0IGlzIHVwbG9h ZGVkIGlzIHRvIGJlIHJlbmFtZWQgb24gdGhlIGxvY2FsIiwKLSAgICAiICAgIGxvY2FsIGNvbXB1 dGVyIGFzIGluZGljYXRlZCB3aGVuIGFuZCBvbmx5IGlmLCB0aGUgdHJhbnNmZXIgY29tcGxldGVz IiwKLSAgICAiICAgIHN1Y2Nlc3NmdWxseS4iLAotI2lmbmRlZiBOT0NTRVRTCi0gICAgIiAgL1NF UlZFUi1DSEFSQUNURVItU0VUOm5hbWUiLAotICAgICIgICAgV2hlbiB1cGxvYWRpbmcgaW4gdGV4 dCBtb2RlIGFuZCBjaGFyYWN0ZXItc2V0IGNvbnZlcnNpb24gaXMgZGVzaXJlZCwiLAotICAgICIg ICAgdGhpcyBzcGVjaWZpZXMgdGhlIGNoYXJhY3RlciBzZXQgdG8gd2hpY2ggdGhlIGZpbGUgc2hv dWxkIGJlIiwKLSAgICAiICAgIGNvbnZlcnRlZCBmb3Igc3RvcmFnZSBvbiB0aGUgc2VydmVyLiIs Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotICAgICIgIC9TRVJWRVItUkVOQU1FOnRleHQiLAotICAg ICIgICAgRWFjaCBmaWxlIHRoYXQgaXMgdXBsb2FkZWQgaXMgdG8gYmUgcmVuYW1lZCBhcyBpbmRp Y2F0ZWQgb24gdGhlIiwKLSAgICAiICAgIHNlcnZlciBhZnRlciwgYW5kIG9ubHkgaWYsIGlmIGFy cml2ZXMgc3VjY2Vzc2Z1bGx5LiIsCi0gICAgIiAgL1NJTVVMQVRFIiwKLSAgICAiICAgIFNob3cg d2hpY2ggZmlsZXMgd291bGQgYmUgc2VudCB3aXRob3V0IGFjdHVhbGx5IHNlbmRpbmcgdGhlbS4i LAotICAgICIgIC9TTUFMTEVSLVRIQU46bnVtYmVyIiwKLSAgICAiICAgIFVwbG9hZCBvbmx5IHRo b3NlIGZpbGVzIHNtYWxsZXIgdGhhbiB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGJ5dGVzLiIsCi0gICAg IiAgL1RFWFQiLAotICAgICIgICAgRm9yY2UgdGV4dCBtb2RlLiAgU3lub255bTogL0FTQ0lJLiIs Ci0gICAgIiAgL1RFTkVYIiwKLSAgICAiICAgIEZvcmNlIFRFTkVYIChUT1BTLTIwKSBtb2RlIChz ZWUgSEVMUCBTRVQgRlRQIFRZUEUpLiIsCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICAiICAvVFJBTlNQ QVJFTlQiLAotICAgICIgICAgV2hlbiB1cGxvYWRpbmcgaW4gdGV4dCBtb2RlLCBkbyBub3QgY29u dmVydCBjaHJhY3Rlci1zZXRzLiIsCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotICAgICIgIC9UWVBF OntURVhULEJJTkFSWX0iLAotICAgICIgICAgVXBsb2FkIG9ubHkgZmlsZXMgb2YgdGhlIGdpdmVu IHR5cGUuIiwKLSNpZmRlZiBET1VQREFURQotICAgICIgIC9VUERBVEUiLAotICAgICIgICAgSWYg YSBmaWxlIG9mIHRoZSBzYW1lIG5hbWUgZXhpc3RzIG9uIHRoZSBzZXJ2ZXIsIHVwbG9hZCBvbmx5 IGlmIiwKLSAgICAiICAgIHRoZSBsb2NhbCBmaWxlIGlzIG5ld2VyLiIsCi0jZW5kaWYgLyogRE9V UERBVEUgKi8KLSAgICAiICAvVU5JUVVFLVNFUlZFUi1OQU1FUyIsCi0gICAgIiAgICBBc2sgdGhl IHNlcnZlciB0byBjb21wdXRlIG5ldyBuYW1lcyBmb3IgYW55IGluY29taW5nIGZpbGUgdGhhdCBo YXMiLAotICAgICIgICAgdGhlIHNhbWUgbmFtZSBhcyBhbiBleGlzdGluZyBmaWxlLiIsCi0gICAg IiIKLX07Ci1zdGF0aWMgY2hhciAqIGZoc19vcG5bXSA9IHsgICAgICAgICAgICAgLyogT1BFTiAq LwotI2lmZGVmIENLX1NTTAotICAgICJTeW50YXg6IEZUUCBbIE9QRU4gXSBbIHsgL1NTTCwgL1RM UyB9IF0gaG9zdG5hbWUgWyBwb3J0IF0gWyBzd2l0Y2hlcyBdIiwKLSAgICAiICBPcGVucyBhIGNv bm5lY3Rpb24gdG8gdGhlIEZUUCBzZXJ2ZXIgb24gdGhlIGdpdmVuIGhvc3QuICBUaGUgZGVmYXVs dCIsCi0gICAgIiAgVENQIHBvcnQgaXMgMjEgKDk5MCBpZiBTU0wvVExTIGlzIHVzZWQpLCBidXQg YSBkaWZmZXJlbnQgcG9ydCBudW1iZXIiLAotICAgICIgIGNhbiBiZSBzdXBwbGllZCBpZiBuZWNl c3NhcnkuICBPcHRpb25hbCBzd2l0Y2hlcyBhcmU6IiwKLSNlbHNlIC8qIENLX1NTTCAqLwotICAg ICJTeW50YXg6IEZUUCBbIE9QRU4gXSBob3N0bmFtZSBbIHBvcnQgXSBbIHN3aXRjaGVzIF0iLAot ICAgICIgIE9wZW5zIGEgY29ubmVjdGlvbiB0byB0aGUgRlRQIHNlcnZlciBvbiB0aGUgZ2l2ZW4g aG9zdC4gIFRoZSBkZWZhdWx0IiwKLSAgICAiICBUQ1AgcG9ydCBpcyAyMSwgYnV0IGEgZGlmZmVy ZW50IHBvcnQgbnVtYmVyIGNhbiBiZSBzdXBwbGllZCBpZiIsCi0gICAgIiAgbmVjZXNzYXJ5LiAg T3B0aW9uYWwgc3dpdGNoZXMgYXJlOiIsCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgIiAiLAot ICAgICIgIC9BTk9OWU1PVVMiLAotICAgICIgICAgTG9ncyB5b3UgaW4gYW5vbnltb3VzbHkuIiwK LSAgICAiICAvVVNFUjp0ZXh0IiwKLSAgICAiICAgIFN1cHBsaWVzIHRoZSBnaXZlbiB0ZXh0IGFz IHlvdXIgdXNlcm5hbWUuIiwKLSAgICAiICAvUEFTU1dPUkQ6dGV4dCIsCi0gICAgIiAgICBTdXBw bGllcyB0aGUgZ2l2ZW4gdGV4dCBhcyB5b3VyIHBhc3N3b3JkLiAgSWYgeW91IGluY2x1ZGUgYSB1 c2VybmFtZSIsCi0gICAgIiAgICBidXQgb21pdCB0aGlzIHN3aXRjaCBhbmQgdGhlIHNlcnZlciBy ZXF1aXJlcyBhIHBhc3N3b3JkLCB5b3UgYXJlIiwKLSAgICAiICAgIHByb21wdGVkIGZvciBpdC4i LAotICAgICIgIC9BQ0NPVU5UOnRleHQiLAotICAgICIgICAgU3VwcGxpZXMgdGhlIGdpdmVuIHRl eHQgYXMgeW91ciBhY2NvdW50LCBpZiByZXF1aXJlZCBieSB0aGUgc2VydmVyLiIsCi0gICAgIiAg L0FDVElWRSIsCi0gICAgIiAgICBGb3JjZXMgYW4gYWN0aXZlIChyYXRoZXIgdGhhbiBwYXNzaXZl KSBjb25uZWN0aW9uLiIsCi0gICAgIiAgL1BBU1NJVkUiLAotICAgICIgICAgRm9yY2VzIGEgcGFz c2l2ZSAocmF0aGVyIHRoYW4gYWN0aXZlKSBjb25uZWN0aW9uLiIsCi0gICAgIiAgL05PSU5JVCIs Ci0gICAgIiAgICBJbmhpYml0cyBzZW5kaW5nIGluaXRpYWwgUkVTVCwgU1RSVSwgYW5kIE1PREUg Y29tbWFuZHMsIHdoaWNoIGFyZSIsCi0gICAgIiAgICB3ZWxsLWtub3duIHN0YW5kYXJkIGNvbW1h bmRzLCBidXQgdG8gd2hpY2ggc29tZSBzZXJ2ZXJzIHJlYWN0IGJhZGx5LiIsCi0gICAgIiAgL05P TE9HSU4iLAotICAgICIgICAgSW5oaWJpdHMgYXV0b2xvZ2luIGZvciB0aGlzIGNvbm5lY3Rpb24g b25seS4iLAotICAgICIiCi19Owotc3RhdGljIGNoYXIgKiBmaHNfb3B0W10gPSB7ICAgICAgICAg ICAgIC8qIE9QVFMsIE9QVElPTlMgKi8KLSAgICAiU3ludGF4OiBGVFAgT1BUSU9OUyIsCi0gICAg IiAgQXNrcyB0aGUgRlRQIHNlcnZlciB0byBsaXN0IGl0cyBjdXJyZW50IG9wdGlvbnMuICBBZHZh bmNlZCwgbmV3LCIsCi0gICAgIiAgbm90IHN1cHBvcnRlZCBieSBtb3N0IEZUUCBzZXJ2ZXJzLiIs Ci0gICAgIiIKLX07Ci1zdGF0aWMgY2hhciAqIGZoc19wdXRbXSA9IHsgICAgICAgICAgICAgLyog UFVULCBTRU5EICovCi0gICAgIlN5bnRheDogWyBGVFAgXSBQVVQgWyBzd2l0Y2hlcyBdIGZpbGVz cGVjIFsgYXMtbmFtZSBdIiwKLSAgICAiICBMaWtlIEZUUCBNUFVULCBidXQgb25seSBvbmUgZmls ZXNwZWMgaXMgYWxsb3dlZCwgYW5kIGlmIGl0IGlzIGZvbGxvd2VkIiwKLSAgICAiICBieSBhbiBh ZGRpdGlvbmFsIGZpZWxkLCB0aGlzIGlzIGludGVycHJldGVkIGFzIHRoZSBuYW1lIHVuZGVyIHdo aWNoIiwKLSAgICAiICB0byBzZW5kIHRoZSBmaWxlIG9yIGZpbGVzLiAgU2VlIEhFTFAgRlRQIE1Q VVQuIiwKLSAgICAiIgotfTsKLXN0YXRpYyBjaGFyICogZmhzX3JlcHV0W10gPSB7CQkvKiBSRVBV VCwgUkVTRU5EICovCi0gICAgIlN5bnRheDogWyBGVFAgXSBSRVBVVCBbIHN3aXRjaGVzIF0gZmls ZXNwZWMgWyBhcy1uYW1lIF0iLAotICAgICIgIFN5bm9ueW0gZm9yIEZUUCBQVVQgL1JFQ09WRVIu ICBSZWNvdmVycyBhbiBpbnRlcnJ1cHRlZCBiaW5hcnktbW9kZSIsCi0gICAgIiAgdXBsb2FkIGZy b20gdGhlIHBvaW50IG9mIGZhaWx1cmUgaWYgdGhlIEZUUCBzZXJ2ZXIgc3VwcG9ydHMgcmVjb3Zl cnkuIiwKLSAgICAiICBTeW5vbnltOiBbIEZUUCBdIFJFU0VORC4gIEZvciBkZXRhaWxzIHNlZSBI RUxQIEZUUCBNUFVULiIsCi0gICAgIiIKLX07Ci1zdGF0aWMgY2hhciAqIGZoc19wd2RbXSA9IHsg ICAgICAgICAgICAgLyogUFdEICovCi0gICAgIlN5bnRheDogRlRQIFBXRCIsCi0gICAgIiAgQXNr cyB0aGUgRlRQIHNlcnZlciB0byByZXZlYWwgaXRzIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnku IiwKLSAgICAiICBTeW5vbnltczogUkVNT1RFIFBXRCwgUlBXRC4iLAotICAgICIiCi19Owotc3Rh dGljIGNoYXIgKiBmaHNfcXVvW10gPSB7ICAgICAgICAgICAgIC8qIFFVT1RFICovCi0gICAgIlN5 bnRheDogRlRQIFFVT1RFIHRleHQiLAotICAgICIgIFNlbmRzIGFuIEZUUCBwcm90b2NvbCBjb21t YW5kIHRvIHRoZSBGVFAgc2VydmVyLiAgVXNlIHRoaXMgY29tbWFuZCIsCi0gICAgIiAgZm9yIHNl bmRpbmcgY29tbWFuZHMgdGhhdCBLZXJtaXQgbWlnaHQgbm90IHN1cHBvcnQuIiwKLSAgICAiIgot fTsKLXN0YXRpYyBjaGFyICogZmhzX3JnZVtdID0geyAgICAgICAgICAgICAvKiBSRUdFVCAqLwot ICAgICJTeW50YXg6IEZUUCBSRUdFVCIsCi0gICAgIiAgU3lub255bSBmb3IgRlRQIEdFVCAvUkVD T1ZFUi4iLAotICAgICIiCi19Owotc3RhdGljIGNoYXIgKiBmaHNfcmVuW10gPSB7ICAgICAgICAg ICAgIC8qIFJFTkFNRSAqLwotICAgICJTeW50YXg6IEZUUCBSRU5BTUUgbmFtZTEgbmFtZTEiLAot ICAgICIgIEFza3MgdGhlIEZUUCBzZXJ2ZXIgdG8gY2hhbmdlIHRoZSBuYW1lIG9mIHRoZSBmaWxl IHdob3NlIG5hbWUgaXMgbmFtZTEiLAotICAgICIgIGFuZCB3aGljaCByZXNpZGVzIGluIHRoZSBG VFAgc2VydmVyJ3MgZmlsZSBzeXN0ZW0sIHRvIG5hbWUyLiAgV29ya3MiLAotICAgICIgIG9ubHkg Zm9yIHNpbmdsZSBmaWxlczsgd2lsZGNhcmRzIGFyZSBub3QgYWNjZXB0ZWQuIiwKLSAgICAiIgot fTsKLXN0YXRpYyBjaGFyICogZmhzX3Jlc1tdID0geyAgICAgICAgICAgICAvKiBSRVNFVCAqLwot ICAgICJTeW50YXg6IEZUUCBSRVNFVCIsCi0gICAgIiAgQXNrcyB0aGUgc2VydmVyIHRvIGxvZyBv dXQgeW91ciBzZXNzaW9uLCB0ZXJtaW5hdGluZyB5b3VyIGFjY2VzcyIsCi0gICAgIiAgcmlnaHRz LCB3aXRob3V0IGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24uIiwKLSAgICAiIgotfTsKLXN0YXRpYyBj aGFyICogZmhzX3JtZFtdID0geyAgICAgICAgICAgICAvKiBSTURJUiAqLwotICAgICJTeW50YXg6 IEZUUCBSTURJUiBkaXJlY3RvcnkiLAotICAgICIgIEFza3MgdGhlIEZUUCBzZXJ2ZXIgdG8gcmVt b3ZlIHRoZSBkaXJlY3Rvcnkgd2hvc2UgbmFtZSBpcyBnaXZlbi4iLAotICAgICIgIFRoaXMgdXN1 YWxseSByZXF1aXJlcyB0aGUgZGlyZWN0b3J5IHRvIGJlIGVtcHR5LiAgU3lub255bXM6IFJFTU9U RSIsCi0gICAgIiAgUk1ESVIsIFJSTURJUi4iLAotICAgICIiCi19Owotc3RhdGljIGNoYXIgKiBm aHNfc2l0W10gPSB7ICAgICAgICAgICAgIC8qIFNJVEUgKi8KLSAgICAiU3ludGF4OiBGVFAgU0lU RSB0ZXh0IiwKLSAgICAiICBTZW5kcyBhIHNpdGUtc3BlY2lmaWMgY29tbWFuZCB0byB0aGUgRlRQ IHNlcnZlci4iLAotICAgICIiCi19Owotc3RhdGljIGNoYXIgKiBmaHNfc2l6W10gPSB7ICAgICAg ICAgICAgIC8qIFNJWkUgKi8KLSAgICAiU3ludGF4OiBGVFAgU0laRSBmaWxlbmFtZSIsCi0gICAg IiAgQXNrcyB0aGUgRlRQIHNlcnZlciB0byBzZW5kIGEgbnVtZXJpYyBzdHJpbmcgcmVwcmVzZW50 aW5nIHRoZSBzaXplIiwKLSAgICAiICBvZiB0aGUgZ2l2ZW4gZmlsZS4iLAotICAgICIiCi19Owot c3RhdGljIGNoYXIgKiBmaHNfc3RhW10gPSB7ICAgICAgICAgICAgIC8qIFNUQVRVUyAqLwotICAg ICJTeW50YXg6IEZUUCBTVEFUVVMgWyBmaWxlbmFtZSBdIiwKLSAgICAiICBBc2tzIHRoZSBGVFAg c2VydmVyIHRvIHJlcG9ydCBpdHMgc3RhdHVzLiAgSWYgYSBmaWxlbmFtZSBpcyBnaXZlbiwiLAot ICAgICIgIHRoZSBGVFAgc2VydmVyIHNob3VsZCByZXBvcnQgZGV0YWlscyBhYm91dCB0aGUgZmls ZS4iLAotICAgICIiCi19Owotc3RhdGljIGNoYXIgKiBmaHNfc3lzW10gPSB7ICAgICAgICAgICAg IC8qIFNZU1RFTSAqLwotICAgICJTeW50YXg6IEZUUCBTWVNURU0iLAotICAgICIgIEFza3MgdGhl IEZUUCBzZXJ2ZXIgdG8gcmVwb3J0IGl0cyBvcGVyYXRpbmcgc3lzdGVtIHR5cGUuIiwKLSAgICAi IgotfTsKLXN0YXRpYyBjaGFyICogZmhzX3R5cFtdID0geyAgICAgICAgICAgICAvKiBUWVBFICov Ci0gICAgIlN5bnRheDogRlRQIFRZUEUgeyBURVhULCBCSU5BUlksIFRFTkVYIH0iLAotICAgICIg IFB1dHMgdGhlIGNsaWVudCBhbmQgc2VydmVyIGluIHRoZSBpbmRpY2F0ZWQgdHJhbnNmZXIgbW9k ZS4iLAotICAgICIgIEFTQ0lJIGlzIGEgc3lub255bSBmb3IgVEVYVC4gIFRFTkVYIGlzIHVzZWQg b25seSBmb3IgdXBsb2FkaW5nIDgtYml0IiwKLSAgICAiICBiaW5hcnkgZmlsZXMgdG8gYSAzNi1i aXQgcGxhdGZvcm1zIHN1Y2ggYXMgVEVORVggb3IgVE9QUy0yMCBhbmQvb3IiLAotICAgICIgIGRv d25sb2FkaW5nIGZpbGVzIGZyb20gVEVORVggb3IgVE9QUy0yMCB0aGF0IGhhdmUgYmVlbiB1cGxv YWRlZCBpbiIsCi0gICAgIiAgVEVORVggbW9kZS4iLAotICAgICIiCi19Owotc3RhdGljIGNoYXIg KiBmaHNfdW1hW10gPSB7ICAgICAgICAgICAgIC8qIFVNQVNLICovCi0gICAgIlN5bnRheDogRlRQ IFVNQVNLIG51bWJlciIsCi0gICAgIiAgQXNrcyB0aGUgRlRQIHNlcnZlciB0byBzZXQgaXRzIGZp bGUgY3JlYXRpb24gbW9kZSBtYXNrLiAgQXBwbGllcyIsCi0gICAgIiAgb25seSAob3IgbWFpbmx5 KSB0byBVTklYLWJhc2VkIEZUUCBzZXJ2ZXJzLiIsCi0gICAgIiIKLX07Ci1zdGF0aWMgY2hhciAq IGZoc19jaGtbXSA9IHsgICAgICAgICAgICAgLyogQ0hFQ0sgKi8KLSAgICAiU3ludGF4OiBGVFAg Q0hFQ0sgcmVtb3RlLWZpbGVzcGVjIiwKLSAgICAiICBBc2tzIHRoZSBGVFAgc2VydmVyIGlmIHRo ZSBnaXZlbiBmaWxlIG9yIGZpbGVzIGV4aXN0LiAgSWYgdGhlIiwKLSAgICAiICByZW1vdGUtZmls ZXNwZWMgY29udGFpbnMgd2lsZGNhcmRzLCB0aGlzIGNvbW1hbmQgZmFpbHMgaWYgbm8gc2VydmVy IiwKLSAgICAiICBmaWxlcyBtYXRjaCwgYW5kIHN1Y2NlZWRzIGlmIGF0IGxlYXN0IG9uZSBmaWxl IG1hdGNoZXMuICBJZiB0aGUiLAotICAgICIgIHJlbW90ZS1maWxlc3BlYyBkb2VzIG5vdCBjb250 YWluIHdpbGRjYXJkcywgdGhpcyBjb21tYW5kIHN1Y2NlZWRzIGlmIiwKLSAgICAiICB0aGUgZ2l2 ZW4gZmlsZSBleGlzdHMgYW5kIGZhaWxzIGlmIGl0IGRvZXMgbm90LiIsCi0gICAgIiIKLX07Ci1z dGF0aWMgY2hhciAqIGZoc19lbmFbXSA9IHsJCS8qIEVOQUJMRSAqLwotICAgICJTeW50YXg6IEZU UCBFTkFCTEUgeyBBVVRILCBGRUFULCBNRFRNLCBNTFNULCBTSVpFIH0iLAotICAgICIgIEVuYWJs ZXMgdGhlIHVzZSBvZiB0aGUgZ2l2ZW4gRlRQIHByb3RvY29sIGNvbW1hbmQgaW4gY2FzZSBpdCBo YXMgYmVlbiIsCi0gICAgIiAgZGlzYWJsZWQgKGJ1dCB0aGlzIGlzIG5vIGd1YXJhbnRlZSB0aGF0 IHRoZSBGVFAgc2VydmVyIHVuZGVyc3RhbmRzIGl0KS4iCi0sCi0gICAgIiAgVXNlIFNIT1cgRlRQ IHRvIHNlZSB3aGljaCBvZiB0aGVzZSBjb21tYW5kcyBpcyBlbmFibGVkIGFuZCBkaXNhYmxlZC4i LAotICAgICIgIEFsc28gc2VlIEZUUCBESVNBQkxFLiIsCi0gICAgIiIKLX07Ci1zdGF0aWMgY2hh ciAqIGZoc19kaXNbXSA9IHsJCS8qIERJU0FCTEUgKi8KLSAgICAiU3ludGF4OiBGVFAgRElTQUJM RSB7IEFVVEgsIEZFQVQsIE1EVE0sIE1MU1QsIFNJWkUgfSIsCi0gICAgIiAgRGlzYWJsZXMgdGhl IHVzZSBvZiB0aGUgZ2l2ZW4gRlRQIHByb3RvY29sIGNvbW1hbmQuIiwKLSAgICAiICBBbHNvIHNl ZSBGVFAgRU5BQkxFLiIsCi0gICAgIiIKLX07Ci0KLSNlbmRpZiAvKiBOT0hFTFAgKi8KLQotaW50 Ci1kb2Z0cGhscCgpIHsKLSAgICBpbnQgY3g7Ci0gICAgaWYgKChjeCA9IGNta2V5KGZ0cGNtZHRh YixuZnRwY21kLCIiLCIiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgaWYgKGN4ICE9IC0zKQotICAg ICAgICByZXR1cm4oY3gpOwotICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgIHJldHVy bih4KTsKLQotI2lmZGVmIE5PSEVMUAotICAgIHByaW50ZigiU29ycnksIG5vIGhlbHAgYXZhaWxh YmxlXG4iKTsKLSNlbHNlCi0gICAgc3dpdGNoIChjeCkgewotICAgICAgY2FzZSAtMzoKLSAgICAg ICAgcmV0dXJuKGhtc2dhKGZoc19mdHApKTsKLSAgICAgIGNhc2UgRlRQX0FDQzogICAgICAgICAg ICAgICAgICAgICAvKiBBQ0NPVU5UICovCi0gICAgICAgIHJldHVybihobXNnYShmaHNfYWNjKSk7 Ci0gICAgICBjYXNlIEZUUF9BUFA6ICAgICAgICAgICAgICAgICAgICAgLyogQVBQRU5EICovCi0g ICAgICAgIHJldHVybihobXNnYShmaHNfYXBwKSk7Ci0gICAgICBjYXNlIEZUUF9DTFM6ICAgICAg ICAgICAgICAgICAgICAgLyogQllFLCBDTE9TRSAqLwotICAgICAgICByZXR1cm4oaG1zZ2EoZmhz X2NscykpOwotICAgICAgY2FzZSBGVFBfQ1dEOiAgICAgICAgICAgICAgICAgICAgIC8qIENELCBD V0QgKi8KLSAgICAgICAgcmV0dXJuKGhtc2dhKGZoc19jd2QpKTsKLSAgICAgIGNhc2UgRlRQX0dV UDogICAgICAgICAgICAgICAgICAgICAvKiBDRFVQLCBVUCAqLwotICAgICAgICByZXR1cm4oaG1z Z2EoZmhzX2d1cCkpOwotICAgICAgY2FzZSBGVFBfQ0hNOiAgICAgICAgICAgICAgICAgICAgIC8q IENITU9EICovCi0gICAgICAgIHJldHVybihobXNnYShmaHNfY2htKSk7Ci0gICAgICBjYXNlIEZU UF9NREU6ICAgICAgICAgICAgICAgICAgICAgLyogREVMRVRFLCBNREVMRVRFICovCi0gICAgICAg IHJldHVybihobXNnYShmaHNfbWRlKSk7Ci0gICAgICBjYXNlIEZUUF9ESVI6ICAgICAgICAgICAg ICAgICAgICAgLyogRElSRUNUT1JZICovCi0gICAgICAgIHJldHVybihobXNnYShmaHNfZGlyKSk7 Ci0gICAgICBjYXNlIEZUUF9WREk6ICAgICAgICAgICAgICAgICAgICAgLyogVkRJUkVDVE9SWSAq LwotICAgICAgICByZXR1cm4oaG1zZ2EoZmhzX3ZkaSkpOwotICAgICAgY2FzZSBGVFBfRkVBOiAg ICAgICAgICAgICAgICAgICAgIC8qIEZFQVRVUkVTICovCi0gICAgICAgIHJldHVybihobXNnYShm aHNfZmVhKSk7Ci0gICAgICBjYXNlIEZUUF9HRVQ6ICAgICAgICAgICAgICAgICAgICAgLyogR0VU ICovCi0gICAgICAgIHJldHVybihobXNnYShmaHNfZ2V0KSk7Ci0gICAgICBjYXNlIEZUUF9ITFA6 ICAgICAgICAgICAgICAgICAgICAgLyogSEVMUCAqLwotICAgICAgICByZXR1cm4oaG1zZ2EoZmhz X2hscCkpOwotICAgICAgY2FzZSBGVFBfSURMOiAgICAgICAgICAgICAgICAgICAgIC8qIElETEUg Ki8KLSAgICAgICAgcmV0dXJuKGhtc2dhKGZoc19pZGwpKTsKLSAgICAgIGNhc2UgRlRQX1VTUjog ICAgICAgICAgICAgICAgICAgICAvKiBVU0VSLCBMT0dJTiAqLwotICAgICAgICByZXR1cm4oaG1z Z2EoZmhzX3VzcikpOwotICAgICAgY2FzZSBGVFBfTUdFOiAgICAgICAgICAgICAgICAgICAgIC8q IE1HRVQgKi8KLSAgICAgICAgcmV0dXJuKGhtc2dhKGZoc19tZ2UpKTsKLSAgICAgIGNhc2UgRlRQ X01LRDogICAgICAgICAgICAgICAgICAgICAvKiBNS0RJUiAqLwotICAgICAgICByZXR1cm4oaG1z Z2EoZmhzX21rZCkpOwotICAgICAgY2FzZSBGVFBfTU9EOiAgICAgICAgICAgICAgICAgICAgIC8q IE1PRFRJTUUgKi8KLSAgICAgICAgcmV0dXJuKGhtc2dhKGZoc19tb2QpKTsKLSAgICAgIGNhc2Ug RlRQX01QVTogICAgICAgICAgICAgICAgICAgICAvKiBNUFVUICovCi0gICAgICAgIHJldHVybiho bXNnYShmaHNfbXB1KSk7Ci0gICAgICBjYXNlIEZUUF9PUE46ICAgICAgICAgICAgICAgICAgICAg LyogT1BFTiAqLwotICAgICAgICByZXR1cm4oaG1zZ2EoZmhzX29wbikpOwotICAgICAgY2FzZSBG VFBfT1BUOiAgICAgICAgICAgICAgICAgICAgIC8qIE9QVFMsIE9QVElPTlMgKi8KLSAgICAgICAg cmV0dXJuKGhtc2dhKGZoc19vcHQpKTsKLSAgICAgIGNhc2UgRlRQX1BVVDogICAgICAgICAgICAg ICAgICAgICAvKiBQVVQsIFNFTkQgKi8KLSAgICAgICAgcmV0dXJuKGhtc2dhKGZoc19wdXQpKTsK LSAgICAgIGNhc2UgRlRQX1JFUDogICAgICAgICAgICAgICAgICAgICAvKiBSRVBVVCwgUkVTRU5E ICovCi0gICAgICAgIHJldHVybihobXNnYShmaHNfcmVwdXQpKTsKLSAgICAgIGNhc2UgRlRQX1BX RDogICAgICAgICAgICAgICAgICAgICAvKiBQV0QgKi8KLSAgICAgICAgcmV0dXJuKGhtc2dhKGZo c19wd2QpKTsKLSAgICAgIGNhc2UgRlRQX1FVTzogICAgICAgICAgICAgICAgICAgICAvKiBRVU9U RSAqLwotICAgICAgICByZXR1cm4oaG1zZ2EoZmhzX3F1bykpOwotICAgICAgY2FzZSBGVFBfUkdF OiAgICAgICAgICAgICAgICAgICAgIC8qIFJFR0VUICovCi0gICAgICAgIHJldHVybihobXNnYShm aHNfcmdlKSk7Ci0gICAgICBjYXNlIEZUUF9SRU46ICAgICAgICAgICAgICAgICAgICAgLyogUkVO QU1FICovCi0gICAgICAgIHJldHVybihobXNnYShmaHNfcmVuKSk7Ci0gICAgICBjYXNlIEZUUF9S RVM6ICAgICAgICAgICAgICAgICAgICAgLyogUkVTRVQgKi8KLSAgICAgICAgcmV0dXJuKGhtc2dh KGZoc19yZXMpKTsKLSAgICAgIGNhc2UgRlRQX1JNRDogICAgICAgICAgICAgICAgICAgICAvKiBS TURJUiAqLwotICAgICAgICByZXR1cm4oaG1zZ2EoZmhzX3JtZCkpOwotICAgICAgY2FzZSBGVFBf U0lUOiAgICAgICAgICAgICAgICAgICAgIC8qIFNJVEUgKi8KLSAgICAgICAgcmV0dXJuKGhtc2dh KGZoc19zaXQpKTsKLSAgICAgIGNhc2UgRlRQX1NJWjogICAgICAgICAgICAgICAgICAgICAvKiBT SVpFICovCi0gICAgICAgIHJldHVybihobXNnYShmaHNfc2l6KSk7Ci0gICAgICBjYXNlIEZUUF9T VEE6ICAgICAgICAgICAgICAgICAgICAgLyogU1RBVFVTICovCi0gICAgICAgIHJldHVybihobXNn YShmaHNfc3RhKSk7Ci0gICAgICBjYXNlIEZUUF9TWVM6ICAgICAgICAgICAgICAgICAgICAgLyog U1lTVEVNICovCi0gICAgICAgIHJldHVybihobXNnYShmaHNfc3lzKSk7Ci0gICAgICBjYXNlIEZU UF9UWVA6ICAgICAgICAgICAgICAgICAgICAgLyogVFlQRSAqLwotICAgICAgICByZXR1cm4oaG1z Z2EoZmhzX3R5cCkpOwotICAgICAgY2FzZSBGVFBfVU1BOiAgICAgICAgICAgICAgICAgICAgIC8q IFVNQVNLICovCi0gICAgICAgIHJldHVybihobXNnYShmaHNfdW1hKSk7Ci0gICAgICBjYXNlIEZU UF9DSEs6ICAgICAgICAgICAgICAgICAgICAgLyogQ0hFQ0sgKi8KLSAgICAgICAgcmV0dXJuKGht c2dhKGZoc19jaGspKTsKLSAgICAgIGNhc2UgRlRQX0VOQToKLSAgICAgICAgcmV0dXJuKGhtc2dh KGZoc19lbmEpKTsKLSAgICAgIGNhc2UgRlRQX0RJUzoKLSAgICAgICAgcmV0dXJuKGhtc2dhKGZo c19kaXMpKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHByaW50ZigiU29ycnksIGhlbHAgYXZh aWxhYmxlIGZvciB0aGlzIGNvbW1hbmQuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotI2Vu ZGlmIC8qIE5PSEVMUCAqLwotICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci19Ci0KLWludAotZG9z ZXRmdHBobHAoKSB7Ci0gICAgaW50IGN4OwotICAgIGlmICgoY3ggPSBjbWtleShmdHBzZXQsbmZ0 cHNldCwiIiwiIix4eHN0cmluZykpIDwgMCkKLSAgICAgIGlmIChjeCAhPSAtMykKLSAgICAgICAg cmV0dXJuKGN4KTsKLSAgICBpZiAoY3ggIT0gLTMpCi0gICAgICBja3N0cm5jcHkodG1wYnVmLGF0 bWJ1ZixUTVBCVUZTSVopOwotICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgIHJldHVy bih4KTsKLQotI2lmZGVmIE5PSEVMUAotICAgIHByaW50ZigiU29ycnksIG5vIGhlbHAgYXZhaWxh YmxlXG4iKTsKLSNlbHNlCi0gICAgc3dpdGNoIChjeCkgewotICAgICAgY2FzZSAtMzoKLSAgICAg ICAgcHJpbnRmKCJcblN5bnRheDogU0VUIEZUUCBwYXJhbWV0ZXIgdmFsdWVcbiIpOwotICAgICAg ICBwcmludGYoIiAgVHlwZSBcImhlbHAgc2V0IGZ0cCA/XCIgZm9yIGEgbGlzdCBvZiBwYXJhbWV0 ZXJzLlxuIik7Ci0gICAgICAgIHByaW50ZigiICBUeXBlIFwiaGVscCBzZXQgZnRwIHh4eFwiIGZv ciBpbmZvcm1hdGlvbiBhYm91dCBzZXR0aW5nXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIHBhcmFt ZXRlciB4eHguICBUeXBlIFwic2hvdyBmdHBcIiBmb3IgY3VycmVudCB2YWx1ZXMuXG5cbiIpOwot ICAgICAgICByZXR1cm4oMCk7Ci0KLSAgICAgIGNhc2UgRlRTX0JVRzoKLQlwcmludGYoIlxuU3lu dGF4OiBTRVQgRlRQIEJVRyA8bmFtZT4ge09OLCBPRkZ9XG4iKTsKLQlwcmludGYoCi0JICAgICIg IEFjdGl2YXRlcyBhIHdvcmthcm91bmQgZm9yIHRoZSBuYW1lZCBidWcgaW4gdGhlIEZUUCBzZXJ2 ZXIuXG4iKTsKLQlwcmludGYoIiAgVHlwZSBTRVQgRlRQIEJVRyA/IGZvciBhIGxpc3Qgb2YgbmFt ZXMuXG4iKTsKLQlwcmludGYoIiAgRm9yIGVhY2ggYnVnLCB0aGUgZGVmYXVsdCBpcyBPRkZcblxu Iik7Ci0JcmV0dXJuKDApOwotCi0jaWZkZWYgRlRQX1NFQ1VSSVRZCi0gICAgICBjYXNlIEZUU19B VFA6ICAgICAgICAgICAgICAgICAgICAgLyogImF1dGh0eXBlIiAqLwotICAgICAgICBwcmludGYo IlxuU3ludGF4OiBTRVQgRlRQIEFVVEhUWVBFIGxpc3RcbiIpOwotICAgICAgICBwcmludGYoIiAg U3BlY2lmaWVzIGFuIG9yZGVyZWQgbGlzdCBvZiBhdXRoZW50aWNhdGlvbiBtZXRob2RzIHRvIGJl XG4iCi0gICAgICAgICAgICAgICApOwotICAgICAgICBwcmludGYoIiAgd2hlbiBGVFAgQVVUT0FV VEhFTlRJQ0FUSU9OIGlzIE9OLiAgVGhlIGRlZmF1bHQgbGlzdCBpczpcbiIpOwotICAgICAgICBw cmludGYoIiAgR1NTQVBJLUtSQjUsIFNSUCwgS0VSQkVST1NfVjQsIFRMUywgU1NMLlxuXG4iKTsK LSAgICAgICAgcmV0dXJuKDApOwotCi0gICAgICBjYXNlIEZUU19BVVQ6ICAgICAgICAgICAgICAg ICAgICAgLyogImF1dG9hdXRoZW50aWNhdGlvbiIgKi8KLSAgICAgICAgcHJpbnRmKCJcblN5bnRh eDpTRVQgRlRQIEFVVE9BVVRIRU5USUNBVElPTiB7IE9OLCBPRkYgfVxuIik7Ci0gICAgICAgIHBy aW50ZigiICBUZWxscyB3aGV0aGVyIGF1dGhlbnRpY2F0aW9uIHNob3VsZCBiZSBuZWdvdGlhdGVk IGJ5IHRoZVxuIik7Ci0gICAgICAgIHByaW50ZigiICBGVFAgT1BFTiBjb21tYW5kLiAgRGVmYXVs dCBpcyBPTi5cblxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEZUU19DUlk6ICAg ICAgICAgICAgICAgICAgICAgLyogImF1dG9lbmNyeXB0aW9uIiAqLwotICAgICAgICBwcmludGYo IlxuU0VUIEZUUCBBVVRPRU5DUllQVElPTiB7IE9OLCBPRkYgfVxuIik7Ci0gICAgICAgIHByaW50 ZigiICBUZWxscyB3aGV0aGVyIGVuY3J5cHRpb24gKHByaXZhY3kpIHNob3VsZCBiZSBuZWdvdGlh dGVkXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIGJ5IHRoZSBGVFAgT1BFTiBjb21tYW5kLiAgRGVm YXVsdCBpcyBPTi5cblxuIik7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIEZUUF9TRUNVUklU WSAqLwotCi0gICAgICBjYXNlIEZUU19MT0c6ICAgICAgICAgICAgICAgICAgICAgLyogImF1dG9s b2dpbiIgKi8KLSAgICAgICAgcHJpbnRmKCJcblNFVCBGVFAgQVVUT0xPR0lOIHsgT04sIE9GRiB9 XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIFRlbGxzIEtlcm1pdCB3aGV0aGVyIHRvIHRyeSB0byBs b2cgeW91IGluIGF1dG9tYXRpY2FsbHlcbiIpOwotICAgICAgICBwcmludGYoIiAgYXMgcGFydCBv ZiB0aGUgY29ubmVjdGlvbiBwcm9jZXNzLlxuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAg IGNhc2UgRlRTX0RJUzoKLSAgICAgICAgcHJpbnRmKCJcblNFVCBGVFAgRElTUExBWSB7IEJSSUVG LCBGVUxMU0NSRUVOLCBDUlQsIC4uLiB9XG4iKTsKLQlwcmludGYoIiAgQ2hvb3NlcyB0aGUgZmls ZS10cmFuc2ZlciBkaXNwbGF5IHN0eWxlIGZvciBGVFAuXG4iKTsKLSAgICAgICAgcHJpbnRmKCIg IExpa2UgU0VUIFRSQU5TRkVSIERJU1BMQVkgYnV0IGFwcGxpZXMgb25seSB0byBGVFAuXG5cbiIp OwotICAgICAgICBicmVhazsKLQotI2lmbmRlZiBOT0NTRVRTCi0gICAgICBjYXNlIEZUU19YTEE6 ICAgICAgICAgICAgICAgICAgICAgLyogImNoYXJhY3Rlci1zZXQtdHJhbnNsYXRpb24iICovCi0g ICAgICAgIHByaW50ZigiXG5TRVQgRlRQIENIQVJBQ1RFUi1TRVQtVFJBTlNMQVRJT04geyBPTiwg T0ZGIH1cbiIpOwotICAgICAgICBwcmludGYoIiAgV2hldGhlciB0byB0cmFuc2xhdGUgY2hhcmFj dGVyIHNldHMgd2hlbiB0cmFuc2ZlcnJpbmdcbiIpOwotICAgICAgICBwcmludGYoIiAgdGV4dCBm aWxlcyB3aXRoIEZUUC4gIE9GRiBieSBkZWZhdWx0LlxuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0K LSNlbmRpZiAvKiBOT0NTRVRTICovCi0gICAgICBjYXNlIEZUU19GTkM6ICAgICAgICAgICAgICAg ICAgICAgLyogImNvbGxpc2lvbiIgKi8KLSAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICBw cmludGYoCi0iU3ludGF4OiBTRVQgRlRQIENPTExJU0lPTiB7IEJBQ0tVUCxSRU5BTUUsVVBEQVRF LERJU0NBUkQsQVBQRU5ELE9WRVJXUklURSB9XG4iCi0gICAgICAgICAgICAgICApOwotICAgICAg ICBwcmludGYoIiAgVGVsbHMgd2hhdCBkbyB3aGVuIGFuIGluY29taW5nIGZpbGUgaGFzIHRoZSBz YW1lIG5hbWUgYXNcbiIpOwotICAgICAgICBwcmludGYoIiAgYW4gZXhpc3RpbmcgZmlsZSB3aGVu IGRvd25sb2FkaW5nIHdpdGggRlRQLlxuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0KLSNpZmRlZiBG VFBfU0VDVVJJVFkKLSAgICAgIGNhc2UgRlRTX0NQTDogICAgICAgICAgICAgICAgICAgICAvKiAi Y29tbWFuZC1wcm90ZWN0aW9uLWxldmVsIiAqLwotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAg ICAgIHByaW50ZigKLSJTeW50YXg6IFNFVCBGVFAgQ09NTUFORC1QUk9URUNUSU9OLUxFVkVMIHsg Q0xFQVIsQ09ORklERU5USUFMLFBSSVZBVEUsU0FGRSB9IgotICAgICAgICAgICAgICAgKTsKLSAg ICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICBwcmludGYoCi0iICBUZWxscyB3aGF0IGxldmVs IG9mIHByb3RlY3Rpb24gaXMgYXBwbGllZCB0byB0aGUgRlRQIGNvbW1hbmQgY2hhbm5lbC5cblxu Iik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGVFNfQ0ZXOiAgICAgICAgICAgICAgICAg ICAgIC8qICJjcmVkZW50aWFsLWZvcndhcmRpbmciICovCi0gICAgICAgIHByaW50ZigiXG5TeW50 YXg6IFNFVCBGVFAgQ1JFREVOVElBTC1GT1JXQVJESU5HIHsgT04sIE9GRiB9XG4iKTsKLSAgICAg ICAgcHJpbnRmKCIgIFRlbGxzIHdoZXRoZXIgZW5kLXVzZXIgY3JlZGVudGlhbHMgYXJlIHRvIGJl IGZvcndhcmRlZFxuIik7Ci0gICAgICAgIHByaW50ZigiICB0byB0aGUgc2VydmVyIGlmIHN1cHBv cnRlZCBieSB0aGUgYXV0aGVudGljYXRpb24gbWV0aG9kXG4iKTsKLSAgICAgICAgcHJpbnRmKCIg IChHU1NBUEktS1JCNSBvbmx5KS5cblxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBG VFNfRFBMOiAgICAgICAgICAgICAgICAgICAgIC8qICJkYXRhLXByb3RlY3Rpb24tbGV2ZWwiICov Ci0gICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgcHJpbnRmKAotIlN5bnRheDogU0VUIEZU UCBEQVRBLVBST1RFQ1RJT04tTEVWRUwgeyBDTEVBUixDT05GSURFTlRJQUwsUFJJVkFURSxTQUZF IH0iCi0gICAgICAgICAgICAgICApOwotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgIHBy aW50ZigKLSIgIFRlbGxzIHdoYXQgbGV2ZWwgb2YgcHJvdGVjdGlvbiBpcyBhcHBsaWVkIHRvIHRo ZSBGVFAgZGF0YSBjaGFubmVsLlxuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogRlRQ X1NFQ1VSSVRZICovCi0KLSAgICAgIGNhc2UgRlRTX0RCRzogICAgICAgICAgICAgICAgICAgICAv KiAiZGVidWciICovCi0gICAgICAgIHByaW50ZigiXG5TeW50YXg6IFNFVCBGVFAgREVCVUcgeyBP TiwgT0ZGIH1cbiIpOwotICAgICAgICBwcmludGYoIiAgV2hldGhlciB0byBwcmludCBGVFAgcHJv dG9jb2wgbWVzc2FnZXMuXG5cbiIpOwotICAgICAgICByZXR1cm4oMCk7Ci0KLSAgICAgIGNhc2Ug RlRTX0VSUjogICAgICAgICAgICAgICAgICAgICAvKiAiZXJyb3ItYWN0aW9uIiAqLwotICAgICAg ICBwcmludGYoIlxuU3ludGF4OiBTRVQgRlRQIEVSUk9SLUFDVElPTiB7IFFVSVQsIFBST0NFRUQg fVxuIik7Ci0gICAgICAgIHByaW50ZigiICBXaGF0IHRvIGRvIHdoZW4gYW4gZXJyb3Igb2NjdXJz IHdoZW4gdHJhbnNmZXJyaW5nIGEgZ3JvdXBcbiIpCi0gICAgICAgICAgOwotICAgICAgICBwcmlu dGYoIiAgb2YgZmlsZXM6IHF1aXQgYW5kIGZhaWwsIG9yIHByb2NlZWQgdG8gdGhlIG5leHQgZmls ZS5cblxuIik7Ci0gICAgICAgIHJldHVybigwKTsKLQotICAgICAgY2FzZSBGVFNfQ05WOiAgICAg ICAgICAgICAgICAgICAgIC8qICJmaWxlbmFtZXMiICovCi0gICAgICAgIHByaW50ZigiXG5TeW50 YXg6IFNFVCBGVFAgRklMRU5BTUVTIHsgQVVUTywgQ09OVkVSVEVELCBMSVRFUkFMIH1cbiIpOwot ICAgICAgICBwcmludGYoIiAgV2hhdCB0byBkbyB3aXRoIGZpbGVuYW1lczogY29udmVydCB0aGVt LCB0YWtlIGFuZCB1c2UgdGhlbVxuIgotICAgICAgICAgICAgICAgKTsKLSAgICAgICAgcHJpbnRm KCIgIGxpdGVyYWxseTsgb3IgY2hvb3NlIHdoYXQgdG8gZG8gYXV0b21hdGljYWxseSBiYXNlZCBv biB0aGVcbiIKLSAgICAgICAgICAgICAgICk7Ci0gICAgICAgIHByaW50ZigiICBPUyB0eXBlIG9m IHRoZSBzZXJ2ZXIuICBUaGUgZGVmYXVsdCBpcyBBVVRPLlxuXG4iKTsKLSAgICAgICAgcmV0dXJu KDApOwotCi0gICAgICBjYXNlIEZUU19QU1Y6ICAgICAgICAgICAgICAgICAgICAgLyogInBhc3Np dmUtbW9kZSIgKi8KLSAgICAgICAgcHJpbnRmKCJcblN5bnRheDogU0VUIEZUUCBQQVNTSVZFLU1P REUgeyBPTiwgT0ZGIH1cbiIpOwotICAgICAgICBwcmludGYoIiAgV2hldGhlciB0byB1c2UgcGFz c2l2ZSBtb2RlLCB3aGljaCBoZWxwcyB0byBnZXQgdGhyb3VnaFxuIik7Ci0gICAgICAgIHByaW50 ZigiICBmaXJld2FsbHMuICBPTiBieSBkZWZhdWx0LlxuXG4iKTsKLSAgICAgICAgcmV0dXJuKDAp OwotCi0gICAgICBjYXNlIEZUU19QUk06ICAgICAgICAgICAgICAgICAgICAgLyogInBlcm1pc3Np b25zIiAqLwotICAgICAgICBwcmludGYoIlxuU3ludGF4OiBTRVQgRlRQIFBFUk1JU1NJT05TIHsg QVVUTywgT04sIE9GRiB9XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIFdoZXRoZXIgdG8gdHJ5IHRv IHNlbmQgZmlsZSBwZXJtaXNzaW9ucyB3aGVuIHVwbG9hZGluZy5cbiIpOwotICAgICAgICBwcmlu dGYoIiAgT0ZGIGJ5IGRlZmF1bHQuICBBVVRPIG1lYW5zIG9ubHkgaWYgY2xpZW50IGFuZCBzZXJ2 ZXJcbiIpOwotICAgICAgICBwcmludGYoIiAgaGF2ZSB0aGUgc2FtZSBPUyB0eXBlLlxuXG4iKTsK LSAgICAgICAgcmV0dXJuKDApOwotCi0gICAgICBjYXNlIEZUU19UU1Q6ICAgICAgICAgICAgICAg ICAgICAgLyogInByb2dyZXNzLW1lc3NhZ2VzIiAqLwotICAgICAgICBwcmludGYoIlxuU3ludGF4 OiBTRVQgRlRQIFBST0dSRVNTLU1FU1NBR0VTIHsgT04sIE9GRiB9XG4iKTsKLSAgICAgICAgcHJp bnRmKCIgIFdoZXRoZXIgS2VybWl0IHNob3VsZCBwcmludCBsb2NhbGx5LWdlbmVyYXRlZCBmZWVk YmFja1xuIik7Ci0gICAgICAgIHByaW50ZigiICBtZXNzYWdlcyBmb3IgZWFjaCBub24tZmlsZS10 cmFuc2ZlciBjb21tYW5kLiIpOwotICAgICAgICBwcmludGYoIiAgT04gYnkgZGVmYXVsdC5cblxu Iik7Ci0gICAgICAgIHJldHVybigwKTsKLQotICAgICAgY2FzZSBGVFNfU1BDOiAgICAgICAgICAg ICAgICAgICAgIC8qICJzZW5kLXBvcnQtY29tbWFuZHMiICovCi0gICAgICAgIHByaW50ZigiXG5T eW50YXg6IFNFVCBGVFAgU0VORC1QT1JULUNPTU1BTkRTIHsgT04sIE9GRiB9XG4iKTsKLSAgICAg ICAgcHJpbnRmKCIgIFdoZXRoZXIgS2VybWl0IHNob3VsZCBzZW5kIGEgbmV3IFBPUlQgY29tbWFu ZCBmb3IgZWFjaCIpOwotICAgICAgICBwcmludGYoIiAgdGFzay5cblxuIik7Ci0gICAgICAgIHJl dHVybigwKTsKLQotI2lmbmRlZiBOT0NTRVRTCi0gICAgICBjYXNlIEZUU19DU1I6ICAgICAgICAg ICAgICAgICAgICAgLyogInNlcnZlci1jaGFyYWN0ZXItc2V0IiAqLwotICAgICAgICBwcmludGYo IlxuU3ludGF4OiBTRVQgRlRQIFNFUlZFUi1DSEFSQUNURVItU0VUIG5hbWVcbiIpOwotICAgICAg ICBwcmludGYoIiAgVGhlIG5hbWUgb2YgdGhlIGNoYXJhY3RlciBzZXQgdXNlZCBmb3IgdGV4dCBm aWxlcyBvbiB0aGVcbiIpOwotICAgICAgICBwcmludGYoIiAgc2VydmVyLiAgRW50ZXIgYSBuYW1l IG9mICc/JyBmb3IgYSBtZW51LlxuXG4iKTsKLSAgICAgICAgcmV0dXJuKDApOwotI2VuZGlmIC8q IE5PQ1NFVFMgKi8KLQotICAgICAgY2FzZSBGVFNfU1RPOgkJCS8qICJzZXJ2ZXItdGltZS1vZmZz ZXQgKi8KLQlwcmludGYoCi0iXG5TeW50YXg6IFNFVCBGVFAgU0VSVkVSLVRJTUUtT0ZGU0VUICto aFs6bW1bOnNzXV0gb3IgLWhoWzptbVs6c3NdXVxuIik7Ci0gICAgICAgIHByaW50ZigKLSIgIFNw ZWNpZmllcyBhbiBvZmZzZXQgdG8gYXBwbHkgdG8gdGhlIHNlcnZlcidzIGZpbGUgdGltZXN0YW1w cy5cbiIpOwotICAgICAgICBwcmludGYoCi0iICBVc2UgdGhpcyB0byBjb3JyZWN0IGZvciBtaXNj b25maWd1cmVkIHNlcnZlciB0aW1lIG9yIHRpbWV6b25lLlxuIik7Ci0gICAgICAgIHByaW50ZigK LSIgIEZvcm1hdDogbXVzdCBiZWdpbiB3aXRoICsgb3IgLSBzaWduLiAgSG91cnMgbXVzdCBiZSBn aXZlbjsgbWludXRlc1xuIik7Ci0gICAgICAgIHByaW50ZigKLSIgIGFuZCBzZWNvbmRzIGFyZSBv cHRpb25hbDogKzQgPSArNDowMCA9ICs0OjAwOjAwIChhZGQgNCBob3VycykuXG5cbiIpOwotICAg ICAgICByZXR1cm4oMCk7Ci0KLSAgICAgIGNhc2UgRlRTX1RZUDogICAgICAgICAgICAgICAgICAg ICAvKiAidHlwZSIgKi8KLSAgICAgICAgcHJpbnRmKCJcblN5bnRheDogU0VUIEZUUCBUWVBFIHsg VEVYVCwgQklOQVJZLCBURU5FWCB9XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIEVzdGFibGlzaGVz IHRoZSBkZWZhdWx0IHRyYW5zZmVyIG1vZGUuXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIFRFTkVY IGlzIHVzZWQgZm9yIHVwbG9hZGluZyA4LWJpdCBiaW5hcnkgZmlsZXMgdG8gMzYtYml0XG4iKTsK LSAgICAgICAgcHJpbnRmKCIgIHBsYXRmb3JtcyBzdWNoIGFzIFRFTkVYIGFuZCBUT1BTLTIwIGFu ZCBmb3IgZG93bmxvYWRpbmdcbiIpOwotICAgICAgICBwcmludGYoIiAgdGhlbSBhZ2Fpbi4gIEFT Q0lJIGlzIGEgc3lub255bSBmb3IgVEVYVC4gIE5vcm1hbGx5IGVhY2hcbiIpOwotICAgICAgICBw cmludGYoIiAgZmlsZSdzIHR5cGUgaXMgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5IGZyb20gaXRz IGNvbnRlbnRzXG4iCi0JICAgICAgICk7Ci0gICAgICAgIHByaW50ZigiICBvciBpdHMgbmFtZTsg U0VUIEZUUCBUWVBFIGRvZXMgbm90IHByZXZlbnQgdGhhdCwgaXQgb25seVxuIik7Ci0gICAgICAg IHByaW50ZigiICB0ZWxscyB3aGljaCBtb2RlIHRvIHVzZSB3aGVuIHRoZSB0eXBlIGNhbid0IGJl IGRldGVybWluZWRcbiIKLQkgICAgICAgKTsKLSAgICAgICAgcHJpbnRmKCIgIGF1dG9tYXRpY2Fs bHkuICBUbyBjb21wbGV0ZWx5IGRpc2FibGUgYXV0b21hdGljIHRyYW5zZmVyLVxuIgotCSAgICAg ICApOwotICAgICAgICBwcmludGYoIiAgbW9kZSBzd2l0Y2hpbmcgYW5kIGZvcmNlIGVpdGhlciB0 ZXh0IG9yIGJpbmFyeSBtb2RlLCBnaXZlXG4iCi0JICAgICAgICk7Ci0gICAgICAgIHByaW50Zigi ICB0aGUgdG9wLWxldmVsIGNvbW1hbmQgQVNDSUkgb3IgQklOQVJZLCBhcyBpbiB0cmFkaXRpb25h bFxuIik7Ci0gICAgICAgIHByaW50ZigiICBGVFAgY2xpZW50cy5cblxuIik7Ci0gICAgICAgIHJl dHVybigwKTsKLQotI2lmZGVmIEZUUF9USU1FT1VUCi0gICAgICBjYXNlIEZUU19UTU86Ci0gICAg ICAgcHJpbnRmKCJcblN5bnRheDogU0VUIEZUUCBUSU1FT1VUIG51bWJlci1vZi1zZWNvbmRzXG4i KTsKLSAgICAgICBwcmludGYoIiAgRXN0YWJsaXNoZXMgYSB0aW1lb3V0IGZvciBGVFAgdHJhbnNm ZXJzLlxuIik7Ci0gICAgICAgcHJpbnRmKCIgIFRoZSB0aW1lb3V0IGFwcGxpZXMgcGVyIG5ldHdv cmsgcmVhZCBvciB3cml0ZSBvbiB0aGUgZGF0YVxuIik7Ci0gICAgICAgcHJpbnRmKCIgIGNvbm5l Y3Rpb24sIG5vdCB0byB0aGUgd2hvbGUgdHJhbnNmZXIuICBCeSBkZWZhdWx0IHRoZVxuIik7Ci0g ICAgICAgcHJpbnRmKCIgIHRpbWVvdXQgdmFsdWUgaXMgMCwgbWVhbmluZyBubyB0aW1lb3V0LiAg VXNlIGEgcG9zaXRpdmVcbiIpOwotICAgICAgIHByaW50ZigiICBudW1iZXIgdG8gZXNjYXBlIGdy YWNlZnVsbHkgZnJvbSBodW5nIGRhdGEgY29ubmVjdGlvbnMgb3JcbiIpOwotICAgICAgIHByaW50 ZigiICBkaXJlY3RvcnkgbGlzdGluZ3MuXG5cbiIpOwotICAgICAgICByZXR1cm4oMCk7Ci0jZW5k aWYJLyogRlRQX1RJTUVPVVQgKi8KLQotI2lmZGVmIFBBVFRFUk5TCi0gICAgICBjYXNlIEZUU19H RlQ6Ci0gICAgICAgIHByaW50ZigiXG5TeW50YXg6IFNFVCBGVFAgR0VULUZJTEVUWVBFLVNXSVRD SElORyB7IE9OLCBPRkYgfVxuIik7Ci0gICAgICAgIHByaW50ZigiICBUZWxscyB3aGV0aGVyIEdF VCBhbmQgTUdFVCBzaG91bGQgYXV0b21hdGljYWxseSBzd2l0Y2hcbiIpOwotICAgICAgICBwcmlu dGYoIiAgdGhlIGFwcHJvcHJpYXRlIGZpbGUgdHlwZSwgVEVYVCwgQklOQVJZLCBvciBURU5FWCwg YnlcbiIpOwotICAgICAgICBwcmludGYoIiAgbWF0Y2hpbmcgdGhlIG5hbWUgb2YgZWFjaCBpbmNv bWluZyBmaWxlIHdpdGggaXRzIGxpc3Qgb2ZcbiIpOwotICAgICAgICBwcmludGYoIiAgRklMRSBU RVhULVBBVFRFUk5TIGFuZCBGSUxFIEJJTkFSWS1QQVRURVJOUy4gIE9OIGJ5XG4iKTsKLSAgICAg ICAgcHJpbnRmKCIgIGRlZmF1bHQuICBTSE9XIFBBVFRFUk5TIGRpc3BsYXlzIHRoZSBjdXJyZW50 IHBhdHRlcm5cbiIpOwotICAgICAgICBwcmludGYoIiAgbGlzdC4gIEhFTFAgU0VUIEZJTEUgdG8g c2VlIGhvdyB0byBjaGFuZ2UgaXQuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogUEFU VEVSTlMgKi8KLQotICAgICAgY2FzZSBGVFNfVVNOOiAgICAgICAgICAgICAgICAgICAgIC8qICJ1 bmlxdWUtc2VydmVyLW5hbWVzIiAqLwotICAgICAgICBwcmludGYoIlxuU3ludGF4OiBTRVQgRlRQ IFVOSVFVRS1TRVJWRVItTkFNRVMgeyBPTiwgT0ZGIH1cbiIpOwotICAgICAgICBwcmludGYoIiAg VGVsbHMgd2hldGhlciB0byBhc2sgdGhlIHNlcnZlciB0byBjcmVhdGUgdW5pcXVlIG5hbWVzXG4i KTsKLSAgICAgICAgcHJpbnRmKCIgIGZvciBhbnkgdXBsb2FkZWQgZmlsZSB0aGF0IGhhcyB0aGUg c2FtZSBuYW1lIGFzIGFuXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIGV4aXN0aW5nIGZpbGUuICBE ZWZhdWx0IGlzIE9GRi5cblxuIik7Ci0gICAgICAgIHJldHVybigwKTsKLQotICAgICAgY2FzZSBG VFNfVkJNOiAgICAgICAgICAgICAgICAgICAgIC8qICJ2ZXJib3NlLW1vZGUiICovCi0gICAgICAg IHByaW50ZigiXG5TeW50YXg6IFNFVCBGVFAgVkVSQk9TRS1NT0RFIHsgT04sIE9GRiB9XG4iKTsK LSAgICAgICAgcHJpbnRmKCIgIFdoZXRoZXIgdG8gZGlzcGxheSBhbGwgcmVzcG9uc2VzIGZyb20g dGhlIEZUUCBzZXJ2ZXIuXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIE9GRiBieSBkZWZhdWx0Llxu XG4iKTsKLSAgICAgICAgcmV0dXJuKDApOwotCi0gICAgICBjYXNlIEZUU19EQVQ6Ci0gICAgICAg IHByaW50ZigiXG5TeW50YXg6IFNFVCBGVFAgREFURVMgeyBPTiwgT0ZGIH1cbiIpOwotICAgICAg ICBwcmludGYoIiAgV2hldGhlciB0byBzZXQgZGF0ZSBvZiBpbmNvbWluZyBmaWxlcyBmcm9tIHRo ZSBmaWxlIGRhdGVcbiIpOwotICAgICAgICBwcmludGYoIiAgb24gdGhlIHNlcnZlci4gIE9OIGJ5 IGRlZmF1bHQuICBOb3RlOiB0aGVyZSBpcyBubyB3YXkgdG9cbiIpCi0gICAgICAgICAgOwotICAg ICAgICBwcmludGYoIiAgc2V0IHRoZSBkYXRlIG9uIGZpbGVzIHVwbG9hZGVkIHRvIHRoZSBzZXJ2 ZXIuICBBbHNvIG5vdGVcbiIpOwotCXByaW50ZigiICB0aGF0IG5vdCBhbGwgc2VydmVycyBzdXBw b3J0IHRoaXMgZmVhdHVyZS5cblxuIik7Ci0gICAgICAgIHJldHVybigwKTsKLQotICAgICAgY2Fz ZSBGVFNfQVBXOgotCXByaW50ZigiXG5TeW50YXg6IFNFVCBGVFAgQU5PTllNT1VTLVBBU1NXT1JE IFsgdGV4dCBdXG4iKTsKLQlwcmludGYoIiAgUGFzc3dvcmQgdG8gc3VwcGx5IGF1dG9tYXRpY2Fs bHkgb24gYW5vbnltb3VzIEZUUFxuIik7Ci0JcHJpbnRmKCIgIGNvbm5lY3Rpb25zIGluc3RlYWQg b2YgdGhlIGRlZmF1bHQgdXNlckBob3N0LlxuIik7Ci0JcHJpbnRmKCIgIE9taXQgb3B0aW9uYWwg dGV4dCB0byByZXN0b3JlIGRlZmF1bHQuXG5cbiIpOwotCXJldHVybigwKTsKLQotICAgICAgZGVm YXVsdDoKLSAgICAgICAgcHJpbnRmKCJTb3JyeSwgaGVscCBub3QgYXZhaWxhYmxlIGZvciBcInNl dCBmdHAgJXNcIlxuIix0bXBidWYpOwotICAgIH0KLSNlbmRpZiAvKiBOT0hFTFAgKi8KLSAgICBy ZXR1cm4oMCk7Ci19Ci0KLSNpZm5kZWYgTF9TRVQKLSNkZWZpbmUgTF9TRVQgMAotI2VuZGlmIC8q IExfU0VUICovCi0jaWZuZGVmIExfSU5DUgotI2RlZmluZSBMX0lOQ1IgMQotI2VuZGlmIC8qIExf SU5DUiAqLwotCi0jaWZkZWYgRlRQX1NSUAotY2hhciBzcnBfdXNlcltCVUZTSVpdOyAgICAgICAg ICAgICAgICAgIC8qIHdoZXJlIGlzIEJVRlNJWiBkZWZpbmVkPyAqLwotY2hhciAqc3JwX3Bhc3M7 Ci1jaGFyICpzcnBfYWNjdDsKLSNlbmRpZiAvKiBGVFBfU1JQICovCi0KLXN0YXRpYyBpbnQga2Vy cm9yOyAgICAgICAgICAgICAgICAgICAgICAvKiBOZWVkZWQgZm9yIGFsbCBhdXRoIHR5cGVzICov Ci0KLXN0YXRpYyBzdHJ1Y3QgICBzb2NrYWRkcl9pbiBoaXNjdGxhZGRyOwotc3RhdGljIHN0cnVj dCAgIHNvY2thZGRyX2luIGhpc2RhdGFhZGRyOwotc3RhdGljIHN0cnVjdCAgIHNvY2thZGRyX2lu IGRhdGFfYWRkcjsKLXN0YXRpYyBpbnQgICAgICBkYXRhID0gLTE7Ci1zdGF0aWMgaW50ICAgICAg cHRmbGFnID0gMDsKLXN0YXRpYyBzdHJ1Y3QgICBzb2NrYWRkcl9pbiBteWN0bGFkZHI7Ci0KLSNp ZmRlZiBDT01NRU5UCi0jaWZuZGVmIE9TMgotVUlEX1QgZ2V0dWlkKCk7Ci0jZW5kaWYgLyogT1My ICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0KLXN0YXRpYyBpbnQgY3BlbmQgPSAwOyAgICAg ICAgICAgICAgICAgICAvKiBObyBwZW5kaW5nIHJlcGxpZXMgKi8KLQotI2lmZGVmIENLX1NTTAot ZXh0ZXJuIFNTTCAqc3NsX2Z0cF9jb247Ci1leHRlcm4gU1NMX0NUWCAqc3NsX2Z0cF9jdHg7Ci1l eHRlcm4gU1NMICpzc2xfZnRwX2RhdGFfY29uOwotZXh0ZXJuIGludCBzc2xfZnRwX2FjdGl2ZV9m bGFnOwotZXh0ZXJuIGludCBzc2xfZnRwX2RhdGFfYWN0aXZlX2ZsYWc7Ci0jZW5kaWYgLyogQ0tf U1NMICovCi0KLS8qICBmIHQgcCBjIG0gZCAgLS0gIFNlbmQgYSBjb21tYW5kIHRvIHRoZSBGVFAg c2VydmVyICAqLwotLyoKLSAgQ2FsbCB3aXRoOgotICAgIGNoYXIgKiBjbWQ6IFRoZSBjb21tYW5k IHRvIHNlbmQuCi0gICAgY2hhciAqIGFyZzogVGhlIGFyZ3VtZW50IChlLmcuIGEgZmlsZW5hbWUp LgotICAgIGludCBsY3M6IFRoZSBsb2NhbCBjaGFyYWN0ZXIgc2V0IGluZGV4LgotICAgIGludCBy Y3M6IFRoZSByZW1vdGUgKHNlcnZlcikgY2hhcmFjdGVyIHNldCBpbmRleC4KLSAgICBpbnQgdmJt OiBWZXJib3NlIG1vZGU6Ci0gICAgICAwID0gZm9yY2UgdmVyYm9zaXR5IG9mZgotICAgICA+MCA9 IGZvcmNlIHZlcmJvc2l0eSBvbgotCi0gIElmIGFyZyBpcyBnaXZlbiAobm90IE5VTEwgb3IgZW1w dHkpIGFuZCBsY3MgIT0gcmNzIGFuZCBib3RoIGFyZSA+IC0xLAotICBhbmQgbmVpdGhlciBsY3Mg b3IgcmNzIGlzIFVDUy0yLCB0aGUgYXJnIGlzIHRyYW5zbGF0ZWQgZnJvbSB0aGUgbG9jYWwKLSAg Y2hhcmFjdGVyIHNldCB0byB0aGUgcmVtb3RlIG9uZSBiZWZvcmUgc2VuZGluZyB0aGUgcmVzdWx0 IHRvIHRoZSBzZXJ2ZXIuCi0KLSAgIFJldHVybnM6Ci0gICAgMCBvbiBmYWlsdXJlIHdpdGggZnRw Y29kZSA9IC0xCi0gICAgPj0gMCBvbiBzdWNjZXNzIChnZXRyZXBseSgpIHJlc3VsdCkgd2l0aCBm dHBjb2RlID0gMC4KLSovCi1zdGF0aWMgY2hhciB4Y21kYnVmW1JGTkJVRlNJWl07Ci0KLXN0YXRp YyBpbnQKLWZ0cGNtZChjbWQsYXJnLGxjcyxyY3MsdmJtKSBjaGFyICogY21kLCAqIGFyZzsgaW50 IGxjcywgcmNzLCB2Ym07IHsKLSAgICBjaGFyICogcyA9IE5VTEw7Ci0gICAgaW50IHIgPSAwLCB4 ID0gMCwgZmMgPSAwLCBsZW4gPSAwLCBjbWRsZW4gPSAwLCBxID0gLTE7Ci0gICAgc2lnX3Qgb2xk aW50cjsKLQotICAgIGlmIChmdHBfZGViKSAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFQlVH ICovCi0gICAgICB2Ym0gPSAxOwotICAgIGVsc2UgaWYgKHF1aWV0IHx8IGRweWFjdGl2ZSkgICAg ICAgIC8qIFFVSUVUIG9yIEZpbGUgVHJhbnNmZXIgQWN0aXZlICovCi0gICAgICB2Ym0gPSAwOwot ICAgIGVsc2UgaWYgKHZibSA8IDApICAgICAgICAgICAgICAgICAgIC8qIFZFUkJPU0UgKi8KLSAg ICAgIHZibSA9IGZ0cF92Ym07Ci0KLSAgICBjYW5jZWxmaWxlID0gMDsKLSAgICBpZiAoIWNtZCkg Y21kID0gIiI7Ci0gICAgaWYgKCFhcmcpIGFyZyA9ICIiOwotICAgIGNtZGxlbiA9IChpbnQpc3Ry bGVuKGNtZCk7Ci0gICAgbGVuID0gY21kbGVuICsgKGludClzdHJsZW4oYXJnKSArIDE7Ci0KLSAg ICBpZiAoZnRwX2RlYiAvKiAmJiAhZHB5YWN0aXZlICovICkgewotI2lmZGVmIEZUUF9QUk9YWQot ICAgICAgICBpZiAoZnRwX3ByeCkgcHJpbnRmKCIlcyAiLCBmdHBfaG9zdCk7Ci0jZW5kaWYgLyog RlRQX1BST1hZICovCi0gICAgICAgIHByaW50ZigiLS0tPiAiKTsKLSAgICAgICAgaWYgKCFhbm9u eW1vdXMgJiYgc3RyY21wKCJQQVNTIixjbWQpID09IDApCi0gICAgICAgICAgcHJpbnRmKCJQQVNT IFhYWFgiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHByaW50ZigiJXMgJXMiLGNtZCxhcmcp OwotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgfQotICAgIC8qIGJ6ZXJvKHhjbWRidWYsUkZO QlVGU0laKTsgKi8KLSAgICBja21ha21zZyh4Y21kYnVmLFJGTkJVRlNJWiwgY21kLCAqYXJnID8g IiAiIDogIiIsIGFyZywgTlVMTCk7Ci0KLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsK LSAgICAgICAgZGVidWcoRjExMCwiZnRwY21kIGNtZCIsY21kLDApOwotICAgICAgICBkZWJ1ZyhG MTEwLCJmdHBjbWQgYXJnIixhcmcsMCk7Ci0gICAgICAgIGRlYnVnKEYxMDEsImZ0cGNtZCBsY3Mi LCIiLGxjcyk7Ci0gICAgICAgIGRlYnVnKEYxMDEsImZ0cGNtZCByY3MiLCIiLHJjcyk7Ci0gICAg fQotI2VuZGlmIC8qIERFQlVHICovCi0KLSAgICBpZiAoY3NvY2tldCA9PSAtMSkgewotICAgICAg ICBwZXJyb3IoIk5vIGNvbnRyb2wgY29ubmVjdGlvbiBmb3IgY29tbWFuZCIpOwotICAgICAgICBm dHBjb2RlID0gLTE7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0gICAgaGF2ZXNpZ2ludCA9 IDA7Ci0gICAgb2xkaW50ciA9IHNpZ25hbChTSUdJTlQsIGNtZGNhbmNlbCk7Ci0KLSNpZm5kZWYg Tk9DU0VUUwotICAgIGlmICgqYXJnICYmICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIGFu IGFyZyB3YXMgZ2l2ZW4gKi8KLSAgICAgICAgbGNzID4gLTEgJiYgICAgICAgICAgICAgICAgICAg ICAvKiBhbmQgYSBsb2NhbCBjaGFyc2V0ICovCi0gICAgICAgIHJjcyA+IC0xICYmICAgICAgICAg ICAgICAgICAgICAgLyogYW5kIGEgcmVtb3RlIGNoYXJzZXQgKi8KLSAgICAgICAgbGNzICE9IHJj cyAmJiAgICAgICAgICAgICAgICAgICAvKiBhbmQgdGhlIHR3byBhcmUgbm90IHRoZSBzYW1lICov Ci0gICAgICAgIGxjcyAhPSBGQ19VQ1MyICYmICAgICAgICAgICAgICAgLyogYW5kIG5laXRoZXIg b25lIGlzIFVDUy0yICovCi0gICAgICAgIHJjcyAhPSBGQ19VQ1MyICAgICAgICAgICAgICAgICAg LyogLi4uICovCi0gICAgICAgICkgewotICAgICAgICBpbml0eGxhdGUobGNzLHJjcyk7ICAgICAg ICAgICAgIC8qIFRyYW5zbGF0ZSBhcmcgZnJvbSBsY3MgdG8gcmNzICovCi0gICAgICAgIHhnbmJw ID0gYXJnOyAgICAgICAgICAgICAgICAgICAgLyogR2xvYmFsIHBvaW50ZXIgdG8gaW5wdXQgc3Ry aW5nICovCi0gICAgICAgIHJmbnB0ciA9IHJmbmJ1ZjsgICAgICAgICAgICAgICAgLyogR2xvYmFs IHBvaW50ZXIgdG8gb3V0cHV0IGJ1ZmZlciAqLwotCi0gICAgICAgIHdoaWxlICgxKSB7Ci0gICAg ICAgICAgICBpZiAoKGMwID0geGduYnl0ZShGQ19VQ1MyLGxjcyxzdHJnZXRjKSkgPCAwKSBicmVh azsKLSAgICAgICAgICAgIGlmICh4cG5ieXRlKGMwLFRDX1VDUzIscmNzLHN0cnB1dGMpIDwgMCkg YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgLyoKLSAgICAgICAgICBXZSBoYXZlIHRvIGNvcHkg aGVyZSBpbnN0ZWFkIG9mIHRyYW5zbGF0aW5nIGRpcmVjdGx5IGludG8KLSAgICAgICAgICB4Y21k YnVmW10gc28gc3RycHV0YygpIGNhbiBjaGVjayBsZW5ndGguICBBbHRlcm5hdGl2ZWx5IHdlIGNv dWxkCi0gICAgICAgICAgd3JpdGUgeWV0IGFub3RoZXIgeHBuYnl0ZSgpIG91dHB1dCBmdW5jdGlv bi4KLSAgICAgICAgKi8KLSAgICAgICAgaWYgKChpbnQpc3RybGVuKHJmbmJ1ZikgPiAoUkZOQlVG U0laIC0gKGNtZGxlbisxKSkpIHsKLSAgICAgICAgICAgIHByaW50ZigiP0ZUUCBjb21tYW5kIHRv byBsb25nOiAlcyArIGFyZ1xuIixjbWQpOwotICAgICAgICAgICAgZnRwY29kZSA9IC0xOwotICAg ICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICB9Ci0gICAgICAgIHggPSBja3N0cm5jcHkoJnhj bWRidWZbY21kbGVuKzFdLCByZm5idWYsIFJGTkJVRlNJWiAtIChjbWRsZW4rMSkpOwotICAgIH0K LSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSAgICBzID0geGNtZGJ1ZjsgICAgICAgICAgICAgICAg ICAgICAgICAvKiBDb21tYW5kIHRvIHNlbmQgdG8gc2VydmVyICovCi0KLSNpZmRlZiBERUJVRwot ICAgIGlmIChkZWJsb2cpIHsJCQkvKiBMb2cgaXQgKi8KLQlpZiAoIWFub255bW91cyAmJiAhY2tz dHJjbXAocywiUEFTUyAiLDUsMCkpIHsKLQkgICAgLyogQnV0IGRvbid0IGxvZyBwYXNzd29yZHMg Ki8KLQkgICAgZGVidWcoRjExMCwiRlRQIFNFTlQgIiwiUEFTUyBYWFhYIiwwKTsKLQl9IGVsc2Ug ewotCSAgICBkZWJ1ZyhGMTEwLCJGVFAgU0VOVCAiLHMsMCk7Ci0JfQotICAgIH0KLSNlbmRpZiAv KiBERUJVRyAqLwotCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotICBhZ2FpbjoKLSNlbmRpZiAvKiBD S19FTkNSWVBUSU9OICovCi0gICAgaWYgKHNjb21tYW5kKHMpID09IDApIHsgICAgICAgICAgICAg IC8qIFNlbmQgaXQuICovCi0gICAgICBzaWduYWwoU0lHSU5ULCBvbGRpbnRyKTsKLSAgICAgIHJl dHVybigwKTsKLSAgICB9Ci0gICAgY3BlbmQgPSAxOwotICAgIHggPSAhc3RyY21wKGNtZCwiUVVJ VCIpOwkJLyogSXMgaXQgdGhlIFFVSVQgY29tbWFuZD8gKi8KLSAgICBpZiAoeCkJCQkJLyogSW4g Y2FzZSB3ZSdyZSBpbnRlcnJ1cHRlZCAqLwotICAgICAgY29ubmVjdGVkID0gMDsJCQkvKiB3aGls ZSB3YWl0aW5nIGZvciB0aGUgcmVwbHkuLi4gKi8KLQotICAgIGZjID0gMDsJCQkJLyogRnVuY3Rp b24gY29kZSBmb3IgZ2V0cmVwbHkoKSAqLwotICAgIGlmICghc3RybmNtcChjbWQsIkFVVEggIiw1 KQkJLyogTXVzdCBwYXJzZSBBVVRIIHJlcGx5ICovCi0jaWZkZWYgRlRQSE9TVAotCSYmIHN0cm5j bXAoY21kLCAiSE9TVCAiLDUpCi0jZW5kaWYgLyogRlRQSE9TVCAqLwotCSkgewotCWZjID0gR1JG X0FVVEg7Ci0gICAgfSBlbHNlIGlmICghY2tzdHJjbXAoY21kLCJGRUFUIiwtMSwwKSkgeyAvKiBN dXN0IHBhcnNlIEZFQVQgcmVwbHkgKi8KLQlmYyA9IEdSRl9GRUFUOwkJCS8qIEJ1dCBGRUFUIG5v dCB3aWRlbHkgdW5kZXJzdG9vZCAqLwotCWlmICghZnRwX2RlYikJCQkvKiBTbyBzdXBwcmVzcyBl cnJvciBtZXNzYWdlcyAqLwotCSAgdmJtID0gOTsKLSAgICB9Ci0gICAgciA9IGdldHJlcGx5KHgs CQkJLyogRXhwZWN0IGNvbm5lY3Rpb24gdG8gY2xvc2UgKi8KLQkJIGxjcyxyY3MsCQkvKiBDaGFy c2V0cyAqLwotCQkgdmJtLAkJCS8qIFZlcmJvc2l0eSAqLwotCQkgZmMJCQkvKiBGdW5jdGlvbiBj b2RlICovCi0JCSApOwotICAgIGlmIChxID4gLTEpCi0gICAgICBxdWlldCA9IHE7Ci0KLSNpZmRl ZiBDS19FTkNSWVBUSU9OCi0gICAgaWYgKGZ0cGNvZGUgPT0gNTMzICYmIGZ0cF9jcGwgPT0gRlBM X1BSVikgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICJFTkMgY29t bWFuZCBub3Qgc3VwcG9ydGVkIGF0IHNlcnZlcjsgcmV0cnlpbmcgdW5kZXIgTUlDLi4uXG4iKTsK LSAgICAgICAgZnRwX2NwbCA9IEZQTF9TQUY7Ci0gICAgICAgIGdvdG8gYWdhaW47Ci0gICAgfQot I2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgaWYgKGNhbmNl bGZpbGUgJiYgb2xkaW50ciAhPSBTSUdfSUdOKQotICAgICAgKCpvbGRpbnRyKShTSUdJTlQpOwot I2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICBzaWduYWwoU0lHSU5ULCBvbGRpbnRyKTsKLSAgICBy ZXR1cm4ocik7Ci19Ci0KLXN0YXRpYyBWT0lECi1sb3N0cGVlcigpIHsKLSAgICBkZWJ1ZyhGMTAw LCJsb3N0cGVlciIsIiIsMCk7Ci0gICAgaWYgKGNvbm5lY3RlZCkgewotICAgICAgICBpZiAoY3Nv Y2tldCAhPSAtMSkgewotI2lmZGVmIENLX1NTTAotICAgICAgICAgICAgaWYgKHNzbF9mdHBfYWN0 aXZlX2ZsYWcpIHsKLSAgICAgICAgICAgICAgICBTU0xfc2h1dGRvd24oc3NsX2Z0cF9jb24pOwot ICAgICAgICAgICAgICAgIFNTTF9mcmVlKHNzbF9mdHBfY29uKTsKLSAgICAgICAgICAgICAgICBz c2xfZnRwX3Byb3h5ID0gMDsKLSAgICAgICAgICAgICAgICBzc2xfZnRwX2FjdGl2ZV9mbGFnID0g MDsKLSAgICAgICAgICAgICAgICBzc2xfZnRwX2NvbiA9IE5VTEw7Ci0gICAgICAgICAgICB9Ci0j ZW5kaWYgLyogQ0tfU1NMICovCi0jaWZkZWYgVENQSVBMSUIKLSAgICAgICAgICAgIHNvY2tldF9j bG9zZShjc29ja2V0KTsKLSNlbHNlIC8qIFRDUElQTElCICovCi0jaWZkZWYgVVNFX1NIVVRET1dO Ci0gICAgICAgICAgICBzaHV0ZG93bihjc29ja2V0LCAxKzEpOwotI2VuZGlmIC8qIFVTRV9TSFVU RE9XTiAqLwotICAgICAgICAgICAgY2xvc2UoY3NvY2tldCk7Ci0jZW5kaWYgLyogVENQSVBMSUIg Ki8KLSAgICAgICAgICAgIGNzb2NrZXQgPSAtMTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZGF0 YSAhPSAtMSkgewotI2lmZGVmIENLX1NTTAotICAgICAgICAgICAgaWYgKHNzbF9mdHBfZGF0YV9h Y3RpdmVfZmxhZykgewotICAgICAgICAgICAgICAgIFNTTF9zaHV0ZG93bihzc2xfZnRwX2RhdGFf Y29uKTsKLSAgICAgICAgICAgICAgICBTU0xfZnJlZShzc2xfZnRwX2RhdGFfY29uKTsKLSAgICAg ICAgICAgICAgICBzc2xfZnRwX2RhdGFfYWN0aXZlX2ZsYWcgPSAwOwotICAgICAgICAgICAgICAg IHNzbF9mdHBfZGF0YV9jb24gPSBOVUxMOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIENLX1NT TCAqLwotI2lmZGVmIFRDUElQTElCCi0gICAgICAgICAgICBzb2NrZXRfY2xvc2UoZGF0YSk7Ci0j ZWxzZSAvKiBUQ1BJUExJQiAqLwotI2lmZGVmIFVTRV9TSFVURE9XTgotICAgICAgICAgICAgc2h1 dGRvd24oZGF0YSwgMSsxKTsKLSNlbmRpZiAvKiBVU0VfU0hVVERPV04gKi8KLSAgICAgICAgICAg IGNsb3NlKGRhdGEpOwotI2VuZGlmIC8qIFRDUElQTElCICovCi0gICAgICAgICAgICBkYXRhID0g LTE7Ci0gICAgICAgICAgICBnbG9iYWxkaW4gPSAtMTsKLSAgICAgICAgfQotICAgICAgICBjb25u ZWN0ZWQgPSAwOwotICAgICAgICBhbm9ueW1vdXMgPSAwOwotICAgICAgICBsb2dnZWRpbiA9IDA7 Ci0gICAgICAgIGF1dGhfdHlwZSA9IE5VTEw7Ci0gICAgICAgIGZ0cF9jcGwgPSBmdHBfZHBsID0g RlBMX0NMUjsKLSNpZmRlZiBDS0xPR0RJQUwKLSAgICAgICAgZnRwbG9nZW5kKCk7Ci0jZW5kaWYg LyogQ0tMT0dESUFMICovCi0KLSNpZmRlZiBMT0NVUwotCWlmIChhdXRvbG9jdXMpCQkJLyogQXVv dG9tYXRpYyBsb2N1cyBzd2l0Y2hpbmcuLi4gKi8KLQkgIHNldGxvY3VzKDEsMSk7CQkvKiBTd2l0 Y2ggbG9jdXMgdG8gbG9jYWwuICovCi0jZW5kaWYgLyogTE9DVVMgKi8KLSNpZmRlZiBPUzIKLSAg ICAgICAgRGlhbGVyU2VuZChPUFRfS0VSTUlUX0hBTkdVUCwgMCk7Ci0jZW5kaWYgLyogT1MyICov Ci0gICAgfQotI2lmZGVmIEZUUF9QUk9YWQotICAgIHBzd2l0Y2goMSk7Ci0gICAgaWYgKGNvbm5l Y3RlZCkgewotICAgICAgICBpZiAoY3NvY2tldCAhPSAtMSkgewotI2lmZGVmIFRDUElQTElCCi0g ICAgICAgICAgICBzb2NrZXRfY2xvc2UoY3NvY2tldCk7Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwot I2lmZGVmIFVTRV9TSFVURE9XTgotICAgICAgICAgICAgc2h1dGRvd24oY3NvY2tldCwgMSsxKTsK LSNlbmRpZiAvKiBVU0VfU0hVVERPV04gKi8KLSAgICAgICAgICAgIGNsb3NlKGNzb2NrZXQpOwot I2VuZGlmIC8qIFRDUElQTElCICovCi0gICAgICAgICAgICBjc29ja2V0ID0gLTE7Ci0gICAgICAg IH0KLSAgICAgICAgY29ubmVjdGVkID0gMDsKLSAgICAgICAgYW5vbnltb3VzID0gMDsKLSAgICAg ICAgbG9nZ2VkaW4gPSAwOwotICAgICAgICBhdXRoX3R5cGUgPSBOVUxMOwotICAgICAgICBmdHBf Y3BsID0gZnRwX2RwbCA9IEZQTF9DTFI7Ci0gICAgfQotICAgIHByb3hmbGFnID0gMDsKLSAgICBw c3dpdGNoKDApOwotI2VuZGlmIC8qIEZUUF9QUk9YWSAqLwotfQotCi1pbnQKLWZ0cGlzb3Blbigp IHsKLSAgICByZXR1cm4oY29ubmVjdGVkKTsKLX0KLQotc3RhdGljIGludAotZnRwY2xvc2UoKSB7 Ci0gICAgZXh0ZXJuIGludCBxdWl0dGluZzsKLSAgICBpZiAoIWNvbm5lY3RlZCkKLSAgICAgIHJl dHVybigwKTsKLSAgICBmdHBfeGZlcm1vZGUgPSB4ZmVybW9kZTsKLSAgICBpZiAoIWZ0cF92Ym0g JiYgIXF1aWV0KQotICAgICAgcHJpbnRsaW5lcyA9IDE7Ci0gICAgZnRwY21kKCJRVUlUIixOVUxM LDAsMCxmdHBfdmJtKTsKLSAgICBpZiAoY3NvY2tldCkgewotI2lmZGVmIENLX1NTTAotICAgICAg ICBpZiAoc3NsX2Z0cF9hY3RpdmVfZmxhZykgewotICAgICAgICAgICAgU1NMX3NodXRkb3duKHNz bF9mdHBfY29uKTsKLSAgICAgICAgICAgIFNTTF9mcmVlKHNzbF9mdHBfY29uKTsKLSAgICAgICAg ICAgIHNzbF9mdHBfcHJveHkgPSAwOwotICAgICAgICAgICAgc3NsX2Z0cF9hY3RpdmVfZmxhZyA9 IDA7Ci0gICAgICAgICAgICBzc2xfZnRwX2NvbiA9IE5VTEw7Ci0gICAgICAgIH0KLSNlbmRpZiAv KiBDS19TU0wgKi8KLSNpZmRlZiBUQ1BJUExJQgotICAgICAgICBzb2NrZXRfY2xvc2UoY3NvY2tl dCk7Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwotI2lmZGVmIFVTRV9TSFVURE9XTgotICAgICAgICBz aHV0ZG93bihjc29ja2V0LCAxKzEpOwotI2VuZGlmIC8qIFVTRV9TSFVURE9XTiAqLwotICAgICAg ICBjbG9zZShjc29ja2V0KTsKLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotICAgIH0KLSAgICBjc29j a2V0ID0gLTE7Ci0gICAgY29ubmVjdGVkID0gMDsKLSAgICBhbm9ueW1vdXMgPSAwOwotICAgIGxv Z2dlZGluID0gMDsKLSAgICBtZHRtb2sgPSAxOwotICAgIHNpemVvayA9IDE7Ci0gICAgZmVhdG9r ID0gMTsKLSAgICBzdG91YXJnID0gMTsKLSAgICB0eXBlc2VudCA9IDA7Ci0gICAgZGF0YSA9IC0x OwotICAgIGdsb2JhbGRpbiA9IC0xOwotI2lmZGVmIEZUUF9QUk9YWQotICAgIGlmICghcHJveHkp Ci0gICAgICBtYWNudW0gPSAwOwotI2VuZGlmIC8qIEZUUF9QUk9YWSAqLwotICAgIGF1dGhfdHlw ZSA9IE5VTEw7Ci0gICAgZnRwX2RwbCA9IEZQTF9DTFI7Ci0jaWZkZWYgQ0tMT0dESUFMCi0gICAg ZnRwbG9nZW5kKCk7Ci0jZW5kaWYgLyogQ0tMT0dESUFMICovCi0jaWZkZWYgTE9DVVMKLSAgICAv KiBVbnByZWZpeGVkIGZpbGUgbWFuYWdlbWVudCBjb21tYW5kcyBhcmUgZXhlY3V0ZWQgbG9jYWxs eSAqLwotICAgIGlmIChhdXRvbG9jdXMgJiYgIWZ0cF9jbWRsaW4gJiYgIXF1aXR0aW5nKSB7Ci0g ICAgICAgIHNldGxvY3VzKDEsMSk7Ci0gICAgfQotI2VuZGlmIC8qIExPQ1VTICovCi0jaWZkZWYg T1MyCi0gICAgRGlhbGVyU2VuZChPUFRfS0VSTUlUX0hBTkdVUCwgMCk7Ci0jZW5kaWYgLyogT1My ICovCi0gICAgcmV0dXJuKDApOwotfQotCi1pbnQKLWZ0cG9wZW4ocmVtb3RlLCBzZXJ2aWNlLCB1 c2VfdGxzKSBjaGFyICogcmVtb3RlLCAqIHNlcnZpY2U7IGludCB1c2VfdGxzOyB7Ci0gICAgY2hh ciAqIGhvc3Q7Ci0KLSAgICBpZiAoY29ubmVjdGVkKSB7Ci0gICAgICAgIHByaW50ZigiP0FscmVh ZHkgY29ubmVjdGVkIHRvICVzLCB1c2UgRlRQIENMT1NFIGZpcnN0LlxuIiwgZnRwX2hvc3QpOwot ICAgICAgICBmdHBjb2RlID0gLTE7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jaWZkZWYg RlRQSE9TVAotICAgIGhvc3RjbWQgPSAwOwotI2VuZGlmIC8qIEZUUEhPU1QgKi8KLSAgICBhbGlr ZSA9IDA7Ci0gICAgZnRwX3NydnR5cFswXSA9IE5VTDsKLSAgICBpZiAoIXNlcnZpY2UpIHNlcnZp Y2UgPSAiIjsKLSAgICBpZiAoISpzZXJ2aWNlKSBzZXJ2aWNlID0gdXNlX3RscyA/ICJmdHBzIiA6 ICJmdHAiOwotCi0gICAgaWYgKCFpc2RpZ2l0KHNlcnZpY2VbMF0pKSB7Ci0gICAgICAgIHN0cnVj dCBzZXJ2ZW50ICpkZXN0c3A7Ci0gICAgICAgIGRlc3RzcCA9IGdldHNlcnZieW5hbWUoc2Vydmlj ZSwgInRjcCIpOwotICAgICAgICBpZiAoIWRlc3RzcCkgewotICAgICAgICAgICAgaWYgKCFja3N0 cmNtcChzZXJ2aWNlLCJmdHAiLC0xLDApKSB7Ci0gICAgICAgICAgICAgICAgZnRwX3BvcnQgPSAy MTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKHNlcnZpY2UsImZ0cHMiLC0xLDAp KSB7Ci0gICAgICAgICAgICAgICAgZnRwX3BvcnQgPSA5OTA7Ci0gICAgICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgICAgIHByaW50ZigiP0JhZCBwb3J0IG5hbWUgLSBcIiVzXCJcbiIsIHNl cnZpY2UpOwotICAgICAgICAgICAgICAgIGZ0cGNvZGUgPSAtMTsKLSAgICAgICAgICAgICAgICBy ZXR1cm4oMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBm dHBfcG9ydCA9IGRlc3RzcC0+c19wb3J0OwotICAgICAgICAgICAgZnRwX3BvcnQgPSBudG9ocygo dW5zaWduZWQgc2hvcnQpZnRwX3BvcnQpOwkvKiBTTVMgMjAwNy8wMi8xNSAqLwotICAgICAgICB9 Ci0gICAgfSBlbHNlCi0gICAgICAgIGZ0cF9wb3J0ID0gYXRvaShzZXJ2aWNlKTsKLSAgICBpZiAo ZnRwX3BvcnQgPD0gMCkgewotICAgICAgICBwcmludGYoIj9CYWQgcG9ydCBuYW1lIC0gXCIlc1wi XG4iLCBzZXJ2aWNlKTsKLSAgICAgICAgZnRwY29kZSA9IC0xOwotICAgICAgICByZXR1cm4oMCk7 Ci0gICAgfQotICAgIGhvc3QgPSBmdHBfaG9va3VwKHJlbW90ZSwgZnRwX3BvcnQsIHVzZV90bHMp OwotICAgIGlmIChob3N0KSB7Ci0gICAgICAgIGNrc3RybmNweShmdHBfdXNlcl9ob3N0LHJlbW90 ZSxNQVhfRE5TX05BTUVMRU4pOwotICAgICAgICBjb25uZWN0ZWQgPSAxOyAgICAgICAgICAgICAg ICAgIC8qIFNldCBGVFAgZGVmYXVsdHMgKi8KLSAgICAgICAgZnRwX2NwbCA9IGZ0cF9kcGwgPSBG UExfQ0xSOwotICAgICAgICBjdXJ0eXBlID0gRlRUX0FTQzsgICAgICAgICAgICAgIC8qIFNlcnZl ciB1c2VzIEFTQ0lJIG1vZGUgKi8KLSAgICAgICAgZm9ybSA9IEZPUk1fTjsKLSAgICAgICAgbW9k ZSA9IE1PREVfUzsKLSAgICAgICAgc3RydSA9IFNUUlVfRjsKLSAgICAgICAgc3RyY3B5KGJ5dGVu YW1lLCAiOCIpOwotICAgICAgICBieXRlc2l6ZSA9IDg7Ci0KLSNpZmRlZiBGVFBfU0VDVVJJVFkK LSAgICAgICAgaWYgKGZ0cF9hdXQpIHsKLSAgICAgICAgICAgIGlmIChmdHBfYXV0aCgpKSB7Ci0g ICAgICAgICAgICAgICAgaWYgKGZ0cF9jcnkgCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAg ICAgICAmJiBja19jcnlwdF9pc19pbnN0YWxsZWQoKQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAg ICAgICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcXVpZXQpCi0gICAg ICAgICAgICAgICAgICAgICAgcHJpbnRmKCJGVFAgQ29tbWFuZCBjaGFubmVsIGlzIFByaXZhdGUg KGVuY3J5cHRlZClcbiIpOwotICAgICAgICAgICAgICAgICAgICBmdHBfY3BsID0gRlBMX1BSVjsK LSAgICAgICAgICAgICAgICAgICAgaWYgKHNldHBic3ooREVGQVVMVF9QQlNaKSA8IDApIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgIC8qIGEgZmFpbHVyZSBoZXJlIGlzIG1vc3QgbGlrZWx5IGNh dXNlZCBieSBhIG1peHVwICovCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBpbiB0aGUgc2Vz c2lvbiBrZXkgdXNlZCBieSBjbGllbnQgYW5kIHNlcnZlciAgICAqLwotCQkJcHJpbnRmKCI/UHJv dGVjdGlvbiBidWZmZXIgc2l6ZSBuZWdvdGlhdGlvbiBmYWlsZWRcbiIpOwotICAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgICAgIGlmIChmdHBjbWQoIlBST1QgUCIsTlVMTCwwLDAsZnRwX3ZibSkgPT0gUkVQTFlf Q09NUExFVEUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcXVpZXQpCi0gICAgICAg ICAgICAgICAgICAgICAgICAgIHByaW50ZigiRlRQIERhdGEgY2hhbm5lbCBpcyBQcml2YXRlIChl bmNyeXB0ZWQpXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0cF9kcGwgPSBGUExfUFJW OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICBwcmlu dGYoIj9VbmFibGUgdG8gZW5hYmxlIGVuY3J5cHRpb24gb24gZGF0YSBjaGFubmVsXG4iKTsKLSAg ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBmdHBfY3BsID0gRlBM X1NBRjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo IWNvbm5lY3RlZCkKLQkgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBGVFBf U0VDVVJJVFkgKi8KLSAgICAgICAgaWYgKGZ0cF9sb2cpCQkJLyogXl5eICovCi0gICAgICAgICAg ZnRwX2xvZ2luKHJlbW90ZSk7Ci0KLSAgICAgICAgaWYgKCFjb25uZWN0ZWQpCi0JICBnb3RvIGZh aWw7Ci0KLQlmdHBfeGZlcm1vZGUgPSB4ZmVybW9kZTsKLQotI2lmZGVmIENLTE9HRElBTAotICAg ICAgICBkb2xvZ2Z0cCgpOwotI2VuZGlmIC8qIENLTE9HRElBTCAqLwotI2lmZGVmIE9TMgotICAg ICAgICBEaWFsZXJTZW5kKE9QVF9LRVJNSVRfQ09OTkVDVCwgMCk7Ci0jZW5kaWYgLyogT1MyICov Ci0gICAgICAgIHBhc3NpdmVtb2RlID0gZnRwX3BzdjsKLSAgICAgICAgc2VuZHBvcnQgPSBmdHBf c3BjOwotCW1kdG1vayA9IDE7Ci0Jc2l6ZW9rID0gMTsKLQlzdG91YXJnID0gMTsKLQl0eXBlc2Vu dCA9IDA7Ci0KLSAgICAgICAgaWYgKHVjYnVmID09IE5VTEwpIHsKLSAgICAgICAgICAgIGFjdHVh bGJ1ZiA9IERFRkFVTFRfUEJTWjsKLSAgICAgICAgICAgIHdoaWxlIChhY3R1YWxidWYgJiYgKHVj YnVmID0gKENIQVIgKiltYWxsb2MoYWN0dWFsYnVmKSkgPT0gTlVMTCkKLSAgICAgICAgICAgICAg YWN0dWFsYnVmID4+PSAyOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbWF4YnVmKQotICAgICAg ICAgIHVjYnVmc2l6ID0gYWN0dWFsYnVmIC0gRlVER0VfRkFDVE9SOwotCWRlYnVnKEYxMDEsImZ0 cG9wZW4gdWNidWZzaXoiLCIiLHVjYnVmc2l6KTsKLSAgICAgICAgcmV0dXJuKDEpOwotICAgIH0K LSAgZmFpbDoKLSAgICBwcmludGYoIj9DYW4ndCBGVFAgY29ubmVjdCB0byAlczolc1xuIixyZW1v dGUsc2VydmljZSk7Ci0gICAgZnRwY29kZSA9IC0xOwotICAgIHJldHVybigwKTsKLX0KLQotI2lm ZGVmIENLX1NTTAotaW50Ci1zc2xfYXV0aCgpIHsKLSAgICBpbnQgaTsKLSAgICBjaGFyKiBwOwot Ci0gICAgaWYgKHNzbF9kZWJ1Z19mbGFnKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCJTU0wg REVCVUcgQUNUSVZFXG4iKTsKLSAgICAgICAgZmZsdXNoKHN0ZGVycik7Ci0gICAgICAgIC8qIGZv ciB0aGUgbW9tZW50IEkgd2FudCB0aGUgb3V0cHV0IG9uIHNjcmVlbiAqLwotICAgIH0KLSAgICBp ZiAoc3NsX2Z0cF9kYXRhX2NvbiAhPSBOVUxMKSB7Ci0gICAgICAgIFNTTF9mcmVlKHNzbF9mdHBf ZGF0YV9jb24pOwotICAgICAgICBzc2xfZnRwX2RhdGFfY29uID0gTlVMTDsKLSAgICB9Ci0gICAg aWYgKHNzbF9mdHBfY29uICE9IE5VTEwpIHsKLSAgICAgICAgU1NMX2ZyZWUoc3NsX2Z0cF9jb24p OwotICAgICAgICBzc2xfZnRwX2Nvbj1OVUxMOwotICAgIH0KLSAgICBpZiAoc3NsX2Z0cF9jdHgg IT0gTlVMTCkgewotICAgICAgICBTU0xfQ1RYX2ZyZWUoc3NsX2Z0cF9jdHgpOwotICAgICAgICBz c2xfZnRwX2N0eCA9IE5VTEw7Ci0gICAgfQotCi0gICAgLyogVGhlIFNTTF9PUF9ET05UX0lOU0VS VF9FTVBUWV9GUkFHTUVOVFMgCi0gICAgICogd2FzIGFkZGVkIHRvIE9wZW5TU0wgMC45LjZlIGFu ZCAwLjkuNy4gIEl0IGRvZXMgbm90IGV4aXN0IGluIHByZXZpb3VzCi0gICAgICogdmVyc2lvbnMK LSAgICAgKi8KLSNpZm5kZWYgU1NMX09QX0RPTlRfSU5TRVJUX0VNUFRZX0ZSQUdNRU5UUwotI2Rl ZmluZSBTU0xfT1BfRE9OVF9JTlNFUlRfRU1QVFlfRlJBR01FTlRTIDBMCi0jZW5kaWYKLSAgICBp ZiAoYXV0aF90eXBlICYmICFzdHJjbXAoYXV0aF90eXBlLCJUTFMiKSkgewotICAgICAgICBzc2xf ZnRwX2N0eD1TU0xfQ1RYX25ldyhTU0x2M19jbGllbnRfbWV0aG9kKCkpOwotICAgICAgICBpZiAo IXNzbF9mdHBfY3R4KQotICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgU1NMX0NUWF9zZXRf b3B0aW9ucyhzc2xfZnRwX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfT1Bf U0lOR0xFX0RIX1VTRXxTU0xfT1BfRVBIRU1FUkFMX1JTQQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3NsX2Z0cF9jdHggPSBTU0xfQ1RYX25l dyhmdHBfYnVnX3VzZV9zc2xfdjIgPyBTU0x2MjNfY2xpZW50X21ldGhvZCgpIDogCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMdjNfY2xpZW50X21ldGhvZCgpKTsKLSAgICAg ICAgaWYgKCFzc2xfZnRwX2N0eCkKLSAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIFNTTF9D VFhfc2V0X29wdGlvbnMoc3NsX2Z0cF9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg KGZ0cF9idWdfdXNlX3NzbF92MiA/IDAgOiBTU0xfT1BfTk9fU1NMdjIpfAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFNTTF9PUF9TSU5HTEVfREhfVVNFfFNTTF9PUF9FUEhFTUVSQUxfUlNB Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICB9Ci0gICAgU1NMX0NUWF9zZXRf ZGVmYXVsdF9wYXNzd2RfY2Ioc3NsX2Z0cF9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHBlbV9wYXNzd29yZF9jYiAqKXNzbF9wYXNzd2RfY2FsbGJhY2spOwotICAgIFNT TF9DVFhfc2V0X2luZm9fY2FsbGJhY2soc3NsX2Z0cF9jdHgsc3NsX2NsaWVudF9pbmZvX2NhbGxi YWNrKTsKLSAgICBTU0xfQ1RYX3NldF9zZXNzaW9uX2NhY2hlX21vZGUoc3NsX2Z0cF9jdHgsU1NM X1NFU1NfQ0FDSEVfQ0xJRU5UKTsKLQotI2lmZGVmIE9TMgotI2lmZGVmIE5UCi0gICAgLyogVGhl IGRlZmF1bHRzIGluIHRoZSBTU0wgY3J5cHRvIGxpYnJhcnkgYXJlIG5vdCBhcHByb3ByaWF0ZSBm b3IgT1MvMiAqLwotICAgIHsKLSAgICAgICAgY2hhciBwYXRoW0NLTUFYUEFUSF07Ci0gICAgICAg IGV4dGVybiBjaGFyIGV4ZWRpcltdOwotCi0gICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQQVRI LGV4ZWRpciwiY2VydHMiLE5VTEwsTlVMTCk7Ci0gICAgICAgIGlmIChTU0xfQ1RYX2xvYWRfdmVy aWZ5X2xvY2F0aW9ucyhzc2xfZnRwX2N0eCxOVUxMLHBhdGgpID09IDApICB7Ci0gICAgICAgICAg ICBkZWJ1ZyhGMTEwLCJmdHAgc3NsX2F1dGggdW5hYmxlIHRvIGxvYWQgcGF0aCIscGF0aCwwKTsK LSAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKLSAgICAgICAgICAgICAgICBwcmludGYo Ij9VbmFibGUgdG8gbG9hZCB2ZXJpZnktZGlyOiAlc1xyXG4iLHBhdGgpOwotICAgICAgICB9Ci0K LSAgICAgICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgsCi0gICAgICAgICAgICAgICAgIChjaGFy ICopR2V0QXBwRGF0YSgxKSwia2VybWl0IDk1L2NlcnRzIixOVUxMLE5VTEwpOwotICAgICAgICBp ZiAoU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoc3NsX2Z0cF9jdHgsTlVMTCxwYXRoKSA9 PSAwKSAgewotICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwIHNzbF9hdXRoIHVuYWJsZSB0byBs b2FkIHBhdGgiLHBhdGgsMCk7Ci0gICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCi0gICAg ICAgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgdmVyaWZ5LWRpcjogJXNcclxuIixw YXRoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQQVRILAotICAg ICAgICAgICAgICAgICAoY2hhciAqKUdldEFwcERhdGEoMCksImtlcm1pdCA5NS9jZXJ0cyIsTlVM TCxOVUxMKTsKLSAgICAgICAgaWYgKFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHNzbF9m dHBfY3R4LE5VTEwscGF0aCkgPT0gMCkgIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBz c2xfYXV0aCB1bmFibGUgdG8gbG9hZCBwYXRoIixwYXRoLDApOwotICAgICAgICAgICAgaWYgKHNz bF9kZWJ1Z19mbGFnKQotICAgICAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIHZl cmlmeS1kaXI6ICVzXHJcbiIscGF0aCk7Ci0gICAgICAgIH0KLQotICAgICAgICBja21ha21zZyhw YXRoLENLTUFYUEFUSCxleGVkaXIsImNhX2NlcnRzLnBlbSIsTlVMTCxOVUxMKTsKLSAgICAgICAg aWYgKFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHNzbF9mdHBfY3R4LHBhdGgsTlVMTCkg PT0gMCkgewotICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwIHNzbF9hdXRoIHVuYWJsZSB0byBs b2FkIHBhdGgiLHBhdGgsMCk7Ci0gICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCi0gICAg ICAgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgdmVyaWZ5LWZpbGU6ICVzXHJcbiIs cGF0aCk7Ci0gICAgICAgIH0KLQotICAgICAgICBja21ha21zZyhwYXRoLENLTUFYUEFUSCwoY2hh ciAqKUdldEFwcERhdGEoMSksCi0JCSAia2VybWl0IDk1L2NhX2NlcnRzLnBlbSIsTlVMTCxOVUxM KTsKLSAgICAgICAgaWYgKFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHNzbF9mdHBfY3R4 LHBhdGgsTlVMTCkgPT0gMCkgewotICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwIHNzbF9hdXRo IHVuYWJsZSB0byBsb2FkIHBhdGgiLHBhdGgsMCk7Ci0gICAgICAgICAgICBpZiAoc3NsX2RlYnVn X2ZsYWcpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgdmVyaWZ5LWZp bGU6ICVzXHJcbiIscGF0aCk7Ci0gICAgICAgIH0KLQotICAgICAgICBja21ha21zZyhwYXRoLENL TUFYUEFUSCwoY2hhciAqKUdldEFwcERhdGEoMCksCi0JCSAia2VybWl0IDk1L2NhX2NlcnRzLnBl bSIsTlVMTCxOVUxMKTsKLSAgICAgICAgaWYgKFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25z KHNzbF9mdHBfY3R4LHBhdGgsTlVMTCkgPT0gMCkgewotICAgICAgICAgICAgZGVidWcoRjExMCwi ZnRwIHNzbF9hdXRoIHVuYWJsZSB0byBsb2FkIHBhdGgiLHBhdGgsMCk7Ci0gICAgICAgICAgICBp ZiAoc3NsX2RlYnVnX2ZsYWcpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxv YWQgdmVyaWZ5LWZpbGU6ICVzXHJcbiIscGF0aCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZSAv KiBOVCAqLwotICAgIC8qIFRoZSBkZWZhdWx0cyBpbiB0aGUgU1NMIGNyeXB0byBsaWJyYXJ5IGFy ZSBub3QgYXBwcm9wcmlhdGUgZm9yIE9TLzIgKi8KLSAgICB7Ci0KLSAgICAgICAgY2hhciBwYXRo W0NLTUFYUEFUSF07Ci0gICAgICAgIGV4dGVybiBjaGFyIGV4ZWRpcltdOwotCi0gICAgICAgIGNr bWFrbXNnKHBhdGgsQ0tNQVhQQVRILGV4ZWRpciwiY2VydHMiLE5VTEwsTlVMTCk7Ci0gICAgICAg IGlmIChTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhzc2xfZnRwX2N0eCxOVUxMLHBhdGgp ID09IDApICB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgc3NsX2F1dGggdW5hYmxlIHRv IGxvYWQgcGF0aCIscGF0aCwwKTsKLSAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKLSAg ICAgICAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9hZCB2ZXJpZnktZGlyOiAlc1xyXG4i LHBhdGgpOwotICAgICAgICB9Ci0gICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQQVRILGV4ZWRp ciwiY2FfY2VydHMucGVtIixOVUxMLE5VTEwpOwotICAgICAgICBpZiAoU1NMX0NUWF9sb2FkX3Zl cmlmeV9sb2NhdGlvbnMoc3NsX2Z0cF9jdHgscGF0aCxOVUxMKSA9PSAwKSB7Ci0gICAgICAgICAg ICBkZWJ1ZyhGMTEwLCJmdHAgc3NsX2F1dGggdW5hYmxlIHRvIGxvYWQgcGF0aCIscGF0aCwwKTsK LSAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKLSAgICAgICAgICAgICAgICBwcmludGYo Ij9VbmFibGUgdG8gbG9hZCB2ZXJpZnktZmlsZTogJXNcclxuIixwYXRoKTsKLSAgICAgICAgfQot ICAgIH0KLSNlbmRpZiAvKiBOVCAqLwotI2Vsc2UgLyogT1MyICovCi0gICAgU1NMX0NUWF9zZXRf ZGVmYXVsdF92ZXJpZnlfcGF0aHMoc3NsX2Z0cF9jdHgpOwotI2VuZGlmIC8qIE9TMiAqLwotCi0g ICAgaWYgKHNzbF92ZXJpZnlfZmlsZSAmJgotICAgICAgICBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xv Y2F0aW9ucyhzc2xfZnRwX2N0eCxzc2xfdmVyaWZ5X2ZpbGUsTlVMTCkgPT0gMCkgewotICAgICAg ICBkZWJ1ZyhGMTEwLAotICAgICAgICAgICAgICAiZnRwIHNzbCBhdXRoIHVuYWJsZSB0byBsb2Fk IHNzbF92ZXJpZnlfZmlsZSIsCi0gICAgICAgICAgICAgIHNzbF92ZXJpZnlfZmlsZSwKLSAgICAg ICAgICAgICAgMAotICAgICAgICAgICAgICApOwotICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcp Ci0gICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgdmVyaWZ5LWZpbGU6ICVzXHJcbiIs c3NsX3ZlcmlmeV9maWxlKTsKLSAgICB9Ci0gICAgaWYgKHNzbF92ZXJpZnlfZGlyICYmCi0gICAg ICAgIFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHNzbF9mdHBfY3R4LE5VTEwsc3NsX3Zl cmlmeV9kaXIpID09IDApIHsKLSAgICAgICAgZGVidWcoRjExMCwKLSAgICAgICAgICAgICAgImZ0 cCBzc2wgYXV0aCB1bmFibGUgdG8gbG9hZCBzc2xfdmVyaWZ5X2RpciIsCi0gICAgICAgICAgICAg IHNzbF92ZXJpZnlfZGlyLAotICAgICAgICAgICAgICAwCi0gICAgICAgICAgICAgICk7Ci0gICAg ICAgIGlmIChzc2xfZGVidWdfZmxhZykKLSAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9h ZCB2ZXJpZnktZGlyOiAlc1xyXG4iLHNzbF92ZXJpZnlfZGlyKTsKLSAgICB9Ci0KLSAgICAvKiBz ZXQgdXAgdGhlIG5ldyBDUkwgU3RvcmUgKi8KLSAgICBjcmxfc3RvcmUgPSAoWDUwOV9TVE9SRSAq KVg1MDlfU1RPUkVfbmV3KCk7Ci0gICAgaWYgKGNybF9zdG9yZSkgewotI2lmZGVmIE9TMgotICAg ICAgICBjaGFyIHBhdGhbQ0tNQVhQQVRIXTsKLSAgICAgICAgZXh0ZXJuIGNoYXIgZXhlZGlyW107 Ci0KLSAgICAgICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgsZXhlZGlyLCJjcmxzIixOVUxMLE5V TEwpOwotICAgICAgICBpZiAoWDUwOV9TVE9SRV9sb2FkX2xvY2F0aW9ucyhjcmxfc3RvcmUsTlVM TCxwYXRoKSA9PSAwKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgc3NsIGF1dGggdW5h YmxlIHRvIGxvYWQgZGlyIixwYXRoLDApOwotICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFn KQotICAgICAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIGNybC1kaXI6ICVzXHJc biIscGF0aCk7Ci0gICAgICAgIH0KLSNpZmRlZiBOVAotICAgICAgICBja21ha21zZyhwYXRoLENL TUFYUEFUSCwKLQkJIChjaGFyICopR2V0QXBwRGF0YSgxKSwia2VybWl0IDk1L2NybHMiLE5VTEws TlVMTCk7Ci0gICAgICAgIGlmIChYNTA5X1NUT1JFX2xvYWRfbG9jYXRpb25zKGNybF9zdG9yZSxO VUxMLHBhdGgpID09IDApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBzc2wgYXV0aCB1 bmFibGUgdG8gbG9hZCBkaXIiLHBhdGgsMCk7Ci0gICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2Zs YWcpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgY3JsLWRpcjogJXNc clxuIixwYXRoKTsKLSAgICAgICAgfQotICAgICAgICBja21ha21zZyhwYXRoLENLTUFYUEFUSCwK LQkJIChjaGFyICopR2V0QXBwRGF0YSgwKSwia2VybWl0IDk1L2NybHMiLE5VTEwsTlVMTCk7Ci0g ICAgICAgIGlmIChYNTA5X1NUT1JFX2xvYWRfbG9jYXRpb25zKGNybF9zdG9yZSxOVUxMLHBhdGgp ID09IDApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBzc2wgYXV0aCB1bmFibGUgdG8g bG9hZCBkaXIiLHBhdGgsMCk7Ci0gICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCi0gICAg ICAgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgY3JsLWRpcjogJXNcclxuIixwYXRo KTsKLSAgICAgICAgfQotI2VuZGlmIC8qIE5UICovCi0gICAgICAgIAotICAgICAgICBja21ha21z ZyhwYXRoLENLTUFYUEFUSCxleGVkaXIsImNhX2NybHMucGVtIixOVUxMLE5VTEwpOwotICAgICAg ICBpZiAoWDUwOV9TVE9SRV9sb2FkX2xvY2F0aW9ucyhjcmxfc3RvcmUscGF0aCxOVUxMKSA9PSAw KSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgc3NsIGF1dGggdW5hYmxlIHRvIGxvYWQg ZmlsZSIscGF0aCwwKTsKLSAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKLSAgICAgICAg ICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9hZCBjcmwtZmlsZTogJXNcclxuIixwYXRoKTsK LSAgICAgICAgfQotI2lmZGVmIE5UCi0gICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQQVRILChj aGFyICopR2V0QXBwRGF0YSgxKSwKLQkJICJrZXJtaXQgOTUvY2FfY3Jscy5wZW0iLE5VTEwsTlVM TCk7Ci0gICAgICAgIGlmIChYNTA5X1NUT1JFX2xvYWRfbG9jYXRpb25zKGNybF9zdG9yZSxwYXRo LE5VTEwpID09IDApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBzc2wgYXV0aCB1bmFi bGUgdG8gbG9hZCBmaWxlIixwYXRoLDApOwotICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFn KQotICAgICAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIGNybC1maWxlOiAlc1xy XG4iLHBhdGgpOwotICAgICAgICB9Ci0gICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQQVRILChj aGFyICopR2V0QXBwRGF0YSgwKSwKLQkJICJrZXJtaXQgOTUvY2FfY3Jscy5wZW0iLE5VTEwsTlVM TCk7Ci0gICAgICAgIGlmIChYNTA5X1NUT1JFX2xvYWRfbG9jYXRpb25zKGNybF9zdG9yZSxwYXRo LE5VTEwpID09IDApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBzc2wgYXV0aCB1bmFi bGUgdG8gbG9hZCBmaWxlIixwYXRoLDApOwotICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFn KQotICAgICAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIGNybC1maWxlOiAlc1xy XG4iLHBhdGgpOwotICAgICAgICB9Ci0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBPUzIgKi8K LQotICAgICAgICBpZiAoc3NsX2NybF9maWxlIHx8IHNzbF9jcmxfZGlyKSB7Ci0gICAgICAgICAg ICBpZiAoc3NsX2NybF9maWxlICYmCi0gICAgICAgICAgICAgICAgWDUwOV9TVE9SRV9sb2FkX2xv Y2F0aW9ucyhjcmxfc3RvcmUsc3NsX2NybF9maWxlLE5VTEwpID09IDApIHsKLSAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTEwLAotICAgICAgICAgICAgICAgICAgICAgICJmdHAgc3NsIGF1dGggdW5h YmxlIHRvIGxvYWQgc3NsX2NybF9maWxlIiwKLSAgICAgICAgICAgICAgICAgICAgICBzc2xfY3Js X2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgMAotICAgICAgICAgICAgICAgICAgICAgICk7 Ci0gICAgICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQotICAgICAgICAgICAgICAgICAg cHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgY3JsLWZpbGU6ICVzXHJcbiIsc3NsX2NybF9maWxlKTsK LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzc2xfY3JsX2RpciAmJgotICAgICAgICAg ICAgICAgIFg1MDlfU1RPUkVfbG9hZF9sb2NhdGlvbnMoY3JsX3N0b3JlLE5VTEwsc3NsX2NybF9k aXIpID09IDApIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLAotICAgICAgICAgICAgICAg ICAgICAgICJmdHAgc3NsIGF1dGggdW5hYmxlIHRvIGxvYWQgc3NsX2NybF9kaXIiLAotICAgICAg ICAgICAgICAgICAgICAgIHNzbF9jcmxfZGlyLAotICAgICAgICAgICAgICAgICAgICAgIDAKLSAg ICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxh ZykKLSAgICAgICAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIGNybC1kaXI6ICVz XHJcbiIsc3NsX2NybF9kaXIpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAg ICAgICAgICAgWDUwOV9TVE9SRV9zZXRfZGVmYXVsdF9wYXRocyhjcmxfc3RvcmUpOwotICAgICAg ICB9Ci0gICAgfQotICAgIFNTTF9DVFhfc2V0X3ZlcmlmeShzc2xfZnRwX2N0eCxzc2xfdmVyaWZ5 X2ZsYWcsCi0gICAgICAgICAgICAgICAgICAgICAgIHNzbF9jbGllbnRfdmVyaWZ5X2NhbGxiYWNr KTsKLSAgICBzc2xfdmVyaWZ5X2RlcHRoID0gLTE7Ci0gICAgc3NsX2Z0cF9jb249KFNTTCAqKVNT TF9uZXcoc3NsX2Z0cF9jdHgpOwotICAgIHRsc19sb2FkX2NlcnRzKHNzbF9mdHBfY3R4LHNzbF9m dHBfY29uLDApOwotICAgIFNTTF9zZXRfZmQoc3NsX2Z0cF9jb24sY3NvY2tldCk7Ci0gICAgU1NM X3NldF92ZXJpZnkoc3NsX2Z0cF9jb24sc3NsX3ZlcmlmeV9mbGFnLE5VTEwpOwotICAgIGlmIChz c2xfY2lwaGVyX2xpc3QpIHsKLSAgICAgICAgU1NMX3NldF9jaXBoZXJfbGlzdChzc2xfZnRwX2Nv bixzc2xfY2lwaGVyX2xpc3QpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNoYXIgKiBwOwotICAg ICAgICBpZiAocCA9IGdldGVudigiU1NMX0NJUEhFUiIpKSB7Ci0gICAgICAgICAgICBTU0xfc2V0 X2NpcGhlcl9saXN0KHNzbF9mdHBfY29uLHApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg ICAgU1NMX3NldF9jaXBoZXJfbGlzdChzc2xfZnRwX2NvbixERUZBVUxUX0NJUEhFUl9MSVNUKTsK LSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpIHsKLSAgICAgICAgZnBy aW50ZihzdGRlcnIsIj0+U1RBUlQgU1NML1RMUyBjb25uZWN0IG9uIENPTU1BTkRcbiIpOwotICAg ICAgICBmZmx1c2goc3RkZXJyKTsKLSAgICB9Ci0gICAgaWYgKFNTTF9jb25uZWN0KHNzbF9mdHBf Y29uKSA8PSAwKSB7Ci0gICAgICAgIHN0YXRpYyBjaGFyIGVycmJ1ZlsxMDI0XTsKLSAgICAgICAg Y2ttYWttc2coZXJyYnVmLDEwMjQsImZ0cDogU1NML1RMUyBjb25uZWN0IENPTU1BTkQgZXJyb3I6 ICIsCi0gICAgICAgICAgICAgICAgIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLE5V TEwpLE5VTEwsTlVMTCk7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCIlc1xuIiwgZXJyYnVmKTsK LSAgICAgICAgZmZsdXNoKHN0ZGVycik7Ci0gICAgICAgIHNzbF9mdHBfYWN0aXZlX2ZsYWc9MDsK LSAgICAgICAgU1NMX2ZyZWUoc3NsX2Z0cF9jb24pOwotICAgICAgICBzc2xfZnRwX2NvbiA9IE5V TEw7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3NsX2Z0cF9hY3RpdmVfZmxhZyA9IDE7Ci0KLSAg ICAgICAgaWYgKCFzc2xfY2VydHNva19mbGFnICYmICF0bHNfaXNfa3JiNSgxKSkgewotICAgICAg ICAgICAgY2hhciAqc3ViamVjdCA9IHNzbF9nZXRfc3ViamVjdF9uYW1lKHNzbF9mdHBfY29uKTsK LQotICAgICAgICAgICAgaWYgKCFzdWJqZWN0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNzbF92 ZXJpZnlfZmxhZyAmIFNTTF9WRVJJRllfRkFJTF9JRl9OT19QRUVSX0NFUlQpIHsKLSAgICAgICAg ICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX2F1dGgiLCJbU1NMIC0gRkFJTEVEXSIsMCk7Ci0g ICAgICAgICAgICAgICAgICAgIHJldHVybihzc2xfZnRwX2FjdGl2ZV9mbGFnID0gMCk7Ci0gICAg ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHVxX29rKCJXYXJu aW5nOiBTZXJ2ZXIgZGlkbid0IHByb3ZpZGUgYSBjZXJ0aWZpY2F0ZVxuIiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiQ29udGludWU/IChZL04pIiwzLE5VTEwsMCkgPD0gMCkgewot ICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwgInNzbF9hdXRoIiwiW1NTTCAtIEZB SUxFRF0iLDApOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHNzbF9mdHBfYWN0aXZl X2ZsYWcgPSAwKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIH0gZWxzZSBpZiAoc3NsX2NoZWNrX3NlcnZlcl9uYW1lKHNzbF9mdHBfY29uLCBm dHBfdXNlcl9ob3N0KSkgewotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9hdXRoIiwi W1NTTCAtIEZBSUxFRF0iLDApOwotICAgICAgICAgICAgICAgIHJldHVybihzc2xfZnRwX2FjdGl2 ZV9mbGFnID0gMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZGVidWcoRjEx MCwic3NsX2F1dGgiLCJbU1NMIC0gT0tdIiwwKTsKLSAgICAgICAgc3NsX2Rpc3BsYXlfY29ubmVj dF9kZXRhaWxzKHNzbF9mdHBfY29uLDAsc3NsX3ZlcmJvc2VfZmxhZyk7Ci0gICAgfQotICAgIGlm IChzc2xfZGVidWdfZmxhZykgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwiPT5ET05FIFNTTC9U TFMgY29ubmVjdCBvbiBDT01NQU5EXG4iKTsKLSAgICAgICAgZmZsdXNoKHN0ZGVycik7Ci0gICAg fQotICAgIHJldHVybihzc2xfZnRwX2FjdGl2ZV9mbGFnKTsKLX0KLSNlbmRpZiAvKiBDS19TU0wg Ki8KLQotc3RhdGljIHNpZ3R5cGUKLWNtZGNhbmNlbChzaWcpIGludCBzaWc7IHsKLSNpZmRlZiBP UzIKLSAgICAvKiBJbiBVbml4IHdlICJjaGFpbiIgdG8gdHJhcCgpLCB3aGljaCBwcmludHMgdGhp cyAqLwotICAgIHByaW50ZigiXkMuLi5cbiIpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgIGRlYnVn KEYxMDAsImZ0cCBjbWRjYW5jZWwgY2F1Z2h0IFNJR0lOVCAiLCIiLDApOwotICAgIGZmbHVzaChz dGRvdXQpOwotICAgIHNlY3VyZV9nZXRjKDAsMSk7CQkJLyogSW5pdGlhbGl6ZSBuZXQgaW5wdXQg YnVmZmVycyAqLwotICAgIGNhbmNlbGZpbGUrKzsKLSAgICBjYW5jZWxncm91cCsrOwotICAgIG1s c3Jlc2V0KCk7Ci0jaWZuZGVmIE9TMgotI2lmZGVmIEZUUF9QUk9YWQotICAgIGlmIChwdGZsYWcp ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3h5Li4uICovCi0gICAgICBsb25nam1wKHB0 Y2FuY2VsLDEpOwotI2VuZGlmIC8qIEZUUF9QUk9YWSAqLwotICAgIGRlYnVnKEYxMDAsImZ0cCBj bWRjYW5jZWwgY2hhaW4gdG8gdHJhcCgpLi4uIiwiIiwwKTsKLSAgICB0cmFwKFNJR0lOVCk7Ci0g ICAgLyogTk9UUkVBQ0hFRCAqLwotICAgIGRlYnVnKEYxMDAsImZ0cCBjbWRjYW5jZWwgcmV0dXJu IGZyb20gdHJhcCgpLi4uIiwiIiwwKTsKLSNlbHNlCi0gICAgZGVidWcoRjEwMCwiZnRwIGNtZGNh bmNlbCBQb3N0Q3RybENTZW0oKS4uLiIsIiIsMCk7Ci0gICAgUG9zdEN0cmxDU2VtKCk7Ci0jZW5k aWYgLyogT1MyICovCi19Ci0KLXN0YXRpYyBpbnQKLSNpZmRlZiBDS19BTlNJQwotc2NvbW1hbmQo Y2hhciAqIHMpICAgICAgICAgICAgICAgICAgICAgIC8qIFdhcyBzZWN1cmVfY29tbWFuZCgpICov Ci0jZWxzZQotc2NvbW1hbmQocykgY2hhciAqIHM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsK LSAgICBpbnQgbGVuZ3RoID0gMCwgbGVuMjsKLSAgICBjaGFyIGluW0ZUUF9CVUZTSVpdLCBvdXRb RlRQX0JVRlNJWl07Ci0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKHNzbF9mdHBfYWN0aXZlX2ZsYWcp IHsKLSAgICAgICAgaW50IGVycm9yLCByYzsKLSAgICAgICAgbGVuZ3RoID0gc3RybGVuKHMpICsg MjsKLSAgICAgICAgbGVuZ3RoID0gY2ttYWttc2cob3V0LEZUUF9CVUZTSVoscywiXHJcbiIsTlVM TCxOVUxMKTsKLSAgICAgICAgcmMgPSBTU0xfd3JpdGUoc3NsX2Z0cF9jb24sb3V0LGxlbmd0aCk7 Ci0gICAgICAgIGVycm9yID0gU1NMX2dldF9lcnJvcihzc2xfZnRwX2NvbixyYyk7Ci0gICAgICAg IHN3aXRjaCAoZXJyb3IpIHsKLSAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9OT05FOgotICAgICAg ICAgICAgcmV0dXJuKDEpOwotICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6Ci0g ICAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgotICAgICAgICAgIGNhc2UgU1NMX0VS Uk9SX1NZU0NBTEw6Ci0jaWZkZWYgTlQKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBp bnQgZ2xlID0gR2V0TGFzdEVycm9yKCk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogTlQgKi8K LSAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQOgotICAgICAgICAgIGNh c2UgU1NMX0VSUk9SX1NTTDoKLSAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVSTjoK LSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgbG9zdHBlZXIoKTsKLSAgICAgICAgfQot ICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0gICAgaWYg KGF1dGhfdHlwZSAmJiBmdHBfY3BsICE9IEZQTF9DTFIpIHsKLSNpZmRlZiBGVFBfU1JQCi0gICAg ICAgIGlmIChja19zcnBfaXNfaW5zdGFsbGVkKCkgJiYgKHN0cmNtcChhdXRoX3R5cGUsIlNSUCIp ID09IDApKQotICAgICAgICAgIGlmICgobGVuZ3RoID0gc3JwX2VuY29kZShmdHBfY3BsID09IEZQ TF9QUlYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDSEFSICopcywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKENIQVIgKilvdXQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihzKSkpIDwgMCkgewotICAgICAgICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgIlNSUCBmYWlsZWQgdG8gZW5jb2RlIG1lc3NhZ2VcbiIpOwotICAg ICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgICAgfQotI2VuZGlmIC8qIEZUUF9TUlAgKi8K LSNpZmRlZiBGVFBfS1JCNAotICAgICAgICBpZiAoY2tfa3JiNF9pc19pbnN0YWxsZWQoKSAmJgot ICAgICAgICAgICAgKHN0cmNtcChhdXRoX3R5cGUsICJLRVJCRVJPU19WNCIpID09IDApKSB7Ci0g ICAgICAgICAgICBpZiAoZnRwX2NwbCA9PSBGUExfUFJWKSB7Ci0gICAgICAgICAgICAgICAgbGVu Z3RoID0KLSAgICAgICAgICAgICAgICAgIGtyYl9ta19wcml2KChDSEFSICopcywgKENIQVIgKilv dXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4ocyksIGZ0cF9zY2hlZCwK LSNpZmRlZiBLUkI1MjQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0cF9jcmVkLnNl c3Npb24sCi0jZWxzZSAvKiBLUkI1MjQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZmdHBfY3JlZC5zZXNzaW9uLAotI2VuZGlmIC8qIEtSQjUyNCAqLwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJm15Y3RsYWRkciwgJmhpc2N0bGFkZHIpOwotICAgICAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgICAgICBsZW5ndGggPQotICAgICAgICAgICAgICAgICAga3JiX21r X3NhZmUoKENIQVIgKilzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKENIQVIgKilv dXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4ocyksCi0jaWZkZWYgS1JC NTI0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdHBfY3JlZC5zZXNzaW9uLAotI2Vs c2UgLyogS1JCNTI0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnRwX2NyZWQu c2Vzc2lvbiwKLSNlbmRpZiAvKiBLUkI1MjQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZteWN0bGFkZHIsICZoaXNjdGxhZGRyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg IGlmIChsZW5ndGggPT0gLTEpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImty Yl9ta18lcyBmYWlsZWQgZm9yIEtFUkJFUk9TX1Y0XG4iLAotICAgICAgICAgICAgICAgICAgICAg ICAgZnRwX2NwbCA9PSBGUExfUFJWID8gInByaXYiIDogInNhZmUiKTsKLSAgICAgICAgICAgICAg ICByZXR1cm4oMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBGVFBfS1JC NCAqLwotI2lmZGVmIEZUUF9HU1NBUEkKLSAgICAgICAgLyogU2NvbW1hbmQgKGJhc2VkIG9uIGxl dmVsKSAqLwotICAgICAgICBpZiAoY2tfZ3NzYXBpX2lzX2luc3RhbGxlZCgpICYmIChzdHJjbXAo YXV0aF90eXBlLCAiR1NTQVBJIikgPT0gMCkpIHsKLSAgICAgICAgICAgIGdzc19idWZmZXJfZGVz YyBpbl9idWYsIG91dF9idWY7Ci0gICAgICAgICAgICBPTV91aW50MzIgbWFqX3N0YXQsIG1pbl9z dGF0OwotICAgICAgICAgICAgaW50IGNvbmZfc3RhdGU7Ci0gICAgICAgICAgICBpbl9idWYudmFs dWUgPSBzOwotICAgICAgICAgICAgaW5fYnVmLmxlbmd0aCA9IHN0cmxlbihzKSArIDE7Ci0gICAg ICAgICAgICBtYWpfc3RhdCA9IGdzc19zZWFsKCZtaW5fc3RhdCwgZ2NvbnRleHQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChmdHBfY3BsPT1GUExfUFJWKSwgLyogcHJpdmF0ZSAq LwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU1NfQ19RT1BfREVGQVVMVCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmluX2J1ZiwgJmNvbmZfc3RhdGUsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRfYnVmKTsKLSAgICAgICAgICAgIGlmICht YWpfc3RhdCAhPSBHU1NfU19DT01QTEVURSkgeyAvKiBHZW5lcmFsbHkgbmVlZCB0byBkZWFsICov Ci0gICAgICAgICAgICAgICAgdXNlcl9nc3NfZXJyb3IobWFqX3N0YXQsIG1pbl9zdGF0LAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmdHBfY3BsPT1GUExfUFJWKT8KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiZ3NzX3NlYWwgRU5DIGRpZG4ndCBjb21wbGV0ZSI6Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdzc19zZWFsIE1JQyBkaWRuJ3QgY29tcGxl dGUiKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoKGZ0cF9jcGwgPT0gRlBMX1BSVikgJiYgIWNv bmZfc3RhdGUpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkdTU0FQSSBkaWRu J3QgZW5jcnlwdCBtZXNzYWdlIik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg ICAgIGlmIChmdHBfZGViKQotICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJzZWFs ZWQgKCVzKSAlZCBieXRlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZnRwX2NwbD09 RlBMX1BSVj8iRU5DIjoiTUlDIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0X2J1Zi5s ZW5ndGgpOwotICAgICAgICAgICAgICAgIG1lbWNweShvdXQsIG91dF9idWYudmFsdWUsCi0gICAg ICAgICAgICAgICAgICAgICAgIGxlbmd0aD1vdXRfYnVmLmxlbmd0aCk7Ci0gICAgICAgICAgICAg ICAgZ3NzX3JlbGVhc2VfYnVmZmVyKCZtaW5fc3RhdCwgJm91dF9idWYpOwotICAgICAgICAgICAg fQotICAgICAgICB9Ci0jZW5kaWYgLyogRlRQX0dTU0FQSSAqLwotICAgICAgICAvKiBPdGhlciBh dXRoIHR5cGVzIGdvIGhlcmUgLi4uICovCi0KLSAgICAgICAgbGVuMiA9IEZUUF9CVUZTSVo7Ci0g ICAgICAgIGlmICgoa2Vycm9yID0gcmFkaXhfZW5jb2RlKChDSEFSICopb3V0LCAoQ0hBUiAqKWlu LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgsICZsZW4yLCBSQURJ WF9FTkNPREUpKQotICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwi Q291bGRuJ3QgYmFzZSA2NCBlbmNvZGUgY29tbWFuZCAoJXMpXG4iLAotICAgICAgICAgICAgICAg ICAgICByYWRpeF9lcnJvcihrZXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAg ICAgfQotICAgICAgICBpZiAoZnRwX2RlYikKLSAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInNj b21tYW5kKCVzKVxuZW5jb2RpbmcgJWQgYnl0ZXNcbiIsIHMsIGxlbmd0aCk7Ci0gICAgICAgIGxl bjIgPSBja21ha21zZyhvdXQsCi0JCQlGVFBfQlVGU0laLAotCQkJZnRwX2NwbCA9PSBGUExfUFJW ID8gIkVOQyAiIDogIk1JQyAiLAotICAgICAgICAgICAgICAgICAgICAgICAgaW4sCi0JCQkiXHJc biIsCi0JCQlOVUxMCi0JCQkpOwotICAgICAgICBzZW5kKGNzb2NrZXQsKFNFTkRBUkcyVFlQRSlv dXQsbGVuMiwwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBjaGFyIG91dFtGVFBfQlVGU0laXTsK LSAgICAgICAgaW50IGxlbiA9IGNrbWFrbXNnKG91dCxGVFBfQlVGU0laLHMsIlxyXG4iLE5VTEws TlVMTCk7Ci0gICAgICAgIHNlbmQoY3NvY2tldCwoU0VOREFSRzJUWVBFKW91dCxsZW4sMCk7Ci0g ICAgfQotICAgIHJldHVybigxKTsKLX0KLQotc3RhdGljIGludAotbXlnZXRjKCkgewotICAgIHN0 YXRpYyBjaGFyIGluYnVmWzQwOTZdOwotICAgIHN0YXRpYyBpbnQgYnAgPSAwLCBlcCA9IDA7Ci0g ICAgaW50IHJjOwotCi0gICAgaWYgKGJwID09IGVwKSB7Ci0gICAgICAgIGJwID0gZXAgPSAwOwot I2lmZGVmIENLX1NTTAotICAgICAgICBpZiAoc3NsX2Z0cF9hY3RpdmVfZmxhZykgewotICAgICAg ICAgICAgaW50IGVycm9yOwotICAgICAgICAgICAgcmMgPSBTU0xfcmVhZChzc2xfZnRwX2Nvbixp bmJ1Ziw0MDk2KTsKLSAgICAgICAgICAgIGVycm9yID0gU1NMX2dldF9lcnJvcihzc2xfZnRwX2Nv bixyYyk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGVycm9yKSB7Ci0gICAgICAgICAgICAgIGNhc2Ug U1NMX0VSUk9SX05PTkU6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh c2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6Ci0gICAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1dB TlRfUkVBRDoKLSAgICAgICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgICAgICAgIGNhc2Ug U1NMX0VSUk9SX1NZU0NBTEw6Ci0gICAgICAgICAgICAgICAgaWYgKHJjID09IDApIHsgICAgICAg ICAgLyogRU9GICovCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg IH0gZWxzZSB7Ci0jaWZkZWYgTlQKLSAgICAgICAgICAgICAgICAgICAgaW50IGdsZSA9IEdldExh c3RFcnJvcigpOwotI2VuZGlmIC8qIE5UICovCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9YNTA5 X0xPT0tVUDoKLSAgICAgICAgICAgICAgY2FzZSBTU0xfRVJST1JfU1NMOgotICAgICAgICAgICAg ICBjYXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVSTjoKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0jZW5k aWYgLyogQ0tfU1NMICovCi0gICAgICAgICAgcmMgPSByZWN2KGNzb2NrZXQsKGNoYXIgKilpbmJ1 Ziw0MDk2LDApOwotICAgICAgICBpZiAocmMgPD0gMCkKLSAgICAgICAgICByZXR1cm4oRU9GKTsK LSAgICAgICAgZXAgPSByYzsKLSAgICB9Ci0gICAgcmV0dXJuKGluYnVmW2JwKytdKTsKLX0KLQot LyogIHggbCBhIHQgZSBjICAtLSAgVHJhbnNsYXRlIGEgY2hhcmFjdGVyICAqLwotLyoKLSAgICBD YWxsIHdpdGg6Ci0gICAgICBmYyAgICA9IEZ1bmN0aW9uIGNvZGU6IDAgPSB0cmFuc2xhdGUsIDEg PSBpbml0aWFsaXplLgotICAgICAgYyAgICAgPSBDaGFyYWN0ZXIgKGFzIGludCkuCi0gICAgICBp bmNzICA9IEluZGV4IG9mIGNoYXJzZXQgdG8gdHJhbnNsYXRlIGZyb20uCi0gICAgICBvdXRjcyA9 IEluZGV4IG9mIGNoYXJzZXQgdG8gdHJhbnNsYXRlIHRvLgotCi0gICAgUmV0dXJuczoKLSAgICAg IDA6IE9LCi0gICAgIC0xOiBFcnJvcgotKi8KLXN0YXRpYyBpbnQKLXhsYXRlYyhmYyxjLGluY3Ms b3V0Y3MpIGludCBmYywgYywgaW5jcywgb3V0Y3M7IHsKLSNpZmRlZiBOT0NTRVRTCi0gICAgcmV0 dXJuKGMpOwotI2Vsc2UKLSAgICBzdGF0aWMgY2hhciBidWZbMTI4XTsKLSAgICBzdGF0aWMgaW50 IGN4OwotICAgIGludCBjMCwgYzE7Ci0KLSAgICBpZiAoZmMgPT0gMSkgeyAgICAgICAgICAgICAg ICAgICAgICAvKiBJbml0aWFsaXplICovCi0gICAgICAgIGN4ID0gMDsgICAgICAgICAgICAgICAg ICAgICAgICAgLyogQ2F0Y2gtdXAgYnVmZmVyIHdyaXRlIGluZGV4ICovCi0gICAgICAgIHhnbmJw ID0gYnVmOyAgICAgICAgICAgICAgICAgICAgLyogQ2F0Y2gtdXAgYnVmZmVyIHJlYWQgcG9pbnRl ciAqLwotICAgICAgICBidWZbMF0gPSBOVUw7ICAgICAgICAgICAgICAgICAgIC8qIEJ1ZmZlciBp cyBlbXB0eSAqLwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotICAgIGlmIChjeCA+PSAxMjcp IHsgICAgICAgICAgICAgICAgICAgIC8qIENhdGNoLXVwIGJ1ZmZlciBmdWxsICovCi0gICAgICAg IGRlYnVnKEYxMDAsInhsYXRlYyBvdmVyZmxvdyIsIiIsMCk7IC8qIChzaG91bGRuJ3QgaGFwcGVu KSAqLwotICAgICAgICBwcmludGYoIj9UcmFuc2xhdGlvbiBidWZmZXIgb3ZlcmZsb3dcbiIpOwot ICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICAvKiBBZGQgY2hhciB0byBidWZmZXIuICov Ci0gICAgLyogVGhlIGJ1ZmZlciB3b24ndCBncm93IHVubGVzcyBpbmNzIGlzIGEgbXVsdGlieXRl IHNldCwgZS5nLiBVVEYtOC4gKi8KLQotICAgIGRlYnVnKEYwMDAsInhsYXRlYyBidWYiLGNraXRv YShjeCksYyk7Ci0gICAgYnVmW2N4KytdID0gYzsKLSAgICBidWZbY3hdID0gTlVMOwotCi0gICAg d2hpbGUgKChjMCA9IHhnbmJ5dGUoRkNfVUNTMixpbmNzLHN0cmdldGMpKSA+IC0xKSB7Ci0gICAg ICAgIGlmICh4cG5ieXRlKGMwLFRDX1VDUzIsb3V0Y3MsTlVMTCkgPCAwKQkvKiAoTlVMTCB3YXMg eHByaW50YykgKi8KLSAgICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICAvKiBJZiB3ZSdy ZSBjYXVnaHQgdXAsIHJlaW5pdGlhbGl6ZSB0aGUgYnVmZmVyICovCi0gICAgcmV0dXJuKChjeCA9 PSAoeGduYnAgLSBidWYpKSA/IHhsYXRlYygxLDAsMCwwKSA6IDApOwotI2VuZGlmIC8qIE5PQ1NF VFMgKi8KLX0KLQotCi0vKiAgcCBhIHIgcyBlIGYgZSBhIHQgICovCi0KLS8qIE5vdGU6IGZvciBj b252ZW5pZW5jZSB3ZSBhbGlnbiBrZXl3b3JkIHZhbHVlcyB3aXRoIHRhYmxlIGluZGljZXMgKi8K LS8qIElmIHlvdSBuZWVkIHRvIGluc2VydCBhIG5ldyBrZXl3b3JkLCBhZGp1c3QgdGhlIFNGVF94 eHggZGVmaW5pdGlvbnMgKi8KLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgZmVhdHRhYltdID0gewot ICAgIHsgIiQkJCQiLCAwLCAgICAgICAgMCB9LAkJLyogRHVtbXkgZm9yIHNmdHRhYlswXSAqLwot ICAgIHsgIkFVVEgiLCBTRlRfQVVUSCwgMCB9LAotICAgIHsgIkxBTkciLCBTRlRfTEFORywgMCB9 LAotICAgIHsgIk1EVE0iLCBTRlRfTURUTSwgMCB9LAotICAgIHsgIk1MU1QiLCBTRlRfTUxTVCwg MCB9LAotICAgIHsgIlBCU1oiLCBTRlRfUEJTWiwgMCB9LAotICAgIHsgIlBST1QiLCBTRlRfUFJP VCwgMCB9LAotICAgIHsgIlJFU1QiLCBTRlRfUkVTVCwgMCB9LAotICAgIHsgIlNJWkUiLCBTRlRf U0laRSwgMCB9LAotICAgIHsgIlRWRlMiLCBTRlRfVFZGUywgMCB9LAotICAgIHsgIlVURjgiLCBT RlRfVVRGOCwgMCB9Ci19Owotc3RhdGljIGludCBuZmVhdHRhYiA9IChzaXplb2YoZmVhdHRhYikg LyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi0jZGVmaW5lIEZBQ1RfQ1NFVCAgMQotI2RlZmlu ZSBGQUNUX0NSRUEgIDIKLSNkZWZpbmUgRkFDVF9MQU5HICAzCi0jZGVmaW5lIEZBQ1RfTVRZUCAg NAotI2RlZmluZSBGQUNUX01EVE0gIDUKLSNkZWZpbmUgRkFDVF9QRVJNICA2Ci0jZGVmaW5lIEZB Q1RfU0laRSAgNwotI2RlZmluZSBGQUNUX1RZUEUgIDgKLSNkZWZpbmUgRkFDVF9VTklRICA5Ci0K LXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGZhY3R0YWJbXSA9IHsKLSAgICB7ICJDSEFSU0VUIiwgICAg RkFDVF9DU0VULCAwIH0sCi0gICAgeyAiQ1JFQVRFIiwgICAgIEZBQ1RfQ1JFQSwgMCB9LAotICAg IHsgIkxBTkciLCAgICAgICBGQUNUX0xBTkcsIDAgfSwKLSAgICB7ICJNRURJQS1UWVBFIiwgRkFD VF9NVFlQLCAwIH0sCi0gICAgeyAiTU9ESUZZIiwgICAgIEZBQ1RfTURUTSwgMCB9LAotICAgIHsg IlBFUk0iLCAgICAgICBGQUNUX1BFUk0sIDAgfSwKLSAgICB7ICJTSVpFIiwgICAgICAgRkFDVF9T SVpFLCAwIH0sCi0gICAgeyAiVFlQRSIsICAgICAgIEZBQ1RfVFlQRSwgMCB9LAotICAgIHsgIlVO SVFVRSIsICAgICBGQUNUX1VOSVEsIDAgfQotfTsKLXN0YXRpYyBpbnQgbmZhY3R0YWIgPSAoc2l6 ZW9mKGZhY3R0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotc3RhdGljIHN0cnVjdCBr ZXl0YWIgZnR5cHRhYltdID0gewotICAgIHsgIkNESVIiLCBGVFlQX0NESVIsIDAgfSwKLSAgICB7 ICJESVIiLCAgRlRZUF9ESVIsICAwIH0sCi0gICAgeyAiRklMRSIsIEZUWVBfRklMRSwgMCB9LAot ICAgIHsgIlBESVIiLCBGVFlQX1BESVIsIDAgfQotfTsKLXN0YXRpYyBpbnQgbmZ0eXB0YWIgPSAo c2l6ZW9mKGZ0eXB0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotc3RhdGljIFZPSUQK LXBhcnNlZmVhdChzKSBjaGFyICogczsgewkJLyogUGFyc2UgYSBGRUFUVVJFIHJlc3BvbnNlICov Ci0gICAgY2hhciBrd2J1Zls4XTsKLSAgICBpbnQgaSwgeDsKLSAgICBpZiAoIXMpIHJldHVybjsK LSAgICBpZiAoISpzKSByZXR1cm47Ci0gICAgd2hpbGUgKCpzIDwgJyEnKQotICAgICAgcysrOwot ICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQlpZiAoc1tpXSA8ICchJykKLQkgIGJyZWFr OwotCWt3YnVmW2ldID0gc1tpXTsKLSAgICB9Ci0gICAgaWYgKHNbaV0gJiYgc1tpXSAhPSBTUCAm JiBzW2ldICE9IENSICYmIHNbaV0gIT0gTEYpCi0gICAgICByZXR1cm47Ci0gICAga3didWZbaV0g PSBOVUw7Ci0gICAgLyogeGxvb2t1cCByZXF1aXJlcyBhIGZ1bGwgKGJ1dCBjYXNlIGluZGVwZW5k ZW50KSBtYXRjaCAqLwotICAgIGkgPSB4bG9va3VwKGZlYXR0YWIsa3didWYsbmZlYXR0YWIsJngp OwotICAgIGRlYnVnKEYxMTEsImZ0cCBwYXJzZWZlYXQiLHMsaSk7Ci0gICAgaWYgKGkgPCAwIHx8 IGkgPiAxNSkKLSAgICAgIHJldHVybjsKLQotICAgIHN3aXRjaCAoaSkgewotICAgICAgY2FzZSBT RlRfTURUTToJCQkvKiBDb250cm9sbGVkIGJ5IEVOQUJMRS9ESVNBQkxFICovCi0Jc2Z0dGFiW2ld ID0gbWR0bW9rOwotCWlmIChtZHRtb2spIHNmdHRhYlswXSsrOwotCWJyZWFrOwotICAgICAgY2Fz ZSBTRlRfTUxTVDoJCQkvKiBkaXR0byAqLwotCXNmdHRhYltpXSA9IG1sc3RvazsKLQlpZiAobWxz dG9rKSBzZnR0YWJbMF0rKzsKLQlicmVhazsKLSAgICAgIGNhc2UgU0ZUX1NJWkU6CQkJLyogZGl0 dG8gKi8KLQlzZnR0YWJbaV0gPSBzaXplb2s7Ci0JaWYgKHNpemVvaykgc2Z0dGFiWzBdKys7Ci0J YnJlYWs7Ci0gICAgICBjYXNlIFNGVF9BVVRIOgkJCS8qIGRpdHRvICovCi0Jc2Z0dGFiW2ldID0g ZnRwX2F1dDsKLQlpZiAoZnRwX2F1dCkgc2Z0dGFiWzBdKys7Ci0JYnJlYWs7Ci0gICAgICBkZWZh dWx0OgkJCQkvKiBPdGhlcnMgKi8KLQlzZnR0YWJbMF0rKzsKLQlzZnR0YWJbaV0rKzsKLSAgICB9 Ci19Ci0KLXN0YXRpYyBjaGFyICoKLXBhcnNlZmFjdHMocykgY2hhciAqIHM7IHsJCS8qIFBhcnNl IE1MU1tEVF0gRmlsZSBGYWN0cyAqLwotICAgIGNoYXIgKiBwOwotICAgIGludCBpLCBqLCB4Owot ICAgIGlmICghcykgcmV0dXJuKE5VTEwpOwotICAgIGlmICghKnMpIHJldHVybihOVUxMKTsKLQot ICAgIC8qIE1heWJlIHdlIHNob3VsZCBtYWtlIGEgY29weSBvZiBzIHNvIHdlIGNhbiBwb2tlIGl0 Li4uICovCi0KLSAgICB3aGlsZSAoKHAgPSBja3N0cmNocihzLCc9JykpKSB7Ci0JKnAgPSBOVUw7 CQkJLyogcyBwb2ludHMgdG8gZmFjdCAqLwotCWkgPSB4bG9va3VwKGZhY3R0YWIscyxuZmFjdHRh YiwmeCk7IAotCWRlYnVnKEYxMTEsImZ0cCBwYXJzZWZhY3QgZmFjdCIscyxpKTsKLQkqcCA9ICc9 JzsKLQlzID0gcCsxOwkJCS8qIE5vdyBzIHBvaW50cyB0byBhcmcgKi8KLQlwID0gY2tzdHJjaHIo cywnOycpOwotICAgICAgICBpZiAoIXApCi0JICBwID0gY2tzdHJjaHIocyxTUCk7Ci0JaWYgKCFw KSB7Ci0JICAgIGRlYnVnKEYxMTAsImZ0cCBwYXJzZWZhY3QgZW5kLW9mLXZhbCBzZWFyY2ggZmFp bCIscywwKTsKLQkgICAgYnJlYWs7Ci0JfQotCSpwID0gTlVMOwotCWRlYnVnKEYxMTAsImZ0cCBw YXJzZWZhY3QgdmFsdSIscywwKTsKLQlzd2l0Y2ggKGkpIHsKLQkgIGNhc2UgRkFDVF9DU0VUOgkJ LyogSWdub3JlIHRoZXNlIGZvciBub3cgKi8KLQkgIGNhc2UgRkFDVF9DUkVBOgotCSAgY2FzZSBG QUNUX0xBTkc6Ci0JICBjYXNlIEZBQ1RfUEVSTToKLQkgIGNhc2UgRkFDVF9NVFlQOgotCSAgY2Fz ZSBGQUNUX1VOSVE6Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBGQUNUX01EVE06CQkvKiBNb2R0aW1l ICovCi0JICAgIG1ha2VzdHIoJmhhdmVtZHRtLHMpOwotCSAgICBkZWJ1ZyhGMTEwLCJmdHAgcGFy c2VmYWN0IG1kdG0iLGhhdmVtZHRtLDApOwotCSAgICBicmVhazsKLQkgIGNhc2UgRkFDVF9TSVpF OgkJLyogU2l6ZSAqLwotCSAgICBoYXZlc2l6ZSA9IGNrYXRvZnMocyk7Ci0JICAgIGRlYnVnKEYx MDEsImZ0cCBwYXJzZWZhY3Qgc2l6ZSIsIiIsaGF2ZXNpemUpOwotCSAgICBicmVhazsKLQkgIGNh c2UgRkFDVF9UWVBFOgkJLyogVHlwZSAqLwotCSAgICBqID0geGxvb2t1cChmdHlwdGFiLHMsbmZ0 eXB0YWIsTlVMTCk7Ci0JICAgIGRlYnVnKEYxMTEsImZ0cCBwYXJzZWZhY3QgdHlwZSIscyxqKTsK LQkgICAgaGF2ZXR5cGUgPSAoaiA8IDEpID8gMCA6IGo7Ci0JICAgIGJyZWFrOwotCX0KLQkqcCA9 ICc7JzsKLQlzID0gcCsxOwkJCS8qIHMgcG9pbnRzIG5leHQgZmFjdCBvciBuYW1lICovCi0gICAg fQotICAgIHdoaWxlICgqcyA9PSBTUCkJCQkvKiBTa2lwIHBhc3Qgc3BhY2VzLiAqLwotICAgICAg cysrOwotICAgIGlmICghKnMpCQkJCS8qIE1ha2Ugc3VyZSB3ZSBzdGlsbCBoYXZlIGEgbmFtZSAq LwotICAgICAgcyA9IE5VTEw7Ci0gICAgZGVidWcoRjExMCwiZnRwIHBhcnNlZmFjdCBuYW1lIixz LDApOwotICAgIHJldHVybihzKTsKLX0KLQotLyogIGcgZSB0IHIgZSBwIGwgeSAgLS0gICh0byBh biBGVFAgY29tbWFuZCBzZW50IHRvIHNlcnZlcikgICovCi0KLS8qIHZibSA9IDEgKHZlcmJvc2Up OyAwIChxdWlldCBleGNlcHQgZm9yIGVycm9yIG1lc3NhZ2VzKTsgOSAoc3VwZXIgcXVpZXQpICov Ci0KLXN0YXRpYyBpbnQKLWdldHJlcGx5KGV4cGVjdGVvZixsY3MscmNzLHZibSxmYykgaW50IGV4 cGVjdGVvZiwgbGNzLCByY3MsIHZibSwgZmM7IHsKLSAgICAvKiBsY3MsIHJjcywgdmJtIHBhcmFt ZXRlcnMgYXMgaW4gZnRwY21kKCkgKi8KLSAgICByZWdpc3RlciBpbnQgaSwgYywgbjsKLSAgICBy ZWdpc3RlciBpbnQgZGlnOwotICAgIHJlZ2lzdGVyIGNoYXIgKmNwOwotICAgIGludCB4bGF0ZSA9 IDA7Ci0gICAgaW50IGNvdW50ID0gMDsKLSAgICBpbnQgYXV0aCA9IDA7Ci0gICAgaW50IG9yaWdp bmFsY29kZSA9IDAsIGNvbnRpbnVhdGlvbiA9IDA7Ci0gICAgc2lnX3Qgb2xkaW50cjsKLSAgICBp bnQgcGZsYWcgPSAwOwotICAgIGNoYXIgKnB0ID0gcGFzdjsKLSAgICBjaGFyIGlidWZbRlRQX0JV RlNJWl0sIG9idWZbRlRQX0JVRlNJWl07IC8qICh0aGVzZSBhcmUgcHJldHR5IGJpZy4uLikgKi8K LSAgICBpbnQgc2FmZSA9IDA7Ci0gICAgaW50IHhxdWlldCA9IDA7Ci0KLSAgICBhdXRoID0gKGZj ID09IEdSRl9BVVRIKTsKLQotI2lmbmRlZiBOT0NTRVRTCi0gICAgZGVidWcoRjEwMSwiZnRwIGdl dHJlcGx5IGxjcyIsIiIsbGNzKTsKLSAgICBkZWJ1ZyhGMTAxLCJmdHAgZ2V0cmVwbHkgcmNzIiwi IixyY3MpOwotICAgIGlmIChsY3MgPiAtMSAmJiByY3MgPiAtMSAmJiBsY3MgIT0gcmNzKSB7Ci0g ICAgICAgIHhsYXRlID0gMTsKLSAgICAgICAgaW5pdHhsYXRlKHJjcyxsY3MpOwotICAgICAgICB4 bGF0ZWMoMSwwLHJjcyxsY3MpOwotICAgIH0KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0gICAgZGVi dWcoRjEwMSwiZnRwIGdldHJlcGx5IGZjIiwiIixmYyk7Ci0KLSAgICBpZiAocXVpZXQpCi0gICAg ICB4cXVpZXQgPSAxOwotICAgIGlmICh2Ym0gPT0gOSkgewotICAgICAgICB4cXVpZXQgPSAxOwot ICAgICAgICB2Ym0gPSAwOwotICAgIH0KLSAgICBpZiAoZnRwX2RlYikgICAgICAgICAgICAgICAg ICAgICAgICAvKiBERUJVRyAqLwotICAgICAgdmJtID0gMTsKLSAgICBlbHNlIGlmIChxdWlldCB8 fCBkcHlhY3RpdmUpICAgICAgICAvKiBRVUlFVCBvciBGaWxlIFRyYW5zZmVyIEFjdGl2ZSAqLwot ICAgICAgdmJtID0gMDsKLSAgICBlbHNlIGlmICh2Ym0gPCAwKSAgICAgICAgICAgICAgICAgICAv KiBWRVJCT1NFICovCi0gICAgICB2Ym0gPSBmdHBfdmJtOwotCi0gICAgaWJ1ZlswXSA9ICdcMCc7 Ci0gICAgaWYgKHJlcGx5X3BhcnNlKQotICAgICAgcmVwbHlfcHRyID0gcmVwbHlfYnVmOwotICAg IGhhdmVzaWdpbnQgPSAwOwotICAgIG9sZGludHIgPSBzaWduYWwoU0lHSU5ULCBjbWRjYW5jZWwp OwotICAgIGZvciAoY291bnQgPSAwOzsgY291bnQrKykgewotICAgICAgICBvYnVmWzBdID0gJ1ww JzsKLSAgICAgICAgZGlnID0gbiA9IGZ0cGNvZGUgPSBpID0gMDsKLSAgICAgICAgY3AgPSBmdHBf cmVwbHlfc3RyOwotICAgICAgICB3aGlsZSAoKGMgPSBpYnVmWzBdID8gaWJ1ZltpKytdIDogbXln ZXRjKCkpICE9ICdcbicpIHsKLSAgICAgICAgICAgIGlmIChjID09IElBQykgeyAgICAgICAgICAg ICAvKiBIYW5kbGUgdGVsbmV0IGNvbW1hbmRzICovCi0gICAgICAgICAgICAgICAgc3dpdGNoIChj ID0gbXlnZXRjKCkpIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgV0lMTDoKLSAgICAgICAgICAg ICAgICAgIGNhc2UgV09OVDoKLSAgICAgICAgICAgICAgICAgICAgYyA9IG15Z2V0YygpOwotICAg ICAgICAgICAgICAgICAgICBvYnVmWzBdID0gSUFDOwotICAgICAgICAgICAgICAgICAgICBvYnVm WzFdID0gRE9OVDsKLSAgICAgICAgICAgICAgICAgICAgb2J1ZlsyXSA9IGM7Ci0gICAgICAgICAg ICAgICAgICAgIG9idWZbM10gPSBOVUw7Ci0jaWZkZWYgQ0tfU1NMCi0gICAgICAgICAgICAgICAg ICAgIGlmIChzc2xfZnRwX2FjdGl2ZV9mbGFnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp bnQgZXJyb3IsIHJjOwotICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSBTU0xfd3JpdGUoc3Ns X2Z0cF9jb24sb2J1ZiwzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gU1NMX2dl dF9lcnJvcihzc2xfZnRwX2NvbixyYyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg KGVycm9yKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX05PTkU6 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfUkVBRDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4oMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1NZ U0NBTEw6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJjID09IDApIHsgLyogRU9G ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0jaWZkZWYgTlQKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IGdsZSA9IEdldExhc3RFcnJvcigpOwotI2VuZGlmIC8qIE5UICovCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FO VF9YNTA5X0xPT0tVUDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTU0xfRVJST1Jf U1NMOgotICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVS TjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgICAgICAgICAgICAg ICAgc2VuZChjc29ja2V0LChTRU5EQVJHMlRZUEUpb2J1ZiwzLDApOwotICAgICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgRE86Ci0gICAgICAgICAgICAgICAg ICBjYXNlIERPTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGMgPSBteWdldGMoKTsKLSAgICAgICAg ICAgICAgICAgICAgb2J1ZlswXSA9IElBQzsKLSAgICAgICAgICAgICAgICAgICAgb2J1ZlsxXSA9 IFdPTlQ7Ci0gICAgICAgICAgICAgICAgICAgIG9idWZbMl0gPSBjOwotICAgICAgICAgICAgICAg ICAgICBvYnVmWzNdID0gTlVMOwotI2lmZGVmIENLX1NTTAotICAgICAgICAgICAgICAgICAgICBp ZiAoc3NsX2Z0cF9hY3RpdmVfZmxhZykgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVy cm9yLCByYzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gU1NMX3dyaXRlKHNzbF9mdHBf Y29uLG9idWYsMyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IFNTTF9nZXRfZXJy b3Ioc3NsX2Z0cF9jb24scmMpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlcnJv cikgewotICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9OT05FOgotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAg ICBjYXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRFOgotICAgICAgICAgICAgICAgICAgICAgICAgICBj YXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aWduYWwoU0lHSU5ULG9sZGludHIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuKDApOwotICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9TWVNDQUxM OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYyA9PSAwKSB7IC8qIEVPRiAqLwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9IGVsc2UgewotI2lmZGVmIE5UCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBnbGUgPSBHZXRMYXN0RXJyb3IoKTsKLSNlbmRpZiAvKiBOVCAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfWDUw OV9MT09LVVA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1NTTDoK LSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTU0xfRVJST1JfWkVST19SRVRVUk46Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg ICAgIH0gZWxzZQotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICAgICAgICAgICAgICAgIHNl bmQoY3NvY2tldCwoU0VOREFSRzJUWVBFKW9idWYsMywwKTsKLSAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBkaWcrKzsKLSAgICAgICAgICAgIGlmIChjID09IEVPRikg ewotICAgICAgICAgICAgICAgIGlmIChleHBlY3Rlb2YpIHsKLSAgICAgICAgICAgICAgICAgICAg c2lnbmFsKFNJR0lOVCxvbGRpbnRyKTsKLSAgICAgICAgICAgICAgICAgICAgZnRwY29kZSA9IDIy MTsKLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiZnRwIGdldHJlcGx5IEVPRiIsIiIs ZnRwY29kZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgbG9zdHBlZXIoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXhx dWlldCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZnRwX2RlYikKLSAgICAgICAgICAgICAg ICAgICAgICBwcmludGYoIjQyMSAiKTsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAotICAg ICAgICAgICAgICAgICAgICAgICJTZXJ2aWNlIG5vdCBhdmFpbGFibGUsIGNvbm5lY3Rpb24gY2xv c2VkIGJ5IHNlcnZlclxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOwot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzaWduYWwoU0lHSU5ULG9sZGludHIp OwotICAgICAgICAgICAgICAgIGZ0cGNvZGUgPSA0MjE7Ci0gICAgICAgICAgICAgICAgZGVidWco RjEwMSwiZnRwIGdldHJlcGx5IEVPRiIsIiIsZnRwY29kZSk7Ci0gICAgICAgICAgICAgICAgcmV0 dXJuKDQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG4gPT0gMCkgewkJLyogRmly c3QgZGlnaXQgKi8KLQkJbiA9IGM7CQkJLyogU2F2ZSBpdCAqLwotCSAgICB9Ci0gICAgICAgICAg ICBpZiAoYXV0aF90eXBlICYmCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAgICAgICAgICAgIXNzbF9m dHBfYWN0aXZlX2ZsYWcgJiYKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICAgICAgICAh aWJ1ZlswXSAmJiAobiA9PSAnNicgfHwgY29udGludWF0aW9uKSkgewotICAgICAgICAgICAgICAg IGlmIChjICE9ICdccicgJiYgZGlnID4gNCkKLSAgICAgICAgICAgICAgICAgIG9idWZbaSsrXSA9 IGM7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChhdXRoX3R5cGUg JiYKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAgICAgICAgICAgIXNzbF9mdHBfYWN0aXZlX2Zs YWcgJiYKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICAgICAgICAgICAgIWlidWZbMF0g JiYgZGlnID09IDEgJiYgdmJtKQotICAgICAgICAgICAgICAgICAgcHJpbnRmKCJVbmF1dGhlbnRp Y2F0ZWQgcmVwbHkgcmVjZWl2ZWQgZnJvbSBzZXJ2ZXI6XG4iKTsKLSAgICAgICAgICAgICAgICBp ZiAocmVwbHlfcGFyc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgKnJlcGx5X3B0cisrID0gYzsK LSAgICAgICAgICAgICAgICAgICAgKnJlcGx5X3B0ciA9IE5VTDsKLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgaWYgKCghZHB5YWN0aXZlIHx8IGZ0cF9kZWIpICYmIC8qIERvbid0 IG1lc3MgdXAgeGZlciBkaXNwbGF5ICovCi0gICAgICAgICAgICAgICAgICAgIGZ0cF9jbWRsaW4g PCAyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoYyAhPSAnXHInKSAmJgotICAgICAgICAg ICAgICAgICAgICAgICAgKGZ0cF9kZWIgfHwgKCh2Ym0gfHwgKCFhdXRoICYmIG4gPT0gJzUnKSkg JiYKLSAgICAgICAgICAgICAgICAgICAgICAgIChkaWcgPiA0IHx8ICggZGlnIDw9IDQgJiYgIWlz ZGlnaXQoYykgJiYgZnRwY29kZSA9PSAwCi0gICAgICAgICAgICAgICAgICAgICAgICApKSkpKQot ICAgICAgICAgICAgICAgICAgICB7Ci0jaWZkZWYgRlRQX1BST1hZCi0gICAgICAgICAgICAgICAg ICAgICAgICBpZiAoZnRwX3ByeCAmJiAoZGlnID09IDEgfHwgKGRpZyA9PSA1ICYmIHZibSA9PSAw KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJXM6IixmdHBfaG9zdCk7Ci0j ZW5kaWYgLyogRlRQX1BST1hZICovCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgheHF1 aWV0KSB7Ci0jaWZkZWYgTk9DU0VUUwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50 ZigiJWMiLGMpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeGxhdGUp IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGxhdGVjKDAsYyxyY3MsbGNzKTsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwcmludGYoIiVjIixjKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICB9Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg ICAgICAgICAgaWYgKGF1dGhfdHlwZSAmJgotI2lmZGVmIENLX1NTTAotICAgICAgICAgICAgICAg ICFzc2xfZnRwX2FjdGl2ZV9mbGFnICYmCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgICAg ICAgICAgIWlidWZbMF0gJiYgbiAhPSAnNicpCi0gICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg ICAgICAgICAgaWYgKGRpZyA8IDQgJiYgaXNkaWdpdChjKSkKLSAgICAgICAgICAgICAgZnRwY29k ZSA9IGZ0cGNvZGUgKiAxMCArIChjIC0gJzAnKTsKLSAgICAgICAgICAgIGlmICghcGZsYWcgJiYg ZnRwY29kZSA9PSAyMjcpCi0gICAgICAgICAgICAgIHBmbGFnID0gMTsKLSAgICAgICAgICAgIGlm IChkaWcgPiA0ICYmIHBmbGFnID09IDEgJiYgaXNkaWdpdChjKSkKLSAgICAgICAgICAgICAgcGZs YWcgPSAyOwotICAgICAgICAgICAgaWYgKHBmbGFnID09IDIpIHsKLSAgICAgICAgICAgICAgICBp ZiAoYyAhPSAnXHInICYmIGMgIT0gJyknKQotICAgICAgICAgICAgICAgICAgKnB0KysgPSBjOwot ICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAqcHQgPSAnXDAnOwot ICAgICAgICAgICAgICAgICAgICBwZmxhZyA9IDM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgfQotICAgICAgICAgICAgaWYgKGRpZyA9PSA0ICYmIGMgPT0gJy0nICYmIG4gIT0gJzYn KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRpbnVhdGlvbikKLSAgICAgICAgICAgICAgICAg IGZ0cGNvZGUgPSAwOwotICAgICAgICAgICAgICAgIGNvbnRpbnVhdGlvbisrOwotICAgICAgICAg ICAgfQotICAgICAgICAgICAgaWYgKGNwIDwgJmZ0cF9yZXBseV9zdHJbRlRQX0JVRlNJWiAtIDFd KSB7Ci0gICAgICAgICAgICAgICAgKmNwKysgPSBjOwotICAgICAgICAgICAgICAgICpjcCA9IE5V TDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoZGVibG9nIHx8Ci0jaWZk ZWYgQ09NTUVOVAotLyoKLSAgU29tZXRpbWVzIHdlIG5lZWQgdG8gcHJpbnQgdGhlIHNlcnZlciBy ZXBseS4gIHByaW50bGluZXMgaXMgbm9uemVybyBmb3IgYW55Ci0gIGNvbW1hbmQgd2hlcmUgdGhl IHJlc3VsdHMgYXJlIHNlbnQgYmFjayBvbiB0aGUgY29udHJvbCBjb25uZWN0aW9uIHJhdGhlcgot ICB0aGFuIHRoZSBkYXRhIGNvbm5lY3Rpb24sIGUuZy4gU1RBVC4gIEluIHRoZSBUT1BTLTIwIGNh c2UsIGVhY2ggZmlsZSBsaW5lCi0gIGhhcyBmdHBjb2RlIDIxMy4gIEJ1dCBpZiB5b3UgZG8gdGhp cyB3aXRoIGEgVU5JWCBzZXJ2ZXIsIGl0IHNlbmRzICIyMTMtU3RhcnQKLSAgU1RBVCIsIDxsaW5l IHdpdGggZnRwY29kZSA9PSAwPiwgIjIxMy1FbmQiIG9yIHNvbWVzdWNoLiAgU28gd2hlbiBwcmlu dGxpbmVzCi0gIGlzIG5vbnplcm8sIHdlIHdhbnQgdGhlIDIxMyBsaW5lcyBmcm9tIFRPUFMtMjAg YW5kIHdlIERPTidUIHdhbnQgdGhlIDIxMwotICBsaW5lcyBmcm9tIFVOSVguICBGdXJ0aGVyIGV4 cGVyaW1lbnRhdGlvbiBuZWVkZWQgd2l0aCBvdGhlciBzZXJ2ZXJzLiAgT2YKLSAgY291cnNlIFJG Qzk1OSBpcyBtdXRlIGFzIHRvIHRoZSBmb3JtYXQgb2YgdGhlIHNlcnZlciByZXBseS4KLQotICAn cHJpbnRsaW5lcycgaXMgYWxzbyB0cnVlIGZvciBQV0QgYW5kIEJZRS4KLSovCi0JICAgIChwcmlu dGxpbmVzICYmICgoZnRwY29kZSA9PSAwKSB8fCAoc2VydmVydHlwZSA9PSBTWVNfVE9QUzIwKSkp Ci0jZWxzZQotLyogTm8sIHdlIGNhbid0IGJlIHRoYXQgY2xldmVyIC0tIGl0IGJyZWFrcyBvdGhl ciB0aGluZ3MgbGlrZSBSUFdELi4uICovCi0gICAgICAgICAgICAocHJpbnRsaW5lcyAmJgotICAg ICAgICAgICAgIChmdHBjb2RlICE9IDYzMSAmJiBmdHBjb2RlICE9IDYzMiAmJiBmdHBjb2RlICE9 IDYzMykpCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgKSB7Ci0gICAgICAgICAg ICBjaGFyICogcSA9IGNwOwotICAgICAgICAgICAgY2hhciAqciA9IGZ0cF9yZXBseV9zdHI7Ci0g ICAgICAgICAgICAqcS0tID0gTlVMOyAgICAgICAgICAgICAgICAgLyogTlVMLXRlcm1pbmF0ZSAq LwotICAgICAgICAgICAgd2hpbGUgKCpxIDwgJyEnICYmIHEgPiByKSAgIC8qIFN0cmlwIENSLCBl dGMgKi8KLSAgICAgICAgICAgICAgKnEtLSA9IE5VTDsKLSAgICAgICAgICAgIGlmICghZnRwX2Rl YiAmJiBwcmludGxpbmVzKSB7IC8qIElmIHByaW50aW5nICovCi0gICAgICAgICAgICAgICAgaWYg KGZ0cGNvZGUgIT0gMCkgICAgICAgLyogc3RyaXAgZnRwY29kZSBpZiBhbnkgKi8KLSAgICAgICAg ICAgICAgICAgIHIgKz0gNDsKLSNpZmRlZiBOT0NTRVRTCi0gICAgICAgICAgICAgICAgcHJpbnRm KCIlc1xuIixyKTsgICAgICAgLyogYW5kIHByaW50ICovCi0jZWxzZQotICAgICAgICAgICAgICAg IGlmICgheGxhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlc1xuIixyKTsKLSAg ICAgICAgICAgICAgICB9IGVsc2UgewkJLyogVHJhbnNsYXRpbmcgKi8KLSAgICAgICAgICAgICAg ICAgICAgeGduYnAgPSByOwkJLyogU2V0IHVwIHN0cmdldGMoKSAqLwotICAgICAgICAgICAgICAg ICAgICB3aGlsZSAoKGMwID0geGduYnl0ZShGQ19VQ1MyLHJjcyxzdHJnZXRjKSkgPiAtMSkgewot ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhwbmJ5dGUoYzAsVENfVUNTMixsY3MsTlVMTCkg PCAwKSB7CS8qICh4cHJpbnRjKSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25h bChTSUdJTlQsb2xkaW50cik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0x KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlm IC8qIE5PQ1NFVFMgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCWRlYnVnKEYxMTAsIkZU UCBSQ1ZEICIsZnRwX3JlcGx5X3N0ciwwKTsKLQotCWlmIChmYyA9PSBHUkZfRkVBVCkgewkJLyog UGFyc2luZyBGRUFUIGNvbW1hbmQgcmVzcG9uc2U/ICovCi0JICAgIGlmIChjb3VudCA9PSAwICYm IG4gPT0gJzInKSB7Ci0JCWludCBpOwkJCS8qIChSZSktaW5pdCBzZXJ2ZXIgRkVBVHVyZSB0YWJs ZSAqLwotCQlkZWJ1ZyhGMTAwLCJmdHAgZ2V0cmVwbHkgY2xlYXJpbmcgZmVhdHVyZSB0YWJsZSIs IiIsMCk7Ci0JCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotCQkgIHNmdHRhYltpXSA9IDA7Ci0J ICAgIH0gZWxzZSB7Ci0JCXBhcnNlZmVhdCgoY2hhciAqKWZ0cF9yZXBseV9zdHIpOwotCSAgICB9 Ci0JfQotICAgICAgICBpZiAoYXV0aF90eXBlICYmCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAgICAg ICAhc3NsX2Z0cF9hY3RpdmVfZmxhZyAmJgotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICAg ICAgICFpYnVmWzBdICYmIG4gIT0gJzYnKSB7Ci0gICAgICAgICAgICBzaWduYWwoU0lHSU5ULG9s ZGludHIpOwotICAgICAgICAgICAgcmV0dXJuKGdldHJlcGx5KGV4cGVjdGVvZixsY3MscmNzLHZi bSxhdXRoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWJ1ZlswXSA9IG9idWZbaV0gPSAnXDAnOwot ICAgICAgICBpZiAoZnRwY29kZSAmJiBuID09ICc2JykKLSAgICAgICAgICBpZiAoZnRwY29kZSAh PSA2MzEgJiYgZnRwY29kZSAhPSA2MzIgJiYgZnRwY29kZSAhPSA2MzMpIHsKLSAgICAgICAgICAg ICAgcHJpbnRmKCJVbmtub3duIHJlcGx5OiAlZCAlc1xuIiwgZnRwY29kZSwgb2J1Zik7Ci0gICAg ICAgICAgICAgIG4gPSAnNSc7Ci0gICAgICAgICAgfSBlbHNlIHNhZmUgPSAoZnRwY29kZSA9PSA2 MzEpOwotICAgICAgICBpZiAob2J1ZlswXSAgICAgICAgICAgICAgICAgICAgIC8qIGlmIHRoZXJl IGlzIGEgc3RyaW5nIHRvIGRlY29kZSAqLwotI2lmZGVmIENLX1NTTAotICAgICAgICAgICAgJiYg IXNzbF9mdHBfYWN0aXZlX2ZsYWcgICAgIC8qIGFuZCBub3QgU1NML1RMUyAqLwotI2VuZGlmIC8q IENLX1NTTCAqLwotICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICBpZiAoIWF1dGhfdHlwZSkg ewotICAgICAgICAgICAgICAgIHByaW50ZigiQ2Fubm90IGRlY29kZSByZXBseTpcbiVkICVzXG4i LCBmdHBjb2RlLCBvYnVmKTsKLSAgICAgICAgICAgICAgICBuID0gJzUnOwotICAgICAgICAgICAg fQotI2lmbmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAgICAgICBlbHNlIGlmIChmdHBjb2RlID09 IDYzMikgewotICAgICAgICAgICAgICAgIHByaW50ZigiQ2Fubm90IGRlY3J5cHQgJWQgcmVwbHk6 ICVzXG4iLCBmdHBjb2RlLCBvYnVmKTsKLSAgICAgICAgICAgICAgICBuID0gJzUnOwotICAgICAg ICAgICAgfQotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNpZmRlZiBOT0NPTkZJREVOVElB TAotICAgICAgICAgICAgZWxzZSBpZiAoZnRwY29kZSA9PSA2MzMpIHsKLSAgICAgICAgICAgICAg ICBwcmludGYoIkNhbm5vdCBkZWNyeXB0ICVkIHJlcGx5OiAlc1xuIiwgZnRwY29kZSwgb2J1Zik7 Ci0gICAgICAgICAgICAgICAgbiA9ICc1JzsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBOT0NP TkZJREVOVElBTCAqLwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaW50IGxl biA9IEZUUF9CVUZTSVo7Ci0gICAgICAgICAgICAgICAgaWYgKChrZXJyb3IgPSByYWRpeF9lbmNv ZGUoKENIQVIgKilvYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChDSEFSICopaWJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsZW4s Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFESVhfREVDT0RF KSkKLSAgICAgICAgICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50Zigi Q2FuJ3QgZGVjb2RlIGJhc2UgNjQgcmVwbHkgJWQgKCVzKVxuXCIlc1wiXG4iLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgZnRwY29kZSwgcmFkaXhfZXJyb3Ioa2Vycm9yKSwgb2J1Zik7Ci0g ICAgICAgICAgICAgICAgICAgIG4gPSAnNSc7Ci0gICAgICAgICAgICAgICAgfQotI2lmZGVmIEZU UF9TUlAKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzdHJjbXAoYXV0aF90eXBlLCAiU1JQIikg PT0gMCkgewotICAgICAgICAgICAgICAgICAgICBpbnQgb3V0bGVuOwotICAgICAgICAgICAgICAg ICAgICBvdXRsZW4gPSBzcnBfZGVjb2RlKCFzYWZlLCAoQ0hBUiAqKWlidWYsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKENIQVIgKikgaWJ1ZiwgbGVuKTsKLSAgICAg ICAgICAgICAgICAgICAgaWYgKG91dGxlbiA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg IHByaW50ZigiV2FybmluZzogJWQgcmVwbHkgJXMhXG4iLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZ0cGNvZGUsIHNhZmUgPyAibW9kaWZpZWQiIDogImdhcmJsZWQiKTsKLSAgICAg ICAgICAgICAgICAgICAgICAgIG4gPSAnNSc7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkoJmlidWZbb3V0bGVuXSwgIlxyXG4i LEZUUF9CVUZTSVotb3V0bGVuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdHBfZGVi KQotICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiVjOiIsIHNhZmUgPyAnUycgOiAn UCcpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogRlRQX1NSUCAqLwotI2lmZGVmIEZU UF9LUkI0Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RyY21wKGF1dGhfdHlwZSwgIktFUkJF Uk9TX1Y0IikgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2FmZSkgewotICAgICAg ICAgICAgICAgICAgICAgICAga2Vycm9yID0ga3JiX3JkX3NhZmUoKENIQVIgKilpYnVmLCBsZW4s Ci0jaWZkZWYgS1JCNTI0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmdHBfY3JlZC5zZXNzaW9uLAotI2Vsc2UgLyogS1JCNTI0ICovCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnRwX2NyZWQuc2Vzc2lvbiwKLSNlbmRp ZiAvKiBLUkI1MjQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZoaXNjdGxhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJm15Y3RsYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZmdHBfbXNnX2RhdGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBrZXJyb3IgPSBrcmJfcmRfcHJpdigoQ0hBUiAqKWlidWYsIGxlbiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0cF9zY2hlZCwKLSNpZmRl ZiBLUkI1MjQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0 cF9jcmVkLnNlc3Npb24sCi0jZWxzZSAvKiBLUkI1MjQgKi8KLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZmdHBfY3JlZC5zZXNzaW9uLAotI2VuZGlmIC8qIEtS QjUyNCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhp c2N0bGFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm bXljdGxhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JmZ0cF9tc2dfZGF0YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoa2Vy cm9yICE9IEtTVUNDRVNTKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiVkIHJl cGx5ICVzISAoa3JiX3JkXyVzOiAlcylcbiIsIGZ0cGNvZGUsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2FmZSA/ICJtb2RpZmllZCIgOiAiZ2FyYmxlZCIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2FmZSA/ICJzYWZlIiA6ICJwcml2IiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBrcmJfZ2V0X2Vycl90ZXh0KGtlcnJvcikpOwotICAgICAgICAgICAg ICAgICAgICAgICAgbiA9ICc1JzsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmdHBf bXNnX2RhdGEuYXBwX2xlbmd0aCA+PSBGVFBfQlVGU0laIC0gMykgewotICAgICAgICAgICAgICAg ICAgICAgICAga2Vycm9yID0gS0ZBSUxVUkU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuID0g JzUnOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJyZXBseSBkYXRhIHRvbyBsYXJn ZSBmb3IgYnVmZmVyXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChmdHBfZGViKQotICAgICAgICAgICAgICAgICAgICAgICAgICBw cmludGYoIiVjOiIsIHNhZmUgPyAnUycgOiAnUCcpOwotICAgICAgICAgICAgICAgICAgICAgICAg bWVtY3B5KGlidWYsZnRwX21zZ19kYXRhLmFwcF9kYXRhLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZ0cF9tc2dfZGF0YS5hcHBfbGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAg ICAgIGNrc3RybmNweSgmaWJ1ZltmdHBfbXNnX2RhdGEuYXBwX2xlbmd0aF0sICJcclxuIiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVFBfQlVGU0laIC0gZnRwX21zZ19kYXRh LmFwcF9sZW5ndGgpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogRlRQX0tSQjQgKi8K LSNpZmRlZiBGVFBfR1NTQVBJCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RyY21wKGF1dGhf dHlwZSwgIkdTU0FQSSIpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgZ3NzX2J1ZmZlcl9k ZXNjIHhtaXRfYnVmLCBtc2dfYnVmOwotICAgICAgICAgICAgICAgICAgICBPTV91aW50MzIgbWFq X3N0YXQsIG1pbl9zdGF0OwotICAgICAgICAgICAgICAgICAgICBpbnQgY29uZl9zdGF0ZTsKLSAg ICAgICAgICAgICAgICAgICAgeG1pdF9idWYudmFsdWUgPSBpYnVmOwotICAgICAgICAgICAgICAg ICAgICB4bWl0X2J1Zi5sZW5ndGggPSBsZW47Ci0gICAgICAgICAgICAgICAgICAgIC8qIGRlY3J5 cHQvdmVyaWZ5IHRoZSBtZXNzYWdlICovCi0gICAgICAgICAgICAgICAgICAgIGNvbmZfc3RhdGUg PSBzYWZlOwotICAgICAgICAgICAgICAgICAgICBtYWpfc3RhdCA9IGdzc191bnNlYWwoJm1pbl9z dGF0LCBnY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZ4bWl0X2J1ZiwgJm1zZ19idWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmY29uZl9zdGF0ZSwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtYWpf c3RhdCAhPSBHU1NfU19DT01QTEVURSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9n c3NfZXJyb3IobWFqX3N0YXQsIG1pbl9zdGF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgImZhaWxlZCB1bnNlYWxpbmcgcmVwbHkiKTsKLSAgICAgICAgICAgICAgICAg ICAgICAgIG4gPSAnNSc7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBtZW1jcHkoaWJ1ZiwgbXNnX2J1Zi52YWx1ZSwgbXNnX2J1Zi5sZW5ndGgp OwotICAgICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KCZpYnVmW21zZ19idWYubGVuZ3Ro XSwgIlxyXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUUF9CVUZTSVot bXNnX2J1Zi5sZW5ndGgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ3NzX3JlbGVhc2VfYnVm ZmVyKCZtaW5fc3RhdCwmbXNnX2J1Zik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnRw X2RlYikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlYzoiLCBzYWZlID8gJ1Mn IDogJ1AnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIEZUUF9HU1NBUEkgKi8KLSAg ICAgICAgICAgICAgICAvKiBPdGhlciBhdXRoIHR5cGVzIGdvIGhlcmUuLi4gKi8KLSAgICAgICAg ICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICgoIWRweWFjdGl2ZSB8fCBmdHBfZGViKSAmJiBmdHBf Y21kbGluIDwgMiAmJgotICAgICAgICAgICAgICAgICAgICF4cXVpZXQgJiYgKHZibSB8fCAoIWF1 dGggJiYgKG4gPT0gJzQnIHx8IG4gPT0gJzUnKSkpKSB7Ci0jaWZkZWYgTk9DU0VUUwotICAgICAg ICAgICAgcHJpbnRmKCIlYyIsYyk7Ci0jZWxzZQotICAgICAgICAgICAgaWYgKHhsYXRlKSB7Ci0g ICAgICAgICAgICAgICAgeGxhdGVjKDAsYyxyY3MsbGNzKTsKLSAgICAgICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIlYyIsYyk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYg LyogTk9DU0VUUyAqLwotICAgICAgICAgICAgZmZsdXNoIChzdGRvdXQpOwotICAgICAgICB9Ci0g ICAgICAgIGlmIChjb250aW51YXRpb24gJiYgZnRwY29kZSAhPSBvcmlnaW5hbGNvZGUpIHsKLSAg ICAgICAgICAgIGlmIChvcmlnaW5hbGNvZGUgPT0gMCkKLSAgICAgICAgICAgICAgb3JpZ2luYWxj b2RlID0gZnRwY29kZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAg ICpjcCA9ICdcMCc7Ci0gICAgICAgIGlmIChuICE9ICcxJykKLSAgICAgICAgICBjcGVuZCA9IDA7 Ci0gICAgICAgIHNpZ25hbChTSUdJTlQsb2xkaW50cik7Ci0gICAgICAgIGlmIChmdHBjb2RlID09 IDQyMSB8fCBvcmlnaW5hbGNvZGUgPT0gNDIxKSB7Ci0JICAgIGxvc3RwZWVyKCk7Ci0JICAgIGlm ICgheHF1aWV0ICYmICFmdHBfZGViKQotCSAgICAgIHByaW50ZigiJXNcbiIscmVwbHlfYnVmKTsK LSAgICAgICAgfQotICAgICAgICBpZiAoKGNhbmNlbGZpbGUgIT0gMCkgJiYKLSNpZm5kZWYgVUxU UklYMwotICAgICAgICAgICAgLyogVWx0cml4IDMuMCBjYyBvYmplY3RzIHZpb2xlbnRseSB0byB0 aGlzIGNsYXVzZSAqLwotICAgICAgICAgICAgKG9sZGludHIgIT0gY21kY2FuY2VsKSAmJgotI2Vu ZGlmIC8qIFVMVFJJWDMgKi8KLSAgICAgICAgICAgIChvbGRpbnRyICE9IFNJR19JR04pKSB7Ci0g ICAgICAgICAgICBpZiAob2xkaW50cikKLSAgICAgICAgICAgICAgKCpvbGRpbnRyKShTSUdJTlQp OwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZXBseV9wYXJzZSkgewotICAgICAgICAgICAgKnJl cGx5X3B0ciA9ICdcMCc7Ci0gICAgICAgICAgICBpZiAoKHJlcGx5X3B0ciA9IGNrc3Ryc3RyKHJl cGx5X2J1ZiwgcmVwbHlfcGFyc2UpKSkgewotICAgICAgICAgICAgICAgIHJlcGx5X3BhcnNlID0g cmVwbHlfcHRyICsgc3RybGVuKHJlcGx5X3BhcnNlKTsKLSAgICAgICAgICAgICAgICBpZiAoKHJl cGx5X3B0ciA9IGNrc3RycGJyayhyZXBseV9wYXJzZSwgIiBcciIpKSkKLSAgICAgICAgICAgICAg ICAgICpyZXBseV9wdHIgPSAnXDAnOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg IHJlcGx5X3BhcnNlID0gcmVwbHlfcHRyOwotICAgICAgICB9Ci0gICAgICAgIHdoaWxlICgqY3Ag PCAnIScgJiYgY3AgPiBmdHBfcmVwbHlfc3RyKSAvKiBSZW1vdmUgdHJhaWxpbmcganVuayAqLwot ICAgICAgICAgICpjcC0tID0gTlVMOwotICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0cmVwbHki LGZ0cF9yZXBseV9zdHIsbiAtICcwJyk7Ci0gICAgICAgIHJldHVybihuIC0gJzAnKTsKLSAgICB9 IC8qIGZvciAoOzspICovCi19Ci0KLSNpZmRlZiBCU0RTRUxFQ1QKLXN0YXRpYyBpbnQKLSNpZmRl ZiBDS19BTlNJQwotZW1wdHkoZmRfc2V0ICogbWFzaywgaW50IHNlYykKLSNlbHNlCi1lbXB0eSht YXNrLCBzZWMpIGZkX3NldCAqIG1hc2s7IGludCBzZWM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8K LXsKLSAgICBzdHJ1Y3QgdGltZXZhbCB0OwotICAgIHQudHZfc2VjID0gKGxvbmcpIHNlYzsKLSAg ICB0LnR2X3VzZWMgPSAwTDsKLSAgICBkZWJ1ZyhGMTAwLCJmdHAgZW1wdHkgY2FsbGluZyBzZWxl Y3QuLi4iLCIiLDApOwotI2lmZGVmIElOVFNFTEVDVAotICAgIHggPSBzZWxlY3QoMzIsIChpbnQg KiltYXNrLCBOVUxMLCBOVUxMLCAmdCk7Ci0jZWxzZQotICAgIHggPSBzZWxlY3QoMzIsIG1hc2ss IChmZF9zZXQgKikgMCwgKGZkX3NldCAqKSAwLCAmdCk7Ci0jZW5kaWYgLyogSU5UU0VMRUNUICov Ci0gICAgZGVidWcoRjEwMSwiZnRwIGVtcHR5IHNlbGVjdCIsIiIseCk7Ci0gICAgcmV0dXJuKHgp OwotfQotI2Vsc2UgLyogQlNEU0VMRUNUICovCi0jaWZkZWYgSUJNU0VMRUNUCi1zdGF0aWMgaW50 Ci1lbXB0eShtYXNrLCBjbnQsIHNlYykgaW50ICogbWFzaywgc2VjOwotICAgICAgICAgICAgICAg ICAgICAgIGludCAgIGNudDsKLXsKLSAgICByZXR1cm4oc2VsZWN0KG1hc2ssY250LDAsMCxzZWMq MTAwMCkpOwotfQotI2VuZGlmIC8qIElCTVNFTEVDVCAqLwotI2VuZGlmIC8qIEJTRFNFTEVDVCAq LwotCi1zdGF0aWMgc2lndHlwZQotY2FuY2Vsc2VuZChzaWcpIGludCBzaWc7IHsKLSAgICBoYXZl c2lnaW50Kys7Ci0gICAgY2FuY2VsZ3JvdXArKzsKLSAgICBjYW5jZWxmaWxlID0gMDsKLSAgICBw cmludGYoIiBDYW5jZWxlZC4uLlxuIik7Ci0gICAgc2VjdXJlX2dldGMoMCwxKTsJCQkvKiBJbml0 aWFsaXplIG5ldCBpbnB1dCBidWZmZXJzICovCi0gICAgZGVidWcoRjEwMCwiZnRwIGNhbmNlbHNl bmQgY2F1Z2h0IFNJR0lOVCAiLCIiLDApOwotICAgIGZmbHVzaChzdGRvdXQpOwotI2lmbmRlZiBP UzIKLSAgICBsb25nam1wKHNlbmRjYW5jZWwsIDEpOwotI2Vsc2UKLSAgICBQb3N0Q3RybENTZW0o KTsKLSNlbmRpZiAvKiBPUzIgKi8KLX0KLQotc3RhdGljIFZPSUQKLSNpZmRlZiBDS19BTlNJQwot c2VjdXJlX2Vycm9yKGNoYXIgKmZtdCwgLi4uKQotI2Vsc2UKLS8qIFZBUkFSR1MxICovCi1zZWN1 cmVfZXJyb3IoZm10LCBwMSwgcDIsIHAzLCBwNCwgcDUpCi0gICBjaGFyICpmbXQ7IGludCBwMSwg cDIsIHAzLCBwNCwgcDU7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSNpZmRlZiBDS19BTlNJ QwotICAgIHZhX2xpc3QgYXA7Ci0KLSAgICB2YV9zdGFydChhcCwgZm10KTsKLSAgICB2ZnByaW50 ZihzdGRlcnIsIGZtdCwgYXApOwotICAgIHZhX2VuZChhcCk7Ci0jZWxzZQotICAgIGZwcmludGYo c3RkZXJyLCBmbXQsIHAxLCBwMiwgcDMsIHA0LCBwNSk7Ci0jZW5kaWYKLSAgICBmcHJpbnRmKHN0 ZGVyciwgIlxuIik7Ci19Ci0KLS8qCi0gKiBJbnRlcm5hbCBmb3JtIG9mIHNldHR5cGU7IGNoYW5n ZXMgY3VycmVudCB0eXBlIGluIHVzZSB3aXRoIHNlcnZlcgotICogd2l0aG91dCBjaGFuZ2luZyBv dXIgbm90aW9uIG9mIHRoZSB0eXBlIGZvciBkYXRhIHRyYW5zZmVycy4KLSAqIFVzZWQgdG8gY2hh bmdlIHRvIGFuZCBmcm9tIGFzY2lpIGZvciBsaXN0aW5ncy4KLSAqLwotc3RhdGljIFZPSUQKLWNo YW5nZXR5cGUobmV3dHlwZSwgc2hvdykgaW50IG5ld3R5cGUsIHNob3c7IHsKLSAgICBpbnQgcmM7 Ci0gICAgY2hhciAqIHM7Ci0KLSAgICBpZiAoKG5ld3R5cGUgPT0gY3VydHlwZSkgJiYgdHlwZXNl bnQrKykKLSAgICAgIHJldHVybjsKLSAgICBzd2l0Y2ggKG5ld3R5cGUpIHsKLSAgICAgIGNhc2Ug RlRUX0FTQzoKLSAgICAgICAgcyA9ICJBIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZU VF9CSU46Ci0gICAgICAgIHMgPSAiSSI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGVFRf VEVOOgotICAgICAgICBzID0gIkwgOCI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoK LSAgICAgICAgcyA9ICJJIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJjID0gZnRwY21k KCJUWVBFIixzLC0xLC0xLHNob3cpOwotICAgIGlmIChyYyA9PSBSRVBMWV9DT01QTEVURSkKLSAg ICAgIGN1cnR5cGUgPSBuZXd0eXBlOwotfQotCi0vKiBQVVQgYSBmaWxlLiAgUmV0dXJucyAtMSBv biBlcnJvciwgMCBvbiBzdWNjZXNzLCAxIGlmIGZpbGUgc2tpcHBlZCAqLwotCi1zdGF0aWMgVk9J RAotI2lmZGVmIENLX0FOU0lDCi1kb2Z0cHNlbmQodm9pZCAqIHRocmVhZGluZm8pCi0jZWxzZQot ZG9mdHBzZW5kKHRocmVhZGluZm8pIFZPSUQgKiB0aHJlYWRpbmZvOwotI2VuZGlmCi17Ci0jaWZk ZWYgTlRTSUcKLSAgICBpZiAodGhyZWFkaW5mbykgeyAgICAgICAgICAgICAgICAgICAvKiBUaHJl YWQgbG9jYWwgc3RvcmFnZS4uLiAqLwotICAgICAgICBUbHNTZXRWYWx1ZShUbHNJbmRleCx0aHJl YWRpbmZvKTsKLSAgICAgICAgZGVidWcoRjEwMCwgImRvZnRwc2VuZCBjYWxsZWQgd2l0aCB0aHJl YWRpbmZvIGJsb2NrIiwiIiwgMCk7Ci0gICAgfSBlbHNlIGRlYnVnKEYxMDAsICJkb2Z0cHNlbmQg LSB0aHJlYWRpbmZvIGlzIE5VTEwiLCAiIiwgMCk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSNpZmRl ZiBDS19MT0dJTgotI2lmZGVmIElLU0QKLSNpZmRlZiBOVAotICAgIGlmIChpbnNlcnZlcikKLSAg ICAgIHNldG50Y3JlZHMoKTsKLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIElLU0QgKi8KLSNl bmRpZiAvKiBDS19MT0dJTiAqLwotCi0gICAgaWYgKGluaXRjb25uKCkpIHsKLSNpZm5kZWYgTk9I VFRQCi0gICAgICAgIGludCB5ID0gLTE7Ci0gICAgICAgIC8qIGRlYnVnKEYxMDEsImRvZnRwc2Vu ZCIsInRjcF9odHRwX3Byb3h5Iix0Y3BfaHR0cF9wcm94eSk7ICovCi0KLSAgICAgICAvKiAgSWYg dGhlIGNvbm5lY3Rpb24gZmFpbGVkIGFuZCB3ZSBhcmUgdXNpbmcgYW4gSFRUUCBQcm94eQotICAg ICAgICAqICBhbmQgdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUgd2FzIGFuIGF1dGhlbnRpY2F0 aW9uCi0gICAgICAgICogIGVycm9yLCB0aGVuIHdlIG5lZWQgdG8gZ2l2ZSB0aGUgdXNlciB0byBh YmlsaXR5IHRvCi0gICAgICAgICogIGVudGVyIGEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLCBqdXN0 IGxpa2UgYSBicm93c2VyLgotICAgICAgICAqCi0gICAgICAgICogIEkgdHJpZWQgdG8gZG8gYWxs IG9mIHRoaXMgd2l0aGluIHRoZSBuZXRvcGVuKCkgY2FsbAotICAgICAgICAqICBidXQgaXQgaXMg bXVjaCB0b28gbXVjaCB3b3JrLgotICAgICAgICAqLwotICAgICAgICB3aGlsZSAoeSAhPSAwICYm IHRjcF9odHRwX3Byb3h5ICE9IE5VTEwgKSB7Ci0KLSAgICAgICAgICAgIGlmICh0Y3BfaHR0cF9w cm94eV9lcnJubyA9PSA0MDEgfHwKLSAgICAgICAgICAgICAgICAgdGNwX2h0dHBfcHJveHlfZXJy bm8gPT0gNDA3ICkgewotICAgICAgICAgICAgICAgIGNoYXIgdWlkW1VJREJVRkxFTl07Ci0gICAg ICAgICAgICAgICAgY2hhciBwd2RbUFdEU0laXTsKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgdHh0 Ym94IHRiWzJdOwotICAgICAgICAgICAgICAgIGludCBvazsKLQotICAgICAgICAgICAgICAgIHRi WzBdLnRfYnVmID0gdWlkOwotICAgICAgICAgICAgICAgIHRiWzBdLnRfbGVuID0gVUlEQlVGTEVO OwotICAgICAgICAgICAgICAgIHRiWzBdLnRfbGJsID0gIlByb3h5IFVzZXJpZDogIjsKLSAgICAg ICAgICAgICAgICB0YlswXS50X2RmbHQgPSBOVUxMOwotICAgICAgICAgICAgICAgIHRiWzBdLnRf ZWNobyA9IDE7Ci0gICAgICAgICAgICAgICAgdGJbMV0udF9idWYgPSBwd2Q7Ci0gICAgICAgICAg ICAgICAgdGJbMV0udF9sZW4gPSAyNTY7Ci0gICAgICAgICAgICAgICAgdGJbMV0udF9sYmwgPSAi UHJveHkgUGFzc3BocmFzZTogIjsKLSAgICAgICAgICAgICAgICB0YlsxXS50X2RmbHQgPSBOVUxM OwotICAgICAgICAgICAgICAgIHRiWzFdLnRfZWNobyA9IDI7Ci0KLSAgICAgICAgICAgICAgICBv ayA9IHVxX210eHQoIlByb3h5IFNlcnZlciBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZFxuIiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDIsIHRiKTsKLSAgICAgICAgICAgICAg ICBpZiAob2sgJiYgdWlkWzBdKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwcm94eV91 c2VyLCAqIHByb3h5X3B3ZDsKLQotICAgICAgICAgICAgICAgICAgICBwcm94eV91c2VyID0gdGNw X2h0dHBfcHJveHlfdXNlcjsKLSAgICAgICAgICAgICAgICAgICAgcHJveHlfcHdkICA9IHRjcF9o dHRwX3Byb3h5X3B3ZDsKLQotICAgICAgICAgICAgICAgICAgICB0Y3BfaHR0cF9wcm94eV91c2Vy ID0gdWlkOwotICAgICAgICAgICAgICAgICAgICB0Y3BfaHR0cF9wcm94eV9wd2QgPSBwd2Q7Ci0K LSAgICAgICAgICAgICAgICAgICAgeSA9IGluaXRjb25uKCk7Ci0KLSAgICAgICAgICAgICAgICAg ICAgZGVidWcoRjEwMSwiZG9mdHBzZW5kIiwiaW5pdGNvbm4iLHkpOwotICAgICAgICAgICAgICAg ICAgICBtZW1zZXQocHdkLDAsUFdEU0laKTsKLSAgICAgICAgICAgICAgICAgICAgdGNwX2h0dHBf cHJveHlfdXNlciA9IHByb3h5X3VzZXI7Ci0gICAgICAgICAgICAgICAgICAgIHRjcF9odHRwX3By b3h5X3B3ZCA9IHByb3h5X3B3ZDsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggeSAhPSAwICkgewotI2VuZGlmIC8qIE5PSFRU UCAqLwotICAgICAgICAgICAgc2lnbmFsKFNJR0lOVCwgZnRwc25kLm9sZGludHIpOwotI2lmZGVm IFNJR1BJUEUKLSAgICAgICAgICAgIGlmIChmdHBzbmQub2xkaW50cCkKLSAgICAgICAgICAgICAg c2lnbmFsKFNJR1BJUEUsIGZ0cHNuZC5vbGRpbnRwKTsKLSNlbmRpZiAvKiBTSUdQSVBFICovCi0g ICAgICAgICAgICBmdHBjb2RlID0gLTE7Ci0gICAgICAgICAgICB6Y2xvc2UoWklGSUxFKTsKLSAg ICAgICAgICAgIGZ0cHNuZHJldCA9IC0xOwotI2lmZGVmIE5UU0lHCi0gICAgICAgICAgICBja1Ro cmVhZEVuZCh0aHJlYWRpbmZvKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotICAgICAgICAgICAgcmV0 dXJuOwotI2lmbmRlZiBOT0hUVFAKLSAgICAgICAgfQotI2VuZGlmIC8qIE5PSFRUUCAqLwotICAg IH0KLSAgICBmdHBzbmRyZXQgPSAwOwotI2lmZGVmIE5UU0lHCi0gICAgIGNrVGhyZWFkRW5kKHRo cmVhZGluZm8pOwotI2VuZGlmIC8qIE5UU0lHICovCi19Ci0KLXN0YXRpYyBWT0lECi0jaWZkZWYg Q0tfQU5TSUMKLWZhaWxmdHBzZW5kKHZvaWQgKiB0aHJlYWRpbmZvKQotI2Vsc2UKLWZhaWxmdHBz ZW5kKHRocmVhZGluZm8pIFZPSUQgKiB0aHJlYWRpbmZvOwotI2VuZGlmIC8qIENLX0FOU0lDICov Ci17Ci0jaWZkZWYgTlRTSUcKLSAgICBpZiAodGhyZWFkaW5mbykgeyAgICAgICAgICAgICAgICAg ICAvKiBUaHJlYWQgbG9jYWwgc3RvcmFnZS4uLiAqLwotICAgICAgICBUbHNTZXRWYWx1ZShUbHNJ bmRleCx0aHJlYWRpbmZvKTsKLSAgICAgICAgZGVidWcoRjEwMCwgImRvY21kZmlsZSBjYWxsZWQg d2l0aCB0aHJlYWRpbmZvIGJsb2NrIiwiIiwgMCk7Ci0gICAgfSBlbHNlIGRlYnVnKEYxMDAsICJk b2NtZGZpbGUgLSB0aHJlYWRpbmZvIGlzIE5VTEwiLCAiIiwgMCk7Ci0jZW5kaWYgLyogTlRTSUcg Ki8KLSNpZmRlZiBDS19MT0dJTgotI2lmZGVmIElLU0QKLSNpZmRlZiBOVAotICAgIGlmIChpbnNl cnZlcikKLSAgICAgIHNldG50Y3JlZHMoKTsKLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIElL U0QgKi8KLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotCi0gICAgd2hpbGUgKGNwZW5kKSB7Ci0gICAg ICAgIGZ0cHNuZC5yZXBseSA9IGdldHJlcGx5KDAsZnRwc25kLmluY3MsZnRwc25kLm91dGNzLGZ0 cF92Ym0sMCk7Ci0gICAgICAgIGRlYnVnKEYxMTEsImZ0cCBzZW5kcmVxdWVzdCBnZXRyZXBseSIs Im51bGwgY29tbWFuZCIsZnRwc25kLnJlcGx5KTsKLSAgICB9Ci0gICAgaWYgKGRhdGEgPj0gMCkg ewotI2lmZGVmIENLX1NTTAotICAgICAgICBpZiAoc3NsX2Z0cF9kYXRhX2FjdGl2ZV9mbGFnKSB7 Ci0gICAgICAgICAgICBTU0xfc2h1dGRvd24oc3NsX2Z0cF9kYXRhX2Nvbik7Ci0gICAgICAgICAg ICBTU0xfZnJlZShzc2xfZnRwX2RhdGFfY29uKTsKLSAgICAgICAgICAgIHNzbF9mdHBfZGF0YV9h Y3RpdmVfZmxhZyA9IDA7Ci0gICAgICAgICAgICBzc2xfZnRwX2RhdGFfY29uID0gTlVMTDsKLSAg ICAgICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotI2lmZGVmIFRDUElQTElCCi0gICAgICAgIHNv Y2tldF9jbG9zZShkYXRhKTsKLSNlbHNlIC8qIFRDUElQTElCICovCi0jaWZkZWYgVVNFX1NIVVRE T1dOCi0gICAgICAgIHNodXRkb3duKGRhdGEsIDErMSk7Ci0jZW5kaWYgLyogVVNFX1NIVVRET1dO ICovCi0gICAgICAgIGNsb3NlKGRhdGEpOwotI2VuZGlmIC8qIFRDUElQTElCICovCi0gICAgICAg IGRhdGEgPSAtMTsKLSAgICAgICAgZ2xvYmFsZGluID0gLTE7Ci0gICAgfQotICAgIGlmIChmdHBz bmQub2xkaW50cikKLSAgICAgICAgc2lnbmFsKFNJR0lOVCxmdHBzbmQub2xkaW50cik7Ci0jaWZk ZWYgU0lHUElQRQotICAgIGlmIChmdHBzbmQub2xkaW50cCkKLSAgICAgICAgc2lnbmFsKFNJR1BJ UEUsZnRwc25kLm9sZGludHApOwotI2VuZGlmIC8qIFNJR1BJUEUgKi8KLSAgICBmdHBjb2RlID0g LTE7Ci0jaWZuZGVmIE9TMgotICAgIC8qIFRFU1QgTUUgSU4gSzk1ICovCi0gICAgaWYgKGhhdmVz aWdpbnQpIHsKLQloYXZlc2lnaW50ID0gMDsKLQlkZWJ1ZyhGMTAwLCJmdHAgZmFpbGZ0cHNlbmQg Y2hhaW4gdG8gdHJhcCgpLi4uIiwiIiwwKTsKLQlpZiAoZnRwc25kLm9sZGludHIgIT0gU0lHX0lH TikKLQkgICgqZnRwc25kLm9sZGludHIpKFNJR0lOVCk7Ci0JLyogTk9UUkVBQ0hFRCAoSSBob3Bl ISkgKi8KLQlkZWJ1ZyhGMTAwLCJmdHAgZmFpbGZ0cHNlbmQgcmV0dXJuIGZyb20gdHJhcCgpLi4u IiwiIiwwKTsKLSAgICB9Ci0jZW5kaWYgLyogT1MyICovCi19Ci0KLXN0YXRpYyBWT0lECi0jaWZk ZWYgQ0tfQU5TSUMKLWZhaWxmdHBzZW5kMih2b2lkICogdGhyZWFkaW5mbykKLSNlbHNlCi1mYWls ZnRwc2VuZDIodGhyZWFkaW5mbykgVk9JRCAqIHRocmVhZGluZm87Ci0jZW5kaWYgLyogQ0tfQU5T SUMgKi8KLXsKLSNpZmRlZiBOVFNJRwotICAgIGlmICh0aHJlYWRpbmZvKSB7ICAgICAgICAgICAg ICAgICAgIC8qIFRocmVhZCBsb2NhbCBzdG9yYWdlLi4uICovCi0gICAgICAgIFRsc1NldFZhbHVl KFRsc0luZGV4LHRocmVhZGluZm8pOwotICAgICAgICBkZWJ1ZyhGMTAwLCAiZG9jbWRmaWxlIGNh bGxlZCB3aXRoIHRocmVhZGluZm8gYmxvY2siLCIiLCAwKTsKLSAgICB9IGVsc2UgZGVidWcoRjEw MCwgImRvY21kZmlsZSAtIHRocmVhZGluZm8gaXMgTlVMTCIsICIiLCAwKTsKLSNlbmRpZiAvKiBO VFNJRyAqLwotI2lmZGVmIENLX0xPR0lOCi0jaWZkZWYgSUtTRAotI2lmZGVmIE5UCi0gICAgaWYg KGluc2VydmVyKQotICAgICAgc2V0bnRjcmVkcygpOwotI2VuZGlmIC8qIE5UICovCi0jZW5kaWYg LyogSUtTRCAqLwotI2VuZGlmIC8qIENLX0xPR0lOICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJmdHAg c2VuZHJlcXVlc3QgY2FuY2VsZWQiLCIiLGZ0cHNuZC5ieXRlcyk7Ci0gICAgdGZjICs9IGZmYzsK LSNpZmRlZiBHRlRJTUVSCi0gICAgZnBmc2VjcyA9IGdmdGltZXIoKTsKLSNlbmRpZiAvKiBHRlRJ TUVSICovCi0gICAgemNsb3NlKFpJRklMRSk7Ci0jaWZkZWYgUElQRVNFTkQKLSAgICBpZiAoc25k ZmlsdGVyKQotICAgICAgcGlwZXNlbmQgPSAwOwotI2VuZGlmIC8qIFBJUEVTRU5EICovCi0gICAg c2lnbmFsKFNJR0lOVCwgZnRwc25kLm9sZGludHIpOwotI2lmZGVmIFNJR1BJUEUKLSAgICBpZiAo ZnRwc25kLm9sZGludHApCi0gICAgICBzaWduYWwoU0lHUElQRSwgZnRwc25kLm9sZGludHApOwot I2VuZGlmIC8qIFNJR1BJUEUgKi8KLSAgICBpZiAoIWNwZW5kKSB7Ci0gICAgICAgIGZ0cGNvZGUg PSAtMTsKLSAgICAgICAgZnRwc25kcmV0ID0gLTE7Ci0jaWZkZWYgTlRTSUcKLSAgICAgICAgY2tU aHJlYWRFbmQodGhyZWFkaW5mbyk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSAgICAgICAgcmV0dXJu OwotICAgIH0KLSAgICBpZiAoZGF0YSA+PSAwKSB7Ci0jaWZkZWYgQ0tfU1NMCi0gICAgICAgIGlm IChzc2xfZnRwX2RhdGFfYWN0aXZlX2ZsYWcpIHsKLSAgICAgICAgICAgIFNTTF9zaHV0ZG93bihz c2xfZnRwX2RhdGFfY29uKTsKLSAgICAgICAgICAgIFNTTF9mcmVlKHNzbF9mdHBfZGF0YV9jb24p OwotICAgICAgICAgICAgc3NsX2Z0cF9kYXRhX2FjdGl2ZV9mbGFnID0gMDsKLSAgICAgICAgICAg IHNzbF9mdHBfZGF0YV9jb24gPSBOVUxMOwotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICov Ci0jaWZkZWYgVENQSVBMSUIKLSAgICAgICAgc29ja2V0X2Nsb3NlKGRhdGEpOwotI2Vsc2UgLyog VENQSVBMSUIgKi8KLSNpZmRlZiBVU0VfU0hVVERPV04KLSAgICAgICAgc2h1dGRvd24oZGF0YSwg MSsxKTsKLSNlbmRpZiAvKiBVU0VfU0hVVERPV04gKi8KLSAgICAgICAgY2xvc2UoZGF0YSk7Ci0j ZW5kaWYgLyogVENQSVBMSUIgKi8KLSAgICAgICAgZGF0YSA9IC0xOwotICAgICAgICBnbG9iYWxk aW4gPSAtMTsKLSAgICB9Ci0gICAgaWYgKGRvdXQpIHsKLSNpZmRlZiBUQ1BJUExJQgotICAgICAg ICBzb2NrZXRfY2xvc2UoZG91dCk7Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwotI2lmZGVmIFVTRV9T SFVURE9XTgotICAgICAgICBzaHV0ZG93bihkb3V0LCAxKzEpOwotI2VuZGlmIC8qIFVTRV9TSFVU RE9XTiAqLwotICAgICAgICBjbG9zZShkb3V0KTsKLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotICAg IH0KLSAgICBmdHBzbmQucmVwbHkgPSBnZXRyZXBseSgwLGZ0cHNuZC5pbmNzLGZ0cHNuZC5vdXRj cyxmdHBfdmJtLDApOwotICAgIGZ0cGNvZGUgPSAtMTsKLSAgICBmdHBzbmRyZXQgPSAtMTsKLQot I2lmbmRlZiBPUzIKLSAgICAvKiBURVNUIE1FIElOIEs5NSAqLwotICAgIGlmIChoYXZlc2lnaW50 KSB7Ci0JaGF2ZXNpZ2ludCA9IDA7Ci0JZGVidWcoRjEwMCwiZnRwIGZhaWxmdHBzZW5kMiBjaGFp biB0byB0cmFwKCkuLi4iLCIiLDApOwotCWlmIChmdHBzbmQub2xkaW50ciAhPSBTSUdfSUdOKQot CSAgKCpmdHBzbmQub2xkaW50cikoU0lHSU5UKTsKLQkvKiBOT1RSRUFDSEVEIChJIGhvcGUhKSAq LwotCWRlYnVnKEYxMDAsImZ0cCBmYWlsZnRwc2VuZDIgcmV0dXJuIGZyb20gdHJhcCgpLi4uIiwi IiwwKTsKLSAgICB9Ci0jZW5kaWYgLyogT1MyICovCi19Ci0KLXN0YXRpYyBWT0lECi0jaWZkZWYg Q0tfQU5TSUMKLWRvZnRwc2VuZDIodm9pZCAqIHRocmVhZGluZm8pCi0jZWxzZQotZG9mdHBzZW5k Mih0aHJlYWRpbmZvKSBWT0lEICogdGhyZWFkaW5mbzsKLSNlbmRpZgotewotICAgIHJlZ2lzdGVy IGludCBjLCBkID0gMDsKLSAgICBpbnQgbiwgdCwgeCwgbm90YWZpbGUsIHVuaXF1ZSA9IDA7Ci0g ICAgY2hhciAqYnVmLCAqYnVmcDsKLSAgICAKLSNpZmRlZiBOVFNJRwotICAgIGlmICh0aHJlYWRp bmZvKSB7ICAgICAgICAgICAgICAgICAgIC8qIFRocmVhZCBsb2NhbCBzdG9yYWdlLi4uICovCi0g ICAgICAgIFRsc1NldFZhbHVlKFRsc0luZGV4LHRocmVhZGluZm8pOwotICAgICAgICBkZWJ1ZyhG MTAwLCAiZG9mdHBzZW5kMiBjYWxsZWQgd2l0aCB0aHJlYWRpbmZvIGJsb2NrIiwiIiwgMCk7Ci0g ICAgfSBlbHNlIGRlYnVnKEYxMDAsICJkb2Z0cHNlbmQyIC0gdGhyZWFkaW5mbyBpcyBOVUxMIiwg IiIsIDApOwotI2VuZGlmIC8qIE5UU0lHICovCi0jaWZkZWYgQ0tfTE9HSU4KLSNpZmRlZiBJS1NE Ci0jaWZkZWYgTlQKLSAgICBpZiAoaW5zZXJ2ZXIpCi0gICAgICBzZXRudGNyZWRzKCk7Ci0jZW5k aWYgLyogTlQgKi8KLSNlbmRpZiAvKiBJS1NEICovCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLQot ICAgIGJ1ZiA9IGZ0cHNuZGJ1ZjsJCQkvKiAobm90IG9uIHN0YWNrKSAqLwotCi0gICAgdW5pcXVl ID0gc3RyY21wKGZ0cHNuZC5jbWQsIlNUT1UiKSA/IDAgOiAxOwotICAgIG5vdGFmaWxlID0gc25k YXJyYXkgfHwgcGlwZXNlbmQ7Ci0KLSNpZmRlZiBGVFBfUkVTVEFSVAotICAgIGlmIChmdHBzbmQu cmVzdGFydCAmJiAoKGN1cnR5cGUgPT0gRlRUX0JJTikgfHwgKGFsaWtlID4gMCkpKSB7Ci0gICAg ICAgIGNoYXIgKiBwOwotICAgICAgICBjaGFuZ2V0eXBlKEZUVF9CSU4sMCk7ICAgICAgICAgIC8q IENoYW5nZSB0byBiaW5hcnkgKi8KLQotICAgICAgICAvKiBBc2sgZm9yIHJlbW90ZSBmaWxlJ3Mg c2l6ZSAqLwotICAgICAgICB4ID0gZnRwY21kKCJTSVpFIixmdHBzbmQucmVtb3RlLGZ0cHNuZC5p bmNzLGZ0cHNuZC5vdXRjcyxmdHBfdmJtKTsKLQotICAgICAgICBpZiAoeCA9PSBSRVBMWV9DT01Q TEVURSkgeyAgICAgIC8qIEhhdmUgZnRwc25kLnJlcGx5ICovCi0gICAgICAgICAgICBwID0gJmZ0 cF9yZXBseV9zdHJbNF07ICAgICAgLyogUGFyc2UgaXQgKi8KLSAgICAgICAgICAgIHdoaWxlIChp c2RpZ2l0KCpwKSkgewotICAgICAgICAgICAgICAgIHNlbmRzdGFydCA9IHNlbmRzdGFydCAqIDEw ICsgKGludCkoKnAgLSAnMCcpOwotICAgICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIGlmICgqcCAmJiAqcCAhPSBDUikgeyAgICAgICAvKiBCYWQgbnVtYmVyICov Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZG9mdHBzZW5kMiBiYWQgc2l6ZSIsZnRwX3Jl cGx5X3N0ciwwKTsKLSAgICAgICAgICAgICAgICBzZW5kc3RhcnQgPSAoQ0tfT0ZGX1QpMDsKLSAg ICAgICAgICAgIH0gZWxzZSBpZiAoc2VuZHN0YXJ0ID4gZnNpemUpIHsgLyogUmVtb3RlIGZpbGUg YmlnZ2VyIHRoYW4gbG9jYWwgKi8KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJkb2Z0cHNl bmQyIGJpZyBzaXplIixja2ZzdG9hKGZzaXplKSxzZW5kc3RhcnQpOwotICAgICAgICAgICAgICAg IHNlbmRzdGFydCA9IChDS19PRkZfVCkwOwotICAgICAgICAgICAgfQotCSAgICAvKiBMb2NhbCBp cyBuZXdlciAqLwotICAgICAgICAgICAgZGVidWcoRjExMSwiZG9mdHBzZW5kMiBzaXplIixmdHBz bmQucmVtb3RlLHNlbmRzdGFydCk7Ci0gICAgICAgICAgICBpZiAoY2hrbW9kdGltZShmdHBzbmQu bG9jYWwsZnRwc25kLnJlbW90ZSwwKSA9PSAyKSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEx MCwiZG9mdHBzZW5kMiBkYXRlIG1pc21hdGNoIixmdHBfcmVwbHlfc3RyLDApOwotICAgICAgICAg ICAgICAgIHNlbmRzdGFydCA9IChDS19PRkZfVCkwOyAvKiBTZW5kIHRoZSB3aG9sZSBmaWxlICov Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2hhbmdldHlwZShmdHBfdHlwLDAp OyAgICAgICAgICAvKiBDaGFuZ2UgYmFjayB0byBhcHByb3ByaWF0ZSB0eXBlICovCi0gICAgICAg IGlmIChzZW5kc3RhcnQgPiAoQ0tfT0ZGX1QpMCkgewkvKiBTdGlsbCByZXN0YXJ0aW5nPyAqLwot ICAgICAgICAgICAgaWYgKHNlbmRzdGFydCA9PSBmc2l6ZSkgeyAgIC8qIFNhbWUgc2l6ZSAtIG5v IG5lZWQgdG8gc2VuZCAqLwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImRvZnRwc2VuZDIg L3Jlc3RhcnQgU0tJUCIsCi0JCSAgICAgIGNrZnN0b2EoZnNpemUpLHNlbmRzdGFydCk7Ci0gICAg ICAgICAgICAgICAgemNsb3NlKFpJRklMRSk7Ci0gICAgICAgICAgICAgICAgZnRwc25kcmV0ID0g U0tQX1JFUzsKLSNpZmRlZiBOVFNJRwotICAgICAgICAgICAgICAgIGNrVGhyZWFkRW5kKHRocmVh ZGluZm8pOwotI2VuZGlmIC8qIE5UU0lHICovCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg ICAgICAgICAgfQotICAgICAgICAgICAgZXJybm8gPSAwOyAgICAgICAgICAgICAgICAgIC8qIFJl c3RhcnQgbmVlZGVkLCBzZWVrIHRvIHRoZSBzcG90ICovCi0gICAgICAgICAgICBpZiAoemZzZWVr KChsb25nKXNlbmRzdGFydCkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwiZG9m dHBzZW5kMiB6ZnNlZWsgZmFpbHMiLAotCQkgICAgICBmdHBzbmQubG9jYWwsc2VuZHN0YXJ0KTsK LSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZTRUVLOiAlczogJXNcbiIsIGZ0cHNu ZC5sb2NhbCwgY2tfZXJyc3RyKCkpOwotICAgICAgICAgICAgICAgIHNlbmRzdGFydCA9IDA7Ci0g ICAgICAgICAgICAgICAgemNsb3NlKFpJRklMRSk7Ci0gICAgICAgICAgICAgICAgZnRwc25kcmV0 ID0gLTE7Ci0jaWZkZWYgTlRTSUcKLSAgICAgICAgICAgICAgICBja1RocmVhZEVuZCh0aHJlYWRp bmZvKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg ICAgICAgIH0KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJkb2Z0cHNl bmQyIHpmc2VlayBvayIsZnRwc25kLmxvY2FsLHNlbmRzdGFydCk7Ci0gICAgICAgICAgICB4ID0g ZnRwY21kKCJSRVNUIixja2x0b2Eoc2VuZHN0YXJ0KSwtMSwtMSxmdHBfdmJtKTsKLSAgICAgICAg ICAgIGlmICh4ICE9IFJFUExZX0NPTlRJTlVFKSB7Ci0gICAgICAgICAgICAgICAgc2VuZHN0YXJ0 ID0gMDsKLSAgICAgICAgICAgICAgICB6Y2xvc2UoWklGSUxFKTsKLSAgICAgICAgICAgICAgICBm dHBzbmRyZXQgPSAtMTsKLSNpZmRlZiBOVFNJRwotICAgICAgICAgICAgICAgIGNrVGhyZWFkRW5k KHRocmVhZGluZm8pOwotI2VuZGlmIC8qIE5UU0lHICovCi0gICAgICAgICAgICAgICAgcmV0dXJu OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmdHBzbmQuY21kID0gIlNU T1IiOwotICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgIHNlbmRtb2RlID0gU01fUkVT RU5EOwotICAgICAgICAgICAgZnRwc25kLmNtZCA9ICJBUFBFIjsKLSNlbmRpZiAvKiBDT01NRU5U ICovCi0gICAgICAgICAgICAvKiBzZW5kc3RhcnQgPSAoQ0tfT0ZGX1QpMDsgKi8KLSAgICAgICAg fQotICAgIH0KLSNlbmRpZiAvKiBGVFBfUkVTVEFSVCAqLwotCi0gICAgaWYgKHVuaXF1ZSAmJiAh c3RvdWFyZykJCS8qIElmIHdlIGtub3cgU1RPVSBhY2NlcHRzIG5vIGFyZyAqLwotICAgICAgZnRw c25kLnJlbW90ZSA9IE5VTEw7CQkvKiBkb24ndCBpbmNsdWRlIG9uZS4gKi8KLQotICAgIHggPSBm dHBjbWQoZnRwc25kLmNtZCwgZnRwc25kLnJlbW90ZSwgZnRwc25kLmluY3MsIGZ0cHNuZC5vdXRj cywgZnRwX3ZibSk7Ci0gICAgZGVidWcoRjExMSwiZG9mdHBzZW5kMiBmdHBjb2RlIixmdHBzbmQu Y21kLGZ0cGNvZGUpOwotICAgIGRlYnVnKEYxMDEsImRvZnRwc2VuZDIgZnRwY21kIiwiIix4KTsK LQotICAgIGlmICh4ICE9IFJFUExZX1BSRUxJTSAmJiB1bmlxdWUpIHsKLQkvKgotCSAgUkZDOTU5 IHNheXMgU1RPVSBkb2VzIG5vdCB0YWtlIGFuIGFyZ3VtZW50LiAgQnV0IGV2ZXJ5IEZUUCBzZXJ2 ZXIKLQkgIEkndmUgZW5jb3VudGVyZWQgYnV0IG9uZSBhY2NlcHRzIHRoZSBhcmcgYW5kIGNvbnN0 cnVjdHMgdGhlIHVuaXF1ZQotCSAgbmFtZSBmcm9tIGl0LCB3aGljaCBpcyBiZXR0ZXIgdGhhbiBt YWtpbmcgdXAgYSB0b3RhbGx5IHJhbmRvbSBuYW1lCi0JICBmb3IgdGhlIGZpbGUsIHdoaWNoIGlz IHdoYXQgUkZDOTU5IGNhbGxzIGZvci4gIEVzcGVjaWFsbHkgYmVjYXVzZQotCSAgdGhlcmUgaXMg bm8gd2F5IGZvciB0aGUgY2xpZW50IHRvIGZpbmQgb3V0IHRoZSBuYW1lIGNob3NlbiBieSB0aGUK LQkgIHNlcnZlci4gIFNvIHdlIHRyeSBTVE9VIHdpdGggdGhlIGFyZ3VtZW50IGZpcnN0LCB3aGlj aCB3b3JrcyB3aXRoCi0JICBtb3N0IHNlcnZlcnMsIGFuZCBpZiBpdCBmYWlscyB3ZSByZXRyeSBp dCB3aXRob3V0IHRoZSBhcmcsIGZvcgotCSAgdGhlIGJlbmVmaXQgb2YgdGhlIG9uZSBwaWNreSBz ZXJ2ZXIgdGhhdCBpcyBub3QgImxpYmVyYWwgaW4gd2hhdAotCSAgaXQgYWNjZXB0cyIgVU5MRVNT IHRoZSBmaXJzdCBTVE9VIGdvdCBhIDUwMiBjb2RlICgibm90IGltcGxlbWVudGVkIikKLQkgIHdo aWNoIG1lYW5zIFNUT1UgaXMgbm90IGFjY2VwdGVkLCBwZXJpb2QuCi0JKi8KLQlpZiAoKHggPT0g NSkgJiYgc3RvdWFyZyAmJiAoZnRwY29kZSAhPSA1MDIpKSB7Ci0JICAgIHggPSBmdHBjbWQoZnRw c25kLmNtZCxOVUxMLGZ0cHNuZC5pbmNzLGZ0cHNuZC5vdXRjcyxmdHBfdmJtKTsgCi0JICAgIGlm ICh4ID09IFJFUExZX1BSRUxJTSkJLyogSWYgYWNjZXB0ZWQgKi8KLQkgICAgICBzdG91YXJnID0g MDsJCS8qIGZsYWcgbm8gU1RPVSBhcmcgZm9yIHRoaXMgc2VydmVyICovCi0JfQotICAgIH0KLSAg ICBpZiAoeCAhPSBSRVBMWV9QUkVMSU0pIHsKLSAgICAgICAgc2lnbmFsKFNJR0lOVCwgZnRwc25k Lm9sZGludHIpOwotI2lmZGVmIFNJR1BJUEUKLSAgICAgICAgaWYgKGZ0cHNuZC5vbGRpbnRwKQot ICAgICAgICAgIHNpZ25hbChTSUdQSVBFLCBmdHBzbmQub2xkaW50cCk7Ci0jZW5kaWYgLyogU0lH UElQRSAqLwotCWRlYnVnKEYxMDEsImRvZnRwc2VuZDIgbm90IFJFUExZX1BSRUxJTSIsIiIseCk7 Ci0gICAgICAgIHpjbG9zZShaSUZJTEUpOwotI2lmZGVmIFBJUEVTRU5ECi0gICAgICAgIGlmIChz bmRmaWx0ZXIpCi0gICAgICAgICAgcGlwZXNlbmQgPSAwOwotI2VuZGlmIC8qIFBJUEVTRU5EICov Ci0gICAgICAgIGZ0cHNuZHJldCA9IC0xOwotI2lmZGVmIE5UU0lHCi0gICAgICAgIGNrVGhyZWFk RW5kKHRocmVhZGluZm8pOwotI2VuZGlmIC8qIE5UU0lHICovCi0gICAgICAgIHJldHVybjsKLSAg ICB9Ci0gICAgZGVidWcoRjEwMCwiZG9mdHBzZW5kMiBnZXR0aW5nIGRhdGEgY29ubmVjdGlvbi4u LiIsIiIsMCk7Ci0gICAgZG91dCA9IGRhdGFjb25uKGZ0cHNuZC5sbW9kZSk7ICAgICAgICAgICAg IC8qIEdldCBkYXRhIGNvbm5lY3Rpb24gKi8KLSAgICBkZWJ1ZyhGMTAxLCJkb2Z0cHNlbmQyIGRh dGFjb25uIiwiIixkb3V0KTsKLSAgICBpZiAoZG91dCA9PSAtMSkgewotICAgICAgICBmYWlsZnRw c2VuZDIodGhyZWFkaW5mbyk7Ci0jaWZkZWYgTlRTSUcKLSAgICAgICAgY2tUaHJlYWRFbmQodGhy ZWFkaW5mbyk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg ICAvKiBJbml0aWFsaXplIHBlci1maWxlIHN0YXRzICovCi0gICAgZmZjID0gKENLX09GRl9UKTA7 CQkJLyogQ2hhcmFjdGVyIGNvdW50ZXIgKi8KLSAgICBjcHMgPSBvbGRjcHMgPSAwTDsgICAgICAg ICAgICAgICAgICAvKiBUaHJ1cHV0ICovCi0gICAgbiA9IDA7Ci0jaWZkZWYgR0ZUSU1FUgotICAg IHJmdGltZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlc2V0IGYucC4gdGltZXIg Ki8KLSNlbmRpZiAvKiBHRlRJTUVSICovCi0KLSNpZmRlZiBTSUdQSVBFCi0gICAgZnRwc25kLm9s ZGludHAgPSBzaWduYWwoU0lHUElQRSwgU0lHX0lHTik7Ci0jZW5kaWYgLyogU0lHUElQRSAqLwot ICAgIGRlYnVnKEYxMDEsImRvZnRwc2VuZDIgY3VydHlwZSIsIiIsY3VydHlwZSk7Ci0gICAgc3dp dGNoIChjdXJ0eXBlKSB7Ci0gICAgICBjYXNlIEZUVF9CSU46ICAgICAgICAgICAgICAgICAgICAg LyogQmluYXJ5IG1vZGUgKi8KLSAgICAgIGNhc2UgRlRUX1RFTjoKLSAgICAgICAgZXJybm8gPSBk ID0gMDsKLSNpZmRlZiBWTVMKLQkvKgotCSAgVGhpcyBpcyBiZWNhdXNlIFZNUyB6eGluKCkgaXMg Qy1MaWJyYXJ5IGZyZWFkKCkgCi0gICAgICAgICAgYnV0IHRoZSBmaWxlIHdhcyBvcGVuZWQgd2l0 aCB6b3BlbmkoKSwgd2hpY2ggaXMgUk1TLgotCSovCi0Jd2hpbGUgKCgoYyA9IHptaW5jaGFyKCkp ID4gLTEpICYmICFjYW5jZWxmaWxlKSB7Ci0JICAgIGZmYysrOwotCSAgICBpZiAoenpvdXQoZG91 dCxjKSA8IDApCi0JICAgICAgYnJlYWs7Ci0JfQotI2Vsc2UgIC8qIFZNUyAqLwotICAgICAgICB3 aGlsZSAoKG4gPSB6eGluKFpJRklMRSxidWYsRlRQX0JVRlNJWiAtIDEpKSA+IDAgJiYgIWNhbmNl bGZpbGUpIHsKLSAgICAgICAgICAgIGZ0cHNuZC5ieXRlcyArPSBuOwotICAgICAgICAgICAgZmZj ICs9IG47Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJkb2Z0cHNlbmQyIHp4aW4iLGNrbHRvYShu KSxmZmMpOwotICAgICAgICAgICAgY2toZXhkdW1wKCJkb2Z0cHNlbmQyIHp4aW4iLGJ1ZiwxNik7 Ci0jaWZkZWYgQ0tfU1NMCi0gICAgICAgICAgICBpZiAoc3NsX2Z0cF9kYXRhX2FjdGl2ZV9mbGFn KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChidWZwID0gYnVmOyBuID4gMDsgbiAtPSBkLCBidWZw ICs9IGQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChkID0gU1NMX3dyaXRlKHNzbF9mdHBf ZGF0YV9jb24sIGJ1ZnAsIG4pKSA8PSAwKQotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICAgICAgICBzcGFja2V0cysrOwotICAgICAgICAgICAgICAgICAgICBwa3Ru dW0rKzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZkaXNwbGEgIT0gWFlGRF9CKSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICBzcGt0bCA9IGQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm dHNjcmVlbihTQ1JfUFQsJ0QnLChDS19PRkZfVClzcGFja2V0cyxOVUxMKTsKLSAgICAgICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0jZW5k aWYgLyogQ0tfU1NMICovCi0gICAgICAgICAgICAgICAgZm9yIChidWZwID0gYnVmOyBuID4gMDsg biAtPSBkLCBidWZwICs9IGQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCgoZCA9IHNlY3Vy ZV93cml0ZShkb3V0LCAoQ0hBUiAqKWJ1ZnAsIG4pKSA8PSAwKQotICAgICAgICAgICAgICAgICAg ICAgICAgfHwgaXNjYW5jZWxlZCgpKQotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgICAgICAgICBzcGFja2V0cysrOwotICAgICAgICAgICAgICAgICAgICBwa3RudW0r KzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZkaXNwbGEgIT0gWFlGRF9CKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBzcGt0bCA9IGQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdHNj cmVlbihTQ1JfUFQsJ0QnLChDS19PRkZfVClzcGFja2V0cyxOVUxMKTsKLSAgICAgICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAgIH0K LSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICAgIGlmIChkIDw9IDApCi0gICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICB9Ci0jZW5kaWYJLyogVk1TICovCi0KLQlkZWJ1ZyhGMTExLCJk b2Z0cHNlbmQyIFhYIHp4aW4iLGNrbHRvYShuKSxmZmMpOwotICAgICAgICBpZiAobiA8IDApCi0g ICAgICAgICAgZnByaW50ZihzdGRlcnIsICJsb2NhbDogJXM6ICVzXG4iLCBmdHBzbmQubG9jYWws IGNrX2VycnN0cigpKTsKLSAgICAgICAgaWYgKGQgPCAwIHx8IChkID0gc2VjdXJlX2ZsdXNoKGRv dXQpKSA8IDApIHsKLSAgICAgICAgICAgIGlmIChkID09IC0xICYmIGVycm5vICYmIGVycm5vICE9 IEVQSVBFKQotICAgICAgICAgICAgICBwZXJyb3IoIm5ldG91dCIpOwotICAgICAgICAgICAgZnRw c25kLmJ5dGVzID0gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2Ug RlRUX0FTQzogICAgICAgICAgICAgICAgICAgICAvKiBUZXh0IG1vZGUgKi8KLSNpZm5kZWYgTk9D U0VUUwotICAgICAgICBpZiAoZnRwc25kLnhsYXRlKSB7ICAgICAgICAgICAgIC8qIFdpdGggdHJh bnNsYXRpb24gKi8KLSAgICAgICAgICAgIGluaXR4bGF0ZShmdHBzbmQuaW5jcyxmdHBzbmQub3V0 Y3MpOwotICAgICAgICAgICAgd2hpbGUgKCFjYW5jZWxmaWxlKSB7Ci0gICAgICAgICAgICAgICAg aWYgKChjMCA9IHhnbmJ5dGUoRkNfVUNTMixmdHBzbmQuaW5jcyxOVUxMKSkgPCAwKSBicmVhazsK LSAgICAgICAgICAgICAgICBpZiAoKHggPSB4cG5ieXRlKGMwLFRDX1VDUzIsZnRwc25kLm91dGNz LHh4b3V0KSkgPCAwKSBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSNl bmRpZiAvKiBOT0NTRVRTICovCi0gICAgICAgICAgICAvKiBUZXh0IG1vZGUsIG5vIHRyYW5zbGF0 aW9uICovCi0gICAgICAgICAgICB3aGlsZSAoKChjID0gem1pbmNoYXIoKSkgPiAtMSkgJiYgIWNh bmNlbGZpbGUpIHsKLSAgICAgICAgICAgICAgICBmZmMrKzsKLQkJaWYgKHh4b3V0KGMpIDwgMCkK LQkJICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGQgPSAwOwotI2lmbmRlZiBO T0NTRVRTCi0gICAgICAgIH0KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0gICAgICAgIGlmIChkb3V0 ID09IC0xIHx8IChkID0gc2VjdXJlX2ZsdXNoKGRvdXQpKSA8IDApIHsKLSAgICAgICAgICAgIGlm IChkID09IC0xICYmIGVycm5vICYmIGVycm5vICE9IEVQSVBFKQotICAgICAgICAgICAgICBwZXJy b3IoIm5ldG91dCIpOwotICAgICAgICAgICAgZnRwc25kLmJ5dGVzID0gLTE7Ci0gICAgICAgIH0K LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHRmYyArPSBmZmM7ICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFRvdGFsIGZpbGUgY2hhcnMgKi8KLSNpZmRlZiBHRlRJTUVSCi0gICAgZnBmc2Vj cyA9IGdmdGltZXIoKTsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0gICAgemNsb3NlKFpJRklMRSk7 ICAgICAgICAgICAgICAgICAgICAgLyogQ2xvc2UgaW5wdXQgZmlsZSAqLwotI2lmZGVmIFBJUEVT RU5ECi0gICAgaWYgKHNuZGZpbHRlcikgICAgICAgICAgICAgICAgICAgICAgLyogVW5kbyB0aGlz IChpdCdzIHBlciBmaWxlKSAqLwotICAgICAgcGlwZXNlbmQgPSAwOwotI2VuZGlmIC8qIFBJUEVT RU5EICovCi0KLSNpZmRlZiBDS19TU0wKLSAgICAgICAgaWYgKHNzbF9mdHBfZGF0YV9hY3RpdmVf ZmxhZykgewotICAgICAgICAgICAgU1NMX3NodXRkb3duKHNzbF9mdHBfZGF0YV9jb24pOwotICAg ICAgICAgICAgU1NMX2ZyZWUoc3NsX2Z0cF9kYXRhX2Nvbik7Ci0gICAgICAgICAgICBzc2xfZnRw X2RhdGFfYWN0aXZlX2ZsYWcgPSAwOwotICAgICAgICAgICAgc3NsX2Z0cF9kYXRhX2NvbiA9IE5V TEw7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotI2lmZGVmIFRDUElQTElCCi0g ICAgc29ja2V0X2Nsb3NlKGRvdXQpOyAgICAgICAgICAgICAgICAgLyogQ2xvc2UgZGF0YSBjb25u ZWN0aW9uICovCi0jZWxzZSAvKiBUQ1BJUExJQiAqLwotI2lmZGVmIFVTRV9TSFVURE9XTgotICAg IHNodXRkb3duKGRvdXQsIDErMSk7Ci0jZW5kaWYgLyogVVNFX1NIVVRET1dOICovCi0gICAgY2xv c2UoZG91dCk7Ci0jZW5kaWYgLyogVENQSVBMSUIgKi8KLSAgICBmdHBzbmQucmVwbHkgPSBnZXRy ZXBseSgwLGZ0cHNuZC5pbmNzLGZ0cHNuZC5vdXRjcyxmdHBfdmJtLDApOwotICAgIHNpZ25hbChT SUdJTlQsIGZ0cHNuZC5vbGRpbnRyKTsgICAgICAgICAgICAvKiBQdXQgYmFjayBpbnRlcnJ1cHRz ICovCi0jaWZkZWYgU0lHUElQRQotICAgIGlmIChmdHBzbmQub2xkaW50cCkKLSAgICAgIHNpZ25h bChTSUdQSVBFLCBmdHBzbmQub2xkaW50cCk7Ci0jZW5kaWYgLyogU0lHUElQRSAqLwotICAgIGlm IChmdHBzbmQucmVwbHkgPT0gUkVQTFlfVFJBTlNJRU5UIHx8IGZ0cHNuZC5yZXBseSA9PSBSRVBM WV9FUlJPUikgewotICAgICAgICBkZWJ1ZyhGMTAxLCJkb2Z0cHNlbmQyIGZ0cHNuZC5yZXBseSIs IiIsZnRwc25kLnJlcGx5KTsKLSAgICAgICAgZnRwc25kcmV0ID0gLTE7Ci0jaWZkZWYgTlRTSUcK LSAgICAgICAgY2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSAg ICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoY2FuY2VsZmlsZSkgewotICAgICAgICBkZWJ1 ZyhGMTAxLCJkb2Z0cHNlbmQyIGNhbmNlbGVkIiwiIixmdHBzbmQuYnl0ZXMpOwotICAgICAgICBm dHBzbmRyZXQgPSAtMTsKLSNpZmRlZiBOVFNJRwotICAgICAgICBja1RocmVhZEVuZCh0aHJlYWRp bmZvKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGRl YnVnKEYxMDEsImRvZnRwc2VuZDIgb2siLCIiLGZ0cHNuZC5ieXRlcyk7Ci0gICAgZnRwc25kcmV0 ID0gMDsKLSNpZmRlZiBOVFNJRwotICAgICBja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKLSNlbmRp ZiAvKiBOVFNJRyAqLwotfQotCi1zdGF0aWMgaW50Ci1zZW5kcmVxdWVzdChjbWQsIGxvY2FsLCBy ZW1vdGUsIHhsYXRlLCBpbmNzLCBvdXRjcywgcmVzdGFydCkKLSAgICBjaGFyICpjbWQsICpsb2Nh bCwgKnJlbW90ZTsgaW50IHhsYXRlLCBpbmNzLCBvdXRjcywgcmVzdGFydDsKLXsKLSAgICBpZiAo IXJlbW90ZSkgcmVtb3RlID0gIiI7ICAgICAgICAgICAvKiBDaGVjayBhcmdzICovCi0gICAgaWYg KCEqcmVtb3RlKSByZW1vdGUgPSBsb2NhbDsKLSAgICBpZiAoIWxvY2FsKSBsb2NhbCA9ICIiOwot ICAgIGlmICghKmxvY2FsKSByZXR1cm4oLTEpOwotICAgIGlmICghY21kKSBjbWQgPSAiIjsKLSAg ICBpZiAoISpjbWQpIGNtZCA9ICJTVE9SIjsKLQotICAgIGRlYnVnKEYxMTEsImZ0cCBzZW5kcmVx dWVzdCByZXN0YXJ0Iixsb2NhbCxyZXN0YXJ0KTsKLQotICAgIG5vdXQgPSAwOyAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEluaXQgb3V0cHV0IGJ1ZmZlciBjb3VudCAqLwotICAgIGZ0cHNu ZC5ieXRlcyA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgaW5wdXQgYnl0ZSBjb3VudCAq LwotICAgIGRvdXQgPSAtMTsKLQotI2lmZGVmIEZUUF9QUk9YWQotICAgIGlmIChwcm94eSkgewot ICAgICAgICBwcm94dHJhbnMoY21kLCBsb2NhbCwgcmVtb3RlLCAhc3RyY21wKGNtZCwiU1RPVSIp KTsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBGVFBfUFJPWFkgKi8KLQot ICAgIGNoYW5nZXR5cGUoZnRwX3R5cCwwKTsgICAgICAgICAgICAgIC8qIENoYW5nZSB0eXBlIGZv ciB0aGlzIGZpbGUgKi8KLQotICAgIGZ0cHNuZC5vbGRpbnRyID0gTlVMTDsJCS8qIFNldCB1cCBp bnRlcnJ1cHQgaGFuZGxlciAqLwotICAgIGZ0cHNuZC5vbGRpbnRwID0gTlVMTDsKLSAgICBmdHBz bmQucmVzdGFydCA9IHJlc3RhcnQ7Ci0gICAgZnRwc25kLnhsYXRlID0geGxhdGU7Ci0gICAgZnRw c25kLmxtb2RlID0gIndiIjsKLQotI2lmZGVmIFBJUEVTRU5EICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFVzZSBLZXJtaXQgQVBJIGZvciBmaWxlIGkvby4uLiAqLwotICAgIGlmIChzbmRmaWx0 ZXIpIHsKLSAgICAgICAgY2hhciAqIHAgPSBOVUxMLCAqIHE7Ci0jaWZuZGVmIE5PU1BMCi0gICAg ICAgIGludCBuID0gQ0tNQVhQQVRIOwotICAgICAgICBpZiAoY21kX3F1b3RpbmcgJiYgKHAgPSAo Y2hhciAqKSBtYWxsb2MobiArIDEpKSkgewotICAgICAgICAgICAgcSA9IHA7Ci0gICAgICAgICAg ICBkZWJ1ZyhGMTEwLCJzZW5kcmVxdWVzdCBwaXBlc2VuZCBmaWx0ZXIiLHNuZGZpbHRlciwwKTsK LSAgICAgICAgICAgIHp6c3RyaW5nKHNuZGZpbHRlciwmcCwmbik7Ci0gICAgICAgICAgICBkZWJ1 ZyhGMTExLCJzZW5kcmVxdWVzdCBwaXBlbmFtZSIscSxuKTsKLSAgICAgICAgICAgIGlmIChuIDw9 IDApIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgc2VuZCBmaWx0ZXIgKyBmaWxl bmFtZSB0b28gbG9uZywgJWQgbWF4LlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgQ0tNQVhQ QVRICi0gICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgZnJlZShxKTsK LSAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg Y2tzdHJuY3B5KGZpbG5hbSxxLENLTUFYUEFUSCsxKTsKLSAgICAgICAgICAgIGZyZWUocSk7Ci0g ICAgICAgICAgICBsb2NhbCA9IGZpbG5hbTsKLSAgICAgICAgfQotI2VuZGlmIC8qIE5PU1BMICov Ci0gICAgfQotCi0gICAgaWYgKHNuZGZpbHRlcikgICAgICAgICAgICAgICAgICAgICAgLyogSWYg c2VuZGluZyB0aHJ1IGEgZmlsdGVyICovCi0gICAgICBwaXBlc2VuZCA9IDE7ICAgICAgICAgICAg ICAgICAgICAgLyogc2V0IHRoaXMgZm9yIG9wZW4gYW5kIGkvbyAqLwotI2VuZGlmIC8qIFBJUEVT RU5EICovCi0gICAgCi0jaWZkZWYgVk1TCi0gICAgZGVidWcoRjEwMSwiWFhYIGJlZm9yZSBvcGVu aSBiaW5hcnkiLCIiLGJpbmFyeSk7Ci0gICAgZGVidWcoRjEwMSwiWFhYIGJlZm9yZSBvcGVuaSBm dHBfdHlwIiwiIixmdHBfdHlwKTsKLSNlbmRpZgkvKiBWTVMgKi8KLQotICAgIGlmIChvcGVuaShs b2NhbCkgPT0gMCkJCS8qIFRyeSB0byBvcGVuIHRoZSBpbnB1dCBmaWxlICovCi0gICAgICByZXR1 cm4oLTEpOwotCi0jaWZkZWYgVk1TCi0gICAgZGVidWcoRjEwMSwiWFhYIGFmdGVyIG9wZW5pIGJp bmFyeSIsIiIsYmluYXJ5KTsKLSAgICBkZWJ1ZyhGMTAxLCJYWFggYWZ0ZXIgb3BlbmkgZnRwX3R5 cCIsIiIsZnRwX3R5cCk7Ci0gICAgaWYgKCFmb3JjZXR5cGUpIHsKLQlpZiAoYmluYXJ5ICE9IGZ0 cF90eXApIHsJLyogVk1TIHpvcGVuaSgpIHNldHMgYmluYXJ5ICovCi0JICAgIGRlYnVnKEYxMDEs IlhYWCBjaGFuZ2luZyB0eXBlIiwiIixiaW5hcnkpOwotCSAgICBkb2Z0cHR5cChiaW5hcnkpOwot CSAgICBkZWJ1ZyhGMTAxLCJYWFggYWZ0ZXIgZG9mdHB0eXAiLCIiLGZ0cF90eXApOwotCi0JICAg IC8qICoqKiogKi8KLQkgICAgaWYgKGRpc3BsYSAmJiBmZGlzcGxhKSB7CS8qIFVwZGF0ZSBmaWxl IHR5cGUgZGlzcGxheSAqLwotCQlmdHNjcmVlbihTQ1JfRk4sJ0YnLChDS19PRkZfVCkwLGxvY2Fs KTsKLQkgICAgfQotCX0KLSAgICB9Ci0jZW5kaWYJLyogVk1TICovCi0gICAgZnRwc25kcmV0ID0g MDsKLSAgICBmdHBzbmQuaW5jcyA9IGluY3M7Ci0gICAgZnRwc25kLm91dGNzID0gb3V0Y3M7Ci0g ICAgZnRwc25kLmNtZCA9IGNtZDsKLSAgICBmdHBzbmQubG9jYWwgPSBsb2NhbDsKLSAgICBmdHBz bmQucmVtb3RlID0gcmVtb3RlOwotICAgIGZ0cHNuZC5vbGRpbnRyID0gc2lnbmFsKFNJR0lOVCwg Y2FuY2Vsc2VuZCk7Ci0gICAgaGF2ZXNpZ2ludCA9IDA7Ci0KLSAgICBpZiAoY2NfZXhlY3V0ZShj a2phZGRyKHNlbmRjYW5jZWwpLCBkb2Z0cHNlbmQsIGZhaWxmdHBzZW5kKSA8IDApCi0gICAgICBy ZXR1cm4oLTEpOwotICAgIGlmIChmdHBzbmRyZXQgPCAwKQotICAgICAgcmV0dXJuKC0xKTsKLSAg ICBpZiAoY2NfZXhlY3V0ZShja2phZGRyKHNlbmRjYW5jZWwpLCBkb2Z0cHNlbmQyLCBmYWlsZnRw c2VuZDIpIDwgMCkKLSAgICAgIHJldHVybigtMSk7Ci0KLSAgICByZXR1cm4oZnRwc25kcmV0KTsK LX0KLQotc3RhdGljIHNpZ3R5cGUKLWNhbmNlbHJlY3Yoc2lnKSBpbnQgc2lnOyB7Ci0gICAgaGF2 ZXNpZ2ludCsrOwotICAgIGNhbmNlbGZpbGUgPSAwOwotICAgIGNhbmNlbGdyb3VwKys7Ci0gICAg c2VjdXJlX2dldGMoMCwxKTsJCQkvKiBJbml0aWFsaXplIG5ldCBpbnB1dCBidWZmZXJzICovCi0g ICAgcHJpbnRmKCIgQ2FuY2VsaW5nLi4uXG4iKTsKLSAgICBkZWJ1ZyhGMTAwLCJmdHAgY2FuY2Vs cmVjdiBjYXVnaHQgU0lHSU5UIiwiIiwwKTsKLSAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICBpZiAo ZnBfbm1sKSB7Ci0gICAgICAgIGlmIChmcF9ubWwgIT0gc3Rkb3V0KQotICAgICAgICAgIGZjbG9z ZShmcF9ubWwpOwotICAgICAgICBmcF9ubWwgPSBOVUxMOwotICAgIH0KLSNpZm5kZWYgT1MyCi0g ICAgbG9uZ2ptcChyZWN2Y2FuY2VsLCAxKTsKLSNlbHNlCi0gICAgUG9zdEN0cmxDU2VtKCk7Ci0j ZW5kaWYgLyogT1MyICovCi19Ci0KLS8qIEFyZ3VtZW50bGVzcyBmcm9udC1lbmQgZm9yIHNlY3Vy ZV9nZXRjKCkgKi8KLQotc3RhdGljIGludAotbmV0Z2V0YygpIHsKLSAgICByZXR1cm4oc2VjdXJl X2dldGMoZ2xvYmFsZGluLDApKTsKLX0KLQotLyogUmV0dXJucyAtMSBvbiBmYWlsdXJlLCAwIG9u IHN1Y2Nlc3MsIDEgaWYgZmlsZSBza2lwcGVkICovCi0KLS8qCi0gIFNldHMgZnRwY29kZSA8IDAg b24gZmFpbHVyZSBpZiBmYWlsdXJlIHJlYXNvbiBpcyBub3Qgc2VydmVyIHJlcGx5IGNvZGU6Ci0g ICAgLTE6IGludGVycnVwdGVkIGJ5IHVzZXIuCi0gICAgLTI6IGVycm9yIG9wZW5pbmcgb3Igd3Jp dGluZyBvdXRwdXQgZmlsZSAocmVhc29uIGluIGVycm5vKS4KLSAgICAtMzogZmFpbHVyZSB0byBt YWtlIGRhdGEgY29ubmVjdGlvbi4KLSAgICAtNDogbmV0d29yayByZWFkIGVycm9yIChyZWFzb24g aW4gZXJybm8pLgotKi8KLQotc3RydWN0IHh4X2Z0cHJlY3YgewotICAgIGludCByZXBseTsKLSAg ICBpbnQgZmNzOwotICAgIGludCByY3M7Ci0gICAgaW50IHJlY292ZXI7Ci0gICAgaW50IHhsYXRl OwotICAgIGludCBkaW47Ci0gICAgaW50IGlzX3JldHI7Ci0gICAgc2lnX3Qgb2xkaW50ciwgb2xk aW50cDsKLSAgICBjaGFyICogY21kOwotICAgIGNoYXIgKiBsb2NhbDsKLSAgICBjaGFyICogcmVt b3RlOwotICAgIGNoYXIgKiBsbW9kZTsKLSAgICBjaGFyICogcGlwZW5hbWU7Ci0gICAgaW50ICAg IHRjcmZsYWc7Ci0gICAgQ0tfT0ZGX1QgbG9jYWxzaXplOwotfTsKLXN0YXRpYyBzdHJ1Y3QgeHhf ZnRwcmVjdiBmdHByZWN2OwotCi1zdGF0aWMgaW50IGZ0cHJlY3ZyZXQgPSAwOwotCi1zdGF0aWMg Vk9JRAotI2lmZGVmIENLX0FOU0lDCi1mYWlsZnRwcmVjdihWT0lEICogdGhyZWFkaW5mbykKLSNl bHNlCi1mYWlsZnRwcmVjdih0aHJlYWRpbmZvKSBWT0lEICogdGhyZWFkaW5mbzsKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwotewotI2lmZGVmIE5UU0lHCi0gICAgaWYgKHRocmVhZGluZm8pIHsgICAg ICAgICAgICAgICAgICAgLyogVGhyZWFkIGxvY2FsIHN0b3JhZ2UuLi4gKi8KLSAgICAgICAgVGxz U2V0VmFsdWUoVGxzSW5kZXgsdGhyZWFkaW5mbyk7Ci0gICAgICAgIGRlYnVnKEYxMDAsICJkb2Nt ZGZpbGUgY2FsbGVkIHdpdGggdGhyZWFkaW5mbyBibG9jayIsIiIsIDApOwotICAgIH0gZWxzZSBk ZWJ1ZyhGMTAwLCAiZG9jbWRmaWxlIC0gdGhyZWFkaW5mbyBpcyBOVUxMIiwgIiIsIDApOwotI2Vu ZGlmIC8qIE5UU0lHICovCi0KLSNpZmRlZiBDS19MT0dJTgotI2lmZGVmIElLU0QKLSNpZmRlZiBO VAotICAgIGlmIChpbnNlcnZlcikKLSAgICAgIHNldG50Y3JlZHMoKTsKLSNlbmRpZiAvKiBOVCAq LwotI2VuZGlmIC8qIElLU0QgKi8KLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotCi0gICAgd2hpbGUg KGNwZW5kKSB7Ci0gICAgICAgIGZ0cHJlY3YucmVwbHkgPSBnZXRyZXBseSgwLGZ0cHJlY3YuZmNz LGZ0cHJlY3YucmNzLGZ0cF92Ym0sMCk7Ci0gICAgfQotICAgIGlmIChkYXRhID49IDApIHsKLSNp ZmRlZiBDS19TU0wKLSAgICAgICAgaWYgKHNzbF9mdHBfZGF0YV9hY3RpdmVfZmxhZykgewotICAg ICAgICAgICAgU1NMX3NodXRkb3duKHNzbF9mdHBfZGF0YV9jb24pOwotICAgICAgICAgICAgU1NM X2ZyZWUoc3NsX2Z0cF9kYXRhX2Nvbik7Ci0gICAgICAgICAgICBzc2xfZnRwX2RhdGFfYWN0aXZl X2ZsYWcgPSAwOwotICAgICAgICAgICAgc3NsX2Z0cF9kYXRhX2NvbiA9IE5VTEw7Ci0gICAgICAg IH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNpZmRlZiBUQ1BJUExJQgotICAgICAgICBzb2NrZXRf Y2xvc2UoZGF0YSk7Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwotI2lmZGVmIFVTRV9TSFVURE9XTgot ICAgICAgICBzaHV0ZG93bihkYXRhLCAxKzEpOwotI2VuZGlmIC8qIFVTRV9TSFVURE9XTiAqLwot ICAgICAgICBjbG9zZShkYXRhKTsKLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotICAgICAgICBkYXRh ID0gLTE7Ci0gICAgICAgIGdsb2JhbGRpbiA9IC0xOwotICAgIH0KLSAgICBpZiAoZnRwcmVjdi5v bGRpbnRyKQotICAgICAgc2lnbmFsKFNJR0lOVCwgZnRwcmVjdi5vbGRpbnRyKTsKLSAgICBmdHBj b2RlID0gLTE7Ci0gICAgZnRwcmVjdnJldCA9IC0xOwotCi0jaWZuZGVmIE9TMgotICAgIC8qIFRF U1QgTUUgSU4gSzk1ICovCi0gICAgaWYgKGhhdmVzaWdpbnQpIHsKLQloYXZlc2lnaW50ID0gMDsK LQlkZWJ1ZyhGMTAwLCJmdHAgZmFpbGZ0cHJlY3YgY2hhaW4gdG8gdHJhcCgpLi4uIiwiIiwwKTsK LQlpZiAoZnRwcmVjdi5vbGRpbnRyICE9IFNJR19JR04pCi0JICAoKmZ0cHJlY3Yub2xkaW50ciko U0lHSU5UKTsKLQkvKiBOT1RSRUFDSEVEIChJIGhvcGUhKSAqLwotCWRlYnVnKEYxMDAsImZ0cCBm YWlsZnRwcmVjdiByZXR1cm4gZnJvbSB0cmFwKCkuLi4iLCIiLDApOwotICAgIH0KLSNlbmRpZiAv KiBPUzIgKi8KLSAgICByZXR1cm47Ci19Ci0KLXN0YXRpYyBWT0lECi0jaWZkZWYgQ0tfQU5TSUMK LWRvZnRwcmVjdihWT0lEICogdGhyZWFkaW5mbykKLSNlbHNlCi1kb2Z0cHJlY3YodGhyZWFkaW5m bykgVk9JRCAqIHRocmVhZGluZm87Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSNpZmRlZiBO VFNJRwotICAgIGlmICh0aHJlYWRpbmZvKSB7ICAgICAgICAgICAgICAgICAgIC8qIFRocmVhZCBs b2NhbCBzdG9yYWdlLi4uICovCi0gICAgICAgIFRsc1NldFZhbHVlKFRsc0luZGV4LHRocmVhZGlu Zm8pOwotICAgICAgICBkZWJ1ZyhGMTAwLCAiZG9jbWRmaWxlIGNhbGxlZCB3aXRoIHRocmVhZGlu Zm8gYmxvY2siLCIiLCAwKTsKLSAgICB9IGVsc2UgZGVidWcoRjEwMCwgImRvY21kZmlsZSAtIHRo cmVhZGluZm8gaXMgTlVMTCIsICIiLCAwKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotI2lmZGVmIENL X0xPR0lOCi0jaWZkZWYgSUtTRAotI2lmZGVmIE5UCi0gICAgaWYgKGluc2VydmVyKQotICAgICAg c2V0bnRjcmVkcygpOwotI2VuZGlmIC8qIE5UICovCi0jZW5kaWYgLyogSUtTRCAqLwotI2VuZGlm IC8qIENLX0xPR0lOICovCi0KLSNpZm5kZWYgQ09NTUVOVAotICAgIGlmICghb3V0MnNjcmVlbiAm JiAhZnRwcmVjdi5waXBlbmFtZSkgewotCWludCB4OwotCWNoYXIgKiBsb2NhbDsKLQlsb2NhbCA9 IGZ0cHJlY3YubG9jYWw7Ci0JeCA9IHpjaGtvKGxvY2FsKTsKLSAgICAgICAgaWYgKHggPCAwKSB7 Ci0gICAgICAgICAgICBpZiAoKCFkcHlhY3RpdmUgfHwgZnRwX2RlYikpCi0gICAgICAgICAgICAg IGZwcmludGYoc3RkZXJyLAotCQkgICAgICAiVGVtcG9yYXJ5IGZpbGUgJXM6ICVzXG4iLCBmdHBy ZWN2LmxvY2FsLCBja19lcnJzdHIoKSk7Ci0gICAgICAgICAgICBzaWduYWwoU0lHSU5ULCBmdHBy ZWN2Lm9sZGludHIpOwotICAgICAgICAgICAgZnRwY29kZSA9IC0yOwotICAgICAgICAgICAgZnRw cmVjdnJldCA9IC0xOwotI2lmZGVmIE5UU0lHCi0gICAgICAgICAgICBja1RocmVhZEVuZCh0aHJl YWRpbmZvKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg ICB9Ci0gICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICBjaGFuZ2V0eXBlKCghZnRwcmVj di5pc19yZXRyKSA/IEZUVF9BU0MgOiBmdHBfdHlwLCAwKTsKLSAgICBpZiAoaW5pdGNvbm4oKSkg eyAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBkYXRhIGNvbm5lY3Rpb24gKi8K LSAgICAgICAgc2lnbmFsKFNJR0lOVCwgZnRwcmVjdi5vbGRpbnRyKTsKLSAgICAgICAgZnRwY29k ZSA9IC0xOwotICAgICAgICBmdHByZWN2cmV0ID0gLTM7Ci0jaWZkZWYgTlRTSUcKLSAgICAgICAg Y2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSAgICAgICAgcmV0 dXJuOwotICAgIH0KLSAgICBzZWN1cmVfZ2V0YygwLDEpOwkJCS8qIEluaXRpYWxpemUgbmV0IGlu cHV0IGJ1ZmZlcnMgKi8KLSAgICBmdHByZWN2cmV0ID0gMDsKLQotI2lmZGVmIE5UU0lHCi0gICAg Y2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLX0KLQotc3RhdGlj IFZPSUQKLSNpZmRlZiBDS19BTlNJQwotZmFpbGZ0cHJlY3YyKFZPSUQgKiB0aHJlYWRpbmZvKQot I2Vsc2UKLWZhaWxmdHByZWN2Mih0aHJlYWRpbmZvKSBWT0lEICogdGhyZWFkaW5mbzsKLSNlbmRp ZiAvKiBDS19BTlNJQyAqLwotewotI2lmZGVmIE5UU0lHCi0gICAgaWYgKHRocmVhZGluZm8pIHsg ICAgICAgICAgICAgICAgICAgLyogVGhyZWFkIGxvY2FsIHN0b3JhZ2UuLi4gKi8KLSAgICAgICAg VGxzU2V0VmFsdWUoVGxzSW5kZXgsdGhyZWFkaW5mbyk7Ci0gICAgICAgIGRlYnVnKEYxMDAsICJk b2NtZGZpbGUgY2FsbGVkIHdpdGggdGhyZWFkaW5mbyBibG9jayIsIiIsIDApOwotICAgIH0gZWxz ZSBkZWJ1ZyhGMTAwLCAiZG9jbWRmaWxlIC0gdGhyZWFkaW5mbyBpcyBOVUxMIiwgIiIsIDApOwot I2VuZGlmIC8qIE5UU0lHICovCi0jaWZkZWYgQ0tfTE9HSU4KLSNpZmRlZiBJS1NECi0jaWZkZWYg TlQKLSAgICBpZiAoaW5zZXJ2ZXIpCi0gICAgICBzZXRudGNyZWRzKCk7Ci0jZW5kaWYgLyogTlQg Ki8KLSNlbmRpZiAvKiBJS1NEICovCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLQotICAgIC8qIENh bmNlbCB1c2luZyBSRkM5NTkgcmVjb21tZW5kZWQgSVAsU1lOQyBzZXF1ZW5jZSAgKi8KLQotICAg IGRlYnVnKEYxMDAsImZ0cCByZWN2cmVxdWVzdCBDQU5DRUwiLCIiLDApOwotI2lmZGVmIEdGVElN RVIKLSAgICBmcGZzZWNzID0gZ2Z0aW1lcigpOwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLSNpZmRl ZiBTSUdQSVBFCi0gICAgaWYgKGZ0cHJlY3Yub2xkaW50cCkKLSAgICAgIHNpZ25hbChTSUdQSVBF LCBmdHByZWN2Lm9sZGludHIpOwotI2VuZGlmIC8qIFNJR1BJUEUgKi8KLSAgICBzaWduYWwoU0lH SU5ULCBTSUdfSUdOKTsKLSAgICBpZiAoIWNwZW5kKSB7Ci0gICAgICAgIGZ0cGNvZGUgPSAtMTsK LSAgICAgICAgc2lnbmFsKFNJR0lOVCwgZnRwcmVjdi5vbGRpbnRyKTsKLSAgICAgICAgZnRwcmVj dnJldCA9IC0xOwotI2lmZGVmIE5UU0lHCi0gICAgICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8p OwotI2VuZGlmIC8qIE5UU0lHICovCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FuY2Vs X3JlbW90ZShmdHByZWN2LmRpbik7Ci0KLSNpZmRlZiBGVFBfVElNRU9VVAotICAgIGlmIChmdHBf dGltZWRfb3V0ICYmIG91dDJzY3JlZW4gJiYgIXF1aWV0KQotICAgICAgcHJpbnRmKCJcbj9UaW1l ZCBvdXQuXG4iKTsKLSNlbmRpZgkvKiBGVFBfVElNRU9VVCAqLwotCi0gICAgaWYgKGZ0cGNvZGUg PiAtMSkKLSAgICAgIGZ0cGNvZGUgPSAtMTsKLSAgICBpZiAoZGF0YSA+PSAwKSB7Ci0jaWZkZWYg Q0tfU1NMCi0gICAgICAgIGlmIChzc2xfZnRwX2RhdGFfYWN0aXZlX2ZsYWcpIHsKLSAgICAgICAg ICAgIFNTTF9zaHV0ZG93bihzc2xfZnRwX2RhdGFfY29uKTsKLSAgICAgICAgICAgIFNTTF9mcmVl KHNzbF9mdHBfZGF0YV9jb24pOwotICAgICAgICAgICAgc3NsX2Z0cF9kYXRhX2FjdGl2ZV9mbGFn ID0gMDsKLSAgICAgICAgICAgIHNzbF9mdHBfZGF0YV9jb24gPSBOVUxMOwotICAgICAgICB9Ci0j ZW5kaWYgLyogQ0tfU1NMICovCi0jaWZkZWYgVENQSVBMSUIKLSAgICAgICAgc29ja2V0X2Nsb3Nl KGRhdGEpOwotI2Vsc2UgLyogVENQSVBMSUIgKi8KLSNpZmRlZiBVU0VfU0hVVERPV04KLSAgICAg ICAgc2h1dGRvd24oZGF0YSwgMSsxKTsKLSNlbmRpZiAvKiBVU0VfU0hVVERPV04gKi8KLSAgICAg ICAgY2xvc2UoZGF0YSk7Ci0jZW5kaWYgLyogVENQSVBMSUIgKi8KLSAgICAgICAgZGF0YSA9IC0x OwotICAgICAgICBnbG9iYWxkaW4gPSAtMTsKLSAgICB9Ci0gICAgaWYgKCFvdXQyc2NyZWVuKSB7 Ci0JaW50IHggPSAwOwotCWRlYnVnKEYxMTEsImZ0cCBmYWlscmVjdjIgemNsb3NlIixmdHByZWN2 LmxvY2FsLGtlZXApOwotCXpjbG9zZShaT0ZJTEUpOwotCXN3aXRjaCAoa2VlcCkgewkJCS8qIHdo aWNoIGlzLi4uICovCi0JICBjYXNlIFNFVF9BVVRPOgkJLyogQVVUTyAqLwotCSAgICBpZiAoY3Vy dHlwZSA9PSBGVFRfQVNDKQkvKiBEZWxldGUgZmlsZSBpZiBUWVBFIEEuICovCi0JICAgICAgeCA9 IDE7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBTRVRfT0ZGOgkJCS8qIERJU0NBUkQgKi8KLQkgICAg eCA9IDE7CQkJLyogRGVsZXRlIGZpbGUsIHBlcmlvZC4gKi8KLQkgICAgYnJlYWs7Ci0JICBkZWZh dWx0OgkJCS8qIEtFRVAgKi8KLQkgICAgYnJlYWs7Ci0JfQotCWlmICh4KSB7Ci0JICAgIHggPSB6 ZGVsZXQoZnRwcmVjdi5sb2NhbCk7Ci0JICAgIGRlYnVnKEYxMTEsImZ0cCBmYWlscmVjdjIgZGVs ZXRlIGluY29tcGxldGUiLGZ0cHJlY3YubG9jYWwseCk7Ci0JfQotICAgIH0KLSAgICBpZiAoZnRw cmVjdi5kaW4pIHsKLSNpZmRlZiBUQ1BJUExJQgotICAgICAgICBzb2NrZXRfY2xvc2UoZnRwcmVj di5kaW4pOwotI2Vsc2UgLyogVENQSVBMSUIgKi8KLSNpZmRlZiBVU0VfU0hVVERPV04KLSAgICAg ICAgc2h1dGRvd24oZnRwcmVjdi5kaW4sIDErMSk7Ci0jZW5kaWYgLyogVVNFX1NIVVRET1dOICov Ci0gICAgICAgIGNsb3NlKGZ0cHJlY3YuZGluKTsKLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotICAg IH0KLSAgICBzaWduYWwoU0lHSU5ULCBmdHByZWN2Lm9sZGludHIpOwotICAgIGZ0cHJlY3ZyZXQg PSAtMTsKLQotICAgIGlmIChoYXZlc2lnaW50KSB7Ci0JaGF2ZXNpZ2ludCA9IDA7Ci0JZGVidWco RjEwMCwiRlRQIGZhaWxmdHByZWN2MiBjaGFpbiB0byB0cmFwKCkuLi4iLCIiLDApOwotI2lmZGVm IE9TMgotICAgICAgICBkZWJ1ZyhGMTAwLCJGVFAgZmFpbGZ0cHJlY3YyIFBvc3RDdHJsQ1NlbSgp Li4uIiwiIiwwKTsKLSAgICAgICAgUG9zdEN0cmxDU2VtKCk7Ci0jZWxzZSAvKiBPUzIgKi8KLQlp ZiAoZnRwcmVjdi5vbGRpbnRyICE9IFNJR19JR04pCi0JICAoKmZ0cHJlY3Yub2xkaW50cikoU0lH SU5UKTsKLQkvKiBOT1RSRUFDSEVEIChJIGhvcGUhKSAqLwotCWRlYnVnKEYxMDAsImZ0cCBmYWls ZnRwcmVjdjIgcmV0dXJuIGZyb20gdHJhcCgpLi4uIiwiIiwwKTsKLSNlbmRpZiAvKiBPUzIgKi8K LSAgICB9Ci19Ci0KLXN0YXRpYyBWT0lECi0jaWZkZWYgQ0tfQU5TSUMKLWRvZnRwcmVjdjIoVk9J RCAqIHRocmVhZGluZm8pCi0jZWxzZQotZG9mdHByZWN2Mih0aHJlYWRpbmZvKSBWT0lEICogdGhy ZWFkaW5mbzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIHJlZ2lzdGVyIGludCBjLCBk OwotICAgIENLX09GRl9UIGJ5dGVzID0gKENLX09GRl9UKTA7Ci0gICAgaW50IGJhcmVfbGZzID0g MDsKLSAgICBpbnQgYmxrc2l6ZSA9IDA7Ci0gICAgVUxPTkcgc3RhcnQgPSAwTCwgc3RvcDsKLSAg ICBjaGFyICogcDsKLSAgICBzdGF0aWMgY2hhciAqIHJjdmJ1ZiA9IE5VTEw7Ci0gICAgc3RhdGlj IGludCByY3ZidWZzaXogPSAwOwotI2lmZGVmIENLX1VSTAotICAgIGNoYXIgbmV3bmFtZVtDS01B WFBBVEgrMV07CQkvKiBGb3IgZmlsZSBkaWFsb2cgKi8KLSNlbmRpZiAvKiBDS19VUkwgKi8KLSAg ICBleHRlcm4gaW50IGFkbF9hc2s7Ci0KLSNpZmRlZiBGVFBfVElNRU9VVAotICAgIGZ0cF90aW1l ZF9vdXQgPSAwOwotI2VuZGlmCS8qIEZUUF9USU1FT1VUICovCi0KLSAgICBmdHByZWN2LmRpbiA9 IC0xOwotI2lmZGVmIE5UU0lHCi0gICAgaWYgKHRocmVhZGluZm8pIHsgICAgICAgICAgICAgICAg ICAgLyogVGhyZWFkIGxvY2FsIHN0b3JhZ2UuLi4gKi8KLSAgICAgICAgVGxzU2V0VmFsdWUoVGxz SW5kZXgsdGhyZWFkaW5mbyk7Ci0gICAgICAgIGRlYnVnKEYxMDAsICJkb2NtZGZpbGUgY2FsbGVk IHdpdGggdGhyZWFkaW5mbyBibG9jayIsIiIsIDApOwotICAgIH0gZWxzZSBkZWJ1ZyhGMTAwLCAi ZG9jbWRmaWxlIC0gdGhyZWFkaW5mbyBpcyBOVUxMIiwgIiIsIDApOwotI2VuZGlmIC8qIE5UU0lH ICovCi0jaWZkZWYgQ0tfTE9HSU4KLSNpZmRlZiBJS1NECi0jaWZkZWYgTlQKLSAgICBpZiAoaW5z ZXJ2ZXIpCi0gICAgICBzZXRudGNyZWRzKCk7Ci0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBJ S1NEICovCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLQotICAgIGlmIChmdHByZWN2LnJlY292ZXIp IHsgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhdGUgcmVjb3ZlcnkgKi8KLSAgICAgICAg eCA9IGZ0cGNtZCgiUkVTVCIsY2tmc3RvYShmdHByZWN2LmxvY2Fsc2l6ZSksLTEsLTEsZnRwX3Zi bSk7Ci0gICAgICAgIGRlYnVnKEYxMTEsImZ0cCByZXBseSIsIlJFU1QiLHgpOwotICAgICAgICBp ZiAoeCA9PSBSRVBMWV9DT05USU5VRSkgewotICAgICAgICAgICAgZnRwcmVjdi5sbW9kZSA9ICJh YiI7Ci0gICAgICAgICAgICByc19sZW4gPSBmdHByZWN2LmxvY2Fsc2l6ZTsKLSAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgIGZ0cHJlY3YucmVjb3ZlciA9IDA7Ci0gICAgICAgIH0KLSAgICB9 Ci0gICAgLyogSU1QT1JUQU5UOiBObyBGVFAgY29tbWFuZHMgY2FuIGNvbWUgYmV0d2VlbiBSRVNU IGFuZCBSRVRSISAqLwotCi0gICAgZGVidWcoRjExMSwiZnRwIHJlY3ZyZXF1ZXN0IHJlY292ZXIg RSIsZnRwcmVjdi5yZW1vdGUsZnRwcmVjdi5yZWNvdmVyKTsKLQotICAgIC8qIFNlbmQgdGhlIGNv bW1hbmQgYW5kIGdldCByZXBseSAqLwotICAgIGRlYnVnKEYxMTAsImZ0cCByZWN2cmVxdWVzdCBj bWQiLGZ0cHJlY3YuY21kLDApOwotICAgIGRlYnVnKEYxMTAsImZ0cCByZWN2cmVxdWVzdCByZW1v dGUiLGZ0cHJlY3YucmVtb3RlLDApOwotCi0gICAgaWYgKGZ0cGNtZChmdHByZWN2LmNtZCxmdHBy ZWN2LnJlbW90ZSxmdHByZWN2LmZjcyxmdHByZWN2LnJjcyxmdHBfdmJtKQotCSE9IFJFUExZX1BS RUxJTSkgewotICAgICAgICBzaWduYWwoU0lHSU5ULCBmdHByZWN2Lm9sZGludHIpOyAvKiBCYWQg cmVwbHksIGZhaWwuICovCi0gICAgICAgIGZ0cHJlY3ZyZXQgPSAtMTsJCS8qIGZ0cGNvZGUgaXMg c2V0IGJ5IGZ0cGNtZCgpICovCi0jaWZkZWYgTlRTSUcKLSAgICAgICAgY2tUaHJlYWRFbmQodGhy ZWFkaW5mbyk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg ICBmdHByZWN2LmRpbiA9IGRhdGFjb25uKCJyIik7ICAgICAgICAvKiBHb29kIHJlcGx5LCBvcGVu IGRhdGEgY29ubmVjdGlvbiAqLwotICAgIGdsb2JhbGRpbiA9IGZ0cHJlY3YuZGluOyAgICAgICAg ICAgIC8qIEdsb2JhbCBjb3B5IG9mIGZpbGUgZGVzY3JpcHRvciAqLwotICAgIGlmIChmdHByZWN2 LmRpbiA9PSAtMSkgeyAgICAgICAgICAgIC8qIENoZWNrIGZvciBmYWlsdXJlICovCi0gICAgICAg IGZ0cGNvZGUgPSAtMzsgICAgICAgICAgICAgICAgICAgLyogQ29kZSBmb3Igbm8gZGF0YSBjb25u ZWN0aW9uICovCi0gICAgICAgIGZ0cHJlY3ZyZXQgPSAtMTsKLSNpZmRlZiBOVFNJRwotICAgICAg ICBja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotICAgICAgICBy ZXR1cm47Ci0gICAgfQotI2lmZGVmIENLX1VSTAotICAgIC8qIEluIEs5NSBHVUkgcHV0IHVwIGEg ZmlsZSBib3ggKi8KLSAgICBpZiAoaGF2ZXVybCAmJiBnX3VybC5wdGggJiYgYWRsX2FzawkpIHsg LyogRG93bmxvYWRpbmcgZnJvbSBhIFVSTCAqLwotCWludCB4OwotCWNoYXIgKiBwcmVmYWNlID0K LSJcclxuSW5jb21pbmcgZmlsZSBmcm9tIEZUUCBzZXJ2ZXIuLi5cclxuXAotUGxlYXNlIGNvbmZp cm0gb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbiBvciBzdXBwbHkgYW4gYWx0ZXJuYXRpdmU6IjsK LQotCXggPSB1cV9maWxlKHByZWZhY2UsCQkvKiBLOTUgR1VJOiBQdXQgdXAgZmlsZSBib3guICov Ci0JCSAgICBOVUxMLAotCQkgICAgNCwKLQkJICAgIE5VTEwsCi0JCSAgICBmdHByZWN2LmxvY2Fs ID8gZnRwcmVjdi5sb2NhbCA6IGZ0cHJlY3YucmVtb3RlLAotCQkgICAgbmV3bmFtZSwKLQkJICAg IENLTUFYUEFUSCsxCi0JCSAgICApOwotCWlmICh4ID4gMCkgewotCSAgICBmdHByZWN2LmxvY2Fs ID0gbmV3bmFtZTsJLyogU3Vic3RpdHV0ZSB1c2VyJ3MgZmlsZSBuYW1lICovCi0JICAgIGlmICh4 ID09IDIpCQkJLyogQW5kIGFwcGVuZCBpZiB1c2VyIHNhaWQgdG8gKi8KLQkgICAgICBmdHByZWN2 Lmxtb2RlID0gImFiIjsKLQl9Ci0gICAgfQotI2VuZGlmIC8qIENLX1VSTCAqLwotICAgIHggPSAx OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBmaWxlIG9wZW4gT0s/ICov Ci0gICAgaWYgKGZ0cHJlY3YucGlwZW5hbWUpIHsJCS8qIENvbW1hbmQgKi8KLSAgICAgICAgeCA9 IHp4Y21kKFpPRklMRSxmdHByZWN2LnBpcGVuYW1lKTsKLSAgICAgICAgZGVidWcoRjExMSwiZnRw IHJlY3ZyZXF1ZXN0IHp4Y21kIixmdHByZWN2LnBpcGVuYW1lLHgpOwotICAgIH0gZWxzZSBpZiAo IW91dDJzY3JlZW4pIHsgICAgICAgICAgIC8qIEZpbGUgKi8KLSAgICAgICAgc3RydWN0IGZpbGlu Zm8geHg7Ci0gICAgICAgIHh4LmJzID0gMDsgeHguY3MgPSAwOyB4eC5ybCA9IDA7IHh4Lm9yZyA9 IDA7IHh4LmNjID0gMDsKLSAgICAgICAgeHgudHlwID0gMDsgeHgub3Nfc3BlY2lmaWMgPSBOVUw7 IHh4LmxibG9wdHMgPSAwOwotCS8qIEFwcGVuZCBvciBOZXcgKi8KLSAgICAgICAgeHguZHNwID0g IXN0cmNtcChmdHByZWN2Lmxtb2RlLCJhYiIpID8gWFlGWl9BIDogWFlGWl9OOwotICAgICAgICB4 ID0gem9wZW5vKFpPRklMRSxmdHByZWN2LmxvY2FsLE5VTEwsJnh4KTsKLSAgICAgICAgZGVidWco RjExMSwiZnRwIHJlY3ZyZXF1ZXN0IHpvcGVubyIsZnRwcmVjdi5sb2NhbCx4KTsKLSAgICB9Ci0g ICAgaWYgKHggPCAxKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRmFpbHVyZSB0byBvcGVu IG91dHB1dCBmaWxlICovCi0gICAgICAgIGlmICgoIWRweWFjdGl2ZSB8fCBmdHBfZGViKSkKLSAg ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImxvY2FsKDIpOiAlczogJXNcbiIsIGZ0cHJlY3YubG9j YWwsIGNrX2VycnN0cigpKTsKLSAgICAgICAgZnRwcmVjdnJldCA9IC0xOwotI2lmZGVmIE5UU0lH Ci0gICAgICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOwotI2VuZGlmIC8qIE5UU0lHICovCi0g ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgYmxrc2l6ZSA9IEZUUF9CVUZTSVo7ICAgICAgICAg ICAgICAgLyogQWxsb2NhdGUgaW5wdXQgYnVmZmVyICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJmdHAg cmVjdnJlcXVlc3QgYmxrc2l6ZSIsIiIsYmxrc2l6ZSk7Ci0gICAgZGVidWcoRjEwMSwiZnRwIHJl Y3ZyZXF1ZXN0IHJjdmJ1ZnNpeiIsIiIscmN2YnVmc2l6KTsKLQotICAgIGlmIChyY3ZidWZzaXog PCBibGtzaXplKSB7ICAgICAgICAgIC8qIGlmIG5lY2Vzc2FyeSAqLwotICAgICAgICBpZiAocmN2 YnVmKSB7Ci0gICAgICAgICAgICBmcmVlKHJjdmJ1Zik7Ci0gICAgICAgICAgICByY3ZidWYgPSBO VUxMOwotICAgICAgICB9Ci0gICAgICAgIHJjdmJ1ZiA9IChjaGFyICopbWFsbG9jKCh1bnNpZ25l ZClibGtzaXplKTsKLSAgICAgICAgaWYgKCFyY3ZidWYpIHsKLQkgICAgZGVidWcoRjEwMCwiZnRw IGdldCByY3ZidWYgbWFsbG9jIGZhaWxlZCIsIiIsMCk7Ci0gICAgICAgICAgICBmdHBjb2RlID0g LTI7Ci0jaWZkZWYgRU5PTUVNCi0gICAgICAgICAgICBlcnJubyA9IEVOT01FTTsKLSNlbmRpZiAv KiBFTk9NRU0gKi8KLSAgICAgICAgICAgIGlmICgoIWRweWFjdGl2ZSB8fCBmdHBfZGViKSkKLSAg ICAgICAgICAgICAgcGVycm9yKCJtYWxsb2MiKTsKLSAgICAgICAgICAgIHJjdmJ1ZnNpeiA9IDA7 Ci0gICAgICAgICAgICBmdHByZWN2cmV0ID0gLTE7Ci0jaWZkZWYgTlRTSUcKLSAgICAgICAgICAg IGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOwotI2VuZGlmIC8qIE5UU0lHICovCi0gICAgICAgICAg ICByZXR1cm47Ci0gICAgICAgIH0KLQlkZWJ1ZyhGMTAxLCJmdHAgZ2V0IHJjdmJ1ZiBtYWxsb2Mg b2siLCIiLGJsa3NpemUpOwotICAgICAgICByY3ZidWZzaXogPSBibGtzaXplOwotICAgIH0KLSAg ICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IHJjdmJ1ZnNpeiIsZnRwcmVjdi5sb2NhbCxyY3ZidWZzaXop OwotCi0gICAgZmZjID0gKENLX09GRl9UKTA7CQkJLyogQ2hhcmFjdGVyIGNvdW50ZXIgKi8KLSAg ICBjcHMgPSBvbGRjcHMgPSAwTDsgICAgICAgICAgICAgICAgICAvKiBUaHJ1cHV0ICovCi0gICAg c3RhcnQgPSBnbXN0aW1lcigpOyAgICAgICAgICAgICAgICAgLyogU3RhcnQgdGltZSAobXNlY3Mp ICovCi0jaWZkZWYgR0ZUSU1FUgotICAgIHJmdGltZXIoKTsgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFN0YXJ0IHRpbWUgKGZsb2F0KSAqLwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLQotICAg IGRlYnVnKEYxMTEsImZ0cCBnZXQgdHlwZSIsZnRwcmVjdi5sb2NhbCxjdXJ0eXBlKTsKLSAgICBk ZWJ1ZyhGMTAxLCJmdHAgcmVjdnJlcXVlc3QgZnRwX2RwbCIsIiIsZnRwX2RwbCk7Ci0gICAgc3dp dGNoIChjdXJ0eXBlKSB7Ci0gICAgICBjYXNlIEZUVF9CSU46ICAgICAgICAgICAgICAgICAgICAg LyogQmluYXJ5IG1vZGUgKi8KLSAgICAgIGNhc2UgRlRUX1RFTjogICAgICAgICAgICAgICAgICAg ICAvKiBURU5FWCBtb2RlICovCi0gICAgICAgIGQgPSAwOwotICAgICAgICB3aGlsZSAoMSkgewot ICAgICAgICAgICAgZXJybm8gPSAwOwotICAgICAgICAgICAgYyA9IHNlY3VyZV9yZWFkKGZ0cHJl Y3YuZGluLCByY3ZidWYsIHJjdmJ1ZnNpeik7Ci0gICAgICAgICAgICBpZiAoY2FuY2VsZmlsZSkg ewotICAgICAgICAgICAgICAgIGZhaWxmdHByZWN2Mih0aHJlYWRpbmZvKTsKLSNpZmRlZiBOVFNJ RwotICAgICAgICAgICAgICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOwotI2VuZGlmIC8qIE5U U0lHICovCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAg ICAgaWYgKGMgPCAxKQotICAgICAgICAgICAgICBicmVhazsKLSNpZmRlZiBwcmludGYgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiAoV2hhdCBpZiBpdCBpc24ndD8pICovCi0gICAgICAgICAg ICBpZiAob3V0MnNjcmVlbiAmJiAhZnRwcmVjdi5waXBlbmFtZSkgewotICAgICAgICAgICAgICAg IGludCBpOwotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjOyBpKyspCi0gICAgICAg ICAgICAgICAgICBwcmludGYoIiVjIixyY3ZidWZbaV0pOwotICAgICAgICAgICAgfSBlbHNlCi0j ZW5kaWYgLyogcHJpbnRmICovCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZWdp c3RlciBpbnQgaTsKLSAgICAgICAgICAgICAgICBpID0gMDsKLSAgICAgICAgICAgICAgICBlcnJu byA9IDA7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGkgPCBjKSB7Ci0gICAgICAgICAgICAgICAg ICAgIGlmICh6bWNob3V0KHJjdmJ1ZltpKytdKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAg ICAgIGQgPSBpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBi eXRlcyArPSBjOwotICAgICAgICAgICAgZmZjICs9IGM7Ci0gICAgICAgIH0KLSNpZmRlZiBGVFBf VElNRU9VVAotCWlmIChjID09IC0zKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJmdHAgcmVj dnJlcXVlc3QgdGltZW91dCIsIiIsMCk7IAotICAgICAgICAgICAgYnl0ZXMgPSAoQ0tfT0ZGX1Qp LTE7Ci0JICAgIGZ0cF90aW1lZF9vdXQgPSAxOwotCSAgICBmdHBjb2RlID0gLTM7Ci0JfSBlbHNl Ci0jZW5kaWYJLyogRlRQX1RJTUVPVVQgKi8KLSAgICAgICAgaWYgKGMgPCAwKSB7Ci0gICAgICAg ICAgICBkZWJ1ZyhGMTExLCJmdHAgcmVjdnJlcXVlc3QgZXJybm8iLGNraXRvYShjKSxlcnJubyk7 Ci0gICAgICAgICAgICBpZiAoYyA9PSAtMSAmJiBlcnJubyAhPSBFUElQRSkKLSAgICAgICAgICAg ICAgaWYgKCghZHB5YWN0aXZlIHx8IGZ0cF9kZWIpKQotICAgICAgICAgICAgICAgIHBlcnJvcigi bmV0aW4iKTsKLSAgICAgICAgICAgIGJ5dGVzID0gKENLX09GRl9UKS0xOwotICAgICAgICAgICAg ZnRwY29kZSA9IC00OwotICAgICAgICB9Ci0gICAgICAgIGlmIChkIDwgYykgewotICAgICAgICAg ICAgZnRwY29kZSA9IC0yOwotICAgICAgICAgICAgaWYgKCghZHB5YWN0aXZlIHx8IGZ0cF9kZWIp KSB7Ci0gICAgICAgICAgICAgICAgY2hhciAqIHA7Ci0gICAgICAgICAgICAgICAgcCA9IGZ0cHJl Y3YubG9jYWwgPyBmdHByZWN2LmxvY2FsIDogZnRwcmVjdi5waXBlbmFtZTsKLSAgICAgICAgICAg ICAgICBpZiAoZCA8IDApCi0gICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLQkJCSAg ImxvY2FsKDMpOiAlczogJXNcbiIsIGZ0cHJlY3YubG9jYWwsIGNrX2VycnN0cigpKTsKLSAgICAg ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLQkJCSAg IiVzOiBzaG9ydCB3cml0ZVxuIiwgZnRwcmVjdi5sb2NhbCk7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRlRUX0FTQzogICAgICAgICAgICAg ICAgICAgICAvKiBUZXh0IG1vZGUgKi8KLQlkZWJ1ZyhGMTAxLCJmdHAgcmVjdnJlcXVlc3QgVFlQ RSBBIHhsYXRlIiwiIixmdHByZWN2LnhsYXRlKTsKLSNpZm5kZWYgTk9DU0VUUwotICAgICAgICBp ZiAoZnRwcmVjdi54bGF0ZSkgewotICAgICAgICAgICAgaW50IHQ7Ci0jaWZkZWYgQ0tfQU5TSUMK LSAgICAgICAgICAgIGludCAoKmZuKShjaGFyKTsKLSNlbHNlCi0gICAgICAgICAgICBpbnQgKCpm bikoKTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotICAgICAgICAgICAgZGVidWcoRjExMCwiZnRw IHJlY3ZyZXF1ZXN0IChkYXRhKSIsImluaXR4bGF0ZSIsMCk7Ci0gICAgICAgICAgICBpbml0eGxh dGUoZnRwcmVjdi5yY3MsZnRwcmVjdi5mY3MpOyAgICAgICAgIC8qIChGcm9tLFRvKSAqLwotICAg ICAgICAgICAgaWYgKGZ0cHJlY3YucGlwZW5hbWUpIHsKLSAgICAgICAgICAgICAgICBmbiA9IHBp cGVvdXQ7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwIHJlY3ZyZXF1ZXN0IEFTQ0lJ IiwicGlwZW91dCIsMCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZu ID0gb3V0MnNjcmVlbiA/IHNjcm5vdXQgOiBwdXRmaWw7Ci0gICAgICAgICAgICAgICAgZGVidWco RjExMCwiZnRwIHJlY3ZyZXF1ZXN0IEFTQ0lJIiwKLSAgICAgICAgICAgICAgICAgICAgICBvdXQy c2NyZWVuID8gInNjcm5vdXQiIDogInB1dGZpbCIsMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICB3aGlsZSAoMSkgewotCQkvKiBHZXQgYnl0ZSBmcm9tIG5ldCAqLwotICAgICAgICAgICAg ICAgIGMwID0geGduYnl0ZShGQ19VQ1MyLGZ0cHJlY3YucmNzLG5ldGdldGMpOwotICAgICAgICAg ICAgICAgIGlmIChjYW5jZWxmaWxlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZhaWxmdHByZWN2 Mih0aHJlYWRpbmZvKTsKLSNpZmRlZiBOVFNJRwotICAgICAgICAgICAgICAgICAgICBja1RocmVh ZEVuZCh0aHJlYWRpbmZvKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotICAgICAgICAgICAgICAgICAg ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjMCA8IDAp Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLQkJLyogU2Vjb25kIGJ5dGUgZnJvbSBuZXQgKi8K LSAgICAgICAgICAgICAgICBjMSA9IHhnbmJ5dGUoRkNfVUNTMixmdHByZWN2LnJjcyxuZXRnZXRj KTsKLSAgICAgICAgICAgICAgICBpZiAoY2FuY2VsZmlsZSkgewotICAgICAgICAgICAgICAgICAg ICBmYWlsZnRwcmVjdjIodGhyZWFkaW5mbyk7Ci0jaWZkZWYgTlRTSUcKLSAgICAgICAgICAgICAg ICAgICAgY2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSAgICAg ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICBpZiAoYzEgPCAwKQotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgQ09NTUVOVAot CQkvKiBLOTU6IENoZWNrIHdoZXRoZXIgd2UgbmVlZCB0aGlzICovCi0JCWlmIChmaWxlb3JkZXIg PiAwKQkvKiBMaXR0bGUgRW5kaWFuICovCi0JCSAgYnl0c3dhcCgmYzAsJmMxKTsJLyogc3dhcCBi eXRlcyovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICAg ICAgaWYgKCBvdXQyc2NyZWVuICYmICAgICAgICAgICAgLyogd2UncmUgdHJhbnNsYXRpbmcgdG8g VUNTLTIgKi8gCi0gICAgICAgICAgICAgICAgICAgICAhazk1c3Rkb3V0ICYmICFpbnNlcnZlcikg LyogZm9yIHRoZSByZWFsIHNjcmVlbi4uLiAqLyAgICAgCi0gICAgICAgICAgICAgICAgewotICAg ICAgICAgICAgICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBVU0hPUlQg dWNzMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIFVDSEFSICBieXRlc1syXTsKLSAgICAgICAg ICAgICAgICAgICAgfSBvdXRwdXQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmJ5dGVz WzBdID0gYzE7Ci0gICAgICAgICAgICAgICAgICAgIG91dHB1dC5ieXRlc1sxXSA9IGMwOwotCi0g ICAgICAgICAgICAgICAgICAgIFZzY3JuV3J0VUNTMlN0ckF0dChWQ01ELAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dHB1dC51Y3MyLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHdoZXJleVtWQ01EXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHdoZXJleFtWQ01EXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZjb2xvcmNtZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK LQotICAgICAgICAgICAgICAgIH0gZWxzZSAKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAg ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoeCA9IHhwbmJ5dGUoYzAsVENfVUNTMixm dHByZWN2LmZjcyxmbikpIDwgMCkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoeCA9 IHhwbmJ5dGUoYzEsVENfVUNTMixmdHByZWN2LmZjcyxmbikpIDwgMCkgYnJlYWs7Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotI2VuZGlmIC8qIE5P Q1NFVFMgKi8KLSAgICAgICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICAgICAgYyA9IHNl Y3VyZV9nZXRjKGZ0cHJlY3YuZGluLDApOwotICAgICAgICAgICAgICAgIGlmIChjYW5jZWxmaWxl Ci0jaWZkZWYgRlRQX1RJTUVPVVQKLQkJICAgIHx8IGZ0cF90aW1lZF9vdXQKLSNlbmRpZgkvKiBG VFBfVElNRU9VVCAqLwotCQkgICAgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZhaWxmdHByZWN2 Mih0aHJlYWRpbmZvKTsKLSNpZmRlZiBOVFNJRwotICAgICAgICAgICAgICAgICAgICBja1RocmVh ZEVuZCh0aHJlYWRpbmZvKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotICAgICAgICAgICAgICAgICAg ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjIDwgMCB8 fCBjID09IEVPRikKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotI2lmZGVmIFVOSVgKLQkJLyog UmVjb3JkIGZvcm1hdCBjb252ZXJzaW9uIGZvciBVbml4ICovCi0JCS8qIFNLSVAgVEhJUyBGT1Ig V0lORE9XUyEgKi8KLSAgICAgICAgICAgICAgICBpZiAoYyA9PSAnXG4nKQotICAgICAgICAgICAg ICAgICAgYmFyZV9sZnMrKzsKLSAgICAgICAgICAgICAgICB3aGlsZSAoYyA9PSAnXHInKSB7Ci0g ICAgICAgICAgICAgICAgICAgIGJ5dGVzKys7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoYyA9 IHNlY3VyZV9nZXRjKGZ0cHJlY3YuZGluLDApKSAhPSAnXG4nIHx8Ci0JCQlmdHByZWN2LnRjcmZs YWcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5jZWxmaWxlKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgZmFpbGZ0cHJlY3YyKHRocmVhZGluZm8pOwotI2lmZGVmIE5U U0lHCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7 Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47 Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo YyA8IDAgfHwgYyA9PSBFT0YpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYnJlYWsy OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ1wwJykgewotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJ5dGVzKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290 byBjb250aW4yOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjIDwgMCkKLSAgICAg ICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIFVOWCAqLwotCi0gICAgICAgICAgICAgICAg aWYgKG91dDJzY3JlZW4gJiYgIWZ0cHJlY3YucGlwZW5hbWUpCi0jaWZkZWYgcHJpbnRmCi0gICAg ICAgICAgICAgICAgICBwcmludGYoIiVjIiwoY2hhciljKTsKLSNlbHNlCi0gICAgICAgICAgICAg ICAgICBwdXRjaGFyKChjaGFyKWMpOwotI2VuZGlmIC8qIHByaW50ZiAqLwotICAgICAgICAgICAg ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIGlmICgoZCA9IHptY2hvdXQoYykpIDwgMCkKLSAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgYnl0ZXMrKzsKLSAgICAg ICAgICAgICAgICBmZmMrKzsKLSAgICAgICAgICAgICAgY29udGluMjoKLSAgICAgICAgICAgICAg ICA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWsyOgotICAgICAgICAgICAgaWYgKGJh cmVfbGZzICYmICghZHB5YWN0aXZlIHx8IGZ0cF9kZWIpKSB7Ci0gICAgICAgICAgICAgICAgcHJp bnRmKCJXQVJOSU5HISAlZCBiYXJlIGxpbmVmZWVkcyByZWNlaXZlZCBpbiBBU0NJSSBtb2RlXG4i LAotICAgICAgICAgICAgICAgICAgICAgICBiYXJlX2xmcyk7Ci0gICAgICAgICAgICAgICAgcHJp bnRmKCJGaWxlIG1pZ2h0IG5vdCBoYXZlIHRyYW5zZmVycmVkIGNvcnJlY3RseS5cbiIpOwotICAg ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZ0cHJlY3YuZGluID09IC0xKSB7Ci0gICAgICAg ICAgICAgICAgYnl0ZXMgPSAoQ0tfT0ZGX1QpLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg ICBpZiAoYyA9PSAtMikKLSAgICAgICAgICAgICAgYnl0ZXMgPSAoQ0tfT0ZGX1QpLTE7Ci0gICAg ICAgICAgICBicmVhazsKLSNpZm5kZWYgTk9DU0VUUwotICAgICAgICB9Ci0jZW5kaWYgLyogTk9D U0VUUyAqLwotICAgIH0KLSAgICBpZiAoZnRwcmVjdi5waXBlbmFtZSB8fCAhb3V0MnNjcmVlbikg ewotCXpjbG9zZShaT0ZJTEUpOwkJCS8qIENsb3NlIHRoZSBmaWxlICovCi0JZGVidWcoRjExMSwi ZG9mdHByZWN2MiB6Y2xvc2UgZnRwY29kZSIsZnRwcmVjdi5sb2NhbCxmdHBjb2RlKTsKLQlpZiAo ZnRwY29kZSA8IDApIHsJCS8qIElmIGRvd25sb2FkIGZhaWxlZCAqLwotCSAgICBpbnQgeCA9IDA7 Ci0JICAgIHN3aXRjaCAoa2VlcCkgewkJLyogd2hpY2ggaXMuLi4gKi8KLQkgICAgICBjYXNlIFNF VF9BVVRPOgkJLyogQVVUTyAqLwotCQlpZiAoY3VydHlwZSA9PSBGVFRfQVNDKSAvKiBEZWxldGUg ZmlsZSBpZiBUWVBFIEEuICovCi0JCSAgeCA9IDE7Ci0JCWJyZWFrOwotCSAgICAgIGNhc2UgU0VU X09GRjoJCS8qIERJU0NBUkQgKi8KLQkJeCA9IDE7CQkJLyogRGVsZXRlIGZpbGUsIHBlcmlvZC4g Ki8KLQkJYnJlYWs7Ci0JICAgICAgZGVmYXVsdDoJCQkvKiBLRUVQICovCi0JCWJyZWFrOwotCSAg ICB9Ci0JICAgIGlmICh4KSB7Ci0JCXggPSB6ZGVsZXQoZnRwcmVjdi5sb2NhbCk7Ci0JCWRlYnVn KEYxMTEsImZ0cCBnZXQgZGVsZXRlIGluY29tcGxldGUiLGZ0cHJlY3YubG9jYWwseCk7Ci0JICAg IH0KLQl9Ci0gICAgfQotICAgIHNpZ25hbChTSUdJTlQsIGZ0cHJlY3Yub2xkaW50cik7Ci0jaWZk ZWYgU0lHUElQRQotICAgIGlmIChmdHByZWN2Lm9sZGludHApCi0gICAgICBzaWduYWwoU0lHUElQ RSwgZnRwcmVjdi5vbGRpbnRwKTsKLSNlbmRpZiAvKiBTSUdQSVBFICovCi0gICAgc3RvcCA9IGdt c3RpbWVyKCk7Ci0jaWZkZWYgR0ZUSU1FUgotICAgIGZwZnNlY3MgPSBnZnRpbWVyKCk7Ci0jZW5k aWYgLyogR0ZUSU1FUiAqLwotICAgIHRmYyArPSBmZmM7Ci0KLSNpZmRlZiBUQ1BJUExJQgotICAg IHNvY2tldF9jbG9zZShmdHByZWN2LmRpbik7Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwotI2lmZGVm IFVTRV9TSFVURE9XTgotICAgIHNodXRkb3duKGZ0cHJlY3YuZGluLCAxKzEpOwotI2VuZGlmIC8q IFVTRV9TSFVURE9XTiAqLwotICAgIGNsb3NlKGZ0cHJlY3YuZGluKTsKLSNlbmRpZiAvKiBUQ1BJ UExJQiAqLwotICAgIGZ0cHJlY3YucmVwbHkgPSBnZXRyZXBseSgwLGZ0cHJlY3YuZmNzLGZ0cHJl Y3YucmNzLGZ0cF92Ym0sMCk7Ci0gICAgZnRwcmVjdnJldCA9ICgoZnRwY29kZSA8IDAgfHwgZnRw cmVjdi5yZXBseSA9PSBSRVBMWV9UUkFOU0lFTlQgfHwgCi0gICAgICAgICAgICAgICAgICAgZnRw cmVjdi5yZXBseSA9PSBSRVBMWV9FUlJPUikgPyAtMSA6IDApOwotI2lmZGVmIE5UU0lHCi0gICAg IGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOwotI2VuZGlmIC8qIE5UU0lHICovCi19Ci0KLXN0YXRp YyBpbnQKLXJlY3ZyZXF1ZXN0KGNtZCwgbG9jYWwsIHJlbW90ZSwgbG1vZGUsIHByaW50bmFtZXMs IHJlY292ZXIsIHBpcGVuYW1lLAotICAgICAgICAgICAgeGxhdGUsIGZjcywgcmNzKQotICAgIGNo YXIgKmNtZCwgKmxvY2FsLCAqcmVtb3RlLCAqbG1vZGUsICpwaXBlbmFtZTsKLSAgICBpbnQgcHJp bnRuYW1lcywgcmVjb3ZlciwgeGxhdGUsIGZjcywgcmNzOwotewotI2lmZGVmIE5UCi0gICAgc3Ry dWN0IF9zdGF0IHN0YnVmOwotI2Vsc2UgLyogTlQgKi8KLSAgICBzdHJ1Y3Qgc3RhdCBzdGJ1ZjsK LSNlbmRpZiAvKiBOVCAqLwotCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKSB7Ci0gICAg ICAgIGRlYnVnKEYxMTEsImZ0cCByZWN2cmVxdWVzdCBjbWQiLGNtZCxyZWNvdmVyKTsKLSAgICAg ICAgZGVidWcoRjExMCwiZnRwIHJlY3ZyZXF1ZXN0IGxvY2FsICIsbG9jYWwsMCk7Ci0gICAgICAg IGRlYnVnKEYxMTEsImZ0cCByZWN2cmVxdWVzdCByZW1vdGUiLHJlbW90ZSxmdHBfdHlwKTsKLSAg ICAgICAgZGVidWcoRjExMCwiZnRwIHJlY3ZyZXF1ZXN0IHBpcGVuYW1lICIscGlwZW5hbWUsMCk7 Ci0gICAgICAgIGRlYnVnKEYxMDEsImZ0cCByZWN2cmVxdWVzdCB4bGF0ZSIsIiIseGxhdGUpOwot ICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgcmVjdnJlcXVlc3QgZmNzIiwiIixmY3MpOwotICAgICAg ICBkZWJ1ZyhGMTAxLCJmdHAgcmVjdnJlcXVlc3QgcmNzIiwiIixyY3MpOwotICAgIH0KLSNlbmRp ZiAvKiBERUJVRyAqLwotCi0gICAgZnRwcmVjdi5sb2NhbHNpemUgPSAoQ0tfT0ZGX1QpMDsKLQot ICAgIGlmIChyZW1maWxlKSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIFNlZSByZW1jZm0oKSwg cmVtdHh0KCkgKi8KLSAgICAgICAgaWYgKHJlbXBpcGUpIHsKLSAgICAgICAgICAgIHBpcGVuYW1l ID0gcmVtZGVzdDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGxvY2FsID0gcmVtZGVz dDsKLSAgICAgICAgICAgIGlmIChyZW1hcHBkKSBsbW9kZSA9ICJhYiI7Ci0gICAgICAgIH0KLSAg ICB9Ci0gICAgb3V0MnNjcmVlbiA9IDA7Ci0gICAgaWYgKCFjbWQpIGNtZCA9ICIiOyAgICAgICAg ICAgICAgICAgLyogQ29yZSBkdW1wIHByZXZlbnRpb24gKi8KLSAgICBpZiAoIXJlbW90ZSkgcmVt b3RlID0gIiI7Ci0gICAgaWYgKCFsbW9kZSkgbG1vZGUgPSAiIjsKLQotICAgIGlmIChwaXBlbmFt ZSkgeyAgICAgICAgICAgICAgICAgICAgIC8qIE5vIHJlY292ZXJ5IGZvciBwaXBlcy4gKi8KLSAg ICAgICAgcmVjb3ZlciA9IDA7Ci0gICAgICAgIGlmICghbG9jYWwpCi0gICAgICAgICAgbG9jYWwg PSBwaXBlbmFtZTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIWxvY2FsKSAgICAgICAgICAg ICAgICAgICAgIC8qIE91dHB1dCB0byBzY3JlZW4/ICovCi0gICAgICAgICAgbG9jYWwgPSAiLSI7 Ci0gICAgICAgIG91dDJzY3JlZW4gPSAhc3RyY21wKGxvY2FsLCItIik7Ci0gICAgfQotICAgIGRl YnVnKEYxMDEsImZ0cCByZWN2cmVxdWVzdCBvdXQyc2NyZWVuIiwiIixvdXQyc2NyZWVuKTsKLQot I2lmZGVmIE9TMgotICAgIGlmICggZnRwX3hsYSAmJiBvdXQyc2NyZWVuICYmICFrOTVzdGRvdXQg JiYgIWluc2VydmVyICkKLSAgICAgICAgZmNzID0gRkNfVUNTMjsKLSNlbmRpZiAvKiBPUzIgKi8K LQotICAgIGlmIChvdXQyc2NyZWVuKSAgICAgICAgICAgICAgICAgICAgIC8qIE5vIHJlY292ZXJ5 IHRvIHNjcmVlbiAqLwotICAgICAgcmVjb3ZlciA9IDA7Ci0gICAgaWYgKCFmdHBfdHlwKSAgICAg ICAgICAgICAgICAgICAgICAgLyogTm8gcmVjb3ZlcnkgaW4gdGV4dCBtb2RlICovCi0gICAgICBy ZWNvdmVyID0gMDsKLSAgICBmdHByZWN2LmlzX3JldHIgPSAoc3RyY21wKGNtZCwgIlJFVFIiKSA9 PSAwKTsKLQotICAgIGlmICghZnRwcmVjdi5pc19yZXRyKSAgICAgICAgICAgICAgIC8qIE5vIHJl Y292ZXJ5IGV4Y2VwdCBmb3IgUkVUUmlldmUgKi8KLSAgICAgIHJlY292ZXIgPSAwOwotCi0jaWZk ZWYgQ09NTUVOVAotICAgIGlmICghb3V0MnNjcmVlbiAmJiAhcGlwZW5hbWUgJiYgZnRwcmVjdi5p c19yZXRyKSB7IC8qIFRvIHJlYWwgZmlsZSAqLwotICAgICAgICBpZiAocmVjdXJzaXZlICYmIGNr c3RyY2hyKGxvY2FsLCcvJykpIHsKLQkgICAgCi0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyog Q09NTUVOVCAqLwotCi0gICAgZnRwcmVjdi5sb2NhbHNpemUgPSAoQ0tfT0ZGX1QpMDsJLyogTG9j YWwgZmlsZSBzaXplICovCi0gICAgcnNfbGVuID0gKENLX09GRl9UKTA7CQkvKiBSZWNvdmVyeSBw b2ludCAqLwotCi0gICAgZGVidWcoRjEwMSwiZnRwIHJlY3ZyZXF1ZXN0IHJlY292ZXIiLCIiLHJl Y292ZXIpOwotICAgIGlmIChyZWNvdmVyKSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIFJlY292 ZXJpbmcuLi4gKi8KLSAgICAgICAgaWYgKHN0YXQobG9jYWwsICZzdGJ1ZikgPCAwKSB7ICAvKiBD YW4ndCBzdGF0IGxvY2FsIGZpbGUgKi8KLQkgICAgZGVidWcoRjEwMSwiZnRwIHJlY3ZyZXF1ZXN0 IHJlY292ZXIgc3RhdCBmYWlsZWQiLCIiLGVycm5vKTsKLSAgICAgICAgICAgIHJlY292ZXIgPSAw OyAgICAgICAgICAgICAgICAvKiBTbyBjYW5jZWwgcmVjb3ZlcnkgKi8KLSAgICAgICAgfSBlbHNl IHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBIYXZlIGxvY2FsIGZpbGUgaW5mbyAqLwotICAg ICAgICAgICAgZnRwcmVjdi5sb2NhbHNpemUgPSBzdGJ1Zi5zdF9zaXplOyAgLyogR2V0IHNpemUg Ki8KLQkgICAgLyogUmVtb3RlIGZpbGUgc21hbGxlciB0aGFuIGxvY2FsICovCi0gICAgICAgICAg ICBpZiAoZnNpemUgPCBmdHByZWN2LmxvY2Fsc2l6ZSkgewotCQlkZWJ1ZyhGMTAxLCJmdHAgcmVj dnJlcXVlc3QgcmVjb3ZlciByZW1vdGUgc21hbGxlciIsIiIsZnNpemUpOwotICAgICAgICAgICAg ICAgIHJlY292ZXIgPSAwOyAgICAgICAgICAgIC8qIFJlY292ZXJ5IGNhbid0IHdvcmsgKi8KLSAg ICAgICAgICAgIH0gZWxzZSBpZiAoZnNpemUgPT0gZnRwcmVjdi5sb2NhbHNpemUpIHsgLyogU2l6 ZXMgYXJlIGVxdWFsICovCi0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwiZnRwIHJlY3ZyZXF1 ZXN0IHJlY292ZXIgZXF1YWwgc2l6ZSIsCi0JCSAgICAgIHJlbW90ZSxmdHByZWN2LmxvY2Fsc2l6 ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKDEpOwotICAgICAgICAgICAgfQotI2lmZGVmIENP TU1FTlQKLS8qCi0gIFRoZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCB0aGUgb3JpZ2luYWwgcGFydGlh bCBmaWxlIG5ldmVyIGdvdCBpdHMgZGF0ZQotICBzZXQsIGVpdGhlciBiZWNhdXNlIEZUUCBEQVRF UyB3YXMgT0ZGLCBvciBiZWNhdXNlIHRoZSBwYXJ0aWFsIGZpbGUgd2FzCi0gIGRvd25sb2FkZWQg Ynkgc29tZSBvdGhlciBwcm9ncmFtIHRoYXQgZG9lc24ndCBzZXQgbG9jYWwgZmlsZSBkYXRlcywg b3IKLSAgYmVjYXVzZSBLZXJtaXQgb25seSBzZXRzIHRoZSBmaWxlJ3MgZGF0ZSB3aGVuIHRoZSBk b3dubG9hZCB3YXMgY29tcGxldGUKLSAgYW5kIHN1Y2Nlc3NmdWwuICBJbiBhbGwgdGhlc2UgY2Fz ZXMsIHRoZSBsb2NhbCBmaWxlIGhhcyBhIGxhdGVyIHRpbWUKLSAgdGhhbiB0aGUgcmVtb3RlLgot Ki8KLSAgICAgICAgICAgIGlmIChyZWNvdmVyKSB7ICAgICAgICAgICAgICAvKiBSZW1vdGUgaXMg YmlnZ2VyICovCi0gICAgICAgICAgICAgICAgeCA9IGNoa21vZHRpbWUobG9jYWwscmVtb3RlLDAp OyAvKiBDaGVjayBmaWxlIGRhdGVzICovCi0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwiZnRw IHJlY3ZyZXF1ZXN0IGNoa21vZHRpbWUiLHJlbW90ZSx4KTsKLSAgICAgICAgICAgICAgICBpZiAo eCAhPSAxKQkJLyogRGF0ZXMgbXVzdCBiZSBlcXVhbCEgKi8KLSAgICAgICAgICAgICAgICAgIHJl Y292ZXIgPSAwOyAgICAgICAgICAvKiBJZiBub3QsIGdldCB3aG9sZSBmaWxlICovCi0gICAgICAg ICAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICB9Ci0gICAgICAgIGRlYnVnKEYx MTEsImZ0cCByZWN2cmVxdWVzdCByZWNvdmVyIixyZW1vdGUscmVjb3Zlcik7Ci0gICAgfQotCi0j aWZkZWYgRlRQX1BST1hZCi0gICAgaWYgKHByb3h5ICYmIGZ0cHJlY3YuaXNfcmV0cikKLSAgICAg IHJldHVybihwcm94dHJhbnMoY21kLCBsb2NhbCA/IGxvY2FsIDogcmVtb3RlLCByZW1vdGUpKTsK LSNlbmRpZiAvKiBGVFBfUFJPWFkgKi8KLQotICAgIGZ0cHJlY3YudGNyZmxhZyA9IChmZW9sICE9 IENSKSAmJiBmdHByZWN2LmlzX3JldHI7Ci0KLSAgICBmdHByZWN2LnJlcGx5ID0gMDsKLSAgICBm dHByZWN2LmZjcyA9IGZjczsKLSAgICBmdHByZWN2LnJjcyA9IHJjczsKLSAgICBmdHByZWN2LnJl Y292ZXIgPSByZWNvdmVyOwotICAgIGZ0cHJlY3YueGxhdGUgPSB4bGF0ZTsKLSAgICBmdHByZWN2 LmNtZCA9IGNtZDsKLSAgICBmdHByZWN2LmxvY2FsID0gbG9jYWw7Ci0gICAgZnRwcmVjdi5yZW1v dGUgPSByZW1vdGU7Ci0gICAgZnRwcmVjdi5sbW9kZSA9IGxtb2RlOwotICAgIGZ0cHJlY3YucGlw ZW5hbWUgPSBwaXBlbmFtZTsKLSAgICBmdHByZWN2Lm9sZGludHAgPSBOVUxMOwotICAgIGZ0cGNv ZGUgPSAwOwotCi0gICAgaGF2ZXNpZ2ludCA9IDA7Ci0gICAgZnRwcmVjdi5vbGRpbnRyID0gc2ln bmFsKFNJR0lOVCwgY2FuY2VscmVjdik7Ci0gICAgaWYgKGNjX2V4ZWN1dGUoY2tqYWRkcihyZWN2 Y2FuY2VsKSwgZG9mdHByZWN2LCBmYWlsZnRwcmVjdikgPCAwKQotICAgICAgcmV0dXJuIC0xOwot Ci0jaWZkZWYgRlRQX1RJTUVPVVQKLSAgICBkZWJ1ZyhGMTExLCJmdHAgcmVjdnJlcXVlc3QgZnRw cmVjdnJldCIscmVtb3RlLGZ0cHJlY3ZyZXQpOwotICAgIGRlYnVnKEYxMTEsImZ0cCByZWN2cmVx dWVzdCBmdHBfdGltZWRfb3V0IixyZW1vdGUsZnRwX3RpbWVkX291dCk7Ci0gICAgaWYgKGZ0cF90 aW1lZF9vdXQpCi0gICAgICBmdHByZWN2cmV0ID0gLTE7Ci0jZW5kaWYJLyogRlRQX1RJTUVPVVQg Ki8KLQotICAgIGlmIChmdHByZWN2cmV0IDwgMCkKLSAgICAgIHJldHVybiAtMTsKLQotICAgIGlm IChjY19leGVjdXRlKGNramFkZHIocmVjdmNhbmNlbCksIGRvZnRwcmVjdjIsIGZhaWxmdHByZWN2 MikgPCAwKQotICAgICAgcmV0dXJuIC0xOwotICAgIHJldHVybiBmdHByZWN2cmV0OwotfQotCi0v KgotICogTmVlZCB0byBzdGFydCBhIGxpc3RlbiBvbiB0aGUgZGF0YSBjaGFubmVsIGJlZm9yZSB3 ZSBzZW5kIHRoZSBjb21tYW5kLAotICogb3RoZXJ3aXNlIHRoZSBzZXJ2ZXIncyBjb25uZWN0IG1h eSBmYWlsLgotICovCi1zdGF0aWMgaW50Ci1pbml0Y29ubigpIHsKLSAgICByZWdpc3RlciBjaGFy ICpwLCAqYTsKLSAgICBpbnQgcmVzdWx0LCB0bXBubyA9IDA7Ci0gICAgaW50IG9uID0gMTsKLSAg ICBHU09DS05BTUVfVCBsZW47Ci0KLSNpZm5kZWYgTk9fUEFTU0lWRV9NT0RFCi0gICAgaW50IGEx LGEyLGEzLGE0LHAxLHAyOwotCi0gICAgaWYgKHBhc3NpdmVtb2RlKSB7Ci0gICAgICAgIGRhdGEg PSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApOwotICAgICAgICBnbG9iYWxkaW4gPSBk YXRhOwotICAgICAgICBpZiAoZGF0YSA8IDApIHsKLSAgICAgICAgICAgIHBlcnJvcigiZnRwOiBz b2NrZXQiKTsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg KGZ0cGNtZCgiUEFTViIsTlVMTCwwLDAsZnRwX3ZibSkgIT0gUkVQTFlfQ09NUExFVEUpIHsKLSAg ICAgICAgICAgIHByaW50ZigiUGFzc2l2ZSBtb2RlIHJlZnVzZWRcbiIpOwotICAgICAgICAgICAg cGFzc2l2ZW1vZGUgPSAwOwotICAgICAgICAgICAgcmV0dXJuKGluaXRjb25uKCkpOwotICAgICAg ICB9Ci0vKgotICBOb3cgd2UgaGF2ZSBhIHN0cmluZyBvZiBjb21tYS1zZXBhcmF0ZWQgb25lLWJ5 dGUgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMsCi0gIFRoZSBmaXJzdCBmb3VyIGFyZSB0aGUgYW4g SVAgYWRkcmVzcy4gIFRoZSBmaWZ0aCBpcyB0aGUgTVNCIG9mIHRoZSBwb3J0Ci0gIG51bWJlciwg dGhlIHNpeHRoIGlzIHRoZSBMU0IuICBGcm9tIHRoYXQgd2UgY2FuIG1ha2UgYSBzb2NrYWRkcl9p bi4KLSovCi0gICAgICAgIGlmIChzc2NhbmYocGFzdiwiJWQsJWQsJWQsJWQsJWQsJWQiLCZhMSwm YTIsJmEzLCZhNCwmcDEsJnAyKSAhPSA2KSB7Ci0gICAgICAgICAgICBwcmludGYoIlBhc3NpdmUg bW9kZSBhZGRyZXNzIHNjYW4gZmFpbHVyZVxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTEpOwot ICAgICAgICB9OwotI2lmbmRlZiBOT0hUVFAKLSAgICAgICAgaWYgKHRjcF9odHRwX3Byb3h5KSB7 Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICBjaGFyICogYWdlbnQgPSAiS2VybWl0IDk1IjsgLyog RGVmYXVsdCB1c2VyIGFnZW50ICovCi0jZWxzZQotICAgICAgICAgICAgY2hhciAqIGFnZW50ID0g IkMtS2VybWl0IjsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgIHJlZ2lzdGVyIHN0cnVj dCBob3N0ZW50ICpocCA9IDA7Ci0gICAgICAgICAgICBzdHJ1Y3Qgc2VydmVudCAqZGVzdHNwOwot ICAgICAgICAgICAgY2hhciBob3N0WzUxMl0sICpwLCAqcTsKLSNpZmRlZiBJUF9UT1MKLSNpZmRl ZiBJUFRPU19USFJPVUdIUFVUCi0gICAgICAgICAgICBpbnQgdG9zOwotI2VuZGlmIC8qIElQVE9T X1RIUk9VR0hQVVQgKi8KLSNlbmRpZiAvKiBJUF9UT1MgKi8KLSAgICAgICAgICAgIGludCBzOwot I2lmZGVmIERFQlVHCi0gICAgICAgICAgICBleHRlcm4gaW50IGRlYnRpbTsKLSAgICAgICAgICAg IGludCB4ZGVidGltOwotICAgICAgICAgICAgeGRlYnRpbSA9IGRlYnRpbTsKLSAgICAgICAgICAg IGRlYnRpbSA9IDE7Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotICAgICAgICAgICAgY2ttYWt4bXNn KHByb3h5aG9zdCxIVFRQQ1BZTCxja3VpdG9hKGExKSwiLiIsY2t1aXRvYShhMiksCi0gICAgICAg ICAgICAgICAgICAgICAgIi4iLGNrdWl0b2EoYTMpLCIuIixja3VpdG9hKGE0KSwiOiIsY2t1aXRv YSgocDE8PDgpfHAyKSwKLSAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTAotICAg ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBtZW1zZXQoKGNoYXIgKikmaGlzY3Rs YWRkciwgMCwgc2l6ZW9mIChoaXNjdGxhZGRyKSk7Ci0gICAgICAgICAgICBmb3IgKHAgPSB0Y3Bf aHR0cF9wcm94eSwgcT1ob3N0OyAqcCAhPSAnXDAnICYmICpwICE9ICc6JzsgcCsrLCBxKyspCi0g ICAgICAgICAgICAgICpxID0gKnA7Ci0gICAgICAgICAgICAqcSA9ICdcMCc7Ci0KLSAgICAgICAg ICAgIGhpc2N0bGFkZHIuc2luX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyKGhvc3QpOwotICAgICAg ICAgICAgaWYgKGhpc2N0bGFkZHIuc2luX2FkZHIuc19hZGRyICE9IElOQUREUl9OT05FKSAvKiAy MDEwLTAzLTI5ICovCi0JICAgIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJpbml0Y29u biBBIixob3N0LDApOwotICAgICAgICAgICAgICAgIGhpc2N0bGFkZHIuc2luX2ZhbWlseSA9IEFG X0lORVQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAs ImluaXRjb25uIEIiLGhvc3QsMCk7Ci0gICAgICAgICAgICAgICAgaHAgPSBnZXRob3N0YnluYW1l KGhvc3QpOwotI2lmZGVmIEhBRERSTElTVAotICAgICAgICAgICAgICAgIGhwID0gY2tfY29weWhv c3RlbnQoaHApOyAvKiBtYWtlIHNhZmUgY29weSB0aGF0IHdvbid0IGNoYW5nZSAqLwotI2VuZGlm IC8qIEhBRERSTElTVCAqLwotICAgICAgICAgICAgICAgIGlmIChocCA9PSBOVUxMKSB7Ci0gICAg ICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZnRwOiAlczogVW5rbm93biBob3N0XG4i LCBob3N0KTsKLSAgICAgICAgICAgICAgICAgICAgZnRwY29kZSA9IC0xOwotI2lmZGVmIERFQlVH Ci0gICAgICAgICAgICAgICAgICAgIGRlYnRpbSA9IHhkZWJ0aW07Ci0jZW5kaWYgLyogREVCVUcg Ki8KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICBoaXNjdGxhZGRyLnNpbl9mYW1pbHkgPSBocC0+aF9hZGRydHlwZTsKLSNp ZmRlZiBIQUREUkxJU1QKLSAgICAgICAgICAgICAgICBtZW1jcHkoKGNoYXIgKikmaGlzY3RsYWRk ci5zaW5fYWRkciwgaHAtPmhfYWRkcl9saXN0WzBdLAotICAgICAgICAgICAgICAgICAgICAgICBz aXplb2YoaGlzY3RsYWRkci5zaW5fYWRkcikpOwotI2Vsc2UgLyogSEFERFJMSVNUICovCi0gICAg ICAgICAgICAgICAgbWVtY3B5KChjaGFyICopJmhpc2N0bGFkZHIuc2luX2FkZHIsIGhwLT5oX2Fk ZHIsCi0gICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihoaXNjdGxhZGRyLnNpbl9hZGRyKSk7 Ci0jZW5kaWYgLyogSEFERFJMSVNUICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkYXRh ID0gc29ja2V0KGhpc2N0bGFkZHIuc2luX2ZhbWlseSwgU09DS19TVFJFQU0sIDApOwotICAgICAg ICAgICAgZGVidWcoRjEwMSwiaW5pdGNvbm4gc29ja2V0IiwiIixkYXRhKTsKLSAgICAgICAgICAg IGlmIChkYXRhIDwgMCkgewotICAgICAgICAgICAgICAgIHBlcnJvcigiZnRwOiBzb2NrZXQiKTsK LSAgICAgICAgICAgICAgICBmdHBjb2RlID0gLTE7Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgICAg ICAgICBkZWJ0aW0gPSB4ZGVidGltOwotI2VuZGlmIC8qIERFQlVHICovCi0gICAgICAgICAgICAg ICAgcmV0dXJuKDApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCpwID09ICc6JykK LSAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBwID0g Imh0dHAiOwotCi0gICAgICAgICAgICBkZXN0c3AgPSBnZXRzZXJ2YnluYW1lKHAsInRjcCIpOwot ICAgICAgICAgICAgaWYgKGRlc3RzcCkKLSAgICAgICAgICAgICAgaGlzY3RsYWRkci5zaW5fcG9y dCA9IGRlc3RzcC0+c19wb3J0OwotICAgICAgICAgICAgZWxzZSBpZiAocCkKLSAgICAgICAgICAg ICAgaGlzY3RsYWRkci5zaW5fcG9ydCA9IGh0b25zKGF0b2kocCkpOwotICAgICAgICAgICAgZWxz ZQotICAgICAgICAgICAgICBoaXNjdGxhZGRyLnNpbl9wb3J0ID0gaHRvbnMoODApOwotICAgICAg ICAgICAgZXJybm8gPSAwOwotI2lmZGVmIEhBRERSTElTVAotICAgICAgICAgICAgZGVidWcoRjEw MCwiaW5pdGNvbm4gSEFERFJMSVNUIiwiIiwwKTsKLSAgICAgICAgICAgIHdoaWxlCi0jZWxzZQot ICAgICAgICAgICAgZGVidWcoRjEwMCwiaW5pdGNvbm4gbm8gSEFERFJMSVNUIiwiIiwwKTsKLSAg ICAgICAgICAgIGlmCi0jZW5kaWYgLyogSEFERFJMSVNUICovCi0gICAgICAgICAgICAgIChjb25u ZWN0KGRhdGEsIChzdHJ1Y3Qgc29ja2FkZHIgKikmaGlzY3RsYWRkciwKLSAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZW9mIChoaXNjdGxhZGRyKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTAxLCJpbml0Y29ubiBjb25uZWN0IGZhaWxlZCIsIiIsZXJybm8pOwotI2lmZGVmIEhB RERSTElTVAotICAgICAgICAgICAgICAgICAgaWYgKGhwICYmIGhwLT5oX2FkZHJfbGlzdFsxXSkg ewotICAgICAgICAgICAgICAgICAgICAgIGludCBvZXJybm8gPSBlcnJubzsKLQotICAgICAgICAg ICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgImZ0cDogY29ubmVjdCB0byBhZGRyZXNzICVzOiAiLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW5ldF9udG9hKGhpc2N0bGFkZHIuc2luX2FkZHIpCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgICAgICAgIGVycm5vID0gb2Vycm5vOwot ICAgICAgICAgICAgICAgICAgICAgIHBlcnJvcigoY2hhciAqKTApOwotICAgICAgICAgICAgICAg ICAgICAgIGhwLT5oX2FkZHJfbGlzdCsrOwotICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgo Y2hhciAqKSZoaXNjdGxhZGRyLnNpbl9hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBocC0+aF9hZGRyX2xpc3RbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVv ZihoaXNjdGxhZGRyLnNpbl9hZGRyKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgZnByaW50Zihz dGRvdXQsICJUcnlpbmcgJXMuLi5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bmV0X250b2EoaGlzY3RsYWRkci5zaW5fYWRkcikpOwotI2lmZGVmIFRDUElQTElCCi0gICAgICAg ICAgICAgICAgICAgICAgc29ja2V0X2Nsb3NlKGRhdGEpOwotI2Vsc2UgLyogVENQSVBMSUIgKi8K LSAgICAgICAgICAgICAgICAgICAgICBjbG9zZShkYXRhKTsKLSNlbmRpZiAvKiBUQ1BJUExJQiAq LwotICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBzb2NrZXQoaGlzY3RsYWRkci5zaW5fZmFt aWx5LCBTT0NLX1NUUkVBTSwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgPCAw KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJvcigiZnRwOiBzb2NrZXQiKTsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgZnRwY29kZSA9IC0xOwotI2lmZGVmIERFQlVHCi0gICAg ICAgICAgICAgICAgICAgICAgICAgIGRlYnRpbSA9IHhkZWJ0aW07Ci0jZW5kaWYgLyogREVCVUcg Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg ICAgIH0KLSNlbmRpZiAvKiBIQUREUkxJU1QgKi8KLSAgICAgICAgICAgICAgICAgIHBlcnJvcigi ZnRwOiBjb25uZWN0Iik7Ci0gICAgICAgICAgICAgICAgICBmdHBjb2RlID0gLTE7Ci0gICAgICAg ICAgICAgICAgICBnb3RvIGJhZDsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGh0 dHBfY29ubmVjdChkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfaHR0cF9w cm94eV9hZ2VudCA/Ci0JCQkgICAgICAgdGNwX2h0dHBfcHJveHlfYWdlbnQgOgotCQkJICAgICAg ICAgYWdlbnQsCi0JCQkgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRj cF9odHRwX3Byb3h5X3VzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9odHRw X3Byb3h5X3B3ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcHJveHlob3N0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICkgPCAwKSB7Ci0jaWZkZWYgVENQSVBMSUIKLSAgICAgICAgICAgICAgICBzb2NrZXRfY2xvc2Uo ZGF0YSk7Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwotICAgICAgICAgICAgICAgIGNsb3NlKGRhdGEp OwotI2VuZGlmIC8qIFRDUElQTElCICovCi0gICAgICAgICAgICAgICAgcGVycm9yKCJmdHA6IGNv bm5lY3QiKTsKLSAgICAgICAgICAgICAgICBmdHBjb2RlID0gLTE7Ci0gICAgICAgICAgICAgICAg Z290byBiYWQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIE5PSFRU UCAqLwotICAgICAgICB7Ci0gICAgICAgICAgICBkYXRhX2FkZHIuc2luX2ZhbWlseSA9IEFGX0lO RVQ7Ci0gICAgICAgICAgICBkYXRhX2FkZHIuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoKGExPDwy NCl8KGEyPDwxNil8KGEzPDw4KXxhNCk7Ci0gICAgICAgICAgICBkYXRhX2FkZHIuc2luX3BvcnQg PSBodG9ucygocDE8PDgpfHAyKTsKLQotICAgICAgICAgICAgaWYgKGNvbm5lY3QoZGF0YSwKLSAg ICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmZGF0YV9hZGRyLAotICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGRhdGFfYWRkcikpIDwgMAotICAgICAgICAgICAg ICAgICkgewotICAgICAgICAgICAgICAgIHBlcnJvcigiZnRwOiBjb25uZWN0Iik7Ci0gICAgICAg ICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBk ZWJ1ZyhGMTAwLCJpbml0Y29ubiBjb25uZWN0IG9rIiwiIiwwKTsKLSNpZmRlZiBJUF9UT1MKLSNp ZmRlZiBJUFRPU19USFJPVUdIUFVUCi0gICAgICAgIG9uID0gSVBUT1NfVEhST1VHSFBVVDsKLSAg ICAgICAgaWYgKHNldHNvY2tvcHQoZGF0YSwgSVBQUk9UT19JUCwgSVBfVE9TLCAoY2hhciAqKSZv biwgc2l6ZW9mKGludCkpIDwgMCkKLSAgICAgICAgICBwZXJyb3IoImZ0cDogc2V0c29ja29wdCBU T1MgKGlnbm9yZWQpIik7Ci0jZW5kaWYgLyogSVBUT1NfVEhST1VHSFBVVCAqLwotI2VuZGlmIC8q IElQX1RPUyAqLwotICAgICAgICBtZW1jcHkoJmhpc2RhdGFhZGRyLCZkYXRhX2FkZHIsc2l6ZW9m KHN0cnVjdCBzb2NrYWRkcl9pbikpOwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlm IC8qIE5PX1BBU1NJVkVfTU9ERSAqLwotCi0gIG5vcG9ydDoKLSAgICBtZW1jcHkoJmRhdGFfYWRk ciwmbXljdGxhZGRyLHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLSAgICBpZiAoc2VuZHBv cnQpCi0gICAgICBkYXRhX2FkZHIuc2luX3BvcnQgPSAwOyAgIC8qIGxldCBzeXN0ZW0gcGljayBv bmUgKi8KLSAgICBpZiAoZGF0YSAhPSAtMSkgewotI2lmZGVmIFRDUElQTElCCi0gICAgICAgIHNv Y2tldF9jbG9zZShkYXRhKTsKLSNlbHNlIC8qIFRDUElQTElCICovCi0jaWZkZWYgVVNFX1NIVVRE T1dOCi0gICAgICAgIHNodXRkb3duKGRhdGEsIDErMSk7Ci0jZW5kaWYgLyogVVNFX1NIVVRET1dO ICovCi0gICAgICAgIGNsb3NlKGRhdGEpOwotI2VuZGlmIC8qIFRDUElQTElCICovCi0gICAgfQot ICAgIGRhdGEgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApOwotICAgIGdsb2JhbGRp biA9IGRhdGE7Ci0gICAgaWYgKGRhdGEgPCAwKSB7Ci0gICAgICAgIHBlcnJvcigiZnRwOiBzb2Nr ZXQiKTsKLSAgICAgICAgaWYgKHRtcG5vKQotICAgICAgICAgIHNlbmRwb3J0ID0gMTsKLSAgICAg ICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgaWYgKCFzZW5kcG9ydCkgewotICAgICAgICBpZiAo c2V0c29ja29wdChkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICBTT0xfU09DS0VULAotICAg ICAgICAgICAgICAgICAgICAgICBTT19SRVVTRUFERFIsCi0gICAgICAgICAgICAgICAgICAgICAg IChjaGFyICopJm9uLAotICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKG9uKQotICAgICAg ICAgICAgICAgICAgICAgICApIDwgMAotICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICBwZXJy b3IoImZ0cDogc2V0c29ja29wdCAocmV1c2UgYWRkcmVzcykiKTsKLSAgICAgICAgICAgIGdvdG8g YmFkOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChiaW5kKGRhdGEsIChzdHJ1Y3Qgc29ja2Fk ZHIgKikmZGF0YV9hZGRyLCBzaXplb2YgKGRhdGFfYWRkcikpIDwgMCkgewotICAgICAgICBwZXJy b3IoImZ0cDogYmluZCIpOwotICAgICAgICBnb3RvIGJhZDsKLSAgICB9Ci0gICAgbGVuID0gc2l6 ZW9mIChkYXRhX2FkZHIpOwotICAgIGlmIChnZXRzb2NrbmFtZShkYXRhLCAoc3RydWN0IHNvY2th ZGRyICopJmRhdGFfYWRkciwgJmxlbikgPCAwKSB7Ci0gICAgICAgIHBlcnJvcigiZnRwOiBnZXRz b2NrbmFtZSIpOwotICAgICAgICBnb3RvIGJhZDsKLSAgICB9Ci0gICAgaWYgKGxpc3RlbihkYXRh LCAxKSA8IDApIHsKLSAgICAgICAgcGVycm9yKCJmdHA6IGxpc3RlbiIpOwotICAgICAgICBnb3Rv IGJhZDsKLSAgICB9Ci0gICAgaWYgKHNlbmRwb3J0KSB7Ci0gICAgICAgIGEgPSAoY2hhciAqKSZk YXRhX2FkZHIuc2luX2FkZHI7Ci0gICAgICAgIHAgPSAoY2hhciAqKSZkYXRhX2FkZHIuc2luX3Bv cnQ7Ci0gICAgICAgIGNrbWFreG1zZyhmdHBjbWRidWYsRlRQX0JVRlNJWiwiUE9SVCAiLAotICAg ICAgICAgICAgICAgICAgVUMoYVswXSksIiwiLFVDKGFbMV0pLCIsIiwgVUMoYVsyXSksIiwiLCBV QyhhWzNdKSwiLCIsCi0gICAgICAgICAgICAgICAgICBVQyhwWzBdKSwiLCIsIFVDKHBbMV0pKTsK LSAgICAgICAgcmVzdWx0ID0gZnRwY21kKGZ0cGNtZGJ1ZixOVUxMLDAsMCxmdHBfdmJtKTsKLSAg ICAgICAgaWYgKHJlc3VsdCA9PSBSRVBMWV9FUlJPUiAmJiBzZW5kcG9ydCkgewotICAgICAgICAg ICAgc2VuZHBvcnQgPSAwOwotICAgICAgICAgICAgdG1wbm8gPSAxOwotICAgICAgICAgICAgZ290 byBub3BvcnQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuKHJlc3VsdCAhPSBSRVBMWV9DT01Q TEVURSk7Ci0gICAgfQotICAgIGlmICh0bXBubykKLSAgICAgIHNlbmRwb3J0ID0gMTsKLSNpZmRl ZiBJUF9UT1MKLSNpZmRlZiBJUFRPU19USFJPVUdIUFVUCi0gICAgb24gPSBJUFRPU19USFJPVUdI UFVUOwotICAgIGlmIChzZXRzb2Nrb3B0KGRhdGEsIElQUFJPVE9fSVAsIElQX1RPUywgKGNoYXIg Kikmb24sIHNpemVvZihpbnQpKSA8IDApCi0gICAgICBwZXJyb3IoImZ0cDogc2V0c29ja29wdCBU T1MgKGlnbm9yZWQpIik7Ci0jZW5kaWYKLSNlbmRpZgotICAgIHJldHVybigwKTsKLSAgYmFkOgot I2lmZGVmIFRDUElQTElCCi0gICAgc29ja2V0X2Nsb3NlKGRhdGEpOwotI2Vsc2UgLyogVENQSVBM SUIgKi8KLSNpZmRlZiBVU0VfU0hVVERPV04KLSAgICBzaHV0ZG93bihkYXRhLCAxKzEpOwotI2Vu ZGlmIC8qIFVTRV9TSFVURE9XTiAqLwotICAgIGNsb3NlKGRhdGEpOwotI2VuZGlmIC8qIFRDUElQ TElCICovCi0gICAgZGF0YSA9IC0xOwotICAgIGdsb2JhbGRpbiA9IGRhdGE7Ci0gICAgaWYgKHRt cG5vKQotICAgICAgc2VuZHBvcnQgPSAxOwotICAgIHJldHVybigtMSk7Ci19Ci0KLSNpZmRlZiBD S19TU0wKLXN0YXRpYyBpbnQKLXNzbF9kYXRhY29ubigpIHsKLSAgICBpZiAoc3NsX2Z0cF9kYXRh X2NvbiE9TlVMTCkgeyAgICAgICAvKiBEbyBTU0wgKi8KLSAgICAgICAgU1NMX2ZyZWUoc3NsX2Z0 cF9kYXRhX2Nvbik7Ci0gICAgICAgIHNzbF9mdHBfZGF0YV9jb249TlVMTDsKLSAgICB9Ci0gICAg c3NsX2Z0cF9kYXRhX2Nvbj0oU1NMICopU1NMX25ldyhzc2xfZnRwX2N0eCk7Ci0KLSAgICBTU0xf c2V0X2ZkKHNzbF9mdHBfZGF0YV9jb24sZGF0YSk7Ci0gICAgU1NMX3NldF92ZXJpZnkoc3NsX2Z0 cF9kYXRhX2Nvbixzc2xfdmVyaWZ5X2ZsYWcsTlVMTCk7Ci0KLSAgICBTU0xfY29weV9zZXNzaW9u X2lkKHNzbF9mdHBfZGF0YV9jb24sc3NsX2Z0cF9jb24pOwotCi0gICAgaWYgKHNzbF9kZWJ1Z19m bGFnKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCI9PlNUQVJUIFNTTCBjb25uZWN0IG9uIERB VEFcbiIpOwotICAgICAgICBmZmx1c2goc3RkZXJyKTsKLSAgICB9Ci0gICAgaWYgKFNTTF9jb25u ZWN0KHNzbF9mdHBfZGF0YV9jb24pIDw9IDApIHsKLSAgICAgICAgc3RhdGljIGNoYXIgZXJyYnVm WzEwMjRdOwotICAgICAgICBja21ha21zZyhlcnJidWYsMTAyNCwiZnRwOiBTU0xfY29ubmVjdCBE QVRBIGVycm9yOiAiLAotICAgICAgICAgICAgICAgICAgRVJSX2Vycm9yX3N0cmluZyhFUlJfZ2V0 X2Vycm9yKCksTlVMTCksTlVMTCxOVUxMKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsIiVzXG4i LCBlcnJidWYpOwotICAgICAgICBmZmx1c2goc3RkZXJyKTsKLSNpZmRlZiBUQ1BJUExJQgotICAg ICAgICBzb2NrZXRfY2xvc2UoZGF0YSk7Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwotI2lmZGVmIFVT RV9TSFVURE9XTgotICAgICAgICBzaHV0ZG93bihkYXRhLCAxKzEpOwotI2VuZGlmIC8qIFVTRV9T SFVURE9XTiAqLwotICAgICAgICBjbG9zZShkYXRhKTsKLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwot ICAgICAgICBkYXRhID0gLTE7Ci0gICAgICAgIGdsb2JhbGRpbiA9IGRhdGE7Ci0gICAgICAgIHJl dHVybigtMSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3NsX2Z0cF9kYXRhX2FjdGl2ZV9mbGFn PTE7Ci0KLSAgICAgICAgaWYgKCFzc2xfY2VydHNva19mbGFnICYmICF0bHNfaXNfa3JiNSgyKSkg ewotICAgICAgICAgICAgY2hhciAqc3ViamVjdCA9IHNzbF9nZXRfc3ViamVjdF9uYW1lKHNzbF9m dHBfZGF0YV9jb24pOwotCi0gICAgICAgICAgICBpZiAoIXN1YmplY3QpIHsKLSAgICAgICAgICAg ICAgICBpZiAoc3NsX3ZlcmlmeV9mbGFnICYgU1NMX1ZFUklGWV9GQUlMX0lGX05PX1BFRVJfQ0VS VCkgewotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJkYXRhY29ubiIsIltTU0wgXy0g RkFJTEVEXSIsMCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgc3NsX2Z0cF9kYXRhX2FjdGl2ZV9m bGFnID0gMDsKLSNpZmRlZiBUQ1BJUExJQgotICAgICAgICAgICAgICAgICAgICBzb2NrZXRfY2xv c2UoZGF0YSk7Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwotI2lmZGVmIFVTRV9TSFVURE9XTgotICAg ICAgICAgICAgICAgICAgICBzaHV0ZG93bihkYXRhLCAxKzEpOwotI2VuZGlmIC8qIFVTRV9TSFVU RE9XTiAqLwotICAgICAgICAgICAgICAgICAgICBjbG9zZShkYXRhKTsKLSNlbmRpZiAvKiBUQ1BJ UExJQiAqLwotICAgICAgICAgICAgICAgICAgICBkYXRhID0gLTE7Ci0gICAgICAgICAgICAgICAg ICAgIGdsb2JhbGRpbiA9IGRhdGE7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0g ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFvdXQyc2Ny ZWVuICYmIGRpc3BsYSAmJiBmZGlzcGxhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdHNj cmVlbihTQ1JfVEMsMCwoQ0tfT0ZGX1QpMCwiRGlzcGxheSBjYW5jZWxlZCIpOwotICAgICAgICAg ICAgICAgICAgICAgICAgLyogZmRpc3BsYSA9IFhZRkRfQjsgKi8KLSAgICAgICAgICAgICAgICAg ICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmICh1cV9vaygKLSAgICAgICAgICAiV2Fybmlu ZzogU2VydmVyIGRpZG4ndCBwcm92aWRlIGEgY2VydGlmaWNhdGUgb24gZGF0YSBjb25uZWN0aW9u XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb250aW51ZSB3aXRoIGZpbGUg dHJhbnNmZXI/IChZL04pIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMsTlVMTCww KSA8PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCAiZGF0YWNvbm4i LCJbU1NMIC0gRkFJTEVEXSIsMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzc2xfZnRwX2Rh dGFfYWN0aXZlX2ZsYWcgPSAwOwotI2lmZGVmIFRDUElQTElCCi0gICAgICAgICAgICAgICAgICAg ICAgICBzb2NrZXRfY2xvc2UoZGF0YSk7Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwotI2lmZGVmIFVT RV9TSFVURE9XTgotICAgICAgICAgICAgICAgICAgICAgICAgc2h1dGRvd24oZGF0YSwgMSsxKTsK LSNlbmRpZiAvKiBVU0VfU0hVVERPV04gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGNsb3Nl KGRhdGEpOwotI2VuZGlmIC8qIFRDUElQTElCICovCi0gICAgICAgICAgICAgICAgICAgICAgICBk YXRhID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxkaW4gPSBkYXRhOwotICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg aWYgKCFvdXQyc2NyZWVuICYmIGRpc3BsYSAmJiBmZGlzcGxhID09IFhZRkRfQykgewotICAgICAg ICAgICAgICAgICAgICBmdHNjcmVlbihTQ1JfVEMsMCwoQ0tfT0ZGX1QpMCwiRGlzcGxheSBjYW5j ZWxlZCIpOwotICAgICAgICAgICAgICAgICAgICAvKiBmZGlzcGxhID0gWFlGRF9COyAqLwotICAg ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChzc2xfY2hlY2tfc2VydmVyX25h bWUoc3NsX2Z0cF9kYXRhX2NvbixmdHBfdXNlcl9ob3N0KSkgewotICAgICAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTEwLCJkYXRhY29ubiIsIltTU0wgLSBGQUlMRURdIiwwKTsKLSAgICAgICAgICAg ICAgICAgICAgc3NsX2Z0cF9kYXRhX2FjdGl2ZV9mbGFnID0gMDsKLSNpZmRlZiBUQ1BJUExJQgot ICAgICAgICAgICAgICAgICAgICBzb2NrZXRfY2xvc2UoZGF0YSk7Ci0jZWxzZSAvKiBUQ1BJUExJ QiAqLwotI2lmZGVmIFVTRV9TSFVURE9XTgotICAgICAgICAgICAgICAgICAgICBzaHV0ZG93bihk YXRhLCAxKzEpOwotI2VuZGlmIC8qIFVTRV9TSFVURE9XTiAqLwotICAgICAgICAgICAgICAgICAg ICBjbG9zZShkYXRhKTsKLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotICAgICAgICAgICAgICAgICAg ICBkYXRhID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgIGdsb2JhbGRpbiA9IGRhdGE7Ci0gICAg ICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgfQotICAgICAgICB9Ci0gICAgICAgIGRlYnVnKEYxMTAsImRhdGFjb25uIiwiW1NTTCAtIE9L XSIsMCk7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAvKiBUaGlzIG1lc3NlcyB1cCB0aGUgZnVs bCBzY3JlZW4gZmlsZSB0cmFuc2ZlciBkaXNwbGF5ICovCi0gICAgICAgIHNzbF9kaXNwbGF5X2Nv bm5lY3RfZGV0YWlscyhzc2xfZnRwX2NvbiwwLHNzbF92ZXJib3NlX2ZsYWcpOwotI2VuZGlmIC8q IENPTU1FTlQgKi8KLSAgICB9Ci0gICAgaWYgKHNzbF9kZWJ1Z19mbGFnKSB7Ci0gICAgICAgIGZw cmludGYoc3RkZXJyLCI9PkRPTkUgU1NMIGNvbm5lY3Qgb24gREFUQVxuIik7Ci0gICAgICAgIGZm bHVzaChzdGRlcnIpOwotICAgIH0KLSAgICByZXR1cm4oZGF0YSk7Ci19Ci0jZW5kaWYgLyogQ0tf U1NMICovCi0KLXN0YXRpYyBpbnQKLWRhdGFjb25uKGxtb2RlKSBjaGFyICpsbW9kZTsgewotICAg IGludCBzOwotI2lmZGVmIElQX1RPUwotICAgIGludCB0b3M7Ci0jZW5kaWYgLyogSVBfVE9TICov Ci0jaWZkZWYgVUNYNTAKLSAgICBzdGF0aWMgdV9pbnQgZnJvbWxlbjsKLSNlbHNlCi0gICAgc3Rh dGljIFNPQ0tPUFRfVCBmcm9tbGVuOwotI2VuZGlmIC8qIFVDWDUwICovCi0KLSAgICBmcm9tbGVu ID0gc2l6ZW9mKGhpc2RhdGFhZGRyKTsKLQotI2lmbmRlZiBOT19QQVNTSVZFX01PREUKLSAgICBp ZiAocGFzc2l2ZW1vZGUpIHsKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgc3NsX2Z0cF9kYXRhX2Fj dGl2ZV9mbGFnPTA7Ci0gICAgICAgIGlmIChzc2xfZnRwX2FjdGl2ZV9mbGFnICYmCi0gICAgICAg ICAgICAoc3NsX2Z0cF9wcm94eSB8fCBmdHBfZHBsID09IEZQTF9QUlYpKQotICAgICAgICAgIHJl dHVybihzc2xfZGF0YWNvbm4oKSk7Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgIHJldHVy bihkYXRhKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9fUEFTU0lWRV9NT0RFICovCi0KLSAgICBzID0g YWNjZXB0KGRhdGEsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmhpc2RhdGFhZGRyLCAmZnJvbWxlbik7 Ci0gICAgaWYgKHMgPCAwKSB7Ci0gICAgICAgIHBlcnJvcigiZnRwOiBhY2NlcHQiKTsKLSNpZmRl ZiBUQ1BJUExJQgotICAgICAgICBzb2NrZXRfY2xvc2UoZGF0YSk7Ci0jZWxzZSAvKiBUQ1BJUExJ QiAqLwotI2lmZGVmIFVTRV9TSFVURE9XTgotICAgICAgICBzaHV0ZG93bihkYXRhLCAxKzEpOwot I2VuZGlmIC8qIFVTRV9TSFVURE9XTiAqLwotICAgICAgICBjbG9zZShkYXRhKTsKLSNlbmRpZiAv KiBUQ1BJUExJQiAqLwotICAgICAgICBkYXRhID0gLTE7Ci0gICAgICAgIGdsb2JhbGRpbiA9IGRh dGE7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotI2lmZGVmIFRDUElQTElCCi0gICAgc29j a2V0X2Nsb3NlKGRhdGEpOwotI2Vsc2UgLyogVENQSVBMSUIgKi8KLSNpZmRlZiBVU0VfU0hVVERP V04KLSAgICBzaHV0ZG93bihkYXRhLCAxKzEpOwotI2VuZGlmIC8qIFVTRV9TSFVURE9XTiAqLwot ICAgIGNsb3NlKGRhdGEpOwotI2VuZGlmIC8qIFRDUElQTElCICovCi0gICAgZGF0YSA9IHM7Ci0g ICAgZ2xvYmFsZGluID0gZGF0YTsKLSNpZmRlZiBJUF9UT1MKLSNpZmRlZiBJUFRPU19USFJPVUdI UFVUCi0gICAgdG9zID0gSVBUT1NfVEhST1VHSFBVVDsKLSAgICBpZiAoc2V0c29ja29wdChkYXRh LCBJUFBST1RPX0lQLCBJUF9UT1MsIChjaGFyICopJnRvcywgc2l6ZW9mKGludCkpIDwgMCkKLSAg ICAgIHBlcnJvcigiZnRwOiBzZXRzb2Nrb3B0IFRPUyAoaWdub3JlZCkiKTsKLSNlbmRpZiAvKiBJ UFRPU19USFJPVUdIUFVUICovCi0jZW5kaWYgLyogSVBfVE9TICovCi0KLSNpZmRlZiBDS19TU0wK LSAgICBzc2xfZnRwX2RhdGFfYWN0aXZlX2ZsYWc9MDsKLSAgICBpZiAoc3NsX2Z0cF9hY3RpdmVf ZmxhZyAmJgotICAgICAgICAoc3NsX2Z0cF9wcm94eSB8fCBmdHBfZHBsID09IEZQTF9QUlYpKQot ICAgICAgcmV0dXJuKHNzbF9kYXRhY29ubigpKTsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICBy ZXR1cm4oZGF0YSk7Ci19Ci0KLSNpZmRlZiBGVFBfUFJPWFkKLXN0YXRpYyBzaWd0eXBlCi1wc2Nh bmNlbChzaWcpIGludCBzaWc7IHsKLSAgICBjYW5jZWxmaWxlKys7Ci19Ci0KLXN0YXRpYyBWT0lE Ci1wc3dpdGNoKGZsYWcpIGludCBmbGFnOyB7Ci0gICAgZXh0ZXJuIGludCBwcm94eTsKLSAgICBz aWdfdCBvbGRpbnRyOwotICAgIHN0YXRpYyBzdHJ1Y3QgY29tdmFycyB7Ci0gICAgICAgIGludCBj b25uZWN0OwotICAgICAgICBjaGFyIG5hbWVbTUFYSE9TVE5BTUVMRU5dOwotICAgICAgICBzdHJ1 Y3Qgc29ja2FkZHJfaW4gbWN0bDsKLSAgICAgICAgc3RydWN0IHNvY2thZGRyX2luIGhjdGw7Ci0g ICAgICAgIEZJTEUgKmluOwotICAgICAgICBGSUxFICpvdXQ7Ci0gICAgICAgIGludCB0cGU7Ci0g ICAgICAgIGludCBjdXJ0cGU7Ci0gICAgICAgIGludCBjcG5kOwotICAgICAgICBpbnQgc3VucWU7 Ci0gICAgICAgIGludCBydW5xZTsKLSAgICAgICAgaW50IG1jc2U7Ci0gICAgICAgIGludCBudGZs ZzsKLSAgICAgICAgY2hhciBudGlbMTddOwotICAgICAgICBjaGFyIG50b1sxN107Ci0gICAgICAg IGludCBtYXBmbGc7Ci0gICAgICAgIGNoYXIgbWlbQ0tNQVhQQVRIXTsKLSAgICAgICAgY2hhciBt b1tDS01BWFBBVEhdOwotICAgICAgICBjaGFyICphdXRodHlwZTsKLSAgICAgICAgaW50IGNsdmw7 Ci0gICAgICAgIGludCBkbHZsOwotI2lmZGVmIEZUUF9LUkI0Ci0gICAgICAgIGRlc19jYmxvY2sg c2Vzc2lvbjsKLSAgICAgICAgZGVzX2tleV9zY2hlZHVsZSBmdHBfc2NoZWQ7Ci0jZW5kaWYgLyog RlRQX0tSQjQgKi8KLSNpZmRlZiBGVFBfR1NTQVBJCi0gICAgICAgIGdzc19jdHhfaWRfdCBnY29u dGV4dDsKLSNlbmRpZiAvKiBHU1NBUEkgKi8KLSAgICB9IHByb3hzdHJ1Y3QsIHRtcHN0cnVjdDsK LSAgICBzdHJ1Y3QgY29tdmFycyAqaXAsICpvcDsKLQotICAgIGNhbmNlbGZpbGUgPSAwOwotICAg IG9sZGludHIgPSBzaWduYWwoU0lHSU5ULCBwc2NhbmNlbCk7Ci0gICAgaWYgKGZsYWcpIHsKLSAg ICAgICAgaWYgKHByb3h5KQotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaXAgPSAmdG1wc3Ry dWN0OwotICAgICAgICBvcCA9ICZwcm94c3RydWN0OwotICAgICAgICBwcm94eSsrOwotICAgIH0g ZWxzZSB7Ci0gICAgICAgIGlmICghcHJveHkpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgICBp cCA9ICZwcm94c3RydWN0OwotICAgICAgICBvcCA9ICZ0bXBzdHJ1Y3Q7Ci0gICAgICAgIHByb3h5 ID0gMDsKLSAgICB9Ci0gICAgaXAtPmNvbm5lY3QgPSBjb25uZWN0ZWQ7Ci0gICAgY29ubmVjdGVk ID0gb3AtPmNvbm5lY3Q7Ci0gICAgaWYgKGZ0cF9ob3N0KSB7Ci0gICAgICAgIHN0cm5jcHkoaXAt Pm5hbWUsIGZ0cF9ob3N0LCBNQVhIT1NUTkFNRUxFTiAtIDEpOwotICAgICAgICBpcC0+bmFtZVtN QVhIT1NUTkFNRUxFTiAtIDFdID0gJ1wwJzsKLSAgICAgICAgaXAtPm5hbWVbc3RybGVuKGlwLT5u YW1lKV0gPSAnXDAnOwotICAgIH0gZWxzZQotICAgICAgaXAtPm5hbWVbMF0gPSAwOwotICAgIGZ0 cF9ob3N0ID0gb3AtPm5hbWU7Ci0gICAgaXAtPmhjdGwgPSBoaXNjdGxhZGRyOwotICAgIGhpc2N0 bGFkZHIgPSBvcC0+aGN0bDsKLSAgICBpcC0+bWN0bCA9IG15Y3RsYWRkcjsKLSAgICBteWN0bGFk ZHIgPSBvcC0+bWN0bDsKLSAgICBpcC0+aW4gPSBjc29ja2V0OwotICAgIGNzb2NrZXQgPSBvcC0+ aW47Ci0gICAgaXAtPm91dCA9IGNzb2NrZXQ7Ci0gICAgY3NvY2tldCA9IG9wLT5vdXQ7Ci0gICAg aXAtPnRwZSA9IGZ0cF90eXA7Ci0gICAgZnRwX3R5cCA9IG9wLT50cGU7Ci0gICAgaXAtPmN1cnRw ZSA9IGN1cnR5cGU7Ci0gICAgY3VydHlwZSA9IG9wLT5jdXJ0cGU7Ci0gICAgaXAtPmNwbmQgPSBj cGVuZDsKLSAgICBjcGVuZCA9IG9wLT5jcG5kOwotICAgIGlwLT5zdW5xZSA9IGZ0cF91c247Ci0g ICAgZnRwX3VzbiA9IG9wLT5zdW5xZTsKLSAgICBpcC0+bWNzZSA9IG1jYXNlOwotICAgIG1jYXNl ID0gb3AtPm1jc2U7Ci0gICAgaXAtPm50ZmxnID0gbnRmbGFnOwotICAgIG50ZmxhZyA9IG9wLT5u dGZsZzsKLSAgICBzdHJuY3B5KGlwLT5udGksIG50aW4sIDE2KTsKLSAgICAoaXAtPm50aSlbc3Ry bGVuKGlwLT5udGkpXSA9ICdcMCc7Ci0gICAgc3RyY3B5KG50aW4sIG9wLT5udGkpOwotICAgIHN0 cm5jcHkoaXAtPm50bywgbnRvdXQsIDE2KTsKLSAgICAoaXAtPm50bylbc3RybGVuKGlwLT5udG8p XSA9ICdcMCc7Ci0gICAgc3RyY3B5KG50b3V0LCBvcC0+bnRvKTsKLSAgICBpcC0+bWFwZmxnID0g bWFwZmxhZzsKLSAgICBtYXBmbGFnID0gb3AtPm1hcGZsZzsKLSAgICBzdHJuY3B5KGlwLT5taSwg bWFwaW4sIENLTUFYUEFUSCAtIDEpOwotICAgIChpcC0+bWkpW3N0cmxlbihpcC0+bWkpXSA9ICdc MCc7Ci0gICAgc3RyY3B5KG1hcGluLCBvcC0+bWkpOwotICAgIHN0cm5jcHkoaXAtPm1vLCBtYXBv dXQsIENLTUFYUEFUSCAtIDEpOwotICAgIChpcC0+bW8pW3N0cmxlbihpcC0+bW8pXSA9ICdcMCc7 Ci0gICAgc3RyY3B5KG1hcG91dCwgb3AtPm1vKTsKLSAgICBpcC0+YXV0aHR5cGUgPSBhdXRoX3R5 cGU7Ci0gICAgYXV0aF90eXBlID0gb3AtPmF1dGh0eXBlOwotICAgIGlwLT5jbHZsID0gZnRwX2Nw bDsKLSAgICBmdHBfY3BsID0gb3AtPmNsdmw7Ci0gICAgaXAtPmRsdmwgPSBmdHBfZHBsOwotICAg IGZ0cF9kcGwgPSBvcC0+ZGx2bDsKLSAgICBpZiAoIWZ0cF9jcGwpCi0gICAgICBmdHBfY3BsID0g RlBMX0NMUjsKLSAgICBpZiAoIWZ0cF9kcGwpCi0gICAgICBmdHBfZHBsID0gRlBMX0NMUjsKLSNp ZmRlZiBGVFBfS1JCNAotICAgIG1lbWNweShpcC0+c2Vzc2lvbiwgZnRwX2NyZWQuc2Vzc2lvbiwg c2l6ZW9mKGZ0cF9jcmVkLnNlc3Npb24pKTsKLSAgICBtZW1jcHkoZnRwX2NyZWQuc2Vzc2lvbiwg b3AtPnNlc3Npb24sIHNpemVvZihmdHBfY3JlZC5zZXNzaW9uKSk7Ci0gICAgbWVtY3B5KGlwLT5z Y2hlZHVsZSwgZnRwX3NjaGVkLCBzaXplb2YoZnRwX3NjaGVkKSk7Ci0gICAgbWVtY3B5KGZ0cF9z Y2hlZCwgb3AtPnNjaGVkdWxlLCBzaXplb2YoZnRwX3NjaGVkKSk7Ci0jZW5kaWYgLyogRlRQX0tS QjQgKi8KLSNpZmRlZiBGVFBfR1NTQVBJCi0gICAgaXAtPmdjb250ZXh0ID0gZ2NvbnRleHQ7Ci0g ICAgZ2NvbnRleHQgPSBvcC0+Z2NvbnRleHQ7Ci0jZW5kaWYgLyogR1NTQVBJICovCi0gICAgc2ln bmFsKFNJR0lOVCwgb2xkaW50cik7Ci0gICAgaWYgKGNhbmNlbGZpbGUpIHsKLSAgICAgICAgY2Fu Y2VsZmlsZSA9IDA7Ci0gICAgICAgIGRlYnVnKEYxMDEsInBzd2l0Y2ggY2FuY2VsZmlsZSBCIiwi IixjYW5jZWxmaWxlKTsKLSAgICAgICAgKCpvbGRpbnRyKShTSUdJTlQpOwotICAgIH0KLX0KLQot c3RhdGljIHNpZ3R5cGUKLWNhbmNlbHB0KHNpZykgaW50IHNpZzsgewotICAgIHByaW50ZigiXG4i KTsKLSAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICBwdGFiZmxnKys7Ci0gICAgY2FuY2VsZmlsZSA9 IDA7Ci0jaWZuZGVmIE9TMgotICAgIGxvbmdqbXAocHRjYW5jZWwsIDEpOwotI2Vsc2UKLSAgICBQ b3N0Q3RybENTZW0oKTsKLSNlbmRpZiAvKiBPUzIgKi8KLX0KLQotdm9pZAotcHJveHRyYW5zKGNt ZCwgbG9jYWwsIHJlbW90ZSwgdW5pcXVlKSBjaGFyICpjbWQsICpsb2NhbCwgKnJlbW90ZTsgaW50 IHVuaXF1ZTsgewotICAgIHNpZ190IG9sZGludHI7Ci0gICAgaW50IHNlY25kZmxhZyA9IDAsIHBy b3hfdHlwZSwgbmZuZDsKLSAgICBjaGFyICpjbWQyOwotI2lmZGVmIEJTRFNFTEVDVAotICAgIGZk X3NldCBtYXNrOwotI2VuZGlmIC8qIEJTRFNFTEVDVCAqLwotICAgIHNpZ3R5cGUgY2FuY2VscHQo KTsKLQotICAgIGlmIChzdHJjbXAoY21kLCAiUkVUUiIpKQotICAgICAgY21kMiA9ICJSRVRSIjsK LSAgICBlbHNlCi0gICAgICBjbWQyID0gdW5pcXVlID8gIlNUT1UiIDogIlNUT1IiOwotICAgIGlm ICgocHJveF90eXBlID0gdHlwZSkgPT0gMCkgewotICAgICAgICBpZiAoc2VydmVydHlwZSA9PSBT WVNfVU5JWCAmJiB1bml4X3Byb3h5KQotICAgICAgICAgIHByb3hfdHlwZSA9IEZUVF9CSU47Ci0g ICAgICAgIGVsc2UKLSAgICAgICAgICBwcm94X3R5cGUgPSBGVFRfQVNDOwotICAgIH0KLSAgICBp ZiAoY3VydHlwZSAhPSBwcm94X3R5cGUpCi0gICAgICBjaGFuZ2V0eXBlKHByb3hfdHlwZSwgMSk7 Ci0gICAgaWYgKGZ0cGNtZCgiUEFTViIsTlVMTCwwLDAsZnRwX3ZibSkgIT0gUkVQTFlfQ09NUExF VEUpIHsKLSAgICAgICAgcHJpbnRmKCJQcm94eSBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGly ZCBwYXJ0eSB0cmFuc2ZlcnMuXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBwc3dp dGNoKDApOwotICAgIGlmICghY29ubmVjdGVkKSB7Ci0gICAgICAgIHByaW50ZigiTm8gcHJpbWFy eSBjb25uZWN0aW9uXG4iKTsKLSAgICAgICAgcHN3aXRjaCgxKTsKLSAgICAgICAgZnRwY29kZSA9 IC0xOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChjdXJ0eXBlICE9IHByb3hfdHlw ZSkKLSAgICAgIGNoYW5nZXR5cGUocHJveF90eXBlLCAxKTsKLQotICAgIGlmIChmdHBjbWQoIlBP UlQiLHBhc3YsLTEsLTEsZnRwX3ZibSkgIT0gUkVQTFlfQ09NUExFVEUpIHsKLSAgICAgICAgcHN3 aXRjaCgxKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8qIFJlcGxhY2Ugd2l0aCBj YWxscyB0byBjY19leGVjdXRlKCkgKi8KLSAgICBpZiAoc2V0am1wKHB0Y2FuY2VsKSkKLSAgICAg IGdvdG8gY2FuY2VsOwotICAgIG9sZGludHIgPSBzaWduYWwoU0lHSU5ULCBjYW5jZWxwdCk7Ci0g ICAgaWYgKGZ0cGNtZChjbWQscmVtb3RlLC0xLC0xLGZ0cF92Ym0pICE9IFBSRUxJTSkgewotICAg ICAgICBzaWduYWwoU0lHSU5ULCBvbGRpbnRyKTsKLSAgICAgICAgcHN3aXRjaCgxKTsKLSAgICAg ICAgcmV0dXJuOwotICAgIH0KLSAgICBzbGVlcCgyMDAwKTsKLSAgICBwc3dpdGNoKDEpOwotICAg IHNlY25kZmxhZysrOwotICAgIGlmIChmdHBjbWQoY21kMixsb2NhbCwtMSwtMSxmdHBfdmJtKSAh PSBQUkVMSU0pCi0gICAgICBnb3RvIGNhbmNlbDsKLSAgICBwdGZsYWcrKzsKLSAgICBnZXRyZXBs eSgwLC0xLC0xLGZ0cF92Ym0sMCk7Ci0gICAgcHN3aXRjaCgwKTsKLSAgICBnZXRyZXBseSgwLC0x LC0xLGZ0cF92Ym0sMCk7Ci0gICAgc2lnbmFsKFNJR0lOVCwgb2xkaW50cik7Ci0gICAgcHN3aXRj aCgxKTsKLSAgICBwdGZsYWcgPSAwOwotICAgIHJldHVybjsKLQotICBjYW5jZWw6Ci0gICAgc2ln bmFsKFNJR0lOVCwgU0lHX0lHTik7Ci0gICAgcHRmbGFnID0gMDsKLSAgICBpZiAoc3RyY21wKGNt ZCwgIlJFVFIiKSAmJiAhcHJveHkpCi0gICAgICBwc3dpdGNoKDEpOwotICAgIGVsc2UgaWYgKCFz dHJjbXAoY21kLCAiUkVUUiIpICYmIHByb3h5KQotICAgICAgcHN3aXRjaCgwKTsKLSAgICBpZiAo IWNwZW5kICYmICFzZWNuZGZsYWcpIHsgIC8qIG9ubHkgaGVyZSBpZiBjbWQgPSAiU1RPUiIgKHBy b3h5PTEpICovCi0gICAgICAgIGlmIChmdHBjbWQoY21kMixsb2NhbCwtMSwtMSxmdHBfdmJtKSAh PSBQUkVMSU0pIHsKLSAgICAgICAgICAgIHBzd2l0Y2goMCk7Ci0gICAgICAgICAgICBpZiAoY3Bl bmQpCi0gICAgICAgICAgICAgIGNhbmNlbF9yZW1vdGUoMCk7Ci0gICAgICAgIH0KLSAgICAgICAg cHN3aXRjaCgxKTsKLSAgICAgICAgaWYgKHB0YWJmbGcpCi0gICAgICAgICAgZnRwY29kZSA9IC0x OwotICAgICAgICBzaWduYWwoU0lHSU5ULCBvbGRpbnRyKTsKLSAgICAgICAgcmV0dXJuOwotICAg IH0KLSAgICBpZiAoY3BlbmQpCi0gICAgICBjYW5jZWxfcmVtb3RlKDApOwotICAgIHBzd2l0Y2go IXByb3h5KTsKLSAgICBpZiAoIWNwZW5kICYmICFzZWNuZGZsYWcpIHsgIC8qIG9ubHkgaWYgY21k ID0gIlJFVFIiIChwcm94eT0xKSAqLwotICAgICAgICBpZiAoZnRwY21kKGNtZDIsbG9jYWwsLTEs LTEsZnRwX3ZibSkgIT0gUFJFTElNKSB7Ci0gICAgICAgICAgICBwc3dpdGNoKDApOwotICAgICAg ICAgICAgaWYgKGNwZW5kKQotICAgICAgICAgICAgICBjYW5jZWxfcmVtb3RlKDApOwotICAgICAg ICAgICAgcHN3aXRjaCgxKTsKLSAgICAgICAgICAgIGlmIChwdGFiZmxnKQotICAgICAgICAgICAg ICBmdHBjb2RlID0gLTE7Ci0gICAgICAgICAgICBzaWduYWwoU0lHSU5ULCBvbGRpbnRyKTsKLSAg ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoY3BlbmQpCi0gICAg ICBjYW5jZWxfcmVtb3RlKDApOwotICAgIHBzd2l0Y2goIXByb3h5KTsKLSAgICBpZiAoY3BlbmQp IHsKLSNpZmRlZiBCU0RTRUxFQ1QKLSAgICAgICAgRkRfWkVSTygmbWFzayk7Ci0gICAgICAgIEZE X1NFVChjc29ja2V0LCAmbWFzayk7Ci0gICAgICAgIGlmICgobmZuZCA9IGVtcHR5KCZtYXNrLCAx MCkpIDw9IDApIHsKLSAgICAgICAgICAgIGlmIChuZm5kIDwgMCkgewotICAgICAgICAgICAgICAg IHBlcnJvcigiY2FuY2VsIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocHRhYmZs ZykKLSAgICAgICAgICAgICAgZnRwY29kZSA9IC0xOwotICAgICAgICAgICAgbG9zdHBlZXIoKTsK LSAgICAgICAgfQotI2Vsc2UgLyogQlNEU0VMRUNUICovCi0jaWZkZWYgSUJNU0VMRUNUCi0gICAg ICAgIGlmICgobmZuZCA9IGVtcHR5KCZjc29ja2V0LCAxLCAxMCkpIDw9IDApIHsKLSAgICAgICAg ICAgIGlmIChuZm5kIDwgMCkgewotICAgICAgICAgICAgICAgIHBlcnJvcigiY2FuY2VsIik7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocHRhYmZsZykKLSAgICAgICAgICAgICAgZnRw Y29kZSA9IC0xOwotICAgICAgICAgICAgbG9zdHBlZXIoKTsKLSAgICAgICAgfQotI2VuZGlmIC8q IElCTVNFTEVDVCAqLwotI2VuZGlmIC8qIEJTRFNFTEVDVCAqLwotICAgICAgICBnZXRyZXBseSgw LC0xLC0xLGZ0cF92Ym0sMCk7Ci0gICAgICAgIGdldHJlcGx5KDAsLTEsLTEsZnRwX3ZibSwwKTsK LSAgICB9Ci0gICAgaWYgKHByb3h5KQotICAgICAgcHN3aXRjaCgwKTsKLSAgICBwc3dpdGNoKDEp OwotICAgIGlmIChwdGFiZmxnKQotICAgICAgZnRwY29kZSA9IC0xOwotICAgIHNpZ25hbChTSUdJ TlQsIG9sZGludHIpOwotfQotI2VuZGlmIC8qIEZUUF9QUk9YWSAqLwotCi0jaWZkZWYgRlRQX1NF Q1VSSVRZCi0jaWZkZWYgRlRQX0dTU0FQSQotCi0jaWZkZWYgQ09NTUVOVAotLyogY2tfZ3NzX21l Y2hfa3JiNSBpcyBub3QgZGVjbGFyZWQgYW55d2hlcmUgKi8KLXN0cnVjdCB7Ci0gICAgQ09OU1Qg Z3NzX09JRF9kZXNjICogQ09OU1QgKiBtZWNoX3R5cGU7Ci0gICAgY2hhciAqc2VydmljZV9uYW1l OwotfSBnc3NfdHJpYWxzW10gPSB7Ci0gICAgeyAmY2tfZ3NzX21lY2hfa3JiNSwgImZ0cCIgfSwK LSAgICB7ICZja19nc3NfbWVjaF9rcmI1LCAiaG9zdCIgfSwKLX07Ci0jZWxzZQotLyogVGhpcyBt YXRjaGVzIHdoYXQgaXMgZGVjbGFyZWQgYWJvdmUgKi8KLXN0cnVjdCB7Ci0gICAgQ09OU1QgZ3Nz X09JRF9kZXNjICogQ09OU1QgKiBtZWNoX3R5cGU7Ci0gICAgY2hhciAqc2VydmljZV9uYW1lOwot fSBnc3NfdHJpYWxzW10gPSB7Ci0gICAgeyAmZ3NzX21lY2hfa3JiNSwgImZ0cCIgfSwKLSAgICB7 ICZnc3NfbWVjaF9rcmI1LCAiaG9zdCIgfSwKLX07Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwotCi0K LWludCBuX2dzc190cmlhbHMgPSBzaXplb2YoZ3NzX3RyaWFscykvc2l6ZW9mKGdzc190cmlhbHNb MF0pOwotI2VuZGlmIC8qIEZUUF9HU1NBUEkgKi8KLQotc3RhdGljIGludAotZnRwX2F1dGgoKSB7 Ci0gICAgZXh0ZXJuIGludCBzZXRzYWZlKCk7Ci0gICAgaW50IGogPSAwLCBuOwotI2lmZGVmIEZU UF9LUkI0Ci0gICAgY2hhciAqc2VydmljZSwgaW5zdFtJTlNUX1NaXTsKLSAgICBVTE9ORyBja3N1 bTsKLSAgICBVTE9ORyBjaGVja3N1bSA9IChVTE9ORykgZ2V0cGlkKCk7Ci0gICAgQ0hBUiBvdXRf YnVmW0ZUUF9CVUZTSVpdOwotICAgIGludCBpOwotI2Vsc2UgLyogRlRQX0tSQjQgKi8KLSNpZmRl ZiBGVFBfR1NTQVBJCi0gICAgQ0hBUiBvdXRfYnVmW0ZUUF9CVUZTSVpdOwotICAgIGludCBpOwot I2VuZGlmIC8qIEZUUF9HU1NBUEkgKi8KLSNlbmRpZiAvKiBGVFBfS1JCNCAqLwotCi0gICAgaWYg KHNzbF9mdHBfcHJveHkpICAgICAgICAgICAgICAgICAgLyogRG8gbm90IGFsbG93IEFVVEggb3Zl ciBTU0wgcHJveHkgKi8KLSAgICAgICAgcmV0dXJuKDApOwotCi0gICAgaWYgKGF1dGhfdHlwZSkK LSAgICAgIHJldHVybigxKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBhdXRoIGFscmVhZHkg c3VjY2VlZGVkICovCi0KLSAgICAvKiBUcnkgZWFjaCBhdXRoIHR5cGUgYXMgc3BlY2lmaWVkIGJ5 IHRoZSBlbmQgdXNlciAqLwotICAgIGZvciAoaiA9IDA7IGogPCA4ICYmIGZ0cF9hdXRoX3R5cGVb al0gIT0gMDsgaisrKSB7Ci0jaWZkZWYgRlRQX0dTU0FQSQotICAgICAgICBpZiAoZnRwX2F1dGhf dHlwZVtqXSA9PSBGVEFfR0s1ICYmIGNrX2dzc2FwaV9pc19pbnN0YWxsZWQoKSkgewotICAgICAg ICAgICAgbiA9IGZ0cGNtZCgiQVVUSCBHU1NBUEkiLE5VTEwsMCwwLGZ0cF92Ym0pOwotICAgICAg ICAgICAgaWYgKG4gPT0gUkVQTFlfQ09OVElOVUUpIHsKLSAgICAgICAgICAgICAgICBPTV91aW50 MzIgbWFqX3N0YXQsIG1pbl9zdGF0OwotICAgICAgICAgICAgICAgIGdzc19uYW1lX3QgdGFyZ2V0 X25hbWU7Ci0gICAgICAgICAgICAgICAgZ3NzX2J1ZmZlcl9kZXNjIHNlbmRfdG9rLCByZWN2X3Rv aywgKnRva2VuX3B0cjsKLSAgICAgICAgICAgICAgICBjaGFyIHN0YnVmW0ZUUF9CVUZTSVpdOwot ICAgICAgICAgICAgICAgIGludCBjb21jb2RlLCB0cmlhbDsKLSAgICAgICAgICAgICAgICBzdHJ1 Y3QgZ3NzX2NoYW5uZWxfYmluZGluZ3Nfc3RydWN0IGNoYW47Ci0gICAgICAgICAgICAgICAgY2hh ciAqIHJlYWxtID0gTlVMTDsKLSAgICAgICAgICAgICAgICBjaGFyIHRndFsyNTZdOwotCi0gICAg ICAgICAgICAgICAgY2hhbi5pbml0aWF0b3JfYWRkcnR5cGUgPSBHU1NfQ19BRl9JTkVUOyAvKiBP TV91aW50MzIgICovCi0gICAgICAgICAgICAgICAgY2hhbi5pbml0aWF0b3JfYWRkcmVzcy5sZW5n dGggPSA0OwotICAgICAgICAgICAgICAgIGNoYW4uaW5pdGlhdG9yX2FkZHJlc3MudmFsdWUgPSAm bXljdGxhZGRyLnNpbl9hZGRyLnNfYWRkcjsKLSAgICAgICAgICAgICAgICBjaGFuLmFjY2VwdG9y X2FkZHJ0eXBlID0gR1NTX0NfQUZfSU5FVDsgLyogT01fdWludDMyICovCi0gICAgICAgICAgICAg ICAgY2hhbi5hY2NlcHRvcl9hZGRyZXNzLmxlbmd0aCA9IDQ7Ci0gICAgICAgICAgICAgICAgY2hh bi5hY2NlcHRvcl9hZGRyZXNzLnZhbHVlID0gJmhpc2N0bGFkZHIuc2luX2FkZHIuc19hZGRyOwot ICAgICAgICAgICAgICAgIGNoYW4uYXBwbGljYXRpb25fZGF0YS5sZW5ndGggPSAwOwotICAgICAg ICAgICAgICAgIGNoYW4uYXBwbGljYXRpb25fZGF0YS52YWx1ZSA9IDA7Ci0KLSAgICAgICAgICAg ICAgICBpZiAoIXF1aWV0KQotICAgICAgICAgICAgICAgICAgcHJpbnRmKCJHU1NBUEkgYWNjZXB0 ZWQgYXMgYXV0aGVudGljYXRpb24gdHlwZVxuIik7Ci0KLSAgICAgICAgICAgICAgICByZWFsbSA9 IGNrX2tyYjVfcmVhbG1vZmhvc3QoZnRwX3VzZXJfaG9zdCk7Ci0gICAgICAgICAgICAgICAgaWYg KHJlYWxtKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKHRndCxzaXplb2YodGd0KSwi a3JidGd0LyIscmVhbG0sIkAiLHJlYWxtKTsKLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEx MCwiZnRwX2F1dGgoR1NTQVBJKSBUR1QiLHRndCwwKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg KCBrcmI1X2F1dG9nZXQgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAhKChja19rcmI1X3Rr dF9pc3ZhbGlkKE5VTEwsdGd0KSA+IDApIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg KGNrX2tyYjVfaXNfdGd0X3ZhbGlkKCkgPiAwKSkgKQotICAgICAgICAgICAgICAgICAgICAgICAg Y2tfa3JiNV9hdXRvZ2V0X1RHVChyZWFsbSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg ICAgICAgICAgLyogQmxvYiBmcm9tIGdzcy1jbGllbnQgKi8KLSAgICAgICAgICAgICAgICBmb3Ig KHRyaWFsID0gMDsgdHJpYWwgPCBuX2dzc190cmlhbHM7IHRyaWFsKyspIHsKLSAgICAgICAgICAg ICAgICAgICAgLyogZnRwQGhvc3RuYW1lIGZpcnN0LCB0aGUgaG9zdEBob3N0bmFtZSAqLwotICAg ICAgICAgICAgICAgICAgICAvKiB0aGUgVjUgR1NTQVBJIGJpbmRpbmcgY2Fub25pY2FsaXplcyB0 aGlzIGZvciB1cy4uLiAqLwotICAgICAgICAgICAgICAgICAgICBja21ha21zZyhzdGJ1ZixGVFBf QlVGU0laLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NfdHJpYWxzW3RyaWFsXS5z ZXJ2aWNlX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJAIiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZnRwX3VzZXJfaG9zdCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTlVMTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAg ICAgICAgICAgICBpZiAoZnRwX2RlYikKLSAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0 ZGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBdXRoZW50aWNhdGluZyB0byA8 JXM+Li4uXG4iLCBzdGJ1Zik7Ci0gICAgICAgICAgICAgICAgICAgIHNlbmRfdG9rLnZhbHVlID0g c3RidWY7Ci0gICAgICAgICAgICAgICAgICAgIHNlbmRfdG9rLmxlbmd0aCA9IHN0cmxlbihzdGJ1 Zik7Ci0gICAgICAgICAgICAgICAgICAgIG1hal9zdGF0ID0gZ3NzX2ltcG9ydF9uYW1lKCZtaW5f c3RhdCwgJnNlbmRfdG9rLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBnc3NfbnRfc2VydmljZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmdGFyZ2V0X25hbWUKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1hal9z dGF0ICE9IEdTU19TX0NPTVBMRVRFKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2dz c19lcnJvcihtYWpfc3RhdCwgbWluX3N0YXQsICJwYXJzaW5nIG5hbWUiKTsKLSAgICAgICAgICAg ICAgICAgICAgICAgIHNlY3VyZV9lcnJvcigibmFtZSBwYXJzZWQgPCVzPlxuIiwgc3RidWYpOwot ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICAgICAgdG9rZW5fcHRyID0gR1NTX0NfTk9fQlVGRkVSOwotICAgICAg ICAgICAgICAgICAgICBnY29udGV4dCA9IEdTU19DX05PX0NPTlRFWFQ7IC8qIHN0cnVjdHVyZSBj b3B5ICovCi0KLSAgICAgICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKGZ0cF9kZWIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJy LCAiY2FsbGluZyBnc3NfaW5pdF9zZWNfY29udGV4dFxuIik7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBtYWpfc3RhdCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGdzc19pbml0X3NlY19j b250ZXh0KCZtaW5fc3RhdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgR1NTX0NfTk9fQ1JFREVOVElBTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmdjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdzc19PSUQpICoKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NfdHJpYWxzW3RyaWFsXS5tZWNoX3R5 cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTU19D X01VVFVBTF9GTEFHIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgR1NTX0NfUkVQTEFZX0ZMQUcgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoZnRwX2NmdyA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBHU1NfQ19ERUxFR19GTEFHIDogMCksCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGFubmVsIGJpbmRpbmdzICovCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa3JiNV9kX25vX2Fk ZHJlc3NlcyA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEdTU19DX05PX0NIQU5ORUxfQklORElOR1MgOgotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmY2hhbiksCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbl9wdHIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICAgIC8qIGlnbm9yZSBtZWNoIHR5cGUg Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNlbmRf dG9rLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM LCAgICAvKiBpZ25vcmUgcmV0X2ZsYWdzICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE5VTEwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsgICAgICAgLyogaWdub3JlIHRpbWVfcmVjICovCi0KLSAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChtYWpfc3RhdCAhPSBHU1NfU19DT01QTEVURSAmJgotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1hal9zdGF0ICE9IEdTU19TX0NPTlRJTlVFX05FRURFRCkg ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmlhbCA9PSBuX2dzc190cmlhbHMt MSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfZ3NzX2Vycm9yKG1hal9zdGF0 LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluX3N0YXQs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5pdGlhbGl6 aW5nIGNvbnRleHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzc19yZWxlYXNlX25hbWUoJm1pbl9z dGF0LCAmdGFyZ2V0X25hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1heWJl IHdlIG1pc3NlZCBvbiB0aGUgc2VydmljZSBuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ290byBvdXRlcl9sb29wOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKHNlbmRfdG9rLmxlbmd0aCAhPSAwKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IGxlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXBseV9wYXJzZSA9ICJBREFUPSI7IC8qIGZvciBmdHBjbWQoKSBsYXRlciAqLwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxlbiA9IEZUUF9CVUZTSVo7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAga2Vycm9yID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl4X2Vu Y29kZShzZW5kX3Rvay52YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBvdXRfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNlbmRfdG9rLmxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFJBRElYX0VOQ09ERQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtlcnJvcikgIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIkJhc2UgNjQgZW5jb2RpbmcgZmFpbGVkOiAlc1xuIiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpeF9lcnJvcihrZXJy b3IpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZ290byBnc3NfY29tcGxldGVfbG9vcDsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tY29k ZSA9IGZ0cGNtZCgiQURBVCIsb3V0X2J1ZiwtMSwtMSwwKTsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoY29tY29kZSAhPSBSRVBMWV9DT01QTEVURQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmJiBjb21jb2RlICE9IFJFUExZX0NPTlRJTlVFIC8qICgzMzUpICovCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgewotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZiAodHJpYWwgPT0gbl9nc3NfdHJpYWxzLTEpIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiR1NTQVBJIEFEQVQgZmFpbGVk XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvcmNlIG91dCBv ZiBsb29wICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWpfc3RhdCA9 IEdTU19TX0ZBSUxVUkU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBCYWNrb2ZmIHRvIHRoZSB2MSBnc3NhcGkgaXMgc3RpbGwgcG9zc2libGUuCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VuZCBhIG5ldyBBVVRIIGNvbW1hbmQuICBJ ZiB0aGF0IGZhaWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0 ZSB0aGUgbG9vcC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ0cGNtZCgiQVVUSCBHU1NBUEkiLE5VTEwsMCww LGZ0cF92Ym0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBSRVBMWV9D T05USU5VRSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50Zihz dGRlcnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHU1NBUEkgQURBVCBmYWls ZWQsIEFVVEggcmVzdGFydCBmYWlsZWRcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogZm9yY2Ugb3V0IG9mIGxvb3AgKi8KLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG1hal9zdGF0ID0gR1NTX1NfRkFJTFVSRTsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91 dGVyX2xvb3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmICghcmVwbHlfcGFyc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi Tm8gYXV0aGVudGljYXRpb24gZGF0YSByZWNlaXZlZCBmcm9tIHNlcnZlclxuIik7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYWpfc3RhdCA9PSBHU1NfU19DT01QTEVURSkg ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuLi5idXQgbm8gbW9y ZSB3YXMgbmVlZGVkXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdv dG8gZ3NzX2NvbXBsZXRlX2xvb3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2dzc19lcnJv cihtYWpfc3RhdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1pbl9zdGF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIm5vIHJlcGx5LCBodWg/IgotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdvdG8gZ3NzX2NvbXBsZXRlX2xvb3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGVuID0gRlRQX0JVRlNJWjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBrZXJyb3IgPSByYWRpeF9lbmNvZGUocmVwbHlfcGFyc2Usb3V0X2J1ZixpLCZsZW4sCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBRElYX0RFQ09E RSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtlcnJvcikgewotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiQmFzZSA2NCBkZWNvZGluZyBmYWlsZWQ6ICVzXG4iLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl4X2Vycm9yKGtlcnJv cikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGdzc19jb21wbGV0ZV9s b29wOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIGV2ZXJ5dGhpbmcgd29ya2VkICovCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgdG9rZW5fcHRyID0gJnJlY3ZfdG9rOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJlY3ZfdG9rLnZhbHVlID0gb3V0X2J1ZjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZWN2X3Rvay5sZW5ndGggPSBsZW47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu dWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBnZXQgb3V0IG9mIGxvb3AgY2xl YW4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzX2NvbXBsZXRlX2xvb3A6Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgdHJpYWwgPSBuX2dzc190cmlhbHMtMTsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBnc3NfcmVsZWFzZV9idWZmZXIoJm1pbl9zdGF0LCAmc2VuZF90 b2spOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzc19yZWxlYXNlX25hbWUoJm1pbl9z dGF0LCAmdGFyZ2V0X25hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0 ZXJfbG9vcDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg fSB3aGlsZSAobWFqX3N0YXQgPT0gR1NTX1NfQ09OVElOVUVfTkVFREVEKTsKLQotICAgICAgICAg ICAgICAgICAgb3V0ZXJfbG9vcDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1hal9zdGF0ID09 IEdTU19TX0NPTVBMRVRFKQotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobWFqX3N0YXQgPT0gR1NTX1NfQ09NUExFVEUp IHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJHU1NBUEkgYXV0aGVudGljYXRpb24gc3Vj Y2VlZGVkXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlfcGFyc2UgPSBOVUxMOwotICAg ICAgICAgICAgICAgICAgICBhdXRoX3R5cGUgPSAiR1NTQVBJIjsKLSAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKDEpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg ICAgIGZwcmludGYoc3RkZXJyLCAiR1NTQVBJIGF1dGhlbnRpY2F0aW9uIGZhaWxlZFxuIik7Ci0g ICAgICAgICAgICAgICAgICAgIHJlcGx5X3BhcnNlID0gTlVMTDsKLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChmdHBfZGViKQotICAg ICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiR1NTQVBJIHJlamVjdGVkIGFzIGFuIGF1dGhl bnRpY2F0aW9uIHR5cGVcbiIpOwotICAgICAgICAgICAgICAgIGlmIChmdHBjb2RlID09IDUwMCB8 fCBmdHBjb2RlID09IDUwMikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAg ICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLyogRlRQX0dTU0FQSSAqLwotI2lmZGVmIEZUUF9T UlAKLSAgICAgICAgaWYgKGZ0cF9hdXRoX3R5cGVbal0gPT0gRlRBX1NSUCAmJiBja19zcnBfaXNf aW5zdGFsbGVkKCkpIHsKLSAgICAgICAgICAgIGlmIChzcnBfZnRwX2F1dGgoZnRwX3VzZXJfaG9z dCxOVUxMLE5VTEwpKQotICAgICAgICAgICAgICByZXR1cm4oMSk7Ci0gICAgICAgICAgICBlbHNl IGlmIChmdHBjb2RlID09IDUwMCB8fCBmdHBjb2RlID09IDUwMikKLSAgICAgICAgICAgICAgcmV0 dXJuKDApOwotICAgICAgICB9Ci0jZW5kaWYgLyogRlRQX1NSUCAqLwotI2lmZGVmIEZUUF9LUkI0 Ci0gICAgICAgIGlmIChmdHBfYXV0aF90eXBlW2pdID09IEZUQV9LNCAmJiBja19rcmI0X2lzX2lu c3RhbGxlZCgpKSB7Ci0gICAgICAgICAgICBuID0gZnRwY21kKCJBVVRIIEtFUkJFUk9TX1Y0IixO VUxMLDAsMCxmdHBfdmJtKTsKLSAgICAgICAgICAgIGlmIChuID09IFJFUExZX0NPTlRJTlVFKSB7 Ci0gICAgICAgICAgICAgICAgY2hhciB0Z3RbNCpSRUFMTV9TWisxXTsKLSAgICAgICAgICAgICAg ICBpbnQgcmM7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXF1aWV0KQotICAgICAgICAgICAgICAg ICAgcHJpbnRmKCJLRVJCRVJPU19WNCBhY2NlcHRlZCBhcyBhdXRoZW50aWNhdGlvbiB0eXBlXG4i KTsKLSAgICAgICAgICAgICAgICBja3N0cm5jcHkoaW5zdCwgKGNoYXIgKikga3JiX2dldF9waG9z dChmdHBfdXNlcl9ob3N0KSxJTlNUX1NaKTsKLSAgICAgICAgICAgICAgICBja3N0cm5jcHkoZnRw X3JlYWxtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKWNrX2tyYjRfcmVhbG1v Zmhvc3QoZnRwX3VzZXJfaG9zdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFJFQUxNX1Na Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0KLSAgICAgICAgICAgICAgICBja21ha21z Zyh0Z3Qsc2l6ZW9mKHRndCksImtyYnRndC4iLGZ0cF9yZWFsbSwiQCIsZnRwX3JlYWxtKTsKLSAg ICAgICAgICAgICAgICByYyA9IGNrX2tyYjRfdGt0X2lzdmFsaWQodGd0KTsKLQotICAgICAgICAg ICAgICAgIGlmIChyYyA8PSAwICYmIGtyYjRfYXV0b2dldCkKLSAgICAgICAgICAgICAgICAgIGNr X2tyYjRfYXV0b2dldF9UR1QoZnRwX3JlYWxtKTsKLQotICAgICAgICAgICAgICAgIHNlcnZpY2Ug PSAiZnRwIjsKLSAgICAgICAgICAgICAgICBrZXJyb3IgPSBrcmJfbWtfcmVxKCZmdHBfdGt0LHNl cnZpY2UsaW5zdCxmdHBfcmVhbG0sY2hlY2tzdW0pOwotICAgICAgICAgICAgICAgIGlmIChrZXJy b3IgPT0gS0RDX1BSX1VOS05PV04pIHsKLSAgICAgICAgICAgICAgICAgICAgc2VydmljZSA9ICJy Y21kIjsKLSAgICAgICAgICAgICAgICAgICAga2Vycm9yID0ga3JiX21rX3JlcSgmZnRwX3RrdCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3QsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZnRwX3JlYWxtLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNoZWNrc3VtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGtl cnJvcikKLSAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiS2VyYmVyb3MgVjQga3Ji X21rX3JlcSBmYWlsZWQ6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICBrcmJfZ2V0 X2Vycl90ZXh0KGtlcnJvcikpOwotICAgICAgICAgICAgICAgIGlmICgha2Vycm9yKSB7Ci0gICAg ICAgICAgICAgICAgICAgIGtlcnJvciA9IGtyYl9nZXRfY3JlZChzZXJ2aWNlLCBpbnN0LCBmdHBf cmVhbG0sJmZ0cF9jcmVkKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGtlcnJvcikKLSAgICAg ICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIktlcmJlcm9zIFY0IGtyYl9nZXRfY3Jl ZCBmYWlsZWQ6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3JiX2dldF9l cnJfdGV4dChrZXJyb3IpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYg KCFrZXJyb3IpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHJjOwotICAgICAgICAgICAgICAg ICAgICByYyA9IGRlc19rZXlfc2NoZWQoZnRwX2NyZWQuc2Vzc2lvbiwgZnRwX3NjaGVkKTsKLSAg ICAgICAgICAgICAgICAgICAgaWYgKHJjID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg IHByaW50ZigiP0ludmFsaWQgREVTIGtleSBzcGVjaWZpZWQgaW4gY3JlZGVudGlhbHNcclxuIik7 Ci0gICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cF9hdXRoIiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgREVTIEtleSBzcGVjaWZpZWQgaW4gY3JlZGVu dGlhbHMiLDApOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCByYyA9PSAtMiApIHsK LSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1dlYWsgREVTIGtleSBzcGVjaWZpZWQg aW4gY3JlZGVudGlhbHNcclxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEw LCJmdHBfYXV0aCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2VhayBERVMgS2V5 IHNwZWNpZmllZCBpbiBjcmVkZW50aWFscyIsMCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxz ZSBpZiAoIHJjICE9IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9ERVMg S2V5IFNjaGVkdWxlIG5vdCBzZXQgYnkgY3JlZGVudGlhbHNcclxuIik7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHBfYXV0aCIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiREVTIEtleSBTY2hlZHVsZSBub3Qgc2V0IGJ5IGNyZWRlbnRpYWxzIiwwKTsKLSAg ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXBseV9wYXJzZSA9ICJB REFUPSI7Ci0gICAgICAgICAgICAgICAgICAgIGkgPSBGVFBfQlVGU0laOwotICAgICAgICAgICAg ICAgICAgICBrZXJyb3IgPSByYWRpeF9lbmNvZGUoZnRwX3RrdC5kYXQsIG91dF9idWYsIGZ0cF90 a3QubGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmks IFJBRElYX0VOQ09ERSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChrZXJyb3IpIHsKLSAgICAg ICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQmFzZSA2NCBlbmNvZGluZyBmYWls ZWQ6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpeF9lcnJvcihr ZXJyb3IpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8ga3JiNF9lcnI7Ci0gICAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGkgPiBGVFBfQlVGU0laIC0g NikKLSAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9BREFUIGRhdGEgdG9vIGxvbmdcbiIp OwotICAgICAgICAgICAgICAgICAgICBpZiAoZnRwY21kKCJBREFUIixvdXRfYnVmLC0xLC0xLDAp ICE9Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVBMWV9DT01QTEVURSkgewotICAgICAgICAg ICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJLZXJiZXJvcyBWNCBhdXRoZW50aWNhdGlv biBmYWlsZWRcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBrcmI0X2VycjsKLSAg ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIXJlcGx5X3BhcnNl KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIk5vIGF1dGhlbnRpY2F0aW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBz ZXJ2ZXJcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBrcmI0X2VycjsKLSAgICAg ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpID0gc2l6ZW9mKG91dF9idWYp OwotICAgICAgICAgICAgICAgICAgICBrZXJyb3IgPQotICAgICAgICAgICAgICAgICAgICAgIHJh ZGl4X2VuY29kZShyZXBseV9wYXJzZSwgb3V0X2J1ZiwgMCwgJmksIFJBRElYX0RFQ09ERSk7Ci0g ICAgICAgICAgICAgICAgICAgIGlmIChrZXJyb3IpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg IGZwcmludGYoc3RkZXJyLCAiQmFzZSA2NCBkZWNvZGluZyBmYWlsZWQ6ICVzXG4iLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpeF9lcnJvcihrZXJyb3IpKTsKLSAgICAgICAg ICAgICAgICAgICAgICAgIGdvdG8ga3JiNF9lcnI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICAgICAga2Vycm9yID0ga3JiX3JkX3NhZmUob3V0X2J1ZiwgaSwKLSNpZmRl ZiBLUkI1MjQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRwX2Ny ZWQuc2Vzc2lvbiwKLSNlbHNlIC8qIEtSQjUyNCAqLwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmZnRwX2NyZWQuc2Vzc2lvbiwKLSNlbmRpZiAvKiBLUkI1MjQgKi8K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhpc2N0bGFkZHIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZteWN0bGFkZHIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmdHBfbXNnX2RhdGEKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAg ICAgaWYgKGtlcnJvcikgewotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs ICJLZXJiZXJvcyBWNCBrcmJfcmRfc2FmZSBmYWlsZWQ6ICVzXG4iLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBrcmJfZ2V0X2Vycl90ZXh0KGtlcnJvcikpOwotICAgICAgICAgICAg ICAgICAgICAgICAgZ290byBrcmI0X2VycjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg ICAgICAgICAgICAgICAgIC8qIGZldGNoIHRoZSAobW9kaWZpZWQpIGNoZWNrc3VtICovCi0gICAg ICAgICAgICAgICAgICAgIG1lbWNweSgmY2tzdW0sIGZ0cF9tc2dfZGF0YS5hcHBfZGF0YSwgc2l6 ZW9mKGNrc3VtKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChudG9obChja3N1bSkgPT0gY2hl Y2tzdW0gKyAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnRwX3ZibSkKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJLZXJiZXJvcyBWNCBhdXRoZW50aWNhdGlvbiBz dWNjZWVkZWRcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlfcGFyc2UgPSBOVUxM OwotICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF90eXBlID0gIktFUkJFUk9TX1Y0IjsKLSAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybigxKTsKLSAgICAgICAgICAgICAgICAgICAgfSBl bHNlCi0gICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiS2VyYmVyb3MgVjQgbXV0dWFsIGF1dGhlbnRpY2F0aW9uIGZhaWxl ZFxuIik7Ci0gICAgICAgICAgICAgICAgICBrcmI0X2VycjoKLSAgICAgICAgICAgICAgICAgICAg cmVwbHlfcGFyc2UgPSBOVUxMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZ0cF9kZWIpCi0JCSAgZnByaW50ZihzdGRlcnIsCi0g ICAgICAgICAgICAgICAgICAgICAgIktFUkJFUk9TX1Y0IHJlamVjdGVkIGFzIGFuIGF1dGhlbnRp Y2F0aW9uIHR5cGVcbiIpOwotICAgICAgICAgICAgICAgIGlmIChmdHBjb2RlID09IDUwMCB8fCBm dHBjb2RlID09IDUwMikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICAg ICAgfQotICAgICAgICB9Ci0jZW5kaWYgLyogRlRQX0tSQjQgKi8KLSNpZmRlZiBDS19TU0wKLSAg ICAgICAgaWYgKGZ0cF9hdXRoX3R5cGVbal0gPT0gRlRBX1RMUyAmJiBja19zc2xlYXlfaXNfaW5z dGFsbGVkKCkpIHsKLSNpZmRlZiBGVFBIT1NUCi0gICAgICAgICAgICBpZiAoIWhvc3RjbWQpIHsK LSAgICAgICAgICAgICAgICBmdHBjbWQoIkhPU1QiLGZ0cF91c2VyX2hvc3QsMCwwLDApOwotICAg ICAgICAgICAgICAgIGhvc3RjbWQgPSAxOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIEZUUEhP U1QgKi8KLSAgICAgICAgICAgIG4gPSBmdHBjbWQoIkFVVEggVExTIixOVUxMLDAsMCxmdHBfdmJt KTsKLSAgICAgICAgICAgIGlmIChuICE9IFJFUExZX0NPTVBMRVRFKQotICAgICAgICAgICAgICBu ID0gZnRwY21kKCJBVVRIIFRMUy1QIixOVUxMLDAsMCxmdHBfdmJtKTsKLSAgICAgICAgICAgIGlm IChuID09IFJFUExZX0NPTVBMRVRFKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFxdWlldCkKLSAg ICAgICAgICAgICAgICAgIHByaW50ZigiVExTIGFjY2VwdGVkIGFzIGF1dGhlbnRpY2F0aW9uIHR5 cGVcbiIpOwotCi0gICAgICAgICAgICAgICAgYXV0aF90eXBlID0gIlRMUyI7Ci0gICAgICAgICAg ICAgICAgc3NsX2F1dGgoKTsKLSAgICAgICAgICAgICAgICBpZiAoc3NsX2Z0cF9hY3RpdmVfZmxh ZyApIHsKLSAgICAgICAgICAgICAgICAgICAgZnRwX2RwbCA9IEZQTF9DTFI7Ci0gICAgICAgICAg ICAgICAgICAgIGZ0cF9jcGwgPSBGUExfUFJWOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4o MSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50 ZihzdGRlcnIsIlRMUyBhdXRoZW50aWNhdGlvbiBmYWlsZWRcbiIpOwotICAgICAgICAgICAgICAg ICAgICBhdXRoX3R5cGUgPSBOVUxMOwotI2lmZGVmIFRDUElQTElCCi0gICAgICAgICAgICAgICAg ICAgIHNvY2tldF9jbG9zZShjc29ja2V0KTsKLSNlbHNlIC8qIFRDUElQTElCICovCi0jaWZkZWYg VVNFX1NIVVRET1dOCi0gICAgICAgICAgICAgICAgICAgIHNodXRkb3duKGNzb2NrZXQsIDErMSk7 Ci0jZW5kaWYgLyogVVNFX1NIVVRET1dOICovCi0gICAgICAgICAgICAgICAgICAgIGNsb3NlKGNz b2NrZXQpOwotI2VuZGlmIC8qIFRDUElQTElCICovCi0gICAgICAgICAgICAgICAgICAgIGNzb2Nr ZXQgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZ0cF9ob29rdXAoZnRwX3VzZXJfaG9z dCxmdHBfcG9ydCwwKSA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgIHJldHVybigwKTsK LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg IGlmIChmdHBfZGViKQotCQkgIGZwcmludGYoc3RkZXJyLCJUTFMgcmVqZWN0ZWQgYXMgYW4gYXV0 aGVudGljYXRpb24gdHlwZVxuIik7Ci0gICAgICAgICAgICAgICAgaWYgKGZ0cGNvZGUgPT0gNTAw IHx8IGZ0cGNvZGUgPT0gNTAyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGZ0cF9hdXRoX3R5cGVbal0gPT0gRlRB X1NTTCAmJiBja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkpIHsKLSNpZmRlZiBGVFBIT1NUCi0gICAg ICAgICAgICBpZiAoIWhvc3RjbWQpIHsKLSAgICAgICAgICAgICAgICBmdHBjbWQoIkhPU1QiLGZ0 cF91c2VyX2hvc3QsMCwwLDApOwotICAgICAgICAgICAgICAgIGhvc3RjbWQgPSAxOwotICAgICAg ICAgICAgfQotI2VuZGlmIC8qIEZUUEhPU1QgKi8KLSAgICAgICAgICAgIG4gPSBmdHBjbWQoIkFV VEggU1NMIixOVUxMLDAsMCxmdHBfdmJtKTsKLSAgICAgICAgICAgIGlmIChuID09IFJFUExZX0NP TlRJTlVFIHx8IG4gPT0gUkVQTFlfQ09NUExFVEUpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXF1 aWV0KQotICAgICAgICAgICAgICAgICAgcHJpbnRmKCJTU0wgYWNjZXB0ZWQgYXMgYXV0aGVudGlj YXRpb24gdHlwZVxuIik7Ci0gICAgICAgICAgICAgICAgYXV0aF90eXBlID0gIlNTTCI7Ci0gICAg ICAgICAgICAgICAgc3NsX2F1dGgoKTsKLSAgICAgICAgICAgICAgICBpZiAoc3NsX2Z0cF9hY3Rp dmVfZmxhZykgewotICAgICAgICAgICAgICAgICAgICBmdHBfZHBsID0gRlBMX1BSVjsKLSAgICAg ICAgICAgICAgICAgICAgZnRwX2NwbCA9IEZQTF9QUlY7Ci0gICAgICAgICAgICAgICAgICAgIHNl dHByb3RidWYoMTw8MjApOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4oMSk7Ci0gICAgICAg ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIlNT TCBhdXRoZW50aWNhdGlvbiBmYWlsZWRcbiIpOwotICAgICAgICAgICAgICAgICAgICBhdXRoX3R5 cGUgPSBOVUxMOwotI2lmZGVmIFRDUElQTElCCi0gICAgICAgICAgICAgICAgICAgIHNvY2tldF9j bG9zZShjc29ja2V0KTsKLSNlbHNlIC8qIFRDUElQTElCICovCi0jaWZkZWYgVVNFX1NIVVRET1dO Ci0gICAgICAgICAgICAgICAgICAgIHNodXRkb3duKGNzb2NrZXQsIDErMSk7Ci0jZW5kaWYgLyog VVNFX1NIVVRET1dOICovCi0gICAgICAgICAgICAgICAgICAgIGNsb3NlKGNzb2NrZXQpOwotI2Vu ZGlmIC8qIFRDUElQTElCICovCi0gICAgICAgICAgICAgICAgICAgIGNzb2NrZXQgPSAtMTsKLSAg ICAgICAgICAgICAgICAgICAgaWYgKGZ0cF9ob29rdXAoZnRwX3VzZXJfaG9zdCxmdHBfcG9ydCww KSA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgICAg ICAgICB9Ci0JICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZ0cF9kZWIpCi0JCSAg ZnByaW50ZihzdGRlcnIsICJTU0wgcmVqZWN0ZWQgYXMgYW4gYXV0aGVudGljYXRpb24gdHlwZVxu Iik7Ci0gICAgICAgICAgICAgICAgaWYgKGZ0cGNvZGUgPT0gNTAwIHx8IGZ0cGNvZGUgPT0gNTAy KQotCQkgIHJldHVybigwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIENL X1NTTCAqLwotICAgICAgICAvKiBPdGhlciBhdXRoIHR5cGVzIGdvIGhlcmUgLi4uICovCi0gICAg fSAvKiBmb3IgKGo7OykgKi8KLSAgICByZXR1cm4oMCk7Ci19Ci0jZW5kaWYgLyogRlRQX1NFQ1VS SVRZICovCi0KLXN0YXRpYyBpbnQKLSNpZmRlZiBDS19BTlNJQwotc2V0cHJvdGJ1Zih1bnNpZ25l ZCBpbnQgc2l6ZSkKLSNlbHNlCi1zZXRwcm90YnVmKHNpemUpIHVuc2lnbmVkIGludCBzaXplOwot I2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBzZXRwcm90YnVmICovIHsKLSAgICBpZiAodWNidWYp Ci0gICAgICBmcmVlKHVjYnVmKTsKLSAgICB1Y2J1ZiA9IE5VTEw7Ci0gICAgdWNidWZzaXogPSAw OwotICAgIGFjdHVhbGJ1ZiA9IHNpemU7Ci0gICAgd2hpbGUgKCh1Y2J1ZiA9IChDSEFSICopbWFs bG9jKGFjdHVhbGJ1ZikpID09IE5VTEwpIHsKLSAgICAgICAgaWYgKGFjdHVhbGJ1ZikKLSAgICAg ICAgICBhY3R1YWxidWYgLz0gMjsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHJldHVybigwKTsK LSAgICB9Ci0gICAgdWNidWZzaXogPSBhY3R1YWxidWYgLSBGVURHRV9GQUNUT1I7Ci0gICAgZGVi dWcoRjEwMSwic2V0cHJvdGJ1ZiB1Y2J1ZnNpeiIsIiIsdWNidWZzaXopOwotICAgIGlmICh1Y2J1 ZnNpeiA8IDEyOCkgewotICAgICAgICBwcmludGYoIldBUk5JTkc6IHRpbnkgdWNidWZzaXo6ICVk XG4iLHVjYnVmc2l6KTsKLSAgICB9IGVsc2UgaWYgKHVjYnVmc2l6IDwgMCkgewotICAgICAgICBw cmludGYoIkVSUk9SOiB1Y2J1ZiBhbGxvY2F0aW9uIGZhaWx1cmVcbiIpOwotICAgICAgICByZXR1 cm4oLTEpOwotICAgIH0KLSAgICBtYXhidWYgPSBhY3R1YWxidWY7Ci0gICAgcmV0dXJuKDEpOwot fQotCi1zdGF0aWMgaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXNldHBic3oodW5zaWduZWQgaW50IHNp emUpCi0jZWxzZQotc2V0cGJzeihzaXplKSB1bnNpZ25lZCBpbnQgc2l6ZTsKLSNlbmRpZiAvKiBD S19BTlNJQyAqLwotLyogc2V0cGJzeiAqLyB7Ci0gICAgaWYgKCFzZXRwcm90YnVmKHNpemUpKSB7 Ci0gICAgICAgIHBlcnJvcigiP0Vycm9yIHdoaWxlIHRyeWluZyB0byBtYWxsb2MgUFJPVCBidWZm ZXI6Iik7Ci0jaWZkZWYgRlRQX1NSUAotICAgICAgICBzcnBfcmVzZXQoKTsKLSNlbmRpZiAvKiBG VFBfU1JQICovCi0gICAgICAgIGZ0cGNsb3NlKCk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAg fQotICAgIHJlcGx5X3BhcnNlID0gIlBCU1o9IjsKLSAgICBja21ha21zZyhmdHBjbWRidWYsRlRQ X0JVRlNJWiwiUEJTWiAiLAotI2lmZGVmIENLX1NTTAotICAgICAgICAgICAgIHNzbF9mdHBfYWN0 aXZlX2ZsYWcgPyAiMCIgOgotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICAgICAgIGNrdWl0 b2EoYWN0dWFsYnVmKSxOVUxMLE5VTEwpOwotICAgIGlmIChmdHBjbWQoZnRwY21kYnVmLE5VTEws MCwwLDApICE9IFJFUExZX0NPTVBMRVRFKSB7Ci0gICAgICAgIGlmIChjb25uZWN0ZWQpIHsKLSAg ICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBuZWdvdGlhdGUgUFJPVCBidWZmZXIgc2l6ZSB3 aXRoIEZUUCBzZXJ2ZXJcbiIpOwotICAgICAgICAgICAgZnRwY2xvc2UoKTsKLSAgICAgICAgfQot ICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBpZiAocmVwbHlfcGFyc2UpIHsKLSAgICAg ICAgaWYgKChtYXhidWYgPSAodW5zaWduZWQgaW50KSBhdG9sKHJlcGx5X3BhcnNlKSkgPiBhY3R1 YWxidWYpCi0gICAgICAgICAgbWF4YnVmID0gYWN0dWFsYnVmOwotICAgIH0gZWxzZQotICAgICAg bWF4YnVmID0gYWN0dWFsYnVmOwotICAgIHVjYnVmc2l6ID0gbWF4YnVmIC0gRlVER0VfRkFDVE9S OwotICAgIGRlYnVnKEYxMDEsInNldHBic3ogdWNidWZzaXoiLCIiLHVjYnVmc2l6KTsgICAgCi0g ICAgcmVwbHlfcGFyc2UgPSBOVUxMOwotICAgIHJldHVybigwKTsKLX0KLQotc3RhdGljIFZPSUQK LWNhbmNlbF9yZW1vdGUoZGluKSBpbnQgZGluOyB7Ci0gICAgQ0hBUiBidWZbRlRQX0JVRlNJWl07 Ci0gICAgaW50IHgsIG5mbmQ7Ci0jaWZkZWYgQlNEU0VMRUNUCi0gICAgZmRfc2V0IG1hc2s7Ci0j ZW5kaWYgLyogQlNEU0VMRUNUICovCi0jaWZkZWYgSUJNU0VMRUNUCi0gICAgaW50IGZkc1syXSwg ZmRjbnQgPSAwOwotI2VuZGlmIC8qIElCTVNFTEVDVCAqLwotI2lmZGVmIERFQlVHCi0gICAgZXh0 ZXJuIGludCBkZWJ0aW07Ci0gICAgaW50IHhkZWJ0aW07Ci0gICAgeGRlYnRpbSA9IGRlYnRpbTsK LSAgICBkZWJ0aW0gPSAxOwotI2VuZGlmIC8qIERFQlVHICovCi0gICAgZGVidWcoRjEwMCwiZnRw IGNhbmNlbF9yZW1vdGUgZW50cnkiLCIiLDApOwotI2lmZGVmIENLX1NTTAotICAgIGlmIChzc2xf ZnRwX2FjdGl2ZV9mbGFnKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFNlbmQgVGVsbmV0IElQ LCBUZWxuZXQgRE0gYnV0IGRvIHNvIGlubGluZSBhbmQgd2l0aGluIHRoZQotICAgICAgICAgKiBU TFMgY2hhbm5lbAotICAgICAgICAgKi8KLSAgICAgICAgaW50IGNvdW50LCBlcnJvcjsKLQotICAg ICAgICBidWZbMF0gPSBJQUM7Ci0gICAgICAgIGJ1ZlsxXSA9IFROX0lQOwotICAgICAgICBidWZb Ml0gPSBJQUM7Ci0gICAgICAgIGJ1ZlszXSA9IFROX0RNOwotICAgICAgICBidWZbNF0gPSBOVUw7 Ci0KLSAgICAgICAgY291bnQgPSBTU0xfd3JpdGUoc3NsX2Z0cF9jb24sIGJ1ZiwgNCk7Ci0gICAg ICAgIGRlYnVnKEYxMTEsImZ0cCBjYW5jZWxfcmVtb3RlIiwiU1NMX3dyaXRlKElBQyBJUCBJQUMg RE0pIixjb3VudCk7Ci0gICAgICAgIGVycm9yID0gU1NMX2dldF9lcnJvcihzc2xfZnRwX2Nvbixj b3VudCk7Ci0gICAgICAgIGRlYnVnKEYxMTEsImZ0cCBjYW5jZWxfcmVtb3RlIiwiU1NMX2dldF9l cnJvcigpIixlcnJvcik7Ci0gICAgICAgIHN3aXRjaCAoZXJyb3IpIHsKLSAgICAgICAgICBjYXNl IFNTTF9FUlJPUl9OT05FOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBTU0xf RVJST1JfV0FOVF9XUklURToKLSAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6Ci0g ICAgICAgICAgY2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoKLSNpZmRlZiBOVAotICAgICAgICAgICAg ewotICAgICAgICAgICAgICAgIGludCBnbGUgPSBHZXRMYXN0RXJyb3IoKTsKLSAgICAgICAgICAg IH0KLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfWDUwOV9M T09LVVA6Ci0gICAgICAgICAgY2FzZSBTU0xfRVJST1JfU1NMOgotICAgICAgICAgIGNhc2UgU1NM X0VSUk9SX1pFUk9fUkVUVVJOOgotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBsb3N0 cGVlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0jZW5k aWYgLyogQ0tfU1NMICovCi0gICAgewotICAgICAgICAvKgotICAgICAgICAgKiBzZW5kIElBQyBp biB1cmdlbnQgbW9kZSBpbnN0ZWFkIG9mIERNIGJlY2F1c2UgNC4zQlNEIHBsYWNlcyBvb2IgbWFy awotICAgICAgICAgKiBhZnRlciB1cmdlbnQgYnl0ZSByYXRoZXIgdGhhbiBiZWZvcmUgYXMgaXMg cHJvdG9jb2wgbm93LgotICAgICAgICAgKi8KLSAgICAgICAgYnVmWzBdID0gSUFDOwotICAgICAg ICBidWZbMV0gPSBUTl9JUDsKLSAgICAgICAgYnVmWzJdID0gSUFDOwotICAgICAgICBidWZbM10g PSBOVUw7Ci0gICAgICAgIGlmICgoeCA9IHNlbmQoY3NvY2tldCwgKFNFTkRBUkcyVFlQRSlidWYs IDMsIE1TR19PT0IpKSAhPSAzKQotICAgICAgICAgIHBlcnJvcigiY2FuY2VsIik7Ci0gICAgICAg IGRlYnVnKEYxMDEsImZ0cCBjYW5jZWxfcmVtb3RlIHNlbmQgMSIsIiIseCk7Ci0gICAgICAgIGJ1 ZlswXSA9IFROX0RNOwotICAgICAgICB4ID0gc2VuZChjc29ja2V0LChTRU5EQVJHMlRZUEUpYnVm LDEsMCk7Ci0gICAgICAgIGRlYnVnKEYxMDEsImZ0cCBjYW5jZWxfcmVtb3RlIHNlbmQgMiIsIiIs eCk7Ci0gICAgfQotICAgIHggPSBzY29tbWFuZCgiQUJPUiIpOwotICAgIGRlYnVnKEYxMDEsImZ0 cCBjYW5jZWxfcmVtb3RlIHNjb21tYW5kIiwiIix4KTsKLSNpZmRlZiBCU0RTRUxFQ1QKLSAgICBG RF9aRVJPKCZtYXNrKTsKLSAgICBGRF9TRVQoY3NvY2tldCwgJm1hc2spOwotICAgIGlmIChkaW4p IHsKLSAgICAgICAgRkRfU0VUKGRpbiwgJm1hc2spOwotICAgIH0KLSAgICBuZm5kID0gZW1wdHko Jm1hc2ssIDEwKTsKLSAgICBkZWJ1ZyhGMTAxLCJmdHAgY2FuY2VsX3JlbW90ZSBlbXB0eSIsIiIs bmZuZCk7Ci0gICAgaWYgKChuZm5kKSA8PSAwKSB7Ci0gICAgICAgIGlmIChuZm5kIDwgMCkgewot ICAgICAgICAgICAgcGVycm9yKCJjYW5jZWwiKTsKLSAgICAgICAgfQotI2lmZGVmIEZUUF9QUk9Y WQotICAgICAgICBpZiAocHRhYmZsZykKLSAgICAgICAgICBmdHBjb2RlID0gLTE7Ci0jZW5kaWYg LyogRlRQX1BST1hZICovCi0gICAgICAgIGxvc3RwZWVyKCk7Ci0gICAgfQotICAgIGRlYnVnKEYx MTAsImZ0cCBjYW5jZWxfcmVtb3RlIiwiRCIsMCk7Ci0gICAgaWYgKGRpbiAmJiBGRF9JU1NFVChk aW4sICZtYXNrKSkgewotICAgICAgICAvKiBTZWN1cml0eTogTm8gdGhyZWF0IGFzc29jaWF0ZWQg d2l0aCB0aGlzIHJlYWQuICovCi0gICAgICAgIC8qIEJ1dCB5b3UgY2FuJ3Qgc2ltcGx5IHJlYWQg dGhlIFRMUyBkYXRhIHN0cmVhbSAgKi8KLSNpZmRlZiBDS19TU0wKLSAgICAgICAgaWYgKHNzbF9m dHBfZGF0YV9hY3RpdmVfZmxhZykgewotICAgICAgICAgICAgaW50IGNvdW50LCBlcnJvcjsKLSAg ICAgICAgICAgIHdoaWxlICgoY291bnQgPSBTU0xfcmVhZChzc2xfZnRwX2RhdGFfY29uLCBidWYs IEZUUF9CVUZTSVopKSA+IDApCi0gICAgICAgICAgICAgICAgICAgIC8qIExPT1AgKi8gOwotICAg ICAgICB9IGVsc2UKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgewotICAgICAgICAgICAg d2hpbGUgKHJlY3YoZGluLCAoU0VOREFSRzJUWVBFKWJ1ZiwgRlRQX0JVRlNJWiwwKSA+IDApCi0g ICAgICAgICAgICAgICAgLyogTE9PUCAqLyA7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZGVidWco RjExMCwiZnRwIGNhbmNlbF9yZW1vdGUiLCJFIiwwKTsKLSNlbHNlIC8qIEJTRFNFTEVDVCAqLwot I2lmZGVmIElCTVNFTEVDVAotICAgIGZkc1swXSA9IGNzb2NrZXQ7Ci0gICAgZmRjbnQrKzsKLSAg ICBpZiAoZGluKSB7Ci0gICAgICAgIGZkc1sxXSA9IGRpbjsKLSAgICAgICAgZmRjbnQrKzsKLSAg ICB9Ci0gICAgbmZuZCA9IGVtcHR5KGZkcywgZmRjbnQsIDEwKTsKLSAgICBkZWJ1ZyhGMTAxLCJm dHAgY2FuY2VsX3JlbW90ZSBlbXB0eSIsIiIsbmZuZCk7Ci0gICAgaWYgKChuZm5kKSA8PSAwKSB7 Ci0gICAgICAgIGlmIChuZm5kIDwgMCkgewotICAgICAgICAgICAgcGVycm9yKCJjYW5jZWwiKTsK LSAgICAgICAgfQotI2lmZGVmIEZUUF9QUk9YWQotICAgICAgICBpZiAocHRhYmZsZykKLSAgICAg ICAgICBmdHBjb2RlID0gLTE7Ci0jZW5kaWYgLyogRlRQX1BST1hZICovCi0gICAgICAgIGxvc3Rw ZWVyKCk7Ci0gICAgfQotICAgIGRlYnVnKEYxMTAsImZ0cCBjYW5jZWxfcmVtb3RlIiwiRCIsMCk7 Ci0gICAgaWYgKGRpbiAmJiBzZWxlY3QoJmRpbiwgMSwwLDAsMSkgKSB7Ci0jaWZkZWYgQ0tfU1NM Ci0gICAgICAgIGlmIChzc2xfZnRwX2RhdGFfYWN0aXZlX2ZsYWcpIHsKLSAgICAgICAgICAgIGlu dCBjb3VudCwgZXJyb3I7Ci0gICAgICAgICAgICB3aGlsZSAoKGNvdW50ID0gU1NMX3JlYWQoc3Ns X2Z0cF9kYXRhX2NvbiwgYnVmLCBGVFBfQlVGU0laKSkgPiAwKQotICAgICAgICAgICAgICAgICAg ICAvKiBMT09QICovIDsKLSAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAg ICAgIHsKLSAgICAgICAgICAgIHdoaWxlIChyZWN2KGRpbiwgKFNFTkRBUkcyVFlQRSlidWYsIEZU UF9CVUZTSVosMCkgPiAwKQotICAgICAgICAgICAgICAgIC8qIExPT1AgKi8gOwotICAgICAgICB9 Ci0gICAgfQotICAgIGRlYnVnKEYxMTAsImZ0cCBjYW5jZWxfcmVtb3RlIiwiRSIsMCk7Ci0jZWxz ZSAvKiBJQk1TRUxFQ1QgKi8KLSAgICBTb21lIGZvcm0gb2Ygc2VsZWN0IGlzIHJlcXVpcmVkLgot I2VuZGlmIC8qIElCTVNFTEVDVCAqLwotI2VuZGlmIC8qIEJTRFNFTEVDVCAqLwotICAgIGlmIChn ZXRyZXBseSgwLC0xLC0xLGZ0cF92Ym0sMCkgPT0gUkVQTFlfRVJST1IgJiYgZnRwY29kZSA9PSA1 NTIpIHsKLSAgICAgICAgZGVidWcoRjExMCwiZnRwIGNhbmNlbF9yZW1vdGUiLCJGIiwwKTsKLSAg ICAgICAgLyogNTUyIG5lZWRlZCBmb3IgTklDIHN0eWxlIGNhbmNlbCAqLwotICAgICAgICBnZXRy ZXBseSgwLC0xLC0xLGZ0cF92Ym0sMCk7Ci0gICAgICAgIGRlYnVnKEYxMTAsImZ0cCBjYW5jZWxf cmVtb3RlIiwiRyIsMCk7Ci0gICAgfQotICAgIGRlYnVnKEYxMTAsImZ0cCBjYW5jZWxfcmVtb3Rl IiwiSCIsMCk7Ci0gICAgZ2V0cmVwbHkoMCwtMSwtMSxmdHBfdmJtLDApOwotICAgIGRlYnVnKEYx MTAsImZ0cCBjYW5jZWxfcmVtb3RlIiwiSSIsMCk7Ci0jaWZkZWYgREVCVUcKLSAgICBkZWJ0aW0g PSB4ZGVidGltOwotI2VuZGlmIC8qIERFQlVHICovCi19Ci0KLXN0YXRpYyBpbnQKLWZ0c19kcGwo eCkgaW50IHg7IHsKLSAgICBpZiAoIWF1dGhfdHlwZQotI2lmZGVmIE9TMgotICAgICAgICAgfHwg IWNrX2NyeXB0X2lzX2luc3RhbGxlZCgpCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICApIHsK LSAgICAgICAgc3dpdGNoICggeCApIHsKLSAgICAgICAgICBjYXNlIEZQTF9QUlY6Ci0gICAgICAg ICAgICBwcmludGYoIj9DYW5ub3Qgc2V0IHByb3RlY3Rpb24gbGV2ZWwgdG8gUFJJVkFURVxuIik7 Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgICAgY2FzZSBGUExfU0FGOgotICAgICAg ICAgICAgcHJpbnRmKCI/Q2Fubm90IHNldCBwcm90ZWN0aW9uIGxldmVsIHRvIFNBRkVcbiIpOwot ICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICB9Ci0gICAgICAgIGZ0cF9kcGwgPSB4Owot ICAgICAgICByZXR1cm4oMSk7Ci0gICAgfQotCi0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKHggPT0g RlBMX1NBRiAmJgotICAgICAgICAoIXN0cmNtcChhdXRoX3R5cGUsIlNTTCIpIHx8ICFzdHJjbXAo YXV0aF90eXBlLCJUTFMiKSkpIHsKLSAgICAgICAgcHJpbnRmKCJDYW5ub3Qgc2V0IHByb3RlY3Rp b24gbGV2ZWwgdG8gc2FmZVxuIik7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYg LyogQ0tfU1NMICovCi0gICAgLyogU3RhcnQgd2l0aCBhIFBCU1ogb2YgMSBtZWcgKi8KLSAgICBp ZiAoeCAhPSBGUExfQ0xSKSB7Ci0gICAgICAgIGlmIChzZXRwYnN6KERFRkFVTFRfUEJTWikgPCAw KQotICAgICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0gICAgeSA9IGZ0cGNtZCh4ID09IEZQTF9D TFIgPyAiUFJPVCBDIiA6Ci0gICAgICAgICAgICAgICAoeCA9PSBGUExfU0FGID8gIlBST1QgUyIg OiAiUFJPVCBQIiksIE5VTEwsIDAsIDAsZnRwX3ZibSk7Ci0gICAgaWYgKHkgPT0gUkVQTFlfQ09N UExFVEUpIHsKLSAgICAgICAgZnRwX2RwbCA9IHg7Ci0gICAgICAgIHJldHVybigxKTsKLSAgICB9 Ci0gICAgcmV0dXJuKDApOwotfQotCi1zdGF0aWMgaW50Ci1mdHNfY3BsKHgpIGludCB4OyB7Ci0g ICAgaWYgKCFhdXRoX3R5cGUgCi0jaWZkZWYgT1MyCi0gICAgICAgICB8fCAhY2tfY3J5cHRfaXNf aW5zdGFsbGVkKCkKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICkgewotICAgICAgICBzd2l0 Y2ggKCB4ICkgewotICAgICAgICAgIGNhc2UgRlBMX1BSVjoKLSAgICAgICAgICAgIHByaW50Zigi P0Nhbm5vdCBzZXQgcHJvdGVjdGlvbiBsZXZlbCB0byBQUklWQVRFXG4iKTsKLSAgICAgICAgICAg IHJldHVybigwKTsKLSAgICAgICAgICBjYXNlIEZQTF9TQUY6Ci0gICAgICAgICAgICBwcmludGYo Ij9DYW5ub3Qgc2V0IHByb3RlY3Rpb24gbGV2ZWwgdG8gU0FGRVxuIik7Ci0gICAgICAgICAgICBy ZXR1cm4oMCk7Ci0gICAgICAgIH0KLSAgICAgICAgZnRwX2NwbCA9IHg7Ci0gICAgICAgIHJldHVy bigxKTsKLSAgICB9Ci0gICAgaWYgKHggPT0gRlBMX0NMUikgewotICAgICAgICB5ID0gZnRwY21k KCJDQ0MiLE5VTEwsMCwwLGZ0cF92Ym0pOwotICAgICAgICBpZiAoeSA9PSBSRVBMWV9DT01QTEVU RSkgewotICAgICAgICAgICAgZnRwX2NwbCA9IHg7Ci0gICAgICAgICAgICByZXR1cm4oMSk7Ci0g ICAgICAgIH0KLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSAgICBmdHBfY3BsID0geDsKLSAg ICByZXR1cm4oMSk7Ci19Ci0KLSNpZmRlZiBGVFBfR1NTQVBJCi1zdGF0aWMgVk9JRAotdXNlcl9n c3NfZXJyb3IobWFqX3N0YXQsIG1pbl9zdGF0LCBzKQotICAgIE9NX3VpbnQzMiBtYWpfc3RhdCwg bWluX3N0YXQ7Ci0gICAgY2hhciAqczsKLXsKLSAgICAvKiBhIGxvdCBvZiB3b3JrIGp1c3QgdG8g cmVwb3J0IHRoZSBlcnJvciAqLwotICAgIE9NX3VpbnQzMiBnbWFqX3N0YXQsIGdtaW5fc3RhdCwg bXNnX2N0eDsKLSAgICBnc3NfYnVmZmVyX2Rlc2MgbXNnOwotICAgIG1zZ19jdHggPSAwOwotICAg IHdoaWxlICghbXNnX2N0eCkgewotICAgICAgICBnbWFqX3N0YXQgPSBnc3NfZGlzcGxheV9zdGF0 dXMoJmdtaW5fc3RhdCwgbWFqX3N0YXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBHU1NfQ19HU1NfQ09ERSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdTU19DX05VTExfT0lELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJm1zZ19jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm bXNnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICBp ZiAoKGdtYWpfc3RhdCA9PSBHU1NfU19DT01QTEVURSl8fAotICAgICAgICAgICAgKGdtYWpfc3Rh dCA9PSBHU1NfU19DT05USU5VRV9ORUVERUQpKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgIkdTU0FQSSBlcnJvciBtYWpvcjogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgIChjaGFy Kiltc2cudmFsdWUpOwotICAgICAgICAgICAgZ3NzX3JlbGVhc2VfYnVmZmVyKCZnbWluX3N0YXQs ICZtc2cpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChnbWFqX3N0YXQgIT0gR1NTX1NfQ09OVElO VUVfTkVFREVEKQotICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBtc2dfY3R4ID0gMDsKLSAg ICB3aGlsZSAoIW1zZ19jdHgpIHsKLSAgICAgICAgZ21hal9zdGF0ID0gZ3NzX2Rpc3BsYXlfc3Rh dHVzKCZnbWluX3N0YXQsIG1pbl9zdGF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgR1NTX0NfTUVDSF9DT0RFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgR1NTX0NfTlVMTF9PSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmbXNnX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZtc2cKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAg IGlmICgoZ21hal9zdGF0ID09IEdTU19TX0NPTVBMRVRFKXx8Ci0gICAgICAgICAgICAoZ21hal9z dGF0ID09IEdTU19TX0NPTlRJTlVFX05FRURFRCkpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3Rk ZXJyLCAiR1NTQVBJIGVycm9yIG1pbm9yOiAlc1xuIiwgKGNoYXIqKW1zZy52YWx1ZSk7Ci0gICAg ICAgICAgICBnc3NfcmVsZWFzZV9idWZmZXIoJmdtaW5fc3RhdCwgJm1zZyk7Ci0gICAgICAgIH0K LSAgICAgICAgaWYgKGdtYWpfc3RhdCAhPSBHU1NfU19DT05USU5VRV9ORUVERUQpCi0gICAgICAg ICAgYnJlYWs7Ci0gICAgfQotICAgIGZwcmludGYoc3RkZXJyLCAiR1NTQVBJIGVycm9yOiAlc1xu Iiwgcyk7Ci19Ci0jZW5kaWYgLyogRlRQX0dTU0FQSSAqLwotCi0jaWZuZGVmIE5PTUhIT1NUCi0j aWZkZWYgZGF0YWdlbmVyYWwKLSNkZWZpbmUgTk9NSEhPU1QKLSNlbHNlCi0jaWZkZWYgSFBVWDVX SU5UQ1AKLSNkZWZpbmUgTk9NSEhPU1QKLSNlbmRpZiAvKiBIUFVYNVdJTlRDUCAqLwotI2VuZGlm IC8qIGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyogTk9NSEhPU1QgKi8KLQotI2lmZGVmIElOQURE UlgKLXN0YXRpYyBzdHJ1Y3QgaW5fYWRkciBpbmFkZHJ4OwotI2VuZGlmIC8qIElOQUREUlggKi8K LQotc3RhdGljIGNoYXIgKgotZnRwX2hvb2t1cChob3N0LCBwb3J0LCB0bHMpIGNoYXIgKiBob3N0 OyBpbnQgcG9ydDsgaW50IHRsczsgewotICAgIHJlZ2lzdGVyIHN0cnVjdCBob3N0ZW50ICpocCA9 IDA7Ci0jaWZkZWYgSVBfVE9TCi0jaWZkZWYgSVBUT1NfVEhST1VHSFBVVAotICAgIGludCB0b3M7 Ci0jZW5kaWYgLyogSVBUT1NfVEhST1VHSFBVVCAqLwotI2VuZGlmIC8qIElQX1RPUyAqLwotICAg IGludCBzOwotICAgIEdTT0NLTkFNRV9UIGxlbjsKLSAgICBzdGF0aWMgY2hhciBob3N0bmFtZWJ1 ZltNQVhIT1NUTkFNRUxFTl07Ci0gICAgY2hhciBob3N0bmFtZVtNQVhIT1NUTkFNRUxFTl0gLyog LCAqcCwgKnEgKi8gOwotICAgIGludCAgY3BvcnQ7Ci0jaWZkZWYgREVCVUcKLSAgICBleHRlcm4g aW50IGRlYnRpbTsKLSAgICBpbnQgeGRlYnRpbTsKLSAgICB4ZGVidGltID0gZGVidGltOwotICAg IGRlYnRpbSA9IDE7Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotICAgIGRlYnVnKEYxMTEsImZ0cF9o b29rdXAiLGhvc3QscG9ydCk7Ci0KLSNpZm5kZWYgTk9IVFRQCi0gICAgaWYgKHRjcF9odHRwX3By b3h5KSB7Ci0gICAgICAgIHN0cnVjdCBzZXJ2ZW50ICpkZXN0c3A7Ci0gICAgICAgIGNoYXIgKnAs ICpxOwotCi0gICAgICAgIGNrbWFrbXNnKHByb3h5aG9zdCxIVFRQQ1BZTCxob3N0LCI6Iixja3Vp dG9hKHBvcnQpLE5VTEwpOwotICAgICAgICBmb3IgKHAgPSB0Y3BfaHR0cF9wcm94eSwgcSA9IGhv c3RuYW1lOwotICAgICAgICAgICAgICpwICE9ICdcMCcgJiYgKnAgIT0gJzonOwotICAgICAgICAg ICAgIHArKywgcSsrCi0gICAgICAgICAgICAgKQotICAgICAgICAgICpxID0gKnA7Ci0gICAgICAg ICpxID0gJ1wwJzsKLQotICAgICAgICBpZiAoKnAgPT0gJzonKQotICAgICAgICAgIHArKzsKLSAg ICAgICAgZWxzZQotICAgICAgICAgIHAgPSAiaHR0cCI7Ci0KLSAgICAgICAgZGVzdHNwID0gZ2V0 c2VydmJ5bmFtZShwLCJ0Y3AiKTsKLSAgICAgICAgaWYgKGRlc3RzcCkKLSAgICAgICAgICBjcG9y dCA9IG50b2hzKGRlc3RzcC0+c19wb3J0KTsKLSAgICAgICAgZWxzZSBpZiAocCkgewotICAgICAg ICAgIGNwb3J0ID0gYXRvaShwKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgY3BvcnQgPSA4 MDsKLSAgICB9IGVsc2UKLSNlbmRpZiAvKiBOT0hUVFAgKi8KLSAgICB7Ci0gICAgICAgIGNrc3Ry bmNweShob3N0bmFtZSxob3N0LE1BWEhPU1ROQU1FTEVOKTsKLSAgICAgICAgY3BvcnQgPSBwb3J0 OwotICAgIH0KLSAgICBtZW1zZXQoKGNoYXIgKikmaGlzY3RsYWRkciwgMCwgc2l6ZW9mIChoaXNj dGxhZGRyKSk7Ci0gICAgaGlzY3RsYWRkci5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIoaG9z dCk7Ci0gICAgaWYgKGhpc2N0bGFkZHIuc2luX2FkZHIuc19hZGRyICE9IElOQUREUl9OT05FKSAv KiAyMDEwLTAzLTI5ICovCi0gICAgewotICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgaG9va3VwIEEi LGhvc3RuYW1lLDApOwotICAgICAgICBoaXNjdGxhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwot ICAgICAgICBja3N0cm5jcHkoaG9zdG5hbWVidWYsIGhvc3RuYW1lLCBNQVhIT1NUTkFNRUxFTik7 Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZGVidWcoRjExMCwiZnRwIGhvb2t1cCBCIixob3N0bmFt ZSwwKTsKLSAgICAgICAgaHAgPSBnZXRob3N0YnluYW1lKGhvc3RuYW1lKTsKLSNpZmRlZiBIQURE UkxJU1QKLSAgICAgICAgaHAgPSBja19jb3B5aG9zdGVudChocCk7ICAgICAgICAvKiBtYWtlIHNh ZmUgY29weSB0aGF0IHdvbid0IGNoYW5nZSAqLwotI2VuZGlmIC8qIEhBRERSTElTVCAqLwotICAg ICAgICBpZiAoaHAgPT0gTlVMTCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJmdHA6 ICVzOiBVbmtub3duIGhvc3RcbiIsIGhvc3QpOwotICAgICAgICAgICAgZnRwY29kZSA9IC0xOwot I2lmZGVmIERFQlVHCi0gICAgICAgICAgICBkZWJ0aW0gPSB4ZGVidGltOwotI2VuZGlmIC8qIERF QlVHICovCi0gICAgICAgICAgICByZXR1cm4oKGNoYXIgKikgMCk7Ci0gICAgICAgIH0KLSAgICAg ICAgaGlzY3RsYWRkci5zaW5fZmFtaWx5ID0gaHAtPmhfYWRkcnR5cGU7Ci0jaWZkZWYgSEFERFJM SVNUCi0gICAgICAgIG1lbWNweSgoY2hhciAqKSZoaXNjdGxhZGRyLnNpbl9hZGRyLCBocC0+aF9h ZGRyX2xpc3RbMF0sCi0gICAgICAgICAgICAgICBzaXplb2YoaGlzY3RsYWRkci5zaW5fYWRkcikp OwotI2Vsc2UgLyogSEFERFJMSVNUICovCi0gICAgICAgIG1lbWNweSgoY2hhciAqKSZoaXNjdGxh ZGRyLnNpbl9hZGRyLCBocC0+aF9hZGRyLAotICAgICAgICAgICAgICAgc2l6ZW9mKGhpc2N0bGFk ZHIuc2luX2FkZHIpKTsKLSNlbmRpZiAvKiBIQUREUkxJU1QgKi8KLSAgICAgICAgY2tzdHJuY3B5 KGhvc3RuYW1lYnVmLCBocC0+aF9uYW1lLCBNQVhIT1NUTkFNRUxFTik7Ci0gICAgfQotICAgIGRl YnVnKEYxMTAsImZ0cCBob29rdXAgQyIsaG9zdG5hbWVidWYsMCk7Ci0gICAgZnRwX2hvc3QgPSBo b3N0bmFtZWJ1ZjsKLSAgICBzID0gc29ja2V0KGhpc2N0bGFkZHIuc2luX2ZhbWlseSwgU09DS19T VFJFQU0sIDApOwotICAgIGRlYnVnKEYxMDEsImZ0cCBob29rdXAgc29ja2V0IiwiIixzKTsKLSAg ICBpZiAocyA8IDApIHsKLSAgICAgICAgcGVycm9yKCJmdHA6IHNvY2tldCIpOwotICAgICAgICBm dHBjb2RlID0gLTE7Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgZGVidGltID0geGRlYnRpbTsKLSNl bmRpZiAvKiBERUJVRyAqLwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotICAgIGhpc2N0bGFk ZHIuc2luX3BvcnQgPSBodG9ucyhjcG9ydCk7Ci0gICAgZXJybm8gPSAwOwotCi0jaWZkZWYgQ09N TUVOVAotICBwcmludGYoImhpc2N0bGFkZHI9JWRcbiIsc2l6ZW9mKGhpc2N0bGFkZHIpKTsKLSAg cHJpbnRmKCJoaXNjdGxhZGRyLnNpbl9hZGRyPSVkXG4iLHNpemVvZihoaXNjdGxhZGRyLnNpbl9h ZGRyKSk7Ci0gIHByaW50Zigic29ja2FkZHJfaW49JWRcbiIsc2l6ZW9mKHN0cnVjdCBzb2NrYWRk cl9pbikpOwotICBwcmludGYoImhpc2N0bGFkZHIuc2luX2FkZHIuc19hZGRyPSVkXG4iLHNpemVv ZihoaXNjdGxhZGRyLnNpbl9hZGRyLnNfYWRkcikpOwotI2VuZGlmCS8qIENPTU1FTlQgKi8KLQot I2lmZGVmIEhBRERSTElTVAotICAgIGRlYnVnKEYxMDAsImZ0cCBob29rdXAgSEFERFJMSVNUIiwi IiwwKTsKLSAgICB3aGlsZQotI2Vsc2UKLSAgICBkZWJ1ZyhGMTAwLCJmdHAgaG9va3VwIG5vIEhB RERSTElTVCIsIiIsMCk7Ci0gICAgaWYKLSNlbmRpZiAvKiBIQUREUkxJU1QgKi8KLSAgICAgIChj b25uZWN0KHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikmaGlzY3RsYWRkciwgc2l6ZW9mIChoaXNjdGxh ZGRyKSkgPCAwKSB7Ci0gICAgICAgICAgZGVidWcoRjEwMSwiZnRwIGhvb2t1cCBjb25uZWN0IGZh aWxlZCIsIiIsZXJybm8pOwotI2lmZGVmIEhBRERSTElTVAotICAgICAgICAgIGlmIChocCAmJiBo cC0+aF9hZGRyX2xpc3RbMV0pIHsKLSAgICAgICAgICAgICAgaW50IG9lcnJubyA9IGVycm5vOwot Ci0gICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZnRwOiBjb25uZWN0IHRvIGFkZHJlc3Mg JXM6ICIsCi0gICAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9hKGhpc2N0bGFkZHIuc2luX2Fk ZHIpKTsKLSAgICAgICAgICAgICAgZXJybm8gPSBvZXJybm87Ci0gICAgICAgICAgICAgIHBlcnJv cigoY2hhciAqKSAwKTsKLSAgICAgICAgICAgICAgaHAtPmhfYWRkcl9saXN0Kys7Ci0gICAgICAg ICAgICAgIG1lbWNweSgoY2hhciAqKSZoaXNjdGxhZGRyLnNpbl9hZGRyLAotICAgICAgICAgICAg ICAgICAgICAgaHAtPmhfYWRkcl9saXN0WzBdLAotICAgICAgICAgICAgICAgICAgICAgc2l6ZW9m KGhpc2N0bGFkZHIuc2luX2FkZHIpKTsKLSAgICAgICAgICAgICAgZnByaW50ZihzdGRvdXQsICJU cnlpbmcgJXMuLi5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9hKGhpc2N0bGFk ZHIuc2luX2FkZHIpKTsKLSNpZmRlZiBUQ1BJUExJQgotICAgICAgICAgICAgICBzb2NrZXRfY2xv c2Uocyk7Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwotICAgICAgICAgICAgICBjbG9zZShzKTsKLSNl bmRpZiAvKiBUQ1BJUExJQiAqLwotICAgICAgICAgICAgICBzID0gc29ja2V0KGhpc2N0bGFkZHIu c2luX2ZhbWlseSwgU09DS19TVFJFQU0sIDApOwotICAgICAgICAgICAgICBpZiAocyA8IDApIHsK LSAgICAgICAgICAgICAgICAgIHBlcnJvcigiZnRwOiBzb2NrZXQiKTsKLSAgICAgICAgICAgICAg ICAgIGZ0cGNvZGUgPSAtMTsKLSNpZmRlZiBERUJVRwotICAgICAgICAgICAgICAgICAgZGVidGlt ID0geGRlYnRpbTsKLSNlbmRpZiAvKiBERUJVRyAqLwotICAgICAgICAgICAgICAgICAgcmV0dXJu KDApOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg IH0KLSNlbmRpZiAvKiBIQUREUkxJU1QgKi8KLSAgICAgICAgICBwZXJyb3IoImZ0cDogY29ubmVj dCIpOwotICAgICAgICAgIGZ0cGNvZGUgPSAtMTsKLSAgICAgICAgICBnb3RvIGJhZDsKLSAgICAg IH0KLSAgICBkZWJ1ZyhGMTAwLCJmdHAgaG9va3VwIGNvbm5lY3Qgb2siLCIiLDApOwotCi0gICAg bGVuID0gc2l6ZW9mIChteWN0bGFkZHIpOwotICAgIGVycm5vID0gMDsKLSAgICBpZiAoZ2V0c29j a25hbWUocywgKHN0cnVjdCBzb2NrYWRkciAqKSZteWN0bGFkZHIsICZsZW4pIDwgMCkgewotICAg ICAgICBkZWJ1ZyhGMTAxLCJmdHAgaG9va3VwIGdldHNvY2tuYW1lIGZhaWxlZCIsIiIsZXJybm8p OwotICAgICAgICBwZXJyb3IoImZ0cDogZ2V0c29ja25hbWUiKTsKLSAgICAgICAgZnRwY29kZSA9 IC0xOwotICAgICAgICBnb3RvIGJhZDsKLSAgICB9Ci0gICAgZGVidWcoRjEwMCwiZnRwIGhvb2t1 cCBnZXRzb2NrbmFtZSBvayIsIiIsMCk7Ci0KLSNpZm5kZWYgTk9IVFRQCi0gICAgaWYgKHRjcF9o dHRwX3Byb3h5KSB7Ci0jaWZkZWYgT1MyCi0gICAgICAgIGNoYXIgKiBhZ2VudCA9ICJLZXJtaXQg OTUiOyAgICAgLyogRGVmYXVsdCB1c2VyIGFnZW50ICovCi0jZWxzZQotICAgICAgICBjaGFyICog YWdlbnQgPSAiQy1LZXJtaXQiOwotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAgICAgIGlmIChodHRw X2Nvbm5lY3QocyxhZ2VudCxOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9odHRw X3Byb3h5X3VzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2h0dHBfcHJveHlfcHdk LAotICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAg cHJveHlob3N0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgKSA8IDApIHsKLSAgICAgICAgICAg IGNoYXIgKiBmb28gPSBOVUxMOwotI2lmZGVmIFRDUElQTElCCi0gICAgICAgICAgICBzb2NrZXRf Y2xvc2Uocyk7Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwotICAgICAgICAgICAgY2xvc2Uocyk7Ci0j ZW5kaWYgLyogVENQSVBMSUIgKi8KLQotICAgICAgICAgICAgd2hpbGUgKGZvbyA9PSBOVUxMICYm IHRjcF9odHRwX3Byb3h5ICE9IE5VTEwgKSB7Ci0KLSAgICAgICAgICAgICAgICBpZiAodGNwX2h0 dHBfcHJveHlfZXJybm8gPT0gNDAxIHx8Ci0gICAgICAgICAgICAgICAgICAgICB0Y3BfaHR0cF9w cm94eV9lcnJubyA9PSA0MDcgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIgdWlkW1VJREJV RkxFTl07Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIgcHdkW1BXRFNJWl07Ci0gICAgICAgICAg ICAgICAgICAgIHN0cnVjdCB0eHRib3ggdGJbMl07Ci0gICAgICAgICAgICAgICAgICAgIGludCBv azsKLQotICAgICAgICAgICAgICAgICAgICB0YlswXS50X2J1ZiA9IHVpZDsKLSAgICAgICAgICAg ICAgICAgICAgdGJbMF0udF9sZW4gPSBVSURCVUZMRU47Ci0gICAgICAgICAgICAgICAgICAgIHRi WzBdLnRfbGJsID0gIlByb3h5IFVzZXJpZDogIjsKLSAgICAgICAgICAgICAgICAgICAgdGJbMF0u dF9kZmx0ID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgdGJbMF0udF9lY2hvID0gMTsKLSAg ICAgICAgICAgICAgICAgICAgdGJbMV0udF9idWYgPSBwd2Q7Ci0gICAgICAgICAgICAgICAgICAg IHRiWzFdLnRfbGVuID0gMjU2OwotICAgICAgICAgICAgICAgICAgICB0YlsxXS50X2xibCA9ICJQ cm94eSBQYXNzcGhyYXNlOiAiOwotICAgICAgICAgICAgICAgICAgICB0YlsxXS50X2RmbHQgPSBO VUxMOwotICAgICAgICAgICAgICAgICAgICB0YlsxXS50X2VjaG8gPSAyOwotCi0gICAgICAgICAg ICAgICAgICAgIG9rID0gdXFfbXR4dCgiUHJveHkgU2VydmVyIEF1dGhlbnRpY2F0aW9uIFJlcXVp cmVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDIsIHRiKTsK LQotICAgICAgICAgICAgICAgICAgICBpZiAob2sgJiYgdWlkWzBdKSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICogcHJveHlfdXNlciwgKiBwcm94eV9wd2Q7Ci0KLSAgICAgICAgICAg ICAgICAgICAgICAgIHByb3h5X3VzZXIgPSB0Y3BfaHR0cF9wcm94eV91c2VyOwotICAgICAgICAg ICAgICAgICAgICAgICAgcHJveHlfcHdkICA9IHRjcF9odHRwX3Byb3h5X3B3ZDsKLQotICAgICAg ICAgICAgICAgICAgICAgICAgdGNwX2h0dHBfcHJveHlfdXNlciA9IHVpZDsKLSAgICAgICAgICAg ICAgICAgICAgICAgIHRjcF9odHRwX3Byb3h5X3B3ZCA9IHB3ZDsKLQotICAgICAgICAgICAgICAg ICAgICAgICAgZm9vID0gZnRwX2hvb2t1cChob3N0LCBwb3J0LCAwKTsKLQotICAgICAgICAgICAg ICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwX2hvb2t1cCgpIixmb28sMCk7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBtZW1zZXQocHdkLDAsUFdEU0laKTsKLSAgICAgICAgICAgICAgICAgICAg ICAgIHRjcF9odHRwX3Byb3h5X3VzZXIgPSBwcm94eV91c2VyOwotICAgICAgICAgICAgICAgICAg ICAgICAgdGNwX2h0dHBfcHJveHlfcHdkID0gcHJveHlfcHdkOwotICAgICAgICAgICAgICAgICAg ICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg IH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIGlmIChmb28gIT0gTlVMTCkKLSAgICAgICAgICAgICAgcmV0dXJuKGZvbyk7Ci0gICAg ICAgICAgICBwZXJyb3IoImZ0cDogY29ubmVjdCIpOwotICAgICAgICAgICAgZnRwY29kZSA9IC0x OwotICAgICAgICAgICAgZ290byBiYWQ7Ci0gICAgICAgIH0KLSAgICAgICAgY2tzdHJuY3B5KGhv c3RuYW1lYnVmLCBwcm94eWhvc3QsIE1BWEhPU1ROQU1FTEVOKTsKLSAgICB9Ci0jZW5kaWYgLyog Tk9IVFRQICovCi0KLSAgICBjc29ja2V0ID0gczsKLQotI2lmZGVmIENLX1NTTAotICAgIGlmICh0 bHMpIHsKLSAgICAgICAgLyogRlRQIG92ZXIgU1NMCi0gICAgICAgICAqIElmIHRoZSBjb25uZWN0 aW9uIGlzIG92ZXIgYW4gU1NMIHByb3h5IHRoZW4gdGhlCi0gICAgICAgICAqIGF1dGhfdHlwZSB3 aWxsIGJlIE5VTEwuICBIb3dldmVyLCBJJ20gbm90IHN1cmUKLSAgICAgICAgICogd2hldGhlciB3 ZSBzaG91bGQgcHJvdGVjdCB0aGUgZGF0YSBjaGFubmVsIGluCi0gICAgICAgICAqIHRoYXQgY2Fz ZSBvciBub3QuCi0gICAgICAgICAqLwotCi0gICAgICAgIGRlYnVnKEYxMDAsImZ0cCBob29rdXAg dXNlX3RscyIsIiIsMCk7Ci0gICAgICAgIGlmICghc3NsX2F1dGgoKSkgewotICAgICAgICAgICAg ZGVidWcoRjEwMCwiZnRwIGhvb2t1cCBzc2xfYXV0aCBmYWlsZWQiLCIiLDApOwotICAgICAgICAg ICAgYXV0aF90eXBlID0gTlVMTDsKLSAgICAgICAgICAgIGZ0cGNvZGUgPSAtMTsKLSAgICAgICAg ICAgIGNzb2NrZXQgPSAtMTsKLSAgICAgICAgICAgIGdvdG8gYmFkOwotICAgICAgICB9Ci0gICAg ICAgIHNzbF9mdHBfcHJveHkgPSAxOwotICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotI2lm ZGVmIElQX1RPUwotI2lmZGVmIElQVE9TX0xPV0RFTEFZCi0gICAgdG9zID0gSVBUT1NfTE9XREVM QVk7Ci0gICAgaWYgKHNldHNvY2tvcHQoY3NvY2tldCwgSVBQUk9UT19JUCwgSVBfVE9TLCAoY2hh ciAqKSZ0b3MsIHNpemVvZihpbnQpKSA8IDApCi0gICAgICBwZXJyb3IoImZ0cDogc2V0c29ja29w dCBUT1MgKGlnbm9yZWQpIik7Ci0jZW5kaWYKLSNlbmRpZgotICAgIGlmICghcXVpZXQpCi0gICAg ICBwcmludGYoIkNvbm5lY3RlZCB0byAlcy5cbiIsIGhvc3QpOwotCi0gICAgLyogUmVhZCBncmVl dGluZyBmcm9tIHNlcnZlciAqLwotICAgIGlmIChnZXRyZXBseSgwLGZ0cF9jc2wsZnRwX2Nzcixm dHBfdmJtLDApID4gMikgewotICAgICAgICBkZWJ1ZyhGMTAwLCJmdHAgaG9va3VwIGJhZCByZXBs eSIsIiIsMCk7Ci0jaWZkZWYgVENQSVBMSUIKLSAgICAgICAgc29ja2V0X2Nsb3NlKGNzb2NrZXQp OwotI2Vsc2UgLyogVENQSVBMSUIgKi8KLSAgICAgICAgY2xvc2UoY3NvY2tldCk7Ci0jZW5kaWYg LyogVENQSVBMSUIgKi8KLSAgICAgICAgZnRwY29kZSA9IC0xOwotICAgICAgICBnb3RvIGJhZDsK LSAgICB9Ci0jaWZkZWYgU09fT09CSU5MSU5FCi0gICAgewotICAgICAgICBpbnQgb24gPSAxOwot ICAgICAgICBlcnJubyA9IDA7Ci0gICAgICAgIGlmIChzZXRzb2Nrb3B0KHMsIFNPTF9TT0NLRVQs IFNPX09PQklOTElORSwgKGNoYXIgKikmb24sCi0JCSAgICAgICBzaXplb2Yob24pKSA8IDApIHsK LSAgICAgICAgICAgIHBlcnJvcigiZnRwOiBzZXRzb2Nrb3B0Iik7Ci0gICAgICAgICAgICBkZWJ1 ZyhGMTAxLCJmdHAgaG9va3VwIHNldHNvY2tvcHQgZmFpbGVkIiwiIixlcnJubyk7Ci0gICAgICAg IH0KLSNpZmRlZiBERUJVRwotICAgICAgICBlbHNlCi0gICAgICAgICAgZGVidWcoRjEwMCwiZnRw IGhvb2t1cCBzZXRzb2Nrb3B0IG9rIiwiIiwwKTsKLSNlbmRpZiAvKiBERUJVRyAqLwotICAgIH0K LSNlbmRpZiAvKiBTT19PT0JJTkxJTkUgKi8KLQotI2lmZGVmIERFQlVHCi0gICAgZGVidGltID0g eGRlYnRpbTsKLSNlbmRpZiAvKiBERUJVRyAqLwotICAgIHJldHVybihmdHBfaG9zdCk7Ci0KLSAg YmFkOgotICAgIGRlYnVnKEYxMDAsImZ0cCBob29rdXAgYmFkIiwiIiwwKTsKLSNpZmRlZiBUQ1BJ UExJQgotICAgIHNvY2tldF9jbG9zZShzKTsKLSNlbHNlIC8qIFRDUElQTElCICovCi0gICAgY2xv c2Uocyk7Ci0jZW5kaWYgLyogVENQSVBMSUIgKi8KLSNpZmRlZiBERUJVRwotICAgIGRlYnRpbSA9 IHhkZWJ0aW07Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICBjc29ja2V0ID0gLTE7Ci0gICAgcmV0 dXJuKChjaGFyICopMCk7Ci19Ci0KLXN0YXRpYyBWT0lECi1mdHBfaW5pdCgpIHsKLSAgICBpbnQg aSwgbjsKLQotICAgIC8qIFRoZSBwdXJwb3NlIG9mIHRoZSBpbml0aWFsIFJFU1QgMCBpcyBub3Qg Y2xlYXIsIGJ1dCBvdGhlciBGVFAgKi8KLSAgICAvKiBjbGllbnRzIGRvIGl0LiAgSW4gYW55IGNh c2UsIGZhaWx1cmUgb2YgdGhpcyBjb21tYW5kIGlzIG5vdCBhICovCi0gICAgLyogcmVsaWFibGUg aW5kaWNhdGlvbiB0aGF0IHRoZSBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBSZXN0YXJ0LiAqLwot Ci0gICAgb2tyZXN0YXJ0ID0gMDsKLSAgICBpZiAoIW5vaW5pdCkgewotICAgICAgICBuID0gZnRw Y21kKCJSRVNUIDAiLE5VTEwsMCwwLDApOwotICAgICAgICBpZiAobiA9PSBSRVBMWV9DT01QTEVU RSkKLSAgICAgICAgICBva3Jlc3RhcnQgPSAxOwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgZWxz ZSBpZiAoZnRwX2RlYikKLSAgICAgICAgICBwcmludGYoIldBUk5JTkc6IFVuYWJsZSB0byByZXN0 b3JlIGZpbGUgcG9pbnRlci5cbiIpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB9Ci0gICAg biA9IGZ0cGNtZCgiU1lTVCIsTlVMTCwwLDAsMCk7ICAgICAgLyogR2V0IHNlcnZlciBzeXN0ZW0g dHlwZSAqLwotICAgIGlmIChuID09IFJFUExZX0NPTVBMRVRFKSB7Ci0gICAgICAgIHJlZ2lzdGVy IGNoYXIgKmNwLCBjID0gTlVMOwotICAgICAgICBjcCA9IGNrc3RyY2hyKGZ0cF9yZXBseV9zdHIr NCwnICcpOyAvKiBHZXQgZmlyc3Qgd29yZCBvZiByZXBseSAqLwotICAgICAgICBpZiAoY3AgPT0g TlVMTCkKLSAgICAgICAgICBjcCA9IGNrc3RyY2hyKGZ0cF9yZXBseV9zdHIrNCwnXHInKTsKLSAg ICAgICAgaWYgKGNwKSB7Ci0gICAgICAgICAgICBpZiAoY3BbLTFdID09ICcuJykKLSAgICAgICAg ICAgICAgY3AtLTsKLSAgICAgICAgICAgIGMgPSAqY3A7ICAgICAgICAgICAgICAgICAgICAvKiBT YXZlIHRoaXMgY2hhciAqLwotICAgICAgICAgICAgKmNwID0gJ1wwJzsgICAgICAgICAgICAgICAg IC8qIFJlcGxhY2UgaXQgd2l0aCBOVUwgKi8KLSAgICAgICAgfQotICAgICAgICBpZiAoIXF1aWV0 KQotICAgICAgICAgIHByaW50ZigiUmVtb3RlIHN5c3RlbSB0eXBlIGlzICVzLlxuIixmdHBfcmVw bHlfc3RyKzQpOwotICAgICAgICBja3N0cm5jcHkoZnRwX3NydnR5cCxmdHBfcmVwbHlfc3RyKzQs U1JWTkFNTEVOKTsKLSAgICAgICAgaWYgKGNwKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQ dXQgYmFjayBzYXZlZCBjaGFyICovCi0gICAgICAgICAgKmNwID0gYzsKLSAgICB9Ci0gICAgYWxp a2UgPSAhY2tzdHJjbXAoZnRwX3NydnR5cCxteW9zdHlwZSwtMSwwKTsKLQotICAgIGlmICghY2tz dHJjbXAoZnRwX3NydnR5cCwiVU5JWCIsLTEsMCkpIHNlcnZlcnR5cGUgPSBTWVNfVU5JWDsKLSAg ICBlbHNlIGlmICghY2tzdHJjbXAoZnRwX3NydnR5cCwiV0lOMzIiLC0xLDApKSBzZXJ2ZXJ0eXBl ID0gU1lTX1dJTjMyOwotICAgIGVsc2UgaWYgKCFja3N0cmNtcChmdHBfc3J2dHlwLCJPUy8yIiwt MSwwKSkgc2VydmVydHlwZSA9IFNZU19XSU4zMjsKLSAgICBlbHNlIGlmICghY2tzdHJjbXAoZnRw X3NydnR5cCwiVk1TIiwtMSwwKSkgc2VydmVydHlwZSA9IFNZU19WTVM7Ci0gICAgZWxzZSBpZiAo IWNrc3RyY21wKGZ0cF9zcnZ0eXAsIkRPUyIsLTEsMCkpIHNlcnZlcnR5cGUgPSBTWVNfRE9TOwot ICAgIGVsc2UgaWYgKCFja3N0cmNtcChmdHBfc3J2dHlwLCJUT1BTMjAiLC0xLDApKSBzZXJ2ZXJ0 eXBlID0gU1lTX1RPUFMyMDsKLSAgICBlbHNlIGlmICghY2tzdHJjbXAoZnRwX3NydnR5cCwiVE9Q UzEwIiwtMSwwKSkgc2VydmVydHlwZSA9IFNZU19UT1BTMTA7Ci0KLSNpZmRlZiBGVFBfUFJPWFkK LSAgICB1bml4X3Byb3h5ID0gMDsKLSAgICBpZiAoc2VydmVydHlwZSA9PSBTWVNfVU5JWCAmJiBw cm94eSkgdW5peF9wcm94eSA9IDE7Ci0jZW5kaWYgLyogRlRQX1BST1hZICovCi0KLSAgICBpZiAo ZnRwX2NtZGxpbiAmJiBmdHBfeGZlcm1vZGUgPT0gWE1PREVfTSkKLSAgICAgIGZ0cF90eXAgPSBi aW5hcnk7ICAgICAgICAgICAgICAgICAvKiBUeXBlIGdpdmVuIG9uIGNvbW1hbmQgbGluZSAqLwot ICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSBzZXQg aXQgYXV0b21hdGljYWxseSAqLwotICAgICAgZnRwX3R5cCA9IGFsaWtlID8gRlRUX0JJTiA6IEZU VF9BU0M7Ci0gICAgY2hhbmdldHlwZShmdHBfdHlwLDApOyAgICAgICAgICAgICAgLyogQ2hhbmdl IHRvIHRoaXMgdHlwZSAqLwotICAgIGdfZnRwX3R5cCA9IGZ0cF90eXA7ICAgICAgICAgICAgICAg IC8qIE1ha2UgaXQgdGhlIGdsb2JhbCB0eXBlICovCi0gICAgaWYgKCFxdWlldCkKLSAgICAgIHBy aW50ZigiRGVmYXVsdCB0cmFuc2ZlciBtb2RlIGlzICVzXG4iLAotICAgICAgICAgICAgIGZ0cF90 eXAgPyAiQklOQVJZIiA6ICJURVhUIChcIkFTQ0lJXCIpIgotICAgICAgICAgICAgICk7Ci0gICAg Zm9yIChpID0gMDsgaSA8IDE2OyBpKyspCQkvKiBJbml0IHNlcnZlciBGRUFUdXJlIHRhYmxlICov Ci0gICAgICBzZnR0YWJbaV0gPSAwOwotICAgIGlmICghbm9pbml0KSB7Ci0gICAgICAgIG4gPSBm dHBjbWQoIk1PREUgUyIsTlVMTCwwLDAsMCk7IC8qIFdlIGFsd2F5cyBzZW5kIGluIFN0cmVhbSBt b2RlICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICBpZiAobiAhPSBSRVBMWV9DT01QTEVURSkK LSAgICAgICAgICBwcmludGYoIldBUk5JTkc6IFNlcnZlciBkb2VzIG5vdCBhY2NlcHQgTU9ERSBT KFRSRUFNKVxuIik7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICBuID0gZnRwY21kKCJT VFJVIEYiLE5VTEwsMCwwLDApOyAvKiBTVFJVIEZpbGUgKG5vdCBSZWNvcmQgb3IgUGFnZSkgKi8K LSNpZmRlZiBDT01NRU5UCi0gICAgICAgIGlmIChuICE9IFJFUExZX0NPTVBMRVRFKQotICAgICAg ICAgIHByaW50ZigiV0FSTklORzogU2VydmVyIGRvZXMgbm90IGFjY2VwdCBTVFJVIEYoSUxFKVxu Iik7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCWlmIChmZWF0b2spIHsKLQkgICAgbiA9IGZ0cGNt ZCgiRkVBVCIsTlVMTCwwLDAsMCk7IC8qIEFzayBzZXJ2ZXIgYWJvdXQgZmVhdHVyZXMgKi8KLQkg ICAgaWYgKG4gPT0gUkVQTFlfQ09NUExFVEUpIHsKLQkJZGVidWcoRjEwMSwiZnRwX2luaXQgRkVB VCIsIiIsc2Z0dGFiWzBdKTsKLQkJaWYgKGRlYmxvZyB8fCBmdHBfZGViKSB7Ci0JCSAgICBpbnQg aTsKLQkJICAgIGZvciAoaSA9IDE7IGkgPCAxNiAmJiBpIDwgbmZlYXR0YWI7IGkrKykgewotCQkJ ZGVidWcoRjExMSwiZnRwX2luaXQgRkVBVCIsZmVhdHRhYltpXS5rd2Qsc2Z0dGFiW2ldKTsKLQkJ CWlmIChmdHBfZGViKQotCQkJICBwcmludGYoIiAgU2VydmVyICVzICVzXG4iLAotCQkJCSBzZnR0 YWJbaV0gPyAic3VwcG9ydHMiIDogImRvZXMgbm90IHN1cHBvcnQiLAotCQkJCSBmZWF0dGFiW2ld Lmt3ZAotCQkJCSApOwotCQkgICAgfQotCQkgICAgLyogRGVhbCB3aXRoIGRpc2FibGVkIE1MU1Qg b3B0cyBoZXJlIGlmIG5lY2Vzc2FyeSAqLwotCQkgICAgLyogQnV0IHdoeSB3b3VsZCBpdCBiZT8g Ki8KLQkJfQotCSAgICB9Ci0JfQotICAgIH0KLX0KLQotc3RhdGljIGludAotZnRwX2xvZ2luKGhv c3QpIGNoYXIgKiBob3N0OyB7ICAgICAgICAgIC8qIChhbHNvIGNhbGxlZCBmcm9tIGNrdXVzeS5j KSAqLwotICAgIHN0YXRpYyBjaGFyIGZ0cHBhc3NbUEFTU0JVRlNJWl09IiI7Ci0gICAgY2hhciB0 bXBbUEFTU0JVRlNJWl07Ci0gICAgY2hhciAqdXNlciA9IE5VTEwsICpwYXNzID0gTlVMTCwgKmFj Y3QgPSBOVUxMOwotICAgIGludCBuLCBhZmxhZyA9IDA7Ci0gICAgZXh0ZXJuIGNoYXIgdWlkYnVm W107Ci0gICAgZXh0ZXJuIGNoYXIgcHdidWZbXTsKLSAgICBleHRlcm4gaW50ICBwd2ZsZywgcHdj cnlwdDsKLQotICAgIGRlYnVnKEYxMTEsImZ0cF9sb2dpbiIsZnRwX2xvZ25hbWUsZnRwX2xvZyk7 Ci0KLSAgICBpZiAoIWNrc3RyY21wKGZ0cF9sb2duYW1lLCJhbm9ueW1vdXMiLC0xLDApKQotICAg ICAgYW5vbnltb3VzID0gMTsKLSAgICBpZiAoIWNrc3RyY21wKGZ0cF9sb2duYW1lLCJmdHAiLC0x LDApKQotICAgICAgYW5vbnltb3VzID0gMTsKLQotI2lmZGVmIEZUUF9TUlAKLSAgICBpZiAoYXV0 aF90eXBlICYmICFzdHJjbXAoYXV0aF90eXBlLCAiU1JQIikpIHsKLSAgICAgICAgdXNlciA9IHNy cF91c2VyOwotICAgICAgICBwYXNzID0gc3JwX3Bhc3M7Ci0gICAgICAgIGFjY3QgPSBzcnBfYWNj dDsKLSAgICB9IGVsc2UKLSNlbmRpZiAvKiBGVFBfU1JQICovCi0gICAgICBpZiAoYW5vbnltb3Vz KSB7Ci0gICAgICAgICAgdXNlciA9ICJhbm9ueW1vdXMiOwotICAgICAgICAgIGlmIChmdHBfdG1w KSB7CQkvKiBUaGV5IGdhdmUgYSBwYXNzd29yZCAqLwotICAgICAgICAgICAgICBwYXNzID0gZnRw X3RtcDsKLSAgICAgICAgICB9IGVsc2UgaWYgKGZ0cF9hcHcpIHsJCS8qIFNFVCBGVFAgQU5PTllN T1VTLVBBU1NXT1JEICovCi0JICAgICAgcGFzcyA9IGZ0cF9hcHc7Ci0JICB9IGVsc2UgewkJCS8q IFN1cHBseSB1c2VyQGhvc3QgKi8KLQkgICAgICBja21ha21zZyh0bXAsUEFTU0JVRlNJWix3aG9h bWkoKSwiQCIsbXlob3N0LE5VTEwpOwotCSAgICAgIHBhc3MgPSB0bXA7Ci0gICAgICAgICAgfQot CSAgZGVidWcoRjExMCwiZnRwIGFub255bW91cyIscGFzcywwKTsKLSAgICAgIH0gZWxzZSB7Ci0j aWZkZWYgVVNFX1JVU0VSUEFTUwotICAgICAgICAgIGlmIChydXNlcnBhc3MoaG9zdCwgJnVzZXIs ICZwYXNzLCAmYWNjdCkgPCAwKSB7Ci0gICAgICAgICAgICAgIGZ0cGNvZGUgPSAtMTsKLSAgICAg ICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICAgIH0KLSNlbmRpZiAvKiBVU0VfUlVTRVJQQVNT ICovCi0gICAgICAgICAgaWYgKGZ0cF9sb2duYW1lKSB7Ci0gICAgICAgICAgICAgIHVzZXIgPSBm dHBfbG9nbmFtZTsKLSAgICAgICAgICAgICAgcGFzcyA9IGZ0cF90bXA7Ci0gICAgICAgICAgfSBl bHNlIGlmICh1aWRidWZbMF0gJiYgKGZ0cF90bXAgfHwgcHdidWZbMF0gJiYgcHdmbGcpKSB7Ci0g ICAgICAgICAgICAgIHVzZXIgPSB1aWRidWY7Ci0gICAgICAgICAgICAgIGlmIChmdHBfdG1wKSB7 Ci0gICAgICAgICAgICAgICAgICBwYXNzID0gZnRwX3RtcDsKLSAgICAgICAgICAgICAgfSBlbHNl IGlmIChwd2J1ZlswXSAmJiBwd2ZsZykgewotICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KGZ0 cHBhc3MscHdidWYsUEFTU0JVRlNJWik7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgICBp ZiAoIHB3Y3J5cHQgKQotICAgICAgICAgICAgICAgICAgICAgIGNrX2VuY3J5cHQoKGNoYXIgKilm dHBwYXNzKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICAgIHBhc3MgPSBmdHBw YXNzOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGFjY3QgPSBmdHBf YWNjOwotICAgICAgICAgIHdoaWxlICh1c2VyID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgY2hh ciAqbXluYW1lLCBwcm9tcHRbUFJPTVBUU0laXTsKLSAgICAgICAgICAgICAgaW50IG9rOwotCi0g ICAgICAgICAgICAgIG15bmFtZSA9IHdob2FtaSgpOwotICAgICAgICAgICAgICBpZiAobXluYW1l KQotICAgICAgICAgICAgICAgIGNrbWFreG1zZyhwcm9tcHQsUFJPTVBUU0laLCIgTmFtZSAoIixo b3N0LCI6IixteW5hbWUsIik6ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsTlVM TCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgICAgICAgICAgICBlbHNlCi0gICAgICAg ICAgICAgICAgY2ttYWttc2cocHJvbXB0LFBST01QVFNJWiwiIE5hbWUgKCIsaG9zdCwiKTogIixO VUxMKTsKLSAgICAgICAgICAgICAgdG1wWzBdID0gJ1wwJzsKLSAgICAgICAgICAgICAgCi0gICAg ICAgICAgICAgIG9rID0gdXFfdHh0KE5VTEwscHJvbXB0LDEsTlVMTCx0bXAsUEFTU0JVRlNJWixO VUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX1VRX1RJTUVPVVQpOwotICAg ICAgICAgICAgICBpZiAoIW9rIHx8ICp0bXAgPT0gJ1wwJykKLSAgICAgICAgICAgICAgICB1c2Vy ID0gbXluYW1lOwotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdXNlciA9IGJy c3RyaXAodG1wKTsKLSAgICAgICAgICB9Ci0gICAgICB9Ci0gICAgbiA9IGZ0cGNtZCgiVVNFUiIs dXNlciwtMSwtMSxmdHBfdmJtKTsKLSAgICBpZiAobiA9PSBSRVBMWV9DT01QTEVURSkgewotICAg ICAgICAvKiBkZXRlcm1pbmUgaWYgd2UgbmVlZCB0byBzZW5kIGEgZHVtbXkgcGFzc3dvcmQgKi8K LSAgICAgICAgaWYgKGZ0cGNtZCgiUFdEIixOVUxMLDAsMCwwKSAhPSBSRVBMWV9DT01QTEVURSkK LSAgICAgICAgICBmdHBjbWQoIlBBU1MgZHVtbXkiLE5VTEwsMCwwLDEpOwotICAgIH0gZWxzZSBp ZiAobiA9PSBSRVBMWV9DT05USU5VRSkgewotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAg aW50IG9sZGZ0cF9jcGw7Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotCi0gICAgICAgIGlm IChwYXNzID09IE5VTEwpIHsKLSAgICAgICAgICAgIGludCBvazsKLSAgICAgICAgICAgIHNldGlu dCgpOwotICAgICAgICAgICAgb2sgPSB1cV90eHQoTlVMTCwiIFBhc3N3b3JkOiAiLDIsTlVMTCxm dHBwYXNzLFBBU1NCVUZTSVosTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRf VVFfVElNRU9VVCk7Ci0gICAgICAgICAgICBpZiAob2spCi0gICAgICAgICAgICAgICAgcGFzcyA9 IGJyc3RyaXAoZnRwcGFzcyk7Ci0gICAgICAgIH0KLQotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAg ICAgICAgb2xkZnRwX2NwbCA9IGZ0cF9jcGw7Ci0gICAgICAgIGZ0cF9jcGwgPSBGUExfUFJWOwot I2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSAgICAgICAgbiA9IGZ0cGNtZCgiUEFTUyIscGFz cywtMSwtMSwxKTsKLSAgICAgICAgaWYgKCFhbm9ueW1vdXMgJiYgcGFzcykgewotICAgICAgICAg ICAgY2hhciAqIHAgPSBwYXNzOwotICAgICAgICAgICAgd2hpbGUgKCpwKyspICoocC0xKSA9IE5V TDsKLSAgICAgICAgICAgIG1ha2VzdHIoJmZ0cF90bXAsTlVMTCk7Ci0gICAgICAgIH0KLSNpZmRl ZiBDS19FTkNSWVBUSU9OCi0gICAgICAgIC8qIGxldmVsIG1heSBoYXZlIGNoYW5nZWQgKi8KLSAg ICAgICAgaWYgKGZ0cF9jcGwgPT0gRlBMX1BSVikKLSAgICAgICAgICBmdHBfY3BsID0gb2xkZnRw X2NwbDsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAgfQotICAgIGlmIChuID09IFJF UExZX0NPTlRJTlVFKSB7Ci0gICAgICAgIGFmbGFnKys7Ci0gICAgICAgIGlmIChhY2N0ID09IE5V TEwpIHsKLSAgICAgICAgICAgIHN0YXRpYyBjaGFyIGZ0cGFjY3RbODBdOwotICAgICAgICAgICAg aW50IG9rOwotICAgICAgICAgICAgc2V0aW50KCk7Ci0gICAgICAgICAgICBvayA9IHVxX3R4dChO VUxMLCIgQWNjb3VudDogIiwyLE5VTEwsZnRwYWNjdCw4MCxOVUxMLAotICAgICAgICAgICAgICAg ICAgICAgICAgREVGQVVMVF9VUV9USU1FT1VUKTsKLSAgICAgICAgICAgIGlmIChvaykKLSAgICAg ICAgICAgICAgICBhY2N0ID0gYnJzdHJpcChmdHBhY2N0KTsKLSAgICAgICAgfQotICAgICAgICBu ID0gZnRwY21kKCJBQ0NUIixhY2N0LC0xLC0xLGZ0cF92Ym0pOwotICAgIH0KLSAgICBpZiAobiAh PSBSRVBMWV9DT01QTEVURSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZUUCBsb2dpbiBm YWlsZWQuXG4iKTsKLSAgICAgICAgaWYgKGhhdmV1cmwpCi0gICAgICAgICAgZG9leGl0KEJBRF9F WElULC0xKTsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSAgICBpZiAoIWFmbGFnICYmIGFj Y3QgIT0gTlVMTCkgewotICAgICAgICBmdHBjbWQoIkFDQ1QiLGFjY3QsLTEsLTEsZnRwX3ZibSk7 Ci0gICAgfQotICAgIG1ha2VzdHIoJmZ0cF9sb2duYW1lLHVzZXIpOwotICAgIGxvZ2dlZGluID0g MTsKLSNpZmRlZiBMT0NVUwotICAgIC8qIFVucHJlZml4ZWQgZmlsZSBtYW5hZ2VtZW50IGNvbW1h bmRzIGdvIHRvIHNlcnZlciAqLwotICAgIGlmIChhdXRvbG9jdXMgJiYgIWZ0cF9jbWRsaW4pIHsK LQlzZXRsb2N1cygwLDEpOwotICAgIH0KLSNlbmRpZiAvKiBMT0NVUyAqLwotICAgIGZ0cF9pbml0 KCk7Ci0KLSAgICBpZiAoYW5vbnltb3VzICYmICFxdWlldCkgewotICAgICAgICBwcmludGYoIiBM b2dnZWQgaW4gYXMgYW5vbnltb3VzICglcylcbiIscGFzcyk7Ci0gICAgICAgIG1lbXNldChwYXNz LCAwLCBzdHJsZW4ocGFzcykpOwotICAgIH0KLSAgICBpZiAoZnRwX3JkaXIpIHsKLSAgICAgICAg aWYgKGRvZnRwY3dkKGZ0cF9yZGlyLC0xKSA8IDEpCi0gICAgICAgICAgZG9leGl0KEJBRF9FWElU LC0xKTsKLSAgICB9Ci0KLSNpZmRlZiBGVFBfUFJPWFkKLSAgICBpZiAocHJveHkpCi0gICAgICBy ZXR1cm4oMSk7Ci0jZW5kaWYgLyogRlRQX1BST1hZICovCi0gICAgcmV0dXJuKDEpOwotfQotCi1z dGF0aWMgaW50Ci1mdHBfcmVzZXQoKSB7Ci0gICAgaW50IHJjOwotI2lmZGVmIEJTRFNFTEVDVAot ICAgIGludCBuZm5kID0gMTsKLSAgICBmZF9zZXQgbWFzazsKLSAgICBGRF9aRVJPKCZtYXNrKTsK LSAgICB3aGlsZSAobmZuZCA+IDApIHsKLSAgICAgICAgRkRfU0VUKGNzb2NrZXQsICZtYXNrKTsK LSAgICAgICAgaWYgKChuZm5kID0gZW1wdHkoJm1hc2ssMCkpIDwgMCkgewotICAgICAgICAgICAg cGVycm9yKCJyZXNldCIpOwotICAgICAgICAgICAgZnRwY29kZSA9IC0xOwotICAgICAgICAgICAg bG9zdHBlZXIoKTsKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgfSBlbHNlIGlmIChu Zm5kKSB7Ci0gICAgICAgICAgICBnZXRyZXBseSgwLC0xLC0xLGZ0cF92Ym0sMCk7Ci0gICAgICAg IH0KLSAgICB9Ci0jZWxzZSAvKiBCU0RTRUxFQ1QgKi8KLSNpZmRlZiBJQk1TRUxFQ1QKLSAgICBp bnQgbmZuZCA9IDE7Ci0gICAgd2hpbGUgKG5mbmQgPiAwKSB7Ci0gICAgICAgIGlmICgobmZuZCA9 IGVtcHR5KCZjc29ja2V0LDEsMCkpIDwgMCkgewotICAgICAgICAgICAgcGVycm9yKCJyZXNldCIp OwotICAgICAgICAgICAgZnRwY29kZSA9IC0xOwotICAgICAgICAgICAgbG9zdHBlZXIoKTsKLSAg ICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgfSBlbHNlIGlmIChuZm5kKSB7Ci0gICAgICAg ICAgICBnZXRyZXBseSgwLC0xLC0xLGZ0cF92Ym0sMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5k aWYgLyogSUJNU0VMRUNUICovCi0jZW5kaWYgLyogQlNEU0VMRUNUICovCi0gICAgcmMgPSAoZnRw Y21kKCJSRUlOIixOVUxMLDAsMCxmdHBfdmJtKSA9PSBSRVBMWV9DT01QTEVURSk7Ci0gICAgaWYg KHJjID4gMCkKLSAgICAgIGxvZ2dlZGluID0gMDsKLSAgICByZXR1cm4ocmMpOwotfQotCi1zdGF0 aWMgaW50Ci1mdHBfcmVuYW1lKGZyb20sIHRvKSBjaGFyICogZnJvbSwgKiB0bzsgewotICAgIGlu dCBsY3MgPSAtMSwgcmNzID0gLTE7Ci0jaWZuZGVmIE5PQ1NFVFMKLSAgICBpZiAoZnRwX3hsYSkg ewotICAgICAgICBsY3MgPSBmdHBfY3NsOwotICAgICAgICBpZiAobGNzIDwgMCkgbGNzID0gZmNo YXJzZXQ7Ci0gICAgICAgIHJjcyA9IGZ0cF9jc3g7Ci0gICAgICAgIGlmIChyY3MgPCAwKSByY3Mg PSBmdHBfY3NyOwotICAgIH0KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0gICAgaWYgKGZ0cGNtZCgi Uk5GUiIsZnJvbSxsY3MscmNzLGZ0cF92Ym0pID09IFJFUExZX0NPTlRJTlVFKSB7Ci0gICAgICAg IHJldHVybihmdHBjbWQoIlJOVE8iLHRvLGxjcyxyY3MsZnRwX3ZibSkgPT0gUkVQTFlfQ09NUExF VEUpOwotICAgIH0KLSAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBG YWlsdXJlICovCi19Ci0KLXN0YXRpYyBpbnQKLWZ0cF91bWFzayhtYXNrKSBjaGFyICogbWFzazsg ewotICAgIGludCByYzsKLSAgICByYyA9IChmdHBjbWQoIlNJVEUgVU1BU0siLG1hc2ssLTEsLTEs MSkgPT0gUkVQTFlfQ09NUExFVEUpOwotICAgIHJldHVybihyYyk7Ci19Ci0KLXN0YXRpYyBpbnQK LWZ0cF91c2VyKHVzZXIscGFzcyxhY2N0KSBjaGFyICogdXNlciwgKiBwYXNzLCAqIGFjY3Q7IHsK LSAgICBpbnQgbiA9IDAsIGFmbGFnID0gMDsKLSAgICBjaGFyIHB3ZFtQV0RTSVpdOwotCi0gICAg aWYgKCFhdXRoX3R5cGUgJiYgZnRwX2F1dCkgewotI2lmZGVmIEZUUF9TUlAKLSAgICAgICAgaWYg KGNrX3NycF9pc19pbnN0YWxsZWQoKSkgewotICAgICAgICAgICAgaWYgKHNycF9mdHBfYXV0aCgg TlVMTCwgdXNlciwgcGFzcykpIHsKLSAgICAgICAgICAgICAgICBtYWtlc3RyKCZwYXNzLHNycF9w YXNzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIEZUUF9TUlAgKi8KLSAg ICB9Ci0gICAgbiA9IGZ0cGNtZCgiVVNFUiIsdXNlciwtMSwtMSxmdHBfdmJtKTsKLSAgICBpZiAo biA9PSBSRVBMWV9DT01QTEVURSkKLSAgICAgIG4gPSBmdHBjbWQoIlBBU1MgZHVtbXkiLE5VTEws MCwwLDEpOwotICAgIGVsc2UgaWYgKG4gPT0gUkVQTFlfQ09OVElOVUUpIHsKLSNpZmRlZiBDS19F TkNSWVBUSU9OCi0gICAgICAgIGludCBvbGRmdHBfY3BsOwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJ T04gKi8KLSAgICAgICAgaWYgKHBhc3MgPT0gTlVMTCB8fCAhcGFzc1swXSkgewotICAgICAgICAg ICAgaW50IG9rOwotICAgICAgICAgICAgcHdkWzBdID0gJ1wwJzsKLSAgICAgICAgICAgIHNldGlu dCgpOwotICAgICAgICAgICAgb2sgPSB1cV90eHQoTlVMTCwiIFBhc3N3b3JkOiAiLDIsTlVMTCxw d2QsUFdEU0laLE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX1VRX1RJTUVP VVQpOwotICAgICAgICAgICAgaWYgKG9rKQotICAgICAgICAgICAgICAgIHBhc3MgPSBicnN0cmlw KHB3ZCk7Ci0gICAgICAgIH0KLQotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgaWYgKChv bGRmdHBfY3BsID0gZnRwX2NwbCkgPT0gUFJPVF9TKQotICAgICAgICAgIGZ0cF9jcGwgPSBQUk9U X1A7Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotICAgICAgICBuID0gZnRwY21kKCJQQVNT IixwYXNzLC0xLC0xLDEpOwotICAgICAgICBtZW1zZXQocGFzcywgMCwgc3RybGVuKHBhc3MpKTsK LSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAgIC8qIGxldmVsIG1heSBoYXZlIGNoYW5nZWQg Ki8KLSAgICAgICAgaWYgKGZ0cF9jcGwgPT0gUFJPVF9QKQotICAgICAgICAgIGZ0cF9jcGwgPSBv bGRmdHBfY3BsOwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSAgICB9Ci0gICAgaWYgKG4g PT0gUkVQTFlfQ09OVElOVUUpIHsKLSAgICAgICAgaWYgKGFjY3QgPT0gTlVMTCB8fCAhYWNjdFsw XSkgewotICAgICAgICAgICAgaW50IG9rOwotICAgICAgICAgICAgcHdkWzBdID0gJ1wwJzsKLSAg ICAgICAgICAgIHNldGludCgpOwotICAgICAgICAgICAgb2sgPSB1cV90eHQoTlVMTCwiIEFjY291 bnQ6ICIsMixOVUxMLHB3ZCxQV0RTSVosTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgIERF RkFVTFRfVVFfVElNRU9VVCk7Ci0gICAgICAgICAgICBpZiAob2spCi0gICAgICAgICAgICAgICAg YWNjdCA9IHB3ZDsKLSAgICAgICAgfQotICAgICAgICBuID0gZnRwY21kKCJBQ0NUIixhY2N0LC0x LC0xLGZ0cF92Ym0pOwotICAgICAgICBhZmxhZysrOwotICAgIH0KLSAgICBpZiAobiAhPSBSRVBM WV9DT01QTEVURSkgewotICAgICAgICBwcmludGYoIkxvZ2luIGZhaWxlZC5cbiIpOwotICAgICAg ICByZXR1cm4oMCk7Ci0gICAgfQotICAgIGlmICghYWZsYWcgJiYgYWNjdCAhPSBOVUxMICYmIGFj Y3RbMF0pIHsKLSAgICAgICAgbiA9IGZ0cGNtZCgiQUNDVCIsYWNjdCwtMSwtMSxmdHBfdmJtKTsK LSAgICB9Ci0gICAgaWYgKG4gPT0gUkVQTFlfQ09NUExFVEUpIHsKLSAgICAgICAgbWFrZXN0cigm ZnRwX2xvZ25hbWUsdXNlcik7Ci0gICAgICAgIGxvZ2dlZGluID0gMTsKLSAgICAgICAgZnRwX2lu aXQoKTsKLSAgICAgICAgcmV0dXJuKDEpOwotICAgIH0KLSAgICByZXR1cm4oMCk7Ci19Ci0KLWNo YXIgKgotZnRwX2F1dGh0eXBlKCkgewotICAgIGlmICghY29ubmVjdGVkKQotICAgICAgcmV0dXJu KCJOVUxMIik7Ci0gICAgcmV0dXJuKGF1dGhfdHlwZSA/IGF1dGhfdHlwZSA6ICJOVUxMIik7Ci19 Ci0KLWNoYXIgKgotZnRwX2NwbF9tb2RlKCkgewotICAgIHN3aXRjaCAoZnRwX2NwbCkgewotICAg ICAgY2FzZSBGUExfQ0xSOgotICAgICAgICByZXR1cm4oImNsZWFyIik7Ci0gICAgICBjYXNlIEZQ TF9TQUY6Ci0gICAgICAgIHJldHVybigic2FmZSIpOwotICAgICAgY2FzZSBGUExfUFJWOgotICAg ICAgICByZXR1cm4oInByaXZhdGUiKTsKLSAgICAgIGNhc2UgRlBMX0NPTjoKLSAgICAgICAgcmV0 dXJuKCJjb25maWRlbnRpYWwiKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybigiKGVy cm9yKSIpOwotICAgIH0KLX0KLQotY2hhciAqCi1mdHBfZHBsX21vZGUoKSB7Ci0gICAgc3dpdGNo IChmdHBfZHBsKSB7Ci0gICAgICBjYXNlIEZQTF9DTFI6Ci0gICAgICAgIHJldHVybigiY2xlYXIi KTsKLSAgICAgIGNhc2UgRlBMX1NBRjoKLSAgICAgICAgcmV0dXJuKCJzYWZlIik7Ci0gICAgICBj YXNlIEZQTF9QUlY6Ci0gICAgICAgIHJldHVybigicHJpdmF0ZSIpOwotICAgICAgY2FzZSBGUExf Q09OOgotICAgICAgICByZXR1cm4oImNvbmZpZGVudGlhbCIpOwotICAgICAgZGVmYXVsdDoKLSAg ICAgICAgcmV0dXJuKCIoZXJyb3IpIik7Ci0gICAgfQotfQotCi0KLS8qIHJlbW90ZV9maWxlcygp ICovCi0vKgotICAgUmV0dXJucyBuZXh0IHJlbW90ZSBmaWxlbmFtZSBvbiBzdWNjZXNzOwotICAg TlVMTCBvbiBlcnJvciBvciBubyBtb3JlIGZpbGVzIHdpdGggZ2xvYmFsIHJmcmMgc2V0IHRvOgot ICAgICAtMTogQmFkIGFyZ3VtZW50Ci0gICAgIC0yOiBTZXJ2ZXIgZXJyb3IgcmVzcG9uc2UgdG8g TkxTVCwgZS5nLiBmaWxlIG5vdCBmb3VuZAotICAgICAtMzogTm8gbW9yZSBmaWxlcwotICAgICAt OTogSW50ZXJuYWwgZXJyb3IKLSovCi0jZGVmaW5lIEZUUE5BTUJVRkxFTiBDS01BWFBBVEgrMTAy NAotCi0vKiBDaGVjazogY2ttYXhmaWxlcyBDS01BWE9QRU4gKi8KLQotI2RlZmluZSBNTFNERVBU SCAxMjgJCQkvKiBTdGFjayBvZiBvcGVuIHRlbXAgZmlsZXMgKi8KLXN0YXRpYyBpbnQgbWxzZGVw dGggPSAwOwkJLyogVGVtcCBmaWxlIHN0YWNrIGRlcHRoICovCi1zdGF0aWMgRklMRSAqIHRtcGZp bHB0cltNTFNERVBUSCsxXSA9IHsgTlVMTCwgTlVMTCB9OyAvKiBUZW1wIGZpbGUgcG9pbnRlcnMg Ki8KLXN0YXRpYyBjaGFyICogdG1wZmlsbmFtW01MU0RFUFRIKzFdID0geyBOVUxMLCBOVUxMIH07 IC8qIFRlbXAgZmlsZSBuYW1lcyAqLwotCi1zdGF0aWMgVk9JRAotbWxzcmVzZXQoKSB7CQkJCS8q IFJlc2V0IE1HRVQgdGVtcC1maWxlIHN0YWNrICovCi0gICAgaW50IGk7Ci0gICAgZm9yIChpID0g MDsgaSA8PSBtbHNkZXB0aDsgaSsrKSB7Ci0JaWYgKHRtcGZpbHB0cltpXSkgewotCSAgICBmY2xv c2UodG1wZmlscHRyW2ldKTsKLQkgICAgdG1wZmlscHRyW2ldID0gTlVMTDsKLQkgICAgaWYgKHRt cGZpbG5hbVtpXSkgewotI2lmZGVmIE9TMgotCQl1bmxpbmsodG1wZmlsbmFtW2ldKTsKLSNlbmRp ZiAvKiBPUzIgKi8KLQkJZnJlZSh0bXBmaWxuYW1baV0pOwotCSAgICB9Ci0JfQotICAgIH0KLSAg ICBtbHNkZXB0aCA9IDA7Ci19Ci0KLXN0YXRpYyBDSEFSICoKLSNpZmRlZiBDS19BTlNJQwotcmVt b3RlX2ZpbGVzKGludCBuZXdfcXVlcnksIENIQVIgKiBhcmcsIENIQVIgKiBwYXR0ZXJuLCBpbnQg cHJveHlfc3dpdGNoKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLXJlbW90ZV9maWxlcyhuZXdfcXVl cnksIGFyZywgcGF0dGVybiwgcHJveHlfc3dpdGNoKQotICAgIGludCBuZXdfcXVlcnk7Ci0gICAg Q0hBUiAqIGFyZzsJCQkJLyogVGhhdCB3ZSBzZW5kIHRvIHRoZSBzZXJ2ZXIgKi8KLSAgICBDSEFS ICogcGF0dGVybjsJCQkvKiBUaGF0IHdlIHVzZSBsb2NhbGx5ICovCi0gICAgaW50IHByb3h5X3N3 aXRjaDsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogcmVtb3RlX2ZpbGVzICovIHsKLSAgICBz dGF0aWMgQ0hBUiBidWZbRlRQTkFNQlVGTEVOXTsKLSAgICBDSEFSICpjcCwgKndoaWNoYXJnOwot ICAgIGNoYXIgKiBjZHRvID0gTlVMTDsKLSAgICBjaGFyICogcDsKLSAgICBpbnQgaSwgeCwgZm9y Y2VkID0gMDsKLSAgICBpbnQgbGNzID0gMCwgcmNzID0gMCwgeGxhdGUgPSAwOwotCi0gICAgZGVi dWcoRjEwMSwiZnRwIHJlbW90ZV9maWxlcyBuZXdfcXVlcnkiLCIiLG5ld19xdWVyeSk7Ci0gICAg ZGVidWcoRjExMCwiZnRwIHJlbW90ZV9maWxlcyBhcmciLGFyZywwKTsKLSAgICBkZWJ1ZyhGMTEw LCJmdHAgcmVtb3RlX2ZpbGVzIHBhdHRlcm4iLHBhdHRlcm4sMCk7Ci0KLSAgICByZnJjID0gLTE7 Ci0gICAgaWYgKHBhdHRlcm4pCQkJLyogVHJlYXQgZW1wdHkgcGF0dGVybiBzYW1lIGFzIE5VTEwg Ki8KLSAgICAgIGlmICghKnBhdHRlcm4pCi0JcGF0dGVybiA9IE5VTEw7Ci0gICAgaWYgKGFyZykJ CQkJLyogRGl0dG8gZm9yIGFyZyAqLwotICAgICAgaWYgKCEqYXJnKQotCWFyZyA9IE5VTEw7Ci0K LSAgYWdhaW46Ci0KLSAgICBpZiAobmV3X3F1ZXJ5KSB7Ci0gICAgICAgIGlmICh0bXBmaWxwdHJb bWxzZGVwdGhdKSB7Ci0gICAgICAgICAgICBmY2xvc2UodG1wZmlscHRyW21sc2RlcHRoXSk7Ci0g ICAgICAgICAgICB0bXBmaWxwdHJbbWxzZGVwdGhdID0gTlVMTDsKLSNpZmRlZiBPUzIKLSAgICAg ICAgICAgIGlmICghZnRwX2RlYiAmJiAhZGVibG9nKQotICAgICAgICAgICAgICB1bmxpbmsodG1w ZmlsbmFtW21sc2RlcHRoXSk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgIH0KLSAgICB9Ci0g ICAgaWYgKHRtcGZpbHB0clttbHNkZXB0aF0gPT0gTlVMTCkgewotICAgICAgICBleHRlcm4gY2hh ciAqIHRlbXBkaXI7Ci0gICAgICAgIGNoYXIgKiBwOwotICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAg cmVtb3RlX2ZpbGVzIHRlbXBkaXIiLHRlbXBkaXIsMCk7Ci0gICAgICAgIGlmICh0ZW1wZGlyKSB7 Ci0gICAgICAgICAgICBwID0gdGVtcGRpcjsKLSAgICAgICAgfSBlbHNlIHsKLSNpZmRlZiBPUzIK LSNpZmRlZiBOVAotICAgICAgICAgICAgcCA9IGdldGVudigiSzk1VE1QIik7Ci0jZWxzZQotICAg ICAgICAgICAgcCA9IGdldGVudigiSzJUTVAiKTsKLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICAg ICAgaWYgKCFwKQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICBwID0gZ2V0ZW52KCJD S19UTVAiKTsKLSAgICAgICAgICAgIGlmICghcCkKLSAgICAgICAgICAgICAgcCA9IGdldGVudigi VE1QRElSIik7Ci0gICAgICAgICAgICBpZiAoIXApIHAgPSBnZXRlbnYoIlRFTVAiKTsKLSAgICAg ICAgICAgIGlmICghcCkgcCA9IGdldGVudigiVE1QIik7Ci0jaWZkZWYgT1MyT1JVTklYCi0gICAg ICAgICAgICBpZiAocCkgewotICAgICAgICAgICAgICAgIGludCBsZW4gPSBzdHJsZW4ocCk7Ci0g ICAgICAgICAgICAgICAgaWYgKHBbbGVuLTFdICE9ICcvJwotI2lmZGVmIE9TMgotICAgICAgICAg ICAgICAgICAgICAmJiBwW2xlbi0xXSAhPSAnXFwnCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAg ICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGljIGNoYXIgZm9vW0NL TUFYUEFUSF07Ci0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShmb28scCxDS01BWFBBVEgp OwotICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQoZm9vLCIvIixDS01BWFBBVEgpOwotICAg ICAgICAgICAgICAgICAgICBwID0gZm9vOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg IH0gZWxzZQotI2Vsc2UgLyogT1MyT1JVTklYICovCi0gICAgICAgICAgICBpZiAoIXApCi0jZW5k aWYgLyogT1MyT1JVTklYICovCi0jaWZkZWYgVU5JWCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogU3lzdGVtcyB0aGF0IGhhdmUgYSBzdGFuZGFyZCAqLwotICAgICAgICAgICAgICAgIHAg PSAiL3RtcC8iOyAgICAgICAgICAgIC8qIHRlbXBvcmFyeSBkaXJlY3RvcnkuLi4gKi8KLSNlbHNl Ci0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICAgICAgICAgIHAgPSAiOlRNUDoiOwotI2Vsc2UKLSAg ICAgICAgICAgIHAgPSAiIjsKLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8qIFVO SVggKi8KLSAgICAgICAgfQotICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgcmVtb3RlX2ZpbGVzIHAi LHAsMCk7Ci0KLQkvKiBHZXQgdGVtcCBmaWxlICovCi0KLQlpZiAoKHRtcGZpbG5hbVttbHNkZXB0 aF0gPSAoY2hhciAqKW1hbGxvYyhDS01BWFBBVEgrMSkpKSB7Ci0JICAgIGNrbWFrbXNnKChjaGFy ICopdG1wZmlsbmFtW21sc2RlcHRoXSwKLQkJICAgICBDS01BWFBBVEgrMSxwLCJja1hYWFhYWCIs TlVMTCxOVUxMKTsKLQl9IGVsc2UgewotCSAgICBwcmludGYoIj9NYWxsb2MgZmFpbHVyZTogcmVt b3RlX2ZpbGVzKClcbiIpOwotCSAgICByZXR1cm4oTlVMTCk7Ci0JfQotCi0jaWZkZWYgTlQKLQl7 Ci0JICAgIGNoYXIgKiB0bXBmaWwgPSBta3RlbXAoKGNoYXIgKil0bXBmaWxuYW1bbWxzZGVwdGhd KTsKLQkgICAgaWYgKCB0bXBmaWwgKQotCQlja3N0cm5jcHkodG1wZmlsbmFtW21sc2RlcHRoXSx0 bXBmaWwsQ0tNQVhQQVRIKzEpOwotCX0KLSNlbHNlIC8qIE5UICovCi0jaWZkZWYgTUtURU1QCi0j aWZkZWYgTUtTVEVNUAotCXggPSBta3N0ZW1wKChjaGFyICopdG1wZmlsbmFtW21sc2RlcHRoXSk7 Ci0JaWYgKHggPiAtMSkgY2xvc2UoeCk7CQkvKiBXZSBqdXN0IHdhbnQgdGhlIG5hbWUuICovCi0j ZWxzZQotICAgICAgICBta3RlbXAoKGNoYXIgKil0bXBmaWxuYW1bbWxzZGVwdGhdKTsKLSNlbmRp ZiAvKiBNS1NURU1QICovCi0gICAgICAgIC8qIGlmIG5vIG1rdG1wbmFtKCkgdGhlIG5hbWUgd2ls bCBqdXN0IGJlICJja1hYWFhYWCIuLi4gKi8KLSNlbmRpZiAvKiBNS1RFTVAgKi8KLSNlbmRpZiAv KiBOVCAqLwotCi0JZGVidWcoRjExMSwiZnRwIHJlbW90ZV9maWxlcyB0bXBmaWxuYW1bbWxzZGVw dGhdIiwKLQkgICAgICB0bXBmaWxuYW1bbWxzZGVwdGhdLG1sc2RlcHRoKTsKLQotI2lmZGVmIEZU UF9QUk9YWQotICAgICAgICBpZiAocHJveHlfc3dpdGNoKSB7Ci0gICAgICAgICAgICBwc3dpdGNo KCFwcm94eSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBGVFBfUFJPWFkgKi8KLQotICAgICAgICBk ZWJ1ZyhGMTAxLCJmdHAgcmVtb3RlX2ZpbGVzIGZ0cF94bGEiLCIiLGZ0cF94bGEpOwotICAgICAg ICBkZWJ1ZyhGMTAxLCJmdHAgcmVtb3RlX2ZpbGVzIGZ0cF9jc2wiLCIiLGZ0cF9jc2wpOwotICAg ICAgICBkZWJ1ZyhGMTAxLCJmdHAgcmVtb3RlX2ZpbGVzIGZ0cF9jc3IiLCIiLGZ0cF9jc3IpOwot Ci0jaWZuZGVmIE5PQ1NFVFMKLSAgICAgICAgeGxhdGUgPSBmdHBfeGxhOyAgICAgICAgICAgICAg ICAvKiBTRVQgRlRQIENIQVJBQ1RFUi1TRVQtVFJBTlNMQVRJT04gKi8KLSAgICAgICAgaWYgKHhs YXRlKSB7ICAgICAgICAgICAgICAgICAgICAvKiBPTj8gKi8KLSAgICAgICAgICAgIGxjcyA9IGZ0 cF9jc2w7ICAgICAgICAgICAgICAvKiBMb2NhbCBjaGFyc2V0ICovCi0gICAgICAgICAgICBpZiAo bGNzIDwgMCkgbGNzID0gZmNoYXJzZXQ7Ci0gICAgICAgICAgICBpZiAobGNzIDwgMCkgeGxhdGUg PSAwOwotICAgICAgICB9Ci0gICAgICAgIGlmICh4bGF0ZSkgeyAgICAgICAgICAgICAgICAgICAg LyogU3RpbGwgT04/ICovCi0gICAgICAgICAgICByY3MgPSBmdHBfY3N4OyAgICAgICAgICAgICAg LyogUmVtb3RlIChTZXJ2ZXIpIGNoYXJzZXQgKi8KLSAgICAgICAgICAgIGlmIChyY3MgPCAwKSBy Y3MgPSBmdHBfY3NyOwotICAgICAgICAgICAgaWYgKHJjcyA8IDApIHhsYXRlID0gMDsKLSAgICAg ICAgfQotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQotCWZvcmNlZCA9IG1nZXRmb3JjZWQ7CQkvKiBN R0VUIG1ldGhvZCBmb3JjZWQ/ICovCi0JaWYgKCFmb3JjZWQgfHwgIW1nZXRtZXRob2QpCS8qIE5v dCBmb3JjZWQuLi4gKi8KLQkgIG1nZXRtZXRob2QgPSAoc2Z0dGFiWzBdICYmIHNmdHRhYltTRlRf TUxTVF0pID8gLyogc28gcGljayBvbmUgKi8KLQkgICAgICBTTkRfTUxTIDoKLQkgICAgICBTTkRf TkxTOyAKLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICBV c2VyJ3MgQ29tbWFuZDogICAgICAgICAgICAgICAgIFJlc3VsdDoKLSAgICBtZ2V0IC9ubHN0ICAg ICAgICAgICAgICAgICAgICAgTkxTVCAoTlVMTCkKLSAgICBtZ2V0IC9ubHN0IGZvbyAgICAgICAg ICAgICAgICAgTkxTVCBmb28KLSAgICBtZ2V0IC9ubHN0ICoudHh0ICAgICAgICAgICAgICAgTkxT VCAqLnR4dCAKLSAgICBtZ2V0IC9ubHN0IC9tYXRjaDoqLnR4dCAgICAgICAgTkxTVCAoTlVMTCkK LSAgICBtZ2V0IC9ubHN0IC9tYXRjaDoqLnR4dCAgZm9vICAgTkxTVCBmb28gICAKLSAgICBtZ2V0 IC9tbHNkICAgICAgICAgICAgICAgICAgICAgTUxTRCAoTlVMTCkKLSAgICBtZ2V0IC9tbHNkIGZv byAgICAgICAgICAgICAgICAgTUxTRCBmb28KLSAgICBtZ2V0IC9tbHNkICoudHh0ICAgICAgICAg ICAgICAgTUxTRCAoTlVMTCkKLSAgICBtZ2V0IC9tbHNkIC9tYXRjaDoqLnR4dCAgICAgICAgTUxT RCAoTlVMTCkKLSAgICBtZ2V0IC9tbHNkIC9tYXRjaDoqLnR4dCAgZm9vICAgTUxTRCBmb28KLSov Ci0JeCA9IC0xOwotCXdoaWxlICh4IDwgMCkgewotCSAgICBpZiAocGF0dGVybikgewkJLyogRG9u J3Qgc2ltcGxpZnkgdGhpcyEgKi8KLQkJd2hpY2hhcmcgPSBhcmc7Ci0JICAgIH0gZWxzZSBpZiAo bWdldG1ldGhvZCA9PSBTTkRfTUxTKSB7Ci0JCWlmIChhcmcpCi0JCSAgd2hpY2hhcmcgPSBpc3dp bGQoKGNoYXIgKilhcmcpID8gTlVMTCA6IGFyZzsKLQkJZWxzZQotCQkgIHdoaWNoYXJnID0gTlVM TDsKLQkgICAgfSBlbHNlIHsKLQkJd2hpY2hhcmcgPSBhcmc7Ci0JICAgIH0KLQkgICAgZGVidWco RjExMCwiZnRwIHJlbW90ZV9maWxlcyBtZ2V0bWV0aG9kIiwKLQkJICBtZ2V0bWV0aG9kID09IFNO RF9NTFMgPyAiTUxTRCIgOiAiTkxTVCIsIDApOwotCSAgICBkZWJ1ZyhGMTEwLCJmdHAgcmVtb3Rl X2ZpbGVzIHdoaWNoYXJnIix3aGljaGFyZywwKTsKLQotCSAgICB4ID0gcmVjdnJlcXVlc3QoKG1n ZXRtZXRob2QgPT0gU05EX01MUykgPyAiTUxTRCIgOiAiTkxTVCIsCi0JCQkgICAgKGNoYXIgKil0 bXBmaWxuYW1bbWxzZGVwdGhdLAotCQkJICAgIChjaGFyICopd2hpY2hhcmcsCi0JCQkgICAgIndi IiwKLQkJCSAgICAwLAotCQkJICAgIDAsCi0JCQkgICAgTlVMTCwKLQkJCSAgICB4bGF0ZSwKLQkJ CSAgICBsY3MsCi0JCQkgICAgcmNzCi0JCQkgICAgKTsKLQkgICAgaWYgKHggPCAwKSB7CQkvKiBD aG9zZW4gbWV0aG9kIHdhc24ndCBhY2NlcHRlZCAqLwotCQlpZiAoZm9yY2VkKSB7Ci0JCSAgICBp ZiAoZnRwY29kZSA+IDUwMCAmJiBmdHBjb2RlIDwgNTA1ICYmICFxdWlldCkKLQkJICAgICAgcHJp bnRmKCI/JXM6IE5vdCBzdXBwb3J0ZWQgYnkgc2VydmVyXG4iLAotCQkJICAgICBtZ2V0bWV0aG9k ID09IFNORF9NTFMgPyAiTUxTRCIgOiAiTkxTVCIKLQkJCSAgICAgKTsKLQkJICAgIHJmcmMgPSAt MjsJCS8qIEZhaWwgKi8KLQkJICAgIHJldHVybihOVUxMKTsKLQkJfQotCQkvKiBOb3QgZm9yY2Vk IC0gaWYgTUxTRCBmYWlsZWQsIHRyeSBOTFNUICovCi0JCWlmIChtZ2V0bWV0aG9kID09IFNORF9N TFMpIHsgIC8qIFNlcnZlciBsaWVkIGFib3V0IE1MU1QgKi8KLQkJICAgIHNmdHRhYltTRlRfTUxT VF0gPSAwOyAgICAgLyogU28gZGlzYWJsZSBpdCAqLwotCQkgICAgbWxzdG9rID0gMDsJCSAgICAg IC8qIGFuZCAqLwotCQkgICAgbWdldG1ldGhvZCA9IFNORF9OTFM7ICAgICAvKiB0cnkgTkxTVCAq LwotCQkgICAgY29udGludWU7Ci0JCX0KLQkJcmZyYyA9IC0yOwotCQlyZXR1cm4oTlVMTCk7Ci0J ICAgIH0KLQl9Ci0jaWZkZWYgRlRQX1BST1hZCi0gICAgICAgIGlmIChwcm94eV9zd2l0Y2gpIHsK LSAgICAgICAgICAgIHBzd2l0Y2goIXByb3h5KTsKLSAgICAgICAgfQotI2VuZGlmIC8qIEZUUF9Q Uk9YWSAqLwotICAgICAgICB0bXBmaWxwdHJbbWxzZGVwdGhdID0gZm9wZW4oKGNoYXIgKil0bXBm aWxuYW1bbWxzZGVwdGhdLCAiciIpOwotI2lmbmRlZiBPUzIKLQlpZiAodG1wZmlscHRyW21sc2Rl cHRoXSkgewotCSAgICBpZiAoIWZ0cF9kZWIgJiYgIWRlYmxvZykKLQkgICAgICB1bmxpbmsodG1w ZmlsbmFtW21sc2RlcHRoXSk7Ci0JfQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgbm90ZW1wOgot ICAgICAgICBpZiAoIXRtcGZpbHB0clttbHNkZXB0aF0pIHsKLSAgICAgICAgICAgIGRlYnVnKEYx MTAsImZ0cCByZW1vdGVfZmlsZXMgb3BlbiBmYWlsIix0bXBmaWxuYW1bbWxzZGVwdGhdLDApOwot ICAgICAgICAgICAgaWYgKCghZHB5YWN0aXZlIHx8IGZ0cF9kZWIpKQotICAgICAgICAgICAgICBw cmludGYoIj9DYW4ndCBmaW5kIGxpc3Qgb2YgcmVtb3RlIGZpbGVzLCBvb3BzXG4iKTsKLSAgICAg ICAgICAgIHJmcmMgPSAtOTsKLSAgICAgICAgICAgIHJldHVybihOVUxMKTsKLSAgICAgICAgfQot CWlmIChmdHBfZGViKQotCSAgcHJpbnRmKCJMSVNURklMRTogJXNcbiIsdG1wZmlsbmFtW21sc2Rl cHRoXSk7Ci0gICAgfQotICAgIGJ1ZlswXSA9IE5VTDsKLSAgICBidWZbRlRQTkFNQlVGTEVOLTFd ID0gTlVMOwotICAgIGJ1ZltGVFBOQU1CVUZMRU4tMl0gPSBOVUw7Ci0KLSAgICAvKiBXZSBoYXZl IHRvIHJlZG8gYWxsIHRoaXMgYmVjYXVzZSB0aGUgZmlyc3QgdGltZSB3YXMgb25seSBmb3IgKi8K LSAgICAvKiBmb3IgZ2V0dGluZyB0aGUgZmlsZSBsaXN0LCBub3cgaXQncyBmb3IgZ2V0dGluZyBl YWNoIGZpbGUgKi8KLQotICAgIGlmIChhcmcgJiYgbWdldG1ldGhvZCA9PSBTTkRfTUxTKSB7CS8q IE1MU0QgKi8KLQlpZiAoIXBhdHRlcm4gJiYgaXN3aWxkKChjaGFyICopYXJnKSkgewotCSAgICBw YXR0ZXJuID0gYXJnOwkJLyogV2lsZCBhcmcgaXMgcmVhbGx5IGEgcGF0dGVybiAqLwotCSAgICBp ZiAocGF0dGVybikKLQkgICAgICBpZiAoISpwYXR0ZXJuKQotCQlwYXR0ZXJuID0gTlVMTDsKLQkg ICAgYXJnID0gTlVMTDsJCQkvKiBhbmQgbm90IGFuIGFyZyAqLwotCX0KLQlpZiAobmV3X3F1ZXJ5 KSB7CQkvKiBJbml0aWFsIHF1ZXJ5PyAqLwotCSAgICBjZHRvID0gKGNoYXIgKilhcmc7CQkvKiAo bm9ud2lsZCkgYXJnIGdpdmVuPyAqLwotCSAgICBpZiAoY2R0bykKLQkgICAgICBpZiAoISpjZHRv KQotCQljZHRvID0gTlVMTDsKLQkgICAgaWYgKGNkdG8pCQkJLyogSWYgc28sIHRoZW4gQ0QgdG8g aXQgKi8KLQkgICAgICBkb2Z0cGN3ZChjZHRvLDApOwotCX0KLSAgICB9Ci0gICAgbmV3X3F1ZXJ5 ID0gMDsKLQotICAgIGlmIChmZ2V0cygoY2hhciAqKWJ1ZiwgRlRQTkFNQlVGTEVOLCB0bXBmaWxw dHJbbWxzZGVwdGhdKSA9PSBOVUxMKSB7Ci0gICAgICAgIGZjbG9zZSh0bXBmaWxwdHJbbWxzZGVw dGhdKTsKLSAgICAgICAgdG1wZmlscHRyW21sc2RlcHRoXSA9IE5VTEw7Ci0KLSNpZmRlZiBPUzIK LSAgICAgICAgaWYgKCFmdHBfZGViICYmICFkZWJsb2cpCi0gICAgICAgICAgdW5saW5rKHRtcGZp bG5hbVttbHNkZXB0aF0pOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICBpZiAoZnRwX2RlYiAm JiAhZGVibG9nKSB7Ci0gICAgICAgICAgICBwcmludGYoIihUZW1wb3JhcnkgZmlsZSAlcyBOT1Qg ZGVsZXRlZClcbiIsCi0JCSAgIChjaGFyICopdG1wZmlsbmFtW21sc2RlcHRoXSk7Ci0gICAgICAg IH0KLQlpZiAobWxzZGVwdGggPD0gMCkgewkJLyogRU9GIGF0IGRlcHRoIDAgKi8KLQkgICAgcmZy YyA9IC0zOwkJCS8qIG1lYW5zIHdlJ3JlIGRvbmUgKi8KLQkgICAgcmV0dXJuKE5VTEwpOwotCX0K LQlwcmludGYoIlBPUFBJTkcoJWQpLi4uXG4iLG1sc2RlcHRoLTEpOyAKLQlpZiAodG1wZmlsbmFt W21sc2RlcHRoXSkgZnJlZSh0bXBmaWxuYW1bbWxzZGVwdGhdKTsKLQltbHNkZXB0aC0tOwotCWRv ZnRwY2R1cCgpOwotCXpjaGRpcigiLi4iKTsJCQkvKiA8LS0gTm90IHBvcnRhYmxlICovCi0JZ290 byBhZ2FpbjsKLSAgICB9Ci0gICAgaWYgKGJ1ZltGVFBOQU1CVUZMRU4tMV0pIHsKLQlwcmludGYo Ij9CVUZGRVIgT1ZFUkZMT1cgLS0gRlRQIE5MU1Qgb3IgTUxTRCBzdHJpbmcgbG9uZ2VyIHRoYW4g JWRcbiIsCi0JICAgICAgIEZUUE5BTUJVRkxFTgotCSAgICAgICApOwotCWRlYnVnKEYxMDEsInJl bW90ZV9maWxlcyBidWZmZXIgb3ZlcnJ1biIsIiIsRlRQTkFNQlVGTEVOKTsKLQlyZXR1cm4oTlVM TCk7Ci0gICAgfQotICAgIC8qIGRlYnVnKEYxMTAsImZ0cCByZW1vdGVfZmlsZXMgYnVmIDEiLGJ1 ZiwwKTsgKi8KLSAgICBpZiAoKGNwID0gKENIQVIgKilja3N0cmNocigoY2hhciAqKWJ1ZiwnXG4n KSkgIT0gTlVMTCkKLSAgICAgICpjcCA9ICdcMCc7Ci0gICAgaWYgKChjcCA9IChDSEFSICopY2tz dHJjaHIoKGNoYXIgKilidWYsJ1xyJykpICE9IE5VTEwpCi0gICAgICAqY3AgPSAnXDAnOwotICAg IGRlYnVnKEYxMTAsImZ0cCByZW1vdGVfZmlsZXMgYnVmIixidWYsMCk7Ci0gICAgcmZyYyA9IDA7 Ci0KLSAgICBpZiAoZnRwX2RlYikKLSAgICAgIHByaW50ZigiWyVzXVxuIiwoY2hhciAqKWJ1Zik7 Ci0KLSAgICBoYXZlc2l6ZSA9IChDS19PRkZfVCktMTsJCS8qIEluaXRpYWxpemUgZmlsZSBmYWN0 cy4uLiAqLwotICAgIGhhdmV0eXBlID0gMDsKLSAgICBtYWtlc3RyKCZoYXZlbWR0bSxOVUxMKTsK LSAgICBwID0gKGNoYXIgKilidWY7Ci0KLSAgICBpZiAobWdldG1ldGhvZCA9PSBTTkRfTkxTKSB7 CS8qIE5MU1QuLi4gKi8KLQlpZiAocGF0dGVybikgewotCSAgICBpZiAoIWNrbWF0Y2goKGNoYXIg KilwYXR0ZXJuLHAsKHNlcnZlcnR5cGUgPT0gU1lTX1VOSVgpLDEpKQotCSAgICAgIGdvdG8gYWdh aW47Ci0JfQotICAgIH0gZWxzZSB7CQkJCS8qIE1MU0QuLi4gKi8KLQlwID0gcGFyc2VmYWN0cygo Y2hhciAqKWJ1Zik7Ci0Jc3dpdGNoIChoYXZldHlwZSkgewotCSAgY2FzZSBGVFlQX0ZJTEU6CQkv KiBGaWxlOiBHZXQgaXQgaWYgaXQgbWF0Y2hlcyAqLwotCSAgICBpZiAocGF0dGVybikgewotCQlp ZiAoIWNrbWF0Y2goKGNoYXIgKilwYXR0ZXJuLHAsKHNlcnZlcnR5cGUgPT0gU1lTX1VOSVgpLDEp KQotCQkgIGdvdG8gYWdhaW47Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0JICBjYXNlIEZUWVBfQ0RJ UjoJCS8qIEN1cnJlbnQgZGlyZWN0b3J5ICovCi0JICBjYXNlIEZUWVBfUERJUjoJCS8qIFBhcmVu dCBkaXJlY3RvcnkgKi8KLQkgICAgZ290byBhZ2FpbjsJCQkvKiBTa2lwICovCi0JICBjYXNlIEZU WVBfRElSOgkJLyogKFN1YilEaXJlY3RvcnkgKi8KLQkgICAgaWYgKCFyZWN1cnNpdmUpCQkvKiBJ ZiBub3QgL1JFQ1VSU0lWRSAqLwotCSAgICAgIGdvdG8gYWdhaW47CQkvKiBTa2lwICovCi0JICAg IGlmIChtbHNkZXB0aCA8IE1MU0RFUFRIKSB7Ci0JCWNoYXIgKiBwMiA9IE5VTEw7Ci0JCW1sc2Rl cHRoKys7Ci0JCXByaW50ZigiUkVDVVJTSU5HIFslc10oJWQpLi4uXG4iLHAsbWxzZGVwdGgpOyAK LQkJaWYgKGRvZnRwY3dkKHAsMCkgPiAwKSB7Ci0JCSAgICBpbnQgeDsKLQkJICAgIGlmICghY2tz dHJjaHIocCwnLycpKSB7Ci0JCQkvKiB6bWtkaXIoKSBuZWVkcyBkaXJzZXAgKi8KLQkJCWlmICgo cDIgPSAoY2hhciAqKW1hbGxvYygoaW50KXN0cmxlbihwKSArIDIpKSkgewotCQkJICAgIHN0cmNw eShwMixwKTsJLyogU0FGRSAqLwotCQkJICAgIHN0cmNhdChwMiwiLyIpOwkvKiBTQUZFICovCi0J CQkgICAgcCA9IHAyOwotCQkJfQotCQkgICAgfQotI2lmZGVmIE5PTUtESVIKLQkJICAgIHggPSAt MTsKLSNlbHNlCi0JCSAgICB4ID0gem1rZGlyKHApOwotI2VuZGlmIC8qIE5PTUtESVIgKi8KLQkJ ICAgIGlmICh4ID4gLTEpIHsKLQkJCXpjaGRpcihwKTsKLQkJCXAgPSAoY2hhciAqKXJlbW90ZV9m aWxlcygxLGFyZyxwYXR0ZXJuLDApOwotCQkJaWYgKHAyKSBmcmVlKHAyKTsKLQkJICAgIH0gZWxz ZSB7Ci0JCQlwcmludGYoIj9ta2RpciBmYWlsZWQ6IFslc10gRGVwdGg9JWRcbiIsCi0JCQkgICAg ICAgcCwKLQkJCSAgICAgICBtbHNkZXB0aAotCQkJICAgICAgICk7Ci0JCQltbHNyZXNldCgpOwot CQkJaWYgKHAyKSBmcmVlKHAyKTsKLQkJCXJldHVybihOVUxMKTsKLQkJICAgIH0KLQkJfSBlbHNl IHsKLQkJICAgIHByaW50ZigiP0NXRCBmYWlsZWQ6IFslc10gRGVwdGg9JWRcbiIscCxtbHNkZXB0 aCk7Ci0JCSAgICBtbHNyZXNldCgpOwotCQkgICAgcmV0dXJuKE5VTEwpOwotCQl9Ci0JICAgIH0g ZWxzZSB7Ci0JCXByaW50ZigiTUFYIERJUkVDVE9SWSBTVEFDSyBERVBUSCBFWENFRURFRDogJWRc biIsCi0JCSAgICAgICBtbHNkZXB0aAotCQkgICAgICAgKTsKLQkJbWxzcmVzZXQoKTsKLQkJcmV0 dXJuKE5VTEwpOwotCSAgICB9Ci0JfQotICAgIH0KLQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRl YmxvZykgewotCWRlYnVnKEYxMDEsInJlbW90ZV9maWxlcyBoYXZlc2l6ZSIsIiIsaGF2ZXNpemUp OwotCWRlYnVnKEYxMDEsInJlbW90ZV9maWxlcyBoYXZldHlwZSIsIiIsaGF2ZXR5cGUpOwotCWRl YnVnKEYxMTAsInJlbW90ZV9maWxlcyBoYXZlbWR0bSIsaGF2ZW1kdG0sMCk7CQotCWRlYnVnKEYx MTAsInJlbW90ZV9maWxlcyBuYW1lIixwLDApOwkKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8K LSAgICByZXR1cm4oKENIQVIgKilwKTsKLX0KLQotLyogTiBPIFQgIFAgTyBSIFQgQSBCIEwgRSAh ISEgKi8KLQotI2lmIChTSVpFT0ZfU0hPUlQgPT0gNCkKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQg ZnRwX3VpbnQzMjsKLXR5cGVkZWYgc2hvcnQgZnRwX2ludDMyOwotI2Vsc2UKLSNpZiAoU0laRU9G X0lOVCA9PSA0KQotdHlwZWRlZiB1bnNpZ25lZCBpbnQgZnRwX3VpbnQzMjsKLXR5cGVkZWYgaW50 IGZ0cF9pbnQzMjsKLSNlbHNlCi0jaWYgKFNJWkVPRl9MT05HID09IDQpCi10eXBlZGVmIFVMT05H IGZ0cF91aW50MzI7Ci10eXBlZGVmIGxvbmcgZnRwX2ludDMyOwotI2VuZGlmCi0jZW5kaWYKLSNl bmRpZgotCi0vKiBQZXJoYXBzIHVzZSB0aGVzZSBpbiBnZW5lcmFsLCBjZXJ0YWlubHkgdXNlIHRo ZW0gZm9yIEdTU0FQSSAqLwotCi0jaWZuZGVmIGxvb3Bpbmdfd3JpdGUKLSNkZWZpbmUgZnRwX2lu dDMyIGludAotI2RlZmluZSBmdHBfdWludDMyIHVuc2lnbmVkIGludAotc3RhdGljIGludAotbG9v cGluZ193cml0ZShmZCwgYnVmLCBsZW4pCi0gICAgaW50IGZkOwotICAgIHJlZ2lzdGVyIENPTlNU IGNoYXIgKmJ1ZjsKLSAgICBpbnQgbGVuOwotewotICAgIGludCBjYzsKLSAgICByZWdpc3RlciBp bnQgd3JsZW4gPSBsZW47Ci0gICAgZG8gewotICAgICAgICBjYyA9IHNlbmQoZmQsIChTRU5EQVJH MlRZUEUpYnVmLCB3cmxlbiwgMCk7Ci0gICAgICAgIGlmIChjYyA8IDApIHsKLSAgICAgICAgICAg IGlmIChlcnJubyA9PSBFSU5UUikKLSAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg ICByZXR1cm4oY2MpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYnVmICs9IGNjOwot ICAgICAgICAgICAgd3JsZW4gLT0gY2M7Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlICh3cmxlbiA+ IDApOwotICAgIHJldHVybihsZW4pOwotfQotI2VuZGlmCi0jaWZuZGVmIGxvb3BpbmdfcmVhZAot c3RhdGljIGludAotbG9vcGluZ19yZWFkKGZkLCBidWYsIGxlbikKLSAgICBpbnQgZmQ7Ci0gICAg cmVnaXN0ZXIgY2hhciAqYnVmOwotICAgIHJlZ2lzdGVyIGludCBsZW47Ci17Ci0gICAgaW50IGNj LCBsZW4yID0gMDsKLQotICAgIGRvIHsKLSAgICAgICAgY2MgPSByZWN2KGZkLCAoY2hhciAqKWJ1 ZiwgbGVuLDApOwotICAgICAgICBpZiAoY2MgPCAwKSB7Ci0gICAgICAgICAgICBpZiAoZXJybm8g PT0gRUlOVFIpCi0gICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcmV0dXJuKGNj KTsgICAgICAgICAgICAgICAgIC8qIGVycm5vIGlzIGFscmVhZHkgc2V0ICovCi0gICAgICAgIH0g ZWxzZSBpZiAoY2MgPT0gMCkgewotICAgICAgICAgICAgcmV0dXJuKGxlbjIpOwotICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgYnVmICs9IGNjOwotICAgICAgICAgICAgbGVuMiArPSBjYzsK LSAgICAgICAgICAgIGxlbiAtPSBjYzsKLSAgICAgICAgfQotICAgIH0gd2hpbGUgKGxlbiA+IDAp OwotICAgIHJldHVybihsZW4yKTsKLX0KLSNlbmRpZiAvKiBsb29waW5nX3JlYWQgKi8KLQotI2Rl ZmluZSBFUlIgLTIKLQotI2lmZGVmIENPTU1FTlQKLXN0YXRpYwotc2VjdXJlX3B1dGJ5dGUoZmQs IGMpIGludCBmZDsgQ0hBUiBjOyB7Ci0gICAgaW50IHJldDsKLQotICAgIHVjYnVmW25vdXQrK10g PSBjOwotICAgIGlmIChub3V0ID09IChtYXhidWYgPyBtYXhidWYgOiBhY3R1YWxidWYpIC0gRlVE R0VfRkFDVE9SKSB7Ci0gICAgICAgIG5vdXQgPSAwOwotICAgICAgICBpZiAoIWZ0cGlzc2VjdXJl KCkpCi0gICAgICAgICAgcmV0ID0gc2VuZChmZCwgKFNFTkRBUkcyVFlQRSl1Y2J1ZiwKLSAgICAg ICAgICAgICAgICAgICAgIChtYXhidWYgPyBtYXhidWYgOiBhY3R1YWxidWYpIC0gRlVER0VfRkFD VE9SLCAwKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHJldCA9IHNlY3VyZV9wdXRidWYoZmQs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y2J1ZiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChtYXhidWYgPyBtYXhidWYgOiBhY3R1YWxidWYpIC0gRlVER0VfRkFDVE9S Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICByZXR1cm4ocmV0P3Jl dDpjKTsKLSAgICB9Ci0gICAgcmV0dXJuKGMpOwotfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQot LyogcmV0dXJuczoKLSAqICAgICAgIDAgIG9uIHN1Y2Nlc3MKLSAqICAgICAgLTEgIG9uIGVycm9y IChlcnJubyBzZXQpCi0gKiAgICAgIC0yICBvbiBzZWN1cml0eSBlcnJvcgotICovCi1zdGF0aWMg aW50Ci1zZWN1cmVfZmx1c2goZmQpIGludCBmZDsgewotICAgIGludCByYyA9IDA7Ci0gICAgaW50 IGxlbiA9IDA7Ci0KLSAgICBpZiAobm91dCA+IDApIHsKLSAgICAgICAgbGVuID0gbm91dDsKLSAg ICAgICAgaWYgKCFmdHBpc3NlY3VyZSgpKSB7Ci0gICAgICAgICAgICByYyA9IHNlbmQoZmQsIChT RU5EQVJHMlRZUEUpdWNidWYsIG5vdXQsIDApOwotICAgICAgICAgICAgbm91dCA9IDA7Ci0gICAg ICAgICAgICBnb3RvIHhmbHVzaDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJjID0g c2VjdXJlX3B1dGJ1ZihmZCwgdWNidWYsIG5vdXQpOwotICAgICAgICAgICAgaWYgKHJjKQotICAg ICAgICAgICAgICBnb3RvIHhmbHVzaDsKLSAgICAgICAgfQotICAgIH0KLSAgICByYyA9ICghZnRw aXNzZWN1cmUoKSkgPyAwIDogc2VjdXJlX3B1dGJ1ZihmZCwgKENIQVIgKikiIiwgbm91dCA9IDAp OwotCi0gIHhmbHVzaDoKLSAgICBpZiAocmMgPiAtMSAmJiBsZW4gPiAwICYmIGZkaXNwbGEgIT0g WFlGRF9CKSB7Ci0Jc3BhY2tldHMrKzsKLSAgICAgICAgc3BrdGwgPSBsZW47Ci0gICAgICAgIGZ0 c2NyZWVuKFNDUl9QVCwnRCcsKENLX09GRl9UKXNwYWNrZXRzLE5VTEwpOwotICAgIH0KLSAgICBy ZXR1cm4ocmMpOwotfQotCi0jaWZkZWYgQ09NTUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogKG5vdCB1c2VkKSAqLwotLyogcmV0dXJuczoKLSAqICAgICAgYz49MCAgb24gc3VjY2Vzcwot ICogICAgICAtMSAgICBvbiBlcnJvcgotICogICAgICAtMiAgICBvbiBzZWN1cml0eSBlcnJvcgot ICovCi1zdGF0aWMgaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXNlY3VyZV9wdXRjKGNoYXIgYywgaW50 IGZkKQotI2Vsc2UKLXNlY3VyZV9wdXRjKGMsIGZkKSBjaGFyIGM7IGludCBmZDsKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwotLyogc2VjdXJlX3B1dGMgKi8gewotICAgIHJldHVybihzZWN1cmVfcHV0 Ynl0ZShmZCwgKENIQVIpIGMpKTsKLX0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLS8qIHJldHVy bnM6Ci0gKiAgICAgIG5ieXRlIG9uIHN1Y2Nlc3MKLSAqICAgICAgLTEgIG9uIGVycm9yIChlcnJu byBzZXQpCi0gKiAgICAgIC0yICBvbiBzZWN1cml0eSBlcnJvcgotICovCi1zdGF0aWMgaW50Ci0j aWZkZWYgQ0tfQU5TSUMKLXNlY3VyZV93cml0ZShpbnQgZmQsIENIQVIgKiBidWYsIHVuc2lnbmVk IGludCBuYnl0ZSkKLSNlbHNlCi1zZWN1cmVfd3JpdGUoZmQsIGJ1ZiwgbmJ5dGUpCi0gICAgaW50 IGZkOwotICAgIENIQVIgKiBidWY7Ci0gICAgdW5zaWduZWQgaW50IG5ieXRlOwotI2VuZGlmIC8q IENLX0FOU0lDICovCi17Ci0gICAgaW50IHJldDsKLQotI2lmZGVmIEZUUF9USU1FT1VUICAgIAot ICAgIGZ0cF90aW1lZF9vdXQgPSAwOwotICAgIGlmIChjaGVja19kYXRhX2Nvbm5lY3Rpb24oZmQs MSkgPCAwKSB7Ci0JZnRwX3RpbWVkX291dCA9IDE7Ci0JcmV0dXJuKC0zKTsKLSAgICB9Ci0jZW5k aWYJLyogRlRQX1RJTUVPVVQgKi8KLQotICAgIGlmICghZnRwaXNzZWN1cmUoKSkgewotICAgICAg ICBpZiAobm91dCA+IDApIHsKLSAgICAgICAgICAgIGlmICgocmV0ID0gc2VuZChmZCwgKFNFTkRB UkcyVFlQRSl1Y2J1Ziwgbm91dCwgMCkpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHJldCk7 Ci0gICAgICAgICAgICBub3V0ID0gMDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4oc2VuZChm ZCwoU0VOREFSRzJUWVBFKWJ1ZixuYnl0ZSwwKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW50 IHVjYnVmbGVuID0gKG1heGJ1ZiA/IG1heGJ1ZiA6IGFjdHVhbGJ1ZikgLSBGVURHRV9GQUNUT1I7 Ci0gICAgICAgIGludCBic2VudCA9IDA7Ci0KLSAgICAgICAgd2hpbGUgKGJzZW50IDwgbmJ5dGUp IHsKLSAgICAgICAgICAgIGludCBiMmNwID0gKChuYnl0ZSAtIGJzZW50KSA+ICh1Y2J1ZmxlbiAt IG5vdXQpID8KLSAgICAgICAgICAgICAgICAgICAgICAgICh1Y2J1ZmxlbiAtIG5vdXQpIDogKG5i eXRlIC0gYnNlbnQpKTsKLSNpZmRlZiBERUJVRwotCSAgICBpZiAoZGVibG9nKSB7Ci0JCWRlYnVn KEYxMDEsInNlY3VyZV93cml0ZSB1Y2J1ZmxlbiIsIiIsdWNidWZsZW4pOwotCQlkZWJ1ZyhGMTAx LCJzZWN1cmVfd3JpdGUgdWNidWZzaXoiLCIiLHVjYnVmc2l6KTsKLQkJZGVidWcoRjEwMSwic2Vj dXJlX3dyaXRlIGJzZW50IiwiIixic2VudCk7Ci0JCWRlYnVnKEYxMDEsInNlY3VyZV93cml0ZSBi MmNwIiwiIixiMmNwKTsKLQkgICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0gICAgICAgICAgICBt ZW1jcHkoJnVjYnVmW25vdXRdLCZidWZbYnNlbnRdLGIyY3ApOwotICAgICAgICAgICAgbm91dCAr PSBiMmNwOwotICAgICAgICAgICAgYnNlbnQgKz0gYjJjcDsKLQotICAgICAgICAgICAgaWYgKG5v dXQgPT0gdWNidWZsZW4pIHsKLSAgICAgICAgICAgICAgICBub3V0ID0gMDsKLSAgICAgICAgICAg ICAgICByZXQgPSBzZWN1cmVfcHV0YnVmKGZkLCB1Y2J1ZiwgdWNidWZsZW4pOwotICAgICAgICAg ICAgICAgIGlmIChyZXQgPCAwKQotICAgICAgICAgICAgICAgICAgcmV0dXJuKHJldCk7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuKGJzZW50KTsKLSAgICB9Ci19Ci0K LS8qIHJldHVybnM6Ci0gKiAgICAgICAwICBvbiBzdWNjZXNzCi0gKiAgICAgIC0xICBvbiBlcnJv ciAoZXJybm8gc2V0KQotICogICAgICAtMiAgb24gc2VjdXJpdHkgZXJyb3IKLSAqLwotc3RhdGlj IGludAotI2lmZGVmIENLX0FOU0lDCi1zZWN1cmVfcHV0YnVmKGludCBmZCwgQ0hBUiAqIGJ1Ziwg dW5zaWduZWQgaW50IG5ieXRlKQotI2Vsc2UKLXNlY3VyZV9wdXRidWYoZmQsIGJ1ZiwgbmJ5dGUp IGludCBmZDsgQ0hBUiAqIGJ1ZjsgdW5zaWduZWQgaW50IG5ieXRlOwotI2VuZGlmIC8qIENLX0FO U0lDICovCi17Ci0gICAgc3RhdGljIGNoYXIgKm91dGJ1ZiA9IE5VTEw7ICAgICAgICAgLyogb3V0 cHV0IGNpcGhlcnRleHQgKi8KLSNpZmRlZiBGVFBfU0VDVVJJVFkKLSAgICBzdGF0aWMgdW5zaWdu ZWQgaW50IGJ1ZnNpemUgPSAwOyAgICAvKiBzaXplIG9mIG91dGJ1ZiAqLwotI2VuZGlmIC8qIEZU UF9TRUNVUklUWSAqLwotICAgIGZ0cF9pbnQzMiBsZW5ndGggICA9IDA7Ci0gICAgZnRwX3VpbnQz MiBuZXRfbGVuID0gMDsKLQotICAgIC8qIE90aGVyIGF1dGggdHlwZXMgZ28gaGVyZSAuLi4gKi8K LSNpZmRlZiBDS19TU0wKLSAgICBpZiAoc3NsX2Z0cF9kYXRhX2FjdGl2ZV9mbGFnKSB7Ci0gICAg ICAgIGludCBjb3VudCwgZXJyb3I7Ci0KLSAgICAgICAgLyogdGhlcmUgaXMgbm8gbmVlZCB0byBz ZW5kIGFuIGVtcHR5IGJ1ZmZlciB3aGVuIHVzaW5nIFNTTC9UTFMgKi8KLSAgICAgICAgaWYgKCBu Ynl0ZSA9PSAwICkKLQkgIHJldHVybigwKTsKLQotICAgICAgICBjb3VudCA9IFNTTF93cml0ZShz c2xfZnRwX2RhdGFfY29uLCBidWYsIG5ieXRlKTsKLSAgICAgICAgZXJyb3IgPSBTU0xfZ2V0X2Vy cm9yKHNzbF9mdHBfZGF0YV9jb24sY291bnQpOwotICAgICAgICBzd2l0Y2ggKGVycm9yKSB7Ci0g ICAgICAgICAgY2FzZSBTU0xfRVJST1JfTk9ORToKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAg ICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRFOgotICAgICAgICAgIGNhc2UgU1NMX0VS Uk9SX1dBTlRfUkVBRDoKLSAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9TWVNDQUxMOgotI2lmZGVm IE5UCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IGdsZSA9IEdldExhc3RFcnJv cigpOwotCQlpZiAoZ2xlID09IDApCi0JCSAgcmV0dXJuKDApOwotCQlkZWJ1ZyhGMTExLCJzZWN1 cmVfcHV0YnVmIiwiU1NMX0VSUk9SX1NZU0NBTEwiLGdsZSk7Ci0gICAgICAgICAgICB9Ci0jZW5k aWYgLyogTlQgKi8KLSAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQOgot ICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1NTTDoKLSAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9a RVJPX1JFVFVSTjoKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgU1NMX3NodXRkb3du KHNzbF9mdHBfZGF0YV9jb24pOwotICAgICAgICAgICAgU1NMX2ZyZWUoc3NsX2Z0cF9kYXRhX2Nv bik7Ci0gICAgICAgICAgICBzc2xfZnRwX2RhdGFfYWN0aXZlX2ZsYWcgPSAwOwotICAgICAgICAg ICAgc3NsX2Z0cF9kYXRhX2NvbiA9IE5VTEw7Ci0jaWZkZWYgVENQSVBMSUIKLSAgICAgICAgICAg IHNvY2tldF9jbG9zZShkYXRhKTsKLSNlbHNlIC8qIFRDUElQTElCICovCi0jaWZkZWYgVVNFX1NI VVRET1dOCi0gICAgICAgICAgICBzaHV0ZG93bihkYXRhLCAxKzEpOwotI2VuZGlmIC8qIFVTRV9T SFVURE9XTiAqLwotICAgICAgICAgICAgY2xvc2UoZGF0YSk7Ci0jZW5kaWYgLyogVENQSVBMSUIg Ki8KLSAgICAgICAgICAgIGRhdGEgPSAtMTsKLSAgICAgICAgICAgIGdsb2JhbGRpbiA9IGRhdGE7 Ci0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybigtMSk7 Ci0gICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0jaWZkZWYgRlRQX1NSUAotICAgIGlmIChj a19zcnBfaXNfaW5zdGFsbGVkKCkgJiYgKHN0cmNtcChhdXRoX3R5cGUsICJTUlAiKSA9PSAwKSkg ewotICAgICAgICBpZiAoYnVmc2l6ZSA8IG5ieXRlICsgRlVER0VfRkFDVE9SKSB7Ci0gICAgICAg ICAgICBpZiAob3V0YnVmPwotICAgICAgICAgICAgICAgIChvdXRidWYgPSByZWFsbG9jKG91dGJ1 ZiwgKHVuc2lnbmVkKSAobmJ5dGUgKyBGVURHRV9GQUNUT1IpKSk6Ci0gICAgICAgICAgICAgICAg KG91dGJ1ZiA9IG1hbGxvYygodW5zaWduZWQpIChuYnl0ZSArIEZVREdFX0ZBQ1RPUikpKSkgewot ICAgICAgICAgICAgICAgIGJ1ZnNpemUgPSBuYnl0ZSArIEZVREdFX0ZBQ1RPUjsKLSAgICAgICAg ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYnVmc2l6ZSA9IDA7Ci0gICAgICAgICAgICAg ICAgc2VjdXJlX2Vycm9yKCIlcyAoaW4gbWFsbG9jIG9mIFBST1QgYnVmZmVyKSIsIGNrX2VycnN0 cigpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oRVJSKTsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgfQotICAgICAgICBpZiAoKGxlbmd0aCA9Ci0gICAgICAgICAgICAgc3JwX2VuY29kZShmdHBf ZHBsID09IEZQTF9QUlYsCi0gICAgICAgICAgICAgICAgICAgICAgICAoQ0hBUiAqKSBidWYsCi0g ICAgICAgICAgICAgICAgICAgICAgICAoQ0hBUiAqKSBvdXRidWYsCi0gICAgICAgICAgICAgICAg ICAgICAgICBuYnl0ZQotICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICkg PCAwKSB7Ci0gICAgICAgICAgICBzZWN1cmVfZXJyb3IgKCJzcnBfZW5jb2RlIGZhaWxlZCIpOwot ICAgICAgICAgICAgcmV0dXJuIEVSUjsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBGVFBf U1JQICovCi0jaWZkZWYgRlRQX0tSQjQKLSAgICBpZiAoY2tfa3JiNF9pc19pbnN0YWxsZWQoKSAm JiAoc3RyY21wKGF1dGhfdHlwZSwgIktFUkJFUk9TX1Y0IikgPT0gMCkpIHsKLSAgICAgICAgc3Ry dWN0IHNvY2thZGRyX2luIG15YWRkciwgaGlzYWRkcjsKLSAgICAgICAgR1NPQ0tOQU1FX1QgbGVu OwotICAgICAgICBsZW4gPSBzaXplb2YobXlhZGRyKTsKLSAgICAgICAgaWYgKGdldHNvY2tuYW1l KGZkLCAoc3RydWN0IHNvY2thZGRyKikmbXlhZGRyLCAmbGVuKSA8IDApIHsKLSAgICAgICAgICAg IHNlY3VyZV9lcnJvcigic2VjdXJlX3B1dGJ1ZjogZ2V0c29ja25hbWUgZmFpbGVkIik7Ci0gICAg ICAgICAgICByZXR1cm4oRVJSKTsKLSAgICAgICAgfQotICAgICAgICBsZW4gPSBzaXplb2YoaGlz YWRkcik7Ci0gICAgICAgIGlmIChnZXRwZWVybmFtZShmZCwgKHN0cnVjdCBzb2NrYWRkciopJmhp c2FkZHIsICZsZW4pIDwgMCkgewotICAgICAgICAgICAgc2VjdXJlX2Vycm9yKCJzZWN1cmVfcHV0 YnVmOiBnZXRwZWVybmFtZSBmYWlsZWQiKTsKLSAgICAgICAgICAgIHJldHVybihFUlIpOwotICAg ICAgICB9Ci0gICAgICAgIGlmIChidWZzaXplIDwgbmJ5dGUgKyBGVURHRV9GQUNUT1IpIHsKLSAg ICAgICAgICAgIGlmIChvdXRidWYgPwotICAgICAgICAgICAgICAgIChvdXRidWYgPSByZWFsbG9j KG91dGJ1ZiwgKHVuc2lnbmVkKSAobmJ5dGUgKyBGVURHRV9GQUNUT1IpKSk6Ci0gICAgICAgICAg ICAgICAgIChvdXRidWYgPSBtYWxsb2MoKHVuc2lnbmVkKSAobmJ5dGUgKyBGVURHRV9GQUNUT1Ip KSkpIHsKLSAgICAgICAgICAgICAgICBidWZzaXplID0gbmJ5dGUgKyBGVURHRV9GQUNUT1I7Ci0g ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGJ1ZnNpemUgPSAwOwotICAgICAg ICAgICAgICAgIHNlY3VyZV9lcnJvcigiJXMgKGluIG1hbGxvYyBvZiBQUk9UIGJ1ZmZlcikiLCBj a19lcnJzdHIoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKEVSUik7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGZ0cF9kcGwgPT0gRlBMX1BSVikgewotICAgICAgICAg ICAgbGVuZ3RoID0ga3JiX21rX3ByaXYoYnVmLCAoQ0hBUiAqKSBvdXRidWYsIG5ieXRlLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRwX3NjaGVkLAotI2lmZGVmIEtSQjUyNAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRwX2NyZWQuc2Vzc2lvbiwKLSNlbHNl IC8qIEtSQjUyNCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZ0cF9jcmVk LnNlc3Npb24sCi0jZW5kaWYgLyogS1JCNTI0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmbXlhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhpc2Fk ZHIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICBsZW5ndGggPSBrcmJfbWtfc2FmZShidWYsIChDSEFSICopIG91dGJ1Ziwg bmJ5dGUsCi0jaWZkZWYgS1JCNTI0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm dHBfY3JlZC5zZXNzaW9uLAotI2Vsc2UgLyogS1JCNTI0ICovCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmZnRwX2NyZWQuc2Vzc2lvbiwKLSNlbmRpZiAvKiBLUkI1MjQgKi8KLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZteWFkZHIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmaGlzYWRkcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKLSAgICAgICAgfQotICAgICAgICBpZiAobGVuZ3RoID09IC0xKSB7Ci0gICAgICAgICAg ICBzZWN1cmVfZXJyb3IoImtyYl9ta18lcyBmYWlsZWQgZm9yIEtFUkJFUk9TX1Y0IiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICBmdHBfZHBsID09IEZQTF9QUlYgPyAicHJpdiIgOiAic2FmZSIp OwotICAgICAgICAgICAgcmV0dXJuKEVSUik7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyog RlRQX0tSQjQgKi8KLSNpZmRlZiBGVFBfR1NTQVBJCi0gICAgaWYgKGNrX2dzc2FwaV9pc19pbnN0 YWxsZWQoKSAmJiAoc3RyY21wKGF1dGhfdHlwZSwgIkdTU0FQSSIpID09IDApKSB7Ci0gICAgICAg IGdzc19idWZmZXJfZGVzYyBpbl9idWYsIG91dF9idWY7Ci0gICAgICAgIE9NX3VpbnQzMiBtYWpf c3RhdCwgbWluX3N0YXQ7Ci0gICAgICAgIGludCBjb25mX3N0YXRlOwotCi0gICAgICAgIGluX2J1 Zi52YWx1ZSA9IGJ1ZjsKLSAgICAgICAgaW5fYnVmLmxlbmd0aCA9IG5ieXRlOwotICAgICAgICBt YWpfc3RhdCA9IGdzc19zZWFsKCZtaW5fc3RhdCwgZ2NvbnRleHQsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGZ0cF9kcGwgPT0gRlBMX1BSViksIC8qIGNvbmZpZGVudGlhbCAqLwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEdTU19DX1FPUF9ERUZBVUxULAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZpbl9idWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNv bmZfc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dF9idWYKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICBpZiAobWFqX3N0YXQgIT0gR1NTX1NfQ09N UExFVEUpIHsKLSAgICAgICAgICAgIC8qIGdlbmVyYWxseSBuZWVkIHRvIGRlYWwgKi8KLSAgICAg ICAgICAgIC8qIGllLiBzaG91bGQgbG9vcCwgYnV0IGZvciBub3cganVzdCBmYWlsICovCi0gICAg ICAgICAgICB1c2VyX2dzc19lcnJvcihtYWpfc3RhdCwgbWluX3N0YXQsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICBmdHBfZHBsID09IEZQTF9QUlY/Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAiR1NTQVBJIHNlYWwgZmFpbGVkIjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJH U1NBUEkgc2lnbiBmYWlsZWQiKTsKLSAgICAgICAgICAgIHJldHVybihFUlIpOwotICAgICAgICB9 Ci0gICAgICAgIGlmIChidWZzaXplIDwgb3V0X2J1Zi5sZW5ndGgpIHsKLSAgICAgICAgICAgIGlm IChvdXRidWYgPwotICAgICAgICAgICAgICAgIChvdXRidWYgPSByZWFsbG9jKG91dGJ1ZiwgKHVu c2lnbmVkKSBvdXRfYnVmLmxlbmd0aCkpOgotICAgICAgICAgICAgICAgIChvdXRidWYgPSBtYWxs b2MoKHVuc2lnbmVkKSBvdXRfYnVmLmxlbmd0aCkpKSB7Ci0gICAgICAgICAgICAgICAgYnVmc2l6 ZSA9IG91dF9idWYubGVuZ3RoOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg ICBidWZzaXplID0gMDsKLSAgICAgICAgICAgICAgICBzZWN1cmVfZXJyb3IoIiVzIChpbiBtYWxs b2Mgb2YgUFJPVCBidWZmZXIpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tfZXJy c3RyKCkpOwotICAgICAgICAgICAgICAgIHJldHVybihFUlIpOwotICAgICAgICAgICAgfQotICAg ICAgICB9Ci0gICAgICAgIG1lbWNweShvdXRidWYsIG91dF9idWYudmFsdWUsIGxlbmd0aD1vdXRf YnVmLmxlbmd0aCk7Ci0gICAgICAgIGdzc19yZWxlYXNlX2J1ZmZlcigmbWluX3N0YXQsICZvdXRf YnVmKTsKLSAgICB9Ci0jZW5kaWYgLyogRlRQX0dTU0FQSSAqLwotICAgIG5ldF9sZW4gPSBodG9u bCgoVUxPTkcpIGxlbmd0aCk7Ci0gICAgaWYgKGxvb3Bpbmdfd3JpdGUoZmQsIChjaGFyICopJm5l dF9sZW4sIDQpID09IC0xKQotICAgICAgcmV0dXJuKC0xKTsKLSAgICBpZiAobG9vcGluZ193cml0 ZShmZCwgb3V0YnVmLCBsZW5ndGgpICE9IGxlbmd0aCkKLSAgICAgIHJldHVybigtMSk7Ci0gICAg cmV0dXJuKDApOwotfQotCi0KLS8qIGZjID0gMCBtZWFucyB0byBnZXQgYSBieXRlOyBub256ZXJv IG1lYW5zIHRvIGluaXRpYWxpemUgYnVmZmVyIHBvaW50ZXJzICovCi0KLXN0YXRpYyBpbnQKLXNl Y3VyZV9nZXRieXRlKGZkLGZjKSBpbnQgZmQsZmM7IHsKLSAgICAvKiBudW1iZXIgb2YgY2hhcnMg aW4gdWNidWYsIHBvaW50ZXIgaW50byB1Y2J1ZiAqLwotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQg bmluID0gMCwgYnVmcCA9IDA7Ci0gICAgaW50IGtlcnJvcjsKLSAgICBmdHBfdWludDMyIGxlbmd0 aDsKLQotICAgIGlmIChmYykgewotCW5pbiA9IGJ1ZnAgPSAwOwotCXVjYnVmWzBdID0gTlVMOwot CXJldHVybigwKTsKLSAgICB9Ci0gICAgaWYgKG5pbiA9PSAwKSB7Ci0gICAgICAgIGlmIChpc2Nh bmNlbGVkKCkpCi0gICAgICAgICAgcmV0dXJuKC05KTsKLQotI2lmZGVmIEZUUF9USU1FT1VUCi0J aWYgKGNoZWNrX2RhdGFfY29ubmVjdGlvbihmZCwwKSA8IDApCi0JICByZXR1cm4oLTMpOwotI2Vu ZGlmCS8qIEZUUF9USU1FT1VUICovCi0KLSNpZmRlZiBDS19TU0wKLSAgICAgICAgaWYgKHNzbF9m dHBfZGF0YV9hY3RpdmVfZmxhZykgewotICAgICAgICAgICAgaW50IGNvdW50LCBlcnJvcjsKLSAg ICAgICAgICAgIGNvdW50ID0gU1NMX3JlYWQoc3NsX2Z0cF9kYXRhX2NvbiwgdWNidWYsIHVjYnVm c2l6KTsKLSAgICAgICAgICAgIGVycm9yID0gU1NMX2dldF9lcnJvcihzc2xfZnRwX2RhdGFfY29u LGNvdW50KTsKLSNpZmRlZiBERUJVRwotCSAgICBpZiAoZXJyb3IgIT0gU1NMX0VSUk9SX05PTkUp Ci0JICAgICAgZGVidWcoRjEwMSwiZnRwIHNlY3VyZV9nZXRieXRlIGVycm9yIiwiIixlcnJvcik7 Ci0JICAgIGlmIChjb3VudCA9PSAwKQotCSAgICAgIGRlYnVnKEYxMDEsImZ0cCBzZWN1cmVfZ2V0 Ynl0ZSBjb3VudCIsIiIsY291bnQpOwotI2VuZGlmCS8qIERFQlVHICovCi0gICAgICAgICAgICBz d2l0Y2ggKGVycm9yKSB7Ci0gICAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX05PTkU6Ci0JCWlm IChjb3VudCA+IDApIHsKLQkJICAgIG5pbiA9IGJ1ZnAgPSBjb3VudDsKLQkJICAgIHJwYWNrZXRz Kys7Ci0JCSAgICBwa3RudW0rKzsKLQkJICAgIGlmIChmZGlzcGxhICE9IFhZRkRfQikgewotCQkJ cnBrdGwgPSBjb3VudDsKLQkJCWZ0c2NyZWVuKFNDUl9QVCwnRCcsKENLX09GRl9UKXJwYWNrZXRz LE5VTEwpOwotCQkgICAgfQotCQkgICAgYnJlYWs7Ci0JCX0KLSAgICAgICAgICAgICAgY2FzZSBT U0xfRVJST1JfV0FOVF9XUklURToKLSAgICAgICAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9S RUFEOgotICAgICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9TWVNDQUxMOgotI2lmZGVmIE5UCi0g ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbnQgZ2xlID0gR2V0TGFzdEVy cm9yKCk7Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIE5UICovCi0gICAgICAgICAgICAg IGNhc2UgU1NMX0VSUk9SX1dBTlRfWDUwOV9MT09LVVA6Ci0gICAgICAgICAgICAgIGNhc2UgU1NM X0VSUk9SX1NTTDoKLSAgICAgICAgICAgICAgY2FzZSBTU0xfRVJST1JfWkVST19SRVRVUk46Ci0g ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgbmluID0gYnVmcCA9IGNvdW50 ID0gMDsKLSAgICAgICAgICAgICAgICBTU0xfc2h1dGRvd24oc3NsX2Z0cF9kYXRhX2Nvbik7Ci0g ICAgICAgICAgICAgICAgU1NMX2ZyZWUoc3NsX2Z0cF9kYXRhX2Nvbik7Ci0gICAgICAgICAgICAg ICAgc3NsX2Z0cF9kYXRhX2FjdGl2ZV9mbGFnID0gMDsKLSAgICAgICAgICAgICAgICBzc2xfZnRw X2RhdGFfY29uID0gTlVMTDsKLSNpZmRlZiBUQ1BJUExJQgotICAgICAgICAgICAgICAgIHNvY2tl dF9jbG9zZShkYXRhKTsKLSNlbHNlIC8qIFRDUElQTElCICovCi0jaWZkZWYgVVNFX1NIVVRET1dO Ci0gICAgICAgICAgICAgICAgc2h1dGRvd24oZGF0YSwgMSsxKTsKLSNlbmRpZiAvKiBVU0VfU0hV VERPV04gKi8KLSAgICAgICAgICAgICAgICBjbG9zZShkYXRhKTsKLSNlbmRpZiAvKiBUQ1BJUExJ QiAqLwotICAgICAgICAgICAgICAgIGRhdGEgPSAtMTsKLSAgICAgICAgICAgICAgICBnbG9iYWxk aW4gPSBkYXRhOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg ICB9IGVsc2UKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICB7Ci0gICAgICAgICAgICAg IGtlcnJvciA9IGxvb3BpbmdfcmVhZChmZCwgKGNoYXIgKikmbGVuZ3RoLCBzaXplb2YobGVuZ3Ro KSk7Ci0gICAgICAgICAgICAgIGlmIChrZXJyb3IgIT0gc2l6ZW9mKGxlbmd0aCkpIHsKLSAgICAg ICAgICAgICAgICAgIHNlY3VyZV9lcnJvcigiQ291bGRuJ3QgcmVhZCBQUk9UIGJ1ZmZlciBsZW5n dGg6ICVkLyVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXJyb3IsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAga2Vycm9yID09IC0xID8gY2tfZXJyc3RyKCkKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJwcmVtYXR1cmUgRU9GIgotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4oRVJSKTsK LSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJzZWN1cmVfZ2V0Ynl0 ZSBsZW5ndGgiLCIiLGxlbmd0aCk7Ci0gICAgICAgICAgICAgIGRlYnVnKEYxMDEsInNlY3VyZV9n ZXRieXRlIG50b2hsKGxlbmd0aCkiLCIiLG50b2hsKGxlbmd0aCkpOwotCi0gICAgICAgICAgICAg IGxlbmd0aCA9IChVTE9ORykgbnRvaGwobGVuZ3RoKTsKLSAgICAgICAgICAgICAgaWYgKGxlbmd0 aCA+IG1heGJ1ZikgewotICAgICAgICAgICAgICAgICAgc2VjdXJlX2Vycm9yKCJMZW5ndGggKCVk KSBvZiBQUk9UIGJ1ZmZlciA+IFBCU1o9JXUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhidWYKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgICAgcmV0dXJuKEVS Uik7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgaWYgKChrZXJyb3IgPSBsb29waW5n X3JlYWQoZmQsIHVjYnVmLCBsZW5ndGgpKSAhPSBsZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAg IHNlY3VyZV9lcnJvcigiQ291bGRuJ3QgcmVhZCAldSBieXRlIFBST1QgYnVmZmVyOiAlcyIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGtlcnJvciA9PSAtMSA/IGNrX2VycnN0cigpIDogInByZW1hdHVyZSBFT0Yi Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgIHJl dHVybihFUlIpOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgLyogT3RoZXIgYXV0 aCB0eXBlcyBnbyBoZXJlIC4uLiAqLwotI2lmZGVmIEZUUF9TUlAKLSAgICAgICAgICAgICAgaWYg KHN0cmNtcChhdXRoX3R5cGUsICJTUlAiKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICBpZiAo KG5pbiA9IGJ1ZnAgPSBzcnBfZGVjb2RlIChmdHBfZHBsID09IEZQTF9QUlYsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQ0hBUiAqKSB1Y2J1ZiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjYnVmLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAg ICAgICAgICAgICAgICkgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgICBzZWN1cmVfZXJy b3IgKCJzcnBfZW5jb2RlIGZhaWxlZCIgKTsKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g RVJSOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogRlRQ X1NSUCAqLwotI2lmZGVmIEZUUF9LUkI0Ci0gICAgICAgICAgICAgIGlmIChzdHJjbXAoYXV0aF90 eXBlLCAiS0VSQkVST1NfVjQiKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29j a2FkZHJfaW4gbXlhZGRyLCBoaXNhZGRyOwotICAgICAgICAgICAgICAgICAgR1NPQ0tOQU1FX1Qg bGVuOwotICAgICAgICAgICAgICAgICAgbGVuID0gc2l6ZW9mKG15YWRkcik7Ci0gICAgICAgICAg ICAgICAgICBpZiAoZ2V0c29ja25hbWUoZmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSZteWFkZHIsICZs ZW4pIDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgIHNlY3VyZV9lcnJvcigic2VjdXJlX3B1 dGJ1ZjogZ2V0c29ja25hbWUgZmFpbGVkIik7Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJu KEVSUik7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBsZW4gPSBzaXpl b2YoaGlzYWRkcik7Ci0gICAgICAgICAgICAgICAgICBpZiAoZ2V0cGVlcm5hbWUoZmQsIChzdHJ1 Y3Qgc29ja2FkZHIqKSZoaXNhZGRyLCAmbGVuKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAg ICBzZWN1cmVfZXJyb3IoInNlY3VyZV9wdXRidWY6IGdldHBlZXJuYW1lIGZhaWxlZCIpOwotICAg ICAgICAgICAgICAgICAgICAgIHJldHVybihFUlIpOwotICAgICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICAgICAgaWYgKGZ0cF9kcGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICBrZXJy b3IgPSBrcmJfcmRfcHJpdih1Y2J1ZiwgbGVuZ3RoLCBmdHBfc2NoZWQsCi0jaWZkZWYgS1JCNTI0 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRwX2NyZWQuc2Vz c2lvbiwKLSNlbHNlIC8qIEtSQjUyNCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZmdHBfY3JlZC5zZXNzaW9uLAotI2VuZGlmIC8qIEtSQjUyNCAqLwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoaXNhZGRyLCAmbXlhZGRy LCAmZnRwX21zZ19kYXRhKTsKLSAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICAgICAgICAgICAga2Vycm9yID0ga3JiX3JkX3NhZmUodWNidWYsIGxlbmd0aCwKLSNpZmRlZiBL UkI1MjQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdHBfY3Jl ZC5zZXNzaW9uLAotI2Vsc2UgLyogS1JCNTI0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmZ0cF9jcmVkLnNlc3Npb24sCi0jZW5kaWYgLyogS1JCNTI0ICov Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhpc2FkZHIsICZt eWFkZHIsICZmdHBfbXNnX2RhdGEpOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgICAgaWYgKGtlcnJvcikgewotICAgICAgICAgICAgICAgICAgICAgIHNlY3VyZV9lcnJvcigi a3JiX3JkXyVzIGZhaWxlZCBmb3IgS0VSQkVST1NfVjQgKCVzKSIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZ0cF9kcGwgPT0gRlBMX1BSViA/ICJwcml2IiA6ICJzYWZlIiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3JiX2dldF9lcnJfdGV4dChrZXJy b3IpKTsKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oRVJSKTsKLSAgICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICAgIG1lbWNweSh1Y2J1ZixmdHBfbXNnX2RhdGEuYXBwX2Rh dGEsZnRwX21zZ19kYXRhLmFwcF9sZW5ndGgpOwotICAgICAgICAgICAgICAgICAgbmluID0gYnVm cCA9IGZ0cF9tc2dfZGF0YS5hcHBfbGVuZ3RoOwotICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyog RlRQX0tSQjQgKi8KLSNpZmRlZiBGVFBfR1NTQVBJCi0gICAgICAgICAgICAgIGlmIChzdHJjbXAo YXV0aF90eXBlLCAiR1NTQVBJIikgPT0gMCkgewotICAgICAgICAgICAgICAgICAgZ3NzX2J1ZmZl cl9kZXNjIHhtaXRfYnVmLCBtc2dfYnVmOwotICAgICAgICAgICAgICAgICAgT01fdWludDMyIG1h al9zdGF0LCBtaW5fc3RhdDsKLSAgICAgICAgICAgICAgICAgIGludCBjb25mX3N0YXRlOwotCi0g ICAgICAgICAgICAgICAgICB4bWl0X2J1Zi52YWx1ZSA9IHVjYnVmOwotICAgICAgICAgICAgICAg ICAgeG1pdF9idWYubGVuZ3RoID0gbGVuZ3RoOwotICAgICAgICAgICAgICAgICAgY29uZl9zdGF0 ZSA9IChmdHBfZHBsID09IEZQTF9QUlYpOwotICAgICAgICAgICAgICAgICAgLyogZGVjcnlwdC92 ZXJpZnkgdGhlIG1lc3NhZ2UgKi8KLSAgICAgICAgICAgICAgICAgIG1hal9zdGF0ID0gZ3NzX3Vu c2VhbCgmbWluX3N0YXQsIGdjb250ZXh0LCAmeG1pdF9idWYsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJm1zZ19idWYsICZjb25mX3N0YXRlLCBOVUxMKTsKLSAgICAg ICAgICAgICAgICAgIGlmIChtYWpfc3RhdCAhPSBHU1NfU19DT01QTEVURSkgewotICAgICAgICAg ICAgICAgICAgICAgIHVzZXJfZ3NzX2Vycm9yKG1hal9zdGF0LCBtaW5fc3RhdCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnRwX2RwbCA9PSBGUExfUFJWKT8KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkIHVuc2VhbGluZyBFTkMgbWVz c2FnZSI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZCB1bnNl YWxpbmcgTUlDIG1lc3NhZ2UiKTsKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVJSOwot ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgbWVtY3B5KHVjYnVmLCBtc2df YnVmLnZhbHVlLCBuaW4gPSBidWZwID0gbXNnX2J1Zi5sZW5ndGgpOwotICAgICAgICAgICAgICAg ICAgZ3NzX3JlbGVhc2VfYnVmZmVyKCZtaW5fc3RhdCwgJm1zZ19idWYpOwotICAgICAgICAgICAg ICB9Ci0jZW5kaWYgLyogRlRQX0dTU0FQSSAqLwotICAgICAgICAgICAgICAvKiBPdGhlciBhdXRo IHR5cGVzIGdvIGhlcmUgLi4uICovCi0KLSAgICAgICAgICAgICAgLyogVXBkYXRlIGZpbGUgdHJh bnNmZXIgZGlzcGxheSAqLwotICAgICAgICAgICAgICBycGFja2V0cysrOwotICAgICAgICAgICAg ICBwa3RudW0rKzsKLSAgICAgICAgICAgICAgaWYgKGZkaXNwbGEgIT0gWFlGRF9CKSB7Ci0gICAg ICAgICAgICAgICAgICBycGt0bCA9IG5pbjsKLSAgICAgICAgICAgICAgICAgIGZ0c2NyZWVuKFND Ul9QVCwnRCcsKENLX09GRl9UKXJwYWNrZXRzLE5VTEwpOwotICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgfQotICAgIH0KLSAgICBpZiAobmluID09IDApCi0gICAgICByZXR1cm4oRU9GKTsKLSAg ICBlbHNlCi0gICAgICByZXR1cm4odWNidWZbYnVmcCAtIG5pbi0tXSk7Ci19Ci0KLS8qIHNlY3Vy ZV9nZXRjKGZkLGZjKQotICogQ2FsbCB3aXRoOgotICogICBmZCA9IGZpbGUgZGVzY3JpcHRvciBm b3IgY29ubmVjdGlvbi4KLSAqICAgZmMgPSAwIHRvIGdldCBhIGNoYXJhY3RlciwgZmMgIT0gMCB0 byBpbml0aWFsaXplIGJ1ZmZlciBwb2ludGVycy4KLSAqIFJldHVybnM6Ci0gKiAgIGM+PTAgb24g c3VjY2VzcyAoY2hhcmFjdGVyIHZhbHVlKQotICogICAtMSAgIG9uIEVPRgotICogICAtMiAgIG9u IHNlY3VyaXR5IGVycm9yCi0gKiAgIC0zICAgb24gdGltZW91dCAoaWYgYnVpbHQgd2l0aCBGVFBf VElNRU9VVCBkZWZpbmVkKQotICovCi1zdGF0aWMgaW50Ci1zZWN1cmVfZ2V0YyhmZCxmYykgaW50 IGZkLGZjOyB7CQkvKiBmaWxlIGRlc2NyaXB0b3IsIGZ1bmN0aW9uIGNvZGUgKi8KLQotICAgIGlm ICghZnRwaXNzZWN1cmUoKSkgewotICAgICAgICBzdGF0aWMgdW5zaWduZWQgaW50IG5pbiA9IDAs IGJ1ZnAgPSAwOwotCWlmIChmYykgewotCSAgICBuaW4gPSBidWZwID0gMDsKLQkgICAgdWNidWZb MF0gPSBOVUw7Ci0JICAgIHJldHVybigwKTsKLQl9Ci0gICAgICAgIGlmIChuaW4gPT0gMCkgewot ICAgICAgICAgICAgaWYgKGlzY2FuY2VsZWQoKSkKLSAgICAgICAgICAgICAgcmV0dXJuKC05KTsK LQotI2lmZGVmIEZUUF9USU1FT1VUCi0JICAgIGlmIChjaGVja19kYXRhX2Nvbm5lY3Rpb24oZmQs MCkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMCwic2VjdXJlX2dldGMgVElNRU9V VCIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgbmluID0gYnVmcCA9IDA7Ci0JCWZ0cF90aW1lZF9v dXQgPSAxOwotCQlyZXR1cm4oLTMpOwotCSAgICB9CQkKLSNlbmRpZgkvKiBGVFBfVElNRU9VVCAq LwotCi0gICAgICAgICAgICBuaW4gPSBidWZwID0gcmVjdihmZCwoY2hhciAqKXVjYnVmLGFjdHVh bGJ1ZiwwKTsKLSAgICAgICAgICAgIGlmICgobmluID09IDApIHx8IChuaW4gPT0gKHVuc2lnbmVk IGludCktMSkpIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJzZWN1cmVfZ2V0YyByZWN2 IGVycm5vIixja2l0b2EobmluKSxlcnJubyk7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwi c2VjdXJlX2dldGMgcmV0dXJucyBFT0YiLCIiLEVPRik7Ci0gICAgICAgICAgICAgICAgbmluID0g YnVmcCA9IDA7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKEVPRik7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgc2VjdXJlX2dldGMgcmVjdiIsIiIsbmluKTsKLSAg ICAgICAgICAgIGNraGV4ZHVtcCgiZnRwIHNlY3VyZV9nZXRjIHJlY3YiLHVjYnVmLDE2KTsKLSAg ICAgICAgICAgIHJwYWNrZXRzKys7Ci0gICAgICAgICAgICBwa3RudW0rKzsKLSAgICAgICAgICAg IGlmIChmZGlzcGxhICE9IFhZRkRfQikgewotICAgICAgICAgICAgICAgIHJwa3RsID0gbmluOwot ICAgICAgICAgICAgICAgIGZ0c2NyZWVuKFNDUl9QVCwnRCcsKENLX09GRl9UKXJwYWNrZXRzLE5V TEwpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybih1Y2J1ZltidWZw IC0gbmluLS1dKTsKLSAgICB9IGVsc2UKLSAgICAgIHJldHVybihzZWN1cmVfZ2V0Ynl0ZShmZCxm YykpOwotfQotCi0vKiByZXR1cm5zOgotICogICAgIG4+MCAgb24gc3VjY2VzcyAobiA9PSAjIG9m IGJ5dGVzIHJlYWQpCi0gKiAgICAgICAwICBvbiBFT0YKLSAqICAgICAgLTEgIG9uIGVycm9yIChl cnJubyBzZXQpLCBvbmx5IGZvciBGUExfQ0xSCi0gKiAgICAgIC0yICBvbiBzZWN1cml0eSBlcnJv cgotICovCi1zdGF0aWMgaW50Ci1zZWN1cmVfcmVhZChmZCwgYnVmLCBuYnl0ZSkgaW50IGZkOyBj aGFyICpidWY7IGludCBuYnl0ZTsgewotICAgIHN0YXRpYyBpbnQgYyA9IDA7Ci0gICAgaW50IGk7 Ci0KLSAgICBkZWJ1ZyhGMTAxLCJzZWN1cmVfcmVhZCBieXRlcyByZXF1ZXN0ZWQiLCIiLG5ieXRl KTsKLSAgICBpZiAoYyA9PSBFT0YpCi0gICAgICByZXR1cm4oYyA9IDApOwotICAgIGZvciAoaSA9 IDA7IG5ieXRlID4gMDsgbmJ5dGUtLSkgewotICAgICAgICBjID0gc2VjdXJlX2dldGMoZmQsMCk7 Ci0gICAgICAgIHN3aXRjaCAoYykgewotICAgICAgICAgIGNhc2UgLTk6ICAgICAgICAgICAgICAg ICAgICAgIC8qIENhbmNlbGVkIGZyb20ga2V5Ym9hcmQgKi8KLSAgICAgICAgICAgIGRlYnVnKEYx MDEsImZ0cCBzZWN1cmVfcmVhZCBpbnRlcnJ1cHRlZCIsIiIsYyk7Ci0gICAgICAgICAgICByZXR1 cm4oMCk7Ci0gICAgICAgICAgY2FzZSBFUlI6Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAg c2VjdXJlX3JlYWQgZXJyb3IiLCIiLGMpOwotICAgICAgICAgICAgcmV0dXJuKGMpOwotICAgICAg ICAgIGNhc2UgRU9GOgotICAgICAgICAgICAgZGVidWcoRjEwMSwiZnRwIHNlY3VyZV9yZWFkIEVP RiIsIiIsYyk7Ci0gICAgICAgICAgICBpZiAoIWkpCi0gICAgICAgICAgICAgIGMgPSAwOwotICAg ICAgICAgICAgcmV0dXJuKGkpOwotI2lmZGVmIEZUUF9USU1FT1VUCi0gICAgICAgICAgY2FzZSAt MzoKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImZ0cCBzZWN1cmVfcmVhZCB0aW1lb3V0IiwiIixj KTsKLQkgICAgcmV0dXJuKGMpOwotI2VuZGlmCS8qIEZUUF9USU1FT1VUICovCi0gICAgICAgICAg ZGVmYXVsdDoKLSAgICAgICAgICAgIGJ1ZltpKytdID0gYzsKLSAgICAgICAgfQotICAgIH0KLSAg ICByZXR1cm4oaSk7Ci19Ci0KLSNpZmRlZiBVU0VfUlVTRVJQQVNTCi0vKiBCRUdJTl9SVVNFUlBB U1MKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBv ZiBDYWxpZm9ybmlhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFs bCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhp cyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2Vt ZW50OgotICogICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBVbml2ZXJzaXR5IG9mCi0gKiAgICAgIENhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMg Y29udHJpYnV0b3JzLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBu b3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVu ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICog ICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBg QVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFS RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVU T1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElO RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0g KiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ Ci0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg VEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIGxpbnQK LXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylydXNlcnBhc3MuYyA1LjMgKEJlcmtlbGV5KSAz LzEvOTEiOwotI2VuZGlmIC8qIG5vdCBsaW50ICovCi0KLSNpZm5kZWYgTUFYSE9TVE5BTUVMRU4K LSNkZWZpbmUgTUFYSE9TVE5BTUVMRU4gNjQKLSNlbmRpZgotCi1jaGFyICogcmVudmxvb2soKTsK LXN0YXRpYyBGSUxFICogY2ZpbGU7Ci0KLSNkZWZpbmUgREVGQVVMVCAxCi0jZGVmaW5lIExPR0lO ICAgMgotI2RlZmluZSBQQVNTV0QgIDMKLSNkZWZpbmUgQUNDT1VOVCA0Ci0jZGVmaW5lIE1BQ0RF RiAgNQotI2RlZmluZSBJRCAgICAgIDEwCi0jZGVmaW5lIE1BQ0ggICAgMTEKLQotc3RhdGljIGNo YXIgdG9rdmFsWzEwMF07Ci0KLXN0YXRpYyBzdHJ1Y3QgdG9rdGFiIHsKLSAgICBjaGFyICp0b2tz dHI7Ci0gICAgaW50IHR2YWw7Ci19IHRva3RhYltdPSB7Ci0gICAgImRlZmF1bHQiLCAgREVGQVVM VCwKLSAgICAibG9naW4iLCAgICBMT0dJTiwKLSAgICAicGFzc3dvcmQiLCBQQVNTV0QsCi0gICAg InBhc3N3ZCIsICAgUEFTU1dELAotICAgICJhY2NvdW50IiwgIEFDQ09VTlQsCi0gICAgIm1hY2hp bmUiLCAgTUFDSCwKLSAgICAibWFjZGVmIiwgICBNQUNERUYsCi0gICAgMCwgICAgICAgICAgMAot fTsKLQotc3RhdGljIGludAotdG9rZW4oKSB7Ci0gICAgY2hhciAqY3A7Ci0gICAgaW50IGM7Ci0g ICAgc3RydWN0IHRva3RhYiAqdDsKLQotICAgIGlmIChmZW9mKGNmaWxlKSkKLSAgICAgIHJldHVy bigwKTsKLSAgICB3aGlsZSAoKGMgPSBnZXRjKGNmaWxlKSkgIT0gRU9GICYmCi0gICAgICAgICAg IChjID09ICdcbicgfHwgYyA9PSAnXHQnIHx8IGMgPT0gJyAnIHx8IGMgPT0gJywnKSkKLSAgICAg IGNvbnRpbnVlOwotICAgIGlmIChjID09IEVPRikKLSAgICAgIHJldHVybigwKTsKLSAgICBjcCA9 IHRva3ZhbDsKLSAgICBpZiAoYyA9PSAnIicpIHsKLSAgICAgICAgd2hpbGUgKChjID0gZ2V0Yyhj ZmlsZSkpICE9IEVPRiAmJiBjICE9ICciJykgewotICAgICAgICAgICAgaWYgKGMgPT0gJ1xcJykK LSAgICAgICAgICAgICAgYyA9IGdldGMoY2ZpbGUpOwotICAgICAgICAgICAgKmNwKysgPSBjOwot ICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgKmNwKysgPSBjOwotICAgICAgICB3aGls ZSAoKGMgPSBnZXRjKGNmaWxlKSkgIT0gRU9GCi0gICAgICAgICAgICAgICAmJiBjICE9ICdcbicg JiYgYyAhPSAnXHQnICYmIGMgIT0gJyAnICYmIGMgIT0gJywnKSB7Ci0gICAgICAgICAgICBpZiAo YyA9PSAnXFwnKQotICAgICAgICAgICAgICBjID0gZ2V0YyhjZmlsZSk7Ci0gICAgICAgICAgICAq Y3ArKyA9IGM7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgKmNwID0gMDsKLSAgICBpZiAodG9rdmFs WzBdID09IDApCi0gICAgICByZXR1cm4oMCk7Ci0gICAgZm9yICh0ID0gdG9rdGFiOyB0LT50b2tz dHI7IHQrKykKLSAgICAgIGlmICghc3RyY21wKHQtPnRva3N0ciwgdG9rdmFsKSkKLSAgICAgICAg cmV0dXJuKHQtPnR2YWwpOwotICAgIHJldHVybihJRCk7Ci19Ci0KLXJ1c2VycGFzcyhob3N0LCBh bmFtZSwgYXBhc3MsIGFhY2N0KQotICAgIGNoYXIgKmhvc3QsICoqYW5hbWUsICoqYXBhc3MsICoq YWFjY3Q7Ci17Ci0gICAgY2hhciAqaGRpciwgYnVmW0ZUUF9CVUZTSVpdLCAqdG1wOwotICAgIGNo YXIgbXluYW1lW01BWEhPU1ROQU1FTEVOXSwgKm15ZG9tYWluOwotICAgIGludCB0LCBpLCBjLCB1 c2VkZWZhdWx0ID0gMDsKLSNpZmRlZiBOVAotICAgIHN0cnVjdCBfc3RhdCBzdGI7Ci0jZWxzZSAv KiBOVCAqLwotICAgIHN0cnVjdCBzdGF0IHN0YjsKLSNlbmRpZiAvKiBOVCAqLwotCi0gICAgaGRp ciA9IGdldGVudigiSE9NRSIpOwotICAgIGlmIChoZGlyID09IE5VTEwpCi0gICAgICAgIGhkaXIg PSAiLiI7Ci0gICAgY2ttYWttc2coYnVmLEZUUF9CVUZTSVosaGRpciwiLy5uZXRyYyIsTlVMTCxO VUxMKTsKLSAgICBjZmlsZSA9IGZvcGVuKGJ1ZiwgInIiKTsKLSAgICBpZiAoY2ZpbGUgPT0gTlVM TCkgewotICAgICAgICBpZiAoZXJybm8gIT0gRU5PRU5UKQotICAgICAgICAgIHBlcnJvcihidWYp OwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotICAgIGlmIChnZXRob3N0bmFtZShteW5hbWUs IE1BWEhPU1ROQU1FTEVOKSA8IDApCi0gICAgICBteW5hbWVbMF0gPSAnXDAnOwotICAgIGlmICgo bXlkb21haW4gPSBja3N0cmNocihteW5hbWUsICcuJykpID09IE5VTEwpCi0gICAgICBteWRvbWFp biA9ICIiOwotCi0gIG5leHQ6Ci0gICAgd2hpbGUgKCh0ID0gdG9rZW4oKSkpIHN3aXRjaCh0KSB7 Ci0KLSAgICAgIGNhc2UgREVGQVVMVDoKLSAgICAgICAgdXNlZGVmYXVsdCA9IDE7Ci0gICAgICAg IC8qIEZBTEwgVEhST1VHSCAqLwotCi0gICAgICBjYXNlIE1BQ0g6Ci0gICAgICAgIGlmICghdXNl ZGVmYXVsdCkgewotICAgICAgICAgICAgaWYgKHRva2VuKCkgIT0gSUQpCi0gICAgICAgICAgICAg IGNvbnRpbnVlOwotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIEFsbG93IG1hdGNoIGVp dGhlciBmb3IgdXNlcidzIGlucHV0IGhvc3QgbmFtZQotICAgICAgICAgICAgICogb3Igb2ZmaWNp YWwgaG9zdG5hbWUuICBBbHNvIGFsbG93IG1hdGNoIG9mCi0gICAgICAgICAgICAgKiBpbmNvbXBs ZXRlbHktc3BlY2lmaWVkIGhvc3QgaW4gbG9jYWwgZG9tYWluLgotICAgICAgICAgICAgICovCi0g ICAgICAgICAgICBpZiAoY2tzdHJjbXAoaG9zdCwgdG9rdmFsLC0xLDEpID09IDApCi0gICAgICAg ICAgICAgIGdvdG8gbWF0Y2g7Ci0gICAgICAgICAgICBpZiAoY2tzdHJjbXAoZnRwX2hvc3QsIHRv a3ZhbCwtMSwwKSA9PSAwKQotICAgICAgICAgICAgICBnb3RvIG1hdGNoOwotICAgICAgICAgICAg aWYgKCh0bXAgPSBja3N0cmNocihmdHBfaG9zdCwgJy4nKSkgIT0gTlVMTCAmJgotICAgICAgICAg ICAgICAgIGNrc3RyY21wKHRtcCwgbXlkb21haW4sLTEsMSkgPT0gMCAmJgotICAgICAgICAgICAg ICAgIGNrc3RyY21wKGZ0cF9ob3N0LCB0b2t2YWwsIHRtcC1mdHBfaG9zdCwwKSA9PSAwICYmCi0g ICAgICAgICAgICAgICAgdG9rdmFsW3RtcCAtIGZ0cF9ob3N0XSA9PSAnXDAnKQotICAgICAgICAg ICAgICBnb3RvIG1hdGNoOwotICAgICAgICAgICAgaWYgKCh0bXAgPSBja3N0cmNocihob3N0LCAn LicpKSAhPSBOVUxMICYmCi0gICAgICAgICAgICAgICAgY2tzdHJjbXAodG1wLCBteWRvbWFpbiwt MSwxKSA9PSAwICYmCi0gICAgICAgICAgICAgICAgY2tzdHJjbXAoaG9zdCwgdG9rdmFsLCB0bXAg LSBob3N0LCAwKSA9PSAwICYmCi0gICAgICAgICAgICAgICAgdG9rdmFsW3RtcCAtIGhvc3RdID09 ICdcMCcpCi0gICAgICAgICAgICAgIGdvdG8gbWF0Y2g7Ci0gICAgICAgICAgICBjb250aW51ZTsK LSAgICAgICAgfQotCi0gICAgICBtYXRjaDoKLSAgICAgICAgd2hpbGUgKCh0ID0gdG9rZW4oKSkg JiYgdCAhPSBNQUNIICYmIHQgIT0gREVGQVVMVCkgc3dpdGNoKHQpIHsKLQotICAgICAgICAgIGNh c2UgTE9HSU46Ci0gICAgICAgICAgICBpZiAodG9rZW4oKSkKLSAgICAgICAgICAgICAgaWYgKCph bmFtZSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAqYW5hbWUgPSBtYWxsb2MoKHVuc2lnbmVk KSBzdHJsZW4odG9rdmFsKSArIDEpOwotICAgICAgICAgICAgICAgICAgc3RyY3B5KCphbmFtZSwg dG9rdmFsKTsgICAgICAvKiBzYWZlICovCi0gICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg ICAgICAgICAgICBpZiAoc3RyY21wKCphbmFtZSwgdG9rdmFsKSkKLSAgICAgICAgICAgICAgICAg ICAgZ290byBuZXh0OwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICBjYXNlIFBBU1NXRDoKLSAgICAgICAgICAgIGlmIChzdHJjbXAoKmFuYW1lLCAiYW5vbnlt b3VzIikgJiYKLSAgICAgICAgICAgICAgICBmc3RhdChmaWxlbm8oY2ZpbGUpLCAmc3RiKSA+PSAw ICYmCi0gICAgICAgICAgICAgICAgKHN0Yi5zdF9tb2RlICYgMDc3KSAhPSAwKSB7Ci0gICAgICAg ICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAtIC5uZXRyYyBmaWxlIG5vdCBjb3JyZWN0 IG1vZGUuXG4iKTsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlJlbW92ZSBwYXNz d29yZCBvciBjb3JyZWN0IG1vZGUuXG4iKTsKLSAgICAgICAgICAgICAgICBnb3RvIGJhZDsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0b2tlbigpICYmICphcGFzcyA9PSAwKSB7Ci0g ICAgICAgICAgICAgICAgKmFwYXNzID0gbWFsbG9jKCh1bnNpZ25lZCkgc3RybGVuKHRva3ZhbCkg KyAxKTsKLSAgICAgICAgICAgICAgICBzdHJjcHkoKmFwYXNzLCB0b2t2YWwpOyAgICAgICAgICAv KiBzYWZlICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBj YXNlIEFDQ09VTlQ6Ci0gICAgICAgICAgICBpZiAoZnN0YXQoZmlsZW5vKGNmaWxlKSwgJnN0Yikg Pj0gMAotICAgICAgICAgICAgICAgICYmIChzdGIuc3RfbW9kZSAmIDA3NykgIT0gMCkgewotICAg ICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgLSAubmV0cmMgZmlsZSBub3QgY29y cmVjdCBtb2RlLlxuIik7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJSZW1vdmUg YWNjb3VudCBvciBjb3JyZWN0IG1vZGUuXG4iKTsKLSAgICAgICAgICAgICAgICBnb3RvIGJhZDsK LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0b2tlbigpICYmICphYWNjdCA9PSAwKSB7 Ci0gICAgICAgICAgICAgICAgKmFhY2N0ID0gbWFsbG9jKCh1bnNpZ25lZCkgc3RybGVuKHRva3Zh bCkgKyAxKTsKLSAgICAgICAgICAgICAgICBzdHJjcHkoKmFhY2N0LCB0b2t2YWwpOyAgICAgICAg ICAvKiBzYWZlICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAg ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gLm5ldHJj IGtleXdvcmQgJXNcbiIsIHRva3ZhbCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot ICAgICAgICBnb3RvIGRvbmU7Ci0gICAgfQotCi0gIGRvbmU6Ci0gICAgZmNsb3NlKGNmaWxlKTsK LSAgICByZXR1cm4oMCk7Ci0KLSAgYmFkOgotICAgIGZjbG9zZShjZmlsZSk7Ci0gICAgcmV0dXJu KC0xKTsKLX0KLSNlbmRpZiAvKiBVU0VfUlVTRVJQQVNTICovCi0KLXN0YXRpYyBjaGFyICpyYWRp eE4gPQotICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2 d3h5ejAxMjM0NTY3ODkrLyI7Ci0KLXN0YXRpYyBjaGFyIHBhZCA9ICc9JzsKLQotc3RhdGljIGlu dAotcmFkaXhfZW5jb2RlKGluYnVmLCBvdXRidWYsIGlubGVuLCBvdXRsZW4sIGRlY29kZSkKLSAg ICBDSEFSIGluYnVmW10sIG91dGJ1ZltdOwotICAgIGludCBpbmxlbiwgKm91dGxlbiwgZGVjb2Rl OwotewotICAgIGludCBpLCBqLCBEID0gMDsKLSAgICBjaGFyICpwOwotICAgIENIQVIgYyA9IE5V TDsKLQotICAgIGlmIChkZWNvZGUpIHsKLSAgICAgICAgZm9yIChpID0gMCwgaiA9IDA7IGluYnVm W2ldICYmIGluYnVmW2ldICE9IHBhZDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoKHAgPSBja3N0 cmNocihyYWRpeE4sIGluYnVmW2ldKSkgPT0gTlVMTCkKLSAgICAgICAgICAgICAgcmV0dXJuKDEp OwotICAgICAgICAgICAgRCA9IHAgLSByYWRpeE47Ci0gICAgICAgICAgICBzd2l0Y2ggKGkmMykg ewotICAgICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAgICAgb3V0YnVmW2pdID0gRDw8 MjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSAxOgotICAgICAg ICAgICAgICAgIG91dGJ1ZltqKytdIHw9IEQ+PjQ7Ci0gICAgICAgICAgICAgICAgb3V0YnVmW2pd ID0gKEQmMTUpPDw0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl IDI6Ci0gICAgICAgICAgICAgICAgb3V0YnVmW2orK10gfD0gRD4+MjsKLSAgICAgICAgICAgICAg ICBvdXRidWZbal0gPSAoRCYzKTw8NjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgICAgY2FzZSAzOgotICAgICAgICAgICAgICAgIG91dGJ1ZltqKytdIHw9IEQ7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgICAgICBpZiAoaiA9PSAqb3V0bGVuKQotICAgICAgICAgICAgICByZXR1 cm4oNCk7Ci0gICAgICAgIH0KLSAgICAgICAgc3dpdGNoIChpJjMpIHsKLSAgICAgICAgICBjYXNl IDE6IHJldHVybigzKTsKLSAgICAgICAgICBjYXNlIDI6IGlmIChEJjE1KSByZXR1cm4oMyk7Ci0g ICAgICAgICAgICBpZiAoc3RyY21wKChjaGFyICopJmluYnVmW2ldLCAiPT0iKSkgcmV0dXJuKDIp OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAzOiBpZiAoRCYzKSByZXR1cm4o Myk7Ci0gICAgICAgICAgICBpZiAoc3RyY21wKChjaGFyICopJmluYnVmW2ldLCAiPSIpKSAgcmV0 dXJuKDIpOwotICAgICAgICB9Ci0gICAgICAgICpvdXRsZW4gPSBqOwotICAgIH0gZWxzZSB7Ci0g ICAgICAgIGZvciAoaSA9IDAsIGogPSAwOyBpIDwgaW5sZW47IGkrKykgewotICAgICAgICAgICAg c3dpdGNoIChpJTMpIHsKLSAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgIG91 dGJ1ZltqKytdID0gcmFkaXhOW2luYnVmW2ldPj4yXTsKLSAgICAgICAgICAgICAgICBjID0gKGlu YnVmW2ldJjMpPDw0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl IDE6Ci0gICAgICAgICAgICAgICAgb3V0YnVmW2orK10gPSByYWRpeE5bY3xpbmJ1ZltpXT4+NF07 Ci0gICAgICAgICAgICAgICAgYyA9IChpbmJ1ZltpXSYxNSk8PDI7Ci0gICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICBvdXRidWZbaisr XSA9IHJhZGl4TltjfGluYnVmW2ldPj42XTsKLSAgICAgICAgICAgICAgICBvdXRidWZbaisrXSA9 IHJhZGl4TltpbmJ1ZltpXSY2M107Ci0gICAgICAgICAgICAgICAgYyA9IDA7Ci0gICAgICAgICAg ICB9Ci0gICAgICAgICAgICBpZiAoaiA9PSAqb3V0bGVuKQotICAgICAgICAgICAgICByZXR1cm4o NCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGklMykgb3V0YnVmW2orK10gPSByYWRpeE5bY107 Ci0gICAgICAgIHN3aXRjaCAoaSUzKSB7Ci0gICAgICAgICAgY2FzZSAxOiBvdXRidWZbaisrXSA9 IHBhZDsKLSAgICAgICAgICBjYXNlIDI6IG91dGJ1ZltqKytdID0gcGFkOwotICAgICAgICB9Ci0g ICAgICAgIG91dGJ1Zlsqb3V0bGVuID0gal0gPSAnXDAnOwotICAgIH0KLSAgICByZXR1cm4oMCk7 Ci19Ci0KLXN0YXRpYyBjaGFyICoKLXJhZGl4X2Vycm9yKGUpIGludCBlOwotewotICAgIHN3aXRj aCAoZSkgewotICAgICAgY2FzZSAwOiAgcmV0dXJuKCJTdWNjZXNzIik7Ci0gICAgICBjYXNlIDE6 ICByZXR1cm4oIkJhZCBjaGFyYWN0ZXIgaW4gZW5jb2RpbmciKTsKLSAgICAgIGNhc2UgMjogIHJl dHVybigiRW5jb2Rpbmcgbm90IHByb3Blcmx5IHBhZGRlZCIpOwotICAgICAgY2FzZSAzOiAgcmV0 dXJuKCJEZWNvZGVkICMgb2YgYml0cyBub3QgYSBtdWx0aXBsZSBvZiA4Iik7Ci0gICAgICBjYXNl IDQ6ICByZXR1cm4oIk91dHB1dCBidWZmZXIgdG9vIHNtYWxsIik7Ci0gICAgICBkZWZhdWx0OiBy ZXR1cm4oIlVua25vd24gZXJyb3IiKTsKLSAgICB9Ci19Ci0vKiBFTkRfUlVTRVJQQVNTICovCi0K LSNpZmRlZiBGVFBfU1JQCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSB8ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfAotIHwgICBQYWNrYWdlOiBzcnBmdHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gfCAgIEF1dGhvcjogRXVnZW5lIEpob25nICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSB8ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfAotICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKgotICogQ29weXJp Z2h0IChjKSAxOTk3LTE5OTkgIFRoZSBTdGFuZm9yZCBTUlAgQXV0aGVudGljYXRpb24gUHJvamVj dAotICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBn cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKLSAqIGEgY29w eSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo ZQotICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJp Y3Rpb24sIGluY2x1ZGluZwotICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNl LCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAotICogZGlzdHJpYnV0ZSwgc3VibGljZW5z ZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCi0gKiBwZXJtaXQg cGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1Ympl Y3QgdG8KLSAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29w eXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQotICogaW5j bHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdh cmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUy1JUyIgQU5EIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsCi0gKiBFWFBSRVNTLCBJTVBMSUVEIE9SIE9USEVSV0lTRSwg SU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZCi0gKiBXQVJSQU5UWSBPRiBNRVJDSEFO VEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKgotICogSU4g Tk8gRVZFTlQgU0hBTEwgU1RBTkZPUkQgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURF TlRBTCwKLSAqIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgS0lORCwg T1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUgotICogUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0Us IERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBPUiBOT1QgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ QklMSVRZIE9GIERBTUFHRSwgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBBUklTSU5H IE9VVAotICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0Ug T0YgVEhJUyBTT0ZUV0FSRS4KLSAqCi0gKiBJbiBhZGRpdGlvbiwgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zIGFwcGx5OgotICoKLSAqIDEuIEFueSBzb2Z0d2FyZSB0aGF0IGluY29ycG9yYXRlcyB0 aGUgU1JQIGF1dGhlbnRpY2F0aW9uIHRlY2hub2xvZ3kKLSAqICAgIG11c3QgZGlzcGxheSB0aGUg Zm9sbG93aW5nIGFja25vd2xlZ21lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IHVzZXMgdGhlICdT ZWN1cmUgUmVtb3RlIFBhc3N3b3JkJyBjcnlwdG9ncmFwaGljCi0gKiAgICAgYXV0aGVudGljYXRp b24gc3lzdGVtIGRldmVsb3BlZCBieSBUb20gV3UgKHRqd0BDUy5TdGFuZm9yZC5FRFUpLiIKLSAq Ci0gKiAyLiBBbnkgc29mdHdhcmUgdGhhdCBpbmNvcnBvcmF0ZXMgYWxsIG9yIHBhcnQgb2YgdGhl IFNSUCBkaXN0cmlidXRpb24KLSAqICAgIGl0c2VsZiBtdXN0IGFsc28gZGlzcGxheSB0aGUgZm9s bG93aW5nIGFja25vd2xlZGdtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgVG9tIFd1IGFuZCBFdWdlbmUKLSAqICAgICBKaG9uZyBmb3IgdGhl IFNSUCBEaXN0cmlidXRpb24gKGh0dHA6Ly9zcnAuc3RhbmZvcmQuZWR1L3NycC8pLiIKLSAqCi0g KiAzLiBSZWRpc3RyaWJ1dGlvbnMgaW4gc291cmNlIG9yIGJpbmFyeSBmb3JtIG11c3QgcmV0YWlu IGFuIGludGFjdCBjb3B5Ci0gKiAgICBvZiB0aGlzIGNvcHlyaWdodCBub3RpY2UgYW5kIGxpc3Qg b2YgY29uZGl0aW9ucy4KLSAqLwotCi0jZGVmaW5lIFNSUF9QUk9UX1ZFUlNJT04gICAgICAgIDEK LQotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSNkZWZpbmUgU1JQX0RFRkFVTFRfQ0lQSEVSICAgICAg Q0lQSEVSX0lEX0NBU1Q1X0NCQwotI2Vsc2UKLSNkZWZpbmUgU1JQX0RFRkFVTFRfQ0lQSEVSICAg ICAgQ0lQSEVSX0lEX05PTkUKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0KLSNkZWZpbmUg U1JQX0RFRkFVTFRfSEFTSCAgICAgICAgSEFTSF9JRF9TSEEKLQotQ0hBUiBzcnBfcHJlZl9jaXBo ZXIgPSBDSVBIRVJfSURfREVTM19FQ0I7Ci1DSEFSIHNycF9wcmVmX2hhc2ggPSBIQVNIX0lEX1NI QTsKLQotc3RhdGljIHN0cnVjdCB0X2NsaWVudCAqdGMgPSBOVUxMOwotc3RhdGljIENIQVIgKnNr ZXkgPSBOVUxMOwotc3RhdGljIGtyeXB0b19jb250ZXh0ICppbmNyeXB0ID0gTlVMTDsKLXN0YXRp YyBrcnlwdG9fY29udGV4dCAqb3V0Y3J5cHQgPSBOVUxMOwotCi10eXBlZGVmIHVuc2lnbmVkIGlu dCBzcnBfdWludDMyOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotIHwgc3JwX3NlbGNpcGhlcjogc2VsZWN0IGNpcGhl ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSArLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGlu dAotc3JwX3NlbGNpcGhlciAoY25hbWUpIGNoYXIgKmNuYW1lOyB7Ci0gICAgY2lwaGVyX2Rlc2Mg KmNkOwotCi0gICAgaWYgKCEoY2QgPSBjaXBoZXJfZ2V0ZGVzY2J5bmFtZSAoY25hbWUpKSkgewot ICAgICAgICBpbnQgaTsKLSAgICAgICAgQ0hBUiAqbGlzdCA9IGNpcGhlcl9nZXRsaXN0ICgpOwot Ci0gICAgICAgIGZwcmludGYgKHN0ZGVyciwgImZ0cDogc3VwcG9ydGVkIGNpcGhlcnM6XG5cbiIp OwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RybGVuIChsaXN0KTsgaSsrKQotICAgICAgICAg IGZwcmludGYgKHN0ZGVyciwgIiAgICAlc1xuIiwgKGNpcGhlcl9nZXRkZXNjYnlpZChsaXN0W2ld KSktPm5hbWUpOwotICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOwotICAgICAgICByZXR1 cm4gLTE7Ci0gICAgfQotICAgIHNycF9wcmVmX2NpcGhlciA9IGNkLT5pZDsKLSAgICByZXR1cm4g MDsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSsKLSB8IHNycF9zZWxoYXNoOiBzZWxlY3QgaGFzaCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQKLXNycF9z ZWxoYXNoIChobmFtZSkgY2hhciAqaG5hbWU7IHsKLSAgICBoYXNoX2Rlc2MgKmhkOwotCi0gICAg aWYgKCEoaGQgPSBoYXNoX2dldGRlc2NieW5hbWUgKGhuYW1lKSkpIHsKLSAgICAgICAgaW50IGk7 Ci0gICAgICAgIENIQVIgKmxpc3QgPSBoYXNoX2dldGxpc3QgKCk7Ci0KLSAgICAgICAgZnByaW50 ZiAoc3RkZXJyLCAiZnRwOiBzdXBwb3J0ZWQgaGFzaCBmdW5jdGlvbnM6XG5cbiIpOwotICAgICAg ICBmb3IgKGkgPSAwOyBpIDwgc3RybGVuIChsaXN0KTsgaSsrKQotICAgICAgICAgIGZwcmludGYg KHN0ZGVyciwgIiAgICAlc1xuIiwgKGhhc2hfZ2V0ZGVzY2J5aWQobGlzdFtpXSkpLT5uYW1lKTsK LSAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAg IH0KLSAgICBzcnBfcHJlZl9oYXNoID0gaGQtPmlkOwotICAgIHJldHVybiAwOwotfQotCi0vKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKwotIHwgc3JwX3VzZXJwYXNzOiBnZXQgdXNlcm5hbWUgYW5kIHBhc3N3b3JkICAgICAgICAg ICAgICAgICAgICAgIHwKLSArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludAotc3JwX3VzZXJwYXNzIChob3N0 KSBjaGFyICpob3N0OyB7Ci0gICAgY2hhciB0bXBbQlVGU0laXSwgcHJvbXB0W1BST01QVFNJWl07 Ci0gICAgY2hhciAqdXNlcjsKLQotICAgIHVzZXIgPSBOVUxMOwotI2lmZGVmIFVTRV9SVVNFUlBB U1MKLSAgICBydXNlcnBhc3MgKGhvc3QsICZ1c2VyLCAmc3JwX3Bhc3MsICZzcnBfYWNjdCk7Ci0j ZW5kaWYgLyogVVNFX1JVU0VSUEFTUyAqLwotCi0gICAgd2hpbGUgKHVzZXIgPT0gTlVMTCkgICAg IHsKLSAgICAgICAgY2hhciAqbXluYW1lOwotICAgICAgICBpbnQgb2s7Ci0KLSAgICAgICAgbXlu YW1lID0gd2hvYW1pKCk7Ci0gICAgICAgIGlmICghbXluYW1lKSBteW5hbWUgPSAiIjsKLSAgICAg ICAgaWYgKG15bmFtZVswXSkKLSAgICAgICAgICBja21ha3htc2cocHJvbXB0LFBST01QVFNJWiwi IE5hbWUgKCIsaG9zdCwiOiIsbXluYW1lLCIpOiAiLAotICAgICAgICAgICAgICAgICAgICBOVUxM LE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg IGNrbWFrbXNnKHByb21wdCxQUk9NUFRTSVosIiBOYW1lICgiLGhvc3QsIik6ICIsTlVMTCk7Ci0g ICAgICAgIHRtcFswXSA9ICdcMCc7Ci0gICAgICAgIG9rID0gdXFfdHh0KE5VTEwscHJvbXB0LDEs TlVMTCx0bXAsQlVGU0laLE5VTEwsCi0gICAgICAgICAgICAgICAgICAgIERFRkFVTFRfVVFfVElN RU9VVCk7Ci0gICAgICAgIGlmICghb2sgfHwgKnRtcCA9PSAnXDAnKQotICAgICAgICAgIHVzZXIg PSBteW5hbWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICB1c2VyID0gYnJzdHJpcCh0bXApOwot ICAgIH0KLSAgICBja3N0cm5jcHkgKHNycF91c2VyLCB1c2VyLEJVRlNJWik7Ci0gICAgcmV0dXJu KDApOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKwotIHwgc3JwX3Jlc2V0OiByZXNldCBzcnAgaW5mb3JtYXRpb24g ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludAotc3Jw X3Jlc2V0ICgpIHsKLSAgICBpZiAodGMpIHsgdF9jbGllbnRjbG9zZSAodGMpOyB0YyA9IE5VTEw7 IH0KLSAgICBpZiAoaW5jcnlwdCkgeyBrcnlwdG9fZGVsZXRlIChpbmNyeXB0KTsgaW5jcnlwdCA9 IE5VTEw7IH0KLSAgICBpZiAob3V0Y3J5cHQpIHsga3J5cHRvX2RlbGV0ZSAob3V0Y3J5cHQpOyBv dXRjcnlwdCA9IE5VTEw7IH0KLSAgICByZXR1cm4oMCk7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gfCBzcnBf ZnRwX2F1dGg6IHBlcmZvcm0gc3JwIGF1dGhlbnRpY2F0aW9uICAgICAgICAgICAgICAgICAgICAg ICAgIHwKLSArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludAotc3JwX2Z0cF9hdXRoKGhvc3QsIHVzZXIsIHBh c3MpCi0gICAgY2hhciAqaG9zdDsKLSAgICBjaGFyICp1c2VyOwotICAgIGNoYXIgKnBhc3M7Ci17 Ci0gICAgc3RydWN0IHRfbnVtICp3cDsKLSAgICBzdHJ1Y3QgdF9udW0gTjsKLSAgICBzdHJ1Y3Qg dF9udW0gZzsKLSAgICBzdHJ1Y3QgdF9udW0gczsKLSAgICBzdHJ1Y3QgdF9udW0geXA7Ci0gICAg Q0hBUiBidWZbRlRQX0JVRlNJWl07Ci0gICAgQ0hBUiB0bXBbRlRQX0JVRlNJWl07Ci0gICAgQ0hB UiAqYnAsICpjcDsKLSAgICBpbnQgbiwgZSwgY2xlbiwgYmxlbiwgbGVuLCBpOwotICAgIENIQVIg Y2lkID0gMDsKLSAgICBDSEFSIGhpZCA9IDA7Ci0KLSAgICBzcnBfcGFzcyA9IHNycF9hY2N0ID0g MDsKLQotICAgIG4gPSBmdHBjbWQoIkFVVEggU1JQIixOVUxMLDAsMCxmdHBfdmJtKTsKLSAgICBp ZiAobiAhPSBSRVBMWV9DT05USU5VRSkgewotICAgICAgICBpZiAoZnRwX2RlYikKLSAgICAgICAg ICAgIGZwcmludGYoc3RkZXJyLCAiU1JQIHJlamVjdGVkIGFzIGFuIGF1dGhlbnRpY2F0aW9uIHR5 cGVcbiIpOwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfSBlbHNlIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogU2VuZCBwcm90b2NvbCB2ZXJzaW9uICovCi0gICAgICAgIENIQVIgdmVy c1s0XTsKLSAgICAgICAgbWVtc2V0ICh2ZXJzLCAwLCA0KTsKLSAgICAgICAgdmVyc1szXSA9IFNS UF9QUk9UX1ZFUlNJT047Ci0gICAgICAgIGlmICghcXVpZXQpCi0gICAgICAgICAgcHJpbnRmICgi U1JQIGFjY2VwdGVkIGFzIGF1dGhlbnRpY2F0aW9uIHR5cGUuXG4iKTsKLSAgICAgICAgYnAgPSB0 bXA7IGJsZW4gPSAwOwotICAgICAgICBzcnBfcHV0ICh2ZXJzLCAmYnAsIDQsICZibGVuKTsKLSAg ICAgICAgbGVuID0gRlRQX0JVRlNJWjsKLSAgICAgICAgaWYgKGUgPSByYWRpeF9lbmNvZGUgKHRt cCwgYnVmLCBibGVuLCAmbGVuLCBSQURJWF9FTkNPREUpKQotICAgICAgICAgIGdvdG8gZW5jb2Rl X2Vycm9yOwotICAgICAgICByZXBseV9wYXJzZSA9ICJBREFUPSI7Ci0gICAgICAgIG4gPSBmdHBj bWQoIkFEQVQiLGJ1ZiwtMSwtMSwwKTsKLSAgICB9Ci0gICAgaWYgKG4gPT0gUkVQTFlfQ09OVElO VUUpIHsgICAgICAgICAgLyogR2V0IHByb3RvY29sIHZlcnNpb24gKi8KLSAgICAgICAgYnAgPSBi dWY7Ci0gICAgICAgIGlmICghcmVwbHlfcGFyc2UpCi0gICAgICAgICAgZ290byBkYXRhX2Vycm9y OwotICAgICAgICBibGVuID0gRlRQX0JVRlNJWjsKLSAgICAgICAgaWYgKGUgPSByYWRpeF9lbmNv ZGUocmVwbHlfcGFyc2UsIGJwLCAwLCAmYmxlbiwgUkFESVhfREVDT0RFKSkKLSAgICAgICAgICBn b3RvIGRlY29kZV9lcnJvcjsKLSAgICAgICAgaWYgKHNycF9nZXQgKCZicCwgJmNwLCAmYmxlbiwg JmNsZW4pICE9IDQpCi0gICAgICAgICAgZ290byBkYXRhX2Vycm9yOwotCi0gICAgICAgIGlmICho b3N0KSB7ICAgICAgICAgICAgICAgICAgICAgLyogR2V0IHVzZXJuYW1lL3Bhc3N3b3JkIGlmIG5l ZWRlZCAqLwotICAgICAgICAgICAgc3JwX3VzZXJwYXNzIChob3N0KTsKLSAgICAgICAgfSBlbHNl IHsKLSAgICAgICAgICAgIGNrc3RybmNweSAoc3JwX3VzZXIsIHVzZXIsIEJVRlNJWik7Ci0gICAg ICAgICAgICBzcnBfcGFzcyA9IHBhc3M7Ci0gICAgICAgIH0KLSAgICAgICAgYnAgPSB0bXA7IGJs ZW4gPSAwOyAgICAgICAgICAgICAvKiBTZW5kIHVzZXJuYW1lICovCi0gICAgICAgIHNycF9wdXQg KHNycF91c2VyLCAmYnAsIHN0cmxlbiAoc3JwX3VzZXIpLCAmYmxlbik7Ci0gICAgICAgIGxlbiA9 IEZUUF9CVUZTSVo7Ci0gICAgICAgIGlmIChlID0gcmFkaXhfZW5jb2RlICh0bXAsIGJ1ZiwgYmxl biwgJmxlbiwgUkFESVhfRU5DT0RFKSkKLSAgICAgICAgICBnb3RvIGVuY29kZV9lcnJvcjsKLSAg ICAgICAgcmVwbHlfcGFyc2UgPSAiQURBVD0iOwotICAgICAgICBuID0gZnRwY21kKCJBREFUIixi dWYsLTEsLTEsMCk7Ci0gICAgfQotICAgIGlmIChuID09IFJFUExZX0NPTlRJTlVFKSB7ICAgICAg ICAgIC8qIEdldCBOLCBnIGFuZCBzICovCi0gICAgICAgIGJwID0gYnVmOwotICAgICAgICBpZiAo IXJlcGx5X3BhcnNlKQotICAgICAgICAgIGdvdG8gZGF0YV9lcnJvcjsKLSAgICAgICAgYmxlbiA9 IEZUUF9CVUZTSVo7Ci0gICAgICAgIGlmIChlID0gcmFkaXhfZW5jb2RlIChyZXBseV9wYXJzZSwg YnAsIDAsICZibGVuLCBSQURJWF9ERUNPREUpKQotICAgICAgICAgIGdvdG8gZGVjb2RlX2Vycm9y OwotICAgICAgICBpZiAoc3JwX2dldCAoJmJwLCAmKE4uZGF0YSksICZibGVuLCAmKE4ubGVuKSkg PCAwKQotICAgICAgICAgIGdvdG8gZGF0YV9lcnJvcjsKLSAgICAgICAgaWYgKHNycF9nZXQgKCZi cCwgJihnLmRhdGEpLCAmYmxlbiwgJihnLmxlbikpIDwgMCkKLSAgICAgICAgICBnb3RvIGRhdGFf ZXJyb3I7Ci0gICAgICAgIGlmIChzcnBfZ2V0ICgmYnAsICYocy5kYXRhKSwgJmJsZW4sICYocy5s ZW4pKSA8IDApCi0gICAgICAgICAgZ290byBkYXRhX2Vycm9yOwotICAgICAgICBpZiAoKHRjID0g dF9jbGllbnRvcGVuIChzcnBfdXNlciwgJk4sICZnLCAmcykpID09IE5VTEwpIHsKLSAgICAgICAg ICAgIGZwcmludGYgKHN0ZGVyciwgIlVuYWJsZSB0byBvcGVuIFNSUCBjbGllbnQgc3RydWN0dXJl LlxuIik7Ci0gICAgICAgICAgICBnb3RvIGJhZDsKLSAgICAgICAgfQotICAgICAgICB3cCA9IHRf Y2xpZW50Z2VuZXhwICh0Yyk7ICAgICAgIC8qIFNlbmQgd3AgKi8KLSAgICAgICAgYnAgPSB0bXA7 IGJsZW4gPSAwOwotICAgICAgICBzcnBfcHV0ICh3cC0+ZGF0YSwgJmJwLCB3cC0+bGVuLCAmYmxl bik7Ci0gICAgICAgIGxlbiA9IEZUUF9CVUZTSVo7Ci0gICAgICAgIGlmIChlID0gcmFkaXhfZW5j b2RlICh0bXAsIGJ1ZiwgYmxlbiwgJmxlbiwgUkFESVhfRU5DT0RFKSkKLSAgICAgICAgICBnb3Rv IGVuY29kZV9lcnJvcjsKLSAgICAgICAgcmVwbHlfcGFyc2UgPSAiQURBVD0iOwotICAgICAgICBu ID0gZnRwY21kKCJBREFUIixidWYsLTEsLTEsMCk7Ci0gICAgfQotICAgIGlmIChuID09IFJFUExZ X0NPTlRJTlVFKSB7ICAgICAgICAgIC8qIEdldCB5cCAqLwotICAgICAgICBicCA9IGJ1ZjsKLSAg ICAgICAgaWYgKCFyZXBseV9wYXJzZSkKLSAgICAgICAgICBnb3RvIGRhdGFfZXJyb3I7Ci0gICAg ICAgIGJsZW4gPSBGVFBfQlVGU0laOwotICAgICAgICBpZiAoZSA9IHJhZGl4X2VuY29kZSAocmVw bHlfcGFyc2UsIGJwLCAwLCAmYmxlbiwgUkFESVhfREVDT0RFKSkKLSAgICAgICAgICBnb3RvIGRl Y29kZV9lcnJvcjsKLSAgICAgICAgaWYgKHNycF9nZXQgKCZicCwgJih5cC5kYXRhKSwgJmJsZW4s ICYoeXAubGVuKSkgPCAwKQotICAgICAgICAgIGdvdG8gZGF0YV9lcnJvcjsKLSAgICAgICAgaWYg KCFzcnBfcGFzcykgewotICAgICAgICAgICAgc3RhdGljIGNoYXIgZnRwcGFzc1tQQVNTQlVGU0la XTsKLSAgICAgICAgICAgIGludCBvazsKLSAgICAgICAgICAgIHNldGludCgpOwotICAgICAgICAg ICAgb2sgPSB1cV90eHQoTlVMTCwiIFNSUCBQYXNzd29yZDogIiwyLE5VTEwsZnRwcGFzcyxQQVNT QlVGU0laLE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX1VRX1RJTUVPVVQp OwotICAgICAgICAgICAgaWYgKG9rKQotCSAgICAgIHNycF9wYXNzID0gYnJzdHJpcChmdHBwYXNz KTsKLSAgICAgICAgfQotICAgICAgICB0X2NsaWVudHBhc3N3ZCAodGMsIHNycF9wYXNzKTsKLSAg ICAgICAgbWVtc2V0IChzcnBfcGFzcywgMCwgc3RybGVuIChzcnBfcGFzcykpOwotICAgICAgICBz a2V5ID0gdF9jbGllbnRnZXRrZXkgKHRjLCAmeXApOyAvKiBTZW5kIHJlc3BvbnNlICovCi0gICAg ICAgIGJwID0gdG1wOyBibGVuID0gMDsKLSAgICAgICAgc3JwX3B1dCAodF9jbGllbnRyZXNwb25z ZSAodGMpLCAmYnAsIDIwLCAmYmxlbik7Ci0gICAgICAgIGxlbiA9IEZUUF9CVUZTSVo7Ci0gICAg ICAgIGlmIChlID0gcmFkaXhfZW5jb2RlICh0bXAsIGJ1ZiwgYmxlbiwgJmxlbiwgUkFESVhfRU5D T0RFKSkKLSAgICAgICAgICBnb3RvIGVuY29kZV9lcnJvcjsKLSAgICAgICAgcmVwbHlfcGFyc2Ug PSAiQURBVD0iOwotICAgICAgICBuID0gZnRwY21kKCJBREFUIixidWYsLTEsLTEsMCk7Ci0gICAg fQotICAgIGlmIChuID09IFJFUExZX0NPTlRJTlVFKSB7ICAgICAgICAgIC8qIEdldCByZXNwb25z ZSAqLwotICAgICAgICBicCA9IGJ1ZjsKLSAgICAgICAgaWYgKCFyZXBseV9wYXJzZSkKLSAgICAg ICAgICBnb3RvIGRhdGFfZXJyb3I7Ci0gICAgICAgIGJsZW4gPSBGVFBfQlVGU0laOwotICAgICAg ICBpZiAoZSA9IHJhZGl4X2VuY29kZSAocmVwbHlfcGFyc2UsIGJwLCAwLCAmYmxlbiwgUkFESVhf REVDT0RFKSkKLSAgICAgICAgICBnb3RvIGVuY29kZV9lcnJvcjsKLSAgICAgICAgaWYgKHNycF9n ZXQgKCZicCwgJmNwLCAmYmxlbiwgJmNsZW4pICE9IDIwKQotICAgICAgICAgIGdvdG8gZGF0YV9l cnJvcjsKLSAgICAgICAgaWYgKHRfY2xpZW50dmVyaWZ5ICh0YywgY3ApKSB7Ci0gICAgICAgICAg ICBmcHJpbnRmIChzdGRlcnIsICJXQVJOSU5HOiBiYWQgcmVzcG9uc2UgdG8gY2xpZW50IGNoYWxs ZW5nZS5cbiIpOwotICAgICAgICAgICAgZ290byBiYWQ7Ci0gICAgICAgIH0KLSAgICAgICAgYnAg PSB0bXA7IGJsZW4gPSAwOyAgICAgICAgICAgICAvKiBTZW5kIG5vdGhpbmcgKi8KLSAgICAgICAg c3JwX3B1dCAoIlwwIiwgJmJwLCAxLCAmYmxlbik7Ci0gICAgICAgIGxlbiA9IEZUUF9CVUZTSVo7 Ci0gICAgICAgIGlmIChlID0gcmFkaXhfZW5jb2RlICh0bXAsIGJ1ZiwgYmxlbiwgJmxlbiwgUkFE SVhfRU5DT0RFKSkKLSAgICAgICAgICBnb3RvIGVuY29kZV9lcnJvcjsKLSAgICAgICAgcmVwbHlf cGFyc2UgPSAiQURBVD0iOwotICAgICAgICBuID0gZnRwY21kKCJBREFUIixidWYsLTEsLTEsMCk7 Ci0gICAgfQotICAgIGlmIChuID09IFJFUExZX0NPTlRJTlVFKSB7ICAgICAgICAgIC8qIEdldCBj aXBoZXIgJiBoYXNoIGxpc3RzLCBzZXFudW0gKi8KLSAgICAgICAgQ0hBUiBzZXFudW1bNF07Ci0g ICAgICAgIENIQVIgKmNsaXN0OwotICAgICAgICBDSEFSICpobGlzdDsKLSAgICAgICAgQ0hBUiAq cDE7Ci0gICAgICAgIGludCBjbGlzdF9sZW4sIGhsaXN0X2xlbjsKLSAgICAgICAgYnAgPSBidWY7 Ci0gICAgICAgIGlmICghcmVwbHlfcGFyc2UpCi0gICAgICAgICAgZ290byBkYXRhX2Vycm9yOwot ICAgICAgICBibGVuID0gRlRQX0JVRlNJWjsKLSAgICAgICAgaWYgKGUgPSByYWRpeF9lbmNvZGUg KHJlcGx5X3BhcnNlLCBicCwgMCwgJmJsZW4sIFJBRElYX0RFQ09ERSkpCi0gICAgICAgICAgZ290 byBlbmNvZGVfZXJyb3I7Ci0gICAgICAgIGlmIChzcnBfZ2V0ICgmYnAsICZjbGlzdCwgJmJsZW4s ICZjbGlzdF9sZW4pIDwgMCkKLSAgICAgICAgICBnb3RvIGRhdGFfZXJyb3I7Ci0gICAgICAgIGlm IChzcnBfZ2V0ICgmYnAsICZobGlzdCwgJmJsZW4sICZobGlzdF9sZW4pIDwgMCkKLSAgICAgICAg ICBnb3RvIGRhdGFfZXJyb3I7Ci0gICAgICAgIGlmIChzcnBfZ2V0ICgmYnAsICZjcCwgJmJsZW4s ICZjbGVuKSAhPSA0KQotICAgICAgICAgIGdvdG8gZGF0YV9lcnJvcjsKLSAgICAgICAgbWVtY3B5 IChzZXFudW0sIGNwLCA0KTsKLSAgICAgICAgaWYgKGNpcGhlcl9zdXBwb3J0ZWQgKGNsaXN0LCBz cnBfcHJlZl9jaXBoZXIpKSAvKiBDaG9vc2UgY2lwaGVyICovCi0gICAgICAgICAgY2lkID0gc3Jw X3ByZWZfY2lwaGVyOwotICAgICAgICBpZiAoIWNpZCAmJiBjaXBoZXJfc3VwcG9ydGVkIChjbGlz dCwgU1JQX0RFRkFVTFRfQ0lQSEVSKSkKLSAgICAgICAgICBjaWQgPSBTUlBfREVGQVVMVF9DSVBI RVI7Ci0gICAgICAgIGlmICghY2lkKSB7Ci0gICAgICAgICAgICBDSEFSICpsb2NsaXN0ID0gY2lw aGVyX2dldGxpc3QgKCk7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RybGVuIChsb2Ns aXN0KTsgaSsrKQotICAgICAgICAgICAgICBpZiAoY2lwaGVyX3N1cHBvcnRlZCAoY2xpc3QsIGxv Y2xpc3RbaV0pKSB7Ci0gICAgICAgICAgICAgICAgICBjaWQgPSBsb2NsaXN0W2ldOwotICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBp ZiAoIWNpZCkgewotICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiVW5hYmxlIHRvIGFncmVl IG9uIGNpcGhlci5cbiIpOwotICAgICAgICAgICAgZ290byBiYWQ7Ci0gICAgICAgIH0KLSAgICAg ICAgLyogQ2hvb3NlIGhhc2ggKi8KLQotICAgICAgICBpZiAoc3JwX3ByZWZfaGFzaCAmJiBoYXNo X3N1cHBvcnRlZCAoaGxpc3QsIHNycF9wcmVmX2hhc2gpKQotICAgICAgICAgIGhpZCA9IHNycF9w cmVmX2hhc2g7Ci0KLSAgICAgICAgaWYgKCFoaWQgJiYgaGFzaF9zdXBwb3J0ZWQgKGhsaXN0LCBT UlBfREVGQVVMVF9IQVNIKSkKLSAgICAgICAgICBoaWQgPSBTUlBfREVGQVVMVF9IQVNIOwotCi0g ICAgICAgIGlmICghaGlkKSB7Ci0gICAgICAgICAgICBDSEFSICpsb2NsaXN0ID0gaGFzaF9nZXRs aXN0ICgpOwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0cmxlbiAobG9jbGlzdCk7IGkr KykKLSAgICAgICAgICAgICAgaWYgKGhhc2hfc3VwcG9ydGVkIChobGlzdCwgbG9jbGlzdFtpXSkp IHsKLSAgICAgICAgICAgICAgICAgIGhpZCA9IGxvY2xpc3RbaV07Ci0gICAgICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICghaGlkKSB7 Ci0gICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJVbmFibGUgdG8gYWdyZWUgb24gaGFzaC5c biIpOwotICAgICAgICAgICAgZ290byBiYWQ7Ci0gICAgICAgIH0KLSAgICAgICAgLyogU2V0IGlu Y3J5cHQgKi8KLQotICAgICAgICBpZiAoIShpbmNyeXB0ID0ga3J5cHRvX25ldyAoY2lkLCBoaWQs IHNrZXksIDIwLCBOVUxMLCAwLCBzZXFudW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBLUllQVE9fREVDT0RFKSkpCi0gICAgICAgICAgZ290byBiYWQ7Ci0KLSAgICAgICAg LyogR2VuZXJhdGUgcmFuZG9tIG51bWJlciBmb3Igb3V0a2V5IGFuZCBvdXRzZXFudW0gKi8KLQot ICAgICAgICB0X3JhbmRvbSAoc2VxbnVtLCA0KTsKLQotICAgICAgICAvKiBTZW5kIGNpZCwgaGlk LCBvdXRrZXksIG91dHNlcW51bSAqLwotCi0gICAgICAgIGJwID0gdG1wOyBibGVuID0gMDsKLSAg ICAgICAgc3JwX3B1dCAoJmNpZCwgJmJwLCAxLCAmYmxlbik7Ci0gICAgICAgIHNycF9wdXQgKCZo aWQsICZicCwgMSwgJmJsZW4pOwotICAgICAgICBzcnBfcHV0IChzZXFudW0sICZicCwgNCwgJmJs ZW4pOwotICAgICAgICBsZW4gPSBGVFBfQlVGU0laOwotICAgICAgICBpZiAoZSA9IHJhZGl4X2Vu Y29kZSAodG1wLCBidWYsIGJsZW4sICZsZW4sIFJBRElYX0VOQ09ERSkpCi0gICAgICAgICAgZ290 byBlbmNvZGVfZXJyb3I7Ci0gICAgICAgIHJlcGx5X3BhcnNlID0gIkFEQVQ9IjsKLSAgICAgICAg biA9IGZ0cGNtZCgiQURBVCIsYnVmLC0xLC0xLDApOwotCi0gICAgICAgIC8qIFNldCBvdXRjcnlw dCAqLwotCi0gICAgICAgIGlmICghKG91dGNyeXB0ID0ga3J5cHRvX25ldyAoY2lkLCBoaWQsIHNr ZXkrMjAsIDIwLCBOVUxMLCAwLCBzZXFudW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgS1JZUFRPX0VOQ09ERSkpKQotICAgICAgICAgIGdvdG8gYmFkOwotCi0gICAgICAg IHRfY2xpZW50Y2xvc2UgKHRjKTsKLSAgICAgICAgdGMgPSBOVUxMOwotICAgIH0KLSAgICBpZiAo biAhPSBSRVBMWV9DT01QTEVURSkKLSAgICAgIGdvdG8gYmFkOwotCi0gICAgaWYgKGZ0cF92Ym0p IHsKLSAgICAgICAgaWYgKGZ0cF9kZWIpCi0gICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAg ICBwcmludGYgKCJTUlAgYXV0aGVudGljYXRpb24gc3VjY2VlZGVkLlxuIik7Ci0gICAgICAgIHBy aW50ZiAoIlVzaW5nIGNpcGhlciAlcyBhbmQgaGFzaCBmdW5jdGlvbiAlcy5cbiIsCi0gICAgICAg ICAgICAgICAgKGNpcGhlcl9nZXRkZXNjYnlpZChjaWQpKS0+bmFtZSwKLSAgICAgICAgICAgICAg ICAoaGFzaF9nZXRkZXNjYnlpZChoaWQpKS0+bmFtZQotICAgICAgICAgICAgICAgICk7Ci0gICAg fQotICAgIHJlcGx5X3BhcnNlID0gTlVMTDsKLSAgICBhdXRoX3R5cGUgPSAiU1JQIjsKLSAgICBy ZXR1cm4oMSk7Ci0KLSAgZW5jb2RlX2Vycm9yOgotICAgIGZwcmludGYgKHN0ZGVyciwgIkJhc2Ug NjQgZW5jb2RpbmcgZmFpbGVkOiAlcy5cbiIsIHJhZGl4X2Vycm9yIChlKSk7Ci0gICAgZ290byBi YWQ7Ci0KLSAgZGVjb2RlX2Vycm9yOgotICAgIGZwcmludGYgKHN0ZGVyciwgIkJhc2UgNjQgZGVj b2RpbmcgZmFpbGVkOiAlcy5cbiIsIHJhZGl4X2Vycm9yIChlKSk7Ci0gICAgZ290byBiYWQ7Ci0K LSAgZGF0YV9lcnJvcjoKLSAgICBmcHJpbnRmIChzdGRlcnIsICJVbmFibGUgdG8gdW5tYXJzaGFs IGF1dGhlbnRpY2F0aW9uIGRhdGEuXG4iKTsKLSAgICBnb3RvIGJhZDsKLQotICBiYWQ6Ci0gICAg ZnByaW50ZiAoc3RkZXJyLCAiU1JQIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCwgdHJ5aW5nIHJlZ3Vs YXIgbG9naW4uXG4iKTsKLSAgICByZXBseV9wYXJzZSA9IE5VTEw7Ci0gICAgcmV0dXJuKDApOwot fQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKwotIHwgc3JwX3B1dDogcHV0IGl0ZW0gdG8gc2VuZCBidWZmZXIgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwKLSArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludAotc3JwX3B1dCAo aW4sIG91dCwgaW5sZW4sIG91dGxlbikKLSAgICBDSEFSICppbjsKLSAgICBDSEFSICoqb3V0Owot ICAgIGludCBpbmxlbjsKLSAgICBpbnQgKm91dGxlbjsKLXsKLSAgICBzcnBfdWludDMyIG5ldF9s ZW47Ci0KLSAgICBuZXRfbGVuID0gaHRvbmwgKGlubGVuKTsKLSAgICBtZW1jcHkgKCpvdXQsICZu ZXRfbGVuLCA0KTsKLQotICAgICpvdXQgKz0gNDsgKm91dGxlbiArPSA0OwotCi0gICAgbWVtY3B5 ICgqb3V0LCBpbiwgaW5sZW4pOwotCi0gICAgKm91dCArPSBpbmxlbjsgKm91dGxlbiArPSBpbmxl bjsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gfCBzcnBfZ2V0OiBnZXQgaXRlbSBm cm9tIHJlY2VpdmUgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgfAotICstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1z dGF0aWMgaW50Ci1zcnBfZ2V0IChpbiwgb3V0LCBpbmxlbiwgb3V0bGVuKQotICAgIENIQVIgKipp bjsKLSAgICBDSEFSICoqb3V0OwotICAgIGludCAqaW5sZW47Ci0gICAgaW50ICpvdXRsZW47Ci17 Ci0gICAgc3JwX3VpbnQzMiBuZXRfbGVuOwotCi0gICAgaWYgKCppbmxlbiA8IDQpIHJldHVybiAt MTsKLQotICAgIG1lbWNweSAoJm5ldF9sZW4sICppbiwgNCk7ICppbmxlbiAtPSA0OyAqaW4gKz0g NDsKLSAgICAqb3V0bGVuID0gbnRvaGwgKG5ldF9sZW4pOwotCi0gICAgaWYgKCppbmxlbiA8ICpv dXRsZW4pIHJldHVybiAtMTsKLQotICAgICpvdXQgPSAqaW47ICppbmxlbiAtPSAqb3V0bGVuOyAq aW4gKz0gKm91dGxlbjsKLQotICAgIHJldHVybiAqb3V0bGVuOwotfQotCi0vKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotIHwg c3JwX2VuY29kZTogZW5jb2RlIGNvbnRyb2wgbWVzc2FnZSAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwKLSArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludAotc3JwX2VuY29kZSAocHJpdmF0ZSwgaW4sIG91 dCwgbGVuKQotICAgIGludCBwcml2YXRlOwotICAgIENIQVIgKmluOwotICAgIENIQVIgKm91dDsK LSAgICB1bnNpZ25lZCBsZW47Ci17Ci0gICAgaWYgKHByaXZhdGUpCi0gICAgICByZXR1cm4ga3J5 cHRvX21zZ19wcml2IChvdXRjcnlwdCwgaW4sIG91dCwgbGVuKTsKLSAgICBlbHNlCi0gICAgICBy ZXR1cm4ga3J5cHRvX21zZ19zYWZlIChvdXRjcnlwdCwgaW4sIG91dCwgbGVuKTsKLX0KLQotLyot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSsKLSB8IHNycF9kZWNvZGU6IGRlY29kZSBjb250cm9sIG1lc3NhZ2UgICAgICAgICAgICAg ICAgICAgICAgICAgICB8Ci0gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQKLXNycF9kZWNvZGUgKHByaXZh dGUsIGluLCBvdXQsIGxlbikKLSAgICBpbnQgcHJpdmF0ZTsKLSAgICBDSEFSICppbjsKLSAgICBD SEFSICpvdXQ7Ci0gICAgdW5zaWduZWQgbGVuOwotewotICAgIGlmIChwcml2YXRlKQotICAgICAg cmV0dXJuIGtyeXB0b19tc2dfcHJpdiAoaW5jcnlwdCwgaW4sIG91dCwgbGVuKTsKLSAgICBlbHNl Ci0gICAgICByZXR1cm4ga3J5cHRvX21zZ19zYWZlIChpbmNyeXB0LCBpbiwgb3V0LCBsZW4pOwot fQotCi0jZW5kaWYgLyogRlRQX1NSUCAqLwotCi0KLQotI2lmZGVmIE5PVF9VU0VECi0vKgotICBU aGUgZm9sbG93aW5nIGNvZGUgaXMgZnJvbSB0aGUgVW5peCBGVFAgY2xpZW50LiAgQmUgc3VyZSB0 bwotICBtYWtlIHN1cmUgdGhhdCB0aGUgZnVuY3Rpb25hbGl0eSBpcyBub3QgbG9zdC4gIEVzcGVj aWFsbHkKLSAgdGhlIFByb3h5IHN0dWZmIGV2ZW4gdGhvdWdoIHdlIGhhdmUgbm90IHlldCBpbXBs ZW1lbnRlZCBpdC4KLSovCi0KLS8qIFNlbmQgbXVsdGlwbGUgZmlsZXMgICovCi0KLXN0YXRpYyBp bnQKLWZ0cF9tcHV0KGFyZ2MsIGFyZ3YpIGludCBhcmdjOyBjaGFyICoqYXJndjsgewotICAgIHJl Z2lzdGVyIGludCBpOwotICAgIHNpZ190IG9sZGludHI7Ci0gICAgaW50IG9pbnRlcjsKLSAgICBj aGFyICp0cDsKLSAgICBzaWd0eXBlIG1jYW5jZWwoKTsKLQotICAgIGlmIChhcmdjIDwgMiAmJiAh YW5vdGhlcigmYXJnYywgJmFyZ3YsICJsb2NhbC1maWxlcyIpKSB7Ci0gICAgICAgIHByaW50Zigi dXNhZ2U6ICVzIGxvY2FsLWZpbGVzXG4iLCBhcmd2WzBdKTsKLSAgICAgICAgZnRwY29kZSA9IC0x OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1uYW1lID0gYXJndlswXTsKLSAgICBtZmxh ZyA9IDE7Ci0gICAgb2xkaW50ciA9IHNpZ25hbChTSUdJTlQsIG1jYW5jZWwpOwotCi0gICAgLyog UmVwbGFjZSB3aXRoIGNhbGxzIHRvIGNjX2V4ZWN1dGUoKSAqLwotICAgIHNldGptcChqY2FuY2Vs KTsKLSNpZmRlZiBGVFBfUFJPWFkKLSAgICBpZiAocHJveHkpIHsKLSAgICAgICAgY2hhciAqY3As ICp0cDIsIHRtcGJ1ZltDS01BWFBBVEhdOwotCi0gICAgICAgIHdoaWxlICgoY3AgPSByZW1nbG9i KGFyZ3YsMCkpICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGlmICgqY3AgPT0gMCkgewotICAgICAg ICAgICAgICAgIG1mbGFnID0gMDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIGlmIChtZmxhZyAmJiBjb25maXJtKGFyZ3ZbMF0sIGNwKSkgewot ICAgICAgICAgICAgICAgIHRwID0gY3A7Ci0gICAgICAgICAgICAgICAgaWYgKG1jYXNlKSB7Ci0g ICAgICAgICAgICAgICAgICAgIHdoaWxlICgqdHAgJiYgIWlzbG93ZXIoKnRwKSkgewotICAgICAg ICAgICAgICAgICAgICAgICAgdHArKzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgICAgICBpZiAoISp0cCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHAgPSBjcDsK LSAgICAgICAgICAgICAgICAgICAgICAgIHRwMiA9IHRtcGJ1ZjsKLSAgICAgICAgICAgICAgICAg ICAgICAgIHdoaWxlICgoKnRwMiA9ICp0cCkgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChpc3VwcGVyKCp0cDIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICp0cDIgPSAnYScgKyAqdHAyIC0gJ0EnOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cCsrOwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRwMisrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHRwID0gdG1wYnVmOwotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobnRmbGFnKSB7Ci0gICAgICAgICAgICAgICAgICAg IHRwID0gZG90cmFucyh0cCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlm IChtYXBmbGFnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRwID0gZG9tYXAodHApOwotICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzZW5kcmVxdWVzdCgoc3VuaXF1ZSkgPyAiU1RP VSIgOiAiU1RPUiIsIGNwLCB0cCwgMCwgLTEsIC0xLCAwKTsKLSAgICAgICAgICAgICAgICBpZiAo IW1mbGFnICYmIGZyb21hdHR5KSB7Ci0gICAgICAgICAgICAgICAgICAgIG9pbnRlciA9IGludGVy YWN0aXZlOwotICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZSA9IDE7Ci0gICAgICAgICAg ICAgICAgICAgIGlmIChjb25maXJtKCJDb250aW51ZSB3aXRoIiwibXB1dCIpKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBtZmxhZysrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgICAgIGludGVyYWN0aXZlID0gb2ludGVyOwotICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBzaWduYWwoU0lHSU5ULCBvbGRpbnRyKTsK LSAgICAgICAgbWZsYWcgPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmIC8qIEZU UF9QUk9YWSAqLwotICAgIGZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKLSAgICAgICAgcmVn aXN0ZXIgY2hhciAqKmNwcCwgKipnYXJnczsKLQotICAgICAgICBpZiAobWZsYWcgJiYgY29uZmly bShhcmd2WzBdLCBhcmd2W2ldKSkgewotICAgICAgICAgICAgdHAgPSBhcmd2W2ldOwotICAgICAg ICAgICAgc2VuZHJlcXVlc3QoKGZ0cF91c24pID8gIlNUT1UiIDogIlNUT1IiLCBhcmd2W2ldLCB0 cCwgMCwtMSwtMSwgMCk7Ci0gICAgICAgICAgICBpZiAoIW1mbGFnICYmIGZyb21hdHR5KSB7Ci0g ICAgICAgICAgICAgICAgb2ludGVyID0gaW50ZXJhY3RpdmU7Ci0gICAgICAgICAgICAgICAgaW50 ZXJhY3RpdmUgPSAxOwotICAgICAgICAgICAgICAgIGlmIChjb25maXJtKCJDb250aW51ZSB3aXRo IiwibXB1dCIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1mbGFnKys7Ci0gICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgIGludGVyYWN0aXZlID0gb2ludGVyOwotICAgICAgICAgICAg fQotICAgICAgICB9Ci0gICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGdhcmdzID0gZnRwZ2xv Yihhcmd2W2ldKTsKLSAgICAgICAgaWYgKGdsb2JlcnIgIT0gTlVMTCkgewotICAgICAgICAgICAg cHJpbnRmKCIlc1xuIiwgZ2xvYmVycik7Ci0gICAgICAgICAgICBpZiAoZ2FyZ3MpIHsKLSAgICAg ICAgICAgICAgICBibGtmcmVlKGdhcmdzKTsKLSAgICAgICAgICAgICAgICBmcmVlKChjaGFyICop Z2FyZ3MpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0K LSAgICAgICAgZm9yIChjcHAgPSBnYXJnczsgY3BwICYmICpjcHAgIT0gTlVMTDsgY3BwKyspIHsK LSAgICAgICAgICAgIGlmIChtZmxhZyAmJiBjb25maXJtKGFyZ3ZbMF0sICpjcHApKSB7Ci0gICAg ICAgICAgICAgICAgdHAgPSAqY3BwOwotICAgICAgICAgICAgICAgIHNlbmRyZXF1ZXN0KChzdW5p cXVlKSA/ICJTVE9VIjoiU1RPUiIsICpjcHAsIHRwLCAwLCAtMSwgLTEsIDApOwotICAgICAgICAg ICAgICAgIGlmICghbWZsYWcgJiYgZnJvbWF0dHkpIHsKLSAgICAgICAgICAgICAgICAgICAgb2lu dGVyID0gaW50ZXJhY3RpdmU7Ci0gICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlID0gMTsK LSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpcm0oIkNvbnRpbnVlIHdpdGgiLCJtcHV0Iikp IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1mbGFnKys7Ci0gICAgICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmUgPSBvaW50ZXI7Ci0gICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChnYXJncyAhPSBO VUxMKSB7Ci0gICAgICAgICAgICBibGtmcmVlKGdhcmdzKTsKLSAgICAgICAgICAgIGZyZWUoKGNo YXIgKilnYXJncyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgc2lnbmFsKFNJR0lOVCwgb2xkaW50 cik7Ci0gICAgbWZsYWcgPSAwOwotfQotCi0vKiBHZXQgbXVsdGlwbGUgZmlsZXMgKi8KLQotc3Rh dGljIGludAotZnRwX21nZXQoYXJnYywgYXJndikgaW50IGFyZ2M7IGNoYXIgKiphcmd2OyB7Ci0g ICAgaW50IHJjID0gLTE7Ci0gICAgc2lnX3Qgb2xkaW50cjsKLSAgICBpbnQgb2ludGVyOwotICAg IGNoYXIgKmNwLCAqdHAsICp0cDIsIHRtcGJ1ZltDS01BWFBBVEhdOwotICAgIHNpZ3R5cGUgbWNh bmNlbCgpOwotCi0gICAgaWYgKGFyZ2MgPCAyICYmICFhbm90aGVyKCZhcmdjLCAmYXJndiwgInJl bW90ZS1maWxlcyIpKSB7Ci0gICAgICAgIHByaW50ZigidXNhZ2U6ICVzIHJlbW90ZS1maWxlc1xu IiwgYXJndlswXSk7Ci0gICAgICAgIGZ0cGNvZGUgPSAtMTsKLSAgICAgICAgcmV0dXJuKC0xKTsK LSAgICB9Ci0gICAgbW5hbWUgPSBhcmd2WzBdOwotICAgIG1mbGFnID0gMTsKLSAgICBvbGRpbnRy ID0gc2lnbmFsKFNJR0lOVCxtY2FuY2VsKTsKLSAgICAvKiBSZXBsYWNlIHdpdGggY2FsbHMgdG8g Y2NfZXhlY3V0ZSgpICovCi0gICAgc2V0am1wKGpjYW5jZWwpOwotICAgIHdoaWxlICgoY3AgPSBy ZW1nbG9iKGFyZ3YscHJveHkpKSAhPSBOVUxMKSB7Ci0gICAgICAgIGlmICgqY3AgPT0gJ1wwJykg ewotICAgICAgICAgICAgbWZsYWcgPSAwOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg IH0KLSAgICAgICAgaWYgKG1mbGFnICYmIGNvbmZpcm0oYXJndlswXSwgY3ApKSB7Ci0gICAgICAg ICAgICB0cCA9IGNwOwotICAgICAgICAgICAgaWYgKG1jYXNlKSB7Ci0gICAgICAgICAgICAgICAg d2hpbGUgKCp0cCAmJiAhaXNsb3dlcigqdHApKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRwKys7 Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghKnRwKSB7Ci0gICAgICAg ICAgICAgICAgICAgIHRwID0gY3A7Ci0gICAgICAgICAgICAgICAgICAgIHRwMiA9IHRtcGJ1ZjsK LSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCgqdHAyID0gKnRwKSAhPSAwKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBpZiAoaXN1cHBlcigqdHAyKSkgewotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICp0cDIgPSAnYScgKyAqdHAyIC0gJ0EnOwotICAgICAgICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgdHArKzsKLSAgICAgICAgICAgICAgICAgICAg ICAgIHRwMisrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICAgIHRwID0gdG1wYnVmOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmMg PSAocmVjdnJlcXVlc3QoIlJFVFIiLCB0cCwgY3AsICJ3YiIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdHAgIT0gY3AgfHwgIWludGVyYWN0aXZlKSA9PSAwLDAsTlVMTCwwLDAsMCk7 Ci0gICAgICAgICAgICBpZiAoIW1mbGFnICYmIGZyb21hdHR5KSB7Ci0gICAgICAgICAgICAgICAg b2ludGVyID0gaW50ZXJhY3RpdmU7Ci0gICAgICAgICAgICAgICAgaW50ZXJhY3RpdmUgPSAxOwot ICAgICAgICAgICAgICAgIGlmIChjb25maXJtKCJDb250aW51ZSB3aXRoIiwibWdldCIpKSB7Ci0g ICAgICAgICAgICAgICAgICAgIG1mbGFnKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgIGludGVyYWN0aXZlID0gb2ludGVyOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g ICAgfQotICAgIHNpZ25hbChTSUdJTlQsb2xkaW50cik7Ci0gICAgbWZsYWcgPSAwOwotICAgIHJl dHVybihyYyk7Ci19Ci0KLS8qIERlbGV0ZSBtdWx0aXBsZSBmaWxlcyAqLwotCi1zdGF0aWMgaW50 Ci1tZGVsZXRlKGFyZ2MsIGFyZ3YpIGludCBhcmdjOyBjaGFyICoqYXJndjsgewotICAgIHNpZ190 IG9sZGludHI7Ci0gICAgaW50IG9pbnRlcjsKLSAgICBjaGFyICpjcDsKLSAgICBzaWd0eXBlIG1j YW5jZWwoKTsKLQotICAgIGlmIChhcmdjIDwgMiAmJiAhYW5vdGhlcigmYXJnYywgJmFyZ3YsICJy ZW1vdGUtZmlsZXMiKSkgewotICAgICAgICBwcmludGYoInVzYWdlOiAlcyByZW1vdGUtZmlsZXNc biIsIGFyZ3ZbMF0pOwotICAgICAgICBmdHBjb2RlID0gLTE7Ci0gICAgICAgIHJldHVybigtMSk7 Ci0gICAgfQotICAgIG1uYW1lID0gYXJndlswXTsKLSAgICBtZmxhZyA9IDE7Ci0gICAgb2xkaW50 ciA9IHNpZ25hbChTSUdJTlQsIG1jYW5jZWwpOwotICAgIC8qIFJlcGxhY2Ugd2l0aCBjYWxscyB0 byBjY19leGVjdXRlKCkgKi8KLSAgICBzZXRqbXAoamNhbmNlbCk7Ci0gICAgd2hpbGUgKChjcCA9 IHJlbWdsb2IoYXJndiwwKSkgIT0gTlVMTCkgewotICAgICAgICBpZiAoKmNwID09ICdcMCcpIHsK LSAgICAgICAgICAgIG1mbGFnID0gMDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9 Ci0gICAgICAgIGlmIChtZmxhZyAmJiBjb25maXJtKGFyZ3ZbMF0sIGNwKSkgewotICAgICAgICAg ICAgcmMgPSAoZnRwY21kKCJERUxFIixjcCwtMSwtMSxmdHBfdmJtKSA9PSBSRVBMWV9DT01QTEVU RSk7Ci0gICAgICAgICAgICBpZiAoIW1mbGFnICYmIGZyb21hdHR5KSB7Ci0gICAgICAgICAgICAg ICAgb2ludGVyID0gaW50ZXJhY3RpdmU7Ci0gICAgICAgICAgICAgICAgaW50ZXJhY3RpdmUgPSAx OwotICAgICAgICAgICAgICAgIGlmIChjb25maXJtKCJDb250aW51ZSB3aXRoIiwgIm1kZWxldGUi KSkgewotICAgICAgICAgICAgICAgICAgICBtZmxhZysrOwotICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICBpbnRlcmFjdGl2ZSA9IG9pbnRlcjsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgfQotICAgIH0KLSAgICBzaWduYWwoU0lHSU5ULCBvbGRpbnRyKTsKLSAgICBtZmxhZyA9IDA7 Ci0gICAgcmV0dXJuKHJjKTsKLX0KLQotLyogR2V0IGEgZGlyZWN0b3J5IGxpc3Rpbmcgb2YgbXVs dGlwbGUgcmVtb3RlIGZpbGVzICovCi0KLXN0YXRpYyBpbnQKLW1scyhhcmdjLCBhcmd2KSBpbnQg YXJnYzsgY2hhciAqKmFyZ3Y7IHsKLSAgICBzaWdfdCBvbGRpbnRyOwotICAgIGludCBvaW50ZXIs IGk7Ci0gICAgY2hhciAqY21kLCBtb2RlWzFdLCAqZGVzdDsKLSAgICBzaWd0eXBlIG1jYW5jZWwo KTsKLSAgICBpbnQgcmMgPSAtMTsKLQotICAgIGlmIChhcmdjIDwgMiAmJiAhYW5vdGhlcigmYXJn YywgJmFyZ3YsICJyZW1vdGUtZmlsZXMiKSkKLSAgICAgIGdvdG8gdXNhZ2U7Ci0gICAgaWYgKGFy Z2MgPCAzICYmICFhbm90aGVyKCZhcmdjLCAmYXJndiwgImxvY2FsLWZpbGUiKSkgewotICAgICAg dXNhZ2U6Ci0gICAgICAgIHByaW50ZigidXNhZ2U6ICVzIHJlbW90ZS1maWxlcyBsb2NhbC1maWxl XG4iLCBhcmd2WzBdKTsKLSAgICAgICAgZnRwY29kZSA9IC0xOwotICAgICAgICByZXR1cm4oLTEp OwotICAgIH0KLSAgICBkZXN0ID0gYXJndlthcmdjIC0gMV07Ci0gICAgYXJndlthcmdjIC0gMV0g PSBOVUxMOwotICAgIGlmIChzdHJjbXAoZGVzdCwgIi0iKSAmJiAqZGVzdCAhPSAnfCcpCi0gICAg ICBpZiAoIWdsb2J1bGl6ZSgmZGVzdCkgfHwKLSAgICAgICAgICAhY29uZmlybSgib3V0cHV0IHRv IGxvY2FsLWZpbGU6IiwgZGVzdCkpIHsKLSAgICAgICAgICBmdHBjb2RlID0gLTE7Ci0gICAgICAg ICAgcmV0dXJuKC0xKTsKLSAgICAgIH0KLSAgICBjbWQgPSBhcmd2WzBdWzFdID09ICdsJyA/ICJO TFNUIiA6ICJMSVNUIjsKLSAgICBtbmFtZSA9IGFyZ3ZbMF07Ci0gICAgbWZsYWcgPSAxOwotICAg IG9sZGludHIgPSBzaWduYWwoU0lHSU5ULCBtY2FuY2VsKTsKLSAgICAvKiBSZXBsYWNlIHdpdGgg Y2FsbHMgdG8gY2NfZXhlY3V0ZSgpICovCi0gICAgc2V0am1wKGpjYW5jZWwpOwotICAgIGZvciAo aSA9IDE7IG1mbGFnICYmIGkgPCBhcmdjLTE7ICsraSkgewotICAgICAgICAqbW9kZSA9IChpID09 IDEpID8gJ3cnIDogJ2EnOwotICAgICAgICByYyA9IHJlY3ZyZXF1ZXN0KGNtZCwgZGVzdCwgYXJn dltpXSwgbW9kZSwgMCwwLE5VTEwsMCwwLDApOwotICAgICAgICBpZiAoIW1mbGFnICYmIGZyb21h dHR5KSB7Ci0gICAgICAgICAgICBvaW50ZXIgPSBpbnRlcmFjdGl2ZTsKLSAgICAgICAgICAgIGlu dGVyYWN0aXZlID0gMTsKLSAgICAgICAgICAgIGlmIChjb25maXJtKCJDb250aW51ZSB3aXRoIiwg YXJndlswXSkpIHsKLSAgICAgICAgICAgICAgICBtZmxhZyArKzsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIGludGVyYWN0aXZlID0gb2ludGVyOwotICAgICAgICB9Ci0gICAgfQotICAgIHNp Z25hbChTSUdJTlQsIG9sZGludHIpOwotICAgIG1mbGFnID0gMDsKLSAgICByZXR1cm4ocmMpOwot fQotCi1zdGF0aWMgY2hhciAqCi1yZW1nbG9iKGFyZ3YsZG9zd2l0Y2gpIGNoYXIgKmFyZ3ZbXTsg aW50IGRvc3dpdGNoOyB7Ci0gICAgY2hhciB0ZW1wWzE2XTsKLSAgICBzdGF0aWMgY2hhciBidWZb Q0tNQVhQQVRIXTsKLSAgICBzdGF0aWMgRklMRSAqZnRlbXAgPSBOVUxMOwotICAgIHN0YXRpYyBj aGFyICoqYXJnczsKLSAgICBpbnQgb2xkaGFzaDsKLSAgICBjaGFyICpjcCwgKm1vZGU7Ci0KLSAg ICBpZiAoIW1mbGFnKSB7Ci0gICAgICAgIGlmICghZG9nbG9iKSB7Ci0gICAgICAgICAgICBhcmdz ID0gTlVMTDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChmdGVtcCkgewotICAg ICAgICAgICAgICAgICh2b2lkKSBmY2xvc2UoZnRlbXApOwotICAgICAgICAgICAgICAgIGZ0ZW1w ID0gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4oTlVMTCk7 Ci0gICAgfQotICAgIGlmICghZG9nbG9iKSB7Ci0gICAgICAgIGlmIChhcmdzID09IE5VTEwpCi0g ICAgICAgICAgYXJncyA9IGFyZ3Y7Ci0gICAgICAgIGlmICgoY3AgPSAqKythcmdzKSA9PSBOVUxM KQotICAgICAgICAgIGFyZ3MgPSBOVUxMOwotICAgICAgICByZXR1cm4oY3ApOwotICAgIH0KLSAg ICBpZiAoZnRlbXAgPT0gTlVMTCkgewotICAgICAgICAodm9pZCkgc3RyY3B5KHRlbXAsIF9QQVRI X1RNUCk7Ci0jaWZkZWYgTUtURU1QCi0jaWZuZGVmIE1LU1RFTVAKLSAgICAgICAgKHZvaWQpIG1r dGVtcCh0ZW1wKTsKLSNlbmRpZiAvKiBNS1NURU1QICovCi0jZW5kaWYgLyogTUtURU1QICovCi0g ICAgICAgIHZlcmJvc2UgPSAwOwotICAgICAgICBvbGRoYXNoID0gaGFzaCwgaGFzaCA9IDA7Ci0j aWZkZWYgRlRQX1BST1hZCi0gICAgICAgIGlmIChkb3N3aXRjaCkgewotICAgICAgICAgICAgcHN3 aXRjaCghcHJveHkpOwotICAgICAgICB9Ci0jZW5kaWYgLyogRlRQX1BST1hZICovCi0gICAgICAg IGZvciAobW9kZSA9ICJ3YiI7ICorK2FyZ3YgIT0gTlVMTDsgbW9kZSA9ICJhYiIpCi0gICAgICAg ICAgcmVjdnJlcXVlc3QgKCJOTFNUIiwgdGVtcCwgKmFyZ3YsIG1vZGUsIDApOwotI2lmZGVmIEZU UF9QUk9YWQotICAgICAgICBpZiAoZG9zd2l0Y2gpIHsKLSAgICAgICAgICAgIHBzd2l0Y2goIXBy b3h5KTsKLSAgICAgICAgfQotI2VuZGlmIC8qIEZUUF9QUk9YWSAqLwotICAgICAgICBoYXNoID0g b2xkaGFzaDsKLSAgICAgICAgZnRlbXAgPSBmb3Blbih0ZW1wLCAiciIpOwotICAgICAgICB1bmxp bmsodGVtcCk7Ci0gICAgICAgIGlmIChmdGVtcCA9PSBOVUxMICYmICghZHB5YWN0aXZlIHx8IGZ0 cF9kZWIpKSB7Ci0gICAgICAgICAgICBwcmludGYoIkNhbid0IGZpbmQgbGlzdCBvZiByZW1vdGUg ZmlsZXMsIG9vcHNcbiIpOwotICAgICAgICAgICAgcmV0dXJuKE5VTEwpOwotICAgICAgICB9Ci0g ICAgfQotICAgIGlmIChmZ2V0cyhidWYsIENLTUFYUEFUSCwgZnRlbXApID09IE5VTEwpIHsKLSAg ICAgICAgZmNsb3NlKGZ0ZW1wKSwgZnRlbXAgPSBOVUxMOwotICAgICAgICByZXR1cm4oTlVMTCk7 Ci0gICAgfQotICAgIGlmICgoY3AgPSBja3N0cmNocihidWYsJ1xuJykpICE9IE5VTEwpCi0gICAg ICAqY3AgPSAnXDAnOwotICAgIHJldHVybihidWYpOwotfQotI2VuZGlmIC8qIE5PVF9VU0VEICov Ci0jZW5kaWYgLyogVENQU09DS0VUICh0b3Agb2YgZmlsZSkgKi8KLSNlbmRpZiAvKiBTWVNGVFAg KHRvcCBvZiBmaWxlKSAqLwotI2VuZGlmIC8qIE5PRlRQICh0b3Agb2YgZmlsZSkgKi8KCmRpZmYg LS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY2tlci5oIGIv Y2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NrZXIuaApkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggODkwZjY2Ni4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4z MDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY2tlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQy NSArMCwwIEBACi0vKiBja2NrZXIuaCAtLSBTeW1ib2wgYW5kIG1hY3JvIGRlZmluaXRpb25zIGZv ciBDLUtlcm1pdCAqLwotCi0vKgotICBBdXRob3I6IEZyYW5rIGRhIENydXogPGZkY0Bjb2x1bWJp YS5lZHU+LAotICBDb2x1bWJpYSBVbml2ZXJzaXR5IEFjYWRlbWljIEluZm9ybWF0aW9uIFN5c3Rl bXMsIE5ldyBZb3JrIENpdHkuCi0KLSAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDA5LAotICAgIFRy dXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCi0g ICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmls ZSBvciB0aGUKLSAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBk aXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KLSovCi0KLSNpZm5kZWYgQ0tDS0VSX0gKLSNkZWZp bmUgQ0tDS0VSX0gKLQotI2RlZmluZSBJX0FNX0tFUk1JVCAgMAkJCS8qIFBlcnNvbmFsaXRpZXMg Ki8KLSNkZWZpbmUgSV9BTV9URUxORVQgIDEKLSNkZWZpbmUgSV9BTV9STE9HSU4gIDIKLSNkZWZp bmUgSV9BTV9JS1NEICAgIDMKLSNkZWZpbmUgSV9BTV9GVFAgICAgIDQKLSNkZWZpbmUgSV9BTV9I VFRQICAgIDUKLSNkZWZpbmUgSV9BTV9TU0hTVUIgIDYKLSNkZWZpbmUgSV9BTV9TU0ggICAgIDcK LQotI2lmbmRlZiBOT1NUUkVBTUlORwotI2lmbmRlZiBTVFJFQU1JTkcKLSNkZWZpbmUgU1RSRUFN SU5HCi0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0jZW5kaWYgLyogTk9TVFJFQU1JTkcgKi8KLS8q Ci0gIElmIE5FV0RFRkFVTFRTIGlzIGRlZmluZWQgdGhlbjoKLSAgIC0gUkVDRUlWRSBQQUNLRVQt TEVOR1RIIGlzIDQwOTUgcmF0aGVyIHRoYW4gOTAKLSAgIC0gV0lORE9XIGlzIDMwIHJhdGhlciB0 aGFuIDEKLSAgIC0gQkxPQ0stQ0hFQ0sgaXMgMyByYXRoZXIgdGhhbiAxCi0gICAtIEZJTEUgVFlQ RSBpcyBCSU5BUlkgcmF0aGVyIHRoYW4gVEVYVAotKi8KLSNpZmRlZiBCSUdCVUZPSwkJCQkvKiAo d2FzIE9TMikgKi8KLSNpZm5kZWYgTkVXREVGQVVMVFMKLSNkZWZpbmUgTkVXREVGQVVMVFMKLSNl bmRpZiAvKiBORVdERUZBVUxUUyAqLwotI2VuZGlmIC8qIEJJR0JVRk9LICovCi0KLSNpZmRlZiBO T0lDUAkJCQkvKiBObyBJbnRlcmFjdGl2ZSBDb21tYW5kIFBhcnNlciAqLwotI2lmbmRlZiBOT1NQ TAkJCQkvKiBpbXBsaWVzLi4uICovCi0jZGVmaW5lIE5PU1BMCQkJCS8qIE5vIFNjcmlwdCBQcm9n cmFtbWluZyBMYW5ndWFnZSAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0jaWZuZGVmIE5PQ1NFVFMJ CQkJLyogTm8gY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiAqLwotI2RlZmluZSBOT0NTRVRTCQkJ CS8qIGJlY2F1c2UgdGhlIG9ubHkgd2F5IHRvIHNldCBpdCB1cCAqLwotI2VuZGlmIC8qIE5PQ1NF VFMgKi8JCQkvKiBpcyB3aXRoIGludGVyYWN0aXZlIGNvbW1hbmRzICovCi0jZW5kaWYgLyogTk9J Q1AgKi8KLQotI2lmZGVmIHBkcDExCQkJCS8qIFRoZXJlIGlzIGEgbWF4aW11bSBudW1iZXIgb2Yg Ki8KLSNpZm5kZWYgTk9DS1NQRUVECQkJLyogb2YgLUQncyBhbGxvd2VkIG9uIHRoZSBDQyAqLwot I2RlZmluZSBOT0NLU1BFRUQJCQkvKiBjb21tYW5kIGxpbmUsIHNvIHNvbWUgb2YgdGhlbSAqLwot I2VuZGlmIC8qIE5PQ0tTUEVFRCAqLwkJCS8qIGhhdmUgdG8gZ28gaGVyZS4uLiAqLwotI2lmbmRl ZiBOT1JFRElSRUNUCi0jZGVmaW5lIE5PUkVESVJFQ1QKLSNlbmRpZiAvKiBOT1JFRElSRUNUICov Ci0jaWZkZWYgV0hBVEFNSQotI3VuZGVmIFdIQVRBTUkKLSNlbmRpZiAvKiBXSEFUQU1JICovCi0j ZW5kaWYgLyogcGRwMTEgKi8KLQotI2lmZGVmIFVJREJVRkxFTgotI2RlZmluZSBMT0dJTkxFTiBV SURCVUZMRU4KLSNlbHNlCi0jZGVmaW5lIExPR0lOTEVOIDMyCQkJLyogTGVuZ3RoIG9mIHNlcnZl ciBsb2dpbiBmaWVsZCAqLwotI2VuZGlmIC8qIFVJREJVRkxFTiAqLwotCi0vKiBCZWxsIHZhbHVl cyAqLwotCi0jZGVmaW5lIFhZQl9OT05FICAwCQkJLyogTm8gYmVsbCAqLwotI2RlZmluZSBYWUJf QVVEICAgMQkJCS8qIEF1ZGlibGUgYmVsbCAqLwotI2RlZmluZSBYWUJfVklTICAgMgkJCS8qIFZp c2libGUgYmVsbCAqLwotI2RlZmluZSBYWUJfQkVFUCAgMAkJCS8qIEF1ZGlibGUgQmVlcCAqLwot I2RlZmluZSBYWUJfU1lTICAgNAkJCS8qIEF1ZGlibGUgU3lzdGVtIFNvdW5kcyAqLwotCi0vKiBG aWxlIHN0YXR1cyBiaXRzICovCi0KLSNkZWZpbmUgRlNfT0sgICAxCQkJLyogRmlsZSB0cmFuc2Zl cnJlZCBPSyAqLwotI2RlZmluZSBGU19SRUZVIDIJCQkvKiBGaWxlIHdhcyByZWZ1c2VkICovCi0j ZGVmaW5lIEZTX0RJU0MgNAkJCS8qIEZpbGUgd2FzIGRpc2NhcmRlZCAqLwotI2RlZmluZSBGU19J TlRSIDgJCQkvKiBUcmFuc2ZlciB3YXMgaW50ZXJydXB0ZWQgYnkgdXNlciAqLwotI2RlZmluZSBG U19FUlIgIDE2CQkJLyogRmF0YWwgZXJyb3IgZHVyaW5nIHRyYW5zZmVyICovCi0KLS8qIENvbnRy b2wtY2hhcmFjdGVyICh1bilwcmVmaXhpbmcgb3B0aW9ucyAqLwotCi0jZGVmaW5lIFBYX0FMTCAg MAkJCS8qIFByZWZpeCBhbGwgY29udHJvbCBjaGFycyAqLwotI2RlZmluZSBQWF9DQVUgIDEJCQkv KiBVbnByZWZpeCBjYXV0aW91c2x5ICovCi0jZGVmaW5lIFBYX1dJTCAgMgkJCS8qIFVucHJlZml4 IHdpdGggd2lsZCBhYmFuZG9uICovCi0jZGVmaW5lIFBYX05PTiAgMwkJCS8qIFVucHJlZml4IGFs bCAoPSBwcmVmaXggbm9uZSkgKi8KLQotLyogRGVzdGluYXRpb24gY29kZXMgKi8KLQotI2RlZmlu ZSAgREVTVF9EIDAJLyogIERJU0sgKi8KLSNkZWZpbmUgIERFU1RfUyAxCS8qICBTQ1JFRU4gKi8K LSNkZWZpbmUgIERFU1RfUCAyCS8qICBQUklOVEVSICovCi0jZGVmaW5lICBERVNUX04gMwkvKiAg Tk9XSEVSRSAoY2FsaWJyYXRpb24gcnVuKSAqLwotCi0vKiBGaWxlIHRyYW5zZmVyIHByb3RvY29s cyAqLwotCi0jZGVmaW5lICBQUk9UT19LICAgIDAJLyogICBLZXJtaXQgICAqLwotI2lmZGVmIENL X1hZWgotI2RlZmluZSAgUFJPVE9fWCAgICAxCS8qICAgWE1PREVNICAgICAqLwotI2RlZmluZSAg UFJPVE9fWEMgICAyCS8qICAgWE1PREVNLUNSQyAqLwotI2RlZmluZSAgUFJPVE9fWSAgICAzCS8q ICAgWU1PREVNICAgICAqLwotI2RlZmluZSAgUFJPVE9fRyAgICA0CS8qICAgWU1PREVNLWcgKi8K LSNkZWZpbmUgIFBST1RPX1ogICAgNQkvKiAgIFpNT0RFTSAgICovCi0jZGVmaW5lICBQUk9UT19P ICAgIDYgICAvKiAgIE9USEVSICAgICovCi0jZGVmaW5lICBOUFJPVE9TICAgIDcgICAvKiAgIEhv dyBtYW55ICovCi0jZWxzZQotI2RlZmluZSAgTlBST1RPUyAgICAxICAgLyogICBIb3cgbWFueSAq LwotI2VuZGlmIC8qIENLX1hZWiAqLwotCi1zdHJ1Y3QgY2tfcCB7CQkJCS8qIEMtS2VybWl0IFBy b3RvY29sIGluZm8gc3RydWN0dXJlICovCi0gICAgY2hhciAqIHBfbmFtZTsJCQkvKiBQcm90b2Nv bCBuYW1lICovCi0gICAgaW50IHJwa3RsZW47CQkJLyogUGFja2V0IGxlbmd0aCAtIHJlY2VpdmUg Ki8KLSAgICBpbnQgc3BrdGxlbjsJCQkvKiBQYWNrZXQgbGVuZ3RoIC0gc2VuZCAqLwotICAgIGlu dCBzcGt0ZmxnOwkJCS8qIC4uLiAqLwotICAgIGludCB3aW5zaXplOwkJCS8qIFdpbmRvdyBzaXpl ICovCi0gICAgaW50IHByZWZpeDsJCQkJLyogQ29udHJvbC1jaGFyIHByZWZpeGluZyBvcHRpb25z ICovCi0gICAgaW50IGZuY2E7CQkJCS8qIEZpbGVuYW1lIGNvbGxpc2lvbiBhY3Rpb24gKi8KLSAg ICBpbnQgZm5jbjsJCQkJLyogRmlsZW5hbWUgY29udmVyc2lvbiAqLwotICAgIGludCBmbnNwOwkJ CQkvKiBTZW5kIGZpbGVuYW1lIHBhdGggc3RyaXBwaW5nICovCi0gICAgaW50IGZucnA7CQkJCS8q IFJlY2VpdmUgZmlsZW5hbWUgcGF0aCBzdHJpcHBpbmcgKi8KLSAgICBjaGFyICogaF9iX2luaXQ7 CQkvKiBIb3N0IHJlY2VpdmUgaW5pdGlhdGlvbiBzdHJpbmcgLSB0ZXh0ICAgKi8KLSAgICBjaGFy ICogaF90X2luaXQ7CQkvKiBIb3N0IHJlY2VpdmUgaW5pdGlhdGlvbiBzdHJpbmcgLSBiaW5hcnkg Ki8KLSAgICBjaGFyICogaF94X2luaXQ7CQkvKiBIb3N0IHNlcnZlciBzdHJpbmcgKi8KLSAgICBj aGFyICogcF9iX3NjbWQ7CQkvKiBTRU5EIGNtZCBmb3IgZXh0ZXJuYWwgcHJvdG9jb2wgLSB0ZXh0 ICAgKi8KLSAgICBjaGFyICogcF90X3NjbWQ7CQkvKiBTRU5EIGNtZCBmb3IgZXh0ZXJuYWwgcHJv dG9jb2wgLSBiaW5hcnkgKi8KLSAgICBjaGFyICogcF9iX3JjbWQ7CQkvKiBSRUNWIGNtZCBmb3Ig ZXh0ZXJuYWwgcHJvdG9jb2wgLSB0ZXh0ICAgKi8KLSAgICBjaGFyICogcF90X3JjbWQ7CQkvKiBS RUNWIGNtZCBmb3IgZXh0ZXJuYWwgcHJvdG9jb2wgLSBiaW5hcnkgKi8KLX07Ci0KLXN0cnVjdCBm aWxlbGlzdCB7CQkJLyogU2VuZC1maWxlIGxpc3QgZWxlbWVudCAqLwotICAgIGNoYXIgKiBmbF9u YW1lOwkJCS8qIEZpbGVuYW1lICovCi0gICAgaW50IGZsX21vZGU7CQkJLyogVHJhbnNmZXIgbW9k ZSAqLwotICAgIGNoYXIgKiBmbF9hbGlhczsJCQkvKiBOYW1lIHRvIHNlbmQgdGhlIGZpbGUgdW5k ZXIgKi8KLSAgICBzdHJ1Y3QgZmlsZWxpc3QgKiBmbF9uZXh0OwkJLyogUG9pbnRlciB0byBuZXh0 IGVsZW1lbnQgKi8KLX07Ci0KLS8qIEtlcm1pdCBzeXN0ZW0gSURzIGFuZCBhc3NvY2lhdGVkIHBy b3BlcnRpZXMuLi4gKi8KLQotc3RydWN0IHN5c2RhdGEgewotICAgIGNoYXIgKnNpZF9jb2RlOwkv KiBLZXJtaXQgc3lzdGVtIElEIGNvZGUgKi8KLSAgICBjaGFyICpzaWRfbmFtZTsJLyogRGVzY3Jp cHRpdmUgbmFtZSAqLwotICAgIHNob3J0IHNpZF91bml4bGlrZTsJLyogVHJlZS1zdHJ1Y3R1cmVk IGRpcmVjdG9yeSB3aXRoIHNlcGFyYXRvcnMgKi8KLSAgICBjaGFyICBzaWRfZGlyc2VwOwkvKiBE aXJlY3Rvcnkgc2VwYXJhdG9yIGNoYXJhY3RlciBpZiB1bml4bGlrZSAqLwotICAgIHNob3J0IHNp ZF9kZXY7CS8qIENhbiBzdGFydCB3aXRoIGRldjogKi8KLSAgICBzaG9ydCBzaWRfY2FzZTsJLyog Qml0IG1hcHBlZDogMSA9IGNhc2UgbWF0dGVycywgMiA9IGNhc2UgcHJlc2VydmVkICovCi0gICAg c2hvcnQgc2lkX3JlY2ZtOyAgICAvKiBUZXh0IHJlY29yZCBzZXBhcmF0b3IgKi8KLS8qCi0gICAw ID0gdW5rbm93biBvciBub25zdHJlYW0KLSAgIDEgPSBjcgotICAgMiA9IGxmCi0gICAzID0gY3Js ZgotKi8KLX07Ci0KLXN0cnVjdCBzc2hfcGYgewkJCQkvKiBTU0ggcG9ydCBmb3J3YXJkaW5nICov Ci0gICAgaW50ICAgIHAxOwkJCQkvKiBwb3J0IHRvIGJlIGZvcndhcmRlZCAqLwotICAgIGNoYXIg KiBob3N0OwkJCS8qIGhvc3QgKi8KLSAgICBpbnQgICAgcDI7CQkJCS8qIHBvcnQgKi8KLX07Ci0K LSNkZWZpbmUgU0VUX09OICAgMQkvKiBHZW5lcmFsIHZhbHVlcyBmb3Igc2V0dGluZ3MgdGhhdCBj YW4gYmUgT04gKi8KLSNkZWZpbmUgU0VUX09GRiAgMAkJCS8qIE9GRiwgKi8KLSNkZWZpbmUgU0VU X0FVVE8gMgkJCS8qIG9yIEFVVE8gKi8KLQotI2RlZmluZSBQQVRIX09GRiAwCS8qIFBhdGhuYW1l cyBvZmYgKHRvIGJlIHN0cmlwcGVkKSAqLwotI2RlZmluZSBQQVRIX1JFTCAxICAgICAgLyogUGF0 aG5hbWVzIG9uLCBsZWZ0IHJlbGF0aXZlIGlmIHBvc3NpYmxlICovCi0jZGVmaW5lIFBBVEhfQUJT IDIgICAgICAvKiBQYXRobmFtZXMgYWJzb2x1dGUgYWx3YXlzICovCi0jZGVmaW5lIFBBVEhfQVVU TyA0CS8qIFBhdGhuYW1lcyBoYW5kbGVkIGF1dG9tYXRpY2FsbHkgKi8KLQotLyogR0VUIE9wdGlv bnMgKi8KLQotI2RlZmluZSBHT1BUX0RFTCAxCQkJLyogRGVsZXRlIHNvdXJjZSBmaWxlICovCi0j ZGVmaW5lIEdPUFRfUkVDIDIJCQkvKiBSZWN1cnNpdmUgKi8KLSNkZWZpbmUgR09QVF9SRVMgNAkJ CS8qIFJlY292ZXIgKFJlc2VuZCkgKi8KLSNkZWZpbmUgR09QVF9DTUQgOAkJCS8qIEZpbGVuYW1l IGlzIGEgQ29tbWFuZCAqLwotCi0vKiBHRVQgVHJhbnNmZXIgTW9kZXMgKi8KLQotI2RlZmluZSBH TU9EX1RYVCAwCQkJLyogVGV4dCAqLwotI2RlZmluZSBHTU9EX0JJTiAxCQkJLyogQmluYXJ5ICov Ci0jZGVmaW5lIEdNT0RfQVVUIDIJCQkvKiBBdXRvICovCi0jZGVmaW5lIEdNT0RfTEJMIDMJCQkv KiBMYWJlbGVkICovCi0KLS8qIEdFVCBGaWxlbmFtZSBPcHRpb25zICovCi0KLSNkZWZpbmUgR05B TV9MSVQgMAkJCS8qIExpdGVyYWwgKi8KLSNkZWZpbmUgR05BTV9DTlYgMQkJCS8qIENvbnZlcnRl ZCAqLwotCi0vKiBHRVQgUGF0aG5hbWUgT3B0aW9ucyAqLwotCi0jZGVmaW5lIEdQVEhfT0ZGIDAJ CQkvKiBQYXRobmFtZXMgT2ZmICovCi0jZGVmaW5lIEdQVEhfUkVMIDEJCQkvKiBQYXRobmFtZXMg UmVsYXRpdmUgKi8KLSNkZWZpbmUgR1BUSF9BQlggMgkJCS8qIFBhdGhuYW1lcyBBYnNvbHV0ZSAq LwotCi0jaWZuZGVmIE5PU1BMCi0vKgotICBUaGUgSUYgUkVNT1RFLU9OTFkgY29tbWFuZCBpcyBh dmFpbGFibGUgb25seSBpbiB2ZXJzaW9ucwotICB0aGF0IGFjdHVhbGx5IGNhbiBiZSB1c2VkIGlu IHJlbW90ZSBtb2RlLCBhbmQgb25seSBpZiB3ZSBoYXZlCi0gIGFuIGludGVyYWN0aXZlIGNvbW1h bmQgcGFyc2VyLgotKi8KLSNkZWZpbmUgQ0tfSUZSTwotI2lmZGVmIE1BQwotI3VuZGVmIENLX0lG Uk8KLSNlbHNlCi0jaWZkZWYgR0VNRE9TCi0jdW5kZWYgQ0tfSUZSTwotI2VuZGlmIC8qIEdFTURP UyAqLwotI2VuZGlmIC8qIE1BQyAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0KLS8qIFN5c3RlbXMg d2hvc2UgQ09OTkVDVCBtb2R1bGVzIGNhbiBleGVjdXRlIEFwcGxpY2F0aW9uIFByb2dyYW0gQ29t bWFuZHMgKi8KLQotI2lmZGVmIE5PU1BMCQkJCS8qIFNjcmlwdCBwcm9ncmFtbWluZyBsYW5ndWFn ZSAqLwotI2lmZGVmIENLX0FQQwkJCQkvKiBpcyByZXF1aXJlZCBmb3IgQVBDLiAqLwotI3VuZGVm IENLX0FQQwotI2VuZGlmIC8qIENLX0FQQyAqLwotI2lmbmRlZiBOT0FQQwotI2RlZmluZSBOT0FQ QwotI2VuZGlmIC8qIE5PQVBDICovCi0jaWZuZGVmIE5PQVVUT0RMCi0jZGVmaW5lIE5PQVVUT0RM Ci0jZW5kaWYgLyogTk9BVVRPREwgKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVmIE5P QVBDCQkJCS8qIFVubGVzcyB0aGV5IHNhaWQgTk8gQVBDICovCi0jaWZuZGVmIENLX0FQQwkJCQkv KiBBbmQgdGhleSBkaWRuJ3QgYWxyZWFkeSBkZWZpbmUgaXQgKi8KLSNpZmRlZiBPUzIJCQkJLyog T1MvMiBnZXRzIGl0ICovCi0jZGVmaW5lIENLX0FQQwotI2VuZGlmIC8qIE9TMiAqLwotI2lmZGVm IFVOSVgJCQkJLyogVU5JWCBnZXRzIGl0ICovCi0jZGVmaW5lIENLX0FQQwotI2VuZGlmIC8qIFVO SVggKi8KLSNpZmRlZiBWTVMJCQkJLyogVk1TIHRvbyAqLwotI2RlZmluZSBDS19BUEMKLSNlbmRp ZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBDS19BUEMgKi8KLSNlbmRpZiAvKiBOT0FQQyAqLwotCi0j aWZkZWYgQ0tfQVBDCQkJCS8qIEFQQyBidWZmZXIgbGVuZ3RoICovCi0jaWZuZGVmIEFQQ0JVRkxF TgkJCS8qIFNob3VsZCBiZSBubyBiaWdnZXIgdGhhbiAqLwotI2lmZGVmIE5PU1BMCQkJCS8qIGNv bW1hbmQgYnVmZmVyIGxlbmd0aCAqLwotI2RlZmluZSBBUENCVUZMRU4gNjA4CQkJLyogKHNlZSBj a3VjbWQuaCkgYnV0IHdlIGNhbid0ICovCi0jZWxzZQkJCQkJLyogcmVmZXJlbmNlIGNrdWNtZC5o IHN5bWJvbHMgaGVyZSAqLwotI2RlZmluZSBBUENCVUZMRU4gNDA5NgotI2VuZGlmIC8qIE5PU1BM ICovCi0jZW5kaWYgLyogQVBDQlVGTEVOICovCi0jZGVmaW5lIEFQQ19PRkYgICAwCS8qIEFQQyBP RkYgKGRpc2FibGVkKSAqLwotI2RlZmluZSBBUENfT04gICAgMQkvKiBBUEMgT04gKGVuYWJsZWQg Zm9yIG5vbi1kYW5nZXJvdXMgY29tbWFuZHMpICovCi0jZGVmaW5lIEFQQ19VTkNIICAyCS8qIEFQ QyBVTkNIRUNLRUQgKGVuYWJsZWQgZm9yIEFMTCBjb21tYW5kcykgYml0bWFzayAqLwotI2RlZmlu ZSBBUENfTk9JTlAgNCAgICAgLyogQVBDIChlbmFibGVkIHdpdGggbm8gaW5wdXQgYWxsb3dlZCAt IGJpdG1hc2spICovCi0jZGVmaW5lIEFQQ19JTkFDVElWRSAwCS8qIEFQQyBub3QgaW4gdXNlICov Ci0jZGVmaW5lIEFQQ19SRU1PVEUgICAxCS8qIEFQQyBpbiB1c2UgZnJvbSBSZW1vdGUgKi8KLSNk ZWZpbmUgQVBDX0xPQ0FMICAgIDIJLyogQVBDIGJlaW5nIHVzZWQgZnJvbSB3aXRoaW4gS2VybWl0 ICovCi0jaWZuZGVmIE5PQVVUT0RMCi0jaWZuZGVmIENLX0FVVE9ETAkvKiBBdXRvZG93bmxvYWQg Ki8KLSNpZmRlZiBPUzIKLSNkZWZpbmUgQ0tfQVVUT0RMCi0jZWxzZQotI2lmZGVmIFVOSVgKLSNk ZWZpbmUgQ0tfQVVUT0RMCi0jZWxzZQotI2lmZGVmIFZNUwotI2RlZmluZSBDS19BVVRPREwKLSNl bHNlCi0jaWZkZWYgQ0tfQVVUT0RMCi0jdW5kZWYgQ0tfQVVUT0RMCi0jZW5kaWYgLyogQ0tfQVVU T0RMICAqLwotI2VuZGlmIC8qIE5PQVVUT0RMICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYg LyogVU5JWCAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIENLX0FVVE9ETCAqLwotCi0j ZWxzZSAgLyogQ0tfQVBDIG5vdCBkZWZpbmVkICovCi0KLSNpZmRlZiBOT0lDUAotI2lmZGVmIFVO SVgKLSNpZm5kZWYgQ0tfQVVUT0RMCi0jZGVmaW5lIENLX0FVVE9ETAotI2VuZGlmIC8qIENLX0FV VE9ETCAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbHNlICAvKiBOb3QgTk9JQ1AuLi4gKi8KLSNp ZmRlZiBDS19BVVRPREwKLSN1bmRlZiBDS19BVVRPREwKLSNlbmRpZiAvKiBDS19BVVRPREwgKi8K LSNlbmRpZiAvKiBOT0lDUCAqLwotI2VuZGlmIC8qIENLX0FQQyAqLwotCi0jaWZkZWYgTk9BVVRP REwKLSNpZmRlZiBDS19BVVRPREwKLSN1bmRlZiBDS19BVVRPREwKLSNlbmRpZiAvKiBDS19BVVRP REwgKi8KLSNlbmRpZiAvKiBOT0FVVE9ETCAqLwotCi0vKiBDb2RlcyBmb3Igd2hhdCB3ZSBhcmUg ZG9pbmcgbm93IC0gYml0IG1hc2sgdmFsdWVzICovCi0KLSNkZWZpbmUgV19OT1RISU5HICAgIDAJ CQkvKiBOb3RoaW5nICovCi0jZGVmaW5lIFdfSU5JVCAgICAgICAxCQkJLyogSW5pdGlhbGl6aW5n IHByb3RvY29sICovCi0jZGVmaW5lIFdfU0VORCAgICAgICAyCQkJLyogU0VORGluZyBvciBNQUlM aW5nICovCi0jZGVmaW5lIFdfUkVDViAgICAgICA0CQkJLyogUkVDRUlWRWluZyBvciBHRVR0aW5n ICovCi0jZGVmaW5lIFdfUkVNTyAgICAgICA4CQkJLyogRG9pbmcgYSBSRU1PVEUgY29tbWFuZCAq LwotI2RlZmluZSBXX0NPTk5FQ1QgICAxNgkJCS8qIENPTk5FQ1QgbW9kZSAqLwotI2RlZmluZSBX X0NPTU1BTkQgICAzMgkJCS8qIENvbW1hbmQgbW9kZSAqLwotI2RlZmluZSBXX0RJQUxJTkcgICA2 NAkJCS8qIERpYWxpbmcgYSBtb2RlbSAqLwotI2RlZmluZSBXX0ZUUCAgICAgIDEyOAkJCS8qIEZU UCAqLwotI2RlZmluZSBXX0ZUX0RFTEUgICA2NAkJCS8qIEZUUCBNREVMRVRFICovCi0jZGVmaW5l IFdfS0VSTUlUIChXX0lOSVR8V19TRU5EfFdfUkVDVnxXX1JFTU8pIC8qIEtlcm1pdCBwcm90b2Nv bCAqLwotI2RlZmluZSBXX1hGRVIgKFdfSU5JVHxXX1NFTkR8V19SRUNWfFdfUkVNT3xXX0ZUUCkg LyogRmlsZSB4ZmVyIGFueSBwcm90b2NvbCAqLwotCi0jaWZuZGVmIE5PV0hBVEFNSQotI2lmbmRl ZiBXSEFUQU1JCi0jZGVmaW5lIFdIQVRBTUkKLSNlbmRpZiAvKiBXSEFUQU1JICovCi0jZW5kaWYg LyogTk9XSEFUQU1JICovCi0KLSNpZmRlZiBXSEFUQU1JCQkJCS8qIEJpdCBtYXNrIHBvc2l0aW9u cyBmb3IgV0hBVEFNSSAqLwotI2RlZmluZSBXTUlfU0VSVkUgICAxCQkJLyogU2VydmVyIG1vZGUg Ki8KLSNkZWZpbmUgV01JX0ZNT0RFICAgMgkJCS8qIEZpbGUgdHJhbnNmZXIgbW9kZSAqLwotI2Rl ZmluZSBXTUlfRk5BTUUgICA0CQkJLyogRmlsZSBuYW1lIGNvbnZlcnNpb24gKi8KLSNkZWZpbmUg V01JX1NUUkVBTSAgOAkJCS8qIEkgaGF2ZSBhIHJlbGlhYmxlIHRyYW5zcG9ydCAqLwotI2RlZmlu ZSBXTUlfQ0xFQVIgIDE2CQkJLyogSSBoYXZlIGEgY2xlYXIgY2hhbm5lbCAqLwotI2RlZmluZSBX TUlfRkxBRyAgIDMyCQkJLyogRmxhZyB0aGF0IFdIQVRBTUkgZmllbGQgaXMgdmFsaWQgKi8KLS8q IFdIQVRBTUkyIGJpdHMuLi4gKi8KLSNkZWZpbmUgV01JMl9YTU9ERSAgMQkJCS8qIFRyYW5zZmVy IG1vZGUgYXV0bygwKS9tYW51YWwoMSkgKi8KLSNkZWZpbmUgV01JMl9SRUNVICAgMgkJCS8qIFRy YW5zZmVyIGlzIHJlY3Vyc2l2ZSAqLwotI2RlZmluZSBXTUkyX0ZMQUcgIDMyCQkJLyogRmxhZyB0 aGF0IFdIQVRBTUkyIGZpZWxkIGlzIHZhbGlkICovCi0jZW5kaWYgLyogV0hBVEFNSSAqLwotCi0v KiBUZXJtaW5hbCB0eXBlcyAqLwotI2RlZmluZSBWVDEwMCAgICAgMAkJCS8qIEFsc28gZm9yIFZU NTIgbW9kZSAqLwotI2RlZmluZSBURUtUUk9OSVggMQotCi0vKiBOb3JtYWwgcGFja2V0IGFuZCB3 aW5kb3cgc2l6ZSAqLwotCi0jZGVmaW5lIE1BWFBBQ0sgOTQJCQkvKiBNYXhpbXVtIHVuZXh0ZW5k ZWQgcGFja2V0IHNpemUgKi8KLQkJCQkJLyogQ2FuJ3QgYmUgbW9yZSB0aGFuIDk0LiAqLwotI2lm ZGVmIHBkcDExCQkJCS8qIE1heGltdW0gc2xpZGluZyB3aW5kb3cgc2xvdHMgKi8KLSNkZWZpbmUg TUFYV1MgIDgKLSNlbHNlCi0jZGVmaW5lIE1BWFdTIDMyCQkJLyogQ2FuJ3QgYmUgbW9yZSB0aGFu IDMyLiAqLwotI2VuZGlmIC8qIHBkcDExICovCi0KLS8qIE1heGltdW0gbG9uZyBwYWNrZXQgc2l6 ZSBmb3Igc2VuZGluZyBwYWNrZXRzICovCi0vKiBPdmVycmlkZSB0aGVzZSBmcm9tIGNjIGNvbW1h bmQgbGluZSB2aWEgLURNQVhTUD1ubm4gKi8KLQotI2lmZGVmIElSSVgJCQkJLyogSXJpeCA2LjQg YW5kIGVhcmxpZXIgaGFzICovCi0jaWZuZGVmIE1BWFNQCQkJCS8qIFRlbG5ldCBzZXJ2ZXIgYnVn ICovCi0jaWZkZWYgSVJJWDY1Ci0jZGVmaW5lIE1BWFNQIDkwMjQKLSNlbHNlCi0jZGVmaW5lIE1B WFNQIDQwMDAKLSNlbmRpZiAvKiBJUklYNjUgKi8KLSNlbmRpZiAvKiBNQVhTUCAqLwotI2VuZGlm IC8qIElSSVggKi8KLQotI2lmZGVmIERZTkFNSUMKLSNpZm5kZWYgTUFYU1AKLSNkZWZpbmUgTUFY U1AgOTAyNAotI2VuZGlmIC8qIE1BWFNQICovCi0jZWxzZSAgLyogbm90IERZTkFNSUMgKi8KLSNp Zm5kZWYgTUFYU1AKLSNpZmRlZiBwZHAxMQotI2RlZmluZSBNQVhTUCAxMDI0Ci0jZWxzZQotI2Rl ZmluZSBNQVhTUCAyMDQ4Ci0jZW5kaWYgLyogcGRwMTEgKi8KLSNlbmRpZiAvKiBNQVhTUCAqLwot I2VuZGlmIC8qIERZTkFNSUMgKi8KLQotLyogTWF4aW11bSBsb25nIHBhY2tldCBzaXplIGZvciBy ZWNlaXZpbmcgcGFja2V0cyAqLwotLyogT3ZlcnJpZGUgdGhlc2UgZnJvbSBjYyBjb21tYW5kIGxp bmUgdmlhIC1ETUFYUlA9bm5uICovCi0KLSNpZmRlZiBEWU5BTUlDCi0jaWZuZGVmIE1BWFJQCi0j ZGVmaW5lIE1BWFJQIDkwMjQKLSNlbmRpZiAvKiBNQVhSUCAqLwotI2Vsc2UgIC8qIG5vdCBEWU5B TUlDICovCi0jaWZuZGVmIE1BWFJQCi0jaWZkZWYgcGRwMTEKLSNkZWZpbmUgTUFYUlAgMTAyNAot I2Vsc2UKLSNkZWZpbmUgTUFYUlAgMjA0OAotI2VuZGlmIC8qIHBkcDExICovCi0jZW5kaWYgLyog TUFYUlAgKi8KLSNlbmRpZiAvKiBEWU5BTUlDICovCi0vKgotICBEZWZhdWx0IHNpemVzIGZvciB3 aW5kb3dlZCBwYWNrZXQgYnVmZmVycy4KLSAgT3ZlcnJpZGUgdGhlc2UgZnJvbSBjYyBjb21tYW5k IGxpbmUgdmlhIC1EU0JTSVo9bm5uLCAtRFJCU0laPW5ubi4KLSAgT3IganVzdCAtREJJR0JVRk9L LgotKi8KLSNpZm5kZWYgTUFYR0VUUEFUSAkJCS8qIE1heGltdW0gbnVtYmVyIG9mIGRpcmVjdG9y aWVzICovCi0jaWZkZWYgQklHQlVGT0sJCQkJLyogZm9yIEdFVCBwYXRoLi4uICovCi0jZGVmaW5l IE1BWEdFVFBBVEggMTI4Ci0jZWxzZQotI2RlZmluZSBNQVhHRVRQQVRIIDE2Ci0jZW5kaWYgLyog QklHQlVGT0sgKi8KLSNlbmRpZiAvKiBNQVhHRVRQQVRIICovCi0KLSNpZm5kZWYgTk9TUEwJCQkJ LyogUXVlcnkgYnVmZmVyIGxlbmd0aCAqLwotI2lmZGVmIE9TMgotI2RlZmluZSBRQlVGTCA0MDk1 Ci0jZWxzZQotI2lmZGVmIEJJR0JVRk9LCi0jZGVmaW5lIFFCVUZMIDQwOTUKLSNlbHNlCi0jZGVm aW5lIFFCVUZMIDEwMjMKLSNlbmRpZiAvKiBCSUdCVUZPSyAqLwotI2VuZGlmIC8qIE9TMiAqLwot I2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZmRlZiBEWU5BTUlDCi0jaWZuZGVmIFNCU0laCi0jaWZk ZWYgQklHQlVGT0sJCQkJLyogSWYgYmlnIGJ1ZmZlcnMgYXJlIHNhZmUuLi4gKi8KLSNkZWZpbmUg U0JTSVogMjkwMDAwCQkJLyogQWxsb3cgZm9yIDEwIHggOTAyNCBvciAyMCB4IDQwOTYgKi8KLSNl bHNlCQkJCQkvKiBPdGhlcndpc2UuLi4gKi8KLSNpZmRlZiBwZHAxMQotI2RlZmluZSBTQlNJWiAz MDIwCi0jZWxzZQotI2RlZmluZSBTQlNJWiA5MDUwCQkJLyogQWxsb3cgZm9yIDMgeCAzMDAwLCBl dGMuICovCi0jZW5kaWYgLyogcGRwMTEgKi8KLSNlbmRpZiAvKiBCSUdCVUZPSyAqLwotI2VuZGlm IC8qIFNCU0laICovCi0KLSNpZm5kZWYgUkJTSVoKLSNpZmRlZiBCSUdCVUZPSwotI2RlZmluZSBS QlNJWiAyOTAwMDAKLSNlbHNlCi0jaWZkZWYgcGRwMTEKLSNkZWZpbmUgUkJTSVogMzAyMAotI2Vs c2UKLSNkZWZpbmUgUkJTSVogOTA1MAotI2VuZGlmIC8qIHBkcDExICovCi0jZW5kaWYgLyogQklH QlVGT0sgKi8KLSNlbmRpZiAvKiBSQlNJWiAqLwotI2Vsc2UgIC8qIG5vdCBEWU5BTUlDICovCi0j aWZkZWYgcGRwMTEKLSNkZWZpbmUgU0JTSVogMzAyMAotI2RlZmluZSBSQlNJWiAzMDIwCi0jZWxz ZQotI2lmbmRlZiBTQlNJWgotI2RlZmluZSBTQlNJWiAoTUFYU1AgKiAoTUFYV1MgKyAxKSkKLSNl bmRpZiAvKiBTQlNJWiAqLwotI2lmbmRlZiBSQlNJWgotI2RlZmluZSBSQlNJWiAoTUFYUlAgKiAo TUFYV1MgKyAxKSkKLSNlbmRpZiAvKiBSQlNJWiAqLwotI2VuZGlmIC8qIHBkcDExICovCi0jZW5k aWYgLyogRFlOQU1JQyAqLwotCi0jaWZkZWYgQklHQlVGT0sKLSNkZWZpbmUgUEtUTVNHTEVOIDEw MjMKLSNlbHNlCi0jZGVmaW5lIFBLVE1TR0xFTiA4MAotI2VuZGlmIC8qIEJJR0JVRk9LICovCi0K LS8qIEtlcm1pdCBwYXJhbWV0ZXJzIGFuZCBkZWZhdWx0cyAqLwotCi0jZGVmaW5lIENUTFEJICAg JyMnCQkJLyogQ29udHJvbCBjaGFyIHByZWZpeCBJIHdpbGwgdXNlICovCi0jZGVmaW5lIE1ZRUJR CSAgICcmJwkJCS8qIDh0aC1CaXQgcHJlZml4IGNoYXIgSSB3aWxsIHVzZSAqLwotI2RlZmluZSBN WVJQVFEJICAgJ34nCQkJLyogUmVwZWF0IGNvdW50IHByZWZpeCBJIHdpbGwgdXNlICovCi0KLSNk ZWZpbmUgTUFYVFJZCSAgICAxMAkJCS8qIFRpbWVzIHRvIHJldHJ5IGEgcGFja2V0ICovCi0jZGVm aW5lIE1ZUEFETgkgICAgMAkJCS8qIEhvdyBtYW55IHBhZGRpbmcgY2hhcnMgSSBuZWVkICovCi0j ZGVmaW5lIE1ZUEFEQwkgICAgJ1wwJwkJLyogV2hpY2ggcGFkZGluZyBjaGFyYWN0ZXIgSSBuZWVk ICovCi0KLSNkZWZpbmUgRE1ZVElNCSAgICA4CQkJLyogSW5pdGlhbCB0aW1lb3V0IGludGVydmFs IHRvIHVzZS4gKi8KLSNkZWZpbmUgVVJUSU1FCSAgICAxNQkJCS8qIFRpbWVvdXQgaW50ZXJ2YWwg dG8gdXNlIG9uIG1lLiAqLwotI2RlZmluZSBEU1JWVElNICAgICAwCQkJLyogRGVmYXVsdCBzZXJ2 ZXIgY21kIHdhaXQgdGltZW91dC4gKi8KLQotI2RlZmluZSBERUZUUk4JICAgIDAJCQkvKiBEZWZh dWx0IGxpbmUgdHVybmFyb3VuZCBoYW5kc2hha2UgKi8KLQotI2RlZmluZSBNWUVPTAkgICAgQ1IJ CQkvKiBJbmNvbWluZyBwYWNrZXQgdGVybWluYXRvci4gKi8KLQotI2lmZGVmIE5FV0RFRkFVTFRT Ci0jZGVmaW5lIERSUFNJWgkgIDQwOTUJCQkvKiBEZWZhdWx0IGluY29taW5nIHBhY2tldCBzaXpl LiAqLwotI2RlZmluZSBERldTSVogICAgICAzMAkJCS8qIERlZmF1bHQgd2luZG93IHNpemUgKi8K LSNkZWZpbmUgREZCQ1QgICAgICAgIDMJCQkvKiBEZWZhdWx0IGJsb2NrLWNoZWNrIHR5cGUgKi8K LSNlbHNlCi0jZGVmaW5lIERSUFNJWgkgICAgOTAJCQkvKiBEZWZhdWx0IGluY29taW5nIHBhY2tl dCBzaXplLiAqLwotI2RlZmluZSBERldTSVogICAgICAgMQkJCS8qIERlZmF1bHQgd2luZG93IHNp emUgKi8KLSNkZWZpbmUgREZCQ1QgICAgICAgIDMJCQkvKiBEZWZhdWx0IGJsb2NrLWNoZWNrIHR5 cGUgKi8KLSNlbmRpZiAvKiBORVdERUZBVUxUUyAqLwotCi0vKiBUaGUgSFAtVVggNSBhbmQgNiBU ZWxuZXQgc2VydmVycyBjYW4gb25seSBzd2FsbG93IDUxMyBieXRlcyBhdCBvbmNlICovCi0KLSNp ZmRlZiBIUFVYNQotI2lmZGVmIERSUFNJWgotI3VuZGVmIERSUFNJWgotI2VuZGlmIC8qIERSUFNJ WiAqLwotI2RlZmluZSBEUlBTSVogNTAwCi0jZWxzZQotI2lmZGVmIEhQVVg2Ci0jaWZkZWYgRFJQ U0laCi0jdW5kZWYgRFJQU0laCi0jZW5kaWYgLyogRFJQU0laICovCi0jZGVmaW5lIERSUFNJWiA1 MDAKLSNlbmRpZiAvKiBIUFVYNiAqLwotI2VuZGlmIC8qIEhQVVg1ICovCi0KLSNkZWZpbmUgRFNQ U0laCSAgICA5MAkJCS8qIERlZmF1bHQgb3V0Ym91bmQgcGFja2V0IHNpemUuICovCi0jZGVmaW5l IERERUxBWSAgICAgIDEJCQkvKiBEZWZhdWx0IGRlbGF5LiAqLwotI2RlZmluZSBEU1BFRUQJICAg IDk2MDAJCS8qIERlZmF1bHQgbGluZSBzcGVlZC4gKi8KLQotI2lmZGVmIE9TMgkJCQkvKiBEZWZh dWx0IENPTk5FQ1QtbW9kZSAqLwotI2RlZmluZSBERkVTQyAyOQkJCS8qIGVzY2FwZSBjaGFyYWN0 ZXIgKi8KLSNlbHNlCi0jaWZkZWYgTkVYVAkJCQkvKiBDdHJsLV0gZm9yIFBDIGFuZCBOZVhUICov Ci0jZGVmaW5lIERGRVNDIDI5Ci0jZWxzZQotI2lmZGVmIEdFTURPUwkJCQkvKiBBbmQgQXRhcmkg U1QgKi8KLSNkZWZpbmUgREZFU0MgMjkKLSNlbHNlCi0jZGVmaW5lIERGRVNDIDI4CQkJLyogQ3Ry bC1iYWNrc2xhc2ggZm9yIG90aGVycyAqLwotI2VuZGlmIC8qIEdFTURPUyAqLwotI2VuZGlmIC8q IE5FWFQgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIE5PUFVTSAkJCQkvKiBOT1BVU0gg aW1wbGllcyBOT0pDICovCi0jaWZuZGVmIE5PSkMJCQkJLyogKG5vIGpvYiBjb250cm9sKSAqLwot I2RlZmluZSBOT0pDCi0jZW5kaWYgLyogTk9KQyAqLwotI2VuZGlmIC8qIE5PUFVTSCAqLwotCi0j aWZkZWYgVU5JWAkJCQkvKiBEZWZhdWx0IGZvciBTRVQgU1VTUEVORCAqLwotI2lmZGVmIE5PSkMJ CQkJLyogVU5JWCBidXQgam9iIGNvbnRyb2wgZGlzYWJsZWQgKi8KLSNkZWZpbmUgREZTVVNQICAg ICAgMAotI2Vsc2UJCQkJCS8qIFVOSVgsIGpvYiBjb250cm9sIGVuYWJsZWQuICovCi0jZGVmaW5l IERGU1VTUCAgICAgIDEKLSNlbmRpZiAvKiBOT0pDICovCi0jZWxzZQotI2RlZmluZSBERlNVU1Ag ICAgICAwCi0jZW5kaWYgLyogVU5JWCAqLwotCi0jaWZuZGVmIERGQ0RNU0cKLSNpZmRlZiBVTklY T1JPU0sKLSNkZWZpbmUgREZDRE1TRyAie3suLy5yZWFkbWV9e1JFQURNRS5UWFR9e1JFQUQuTUV9 fSIKLSNlbHNlCi0jZGVmaW5lIERGQ0RNU0cgInt7UkVBRE1FLlRYVH17UkVBRC5NRX19IgotI2Vu ZGlmIC8qIFVOSVhPUk9TSyAqLwotI2VuZGlmIC8qIERGQ0RNU0cgKi8KLQotI2RlZmluZSBOU05E RVhDRVBUIDY0CQkvKiBNYXggcGF0dGVybnMgZm9yIC9FWENFUFQ6IGxpc3QgKi8KLQotLyogRmls ZXMgKi8KLQotI2RlZmluZSBaQ1RFUk0gICAgICAwCSAgICAJLyogQ29uc29sZSB0ZXJtaW5hbCAq LwotI2RlZmluZSBaU1RESU8gICAgICAxCQkvKiBTdGFuZGFyZCBpbnB1dC9vdXRwdXQgKi8KLSNk ZWZpbmUgWklGSUxFCSAgICAyCQkvKiBDdXJyZW50IGlucHV0IGZpbGUgKFNFTkQsIGV0YykgKGlu KSAqLwotI2RlZmluZSBaT0ZJTEUgICAgICAzCSAgICAJLyogQ3VycmVudCBvdXRwdXQgZmlsZSAo UkVDRUlWRSwgR0VUKSAob3V0KSAqLwotI2RlZmluZSBaREZJTEUgICAgICA0CSAgICAJLyogQ3Vy cmVudCBkZWJ1Z2dpbmcgbG9nIGZpbGUgKG91dCkgKi8KLSNkZWZpbmUgWlRGSUxFICAgICAgNQkg ICAgCS8qIEN1cnJlbnQgdHJhbnNhY3Rpb24gbG9nIGZpbGUgKG91dCkgKi8KLSNkZWZpbmUgWlBG SUxFICAgICAgNgkgICAgCS8qIEN1cnJlbnQgcGFja2V0IGxvZyBmaWxlIChvdXQpICovCi0jZGVm aW5lIFpTRklMRSAgICAgIDcJCS8qIEN1cnJlbnQgc2Vzc2lvbiBsb2cgZmlsZSAob3V0KSAqLwot I2RlZmluZSBaU1lTRk4JICAgIDgJCS8qIElucHV0L091dHB1dCBmcm9tIGEgc3lzdGVtIGZ1bmN0 aW9uICovCi0jZGVmaW5lIFpSRklMRSAgICAgIDkgICAgICAgICAgIC8qIExvY2FsIGZpbGUgZm9y IFJFQUQgKGluKSAqLwotI2RlZmluZSBaV0ZJTEUgICAgIDEwICAgICAgICAgICAvKiBMb2NhbCBm aWxlIGZvciBXUklURSAob3V0KSAqLwotI2RlZmluZSBaTUZJTEUgICAgIDExCQkvKiBNaXNjZWxs YW5lb3VzIGZpbGUsIGUuZy4gZm9yIFhMQVRFICovCi0jZGVmaW5lIFpESUZJTCAgICAgMTIJCS8q IERJQUwgbG9nICovCi0jZGVmaW5lIFpORklMUyAgICAgMTMJICAgIAkvKiBIb3cgbWFueSBkZWZp bmVkIGZpbGUgbnVtYmVycyAqLwotCi0jaWZkZWYgQ0tDSEFOTkVMSU8KLQotLyogRmlsZSBtb2Rl cyAqLwotCi0jZGVmaW5lIEZNX1JFQSAgICAgIDEJCQkvKiBSZWFkICovCi0jZGVmaW5lIEZNX1dS SSAgICAgIDIJCQkvKiBXcml0ZSAqLwotI2RlZmluZSBGTV9BUFAgICAgICA0CQkJLyogQXBwZW5k ICovCi0jZGVmaW5lIEZNX1JXQSAgICAgIDcJCQkvKiBSZWFkL1dyaXRlL0FwcGVuZCBtYXNrICov Ci0jZGVmaW5lIEZNX0JJTiAgICAgIDgJCQkvKiBCaW5hcnkgKi8KLSNkZWZpbmUgRk1fUldCICAg ICAxNQkJCS8qIFJlYWQvV3JpdGUvQXBwZW5kL0JpbmFyeSBtYXNrICovCi0jZGVmaW5lIEZNX0NN RCAgICAgMTYJCQkvKiBDb21tYW5kICovCi0jZGVmaW5lIEZNX0VPRiAgICAgNjQJCQkvKiAoc3Rh dHVzKSBBdCBFT0YgKi8KLQotLyogRmlsZSBlcnJvcnMgKi8KLQotI2RlZmluZSBGWF9ORVIgICAg ICAwCQkJLyogTm8gZXJyb3IgKi8KLSNkZWZpbmUgRlhfU1lTICAgICAtMQkJCS8qIFN5c3RlbSBl cnJvciAqLwotI2RlZmluZSBGWF9FT0YgICAgIC0yCQkJLyogRW5kIG9mIGZpbGUgKi8KLSNkZWZp bmUgRlhfTk9QICAgICAtMwkJCS8qIENoYW5uZWwgbm90IG9wZW4gKi8KLSNkZWZpbmUgRlhfQ0hO ICAgICAtNAkJCS8qIENoYW5uZWwgb3V0IG9mIHJhbmdlICovCi0jZGVmaW5lIEZYX1JORyAgICAg LTUJCQkvKiBBcmd1bWVudCByYW5nZSBlcnJvciAqLwotI2RlZmluZSBGWF9GTkYgICAgIC02CQkJ LyogRmlsZSBub3QgZm91bmQgKi8KLSNkZWZpbmUgRlhfQkZOICAgICAtNwkJCS8qIEJhZCBvciBt aXNzaW5nIGZpbGVuYW1lICovCi0jZGVmaW5lIEZYX05NRiAgICAgLTgJCQkvKiBObyBtb3JlIGZp bGVzICovCi0jZGVmaW5lIEZYX0ZPUCAgICAgLTkJCQkvKiBGb3JiaWRkZW4gb3BlcmF0aW9uICov Ci0jZGVmaW5lIEZYX0FDQyAgICAtMTAJCQkvKiBBY2Nlc3MgZGVuaWVkICovCi0jZGVmaW5lIEZY X0JPTSAgICAtMTEJCQkvKiBCYWQgY29tYmluYXRpb24gb2Ygb3BlbiBtb2RlcyAqLwotI2RlZmlu ZSBGWF9PRkwgICAgLTEyCQkJLyogQnVmZmVyIG92ZXJmbG93ICovCi0jZGVmaW5lIEZYX0xOVSAg ICAtMTMJCQkvKiBDdXJyZW50IGxpbmUgbnVtYmVyIHVua25vd24gKi8KLSNkZWZpbmUgRlhfUk9P ICAgIC0xNAkJCS8qIFNldCBSb290IHZpb2xhdGlvbiAqLwotI2RlZmluZSBGWF9OWUkgICAgLTk5 CQkJLyogRmVhdHVyZSBub3QgaW1wbGVtZW50ZWQgeWV0ICovCi0jZGVmaW5lIEZYX1VOSyAgIC05 OTkJCQkvKiBVbmtub3duIGVycm9yICovCi0KLV9QUk9UT1RZUCggaW50IHpfb3BlbiwgKGNoYXIg KiwgaW50KSApOwotX1BST1RPVFlQKCBpbnQgel9jbG9zZSwgKGludCkgKTsKLV9QUk9UT1RZUCgg aW50IHpfb3V0LCAoaW50LCBjaGFyICosIGludCwgaW50KSApOwotX1BST1RPVFlQKCBpbnQgel9p biwgKGludCwgY2hhciAqLCBpbnQsIGludCwgaW50KSApOwotX1BST1RPVFlQKCBpbnQgel9mbHVz aCwgKGludCkgKTsKLV9QUk9UT1RZUCggaW50IHpfc2VlaywgKGludCwgQ0tfT0ZGX1QpICk7Ci1f UFJPVE9UWVAoIGludCB6X2xpbmUsIChpbnQsIENLX09GRl9UKSApOwotX1BST1RPVFlQKCBpbnQg el9nZXRtb2RlLCAoaW50KSApOwotX1BST1RPVFlQKCBpbnQgel9nZXRmbnVtLCAoaW50KSApOwot X1BST1RPVFlQKCBDS19PRkZfVCB6X2dldHBvcywgKGludCkgKTsKLV9QUk9UT1RZUCggQ0tfT0ZG X1Qgel9nZXRsaW5lLCAoaW50KSApOwotX1BST1RPVFlQKCBDS19PRkZfVCB6X2NvdW50LCAoaW50 LCBpbnQpICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiB6X2dldG5hbWUsIChpbnQpICk7Ci1fUFJPVE9U WVAoIGNoYXIgKiBja2ZlcnJvciwgKGludCkgKTsKLSNlbmRpZiAvKiBDS0NIQU5ORUxJTyAqLwot Ci1fUFJPVE9UWVAoIGludCBzY2FuZmlsZSwgKGNoYXIgKiwgaW50ICosIGludCkgKTsKLV9QUk9U T1RZUCggaW50IHNjYW5zdHJpbmcsIChjaGFyICopICk7Ci0KLS8qICBCdWZmZXJlZCBmaWxlIGkv byAuLi4gICovCi0jaWZkZWYgT1MyCQkJCS8qIEstOTUgKi8KLSNkZWZpbmUgSU5CVUZTSVpFIDMy NzY4Ci0jZGVmaW5lIE9CVUZTSVpFIDMyNzY4Ci0jZWxzZQotI2lmZGVmIHBkcDExCi0jZGVmaW5l IElOQlVGU0laRSA1MTIKLSNkZWZpbmUgT0JVRlNJWkUgNTEyCi0jZWxzZQotLyogSW4gVk1TLCBh bGxvdyBmb3IgbG9uZ2VzdCBwb3NzaWJsZSBSTVMgcmVjb3JkICovCi0jaWZkZWYgVk1TCi0jZGVm aW5lIElOQlVGU0laRSAzMjc2OAkJCS8qIEZpbGUgaW5wdXQgYnVmZmVyIHNpemUgKi8KLSNkZWZp bmUgT0JVRlNJWkUgMzI3NjgJCQkvKiBGaWxlIG91dHB1dCBidWZmZXIgc2l6ZSAqLwotI2Vsc2Ug IC8qIE5vdCBWTVMgKi8KLSNpZmRlZiBTVFJBVFVTCi0jaWZkZWYgRFlOQU1JQwotI2RlZmluZSBJ TkJVRlNJWkUgMzI3NjcJCQkvKiBGaWxlIGlucHV0IGJ1ZmZlciBzaXplICovCi0jZGVmaW5lIE9C VUZTSVpFIDMyNzY3CQkJLyogRmlsZSBvdXRwdXQgYnVmZmVyIHNpemUgKi8KLSNlbHNlIC8qIFNU UkFUVVMsIG5vdCBEWU5BTUlDICovCi0jZGVmaW5lIElOQlVGU0laRSA0MDk2CQkJLyogRmlsZSBp bnB1dCBidWZmZXIgc2l6ZSAqLwotI2RlZmluZSBPQlVGU0laRSA0MDk2CQkJLyogRmlsZSBvdXRw dXQgYnVmZmVyIHNpemUgKi8KLSNlbmRpZiAvKiBEWU5BTUlDICovCi0jZWxzZSAvKiBub3QgU1RS QVRVUyAqLwotI2lmZGVmIEJJR0JVRk9LCQkJCS8qIFN5c3RlbXMgd2hlcmUgbWVtb3J5IGlzICov Ci0jZGVmaW5lIElOQlVGU0laRSAzMjc2OAkJCS8qIG5vdCBhIHByb2JsZW0uLi4gKi8KLSNkZWZp bmUgT0JVRlNJWkUgMzI3NjgKLSNlbHNlIC8qIE5vdCBCSUdCVUZPSyAqLwotI2RlZmluZSBJTkJV RlNJWkUgMTAyNAotI2RlZmluZSBPQlVGU0laRSAxMDI0Ci0jZW5kaWYgLyogQklHQlVGT0sgKi8K LSNlbmRpZiAvKiBTVFJBVFVTICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogcGRwMTEg Ki8KLSNlbmRpZiAvKiBPUzIgKi8KLQotLyogRmlsZS10cmFuc2ZlciBjaGFyYWN0ZXIgaW4vb3V0 IG1hY3JvcyBmb3IgYnVmZmVyZWQgaS9vICovCi0KLS8qIEdldCB0aGUgbmV4dCBmaWxlIGJ5dGUg Ki8KLSNpZm5kZWYgQ0tDTUFJCi0jaWZuZGVmIE5PWEZFUgotZXh0ZXJuIGNoYXIgKiogc25kYXJy YXk7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0jZW5kaWYgLyogQ0tDTUFJICovCi0jaWZkZWYgTk9T UEwKLSNkZWZpbmUgem1pbmNoYXIoKSAoKCgtLXppbmNudCk+PTApID8gKChpbnQpKCp6aW5wdHIr KykgJiAwMzc3KSA6IHppbmZpbGwoKSkKLSNlbHNlCi0jaWZkZWYgTk9YRkVSCi0jZGVmaW5lIHpt aW5jaGFyKCkgKCgoLS16aW5jbnQpPj0wKSA/ICgoaW50KSgqemlucHRyKyspICYgMDM3NykgOiB6 aW5maWxsKCkpCi0jZWxzZQotI2RlZmluZSB6bWluY2hhcigpIFwKLShzbmRhcnJheT9hZ25ieXRl KCk6KCgoLS16aW5jbnQpPj0wKSA/ICgoaW50KSgqemlucHRyKyspICYgMDM3NykgOiB6aW5maWxs KCkpKQotI2VuZGlmIC8qIE5PWEZFUiAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0KLS8qIFN0dWZm IGEgY2hhcmFjdGVyIGludG8gdGhlIGlucHV0IGJ1ZmZlciAqLwotI2RlZmluZSB6bXN0dWZmKGMp IHppbnB0ci0tLCAqemlucHRyID0gYywgemluY250KysKLQotLyogUHV0IGEgY2hhcmFjdGVyIHRv IGEgZmlsZSAqLwotI2RlZmluZSB6bWNob3V0KGMpIFwKLSgoKnpvdXRwdHIrKz0oY2hhcikoYykp LCgoKCsrem91dGNudCk+PXpvYnVmc2l6ZSk/em91dGR1bXAoKTowKSkKLQotLyogU2NyZWVuIGZ1 bmN0aW9ucyAqLwotCi0jZGVmaW5lIFhZRkRfTiAwCQkJLyogRmlsZSB0cmFuc2ZlciBkaXNwbGF5 OiBOb25lLCBPZmYgKi8KLSNkZWZpbmUgWFlGRF9SIDEJCQkvKiBSZWd1bGFyLCBEb3RzICovCi0j ZGVmaW5lIFhZRkRfQyAyCQkJLyogQ3Vyc29yLXBvc2l0aW9uaW5nIChlLmcuIGN1cnNlcykgKi8K LSNkZWZpbmUgWFlGRF9TIDMJCQkvKiBDUlQgU2NyZWVuICovCi0jZGVmaW5lIFhZRkRfQiA0CQkJ LyogQnJpZWYgKi8KLSNkZWZpbmUgWFlGRF9HIDUgICAgICAgICAgICAgICAgICAgICAgICAvKiBH VUkgKi8KLQotI2lmZGVmIE5PRElTUExBWQotI2RlZmluZSB4eHNjcmVlbihhLGIsYyxkKQotI2Rl ZmluZSBja3NjcmVlbihhLGIsYyxkKQotI2Vsc2UKLV9QUk9UT1RZUCggVk9JRCBja3NjcmVlbiwg KGludCwgY2hhciwgQ0tfT0ZGX1QsIGNoYXIgKikgKTsKLSNpZmRlZiBWTVMKLSNkZWZpbmUgeHhz Y3JlZW4oYSxiLGMsZCkgXAotaWYgKGxvY2FsICYmIGZkaXNwbGEgIT0gWFlGRF9OKSBcCi1ja3Nj cmVlbigoaW50KWEsKGNoYXIpYiwoQ0tfT0ZGX1QpYywoY2hhciAqKWQpCi0jZWxzZQotI2RlZmlu ZSB4eHNjcmVlbihhLGIsYyxkKSBcCi1pZiAobG9jYWwgJiYgIWJhY2tncmQgJiYgZmRpc3BsYSAh PSBYWUZEX04pIFwKLWNrc2NyZWVuKChpbnQpYSwoY2hhciliLChDS19PRkZfVCljLChjaGFyICop ZCkKLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBOT0RJU1BMQVkgKi8KLQotI2RlZmluZSBT Q1JfRk4gMSAgICAJLyogZmlsZW5hbWUgKi8KLSNkZWZpbmUgU0NSX0FOIDIgICAgCS8qIGFzLW5h bWUgKi8KLSNkZWZpbmUgU0NSX0ZTIDMgCS8qIGZpbGUtc2l6ZSAqLwotI2RlZmluZSBTQ1JfWEQg NCAgICAJLyogeC1wYWNrZXQgZGF0YSAqLwotI2RlZmluZSBTQ1JfU1QgNSAgICAgIAkvKiBGaWxl IHN0YXR1czogKi8KLSNkZWZpbmUgICBTVF9PSyAgIDAgICAJLyogIFRyYW5zZmVycmVkIE9LICov Ci0jZGVmaW5lICAgU1RfRElTQyAxIAkvKiAgRGlzY2FyZGVkICovCi0jZGVmaW5lICAgU1RfSU5U ICAyICAgICAvKiAgSW50ZXJydXB0ZWQgKi8KLSNkZWZpbmUgICBTVF9TS0lQIDMgCS8qICBTa2lw cGVkICovCi0jZGVmaW5lICAgU1RfRVJSICA0IAkvKiAgRmF0YWwgRXJyb3IgKi8KLSNkZWZpbmUg ICBTVF9SRUZVIDUgICAgIC8qICBSZWZ1c2VkICh1c2UgQXR0cmlidXRlIGNvZGVzIGZvciByZWFz b24pICovCi0jZGVmaW5lICAgU1RfSU5DICA2CS8qICBJbmNvbXBsZXRlbHkgcmVjZWl2ZWQgKi8K LSNkZWZpbmUgICBTVF9NU0cgIDcJLyogIEluZm9ybWF0aW9uYWwgbWVzc2FnZSAqLwotI2RlZmlu ZSAgIFNUX1NJTSAgOAkvKiAgVHJhbnNmZXIgc2ltdWxhdGVkIChlLmcuIHdvdWxkIGJlIHNlbnQp ICovCi0jZGVmaW5lIFNDUl9QTiA2ICAgIAkvKiBwYWNrZXQgbnVtYmVyICovCi0jZGVmaW5lIFND Ul9QVCA3ICAgIAkvKiBwYWNrZXQgdHlwZSBvciBwc2V1ZG90eXBlICovCi0jZGVmaW5lIFNDUl9U QyA4ICAgIAkvKiB0cmFuc2FjdGlvbiBjb21wbGV0ZSAqLwotI2RlZmluZSBTQ1JfRU0gOSAgICAJ LyogZXJyb3IgbWVzc2FnZSAqLwotI2RlZmluZSBTQ1JfV00gMTAgICAJLyogd2FybmluZyBtZXNz YWdlICovCi0jZGVmaW5lIFNDUl9UVSAxMQkvKiBhcmJpdHJhcnkgdW5kZWxpbWl0ZWQgdGV4dCAq LwotI2RlZmluZSBTQ1JfVE4gMTIgICAJLyogYXJiaXRyYXJ5IG5ldyB0ZXh0LCBkZWxpbWl0ZWQg YXQgYmVnaW5uaW5nICovCi0jZGVmaW5lIFNDUl9UWiAxMyAgIAkvKiBhcmJpdHJhcnkgdGV4dCwg ZGVsaW1pdGVkIGF0IGVuZCAqLwotI2RlZmluZSBTQ1JfUUUgMTQJLyogcXVhbnRpdHkgZXF1YWxz IChlLmcuICJmb286IDciKSAqLwotI2RlZmluZSBTQ1JfQ1cgMTUJLyogY2xvc2Ugc2NyZWVuIHdp bmRvdyAqLwotI2RlZmluZSBTQ1JfQ0QgMTYgICAgICAgLyogZGlzcGxheSBjdXJyZW50IGRpcmVj dG9yeSAqLwotI2RlZmluZSBTQ1JfTVMgMTcJLyogbWVzc2FnZSBmcm9tIGNsaWVudCAqLwotCi0v KiBTa2lwIHJlYXNvbnMgKi8KLQotI2RlZmluZSBTS1BfREFUIDEJCQkvKiBEYXRlLVRpbWUgKE9s ZGVyKSAqLwotI2RlZmluZSBTS1BfRVFVIDIJCQkvKiBEYXRlLVRpbWUgKEVxdWFsKSAqLwotI2Rl ZmluZSBTS1BfVFlQIDMJCQkvKiBUeXBlICovCi0jZGVmaW5lIFNLUF9TSVogNAkJCS8qIFNpemUg Ki8KLSNkZWZpbmUgU0tQX05BTSA1CQkJLyogTmFtZSBjb2xsaXNpb24gKi8KLSNkZWZpbmUgU0tQ X0VYTCA2CQkJLyogRXhjZXB0aW9uIGxpc3QgKi8KLSNkZWZpbmUgU0tQX0RPVCA3CQkJLyogRG90 IGZpbGUgKi8KLSNkZWZpbmUgU0tQX0JLVSA4CQkJLyogQmFja3VwIGZpbGUgKi8KLSNkZWZpbmUg U0tQX1JFUyA5CQkJLyogUmVjb3Zlcnkgbm90IG5lZWRlZCAqLwotI2RlZmluZSBTS1BfQUNDIDEw CQkJLyogQWNjZXNzIGRlbmllZCAqLwotI2RlZmluZSBTS1BfTlJGIDExCQkJLyogTm90IGEgcmVn dWxhciBmaWxlICovCi0jZGVmaW5lIFNLUF9TSU0gMTIJCQkvKiBTaW11bGF0aW9uIChXT1VMRCBC RSBTRU5UKSAqLwotI2RlZmluZSBTS1BfWFVQIDEzIC8qIFNpbXVsYXRpb246IFdvdWxkIGJlIHNl bnQgYmVjYXVzZSByZW1vdGUgZmlsZSBvbGRlciAqLwotI2RlZmluZSBTS1BfWE5YIDE0IC8qIFNp bXVsYXRpb246IGRpdHRvLCBiZWNhdXNlIHJlbW90ZSBmaWxlIGRvZXMgbm90IGV4aXN0ICovCi0K LS8qIE1hY3JvcyAqLwotCi0jaWZuZGVmIENLQ01BSQotZXh0ZXJuIGludCB0Y3BfaW5jb21pbmc7 CQkvKiBVc2VkIGJ5IEVOQUJMRSBtYWNybyAqLwotI2VuZGlmIC8qIENLQ01BSSAqLwotCi0jaWZu ZGVmIFRDUFNPQ0tFVAotLyoKLSAgRU5BQkxFRCB0ZWxscyB3aGV0aGVyIGEgc2VydmVyLXNpZGUg c2VydmljZSBpcyBlbmFibGVkLgotICAwID0gZGlzYWJsZWQsIDEgPSBsb2NhbCwgMiA9IHJlbW90 ZS4KLSAgQSAic2V0IGhvc3QgKiIgY29ubmVjdGlvbiBpcyB0ZWNobmljYWxseSBsb2NhbCBidXQg bG9naWNhbGx5IHJlbW90ZQotKi8KLSNkZWZpbmUgRU5BQkxFRCh4KSAoKGxvY2FsICYmICh4ICYg MSkpIHx8ICghbG9jYWwgJiYgKHggJiAyKSkpCi0jZWxzZQotI2RlZmluZSBFTkFCTEVEKHgpICgo KGxvY2FsICYmICF0Y3BfaW5jb21pbmcpICYmICh4ICYgMSkpIHx8IFwKLSgoIWxvY2FsIHx8IHRj cF9pbmNvbWluZykgJiYgKHgmMikpKQotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotCi0vKiBUaGVz ZSBhcmUgZnJvbSB0aGUgYm9vayAqLwotCi0jZGVmaW5lIHRvY2hhcihjaCkgICgoKGNoKSArIFNQ ICkgJiAweEZGICkJLyogTnVtYmVyIHRvIGNoYXJhY3RlciAqLwotI2RlZmluZSB4dW5jaGFyKGNo KSAoKChjaCkgLSBTUCApICYgMHhGRiApCS8qIENoYXJhY3RlciB0byBudW1iZXIgKi8KLSNkZWZp bmUgY3RsKGNoKSAgICAgKCgoY2gpIF4gNjQgKSAmIDB4RkYgKQkvKiBDb250cm9sL1VuY29udHJv bCB0b2dnbGUgKi8KLSNkZWZpbmUgdW5wYXIoY2gpICAgKCgoY2gpICYgMTI3KSAmIDB4RkYgKQkv KiBDbGVhciBwYXJpdHkgYml0ICovCi0KLSNpZm5kZWYgTk9MT0NBTAkJCQkvKiBDT05ORUNUIHJl dHVybiBzdGF0dXMgY29kZXMgKi8KLQotLyogVXNlcnMgd2lsbCBzZWUgdGhlIG51bWJlcnMgc28g dGhleSBjYW4ndCBiZSBjaGFuZ2VkICovCi0vKiBOdW1iZXJzID49IDEwMCBpbmRpY2F0ZSBjb25u ZWN0aW9uIGxvc3MgKi8KLQotI2RlZmluZSBDU1hfTk9ORSAgICAgICAgMAkJLyogTm8gQ09OTkVD VCB5ZXQgc28gbm8gc3RhdHVzICovCi0jZGVmaW5lIENTWF9FU0NBUEUgICAgICAxCQkvKiBVc2Vy IEVzY2FwZWQgYmFjayAqLwotI2RlZmluZSBDU1hfVFJJR0dFUiAgICAgMgkJLyogVHJpZ2dlciB3 YXMgZW5jb3VudGVyZWQgKi8KLSNkZWZpbmUgQ1NYX0lLU0QgICAgICAgIDMJCS8qIElLU0QgYXV0 b3N5bmNocm9uaXphdGlvbiAqLwotI2RlZmluZSBDU1hfQVBDICAgICAgICAgNAkJLyogQXBwbGlj YXRpb24gUHJvZ3JhbSBDb21tYW5kICovCi0jZGVmaW5lIENTWF9JRExFICAgICAgICA1CQkvKiBJ ZGxlIGxpbWl0IGV4Y2VlZGVkICovCi0jZGVmaW5lIENTWF9UTl9FUlIgICAgICA2CQkvKiBUZWxu ZXQgRXJyb3IgKi8KLSNkZWZpbmUgQ1NYX01BQ1JPICAgICAgIDcgICAgICAgICAgICAgICAvKiBN YWNybyBib3VuZCB0byBrZXlzdHJva2UgKi8KLSNkZWZpbmUgQ1NYX1RJTUUgICAgICAgIDggICAg ICAgICAgICAgICAvKiBUaW1lIExpbWl0IGV4Y2VlZGVkICovCi0jZGVmaW5lIENTWF9JTlRFUk5B TCAgMTAwCQkvKiBJbnRlcm5hbCBlcnJvciAqLwotI2RlZmluZSBDU1hfQ0FSUklFUiAgIDEwMQkJ LyogQ2FycmllciByZXF1aXJlZCBidXQgbm90IGRldGVjdGVkICovCi0jZGVmaW5lIENTWF9JT0VS Uk9SICAgMTAyCQkvKiBJL08gZXJyb3Igb24gY29ubmVjdGlvbiAqLwotI2RlZmluZSBDU1hfSE9T VERJU0MgIDEwMwkJLyogRGlzY29ubmVjdGVkIGJ5IGhvc3QgKi8KLSNkZWZpbmUgQ1NYX1VTRVJE SVNDICAxMDQJCS8qIERpc2Nvbm5lY3RlZCBieSB1c2VyICovCi0jZGVmaW5lIENTWF9TRVNTSU9O ICAgMTA1CQkvKiBTZXNzaW9uIExpbWl0IGV4Y2VlZGVkICovCi0jZGVmaW5lIENTWF9UTl9QT0wg ICAgMTA2CQkvKiBSZWplY3RlZCBkdWUgdG8gVGVsbmV0IFBvbGljeSAqLwotI2RlZmluZSBDU1hf S0lMTF9TSUcgIDEwNyAgICAgICAgICAgICAgIC8qIFJlY2VpdmVkIEtpbGwgU2lnbmFsICovCi0K LS8qIFNFVCBURVJNSU5BTCBJRExFLUFDVElPTiB2YWx1ZXMgKi8KLQotI2RlZmluZSBJRExFX1JF VCAgMAkJCS8qIFJldHVybiB0byBwcm9tcHQgKi8KLSNkZWZpbmUgSURMRV9FWElUIDEJCQkvKiBF eGl0IGZyb20gS2VybWl0ICovCi0jZGVmaW5lIElETEVfSEFORyAyCQkJLyogSGFuZ3VwIHRoZSBj b25uZWN0aW9uICovCi0jZGVmaW5lIElETEVfT1VUICAzCQkJLyogT1VUUFVUIGEgc3RyaW5nICov Ci0jZGVmaW5lIElETEVfVE5PUCA0CQkJLyogVEVMTkVUIE5PUCAqLwotI2RlZmluZSBJRExFX1RB WVQgNQkJCS8qIFRFTE5FVCBBWVQgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLS8qIE1vZGVt IGFuZCBkaWFsaW5nIGRlZmluaXRpb25zICovCi0KLSNpZm5kZWYgTk9ESUFMCi0KLS8qIE1vZGVt IGNhcGFiaWxpdGllcyAoYml0IHZhbHVlcykgKi8KLSNkZWZpbmUgQ0tEX0FUICAgMQkJCS8qIEhh eWVzIEFUIGNvbW1hbmRzIGFuZCByZXNwb25zZXMgKi8KLSNkZWZpbmUgQ0tEX1YyNSAgMgkJCS8q IFYuMjViaXMgY29tbWFuZHMgYW5kIHJlc3BvbnNlcyAqLwotI2RlZmluZSBDS0RfU0IgICA0CQkJ LyogU3BlZWQgYnVmZmVyaW5nICovCi0jZGVmaW5lIENLRF9FQyAgIDgJCQkvKiBFcnJvciBjb3Jy ZWN0aW9uICovCi0jZGVmaW5lIENLRF9EQyAgMTYJCQkvKiBEYXRhIGNvbXByZXNzaW9uICovCi0j ZGVmaW5lIENLRF9IVyAgMzIJCQkvKiBIYXJkd2FyZSBmbG93IGNvbnRyb2wgKi8KLSNkZWZpbmUg Q0tEX1NXICA2NAkJCS8qIChMb2NhbCkgc29mdHdhcmUgZmxvdyBjb250cm9sICovCi0jZGVmaW5l IENLRF9LUyAxMjgJCQkvKiBLZXJtaXQgc3Bvb2ZpbmcgKi8KLSNkZWZpbmUgQ0tEX1RCIDI1NgkJ CS8qIE1hZGUgYnkgVGVsZWJpdCAqLwotI2RlZmluZSBDS0RfSUQgNTEyCQkJLyogSGFzIENhbGxl ciBJRCAqLwotCi0vKiBESUFMIGNvbW1hbmQgcmVzdWx0IGNvZGVzICovCi0jZGVmaW5lIERJQV9V TksgICAtMQkJCS8qIE5vIERJQUwgY29tbWFuZCBnaXZlbiB5ZXQgKi8KLSNkZWZpbmUgRElBX09L ICAgICAwCQkJLyogRElBTCBzdWNjZWVkZWQgKi8KLSNkZWZpbmUgRElBX05PTU8gICAxCQkJLyog TW9kZW0gdHlwZSBub3Qgc3BlY2lmaWVkICovCi0jZGVmaW5lIERJQV9OT0xJICAgMgkJCS8qIENv bW11bmljYXRpb24gbGluZSBub3Qgc3BlYydkICovCi0jZGVmaW5lIERJQV9PUEVOICAgMwkJCS8q IExpbmUgY2FuJ3QgYmUgb3BlbmVkICovCi0jZGVmaW5lIERJQV9OT1NQICAgNAkJCS8qIFNwZWVk IG5vdCBzcGVjaWZpZWQgKi8KLSNkZWZpbmUgRElBX0hBTkcgICA1CQkJLyogSGFuZ3VwIGZhaWx1 cmUgKi8KLSNkZWZpbmUgRElBX0lFICAgICA2CQkJLyogSW50ZXJuYWwgZXJyb3IgKG1hbGxvYywg ZXRjKSAqLwotI2RlZmluZSBESUFfSU8gICAgIDcJCQkvKiBJL08gZXJyb3IgKi8KLSNkZWZpbmUg RElBX1RJTU8gICA4CQkJLyogRGlhbCB0aW1lb3V0IGV4cGlyZWQgKi8KLSNkZWZpbmUgRElBX0lO VFIgICA5CQkJLyogRGlhbGluZyBpbnRlcnJ1cHRlZCBieSB1c2VyICovCi0jZGVmaW5lIERJQV9O UkRZICAxMAkJCS8qIE1vZGVtIG5vdCByZWFkeSAqLwotI2RlZmluZSBESUFfUEFSVCAgMTEJCQkv KiBQYXJ0aWFsIGRpYWwgY29tbWFuZCBPSyAqLwotI2RlZmluZSBESUFfRElSICAgMTIJCQkvKiBE aWFsaW5nIGRpcmVjdG9yeSBlcnJvciAqLwotI2RlZmluZSBESUFfSFVQICAgMTMJCQkvKiBNb2Rl bSB3YXMgaHVuZyB1cCBPSyAqLwotI2RlZmluZSBESUFfTlJTUCAgMTkJCQkvKiBObyByZXNwb25z ZSBmcm9tIG1vZGVtICovCi0jZGVmaW5lIERJQV9FUlIgICAyMAkJCS8qIE1vZGVtIGNvbW1hbmQg ZXJyb3IgKi8KLSNkZWZpbmUgRElBX05PSU4gIDIxCQkJLyogRmFpbHVyZSB0byBpbml0aWFsaXpl IG1vZGVtICovCi0jZGVmaW5lIERJQV9CVVNZICAyMgkJCS8qIFBob25lIGJ1c3kgKi8KLSNkZWZp bmUgRElBX05PQ0EgIDIzCQkJLyogTm8gY2FycmllciAqLwotI2RlZmluZSBESUFfTk9EVCAgMjQJ CQkvKiBObyBkaWFsdG9uZSAqLwotI2RlZmluZSBESUFfUklORyAgMjUJCQkvKiBSaW5nLCBpbmNv bWluZyBjYWxsICovCi0jZGVmaW5lIERJQV9OT0FOICAyNgkJCS8qIE5vIGFuc3dlciAqLwotI2Rl ZmluZSBESUFfRElTQyAgMjcJCQkvKiBEaXNjb25uZWN0ZWQgKi8KLSNkZWZpbmUgRElBX1ZPSUMg IDI4CQkJLyogQW5zd2VyZWQgYnkgdm9pY2UgKi8KLSNkZWZpbmUgRElBX05PQUMgIDI5CQkJLyog QWNjZXNzIGRlbmllZCwgZm9yYmlkZGVuIGNhbGwgKi8KLSNkZWZpbmUgRElBX0JMQ0sgIDMwCQkJ LyogQmxhY2tsaXN0ZWQgKi8KLSNkZWZpbmUgRElBX0RFTEEgIDMxCQkJLyogRGVsYXllZCAqLwot I2RlZmluZSBESUFfRkFYICAgMzIJCQkvKiBGYXggKi8KLSNkZWZpbmUgRElBX0RJR0kgIDMzICAg ICAgICAgICAgICAgICAgICAvKiBEaWdpdGFsIExpbmUgKi8KLSNkZWZpbmUgRElBX1RBUEkgIDM0 CQkJLyogVEFQSSBkaWFsaW5nIGZhaWx1cmUgKi8KLSNkZWZpbmUgRElBX1VFUlIgIDk4CQkJLyog VW5rbm93biBlcnJvciAqLwotI2RlZmluZSBESUFfVU5TUCAgOTkJCS8qIFVuc3BlY2lmaWVkIGZh aWx1cmUgZGV0ZWN0ZWQgYnkgbW9kZW0gKi8KLQotI2RlZmluZSBNRE1JTkYJc3RydWN0IG1kbWlu ZgotCi1NRE1JTkYgewkJCS8qIFN0cnVjdHVyZSBmb3IgbW9kZW0tc3BlY2lmaWMgaW5mb3JtYXRp b24gKi8KLQotICAgIGNoYXIgKiBuYW1lOwkJLyogRGVzY3JpcHRpdmUgbmFtZSAqLwotICAgIGNo YXIgKiBwdWxzZTsJCS8qIENvbW1hbmQgdG8gZm9yY2UgcHVsc2UgZGlhbGluZyAqLwotICAgIGNo YXIgKiB0b25lOwkJLyogQ29tbWFuZCB0byBmb3JjZSB0b25lIGRpYWxpbmcgKi8KLSAgICBpbnQg ICAgZGlhbF90aW1lOwkJLyogVGltZSBtb2RlbSBhbGxvd3MgZm9yIGRpYWxpbmcgKHNlY3MpICov Ci0gICAgY2hhciAqIHBhdXNlX2NoYXJzOwkJLyogQ2hhcmFjdGVyKHMpIHRvIHRlbGwgbW9kZW0g dG8gcGF1c2UgKi8KLSAgICBpbnQJICAgcGF1c2VfdGltZTsJCS8qIFRpbWUgYXNzb2NpYXRlZCB3 aXRoIHBhdXNlIGNoYXJzIChzZWNzKSAqLwotICAgIGNoYXIgKiB3YWtlX3N0cjsJCS8qIFN0cmlu ZyB0byB3YWtldXAgbW9kZW0gJiBwdXQgaW4gY21kIG1vZGUgKi8KLSAgICBpbnQJICAgd2FrZV9y YXRlOwkJLyogRGVsYXkgYmV0d2VlbiB3YWtlX3N0ciBjaGFyYWN0ZXJzIChtc2VjcykgKi8KLSAg ICBjaGFyICogd2FrZV9wcm9tcHQ7CQkvKiBTdHJpbmcgcHJvbXB0IGFmdGVyIHdha2Vfc3RyICov Ci0gICAgY2hhciAqIGRtb2RlX3N0cjsJCS8qIFN0cmluZyB0byBwdXQgbW9kZW0gaW4gZGlhbGlu ZyBtb2RlICovCi0gICAgY2hhciAqIGRtb2RlX3Byb21wdDsJLyogU3RyaW5nIHByb21wdCBmb3Ig ZGlhbGluZyBtb2RlICovCi0gICAgY2hhciAqIGRpYWxfc3RyOwkJLyogRGlhbGluZyBzdHJpbmcs IHdpdGggIiVzIiBmb3IgbnVtYmVyICovCi0gICAgaW50ICAgIGRpYWxfcmF0ZTsJCS8qIEludGVy Y2hhciBkZWxheSB0byBtb2RlbSAobXNlYykgKi8KLSAgICBpbnQgICAgZXNjX3RpbWU7CQkvKiBF c2NhcGUgc2VxdWVuY2UgZ3VhcmQgdGltZSAobXNlYykgKi8KLSAgICBpbnQgICAgZXNjX2NoYXI7 CQkvKiBFc2NhcGUgY2hhcmFjdGVyICovCi0gICAgY2hhciAqIGh1cF9zdHI7CQkvKiBIYW5ndXAg c3RyaW5nICovCi0gICAgY2hhciAqIGh3ZmNfc3RyOwkJLyogSGFyZHdhcmUgZmxvdyBjb250cm9s IHN0cmluZyAqLwotICAgIGNoYXIgKiBzd2ZjX3N0cjsJCS8qIFNvZnR3YXJlIGZsb3cgY29udHJv bCBzdHJpbmcgKi8KLSAgICBjaGFyICogbm9mY19zdHI7CQkvKiBObyBmbG93IGNvbnRyb2wgc3Ry aW5nICovCi0gICAgY2hhciAqIGVjX29uX3N0cjsJCS8qIEVycm9yIGNvcnJlY3Rpb24gb24gc3Ry aW5nICovCi0gICAgY2hhciAqIGVjX29mZl9zdHI7CQkvKiBFcnJvciBjb3JyZWN0aW9uIG9mZiBz dHJpbmcgKi8KLSAgICBjaGFyICogZGNfb25fc3RyOwkJLyogRGF0YSBjb21wcmVzc2lvbiBvbiBz dHJpbmcgKi8KLSAgICBjaGFyICogZGNfb2ZmX3N0cjsJCS8qIERhdGEgY29tcHJlc3Npb24gb2Zm IHN0cmluZyAqLwotICAgIGNoYXIgKiBhYV9vbl9zdHI7CQkvKiBBdXRvYW5zd2VyIG9uIHN0cmlu ZyAqLwotICAgIGNoYXIgKiBhYV9vZmZfc3RyOwkJLyogQXV0b2Fuc3dlciBvZmYgc3RyaW5nICov Ci0gICAgY2hhciAqIHNiX29uX3N0cjsJCS8qIFNwZWVkIGJ1ZmZlcmluZyBvbiBzdHJpbmcgKi8K LSAgICBjaGFyICogc2Jfb2ZmX3N0cjsJCS8qIFNwZWVkIGJ1ZmZlcmluZyBvZmYgc3RyaW5nICov Ci0gICAgY2hhciAqIHNwX29uX3N0cjsJCS8qIFNwZWFrZXIgb24gc3RyaW5nICovCi0gICAgY2hh ciAqIHNwX29mZl9zdHI7CQkvKiBTcGVha2VyIG9mZiBzdHJpbmcgKi8KLSAgICBjaGFyICogdm9s MV9zdHI7CQkvKiBWb2x1bWUgbG93IHN0cmluZyAqLwotICAgIGNoYXIgKiB2b2wyX3N0cjsJCS8q IFZvbHVtZSBtZWQgc3RyaW5nICovCi0gICAgY2hhciAqIHZvbDNfc3RyOwkJLyogVm9sdW1lIGhp Z2ggc3RyaW5nICovCi0gICAgY2hhciAqIGlnbm9yZWR0OwkJLyogSWdub3JlIGRpYWx0b25lIHN0 cmluZyAqLwotICAgIGNoYXIgKiBpbmkyOwkJLyogTGFzdC1taW51dGUgaW5pdCBzdHJpbmcgKi8K LSAgICBsb25nICAgbWF4X3NwZWVkOwkJLyogTWF4aW11bSBpbnRlcmZhY2Ugc3BlZWQgKi8KLSAg ICBsb25nICAgY2FwYXM7CQkvKiBDYXBhYmlsaXR5IGJpdHMgKi8KLSAgICAvKiBmdW5jdGlvbiB0 byByZWFkIG1vZGVtJ3MgcmVzcG9uc2Ugc3RyaW5nIHRvIGEgbm9uLWRpYWxpbmcgY29tbWFuZCAq LwotICAgIF9QUk9UT1RZUCggaW50ICgqb2tfZm4pLCAoaW50LGludCkgKTsKLX07Ci0jZW5kaWYg LyogTk9ESUFMICovCi0KLS8qIFN5bWJvbHMgZm9yIEZpbGUgQXR0cmlidXRlcyAqLwotCi0jZGVm aW5lIEFUX1hBTEwgIDAJCQkvKiBBbGwgb2YgdGhlbSAqLwotI2RlZmluZSBBVF9BTExZICAxCQkJ LyogQWxsIG9mIHRoZW0gb24gKFllcykgKi8KLSNkZWZpbmUgQVRfQUxMTiAgMgkJCS8qIEFsbCBv ZiB0aGVtIG9mZiAobm8pICovCi0jZGVmaW5lIEFUX0xFTksgIDMJCQkvKiBMZW5ndGggaW4gSyAq LwotI2RlZmluZSBBVF9GVFlQICA0CQkJLyogRmlsZSBUeXBlICovCi0jZGVmaW5lIEFUX0RBVEUg IDUJCQkvKiBDcmVhdGlvbiBkYXRlICovCi0jZGVmaW5lIEFUX0NSRUEgIDYJCQkvKiBDcmVhdG9y ICovCi0jZGVmaW5lIEFUX0FDQ1QgIDcJCQkvKiBBY2NvdW50ICovCi0jZGVmaW5lIEFUX0FSRUEg IDgJCQkvKiBBcmVhICovCi0jZGVmaW5lIEFUX1BTV0QgIDkJCQkvKiBQYXNzd29yZCBmb3IgYXJl YSAqLwotI2RlZmluZSBBVF9CTEtTIDEwCQkJLyogQmxvY2tzaXplICovCi0jZGVmaW5lIEFUX0FD Q0UgMTEJCQkvKiBBY2Nlc3MgKi8KLSNkZWZpbmUgQVRfRU5DTyAxMgkJCS8qIEVuY29kaW5nICov Ci0jZGVmaW5lIEFUX0RJU1AgMTMJCQkvKiBEaXNwb3NpdGlvbiAqLwotI2RlZmluZSBBVF9MUFJP IDE0CQkJLyogTG9jYWwgUHJvdGVjdGlvbiAqLwotI2RlZmluZSBBVF9HUFJPIDE1CQkJLyogR2Vu ZXJpYyBQcm90ZWN0aW9uICovCi0jZGVmaW5lIEFUX1NZU0kgMTYJCQkvKiBTeXN0ZW0gSUQgKi8K LSNkZWZpbmUgQVRfUkVDRiAxNwkJCS8qIFJlY29yZCBGb3JtYXQgKi8KLSNkZWZpbmUgQVRfU1lT UCAxOAkJCS8qIFN5c3RlbS1EZXBlbmRlbnQgUGFyYW1ldGVycyAqLwotI2RlZmluZSBBVF9MRU5C IDE5CQkJLyogTGVuZ3RoIGluIEJ5dGVzICovCi0jZGVmaW5lIEFUX0VPQSAgMjAJCQkvKiBFbmQg b2YgQXR0cmlidXRlcyAqLwotCi0vKiBLZXJtaXQgcGFja2V0IGluZm9ybWF0aW9uIHN0cnVjdHVy ZSAqLwotCi1zdHJ1Y3QgcGt0aW5mbyB7CQkJLyogUGFja2V0IGluZm9ybWF0aW9uIHN0cnVjdHVy ZSAqLwotICAgIENIQVIgKmJmX2FkcjsJCQkvKiAgYnVmZmVyIGFkZHJlc3MgKi8KLSAgICBpbnQg ICBiZl9sZW47CQkJLyogIGJ1ZmZlciBsZW5ndGggKi8KLSAgICBDSEFSICpwa19hZHI7CQkJLyog UGFja2V0IGFkZHJlc3Mgd2l0aGluIGJ1ZmZlciAqLwotICAgIGludCAgIHBrX2xlbjsJCQkvKiAg bGVuZ3RoIG9mIGRhdGEgd2l0aGluIGJ1ZmZlciAqLwotICAgIGludCAgIHBrX3R5cDsJCQkvKiAg cGFja2V0IHR5cGUgKi8KLSAgICBpbnQgICBwa19zZXE7CQkJLyogIHBhY2tldCBzZXF1ZW5jZSBu dW1iZXIgKi8KLSAgICBpbnQgICBwa19ydHI7CQkJLyogIHJldHJhbnNtaXNzaW9uIGNvdW50ICov Ci19OwotCi0vKiBTZW5kIE1vZGVzIChpbmRpY2F0aW5nIHdoaWNoIHR5cGUgb2YgU0VORCBjb21t YW5kIHdhcyB1c2VkKSAqLwotCi0jZGVmaW5lIFNNX1NFTkQgICAgIDAKLSNkZWZpbmUgU01fTVNF TkQgICAgMQotI2RlZmluZSBTTV9SRVNFTkQgICAyCi0jZGVmaW5lIFNNX1BTRU5EICAgIDMKLSNk ZWZpbmUgU01fTUFJTCAgICAgNAotI2RlZmluZSBTTV9QUklOVCAgICA1Ci0KLSNkZWZpbmUgT1BU QlVGTEVOIDI1NgotCi0vKiBGaWxlLXJlbGF0ZWQgc3ltYm9scyBhbmQgc3RydWN0dXJlcyAqLwot LyogVXNlZCBieSBTRVQgRklMRSBjb21tYW5kIGJ1dCBhbHNvIGJ5IHByb3RvY29sIGFuZCBpL28g bW9kdWxlcyAqLwotCi0jZGVmaW5lIFhNT0RFX0EgMAkvKiBUcmFuc2ZlciBtb2RlIEF1dG9tYXRp YyAqLwotI2RlZmluZSBYTU9ERV9NIDEJLyogVHJhbnNmZXIgbW9kZSBNYW51YWwgICAgKi8KLQot I2RlZmluZSAgIFhZRklMTiAwICAJLyogIE5hbWluZyAgKi8KLSNkZWZpbmUgICAgIFhZRk5fTCAw CS8qICAgIExpdGVyYWwgKi8KLSNkZWZpbmUgICAgIFhZRk5fQyAxCS8qICAgIENvbnZlcnRlZCAq LwotI2RlZmluZSAgIFhZRklMVCAxICAJLyogIFR5cGUgICAgKi8KLSNkZWZpbmUgICAgIFhZRlRf VCAwICAgIC8qICAgIFRleHQgICovCi0jZGVmaW5lICAgICBYWUZUX0IgMSAgICAvKiAgICBCaW5h cnkgKi8KLSNkZWZpbmUgICAgIFhZRlRfSSAyICAgIC8qICAgIEltYWdlIG9yIEJsb2NrIChWTVMp ICovCi0jZGVmaW5lICAgICBYWUZUX0wgMwkvKiAgICBMYWJlbGVkICh0YWdnZWQgYmluYXJ5KSAo Vk1TIG9yIE9TLzIpICovCi0jZGVmaW5lICAgICBYWUZUX1UgNCAgICAvKiAgICBCaW5hcnkgVW5k ZWZpbmVkIChWTVMpICovCi0jZGVmaW5lICAgICBYWUZUX00gNQkvKiAgICBNYWNCaW5hcnkgKE1h Y2ludG9zaCkgKi8KLSNkZWZpbmUgICAgIFhZRlRfWCA2CS8qICAgIFRFTkVYIChGVFAgVFlQRSBM IDgpICovCi0jZGVmaW5lICAgICBYWUZUX0QgOTkgICAvKiAgICBEZWJ1ZyAoZm9yIHNlc3Npb24g bG9ncykgKi8KLSNkZWZpbmUgICBYWUZJTFcgMiAgICAgIC8qICBXYXJuaW5nICovCi0jZGVmaW5l ICAgWFlGSUxEIDMgICAgICAvKiAgRGlzcGxheSAqLwotI2RlZmluZSAgIFhZRklMQyA0ICAgICAg LyogIENoYXJhY3RlciBzZXQgKi8KLSNkZWZpbmUgICBYWUZJTEYgNSAgICAgIC8qICBSZWNvcmQg Rm9ybWF0ICovCi0jZGVmaW5lICAgICBYWUZGX1MgIDAgICAvKiAgICBTdHJlYW0gKi8KLSNkZWZp bmUgICAgIFhZRkZfViAgMSAgIC8qICAgIFZhcmlhYmxlICovCi0jZGVmaW5lICAgICBYWUZGX1ZC IDIgICAvKiAgICBWYXJpYWJsZSB3aXRoIFJDVydzICovCi0jZGVmaW5lICAgICBYWUZGX0YgIDMg ICAvKiAgICBGaXhlZCBsZW5ndGggKi8KLSNkZWZpbmUgICAgIFhZRkZfVSAgNCAgIC8qICAgIFVu ZGVmaW5lZCAqLwotI2RlZmluZSAgIFhZRklMUiA2ICAgICAgLyogIFJlY29yZCBsZW5ndGggKi8K LSNkZWZpbmUgICBYWUZJTE8gNyAgICAgIC8qICBPcmdhbml6YXRpb24gKi8KLSNkZWZpbmUgICAg IFhZRk9fUyAwICAgIC8qICAgIFNlcXVlbnRpYWwgKi8KLSNkZWZpbmUgICAgIFhZRk9fSSAxICAg IC8qICAgIEluZGV4ZWQgKi8KLSNkZWZpbmUgICAgIFhZRk9fUiAyICAgIC8qICAgIFJlbGF0aXZl ICovCi0jZGVmaW5lICAgWFlGSUxQIDggICAgICAvKiAgUHJpbnRlciBjYXJyaWFnZSBjb250cm9s ICovCi0jZGVmaW5lICAgICBYWUZQX04gMCAgICAvKiAgICBOZXdsaW5lIChpbWJlZGRlZCBjb250 cm9sIGNoYXJhY3RlcnMpICovCi0jZGVmaW5lICAgICBYWUZQX0YgMSAgICAvKiAgICBGT1JUUkFO IChzcGFjZSwgMSwgKywgZXRjLCBpbiBjb2x1bW4gMSAqLwotI2RlZmluZSAgICAgWFlGUF9QIDIg ICAgLyogICAgU3BlY2lhbCBwcmludGVyIGNhcnJpYWdlIGNvbnRyb2xzICovCi0jZGVmaW5lICAg ICBYWUZQX1ggNCAgICAvKiAgICBOb25lICovCi0jZGVmaW5lICAgWFlGSUxYIDkgICAgICAvKiAg Q29sbGlzaW9uIEFjdGlvbiAqLwotI2RlZmluZSAgICAgWFlGWF9BIDMgICAgLyogICAgQXBwZW5k ICovCi0jZGVmaW5lICAgICBYWUZYX1EgNSAgICAvKiAgICBBc2sgKi8KLSNkZWZpbmUgICAgIFhZ RlhfQiAyICAgIC8qICAgIEJhY2t1cCAqLwotI2RlZmluZSAgICAgWFlGWF9EIDQgICAgLyogICAg RGlzY2FyZCAqLwotI2RlZmluZSAgICAgWFlGWF9SIDAgICAgLyogICAgUmVuYW1lICovCi0jZGVm aW5lICAgICBYWUZYX1ggMSAgICAvKiAgICBSZXBsYWNlICovCi0jZGVmaW5lICAgICBYWUZYX1Ug NiAgICAvKiAgICBVcGRhdGUgKi8KLSNkZWZpbmUgICAgIFhZRlhfTSA3ICAgIC8qICAgIE1vZHRp bWVzIGRpZmZlciAqLwotI2RlZmluZSAgIFhZRklMQiAxMCAgICAgLyogIEJsb2Nrc2l6ZSAqLwot I2RlZmluZSAgIFhZRklMWiAxMSAgICAgLyogIERpc3Bvc2l0aW9uICovCi0jZGVmaW5lICAgICBY WUZaX04gMCAgICAvKiAgICBOZXcsIENyZWF0ZSAqLwotI2RlZmluZSAgICAgWFlGWl9BIDEgICAg LyogICAgTmV3LCBhcHBlbmQgaWYgZmlsZSBleGlzdHMsIGVsc2UgY3JlYXRlICovCi0jZGVmaW5l ICAgICBYWUZaX08gMiAgICAvKiAgICBPbGQsIGZpbGUgbXVzdCBleGlzdCAqLwotI2RlZmluZSAg IFhZRklMUyAxMiAgICAgLyogIEZpbGUgQnl0ZSBTaXplICovCi0jZGVmaW5lICAgWFlGSUxMIDEz ICAgICAvKiAgRmlsZSBMYWJlbCAoVk1TKSAqLwotI2RlZmluZSAgIFhZRklMSSAxNCAgICAgLyog IEZpbGUgSW5jb21wbGV0ZSAqLwotI2RlZmluZSAgIFhZRklMUSAxNSAgICAgLyogIEZpbGUgcGF0 aCBhY3Rpb24gKHN0cmlwIG9yIG5vdCkgKi8KLSNkZWZpbmUgICBYWUZJTEcgMTYgICAgIC8qICBG aWxlIGRvd25sb2FkIGRpcmVjdG9yeSAqLwotI2RlZmluZSAgIFhZRklMQSAxNyAgICAgLyogIExp bmUgdGVybWluYXRvciBmb3IgbG9jYWwgdGV4dCBmaWxlcyAqLwotI2RlZmluZSAgICAgWFlGQV9M IDAxMiAgLyogICAgTEYgKGFzIGluIFVOSVgpICovCi0jZGVmaW5lICAgICBYWUZBX0MgMDE1ICAv KiAgICBDUiAoYXMgaW4gT1MtOSBvciBNYWMgT1MpICovCi0jZGVmaW5lICAgICBYWUZBXzIgMDAw ICAvKiAgQ1JMRiAtLSBOb3RlOiB0aGlzIG11c3QgYmUgZGVmaW5lZCBhcyAwICovCi0jZGVmaW5l ICAgWFlGSUxZIDE4ICAgICAvKiAgRGVzdGluYXRpb24gKi8KLSNkZWZpbmUgICBYWUZJTFYgMTkJ LyogIEVPRiBEZXRlY3Rpb24gTWV0aG9kICovCi0jZGVmaW5lICAgICBYWUVPRl9MIDAgICAvKiAg ICBGaWxlIGxlbmd0aCAqLwotI2RlZmluZSAgICAgWFlFT0ZfWiAxICAgLyogICAgQ3RybC1aIGlu IGZpbGUgKi8KLSNkZWZpbmUgICBYWUZJTEggICAyMCAgIC8qICBPVVRQVVQgcGFyYW1ldGVycyAt IGJ1ZmZlcmVkLCBibG9ja2luZywgZXRjICovCi0jZGVmaW5lICAgWFlGSUJQICAgMjEJLyogIEJJ TkFSWS1QQVRURVJOICovCi0jZGVmaW5lICAgWFlGSVRQICAgMjIgICAvKiAgVEVYVC1QQVRURVJO ICovCi0jZGVmaW5lICAgWFlGSVBBICAgMjMgICAvKiAgUEFUVEVSTlMgT04vT0ZGICovCi0jZGVm aW5lICAgWFlGSUxVICAgMjQgICAvKiAgVUNTIC4uLiAqLwotI2RlZmluZSAgIFhZRl9QUk0gIDI1 ICAgLyogIFBFUk1JU1NJT05TLCBQUk9URUNUSU9OICovCi0jZGVmaW5lICAgWFlGX0lOU1AgMjYg ICAvKiAgSU5TUEVDVElPTiAoU0NBTikgKi8KLSNkZWZpbmUgICBYWUZfREZMVCAyNyAgIC8qICBE RUZBVUxUIChjaGFyYWN0ZXIgc2V0cykgKi8KLSNkZWZpbmUgICBYWUZfU1NQQSAyOCAgIC8qICBT VFJJTkdTUEFDRSAqLwotI2RlZmluZSAgIFhZRl9MU0laIDI5ICAgLyogIExJU1RTSVpFICovCi0K LS8qIEZpbGUgVHlwZSAocmV0dXJuIGNvZGUpIGRlZmluaXRpb25zIGFuZCBjb3JyZXNwb25kaW5n IG5hbWUgc3RyaW5ncyAqLwotCi0jZGVmaW5lIEZUXzdCSVQgMAkJCS8qIDctYml0IHRleHQgKi8K LSNkZWZpbmUgRlRfOEJJVCAxCQkJLyogOC1iaXQgdGV4dCAqLwotI2RlZmluZSBGVF9VVEY4IDIJ CQkvKiBVVEY4ICovCi0jZGVmaW5lIEZUX1VDUzIgMwkJCS8qIFVDUzIgKi8KLSNkZWZpbmUgRlRf VEVYVCA0CQkJLyogVW5rbm93biB0ZXh0ICovCi0jZGVmaW5lIEZUX0JJTiAgNQkJCS8qIEJpbmFy eSAqLwotI2RlZmluZSBTQ0FORklMRUJVRiA0OTE1MgkJLyogU2l6ZSBvZiBmaWxlIHNjYW4gKDQ4 SykgKi8KLQotLyogQ29ubmVjdGlvbiBjbG9zZWQgcmVhc29ucyAqLwotCi0jZGVmaW5lIFdDX1JF TU8gICAwCQkJLyogQ2xvc2VkIGJ5IHJlbW90ZSAqLwotI2RlZmluZSBXQ19DTE9TICAgMQkJCS8q IENsb3NlZCBmcm9tIG91ciBlbmQgKi8KLSNkZWZpbmUgV0NfVEVMT1BUIDIJCQkvKiBUZWxuZXQg bmVnb3RpYXRpb24gZmFpbHVyZSAqLwotCi0jaWZkZWYgQklHQlVGT0sKLSNkZWZpbmUgRlRQQVRU RVJOUyAyNTYKLSNlbHNlCi0jZGVmaW5lIEZUUEFUVEVSTlMgNjQKLSNlbmRpZiAvKiBCSUdCVUZP SyAqLwotCi0jZGVmaW5lIFNZU19VTksgICAgMAkJCS8qIFNlbGVjdGVkIHNlcnZlciBzeXN0ZW0g dHlwZXMgKi8KLSNkZWZpbmUgU1lTX1VOSVggICAxCi0jZGVmaW5lIFNZU19XSU4zMiAgMgotI2Rl ZmluZSBTWVNfVk1TICAgIDMKLSNkZWZpbmUgU1lTX09TMiAgICA0Ci0jZGVmaW5lIFNZU19ET1Mg ICAgNQotI2RlZmluZSBTWVNfVE9QUzEwIDYKLSNkZWZpbmUgU1lTX1RPUFMyMCA3Ci0jZGVmaW5l IFNZU19WT1MgICAgOAotI2RlZmluZSBTWVNfREcgICAgIDkKLSNkZWZpbmUgU1lTX09TSyAgICAx MAotI2RlZmluZSBTWVNfTUFYICAgIDExCi0KLSNpZmRlZiBDS19TTUFMTAotI2RlZmluZSBQV0JV RkwgNjMKLSNlbHNlCi0jZGVmaW5lIFBXQlVGTCAyNTUKLSNlbmRpZiAvKiBDS19TTUFMTCAqLwot Ci0jaWZkZWYgT1MyCi1zdHJ1Y3QgdHRfaW5mb19yZWMgewkJCS8qIFRlcm1pbmFsIGVtdWxhdGlv biBpbmZvICovCi0gICAgY2hhciAgKnhfbmFtZTsKLSAgICBjaGFyICp4X2FsaWFzZXNbNF07Ci0g ICAgY2hhciAgKnhfaWQ7Ci19OwotI2VuZGlmIC8qIE9TMiAqLwotCi0vKiBCRUVQIFRZUEVTICov Ci0jZGVmaW5lIEJQX0JFTCAgMAkJCS8qIFRlcm1pbmFsIGJlbGwgKi8KLSNkZWZpbmUgQlBfTk9U RSAxCQkJLyogSW5mbyAqLwotI2RlZmluZSBCUF9XQVJOIDIJCQkvKiBXYXJuaW5nICovCi0jZGVm aW5lIEJQX0ZBSUwgMwkJCS8qIEVycm9yICovCi0KLSNpZm5kZWYgTk9JS1NECi0jaWZkZWYgSUtT REIJCQkJLyogSUtTRCBEYXRhYmFzZSBkZWZpbml0aW9ucyAqLwotCi0vKiBGaWVsZCB2YWx1ZXMg Ki8KLQotI2RlZmluZSBEQkZfSU5VU0UgICAgMQkJCS8qIEZsYWcgYml0cy4uLiBJbiB1c2UgKi8K LSNkZWZpbmUgREJGX1VTRVIgICAgIDIJCQkvKiBSZWFsIHVzZXIgKHZlcnN1cyBhbm9ueW1vdXMp ICovCi0jZGVmaW5lIERCRl9MT0dHRUQgICA0CQkJLyogTG9nZ2VkIGluICh2ZXJzdXMgbm90KSAq LwotCi0vKiBEYXRhIERlZmluaXRpb25zLi4uICovCi0KLS8qIE51bWVyaWMgZmllbGRzLCBoZXgs IHJpZ2h0IGp1c3RpZmllZCwgMC1maWxsZWQgb24gbGVmdCAqLwotCi0jZGVmaW5lIGRiX0ZMQUdT ICAgICAwCQkJLyogRmllbGQgMDogRmxhZ3MgKi8KLSNkZWZpbmUgREJfRkxBR1MgICAgIDAJCQkv KiBPZmZzZXQ6IDAgKi8KLSNkZWZpbmUgZEJfRkxBR1MgICAgIDQJCQkvKiBMZW5ndGg6IDQgKGhl eCBkaWdpdHMpICovCi0KLSNkZWZpbmUgZGJfQVRZUEUgICAgIDEJCQkvKiBGaWVsZCAxOiBBdXRo ZW50aWNhdGlvbiB0eXBlICovCi0jZGVmaW5lIERCX0FUWVBFICAgICA0CQkJLyogNCBoZXggZGln aXRzICovCi0jZGVmaW5lIGRCX0FUWVBFICAgICA0Ci0KLSNkZWZpbmUgZGJfQU1PREUgICAgIDIJ CQkvKiBGaWVsZCAyOiBBdXRoZW50aWNhdGlvbiBtb2RlICovCi0jZGVmaW5lIERCX0FNT0RFICAg ICA4CQkJLyogNCBoZXggZGlnaXRzICovCi0jZGVmaW5lIGRCX0FNT0RFICAgICA0Ci0KLSNkZWZp bmUgZGJfU1RBVEUgICAgIDMJCQkvKiBGaWVsZCAzOiBTdGF0ZSAtIDQgaGV4IGRpZ2l0cyovCi0j ZGVmaW5lIERCX1NUQVRFICAgIDEyCQkJLyogNCBoZXggZGlnaXRzICovCi0jZGVmaW5lIGRCX1NU QVRFICAgICA0Ci0KLSNkZWZpbmUgZGJfTVlQSUQgICAgIDQJCQkvKiBGaWVsZCA0OiBNeSBQSUQg Ki8KLSNkZWZpbmUgREJfTVlQSUQgICAgMTYJCQkvKiAxNiBoZXggZGlnaXRzIGxlZnQgcGFkZGVk IHdpdGggMCAqLwotI2RlZmluZSBkQl9NWVBJRCAgICAxNgotCi0jZGVmaW5lIGRiX1NBRERSICAg ICA1CQkJLyogRmllbGQgNTogU2VydmVyIChteSkgSVAgYWRkcmVzcyAqLwotI2RlZmluZSBEQl9T QUREUiAgICAzMgkJCS8qIDE2IGhleCBkaWdpdHMgbGVmdCBwYWRkZWQgd2l0aCAwICovCi0jZGVm aW5lIGRCX1NBRERSICAgIDE2Ci0KLSNkZWZpbmUgZGJfQ0FERFIgICAgIDYJCQkvKiBGaWVsZCA2 OiBDbGllbnQgSVAgYWRkcmVzcyAqLwotI2RlZmluZSBEQl9DQUREUiAgICA0OAkJCS8qIDE2IGhl eCBkaWdpdHMgbGVmdCBwYWRkZWQgd2l0aCAwICovCi0jZGVmaW5lIGRCX0NBRERSICAgIDE2Ci0K LS8qIERhdGUtdGltZSBmaWVsZHMgKDE3IHJpZ2h0LWFkanVzdGVkIGluIDE4IGZvciBZMTBLIHJl YWRpbmVzcykgKi8KLQotI2RlZmluZSBkYl9TVEFSVCAgICAgNwkJCS8qIEZpZWxkIDc6IFNlc3Np b24gc3RhcnQgZGF0ZS10aW1lICovCi0jZGVmaW5lIERCX1NUQVJUICAgIDY1CQkJLyogNjQgaXMg bGVhZGluZyBzcGFjZSBmb3IgWTEwSyAqLwotI2RlZmluZSBkQl9TVEFSVCAgICAxNwotCi0jZGVm aW5lIGRiX0xBU1RVICAgICA4CQkJLyogRmllbGQgODogTGFzdCBsYXN0dSBkYXRlLXRpbWUgKi8K LSNkZWZpbmUgREJfTEFTVFUgICAgODMJCQkvKiA4MiBpcyBsZWFkaW5nIHNwYWNlIGZvciBZMTBL ICovCi0jZGVmaW5lIGRCX0xBU1RVICAgIDE3Ci0KLSNkZWZpbmUgZGJfVUxFTiAgICAgIDkJCQkv KiBGaWVsZCA5OiBMZW5ndGggb2YgVXNlcm5hbWUgKi8KLSNkZWZpbmUgREJfVUxFTiAgICAxMDAJ CQkvKiA0IGhleCBkaWdpdHMgKi8KLSNkZWZpbmUgZEJfVUxFTiAgICAgIDQKLQotI2RlZmluZSBk Yl9ETEVOICAgICAxMAkJCS8qIEZpZWxkIDEwOiBMZW5ndGggb2YgRGlyZWN0b3J5ICovCi0jZGVm aW5lIERCX0RMRU4gICAgMTA0CQkJLyogNCBoZXggZGlnaXRzICovCi0jZGVmaW5lIGRCX0RMRU4g ICAgICA0Ci0KLSNkZWZpbmUgZGJfSUxFTiAgICAgMTEJCQkvKiBGaWVsZCAxMTogTGVuZ3RoIG9m IEluZm8gKi8KLSNkZWZpbmUgREJfSUxFTiAgICAxMDgJCQkvKiA0IGhleCBkaWdpdHMgKi8KLSNk ZWZpbmUgZEJfSUxFTiAgICAgIDQKLQotI2RlZmluZSBkYl9QQUQxICAgICAxMgkJCS8qIEZpZWxk IDEyOiAoUmVzZXJ2ZWQpICovCi0jZGVmaW5lIERCX1BBRDEgICAgMTEyCQkJLyogZmlsbGVkIHdp dGggc3BhY2VzICovCi0jZGVmaW5lIGRCX1BBRDEgICAgOTEyCi0KLS8qIFN0cmluZyBmaWVsZHMs IGFsbCByaWdodC1wYWRkZWQgd2l0aCBibGFua3MgKi8KLQotI2RlZmluZSBkYl9VU0VSICAgICAx MwkJCS8qIEZpZWxkIDEzOiBVc2VybmFtZSAqLwotI2RlZmluZSBEQl9VU0VSICAgMTAyNAkJCS8q IHJpZ2h0LXBhZGRlZCB3aXRoIHNwYWNlcyAqLwotI2RlZmluZSBkQl9VU0VSICAgMTAyNAotCi0j ZGVmaW5lIGRiX0RJUiAgICAgIDE0CQkJLyogRmllbGQgMTQ6IEN1cnJlbnQgZGlyZWN0b3J5ICov Ci0jZGVmaW5lIERCX0RJUiAgICAyMDQ4CQkJLyogcmlnaHQtcGFkZGVkIHdpdGggc3BhY2VzICov Ci0jZGVmaW5lIGRCX0RJUiAgICAxMDI0Ci0KLSNkZWZpbmUgZGJfSU5GTyAgICAgMTUJCQkvKiBG aWVsZCAxNTogU3RhdGUtc3BlY2lmaWMgaW5mbyAqLwotI2RlZmluZSBEQl9JTkZPICAgMzA3MgkJ CS8qIHJpZ2h0LXBhZGRlZCB3aXRoIHNwYWNlcyAqLwotI2RlZmluZSBkQl9JTkZPICAgMTAyNAot Ci0jZGVmaW5lIERCX1JFQ0wgICA0MDk2CQkJLyogRGF0YWJhc2UgcmVjb3JkIGxlbmd0aCAqLwot Ci0vKiBPZmZzZXQsIGxlbmd0aCwgYW5kIHR5cGUgb2YgZWFjaCBmaWVsZCB0aHJ1IGl0cyBkYl9Y WFggc3ltYm9sICovCi0KLSNkZWZpbmUgREJUX0hFWCAxCQkJLyogSGV4YWRlY2ltYWwgbnVtYmVy ICovCi0jZGVmaW5lIERCVF9TVFIgMgkJCS8qIFN0cmluZyAqLwotI2RlZmluZSBEQlRfREFUIDMJ CQkvKiBEYXRlLVRpbWUgeXl5eW1tZGQgaGg6bW06c3MgKi8KLSNkZWZpbmUgREJUX1VORCA5CQkJ LyogVW5kZWZpbmVkIGFuZCBibGFuayAqLwotCi1zdHJ1Y3QgaWtzZGJmbGQgewotICAgIGludCBv ZmY7CQkJCS8qIFBvc2l0aW9uIChvZmZzZXQpICovCi0gICAgaW50IGxlbjsJCQkJLyogTGVuZ3Ro IChieXRlcykgKi8KLSAgICBpbnQgdHlwOwkJCQkvKiBEYXRhIHR5cGUgKi8KLX07Ci1fUFJPVE9U WVAoaW50IGRiaW5pdCwgKHZvaWQpKTsKLV9QUk9UT1RZUChpbnQgaW5pdHNsb3QsIChpbnQpKTsK LV9QUk9UT1RZUChpbnQgZ2V0c2xvdCwgKHZvaWQpKTsKLV9QUk9UT1RZUChpbnQgZnJlZXNsb3Qs IChpbnQpKTsKLV9QUk9UT1RZUChpbnQgdXBkc2xvdCwgKGludCkpOwotX1BST1RPVFlQKGludCBz bG90c3RhdGUsIChpbnQsIGNoYXIgKiwgY2hhciAqLCBjaGFyICopKTsKLV9QUk9UT1RZUChpbnQg c2xvdGRpciwgKGNoYXIgKiwgY2hhciAqKSk7Ci0jZW5kaWYgLyogSUtTREIgKi8KLSNlbmRpZiAv KiBOT0lLU0QgKi8KLQotLyogQU5TSSBmb3J3YXJkIGRlY2xhcmF0aW9ucyBmb3IgcHJvdG9jb2wt cmVsYXRlZCBmdW5jdGlvbnMuICovCi0KLV9QUk9UT1RZUCggaW50IGlucHV0LCAodm9pZCkgKTsK LV9QUk9UT1RZUCggaW50IGluaWJ1ZnMsIChpbnQsIGludCkgKTsKLV9QUk9UT1RZUCggaW50IG1h a2VidWYsIChpbnQsIGludCwgQ0hBUiBbXSwgc3RydWN0IHBrdGluZm8gKikgKTsKLV9QUk9UT1RZ UCggaW50IG1rc2J1ZiwgKGludCkgKTsKLV9QUk9UT1RZUCggaW50IG1rcmJ1ZiwgKGludCkgKTsK LV9QUk9UT1RZUCggaW50IHNwYWNrLCAoY2hhciwgaW50LCBpbnQsIENIQVIgKikgKTsKLV9QUk9U T1RZUCggVk9JRCBwcm90bywgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBycGFjaywgKHZvaWQp ICk7Ci1fUFJPVE9UWVAoIGludCBhY2ssICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgbmFjaywg KGludCkgKTsKLV9QUk9UT1RZUCggaW50IGFja24sIChpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBh Y2sxLCAoQ0hBUiAqKSApOwotX1BST1RPVFlQKCBpbnQgYWNrbnMsIChpbnQsIENIQVIgKikgKTsK LSNpZmRlZiBTVFJFQU1JTkcKLV9QUk9UT1RZUCggaW50IGZhc3RhY2ssICh2b2lkKSApOwotI2Vu ZGlmIC8qIFNUUkVBTUlORyAqLwotX1BST1RPVFlQKCBpbnQgcmVzZW5kLCAoaW50KSApOwotX1BS T1RPVFlQKCBpbnQgZXJycGt0LCAoQ0hBUiAqKSApOwotX1BST1RPVFlQKCBWT0lEIGxvZ3BrdCwg KGNoYXIsIGludCwgQ0hBUiAqLCBpbnQpICk7Ci1fUFJPVE9UWVAoIENIQVIgZG9wYXIsIChDSEFS KSApOwotX1BST1RPVFlQKCBpbnQgY2hrMSwgKENIQVIgKiwgaW50KSApOwotX1BST1RPVFlQKCB1 bnNpZ25lZCBpbnQgY2hrMiwgKENIQVIgKiwgaW50KSApOwotX1BST1RPVFlQKCB1bnNpZ25lZCBp bnQgY2hrMywgKENIQVIgKiwgaW50KSApOwotX1BST1RPVFlQKCBpbnQgc2lwa3QsIChjaGFyKSAp OwotX1BST1RPVFlQKCBpbnQgc29wa3QsICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgc2luaXQs ICh2b2lkKSApOwotX1BST1RPVFlQKCBWT0lEIHJpbml0LCAoQ0hBUiAqKSApOwotX1BST1RPVFlQ KCBpbnQgc3BhciwgKENIQVIgKikgKTsKLV9QUk9UT1RZUCggaW50IHJjdmZpbCwgKGNoYXIgKikg KTsKLV9QUk9UT1RZUCggQ0hBUiAqIHJwYXIsICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgZ25m aWxlLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IGdldHNidWYsIChpbnQpICk7Ci1fUFJPVE9U WVAoIGludCBnZXRyYnVmLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IGZyZWVzYnVmLCAoaW50 KSApOwotX1BST1RPVFlQKCBpbnQgZnJlZXJidWYsIChpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBk dW1wc2J1ZiwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBkdW1wcmJ1ZiwgKHZvaWQpICk7Ci1f UFJPVE9UWVAoIFZPSUQgZnJlZXJwa3QsIChpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBjaGt3aW4s IChpbnQsIGludCwgaW50KSApOwotX1BST1RPVFlQKCBpbnQgcnNhdHRyLCAoQ0hBUiAqKSApOwot X1BST1RPVFlQKCBjaGFyICpnZXRyZWFzb24sIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIGludCBz Y21kLCAoY2hhciwgQ0hBUiAqKSApOwotX1BST1RPVFlQKCBpbnQgZW5jc3RyLCAoQ0hBUiAqKSAp OwotX1BST1RPVFlQKCBpbnQgZGVjb2RlLCAoQ0hBUiAqLCBpbnQgKCopKGNoYXIpLCBpbnQpICk7 Ci1fUFJPVE9UWVAoIGludCBiZGVjb2RlLCAoQ0hBUiAqLCBpbnQgKCopKGNoYXIpKSApOwotX1BS T1RPVFlQKCBpbnQgZm5wYXJzZSwgKGNoYXIgKikgKTsKLV9QUk9UT1RZUCggaW50IHN5c2NtZCwg KGNoYXIgKiwgY2hhciAqKSApOwotX1BST1RPVFlQKCBpbnQgY3dkLCAoY2hhciAqKSApOwotX1BS T1RPVFlQKCBpbnQgcmVtc2V0LCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBpbnQgaW5pdGF0dHIs IChzdHJ1Y3QgemF0dHIgKikgKTsKLV9QUk9UT1RZUCggaW50IGdhdHRyLCAoQ0hBUiAqLCBzdHJ1 Y3QgemF0dHIgKikgKTsKLV9QUk9UT1RZUCggaW50IGFkZWJ1LCAoY2hhciAqLCBzdHJ1Y3QgemF0 dHIgKikgKTsKLV9QUk9UT1RZUCggaW50IGNhbm5lZCwgKENIQVIgKikgKTsKLV9QUk9UT1RZUCgg aW50IG9wZW50LCAoc3RydWN0IHphdHRyICopICk7Ci1fUFJPVE9UWVAoIGludCBja29wZW54LCAo c3RydWN0IHphdHRyICopICk7Ci1fUFJPVE9UWVAoIGludCBvcGVuYSwgKGNoYXIgKiwgc3RydWN0 IHphdHRyICopICk7Ci1fUFJPVE9UWVAoIGludCBvcGVuaSwgKGNoYXIgKikgKTsKLV9QUk9UT1RZ UCggaW50IG9wZW5vLCAoY2hhciAqLCBzdHJ1Y3QgemF0dHIgKiwgc3RydWN0IGZpbGluZm8gKikg KTsKLV9QUk9UT1RZUCggaW50IG9wZW5jLCAoaW50LCBjaGFyICopICk7Ci1fUFJPVE9UWVAoIGlu dCByZW9mLCAoY2hhciAqLCBzdHJ1Y3QgemF0dHIgKikgKTsKLV9QUk9UT1RZUCggVk9JRCByZW90 LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IHNmaWxlLCAoaW50KSApOwotX1BST1RPVFlQKCBp bnQgc2F0dHIsIChpbnQsIGludCkgKTsKLV9QUk9UT1RZUCggaW50IHNkYXRhLCAodm9pZCkgKTsK LV9QUk9UT1RZUCggaW50IHNlb2YsIChpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBzeGVvZiwgKGlu dCkgKTsKLV9QUk9UT1RZUCggaW50IHNlb3QsICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgd2lu ZG93LCAoaW50KSApOwotX1BST1RPVFlQKCBpbnQgY2xzaWYsICh2b2lkKSApOwotX1BST1RPVFlQ KCBpbnQgY2xzb2YsIChpbnQpICk7Ci1fUFJPVE9UWVAoIENIQVIgc2V0Z2VuLCAoY2hhciwgY2hh ciAqLCBjaGFyICosIGNoYXIgKikgKTsKLV9QUk9UT1RZUCggaW50IGdldHBrdCwgKGludCwgaW50 KSApOwotX1BST1RPVFlQKCBpbnQgbWF4ZGF0YSwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBw dXRzcnYsIChjaGFyKSApOwotX1BST1RPVFlQKCBpbnQgcHV0dHJtLCAoY2hhcikgKTsKLV9QUk9U T1RZUCggaW50IHB1dHF1ZSwgKGNoYXIpICk7Ci1fUFJPVE9UWVAoIGludCBwdXRmaWwsIChjaGFy KSApOwotX1BST1RPVFlQKCBpbnQgcHV0bWZpbCwgKGNoYXIpICk7Ci1fUFJPVE9UWVAoIGludCB6 cHV0ZmlsLCAoY2hhcikgKTsKLV9QUk9UT1RZUCggVk9JRCB6ZHN0dWZmLCAoQ0hBUikgKTsKLV9Q Uk9UT1RZUCggaW50IHRpbml0LCAoaW50KSApOwotX1BST1RPVFlQKCBWT0lEIHBrdGluaXQsICh2 b2lkKSApOwotX1BST1RPVFlQKCBWT0lEIHJlc2V0YywgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIFZP SUQgeHNpbml0LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IGFkanBrbCwgKGludCxpbnQsaW50 KSApOwotX1BST1RPVFlQKCBpbnQgY2hrdGltbywgKGludCxpbnQpICk7Ci1fUFJPVE9UWVAoIGlu dCBueHRwa3QsICh2b2lkKSApOwotX1BST1RPVFlQKCBWT0lEIHJjYWxjcHN6LCAodm9pZCkgKTsK LV9QUk9UT1RZUCggaW50IHNyaW5pdCwgKGludCwgaW50LCBpbnQpICk7Ci1fUFJPVE9UWVAoIFZP SUQgdHN0YXRzLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggVk9JRCBmc3RhdHMsICh2b2lkKSApOwot X1BST1RPVFlQKCBWT0lEIGludG1zZywgKGxvbmcpICk7Ci1fUFJPVE9UWVAoIFZPSUQgZXJtc2cs IChjaGFyICopICk7Ci1fUFJPVE9UWVAoIGludCBjaGtpbnQsICh2b2lkKSApOwotX1BST1RPVFlQ KCBWT0lEIHNkZWJ1LCAoaW50KSApOwotX1BST1RPVFlQKCBWT0lEIHJkZWJ1LCAoQ0hBUiAqLCBp bnQpICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiBkYmNociwgKCBpbnQgKSApOwotI2lmZGVmIENPTU1F TlQKLV9QUk9UT1RZUCggU0lHVFlQIHN0cHRyYXAsIChpbnQsIGludCkgKTsKLV9QUk9UT1RZUCgg U0lHVFlQIHRyYXAsIChpbnQsIGludCkgKTsKLSNlbHNlCi1fUFJPVE9UWVAoIFNJR1RZUCBzdHB0 cmFwLCAoaW50KSApOwotX1BST1RPVFlQKCBTSUdUWVAgdHJhcCwgKGludCkgKTsKLSNlbmRpZiAv KiBDT01NRU5UICovCi1fUFJPVE9UWVAoIGNoYXIgKiBja19lcnJzdHIsICh2b2lkKSApOwotI2lm bmRlZiBOT1hGRVIKLV9QUk9UT1RZUCggaW50IGFnbmJ5dGUsICh2b2lkKSApOwotI2VuZGlmIC8q IE5PWEZFUiAqLwotX1BST1RPVFlQKCBpbnQgeGduYnl0ZSwgKGludCwgaW50LCBpbnQgKCopKHZv aWQpKSApOwotX1BST1RPVFlQKCBpbnQgeHBuYnl0ZSwgKGludCwgaW50LCBpbnQsIGludCAoKiko Y2hhcikpICk7Ci0KLS8qIFVzZXIgaW50ZXJmYWNlIGZ1bmN0aW9ucyBuZWVkZWQgYnkgbWFpbiBw cm9ncmFtLCBldGMuICovCi0KLV9QUk9UT1RZUCggaW50IGRvY29uZWN0LCAoaW50LGludCkgKTsK LV9QUk9UT1RZUCggVk9JRCBzZXRmbG93LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggVk9JRCBwcmVz Y2FuLCAoaW50KSApOwotX1BST1RPVFlQKCBWT0lEIHNldGludCwgKHZvaWQpICk7Ci1fUFJPVE9U WVAoIFZPSUQgZG9pbml0LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggVk9JRCBkb2Zhc3QsICh2b2lk KSApOwotX1BST1RPVFlQKCBWT0lEIGNtZGluaSwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBk b3Rha2UsIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIGludCBjbWRsaW4sICh2b2lkKSApOwotI2lm ZGVmIE9TMgotX1BST1RPVFlQKCBpbnQgY29uZWN0LCAoaW50KSApOwotI2Vsc2UgLyogT1MyICov Ci1fUFJPVE9UWVAoIGludCBjb25lY3QsICh2b2lkKSApOwotI2VuZGlmIC8qIE9TMiAqLwotX1BS T1RPVFlQKCBpbnQgY2tjZ2V0YywgKGludCkgKTsKLV9QUk9UT1RZUCggaW50IGNrY3B1dGMsIChp bnQpICk7Ci1fUFJPVE9UWVAgKGludCBtZG1odXAsICh2b2lkKSApOwotX1BST1RPVFlQKCBWT0lE IGhlcmFsZCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIFZPSUQgZml4Y21kLCAodm9pZCkgKTsKLV9Q Uk9UT1RZUCggaW50IGRvYXJnLCAoY2hhcikgKTsKLV9QUk9UT1RZUCggaW50IGRveGFyZywgKGNo YXIgKiosIGludCkgKTsKLV9QUk9UT1RZUCggVk9JRCB1c2FnZSwgKHZvaWQpICk7Ci1fUFJPVE9U WVAoIFZPSUQgZG9jbGVhbiwgKGludCkgKTsKLV9QUk9UT1RZUCggaW50IHNuZGhscCwgKHZvaWQp ICk7Ci1fUFJPVE9UWVAoIGludCBzbmRzdHJpbmcsIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIFZP SUQgY2tob3N0LCAoY2hhciAqLCBpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBnZXR0Y3MsIChpbnQs IGludCkgKTsKLV9QUk9UT1RZUCggVk9JRCBnZXRkaWFsZW52LCAodm9pZCkgKTsKLV9QUk9UT1RZ UCggVk9JRCBzZXRwcmVmaXgsIChpbnQpICk7Ci1fUFJPVE9UWVAoVk9JRCBpbml0cHJvdG8sKGlu dCxjaGFyICosY2hhciAqLGNoYXIgKixjaGFyICosY2hhciAqLGNoYXIqLGNoYXIqKSk7Ci1fUFJP VE9UWVAoIFZPSUQgaW5pdHBhdCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIFZPSUQgaW5pdGNzZXRz LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggY2hhciAqIGdldHN5c2lkLCAoY2hhciAqKSApOwotX1BS T1RPVFlQKCBpbnQgZ2V0c3lzaXgsIChjaGFyICopICk7Ci0jaWZkZWYgQ0tfVElNRVJTCi1fUFJP VE9UWVAoIFZPSUQgcnR0aW5pdCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBnZXRydHQsIChp bnQsIGludCkgKTsKLSNlbmRpZiAvKiBDS19USU1FUlMgKi8KLQotX1BST1RPVFlQKCBpbnQgaXNf YV90dHksIChpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBzbmRkaXIsIChjaGFyICopICk7Ci1fUFJP VE9UWVAoIGludCBzbmRkZWwsIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIGludCBzbmR0eXBlLCAo Y2hhciAqKSApOwotX1BST1RPVFlQKCBpbnQgZG9vdXRwdXQsIChjaGFyICosIGludCkgKTsKLV9Q Uk9UT1RZUCggaW50IGlzYWJzb2x1dGUsIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIFZPSUQgd2hv YXJld2UsICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgY2tta2RpciwgKGludCwgY2hhciAqLCBj aGFyICoqLCBpbnQsIGludCkgKTsKLV9QUk9UT1RZUCggaW50IGF1dG9leGl0Y2hrLCAoQ0hBUikg KTsKLV9QUk9UT1RZUCggVk9JRCBmY3BzLCAodm9pZCkgKTsKLSNpZmRlZiBPUzIKLV9QUk9UT1RZ UCggVk9JRCBsb2djaGFyLCAodW5zaWduZWQgc2hvcnQpICk7Ci0jZWxzZSAvKiBPUzIgKi8KLV9Q Uk9UT1RZUCggVk9JRCBsb2djaGFyLCAoY2hhcikgKTsKLSNlbmRpZiAvKiBPUzIgKi8KLV9QUk9U T1RZUCggVk9JRCBsb2dzdHIsIChjaGFyICosIGludCkgKTsKLQotX1BST1RPVFlQKCBWT0lEIGRv bG9nZW5kLCAodm9pZCkgKTsKLSNpZmRlZiBOT0xPQ0FMCi0jZGVmaW5lIGRvbG9nc2hvdygpCi0j ZWxzZQotX1BST1RPVFlQKCBsb25nIGRvbG9nc2hvdywgKGludCkgKTsKLSNlbmRpZiAvKiBOT0xP Q0FMICovCi0KLSNpZmRlZiBOT0RJU1BMQVkKLSNkZWZpbmUgZnhkaW5pdChhKQotI2Vsc2UKLV9Q Uk9UT1RZUCggVk9JRCBmeGRpbml0LCAoaW50KSApOwotI2VuZGlmIC8qIE5PRElTUExBWSAqLwot Ci1fUFJPVE9UWVAoIGludCBmaWxlc2VsZWN0LCAoY2hhciAqLAotCQkJICAgIGNoYXIgKiwgY2hh ciAqLCBjaGFyICosIGNoYXIgKiwKLQkJCSAgICBDS19PRkZfVCwgQ0tfT0ZGX1QsCi0JCQkgICAg aW50LCBpbnQsCi0JCQkgICAgY2hhciAqKikgKTsKLV9QUk9UT1RZUCggY2hhciAqIHdob2FtaSwg KHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBzaG9lc2MsIChpbnQpICk7Ci0KLSNpZmRlZiBDS19B UEMKLV9QUk9UT1RZUCggaW50IGNoa3Nwa3QsIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIGludCBr c3RhcnQsIChDSEFSKSApOwotX1BST1RPVFlQKCBWT0lEIGF1dG9kb3duLCAoaW50KSk7Ci0jaWZk ZWYgQ0tfWFlaCi1fUFJPVE9UWVAoIGludCB6c3RhcnQsIChDSEFSKSApOwotI2VuZGlmIC8qIENL X1hZWiAqLwotI2lmZGVmIE9TMgotX1BST1RPVFlQKHZvaWQgYXBjX2NvbW1hbmQsIChpbnQsIGNo YXIqKSk7Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogQ0tfQVBDICovCi0KLS8qIFVzZXIg UXVlcnkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgKi8KLQotc3RydWN0IHR4dGJveCB7 Ci0gICAgY2hhciAqIHRfYnVmOwkJCS8qIERlc3RpbmF0aW9uIGJ1ZmZlciBhZGRyZXNzICovCi0g ICAgaW50ICAgIHRfbGVuOwkJCS8qIERlc3RpbmF0aW9uIGJ1ZmZlciBsZW5ndGggKi8KLSAgICBj aGFyICogdF9sYmw7CQkJLyogTGFiZWwgZm9yIHRoaXMgZmllbGQgKi8KLSAgICBjaGFyICogdF9k Zmx0OwkJCS8qIERlZmF1bHQgcmVzcG9uc2UgZm9yIHRoaXMgZmllbGQgKi8KLSAgICBpbnQgICAg dF9lY2hvOwkJCS8qIDAgPSBubywgMSA9IHllcywgMiA9IGFzdGVyaXNrcyAqLwotfTsKLQotI2Rl ZmluZSBERUZBVUxUX1VRX1RJTUVPVVQgIDAKLV9QUk9UT1RZUChpbnQgdXFfb2ssIChjaGFyICos Y2hhciAqLGludCxjaGFyICoqLGludCkgKTsKLV9QUk9UT1RZUChpbnQgdXFfdHh0LCAoY2hhciAq LGNoYXIgKixpbnQsY2hhciAqKixjaGFyICosaW50LGNoYXIgKixpbnQpKTsKLV9QUk9UT1RZUChp bnQgdXFfbXR4dCwgKGNoYXIgKixjaGFyICoqLGludCxzdHJ1Y3QgdHh0Ym94W10pICk7Ci1fUFJP VE9UWVAoaW50IHVxX2ZpbGUsIChjaGFyICosY2hhciAqLGludCxjaGFyICoqLGNoYXIgKixjaGFy ICosaW50KSk7Ci0KLSNpZmRlZiBDS19VUkwKLXN0cnVjdCB1cmxvcHQgewotICAgIGNoYXIgKiBu YW07Ci0gICAgY2hhciAqIHZhbDsKLX07Ci0jZGVmaW5lIE1BWF9VUkxfT1BUUyAgICAxNgotc3Ry dWN0IHVybGRhdGEgewotICAgIGNoYXIgKiBzYXY7CQkJLyogVGhlIFVSTCBpdHNlbGYgKi8KLSAg ICBjaGFyICogc3ZjOwkJCS8qIFNlcnZpY2UgKi8KLSAgICBjaGFyICogdXNyOwkJCS8qIFVzZXIg Ki8KLSAgICBjaGFyICogcHN3OwkJCS8qIFBhc3N3b3JkICovCi0gICAgY2hhciAqIGhvczsJCQkv KiBIb3N0ICovCi0gICAgY2hhciAqIHBvcjsJCQkvKiBQb3J0ICovCi0gICAgY2hhciAqIHB0aDsJ CQkvKiBQYXRoICovCi0gICAgaW50ICAgIG5vcHRzOyAgICAgICAgICAgICAgIC8qIG51bWJlciBv ZiBvcHRpb25zICovCi0gICAgc3RydWN0IHVybG9wdCBvcHRbTUFYX1VSTF9PUFRTXTsgICAvKiBv cHRpb25zICovCi19OwotX1BST1RPVFlQKGludCB1cmxwYXJzZSwgKGNoYXIgKiwgc3RydWN0IHVy bGRhdGEgKikpOwotI2VuZGlmIC8qIENLX1VSTCAqLwotCi0jZW5kaWYgLyogQ0tDS0VSX0ggKi8K LQotLyogRW5kIG9mIGNrY2tlci5oICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1 aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NsaWIuYyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2Vy bWl0LTkuMC4zMDIvY2tjbGliLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxYjlm MDYuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9j a2NsaWIuYworKysgL2Rldi9udWxsCkBAIC0xLDMzMTkgKzAsMCBAQAotY2hhciAqIGNrbGlidiA9 ICJDLUtlcm1pdCBsaWJyYXJ5LCA5LjAuMDUyLCAyOSBKdW4gMjAxMSI7Ci0KLSNkZWZpbmUgQ0tD TElCX0MKLQotLyogQyBLIEMgTCBJIEIgLiBDICAtLSAgQy1LZXJtaXQgTGlicmFyeSByb3V0aW5l cy4gKi8KLQotLyoKLSAgQXV0aG9yOiBGcmFuayBkYSBDcnV6IDxmZGNAY29sdW1iaWEuZWR1PiwK LSAgQ29sdW1iaWEgVW5pdmVyc2l0eSBBY2FkZW1pYyBJbmZvcm1hdGlvbiBTeXN0ZW1zLCBOZXcg WW9yayBDaXR5LgotCi0gIENvcHlyaWdodCAoQykgMTk5OSwgMjAxMSwKLSAgICBUcnVzdGVlcyBv ZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgotICAgIEFsbCBy aWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhl Ci0gICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1l ciBhbmQgcGVybWlzc2lvbnMuCi0qLwotCi0vKgotICBHZW5lcmFsLXB1cnBvc2UsIHN5c3RlbS9w bGF0Zm9ybS9jb21waWxlci1pbmRlcGVuZGVudCByb3V0aW5lcyBmb3IgdXNlCi0gIGJ5IGFsbCBt b2R1bGVzLiAgTWFueSBhcmUgcmVwbGFjZW1lbnRzIGZvciBjb21tb25seSB1c2VkIEMgbGlicmFy eQotICBmdW5jdGlvbnMgdGhhdCBhcmUgbm90IGZvdW5kIG9uIGV2ZXJ5IHBsYXRmb3JtLCBhbmQv b3IgdGhhdCBsYWNrIG5lZWRlZAotICBmdW5jdGlvbmFsaXR5IChlLmcuIGNhc2VsZXNzIHN0cmlu ZyBzZWFyY2gvY29tcGFyZSkgb3Igc2FmZXR5IGZlYXR1cmVzLgotCi0gICAgY2tzdHJuY3B5KCkg IC0gU2ltaWxhciB0byBzdHJuY3B5KCkgYnV0IGRpZmZlcmVudCAoc2VlIGNvbW1lbnRzKS4KLSAg ICBja3N0cm5jYXQoKSAgLSBTaW1pbGFyIHRvIHN0cm5jYXQoKSBidXQgZGlmZmVyZW50IChzZWUg Y29tbWVudHMpLgotICAgIGNoYXJ0b3N0cigpICAtIENvbnZlcnRzIGEgY2hhciB0byBhIHN0cmlu ZyAoc2VsZiBvciBjdHJsIGNoYXIgbmFtZSkuCi0gICAgY2tzdHJjaHIoKSAgIC0gUG9ydGFibGUg c3RyY2hyKCkuCi0gICAgY2tzdHJwYnJrKCkgIC0gUG9ydGFibGUgc3RycGJyaygpLgotICAgIGNr bG93ZXIoKSAgICAtIExvd2VyY2FzZSBhIHN0cmluZyAoaW4gcGxhY2UpLgotICAgIGNrdXBwZXIo KSAgICAtIFVwcGVyY2FzZSBhIHN0cmluZyAoaW4gcGxhY2UpLgotICAgIGNraW5kZXgoKSAgICAt IExlZnQgb3IgcmlnaHQgaW5kZXguCi0gICAgY2tzdHJzdHIoKSAgIC0gUG9ydGFibGUgc3Ryc3Ry KCkuCi0gICAgY2tpdG9hKCkgICAgIC0gQ29udmVydHMgaW50IHRvIHN0cmluZy4KLSAgICBja3Vp dG9hKCkgICAgLSBDb252ZXJ0cyB1bnNpZ25lZCBpbnQgdG8gc3RyaW5nLgotICAgIGNrbHRvYSgp ICAgICAtIENvbnZlcnRzIGxvbmcgdG8gc3RyaW5nLgotICAgIGNrdWx0b2EoKSAgICAtIENvbnZl cnRzIHVuc2lnbmVkIGxvbmcgdG8gc3RyaW5nLgotICAgIGNrZnN0b2EoKSAgICAtIENvbnZlcnRz IG9mZl90LXR5cGUgaW50ZWdlciAobG9uZyBvciBsb25nIGxvbmcpIHRvIHN0cmluZy4KLSAgICBj a2F0b2ZzKCkgICAgLSBDb252ZXJ0cyBhIG51bWVyaWMgc3RyaW5nIHRvIGFuIG9mZl90LXR5cGUg aW50ZWdlci4KLSAgICBja2N0b2EoKSAgICAgLSBDb252ZXJ0cyBjaGFyIHRvIHN0cmluZy4KLSAg ICBja21ha21zZygpICAgLSBDb25zdHJ1Y3RzIGEgbWVzc2FnZSBmcm9tIDQgc291cmNlIHN0cmlu Z3MuCi0gICAgY2ttYWt4bXNnKCkgIC0gQ29uc3RydWN0cyBhIG1lc3NhZ2UgZnJvbSAxMiBzb3Vy Y2Ugc3RyaW5ncy4KLSAgICBja21hdGNoKCkgICAgLSBQYXR0ZXJuIG1hdGNoaW5nLgotICAgIGNr bWVtY3B5KCkgICAtIFBvcnRhYmxlIG1lbWNweSgpLgotICAgIGNrcmNoYXIoKSAgICAtIFJpZ2h0 bW9zdCBjaGFyYWN0ZXIgb2YgYSBzdHJpbmcuCi0gICAgY2tzdHJjbXAoKSAgIC0gUG9zc2libHkg Y2FzZWxlc3Mgc3RyaW5nIGNvbXBhcmlzb24uCi0gICAgY2tzdHJwcmUoKSAgIC0gQ2FzZWxlc3Mg c3RyaW5nIHByZWZpeCBjb21wYXJpc29uLgotICAgIHNoX3NvcnQoKSAgICAtIFNvcnRzIGFuIGFy cmF5IG9mIHN0cmluZ3MsIG1hbnkgb3B0aW9ucy4KLSAgICBicnN0cmlwKCkgICAgLSBTdHJpcHMg ZW5jbG9zaW5nIGJyYWNlcyAoYW5kIGRvdWJsZXF1b3RlcykuCi0gICAgbWFrZWxpc3QoKSAgIC0g U3BsaXRzICJ7e2l0ZW19e2l0ZW19Li4ufSIgaW50byBhbiBhcnJheS4KLSAgICBtYWtlc3RyKCkg ICAgLSBDYXJlZnVsIG1hbGxvYygpIGZyb250IGVuZC4KLSAgICB4bWFrZXN0cigpICAgLSBkaXR0 byAoc2VlIGNvbW1lbnRzKS4KLSAgICBja3JhZGl4KCkgICAgLSBDb252ZXJ0IG51bWJlciByYWRp eCAoMi0zNikuCi0gICAgYjh0b2I2NCgpICAgIC0gQ29udmVydCBkYXRhIHRvIGJhc2UgNjQuCi0g ICAgYjY0dG9iOCgpICAgIC0gQ29udmVydCBiYXNlIDY0IHRvIGRhdGEuCi0gICAgY2hrbnVtKCkg ICAgIC0gQ2hlY2tzIGlmIHN0cmluZyBpcyBhIChwb3NzaWJseSBzaWduZWQpIGludGVnZXIuCi0g ICAgcmRpZ2l0cygpICAgIC0gQ2hlY2tzIGlmIHN0cmluZyBpcyBjb21wb3NlZCBvbmx5IG9mIGRl Y2ltYWwgZGlnaXRzLgotICAgIGlzZmxvYXQoKSAgICAtIENoZWNrcyBpZiBzdHJpbmcgaXMgYSB2 YWxpZCBmbG9hdGluZy1wb2ludCBudW1iZXIuCi0gICAgY2tyb3VuZCgpICAgIC0gUm91bmRzIGEg ZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGRlc2lyZWQgcHJlY2lzaW9uLgotICAgIHBhcm5hbSgp ICAgICAtIFJldHVybnMgcGFyaXR5IG5hbWUgc3RyaW5nLgotICAgIGhobW1zcygpICAgICAtIENv bnZlcnRzIHNlY29uZHMgdG8gaGg6bW06c3Mgc3RyaW5nLgotICAgIGxzZXQoKSAgICAgICAtIFdy aXRlIGZpeGVkLWxlbmd0aCBmaWVsZCBsZWZ0LWFkanVzdGVkIGludG8gYSByZWNvcmQuCi0gICAg cnNldCgpICAgICAgIC0gV3JpdGUgZml4ZWQtbGVuZ3RoIGZpZWxkIHJpZ2h0LWFkanVzdGVkIGlu dG8gYSByZWNvcmQuCi0gICAgdWxvbmd0b2hleCgpIC0gQ29udmVydHMgYW4gdW5zaWduZWQgbG9u ZyB0byBhIGhleCBzdHJpbmcuCi0gICAgaGV4dG91bG9uZygpIC0gQ29udmVydHMgYSBoZXggc3Ry aW5nIHRvIGFuIHVuc2lnbmVkIGxvbmcuCi0gICAgY2tzcGxpdCgpICAgIC0gU3BsaXRzIGEgc3Ry aW5nIGludG8gYW4gYXJyYXkgb2Ygd29yZHMuCi0gICAgaXNwYXR0ZXJuKCkgIC0gVGVsbHMgaWYg YXJndW1lbnQgc3RyaW5nIGlzIGEgcGF0dGVybi4KLQotICBQcm90b3R5cGVzIGFyZSBpbiBja2Ns aWIuaC4KLQotICBOb3RlOiBUaGlzIG1vZHVsZSBzaG91bGQgbm90IGNvbnRhaW4gYW55IGV4dGVy biBkZWNsYXJhdGlvbnMuCi0qLwotI2luY2x1ZGUgImNrY3N5bS5oIgotI2luY2x1ZGUgImNrY2Rl Yi5oIgotI2luY2x1ZGUgImNrY2FzYy5oIgotCi0vKiBQdWJsaWMgdmFyaWFibGVzICovCi0KLWlu dCBkYmxxdW8gPSAxOyAvKiBOb256ZXJvIGlmIGRvdWJsZXF1b3RlcyBjYW4gYmUgdXNlZCBmb3Ig Z3JvdXBpbmcgKi8KLQotY2hhciAqCi1jY250YWJbXSA9IHsJLyogTmFtZXMgb2YgQVNDSUkgKEMw KSBjb250cm9sIGNoYXJhY3RlcnMgMC0zMSAqLwotICAgICJOVUwiLCAiU09IIiwgIlNUWCIsICJF VFgiLCAiRU9UIiwgIkVOUSIsICJBQ0siLCAiQkVMIiwKLSAgICAiQlMiLCAgIkhUIiwgICJMRiIs ICAiVlQiLCAgIkZGIiwgICJDUiIsICAiU08iLCAgIlNJIiwKLSAgICAiRExFIiwgIkRDMSIsICJE QzIiLCAiREMzIiwgIkRDNCIsICJOQUsiLCAiU1lOIiwgIkVUQiIsCi0gICAgIkNBTiIsICJFTSIs ICAiU1VCIiwgIkVTQyIsICJGUyIsICAiR1MiLCAgIlJTIiwgICJVUyIKLX07Ci0KLWNoYXIgKgot YzF0YWJbXSA9IHsJLyogTmFtZXMgb2YgSVNPIDY0MjkgKEMxKSBjb250cm9sIGNoYXJhY3RlcnMg MC0zMiAqLwotICAgICJYWFgiLCAiWFhYIiwgIkJQSCIsICJOQkgiLCAiSU5EIiwgIk5FTCIsICJT U0EiLCAiRVNBIiwKLSAgICAiSFRTIiwgIkhUSiIsICJWVFMiLCAiUExEIiwgIlBMVSIsICJSSSIs ICAiU1MyIiwgIlNTMyIsCi0gICAgIkRDUyIsICJQVTEiLCAiUFUyIiwgIlNUUyIsICJDQ0giLCAi TVciLCAgIlNQQSIsICJFUEEiLAotICAgICJTT1MiLCAiWFhYIiwgIlNDSSIsICJDU0kiLCAiU1Qi LCAgIk9TQyIsICJQTSIsICAiQVBDIiwgIk5CUyIKLX07Ci0KLSNkZWZpbmUgUlhSRVNVTFQgMTI3 Ci1zdGF0aWMgY2hhciByeGRpZ2l0c1tdID0gIjAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJT VFVWV1hZWiI7Ci1zdGF0aWMgY2hhciByeHJlc3VsdFtSWFJFU1VMVCsxXTsKLQotLyogIEMgSyBT IFQgUiBOIEMgUCBZICovCi0KLS8qCi0gIENvcGllcyBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyBp bnRvIGEgYnVmZmVyIHdob3NlIHRvdGFsIGxlbmd0aCBpcyBnaXZlbiwKLSAgZW5zdXJpbmcgdGhh dCB0aGUgcmVzdWx0IGlzIE5VTC10ZXJtaW5hdGVkIGV2ZW4gaWYgaXQgaGFzIHRvIGJlIHRydW5j YXRlZC4KLQotICBDYWxsIHdpdGg6Ci0gICAgZGVzdCA9IHBvaW50ZXIgdG8gZGVzdGluYXRpb24g YnVmZmVyCi0gICAgc3JjICA9IHBvaW50ZXIgdG8gc291cmNlIHN0cmluZwotICAgIGxlbiAgPSBs ZW5ndGggb2YgZGVzdGluYXRpb24gYnVmZmVyICh0aGUgYWN0dWFsIGxlbmd0aCwgbm90IG9uZSBs ZXNzKS4KLQotICBSZXR1cm5zOgotICAgIGludCwgVGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQs IDAgb3IgbW9yZS4KLQotICBOT1RFOiBUaGlzIGlzIE5PVCBhIHJlcGxhY2VtZW50IGZvciBzdHJu Y3B5KCk6Ci0gICAuIHN0cm5jcHkoKSBkb2VzIG5vdCByZXF1aXJlIGl0cyBzb3VyY2Ugc3RyaW5n IHRvIGJlIE5VTC10ZXJtaW5hdGVkLgotICAgLiBzdHJuY3B5KCkgZG9lcyBub3QgbmVjZXNzYXJp bHkgTlVMLXRlcm1pbmF0ZSBpdHMgcmVzdWx0LgotICAgLiBzdHJuY3B5KCkgcmlnaHQtcGFkcyBk ZXN0IHdpdGggTlVMcyBpZiBpdCBpcyBsb25nZXIgdGhhbiBzcmMuCi0gICAuIHN0cm5jcHkoKSB0 cmVhdHMgdGhlIGxlbmd0aCBhcmd1bWVudCBhcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHku Ci0gICAuIGNrc3RybmNweSgpIHRyZWF0cyB0aGUgbGVuZ3RoIGFyZ3VtZW50IGFzIHRoZSBzaXpl IG9mIHRoZSBkZXN0IGJ1ZmZlci4KLSAgIC4gY2tzdHJuY3B5KCkgZG9lc24ndCBkdW1wIGNvcmUg aWYgZ2l2ZW4gTlVMTCBzdHJpbmcgcG9pbnRlcnMuCi0gICAuIGNrc3RybmNweSgpIHJldHVybnMg YSBudW1iZXIuCi0KLSAgVXNlIGNrc3RybmNweSgpIHdoZW4geW91IHdhbnQgdG86Ci0gICAuIENv cHkgYW4gZW50aXJlIHN0cmluZyBpbnRvIGEgYnVmZmVyIHdpdGhvdXQgb3ZlcnJ1bi4KLSAgIC4g R2V0IHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBiYWNrLgotCi0gIFVzZSBzdHJuY3B5KCkgd2hl biB5b3Ugd2FudCB0bzoKLSAgIC4gQ29weSBhIHBpZWNlIG9mIGEgc3RyaW5nLgotKi8KLWludAot I2lmZGVmIENLX0FOU0lDCi1ja3N0cm5jcHkoY2hhciAqIGRlc3QsIGNvbnN0IGNoYXIgKiBzcmMs IGludCBsZW4pCi0jZWxzZQotY2tzdHJuY3B5KGRlc3Qsc3JjLGxlbikgY2hhciAqIGRlc3QsICog c3JjOyBpbnQgbGVuOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaW50IGk7Ci0gICAg aWYgKGxlbiA8IDEgfHwgIXNyYyB8fCAhZGVzdCkgewkvKiBOb3RoaW5nIG9yIG5vd2hlcmUgdG8g Y29weSAqLwotCWlmIChkZXN0KSAqZGVzdCA9IE5VTDsKLQlyZXR1cm4oMCk7Ci0gICAgfQotI2lm bmRlZiBOT0NLU1RSTkNQWQotICAgIGZvciAoaSA9IDA7IHNyY1tpXSAmJiAoaSA8IGxlbi0xKTsg aSsrKSAvKiBBcmdzIE9LLCBjb3B5ICovCi0gICAgICBkZXN0W2ldID0gc3JjW2ldOwotICAgIGRl c3RbaV0gPSBOVUw7Ci0jZWxzZQotICAgIGkgPSBzdHJsZW4oc3JjKTsKLSAgICBpZiAoaSA+IGxl bikgaSA9IGxlbjsKLSAgICBzdHJuY3B5KGRlc3Qsc3JjLGkpOwotICAgIGRlc3RbbGVuXSA9IE5V TDsKLSNlbmRpZiAvKiBOT0NLU1RSTkNQWSAqLwotICAgIHJldHVybihpKTsKLX0KLQotLyogIEMg SyBTIFQgUiBOIEMgQSBUICovCi0KLS8qCi0gIEFwcGVuZHMgYSBOVUwtdGVybWluYXRlZCBzdHJp bmcgdG8gYSBidWZmZXIgd2hvc2UgdG90YWwgbGVuZ3RoIGlzIGdpdmVuLAotICBlbnN1cmluZyB0 aGF0IHRoZSByZXN1bHQgaXMgTlVMLXRlcm1pbmF0ZWQgZXZlbiBpZiBpdCBoYWQgdG8gYmUgdHJ1 bmNhdGVkLgotCi0gIENhbGwgd2l0aDoKLSAgICBkZXN0ID0gcG9pbnRlciB0byBkZXN0aW5hdGlv biBidWZmZXIgY29udGFpbmluZyBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcKLSAgICBzcmMgID0g cG9pbnRlciB0byBudWxsLXRlcm1pbmF0ZWQgc291cmNlIHN0cmluZwotICAgIGxlbiAgPSBsZW5n dGggb2YgZGVzdGluYXRpb24gYnVmZmVyICh0aGUgYWN0dWFsIGxlbmd0aCwgbm90IG9uZSBsZXNz KS4KLQotICBSZXR1cm5zOgotICAgIGludCwgVGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQsIDAg b3IgbW9yZS4KLSovCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotY2tzdHJuY2F0KGNoYXIgKiBkZXN0 LCBjb25zdCBjaGFyICogc3JjLCBpbnQgbGVuKQotI2Vsc2UKLWNrc3RybmNhdChkZXN0LHNyYyxs ZW4pIGNoYXIgKiBkZXN0LCAqIHNyYzsgaW50IGxlbjsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot ewotICAgIHJlZ2lzdGVyIGludCBpLCBqOwotI2lmZGVmIE5PQ0tTVFJOQ1BZCi0gICAgcmVnaXN0 ZXIgY2hhciAqIHMxLCAqIHMyOwotI2VuZGlmIC8qIE5PQ0tTVFJOQ1BZICovCi0gICAgaWYgKGxl biA8IDEgfHwgIXNyYyB8fCAhZGVzdCkgewkvKiBOb3RoaW5nIG9yIG5vd2hlcmUgdG8gY29weSAq LwotCWlmIChkZXN0KSAqZGVzdCA9IE5VTDsKLQlyZXR1cm4oMCk7Ci0gICAgfQotI2lmbmRlZiBO T0NLU1RSTkNQWQotICAgIC8qIEFyZ3MgT0ssIGNvcHkgKi8KLSAgICBmb3IgKGkgPSAwLCBqID0g c3RybGVuKGRlc3QpOyBzcmNbaV0gJiYgKGkgPCBsZW4tai0xKTsgaSsrKQotICAgICAgZGVzdFtp K2pdID0gc3JjW2ldOwotICAgIGRlc3RbaStqXSA9IE5VTDsKLSNlbHNlCi0gICAgaiA9IDA7Ci0g ICAgczEgPSBkZXN0OwotICAgIHdoaWxlICgqczErKykgaisrOwkJCS8qIGogPSBzdHJsZW4oZGVz dCk7ICovCi0gICAgczEtLTsJCQkJLyogKGJhY2sgdXAgb3ZlciBOVUwpICovCi0KLSAgICBpID0g MDsKLSAgICBzMiA9IChjaGFyICopc3JjOwotICAgIHdoaWxlICgqczIrKykgaSsrOwkJCS8qIGkg PSBzdHJsZW4oc3JjKTsgKi8KLQotICAgIGlmIChpID4gKGxlbi1qKSkKLSAgICAgIGkgPSBsZW4g LSBqOwotICAgIGlmIChpIDw9IDApCi0gICAgICByZXR1cm4oMCk7Ci0KLSNpZmRlZiBDT01NRU5U Ci0gICAgc3RybmNweSgmZGVzdFtqXSxzcmMsaSk7Ci0jZWxzZQotICAgIGogPSBpOwkJCQkvKiBU aGlzIHNob3VsZCBiZSBhIGJpdCBmYXN0ZXIuLi4gICAgKi8KLSAgICBzMiA9IChjaGFyICopc3Jj OwkJICAgICAgIC8qIGRlcGVuZHMgb24gc3RyY3B5IGltcGxlbWVudGF0aW9uOyAqLwotICAgIHdo aWxlICgoKnMxKysgPSAqczIrKykgJiYgai0tKQkvKiBhdCBsZWFzdCBpdCBzaG91bGRuJ3QgYmUg c2xvd2VyLiAgKi8KLSAgICAgIDsKLSAgICBkZXN0W2xlbi0xXSA9IE5VTDsJCQkvKiBJbiBjYXNl IG9mIGVhcmx5IGV4aXQuICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0jZW5kaWYgLyogTk9D S1NUUk5DUFkgKi8KLSAgICByZXR1cm4oaSk7Ci19Ci0KLS8qICBDIEsgTSBBIEsgTSBTIEcgICov Ci0KLS8qCi0gICBDb25zdHJ1Y3RzIGEgbWVzc2FnZSBmcm9tIHVwIHRvIDQgcGllY2VzIHdpdGgg bGVuZ3RoIGNoZWNraW5nLgotICAgUmVzdWx0IGlzIGFsd2F5cyBOVUwgdGVybWluYXRlZC4gIENh bGwgd2l0aDoKLSAgICAgYnVmOiBQb2ludGVyIHRvIGJ1ZmZlciBmb3IgY29uc3RydWN0aW5nIG1l c3NhZ2UuCi0gICAgIGxlbjogTGVuZ3RoIG9mIGJ1ZmZlci4KLSAgICAgczEtczQ6IFN0cmluZyBw b2ludGVycyAoY2FuIGJlIE5VTEwpLgotICAgUmV0dXJuczoKLSAgICAgMDogTm90aGluZyB3YXMg Y29waWVkLgotICAgICBuOiAocG9zaXRpdmUgbnVtYmVyKSBuIGJ5dGVzIGNvcGllZCwgYWxsIGFy Z3MgY29waWVkIHN1Y2Nlc3NmdWxseS4KLSAgICAtbjogbiBieXRlcyB3ZXJlIGNvcGllZCwgZGVz dGluYXRpb24gYnVmZmVyIG5vdCBiaWcgZW5vdWdoIGZvciBhbGwuCi0gICBBbHNvIHNlZToKLSAg ICAgY2ttYWt4bXNnKCkgLS0gYWNjZXB0cyAxMiBzdHJpbmcgYXJncy4KLSAgICAgY2tpdG9hKCks IGNrbHRvYSgpLCBja2N0b2EoKSwgY2tpdG94KCksIGV0Yy4KLSAgICAgVXNlIGNrbWFrW3hdbXNn KCkgcGx1cyBjaz90bz8oKSBhcyBhIHNhZmUgcmVwbGFjZW1lbnQgZm9yIHNwcmludGYoKS4KLSov Ci1pbnQKLSNpZmRlZiBDS19BTlNJQwotY2ttYWttc2coY2hhciAqIGJ1ZiwgaW50IGxlbiwgY2hh ciAqczEsIGNoYXIgKnMyLCBjaGFyICpzMywgY2hhciAqczQpCi0jZWxzZSAvKiBDS19BTlNJQyAq LwotY2ttYWttc2coYnVmLGxlbixzMSxzMixzMyxzNCkgY2hhciAqYnVmLCAqczEsICpzMiwgKnMz LCAqczQ7IGludCBsZW47Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpbnQgaSwgbiA9 IDAsIG0gPSAwOwotICAgIGNoYXIgKnM7Ci0gICAgY2hhciAqcCwgKmFbNF07Ci0KLSAgICBpZiAo IWJ1ZikgcmV0dXJuKG4pOwkJLyogTm8gZGVzdGluYXRpb24gKi8KLSAgICBpZiAobGVuIDwgMSkg cmV0dXJuKG4pOwkJLyogTm8gc2l6ZSAqLwotCi0gICAgcyA9IGJ1ZjsJCQkJLyogUG9pbnQgdG8g ZGVzdGluYXRpb24gKi8KLSAgICBhWzBdID0gczE7IGFbMV0gPSBzMjsgYVsyXSA9IHMzOyBhWzNd ID0gczQ7CS8qIEFycmF5IG9mIHNvdXJjZSBzdHJpbmdzICovCi0gICAgZm9yIChpID0gMDsgaSA8 IDQ7IGkrKykgewkJLyogTG9vcCB0aHJ1IGFycmF5ICovCi0JcCA9IGFbaV07CQkJLyogUG9pbnQg dG8gdGhpcyBlbGVtZW50ICovCi0JaWYgKHApIHsJCQkvKiBJZiBwb2ludGVyIG5vdCBudWxsICov Ci0JICAgIG4gPSBja3N0cm5jcHkocyxwLGxlbik7CS8qIENvcHkgc2FmZWx5ICovCi0JICAgIG0g Kz0gbjsJCQkvKiBBY2N1bXVsYXRlIHRvdGFsICovCi0JICAgIGlmIChwW25dKQkJCS8qIERpZG4n dCBnZXQgd2hvbGUgdGhpbmc/ICovCi0JICAgICAgcmV0dXJuKC1tKTsJCS8qIHJldHVybiBpbmRp Y2F0aW5nIGJ1ZmZlciBmdWxsICovCi0JICAgIGxlbiAtPSBuOwkJCS8qIERlZHVjdCBmcm9tIHNw YWNlIGxlZnQgKi8KLQkgICAgcyArPSBuOwkJCS8qIE90aGVyd2lzZSBhZHZhbmNlIGRlc3QgcG9p bnRlciAqLwotCX0KLSAgICB9Ci0gICAgcmV0dXJuKG0pOwkJCQkvKiBSZXR1cm4gdG90YWwgYnl0 ZXMgY29waWVkICovCi19Ci0KLQotLyogIEMgSyBNIEEgSyBYIE0gUyBHICAqLwotCi0vKiAgRXhh Y3RseSBsaWtlIGNrbWFrbXNnKCksIGJ1dCBhY2NlcHRzIDEyIHN0cmluZyBhcmd1bWVudHMuICov Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi1ja21ha3htc2coY2hhciAqIGJ1ZiwgaW50IGxlbiwK LQkgIGNoYXIgKnMxLCBjaGFyICpzMiwgY2hhciAqczMsIGNoYXIgICpzNCwgY2hhciAgKnM1LCBj aGFyICpzNiwKLQkgIGNoYXIgKnM3LCBjaGFyICpzOCwgY2hhciAqczksIGNoYXIgKnMxMCwgY2hh ciAqczExLCBjaGFyICpzMTIpCi0jZWxzZSAvKiBDS19BTlNJQyAqLwotY2ttYWt4bXNnKGJ1Zixs ZW4sczEsczIsczMsczQsczUsczYsczcsczgsczksczEwLHMxMSxzMTIpCi0gIGNoYXIgKmJ1Ziwg KnMxLCAqczIsICpzMywgKnM0LCAqczUsICpzNiwgKnM3LCAqczgsICpzOSwgKnMxMCwgKnMxMSwg KnMxMjsKLSAgaW50IGxlbjsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGludCBpLCBu ID0gMCwgbSA9IDA7Ci0gICAgY2hhciAqczsKLSAgICBjaGFyICpwLCAqYVsxMl07Ci0KLQotICAg IGlmICghYnVmKSByZXR1cm4obik7CQkvKiBObyBkZXN0aW5hdGlvbiAqLwotICAgIGlmIChsZW4g PCAxKSByZXR1cm4obik7CQkvKiBObyBzaXplICovCi0KLSAgICBzID0gYnVmOwkJCQkvKiBQb2lu dCB0byBkZXN0aW5hdGlvbiAqLwotICAgIGFbMF0gPSBzMTsgYVsxXSA9ICBzMjsgYVsyXSAgPSBz MzsgIGFbM10gPSBzNDsgLyogU291cmNlLXN0cmluZyBhcnJheSAqLwotICAgIGFbNF0gPSBzNTsg YVs1XSA9ICBzNjsgYVs2XSAgPSBzNzsgIGFbN10gPSBzODsKLSAgICBhWzhdID0gczk7IGFbOV0g PSBzMTA7IGFbMTBdID0gczExOyBhWzExXSA9IHMxMjsKLSAgICBmb3IgKGkgPSAwOyBpIDwgMTI7 IGkrKykgewkJLyogTG9vcCB0aHJ1IGFycmF5ICovCi0JcCA9IGFbaV07CQkJLyogUG9pbnQgdG8g dGhpcyBlbGVtZW50ICovCi0JaWYgKHApIHsJCQkvKiBJZiBwb2ludGVyIG5vdCBudWxsICovCi0J ICAgIG4gPSBja3N0cm5jcHkocyxwLGxlbik7CS8qIENvcHkgc2FmZWx5ICovCi0JICAgIG0gKz0g bjsJCQkvKiBBY2N1bXVsYXRlIHRvdGFsICovCi0JICAgIGlmIChwW25dKQkJCS8qIERpZG4ndCBn ZXQgd2hvbGUgdGhpbmc/ICovCi0JICAgICAgcmV0dXJuKC1tKTsJCS8qIHJldHVybiBpbmRpY2F0 aW5nIGJ1ZmZlciBmdWxsICovCi0JICAgIGxlbiAtPSBuOwkJCS8qIERlZHVjdCBmcm9tIHNwYWNl IGxlZnQgKi8KLQkgICAgcyArPSBuOwkJCS8qIE90aGVyd2lzZSBhZHZhbmNlIGRlc3QgcG9pbnRl ciAqLwotCX0KLSAgICB9Ci0gICAgcmV0dXJuKG0pOwkJCQkvKiBSZXR1cm4gdG90YWwgYnl0ZXMg Y29waWVkICovCi19Ci0KLS8qICBDIEggQSBSIFQgTyBTIFQgUiAgKi8KLQotLyogIENvbnZlcnRz IGEgY2hhcmFjdGVyIHRvIGEgc3RyaW5nLCBpbnRlcnByZXRpbmcgY29udHJvbHMuICAqLwotCi1j aGFyICoKLWNoYXJ0b3N0cih4KSBpbnQgeDsgewkJCS8qIENhbGwgd2l0aCBjaGFyIHggKi8KLSAg ICBzdGF0aWMgY2hhciBidWZbMl07CQkJLyogUmV0dXJucyBzdHJpbmcgcG9pbnRlci4gKi8KLSAg ICBpZiAoeCA8IDMyKQotICAgICAgcmV0dXJuKGNjbnRhYlt4XSk7Ci0gICAgaWYgKHggPT0gMTI3 KQotICAgICAgcmV0dXJuKCJERUwiKTsKLSAgICBpZiAoeCA+IDEyNyAmJiB4IDwgMTYxKQotICAg ICAgcmV0dXJuKGMxdGFiW3ggLSAxMjhdKTsKLSAgICBpZiAoeCA9PSAweEFEKQotICAgICAgcmV0 dXJuKCJTSFkiKTsKLSAgICBidWZbMV0gPSBOVUw7Ci0gICAgYnVmWzBdID0gKHVuc2lnbmVkKSh4 ICYgMHhmZik7Ci0gICAgcmV0dXJuKChjaGFyICopYnVmKTsKLX0KLQotLyogIEMgSyBSIEMgSCBB IFIgKi8KLQotLyogIFJldHVybnMgdGhlIHJpZ2h0bW9zdCBjaGFyYWN0ZXIgb2YgdGhlIGdpdmVu IG51bGwtdGVybWluYXRlZCBzdHJpbmcgKi8KLQotaW50Ci1ja3JjaGFyKHMpIGNoYXIgKiBzOyB7 Ci0gICAgcmVnaXN0ZXIgQ0hBUiBjID0gJ1wwJywgKnA7Ci0gICAgcCA9IChDSEFSICopczsKLSAg ICBpZiAoIXApIHAgPSAoQ0hBUiAqKSIiOwkJLyogTnVsbCBwb2ludGVyID09IGVtcHR5IHN0cmlu ZyAqLwotICAgIGlmICghKnApIHJldHVybigwKTsKLSAgICB3aGlsZSAoKnApCQkJCS8qIENyYXds IHRvIGVuZCBvZiBzdHJpbmcgKi8KLSAgICAgIGMgPSAqcCsrOwotICAgIHJldHVybigodW5zaWdu ZWQpKGMgJiAweGZmKSk7CS8qIFJldHVybiBmaW5hbCBjaGFyYWN0ZXIgKi8KLX0KLQotLyogIEMg SyBTIFQgUiBDIEggUiAgKi8KLQotLyogIFJlcGxhY2VtZW50IGZvciBzdHJjaHIoKSwgd2hpY2gg aXMgbm90IHVuaXZlcnNhbC4gICovCi0vKiAgQ2FsbCB3aXRoOgotICAgICBzID0gcG9pbnRlciB0 byBzdHJpbmcgdG8gbG9vayBpbi4KLSAgICAgYyA9IGNoYXJhY3RlciB0byBsb29rIGZvci4KLSAg ICBSZXR1cm5zOgotICAgICBOVUxMIGlmIGMgbm90IGZvdW5kIGluIHMgb3IgdXBvbiBhbnkga2lu ZCBvZiBlcnJvciwgb3I6Ci0gICAgIHBvaW50ZXIgdG8gZmlyc3Qgb2NjdXJyZW5jZSBvZiBjIGlu IHMsIHNlYXJjaGluZyBmcm9tIGxlZnQgdG8gcmlnaHQuCi0qLwotY2hhciAqCi0jaWZkZWYgQ0tf QU5TSUMKLWNrc3RyY2hyKGNoYXIgKiBzLCBjaGFyIGMpCi0jZWxzZQotY2tzdHJjaHIocyxjKSBj aGFyICpzLCBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBja3N0cmNociAqLyB7Ci0gICAg aWYgKCFzKQotICAgICAgcmV0dXJuKE5VTEwpOwotICAgIHdoaWxlICgqcyAmJiAqcyAhPSBjKQot ICAgICAgcysrOwotICAgIHJldHVybigoKnMgPT0gYykgPyBzIDogTlVMTCk7Ci19Ci0KLS8qICBD IEsgUyBUIFIgUiBDIEggUiAgKi8KLQotLyogIFJlcGxhY2VtZW50IGZvciBzdHJyY2hyKCksIHdo aWNoIGlzIG5vdCB1bml2ZXJzYWwuICAqLwotLyogIENhbGwgd2l0aDoKLSAgICAgcyA9IHBvaW50 ZXIgdG8gc3RyaW5nIHRvIGxvb2sgaW4uCi0gICAgIGMgPSBjaGFyYWN0ZXIgdG8gbG9vayBmb3Iu Ci0gICAgUmV0dXJuczoKLSAgICAgTlVMTCBpZiBjIG5vdCBmb3VuZCBpbiBzIG9yIHVwb24gYW55 IGtpbmQgb2YgZXJyb3IsIG9yOgotICAgICBwb2ludGVyIHRvIGZpcnN0IG9jY3VycmVuY2Ugb2Yg YyBpbiBzLCBzZWFyY2hpbmcgZnJvbSByaWdodCB0byBsZWZ0LgotKi8KLWNoYXIgKgotI2lmZGVm IENLX0FOU0lDCi1ja3N0cnJjaHIoY2hhciAqIHMsIGNoYXIgYykKLSNlbHNlCi1ja3N0cnJjaHIo cyxjKSBjaGFyICpzLCBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBja3N0cmNociAqLyB7 Ci0gICAgY2hhciAqIHMyID0gTlVMTDsKLSAgICBpZiAoIXMpCi0gICAgICByZXR1cm4oTlVMTCk7 Ci0gICAgd2hpbGUgKCpzKSB7Ci0JaWYgKCpzID09IGMpCi0JICBzMiA9IHM7Ci0JcysrOwotICAg IH0KLSAgICByZXR1cm4oczIpOwotfQotCi0KLS8qIEMgSyBTIFQgUiBQIEIgUiBLICAtLSAgUG9y dGFibGUgcmVwbGFjZW1lbnQgZm9yIHN0cnBicmsoKSAgKi8KLQotLyogUmV0dXJucyBwb2ludGVy IHRvIGZpcnN0IGNoYXIgaW4gczEgdGhhdCBpcyBhbHNvIGluIHMyLCBvciBOVUxMICovCi0KLWNo YXIgKgotY2tzdHJwYnJrKHMxLCBzMikgY2hhciAqIHMxLCAqIHMyOyB7Ci0gICAgY2hhciBjMSwg YzIsICogczM7Ci0gICAgaWYgKCFzMSB8fCAhczIpIHJldHVybihOVUxMKTsKLSAgICBpZiAoISpz MSB8fCAhKnMyKSByZXR1cm4oTlVMTCk7Ci0gICAgd2hpbGUgKChjMSA9ICpzMSsrKSkgewotCXMz ID0gczI7Ci0Jd2hpbGUgKChjMiA9ICpzMysrKSkgewotCSAgICBpZiAoYzIgPT0gYzEpCi0JICAg ICAgcmV0dXJuKHMxLTEpOwotCX0KLSAgICB9Ci0gICAgcmV0dXJuKE5VTEwpOwotfQotCi0vKiAg QyBLIEwgTyBXIEUgUiAgLS0gIExvd2VyY2FzZSBhIHN0cmluZyBJTiBQTEFDRSAqLwotCi0vKiBS ZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyAqLwotCi1pbnQKLWNrbG93ZXIocykgY2hh ciAqczsgewotICAgIGludCBuID0gMDsKLSAgICBpZiAoIXMpIHJldHVybigwKTsKLSAgICB3aGls ZSAoKnMpIHsKLSAgICAgICAgaWYgKGlzdXBwZXIoKnMpKSAqcyA9IChjaGFyKSB0b2xvd2VyKCpz KTsKLSAgICAgICAgcysrLCBuKys7Ci0gICAgfQotICAgIHJldHVybihuKTsKLX0KLQotLyogIEMg SyBVIFAgUCBFIFIgIC0tICBVcHBlcmNhc2UgYSBzdHJpbmcgSU4gUExBQ0UgKi8KLQotLyogUmV0 dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgKi8KLQotaW50Ci1ja3VwcGVyKHMpIGNoYXIg KnM7IHsKLSAgICBpbnQgbiA9IDA7Ci0gICAgaWYgKCFzKSByZXR1cm4oMCk7Ci0gICAgd2hpbGUg KCpzKSB7Ci0gICAgICAgIGlmIChpc2xvd2VyKCpzKSkgKnMgPSAoY2hhcikgdG91cHBlcigqcyk7 Ci0gICAgICAgIHMrKywgbisrOwotICAgIH0KLSAgICByZXR1cm4obik7Ci19Ci0KLS8qICBDIEsg TCBUIE8gQSAgLS0gIExvbmcgdG8gc3RyaW5nICAtLSAgRk9SIERJU0NJUExJTkVEIFVTRSBPTkxZ ICAqLwotCi0jZGVmaW5lIE5VTUJVRiAxMDI0Ci1zdGF0aWMgY2hhciBudW1idWZbTlVNQlVGKzMy XSA9IHsgTlVMLCBOVUwgfTsKLXN0YXRpYyBpbnQgbnVtYnAgPSAwOwotLyoKLSAgY2tsdG9hKCkg YW5kIGNraXRvYSgpIGFyZSBsaWtlIGF0b2woKSBhbmQgYXRvaSgpIGluIHRoZSByZXZlcnNlIGRp cmVjdGlvbiwKLSAgcmV0dXJuaW5nIGEgcG9pbnRlciB0byB0aGUgc3RyaW5nIHJlcHJlc2VudGF0 aW9uIG9mIHRoZSBnaXZlbiBudW1iZXIgd2l0aG91dAotICB0aGUgY2FsbGVyIGhhdmluZyB0byB3 b3JyeSBhYm91dCBhbGxvY2F0aW5nIG9yIGRlZmluaW5nIGEgYnVmZmVyIGZpcnN0LgotICBUaGV5 IG1hbmFnZSB0aGVpciBvd24gaW50ZXJuYWwgYnVmZmVyLCBzbyBzdWNjZXNzaXZlIGNhbGxzIHJl dHVybiBkaWZmZXJlbnQKLSAgcG9pbnRlcnMuICBIb3dldmVyLCB0byBrZWVwIG1lbW9yeSBjb25z dW1wdGlvbiBmcm9tIGdyb3dpbmcgd2l0aG91dCBib3VuZCwKLSAgdGhlIGJ1ZmZlciByZWN5Y2xl cyBpdHNlbGYuICBTbyBhZnRlciBzZXZlcmFsIGh1bmRyZWQgY2FsbHMgKGRlcGVuZGluZyBvbgot ICB0aGUgc2l6ZSBvZiB0aGUgbnVtYmVycyksIHNvbWUgb2YgdGhlIGVhcmxpZXIgcG9pbnRlcnMg bWlnaHQgd2VsbCBmaW5kCi0gIHRoZW1zZWx2ZXMgcmVmZXJlbmNpbmcgc29tZXRoaW5nIGRpZmZl cmVudC4gIE1vcmFsOiBZb3UgY2FuJ3Qgd2luIGluIEMuCi0gIFRoZXJlZm9yZSwgdGhlc2Ugcm91 dGluZXMgYXJlIGludGVuZGVkIG1haW5seSBmb3IgZ2VuZXJhdGluZyBudW1lcmljIHN0cmluZ3MK LSAgZm9yIHNob3J0LXRlcm0gdXNlLCBlLmcuIGZvciBwYXNzaW5nIG51bWJlcnMgaW4gc3RyaW5n IGZvcm0gYXMgcGFyYW1ldGVycyB0bwotICBmdW5jdGlvbnMuICBGb3IgbG9uZy10ZXJtIHVzZSwg dGhlIHJlc3VsdCBtdXN0IGJlIGNvcGllZCB0byBhIHNhZmUgcGxhY2UuCi0qLwotY2hhciAqCi0j aWZkZWYgQ0tfQU5TSUMKLWNrbHRvYShsb25nIG4pCi0jZWxzZQotY2tsdG9hKG4pIGxvbmcgbjsK LSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogY2tsdG9hICovIHsKLSAgICBjaGFyIGJ1ZlszMl07 CQkJLyogSW50ZXJuYWwgd29ya2luZyBidWZmZXIgKi8KLSAgICBjaGFyICogcCwgKiBzLCAqIHE7 Ci0gICAgaW50IGssIHgsIGxlbiA9IDAsIHNpZ24gPSAwOwotICAgIGlmIChuIDwgMEwpIHsJCQkv KiBTaWduICovCi0JbiA9IDBMIC0gbjsKLQlzaWduID0gMTsKLSAgICB9Ci0gICAgYnVmWzMxXSA9 IE5VTDsKLSAgICBmb3IgKGsgPSAzMDsgayA+IDA7IGstLSkgewkJLyogQ29udmVydCBudW1iZXIg dG8gc3RyaW5nICovCi0JeCA9IG4gJSAxMEw7Ci0JYnVmW2tdID0geCArICcwJzsKLQluID0gbiAv IDEwTDsKLQlpZiAoIW4pCi0JICBicmVhazsKLSAgICB9Ci0gICAgaWYgKHNpZ24pIGJ1ZlstLWtd ID0gJy0nOwkJLyogQWRkIHNpZ24gaWYgbmVjZXNzYXJ5ICovCi0gICAgbGVuID0gMzEgLSBrOwot ICAgIGlmIChsZW4gKyBudW1icCA+IE5VTUJVRikKLSAgICAgIG51bWJwID0gMDsKLSAgICBwID0g bnVtYnVmICsgbnVtYnA7Ci0gICAgcSA9IHA7Ci0gICAgcyA9IGJ1ZiArIGs7Ci0gICAgd2hpbGUg KCgqcCsrID0gKnMrKykpIDsJCS8qIENvcHkgKi8KLSAgICAqcCsrID0gTlVMOwotICAgIG51bWJw ICs9IGxlbisxOwotICAgIHJldHVybihxKTsJCQkJLyogUmV0dXJuIHBvaW50ZXIgKi8KLX0KLQot LyogIEMgSyBVIEwgVCBPIEEgIC0tICBVbnNpZ25lZCBsb25nIHRvIHN0cmluZyAgKi8KLQotY2hh ciAqCi0jaWZkZWYgQ0tfQU5TSUMKLWNrdWx0b2EodW5zaWduZWQgbG9uZyBuKQotI2Vsc2UKLWNr dWx0b2EobikgdW5zaWduZWQgbG9uZyBuOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBja3Vs dG9hICovIHsKLSAgICBjaGFyIGJ1ZlszMl07CQkJLyogSW50ZXJuYWwgd29ya2luZyBidWZmZXIg Ki8KLSAgICBjaGFyICogcCwgKiBzLCAqIHE7Ci0gICAgaW50IGssIHgsIGxlbiA9IDA7Ci0gICAg YnVmWzMxXSA9IE5VTDsKLSAgICBmb3IgKGsgPSAzMDsgayA+IDA7IGstLSkgewkJLyogQ29udmVy dCBudW1iZXIgdG8gc3RyaW5nICovCi0JeCA9IG4gJSAxMEw7Ci0JYnVmW2tdID0geCArICcwJzsK LQluID0gbiAvIDEwTDsKLQlpZiAoIW4pCi0JICBicmVhazsKLSAgICB9Ci0gICAgbGVuID0gMzEg LSBrOwotICAgIGlmIChsZW4gKyBudW1icCA+IE5VTUJVRikKLSAgICAgIG51bWJwID0gMDsKLSAg ICBwID0gbnVtYnVmICsgbnVtYnA7Ci0gICAgcSA9IHA7Ci0gICAgcyA9IGJ1ZiArIGs7Ci0gICAg d2hpbGUgKCgqcCsrID0gKnMrKykpIDsJCS8qIENvcHkgKi8KLSAgICBudW1icCArPSBsZW4rMTsK LSAgICByZXR1cm4ocSk7CQkJCS8qIFJldHVybiBwb2ludGVyICovCi19Ci0KLWNoYXIgKgotI2lm ZGVmIENLX0FOU0lDCi1ja2x0b3gobG9uZyBuKQkJCQkvKiBMb25nIGludCB0byAiMHguLiIgaGV4 IHN0cmluZyAqLwotI2Vsc2UKLWNrbHRveChuKSBsb25nIG47Ci0jZW5kaWYgLyogQ0tfQU5TSUMg Ki8KLS8qIGNrbHRveCAqLyB7Ci0gICAgY2hhciBidWZbMzJdOwkJCS8qIEludGVybmFsIHdvcmtp bmcgYnVmZmVyICovCi0gICAgY2hhciAqcCwgKnEsICpzLCAqYnAgPSBidWYgKyAyOwotICAgIGlu dCBrOwotICAgIGJ1ZlswXSA9ICcwJzsKLSAgICBidWZbMV0gPSAneCc7Ci0gICAgc3ByaW50Zihi cCwgIiVseCIsIG4pOwotICAgIGsgPSBzdHJsZW4oYnApOwotICAgIGlmIChrJjEpIHsKLQlzcHJp bnRmKGJwLCAiMCVseCIsIG4pOwotCWsrKzsKLSAgICB9Ci0gICAgayArPSAyOwkJCQkvKiAiMHgi ICovCi0gICAgaWYgKG51bWJwICsgayA+PSBOVU1CVUYpCi0gICAgICBudW1icCA9IDA7Ci0gICAg cCA9IG51bWJ1ZiArIG51bWJwOwotICAgIHEgPSBwOwotICAgIHMgPSBidWY7Ci0gICAgd2hpbGUg KCgqcCsrID0gKnMrKykpIDsJCS8qIENvcHkgKi8KLSAgICAqcCsrID0gTlVMOwotICAgIG51bWJw ICs9IGsrMTsKLSAgICByZXR1cm4ocSk7CQkJCS8qIFJldHVybiBwb2ludGVyICovCi19Ci0KLQot LyogIEMgSyBGIFMgVCBPIEEgIC0tICBGaWxlIFNpemUgKG9yIG9mZnNldCkgdG8gc3RyaW5nICAq LwotCi0vKiBUaGlzIGlzIGp1c3QgbGlrZSBja2x0b2EoKSBleGNlcHQgZm9yIHRoZSBkYXRhIHR5 cGUgb2YgdGhlIGFyZ3VtZW50LiAqLwotLyogSXQncyBtYWlubHkgZm9yIHByaW50aW5nIGZpbGUg c2l6ZXMgd2l0aG91dCBoYXZpbmcgdG8ga25vdyB0aGVpciBkYXRhICovCi0vKiB0eXBlLCBzbyB3 ZSBkb24ndCBoYXZlIHRvIGhhcmR3YXJlICIlbGQiIG9yICIlbGxkIiBpbnRvIHByaW50Zigpcy4g Ki8KLS8qIFdvcmtzIGZvciAzMiBvciA2NCBiaXRzLCBhY2NvcmRpbmcgdG8gQ0tfT0ZGX1QgZGVm aW5pdGlvbi4gKi8KLQotY2hhciAqCi0jaWZkZWYgQ0tfQU5TSUMKLWNrZnN0b2EoQ0tfT0ZGX1Qg bikKLSNlbHNlCi1ja2ZzdG9hKG4pIENLX09GRl9UIG47Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8K LS8qIGNrZnN0b2EgKi8gewotICAgIGNoYXIgYnVmWzMyXTsJCQkvKiBJbnRlcm5hbCB3b3JraW5n IGJ1ZmZlciAqLwotICAgIGNoYXIgKiBwLCAqIHMsICogcTsKLSAgICBpbnQgaywgeCwgbGVuID0g MCwgc2lnbiA9IDA7Ci0KLSAgICBpZiAobiA8IChDS19PRkZfVCkwKSB7CQkvKiBTaWduICovCi0J biA9IChDS19PRkZfVCkwIC0gbjsKLQlzaWduID0gMTsKLSAgICB9Ci0gICAgYnVmWzMxXSA9IE5V TDsJCQkvKiAyXjYzLTEgaXMgYWJvdXQgMjAgZGVjaW1hbCBkaWdpdHMgKi8KLSAgICBmb3IgKGsg PSAzMDsgayA+IDA7IGstLSkgewkJLyogQ29udmVydCBudW1iZXIgdG8gc3RyaW5nICovCi0JeCA9 IG4gJSAoQ0tfT0ZGX1QpMTA7Ci0JaWYgKHggPCAwKSB7Ci0JICAgIC8qIHggKz0gMTA7ICovCi0J ICAgIGNrc3RybmNweSgmYnVmWzIzXSwiT1ZFUkZMT1ciLDMyKTsKLQkgICAgc2lnbiA9IDA7Ci0J ICAgIGsgPSAyMzsKLQkgICAgYnJlYWs7Ci0JfQotCWJ1ZltrXSA9IHggKyAnMCc7Ci0JbiA9IG4g LyAoQ0tfT0ZGX1QpMTA7Ci0JaWYgKCFuKQotCSAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChzaWdu KSBidWZbLS1rXSA9ICctJzsJCS8qIEFkZCBzaWduIGlmIG5lY2Vzc2FyeSAqLwotICAgIGxlbiA9 IDMxIC0gazsKLSAgICBpZiAobGVuICsgbnVtYnAgPiBOVU1CVUYpCi0gICAgICBudW1icCA9IDA7 Ci0gICAgcCA9IG51bWJ1ZiArIG51bWJwOwotICAgIHEgPSBwOwotICAgIHMgPSBidWYgKyBrOwot ICAgIHdoaWxlICgoKnArKyA9ICpzKyspKSA7CQkvKiBDb3B5ICovCi0gICAgKnArKyA9IE5VTDsK LSAgICBudW1icCArPSBsZW4rMTsKLSAgICByZXR1cm4ocSk7CQkJCS8qIFJldHVybiBwb2ludGVy ICovCi19Ci0KLS8qICBDIEsgQSBUIE8gRiBTICAtLSAgU3RyaW5nIHRvIEZpbGUgU2l6ZSAob3Ig b2Zmc2V0KSAqLwotCi0vKiBUaGlzIGlzIHRoZSBpbnZlcnNlIG9mIGNrZnN0b2EoKSwgYSByZXBs YWNlbWVudCBmb3IgYXRvbCgpIHRoYXQgd29ya3MgKi8KLS8qIGZvciBlaXRoZXIgMzItYml0IG9y IDY0LWJpdCBhcmd1bWVudHMsIGFjY29yZGluZyB0byBDS19PRkZfVCBkZWZpbml0aW9uLiAqLwot LyogTGlrZSBhdG9sKCksIHRoZXJlIGlzIG5vIGVycm9yIGluZGljYXRpb24uICovCi0KLUNLX09G Rl9UCi0jaWZkZWYgQ0tfQU5TSUMKLWNrYXRvZnMoY2hhciAqIHMpCi0jZWxzZQotY2thdG9mcyhz KSBjaGFyICogczsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogY2thdG9mcyAqLyB7Ci0gICAg Q0tfT0ZGX1QgcmVzdWx0ID0gKENLX09GRl9UKTA7Ci0gICAgaW50IG1pbnVzID0gMDsKLSAgICB3 aGlsZSAoKnMgJiYgKCpzID09IFNQIHx8ICpzID09IEhUKSkgcysrOwotICAgIGlmICgqcyA9PSAn KycpIHMrKzsKLSAgICBpZiAoKnMgPT0gJy0nKSB7Ci0JbWludXMgPSAxOwotCXMrKzsKLSAgICB9 Ci0gICAgd2hpbGUgKGlzZGlnaXQoKnMpKSB7Ci0JcmVzdWx0ID0gKHJlc3VsdCAqIChDS19PRkZf VCkxMCkgKyAoQ0tfT0ZGX1QpKCpzIC0gJzAnKTsKLQlzKys7Ci0gICAgfQotICAgIHJldHVybiht aW51cyA/IC1yZXN1bHQgOiByZXN1bHQpOwotfQotCi0vKiAgQyBLIEkgVCBPIEEgIC0tICBJbnQg dG8gc3RyaW5nICAtLSBGT1IgRElTQ0lQTElORUQgVVNFIE9OTFkgICovCi0KLWNoYXIgKgotY2tp dG9hKG4pIGludCBuOyB7CQkJLyogU2VlIGNvbW1lbnRzIHdpdGggY2tsdG9hKCkuICovCi0gICAg bG9uZyBubjsKLSAgICBubiA9IG47Ci0gICAgcmV0dXJuKGNrbHRvYShubikpOwotfQotCi0KLWNo YXIgKgkJCQkJLyogVW5zaWduZWQgaW50IHRvIHN0cmluZyAqLwotY2t1aXRvYShuKSB1bnNpZ25l ZCBpbnQgbjsgewotICAgIHVuc2lnbmVkIGxvbmcgbm47Ci0gICAgbm4gPSBuOwotICAgIHJldHVy bihja3VsdG9hKG5uKSk7Ci19Ci0KLWNoYXIgKgotY2tpdG94KG4pIGludCBuOyB7CQkJLyogSW50 IHRvIGhleCAqLwotICAgIGxvbmcgbm47Ci0gICAgbm4gPSBuOwotICAgIHJldHVybihja2x0b3go bm4pKTsKLX0KLQotY2hhciAqCi0jaWZkZWYgQ0tfQU5TSUMKLWNrY3RvYShjaGFyIGMpCQkJCS8q IENoYXIgdG8gc3RyaW5nICovCi0jZWxzZQotY2tjdG9hKGMpIGNoYXIgYzsKLSNlbmRpZgotLyog Y2tjdG9hICovIHsKLSAgICBzdGF0aWMgY2hhciBidWZbMzJdOwotICAgIHN0YXRpYyBpbnQgY3Vy cmVudCA9IDA7Ci0gICAgaWYgKGN1cnJlbnQgPj0gMzApCi0gICAgICBjdXJyZW50ID0gMDsKLSAg ICBidWZbY3VycmVudCsrXSA9IGM7Ci0gICAgYnVmW2N1cnJlbnQrK10gPSAnXDAnOwotICAgIHJl dHVybigoY2hhciAqKShidWYgKyBjdXJyZW50IC0gMikpOwotfQotCi1jaGFyICoKLSNpZmRlZiBD S19BTlNJQwotY2tjdG94KENIQVIgYywgaW50IGZsYWcpCQkvKiBVbnNpZ25lZCBjaGFyIHRvIGhl eCAqLwotI2Vsc2UKLWNrY3RveChjLCBmbGFnKSBDSEFSIGM7IGludCBmbGFnOwotI2VuZGlmCi0v KiBja2N0b3ggKi8gewotICAgIHN0YXRpYyBjaGFyIGJ1Zls0OF07Ci0gICAgc3RhdGljIGludCBj dXJyZW50ID0gMDsKLSAgICBpbnQgeDsKLSAgICBjaGFyIGg7Ci0gICAgaWYgKGN1cnJlbnQgPiA0 NSkKLSAgICAgIGN1cnJlbnQgPSAwOwotICAgIHggPSAoYyA+PiA0KSAmIDB4MGY7Ci0gICAgaCA9 IHJ4ZGlnaXRzW3hdOwotICAgIGlmICghZmxhZyAmJiBpc3VwcGVyKHJ4ZGlnaXRzW3hdKSkKLSAg ICAgIGggPSB0b2xvd2VyKHJ4ZGlnaXRzW3hdKTsKLSAgICBidWZbY3VycmVudCsrXSA9IGg7Ci0g ICAgeCA9IGMgJiAweDBmOwotICAgIGggPSByeGRpZ2l0c1t4XTsKLSAgICBpZiAoIWZsYWcgJiYg aXN1cHBlcihyeGRpZ2l0c1t4XSkpCi0gICAgICBoID0gdG9sb3dlcihyeGRpZ2l0c1t4XSk7Ci0g ICAgYnVmW2N1cnJlbnQrK10gPSBoOwotICAgIGJ1ZltjdXJyZW50KytdID0gJ1wwJzsKLSAgICBy ZXR1cm4oKGNoYXIgKikoYnVmICsgY3VycmVudCAtIDMpKTsKLX0KLQotLyogIEMgSyBJIE4gRCBF IFggIC0tICBDLUtlcm1pdCdzIGluZGV4IGZ1bmN0aW9uICAqLwotLyoKLSAgV2UgY2FuJ3QgZGVw ZW5kIG9uIEMgbGlicmFyaWVzIHRvIGhhdmUgb25lLCBzbyBoZXJlIGlzIG91ciBvd24uCi0gIENh bGwgd2l0aDoKLSAgICBzMSAtIFN0cmluZyB0byBsb29rIGZvci4KLSAgICBzMiAtIFN0cmluZyB0 byBsb29rIGluLgotICAgICB0IC0gT2Zmc2V0IGZyb20gcmlnaHQgb3IgbGVmdCBvZiBzMiwgMCBi YXNlZDsgLTEgZm9yIHJpZ2h0bW9zdCBjaGFyIGluIHMyLgotICAgICByIC0gMCBmb3IgbGVmdC10 by1yaWdodCBzZWFyY2gsIG5vbi0wIGZvciByaWdodC10by1sZWZ0LgotICBpY2FzZSAgMCBmb3Ig Y2FzZSBpbmRlcGVuZGVuY2UsIG5vbi0wIGlmIGFscGhhYmV0aWMgY2FzZSBtYXR0ZXJzLgotICBS ZXR1cm5zIDAgaWYgc3RyaW5nIG5vdCBmb3VuZCwgb3RoZXJ3aXNlIGEgMS1iYXNlZCByZXN1bHQu Ci0gIEFsc28gcmV0dXJucyAwIG9uIGFueSBraW5kIG9mIGVycm9yLCBlLmcuIGp1bmsgcGFyYW1l dGVycy4KLSovCi1pbnQKLWNraW5kZXgoczEsczIsdCxyLGljYXNlKSBjaGFyICpzMSwgKnMyOyBp bnQgdCwgciwgaWNhc2U7IHsKLSAgICBpbnQgbGVuMSA9IDAsIGxlbjIgPSAwLCBpLCBqLCB4LCBv dCA9IHQ7IC8qIG90ID0gb3JpZ2luYWwgdCAqLwotICAgIGNoYXIgKiBzOwotCi0gICAgaWYgKCFz MSB8fCAhczIpIHJldHVybigwKTsKLSAgICBzID0gczE7Ci0gICAgd2hpbGUgKCpzKyspIGxlbjEr KzsJCS8qIGxlbmd0aCBvZiBzdHJpbmcgdG8gbG9vayBmb3IgKi8KLSAgICBzID0gczI7Ci0gICAg d2hpbGUgKCpzKyspIGxlbjIrKzsJCS8qIGxlbmd0aCBvZiBzdHJpbmcgdG8gbG9vayBpbiAqLwot ICAgIHMgPSBzMjsKLSAgICBpZiAodCA8IDApIHQgPSBsZW4yIC0gMTsKLQotICAgIGogPSBsZW4y IC0gbGVuMTsJCQkvKiBsZW5ndGggZGlmZmVyZW5jZSAqLwotCi0gICAgaWYgKGogPCAwIHx8IChy ID09IDAgJiYgdCA+IGopKQkvKiBzZWFyY2ggc3RyaW5nIGlzIGxvbmdlciAqLwotICAgICAgcmV0 dXJuKDApOwotICAgIGlmIChyID09IDApIHsJCQkvKiBJbmRleCAqLwotCXMgPSBzMiArIHQ7CQkJ LyogUG9pbnQgdG8gYmVnaW5uaW5nIG9mIHRhcmdldCAqLwotCWZvciAoaSA9IDA7IGkgPD0gKGog LSB0KTsgaSsrKSB7IC8qIE5vdyBjb21wYXJlICovCi0JICAgIHggPSBja3N0cmNtcChzMSxzKyss bGVuMSxpY2FzZSk7Ci0JICAgIGlmICgheCkKLQkgICAgICByZXR1cm4oaSsxK3QpOwotCX0KLSAg ICB9IGVsc2UgewkJCQkvKiBSZXZlcnNlIEluZGV4ICovCi0gICAgICAgIGkgPSBsZW4yIC0gbGVu MTsJCS8qIFdoZXJlIHRvIHN0YXJ0IGxvb2tpbmcgKi8KLSAgICAgICAgaWYgKG90ID4gMCkJCQkv KiBGaWd1cmUgaW4gb2Zmc2V0IGlmIGFueSAqLwotCSAgaSAtPSB0OwotCWZvciAoaiA9IGk7IGog PiAtMTsgai0tKSB7Ci0JICAgIGlmICghY2tzdHJjbXAoczEsJnMyW2pdLGxlbjEsaWNhc2UpKQot CSAgICAgIHJldHVybihqKzEpOwotCX0KLSAgICB9Ci0gICAgcmV0dXJuKDApOwotfQotCi0vKiAg QyBLIFMgVCBSIFMgVCBSICAtLSAgUG9ydGFibGUgcmVwbGFjZW1lbnQgZm9yIHN0cnN0cigpICAq LwotCi0vKiAgUmV0dXJucyBwb2ludGVyIHRvIGZpcnN0IG9jY3VycmVuY2Ugb2YgczEgaW4gczIs IG9yIE5VTEwgKi8KLQotY2hhciAqCi1ja3N0cnN0cihzMSwgczIpIGNoYXIgKiBzMSwgKiBzMjsg ewotICAgIGludCBrOwotICAgIGsgPSBja2luZGV4KHMyLHMxLDAsMCwxKTsKLSAgICByZXR1cm4o KGsgPCAxKSA/IE5VTEwgOiAmczFbay0xXSk7Ci19Ci0KLQotLyogIEIgUiBTIFQgUiBJIFAgIC0t ICBTdHJpcCBlbmNsb3NpbmcgYnJhY2VzIGZyb20gYXJnIHN0cmluZywgaW4gcGxhY2UuICovCi0v KgotICBDYWxsIHdpdGg6Ci0gICAgUG9pbnRlciB0byBzdHJpbmcgdGhhdCBjYW4gYmUgcG9rZWQu Ci0gIFJldHVybnM6Ci0gICAgUG9pbnRlciB0byBzdHJpbmcgd2l0aG91dCBlbmNsb3NpbmcgYnJh Y2VzLgotICAgIElmIG9yaWdpbmFsIHN0cmluZyB3YXMgbm90IGJyYWNlZCwgdGhpcyBpcyB0aGUg YXJnIHBvaW50ZXI7Ci0gICAgb3RoZXJ3aXNlIGl0IGlzIDEgKyB0aGUgYXJnIHBvaW50ZXIsIHdp dGggdGhlIG1hdGNoaW5nIGNsb3NpbmcKLSAgICBicmFjZSB6ZXJvJ2Qgb3V0LiAgSWYgdGhlIHN0 cmluZyBzdGFydHMgd2l0aCBhIGJyYWNlIGJ1dCBkb2VzCi0gICAgbm90IGVuZCB3aXRoIGEgbWF0 Y2hpbmcgYnJhY2UsIHRoZSBvcmlnaW5hbCBwb2ludGVyIHRvIHRoZSBvcmlnaW5hbAotICAgIHN0 cmluZyBpcyByZXR1cm5lZC4gIElmIHRoZSBhcmcgcG9pbnRlciBpcyBOVUxMLCBhIHBvaW50ZXIg dG8gYW4KLSAgICBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuCi0qLwotI2lmZGVmIENPTU1FTlQK LQotLyogVGhpcyBpcyB0aGUgb3JpZ2luYWwgdmVyc2lvbiwgaGFuZGxpbmcgb25seSBicmFjZXMg Ki8KLQotY2hhciAqCi1icnN0cmlwKHApIGNoYXIgKnA7IHsKLSAgICBpZiAoIXApIHJldHVybigi Iik7Ci0gICAgaWYgKCpwID09ICd7JykgewotCWludCB4OwotCXggPSAoaW50KXN0cmxlbihwKSAt IDE7Ci0JaWYgKHBbeF0gPT0gJ30nKSB7Ci0JICAgIHBbeF0gPSBOVUw7Ci0JICAgIHArKzsKLQl9 Ci0gICAgfQotICAgIHJldHVybihwKTsKLX0KLQotI2Vsc2UKLS8qIE5ldyB2ZXJzaW9uIGhhbmRs ZXMgYnJhY2VzIGFuZCBkb3VibGVxdW90ZXMgKi8KLS8qIFdBUk5JTkc6IHRoaXMgZnVuY3Rpb24g d3JpdGVzIGludG8gaXRzIGFyZ3VtZW50LCBpdCBhbHdheXMgaGFzLiAqLwotCi1jaGFyICoKLWJy c3RyaXAocCkgY2hhciAqcDsgewotICAgIGlmICghcCkgcmV0dXJuKCIiKTsKLSAgICBpZiAoKnAg PT0gJ3snIHx8ICgqcCA9PSAnIicgJiYgZGJscXVvKSkgewotCWludCB4OwotCXggPSAoaW50KXN0 cmxlbihwKSAtIDE7Ci0JaWYgKHggPiAwKSB7Ci0JICAgIGlmICgoKnAgPT0gJ3snICYmIHBbeF0g PT0gJ30nKSB8fAotCQkoKnAgPT0gJyInICYmIHBbeF0gPT0gJyInKSkgewotCQlpZiAoeCA+IDAg JiYgcFt4LTFdICE9IENNRFEpIHsKLQkJICAgIHBbeF0gPSBOVUw7Ci0JCSAgICBwKys7Ci0JCX0K LQkgICAgfQotCX0KLSAgICB9Ci0gICAgcmV0dXJuKHApOwotfQotI2VuZGlmIC8qIENPTU1FTlQg Ki8KLQotI2lmZGVmIENPTU1FTlQKLQotLyogRXZlbiBuZXdlciBleHBlcmltZW50YWwgdmVyc2lv biAtLSBicmVha3MgbWFueSB0aGluZ3MgKi8KLQotY2hhciAqCi1mbnN0cmlwKHApIGNoYXIgKnA7 IHsKLSAgICBpbnQgaSwgaiwgaywgbiwgbGVuOwotICAgIGV4dGVybiBpbnQgY21kX3F1b3Rpbmc7 CQkvKiBCYWQgLSBubyBleHRlcm5zIGFsbG93ZWQhICovCi0KLSAgICBpZiAoIXApCi0gICAgICBy ZXR1cm4oIiIpOwotCi0gICAgaWYgKCpwID09ICd7JykgewotICAgICAgICBsZW4gPSBzdHJsZW4o cCk7Ci0gICAgICAgIG4gPSAwOwotCi0gICAgICAgIGZvciAoaiA9IDA7IGogPCBsZW47IGorKyAp IHsKLSAgICAgICAgICAgIGlmIChwW2pdID09ICd7JyAmJgotCQkoIWNtZF9xdW90aW5nIHx8IGog PT0gMCB8fCBwW2otMV0gIT0gQ01EUSkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKG4gPSAxLCBp ID0gaisxOyBpIDwgbGVuOyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwW2ldID09 ICd7JyAmJiAoIWNtZF9xdW90aW5nIHx8IHBbaS0xXSAhPSBDTURRKSkKLQkJICAgICAgbisrOwot ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwW2ldID09ICd9JyAmJiAoIWNtZF9xdW90aW5n IHx8IHBbaS0xXSAhPSBDTURRKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC0tbiA9 PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gajsgayA8IGkgLSAx OyBrKyspCi0JCQkgICAgICBwW2tdID0gcFtrKzFdOwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZvciAoOyBpIDwgbGVuOyBpKysgKQotCQkJICAgICAgcFtpLTFdID0gcFtpKzFdOwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtPSAyOwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGogPSBpIC0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot ICAgICAgICBpZiAobiA9PSAxKSB7IC8qIEltcGxpZWQgcmlnaHQgYnJhY2UgYXQgZW5kIG9mIGZp ZWxkICovCi0gICAgICAgICAgICBmb3IgKGsgPSBqOyBrIDwgbGVuOyBrKyspCi0JICAgICAgcFtr XSA9IHBbaysxXTsKLSAgICAgICAgICAgIGxlbiAtPSAxOwotICAgICAgICB9Ci0gICAgfSBlbHNl IGlmICgqcCA9PSAnIicpIHsKLSAgICAgICAgbGVuID0gc3RybGVuKHApOwotICAgICAgICBuID0g MDsKLQotICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspIHsKLSAgICAgICAgICAgIGlm IChwW2pdID09ICciJyAmJgotCQkoIWNtZF9xdW90aW5nIHx8IGogPT0gMCB8fCBwW2otMV0gIT0g Q01EUSkpIHsKLSAgICAgICAgICAgICAgICBuKys7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGkg PSBqICsgMTsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwW2ldID09 ICciJyAmJiAoIWNtZF9xdW90aW5nIHx8IHBbaS0xXSAhPSBDTURRKSkgewotICAgICAgICAgICAg ICAgICAgICAgICAgbi0tOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGsgPSBqOyBr IDwgaSAtIDE7IGsrKykKLQkJCSAgcFtrXSA9IHBbaysxXTsKLSAgICAgICAgICAgICAgICAgICAg ICAgIGZvciAoOyBpIDwgbGVuOyBpKyspCi0JCQkgIHBbaS0xXSA9IHBbaSsxXTsKLSAgICAgICAg ICAgICAgICAgICAgICAgIGxlbiAtPSAyOwotICAgICAgICAgICAgICAgICAgICAgICAgaiA9IGkg LSAxOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChuID09IDEpIHsgLyogSW1wbGllZCBkb3VibGUg cXVvdGUgYXQgZW5kIG9mIGZpZWxkICovCi0gICAgICAgICAgICBmb3IgKGsgPSBqOyBrIDwgbGVu OyBrKysgKQotCSAgICAgIHBba10gPSBwW2srMV07Ci0gICAgICAgICAgICBsZW4gLT0gMTsKLSAg ICAgICAgfQotICAgIH0KLSAgICByZXR1cm4ocCk7Ci19Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwot Ci0jaWZkZWYgQ09NTUVOVAotLyoKLSAgTm90IHVzZWQgLS0gTm90ZTogdGhlc2Ugbm90IG9ubHkg d3JpdGUgaW50byB0aGVpciBhcmcsIGJ1dCB3cml0ZSBwYXN0Ci0gIHBhc3QgdGhlIGVuZC4KLSov Ci1jaGFyICoKLWJyYWNlKGZuKSBjaGFyICpmbjsgewotICAgIGludCBzcGFjZXMgPSAwOwotICAg IGNoYXIgKiBwLCBjaCwgY2gyOwotICAgIGZvciAocCA9IGZuOyAqcDsgcCsrKSB7Ci0JaWYgKCpw ID09IFNQKSB7Ci0JICAgIHNwYWNlcyA9IDE7Ci0JICAgIGJyZWFrOwotCX0KLSAgICB9Ci0gICAg aWYgKHNwYWNlcykgewotICAgICAgICBwID0gZm47Ci0gICAgICAgIGNoID0gKnA7Ci0gICAgICAg ICpwID0gJ3snOwotICAgICAgICBwKys7Ci0KLSAgICAgICAgd2hpbGUgKCpwKSB7Ci0gICAgICAg ICAgICBjaDIgPSAqcDsKLSAgICAgICAgICAgICpwID0gY2g7Ci0gICAgICAgICAgICBjaCA9IGNo MjsKLSAgICAgICAgICAgIHArKzsKLSAgICAgICAgfQotICAgICAgICAqcCA9IGNoOwotICAgICAg ICBwKys7Ci0gICAgICAgICpwID0gJ30nOwotICAgICAgICBwKys7Ci0gICAgICAgICpwID0gJ1ww JzsKLSAgICB9Ci0gICAgcmV0dXJuKGZuKTsKLX0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLS8q IGQgcSB1IG8gdCBlICAtLSAgUHV0cyBkb3VibGVxdW90ZXMgYXJvdW5kIGFyZyBpbiBwbGFjZS4g Ki8KLS8qCi0gICBDYWxsIHdpdGg6Ci0gICAgIFBvaW50ZXIgdG8gYnVmZmVyIGFuZCBpdHMgdG90 YWwgbGVuZ3RoIGFuZCBmbGFnID0gMCB0byB1c2UKLSAgICAgZG91YmxlcXVvdGVzLCAxIHRvIHVz ZSBicmFjZXMuCi0gICBSZXR1cm5zOgotICAgICBOdW1iZXI6IGxlbmd0aCBvZiByZXN1bHQuCi0q LwotaW50Ci1kcXVvdGUoZm4sIGxlbiwgZmxhZykgY2hhciAqZm47IGludCBsZW47IGludCBmbGFn OyB7Ci0gICAgaW50IHNwYWNlcyA9IDAsIGsgPSAwOwotICAgIGNoYXIgKiBwLCBjaCwgY2gyOwot ICAgIGlmICghZm4pCi0gICAgICByZXR1cm4oMCk7Ci0KLSAgICBrID0gc3RybGVuKGZuKTsKLSAg ICBmb3IgKHAgPSBmbjsgKnA7IHArKykgewotCWlmICgqcCA9PSBTUCkgewotICAgICAgICAgICAg c3BhY2VzID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIGlm IChzcGFjZXMpIHsKLQlpZiAoayArIDIgPj0gbGVuKQotCSAgcmV0dXJuKGspOwotICAgICAgICBw ID0gZm47Ci0gICAgICAgIGNoID0gKnA7Ci0gICAgICAgICpwID0gZmxhZyA/ICd7JyA6ICciJzsK LSAgICAgICAgcCsrOwotCi0gICAgICAgIHdoaWxlICgqcCkgewotICAgICAgICAgICAgY2gyID0g KnA7Ci0gICAgICAgICAgICAqcCA9IGNoOwotICAgICAgICAgICAgY2ggPSBjaDI7Ci0gICAgICAg ICAgICBwKys7Ci0gICAgICAgIH0KLSAgICAgICAgKnAgPSBjaDsKLSAgICAgICAgcCsrOwotICAg ICAgICAqcCA9IGZsYWcgPyAnfScgOiAnIic7Ci0gICAgICAgIHArKzsKLSAgICAgICAgKnAgPSAn XDAnOwotICAgIH0KLSAgICByZXR1cm4oaysyKTsKLX0KLQotCi0vKiAgVSBOIFQgQSBCIEkgRiBZ ICAtLS0gIFVudGFiaWZ5IHMxIGludG8gczIsIGFzc3VtaW5nIHRhYnMgZXZlcnkgOCBzcGFjZSAq LwotCi1pbnQKLXVudGFiaWZ5KHMxLHMyLG1heCkgY2hhciAqIHMxLCAqIHMyOyBpbnQgbWF4OyB7 Ci0gICAgaW50IGksIGosIGssIHgsIHo7Ci0gICAgeCA9IHN0cmxlbihzMSk7Ci0gICAgZm9yIChp ID0gMCwgayA9IDA7IGsgPCB4OyBrKyspIHsKLQlpZiAoczFba10gIT0gJ1x0JykgewotCSAgICBp ZiAoaSA+PSBtYXgtMSkgewotCQlzMlttYXgtMV0gPSAnXDAnOwotCQlyZXR1cm4oLTEpOwotCSAg ICB9Ci0JICAgIHMyW2krK10gPSBzMVtrXTsKLQkgICAgY29udGludWU7Ci0JfQotCXogPSA4IC0g aSU4OwotCWlmICh6ID09IDApIHogPSA4OwotCWZvciAoaiA9IDA7IGogPCB6ICYmIGkgPCBtYXg7 IGorKykKLQkgIHMyW2krK10gPSAnICc7Ci0gICAgfQotICAgIHMyW2ldID0gJ1wwJzsKLSAgICBy ZXR1cm4oMCk7Ci19Ci0KLQotLyogIE0gQSBLIEUgTCBJIFMgVCAgLS0tICBCcmVha3Mge3tzMX17 czJ9Li57c259fSBpbnRvIGFuIGFycmF5IG9mIHN0cmluZ3MgKi8KLS8qCi0gIENhbGwgd2l0aDoK LSAgICBzICAgID0gcG9pbnRlciB0byBzdHJpbmcgdG8gYnJlYWsgdXAuCi0gICAgbGlzdCA9IGFy cmF5IG9mIHN0cmluZyBwb2ludGVycy4KLSAgICBsZW4gID0gbnVtYmVyIG9mIGVsZW1lbnRzIGlu IGFycmF5LgotICBOT1RFOiBUaGUgYXJyYXkgbXVzdCBiZSBwcmVpbml0aWFsaXplZCB0byBhbGwg TlVMTCBwb2ludGVycy4KLSAgSWYgYW55IGFycmF5IGVsZW1lbnQgaXMgbm90IE5VTEwsIGl0IGlz IGFzc3VtZWQgdG8gaGF2ZSBiZWVuIG1hbGxvYydkCi0gIGFuZCBpcyB0aGVyZWZvcmUgZnJlZWQu ICBEbyBOT1QgY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggYW4gdW5pbml0aWFsaXplZAotICBhcnJh eSwgb3Igd2l0aCBhbiBhcnJheSB0aGF0IGhhcyBoYWQgYW55IHN0YXRpYyBlbGVtZW50cyBhc3Np Z25lZCB0byBpdC4KLSovCi1WT0lECi1tYWtlbGlzdChzLGxpc3QsbGVuKSBjaGFyICogczsgY2hh ciAqbGlzdFtdOyBpbnQgbGVuOyB7Ci0gICAgaW50IGksIG4sIHEsIGJjID0gMDsKLSAgICBjaGFy ICpwID0gTlVMTCwgKnMyID0gTlVMTDsKLSAgICBkZWJ1ZyhGMTEwLCJtYWtlbGlzdCBzIixzLDAp OwotICAgIGlmICghcykgewkJCQkvKiBDaGVjayBmb3IgbnVsbCBvciBlbXB0eSBzdHJpbmcgKi8K LQlsaXN0WzBdID0gTlVMTDsKLQlyZXR1cm47Ci0gICAgfQotICAgIG4gPSBzdHJsZW4ocyk7Ci0g ICAgaWYgKG4gPT0gMCkgewotCWxpc3RbMF0gPSBOVUxMOwotCXJldHVybjsKLSAgICB9Ci0gICAg aWYgKChzMiA9IChjaGFyICopbWFsbG9jKG4rMSkpKSB7CS8qIFNhZmUgY29weSBmb3IgcG9raW5n ICovCi0Jc3RyY3B5KHMyLHMpOwkJCS8qIChubyBuZWVkIGZvciBja3N0cm5jcHkgaGVyZSkgKi8K LQlzID0gczI7Ci0gICAgfQotICAgIHMgPSBicnN0cmlwKHMpOwkJCS8qIFN0cmlwIGJyYWNlcyAq LwotICAgIG4gPSBzdHJsZW4ocyk7CQkJLyogR2V0IGxlbmd0aCAqLwotICAgIGlmICgqcyAhPSAn eycpIHsJCQkvKiBPdXRlciBicmFjZXMgb25seSAqLwotCWlmICgocCA9IChjaGFyICopbWFsbG9j KG4rMSkpKSB7IC8qIFNvIGp1c3Qgb25lIHBhdHRlcm4gKi8KLQkgICAgc3RyY3B5KHAscyk7CQkv KiAobm8gbmVlZCBmb3IgY2tzdHJuY3B5IGhlcmUpICovCi0JICAgIGlmIChsaXN0WzBdKQotCSAg ICAgIGZyZWUobGlzdFswXSk7Ci0JICAgIGxpc3RbMF0gPSBwOwotCX0KLQlpZiAoczIpIGZyZWUo czIpOwotCXJldHVybjsKLSAgICB9Ci0gICAgcSA9IDA7CQkJCS8qIElubmVyIG9uZXMgdG9vICov Ci0gICAgaSA9IDA7CQkJCS8qIHNvIGEgbGlzdCBvZiBwYXR0ZXJucy4gKi8KLSAgICBuID0gMDsK LSAgICB3aGlsZSAoKnMgJiYgaSA8IGxlbikgewotCWlmICgqcyA9PSBDTURRKSB7CQkvKiBRdW90 ZS4uLiAqLwotCSAgICBxID0gMTsKLQkgICAgcysrOwotCSAgICBuKys7Ci0JICAgIGNvbnRpbnVl OwotCX0KLQlpZiAoKnMgPT0gJ3snICYmICFxKSB7CQkvKiBPcGVuaW5nIGJyYWNlICovCi0JICAg IGlmIChiYysrID09IDApIHsJCS8qIEJlZ2lubmluZyBvZiBhIGdyb3VwICovCi0JCXAgPSArK3M7 Ci0JCW4gPSAwOwotCSAgICB9IGVsc2UgewkJCS8qIEl0J3MgYSBicmFjZSBpbnNpZGUgdGhlIGdy b3VwICovCi0JCW4rKzsKLQkJcysrOwotCSAgICB9Ci0JICAgIGNvbnRpbnVlOwotCX0gZWxzZSBp ZiAoKnMgPT0gJ30nICYmICFxKSB7CS8qIENsb3NpbmcgYnJhY2UgKi8KLQkgICAgaWYgKC0tYmMg PT0gMCkgewkJLyogRW5kIG9mIGEgZ3JvdXAgKi8KLQkJKnMrKyA9IE5VTDsKLQkJZGVidWcoRjEx MSwibWFrZWxpc3QgZWxlbWVudCIscCxpKTsKLQkJaWYgKGxpc3RbaV0pCi0JCSAgZnJlZShsaXN0 W2ldKTsKLQkJaWYgKChsaXN0W2ldID0gKGNoYXIgKiltYWxsb2MobisxKSkpIHsKLQkJICAgIGNr c3RybmNweShsaXN0W2ldLHAsbisxKTsgLyogTm90ZTogbisxICovCi0JCSAgICBpKys7Ci0JCX0K LQkJd2hpbGUgKCpzID09IFNQKSBzKys7Ci0JCXAgPSBzOwotCQluID0gMDsKLQkJY29udGludWU7 Ci0JICAgIH0gZWxzZSB7CQkJLyogV2l0aGluIGEgZ3JvdXAgKi8KLQkJbisrOwotCQlzKys7Ci0J ICAgIH0KLQl9IGVsc2UgewkJCS8qIFJlZ3VsYXIgY2hhcmFjdGVyICovCi0JICAgIHEgPSAwOwot CSAgICBzKys7Ci0JICAgIG4rKzsKLQl9Ci0gICAgfQotICAgIGlmICgqcCAmJiBpIDwgbGVuKSB7 CQkvKiBMYXN0IG9uZSAqLwotCWlmIChsaXN0W2ldKQotCSAgZnJlZShsaXN0W2ldKTsKLQlpZiAo KGxpc3RbaV0gPSAoY2hhciAqKW1hbGxvYyhuKzEpKSkgewotCSAgICBja3N0cm5jcHkobGlzdFtp XSxwLG4rMSk7Ci0JICAgIGRlYnVnKEYxMTEsIm1ha2VsaXN0IGxhc3QgZWxlbWVudCIscCxpKTsK LQl9Ci0gICAgfQotICAgIGkrKzsJCQkJLyogQ2xlYXIgb3V0IHRoZSByZXN0IG9mIHRoZSBsaXN0 ICovCi0gICAgZm9yICggOyBpIDwgbGVuOyBpKyspIHsKLQlpZiAobGlzdFtpXSkKLQkgIGZyZWUg KGxpc3RbaV0pOwotCWxpc3RbaV0gPSBOVUxMOwotICAgIH0KLSAgICBpZiAoczIpIGZyZWUoczIp OwotfQotCi0vKgotICAgTSBBIEsgRSBTIFQgUiAgLS0gIENyZWF0ZXMgYSBkeW5hbWljYWxseSBh bGxvY2F0ZWQgc3RyaW5nLgotCi0gICBNYWtlcyBhIG5ldyBjb3B5IG9mIHN0cmluZyBzIGFuZCBz ZXRzIHBvaW50ZXIgcCB0byBpdHMgYWRkcmVzcy4KLSAgIEhhbmRsZXMgZGVnZW5lcmF0ZSBjYXNl cywgbGlrZSB3aGVuIGJ1ZmZlcnMgb3ZlcmxhcCBvciBhcmUgdGhlIHNhbWUsCi0gICBvbmUgb3Ig Ym90aCBhcmd1bWVudHMgYXJlIE5VTEwsIGV0Yy4KLQotICAgVGhlIHNvdXJjZSBzdHJpbmcgaXMg YXNzdW1lZCB0byBiZSBOVUwtdGVybWluYXRlZC4gIFRoZXJlZm9yZSBpdCBjYW4gbm90Ci0gICBi ZSBhIFVDUy0yIHN0cmluZyBvciBhcmJpdHJhcnkgYmluYXJ5IGRhdGEuCi0KLSAgIFRoZSB0YXJn ZXQgcG9pbnRlciBtdXN0IGJlIGVpdGhlciBOVUxMIG9yIGVsc2UgYSBwb2ludGVyIHRvIGEgcHJl dmlvdXNseQotICAgbWFsbG9jJ2VkIGJ1ZmZlci4gIElmIG5vdCwgZXhwZWN0IGEgY29yZSBkdW1w IG9yIHNlZ21lbnRhdGlvbiBmYXVsdC4KLQotICAgTm90ZTogVGhlIGNhbGxlciBjYW4gdGVsbCB3 aGV0aGVyIHRoaXMgcm91dGluZSBmYWlsZWQgYXMgZm9sbG93czoKLQotICAgICBtYWxsb2MoJnAs cSk7Ci0gICAgIGlmIChxICYgIXApIHsgbWFrZXN0cigpIGZhaWxlZCB9OwotCi0gICBSZWFsbHkg dGhpcyByb3V0aW5lIHNob3VsZCBoYXZlIHJldHVybmVkIGEgbGVuZ3RoLCBidXQgc2luY2UgaXQg ZG9lc24ndAotICAgd2Ugc2V0IHRoZSBnbG9iYWwgdmFyaWFibGUgbWFrZXN0cmxlbiB0byB0aGUg bGVuZ3RoIG9mIHRoZSByZXN1bHQgc3RyaW5nLgotKi8KLWludCBtYWtlc3RybGVuID0gMDsKLQot Vk9JRAotI2lmZGVmIENLX0FOU0lDCi1tYWtlc3RyKGNoYXIgKipwLCBjb25zdCBjaGFyICpzKQot I2Vsc2UKLW1ha2VzdHIocCxzKSBjaGFyICoqcCwgKnM7Ci0jZW5kaWYKLS8qIG1ha2VzdHIgKi8g ewotICAgIGludCB4ID0gMDsKLSAgICBjaGFyICpxID0gTlVMTDsKLSNpZmRlZiBDS19BTlNJQwot ICAgIHJlZ2lzdGVyIGNvbnN0IGNoYXIgKiBzMjsKLSNlbHNlCi0gICAgcmVnaXN0ZXIgY2hhciAq IHMyOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0gICAgcmVnaXN0ZXIgY2hhciAqIHEyOwotCi0g ICAgaWYgKCpwID09IHMpCQkJLyogVGhlIHR3byBwb2ludGVycyBhcmUgdGhlIHNhbWUuICovCi0g ICAgICByZXR1cm47CQkJCS8qIERvbid0IGRvIGFueXRoaW5nLiAqLwotCi0gICAgaWYgKCFzKSB7 CQkJCS8qIE5ldyBkZWZpbml0aW9uIGlzIG51bGw/ICovCi0JaWYgKCpwKQkJCQkvKiBGcmVlIG9s ZCBzdG9yYWdlLiAqLwotCSAgZnJlZSgqcCk7Ci0JKnAgPSBOVUxMOwkJCS8qIFJldHVybiBudWxs IHBvaW50ZXIuICovCi0JbWFrZXN0cmxlbiA9IDA7Ci0JcmV0dXJuOwotICAgIH0KLSAgICBzMiA9 IHM7CQkJCS8qIE1heWJlIG5ldyBzdHJpbmcgd2lsbCBmaXQgKi8KLQotI2lmZGVmIENPTU1FTlQK LS8qCi0gIFRoaXMgaXMgYSBmYWlybHkgYmlnIHdpbiwgYWxsb3dpbmcgdXMgdG8gc2tpcCB0aGUg bWFsbG9jKCkgYW5kIGZyZWUgaWYgdGhlCi0gIGRlc3RpbmF0aW9uIHN0cmluZyBhbHJlYWR5IGV4 aXN0cyBhbmQgaXMgbm90IHNob3J0ZXIgdGhhbiB0aGUgc291cmNlIHN0cmluZy4KLSAgQnV0IGl0 IGRvZXNuJ3QgYWxsb3cgZm9yIHBvc3NpYmxlIG92ZXJsYXAgb2Ygc291cmNlIGFuZCBkZXN0aW5h dGlvbi4KLSovCi0gICAgaWYgKCpwKSB7CQkJCS8qIGludG8gb2xkIHN0b3JhZ2UuLi4gKi8KLQlj aGFyICogcDIgPSAqcDsKLQljaGFyIGM7Ci0Jd2hpbGUgKGMgPSAqcDIpIHsKLQkgICAgaWYgKCEo KnAyKysgPSAqczIrKykpCi0JICAgICAgYnJlYWs7Ci0JICAgIHgrKzsKLQl9Ci0JbWFrZXN0cmxl biA9IHg7Ci0JaWYgKGMpIHJldHVybjsKLSAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0v KiBEaWRuJ3QgZml0ICovCi0KLSAgICB4ID0gMDsKLSAgICB3aGlsZSAoKnMyKyspIHgrKzsJCQkv KiBHZXQgKHJlc3Qgb2YpIGxlbmd0aCBvZiBzLiAgKi8KLQotICAgIGlmICh4ID49IDApIHsJCQkv KiBHZXQgbGVuZ3RoLCBldmVuIG9mIGVtcHR5IHN0cmluZy4gKi8KLQlxID0gbWFsbG9jKHgrMSk7 CQkvKiBHZXQgYW5kIHBvaW50IHRvIHRlbXAgc3RvcmFnZS4gKi8KLQlpZiAocSkgewotCSAgICBt YWtlc3RybGVuID0geDsJCS8qIFJlbWVtYmVyIGxlbmd0aCBmb3Igc3RhdHMgKi8KLQkgICAgczIg PSBzOwkJCS8qIFBvaW50IGJhY2sgdG8gYmVnaW5uaW5nIG9mIHNvdXJjZSAqLwotCSAgICBxMiA9 IHE7CQkJLyogQ29weSBkZXN0IHBvaW50ZXIgdG8gaW5jcmVtZW50Li4uICovCi0JICAgIHdoaWxl ICgoKnEyKysgPSAqczIrKykpIDsJLyogSW5zdGVhZCBvZiBjYWxsaW5nIHN0cmNweSgpLiAqLwot LyoKLSAgTm90ZTogSFAgZmxleGVsaW50IHNheXMgdGhhdCB0aGUgYWJvdmUgbG9vcCBjYW4gcmVz dWx0IGluIGNyZWF0aW9uICgrKykgYW5kCi0gIGFjY2VzcyAoKikgb2Ygb3V0LW9mLWJvdW5kcyBw b2ludGVycy4gIEkgcmVhbGx5IGRvbid0IHNlZSBpdC4KLSovCi0JfQotI2lmZGVmIERFQlVHCi0J ZWxzZSB7CQkJCS8qIFRoaXMgd291bGQgYmUgYSByZWFsbHkgYmFkIGVycm9yICovCi0JICAgIGNo YXIgdG1wWzI0XTsJCS8qIFNvIGdldCBhIGdvb2QgcmVjb3JkIG9mIGl0LiAqLwotCSAgICBpZiAo eCA+IDIzKSB7Ci0JCWNrc3RybmNweSh0bXAscywyMCk7Ci0JCXN0cmNweSh0bXArMjAsIi4uLiIp OwotCQl0bXBbMjNdID0gTlVMOwotCSAgICB9IGVsc2UgewotCQlzdHJjcHkodG1wLHMpOwkJLyog V2UgYWxyZWFkeSBjaGVja2VkIHRoZSBsZW5ndGggKi8KLQkgICAgfQotCSAgICBkZWJ1ZyhGMTEw LCJNQUtFU1RSIE1BTExPQyBGQUlMVVJFICIsdG1wLDApOwotCX0KLSNlbmRpZiAvKiBERUJVRyAq LwotICAgIH0gZWxzZQotICAgICAgcSA9IE5VTEw7CQkJCS8qIExlbmd0aCBvZiBzdHJpbmcgaXMg emVybyAqLwotCi0gICAgaWYgKCpwKQkJCQkvKiBOb3cgZnJlZSB0aGUgb3JpZ2luYWwgc3RvcmFn ZS4gKi8KLSAgICAgIGZyZWUoKnApOwotICAgICpwID0gcTsKLX0KLQotLyogIFggTSBBIEsgRSBT IFQgUiAgLS0gIE5vbi1kZXN0cnVjdGl2ZSBtYWtlc3RyKCkgaWYgcyBpcyBOVUxMLiAgKi8KLQot Vk9JRAotI2lmZGVmIENLX0FOU0lDCi14bWFrZXN0cihjaGFyICoqcCwgY29uc3QgY2hhciAqcykK LSNlbHNlCi14bWFrZXN0cihwLHMpIGNoYXIgKipwLCAqczsKLSNlbmRpZgotLyogeG1ha2VzdHIg Ki8gewotICAgIGlmIChzKSBtYWtlc3RyKHAscyk7Ci19Ci0KLSNpZm5kZWYgVVNFX01FTUNQWQot LyogQyBLIE0gRSBNIEMgUCBZICAtLSAgUG9ydGFibGUgKGJ1dCBzbG93KSBtZW1jcHkoKSAqLwot Ci0vKiBDb3BpZXMgbiBieXRlcyBmcm9tIHMgdG8gcCwgYWxsb3dpbmcgZm9yIG92ZXJsYXAuICov Ci0vKiBGb3IgdXNlIHdoZW4gcmVhbCBtZW1jcHkoKSBub3QgYXZhaWxhYmxlLiAqLwotCi1WT0lE Ci1ja21lbWNweShwLHMsbikgY2hhciAqcCwgKnM7IGludCBuOyB7Ci0gICAgY2hhciAqIHEgPSBO VUxMOwotICAgIHJlZ2lzdGVyIGludCBpOwotICAgIGludCB4OwotCi0gICAgaWYgKCFzIHx8ICFw IHx8IG4gPD0gMCB8fCBwID09IHMpCS8qIFZlcmlmeSBhcmdzICovCi0gICAgICByZXR1cm47Ci0g ICAgeCA9IHAgLSBzOwkJCQkvKiBDaGVjayBmb3Igb3ZlcmxhcCAqLwotICAgIGlmICh4IDwgMCkK LSAgICAgIHggPSAwIC0geDsKLSAgICBpZiAoeCA8IG4pIHsJCQkvKiBUaGV5IG92ZXJsYXAgKi8K LQlxID0gcDsKLQlpZiAoIShwID0gKGNoYXIgKiltYWxsb2MobikpKQkvKiBTbyB1c2UgYSB0ZW1w b3JhcnkgYnVmZmVyICovCi0JICByZXR1cm47Ci0gICAgfQotICAgIGZvciAoaSA9IDA7IGkgPCBu OyBpKyspCQkvKiBDb3B5IG4gYnl0ZXMgKi8KLSAgICAgIHBbaV0gPSBzW2ldOwotICAgIGlmIChx KSB7CQkJCS8qIElmIHdlIHVzZWQgYSB0ZW1wb3JhcnkgYnVmZmVyICovCi0JZm9yIChpID0gMDsg aSA8IG47IGkrKykJCS8qIGNvcHkgZnJvbSBpdCB0byBkZXN0aW5hdGlvbiAqLwotCSAgcVtpXSA9 IHBbaV07Ci0JaWYgKHApIGZyZWUocCk7CQkJLyogYW5kIGZyZWUgdGhlIHRlbXBvcmFyeSBidWZm ZXIgKi8KLSAgICB9Ci19Ci0jZW5kaWYgLyogVVNFX01FTUNQWSAqLwotCi0KLS8qICBDIEsgUyBU IFIgQyBNIFAgIC0tICBTdHJpbmcgY29tcGFyaXNvbiB3aXRoIGNhc2UtbWF0dGVycyBzZWxlY3Rp b24gKi8KLS8qCi0gIENhbGwgd2l0aCBwb2ludGVycyB0byB0aGUgdHdvIHN0cmluZ3MsIHMxIGFu ZCBzMiwgYSBsZW5ndGgsIG4sCi0gIGFuZCBjID09IDAgZm9yIGNhc2VsZXNzIGNvbXBhcmlzb24s IG5vbnplcm8gZm9yIGNhc2UgbWF0dGVycy4KLSAgQ2FsbCB3aXRoIG4gPT0gLTEgdG8gY29tcGFy ZSB3aXRob3V0IGEgbGVuZ3RoIGxpbWl0LgotICBDb21wYXJlcyB1cCB0byBuIGNoYXJhY3RlcnMg b2YgdGhlIHR3byBzdHJpbmdzIGFuZCByZXR1cm5zOgotICAgIDEgaWYgczEgPiBzMgotICAgIDAg aWYgczEgPSBzMgotICAgLTEgaWYgczEgPCBzMgotICBOb3RlOiBjYXNlIGhhbmRsaW5nIGlzIG9u bHkgYXMgZ29vZCBhcyBpc3VwcGVyKCkgYW5kIHRvbG93ZXIoKS4KLSovCi1pbnQKLWNrc3RyY21w KHMxLHMyLG4sYykgY2hhciAqczEsICpzMjsgcmVnaXN0ZXIgaW50IG4sIGM7IHsKLSAgICByZWdp c3RlciBDSEFSIHQxLCB0MjsKLSAgICBpZiAobiA9PSAwKSByZXR1cm4oMCk7Ci0gICAgaWYgKCFz MSkgczEgPSAiIjsJCQkvKiBXYXRjaCBvdXQgZm9yIG51bGwgcG9pbnRlcnMuICovCi0gICAgaWYg KCFzMikgczIgPSAiIjsKLSAgICBpZiAoISpzMSkgcmV0dXJuKCpzMiA/IC0xIDogMCk7Ci0gICAg aWYgKCEqczIpIHJldHVybigxKTsKLSAgICB3aGlsZSAobi0tKSB7Ci0JdDEgPSAoQ0hBUikgKnMx Kys7CQkvKiBHZXQgbmV4dCBjaGFyYWN0ZXIgZnJvbSBlYWNoLiAqLwotCXQyID0gKENIQVIpICpz MisrOwotCWlmICghdDEpIHJldHVybih0MiA/IC0xIDogMCk7Ci0JaWYgKCF0MikgcmV0dXJuKDEp OwotCWlmICghYykgewkJCS8qIElmIGNhc2UgZG9lc24ndCBtYXR0ZXIgKi8KLQkgICAgaWYgKGlz dXBwZXIodDEpKSB0MSA9IHRvbG93ZXIodDEpOyAvKiBDb252ZXJ0IGNhc2UuICovCi0JICAgIGlm IChpc3VwcGVyKHQyKSkgdDIgPSB0b2xvd2VyKHQyKTsKLQl9Ci0JaWYgKHQxIDwgdDIpIHJldHVy bigtMSk7CS8qIHMxIDwgczIgKi8KLQlpZiAodDEgPiB0MikgcmV0dXJuKDEpOwkJLyogczEgPiBz MiAqLwotICAgIH0KLSAgICByZXR1cm4oMCk7CQkJCS8qIFRoZXkncmUgZXF1YWwgKi8KLX0KLQot LyogIEMgSyBTIFQgUiBQIFIgRSAgLS0gIENhc2VsZXNzIHN0cmluZyBwcmVmaXggY29tcGFyaXNv biAgKi8KLQotLyogUmV0dXJucyBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgY2hhciBpbiB0aGUgMiBz dHJpbmdzIHRoYXQgZG9lc24ndCBtYXRjaCAqLwotCi1pbnQKLWNrc3RycHJlKHMxLHMyKSBjaGFy ICpzMSwgKnMyOyB7Ci0gICAgQ0hBUiB0MSwgdDI7Ci0gICAgaW50IG4gPSAwOwotICAgIGlmICgh czEpIHMxID0gIiI7Ci0gICAgaWYgKCFzMikgczIgPSAiIjsKLSAgICB3aGlsZSAoMSkgewotCXQx ID0gKENIQVIpICpzMSsrOwotCXQyID0gKENIQVIpICpzMisrOwotCWlmICghdDEgfHwgIXQyKSBy ZXR1cm4obik7Ci0JaWYgKGlzdXBwZXIodDEpKSB0MSA9IHRvbG93ZXIodDEpOwotCWlmIChpc3Vw cGVyKHQyKSkgdDIgPSB0b2xvd2VyKHQyKTsKLQlpZiAodDEgIT0gdDIpCi0JICByZXR1cm4obik7 Ci0JbisrOwotICAgIH0KLX0KLQotI2RlZmluZSBHTE9CQklORwotCi0vKiAgQyBLIE0gQSBUIEMg SCAgLS0gIE1hdGNoIGEgc3RyaW5nIGFnYWluc3QgYSBwYXR0ZXJuICAqLwotLyoKLSAgQ2FsbCB3 aXRoOgotICAgIHBhdHRlcm4gdG8gYmUgbWF0Y2hlZC4KLSAgICBzdHJpbmcgdG8gbG9vayBmb3Ig dGhlIHBhdHRlcm4gaW4uCi0gICAgaWNhc2UgaXMgMSBpZiBjYXNlLXNlbnNpdGl2ZSwgMCBvdGhl cndpc2UuCi0gICAgb3B0cyBpcyBhIGJpdG1hc2s6Ci0gICAgICBCaXQgMCAoPTEpOgotCTEgPSBN YXRjaCBzdHJpbmdzIHN0YXJ0aW5nIHdpdGggJy4nCi0JMCA9IERvbid0IG1hdGNoIHRoZW0gKHVz ZWQgd2l0aCBVTklYIGZpbGVuYW1lcykuCi0gICAgICBCaXQgMSAoPTIpOgotCTEgPSBGaWxlIGds b2JiaW5nIChkaXJzZXBzIGFyZSBmZW5jZXMpOwotCTAgPSBEaXJzZXBzIGFyZSBub3QgZmVuY2Vz LgotICAgICAgQml0IDIgKD00KToKLQkxID0gQWxsb3cgXiBhbmQgJCBhbmNob3JzIGF0IGJlZ2lu bmluZyBhbmQgZW5kIG9mIHBhdHRlcm4uCi0JMCA9IERvbid0IGFsbG93IHRoZW0gKG5vcm1hbCBj YXNlIGZvciBmaWxlbmFtZSBtYXRjaGluZykuCi0gICAgICBCaXQgMyAoYW5kIGJleW9uZCk6IFVu ZGVmaW5lZC4KLSAgV29ya3Mgb25seSB3aXRoIE5VTC10ZXJtaW5hdGVkIHN0cmluZ3MuCi0gIFBh dHRlcm4gbWF5IGNvbnRhaW4gYW55IG51bWJlciBvZiA/IGFuZC9vciAqLgotICBJZiBDS1JFR0VY IGlzIGRlZmluZWQsIGFsc28gW2FiY10sIFthLXpdLCBhbmQvb3Ige3N0cmluZyxzdHJpbmcsLi4u fS4KLSAgKE5vdGU6IFJFR0VYIGlzIGEgbWlzbm9tZXIsIHNlZSBiZWxvdy4pCi0KLSAgUmV0dXJu czoKLSAgICAwIGlmIHN0cmluZyBkb2VzIG5vdCBtYXRjaCBwYXR0ZXJuLAotICAgID49IDEsIHRo ZSAxLWJhc2VkIHBvc2l0aW9uIGluIHRoZSBzdHJpbmcgd2hlcmUgdGhlIG1hdGNoIHdhcyBmb3Vu ZC4KLQotICBUbyBiZSBkb25lOgotICAgIEZpbmQgYSB3YXkgdG8gaWRlbnRpZnkgdGhlIHBpZWNl IG9mIHRoZSBzdHJpbmcgdGhhdCBtYXRjaGVkIHRoZSBwYXR0ZXJuLAotICAgIGFzIGluIFNub2Jv bCAiTElORSAoUEFUIC4gUkVTVUxUKSIuICBUaGlzIGlzIG5vdyBwYXJ0aWFsbHkgZG9uZSBieQot ICAgIHNldHRpbmcgbWF0Y2hwb3MgYW5kIG1hdGNoZW5kIChleGNlcHQgbWF0Y2hlbmQgbmVlZHMg c29tZSB0dW5pbmcpLiAgQnV0Ci0gICAgdGhlc2UgYXJlIHVzZWxlc3MgdW5sZXNzIGEgY29weSBv ZiB0aGUgc3RyaW5nIGlzIGtlcHQsIG9yIGEgY29weSBvZiB0aGUKLSAgICBtYXRjaGluZyBwYXJ0 IGlzIG1hZGUuICBCdXQgdGhhdCB3b3VsZCBiZSB0b28gY29zdGx5IGluIHBlcmZvcm1hbmNlIC0t Ci0gICAgdGhpcyByb3V0aW5lIGhhcyB0byBiZSBmYXN0IGJlY2F1c2UgaXQncyB1c2VkIGZvciB3 aWxkY2FyZCBleHBhbnNpb24uCi0KLSAgTm90ZToKLSAgICBQYXR0ZXJucyBhcmUgbm90IHRoZSBz YW1lIGFzIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIGluIHdoaWNoICcqJyBtZWFucwotICAgIDAgb3Ig bW9yZSByZXBldGl0aW9ucyBvZiB0aGUgcHJlY2VkaW5nIGl0ZW0uICBGb3IgZXhhbXBsZSAiYSpi IiBhcyBhCi0gICAgcGF0dGVybiBtYXRjaGVzIGFueSBzdHJpbmcgdGhhdCBzdGFydHMgd2l0aCAn YScgYW5kIGVuZHMgd2l0aCAnYic7IGFzIGEKLSAgICByZWd1bGFyIGV4cHJlc3Npb24gaXQgbWF0 Y2hlcyBhbnkgc3RyaW5nIG9mIHplcm8gb3IgbW9yZSBhJ3MgZm9sbG93ZWQgYnkKLSAgICBvbmUg Yi4gIFJlZ3VsYXIgZXhwcmVzc2lvbnMgYXJlIGVzcGVjaWFsbHkgdXNlZnVsIGluIG1hdGNoaW5n IHN0cmluZ3Mgb2YKLSAgICAoc2F5KSBkaWdpdHMsIG9yIGxldHRlcnMsIGUuZy4gIlswLTldKiIg bWF0Y2hlcyBhbnkgc3RyaW5nIG9mIGRpZ2l0cy4KLSAgICBTbyBmYXIsIEtlcm1pdCBkb2Vzbid0 IGRvIHRoaXMuCi0qLwotc3RhdGljIGNoYXIgKiBteXBhdCA9IE5VTEw7CQkvKiBGb3IgcmV3cml0 aW5nIHBhdHRlcm4gKi8KLXN0YXRpYyBpbnQgbWF0Y2hwb3MgPSAwOwotaW50IG1hdGNoZW5kID0g MDsKLXN0YXRpYyBpbnQgbWF0Y2hkZXB0aCA9IDA7Ci1zdGF0aWMgaW50IHN0cmluZ3BvcyA9IDA7 Ci1zdGF0aWMgY2hhciAqIG9zdHJpbmcgPSBOVUxMOwotCi0jZGVmaW5lIE1BVENIUkVUVVJOKHgs eSkgeyByYz15OyB3aGVyZT14OyBnb3RvIHhja21hdGNoOyB9Ci1zdGF0aWMgY2hhciAqIGxhc3Rw YXQgPSBOVUxMOwotCi1zdGF0aWMgaW50IHh4ZmxhZyA9IDA7CQkJLyogR2xvYmFsIGJhaWxvdXQg ZmxhZyBmb3IgY2ttYXRjaCgpICovCi0KLWludAotaXNwYXR0ZXJuKHMpIGNoYXIgKiBzOyB7Ci0g ICAgaW50IHF1b3RlID0gMCwgc2JmbGFnID0gMCwgc2IgPSAwLCBjYmZsYWcgPSAwLCBjYiA9IDA7 Ci0gICAgCi0gICAgY2hhciBjID0gMDsKLSAgICBpZiAoKnMgPT0gJ14nKSByZXR1cm4oMSk7Ci0g ICAgd2hpbGUgKChjID0gKnMrKykpIHsKLQlpZiAocXVvdGUpIHsKLQkgICAgcXVvdGUgPSAwOwot CSAgICBjb250aW51ZTsKLQl9Ci0JaWYgKGMgPT0gJ1xcJykgewotCSAgICBxdW90ZSA9IDE7Ci0J ICAgIGNvbnRpbnVlOwotCX0KLQlpZiAoYyA9PSAnKicpIHJldHVybigxKTsKLQlpZiAoYyA9PSAn PycpIHJldHVybigxKTsKLQkvKiBVbnF1b3RlZCBicmFja2V0cyBvciBicmFjZXMgbXVzdCBtYXRj aCAqLwotCWlmIChjID09ICdbJykgeyBzYmZsYWcrKzsgc2IrKzsgY29udGludWU7IH0KLQlpZiAo YyA9PSAnXScpIHsgc2ItLTsgY29udGludWU7IH0KLQlpZiAoYyA9PSAneycpIHsgY2JmbGFnKys7 IGNiKys7IGNvbnRpbnVlOyB9Ci0JaWYgKGMgPT0gJ30nKSB7IGNiLS07IGNvbnRpbnVlOyB9Ci0J aWYgKCEqcyAmJiBjID09ICckJykgcmV0dXJuKDEpOwotICAgIH0KLSAgICByZXR1cm4oc2JmbGFn IHx8IGNiZmxhZyk7Ci19Ci0KLWludAotY2ttYXRjaChwYXR0ZXJuLCBzdHJpbmcsIGljYXNlLCBv cHRzKSBjaGFyICpwYXR0ZXJuLCpzdHJpbmc7IGludCBpY2FzZSwgb3B0czsgewotICAgIGludCBx ID0gMCwgaSA9IDAsIGsgPSAtMSwgeCwgZmxhZyA9IDA7Ci0gICAgaW50IHJjID0gMDsJCQkJLyog UmV0dXJuIGNvZGUgKi8KLSAgICBpbnQgaGF2ZXN0YXIgPSAwOwotICAgIGludCB3aGVyZSA9IC0x OwotICAgIENIQVIgY3A7CQkJCS8qIEN1cnJlbnQgY2hhcmFjdGVyIGZyb20gcGF0dGVybiAqLwot ICAgIENIQVIgY3M7CQkJCS8qIEN1cnJlbnQgY2hhcmFjdGVyIGZyb20gc3RyaW5nICovCi0gICAg Y2hhciAqIHBhdHN0YXJ0OwkJCS8qIFN0YXJ0IG9mIHBhdHRlcm4gKi8KLSAgICBpbnQgcGxlbiwg ZG90LCBnbG9iYmluZywgeHN0YXIgPSAwOwotICAgIGludCBicm9ubHkgPSAwOwkJCS8qIFdob2xl IHBhdHRlcm4gaXMge2EsYixjLC4uLn0gKi8KLQotICAgIGRlYnVnKEYxMTEsIkNLTUFUQ0ggRU5U UlkgcGF0IG9wdCIscGF0dGVybixvcHRzKTsKLSAgICBkZWJ1ZyhGMTExLCJDS01BVENIIEVOVFJZ IHN0ciBkZXAiLHN0cmluZyxtYXRjaGRlcHRoKTsKLSAgICAvKiBkZWJ1ZyhGMTAxLCJDS01BVENI IEVOVFJZIGljYXNlIiwiIixpY2FzZSk7ICovCi0KLSAgICBnbG9iYmluZyA9IG9wdHMgJiAyOwot Ci0gICAgaWYgKCFzdHJpbmcpIHN0cmluZyA9ICIiOwotICAgIGlmICghcGF0dGVybikgcGF0dGVy biA9ICIiOwotCi0gICAgaWYgKCEqcGF0dGVybikgewkJCS8qIEVtcHR5IHBhdHRlcm4gbWF0Y2hl cyBhbnl0aGluZyAqLwotCW1hdGNoZGVwdGgrKzsJCQkvKiAoaXQgd2Fzbid0IGluY3JlbWVudGVk IHlldCkgKi8KLQlNQVRDSFJFVFVSTigwLDEpOwotICAgIH0gZWxzZSBpZiAoISpzdHJpbmcpIHsK LQlNQVRDSFJFVFVSTigwLDApOwotICAgIH0KLSAgICBwYXRzdGFydCA9IHBhdHRlcm47CQkJLyog UmVtZW1iZXIgYmVnaW5uaW5nIG9mIHBhdHRlcm4gKi8KLQotICAgIGlmIChtYXRjaGRlcHRoID09 IDApIHsJCS8qIFRvcC1sZXZlbCBjYWxsPyAqLwotCXh4ZmxhZyA9IDA7Ci0Jc3RyaW5ncG9zID0g MDsJCQkvKiBSZXNldCBpbmRpY2VzIGV0Yy4gKi8KLQltYXRjaHBvcyA9IDA7Ci0JbWF0Y2hlbmQg PSAwOwotCW9zdHJpbmcgPSBzdHJpbmc7Ci0JbGFzdHBhdCA9IHBhdHRlcm47Ci0JaWYgKCpwYXR0 ZXJuID09ICd7JykJCS8qIEVudGlyZSBwYXR0ZXJuIGlzIHthLGIuY30gKi8KLQkgIGJyb25seSA9 IDE7CQkJLyogTWF5YmUgKi8KLQlkb3QgPSAob3B0cyAmIDEpIHx8CQkvKiBNYXRjaCBsZWFkaW5n IGRvdCAoaWYgZmlsZSkgKi8KLQkgICAgKChvcHRzICYgMikgPT0gMCkgfHwJLyogYWx3YXlzIGlm IG5vdCBmaWxlICovCi0JICAgIChwYXR0ZXJuWzBdID09ICcuJyk7CS8qIG9yIGlmIHBhdHRlcm4g c3RhcnRzIHdpdGggJy4nICovCi0KLQlwbGVuID0gc3RybGVuKHBhdHRlcm4pOwkJLyogTGVuZ3Ro IG9mIHBhdHRlcm4gKi8KLS8qIFRoaXMgd291bGQgYmUgdXNlZCBpbiBjYWxjdWxhdGluZyBsZW5n dGggb2YgbWF0Y2hpbmcgc2VnbWVudCAqLwotCWlmIChwbGVuID4gMCkJCQkvKiBVc2VyJ3MgcGF0 dGVybiBlbmRzIHdpdGggJyonICovCi0JICBpZiAocGF0dGVybltwbGVuIC0gMV0gPT0gJyonKQot CSAgICB4c3RhciA9IDE7Ci0JaWYgKHBhdHRlcm5bMF0gPT0gJyonKSB7CS8qIFVzZXIncyBwYXR0 ZXJuIHN0YXJ0cyB3aXRoICcqJyAqLwotCSAgICBtYXRjaHBvcyA9IDE7Ci0JICAgIGRlYnVnKEYx MTEsIkNLTUFUQ0ggMSIsc3RyaW5nLCBtYXRjaHBvcyk7Ci0JfQotCWlmIChvcHRzICYgNCkgewkJ CS8qIF4uLiQgYWxsb3dlZCAodG9wIGxldmVsIG9ubHkpICovCi0JICAgIC8qIFJld3JpdGUgcGF0 dGVybiB0byBhY2NvdW50IGZvciBeLi4kIGFuY2hvcmluZy4uLiAqLwotCi0JICAgIGlmIChteXBh dCkgZnJlZShteXBhdCk7CS8qIEdldCBzcGFjZSBmb3IgIipwYXR0ZXJuKiIgKi8KLQkgICAgbXlw YXQgPSAoY2hhciAqKW1hbGxvYyhwbGVuICsgNCk7Ci0JICAgIGlmIChteXBhdCkgewkJLyogR290 IHNwYWNlPyAqLwotCQljaGFyICogcyA9IHBhdHRlcm4sICogcCA9IG15cGF0OyAvKiBTZXQgd29y a2luZyBwb2ludGVycyAqLwotCQlpZiAoKnMgPT0gJ14nKSB7CS8qIEZpcnN0IHNvdXJjZSBjaGFy IGlzIF4gKi8KLQkJICAgIHMrKzsJCS8qIHNvIHNraXAgcGFzdCBpdCAqLwotCQl9IGVsc2UgaWYg KCpzICE9ICcqJykgewkvKiBvdGhlcndpc2UgKi8KLQkJICAgICpwKysgPSAnKic7CQkvKiBwcmVw ZW5kICcqJyB0byBwYXR0ZXJuICovCi0JCX0KLQkJd2hpbGUgKCpzKSB7CQkvKiBDb3B5IHJlc3Qg b2YgcGF0dGVybiAqLwotCQkgICAgaWYgKCEqKHMrMSkpIHsJLyogRmluYWwgcGF0dGVybiBjaGFy YWN0ZXI/ICovCi0JCQlpZiAoKnMgIT0gJyQnKSB7IC8qIElmIGl0J3Mgbm90ICckJyAqLwotCQkJ ICAgICpwKysgPSAqczsJLyogQ29weSBpdCBpbnRvIHRoZSBwYXR0ZXJuICovCi0JCQkgICAgaWYg KCpzKysgIT0gJyonKSAvKiBBbmQgaWYgaXQncyBhbHNvIG5vdCAnKicgKi8KLQkJCSAgICAgICpw KysgPSAnKic7IC8qIGFwcGVuZCAnKicuICovCi0JCQl9Ci0JCQlicmVhazsJCS8qIERvbmUgKi8K LQkJICAgIH0gZWxzZQkJLyogTm90IGZpbmFsIGNoYXJhY3RlciAqLwotCQkgICAgICAqcCsrID0g KnMrKzsJLyogSnVzdCBjb3B5IGl0ICovCi0JCX0KLQkJKnAgPSBOVUw7CQkvKiBUZXJtaW5hdGUg dGhlIG5ldyBwYXR0ZXJuICovCi0JCXBhdHRlcm4gPSBteXBhdDsJLyogTWFrZSB0aGUgc3dpdGNo ICovCi0JICAgIH0KLQkgICAgZGVidWcoRjExMCwiQ0tNQVRDSCBJTklUIHBhdCIscGF0dGVybiww KTsKLQl9Ci0gICAgfQotICAgIG1hdGNoZGVwdGgrKzsJCQkvKiBOb3cgaW5jcmVtZW50IGNhbGwg ZGVwdGggKi8KLQotI2lmZGVmIFVOSVgKLSAgICBpZiAoIWRvdCkgewkJCQkvKiBGb3IgVU5JWCBm aWxlIGdsb2JiaW5nICovCi0JaWYgKCpzdHJpbmcgPT0gJy4nICYmICpwYXR0ZXJuICE9ICcuJyAm JiAhbWF0Y2hkb3QpIHsKLQkgICAgaWYgKAotI2lmZGVmIENLUkVHRVgKLQkJKnBhdHRlcm4gIT0g J3snICYmICpwYXR0ZXJuICE9ICdbJwotI2Vsc2UKLQkJMQotI2VuZGlmIC8qIENLUkVHRVggKi8K LQkJKSB7Ci0JCWRlYnVnKEYxMTAsImNrbWF0Y2ggc2tpcCIsc3RyaW5nLDApOwotCQlNQVRDSFJF VFVSTigxLDApOwotCSAgICB9Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBVTklYICovCi0gICAgd2hp bGUgKDEpIHsKLQlrKys7Ci0JY3AgPSAqcGF0dGVybjsJCQkvKiBDaGFyYWN0ZXIgZnJvbSBwYXR0 ZXJuICovCi0JY3MgPSAqc3RyaW5nOwkJCS8qIENoYXJhY3RlciBmcm9tIHN0cmluZyAqLwotCi0j aWZkZWYgQ09NTUVOVAotCWRlYnVnKEYwMDAsIkNLTUFUQ0ggcGF0IGNwIixwYXR0ZXJuLGNwKTsK LQlkZWJ1ZyhGMDAwLCJDS01BVENIIHN0ciBjcyIsc3RyaW5nLGNzKTsKLSNlbmRpZiAvKiBDT01N RU5UICovCi0KLQlpZiAoIWNzKSB7CQkJLyogRW5kIG9mIHN0cmluZyAtIGRvbmUuICovCi0JICAg IHggPSAoIWNwIHx8IChjcCA9PSAnKicgJiYgISoocGF0dGVybisxKSkpID8gMSA6IDA7Ci0JICAg IGlmICh4KSB7Ci0JCWlmICghbWF0Y2hwb3MpIHsKLQkJICAgIG1hdGNocG9zID0gc3RyaW5ncG9z OwotCQkgICAgZGVidWcoRjExMSwiQ0tNQVRDSCBBIixzdHJpbmcsIG1hdGNocG9zKTsKLQkJfQot CQltYXRjaGVuZCA9IHN0cmluZ3BvczsKLQkJTUFUQ0hSRVRVUk4oMixtYXRjaHBvcyk7Ci0JICAg IH0KLQkgICAgZGVidWcoRjExMSwiQ0tNQVRDSCBaRVJPIGQiLHN0cmluZywgbWF0Y2hwb3MpOwot CSAgICBtYXRjaHBvcyA9IDA7Ci0JICAgIE1BVENIUkVUVVJOKDE2LG1hdGNocG9zKTsKLQl9Ci0g ICAgICAgIGlmICghaWNhc2UpIHsJCQkvKiBJZiBpZ25vcmluZyBjYXNlICovCi0JICAgIGlmIChp c3VwcGVyKGNwKSkJCS8qIGNvbnZlcnQgYm90aCB0byBsb3dlcmNhc2UuICovCi0JICAgICAgY3Ag PSB0b2xvd2VyKGNwKTsKLQkgICAgaWYgKGlzdXBwZXIoY3MpKQotCSAgICAgIGNzID0gdG9sb3dl cihjcyk7Ci0gICAgICAgIH0KLQlpZiAocSkgewkJCS8qIFRoaXMgY2hhcmFjdGVyIHdhcyBxdW90 ZWQgKi8KLQkgICAgZGVidWcoRjAwMCwiQ0tNQVRDSCBRVU9URUQiLHBhdHRlcm4sY3ApOwotCSAg ICBxID0gMDsJCQkvKiBUdXJuIG9mZiBxdW90ZSBmbGFnICovCi0KLQkgICAgaWYgKGNzID09IGNw KSB7CQkvKiBDb21wYXJlIGRpcmVjdGx5ICovCi0JCWlmICghbWF0Y2hwb3MpIHsJLyogTWF0Y2hl cyAqLwotCQkgICAgbWF0Y2hwb3MgPSBzdHJpbmdwb3M7Ci0JCSAgICBkZWJ1ZyhGMTExLCJDS01B VENIIFxcIG5ldyBtYXRjaCIsc3RyaW5nLCBtYXRjaHBvcyk7Ci0JCX0KLQkJcGF0dGVybisrOwot CSAgICB9IGVsc2UgewkJCS8qIERvZXNuJ3QgbWF0Y2ggKi8KLQkJcGF0dGVybiA9IGxhc3RwYXQ7 CS8qIEJhY2sgdXAgdGhlIHBhdHRlcm4gKi8KLQkJbWF0Y2hwb3MgPSAwOwotCQlkZWJ1ZyhGMTEx LCJDS01BVENIIFxcIG5vIG1hdGNoIixwYXR0ZXJuLCBtYXRjaHBvcyk7Ci0JICAgIH0KLQkgICAg c3RyaW5nKys7Ci0JICAgIHN0cmluZ3BvcysrOwotCSAgICBjb250aW51ZTsKLQl9Ci0JaWYgKGNw ID09IENNRFEgJiYgIXEpIHsJCS8qIFF1b3RlIGluIHBhdHRlcm4gKi8KLQkgICAgZGVidWcoRjAw MCwiQ0tNQVRDSCBRVU9URSIscGF0dGVybixjcCk7Ci0JICAgIHEgPSAxOwkJCS8qIFNldCBmbGFn ICovCi0JICAgIHBhdHRlcm4rKzsJCQkvKiBBZHZhbmNlIHRvIG5leHQgcGF0dGVybiBjaGFyYWN0 ZXIgKi8KLQkgICAgY29udGludWU7CQkJLyogYW5kIGNvbnRpbnVlLiAqLwotCX0KLQlpZiAoY3Mg JiYgY3AgPT0gJz8nKSB7CQkvKiAnPycgbWF0Y2hlcyBhbnkgY2hhciAqLwotCSAgICBpZiAoIW1h dGNocG9zKSB7Ci0JCW1hdGNocG9zID0gc3RyaW5ncG9zOwotCQlkZWJ1ZyhGMTExLCJDS01BVENI IEQiLHN0cmluZywgbWF0Y2hwb3MpOwotCSAgICB9Ci0JICAgIGRlYnVnKEYxMTAsIkNLTUFUQ0gg PyBwYXQiLHBhdHRlcm4sMCk7Ci0JICAgIGRlYnVnKEYxMTAsIkNLTUFUQ0ggPyBzdHIiLHN0cmlu ZywwKTsKLQkgICAgcGF0dGVybisrOwotCSAgICBzdHJpbmcrKzsKLQkgICAgc3RyaW5ncG9zKys7 Ci0JICAgIGNvbnRpbnVlOwotI2lmZGVmIENLUkVHRVgKLQl9IGVsc2UgaWYgKGNwID09ICdbJykg ewkJLyogSGF2ZSBicmFja2V0ICovCi0JICAgIGludCBxID0gMDsJCQkvKiBNeSBvd24gcHJpdmF0 ZSBxICovCi0JICAgIGNoYXIgKiBwc2F2ZSA9IE5VTEw7CS8qIGFuZCBiYWNrdXAgcG9pbnRlciAq LwotCSAgICBDSEFSIGNsaXN0WzI1Nl07CQkvKiBDaGFyYWN0ZXIgbGlzdCBmcm9tIGJyYWNrZXRz ICovCi0JICAgIENIQVIgYywgYzEsIGMyOwotCi0JICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkr KykJLyogbWVtc2V0KCkgZXRjIG5vdCBwb3J0YWJsZSAqLwotCSAgICAgIGNsaXN0W2ldID0gTlVM OwotCSAgICBwc2F2ZSA9ICsrcGF0dGVybjsJCS8qIFdoZXJlIHBhdHRlcm4gc3RhcnRzICovCi0J ICAgIGRlYnVnKEYxMTEsIkNLTUFUQ0ggW10gIixwYXR0ZXJuLTEsIG1hdGNocG9zKTsKLQkgICAg Zm9yIChmbGFnID0gMDsgIWZsYWc7IHBhdHRlcm4rKykgeyAvKiBMb29wIHRocnUgcGF0dGVybiAq LwotCQljID0gKENIQVIpKnBhdHRlcm47CS8qIEN1cnJlbnQgY2hhciAqLwotCQlkZWJ1ZyhGMDAw LCI+Pj4gcGF0dGVybiBjaGFyIiwiIixjKTsKLQkJaWYgKHEpIHsJCS8qIFF1b3RlIHdpdGhpbiBi cmFja2V0cyAqLwotCQkgICAgcSA9IDA7Ci0JCSAgICBjbGlzdFtjXSA9IDE7Ci0JCSAgICBjb250 aW51ZTsKLQkJfQotCQlpZiAoIWljYXNlKQkJLyogQ2FzZSBjb252ZXJzaW9uICovCi0JCSAgaWYg KGlzdXBwZXIoYykpCi0JCSAgICBjID0gdG9sb3dlcihjKTsKLQkJc3dpdGNoIChjKSB7CQkvKiBI YW5kbGUgdW5xdW90ZWQgY2hhcmFjdGVyICovCi0JCSAgY2FzZSBOVUw6CQkvKiBFbmQgb2Ygc3Ry aW5nICovCi0JCSAgICBNQVRDSFJFVFVSTig0LDApOwkvKiBObyBtYXRjaGluZyAnXScgc28gZmFp bCAqLwotCQkgIGNhc2UgQ01EUToJCS8qIE5leHQgY2hhciBpcyBxdW90ZWQgKi8KLQkJICAgIHEg PSAxOwkJLyogU2V0IGZsYWcgKi8KLQkJICAgIGNvbnRpbnVlOwkJLyogYW5kIGNvbnRpbnVlLiAq LwotCQkgIGNhc2UgJy0nOgkJLyogQSByYW5nZSBpcyBzcGVjaWZpZWQgKi8KLQkJICAgIGMxID0g KHBhdHRlcm4gPiBwc2F2ZSkgPyAoQ0hBUikqKHBhdHRlcm4tMSkgOiBOVUw7Ci0JCSAgICBjMiA9 IChDSEFSKSoocGF0dGVybisxKTsgLyogSUdOT1JFIE9VVC1PRi1CT1VORFMgV0FSTklORyAqLwot CQkgICAgaWYgKGMyID09ICddJykgYzIgPSBOVUw7IC8qIChpdCBjYW4ndCBoYXBwZW4pICovCi0J CSAgICBpZiAoYzEgPT0gTlVMKSBjMSA9IGMyOwotCQkgICAgZm9yIChjID0gYzE7IGMgPD0gYzI7 IGMrKykgewotCQkJY2xpc3RbY10gPSAxOwotCQkJaWYgKCFpY2FzZSkgewotCQkJICAgIGlmIChp c2xvd2VyKGMpKSB7Ci0JCQkJY2xpc3RbdG91cHBlcihjKV0gPSAxOwotCQkJICAgIH0gZWxzZSBp ZiAoaXN1cHBlcihjKSkgewotCQkJCWNsaXN0W3RvbG93ZXIoYyldID0gMTsKLQkJCSAgICB9Ci0J CQl9Ci0JCSAgICB9Ci0JCSAgICBjb250aW51ZTsKLQkJICBjYXNlICddJzoJCS8qIEVuZCBvZiBi cmFja2V0ZWQgc2VxdWVuY2UgKi8KLQkJICAgIGZsYWcgPSAxOwkJLyogRG9uZSB3aXRoIEZPUiBs b29wICovCi0JCSAgICBicmVhazsJCS8qIENvbXBhcmUgd2hhdCB3ZSBoYXZlICovCi0JCSAgZGVm YXVsdDoJCS8qIEp1c3QgYSBjaGFyICovCi0JCSAgICBjbGlzdFtjXSA9IDE7CS8qIFJlY29yZCBp dCAqLwotCQkgICAgaWYgKCFpY2FzZSkgewotCQkJaWYgKGlzbG93ZXIoYykpIHsKLQkJCSAgICBj bGlzdFt0b3VwcGVyKGMpXSA9IDE7Ci0JCQl9IGVsc2UgaWYgKGlzdXBwZXIoYykpIHsKLQkJCSAg ICBjbGlzdFt0b2xvd2VyKGMpXSA9IDE7Ci0JCQl9Ci0JCSAgICB9Ci0JCSAgICBjb250aW51ZTsK LQkJfQotCSAgICB9Ci0JICAgIGRlYnVnKEYwMDAsIj4+PiBjcyIsIiIsY3MpOwotCSAgICBkZWJ1 ZyhGMTAxLCI+Pj4gY2xpc3RbY3NdIiwiIixjbGlzdFtjc10pOwotCSAgICBkZWJ1ZyhGMDAwLCI+ Pj4gc3RyaW5nIixzdHJpbmcsKnN0cmluZyk7Ci0KLQkgICAgaWYgKCFjbGlzdFsodW5zaWduZWQp Y3NdKSB7CS8qIE5vIG1hdGNoPyAqLwotCQlpZiAoISpzdHJpbmcpIHsJCS8qIFRoaXMgY2xhdXNl IDE2IEp1biAyMDA1ICovCi0JCSAgICBNQVRDSFJFVFVSTig1LDApOwkvKiBOb3BlLCBkb25lLiAq LwotCQl9Ci0vKgotICBXZSBuZWVkIHRvIGZhaWwgaGVyZSBpZiB0aGUgW2NsaXN0XSBpcyBub3Qg YWxsb3dlZCB0byBmbG9hdC4KLSAgVGhlIFtjbGlzdF0gaXMgbm90IGFsbG93ZWQgdG8gZmxvYXQg aWYgaXQgaXMgbm90IHByZWNlZGVkCi0gIGJ5IGFuIGFzdGVyaXNrLCByaWdodD8gIDMwIERlYyAy MDA1LgotKi8KLQkJaWYgKCFoYXZlc3RhcikgewotCQkgICAgTUFUQ0hSRVRVUk4oNTAwLDApOwot CQl9Ci0JCXN0cmluZysrOwkJLyogRnJvbSBoZXJlIHRvIGVuZCBhZGRlZCAyMDA1LzYvMTUgKi8K LQkJc3RyaW5ncG9zKys7Ci0JCXBhdHRlcm4gPSBsYXN0cGF0OwkvKiBCYWNrIHVwIHBhdHRlcm4g Ki8KLQkJayA9IGNrbWF0Y2gocGF0dGVybixzdHJpbmcsaWNhc2Usb3B0cyk7Ci0JCWlmICh4eGZs YWcpIE1BVENIUkVUVVJOKDAsMCk7Ci0JCWlmICghbWF0Y2hwb3MgJiYgayA+IDApCi0JCSAgbWF0 Y2hwb3MgPSBzdHJpbmdwb3M7Ci0JCU1BVENIUkVUVVJOKDUsICgqc3RyaW5nKSA/IG1hdGNocG9z IDogMCk7Ci0JICAgIH0KLQkgICAgaWYgKCFtYXRjaHBvcykgewotCQltYXRjaHBvcyA9IHN0cmlu Z3BvczsKLQkJZGVidWcoRjExMSwiQ0tNQVRDSCBbXSBtYXRjaCIsc3RyaW5nLCBtYXRjaHBvcyk7 Ci0JICAgIH0KLQkgICAgc3RyaW5nKys7CQkJLyogWWVzLCBhZHZhbmNlIHN0cmluZyBwb2ludGVy ICovCi0JICAgIHN0cmluZ3BvcysrOwotCSAgICBjb250aW51ZTsJCQkvKiBhbmQgZ28gb24uICov Ci0JfSBlbHNlIGlmIChjcCA9PSAneycpIHsJCS8qIEJyYWNlcyBlbmNsb3NpbmcgbGlzdCBvZiBz dHJpbmdzICovCi0JICAgIGNoYXIgKiBwLCAqIHMsICogczIsICogYnVmID0gTlVMTDsKLQkgICAg aW50IG4sIGJjID0gMDsKLQkgICAgaW50IGxlbiA9IDA7Ci0JICAgIGRlYnVnKEYxMTEsIkNLTUFU Q0gge30gIixzdHJpbmcsIG1hdGNocG9zKTsKLQkgICAgZm9yIChwID0gcGF0dGVybisrOyAqcDsg cCsrKSB7Ci0JCWlmICgqcCA9PSAneycpIGJjKys7Ci0JCWlmICgqcCA9PSAnfScpIGJjLS07Ci0J CWlmIChiYyA8IDEpIGJyZWFrOwotCSAgICB9Ci0JICAgIGlmIChiYyAhPSAwKSB7CQkvKiBCcmFj ZXMgZG9uJ3QgbWF0Y2ggKi8KLQkJTUFUQ0hSRVRVUk4oNiwwKTsJLyogRmFpbCAqLwotCSAgICB9 IGVsc2UgewkJCS8qIEJyYWNlcyBkbyBtYXRjaCAqLwotCQlpbnQgcSA9IDAsIGRvbmUgPSAwOwot CQlsZW4gPSAqcCA/IHN0cmxlbihwKzEpIDogMDsgLyogTGVuZ3RoIG9mIHJlc3Qgb2YgcGF0dGVy biAqLwotCQlpZiAobGVuKQotCQkgIGJyb25seSA9IDA7Ci0JCWlmIChicm9ubHkgJiYgKG1hdGNo ZGVwdGggIT0gMSkpCi0JCSAgYnJvbmx5ID0gMDsKLQkJbiA9IHAgLSBwYXR0ZXJuOwkgICAgLyog U2l6ZSBvZiBsaXN0IGluIGJyYWNlcyAqLwotCQlpZiAoKGJ1ZiA9IChjaGFyICopbWFsbG9jKG4r MSkpKSB7IC8qIENvcHkgc28gd2UgY2FuIHBva2UgaXQgKi8KLQkJICAgIGNoYXIgKiB0cCA9IE5V TEw7Ci0JCSAgICBpbnQgaywgc29mYXI7Ci0JCSAgICBja3N0cm5jcHkoYnVmLHBhdHRlcm4sbisx KTsKLQkJICAgIHNvZmFyID0gc3RyaW5nIC0gb3N0cmluZyAtIG1hdGNocG9zICsgMTsKLQkJICAg IGlmIChzb2ZhciA8IDApIHNvZmFyID0gMDsKLQkJICAgIGRlYnVnKEYxMTEsIkNLTUFUQ0ggLi4g c3RyaW5nIixzdHJpbmcsc29mYXIpOwotCQkgICAgZGVidWcoRjExMSwiQ0tNQVRDSCAuLiBvc3Ry aW5nIixvc3RyaW5nLHNvZmFyKTsKLQkJICAgIG4gPSAwOwotCQkgICAgZm9yIChzID0gczIgPSBi dWY7IDE7IHMrKykgeyAvKiBMb29wIHRocm91Z2ggc2VnbWVudHMgKi8KLQkJCW4rKzsKLQkJCWlm IChxKSB7CS8qIFRoaXMgY2hhciBpcyBxdW90ZWQgKi8KLQkJCSAgICBxID0gMDsKLQkJCSAgICBp ZiAoISpzKQotCQkJICAgICAgZG9uZSA9IDE7Ci0JCQkgICAgY29udGludWU7Ci0JCQl9Ci0JCQlp ZiAoKnMgPT0gQ01EUSAmJiAhcSkgewkvKiBRdW90ZSBuZXh0IGNoYXIgKi8KLQkJCSAgICBxID0g MTsKLQkJCSAgICBjb250aW51ZTsKLQkJCX0KLQkJCWlmICghKnMgfHwgKnMgPT0gJywnKSB7CS8q IEVuZCBvZiB0aGlzIHNlZ21lbnQgKi8KLQkJCSAgICBpbnQgdHBsZW4gPSAwOwotCQkJICAgIGlm ICghKnMpCS8qIElmIGVuZCBvZiBidWZmZXIgKi8KLQkJCSAgICAgIGRvbmUgPSAxOwkvKiB0aGVu IGVuZCBvZiBsYXN0IHNlZ21lbnQgKi8KLQkJCSAgICAqcyA9IE5VTDsJLyogT3ZlcndyaXRlIGNv bW1hIHdpdGggTlVMICovCi0JCQkgICAgZGVidWcoRjExMSwiQ0tNQVRDSCB7fSBzZWdtZW50Iixz Mixkb25lKTsKLQkJCSAgICB0cGxlbiA9IG4gKyBsZW4gKyBzb2ZhciArIDI7Ci0JCQkgICAgaWYg KCEqczIpIHsJLyogRW1wdHkgc2VnbWVudCwgbm8gYWR2YW5jZW1lbnQgKi8KLQkJCQlrID0gMDsK LQkJCSAgICB9IGVsc2UgaWYgKCh0cCA9IChjaGFyICopbWFsbG9jKHRwbGVuKSkpIHsKLQkJCQlp bnQgc2F2cG9zLCBvcHRzMjsKLQkJCQljaGFyICogcHA7Ci0JCQkJcHAgPSBtYXRjaHBvcyA+IDAg PwotCQkJCSAgICAmb3N0cmluZ1ttYXRjaHBvcy0xXSA6Ci0JCQkJICAgIG9zdHJpbmc7Ci0JCQkJ aWYgKGJyb25seSkgewotCQkJCSAgICBpZiAobWF0Y2hwb3MgPiAwKQotCQkJCSAgICAgIGNrc3Ry bmNweSh0cCxwcCxzb2ZhcisxKTsKLQkJCQkgICAgZWxzZQotCQkJCSAgICAgIGNrc3RybmNweSh0 cCxwcCxzb2Zhcik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkgICAgdHBbMF0gPSAnKic7Ci0JCQkJICAg IHRwWzFdID0gTlVMOwotCQkJCSAgICBpZiAobWF0Y2hwb3MgPiAwKQotCQkJCSAgICAgIGNrc3Ry bmNweSgmdHBbMV0scHAsc29mYXIrMSk7Ci0JCQkJICAgIGVsc2UKLQkJCQkgICAgICBja3N0cm5j cHkoJnRwWzFdLHBwLHNvZmFyKTsKLQkJCQl9Ci0JCQkJY2tzdHJuY2F0KHRwLHMyLHRwbGVuKTsg LyogQ3VycmVudCBzZWdtZW50ICovCi0JCQkJY2tzdHJuY2F0KHRwLHArMSx0cGxlbik7IC8qIHJl c3Qgb2YgcGF0dGVybiAqLwotCi0JCQkJZGVidWcoRjEwMSwiQ0tNQVRDSCB7fSBtYXRjaHBvcyIs IiIsbWF0Y2hwb3MpOwotCQkJCXNhdnBvcyA9IG1hdGNocG9zOwotCQkJCW1hdGNocG9zID0gMDsK LSNpZmRlZiBERUJVRwotCQkJCWlmIChkZWJsb2cpIHsKLQkJCQkgICAgZGVidWcoRjExMSwiQ0tN QVRDSCB7fSB0cCIsdHAsbWF0Y2hwb3MpOwotCQkJCSAgICBkZWJ1ZyhGMTExLCJDS01BVENIIHt9 IHN0cmluZyIsCi0JCQkJCSAgc3RyaW5nLG1hdGNocG9zKTsKLQkJCQkgICAgZGVidWcoRjExMSwi Q0tNQVRDSCB7fSBvc3RyaW5nIiwKLQkJCQkJICBvc3RyaW5nLHNhdnBvcyk7Ci0JCQkJfQotI2Vu ZGlmIC8qIERFQlVHICovCi0JCQkJLyogSWYgc2VnbWVudCBzdGFydHMgd2l0aCBkb3QgKi8KLQkJ CQkvKiB0aGVuIHNldCBtYXRjaGRvdCBvcHRpb24uLiAqLwotCQkJCW9wdHMyID0gb3B0czsKLQkJ CQlpZiAoKnMyID09ICcuJykgb3B0czIgfD0gMTsKLQkJCQlkZWJ1ZyhGMTExLCJDS01BVENIIHt9 IHJlY3Vyc2luZyIsczIsb3B0czIpOwotCQkJCWsgPSBja21hdGNoKHRwLAotCQkJCQkgICAgKHN0 cmluZyA+IG9zdHJpbmcpID8KLQkJCQkJICAgICZvc3RyaW5nW3NhdnBvcy0xXSA6IHN0cmluZywK LQkJCQkJICAgIGljYXNlLG9wdHMyKTsKLSNpZmRlZiBERUJVRwotCQkJCWlmIChkZWJsb2cpIHsK LQkJCQkgICAgZGVidWcoRjEwMSwiQ0tNQVRDSCB7fSBrIiwiIixrKTsKLQkJCQkgICAgZGVidWco RjEwMSwiQ0tNQVRDSCB7fSBzYXZwb3MiLCIiLHNhdnBvcyk7Ci0JCQkJfQotI2VuZGlmIC8qIERF QlVHICovCi0JCQkJZnJlZSh0cCk7Ci0JCQkJdHAgPSBOVUxMOwotCQkJCWlmICh4eGZsYWcpIE1B VENIUkVUVVJOKDAsMCk7Ci0JCQkJaWYgKGsgPT0gMCkgewotCQkJCSAgICBtYXRjaHBvcyA9IHNh dnBvczsKLQkJCQl9Ci0JCQkJaWYgKGsgPiAwKSB7IC8qIElmIGl0IG1hdGNoZWQgd2UncmUgZG9u ZSAqLwotCQkJCSAgICBNQVRDSFJFVFVSTig3LGspOwotCQkJCX0KLQkJCSAgICB9IGVsc2Ugewkv KiBNYWxsb2MgZmFpbHVyZSAqLwotCQkJCU1BVENIUkVUVVJOKDE0LDApOwotCQkJICAgIH0KLQkJ CSAgICBpZiAoaykgewkvKiBTdWNjZXNzZnVsIGNvbXBhcmlzb24gKi8KLQkJCQlpZiAoIW1hdGNo cG9zKSB7Ci0JCQkJICAgIG1hdGNocG9zID0gc3RyaW5ncG9zOwotCQkJCSAgICBkZWJ1ZyhGMTEx LCJDS01BVENIIHt9IG1hdGNoIiwKLQkJCQkJICBzdHJpbmcsIG1hdGNocG9zKTsKLQkJCQl9Ci0J CQkJc3RyaW5nICs9IG4tMTsgLyogQWR2YW5jZSBwb2ludGVycyAqLwotCQkJCXBhdHRlcm4gPSBw KzE7Ci0JCQkJYnJlYWs7Ci0JCQkgICAgfQotCQkJICAgIGlmIChkb25lKQkvKiBJZiBubyBtb3Jl IHNlZ21lbnRzICovCi0JCQkgICAgICBicmVhazsJLyogYnJlYWsgb3V0IG9mIHNlZ21lbnQgbG9v cC4gKi8KLQkJCSAgICBzMiA9IHMrMTsJLyogT3RoZXJ3aXNlLCBvbiB0byBuZXh0IHNlZ21lbnQg Ki8KLQkJCSAgICBuID0gMDsKLQkJCX0KLQkJICAgIH0KLQkJICAgIGZyZWUoYnVmKTsKLQkJfQot CSAgICB9Ci0jZW5kaWYgLyogQ0tSRUdFWCAqLwotCX0gZWxzZSBpZiAoY3AgPT0gJyonKSB7CQkv KiBQYXR0ZXJuIGNoYXIgaXMgYXN0ZXJpc2sgKi8KLQkgICAgY2hhciAqIHBzYXZlOwotCSAgICBj aGFyICogcCwgKiBzID0gTlVMTDsJLyogbWVhbmluZyBtYXRjaCBhbnl0aGluZyAqLwotCSAgICBp bnQgaywgbiwgcSA9IDA7Ci0JICAgIGhhdmVzdGFyKys7CQkJLyogVGhlIHJlc3QgY2FuIGZsb2F0 ICovCi0JICAgIHdoaWxlICgqcGF0dGVybiA9PSAnKicpCS8qIENvbGxhcHNlIHN1Y2Nlc3NpdmUg YXN0ZXJpc2tzICovCi0JICAgICAgcGF0dGVybisrOwotCSAgICBwc2F2ZSA9IHBhdHRlcm47CQkv KiBGaXJzdCBub24tYXN0ZXJpc2sgYWZ0ZXIgYXN0ZXJpc2sgKi8KLQkgICAgbGFzdHBhdCA9IHBh dHRlcm4gLSAxOwkvKiBEaXR0bywgZ2xvYmFsICovCi0JICAgIGRlYnVnKEYxMTEsIkNLTUFUQ0gg KiAiLHN0cmluZyxtYXRjaHBvcyk7Ci0JICAgIGZvciAobiA9IDAsIHAgPSBwc2F2ZTsgKnA7IHAr KyxuKyspIHsgLyogRmluZCBuZXh0IG1ldGEgY2hhciAqLwotCQlpZiAoIXEpIHsKLQkJICAgIGlm ICgqcCA9PSAnPycgfHwgKnAgPT0gJyonIHx8ICpwID09IENNRFEKLSNpZmRlZiBDS1JFR0VYCi0J CQl8fCAqcCA9PSAnWycgfHwgKnAgPT0gJ3snCi0jZW5kaWYgLyogQ0tSRUdFWCAqLwotCQkJKQot CQkgICAgICBicmVhazsKLSNpZmRlZiBHTE9CQklORwotCQkgICAgaWYgKGdsb2JiaW5nCi0jaWZk ZWYgVU5JWE9ST1NLCi0JCQkmJiAqcCA9PSAnLycKLSNlbHNlCi0jaWZkZWYgVk1TCi0JCQkmJiAo KnAgPT0gJy4nIHx8ICpwID09ICddJyB8fAotCQkJICAgICpwID09ICc8JyB8fCAqcCA9PSAnPicg fHwKLQkJCSAgICAqcCA9PSAnOicgfHwgKnAgPT0gJzsnKQotI2Vsc2UKLSNpZmRlZiBkYXRhZ2Vu ZXJhbAotCQkJJiYgKnAgPT0gJzonCi0jZWxzZQotI2lmZGVmIFNUUkFUVVMKLQkJCSYmICpwID09 ICc+JwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2Vu ZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIFVOSVhPUk9TSyAqLwotCQkJKQotCQkgICAgICBicmVh azsKLSNlbmRpZiAvKiBHTE9CQklORyAqLwotCQl9Ci0JICAgIH0KLQkgICAgZGVidWcoRjExMSwi Q0tNQVRDSCAqIG4gc3RyaW5nIixzdHJpbmcsbik7Ci0JICAgIGRlYnVnKEYxMTEsIkNLTUFUQ0gg KiBuIHBhdHRybiIscGF0dGVybixuKTsKLQkgICAgZGVidWcoRjExMSwiQ0tNQVRDSCAqIG4gcCIs cCxuKTsKLQkgICAgaWYgKG4gPiAwKSB7CQkvKiBMaXRlcmFsIHN0cmluZyB0byBtYXRjaCAgKi8K LQkJcyA9IChjaGFyICopbWFsbG9jKG4rMSk7Ci0JCWlmIChzKSB7Ci0JCSAgICBja3N0cm5jcHko cyxwc2F2ZSxuKzEpOyAvKiBDb3B5IGN1eiBubyBwb2tpbmcgb3JpZ2luYWwgKi8KLQkJICAgIGlm ICgqcCkgewotCQkJayA9IGNraW5kZXgocyxzdHJpbmcsMCwwLGljYXNlKTsgLyogMS1iYXNlZCBp bmRleCgpICovCi0JCQlkZWJ1ZyhGMTEwLCJDS01BVENIICogSW5kZXgoKSBzdHJpbmciLHN0cmlu ZywwKTsKLQkJCWRlYnVnKEYxMTAsIkNLTUFUQ0ggKiBJbmRleCgpIHBhdHRybiIscywwKTsKLQkJ CWRlYnVnKEYxMDEsIkNLTUFUQ0ggKiBJbmRleCgpIHJlc3VsdCIsIiIsayk7Ci0JCSAgICB9IGVs c2UgewkJLyogU3RyaW5nIGlzIHJpZ2h0LWFuY2hvcmVkICovCi0JCQlrID0gY2tpbmRleChzLHN0 cmluZywtMSwxLGljYXNlKTsgLyogcmluZGV4KCkgKi8KLQkJCWRlYnVnKEYxMTEsIkNLTUFUQ0gg KiBSaW5kZXgoKSIsc3RyaW5nLGspOwotCQkJZGVidWcoRjExMCwiQ0tNQVRDSCAqIFJpbmRleCgp IHBhdHRybiIscywwKTsKLQkJCWRlYnVnKEYxMDEsIkNLTUFUQ0ggKiBSaW5kZXgoKSByZXN1bHQi LCIiLGspOwotCQkgICAgfQotCQkgICAgZnJlZShzKTsKLQkJICAgIGlmIChrIDwgMSkgewotCQkJ TUFUQ0hSRVRVUk4oOCwwKTsKLQkJICAgIH0KLQkJICAgIGRlYnVnKEYxMTEsIkNLTUFUQ0ggKiBz dHJpbmdwb3MgbWF0Y2hwb3MiLAotCQkJICBja2l0b2Eoc3RyaW5ncG9zKSwgbWF0Y2hwb3MpOwot CQkgICAgaWYgKCFtYXRjaHBvcykgewotCQkJbWF0Y2hwb3MgPSBzdHJpbmcgLSBvc3RyaW5nICsg azsKLQkJCWRlYnVnKEYxMTEsIkNLTUFUQ0ggKiBuZXcgbWF0Y2ggIiwgc3RyaW5nLCBtYXRjaHBv cyk7Ci0JCSAgICB9Ci0JCSAgICBzdHJpbmcgKz0gayArIG4gLSAxOwotCQkgICAgc3RyaW5ncG9z ICs9IGsgKyBuIC0gMTsKLQkJICAgIHBhdHRlcm4gKz0gbjsKLQkJICAgIGRlYnVnKEYxMTEsIkNL TUFUQ0ggKiBuZXcgc3RyaW5nIiwgc3RyaW5nLCBzdHJpbmdwb3MpOwotCQkgICAgZGVidWcoRjEx MCwiQ0tNQVRDSCAqIG5ldyBwYXR0cm4iLCBwYXR0ZXJuLCAwKTsKLQkJICAgIGNvbnRpbnVlOwot CQl9Ci0JICAgIH0gZWxzZSBpZiAoISpwKSB7CQkvKiBBc3RlcmlzayBhdCBlbmQgbWF0Y2hlcyB0 aGUgcmVzdCAqLwotCQlpZiAoIWdsb2JiaW5nKSB7CS8qIChpZiBub3QgZmlsZW5hbWUgZ2xvYmJp bmcpICovCi0JCSAgICBpZiAoIW1hdGNocG9zKSB7Ci0JCQltYXRjaHBvcyA9IHN0cmluZ3BvczsK LQkJCWRlYnVnKEYxMTEsIkNLTUFUQ0ggKiQgIixzdHJpbmcsIG1hdGNocG9zKTsKLQkJICAgIH0K LQkJICAgIG1hdGNoZW5kID0gc3RyaW5ncG9zOwotCQkgICAgTUFUQ0hSRVRVUk4oOSxtYXRjaHBv cyk7Ci0JCX0KLSNpZmRlZiBHTE9CQklORwotCQl3aGlsZSAoKnN0cmluZykgewotCQkgICAgaWYg KGdsb2JiaW5nCS8qIEZpbGVzcGVjIHNvIGRvbid0IGNyb3NzIGZpZWxkcyAqLwotI2lmZGVmIE9T MgotCQkJJiYgKnN0cmluZyA9PSAnLycgfHwgKnN0cmluZyA9PSAnXFwnIHx8Ci0JCQkqc3RyaW5n ID09ICc6JwotI2Vsc2UKLSNpZmRlZiBVTklYT1JPU0sKLQkJCSYmICpzdHJpbmcgPT0gJy8nCi0j ZWxzZQotI2lmZGVmIFZNUwotCQkJJiYgKCpzdHJpbmcgPT0gJy4nIHx8ICpzdHJpbmcgPT0gJ10n IHx8Ci0JCQkgICAgKnN0cmluZyA9PSAnPCcgfHwgKnN0cmluZyA9PSAnPicgfHwKLQkJCSAgICAq c3RyaW5nID09ICc6JyB8fCAqc3RyaW5nID09ICc7JykKLSNlbHNlCi0jaWZkZWYgZGF0YWdlbmVy YWwKLQkJCSYmICpzdHJpbmcgPT0gJzonCi0jZWxzZQotI2lmZGVmIFNUUkFUVVMKLQkJCSYmICpz dHJpbmcgPT0gJz4nCi0jZWxzZQotCQkJJiYgKnN0cmluZyA9PSAnLycgLyogKGNhdGNoLWFsbCkg Ki8KLSNlbmRpZiAvKiBTVFJBVFVTICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRp ZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBVTklYT1JPU0sgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQkJ CSkgewotCQkJbWF0Y2hlbmQgPSBzdHJpbmdwb3M7Ci0JCQlNQVRDSFJFVFVSTigxMCwwKTsKLQkJ ICAgIH0KLQkJICAgIGlmICghbWF0Y2hwb3MpIHsKLQkJCW1hdGNocG9zID0gc3RyaW5ncG9zOwot CQkJZGVidWcoRjExMSwiQ0tNQVRDSCAqJCBtYXRjaCIsc3RyaW5nLCBtYXRjaHBvcyk7Ci0JCSAg ICB9Ci0JCSAgICBzdHJpbmcrKzsKLQkJICAgIHN0cmluZ3BvcysrOwotCQl9Ci0jZW5kaWYgLyog R0xPQkJJTkcgKi8KLQkJaWYgKCFtYXRjaHBvcykgewotCQkgICAgbWF0Y2hwb3MgPSBzdHJpbmdw b3M7Ci0JCSAgICBkZWJ1ZyhGMTExLCJDS01BVENIICoqIG1hdGNoIixzdHJpbmcsIG1hdGNocG9z KTsKLQkJfQotCQltYXRjaGVuZCA9IHN0cmluZ3BvczsKLQkJTUFUQ0hSRVRVUk4oMTEsbWF0Y2hw b3MpOwotCi0JICAgIH0gZWxzZSB7CQkJLyogQSBtZXRhIGNoYXIgZm9sbG93cyBhc3RlcmlzayAq LwotCQlpZiAoISpzdHJpbmcpCi0JCSAgTUFUQ0hSRVRVUk4oMTcsIG1hdGNocG9zID0gMCk7Ci0j aWZkZWYgQ09NTUVOVAotCQkvKiBUaGlzIGlzIG1vcmUgZWxlZ2FudCBidXQgaXQgZG9lc24ndCB3 b3JrLiAqLwotCQlwLS07Ci0JCXN0cmluZysrOwotCQlzdHJpbmdwb3MrKzsKLQkJayA9IGNrbWF0 Y2gocCxzdHJpbmcsaWNhc2Usb3B0cyk7Ci0jZWxzZQotCQl3aGlsZSAoKnN0cmluZyAmJiAoKGsg PSBja21hdGNoKHAsc3RyaW5nLGljYXNlLG9wdHMpKSA8IDEpKSB7Ci0JCSAgICBpZiAoeHhmbGFn KSBNQVRDSFJFVFVSTigwLDApOwotCQkgICAgc3RyaW5nKys7Ci0JCSAgICBzdHJpbmdwb3MrKzsK LQkJfQotCQlpZiAoISpzdHJpbmcgJiYgayA8IDEpIHsKLS8qCi0gIERlZmluaXRlbHkgbm8gbWF0 Y2ggc28gd2Ugc2V0IGEgZ2xvYmFsIGZsYWcgdG8gaW5pYml0IGZ1cnRoZXIgYmFja2luZyB1cAot ICBhbmQgcmV0cnlpbmcgYnkgcHJldmlvdXMgaW5jYXJuYXRpb25zLCBzaW5jZSB0aGV5IGRvbid0 IHNlZSB0aGF0IHRoZSBzdHJpbmcKLSAgYW5kL29yIHBhdHRlcm4sIHdoaWNoIGFyZSBvbiB0aGUg c3RhY2ssIGhhdmUgYmVlbiBleGhhdXN0ZWQgYXQgdGhpcyBsZXZlbC4KLSovCi0JCSAgICB4eGZs YWcrKzsKLQkJICAgIGRlYnVnKEYxMTEsIkNLTUFUQ0ggREVGSU5JVEVMWSBOTyBNQVRDSCIscCxr KTsKLQkJICAgIE1BVENIUkVUVVJOKDkxLDApOwotCQl9Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwot CQlkZWJ1ZyhGMTExLCJDS01BVENIICo8bWV0YT4gayIsc3RyaW5nLCBrKTsKLQkJaWYgKCFtYXRj aHBvcyAmJiBrID4gMCkgewotCQkgICAgbWF0Y2hwb3MgPSBzdHJpbmdwb3M7Ci0JCSAgICBkZWJ1 ZyhGMTExLCJDS01BVENIICo8bWV0YT4gbWF0Y2hwb3MiLHN0cmluZywgbWF0Y2hwb3MpOwotCQl9 Ci0JCU1BVENIUkVUVVJOKDEyLCAoKnN0cmluZykgPyBtYXRjaHBvcyA6IDApOwotCSAgICB9Ci0J fSBlbHNlIGlmIChjcyA9PSBjcCkgewotCSAgICBwYXR0ZXJuKys7Ci0JICAgIHN0cmluZysrOwot CSAgICBzdHJpbmdwb3MrKzsKLQkgICAgaWYgKCFtYXRjaHBvcykgewotCQltYXRjaHBvcyA9IHN0 cmluZ3BvczsKLQkJZGVidWcoRjExMSwiQ0tNQVRDSCBjcz1jcCIsc3RyaW5nLCBtYXRjaHBvcyk7 Ci0JICAgIH0KLQkgICAgY29udGludWU7Ci0JfSBlbHNlIHsKLQkgICAgTUFUQ0hSRVRVUk4oMTMs MCk7Ci0JfQotICAgIH0KLSAgeGNrbWF0Y2g6Ci0gICAgewotI2lmZGVmIERFQlVHCi0JY2hhciBt c2didWZbMjU2XTsKLSNlbmRpZiAvKiBERUJVRyAqLwotCWlmIChtYXRjaGRlcHRoID4gMCkKLQkg IG1hdGNoZGVwdGgtLTsKLQltYXRjaHBvcyA9IHJjOwotI2lmZGVmIERFQlVHCi0JY2ttYWt4bXNn KG1zZ2J1ZiwyNTYsCi0JCSAgIkNLTUFUQ0ggUkVUVVJOWyIsCi0JCSAgY2tpdG9hKHdoZXJlKSwK LQkJICAiXSBtYXRjaHBvcz0iLAotCQkgIGNraXRvYShtYXRjaHBvcyksCi0JCSAgIiBtYXRjaGRl cHRoPSIsCi0JCSAgY2tpdG9hKG1hdGNoZGVwdGgpLAotCQkgICIgcGF0PSIscGF0dGVybiwKLQkJ ICAiIHN0cmluZz0iLHN0cmluZyxOVUxMLE5VTEwKLQkJICApOwotCWRlYnVnKEYxMTAsbXNnYnVm LHN0cmluZywwKTsKLSNlbmRpZiAvKiBERUJVRyAqLwotCXJldHVybihyYyk7Ci0gICAgfQotfQot Ci0KLSNpZmRlZiBDS0ZMT0FUCi0vKiAgSSBTIEYgTCBPIEEgVCAgLS0gVmVyaWZ5IHRoYXQgYXJn IHJlcHJlc2VudHMgYSBmbG9hdGluZy1wb2ludCBudW1iZXIgKi8KLQotLyoKLSAgUG9ydGFibGUg cmVwbGFjZW1lbnQgZm9yIGF0b2YoKSwgc3RydG9kKCksIHNjYW5mKCksIGV0Yy4KLQotICBDYWxs IHdpdGg6Ci0gICAgcyA9IHBvaW50ZXIgdG8gc3RyaW5nCi0gICAgZmxhZyA9PSAwIG1lYW5zIGVu dGlyZSBzdHJpbmcgbXVzdCBiZSBhIChmbG9hdGluZy1wb2ludGluZykgbnVtYmVyLgotICAgIGZs YWcgIT0gMCBtZWFucyB0byB0ZXJtaW5hdGUgc2NhbiBvbiBmaXJzdCBjaGFyYWN0ZXIgdGhhdCBp cyBub3QgbGVnYWwuCi0KLSAgUmV0dXJuczoKLSAgICAxIGlmIHJlc3VsdCBpcyBhIGxlZ2FsIG51 bWJlcjsKLSAgICAyIGlmIHJlc3VsdCBoYXMgYSBmcmFjdGlvbmFsIHBhcnQ7Ci0gICAgMCBpZiBu b3Qgb3IgaWYgc3RyaW5nIGVtcHR5LgotCi0gIFNpZGUgZWZmZWN0OgotICAgIFNldHMgZ2xvYmFs IGZsb2F0dmFsIHRvIGZsb2F0aW5nLXBvaW50IHZhbHVlIGlmIHN1Y2Nlc3NmdWwuCi0KLSAgTnVt YmVyIG5lZWQgbm90IGNvbnRhaW4gYSBkZWNpbWFsIHBvaW50IC0tIGludGVnZXIgaXMgc3ViY2Fz ZSBvZiBmbG9hdC4KLSAgU2NpZW50aWZpYyBub3RhdGlvbiBub3Qgc3VwcG9ydGVkLgotKi8KLUNL RkxPQVQgZmxvYXR2YWwgPSAwLjA7CQkJLyogRm9yIHJldHVybmluZyB2YWx1ZSAqLwotCi1pbnQK LWlzZmxvYXQocyxmbGFnKSBjaGFyICpzOyBpbnQgZmxhZzsgewotICAgIGludCBzdGF0ZSA9IDA7 Ci0gICAgaW50IHNpZ24gPSAwOwotICAgIGNoYXIgYzsKLSAgICBDS0ZMT0FUIGQgPSAwLjAsIGYg PSAwLjA7Ci0KLSAgICBpZiAoIXMpIHJldHVybigwKTsKLSAgICBpZiAoISpzKSByZXR1cm4oMCk7 Ci0KLSAgICB3aGlsZSAoaXNzcGFjZSgqcykpIHMrKzsKLQotICAgIGlmICgqcyA9PSAnLScpIHsJ CQkvKiBIYW5kbGUgb3B0aW9uYWwgc2lnbiAqLwotCXNpZ24gPSAxOwotCXMrKzsKLSAgICB9IGVs c2UgaWYgKCpzID09ICcrJykKLSAgICAgIHMrKzsKLSAgICB3aGlsZSAoKGMgPSAqcysrKSkgewkJ LyogSGFuZGxlIG51bWVyaWMgcGFydCAqLwotCXN3aXRjaCAoc3RhdGUpIHsKLQkgIGNhc2UgMDoJ CQkvKiBNYW50aXNzYS4uLiAqLwotCSAgICBpZiAoaXNkaWdpdChjKSkgewotCQlmID0gZiAqIDEw LjAgKyAoQ0tGTE9BVCkoYyAtICcwJyk7Ci0JCWNvbnRpbnVlOwotCSAgICB9IGVsc2UgaWYgKGMg PT0gJy4nKSB7Ci0JCXN0YXRlID0gMTsKLQkJZCA9IDEuMDsKLQkJY29udGludWU7Ci0JICAgIH0K LQkgICAgaWYgKGZsYWcpCQkJLyogTm90IGRpZ2l0IG9yIHBlcmlvZCAqLwotCSAgICAgIGdvdG8g ZG9uZTsJCS8qIGJyZWFrIGlmIGZsYWcgIT0gMCAqLwotCSAgICByZXR1cm4oMCk7CQkJLyogb3Ro ZXJ3aXNlIGZhaWwuICovCi0JICBjYXNlIDE6CQkJLyogRnJhY3Rpb24uLi4gKi8KLQkgICAgaWYg KGlzZGlnaXQoYykpIHsKLQkJZCAqPSAxMC4wOwotCQlmICs9IChDS0ZMT0FUKShjIC0gJzAnKSAv IGQ7Ci0JCWNvbnRpbnVlOwotCSAgICB9Ci0JICBkZWZhdWx0OgotCSAgICBpZiAoZmxhZykJCQkv KiBJbGxlZ2FsIGNoYXJhY3RlciAqLwotCSAgICAgIGdvdG8gZG9uZTsJCS8qIEJyZWFrICovCi0J ICAgIHJldHVybigwKTsJCQkvKiBvciBmYWlsLCBkZXBlbmRpbmcgb24gZmxhZyAqLwotCX0KLSAg ICB9Ci0gIGRvbmU6Ci0gICAgaWYgKHNpZ24pIGYgPSAwLjAgLSBmOwkJLyogQXBwbHkgc2lnbiB0 byByZXN1bHQgKi8KLSAgICBmbG9hdHZhbCA9IGY7CQkJLyogU2V0IHJlc3VsdCAqLwotICAgIHJl dHVybihkID8gMiA6IDEpOwkJCS8qIFN1Y2NlZWQgKi8KLX0KLQotLyoKLSAgYyBrIHIgbyB1IG4g ZCAgLS0gIFJvdW5kcyBhIGZsb2F0aW5nIHBvaW50IG51bWJlciBvciBhbiBpbnRlZ2VyLgotCi0g IGZwbnVtOgotICAgIEZsb2F0aW5nLXBvaW50IG51bWJlciB0byByb3VuZC4KLSAgcGxhY2VzOgot ICAgIFBvc2l0aXZlLi4uVG8gaG93IG1hbnkgZGVjaW1hbCBwbGFjZXMuCi0gICAgWmVyby4uLi4u Li5Sb3VuZCB0byBpbnRlZ2VyLgotICAgIE5lZ2F0aXZlLi4uLTEgPSBuZWFyZXN0IHRlbiwgLTIg PSBuZWFyZXN0IDEwMCwgLTMgPSBuZWFyZXN0IHRob3VzYW5kLCBldGMuCi0gIG9idWYKLSAgICBP dXRwdXQgYnVmZmVyIGZvciBzdHJpbmcgcmVzdWx0IGlmIGRlc2lyZWQuCi0gIG9idWZsZW4gICAg Ci0gICAgTGVuZ3RoIG9mIG91dHB1dCBidWZmZXIuCi0gIFJldHVybnM6Ci0gICAgUmVzdWx0IGFz IENLRkxPQVQgKHdoaWNoIGlzIG5vdCBnb2luZyB0byBiZSBhcyBleGFjdCBhcyB0aGUgc3RyaW5n IHJlc3VsdCkKLSAgICBBbmQgdGhlIGV4YWN0IHJlc3VsdCBpbiB0aGUgc3RyaW5nIG91dHB1dCBi dWZmZXIsIGlmIG9uZSB3YXMgc3BlY2lmaWVkLgotKi8KLUNLRkxPQVQKLSNpZmRlZiBDS19BTlNJ QwotY2tyb3VuZChDS0ZMT0FUIGZwbnVtLCBpbnQgcGxhY2VzLCBjaGFyICpvYnVmLCBpbnQgb2J1 ZmxlbikKLSNlbHNlCi1ja3JvdW5kKGZwbnVtLHBsYWNlcyxvYnVmLG9idWZsZW4pCi0gQ0tGTE9B VCBmcG51bTsgaW50IHBsYWNlcywgb2J1ZmxlbjsgY2hhciAqb2J1ZjsKLSNlbmRpZiAvKiBDS19B TlNJQyAqLwotLyogY2tyb3VuZCAgKi8gewotICAgIGNoYXIgKnMsICpzMiwgKmQ7Ci0gICAgaW50 IGksIHAsIGxlbiwgeCwgbiwgZGlnaXRzOwotICAgIGludCBjYXJyeSA9IDA7Ci0gICAgaW50IG1p bnVzID0gMDsKLSAgICBjaGFyIGJ1ZlsyMDBdOwotICAgIGNoYXIgKiBudW1iZXI7Ci0gICAgQ0tG TE9BVCB2YWx1ZTsKLSAgICBleHRlcm4gaW50IGZwX2RpZ2l0czsKLQotICAgIHNwcmludGYoYnVm LCIlMjAwLjEwMGYiLGZwbnVtKTsJLyogTWFrZSBzdHJpbmcgdmVyc2lvbiB0byB3b3JrIHdpdGgg Ki8KLSAgICBudW1iZXIgPSAoY2hhciAqKSBidWY7CQkvKiBNYWtlIHBvaW50ZXIgdG8gaXQgKi8K LQotICAgIHAgPSBwbGFjZXM7CQkJCS8qIFByZWNpc2lvbiAqLwotICAgIGQgPSAoY2hhciAqKTA7 CQkJLyogUG9pbnRlciB0byBkZWNpbWFsIG9yIHN0cmluZyBlbmQgKi8KLQotICAgIHMgPSBudW1i ZXI7CQkJCS8qIEZpeCBudW1iZXIuLi4gKi8KLSAgICB3aGlsZSAoKnMgPT0gJyAnIHx8ICpzID09 ICdcMDExJykgcysrOyAvKiBTdHJpcCBsZWFkaW5nIHdoaXRlc3BhY2UgKi8KLSAgICBpZiAoKnMg PT0gJysnKSBzKys7CQkJICAgLyogU2tpcCBsZWFkaW5nIHBsdXMgc2lnbiovCi0gICAgbnVtYmVy ID0gczsJCQkJICAgLyogU3RhcnQgb2YgbnVtYmVyICovCi0gICAgaWYgKCpzID09ICctJykgeyBt aW51cysrOyBudW1iZXIrKzsgcysrOyB9IC8qIFJlbWVtYmVyIGlmIG5lZ2F0aXZlICovCi0KLSAg ICBzID0gbnVtYmVyOwkJCQkvKiBEb24ndCBhbGxvdyBmYWxzZSBwcmVjaXNpb24gKi8KLSAgICBu ID0gMDsKLSAgICB3aGlsZSAoKnMgJiYgKnMgIT0gJy4nKSBzKyssIG4rKzsgICAvKiBGaW5kIGRl Y2ltYWwgKi8KLQotICAgIGlmIChwICsgbiA+IGZwX2RpZ2l0cykJCS8qIFRvbyBtYW55IGRpZ2l0 cyAqLwotICAgICAgcCA9IGZwX2RpZ2l0cyAtIG47CQkvKiBEb24ndCBhc2sgZm9yIGJvZ3VzIHBy ZWNpc2lvbiAqLwotICAgIGlmIChwIDwgMCkgcCA9IDA7CQkJLyogQnV0IGRvbid0IGFzayBmb3Ig bGVzcyB0aGFuIHplcm8gKi8KLSAgICBpZiAobiA+IGZwX2RpZ2l0cykJCQkvKiBJbnRlZ2VyIHBh cnQgaGFzIHRvbyBtYW55IGRpZ2l0cyAqLwotICAgICAgKnMgPSAwOwkJCQkvKiBidXQgd2UgY2Fu J3QgdHJ1bmNhdGUgaXQgKi8KLSAgICBlbHNlCQkJCS8qIE1hZ25pdHVkZSBpcyBPSyAqLwotICAg ICAgbnVtYmVyW2ZwX2RpZ2l0cysxXSA9IDA7CQkvKiBUcnVuY2F0ZSBmcmFjdGlvbmFsIHBhcnQu ICovCi0KLSAgICBsZW4gPSAoaW50KXN0cmxlbihudW1iZXIpOwkJLyogTGVuZ3RoIG9mIG5vbi1i b2d1cyBudW1iZXIgKi8KLSAgICBkID0gczsJCQkJLyogUG9pbnRlciB0byBkZWNpbWFsIHBvaW50 ICovCi0gICAgaWYgKHAgPiAwKSB7CQkJLyogUm91bmRpbmcgdGhlIGZyYWN0aW9uYWwgcGFydCAq LwotCWlmIChuICsgcCA8IGxlbikgewkJLyogSWYgaXQncyBub3QgYWxyZWFkeSBzaG9ydGVyICov Ci0JICAgIGlmICgqcyA9PSAnLicpIHMrKzsJCS8qIFNraXAgcGFzdCBkZWNpbWFsICovCi0JICAg IHMgKz0gcDsJCQkvKiBHbyB0byBkZXNpcmVkIHNwb3QgKi8KLQkgICAgaWYgKCpzID4gJzQnICYm ICpzIDw9ICc5JykJLyogQ2hlY2sgdmFsdWUgb2YgZGlnaXQgKi8KLQkgICAgICBjYXJyeSA9IDE7 Ci0JICAgICpzID0gMDsJCQkvKiBBbmQgZW5kIHRoZSBzdHJpbmcgKi8gCi0JICAgIHMtLTsJCQkv KiBQb2ludCB0byBsYXN0IGRpZ2l0ICovCi0JfQotICAgIH0gZWxzZSBpZiAocCA9PSAwKSB7CQkv KiBSb3VuZGluZyB0byBpbnRlZ2VyICovCi0JaWYgKCpzID09ICcuJykgewotCSAgICAqcyA9IDA7 CQkJLyogZXJhc2UgdGhlIGRlY2ltYWwgcG9pbnQgKi8KLQkgICAgaWYgKCoocysxKSkgewkJLyog YW5kIHRoZXJlIGlzIGEgZmFjdGlvbmFsIHBhcnQgKi8KLQkJaWYgKCoocysxKSA+ICc0JyAmJiAq KHMrMSkgPD0gJzknKSAvKiBDaGVjayBmb3IgY2FycnkgKi8KLQkJICBjYXJyeSA9IDE7Ci0JICAg IH0KLQkgICAgcy0tOwkJCS8qIFBvaW50IHRvIGxhc3QgZGlnaXQgKi8KLQl9Ci0gICAgfSBlbHNl IHsJCQkJLyogUm91bmRpbmcgdGhlIGludGVnZXIgcGFydCAqLwotCWlmIChzICsgcCA+IG51bWJl cikgewkJLyogYXMgaW4gInRoZSBuZWFyZXN0IGh1bmRyZWQiICovCi0JICAgIHMgKz0gcDsJCQkv KiBHbyBsZWZ0IHRvIGRlc2lyZWQgZGlnaXQgKi8KLQkgICAgKmQgPSAwOwkJCS8qIERpc2NhcmQg ZnJhY3Rpb24gKi8KLQkgICAgY2FycnkgPSAwOwotCSAgICBpZiAoKnMgPiAnNCcpCQkvKiBDaGVj ayBmaXJzdCBkaWdpdCBvZiBmcmFjdGlvbiAqLwotCSAgICAgIGNhcnJ5ID0gMTsJCS8qIGFuZCBz ZXQgY2FycnkgZmxhZyAqLwotCSAgICBzMiA9IHM7Ci0JICAgIHdoaWxlIChzMiA8IGQpCQkvKiBG aWxsIGluIHRoZSByZXN0IHdpdGggemVyb3MgKi8KLQkgICAgICAqczIrKyA9ICcwJzsKLQkgICAg cy0tOwkJCS8qIFBvaW50IHRvIGxhc3QgZGlnaXQgKi8KLQl9Ci0gICAgfQotICAgIGlmIChjYXJy eSkgewkJCS8qIEhhbmRsZSBjYXJyeSwgaWYgYW55ICovCi0gICAgICAgIHdoaWxlIChzID49IG51 bWJlcikgewotICAgICAgICAgICAgaWYgKCpzID09ICcuJykgewkJLyogU2tpcCBiYWNrd2FyZHMg b3ZlciBkZWNpbWFsICovCi0gICAgICAgICAgICAgICAgcy0tOwotICAgICAgICAgICAgICAgIGNv bnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKnMgKz0gMTsJCQkvKiBBZGQgMSB0 byBjdXJyZW50IGRpZ2l0ICovCi0gICAgICAgICAgICBjYXJyeSA9IDA7Ci0gICAgICAgICAgICBp ZiAoKnMgPD0gJzknKSAJCS8qIElmIHJlc3VsdCBpcyA5IG9yIGxlc3MgKi8KLQkgICAgICBicmVh azsJCQkvKiB3ZSdyZSBkb25lICovCi0gICAgICAgICAgICAqcyA9ICcwJzsJCQkvKiBPdGhlcndp c2UgcHV0IDAgKi8KLSAgICAgICAgICAgIGNhcnJ5ID0gMTsJCQkvKiBjYXJyeSB0aGUgMSAqLwot ICAgICAgICAgICAgcy0tOwkJCS8qIGFuZCBiYWNrIHVwIHRvIG5leHQgZGlnaXQgKi8KLQl9Ci0g ICAgfQotI2lmZGVmIF9fYWxwaGEKLSAgICBzc2NhbmYobnVtYmVyLCIlZiIsJnZhbHVlKTsJCS8q IENvbnZlcnQgYmFjayB0byBmbG9hdGluZyBwb2ludCAqLwotI2Vsc2UKLSAgICBzc2NhbmYobnVt YmVyLCIlbGYiLCZ2YWx1ZSk7ICAgICAgICAvKiBDb252ZXJ0IGJhY2sgdG8gZmxvYXRpbmcgcG9p bnQgKi8KLSNlbmRpZgotICAgIGlmIChvYnVmKSBzdHJuY3B5KG9idWYsbnVtYmVyLG9idWZsZW4p OyAvKiBTZXQgc3RyaW5nIHJlc3VsdCAqLwotICAgIHJldHVybih2YWx1ZSk7CQkJICAgIC8qIFJl dHVybiBmbG9hdGluZy1wb2ludCByZXN1bHQgKi8KLX0KLQotI2VuZGlmIC8qIENLRkxPQVQgKi8K LQotLyogU29ydGluZyByb3V0aW5lcy4uLiAqLwotCi0vKiBTIEggXyBTIE8gUiBUICAtLSAgU2hl bGwgc29ydCAtLSBzb3J0cyBzdHJpbmcgYXJyYXkgcyBpbiBwbGFjZS4gKi8KLQotLyoKLSAgSGln aGx5IGRlZmVuc2l2ZSBhbmQgcmVsYXRpdmVseSBxdWljay4KLSAgVXNlcyBzaGVsbCBzb3J0IGFs Z29yaXRobS4KLQotICBBcmdzOgotICAgcyA9IHBvaW50ZXIgdG8gYXJyYXkgb2Ygc3RyaW5ncy4K LSAgIHAgPSBwb2ludGVyIHRvIGEgc2Vjb25kIGFycmF5IHRvIHNvcnQgaW4gcGFyYWxsZWwgcywg b3IgTlVMTCBmb3Igbm9uZS4KLSAgIG4gPSBudW1iZXIgb2YgZWxlbWVudHMgaW4gcy4KLSAgIGsg PSBwb3NpdGlvbiBvZiBrZXkuCi0gICByID0gYXNjZW5kaW5nIGxleGljYWwgb3JkZXIgaWYgemVy bywgcmV2ZXJzZSBsZXhpY2FsIG9yZGVyIGlmIG5vbnplcm8uCi0gICBjID0gMCBmb3IgY2FzZSBp bmRlcGVuZGVuY2UsIDEgZm9yIGNhc2UgbWF0dGVycywgMiBmb3IgbnVtZXJpYy4KLQotICBJZiBr IGlzIHBhc3QgdGhlIHJpZ2h0IGVuZCBvZiBhIHN0cmluZywgdGhlIHN0cmluZyBpcyBjb25zaWRl cmVkIGVtcHR5Ci0gIGZvciBjb21wYXJpc29uIHB1cnBvc2VzLgotCi0gIEhpbnQ6Ci0gICBUbyBz b3J0IGEgcGllY2Ugb2YgYW4gYXJyYXksIGNhbGwgd2l0aCBzIHBvaW50aW5nIHRvIHRoZSBmaXJz dCBlbGVtZW50Ci0gICBhbmQgbiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNvcnQuCi0KLSAg UmV0dXJuIHZhbHVlOgotICAgTm9uZS4gIEFsd2F5cyBzdWNjZWVkcywgdW5sZXNzIGFueSBvZiBz WzBdLi5zW24tMV0gYXJlIGJhZCBwb2ludGVycywKLSAgIGluIHdoaWNoIGNhc2UgbWVtb3J5IHZp b2xhdGlvbnMgYXJlIHBvc3NpYmxlLCBidXQgQyBvZmZlcnMgbm8gZGVmZW5zZQotICAgYWdhaW5z dCB0aGlzLCBzbyBubyB3YXkgdG8gZ3JhY2VmdWxseSByZXR1cm4gYW4gZXJyb3IgY29kZS4KLSov Ci1WT0lECi1zaF9zb3J0KHMscCxuLGsscixjKSBjaGFyICoqcywgKipwOyBpbnQgbiwgaywgciwg YzsgewotICAgIGludCBtLCBpLCBqLCB4OwotICAgIGNoYXIgKnQsICp0MSwgKnQyLCAqdSA9IE5V TEw7Ci0jaWZkZWYgQ0tGTE9BVAotICAgIENLRkxPQVQgZjEsIGYyOwotI2Vsc2UKLSAgICBsb25n IG4xLCBuMjsKLSNlbmRpZiAvKiBDS0ZMT0FUICovCi0KLSAgICBpZiAoIXMpIHJldHVybjsJCQkv KiBOb3RoaW5nIHRvIHNvcnQ/ICovCi0gICAgaWYgKG4gPCAyKSByZXR1cm47CQkJLyogTm90IGVu b3VnaCBlbGVtZW50cyB0byBzb3J0PyAqLwotICAgIGlmIChrIDwgMCkgayA9IDA7CQkJLyogS2V5 ICovCi0KLSAgICBtID0gbjsJCQkJLyogSW5pdGlhbCBncm91cCBzaXplIGlzIHdob2xlIGFycmF5 ICovCi0gICAgd2hpbGUgKDEpIHsKLQltID0gbSAvIDI7CQkJLyogRGl2aWRlIGdyb3VwIHNpemUg aW4gaGFsZiAqLwotCWlmIChtIDwgMSkJCQkvKiBTbWFsbCBhcyBjYW4gYmUsIHNvIGRvbmUgKi8K LQkgIGJyZWFrOwotCWZvciAoaiA9IDA7IGogPCBuLW07IGorKykgewkvKiBTb3J0IGVhY2ggZ3Jv dXAgKi8KLQkgICAgdCA9IHQyID0gc1tqK21dOwkJLyogQ29tcGFyZSB0aGlzIG9uZS4uLiAqLwot CSAgICBpZiAoIXQpCQkJLyogQnV0IGlmIGl0J3MgTlVMTCAqLwotCSAgICAgIHQyID0gIiI7CQkJ LyogbWFrZSBpdCB0aGUgZW1wdHkgc3RyaW5nICovCi0JICAgIGlmIChwKQkJCS8qIEhhbmRsZSBw YXJhbGxlbCBhcnJheSwgaWYgYW55ICovCi0JICAgICAgdSA9IHBbaittXTsKLQkgICAgaWYgKGsg PiAwICYmICp0MikgewotCQlpZiAoKGludClzdHJsZW4odDIpIDwgaykgLyogSWYga2V5IHRvbyBi aWcgKi8KLQkJICB0MiA9ICIiOwkJLyogbWFrZSBrZXkgdGhlIGVtcHR5IHN0cmluZyAqLwotCQll bHNlCQkJLyogS2V5IGlzIGluIHN0cmluZyAqLwotCQkgIHQyID0gdCArIGs7CQkvKiBzbyBwb2lu dCB0byBrZXkgcG9zaXRpb24gKi8KLQkgICAgfQotCSAgICBmb3IgKGkgPSBqOyBpID49IDA7IGkg LT0gbSkgeyAvKiBMb29wIHRocnUgY29tcGFyYW5kcyBzW2kuLl0qLwotCQl0MSA9IHNbaV07Ci0J CWlmICghdDEpCQkvKiBTYW1lIGRlYWwgKi8KLQkJICB0MSA9ICIiOwotCQlpZiAoayA+IDAgJiYg KnQxKSB7Ci0JCSAgICBpZiAoKGludClzdHJsZW4odDEpIDwgaykKLQkJICAgICAgdDEgPSAiIjsK LQkJICAgIGVsc2UKLQkJICAgICAgdDEgPSBzW2ldK2s7Ci0JCX0KLQkJaWYgKGMgPT0gMikgewkJ LyogTnVtZXJpYyBjb21wYXJpc29uICovCi0JCSAgICB4ID0gMDsKLSNpZmRlZiBDS0ZMT0FUCi0J CSAgICBmMiA9IDAuMDsKLQkJICAgIGYxID0gMC4wOwotCQkgICAgaWYgKGlzZmxvYXQodDEsMSkp IHsKLQkJCWYxID0gZmxvYXR2YWw7Ci0JCQlpZiAoaXNmbG9hdCh0MiwxKSkKLQkJCSAgZjIgPSBm bG9hdHZhbDsKLQkJCWVsc2UKLQkJCSAgZjEgPSAwLjA7Ci0JCSAgICB9Ci0JCSAgICBpZiAoZjIg PCBmMSkKLQkJICAgICAgeCA9IDE7Ci0JCSAgICBlbHNlCi0JCSAgICAgIHggPSAtMTsKLSNlbHNl Ci0JCSAgICBuMiA9IDBMOwotCQkgICAgbjEgPSAwTDsKLQkJICAgIGlmIChyZGlnaXRzKHQxKSkg ewotCQkJbjEgPSBhdG9sKHQxKTsKLQkJCWlmIChyZGlnaXRzKHQyKSkKLQkJCSAgbjIgPSBhdG9s KHQyKTsKLQkJCWVsc2UKLQkJCSAgbjEgPSAwTDsKLQkJICAgIH0KLQkJICAgIGlmIChuMiA8IG4x KQotCQkgICAgICB4ID0gMTsKLQkJICAgIGVsc2UKLQkJICAgICAgeCA9IC0xOwotI2VuZGlmIC8q IENLRkxPQVQgKi8KLQkJfSBlbHNlIHsKLQkJICAgIHggPSBja3N0cmNtcCh0MSx0MiwtMSxjKTsg LyogQ29tcGFyZSAqLwotCQl9Ci0JCWlmIChyID09IDAgJiYgeCA8IDApCi0JCSAgYnJlYWs7Ci0J CWlmIChyICE9IDAgJiYgeCA+IDApCi0JCSAgYnJlYWs7Ci0JCXNbaSttXSA9IHNbaV07Ci0JCWlm IChwKSBwW2krbV0gPSBwW2ldOwotCSAgICB9Ci0JICAgIHNbaSttXSA9IHQ7Ci0JICAgIGlmIChw KSBwW2krbV0gPSB1OwotCX0KLSAgICB9Ci19Ci0KLQotLyogQyBLIFIgQSBEIEkgWCAgLS0gIFJh ZGl4IGNvbnZlcnRlciAqLwotLyoKLSAgIENhbGwgd2l0aDoKLSAgICAgczogICBhIG51bWJlciBp biBzdHJpbmcgZm9ybWF0LgotICAgICBpbjogIGludCwgc3BlY2lmeWluZyB0aGUgcmFkaXggb2Yg cywgMi0zNi4KLSAgICAgb3V0OiBpbnQsIHNwZWNpZnlpbmcgdGhlIHJhZGl4IHRvIGNvbnZlcnQg dG8sIDItMzYuCi0gICBSZXR1cm5zOgotICAgICBOVUxMIG9uIGVycm9yIChpbGxlZ2FsIHJhZGl4 LCBpbGxlZ2FsIG51bWJlciwgZXRjLikuCi0gICAgICItMSIgb24gb3ZlcmZsb3cgKG51bWJlciB0 b28gYmlnIGZvciB1bnNpZ25lZCBsb25nKS4KLSAgICAgT3RoZXJ3aXNlOiBQb2ludGVyIHRvIHJl c3VsdC4KLSovCi1jaGFyICoKLWNrcmFkaXgocyxpbixvdXQpIGNoYXIgKiBzOyBpbnQgaW4sIG91 dDsgewotICAgIGNoYXIgYywgKnIgPSByeHJlc3VsdDsKLSAgICBpbnQgZCwgbWludXMgPSAwOwot I2lmZGVmIENPTU1FTlQKLSAgICB1bnNpZ25lZCBsb25nIHp6ID0gMEw7Ci0gICAgbG9uZyB6ID0g MEw7Ci0jZWxzZQotICAgIC8qCi0gICAgICBUbyBnZXQgNjQgYml0cyBvbiAzMi1iaXQgaGFyZHdh cmUgd2UgdXNlIG9mZl90LCBidXQgdGhlcmUKLSAgICAgIGlzIG5vIHVuc2lnbmVkIHZlcnNpb24g b2Ygb2ZmX3QsIHNvIHdlIGxvc2UgdGhlIGFiaWxpdHkgdG8KLSAgICAgIGRldGVjdCBvdmVyZmxv dy4KLSAgICAqLwotICAgIENLX09GRl9UIHp6ID0gKENLX09GRl9UKTA7Ci0gICAgQ0tfT0ZGX1Qg eiA9IChDS19PRkZfVCkwOwotI2VuZGlmCS8qIENPTU1FTlQgKi8KLQotICAgIGlmIChpbiA8IDIg fHwgaW4gPiAzNikJCS8qIFZlcmlmeSBsZWdhbCBpbnB1dCByYWRpeCAqLwotICAgICAgcmV0dXJu KE5VTEwpOwotICAgIGlmIChvdXQgPCAyIHx8IG91dCA+IDM2KQkJLyogYW5kIG91dHB1dCByYWRp eC4gKi8KLSAgICAgIHJldHVybihOVUxMKTsKLSAgICBpZiAoKnMgPT0gJysnKSB7CQkJLyogR2V0 IHNpZ24gaWYgYW55ICovCi0JcysrOwotICAgIH0gZWxzZSBpZiAoKnMgPT0gJy0nKSB7Ci0JbWlu dXMrKzsKLQlzKys7Ci0gICAgfQotICAgIHdoaWxlICgqcyA9PSBTUCB8fCAqcyA9PSAnMCcpCS8q IFRyaW0gbGVhZGluZyBibGFua3Mgb3IgMCdzICovCi0gICAgICBzKys7Ci0vKgotICBGb3IgZGV0 ZWN0aW5nIG92ZXJmbG93LCB3ZSB1c2UgYSBzaWduZWQgY29weSBvZiB0aGUgdW5zaWduZWQgbG9u ZwotICBhY2N1bXVsYXRvci4gIElmIGl0IGdvZXMgbmVnYXRpdmUsIHdlIGtub3cgd2UnbGwgb3Zl cmZsb3cgTkVYVCB0aW1lCi0gIHRocm91Z2ggdGhlIGxvb3AuCi0qLwotICAgIGZvciAoOyAqczsg IHMrKykgewkJCS8qIENvbnZlcnQgZnJvbSBpbnB1dCByYWRpeCB0byAqLwotCWMgPSAqczsJCQkJ LyogdW5zaWduZWQgbG9uZyAqLwotCWlmIChpc2xvd2VyKGMpKSBjID0gdG91cHBlcihjKTsKLQlp ZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpCi0JICBkID0gYyAtICcwJzsKLQllbHNlIGlmIChjID49 ICdBJyAmJiBjIDw9ICdaJykKLQkgIGQgPSBjIC0gJ0EnICsgMTA7Ci0JZWxzZQotCSAgcmV0dXJu KE5VTEwpOwotCWlmIChkID49IGluKQkJCS8qIENoZWNrIGZvciBpbGxlZ2FsIGRpZ2l0ICovCi0J ICByZXR1cm4oTlVMTCk7Ci0JenogPSB6eiAqIGluICsgZDsKLQlpZiAoeiA8IDBMKQkJCS8qIENs ZXZlcig/KSBvdmVyZmxvdyBkZXRlY3RvciAqLwotCSAgcmV0dXJuKCItMSIpOwotICAgICAgICB6 ID0geno7Ci0gICAgfQotICAgIGlmICghenopIHJldHVybigiMCIpOwotICAgIHIgPSAmcnhyZXN1 bHRbUlhSRVNVTFRdOwkJLyogQ29udmVydCBmcm9tIHVuc2lnbmVkIGxvbmcgKi8KLSAgICAqci0t ID0gTlVMOwkJCQkvKiB0byBvdXRwdXQgcmFkaXguICovCi0gICAgd2hpbGUgKHp6ID4gMCAmJiBy ID4gcnhyZXN1bHQpIHsKLQlkID0genogJSAodW5zaWduZWQpb3V0OwotCSpyLS0gPSByeGRpZ2l0 c1tkXTsKLQl6eiA9IHp6IC8gKHVuc2lnbmVkKW91dDsKLSAgICB9Ci0gICAgaWYgKG1pbnVzKSAq ci0tID0gJy0nOwkJLyogUmVwbGFjZSBvcmlnaW5hbCBzaWduICovCi0gICAgcmV0dXJuKChjaGFy ICopKHIrMSkpOwotfQotCi0jaWZuZGVmIE5PQjY0Ci0vKiBCYXNlLTY0IGNvbnZlcnNpb24gcm91 dGluZXMgKi8KLQotc3RhdGljIGNoYXIgYjY0W10gPSB7CQkJLyogRW5jb2RpbmcgdmVjdG9yICov Ci0jaWZkZWYgcGRwMTEKLSAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamts bW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89IgotI2Vsc2UKLSAgJ0EnLCdCJywnQycsJ0QnLCdF JywnRicsJ0cnLCdIJywnSScsJ0onLCdLJywnTCcsJ00nLCdOJywnTycsJ1AnLCdRJywnUicsJ1Mn LAotICAnVCcsJ1UnLCdWJywnVycsJ1gnLCdZJywnWicsJ2EnLCdiJywnYycsJ2QnLCdlJywnZics J2cnLCdoJywnaScsJ2onLCdrJywnbCcsCi0gICdtJywnbicsJ28nLCdwJywncScsJ3InLCdzJywn dCcsJ3UnLCd2JywndycsJ3gnLCd5JywneicsJzAnLCcxJywnMicsJzMnLCc0JywKLSAgJzUnLCc2 JywnNycsJzgnLCc5JywnKycsJy8nLCc9JywnXDAnCi0jZW5kaWYgLyogcGRwMTEgKi8KLX07Ci1z dGF0aWMgaW50IGI2NHRibFtdID0gewkJCS8qIERlY29kaW5nIHZlY3RvciAqLwotICAgIC0yLCAt MiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0y LAotICAgIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0y LCAtMiwgLTIsIC0yLAotICAgIC0yLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0x LCAtMSwgNjIsIC0xLCAtMSwgLTEsIDYzLAotICAgIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4 LCA1OSwgNjAsIDYxLCAtMSwgLTEsIC0xLCAtMiwgLTEsIC0xLAotICAgIC0xLCAgMCwgIDEsICAy LCAgMywgIDQsICA1LCAgNiwgIDcsICA4LCAgOSwgMTAsIDExLCAxMiwgMTMsIDE0LAotICAgIDE1 LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgLTEsIC0xLCAtMSwgLTEs IC0xLAotICAgIC0xLCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYs IDM3LCAzOCwgMzksIDQwLAotICAgIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDks IDUwLCA1MSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotICAgIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotICAg IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwg LTEsIC0xLAotICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsIC0xLAotICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotICAgIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAot ICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAt MSwgLTEsIC0xCi19OwotCi0vKgotICAgQiA4IFQgTyBCIDYgNCAgLS0gIENvbnZlcnRzIDgtYml0 IGRhdGEgdG8gQmFzZTY0IGVuY29kaW5nLgotCi0gICBDYWxsIHdpdGg6Ci0gICAgIHMgICA9IFBv aW50ZXIgdG8gOC1iaXQgZGF0YTsKLSAgICAgbiAgID0gTnVtYmVyIG9mIHNvdXJjZSBieXRlcyB0 byBlbmNvZGUgKFNFRSBOT1RFKS4KLSAgICAgICAgICAgSWYgaXQncyBhIG51bGwtdGVybWluYXRl ZCBzdHJpbmcsIHlvdSBjYW4gdXNlIC0xIGhlcmUuCi0gICAgIG91dCA9IEFkZHJlc3Mgb2Ygb3V0 cHV0IGJ1ZmZlci4KLSAgICAgbGVuID0gTGVuZ3RoIG9mIG91dHB1dCBidWZmZXIgKHNob3VsZCA+ IDQvMyBsb25nZXIgdGhhbiBpbnB1dCkuCi0KLSAgIFJldHVybnM6Ci0gICAgID49IDAgaWYgT0ss IG51bWJlciBvZiBieXRlcyBwbGFjZWQgaW4gb3V0cHV0IGJ1ZmZlciwKLSAgICAgICAgICB3aXRo IHRoZSBzdWJzZXF1ZW50IGJ5dGUgc2V0IHRvIE5VTCBpZiBzcGFjZSBwZXJtaXRzLgotICAgICAt MSBvbiBlcnJvciAob3V0cHV0IGJ1ZmZlciBzcGFjZSBleGhhdXN0ZWQpLgotCi0gICBOT1RFOgot ICAgICBJZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGJlIGNhbGxlZCByZXBlYXRlZGx5LCBlLmcuIHRv IGVuY29kZSBhIGRhdGEKLSAgICAgc3RyZWFtIGEgY2h1bmsgYXQgYSB0aW1lLCB0aGUgc291cmNl IGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMwotICAgICBpbiBhbGwgY2FsbHMgYnV0IHRo ZSBmaW5hbCBvbmUgdG8gYXZvaWQgdGhlIGdlbmVyYXRpb24gb2YgZXh0cmFuZW91cwotICAgICBw YWQgY2hhcmFjdGVycyB0aGF0IHdvdWxkIHRocm93IHRoZSBkZWNvZGVyIG91dCBvZiBzeW5jLiAg V2hlbiBlbmNvZGluZwotICAgICBvbmx5IGEgc2luZ2xlIHN0cmluZywgdGhpcyBpcyBub3QgYSBj b25zaWRlcmF0aW9uLiAgTm8gaW50ZXJuYWwgc3RhdGUKLSAgICAgaXMga2VwdCwgc28gdGhlcmUg aXMgbm8gcmVzZXQgZnVuY3Rpb24uCi0qLwotaW50Ci1iOHRvYjY0KHMsbixvdXQsbGVuKSBjaGFy ICogcywqIG91dDsgaW50IG4sIGxlbjsgewotICAgIGludCBiMywgYjQsIGksIHggPSAwOwotICAg IHVuc2lnbmVkIGludCB0OwotCi0gICAgaWYgKG4gPCAwKSBuID0gc3RybGVuKHMpOwotCi0gICAg Zm9yIChpID0gMDsgaSA8IG47IGkgKz0gMyx4ICs9IDQpIHsgLyogTG9vcCB0aHJvdWdoIHNvdXJj ZSBieXRlcyAqLwotCWIzID0gYjQgPSAwOwotCXQgPSAodW5zaWduZWQpKCh1bnNpZ25lZCkoKHVu c2lnbmVkIGludClzW2ldICYgMHhmZikgPDwgOCk7Ci0JaWYgKG4gLSAxID4gaSkgewkJLyogRG8g d2UgaGF2ZSBhbm90aGVyIGFmdGVyIHRoaXM/ICovCi0gICAgICAgICAgICB0IHw9ICh1bnNpZ25l ZCkoc1tpKzFdICYgMHhmZik7IC8qIFllcywgT1IgaXQgaW4gKi8KLSAgICAgICAgICAgIGIzID0g MTsJCQkvKiBBbmQgcmVtZW1iZXIgKi8KLSAgICAgICAgfQotICAgICAgICB0IDw8PSA4OwkJCS8q IE1vdmUgb3ZlciAqLwotICAgICAgICBpZiAobiAtIDIgPiBpKSB7CQkvKiBBbm90aGVyIG9uZSBh ZnRlciB0aGF0PyAqLwotICAgICAgICAgICAgdCB8PSAodW5zaWduZWQpKHNbaSsyXSAmIDB4ZmYp OyAvKiBZZXMsIE9SIGl0IGluICovCi0gICAgICAgICAgICBiNCA9IDE7CQkJLyogYW5kIHJlbWVt YmVyICovCi0gICAgICAgIH0KLQlpZiAoeCArIDQgPiBsZW4pCQkvKiBDaGVjayBvdXRwdXQgc3Bh Y2UgKi8KLQkgIHJldHVybigtMSk7Ci0Jb3V0W3grM10gPSBiNjRbYjQgPyAodCAmIDB4M2YpIDog NjRdOyAvKiA2NCA9IGNvZGUgZm9yICc9JyAqLwotICAgICAgICB0ID4+PSA2OwotICAgICAgICBv dXRbeCsyXSA9IGI2NFtiMyA/ICh0ICYgMHgzZikgOiA2NF07Ci0gICAgICAgIHQgPj49IDY7Ci0g ICAgICAgIG91dFt4KzFdID0gYjY0W3QgJiAweDNmXTsKLSAgICAgICAgdCA+Pj0gNjsKLSAgICAg ICAgb3V0W3hdICAgPSBiNjRbdCAmIDB4M2ZdOwotICAgIH0KLSAgICBpZiAoeCA8IGxlbikgb3V0 W3hdID0gTlVMOwkJLyogTnVsbC10ZXJtaW5hdGUgdGhlIHN0cmluZyAqLwotICAgIHJldHVybih4 KTsKLX0KLQotCi0vKgotICAgQiA2IDQgVCBPIEIgOCAgLS0gIENvbnZlcnRzIEJhc2U2NCBzdHJp bmcgdG8gOC1iaXQgZGF0YS4KLQotICAgQ2FsbCB3aXRoOgotICAgICBzICAgPSBwb2ludGVyIHRv IEJhc2U2NCBzdHJpbmcgKHdoaXRlc3BhY2UgaWdub3JlZCkuCi0gICAgIG4gICA9IGxlbmd0aCBv ZiBzdHJpbmcsIG9yIC0xIGlmIG51bGwgdGVybWluYXRlZCwgb3IgMCB0byByZXNldC4KLSAgICAg b3V0ID0gYWRkcmVzcyBvZiBvdXRwdXQgYnVmZmVyLgotICAgICBsZW4gPSBsZW5ndGggb2Ygb3V0 cHV0IGJ1ZmZlci4KLQotICAgUmV0dXJuczoKLSAgICAgPj0gMCBpZiBPSywgbnVtYmVyIG9mIGJ5 dGVzIHBsYWNlZCBpbiBvdXRwdXQgYnVmZmVyLAotICAgICAgICAgIHdpdGggdGhlIHN1YnNlcXVl bnQgYnl0ZSBzZXQgdG8gTlVMIGlmIHNwYWNlIHBlcm1pdHMuCi0gICAgIDwgIDAgb24gZXJyb3I6 Ci0gICAgICAgLTEgPSBvdXRwdXQgYnVmZmVyIHRvbyBzbWFsbCBmb3IgaW5wdXQuCi0gICAgICAg LTIgPSBpbnB1dCBjb250YWlucyBpbGxlZ2FsIGNoYXJhY3RlcnMuCi0gICAgICAgLTMgPSBpbnRl cm5hbCBjb2RpbmcgZXJyb3IuCi0KLSAgIE5PVEU6Ci0gICAgIENhbiBiZSBjYWxsZWQgcmVwZWF0 ZWRseSB0byBkZWNvZGUgYSBCYXNlNjQgc3RyZWFtLCBvbmUgY2h1bmsgYXQgYQotICAgICB0aW1l LiAgSG93ZXZlciwgaWYgaXQgaXMgdG8gYmUgY2FsbGVkIGZvciBtdWx0aXBsZSBzdHJlYW1zIGlu Ci0gICAgIHN1Y2Nlc3Npb24sIGl0cyBpbnRlcm5hbCBzdGF0ZSBtdXN0IGJlIHJlc2V0IGF0IHRo ZSBiZWdpbm5pbmcgb2YKLSAgICAgdGhlIG5ldyBzdHJlYW0uCi0qLwotaW50Ci1iNjR0b2I4KHMs bixvdXQsbGVuKSBjaGFyICogcywqIG91dDsgaW50IG4sIGxlbjsgeyAvKiBEZWNvZGUgKi8KLSAg ICBzdGF0aWMgaW50IGJpdHMgPSAwOwotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgciA9IDA7Ci0g ICAgaW50IGksIGsgPSAwLCB4LCB0OwotICAgIHVuc2lnbmVkIGNoYXIgYzsKLQotICAgIGlmIChu ID09IDApIHsJCQkvKiBSZXNldCBzdGF0ZSAqLwotCWJpdHMgPSAwOwotCXIgPSAwOwotCXJldHVy bigwKTsKLSAgICB9Ci0gICAgeCA9IChuIDwgMCkgPyBzdHJsZW4ocykgOiBuOwkvKiBTb3VyY2Ug bGVuZ3RoICovCi0KLSAgICBuID0gKCh4ICsgMykgLyA0KSAqIDM7CQkvKiBDb21wdXRlIGRlc3Rp bmF0aW9uIGxlbmd0aCAqLwotICAgIGlmICh4ID4gMCAmJiBzW3gtMV0gPT0gJz0nKSBuLS07CS8q IEFjY291bnQgZm9yIHBhZGRpbmcgKi8KLSAgICBpZiAoeCA+IDEgJiYgc1t4LTJdID09ICc9Jykg bi0tOwotICAgIGlmIChuID4gbGVuKQkJCS8qIERlc3RpbmF0aW9uIG5vdCBiaWcgZW5vdWdoICov Ci0gICAgICByZXR1cm4oLTEpOwkJCS8qIEZhaWwgKi8KLQotICAgIGZvciAoaSA9IDA7IGkgPCB4 OyBpKyspIHsJCS8qIExvb3AgdGhydSBzb3VyY2UgKi8KLQljID0gKENIQVIpc1tpXTsJCQkvKiBO ZXh0IGNoYXIgKi8KLSAgICAgICAgdCA9IGI2NHRibFtjXTsJCQkvKiBDb2RlIGZvciB0aGlzIGNo YXIgKi8KLQlpZiAodCA9PSAtMikgewkJCS8qIFdoaXRlc3BhY2Ugb3IgQ3RybCAqLwotCSAgICBu LS07CQkJLyogSWdub3JlICovCi0JICAgIGNvbnRpbnVlOwotCX0gZWxzZSBpZiAodCA9PSAtMSkg ewkJLyogSWxsZWdhbCBjb2RlICovCi0JICAgIHJldHVybigtMik7CQkJLyogRmFpbC4gKi8KLQl9 IGVsc2UgaWYgKHQgPiA2MyB8fCB0IDwgMCkJLyogSWxsZWdhbCB2YWx1ZSAqLwotCSAgcmV0dXJu KC0zKTsJCQkvKiBmYWlsLiAqLwotCWJpdHMgKz0gNjsJCQkvKiBDb3VudCBiaXRzICovCi0JciA8 PD0gNjsJCQkvKiBNYWtlIHNwYWNlICovCi0JciB8PSAodW5zaWduZWQpIHQ7CQkvKiBPUiBpbiBu ZXcgY29kZSAqLwotCWlmIChiaXRzID49IDgpIHsJCS8qIEhhdmUgYSBieXRlIHlldD8gKi8KLQkg ICAgYml0cyAtPSA4OwkJCS8qIE91dHB1dCBpdCAqLwotCSAgICBjID0gKHVuc2lnbmVkKSAoKHIg Pj4gYml0cykgJiAweGZmKTsKLQkgICAgb3V0W2srK10gPSBjOwotCX0KLSAgICB9Ci0gICAgaWYg KGsgPCBsZW4pIG91dFtrXSA9IE5VTDsJCS8qIE51bGwtdGVybWluYXRlIGluIGNhc2UgaXQncyAq LwotICAgIHJldHVybihrKTsJCQkJLyogYSB0ZXh0IHN0cmluZyAqLwotfQotI2VuZGlmIC8qIE5P QjY0ICovCi0KLS8qIEMgSCBLIE4gVSBNICAtLSAgU2VlIGlmIGFyZ3VtZW50IHN0cmluZyBpcyBh biBpbnRlZ2VyICAqLwotCi0vKiBSZXR1cm5zIDEgaWYgT0ssIHplcm8gaWYgbm90IE9LICovCi0v KiBJZiBPSywgc3RyaW5nIHNob3VsZCBiZSBhY2NlcHRhYmxlIHRvIGF0b2koKSBvciBhdG9sKCkg b3IgY2thdG9mcygpICovCi0vKiBBbGxvd3MgbGVhZGluZyBzcGFjZSwgc2lnbiAqLwotCi1pbnQK LWNoa251bShzKSBjaGFyICpzOyB7CQkJLyogQ2hlY2sgTnVtZXJpYyBTdHJpbmcgKi8KLSAgICBp bnQgeCA9IDA7CQkJCS8qIEZsYWcgZm9yIHBhc3QgbGVhZGluZyBzcGFjZSAqLwotICAgIGludCB5 ID0gMDsJCQkJLyogRmxhZyBmb3IgZGlnaXQgc2VlbiAqLwotICAgIGNoYXIgYzsKLSAgICBkZWJ1 ZyhGMTEwLCJjaGtudW0iLHMsMCk7Ci0gICAgaWYgKCFzKSByZXR1cm4oMCk7Ci0gICAgaWYgKCEq cykgcmV0dXJuKDApOwotICAgIHdoaWxlICgoYyA9ICpzKyspKSB7CQkvKiBGb3IgZWFjaCBjaGFy YWN0ZXIgaW4gdGhlIHN0cmluZyAqLwotCXN3aXRjaCAoYykgewotCSAgY2FzZSBTUDoJCQkvKiBB bGxvdyBsZWFkaW5nIHNwYWNlcyAqLwotCSAgY2FzZSBIVDoKLQkgICAgaWYgKHggPT0gMCkgY29u dGludWU7Ci0JICAgIGVsc2UgcmV0dXJuKDApOwotCSAgY2FzZSAnKyc6CQkJLyogQWxsb3cgbGVh ZGluZyBzaWduICovCi0JICBjYXNlICctJzoKLQkgICAgaWYgKHggPT0gMCkgeCA9IDE7Ci0JICAg IGVsc2UgcmV0dXJuKDApOwotCSAgICBicmVhazsKLQkgIGRlZmF1bHQ6CQkJLyogQWZ0ZXIgdGhh dCwgb25seSBkZWNpbWFsIGRpZ2l0cyAqLwotCSAgICBpZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScp IHsKLQkJeCA9IHkgPSAxOwotCQljb250aW51ZTsKLQkgICAgfSBlbHNlIHJldHVybigwKTsKLQl9 Ci0gICAgfQotICAgIHJldHVybih5KTsKLX0KLQotCi0vKiAgUiBEIEkgRyBJIFQgUyAgLS0gVmVy aWZ5IHRoYXQgYWxsIGNoYXJhY3RlcnMgaW4gYXJnIEFSRSBESUdJVFMgICovCi0KLS8qICBSZXR1 cm5zIDEgaWYgc28sIDAgaWYgbm90IG9yIGlmIHN0cmluZyBpcyBlbXB0eSAqLwotCi1pbnQKLXJk aWdpdHMocykgY2hhciAqczsgewotICAgIGlmICghcykgcmV0dXJuKDApOwotICAgIGRvIHsKLSAg ICAgICAgaWYgKCFpc2RpZ2l0KCpzKSkgcmV0dXJuKDApOwotICAgICAgICBzKys7Ci0gICAgfSB3 aGlsZSAoKnMpOwotICAgIHJldHVybigxKTsKLX0KLQotLyogIFAgQSBSIE4gQSBNICAtLSAgUmV0 dXJuIHBhcml0eSBuYW1lICovCi0KLWNoYXIgKgotI2lmZGVmIENLX0FOU0lDCi1wYXJuYW0oY2hh ciBjKQotI2Vsc2UKLXBhcm5hbShjKSBjaGFyIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8q IHBhcm5hbSAqLyB7Ci0gICAgc3dpdGNoIChjKSB7Ci0JY2FzZSAnZSc6IHJldHVybigiZXZlbiIp OwotCWNhc2UgJ28nOiByZXR1cm4oIm9kZCIpOwotCWNhc2UgJ20nOiByZXR1cm4oIm1hcmsiKTsK LQljYXNlICdzJzogcmV0dXJuKCJzcGFjZSIpOwotCWNhc2UgMDogICByZXR1cm4oIm5vbmUiKTsK LQlkZWZhdWx0OiAgcmV0dXJuKCJpbnZhbGlkIik7Ci0gICAgfQotfQotCi1jaGFyICoJCQkJCS8q IENvbnZlcnQgc2Vjb25kcyB0byBoaDptbTpzcyAqLwotI2lmZGVmIENLX0FOU0lDCi1oaG1tc3Mo bG9uZyB4KQotI2Vsc2UKLWhobW1zcyh4KSBsb25nIHg7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8K LS8qIGhobW1zcyh4KSAqLyB7Ci0gICAgc3RhdGljIGNoYXIgYnVmWzEwXTsKLSAgICBsb25nIHMs IGgsIG07Ci0gICAgaCA9IHggLyAzNjAwTDsJCQkvKiBIb3VycyAqLwotICAgIHggPSB4ICUgMzYw MEw7Ci0gICAgbSA9IHggLyA2MEw7CQkJLyogTWludXRlcyAqLwotICAgIHMgPSB4ICUgNjBMOwkJ CS8qIFNlY29uZHMgKi8KLSAgICBpZiAoeCA+IC0xTCkKLSAgICAgIHNwcmludGYoYnVmLCIlMDJs ZDolMDJsZDolMDJsZCIsaCxtLHMpOwotICAgIGVsc2UKLSAgICAgIGJ1ZlswXSA9IE5VTDsKLSAg ICByZXR1cm4oKGNoYXIgKilidWYpOwotfQotCi0vKiBMIFMgRSBUICAtLSAgU2V0IHMgaW50byBw LCByaWdodCBwYWRkaW5nIHRvIGxlbmd0aCBuIHdpdGggY2hhciBjOyAqLwotLyoKLSAgIHMgaXMg YSBOVUwtdGVybWluYXRlZCBzdHJpbmcuCi0gICBJZiBsZW5ndGgocykgPiBuLCBvbmx5IG4gYnl0 ZXMgYXJlIG1vdmVkLgotICAgVGhlIHJlc3VsdCBpcyBOT1QgTlVMIHRlcm1pbmF0ZWQgdW5sZXNz IGMgPT0gTlVMIGFuZCBsZW5ndGgocykgPCBuLgotICAgVGhlIGludGVuZGVkIG9mIHRoaXMgcm91 dGluZSBpcyBmb3IgZmlsbGluZyBpbiBmaXhlZC1sZW5ndGggcmVjb3JkIGZpZWxkcy4KLSovCi1W T0lECi1sc2V0KHAscyxuLGMpIGNoYXIgKnM7IGNoYXIgKnA7IGludCBuOyBpbnQgYzsgewotICAg IGludCB4OwotI2lmbmRlZiBVU0VfTUVNQ1BZCi0gICAgaW50IGk7Ci0jZW5kaWYgLyogVVNFX01F TUNQWSAqLwotICAgIGlmICghcykgcyA9ICIiOwotICAgIHggPSBzdHJsZW4ocyk7Ci0gICAgaWYg KHggPiBuKSB4ID0gbjsKLSNpZmRlZiBVU0VfTUVNQ1BZCi0gICAgbWVtY3B5KHAscyx4KTsKLSAg ICBpZiAobiA+IHgpCi0gICAgICBtZW1zZXQocCt4LGMsbi14KTsKLSNlbHNlCi0gICAgZm9yIChp ID0gMDsgaSA8IHg7IGkrKykKLSAgICAgICpwKysgPSAqcysrOwotICAgIGZvciAoOyBpIDwgbjsg aSsrKQotICAgICAgKnArKyA9IGM7Ci0jZW5kaWYgLyogVVNFX01FTUNQWSAqLwotfQotCi0vKiBS IFMgRSBUICAtLSAgUmlnaHQtYWRqdXN0IHMgaW4gcCwgbGVmdCBwYWRkaW5nIHRvIGxlbmd0aCBu IHdpdGggY2hhciBjICovCi0KLVZPSUQKLXJzZXQocCxzLG4sYykgY2hhciAqczsgY2hhciAqcDsg aW50IG47IGludCBjOyB7Ci0gICAgaW50IHg7Ci0jaWZuZGVmIFVTRV9NRU1DUFkKLSAgICBpbnQg aTsKLSNlbmRpZiAvKiBVU0VfTUVNQ1BZICovCi0gICAgaWYgKCFzKSBzID0gIiI7Ci0gICAgeCA9 IHN0cmxlbihzKTsKLSAgICBpZiAoeCA+IG4pIHggPSBuOwotI2lmZGVmIFVTRV9NRU1DUFkKLSAg ICBtZW1zZXQocCxjLG4teCk7Ci0gICAgbWVtY3B5KHArbi14LHMseCk7Ci0jZWxzZQotICAgIGZv ciAoaSA9IDA7IGkgPCAobiAtIHgpOyBpKyspCi0gICAgICAqcCsrID0gYzsKLSAgICBmb3IgKDsg aSA8IG47IGkrKykKLSAgICAgICpwKysgPSAqcysrOwotI2VuZGlmIC8qIFVTRV9NRU1DUFkgKi8K LX0KLQotLyogIFUgTCBPIE4gRyBUIE8gSCBFIFggIC0tICBVbnNpZ25lZCBsb25nIHRvIGhleCAg Ki8KLQotLyoKLSAgQ29udmVydHMgdW5zaWduZWQgbG9uZyBhcmcgdG8gaGV4IGFuZCByZXR1cm5z IHN0cmluZyBwb2ludGVyIHRvCi0gIHJpZ2h0bW9zdCBuIGhleCBkaWdpdHMgbGVmdCBwYWRkZWQg d2l0aCAwJ3MuICBBbGxvd3MgZm9yIGxvbmdzCi0gIHVwIHRvIDY0IGJpdHMuICBSZXR1cm5zIHBv aW50ZXIgdG8gcmVzdWx0LgotKi8KLWNoYXIgKgotI2lmZGVmIENLX0FOU0lDCi11bG9uZ3RvaGV4 KCB1bnNpZ25lZCBsb25nIHosIGludCBuICkKLSNlbHNlCi11bG9uZ3RvaGV4KHosbikgdW5zaWdu ZWQgbG9uZyB6OyBpbnQgbjsgCi0jZW5kaWYJLyogQ0tfQU5TSUMgKi8KLS8qIHVsb25ndG9oZXgg Ki8gewotICAgIHN0YXRpYyBjaGFyIGhleGJ1ZlsxN107Ci0gICAgaW50IGkgPSAxNiwgeCwgayA9 IDA7Ci0gICAgaGV4YnVmWzE2XSA9ICdcMCc7Ci0gICAgaWYgKG4gPiAxNikgbiA9IDE2OwotICAg IGsgPSAyICogKHNpemVvZihsb25nKSk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewot CWlmIChpID4gayB8fCB6ID09IDApIHsKLQkgICAgaGV4YnVmWzE1LWldID0gJzAnOwotCX0gZWxz ZSB7Ci0JICAgIHggPSB6ICYgMHgwZjsKLQkgICAgeiA9IHogPj4gNDsKLQkgICAgaGV4YnVmWzE1 LWldID0geCArICgoeCA8IDEwKSA/ICcwJyA6IDB4MzcpOwotCX0KLSAgICB9Ci0gICAgcmV0dXJu KChjaGFyICopKCZoZXhidWZbMTYtaV0pKTsKLX0KLQotLyogIEggRSBYIFQgTyBVIEwgTyBOIEcg IC0tICBIZXggc3RyaW5nIHRvIHVuc2lnbmVkIGxvbmcgICovCi0KLS8qCi0gIENvbnZlcnRzIG4g Y2hhcnMgZnJvbSBzIGZyb20gaGV4IHRvIHVuc2lnbmVkIGxvbmcuCi0gIFJldHVybnM6Ci0gICAw TCBvciBwb3NpdGl2ZSwgZ29vZCByZXN1bHQgKDBMIGlzIHJldHVybmVkIGlmIGFyZyBpcyBOVUxM IG9yIGVtcHR5KS4KLSAgLTFMIG9uIGVycm9yOiBub24taGV4IGFyZyBvciBvdmVyZmxvdy4KLSov Ci1sb25nCi1oZXh0b3Vsb25nKHMsbikgY2hhciAqczsgaW50IG47IHsKLSAgICBjaGFyIGJ1Zls2 NF07Ci0gICAgdW5zaWduZWQgbG9uZyByZXN1bHQgPSAwTDsKLSAgICBpbnQgZCwgY291bnQgPSAw OwotICAgIGludCBmbGFnID0gMDsKLSAgICBpZiAoIXMpIHMgPSAiIjsKLSAgICBpZiAoISpzKSB7 Ci0JcmV0dXJuKDBMKTsKLSAgICB9Ci0gICAgaWYgKG4gPCAxKQotICAgICAgcmV0dXJuKDBMKTsK LSAgICBpZiAobiA+IDYzKSBuID0gNjM7Ci0gICAgc3RybmNweShidWYscyxuKTsKLSAgICBidWZb bl0gPSAnXDAnOwotICAgIHMgPSBidWY7Ci0gICAgd2hpbGUgKCpzKSB7Ci0JZCA9ICpzKys7Ci0J aWYgKChkID09ICcwJyB8fCBkID09ICcgJykpIHsKLQkgICAgaWYgKCFmbGFnKQotCSAgICAgIGNv bnRpbnVlOwotCX0gZWxzZSB7Ci0JICAgIGZsYWcgPSAxOwotCX0KLQlpZiAoaXNsb3dlcihkKSkK LQkgIGQgPSB0b3VwcGVyKGQpOwotCWlmIChkID49ICcwJyAmJiBkIDw9ICc5JykgewotCSAgICBk IC09IDB4MzA7Ci0JfSBlbHNlIGlmIChkID49ICdBJyAmJiBkIDw9ICdGJykgewotCSAgICBkIC09 IDB4Mzc7Ci0JfSBlbHNlIHsKLQkgICAgcmV0dXJuKC0xTCk7Ci0JfQotCWlmICgrK2NvdW50ID4g KHNpemVvZihsb25nKSAqIDIpKQotCSAgcmV0dXJuKC0xTCk7Ci0JcmVzdWx0ID0gKHJlc3VsdCA8 PCA0KSB8IChkICYgMHgwZik7Ci0gICAgfQotICAgIHJldHVybihyZXN1bHQpOwotfQotCi0vKgot ICBjIGsgcyBwIGwgaSB0ICAtLSAgU3BsaXRzIGEgc3RyaW5nIGludG8gd29yZHMsIG9yOgotICAg ICAgICAgICAgICAgICAgICAgZXh0cmFjdHMgYSBnaXZlbiB3b3JkIGZyb20gYSBzdHJpbmcuCi0K LSAgQWxsb3dzIGZvciBncm91cGluZy4KLSAgT3BlcmF0ZXMgb24gYSBjb3B5IG9mIHRoZSBzdHJp bmc7IGRvZXMgbm90IGFsdGVyIHRoZSBvcmlnaW5hbCBzdHJpbmcuCi0gIEFsbCBzdHJpbmdzIE5V TC10ZXJtaW5hdGVkLgotCi0gIENhbGwgd2l0aDoKLSAgICBmYyA9IGZ1bmN0aW9uIGNvZGU6Ci0g ICAgICAgICAxID0gc3BsaXQsIDAgPSB3b3JkLgotICAgIG4xID0gZGVzaXJlZCB3b3JkIG51bWJl ciBpZiBmYyA9PSAwLgotICAgIHMxID0gc291cmNlIHN0cmluZy4KLSAgICBzMiA9IGJyZWFrIHN0 cmluZyAoTlVMTCB0byBhY2NlcHQgZGVmYXVsdCA9IGFsbCBub24tYWxwaGFudW0pLgotICAgIHMz ID0gaW5jbHVkZSBzdHJpbmcgKE5VTEwgdG8gYWNjZXB0IGRlZmF1bHQgPSBhbGwgYWxwaGFudW0p LgotICAgIG4yID0gZ3JvdXBpbmcgbWFzayAoT1IgZGVzaXJlZCBvbmVzIHRvZ2V0aGVyKToKLSAg ICAgICAgIDEgPSBkb3VibGVxdW90ZXMsICAyID0gYnJhY2VzLCAgICA0ID0gYXBvc3Ryb3BoZXMs Ci0gICAgICAgICA4ID0gcGFyZW5zLCAgICAgICAxNiA9IGJyYWNrZXRzLCAzMiA9IGFuZ2xlIGJy YWNrZXRzLAotICAgICAgICAtMSA9IDYzID0gYWxsIG9mIHRoZXNlLgotICAgIG4zID0gZ3JvdXAg cXVvdGUgY2hhcmFjdGVyLCBBU0NJSSB2YWx1ZSwgdXNlZCBhbmQgdGVzdGVkIG9ubHkgZm9yCi0g ICAgICAgICBMSVNQIHF1b3RlLCBlLmcuIChhICdiIGMgJyhkIGUgZikpLgotICAgIG40ID0gMCB0 byBjb2xsYXBzZSBhZGphY2VudCBzZXBhcmF0b3JzOwotICAgICAgICAgbm9uemVybyBub3QgdG8g Y29sbGFwc2UgdGhlbS4KLQotICBSZXR1cm5zOgotICAgIFBvaW50ZXIgdG8gc3RydWN0IHN0cmlu Z2FycmF5LCB3aXRoIHNpemU6Ci0gICAgICAtMSA9IG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yLgot ICAgICAgLTIgPSB0b28gbWFueSB3b3JkcyBpbiBzdHJpbmcuCi0gICAgICAgbiA9IG51bWJlciBv ZiB3b3JkcyAoMCBvciBtb3JlKS4KLQotICBXaXRoOgotICAgIHdvcmRhcnJheSA9IGFycmF5IG9m IHBvaW50ZXJzIHRvIG4gd29yZHMgKG4gPT0gMSBpZiBmYyA9PSAwKSwgMS1iYXNlZC4KLSAgICBF YWNoIHBvaW50ZXIgaXMgdG8gYSBtYWxsb2MnZCBzdHJpbmcuICBUaGlzIGFycmF5IGlzIHJlY3lj bGVkIHVwb24gZWFjaAotICAgIGNhbGw7IGlmIHlvdSBuZWVkIHRvIGtlZXAgdGhlIHN0cmluZ3Ms IG1ha2UgY29waWVzIG9mIHRoZW0uICBUaGlzIHJvdXRpbmUKLSAgICBtdXN0IGhhdmUgY29udHJv bCBvZiBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24uCi0KLSAgSWYgYSBnaXZlbiBjaGFyYWN0 ZXIgaXMgaW5jbHVkZWQgaW4gdGhlIGluY2x1ZGUgbGlzdCwgaXQgaXMgbm90IHRyZWF0ZWQKLSAg YXMgYSBzZXBhcmF0b3Igb3IgYXMgYSBncm91cGluZyBjaGFyYWN0ZXIuCi0KLSAgR3JvdXBzIG1h eSBiZSBuZXN0ZWQgb25seSBpZiB0aGV5IGFyZSBmb3JtZWQgd2l0aCBicmFjZXMsIHBhcmVucywg b3IKLSAgYnJhY2tldHMsIGJ1dCBub3Qgd2l0aCBxdW90ZXMgb3IgYXBvc3Ryb3BoZXMgc2luY2Ug QVNDSUkgcXVvdGVzIGhhdmUgbm8KLSAgaW50cmluc2ljIGhhbmRlZG5lc3MuICBHcm91cC1zdGFy dCBhbmQgZW5kIGNoYXJhY3RlcnMgYXJlIHRyZWF0ZWQgYXMKLSAgc2VwYXJhdG9ycyBldmVuIGlu IHRoZSBhYnNlbmNlIG9mIG90aGVyIHNlcGFyYXRvcnMsIHNvIGEgc3RyaW5nIHN1Y2ggYXMKLSAg ImF7Yn1jIiByZXN1bHRzIGluIHRocmVlIHdvcmRzLCBub3Qgb25lLgotCi0gIFNhbXBsZSBjYWxs IHRvIHNwbGl0IGEgc3RyaW5nIGludG8gYW4gYXJyYXk6Ci0gICAgc3RydWN0IHN0cmluZ2FycmF5 ICogcTsKLSAgICBxID0gY2tzcGxpdCgxLDAsczEsczIsczMsLTEsMCk7Ci0gICAgICAgIHEtPmFf c2l6ZSA9IHNpemUgKD49MCkgb3IgZmFpbHVyZSBjb2RlICg8MCkKLSAgICAgICAgcS0+YV9oZWFk ID0gcG9pbnRlciB0byBhcnJheSAoZWxlbWVudHMgMCB0aHJ1IHEtPmFzaXplIC0gMSkuCi0KLSAg U2FtcGxlIGNhbGwgdG8gZXh0cmFjdCB3b3JkIG4gZnJvbSBhIHN0cmluZzoKLSAgICBzdHJ1Y3Qg c3RyaW5nYXJyYXkgKiBxOwotICAgIHEgPSBja3NwbGl0KDAsbixzMSxzMixzMywtMSwwKTsKLSAg ICAgICAgcS0+YV9zaXplID0gc2l6ZSAoMSkgb3IgZmFpbHVyZSBjb2RlICg8MCkKLSAgICAgICAg cS0+YV9oZWFkID0gcG9pbnRlciB0byBhcnJheSAoZWxlbWVudCAxIGlzIHRoZSBkZXNpcmVkIHdv cmQpLgotKi8KLQotLyogU3RhdGVzICovCi0KLSNkZWZpbmUgU1RfQlcgIDAJCQkvKiBCZXR3ZWVu IFdvcmRzICovCi0jZGVmaW5lIFNUX0lXICAxCQkJLyogSW4gV29yZCAqLwotI2RlZmluZSBTVF9J RyAgMgkJCS8qIFN0YXJ0IEdyb3VwICovCi0KLS8qIENoYXJhY3RlciBDbGFzc2VzIChiaXRtYXAp ICovCi0KLSNkZWZpbmUgQ0xfU0VQIDEJCQkvKiBTZXBhcmF0b3IgKi8KLSNkZWZpbmUgQ0xfT1BO IDIJCQkvKiBHcm91cCBPcGVuICovCi0jZGVmaW5lIENMX0NMUyA0CQkJLyogR3JvdXAgQ2xvc2Ug Ki8KLSNkZWZpbmUgQ0xfREFUIDgJCQkvKiBEYXRhICovCi0jZGVmaW5lIENMX1FVTyAxNgkJCS8q IEdyb3VwIHF1b3RlICovCi0KLSNpZmRlZiBCSUdCVUZPSwotI2lmbmRlZiBNQVhXT1JEUwotI2Rl ZmluZSBNQVhXT1JEUyA0MDk2CQkJLyogTWF4IG51bWJlciBvZiB3b3JkcyAqLwotI2VuZGlmIC8q IE1BWFdPUkRTICovCi0jaWZuZGVmIE5FU1RNQVgKLSNkZWZpbmUgTkVTVE1BWCA2NAkJCS8qIE1h eGltdW0gbmVzdGluZyBsZXZlbCAqLwotI2VuZGlmIC8qIE5FU1RNQVggKi8KLSNlbHNlCi0jaWZu ZGVmIE1BWFdPUkRTCi0jZGVmaW5lIE1BWFdPUkRTIDEyOAkJCS8qIE1heCBudW1iZXIgb2Ygd29y ZHMgKi8KLSNlbmRpZiAvKiBNQVhXT1JEUyAqLwotI2lmbmRlZiBORVNUTUFYCi0jZGVmaW5lIE5F U1RNQVggMTYJCQkvKiBNYXhpbXVtIG5lc3RpbmcgbGV2ZWwgKi8KLSNlbmRpZiAvKiBORVNUTUFY ICovCi0jZW5kaWYgLyogQklHQlVGT0sgKi8KLQotLyogc3RhdGljICovIGNoYXIgKiogd29yZGFy cmF5ID0gTlVMTDsJLyogUmVzdWx0IGFycmF5IG9mIHdvcmQgcG9pbnRlcnMgKi8KLQotc3RhdGlj IHN0cnVjdCBzdHJpbmdhcnJheSBja19zdmFsID0gIHsJLyogUmV0dXJuIHZhbHVlIHN0cnVjdHVy ZSAqLwotICAgIE5VTEwsCQkJCS8qIFBvaW50ZXIgdG8gYXJyYXkgKi8KLSAgICAwCQkJCQkvKiBT aXplICovCi19Owotc3RhdGljIGludCAqIHdvcmRzaXplID0gTlVMTDsKLQotc3RhdGljIFZPSUQK LXNldHdvcmQobixzLGxlbikgaW50IG4sIGxlbjsgY2hhciAqIHM7IHsKLSAgICByZWdpc3RlciBj aGFyICogcDsKLSAgICByZWdpc3RlciBpbnQgaSwgazsKLQotICAgIGlmICghcykgcyA9ICIiOwot Ci0gICAgaWYgKCF3b3JkYXJyYXkpIHsJCQkvKiBBbGxvY2F0ZSByZXN1bHQgYXJyYXkgKG9ubHkg b25jZSkgKi8KLQlpZiAoISh3b3JkYXJyYXkgPSAoY2hhciAqKiltYWxsb2MoKE1BWFdPUkRTKzEp ICogc2l6ZW9mKGNoYXIgKikpKSkKLQkgIHJldHVybjsKLQlpZiAoISh3b3Jkc2l6ZSA9IChpbnQg KiltYWxsb2MoKE1BWFdPUkRTKzEpICogc2l6ZW9mKGludCkpKSkKLQkgIHJldHVybjsKLQlmb3Ig KGkgPSAwOyBpIDw9IE1BWFdPUkRTOyBpKyspCXsgLyogSW5pdGlhbGl6ZSByZXN1bHQgYXJyYXkg Ki8KLQkgICAgd29yZGFycmF5W2ldID0gTlVMTDsKLQkgICAgd29yZHNpemVbaV0gPSAwOwotCX0K LSAgICB9Ci0gICAgaWYgKHdvcmRzaXplW25dIDwgbGVuIC8qIHx8ICF3b3JkYXJyYXlbbl0gKi8g KSB7Ci0JayA9IChsZW4gPCAxNikgPyAxNiA6IGxlbiArIChsZW4gLyA0KTsKLQl3b3JkYXJyYXlb bl0gPSAoY2hhciAqKSBtYWxsb2MoaysxKTsKLQl3b3Jkc2l6ZVtuXSA9ICh3b3JkYXJyYXlbbl0p ID8gayA6IDA7Ci0JaWYgKHdvcmRhcnJheVtuXSkgewotCSAgICBwID0gd29yZGFycmF5W25dOwot CSAgICB3aGlsZSAoKCpwKysgPSAqcysrKSAmJiBrLS0gPiAwKSA7Ci0JfQotICAgIH0gZWxzZSBp ZiAobGVuID4gMCkgewotCWsgPSB3b3Jkc2l6ZVtuXTsJCS8qIChJbiBjYXNlIGxlbiBhcmcgaXMg YSBsaWUpICovCi0JcCA9IHdvcmRhcnJheVtuXTsKLQl3aGlsZSAoKCpwKysgPSAqcysrKSAmJiBr LS0gPiAwKSB7Ci0jaWZkZWYgQ09NTUVOVAotCSAgICBpZiAoKCoocy0xKSA9PSBDTURRKSAmJiAq cyAhPSBDTURRKSB7Ci0JCWsrKzsKLQkJcC0tOwotCSAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAq LwotCX0KLSAgICB9IGVsc2UgaWYgKHdvcmRhcnJheVtuXSkgewotCXdvcmRhcnJheVtuXVswXSA9 IE5VTDsKLSAgICB9Ci19Ci0KLXN0YXRpYyBjaGFyICogc3BsaXRidWYgPSBOVUxMOwotc3RhdGlj IGludCBuc3BsaXRidWYgPSAwOwotCi0vKiBuNCA9IDEgdG8gTk9UIGNvbGxhcHNlIGFkamFjZW50 IHNlcGFyYXRvcnMgKi8KLQotCi1zdHJ1Y3Qgc3RyaW5nYXJyYXkgKgotY2tzcGxpdChmYyxuMSxz MSxzMixzMyxuMixuMyxuNCkgaW50IGZjLG4xLG4yLG4zLG40OyBjaGFyICpzMSwgKnMyLCAqczM7 IHsKLSAgICBpbnQgc3BsaXR0aW5nID0gMDsJCQkvKiBXaGF0IEkgd2FzIGFza2VkIHRvIGRvICov Ci0gICAgaW50IGksIGssIGtvID0gMCwgbiwgeCwgbWF4ID0gTUFYV09SRFM7IC8qIFdvcmtlcnMg Ki8KLSAgICBjaGFyICogcyA9IE5VTEwsICogc3MsICogcDsJCS8qIFdvcmtlcnMgKi8KLSAgICBj aGFyICogc2VwID0gIiI7CQkJLyogRGVmYXVsdCBicmVhayBzZXQgKi8KLSAgICBjaGFyICogbm90 c2VwID0gIiI7CQkJLyogRGVmYXVsdCBpbmNsdWRlIHNldCAqLwotICAgIGludCAgICBncm91cGlu ZyA9IDA7CQkvKiBHcm91cGluZyBvcHRpb24gKi8KLSAgICBjaGFyICogZ3Jfb3BuID0gIlwieyco WzwiOwkJLyogR3JvdXAgb3BlbiBicmFja2V0cyAqLwotICAgIGNoYXIgKiBncl9jbHMgPSAiXCJ9 JyldPiI7CQkvKiBHcm91cCBjbG9zZSBicmFja2V0cyAqLwotICAgIGludCAgICBncl9zdGtbTkVT VE1BWF07CQkvKiBOZXN0aW5nIGJyYWNrZXQgc3RhY2sgKi8KLSAgICBpbnQgICAgZ3JfbHZsID0g MDsJCQkvKiBOZXN0aW5nIGxldmVsICovCi0gICAgaW50ICAgIHdvcmRudW0gPSAwOwkJCS8qIEN1 cnJlbnQgd29yZCBudW1iZXIgKi8KLSAgICBDSEFSICAgYyA9ICdBJzsJCQkvKiBDdXJyZW50IGNo YXIgKGR1bW15IHN0YXJ0IHZhbHVlKSAqLwotICAgIGludCAgICBjbGFzcyA9IDA7CQkJLyogQ3Vy cmVudCBjaGFyYWN0ZXIgY2xhc3MgKi8KLSAgICBpbnQgICAgc3RhdGUgPSBTVF9CVzsJCS8qIEN1 cnJlbnQgRlNBIHN0YXRlICovCi0gICAgaW50ICAgIGxlbiA9IDA7CQkJLyogTGVuZ3RoIG9mIGN1 cnJlbnQgd29yZCAqLwotICAgIGludCAgICBzbGVuID0gMDsJCQkvKiBMZW5ndGggb2YgczEgKi8K LSAgICBpbnQgICAgZ3F1b3RlID0gMDsJCQkvKiBRdW90ZWQgZ3JvdXAgKi8KLSAgICBpbnQgICAg Y3F1b3RlID0gMDsJCQkvKiBRdW90ZWQgY2hhcmFjdGVyICovCi0gICAgaW50ICAgIGNvbGxhcHNl ID0gMTsJCS8qIENvbGxhcHNlIGFkamFjZW50IHNlcGFyYXRvcnMgKi8KLSAgICBpbnQgICAgYWxs ID0gMDsJCQkvKiBzMyA9PSBBTEwgKi8KLSAgICBpbnQgICAgY3N2ID0gMDsJCQkvKiBzMyA9PSBD U1YgKi8KLSAgICBpbnQgICAgdHN2ID0gMDsJCQkvKiBzMyA9PSBUU1YgKi8KLSAgICBpbnQgICAg cHJldnN0YXRlID0gLTE7Ci0KLSAgICB1bnNpZ25lZCBpbnQgaGV4ODAgPSAxMjg7Ci0gICAgdW5z aWduZWQgaW50IGhleGZmID0gMjU1OwotICAgIENIQVIgbm90c2VwYnVmWzI1Nl07Ci0KLSAgICBu b3RzZXBidWZbMF0gPSBOVUw7CQkJLyogS2VlcCBzZXQgZm9yICJBTEwiICovCi0gICAgaWYgKG40 KSBjb2xsYXBzZSA9IDA7CQkvKiBEb24ndCBjb2xsYXBzZSAqLwotCi0gICAgZm9yIChpID0gMDsg aSA8IE5FU1RNQVg7IGkrKykJLyogSW5pdGlhbGl6ZSBuZXN0aW5nIHN0YWNrICovCi0gICAgICBn cl9zdGtbaV0gPSAwOwotCi0gICAgc2V0d29yZCgxLE5VTEwsMCk7Ci0gICAgY2tfc3ZhbC5hX2hl YWQgPSB3b3JkYXJyYXk7CQkvKiBJbml0aWFsaXplIHJldHVybiB2YWx1ZSBzdHJ1Y3QgKi8KLSAg ICBja19zdmFsLmFfc2l6ZSA9IDA7Ci0KLSAgICBpZiAoIXMxKSBzMSA9ICIiOwkJCS8qIHMxID0g c291cmNlIHN0cmluZyAqLwotICAgIGlmICghKnMxKSB7CQkJCS8qIElmIG5vbmUsIG5vdGhpbmcg dG8gZG8gKi8KLQlyZXR1cm4oJmNrX3N2YWwpOwotICAgIH0KLSAgICBzcGxpdHRpbmcgPSBmYzsJ CQkvKiBPdXIgam9iICovCi0gICAgaWYgKHNwbGl0dGluZykgewkJCS8qIElmIHNwbGl0dGluZyBu ID0gd29yZCBjb3VudCAqLwotCW4gPSAwOwkJCQkvKiBJbml0aWFsaXplIGl0ICovCi0gICAgfSBl bHNlIHsJCQkJLyogT3RoZXJ3aXNlICovCi0jaWZkZWYgQ09NTUVOVAotCWlmIChuMSA8IDEpIHsJ CQkvKiBJZiAwIChvciBsZXNzKSAqLwotCSAgICBja19zdmFsLmFfc2l6ZSA9IDA7CQkvKiBub3Ro aW5nIHRvIGRvLiAqLwotCSAgICByZXR1cm4oJmNrX3N2YWwpOwotCX0KLSNlbHNlCi0JaWYgKG4x ID09IDApIHsJCQkvKiBJZiAwICovCi0JICAgIGNrX3N2YWwuYV9zaXplID0gMDsJCS8qIG5vdGhp bmcgdG8gZG8uICovCi0JICAgIHJldHVybigmY2tfc3ZhbCk7Ci0JfQotI2VuZGlmCS8qIENPTU1F TlQgKi8KLQluID0gbjE7CQkJCS8qIG4gPSBkZXNpcmVkIHdvcmQgbnVtYmVyLiAqLwotICAgIH0K LSAgICBzbGVuID0gMDsJCQkJLyogR2V0IGxlbmd0aCBvZiBzMSAqLwotICAgIGRlYnVnKEYxMTEs ImNrc3BsaXQiLHMxLG4pOwotCi0gICAgcCA9IHMxOwotCi0jaWZkZWYgQ09NTUVOVAotICAgIHdo aWxlICgqcCsrKSBzbGVuKys7CQkvKiBNYWtlIHBva2VhYmxlIGNvcHkgb2YgczEgKi8KLSAgICBp ZiAoIXNwbGl0YnVmIHx8IHNsZW4gPiBuc3BsaXRidWYpIHsgLyogQWxsb2NhdGUgYnVmZmVyIGlm IG5lZWRlZCAqLwotCWludCB4eDsKLQlpZiAoc3BsaXRidWYpCi0JICBmcmVlKHNwbGl0YnVmKTsK LQl4eCA9IChzbGVuIDwgMjU1KSA/IDI1NSA6IHh4ICsgKHh4IC8gNCk7Ci0JZGVidWcoRjEwMSwi Y2tzcGxpdCBzcGxpdGJ1ZiIsIiIseHgpOwotCXNwbGl0YnVmID0gKGNoYXIgKiltYWxsb2MoeHgr MSk7Ci0JaWYgKCFzcGxpdGJ1ZikgewkJLyogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS4uLiAq LwotCSAgICBja19zdmFsLmFfc2l6ZSA9IC0xOwotCSAgICByZXR1cm4oJmNrX3N2YWwpOwotCX0K LQluc3BsaXRidWYgPSB4eDsJCQkvKiBSZW1lbWJlciBzaXplIG9mIGJ1ZmZlciAqLwotICAgIH0K LSNlbHNlCi0vKgotICBUaGUgaWRlYSBpcyB0byBqdXN0IGNvcHkgdGhlIHN0cmluZyBpbnRvIHNw bGl0YnVmIChpZiBpdCBleGlzdHMpLiAgVGhpcwotICBnaXZlcyB1cyBib3RoIHRoZSBjb3B5IGFu ZCB0aGUgbGVuZ3RoIHNvIHdlIG9ubHkgbmVlZCB0byBncm92ZWwgdGhyb3VnaCB0aGUKLSAgc3Ry aW5nIG9uY2UgaW4gbW9zdCBjYXNlcy4gIE9ubHkgd2hlbiBzcGxpdGJ1ZiBkb2Vzbid0IGV4aXN0 IG9yIGlzIHRvbyBzaG9ydAotICBkbyB3ZSByZS1tYWxsb2MoKSwgd2hpY2ggc2hvdWxkIGJlIHZl cnkgaW5mcmVxdWVudCBzbyB3aG8gY2FyZXMgaWYgd2UgaGF2ZQotICB0byBnbyB0aHJvdWdoIHRo ZSBzdHJpbmcgYWdhaW4gaW4gdGhhdCBjYXNlLgotKi8KLSAgICBwID0gczE7Ci0gICAgcyA9IHNw bGl0YnVmOwotICAgIGlmIChzcGxpdGJ1ZikgewkJCS8qIE1ha2UgcG9rZWFibGUgY29weSBvZiBz MSAqLwotCXdoaWxlICgoKnMrKyA9ICpwKyspICYmIChzbGVuKysgPCBuc3BsaXRidWYpKSAvKiBU cnkgdG8gY29weSAqLwotCSAgOwotICAgIH0KLSAgICBpZiAoIXNwbGl0YnVmIHx8IHNsZW4gPj0g bnNwbGl0YnVmKSB7IC8qIE5lZWQgdG8gZG8gbW9yZS4uLiAqLwotCWludCB4eDsKLQlpZiAoc3Bs aXRidWYpCQkJLyogRnJlZSBwcmV2aW91cyBidWYgaWYgYW55ICovCi0JICBmcmVlKHNwbGl0YnVm KTsKLQl3aGlsZSAoKnArKykgc2xlbisrOwkJLyogR2V0IChyZXN0IG9mKSBsZW5ndGggKi8KLQl4 eCA9IChzbGVuIDwgMjU1KSA/IDI1NSA6IHNsZW4gKyAoc2xlbiAvIDQpOyAvKiBTaXplIG9mIG5l dyBidWZmZXIgKi8KLQlzcGxpdGJ1ZiA9IChjaGFyICopbWFsbG9jKHh4KzEpOyAvKiBBbGxvY2F0 ZSBpdCAqLwotCWlmICghc3BsaXRidWYpIHsJCSAvKiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJl Li4uICovCi0JICAgIGNrX3N2YWwuYV9zaXplID0gLTE7Ci0JICAgIHJldHVybigmY2tfc3ZhbCk7 Ci0JfQotCW5zcGxpdGJ1ZiA9IHh4OwkJCS8qIFJlbWVtYmVyIChuZXcpIGJ1ZmZlciBzaXplICov Ci0JcyA9IHNwbGl0YnVmOwotCXAgPSBzMTsKLQl3aGlsZSAoKCpzKysgPSAqcCsrKSkgOwotICAg IH0KLQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICBzID0gc3BsaXRidWY7Ci0gICAgc2VwID0g czI7CQkJCS8qIHMyID0gYnJlYWsgc2V0ICovCi0gICAgaWYgKCFzZXApIHNlcCA9ICIiOwotICAg IG5vdHNlcCA9IHMzOwkJCS8qIHMzID0gaW5jbHVkZSBzZXQgKi8KLSAgICBpZiAoIW5vdHNlcCkg ewotCW5vdHNlcCA9ICIiOwotICAgIH0gZWxzZSBpZiAoKGFsbCA9ICFja3N0cmNtcChub3RzZXAs IkFMTCIsMywxKSkgfHwKLQkgICAgICAgKGNzdiA9ICFja3N0cmNtcChub3RzZXAsIkNTViIsMywx KSkgfHwKLQkgICAgICAgKHRzdiA9ICFja3N0cmNtcChub3RzZXAsIlRTViIsMywxKSkpIHsKLQlp bnQgaSwgZmxhZzsgQ0hBUiBjOwotCWludCBuID0gMDsKLQljaGFyICogc3M7Ci0JaWYgKCFhbGwg JiYgKGNzdiB8fCB0c3YpKSB7Ci0JICAgIGFsbCA9IDE7Ci0JICAgIGNvbGxhcHNlID0gMDsKLQl9 Ci0JaWYgKGNzdiB8fCB0c3YpIHsKLQkgICAgYWxsID0gMTsKLQkgICAgY29sbGFwc2UgPSAwOwot CX0KLQlmb3IgKGkgPSAxOyBpIDwgMjU2OyBpKyspIHsKLQkgICAgZmxhZyA9IDA7Ci0JICAgIHNz ID0gc2VwOwotCSAgICB3aGlsZSAoYyA9ICpzcysrICYmICFmbGFnKSB7Ci0JCWlmIChjID09IGkp IGZsYWcrKzsKLQkgICAgfQotCSAgICBpZiAoIWZsYWcpIG5vdHNlcGJ1ZltuKytdID0gYzsKLQl9 Ci0Jbm90c2VwYnVmW25dID0gTlVMOwotCW5vdHNlcCA9IChjaGFyICopbm90c2VwYnVmOwotCWRl YnVnKEYxMTAsIkNLTUFUQ0ggTk9UU0VQQlVGIEFMTCIsbm90c2VwLDApOwotICAgIH0KLSAgICBp ZiAoKnMgJiYgY3N2KSB7CQkJLyogRm9yIENTViBza2lwIGxlYWRpbmcgd2hpdGVzcGFjZSAqLwot ICAgICAgICB3aGlsZSAoKnMgPT0gU1AgfHwgKnMgPT0gSFQpCi0JICBzKys7Ci0JYyA9ICpzOwot ICAgIH0KLSAgICBpZiAobjIgPT0gMCAmJiBjc3YpIG4yID0gMTsJCS8qIENTViBpbXBsaWVzIGRv dWJsZXF1b3RlIGdyb3VwaW5nICovCi0gICAgaWYgKG4yIDwgMCkgbjIgPSA2MzsJCS8qIG4yID0g Z3JvdXBpbmcgbWFzayAqLwotICAgIGdyb3VwaW5nID0gbjI7Ci0gICAgcCA9ICIiOwkJCQkvKiBQ b2ludGVyIHRvIGN1cnJlbnQgd29yZCAqLwotICAgIHdoaWxlIChjKSB7CQkJCS8qIExvb3AgdGhy b3VnaCBzdHJpbmcgKi8KLQljID0gKnM7Ci0JY2xhc3MgPSAwOwotCWlmICghY3N2ICYmICF0c3Yp IHsJCS8qIGZkYyAyMDEwLTEyLTMwICovCi0JICAgIC8qIEluIENTViBhbmQgVFNWIHNwbGl0dGlu ZywgYmFja3NsYXNoIGlzIG5vdCBzcGVjaWFsICovCi0JICAgIGlmICghY3F1b3RlICYmIGMgPT0g Q01EUSkgewkvKiBJZiBDTURRICovCi0JCWNxdW90ZSsrOwkJLyogbmV4dCBvbmUgaXMgcXVvdGVk ICovCi0JCWdvdG8gbmV4dGM7CQkvKiBnbyBnZXQgaXQgKi8KLQkgICAgfQotCi0JfQotCWlmIChj cXVvdGUgJiYgYyA9PSBDTURRKSB7CS8qIFF1b3RlZCBDTURRIGlzIHNwZWNpYWwgKi8KLQkgICAg aWYgKHN0YXRlICE9IFNUX0JXKSB7CS8qIGJlY2F1c2UgaXQgY2FuIHN0aWxsIHNlcGFyYXRlICov Ci0JCWNoYXIgKiBzMiA9IHMtMTsKLQkJd2hpbGUgKHMyID4gcCkgeyAqczIgPSAqKHMyLTEpOyBz Mi0tOyB9Ci0JCXArKzsKLQkgICAgfQotCSAgICBjcXVvdGUgPSAwOwotCX0KLQlpZiAoY3F1b3Rl KSB7CQkJLyogT3RoZXIgcXVvdGVkIGNoYXJhY3RlciAqLwotCSAgICBpZiAoc3RhdGUgIT0gU1Rf QlcpIHsJLyogY2FuJ3Qgc2VwYXJhdGUgb3IgZ3JvdXAgKi8KLQkJY2hhciAqIHMyID0gcy0xOwot CQl3aGlsZSAoczIgPiBwKSB7ICpzMiA9ICooczItMSk7IHMyLS07IH0KLQkJcCsrOwotCSAgICB9 Ci0JICAgIGNsYXNzID0gQ0xfREFUOwkJLyogc28gdHJlYXQgaXQgYXMgZGF0YSAqLwotCSAgICBj cXVvdGUgPSAwOwotCSAgICB4ID0gMTsKLQl9IGVsc2UgewkJCS8qIENoYXJhY3RlciBpcyBub3Qg cXVvdGVkICovCi0JICAgIGlmICghYWxsICYmIGMgPCBTUCkgewkvKiBHZXQgaXRzIGNsYXNzICov Ci0JCXggPSAwOwkJCS8qIHggPT0gMCBtZWFucyAiaXMgc2VwYXJhdG9yIiAqLwotCSAgICB9IGVs c2UgaWYgKCpzZXApIHsJCS8qIEJyZWFrIHNldCBnaXZlbiAqLwotCQlzcyA9IHNlcDsKLQkJd2hp bGUgKCpzcyAmJiAqc3MgIT0gYykgc3MrKzsgLyogKGluc3RlYWQgb2YgY2tzdHJjaHIoKSkgKi8K LQkJeCA9ICgqc3MgIT0gYyk7Ci0JICAgIH0gZWxzZSB7CQkJLyogRGVmYXVsdCBicmVhayBzZXQg aXMgKi8KLQkJeCA9ICgoYyA+PSAnYScgJiYgYyA8PSAneicpIHx8IC8qIGFsbCBidXQgYWxwaGFu dW1lcmljcyAqLwotCQkgICAgIChjID49ICcwJyAmJiBjIDw9ICc5JykgfHwKLQkJICAgICAoYyA+ PSAnQScgJiYgYyA8PSAnWicpIHx8Ci0JCSAgICAgKCh1bnNpZ25lZCBpbnQpYyA+PSBoZXg4MCAm JiAodW5zaWduZWQgaW50KWMgPD0gaGV4ZmYpCi0JCSAgICAgKTsKLQkgICAgfQotCSAgICBpZiAo eCA9PSAwICYmICpub3RzZXAgJiYgYykgeyAvKiBJbmNsdWRlIHNldCBpZiBnaXZlbiAqLwotCQlz cyA9IG5vdHNlcDsKLQkJd2hpbGUgKCpzcyAmJiAqc3MgIT0gYykgc3MrKzsgLyogKGluc3RlYWQg b2YgY2tzdHJjaHIoKSkgKi8KLQkJeCA9ICgqc3MgPT0gYyk7Ci0JICAgIH0KLQkgICAgaWYgKGMg PT0gbjMgJiYgZ3JvdXBpbmcgJiYgc3RhdGUgPT0gU1RfQlcpIHsgLyogR3JvdXAgcXVvdGU/ICov Ci0JCWNsYXNzID0gQ0xfUVVPOwotCSAgICB9IGVsc2UgewotCQljbGFzcyA9IHggPyBDTF9EQVQg OiBDTF9TRVA7IC8qIENsYXNzID0gZGF0YSBvciBzZXBhcmF0b3IgKi8KLQkgICAgfQotCSAgICBp ZiAoZ3JvdXBpbmcpIHsJCS8qIEdyb3VwaW5nPyAqLwotCQlpbnQgajsJCQkvKiBMb29rIGZvciBn cm91cCBzdGFydCAqLwotCQlmb3IgKGsgPSAwOyBrIDwgNjsgaysrKSB7IC8qIEdyb3VwLXN0YXJ0 IGNoYXI/ICovCi0JCSAgICBqID0gMSA8PCBrOwkJLyogR2V0IGl0cyBtYXNrIGJpdCB2YWx1ZSAq LwotCQkgICAgaWYgKGdyb3VwaW5nICYgaikgewotCQkJaWYgKGMgPT0gZ3Jfb3BuW2tdKSB7IC8q IFNlbGVjdGVkIGdyb3VwIG9wZW5lcj8gKi8KLQkJCSAgICBrbyA9IGs7Ci0JCQkgICAgY2xhc3Mg fD0gQ0xfT1BOOwotCQkJICAgIGlmIChjID09ICciJyB8fCBjID09ICdcJycpIHsgLyogVGhlc2Ug Y2FuIGFsc28gKi8KLQkJCQljbGFzcyB8PSBDTF9DTFM7ICAgICAgICAgLyogYmUgY2xvc2VycyAq LwotCQkJCWJyZWFrOwotCQkJICAgIH0KLQkJCX0gZWxzZSBpZiAoYyA9PSBncl9jbHNba10pIHsg LyogR3JvdXAgY2xvc2VyPyAqLwotCQkJICAgIGNsYXNzIHw9IENMX0NMUzsKLQkJCSAgICBicmVh azsKLQkJCX0KLQkJICAgIH0KLQkJfQotCSAgICB9Ci0JfQotCWRlYnVnKEYwMDAsImNrc3BsaXQg Y2hhciIscyxjKTsKLQlkZWJ1ZyhGMTAxLCJja3NwbGl0IHN0YXRlIiwiIixzdGF0ZSk7Ci0JZGVi dWcoRjEwMSwiY2tzcGxpdCBjbGFzcyIsIiIsY2xhc3MpOwotCi0Jc3dpdGNoIChzdGF0ZSkgewkJ LyogU3RhdGUgc3dpdGNoZXIuLi4gKi8KLQkgIGNhc2UgU1RfQlc6CQkJLyogQkVUV0VFTldPUkRT ICovCi0JICAgIGlmIChjbGFzcyAmIENMX09QTikgewkvKiBHcm91cCBvcGVuZXIgKi8KLQkJaWYg KGdyX2x2bCA9PSAwICYmICFncXVvdGUpIHsgLyogSWYgbm90IGluIGdyb3VwICovCi0JCSAgICBw ID0gczsJCS8qIHBvaW50IHRvIGJlZ2lubmluZyBvZiB3b3JkICovCi0JCX0KLQkJZ3JfbHZsKys7 CQkvKiBQdXNoIGNsb3NlciBvbiBuZXN0aW5nIHN0YWNrICovCi0JCWlmIChncl9sdmwgPj0gTkVT VE1BWCkKLQkJICBnb3RvIHh4c3BsaXQ7Ci0JCWdyX3N0a1tncl9sdmxdID0gZ3JfY2xzW2tvXTsK LQkJcHJldnN0YXRlID0gc3RhdGU7Ci0JCXN0YXRlID0gU1RfSUc7CQkvKiBTd2l0Y2ggdG8gSU5H Uk9VUCBzdGF0ZSAqLwotCSAgICB9IGVsc2UgaWYgKGNsYXNzICYgQ0xfREFUKSB7IC8qIERhdGEg Y2hhcmFjdGVyICovCi0JCWdyX2x2bCA9IDA7CQkvKiBDbGVhciBncm91cCBuZXN0aW5nIHN0YWNr ICovCi0JCWdyX3N0a1tncl9sdmxdID0gMDsKLQkJbGVuID0gMDsKLQkJcCA9IHM7CQkJLyogUG9p bnQgdG8gYmVnaW5uaW5nIG9mIHdvcmQgKi8KLQkJaWYgKGdxdW90ZSkgewkJLyogQWRqdXN0IGZv ciBxdW90ZSAqLwotCQkgICAgbGVuKys7Ci0JCSAgICBwLS07Ci0JCSAgICBncXVvdGUgPSAwOwot CQl9Ci0JCXByZXZzdGF0ZSA9IHN0YXRlOwotCQlzdGF0ZSA9IFNUX0lXOwkJLyogU3dpdGNoIHRv IElOV09SRCBzdGF0ZSAqLwotCSAgICB9IGVsc2UgaWYgKGNsYXNzICYgQ0xfUVVPKSB7IC8qIEdy b3VwIHF1b3RlICovCi0JCWdxdW90ZSA9IGdyX2x2bCsxOwkvKiBSZW1lbWJlciBxdW90ZWQgbGV2 ZWwgKi8KLQkJcCA9IHMgLSAxOwotCQlsZW4gPSAxOwotCSAgICB9Ci0JICAgIGlmIChjb2xsYXBz ZSkKLQkgICAgICBicmVhazsKLQotCSAgY2FzZSBTVF9JVzoJCQkvKiBJTldPUkQgKGJ1dCBub3Qg aW4gYSBncm91cCkgKi8KLQkgICAgaWYgKGNsYXNzICYgQ0xfU0VQKSB7CS8qIEVuZHMgb24gYW55 IGtpbmQgb2Ygc2VwYXJhdG9yICovCi0JCSpzID0gTlVMOwkJLyogVGVybWluYXRlIHRoaXMgd29y ZCAqLwotCQlpZiAoY3N2KSB7CQkvKiBJZiBjb21tYS1zZXBhcmF0ZWQgbGlzdCAqLwotCQkgICAg Y2hhciAqIHMyID0gczsJLyogZGlzY2FyZCBzdXJyb3VuZGluZyBzcGFjZXMgKi8KLQkJICAgIHdo aWxlIChzMiA+IHNwbGl0YnVmKSB7IC8qIGZpcnN0IGJhY2t3YXJkcy4uLiAqLwotCQkJczItLTsK LQkJCWlmICgqczIgPT0gU1AgfHwgKnMyID09IEhUKQotCQkJICAqczIgPSBOVUw7Ci0JCQllbHNl Ci0JCQkgIGJyZWFrOwotCQkgICAgfQotCQkgICAgczIgPSBzKzE7CQkvKiBUaGVuIGZvcndhcmRz Li4uICovCi0JCSAgICB3aGlsZSAoKnMyICYmICgqczIgPT0gU1AgfHwgKnMyID09IEhUKSkKLQkJ ICAgICAgKnMyKys7Ci0JCSAgICBzID0gczItMTsKLQkJfQotCQlpZiAoIWNzdiB8fCBwcmV2c3Rh dGUgIT0gU1RfSUcpIHsKLQkJICAgIHdvcmRudW0rKzsJCSAgICAgIC8qIENvdW50IGl0ICovCi0J CSAgICBpZiAoc3BsaXR0aW5nIHx8IG4gPCAwKSB7IC8qIERpc3Bvc2Ugb2YgaXQgYXBwcm9wcmlh dGVseSAqLwotCQkJaWYgKHdvcmRudW0gPiBtYXgpIHsgIC8qIEFkZCB0byBhcnJheSBpZiBzcGxp dHRpbmcgKi8KLQkJCSAgICBja19zdmFsLmFfc2l6ZSA9IC0yOwotCQkJICAgIHJldHVybigmY2tf c3ZhbCk7Ci0JCQl9Ci0JCQkvKiBUaGlzIGluZWxlZ2FudCBiaXQgY29ycmVjdHMgYW4gZWRnZSBj b25kaXRpb24gKi8KLQkJCWlmIChjc3YgJiYgISpwICYmICghYyB8fCAhKihzKzEpKSkgewotCQkJ ICAgIHdvcmRudW0tLTsKLQkJCX0gZWxzZSB7Ci0JCQkgICAgc2V0d29yZCh3b3JkbnVtLHAsbGVu KTsKLQkJCX0KLQkJICAgIH0gZWxzZSBpZiAod29yZG51bSA9PSBuKSB7IC8qIFNlYXJjaGluZyBm b3Igd29yZCBuICovCi0JCQlzZXR3b3JkKDEscCxsZW4pOwotCQkJY2tfc3ZhbC5hX3NpemUgPSAx OwotCQkJcmV0dXJuKCZja19zdmFsKTsKLQkJICAgIH0KLQkJfQotCQlwcmV2c3RhdGUgPSBzdGF0 ZTsKLQkJc3RhdGUgPSBTVF9CVzsJCS8qIFN3aXRjaCB0byBCRVRXRUVOV09SRFMgc3RhdGUgKi8K LQkJbGVuID0gMDsKLQkgICAgfQotCSAgICBicmVhazsKLQotCSAgY2FzZSBTVF9JRzoJCQkvKiBJ TkdST1VQICovCi0JICAgIGlmIChjbGFzcyAmIENMX0NMUykgewkvKiBIYXZlIGdyb3VwIGNsb3Nl cj8gKi8KLQkJaWYgKGNzdikgewotCQkgICAgaWYgKCoocysxKSA9PSBjKSB7Ci0JCQljaGFyICpz MiA9IHM7Ci0JCQl3aGlsZSAoKCpzMiA9ICooczIrMSkpKSBzMisrOwotCQkJcysrOwotCQkJYyA9 ICpzOwotCQkgICAgfQotCQl9Ci0JCWlmIChjID09IGdyX3N0a1tncl9sdmxdKSB7IC8qIERvZXMg aXQgbWF0Y2ggY3VycmVudCBvcGVuZXI/ICovCi0JCSAgICBncl9sdmwtLTsJCSAgIC8qIFllcywg cG9wIHN0YWNrICovCi0JCSAgICBpZiAoZ3JfbHZsIDwgMCkJICAgLyogRG9uJ3QgcG9wIGl0IHRv byBtdWNoICovCi0JCSAgICAgIGdyX2x2bCA9IDA7Ci0JCSAgICBpZiAoZ3JfbHZsID09IDApIHsJ LyogSWYgYXQgdG9wIG9mIHN0YWNrICovCi0JCQlpZiAoZ3F1b3RlKQotCQkJICBzKys7Ci0JCQlj ID0gKnM7Ci0JCQkqcyA9IE5VTDsJLyogd2UgaGF2ZSB3b3JkLiAqLwotCQkJd29yZG51bSsrOwkv KiBDb3VudCBhbmQgZGlzcG9zZSBvZiBpdC4gKi8KLQkJCWxlbi0tOwotCQkJaWYgKHNwbGl0dGlu ZyB8fCBuIDwgMCkgewotCQkJICAgIGlmICh3b3JkbnVtID4gbWF4KSB7Ci0JCQkJY2tfc3ZhbC5h X3NpemUgPSAtMjsKLQkJCQlyZXR1cm4oJmNrX3N2YWwpOwotCQkJICAgIH0KLQkJCSAgICBzZXR3 b3JkKHdvcmRudW0scCsxLGxlbik7Ci0JCQl9IGVsc2UgaWYgKHdvcmRudW0gPT0gbikgewotCQkJ ICAgIHNldHdvcmQoMSxwKzEsbGVuKTsKLQkJCSAgICBja19zdmFsLmFfc2l6ZSA9IDE7Ci0JCQkg ICAgcmV0dXJuKCZja19zdmFsKTsKLQkJCX0KLQkJCXByZXZzdGF0ZSA9IHN0YXRlOwotCQkJc3Rh dGUgPSBTVF9CVzsJLyogU3dpdGNoIHRvIEJFVFdFRU5XT1JEUyBzdGF0ZSAqLwotCQkJbGVuID0g MDsKLQkJICAgIH0KLQkJICAgIGlmIChncl9sdmwgPCBncXVvdGUpCi0JCSAgICAgIGdxdW90ZSA9 IDA7Ci0JCX0KLQkgICAgfSBlbHNlIGlmIChjbGFzcyAmIENMX09QTikgeyAvKiBIYXZlIGdyb3Vw IG9wZW5lciAqLwotCQlncl9sdmwrKzsJCSAvKiBQdXNoIG9uIG5lc3Rpbmcgc3RhY2sgKi8KLQkJ aWYgKGdyX2x2bCA+PSBORVNUTUFYKSBnb3RvIHh4c3BsaXQ7Ci0JCWdyX3N0a1tncl9sdmxdID0g Z3JfY2xzW2tvXTsKLQkgICAgfQotCX0gLyogc3dpdGNoICovCi0KLSAgICAgIG5leHRjOgotCXMr KzsJCQkJLyogTmV4dCBjaGFyICovCi0JaWYgKHN0YXRlKQotCSAgbGVuKys7Ci0gICAgfSAvKiB3 aGlsZSAoYykgKi8KLQotICAgIGlmIChncl9sdmwgPiAwKSB7CQkJLyogSW4gY2FzZSBvZiBhbiB1 bmNsb3NlZCBncm91cCAqLwotCWlmIChzcGxpdHRpbmcgfHwgbiA8IDApIHsJLyogbWFrZSBpdCB0 aGUgbGFzdCB3b3JkLiAqLwotCSAgICBpZiAoKyt3b3JkbnVtID4gbWF4KSB7Ci0JCWNrX3N2YWwu YV9zaXplID0gLTI7Ci0JCXJldHVybigmY2tfc3ZhbCk7Ci0JICAgIH0KLQkgICAgc2V0d29yZCh3 b3JkbnVtLHArMSxsZW4pOwotCX0gZWxzZSBpZiAod29yZG51bSA9PSBuKSB7CS8qIENvdW50aW5n IGZyb20gbGVmdCAqLwotCSAgICBzZXR3b3JkKDEscCsxLGxlbik7Ci0JICAgIGNrX3N2YWwuYV9z aXplID0gMTsKLQkgICAgcmV0dXJuKCZja19zdmFsKTsKLQl9IGVsc2UgCWlmIChuIDwgMCAmJiAo d29yZG51bSArIG4gPiAtMSkpIHsgLyogQ291bnRpbmcgZnJvbSByaWdodCAqLwotCSAgICBjaGFy ICogcyA9IHdvcmRhcnJheVt3b3JkbnVtICsgbiArIDFdOwotCSAgICBpZiAoIXMpIHMgPSAiIjsK LQkgICAgc2V0d29yZCgxLHMsc3RybGVuKHMpKTsKLQkgICAgY2tfc3ZhbC5hX3NpemUgPSAxOwot CSAgICByZXR1cm4oJmNrX3N2YWwpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICghc3BsaXR0 aW5nKSB7CQkJLyogRndvcmQuLi4gKi8KLQlpZiAobiA8IDAgJiYgKHdvcmRudW0gKyBuID4gLTEp KSB7IC8qIENvdW50aW5nIGZyb20gcmlnaHQgKi8KLQkgICAgY2hhciAqIHMgPSB3b3JkYXJyYXlb d29yZG51bSArIG4gKyAxXTsKLQkgICAgaWYgKCFzKSBzID0gIiI7Ci0JICAgIHNldHdvcmQoMSxz LHN0cmxlbihzKSk7Ci0JICAgIGNrX3N2YWwuYV9zaXplID0gMTsKLQkgICAgcmV0dXJuKCZja19z dmFsKTsKLSAgICAgICAgfQotCXNldHdvcmQoMSxOVUxMLDApOwkJLyogRnJvbSBsZWZ0Li4uICov Ci0JY2tfc3ZhbC5hX3NpemUgPSAwOwkJLyogYnV0IHRoZXJlIHdlcmVuJ3QgbiB3b3JkcyAqLwot CXJldHVybigmY2tfc3ZhbCk7Ci0gICAgfSBlbHNlIHsJCQkJLyogU3VjY2VlZCBvdGhlcndpc2Ug Ki8KLQlja19zdmFsLmFfc2l6ZSA9IHdvcmRudW07Ci0vKiAKLSAgQWx3YXlzIHB1dCBhIG51bGwg ZWxlbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBhcnJheS4gIEl0IGRvZXMgbm8gaGFybSBpbgotICB0 aGUgbm9ybWFsIGNhc2UsIGFuZCBpdCdzIHJlcXVpcmVkIGlmIHdlJ3JlIG1ha2luZyBhbiBhcmd2 W10gYXJyYXkgdG8gCi0gIHBhc3MgdG8gZXhlY3ZwKCkuICBUaGlzIGVsZW1lbnQgaXMgbm90IGlu Y2x1ZGVkIGluIHRoZSBjb3VudC4KLSovCi0JaWYgKHdvcmRudW0gPCBNQVhXT1JEUykKLSAgICAg ICAgICBzZXR3b3JkKHdvcmRudW0rMSxOVUxMLDApOwotICAgIH0KLSNpZmRlZiBERUJVRwotICAg IGlmIChkZWJsb2cpIHsKLQlmb3IgKGkgPSAxOyBpIDw9IHdvcmRudW07IGkrKykKLQkgIGRlYnVn KEYxMTEsImNrc3BsaXQgcmVzdWx0Iix3b3JkYXJyYXlbaV0saSk7Ci0gICAgfQotI2VuZGlmIC8q IERFQlVHICovCi0gICAgcmV0dXJuKCZja19zdmFsKTsKLQotICB4eHNwbGl0OgkJCQkvKiBFcnJv ciByZXR1cm4gKi8KLSAgICBja19zdmFsLmFfc2l6ZSA9IC0yOwotICAgIHJldHVybigmY2tfc3Zh bCk7Ci19Ci0KLS8qCi0gIGNraGV4Ynl0ZXRvaW50KCkgZXhwZWN0cyBhIHN0cmluZyBvZiB0d28g aGV4IGNoYXJhY3RlcnMsCi0gIHJldHVybnMgdGhlIGludCBlcXVpdmFsZW50IG9yIC0xIG9uIGVy cm9yLgotKi8KLWludAotI2lmZGVmIENLX0FOU0lDCi1ja2hleGJ5dGV0b2ludCggY2hhciAqIHMg KQotI2Vsc2UKLWNraGV4Ynl0ZXRvaW50KHMpIGNoYXIgKiBzOwotI2VuZGlmCS8qIENLX0FOU0lD ICovCi17Ci0gICAgaW50IGksIGNbMl07Ci0gICAgaWYgKCFzKSByZXR1cm4oLTEpOwotICAgIGlm ICgoaW50KXN0cmxlbihzKSAhPSAyKSByZXR1cm4oLTEpOwotICAgIGZvciAoaSA9IDA7IGkgPCAy OyBpKyspIHsKLQljW2ldID0gKnMrKzsKLQlpZiAoIWNbaV0pIHJldHVybigtMSk7Ci0JaWYgKGlz bG93ZXIoY1tpXSkpIGNbaV0gPSB0b3VwcGVyKGNbaV0pOwotCWlmIChjW2ldID49ICcwJyAmJiBj W2ldIDw9ICc5JykgewotCSAgICBjW2ldIC09IDB4MzA7Ci0JfSBlbHNlIGlmIChjW2ldID49ICdB JyAmJiBjW2ldIDw9ICdGJykgewotCSAgICBjW2ldIC09IDB4Mzc7Ci0JfSBlbHNlIHsKLQkgICAg cmV0dXJuKC0xKTsKLQl9Ci0gICAgfQotICAgIHJldHVybihjWzBdICogMTYgKyBjWzFdKTsKLX0K LQotCi0vKiBFbmQgb2YgY2tjbGliLmMgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDIt YnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY2xpYi5oIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2Nr ZXJtaXQtOS4wLjMwMi9ja2NsaWIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYw OWMwZS4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAy L2NrY2xpYi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qIGNrY2xpYi5oIC0t IEMtS2VybWl0IGxpYnJhcnkgcm91dGluZSBwcm90b3R5cGVzICovCi0vKgotICBBdXRob3I6IEZy YW5rIGRhIENydXogPGZkY0Bjb2x1bWJpYS5lZHU+LAotICBDb2x1bWJpYSBVbml2ZXJzaXR5IEFj YWRlbWljIEluZm9ybWF0aW9uIFN5c3RlbXMsIE5ldyBZb3JrIENpdHkuCi0KLSAgQ29weXJpZ2h0 IChDKSAyMDAyLCAyMDA5LAotICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4g dGhlIENpdHkgb2YgTmV3IFlvcmsuCi0gICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUg Qy1LZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBvciB0aGUKLSAgICBjb3B5cmlnaHQgdGV4dCBpbiB0 aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KLSovCi0j aWZuZGVmIENLQ0xJQl9ICi0jZGVmaW5lIENLQ0xJQl9ICi0KLXN0cnVjdCBzdHJpbmdhcnJheSB7 Ci0gICAgY2hhciAqKiBhX2hlYWQ7Ci0gICAgaW50IGFfc2l6ZTsKLX07Ci0KLSNpZmRlZiBDS19B TlNJQwotX1BST1RPVFlQKCBpbnQgY2tzdHJuY3B5LCAoY2hhciAqLCBjb25zdCBjaGFyICosIGlu dCkgKTsKLV9QUk9UT1RZUCggaW50IGNrc3RybmNhdCwgKGNoYXIgKiwgY29uc3QgY2hhciAqLCBp bnQpICk7Ci0jZWxzZQotX1BST1RPVFlQKCBpbnQgY2tzdHJuY3B5LCAoY2hhciAqLCBjaGFyICos IGludCkgKTsKLV9QUk9UT1RZUCggaW50IGNrc3RybmNhdCwgKGNoYXIgKiwgY2hhciAqLCBpbnQp ICk7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLQotX1BST1RPVFlQKCBpbnQgY2ttYWttc2csICAo Y2hhciAqLCBpbnQsIGNoYXIgKiwgY2hhciAqLCBjaGFyICosIGNoYXIgKikgKTsKLV9QUk9UT1RZ UCggaW50IGNrbWFreG1zZywgKGNoYXIgKiwgaW50LAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciAqLCBjaGFyICosIGNoYXIgKiwgY2hhciAqLCBjaGFyICosIGNoYXIgKiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgY2hhciAqLCBjaGFyICosIGNoYXIgKiwgY2hh ciAqLCBjaGFyICopICk7Ci0KLV9QUk9UT1RZUCggY2hhciAqIGNrc3RycGJyaywgKGNoYXIgKiwg Y2hhciAqKSApOwotX1BST1RPVFlQKCBjaGFyICogY2tzdHJzdHIsIChjaGFyICosIGNoYXIgKikg KTsKLV9QUk9UT1RZUCggY2hhciAqIGNoYXJ0b3N0ciwgKGludCkgKTsKLV9QUk9UT1RZUCggaW50 IGNrbG93ZXIsIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIGludCBja3VwcGVyLCAoY2hhciAqKSAp OwotX1BST1RPVFlQKCBpbnQgY2tpbmRleCwgKGNoYXIgKiwgY2hhciAqLCBpbnQsIGludCwgaW50 KSApOwotX1BST1RPVFlQKCBjaGFyICogY2tjdG9hLCAoY2hhcikgKTsKLV9QUk9UT1RZUCggY2hh ciAqIGNrY3RveCwgKENIQVIsIGludCkgKTsKLV9QUk9UT1RZUCggY2hhciAqIGNraXRvYSwgKGlu dCkgKTsKLV9QUk9UT1RZUCggY2hhciAqIGNrdWl0b2EsICh1bnNpZ25lZCBpbnQpICk7Ci1fUFJP VE9UWVAoIGNoYXIgKiBja2x0b2EsIChsb25nKSApOwotX1BST1RPVFlQKCBjaGFyICogY2t1bHRv YSwgKHVuc2lnbmVkIGxvbmcpICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiBja2ZzdG9hLCAoQ0tfT0ZG X1QpICk7Ci1fUFJPVE9UWVAoIENLX09GRl9UIGNrYXRvZnMsIChjaGFyICopICk7Ci1fUFJPVE9U WVAoIGNoYXIgKiBja2l0b3gsIChpbnQpICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiBja2x0b3gsIChs b25nKSApOwotX1BST1RPVFlQKCBpbnQgaXNwYXR0ZXJuLCAoY2hhciAqKSApOwotX1BST1RPVFlQ KCBpbnQgY2ttYXRjaCwgKGNoYXIgKiwgY2hhciAqLCBpbnQsIGludCApICk7Ci1fUFJPVE9UWVAo IFZPSUQgY2ttZW1jcHksIChjaGFyICosIGNoYXIgKiwgaW50KSApOwotX1BST1RPVFlQKCBjaGFy ICogY2tzdHJjaHIsIChjaGFyICosIGNoYXIpICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiBja3N0cnJj aHIsIChjaGFyICosIGNoYXIpICk7Ci1fUFJPVE9UWVAoIGludCBja3JjaGFyLCAoY2hhciAqKSAp OwotX1BST1RPVFlQKCBpbnQgY2tzdHJjbXAsIChjaGFyICosIGNoYXIgKiwgaW50LCBpbnQpICk7 Ci0jZGVmaW5lIHh4c3RyY21wKGEsYixjKSBja3N0cmNtcChhLGIsYywwKQotX1BST1RPVFlQKCBp bnQgY2tzdHJwcmUsIChjaGFyICosIGNoYXIgKikgKTsKLV9QUk9UT1RZUCggVk9JRCBzaF9zb3J0 LCAoY2hhciAqKiwgY2hhciAqKiwgaW50LCBpbnQsIGludCwgaW50KSApOwotX1BST1RPVFlQKCBj aGFyICogYnJzdHJpcCwgKGNoYXIgKikgKTsKLV9QUk9UT1RZUCggY2hhciAqIGZuc3RyaXAsIChj aGFyICopICk7Ci0jaWZkZWYgQ09NTUVOVAotX1BST1RPVFlQKCBjaGFyICogYnJhY2UsIChjaGFy ICopICk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotX1BST1RPVFlQKCBpbnQgZHF1b3RlLCAoY2hh ciAqLCBpbnQsIGludCkgKTsKLV9QUk9UT1RZUCggaW50IHVudGFiaWZ5LCAoY2hhciAqLCBjaGFy ICosIGludCkgKTsKLV9QUk9UT1RZUCggVk9JRCBtYWtlbGlzdCwgKGNoYXIgKiwgY2hhciAqW10s IGludCkgKTsKLSNpZm5kZWYgQ0tfQU5TSUMKLV9QUk9UT1RZUCggVk9JRCBtYWtlc3RyLCAoY2hh ciAqKiwgY2hhciAqKSApOwotX1BST1RPVFlQKCBWT0lEIHhtYWtlc3RyLCAoY2hhciAqKiwgY2hh ciAqKSApOwotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLV9QUk9UT1RZUCggVk9JRCBtYWtlc3RyLCAo Y2hhciAqKiwgY29uc3QgY2hhciAqKSApOwotX1BST1RPVFlQKCBWT0lEIHhtYWtlc3RyLCAoY2hh ciAqKiwgY29uc3QgY2hhciAqKSApOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi1fUFJPVE9UWVAo IGludCBjaGtudW0sIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIGludCByZGlnaXRzLCAoY2hhciAq KSApOwotX1BST1RPVFlQKCBjaGFyICogY2tyYWRpeCwgKGNoYXIgKixpbnQsaW50KSApOwotCi0v KiBCYXNlLTY0IGNvbnZlcnNpb24gbmVlZGVkIGZvciBzY3JpcHQgcHJvZ3JhbW1pbmcgYW5kIEhU VFAgKi8KLQotI2lmbmRlZiBOT0I2NAotX1BST1RPVFlQKCBpbnQgYjh0b2I2NCwgKGNoYXIgKixp bnQsY2hhciAqLGludCkpOwotX1BST1RPVFlQKCBpbnQgYjY0dG9iOCwgKGNoYXIgKixpbnQsY2hh ciAqLGludCkpOwotI2VuZGlmIC8qIE5PQjY0ICovCi0KLSNpZmRlZiBDS0ZMT0FUCi1fUFJPVE9U WVAoIGludCBpc2Zsb2F0LCAoY2hhciAqLGludCkgKTsKLSNpZm5kZWYgQ0tDTElCX0MKLSNpZm5k ZWYgQ0tXQVJUX0MKLWV4dGVybiBDS0ZMT0FUIGZsb2F0dmFsOwotI2VuZGlmIC8qIENLV0FSVF9D ICovCi0jZW5kaWYgLyogQ0tDTElCX0MgKi8KLSNlbmRpZiAvKiBDS0ZMT0FUICovCi0KLV9QUk9U T1RZUCggY2hhciAqIHBhcm5hbSwgKGNoYXIpICk7Ci1fUFJPVE9UWVAoIGNoYXIgKmhobW1zcywg KGxvbmcpICk7Ci0KLV9QUk9UT1RZUCggVk9JRCBsc2V0LCAoY2hhciAqLCBjaGFyICosIGludCwg aW50KSApOwotX1BST1RPVFlQKCBWT0lEIHJzZXQsIChjaGFyICosIGNoYXIgKiwgaW50LCBpbnQp ICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiB1bG9uZ3RvaGV4LCAodW5zaWduZWQgbG9uZywgaW50KSAp OwotX1BST1RPVFlQKCBsb25nIGhleHRvdWxvbmcsIChjaGFyICosIGludCkgKTsKLV9QUk9UT1RZ UCggc3RydWN0IHN0cmluZ2FycmF5ICogY2tzcGxpdCwgKGludCxpbnQsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosY2hhciAqLGNoYXIgKixpbnQsaW50 LGludCkgKTsKLQotX1BST1RPVFlQKCBpbnQgY2toZXhieXRldG9pbnQsIChjaGFyICopICk7Ci0j ZW5kaWYgLyogQ0tDTElCX0ggKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQv Y2tlcm1pdC05LjAuMzAyL2NrY21haS5jIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQt OS4wLjMwMi9ja2NtYWkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY1ZDBhMC4u MDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY21h aS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzU4MCArMCwwIEBACi0jZGVmaW5lIEVESVREQVRFICAi MjAgQXVnIDIwMTEiCQkvKiBMYXN0IGVkaXQgZGF0ZSBkZCBtbW0geXl5eSAqLwotI2RlZmluZSBF RElUTkRBVEUgIjIwMTEwODIwIgkJLyogS2VlcCB0aGVtIGluIHN5bmMgKi8KLS8qIFNhdCBBdWcg MjAgMTc6MjA6MTcgMjAxMSAqLwotCi0vKiBja2NtYWkuYyAtIE1haW4gcHJvZ3JhbSBmb3IgQy1L ZXJtaXQgcGx1cyBzb21lIG1pc2NlbGxhbmVvdXMgZnVuY3Rpb25zICovCi0KLS8qCi0gIGNrY3N5 bS5oIGlzIHVzZWQgZm9yIGZvciBkZWZpbmluZyBzeW1ib2xzIHRoYXQgbm9ybWFsbHkgd291bGQg YmUgZGVmaW5lZAotICB1c2luZyAtRCBvciAtZCBvbiB0aGUgY2MgY29tbWFuZCBsaW5lLCBmb3Ig dXNlIHdpdGggY29tcGlsZXJzIHRoYXQgZG9uJ3QKLSAgc3VwcG9ydCB0aGlzIGZlYXR1cmUuICBN dXN0IGNvbWUgYmVmb3JlIGFueSB0ZXN0cyBmb3IgcHJlcHJvY2Vzc29yIHN5bWJvbHMuCi0qLwot I2luY2x1ZGUgImNrY3N5bS5oIgotLyoKLSAgQ29uc29saWRhdGVkIHByb2dyYW0gQy1LZXJtaXQg dmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgYWxsIHBsYXRmb3JtcwotICAoYnV0IGZvciBVTklYIGFs c28gc2VlIGNrdXZlci5oKS4gIFNlZSBtYWtldmVyKCkgYmVsb3cgZm9yIGhvdyB0aGV5IGFyZSB1 c2VkLgotKi8KLSNpZmRlZiBDT01NRU5UICAgICAgICAgICAgICAgICAgICAvKiBVbmNvbW1lbnQg dGhpcyBmb3IgcmVhbCBLOTUgdmVyc2lvbiAqLwotI2lmbmRlZiBPUzIJCQkJLyogT1MyIGFjdHVh bGx5IG1lYW5zIEtlcm1pdCA5NS4gKi8KLSNpZm5kZWYgQkVUQVRFU1QJCQkvKiBJdCdzIGJlY2F1 c2UgS2VybWl0IDk1IHN0YXJ0ZWQgKi8KLSNkZWZpbmUgQkVUQVRFU1QJCQkvKiBvdXQgYXMgQy1L ZXJtaXQgZm9yIE9TLzIuICovCi0jZW5kaWYgLyogQkVUQVRFU1QgKi8KLSNlbmRpZiAvKiBPUzIg Ki8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSNpZmRlZiBCRVRBVEVTVAotI2lmZGVmIE9TMgot I2lmZGVmIF9fREFURV9fCi0jZGVmaW5lIEJFVEFEQVRFCi0jZW5kaWYgLyogX19EQVRFX18gKi8K LSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBCRVRBVEVTVCAqLwotCi1jaGFyICogY2tfY3J5 ZWFyID0gIjIwMTEiOyAJCS8qIEMtS2VybWl0IGNvcHlyaWdodCB5ZWFyICovCi0KLSNpZm5kZWYg TUFDCQkJCS8qIE1BQyA9IEtlcm1pdCBmb3IgTUFDIE9TIDYsIDcsIC4uLiAqLwotLyoKLSAgTm90 ZTogaW5pdGlhbGl6ZSBja19zX3Rlc3QgdG8gIiIgaWYgdGhpcyBpcyBub3QgYSB0ZXN0IHZlcnNp b24uCi0gIFVzZSAoKmNrX3NfdGVzdCAhPSAnXDAnKSB0byBkZWNpZGUgd2hldGhlciB0byBwcmlu dCB0ZXN0LXJlbGF0ZWQgbWVzc2FnZXMuCi0qLwotCi0jaWZuZGVmIEJFVEFURVNUCi0jaWZuZGVm IE9TMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVU5JWCwgVk1TLCBldGMuLi4gKGku ZS4gQy1LZXJtaXQpICovCi1jaGFyICpja19zX3Rlc3QgPSAiIjsJCQkvKiAiRGV2IiwiQWxwaGEi LCJCZXRhIiwiUkMiLCBvciAiIiAqLwotY2hhciAqY2tfc190dmVyID0gIiI7CQkJLyogVGVzdCB2 ZXJzaW9uIG51bWJlciBvciAiIiAqLwotI2Vsc2UgIC8qIE9TMiAqLwotY2hhciAqY2tfc190ZXN0 ID0gIiI7CQkJLyogKGkuZS4gSzk1KSAqLwotY2hhciAqY2tfc190dmVyID0gIiI7Ci0jZW5kaWYg LyogT1MyICovCi0jZWxzZQotY2hhciAqY2tfc190ZXN0ID0gIiI7CQkJLyogRGV2ZWxvcG1lbnQg Ki8KLWNoYXIgKmNrX3NfdHZlciA9ICIiOwotI2VuZGlmIC8qIEJFVEFURVNUICovCi0jZWxzZSAv KiBNQUMgKi8KLWNoYXIgKmNrX3NfdGVzdCA9ICJQcmUtQWxwaGEiOyAgICAgICAgICAvKiBNYWMg S2VybWl0IGlzIGFsd2F5cyBhIHRlc3QuLi4gKi8KLWNoYXIgKmNrX3NfdHZlciA9ICIiOwkJCS8q IChwcmUgTWFjIE9TIFggMTAsIHRoYXQgaXMhKSAqLwotI2VuZGlmIC8qIE1BQyAqLwotCi0jaWZk ZWYgQkVUQURBVEUgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGF0ZSBvZiB0aGlzIHZlcnNp b24gb3IgZWRpdCAqLwotY2hhciAqY2tfc19kYXRlID0gX19EQVRFX187ICAgICAgICAgICAgIC8q IENvbXBpbGF0aW9uIGRhdGUgKi8KLSNlbHNlCi1jaGFyICpja19zX2RhdGUgPSBFRElUREFURTsJ CS8qIFNlZSB0b3AgKi8KLQotI2VuZGlmIC8qIEJFVEFEQVRFICovCi1jaGFyICpidWlsZGlkID0g RURJVE5EQVRFOwkJLyogU2VlIHRvcCAqLwotCi0jaWZkZWYgVU5JWAotc3RhdGljIGNoYXIgc2Nj c2lkW10gPSAiQCgjKUMtS2VybWl0IDkuMC4zMDIiOwotI2VuZGlmIC8qIFVOSVggKi8KLQotLyoK LSAgVGhlIEMtS2VybWl0IFZlcnNpb24gbnVtYmVyIGlzIG1ham9yLm1pbm9yLmVkaXQgKGludGVn ZXJzKS4KLSAgTWFqb3IgdmVyc2lvbiBhbHdheXMgZ29lcyB1cC4KLSAgTWlub3IgdmVyc2lvbiBp cyBoaXN0b3JpY2FsLCBoYXNuJ3QgYmVlbiB1c2VkIHNpbmNlIEMtS2VybWl0IDcuMS4KLSAgRWRp dCBpcyBzZXF1ZW50aWFsLCBhbHdheXMgZ29lcyB1cCwgYnV0IHRoZXJlIGNhbiBiZSBnYXBzLgot ICBGb3IgZXhhbXBsZSB0aGVyZSBtaWdodCBiZSBtYW55IGVkaXRzIGJldHdlZW4gcmVsZWFzZXMu Ci0gIElmIHRoZSBtYWpvciBnb2VzIHRvIDEwLCBzb21lIHZlcnNpb24tbnVtYmVyLWJhc2VkIGZl YXR1cmUgdGVzdHMKLSAgY291bGQgZmFpbC4gIEl0IG1pZ2h0IGJlIGJldHRlciB0byB1c2UgdGhl IG1pbm9yIHZlcnNpb24gZmllbGQKLSAgZm9yIGZ1dHVyZSByZWxlYXNlcy4KLSovCi0KLWNoYXIg KmNrX3NfdmVyID0gIjkuMC4zMDIiOyAgICAgICAgICAgICAvKiBDLUtlcm1pdCB2ZXJzaW9uIHN0 cmluZyAqLwotbG9uZyAgY2tfbF92ZXIgPSAgOTAwMzAyTDsgICAgICAgICAgICAgIC8qIEMtS2Vy bWl0IHZlcnNpb24gbnVtYmVyICovCi0KLSNpZmRlZiBPUzIKLWNoYXIgKmNrX3NfeHZlciA9ICIz LjAuMCI7CQkvKiBQcm9kdWN0LXNwZWNpZmljIHZlcnNpb24gc3RyaW5nICovCi1sb25nICBja19s X3h2ZXIgPSAzMDAwTDsgICAgICAgICAgICAgICAgLyogUHJvZHVjdC1zcGVjaWZpYyB2ZXJzaW9u IG51bWJlciAqLwotI2Vsc2UKLSNpZmRlZiBNQUMKLWNoYXIgKmNrX3NfeHZlciA9ICIwLjk5NSI7 ICAgICAgICAgICAgICAvKiBQcm9kdWN0LXNwZWNpZmljIHZlcnNpb24gc3RyaW5nICovCi1sb25n ICBja19sX3h2ZXIgPSA5OTVMOyAgICAgICAgICAgICAgICAgLyogUHJvZHVjdC1zcGVjaWZpYyB2 ZXJzaW9uIG51bWJlciAqLwotI2Vsc2UKLWNoYXIgKmNrX3NfeHZlciA9ICIiOyAgICAgICAgICAg ICAgICAgICAvKiBEb24ndCB0b3VjaCB0aGVzZS4uLiAqLwotbG9uZyAgY2tfbF94dmVyID0gMEw7 ICAgICAgICAgICAgICAgICAgIC8qIHRoZXkgYXJlIGNvbXB1dGVkIGF0IHJ1bnRpbWUgKi8KLSNl bmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIE9TMgotI2lmZGVmIElL U0RPTkxZCi0jaWZkZWYgTlQKLWNoYXIgKmNrX3NfbmFtZSA9ICJJS1MtTlQiOwotI2Vsc2UgLyog TlQgKi8KLWNoYXIgKmNrX3NfbmFtZSA9ICJJS1MtT1MvMiI7Ci0jZW5kaWYgLyogTlQgKi8KLSNl bHNlIC8qIElLU0RPTkxZICovCi1jaGFyICpja19zX25hbWUgPSAiS2VybWl0IDk1IjsgICAgICAg ICAgLyogUHJvZ3JhbSBuYW1lICovCi0jZW5kaWYgLyogSUtTRE9OTFkgKi8KLSNlbHNlCi0jaWZk ZWYgTUFDCi1jaGFyICpja19zX25hbWUgPSAiTWFjIEtlcm1pdCI7Ci0jZWxzZQotY2hhciAqY2tf c19uYW1lID0gIkMtS2VybWl0IjsKLSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBPUzIgKi8K LQotY2hhciAqY2tfc193aG8gPSAiIjsgICAgICAgICAgICAgICAgICAgIC8qIFdoZXJlIGN1c3Rv bWl6ZWQsICIiID0gbm90LiAqLwotY2hhciAqY2tfcGF0Y2ggPSAiIjsgICAgICAgICAgICAgICAg ICAgIC8qIFBhdGNoIGluZm8sIGlmIGFueS4gKi8KLQotI2RlZmluZSBDS1ZFUkxFTiAxMjgKLWNo YXIgdmVyc2lveFtDS1ZFUkxFTl07ICAgICAgICAgICAgICAgICAvKiBWZXJzaW9uIHN0cmluZyBi dWZmZXIgICovCi1jaGFyICp2ZXJzaW8gPSB2ZXJzaW94OyAgICAgICAgICAgICAgICAgLyogVGhl c2UgYXJlIGZpbGxlZCBpbiBhdCAqLwotbG9uZyB2ZXJudW0sIHh2ZXJudW07ICAgICAgICAgICAg ICAgICAgIC8qIHJ1bnRpbWUgZnJvbSBhYm92ZS4gICAgKi8KLQotI2RlZmluZSBDS0NNQUkKLQot I2luY2x1ZGUgImNrY2FzYy5oIiAgICAgICAgICAgICAgICAgICAgIC8qIEFTQ0lJIGNoYXJhY3Rl ciBzeW1ib2xzICovCi0jaW5jbHVkZSAiY2tjZGViLmgiICAgICAgICAgICAgICAgICAgICAgLyog RGVidWcgJiBvdGhlciBzeW1ib2xzICovCi0KLWNoYXIgKiBteW5hbWUgPSBOVUxMOyAgICAgICAg ICAgICAgICAgICAvKiBUaGUgbmFtZSBJIGFtIGNhbGxlZCBieSAqLwotI2lmbmRlZiBPUzIKLWNo YXIgKiBleGVkaXIgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAvKiBEaXJlY3RvcnkgSSB3YXMg ZXhlY3V0ZWQgZnJvbSAqLwotI2VuZGlmIC8qIE9TMiAqLwotY2hhciAqIG15aG9tZSA9IE5VTEw7 CQkJLyogSG9tZSBkaXJlY3Rvcnkgb3ZlcnJpZGUgKi8KLQotLyogIEMgSyBDIE0gQSBJICAtLSAg Qy1LZXJtaXQgTWFpbiBwcm9ncmFtICAqLwotCi0vKgotICBBdXRob3I6IEZyYW5rIGRhIENydXog KGZkY0Bjb2x1bWJpYS5lZHUpLAotICBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBjaXR5IG9m IE5ldyBZb3JrLAotICBDb21wdXRlciBDZW50ZXIgLyBDZW50ZXIgZm9yIENvbXB1dGluZyBBY3Rp dml0aWVzIC8gSW5mb3JtYXRpb24gVGVjaG5vbG9neS4KLSAgSSBhbSBubyBsb25nZXIgYXQgQ29s dW1iaWEgVSBhcyBvZiAxIEp1bHkgMjAxMSwgYnV0IHRoZSBlbWFpbCBhZGRyZXNzCi0gIHNob3Vs ZCBzdGlsbCB3b3JrLiAgVGhlIEtlcm1pdCB3ZWJzaXRlIGh0dHA6Ly9rZXJtaXQuY29sdW1iaWEu ZWR1IHNob3VsZAotICBzdGlsbCBiZSBhdmFpbGFibGUgYW5kIHVuZGVyIG15IGNvbnRyb2wsIGFz IHdlbGwgYXMgdGhlIEtlcm1pdCBGVFAgc2l0ZSwKLSAgZnRwOi8va2VybWl0LmNvbHVtYmlhLmVk dS9rZXJtaXQvLgotCi1DT1BZUklHSFQgTk9USUNFOgotKi8KLQotY2hhciAqY29weXJpZ2h0W10g PSB7Ci0KLSNpZmRlZiBwZHAxMQotIkNvcHlyaWdodCAoQykgMTk4NSwgJXMsIFRydXN0ZWVzIG9m IENvbHVtYmlhIFVuaXZlcnNpdHksIE5ZQy4iLAotIkFsbCByaWdodHMgcmVzZXJ2ZWQuIiwKLSIg IiwKLSNlbHNlCi0iQ29weXJpZ2h0IChDKSAxOTg1LCAlcywiLAotIiAgVGhlIFRydXN0ZWVzIG9m IENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuIiwKLSIgIEFsbCBy aWdodHMgcmVzZXJ2ZWQuIiwKLSIgIiwKLSJSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQiLAotIm1vZGlmaWNhdGlvbiwgYXJl IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyIsCi0iYXJl IG1ldDoiLAotIiAiLAotIiArIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IiwKLSIgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIiwKLSIgIiwKLSIgKyBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dCIsCi0iICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluIiwKLSIgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIiwKLSIgICBkaXN0cmlidXRpb24uIiwKLSIgIiwKLSIg KyBOZWl0aGVyIHRoZSBuYW1lIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBv ZiBpdHMiLAotIiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v dGUgcHJvZHVjdHMgZGVyaXZlZCIsCi0iICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiIsCi0iICIsCi0iVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyIsCi0i XCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO RywgQlVUIE5PVCIsCi0iTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIiwKLSJBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCIsCi0iSE9MREVSIE9S IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLCIsCi0iU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO Q0xVRElORywgQlVUIE5PVCIsCi0iTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIiwKLSJEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkiLAotIlRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks IE9SIFRPUlQiLAotIihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSIsCi0iT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4iLAotI2VuZGlmIC8qIHBk cDExICovCi0KLSNpZmRlZiBPUzIKLSJQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNSwg U2VjdXJlIEVuZHBvaW50cyBJbmMsIE5ldyBZb3JrIE5ZIFVTQS4iLAotIlBvcnRpb25zIENvcHly aWdodCAoQykgMTk5NSwgT3kgT25saW5lIFNvbHV0aW9ucyBMdGQuLCBKeXZhc2t5bGEsIEZpbmxh bmQuIiwKLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0iUG9y dGlvbnMgQ29weXJpZ2h0IChDKSAxOTkwLCBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNo bm9sb2d5LiIsCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotIlBvcnRpb25zIENvcHlyaWdodCAoQykg MTk5MSwgMTk5MyBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuIiwKLSJQ b3J0aW9ucyBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUgYnkgQVQm VC4iLAotIlBvcnRpb25zIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NywgRXJpYyBZb3VuZyA8ZWF5 QGNyeXB0b3NvZnQuY29tPi4iLAotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNpZmRlZiBD S19TUlAKLSJQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDE5OTcsIFN0YW5mb3JkIFVuaXZlcnNpdHku IiwKLSNlbmRpZiAvKiBDS19TUlAgKi8KLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwot Ci0jaWZuZGVmIHBkcDExCi0iICIsCi0iRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24sIHZpc2l0IHRo ZSBLZXJtaXQgUHJvamVjdCB3ZWJzaXRlOiIsCi0iaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0LyAuIiwKLSNlbmRpZiAvKiBwZHAxMSAqLwotIiJ9OwotCi0vKiBXaW5kb3dzIElLU0QgY29w eXJpZ2h0IHVzZWQgdG8gYmUgc2VwYXJhdGUgKi8KLWNoYXIgKndpa3NkY3ByID0gKGNoYXIgKikg Y29weXJpZ2h0OwotCi0KLS8qCi1ET0NVTUVOVEFUSU9OOgotCi0gIlVzaW5nIEMtS2VybWl0IiBi eSBGcmFuayBkYSBDcnV6IGFuZCBDaHJpc3RpbmUgTS4gR2lhbm9uZSwKLSAgRGlnaXRhbCBQcmVz cyAvIEJ1dHRlcndvcnRoLUhlaW5lbWFubiwgV29idXJuIE1BLCBVU0EuCi0gIFNlY29uZCBlZGl0 aW9uICgxOTk3KSwgSVNCTiAxLTU1NTU4LTE2NC0xLgotICBPcmRlciBmcm9tIERpZ2l0YWwgUHJl c3M6ICAgICsxICg4MDApIDM2Ni0yNjY1Ci0gIE9yIGZyb20gQ29sdW1iaWEgVW5pdmVyc2l0eTog KzEgKDIxMikgODU0LTM3MDMKLQotRm9yIEtlcm1pdCA5NSwgYWxzbzoKLQotICAiS2VybWl0IDk1 IiBieSBDaHJpc3RpbmUgTS4gR2lhbm9uZSBhbmQgRnJhbmsgZGEgQ3J1eiwKLSAgTWFubmluZyBQ dWJsaWNhdGlvbnMsIEdyZWVud2ljaCBDVCwgVVNBICgxOTk4KSAtIE9ubGluZS4KLQotQUNLTk9X TEVER01FTlRTOgotCi0gIFRoZSBLZXJtaXQgZmlsZSB0cmFuc2ZlciBwcm90b2NvbCB3YXMgZGV2 ZWxvcGVkIGF0IHRoZSBDb2x1bWJpYSBVbml2ZXJzaXR5Ci0gIENlbnRlciBmb3IgQ29tcHV0aW5n IEFjdGl2aXRpZXMgKENVQ0NBKSwgd2hpY2ggd2FzIHNpbmNlIHJlbmFtZWQgdG8gQ29sdW1iaWEK LSAgVW5pdmVyc2l0eSBBY2FkZW1pYyBJbmZvcm1hdGlvbiBTeXN0ZW1zIChBY0lTKSBhbmQgYWZ0 ZXIgdGhhdCBDb2x1bWJpYQotICBVbml2ZXJzaXR5IEluZm9ybWF0aW9uIFRlY2hub2xvZ3kgKENV SVQpLiAgS2VybWl0IGlzIG5hbWVkIGFmdGVyIEtlcm1pdCB0aGUKLSAgRnJvZywgc3RhciBvZiB0 aGUgdGVsZXZpc2lvbiBzZXJpZXMgVEhFIE1VUFBFVCBTSE9XOyB0aGUgbmFtZSBpcyB1c2VkIGJ5 Ci0gIHBlcm1pc3Npb24gb2YgSGVuc29uIEFzc29jaWF0ZXMsIEluYy4KLQotICBUaGFua3MgdG8g YXQgbGVhc3QgdGhlIGZvbGxvd2luZyBwZW9wbGUgZm9yIHRoZWlyIGNvbnRyaWJ1dGlvbnMgdG8g dGhpcwotICBwcm9ncmFtIG92ZXIgdGhlIHllYXJzLCBhbmQgYXBvbG9naWVzIHRvIGFueW9uZSB3 aG8gd2FzIGluYWR2ZXJ0YW50bHkKLSAgb21pdHRlZDoKLQotICAgQ2hyaXMgQWRpZSwgRWRpbmJ1 cmdoIFUsIFNjb3RsYW5kIChPUy8yKQotICAgUm9iZXJ0IEFkc2V0dCwgVW5pdmVyc2l0eSBvZiBX YXRlcmxvbywgQ2FuYWRhCi0gICBMYXJyeSBBZnJpbiwgQ2xlbXNvbiBVCi0gICBSdXNzIEFsbGJl cnksIFN0YW5mb3JkIFUKLSAgIEplZmZyZXkgQWx0bWFuLCBDb2x1bWJpYSBVbml2ZXJzaXR5Ci0g ICBHcmVnIEFuZHJld3MsIFRlbGViaXQgQ29ycAotICAgQmFycnkgQXJjaGVyLCBVIG9mIE1pc3Nv dXJpCi0gICBSb2JlcnQgQW5kZXJzc29uLCBJbnRlcm5hdGlvbmFsIFN5c3RlbXMgQS9TLCBPc2xv LCBOb3J3YXkKLSAgIENocmlzIEFybXN0cm9uZywgQnJvb2toYXZlbiBOYXRpb25hbCBMYWIgKE9T LzIpCi0gICBXaWxsaWFtIEJhZGVyLCBTb2Z0d2FyZSBDb25zdWx0aW5nIFNlcnZpY2VzLCBOYXph cmV0aCwgUEEKLSAgIEZ1YXQgQmFyYW4sIENvbHVtYmlhIFUKLSAgIFN0YW4gQmFyYmVyLCBSaWNl IFUKLSAgIEppbSBCYXJib3VyLCBVIG9mIENvbG9yYWRvCi0gICBEb25uIEJhdW1nYXJ0bmVyLCBE ZWxsCi0gICBJYW4gQmVja3dpdGgsIERlYmlhbiBQcm9qZWN0Ci0gICBOZWxzb24gQmVlYmUsIFUg b2YgVXRhaAotICAgR2VycnkgQmVsYW5nZXIsIENvZ25pdHJvbmljcwotICAgS2FybCBCZXJyeSwg VU1CCi0gICBNYXJrIEJlcnJ5bWFuLCBTQUlDCi0gICBEZWFuIFcgQmV0dGluZ2VyLCBTVU5ZCi0g ICBHYXJ5IEJpbGt1cwotICAgUGV0ZXIgQmluZGVydXAsIERlbm1hcmsKLSAgIERhdmlkIEJvbGVu LCBBZHZhbmNlZCBOZXR3b3JrcyBhbmQgU2VydmljZXMsIEluYy4KLSAgIEpvb3AgQm9uZW4KLSAg IE1hcmMgQm91Y2hlciwgVSBvZiBNb250cmVhbAotICAgQ2hhcmxlcyBCcm9va3MsIEVETgotICAg Qm9iIEJyb3duCi0gICBNaWtlIEJyb3duLCBQdXJkdWUgVQotICAgUm9iIEJyb3duCi0gICBKYWNr IEJyeWFucywgQ2FsaWZvcm5pYSBTdGF0ZSBVIGF0IExvbmcgQmVhY2gKLSAgIE1hcmsgQnVkYSwg REVDIChWTVMpCi0gICBGZXJuYW5kbyBDYWJyYWwsIFBhZHJhbyBpWCwgQnJhc2lsaWEKLSAgIEJq b3JuIENhcmxzc29uLCBTdG9ja2hvbG0gVW5pdmVyc2l0eSBDb21wdXRlciBDZW50cmUgUVosIFN3 ZWRlbgotICAgQmlsbCBDYXRjaGluZ3MsIChmb3JtZXJseSBvZikgQ29sdW1iaWEgVQotICAgQm9i IENhdHRhbmksIENvbHVtYmlhIFUgQ1MgRGVwdAotICAgRGF2aWRlIENlcnZvbmUsIFJvY2hlc3Rl ciBVCi0gICBTZXRoIENoYWlrbGluLCBEZW5tYXJrCi0gICBKb2huIENoYW5kbGVyLCBIYXJ2YXJk IFUgLyBTbWl0aHNvbmlhbiBBc3Ryb25vbWljYWwgT2JzZXJ2YXRvcnkKLSAgIEJlcm5hcmQgQ2hl biwgVUNMQQotICAgQW5kcmV3IEEgQ2hlcm5vdiwgUkVMQ09NIFRlYW0sIE1vc2NvdwotICAgSm9o biBMIENobWllbGV3c2tpLCBBVCZULCBMaXNsZSwgSUwKLSAgIEhvd2FyZCBDaHUsIFUgb2YgTWlj aGlnYW4KLSAgIEJpbGwgQ29hbHNvbiwgTWNEb25uZWxsIERvdWdsYXMKLSAgIEJlcnRpZSBDb29w ZXJzbWl0aCwgTG9uZG9uCi0gICBDaHJpc3RpYW4gQ29ydGkKLSAgIENoZXQgQ3JlaWRlciwgVSBv ZiBXZXN0ZXJuIE9udGFyaW8KLSAgIEFsYW4gQ3Jvc3N3ZWxsLCBDb2x1bWJpYSBVCi0gICBKZWZm IERhbWVucywgKGZvcm1lcmx5IG9mKSBDb2x1bWJpYSBVCi0gICBNYXJrIERhdmllcywgQmF0aCBV LCBVSwotICAgU2luLWl0aXJvdSBEZXphd2EsIEZ1amlmaWxtLCBKYXBhbgotICAgSm9lIFIuIERv dXBuaWssIFV0YWggU3RhdGUgVQotICAgRnJhbmsgRHJlYW5vLCBIb25leXdlbGwKLSAgIEpvaG4g RHVubGFwLCBVIG9mIFdhc2hpbmd0b24KLSAgIEFsZXggRHVwdXksIFNNQVJULkNPTQotICAgRGF2 aWQgRHljaywgSm9obiBGbHVrZSBNZmcgQ28uCi0gICBTdGVmYWFuIEEuIEVlY2tlbHMsIEV1cm9r b20sIEx1eGVtYm91cmcKLSAgIE5pY2sgRWZ0aHltaW91Ci0gICBQYXVsIEVnZ2VydCwgVHdpbiBT dW4sIEluYy4sIEVsIFNlZ3VuZG8sIENBCi0gICBCZXJuaWUgRWliZW4sIERFQwotICAgUGV0ZXIg RWljaGhvcm4sIEFzc3lzdCBJbnRlcm5hdGlvbmFsCi0gICBLcmlzdG9mZmVyIEVyaWtzc29uLCBQ ZXJpZG90IEtvbnN1bHQgQUIsIE9lcmVicm8sIFN3ZWRlbgotICAgSm9obiBSLiBFdmFucywgSVJT LCBLYW5zYXMgQ2l0eQotICAgR2xlbm4gRXZlcmhhcnQsIFJDQSBMYWJzCi0gICBDaGFybGllIEZp bmFuLCBDcmF5IFJlc2VhcmNoCi0gICBIZXJtIEZpc2NoZXIsIEVuY2lubywgQ0EgKGV4dGVuc2l2 ZSBjb250cmlidXRpb25zIHRvIHZlcnNpb24gNC4wKQotICAgQ2FybCBGb25naGVpc2VyLCBDV1JV Ci0gICBNaWtlIEZyZWVtYW4sIEJvbm5ldmlsbGUgUG93ZXIgQXV0aG9yaXR5Ci0gICBDYXJsIEZy aWVkYmVyZwotICAgTWFyY2VsbG8gRnJ1dGlnLCBDYXRob2xpYyBVbml2ZXJzaXR5LCBTYW8gUGF1 bG8sIEJyYXppbCAoWC4yNSBzdXBwb3J0KQotICAgSGlyb2Z1bWkgRnVqaWksIEphcGFuIE5hdCds IExhYiBmb3IgSGlnaCBFbmVyZ3kgUGh5c2ljcywgVG9reW8gKEthbmppKQotICAgQ2h1Y2sgRnVs bGVyLCBXZXN0aW5naG91c2UgQ29ycG9yYXRlIENvbXB1dGVyIFNlcnZpY2VzCi0gICBBbmR5IEZ5 ZmUsIENhbHRlY2gKLSAgIENocmlzdGluZSBNLiBHaWFub25lLCBDb2x1bWJpYSBVCi0gICBKb2hu IEdpbG1vcmUsIFVDIEJlcmtlbGV5Ci0gICBNYWRodXN1ZGFuIEdpeXlhcnB1cmFtLCBIUAotICAg UmFpbmVyIEdsYXNjaGljaywgU2llbWVucyBBRywgUGFkZXJib3JuCi0gICBXaWxsaWFtIEguIEds YXNzCi0gICBHZXJtYW4gR29sZHN6bWlkdCwgSUJNCi0gICBDaHVjayBHb29kaGFydCwgTkFTQQot ICAgQWxpc3RhaXIgR29ybWFuLCBOZXcgWmVhbGFuZAotICAgUmljaGFyZCBHcmF0aW9uLCBBREZB LCBBdXN0cmFsaWEKLSAgIENocmlzIEdyZWVuLCBFc3NleCBVLCBVSwotICAgQWxhbiBHcmllZywg RHVuZGVlIFRlY2gsIFNjb3RsYW5kCi0gICBZZWt0YSBHdXJzZWwsIE1JVAotICAgSmltIEd1eXRv biwgUmFuZCBDb3JwCi0gICBNaWNoYWVsIEhhZXJ0ZWwKLSAgIEJydW5vIEhhaWJsZQotICAgQm9i IEhhaW4sIFVNTgotICAgTWFyaW9uIEhha2Fuc29uLCBPUlNUCi0gICBSaWNoYXJkIEhhbWlsdG9u Ci0gICBKb2huIEhhbWlsc3RvbiwgSW93YSBTdGF0ZSBVCi0gICBTaW1vbiBIYW5pYSwgTmV0aGVy bGFuZHMKLSAgIFN0YW4gSGFua3MsIFJpY2UgVS4KLSAgIEtlbiBIYXJyZW5zdGVpbiwgU1JJCi0g ICBFdWdlbmlhIEhhcnJpcywgRGF0YSBHZW5lcmFsIChBT1MvVlMpCi0gICBEYXZpZCBIYXJyaXNv biwgS2luZ3N0b24gV2FycmVuIENvcnAKLSAgIEx1Y2FzIEhhcnQsIE9yZWdvbiBTdGF0ZSBVbml2 ZXJzaXR5Ci0gICBKYW1lcyBIYXJ2ZXksIEluZGlhbmEvUHVyZHVlIFUgKFZNUykKLSAgIFJvYiBI ZWFsZXkKLSAgIENodWNrIEhlZHJpY2ssIFJ1dGdlcnMgVQotICAgUm9uIEhlaWJ5LCBUZWNobmlj YWwgU3lzdGVtcyBEaXZpc2lvbiwgTW90b3JvbGEgQ29tcHV0ZXIgR3JvdXAKLSAgIFN0ZXZlIEhl bW1pbmdlciwgVGVrdHJvbml4Ci0gICBDaHJpc3RpYW4gSGVtc2luZywgUldUSCBBYWNoZW4sIEdl cm1hbnkgKE9TLTkpCi0gICBSYW5kb2xwaCBIZXJiZXIsIFVTIERPRSwKLSAgIEFuZHJldyBIZXJi ZXJ0LCBNb25hc2ggVW5pdiwgQXVzdHJhbGlhCi0gICBNYXJjdXMgSGVyYmVydCwgR2VybWFueQot ICAgTWlrZSBIaWNrZXksIElUSQotICAgRGFuIEhpbGRlYnJhbmQsIFFOWCBTb2Z0d2FyZSBTeXN0 ZW1zIEluYywgS2FuYXRhLCBPTiAoUU5YKQotICAgUiBFIEhpbGwKLSAgIFN0ZXBoYW4gSG9mZm1h bi1FbWRlbgotICAgU3ZlbiBIb2xtc3Ryb20sIEFCQiBVdGlsaXRpZXMgQUIsIFN3ZWRlbgotICAg QmlsbCBIb21lciwgQ3JheSBSZXNlYXJjaAotICAgUmF5IEh1bnRlciwgVGhlIFdvbGxvbmdvbmcg R3JvdXAKLSAgIFJhbmR5IEh1bnR6aWdlciwgTmF0aW9uYWwgTGlicmFyeSBvZiBNZWRpY2luZQot ICAgTGFycnkgSmFjb2JzLCBUcmFuc2FyYwotICAgU3RldmUgSmVua2lucywgTGFuY2FzdGVyIFVu aXZlcnNpdHksIFVLCi0gICBEYXZlIEpvaG5zb24sIEdyYWRpZW50IFRlY2hub2xvZ2llcwotICAg TWFyayBCIEpvaG5zb24sIEFwcGxlIENvbXB1dGVyCi0gICBKeWtlIEpva2luZW4sIFRhbXBlcmUg VW5pdmVyc2l0eSBvZiBUZWNobm9sb2d5LCBGaW5sYW5kIChRTlgpCi0gICBFcmljIEYgSm9uZXMs IEFUJlQKLSAgIEx1a2UgSm9uZXMsIEFUJlQKLSAgIFBldGVyIEpvbmVzLCBVIG9mIFF1ZWJlYyBN b250cmVhbAotICAgUGhpbCBKdWxpYW4sIFNBUyBJbnN0aXR1dGUKLSAgIFBldGVyIEthYmFsLCBV IG9mIFF1ZWJlYwotICAgTWljIEthY3ptYXJjemlrLCBVIG9mIFRleGFzIGF0IEF1c3RpbgotICAg U2VyZ2V5IEthcnRhc2hvZmYsIEluc3QuIG9mIFByZWNpc2UgTWVjaGFuaWNzICYgQ29tcHV0ZXIg RXF1aXBtZW50LCBNb3Njb3cKLSAgIEhvd2llIEtheWUsIENvbHVtYmlhIFUKLSAgIFJvYiBLZWRv aW4sIExpbm90eXBlIENvLCBIYXVwcGF1Z2UsIE5ZIChPUy8yKQotICAgUGhpbCBLZWVnc3RyYQot ICAgTWFyayBLZW5uZWR5LCBJQk0KLSAgIFRlcnJ5IEtlbm5lZHksIFN0IFBldGVyJ3MgQ29sbGVn ZSwgSmVyc2V5IENpdHksIE5KIChWTVMgYW5kIG1vcmUpCi0gICAiQ2FybG8gS2lkIiwgVGVjaG5p Y2FsIFVuaXZlcnNpdHkgb2YgRGVsZnQsIE5ldGhlcmxhbmRzCi0gICBUaW0gS2llbnR6bGUKLSAg IFBhdWwgS2ltb3RvLCBDb3JuZWxsIFUKLSAgIERvdWdsYXMgS2luZ3N0b24sIG1vcmdhbi5jb20K LSAgIExhd3JlbmNlIEtpcmJ5LCBXaWx0c2hpcmUsIFVLCi0gICBUb20gS2xvb3MsIFNlcXVlbnQg Q29tcHV0ZXIgU3lzdGVtcwotICAgR3VlbnRlciBLbmF1ZgotICAgSmltIEtudXRzb24sIFUgb2Yg VGV4YXMgYXQgQXVzdGluCi0gICBKb2huIFQuIEtvaGwgKEJTREkpCi0gICBTY290dCBLcmFtZXIs IFNSSSBJbnRlcm5hdGlvbmFsLCBNZW5sbyBQYXJrLCBDQQotICAgSm9obiBLcmF5bmFjaywgVVMg UG9zdGFsIFNlcnZpY2UKLSAgIERhdmlkIEtyaWNrZXIsIEVuY29yZSBDb21wdXRlcgotICAgVGhv bWFzIEtydWVnZXIsIFVXTQotICAgQm8gS3VsbG1hciwgQUJDIEtsdWJiZW4sIFN0b2NraG9sbSwg YW5kIENlbnRyYWwgQmFuayBvZiBTd2VkZW4sIEtpc3RhCi0gICBSLiBCcmFkIEt1bW1lciwgQVQm VCBCZWxsIExhYnMsIEF0bGFudGEsIEdBCi0gICBKb2huIEt1bnplLCBVQyBCZXJrZWxleQotICAg RGF2aWQgTGFuZSwgQlNTSSAvIEJlbGxTb3V0aCAoU3RyYXR1cyBWT1MsIFguMjUpCi0gICBCb2Ig TGFyc29uLCBVU0MgKE9TLTkpCi0gICBCZXJ0IExhdmVybWFuLCBHcm9uaW5nZW4gVSwgTmV0aGVy bGFuZHMKLSAgIFN0ZXZlIExheXRvbgotICAgRGF2aWQgTGF3eWVyLCBVQyBJcnZpbmUKLSAgIEph c29uIExlaHIKLSAgIERhdmlkIExlVmluZSwgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBDb3Jwb3Jh dGlvbgotICAgRGFuaWVsIFMuIExld2FydCwgVUlVQwotICAgUy5PLiBMaWRpZSwgTGVoaWdoIFUK LSAgIFRvciBMaWxscXZpc3QsIEhlbHNpbmtpIFUsIEZpbmxhbmQKLSAgIERhdmlkLU1pY2hhZWwg TGluY2tlLCBVIG9mIFN0IEdhbGxlbiwgU3dpdHplcmxhbmQKLSAgIFJvYmVydCBMaXBlIChmb3Ig U0NPIG1ha2VmaWxlIGVudHJpZXMgJiBhZHZpY2UpCi0gICBEZWFuIExvbmcKLSAgIE1pa2UgTG9u ZywgQW5hbG9nIERldmljZXMsIE5vcndvb2QgTUEKLSAgIEtldmluIExvd2V5LCBVIG9mIFNhc2th dGNoZXdhbiAoT1MvMikKLSAgIEFuZHkgTG93cnksIENvbHVtYmlhIFUKLSAgIEphbWVzIEx1bW1l bCwgQ2FwcmljYSBUZWxlY29tcHV0aW5nIFJlc291cmNlcyAoUU5YKQotICAgTGV3aXMgTWNDYXJ0 aHkKLSAgIERhdmlkIE1hY0tlbnppZSwgRW52aXJvbm1lbnRhbCBEZWZlbnNlIEZ1bmQsIFUgb2Yg TWFyeWxhbmQKLSAgIEpvaG4gTWFja2luLCBVbml2ZXJzaXR5IG9mIFNpZG5leSwgQXVzdHJhbGlh Ci0gICBNYXJ0aW4gTWFjbGFyZW4sIEJhdGggVSwgVUsKLSAgIENocmlzIE1haW8sIENvbHVtYmlh IFUgQ1MgRGVwdAotICAgTW9udHNlcnJhdCBNYW5lLCBIUCwgR3Jlbm9ibGUsIEZyYW5jZQotICAg RnVsdmlvIE1hcmlubywgT2xpdmV0dGksIEl2cmVhLCBJdGFseQotICAgQXJ0aHVyIE1hcnNoLCBk aXJjc2Eub3JnLmF1Ci0gICBQZXRlciBNYXV6ZXksIEx1Y2VudCBUZWNobm9sb2dpZXMKLSAgIFR5 ZSBNY1F1ZWVuLCBVdGFoIFN0YXRlIFUKLSAgIFRlZCBNZWRpbgotICAgSGVsbG11dGggTWljaGFl bGlzLCBIYW5zZWF0aXNjaGVyIENvbXB1dGVyc2VydmljZSBHbWJILCBIYW1idXJnLCBHZXJtYW55 Ci0gICBMZXNsaWUgTWlrZXNlbGwsIEFtZXJpY2FuIEZhcm0gQnVyZWF1Ci0gICBUb2RkIE1pbGxl ciwgQ291cnRlc2FuIENvbnN1bHRpbmcKLSAgIEdhcnkgTWlsbHMKLSAgIE1hcnRpbiBNaW5vdywg REVDIChWTVMpCi0gICBQYXdhbiBNaXNyYSwgQmVsbGNvcmUKLSAgIEtlbiBNaXppYWxrbywgSUJN LCBNYW5hc3NhcywgVkEKLSAgIFdvbGZnYW5nIE1vZWxsZXIsIERFQ1VTIEdlcm1hbnkKLSAgIFJh eSBNb29keSwgUHVyZHVlIFUKLSAgIEJydWNlIEogTW9vcmUsIEFsbGVuLUJyYWRsZXkgQ28sIEhp Z2hsYW5kIEhlaWdodHMsIE9IIChBdGFyaSBTVCkKLSAgIFN0ZXZlIE1vcmxleSwgQ29udmV4Ci0g ICBQZXRlciBNb3NzZWwsIENvbHVtYmlhIFUKLSAgIFRvbnkgTW92c2hvbiwgTllVCi0gICBMb3Ug TXVjY2lvbGksIFN3YW5zb24gQW5hbHlzaXMgU3lzdGVtcwotICAgRGFuIE11cnBoeQotICAgTmVh bCBQLiBNdXJwaHksIEhhcnNvZiBTeXN0ZW1zLCBXb25kZXIgTGFrZSBJTAotICAgR2FyeSBNdXNz YXIKLSAgIEpvaG4gTmFsbCwgRlNVCi0gICBKYWNrIE5lbHNvbiwgVSBvZiBQaXR0c2J1cmdoCi0g ICBKaW0gTm9ibGUsIFBsYW5uaW5nIFJlc2VhcmNoIENvcnBvcmF0aW9uIChNYWNpbnRvc2gpCi0g ICBJYW4gTydCcmllbiwgQmF0aCBVLCBVSwotICAgTWVsaXNzYSBPJ05laWxsLCBTRlUKLSAgIEpv aG4gT3dlbnMKLSAgIFRob21hcyBQaW5rbCwgSGVhbHRoIEJ1c2luZXNzIFN5c3RlbXMgSW5jLgot ICAgTWljaGFlbCBQaW5zLCBJb3dhIENvbXB1dGVyIEFpZGVkIEVuZ2luZWVyaW5nIE5ldHdvcmsK LSAgIEFuZHJlJyBQaXJhcmQsIFVuaXZlcnNpdHkgb2YgTGllZ2UsIEJlbGdpdW0KLSAgIFBhdWwg UGxhY2V3YXksIE9oaW8gU3RhdGUgVQotICAgUGlldCBXLiBQbG9tcCwgSUNDRSwgR3JvbmluZ2Vu IFVuaXZlcnNpdHksIE5ldGhlcmxhbmRzCi0gICBLZW4gUG91bHRvbiwgSFAgTGFicwotICAgTWFu ZnJlZCBQcmFuZ2UsIE9ha2xhbmQgVQotICAgQ2hyaXN0b3BoZXIgUHJhdHQsIEFQViBCYWtlciwg VUsKLSAgIEZyYW5rIFByaW5kbGUsIE5BREMKLSAgIFRvbnkgUXVlcnViaW4sIFUgb2YgSGF3YWlp Ci0gICBKZWFuLVBpZXJyZSBSYWRsZXkKLSAgIEFudG9uIFJhbmcKLSAgIE1pa2UgUmVjaHRtYW4K LSAgIFNjb3R0IFJpYmUKLSAgIEFsYW4gUm9iaWV0dGUsIE94Zm9yZCBVbml2ZXJzaXR5LCBVSwot ICAgTWljaGVsIFJvYml0YWlsbGUsIFUgb2YgTW9udHJlYWwgKE1hYykKLSAgIEh1dyBSb2dlcnMs IFNjaHdlaXplcmlzY2hlIEtyZWRpdGFuc3RhbHQsIFp1ZXJpY2gKLSAgIE5pZ2VsIFJvbGVzLCBD YW1icmlkZ2UsIEVuZ2xhbmQKLSAgIEthaSBVd2UgUm9tbWVsLCBUZWNobmlzY2hlIFVuaXZlcnNp dGFldCBNdWVuY2hlbiAoT1MvMikKLSAgIExhcnJ5IFJvc2VubWFuIChBbWlnYSkKLSAgIEpheSBS b3VtYW4sIFUgb2YgTWljaGlnYW4KLSAgIEphY2sgUm91c2UsIFNBUyBJbnN0aXR1dGUgKERhdGEg R2VuZXJhbCBhbmQvb3IgQXBvbGxvKQotICAgU3RldyBSdWJlbnN0ZWluLCBIYXJ2YXJkIFUgKFZN UykKLSAgIEdlcmhhcmQgUnVlY2tsZSwgRkggRGFybXN0YWR0LCBGYi4gRS9BdXRvbWF0aXNpZXJ1 bmdzdGVjaG5pawotICAgSm9obiBTYW50b3MsIEVHJkgKLSAgIEJpbGwgU2NoaWxpdCwgQ29sdW1i aWEgVQotICAgVWxsaSBTY2hsdWV0ZXIsIFJXVEggQWFjaGVuLCBHZXJtYW55IChPUy05LCBldGMp Ci0gICBNaWNoYWVsIFNjaG1pZHQsIFUgb2YgUGFkZXJib3JuLCBHZXJtYW55Ci0gICBFcmljIFNj aG5vZWJlbGVuLCBDb252ZXgKLSAgIEJlbm4gU2NocmVpYmVyLCBERUMKLSAgIERhbiBTY2h1bGxt YW4sIERFQyAobW9kZW1zLCBESUFMIGNvbW1hbmQsIGV0YykKLSAgIEpvaG4gU2NodWx0eiwgM00K LSAgIFN0ZXZlbiBTY2h1bHR6LCBDb250ZWwgKFBEUC0xMSkKLSAgIFN0ZXZlbiBTY2h3ZWRhCi0g ICBBUFBQIFNjb3JlciwgTGVlZHMgUG9seXRlY2huaWMsIFVLCi0gICBHb3Jkb24gU2NvdHQsIE1p Y3JvIEZvY3VzLCBOZXdidXJ5IFVLCi0gICBHaXNiZXJ0IFcuIFNlbGtlLCBXSWRPLCBCb25uLCBH ZXJtYW55Ci0gICBLaWphbCBTaGFoCi0gICBEYXZpZCBTaW5nZXIsIElCTSBBbG1hZGVuIFJlc2Vh cmNoIExhYnMKLSAgIERhdmlkIFNpemVsYW5kLCBVIG9mIExvbmRvbiBNZWRpY2FsIFNjaG9vbAot ICAgRnJpZHJpayBTa3VsYXNvbiwgSWNlbGFuZAotICAgUmljayBTbGFka2V5IChMaW51eCkKLSAg IERhdmUgU2xhdGUKLSAgIEJyYWRsZXkgU21pdGgsIFVDTEEKLSAgIEZyZWQgU21pdGgsIE1lcmsg LyBDb21wdXRyaXRpb24KLSAgIFJpY2hhcmQgUyBTbWl0aCwgQ2FsIFN0YXRlCi0gICBSeWFuIFN0 YW5pc2ZlciwgVU5UCi0gICBCZXJ0aWwgU3RlbnN0cm9lbSwgU3RvY2tob2xtIFVuaXZlcnNpdHkg Q29tcHV0ZXIgQ2VudHJlIChRWiksIFN3ZWRlbgotICAgSmFtZXMgU3R1cmRldmFudCwgQ0FQIEdF TUVOSSBBTUVSSUNBLCBNaW5uZWFwb2xpcwotICAgUGV0ZXIgU3ZhbmJlcmcsIFJveWFsIFRlY2hu LiBIUywgU3dlZGVuCi0gICBKYW1lcyBSLiBTd2Vuc29uLCBBY2N1LVdlYXRoZXIsIEluYy4KLSAg IFRlZCBUJ3NvLCBNSVQgKExpbnV4KQotICAgQW5keSBUYW5lbmJhdW0sIFZyaWplIFUsIEFtc3Rl cmRhbSwgTmV0aGVybGFuZHMKLSAgIFNldGggVGhlcmlhdWx0LCBDb2x1bWJpYSBVCi0gICBHbGVu IFRob2JlCi0gICBNYXJra3UgVG9pamFsYSwgSGVsc2lua2kgVSBvZiBUZWNobm9sb2d5Ci0gICBU ZWVtdSBUb3JtYSwgSGVsc2lua2kgVSBvZiBUZWNobm9sb2d5Ci0gICBMaW51cyBUb3J2YWxkcywg SGVsc2lua2kKLSAgIFJpY2sgVHJveGVsLCBOSUgKLSAgIFdhcnJlbiBUdWNrZXIsIFRyaWRvbSBD b3JwLCBNb3VudGFpbiBQYXJrLCBHQQotICAgRGF2ZSBUd2V0ZW4sIEFNRVMtTkFTCi0gICBHIFVk ZGVib3JnLCBTd2VkZW4KLSAgIFdhbHRlciBVbmRlcndvb2QsIEZvcmQgQWVyb3NwYWNlCi0gICBQ aWV0ZXIgVmFuIERlciBMaW5kZW4sIENlbnRyZSBNb25kaWFsLCBQYXJpcwotICAgR2UgdmFuIEdl bGRvcnAsIE5ldGhlcmxhbmRzCi0gICBGcmVkIHZhbiBLZW1wZW4sIE1JTklYIFVzZXIgR3JvdXAs IFZvb3Job3V0LCBOZXRoZXJsYW5kcwotICAgV2F5bmUgVmFuIFBlbHQsIEdFL0NSRAotICAgTWFy ayBWYXNvbGwsIE9rbGFob21hIFN0YXRlIFUgKFY3IFVOSVgpCi0gICBLb25zdGFudGluIFZpbm9n cmFkb3YsIElDU1RJLCBNb3Njb3cKLSAgIFBhdWwgVml4aWUsIERFQwotICAgQmVybmllIFZvbHos IFByb2Nlc3MgU29mdHdhcmUKLSAgIEVkdWFyZCBWb3BpY2thLCBQcmFndWUgVW5pdmVyc2l0eSBv ZiBFY29ub21pY3MsIEN6ZWNoIFJlcHVibGljCi0gICBNYXJ0aW4gVm9ybGFlbmRlcgotICAgRGlt aXRyaSBWdWxpcywgQ1VOWQotICAgUm9nZXIgV2FsbGFjZSwgUmF5dGhlb24KLSAgIFN0ZXBoZW4g V2FsdG9uLCBDYWxpZiBTdGF0ZSBVLCBOb3J0aHJpZGdlIChBbWlnYSkKLSAgIEphbWllIFdhdHNv biwgQWRhc29mdCwgU3dpdHplcmxhbmQgKEFJWCkKLSAgIFJpY2sgV2F0c29uLCBVIG9mIFRleGFz IChNYWNpbnRvc2gpCi0gICBFcmljIFdlYXZlciwgQ29sdW1iaWEgVQotICAgU2NvdHQgV2Vpa2Fy dCAoQXNzb2NpYXRpb24gZm9yIFByb2dyZXNzaXZlIENvbW11bmljYXRpb25zKQotICAgUm9iZXJ0 IFdlaW5lciwgUHJvZ3JhbW1pbmcgUGx1cywgTmV3IFlvcmsgQ2l0eQotICAgTGF1cmVuIFdlaW5z dGVpbiwgVm9ydGV4IFRlY2hubG9neQotICAgRGF2aWQgV2V4ZWxibGF0LCBBVCZUCi0gICBDbGFy ayBXaWVyZGEsIElsbHVtaW5hdGkgT25saW5lCi0gICBKb2FjaGltIFdpZXNlbCwgVSBvZiBLYXJs c3J1aGUKLSAgIExvbiBXaWxsZXR0LCBVIG9mIFV0YWgKLSAgIE1pY2hhZWwgV2lsbGlhbXMsIFVD TEEKLSAgIE5hdGUgV2lsbGlhbXMsIFUgb2YgTW9udGFuYQotICAgRGF2aWQgV2lsc29uCi0gICBK b2VsbGVuIFdpbmRzb3IsIFUgb2YgQXJpem9uYQotICAgUGF0cmljayBXb2xmZSwgS3VjayAmIEFz c29jaWF0ZXMsIEluYy4KLSAgIEdyZWdnIFdvbmRlcmx5LCBPa2xhaG9tYSBTdGF0ZSBVIChWNyBV TklYKQotICAgRmFycmVsbCBXb29kcywgQ29uY3VycmVudCAoZm9ybWVybHkgTWFzc2NvbXApCi0g ICBEYXZlIFdvb2xsZXksIENBUCBDb21tdW5pY2F0aW9uIFN5c3RlbXMsIExvbmRvbgotICAgSmFj ayBXb29sbGV5LCBTQ1QgQ29ycAotICAgRnJhbmsgV29ydG5lcgotICAgS2VuIFlhcCwgZm9ybWVy bHkgb2YgVSBvZiBSb2NoZXN0ZXIKLSAgIEpvaG4gWmVlZmYsIEFubiBBcmJvciwgTUkKLSovCi0K LSNpbmNsdWRlICJja2NrZXIuaCIgICAgICAgICAgICAgICAgICAgICAvKiBLZXJtaXQgc3ltYm9s cyAqLwotI2luY2x1ZGUgImNrY25ldC5oIiAgICAgICAgICAgICAgICAgICAgIC8qIE5ldHdvcmsg c3ltYm9scyAqLwotCi0jaWZkZWYgQ0tfU1NMCi0jaW5jbHVkZSAiY2tfc3NsLmgiCi0jZW5kaWYg LyogQ0tfU1NMICovCi0KLSNpZm5kZWYgTk9TUEwKLSNpbmNsdWRlICJja3V1c3IuaCIKLSNlbmRp ZiAvKiBOT1NQTCAqLwotCi0jaWZkZWYgT1MyT05MWQotI2RlZmluZSBJTkNMX1ZJTyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIE5lZWRlZCBmb3IgY2tvY29uLmggKi8KLSNpbmNsdWRlIDxvczIu aD4KLSN1bmRlZiBDT01NRU5UCi0jZW5kaWYgLyogT1MyT05MWSAqLwotCi0jaWZkZWYgTlQKLSNp bmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8dGFwaS5oPgotI2luY2x1ZGUgImNrbnRhcC5o IgotI2VuZGlmIC8qIE5UICovCi0KLSNpZm5kZWYgTk9TRVJWRVIKLS8qIFRleHQgbWVzc2FnZSBk ZWZpbml0aW9ucy4uIGVhY2ggc2hvdWxkIGJlIDI1NiBjaGFycyBsb25nLCBvciBsZXNzLiAqLwot I2lmZGVmIE1JTklYCi1jaGFyICpzcnZ0eHQgPSAiXHJcblwKLUVudGVyaW5nIHNlcnZlciBtb2Rl LlxyXG5cMCI7Ci0jZWxzZQotI2lmZGVmIE9MRE1TRwotLyoKLSAgSXQgc2VlbXMgdGhlcmUgd2Fz IGEgbGFyZ2UgaW5zdGFsbGF0aW9uIHRoYXQgd2FzIHVzaW5nIEMtS2VybWl0IDVBKDE2NSkKLSAg b3IgdGhlcmVhYm91dHMsIHdoaWNoIGhhZCBkZXBsb3llZCB0aG91c2FuZHMgb2YgTVMtRE9TIEtl cm1pdCBzY3JpcHRzIGluCi0gIHNjYXR0ZXJlZCBsb2NhdGlvbnMgdGhhdCBsb29rZWQgZm9yIHN0 cmluZ3MgaW4gdGhlIG9sZCBzZXJ2ZXIgbWVzc2FnZSwKLSAgd2hpY2ggY2hhbmdlZCBpbiA1QSgx ODMpLCBBdWd1c3QgMTk5Mi4KLSovCi1jaGFyICpzcnZ0eHQgPSAiXHJcblwKLUMtS2VybWl0IHNl cnZlciBzdGFydGluZy4gIFJldHVybiB0byB5b3VyIGxvY2FsIG1hY2hpbmUgYnkgdHlwaW5nXHJc blwKLWl0cyBlc2NhcGUgc2VxdWVuY2UgZm9yIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24sIGFuZCBp c3N1ZSBmdXJ0aGVyXHJcblwKLWNvbW1hbmRzIGZyb20gdGhlcmUuICBUbyBzaHV0IGRvd24gdGhl IEMtS2VybWl0IHNlcnZlciwgaXNzdWUgdGhlXHJcblwKLUZJTklTSCBvciBCWUUgY29tbWFuZCBh bmQgdGhlbiByZWNvbm5lY3QuXG5cCi1cclxuXDAiOwotI2Vsc2UKLSNpZmRlZiBPU0sKLWNoYXIg KnNydnR4dCA9ICJcclwwMTJcCi1FbnRlcmluZyBzZXJ2ZXIgbW9kZS4gIElmIHlvdXIgbG9jYWwg S2VybWl0IHNvZnR3YXJlIGlzIG1lbnUgZHJpdmVuLCB1c2VcclwwMTJcCi10aGUgbWVudXMgdG8g c2VuZCBjb21tYW5kcyB0byB0aGUgc2VydmVyLiAgT3RoZXJ3aXNlLCBlbnRlciB0aGUgZXNjYXBl XHJcMDEyXAotc2VxdWVuY2UgdG8gcmV0dXJuIHRvIHlvdXIgbG9jYWwgS2VybWl0IHByb21wdCBh bmQgaXNzdWUgY29tbWFuZHMgZnJvbVxyXDAxMlwKLXRoZXJlLiBVc2UgU0VORCBhbmQgR0VUIGZv ciBmaWxlIHRyYW5zZmVyLiBVc2UgUkVNT1RFIEhFTFAgZm9yIGEgbGlzdCBvZlxyXDAxMlwKLW90 aGVyIGF2YWlsYWJsZSBzZXJ2aWNlcy4gIFVzZSBCWUUgb3IgRklOSVNIIHRvIGVuZCBzZXJ2ZXIg bW9kZS5cclwwMTJcMCI7Ci0jZWxzZSAvKiBVTklYLCBWTVMsIEFPUy9WUywgYW5kIGFsbCBvdGhl cnMgKi8KLWNoYXIgKnNydnR4dCA9ICJcclxuXAotRW50ZXJpbmcgc2VydmVyIG1vZGUuICBJZiB5 b3VyIGxvY2FsIEtlcm1pdCBzb2Z0d2FyZSBpcyBtZW51IGRyaXZlbiwgdXNlXHJcblwKLXRoZSBt ZW51cyB0byBzZW5kIGNvbW1hbmRzIHRvIHRoZSBzZXJ2ZXIuICBPdGhlcndpc2UsIGVudGVyIHRo ZSBlc2NhcGVcclxuXAotc2VxdWVuY2UgdG8gcmV0dXJuIHRvIHlvdXIgbG9jYWwgS2VybWl0IHBy b21wdCBhbmQgaXNzdWUgY29tbWFuZHMgZnJvbVxyXG5cCi10aGVyZS4gIFVzZSBTRU5EIGFuZCBH RVQgZm9yIGZpbGUgdHJhbnNmZXIuICBVc2UgUkVNT1RFIEhFTFAgZm9yIGEgbGlzdCBvZlxyXG5c Ci1vdGhlciBhdmFpbGFibGUgc2VydmljZXMuICBVc2UgQllFIG9yIEZJTklTSCB0byBlbmQgc2Vy dmVyIG1vZGUuXHJcblwwIjsKLSNlbmRpZiAvKiBPU0sgKi8KLSNlbmRpZiAvKiBPTERNU0cgKi8K LSNlbmRpZiAvKiBNSU5JWCAqLwotI2Vsc2UgIC8qIHNlcnZlciBtb2RlIGRpc2FibGVkICovCi1j aGFyICpzcnZ0eHQgPSAiIjsKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotCi1pbnQgaW5pdGZsZyA9 IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogc3lzaW5pdCgpIGhhcyBleGVjdXRlZC4uLiAq LwotaW50IGhvd2NhbGxlZCA9IElfQU1fS0VSTUlUOyAgICAgICAgICAgIC8qIEhvdyBJIHdhcyBj YWxsZWQgKi8KLWludCBobXRvcGxpbmUgPSAwOwotaW50IHF1aXR0aW5nID0gMDsJCQkvKiBJJ20g aW4gdGhlIGFjdCBvZiBxdWl0dGluZyAqLwotCi0jaWZkZWYgSUtTRENPTkYKLWNoYXIgKiBpa3Nk Y29uZiA9IElLU0RDT05GOyAgICAgICAgICAgICAvKiBJS1NEIGNvbmZpZ3VyYXRpb24gZmlsZSAq LwotaW50ICAgIGlrc2RjZiAgID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIEhhcyBJS1NEIGMu Zi4gYmVlbiBwcm9jZXNzZWQ/ICovCi0jZW5kaWYgLyogSUtTRENPTkYgKi8KLQotaW50IHNydmNk bXNnID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFtTZXJ2ZXJdIENEIG1lc3NhZ2UgKi8K LWNoYXIgKiBjZG1zZ2ZpbGVbOF0gPSB7IE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5V TEwsTlVMTCB9OwotY2hhciAqIGNkbXNnc3RyID0gTlVMTDsKLWNoYXIgKiBja2NkcGF0aCA9IE5V TEw7Ci0KLSNpZmRlZiBOTENIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXh0LWZp bGUgbGluZSB0ZXJtaW5hdG9yICovCi1DSEFSIGZlb2wgPSBOTENIQVI7Ci0jZWxzZQotQ0hBUiBm ZW9sID0gMDsKLSNlbmRpZiAvKiBOTENIQVIgKi8KLQotaW50IGZibGtzaXogPSBEQkxLU0laOyAg ICAgICAgICAvKiBGaWxlIGJsb2Nrc2l6ZSAqLwotaW50IGZyZWNsID0gRExSRUNMOyAgICAgICAg ICAgICAvKiBGaWxlIHJlY29yZCBsZW5ndGggKi8KLWludCBmcmVjZm0gPSBYWUZGX1M7ICAgICAg ICAgICAgLyogRmlsZSByZWNvcmQgZm9ybWF0IChkZWZhdWx0ID0gc3RyZWFtKSAqLwotaW50IGZv cmcgPSBYWUZPX1M7ICAgICAgICAgICAgICAvKiBGaWxlIG9yZ2FuaXphdGlvbiAoc2VxdWVudGlh bCkgKi8KLWludCBmY2N0cmwgPSBYWUZQX047ICAgICAgICAgICAgLyogRmlsZSBjYXJyaWFnZSBj b250cm9sIChjdHJsIGNoYXJzKSAqLwotaW50IGZpbGVjYXNlID0gRklMRUNBU0U7ICAgICAgICAv KiBDYXNlIG1hdHRlcnMgaW4gZmlsZW5hbWVzICovCi1pbnQgc3RhdGhhY2sgPSAxOyAgICAgICAg ICAgICAgIC8qIEZhc3QgZGlyZWN0b3J5IGxvb2t1cHMgYnkgZGVmYXVsdCAqLwotCi1jaGFyIHVp ZGJ1ZltVSURCVUZMRU5dID0geyBOVUwsIE5VTCB9OyAgLyogVXNlciBJRCBidWZmZXIgKi8KLWlu dCBjZmlsZWYgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBcHBsaWNhdGlvbiAoImtl cmJhbmciKSBmaWxlIGZsYWcgKi8KLWNoYXIgY21kZmlsW0NLTUFYUEFUSCArIDFdID0geyBOVUws IE5VTCB9OyAvKiBBcHBsaWNhdGlvbiBmaWxlIG5hbWUgKi8KLWludCBoYXZldXJsID0gMDsgICAg ICAgICAgICAgICAgICAgICAgICAvKiBVUkwgZ2l2ZW4gb24gY29tbWFuZCBsaW5lICovCi0KLSNp Zm5kZWYgTk9YRkVSCi0vKiBNdWx0aS1wcm90b2NvbCBzdXBwb3J0ICovCi0KLXN0cnVjdCBja19w IHB0YWJbTlBST1RPU10gPSB7ICAgICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBLZXJtaXQgcGFy dCAuLi4gKi8KLSAgeyAiS2VybWl0IiwKLSAgICBEUlBTSVosICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBSZWNlaXZlIHBhY2tldCBzaXplICovCi0gICAgRFNQU0laLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogU2VuZCBwYWNrZXQgc2l6ZSAqLwotICAgIDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQtcGFja2V0LXNpemUtc2V0IGZsYWcgKi8K LSAgICBERldTSVosICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXaW5kb3cgc2l6ZSAq LwotCi0jaWZkZWYgTkVXREVGQVVMVFMKLSAgICBQWF9DQVUsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBDb250cm9sIGNoYXIgdW5wcmVmaXhpbmcuLi4gKi8KLSNlbHNlCi0gICAgUFhf QUxMLAotI2VuZGlmIC8qIE5FV0RFRkFVTFRTICovCi0KLSNpZmRlZiBWTVMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IGZpbGVuYW1lIGNvbGxpc2lvbiBhY3Rpb24gKi8K LSAgICBYWUZYX1gsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSRVBMQUNFIGZvciBW QVgvVk1TICovCi0jZWxzZQotICAgIFhZRlhfQiwgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEJBQ0tVUCBmb3IgZXZlcnlib2R5IGVsc2UgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQotI2lm ZGVmIE9TMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIGZpbGUgbmFt ZSBjb252ZXJzaW9uICovCi0gICAgWFlGTl9MLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogTGl0ZXJhbCBmb3IgT1MyICovCi0jZWxzZQotICAgIFhZRk5fQywgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIENvbnZlcnRlZCBmb3Igb3RoZXJzICovCi0jZW5kaWYgLyogT1MyICov Ci0KLSAgICBQQVRIX09GRiwgICAgICAgICAgICAgICAgICAgLyogU2VuZCBwYXRobmFtZXMgT0ZG ICovCi0gICAgUEFUSF9BVVRPLCAgICAgICAgICAgICAgICAgIC8qIFJlY2VpdmUgcGF0aG5hbWVz IEFVVE8gKi8KLSAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgLyogSG9zdCByZWNlaXZl IGluaXRpYXRpb24gc3RyaW5nIChiaW5hcnkpICovCi0gICAgTlVMTCwgICAgICAgICAgICAgICAg ICAgICAgIC8qIEhvc3QgcmVjZWl2ZSBpbml0aWF0aW9uIHN0cmluZyAodGV4dCkgICAqLwotICAg IE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAvKiBIb3N0IHNlcnZlciBzdHJpbmcgKi8KLSAg ICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgLyogRXh0ZXJuYWwgcHJvdG9jb2wgc2VuZCBj b21tYW5kIChiaW5hcnkpICovCi0gICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgIC8qIEV4 dGVybmFsIHByb3RvY29sIHNlbmQgY29tbWFuZCAodGV4dCkgICAqLwotICAgIE5VTEwsICAgICAg ICAgICAgICAgICAgICAgICAvKiBFeHRlcm5hbCBwcm90b2NvbCByZWNlaXZlIGNvbW1hbmQgKGJp bikgKi8KLSAgICBOVUxMIH0gICAgICAgICAgICAgICAgICAgICAgLyogRXh0ZXJuYWwgcHJvdG9j b2wgcmVjZWl2ZSBjb21tYW5kICh0eHQpICovCi0jaWZkZWYgQ0tfWFlaCi0sCi17IlhNT0RFTSIs ICAgIDEyOCwxMjgsLTEsLTEsICAgMSwtMSwtMSwwLDAsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxM LE5VTEwsTlVMTH0sCi17IlhNT0RFTS1DUkMiLDEyOCwxMjgsLTEsLTEsICAtMSwtMSwtMSwwLDAs TlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTH0sCi17IllNT0RFTSIsICAgLTEsIC0x LC0xLC0xLCAgICAtMSwtMSwtMSwwLDAsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVM TH0sCi17IllNT0RFTS1nIiwgLTEsIC0xLC0xLC0xLCAgICAtMSwtMSwtMSwwLDAsTlVMTCxOVUxM LE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTH0sCi17IlpNT0RFTSIsICAgLTEsIC0xLC0xLC0xLFBY X1dJTCwtMSwtMSwwLDAsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTH0sCi17Ik90 aGVyIiwgICAgLTEsIC0xLC0xLC0xLCAgICAtMSwtMSwtMSwwLDAsTlVMTCxOVUxMLE5VTEwsTlVM TCxOVUxMLE5VTEwsTlVMTH0KLSNlbmRpZiAvKiBDS19YWVogKi8KLX07Ci0KLS8qIERlY2xhcmF0 aW9ucyBmb3IgU2VuZC1Jbml0IFBhcmFtZXRlcnMgKi8KLQotaW50IHNwc2l6ID0gRFNQU0laLCAg ICAgICAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgcGFja2V0IHNpemUgdG8gc2VuZCAqLwotICAg IHNwbWF4ID0gRFNQU0laLCAgICAgICAgICAgICAgICAgICAgIC8qIEJpZ2dlc3QgcGFja2V0IHNp emUgd2UgY2FuIHNlbmQgKi8KLSAgICBsYXN0c3BtYXggPSBEU1BTSVosICAgICAgICAgICAgICAg ICAvKiBTZW5kLXBhY2tldCBzaXplIGxhc3QgdXNlZCAqLwotICAgIHNwc2l6ciA9IERTUFNJWiwg ICAgICAgICAgICAgICAgICAgIC8qIFNlbmQtcGFja2V0IHNpemUgcmVxdWVzdGVkICovCi0gICAg c3BzaXpmID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyB0byBvdmVycmlkZSBz aXplIG5lZ290aWF0aW9uICovCi0gICAgcnBzaXogPSBEUlBTSVosICAgICAgICAgICAgICAgICAg ICAgLyogQmlnZ2VzdCB3ZSB3YW50IHRvIHJlY2VpdmUgKi8KLSAgICB1cnBzaXogPSBEUlBTSVos ICAgICAgICAgICAgICAgICAgICAvKiBVc2VyLXJlcXVlc3RlZCByZWNlaXZlIHBrdCBzaXplICov Ci0gICAgbWF4cnBzID0gTUFYUlAsICAgICAgICAgICAgICAgICAgICAgLyogTWF4aW11bSBpbmNv bWluZyBsb25nIHBhY2tldCBzaXplICovCi0gICAgbWF4c3BzID0gTUFYU1AsICAgICAgICAgICAg ICAgICAgICAgLyogTWF4aW11bSBvdXRib3VuZCBsLnAuIHNpemUgKi8KLSAgICBtYXh0cnkgPSBN QVhUUlksICAgICAgICAgICAgICAgICAgICAvKiBNYXhpbXVtIHJldHJpZXMgcGVyIHBhY2tldCAq LwotICAgIHdzbG90cyA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdpbmRvdyBzaXpl IGN1cnJlbnRseSBpbiB1c2UgKi8KLSAgICB3c2xvdHIgPSBERldTSVosICAgICAgICAgICAgICAg ICAgICAvKiBXaW5kb3cgc2l6ZSBmcm9tIFNFVCBXSU5ET1cgKi8KLSAgICB3c2xvdG4gPSAxLCAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBXaW5kb3cgc2l6ZSBuZWdvdGlhdGVkIGluIFMtcGt0 ICovCi0gICAgdGltZW91dHMgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIHN0YXRp c3RpY3MgcmVwb3J0aW5nICovCi0gICAgc3BhY2tldHMgPSAwLCAgICAgICAgICAgICAgICAgICAg ICAgLyogIC4uLiAqLwotICAgIHJwYWNrZXRzID0gMCwgICAgICAgICAgICAgICAgICAgICAgIC8q ICAuLi4gKi8KLSAgICByZXRyYW5zID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAvKiAgLi4u ICovCi0gICAgY3J1bmNoZWQgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgLyogIC4uLiAqLwot ICAgIHdtYXggPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAuLi4gKi8KLSAgICB3 Y3VyID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgLi4uICovCi0gICAgc3J2aWRs ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VydmVyIGlkbGUgdGltZW91dCAqLwot ICAgIHNydmRpcyA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlcnZlciBmaWxlIHhm ZXIgZGlzcGxheSAqLwotICAgIHNydnRpbSA9IERTUlZUSU0sICAgICAgICAgICAgICAgICAgIC8q IFNlcnZlciBjb21tYW5kIHdhaXQgdGltZW91dCAqLwotICAgIHNydnBpbmcgPSAxLCAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFNlcnZlciBrZWVwYWxpdmUgKi8KLS8qCi0gIHRpbWludCBpcyB0 aGUgdGltZW91dCBpbnRlcnZhbCBJIHVzZSB3aGVuIHdhaXRpbmcgZm9yIGEgcGFja2V0LgotICBw a3R0aW0gaXMgdGhlIFNFVCBSRUNFSVZFIFRJTUVPVVQgdmFsdWUsIHNlbnQgdG8gdGhlIG90aGVy IEtlcm1pdC4KLSAgcnRpbW8gaXMgdGhlIFNFVCBTRU5EIFRJTUVPVVQgdmFsdWUuICBydGltbyBp cyB0aGUgaW5pdGlhbCB2YWx1ZSBvZgotICB0aW1pbnQuICB0aW1pbnQgaXMgY2hhbmdlZCBieSB0 aGUgdmFsdWUgaW4gdGhlIGluY29taW5nIG5lZ290aWF0aW9uCi0gIHBhY2tldCB1bmxlc3MgYSBT RVQgU0VORCBUSU1FT1VUIGNvbW1hbmQgd2FzIGdpdmVuLgotKi8KLSAgICB0aW1pbnQgPSBETVlU SU0sICAgICAgICAgICAgICAgICAgICAvKiBUaW1lb3V0IGludGVydmFsIEkgdXNlICovCi0gICAg cGt0dGltID0gVVJUSU1FLCAgICAgICAgICAgICAgICAgICAgLyogVGltZW91dCBJIHdhbnQgeW91 IHRvIHVzZSAqLwotICAgIHJ0aW1vID0gRE1ZVElNLCAgICAgICAgICAgICAgICAgICAgIC8qIE5v cm1hbCBwYWNrZXQgd2FpdCB0aW1lb3V0ICovCi0gICAgdGltZWYgPSAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogRmxhZyB0byBvdmVycmlkZSB3aGF0IHlvdSBhc2sgKi8KLSNpZmRlZiBD S19USU1FUlMKLSAgICBydHRmbGcgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVc2Ug ZHluYW1pYyByb3VuZC10cmlwIHRpbWVycyAqLwotI2Vsc2UKLSAgICBydHRmbGcgPSAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBVc2UgZml4ZWQgdGltZXIgKi8KLSNlbmRpZiAvKiBDS19U SU1FUlMgKi8KLSAgICBtaW50aW1lID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAvKiBNaW5p bXVtIHRpbWVvdXQgKi8KLSAgICBtYXh0aW1lID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAv KiBNYXhpbXVtIHRpbWVvdXQgKi8KLQotICAgIG5wYWQgPSBNWVBBRE4sICAgICAgICAgICAgICAg ICAgICAgIC8qIEhvdyBtdWNoIHBhZGRpbmcgdG8gc2VuZCAqLwotICAgIG15cGFkbiA9IE1ZUEFE TiwgICAgICAgICAgICAgICAgICAgIC8qIEhvdyBtdWNoIHBhZGRpbmcgdG8gYXNrIGZvciAqLwot ICAgIGJjdHIgPSBERkJDVCwgICAgICAgICAgICAgICAgICAgICAgIC8qIEJsb2NrIGNoZWNrIHR5 cGUgcmVxdWVzdGVkICovCi0gICAgYmN0dSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogQmxvY2sgY2hlY2sgdHlwZSB1c2VkICovCi0gICAgYmN0bCA9IDEsICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogQmxvY2sgY2hlY2sgbGVuZ3RoICovCi0gICAgYmN0ZiA9IDAsCQkJCS8q IEJsb2NrIGNoZWNrIHR5cGUgMyBmb3JjZWQgb24gYWxsICovCi0gICAgY19zYXZlID0gLTEsICAg ICAgICAgICAgICAgICAgICAgICAgLyogQmxvY2sgY2hlY2sgc2F2aW5nIGFuZCByZXN0b3Jpbmcg Ki8KLSAgICBzc19zYXZlID0gLTEsICAgICAgICAgICAgICAgICAgICAgICAvKiBTbG93LXN0YXJ0 IHNhdmluZyBhbmQgcmVzdG9yaW5nICovCi0gICAgZWJxID0gIE1ZRUJRLCAgICAgICAgICAgICAg ICAgICAgICAgLyogOHRoIGJpdCBwcmVmaXggKi8KLSAgICBlYnFmbGcgPSAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAvKiA4dGgtYml0IHF1b3RpbmcgZmxhZyAqLwotICAgIHJxZiA9IC0xLCAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgdXNlZCBpbiA4YnEgbmVnb3RpYXRpb24g Ki8KLSAgICBycSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWNlaXZlZCA4 YnEgYmlkICovCi0gICAgc3EgPSAnWScsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2Vu dCA4YnEgYmlkICovCi0gICAgcnB0ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog UmVwZWF0IGNvdW50ICovCi0gICAgcnB0cSA9IE1ZUlBUUSwgICAgICAgICAgICAgICAgICAgICAg LyogUmVwZWF0IHByZWZpeCAqLwotICAgIHJwdGZsZyA9IDAsICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFJlcGVhdCBwcm9jZXNzaW5nIGZsYWcgKi8KLSAgICBycHRlbmEgPSAxLCAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBSZXBlYXQgcHJvY2Vzc2luZyBlbmFibGVkICovCi0gICAgeGZy Y2FuID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXIgY2FuY2VsbGF0aW9u IGVuYWJsZWQgKi8KLSAgICB4ZnJpbnQgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBU cmFuc2ZlciBpbnRlcnJ1cHRpb24gZW5hYmxlZCAqLwotICAgIHhmcmNociA9IDMsICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIGNhbmNlbCBjaGFyID0gQ3RybC1DICovCi0gICAg eGZybnVtID0gMywgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmVlZCB0aHJlZSBvZiB0aGVt IGJ5IGRlZmF1bHQgKi8KLSAgICBnX3hmcnhsYSA9IC0xOwotICAgIGNoYXIgKiB4ZnJtc2cgPSBO VUxMOyAgICAgICAgICAgICAgIC8qIE1lc3NhZ2UgZm9yIGYudC4gZGlzcGxheSBzY3JlZW4gKi8K LSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmZGVmIE5PQ1NFVFMKLWludCB4ZnJ4bGEgPSAwOyAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uICovCi0j ZWxzZQotaW50IHhmcnhsYSA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuYWJsZWQg b3IgZGlzYWJsZWQgKi8KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLWludCBoYXZlbGZzID0gMDsJ CQkvKiBMYXJnZSBmaWxlIHN1cHBvcnQgYXZhaWxhYmxlICovCi0KLSNpZm5kZWYgTk9YRkVSCi1p bnQgZXBrdGZsZyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRS1QQUNLRVQgY29tbWFu ZCBhY3RpdmUgKi8KLQotaW50IGNhcGFzICA9IDksICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFBvc2l0aW9uIG9mIENhcGFiaWxpdGllcyAqLwotICAgIGxwY2FwYiA9IDIsICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIExvbmcgUGFja2V0IGNhcGFiaWxpdHkgKi8KLSAgICBscGNhcHIgPSAx LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgcmVxdWVzdGVkICovCi0gICAgbHBjYXB1ID0g MCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogIHVzZWQgKi8KLSAgICBzd2NhcGIgPSA0LCAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBTbGlkaW5nIFdpbmRvdyBjYXBhYmlsaXR5ICovCi0g ICAgc3djYXByID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogIHJlcXVlc3RlZCAoYWxs b3dlZCkgKi8KLSAgICBzd2NhcHUgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgdXNl ZCAqLwotICAgIGF0Y2FwYiA9IDgsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEF0dHJpYnV0 ZSBjYXBhYmlsaXR5ICovCi0gICAgYXRjYXByID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAg LyogIHJlcXVlc3RlZCAqLwotICAgIGF0Y2FwdSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAg IC8qICB1c2VkICovCi0gICAgcnNjYXBiID0gMTYsICAgICAgICAgICAgICAgICAgICAgICAgLyog UkVTRU5EIGNhcGFiaWxpdHkgKi8KLSAgICByc2NhcHIgPSAxLCAgICAgICAgICAgICAgICAgICAg ICAgICAvKiAgcmVxdWVzdGVkIGJ5IGRlZmF1bHQgKi8KLSAgICByc2NhcHUgPSAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAvKiAgdXNlZCAqLwotICAgIGxzY2FwYiA9IDMyLCAgICAgICAgICAg ICAgICAgICAgICAgIC8qIExvY2tpbmcgU2hpZnQgY2FwYWJpbGl0eSAqLwotICAgIGxzY2FwciA9 IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qICByZXF1ZXN0ZWQgYnkgZGVmYXVsdCAqLwot ICAgIGxzY2FwdSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qICB1c2VkICovCi0KLS8q IEZsYWdzIGZvciB3aGV0aGVyIHRvIHVzZSBwYXJ0aWN1bGFyIGF0dHJpYnV0ZXMgKi8KLQotaW50 IGF0ZW5jaSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuY29kaW5nIGluICovCi0g ICAgYXRlbmNvID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5jb2Rpbmcgb3V0ICov Ci0gICAgYXRkYXRpID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGF0ZSBpbiAqLwot ICAgIGF0ZGF0byA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERhdGUgb3V0ICovCi0g ICAgYXRkaXNpID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGlzcG9zaXRpb24gaW4v b3V0ICovCi0gICAgYXRkaXNvID0gMSwKLSAgICBhdGxlbmkgPSAxLCAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBMZW5ndGggaW4vb3V0IChib3RoIGtpbmRzKSAqLwotICAgIGF0bGVubyA9IDEs Ci0gICAgYXRibGtpID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQmxvY2tzaXplIGlu L291dCAqLwotICAgIGF0YmxrbyA9IDEsCi0gICAgYXR0eXBpID0gMSwgICAgICAgICAgICAgICAg ICAgICAgICAgLyogRmlsZSB0eXBlIGluL291dCAqLwotICAgIGF0dHlwbyA9IDEsCi0gICAgYXRz aWRpID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3lzdGVtIElEIGluL291dCAqLwot ICAgIGF0c2lkbyA9IDEsCi0gICAgYXRzeXNpID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAv KiBTeXN0ZW0tZGVwZW5kZW50IHBhcmFtZXRlcnMgaW4vb3V0ICovCi0gICAgYXRzeXNvID0gMTsK LQotaW50IGRpc3BvcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERpc3Bvc2l0aW9u ICovCi0KLSNpZmRlZiBDS19QRVJNUwotaW50IGF0bHByaSA9IDEsCi0gICAgYXRscHJvID0gMSwK LSAgICBhdGdwcmkgPSAxLAotICAgIGF0Z3BybyA9IDE7Ci0jZW5kaWYgLyogQ0tfUEVSTVMgKi8K LQotaW50IGF0ZnJtaSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlY29yZCBGb3Jt YXQgaW4vb3V0ICovCi0gICAgYXRmcm1vID0gMTsKLQotI2lmZGVmIFNUUkFUVVMKLWludCBhdGNy ZWkgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDcmVhdG9yIElEIGluL291dCAqLwot ICAgIGF0Y3JlbyA9IDEsCi0gICAgYXRhY3RpID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAg LyogQWNjb3VudCBpbi9vdXQgKi8KLSAgICBhdGFjdG8gPSAxOwotI2VuZGlmIC8qIFNUUkFUVVMg Ki8KLQotaW50IHNwcm1sZW4gPSAtMTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQvUmVj ZWl2ZSBwcm90b2NvbCBwYXJhbWV0ZXIgKi8KLWludCBycHJtbGVuID0gLTE7ICAgICAgICAgICAg ICAgICAgICAgICAvKiBzdHJpbmcgbGVuZ3RoIGxpbWl0cyAqLwotaW50IHNlbmRpcGt0cyA9IDE7 ICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgSSBwYWNrZXRzICovCi0KLUNIQVIgcGFkY2gg PSBNWVBBREMsICAgICAgICAgICAgICAgICAgICAvKiBQYWRkaW5nIGNoYXJhY3RlciB0byBzZW5k ICovCi0gICAgbXlwYWRjID0gTVlQQURDLCAgICAgICAgICAgICAgICAgICAgLyogUGFkZGluZyBj aGFyYWN0ZXIgdG8gYXNrIGZvciAqLwotICAgIHNlb2wgPSBNWUVPTCwgICAgICAgICAgICAgICAg ICAgICAgIC8qIEVuZC1PZi1MaW5lIGNoYXJhY3RlciB0byBzZW5kICovCi0gICAgZW9sID0gTVlF T0wsICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5kLU9mLUxpbmUgY2hhcmFjdGVyIHRvIGxv b2sgZm9yICovCi0gICAgY3RscSA9IENUTFEsICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29u dHJvbCBwcmVmaXggaW4gaW5jb21pbmcgZGF0YSAqLwotICAgIG15Y3RscSA9IENUTFEsICAgICAg ICAgICAgICAgICAgICAgIC8qIE91dGJvdW5kIGNvbnRyb2wgY2hhcmFjdGVyIHByZWZpeCAqLwot ICAgIG15cnB0cSA9IE1ZUlBUUTsgICAgICAgICAgICAgICAgICAgIC8qIFJlcGVhdCBwcmVmaXgg SSB3YW50IHRvIHVzZSAqLwotCi1pbnQgcnB0bWluID0gMzsgICAgICAgICAgICAgICAgICAgICAg ICAgLyogUmVwZWF0LWNvdW50IG1pbmltdW0gKi8KLQotaW50IHVzZXBpcGVzID0gMCwgICAgICAg ICAgICAgICAgICAgICAgIC8qIFVzZWQgZm9yIHhmZXIgdG8vZnJvbSBwaXBlcyAqLwotICAgIGdf dXNlcGlwZXMgPSAtMTsKLQotY2hhciAqIGZpbGVmaWxlID0gTlVMTDsgICAgICAgICAgICAgICAg IC8qIEZpbGUgY29udGFpbmluZyBsaXN0IG9mIGZpbGVuYW1lcyAqLwotLyogQ0QgbWVzc2FnZSBm aWxlbmFtZSBsaXN0ICovCi0KLWNoYXIgd2hvYXJldVsxNl0gPSB7IE5VTCwgTlVMIH07ICAgICAg ICAvKiBTeXN0ZW0gSUQgb2Ygb3RoZXIgS2VybWl0ICovCi1pbnQgc3lzaW5kZXggPSAtMTsgICAg ICAgICAgICAgICAgICAgICAgLyogYW5kIGluZGV4IHRvIGl0cyBzeXN0ZW0gSUQgc3RydWN0ICov Ci1pbnQgbXlpbmRleCAgPSAtMTsKLWludCB3ZWFyZWFsaWtlID0gMDsgICAgICAgICAgICAgICAg ICAgICAvKiAyIEtlcm1pdHMgaGF2ZSBjb21wYXRpYmxlIHN5c2lkcyAqLwotY2hhciAqIGNrc3lz aWQgPSAgICAgICAgICAgICAgICAgICAgICAgIC8qIE15IHN5c3RlbSBJRCAqLwotI2lmZGVmIFVO SVgKLSAgICAiVTEiCi0jZWxzZQotI2lmZGVmIFZNUwotICAgICJENyIKLSNlbHNlCi0jaWZkZWYg T1NLCi0gICAgIlVEIgotI2Vsc2UKLSNpZmRlZiBBTUlHQQotICAgICJMMyIKLSNlbHNlCi0jaWZk ZWYgTUFDCi0gICAgIkEzIgotI2Vsc2UKLSNpZmRlZiBPUzIKLSNpZmRlZiBOVAotICAgICJVTiIK LSNlbHNlIC8qIE5UICovCi0gICAgIlVPIgotI2VuZGlmIC8qIE5UICovCi0jZWxzZSAvKiBPUzIg Ki8KLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgICJGMyIKLSNlbHNlCi0jaWZkZWYgR0VNRE9TCi0g ICAgIksyIgotI2Vsc2UKLSNpZmRlZiBTVFJBVFVTCi0gICAgIk1WIgotI2Vsc2UKLSAgICAiIgot I2VuZGlmIC8qIFNUUkFUVVMgKi8KLSNlbmRpZiAvKiBHRU1ET1MgKi8KLSNlbmRpZiAvKiBkYXRh Z2VuZXJhbCAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE1BQyAqLwotI2VuZGlmIC8q IEFNSUdBICovCi0jZW5kaWYgLyogT1NLICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyog VU5JWCAqLwotICAgIDsKLQotaW50IG9vcHRzID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAg IC8qIE8tUGFja2V0IE9wdGlvbnMgKi8KLWludCBvbW9kZSA9IC0xOyAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBPLVBhY2tldCBUcmFuc2ZlciBNb2RlICovCi1pbnQgb25hbWUgPSAtMTsgICAg ICAgICAgICAgICAgICAgICAgICAgLyogTy1QYWNrZXQgRmlsZW5hbWUgT3B0aW9ucyAqLwotaW50 IG9wYXRoID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE8tUGFja2V0IFBhdGhuYW1l IE9wdGlvbnMgKi8KLQotc3RydWN0IHphdHRyIGlhdHRyOyAgICAgICAgICAgICAgICAgICAgIC8q IEluY29taW5nIGZpbGUgYXR0cmlidXRlcyAqLwotCi0jaWZkZWYgVk1TCi0vKiBWTVMgbGFiZWxl ZCBmaWxlIGRlZmF1bHQgb3B0aW9ucyAtIG5hbWUgb25seS4gKi8KLWludCBsZl9vcHRzID0gTEJM X05BTTsKLSNlbHNlCi0jaWZkZWYgT1MyCi0vKiBPUy8yIGxhYmVsZWQgZmlsZSBkZWZhdWx0IG9w dGlvbnMsIGFsbCBhdHRyaWJ1dGVzIGJ1dCBhcmNoaXZlZC4gKi8KLXVuc2lnbmVkIGxvbmcgaW50 IGxmX29wdHMgPSBMQkxfRVhUfExCTF9ISUR8TEJMX1JPfExCTF9TWVM7Ci0jZWxzZQotaW50IGxm X29wdHMgPSAwOwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFZNUyAqLwotCi0vKiBQYWNr ZXQtcmVsYXRlZCB2YXJpYWJsZXMgKi8KLQotaW50IHBrdG51bSA9IDAsICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEN1cnJlbnQgcGFja2V0IG51bWJlciAqLwotICAgIHNuZHR5cCA9IDAsICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFR5cGUgb2YgcGFja2V0IGp1c3Qgc2VudCAqLwotICAg IHJjdnR5cCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR5cGUgb2YgcGFja2V0IGp1 c3QgcmVjZWl2ZWQgKi8KLSAgICByc24sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBSZWNlaXZlZCBwYWNrZXQgc2VxdWVuY2UgbnVtYmVyICovCi0gICAgcmxuLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogUmVjZWl2ZWQgcGFja2V0IGxlbmd0aCAqLwotICAgIHNp emUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgc2l6ZSBvZiBvdXRw dXQgcGt0IGRhdGEgKi8KLSAgICBvc2l6ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBQcmV2aW91cyBvdXRwdXQgcGFja2V0IGRhdGEgc2l6ZSAqLwotICAgIG1heHNpemUsICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIE1heCBzaXplIGZvciBidWlsZGluZyBkYXRhIGZpZWxk ICovCi0gICAgc3BrdGwgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIHBh Y2tldCBiZWluZyBzZW50ICovCi0gICAgcnBrdGwgPSAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogTGVuZ3RoIG9mIHBhY2tldCBqdXN0IHJlY2VpdmVkICovCi0gICAgcGt0cGF1cyA9IDAs ICAgICAgICAgICAgICAgICAgICAgICAgLyogSW50ZXJwYWNrZXQgcGF1c2UgaW50ZXJ2YWwsIG1z ZWMgKi8KLSAgICBycHJpbnRmLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSRU1PVEUg UFJJTlQgZmxhZyAqLwotICAgIHJtYWlsZiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IE1BSUwgZmxhZyAqLwotICAgIHhmZXJzdGF0ID0gLTEsICAgICAgICAgICAgICAgICAgICAgIC8q IFN0YXR1cyBvZiBsYXN0IHRyYW5zYWN0aW9uICovCi0gICAgZmlsZXN0YXR1cyA9IDA7ICAgICAg ICAgICAgICAgICAgICAgLyogU3RhdHVzIG9mIGxhc3QgZmlsZSB0cmFuc2ZlciAqLwotCi1DSEFS IHBrdG1zZ2J1ZltQS1RNU0dMRU4rMV07Ci1DSEFSICplcGt0bXNnID0gcGt0bXNnYnVmOwotCi0j aWZkZWYgcGRwMTEKLWludCBzcnZjbWRsZW4gPSBNQVhSUDsgICAgICAgICAgICAgICAgICAvKiBz cnZjbWQgYnVmZmVyIGxlbmd0aCAqLwotI2Vsc2UKLSNpZmRlZiBEWU5BTUlDCi1pbnQgc3J2Y21k bGVuID0gTUFYUlA7Ci0jZWxzZQotaW50IHNydmNtZGxlbiA9IDA7Ci0jZW5kaWYgLyogRFlOQU1J QyAqLwotI2VuZGlmIC8qIHBkcDExICovCi0KLUNIQVIKLSNpZmRlZiBwZHAxMQotICAgIHNydmNt ZGJ1ZltNQVhSUCs0XSwKLSAgICAqc3J2Y21kID0gc3J2Y21kYnVmLAotI2Vsc2UKLSNpZmRlZiBE WU5BTUlDCi0gICAgKnNydmNtZCA9IChDSEFSICopMCwgICAgICAgICAgICAgICAgLyogV2hlcmUg dG8gZGVjb2RlIHNlcnZlciBjb21tYW5kICovCi0jZWxzZQotICAgIHNydmNtZGJ1ZltNQVhSUCs0 XSwKLSAgICAqc3J2Y21kID0gc3J2Y21kYnVmLAotI2VuZGlmIC8qIERZTkFNSUMgKi8KLSNlbmRp ZiAvKiBwZHAxMSAqLwotICAgIHBhZGJ1Zls5Nl0sICAgICAgICAgICAgICAgICAgICAgICAgIC8q IEJ1ZmZlciBmb3Igc2VuZC1wYWRkaW5nICovCi0gICAgKnJlY3BrdCwKLSAgICAqcmRhdGFwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIHJlY2VpdmVkIHBhY2tldCBk YXRhICovCi0gICAgKmRhdGEgPSAoQ0hBUiAqKTAsICAgICAgICAgICAgICAgICAgLyogUG9pbnRl ciB0byBzZW5kLXBhY2tldCBkYXRhICovCi0gICAgKnNydnB0ciwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogUG9pbnRlciB0byBzcnZjbWQgKi8KLSAgICBteXN0Y2ggPSBTT0gsICAgICAg ICAgICAgICAgICAgICAgICAvKiBPdXRib3VuZCBwYWNrZXQtc3RhcnQgY2hhcmFjdGVyICovCi0g ICAgc3RjaHIgPSBTT0g7ICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5jb21pbmcgcGFja2V0 LXN0YXJ0IGNoYXJhY3RlciAqLwotCi0vKiBGaWxlLXJlbGF0ZWQgdmFyaWFibGVzICovCi0KLSNp Zm5kZWYgTk9NU0VORCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNdWx0aXBsZSBTRU5EICov Ci1zdHJ1Y3QgZmlsZWxpc3QgKiBmaWxlaGVhZCA9IE5VTEw7ICAgICAgLyogU0VORCBsaXN0ICov Ci1zdHJ1Y3QgZmlsZWxpc3QgKiBmaWxldGFpbCA9IE5VTEw7Ci1zdHJ1Y3QgZmlsZWxpc3QgKiBm aWxlbmV4dCA9IE5VTEw7Ci1pbnQgYWRkbGlzdCA9IDA7Ci0jZW5kaWYgLyogTk9NU0VORCAqLwot Ci1jaGFyIGZpbG5hbVtDS01BWFBBVEggKyAxXTsgICAgICAgICAgICAgLyogTmFtZSBvZiBjdXJy ZW50IGZpbGUuICovCi1jaGFyIG9maWxuYW1bQ0tNQVhQQVRIICsgMV07ICAgICAgICAgICAgLyog T3JpZ2luYWwgbmFtZS4gKi8KLQotaW50IHBpcGVzZW5kID0gMDsgICAgICAgICAgICAgICAgICAg ICAgIC8qIE5vbnplcm8gaWYgc2VuZGluZyBmcm9tIHBpcGUgKi8KLSNpZmRlZiBQSVBFU0VORAot Y2hhciAqIHNuZGZpbHRlciA9IE5VTEw7ICAgICAgICAgICAgICAgIC8qIFNlbmQgYW5kIHJlY2Vp dmUgZmlsdGVycyAqLwotY2hhciAqIHJjdmZpbHRlciA9IE5VTEw7Ci0jZW5kaWYgLyogUElQRVNF TkQgKi8KLQotY2hhciAqKiBzbmRhcnJheSA9IE5VTEw7ICAgICAgICAgICAgICAgIC8qIFNFTkQg L0FSUkFZIHBvaW50ZXIgYW5kIHJhbmdlICovCi0jaWZuZGVmIE5PU1BMCi1pbnQgc25keGxvID0g LTEsIHNuZHhoaSA9IC0xLCBzbmR4aW4gPSAtMTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotI2VuZGlm IC8qIE5PWEZFUiAqLwotCi0jaWZuZGVmIE5PU0VSVkVSCi1pbnQgbmdldHBhdGggPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgLyogR0VUIHNlYXJjaCBwYXRoICovCi1pbnQgZnJvbWdldHBhdGgg PSAwOwotY2hhciAqIGdldHBhdGhbTUFYR0VUUEFUSF07Ci1jaGFyICogeF91c2VyID0gTlVMTDsg ICAgICAgICAgICAgICAgICAgLyogU2VydmVyIGxvZ2luIGluZm9ybWF0aW9uICovCi1jaGFyICog eF9wYXNzd2QgPSBOVUxMOwotY2hhciAqIHhfYWNjdCA9IE5VTEw7Ci0jZW5kaWYgLyogTk9TRVJW RVIgKi8KLQotaW50IHhfbG9naW4gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIExvZ2lu IHJlcXVpcmVkICovCi1pbnQgeF9sb2dnZWQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyog VXNlciBpcyBsb2dnZWQgaW4gKi8KLQotZXh0ZXJuIGludCB0aW1lbGltaXQ7Ci0KLSNpZmRlZiBD S19MT0dJTgotaW50IGxvZ2ludGltbyA9IDMwMDsgICAgICAgICAgICAgICAgICAgIC8qIExvZ2lu IHRpbWVvdXQgKi8KLWNoYXIgKiB1c2VyZmlsZSA9IE5VTEw7ICAgICAgICAgICAgICAgICAvKiBG b3JiaWRkZW4gdXNlciBmaWxlICovCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSNpZmRlZiBJS1NE Ci1jaGFyICogYW5vbmZpbGUgPSBOVUxMOyAgICAgICAgICAgICAgICAgLyogQW5vbnltb3VzIGxv Z2luIGluaXQgZmlsZSAqLwotY2hhciAqIGFub25yb290ID0gTlVMTDsgICAgICAgICAgICAgICAg IC8qIEFub255bW91cyBmaWxlLXN5c3RlbSByb290ICovCi1pbnQgaWtzX3RpbW8gID0gMzAwOyAg ICAgICAgICAgICAgICAgICAgLyogNSBtaW51dGVzIGlkbGUgdGltbyAqLwotaW50IGlrc19yZXRy eSA9IDM7ICAgICAgICAgICAgICAgICAgICAgIC8qIDMgYXR0ZW1wdHMgYXQgbG9naW4gKi8KLSNl bmRpZiAvKiBJS1NEICovCi0KLSNpZmRlZiBDS1NZU0xPRwotZXh0ZXJuIFZPSUQgenN5c2xvZygp OwotZXh0ZXJuIGludCBja3hsb2dnaW5nLCBja3hzeXNsb2c7Ci0jZW5kaWYgLyogQ0tTWVNMT0cg Ki8KLQotQ0tfT0ZGX1QgZnNpemUgPSAoQ0tfT0ZGX1QpMCwJCS8qIFNpemUgb2YgY3VycmVudCBm aWxlICovCi0gc2VuZHN0YXJ0ID0gKENLX09GRl9UKTAsCQkvKiBTRU5EIHN0YXJ0IHBvc2l0aW9u ICovCi0gY2FsaWJyYXRlID0gKENLX09GRl9UKTA7CQkvKiBOb256ZXJvIGlmIGNhbGlicmF0aW9u IHJ1biAqLwotCi1pbnQgbnp4b3B0cyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogT3B0 aW9ucyBmb3Igbnp4cGFuZCgpICovCi1pbnQgbmZpbHMgPSAwOyAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogTnVtYmVyIG9mIGZpbGVzIGluIGZpbGUgZ3JvdXAgKi8KLWludCB3aWxkZW5hID0g MTsJCQkvKiBXaWxkY2FyZCBleHBhbnNpb24gZW5hYmxlZCAqLwotI2lmZGVmIFVOSVgKLWludCB3 aWxkeHBhbmQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBXaG8gZXhwYW5kcyB3aWxkY2Fy ZHMsIDA9S2VybWl0Li4gKi8KLSNlbHNlIC8qIFVOSVggKi8KLSNpZmRlZiBTVFJBVFVTCi1pbnQg d2lsZHhwYW5kID0gMTsJCQkvKiAxPVNoZWxsLiAqLwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSNl bmRpZiAvKiBVTklYICovCi0jaWZkZWYgVU5JWE9ST1NLCi1pbnQgbWF0Y2hkb3QgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgLyogV2hldGhlciB0byBtYXRjaCBkb3QgZmlsZXMgKi8KLSNlbHNl Ci1pbnQgbWF0Y2hkb3QgPSAxOwotI2VuZGlmIC8qIFVOSVhPUk9TSyAqLwotaW50IG1hdGNoZmlm byA9IDA7CQkJLyogV2hldGhlciB0byBtYXRjaCBGSUZPICJmaWxlcyIgKi8KLWludCBjbGZpbHMg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBjb21tYW5kLWxpbmUgZmls ZXMgKi8KLWludCBzdGF5ZmxnID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZv ciAic3RheSIsIGkuZS4gIi1TIiAqLwotaW50IHhmaW5pc2ggPSAwOyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEZsYWcgZm9yIEZJTklTSCA9IEVYSVQgKi8KLWxvbmcgenR1c2VjID0gLTFMOyAg ICAgICAgICAgICAgICAgICAgICAvKiBVc2VkIHdpdGggenRpbWUoKSAqLwotbG9uZyB6dG1zZWMg PSAtMUw7ICAgICAgICAgICAgICAgICAgICAgIC8qIERpdHRvICovCi0KLS8qIENvbW11bmljYXRp b24gZGV2aWNlIC8gY29ubmVjdGlvbiB2YXJpYWJsZXMgKi8KLQotY2hhciB0dG5hbWVbVFROQU1M RU4rMV07ICAgICAgICAgICAgICAgIC8qIE5hbWUgb2YgY29tbXVuaWNhdGlvbiBkZXZpY2UgKi8K LQotI2lmZGVmIE1BQwotaW50IGNvbm5lY3RlZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8q IFRydWUgaWYgY29ubmVjdGVkICovCi1pbnQgc3RhcnRjb25uZWN0ZWQ7ICAgICAgICAgICAgICAg ICAgICAgLyogaW5pdGlhbCBzdGF0ZSBvZiBjb25uZWN0ZWQgKi8KLSNlbmRpZiAvKiBNQUMgKi8K LQotbG9uZyBzcGVlZCA9IC0xTDsgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbW11bmljYXRp b24gZGV2aWNlIHNwZWVkICovCi1pbnQgd2FzY2xvc2VkID0gMDsgICAgICAgICAgICAgICAgICAg ICAgLyogQ29ubmVjdGlvbiB3YXMganVzdCBjbG9zZWQgKi8KLWludCB3aHljbG9zZWQgPSBXQ19S RU1POyAgICAgICAgICAgICAgICAvKiB3aHkgaXQgd2FzIGNsb3NlZCAqLwotaW50IHFueHBvcnRs b2NrID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIFFOWCBwb3J0IGxvY2tpbmcgb24vb2ZmICov Ci0KLSNpZm5kZWYgQ0xTT05ESVNDCi0jZGVmaW5lIENMU09ORElTQyAwCi0jZW5kaWYgLyogQ0xT T05ESVNDICovCi0KLWludCBjeGZsb3dbQ1hUX01BWCsxXTsgICAgICAgICAgICAgICAgICAvKiBT ZWUgaW5pdGZsb3coKSAqLwotCi0jaWZuZGVmIE5PU0hPVwotY2hhciAqIGZsb25hbWVbXSA9IHsg ICAgICAgICAgICAgICAgICAgIC8qIEZsb3cgY29udHJvbCBuYW1lcyAqLwotICAibm9uZSIsICJ4 b24veG9mZiIsICJydHMvY3RzIiwgImR0ci9jZCIsICJldHgvYWNrIiwgInN0cmluZyIsCi0gICJ4 eHgxIiwgInh4eDIiLCAiZHRyL2N0cyIsICJrZWVwIiwgImF1dG8iCi19OwotaW50IG5mbG9uYW1l ID0gKHNpemVvZihmbG9uYW1lKSAvIHNpemVvZihjaGFyICopKTsKLQotY2hhciAqIGN4bmFtZVtd ID0geyAgICAgICAgICAgICAgICAgICAgIC8qIENvbm5lY3Rpb24gdHlwZSBuYW1lcyAqLwotICAi cmVtb3RlIiwgImRpcmVjdC1zZXJpYWwiLCAibW9kZW0iLCAidGNwL2lwIiwgInguMjUiLCAiZGVj bmV0IiwKLSAgImxhdCIsICJuZXRiaW9zIiwgIm5hbWVkLXBpcGUiLCAic3NoIiwgInBpcGUiCi19 OwotaW50IG5jeG5hbWUgPSAoc2l6ZW9mKGN4bmFtZSkgLyBzaXplb2YoY2hhciAqKSk7Ci0jZW5k aWYgLyogTk9TSE9XICovCi0KLWludCBwYXJpdHkgPSBERUZQQVIsICAgICAgICAgICAgICAgICAg ICAvKiBQYXJpdHkgc3BlY2lmaWVkLCAwLCdlJywnbycsZXRjICovCi0gICAgaHdwYXJpdHkgPSAw LCAgICAgICAgICAgICAgICAgICAgICAgLyogSGFyZHdhcmUgcGFyaXR5IGZvciBzZXJpYWwgcG9y dCAqLwotICAgIHN0b3BiaXRzID0gLTEsICAgICAgICAgICAgICAgICAgICAgIC8qIFN0b3AgYml0 cyBmb3Igc2VyaWFsIHBvcnQgKi8KLSAgICBjbHNvbmRpc2MgPSBDTFNPTkRJU0MsICAgICAgICAg ICAgICAvKiBTZXJpYWwgcG9ydCBjbG9zZSBvbiBkaXNjb25uZWN0ICovCi0gICAgYXV0b3BhciA9 IDAsICAgICAgICAgICAgICAgICAgICAgICAgLyogQXV0b21hdGljIHBhcml0eSBjaGFuZ2UgZmxh ZyAqLwotICAgIHNvc2kgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNoaWZ0LUlu L091dCBmbGFnICovCi0gICAgZmxvdyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog RmxvdyBjb250cm9sIChzZWUgaW5pdGZsb3coKSkgKi8KLSAgICBhdXRvZmxvdyA9IDEsICAgICAg ICAgICAgICAgICAgICAgICAvKiBBdXRvbWF0aWMgZmxvdyBjb250cm9sICovCi0gICAgdHVybiA9 IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGluZSB0dXJuYXJvdW5kIGhhbmRzaGFr ZSBmbGFnICovCi0gICAgdHVybmNoID0gWE9OLCAgICAgICAgICAgICAgICAgICAgICAgLyogTGlu ZSB0dXJuYXJvdW5kIGNoYXJhY3RlciAqLwotICAgIGR1cGxleCA9IDAsICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIER1cGxleCwgZnVsbCBieSBkZWZhdWx0ICovCi0gICAgZXNjYXBlID0gREZF U0MsICAgICAgICAgICAgICAgICAgICAgLyogRXNjYXBlIGNoYXJhY3RlciBmb3IgY29ubmVjdCAq LwotICAgIGNrZGVsYXkgPSBEREVMQVksICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWwgZGVs YXkgYmVmb3JlIHNlbmRpbmcgKi8KLSAgICB0bmxtID0gMDsgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBUZXJtaW5hbCBuZXdsaW5lIG1vZGUgKi8KLQotLyogTmV0d29ya3MgZm9yIFNFVCBI T1NUICovCi0KLSNpZmRlZiBCSUdCVUZPSwotI2RlZmluZSBNWUhPU1RMIDEwMjQKLSNlbHNlCi0j ZGVmaW5lIE1ZSE9TVEwgMTAwCi0jZW5kaWYgLyogQklHQlVGT0sgKi8KLQotY2hhciBteWhvc3Rb TVlIT1NUTF07ICAgICAgICAgICAgICAgICAgIC8qIExvY2FsIGhvc3QgbmFtZSAqLwotaW50IG5l dHdvcmsgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5ldHdvcmsgdnMgc2VyaWFsIGNv bm5lY3Rpb24gKi8KLWludCBpbnNlcnZlciA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBS dW5uaW5nIGFzIGFuIEludGVybmV0IHNlcnZlciAqLwotaW50IGlzZ3Vlc3QgPSAwOyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFVzZXIgaXMgYW5vbnltb3VzICovCi1jaGFyICogY2xpZW50aG9z dCA9IE5VTEw7ICAgICAgICAgICAgICAgLyogUGVlciBob3N0IG5hbWUgb3IgYWRkcmVzcyAqLwot aW50IHRjcF9pbmNvbWluZyA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIEluY29taW5nIFRDUCBj b25uZWN0aW9uPyAqLwotCi0jaWZkZWYgTkVUQ09OTgotI2lmZGVmIFRDUFNPQ0tFVAotaW50IG5l dHR5cGUgPSBORVRfVENQQjsgICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgbmV0d29yayB0eXBl ICovCi0jZWxzZQotI2lmZGVmIFNVTlgyNQotaW50IG5ldHR5cGUgPSBORVRfU1gyNTsKLSNlbHNl Ci0jaWZkZWYgSUJNWDI1Ci1pbnQgbmV0dHlwZSA9IE5FVF9JWDI1OwotI2Vsc2UKLSNpZmRlZiBI UFgyNQotaW50IG5ldHR5cGUgPSBORVRfSFgyNTsKLSNlbHNlCi0jaWZkZWYgU1RSQVRVU1gyNQot aW50IG5ldHR5cGUgPSBORVRfVlgyNTsKLSNlbHNlCi0jaWZkZWYgREVDTkVUCi1pbnQgbmV0dHlw ZSA9IE5FVF9ERUM7Ci0jZWxzZQotI2lmZGVmIFNVUEVSTEFUCi1pbnQgbmV0dHlwZSA9IE5FVF9T TEFUOwotI2Vsc2UKLWludCBuZXR0eXBlID0gTkVUX05PTkU7Ci0jZW5kaWYgLyogU1VQRVJMQVQg Ki8KLSNlbmRpZiAvKiBERUNORVQgKi8KLSNlbmRpZiAvKiBTVFJBVFVTWDI1ICovCi0jZW5kaWYg LyogSFBYMjUgKi8KLSNlbmRpZiAvKiBJQk1YMjUgKi8KLSNlbmRpZiAvKiBTVU5YMjUgKi8KLSNl bmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNlbHNlICAvKiBORVRDT05OICovCi1pbnQgbmV0dHlwZSA9 IE5FVF9OT05FOwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQotI2lmZGVmIEFOWVgyNQotaW50IHJl dmNhbGwgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFguMjUgcmV2ZXJzZSBjYWxsIG5v dCBzZWxlY3RlZCAqLwotaW50IGNsb3NnciAgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgIC8q IFguMjUgY2xvc2VkIHVzZXIgZ3JvdXAgICovCi1pbnQgY3VkYXRhID0gMDsgICAgICAgICAgICAg ICAgICAgICAgICAgLyogWC4yNSBjYWxsIHVzZXIgZGF0YSBub3Qgc3BlY2lmaWVkICovCi1jaGFy IHVkYXRhW01BWENVREFUQV07ICAgICAgICAgICAgICAgICAgLyogWC4yNSBjYWxsIHVzZXIgZGF0 YSAqLwotCi0jaWZkZWYgSUJNWDI1Ci0vKgotICBJIHdhcyB1bmFibGUgdG8gZmluZCBhbnkgcHJl LWRlZmluZWQgTUFYIHZhbHVlcyBmb3IgeDI1IGFkZHJlc3NlcyAtIHRoZQotICBhZGRyZXNzZXMg dGhhdCBJJ3ZlIHNlZW4gaGF2ZSBiZWVuIGFyb3VuZCAxMC0xMiBjaGFyYWN0ZXJzIDMyIGlzIHBy b2JhYmx5Ci0gIGVub3VnaCwgNjQgaXMgaG9wZWZ1bGx5IHNhZmUgZm9yIGV2ZXJ5b25lLgotKi8K LSAgICB4MjVhZGRyX3QgbG9jYWxfbnVhID0geydcMCd9OyAgICAgICAvKiBsb2NhbCB4LjI1IGFk ZHJlc3MgKi8KLSAgICB4MjVhZGRyX3QgcmVtb3RlX251YSA9IHsnXDAnfTsgICAgICAvKiByZW1v dGUgeC4yNSBhZGRyZXNzICovCi0gICAgY2hhciB4MjVuYW1lWzMyXSA9IHsnXDAnfTsgICAgICAg ICAgLyogeDI1IGRldmljZSBuYW1lLCBzeDI1YTAgb3Igc3gyNWExICovCi0gICAgY2hhciB4MjVk ZXZbNjRdID0gICIvZGV2L3gyNXBrdCI7ICAgLyogeDI1IGRldmljZSBpbiAvZGV2ICovCi0gICAg aW50IHgyNXBvcnQgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogcG9ydCB1c2VkIGZvciBYLjI1 IC0gQUlYIG9ubHkgKi8KLSNlbmRpZiAvKiBJQk1YMjUgKi8KLQotI2lmbmRlZiBJQk1YMjUKLS8q Ci0gIFRoaXMgY29uZGl0aW9uIGlzIHVucmVsYXRlZCB0byB0aGUgYWJvdmUgSUJNWDI1IGNvbmRp dGlvbi4KLSAgSUJNIFguMjUgZG9lc24ndCBoYXZlIFBBRCBzdXBwb3J0LgotKi8KLSAgICBDSEFS IHBhZHBhcm1zW01BWFBBRFBBUk1TKzFdOyAvKiBYLjMgcGFyYW1ldGVycyAqLwotI2VuZGlmIC8q IElCTVgyNSAqLwotI2VuZGlmIC8qIEFOWVgyNSAqLwotCi0vKiBPdGhlciBpdGVtcyAqLwotCi1p bnQgaXNpbnRlcnJ1cHRlZCA9IDA7ICAgICAgICAgICAgICAgICAgLyogVXNlZCBpbiBleGNlcHRp b24gaGFuZGxpbmcgKi8KLWludCB3aGF0ID0gV19JTklUOyAgICAgICAgICAgICAgICAgICAgICAv KiBXaGF0IEkgYW0gZG9pbmcgKi8KLWludCBsYXN0eGZlciA9IDA7ICAgICAgICAgICAgICAgICAg ICAgICAvKiBMYXN0IHRyYW5zZmVyIChzZW5kIG9yIHJlY2VpdmUpICovCi0KLWV4dGVybiBpbnQg bWRtdHlwOyAgICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSAoL25ldHdvcmspIHR5cGUgKi8K LQotI2lmZGVmIE5UCi1leHRlcm4gaW50IFN0YXJ0ZWRGcm9tRGlhbGVyOwotI2lmZGVmIE5UU0lH Ci1leHRlcm4gaW50IFRsc0luZGV4OwotI2VuZGlmIC8qIE5UU0lHICovCi0jaWZkZWYgTlRBU00K LXVuc2lnbmVkIGxvbmcgRVNQVG9SZXN0b3JlOyAgICAgICAgICAgICAvKiBEaXR0byAqLwotI2Vu ZGlmIC8qIE5UQVNNICovCi0jZW5kaWYgLyogTlQgKi8KLQotI2lmZGVmIE9TMlBNCi1pbnQgb3My cG0gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT1MvMiBQcmVzZW50YXRpb24gTWFu YWdlciBmbGFnICovCi0jZW5kaWYgLyogT1MyUE0gKi8KLQotLyogVGVybWluYWwgc2NyZWVuIHNp emUsIGlmIGtub3duLCAtMSBtZWFucyB1bmtub3duLiAqLwotCi0jaWZkZWYgT1MyCi0jaW5jbHVk ZSAiY2tvY29uLmgiCi0jaWZkZWYgS1VJCi1pbnQgdHRfcm93c1tWTlVNXSA9IHsyNCwyNCwyNSwx fTsgICAgICAgLyogUm93cyAoaGVpZ2h0KSAqLwotaW50IHR0X2NvbHNbVk5VTV0gPSB7ODAsODAs ODAsODB9OyAgICAgIC8qIENvbHVtbnMgKHdpZHRoKSAqLwotaW50IGNtZF9yb3dzID0gMjQsIGNt ZF9jb2xzID0gODA7ICAgICAgIC8qIENvbW1hbmQvY29uc29sZSBzY3JlZW4gZGltZW5zaW9ucyAq LwotI2Vsc2UgLyogS1VJICovCi1pbnQgdHRfcm93c1tWTlVNXSA9IHstMSwyNCwyNSwxfTsgICAg ICAgLyogUm93cyAoaGVpZ2h0KSAqLwotaW50IHR0X2NvbHNbVk5VTV0gPSB7LTEsODAsODAsODB9 OyAgICAgIC8qIENvbHVtbnMgKHdpZHRoKSAqLwotaW50IGNtZF9yb3dzID0gLTEsIGNtZF9jb2xz ID0gLTE7ICAgICAgIC8qIENvbW1hbmQvY29uc29sZSBzY3JlZW4gZGltZW5zaW9ucyAqLwotI2Vu ZGlmIC8qIEtVSSAqLwotaW50IGs5NXN0ZGlvID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8q IFN0ZGlvIHRocmVhZHMgKi8KLWludCB0dF9iZWxsID0gWFlCX0FVRCB8IFhZQl9TWVM7ICAgICAg ICAvKiBCRUxMIEFVRElCTEUgKHN5c3RlbSBzb3VuZHMpICovCi0jZWxzZSAvKiBPUzIgKi8KLWlu dCB0dF9yb3dzID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBSb3dzIChoZWlnaHQpICov Ci1pbnQgdHRfY29scyA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgLyogQ29sdW1ucyAod2lk dGgpICovCi1pbnQgY21kX3Jvd3MgPSAyNCwgY21kX2NvbHMgPSA4MDsgICAgICAgLyogQ29tbWFu ZC9jb25zb2xlIHNjcmVlbiBkaW1lbnNpb25zICovCi1pbnQgdHRfYmVsbCA9IFhZQl9BVUQ7ICAg ICAgICAgICAgICAgICAgLyogQkVMTCBPTiAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi1pbnQgdHRf cHJpbnQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogVHJhbnNwYXJlbnQgcHJpbnQgZGlz YWJsZWQgKi8KLWludCB0dF9lc2NhcGUgPSAxOyAgICAgICAgICAgICAgICAgICAgICAvKiBFc2Nh cGluZyBiYWNrIGlzIGVuYWJsZWQgKi8KLWludCB0dF9zY3JvbGwgPSAxOyAgICAgICAgICAgICAg ICAgICAgICAvKiBTY3JvbGxpbmcgb3BlcmF0aW9ucyBhcmUgZW5hYmxlZCAqLwotCi1pbnQgdG5f ZXhpdCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRXhpdCBvbiBkaXNjb25uZWN0ICov Ci0KLWludCBleGl0b25jbG9zZSA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBFeGl0IG9uIGNs b3NlICovCi1pbnQgZXhpdGhhbmd1cCA9IDE7ICAgICAgICAgICAgICAgICAgICAgLyogSGFuZ3Vw IG9uIGV4aXQgKi8KLWludCBoYXZlbGluZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBT RVQgTElORSBvciBTRVQgSE9TVCBpbiBlZmZlY3QgKi8KLWludCB0bGV2ZWwgPSAtMTsgICAgICAg ICAgICAgICAgICAgICAgICAvKiBUYWtlLWZpbGUgY29tbWFuZCBsZXZlbCAqLwotaW50IGhpbnRz ID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdoZXRoZXIgdG8gZ2l2ZSBoaW50cyAq LwotCi0jaWZkZWYgTk9MT0NBTAotaW50IHJlbW9ubHkgPSAxOyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFJlbW90ZS1tb2RlLW9ubHkgYWR2aXNvcnkgKC1SKSAqLwotaW50IG5vbG9jYWwgPSAx OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlbW90ZS1vbmx5IHN0cmljdGx5IGVuZm9yY2Vk ICovCi0jZWxzZQotaW50IHJlbW9ubHkgPSAwOwotaW50IG5vbG9jYWwgPSAwOwotaW50IGN4X3N0 YXR1cyA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIENPTk5FQ1QgcmV0dXJuIHN0YXR1cyAq LwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmbmRlZiBOT1NQTAotZXh0ZXJuIGludCBjbWRs dmw7ICAgICAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgbGV2ZWwgKi8KLWV4dGVybiBpbnQg bWFjbHZsOyAgICAgICAgICAgICAgICAgICAgICAvKiBNYWNybyBpbnZvY2F0aW9uIGxldmVsICov Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotaW50IHByb3RvY29sICA9IFBST1RPX0s7ICAgICAgICAg ICAgICAgIC8qIEZpbGUgdHJhbnNmZXIgcHJvdG9jb2wgPSBLZXJtaXQgKi8KLQotI2lmZGVmIE5F V0RFRkFVTFRTCi1pbnQgcHJlZml4aW5nID0gUFhfQ0FVOwotI2Vsc2UKLWludCBwcmVmaXhpbmcg PSBQWF9BTEw7Ci0jZW5kaWYgLyogTkVXREVGQVVMVFMgKi8KLQotZXh0ZXJuIHNob3J0IGN0bHBb XTsgICAgICAgICAgICAgICAgICAgIC8qIENvbnRyb2wtcHJlZml4IHRhYmxlICovCi0KLWludCBj YXJyaWVyID0gQ0FSX0FVVDsgICAgICAgICAgICAgICAgICAvKiBQYXkgYXR0ZW50aW9uIHRvIGNh cnJpZXIgc2lnbmFsICovCi1pbnQgY2R0aW1vID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAg LyogQ2FycmllciB3YWl0IHRpbWVvdXQgKi8KLWludCB4aXRzdGEgPSBHT09EX0VYSVQ7ICAgICAg ICAgICAgICAgICAvKiBQcm9ncmFtIGV4aXQgc3RhdHVzICovCi0KLSNpZmRlZiBWTVMgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IGZpbGVuYW1lIGNvbGxpc2lvbiBhY3Rp b24gKi8KLWludCBmbmNhY3QgPSBYWUZYX1g7ICAgICAgICAgICAgICAgICAgICAvKiBSRVBMQUNF IGZvciBWTVMgKi8KLSNlbHNlCi1pbnQgZm5jYWN0ID0gWFlGWF9COyAgICAgICAgICAgICAgICAg ICAgLyogQkFDS1VQIGZvciBldmVyeWJvZHkgZWxzZSAqLwotI2VuZGlmIC8qIFZNUyAqLwotCi1p bnQgZm5jc2F2ID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIHNhdmluZyAmIHJl c3RvcmluZyB0aGUgYWJvdmUgKi8KLWludCBiZ3NldCA9IC0xOyAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBCQUNLR1JPVU5EIG1vZGUgc2V0IGV4cGxpY2l0bHkgKi8KLQotaW50IGNtZGludCA9 IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEludGVycnVwdHMgYXJlIGFsbG93ZWQgKi8K LSNpZmRlZiBVTklYCi1pbnQgeHN1c3BlbmQgPSBERlNVU1A7CQkJLyogV2hldGhlciBTVVNQRU5E IGNvbW1hbmQsIGV0YywgKi8KLSNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBpcyB0byBiZSBhbGxvd2VkLiAqLwotaW50IHhzdXNwZW5kID0gMDsKLSNlbmRpZiAvKiBV TklYICovCi0KLS8qIFN0YXRpc3RpY3MgdmFyaWFibGVzICovCi0KLUNLX09GRl9UCi0gICAgZmxj aSwgICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJhY3RlcnMgZnJvbSBsaW5lLCBjdXJyZW50 IGZpbGUgKi8KLSAgICBmbGNvLCAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcnMgdG8gbGlu ZSwgY3VycmVudCBmaWxlICAqLwotICAgIHRsY2ksICAgICAgICAgICAgICAgICAgICAgICAvKiBD aGFycyBmcm9tIGxpbmUgaW4gdHJhbnNhY3Rpb24gKi8KLSAgICB0bGNvLCAgICAgICAgICAgICAg ICAgICAgICAgLyogQ2hhcnMgdG8gbGluZSBpbiB0cmFuc2FjdGlvbiAqLwotICAgIGZmYywgICAg ICAgICAgICAgICAgICAgICAgICAvKiBDaGFycyB0by9mcm9tIGN1cnJlbnQgZmlsZSAqLwotICAg IHRmYzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFycyB0by9mcm9tIGZpbGVzIGluIHRy YW5zYWN0aW9uICovCi0KLWxvbmcgZmlsY250LCAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVy IG9mIGZpbGVzIGluIHRyYW5zYWN0aW9uICovCi0gICAgZmlscmVqLCAgICAgICAgICAgICAgICAg ICAgIC8qIE51bWJlciBvZiBmaWxlcyByZWplY3RlZCBpbiB0cmFuc2FjdGlvbiAqLwotICAgIGNw cyA9IDBMLCAgICAgICAgICAgICAgICAgICAvKiBDaGFycy9zZWMgbGFzdCB0cmFuc2ZlciAqLwot ICAgIHBlYWtjcHMgPSAwTCwgICAgICAgICAgICAgICAvKiBQZWFrIGNoYXJzL3NlYyBsYXN0IHRy YW5zZmVyICovCi0gICAgY2N1LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnRyb2wgY2hh cnMgdW5wcmVmaXhlZCBpbiB0cmFuc2FjdGlvbiAqLwotICAgIGNjcCwgICAgICAgICAgICAgICAg ICAgICAgICAvKiBDb250cm9sIGNoYXJzIHByZWZpeGVkIGluIHRyYW5zYWN0aW9uICovCi0gICAg cnB0bjsgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlcGVhdGVkIGNoYXJhY3RlcnMgY29tcHJl c3NlZCAqLwotCi1pbnQgdHNlY3MgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2Vj b25kcyBmb3IgdHJhbnNhY3Rpb24gKi8KLWludCBmc2VjcyA9IDA7ICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBQZXItZmlsZSB0aW1lciAqLwotCi0jaWZkZWYgR0ZUSU1FUgotQ0tGTE9BVAot ICBmcGZzZWNzID0gMC4wLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsb2F0aW5nIHBvaW50 IHBlci1maWxlIHRpbWVyICovCi0gIGZwdHNlY3MgPSAwLjA7ICAgICAgICAgICAgICAgICAgICAg ICAgLyogYW5kIHBlci10cmFuc2FjdGlvbiB0aW1lciAqLwotI2VuZGlmIC8qIEdGVElNRVIgKi8K LQotLyogRmxhZ3MgKi8KLQotaW50IGRlYmxvZyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAg IC8qIERlYnVnIGxvZyBpcyBvcGVuICovCi0gICAgZGVib2sgPSAxLCAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogRGVidWcgbG9nIGlzIG5vdCBkaXNhYmxlZCAqLwotICAgIGRlYnhsZW4gPSA1 NCwgICAgICAgICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgbGVuZ3RoIGZvciBkZWJ1ZyBzdHJp bmdzICovCi0gICAgZGVic2VzID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBm b3IgREVCVUcgU0VTU0lPTiAqLwotICAgIGRlYnRpbSA9IDAsICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEluY2x1ZGUgdGltZXN0YW1wIGluIGRlYnVnIGxvZyAqLwotICAgIGRlYm1zZyA9IDAs ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlYnVnIG1lc3NhZ2VzIG9uL29mZiAqLwotICAg IHBrdGxvZyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIHBhY2tldCBs b2dnaW5nICovCi0gICAgc2VzbG9nID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2Vz c2lvbiBsb2dnaW5nICovCi0gICAgZGlhbG9nID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAg LyogRElBTCBsb2dnaW5nICovCi0gICAgdHJhbG9nID0gMCwgICAgICAgICAgICAgICAgICAgICAg ICAgLyogVHJhbnNhY3Rpb24gbG9nZ2luZyAqLwotICAgIHRsb2dmbXQgPSAxLCAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFRyYW5zYWN0aW9uIGxvZyBmb3JtYXQgKHZlcmJvc2UpICovCi0gICAg dGxvZ3NlcCA9IChpbnQpJywnLCAgICAgICAgICAgICAgICAgLyogVHJhbnNhY3Rpb24gbG9nIGZp ZWxkIHNlcGFyYXRvciAqLwotICAgIGRpc3BsYSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEZpbGUgdHJhbnNmZXIgZGlzcGxheSBvbi9vZmYgKi8KLSAgICBzdGRvdWYgPSAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBvdXRwdXQgdG8gc3Rkb3V0ICovCi0gICAg c3RkaW5mID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgaW5wdXQgZnJv bSBzdGRpbiAqLwotICAgIHhmbGcgICA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZs YWcgZm9yIFggaW5zdGVhZCBvZiBGIHBhY2tldCAqLwotICAgIGhjZmxnICA9IDAsICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIERvaW5nIEhvc3QgY29tbWFuZCAqLwotICAgIGRlc3QgICA9IERF U1RfRCwgICAgICAgICAgICAgICAgICAgIC8qIERlc3RpbmF0aW9uIGZvciBwYWNrZXQgZGF0YSAq LwotICAgIHpjaGtvZCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHpjaGtvKCkgc2hv dWxkIHdvcmsgZm9yIGRpcnMgdG9vPyAqLwotICAgIHpjaGtpZCA9IDAsICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIHpjaGtpKCkgc2hvdWxkIHdvcmsgZm9yIGRpcnMgdG9vPyAqLwotCi0vKiBJ ZiB5b3UgY2hhbmdlIHRoaXMsIGFsc28gc2VlIHN0cnVjdCBwdGFiIGFib3ZlLi4uICovCi0KLSNp ZmRlZiBPUzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBmaWxlIG5h bWUgY29udmVyc2lvbiAqLwotICAgIGZuY252ICA9IFhZRk5fTCwgICAgICAgICAgICAgICAgICAg IC8qIERlZmF1bHQgaXMgTGl0ZXJhbCBpbiBPUy8yLCAqLwotICAgIGZfc2F2ZSA9IFhZRk5fTCwg ICAgICAgICAgICAgICAgICAgIC8qIChzYXZlZCBjb3B5IG9mIHNhbWUpICovCi0jZWxzZQotICAg IGZuY252ICA9IFhZRk5fQywgICAgICAgICAgICAgICAgICAgIC8qIGVsc2V3aGVyZSBDb252ZXJ0 IHRoZW0gKi8KLSAgICBmX3NhdmUgPSBYWUZOX0MsICAgICAgICAgICAgICAgICAgICAvKiAoZGl0 dG8pICovCi0jZW5kaWYgLyogT1MyICovCi0KLSAgICBmbnNwYXRoID0gUEFUSF9PRkYsICAgICAg ICAgICAgICAgICAvKiBTZW5kIGZpbGUgcGF0aCAqLwotICAgIGZucnBhdGggPSBQQVRIX0FVVE8s ICAgICAgICAgICAgICAgIC8qIFJlY2VpdmUgZmlsZSBwYXRoICovCi0gICAgZmFja3BhdGggPSAx LCAgICAgICAgICAgICAgICAgICAgICAgLyogU2VuZCBiYWNrIHBhdGggaW4gQUNLIHRvIEYgKi8K LSAgICBiaW5hcnkgPSBYWUZUX0IsICAgICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IGZpbGUg dHJhbnNmZXIgbW9kZSAqLwotICAgIGJfc2F2ZSA9IFhZRlRfQiwgICAgICAgICAgICAgICAgICAg IC8qIFNhdmVkIGZpbGUgbW9kZSAqLwotICAgIGVvZm1ldGhvZCA9IDAsICAgICAgICAgICAgICAg ICAgICAgIC8qIEVPRiBkZXRlY3Rpb24gbWV0aG9kIChsZW5ndGgpICovCi0KLSNpZmRlZiBPUzIK LSAgICBjdXJzb3Jfc2F2ZSA9IC0xLCAgICAgICAgICAgICAgICAgICAvKiBDdXJzb3Igc3RhdGUg Ki8KLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgIHhmZXJtb2RlID0gWE1PREVfQSwgICAgICAgICAg ICAgICAgIC8qIFRyYW5zZmVyIG1vZGUsIG1hbnVhbCBvciBhdXRvICovCi0gICAgeGZpbGV0eXBl ID0gLTEsICAgICAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXIgb25seSB0ZXh0IChvciBiaW5h cnkpICovCi0gICAgcmVjdXJzaXZlID0gMCwgICAgICAgICAgICAgICAgICAgICAgLyogUmVjdXJz aXZlIGRpcmVjdG9yeSB0cmF2ZXJzYWwgKi8KLSAgICBub2xpbmtzICAgPSAyLCAgICAgICAgICAg ICAgICAgICAgICAvKiBEb24ndCBmb2xsb3cgc3ltYm9saWMgbGlua3MgKi8KLSAgICBza2lwYnVw ICAgPSAwLCAgICAgICAgICAgICAgICAgICAgICAvKiBTa2lwIGJhY2t1cCBmaWxlcyB3aGVuIHNl bmRpbmcgKi8KLSAgICBzZW5kbW9kZSA9IFNNX1NFTkQsICAgICAgICAgICAgICAgICAvKiBXaGlj aCB0eXBlIG9mIFNFTkQgb3BlcmF0aW9uICovCi0gICAgc2xvc3RhcnQgID0gMSwgICAgICAgICAg ICAgICAgICAgICAgLyogU2xvdyBzdGFydCAoZ3JvdyBwYWNrZXQgbGVuZ3RocykgKi8KLSAgICBj bWFzayAgPSAwMzc3LCAgICAgICAgICAgICAgICAgICAgICAvKiBDT05ORUNUICh0ZXJtaW5hbCkg Ynl0ZSBtYXNrICovCi0gICAgZm1hc2sgID0gMDM3NywgICAgICAgICAgICAgICAgICAgICAgLyog RmlsZSBieXRlIG1hc2sgKi8KLSAgICBja3dhcm4gPSAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBGbGFnIGZvciBmaWxlIHdhcm5pbmcgKi8KLSAgICBxdWlldCAgPSAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBCZSBxdWlldCBkdXJpbmcgZmlsZSB0cmFuc2ZlciAqLwotICAgIGxv Y2FsICA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEgPSBsb2NhbCBtb2RlLCAwID0g cmVtb3RlIG1vZGUgKi8KLSAgICBjeHR5cGUgPSBDWFRfUkVNT1RFLCAgICAgICAgICAgICAgICAv KiBDb25uZWN0aW9uIHR5cGUgKi8KLSAgICBzZXJ2ZXIgPSAwLCAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBGbGFnIGZvciBJIEFtIFNlcnZlciAqLwotICAgIHF1ZXJ5ID0gMCwgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIFF1ZXJ5IGFjdGl2ZSAqLwotICAgIGp1c3RvbmUg PSAwLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlcnZlciBzaG91bGQgZG8gSnVzdCBPbmUg Y29tbWFuZCAqLwotICAgIHVyc2VydmVyID0gMCwgICAgICAgICAgICAgICAgICAgICAgIC8qIEZs YWcgZm9yIFlvdSBBcmUgU2VydmVyICovCi0gICAgYnllX2FjdGl2ZSA9IDAsICAgICAgICAgICAg ICAgICAgICAgLyogRmxhZyBmb3IgQllFIGNvbW1hbmQgYWN0aXZlICovCi0gICAgZGlyYWN0aXZl ID0gMCwgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgRElSRUNUT1JZIGNvbW1hbmQg YWN0aXZlICovCi0gICAgY2RhY3RpdmUgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgLyogRmxh ZyBmb3IgQ0QgY29tbWFuZCBhY3RpdmUgKi8KLSAgICBjZmxnICAgPSAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBDb25uZWN0IGJlZm9yZSB0cmFuc2FjdGlvbiAqLwotICAgIGNuZmxnICA9 IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbm5lY3QgYWZ0ZXIgdHJhbnNhY3Rpb24g Ki8KLSAgICBjeHNlZW4gPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBj YW5jZWxsaW5nIGEgZmlsZSAqLwotICAgIGN6c2VlbiA9IDAsICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEZsYWcgZm9yIGNhbmNlbGxpbmcgZmlsZSBncm91cCAqLwotICAgIGZhdGFsaW8gPSAw LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIGZhdGFsIGkvbyBlcnJvciAqLwot ICAgIGRpc2NhcmQgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIGZpbGUg dG8gYmUgZGlzY2FyZGVkICovCi0gICAga2VlcCA9IFNFVF9BVVRPLCAgICAgICAgICAgICAgICAg ICAgLyogS2VlcCBpbmNvbXBsZXRlIGZpbGVzID0gQVVUTyAqLwotICAgIHVua2NzID0gMSwgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEtlZXAgZmlsZSB3L3Vua25vd24gY2hhcmFjdGVyIHNl dCAqLwotI2lmZGVmIFZNUwotICAgIGZpbGVwZWVrID0gMCwgICAgICAgICAgICAgICAgICAgICAg IC8qIEluc3BlY3Rpb24gb2YgZmlsZXMgKi8KLSNlbHNlCi0jaWZkZWYgZGF0Z2VuZXJhbAotICAg IGZpbGVwZWVrID0gMCwKLSNlbHNlCi0gICAgZmlsZXBlZWsgPSAxLAotI2VuZGlmIC8qIGRhdGFn ZW5lcmFsICovCi0jZW5kaWYgLyogVk1TICovCi0gICAgbmFrc3RhdGUgPSAwLCAgICAgICAgICAg ICAgICAgICAgICAgLyogSW4gYSBzdGF0ZSB3aGVyZSB3ZSBjYW4gc2VuZCBOQUtzICovCi0gICAg ZGJsY2hhciA9IC0xLCAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVyIHRvIGRvdWJs ZSB3aGVuIHNlbmRpbmcgKi8KLSAgICBtb3ZpbmcgPSAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBNT1ZFID0gc2VuZCwgdGhlbiBkZWxldGUgKi8KLSAgICByZWxpYWJsZSA9IFNFVF9BVVRP LCAgICAgICAgICAgICAgICAvKiBOb256ZXJvIGlmIHRyYW5zcG9ydCBpcyByZWxpYWJsZSAqLwot ICAgIHhyZWxpYWJsZSA9IC0xLAotICAgIHNldHJlbGlhYmxlID0gMCwKLSAgICB1cmNsZWFyID0g MCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb256ZXJvIGZvciBjbGVhciBjaGFubmVsIHRv IHlvdSAqLwotICAgIGNsZWFycnEgPSBTRVRfQVVUTywgICAgICAgICAgICAgICAgIC8qIFNFVCBD TEVBUkNIQU5FTCB2YWx1ZSAqLwotICAgIGNsZWFyZWQgPSAwLAotICAgIHN0cmVhbWluZyA9IDAs ICAgICAgICAgICAgICAgICAgICAgIC8qIE5vbnplcm8gaWYgc3RyZWFtaW5nIGlzIGFjdGl2ZSAq LwotICAgIHN0cmVhbW9rID0gMCwgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vbnplcm8gaWYg c3RyZWFtaW5nIG5lZ290aWF0ZWQgKi8KLSAgICBzdHJlYW1ycSA9IFNFVF9BVVRPLCAgICAgICAg ICAgICAgICAvKiBTRVQgU1RSRUFNSU5HIHZhbHVlICovCi0gICAgc3RyZWFtZWQgPSAtMTsgICAg ICAgICAgICAgICAgICAgICAgLyogV2hldGhlciB3ZSBzdHJlYW1lZCBsYXN0IHRpbWUgKi8KLQot Y2hhciAqIHNuZF9tb3ZlID0gTlVMTDsgICAgICAgICAgICAgICAgIC8qIE1vdmUgZmlsZSBhZnRl ciBzZW5kaW5nIGl0ICovCi1jaGFyICogc25kX3JlbmFtZSA9IE5VTEw7ICAgICAgICAgICAgICAg LyogUmVuYW1lIGZpbGUgYWZ0ZXIgc2VuZGluZyBpdCAqLwotY2hhciAqIHJjdl9tb3ZlID0gTlVM TDsgICAgICAgICAgICAgICAgIC8qIE1vdmUgZmlsZSBhZnRlciByZWNlaXZpbmcgaXQgKi8KLWNo YXIgKiByY3ZfcmVuYW1lID0gTlVMTDsgICAgICAgICAgICAgICAvKiBSZW5hbWUgZmlsZSBhZnRl ciByZWNlaXZpbmcgaXQgKi8KLQotY2hhciAqIGdfc25kX21vdmUgPSBOVUxMOwotY2hhciAqIGdf c25kX3JlbmFtZSA9IE5VTEw7Ci1jaGFyICogZ19yY3ZfbW92ZSA9IE5VTEw7Ci1jaGFyICogZ19y Y3ZfcmVuYW1lID0gTlVMTDsKLQotI2lmZGVmIENLX1RSSUdHRVIKLWNoYXIgKnR0X3RyaWdnZXJb VFJJR0dFUlNdID0geyBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwgfTsK LUNIQVIgKnR0X3RybWF0Y2hbVFJJR0dFUlNdID0geyBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEws TlVMTCxOVUxMLE5VTEwgfTsKLWNoYXIgKnRyaWdnZXJ2YWwgPSBOVUxMOwotI2VuZGlmIC8qIENL X1RSSUdHRVIgKi8KLQotaW50IGNreGxvZ2dpbmcgPSAwOyAgICAgICAgICAgICAgICAgICAgIC8q IEZsYWcgZm9yIHN5c2xvZ2dpbmcgYWN0aXZlICovCi1pbnQgaWtkYm9wZW4gPSAwOyAgICAgICAg ICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgSUtTRCBkYXRhYmFzZSBhY3RpdmUgKi8KLWludCBk YmluaXRlZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBJS1NEQiByZWNv cmQgaW5pdCdkICovCi0jaWZuZGVmIENLU1lTTE9HCi1pbnQgY2t4c3lzbG9nID0gMDsgICAgICAg ICAgICAgICAgICAgICAgLyogTG9nZ2luZyBsZXZlbCAwICovCi0jZWxzZQotI2lmZGVmIFNZU0xP R0xFVkVMCi1pbnQgY2t4c3lzbG9nID0gU1lTTE9HTEVWRUw7ICAgICAgICAgICAgLyogTG9nZ2lu ZyBsZXZlbCBzcGVjaWZpZWQgKi8KLSNlbHNlCi1pbnQgY2t4c3lzbG9nID0gU1lTTEdfREY7ICAg ICAgICAgICAgICAgLyogRGVmYXVsdCBsb2dnaW5nIGxldmVsICovCi0jZW5kaWYgLyogU1lTTE9H TEVWRUwgKi8KLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotCi0jaWZuZGVmIE5PSEVMUAotI2lmbmRl ZiBOT0NNREwKLV9QUk9UT1RZUCggVk9JRCBpbmlvcHRobHAsICh2b2lkKSApOyAgICAvKiBDb21t YW5kLWxpbmUgaGVscCBpbml0aWFsaXplciAqLwotI2VuZGlmIC8qIE5PQ01ETCAqLwotI2VuZGlm IC8qIE5PSEVMUCAqLwotCi1fUFJPVE9UWVAoIFZPSUQgZ2V0ZXhlZGlyLCAodm9pZCkgKTsKLV9Q Uk9UT1RZUCggaW50IHB1dG5vdGhpbmcsIChjaGFyKSApOwotCi0jaWZkZWYgSUtTRAotX1BST1RP VFlQKCBWT0lEIGRvaWtzZGluaXQsICh2b2lkKSApOwotX1BST1RPVFlQKCBWT0lEIGlrc2Rpbml0 LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggVk9JRCBkb2lrbG9nLCAodm9pZCkgKTsKLV9QUk9UT1RZ UCggaW50IGRiaW5pdCwgKHZvaWQpICk7Ci0jZW5kaWYgLyogSUtTRCAqLwotCi0vKiBWYXJpYWJs ZXMgcGFzc2VkIGZyb20gY29tbWFuZCBwYXJzZXIgdG8gcHJvdG9jb2wgbW9kdWxlICovCi0KLSNp Zm5kZWYgTk9TUEwKLSNpZm5kZWYgTk9JQ1AKLSNpZmRlZiBDS19BUEMKLV9QUk9UT1RZUCggVk9J RCBhcGNvbmVjdCwgKHZvaWQpICk7Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0jaWZkZWYgT1MyCi1l eHRlcm4gaW50IGluaXR2aWs7Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9JQ1AgKi8K LSNlbmRpZiAvKiBOT1NQTCAqLwotY2hhciAqY2xjbWRzID0gTlVMTDsgICAgICAgICAgICAgICAg ICAgIC8qIFBvaW50ZXIgdG8gY29tbWFuZC1saW5lIGNvbW1hbmRzICovCi0KLSNpZm5kZWYgTk9T RVRLRVkKLWV4dGVybiBLRVkgKmtleW1hcDsKLWV4dGVybiBNQUNSTyAqbWFjcm90YWI7Ci0jZW5k aWYgLyogTk9TRVRLRVkgKi8KLQotI2lmbmRlZiBOT1BVU0gKLWludCBub3B1c2ggPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBQVVNIIGVuYWJsZWQgKi8KLSNlbHNlCi1pbnQgbm9wdXNo ID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUFVTSCBkaXNhYmxlZCAqLwotI2VuZGlm IC8qIE5PUFVTSCAqLwotCi1DSEFSIHNzdGF0ZSAgPSAoQ0hBUikgMDsgICAgICAgICAgICAgICAg LyogU3RhcnRpbmcgc3RhdGUgZm9yIGF1dG9tYXRvbiAqLwotQ0hBUiB6c3RhdGUgID0gKENIQVIp IDA7ICAgICAgICAgICAgICAgIC8qIEZvciByZW1lbWJlcmluZyBzc3RhdGUgKi8KLWNoYXIgKiBw cmludGVybmFtZSA9IE5VTEw7ICAgICAgICAgICAgICAvKiBOVUxMIGlmIHByaW50ZXIgbm90IHJl ZGlyZWN0ZWQgKi8KLWludCBwcmludHBpcGUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBG b3IgU0VUIFBSSU5URVIgKi8KLWludCBub3ByaW50ZXIgPSAwOwotCi0jaWZuZGVmIE5PWEZFUgot Y2hhciAqY21hcmcgID0gIiI7ICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gY29t bWFuZCBkYXRhICovCi1jaGFyICpjbWFyZzIgPSAiIjsgICAgICAgICAgICAgICAgICAgICAgLyog UG9pbnRlciB0byAybmQgY29tbWFuZCBkYXRhICovCi1jaGFyICoqY21saXN0OyAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBmaWxlIGxpc3QgaW4gYXJndiAqLwotCi0jaWZk ZWYgQ0tfQVVUT0RMICAgICAgICAgICAgICAgICAgICAgICAgLyogQXV0b2Rvd25sb2FkICovCi1p bnQgYXV0b2RsID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5hYmxlZCBieSBkZWZh dWx0ICovCi0jZWxzZQotaW50IGF1dG9kbCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8q IChvciBpZiBub3QgaW1wbGVtZW50ZWQpLiAqLwotI2VuZGlmIC8qIENLX0FVVE9ETCAqLwotaW50 IGFkbF9lcnIgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEgPSBzdG9wIG9uIGVycm9y ICovCi0jaWZkZWYgS1VJCi1pbnQgYWRsX2FzayA9IDE7CQkJLyogMSA9IGZpbGUgZGlhbG9nIG9u IGF1dG9kb3dubG9hZCAqLwotI2Vsc2UKLWludCBhZGxfYXNrID0gMDsJCQkvKiAwID0gbm8gZmls ZSBkaWFsb2cgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSNpZmRlZiBPUzIgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBBVVRPRE9XTkxPQUQgcGFyYW1ldGVycyAqLwotaW50IGFkbF9rbW9k ZSA9IEFETF9QQUNLLCAgICAgICAgICAgICAgIC8qIE1hdGNoIFBhY2tldCB0byBzaWduYWwgZG93 bmxvYWQgKi8KLSAgICBhZGxfem1vZGUgPSBBRExfUEFDSzsKLWNoYXIgKiBhZGxfa3N0ciA9IE5V TEw7ICAgICAgICAgICAgICAgICAvKiBLRVJNSVQgRG93bmxvYWQgU3RyaW5nICovCi1jaGFyICog YWRsX3pzdHIgPSBOVUxMOyAgICAgICAgICAgICAgICAgLyogWk1PREVNIERvd25sb2FkIFN0cmlu ZyAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi1pbnQgcmVtZmlsZSA9IDAsIHJlbXBpcGUgPSAwLCBy ZW1hcHBkID0gMDsgLyogUkVNT1RFIG91dHB1dCByZWRpcmVjdGlvbiAqLwotY2hhciAqIHJlbWRl c3QgPSBOVUxMOwotCi0jaWZuZGVmIE5PU0VSVkVSCi0vKgotICBTZXJ2ZXIgc2VydmljZXM6Ci0g ICAwID0gZGlzYWJsZWQKLSAgIDEgPSBlbmFibGVkIGluIGxvY2FsIG1vZGUKLSAgIDIgPSBlbmFi bGVkIGluIHJlbW90ZSBtb2RlCi0gICAzID0gZW5hYmxlZCBpbiBib3RoIGxvY2FsIGFuZCByZW1v dGUgbW9kZXMKLSAgb25seSBhcyBpbml0aWFsIChkZWZhdWx0KSB2YWx1ZXMuCi0qLwotaW50IGVu X3hpdCA9IDI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVYSVQgKi8KLWludCBlbl9jd2Qg PSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDRC9DV0QgKi8KLWludCBlbl9jcHkgPSAz OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDT1BZICAgKi8KLWludCBlbl9kZWwgPSAyOyAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBERUxFVEUgKi8KLWludCBlbl9ta2QgPSAzOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBNS0RJUiAqLwotaW50IGVuX3JtZCA9IDI7ICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFJNRElSICovCi1pbnQgZW5fZGlyID0gMzsgICAgICAgICAgICAg ICAgICAgICAgICAgLyogRElSRUNUT1JZICovCi1pbnQgZW5fZmluID0gMzsgICAgICAgICAgICAg ICAgICAgICAgICAgLyogRklOSVNIICovCi1pbnQgZW5fZ2V0ID0gMzsgICAgICAgICAgICAgICAg ICAgICAgICAgLyogR0VUICovCi0jaWZuZGVmIE5PUFVTSAotaW50IGVuX2hvcyA9IDI7ICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEhPU1QgZW5hYmxlZCAqLwotI2Vsc2UKLWludCBlbl9ob3Mg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIT1NUIGRpc2FibGVkICovCi0jZW5kaWYg LyogTk9QVVNIICovCi1pbnQgZW5fcmVuID0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgLyog UkVOQU1FICovCi1pbnQgZW5fc2VuID0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0VO RCAqLwotaW50IGVuX3NldCA9IDM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCAqLwot aW50IGVuX3NwYSA9IDM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNQQUNFICovCi1pbnQg ZW5fdHlwID0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogVFlQRSAqLwotaW50IGVuX3do byA9IDM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdITyAqLwotI2lmZGVmIGRhdGFnZW5l cmFsCi0vKiBEYXRhIEdlbmVyYWwgQU9TL1ZTIGNhbid0IGRvIHRoaXMgKi8KLWludCBlbl9ieWUg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCWUUgKi8KLSNlbHNlCi1pbnQgZW5fYnll ID0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUENzIGluIGxvY2FsIG1vZGUuLi4gKi8K LSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotaW50IGVuX2FzZyA9IDM7ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEFTU0lHTiAqLwotaW50IGVuX3F1ZSA9IDM7ICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFFVRVJZICovCi1pbnQgZW5fcmV0ID0gMjsgICAgICAgICAgICAgICAgICAgICAg ICAgLyogUkVUUklFVkUgKi8KLWludCBlbl9tYWkgPSAzOyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBNQUlMICovCi1pbnQgZW5fcHJpID0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgLyog UFJJTlQgKi8KLWludCBlbl9lbmEgPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFTkFC TEUgKi8KLSNlbHNlCi1pbnQgZW5feGl0ID0gMCwgZW5fY3dkID0gMCwgZW5fY3B5ID0gMCwgZW5f ZGVsID0gMCwgZW5fbWtkID0gMCwgZW5fcm1kID0gMCwKLSAgICBlbl9kaXIgPSAwLCBlbl9maW4g PSAwLCBlbl9nZXQgPSAwLCBlbl9ob3MgPSAwLCBlbl9yZW4gPSAwLCBlbl9zZW4gPSAwLAotICAg IGVuX3NldCA9IDAsIGVuX3NwYSA9IDAsIGVuX3R5cCA9IDAsIGVuX3dobyA9IDAsIGVuX2J5ZSA9 IDAsIGVuX2FzZyA9IDAsCi0gICAgZW5fcXVlID0gMCwgZW5fcmV0ID0gMCwgZW5fbWFpID0gMCwg ZW5fcHJpID0gMCwgZW5fZW5hID0gMDsKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotI2VuZGlmIC8q IE5PWEZFUiAqLwotCi0vKiBNaXNjZWxsYW5lb3VzICovCi0KLWNoYXIgKip4YXJndjsgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBHbG9iYWwgY29waWVzIG9mIGFyZ3YgKi8KLWludCB4YXJn YzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgYXJnYyAgKi8KLWludCB4YXJn czsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbiBpbW11dGFibGUgY29weSBvZiBh cmdjICovCi1jaGFyICp4YXJnMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYW5kIG9m IGFyZ3ZbMF0gKi8KLWNoYXIgKnBpcGVkYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQ b2ludGVyIHRvIC1QIChwaXBlKSBkYXRhICovCi0KLWV4dGVybiBjaGFyICpkZnR0eTsgICAgICAg ICAgICAgICAgICAgICAvKiBEZWZhdWx0IHR0eSBuYW1lIGZyb20gY2s/dGlvLmMgKi8KLWV4dGVy biBpbnQgZGZsb2M7ICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IGxvY2F0aW9uOiBy ZW1vdGUvbG9jYWwgKi8KLWV4dGVybiBpbnQgZGZwcnR5OyAgICAgICAgICAgICAgICAgICAgICAv KiBEZWZhdWx0IHBhcml0eSAqLwotZXh0ZXJuIGludCBkZmZsb3c7ICAgICAgICAgICAgICAgICAg ICAgIC8qIERlZmF1bHQgZmxvdyBjb250cm9sICovCi0KLSNpZmRlZiBUTkNPREUKLWV4dGVybiBp bnQgdG5fZGViOwotI2VuZGlmIC8qIFROQ09ERSAqLwotLyoKLSAgQnVmZmVyZWQgZmlsZSBpbnB1 dCBhbmQgb3V0cHV0IGJ1ZmZlcnMuICBTZWUgZ2V0cGt0KCkgaW4gY2tjZm5zLmMKLSAgYW5kIHpv dXRkdW1wKCkgaW4gdGhlIHN5c3RlbS1kZXBlbmRlbnQgZmlsZSBpL28gbW9kdWxlICh1c3VhbGx5 IGNrP2Zpby5jKS4KLSovCi0jaWZuZGVmIERZTkFNSUMKLS8qIE5vdyB3ZSBhbGxvY2F0ZSB0aGVt IGR5bmFtaWNhbGx5LCBzZWUgZ2V0aW9icygpIGJlbG93LiAqLwotY2hhciB6aW5idWZmZXJbSU5C VUZTSVpFXSwgem91dGJ1ZmZlcltPQlVGU0laRV07Ci0jZW5kaWYgLyogRFlOQU1JQyAqLwotY2hh ciAqemlucHRyLCAqem91dHB0cjsKLWludCB6aW5jbnQsIHpvdXRjbnQ7Ci1pbnQgem9idWZzaXpl ID0gT0JVRlNJWkU7Ci1pbnQgem9mYnVmZmVyID0gMTsKLWludCB6b2ZibG9jayAgPSAxOwotCi0j aWZkZWYgU0VTTElNSVQKLWludCBzZXNsaW1pdCA9IDA7Ci0jZW5kaWYgLyogU0VTTElNSVQgKi8K LQotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0jaW5jbHVkZSAiY2t1YXRoLmgiCi0jZW5kaWYg LyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLQotX1BST1RPVFlQKCBpbnQgZ2V0aW9icywgKFZPSUQp ICk7Ci0KLS8qICBNIEEgSSBOICAtLSAgQy1LZXJtaXQgbWFpbiBwcm9ncmFtICAqLwotCi0jaW5j bHVkZSA8c2lnbmFsLmg+Ci0KLSNpZm5kZWYgVk1TCi0jaW5jbHVkZSA8dGltZS5oPgotI2VuZGlm Ci0KLSNpZm5kZWYgTk9DQ1RSQVAKLSNpbmNsdWRlIDxzZXRqbXAuaD4KLSNpbmNsdWRlICJja2Nz aWcuaCIKLWNram1wYnVmIGNtamJ1ZjsKLSNpZmRlZiBHRU1ET1MgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBTcGVjaWFsIGZvciBBdGFyaSBTVCAqLwotY2NfY2xlYW4oKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgY2FuJ3QgYmUgcmlnaHQ/ICovCi0jZW5kaWYgLyog R0VNRE9TICovCi0jZW5kaWYgLyogTk9DQ1RSQVAgKi8KLQotI2lmbmRlZiBOT1hGRVIKLS8qIElu Zm8gYXNzb2NpYXRlZCB3aXRoIGEgc3lzdGVtIElEICovCi0KLXN0cnVjdCBzeXNkYXRhIHN5c2lk bGlzdFtdID0geyAgICAgICAgICAvKiBBZGQgb3RoZXJzIGFzIG5lZWRlZC4uLiAqLwotICB7ICIw IiwgICJhbm9ueW1vdXMiLCAgICAwLCBOVUwsICAwLCAwLCAwIH0sCi0gIHsgIkExIiwgIkFwcGxl IElJIiwgICAgIDAsIE5VTCwgIDAsIDAsIDMgfSwgLyogZml4IHRoaXMgKi8KLSAgeyAiQTMiLCAi TWFjaW50b3NoIiwgICAgMSwgJzonLCAgMCwgMiwgMSB9LAotICB7ICJENyIsICJWTVMiLCAgICAg ICAgICAwLCAnXScsICAxLCAwLCAwIH0sCi0gIHsgIkRBIiwgIlJTVFMvRSIsICAgICAgIDAsICdd JywgIDEsIDAsIDMgfSwgLyogKGkgdGhpbmsuLi4pICovCi0gIHsgIkRCIiwgIlJUMTEiLCAgICAg ICAgIDAsIE5VTCwgIDEsIDAsIDMgfSwgLyogKG1heWJlLi4uKSAqLwotICB7ICJGMyIsICJBT1Mv VlMiLCAgICAgICAxLCAnOicsICAwLCAwLCAyIH0sCi0gIHsgIkkxIiwgIlZNL0NNUyIsICAgICAg IDAsIE5VTCwgIDAsIDAsIDAgfSwKLSAgeyAiSTIiLCAiTVZTL1RTTyIsICAgICAgMCwgTlVMLCAg MCwgMCwgMCB9LAotICB7ICJJNCIsICJNVVNJQyIsICAgICAgICAwLCBOVUwsICAwLCAwLCAwIH0s Ci0gIHsgIkk3IiwgIkNJQ1MiLCAgICAgICAgIDAsIE5VTCwgIDAsIDAsIDAgfSwKLSAgeyAiSTki LCAiTVZTL1JPU0NPRSIsICAgMCwgTlVMLCAgMCwgMCwgMCB9LAotICB7ICJLMiIsICJBdGFyaSBT VCIsICAgICAxLCAnXFwnLCAxLCAwLCAzIH0sCi0gIHsgIkwzIiwgIkFtaWdhIiwgICAgICAgIDEs ICcvJywgIDEsIDAsIDIgfSwKLSAgeyAiTVYiLCAiU3RyYXR1cyBWT1MiLCAgMSwgJz4nLCAgMCwg MSwgMCB9LAotICB7ICJOMyIsICJBcG9sbG8gQWVnaXMiLCAxLCAnLycsICAwLCAzLCAyIH0sCi0g IHsgIlUxIiwgIlVOSVgiLCAgICAgICAgIDEsICcvJywgIDAsIDMsIDIgfSwKLSAgeyAiVTgiLCAi TVMtRE9TIiwgICAgICAgMSwgJ1xcJywgMSwgMCwgMyB9LAotICB7ICJVRCIsICJPUy05IiwgICAg ICAgICAxLCAnLycsICAwLCAzLCAyIH0sCi0gIHsgIlVOIiwgIldpbmRvd3MtMzIiLCAgIDEsICdc XCcsIDEsIDIsIDMgfSwKLSAgeyAiVU8iLCAiT1MvMiIsICAgICAgICAgMSwgJ1xcJywgMSwgMiwg MyB9Ci19Owotc3RhdGljIGludCBueHhzeXNpZHMgPSAoc2l6ZW9mKHN5c2lkbGlzdCkgLyBzaXpl b2Yoc3RydWN0IHN5c2RhdGEpKTsKLQotLyogR2l2ZW4gYSBLZXJtaXQgc3lzdGVtIElEIGNvZGUs IHJldHVybiB0aGUgYXNzb2NpYXRlZCBuYW1lIHN0cmluZyAqLwotLyogYW5kIHNvbWUgcHJvcGVy dGllcyBvZiB0aGUgZmlsZW5hbWVzLi4uICovCi0KLWNoYXIgKgotZ2V0c3lzaWQocykgY2hhciAq IHM7IHsgICAgICAgICAgICAgICAgIC8qIEdldCBzeXN0ZW0tdHlwZSBuYW1lICovCi0gICAgaW50 IGk7Ci0gICAgaWYgKCFzKSByZXR1cm4oIiIpOwotICAgIGZvciAoaSA9IDA7IGkgPCBueHhzeXNp ZHM7IGkrKykKLSAgICAgIGlmICghc3RyY21wKHN5c2lkbGlzdFtpXS5zaWRfY29kZSxzKSkKLSAg ICAgICAgcmV0dXJuKHN5c2lkbGlzdFtpXS5zaWRfbmFtZSk7Ci0gICAgcmV0dXJuKHMpOwotfQot Ci1pbnQKLWdldHN5c2l4KHMpIGNoYXIgKnM7IHsgICAgICAgICAgICAgICAgICAvKiBHZXQgc3lz dGVtLXR5cGUgaW5kZXggKi8KLSAgICBpbnQgaTsKLSAgICBpZiAoIXMpIHJldHVybigtMSk7Ci0g ICAgZm9yIChpID0gMDsgaSA8IG54eHN5c2lkczsgaSsrKQotICAgICAgaWYgKCFzdHJjbXAoc3lz aWRsaXN0W2ldLnNpZF9jb2RlLHMpKQotICAgICAgICByZXR1cm4oaSk7Ci0gICAgcmV0dXJuKC0x KTsKLX0KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotLyogVGVsbCBpZiBhIHBhdGhuYW1lIGlzIGFi c29sdXRlICh2ZXJzdXMgcmVsYXRpdmUpICovCi0vKiBUaGlzIHNob3VsZCBiZSBwYXJjZWxlZCBv dXQgdG8gZWFjaCBvZiB0aGUgY2sqZmlvLmMgbW9kdWxlcy4uLiAqLwotLyogVk1TIGlzYWJzb2x1 dGUoKSBpcyBub3cgaW4gY2t2ZmlvLmMuICovCi0jaWZuZGVmIFZNUwotaW50Ci1pc2Fic29sdXRl KHBhdGgpIGNoYXIgKiBwYXRoOyB7Ci0gICAgaW50IHJjID0gMDsKLSAgICBpbnQgeDsKLSAgICBp ZiAoIXBhdGgpCi0gICAgICByZXR1cm4oMCk7Ci0gICAgaWYgKCEqcGF0aCkKLSAgICAgIHJldHVy bigwKTsKLSAgICB4ID0gKGludCkgc3RybGVuKHBhdGgpOwotICAgIGRlYnVnKEYxMTEsImlzYWJz b2x1dGUiLHBhdGgseCk7Ci0jaWZkZWYgVU5JWAotICAgIGlmICgqcGF0aCA9PSAnLycKLSNpZmRl ZiBEVElMREUKLSAgICAgICAgfHwgKnBhdGggPT0gJ34nCi0jZW5kaWYgLyogRFRJTERFICovCi0g ICAgICAgICkKLSAgICAgIHJjID0gMTsKLSNlbHNlIC8qIGRlZiBVTklYICovCi0jaWZkZWYgT1My Ci0gICAgaWYgKCpwYXRoID09ICcvJyB8fCAqcGF0aCA9PSAnXFwnKQotICAgICAgcmMgPSAxOwot ICAgIGVsc2UgaWYgKGlzYWxwaGEoKnBhdGgpICYmIHggPiAyKQotICAgICAgaWYgKCoocGF0aCsx KSA9PSAnOicgJiYgKCoocGF0aCArMikgPT0gJy8nIHx8ICoocGF0aCsyKSA9PSAnXFwnKSkKLSAg ICAgICAgcmMgPSAxOwotI2Vsc2UgLyogZGVmIE9TMiAqLwotI2lmZGVmIEFNSUdBCi0gICAgaWYg KCpwYXRoID09ICcvJwotI2lmZGVmIERUSUxERQotICAgICAgICB8fCAqcGF0aCA9PSAnficKLSNl bmRpZiAvKiBEVElMREUgKi8KLSAgICAgICAgKQotICAgICAgcmMgPSAxOwotI2Vsc2UgLyogZGVm IEFNSUdBICovCi0jaWZkZWYgT1NLCi0gICAgaWYgKCpwYXRoID09ICcvJwotI2lmZGVmIERUSUxE RQotICAgICAgICB8fCAqcGF0aCA9PSAnficKLSNlbmRpZiAvKiBEVElMREUgKi8KLSAgICAgICAg KQotICAgICAgcmMgPSAxOwotI2Vsc2UgLyogZGVmIE9TSyAqLwotI2lmZGVmIGRhdGFnZW5lcmFs Ci0gICAgaWYgKCpwYXRoID09ICc6JykKLSAgICAgIHJjID0gMTsKLSNlbHNlIC8qIGRlZiBkYXRh Z2VuZXJhbCAqLwotI2lmZGVmIE1BQwotICAgIHJjID0gMDsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEZpbGwgaW4gbGF0ZXIuLi4gKi8KLSNlbHNlIC8qIGRlZiBNQUMgKi8KLSNpZmRl ZiBTVFJBVFVTCi0gICAgcmMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmls bCBpbiBsYXRlci4uLiAqLwotI2Vsc2UgLyogZGVmIFNUUkFUVVMgKi8KLSNpZmRlZiBHRU1ET1MK LSAgICBpZiAoKnBhdGggPT0gJy8nIHx8ICpwYXRoID09ICdcXCcpCi0gICAgICByYyA9IDE7Ci0g ICAgZWxzZSBpZiAoaXNhbHBoYSgqcGF0aCkgJiYgeCA+IDEpCi0gICAgICBpZiAoKihwYXRoKzEp ID09ICc6JykKLSAgICAgICAgcmMgPSAxOwotI2VuZGlmIC8qIEdFTURPUyAqLwotI2VuZGlmIC8q IFNUUkFUVVMgKi8KLSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwot I2VuZGlmIC8qIE9TSyAqLwotI2VuZGlmIC8qIEFNSUdBICovCi0jZW5kaWYgLyogT1MyICovCi0j ZW5kaWYgLyogVU5JWCAqLwotICAgIGRlYnVnKEYxMDEsImlzYWJzb2x1dGUgcmMiLCIiLHJjKTsK LSAgICByZXR1cm4ocmMpOwotfQotI2VuZGlmIC8qIG5kZWYgVk1TICovCi0KLS8qICBTZWUgaWYg SSBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIGtleWJvYXJkICAqLwotCi1pbnQKLWlzX2FfdHR5 KG4pIGludCBuOyB7Ci0jaWZkZWYgVU5JWAotICAgIGV4dGVybiBpbnQgdHRmZGZsZzsKLSAgICBp ZiAodHRmZGZsZyA+IDApCi0gICAgICByZXR1cm4oMSk7Ci0jZW5kaWYgLyogVU5JWCAqLwotI2lm ZGVmIEtVSQotICAgIHJldHVybiAxOwotI2Vsc2UgLyogS1VJICovCi0jaWZkZWYgTlQKLSAgICBp ZiAoaXNXaW45NSgpKQotICAgICAgcmV0dXJuKDEpOwotICAgIGVsc2UKLSAgICAgIHJldHVybihf aXNhdHR5KG4pKTsKLSNlbHNlCi0jaWZkZWYgSUtTRAotICAgaWYgKGluc2VydmVyKQotICAgICBy ZXR1cm4oMSk7Ci0gICBlbHNlCi0jZW5kaWYgLyogSUtTRCAqLwotICAgICByZXR1cm4oaXNhdHR5 KG4pKTsKLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIEtVSSAqLwotfQotCi0jaWZuZGVmIE5P WEZFUgotVk9JRAotaW5pdHhsaXN0KCkgewotICAgIGV4dGVybiBjaGFyICogc25kZXhjZXB0W10s ICogcmN2ZXhjZXB0W107Ci0gICAgaW50IGk7Ci0gICAgZm9yIChpID0gMDsgaSA8IE5TTkRFWENF UFQ7IGkrKykgewotCXNuZGV4Y2VwdFtpXSA9IE5VTEw7Ci0JcmN2ZXhjZXB0W2ldID0gTlVMTDsK LSAgICB9Ci19Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLS8qIEluaXRpYWxpemUgZmxvdyBjb250 cm9sIHRhYmxlICovCi0KLVZPSUQKLWluaXRmbG93KCkgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBEZWZhdWx0IHZhbHVlcyBmb3IgZmxvdyBjb250cm9sICovCi0jaWZkZWYgVk1TICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIGVhY2gga2luZCBvZiBjb25uZWN0aW9u LiAqLwotICAgIC8qIFRoZSBWTVMgdGVsbmV0IHRlcm1pbmFsIGRyaXZlciB0cmVhdHMgIm5vbmUi IGFzIHJlcXVlc3QgdG8gbG9zZSBjaGFycyAqLwotICAgIGN4Zmxvd1tDWFRfUkVNT1RFXSAgPSBG TE9fWE9OWDsgICAgIC8qIFJlbW90ZSBtb2RlLi4uICovCi0jZWxzZQotI2lmZGVmIEhQVVgKLSAg ICAvKiBEaXR0byBmb3IgSFAtVVggKi8KLSAgICBjeGZsb3dbQ1hUX1JFTU9URV0gID0gRkxPX1hP Tlg7ICAgICAvKiBSZW1vdGUgbW9kZS4uLiAqLwotI2Vsc2UKLSAgICAvKiBUaGUgdGVtcHRhdGlv biBpcyB0byBtYWtlIHRoaXMgb25lIEZMT19LRUVQIGJ1dCBkb24ndCEhISAqLwotICAgIC8qIEl0 IHRvdGFsbHkgd3JlY2tzIGJpbmFyeS1maWxlIHRyYW5zZmVyIHdoZW4gY29taW5nIGluIHZpYSBU ZWxuZXQuICovCi0gICAgLyogSW4gVU5JWCBhdCBsZWFzdC4uLiAqLwotICAgIGN4Zmxvd1tDWFRf UkVNT1RFXSAgPSBGTE9fTk9ORTsKLSNlbmRpZiAvKiBIUFVYICovCi0jZW5kaWYgLyogVk1TICov Ci0KLSNpZmRlZiBWTVMKLSAgICBjeGZsb3dbQ1hUX0RJUkVDVF0gID0gRkxPX1hPTlg7ICAgICAv KiBEaXJlY3Qgc2VyaWFsIGNvbm5lY3Rpb25zLi4uICovCi0jZWxzZQotICAgIGN4Zmxvd1tDWFRf RElSRUNUXSAgPSBGTE9fTk9ORTsKLSNlbmRpZiAvKiBWTVMgKi8KLQotI2lmZGVmIENLX1JUU0NU UwotICAgIGN4Zmxvd1tDWFRfTU9ERU1dICAgPSBGTE9fUlRTQzsgICAgIC8qIE1vZGVtIGNvbm5l Y3Rpb25zLi4uICovCi0jZWxzZQotI2lmZGVmIFZNUwotICAgIGN4Zmxvd1tDWFRfTU9ERU1dICAg PSBGTE9fWE9OWDsKLSNlbHNlCi0gICAgY3hmbG93W0NYVF9NT0RFTV0gICA9IEZMT19OT05FOwot I2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIENLX1JUU0NUUyAqLwotCi0jaWZkZWYgVk1TCi0g ICAgY3hmbG93W0NYVF9UQ1BJUF0gICA9IEZMT19YT05YOyAgICAgLyogVENQL0lQIGNvbm5lY3Rp b25zLi4uICovCi0jZWxzZQotICAgIGN4Zmxvd1tDWFRfVENQSVBdICAgPSBGTE9fTk9ORTsKLSNl bmRpZiAvKiBWTVMgKi8KLQotICAgIGN4Zmxvd1tDWFRfU1NIXSAgICAgPSBGTE9fTk9ORTsKLSAg ICBjeGZsb3dbQ1hUX1gyNV0gICAgID0gRkxPX05PTkU7ICAgICAvKiBPdGhlciBraW5kcyBvZiBu ZXR3b3Jrcy4uLiAqLwotICAgIGN4Zmxvd1tDWFRfREVDTkVUXSAgPSBGTE9fWE9OWDsKLSAgICBj eGZsb3dbQ1hUX0xBVF0gICAgID0gRkxPX1hPTlg7Ci0gICAgY3hmbG93W0NYVF9ORVRCSU9TXSA9 IEZMT19OT05FOwotICAgIGN4Zmxvd1tDWFRfTlBJUEVdICAgPSBGTE9fTk9ORTsKLSAgICBjeGZs b3dbQ1hUX1BJUEVdICAgID0gRkxPX05PTkU7Ci0gICAgZmxvdyA9IGN4Zmxvd1tjeHR5cGVdOyAg ICAgICAgICAgICAgLyogSW5pdGlhbCBmbG93IHNldHRpbmcuICovCi0gICAgZGVidWcoRjEwMSwi aW5pdGZsb3ciLCIiLGZsb3cpOwotfQotCi0jaWZuZGVmIE5PWEZFUgotLyogSW5pdGlhbGl6ZSBm aWxlIHRyYW5zZmVyIHByb3RvY29scyAqLwotCi1WT0lECi1pbml0cHJvdG8oeSwgdXBic3RyLCB1 cHRzdHIsIHNydnN0ciwgc25kYnN0ciwgc25kdHN0ciwgcmN2YnN0ciwgcmN2dHN0cikKLSAgICBp bnQgeTsKLSAgICBjaGFyICogdXBic3RyLCAqIHVwdHN0ciwgKiBzcnZzdHIsICogc25kYnN0ciwg KiBzbmR0c3RyLCAqIHJjdmJzdHIsCi0gICAgKiByY3Z0c3RyOwotLyogaW5pdHByb3RvICovIHsK LQotICAgIGlmICh1cGJzdHIpICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnZlcnQgbnVs bCBzdHJpbmdzICovCi0gICAgICBpZiAoISp1cGJzdHIpICAgICAgICAgICAgICAgICAgICAgLyog dG8gbnVsbCBwb2ludGVycyAqLwotICAgICAgICB1cGJzdHIgPSBOVUxMOwotCi0gICAgaWYgKHVw dHN0cikgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udmVydCBudWxsIHN0cmluZ3MgKi8K LSAgICAgIGlmICghKnVwdHN0cikgICAgICAgICAgICAgICAgICAgICAvKiB0byBudWxsIHBvaW50 ZXJzICovCi0gICAgICAgIHVwdHN0ciA9IE5VTEw7Ci0KLSAgICBpZiAoc25kYnN0cikKLSAgICAg IGlmICghKnNuZGJzdHIpCi0gICAgICAgIHNuZGJzdHIgPSBOVUxMOwotCi0gICAgaWYgKHNuZHRz dHIpCi0gICAgICBpZiAoISpzbmR0c3RyKQotICAgICAgICBzbmR0c3RyID0gTlVMTDsKLQotICAg IGlmIChyY3Zic3RyKQotICAgICAgaWYgKCEqcmN2YnN0cikKLSAgICAgICAgcmN2YnN0ciA9IE5V TEw7Ci0KLSAgICBpZiAocmN2dHN0cikKLSAgICAgIGlmICghKnJjdnRzdHIpCi0gICAgICAgIHJj dnRzdHIgPSBOVUxMOwotCi0gICAgaWYgKHNydnN0cikKLSAgICAgIGlmICghKnNydnN0cikKLSAg ICAgICAgc3J2c3RyID0gTlVMTDsKLQotICAgIHByb3RvY29sID0geTsgICAgICAgICAgICAgICAg ICAgICAgIC8qIFNldCBwcm90b2NvbCAqLwotCi0gICAgaWYgKHB0YWJbcHJvdG9jb2xdLnJwa3Rs ZW4gPiAtMSkKLSAgICAgIHVycHNpeiA9IHB0YWJbcHJvdG9jb2xdLnJwa3RsZW47Ci0gICAgaWYg KHB0YWJbcHJvdG9jb2xdLnNwa3RmbGcgPiAtMSkKLSAgICAgIHNwc2l6ZiA9IHB0YWJbcHJvdG9j b2xdLnNwa3RmbGc7Ci0gICAgaWYgKHB0YWJbcHJvdG9jb2xdLnNwa3RsZW4gPiAtMSkgewotICAg ICAgICBzcHNpeiA9IHB0YWJbcHJvdG9jb2xdLnNwa3RsZW47Ci0gICAgICAgIGRlYnVnKEYxMDEs ImluaXRwcm90byBzcHNpeiIsIiIsc3BzaXopOwotICAgICAgICBpZiAoc3BzaXpmKSB7Ci0gICAg ICAgICAgICBzcHNpenIgPSBzcG1heCA9IHNwc2l6OwotICAgICAgICAgICAgZGVidWcoRjEwMSwi aW5pdHByb3RvIHNwc2l6ciIsIiIsc3BzaXpyKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAo cHRhYltwcm90b2NvbF0ud2luc2l6ZSA+IC0xKQotICAgICAgd3Nsb3RyID0gcHRhYltwcm90b2Nv bF0ud2luc2l6ZTsKLSAgICBpZiAocHRhYltwcm90b2NvbF0ucHJlZml4ID4gLTEpCi0gICAgICBw cmVmaXhpbmcgPSBwdGFiW3Byb3RvY29sXS5wcmVmaXg7Ci0gICAgaWYgKHB0YWJbcHJvdG9jb2xd LmZuY2EgPiAtMSkKLSAgICAgIGZuY2FjdCAgPSBwdGFiW3Byb3RvY29sXS5mbmNhOwotICAgIGlm IChwdGFiW3Byb3RvY29sXS5mbmNuID4gLTEpCi0gICAgICBmbmNudiAgID0gcHRhYltwcm90b2Nv bF0uZm5jbjsKLSAgICBpZiAocHRhYltwcm90b2NvbF0uZm5zcCA+IC0xKQotICAgICAgZm5zcGF0 aCA9IHB0YWJbcHJvdG9jb2xdLmZuc3A7Ci0gICAgaWYgKHB0YWJbcHJvdG9jb2xdLmZucnAgPiAt MSkKLSAgICAgIGZucnBhdGggPSBwdGFiW3Byb3RvY29sXS5mbnJwOwotCi0gICAgbWFrZXN0cigm KHB0YWJbcHJvdG9jb2xdLmhfYl9pbml0KSx1cGJzdHIpOwotICAgIG1ha2VzdHIoJihwdGFiW3By b3RvY29sXS5oX3RfaW5pdCksdXB0c3RyKTsKLSAgICBtYWtlc3RyKCYocHRhYltwcm90b2NvbF0u aF94X2luaXQpLHNydnN0cik7Ci0gICAgbWFrZXN0cigmKHB0YWJbcHJvdG9jb2xdLnBfYl9zY21k KSxzbmRic3RyKTsKLSAgICBtYWtlc3RyKCYocHRhYltwcm90b2NvbF0ucF90X3NjbWQpLHNuZHRz dHIpOwotICAgIG1ha2VzdHIoJihwdGFiW3Byb3RvY29sXS5wX2JfcmNtZCkscmN2YnN0cik7Ci0g ICAgbWFrZXN0cigmKHB0YWJbcHJvdG9jb2xdLnBfdF9yY21kKSxyY3Z0c3RyKTsKLX0KLSNlbmRp ZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBOT0NNREwKLVZPSUQKLSNpZmRlZiBDS19BTlNJQwot ZG9jbWRsaW5lKHZvaWQgKiB0aHJlYWRpbmZvKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLWRvY21k bGluZSh0aHJlYWRpbmZvKSBWT0lEICogdGhyZWFkaW5mbzsKLSNlbmRpZiAvKiBDS19BTlNJQyAq LwotewotI2lmZGVmIE5UU0lHCi0gICAgc2V0aW50KCk7Ci0gICAgaWYgKHRocmVhZGluZm8pIHsg ICAgICAgICAgICAgICAgICAgLyogVGhyZWFkIGxvY2FsIHN0b3JhZ2UuLi4gKi8KLSAgICAgICBU bHNTZXRWYWx1ZShUbHNJbmRleCx0aHJlYWRpbmZvKTsKLSAgICAgICBkZWJ1ZyggRjEwMCwgImRv Y21kbGluZSBjYWxsZWQgd2l0aCB0aHJlYWRpbmZvIGJsb2NrIiwgIiIsIDAgKTsKLSAgICB9IGVs c2UKLSAgICAgIGRlYnVnKCBGMTAwLCAiZG9jbWRsaW5lIHRocmVhZGluZm8gaXMgTlVMTCIsIiIs MCk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSNpZmRlZiBDS19MT0dJTgotI2lmZGVmIE5UCi0jaWZk ZWYgSUtTRAotICAgIGlmIChpbnNlcnZlcikKLSAgICAgIHNldG50Y3JlZHMoKTsKLSNlbmRpZiAv KiBJS1NEICovCi0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotICAgIHBy b3RvKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRha2UgYW55IHJlcXVlc3RlZCBh Y3Rpb24sIHRoZW4gKi8KLSAgICBpZiAoIXF1aWV0KSAgICAgICAgICAgICAgICAgICAgICAgICAv KiBwdXQgY3Vyc29yIGJhY2sgYXQgbGVmdCBtYXJnaW4sICovCi0gICAgICBjb25vbGwoIiIpOwot I2lmbmRlZiBOT0xPQ0FMCi0gICAgaWYgKGNuZmxnKSB7ICAgICAgICAgICAgICAgICAgICAgICAg LyogUmUtY29ubmVjdCBpZiByZXF1ZXN0ZWQgKi8KLSAgICAgICAgY25mbGcgPSAwOwotICAgICAg ICBkb2NvbmVjdCgwLDApOwotICAgICAgICBpZiAodHRjaGsoKSA8IDApCi0gICAgICAgICAgZG9s b2dlbmQoKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0jaWZkZWYgTlRTSUcKLSAg ICAgY2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSAgIHJldHVy bjsKLX0KLQotdm9pZAotaWtzbG9naW4oKSB7Ci0gICAgaWYgKHNzdGVsbmV0Ci0jaWZkZWYgSUtT RAotICAgICAgICB8fCBpbnNlcnZlciAgICAgICAgICAgICAgICAgICAgIC8qIEludGVybmV0IHNl cnZlciAqLwotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgICAgKSB7Ci0gICAgICAgIGNoYXIgKnM7 Ci0gICAgICAgIGV4dGVybiBpbnQgZmRpc3BsYTsgICAgICAgICAgICAgLyogRmlsZS10cmFuc2Zl ciBkaXNwbGF5IGZvcm1hdCAqLwotICAgICAgICBleHRlcm4gY2hhciAqIGlrcHJvbXB0OyAgICAg ICAgIC8qIElLU0QgcHJvbXB0ICovCi0KLSNpZmRlZiBJS1NECi0jaWZkZWYgQ0tfTE9HSU4KLSAg ICAgICAgaWYgKGluc2VydmVyKSB7Ci0gICAgICAgICAgICB4X2xvZ2luID0gMTsgICAgICAgICAg ICAgICAgLyogTG9naW4gcmVxdWlyZWQgKi8KLSAgICAgICAgICAgIHhfbG9nZ2VkID0gMDsgICAg ICAgICAgICAgICAvKiBOb3QgbG9nZ2VkIGluIHlldCAqLwotICAgICAgICAgICAgY21zZXRwKGlr cHJvbXB0KTsgICAgICAgICAgIC8qIFNldCB1cCBJS1NEJ3MgcHJvbXB0ICovCi0jaWZuZGVmIE5P U0VSVkVSCi0gICAgICAgICAgICBlbl9tYWkgPSAwOyAgICAgICAgICAgICAgICAgLyogTUFJTCBp cyBkaXNhYmxlZCAqLwotICAgICAgICAgICAgZW5fd2hvID0gMDsgICAgICAgICAgICAgICAgIC8q IFJFTU9URSBXSE8gaXMgZGlzYWJsZWQgKi8KLSAgICAgICAgICAgIGVuX2hvcyA9IDA7ICAgICAg ICAgICAgICAgICAvKiBSRU1PVEUgSE9TVCBpcyBkaXNhYmxlZCAqLwotICAgICAgICAgICAgZW5f cHJpID0gMDsgICAgICAgICAgICAgICAgIC8qIFBSSU5UIGlzIGRpc2FibGVkICovCi0jZW5kaWYg LyogTk9TRVJWRVIgKi8KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHhfbG9naW4gPSAw OyAgICAgICAgICAgICAgICAvKiBMb2dpbiBub3QgcmVxdWlyZWQgKi8KLSAgICAgICAgICAgIHhf bG9nZ2VkID0gMTsgICAgICAgICAgICAgICAvKiBBbHJlYWR5IGxvZ2dlZCBpbiAqLwotICAgICAg ICB9Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAgIG5v bG9jYWwgPSAxOyAgICAgICAgICAgICAgICAgICAgLyogU0VUIExJTkUvSE9TVCBub3QgYWxsb3dl ZCAqLwotICAgICAgICBmZGlzcGxhID0gWFlGRF9OOyAgICAgICAgICAgICAgIC8qIE5vIGZpbGUt dHJhbnNmZXIgZGlzcGxheSAqLwotI2lmZGVmIE5FVENPTk4KLSAgICAgICAgY2xpZW50aG9zdCA9 IGNrZ2V0cGVlcigpOyAgICAgICAvKiBHZXQgY2xpZW50J3MgaG9zdG5hbWUgKi8KLSAgICAgICAg ZGVidWcoRjExMCwiaWtzbG9naW4gY2xpZW50aG9zdCIsY2xpZW50aG9zdCwwKTsKLSNlbmRpZiAv KiBORVRDT05OICovCi0gICAgICAgIHp0aW1lKCZzKTsgICAgICAgICAgICAgICAgICAgICAgLyog R2V0IGN1cnJlbnQgZGF0ZSBhbmQgdGltZSAqLwotCi0jaWZkZWYgQ0tfTE9HSU4KLSNpZmRlZiBD S19BVVRIRU5USUNBVElPTgotICAgICAgICBpZiAoeF9sb2dpbikgewotICAgICAgICAgICAgeF9s b2dnZWQgPSBja190bl9hdXRoX3ZhbGlkKCk7IC8qIERpZCBUZWxuZXQgQXV0aCBzdWNjZWVkPyAq LwotICAgICAgICAgICAgZGVidWcoRjExMSwiaWtzbG9naW4iLCJ4X2xvZ2dlZCIseF9sb2dnZWQp OwotCi0jaWZkZWYgTlQKLSAgICAgICAgICAgIC8qIE9uIFdpbmRvd3MgOXgsIHdlIGRvIG5vdCBo YXZlIHRoZSBhYmlsaXR5IGluICAqLwotICAgICAgICAgICAgLyogenZ1c2VyKCkgYXQgcHJlc2Vu dCB0byBkZXRlcm1pbmUgaWYgdGhlIG5hbWUgICovCi0gICAgICAgICAgICAvKiBhcHByb3ZlZCBp biBhIEtlcmJlcm9zIHByaW5jaXBhbCBpcyByZWFsbHkgYSAgKi8KLSAgICAgICAgICAgIC8qIGFu IGFjY291bnQgaW4gdGhlIFdpbmRvd3MgQWNjZXNzIENvbnRyb2wgTGlzdCAqLwotICAgICAgICAg ICAgaWYgKGlzV2luOTUoKSAmJiB4X2xvZ2dlZCA9PSBBVVRIX1ZBTElECi0gICAgICAgICAgICAg ICAgICYmIChja190bl9hdXRoZW50aWNhdGVkKCkgIT0gQVVUSFRZUEVfTlRMTSkKLSNpZmRlZiBD S19TUlAKLSAgICAgICAgICAgICAgICAgJiYgKGNrX3RuX2F1dGhlbnRpY2F0ZWQoKSAhPSBBVVRI VFlQRV9TUlApCi0jZW5kaWYgLyogQ0tfU1JQICovCi0gICAgICAgICAgICAgICAgICkgewotICAg ICAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9VU0VSKTsKLSAgICAgICAgICAgICAgICB4 X2xvZ2dlZCA9IEFVVEhfVVNFUjsKLSAgICAgICAgICAgICAgICBwcmludGYoIldBUk5JTkc6XHJc biIpOwotICAgICAgICAgICAgICAgIHByaW50ZigKLSIgVGhlIFRlbG5ldCBhdXRoZW50aWNhdGlv biBtZXRob2QgdXNlZCBjYW5ub3QgcHJvdmlkZSBmb3IgYXV0b21hdGVkXHJcbiIpOwotICAgICAg ICAgICAgICAgIHByaW50ZigKLSIgbG9naW4gdG8gV2luZG93cyA5NSBvciBXaW5kb3dzIDk4LiAg QSBwYXNzd29yZCBtdXN0IGJlIGVudGVyZWRcclxuIik7Ci0gICAgICAgICAgICAgICAgcHJpbnRm KAotIiBsb2NhbGx5IHRvIHZhbGlkYXRlIHlvdXIgdXNlcmlkLiAgVGVsbmV0IGF1dGhlbnRpY2F0 aW9uIChhbmQgZW5jcnlwdGlvbilcclxuIgotICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAg ICAgICAgcHJpbnRmKAotIiBjYW4gYmUgdXNlZCB0byB2YWxpZGF0ZSB0aGUgaG9zdCAoYW5kIHBy b3RlY3QgdGhlIHByaXZhY3kgb2YgeW91ciBwYXNzd29yZC4pXAotXHJcbiIKLSAgICAgICAgICAg ICAgICApOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIE5UICovCi0KLSAgICAgICAgICAgIGlm ICh4X2xvZ2dlZCA9PSBBVVRIX1ZBTElEKSB7Ci0jaWZkZWYgQ0tfU1NMCi0gICAgICAgICAgICAg ICAgaWYgKChzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSAmJgotICAgICAgICAg ICAgICAgICAgICAoIVRFTE9QVF9VKFRFTE9QVF9BVVRIRU5USUNBVElPTikgfHwKLSAgICAgICAg ICAgICAgICAgICAgIGNrX3RuX2F1dGhlbnRpY2F0ZWQoKSA9PSBBVVRIVFlQRV9OVUxMIHx8Ci0g ICAgICAgICAgICAgICAgICAgICBja190bl9hdXRoZW50aWNhdGVkKCkgPT0gQVVUSFRZUEVfQVVU TykKLSAgICAgICAgICAgICAgICAgICAgKSB7Ci0jaWZkZWYgU1NMX0tSQjUKLSAgICAgICAgICAg ICAgICAgICAgaWYgKHRsc19pc19rcmI1KDApKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBw cmludGYoIkF1dGhlbnRpY2F0ZWQgdXNpbmcgS2VyYmVyb3MgNVxyXG4iKTsKLSNpZmRlZiBDS1NZ U0xPRwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19MSSAm JiBja3hsb2dnaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIg c3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWRbXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj a3N5c2xvZyhTWVNMR19MSSwgMSwgIkFVVEhfVkFMSUQiLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJLZXJiZXJvcyA1IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzelVzZXJOYW1lQXV0aGVudGljYXRlZAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyog Q0tTWVNMT0cgKi8KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyogU1NMX0tS QjUgKi8KLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJp bnRmKCJBdXRoZW50aWNhdGVkIHVzaW5nIFguNTA5IGNlcnRpZmljYXRlXHJcbiIpOwotI2lmZGVm IENLU1lTTE9HCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xH X0xJICYmIGNreGxvZ2dpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlcm4g Y2hhciBzelVzZXJOYW1lQXV0aGVudGljYXRlZFtdOwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNrc3lzbG9nKFNZU0xHX0xJLCAxLCAiQVVUSF9WQUxJRCIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlguNTA5IGNlcnRpZmljYXRlIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzelVzZXJOYW1lQXV0aGVudGljYXRlZAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9 Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICAgICAgICAgICAgewot ICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiQXV0aGVudGljYXRlZCB1c2luZyAlc1xyXG4i LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVRIVFlQRV9OQU1FKGNrX3RuX2F1dGhl bnRpY2F0ZWQoKSkpOwotI2lmZGVmIENLU1lTTE9HCi0gICAgICAgICAgICAgICAgICAgICAgaWYg KGNreHN5c2xvZyA+PSBTWVNMR19MSSAmJiBja3hsb2dnaW5nKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgIGV4dGVybiBjaGFyIHN6VXNlck5hbWVBdXRoZW50aWNhdGVkW107Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0xJLCAxLCAiQVVUSF9WQUxJRCIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVVEhUWVBFX05BTUUoY2tfdG5fYXV0 aGVudGljYXRlZCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3pVc2Vy TmFtZUF1dGhlbnRpY2F0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK LSAgICAgICAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB6dnVzZXIodWlkYnVmKTsKLSAgICAgICAgICAg ICAgICBpZiAoenZwYXNzKCIiKSA9PSAwKQotICAgICAgICAgICAgICAgICAgeF9sb2dnZWQgPSAw OwotICAgICAgICAgICAgfSBlbHNlIGlmICh4X2xvZ2dlZCA9PSBBVVRIX1VTRVIgJiYgIXN0cmNt cCh1aWRidWYsImFub255bW91cyIpKSB7Ci0gICAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIgc3pV c2VyTmFtZUF1dGhlbnRpY2F0ZWRbXTsKLSAgICAgICAgICAgICAgICB6dnVzZXIodWlkYnVmKTsK LSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzelVzZXJOYW1lQXV0aGVudGljYXRlZCIsCi0g ICAgICAgICAgICAgICAgICAgICAgc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWQsMCk7Ci0gICAgICAg ICAgICAgICAgaWYgKHp2cGFzcyhzelVzZXJOYW1lQXV0aGVudGljYXRlZCkgPT0gMCkgewotICAg ICAgICAgICAgICAgICAgLyogQW5vbnltb3VzIGxvZ2luIGZhaWxlZC4gIEZvcmNlIGEgdXNlcm5h bWUgcHJvbXB0LiAqLwotICAgICAgICAgICAgICAgICAgeF9sb2dnZWQgPSAwOwotICAgICAgICAg ICAgICAgICAgdWlkYnVmWzBdID0gJ1wwJzsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotI2lm ZGVmIENLX1NTTAotICAgICAgICAgICAgICAgICAgICBpZiAoKHNzbF9hY3RpdmVfZmxhZyB8fCB0 bHNfYWN0aXZlX2ZsYWcpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAoIVRFTE9QVF9VKFRF TE9QVF9BVVRIRU5USUNBVElPTikgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICBja190bl9h dXRoZW50aWNhdGVkKCkgPT0gQVVUSFRZUEVfTlVMTCB8fAotICAgICAgICAgICAgICAgICAgICAg ICAgIGNrX3RuX2F1dGhlbnRpY2F0ZWQoKSA9PSBBVVRIVFlQRV9BVVRPKSkgewotICAgICAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCJBdXRoZW50aWNhdGVkIHVzaW5nIFguNTA5IGNlcnRpZmlj YXRlXHJcbiIpOwotI2lmZGVmIENLU1lTTE9HCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo Y2t4c3lzbG9nID49IFNZU0xHX0xJICYmIGNreGxvZ2dpbmcpIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBleHRlcm4gY2hhciBzelVzZXJOYW1lQXV0aGVudGljYXRlZFtdOwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0xJLCAxLCAiQVVUSF9VU0VSIiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWC41MDkgY2VydGlmaWNhdGUi LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN6VXNlck5hbWVBdXRoZW50 aWNhdGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAg ICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotICAgICAgICAgICAgICAg ICAgICB9IGVsc2UKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICAgICAgICAgICAgICB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiQXV0aGVudGljYXRlZCB1c2luZyAl c1xyXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVUSFRZUEVfTkFNRShj a190bl9hdXRoZW50aWNhdGVkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OwotI2lmZGVmIENLU1lTTE9HCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChja3hzeXNs b2cgPj0gU1lTTEdfTEkgJiYgY2t4bG9nZ2luZykgewotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2tzeXNsb2coU1lTTEdfTEksIDEsICJBVVRIX1VTRVIiLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQVVUSFRZUEVfTkFNRShja190bl9hdXRoZW50aWNhdGVk KCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3pVc2VyTmFtZUF1 dGhlbnRpY2F0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotICAgICAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2Ug ewotI2lmZGVmIENLU1lTTE9HCi0gICAgICAgICAgICAgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNM R19MSSAmJiBja3hsb2dnaW5nICYmCi0gICAgICAgICAgICAgICAgICAgIHhfbG9nZ2VkID09IEFV VEhfVVNFUikgewotICAgICAgICAgICAgICAgICAgICBleHRlcm4gY2hhciBzelVzZXJOYW1lQXV0 aGVudGljYXRlZFtdOwotICAgICAgICAgICAgICAgICAgICBja3N5c2xvZyhTWVNMR19MSSwgMSwg IkFVVEhfVVNFUiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVVEhUWVBFX05BTUUo Y2tfdG5fYXV0aGVudGljYXRlZCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3pV c2VyTmFtZUF1dGhlbnRpY2F0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAg ICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICAgICAgICAgICAgICB4 X2xvZ2dlZCA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKCFzdHJjbXAoIih1bmtub3duKSIsdWlk YnVmKQotI2lmZGVmIE5UCi0gICAgICAgICAgICAgICAgICAgIHx8ICFzdHJpY21wKCJhZG1pbmlz dHJhdG9yIix1aWRidWYpCi0jaWZkZWYgVU5JWAotICAgICAgICAgICAgICAgICAgICB8fCAhc3Ry Y21wKCJyb290Iix1aWRidWYpCi0jZWxzZQotI2lmZGVmIFBsYW45Ci0gICAgICAgICAgICAgICAg ICAgIHx8ICFzdHJjbXAoInJvb3QiLHVpZGJ1ZikKLSNlbHNlCi0jaWZkZWYgT1NLCi0gICAgICAg ICAgICAgICAgICAgIHx8ICFzdHJjbXAoInJvb3QiLHVpZGJ1ZikKLSNlbmRpZiAvKiBPU0sgKi8K LSNlbmRpZiAvKiBQbGFuOSAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBOVCAqLwot ICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgICB1aWRidWZbMF0gPSAnXDAn OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04g Ki8KLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotCi0jaWZkZWYgSUtTRAotICAgICAgICBpZiAoaW5z ZXJ2ZXIpCi0gICAgICAgICAgcHJpbnRmKCJcclxuSW50ZXJuZXQgS2VybWl0IFNlcnZpY2UgcmVh ZHkgYXQgJXMlc1xyXG4iLHMsdmVyc2lvKTsKLSAgICAgICAgZWxzZQotI2VuZGlmIC8qIElLU0Qg Ki8KLSAgICAgICAgICBwcmludGYoIlxyXG5DLUtlcm1pdCByZWFkeSBhdCAlcyVzXHJcbiIscyx2 ZXJzaW8pOwotICAgICAgICBpZiAoKm15aG9zdCkKLSAgICAgICAgICBwcmludGYoIiVzXHJcbiIs IG15aG9zdCk7Ci0gICAgICAgIHByaW50ZigiXHJcbiIpOwotICAgIH0KLSNpZmRlZiBDS19MT0dJ TgotI2lmZGVmIElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIpIHsKLSAgICAgICAgaW50IGk7Ci0gICAg ICAgIGV4dGVybiBpbnQgYXJnX3g7ICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgJy14JyBvbiBj b21tYW5kIGxpbmUgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgZXh0ZXJuIHN0cnVjdCBtdGFi ICptYWN0YWI7ICAgICAgICAgLyogRm9yIE9OX0xPR0lOIG1hY3JvLiAqLwotICAgICAgICBleHRl cm4gaW50IG5tYWM7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotICAgICAgICBkZWJ1ZyhGMTEwLCJN QUlOIGNsaWVudGhvc3QiLGNsaWVudGhvc3QsMCk7Ci0gICAgICAgIHNydmlkbCA9IHRpbWVsaW1p dCA9IGxvZ2ludGltbzsgLyogRm9yIGludGVyYWN0aXZlIGxvZ2luICovCi0gICAgICAgIHJ0aW1l cigpOyAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgdGltZXIgKi8KLSAgICAgICAgZm9y IChpID0gMDsgaSA8IGlrc19yZXRyeSAmJiAheF9sb2dnZWQ7IGkrKykgeyAvKiBDb3VudCByZXRy aWVzICovCi0gICAgICAgICAgICBpZiAoZ3RpbWVyKCkgPiBsb2dpbnRpbW8pCi0gICAgICAgICAg ICAgIGJyZWFrOwotI2lmZGVmIFROQ09ERQotICAgICAgICAgICAgdG5fd2FpdCgibG9naW4gbG9v cCIpOwotICAgICAgICAgICAgdG5fcHVzaCgpOwotI2VuZGlmIC8qIFROQ09ERSAqLwotICAgICAg ICAgICAgZGVidWcoRjEwMSwiTUFJTiBMT0dJTiB0cnkiLCIiLGkpOwotICAgICAgICAgICAgd2hh dCA9IFdfTk9USElORzsgICAgICAgICAgIC8qIEJlY2F1c2UgcHJvdG8oKSBjaGFuZ2VzIHRoaXMg Ki8KLQotI2lmZGVmIElLU19PUFRJT04KLSAgICAgICAgICAgIGRlYnVnKEYxMTEsIk1BSU4gTE9H SU4iLAotICAgICAgICAgICAgICAgICAgIlRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQu bWVfc3RhcnQiLAotICAgICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtl cm1pdC5tZV9zdGFydAotICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIC8qIEtlcm1p dCBzZXJ2ZXIgbmVnb3RpYXRlZCAqLwotICAgICAgICAgICAgaWYgKFRFTE9QVF9TQihURUxPUFRf S0VSTUlUKS5rZXJtaXQubWVfc3RhcnQpIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJJ S1NEIHN0YXJ0aW5nIGluIHNlcnZlciBtb2RlIiwiIiwwKTsKLSAgICAgICAgICAgICAgICBhcmdf eCA9IDE7ICAgICAgICAgICAgICAvKiBFbnRlciBzZXJ2ZXIgbW9kZSAqLwotICAgICAgICAgICAg ICAgIHNzdGF0ZSA9ICd4JzsKLSNpZmRlZiBJS1NEUE9QQkFDSwotICAgICAgICAgICAgICAgIGp1 c3RvbmUgPSAxOyAgICAgICAgICAgIC8qIEV4ZWN1dGUgb25lIGNvbW1hbmQgYXQgYSB0aW1lLiAq LwotI2VuZGlmIC8qIElLU0RQT1BCQUNLICovCi0gICAgICAgICAgICAgICAgcHJvdG8oKTsgICAg ICAgICAgICAgICAgLyogRW50ZXIgcHJvdG9jb2wgaWYgcmVxdWVzdGVkLiAqLwotI2lmZGVmIE5U U0lHCi0gICAgICAgICAgICAgICAgY2tfaWgoKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotICAgICAg ICAgICAgICAgIGlmICh4X2xvZ2dlZCkgICAgICAgICAgIC8qIExvZ2dlZCBpbiAqLwotICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAg ICAgLyogTm90IGluIGNsaWVudC9zZXJ2ZXIgbW9kZSAqLwotI2VuZGlmIC8qIElLU19PUFRJT04g Ki8KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJJS1NEIHN0YXJ0aW5nIHdpdGggVXNlcm5h bWUgcHJvbXB0IiwiIiwwKTsKLSAgICAgICAgICAgICAgICB4X2xvZ2dlZCA9IGNreGxvZ2luKChD SEFSICopdWlkYnVmLE5VTEwsTlVMTCwxKTsKLSAgICAgICAgICAgICAgICBpZiAoc3N0YXRlKSB7 ICAgICAgICAgICAvKiBSZWNlaXZlZCBhIHBhY2tldCBhdCBwcm9tcHQgKi8KLSNpZmRlZiBJS1NE UE9QQkFDSwotICAgICAgICAgICAgICAgICAgICBqdXN0b25lID0gMTsgICAgICAgIC8qIEdvIGhh bmRsZSBpdCAqLwotI2VuZGlmIC8qIElLU0RQT1BCQUNLICovCi0gICAgICAgICAgICAgICAgICAg IHByb3RvKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgheF9sb2dn ZWQpIHsgICAgICAgIC8qIEluIGNhc2Ugd2UgYXJlIGF0IHRoZSBwcm9tcHQuLi4gKi8KLSAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCJBY2Nlc3MgZGVuaWVkLlxuIik7Ci0gICAgICAgICAgICAg ICAgICAgIHVpZGJ1ZlswXSA9ICdcMCc7ICAgLyogRm9yZ2V0IHRoZSBuYW1lIGlmIHdlIGhhdmUg b25lICovCi0gICAgICAgICAgICAgICAgfQotI2lmZGVmIElLU19PUFRJT04KLSAgICAgICAgICAg IH0KLSNlbmRpZiAvKiBJS1NfT1BUSU9OICovCi0gICAgICAgIH0KLSAgICAgICAgc3J2aWRsID0g dGltZWxpbWl0ID0gaWtzX3RpbW87ICAvKiBSZXNldCBjb21tYW5kIHRpbWVsaW1pdCAqLwotICAg ICAgICBkZWJ1ZyhGMTAxLCJNQUlOIExPR0lOIiwiIix4X2xvZ2dlZCk7Ci0gICAgICAgIGlmICgh eF9sb2dnZWQpIHsgICAgICAgICAgICAgICAgLyogTG9naW5zIGZhaWxlZC4gKi8KLSAgICAgICAg ICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0KQotICAgICAg ICAgICAgICBlcnJwa3QoKENIQVIgKikiTG9naW4gVGltZW91dCIpOwotICAgICAgICAgICAgbXNs ZWVwKDUwMCk7Ci0gICAgICAgICAgICBkb2V4aXQoQkFEX0VYSVQsMCk7Ci0gICAgICAgIH0KLSAg ICAgICAgd2hhdCA9IFdfTk9USElORzsgICAgICAgICAgICAgICAvKiBTdGF5IGluIGtub3duIHN0 YXRlICovCi0jaWZuZGVmIE5PU0VSVkVSCi0gICAgICAgIGlmIChpc2d1ZXN0KSB7Ci0gICAgICAg ICAgICBlbl9wcmkgPSAwOyAgICAgICAgICAgICAgICAgLyogTm8gcHJpbnRpbmcgZm9yIGFub255 bW91cyB1c2VycyAqLwotICAgICAgICAgICAgZW5fbWFpID0gMDsgICAgICAgICAgICAgICAgIC8q IE5vIGVtYWlsIGZvciBhbm9ueW1vdXMgdXNlcnMgKi8KLSAgICAgICAgICAgIGVuX21rZCA9IDA7 ICAgICAgICAgICAgICAgICAvKiBPciBkaXJlY3RvcnkgY3JlYXRpb24gKi8KLSAgICAgICAgICAg IGVuX3JtZCA9IDA7ICAgICAgICAgICAgICAgICAvKiBPciBkaXJlY3RvcnkgcmVtb3ZhbCAqLwot ICAgICAgICAgICAgZW5fZW5hID0gMDsgICAgICAgICAgICAgICAgIC8qIE9yIEVOQUJMaW5nIERJ U0FCTEVkIGl0ZW1zICovCi0gICAgICAgIH0KLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotCi0jaWZu ZGVmIE5PU1BMCi0vKgotICBJZiBhIG1hY3JvIG5hbWVkICJvbl9sb2dpbiIgaXMgZGVmaW5lZCwg ZXhlY3V0ZSBpdC4gIEFsc28gcmVtb3ZlIGl0IGZyb20gdGhlCi0gIG1hY3JvIHRhYmxlIHNvIHRo ZSB1c2VyIGNhbm5vdCBzZWUgd2hhdCBpdCBkb2VzLiAgRXhlY3V0ZSBpdCBhcyBwYXJ0IG9mIHRo ZQotICBpa3NkLmNvbmYgZmlsZS4KLSovCi0gICAgICAgIGlmIChubWFjKSB7ICAgICAgICAgICAg ICAgICAgICAgLyogQW55IG1hY3JvcyBkZWZpbmVkPyAqLwotICAgICAgICAgICAgaW50IGs7ICAg ICAgICAgICAgICAgICAgICAgIC8qIFllcyAqLwotICAgICAgICAgICAgY2hhciAqIGNtZCA9ICJv bl9sb2dpbiI7ICAgIC8qIE1TVkMgMi54IGNvbXBpbGVyIGVycm9yICovCi0gICAgICAgICAgICBr ID0gbWxvb2sobWFjdGFiLGNtZCxubWFjKTsgLyogTG9vayB1cCAib25fbG9naW4iICovCi0gICAg ICAgICAgICBpZiAoayA+PSAwKSB7ICAgICAgICAgICAgICAgLyogSWYgZm91bmQsICovCi0jaWZk ZWYgSUtTRENPTkYKLSAgICAgICAgICAgICAgICBpbnQgc2F2ZWQgPSBpa3NkY2Y7Ci0gICAgICAg ICAgICAgICAgaWtzZGNmID0gMDsKLSNlbmRpZiAvKiBJS1NEQ09ORiAqLwotICAgICAgICAgICAg ICAgIGlmIChkb2RvKGssIiIsMCkgPiAtMSkgIC8qIHNldCBpdCB1cCwgKi8KLSAgICAgICAgICAg ICAgICAgIHBhcnNlcigxKTsgICAgICAgICAgICAvKiBleGVjdXRlIGl0ICovCi0jaWZkZWYgSUtT RENPTkYKLSAgICAgICAgICAgICAgICBpa3NkY2YgPSBzYXZlZDsKLSNlbmRpZiAvKiBJS1NEQ09O RiAqLwotICAgICAgICAgICAgICAgIGRlbG1hYyhjbWQsMSk7ICAgICAgICAgIC8qIGFuZCBkZWxl dGUgaXQgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0g ICAgfSAvKiBpZiAoaW5zZXJ2ZXIpICovCi0jZWxzZSAvKiBDS19MT0dJTiAqLwotICAgIGlmIChp bnNlcnZlcikKLSAgICAgICAgc3J2aWRsID0gdGltZWxpbWl0ID0gaWtzX3RpbW87ICAvKiBTZXQg aWRsZSBsaW1pdHMgZm9yIElLUyAqLwotI2VuZGlmIC8qIENLX0xPR0lOICovCi0jZW5kaWYgLyog SUtTRCAqLwotfQotCi1WT0lECi0jaWZkZWYgQ0tfQU5TSUMKLWZhaWxjbWRsaW5lKHZvaWQgKiBm b28pCi0jZWxzZSAvKiBDS19BTlNJQyAqLwotZmFpbGNtZGxpbmUoZm9vKSBWT0lEICogZm9vOwot I2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0jaWZkZWYgR0VNRE9TCi0gICAgY2NfY2xlYW4oKTsK LSNlbmRpZiAvKiBHRU1ET1MgKi8KLSNpZm5kZWYgTk9MT0NBTAotICAgIGlmIChjbmZsZykgZG9j b25lY3QoMCwwKTsgICAgICAgICAgIC8qIGNvbm5lY3QgYWdhaW4gaWYgcmVxdWVzdGVkLiAqLwot ICAgIGlmICh0dGNoaygpIDwgMCkKLSAgICAgIGRvbG9nZW5kKCk7Ci0jZW5kaWYgLyogTk9MT0NB TCAqLwotfQotI2VuZGlmIC8qIE5PQ01ETCAqLwotCi0jaWZuZGVmIE5PSUNQCi1WT0lECi0jaWZk ZWYgQ0tfQU5TSUMKLWRvdGFrZWluaSh2b2lkICogdGhyZWFkaW5mbykgICAgICAgICAgICAvKiBF eGVjdXRlIGluaXQgZmlsZS4gKi8KLSNlbHNlICAvKiBDS19BTlNJQyAqLwotZG90YWtlaW5pKHRo cmVhZGluZm8pIFZPSUQgKiB0aHJlYWRpbmZvOyAvKiBFeGVjdXRlIGluaXQgZmlsZS4gKi8KLSNl bmRpZiAvKiBDS19BTlNJQyAqLwotLyogZG90YWtlaW5pICovIHsKLSNpZmRlZiBOVFNJRwotICAg IHNldGludCgpOwotICAgIGlmICh0aHJlYWRpbmZvKSB7ICAgICAgICAgICAgICAgICAgIC8qIFRo cmVhZCBsb2NhbCBzdG9yYWdlLi4uICovCi0gICAgICAgVGxzU2V0VmFsdWUoVGxzSW5kZXgsdGhy ZWFkaW5mbyk7Ci0gICAgICAgZGVidWcoRjEwMCwgImRvdGFrZWluaSBjYWxsZWQgd2l0aCB0aHJl YWRpbmZvIGJsb2NrIiwiIiwgMCk7Ci0gICAgfSBlbHNlCi0gICAgICBkZWJ1ZyhGMTAwLCAiZG90 YWtlaW5pIC0gdGhyZWFkaW5mbyBpcyBOVUxMIiwgIiIsIDApOwotI2VuZGlmIC8qIE5UU0lHICov Ci0jaWZkZWYgQ0tfTE9HSU4KLSNpZmRlZiBOVAotI2lmZGVmIElLU0QKLSAgICBpZiAoaW5zZXJ2 ZXIpCi0gICAgICBzZXRudGNyZWRzKCk7Ci0jZW5kaWYgLyogSUtTRCAqLwotI2VuZGlmIC8qIE5U ICovCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSAgICBjbWRpbmkoKTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBTZXRzIHRsZXZlbCAqLwotCi0gICAgZGVidWcoRjExMSwiZG90YWtlaW5p IiwiaW5zZXJ2ZXIiLGluc2VydmVyKTsKLSAgICBkZWJ1ZyhGMTExLCJkb3Rha2VpbmkiLCJzc3Rl bG5ldCIsc3N0ZWxuZXQpOwotCi0jaWZkZWYgQ09NTUVOVAotLyogV3JvbmcgcGxhY2UgZm9yIHRo aXMuLi4gKi8KLSNpZm5kZWYgTk9YRkVSCi0jaWZkZWYgQ0tfRkFTVAotICAgIGRvZmFzdCgpOyAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJ5IG5vdyBGQVNUIGRlZmF1bHRzIHNob3VsZCBi ZSBPSyAqLwotI2VuZGlmIC8qIENLX0ZBU1QgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSNlbmRp ZiAvKiBDT01NRU5UICovCi0KLSAgICBkb2luaXQoKTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBOb3cgZG8gdGhlIGluaXRpYWxpemF0aW9uIGZpbGUgKi8KLSAgICBkZWJ1ZyhGMTAxLCJt YWluIGV4ZWN1dGluZyBpbml0IGZpbGUiLCIiLHRsZXZlbCk7Ci0gICAgd2hpbGUgKHRsZXZlbCA+ IC0xKSB7Ci0gICAgICAgIHNzdGF0ZSA9IChDSEFSKSBwYXJzZXIoMSk7ICAgICAgLyogRXhlY3V0 ZSBvbmUgY29tbWFuZCBhdCBhIHRpbWUuICovCi0gICAgICAgIGlmIChzc3RhdGUpIHByb3RvKCk7 ICAgICAgICAgICAgLyogRW50ZXIgcHJvdG9jb2wgaWYgcmVxdWVzdGVkLiAqLwotI2lmZGVmIE5U U0lHCi0gICAgICAgIGNrX2loKCk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSAgICB9Ci0gICAgZGVi dWcoRjEwMSwibWFpbiBleGl0cyBpbml0IGZpbGUiLCIiLHRsZXZlbCk7Ci0KLSNpZmRlZiBOVFNJ RwotICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOwotI2VuZGlmIC8qIE5UU0lHICovCi0gICAg cmV0dXJuOwotfQotCi1WT0lECi0jaWZkZWYgQ0tfQU5TSUMKLWZhaWx0YWtlaW5pKHZvaWQgKiB0 aHJlYWRpbmZvKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLWZhaWx0YWtlaW5pKHRocmVhZGluZm8p IFZPSUQgKiB0aHJlYWRpbmZvOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBmYWlsdGFrZWlu aSAqLyB7Ci0jaWZkZWYgR0VNRE9TCi0gICAgY2NfY2xlYW4oKTsgICAgICAgICAgICAgICAgICAg ICAgICAgLyogQXRhcmk6IENsZWFuIHVwIGFmdGVyIF5DLXRyYXAuICovCi0jZW5kaWYgLyogR0VN RE9TICovCi0gICAgZml4Y21kKCk7Ci0gICAgaWYgKCFjZmlsZWYpIHsKLSAgICAgICAgY29ub2xs KCJJbnRlcnJ1cHRlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gb3IgXAotY29tbWFuZC1saW5lIHBy b2Nlc3NpbmcuIik7Ci0gICAgICAgIGNvbm9sbCgiQy1LZXJtaXQgcXVpdHRpbmcuLi4iKTsKLSAg ICB9Ci0gICAgZG9leGl0KEJBRF9FWElULC0xKTsgICAgICAgICAgICAgICAgLyogRXhpdCB3aXRo IGJhZCBzdGF0dXMuICovCi19Ci0KLVZPSUQKLSNpZmRlZiBDS19BTlNJQwotZG9pY3Aodm9pZCAq IHRocmVhZGluZm8pCi0jZWxzZSAvKiBDS19BTlNJQyAqLwotZG9pY3AodGhyZWFkaW5mbykgVk9J RCAqIHRocmVhZGluZm87Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGRvaWNwICovIHsKLSNp ZmRlZiBOVFNJRwotICAgIHNldGludCgpOwotICAgIGlmICh0aHJlYWRpbmZvKSB7ICAgICAgICAg ICAgICAgICAgIC8qIFRocmVhZCBsb2NhbCBzdG9yYWdlLi4uICovCi0gICAgICAgaWYgKCFUbHNT ZXRWYWx1ZShUbHNJbmRleCx0aHJlYWRpbmZvKSkKLSAgICAgICAgICBkZWJ1ZyhGMTAxLCJkb2lj cCBUbHNTZXRWYWx1ZSBmYWlsZWQiLCIiLEdldExhc3RFcnJvcigpKTsKLSAgICAgICBkZWJ1ZyhG MTAxLCAiZG9pY3AgYSB0aHJlYWRpbmZvIGJsb2NrIC0gVGxzSW5kZXgiLCAiIiwgVGxzSW5kZXgp OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlYnVnKEYxMDAsICJkb2ljcCByZWNlaXZlZCBhIG51 bGwgdGhyZWFkaW5mbyIsICIiLCAwKTsKLSAgICB9Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSNpZmRl ZiBDS19MT0dJTgotI2lmZGVmIE5UCi0jaWZkZWYgSUtTRAotICAgIGlmIChpbnNlcnZlcikKLSAg ICAgIHNldG50Y3JlZHMoKTsKLSNlbmRpZiAvKiBJS1NEICovCi0jZW5kaWYgLyogTlQgKi8KLSNl bmRpZiAvKiBDS19MT0dJTiAqLwotI2lmZGVmIE1BQwotICAgIHdoaWxlICgxKSB7Ci0gICAgICAg IGV4dGVybiBjaGFyICpsZmlsZXM7ICAgICAgICAgICAgLyogRmFrZSBwb2ludGVyIGNhc3QgKi8K LQotICAgICAgICBpZiAoY29ubmVjdGVkKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCAiZG9p Y3A6IGNhbGxpbmcgbWFjcGFyc2VyIiwgIiIsIDApOwotICAgICAgICAgICAgc3N0YXRlID0gbmV3 cGFyc2VyKDEsIDEsIDBMKTsKLQotICAgICAgICAgICAgLyogaWdub3JlIG51bGwgY29tbWFuZCBz dGF0ZSAqLwotICAgICAgICAgICAgaWYgKHNzdGF0ZSA9PSAnbicpCi0gICAgICAgICAgICAgIHNz dGF0ZSA9ICdcMCc7Ci0KLSAgICAgICAgICAgIGlmIChzc3RhdGUpCi0gICAgICAgICAgICAgIHBy b3RvKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICog cHJvY2VzcyB0YWtlIGZpbGVzIHRoZSBmaW5kZXIgZ2F2ZSB1cy4KLSAgICAgICAgICAgICAqLwot ICAgICAgICAgICAgaWYgKCh0bGV2ZWwgPT0gLTEpICYmIGxmaWxlcykKLSAgICAgICAgICAgICAg c3RhcnRsZmlsZSgpOwotCi0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCAiZG9pY3A6IGNhbGxpbmcg cGFyc2VyIiwgIiIsIDApOwotICAgICAgICAgICAgc3N0YXRlID0gKENIQVIpIHBhcnNlcigwKTsK LSAgICAgICAgICAgIGlmIChzc3RhdGUgPT0gJ2MnKSAgICAgICAgICAvKiBpZiBNQUMgY29ubmVj dCAqLwotICAgICAgICAgICAgICBzc3RhdGUgPSAwOwotICAgICAgICAgICAgaWYgKHNzdGF0ZSkK LSAgICAgICAgICAgICAgcHJvdG8oKTsKLSAgICAgICAgfQotICAgIH0KLSNlbHNlIC8qIE5vdCBN QUMgKi8KLQotI2lmbmRlZiBOT1NQTAotLyoKLSAgSWYgaW50ZXJhY3RpdmUgY29tbWFuZHMgd2Vy ZSBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lICh1c2luZyB0aGUKLSAgLUMgImNvbW1hbmQsIGNv bW1hbmQsIC4uLiIgb3B0aW9uKSwgYXNzaWduIHRoZW0gdG8gYSBtYWNybyBjYWxsZWQKLSAgImNs X2NvbW1hbmRzIiwgdGhlbiBleGVjdXRlIHRoZSBtYWNybyBhbmQgbGVhdmUgaXQgZGVmaW5lZCBm b3IKLSAgc3Vic2VxdWVudCByZS1leGVjdXRpb24gaWYgZGVzaXJlZC4KLSovCi0gICAgaWYgKGNs Y21kcykgeyAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgZm9yIC1DIGNvbW1hbmRzICov Ci0gICAgICAgIGludCB4OwotICAgICAgICB4ID0gYWRkbWFjKCJjbF9jb21tYW5kcyIsY2xjbWRz KTsgLyogUHV0IG1hY3JvIGluIHRhYmxlICovCi0gICAgICAgIGlmICh4ID4gLTEpIHsgICAgICAg ICAgICAgICAgICAgLyogSWYgc3VjY2Vzc2Z1bCwgKi8KLSAgICAgICAgICAgIGRvZG8oeCxOVUxM LENGX0NNREwpOyAgICAgICAvKiBzZXQgdXAgZm9yIG1hY3JvIGV4ZWN1dGlvbiAqLwotICAgICAg ICAgICAgd2hpbGUgKG1hY2x2bCA+IC0xKSB7ICAgICAgIC8qIExvb3AgZ2V0dGluZyBtYWNybyBj b21tYW5kcy4gKi8KLSAgICAgICAgICAgICAgICBzc3RhdGUgPSAoQ0hBUikgcGFyc2VyKDEpOwot ICAgICAgICAgICAgICAgIGlmIChzc3RhdGUpIHByb3RvKCk7ICAgIC8qIEVudGVyIHByb3RvY29s IGlmIHJlcXVlc3RlZC4gKi8KLSNpZmRlZiBOVFNJRwotICAgICAgICAgICAgICAgIGNrX2loKCk7 Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBk ZWJ1ZyhGMTAwLCJkb2ljcCBjYWxsaW5nIGhlcmFsZCIsIiIsMCk7Ci0gICAgICAgIGhlcmFsZCgp OwotICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgIHdoaWxlKDEpIHsgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIExvb3AgZ2V0dGluZyBjb21tYW5kcy4gKi8KLSAgICAgICAgc3N0YXRl ID0gKENIQVIpIHBhcnNlcigwKTsKLSAgICAgICAgaWYgKHNzdGF0ZSkgcHJvdG8oKTsgICAgICAg ICAgICAvKiBFbnRlciBwcm90b2NvbCBpZiByZXF1ZXN0ZWQuICovCi0jaWZkZWYgTlRTSUcKLSAg ICAgICBja19paCgpOwotI2VuZGlmIC8qIE5UU0lHICovCi0gICAgfQotI2lmZGVmIE5UU0lHCi0g ICAgY2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSNlbmRpZiAv KiBNQUMgKi8KLX0KLQotVk9JRAotI2lmZGVmIENLX0FOU0lDCi1mYWlsaWNwKHZvaWQgKiB0aHJl YWRpbmZvKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLWZhaWxpY3AodGhyZWFkaW5mbykgVk9JRCAq IHRocmVhZGluZm87Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSNpZmRlZiBHRU1ET1MKLSAg ICBjY19jbGVhbigpOwotI2VuZGlmIC8qIEdFTURPUyAqLwotICAgIGZpeGNtZCgpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFBvcCBjb21tYW5kIHN0YWNrcywgZXRjLiAqLwotICAgIGNs Y21kcyA9IE5VTEw7Ci0gICAgZGVidWcoRjEwMCwiY2tjbWFpIGdvdCBpbnRlcnJ1cHQiLCIiLDAp OwotfQotI2VuZGlmIC8qIE5PSUNQICovCi0KLSNpZm5kZWYgTk9JQ1AKLVZPSUQKLSNpZmRlZiBD S19BTlNJQwotZG9jbWRmaWxlKHZvaWQgKiB0aHJlYWRpbmZvKSAgICAgICAgICAgIC8qIEV4ZWN1 dGUgYXBwbGljYXRpb24gZmlsZSAqLwotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLWRvY21kZmlsZSh0 aHJlYWRpbmZvKSBWT0lEICogdGhyZWFkaW5mbzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyog ZG9jbWRmaWxlICovIHsKLSNpZmRlZiBOVFNJRwotICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7Ci0g ICAgc2V0aW50KCk7Ci0gICAgaWYgKHRocmVhZGluZm8pIHsgICAgICAgICAgICAgICAgICAgLyog VGhyZWFkIGxvY2FsIHN0b3JhZ2UuLi4gKi8KLSAgICAgICAgVGxzU2V0VmFsdWUoVGxzSW5kZXgs dGhyZWFkaW5mbyk7Ci0gICAgICAgIGRlYnVnKEYxMDAsICJkb2NtZGZpbGUgY2FsbGVkIHdpdGgg dGhyZWFkaW5mbyBibG9jayIsIiIsIDApOwotICAgIH0gZWxzZSBkZWJ1ZyhGMTAwLCAiZG9jbWRm aWxlIC0gdGhyZWFkaW5mbyBpcyBOVUxMIiwgIiIsIDApOwotI2VuZGlmIC8qIE5UU0lHICovCi0j aWZkZWYgQ0tfTE9HSU4KLSNpZmRlZiBJS1NECi0jaWZkZWYgTlQKLSAgICBpZiAoaW5zZXJ2ZXIp Ci0gICAgICBzZXRudGNyZWRzKCk7Ci0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBJS1NEICov Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSAgICBkZWJ1ZyhGMTEwLCJtYWluIGNtZGZpbCIsY21k ZmlsLDApOwotI2lmbmRlZiBOT1NQTAotICAgIGFkZG1hYygiXFwlMCIsY21kZmlsKTsKLSNlbmRp ZiAvKiBOT1NQTCAqLwotICAgIGRvdGFrZShjbWRmaWwpOwkJCS8qIFNldCB1cCB0aGUgY29tbWFu ZCBmaWxlICovCi0gICAgaWYgKHRsZXZlbCA+IC0xKQkJCS8qIFJlbWVtYmVyIHdlIGRpZCB0aGlz ICovCi0gICAgICBjZmlsZWYgPSAxOwotICAgIHdoaWxlICh0bGV2ZWwgPiAtMSkgeyAgICAgICAg ICAgICAgIC8qIEV4ZWN1dGUgaXQgdW50aWwgaXQgcnVucyBvdXQuICovCi0gICAgICAgIHNzdGF0 ZSA9IHBhcnNlcigxKTsgICAgICAgICAgICAgLyogTG9vcCBnZXR0aW5nIGNvbW1hbmRzLiAqLwot ICAgICAgICBpZiAoc3N0YXRlKSBwcm90bygpOyAgICAgICAgICAgIC8qIEVudGVyIHByb3RvY29s IGlmIHJlcXVlc3RlZC4gKi8KLSNpZmRlZiBOVFNJRwotICAgICAgICBja19paCgpOwotI2VuZGlm IC8qIE5UU0lHICovCi0gICAgfQotCi0jaWZkZWYgTlRTSUcKLSAgICBja1RocmVhZEVuZCh0aHJl YWRpbmZvKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotICAgIHJldHVybjsKLX0KLQotVk9JRAotI2lm ZGVmIENLX0FOU0lDCi1mYWlsY21kZmlsZSh2b2lkICogdGhyZWFkaW5mbykKLSNlbHNlIC8qIENL X0FOU0lDICovCi1mYWlsY21kZmlsZSh0aHJlYWRpbmZvKSBWT0lEICogdGhyZWFkaW5mbzsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwotLyogZmFpbGNtZGZpbGUgKi8gewotI2lmZGVmIEdFTURPUwot ICAgIGNjX2NsZWFuKCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEF0YXJpOiBDbGVhbiB1 cCBhZnRlciBeQy10cmFwLiAqLwotI2VuZGlmIC8qIEdFTURPUyAqLwotICAgIGZpeGNtZCgpOwot ICAgIGlmICghY2ZpbGVmKSB7Ci0JY29ub2xsKCJJbnRlcnJ1cHRlZCBkdXJpbmcgaW5pdGlhbGl6 YXRpb24gb3IgXAotY29tbWFuZC1saW5lIHByb2Nlc3NpbmcuIik7Ci0JY29ub2xsKCJDLUtlcm1p dCBxdWl0dGluZy4uLiIpOwotICAgIH0KLSAgICBkb2V4aXQoQkFEX0VYSVQsLTEpOyAgICAgICAg ICAgICAgICAvKiBFeGl0IHdpdGggYmFkIHN0YXR1cy4gKi8KLX0KLSNlbmRpZiAvKiBOT0lDUCAq LwotCi0jaWZuZGVmIE5PWEZFUgotVk9JRAotc2V0cHJlZml4KHopIGludCB6OyB7ICAgICAgICAg ICAgICAgICAgIC8qIEluaXRpYWwgY29udHJvbC1jaGFyIHByZWZpeGluZyAqLwotI2lmZGVmIENL X1NQRUVECi0gICAgaW50IGksIHZhbDsKLQotICAgIHByZWZpeGluZyA9IHo7Ci0gICAgcHRhYltw cm90b2NvbF0ucHJlZml4ID0gcHJlZml4aW5nOwotICAgIGRlYnVnKEYxMDEsInNldHByZWZpeCIs IiIscHJlZml4aW5nKTsKLSAgICBzd2l0Y2ggKHopIHsKLSAgICAgIGNhc2UgUFhfQUxMOiAgICAg ICAgICAgICAgICAgICAgICAvKiBBbGwgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIC8qIERv bid0IGxldCBDbGVhci1DaGFubmVsIGJlIGRlcGVuZGVudCBvbiBwcmVmaXhpbmcgKi8KLSAgICAg ICAgY2xlYXJycSA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBUdXJuIG9mZiBjbGVhcmNoYW5u ZWwsIGZhbGwgdGhydSAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgIGNhc2UgUFhfTk9O OiAgICAgICAgICAgICAgICAgICAgICAvKiBOb25lICovCi0gICAgICAgIHZhbCA9ICh6ID09IFBY X0FMTCkgPyAxIDogMDsKLSAgICAgICAgZm9yIChpID0KLSNpZmRlZiBVTlBSRUZJWFpFUk8KLSAg ICAgICAgICAgICAwCi0jZWxzZQotICAgICAgICAgICAgIDEKLSNlbmRpZiAvKiBVTlBSRUZJWFpF Uk8gKi8KLSAgICAgICAgICAgICA7IGkgPCAzMjsgaSsrKQotICAgICAgICAgIGN0bHBbaV0gPSB2 YWw7Ci0gICAgICAgIGZvciAoaSA9IDEyNzsgaSA8IDE2MDsgaSsrKSBjdGxwW2ldID0gdmFsOwot ICAgICAgICBjdGxwWyh1bnNpZ25lZCkyNTVdID0gdmFsOwotICAgICAgICBpZiAoeiA9PSBQWF9O T04pIHsgICAgICAgICAgICAgIC8qIFRoZXNlIGFyZSBuZXZlciBzYWZlICovCi0gICAgICAgICAg ICBpZiAobmV0d29yaykgeyAgICAgICAgICAgICAgLyogQXNzdW1lIG5ldHdvcmsgPSB0ZWxuZXQg b3IgcmxvZ2luICovCi0gICAgICAgICAgICAgICAgY3RscFtDUl0gPSAxOyAgICAgICAgICAgLyog UHJlZml4IENSIGJlY2F1c2Ugb2YgTlZUIHJ1bGVzICovCi0gICAgICAgICAgICAgICAgY3RscFtY T05dID0gY3RscFtYT0ZGXSA9IDE7IC8qIEJlY2F1c2Ugb2YgVGVsbmV0IHNlcnZlciAqLwotICAg ICAgICAgICAgICAgIGN0bHBbMTI3XSA9IGN0bHBbMjU1XSA9IDE7ICAvKiBUZWxuZXQgSUFDICov Ci0gICAgICAgICAgICAgICAgY3RscFtteXN0Y2hdID0gY3RscFtteXN0Y2grMTI4XSA9IDE7IC8q IEtlcm1pdCBwYWNrZXQgc3RhcnQgKi8KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICAgICAgY3RscFtDUl0gPSBjdGxwWzI1NV0gPSBjdGxwW215c3RjaF0gPSBjdGxwW215c3RjaCsx MjhdID0gMTsKLSAgICAgICAgICAgICAgICBpZiAoZmxvdyA9PSBGTE9fWE9OWCkgICAgICAgLyog WG9uL1hvZmYgZm9yY2VzIHByZWZpeGluZyAqLwotICAgICAgICAgICAgICAgICAgY3RscFtYT05d ID0gY3RscFtYT0ZGXSA9IGN0bHBbWE9OKzEyOF0gPSBjdGxwW1hPRkYrMTI4XSA9IDE7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgUFhfQ0FV OiAgICAgICAgICAgICAgICAgICAgICAvKiBDYXV0aW91cyBvciBNaW5pbWFsICovCi0jaWZkZWYg Q09NTUVOVAotICAgICAgICAvKiBEb24ndCBsZXQgQ0xFQVItQ0hBTk5FTCBiZSBkZXBlbmRlbnQg b24gUHJlZml4aW5nICovCi0gICAgICAgIGNsZWFycnEgPSAwOyAgICAgICAgICAgICAgICAgICAg LyogVHVybiBvZmYgY2xlYXJjaGFubmVsICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAg Y2FzZSBQWF9XSUw6ICAgICAgICAgICAgICAgICAgICAgIC8qIE1pbmltYWwgKCJ3aWxkIikgKi8K LSAgICAgICAgY3RscFswXSA9IDE7ICAgICAgICAgICAgICAgICAgICAvKiBEb2VzIG5vdCBpbmNs dWRlIDAgKi8KLSAgICAgICAgZm9yIChpID0gMTsgaSA8IDMyOyBpKyspCi0gICAgICAgICAgY3Rs cFtpXSA9IDA7Ci0gICAgICAgIGZvciAoaSA9IDEyNzsgaSA8IDE2MDsgaSsrKQotICAgICAgICAg IGN0bHBbaV0gPSAwOwotICAgICAgICBjdGxwW215c3RjaF0gPSBjdGxwW215c3RjaCsxMjhdID0g MTsgLyogS2VybWl0IHN0YXJ0IG9mIHBhY2tldCAqLwotICAgICAgICBpZiAoc2VvbCAhPSAxMykK LSAgICAgICAgICBjdGxwW3Nlb2xdID0gY3RscFtzZW9sKzEyOF0gPSAxOyAvKiBLZXJtaXQgZW5k ICovCi0gICAgICAgIGN0bHBbMTNdID0gY3RscFsxNDFdID0gMTsgICAgICAgLyogSW4gY2FzZSBv ZiBURUxORVQgKE5WVCBydWxlcykgKi8KLSAgICAgICAgY3RscFsodW5zaWduZWQpMjU1XSA9IDE7 ICAgICAgICAvKiBEaXR0byAqLwotCi0gICAgICAgIC8qIF5ELCBeSiwgXk0sIG9yIF5VIGZvbGxv d2VkIGJ5IHRpbGRlIHRyaWdnZXIgUmxvZ2luIGVzY2FwZSAqLwotCi0gICAgICAgIGN0bHBbNF0g ID0gY3RscFs0KzEyOF0gID0gMTsgICAgLyogSW4gY2FzZSBvZiBSTE9HSU4gKi8KLSAgICAgICAg Y3RscFsxMF0gPSBjdGxwWzEwKzEyOF0gPSAxOyAgICAvKiBJbiBjYXNlIG9mIFJMT0dJTiAqLwot ICAgICAgICBjdGxwWzIxXSA9IGN0bHBbMjErMTI4XSA9IDE7ICAgIC8qIEluIGNhc2Ugb2YgUkxP R0lOICovCi0KLSAgICAgICAgaWYgKGZsb3cgPT0gRkxPX1hPTlggfHwgICAgICAgICAvKiBYb24v WG9mZiBmb3JjZXMgcHJlZml4aW5nIHRoZXNlICovCi0gICAgICAgICAgICBwcmVmaXhpbmcgPT0g UFhfQ0FVIHx8ICAgICAgLyogU28gZG9lcyBDQVVUSU9VUyAqLwotICAgICAgICAgICAgbmV0d29y aykgICAgICAgICAgICAgICAgICAgIC8qIE5ldHdvcmtzIHRvby4uLiAqLwotICAgICAgICAgIGN0 bHBbWE9OXSA9IGN0bHBbWE9GRl0gPSBjdGxwW1hPTisxMjhdID0gY3RscFtYT0ZGKzEyOF0gPSAx OwotICAgICAgICBpZiAocHJlZml4aW5nID09IFBYX0NBVSkgeyAgICAgIC8qIENhdXRpb3VzIC0g YWRkIHNvbWUgbW9yZSAqLwotI2lmZGVmIFVOUFJFRklYWkVSTwotICAgICAgICAgICAgY3RscFsw XSA9IDE7Ci0jZW5kaWYgLyogVU5QUkVGSVhaRVJPICovCi0gICAgICAgICAgICBjdGxwWzNdICAg PSBjdGxwWzE2XSAgPSAxOyAgICAgICAgICAgICAvKiBeQywgRExFICovCi0gICAgICAgICAgICBj dGxwWzE0XSAgPSBjdGxwWzE1XSAgPSAxOyAgICAgICAgICAgICAvKiBTTy9TSSAqLwotICAgICAg ICAgICAgY3RscFsyNF0gID0gY3RscFsyNV0gID0gMTsgICAgICAgICAgICAgLyogVk1TIG1pZ2h0 IG5lZWQgdGhlc2UgKi8KLSAgICAgICAgICAgIGN0bHBbMjZdICA9IGN0bHBbMjYrMTI4XSA9IDE7 ICAgICAgICAgIC8qIFVOSVggc3VzcGVuZCAqLwotICAgICAgICAgICAgY3RscFsyOF0gID0gY3Rs cFsyOV0gID0gY3RscFszMF0gID0gMTsgLyogQXNzb3J0ZWQgZXNjIGNoYXJzICovCi0gICAgICAg ICAgICBjdGxwWzEzMV0gPSBjdGxwWzE0MV0gPSBjdGxwWzE0NF0gPSAxOyAvKiBhbmQgOC1iaXQg dmVyc2lvbnMgKi8KLSAgICAgICAgICAgIGN0bHBbKHVuc2lnbmVkKTI1NV0gPSBjdGxwWzE1Nl0g PSBjdGxwWzE1N10gPSBjdGxwWzE1OF0gPSAxOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot ICAgIH0KLSNlbmRpZiAvKiBDS19TUEVFRCAqLwotfQotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi1W T0lECi1tYWtldmVyKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFrZSB2ZXJz aW9uIHN0cmluZyBmcm9tIHBpZWNlcyAqLwotICAgIGludCB4LCB5OwotICAgIGNoYXIgKiBzOwot I2lmbmRlZiBPUzIKLSNpZm5kZWYgTUFDCi0gICAgY2tfc194dmVyID0gY2tfc192ZXI7ICAgICAg ICAgICAgICAgLyogRmlsbCBpbiBDLUtlcm1pdCB2ZXJzaW9uIG51bWJlciAqLwotICAgIGNrX2xf eHZlciA9IGNrX2xfdmVyOyAgICAgICAgICAgICAgIC8qIGZvciBVTklYLCBWTVMsIGV0Yy4gKi8K LSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB4ID0gc3RybGVuKGNrX3Nf bmFtZSk7Ci0gICAgeSA9IHN0cmxlbihja19zX3h2ZXIpOwotICAgIGlmICh5ICsgeCArIDEgPCBD S1ZFUkxFTikgewotICAgICAgICBja21ha21zZyh2ZXJzaW8sQ0tWRVJMRU4sY2tfc19uYW1lLCIg Iixja19zX3h2ZXIsTlVMTCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2tzdHJuY3B5KHZlcnNp bywiQy1LZXJtaXQiLENLVkVSTEVOKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB4ICs9 IHkgKyAxOwotICAKLSAgICBzID0gIiBPUEVOIFNPVVJDRToiOwkJLyogQy1LZXJtaXQgOS4wIGFu ZCBsYXRlciAqLwotICAgIHkgPSBzdHJsZW4ocyk7Ci0gICAgaWYgKENLVkVSTEVOIDwgeCArIHkg KyAxKQotICAgICAgcmV0dXJuOwotICAgIGNrc3RybmNhdCh2ZXJzaW8scyxDS1ZFUkxFTik7Ci0K LSAgICB4ICs9IHkgKyAxOwotICAgIGlmICgqY2tfc193aG8pIHsKLSAgICAgICAgeSA9IHN0cmxl bihja19zX3dobyk7Ci0gICAgICAgIGlmIChDS1ZFUkxFTiA8IHggKyB5ICsgMSkKLSAgICAgICAg ICByZXR1cm47Ci0gICAgICAgIGNrc3RybmNhdCh2ZXJzaW8sIi0iLENLVkVSTEVOKTsKLSAgICAg ICAgY2tzdHJuY2F0KHZlcnNpbyxja19zX3dobyxDS1ZFUkxFTik7Ci0gICAgfQotICAgIHggKz0g eSArIDE7Ci0gICAgeSA9IHN0cmxlbihja19zX3Rlc3QpOwotICAgIGlmICh5ID4gMCAmJiB5ICsg eCArIDEgPCBDS1ZFUkxFTikgewotICAgICAgICBja3N0cm5jYXQodmVyc2lvLCIgIixDS1ZFUkxF Tik7Ci0gICAgICAgIGNrc3RybmNhdCh2ZXJzaW8sY2tfc190ZXN0LENLVkVSTEVOKTsKLSAgICAg ICAgeCArPSB5ICsgMTsKLSAgICAgICAgeSA9IHN0cmxlbihja19zX3R2ZXIpOwotICAgICAgICBp ZiAoeSA+IDAgJiYgeSArIHggKyAxIDwgQ0tWRVJMRU4pIHsKLSAgICAgICAgICAgIGNrc3RybmNh dCh2ZXJzaW8sIi4iLENLVkVSTEVOKTsKLSAgICAgICAgICAgIGNrc3RybmNhdCh2ZXJzaW8sY2tf c190dmVyLENLVkVSTEVOKTsKLSAgICAgICAgICAgIHggKz0geSArIDE7Ci0gICAgICAgIH0KLSAg ICB9Ci0gICAgeSA9IHN0cmxlbihja19zX2RhdGUpOwotICAgIGlmICh5ID4gMCAmJiB5ICsgeCAr IDIgPCBDS1ZFUkxFTikgewotICAgICAgICBja3N0cm5jYXQodmVyc2lvLCIsICIsQ0tWRVJMRU4p OwotICAgICAgICBja3N0cm5jYXQodmVyc2lvLGNrX3NfZGF0ZSxDS1ZFUkxFTik7Ci0gICAgfQot ICAgIHZlcm51bSA9IGNrX2xfdmVyOwotICAgIHh2ZXJudW0gPSBja19sX3h2ZXI7Ci0gICAgZGVi dWcoRjExMCwiS2VybWl0IHZlcnNpb24iLHZlcnNpbywwKTsKLX0KLQotdW5pb24gY2tfc2hvcnQg c2hvcnRieXRlczsgICAgICAgICAgICAgIC8qIEZvciBkZXRlcm1pbmluZyBieXRlIG9yZGVyICov Ci1pbnQgYnl0ZW9yZGVyID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogMCA9IEJpZyBFbmRp YW47IDEgPSBMaXR0bGUgRW5kaWFuICovCi1pbnQgYmlnZW5kaWFuID0gMTsKLS8qIE5PVEU6IE1V U1QgQkUgMCBvciAxIC0gbm90aGluZyBlbHNlICovCi0KLSNpZm5kZWYgTk9TUEwKLSNkZWZpbmUg U0NSSVBUTEVOIDEwMjQwCi0jZW5kaWYJLyogTk9TUEwgKi8KLQotI2lmZGVmIE5FVENPTk4KLSNp Zm5kZWYgTk9DTURMCi0jaWZuZGVmIE5PVVJMCi1WT0lECi1kb3VybCgpIHsKLSAgICBpbnQgcmMg PSAwOwotICAgIGNoYXIgKiBwb3J0ID0gTlVMTDsKLSAgICBleHRlcm4gaW50IHR0bnByb3RvOwot ICAgIGV4dGVybiBzdHJ1Y3QgdXJsZGF0YSBnX3VybDsKLQotI2lmZGVmIENPTU1FTlQKLSAgICAv KiBOT1RFOiBkZWJ1ZygpIGRvZXNuJ3Qgd29yayB5ZXQgLSBtdXN0IHVzZSBwcmludGYncyAqLwot ICAgIHByaW50ZigiVVJMOiAgJXNcbiIsZ191cmwuc2F2ID8gZ191cmwuc2F2IDogIihub25lKSIp OwotICAgIHByaW50ZigiVHlwZTogJXNcbiIsZ191cmwuc3ZjID8gZ191cmwuc3ZjIDogIihub25l KSIpOwotICAgIHByaW50ZigiVXNlcjogJXNcbiIsZ191cmwudXNyID8gZ191cmwudXNyIDogIihu b25lKSIpOwotICAgIHByaW50ZigiUGFzczogJXNcbiIsZ191cmwucHN3ID8gZ191cmwucHN3IDog Iihub25lKSIpOwotICAgIHByaW50ZigiSG9zdDogJXNcbiIsZ191cmwuaG9zID8gZ191cmwuaG9z IDogIihub25lKSIpOwotLyogIHByaW50ZigiUG9ydDogJXNcbiIsZ191cmwucG9yID8gZ191cmwu cG9yIDogIihub25lKSIpOyAqLwotICAgIHByaW50ZigiUGF0aDogJXNcbiIsZ191cmwucHRoID8g Z191cmwucHRoIDogIihub25lKSIpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgIGlmICgh Y2tzdHJjbXAoZ191cmwuc3ZjLCJpa3NkIiwtMSwwKSB8fAotICAgICAgICAhY2tzdHJjbXAoZ191 cmwuc3ZjLCJrZXJtaXQiLC0xLDApKSB7Ci0gICAgICAgIGV4dGVybiBjaGFyIHB3YnVmW107Ci0g ICAgICAgIGV4dGVybiBpbnQgcHdmbGc7Ci0jaWZkZWYgT1MyCi0gICAgICAgIGV4dGVybiBpbnQg cHdjcnlwdDsKLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgICAgICBpZiAoIWdfdXJsLmhvcykgewot ICAgICAgICAgICAgcHJpbnRmKCI/SW5jb21wbGV0ZSBJS1NEIFVSTFxuIik7Ci0gICAgICAgICAg ICBkb2V4aXQoQkFEX0VYSVQsMSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFnX3VybC51c3Ip Ci0gICAgICAgICAgICBtYWtlc3RyKCZnX3VybC51c3IsImFub255bW91cyIpOwotICAgICAgICBp ZiAoIWdfdXJsLnBzdykgewotICAgICAgICAgICAgY2hhciAqIHRtcGJ1ZiA9IE5VTEw7Ci0gICAg ICAgICAgICBpZiAoISh0bXBidWYgPSAoY2hhciAqKW1hbGxvYygxMDI0KSkpCi0gICAgICAgICAg ICAgICAgZmF0YWwoImRvdXJsOiBvdXQgb2YgbWVtb3J5Iik7Ci0gICAgICAgICAgICBpZiAoIWNr c3RyY21wKGdfdXJsLnVzciwiYW5vbnltb3VzIiwtMSwwKSkgewotICAgICAgICAgICAgICAgIGNr bWFrbXNnKHRtcGJ1ZiwxMDI0LHVpZGJ1ZiwiQCIsbXlob3N0LE5VTEwpOwotICAgICAgICAgICAg ICAgIG1ha2VzdHIoJmdfdXJsLnBzdyx0bXBidWYpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg ICAgICAgICAgICAgICByZWFkcGFzcygiIFBhc3N3b3JkOiIsdG1wYnVmLDEwMjQpOwotICAgICAg ICAgICAgICAgIG1ha2VzdHIoJmdfdXJsLnBzdyx0bXBidWYpOwotICAgICAgICAgICAgfQotICAg ICAgICAgICAgZnJlZSh0bXBidWYpOwotICAgICAgICB9Ci0gICAgICAgIHBvcnQgPSAia2VybWl0 IjsKLSAgICAgICAgdHRucHJvdG8gPSBOUF9URUxORVQ7Ci0gICAgICAgIG5ldHR5cGUgPSBORVRf VENQQjsKLSAgICAgICAgbWRtdHlwID0gLW5ldHR5cGU7Ci0gICAgICAgIGxvY2FsID0gLTE7Ci0g ICAgICAgIGNrc3RybmNweSh1aWRidWYsZ191cmwudXNyLFVJREJVRkxFTik7Ci0gICAgICAgIGlm IChnX3VybC5wc3cpIHsKLSAgICAgICAgICAgIGNrc3RybmNweShwd2J1ZixnX3VybC5wc3csUFdC VUZMKTsKLSAgICAgICAgICAgIHB3ZmxnID0gMTsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgIHB3 Y3J5cHQgPSAwOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICB9Ci0gICAgICAgIGNrbWFrbXNn KHR0bmFtZSwKLSAgICAgICAgICAgICAgICAgVFROQU1MRU4sCi0gICAgICAgICAgICAgICAgIGdf dXJsLmhvcywKLSAgICAgICAgICAgICAgICAgIjoiLAotICAgICAgICAgICAgICAgICBnX3VybC5w b3IgPyBnX3VybC5wb3IgOiBwb3J0LAotICAgICAgICAgICAgICAgICBOVUxMCi0gICAgICAgICAg ICAgICAgICk7Ci0gICAgICAgIHJjID0gdHRvcGVuKHR0bmFtZSwmbG9jYWwsbWRtdHlwLDApOwot ICAgICAgICBpZiAocmMgPiAtMSkgewotICAgICAgICAgICAgbmV0d29yayA9IDE7Ci0gICAgICAg ICAgICBleGl0b25jbG9zZSA9IDE7Ci0jaWZkZWYgQ0tMT0dESUFMCi0gICAgICAgICAgICBkb2xv Z25ldCgpOwotI2VuZGlmIC8qIENLTE9HRElBTCAqLwotICAgICAgICB9IGVsc2UgewotICAgICAg ICAgICAgcHJpbnRmKCI/Q29ubmVjdGlvbiBmYWlsZWQ6ICVzXG4iLGdfdXJsLnNhdik7Ci0gICAg ICAgICAgICBkb2V4aXQoQkFEX0VYSVQsMSk7Ci0gICAgICAgIH0KLSAgICAgICAgLyogQWxzbyBu ZWVkIHRvIGNoZWNrIGhlcmUgZm9yIHNlY3VyZSBhdXRoZW50aWNhdGlvbiBhbHJlYWR5IGRvbmUg Ki8KLQotI2lmZGVmIE5PU1BMCi0gICAgICAgIGNmbGcgPSAxOwotI2Vsc2UKLQl7Ci0gICAgICAg ICAgICBjaGFyICogc2NyaXB0ID0gTlVMTDsKLSAgICAgICAgICAgIGlmICghKHNjcmlwdCA9IChj aGFyICopbWFsbG9jKFNDUklQVExFTikpKQotICAgICAgICAgICAgICBmYXRhbCgiZG91cmw6IG91 dCBvZiBtZW1vcnkiKTsKLSAgICAgICAgICAgIGlmICghZ191cmwucHRoKSB7ICAgICAgICAgICAv KiBXcml0ZSB0aGUgYXBwcm9wcmlhdGUgc2NyaXB0ICovCi0JCWNmbGcgPSAxOwotICAgICAgICAg ICAgICAgIGNrbWFreG1zZyhzY3JpcHQsU0NSSVBUTEVOLAotCQkJICAiaWYgbm90IGVxIHtcXHYo YXV0aHN0YXRlKX0ge3VzZXJ9ICIsCi0JCQkgICJpZiBub3QgZXEge1xcdihhdXRoc3RhdGUpfSB7 dmFsaWR9IHsgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbW90ZSBsb2dpbiAiLCAv KiBObyBwYXRoICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGdfdXJsLnVzciwgICAgICAg LyogSnVzdCBsb2cgaW4gYW5kIENPTk5FQ1QgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg IiAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBnX3VybC5wc3csCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICIsIGlmIGZhaWwgZXhpdCAxIHtJS1NEIGxvZ2luIGZhaWxlZH0gfSIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICIsIGNvbm5lY3QiLAotICAgICAgICAgICAgICAgICAg ICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLQkJLyogcHJpbnRmKCJDTENNRFMgMTogJXNc biIsc2NyaXB0KTsgKi8KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyog ZG9lcyB0aGUgcGF0aCBzcGVjaWZ5IGEgZmlsZSBvciBhIGRpcmVjdG9yeT8gKi8KLSAgICAgICAg ICAgICAgICBpbnQgbGVuID0gc3RybGVuKGdfdXJsLnB0aCk7Ci0gICAgICAgICAgICAgICAgaWYg KElTRElSU0VQKGdfdXJsLnB0aFtsZW4tMV0pKSB7Ci0JCSAgICBja21ha3htc2coc2NyaXB0LFND UklQVExFTiwgLyogRGlyZWN0b3J5IG5hbWUgZ2l2ZW4gKi8KLQkJCSAgICAgICJpZiBub3QgZXEg e1xcdihhdXRoc3RhdGUpfSB7dXNlcn0gXAotaWYgbm90IGVxIHtcXHYoYXV0aHN0YXRlKX0ge3Zh bGlkfSB7IHJlbW90ZSBsb2dpbiAiLAotCQkJICAgICAgZ191cmwudXNyLAotCQkJICAgICAgIiAi LAotCQkJICAgICAgZ191cmwucHN3LAotCQkJICAgICAgIiwgaWYgZmFpbCBleGl0IDEge0lLU0Qg bG9naW4gZmFpbGVkfSB9IiwKLQkJCSAgICAgICIsIHNldCBtYWNybyBlcnJvciBvbiIsCi0JCQkg ICAgICAiLCBzZXQgeGZlciBkaXNwbCBicmllZiIsCi0JCQkgICAgICAiLCBzZXQgeGZlciBiZWxs IG9mZiIsCi0JCQkgICAgICAiLCByZW1vdGUgY2QgIiwKLQkJCSAgICAgIGdfdXJsLnB0aCwKLQkJ CSAgICAgICIsIGxpbmVvdXQgZGlyZWN0b3J5IiwKLQkJCSAgICAgICIsIGNvbm5lY3QiCi0JCQkg ICAgICApOwotCQkgICAgLyogcHJpbnRmKCJDTENNRFMgMjogJXNcbiIsc2NyaXB0KTsgKi8KLQkJ fSBlbHNlIHsKLQkJICAgIGNrbWFreG1zZyhzY3JpcHQsU0NSSVBUTEVOLCAvKiBQYXRoIGdpdmVu LCB0cnkgdG8gR0VUICovCi0JCQkgICAgICAiaWYgbm90IGVxIHtcXHYoYXV0aHN0YXRlKX0ge3Vz ZXJ9IFwKLWlmIG5vdCBlcSB7XFx2KGF1dGhzdGF0ZSl9IHt2YWxpZH0geyByZW1vdGUgbG9naW4g IiwKLQkJCSAgICAgIGdfdXJsLnVzciwKLQkJCSAgICAgICIgIiwKLQkJCSAgICAgIGdfdXJsLnBz dywKLQkJCSAgICAgICIsIGlmIGZhaWwgZXhpdCAxIHtJS1NEIGxvZ2luIGZhaWxlZH0gfSIsCi0J CQkgICAgICAiLCBzZXQgeGZlciBkaXNwbCBicmllZiIsCi0JCQkgICAgICAiLCBzZXQgeGZlciBi ZWxsIG9mZiIsCi0JCQkgICAgICAiLCBnZXQgIiwKLQkJCSAgICAgIGdfdXJsLnB0aCwKLQkJCSAg ICAgICIsIC5yYyA6PSBcXHYoc3RhdHVzKSIsCi0JCQkgICAgICAiLCBpZiBvcGVuIGNvbm5lY3Rp b24gYnllIiwKLQkJCSAgICAgICIsIGV4aXQgXFxtKHJjKSIKLQkJCSAgICAgICk7Ci0JCSAgICAv KiBwcmludGYoIkNMQ01EUyAyOiAlc1xuIixzY3JpcHQpOyAqLwotCQl9Ci0gICAgICAgICAgICB9 Ci0gICAgICAgICAgICBjbGNtZHMgPSBzY3JpcHQ7CQkvKiBNYWtlIHRoaXMgb3VyIC1DIGNtZGxp bmUgbWFjcm8gKi8KLQkgICAgLyogcHJpbnRmKCJIQVZFVVJMPSVkXG4iLGhhdmV1cmwpOyAqLwot ICAgICAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAo Y2tzdHJjbXAoZ191cmwuc3ZjLCJ0ZWxuZXQiLC0xLDApICYmCi0jaWZkZWYgU1NIQlVJTFRJTgot ICAgICAgICAgICAgY2tzdHJjbXAoZ191cmwuc3ZjLCJzc2giLC0xLDApICYmCi0jZW5kaWYgLyog U1NIQlVJTFRJTiAqLwotICAgICAgICAgICAgY2tzdHJjbXAoZ191cmwuc3ZjLCJmdHAiLC0xLDAp KSB7Ci0gICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgJXMgVVJMcyBub3Qgc3VwcG9ydGVkXG4i LAotICAgICAgICAgICAgICAgICAgIGdfdXJsLnN2YyA/IGdfdXJsLnN2YyA6ICIiKTsKLSAgICAg ICAgICAgIGRvZXhpdChCQURfRVhJVCwxKTsKLSAgICAgICAgfQotICAgIH0KLX0KLSNlbmRpZiAv KiBOT0NNREwgKi8KLSNlbmRpZiAvKiBORVRDT05OICovCi0jZW5kaWYgLyogTk9VUkwgKi8KLQot LyoKLSAgbWFpbigpLi4uCi0KLSAgSWYgeW91IGdldCBjb21wbGFpbnRzIGFib3V0ICJtYWluOiBy ZXR1cm4gdHlwZSBpcyBub3QgYmxhaCIsCi0gIGRlZmluZSBNQUlOVFlQRSBvbiB0aGUgQ0MgY29t bWFuZCBsaW5lLCBlLmcuICJDRkxBR1M9LURNQUlOVFlQRT1ibGFoIgotICAod2hlcmUgImJsYWgi IGlzIGludCwgbG9uZywgb3Igd2hhdGV2ZXIpLgotCi0gIElmIHRoZSBjb21wbGFpbnQgaXMgIkF0 dGVtcHQgdG8gcmV0dXJuIGEgdmFsdWUgZnJvbSBhIGZ1bmN0aW9uIG9mIHR5cGUgdm9pZCIKLSAg dGhlbiBhZGQgLURNQUlOSVNWT0lELgotKi8KLSNpZm5kZWYgTUFJTlRZUEUKLSNpZm5kZWYgTUFJ TklTVk9JRAotI2RlZmluZSBNQUlOVFlQRSBpbnQKLSNlbmRpZiAvKiBNQUlOSVNWT0lEICovCi0j ZW5kaWYgLyogTUFJTlRZUEUgKi8KLQotI2lmZGVmIE1BSU5JU1ZPSUQKLSNpZm5kZWYgTUFJTlRZ UEUKLSNkZWZpbmUgTUFJTlRZUEUgdm9pZAotI2VuZGlmIC8qIE1BSU5UWVBFICovCi0jZW5kaWYg LyogTUFJTklTVk9JRCAqLwotCi0jaWZkZWYgYWVnaXMKLS8qIE9uIHRoZSBBcG9sbG8sIGludGVy Y2VwdCBtYWluIHRvIGluc2VydCBhIGNsZWFudXAgaGFuZGxlciAqLwotaW50Ci1ja2NtYWkoYXJn Yyxhcmd2KSBpbnQgYXJnYzsgY2hhciAqKmFyZ3Y7Ci0jZWxzZQotI2lmZGVmIE1BQyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIE1hY2ludG9zaCAqLwotaW50Ci1tYWluICh2b2lkKQot I2Vsc2UKLSNpZmRlZiBfX0dOVUNfXyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHQ0MgY29t cGlsZXIgKi8KLWludAotbWFpbihhcmdjLGFyZ3YpIGludCBhcmdjOyBjaGFyICoqYXJndjsKLSNl bHNlCi0jaWZkZWYgX19ERUNDICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogREVDIEFscGhh IHdpdGggREVDIEMgY29tcGlsZXIgKi8KLSNpZmRlZiBfX0FMUEhBCi1pbnQKLW1haW4oYXJnYyxh cmd2KSBpbnQgYXJnYzsgY2hhciAqKmFyZ3Y7Ci0jZWxzZSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogREVDIEMgY29tcGlsZXIsIG5vdCBBbHBoYSAqLwotI2RlZmluZSBNQUlO SVNWT0lECi1WT0lECi1tYWluKGFyZ2MsYXJndikgaW50IGFyZ2M7IGNoYXIgKiphcmd2OwotI2Vu ZGlmICAvKiBfX0FMUEhBICovCi0jZWxzZQotI2lmZGVmIFNUUkFUVVMgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFN0cmF0dXMgVk9TICovCi1pbnQKLW1haW4oYXJnYyxhcmd2KSBpbnQgYXJn YzsgY2hhciAqKmFyZ3Y7Ci0jZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogSy05NSAqLwotI2lmZGVmIE9TMgotI2lmZGVmIEtVSQotI2RlZmluZSBNQUlOSVNWT0lECi12 b2lkCi1NYWluKCBpbnQgYXJnYywgY2hhciAqKiBhcmd2ICkKLSNlbHNlIC8qIEtVSSAqLwotI2Rl ZmluZSBNQUlOSVNWT0lECi1WT0lECi1tYWluKGFyZ2MsYXJndikgaW50IGFyZ2M7IGNoYXIgKiph cmd2OwotI2VuZGlmIC8qIEtVSSAqLwotI2Vsc2UgIC8qIE5vdCBLOTUgKi8KLU1BSU5UWVBFICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbGwgb3RoZXJzLi4uICovCi1tYWluKGFy Z2MsYXJndikgaW50IGFyZ2M7IGNoYXIgKiphcmd2OwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlm IC8qIFNUUkFUVVMgKi8KLSNlbmRpZiAvKiBfX0RFQ0MgKi8KLSNlbmRpZiAvKiBfX0dOVUNfXyAq LwotI2VuZGlmIC8qIE1BQyAqLwotI2VuZGlmIC8qIGFlZ2lzICovCi0KLS8qIG1haW4gKi8gewot Ci0gICAgY2hhciAqcDsKLQotI2lmbmRlZiBOT1NFVEtFWQotICAgIGludCBpOwotI2VuZGlmIC8q IE5PU0VUS0VZICovCi0KLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgIHNob3J0ICpwZmhhID0gMDE2 MDAwMDAwMDM2OyAgICAgICAgIC8qIEdldCBhcm91bmQgTEFOR19SVCBwcm9ibGVtICovCi0gICAg KnBmaGEgPSAoc2hvcnQpIDA7ICAgICAgICAgICAgICAgICAgLyogTm8gdXNlciBwcm90ZWN0aW9u IGZhdWx0IGhhbmRsZXIgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotCi0gICAgaW50IHVu YnVmID0gMDsJCQkvKiBub256ZXJvIGZvciB1bmJ1ZmZlcmVkIHN0ZG91dCAqLwotCi0vKiBzZXRi dWYgaGFzIHRvIGJlIGNhbGxlZCBvbiB0aGUgZmlsZSBkZXNjcmlwdG9yIGJlZm9yZSBpdCBpcyB1 c2VkICovCi0KLSNpZmRlZiBVTklYCi0jaWZkZWYgTk9OT1NFVEJVRgkJCS8qIFVuYnVmZmVyZWQg Y29uc29sZSBpL28gKi8KLSAgICB1bmJ1ZisrOwkJCQkvKiBhcyBhIGNvbXBpbGUtdGltZSBvcHRp b24gKi8KLSNlbmRpZgkvKiBOT05PU0VUQlVGICovCi0gICAgaWYgKCF1bmJ1ZikgewkJCS8qIE9y IGFzIGEgY29tbWFuZC1saW5lIHNlbGVjdGlvbiAqLwotCWludCBpLCBuOwkJCS8qIFdlIGhhdmUg dG8gcHJlLXByZS1zY2FuIGZvciAqLwotCWNoYXIgKiBzOwkJCS8qIHRoaXMgb25lLiAqLwotCWZv ciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKLQkgICAgcyA9IGFyZ3ZbaV07Ci0JICAgIGlmICgh cykgbiA9IDA7IGVsc2UgbiA9IChpbnQpc3RybGVuKHMpOwotCSAgICBpZiAobiA+IDQpIHsKLQkJ aWYgKCFja3N0cmNtcCgiLS11bmJ1ZmZlcmVkIixzLG4sMCkpIHsKLQkJICAgIHVuYnVmKys7Ci0J CSAgICBicmVhazsKLQkJfQotCSAgICB9Ci0JfQotICAgIH0KLSAgICBpZiAodW5idWYpCi0gICAg ICBzZXRidWYoc3Rkb3V0LE5VTEwpOwotI2VuZGlmCS8qIFVOSVggKi8KLQotLyogRG8gc29tZSBp bml0aWFsaXphdGlvbiAqLwotCi0jaWZkZWYgVk1TCi0jaWZkZWYgX19ERUNDCi0gICAgLyogR2V0 IHNvbWUgUk1TIGRlZmF1bHQgc2V0dGluZ3MuICovCi0gICAgZ2V0X3Jtc19kZWZhdWx0cygpOwot I2VuZGlmIC8qIGRlZiBfX0RFQ0MgKi8KLSNlbmRpZiAvKiBkZWYgVk1TICovCi0KLSNpZm5kZWYg TUFDCi0gICAgeGFyZ2MgPSB4YXJncyA9IGFyZ2M7ICAgICAgICAgICAgICAgLyogTWFrZSBnbG9i YWwgY29waWVzIG9mIGFyZ2MgKi8KLSAgICB4YXJndiA9IGFyZ3Y7ICAgICAgICAgICAgICAgICAg ICAgICAvKiAuLi5hbmQgYXJndi4gKi8KLSAgICB4YXJnMCA9IGFyZ3ZbMF07Ci0jaWZkZWYgTlQK LSAgICBzZXRPU1ZlcigpOwotI2VuZGlmIC8qIE5UICovCi0gICAgenN0cmlwKGFyZ3ZbMF0sJnAp OyAgICAgICAgICAgICAgICAgLyogR2V0IG5hbWUgd2Ugd2VyZSBpbnZva2VkIHdpdGggKi8KLSAg ICBtYWtlc3RyKCZteW5hbWUscCk7Ci0gICAgaWYgKCFja3N0cmNtcChteW5hbWUsInRlbG5ldCIs LTEsMCkpICAgICAgIGhvd2NhbGxlZCA9IElfQU1fVEVMTkVUOwotI2lmZGVmIENLX0tFUkJFUk9T Ci0gICAgZWxzZSBpZiAoIWNrc3RyY21wKG15bmFtZSwia3RlbG5ldCIsLTEsMCkpIGhvd2NhbGxl ZCA9IElfQU1fVEVMTkVUOwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0gICAgZWxzZSBpZiAo IWNrc3RyY21wKG15bmFtZSwicmxvZ2luIiwtMSwwKSkgIGhvd2NhbGxlZCA9IElfQU1fUkxPR0lO OwotICAgIGVsc2UgaWYgKCFja3N0cmNtcChteW5hbWUsImlrc2QiLC0xLDApKSAgICBob3djYWxs ZWQgPSBJX0FNX0lLU0Q7Ci0jaWZkZWYgTkVXRlRQCi0gICAgZWxzZSBpZiAoIWNrc3RyY21wKG15 bmFtZSwiZnRwIiwtMSwwKSkgICAgIGhvd2NhbGxlZCA9IElfQU1fRlRQOwotI2VuZGlmIC8qIE5F V0ZUUCAqLwotI2lmbmRlZiBOT0hUVFAKLSAgICBlbHNlIGlmICghY2tzdHJjbXAobXluYW1lLCJo dHRwIiwtMSwwKSkgICAgaG93Y2FsbGVkID0gSV9BTV9IVFRQOwotI2VuZGlmIC8qIE5PSFRUUCAq LwotI2lmZGVmIE9TMgotICAgIGVsc2UgaWYgKCFja3N0cmNtcChteW5hbWUsInRlbG5ldC5leGUi LC0xLDApKSAgaG93Y2FsbGVkID0gSV9BTV9URUxORVQ7Ci0jaWZkZWYgU1NIQlVJTFRJTgotICAg IGVsc2UgaWYgKCFja3N0cmNtcChteW5hbWUsInNzaCIsLTEsMCkpICBob3djYWxsZWQgPSBJX0FN X1NTSDsKLSAgICBlbHNlIGlmICghY2tzdHJjbXAobXluYW1lLCJzc2guZXhlIiwtMSwwKSkgIGhv d2NhbGxlZCA9IElfQU1fU1NIOwotI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KLSNpZmRlZiBDS19L RVJCRVJPUwotICAgIGVsc2UgaWYgKCFja3N0cmNtcChteW5hbWUsImt0ZWxuZXQuZXhlIiwtMSww KSkgaG93Y2FsbGVkID0gSV9BTV9URUxORVQ7Ci0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSAg ICBlbHNlIGlmICghY2tzdHJjbXAobXluYW1lLCJybG9naW4uZXhlIiwtMSwwKSkgIGhvd2NhbGxl ZCA9IElfQU1fUkxPR0lOOwotI2lmZGVmIE5UCi0gICAgZWxzZSBpZiAoIWNrc3RyY21wKG15bmFt ZSwiaWtzZG50IiwtMSwwKSkgICAgaG93Y2FsbGVkID0gSV9BTV9JS1NEOwotICAgIGVsc2UgaWYg KCFja3N0cmNtcChteW5hbWUsImlrc2RudC5leGUiLC0xLDApKSAgICBob3djYWxsZWQgPSBJX0FN X0lLU0Q7Ci0jZW5kaWYgLyogTlQgKi8KLSNpZmRlZiBORVdGVFAKLSAgICBlbHNlIGlmICghY2tz dHJjbXAobXluYW1lLCJmdHAuZXhlIiwtMSwwKSkgICAgIGhvd2NhbGxlZCA9IElfQU1fRlRQOwot I2VuZGlmIC8qIE5FV0ZUUCAqLwotI2lmbmRlZiBOT0hUVFAKLSAgICBlbHNlIGlmICghY2tzdHJj bXAobXluYW1lLCJodHRwLmV4ZSIsLTEsMCkpICAgIGhvd2NhbGxlZCA9IElfQU1fSFRUUDsKLSNl bmRpZiAvKiBOT0hUVFAgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICBlbHNlIGlmICghY2tzdHJj bXAobXluYW1lLCJrZXJtaXQtc3Noc3ViIiwtMSwwKSkgaG93Y2FsbGVkID0gSV9BTV9TU0hTVUI7 Ci0KLSNpZm5kZWYgTk9JQ1AKLSAgICBjbWRpbmkoKTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBNdXN0IGNvbWUgYmVmb3JlIHByZXNjYW4gKi8KLSAgICBkZWJ1ZyhGMTAwLCJtYWluIGNt ZGluaSgpIGRvbmUiLCIiLDApOwotI2VuZGlmIC8qIE5PSUNQICovCi0gICAgcHJlc2NhbigwKTsg ICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJlLUNoZWNrIGZvciBkZWJ1Z2dpbmcsIGV0YyAq LwotI2VuZGlmIC8qIE1BQyAqLwotICAgIGRlYnVnKEYxMDEsIk1BSU4gZmVvbCIsIiIsZmVvbCk7 Ci0gICAgbWFrZXZlcigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHV0IHRvZ2V0aGVy IHZlcnNpb24gc3RyaW5ncyAqLwotI2lmbmRlZiBOT1NFVEtFWSAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEFsbG9jYXRlICYgaW5pdGlhbGl6ZSB0aGUga2V5bWFwICovCi0gICAgLyogVGhpcyBj b2RlIGhhcyBiZWVuIG1vdmVkIHRvIGJlZm9yZSBzeXNpbml0KCkgZm9yIEs5NUcgKi8KLSAgICBp ZiAoIShrZXltYXAgPSAoS0VZICopIG1hbGxvYyhzaXplb2YoS0VZKSpLTVNJWkUpKSkKLSAgICAg IGZhdGFsKCJtYWluOiBubyBtZW1vcnkgZm9yIGtleW1hcCIpOwotICAgIGlmICghKG1hY3JvdGFi ID0gKE1BQ1JPICopIG1hbGxvYyhzaXplb2YoTUFDUk8pKktNU0laRSkpKQotICAgICAgZmF0YWwo Im1haW46IG5vIG1lbW9yeSBmb3IgbWFjcm90YWIiKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgS01T SVpFOyBpKyspIHsKLSAgICAgICBrZXltYXBbaV0gPSAoS0VZKSBpOwotICAgICAgIG1hY3JvdGFi W2ldID0gTlVMTDsKLSAgICB9Ci0jZW5kaWYgLyogTk9TRVRLRVkgKi8KLQotICAgIHNob3J0Ynl0 ZXMueF9zaG9ydCA9IDB4QUJDRDsgICAgICAgIC8qIEdldCBFbmRpYW5uZXNzICovCi0gICAgaWYg KHNob3J0Ynl0ZXMueF9jaGFyWzBdID09IDB4Q0QpIHsgLyogMCA9IEJpZyBFbmRpYW4gKi8KLSAg ICAgICAgYnl0ZW9yZGVyID0gMTsgICAgICAgICAgICAgICAgICAvKiAxID0gTGl0dGxlIEVuZGlh biAqLwotICAgICAgICBiaWdlbmRpYW4gPSAwOyAgICAgICAgICAgICAgICAgIC8qIChmb3IgY2xh cml0eSBpbiBwcm9ncmFtbWluZykgKi8KLSAgICB9IGVsc2UgewotICAgICAgICBieXRlb3JkZXIg PSAwOyAgICAgICAgICAgICAgICAgIC8qIEJpZyBFbmRpYW4gKi8KLSAgICAgICAgYmlnZW5kaWFu ID0gMTsKLSAgICB9Ci0gICAgaWYgKHNpemVvZihDS19PRkZfVCkgPT0gOCkJCS8qIExhcmdlIGZp bGVzIGFuZCBpbnRzPyAqLwotICAgICAgaGF2ZWxmcyA9IDE7Ci0KLSAgICBpZiAoc3lzaW5pdCgp IDwgMCkgICAgICAgICAgICAgICAgICAvKiBTeXN0ZW0tZGVwZW5kZW50IGluaXRpYWxpemF0aW9u LiAqLwotICAgICAgZmF0YWwoIkNhbid0IGluaXRpYWxpemUhIik7Ci0gICAgZWxzZQotICAgICAg aW5pdGZsZyA9IDE7ICAgICAgICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIHdlIGRpZC4gKi8K LSAgICBkZWJ1ZyhGMTExLCJja2NtYWkgbXluYW1lIixteW5hbWUsaG93Y2FsbGVkKTsKLQotI2lm ZGVmIFVOSVgKLSAgICBnZXRleGVkaXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21w dXRlIGV4ZWRpciB2YXJpYWJsZSAqLwotI2VuZGlmIC8qIFVOSVggKi8KLQotI2lmZGVmIENLU1lT TE9HCi0jaWZkZWYgU1lTTE9HTEVWRUwKLS8qCi0gIElmIGJ1aWx0IHdpdGggLURTWVNMT0dMRVZF TCBvbiBjYyBjb21tYW5kIGxpbmUsIHRoaXMgbWVhbnMgd2UgYWx3YXlzCi0gIGRvIHN5c2xvZ2dp bmcgYXQgdGhlIGluZGljYXRlZCBsZXZlbC4KLSovCi0gICAgenN5c2xvZygpOyAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogT3BlbiBzeXNsb2cgKi8KLSNlbHNlIC8qIFNZU0xPR0xFVkVMICov Ci0jaWZkZWYgSUtTRAotICAgIGlmIChpbnNlcnZlcikKLSAgICAgIHpzeXNsb2coKTsgICAgICAg ICAgICAgICAgICAgICAgICAvKiBPcGVuIHN5c2xvZyAqLwotI2VuZGlmIC8qIElLU0QgKi8KLSNl bmRpZiAvKiBTWVNMT0dMRVZFTCAqLwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0KLSNpZmRlZiBD S19LRVJCRVJPUwotICAgIGluaV9rZXJiKCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElu aXRpYWxpemUgS2VyYmVyb3MgZGF0YSAqLwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0jaWZk ZWYgQ0tfU1NMCi0gICAgc3NsX29uY2VfaW5pdCgpOwotI2VuZGlmIC8qIENLX1NTTCAqLwotI2lm ZGVmIFROQ09ERQotICAgIHRuX3NldF9tb2RlcygpOyAgICAgICAgICAgICAgICAgICAgIC8qIElu aXQgVGVsbmV0IE9wdGlvbiB0YWJsZXMgKi8KLSNlbmRpZiAvKiBUTkNPREUgKi8KLQotI2lmZGVm IENLX1RUR1dTSVogICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgc2NyZWVuIGRp bWVuc2lvbnMgKi8KLSNpZmRlZiBPUzIKLSAgICB0dGdjd3N6KCk7Ci0jZWxzZSAvKiBPUzIgKi8K LSAgICBpZiAodHRnd3NpeigpID4gMCkgewotICAgICAgICBpZiAodHRfcm93cyA+IDAgJiYgdHRf Y29scyA+IDApIHsKLSAgICAgICAgICAgIGNtZF9yb3dzID0gdHRfcm93czsKLSAgICAgICAgICAg IGNtZF9jb2xzID0gdHRfY29sczsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8K LSNlbmRpZiAvKiBDS19UVEdXU0laICovCi0KLSNpZm5kZWYgT1MyCi0jaWZkZWYgVENQU09DS0VU Ci0jaWZkZWYgQ0tfU09DS1MKLSAgICBTT0NLU2luaXQoYXJndlswXSk7ICAgICAgICAgICAgICAg ICAvKiBJbnRlcm5ldCByZWxheSBwYWNrYWdlLi4uICovCi0jZW5kaWYgLyogQ0tfU09DS1MgKi8K LSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgIGluaXRmbG93 KCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgZmxvdy1jb250cm9sIHRh YmxlICovCi0KLSNpZm5kZWYgTk9JQ1AKLSNpZmRlZiBDS0ZMT0FUCi0gICAgaW5pdGZsb2F0KCk7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVkdWNlIGZsb2F0aW5nLXBvaW50IHByZWNpc2lv biAqLwotI2VuZGlmIC8qIENLRkxPQVQgKi8KLSNlbmRpZiAvKiBOT0lDUCAqLwotCi0jaWZuZGVm IE5PWEZFUgotICAgIGluaXR4bGlzdCgpOwkJCS8qIEluaXQgZXhjZXB0aW9uIGxpc3RzICovCi0K LSNpZmRlZiBDS19YWVogICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHBy b3RvY29scy4uLiAgKi8KLQotI2lmZGVmIFhZWl9JTlRFUk5BTCAvKiBYWVpNT0RFTSBhcmUgaW50 ZXJuYWwgLi4uICovCi0KLSNpZmRlZiBDT01NRU5UCi0gICAgLyogQ2FuJ3QgZG8gdGhpcyBmb3Ig WE1PREVNIGJlY2F1c2UgaWYgZmlsZW5hbWUgY29udGFpbnMgYSAiQyIgZXRjLi4uICovCi0gICAg aW5pdHByb3RvKFBST1RPX1gsICJyeCAlcyIsInJ4ICVzIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVM TCwgTlVMTCk7Ci0gICAgaW5pdHByb3RvKFBST1RPX1hDLCJyYyAlcyIsInJjICVzIiwgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0jZWxzZSAvKiBDT01NRU5UICovCi0gICAgaW5pdHBy b3RvKFBST1RPX1gsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwot ICAgIGluaXRwcm90byhQUk9UT19YQyxOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM LCBOVUxMKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgaW5pdHByb3RvKFBST1RPX1ksICJy YiIsInJiIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0gICAgaW5pdHByb3RvKFBS T1RPX0csICJyYiIsInJiIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0gICAgaW5p dHByb3RvKFBST1RPX1osICJyeiIsInJ6IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7 Ci0gICBpbml0cHJvdG8oUFJPVE9fSywia2VybWl0IC1pciIsImtlcm1pdCAtciIsImtlcm1pdCAt eCIsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0gICAgLyogS2VybWl0IE11c3QgYmUgbGFzdCAqLwot Ci0jZWxzZSAvKiBYWVpNT0RFTSBhcmUgZXh0ZXJuYWwgcHJvdG9jb2xzIC4uLiAqLwotCi0gLyog ICAgICAgICAgICAgICAgICBzMSAgICAgIHMyICAgICBzMyAgICBzNCAgICAgIHM1ICAgICAgICAg czYgICAgICBzNyAgICAgKi8KLSBpbml0cHJvdG8oUFJPVE9fWCwgInJ4ICVzIiwicnggJXMiLE5V TEwsInN4ICVzIiwic3ggLWEgJXMiLCJyeCAlcyIsICJyeCAlcyIpOwotIGluaXRwcm90byhQUk9U T19YQywicmMgJXMiLCJyYyAlcyIsTlVMTCwic3ggJXMiLCJzeCAtYSAlcyIsInJjICVzIiwgInJj ICVzIik7Ci0gaW5pdHByb3RvKFBST1RPX1ksICJyYiIsICAgInJiIiwgICBOVUxMLCJzYiAlcyIs InNiIC1hICVzIiwicmIiLCAgICAicmIiICAgKTsKLSBpbml0cHJvdG8oUFJPVE9fRywgInJiIiwg ICAicmIiLCAgIE5VTEwsInNiICVzIiwic2IgLWEgJXMiLCJyYiIsICAgICJyYiIgICApOwotIGlu aXRwcm90byhQUk9UT19aLCAicnoiLCAgICJyeiIsICAgTlVMTCwic3ogJXMiLCJzeiAtYSAlcyIs InJ6IiwgICAgInJ6IiAgICk7Ci0gaW5pdHByb3RvKFBST1RPX0ssICJrZXJtaXQgLWlyIiwia2Vy bWl0IC1yIiwia2VybWl0IC14IixOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAvKiBLZXJtaXQgbXVz dCBiZSBsYXN0ICovCi0KLSNlbmRpZiAvKiBYWVpfSU5URVJOQUwgKi8KLQotI2Vsc2UgIC8qIE5v IFhZWk1PREVNIHN1cHBvcnQgKi8KLQotICAgaW5pdHByb3RvKFBST1RPX0ssImtlcm1pdCAtaXIi LCJrZXJtaXQgLXIiLCJrZXJtaXQgLXgiLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotCi0jZW5kaWYg LyogQ0tfWFlaICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLSAgICBjb25ub2koKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBDb25zb2xlIGludGVycnVwdHMgb2ZmICovCi0KLSNpZm5k ZWYgTk9YRkVSCi0jaWZkZWYgT1MyCi0gICAgLyogSW5pdGlhbGl6ZSBLZXJtaXQgYW5kIFptb2Rl bSBBdXRvLURvd25sb2FkIFN0cmluZ3MgKi8KLSAgICBhZGxfa3N0ciA9IHN0cmR1cCgiS0VSTUlU IFJFQURZIFRPIFNFTkQuLi4iKTsKLSAgICBhZGxfenN0ciA9IHN0cmR1cCgicnpcciIpOwotI2Vu ZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgUEFUVEVSTlMKLSAgICBpbml0cGF0KCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIGZpbGVuYW1lIHBhdHRlcm5zICovCi0jZW5k aWYgLyogUEFUVEVSTlMgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBOT0NTRVRT Ci0gICAgaW5pdGNzZXRzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBj aGFyYWN0ZXIgc2V0cyAqLwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQotI2lmbmRlZiBOT0lDUAot I2lmZGVmIERGQ0RNU0cKLSAgICBtYWtlc3RyKCZjZG1zZ3N0cixERkNETVNHKTsKLSAgICBtYWtl bGlzdChjZG1zZ3N0cixjZG1zZ2ZpbGUsOCk7ICAgICAvKiBJbml0aWFsaXplIENEIG1lc3NhZ2Ug ZmlsZW5hbWVzICovCi0jZW5kaWYgLyogREZDRE1TRyAqLwotI2VuZGlmIC8qIE5PSUNQICovCi0K LSAgICBzc3RhdGUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBkZWZhdWx0IHN0 YXJ0IHN0YXRlLiAqLwotI2lmZGVmIERZTkFNSUMKLSAgICBpZiAoZ2V0aW9icygpIDwgMCkKLSAg ICAgIGZhdGFsKCJDYW4ndCBhbGxvY2F0ZSBpL28gYnVmZmVycyEiKTsKLSNlbmRpZiAvKiBEWU5B TUlDICovCi0KLSNpZm5kZWYgTk9TUEwKLSNpZm5kZWYgTk9SQU5ET00KLSAgICB7Ci0gICAgICAg IGNoYXIgc3RhY2tkYXRhWzI1Nl07Ci0gICAgICAgIHVuc2lnbmVkIGludCBjID0gMTIzNCwgbjsK LSAgICAgICAgLyogdHJ5IHRvIG1ha2UgYSByYW5kb20gdW5zaWduZWQgaW50IHRvIGZlZWQgc3Jh bmQoKSAqLwotI2lmbmRlZiBWTVMKLQkvKiB0aW1lLmggYW5kIE11bHRpTmV0IGRvIG5vdCBnZXQg YWxvbmcgKi8KLSAgICAgICAgYyA9IHRpbWUoTlVMTCk7Ci0jZW5kaWYgLyogVk1TICovCi0gICAg ICAgIGMgKj0gZ2V0cGlkKCk7Ci0JLyogUmVmZXJlbmNlZCBiZWZvcmUgc2V0Li4uIERFTElCRVJB VEVMWSAqLwotICAgICAgICBmb3IgKG4gPSAwOyBuIDwgc2l6ZW9mKHN0YWNrZGF0YSk7IG4rKykg LyogSUdOT1JFIFdBUk5JTkcgKi8KLQkgIGMgKz0gc3RhY2tkYXRhW25dOwkJLyogREVMSUJFUkFU RUxZIFVTRUQgQkVGT1JFIFNFVCAqLwotICAgICAgICBzcmFuZCgodW5zaWduZWQgaW50KWMpOwot ICAgIH0KLSNlbmRpZiAvKiBOT1JBTkRPTSAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSAgICBj a2hvc3QobXlob3N0LE1ZSE9TVEwpOyAgICAgICAgICAgICAvKiBOYW1lIG9mIGxvY2FsIGhvc3Qg Ki8KLSAgICBkZWJ1ZyhGMTEwLCJtYWluIGNraG9zdCIsbXlob3N0LDApOwotI2lmZGVmIElLU0QK LSAgICBpZiAoIWluc2VydmVyKSB7Ci0jZW5kaWYgLyogSUtTRCAqLwotICAgICAgICBja3N0cm5j cHkodHRuYW1lLGRmdHR5LFRUTkFNTEVOKTsgLyogU2V0IHVwIGRlZmF1bHQgdHR5IG5hbWUuICov Ci0gICAgICAgIGxvY2FsID0gbm9sb2NhbCA/IDAgOiBkZmxvYzsgICAgLyogQW5kIHdoZXRoZXIg aXQncyBsb2NhbCBvciByZW1vdGUuICovCi0gICAgICAgIHBhcml0eSA9IGRmcHJ0eTsgICAgICAg ICAgICAgICAgLyogU2V0IGluaXRpYWwgcGFyaXR5LCAqLwotI2lmbmRlZiBOT1hGRVIKLSAgICAg ICAgbXlpbmRleCA9IGdldHN5c2l4KGNrc3lzaWQpOyAgICAvKiBTeXN0ZW0gaW5kZXggKi8KLSNl bmRpZiAvKiBOT1hGRVIgKi8KLSAgICAgICAgaWYgKGxvY2FsKSBpZiAodHRvcGVuKHR0bmFtZSwm bG9jYWwsMCwwKSA8IDApIHsKLSNpZm5kZWYgT1MyCi0gICAgICAgICAgICBjb25vbCgiQ2FuJ3Qg b3BlbiBkZXZpY2U6ICIpOwotICAgICAgICAgICAgY29ub2xsKHR0bmFtZSk7Ci0jZW5kaWYgLyog T1MyICovCi0gICAgICAgICAgICBsb2NhbCA9IDA7Ci0gICAgICAgICAgICBja3N0cm5jcHkodHRu YW1lLENUVE5BTSxUVE5BTUxFTik7Ci0gICAgICAgIH0KLSAgICAgICAgc2V0ZmxvdygpOyAgICAg ICAgICAgICAgICAgICAgICAvKiBTZXQgYXBwcm9wcmlhdGUgZmxvdyBjb250cm9sICovCi0gICAg ICAgIHNwZWVkID0gdHRnc3BkKCk7ICAgICAgICAgICAgICAgLyogR2V0IHRyYW5zbWlzc2lvbiBz cGVlZC4gKi8KLSNpZmRlZiBJS1NECi0gICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLQotI2lmZGVm IEFOWVgyNSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFsbCBYLjI1IGltcGxlbWVudGF0 aW9ucyAqLwotI2lmbmRlZiBJQk1YMjUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV4Y2Vw dCBJQk0gaGF2ZSBQQUQgc3VwcG9ydCAqLwotICAgIGluaXRwYWQoKTsgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEluaXRpYWxpemUgWC4yNSBQQUQgKi8KLSNlbmRpZiAvKiBJQk1YMjUgKi8K LSNlbmRpZiAvKiBBTllYMjUgKi8KLQotI2lmbmRlZiBOT1hGRVIKLSAgICBpZiAoaW5pYnVmcyhT QlNJWixSQlNJWikgPCAwKSAgICAgICAvKiBBbGxvY2F0ZSBwYWNrZXQgYnVmZmVycyAqLwotICAg ICAgZmF0YWwoIkNhbid0IGFsbG9jYXRlIHBhY2tldCBidWZmZXJzISIpOwotI2lmbmRlZiBOT0NL U1BFRUQKLSAgICBzZXRwcmVmaXgocHJlZml4aW5nKTsgICAgICAgICAgICAgICAvKiBTZXQgdXAg Y29udHJvbCBjaGFyIHByZWZpeGluZyAqLwotI2VuZGlmIC8qIE5PQ0tTUEVFRCAqLwotI2VuZGlm IC8qIE5PWEZFUiAqLwotCi0jaWZuZGVmIE5PSUNQCi0gICAgaWYgKHNzdGVsbmV0Ci0jaWZkZWYg SUtTRAotICAgICAgICB8fCBpbnNlcnZlcgotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgICAgKSB7 Ci0gICAgICAgIGludCBvbiA9IDEsIHggPSAwOwotICAgICAgICBleHRlcm4gaW50IGNreGVjaCwg dHRuZXQsIHR0bnByb3RvLCBjbWRtc2s7Ci0jaWZkZWYgU09fU05EQlVGCi0gICAgICAgIGV4dGVy biBpbnQgdGNwX3NlbmRidWY7Ci0jZW5kaWYKLSNpZmRlZiBTT19SQ1ZCVUYKLSAgICAgICAgZXh0 ZXJuIGludCB0Y3BfcmVjdmJ1ZjsKLSNlbmRpZgotI2lmZGVmIFNPX0tFRVBBTElWRQotICAgICAg ICBleHRlcm4gaW50IHRjcF9rZWVwYWxpdmU7Ci0jZW5kaWYKLSNpZmRlZiBTT19MSU5HRVIKLSAg ICAgICAgZXh0ZXJuIGludCB0Y3BfbGluZ2VyLCB0Y3BfbGluZ2VyX3RtbzsKLSNlbmRpZiAvKiBT T19MSU5HRVIgKi8KLSNpZmRlZiBTT19ET05UUk9VVEUKLSAgICAgICAgZXh0ZXJuIGludCB0Y3Bf ZG9udHJvdXRlOwotI2VuZGlmIC8qIFNPX0RPTlRST1VURSAqLwotI2lmZGVmIFRDUF9OT0RFTEFZ Ci0gICAgICAgIGV4dGVybiBpbnQgdGNwX25vZGVsYXk7Ci0jZW5kaWYgLyogVENQX05PREVMQVkg Ki8KLSNpZmRlZiBJS1NECi0gICAgICAgIGV4dGVybiBpbnQgaWtsb2dvcGVuOwotI2VuZGlmIC8q IElLU0QgKi8KLSAgICAgICAgZXh0ZXJuIGludCB0dG1kbTsKLQotI2lmZGVmIFVOSVgKLSAgICAg ICAgaWYgKGlzYXR0eSgwKSkKLSAgICAgICAgICBmYXRhbCgiSW50ZXJuZXQgS2VybWl0IFNlcnZp Y2UgY2Fubm90IGJlIHN0YXJ0ZWQgYXQgYSB0ZXJtaW5hbC4iKTsKLSNlbmRpZiAvKiBVTklYICov Ci0KLSAgICAgICAgcmVsaWFibGUgPSB4cmVsaWFibGUgPSBTRVRfT047ICAvKiBJS1NEIGhhcyBy ZWxpYWJsZSBjb25uZWN0aW9uICovCi0jaWZuZGVmIFZNUwotICAgICAgICBmbG93ID0gMDsgICAg ICAgICAgICAgICAgICAgICAgIC8qIE5vIGZsb3cgY29udHJvbCBuZWVkZWQgKi8KLSNlbmRpZiAv KiBWTVMgKi8KLSAgICAgICAgYmdzZXQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBOb3Qg aW4gYmFja2dyb3VuZCAqLwotICAgICAgICBub3B1c2ggPSAxOyAgICAgICAgICAgICAgICAgICAg IC8qIE5vIGV4dGVybmFsIHByb2Nlc3NlcyAqLwotICAgICAgICBwYXJpdHkgPSAwOyAgICAgICAg ICAgICAgICAgICAgIC8qIDggYml0cyAuLi4gKi8KLSAgICAgICAgY21kbXNrID0gMHhmZjsgICAg ICAgICAgICAgICAgICAvKiBhbGwgdGhlIHdheSAqLwotICAgICAgICBjbWFzayA9IDB4ZmY7Ci0K LSNpZmRlZiBJS1NECi0gICAgICAgIGlmIChpbnNlcnZlcikgeyAgICAgICAgICAgICAgICAgLyog SWYgSUtTRCAqLwotICAgICAgICAgICAgZG9pa3NkaW5pdCgpOyAgICAgICAgICAgICAgIC8qIEV4 ZWN1dGUgSUtTRCBjb25maWd1cmF0aW9uIGZpbGUgKi8KLSAgICAgICAgICAgIHdoaWxlICh0bGV2 ZWwgPiAtMSkKLSAgICAgICAgICAgICAgcGFyc2VyKDEpOyAgICAgICAgICAgICAgICAvKiAoSWdu b3JlIGFueSBmaWxlLXhmZXIgY29tbWFuZHMpICovCi0gICAgICAgICAgICBpa3NkY2YgPSAxOyAg ICAgICAgICAgICAgICAgLyogSUtTRCBjLmYuIGhhcyBiZWVuIHByb2Nlc3NlZCAqLwotICAgICAg ICB9Ci0gICAgICAgIGlmICghaWtsb2dvcGVuKSAoVk9JRCkgZG9pa2xvZygpOyAvKiBPcGVuIEtl cm1pdC1zcGVjaWZpYyBsb2cgKi8KLSNlbmRpZiAvKiBJS1NEICovCi0KLSNpZmRlZiBVTklYCi0g ICAgICAgIHNldGJ1ZihzdGRvdXQsTlVMTCk7ICAgICAgICAgICAgLyogRG9uJ3QgYnVmZmVyIHRo ZSBvdXRwdXQgKi8KLSAgICAgICAgY2tzdHJuY3B5KHR0bmFtZSwiMCIsVFROQU1MRU4pOyAvKiBu b3QgIi9kZXYvdHR5Ii4uLiAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSAgICAgICAgbG9jYWwgPSAw OyAgICAgICAgICAgICAgICAgICAgICAvKiBXZSBhcmUgaW4gcmVtb3RlIG1vZGUgKi8KLSAgICAg ICAgY2t4ZWNoID0gMTsgICAgICAgICAgICAgICAgICAgICAvKiBXZSB3aWxsIGVjaG8gKi8KLSNp ZmRlZiBPUzIKLSAgICAgICAgbmV0dHlwZSA9IE5FVF9UQ1BCOyAgICAgICAgICAgICAvKiBTbyB0 dG9wZW4oKSB0cmVhdHMgdGhlIGNvbm5lY3Rpb24gKi8KLSAgICAgICAgbWRtdHlwID0gLW5ldHR5 cGU7ICAgICAgICAgICAgICAvKiBhcyBhIG5ldHdvcmsgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAg ICAgICAgZGVidWcoRjEwMCwibWFpbiBhYm91dCB0byBjYWxsIHR0b3BlbigpIGluc2VydmVyIiwi IiwwKTsKLSAgICAgICAgaWYgKHR0b3Blbih0dG5hbWUsJmxvY2FsLG1kbXR5cCwwKSA8IDApIHsg LyogT3BlbiBjb21tIGNoYW5uZWwgKi8KLSAgICAgICAgICAgIGZhdGFsKCJjYW4ndCBpbml0aWFs aXplIGkvbyIpOwotICAgICAgICB9Ci0jaWZkZWYgT1MyCi0gICAgICAgIGxvY2FsID0gMDsKLSAg ICAgICAgbmV0d29yayA9IDE7ICAgICAgICAgICAgICAgICAgICAvKiBEb2VzIHVzZSBuZXR3b3Jr aW5nIGNvZGUgKi8KLSNlbHNlICAvKiBPUzIgKi8KLSAgICAgICAgbmV0d29yayA9IDA7ICAgICAg ICAgICAgICAgICAgICAvKiBEb2VzIG5vdCB1c2UgbmV0d29ya2luZyBjb2RlICovCi0jZW5kaWYg LyogT1MyICovCi0gICAgICAgIHR0bWRtID0gLTE7ICAgICAgICAgICAgICAgICAgICAgLyogRG9l cyBub3QgdXNlIGEgbW9kZW0gKi8KLSAgICAgICAgc3N0ZWxuZXQgPSAxOyAgICAgICAgICAgICAg ICAgICAvKiBEbyBzZXJ2ZXItc2lkZSBUZWxuZXQgbmVnb3RhdGlvbnMgKi8KLSAgICAgICAgZGVi dWcoRjExMSwiTUFJTiIsInNzdGVsbmV0Iixzc3RlbG5ldCk7Ci0gICAgICAgIHR0bmV0ID0gTkVU X1RDUEI7ICAgICAgICAgICAgICAgLyogTmV0d29yayB0eXBlIGlzIFRDUCBzb2NrZXRzICovCi0g ICAgICAgIHR0bnByb3RvID0gTlBfVEVMTkVUOyAgICAgICAgICAgLyogTmV0d29yZCBwcm90b2Nv bCBpcyBUZWxuZXQgKi8KLSNpZmRlZiBJS1NEQgotICAgICAgICBkYmluaXQoKTsgICAgICAgICAg ICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgZGF0YWJhc2UgcmVjb3JkICovCi0jZW5kaWYgLyog SUtTREIgKi8KLSNpZm5kZWYgT1MyCi0jaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KLSAgICAgICAg LyogQmVmb3JlIGluaXRpYWxpemF0aW5nIFRlbG5ldC9SbG9naW4gbmVnb3RpYXRpb25zLCBpbml0 IEtlcmJlcm9zICovCi0gICAgICAgIGNrX2F1dGhfaW5pdChja2dldHBlZXIoKSwiIiwiIiwwKTsK LSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotCi0jaWZkZWYgTk9OX0JMT0NLX0lPCi0g ICAgICAgIG9uID0gMTsKLSAgICAgICAgeCA9IHNvY2tldF9pb2N0bCgwLEZJT05CSU8sJm9uKTsK LSAgICAgICAgZGVidWcoRjEwMSwibWFpbiBGSU9OQklPIiwiIix4KTsKLSNlbmRpZiAvKiBOT05f QkxPQ0tfSU8gKi8KLSNpZmRlZiBTT19PT0JJTkxJTkUKLSAgICAgICAgb24gPSAxOwotICAgICAg ICB4ID0gc2V0c29ja29wdCgwLCBTT0xfU09DS0VULCBTT19PT0JJTkxJTkUsIChjaGFyICopJm9u LCBzaXplb2Yob24pKTsKLSAgICAgICAgZGVidWcoRjEwMSwibWFpbiBTT19PT0JJTkxJTkUiLCIi LHgpOwotI2VuZGlmIC8qIFNPX09PQklOTElORSAqLwotCi0jaWZuZGVmIE5PVENQT1BUUwotI2lm bmRlZiBkYXRhZ2VuZXJhbAotI2lmZGVmIFNPTF9TT0NLRVQKLSNpZmRlZiBUQ1BfTk9ERUxBWQot ICAgICAgICBub19kZWxheSgwLHRjcF9ub2RlbGF5KTsKLSNlbmRpZiAvKiBUQ1BfTk9ERUxBWSAq LwotI2lmZGVmIFNPX0tFRVBBTElWRQotICAgICAgICBrZWVwYWxpdmUoMCx0Y3Bfa2VlcGFsaXZl KTsKLSNlbmRpZiAvKiBTT19LRUVQQUxJVkUgKi8KLSNpZmRlZiBTT19MSU5HRVIKLSAgICAgICAg Y2tfbGluZ2VyKDAsdGNwX2xpbmdlciwgdGNwX2xpbmdlcl90bW8pOwotI2VuZGlmIC8qIFNPX0xJ TkdFUiAqLwotI2lmZGVmIFNPX0RPTlRST1VURQotICAgICAgICBkb250cm91dGUoMCx0Y3BfZG9u dHJvdXRlKTsKLSNlbmRpZiAvKiBTT19ET05UUk9VVEUgKi8KLSNpZmRlZiBTT19TTkRCVUYKLSAg ICAgICAgc2VuZGJ1ZigwLHRjcF9zZW5kYnVmKTsKLSNlbmRpZiAvKiBTT19TTkRCVUYgKi8KLSNp ZmRlZiBTT19SQ1ZCVUYKLSAgICAgICAgcmVjdmJ1ZigwLHRjcF9yZWN2YnVmKTsKLSNlbmRpZiAv KiBTT19SQ1ZCVUYgKi8KLSNlbmRpZiAvKiBTT0xfU09DS0VUICovCi0jZW5kaWYgLyogZGF0YWdl bmVyYWwgKi8KLSNlbmRpZiAvKiBOT1RDUE9QVFMgKi8KLQotI2lmZGVmIENLX1NTTAotICAgICAg ICBpZiAoY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpKSB7Ci0gICAgICAgICAgICBpZiAoIXNzbF90 bl9pbml0KFNTTF9TRVJWRVIpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJpb19lcnIgIT0gTlVM TCkgewotICAgICAgICAgICAgICAgICAgICBCSU9fcHJpbnRmKGJpb19lcnIsImRvX3NzbGVheV9p bml0KCkgZmFpbGVkXHJcbiIpOwotICAgICAgICAgICAgICAgICAgICBFUlJfcHJpbnRfZXJyb3Jz KGJpb19lcnIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg IGZmbHVzaChzdGRlcnIpOwotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwiZG9f c3NsZWF5X2luaXQoKSBmYWlsZWRcclxuIik7Ci0gICAgICAgICAgICAgICAgICAgIEVSUl9wcmlu dF9lcnJvcnNfZnAoc3RkZXJyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg c3dpdGNoICh0dG5wcm90bykgewotCQkgIGNhc2UgTlBfU1NMOgotCQkgIGNhc2UgTlBfVExTOgot ICAJCSAgY2FzZSBOUF9TU0xfUkFXOgotCQkgIGNhc2UgTlBfVExTX1JBVzoKLQkJICBjYXNlIE5Q X1NTTF9URUxORVQ6Ci0JCSAgY2FzZSBOUF9UTFNfVEVMTkVUOgotICAgICAgICAgICAgICAgICAg ICBkb2V4aXQoQkFEX0VYSVQsMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg IC8qIG90aGVyd2lzZSB3ZSB3aWxsIGNvbnRpbnVlIHRvIGFjY2VwdCB0aGUgY29ubmVjdGlvbiAg ICovCi0gICAgICAgICAgICAgICAgLyogd2l0aG91dCBTU0wgb3IgVExTIHN1cHBvcnQgdW5sZXNz IHJlcXVpcmVkLiAqLwotICAgICAgICAgICAgICAgIGlmICggVEVMT1BUX0RFRl9TX01FX01PREUo VEVMT1BUX1NUQVJUX1RMUykgIT0gVE5fTkdfTVUgKQotICAgICAgICAgICAgICAgICAgICBURUxP UFRfREVGX1NfTUVfTU9ERShURUxPUFRfU1RBUlRfVExTKSA9IFROX05HX1JGOwotICAgICAgICAg ICAgICAgIGlmICggVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfU1RBUlRfVExTKSAhPSBUTl9O R19NVSApCi0gICAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX1NU QVJUX1RMUykgPSBUTl9OR19SRjsKLSAgICAgICAgICAgICAgICBpZiAoIFRFTE9QVF9ERUZfQ19N RV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpICE9IFROX05HX01VICkKLSAgICAgICAgICAgICAgICAg ICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX1NUQVJUX1RMUykgPSBUTl9OR19SRjsKLSAg ICAgICAgICAgICAgICBpZiAoIFRFTE9QVF9ERUZfQ19VX01PREUoVEVMT1BUX1NUQVJUX1RMUykg IT0gVE5fTkdfTVUgKQotICAgICAgICAgICAgICAgICAgICBURUxPUFRfREVGX0NfVV9NT0RFKFRF TE9QVF9TVEFSVF9UTFMpID0gVE5fTkdfUkY7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg ICAgICAgICAgIGlmICggY2tfc3NsX2luY29taW5nKDApIDwgMCApIHsKLSAgICAgICAgICAgICAg ICAgICAgZG9leGl0KEJBRF9FWElULDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg IH0KLSAgICAgICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0jaWZkZWYgVE5DT0RFCi0gICAg ICAgIHRuX2luaSgpOyAgICAgICAgICAgICAgICAgICAgICAgLyogU3RhcnQgVGVsbmV0IG5lZ290 aWF0aW9uIG5vdyAqLwotI2VuZGlmIC8qIFROQ09ERSAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAg IH0KLSAgICBkZWJ1ZyhGMTAxLCJtYWluIGFyZ2MgYWZ0ZXIgcHJlc2NhbigpIiwiIixhcmdjKTsK LQotICAgIC8qIE5vdyBwcm9jZXNzIGFueSByZWxldmFudCBlbnZpcm9ubWVudCB2YXJpYWJsZXMg Ki8KLQotI2lmbmRlZiBOT0RJQUwKLSAgICBnZXRkaWFsZW52KCk7ICAgICAgICAgICAgICAgICAg ICAgICAvKiBEaWFsaW5nICovCi0jaWZkZWYgTkVUQ09OTgotICAgIG5kaW5pdCgpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgbmV0d29yayBkaXJlY3RvcnkgaW5mbyAq LwotICAgIGdldG5ldGVudigpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5ldHdvcmsgZGly ZWN0b3JpZXMgKi8KLSNlbmRpZiAvKiBORVRDT05OICovCi0jZW5kaWYgLyogTk9ESUFMICovCi0K LSNpZm5kZWYgTk9YRkVSCi0jaWZkZWYgQ0tfRkFTVAotICAgIGRvZmFzdCgpOyAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEJ5IG5vdyBGQVNUIGRlZmF1bHRzIHNob3VsZCBiZSBPSyAqLwot I2VuZGlmIC8qIENLX0ZBU1QgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBOT0NN REwKLSAgICBpa3Nsb2dpbigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSUtTRCBMb2dp biBhbmQgb3RoZXIgc3R1ZmYgKi8KLSNpZmRlZiBJS1NECi0jaWZkZWYgTlQKLSAgICBpZiAoIGlu c2VydmVyICkKLSAgICAgIHNldG50Y3JlZHMoKTsKLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8q IElLU0QgKi8KLSNlbmRpZiAvKiBOT0NNREwgKi8KLQotICAgIGlmIChob3djYWxsZWQgPT0gSV9B TV9TU0hTVUIpIHsKLSAgICAgICAgcmVsaWFibGUgPSAxOwkJCS8qIFdlIHNheSB0aGUgY29ubmVj dGlvbiBpcyByZWxpYWJsZSAqLwotICAgICAgICB4cmVsaWFibGUgPSAxOwkJCS8qIEFuZCB0aGF0 IHdlIHNhaWQgaXQgd2FzICovCi0gICAgICAgIHNldHJlbGlhYmxlID0gMTsJCS8qIEFuZCBwcmV0 ZW5kIHRoZSAidXNlciIgZGlkIHRvbyAqLwotICAgICAgICB4ZmluaXNoID0gMTsJCQkvKiBGb3Ig UkVNT1RFIEhFTFAgcmVzcG9uc2UgKi8KLSAgICAgICAgbWRtdHlwID0gMDsJCQkvKiBGb3IgdHRv cGVuKCkgKi8KLSAgICAgICAgY2tzdHJuY3B5KHR0bmFtZSwiMCIsVFROQU1MRU4rMSk7ICAvKiBV c2UgZmlsZSBkZXNjcmlwdG9yIDAgKi8KLSAgICAgICAgbG9jYWwgPSAwOyAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBBbmQgZm9yY2UgcmVtb3RlIG1vZGUgKi8KLSAgICAgICAgdHRvcGVuKHR0 bmFtZSwmbG9jYWwsbWRtdHlwLDApOyAvKiBPcGVuIHRoZSAiY29ubmVjdGlvbiIgKi8KLSAgICAg ICAgc3N0YXRlID0gJ3gnOwkJCS8qIEluaXRpYWwgc3RhdGUgaXMgU2VydmVyICovCi0gICAgICAg IHByb3RvKCk7CQkJLyogRW50ZXIgcHJvdG9jb2wgKi8KLSAgICAgICAgZG9leGl0KEdPT0RfRVhJ VCx4aXRzdGEpOwkvKiBFeGl0IHdoZW4gZG9uZSAqLwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJo b3djYWxsZWQiLG15bmFtZSxob3djYWxsZWQpOwotCi0jaWZkZWYgTk9DQ1RSQVAKLSAgICBkb3Rh a2VpbmkoMCk7Ci0jZWxzZSAvKiBOT0NDVFJBUCAqLwotICAgIGRlYnVnKEYxMDAsIm1haW4gYWJv dXQgdG8gY2NfZXhlY3V0ZSIsIiIsMCk7Ci0gICAgc2V0aW50KCk7Ci0gICAgY2NfZXhlY3V0ZSgg Y2tqYWRkcihjbWpidWYpLCBkb3Rha2VpbmksIGZhaWx0YWtlaW5pICk7Ci0jZW5kaWYgLyogTk9D Q1RSQVAgKi8KLQotICAgIGRlYnVnKEYxMTEsIm1haW4gMiBjZmlsZWYiLGNtZGZpbCxjZmlsZWYp OwotICAgIGlmIChjbWRmaWxbMF0pIHsgICAgICAgICAgICAgICAgICAgIC8qIElmIHdlIGdvdCBv bmUgKHNlZSBwcmVzY2FuKCkpLi4uICovCi0jaWZkZWYgTk9DQ1RSQVAKLSAgICAgICAgZG9jbWRm aWxlKDApOyAgICAgICAgICAgICAgICAgICAvKiBleGVjdXRlIGl0LiAqLwotI2Vsc2UgLyogTk9D Q1RSQVAgKi8KLSAgICAgICAgc2V0aW50KCk7Ci0gICAgICAgIGNjX2V4ZWN1dGUoIGNramFkZHIo Y21qYnVmKSwgZG9jbWRmaWxlLCBmYWlsY21kZmlsZSApOwotI2VuZGlmIC8qIE5PQ0NUUkFQICov Ci0gICAgfQotI2lmbmRlZiBPUzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByZXNl cnZlIG5hbWUgc28gd2UgY2FuIGRlbGV0ZSBpdCAqLwotICAgICpjbWRmaWwgPSAnXDAnOyAgICAg ICAgICAgICAgICAgICAgIC8qIERvbmUsIG51bGxpZnkgdGhlIGZpbGUgbmFtZSAqLwotI2VuZGlm IC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PSUNQICovCi0KLSNpZm5kZWYgTk9DTURMCi0vKiBMb29r IGZvciBhIFVOSVgtc3R5bGUgY29tbWFuZCBsaW5lLi4uICovCi0KLSAgICB3aGF0ID0gV19OT1RI SU5HOwotCi0gICAgZGVidWcoRjEwMSwibWFpbiBhcmdjIiwiIixhcmdjKTsKLSNpZm5kZWYgTk9I RUxQCi0gICAgaW5pb3B0aGxwKCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6 ZSBjbWRsaW5lIGFyZyBoZWxwICovCi0jZW5kaWYgLyogTk9IRUxQICovCi0gICAgaWYgKAotI2lm ZGVmIENPTU1FTlQKLSAgICAgICAgIWNmaWxlZiAmJgotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAg ICAgICAgYXJnYyA+IDEpIHsgICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIGxpbmUgYXJn dW1lbnRzPyAqLwotICAgICAgICBzc3RhdGUgPSAoQ0hBUikgY21kbGluKCk7ICAgICAgIC8qIFll cywgcGFyc2UuICovCi0jaWZkZWYgTkVUQ09OTgotI2lmbmRlZiBOT1VSTAotICAgICAgICBpZiAo aGF2ZXVybCkgeyAgICAgICAgICAgICAgICAgIC8qIFdhcyBhIFVSTCBnaXZlbj8gKi8KLSAgICAg ICAgICAgIGRvdXJsKCk7ICAgICAgICAgICAgICAgICAgICAvKiBpZiBzbywgZG8gaXQuICovCi0g ICAgICAgIH0KLSNlbmRpZiAvKiBOT1VSTCAqLwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSNpZm5k ZWYgTk9YRkVSCi0gICAgICAgIHpzdGF0ZSA9IHNzdGF0ZTsgICAgICAgICAgICAgICAgLyogUmVt ZW1iZXIgc3N0YXRlIGFyb3VuZCBwcm90b2NvbCAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJtYWlu IHpzdGF0ZSIsIiIsenN0YXRlKTsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBOT0xP Q0FMCi0gICAgICAgIGlmIChjZmxnKSB7ICAgICAgICAgICAgICAgICAgICAgLyogQ29ubmVjdCBm aXJzdCBpZiByZXF1ZXN0ZWQgKi8KLSAgICAgICAgICAgIGRvY29uZWN0KDAsMCk7Ci0gICAgICAg ICAgICBpZiAodHRjaGsoKSA8IDApCi0gICAgICAgICAgICAgIGRvbG9nZW5kKCk7Ci0gICAgICAg ICAgICBjZmxnID0gMDsKLSAgICAgICAgfQotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmbmRl ZiBOT1hGRVIKLSAgICAgICAgaWYgKHNzdGF0ZSkgewotI2lmbmRlZiBOT0xPQ0FMCi0gICAgICAg ICAgICBpZiAoZGlzcGxhKSBjb25jYigoY2hhcillc2NhcGUpOyAvKiAoZm9yIGNvbnNvbGUgImlu dGVycnVwdHMiKSAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNpZmRlZiBOT0NDVFJBUAotICAg ICAgICAgICAgZG9jbWRsaW5lKDEpOwotI2Vsc2UgLyogTk9DQ1RSQVAgKi8KLSAgICAgICAgICAg IHNldGludCgpOwotICAgICAgICAgICAgY2NfZXhlY3V0ZSggY2tqYWRkcihjbWpidWYpLCBkb2Nt ZGxpbmUsIGZhaWxjbWRsaW5lICk7Ci0jZW5kaWYgLyogTk9DQ1RSQVAgKi8KLSAgICAgICAgfQot I2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZuZGVmIE5PSUNQCi0vKgotICBJZiBhIGNvbW1hbmQt bGluZSBhY3Rpb24gYXJndW1lbnQgd2FzIGdpdmVuIGFuZCAtUyAoInN0YXkiKSB3YXMgbm90IGdp dmVuLAotICBleGl0IG5vdy4KLSovCi0gICAgICAgIGlmICgoY2ZsZyB8fCBjbmZsZyB8fCB6c3Rh dGUpICYmICFzdGF5ZmxnKQotI2VuZGlmIC8qIE5PSUNQICovCi0gICAgICAgICAgZG9leGl0KEdP T0RfRVhJVCx4aXRzdGEpOyAgICAgLyogRXhpdCB3aXRoIGdvb2Qgc3RhdHVzICovCi0KLSNpZm5k ZWYgTk9MT0NBTAotI2lmbmRlZiBOT0lDUAotICAgICAgICBpZiAobG9jYWwpIHsKLSNpZmRlZiBO RVRDT05OCi0gICAgICAgICAgICBpZiAoKGNmbGcgfHwgY25mbGcpICYmIHRuX2V4aXQgJiYgdHRj aGsoKSA8IDApCi0gICAgICAgICAgICAgIGRvZXhpdChHT09EX0VYSVQseGl0c3RhKTsgLyogRXhp dCB3aXRoIGdvb2Qgc3RhdHVzICovCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotICAgICAgICAgICAg aWYgKGV4aXRvbmNsb3NlICYmICFuZXR3b3JrICYmCi0gICAgICAgICAgICAgICAgKGNhcnJpZXIg IT0gQ0FSX09GRiAmJiAodHRnbWRtKCkgJiBCTV9EQ0QpID09IDApKQotICAgICAgICAgICAgICBk b2V4aXQoR09PRF9FWElULHhpdHN0YSk7IC8qIEV4aXQgd2l0aCBnb29kIHN0YXR1cyAqLwotICAg ICAgICAgICAgaWYgKGV4aXRvbmNsb3NlICYmIG5ldHdvcmsgJiYgdHRjaGsoKSA8IDApCi0gICAg ICAgICAgICAgIGRvZXhpdChHT09EX0VYSVQseGl0c3RhKTsgLyogRXhpdCB3aXRoIGdvb2Qgc3Rh dHVzICovCi0gICAgICAgIH0KLSNlbmRpZiAvKiBOT0lDUCAqLwotI2VuZGlmIC8qIE5PTE9DQUwg Ki8KLSAgICB9Ci0jZW5kaWYgLyogTk9DTURMICovCi0KLSNpZmRlZiBOT0lDUCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBObyBpbnRlcmFjdGl2ZSBjb21tYW5kIHBhcnNlciAqLwotI2lm bmRlZiBOT0NNREwKLSAgICBlbHNlIHsKLQotICAgICAgICAvKiBDb21tYW5kLWxpbmUtb25seSB2 ZXJzaW9uICovCi0gICAgICAgIGZhdGFsKCI/Tm8gY29tbWFuZC1saW5lIG9wdGlvbnMgZ2l2ZW4g LSB0eXBlICdrZXJtaXQgLWgnIGZvciBoZWxwIik7Ci0gICAgfQotI2Vsc2UgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIE5laXRoZXIgb25lISAqLwotICAgICAgICBzc3RhdGUg PSAneCc7Ci0gICAgICAgIGp1c3RvbmUgPSAwOwotICAgICAgICBwcm90bygpOyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFNvIGdvIGludG8gc2VydmVyIG1vZGUgKi8KLSAgICAgICAgZG9leGl0 KEdPT0RfRVhJVCx4aXRzdGEpOyAgICAgICAvKiBleGl0IHdpdGggZ29vZCBzdGF0dXMgKi8KLQot I2VuZGlmIC8qIE5PQ01ETCAqLwotI2Vsc2UgLyogbm90IE5PSUNQICovCi0vKgotICBJZiBubyBh Y3Rpb24gcmVxdWVzdGVkIG9uIGNvbW1hbmQgbGluZSwgb3IgaWYgLVMgKCJzdGF5Iikgd2FzIGlu Y2x1ZGVkLAotICBlbnRlciB0aGUgaW50ZXJhY3RpdmUgY29tbWFuZCBwYXJzZXIuCi0qLwotICAg IGlmICghY2xjbWRzKQotICAgICAgaGVyYWxkKCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8q IERpc3BsYXkgcHJvZ3JhbSBoZXJhbGQuICovCi0KLSNpZmRlZiBOT0NDVFJBUAotICAgIGRlYnVn KEYxMDAsIm1haW4gTk9DQ1RSQVAgc2V0dGluZyBpbnRlcnJ1cHQgdHJhcCIsIiIsMCk7Ci0gICAg c2V0aW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IHVwIGNvbW1hbmQgaW50 ZXJydXB0IHRyYXBzICovCi0gICAgZG9pY3AoTlVMTCk7Ci0jZWxzZSAvKiBOT0NDVFJBUCAqLwot ICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIGRlYnVnKEYxMDAsIm1haW4gc2V0dGluZyBpbnRlcnJ1 cHQgdHJhcCIsIiIsMCk7Ci0gICAgICAgIHNldGludCgpOyAgICAgICAgICAgICAgICAgICAgICAg LyogU2V0IHVwIGNvbW1hbmQgaW50ZXJydXB0IHRyYXBzICovCi0gICAgICAgIGlmICghY2NfZXhl Y3V0ZShja2phZGRyKGNtamJ1ZiksIGRvaWNwLCBmYWlsaWNwKSkKLSAgICAgICAgICBicmVhazsK LSAgICB9Ci0jZW5kaWYgLyogTk9DQ1RSQVAgKi8KLSNlbmRpZiAvKiBOT0lDUCAqLwotI2lmbmRl ZiBNQUlOSVNWT0lECi0gICAgcmV0dXJuKDEpOwotI2VuZGlmIC8qIE1BSU5JU1ZPSUQgKi8KLX0K LQotI2lmZGVmIERZTkFNSUMKLS8qIEFsbG9jYXRlIGZpbGUgaS9vIGJ1ZmZlcnMgKi8KLQotY2hh ciAqemluYnVmZmVyID0gTlVMTCwgKnpvdXRidWZmZXIgPSBOVUxMOwotCi1pbnQKLWdldGlvYnMo KSB7Ci0gICAgemluYnVmZmVyID0gKGNoYXIgKiltYWxsb2MoSU5CVUZTSVpFKTsKLSAgICBpZiAo IXppbmJ1ZmZlcikgcmV0dXJuKC0xKTsKLSAgICB6b3V0YnVmZmVyID0gKGNoYXIgKiltYWxsb2Mo em9idWZzaXplKTsKLSAgICBkZWJ1ZyhGMTAxLCJ6b3V0YnVmZmVyIG1hbGxvYyIsIiIsem9idWZz aXplKTsKLSAgICBpZiAoIXpvdXRidWZmZXIpIHJldHVybigtMSk7Ci0gICAgZGVidWcoRjEwMCwi Z2V0aW9icyBvayIsIiIsMCk7Ci0gICAgcmV0dXJuKDApOwotfQotI2VuZGlmIC8qIERZTkFNSUMg Ki8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2Nr Y21haS5jLmM5OSBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjbWFp LmMuYzk5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTY0MGU1Li4wMDAwMDAwCi0t LSBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjbWFpLmMuYzk5Cisr KyAvZGV2L251bGwKQEAgLTEsMzU3NiArMCwwIEBACi0jZGVmaW5lIEVESVREQVRFICAiMjAgQXVn IDIwMTEiCQkvKiBMYXN0IGVkaXQgZGF0ZSBkZCBtbW0geXl5eSAqLwotI2RlZmluZSBFRElUTkRB VEUgIjIwMTEwODIwIgkJLyogS2VlcCB0aGVtIGluIHN5bmMgKi8KLS8qIFNhdCBBdWcgMjAgMTc6 MjA6MTcgMjAxMSAqLwotCi0vKiBja2NtYWkuYyAtIE1haW4gcHJvZ3JhbSBmb3IgQy1LZXJtaXQg cGx1cyBzb21lIG1pc2NlbGxhbmVvdXMgZnVuY3Rpb25zICovCi0KLS8qCi0gIGNrY3N5bS5oIGlz IHVzZWQgZm9yIGZvciBkZWZpbmluZyBzeW1ib2xzIHRoYXQgbm9ybWFsbHkgd291bGQgYmUgZGVm aW5lZAotICB1c2luZyAtRCBvciAtZCBvbiB0aGUgY2MgY29tbWFuZCBsaW5lLCBmb3IgdXNlIHdp dGggY29tcGlsZXJzIHRoYXQgZG9uJ3QKLSAgc3VwcG9ydCB0aGlzIGZlYXR1cmUuICBNdXN0IGNv bWUgYmVmb3JlIGFueSB0ZXN0cyBmb3IgcHJlcHJvY2Vzc29yIHN5bWJvbHMuCi0qLwotI2luY2x1 ZGUgImNrY3N5bS5oIgotLyoKLSAgQ29uc29saWRhdGVkIHByb2dyYW0gQy1LZXJtaXQgdmVyc2lv biBpbmZvcm1hdGlvbiBmb3IgYWxsIHBsYXRmb3JtcwotICAoYnV0IGZvciBVTklYIGFsc28gc2Vl IGNrdXZlci5oKS4gIFNlZSBtYWtldmVyKCkgYmVsb3cgZm9yIGhvdyB0aGV5IGFyZSB1c2VkLgot Ki8KLSNpZmRlZiBDT01NRU5UICAgICAgICAgICAgICAgICAgICAvKiBVbmNvbW1lbnQgdGhpcyBm b3IgcmVhbCBLOTUgdmVyc2lvbiAqLwotI2lmbmRlZiBPUzIJCQkJLyogT1MyIGFjdHVhbGx5IG1l YW5zIEtlcm1pdCA5NS4gKi8KLSNpZm5kZWYgQkVUQVRFU1QJCQkvKiBJdCdzIGJlY2F1c2UgS2Vy bWl0IDk1IHN0YXJ0ZWQgKi8KLSNkZWZpbmUgQkVUQVRFU1QJCQkvKiBvdXQgYXMgQy1LZXJtaXQg Zm9yIE9TLzIuICovCi0jZW5kaWYgLyogQkVUQVRFU1QgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNl bmRpZiAvKiBDT01NRU5UICovCi0KLSNpZmRlZiBCRVRBVEVTVAotI2lmZGVmIE9TMgotI2lmZGVm IF9fREFURV9fCi0jZGVmaW5lIEJFVEFEQVRFCi0jZW5kaWYgLyogX19EQVRFX18gKi8KLSNlbmRp ZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBCRVRBVEVTVCAqLwotCi1jaGFyICogY2tfY3J5ZWFyID0g IjIwMTEiOyAJCS8qIEMtS2VybWl0IGNvcHlyaWdodCB5ZWFyICovCi0KLSNpZm5kZWYgTUFDCQkJ CS8qIE1BQyA9IEtlcm1pdCBmb3IgTUFDIE9TIDYsIDcsIC4uLiAqLwotLyoKLSAgTm90ZTogaW5p dGlhbGl6ZSBja19zX3Rlc3QgdG8gIiIgaWYgdGhpcyBpcyBub3QgYSB0ZXN0IHZlcnNpb24uCi0g IFVzZSAoKmNrX3NfdGVzdCAhPSAnXDAnKSB0byBkZWNpZGUgd2hldGhlciB0byBwcmludCB0ZXN0 LXJlbGF0ZWQgbWVzc2FnZXMuCi0qLwotCi0jaWZuZGVmIEJFVEFURVNUCi0jaWZuZGVmIE9TMiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVU5JWCwgVk1TLCBldGMuLi4gKGkuZS4gQy1L ZXJtaXQpICovCi1jaGFyICpja19zX3Rlc3QgPSAiIjsJCQkvKiAiRGV2IiwiQWxwaGEiLCJCZXRh IiwiUkMiLCBvciAiIiAqLwotY2hhciAqY2tfc190dmVyID0gIiI7CQkJLyogVGVzdCB2ZXJzaW9u IG51bWJlciBvciAiIiAqLwotI2Vsc2UgIC8qIE9TMiAqLwotY2hhciAqY2tfc190ZXN0ID0gIiI7 CQkJLyogKGkuZS4gSzk1KSAqLwotY2hhciAqY2tfc190dmVyID0gIiI7Ci0jZW5kaWYgLyogT1My ICovCi0jZWxzZQotY2hhciAqY2tfc190ZXN0ID0gIiI7CQkJLyogRGV2ZWxvcG1lbnQgKi8KLWNo YXIgKmNrX3NfdHZlciA9ICIiOwotI2VuZGlmIC8qIEJFVEFURVNUICovCi0jZWxzZSAvKiBNQUMg Ki8KLWNoYXIgKmNrX3NfdGVzdCA9ICJQcmUtQWxwaGEiOyAgICAgICAgICAvKiBNYWMgS2VybWl0 IGlzIGFsd2F5cyBhIHRlc3QuLi4gKi8KLWNoYXIgKmNrX3NfdHZlciA9ICIiOwkJCS8qIChwcmUg TWFjIE9TIFggMTAsIHRoYXQgaXMhKSAqLwotI2VuZGlmIC8qIE1BQyAqLwotCi0jaWZkZWYgQkVU QURBVEUgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGF0ZSBvZiB0aGlzIHZlcnNpb24gb3Ig ZWRpdCAqLwotY2hhciAqY2tfc19kYXRlID0gX19EQVRFX187ICAgICAgICAgICAgIC8qIENvbXBp bGF0aW9uIGRhdGUgKi8KLSNlbHNlCi1jaGFyICpja19zX2RhdGUgPSBFRElUREFURTsJCS8qIFNl ZSB0b3AgKi8KLQotI2VuZGlmIC8qIEJFVEFEQVRFICovCi1jaGFyICpidWlsZGlkID0gRURJVE5E QVRFOwkJLyogU2VlIHRvcCAqLwotCi0jaWZkZWYgVU5JWAotc3RhdGljIGNoYXIgc2Njc2lkW10g PSAiQCgjKUMtS2VybWl0IDkuMC4zMDIiOwotI2VuZGlmIC8qIFVOSVggKi8KLQotLyoKLSAgVGhl IEMtS2VybWl0IFZlcnNpb24gbnVtYmVyIGlzIG1ham9yLm1pbm9yLmVkaXQgKGludGVnZXJzKS4K LSAgTWFqb3IgdmVyc2lvbiBhbHdheXMgZ29lcyB1cC4KLSAgTWlub3IgdmVyc2lvbiBpcyBoaXN0 b3JpY2FsLCBoYXNuJ3QgYmVlbiB1c2VkIHNpbmNlIEMtS2VybWl0IDcuMS4KLSAgRWRpdCBpcyBz ZXF1ZW50aWFsLCBhbHdheXMgZ29lcyB1cCwgYnV0IHRoZXJlIGNhbiBiZSBnYXBzLgotICBGb3Ig ZXhhbXBsZSB0aGVyZSBtaWdodCBiZSBtYW55IGVkaXRzIGJldHdlZW4gcmVsZWFzZXMuCi0gIElm IHRoZSBtYWpvciBnb2VzIHRvIDEwLCBzb21lIHZlcnNpb24tbnVtYmVyLWJhc2VkIGZlYXR1cmUg dGVzdHMKLSAgY291bGQgZmFpbC4gIEl0IG1pZ2h0IGJlIGJldHRlciB0byB1c2UgdGhlIG1pbm9y IHZlcnNpb24gZmllbGQKLSAgZm9yIGZ1dHVyZSByZWxlYXNlcy4KLSovCi0KLWNoYXIgKmNrX3Nf dmVyID0gIjkuMC4zMDIiOyAgICAgICAgICAgICAvKiBDLUtlcm1pdCB2ZXJzaW9uIHN0cmluZyAq LwotbG9uZyAgY2tfbF92ZXIgPSAgOTAwMzAyTDsgICAgICAgICAgICAgIC8qIEMtS2VybWl0IHZl cnNpb24gbnVtYmVyICovCi0KLSNpZmRlZiBPUzIKLWNoYXIgKmNrX3NfeHZlciA9ICIzLjAuMCI7 CQkvKiBQcm9kdWN0LXNwZWNpZmljIHZlcnNpb24gc3RyaW5nICovCi1sb25nICBja19sX3h2ZXIg PSAzMDAwTDsgICAgICAgICAgICAgICAgLyogUHJvZHVjdC1zcGVjaWZpYyB2ZXJzaW9uIG51bWJl ciAqLwotI2Vsc2UKLSNpZmRlZiBNQUMKLWNoYXIgKmNrX3NfeHZlciA9ICIwLjk5NSI7ICAgICAg ICAgICAgICAvKiBQcm9kdWN0LXNwZWNpZmljIHZlcnNpb24gc3RyaW5nICovCi1sb25nICBja19s X3h2ZXIgPSA5OTVMOyAgICAgICAgICAgICAgICAgLyogUHJvZHVjdC1zcGVjaWZpYyB2ZXJzaW9u IG51bWJlciAqLwotI2Vsc2UKLWNoYXIgKmNrX3NfeHZlciA9ICIiOyAgICAgICAgICAgICAgICAg ICAvKiBEb24ndCB0b3VjaCB0aGVzZS4uLiAqLwotbG9uZyAgY2tfbF94dmVyID0gMEw7ICAgICAg ICAgICAgICAgICAgIC8qIHRoZXkgYXJlIGNvbXB1dGVkIGF0IHJ1bnRpbWUgKi8KLSNlbmRpZiAv KiBNQUMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIE9TMgotI2lmZGVmIElLU0RPTkxZ Ci0jaWZkZWYgTlQKLWNoYXIgKmNrX3NfbmFtZSA9ICJJS1MtTlQiOwotI2Vsc2UgLyogTlQgKi8K LWNoYXIgKmNrX3NfbmFtZSA9ICJJS1MtT1MvMiI7Ci0jZW5kaWYgLyogTlQgKi8KLSNlbHNlIC8q IElLU0RPTkxZICovCi1jaGFyICpja19zX25hbWUgPSAiS2VybWl0IDk1IjsgICAgICAgICAgLyog UHJvZ3JhbSBuYW1lICovCi0jZW5kaWYgLyogSUtTRE9OTFkgKi8KLSNlbHNlCi0jaWZkZWYgTUFD Ci1jaGFyICpja19zX25hbWUgPSAiTWFjIEtlcm1pdCI7Ci0jZWxzZQotY2hhciAqY2tfc19uYW1l ID0gIkMtS2VybWl0IjsKLSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotY2hh ciAqY2tfc193aG8gPSAiIjsgICAgICAgICAgICAgICAgICAgIC8qIFdoZXJlIGN1c3RvbWl6ZWQs ICIiID0gbm90LiAqLwotY2hhciAqY2tfcGF0Y2ggPSAiIjsgICAgICAgICAgICAgICAgICAgIC8q IFBhdGNoIGluZm8sIGlmIGFueS4gKi8KLQotI2RlZmluZSBDS1ZFUkxFTiAxMjgKLWNoYXIgdmVy c2lveFtDS1ZFUkxFTl07ICAgICAgICAgICAgICAgICAvKiBWZXJzaW9uIHN0cmluZyBidWZmZXIg ICovCi1jaGFyICp2ZXJzaW8gPSB2ZXJzaW94OyAgICAgICAgICAgICAgICAgLyogVGhlc2UgYXJl IGZpbGxlZCBpbiBhdCAqLwotbG9uZyB2ZXJudW0sIHh2ZXJudW07ICAgICAgICAgICAgICAgICAg IC8qIHJ1bnRpbWUgZnJvbSBhYm92ZS4gICAgKi8KLQotI2RlZmluZSBDS0NNQUkKLQotI2luY2x1 ZGUgImNrY2FzYy5oIiAgICAgICAgICAgICAgICAgICAgIC8qIEFTQ0lJIGNoYXJhY3RlciBzeW1i b2xzICovCi0jaW5jbHVkZSAiY2tjZGViLmgiICAgICAgICAgICAgICAgICAgICAgLyogRGVidWcg JiBvdGhlciBzeW1ib2xzICovCi0KLWNoYXIgKiBteW5hbWUgPSBOVUxMOyAgICAgICAgICAgICAg ICAgICAvKiBUaGUgbmFtZSBJIGFtIGNhbGxlZCBieSAqLwotI2lmbmRlZiBPUzIKLWNoYXIgKiBl eGVkaXIgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAvKiBEaXJlY3RvcnkgSSB3YXMgZXhlY3V0 ZWQgZnJvbSAqLwotI2VuZGlmIC8qIE9TMiAqLwotY2hhciAqIG15aG9tZSA9IE5VTEw7CQkJLyog SG9tZSBkaXJlY3Rvcnkgb3ZlcnJpZGUgKi8KLQotLyogIEMgSyBDIE0gQSBJICAtLSAgQy1LZXJt aXQgTWFpbiBwcm9ncmFtICAqLwotCi0vKgotICBBdXRob3I6IEZyYW5rIGRhIENydXogKGZkY0Bj b2x1bWJpYS5lZHUpLAotICBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBjaXR5IG9mIE5ldyBZ b3JrLAotICBDb21wdXRlciBDZW50ZXIgLyBDZW50ZXIgZm9yIENvbXB1dGluZyBBY3Rpdml0aWVz IC8gSW5mb3JtYXRpb24gVGVjaG5vbG9neS4KLSAgSSBhbSBubyBsb25nZXIgYXQgQ29sdW1iaWEg VSBhcyBvZiAxIEp1bHkgMjAxMSwgYnV0IHRoZSBlbWFpbCBhZGRyZXNzCi0gIHNob3VsZCBzdGls bCB3b3JrLiAgVGhlIEtlcm1pdCB3ZWJzaXRlIGh0dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1IHNo b3VsZAotICBzdGlsbCBiZSBhdmFpbGFibGUgYW5kIHVuZGVyIG15IGNvbnRyb2wsIGFzIHdlbGwg YXMgdGhlIEtlcm1pdCBGVFAgc2l0ZSwKLSAgZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJt aXQvLgotCi1DT1BZUklHSFQgTk9USUNFOgotKi8KLQotY2hhciAqY29weXJpZ2h0W10gPSB7Ci0K LSNpZmRlZiBwZHAxMQotIkNvcHlyaWdodCAoQykgMTk4NSwgJXMsIFRydXN0ZWVzIG9mIENvbHVt YmlhIFVuaXZlcnNpdHksIE5ZQy4iLAotIkFsbCByaWdodHMgcmVzZXJ2ZWQuIiwKLSIgIiwKLSNl bHNlCi0iQ29weXJpZ2h0IChDKSAxOTg1LCAlcywiLAotIiAgVGhlIFRydXN0ZWVzIG9mIENvbHVt YmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuIiwKLSIgIEFsbCByaWdodHMg cmVzZXJ2ZWQuIiwKLSIgIiwKLSJSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQiLAotIm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyIsCi0iYXJlIG1ldDoi LAotIiAiLAotIiArIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0 aGUgYWJvdmUgY29weXJpZ2h0IiwKLSIgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIiwKLSIgIiwKLSIgKyBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCIsCi0i ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyIGluIiwKLSIgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlIiwKLSIgICBkaXN0cmlidXRpb24uIiwKLSIgIiwKLSIgKyBOZWl0 aGVyIHRoZSBuYW1lIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMi LAotIiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCIsCi0iICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiIsCi0iICIsCi0iVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyIsCi0iXCJBUyBJ U1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCIsCi0iTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIiwKLSJBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCIsCi0iSE9MREVSIE9SIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCIs Ci0iU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO RywgQlVUIE5PVCIsCi0iTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIiwKLSJEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkiLAotIlRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP UlQiLAotIihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z IFdBWSBPVVQgT0YgVEhFIFVTRSIsCi0iT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4iLAotI2VuZGlmIC8qIHBkcDExICov Ci0KLSNpZmRlZiBPUzIKLSJQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNSwgU2VjdXJl IEVuZHBvaW50cyBJbmMsIE5ldyBZb3JrIE5ZIFVTQS4iLAotIlBvcnRpb25zIENvcHlyaWdodCAo QykgMTk5NSwgT3kgT25saW5lIFNvbHV0aW9ucyBMdGQuLCBKeXZhc2t5bGEsIEZpbmxhbmQuIiwK LSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0iUG9ydGlvbnMg Q29weXJpZ2h0IChDKSAxOTkwLCBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5 LiIsCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotIlBvcnRpb25zIENvcHlyaWdodCAoQykgMTk5MSwg MTk5MyBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuIiwKLSJQb3J0aW9u cyBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUgYnkgQVQmVC4iLAot IlBvcnRpb25zIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NywgRXJpYyBZb3VuZyA8ZWF5QGNyeXB0 b3NvZnQuY29tPi4iLAotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNpZmRlZiBDS19TUlAK LSJQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDE5OTcsIFN0YW5mb3JkIFVuaXZlcnNpdHkuIiwKLSNl bmRpZiAvKiBDS19TUlAgKi8KLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotCi0jaWZu ZGVmIHBkcDExCi0iICIsCi0iRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24sIHZpc2l0IHRoZSBLZXJt aXQgUHJvamVjdCB3ZWJzaXRlOiIsCi0iaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0LyAu IiwKLSNlbmRpZiAvKiBwZHAxMSAqLwotIiJ9OwotCi0vKiBXaW5kb3dzIElLU0QgY29weXJpZ2h0 IHVzZWQgdG8gYmUgc2VwYXJhdGUgKi8KLWNoYXIgKndpa3NkY3ByID0gKGNoYXIgKikgY29weXJp Z2h0OwotCi0KLS8qCi1ET0NVTUVOVEFUSU9OOgotCi0gIlVzaW5nIEMtS2VybWl0IiBieSBGcmFu ayBkYSBDcnV6IGFuZCBDaHJpc3RpbmUgTS4gR2lhbm9uZSwKLSAgRGlnaXRhbCBQcmVzcyAvIEJ1 dHRlcndvcnRoLUhlaW5lbWFubiwgV29idXJuIE1BLCBVU0EuCi0gIFNlY29uZCBlZGl0aW9uICgx OTk3KSwgSVNCTiAxLTU1NTU4LTE2NC0xLgotICBPcmRlciBmcm9tIERpZ2l0YWwgUHJlc3M6ICAg ICsxICg4MDApIDM2Ni0yNjY1Ci0gIE9yIGZyb20gQ29sdW1iaWEgVW5pdmVyc2l0eTogKzEgKDIx MikgODU0LTM3MDMKLQotRm9yIEtlcm1pdCA5NSwgYWxzbzoKLQotICAiS2VybWl0IDk1IiBieSBD aHJpc3RpbmUgTS4gR2lhbm9uZSBhbmQgRnJhbmsgZGEgQ3J1eiwKLSAgTWFubmluZyBQdWJsaWNh dGlvbnMsIEdyZWVud2ljaCBDVCwgVVNBICgxOTk4KSAtIE9ubGluZS4KLQotQUNLTk9XTEVER01F TlRTOgotCi0gIFRoZSBLZXJtaXQgZmlsZSB0cmFuc2ZlciBwcm90b2NvbCB3YXMgZGV2ZWxvcGVk IGF0IHRoZSBDb2x1bWJpYSBVbml2ZXJzaXR5Ci0gIENlbnRlciBmb3IgQ29tcHV0aW5nIEFjdGl2 aXRpZXMgKENVQ0NBKSwgd2hpY2ggd2FzIHNpbmNlIHJlbmFtZWQgdG8gQ29sdW1iaWEKLSAgVW5p dmVyc2l0eSBBY2FkZW1pYyBJbmZvcm1hdGlvbiBTeXN0ZW1zIChBY0lTKSBhbmQgYWZ0ZXIgdGhh dCBDb2x1bWJpYQotICBVbml2ZXJzaXR5IEluZm9ybWF0aW9uIFRlY2hub2xvZ3kgKENVSVQpLiAg S2VybWl0IGlzIG5hbWVkIGFmdGVyIEtlcm1pdCB0aGUKLSAgRnJvZywgc3RhciBvZiB0aGUgdGVs ZXZpc2lvbiBzZXJpZXMgVEhFIE1VUFBFVCBTSE9XOyB0aGUgbmFtZSBpcyB1c2VkIGJ5Ci0gIHBl cm1pc3Npb24gb2YgSGVuc29uIEFzc29jaWF0ZXMsIEluYy4KLQotICBUaGFua3MgdG8gYXQgbGVh c3QgdGhlIGZvbGxvd2luZyBwZW9wbGUgZm9yIHRoZWlyIGNvbnRyaWJ1dGlvbnMgdG8gdGhpcwot ICBwcm9ncmFtIG92ZXIgdGhlIHllYXJzLCBhbmQgYXBvbG9naWVzIHRvIGFueW9uZSB3aG8gd2Fz IGluYWR2ZXJ0YW50bHkKLSAgb21pdHRlZDoKLQotICAgQ2hyaXMgQWRpZSwgRWRpbmJ1cmdoIFUs IFNjb3RsYW5kIChPUy8yKQotICAgUm9iZXJ0IEFkc2V0dCwgVW5pdmVyc2l0eSBvZiBXYXRlcmxv bywgQ2FuYWRhCi0gICBMYXJyeSBBZnJpbiwgQ2xlbXNvbiBVCi0gICBSdXNzIEFsbGJlcnksIFN0 YW5mb3JkIFUKLSAgIEplZmZyZXkgQWx0bWFuLCBDb2x1bWJpYSBVbml2ZXJzaXR5Ci0gICBHcmVn IEFuZHJld3MsIFRlbGViaXQgQ29ycAotICAgQmFycnkgQXJjaGVyLCBVIG9mIE1pc3NvdXJpCi0g ICBSb2JlcnQgQW5kZXJzc29uLCBJbnRlcm5hdGlvbmFsIFN5c3RlbXMgQS9TLCBPc2xvLCBOb3J3 YXkKLSAgIENocmlzIEFybXN0cm9uZywgQnJvb2toYXZlbiBOYXRpb25hbCBMYWIgKE9TLzIpCi0g ICBXaWxsaWFtIEJhZGVyLCBTb2Z0d2FyZSBDb25zdWx0aW5nIFNlcnZpY2VzLCBOYXphcmV0aCwg UEEKLSAgIEZ1YXQgQmFyYW4sIENvbHVtYmlhIFUKLSAgIFN0YW4gQmFyYmVyLCBSaWNlIFUKLSAg IEppbSBCYXJib3VyLCBVIG9mIENvbG9yYWRvCi0gICBEb25uIEJhdW1nYXJ0bmVyLCBEZWxsCi0g ICBJYW4gQmVja3dpdGgsIERlYmlhbiBQcm9qZWN0Ci0gICBOZWxzb24gQmVlYmUsIFUgb2YgVXRh aAotICAgR2VycnkgQmVsYW5nZXIsIENvZ25pdHJvbmljcwotICAgS2FybCBCZXJyeSwgVU1CCi0g ICBNYXJrIEJlcnJ5bWFuLCBTQUlDCi0gICBEZWFuIFcgQmV0dGluZ2VyLCBTVU5ZCi0gICBHYXJ5 IEJpbGt1cwotICAgUGV0ZXIgQmluZGVydXAsIERlbm1hcmsKLSAgIERhdmlkIEJvbGVuLCBBZHZh bmNlZCBOZXR3b3JrcyBhbmQgU2VydmljZXMsIEluYy4KLSAgIEpvb3AgQm9uZW4KLSAgIE1hcmMg Qm91Y2hlciwgVSBvZiBNb250cmVhbAotICAgQ2hhcmxlcyBCcm9va3MsIEVETgotICAgQm9iIEJy b3duCi0gICBNaWtlIEJyb3duLCBQdXJkdWUgVQotICAgUm9iIEJyb3duCi0gICBKYWNrIEJyeWFu cywgQ2FsaWZvcm5pYSBTdGF0ZSBVIGF0IExvbmcgQmVhY2gKLSAgIE1hcmsgQnVkYSwgREVDIChW TVMpCi0gICBGZXJuYW5kbyBDYWJyYWwsIFBhZHJhbyBpWCwgQnJhc2lsaWEKLSAgIEJqb3JuIENh cmxzc29uLCBTdG9ja2hvbG0gVW5pdmVyc2l0eSBDb21wdXRlciBDZW50cmUgUVosIFN3ZWRlbgot ICAgQmlsbCBDYXRjaGluZ3MsIChmb3JtZXJseSBvZikgQ29sdW1iaWEgVQotICAgQm9iIENhdHRh bmksIENvbHVtYmlhIFUgQ1MgRGVwdAotICAgRGF2aWRlIENlcnZvbmUsIFJvY2hlc3RlciBVCi0g ICBTZXRoIENoYWlrbGluLCBEZW5tYXJrCi0gICBKb2huIENoYW5kbGVyLCBIYXJ2YXJkIFUgLyBT bWl0aHNvbmlhbiBBc3Ryb25vbWljYWwgT2JzZXJ2YXRvcnkKLSAgIEJlcm5hcmQgQ2hlbiwgVUNM QQotICAgQW5kcmV3IEEgQ2hlcm5vdiwgUkVMQ09NIFRlYW0sIE1vc2NvdwotICAgSm9obiBMIENo bWllbGV3c2tpLCBBVCZULCBMaXNsZSwgSUwKLSAgIEhvd2FyZCBDaHUsIFUgb2YgTWljaGlnYW4K LSAgIEJpbGwgQ29hbHNvbiwgTWNEb25uZWxsIERvdWdsYXMKLSAgIEJlcnRpZSBDb29wZXJzbWl0 aCwgTG9uZG9uCi0gICBDaHJpc3RpYW4gQ29ydGkKLSAgIENoZXQgQ3JlaWRlciwgVSBvZiBXZXN0 ZXJuIE9udGFyaW8KLSAgIEFsYW4gQ3Jvc3N3ZWxsLCBDb2x1bWJpYSBVCi0gICBKZWZmIERhbWVu cywgKGZvcm1lcmx5IG9mKSBDb2x1bWJpYSBVCi0gICBNYXJrIERhdmllcywgQmF0aCBVLCBVSwot ICAgU2luLWl0aXJvdSBEZXphd2EsIEZ1amlmaWxtLCBKYXBhbgotICAgSm9lIFIuIERvdXBuaWss IFV0YWggU3RhdGUgVQotICAgRnJhbmsgRHJlYW5vLCBIb25leXdlbGwKLSAgIEpvaG4gRHVubGFw LCBVIG9mIFdhc2hpbmd0b24KLSAgIEFsZXggRHVwdXksIFNNQVJULkNPTQotICAgRGF2aWQgRHlj aywgSm9obiBGbHVrZSBNZmcgQ28uCi0gICBTdGVmYWFuIEEuIEVlY2tlbHMsIEV1cm9rb20sIEx1 eGVtYm91cmcKLSAgIE5pY2sgRWZ0aHltaW91Ci0gICBQYXVsIEVnZ2VydCwgVHdpbiBTdW4sIElu Yy4sIEVsIFNlZ3VuZG8sIENBCi0gICBCZXJuaWUgRWliZW4sIERFQwotICAgUGV0ZXIgRWljaGhv cm4sIEFzc3lzdCBJbnRlcm5hdGlvbmFsCi0gICBLcmlzdG9mZmVyIEVyaWtzc29uLCBQZXJpZG90 IEtvbnN1bHQgQUIsIE9lcmVicm8sIFN3ZWRlbgotICAgSm9obiBSLiBFdmFucywgSVJTLCBLYW5z YXMgQ2l0eQotICAgR2xlbm4gRXZlcmhhcnQsIFJDQSBMYWJzCi0gICBDaGFybGllIEZpbmFuLCBD cmF5IFJlc2VhcmNoCi0gICBIZXJtIEZpc2NoZXIsIEVuY2lubywgQ0EgKGV4dGVuc2l2ZSBjb250 cmlidXRpb25zIHRvIHZlcnNpb24gNC4wKQotICAgQ2FybCBGb25naGVpc2VyLCBDV1JVCi0gICBN aWtlIEZyZWVtYW4sIEJvbm5ldmlsbGUgUG93ZXIgQXV0aG9yaXR5Ci0gICBDYXJsIEZyaWVkYmVy ZwotICAgTWFyY2VsbG8gRnJ1dGlnLCBDYXRob2xpYyBVbml2ZXJzaXR5LCBTYW8gUGF1bG8sIEJy YXppbCAoWC4yNSBzdXBwb3J0KQotICAgSGlyb2Z1bWkgRnVqaWksIEphcGFuIE5hdCdsIExhYiBm b3IgSGlnaCBFbmVyZ3kgUGh5c2ljcywgVG9reW8gKEthbmppKQotICAgQ2h1Y2sgRnVsbGVyLCBX ZXN0aW5naG91c2UgQ29ycG9yYXRlIENvbXB1dGVyIFNlcnZpY2VzCi0gICBBbmR5IEZ5ZmUsIENh bHRlY2gKLSAgIENocmlzdGluZSBNLiBHaWFub25lLCBDb2x1bWJpYSBVCi0gICBKb2huIEdpbG1v cmUsIFVDIEJlcmtlbGV5Ci0gICBNYWRodXN1ZGFuIEdpeXlhcnB1cmFtLCBIUAotICAgUmFpbmVy IEdsYXNjaGljaywgU2llbWVucyBBRywgUGFkZXJib3JuCi0gICBXaWxsaWFtIEguIEdsYXNzCi0g ICBHZXJtYW4gR29sZHN6bWlkdCwgSUJNCi0gICBDaHVjayBHb29kaGFydCwgTkFTQQotICAgQWxp c3RhaXIgR29ybWFuLCBOZXcgWmVhbGFuZAotICAgUmljaGFyZCBHcmF0aW9uLCBBREZBLCBBdXN0 cmFsaWEKLSAgIENocmlzIEdyZWVuLCBFc3NleCBVLCBVSwotICAgQWxhbiBHcmllZywgRHVuZGVl IFRlY2gsIFNjb3RsYW5kCi0gICBZZWt0YSBHdXJzZWwsIE1JVAotICAgSmltIEd1eXRvbiwgUmFu ZCBDb3JwCi0gICBNaWNoYWVsIEhhZXJ0ZWwKLSAgIEJydW5vIEhhaWJsZQotICAgQm9iIEhhaW4s IFVNTgotICAgTWFyaW9uIEhha2Fuc29uLCBPUlNUCi0gICBSaWNoYXJkIEhhbWlsdG9uCi0gICBK b2huIEhhbWlsc3RvbiwgSW93YSBTdGF0ZSBVCi0gICBTaW1vbiBIYW5pYSwgTmV0aGVybGFuZHMK LSAgIFN0YW4gSGFua3MsIFJpY2UgVS4KLSAgIEtlbiBIYXJyZW5zdGVpbiwgU1JJCi0gICBFdWdl bmlhIEhhcnJpcywgRGF0YSBHZW5lcmFsIChBT1MvVlMpCi0gICBEYXZpZCBIYXJyaXNvbiwgS2lu Z3N0b24gV2FycmVuIENvcnAKLSAgIEx1Y2FzIEhhcnQsIE9yZWdvbiBTdGF0ZSBVbml2ZXJzaXR5 Ci0gICBKYW1lcyBIYXJ2ZXksIEluZGlhbmEvUHVyZHVlIFUgKFZNUykKLSAgIFJvYiBIZWFsZXkK LSAgIENodWNrIEhlZHJpY2ssIFJ1dGdlcnMgVQotICAgUm9uIEhlaWJ5LCBUZWNobmljYWwgU3lz dGVtcyBEaXZpc2lvbiwgTW90b3JvbGEgQ29tcHV0ZXIgR3JvdXAKLSAgIFN0ZXZlIEhlbW1pbmdl ciwgVGVrdHJvbml4Ci0gICBDaHJpc3RpYW4gSGVtc2luZywgUldUSCBBYWNoZW4sIEdlcm1hbnkg KE9TLTkpCi0gICBSYW5kb2xwaCBIZXJiZXIsIFVTIERPRSwKLSAgIEFuZHJldyBIZXJiZXJ0LCBN b25hc2ggVW5pdiwgQXVzdHJhbGlhCi0gICBNYXJjdXMgSGVyYmVydCwgR2VybWFueQotICAgTWlr ZSBIaWNrZXksIElUSQotICAgRGFuIEhpbGRlYnJhbmQsIFFOWCBTb2Z0d2FyZSBTeXN0ZW1zIElu YywgS2FuYXRhLCBPTiAoUU5YKQotICAgUiBFIEhpbGwKLSAgIFN0ZXBoYW4gSG9mZm1hbi1FbWRl bgotICAgU3ZlbiBIb2xtc3Ryb20sIEFCQiBVdGlsaXRpZXMgQUIsIFN3ZWRlbgotICAgQmlsbCBI b21lciwgQ3JheSBSZXNlYXJjaAotICAgUmF5IEh1bnRlciwgVGhlIFdvbGxvbmdvbmcgR3JvdXAK LSAgIFJhbmR5IEh1bnR6aWdlciwgTmF0aW9uYWwgTGlicmFyeSBvZiBNZWRpY2luZQotICAgTGFy cnkgSmFjb2JzLCBUcmFuc2FyYwotICAgU3RldmUgSmVua2lucywgTGFuY2FzdGVyIFVuaXZlcnNp dHksIFVLCi0gICBEYXZlIEpvaG5zb24sIEdyYWRpZW50IFRlY2hub2xvZ2llcwotICAgTWFyayBC IEpvaG5zb24sIEFwcGxlIENvbXB1dGVyCi0gICBKeWtlIEpva2luZW4sIFRhbXBlcmUgVW5pdmVy c2l0eSBvZiBUZWNobm9sb2d5LCBGaW5sYW5kIChRTlgpCi0gICBFcmljIEYgSm9uZXMsIEFUJlQK LSAgIEx1a2UgSm9uZXMsIEFUJlQKLSAgIFBldGVyIEpvbmVzLCBVIG9mIFF1ZWJlYyBNb250cmVh bAotICAgUGhpbCBKdWxpYW4sIFNBUyBJbnN0aXR1dGUKLSAgIFBldGVyIEthYmFsLCBVIG9mIFF1 ZWJlYwotICAgTWljIEthY3ptYXJjemlrLCBVIG9mIFRleGFzIGF0IEF1c3RpbgotICAgU2VyZ2V5 IEthcnRhc2hvZmYsIEluc3QuIG9mIFByZWNpc2UgTWVjaGFuaWNzICYgQ29tcHV0ZXIgRXF1aXBt ZW50LCBNb3Njb3cKLSAgIEhvd2llIEtheWUsIENvbHVtYmlhIFUKLSAgIFJvYiBLZWRvaW4sIExp bm90eXBlIENvLCBIYXVwcGF1Z2UsIE5ZIChPUy8yKQotICAgUGhpbCBLZWVnc3RyYQotICAgTWFy ayBLZW5uZWR5LCBJQk0KLSAgIFRlcnJ5IEtlbm5lZHksIFN0IFBldGVyJ3MgQ29sbGVnZSwgSmVy c2V5IENpdHksIE5KIChWTVMgYW5kIG1vcmUpCi0gICAiQ2FybG8gS2lkIiwgVGVjaG5pY2FsIFVu aXZlcnNpdHkgb2YgRGVsZnQsIE5ldGhlcmxhbmRzCi0gICBUaW0gS2llbnR6bGUKLSAgIFBhdWwg S2ltb3RvLCBDb3JuZWxsIFUKLSAgIERvdWdsYXMgS2luZ3N0b24sIG1vcmdhbi5jb20KLSAgIExh d3JlbmNlIEtpcmJ5LCBXaWx0c2hpcmUsIFVLCi0gICBUb20gS2xvb3MsIFNlcXVlbnQgQ29tcHV0 ZXIgU3lzdGVtcwotICAgR3VlbnRlciBLbmF1ZgotICAgSmltIEtudXRzb24sIFUgb2YgVGV4YXMg YXQgQXVzdGluCi0gICBKb2huIFQuIEtvaGwgKEJTREkpCi0gICBTY290dCBLcmFtZXIsIFNSSSBJ bnRlcm5hdGlvbmFsLCBNZW5sbyBQYXJrLCBDQQotICAgSm9obiBLcmF5bmFjaywgVVMgUG9zdGFs IFNlcnZpY2UKLSAgIERhdmlkIEtyaWNrZXIsIEVuY29yZSBDb21wdXRlcgotICAgVGhvbWFzIEty dWVnZXIsIFVXTQotICAgQm8gS3VsbG1hciwgQUJDIEtsdWJiZW4sIFN0b2NraG9sbSwgYW5kIENl bnRyYWwgQmFuayBvZiBTd2VkZW4sIEtpc3RhCi0gICBSLiBCcmFkIEt1bW1lciwgQVQmVCBCZWxs IExhYnMsIEF0bGFudGEsIEdBCi0gICBKb2huIEt1bnplLCBVQyBCZXJrZWxleQotICAgRGF2aWQg TGFuZSwgQlNTSSAvIEJlbGxTb3V0aCAoU3RyYXR1cyBWT1MsIFguMjUpCi0gICBCb2IgTGFyc29u LCBVU0MgKE9TLTkpCi0gICBCZXJ0IExhdmVybWFuLCBHcm9uaW5nZW4gVSwgTmV0aGVybGFuZHMK LSAgIFN0ZXZlIExheXRvbgotICAgRGF2aWQgTGF3eWVyLCBVQyBJcnZpbmUKLSAgIEphc29uIExl aHIKLSAgIERhdmlkIExlVmluZSwgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBDb3Jwb3JhdGlvbgot ICAgRGFuaWVsIFMuIExld2FydCwgVUlVQwotICAgUy5PLiBMaWRpZSwgTGVoaWdoIFUKLSAgIFRv ciBMaWxscXZpc3QsIEhlbHNpbmtpIFUsIEZpbmxhbmQKLSAgIERhdmlkLU1pY2hhZWwgTGluY2tl LCBVIG9mIFN0IEdhbGxlbiwgU3dpdHplcmxhbmQKLSAgIFJvYmVydCBMaXBlIChmb3IgU0NPIG1h a2VmaWxlIGVudHJpZXMgJiBhZHZpY2UpCi0gICBEZWFuIExvbmcKLSAgIE1pa2UgTG9uZywgQW5h bG9nIERldmljZXMsIE5vcndvb2QgTUEKLSAgIEtldmluIExvd2V5LCBVIG9mIFNhc2thdGNoZXdh biAoT1MvMikKLSAgIEFuZHkgTG93cnksIENvbHVtYmlhIFUKLSAgIEphbWVzIEx1bW1lbCwgQ2Fw cmljYSBUZWxlY29tcHV0aW5nIFJlc291cmNlcyAoUU5YKQotICAgTGV3aXMgTWNDYXJ0aHkKLSAg IERhdmlkIE1hY0tlbnppZSwgRW52aXJvbm1lbnRhbCBEZWZlbnNlIEZ1bmQsIFUgb2YgTWFyeWxh bmQKLSAgIEpvaG4gTWFja2luLCBVbml2ZXJzaXR5IG9mIFNpZG5leSwgQXVzdHJhbGlhCi0gICBN YXJ0aW4gTWFjbGFyZW4sIEJhdGggVSwgVUsKLSAgIENocmlzIE1haW8sIENvbHVtYmlhIFUgQ1Mg RGVwdAotICAgTW9udHNlcnJhdCBNYW5lLCBIUCwgR3Jlbm9ibGUsIEZyYW5jZQotICAgRnVsdmlv IE1hcmlubywgT2xpdmV0dGksIEl2cmVhLCBJdGFseQotICAgQXJ0aHVyIE1hcnNoLCBkaXJjc2Eu b3JnLmF1Ci0gICBQZXRlciBNYXV6ZXksIEx1Y2VudCBUZWNobm9sb2dpZXMKLSAgIFR5ZSBNY1F1 ZWVuLCBVdGFoIFN0YXRlIFUKLSAgIFRlZCBNZWRpbgotICAgSGVsbG11dGggTWljaGFlbGlzLCBI YW5zZWF0aXNjaGVyIENvbXB1dGVyc2VydmljZSBHbWJILCBIYW1idXJnLCBHZXJtYW55Ci0gICBM ZXNsaWUgTWlrZXNlbGwsIEFtZXJpY2FuIEZhcm0gQnVyZWF1Ci0gICBUb2RkIE1pbGxlciwgQ291 cnRlc2FuIENvbnN1bHRpbmcKLSAgIEdhcnkgTWlsbHMKLSAgIE1hcnRpbiBNaW5vdywgREVDIChW TVMpCi0gICBQYXdhbiBNaXNyYSwgQmVsbGNvcmUKLSAgIEtlbiBNaXppYWxrbywgSUJNLCBNYW5h c3NhcywgVkEKLSAgIFdvbGZnYW5nIE1vZWxsZXIsIERFQ1VTIEdlcm1hbnkKLSAgIFJheSBNb29k eSwgUHVyZHVlIFUKLSAgIEJydWNlIEogTW9vcmUsIEFsbGVuLUJyYWRsZXkgQ28sIEhpZ2hsYW5k IEhlaWdodHMsIE9IIChBdGFyaSBTVCkKLSAgIFN0ZXZlIE1vcmxleSwgQ29udmV4Ci0gICBQZXRl ciBNb3NzZWwsIENvbHVtYmlhIFUKLSAgIFRvbnkgTW92c2hvbiwgTllVCi0gICBMb3UgTXVjY2lv bGksIFN3YW5zb24gQW5hbHlzaXMgU3lzdGVtcwotICAgRGFuIE11cnBoeQotICAgTmVhbCBQLiBN dXJwaHksIEhhcnNvZiBTeXN0ZW1zLCBXb25kZXIgTGFrZSBJTAotICAgR2FyeSBNdXNzYXIKLSAg IEpvaG4gTmFsbCwgRlNVCi0gICBKYWNrIE5lbHNvbiwgVSBvZiBQaXR0c2J1cmdoCi0gICBKaW0g Tm9ibGUsIFBsYW5uaW5nIFJlc2VhcmNoIENvcnBvcmF0aW9uIChNYWNpbnRvc2gpCi0gICBJYW4g TydCcmllbiwgQmF0aCBVLCBVSwotICAgTWVsaXNzYSBPJ05laWxsLCBTRlUKLSAgIEpvaG4gT3dl bnMKLSAgIFRob21hcyBQaW5rbCwgSGVhbHRoIEJ1c2luZXNzIFN5c3RlbXMgSW5jLgotICAgTWlj aGFlbCBQaW5zLCBJb3dhIENvbXB1dGVyIEFpZGVkIEVuZ2luZWVyaW5nIE5ldHdvcmsKLSAgIEFu ZHJlJyBQaXJhcmQsIFVuaXZlcnNpdHkgb2YgTGllZ2UsIEJlbGdpdW0KLSAgIFBhdWwgUGxhY2V3 YXksIE9oaW8gU3RhdGUgVQotICAgUGlldCBXLiBQbG9tcCwgSUNDRSwgR3JvbmluZ2VuIFVuaXZl cnNpdHksIE5ldGhlcmxhbmRzCi0gICBLZW4gUG91bHRvbiwgSFAgTGFicwotICAgTWFuZnJlZCBQ cmFuZ2UsIE9ha2xhbmQgVQotICAgQ2hyaXN0b3BoZXIgUHJhdHQsIEFQViBCYWtlciwgVUsKLSAg IEZyYW5rIFByaW5kbGUsIE5BREMKLSAgIFRvbnkgUXVlcnViaW4sIFUgb2YgSGF3YWlpCi0gICBK ZWFuLVBpZXJyZSBSYWRsZXkKLSAgIEFudG9uIFJhbmcKLSAgIE1pa2UgUmVjaHRtYW4KLSAgIFNj b3R0IFJpYmUKLSAgIEFsYW4gUm9iaWV0dGUsIE94Zm9yZCBVbml2ZXJzaXR5LCBVSwotICAgTWlj aGVsIFJvYml0YWlsbGUsIFUgb2YgTW9udHJlYWwgKE1hYykKLSAgIEh1dyBSb2dlcnMsIFNjaHdl aXplcmlzY2hlIEtyZWRpdGFuc3RhbHQsIFp1ZXJpY2gKLSAgIE5pZ2VsIFJvbGVzLCBDYW1icmlk Z2UsIEVuZ2xhbmQKLSAgIEthaSBVd2UgUm9tbWVsLCBUZWNobmlzY2hlIFVuaXZlcnNpdGFldCBN dWVuY2hlbiAoT1MvMikKLSAgIExhcnJ5IFJvc2VubWFuIChBbWlnYSkKLSAgIEpheSBSb3VtYW4s IFUgb2YgTWljaGlnYW4KLSAgIEphY2sgUm91c2UsIFNBUyBJbnN0aXR1dGUgKERhdGEgR2VuZXJh bCBhbmQvb3IgQXBvbGxvKQotICAgU3RldyBSdWJlbnN0ZWluLCBIYXJ2YXJkIFUgKFZNUykKLSAg IEdlcmhhcmQgUnVlY2tsZSwgRkggRGFybXN0YWR0LCBGYi4gRS9BdXRvbWF0aXNpZXJ1bmdzdGVj aG5pawotICAgSm9obiBTYW50b3MsIEVHJkgKLSAgIEJpbGwgU2NoaWxpdCwgQ29sdW1iaWEgVQot ICAgVWxsaSBTY2hsdWV0ZXIsIFJXVEggQWFjaGVuLCBHZXJtYW55IChPUy05LCBldGMpCi0gICBN aWNoYWVsIFNjaG1pZHQsIFUgb2YgUGFkZXJib3JuLCBHZXJtYW55Ci0gICBFcmljIFNjaG5vZWJl bGVuLCBDb252ZXgKLSAgIEJlbm4gU2NocmVpYmVyLCBERUMKLSAgIERhbiBTY2h1bGxtYW4sIERF QyAobW9kZW1zLCBESUFMIGNvbW1hbmQsIGV0YykKLSAgIEpvaG4gU2NodWx0eiwgM00KLSAgIFN0 ZXZlbiBTY2h1bHR6LCBDb250ZWwgKFBEUC0xMSkKLSAgIFN0ZXZlbiBTY2h3ZWRhCi0gICBBUFBQ IFNjb3JlciwgTGVlZHMgUG9seXRlY2huaWMsIFVLCi0gICBHb3Jkb24gU2NvdHQsIE1pY3JvIEZv Y3VzLCBOZXdidXJ5IFVLCi0gICBHaXNiZXJ0IFcuIFNlbGtlLCBXSWRPLCBCb25uLCBHZXJtYW55 Ci0gICBLaWphbCBTaGFoCi0gICBEYXZpZCBTaW5nZXIsIElCTSBBbG1hZGVuIFJlc2VhcmNoIExh YnMKLSAgIERhdmlkIFNpemVsYW5kLCBVIG9mIExvbmRvbiBNZWRpY2FsIFNjaG9vbAotICAgRnJp ZHJpayBTa3VsYXNvbiwgSWNlbGFuZAotICAgUmljayBTbGFka2V5IChMaW51eCkKLSAgIERhdmUg U2xhdGUKLSAgIEJyYWRsZXkgU21pdGgsIFVDTEEKLSAgIEZyZWQgU21pdGgsIE1lcmsgLyBDb21w dXRyaXRpb24KLSAgIFJpY2hhcmQgUyBTbWl0aCwgQ2FsIFN0YXRlCi0gICBSeWFuIFN0YW5pc2Zl ciwgVU5UCi0gICBCZXJ0aWwgU3RlbnN0cm9lbSwgU3RvY2tob2xtIFVuaXZlcnNpdHkgQ29tcHV0 ZXIgQ2VudHJlIChRWiksIFN3ZWRlbgotICAgSmFtZXMgU3R1cmRldmFudCwgQ0FQIEdFTUVOSSBB TUVSSUNBLCBNaW5uZWFwb2xpcwotICAgUGV0ZXIgU3ZhbmJlcmcsIFJveWFsIFRlY2huLiBIUywg U3dlZGVuCi0gICBKYW1lcyBSLiBTd2Vuc29uLCBBY2N1LVdlYXRoZXIsIEluYy4KLSAgIFRlZCBU J3NvLCBNSVQgKExpbnV4KQotICAgQW5keSBUYW5lbmJhdW0sIFZyaWplIFUsIEFtc3RlcmRhbSwg TmV0aGVybGFuZHMKLSAgIFNldGggVGhlcmlhdWx0LCBDb2x1bWJpYSBVCi0gICBHbGVuIFRob2Jl Ci0gICBNYXJra3UgVG9pamFsYSwgSGVsc2lua2kgVSBvZiBUZWNobm9sb2d5Ci0gICBUZWVtdSBU b3JtYSwgSGVsc2lua2kgVSBvZiBUZWNobm9sb2d5Ci0gICBMaW51cyBUb3J2YWxkcywgSGVsc2lu a2kKLSAgIFJpY2sgVHJveGVsLCBOSUgKLSAgIFdhcnJlbiBUdWNrZXIsIFRyaWRvbSBDb3JwLCBN b3VudGFpbiBQYXJrLCBHQQotICAgRGF2ZSBUd2V0ZW4sIEFNRVMtTkFTCi0gICBHIFVkZGVib3Jn LCBTd2VkZW4KLSAgIFdhbHRlciBVbmRlcndvb2QsIEZvcmQgQWVyb3NwYWNlCi0gICBQaWV0ZXIg VmFuIERlciBMaW5kZW4sIENlbnRyZSBNb25kaWFsLCBQYXJpcwotICAgR2UgdmFuIEdlbGRvcnAs IE5ldGhlcmxhbmRzCi0gICBGcmVkIHZhbiBLZW1wZW4sIE1JTklYIFVzZXIgR3JvdXAsIFZvb3Jo b3V0LCBOZXRoZXJsYW5kcwotICAgV2F5bmUgVmFuIFBlbHQsIEdFL0NSRAotICAgTWFyayBWYXNv bGwsIE9rbGFob21hIFN0YXRlIFUgKFY3IFVOSVgpCi0gICBLb25zdGFudGluIFZpbm9ncmFkb3Ys IElDU1RJLCBNb3Njb3cKLSAgIFBhdWwgVml4aWUsIERFQwotICAgQmVybmllIFZvbHosIFByb2Nl c3MgU29mdHdhcmUKLSAgIEVkdWFyZCBWb3BpY2thLCBQcmFndWUgVW5pdmVyc2l0eSBvZiBFY29u b21pY3MsIEN6ZWNoIFJlcHVibGljCi0gICBNYXJ0aW4gVm9ybGFlbmRlcgotICAgRGltaXRyaSBW dWxpcywgQ1VOWQotICAgUm9nZXIgV2FsbGFjZSwgUmF5dGhlb24KLSAgIFN0ZXBoZW4gV2FsdG9u LCBDYWxpZiBTdGF0ZSBVLCBOb3J0aHJpZGdlIChBbWlnYSkKLSAgIEphbWllIFdhdHNvbiwgQWRh c29mdCwgU3dpdHplcmxhbmQgKEFJWCkKLSAgIFJpY2sgV2F0c29uLCBVIG9mIFRleGFzIChNYWNp bnRvc2gpCi0gICBFcmljIFdlYXZlciwgQ29sdW1iaWEgVQotICAgU2NvdHQgV2Vpa2FydCAoQXNz b2NpYXRpb24gZm9yIFByb2dyZXNzaXZlIENvbW11bmljYXRpb25zKQotICAgUm9iZXJ0IFdlaW5l ciwgUHJvZ3JhbW1pbmcgUGx1cywgTmV3IFlvcmsgQ2l0eQotICAgTGF1cmVuIFdlaW5zdGVpbiwg Vm9ydGV4IFRlY2hubG9neQotICAgRGF2aWQgV2V4ZWxibGF0LCBBVCZUCi0gICBDbGFyayBXaWVy ZGEsIElsbHVtaW5hdGkgT25saW5lCi0gICBKb2FjaGltIFdpZXNlbCwgVSBvZiBLYXJsc3J1aGUK LSAgIExvbiBXaWxsZXR0LCBVIG9mIFV0YWgKLSAgIE1pY2hhZWwgV2lsbGlhbXMsIFVDTEEKLSAg IE5hdGUgV2lsbGlhbXMsIFUgb2YgTW9udGFuYQotICAgRGF2aWQgV2lsc29uCi0gICBKb2VsbGVu IFdpbmRzb3IsIFUgb2YgQXJpem9uYQotICAgUGF0cmljayBXb2xmZSwgS3VjayAmIEFzc29jaWF0 ZXMsIEluYy4KLSAgIEdyZWdnIFdvbmRlcmx5LCBPa2xhaG9tYSBTdGF0ZSBVIChWNyBVTklYKQot ICAgRmFycmVsbCBXb29kcywgQ29uY3VycmVudCAoZm9ybWVybHkgTWFzc2NvbXApCi0gICBEYXZl IFdvb2xsZXksIENBUCBDb21tdW5pY2F0aW9uIFN5c3RlbXMsIExvbmRvbgotICAgSmFjayBXb29s bGV5LCBTQ1QgQ29ycAotICAgRnJhbmsgV29ydG5lcgotICAgS2VuIFlhcCwgZm9ybWVybHkgb2Yg VSBvZiBSb2NoZXN0ZXIKLSAgIEpvaG4gWmVlZmYsIEFubiBBcmJvciwgTUkKLSovCi0KLSNpbmNs dWRlICJja2NrZXIuaCIgICAgICAgICAgICAgICAgICAgICAvKiBLZXJtaXQgc3ltYm9scyAqLwot I2luY2x1ZGUgImNrY25ldC5oIiAgICAgICAgICAgICAgICAgICAgIC8qIE5ldHdvcmsgc3ltYm9s cyAqLwotCi0jaWZkZWYgQ0tfU1NMCi0jaW5jbHVkZSAiY2tfc3NsLmgiCi0jZW5kaWYgLyogQ0tf U1NMICovCi0KLSNpZm5kZWYgTk9TUEwKLSNpbmNsdWRlICJja3V1c3IuaCIKLSNlbmRpZiAvKiBO T1NQTCAqLwotCi0jaWZkZWYgT1MyT05MWQotI2RlZmluZSBJTkNMX1ZJTyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIE5lZWRlZCBmb3IgY2tvY29uLmggKi8KLSNpbmNsdWRlIDxvczIuaD4KLSN1 bmRlZiBDT01NRU5UCi0jZW5kaWYgLyogT1MyT05MWSAqLwotCi0jaWZkZWYgTlQKLSNpbmNsdWRl IDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8dGFwaS5oPgotI2luY2x1ZGUgImNrbnRhcC5oIgotI2Vu ZGlmIC8qIE5UICovCi0KLSNpZm5kZWYgTk9TRVJWRVIKLS8qIFRleHQgbWVzc2FnZSBkZWZpbml0 aW9ucy4uIGVhY2ggc2hvdWxkIGJlIDI1NiBjaGFycyBsb25nLCBvciBsZXNzLiAqLwotI2lmZGVm IE1JTklYCi1jaGFyICpzcnZ0eHQgPSAiXHJcblwKLUVudGVyaW5nIHNlcnZlciBtb2RlLlxyXG5c MCI7Ci0jZWxzZQotI2lmZGVmIE9MRE1TRwotLyoKLSAgSXQgc2VlbXMgdGhlcmUgd2FzIGEgbGFy Z2UgaW5zdGFsbGF0aW9uIHRoYXQgd2FzIHVzaW5nIEMtS2VybWl0IDVBKDE2NSkKLSAgb3IgdGhl cmVhYm91dHMsIHdoaWNoIGhhZCBkZXBsb3llZCB0aG91c2FuZHMgb2YgTVMtRE9TIEtlcm1pdCBz Y3JpcHRzIGluCi0gIHNjYXR0ZXJlZCBsb2NhdGlvbnMgdGhhdCBsb29rZWQgZm9yIHN0cmluZ3Mg aW4gdGhlIG9sZCBzZXJ2ZXIgbWVzc2FnZSwKLSAgd2hpY2ggY2hhbmdlZCBpbiA1QSgxODMpLCBB dWd1c3QgMTk5Mi4KLSovCi1jaGFyICpzcnZ0eHQgPSAiXHJcblwKLUMtS2VybWl0IHNlcnZlciBz dGFydGluZy4gIFJldHVybiB0byB5b3VyIGxvY2FsIG1hY2hpbmUgYnkgdHlwaW5nXHJcblwKLWl0 cyBlc2NhcGUgc2VxdWVuY2UgZm9yIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24sIGFuZCBpc3N1ZSBm dXJ0aGVyXHJcblwKLWNvbW1hbmRzIGZyb20gdGhlcmUuICBUbyBzaHV0IGRvd24gdGhlIEMtS2Vy bWl0IHNlcnZlciwgaXNzdWUgdGhlXHJcblwKLUZJTklTSCBvciBCWUUgY29tbWFuZCBhbmQgdGhl biByZWNvbm5lY3QuXG5cCi1cclxuXDAiOwotI2Vsc2UKLSNpZmRlZiBPU0sKLWNoYXIgKnNydnR4 dCA9ICJcclwwMTJcCi1FbnRlcmluZyBzZXJ2ZXIgbW9kZS4gIElmIHlvdXIgbG9jYWwgS2VybWl0 IHNvZnR3YXJlIGlzIG1lbnUgZHJpdmVuLCB1c2VcclwwMTJcCi10aGUgbWVudXMgdG8gc2VuZCBj b21tYW5kcyB0byB0aGUgc2VydmVyLiAgT3RoZXJ3aXNlLCBlbnRlciB0aGUgZXNjYXBlXHJcMDEy XAotc2VxdWVuY2UgdG8gcmV0dXJuIHRvIHlvdXIgbG9jYWwgS2VybWl0IHByb21wdCBhbmQgaXNz dWUgY29tbWFuZHMgZnJvbVxyXDAxMlwKLXRoZXJlLiBVc2UgU0VORCBhbmQgR0VUIGZvciBmaWxl IHRyYW5zZmVyLiBVc2UgUkVNT1RFIEhFTFAgZm9yIGEgbGlzdCBvZlxyXDAxMlwKLW90aGVyIGF2 YWlsYWJsZSBzZXJ2aWNlcy4gIFVzZSBCWUUgb3IgRklOSVNIIHRvIGVuZCBzZXJ2ZXIgbW9kZS5c clwwMTJcMCI7Ci0jZWxzZSAvKiBVTklYLCBWTVMsIEFPUy9WUywgYW5kIGFsbCBvdGhlcnMgKi8K LWNoYXIgKnNydnR4dCA9ICJcclxuXAotRW50ZXJpbmcgc2VydmVyIG1vZGUuICBJZiB5b3VyIGxv Y2FsIEtlcm1pdCBzb2Z0d2FyZSBpcyBtZW51IGRyaXZlbiwgdXNlXHJcblwKLXRoZSBtZW51cyB0 byBzZW5kIGNvbW1hbmRzIHRvIHRoZSBzZXJ2ZXIuICBPdGhlcndpc2UsIGVudGVyIHRoZSBlc2Nh cGVcclxuXAotc2VxdWVuY2UgdG8gcmV0dXJuIHRvIHlvdXIgbG9jYWwgS2VybWl0IHByb21wdCBh bmQgaXNzdWUgY29tbWFuZHMgZnJvbVxyXG5cCi10aGVyZS4gIFVzZSBTRU5EIGFuZCBHRVQgZm9y IGZpbGUgdHJhbnNmZXIuICBVc2UgUkVNT1RFIEhFTFAgZm9yIGEgbGlzdCBvZlxyXG5cCi1vdGhl ciBhdmFpbGFibGUgc2VydmljZXMuICBVc2UgQllFIG9yIEZJTklTSCB0byBlbmQgc2VydmVyIG1v ZGUuXHJcblwwIjsKLSNlbmRpZiAvKiBPU0sgKi8KLSNlbmRpZiAvKiBPTERNU0cgKi8KLSNlbmRp ZiAvKiBNSU5JWCAqLwotI2Vsc2UgIC8qIHNlcnZlciBtb2RlIGRpc2FibGVkICovCi1jaGFyICpz cnZ0eHQgPSAiIjsKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotCi1pbnQgaW5pdGZsZyA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAgLyogc3lzaW5pdCgpIGhhcyBleGVjdXRlZC4uLiAqLwotaW50 IGhvd2NhbGxlZCA9IElfQU1fS0VSTUlUOyAgICAgICAgICAgIC8qIEhvdyBJIHdhcyBjYWxsZWQg Ki8KLWludCBobXRvcGxpbmUgPSAwOwotaW50IHF1aXR0aW5nID0gMDsJCQkvKiBJJ20gaW4gdGhl IGFjdCBvZiBxdWl0dGluZyAqLwotCi0jaWZkZWYgSUtTRENPTkYKLWNoYXIgKiBpa3NkY29uZiA9 IElLU0RDT05GOyAgICAgICAgICAgICAvKiBJS1NEIGNvbmZpZ3VyYXRpb24gZmlsZSAqLwotaW50 ICAgIGlrc2RjZiAgID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIEhhcyBJS1NEIGMuZi4gYmVl biBwcm9jZXNzZWQ/ICovCi0jZW5kaWYgLyogSUtTRENPTkYgKi8KLQotaW50IHNydmNkbXNnID0g MDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFtTZXJ2ZXJdIENEIG1lc3NhZ2UgKi8KLWNoYXIg KiBjZG1zZ2ZpbGVbOF0gPSB7IE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVM TCB9OwotY2hhciAqIGNkbXNnc3RyID0gTlVMTDsKLWNoYXIgKiBja2NkcGF0aCA9IE5VTEw7Ci0K LSNpZmRlZiBOTENIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXh0LWZpbGUgbGlu ZSB0ZXJtaW5hdG9yICovCi1DSEFSIGZlb2wgPSBOTENIQVI7Ci0jZWxzZQotQ0hBUiBmZW9sID0g MDsKLSNlbmRpZiAvKiBOTENIQVIgKi8KLQotaW50IGZibGtzaXogPSBEQkxLU0laOyAgICAgICAg ICAvKiBGaWxlIGJsb2Nrc2l6ZSAqLwotaW50IGZyZWNsID0gRExSRUNMOyAgICAgICAgICAgICAv KiBGaWxlIHJlY29yZCBsZW5ndGggKi8KLWludCBmcmVjZm0gPSBYWUZGX1M7ICAgICAgICAgICAg LyogRmlsZSByZWNvcmQgZm9ybWF0IChkZWZhdWx0ID0gc3RyZWFtKSAqLwotaW50IGZvcmcgPSBY WUZPX1M7ICAgICAgICAgICAgICAvKiBGaWxlIG9yZ2FuaXphdGlvbiAoc2VxdWVudGlhbCkgKi8K LWludCBmY2N0cmwgPSBYWUZQX047ICAgICAgICAgICAgLyogRmlsZSBjYXJyaWFnZSBjb250cm9s IChjdHJsIGNoYXJzKSAqLwotaW50IGZpbGVjYXNlID0gRklMRUNBU0U7ICAgICAgICAvKiBDYXNl IG1hdHRlcnMgaW4gZmlsZW5hbWVzICovCi1pbnQgc3RhdGhhY2sgPSAxOyAgICAgICAgICAgICAg IC8qIEZhc3QgZGlyZWN0b3J5IGxvb2t1cHMgYnkgZGVmYXVsdCAqLwotCi1jaGFyIHVpZGJ1ZltV SURCVUZMRU5dID0geyBOVUwsIE5VTCB9OyAgLyogVXNlciBJRCBidWZmZXIgKi8KLWludCBjZmls ZWYgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBcHBsaWNhdGlvbiAoImtlcmJhbmci KSBmaWxlIGZsYWcgKi8KLWNoYXIgY21kZmlsW0NLTUFYUEFUSCArIDFdID0geyBOVUwsIE5VTCB9 OyAvKiBBcHBsaWNhdGlvbiBmaWxlIG5hbWUgKi8KLWludCBoYXZldXJsID0gMDsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBVUkwgZ2l2ZW4gb24gY29tbWFuZCBsaW5lICovCi0KLSNpZm5kZWYg Tk9YRkVSCi0vKiBNdWx0aS1wcm90b2NvbCBzdXBwb3J0ICovCi0KLXN0cnVjdCBja19wIHB0YWJb TlBST1RPU10gPSB7ICAgICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBLZXJtaXQgcGFydCAuLi4g Ki8KLSAgeyAiS2VybWl0IiwKLSAgICBEUlBTSVosICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBSZWNlaXZlIHBhY2tldCBzaXplICovCi0gICAgRFNQU0laLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogU2VuZCBwYWNrZXQgc2l6ZSAqLwotICAgIDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFNlbmQtcGFja2V0LXNpemUtc2V0IGZsYWcgKi8KLSAgICBE RldTSVosICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXaW5kb3cgc2l6ZSAqLwotCi0j aWZkZWYgTkVXREVGQVVMVFMKLSAgICBQWF9DQVUsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBDb250cm9sIGNoYXIgdW5wcmVmaXhpbmcuLi4gKi8KLSNlbHNlCi0gICAgUFhfQUxMLAot I2VuZGlmIC8qIE5FV0RFRkFVTFRTICovCi0KLSNpZmRlZiBWTVMgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBEZWZhdWx0IGZpbGVuYW1lIGNvbGxpc2lvbiBhY3Rpb24gKi8KLSAgICBY WUZYX1gsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSRVBMQUNFIGZvciBWQVgvVk1T ICovCi0jZWxzZQotICAgIFhZRlhfQiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJB Q0tVUCBmb3IgZXZlcnlib2R5IGVsc2UgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQotI2lmZGVmIE9T MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIGZpbGUgbmFtZSBjb252 ZXJzaW9uICovCi0gICAgWFlGTl9MLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGl0 ZXJhbCBmb3IgT1MyICovCi0jZWxzZQotICAgIFhZRk5fQywgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIENvbnZlcnRlZCBmb3Igb3RoZXJzICovCi0jZW5kaWYgLyogT1MyICovCi0KLSAg ICBQQVRIX09GRiwgICAgICAgICAgICAgICAgICAgLyogU2VuZCBwYXRobmFtZXMgT0ZGICovCi0g ICAgUEFUSF9BVVRPLCAgICAgICAgICAgICAgICAgIC8qIFJlY2VpdmUgcGF0aG5hbWVzIEFVVE8g Ki8KLSAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgLyogSG9zdCByZWNlaXZlIGluaXRp YXRpb24gc3RyaW5nIChiaW5hcnkpICovCi0gICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAg IC8qIEhvc3QgcmVjZWl2ZSBpbml0aWF0aW9uIHN0cmluZyAodGV4dCkgICAqLwotICAgIE5VTEws ICAgICAgICAgICAgICAgICAgICAgICAvKiBIb3N0IHNlcnZlciBzdHJpbmcgKi8KLSAgICBOVUxM LCAgICAgICAgICAgICAgICAgICAgICAgLyogRXh0ZXJuYWwgcHJvdG9jb2wgc2VuZCBjb21tYW5k IChiaW5hcnkpICovCi0gICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgIC8qIEV4dGVybmFs IHByb3RvY29sIHNlbmQgY29tbWFuZCAodGV4dCkgICAqLwotICAgIE5VTEwsICAgICAgICAgICAg ICAgICAgICAgICAvKiBFeHRlcm5hbCBwcm90b2NvbCByZWNlaXZlIGNvbW1hbmQgKGJpbikgKi8K LSAgICBOVUxMIH0gICAgICAgICAgICAgICAgICAgICAgLyogRXh0ZXJuYWwgcHJvdG9jb2wgcmVj ZWl2ZSBjb21tYW5kICh0eHQpICovCi0jaWZkZWYgQ0tfWFlaCi0sCi17IlhNT0RFTSIsICAgIDEy OCwxMjgsLTEsLTEsICAgMSwtMSwtMSwwLDAsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEws TlVMTH0sCi17IlhNT0RFTS1DUkMiLDEyOCwxMjgsLTEsLTEsICAtMSwtMSwtMSwwLDAsTlVMTCxO VUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTH0sCi17IllNT0RFTSIsICAgLTEsIC0xLC0xLC0x LCAgICAtMSwtMSwtMSwwLDAsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTH0sCi17 IllNT0RFTS1nIiwgLTEsIC0xLC0xLC0xLCAgICAtMSwtMSwtMSwwLDAsTlVMTCxOVUxMLE5VTEws TlVMTCxOVUxMLE5VTEwsTlVMTH0sCi17IlpNT0RFTSIsICAgLTEsIC0xLC0xLC0xLFBYX1dJTCwt MSwtMSwwLDAsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTH0sCi17Ik90aGVyIiwg ICAgLTEsIC0xLC0xLC0xLCAgICAtMSwtMSwtMSwwLDAsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxM LE5VTEwsTlVMTH0KLSNlbmRpZiAvKiBDS19YWVogKi8KLX07Ci0KLS8qIERlY2xhcmF0aW9ucyBm b3IgU2VuZC1Jbml0IFBhcmFtZXRlcnMgKi8KLQotaW50IHNwc2l6ID0gRFNQU0laLCAgICAgICAg ICAgICAgICAgICAgIC8qIEN1cnJlbnQgcGFja2V0IHNpemUgdG8gc2VuZCAqLwotICAgIHNwbWF4 ID0gRFNQU0laLCAgICAgICAgICAgICAgICAgICAgIC8qIEJpZ2dlc3QgcGFja2V0IHNpemUgd2Ug Y2FuIHNlbmQgKi8KLSAgICBsYXN0c3BtYXggPSBEU1BTSVosICAgICAgICAgICAgICAgICAvKiBT ZW5kLXBhY2tldCBzaXplIGxhc3QgdXNlZCAqLwotICAgIHNwc2l6ciA9IERTUFNJWiwgICAgICAg ICAgICAgICAgICAgIC8qIFNlbmQtcGFja2V0IHNpemUgcmVxdWVzdGVkICovCi0gICAgc3BzaXpm ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyB0byBvdmVycmlkZSBzaXplIG5l Z290aWF0aW9uICovCi0gICAgcnBzaXogPSBEUlBTSVosICAgICAgICAgICAgICAgICAgICAgLyog QmlnZ2VzdCB3ZSB3YW50IHRvIHJlY2VpdmUgKi8KLSAgICB1cnBzaXogPSBEUlBTSVosICAgICAg ICAgICAgICAgICAgICAvKiBVc2VyLXJlcXVlc3RlZCByZWNlaXZlIHBrdCBzaXplICovCi0gICAg bWF4cnBzID0gTUFYUlAsICAgICAgICAgICAgICAgICAgICAgLyogTWF4aW11bSBpbmNvbWluZyBs b25nIHBhY2tldCBzaXplICovCi0gICAgbWF4c3BzID0gTUFYU1AsICAgICAgICAgICAgICAgICAg ICAgLyogTWF4aW11bSBvdXRib3VuZCBsLnAuIHNpemUgKi8KLSAgICBtYXh0cnkgPSBNQVhUUlks ICAgICAgICAgICAgICAgICAgICAvKiBNYXhpbXVtIHJldHJpZXMgcGVyIHBhY2tldCAqLwotICAg IHdzbG90cyA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdpbmRvdyBzaXplIGN1cnJl bnRseSBpbiB1c2UgKi8KLSAgICB3c2xvdHIgPSBERldTSVosICAgICAgICAgICAgICAgICAgICAv KiBXaW5kb3cgc2l6ZSBmcm9tIFNFVCBXSU5ET1cgKi8KLSAgICB3c2xvdG4gPSAxLCAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBXaW5kb3cgc2l6ZSBuZWdvdGlhdGVkIGluIFMtcGt0ICovCi0g ICAgdGltZW91dHMgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIHN0YXRpc3RpY3Mg cmVwb3J0aW5nICovCi0gICAgc3BhY2tldHMgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgLyog IC4uLiAqLwotICAgIHJwYWNrZXRzID0gMCwgICAgICAgICAgICAgICAgICAgICAgIC8qICAuLi4g Ki8KLSAgICByZXRyYW5zID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAvKiAgLi4uICovCi0g ICAgY3J1bmNoZWQgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgLyogIC4uLiAqLwotICAgIHdt YXggPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAuLi4gKi8KLSAgICB3Y3VyID0g MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgLi4uICovCi0gICAgc3J2aWRsID0gMCwg ICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VydmVyIGlkbGUgdGltZW91dCAqLwotICAgIHNy dmRpcyA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlcnZlciBmaWxlIHhmZXIgZGlz cGxheSAqLwotICAgIHNydnRpbSA9IERTUlZUSU0sICAgICAgICAgICAgICAgICAgIC8qIFNlcnZl ciBjb21tYW5kIHdhaXQgdGltZW91dCAqLwotICAgIHNydnBpbmcgPSAxLCAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFNlcnZlciBrZWVwYWxpdmUgKi8KLS8qCi0gIHRpbWludCBpcyB0aGUgdGlt ZW91dCBpbnRlcnZhbCBJIHVzZSB3aGVuIHdhaXRpbmcgZm9yIGEgcGFja2V0LgotICBwa3R0aW0g aXMgdGhlIFNFVCBSRUNFSVZFIFRJTUVPVVQgdmFsdWUsIHNlbnQgdG8gdGhlIG90aGVyIEtlcm1p dC4KLSAgcnRpbW8gaXMgdGhlIFNFVCBTRU5EIFRJTUVPVVQgdmFsdWUuICBydGltbyBpcyB0aGUg aW5pdGlhbCB2YWx1ZSBvZgotICB0aW1pbnQuICB0aW1pbnQgaXMgY2hhbmdlZCBieSB0aGUgdmFs dWUgaW4gdGhlIGluY29taW5nIG5lZ290aWF0aW9uCi0gIHBhY2tldCB1bmxlc3MgYSBTRVQgU0VO RCBUSU1FT1VUIGNvbW1hbmQgd2FzIGdpdmVuLgotKi8KLSAgICB0aW1pbnQgPSBETVlUSU0sICAg ICAgICAgICAgICAgICAgICAvKiBUaW1lb3V0IGludGVydmFsIEkgdXNlICovCi0gICAgcGt0dGlt ID0gVVJUSU1FLCAgICAgICAgICAgICAgICAgICAgLyogVGltZW91dCBJIHdhbnQgeW91IHRvIHVz ZSAqLwotICAgIHJ0aW1vID0gRE1ZVElNLCAgICAgICAgICAgICAgICAgICAgIC8qIE5vcm1hbCBw YWNrZXQgd2FpdCB0aW1lb3V0ICovCi0gICAgdGltZWYgPSAwLCAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogRmxhZyB0byBvdmVycmlkZSB3aGF0IHlvdSBhc2sgKi8KLSNpZmRlZiBDS19USU1F UlMKLSAgICBydHRmbGcgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVc2UgZHluYW1p YyByb3VuZC10cmlwIHRpbWVycyAqLwotI2Vsc2UKLSAgICBydHRmbGcgPSAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBVc2UgZml4ZWQgdGltZXIgKi8KLSNlbmRpZiAvKiBDS19USU1FUlMg Ki8KLSAgICBtaW50aW1lID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAvKiBNaW5pbXVtIHRp bWVvdXQgKi8KLSAgICBtYXh0aW1lID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXhp bXVtIHRpbWVvdXQgKi8KLQotICAgIG5wYWQgPSBNWVBBRE4sICAgICAgICAgICAgICAgICAgICAg IC8qIEhvdyBtdWNoIHBhZGRpbmcgdG8gc2VuZCAqLwotICAgIG15cGFkbiA9IE1ZUEFETiwgICAg ICAgICAgICAgICAgICAgIC8qIEhvdyBtdWNoIHBhZGRpbmcgdG8gYXNrIGZvciAqLwotICAgIGJj dHIgPSBERkJDVCwgICAgICAgICAgICAgICAgICAgICAgIC8qIEJsb2NrIGNoZWNrIHR5cGUgcmVx dWVzdGVkICovCi0gICAgYmN0dSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQmxv Y2sgY2hlY2sgdHlwZSB1c2VkICovCi0gICAgYmN0bCA9IDEsICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogQmxvY2sgY2hlY2sgbGVuZ3RoICovCi0gICAgYmN0ZiA9IDAsCQkJCS8qIEJsb2Nr IGNoZWNrIHR5cGUgMyBmb3JjZWQgb24gYWxsICovCi0gICAgY19zYXZlID0gLTEsICAgICAgICAg ICAgICAgICAgICAgICAgLyogQmxvY2sgY2hlY2sgc2F2aW5nIGFuZCByZXN0b3JpbmcgKi8KLSAg ICBzc19zYXZlID0gLTEsICAgICAgICAgICAgICAgICAgICAgICAvKiBTbG93LXN0YXJ0IHNhdmlu ZyBhbmQgcmVzdG9yaW5nICovCi0gICAgZWJxID0gIE1ZRUJRLCAgICAgICAgICAgICAgICAgICAg ICAgLyogOHRoIGJpdCBwcmVmaXggKi8KLSAgICBlYnFmbGcgPSAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAvKiA4dGgtYml0IHF1b3RpbmcgZmxhZyAqLwotICAgIHJxZiA9IC0xLCAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgdXNlZCBpbiA4YnEgbmVnb3RpYXRpb24gKi8KLSAg ICBycSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWNlaXZlZCA4YnEgYmlk ICovCi0gICAgc3EgPSAnWScsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VudCA4YnEg YmlkICovCi0gICAgcnB0ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVwZWF0 IGNvdW50ICovCi0gICAgcnB0cSA9IE1ZUlBUUSwgICAgICAgICAgICAgICAgICAgICAgLyogUmVw ZWF0IHByZWZpeCAqLwotICAgIHJwdGZsZyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFJlcGVhdCBwcm9jZXNzaW5nIGZsYWcgKi8KLSAgICBycHRlbmEgPSAxLCAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBSZXBlYXQgcHJvY2Vzc2luZyBlbmFibGVkICovCi0gICAgeGZyY2FuID0g MSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXIgY2FuY2VsbGF0aW9uIGVuYWJs ZWQgKi8KLSAgICB4ZnJpbnQgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2Zl ciBpbnRlcnJ1cHRpb24gZW5hYmxlZCAqLwotICAgIHhmcmNociA9IDMsICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFRyYW5zZmVyIGNhbmNlbCBjaGFyID0gQ3RybC1DICovCi0gICAgeGZybnVt ID0gMywgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmVlZCB0aHJlZSBvZiB0aGVtIGJ5IGRl ZmF1bHQgKi8KLSAgICBnX3hmcnhsYSA9IC0xOwotICAgIGNoYXIgKiB4ZnJtc2cgPSBOVUxMOyAg ICAgICAgICAgICAgIC8qIE1lc3NhZ2UgZm9yIGYudC4gZGlzcGxheSBzY3JlZW4gKi8KLSNlbmRp ZiAvKiBOT1hGRVIgKi8KLQotI2lmZGVmIE5PQ1NFVFMKLWludCB4ZnJ4bGEgPSAwOyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uICovCi0jZWxzZQot aW50IHhmcnhsYSA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuYWJsZWQgb3IgZGlz YWJsZWQgKi8KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLWludCBoYXZlbGZzID0gMDsJCQkvKiBM YXJnZSBmaWxlIHN1cHBvcnQgYXZhaWxhYmxlICovCi0KLSNpZm5kZWYgTk9YRkVSCi1pbnQgZXBr dGZsZyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRS1QQUNLRVQgY29tbWFuZCBhY3Rp dmUgKi8KLQotaW50IGNhcGFzICA9IDksICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvc2l0 aW9uIG9mIENhcGFiaWxpdGllcyAqLwotICAgIGxwY2FwYiA9IDIsICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIExvbmcgUGFja2V0IGNhcGFiaWxpdHkgKi8KLSAgICBscGNhcHIgPSAxLCAgICAg ICAgICAgICAgICAgICAgICAgICAvKiAgcmVxdWVzdGVkICovCi0gICAgbHBjYXB1ID0gMCwgICAg ICAgICAgICAgICAgICAgICAgICAgLyogIHVzZWQgKi8KLSAgICBzd2NhcGIgPSA0LCAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBTbGlkaW5nIFdpbmRvdyBjYXBhYmlsaXR5ICovCi0gICAgc3dj YXByID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogIHJlcXVlc3RlZCAoYWxsb3dlZCkg Ki8KLSAgICBzd2NhcHUgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgdXNlZCAqLwot ICAgIGF0Y2FwYiA9IDgsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEF0dHJpYnV0ZSBjYXBh YmlsaXR5ICovCi0gICAgYXRjYXByID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogIHJl cXVlc3RlZCAqLwotICAgIGF0Y2FwdSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qICB1 c2VkICovCi0gICAgcnNjYXBiID0gMTYsICAgICAgICAgICAgICAgICAgICAgICAgLyogUkVTRU5E IGNhcGFiaWxpdHkgKi8KLSAgICByc2NhcHIgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAv KiAgcmVxdWVzdGVkIGJ5IGRlZmF1bHQgKi8KLSAgICByc2NhcHUgPSAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAvKiAgdXNlZCAqLwotICAgIGxzY2FwYiA9IDMyLCAgICAgICAgICAgICAgICAg ICAgICAgIC8qIExvY2tpbmcgU2hpZnQgY2FwYWJpbGl0eSAqLwotICAgIGxzY2FwciA9IDEsICAg ICAgICAgICAgICAgICAgICAgICAgIC8qICByZXF1ZXN0ZWQgYnkgZGVmYXVsdCAqLwotICAgIGxz Y2FwdSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qICB1c2VkICovCi0KLS8qIEZsYWdz IGZvciB3aGV0aGVyIHRvIHVzZSBwYXJ0aWN1bGFyIGF0dHJpYnV0ZXMgKi8KLQotaW50IGF0ZW5j aSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuY29kaW5nIGluICovCi0gICAgYXRl bmNvID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5jb2Rpbmcgb3V0ICovCi0gICAg YXRkYXRpID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGF0ZSBpbiAqLwotICAgIGF0 ZGF0byA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERhdGUgb3V0ICovCi0gICAgYXRk aXNpID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGlzcG9zaXRpb24gaW4vb3V0ICov Ci0gICAgYXRkaXNvID0gMSwKLSAgICBhdGxlbmkgPSAxLCAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBMZW5ndGggaW4vb3V0IChib3RoIGtpbmRzKSAqLwotICAgIGF0bGVubyA9IDEsCi0gICAg YXRibGtpID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQmxvY2tzaXplIGluL291dCAq LwotICAgIGF0YmxrbyA9IDEsCi0gICAgYXR0eXBpID0gMSwgICAgICAgICAgICAgICAgICAgICAg ICAgLyogRmlsZSB0eXBlIGluL291dCAqLwotICAgIGF0dHlwbyA9IDEsCi0gICAgYXRzaWRpID0g MSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3lzdGVtIElEIGluL291dCAqLwotICAgIGF0 c2lkbyA9IDEsCi0gICAgYXRzeXNpID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAvKiBTeXN0 ZW0tZGVwZW5kZW50IHBhcmFtZXRlcnMgaW4vb3V0ICovCi0gICAgYXRzeXNvID0gMTsKLQotaW50 IGRpc3BvcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERpc3Bvc2l0aW9uICovCi0K LSNpZmRlZiBDS19QRVJNUwotaW50IGF0bHByaSA9IDEsCi0gICAgYXRscHJvID0gMSwKLSAgICBh dGdwcmkgPSAxLAotICAgIGF0Z3BybyA9IDE7Ci0jZW5kaWYgLyogQ0tfUEVSTVMgKi8KLQotaW50 IGF0ZnJtaSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlY29yZCBGb3JtYXQgaW4v b3V0ICovCi0gICAgYXRmcm1vID0gMTsKLQotI2lmZGVmIFNUUkFUVVMKLWludCBhdGNyZWkgPSAx LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDcmVhdG9yIElEIGluL291dCAqLwotICAgIGF0 Y3JlbyA9IDEsCi0gICAgYXRhY3RpID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWNj b3VudCBpbi9vdXQgKi8KLSAgICBhdGFjdG8gPSAxOwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLQot aW50IHNwcm1sZW4gPSAtMTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQvUmVjZWl2ZSBw cm90b2NvbCBwYXJhbWV0ZXIgKi8KLWludCBycHJtbGVuID0gLTE7ICAgICAgICAgICAgICAgICAg ICAgICAvKiBzdHJpbmcgbGVuZ3RoIGxpbWl0cyAqLwotaW50IHNlbmRpcGt0cyA9IDE7ICAgICAg ICAgICAgICAgICAgICAgIC8qIFNlbmQgSSBwYWNrZXRzICovCi0KLUNIQVIgcGFkY2ggPSBNWVBB REMsICAgICAgICAgICAgICAgICAgICAvKiBQYWRkaW5nIGNoYXJhY3RlciB0byBzZW5kICovCi0g ICAgbXlwYWRjID0gTVlQQURDLCAgICAgICAgICAgICAgICAgICAgLyogUGFkZGluZyBjaGFyYWN0 ZXIgdG8gYXNrIGZvciAqLwotICAgIHNlb2wgPSBNWUVPTCwgICAgICAgICAgICAgICAgICAgICAg IC8qIEVuZC1PZi1MaW5lIGNoYXJhY3RlciB0byBzZW5kICovCi0gICAgZW9sID0gTVlFT0wsICAg ICAgICAgICAgICAgICAgICAgICAgLyogRW5kLU9mLUxpbmUgY2hhcmFjdGVyIHRvIGxvb2sgZm9y ICovCi0gICAgY3RscSA9IENUTFEsICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udHJvbCBw cmVmaXggaW4gaW5jb21pbmcgZGF0YSAqLwotICAgIG15Y3RscSA9IENUTFEsICAgICAgICAgICAg ICAgICAgICAgIC8qIE91dGJvdW5kIGNvbnRyb2wgY2hhcmFjdGVyIHByZWZpeCAqLwotICAgIG15 cnB0cSA9IE1ZUlBUUTsgICAgICAgICAgICAgICAgICAgIC8qIFJlcGVhdCBwcmVmaXggSSB3YW50 IHRvIHVzZSAqLwotCi1pbnQgcnB0bWluID0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgLyog UmVwZWF0LWNvdW50IG1pbmltdW0gKi8KLQotaW50IHVzZXBpcGVzID0gMCwgICAgICAgICAgICAg ICAgICAgICAgIC8qIFVzZWQgZm9yIHhmZXIgdG8vZnJvbSBwaXBlcyAqLwotICAgIGdfdXNlcGlw ZXMgPSAtMTsKLQotY2hhciAqIGZpbGVmaWxlID0gTlVMTDsgICAgICAgICAgICAgICAgIC8qIEZp bGUgY29udGFpbmluZyBsaXN0IG9mIGZpbGVuYW1lcyAqLwotLyogQ0QgbWVzc2FnZSBmaWxlbmFt ZSBsaXN0ICovCi0KLWNoYXIgd2hvYXJldVsxNl0gPSB7IE5VTCwgTlVMIH07ICAgICAgICAvKiBT eXN0ZW0gSUQgb2Ygb3RoZXIgS2VybWl0ICovCi1pbnQgc3lzaW5kZXggPSAtMTsgICAgICAgICAg ICAgICAgICAgICAgLyogYW5kIGluZGV4IHRvIGl0cyBzeXN0ZW0gSUQgc3RydWN0ICovCi1pbnQg bXlpbmRleCAgPSAtMTsKLWludCB3ZWFyZWFsaWtlID0gMDsgICAgICAgICAgICAgICAgICAgICAv KiAyIEtlcm1pdHMgaGF2ZSBjb21wYXRpYmxlIHN5c2lkcyAqLwotY2hhciAqIGNrc3lzaWQgPSAg ICAgICAgICAgICAgICAgICAgICAgIC8qIE15IHN5c3RlbSBJRCAqLwotI2lmZGVmIFVOSVgKLSAg ICAiVTEiCi0jZWxzZQotI2lmZGVmIFZNUwotICAgICJENyIKLSNlbHNlCi0jaWZkZWYgT1NLCi0g ICAgIlVEIgotI2Vsc2UKLSNpZmRlZiBBTUlHQQotICAgICJMMyIKLSNlbHNlCi0jaWZkZWYgTUFD Ci0gICAgIkEzIgotI2Vsc2UKLSNpZmRlZiBPUzIKLSNpZmRlZiBOVAotICAgICJVTiIKLSNlbHNl IC8qIE5UICovCi0gICAgIlVPIgotI2VuZGlmIC8qIE5UICovCi0jZWxzZSAvKiBPUzIgKi8KLSNp ZmRlZiBkYXRhZ2VuZXJhbAotICAgICJGMyIKLSNlbHNlCi0jaWZkZWYgR0VNRE9TCi0gICAgIksy IgotI2Vsc2UKLSNpZmRlZiBTVFJBVFVTCi0gICAgIk1WIgotI2Vsc2UKLSAgICAiIgotI2VuZGlm IC8qIFNUUkFUVVMgKi8KLSNlbmRpZiAvKiBHRU1ET1MgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJh bCAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE1BQyAqLwotI2VuZGlmIC8qIEFNSUdB ICovCi0jZW5kaWYgLyogT1NLICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogVU5JWCAq LwotICAgIDsKLQotaW50IG9vcHRzID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE8t UGFja2V0IE9wdGlvbnMgKi8KLWludCBvbW9kZSA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBPLVBhY2tldCBUcmFuc2ZlciBNb2RlICovCi1pbnQgb25hbWUgPSAtMTsgICAgICAgICAg ICAgICAgICAgICAgICAgLyogTy1QYWNrZXQgRmlsZW5hbWUgT3B0aW9ucyAqLwotaW50IG9wYXRo ID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE8tUGFja2V0IFBhdGhuYW1lIE9wdGlv bnMgKi8KLQotc3RydWN0IHphdHRyIGlhdHRyOyAgICAgICAgICAgICAgICAgICAgIC8qIEluY29t aW5nIGZpbGUgYXR0cmlidXRlcyAqLwotCi0jaWZkZWYgVk1TCi0vKiBWTVMgbGFiZWxlZCBmaWxl IGRlZmF1bHQgb3B0aW9ucyAtIG5hbWUgb25seS4gKi8KLWludCBsZl9vcHRzID0gTEJMX05BTTsK LSNlbHNlCi0jaWZkZWYgT1MyCi0vKiBPUy8yIGxhYmVsZWQgZmlsZSBkZWZhdWx0IG9wdGlvbnMs IGFsbCBhdHRyaWJ1dGVzIGJ1dCBhcmNoaXZlZC4gKi8KLXVuc2lnbmVkIGxvbmcgaW50IGxmX29w dHMgPSBMQkxfRVhUfExCTF9ISUR8TEJMX1JPfExCTF9TWVM7Ci0jZWxzZQotaW50IGxmX29wdHMg PSAwOwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFZNUyAqLwotCi0vKiBQYWNrZXQtcmVs YXRlZCB2YXJpYWJsZXMgKi8KLQotaW50IHBrdG51bSA9IDAsICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEN1cnJlbnQgcGFja2V0IG51bWJlciAqLwotICAgIHNuZHR5cCA9IDAsICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFR5cGUgb2YgcGFja2V0IGp1c3Qgc2VudCAqLwotICAgIHJjdnR5 cCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR5cGUgb2YgcGFja2V0IGp1c3QgcmVj ZWl2ZWQgKi8KLSAgICByc24sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWNl aXZlZCBwYWNrZXQgc2VxdWVuY2UgbnVtYmVyICovCi0gICAgcmxuLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogUmVjZWl2ZWQgcGFja2V0IGxlbmd0aCAqLwotICAgIHNpemUsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgc2l6ZSBvZiBvdXRwdXQgcGt0 IGRhdGEgKi8KLSAgICBvc2l6ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcmV2 aW91cyBvdXRwdXQgcGFja2V0IGRhdGEgc2l6ZSAqLwotICAgIG1heHNpemUsICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIE1heCBzaXplIGZvciBidWlsZGluZyBkYXRhIGZpZWxkICovCi0g ICAgc3BrdGwgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIHBhY2tldCBi ZWluZyBzZW50ICovCi0gICAgcnBrdGwgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyog TGVuZ3RoIG9mIHBhY2tldCBqdXN0IHJlY2VpdmVkICovCi0gICAgcGt0cGF1cyA9IDAsICAgICAg ICAgICAgICAgICAgICAgICAgLyogSW50ZXJwYWNrZXQgcGF1c2UgaW50ZXJ2YWwsIG1zZWMgKi8K LSAgICBycHJpbnRmLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSRU1PVEUgUFJJTlQg ZmxhZyAqLwotICAgIHJtYWlsZiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1BSUwg ZmxhZyAqLwotICAgIHhmZXJzdGF0ID0gLTEsICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXR1 cyBvZiBsYXN0IHRyYW5zYWN0aW9uICovCi0gICAgZmlsZXN0YXR1cyA9IDA7ICAgICAgICAgICAg ICAgICAgICAgLyogU3RhdHVzIG9mIGxhc3QgZmlsZSB0cmFuc2ZlciAqLwotCi1DSEFSIHBrdG1z Z2J1ZltQS1RNU0dMRU4rMV07Ci1DSEFSICplcGt0bXNnID0gcGt0bXNnYnVmOwotCi0jaWZkZWYg cGRwMTEKLWludCBzcnZjbWRsZW4gPSBNQVhSUDsgICAgICAgICAgICAgICAgICAvKiBzcnZjbWQg YnVmZmVyIGxlbmd0aCAqLwotI2Vsc2UKLSNpZmRlZiBEWU5BTUlDCi1pbnQgc3J2Y21kbGVuID0g TUFYUlA7Ci0jZWxzZQotaW50IHNydmNtZGxlbiA9IDA7Ci0jZW5kaWYgLyogRFlOQU1JQyAqLwot I2VuZGlmIC8qIHBkcDExICovCi0KLUNIQVIKLSNpZmRlZiBwZHAxMQotICAgIHNydmNtZGJ1ZltN QVhSUCs0XSwKLSAgICAqc3J2Y21kID0gc3J2Y21kYnVmLAotI2Vsc2UKLSNpZmRlZiBEWU5BTUlD Ci0gICAgKnNydmNtZCA9IChDSEFSICopMCwgICAgICAgICAgICAgICAgLyogV2hlcmUgdG8gZGVj b2RlIHNlcnZlciBjb21tYW5kICovCi0jZWxzZQotICAgIHNydmNtZGJ1ZltNQVhSUCs0XSwKLSAg ICAqc3J2Y21kID0gc3J2Y21kYnVmLAotI2VuZGlmIC8qIERZTkFNSUMgKi8KLSNlbmRpZiAvKiBw ZHAxMSAqLwotICAgIHBhZGJ1Zls5Nl0sICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJ1ZmZl ciBmb3Igc2VuZC1wYWRkaW5nICovCi0gICAgKnJlY3BrdCwKLSAgICAqcmRhdGFwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIHJlY2VpdmVkIHBhY2tldCBkYXRhICov Ci0gICAgKmRhdGEgPSAoQ0hBUiAqKTAsICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBz ZW5kLXBhY2tldCBkYXRhICovCi0gICAgKnNydnB0ciwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogUG9pbnRlciB0byBzcnZjbWQgKi8KLSAgICBteXN0Y2ggPSBTT0gsICAgICAgICAgICAg ICAgICAgICAgICAvKiBPdXRib3VuZCBwYWNrZXQtc3RhcnQgY2hhcmFjdGVyICovCi0gICAgc3Rj aHIgPSBTT0g7ICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5jb21pbmcgcGFja2V0LXN0YXJ0 IGNoYXJhY3RlciAqLwotCi0vKiBGaWxlLXJlbGF0ZWQgdmFyaWFibGVzICovCi0KLSNpZm5kZWYg Tk9NU0VORCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNdWx0aXBsZSBTRU5EICovCi1zdHJ1 Y3QgZmlsZWxpc3QgKiBmaWxlaGVhZCA9IE5VTEw7ICAgICAgLyogU0VORCBsaXN0ICovCi1zdHJ1 Y3QgZmlsZWxpc3QgKiBmaWxldGFpbCA9IE5VTEw7Ci1zdHJ1Y3QgZmlsZWxpc3QgKiBmaWxlbmV4 dCA9IE5VTEw7Ci1pbnQgYWRkbGlzdCA9IDA7Ci0jZW5kaWYgLyogTk9NU0VORCAqLwotCi1jaGFy IGZpbG5hbVtDS01BWFBBVEggKyAxXTsgICAgICAgICAgICAgLyogTmFtZSBvZiBjdXJyZW50IGZp bGUuICovCi1jaGFyIG9maWxuYW1bQ0tNQVhQQVRIICsgMV07ICAgICAgICAgICAgLyogT3JpZ2lu YWwgbmFtZS4gKi8KLQotaW50IHBpcGVzZW5kID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8q IE5vbnplcm8gaWYgc2VuZGluZyBmcm9tIHBpcGUgKi8KLSNpZmRlZiBQSVBFU0VORAotY2hhciAq IHNuZGZpbHRlciA9IE5VTEw7ICAgICAgICAgICAgICAgIC8qIFNlbmQgYW5kIHJlY2VpdmUgZmls dGVycyAqLwotY2hhciAqIHJjdmZpbHRlciA9IE5VTEw7Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8K LQotY2hhciAqKiBzbmRhcnJheSA9IE5VTEw7ICAgICAgICAgICAgICAgIC8qIFNFTkQgL0FSUkFZ IHBvaW50ZXIgYW5kIHJhbmdlICovCi0jaWZuZGVmIE5PU1BMCi1pbnQgc25keGxvID0gLTEsIHNu ZHhoaSA9IC0xLCBzbmR4aW4gPSAtMTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotI2VuZGlmIC8qIE5P WEZFUiAqLwotCi0jaWZuZGVmIE5PU0VSVkVSCi1pbnQgbmdldHBhdGggPSAwOyAgICAgICAgICAg ICAgICAgICAgICAgLyogR0VUIHNlYXJjaCBwYXRoICovCi1pbnQgZnJvbWdldHBhdGggPSAwOwot Y2hhciAqIGdldHBhdGhbTUFYR0VUUEFUSF07Ci1jaGFyICogeF91c2VyID0gTlVMTDsgICAgICAg ICAgICAgICAgICAgLyogU2VydmVyIGxvZ2luIGluZm9ybWF0aW9uICovCi1jaGFyICogeF9wYXNz d2QgPSBOVUxMOwotY2hhciAqIHhfYWNjdCA9IE5VTEw7Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8K LQotaW50IHhfbG9naW4gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIExvZ2luIHJlcXVp cmVkICovCi1pbnQgeF9sb2dnZWQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogVXNlciBp cyBsb2dnZWQgaW4gKi8KLQotZXh0ZXJuIGludCB0aW1lbGltaXQ7Ci0KLSNpZmRlZiBDS19MT0dJ TgotaW50IGxvZ2ludGltbyA9IDMwMDsgICAgICAgICAgICAgICAgICAgIC8qIExvZ2luIHRpbWVv dXQgKi8KLWNoYXIgKiB1c2VyZmlsZSA9IE5VTEw7ICAgICAgICAgICAgICAgICAvKiBGb3JiaWRk ZW4gdXNlciBmaWxlICovCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSNpZmRlZiBJS1NECi1jaGFy ICogYW5vbmZpbGUgPSBOVUxMOyAgICAgICAgICAgICAgICAgLyogQW5vbnltb3VzIGxvZ2luIGlu aXQgZmlsZSAqLwotY2hhciAqIGFub25yb290ID0gTlVMTDsgICAgICAgICAgICAgICAgIC8qIEFu b255bW91cyBmaWxlLXN5c3RlbSByb290ICovCi1pbnQgaWtzX3RpbW8gID0gMzAwOyAgICAgICAg ICAgICAgICAgICAgLyogNSBtaW51dGVzIGlkbGUgdGltbyAqLwotaW50IGlrc19yZXRyeSA9IDM7 ICAgICAgICAgICAgICAgICAgICAgIC8qIDMgYXR0ZW1wdHMgYXQgbG9naW4gKi8KLSNlbmRpZiAv KiBJS1NEICovCi0KLSNpZmRlZiBDS1NZU0xPRwotZXh0ZXJuIFZPSUQgenN5c2xvZygpOwotZXh0 ZXJuIGludCBja3hsb2dnaW5nLCBja3hzeXNsb2c7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLQot Q0tfT0ZGX1QgZnNpemUgPSAoQ0tfT0ZGX1QpMCwJCS8qIFNpemUgb2YgY3VycmVudCBmaWxlICov Ci0gc2VuZHN0YXJ0ID0gKENLX09GRl9UKTAsCQkvKiBTRU5EIHN0YXJ0IHBvc2l0aW9uICovCi0g Y2FsaWJyYXRlID0gKENLX09GRl9UKTA7CQkvKiBOb256ZXJvIGlmIGNhbGlicmF0aW9uIHJ1biAq LwotCi1pbnQgbnp4b3B0cyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogT3B0aW9ucyBm b3Igbnp4cGFuZCgpICovCi1pbnQgbmZpbHMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAg LyogTnVtYmVyIG9mIGZpbGVzIGluIGZpbGUgZ3JvdXAgKi8KLWludCB3aWxkZW5hID0gMTsJCQkv KiBXaWxkY2FyZCBleHBhbnNpb24gZW5hYmxlZCAqLwotI2lmZGVmIFVOSVgKLWludCB3aWxkeHBh bmQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBXaG8gZXhwYW5kcyB3aWxkY2FyZHMsIDA9 S2VybWl0Li4gKi8KLSNlbHNlIC8qIFVOSVggKi8KLSNpZmRlZiBTVFJBVFVTCi1pbnQgd2lsZHhw YW5kID0gMTsJCQkvKiAxPVNoZWxsLiAqLwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSNlbmRpZiAv KiBVTklYICovCi0jaWZkZWYgVU5JWE9ST1NLCi1pbnQgbWF0Y2hkb3QgPSAwOyAgICAgICAgICAg ICAgICAgICAgICAgLyogV2hldGhlciB0byBtYXRjaCBkb3QgZmlsZXMgKi8KLSNlbHNlCi1pbnQg bWF0Y2hkb3QgPSAxOwotI2VuZGlmIC8qIFVOSVhPUk9TSyAqLwotaW50IG1hdGNoZmlmbyA9IDA7 CQkJLyogV2hldGhlciB0byBtYXRjaCBGSUZPICJmaWxlcyIgKi8KLWludCBjbGZpbHMgPSAwOyAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBjb21tYW5kLWxpbmUgZmlsZXMgKi8K LWludCBzdGF5ZmxnID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciAic3Rh eSIsIGkuZS4gIi1TIiAqLwotaW50IHhmaW5pc2ggPSAwOyAgICAgICAgICAgICAgICAgICAgICAg IC8qIEZsYWcgZm9yIEZJTklTSCA9IEVYSVQgKi8KLWxvbmcgenR1c2VjID0gLTFMOyAgICAgICAg ICAgICAgICAgICAgICAvKiBVc2VkIHdpdGggenRpbWUoKSAqLwotbG9uZyB6dG1zZWMgPSAtMUw7 ICAgICAgICAgICAgICAgICAgICAgIC8qIERpdHRvICovCi0KLS8qIENvbW11bmljYXRpb24gZGV2 aWNlIC8gY29ubmVjdGlvbiB2YXJpYWJsZXMgKi8KLQotY2hhciB0dG5hbWVbVFROQU1MRU4rMV07 ICAgICAgICAgICAgICAgIC8qIE5hbWUgb2YgY29tbXVuaWNhdGlvbiBkZXZpY2UgKi8KLQotI2lm ZGVmIE1BQwotaW50IGNvbm5lY3RlZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIFRydWUg aWYgY29ubmVjdGVkICovCi1pbnQgc3RhcnRjb25uZWN0ZWQ7ICAgICAgICAgICAgICAgICAgICAg LyogaW5pdGlhbCBzdGF0ZSBvZiBjb25uZWN0ZWQgKi8KLSNlbmRpZiAvKiBNQUMgKi8KLQotbG9u ZyBzcGVlZCA9IC0xTDsgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbW11bmljYXRpb24gZGV2 aWNlIHNwZWVkICovCi1pbnQgd2FzY2xvc2VkID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyog Q29ubmVjdGlvbiB3YXMganVzdCBjbG9zZWQgKi8KLWludCB3aHljbG9zZWQgPSBXQ19SRU1POyAg ICAgICAgICAgICAgICAvKiB3aHkgaXQgd2FzIGNsb3NlZCAqLwotaW50IHFueHBvcnRsb2NrID0g MDsgICAgICAgICAgICAgICAgICAgIC8qIFFOWCBwb3J0IGxvY2tpbmcgb24vb2ZmICovCi0KLSNp Zm5kZWYgQ0xTT05ESVNDCi0jZGVmaW5lIENMU09ORElTQyAwCi0jZW5kaWYgLyogQ0xTT05ESVND ICovCi0KLWludCBjeGZsb3dbQ1hUX01BWCsxXTsgICAgICAgICAgICAgICAgICAvKiBTZWUgaW5p dGZsb3coKSAqLwotCi0jaWZuZGVmIE5PU0hPVwotY2hhciAqIGZsb25hbWVbXSA9IHsgICAgICAg ICAgICAgICAgICAgIC8qIEZsb3cgY29udHJvbCBuYW1lcyAqLwotICAibm9uZSIsICJ4b24veG9m ZiIsICJydHMvY3RzIiwgImR0ci9jZCIsICJldHgvYWNrIiwgInN0cmluZyIsCi0gICJ4eHgxIiwg Inh4eDIiLCAiZHRyL2N0cyIsICJrZWVwIiwgImF1dG8iCi19OwotaW50IG5mbG9uYW1lID0gKHNp emVvZihmbG9uYW1lKSAvIHNpemVvZihjaGFyICopKTsKLQotY2hhciAqIGN4bmFtZVtdID0geyAg ICAgICAgICAgICAgICAgICAgIC8qIENvbm5lY3Rpb24gdHlwZSBuYW1lcyAqLwotICAicmVtb3Rl IiwgImRpcmVjdC1zZXJpYWwiLCAibW9kZW0iLCAidGNwL2lwIiwgInguMjUiLCAiZGVjbmV0IiwK LSAgImxhdCIsICJuZXRiaW9zIiwgIm5hbWVkLXBpcGUiLCAic3NoIiwgInBpcGUiCi19OwotaW50 IG5jeG5hbWUgPSAoc2l6ZW9mKGN4bmFtZSkgLyBzaXplb2YoY2hhciAqKSk7Ci0jZW5kaWYgLyog Tk9TSE9XICovCi0KLWludCBwYXJpdHkgPSBERUZQQVIsICAgICAgICAgICAgICAgICAgICAvKiBQ YXJpdHkgc3BlY2lmaWVkLCAwLCdlJywnbycsZXRjICovCi0gICAgaHdwYXJpdHkgPSAwLCAgICAg ICAgICAgICAgICAgICAgICAgLyogSGFyZHdhcmUgcGFyaXR5IGZvciBzZXJpYWwgcG9ydCAqLwot ICAgIHN0b3BiaXRzID0gLTEsICAgICAgICAgICAgICAgICAgICAgIC8qIFN0b3AgYml0cyBmb3Ig c2VyaWFsIHBvcnQgKi8KLSAgICBjbHNvbmRpc2MgPSBDTFNPTkRJU0MsICAgICAgICAgICAgICAv KiBTZXJpYWwgcG9ydCBjbG9zZSBvbiBkaXNjb25uZWN0ICovCi0gICAgYXV0b3BhciA9IDAsICAg ICAgICAgICAgICAgICAgICAgICAgLyogQXV0b21hdGljIHBhcml0eSBjaGFuZ2UgZmxhZyAqLwot ICAgIHNvc2kgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNoaWZ0LUluL091dCBm bGFnICovCi0gICAgZmxvdyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxvdyBj b250cm9sIChzZWUgaW5pdGZsb3coKSkgKi8KLSAgICBhdXRvZmxvdyA9IDEsICAgICAgICAgICAg ICAgICAgICAgICAvKiBBdXRvbWF0aWMgZmxvdyBjb250cm9sICovCi0gICAgdHVybiA9IDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogTGluZSB0dXJuYXJvdW5kIGhhbmRzaGFrZSBmbGFn ICovCi0gICAgdHVybmNoID0gWE9OLCAgICAgICAgICAgICAgICAgICAgICAgLyogTGluZSB0dXJu YXJvdW5kIGNoYXJhY3RlciAqLwotICAgIGR1cGxleCA9IDAsICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIER1cGxleCwgZnVsbCBieSBkZWZhdWx0ICovCi0gICAgZXNjYXBlID0gREZFU0MsICAg ICAgICAgICAgICAgICAgICAgLyogRXNjYXBlIGNoYXJhY3RlciBmb3IgY29ubmVjdCAqLwotICAg IGNrZGVsYXkgPSBEREVMQVksICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWwgZGVsYXkgYmVm b3JlIHNlbmRpbmcgKi8KLSAgICB0bmxtID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBUZXJtaW5hbCBuZXdsaW5lIG1vZGUgKi8KLQotLyogTmV0d29ya3MgZm9yIFNFVCBIT1NUICov Ci0KLSNpZmRlZiBCSUdCVUZPSwotI2RlZmluZSBNWUhPU1RMIDEwMjQKLSNlbHNlCi0jZGVmaW5l IE1ZSE9TVEwgMTAwCi0jZW5kaWYgLyogQklHQlVGT0sgKi8KLQotY2hhciBteWhvc3RbTVlIT1NU TF07ICAgICAgICAgICAgICAgICAgIC8qIExvY2FsIGhvc3QgbmFtZSAqLwotaW50IG5ldHdvcmsg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5ldHdvcmsgdnMgc2VyaWFsIGNvbm5lY3Rp b24gKi8KLWludCBpbnNlcnZlciA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBSdW5uaW5n IGFzIGFuIEludGVybmV0IHNlcnZlciAqLwotaW50IGlzZ3Vlc3QgPSAwOyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFVzZXIgaXMgYW5vbnltb3VzICovCi1jaGFyICogY2xpZW50aG9zdCA9IE5V TEw7ICAgICAgICAgICAgICAgLyogUGVlciBob3N0IG5hbWUgb3IgYWRkcmVzcyAqLwotaW50IHRj cF9pbmNvbWluZyA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIEluY29taW5nIFRDUCBjb25uZWN0 aW9uPyAqLwotCi0jaWZkZWYgTkVUQ09OTgotI2lmZGVmIFRDUFNPQ0tFVAotaW50IG5ldHR5cGUg PSBORVRfVENQQjsgICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgbmV0d29yayB0eXBlICovCi0j ZWxzZQotI2lmZGVmIFNVTlgyNQotaW50IG5ldHR5cGUgPSBORVRfU1gyNTsKLSNlbHNlCi0jaWZk ZWYgSUJNWDI1Ci1pbnQgbmV0dHlwZSA9IE5FVF9JWDI1OwotI2Vsc2UKLSNpZmRlZiBIUFgyNQot aW50IG5ldHR5cGUgPSBORVRfSFgyNTsKLSNlbHNlCi0jaWZkZWYgU1RSQVRVU1gyNQotaW50IG5l dHR5cGUgPSBORVRfVlgyNTsKLSNlbHNlCi0jaWZkZWYgREVDTkVUCi1pbnQgbmV0dHlwZSA9IE5F VF9ERUM7Ci0jZWxzZQotI2lmZGVmIFNVUEVSTEFUCi1pbnQgbmV0dHlwZSA9IE5FVF9TTEFUOwot I2Vsc2UKLWludCBuZXR0eXBlID0gTkVUX05PTkU7Ci0jZW5kaWYgLyogU1VQRVJMQVQgKi8KLSNl bmRpZiAvKiBERUNORVQgKi8KLSNlbmRpZiAvKiBTVFJBVFVTWDI1ICovCi0jZW5kaWYgLyogSFBY MjUgKi8KLSNlbmRpZiAvKiBJQk1YMjUgKi8KLSNlbmRpZiAvKiBTVU5YMjUgKi8KLSNlbmRpZiAv KiBUQ1BTT0NLRVQgKi8KLSNlbHNlICAvKiBORVRDT05OICovCi1pbnQgbmV0dHlwZSA9IE5FVF9O T05FOwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQotI2lmZGVmIEFOWVgyNQotaW50IHJldmNhbGwg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFguMjUgcmV2ZXJzZSBjYWxsIG5vdCBzZWxl Y3RlZCAqLwotaW50IGNsb3NnciAgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFguMjUg Y2xvc2VkIHVzZXIgZ3JvdXAgICovCi1pbnQgY3VkYXRhID0gMDsgICAgICAgICAgICAgICAgICAg ICAgICAgLyogWC4yNSBjYWxsIHVzZXIgZGF0YSBub3Qgc3BlY2lmaWVkICovCi1jaGFyIHVkYXRh W01BWENVREFUQV07ICAgICAgICAgICAgICAgICAgLyogWC4yNSBjYWxsIHVzZXIgZGF0YSAqLwot Ci0jaWZkZWYgSUJNWDI1Ci0vKgotICBJIHdhcyB1bmFibGUgdG8gZmluZCBhbnkgcHJlLWRlZmlu ZWQgTUFYIHZhbHVlcyBmb3IgeDI1IGFkZHJlc3NlcyAtIHRoZQotICBhZGRyZXNzZXMgdGhhdCBJ J3ZlIHNlZW4gaGF2ZSBiZWVuIGFyb3VuZCAxMC0xMiBjaGFyYWN0ZXJzIDMyIGlzIHByb2JhYmx5 Ci0gIGVub3VnaCwgNjQgaXMgaG9wZWZ1bGx5IHNhZmUgZm9yIGV2ZXJ5b25lLgotKi8KLSAgICB4 MjVhZGRyX3QgbG9jYWxfbnVhID0geydcMCd9OyAgICAgICAvKiBsb2NhbCB4LjI1IGFkZHJlc3Mg Ki8KLSAgICB4MjVhZGRyX3QgcmVtb3RlX251YSA9IHsnXDAnfTsgICAgICAvKiByZW1vdGUgeC4y NSBhZGRyZXNzICovCi0gICAgY2hhciB4MjVuYW1lWzMyXSA9IHsnXDAnfTsgICAgICAgICAgLyog eDI1IGRldmljZSBuYW1lLCBzeDI1YTAgb3Igc3gyNWExICovCi0gICAgY2hhciB4MjVkZXZbNjRd ID0gICIvZGV2L3gyNXBrdCI7ICAgLyogeDI1IGRldmljZSBpbiAvZGV2ICovCi0gICAgaW50IHgy NXBvcnQgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogcG9ydCB1c2VkIGZvciBYLjI1IC0gQUlY IG9ubHkgKi8KLSNlbmRpZiAvKiBJQk1YMjUgKi8KLQotI2lmbmRlZiBJQk1YMjUKLS8qCi0gIFRo aXMgY29uZGl0aW9uIGlzIHVucmVsYXRlZCB0byB0aGUgYWJvdmUgSUJNWDI1IGNvbmRpdGlvbi4K LSAgSUJNIFguMjUgZG9lc24ndCBoYXZlIFBBRCBzdXBwb3J0LgotKi8KLSAgICBDSEFSIHBhZHBh cm1zW01BWFBBRFBBUk1TKzFdOyAvKiBYLjMgcGFyYW1ldGVycyAqLwotI2VuZGlmIC8qIElCTVgy NSAqLwotI2VuZGlmIC8qIEFOWVgyNSAqLwotCi0vKiBPdGhlciBpdGVtcyAqLwotCi1pbnQgaXNp bnRlcnJ1cHRlZCA9IDA7ICAgICAgICAgICAgICAgICAgLyogVXNlZCBpbiBleGNlcHRpb24gaGFu ZGxpbmcgKi8KLWludCB3aGF0ID0gV19JTklUOyAgICAgICAgICAgICAgICAgICAgICAvKiBXaGF0 IEkgYW0gZG9pbmcgKi8KLWludCBsYXN0eGZlciA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAv KiBMYXN0IHRyYW5zZmVyIChzZW5kIG9yIHJlY2VpdmUpICovCi0KLWV4dGVybiBpbnQgbWRtdHlw OyAgICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSAoL25ldHdvcmspIHR5cGUgKi8KLQotI2lm ZGVmIE5UCi1leHRlcm4gaW50IFN0YXJ0ZWRGcm9tRGlhbGVyOwotI2lmZGVmIE5UU0lHCi1leHRl cm4gaW50IFRsc0luZGV4OwotI2VuZGlmIC8qIE5UU0lHICovCi0jaWZkZWYgTlRBU00KLXVuc2ln bmVkIGxvbmcgRVNQVG9SZXN0b3JlOyAgICAgICAgICAgICAvKiBEaXR0byAqLwotI2VuZGlmIC8q IE5UQVNNICovCi0jZW5kaWYgLyogTlQgKi8KLQotI2lmZGVmIE9TMlBNCi1pbnQgb3MycG0gPSAw OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT1MvMiBQcmVzZW50YXRpb24gTWFuYWdlciBm bGFnICovCi0jZW5kaWYgLyogT1MyUE0gKi8KLQotLyogVGVybWluYWwgc2NyZWVuIHNpemUsIGlm IGtub3duLCAtMSBtZWFucyB1bmtub3duLiAqLwotCi0jaWZkZWYgT1MyCi0jaW5jbHVkZSAiY2tv Y29uLmgiCi0jaWZkZWYgS1VJCi1pbnQgdHRfcm93c1tWTlVNXSA9IHsyNCwyNCwyNSwxfTsgICAg ICAgLyogUm93cyAoaGVpZ2h0KSAqLwotaW50IHR0X2NvbHNbVk5VTV0gPSB7ODAsODAsODAsODB9 OyAgICAgIC8qIENvbHVtbnMgKHdpZHRoKSAqLwotaW50IGNtZF9yb3dzID0gMjQsIGNtZF9jb2xz ID0gODA7ICAgICAgIC8qIENvbW1hbmQvY29uc29sZSBzY3JlZW4gZGltZW5zaW9ucyAqLwotI2Vs c2UgLyogS1VJICovCi1pbnQgdHRfcm93c1tWTlVNXSA9IHstMSwyNCwyNSwxfTsgICAgICAgLyog Um93cyAoaGVpZ2h0KSAqLwotaW50IHR0X2NvbHNbVk5VTV0gPSB7LTEsODAsODAsODB9OyAgICAg IC8qIENvbHVtbnMgKHdpZHRoKSAqLwotaW50IGNtZF9yb3dzID0gLTEsIGNtZF9jb2xzID0gLTE7 ICAgICAgIC8qIENvbW1hbmQvY29uc29sZSBzY3JlZW4gZGltZW5zaW9ucyAqLwotI2VuZGlmIC8q IEtVSSAqLwotaW50IGs5NXN0ZGlvID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0ZGlv IHRocmVhZHMgKi8KLWludCB0dF9iZWxsID0gWFlCX0FVRCB8IFhZQl9TWVM7ICAgICAgICAvKiBC RUxMIEFVRElCTEUgKHN5c3RlbSBzb3VuZHMpICovCi0jZWxzZSAvKiBPUzIgKi8KLWludCB0dF9y b3dzID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBSb3dzIChoZWlnaHQpICovCi1pbnQg dHRfY29scyA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgLyogQ29sdW1ucyAod2lkdGgpICov Ci1pbnQgY21kX3Jvd3MgPSAyNCwgY21kX2NvbHMgPSA4MDsgICAgICAgLyogQ29tbWFuZC9jb25z b2xlIHNjcmVlbiBkaW1lbnNpb25zICovCi1pbnQgdHRfYmVsbCA9IFhZQl9BVUQ7ICAgICAgICAg ICAgICAgICAgLyogQkVMTCBPTiAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi1pbnQgdHRfcHJpbnQg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogVHJhbnNwYXJlbnQgcHJpbnQgZGlzYWJsZWQg Ki8KLWludCB0dF9lc2NhcGUgPSAxOyAgICAgICAgICAgICAgICAgICAgICAvKiBFc2NhcGluZyBi YWNrIGlzIGVuYWJsZWQgKi8KLWludCB0dF9zY3JvbGwgPSAxOyAgICAgICAgICAgICAgICAgICAg ICAvKiBTY3JvbGxpbmcgb3BlcmF0aW9ucyBhcmUgZW5hYmxlZCAqLwotCi1pbnQgdG5fZXhpdCA9 IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRXhpdCBvbiBkaXNjb25uZWN0ICovCi0KLWlu dCBleGl0b25jbG9zZSA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBFeGl0IG9uIGNsb3NlICov Ci1pbnQgZXhpdGhhbmd1cCA9IDE7ICAgICAgICAgICAgICAgICAgICAgLyogSGFuZ3VwIG9uIGV4 aXQgKi8KLWludCBoYXZlbGluZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgTElO RSBvciBTRVQgSE9TVCBpbiBlZmZlY3QgKi8KLWludCB0bGV2ZWwgPSAtMTsgICAgICAgICAgICAg ICAgICAgICAgICAvKiBUYWtlLWZpbGUgY29tbWFuZCBsZXZlbCAqLwotaW50IGhpbnRzID0gMTsg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdoZXRoZXIgdG8gZ2l2ZSBoaW50cyAqLwotCi0j aWZkZWYgTk9MT0NBTAotaW50IHJlbW9ubHkgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgIC8q IFJlbW90ZS1tb2RlLW9ubHkgYWR2aXNvcnkgKC1SKSAqLwotaW50IG5vbG9jYWwgPSAxOyAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFJlbW90ZS1vbmx5IHN0cmljdGx5IGVuZm9yY2VkICovCi0j ZWxzZQotaW50IHJlbW9ubHkgPSAwOwotaW50IG5vbG9jYWwgPSAwOwotaW50IGN4X3N0YXR1cyA9 IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIENPTk5FQ1QgcmV0dXJuIHN0YXR1cyAqLwotI2Vu ZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmbmRlZiBOT1NQTAotZXh0ZXJuIGludCBjbWRsdmw7ICAg ICAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgbGV2ZWwgKi8KLWV4dGVybiBpbnQgbWFjbHZs OyAgICAgICAgICAgICAgICAgICAgICAvKiBNYWNybyBpbnZvY2F0aW9uIGxldmVsICovCi0jZW5k aWYgLyogTk9TUEwgKi8KLQotaW50IHByb3RvY29sICA9IFBST1RPX0s7ICAgICAgICAgICAgICAg IC8qIEZpbGUgdHJhbnNmZXIgcHJvdG9jb2wgPSBLZXJtaXQgKi8KLQotI2lmZGVmIE5FV0RFRkFV TFRTCi1pbnQgcHJlZml4aW5nID0gUFhfQ0FVOwotI2Vsc2UKLWludCBwcmVmaXhpbmcgPSBQWF9B TEw7Ci0jZW5kaWYgLyogTkVXREVGQVVMVFMgKi8KLQotZXh0ZXJuIHNob3J0IGN0bHBbXTsgICAg ICAgICAgICAgICAgICAgIC8qIENvbnRyb2wtcHJlZml4IHRhYmxlICovCi0KLWludCBjYXJyaWVy ID0gQ0FSX0FVVDsgICAgICAgICAgICAgICAgICAvKiBQYXkgYXR0ZW50aW9uIHRvIGNhcnJpZXIg c2lnbmFsICovCi1pbnQgY2R0aW1vID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2Fy cmllciB3YWl0IHRpbWVvdXQgKi8KLWludCB4aXRzdGEgPSBHT09EX0VYSVQ7ICAgICAgICAgICAg ICAgICAvKiBQcm9ncmFtIGV4aXQgc3RhdHVzICovCi0KLSNpZmRlZiBWTVMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IGZpbGVuYW1lIGNvbGxpc2lvbiBhY3Rpb24gKi8K LWludCBmbmNhY3QgPSBYWUZYX1g7ICAgICAgICAgICAgICAgICAgICAvKiBSRVBMQUNFIGZvciBW TVMgKi8KLSNlbHNlCi1pbnQgZm5jYWN0ID0gWFlGWF9COyAgICAgICAgICAgICAgICAgICAgLyog QkFDS1VQIGZvciBldmVyeWJvZHkgZWxzZSAqLwotI2VuZGlmIC8qIFZNUyAqLwotCi1pbnQgZm5j c2F2ID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIHNhdmluZyAmIHJlc3Rvcmlu ZyB0aGUgYWJvdmUgKi8KLWludCBiZ3NldCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBCQUNLR1JPVU5EIG1vZGUgc2V0IGV4cGxpY2l0bHkgKi8KLQotaW50IGNtZGludCA9IDE7ICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEludGVycnVwdHMgYXJlIGFsbG93ZWQgKi8KLSNpZmRl ZiBVTklYCi1pbnQgeHN1c3BlbmQgPSBERlNVU1A7CQkJLyogV2hldGhlciBTVVNQRU5EIGNvbW1h bmQsIGV0YywgKi8KLSNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBp cyB0byBiZSBhbGxvd2VkLiAqLwotaW50IHhzdXNwZW5kID0gMDsKLSNlbmRpZiAvKiBVTklYICov Ci0KLS8qIFN0YXRpc3RpY3MgdmFyaWFibGVzICovCi0KLUNLX09GRl9UCi0gICAgZmxjaSwgICAg ICAgICAgICAgICAgICAgICAgIC8qIENoYXJhY3RlcnMgZnJvbSBsaW5lLCBjdXJyZW50IGZpbGUg Ki8KLSAgICBmbGNvLCAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcnMgdG8gbGluZSwgY3Vy cmVudCBmaWxlICAqLwotICAgIHRsY2ksICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFycyBm cm9tIGxpbmUgaW4gdHJhbnNhY3Rpb24gKi8KLSAgICB0bGNvLCAgICAgICAgICAgICAgICAgICAg ICAgLyogQ2hhcnMgdG8gbGluZSBpbiB0cmFuc2FjdGlvbiAqLwotICAgIGZmYywgICAgICAgICAg ICAgICAgICAgICAgICAvKiBDaGFycyB0by9mcm9tIGN1cnJlbnQgZmlsZSAqLwotICAgIHRmYzsg ICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFycyB0by9mcm9tIGZpbGVzIGluIHRyYW5zYWN0 aW9uICovCi0KLWxvbmcgZmlsY250LCAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIGZp bGVzIGluIHRyYW5zYWN0aW9uICovCi0gICAgZmlscmVqLCAgICAgICAgICAgICAgICAgICAgIC8q IE51bWJlciBvZiBmaWxlcyByZWplY3RlZCBpbiB0cmFuc2FjdGlvbiAqLwotICAgIGNwcyA9IDBM LCAgICAgICAgICAgICAgICAgICAvKiBDaGFycy9zZWMgbGFzdCB0cmFuc2ZlciAqLwotICAgIHBl YWtjcHMgPSAwTCwgICAgICAgICAgICAgICAvKiBQZWFrIGNoYXJzL3NlYyBsYXN0IHRyYW5zZmVy ICovCi0gICAgY2N1LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnRyb2wgY2hhcnMgdW5w cmVmaXhlZCBpbiB0cmFuc2FjdGlvbiAqLwotICAgIGNjcCwgICAgICAgICAgICAgICAgICAgICAg ICAvKiBDb250cm9sIGNoYXJzIHByZWZpeGVkIGluIHRyYW5zYWN0aW9uICovCi0gICAgcnB0bjsg ICAgICAgICAgICAgICAgICAgICAgIC8qIFJlcGVhdGVkIGNoYXJhY3RlcnMgY29tcHJlc3NlZCAq LwotCi1pbnQgdHNlY3MgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2Vjb25kcyBm b3IgdHJhbnNhY3Rpb24gKi8KLWludCBmc2VjcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBQZXItZmlsZSB0aW1lciAqLwotCi0jaWZkZWYgR0ZUSU1FUgotQ0tGTE9BVAotICBmcGZz ZWNzID0gMC4wLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsb2F0aW5nIHBvaW50IHBlci1m aWxlIHRpbWVyICovCi0gIGZwdHNlY3MgPSAwLjA7ICAgICAgICAgICAgICAgICAgICAgICAgLyog YW5kIHBlci10cmFuc2FjdGlvbiB0aW1lciAqLwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLQotLyog RmxhZ3MgKi8KLQotaW50IGRlYmxvZyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERl YnVnIGxvZyBpcyBvcGVuICovCi0gICAgZGVib2sgPSAxLCAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogRGVidWcgbG9nIGlzIG5vdCBkaXNhYmxlZCAqLwotICAgIGRlYnhsZW4gPSA1NCwgICAg ICAgICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgbGVuZ3RoIGZvciBkZWJ1ZyBzdHJpbmdzICov Ci0gICAgZGVic2VzID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgREVC VUcgU0VTU0lPTiAqLwotICAgIGRlYnRpbSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8q IEluY2x1ZGUgdGltZXN0YW1wIGluIGRlYnVnIGxvZyAqLwotICAgIGRlYm1zZyA9IDAsICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIERlYnVnIG1lc3NhZ2VzIG9uL29mZiAqLwotICAgIHBrdGxv ZyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIHBhY2tldCBsb2dnaW5n ICovCi0gICAgc2VzbG9nID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2Vzc2lvbiBs b2dnaW5nICovCi0gICAgZGlhbG9nID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRElB TCBsb2dnaW5nICovCi0gICAgdHJhbG9nID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyog VHJhbnNhY3Rpb24gbG9nZ2luZyAqLwotICAgIHRsb2dmbXQgPSAxLCAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFRyYW5zYWN0aW9uIGxvZyBmb3JtYXQgKHZlcmJvc2UpICovCi0gICAgdGxvZ3Nl cCA9IChpbnQpJywnLCAgICAgICAgICAgICAgICAgLyogVHJhbnNhY3Rpb24gbG9nIGZpZWxkIHNl cGFyYXRvciAqLwotICAgIGRpc3BsYSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZp bGUgdHJhbnNmZXIgZGlzcGxheSBvbi9vZmYgKi8KLSAgICBzdGRvdWYgPSAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBGbGFnIGZvciBvdXRwdXQgdG8gc3Rkb3V0ICovCi0gICAgc3RkaW5m ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgaW5wdXQgZnJvbSBzdGRp biAqLwotICAgIHhmbGcgICA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9y IFggaW5zdGVhZCBvZiBGIHBhY2tldCAqLwotICAgIGhjZmxnICA9IDAsICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIERvaW5nIEhvc3QgY29tbWFuZCAqLwotICAgIGRlc3QgICA9IERFU1RfRCwg ICAgICAgICAgICAgICAgICAgIC8qIERlc3RpbmF0aW9uIGZvciBwYWNrZXQgZGF0YSAqLwotICAg IHpjaGtvZCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHpjaGtvKCkgc2hvdWxkIHdv cmsgZm9yIGRpcnMgdG9vPyAqLwotICAgIHpjaGtpZCA9IDAsICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHpjaGtpKCkgc2hvdWxkIHdvcmsgZm9yIGRpcnMgdG9vPyAqLwotCi0vKiBJZiB5b3Ug Y2hhbmdlIHRoaXMsIGFsc28gc2VlIHN0cnVjdCBwdGFiIGFib3ZlLi4uICovCi0KLSNpZmRlZiBP UzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBmaWxlIG5hbWUgY29u dmVyc2lvbiAqLwotICAgIGZuY252ICA9IFhZRk5fTCwgICAgICAgICAgICAgICAgICAgIC8qIERl ZmF1bHQgaXMgTGl0ZXJhbCBpbiBPUy8yLCAqLwotICAgIGZfc2F2ZSA9IFhZRk5fTCwgICAgICAg ICAgICAgICAgICAgIC8qIChzYXZlZCBjb3B5IG9mIHNhbWUpICovCi0jZWxzZQotICAgIGZuY252 ICA9IFhZRk5fQywgICAgICAgICAgICAgICAgICAgIC8qIGVsc2V3aGVyZSBDb252ZXJ0IHRoZW0g Ki8KLSAgICBmX3NhdmUgPSBYWUZOX0MsICAgICAgICAgICAgICAgICAgICAvKiAoZGl0dG8pICov Ci0jZW5kaWYgLyogT1MyICovCi0KLSAgICBmbnNwYXRoID0gUEFUSF9PRkYsICAgICAgICAgICAg ICAgICAvKiBTZW5kIGZpbGUgcGF0aCAqLwotICAgIGZucnBhdGggPSBQQVRIX0FVVE8sICAgICAg ICAgICAgICAgIC8qIFJlY2VpdmUgZmlsZSBwYXRoICovCi0gICAgZmFja3BhdGggPSAxLCAgICAg ICAgICAgICAgICAgICAgICAgLyogU2VuZCBiYWNrIHBhdGggaW4gQUNLIHRvIEYgKi8KLSAgICBi aW5hcnkgPSBYWUZUX0IsICAgICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IGZpbGUgdHJhbnNm ZXIgbW9kZSAqLwotICAgIGJfc2F2ZSA9IFhZRlRfQiwgICAgICAgICAgICAgICAgICAgIC8qIFNh dmVkIGZpbGUgbW9kZSAqLwotICAgIGVvZm1ldGhvZCA9IDAsICAgICAgICAgICAgICAgICAgICAg IC8qIEVPRiBkZXRlY3Rpb24gbWV0aG9kIChsZW5ndGgpICovCi0KLSNpZmRlZiBPUzIKLSAgICBj dXJzb3Jfc2F2ZSA9IC0xLCAgICAgICAgICAgICAgICAgICAvKiBDdXJzb3Igc3RhdGUgKi8KLSNl bmRpZiAvKiBPUzIgKi8KLQotICAgIHhmZXJtb2RlID0gWE1PREVfQSwgICAgICAgICAgICAgICAg IC8qIFRyYW5zZmVyIG1vZGUsIG1hbnVhbCBvciBhdXRvICovCi0gICAgeGZpbGV0eXBlID0gLTEs ICAgICAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXIgb25seSB0ZXh0IChvciBiaW5hcnkpICov Ci0gICAgcmVjdXJzaXZlID0gMCwgICAgICAgICAgICAgICAgICAgICAgLyogUmVjdXJzaXZlIGRp cmVjdG9yeSB0cmF2ZXJzYWwgKi8KLSAgICBub2xpbmtzICAgPSAyLCAgICAgICAgICAgICAgICAg ICAgICAvKiBEb24ndCBmb2xsb3cgc3ltYm9saWMgbGlua3MgKi8KLSAgICBza2lwYnVwICAgPSAw LCAgICAgICAgICAgICAgICAgICAgICAvKiBTa2lwIGJhY2t1cCBmaWxlcyB3aGVuIHNlbmRpbmcg Ki8KLSAgICBzZW5kbW9kZSA9IFNNX1NFTkQsICAgICAgICAgICAgICAgICAvKiBXaGljaCB0eXBl IG9mIFNFTkQgb3BlcmF0aW9uICovCi0gICAgc2xvc3RhcnQgID0gMSwgICAgICAgICAgICAgICAg ICAgICAgLyogU2xvdyBzdGFydCAoZ3JvdyBwYWNrZXQgbGVuZ3RocykgKi8KLSAgICBjbWFzayAg PSAwMzc3LCAgICAgICAgICAgICAgICAgICAgICAvKiBDT05ORUNUICh0ZXJtaW5hbCkgYnl0ZSBt YXNrICovCi0gICAgZm1hc2sgID0gMDM3NywgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBi eXRlIG1hc2sgKi8KLSAgICBja3dhcm4gPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBG bGFnIGZvciBmaWxlIHdhcm5pbmcgKi8KLSAgICBxdWlldCAgPSAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBCZSBxdWlldCBkdXJpbmcgZmlsZSB0cmFuc2ZlciAqLwotICAgIGxvY2FsICA9 IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEgPSBsb2NhbCBtb2RlLCAwID0gcmVtb3Rl IG1vZGUgKi8KLSAgICBjeHR5cGUgPSBDWFRfUkVNT1RFLCAgICAgICAgICAgICAgICAvKiBDb25u ZWN0aW9uIHR5cGUgKi8KLSAgICBzZXJ2ZXIgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAv KiBGbGFnIGZvciBJIEFtIFNlcnZlciAqLwotICAgIHF1ZXJ5ID0gMCwgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEZsYWcgZm9yIFF1ZXJ5IGFjdGl2ZSAqLwotICAgIGp1c3RvbmUgPSAwLCAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFNlcnZlciBzaG91bGQgZG8gSnVzdCBPbmUgY29tbWFu ZCAqLwotICAgIHVyc2VydmVyID0gMCwgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9y IFlvdSBBcmUgU2VydmVyICovCi0gICAgYnllX2FjdGl2ZSA9IDAsICAgICAgICAgICAgICAgICAg ICAgLyogRmxhZyBmb3IgQllFIGNvbW1hbmQgYWN0aXZlICovCi0gICAgZGlyYWN0aXZlID0gMCwg ICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgRElSRUNUT1JZIGNvbW1hbmQgYWN0aXZl ICovCi0gICAgY2RhY3RpdmUgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3Ig Q0QgY29tbWFuZCBhY3RpdmUgKi8KLSAgICBjZmxnICAgPSAwLCAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBDb25uZWN0IGJlZm9yZSB0cmFuc2FjdGlvbiAqLwotICAgIGNuZmxnICA9IDAsICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIENvbm5lY3QgYWZ0ZXIgdHJhbnNhY3Rpb24gKi8KLSAg ICBjeHNlZW4gPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBjYW5jZWxs aW5nIGEgZmlsZSAqLwotICAgIGN6c2VlbiA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8q IEZsYWcgZm9yIGNhbmNlbGxpbmcgZmlsZSBncm91cCAqLwotICAgIGZhdGFsaW8gPSAwLCAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIGZhdGFsIGkvbyBlcnJvciAqLwotICAgIGRp c2NhcmQgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIGZpbGUgdG8gYmUg ZGlzY2FyZGVkICovCi0gICAga2VlcCA9IFNFVF9BVVRPLCAgICAgICAgICAgICAgICAgICAgLyog S2VlcCBpbmNvbXBsZXRlIGZpbGVzID0gQVVUTyAqLwotICAgIHVua2NzID0gMSwgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEtlZXAgZmlsZSB3L3Vua25vd24gY2hhcmFjdGVyIHNldCAqLwot I2lmZGVmIFZNUwotICAgIGZpbGVwZWVrID0gMCwgICAgICAgICAgICAgICAgICAgICAgIC8qIElu c3BlY3Rpb24gb2YgZmlsZXMgKi8KLSNlbHNlCi0jaWZkZWYgZGF0Z2VuZXJhbAotICAgIGZpbGVw ZWVrID0gMCwKLSNlbHNlCi0gICAgZmlsZXBlZWsgPSAxLAotI2VuZGlmIC8qIGRhdGFnZW5lcmFs ICovCi0jZW5kaWYgLyogVk1TICovCi0gICAgbmFrc3RhdGUgPSAwLCAgICAgICAgICAgICAgICAg ICAgICAgLyogSW4gYSBzdGF0ZSB3aGVyZSB3ZSBjYW4gc2VuZCBOQUtzICovCi0gICAgZGJsY2hh ciA9IC0xLCAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVyIHRvIGRvdWJsZSB3aGVu IHNlbmRpbmcgKi8KLSAgICBtb3ZpbmcgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBN T1ZFID0gc2VuZCwgdGhlbiBkZWxldGUgKi8KLSAgICByZWxpYWJsZSA9IFNFVF9BVVRPLCAgICAg ICAgICAgICAgICAvKiBOb256ZXJvIGlmIHRyYW5zcG9ydCBpcyByZWxpYWJsZSAqLwotICAgIHhy ZWxpYWJsZSA9IC0xLAotICAgIHNldHJlbGlhYmxlID0gMCwKLSAgICB1cmNsZWFyID0gMCwgICAg ICAgICAgICAgICAgICAgICAgICAvKiBOb256ZXJvIGZvciBjbGVhciBjaGFubmVsIHRvIHlvdSAq LwotICAgIGNsZWFycnEgPSBTRVRfQVVUTywgICAgICAgICAgICAgICAgIC8qIFNFVCBDTEVBUkNI QU5FTCB2YWx1ZSAqLwotICAgIGNsZWFyZWQgPSAwLAotICAgIHN0cmVhbWluZyA9IDAsICAgICAg ICAgICAgICAgICAgICAgIC8qIE5vbnplcm8gaWYgc3RyZWFtaW5nIGlzIGFjdGl2ZSAqLwotICAg IHN0cmVhbW9rID0gMCwgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vbnplcm8gaWYgc3RyZWFt aW5nIG5lZ290aWF0ZWQgKi8KLSAgICBzdHJlYW1ycSA9IFNFVF9BVVRPLCAgICAgICAgICAgICAg ICAvKiBTRVQgU1RSRUFNSU5HIHZhbHVlICovCi0gICAgc3RyZWFtZWQgPSAtMTsgICAgICAgICAg ICAgICAgICAgICAgLyogV2hldGhlciB3ZSBzdHJlYW1lZCBsYXN0IHRpbWUgKi8KLQotY2hhciAq IHNuZF9tb3ZlID0gTlVMTDsgICAgICAgICAgICAgICAgIC8qIE1vdmUgZmlsZSBhZnRlciBzZW5k aW5nIGl0ICovCi1jaGFyICogc25kX3JlbmFtZSA9IE5VTEw7ICAgICAgICAgICAgICAgLyogUmVu YW1lIGZpbGUgYWZ0ZXIgc2VuZGluZyBpdCAqLwotY2hhciAqIHJjdl9tb3ZlID0gTlVMTDsgICAg ICAgICAgICAgICAgIC8qIE1vdmUgZmlsZSBhZnRlciByZWNlaXZpbmcgaXQgKi8KLWNoYXIgKiBy Y3ZfcmVuYW1lID0gTlVMTDsgICAgICAgICAgICAgICAvKiBSZW5hbWUgZmlsZSBhZnRlciByZWNl aXZpbmcgaXQgKi8KLQotY2hhciAqIGdfc25kX21vdmUgPSBOVUxMOwotY2hhciAqIGdfc25kX3Jl bmFtZSA9IE5VTEw7Ci1jaGFyICogZ19yY3ZfbW92ZSA9IE5VTEw7Ci1jaGFyICogZ19yY3ZfcmVu YW1lID0gTlVMTDsKLQotI2lmZGVmIENLX1RSSUdHRVIKLWNoYXIgKnR0X3RyaWdnZXJbVFJJR0dF UlNdID0geyBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwgfTsKLUNIQVIg KnR0X3RybWF0Y2hbVFJJR0dFUlNdID0geyBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwgfTsKLWNoYXIgKnRyaWdnZXJ2YWwgPSBOVUxMOwotI2VuZGlmIC8qIENLX1RSSUdH RVIgKi8KLQotaW50IGNreGxvZ2dpbmcgPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcg Zm9yIHN5c2xvZ2dpbmcgYWN0aXZlICovCi1pbnQgaWtkYm9wZW4gPSAwOyAgICAgICAgICAgICAg ICAgICAgICAgLyogRmxhZyBmb3IgSUtTRCBkYXRhYmFzZSBhY3RpdmUgKi8KLWludCBkYmluaXRl ZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBJS1NEQiByZWNvcmQgaW5p dCdkICovCi0jaWZuZGVmIENLU1lTTE9HCi1pbnQgY2t4c3lzbG9nID0gMDsgICAgICAgICAgICAg ICAgICAgICAgLyogTG9nZ2luZyBsZXZlbCAwICovCi0jZWxzZQotI2lmZGVmIFNZU0xPR0xFVkVM Ci1pbnQgY2t4c3lzbG9nID0gU1lTTE9HTEVWRUw7ICAgICAgICAgICAgLyogTG9nZ2luZyBsZXZl bCBzcGVjaWZpZWQgKi8KLSNlbHNlCi1pbnQgY2t4c3lzbG9nID0gU1lTTEdfREY7ICAgICAgICAg ICAgICAgLyogRGVmYXVsdCBsb2dnaW5nIGxldmVsICovCi0jZW5kaWYgLyogU1lTTE9HTEVWRUwg Ki8KLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotCi0jaWZuZGVmIE5PSEVMUAotI2lmbmRlZiBOT0NN REwKLV9QUk9UT1RZUCggVk9JRCBpbmlvcHRobHAsICh2b2lkKSApOyAgICAvKiBDb21tYW5kLWxp bmUgaGVscCBpbml0aWFsaXplciAqLwotI2VuZGlmIC8qIE5PQ01ETCAqLwotI2VuZGlmIC8qIE5P SEVMUCAqLwotCi1fUFJPVE9UWVAoIFZPSUQgZ2V0ZXhlZGlyLCAodm9pZCkgKTsKLV9QUk9UT1RZ UCggaW50IHB1dG5vdGhpbmcsIChjaGFyKSApOwotCi0jaWZkZWYgSUtTRAotX1BST1RPVFlQKCBW T0lEIGRvaWtzZGluaXQsICh2b2lkKSApOwotX1BST1RPVFlQKCBWT0lEIGlrc2Rpbml0LCAodm9p ZCkgKTsKLV9QUk9UT1RZUCggVk9JRCBkb2lrbG9nLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50 IGRiaW5pdCwgKHZvaWQpICk7Ci0jZW5kaWYgLyogSUtTRCAqLwotCi0vKiBWYXJpYWJsZXMgcGFz c2VkIGZyb20gY29tbWFuZCBwYXJzZXIgdG8gcHJvdG9jb2wgbW9kdWxlICovCi0KLSNpZm5kZWYg Tk9TUEwKLSNpZm5kZWYgTk9JQ1AKLSNpZmRlZiBDS19BUEMKLV9QUk9UT1RZUCggVk9JRCBhcGNv bmVjdCwgKHZvaWQpICk7Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0jaWZkZWYgT1MyCi1leHRlcm4g aW50IGluaXR2aWs7Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9JQ1AgKi8KLSNlbmRp ZiAvKiBOT1NQTCAqLwotY2hhciAqY2xjbWRzID0gTlVMTDsgICAgICAgICAgICAgICAgICAgIC8q IFBvaW50ZXIgdG8gY29tbWFuZC1saW5lIGNvbW1hbmRzICovCi0KLSNpZm5kZWYgTk9TRVRLRVkK LWV4dGVybiBLRVkgKmtleW1hcDsKLWV4dGVybiBNQUNSTyAqbWFjcm90YWI7Ci0jZW5kaWYgLyog Tk9TRVRLRVkgKi8KLQotI2lmbmRlZiBOT1BVU0gKLWludCBub3B1c2ggPSAwOyAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBQVVNIIGVuYWJsZWQgKi8KLSNlbHNlCi1pbnQgbm9wdXNoID0gMTsg ICAgICAgICAgICAgICAgICAgICAgICAgLyogUFVTSCBkaXNhYmxlZCAqLwotI2VuZGlmIC8qIE5P UFVTSCAqLwotCi1DSEFSIHNzdGF0ZSAgPSAoQ0hBUikgMDsgICAgICAgICAgICAgICAgLyogU3Rh cnRpbmcgc3RhdGUgZm9yIGF1dG9tYXRvbiAqLwotQ0hBUiB6c3RhdGUgID0gKENIQVIpIDA7ICAg ICAgICAgICAgICAgIC8qIEZvciByZW1lbWJlcmluZyBzc3RhdGUgKi8KLWNoYXIgKiBwcmludGVy bmFtZSA9IE5VTEw7ICAgICAgICAgICAgICAvKiBOVUxMIGlmIHByaW50ZXIgbm90IHJlZGlyZWN0 ZWQgKi8KLWludCBwcmludHBpcGUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgU0VU IFBSSU5URVIgKi8KLWludCBub3ByaW50ZXIgPSAwOwotCi0jaWZuZGVmIE5PWEZFUgotY2hhciAq Y21hcmcgID0gIiI7ICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gY29tbWFuZCBk YXRhICovCi1jaGFyICpjbWFyZzIgPSAiIjsgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRl ciB0byAybmQgY29tbWFuZCBkYXRhICovCi1jaGFyICoqY21saXN0OyAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogUG9pbnRlciB0byBmaWxlIGxpc3QgaW4gYXJndiAqLwotCi0jaWZkZWYgQ0tf QVVUT0RMICAgICAgICAgICAgICAgICAgICAgICAgLyogQXV0b2Rvd25sb2FkICovCi1pbnQgYXV0 b2RsID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5hYmxlZCBieSBkZWZhdWx0ICov Ci0jZWxzZQotaW50IGF1dG9kbCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChvciBp ZiBub3QgaW1wbGVtZW50ZWQpLiAqLwotI2VuZGlmIC8qIENLX0FVVE9ETCAqLwotaW50IGFkbF9l cnIgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEgPSBzdG9wIG9uIGVycm9yICovCi0j aWZkZWYgS1VJCi1pbnQgYWRsX2FzayA9IDE7CQkJLyogMSA9IGZpbGUgZGlhbG9nIG9uIGF1dG9k b3dubG9hZCAqLwotI2Vsc2UKLWludCBhZGxfYXNrID0gMDsJCQkvKiAwID0gbm8gZmlsZSBkaWFs b2cgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSNpZmRlZiBPUzIgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBBVVRPRE9XTkxPQUQgcGFyYW1ldGVycyAqLwotaW50IGFkbF9rbW9kZSA9IEFE TF9QQUNLLCAgICAgICAgICAgICAgIC8qIE1hdGNoIFBhY2tldCB0byBzaWduYWwgZG93bmxvYWQg Ki8KLSAgICBhZGxfem1vZGUgPSBBRExfUEFDSzsKLWNoYXIgKiBhZGxfa3N0ciA9IE5VTEw7ICAg ICAgICAgICAgICAgICAvKiBLRVJNSVQgRG93bmxvYWQgU3RyaW5nICovCi1jaGFyICogYWRsX3pz dHIgPSBOVUxMOyAgICAgICAgICAgICAgICAgLyogWk1PREVNIERvd25sb2FkIFN0cmluZyAqLwot I2VuZGlmIC8qIE9TMiAqLwotCi1pbnQgcmVtZmlsZSA9IDAsIHJlbXBpcGUgPSAwLCByZW1hcHBk ID0gMDsgLyogUkVNT1RFIG91dHB1dCByZWRpcmVjdGlvbiAqLwotY2hhciAqIHJlbWRlc3QgPSBO VUxMOwotCi0jaWZuZGVmIE5PU0VSVkVSCi0vKgotICBTZXJ2ZXIgc2VydmljZXM6Ci0gICAwID0g ZGlzYWJsZWQKLSAgIDEgPSBlbmFibGVkIGluIGxvY2FsIG1vZGUKLSAgIDIgPSBlbmFibGVkIGlu IHJlbW90ZSBtb2RlCi0gICAzID0gZW5hYmxlZCBpbiBib3RoIGxvY2FsIGFuZCByZW1vdGUgbW9k ZXMKLSAgb25seSBhcyBpbml0aWFsIChkZWZhdWx0KSB2YWx1ZXMuCi0qLwotaW50IGVuX3hpdCA9 IDI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVYSVQgKi8KLWludCBlbl9jd2QgPSAzOyAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBDRC9DV0QgKi8KLWludCBlbl9jcHkgPSAzOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBDT1BZICAgKi8KLWludCBlbl9kZWwgPSAyOyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBERUxFVEUgKi8KLWludCBlbl9ta2QgPSAzOyAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBNS0RJUiAqLwotaW50IGVuX3JtZCA9IDI7ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFJNRElSICovCi1pbnQgZW5fZGlyID0gMzsgICAgICAgICAgICAgICAgICAg ICAgICAgLyogRElSRUNUT1JZICovCi1pbnQgZW5fZmluID0gMzsgICAgICAgICAgICAgICAgICAg ICAgICAgLyogRklOSVNIICovCi1pbnQgZW5fZ2V0ID0gMzsgICAgICAgICAgICAgICAgICAgICAg ICAgLyogR0VUICovCi0jaWZuZGVmIE5PUFVTSAotaW50IGVuX2hvcyA9IDI7ICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEhPU1QgZW5hYmxlZCAqLwotI2Vsc2UKLWludCBlbl9ob3MgPSAwOyAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBIT1NUIGRpc2FibGVkICovCi0jZW5kaWYgLyogTk9Q VVNIICovCi1pbnQgZW5fcmVuID0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUkVOQU1F ICovCi1pbnQgZW5fc2VuID0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0VORCAqLwot aW50IGVuX3NldCA9IDM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCAqLwotaW50IGVu X3NwYSA9IDM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNQQUNFICovCi1pbnQgZW5fdHlw ID0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogVFlQRSAqLwotaW50IGVuX3dobyA9IDM7 ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdITyAqLwotI2lmZGVmIGRhdGFnZW5lcmFsCi0v KiBEYXRhIEdlbmVyYWwgQU9TL1ZTIGNhbid0IGRvIHRoaXMgKi8KLWludCBlbl9ieWUgPSAwOyAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBCWUUgKi8KLSNlbHNlCi1pbnQgZW5fYnllID0gMjsg ICAgICAgICAgICAgICAgICAgICAgICAgLyogUENzIGluIGxvY2FsIG1vZGUuLi4gKi8KLSNlbmRp ZiAvKiBkYXRhZ2VuZXJhbCAqLwotaW50IGVuX2FzZyA9IDM7ICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEFTU0lHTiAqLwotaW50IGVuX3F1ZSA9IDM7ICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFFVRVJZICovCi1pbnQgZW5fcmV0ID0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgLyog UkVUUklFVkUgKi8KLWludCBlbl9tYWkgPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBN QUlMICovCi1pbnQgZW5fcHJpID0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUFJJTlQg Ki8KLWludCBlbl9lbmEgPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFTkFCTEUgKi8K LSNlbHNlCi1pbnQgZW5feGl0ID0gMCwgZW5fY3dkID0gMCwgZW5fY3B5ID0gMCwgZW5fZGVsID0g MCwgZW5fbWtkID0gMCwgZW5fcm1kID0gMCwKLSAgICBlbl9kaXIgPSAwLCBlbl9maW4gPSAwLCBl bl9nZXQgPSAwLCBlbl9ob3MgPSAwLCBlbl9yZW4gPSAwLCBlbl9zZW4gPSAwLAotICAgIGVuX3Nl dCA9IDAsIGVuX3NwYSA9IDAsIGVuX3R5cCA9IDAsIGVuX3dobyA9IDAsIGVuX2J5ZSA9IDAsIGVu X2FzZyA9IDAsCi0gICAgZW5fcXVlID0gMCwgZW5fcmV0ID0gMCwgZW5fbWFpID0gMCwgZW5fcHJp ID0gMCwgZW5fZW5hID0gMDsKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotI2VuZGlmIC8qIE5PWEZF UiAqLwotCi0vKiBNaXNjZWxsYW5lb3VzICovCi0KLWNoYXIgKip4YXJndjsgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBHbG9iYWwgY29waWVzIG9mIGFyZ3YgKi8KLWludCB4YXJnYzsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgYXJnYyAgKi8KLWludCB4YXJnczsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbiBpbW11dGFibGUgY29weSBvZiBhcmdjICov Ci1jaGFyICp4YXJnMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYW5kIG9mIGFyZ3Zb MF0gKi8KLWNoYXIgKnBpcGVkYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVy IHRvIC1QIChwaXBlKSBkYXRhICovCi0KLWV4dGVybiBjaGFyICpkZnR0eTsgICAgICAgICAgICAg ICAgICAgICAvKiBEZWZhdWx0IHR0eSBuYW1lIGZyb20gY2s/dGlvLmMgKi8KLWV4dGVybiBpbnQg ZGZsb2M7ICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IGxvY2F0aW9uOiByZW1vdGUv bG9jYWwgKi8KLWV4dGVybiBpbnQgZGZwcnR5OyAgICAgICAgICAgICAgICAgICAgICAvKiBEZWZh dWx0IHBhcml0eSAqLwotZXh0ZXJuIGludCBkZmZsb3c7ICAgICAgICAgICAgICAgICAgICAgIC8q IERlZmF1bHQgZmxvdyBjb250cm9sICovCi0KLSNpZmRlZiBUTkNPREUKLWV4dGVybiBpbnQgdG5f ZGViOwotI2VuZGlmIC8qIFROQ09ERSAqLwotLyoKLSAgQnVmZmVyZWQgZmlsZSBpbnB1dCBhbmQg b3V0cHV0IGJ1ZmZlcnMuICBTZWUgZ2V0cGt0KCkgaW4gY2tjZm5zLmMKLSAgYW5kIHpvdXRkdW1w KCkgaW4gdGhlIHN5c3RlbS1kZXBlbmRlbnQgZmlsZSBpL28gbW9kdWxlICh1c3VhbGx5IGNrP2Zp by5jKS4KLSovCi0jaWZuZGVmIERZTkFNSUMKLS8qIE5vdyB3ZSBhbGxvY2F0ZSB0aGVtIGR5bmFt aWNhbGx5LCBzZWUgZ2V0aW9icygpIGJlbG93LiAqLwotY2hhciB6aW5idWZmZXJbSU5CVUZTSVpF XSwgem91dGJ1ZmZlcltPQlVGU0laRV07Ci0jZW5kaWYgLyogRFlOQU1JQyAqLwotY2hhciAqemlu cHRyLCAqem91dHB0cjsKLWludCB6aW5jbnQsIHpvdXRjbnQ7Ci1pbnQgem9idWZzaXplID0gT0JV RlNJWkU7Ci1pbnQgem9mYnVmZmVyID0gMTsKLWludCB6b2ZibG9jayAgPSAxOwotCi0jaWZkZWYg U0VTTElNSVQKLWludCBzZXNsaW1pdCA9IDA7Ci0jZW5kaWYgLyogU0VTTElNSVQgKi8KLQotI2lm ZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0jaW5jbHVkZSAiY2t1YXRoLmgiCi0jZW5kaWYgLyogQ0tf QVVUSEVOVElDQVRJT04gKi8KLQotX1BST1RPVFlQKCBpbnQgZ2V0aW9icywgKFZPSUQpICk7Ci0K LS8qICBNIEEgSSBOICAtLSAgQy1LZXJtaXQgbWFpbiBwcm9ncmFtICAqLwotCi0jaW5jbHVkZSA8 c2lnbmFsLmg+Ci0KLSNpZm5kZWYgTk9DQ1RSQVAKLSNpbmNsdWRlIDxzZXRqbXAuaD4KLSNpbmNs dWRlICJja2NzaWcuaCIKLWNram1wYnVmIGNtamJ1ZjsKLSNpZmRlZiBHRU1ET1MgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBTcGVjaWFsIGZvciBBdGFyaSBTVCAqLwotY2NfY2xlYW4oKTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgY2FuJ3QgYmUgcmlnaHQ/ICovCi0j ZW5kaWYgLyogR0VNRE9TICovCi0jZW5kaWYgLyogTk9DQ1RSQVAgKi8KLQotI2lmbmRlZiBOT1hG RVIKLS8qIEluZm8gYXNzb2NpYXRlZCB3aXRoIGEgc3lzdGVtIElEICovCi0KLXN0cnVjdCBzeXNk YXRhIHN5c2lkbGlzdFtdID0geyAgICAgICAgICAvKiBBZGQgb3RoZXJzIGFzIG5lZWRlZC4uLiAq LwotICB7ICIwIiwgICJhbm9ueW1vdXMiLCAgICAwLCBOVUwsICAwLCAwLCAwIH0sCi0gIHsgIkEx IiwgIkFwcGxlIElJIiwgICAgIDAsIE5VTCwgIDAsIDAsIDMgfSwgLyogZml4IHRoaXMgKi8KLSAg eyAiQTMiLCAiTWFjaW50b3NoIiwgICAgMSwgJzonLCAgMCwgMiwgMSB9LAotICB7ICJENyIsICJW TVMiLCAgICAgICAgICAwLCAnXScsICAxLCAwLCAwIH0sCi0gIHsgIkRBIiwgIlJTVFMvRSIsICAg ICAgIDAsICddJywgIDEsIDAsIDMgfSwgLyogKGkgdGhpbmsuLi4pICovCi0gIHsgIkRCIiwgIlJU MTEiLCAgICAgICAgIDAsIE5VTCwgIDEsIDAsIDMgfSwgLyogKG1heWJlLi4uKSAqLwotICB7ICJG MyIsICJBT1MvVlMiLCAgICAgICAxLCAnOicsICAwLCAwLCAyIH0sCi0gIHsgIkkxIiwgIlZNL0NN UyIsICAgICAgIDAsIE5VTCwgIDAsIDAsIDAgfSwKLSAgeyAiSTIiLCAiTVZTL1RTTyIsICAgICAg MCwgTlVMLCAgMCwgMCwgMCB9LAotICB7ICJJNCIsICJNVVNJQyIsICAgICAgICAwLCBOVUwsICAw LCAwLCAwIH0sCi0gIHsgIkk3IiwgIkNJQ1MiLCAgICAgICAgIDAsIE5VTCwgIDAsIDAsIDAgfSwK LSAgeyAiSTkiLCAiTVZTL1JPU0NPRSIsICAgMCwgTlVMLCAgMCwgMCwgMCB9LAotICB7ICJLMiIs ICJBdGFyaSBTVCIsICAgICAxLCAnXFwnLCAxLCAwLCAzIH0sCi0gIHsgIkwzIiwgIkFtaWdhIiwg ICAgICAgIDEsICcvJywgIDEsIDAsIDIgfSwKLSAgeyAiTVYiLCAiU3RyYXR1cyBWT1MiLCAgMSwg Jz4nLCAgMCwgMSwgMCB9LAotICB7ICJOMyIsICJBcG9sbG8gQWVnaXMiLCAxLCAnLycsICAwLCAz LCAyIH0sCi0gIHsgIlUxIiwgIlVOSVgiLCAgICAgICAgIDEsICcvJywgIDAsIDMsIDIgfSwKLSAg eyAiVTgiLCAiTVMtRE9TIiwgICAgICAgMSwgJ1xcJywgMSwgMCwgMyB9LAotICB7ICJVRCIsICJP Uy05IiwgICAgICAgICAxLCAnLycsICAwLCAzLCAyIH0sCi0gIHsgIlVOIiwgIldpbmRvd3MtMzIi LCAgIDEsICdcXCcsIDEsIDIsIDMgfSwKLSAgeyAiVU8iLCAiT1MvMiIsICAgICAgICAgMSwgJ1xc JywgMSwgMiwgMyB9Ci19Owotc3RhdGljIGludCBueHhzeXNpZHMgPSAoc2l6ZW9mKHN5c2lkbGlz dCkgLyBzaXplb2Yoc3RydWN0IHN5c2RhdGEpKTsKLQotLyogR2l2ZW4gYSBLZXJtaXQgc3lzdGVt IElEIGNvZGUsIHJldHVybiB0aGUgYXNzb2NpYXRlZCBuYW1lIHN0cmluZyAqLwotLyogYW5kIHNv bWUgcHJvcGVydGllcyBvZiB0aGUgZmlsZW5hbWVzLi4uICovCi0KLWNoYXIgKgotZ2V0c3lzaWQo cykgY2hhciAqIHM7IHsgICAgICAgICAgICAgICAgIC8qIEdldCBzeXN0ZW0tdHlwZSBuYW1lICov Ci0gICAgaW50IGk7Ci0gICAgaWYgKCFzKSByZXR1cm4oIiIpOwotICAgIGZvciAoaSA9IDA7IGkg PCBueHhzeXNpZHM7IGkrKykKLSAgICAgIGlmICghc3RyY21wKHN5c2lkbGlzdFtpXS5zaWRfY29k ZSxzKSkKLSAgICAgICAgcmV0dXJuKHN5c2lkbGlzdFtpXS5zaWRfbmFtZSk7Ci0gICAgcmV0dXJu KHMpOwotfQotCi1pbnQKLWdldHN5c2l4KHMpIGNoYXIgKnM7IHsgICAgICAgICAgICAgICAgICAv KiBHZXQgc3lzdGVtLXR5cGUgaW5kZXggKi8KLSAgICBpbnQgaTsKLSAgICBpZiAoIXMpIHJldHVy bigtMSk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG54eHN5c2lkczsgaSsrKQotICAgICAgaWYgKCFz dHJjbXAoc3lzaWRsaXN0W2ldLnNpZF9jb2RlLHMpKQotICAgICAgICByZXR1cm4oaSk7Ci0gICAg cmV0dXJuKC0xKTsKLX0KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotLyogVGVsbCBpZiBhIHBhdGhu YW1lIGlzIGFic29sdXRlICh2ZXJzdXMgcmVsYXRpdmUpICovCi0vKiBUaGlzIHNob3VsZCBiZSBw YXJjZWxlZCBvdXQgdG8gZWFjaCBvZiB0aGUgY2sqZmlvLmMgbW9kdWxlcy4uLiAqLwotLyogVk1T IGlzYWJzb2x1dGUoKSBpcyBub3cgaW4gY2t2ZmlvLmMuICovCi0jaWZuZGVmIFZNUwotaW50Ci1p c2Fic29sdXRlKHBhdGgpIGNoYXIgKiBwYXRoOyB7Ci0gICAgaW50IHJjID0gMDsKLSAgICBpbnQg eDsKLSAgICBpZiAoIXBhdGgpCi0gICAgICByZXR1cm4oMCk7Ci0gICAgaWYgKCEqcGF0aCkKLSAg ICAgIHJldHVybigwKTsKLSAgICB4ID0gKGludCkgc3RybGVuKHBhdGgpOwotICAgIGRlYnVnKEYx MTEsImlzYWJzb2x1dGUiLHBhdGgseCk7Ci0jaWZkZWYgVU5JWAotICAgIGlmICgqcGF0aCA9PSAn LycKLSNpZmRlZiBEVElMREUKLSAgICAgICAgfHwgKnBhdGggPT0gJ34nCi0jZW5kaWYgLyogRFRJ TERFICovCi0gICAgICAgICkKLSAgICAgIHJjID0gMTsKLSNlbHNlIC8qIGRlZiBVTklYICovCi0j aWZkZWYgT1MyCi0gICAgaWYgKCpwYXRoID09ICcvJyB8fCAqcGF0aCA9PSAnXFwnKQotICAgICAg cmMgPSAxOwotICAgIGVsc2UgaWYgKGlzYWxwaGEoKnBhdGgpICYmIHggPiAyKQotICAgICAgaWYg KCoocGF0aCsxKSA9PSAnOicgJiYgKCoocGF0aCArMikgPT0gJy8nIHx8ICoocGF0aCsyKSA9PSAn XFwnKSkKLSAgICAgICAgcmMgPSAxOwotI2Vsc2UgLyogZGVmIE9TMiAqLwotI2lmZGVmIEFNSUdB Ci0gICAgaWYgKCpwYXRoID09ICcvJwotI2lmZGVmIERUSUxERQotICAgICAgICB8fCAqcGF0aCA9 PSAnficKLSNlbmRpZiAvKiBEVElMREUgKi8KLSAgICAgICAgKQotICAgICAgcmMgPSAxOwotI2Vs c2UgLyogZGVmIEFNSUdBICovCi0jaWZkZWYgT1NLCi0gICAgaWYgKCpwYXRoID09ICcvJwotI2lm ZGVmIERUSUxERQotICAgICAgICB8fCAqcGF0aCA9PSAnficKLSNlbmRpZiAvKiBEVElMREUgKi8K LSAgICAgICAgKQotICAgICAgcmMgPSAxOwotI2Vsc2UgLyogZGVmIE9TSyAqLwotI2lmZGVmIGRh dGFnZW5lcmFsCi0gICAgaWYgKCpwYXRoID09ICc6JykKLSAgICAgIHJjID0gMTsKLSNlbHNlIC8q IGRlZiBkYXRhZ2VuZXJhbCAqLwotI2lmZGVmIE1BQwotICAgIHJjID0gMDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEZpbGwgaW4gbGF0ZXIuLi4gKi8KLSNlbHNlIC8qIGRlZiBNQUMg Ki8KLSNpZmRlZiBTVFJBVFVTCi0gICAgcmMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogRmlsbCBpbiBsYXRlci4uLiAqLwotI2Vsc2UgLyogZGVmIFNUUkFUVVMgKi8KLSNpZmRl ZiBHRU1ET1MKLSAgICBpZiAoKnBhdGggPT0gJy8nIHx8ICpwYXRoID09ICdcXCcpCi0gICAgICBy YyA9IDE7Ci0gICAgZWxzZSBpZiAoaXNhbHBoYSgqcGF0aCkgJiYgeCA+IDEpCi0gICAgICBpZiAo KihwYXRoKzEpID09ICc6JykKLSAgICAgICAgcmMgPSAxOwotI2VuZGlmIC8qIEdFTURPUyAqLwot I2VuZGlmIC8qIFNUUkFUVVMgKi8KLSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBkYXRhZ2Vu ZXJhbCAqLwotI2VuZGlmIC8qIE9TSyAqLwotI2VuZGlmIC8qIEFNSUdBICovCi0jZW5kaWYgLyog T1MyICovCi0jZW5kaWYgLyogVU5JWCAqLwotICAgIGRlYnVnKEYxMDEsImlzYWJzb2x1dGUgcmMi LCIiLHJjKTsKLSAgICByZXR1cm4ocmMpOwotfQotI2VuZGlmIC8qIG5kZWYgVk1TICovCi0KLS8q ICBTZWUgaWYgSSBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIGtleWJvYXJkICAqLwotCi1pbnQK LWlzX2FfdHR5KG4pIGludCBuOyB7Ci0jaWZkZWYgVU5JWAotICAgIGV4dGVybiBpbnQgdHRmZGZs ZzsKLSAgICBpZiAodHRmZGZsZyA+IDApCi0gICAgICByZXR1cm4oMSk7Ci0jZW5kaWYgLyogVU5J WCAqLwotI2lmZGVmIEtVSQotICAgIHJldHVybiAxOwotI2Vsc2UgLyogS1VJICovCi0jaWZkZWYg TlQKLSAgICBpZiAoaXNXaW45NSgpKQotICAgICAgcmV0dXJuKDEpOwotICAgIGVsc2UKLSAgICAg IHJldHVybihfaXNhdHR5KG4pKTsKLSNlbHNlCi0jaWZkZWYgSUtTRAotICAgaWYgKGluc2VydmVy KQotICAgICByZXR1cm4oMSk7Ci0gICBlbHNlCi0jZW5kaWYgLyogSUtTRCAqLwotICAgICByZXR1 cm4oaXNhdHR5KG4pKTsKLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIEtVSSAqLwotfQotCi0j aWZuZGVmIE5PWEZFUgotVk9JRAotaW5pdHhsaXN0KCkgewotICAgIGV4dGVybiBjaGFyICogc25k ZXhjZXB0W10sICogcmN2ZXhjZXB0W107Ci0gICAgaW50IGk7Ci0gICAgZm9yIChpID0gMDsgaSA8 IE5TTkRFWENFUFQ7IGkrKykgewotCXNuZGV4Y2VwdFtpXSA9IE5VTEw7Ci0JcmN2ZXhjZXB0W2ld ID0gTlVMTDsKLSAgICB9Ci19Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLS8qIEluaXRpYWxpemUg ZmxvdyBjb250cm9sIHRhYmxlICovCi0KLVZPSUQKLWluaXRmbG93KCkgeyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBEZWZhdWx0IHZhbHVlcyBmb3IgZmxvdyBjb250cm9sICovCi0jaWZk ZWYgVk1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIGVhY2gga2luZCBvZiBj b25uZWN0aW9uLiAqLwotICAgIC8qIFRoZSBWTVMgdGVsbmV0IHRlcm1pbmFsIGRyaXZlciB0cmVh dHMgIm5vbmUiIGFzIHJlcXVlc3QgdG8gbG9zZSBjaGFycyAqLwotICAgIGN4Zmxvd1tDWFRfUkVN T1RFXSAgPSBGTE9fWE9OWDsgICAgIC8qIFJlbW90ZSBtb2RlLi4uICovCi0jZWxzZQotI2lmZGVm IEhQVVgKLSAgICAvKiBEaXR0byBmb3IgSFAtVVggKi8KLSAgICBjeGZsb3dbQ1hUX1JFTU9URV0g ID0gRkxPX1hPTlg7ICAgICAvKiBSZW1vdGUgbW9kZS4uLiAqLwotI2Vsc2UKLSAgICAvKiBUaGUg dGVtcHRhdGlvbiBpcyB0byBtYWtlIHRoaXMgb25lIEZMT19LRUVQIGJ1dCBkb24ndCEhISAqLwot ICAgIC8qIEl0IHRvdGFsbHkgd3JlY2tzIGJpbmFyeS1maWxlIHRyYW5zZmVyIHdoZW4gY29taW5n IGluIHZpYSBUZWxuZXQuICovCi0gICAgLyogSW4gVU5JWCBhdCBsZWFzdC4uLiAqLwotICAgIGN4 Zmxvd1tDWFRfUkVNT1RFXSAgPSBGTE9fTk9ORTsKLSNlbmRpZiAvKiBIUFVYICovCi0jZW5kaWYg LyogVk1TICovCi0KLSNpZmRlZiBWTVMKLSAgICBjeGZsb3dbQ1hUX0RJUkVDVF0gID0gRkxPX1hP Tlg7ICAgICAvKiBEaXJlY3Qgc2VyaWFsIGNvbm5lY3Rpb25zLi4uICovCi0jZWxzZQotICAgIGN4 Zmxvd1tDWFRfRElSRUNUXSAgPSBGTE9fTk9ORTsKLSNlbmRpZiAvKiBWTVMgKi8KLQotI2lmZGVm IENLX1JUU0NUUwotICAgIGN4Zmxvd1tDWFRfTU9ERU1dICAgPSBGTE9fUlRTQzsgICAgIC8qIE1v ZGVtIGNvbm5lY3Rpb25zLi4uICovCi0jZWxzZQotI2lmZGVmIFZNUwotICAgIGN4Zmxvd1tDWFRf TU9ERU1dICAgPSBGTE9fWE9OWDsKLSNlbHNlCi0gICAgY3hmbG93W0NYVF9NT0RFTV0gICA9IEZM T19OT05FOwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIENLX1JUU0NUUyAqLwotCi0jaWZk ZWYgVk1TCi0gICAgY3hmbG93W0NYVF9UQ1BJUF0gICA9IEZMT19YT05YOyAgICAgLyogVENQL0lQ IGNvbm5lY3Rpb25zLi4uICovCi0jZWxzZQotICAgIGN4Zmxvd1tDWFRfVENQSVBdICAgPSBGTE9f Tk9ORTsKLSNlbmRpZiAvKiBWTVMgKi8KLQotICAgIGN4Zmxvd1tDWFRfU1NIXSAgICAgPSBGTE9f Tk9ORTsKLSAgICBjeGZsb3dbQ1hUX1gyNV0gICAgID0gRkxPX05PTkU7ICAgICAvKiBPdGhlciBr aW5kcyBvZiBuZXR3b3Jrcy4uLiAqLwotICAgIGN4Zmxvd1tDWFRfREVDTkVUXSAgPSBGTE9fWE9O WDsKLSAgICBjeGZsb3dbQ1hUX0xBVF0gICAgID0gRkxPX1hPTlg7Ci0gICAgY3hmbG93W0NYVF9O RVRCSU9TXSA9IEZMT19OT05FOwotICAgIGN4Zmxvd1tDWFRfTlBJUEVdICAgPSBGTE9fTk9ORTsK LSAgICBjeGZsb3dbQ1hUX1BJUEVdICAgID0gRkxPX05PTkU7Ci0gICAgZmxvdyA9IGN4Zmxvd1tj eHR5cGVdOyAgICAgICAgICAgICAgLyogSW5pdGlhbCBmbG93IHNldHRpbmcuICovCi0gICAgZGVi dWcoRjEwMSwiaW5pdGZsb3ciLCIiLGZsb3cpOwotfQotCi0jaWZuZGVmIE5PWEZFUgotLyogSW5p dGlhbGl6ZSBmaWxlIHRyYW5zZmVyIHByb3RvY29scyAqLwotCi1WT0lECi1pbml0cHJvdG8oeSwg dXBic3RyLCB1cHRzdHIsIHNydnN0ciwgc25kYnN0ciwgc25kdHN0ciwgcmN2YnN0ciwgcmN2dHN0 cikKLSAgICBpbnQgeTsKLSAgICBjaGFyICogdXBic3RyLCAqIHVwdHN0ciwgKiBzcnZzdHIsICog c25kYnN0ciwgKiBzbmR0c3RyLCAqIHJjdmJzdHIsCi0gICAgKiByY3Z0c3RyOwotLyogaW5pdHBy b3RvICovIHsKLQotICAgIGlmICh1cGJzdHIpICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENv bnZlcnQgbnVsbCBzdHJpbmdzICovCi0gICAgICBpZiAoISp1cGJzdHIpICAgICAgICAgICAgICAg ICAgICAgLyogdG8gbnVsbCBwb2ludGVycyAqLwotICAgICAgICB1cGJzdHIgPSBOVUxMOwotCi0g ICAgaWYgKHVwdHN0cikgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udmVydCBudWxsIHN0 cmluZ3MgKi8KLSAgICAgIGlmICghKnVwdHN0cikgICAgICAgICAgICAgICAgICAgICAvKiB0byBu dWxsIHBvaW50ZXJzICovCi0gICAgICAgIHVwdHN0ciA9IE5VTEw7Ci0KLSAgICBpZiAoc25kYnN0 cikKLSAgICAgIGlmICghKnNuZGJzdHIpCi0gICAgICAgIHNuZGJzdHIgPSBOVUxMOwotCi0gICAg aWYgKHNuZHRzdHIpCi0gICAgICBpZiAoISpzbmR0c3RyKQotICAgICAgICBzbmR0c3RyID0gTlVM TDsKLQotICAgIGlmIChyY3Zic3RyKQotICAgICAgaWYgKCEqcmN2YnN0cikKLSAgICAgICAgcmN2 YnN0ciA9IE5VTEw7Ci0KLSAgICBpZiAocmN2dHN0cikKLSAgICAgIGlmICghKnJjdnRzdHIpCi0g ICAgICAgIHJjdnRzdHIgPSBOVUxMOwotCi0gICAgaWYgKHNydnN0cikKLSAgICAgIGlmICghKnNy dnN0cikKLSAgICAgICAgc3J2c3RyID0gTlVMTDsKLQotICAgIHByb3RvY29sID0geTsgICAgICAg ICAgICAgICAgICAgICAgIC8qIFNldCBwcm90b2NvbCAqLwotCi0gICAgaWYgKHB0YWJbcHJvdG9j b2xdLnJwa3RsZW4gPiAtMSkKLSAgICAgIHVycHNpeiA9IHB0YWJbcHJvdG9jb2xdLnJwa3RsZW47 Ci0gICAgaWYgKHB0YWJbcHJvdG9jb2xdLnNwa3RmbGcgPiAtMSkKLSAgICAgIHNwc2l6ZiA9IHB0 YWJbcHJvdG9jb2xdLnNwa3RmbGc7Ci0gICAgaWYgKHB0YWJbcHJvdG9jb2xdLnNwa3RsZW4gPiAt MSkgewotICAgICAgICBzcHNpeiA9IHB0YWJbcHJvdG9jb2xdLnNwa3RsZW47Ci0gICAgICAgIGRl YnVnKEYxMDEsImluaXRwcm90byBzcHNpeiIsIiIsc3BzaXopOwotICAgICAgICBpZiAoc3BzaXpm KSB7Ci0gICAgICAgICAgICBzcHNpenIgPSBzcG1heCA9IHNwc2l6OwotICAgICAgICAgICAgZGVi dWcoRjEwMSwiaW5pdHByb3RvIHNwc2l6ciIsIiIsc3BzaXpyKTsKLSAgICAgICAgfQotICAgIH0K LSAgICBpZiAocHRhYltwcm90b2NvbF0ud2luc2l6ZSA+IC0xKQotICAgICAgd3Nsb3RyID0gcHRh Yltwcm90b2NvbF0ud2luc2l6ZTsKLSAgICBpZiAocHRhYltwcm90b2NvbF0ucHJlZml4ID4gLTEp Ci0gICAgICBwcmVmaXhpbmcgPSBwdGFiW3Byb3RvY29sXS5wcmVmaXg7Ci0gICAgaWYgKHB0YWJb cHJvdG9jb2xdLmZuY2EgPiAtMSkKLSAgICAgIGZuY2FjdCAgPSBwdGFiW3Byb3RvY29sXS5mbmNh OwotICAgIGlmIChwdGFiW3Byb3RvY29sXS5mbmNuID4gLTEpCi0gICAgICBmbmNudiAgID0gcHRh Yltwcm90b2NvbF0uZm5jbjsKLSAgICBpZiAocHRhYltwcm90b2NvbF0uZm5zcCA+IC0xKQotICAg ICAgZm5zcGF0aCA9IHB0YWJbcHJvdG9jb2xdLmZuc3A7Ci0gICAgaWYgKHB0YWJbcHJvdG9jb2xd LmZucnAgPiAtMSkKLSAgICAgIGZucnBhdGggPSBwdGFiW3Byb3RvY29sXS5mbnJwOwotCi0gICAg bWFrZXN0cigmKHB0YWJbcHJvdG9jb2xdLmhfYl9pbml0KSx1cGJzdHIpOwotICAgIG1ha2VzdHIo JihwdGFiW3Byb3RvY29sXS5oX3RfaW5pdCksdXB0c3RyKTsKLSAgICBtYWtlc3RyKCYocHRhYltw cm90b2NvbF0uaF94X2luaXQpLHNydnN0cik7Ci0gICAgbWFrZXN0cigmKHB0YWJbcHJvdG9jb2xd LnBfYl9zY21kKSxzbmRic3RyKTsKLSAgICBtYWtlc3RyKCYocHRhYltwcm90b2NvbF0ucF90X3Nj bWQpLHNuZHRzdHIpOwotICAgIG1ha2VzdHIoJihwdGFiW3Byb3RvY29sXS5wX2JfcmNtZCkscmN2 YnN0cik7Ci0gICAgbWFrZXN0cigmKHB0YWJbcHJvdG9jb2xdLnBfdF9yY21kKSxyY3Z0c3RyKTsK LX0KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBOT0NNREwKLVZPSUQKLSNpZmRlZiBD S19BTlNJQwotZG9jbWRsaW5lKHZvaWQgKiB0aHJlYWRpbmZvKQotI2Vsc2UgLyogQ0tfQU5TSUMg Ki8KLWRvY21kbGluZSh0aHJlYWRpbmZvKSBWT0lEICogdGhyZWFkaW5mbzsKLSNlbmRpZiAvKiBD S19BTlNJQyAqLwotewotI2lmZGVmIE5UU0lHCi0gICAgc2V0aW50KCk7Ci0gICAgaWYgKHRocmVh ZGluZm8pIHsgICAgICAgICAgICAgICAgICAgLyogVGhyZWFkIGxvY2FsIHN0b3JhZ2UuLi4gKi8K LSAgICAgICBUbHNTZXRWYWx1ZShUbHNJbmRleCx0aHJlYWRpbmZvKTsKLSAgICAgICBkZWJ1Zygg RjEwMCwgImRvY21kbGluZSBjYWxsZWQgd2l0aCB0aHJlYWRpbmZvIGJsb2NrIiwgIiIsIDAgKTsK LSAgICB9IGVsc2UKLSAgICAgIGRlYnVnKCBGMTAwLCAiZG9jbWRsaW5lIHRocmVhZGluZm8gaXMg TlVMTCIsIiIsMCk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSNpZmRlZiBDS19MT0dJTgotI2lmZGVm IE5UCi0jaWZkZWYgSUtTRAotICAgIGlmIChpbnNlcnZlcikKLSAgICAgIHNldG50Y3JlZHMoKTsK LSNlbmRpZiAvKiBJS1NEICovCi0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBDS19MT0dJTiAq LwotICAgIHByb3RvKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRha2UgYW55IHJl cXVlc3RlZCBhY3Rpb24sIHRoZW4gKi8KLSAgICBpZiAoIXF1aWV0KSAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBwdXQgY3Vyc29yIGJhY2sgYXQgbGVmdCBtYXJnaW4sICovCi0gICAgICBjb25v bGwoIiIpOwotI2lmbmRlZiBOT0xPQ0FMCi0gICAgaWYgKGNuZmxnKSB7ICAgICAgICAgICAgICAg ICAgICAgICAgLyogUmUtY29ubmVjdCBpZiByZXF1ZXN0ZWQgKi8KLSAgICAgICAgY25mbGcgPSAw OwotICAgICAgICBkb2NvbmVjdCgwLDApOwotICAgICAgICBpZiAodHRjaGsoKSA8IDApCi0gICAg ICAgICAgZG9sb2dlbmQoKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0jaWZkZWYg TlRTSUcKLSAgICAgY2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7Ci0jZW5kaWYgLyogTlRTSUcgKi8K LSAgIHJldHVybjsKLX0KLQotdm9pZAotaWtzbG9naW4oKSB7Ci0gICAgaWYgKHNzdGVsbmV0Ci0j aWZkZWYgSUtTRAotICAgICAgICB8fCBpbnNlcnZlciAgICAgICAgICAgICAgICAgICAgIC8qIElu dGVybmV0IHNlcnZlciAqLwotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgICAgKSB7Ci0gICAgICAg IGNoYXIgKnM7Ci0gICAgICAgIGV4dGVybiBpbnQgZmRpc3BsYTsgICAgICAgICAgICAgLyogRmls ZS10cmFuc2ZlciBkaXNwbGF5IGZvcm1hdCAqLwotICAgICAgICBleHRlcm4gY2hhciAqIGlrcHJv bXB0OyAgICAgICAgIC8qIElLU0QgcHJvbXB0ICovCi0KLSNpZmRlZiBJS1NECi0jaWZkZWYgQ0tf TE9HSU4KLSAgICAgICAgaWYgKGluc2VydmVyKSB7Ci0gICAgICAgICAgICB4X2xvZ2luID0gMTsg ICAgICAgICAgICAgICAgLyogTG9naW4gcmVxdWlyZWQgKi8KLSAgICAgICAgICAgIHhfbG9nZ2Vk ID0gMDsgICAgICAgICAgICAgICAvKiBOb3QgbG9nZ2VkIGluIHlldCAqLwotICAgICAgICAgICAg Y21zZXRwKGlrcHJvbXB0KTsgICAgICAgICAgIC8qIFNldCB1cCBJS1NEJ3MgcHJvbXB0ICovCi0j aWZuZGVmIE5PU0VSVkVSCi0gICAgICAgICAgICBlbl9tYWkgPSAwOyAgICAgICAgICAgICAgICAg LyogTUFJTCBpcyBkaXNhYmxlZCAqLwotICAgICAgICAgICAgZW5fd2hvID0gMDsgICAgICAgICAg ICAgICAgIC8qIFJFTU9URSBXSE8gaXMgZGlzYWJsZWQgKi8KLSAgICAgICAgICAgIGVuX2hvcyA9 IDA7ICAgICAgICAgICAgICAgICAvKiBSRU1PVEUgSE9TVCBpcyBkaXNhYmxlZCAqLwotICAgICAg ICAgICAgZW5fcHJpID0gMDsgICAgICAgICAgICAgICAgIC8qIFBSSU5UIGlzIGRpc2FibGVkICov Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHhf bG9naW4gPSAwOyAgICAgICAgICAgICAgICAvKiBMb2dpbiBub3QgcmVxdWlyZWQgKi8KLSAgICAg ICAgICAgIHhfbG9nZ2VkID0gMTsgICAgICAgICAgICAgICAvKiBBbHJlYWR5IGxvZ2dlZCBpbiAq LwotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSNlbmRpZiAvKiBJS1NEICovCi0g ICAgICAgIG5vbG9jYWwgPSAxOyAgICAgICAgICAgICAgICAgICAgLyogU0VUIExJTkUvSE9TVCBu b3QgYWxsb3dlZCAqLwotICAgICAgICBmZGlzcGxhID0gWFlGRF9OOyAgICAgICAgICAgICAgIC8q IE5vIGZpbGUtdHJhbnNmZXIgZGlzcGxheSAqLwotI2lmZGVmIE5FVENPTk4KLSAgICAgICAgY2xp ZW50aG9zdCA9IGNrZ2V0cGVlcigpOyAgICAgICAvKiBHZXQgY2xpZW50J3MgaG9zdG5hbWUgKi8K LSAgICAgICAgZGVidWcoRjExMCwiaWtzbG9naW4gY2xpZW50aG9zdCIsY2xpZW50aG9zdCwwKTsK LSNlbmRpZiAvKiBORVRDT05OICovCi0gICAgICAgIHp0aW1lKCZzKTsgICAgICAgICAgICAgICAg ICAgICAgLyogR2V0IGN1cnJlbnQgZGF0ZSBhbmQgdGltZSAqLwotCi0jaWZkZWYgQ0tfTE9HSU4K LSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotICAgICAgICBpZiAoeF9sb2dpbikgewotICAgICAg ICAgICAgeF9sb2dnZWQgPSBja190bl9hdXRoX3ZhbGlkKCk7IC8qIERpZCBUZWxuZXQgQXV0aCBz dWNjZWVkPyAqLwotICAgICAgICAgICAgZGVidWcoRjExMSwiaWtzbG9naW4iLCJ4X2xvZ2dlZCIs eF9sb2dnZWQpOwotCi0jaWZkZWYgTlQKLSAgICAgICAgICAgIC8qIE9uIFdpbmRvd3MgOXgsIHdl IGRvIG5vdCBoYXZlIHRoZSBhYmlsaXR5IGluICAqLwotICAgICAgICAgICAgLyogenZ1c2VyKCkg YXQgcHJlc2VudCB0byBkZXRlcm1pbmUgaWYgdGhlIG5hbWUgICovCi0gICAgICAgICAgICAvKiBh cHByb3ZlZCBpbiBhIEtlcmJlcm9zIHByaW5jaXBhbCBpcyByZWFsbHkgYSAgKi8KLSAgICAgICAg ICAgIC8qIGFuIGFjY291bnQgaW4gdGhlIFdpbmRvd3MgQWNjZXNzIENvbnRyb2wgTGlzdCAqLwot ICAgICAgICAgICAgaWYgKGlzV2luOTUoKSAmJiB4X2xvZ2dlZCA9PSBBVVRIX1ZBTElECi0gICAg ICAgICAgICAgICAgICYmIChja190bl9hdXRoZW50aWNhdGVkKCkgIT0gQVVUSFRZUEVfTlRMTSkK LSNpZmRlZiBDS19TUlAKLSAgICAgICAgICAgICAgICAgJiYgKGNrX3RuX2F1dGhlbnRpY2F0ZWQo KSAhPSBBVVRIVFlQRV9TUlApCi0jZW5kaWYgLyogQ0tfU1JQICovCi0gICAgICAgICAgICAgICAg ICkgewotICAgICAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9VU0VSKTsKLSAgICAgICAg ICAgICAgICB4X2xvZ2dlZCA9IEFVVEhfVVNFUjsKLSAgICAgICAgICAgICAgICBwcmludGYoIldB Uk5JTkc6XHJcbiIpOwotICAgICAgICAgICAgICAgIHByaW50ZigKLSIgVGhlIFRlbG5ldCBhdXRo ZW50aWNhdGlvbiBtZXRob2QgdXNlZCBjYW5ub3QgcHJvdmlkZSBmb3IgYXV0b21hdGVkXHJcbiIp OwotICAgICAgICAgICAgICAgIHByaW50ZigKLSIgbG9naW4gdG8gV2luZG93cyA5NSBvciBXaW5k b3dzIDk4LiAgQSBwYXNzd29yZCBtdXN0IGJlIGVudGVyZWRcclxuIik7Ci0gICAgICAgICAgICAg ICAgcHJpbnRmKAotIiBsb2NhbGx5IHRvIHZhbGlkYXRlIHlvdXIgdXNlcmlkLiAgVGVsbmV0IGF1 dGhlbnRpY2F0aW9uIChhbmQgZW5jcnlwdGlvbilcclxuIgotICAgICAgICAgICAgICAgICk7Ci0g ICAgICAgICAgICAgICAgcHJpbnRmKAotIiBjYW4gYmUgdXNlZCB0byB2YWxpZGF0ZSB0aGUgaG9z dCAoYW5kIHByb3RlY3QgdGhlIHByaXZhY3kgb2YgeW91ciBwYXNzd29yZC4pXAotXHJcbiIKLSAg ICAgICAgICAgICAgICApOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIE5UICovCi0KLSAgICAg ICAgICAgIGlmICh4X2xvZ2dlZCA9PSBBVVRIX1ZBTElEKSB7Ci0jaWZkZWYgQ0tfU1NMCi0gICAg ICAgICAgICAgICAgaWYgKChzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSAmJgot ICAgICAgICAgICAgICAgICAgICAoIVRFTE9QVF9VKFRFTE9QVF9BVVRIRU5USUNBVElPTikgfHwK LSAgICAgICAgICAgICAgICAgICAgIGNrX3RuX2F1dGhlbnRpY2F0ZWQoKSA9PSBBVVRIVFlQRV9O VUxMIHx8Ci0gICAgICAgICAgICAgICAgICAgICBja190bl9hdXRoZW50aWNhdGVkKCkgPT0gQVVU SFRZUEVfQVVUTykKLSAgICAgICAgICAgICAgICAgICAgKSB7Ci0jaWZkZWYgU1NMX0tSQjUKLSAg ICAgICAgICAgICAgICAgICAgaWYgKHRsc19pc19rcmI1KDApKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICBwcmludGYoIkF1dGhlbnRpY2F0ZWQgdXNpbmcgS2VyYmVyb3MgNVxyXG4iKTsKLSNp ZmRlZiBDS1NZU0xPRwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNreHN5c2xvZyA+PSBT WVNMR19MSSAmJiBja3hsb2dnaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0 ZXJuIGNoYXIgc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWRbXTsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBja3N5c2xvZyhTWVNMR19MSSwgMSwgIkFVVEhfVkFMSUQiLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJLZXJiZXJvcyA1IiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzelVzZXJOYW1lQXV0aGVudGljYXRlZAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0j ZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0jZW5kaWYg LyogU1NMX0tSQjUgKi8KLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg ICAgICAgcHJpbnRmKCJBdXRoZW50aWNhdGVkIHVzaW5nIFguNTA5IGNlcnRpZmljYXRlXHJcbiIp OwotI2lmZGVmIENLU1lTTE9HCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2t4c3lzbG9n ID49IFNZU0xHX0xJICYmIGNreGxvZ2dpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBleHRlcm4gY2hhciBzelVzZXJOYW1lQXV0aGVudGljYXRlZFtdOwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0xJLCAxLCAiQVVUSF9WQUxJRCIsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlguNTA5IGNlcnRpZmljYXRlIiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzelVzZXJOYW1lQXV0aGVudGljYXRlZAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAg ICAgICAgICB9Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICAgICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICAgICAg ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiQXV0aGVudGljYXRlZCB1c2lu ZyAlc1xyXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVRIVFlQRV9OQU1FKGNr X3RuX2F1dGhlbnRpY2F0ZWQoKSkpOwotI2lmZGVmIENLU1lTTE9HCi0gICAgICAgICAgICAgICAg ICAgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19MSSAmJiBja3hsb2dnaW5nKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgIGV4dGVybiBjaGFyIHN6VXNlck5hbWVBdXRoZW50aWNhdGVkW107 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0xJLCAxLCAiQVVUSF9W QUxJRCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVVEhUWVBFX05BTUUo Y2tfdG5fYXV0aGVudGljYXRlZCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8K LSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB6dnVzZXIodWlkYnVmKTsKLSAg ICAgICAgICAgICAgICBpZiAoenZwYXNzKCIiKSA9PSAwKQotICAgICAgICAgICAgICAgICAgeF9s b2dnZWQgPSAwOwotICAgICAgICAgICAgfSBlbHNlIGlmICh4X2xvZ2dlZCA9PSBBVVRIX1VTRVIg JiYgIXN0cmNtcCh1aWRidWYsImFub255bW91cyIpKSB7Ci0gICAgICAgICAgICAgICAgZXh0ZXJu IGNoYXIgc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWRbXTsKLSAgICAgICAgICAgICAgICB6dnVzZXIo dWlkYnVmKTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzelVzZXJOYW1lQXV0aGVudGlj YXRlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWQsMCk7 Ci0gICAgICAgICAgICAgICAgaWYgKHp2cGFzcyhzelVzZXJOYW1lQXV0aGVudGljYXRlZCkgPT0g MCkgewotICAgICAgICAgICAgICAgICAgLyogQW5vbnltb3VzIGxvZ2luIGZhaWxlZC4gIEZvcmNl IGEgdXNlcm5hbWUgcHJvbXB0LiAqLwotICAgICAgICAgICAgICAgICAgeF9sb2dnZWQgPSAwOwot ICAgICAgICAgICAgICAgICAgdWlkYnVmWzBdID0gJ1wwJzsKLSAgICAgICAgICAgICAgICB9IGVs c2UgewotI2lmZGVmIENLX1NTTAotICAgICAgICAgICAgICAgICAgICBpZiAoKHNzbF9hY3RpdmVf ZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAoIVRF TE9QVF9VKFRFTE9QVF9BVVRIRU5USUNBVElPTikgfHwKLSAgICAgICAgICAgICAgICAgICAgICAg ICBja190bl9hdXRoZW50aWNhdGVkKCkgPT0gQVVUSFRZUEVfTlVMTCB8fAotICAgICAgICAgICAg ICAgICAgICAgICAgIGNrX3RuX2F1dGhlbnRpY2F0ZWQoKSA9PSBBVVRIVFlQRV9BVVRPKSkgewot ICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJBdXRoZW50aWNhdGVkIHVzaW5nIFguNTA5 IGNlcnRpZmljYXRlXHJcbiIpOwotI2lmZGVmIENLU1lTTE9HCi0gICAgICAgICAgICAgICAgICAg ICAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX0xJICYmIGNreGxvZ2dpbmcpIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBleHRlcm4gY2hhciBzelVzZXJOYW1lQXV0aGVudGljYXRlZFtd OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0xJLCAxLCAiQVVU SF9VU0VSIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWC41MDkgY2Vy dGlmaWNhdGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN6VXNlck5h bWVBdXRoZW50aWNhdGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotICAgICAg ICAgICAgICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICAgICAg ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiQXV0aGVudGljYXRl ZCB1c2luZyAlc1xyXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVUSFRZ UEVfTkFNRShja190bl9hdXRoZW50aWNhdGVkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwotI2lmZGVmIENLU1lTTE9HCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlm IChja3hzeXNsb2cgPj0gU1lTTEdfTEkgJiYgY2t4bG9nZ2luZykgewotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2tzeXNsb2coU1lTTEdfTEksIDEsICJBVVRIX1VTRVIiLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVUSFRZUEVfTkFNRShja190bl9hdXRo ZW50aWNhdGVkKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3pV c2VyTmFtZUF1dGhlbnRpY2F0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS1NZU0xPRyAq LwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICB9IGVsc2UgewotI2lmZGVmIENLU1lTTE9HCi0gICAgICAgICAgICAgICAgaWYgKGNreHN5c2xv ZyA+PSBTWVNMR19MSSAmJiBja3hsb2dnaW5nICYmCi0gICAgICAgICAgICAgICAgICAgIHhfbG9n Z2VkID09IEFVVEhfVVNFUikgewotICAgICAgICAgICAgICAgICAgICBleHRlcm4gY2hhciBzelVz ZXJOYW1lQXV0aGVudGljYXRlZFtdOwotICAgICAgICAgICAgICAgICAgICBja3N5c2xvZyhTWVNM R19MSSwgMSwgIkFVVEhfVVNFUiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVVEhU WVBFX05BTUUoY2tfdG5fYXV0aGVudGljYXRlZCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICAgICAg ICAgICAgICB4X2xvZ2dlZCA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKCFzdHJjbXAoIih1bmtu b3duKSIsdWlkYnVmKQotI2lmZGVmIE5UCi0gICAgICAgICAgICAgICAgICAgIHx8ICFzdHJpY21w KCJhZG1pbmlzdHJhdG9yIix1aWRidWYpCi0jaWZkZWYgVU5JWAotICAgICAgICAgICAgICAgICAg ICB8fCAhc3RyY21wKCJyb290Iix1aWRidWYpCi0jZWxzZQotI2lmZGVmIFBsYW45Ci0gICAgICAg ICAgICAgICAgICAgIHx8ICFzdHJjbXAoInJvb3QiLHVpZGJ1ZikKLSNlbHNlCi0jaWZkZWYgT1NL Ci0gICAgICAgICAgICAgICAgICAgIHx8ICFzdHJjbXAoInJvb3QiLHVpZGJ1ZikKLSNlbmRpZiAv KiBPU0sgKi8KLSNlbmRpZiAvKiBQbGFuOSAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAv KiBOVCAqLwotICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgICB1aWRidWZb MF0gPSAnXDAnOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfQVVUSEVO VElDQVRJT04gKi8KLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotCi0jaWZkZWYgSUtTRAotICAgICAg ICBpZiAoaW5zZXJ2ZXIpCi0gICAgICAgICAgcHJpbnRmKCJcclxuSW50ZXJuZXQgS2VybWl0IFNl cnZpY2UgcmVhZHkgYXQgJXMlc1xyXG4iLHMsdmVyc2lvKTsKLSAgICAgICAgZWxzZQotI2VuZGlm IC8qIElLU0QgKi8KLSAgICAgICAgICBwcmludGYoIlxyXG5DLUtlcm1pdCByZWFkeSBhdCAlcyVz XHJcbiIscyx2ZXJzaW8pOwotICAgICAgICBpZiAoKm15aG9zdCkKLSAgICAgICAgICBwcmludGYo IiVzXHJcbiIsIG15aG9zdCk7Ci0gICAgICAgIHByaW50ZigiXHJcbiIpOwotICAgIH0KLSNpZmRl ZiBDS19MT0dJTgotI2lmZGVmIElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIpIHsKLSAgICAgICAgaW50 IGk7Ci0gICAgICAgIGV4dGVybiBpbnQgYXJnX3g7ICAgICAgICAgICAgICAgLyogRmxhZyBmb3Ig Jy14JyBvbiBjb21tYW5kIGxpbmUgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgZXh0ZXJuIHN0 cnVjdCBtdGFiICptYWN0YWI7ICAgICAgICAgLyogRm9yIE9OX0xPR0lOIG1hY3JvLiAqLwotICAg ICAgICBleHRlcm4gaW50IG5tYWM7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotICAgICAgICBkZWJ1 ZyhGMTEwLCJNQUlOIGNsaWVudGhvc3QiLGNsaWVudGhvc3QsMCk7Ci0gICAgICAgIHNydmlkbCA9 IHRpbWVsaW1pdCA9IGxvZ2ludGltbzsgLyogRm9yIGludGVyYWN0aXZlIGxvZ2luICovCi0gICAg ICAgIHJ0aW1lcigpOyAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgdGltZXIgKi8KLSAg ICAgICAgZm9yIChpID0gMDsgaSA8IGlrc19yZXRyeSAmJiAheF9sb2dnZWQ7IGkrKykgeyAvKiBD b3VudCByZXRyaWVzICovCi0gICAgICAgICAgICBpZiAoZ3RpbWVyKCkgPiBsb2dpbnRpbW8pCi0g ICAgICAgICAgICAgIGJyZWFrOwotI2lmZGVmIFROQ09ERQotICAgICAgICAgICAgdG5fd2FpdCgi bG9naW4gbG9vcCIpOwotICAgICAgICAgICAgdG5fcHVzaCgpOwotI2VuZGlmIC8qIFROQ09ERSAq LwotICAgICAgICAgICAgZGVidWcoRjEwMSwiTUFJTiBMT0dJTiB0cnkiLCIiLGkpOwotICAgICAg ICAgICAgd2hhdCA9IFdfTk9USElORzsgICAgICAgICAgIC8qIEJlY2F1c2UgcHJvdG8oKSBjaGFu Z2VzIHRoaXMgKi8KLQotI2lmZGVmIElLU19PUFRJT04KLSAgICAgICAgICAgIGRlYnVnKEYxMTEs Ik1BSU4gTE9HSU4iLAotICAgICAgICAgICAgICAgICAgIlRFTE9QVF9TQihURUxPUFRfS0VSTUlU KS5rZXJtaXQubWVfc3RhcnQiLAotICAgICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9L RVJNSVQpLmtlcm1pdC5tZV9zdGFydAotICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAg IC8qIEtlcm1pdCBzZXJ2ZXIgbmVnb3RpYXRlZCAqLwotICAgICAgICAgICAgaWYgKFRFTE9QVF9T QihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQpIHsKLSAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTAxLCJJS1NEIHN0YXJ0aW5nIGluIHNlcnZlciBtb2RlIiwiIiwwKTsKLSAgICAgICAgICAg ICAgICBhcmdfeCA9IDE7ICAgICAgICAgICAgICAvKiBFbnRlciBzZXJ2ZXIgbW9kZSAqLwotICAg ICAgICAgICAgICAgIHNzdGF0ZSA9ICd4JzsKLSNpZmRlZiBJS1NEUE9QQkFDSwotICAgICAgICAg ICAgICAgIGp1c3RvbmUgPSAxOyAgICAgICAgICAgIC8qIEV4ZWN1dGUgb25lIGNvbW1hbmQgYXQg YSB0aW1lLiAqLwotI2VuZGlmIC8qIElLU0RQT1BCQUNLICovCi0gICAgICAgICAgICAgICAgcHJv dG8oKTsgICAgICAgICAgICAgICAgLyogRW50ZXIgcHJvdG9jb2wgaWYgcmVxdWVzdGVkLiAqLwot I2lmZGVmIE5UU0lHCi0gICAgICAgICAgICAgICAgY2tfaWgoKTsKLSNlbmRpZiAvKiBOVFNJRyAq LwotICAgICAgICAgICAgICAgIGlmICh4X2xvZ2dlZCkgICAgICAgICAgIC8qIExvZ2dlZCBpbiAq LwotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IGVsc2UgeyAgICAgICAg ICAgICAgICAgICAgLyogTm90IGluIGNsaWVudC9zZXJ2ZXIgbW9kZSAqLwotI2VuZGlmIC8qIElL U19PUFRJT04gKi8KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJJS1NEIHN0YXJ0aW5nIHdp dGggVXNlcm5hbWUgcHJvbXB0IiwiIiwwKTsKLSAgICAgICAgICAgICAgICB4X2xvZ2dlZCA9IGNr eGxvZ2luKChDSEFSICopdWlkYnVmLE5VTEwsTlVMTCwxKTsKLSAgICAgICAgICAgICAgICBpZiAo c3N0YXRlKSB7ICAgICAgICAgICAvKiBSZWNlaXZlZCBhIHBhY2tldCBhdCBwcm9tcHQgKi8KLSNp ZmRlZiBJS1NEUE9QQkFDSwotICAgICAgICAgICAgICAgICAgICBqdXN0b25lID0gMTsgICAgICAg IC8qIEdvIGhhbmRsZSBpdCAqLwotI2VuZGlmIC8qIElLU0RQT1BCQUNLICovCi0gICAgICAgICAg ICAgICAgICAgIHByb3RvKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlm ICgheF9sb2dnZWQpIHsgICAgICAgIC8qIEluIGNhc2Ugd2UgYXJlIGF0IHRoZSBwcm9tcHQuLi4g Ki8KLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJBY2Nlc3MgZGVuaWVkLlxuIik7Ci0gICAg ICAgICAgICAgICAgICAgIHVpZGJ1ZlswXSA9ICdcMCc7ICAgLyogRm9yZ2V0IHRoZSBuYW1lIGlm IHdlIGhhdmUgb25lICovCi0gICAgICAgICAgICAgICAgfQotI2lmZGVmIElLU19PUFRJT04KLSAg ICAgICAgICAgIH0KLSNlbmRpZiAvKiBJS1NfT1BUSU9OICovCi0gICAgICAgIH0KLSAgICAgICAg c3J2aWRsID0gdGltZWxpbWl0ID0gaWtzX3RpbW87ICAvKiBSZXNldCBjb21tYW5kIHRpbWVsaW1p dCAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJNQUlOIExPR0lOIiwiIix4X2xvZ2dlZCk7Ci0gICAg ICAgIGlmICgheF9sb2dnZWQpIHsgICAgICAgICAgICAgICAgLyogTG9naW5zIGZhaWxlZC4gKi8K LSAgICAgICAgICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0 KQotICAgICAgICAgICAgICBlcnJwa3QoKENIQVIgKikiTG9naW4gVGltZW91dCIpOwotICAgICAg ICAgICAgbXNsZWVwKDUwMCk7Ci0gICAgICAgICAgICBkb2V4aXQoQkFEX0VYSVQsMCk7Ci0gICAg ICAgIH0KLSAgICAgICAgd2hhdCA9IFdfTk9USElORzsgICAgICAgICAgICAgICAvKiBTdGF5IGlu IGtub3duIHN0YXRlICovCi0jaWZuZGVmIE5PU0VSVkVSCi0gICAgICAgIGlmIChpc2d1ZXN0KSB7 Ci0gICAgICAgICAgICBlbl9wcmkgPSAwOyAgICAgICAgICAgICAgICAgLyogTm8gcHJpbnRpbmcg Zm9yIGFub255bW91cyB1c2VycyAqLwotICAgICAgICAgICAgZW5fbWFpID0gMDsgICAgICAgICAg ICAgICAgIC8qIE5vIGVtYWlsIGZvciBhbm9ueW1vdXMgdXNlcnMgKi8KLSAgICAgICAgICAgIGVu X21rZCA9IDA7ICAgICAgICAgICAgICAgICAvKiBPciBkaXJlY3RvcnkgY3JlYXRpb24gKi8KLSAg ICAgICAgICAgIGVuX3JtZCA9IDA7ICAgICAgICAgICAgICAgICAvKiBPciBkaXJlY3RvcnkgcmVt b3ZhbCAqLwotICAgICAgICAgICAgZW5fZW5hID0gMDsgICAgICAgICAgICAgICAgIC8qIE9yIEVO QUJMaW5nIERJU0FCTEVkIGl0ZW1zICovCi0gICAgICAgIH0KLSNlbmRpZiAvKiBOT1NFUlZFUiAq LwotCi0jaWZuZGVmIE5PU1BMCi0vKgotICBJZiBhIG1hY3JvIG5hbWVkICJvbl9sb2dpbiIgaXMg ZGVmaW5lZCwgZXhlY3V0ZSBpdC4gIEFsc28gcmVtb3ZlIGl0IGZyb20gdGhlCi0gIG1hY3JvIHRh YmxlIHNvIHRoZSB1c2VyIGNhbm5vdCBzZWUgd2hhdCBpdCBkb2VzLiAgRXhlY3V0ZSBpdCBhcyBw YXJ0IG9mIHRoZQotICBpa3NkLmNvbmYgZmlsZS4KLSovCi0gICAgICAgIGlmIChubWFjKSB7ICAg ICAgICAgICAgICAgICAgICAgLyogQW55IG1hY3JvcyBkZWZpbmVkPyAqLwotICAgICAgICAgICAg aW50IGs7ICAgICAgICAgICAgICAgICAgICAgIC8qIFllcyAqLwotICAgICAgICAgICAgY2hhciAq IGNtZCA9ICJvbl9sb2dpbiI7ICAgIC8qIE1TVkMgMi54IGNvbXBpbGVyIGVycm9yICovCi0gICAg ICAgICAgICBrID0gbWxvb2sobWFjdGFiLGNtZCxubWFjKTsgLyogTG9vayB1cCAib25fbG9naW4i ICovCi0gICAgICAgICAgICBpZiAoayA+PSAwKSB7ICAgICAgICAgICAgICAgLyogSWYgZm91bmQs ICovCi0jaWZkZWYgSUtTRENPTkYKLSAgICAgICAgICAgICAgICBpbnQgc2F2ZWQgPSBpa3NkY2Y7 Ci0gICAgICAgICAgICAgICAgaWtzZGNmID0gMDsKLSNlbmRpZiAvKiBJS1NEQ09ORiAqLwotICAg ICAgICAgICAgICAgIGlmIChkb2RvKGssIiIsMCkgPiAtMSkgIC8qIHNldCBpdCB1cCwgKi8KLSAg ICAgICAgICAgICAgICAgIHBhcnNlcigxKTsgICAgICAgICAgICAvKiBleGVjdXRlIGl0ICovCi0j aWZkZWYgSUtTRENPTkYKLSAgICAgICAgICAgICAgICBpa3NkY2YgPSBzYXZlZDsKLSNlbmRpZiAv KiBJS1NEQ09ORiAqLwotICAgICAgICAgICAgICAgIGRlbG1hYyhjbWQsMSk7ICAgICAgICAgIC8q IGFuZCBkZWxldGUgaXQgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIE5P U1BMICovCi0gICAgfSAvKiBpZiAoaW5zZXJ2ZXIpICovCi0jZWxzZSAvKiBDS19MT0dJTiAqLwot ICAgIGlmIChpbnNlcnZlcikKLSAgICAgICAgc3J2aWRsID0gdGltZWxpbWl0ID0gaWtzX3RpbW87 ICAvKiBTZXQgaWRsZSBsaW1pdHMgZm9yIElLUyAqLwotI2VuZGlmIC8qIENLX0xPR0lOICovCi0j ZW5kaWYgLyogSUtTRCAqLwotfQotCi1WT0lECi0jaWZkZWYgQ0tfQU5TSUMKLWZhaWxjbWRsaW5l KHZvaWQgKiBmb28pCi0jZWxzZSAvKiBDS19BTlNJQyAqLwotZmFpbGNtZGxpbmUoZm9vKSBWT0lE ICogZm9vOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0jaWZkZWYgR0VNRE9TCi0gICAgY2Nf Y2xlYW4oKTsKLSNlbmRpZiAvKiBHRU1ET1MgKi8KLSNpZm5kZWYgTk9MT0NBTAotICAgIGlmIChj bmZsZykgZG9jb25lY3QoMCwwKTsgICAgICAgICAgIC8qIGNvbm5lY3QgYWdhaW4gaWYgcmVxdWVz dGVkLiAqLwotICAgIGlmICh0dGNoaygpIDwgMCkKLSAgICAgIGRvbG9nZW5kKCk7Ci0jZW5kaWYg LyogTk9MT0NBTCAqLwotfQotI2VuZGlmIC8qIE5PQ01ETCAqLwotCi0jaWZuZGVmIE5PSUNQCi1W T0lECi0jaWZkZWYgQ0tfQU5TSUMKLWRvdGFrZWluaSh2b2lkICogdGhyZWFkaW5mbykgICAgICAg ICAgICAvKiBFeGVjdXRlIGluaXQgZmlsZS4gKi8KLSNlbHNlICAvKiBDS19BTlNJQyAqLwotZG90 YWtlaW5pKHRocmVhZGluZm8pIFZPSUQgKiB0aHJlYWRpbmZvOyAvKiBFeGVjdXRlIGluaXQgZmls ZS4gKi8KLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogZG90YWtlaW5pICovIHsKLSNpZmRlZiBO VFNJRwotICAgIHNldGludCgpOwotICAgIGlmICh0aHJlYWRpbmZvKSB7ICAgICAgICAgICAgICAg ICAgIC8qIFRocmVhZCBsb2NhbCBzdG9yYWdlLi4uICovCi0gICAgICAgVGxzU2V0VmFsdWUoVGxz SW5kZXgsdGhyZWFkaW5mbyk7Ci0gICAgICAgZGVidWcoRjEwMCwgImRvdGFrZWluaSBjYWxsZWQg d2l0aCB0aHJlYWRpbmZvIGJsb2NrIiwiIiwgMCk7Ci0gICAgfSBlbHNlCi0gICAgICBkZWJ1ZyhG MTAwLCAiZG90YWtlaW5pIC0gdGhyZWFkaW5mbyBpcyBOVUxMIiwgIiIsIDApOwotI2VuZGlmIC8q IE5UU0lHICovCi0jaWZkZWYgQ0tfTE9HSU4KLSNpZmRlZiBOVAotI2lmZGVmIElLU0QKLSAgICBp ZiAoaW5zZXJ2ZXIpCi0gICAgICBzZXRudGNyZWRzKCk7Ci0jZW5kaWYgLyogSUtTRCAqLwotI2Vu ZGlmIC8qIE5UICovCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSAgICBjbWRpbmkoKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBTZXRzIHRsZXZlbCAqLwotCi0gICAgZGVidWcoRjExMSwi ZG90YWtlaW5pIiwiaW5zZXJ2ZXIiLGluc2VydmVyKTsKLSAgICBkZWJ1ZyhGMTExLCJkb3Rha2Vp bmkiLCJzc3RlbG5ldCIsc3N0ZWxuZXQpOwotCi0jaWZkZWYgQ09NTUVOVAotLyogV3JvbmcgcGxh Y2UgZm9yIHRoaXMuLi4gKi8KLSNpZm5kZWYgTk9YRkVSCi0jaWZkZWYgQ0tfRkFTVAotICAgIGRv ZmFzdCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJ5IG5vdyBGQVNUIGRlZmF1bHRz IHNob3VsZCBiZSBPSyAqLwotI2VuZGlmIC8qIENLX0ZBU1QgKi8KLSNlbmRpZiAvKiBOT1hGRVIg Ki8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICBkb2luaXQoKTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBOb3cgZG8gdGhlIGluaXRpYWxpemF0aW9uIGZpbGUgKi8KLSAgICBkZWJ1 ZyhGMTAxLCJtYWluIGV4ZWN1dGluZyBpbml0IGZpbGUiLCIiLHRsZXZlbCk7Ci0gICAgd2hpbGUg KHRsZXZlbCA+IC0xKSB7Ci0gICAgICAgIHNzdGF0ZSA9IChDSEFSKSBwYXJzZXIoMSk7ICAgICAg LyogRXhlY3V0ZSBvbmUgY29tbWFuZCBhdCBhIHRpbWUuICovCi0gICAgICAgIGlmIChzc3RhdGUp IHByb3RvKCk7ICAgICAgICAgICAgLyogRW50ZXIgcHJvdG9jb2wgaWYgcmVxdWVzdGVkLiAqLwot I2lmZGVmIE5UU0lHCi0gICAgICAgIGNrX2loKCk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSAgICB9 Ci0gICAgZGVidWcoRjEwMSwibWFpbiBleGl0cyBpbml0IGZpbGUiLCIiLHRsZXZlbCk7Ci0KLSNp ZmRlZiBOVFNJRwotICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOwotI2VuZGlmIC8qIE5UU0lH ICovCi0gICAgcmV0dXJuOwotfQotCi1WT0lECi0jaWZkZWYgQ0tfQU5TSUMKLWZhaWx0YWtlaW5p KHZvaWQgKiB0aHJlYWRpbmZvKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLWZhaWx0YWtlaW5pKHRo cmVhZGluZm8pIFZPSUQgKiB0aHJlYWRpbmZvOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBm YWlsdGFrZWluaSAqLyB7Ci0jaWZkZWYgR0VNRE9TCi0gICAgY2NfY2xlYW4oKTsgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQXRhcmk6IENsZWFuIHVwIGFmdGVyIF5DLXRyYXAuICovCi0jZW5k aWYgLyogR0VNRE9TICovCi0gICAgZml4Y21kKCk7Ci0gICAgaWYgKCFjZmlsZWYpIHsKLSAgICAg ICAgY29ub2xsKCJJbnRlcnJ1cHRlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gb3IgXAotY29tbWFu ZC1saW5lIHByb2Nlc3NpbmcuIik7Ci0gICAgICAgIGNvbm9sbCgiQy1LZXJtaXQgcXVpdHRpbmcu Li4iKTsKLSAgICB9Ci0gICAgZG9leGl0KEJBRF9FWElULC0xKTsgICAgICAgICAgICAgICAgLyog RXhpdCB3aXRoIGJhZCBzdGF0dXMuICovCi19Ci0KLVZPSUQKLSNpZmRlZiBDS19BTlNJQwotZG9p Y3Aodm9pZCAqIHRocmVhZGluZm8pCi0jZWxzZSAvKiBDS19BTlNJQyAqLwotZG9pY3AodGhyZWFk aW5mbykgVk9JRCAqIHRocmVhZGluZm87Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGRvaWNw ICovIHsKLSNpZmRlZiBOVFNJRwotICAgIHNldGludCgpOwotICAgIGlmICh0aHJlYWRpbmZvKSB7 ICAgICAgICAgICAgICAgICAgIC8qIFRocmVhZCBsb2NhbCBzdG9yYWdlLi4uICovCi0gICAgICAg aWYgKCFUbHNTZXRWYWx1ZShUbHNJbmRleCx0aHJlYWRpbmZvKSkKLSAgICAgICAgICBkZWJ1ZyhG MTAxLCJkb2ljcCBUbHNTZXRWYWx1ZSBmYWlsZWQiLCIiLEdldExhc3RFcnJvcigpKTsKLSAgICAg ICBkZWJ1ZyhGMTAxLCAiZG9pY3AgYSB0aHJlYWRpbmZvIGJsb2NrIC0gVGxzSW5kZXgiLCAiIiwg VGxzSW5kZXgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlYnVnKEYxMDAsICJkb2ljcCByZWNl aXZlZCBhIG51bGwgdGhyZWFkaW5mbyIsICIiLCAwKTsKLSAgICB9Ci0jZW5kaWYgLyogTlRTSUcg Ki8KLSNpZmRlZiBDS19MT0dJTgotI2lmZGVmIE5UCi0jaWZkZWYgSUtTRAotICAgIGlmIChpbnNl cnZlcikKLSAgICAgIHNldG50Y3JlZHMoKTsKLSNlbmRpZiAvKiBJS1NEICovCi0jZW5kaWYgLyog TlQgKi8KLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotI2lmZGVmIE1BQwotICAgIHdoaWxlICgxKSB7 Ci0gICAgICAgIGV4dGVybiBjaGFyICpsZmlsZXM7ICAgICAgICAgICAgLyogRmFrZSBwb2ludGVy IGNhc3QgKi8KLQotICAgICAgICBpZiAoY29ubmVjdGVkKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhG MTAwLCAiZG9pY3A6IGNhbGxpbmcgbWFjcGFyc2VyIiwgIiIsIDApOwotICAgICAgICAgICAgc3N0 YXRlID0gbmV3cGFyc2VyKDEsIDEsIDBMKTsKLQotICAgICAgICAgICAgLyogaWdub3JlIG51bGwg Y29tbWFuZCBzdGF0ZSAqLwotICAgICAgICAgICAgaWYgKHNzdGF0ZSA9PSAnbicpCi0gICAgICAg ICAgICAgIHNzdGF0ZSA9ICdcMCc7Ci0KLSAgICAgICAgICAgIGlmIChzc3RhdGUpCi0gICAgICAg ICAgICAgIHByb3RvKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKgotICAgICAg ICAgICAgICogcHJvY2VzcyB0YWtlIGZpbGVzIHRoZSBmaW5kZXIgZ2F2ZSB1cy4KLSAgICAgICAg ICAgICAqLwotICAgICAgICAgICAgaWYgKCh0bGV2ZWwgPT0gLTEpICYmIGxmaWxlcykKLSAgICAg ICAgICAgICAgc3RhcnRsZmlsZSgpOwotCi0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCAiZG9pY3A6 IGNhbGxpbmcgcGFyc2VyIiwgIiIsIDApOwotICAgICAgICAgICAgc3N0YXRlID0gKENIQVIpIHBh cnNlcigwKTsKLSAgICAgICAgICAgIGlmIChzc3RhdGUgPT0gJ2MnKSAgICAgICAgICAvKiBpZiBN QUMgY29ubmVjdCAqLwotICAgICAgICAgICAgICBzc3RhdGUgPSAwOwotICAgICAgICAgICAgaWYg KHNzdGF0ZSkKLSAgICAgICAgICAgICAgcHJvdG8oKTsKLSAgICAgICAgfQotICAgIH0KLSNlbHNl IC8qIE5vdCBNQUMgKi8KLQotI2lmbmRlZiBOT1NQTAotLyoKLSAgSWYgaW50ZXJhY3RpdmUgY29t bWFuZHMgd2VyZSBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lICh1c2luZyB0aGUKLSAgLUMgImNv bW1hbmQsIGNvbW1hbmQsIC4uLiIgb3B0aW9uKSwgYXNzaWduIHRoZW0gdG8gYSBtYWNybyBjYWxs ZWQKLSAgImNsX2NvbW1hbmRzIiwgdGhlbiBleGVjdXRlIHRoZSBtYWNybyBhbmQgbGVhdmUgaXQg ZGVmaW5lZCBmb3IKLSAgc3Vic2VxdWVudCByZS1leGVjdXRpb24gaWYgZGVzaXJlZC4KLSovCi0g ICAgaWYgKGNsY21kcykgeyAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgZm9yIC1DIGNv bW1hbmRzICovCi0gICAgICAgIGludCB4OwotICAgICAgICB4ID0gYWRkbWFjKCJjbF9jb21tYW5k cyIsY2xjbWRzKTsgLyogUHV0IG1hY3JvIGluIHRhYmxlICovCi0gICAgICAgIGlmICh4ID4gLTEp IHsgICAgICAgICAgICAgICAgICAgLyogSWYgc3VjY2Vzc2Z1bCwgKi8KLSAgICAgICAgICAgIGRv ZG8oeCxOVUxMLENGX0NNREwpOyAgICAgICAvKiBzZXQgdXAgZm9yIG1hY3JvIGV4ZWN1dGlvbiAq LwotICAgICAgICAgICAgd2hpbGUgKG1hY2x2bCA+IC0xKSB7ICAgICAgIC8qIExvb3AgZ2V0dGlu ZyBtYWNybyBjb21tYW5kcy4gKi8KLSAgICAgICAgICAgICAgICBzc3RhdGUgPSAoQ0hBUikgcGFy c2VyKDEpOwotICAgICAgICAgICAgICAgIGlmIChzc3RhdGUpIHByb3RvKCk7ICAgIC8qIEVudGVy IHByb3RvY29sIGlmIHJlcXVlc3RlZC4gKi8KLSNpZmRlZiBOVFNJRwotICAgICAgICAgICAgICAg IGNrX2loKCk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot ICAgICAgICBkZWJ1ZyhGMTAwLCJkb2ljcCBjYWxsaW5nIGhlcmFsZCIsIiIsMCk7Ci0gICAgICAg IGhlcmFsZCgpOwotICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgIHdoaWxlKDEpIHsgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIExvb3AgZ2V0dGluZyBjb21tYW5kcy4gKi8KLSAgICAg ICAgc3N0YXRlID0gKENIQVIpIHBhcnNlcigwKTsKLSAgICAgICAgaWYgKHNzdGF0ZSkgcHJvdG8o KTsgICAgICAgICAgICAvKiBFbnRlciBwcm90b2NvbCBpZiByZXF1ZXN0ZWQuICovCi0jaWZkZWYg TlRTSUcKLSAgICAgICBja19paCgpOwotI2VuZGlmIC8qIE5UU0lHICovCi0gICAgfQotI2lmZGVm IE5UU0lHCi0gICAgY2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7Ci0jZW5kaWYgLyogTlRTSUcgKi8K LSNlbmRpZiAvKiBNQUMgKi8KLX0KLQotVk9JRAotI2lmZGVmIENLX0FOU0lDCi1mYWlsaWNwKHZv aWQgKiB0aHJlYWRpbmZvKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLWZhaWxpY3AodGhyZWFkaW5m bykgVk9JRCAqIHRocmVhZGluZm87Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSNpZmRlZiBH RU1ET1MKLSAgICBjY19jbGVhbigpOwotI2VuZGlmIC8qIEdFTURPUyAqLwotICAgIGZpeGNtZCgp OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvcCBjb21tYW5kIHN0YWNrcywgZXRjLiAq LwotICAgIGNsY21kcyA9IE5VTEw7Ci0gICAgZGVidWcoRjEwMCwiY2tjbWFpIGdvdCBpbnRlcnJ1 cHQiLCIiLDApOwotfQotI2VuZGlmIC8qIE5PSUNQICovCi0KLSNpZm5kZWYgTk9JQ1AKLVZPSUQK LSNpZmRlZiBDS19BTlNJQwotZG9jbWRmaWxlKHZvaWQgKiB0aHJlYWRpbmZvKSAgICAgICAgICAg IC8qIEV4ZWN1dGUgYXBwbGljYXRpb24gZmlsZSAqLwotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLWRv Y21kZmlsZSh0aHJlYWRpbmZvKSBWT0lEICogdGhyZWFkaW5mbzsKLSNlbmRpZiAvKiBDS19BTlNJ QyAqLwotLyogZG9jbWRmaWxlICovIHsKLSNpZmRlZiBOVFNJRwotICAgIGNvbmNiKChjaGFyKWVz Y2FwZSk7Ci0gICAgc2V0aW50KCk7Ci0gICAgaWYgKHRocmVhZGluZm8pIHsgICAgICAgICAgICAg ICAgICAgLyogVGhyZWFkIGxvY2FsIHN0b3JhZ2UuLi4gKi8KLSAgICAgICAgVGxzU2V0VmFsdWUo VGxzSW5kZXgsdGhyZWFkaW5mbyk7Ci0gICAgICAgIGRlYnVnKEYxMDAsICJkb2NtZGZpbGUgY2Fs bGVkIHdpdGggdGhyZWFkaW5mbyBibG9jayIsIiIsIDApOwotICAgIH0gZWxzZSBkZWJ1ZyhGMTAw LCAiZG9jbWRmaWxlIC0gdGhyZWFkaW5mbyBpcyBOVUxMIiwgIiIsIDApOwotI2VuZGlmIC8qIE5U U0lHICovCi0jaWZkZWYgQ0tfTE9HSU4KLSNpZmRlZiBJS1NECi0jaWZkZWYgTlQKLSAgICBpZiAo aW5zZXJ2ZXIpCi0gICAgICBzZXRudGNyZWRzKCk7Ci0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAv KiBJS1NEICovCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSAgICBkZWJ1ZyhGMTEwLCJtYWluIGNt ZGZpbCIsY21kZmlsLDApOwotI2lmbmRlZiBOT1NQTAotICAgIGFkZG1hYygiXFwlMCIsY21kZmls KTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgIGRvdGFrZShjbWRmaWwpOwkJCS8qIFNldCB1cCB0 aGUgY29tbWFuZCBmaWxlICovCi0gICAgaWYgKHRsZXZlbCA+IC0xKQkJCS8qIFJlbWVtYmVyIHdl IGRpZCB0aGlzICovCi0gICAgICBjZmlsZWYgPSAxOwotICAgIHdoaWxlICh0bGV2ZWwgPiAtMSkg eyAgICAgICAgICAgICAgIC8qIEV4ZWN1dGUgaXQgdW50aWwgaXQgcnVucyBvdXQuICovCi0gICAg ICAgIHNzdGF0ZSA9IHBhcnNlcigxKTsgICAgICAgICAgICAgLyogTG9vcCBnZXR0aW5nIGNvbW1h bmRzLiAqLwotICAgICAgICBpZiAoc3N0YXRlKSBwcm90bygpOyAgICAgICAgICAgIC8qIEVudGVy IHByb3RvY29sIGlmIHJlcXVlc3RlZC4gKi8KLSNpZmRlZiBOVFNJRwotICAgICAgICBja19paCgp OwotI2VuZGlmIC8qIE5UU0lHICovCi0gICAgfQotCi0jaWZkZWYgTlRTSUcKLSAgICBja1RocmVh ZEVuZCh0aHJlYWRpbmZvKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotICAgIHJldHVybjsKLX0KLQot Vk9JRAotI2lmZGVmIENLX0FOU0lDCi1mYWlsY21kZmlsZSh2b2lkICogdGhyZWFkaW5mbykKLSNl bHNlIC8qIENLX0FOU0lDICovCi1mYWlsY21kZmlsZSh0aHJlYWRpbmZvKSBWT0lEICogdGhyZWFk aW5mbzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogZmFpbGNtZGZpbGUgKi8gewotI2lmZGVm IEdFTURPUwotICAgIGNjX2NsZWFuKCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEF0YXJp OiBDbGVhbiB1cCBhZnRlciBeQy10cmFwLiAqLwotI2VuZGlmIC8qIEdFTURPUyAqLwotICAgIGZp eGNtZCgpOwotICAgIGlmICghY2ZpbGVmKSB7Ci0JY29ub2xsKCJJbnRlcnJ1cHRlZCBkdXJpbmcg aW5pdGlhbGl6YXRpb24gb3IgXAotY29tbWFuZC1saW5lIHByb2Nlc3NpbmcuIik7Ci0JY29ub2xs KCJDLUtlcm1pdCBxdWl0dGluZy4uLiIpOwotICAgIH0KLSAgICBkb2V4aXQoQkFEX0VYSVQsLTEp OyAgICAgICAgICAgICAgICAvKiBFeGl0IHdpdGggYmFkIHN0YXR1cy4gKi8KLX0KLSNlbmRpZiAv KiBOT0lDUCAqLwotCi0jaWZuZGVmIE5PWEZFUgotVk9JRAotc2V0cHJlZml4KHopIGludCB6OyB7 ICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWwgY29udHJvbC1jaGFyIHByZWZpeGluZyAqLwot I2lmZGVmIENLX1NQRUVECi0gICAgaW50IGksIHZhbDsKLQotICAgIHByZWZpeGluZyA9IHo7Ci0g ICAgcHRhYltwcm90b2NvbF0ucHJlZml4ID0gcHJlZml4aW5nOwotICAgIGRlYnVnKEYxMDEsInNl dHByZWZpeCIsIiIscHJlZml4aW5nKTsKLSAgICBzd2l0Y2ggKHopIHsKLSAgICAgIGNhc2UgUFhf QUxMOiAgICAgICAgICAgICAgICAgICAgICAvKiBBbGwgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAg ICAgIC8qIERvbid0IGxldCBDbGVhci1DaGFubmVsIGJlIGRlcGVuZGVudCBvbiBwcmVmaXhpbmcg Ki8KLSAgICAgICAgY2xlYXJycSA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBUdXJuIG9mZiBj bGVhcmNoYW5uZWwsIGZhbGwgdGhydSAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgIGNh c2UgUFhfTk9OOiAgICAgICAgICAgICAgICAgICAgICAvKiBOb25lICovCi0gICAgICAgIHZhbCA9 ICh6ID09IFBYX0FMTCkgPyAxIDogMDsKLSAgICAgICAgZm9yIChpID0KLSNpZmRlZiBVTlBSRUZJ WFpFUk8KLSAgICAgICAgICAgICAwCi0jZWxzZQotICAgICAgICAgICAgIDEKLSNlbmRpZiAvKiBV TlBSRUZJWFpFUk8gKi8KLSAgICAgICAgICAgICA7IGkgPCAzMjsgaSsrKQotICAgICAgICAgIGN0 bHBbaV0gPSB2YWw7Ci0gICAgICAgIGZvciAoaSA9IDEyNzsgaSA8IDE2MDsgaSsrKSBjdGxwW2ld ID0gdmFsOwotICAgICAgICBjdGxwWyh1bnNpZ25lZCkyNTVdID0gdmFsOwotICAgICAgICBpZiAo eiA9PSBQWF9OT04pIHsgICAgICAgICAgICAgIC8qIFRoZXNlIGFyZSBuZXZlciBzYWZlICovCi0g ICAgICAgICAgICBpZiAobmV0d29yaykgeyAgICAgICAgICAgICAgLyogQXNzdW1lIG5ldHdvcmsg PSB0ZWxuZXQgb3IgcmxvZ2luICovCi0gICAgICAgICAgICAgICAgY3RscFtDUl0gPSAxOyAgICAg ICAgICAgLyogUHJlZml4IENSIGJlY2F1c2Ugb2YgTlZUIHJ1bGVzICovCi0gICAgICAgICAgICAg ICAgY3RscFtYT05dID0gY3RscFtYT0ZGXSA9IDE7IC8qIEJlY2F1c2Ugb2YgVGVsbmV0IHNlcnZl ciAqLwotICAgICAgICAgICAgICAgIGN0bHBbMTI3XSA9IGN0bHBbMjU1XSA9IDE7ICAvKiBUZWxu ZXQgSUFDICovCi0gICAgICAgICAgICAgICAgY3RscFtteXN0Y2hdID0gY3RscFtteXN0Y2grMTI4 XSA9IDE7IC8qIEtlcm1pdCBwYWNrZXQgc3RhcnQgKi8KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g ICAgICAgICAgICAgICAgY3RscFtDUl0gPSBjdGxwWzI1NV0gPSBjdGxwW215c3RjaF0gPSBjdGxw W215c3RjaCsxMjhdID0gMTsKLSAgICAgICAgICAgICAgICBpZiAoZmxvdyA9PSBGTE9fWE9OWCkg ICAgICAgLyogWG9uL1hvZmYgZm9yY2VzIHByZWZpeGluZyAqLwotICAgICAgICAgICAgICAgICAg Y3RscFtYT05dID0gY3RscFtYT0ZGXSA9IGN0bHBbWE9OKzEyOF0gPSBjdGxwW1hPRkYrMTI4XSA9 IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNh c2UgUFhfQ0FVOiAgICAgICAgICAgICAgICAgICAgICAvKiBDYXV0aW91cyBvciBNaW5pbWFsICov Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAvKiBEb24ndCBsZXQgQ0xFQVItQ0hBTk5FTCBiZSBk ZXBlbmRlbnQgb24gUHJlZml4aW5nICovCi0gICAgICAgIGNsZWFycnEgPSAwOyAgICAgICAgICAg ICAgICAgICAgLyogVHVybiBvZmYgY2xlYXJjaGFubmVsICovCi0jZW5kaWYgLyogQ09NTUVOVCAq LwotICAgICAgY2FzZSBQWF9XSUw6ICAgICAgICAgICAgICAgICAgICAgIC8qIE1pbmltYWwgKCJ3 aWxkIikgKi8KLSAgICAgICAgY3RscFswXSA9IDE7ICAgICAgICAgICAgICAgICAgICAvKiBEb2Vz IG5vdCBpbmNsdWRlIDAgKi8KLSAgICAgICAgZm9yIChpID0gMTsgaSA8IDMyOyBpKyspCi0gICAg ICAgICAgY3RscFtpXSA9IDA7Ci0gICAgICAgIGZvciAoaSA9IDEyNzsgaSA8IDE2MDsgaSsrKQot ICAgICAgICAgIGN0bHBbaV0gPSAwOwotICAgICAgICBjdGxwW215c3RjaF0gPSBjdGxwW215c3Rj aCsxMjhdID0gMTsgLyogS2VybWl0IHN0YXJ0IG9mIHBhY2tldCAqLwotICAgICAgICBpZiAoc2Vv bCAhPSAxMykKLSAgICAgICAgICBjdGxwW3Nlb2xdID0gY3RscFtzZW9sKzEyOF0gPSAxOyAvKiBL ZXJtaXQgZW5kICovCi0gICAgICAgIGN0bHBbMTNdID0gY3RscFsxNDFdID0gMTsgICAgICAgLyog SW4gY2FzZSBvZiBURUxORVQgKE5WVCBydWxlcykgKi8KLSAgICAgICAgY3RscFsodW5zaWduZWQp MjU1XSA9IDE7ICAgICAgICAvKiBEaXR0byAqLwotCi0gICAgICAgIC8qIF5ELCBeSiwgXk0sIG9y IF5VIGZvbGxvd2VkIGJ5IHRpbGRlIHRyaWdnZXIgUmxvZ2luIGVzY2FwZSAqLwotCi0gICAgICAg IGN0bHBbNF0gID0gY3RscFs0KzEyOF0gID0gMTsgICAgLyogSW4gY2FzZSBvZiBSTE9HSU4gKi8K LSAgICAgICAgY3RscFsxMF0gPSBjdGxwWzEwKzEyOF0gPSAxOyAgICAvKiBJbiBjYXNlIG9mIFJM T0dJTiAqLwotICAgICAgICBjdGxwWzIxXSA9IGN0bHBbMjErMTI4XSA9IDE7ICAgIC8qIEluIGNh c2Ugb2YgUkxPR0lOICovCi0KLSAgICAgICAgaWYgKGZsb3cgPT0gRkxPX1hPTlggfHwgICAgICAg ICAvKiBYb24vWG9mZiBmb3JjZXMgcHJlZml4aW5nIHRoZXNlICovCi0gICAgICAgICAgICBwcmVm aXhpbmcgPT0gUFhfQ0FVIHx8ICAgICAgLyogU28gZG9lcyBDQVVUSU9VUyAqLwotICAgICAgICAg ICAgbmV0d29yaykgICAgICAgICAgICAgICAgICAgIC8qIE5ldHdvcmtzIHRvby4uLiAqLwotICAg ICAgICAgIGN0bHBbWE9OXSA9IGN0bHBbWE9GRl0gPSBjdGxwW1hPTisxMjhdID0gY3RscFtYT0ZG KzEyOF0gPSAxOwotICAgICAgICBpZiAocHJlZml4aW5nID09IFBYX0NBVSkgeyAgICAgIC8qIENh dXRpb3VzIC0gYWRkIHNvbWUgbW9yZSAqLwotI2lmZGVmIFVOUFJFRklYWkVSTwotICAgICAgICAg ICAgY3RscFswXSA9IDE7Ci0jZW5kaWYgLyogVU5QUkVGSVhaRVJPICovCi0gICAgICAgICAgICBj dGxwWzNdICAgPSBjdGxwWzE2XSAgPSAxOyAgICAgICAgICAgICAvKiBeQywgRExFICovCi0gICAg ICAgICAgICBjdGxwWzE0XSAgPSBjdGxwWzE1XSAgPSAxOyAgICAgICAgICAgICAvKiBTTy9TSSAq LwotICAgICAgICAgICAgY3RscFsyNF0gID0gY3RscFsyNV0gID0gMTsgICAgICAgICAgICAgLyog Vk1TIG1pZ2h0IG5lZWQgdGhlc2UgKi8KLSAgICAgICAgICAgIGN0bHBbMjZdICA9IGN0bHBbMjYr MTI4XSA9IDE7ICAgICAgICAgIC8qIFVOSVggc3VzcGVuZCAqLwotICAgICAgICAgICAgY3RscFsy OF0gID0gY3RscFsyOV0gID0gY3RscFszMF0gID0gMTsgLyogQXNzb3J0ZWQgZXNjIGNoYXJzICov Ci0gICAgICAgICAgICBjdGxwWzEzMV0gPSBjdGxwWzE0MV0gPSBjdGxwWzE0NF0gPSAxOyAvKiBh bmQgOC1iaXQgdmVyc2lvbnMgKi8KLSAgICAgICAgICAgIGN0bHBbKHVuc2lnbmVkKTI1NV0gPSBj dGxwWzE1Nl0gPSBjdGxwWzE1N10gPSBjdGxwWzE1OF0gPSAxOwotICAgICAgICB9Ci0gICAgICAg IGJyZWFrOwotICAgIH0KLSNlbmRpZiAvKiBDS19TUEVFRCAqLwotfQotI2VuZGlmIC8qIE5PWEZF UiAqLwotCi1WT0lECi1tYWtldmVyKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog TWFrZSB2ZXJzaW9uIHN0cmluZyBmcm9tIHBpZWNlcyAqLwotICAgIGludCB4LCB5OwotICAgIGNo YXIgKiBzOwotI2lmbmRlZiBPUzIKLSNpZm5kZWYgTUFDCi0gICAgY2tfc194dmVyID0gY2tfc192 ZXI7ICAgICAgICAgICAgICAgLyogRmlsbCBpbiBDLUtlcm1pdCB2ZXJzaW9uIG51bWJlciAqLwot ICAgIGNrX2xfeHZlciA9IGNrX2xfdmVyOyAgICAgICAgICAgICAgIC8qIGZvciBVTklYLCBWTVMs IGV0Yy4gKi8KLSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB4ID0gc3Ry bGVuKGNrX3NfbmFtZSk7Ci0gICAgeSA9IHN0cmxlbihja19zX3h2ZXIpOwotICAgIGlmICh5ICsg eCArIDEgPCBDS1ZFUkxFTikgewotICAgICAgICBja21ha21zZyh2ZXJzaW8sQ0tWRVJMRU4sY2tf c19uYW1lLCIgIixja19zX3h2ZXIsTlVMTCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2tzdHJu Y3B5KHZlcnNpbywiQy1LZXJtaXQiLENLVkVSTEVOKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K LSAgICB4ICs9IHkgKyAxOwotICAKLSAgICBzID0gIiBPUEVOIFNPVVJDRToiOwkJLyogQy1LZXJt aXQgOS4wIGFuZCBsYXRlciAqLwotICAgIHkgPSBzdHJsZW4ocyk7Ci0gICAgaWYgKENLVkVSTEVO IDwgeCArIHkgKyAxKQotICAgICAgcmV0dXJuOwotICAgIGNrc3RybmNhdCh2ZXJzaW8scyxDS1ZF UkxFTik7Ci0KLSAgICB4ICs9IHkgKyAxOwotICAgIGlmICgqY2tfc193aG8pIHsKLSAgICAgICAg eSA9IHN0cmxlbihja19zX3dobyk7Ci0gICAgICAgIGlmIChDS1ZFUkxFTiA8IHggKyB5ICsgMSkK LSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNrc3RybmNhdCh2ZXJzaW8sIi0iLENLVkVSTEVO KTsKLSAgICAgICAgY2tzdHJuY2F0KHZlcnNpbyxja19zX3dobyxDS1ZFUkxFTik7Ci0gICAgfQot ICAgIHggKz0geSArIDE7Ci0gICAgeSA9IHN0cmxlbihja19zX3Rlc3QpOwotICAgIGlmICh5ID4g MCAmJiB5ICsgeCArIDEgPCBDS1ZFUkxFTikgewotICAgICAgICBja3N0cm5jYXQodmVyc2lvLCIg IixDS1ZFUkxFTik7Ci0gICAgICAgIGNrc3RybmNhdCh2ZXJzaW8sY2tfc190ZXN0LENLVkVSTEVO KTsKLSAgICAgICAgeCArPSB5ICsgMTsKLSAgICAgICAgeSA9IHN0cmxlbihja19zX3R2ZXIpOwot ICAgICAgICBpZiAoeSA+IDAgJiYgeSArIHggKyAxIDwgQ0tWRVJMRU4pIHsKLSAgICAgICAgICAg IGNrc3RybmNhdCh2ZXJzaW8sIi4iLENLVkVSTEVOKTsKLSAgICAgICAgICAgIGNrc3RybmNhdCh2 ZXJzaW8sY2tfc190dmVyLENLVkVSTEVOKTsKLSAgICAgICAgICAgIHggKz0geSArIDE7Ci0gICAg ICAgIH0KLSAgICB9Ci0gICAgeSA9IHN0cmxlbihja19zX2RhdGUpOwotICAgIGlmICh5ID4gMCAm JiB5ICsgeCArIDIgPCBDS1ZFUkxFTikgewotICAgICAgICBja3N0cm5jYXQodmVyc2lvLCIsICIs Q0tWRVJMRU4pOwotICAgICAgICBja3N0cm5jYXQodmVyc2lvLGNrX3NfZGF0ZSxDS1ZFUkxFTik7 Ci0gICAgfQotICAgIHZlcm51bSA9IGNrX2xfdmVyOwotICAgIHh2ZXJudW0gPSBja19sX3h2ZXI7 Ci0gICAgZGVidWcoRjExMCwiS2VybWl0IHZlcnNpb24iLHZlcnNpbywwKTsKLX0KLQotdW5pb24g Y2tfc2hvcnQgc2hvcnRieXRlczsgICAgICAgICAgICAgIC8qIEZvciBkZXRlcm1pbmluZyBieXRl IG9yZGVyICovCi1pbnQgYnl0ZW9yZGVyID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogMCA9 IEJpZyBFbmRpYW47IDEgPSBMaXR0bGUgRW5kaWFuICovCi1pbnQgYmlnZW5kaWFuID0gMTsKLS8q IE5PVEU6IE1VU1QgQkUgMCBvciAxIC0gbm90aGluZyBlbHNlICovCi0KLSNpZm5kZWYgTk9TUEwK LSNkZWZpbmUgU0NSSVBUTEVOIDEwMjQwCi0jZW5kaWYJLyogTk9TUEwgKi8KLQotI2lmZGVmIE5F VENPTk4KLSNpZm5kZWYgTk9DTURMCi0jaWZuZGVmIE5PVVJMCi1WT0lECi1kb3VybCgpIHsKLSAg ICBpbnQgcmMgPSAwOwotICAgIGNoYXIgKiBwb3J0ID0gTlVMTDsKLSAgICBleHRlcm4gaW50IHR0 bnByb3RvOwotICAgIGV4dGVybiBzdHJ1Y3QgdXJsZGF0YSBnX3VybDsKLQotI2lmZGVmIENPTU1F TlQKLSAgICAvKiBOT1RFOiBkZWJ1ZygpIGRvZXNuJ3Qgd29yayB5ZXQgLSBtdXN0IHVzZSBwcmlu dGYncyAqLwotICAgIHByaW50ZigiVVJMOiAgJXNcbiIsZ191cmwuc2F2ID8gZ191cmwuc2F2IDog Iihub25lKSIpOwotICAgIHByaW50ZigiVHlwZTogJXNcbiIsZ191cmwuc3ZjID8gZ191cmwuc3Zj IDogIihub25lKSIpOwotICAgIHByaW50ZigiVXNlcjogJXNcbiIsZ191cmwudXNyID8gZ191cmwu dXNyIDogIihub25lKSIpOwotICAgIHByaW50ZigiUGFzczogJXNcbiIsZ191cmwucHN3ID8gZ191 cmwucHN3IDogIihub25lKSIpOwotICAgIHByaW50ZigiSG9zdDogJXNcbiIsZ191cmwuaG9zID8g Z191cmwuaG9zIDogIihub25lKSIpOwotLyogIHByaW50ZigiUG9ydDogJXNcbiIsZ191cmwucG9y ID8gZ191cmwucG9yIDogIihub25lKSIpOyAqLwotICAgIHByaW50ZigiUGF0aDogJXNcbiIsZ191 cmwucHRoID8gZ191cmwucHRoIDogIihub25lKSIpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQot ICAgIGlmICghY2tzdHJjbXAoZ191cmwuc3ZjLCJpa3NkIiwtMSwwKSB8fAotICAgICAgICAhY2tz dHJjbXAoZ191cmwuc3ZjLCJrZXJtaXQiLC0xLDApKSB7Ci0gICAgICAgIGV4dGVybiBjaGFyIHB3 YnVmW107Ci0gICAgICAgIGV4dGVybiBpbnQgcHdmbGc7Ci0jaWZkZWYgT1MyCi0gICAgICAgIGV4 dGVybiBpbnQgcHdjcnlwdDsKLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgICAgICBpZiAoIWdfdXJs LmhvcykgewotICAgICAgICAgICAgcHJpbnRmKCI/SW5jb21wbGV0ZSBJS1NEIFVSTFxuIik7Ci0g ICAgICAgICAgICBkb2V4aXQoQkFEX0VYSVQsMSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFn X3VybC51c3IpCi0gICAgICAgICAgICBtYWtlc3RyKCZnX3VybC51c3IsImFub255bW91cyIpOwot ICAgICAgICBpZiAoIWdfdXJsLnBzdykgewotICAgICAgICAgICAgY2hhciAqIHRtcGJ1ZiA9IE5V TEw7Ci0gICAgICAgICAgICBpZiAoISh0bXBidWYgPSAoY2hhciAqKW1hbGxvYygxMDI0KSkpCi0g ICAgICAgICAgICAgICAgZmF0YWwoImRvdXJsOiBvdXQgb2YgbWVtb3J5Iik7Ci0gICAgICAgICAg ICBpZiAoIWNrc3RyY21wKGdfdXJsLnVzciwiYW5vbnltb3VzIiwtMSwwKSkgewotICAgICAgICAg ICAgICAgIGNrbWFrbXNnKHRtcGJ1ZiwxMDI0LHVpZGJ1ZiwiQCIsbXlob3N0LE5VTEwpOwotICAg ICAgICAgICAgICAgIG1ha2VzdHIoJmdfdXJsLnBzdyx0bXBidWYpOwotICAgICAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgICAgICByZWFkcGFzcygiIFBhc3N3b3JkOiIsdG1wYnVmLDEwMjQp OwotICAgICAgICAgICAgICAgIG1ha2VzdHIoJmdfdXJsLnBzdyx0bXBidWYpOwotICAgICAgICAg ICAgfQotICAgICAgICAgICAgZnJlZSh0bXBidWYpOwotICAgICAgICB9Ci0gICAgICAgIHBvcnQg PSAia2VybWl0IjsKLSAgICAgICAgdHRucHJvdG8gPSBOUF9URUxORVQ7Ci0gICAgICAgIG5ldHR5 cGUgPSBORVRfVENQQjsKLSAgICAgICAgbWRtdHlwID0gLW5ldHR5cGU7Ci0gICAgICAgIGxvY2Fs ID0gLTE7Ci0gICAgICAgIGNrc3RybmNweSh1aWRidWYsZ191cmwudXNyLFVJREJVRkxFTik7Ci0g ICAgICAgIGlmIChnX3VybC5wc3cpIHsKLSAgICAgICAgICAgIGNrc3RybmNweShwd2J1ZixnX3Vy bC5wc3csUFdCVUZMKTsKLSAgICAgICAgICAgIHB3ZmxnID0gMTsKLSNpZmRlZiBPUzIKLSAgICAg ICAgICAgIHB3Y3J5cHQgPSAwOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICB9Ci0gICAgICAg IGNrbWFrbXNnKHR0bmFtZSwKLSAgICAgICAgICAgICAgICAgVFROQU1MRU4sCi0gICAgICAgICAg ICAgICAgIGdfdXJsLmhvcywKLSAgICAgICAgICAgICAgICAgIjoiLAotICAgICAgICAgICAgICAg ICBnX3VybC5wb3IgPyBnX3VybC5wb3IgOiBwb3J0LAotICAgICAgICAgICAgICAgICBOVUxMCi0g ICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIHJjID0gdHRvcGVuKHR0bmFtZSwmbG9jYWwsbWRt dHlwLDApOwotICAgICAgICBpZiAocmMgPiAtMSkgewotICAgICAgICAgICAgbmV0d29yayA9IDE7 Ci0gICAgICAgICAgICBleGl0b25jbG9zZSA9IDE7Ci0jaWZkZWYgQ0tMT0dESUFMCi0gICAgICAg ICAgICBkb2xvZ25ldCgpOwotI2VuZGlmIC8qIENLTE9HRElBTCAqLwotICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgcHJpbnRmKCI/Q29ubmVjdGlvbiBmYWlsZWQ6ICVzXG4iLGdfdXJsLnNh dik7Ci0gICAgICAgICAgICBkb2V4aXQoQkFEX0VYSVQsMSk7Ci0gICAgICAgIH0KLSAgICAgICAg LyogQWxzbyBuZWVkIHRvIGNoZWNrIGhlcmUgZm9yIHNlY3VyZSBhdXRoZW50aWNhdGlvbiBhbHJl YWR5IGRvbmUgKi8KLQotI2lmZGVmIE5PU1BMCi0gICAgICAgIGNmbGcgPSAxOwotI2Vsc2UKLQl7 Ci0gICAgICAgICAgICBjaGFyICogc2NyaXB0ID0gTlVMTDsKLSAgICAgICAgICAgIGlmICghKHNj cmlwdCA9IChjaGFyICopbWFsbG9jKFNDUklQVExFTikpKQotICAgICAgICAgICAgICBmYXRhbCgi ZG91cmw6IG91dCBvZiBtZW1vcnkiKTsKLSAgICAgICAgICAgIGlmICghZ191cmwucHRoKSB7ICAg ICAgICAgICAvKiBXcml0ZSB0aGUgYXBwcm9wcmlhdGUgc2NyaXB0ICovCi0JCWNmbGcgPSAxOwot ICAgICAgICAgICAgICAgIGNrbWFreG1zZyhzY3JpcHQsU0NSSVBUTEVOLAotCQkJICAiaWYgbm90 IGVxIHtcXHYoYXV0aHN0YXRlKX0ge3VzZXJ9ICIsCi0JCQkgICJpZiBub3QgZXEge1xcdihhdXRo c3RhdGUpfSB7dmFsaWR9IHsgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbW90ZSBs b2dpbiAiLCAvKiBObyBwYXRoICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGdfdXJsLnVz ciwgICAgICAgLyogSnVzdCBsb2cgaW4gYW5kIENPTk5FQ1QgKi8KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgIiAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBnX3VybC5wc3csCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICIsIGlmIGZhaWwgZXhpdCAxIHtJS1NEIGxvZ2luIGZhaWxl ZH0gfSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICIsIGNvbm5lY3QiLAotICAgICAgICAg ICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLQkJLyogcHJpbnRmKCJDTENN RFMgMTogJXNcbiIsc2NyaXB0KTsgKi8KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICAgICAgLyogZG9lcyB0aGUgcGF0aCBzcGVjaWZ5IGEgZmlsZSBvciBhIGRpcmVjdG9yeT8gKi8K LSAgICAgICAgICAgICAgICBpbnQgbGVuID0gc3RybGVuKGdfdXJsLnB0aCk7Ci0gICAgICAgICAg ICAgICAgaWYgKElTRElSU0VQKGdfdXJsLnB0aFtsZW4tMV0pKSB7Ci0JCSAgICBja21ha3htc2co c2NyaXB0LFNDUklQVExFTiwgLyogRGlyZWN0b3J5IG5hbWUgZ2l2ZW4gKi8KLQkJCSAgICAgICJp ZiBub3QgZXEge1xcdihhdXRoc3RhdGUpfSB7dXNlcn0gXAotaWYgbm90IGVxIHtcXHYoYXV0aHN0 YXRlKX0ge3ZhbGlkfSB7IHJlbW90ZSBsb2dpbiAiLAotCQkJICAgICAgZ191cmwudXNyLAotCQkJ ICAgICAgIiAiLAotCQkJICAgICAgZ191cmwucHN3LAotCQkJICAgICAgIiwgaWYgZmFpbCBleGl0 IDEge0lLU0QgbG9naW4gZmFpbGVkfSB9IiwKLQkJCSAgICAgICIsIHNldCBtYWNybyBlcnJvciBv biIsCi0JCQkgICAgICAiLCBzZXQgeGZlciBkaXNwbCBicmllZiIsCi0JCQkgICAgICAiLCBzZXQg eGZlciBiZWxsIG9mZiIsCi0JCQkgICAgICAiLCByZW1vdGUgY2QgIiwKLQkJCSAgICAgIGdfdXJs LnB0aCwKLQkJCSAgICAgICIsIGxpbmVvdXQgZGlyZWN0b3J5IiwKLQkJCSAgICAgICIsIGNvbm5l Y3QiCi0JCQkgICAgICApOwotCQkgICAgLyogcHJpbnRmKCJDTENNRFMgMjogJXNcbiIsc2NyaXB0 KTsgKi8KLQkJfSBlbHNlIHsKLQkJICAgIGNrbWFreG1zZyhzY3JpcHQsU0NSSVBUTEVOLCAvKiBQ YXRoIGdpdmVuLCB0cnkgdG8gR0VUICovCi0JCQkgICAgICAiaWYgbm90IGVxIHtcXHYoYXV0aHN0 YXRlKX0ge3VzZXJ9IFwKLWlmIG5vdCBlcSB7XFx2KGF1dGhzdGF0ZSl9IHt2YWxpZH0geyByZW1v dGUgbG9naW4gIiwKLQkJCSAgICAgIGdfdXJsLnVzciwKLQkJCSAgICAgICIgIiwKLQkJCSAgICAg IGdfdXJsLnBzdywKLQkJCSAgICAgICIsIGlmIGZhaWwgZXhpdCAxIHtJS1NEIGxvZ2luIGZhaWxl ZH0gfSIsCi0JCQkgICAgICAiLCBzZXQgeGZlciBkaXNwbCBicmllZiIsCi0JCQkgICAgICAiLCBz ZXQgeGZlciBiZWxsIG9mZiIsCi0JCQkgICAgICAiLCBnZXQgIiwKLQkJCSAgICAgIGdfdXJsLnB0 aCwKLQkJCSAgICAgICIsIC5yYyA6PSBcXHYoc3RhdHVzKSIsCi0JCQkgICAgICAiLCBpZiBvcGVu IGNvbm5lY3Rpb24gYnllIiwKLQkJCSAgICAgICIsIGV4aXQgXFxtKHJjKSIKLQkJCSAgICAgICk7 Ci0JCSAgICAvKiBwcmludGYoIkNMQ01EUyAyOiAlc1xuIixzY3JpcHQpOyAqLwotCQl9Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBjbGNtZHMgPSBzY3JpcHQ7CQkvKiBNYWtlIHRoaXMgb3Vy IC1DIGNtZGxpbmUgbWFjcm8gKi8KLQkgICAgLyogcHJpbnRmKCJIQVZFVVJMPSVkXG4iLGhhdmV1 cmwpOyAqLwotICAgICAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICB9IGVsc2UgewotICAg ICAgICBpZiAoY2tzdHJjbXAoZ191cmwuc3ZjLCJ0ZWxuZXQiLC0xLDApICYmCi0jaWZkZWYgU1NI QlVJTFRJTgotICAgICAgICAgICAgY2tzdHJjbXAoZ191cmwuc3ZjLCJzc2giLC0xLDApICYmCi0j ZW5kaWYgLyogU1NIQlVJTFRJTiAqLwotICAgICAgICAgICAgY2tzdHJjbXAoZ191cmwuc3ZjLCJm dHAiLC0xLDApKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgJXMgVVJMcyBub3Qgc3Vw cG9ydGVkXG4iLAotICAgICAgICAgICAgICAgICAgIGdfdXJsLnN2YyA/IGdfdXJsLnN2YyA6ICIi KTsKLSAgICAgICAgICAgIGRvZXhpdChCQURfRVhJVCwxKTsKLSAgICAgICAgfQotICAgIH0KLX0K LSNlbmRpZiAvKiBOT0NNREwgKi8KLSNlbmRpZiAvKiBORVRDT05OICovCi0jZW5kaWYgLyogTk9V UkwgKi8KLQotLyoKLSAgbWFpbigpLi4uCi0KLSAgSWYgeW91IGdldCBjb21wbGFpbnRzIGFib3V0 ICJtYWluOiByZXR1cm4gdHlwZSBpcyBub3QgYmxhaCIsCi0gIGRlZmluZSBNQUlOVFlQRSBvbiB0 aGUgQ0MgY29tbWFuZCBsaW5lLCBlLmcuICJDRkxBR1M9LURNQUlOVFlQRT1ibGFoIgotICAod2hl cmUgImJsYWgiIGlzIGludCwgbG9uZywgb3Igd2hhdGV2ZXIpLgotCi0gIElmIHRoZSBjb21wbGFp bnQgaXMgIkF0dGVtcHQgdG8gcmV0dXJuIGEgdmFsdWUgZnJvbSBhIGZ1bmN0aW9uIG9mIHR5cGUg dm9pZCIKLSAgdGhlbiBhZGQgLURNQUlOSVNWT0lELgotKi8KLSNpZm5kZWYgTUFJTlRZUEUKLSNp Zm5kZWYgTUFJTklTVk9JRAotI2RlZmluZSBNQUlOVFlQRSBpbnQKLSNlbmRpZiAvKiBNQUlOSVNW T0lEICovCi0jZW5kaWYgLyogTUFJTlRZUEUgKi8KLQotI2lmZGVmIE1BSU5JU1ZPSUQKLSNpZm5k ZWYgTUFJTlRZUEUKLSNkZWZpbmUgTUFJTlRZUEUgdm9pZAotI2VuZGlmIC8qIE1BSU5UWVBFICov Ci0jZW5kaWYgLyogTUFJTklTVk9JRCAqLwotCi0jaWZkZWYgYWVnaXMKLS8qIE9uIHRoZSBBcG9s bG8sIGludGVyY2VwdCBtYWluIHRvIGluc2VydCBhIGNsZWFudXAgaGFuZGxlciAqLwotaW50Ci1j a2NtYWkoYXJnYyxhcmd2KSBpbnQgYXJnYzsgY2hhciAqKmFyZ3Y7Ci0jZWxzZQotI2lmZGVmIE1B QyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hY2ludG9zaCAqLwotaW50Ci1tYWlu ICh2b2lkKQotI2Vsc2UKLSNpZmRlZiBfX0dOVUNfXyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBHQ0MgY29tcGlsZXIgKi8KLWludAotbWFpbihhcmdjLGFyZ3YpIGludCBhcmdjOyBjaGFyICoq YXJndjsKLSNlbHNlCi0jaWZkZWYgX19ERUNDICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog REVDIEFscGhhIHdpdGggREVDIEMgY29tcGlsZXIgKi8KLSNpZmRlZiBfX0FMUEhBCi1pbnQKLW1h aW4oYXJnYyxhcmd2KSBpbnQgYXJnYzsgY2hhciAqKmFyZ3Y7Ci0jZWxzZSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogREVDIEMgY29tcGlsZXIsIG5vdCBBbHBoYSAqLwotI2Rl ZmluZSBNQUlOSVNWT0lECi1WT0lECi1tYWluKGFyZ2MsYXJndikgaW50IGFyZ2M7IGNoYXIgKiph cmd2OwotI2VuZGlmICAvKiBfX0FMUEhBICovCi0jZWxzZQotI2lmZGVmIFNUUkFUVVMgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFN0cmF0dXMgVk9TICovCi1pbnQKLW1haW4oYXJnYyxhcmd2 KSBpbnQgYXJnYzsgY2hhciAqKmFyZ3Y7Ci0jZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogSy05NSAqLwotI2lmZGVmIE9TMgotI2lmZGVmIEtVSQotI2RlZmluZSBNQUlO SVNWT0lECi12b2lkCi1NYWluKCBpbnQgYXJnYywgY2hhciAqKiBhcmd2ICkKLSNlbHNlIC8qIEtV SSAqLwotI2RlZmluZSBNQUlOSVNWT0lECi1WT0lECi1tYWluKGFyZ2MsYXJndikgaW50IGFyZ2M7 IGNoYXIgKiphcmd2OwotI2VuZGlmIC8qIEtVSSAqLwotI2Vsc2UgIC8qIE5vdCBLOTUgKi8KLU1B SU5UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbGwgb3RoZXJzLi4uICov Ci1tYWluKGFyZ2MsYXJndikgaW50IGFyZ2M7IGNoYXIgKiphcmd2OwotI2VuZGlmIC8qIE9TMiAq LwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSNlbmRpZiAvKiBfX0RFQ0MgKi8KLSNlbmRpZiAvKiBf X0dOVUNfXyAqLwotI2VuZGlmIC8qIE1BQyAqLwotI2VuZGlmIC8qIGFlZ2lzICovCi0KLS8qIG1h aW4gKi8gewotCi0gICAgY2hhciAqcDsKLQotI2lmbmRlZiBOT1NFVEtFWQotICAgIGludCBpOwot I2VuZGlmIC8qIE5PU0VUS0VZICovCi0KLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgIHNob3J0ICpw ZmhhID0gMDE2MDAwMDAwMDM2OyAgICAgICAgIC8qIEdldCBhcm91bmQgTEFOR19SVCBwcm9ibGVt ICovCi0gICAgKnBmaGEgPSAoc2hvcnQpIDA7ICAgICAgICAgICAgICAgICAgLyogTm8gdXNlciBw cm90ZWN0aW9uIGZhdWx0IGhhbmRsZXIgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotCi0g ICAgaW50IHVuYnVmID0gMDsJCQkvKiBub256ZXJvIGZvciB1bmJ1ZmZlcmVkIHN0ZG91dCAqLwot Ci0vKiBzZXRidWYgaGFzIHRvIGJlIGNhbGxlZCBvbiB0aGUgZmlsZSBkZXNjcmlwdG9yIGJlZm9y ZSBpdCBpcyB1c2VkICovCi0KLSNpZmRlZiBVTklYCi0jaWZkZWYgTk9OT1NFVEJVRgkJCS8qIFVu YnVmZmVyZWQgY29uc29sZSBpL28gKi8KLSAgICB1bmJ1ZisrOwkJCQkvKiBhcyBhIGNvbXBpbGUt dGltZSBvcHRpb24gKi8KLSNlbmRpZgkvKiBOT05PU0VUQlVGICovCi0gICAgaWYgKCF1bmJ1Zikg ewkJCS8qIE9yIGFzIGEgY29tbWFuZC1saW5lIHNlbGVjdGlvbiAqLwotCWludCBpLCBuOwkJCS8q IFdlIGhhdmUgdG8gcHJlLXByZS1zY2FuIGZvciAqLwotCWNoYXIgKiBzOwkJCS8qIHRoaXMgb25l LiAqLwotCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKLQkgICAgcyA9IGFyZ3ZbaV07Ci0J ICAgIGlmICghcykgbiA9IDA7IGVsc2UgbiA9IChpbnQpc3RybGVuKHMpOwotCSAgICBpZiAobiA+ IDQpIHsKLQkJaWYgKCFja3N0cmNtcCgiLS11bmJ1ZmZlcmVkIixzLG4sMCkpIHsKLQkJICAgIHVu YnVmKys7Ci0JCSAgICBicmVhazsKLQkJfQotCSAgICB9Ci0JfQotICAgIH0KLSAgICBpZiAodW5i dWYpCi0gICAgICBzZXRidWYoc3Rkb3V0LE5VTEwpOwotI2VuZGlmCS8qIFVOSVggKi8KLQotLyog RG8gc29tZSBpbml0aWFsaXphdGlvbiAqLwotCi0jaWZkZWYgVk1TCi0jaWZkZWYgX19ERUNDCi0g ICAgLyogR2V0IHNvbWUgUk1TIGRlZmF1bHQgc2V0dGluZ3MuICovCi0gICAgZ2V0X3Jtc19kZWZh dWx0cygpOwotI2VuZGlmIC8qIGRlZiBfX0RFQ0MgKi8KLSNlbmRpZiAvKiBkZWYgVk1TICovCi0K LSNpZm5kZWYgTUFDCi0gICAgeGFyZ2MgPSB4YXJncyA9IGFyZ2M7ICAgICAgICAgICAgICAgLyog TWFrZSBnbG9iYWwgY29waWVzIG9mIGFyZ2MgKi8KLSAgICB4YXJndiA9IGFyZ3Y7ICAgICAgICAg ICAgICAgICAgICAgICAvKiAuLi5hbmQgYXJndi4gKi8KLSAgICB4YXJnMCA9IGFyZ3ZbMF07Ci0j aWZkZWYgTlQKLSAgICBzZXRPU1ZlcigpOwotI2VuZGlmIC8qIE5UICovCi0gICAgenN0cmlwKGFy Z3ZbMF0sJnApOyAgICAgICAgICAgICAgICAgLyogR2V0IG5hbWUgd2Ugd2VyZSBpbnZva2VkIHdp dGggKi8KLSAgICBtYWtlc3RyKCZteW5hbWUscCk7Ci0gICAgaWYgKCFja3N0cmNtcChteW5hbWUs InRlbG5ldCIsLTEsMCkpICAgICAgIGhvd2NhbGxlZCA9IElfQU1fVEVMTkVUOwotI2lmZGVmIENL X0tFUkJFUk9TCi0gICAgZWxzZSBpZiAoIWNrc3RyY21wKG15bmFtZSwia3RlbG5ldCIsLTEsMCkp IGhvd2NhbGxlZCA9IElfQU1fVEVMTkVUOwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0gICAg ZWxzZSBpZiAoIWNrc3RyY21wKG15bmFtZSwicmxvZ2luIiwtMSwwKSkgIGhvd2NhbGxlZCA9IElf QU1fUkxPR0lOOwotICAgIGVsc2UgaWYgKCFja3N0cmNtcChteW5hbWUsImlrc2QiLC0xLDApKSAg ICBob3djYWxsZWQgPSBJX0FNX0lLU0Q7Ci0jaWZkZWYgTkVXRlRQCi0gICAgZWxzZSBpZiAoIWNr c3RyY21wKG15bmFtZSwiZnRwIiwtMSwwKSkgICAgIGhvd2NhbGxlZCA9IElfQU1fRlRQOwotI2Vu ZGlmIC8qIE5FV0ZUUCAqLwotI2lmbmRlZiBOT0hUVFAKLSAgICBlbHNlIGlmICghY2tzdHJjbXAo bXluYW1lLCJodHRwIiwtMSwwKSkgICAgaG93Y2FsbGVkID0gSV9BTV9IVFRQOwotI2VuZGlmIC8q IE5PSFRUUCAqLwotI2lmZGVmIE9TMgotICAgIGVsc2UgaWYgKCFja3N0cmNtcChteW5hbWUsInRl bG5ldC5leGUiLC0xLDApKSAgaG93Y2FsbGVkID0gSV9BTV9URUxORVQ7Ci0jaWZkZWYgU1NIQlVJ TFRJTgotICAgIGVsc2UgaWYgKCFja3N0cmNtcChteW5hbWUsInNzaCIsLTEsMCkpICBob3djYWxs ZWQgPSBJX0FNX1NTSDsKLSAgICBlbHNlIGlmICghY2tzdHJjbXAobXluYW1lLCJzc2guZXhlIiwt MSwwKSkgIGhvd2NhbGxlZCA9IElfQU1fU1NIOwotI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KLSNp ZmRlZiBDS19LRVJCRVJPUwotICAgIGVsc2UgaWYgKCFja3N0cmNtcChteW5hbWUsImt0ZWxuZXQu ZXhlIiwtMSwwKSkgaG93Y2FsbGVkID0gSV9BTV9URUxORVQ7Ci0jZW5kaWYgLyogQ0tfS0VSQkVS T1MgKi8KLSAgICBlbHNlIGlmICghY2tzdHJjbXAobXluYW1lLCJybG9naW4uZXhlIiwtMSwwKSkg IGhvd2NhbGxlZCA9IElfQU1fUkxPR0lOOwotI2lmZGVmIE5UCi0gICAgZWxzZSBpZiAoIWNrc3Ry Y21wKG15bmFtZSwiaWtzZG50IiwtMSwwKSkgICAgaG93Y2FsbGVkID0gSV9BTV9JS1NEOwotICAg IGVsc2UgaWYgKCFja3N0cmNtcChteW5hbWUsImlrc2RudC5leGUiLC0xLDApKSAgICBob3djYWxs ZWQgPSBJX0FNX0lLU0Q7Ci0jZW5kaWYgLyogTlQgKi8KLSNpZmRlZiBORVdGVFAKLSAgICBlbHNl IGlmICghY2tzdHJjbXAobXluYW1lLCJmdHAuZXhlIiwtMSwwKSkgICAgIGhvd2NhbGxlZCA9IElf QU1fRlRQOwotI2VuZGlmIC8qIE5FV0ZUUCAqLwotI2lmbmRlZiBOT0hUVFAKLSAgICBlbHNlIGlm ICghY2tzdHJjbXAobXluYW1lLCJodHRwLmV4ZSIsLTEsMCkpICAgIGhvd2NhbGxlZCA9IElfQU1f SFRUUDsKLSNlbmRpZiAvKiBOT0hUVFAgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICBlbHNlIGlm ICghY2tzdHJjbXAobXluYW1lLCJrZXJtaXQtc3Noc3ViIiwtMSwwKSkgaG93Y2FsbGVkID0gSV9B TV9TU0hTVUI7Ci0KLSNpZm5kZWYgTk9JQ1AKLSAgICBjbWRpbmkoKTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBNdXN0IGNvbWUgYmVmb3JlIHByZXNjYW4gKi8KLSAgICBkZWJ1ZyhGMTAw LCJtYWluIGNtZGluaSgpIGRvbmUiLCIiLDApOwotI2VuZGlmIC8qIE5PSUNQICovCi0gICAgcHJl c2NhbigwKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJlLUNoZWNrIGZvciBkZWJ1Z2dp bmcsIGV0YyAqLwotI2VuZGlmIC8qIE1BQyAqLwotICAgIGRlYnVnKEYxMDEsIk1BSU4gZmVvbCIs IiIsZmVvbCk7Ci0gICAgbWFrZXZlcigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHV0 IHRvZ2V0aGVyIHZlcnNpb24gc3RyaW5ncyAqLwotI2lmbmRlZiBOT1NFVEtFWSAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEFsbG9jYXRlICYgaW5pdGlhbGl6ZSB0aGUga2V5bWFwICovCi0gICAg LyogVGhpcyBjb2RlIGhhcyBiZWVuIG1vdmVkIHRvIGJlZm9yZSBzeXNpbml0KCkgZm9yIEs5NUcg Ki8KLSAgICBpZiAoIShrZXltYXAgPSAoS0VZICopIG1hbGxvYyhzaXplb2YoS0VZKSpLTVNJWkUp KSkKLSAgICAgIGZhdGFsKCJtYWluOiBubyBtZW1vcnkgZm9yIGtleW1hcCIpOwotICAgIGlmICgh KG1hY3JvdGFiID0gKE1BQ1JPICopIG1hbGxvYyhzaXplb2YoTUFDUk8pKktNU0laRSkpKQotICAg ICAgZmF0YWwoIm1haW46IG5vIG1lbW9yeSBmb3IgbWFjcm90YWIiKTsKLSAgICBmb3IgKGkgPSAw OyBpIDwgS01TSVpFOyBpKyspIHsKLSAgICAgICBrZXltYXBbaV0gPSAoS0VZKSBpOwotICAgICAg IG1hY3JvdGFiW2ldID0gTlVMTDsKLSAgICB9Ci0jZW5kaWYgLyogTk9TRVRLRVkgKi8KLQotICAg IHNob3J0Ynl0ZXMueF9zaG9ydCA9IDB4QUJDRDsgICAgICAgIC8qIEdldCBFbmRpYW5uZXNzICov Ci0gICAgaWYgKHNob3J0Ynl0ZXMueF9jaGFyWzBdID09IDB4Q0QpIHsgLyogMCA9IEJpZyBFbmRp YW4gKi8KLSAgICAgICAgYnl0ZW9yZGVyID0gMTsgICAgICAgICAgICAgICAgICAvKiAxID0gTGl0 dGxlIEVuZGlhbiAqLwotICAgICAgICBiaWdlbmRpYW4gPSAwOyAgICAgICAgICAgICAgICAgIC8q IChmb3IgY2xhcml0eSBpbiBwcm9ncmFtbWluZykgKi8KLSAgICB9IGVsc2UgewotICAgICAgICBi eXRlb3JkZXIgPSAwOyAgICAgICAgICAgICAgICAgIC8qIEJpZyBFbmRpYW4gKi8KLSAgICAgICAg YmlnZW5kaWFuID0gMTsKLSAgICB9Ci0gICAgaWYgKHNpemVvZihDS19PRkZfVCkgPT0gOCkJCS8q IExhcmdlIGZpbGVzIGFuZCBpbnRzPyAqLwotICAgICAgaGF2ZWxmcyA9IDE7Ci0KLSAgICBpZiAo c3lzaW5pdCgpIDwgMCkgICAgICAgICAgICAgICAgICAvKiBTeXN0ZW0tZGVwZW5kZW50IGluaXRp YWxpemF0aW9uLiAqLwotICAgICAgZmF0YWwoIkNhbid0IGluaXRpYWxpemUhIik7Ci0gICAgZWxz ZQotICAgICAgaW5pdGZsZyA9IDE7ICAgICAgICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIHdl IGRpZC4gKi8KLSAgICBkZWJ1ZyhGMTExLCJja2NtYWkgbXluYW1lIixteW5hbWUsaG93Y2FsbGVk KTsKLQotI2lmZGVmIFVOSVgKLSAgICBnZXRleGVkaXIoKTsgICAgICAgICAgICAgICAgICAgICAg ICAvKiBDb21wdXRlIGV4ZWRpciB2YXJpYWJsZSAqLwotI2VuZGlmIC8qIFVOSVggKi8KLQotI2lm ZGVmIENLU1lTTE9HCi0jaWZkZWYgU1lTTE9HTEVWRUwKLS8qCi0gIElmIGJ1aWx0IHdpdGggLURT WVNMT0dMRVZFTCBvbiBjYyBjb21tYW5kIGxpbmUsIHRoaXMgbWVhbnMgd2UgYWx3YXlzCi0gIGRv IHN5c2xvZ2dpbmcgYXQgdGhlIGluZGljYXRlZCBsZXZlbC4KLSovCi0gICAgenN5c2xvZygpOyAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogT3BlbiBzeXNsb2cgKi8KLSNlbHNlIC8qIFNZU0xP R0xFVkVMICovCi0jaWZkZWYgSUtTRAotICAgIGlmIChpbnNlcnZlcikKLSAgICAgIHpzeXNsb2co KTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBPcGVuIHN5c2xvZyAqLwotI2VuZGlmIC8qIElL U0QgKi8KLSNlbmRpZiAvKiBTWVNMT0dMRVZFTCAqLwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0K LSNpZmRlZiBDS19LRVJCRVJPUwotICAgIGluaV9rZXJiKCk7ICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEluaXRpYWxpemUgS2VyYmVyb3MgZGF0YSAqLwotI2VuZGlmIC8qIENLX0tFUkJFUk9T ICovCi0jaWZkZWYgQ0tfU1NMCi0gICAgc3NsX29uY2VfaW5pdCgpOwotI2VuZGlmIC8qIENLX1NT TCAqLwotI2lmZGVmIFROQ09ERQotICAgIHRuX3NldF9tb2RlcygpOyAgICAgICAgICAgICAgICAg ICAgIC8qIEluaXQgVGVsbmV0IE9wdGlvbiB0YWJsZXMgKi8KLSNlbmRpZiAvKiBUTkNPREUgKi8K LQotI2lmZGVmIENLX1RUR1dTSVogICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUg c2NyZWVuIGRpbWVuc2lvbnMgKi8KLSNpZmRlZiBPUzIKLSAgICB0dGdjd3N6KCk7Ci0jZWxzZSAv KiBPUzIgKi8KLSAgICBpZiAodHRnd3NpeigpID4gMCkgewotICAgICAgICBpZiAodHRfcm93cyA+ IDAgJiYgdHRfY29scyA+IDApIHsKLSAgICAgICAgICAgIGNtZF9yb3dzID0gdHRfcm93czsKLSAg ICAgICAgICAgIGNtZF9jb2xzID0gdHRfY29sczsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAv KiBPUzIgKi8KLSNlbmRpZiAvKiBDS19UVEdXU0laICovCi0KLSNpZm5kZWYgT1MyCi0jaWZkZWYg VENQU09DS0VUCi0jaWZkZWYgQ0tfU09DS1MKLSAgICBTT0NLU2luaXQoYXJndlswXSk7ICAgICAg ICAgICAgICAgICAvKiBJbnRlcm5ldCByZWxheSBwYWNrYWdlLi4uICovCi0jZW5kaWYgLyogQ0tf U09DS1MgKi8KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotICAg IGluaXRmbG93KCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgZmxvdy1j b250cm9sIHRhYmxlICovCi0KLSNpZm5kZWYgTk9JQ1AKLSNpZmRlZiBDS0ZMT0FUCi0gICAgaW5p dGZsb2F0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVkdWNlIGZsb2F0aW5nLXBvaW50 IHByZWNpc2lvbiAqLwotI2VuZGlmIC8qIENLRkxPQVQgKi8KLSNlbmRpZiAvKiBOT0lDUCAqLwot Ci0jaWZuZGVmIE5PWEZFUgotICAgIGluaXR4bGlzdCgpOwkJCS8qIEluaXQgZXhjZXB0aW9uIGxp c3RzICovCi0KLSNpZmRlZiBDS19YWVogICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0 aWFsaXplIHByb3RvY29scy4uLiAgKi8KLQotI2lmZGVmIFhZWl9JTlRFUk5BTCAvKiBYWVpNT0RF TSBhcmUgaW50ZXJuYWwgLi4uICovCi0KLSNpZmRlZiBDT01NRU5UCi0gICAgLyogQ2FuJ3QgZG8g dGhpcyBmb3IgWE1PREVNIGJlY2F1c2UgaWYgZmlsZW5hbWUgY29udGFpbnMgYSAiQyIgZXRjLi4u ICovCi0gICAgaW5pdHByb3RvKFBST1RPX1gsICJyeCAlcyIsInJ4ICVzIiwgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTCk7Ci0gICAgaW5pdHByb3RvKFBST1RPX1hDLCJyYyAlcyIsInJjICVz IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0jZWxzZSAvKiBDT01NRU5UICovCi0g ICAgaW5pdHByb3RvKFBST1RPX1gsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEws IE5VTEwpOwotICAgIGluaXRwcm90byhQUk9UT19YQyxOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgaW5pdHByb3RvKFBS T1RPX1ksICJyYiIsInJiIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0gICAgaW5p dHByb3RvKFBST1RPX0csICJyYiIsInJiIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7 Ci0gICAgaW5pdHByb3RvKFBST1RPX1osICJyeiIsInJ6IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVM TCwgTlVMTCk7Ci0gICBpbml0cHJvdG8oUFJPVE9fSywia2VybWl0IC1pciIsImtlcm1pdCAtciIs Imtlcm1pdCAteCIsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0gICAgLyogS2VybWl0IE11c3QgYmUg bGFzdCAqLwotCi0jZWxzZSAvKiBYWVpNT0RFTSBhcmUgZXh0ZXJuYWwgcHJvdG9jb2xzIC4uLiAq LwotCi0gLyogICAgICAgICAgICAgICAgICBzMSAgICAgIHMyICAgICBzMyAgICBzNCAgICAgIHM1 ICAgICAgICAgczYgICAgICBzNyAgICAgKi8KLSBpbml0cHJvdG8oUFJPVE9fWCwgInJ4ICVzIiwi cnggJXMiLE5VTEwsInN4ICVzIiwic3ggLWEgJXMiLCJyeCAlcyIsICJyeCAlcyIpOwotIGluaXRw cm90byhQUk9UT19YQywicmMgJXMiLCJyYyAlcyIsTlVMTCwic3ggJXMiLCJzeCAtYSAlcyIsInJj ICVzIiwgInJjICVzIik7Ci0gaW5pdHByb3RvKFBST1RPX1ksICJyYiIsICAgInJiIiwgICBOVUxM LCJzYiAlcyIsInNiIC1hICVzIiwicmIiLCAgICAicmIiICAgKTsKLSBpbml0cHJvdG8oUFJPVE9f RywgInJiIiwgICAicmIiLCAgIE5VTEwsInNiICVzIiwic2IgLWEgJXMiLCJyYiIsICAgICJyYiIg ICApOwotIGluaXRwcm90byhQUk9UT19aLCAicnoiLCAgICJyeiIsICAgTlVMTCwic3ogJXMiLCJz eiAtYSAlcyIsInJ6IiwgICAgInJ6IiAgICk7Ci0gaW5pdHByb3RvKFBST1RPX0ssICJrZXJtaXQg LWlyIiwia2VybWl0IC1yIiwia2VybWl0IC14IixOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAvKiBL ZXJtaXQgbXVzdCBiZSBsYXN0ICovCi0KLSNlbmRpZiAvKiBYWVpfSU5URVJOQUwgKi8KLQotI2Vs c2UgIC8qIE5vIFhZWk1PREVNIHN1cHBvcnQgKi8KLQotICAgaW5pdHByb3RvKFBST1RPX0ssImtl cm1pdCAtaXIiLCJrZXJtaXQgLXIiLCJrZXJtaXQgLXgiLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwot Ci0jZW5kaWYgLyogQ0tfWFlaICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLSAgICBjb25ub2ko KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb25zb2xlIGludGVycnVwdHMgb2ZmICov Ci0KLSNpZm5kZWYgTk9YRkVSCi0jaWZkZWYgT1MyCi0gICAgLyogSW5pdGlhbGl6ZSBLZXJtaXQg YW5kIFptb2RlbSBBdXRvLURvd25sb2FkIFN0cmluZ3MgKi8KLSAgICBhZGxfa3N0ciA9IHN0cmR1 cCgiS0VSTUlUIFJFQURZIFRPIFNFTkQuLi4iKTsKLSAgICBhZGxfenN0ciA9IHN0cmR1cCgicnpc ciIpOwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgUEFUVEVSTlMKLSAgICBpbml0cGF0KCk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIGZpbGVuYW1lIHBhdHRlcm5z ICovCi0jZW5kaWYgLyogUEFUVEVSTlMgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRl ZiBOT0NTRVRTCi0gICAgaW5pdGNzZXRzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5p dGlhbGl6ZSBjaGFyYWN0ZXIgc2V0cyAqLwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQotI2lmbmRl ZiBOT0lDUAotI2lmZGVmIERGQ0RNU0cKLSAgICBtYWtlc3RyKCZjZG1zZ3N0cixERkNETVNHKTsK LSAgICBtYWtlbGlzdChjZG1zZ3N0cixjZG1zZ2ZpbGUsOCk7ICAgICAvKiBJbml0aWFsaXplIENE IG1lc3NhZ2UgZmlsZW5hbWVzICovCi0jZW5kaWYgLyogREZDRE1TRyAqLwotI2VuZGlmIC8qIE5P SUNQICovCi0KLSAgICBzc3RhdGUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBk ZWZhdWx0IHN0YXJ0IHN0YXRlLiAqLwotI2lmZGVmIERZTkFNSUMKLSAgICBpZiAoZ2V0aW9icygp IDwgMCkKLSAgICAgIGZhdGFsKCJDYW4ndCBhbGxvY2F0ZSBpL28gYnVmZmVycyEiKTsKLSNlbmRp ZiAvKiBEWU5BTUlDICovCi0KLSNpZm5kZWYgTk9TUEwKLSNpZm5kZWYgTk9SQU5ET00KLSAgICB7 Ci0gICAgICAgIGNoYXIgc3RhY2tkYXRhWzI1Nl07Ci0gICAgICAgIHVuc2lnbmVkIGludCBjID0g MTIzNCwgbjsKLSAgICAgICAgLyogdHJ5IHRvIG1ha2UgYSByYW5kb20gdW5zaWduZWQgaW50IHRv IGZlZWQgc3JhbmQoKSAqLwotI2lmbmRlZiBWTVMKLQkvKiB0aW1lLmggYW5kIE11bHRpTmV0IGRv IG5vdCBnZXQgYWxvbmcgKi8KLSAgICAgICAgYyA9IHRpbWUoTlVMTCk7Ci0jZW5kaWYgLyogVk1T ICovCi0gICAgICAgIGMgKj0gZ2V0cGlkKCk7Ci0JLyogUmVmZXJlbmNlZCBiZWZvcmUgc2V0Li4u IERFTElCRVJBVEVMWSAqLwotICAgICAgICBmb3IgKG4gPSAwOyBuIDwgc2l6ZW9mKHN0YWNrZGF0 YSk7IG4rKykgLyogSUdOT1JFIFdBUk5JTkcgKi8KLQkgIGMgKz0gc3RhY2tkYXRhW25dOwkJLyog REVMSUJFUkFURUxZIFVTRUQgQkVGT1JFIFNFVCAqLwotICAgICAgICBzcmFuZCgodW5zaWduZWQg aW50KWMpOwotICAgIH0KLSNlbmRpZiAvKiBOT1JBTkRPTSAqLwotI2VuZGlmIC8qIE5PU1BMICov Ci0KLSAgICBja2hvc3QobXlob3N0LE1ZSE9TVEwpOyAgICAgICAgICAgICAvKiBOYW1lIG9mIGxv Y2FsIGhvc3QgKi8KLSAgICBkZWJ1ZyhGMTEwLCJtYWluIGNraG9zdCIsbXlob3N0LDApOwotI2lm ZGVmIElLU0QKLSAgICBpZiAoIWluc2VydmVyKSB7Ci0jZW5kaWYgLyogSUtTRCAqLwotICAgICAg ICBja3N0cm5jcHkodHRuYW1lLGRmdHR5LFRUTkFNTEVOKTsgLyogU2V0IHVwIGRlZmF1bHQgdHR5 IG5hbWUuICovCi0gICAgICAgIGxvY2FsID0gbm9sb2NhbCA/IDAgOiBkZmxvYzsgICAgLyogQW5k IHdoZXRoZXIgaXQncyBsb2NhbCBvciByZW1vdGUuICovCi0gICAgICAgIHBhcml0eSA9IGRmcHJ0 eTsgICAgICAgICAgICAgICAgLyogU2V0IGluaXRpYWwgcGFyaXR5LCAqLwotI2lmbmRlZiBOT1hG RVIKLSAgICAgICAgbXlpbmRleCA9IGdldHN5c2l4KGNrc3lzaWQpOyAgICAvKiBTeXN0ZW0gaW5k ZXggKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSAgICAgICAgaWYgKGxvY2FsKSBpZiAodHRvcGVu KHR0bmFtZSwmbG9jYWwsMCwwKSA8IDApIHsKLSNpZm5kZWYgT1MyCi0gICAgICAgICAgICBjb25v bCgiQ2FuJ3Qgb3BlbiBkZXZpY2U6ICIpOwotICAgICAgICAgICAgY29ub2xsKHR0bmFtZSk7Ci0j ZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICBsb2NhbCA9IDA7Ci0gICAgICAgICAgICBja3N0 cm5jcHkodHRuYW1lLENUVE5BTSxUVE5BTUxFTik7Ci0gICAgICAgIH0KLSAgICAgICAgc2V0Zmxv dygpOyAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgYXBwcm9wcmlhdGUgZmxvdyBjb250cm9s ICovCi0gICAgICAgIHNwZWVkID0gdHRnc3BkKCk7ICAgICAgICAgICAgICAgLyogR2V0IHRyYW5z bWlzc2lvbiBzcGVlZC4gKi8KLSNpZmRlZiBJS1NECi0gICAgfQotI2VuZGlmIC8qIElLU0QgKi8K LQotI2lmZGVmIEFOWVgyNSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFsbCBYLjI1IGlt cGxlbWVudGF0aW9ucyAqLwotI2lmbmRlZiBJQk1YMjUgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGV4Y2VwdCBJQk0gaGF2ZSBQQUQgc3VwcG9ydCAqLwotICAgIGluaXRwYWQoKTsgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgWC4yNSBQQUQgKi8KLSNlbmRpZiAvKiBJ Qk1YMjUgKi8KLSNlbmRpZiAvKiBBTllYMjUgKi8KLQotI2lmbmRlZiBOT1hGRVIKLSAgICBpZiAo aW5pYnVmcyhTQlNJWixSQlNJWikgPCAwKSAgICAgICAvKiBBbGxvY2F0ZSBwYWNrZXQgYnVmZmVy cyAqLwotICAgICAgZmF0YWwoIkNhbid0IGFsbG9jYXRlIHBhY2tldCBidWZmZXJzISIpOwotI2lm bmRlZiBOT0NLU1BFRUQKLSAgICBzZXRwcmVmaXgocHJlZml4aW5nKTsgICAgICAgICAgICAgICAv KiBTZXQgdXAgY29udHJvbCBjaGFyIHByZWZpeGluZyAqLwotI2VuZGlmIC8qIE5PQ0tTUEVFRCAq LwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZuZGVmIE5PSUNQCi0gICAgaWYgKHNzdGVsbmV0 Ci0jaWZkZWYgSUtTRAotICAgICAgICB8fCBpbnNlcnZlcgotI2VuZGlmIC8qIElLU0QgKi8KLSAg ICAgICAgKSB7Ci0gICAgICAgIGludCBvbiA9IDEsIHggPSAwOwotICAgICAgICBleHRlcm4gaW50 IGNreGVjaCwgdHRuZXQsIHR0bnByb3RvLCBjbWRtc2s7Ci0jaWZkZWYgU09fU05EQlVGCi0gICAg ICAgIGV4dGVybiBpbnQgdGNwX3NlbmRidWY7Ci0jZW5kaWYKLSNpZmRlZiBTT19SQ1ZCVUYKLSAg ICAgICAgZXh0ZXJuIGludCB0Y3BfcmVjdmJ1ZjsKLSNlbmRpZgotI2lmZGVmIFNPX0tFRVBBTElW RQotICAgICAgICBleHRlcm4gaW50IHRjcF9rZWVwYWxpdmU7Ci0jZW5kaWYKLSNpZmRlZiBTT19M SU5HRVIKLSAgICAgICAgZXh0ZXJuIGludCB0Y3BfbGluZ2VyLCB0Y3BfbGluZ2VyX3RtbzsKLSNl bmRpZiAvKiBTT19MSU5HRVIgKi8KLSNpZmRlZiBTT19ET05UUk9VVEUKLSAgICAgICAgZXh0ZXJu IGludCB0Y3BfZG9udHJvdXRlOwotI2VuZGlmIC8qIFNPX0RPTlRST1VURSAqLwotI2lmZGVmIFRD UF9OT0RFTEFZCi0gICAgICAgIGV4dGVybiBpbnQgdGNwX25vZGVsYXk7Ci0jZW5kaWYgLyogVENQ X05PREVMQVkgKi8KLSNpZmRlZiBJS1NECi0gICAgICAgIGV4dGVybiBpbnQgaWtsb2dvcGVuOwot I2VuZGlmIC8qIElLU0QgKi8KLSAgICAgICAgZXh0ZXJuIGludCB0dG1kbTsKLQotI2lmZGVmIFVO SVgKLSAgICAgICAgaWYgKGlzYXR0eSgwKSkKLSAgICAgICAgICBmYXRhbCgiSW50ZXJuZXQgS2Vy bWl0IFNlcnZpY2UgY2Fubm90IGJlIHN0YXJ0ZWQgYXQgYSB0ZXJtaW5hbC4iKTsKLSNlbmRpZiAv KiBVTklYICovCi0KLSAgICAgICAgcmVsaWFibGUgPSB4cmVsaWFibGUgPSBTRVRfT047ICAvKiBJ S1NEIGhhcyByZWxpYWJsZSBjb25uZWN0aW9uICovCi0jaWZuZGVmIFZNUwotICAgICAgICBmbG93 ID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIGZsb3cgY29udHJvbCBuZWVkZWQgKi8K LSNlbmRpZiAvKiBWTVMgKi8KLSAgICAgICAgYmdzZXQgPSAwOyAgICAgICAgICAgICAgICAgICAg ICAvKiBOb3QgaW4gYmFja2dyb3VuZCAqLwotICAgICAgICBub3B1c2ggPSAxOyAgICAgICAgICAg ICAgICAgICAgIC8qIE5vIGV4dGVybmFsIHByb2Nlc3NlcyAqLwotICAgICAgICBwYXJpdHkgPSAw OyAgICAgICAgICAgICAgICAgICAgIC8qIDggYml0cyAuLi4gKi8KLSAgICAgICAgY21kbXNrID0g MHhmZjsgICAgICAgICAgICAgICAgICAvKiBhbGwgdGhlIHdheSAqLwotICAgICAgICBjbWFzayA9 IDB4ZmY7Ci0KLSNpZmRlZiBJS1NECi0gICAgICAgIGlmIChpbnNlcnZlcikgeyAgICAgICAgICAg ICAgICAgLyogSWYgSUtTRCAqLwotICAgICAgICAgICAgZG9pa3NkaW5pdCgpOyAgICAgICAgICAg ICAgIC8qIEV4ZWN1dGUgSUtTRCBjb25maWd1cmF0aW9uIGZpbGUgKi8KLSAgICAgICAgICAgIHdo aWxlICh0bGV2ZWwgPiAtMSkKLSAgICAgICAgICAgICAgcGFyc2VyKDEpOyAgICAgICAgICAgICAg ICAvKiAoSWdub3JlIGFueSBmaWxlLXhmZXIgY29tbWFuZHMpICovCi0gICAgICAgICAgICBpa3Nk Y2YgPSAxOyAgICAgICAgICAgICAgICAgLyogSUtTRCBjLmYuIGhhcyBiZWVuIHByb2Nlc3NlZCAq LwotICAgICAgICB9Ci0gICAgICAgIGlmICghaWtsb2dvcGVuKSAoVk9JRCkgZG9pa2xvZygpOyAv KiBPcGVuIEtlcm1pdC1zcGVjaWZpYyBsb2cgKi8KLSNlbmRpZiAvKiBJS1NEICovCi0KLSNpZmRl ZiBVTklYCi0gICAgICAgIHNldGJ1ZihzdGRvdXQsTlVMTCk7ICAgICAgICAgICAgLyogRG9uJ3Qg YnVmZmVyIHRoZSBvdXRwdXQgKi8KLSAgICAgICAgY2tzdHJuY3B5KHR0bmFtZSwiMCIsVFROQU1M RU4pOyAvKiBub3QgIi9kZXYvdHR5Ii4uLiAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSAgICAgICAg bG9jYWwgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBXZSBhcmUgaW4gcmVtb3RlIG1vZGUg Ki8KLSAgICAgICAgY2t4ZWNoID0gMTsgICAgICAgICAgICAgICAgICAgICAvKiBXZSB3aWxsIGVj aG8gKi8KLSNpZmRlZiBPUzIKLSAgICAgICAgbmV0dHlwZSA9IE5FVF9UQ1BCOyAgICAgICAgICAg ICAvKiBTbyB0dG9wZW4oKSB0cmVhdHMgdGhlIGNvbm5lY3Rpb24gKi8KLSAgICAgICAgbWRtdHlw ID0gLW5ldHR5cGU7ICAgICAgICAgICAgICAvKiBhcyBhIG5ldHdvcmsgKi8KLSNlbmRpZiAvKiBP UzIgKi8KLSAgICAgICAgZGVidWcoRjEwMCwibWFpbiBhYm91dCB0byBjYWxsIHR0b3BlbigpIGlu c2VydmVyIiwiIiwwKTsKLSAgICAgICAgaWYgKHR0b3Blbih0dG5hbWUsJmxvY2FsLG1kbXR5cCww KSA8IDApIHsgLyogT3BlbiBjb21tIGNoYW5uZWwgKi8KLSAgICAgICAgICAgIGZhdGFsKCJjYW4n dCBpbml0aWFsaXplIGkvbyIpOwotICAgICAgICB9Ci0jaWZkZWYgT1MyCi0gICAgICAgIGxvY2Fs ID0gMDsKLSAgICAgICAgbmV0d29yayA9IDE7ICAgICAgICAgICAgICAgICAgICAvKiBEb2VzIHVz ZSBuZXR3b3JraW5nIGNvZGUgKi8KLSNlbHNlICAvKiBPUzIgKi8KLSAgICAgICAgbmV0d29yayA9 IDA7ICAgICAgICAgICAgICAgICAgICAvKiBEb2VzIG5vdCB1c2UgbmV0d29ya2luZyBjb2RlICov Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgIHR0bWRtID0gLTE7ICAgICAgICAgICAgICAgICAg ICAgLyogRG9lcyBub3QgdXNlIGEgbW9kZW0gKi8KLSAgICAgICAgc3N0ZWxuZXQgPSAxOyAgICAg ICAgICAgICAgICAgICAvKiBEbyBzZXJ2ZXItc2lkZSBUZWxuZXQgbmVnb3RhdGlvbnMgKi8KLSAg ICAgICAgZGVidWcoRjExMSwiTUFJTiIsInNzdGVsbmV0Iixzc3RlbG5ldCk7Ci0gICAgICAgIHR0 bmV0ID0gTkVUX1RDUEI7ICAgICAgICAgICAgICAgLyogTmV0d29yayB0eXBlIGlzIFRDUCBzb2Nr ZXRzICovCi0gICAgICAgIHR0bnByb3RvID0gTlBfVEVMTkVUOyAgICAgICAgICAgLyogTmV0d29y ZCBwcm90b2NvbCBpcyBUZWxuZXQgKi8KLSNpZmRlZiBJS1NEQgotICAgICAgICBkYmluaXQoKTsg ICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgZGF0YWJhc2UgcmVjb3JkICovCi0j ZW5kaWYgLyogSUtTREIgKi8KLSNpZm5kZWYgT1MyCi0jaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04K LSAgICAgICAgLyogQmVmb3JlIGluaXRpYWxpemF0aW5nIFRlbG5ldC9SbG9naW4gbmVnb3RpYXRp b25zLCBpbml0IEtlcmJlcm9zICovCi0gICAgICAgIGNrX2F1dGhfaW5pdChja2dldHBlZXIoKSwi IiwiIiwwKTsKLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotCi0jaWZkZWYgTk9OX0JM T0NLX0lPCi0gICAgICAgIG9uID0gMTsKLSAgICAgICAgeCA9IHNvY2tldF9pb2N0bCgwLEZJT05C SU8sJm9uKTsKLSAgICAgICAgZGVidWcoRjEwMSwibWFpbiBGSU9OQklPIiwiIix4KTsKLSNlbmRp ZiAvKiBOT05fQkxPQ0tfSU8gKi8KLSNpZmRlZiBTT19PT0JJTkxJTkUKLSAgICAgICAgb24gPSAx OwotICAgICAgICB4ID0gc2V0c29ja29wdCgwLCBTT0xfU09DS0VULCBTT19PT0JJTkxJTkUsIChj aGFyICopJm9uLCBzaXplb2Yob24pKTsKLSAgICAgICAgZGVidWcoRjEwMSwibWFpbiBTT19PT0JJ TkxJTkUiLCIiLHgpOwotI2VuZGlmIC8qIFNPX09PQklOTElORSAqLwotCi0jaWZuZGVmIE5PVENQ T1BUUwotI2lmbmRlZiBkYXRhZ2VuZXJhbAotI2lmZGVmIFNPTF9TT0NLRVQKLSNpZmRlZiBUQ1Bf Tk9ERUxBWQotICAgICAgICBub19kZWxheSgwLHRjcF9ub2RlbGF5KTsKLSNlbmRpZiAvKiBUQ1Bf Tk9ERUxBWSAqLwotI2lmZGVmIFNPX0tFRVBBTElWRQotICAgICAgICBrZWVwYWxpdmUoMCx0Y3Bf a2VlcGFsaXZlKTsKLSNlbmRpZiAvKiBTT19LRUVQQUxJVkUgKi8KLSNpZmRlZiBTT19MSU5HRVIK LSAgICAgICAgY2tfbGluZ2VyKDAsdGNwX2xpbmdlciwgdGNwX2xpbmdlcl90bW8pOwotI2VuZGlm IC8qIFNPX0xJTkdFUiAqLwotI2lmZGVmIFNPX0RPTlRST1VURQotICAgICAgICBkb250cm91dGUo MCx0Y3BfZG9udHJvdXRlKTsKLSNlbmRpZiAvKiBTT19ET05UUk9VVEUgKi8KLSNpZmRlZiBTT19T TkRCVUYKLSAgICAgICAgc2VuZGJ1ZigwLHRjcF9zZW5kYnVmKTsKLSNlbmRpZiAvKiBTT19TTkRC VUYgKi8KLSNpZmRlZiBTT19SQ1ZCVUYKLSAgICAgICAgcmVjdmJ1ZigwLHRjcF9yZWN2YnVmKTsK LSNlbmRpZiAvKiBTT19SQ1ZCVUYgKi8KLSNlbmRpZiAvKiBTT0xfU09DS0VUICovCi0jZW5kaWYg LyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBOT1RDUE9QVFMgKi8KLQotI2lmZGVmIENLX1NT TAotICAgICAgICBpZiAoY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpKSB7Ci0gICAgICAgICAgICBp ZiAoIXNzbF90bl9pbml0KFNTTF9TRVJWRVIpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJpb19l cnIgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBCSU9fcHJpbnRmKGJpb19lcnIsImRv X3NzbGVheV9pbml0KCkgZmFpbGVkXHJcbiIpOwotICAgICAgICAgICAgICAgICAgICBFUlJfcHJp bnRfZXJyb3JzKGJpb19lcnIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICAgICAgICAgIGZmbHVzaChzdGRlcnIpOwotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0 ZGVyciwiZG9fc3NsZWF5X2luaXQoKSBmYWlsZWRcclxuIik7Ci0gICAgICAgICAgICAgICAgICAg IEVSUl9wcmludF9lcnJvcnNfZnAoc3RkZXJyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgc3dpdGNoICh0dG5wcm90bykgewotCQkgIGNhc2UgTlBfU1NMOgotCQkgIGNhc2Ug TlBfVExTOgotICAJCSAgY2FzZSBOUF9TU0xfUkFXOgotCQkgIGNhc2UgTlBfVExTX1JBVzoKLQkJ ICBjYXNlIE5QX1NTTF9URUxORVQ6Ci0JCSAgY2FzZSBOUF9UTFNfVEVMTkVUOgotICAgICAgICAg ICAgICAgICAgICBkb2V4aXQoQkFEX0VYSVQsMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIC8qIG90aGVyd2lzZSB3ZSB3aWxsIGNvbnRpbnVlIHRvIGFjY2VwdCB0aGUgY29u bmVjdGlvbiAgICovCi0gICAgICAgICAgICAgICAgLyogd2l0aG91dCBTU0wgb3IgVExTIHN1cHBv cnQgdW5sZXNzIHJlcXVpcmVkLiAqLwotICAgICAgICAgICAgICAgIGlmICggVEVMT1BUX0RFRl9T X01FX01PREUoVEVMT1BUX1NUQVJUX1RMUykgIT0gVE5fTkdfTVUgKQotICAgICAgICAgICAgICAg ICAgICBURUxPUFRfREVGX1NfTUVfTU9ERShURUxPUFRfU1RBUlRfVExTKSA9IFROX05HX1JGOwot ICAgICAgICAgICAgICAgIGlmICggVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfU1RBUlRfVExT KSAhPSBUTl9OR19NVSApCi0gICAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfU19VX01PREUo VEVMT1BUX1NUQVJUX1RMUykgPSBUTl9OR19SRjsKLSAgICAgICAgICAgICAgICBpZiAoIFRFTE9Q VF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpICE9IFROX05HX01VICkKLSAgICAgICAg ICAgICAgICAgICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX1NUQVJUX1RMUykgPSBUTl9O R19SRjsKLSAgICAgICAgICAgICAgICBpZiAoIFRFTE9QVF9ERUZfQ19VX01PREUoVEVMT1BUX1NU QVJUX1RMUykgIT0gVE5fTkdfTVUgKQotICAgICAgICAgICAgICAgICAgICBURUxPUFRfREVGX0Nf VV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpID0gVE5fTkdfUkY7Ci0gICAgICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgICAgIGlmICggY2tfc3NsX2luY29taW5nKDApIDwgMCApIHsKLSAgICAg ICAgICAgICAgICAgICAgZG9leGl0KEJBRF9FWElULDEpOwotICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0jaWZkZWYgVE5D T0RFCi0gICAgICAgIHRuX2luaSgpOyAgICAgICAgICAgICAgICAgICAgICAgLyogU3RhcnQgVGVs bmV0IG5lZ290aWF0aW9uIG5vdyAqLwotI2VuZGlmIC8qIFROQ09ERSAqLwotI2VuZGlmIC8qIE9T MiAqLwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJtYWluIGFyZ2MgYWZ0ZXIgcHJlc2NhbigpIiwi IixhcmdjKTsKLQotICAgIC8qIE5vdyBwcm9jZXNzIGFueSByZWxldmFudCBlbnZpcm9ubWVudCB2 YXJpYWJsZXMgKi8KLQotI2lmbmRlZiBOT0RJQUwKLSAgICBnZXRkaWFsZW52KCk7ICAgICAgICAg ICAgICAgICAgICAgICAvKiBEaWFsaW5nICovCi0jaWZkZWYgTkVUQ09OTgotICAgIG5kaW5pdCgp OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgbmV0d29yayBkaXJlY3Rv cnkgaW5mbyAqLwotICAgIGdldG5ldGVudigpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5l dHdvcmsgZGlyZWN0b3JpZXMgKi8KLSNlbmRpZiAvKiBORVRDT05OICovCi0jZW5kaWYgLyogTk9E SUFMICovCi0KLSNpZm5kZWYgTk9YRkVSCi0jaWZkZWYgQ0tfRkFTVAotICAgIGRvZmFzdCgpOyAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJ5IG5vdyBGQVNUIGRlZmF1bHRzIHNob3VsZCBi ZSBPSyAqLwotI2VuZGlmIC8qIENLX0ZBU1QgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lm bmRlZiBOT0NNREwKLSAgICBpa3Nsb2dpbigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyog SUtTRCBMb2dpbiBhbmQgb3RoZXIgc3R1ZmYgKi8KLSNpZmRlZiBJS1NECi0jaWZkZWYgTlQKLSAg ICBpZiAoIGluc2VydmVyICkKLSAgICAgIHNldG50Y3JlZHMoKTsKLSNlbmRpZiAvKiBOVCAqLwot I2VuZGlmIC8qIElLU0QgKi8KLSNlbmRpZiAvKiBOT0NNREwgKi8KLQotICAgIGlmIChob3djYWxs ZWQgPT0gSV9BTV9TU0hTVUIpIHsKLSAgICAgICAgcmVsaWFibGUgPSAxOwkJCS8qIFdlIHNheSB0 aGUgY29ubmVjdGlvbiBpcyByZWxpYWJsZSAqLwotICAgICAgICB4cmVsaWFibGUgPSAxOwkJCS8q IEFuZCB0aGF0IHdlIHNhaWQgaXQgd2FzICovCi0gICAgICAgIHNldHJlbGlhYmxlID0gMTsJCS8q IEFuZCBwcmV0ZW5kIHRoZSAidXNlciIgZGlkIHRvbyAqLwotICAgICAgICB4ZmluaXNoID0gMTsJ CQkvKiBGb3IgUkVNT1RFIEhFTFAgcmVzcG9uc2UgKi8KLSAgICAgICAgbWRtdHlwID0gMDsJCQkv KiBGb3IgdHRvcGVuKCkgKi8KLSAgICAgICAgY2tzdHJuY3B5KHR0bmFtZSwiMCIsVFROQU1MRU4r MSk7ICAvKiBVc2UgZmlsZSBkZXNjcmlwdG9yIDAgKi8KLSAgICAgICAgbG9jYWwgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBBbmQgZm9yY2UgcmVtb3RlIG1vZGUgKi8KLSAgICAgICAg dHRvcGVuKHR0bmFtZSwmbG9jYWwsbWRtdHlwLDApOyAvKiBPcGVuIHRoZSAiY29ubmVjdGlvbiIg Ki8KLSAgICAgICAgc3N0YXRlID0gJ3gnOwkJCS8qIEluaXRpYWwgc3RhdGUgaXMgU2VydmVyICov Ci0gICAgICAgIHByb3RvKCk7CQkJLyogRW50ZXIgcHJvdG9jb2wgKi8KLSAgICAgICAgZG9leGl0 KEdPT0RfRVhJVCx4aXRzdGEpOwkvKiBFeGl0IHdoZW4gZG9uZSAqLwotICAgIH0KLSAgICBkZWJ1 ZyhGMTExLCJob3djYWxsZWQiLG15bmFtZSxob3djYWxsZWQpOwotCi0jaWZkZWYgTk9DQ1RSQVAK LSAgICBkb3Rha2VpbmkoMCk7Ci0jZWxzZSAvKiBOT0NDVFJBUCAqLwotICAgIGRlYnVnKEYxMDAs Im1haW4gYWJvdXQgdG8gY2NfZXhlY3V0ZSIsIiIsMCk7Ci0gICAgc2V0aW50KCk7Ci0gICAgY2Nf ZXhlY3V0ZSggY2tqYWRkcihjbWpidWYpLCBkb3Rha2VpbmksIGZhaWx0YWtlaW5pICk7Ci0jZW5k aWYgLyogTk9DQ1RSQVAgKi8KLQotICAgIGRlYnVnKEYxMTEsIm1haW4gMiBjZmlsZWYiLGNtZGZp bCxjZmlsZWYpOwotICAgIGlmIChjbWRmaWxbMF0pIHsgICAgICAgICAgICAgICAgICAgIC8qIElm IHdlIGdvdCBvbmUgKHNlZSBwcmVzY2FuKCkpLi4uICovCi0jaWZkZWYgTk9DQ1RSQVAKLSAgICAg ICAgZG9jbWRmaWxlKDApOyAgICAgICAgICAgICAgICAgICAvKiBleGVjdXRlIGl0LiAqLwotI2Vs c2UgLyogTk9DQ1RSQVAgKi8KLSAgICAgICAgc2V0aW50KCk7Ci0gICAgICAgIGNjX2V4ZWN1dGUo IGNramFkZHIoY21qYnVmKSwgZG9jbWRmaWxlLCBmYWlsY21kZmlsZSApOwotI2VuZGlmIC8qIE5P Q0NUUkFQICovCi0gICAgfQotI2lmbmRlZiBPUzIgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFByZXNlcnZlIG5hbWUgc28gd2UgY2FuIGRlbGV0ZSBpdCAqLwotICAgICpjbWRmaWwgPSAn XDAnOyAgICAgICAgICAgICAgICAgICAgIC8qIERvbmUsIG51bGxpZnkgdGhlIGZpbGUgbmFtZSAq LwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PSUNQICovCi0KLSNpZm5kZWYgTk9DTURM Ci0vKiBMb29rIGZvciBhIFVOSVgtc3R5bGUgY29tbWFuZCBsaW5lLi4uICovCi0KLSAgICB3aGF0 ID0gV19OT1RISU5HOwotCi0gICAgZGVidWcoRjEwMSwibWFpbiBhcmdjIiwiIixhcmdjKTsKLSNp Zm5kZWYgTk9IRUxQCi0gICAgaW5pb3B0aGxwKCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyog SW5pdGlhbGl6ZSBjbWRsaW5lIGFyZyBoZWxwICovCi0jZW5kaWYgLyogTk9IRUxQICovCi0gICAg aWYgKAotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgIWNmaWxlZiAmJgotI2VuZGlmIC8qIENPTU1F TlQgKi8KLSAgICAgICAgYXJnYyA+IDEpIHsgICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5k IGxpbmUgYXJndW1lbnRzPyAqLwotICAgICAgICBzc3RhdGUgPSAoQ0hBUikgY21kbGluKCk7ICAg ICAgIC8qIFllcywgcGFyc2UuICovCi0jaWZkZWYgTkVUQ09OTgotI2lmbmRlZiBOT1VSTAotICAg ICAgICBpZiAoaGF2ZXVybCkgeyAgICAgICAgICAgICAgICAgIC8qIFdhcyBhIFVSTCBnaXZlbj8g Ki8KLSAgICAgICAgICAgIGRvdXJsKCk7ICAgICAgICAgICAgICAgICAgICAvKiBpZiBzbywgZG8g aXQuICovCi0gICAgICAgIH0KLSNlbmRpZiAvKiBOT1VSTCAqLwotI2VuZGlmIC8qIE5FVENPTk4g Ki8KLSNpZm5kZWYgTk9YRkVSCi0gICAgICAgIHpzdGF0ZSA9IHNzdGF0ZTsgICAgICAgICAgICAg ICAgLyogUmVtZW1iZXIgc3N0YXRlIGFyb3VuZCBwcm90b2NvbCAqLwotICAgICAgICBkZWJ1ZyhG MTAxLCJtYWluIHpzdGF0ZSIsIiIsenN0YXRlKTsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lm bmRlZiBOT0xPQ0FMCi0gICAgICAgIGlmIChjZmxnKSB7ICAgICAgICAgICAgICAgICAgICAgLyog Q29ubmVjdCBmaXJzdCBpZiByZXF1ZXN0ZWQgKi8KLSAgICAgICAgICAgIGRvY29uZWN0KDAsMCk7 Ci0gICAgICAgICAgICBpZiAodHRjaGsoKSA8IDApCi0gICAgICAgICAgICAgIGRvbG9nZW5kKCk7 Ci0gICAgICAgICAgICBjZmxnID0gMDsKLSAgICAgICAgfQotI2VuZGlmIC8qIE5PTE9DQUwgKi8K LQotI2lmbmRlZiBOT1hGRVIKLSAgICAgICAgaWYgKHNzdGF0ZSkgewotI2lmbmRlZiBOT0xPQ0FM Ci0gICAgICAgICAgICBpZiAoZGlzcGxhKSBjb25jYigoY2hhcillc2NhcGUpOyAvKiAoZm9yIGNv bnNvbGUgImludGVycnVwdHMiKSAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNpZmRlZiBOT0ND VFJBUAotICAgICAgICAgICAgZG9jbWRsaW5lKDEpOwotI2Vsc2UgLyogTk9DQ1RSQVAgKi8KLSAg ICAgICAgICAgIHNldGludCgpOwotICAgICAgICAgICAgY2NfZXhlY3V0ZSggY2tqYWRkcihjbWpi dWYpLCBkb2NtZGxpbmUsIGZhaWxjbWRsaW5lICk7Ci0jZW5kaWYgLyogTk9DQ1RSQVAgKi8KLSAg ICAgICAgfQotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZuZGVmIE5PSUNQCi0vKgotICBJZiBh IGNvbW1hbmQtbGluZSBhY3Rpb24gYXJndW1lbnQgd2FzIGdpdmVuIGFuZCAtUyAoInN0YXkiKSB3 YXMgbm90IGdpdmVuLAotICBleGl0IG5vdy4KLSovCi0gICAgICAgIGlmICgoY2ZsZyB8fCBjbmZs ZyB8fCB6c3RhdGUpICYmICFzdGF5ZmxnKQotI2VuZGlmIC8qIE5PSUNQICovCi0gICAgICAgICAg ZG9leGl0KEdPT0RfRVhJVCx4aXRzdGEpOyAgICAgLyogRXhpdCB3aXRoIGdvb2Qgc3RhdHVzICov Ci0KLSNpZm5kZWYgTk9MT0NBTAotI2lmbmRlZiBOT0lDUAotICAgICAgICBpZiAobG9jYWwpIHsK LSNpZmRlZiBORVRDT05OCi0gICAgICAgICAgICBpZiAoKGNmbGcgfHwgY25mbGcpICYmIHRuX2V4 aXQgJiYgdHRjaGsoKSA8IDApCi0gICAgICAgICAgICAgIGRvZXhpdChHT09EX0VYSVQseGl0c3Rh KTsgLyogRXhpdCB3aXRoIGdvb2Qgc3RhdHVzICovCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotICAg ICAgICAgICAgaWYgKGV4aXRvbmNsb3NlICYmICFuZXR3b3JrICYmCi0gICAgICAgICAgICAgICAg KGNhcnJpZXIgIT0gQ0FSX09GRiAmJiAodHRnbWRtKCkgJiBCTV9EQ0QpID09IDApKQotICAgICAg ICAgICAgICBkb2V4aXQoR09PRF9FWElULHhpdHN0YSk7IC8qIEV4aXQgd2l0aCBnb29kIHN0YXR1 cyAqLwotICAgICAgICAgICAgaWYgKGV4aXRvbmNsb3NlICYmIG5ldHdvcmsgJiYgdHRjaGsoKSA8 IDApCi0gICAgICAgICAgICAgIGRvZXhpdChHT09EX0VYSVQseGl0c3RhKTsgLyogRXhpdCB3aXRo IGdvb2Qgc3RhdHVzICovCi0gICAgICAgIH0KLSNlbmRpZiAvKiBOT0lDUCAqLwotI2VuZGlmIC8q IE5PTE9DQUwgKi8KLSAgICB9Ci0jZW5kaWYgLyogTk9DTURMICovCi0KLSNpZmRlZiBOT0lDUCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBpbnRlcmFjdGl2ZSBjb21tYW5kIHBhcnNl ciAqLwotI2lmbmRlZiBOT0NNREwKLSAgICBlbHNlIHsKLQotICAgICAgICAvKiBDb21tYW5kLWxp bmUtb25seSB2ZXJzaW9uICovCi0gICAgICAgIGZhdGFsKCI/Tm8gY29tbWFuZC1saW5lIG9wdGlv bnMgZ2l2ZW4gLSB0eXBlICdrZXJtaXQgLWgnIGZvciBoZWxwIik7Ci0gICAgfQotI2Vsc2UgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5laXRoZXIgb25lISAqLwotICAgICAg ICBzc3RhdGUgPSAneCc7Ci0gICAgICAgIGp1c3RvbmUgPSAwOwotICAgICAgICBwcm90bygpOyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFNvIGdvIGludG8gc2VydmVyIG1vZGUgKi8KLSAgICAg ICAgZG9leGl0KEdPT0RfRVhJVCx4aXRzdGEpOyAgICAgICAvKiBleGl0IHdpdGggZ29vZCBzdGF0 dXMgKi8KLQotI2VuZGlmIC8qIE5PQ01ETCAqLwotI2Vsc2UgLyogbm90IE5PSUNQICovCi0vKgot ICBJZiBubyBhY3Rpb24gcmVxdWVzdGVkIG9uIGNvbW1hbmQgbGluZSwgb3IgaWYgLVMgKCJzdGF5 Iikgd2FzIGluY2x1ZGVkLAotICBlbnRlciB0aGUgaW50ZXJhY3RpdmUgY29tbWFuZCBwYXJzZXIu Ci0qLwotICAgIGlmICghY2xjbWRzKQotICAgICAgaGVyYWxkKCk7ICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIERpc3BsYXkgcHJvZ3JhbSBoZXJhbGQuICovCi0KLSNpZmRlZiBOT0NDVFJBUAot ICAgIGRlYnVnKEYxMDAsIm1haW4gTk9DQ1RSQVAgc2V0dGluZyBpbnRlcnJ1cHQgdHJhcCIsIiIs MCk7Ci0gICAgc2V0aW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IHVwIGNv bW1hbmQgaW50ZXJydXB0IHRyYXBzICovCi0gICAgZG9pY3AoTlVMTCk7Ci0jZWxzZSAvKiBOT0ND VFJBUCAqLwotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIGRlYnVnKEYxMDAsIm1haW4gc2V0dGlu ZyBpbnRlcnJ1cHQgdHJhcCIsIiIsMCk7Ci0gICAgICAgIHNldGludCgpOyAgICAgICAgICAgICAg ICAgICAgICAgLyogU2V0IHVwIGNvbW1hbmQgaW50ZXJydXB0IHRyYXBzICovCi0gICAgICAgIGlm ICghY2NfZXhlY3V0ZShja2phZGRyKGNtamJ1ZiksIGRvaWNwLCBmYWlsaWNwKSkKLSAgICAgICAg ICBicmVhazsKLSAgICB9Ci0jZW5kaWYgLyogTk9DQ1RSQVAgKi8KLSNlbmRpZiAvKiBOT0lDUCAq LwotI2lmbmRlZiBNQUlOSVNWT0lECi0gICAgcmV0dXJuKDEpOwotI2VuZGlmIC8qIE1BSU5JU1ZP SUQgKi8KLX0KLQotI2lmZGVmIERZTkFNSUMKLS8qIEFsbG9jYXRlIGZpbGUgaS9vIGJ1ZmZlcnMg Ki8KLQotY2hhciAqemluYnVmZmVyID0gTlVMTCwgKnpvdXRidWZmZXIgPSBOVUxMOwotCi1pbnQK LWdldGlvYnMoKSB7Ci0gICAgemluYnVmZmVyID0gKGNoYXIgKiltYWxsb2MoSU5CVUZTSVpFKTsK LSAgICBpZiAoIXppbmJ1ZmZlcikgcmV0dXJuKC0xKTsKLSAgICB6b3V0YnVmZmVyID0gKGNoYXIg KiltYWxsb2Moem9idWZzaXplKTsKLSAgICBkZWJ1ZyhGMTAxLCJ6b3V0YnVmZmVyIG1hbGxvYyIs IiIsem9idWZzaXplKTsKLSAgICBpZiAoIXpvdXRidWZmZXIpIHJldHVybigtMSk7Ci0gICAgZGVi dWcoRjEwMCwiZ2V0aW9icyBvayIsIiIsMCk7Ci0gICAgcmV0dXJuKDApOwotfQotI2VuZGlmIC8q IERZTkFNSUMgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05 LjAuMzAyL2NrY21kYi5jIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9j a2NtZGIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU1Y2ViYy4uMDAwMDAwMAot LS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY21kYi5jCisrKyAv ZGV2L251bGwKQEAgLTEsMzg3ICswLDAgQEAKLS8qCi0gIEMgSyBDIE0gRCBCIC4gQyAgLS0gIG1h bGxvYyBkZWJ1Z2dlci4KLSovCi0KLS8qCi0gIEF1dGhvcjogSG93aWUgS2F5ZSwgQ29sdW1iaWEg VW5pdmVyc2l0eSBDZW50ZXIgZm9yIENvbXB1dGluZyBBY3Rpdml0aWVzLgotCi0gIENvcHlyaWdo dCAoQykgMTk4NSwgMTk5OSwKLSAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGlu IHRoZSBDaXR5IG9mIE5ldyBZb3JrLgotICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhl IEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCi0gICAgY29weXJpZ2h0IHRleHQgaW4g dGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCi0qLwot LyogVXNlIHRoZSByZWFsIG9uZXMgaW4gdGhpcyBtb2R1bGUhICovCi0jaWZkZWYgbWFsbG9jCi0j dW5kZWYgbWFsbG9jCi0jZW5kaWYgLyogbWFsbG9jICovCi0jaWZkZWYgY2FsbG9jCi0jdW5kZWYg Y2FsbG9jCi0jZW5kaWYgLyogY2FsbG9jICovCi0jaWZkZWYgcmVhbGxvYwotI3VuZGVmIHJlYWxs b2MKLSNlbmRpZiAvKiByZWFsbG9jICovCi0jaWZkZWYgZnJlZQotI3VuZGVmIGZyZWUKLSNlbmRp ZiAvKiBmcmVlICovCi0KLSNpbmNsdWRlICJja2NzeW0uaCIKLSNpbmNsdWRlIDxzdGRpby5oPgot I2luY2x1ZGUgImNrY2RlYi5oIgotCi0jaWZkZWYgQ09IRVJFTlQKLV9QUk9UT1RZUCAoIEZJTEUg KiBmZG9wZW4sIChpbnQsIGNoYXIgKikgKTsKLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotCi0vKgot ICBtZW1kZWJ1ZzoKLSAgdmFyaWFibGUgdG8gY29udHJvbCBtZW1vcnkgZGVidWdnaW5nLgotICBp ZiBtZW1kZWJ1ZyA9PSAgMSwgdGhlbiBhY3Rpb24gaXMgYWx3YXlzIHRha2VuLgotICBpZiBtZW1k ZWJ1ZyA9PSAgMCwgdGhlbiBubyBhY3Rpb24gaXMgdGFrZW4uCi0gIGlmIG1lbWRlYnVnID09IC0x LCB0aGVuIHRoZSB1c2VyIGlzIGFza2VkICh3b3JrcyB3ZWxsIHdpdGggZ2RiKS4KLSovCi1pbnQg bWVtZGVidWcgPSAtMTsKLWludCBkaXNhYmxlZCA9IDA7Ci1pbnQgaW5pdGVkID0gMDsKLS8qCi0g IFRvIHVzZSB0aGlzIHBhY2thZ2UsIGNvbXBpbGUgeW91ciBwcm9ncmFtIHdpdGg6Ci0gIC1EbWFs bG9jPWRtYWxsb2MgLURmcmVlPWRmcmVlID1EY2FsbG9jPWRjYWxsb2MgLi4uIC1ETURFQlVHCi0g IGFuZCB0aGVuIGxpbmsgaXQgd2l0aCBja2NtZGIuYy4KLSovCi0jaWZkZWYgTURFQlVHCi0KLSNp Zm5kZWYgTV9TSVpFX1QKLSNpZmRlZiBORVhUCi0jZGVmaW5lIE1fU0laRV9UIHNpemVfdAotI2Vs c2UKLSNpZmRlZiBTVU5PUzQxCi0jZGVmaW5lIE1fU0laRV9UIHVuc2lnbmVkCi0jZWxzZQotI2Rl ZmluZSBNX1NJWkVfVCBpbnQKLSNlbmRpZiAvKiBTVU5PUzQxICovCi0jZW5kaWYgLyogTkVYVCAq LwotI2VuZGlmIC8qIE1fU0laRV9UICovCi0KLSNpZmRlZiBDS19BTlNJQwotX1BST1RPVFlQKCB2 b2lkIGZyZWUsICh2b2lkICopICk7Ci1fUFJPVE9UWVAoIHZvaWQgKiBtYWxsb2MsIChzaXplX3Qp ICk7Ci1fUFJPVE9UWVAoIHZvaWQgKiByZWFsbG9jLCAodm9pZCAqLCBzaXplX3QpICk7Ci0jZWxz ZQotX1BST1RPVFlQKCBWT0lEIGZyZWUsIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiBt YWxsb2MsIChNX1NJWkVfVCkgKTsKLV9QUk9UT1RZUCggY2hhciAqIHJlYWxsb2MsIChjaGFyICos IE1fU0laRV9UKSApOwotI2VuZGlmIC8qIE5FWFQgKi8KLQotX1BST1RPVFlQKCBWT0lEIG1faW5z ZXJ0LCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBpbnQgbV9kZWxldGUsIChjaGFyICopICk7Ci0K LV9QUk9UT1RZUCggY2hhciAqIGRtYWxsb2MsIChpbnQpICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiBk Y2FsbG9jLCAoaW50LCBpbnQpICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiBkcmVhbGxvYywgKGNoYXIg KiwgaW50KSApOwotCi1fUFJPVE9UWVAoIGNoYXIgKnNldF9yYW5nZV9jaGVjaywgKGNoYXIgKiwg aW50KSApOwotX1BST1RPVFlQKCBjaGFyICpjaGVja19yYW5nZSwgKGNoYXIgKikgKTsKLV9QUk9U T1RZUCggc3RhdGljIGNoYXIgKm1heWJlX2NoZWNrX3JhbmdlLCAoY2hhciAqKSApOwotCi1fUFJP VE9UWVAoIHN0YXRpYyBWT0lEIG1heWJlX3F1aXQsIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIHN0 YXRpYyBpbnQgYXNrLCAoY2hhciAqKSApOwotCi0jaWZuZGVmIG1pbgotI2RlZmluZSBtaW4oeCx5 KSAoKHgpIDwgKHkpID8gKHgpIDogKHkpKQotI2VuZGlmIC8qIG1pbiAqLwotI2RlZmluZSBSQU5H RSAiQUJDREVGR0hJSktMTU5PUCIKLSNkZWZpbmUgSU5UU0laRSAgc2l6ZW9mKGludCkKLSNkZWZp bmUgTE9OR1NJWkUgc2l6ZW9mKGxvbmcpCi0jZGVmaW5lIFJTSVpFICAgIHNpemVvZihSQU5HRSkK LSNkZWZpbmUgUkZST05UICAgbWluKChSU0laRS8yKSxMT05HU0laRSkKLSNkZWZpbmUgUkJBQ0sg ICAgbWluKChSU0laRS1SRlJPTlQpLExPTkdTSVpFKQotCi1jaGFyICoKLWRtYWxsb2Moc2l6ZSkg aW50IHNpemU7IHsKLSAgICBjaGFyICpjcDsKLQotICAgIGNwID0gbWFsbG9jKHNpemUgKyBSU0la RSArIElOVFNJWkUpOwotICAgIGlmIChjcCkgewotICAgICAgICBjcCA9IHNldF9yYW5nZV9jaGVj ayhjcCwgc2l6ZSk7Ci0gICAgICAgIG1faW5zZXJ0KGNwKTsKLSAgICB9Ci0gICAgcmV0dXJuKGNw KTsKLX0KLQotY2hhciAqCi1kY2FsbG9jKG5lbGVtLCBlbHNpemUpIGludCBuZWxlbSwgZWxzaXpl OyB7Ci0gICAgY2hhciAqY3A7Ci0KLSAgICBjcCA9IGRtYWxsb2MobmVsZW0gKiBlbHNpemUpOwot ICAgIGlmIChjcCkKLSAgICAgICAgbWVtc2V0KGNwLCAwLCBuZWxlbSAqIGVsc2l6ZSk7Ci0gICAg cmV0dXJuKGNwKTsKLX0KLQotY2hhciAqCi1kcmVhbGxvYyhicCxzaXplKSBjaGFyICpicDsgaW50 IHNpemU7IHsKLSAgICBjaGFyICpjcDsKLQotICAgIGlmIChicCA9PSBOVUxMKSB7Ci0gICAgICAg IG1heWJlX3F1aXQoIkZyZWVpbmcgTlVMTCBwb2ludGVyIik7Ci0gICAgfSBlbHNlIHsKLSAgICAg ICAgbV9kZWxldGUoYnApOwotICAgICAgICBjcCA9IGNoZWNrX3JhbmdlKGJwKTsKLSAgICB9Ci0g ICAgY3AgPSByZWFsbG9jKGNwLCBzaXplICsgUlNJWkUgKyBJTlRTSVpFKTsKLSAgICBpZiAoY3Ap IHsKLSAgICAgICAgY3AgPSBzZXRfcmFuZ2VfY2hlY2soY3AsIHNpemUpOwotICAgICAgICBtX2lu c2VydChjcCk7Ci0gICAgfQotICAgIHJldHVybihjcCk7Ci19Ci0KLVZPSUQKLWRmcmVlKGNwKSBj aGFyICpjcDsgewotICAgIGlmIChjcCA9PSBOVUxMKQotICAgICAgICBtYXliZV9xdWl0KCJGcmVl aW5nIE5VTEwgcG9pbnRlciIpOwotICAgIGVsc2UgewotICAgICAgICBzd2l0Y2gobV9kZWxldGUo Y3ApKSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIGNwID0gbWF5YmVfY2hlY2tfcmFu Z2UoY3ApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAg IGNwID0gY2hlY2tfcmFuZ2UoY3ApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug MjoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotI2lmbmRlZiBDS19BTlNJ QwotICAgIHJldHVybihmcmVlKGNwKSk7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLX0KLQotY2hh ciAqCi1zZXRfcmFuZ2VfY2hlY2soY3Asc2l6ZSkgY2hhciAqY3A7IGludCBzaXplOyB7Ci0gICAg cmVnaXN0ZXIgaW50IGk7Ci0gICAgaW50IHRtcCA9IHNpemU7Ci0KLSAgICBmb3IoaSA9IDA7IGkg PCBJTlRTSVpFOyBpKyspIHsgICAgICAvKiBzZXQgdGhlIHNpemUgaW4gdGhlIHN0cmluZyAqLwot ICAgICAgICBjcFtpXSA9IHRtcCAmIDB4ZmY7Ci0gICAgICAgIHRtcCA+Pj0gODsKLSAgICB9Ci0g ICAgY3AgKz0gSU5UU0laRTsgICAgICAgICAgICAgICAgICAgICAgLyogc2tpcCB0aGUgc2l6ZSAq LwotCi0gICAgZm9yKGkgPSAwOyBpIDwgUkZST05UOyBpKyspICAgICAgICAgLyogc2V0IHRoZSBm cm9udCBvZiB0aGUgcmFuZ2UgY2hlY2sgKi8KLSAgICAgICAgY3BbaV0gPSBSQU5HRVtpXTsgICAg ICAgICAgICAgICAvKiBzdHJpbmcgKi8KLQotICAgIGNwICs9IFJGUk9OVDsgICAgICAgICAgICAg ICAgICAgICAgIC8qIHNraXAgdGhlIGZyb250IHJhbmdlIGNoZWNrICovCi0KLSAgICBmb3IoaSA9 IDA7IGkgPCBSQkFDSzsgaSsrKSAgICAgICAgICAvKiBzZXQgdGhlIGJhY2sgb2RmIHRoZSByYW5n ZSBjaGVjayAqLwotICAgICAgICBjcFtpK3NpemVdID0gUkFOR0VbaStSRlJPTlRdOwotCi0gICAg cmV0dXJuKGNwKTsKLX0KLQotLyoKLSAgUHV0IGNhbGxzIHRvIHRoaXMgcm91dGluZSBpbiB5b3Vy IGNvZGUgYW55IHBsYWNlIHdoZXJlIHlvdSB3YW50IHRvCi0gIGNoZWNrIHdoZXRoZXIgeW91J3Zl IGNvcGllZCB0b28gbWFueSBjaGFyYWN0ZXJzIGludG8gYSBtYWxsb2MnZCBzcGFjZS4KLSovCi1j aGFyICoKLWNoZWNrX3JhbmdlKGNwKSBjaGFyICpjcDsgewotICAgIHJlZ2lzdGVyIGNoYXIgKmJw ID0gY3AgLSBSRlJPTlQgLSBJTlRTSVpFOwotICAgIGNoYXIgKnhwID0gYnA7Ci0gICAgcmVnaXN0 ZXIgaW50IGk7Ci0gICAgaW50IHNpemUgPSAwOwotCi0gICAgZm9yKGkgPSAwIDsgaSA8IElOVFNJ WkU7IGkrKykgeyAgICAgLyogZ2V0IHRoZSBzaXplIG91dCBvZiB0aGUgc3RyaW5nICovCi0gICAg ICAgIHNpemUgPDw9IDg7Ci0gICAgICAgIHNpemUgfD0gYnBbSU5UU0laRS1pLTFdICYgMHhmZjsK LSAgICB9Ci0gICAgYnAgKz0gSU5UU0laRTsKLQotICAgIGZvcihpID0gMDsgaSA8IFJGUk9OVDsg aSsrKSAgICAgICAgIC8qIGNoZWNrIGZyb250IHJhbmdlIGNoZWNrICovCi0gICAgICAgIGlmIChi cFtpXSAhPSBSQU5HRVtpXSkgewotICAgICAgICAgICAgbWF5YmVfcXVpdCgibGVmdHNpZGUgbWFs bG9jIGJ1ZmZlciBvdmVycnVuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg IGJwICs9IFJGUk9OVDsgICAgICAgICAgICAgICAgICAgICAgIC8qIHNraXAgZnJvbnQgcmFuZ2Ug Y2hlY2sgKi8KLQotICAgIGZvcihpID0gMDsgaSA8IFJCQUNLOyBpKyspICAgICAgICAgIC8qIGNo ZWNrIGJhY2sgcmFuZ2UgY2hlY2sgKi8KLSAgICAgICAgaWYgKGJwW2krc2l6ZV0gIT0gUkFOR0Vb aStSRlJPTlRdKSB7Ci0gICAgICAgICAgICBtYXliZV9xdWl0KCJyaWdodHNpZGUgbWFsbG9jIGJ1 ZmZlciBvdmVycnVuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIHJldHVy bih4cCk7Ci19Ci0KLXN0YXRpYyBjaGFyICoKLW1heWJlX2NoZWNrX3JhbmdlKGNwKSBjaGFyICpj cDsgewotICAgIHJlZ2lzdGVyIGNoYXIgKmJwID0gY3AgLSBSRlJPTlQgLSBJTlRTSVpFOwotICAg IGNoYXIgKnhwID0gYnA7Ci0gICAgcmVnaXN0ZXIgaW50IGk7Ci0gICAgaW50IHNpemUgPSAwOwot Ci0gICAgZm9yKGkgPSAwIDsgaSA8IElOVFNJWkU7IGkrKykgeyAgICAgLyogZ2V0IHRoZSBzaXpl IG91dCBvZiB0aGUgc3RyaW5nICovCi0gICAgICAgIHNpemUgPDw9IDg7Ci0gICAgICAgIHNpemUg fD0gYnBbSU5UU0laRS1pLTFdICYgMHhmZjsKLSAgICB9Ci0gICAgYnAgKz0gSU5UU0laRTsKLQot ICAgIGZvcihpID0gMDsgaSA8IFJGUk9OVDsgaSsrKSAgICAgICAgIC8qIGNoZWNrIGZyb250IHJh bmdlIGNoZWNrICovCi0gICAgICAgIGlmIChicFtpXSAhPSBSQU5HRVtpXSkgewotICAgICAgICAg ICAgcmV0dXJuKGNwKTsKLSAgICAgICAgfQotICAgIGJwICs9IFJGUk9OVDsgICAgICAgICAgICAg ICAgICAgICAgIC8qIHNraXAgZnJvbnQgcmFuZ2UgY2hlY2sgKi8KLQotICAgIGZvcihpID0gMDsg aSA8IFJCQUNLOyBpKyspICAgICAgICAgIC8qIGNoZWNrIGJhY2sgcmFuZ2UgY2hlY2sgKi8KLSAg ICAgICAgaWYgKGJwW2krc2l6ZV0gIT0gUkFOR0VbaStSRlJPTlRdKSB7Ci0gICAgICAgICAgICBm cHJpbnRmKHN0ZGVyciwicmlnaHRzaWRlIG1hbGxvYyBidWZmZXIgb3ZlcnJ1blxuIik7Ci0gICAg ICAgICAgICBhYm9ydCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICByZXR1 cm4oeHApOwotfQotCi0jZGVmaW5lIEJVQ0tFVFMgMTAwMDAKLWNoYXIgKm1fdXNlZFtCVUNLRVRT XTsKLWNoYXIgKm1fdXNlZDJbQlVDS0VUU107Ci0KLVZPSUQKLW1faW5zZXJ0KGNwKSByZWdpc3Rl ciBjaGFyICpjcDsgewotICAgIHJlZ2lzdGVyIGludCBpOwotCi0gICAgaWYgKGRpc2FibGVkKQot ICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IoaSA9IDA7IGkgPCBCVUNLRVRTOyBpKyspCi0gICAg ICAgIGlmIChtX3VzZWRbaV0gPT0gMCkgewotICAgICAgICAgICAgbV91c2VkW2ldID0gY3A7Ci0g ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICBkaXNhYmxlZCArKzsKLX0KLQotc3Rh dGljIFZPSUQKLW1faW5zZXJ0MihjcCkgcmVnaXN0ZXIgY2hhciAqY3A7IHsKLSAgICByZWdpc3Rl ciBpbnQgaTsKLQotICAgIGlmIChkaXNhYmxlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIGZvcihp ID0gMDsgaSA8IEJVQ0tFVFM7IGkrKykKLSAgICAgICAgaWYgKG1fdXNlZDJbaV0gPT0gMCkgewot ICAgICAgICAgICAgbV91c2VkMltpXSA9IGNwOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg ICB9Ci0gICAgZGlzYWJsZWQgKys7Ci19Ci0KLWludAotbV9kZWxldGUoY3ApIHJlZ2lzdGVyIGNo YXIgKmNwOyB7Ci0gICAgcmVnaXN0ZXIgaW50IGk7Ci0KLSAgICBmb3IoaSA9IDA7IGkgPCBCVUNL RVRTOyBpKyspCi0gICAgICAgIGlmIChtX3VzZWRbaV0gPT0gY3ApIHsKLSAgICAgICAgICAgIG1f dXNlZFtpXSA9IDA7Ci0gICAgICAgICAgICByZXR1cm4oMSk7Ci0gICAgICAgIH0KLSAgICBmb3Io aSA9IDA7IGkgPCBCVUNLRVRTOyBpKyspCi0gICAgICAgIGlmIChtX3VzZWQyW2ldID09IGNwKSB7 Ci0gICAgICAgICAgICBtX3VzZWQyW2ldID0gMDsKLSAgICAgICAgICAgIHJldHVybigyKTsKLSAg ICAgICAgfQotICAgIGlmIChkaXNhYmxlZCkKLSAgICAgICAgcmV0dXJuKDApOwotCi0gICAgbWF5 YmVfcXVpdCgiRnJlZWluZyB1bm1hbGxvYydlZCBwb2ludGVyIik7Ci0gICAgcmV0dXJuKDApOwot fQotCi1WT0lECi1tX2luaXQoKSB7Ci0gICAgcmVnaXN0ZXIgaW50IGk7Ci0KLSAgICBpbml0ZWQg PSAxOwotICAgIGRpc2FibGVkID0gMDsKLSNpZmRlZiBORVhUCi0gICAgbWFsbG9jX2RlYnVnKDIr NCs4KzE2KTsKLSNlbmRpZiAvKiBORVhUICovCi0KLSAgICBmb3IoaSA9IDA7IGkgPCBCVUNLRVRT OyBpKyspCi0gICAgICBtX3VzZWRbaV0gPSAwOwotfQotCi1WT0lECi1tX2RvbmUoKSB7Ci0gICAg cmVnaXN0ZXIgaW50IGksaj0wOwotCi0gICAgaWYgKGRpc2FibGVkKQotICAgICAgICByZXR1cm47 Ci0gICAgZm9yKGkgPSAwOyBpIDwgQlVDS0VUUzsgaSsrKQotICAgICAgICBpZiAobV91c2VkW2ld ICE9IDApIHsKLSAgICAgICAgICAgIGlmIChtZW1kZWJ1ZykgewotICAgICAgICAgICAgICAgIGlm IChqID09IDApCi0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJ1bmZyZWUnZWQg YnVmZmVycywgaW5kaWNlczogIik7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIiVk LCAiLCBpKTsKLSAgICAgICAgICAgICAgICBqKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K LSAgICBpZiAoaikKLSAgICAgICAgZnByaW50ZihzdGRlcnIsIlxuIik7Ci0gICAgZm9yKGkgPSAw OyBpIDwgQlVDS0VUUzsgaSsrKQotICAgICAgICBpZiAobV91c2VkMltpXSAhPSAwKSB7Ci0gICAg ICAgICAgICBpZiAobWVtZGVidWcpIHsKLSAgICAgICAgICAgICAgICBpZiAoaiA9PSAwKQotICAg ICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwidW5mcmVlJ2VkIHJlZ2lzdGVyZWQgYnVm ZmVycywgaW5kaWNlczogIik7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIiVkLCAi LCBpKTsKLSAgICAgICAgICAgICAgICBqKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg ICBpZiAoaikKLSAgICAgICAgZnByaW50ZihzdGRlcnIsIlxuIik7Ci0gICAgaWYgKGopCi0gICAg ICAgIG1heWJlX3F1aXQoIlVuZnJlZSdlZCBtYWxsb2MgYnVmZmVycyIpOwotfQotCi1WT0lECi1t X2NoZWNrcmFuZ2VzKCkgewotICAgIGludCBpOwotCi0gICAgZm9yICggaSA9IDA7IGkgPCBCVUNL RVRTOyBpKyspCi0gICAgICAgIGlmIChtX3VzZWRbaV0pCi0gICAgICAgICAgICBjaGVja19yYW5n ZShtX3VzZWRbaV0pOwotfQotCi1zdGF0aWMgVk9JRAotbWF5YmVfcXVpdChzdHIpIGNoYXIgKnN0 cjsgewotICAgIGRlYnVnKEYxMDAsIm1kZWJ1ZyBtYXliZV9xdWl0IiwiIiwwKTsKLSAgICBpZiAo bWVtZGVidWcgPT0gMCkKLSAgICAgICAgcmV0dXJuOwotICAgIGZwcmludGYoc3RkZXJyLCIlc1xu IixzdHIpOwotICAgIGlmIChtZW1kZWJ1ZyA9PSAxKQotICAgICAgICBhYm9ydCgpOwotICAgIGlm IChtZW1kZWJ1ZyA9PSAtMSkKLSAgICAgICAgaWYgKGFzaygiUXVpdD8gIikpCi0gICAgICAgICAg ICBhYm9ydCgpOwotfQotCi1zdGF0aWMgaW50Ci1hc2soc3RyKSBjaGFyICpzdHI7IHsKLSAgICBj aGFyIGJ1ZlsxMDBdOwotICAgIEZJTEUgKmluOwotICAgIGludCBmZDsKLQotICAgIGZkID0gZHVw KGZpbGVubyhzdGRpbikpOwotICAgIGluID0gZmRvcGVuKGZkLCAiciIpOwotICAgIHdoaWxlKDEp IHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsc3RyKTsKLSAgICAgICAgZmZsdXNoKHN0ZGVycik7 Ci0gICAgICAgIGlmIChmZ2V0cyhidWYsIDk5LCBpbikgPT0gTlVMTCkgLyogRU9GPyAqLwotICAg ICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICBpZiAoYnVmWzBdID09ICduJyB8fCBidWZbMF0g PT0gJ04nKSB7Ci0gICAgICAgICAgICBmY2xvc2UoaW4pOwotICAgICAgICAgICAgcmV0dXJuKDAp OwotICAgICAgICB9Ci0gICAgICAgIGlmIChidWZbMF0gPT0gJ3knIHx8IGJ1ZlswXSA9PSAnWScp IHsKLSAgICAgICAgICAgIGZjbG9zZShpbik7Ci0gICAgICAgICAgICByZXR1cm4oMSk7Ci0gICAg ICAgIH0KLSAgICAgICAgZnByaW50ZihzdGRlcnIsInBsZWFzZSBhbnN3ZXIgeS9uLlxuIik7Ci0g ICAgfQotfQotI2VuZGlmIC8qIE1ERUJVRyAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMw Mi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjbmV0LmMgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQv Y2tlcm1pdC05LjAuMzAyL2NrY25ldC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAy YmIwMWE2Li4wMDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4z MDIvY2tjbmV0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQ0NyArMCwwIEBACi1jaGFyICpja25l dHYgPSAiTmV0d29yayBzdXBwb3J0LCA5LjAuMjk3LCAxNCBKdWwgMjAxMSI7Ci0KLS8qICBDIEsg QyBOIEUgVCAgLS0gIE5ldHdvcmsgc3VwcG9ydCAgKi8KLQotLyoKLSAgQ29weXJpZ2h0IChDKSAx OTg1LCAyMDExLAotICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENp dHkgb2YgTmV3IFlvcmsuCi0gICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJt aXQgQ09QWUlORy5UWFQgZmlsZSBvciB0aGUKLSAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tj bWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KLSovCi0KLS8qCi0g IFJFTUlOREVSOiBBbnkgY2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB0aGF0IG90aGVyIG1vZHVs ZXMgZGVwZW5kIG11c3QKLSAgYWxzbyBiZSBtYWRlIHRvIGNrbG5ldC5jIChmb3IgVk9TKSB1bnRp bCBzdWNoIHRpbWUgYXMgY2tsbmV0LmMgYW5kIHRoaXMKLSAgbW9kdWxlIGFyZSBtZXJnZWQgYmFj ayB0b2dldGhlci4KLQotICBOT1RFIFRPIENPTlRSSUJVVE9SUzogVGhpcyBmaWxlLCBhbmQgYWxs IHRoZSBvdGhlciBzaGFyZWQgKGNrYyBhbmQgY2t1KQotICBDLUtlcm1pdCBzb3VyY2UgZmlsZXMs IG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIEMgcHJlcHJvY2Vzc29ycyB0aGF0IHN1cHBvcnQKLSAg b25seSAjaWZkZWYsICNlbHNlLCAjZW5kaWYsICNkZWZpbmUsIGFuZCAjdW5kZWYuICBQbGVhc2Ug ZG8gbm90IHVzZSAjaWYsCi0gIGxvZ2ljYWwgb3BlcmF0b3JzLCBvciBvdGhlciBwcmVwcm9jZXNz b3IgZmVhdHVyZXMgaW4gdGhpcyBtb2R1bGUuICBBbHNvLAotICBkb24ndCB1c2UgYW55IEFOU0kg QyBjb25zdHJ1Y3RzIGV4Y2VwdCB3aXRoaW4gI2lmZGVmIENLX0FOU0lDLi4jZW5kaWYuCi0KLSAg QXV0aG9yczoKLQotICBGcmFuayBkYSBDcnV6IChmZGNAY29sdW1iaWEuZWR1KSwKLSAgICBDb2x1 bWJpYSBVbml2ZXJzaXR5IEFjYWRlbWljIEluZm9ybWF0aW9uIFN5c3RlbXMsIE5ldyBZb3JrIENp dHkuCi0gIEplZmZyZXkgRSBBbHRtYW4gKGphbHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20pIC0t IFByaW1hcnkgCi0gICAgbWFpbnRhaW5lci9kZXZlbG9wZXIgc2luY2UgYWJvdXQgMTk5Ni4KLSAg bmV0b3BlbigpIHJvdXRpbmUgZm9yIFRDUC9JUCBvcmlnaW5hbGx5IGJ5IEtlbiBZYXAsIFJvY2hl c3RlciBVbml2ZXJzaXR5Ci0gICAgKGtlbkBjcy5yb2NoZXN0ZXIuZWR1KSAobm8gbG9uZ2VyIGF0 IHRoYXQgYWRkcmVzcykuCi0gIE1pc3NpbmcgcGllY2VzIGZvciBFeGNlbGFuIHNvY2tldHMgbGli cmFyeSBmcm9tIFdpbGxpYW0gQmFkZXIuCi0gIFRlbG5ldCBwcm90b2NvbCBieSBGcmFuayBkYSBD cnV6IGFuZCBKZWZmcmV5IEFsdG1hbi4KLSAgUmxvZ2luIHByb3RvY29sIGJ5IEplZmZyZXkgRSBB bHRtYW4uCi0gIFNTTCBzdXBwb3J0IGFkYXB0ZWQgYnkgSmVmZnJleSBFIEFsdG1hbiBmcm9tIHdv cmsgZG9uZSBieQotICAgIFRpbSBIdWRzb24gPHRqaEBjcnlwdG9zb2Z0LmNvbT4gKzYxIDcgMzI3 ODE1ODEKLSAgVExTIHN1cHBvcnQgYnkgSmVmZnJleSBFIEFsdG1hbi4KLSAgSFRUUCBzdXBwb3J0 IGJ5IEplZmZyZXkgRSBBbHRtYW4uCi0gIFRHViBNdWx0aU5ldCBjb2RlIGJ5IEZyYW5rIGRhIENy dXouCi0gIE11bHRpTmV0IGNvZGUgYWRhcHRlZCB0byBXSU4vVENQIGJ5IFJheSBIdW50ZXIgb2Yg VFdHLgotICBNdWx0aU5ldCBjb2RlIGFkYXB0ZWQgdG8gREVDIFRDUC9JUCBieSBMZWUgVGliYmVy dCBvZiBERUMgYW5kIEZyYW5rIGRhIENydXouCi0gIFRDUC9JUCBzdXBwb3J0IGFkYXB0ZWQgdG8g SUJNIFRDUC9JUCAxLjIuMSwyLjAgZm9yIE9TLzIgYnkgS2FpIFV3ZSBSb21tZWwuCi0gIENNVS1P cGVuVk1TL0lQIG1vZGlmaWNhdGlvbnMgYnkgTWlrZSBPJ01hbGxleSwgRGlnaXRhbCAoREVDKS4K LSAgWC4yNSBzdXBwb3J0IGJ5IE1hcmNlbGxvIEZydXRpZywgQ2F0aG9saWMgVW5pdmVyc2l0eSwK LSAgICBSaW8gZGUgSmFuZWlybywgQnJhemlsIChmcnV0aWdAcm5wLmltcGEuYnIpIHdpdGggZml4 ZXMgZnJvbQotICAgIFN0ZWZhYW4gRWVja2VscywgRXVyb2tvbSwgTHV4ZW1ib3VyZy4KLSAgICBE YXZpZCBMYW5lIGFkZGVkIHN1cHBvcnQgZm9yIFN0cmF0dXMgVk9TIFguMjUgMTk5Ni4KLSAgICBT dGVwaGVuIFJpZWhtIGFkZGVkIHN1cHBvcnQgZm9yIElCTSBBSVggWC4yNSBpbiBBcHJpbCAxOTk4 LgotICBPdGhlciBjb250cmlidXRpb25zIGFzIGluZGljYXRlZCBpbiB0aGUgY29kZS4KLSovCi0j ZGVmaW5lIENLQ05FVF9DCi0jaW5jbHVkZSAiY2tjc3ltLmgiCi0jaW5jbHVkZSAiY2tjZGViLmgi Ci0jaW5jbHVkZSAiY2tja2VyLmgiCi0jaW5jbHVkZSAiY2tjYXNjLmgiCi0jaWZkZWYgSTM4NklY ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSGFzIHRvIGNvbWUgYmVmb3JlIGNrY25ldC5o IGluICovCi0jaW5jbHVkZSA8ZXJybm8uaD4gICAgICAgICAgICAgICAgICAgICAgLyogdGhpcyB2 ZXJzaW9uLCBidXQgYWZ0ZXIgaW4gb3RoZXJzICovCi0jZW5kaWYgLyogSTM4NklYICovCi0jaW5j bHVkZSAiY2tjbmV0LmgiICAgICAgICAgICAgICAgICAgICAgLyogd2hpY2ggaW5jbHVkZXMgY2tj dGVsLmggKi8KLSNpZmRlZiBDS19TU0wKLSNpbmNsdWRlICJja19zc2wuaCIKLSNlbmRpZiAvKiBD S19TU0wgKi8KLQotI2lmZGVmIENLX0ROU19TUlYKLSNpZmRlZiBPUzIKLSNpZmRlZiBOVAotI2lu Y2x1ZGUgPHdzaGVscGVyLmg+Ci0jZWxzZSAvKiBOVCAqLwotLyogIUVycm9yIE9TLzIgZG9lcyBu b3Qgc3VwcG9ydCBETlMgU2VydmljZSBSZWNvcmRzLiAqLwotI2VuZGlmIC8qIE5UICovCi0jZWxz ZSAvKiBPUzIgKi8KLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSNpZmRlZiBVU0VfTkFNRVNFUl9D T01QQVQKLSNpbmNsdWRlIDxhcnBhL25hbWVzZXJfY29tcGF0Lmg+Ci0jZW5kaWYJLyogVVNFX05B TUVTRVJfQ09NUEFUICovCi0KLSNpZmRlZiBNSU5JWDMKLSNpbmNsdWRlIDxuZXQvZ2VuL3Jlc29s di5oPgotI2luY2x1ZGUgPG5ldC9nZW4vbmFtZXNlci5oPgotI2Vsc2UKLSNpbmNsdWRlIDxhcnBh L25hbWVzZXIuaD4KLSNpbmNsdWRlIDxyZXNvbHYuaD4KLSNlbmRpZiAvKiBNSU5JWCAzICovCi0K LSNpZm5kZWYgUFMyQUlYMTAKLSNpZm5kZWYgQlNENAotI2lmbmRlZiBJMzg2SVgKLSNpZm5kZWYg UlRBSVgKLSNpbmNsdWRlIDxuZXRkYi5oPgotI2VuZGlmIC8qIFJUQUlYICovCi0jZW5kaWYgLyog STM4NklYICovCi0jZW5kaWYgLyogQlNENCAqLwotI2VuZGlmIC8qIFBTMkFJWDEwICovCi0jZW5k aWYgLyogT1MyICovCi0jaWZuZGVmIFRfU1JWCi0jZGVmaW5lIFRfU1JWIDMzCi0jZW5kaWYgLyog VF9TUlYgKi8KLSNpZm5kZWYgVF9UWFQKLSNkZWZpbmUgVF9UWFQgMTYKLSNlbmRpZiAvKiBUX1RY VCAqLwotCi0vKiBmb3Igb2xkIFVuaXhlcyBhbmQgZnJpZW5kcyAuLi4gKi8KLSNpZm5kZWYgTUFY SE9TVE5BTUVMRU4KLSNkZWZpbmUgTUFYSE9TVE5BTUVMRU4gNjQKLSNlbmRpZiAvKiBNQVhIT1NU TkFNRUxFTiAqLwotCi0jZGVmaW5lIE1BWF9ETlNfTkFNRUxFTiAoMTUqKE1BWEhPU1ROQU1FTEVO ICsgMSkrMSkKLSNlbmRpZiAvKiBDS19ETlNfU1JWICovCi0KLSNpZmRlZiBOT05FVAotI2lmZGVm IFRDUElQTElCCi0jdW5kZWYgVENQSVBMSUIKLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotI2VuZGlm IC8qIE5PTkVUICovCi0KLSNpZm5kZWYgTk9NSEhPU1QKLSNpZmRlZiBkYXRhZ2VuZXJhbAotI2Rl ZmluZSBOT01ISE9TVAotI2Vsc2UKLSNpZmRlZiBIUFVYNVdJTlRDUAotI2RlZmluZSBOT01ISE9T VAotI2VuZGlmIC8qIEhQVVg1V0lOVENQICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNl bmRpZiAvKiBOT01ISE9TVCAqLwotCi0jaWZkZWYgSU5BRERSWAotICBzdHJ1Y3QgaW5fYWRkciBp bmFkZHJ4OwotI2VuZGlmIC8qIElOQUREUlggKi8KLQotaW50IHR0bmV0ID0gTkVUX05PTkU7ICAg ICAgICAgICAgICAgICAgIC8qIE5ldHdvcmsgdHlwZSAqLwotaW50IHR0bnByb3RvID0gTlBfREVG QVVMVDsgICAgICAgICAgICAgIC8qIE5ldHdvcmsgdmlydHVhbCB0ZXJtaW5hbCBwcm90b2NvbCAq LwotCi0vKiAwID0gZG9uJ3QgbG93ZXJjYXNlIHVzZXJuYW1lIGZvciBSbG9naW4vVGVsbmV0IHBy b3RvY29sICovCi0vKiBub256ZXJvID0gZG8gbG93ZXJjYXNlIGl0LiAgQWRkIGEgU0VUIGNvbW1h bmQgaWYgbmVjZXNzYXJ5Li4uICovCi0jaWZkZWYgVk1TCi1pbnQgY2tfbGNuYW1lID0gMTsKLSNl bHNlCi1pbnQgY2tfbGNuYW1lID0gMDsKLSNlbmRpZiAvKiBWTVMgKi8KLQotZXh0ZXJuIGludCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEV4dGVybmFsIHZhcmlhYmxlcyAqLwotICBk dXBsZXgsIGRlYnNlcywgc2VzbG9nLCBzZXNzZnQsIHdhc2Nsb3NlZCwKLSAgdHR5ZmQsIHF1aWV0 LCBtc2dmbGcsIHdoYXQsIG5ldHR5cGUsIHR0bWRtOwotI2lmZGVmIElLU0QKLWV4dGVybiBpbnQg aW5zZXJ2ZXI7Ci0jZW5kaWYgLyogSUtTRCAqLwotCi1jaGFyIG15aXBhZGRyWzIwXSA9IHsgJ1ww JyB9OyAgICAgICAgICAgLyogR2xvYmFsIGNvcHkgb2YgbXkgSVAgYWRkcmVzcyAqLwotY2hhciBo b3N0aXBhZGRyWzY0XSA9IHsgJ1wwJyB9OwkJLyogR2xvYmFsIGNvcHkgb2YgcmVtb3RlIElQIGFk ZHJlc3MgKi8KLQotI2lmZGVmIE5FVENPTk4KLS8qIERvbid0IG5lZWQgYW55IG9mIHRoaXMgaWYg dGhlcmUgaXMgbm8gbmV0d29yayBzdXBwb3J0LiAqLwotCi0jaWZuZGVmIE9TMgotLyogQ3VycmVu dCBmZC1zd2FwcGluZyBoYWNrIGlzIG5vdCB0aHJlYWQtc2FmZSAqLwotI2RlZmluZSBIVFRQX0JV RkZFUklORwotI2VuZGlmCS8qIE9TMiAqLwotCi0jaWZkZWYgSFRUUF9CVUZGRVJJTkcKLSNkZWZp bmUgSFRUUF9JTkJVRkxFTiA4MTkyCi1zdGF0aWMgY2hhciBodHRwX2luYnVmW0hUVFBfSU5CVUZM RU5dOwotc3RhdGljIGludCBodHRwX2J1ZnAgPSAwLCBodHRwX2NvdW50OwotI2VuZGlmCS8qIEhU VFBfQlVGRkVSSU5HICovCi0KLS8qCi0gIE5FVExFQlVGIGlzIChtdXN0IGJlKSBkZWZpbmVkIGZv ciB0aG9zZSBwbGF0Zm9ybXMgdGhhdCBjYWxsIHRoaXMKLSAgbW9kdWxlIHRvIGRvIG5ldHdvcmsg aS9vIChlLmcuIG5ldGluYygpLCBuZXR0Y2hrKCksIGV0YykgcmF0aGVyCi0gIHRoYW4gZG9pbmcg aXQgdGhlbXNlbHZlcyAodHRpbmMoKSwgdHRjaGsoKSwgZXRjKS4gIEluIHRoaXMgY2FzZQotICB0 aGUgVGVsbmV0IGxvY2FsLWVjaG8gYnVmZmVycyBhbmQgcm91dGluZXMgYXJlIGRlZmluZWQgYW5k IHJlZmVyZW5jZWQKLSAgaGVyZSwgcmF0aGVyIHRoYW4gaW4gdGhlIGNrP3Rpby5jIG1vZHVsZS4K LSovCi0jaWZkZWYgTkVUTEVCVUYKLSNkZWZpbmUgTEVCVUZTSVogNDA5NgotaW50IHR0cHVzaCA9 IC0xLCBsZV9kYXRhID0gMDsgICAgICAgICAgIC8qIFRoZXNlIGFyZSBzZWVuIGZyb20gb3V0c2lk ZSAqLwotc3RhdGljIENIQVIgbGVfYnVmW0xFQlVGU0laXTsgICAgICAgICAgIC8qIFRoZXNlIGFy ZSB1c2VkIGludGVybmFsbHkgKi8KLXN0YXRpYyBpbnQgbGVfc3RhcnQgPSAwLCBsZV9lbmQgPSAw OwotaW50IHR0X3B1c2hfaW5pdGVkID0gMDsKLSNlbmRpZiAvKiBORVRMRUJVRiAqLwotCi0jaWZk ZWYgQ0tfU09DS1MgICAgICAgICAgICAgICAgICAgICAgICAgLyogU09DS1MgSW50ZXJuZXQgcmVs YXkgcGFja2FnZSAqLwotI2lmZGVmIENLX1NPQ0tTNSAgICAgICAgICAgICAgICAgICAgICAgIC8q IFNPQ0tTIDUgKi8KLSNkZWZpbmUgYWNjZXB0ICBTT0NLU2FjY2VwdAotI2RlZmluZSBiaW5kICAg IFNPQ0tTYmluZAotI2RlZmluZSBjb25uZWN0IFNPQ0tTY29ubmVjdAotI2RlZmluZSBnZXRzb2Nr bmFtZSBTT0NLU2dldHNvY2tuYW1lCi0jZGVmaW5lIGxpc3RlbiBTT0NLU2xpc3RlbgotI2Vsc2Ug IC8qIE5vdCBTT0NLUyA1ICovCi0jZGVmaW5lIGFjY2VwdCAgUmFjY2VwdAotI2RlZmluZSBiaW5k ICAgIFJiaW5kCi0jZGVmaW5lIGNvbm5lY3QgUmNvbm5lY3QKLSNkZWZpbmUgZ2V0c29ja25hbWUg UmdldHNvY2tuYW1lCi0jZGVmaW5lIGxpc3RlbiBSbGlzdGVuCi0jZW5kaWYgLyogQ0tfU09DS1M1 ICovCi0jZW5kaWYgLyogQ0tfU09DS1MgKi8KLQotI2lmZGVmIERFQ19UQ1BJUAotI2luY2x1ZGUg PHRpbWUuaD4KLSNpbmNsdWRlIDxpbmV0Lmg+Ci0jZW5kaWYgLyogREVDX1RDUElQICovCi0KLS8q IEFsc28gc2VlIGNrY25ldC5oIC0tIGhtbW0sIHdoeSBkb24ndCB3ZSBhbHdheXMgaW5jbHVkZSBp bmV0Lmg/ICovCi0KLSNpZmRlZiBIUFVYCi0jaWZuZGVmIEhQVVg3ICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogSFBVWCA3LjAwIGRvZXNuJ3QgaGF2ZSBpdCAqLwotI2lmbmRlZiBIUFVYNiAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhQVVggNi4wMCBkb2Vzbid0IGhhdmUgaXQgKi8K LSNpbmNsdWRlIDxhcnBhL2luZXQuaD4gICAgICAgICAgICAgICAgICAvKiBGb3IgaW5ldF9udG9h KCkgcHJvdG90eXBlICovCi0jZW5kaWYgLyogSFBVWDYgKi8KLSNlbmRpZiAvKiBIUFVYNyAqLwot I2VuZGlmIC8qIEhQVVggKi8KLQotI2lmZGVmIENNVV9UQ1BJUAotI2luY2x1ZGUgPHRpbWUuaD4K LSNlbmRpZiAvKiBDTVVfVENQSVAgKi8KLQotI2lmbmRlZiBOT0RDTFRJTUVWQUwKLSNpZmRlZiBE Q0xUSU1FVkFMICAgICAgICAgICAgICAgICAgICAgICAvKiBVbml4V2FyZSA3ICovCi1zdHJ1Y3Qg dGltZXZhbCB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQW5kIGRlZmluZSB0aGVzZSBvdXJz ZWx2ZXMuICovCi0gICAgbG9uZyB0dl9zZWM7ICAgICAgICAgICAgICAgICAgICAgICAgLyogKHNl ZSBjb21tZW50cyBpbiBja3V0aW8uYykgKi8KLSAgICBsb25nIHR2X3VzZWM7Ci19Owotc3RydWN0 IHRpbWV6b25lIHsKLSAgICBpbnQgdHpfbWludXRlc3dlc3Q7Ci0gICAgaW50IHR6X2RzdHRpbWU7 Ci19OwotI2VuZGlmIC8qIERDTFRJTUVWQUwgKi8KLSNlbmRpZiAvKiBOT0RDTFRJTUVWQUwgKi8K LQotI2lmZGVmIFdJTlRDUAotCi0jaW5jbHVkZSA8c2V0am1wLmg+Ci0jaW5jbHVkZSA8c2lnbmFs Lmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLS8qCi0gIFRoZSBXSU4vVENQIGNvZGUgcGF0aCBp cyB0aGUgc2FtZSBhcyB0aGF0IGZvciBNdWx0aU5ldC4KLSAgT25seSB0aGUgcm91dGluZSBuYW1l cyBoYXZlIGNoYW5nZWQgLi4uCi0qLwotI2RlZmluZSBzb2NrZXRfcmVhZCAgICAgbmV0cmVhZAot I2RlZmluZSBzb2NrZXRfaW9jdGwgICAgaW9jdGwKLSNkZWZpbmUgc29ja2V0X3dyaXRlICAgIG5l dHdyaXRlCi0jZGVmaW5lIHNvY2tldF9jbG9zZSAgICBuZXRjbG9zZQotCi0jaWZkZWYgT0xEX1RX RyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzb21lIHJvdXRpbmVzIGhhdmUgZXZvbHZlZCAq LwotICAgICAgICBleHRlcm4gaW50IHZtc2Vycm5vLCB1ZXJybm87Ci0jZGVmaW5lIHNvY2tldF9l cnJubyAgICB1ZXJybm8KLSNkZWZpbmUgc29ja2V0X3BlcnJvciAgIHBlcnJvciAgICAgICAgIC8q IHdoaWNoIHVzZXMgZXJybm8sIG5vdCB1ZXJybm8hICovCi0jZWxzZQotI2RlZmluZSBzb2NrZXRf ZXJybm8gICAgZXJybm8KLSNkZWZpbmUgc29ja2V0X3BlcnJvciAgIHdpbiRwZXJyb3IKLSNlbmRp ZiAvKiBPTERfVFdHICovCi0KLSNlbHNlIC8qIE5vdCBXSU5UQ1AgKi8KLQotI2lmZGVmIE9TRjEz Ci0jaWZkZWYgQ0tfQU5TSUMKLSNpZmRlZiBfTk9fUFJPVE8KLSN1bmRlZiBfTk9fUFJPVE8KLSNl bmRpZiAvKiBfTk9fUFJPVE8gKi8KLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotI2VuZGlmIC8qIE9T RjEzICovCi0KLSNpZm5kZWYgSTM4NklYCi0jaWZuZGVmIEhQVVhQUkU2NQotI2luY2x1ZGUgPGVy cm5vLmg+CQkJLyogRXJyb3IgbnVtYmVyIHN5bWJvbHMgKi8KLSNlbHNlCi0jaWZuZGVmIEVSUk5P X0lOQ0xVREVECi0jaW5jbHVkZSA8ZXJybm8uaD4JCQkvKiBFcnJvciBudW1iZXIgc3ltYm9scyAq LwotI2VuZGlmCS8qIEVSUk5PX0lOQ0xVREVEICovCi0jZW5kaWYJLyogSFBVWFBSRTY1ICovCi0j ZW5kaWYgLyogSTM4NklYICovCi0KLSNpbmNsdWRlIDxzaWduYWwuaD4gICAgICAgICAgICAgICAg ICAgICAvKiBFdmVyeWJvZHkgbmVlZHMgdGhpcyAqLwotCi0jaWZkZWYgWklMT0cgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogWmlsb2cgaGFzIGRpZmZlcmVudCBuYW1lIGZvciB0aGlzICov Ci0jaW5jbHVkZSA8c2V0cmV0Lmg+Ci0jZWxzZQotI2luY2x1ZGUgPHNldGptcC5oPgotI2VuZGlm IC8qIFpJTE9HICovCi0KLSNlbmRpZiAvKiBXSU5UQ1AgKi8KLQotI2lmZGVmIGRhdGFnZW5lcmFs ICAgICAgICAgICAgICAgICAgICAgIC8qIERhdGEgR2VuZXJhbCBBT1MvVlMgKi8KLSNpbmNsdWRl IDw6dXNyOmluY2x1ZGU6dnNfdGNwX2Vycm5vLmg+Ci0jaW5jbHVkZSA8OnVzcjppbmNsdWRlOnN5 czp2c190Y3BfdHlwZXMuaD4KLSNpZmRlZiBTRUxFQ1QKLS8qCi0gIE5PVEU6IFRoaXMgY2FuIGJl IGNvbXBpbGVkIGFuZCBsaW5rZWQgT0sgd2l0aCBTRUxFQ1QgZGVmaW5lZAotICBidXQgaXQgZG9l c24ndCB3b3JrIGF0IGFsbC4gIEFueWJvZHkgd2hvIGNhcmVzIGFuZCBrbm93cyBob3cKLSAgdG8g Zml4IGl0LCBmZWVsIGZyZWUuCi0qLwotI2luY2x1ZGUgPDp1c3I6aW5jbHVkZTpzeXM6dnNfdGNw X3RpbWUuaD4KLSNlbmRpZiAvKiBTRUxFQ1QgKi8KLSNpbmNsdWRlIDw6dXNyOmluY2x1ZGU6c3lz OnNvY2tldC5oPgotI2luY2x1ZGUgPDp1c3I6aW5jbHVkZTpuZXRpbmV0OmluLmg+Ci0jaW5jbHVk ZSA8OnVzcjppbmNsdWRlOm5ldGRiLmg+Ci0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLQotI2lm bmRlZiBzb2NrZXRfZXJybm8KLSNkZWZpbmUgc29ja2V0X2Vycm5vIGVycm5vCi0jZW5kaWYgLyog c29ja2V0X2Vycm5vICovCi0KLSNpZmRlZiBUTkNPREUKLWV4dGVybiBpbnQgdG5fZGViOwotI2Vu ZGlmIC8qIFROQ09ERSAqLwotCi1pbnQgdGNwX3JkbnMgPSAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogUmV2ZXJzZSBETlMgbG9va3VwICovCi0jaWZkZWYgREVDX1RDUElQX09MRAotICAgIFNF VF9PRkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvZXNuJ3Qgc2VlbSB0byB3b3Jr IGluIFVDWCAqLwotI2Vsc2UKLSAgICAgU0VUX0FVVE8KLSNlbmRpZiAvKiBERUNfVENQSVAgKi8K LSAgICAgIDsKLSNpZmRlZiBDS19ETlNfU1JWCi1pbnQgdGNwX2Ruc19zcnYgPSBTRVRfT0ZGOwot I2VuZGlmIC8qIENLX0ROU19TUlYgKi8KLQotX1BST1RPVFlQKCBjaGFyICogY21jdnRkYXRlLCAo Y2hhciAqLCBpbnQpICk7Ci0KLSNpZmRlZiBSTE9HQ09ERQotX1BST1RPVFlQKCBpbnQgcmxvZ19j dHJsLCAoQ0hBUiAqLCBpbnQpICk7Ci1fUFJPVE9UWVAoIHN0YXRpYyBpbnQgcmxvZ19vb2IsIChD SEFSICosIGludCkgKTsKLSNpZm5kZWYgVENQSVBMSUIKLV9QUk9UT1RZUCggc3RhdGljIFNJR1RZ UCBybG9nb29iaCwgKCBpbnQgKSApOwotI2VuZGlmIC8qIFRDUElQTElCICovCi1fUFJPVE9UWVAo IHN0YXRpYyBpbnQgcmxvZ19pbmksIChDSEFSICosIGludCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICopICk7Ci1pbnQgcmxvZ19tb2RlID0gUkxf Q09PS0VEOwotaW50IHJsb2dfc3RvcHBlZCA9IDA7Ci1pbnQgcmxvZ19pbmJhbmQgPSAwOwotI2Vu ZGlmIC8qIFJMT0dDT0RFICovCi0KLSNpZm5kZWYgTk9JQ1AKLWV4dGVybiBpbnQgZG9jb254OyAg ICAgICAgICAgICAgICAgICAgICAvKiBDT05ORUNULWNsYXNzIGNvbW1hbmQgYWN0aXZlICovCi0j ZW5kaWYgLyogTk9JQ1AgKi8KLQotI2lmZGVmIElCTVgyNQotLyogVGhpcyB2YXJpYWJsZSBzaG91 bGQgcHJvYmFibHkgYmUgZ2VuZXJhbGlzZWQgZm9yIHRydWUgY2xpZW50L3NlcnZlcgotICogc3Vw cG9ydCAtIGllOiB0aGUgZmQgb2YgdGhlIGxpc3RlbmluZyBzZXJ2ZXIsIGFjY2VwdGVkIGNhbGxz IHNob3VsZAotICogYmUgZm9ya2VkIG9yIGF0IGxlYXN0IGhhbmRsZWQgdmlhIGEgc2Vjb25kIGZk IChmb3IgSUJNJ3MgWC4yNSAtCi0gKiB0dHlmZCBhbHdheXMgaG9sZHMgdGhlIGFjdGl2ZSBmZCAt IGllIHRoZSBzZXJ2ZXIgYmVjb21lcyBpbmFjdGl2ZQotICogYXMgbG9uZyBhcyBhIGNsaWVudCBp cyBjb25uZWN0ZWQsIGFuZCBiZWNvbWVzIGFjdGl2ZSBhZ2FpbiB3aGVuIHRoZQotICogY29ubmVj dGlvbiBpcyBjbG9zZWQpCi0gKi8KLWludCB4MjVzZXJ2ZXJmZCA9IDA7ICAgICAgICAgICAgLyog ZXh0ZXJuIGluIGNrY25ldC5oICovCi1pbnQgeDI1c2Vxbm8gPSAwOyAgICAgICAgICAgICAgIC8q IENvbm5lY3Rpb24gc2VxdWVuY2UgbnVtYmVyICovCi1pbnQgeDI1bGFzdG1zZyA9IC0xOyAgICAg ICAgICAgIC8qIEEgY2hlYXBza2F0ZSdzIHN0YXRlIHRhYmxlICovCi0KLSNkZWZpbmUgWDI1X0NM T1NFRCAgICAgIDAgICAgICAgLyogRGVmYXVsdCBzdGF0ZTogbm8gY29ubmVjdGlvbiwgbm8gU1RS RUFNICovCi0jZGVmaW5lIFgyNV9TRVRVUCAgICAgICAxICAgICAgIC8qIFguMjUgaGFzIGJlZW4g c2V0IHVwIChubyBjb25uZWN0aW9uKSAqLwotI2RlZmluZSBYMjVfQ09OTkVDVEVEICAgMiAgICAg ICAvKiBYLjI1IGNvbm5lY3Rpb24gaGFzIGJlZW4gZXN0YWJsaXNoZWQgKi8KLWludCB4MjVfc3Rh dGUgPSBYMjVfQ0xPU0VEOyAgICAgLyogRGVmYXVsdCBzdGF0ZSAqLwotI2VuZGlmIC8qIElCTVgy NSAqLwotCi0jaWZuZGVmIERFQlVHCi0jZGVmaW5lIGRlYmxvZyAwCi0jZW5kaWYgLyogREVCVUcg Ki8KLQotI2lmZGVmIENLX05BV1MgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5lZ290aWF0 ZSBBYm91dCBXaW5kb3cgU2l6ZSAqLwotI2lmZGVmIFJMT0dDT0RFCi1fUFJPVE9UWVAoIGludCBy bG9nX25hd3MsICh2b2lkKSApOwotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0jZW5kaWYgLyogQ0tf TkFXUyAqLwotCi0jaWZkZWYgT1MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9y IHRlcm1pbmFsIHR5cGUgbmFtZSBzdHJpbmcgKi8KLSNpbmNsdWRlICJja3V1c3IuaCIKLSNpZm5k ZWYgTlQKLSNpbmNsdWRlIDxvczIuaD4KLSN1bmRlZiBDT01NRU5UCi0jZW5kaWYgLyogTlQgKi8K LSNpbmNsdWRlICJja29jb24uaCIKLWV4dGVybiBpbnQgdHRfdHlwZSwgbWF4X3R0OwotZXh0ZXJu IHN0cnVjdCB0dF9pbmZvX3JlYyB0dF9pbmZvW107Ci1leHRlcm4gY2hhciB0dG5hbWVbXTsKLSNl bHNlCi0jaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KLSNpbmNsdWRlICJja3V1c3IuaCIKLSNlbmRp ZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgTlQK LWV4dGVybiBpbnQgd2luc29ja192ZXJzaW9uOwotI2VuZGlmIC8qIE5UICovCi0KLSNpZmRlZiBD S19BVVRIRU5USUNBVElPTgotI2luY2x1ZGUgImNrdWF0aC5oIgotI2VuZGlmIC8qIENLX0FVVEhF TlRJQ0FUSU9OICovCi0KLSNpbmNsdWRlICJja2NzaWcuaCIKLQotI2lmbmRlZiBPUzIgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciB0aW1lb3V0IGxvbmdqdW1wcyAqLwotc3RhdGlj IGNram1wYnVmIG5qYnVmOwotI2VuZGlmIC8qIE9TMiAqLwotCi0jZGVmaW5lIE5BTUVDUFlMIDEw MjQgICAgICAgICAgICAgICAgICAgLyogTG9jYWwgY29weSBvZiBob3N0bmFtZSAqLwotY2hhciBu YW1lY29weVtOQU1FQ1BZTF07ICAgICAgICAgICAgICAgIC8qIFJlZmVyZW5jZWQgYnkgY2tjdGVs LmMgKi8KLWNoYXIgbmFtZWNvcHkyW05BTUVDUFlMXTsJCS8qIFJlZmVyZW5jZWQgYnkgY2tjdGVs LmMgKi8KLSNpZm5kZWYgTk9IVFRQCi1jaGFyIGh0dHBfaG9zdF9wb3J0W05BTUVDUFlMXTsgICAg ICAgICAgLyogb3JpZyBob3N0L3BvcnQgbmVjZXNzYXJ5IGZvciBodHRwICovCi1jaGFyIGh0dHBf aXBbMjBdID0geyAnXDAnIH07ICAgICAgICAgICAgLyogaXAgYWRkcmVzcyBvZiBob3N0ICovCi1j aGFyIGh0dHBfcG9ydCA9IDA7Ci1pbnQgIGh0dHBfc3NsID0gMDsKLWNoYXIgKiBodHRwX2FnZW50 ID0gMDsKLWludCAgaHR0cGZkID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBzb2NrZXQg Zm9yIGh0dHAgY29ubmVjdGlvbnMgKi8KLWludCAgaHR0cF9jb2RlID0gMDsKLSNkZWZpbmUgSFRU UEJVRkxFTiAgMTAyNAotY2hhciBodHRwX3JlcGx5X3N0cltIVFRQQlVGTEVOXSA9ICIiOwotI2Vu ZGlmIC8qIE5PSFRUUCAqLwotCi1jaGFyIGlwYWRkclsyMF0gPSB7ICdcMCcgfTsgICAgICAgICAg ICAgLyogR2xvYmFsIGNvcHkgb2YgSVAgYWRkcmVzcyAqLwotdW5zaWduZWQgbG9uZyBteXhpcGFk ZHIgPSAwTDsgICAgICAgICAgIC8qIERpdHRvIGFzIGEgbnVtYmVyICovCi0jZW5kaWYgLyogTkVU Q09OTiAqLwotCi1jaGFyICp0Y3BfYWRkcmVzcyA9IE5VTEw7ICAgICAgICAgICAgICAgLyogUHJl ZmVycmVkIElQIEFkZHJlc3MgKi8KLWV4dGVybiBjaGFyIHVpZGJ1ZltdOyAgICAgICAgICAgICAg ICAgICAvKiBVc2VyIElEIGJ1ZmZlciAqLwotZXh0ZXJuIGNoYXIgcHdidWZbXTsgICAgICAgICAg ICAgICAgICAgIC8qIFBhc3N3b3JkIGJ1ZmZlciAqLwotCi0jaWZuZGVmIE5PSFRUUAotY2hhciAq IHRjcF9odHRwX3Byb3h5ID0gTlVMTDsgICAgICAgICAgIC8qIE5hbWVbOnBvcnRdIG9mIGh0dHAg cHJveHkgc2VydmVyICovCi1pbnQgICAgdGNwX2h0dHBfcHJveHlfZXJybm8gPSAwOwotY2hhciAq IHRjcF9odHRwX3Byb3h5X3VzZXIgPSBOVUxMOwotY2hhciAqIHRjcF9odHRwX3Byb3h5X3B3ZCAg PSBOVUxMOwotY2hhciAqIHRjcF9odHRwX3Byb3h5X2FnZW50ID0gTlVMTDsKLSNkZWZpbmUgSFRU UENQWUwgMTAyNAotc3RhdGljIGNoYXIgcHJveHljb3B5W0hUVFBDUFlMXTsKLSNlbmRpZiAvKiBO T0hUVFAgKi8KLQotI2lmZGVmIE9TMgotZXh0ZXJuIGludCB0dF9yb3dzW10sIHR0X2NvbHNbXTsK LWV4dGVybiBpbnQgdHRfc3RhdHVzW1ZOVU1dOwotI2Vsc2UgLyogT1MyICovCi1leHRlcm4gaW50 IHR0X3Jvd3MsIHR0X2NvbHM7ICAgICAgICAgICAgLyogRXZlcnlib2R5IGhhcyB0aGlzICovCi0j ZW5kaWYgLyogT1MyICovCi0KLWV4dGVybiBpbnQgY21kX2NvbHMsIGNtZF9yb3dzOwotCi0jaWZk ZWYgU1RSRUFNSU5HICAgICAgICAgICAgICAgICAgICAgICAgLyogVXNlIGJsb2NraW5nIHdyaXRl cyBmb3Igc3RyZWFtaW5nICovCi1leHRlcm4gaW50IHN0cmVhbWluZzsKLSNlbmRpZiAvKiBTVFJF QU1JTkcgKi8KLQotI2lmZGVmIE5UCi1leHRlcm4gaW50IFdTQVNhZmVUb0NhbmNlbDsKLWludCB3 aW45NXNlbGVjdGJ1ZyA9IDA7ICAgICAgICAgICAgICAgICAvKiBGb3IgVENQL0lQIHN0YWNrcyB3 aG9zZSBzZWxlY3QoKSAqLwotLyogYWx3YXlzIGZhaWxzIG9uIHdyaXRlIHJlcXVlc3RzIHN1Y2gg YXMgQ2lzY28gYW5kIFF1YXJ0ZXJkZWNrICovCi0jZGVmaW5lIHN0cmljbXAgX3N0cmljbXAKLSNl bmRpZiAvKiBOVCAqLwotCi0jaWZuZGVmIE5PVENQT1BUUwotCi0vKiBTa2lwIGFsbCB0aGlzIGlm IE5PVENQT1BUUyBzcGVjaWZpZWQuICovCi0KLSNpZmRlZiBTT0xfU09DS0VUCi0KLSNpZmRlZiBU Q1BfTk9ERUxBWQotaW50IHRjcF9ub2RlbGF5ID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIE5h Z2xlIGFsZ29yaXRobSBUQ1BfTk9ERUxBWSAqLwotI2VuZGlmIC8qIFRDUF9OT0RFTEFZICovCi0K LSNpZmRlZiBTT19ET05UUk9VVEUKLWludCB0Y3BfZG9udHJvdXRlID0gMDsKLSNlbmRpZiAvKiBT T19ET05UUk9VVEUgKi8KLQotI2lmZGVmIFNPX0xJTkdFUgotaW50IHRjcF9saW5nZXIgID0gMDsg ICAgICAgICAgICAgICAgICAgIC8qIFNPX0xJTkdFUiAqLwotaW50IHRjcF9saW5nZXJfdG1vID0g MDsgICAgICAgICAgICAgICAgIC8qIFNPX0xJTkdFUiB0aW1lb3V0ICovCi0jZW5kaWYgLyogU09f TElOR0VSICovCi0KLSNpZmRlZiBIUFVYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBC dXQgdGhlIGRhdGEgc3RydWN0dXJlcyAqLwotI2lmbmRlZiBIUFVYOCAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIG5lZWRlZCBmb3IgbGluZ2VyIGFyZSBub3QgKi8KLSNpZm5kZWYgSFBVWDkg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZpbmVkIGluIEhQLVVYIHZlcnNpb25zICov Ci0jaWZuZGVmIEhQVVgxMCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJpb3IgdG8gOC4w MC4gKi8KLSNpZmRlZiBTT19MSU5HRVIKLSN1bmRlZiBTT19MSU5HRVIKLSNlbmRpZiAvKiBTT19M SU5HRVIgKi8KLSNlbmRpZiAvKiBIUFVYMTAgKi8KLSNlbmRpZiAvKiBIUFVYOSAqLwotI2VuZGlm IC8qIEhQVVg4ICovCi0jZW5kaWYgLyogSFBVWCAqLwotCi0jaWZuZGVmIFNPX09PQklOTElORSAg ICAgICAgICAgICAgICAgICAgLyogSG9wZWZ1bGx5IG9ubHkgSFAtVVggNy4wICovCi0jZGVmaW5l IFNPX09PQklOTElORSAweDAxMDAKLSNlbmRpZiAvKiBTT19PT0JJTkxJTkUgKi8KLQotI2lmbmRl ZiBUQ1BTTkRCVUZTSVoKLSNpZmRlZiBWTVMKLSNpZmRlZiBfX2FscGhhCi0jZGVmaW5lIFRDUFNO REJVRlNJWiAxNjM4NAotI2VuZGlmIC8qIF9fYWxwaGEgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNl bmRpZiAvKiBUQ1BTTkRCVUZTSVogKi8KLQotI2lmbmRlZiBUQ1BTTkRCVUZTSVoKLSNkZWZpbmUg VENQU05EQlVGU0laIC0xCi0jZW5kaWYgLyogVENQU05EQlVGU0laICovCi0KLSNpZmRlZiBTT19T TkRCVUYKLWludCB0Y3Bfc2VuZGJ1ZiA9IFRDUFNOREJVRlNJWjsKLSNlbmRpZiAvKiBTT19TTkRC VUYgKi8KLQotI2lmZGVmIFNPX1JDVkJVRgotaW50IHRjcF9yZWN2YnVmID0gLTE7Ci0jZW5kaWYg LyogU09fUkNWQlVGICovCi0KLSNpZmRlZiBTT19LRUVQQUxJVkUKLWludCB0Y3Bfa2VlcGFsaXZl ID0gMTsKLSNlbmRpZiAvKiBTT19LRUVQQUxJVkUgKi8KLQotI2VuZGlmIC8qIFNPTF9TT0NLRVQg Ki8KLSNlbmRpZiAvKiBOT1RDUE9QVFMgKi8KLQotI2lmbmRlZiBORVRDT05OCi0vKgotICBOZXR3 b3JrIHN1cHBvcnQgbm90IGRlZmluZWQuCi0gIER1bW15IGZ1bmN0aW9ucyBoZXJlIGluIGNhc2Ug I2lmZGVmJ3MgZm9yZ290dGVuIGVsc2V3aGVyZS4KLSovCi1pbnQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogT3BlbiBuZXR3b3JrIGNvbm5lY3Rpb24gKi8KLW5ldG9wZW4o bmFtZSwgbGNsLCBuZXR0KSBjaGFyICpuYW1lOyBpbnQgKmxjbCwgbmV0dDsgewotICAgIHJldHVy bigtMSk7Ci19Ci1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xv c2UgbmV0d29yayBjb25uZWN0aW9uICovCi1uZXRjbG9zKCkgewotICAgIHJldHVybigtMSk7Ci19 Ci1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgbmV0d29y ayBpbnB1dCBidWZmZXIgKi8KLW5ldHRjaGsoKSB7Ci0gICAgcmV0dXJuKC0xKTsKLX0KLWludCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbHVzaCBuZXR3b3JrIGlucHV0 IGJ1ZmZlciAqLwotbmV0Zmx1aSgpIHsKLSAgICByZXR1cm4oLTEpOwotfQotaW50ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgbmV0d29yayBCUkVBSyAqLwotbmV0 YnJlYWsoKSB7Ci0gICAgcmV0dXJuKC0xKTsKLX0KLWludCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBJbnB1dCBjaGFyYWN0ZXIgZnJvbSBuZXR3b3JrICovCi1uZXRpbmMo dGltbykgaW50IHRpbW87IHsKLSAgICByZXR1cm4oLTEpOwotfQotaW50ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBjaGFyYWN0ZXIgdG8gbmV0d29yayAqLwot I2lmZGVmIENLX0FOU0lDCi1uZXR0b2MoQ0hBUiBjKQotI2Vsc2UKLW5ldHRvYyhjKSBDSEFSIGM7 Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIG5ldHRvYyAqLyB7Ci0gICAgcmV0dXJuKC0xKTsK LX0KLWludAotbmV0dG9sKHMsbikgQ0hBUiAqczsgaW50IG47IHsKLSAgICByZXR1cm4oLTEpOwot fQotCi0jZWxzZSAvKiBORVRDT05OIGlzIGRlZmluZWQgKG11Y2ggb2YgdGhpcyBtb2R1bGUuLi4p ICovCi0KLSNpZmRlZiBORVRMRUJVRgotVk9JRAotbGVfaW5pdCgpIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIExvY2FsRWNob0luaXQoKSAqLwotICAgIGludCBpOwotICAgIGZvciAo aSA9IDA7IGkgPCBMRUJVRlNJWjsgaSsrKQotICAgICAgbGVfYnVmW2ldID0gJ1wwJzsKLSAgICBs ZV9zdGFydCA9IDA7Ci0gICAgbGVfZW5kID0gMDsKLSAgICBsZV9kYXRhID0gMDsKLSAgICB0dF9w dXNoX2luaXRlZCA9IDE7Ci19Ci0KLVZPSUQKLWxlX2NsZWFuKCkgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBMb2NhbEVjaG9DbGVhbnVwKCkgKi8KLSAgICBsZV9pbml0KCk7Ci0gICAg cmV0dXJuOwotfQotCi1pbnQKLWxlX2luYnVmKCkgewotICAgIGludCByYyA9IDA7Ci0gICAgaWYg KGxlX3N0YXJ0ICE9IGxlX2VuZCkgewotICAgICAgICByYyA9IChsZV9lbmQgLQotICAgICAgICAg ICAgICBsZV9zdGFydCArCi0gICAgICAgICAgICAgIExFQlVGU0laKSAlIExFQlVGU0laOwotICAg IH0KLSAgICByZXR1cm4ocmMpOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotbGVfcHV0Y2hh cihDSEFSIGNoKQotI2Vsc2UKLWxlX3B1dGNoYXIoY2gpIENIQVIgY2g7Ci0jZW5kaWYgLyogQ0tf QU5TSUMgKi8KLS8qIGxlX3B1dGNoYXIgKi8gewotICAgIGlmICgobGVfc3RhcnQgLSBsZV9lbmQg KyBMRUJVRlNJWiklTEVCVUZTSVogPT0gMSkgewotICAgICAgICBkZWJ1ZyhGMTEwLCJsZV9wdXRj aGFyIiwiYnVmZmVyIGlzIGZ1bGwiLDApOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAg ICBsZV9idWZbbGVfZW5kKytdID0gY2g7Ci0gICAgaWYgKGxlX2VuZCA9PSBMRUJVRlNJWikKLSAg ICAgIGxlX2VuZCA9IDA7Ci0gICAgbGVfZGF0YSA9IDE7Ci0gICAgcmV0dXJuKDApOwotfQotCi1p bnQKLSNpZmRlZiBDS19BTlNJQwotbGVfcHV0cyhDSEFSICogcywgaW50IG4pCi0jZWxzZQotbGVf cHV0cyhzLG4pIENIQVIgKiBzOyBpbnQgbjsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogbGVf cHV0cyAqLyB7Ci0gICAgaW50IHJjID0gMDsKLSAgICBpbnQgaSA9IDA7Ci0gICAgQ0hBUiAqIHAg PSAoQ0hBUiAqKSJsZV9wdXRzIjsKLSAgICBja2hleGR1bXAocCxzLG4pOwotICAgIGZvciAoaSA9 IDA7IGkgPCBuOyBpKyspCi0gICAgICByYyA9IGxlX3B1dGNoYXIoKGNoYXIpc1tpXSk7Ci0gICAg ZGVidWcoRjEwMSwibGVfcHV0cyIsIiIscmMpOwotICAgIHJldHVybihyYyk7Ci19Ci0KLWludAot I2lmZGVmIENLX0FOU0lDCi1sZV9wdXRzdHIoQ0hBUiAqIHMpCi0jZWxzZQotbGVfcHV0c3RyKHMp IENIQVIgKiBzOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBsZV9wdXRzICovIHsKLSAgICBD SEFSICogcDsKLSAgICBpbnQgcmMgPSAwOwotICAgIHAgPSAoQ0hBUiAqKSJsZV9wdXRzdHIiOwot ICAgIGNraGV4ZHVtcChwLHMsKGludClzdHJsZW4oKGNoYXIgKilzKSk7Ci0gICAgZm9yIChwID0g czsgKnAgJiYgIXJjOyBwKyspCi0gICAgICByYyA9IGxlX3B1dGNoYXIoKnApOwotICAgIHJldHVy bihyYyk7Ci19Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi1sZV9nZXRjaGFyKENIQVIgKiBwY2gp Ci0jZWxzZSAvKiBDS19BTlNJQyAqLwotbGVfZ2V0Y2hhcihwY2gpIENIQVIgKiBwY2g7Ci0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLS8qIGxlX2dhdGNoYXIgKi8gewotICAgIGludCByYyA9IDA7Ci0g ICAgaWYgKGxlX3N0YXJ0ICE9IGxlX2VuZCkgewotICAgICAgICAqcGNoID0gbGVfYnVmW2xlX3N0 YXJ0XTsKLSAgICAgICAgbGVfYnVmW2xlX3N0YXJ0XSA9IDA7Ci0gICAgICAgIGxlX3N0YXJ0Kys7 Ci0KLSAgICAgICAgaWYgKGxlX3N0YXJ0ID09IExFQlVGU0laKQotICAgICAgICAgIGxlX3N0YXJ0 ID0gMDsKLQotICAgICAgICBpZiAobGVfc3RhcnQgPT0gbGVfZW5kKSB7Ci0gICAgICAgICAgICBs ZV9kYXRhID0gMDsKLSAgICAgICAgfQotICAgICAgICByYysrOwotICAgIH0gZWxzZSB7Ci0gICAg ICAgICpwY2ggPSAwOwotICAgIH0KLSAgICByZXR1cm4ocmMpOwotfQotI2VuZGlmIC8qIE5FVExF QlVGICovCi0KLSNpZmRlZiBWTVMKLS8qCi0gIEluIGVkaXQgMTkwLCB3ZSBtb3ZlZCB0bl9pbmko KSB0byBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gbmV0b3BlbigpLgotICBCdXQgdG5faW5pKCkgY2Fs bHMgdHRvbCgpLCBhbmQgdHRvbCgpIGNoZWNrcyB0byBzZWUgaWYgaXQncyBhIG5ldAotICBjb25u ZWN0aW9uLCBidXQgdGhlIGZsYWcgZm9yIHRoYXQgaXNuJ3Qgc2V0IHVudGlsIGFmdGVyIG5ldG9w ZW4oKQotICBpcyBmaW5pc2hlZC4gIFNpbmNlLCBpbiB0aGlzIG1vZHVsZSwgd2UgYXJlIGFsd2F5 cyBkb2luZyBuZXR3b3JrCi0gIG91dHB1dCBhbnl3YXksIHdlIGp1c3QgY2FsbCBuZXR0b2woKSBk aXJlY3RseSwgaW5zdGVhZCBvZiBnb2luZyB0aHJ1Ci0gIHR0b2woKS4gIE9ubHkgbmVlZGVkIGZv ciBWTVMsIHNpbmNlIFVOSVgsIEFPUy9WUywgYW5kIFZPUyBjYW4gaGFuZGxlCi0gIG5ldCBjb25u ZWN0aW9ucyBqdXN0IGxpa2UgcmVndWxhciBjb25uZWN0aW9ucyBpbiB0dG9sKCksIGFuZCBPUy8y Ci0gIGhhcyBhIHNwZWNpYWwgcm91dGluZSBmb3IgdGhpcy4KLSovCi0jZGVmaW5lIHR0b2wgbmV0 dG9sCi0jZW5kaWYgLyogVk1TICovCi0KLWludCB0Y3BzcmZkID0gLTE7Ci0KLSNpZmRlZiBDS19L RVJCRVJPUwotCi1jaGFyICoga3JiNV9kX3ByaW5jaXBhbCA9IE5VTEw7ICAgICAgICAgLyogRGVm YXVsdCBwcmluY2lwYWwgKi8KLWNoYXIgKiBrcmI1X2RfaW5zdGFuY2UgPSBOVUxMOyAgICAgICAg ICAvKiBEZWZhdWx0IGluc3RhbmNlICovCi1jaGFyICoga3JiNV9kX3JlYWxtID0gTlVMTDsgICAg ICAgICAgICAgLyogRGVmYXVsdCByZWFsbSAqLwotY2hhciAqIGtyYjVfZF9jYyA9IE5VTEw7ICAg ICAgICAgICAgICAgIC8qIERlZmF1bHQgY3JlZGVudGlhbHMgY2FjaGUgKi8KLWNoYXIgKiBrcmI1 X2Rfc3J2ICAgPSBOVUxMOyAgICAgICAgICAgICAvKiBEZWZhdWx0IFNlcnZpY2UgKi8KLWludCAg ICBrcmI1X2RfbGlmZXRpbWUgPSA2MDA7ICAgICAgICAgICAvKiBEZWZhdWx0IGxpZmV0aW1lICgx MCBob3VycykgKi8KLWludCAgICBrcmI1X2RfZm9yd2FyZGFibGUgPSAwOyAgICAgICAgICAvKiBj cmVkcyBub3QgZm9yd2FyZGFibGUgKi8KLWludCAgICBrcmI1X2RfcHJveGlhYmxlID0gMDsgICAg ICAgICAgICAvKiBjcmVkcyBub3QgcHJveGlhYmxlICovCi1pbnQgICAga3JiNV9kX3JlbmV3YWJs ZSA9IDA7ICAgICAgICAgICAgLyogY3JlZHMgbm90IHJlbmV3YWJsZSAoMCBtaW4pICovCi1pbnQg ICAga3JiNV9hdXRvZ2V0ID0gMTsgICAgICAgICAgICAgICAgLyogQXV0b2dldCBUR1RzICovCi1p bnQgICAga3JiNV9hdXRvZGVsID0gMDsgICAgICAgICAgICAgICAgLyogQXV0byBkZWxldGUgVEdU cyAqLwotaW50ICAgIGtyYjVfZF9nZXRrNCA9IDA7ICAgICAgICAgICAgICAgIC8qIEs1IEtpbml0 IGdldHMgSzQgVEdUcyAqLwotaW50ICAgIGtyYjVfY2hlY2thZGRycyA9IDE7ICAgICAgICAgICAg IC8qIENoZWNrIFRHVCBBZGRycyAqLwotaW50ICAgIGtyYjVfZF9ub19hZGRyZXNzZXMgPSAwOyAg ICAgICAgIC8qIERvIG5vdCBpbmNsdWRlIElQIEFkZHJlc3NlcyAqLwotY2hhciAqIGtyYjVfZF9h ZGRyc1tLUkI1X05VTV9PRl9BRERSUysxXT17TlVMTCxOVUxMfTsgLyogQWRkcnMgdG8gaW5jbHVk ZSAqLwotaW50ICAgIGtyYjVfZXJybm8gPSAwOyAgICAgICAgICAgICAgICAgIC8qIExhc3QgSzUg ZXJybm8gKi8KLWNoYXIgKiBrcmI1X2Vycm1zZyA9IE5VTEw7ICAgICAgICAgICAgICAvKiBMYXN0 IEs1IGVycm1zZyAqLwotY2hhciAqIGs1X2tleXRhYiA9IE5VTEw7Ci0KLWNoYXIgKiBrcmI0X2Rf cHJpbmNpcGFsID0gTlVMTDsgICAgICAgICAvKiBEZWZhdWx0IHByaW5jaXBhbCAqLwotY2hhciAq IGtyYjRfZF9yZWFsbSA9IE5VTEw7ICAgICAgICAgICAgIC8qIERlZmF1bHQgcmVhbG0gKi8KLWNo YXIgKiBrcmI0X2Rfc3J2ICAgPSBOVUxMOyAgICAgICAgICAgICAvKiBEZWZhdWx0IFNlcnZpY2Ug Ki8KLWludCAgICBrcmI0X2RfbGlmZXRpbWUgPSA2MDA7ICAgICAgICAgICAvKiBEZWZhdWx0IGxp ZmV0aW1lICgxMCBob3VycykgKi8KLWludCAgICBrcmI0X2RfcHJlYXV0aCA9IDE7ICAgICAgICAg ICAgICAvKiBVc2UgcHJlYXV0aCByZXF1ZXN0cyAqLwotY2hhciAqIGtyYjRfZF9pbnN0YW5jZSA9 IE5VTEw7ICAgICAgICAgIC8qIERlZmF1bHQgaW5zdGFuY2UgKi8KLWludCAgICBrcmI0X2F1dG9n ZXQgPSAxOyAgICAgICAgICAgICAgICAvKiBBdXRvZ2V0IFRHVHMgKi8KLWludCAgICBrcmI0X2F1 dG9kZWwgPSAwOyAgICAgICAgICAgICAgICAvKiBBdXRvIGRlbGV0ZSBUR1RzICovCi1pbnQgICAg a3JiNF9jaGVja2FkZHJzID0gMTsgICAgICAgICAgICAgLyogQ2hlY2sgVEdUIEFkZHJzICovCi1j aGFyICogazRfa2V5dGFiID0gTlVMTDsKLQotaW50ICAgIGtyYjRfZXJybm8gPSAwOyAgICAgICAg ICAgICAgICAgIC8qIExhc3QgSzQgZXJybm8gKi8KLWNoYXIgKiBrcmI0X2Vycm1zZyA9IE5VTEw7 ICAgICAgICAgICAgICAvKiBMYXN0IEs0IGVycm1zZyAqLwotCi1zdHJ1Y3Qga3JiX29wX2RhdGEg a3JiX29wID0geyAgICAgICAgICAgLyogT3BlcmF0aW9uYWwgZGF0YSBzdHJ1Y3R1cmUgKi8KLSAg ICAwLCBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAodmVyc2lvbiwgY2FjaGVm aWxlKSAqLwotfTsKLQotc3RydWN0IGtyYjRfaW5pdF9kYXRhIGtyYjRfaW5pdCA9IHsgICAgIC8q IEtlcmJlcm9zIDQgSU5JVCBkYXRhIHN0cnVjdHVyZSAqLwotICAgIDAsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwKLX07Ci0KLXN0cnVjdCBrcmI1X2luaXRfZGF0YSBrcmI1X2luaXQgPSB7ICAgICAv KiBLZXJiZXJvcyA1IElOSVQgZGF0YSBzdHJ1Y3R1cmUgKi8KLSAgICAwLCAwLCAwLCAwLCAwLCAw LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCAwLCAwLAotICAgIHsgTlVM TCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKLSAgICAgIE5VTEws IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfSwKLSAgICAw Ci19OwotCi1zdHJ1Y3Qga3JiNV9saXN0X2NyZWRfZGF0YSBrcmI1X2xjID0geyAgLyogTGlzdCBD cmVkZW50aWFscyBkYXRhIHN0cnVjdHVyZSAqLwotICAgIDAsIDAsIDAKLX07Ci0KLWludCBrcmJf YWN0aW9uID0gLTE7ICAgICAgICAgICAgICAgICAgICAvKiBLZXJiZXJvcyBhY3Rpb24gdG8gcGVy Zm9ybSAqLwotCi0jaWZuZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi1jaGFyICoKLWNrX2tyYjRfZ2V0 cmVhbG0oKSB7Ci0gICAgcmV0dXJuKCIiKTsKLX0KLWNoYXIgKgotY2tfa3JiNV9nZXRyZWFsbShj YykgY2hhciAqIGNjOyB7Ci0gICAgcmV0dXJuKCIiKTsKLX0KLWNoYXIgKgotY2tfa3JiNF9nZXRw cmluY2lwYWwoKSB7Ci0gICAgcmV0dXJuKCIiKTsKLX0KLWNoYXIgKgotY2tfa3JiNV9nZXRwcmlu Y2lwYWwoY2MpIGNoYXIgKiBjYzsgewotICAgIHJldHVybigiIik7Ci19Ci0jZW5kaWYgLyogQ0tf QVVUSEVOVElDQVRJT04gKi8KLQotLyogIEkgTiBJIF8gSyBFIFIgQiAgLS0gIEluaXRpYWxpemUg S2VyYmVyb3MgZGF0YSAgKi8KLQotVk9JRAotaW5pX2tlcmIoKSB7Ci0gICAgaW50IGk7Ci0KLSAg ICBrcmJfYWN0aW9uID0gLTE7ICAgICAgICAgICAgICAgICAgICAvKiBObyBhY3Rpb24gc3BlY2lm aWVkICovCi0KLSAgICBrcmJfb3AudmVyc2lvbiA9IDA7ICAgICAgICAgICAgICAgICAvKiBLZXJi ZXJvcyB2ZXJzaW9uIChub25lKSAqLwotICAgIGtyYl9vcC5jYWNoZSA9IE5VTEw7ICAgICAgICAg ICAgICAgIC8qIENhY2hlIGZpbGUgKG5vbmUpICovCi0KLS8qIEtlcmJlcm9zIDUgKi8KLQotICAg IGtyYjVfaW5pdC5mb3J3YXJkYWJsZSA9IGtyYjVfZF9mb3J3YXJkYWJsZTsgLyogSW5pdCBzd2l0 Y2ggdmFsdWVzLi4uICovCi0gICAga3JiNV9pbml0LnByb3hpYWJsZSAgID0ga3JiNV9kX3Byb3hp YWJsZTsKLSAgICBrcmI1X2luaXQubGlmZXRpbWUgICAgPSBrcmI1X2RfbGlmZXRpbWU7Ci0gICAg a3JiNV9pbml0LnJlbmV3ICAgICAgID0gMDsKLSAgICBrcmI1X2luaXQucmVuZXdhYmxlICAgPSBr cmI1X2RfcmVuZXdhYmxlOwotICAgIGtyYjVfaW5pdC52YWxpZGF0ZSAgICA9IDA7Ci0gICAga3Ji NV9pbml0Lm5vX2FkZHJlc3NlcyA9IGtyYjVfZF9ub19hZGRyZXNzZXM7Ci0gICAga3JiNV9pbml0 LmdldGs0ICAgICAgID0ga3JiNV9kX2dldGs0OwotICAgIGlmIChrcmI1X2luaXQucG9zdGRhdGUp IHsKLSAgICAgICAgZnJlZShrcmI1X2luaXQucG9zdGRhdGUpOwotICAgICAgICBrcmI1X2luaXQu cG9zdGRhdGUgPSBOVUxMOwotICAgIH0KLSAgICBpZiAoa3JiNV9pbml0LnNlcnZpY2UpIHsKLSAg ICAgICAgZnJlZShrcmI1X2luaXQuc2VydmljZSk7Ci0gICAgICAgIGtyYjVfaW5pdC5zZXJ2aWNl ID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKCFrcmI1X2RfY2MgfHwgIWtyYjVfZF9jY1swXSkgeyAg LyogU2V0IGRlZmF1bHQgY2FjaGUgKi8KLSAgICAgICAgY2hhciAqIHA7Ci0gICAgICAgIHAgPSBj a19rcmI1X2dldF9jY19uYW1lKCk7Ci0gICAgICAgIG1ha2VzdHIoJmtyYjVfZF9jYywocCAmJiBw WzBdKSA/IHAgOiBOVUxMKTsKLSAgICB9Ci0gICAgaWYgKCFrcmI1X2RfcmVhbG0gfHwgIWtyYjVf ZF9yZWFsbVswXSkgeyAvKiBTZXQgZGVmYXVsdCByZWFsbSAqLwotICAgICAgICBjaGFyICogcDsK LSAgICAgICAgcCA9IGNrX2tyYjVfZ2V0cmVhbG0oa3JiNV9kX2NjKTsKLSAgICAgICAgbWFrZXN0 cigma3JiNV9kX3JlYWxtLChwICYmIHBbMF0pID8gcCA6IE5VTEwpOwotICAgIH0KLSAgICBtYWtl c3RyKCZrcmI1X2luaXQuaW5zdGFuY2Usa3JiNV9kX2luc3RhbmNlKTsKLSAgICBtYWtlc3RyKCZr cmI1X2luaXQucmVhbG0sa3JiNV9kX3JlYWxtKTsgLyogU2V0IHJlYWxtIGZyb20gZGVmYXVsdCAq LwotICAgIGlmIChrcmI1X2luaXQucGFzc3dvcmQpIHsKLSAgICAgICAgbWVtc2V0KGtyYjVfaW5p dC5wYXNzd29yZCwweEZGLHN0cmxlbihrcmI1X2luaXQucGFzc3dvcmQpKTsKLSAgICAgICAgZnJl ZShrcmI1X2luaXQucGFzc3dvcmQpOwotICAgICAgICBrcmI1X2luaXQucGFzc3dvcmQgPSBOVUxM OwotICAgIH0KLSAgICBpZiAoIWtyYjVfZF9wcmluY2lwYWwpIHsgICAgICAgICAgICAvKiBEZWZh dWx0IHByaW5jaXBhbCAqLwotICAgICAgICAvKiBhIE51bGwgcHJpbmNpcGFsIGluZGljYXRlcyB0 aGUgdXNlciBzaG91bGQgYmUgcHJvbXB0ZWQgKi8KLSAgICAgICAgY2hhciAqIHAgPSBja19rcmI1 X2dldHByaW5jaXBhbChrcmI1X2RfY2MpOwotICAgICAgICBpZiAoIXAgfHwgISgqcCkpCi0gICAg ICAgICAgcCA9IChjaGFyICopdWlkYnVmOyAgICAgICAgICAgLyogUHJpbmNpcGFsID0gdXNlciAq LwotICAgICAgICAgICAgICAgIG1ha2VzdHIoJmtyYjVfZF9wcmluY2lwYWwsKHAgJiYgcFswXSkg PyBwIDogTlVMTCk7Ci0gICAgfQotICAgIG1ha2VzdHIoJmtyYjVfaW5pdC5wcmluY2lwYWwsa3Ji NV9kX3ByaW5jaXBhbCk7Ci0gICAgZm9yIChpID0gMDsgaSA8PSBLUkI1X05VTV9PRl9BRERSUzsg aSsrKSB7Ci0gICAgICAgIGlmIChrcmI1X2luaXQuYWRkcnNbaV0pCi0gICAgICAgICAgZnJlZShr cmI1X2luaXQuYWRkcnNbaV0pOwotICAgICAgICBrcmI1X2luaXQuYWRkcnNbaV0gPSBOVUxMOwot ICAgIH0KLSAgICBmb3IgKGkgPSAwOyBpIDw9IEtSQjVfTlVNX09GX0FERFJTICYmIGtyYjVfZF9h ZGRyc1tpXTsgaSsrKSB7Ci0gICAgICAgIG1ha2VzdHIoJmtyYjVfaW5pdC5hZGRyc1tpXSxrcmI1 X2RfYWRkcnNbaV0pOwotICAgIH0KLQotICAgIC8qIEtlcmJlcm9zIDQgKi8KLQotICAgIGtyYjRf aW5pdC5saWZldGltZSA9IGtyYjRfZF9saWZldGltZTsKLSAgICBrcmI0X2luaXQucHJlYXV0aCAg PSBrcmI0X2RfcHJlYXV0aDsKLSAgICBtYWtlc3RyKCZrcmI0X2luaXQuaW5zdGFuY2Usa3JiNF9k X2luc3RhbmNlKTsKLSAgICBpZiAoIWtyYjRfZF9yZWFsbSB8fCAha3JiNF9kX3JlYWxtWzBdKSB7 LyogU2V0IGRlZmF1bHQgcmVhbG0gKi8KLSAgICAgICAgY2hhciAqIHA7Ci0gICAgICAgIHAgPSBj a19rcmI0X2dldHJlYWxtKCk7Ci0gICAgICAgICAgICAgICAgbWFrZXN0cigma3JiNF9kX3JlYWxt LChwICYmIHBbMF0pID8gcCA6IE5VTEwpOwotICAgIH0KLSAgICBtYWtlc3RyKCZrcmI0X2luaXQu cmVhbG0sa3JiNF9kX3JlYWxtKTsKLSAgICBpZiAoa3JiNF9pbml0LnBhc3N3b3JkKSB7Ci0gICAg ICAgIG1lbXNldChrcmI0X2luaXQucGFzc3dvcmQsMHhGRixzdHJsZW4oa3JiNF9pbml0LnBhc3N3 b3JkKSk7Ci0gICAgICAgIGZyZWUoa3JiNF9pbml0LnBhc3N3b3JkKTsKLSAgICAgICAga3JiNF9p bml0LnBhc3N3b3JkID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKCFrcmI0X2RfcHJpbmNpcGFsKSB7 ICAgICAgICAgICAgLyogRGVmYXVsdCBwcmluY2lwYWwgKi8KLSAgICAgICAgLyogYSBOdWxsIHBy aW5jaXBhbCBpbmRpY2F0ZXMgdGhlIHVzZXIgc2hvdWxkIGJlIHByb21wdGVkICovCi0gICAgICAg IGNoYXIgKiBwID0gY2tfa3JiNF9nZXRwcmluY2lwYWwoKTsKLSAgICAgICAgaWYgKCFwIHx8ICEo KnApKQotICAgICAgICAgIHAgPSAoY2hhciAqKXVpZGJ1ZjsgICAgICAgICAgIC8qIFByaW5jaXBh bCA9IHVzZXIgKi8KLSAgICAgICAgbWFrZXN0cigmKGtyYjRfZF9wcmluY2lwYWwpLChwICYmIHBb MF0pID8gcCA6IE5VTEwpOwotICAgIH0KLSAgICBtYWtlc3RyKCYoa3JiNF9pbml0LnByaW5jaXBh bCksa3JiNF9kX3ByaW5jaXBhbCk7Ci19Ci0KLS8qICBEIE8gQSBVIFQgSCAgLS0gIEFVVEhFTlRJ Q0FURSBhY3Rpb24gcm91dGluZSAgKi8KLQotaW50Ci1kb2F1dGgoY3gpIGludCBjeDsgeyAgICAg ICAgICAgICAgICAgICAgLyogQVVUSEVOVElDQVRFIGFjdGlvbiByb3V0aW5lICovCi0gICAgaW50 IHJjID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIGNvZGUgKi8KLQotI2lm ZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0jaWZkZWYgT1MyCi0gICAgaWYgKCFja19zZWN1cml0eV9s b2FkZGxsKCkpICAgICAgICAgLyogTG9hZCB2YXJpb3VzIERMTHMgKi8KLSAgICAgIHJldHVybihy Yyk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgaWYgKGtyYl9vcC52ZXJzaW9uID09IDQpIHsgICAg ICAgICAgLyogVmVyc2lvbiA9IDQgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIHNob19hdXRo KEFVVEhUWVBFX0tFUkJFUk9TX1Y0KTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIGlm ICghY2tfa3JiNF9pc19pbnN0YWxsZWQoKSkgewotICAgICAgICAgICAgcHJpbnRmKCI/S2VyYmVy b3MgNCBpcyBub3QgaW5zdGFsbGVkXG4iKTsKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAg ICAgfQotICAgICAgICBzd2l0Y2ggKGtyYl9hY3Rpb24pIHsgICAgICAgICAgIC8qIFBlcmZvcm0g VjQgZnVuY3Rpb25zICovCi0gICAgICAgICAgY2FzZSBLUkJfQV9JTjogICAgICAgICAgICAgICAg LyogSU5JVCAqLwotICAgICAgICAgICAgcmMgfD0gIShja19rcmI0X2luaXRUR1QoJmtyYl9vcCwm a3JiNF9pbml0KSA8IDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBLUkJf QV9ERTogICAgICAgICAgICAgICAgLyogREVTVFJPWSAqLwotICAgICAgICAgICAgcmMgfD0gIShj a19rcmI0X2Rlc3Ryb3koJmtyYl9vcCkgPCAwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgIGNhc2UgS1JCX0FfTEM6ICAgICAgICAgICAgICAgIC8qIExJU1QtQ1JFREVOVElBTFMgKi8K LSAgICAgICAgICAgIHJjIHw9ICEoY2tfa3JiNF9saXN0X2NyZWRzKCZrcmJfb3ApIDwgMCk7Ci0g ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoa3JiX29wLnZlcnNp b24gPT0gNSkgeyAgICAgICAgICAvKiBWNSBmdW5jdGlvbnMgKi8KLSNpZmRlZiBDT01NRU5UCi0g ICAgICAgIHNob19hdXRoKEFVVEhUWVBFX0tFUkJFUk9TX1Y1KTsKLSNlbmRpZiAvKiBDT01NRU5U ICovCi0gICAgICAgIGlmICghY2tfa3JiNV9pc19pbnN0YWxsZWQoKSkgewotICAgICAgICAgICAg cHJpbnRmKCI/S2VyYmVyb3MgNSBpcyBub3QgaW5zdGFsbGVkXG4iKTsKLSAgICAgICAgICAgIHJl dHVybigwKTsKLSAgICAgICAgfQotICAgICAgICBzd2l0Y2ggKGtyYl9hY3Rpb24pIHsKLSAgICAg ICAgICBjYXNlIEtSQl9BX0lOOiAgICAgICAgICAgICAgICAvKiBJTklUICovCi0gICAgICAgICAg ICByYyB8PSAhKGNrX2tyYjVfaW5pdFRHVCgma3JiX29wLCZrcmI1X2luaXQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAga3JiNV9pbml0LmdldGs0ID8gJmtyYjRfaW5pdCA6 IDApIDwgMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEtSQl9BX0RFOiAg ICAgICAgICAgICAgICAvKiBERVNUUk9ZICovCi0gICAgICAgICAgICByYyB8PSAhKGNrX2tyYjVf ZGVzdHJveSgma3JiX29wKSA8IDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz ZSBLUkJfQV9MQzogICAgICAgICAgICAgICAgLyogTElTVC1DUkVERU5USUFMUyAqLwotICAgICAg ICAgICAgaWYgKGtyYl9vcC52ZXJzaW9uID09IDApCi0gICAgICAgICAgICAgIHByaW50ZigiXG4i KTsKLSAgICAgICAgICAgIHJjIHw9ICEoY2tfa3JiNV9saXN0X2NyZWRzKCZrcmJfb3AsJmtyYjVf bGMpIDwgMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSNlbHNlCi0j aWZuZGVmIE5PSUNQCi0jaWZuZGVmIE5PU0hPVwotICAgIHJjID0gc2hvX2F1dGgoMCk7ICAgICAg ICAgICAgICAgICAgIC8qIFNob3cgYWxsICovCi0jZW5kaWYgLyogTk9TSE9XICovCi0jZW5kaWYg LyogTk9JQ1AgKi8KLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotICAgIHJldHVybihy Yyk7Ci19Ci0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLQotI2lmZGVmIFRDUFNPQ0tFVAotI2lm bmRlZiBPUzIKLSNpZm5kZWYgTk9MSVNURU4gICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3Ig aW5jb21pbmcgY29ubmVjdGlvbnMgKi8KLQotI2lmbmRlZiBJTkFERFJfQU5ZCi0jZGVmaW5lIElO QUREUl9BTlkgMAotI2VuZGlmIC8qIElOQUREUl9BTlkgKi8KLQotX1BST1RPVFlQKCBpbnQgdHRi dWZyLCAoIFZPSUQgKSApOwotX1BST1RPVFlQKCBpbnQgdGNwc3J2X29wZW4sIChjaGFyICosIGlu dCAqLCBpbnQsIGludCApICk7Ci0KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCB0Y3BzcnZfcG9ydCA9 IDA7Ci0KLSNlbmRpZiAvKiBOT0xJU1RFTiAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi1zdGF0aWMg Y2hhciBzdmNidWZbODBdOyAgICAgICAgICAgICAgICAgLyogVENQIHNlcnZpY2Ugc3RyaW5nICov Ci1zdGF0aWMgaW50IHN2Y251bSA9IDA7ICAgICAgICAgICAgICAgICAgLyogVENQIHBvcnQgbnVt YmVyICovCi0KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLQotLyoKLSAgVENQSVBMSUIgbWVhbnMg dXNlIHNlcGFyYXRlIHNvY2tldCBjYWxscyBmb3IgaS9vLCB3aGlsZSBvbiBVTklYIHRoZQotICBu b3JtYWwgZmlsZSBzeXN0ZW0gY2FsbHMgYXJlIHVzZWQgZm9yIFRDUC9JUCBzb2NrZXRzIHRvby4K LSAgTWVhbnMgIkRFQ19UQ1BJUCBvciBNVUxUSU5FVCBvciBXSU5UQ1Agb3IgT1MyIG9yIEJFQk9Y IiAoc2VlIGNrY25ldC5oKSwKLSovCi0KLSNpZmRlZiBUQ1BJUExJQgotCi0vKiBGb3IgYnVmZmVy ZWQgbmV0d29yayByZWFkcy4uLiAqLwotLyoKLSAgSWYgdGhlIGJ1ZmZlcmluZyBjb2RlIGlzIHdy aXR0ZW4gcmlnaHQsIGl0IHNob3VsZG4ndCBtYXR0ZXIKLSAgaG93IGxvbmcgdGhpcyBidWZmZXIg aXMuCi0qLwotI2lmZGVmIE9TMgotI2lmZGVmIE5UCi0jZGVmaW5lIFRUSUJVRkwgNjQyNDAgICAg ICAgICAgICAgICAgICAgLyogNDQgKiAxNDYwIChNU1MpICovCi0jZWxzZQotI2RlZmluZSBUVElC VUZMIDMyMTIwICAgICAgICAgICAgICAgICAgIC8qIDIyICogMTQ2MCAoTVNTKSAqLwotI2VuZGlm IC8qIE5UICovCi0jZWxzZSAvKiBPUzIgKi8KLSNkZWZpbmUgVFRJQlVGTCA4MTkxICAgICAgICAg ICAgICAgICAgICAvKiBMZXQncyB1c2UgOEsuICovCi0jZW5kaWYgLyogT1MyICovCi0KLUNIQVIg dHRpYnVmW1RUSUJVRkwrMV07Ci0KLS8qCi0gIHNlbGVjdCgpIGlzIHVzZWQgaW4gcHJlZmVyZW5j ZSB0byBhbGFybSgpL3NpZ25hbCgpLCBidXQgZGlmZmVyZW50IHN5c3RlbXMKLSAgdXNlIGRpZmZl cmVudCBmb3JtcyBvZiBzZWxlY3QoKS4uLgotKi8KLSNpZm5kZWYgTk9TRUxFQ1QgICAgICAgICAv KiBPcHRpb24gdG8gb3ZlcnJpZGUgQlNEU0VMRUNUICovCi0jaWZkZWYgQkVMTFYxMAotLyoKLSAg Tm90ZTogQWx0aG91Z2ggQkVMTFYxMCBkb2VzIGhhdmUgVENQL0lQIHN1cHBvcnQsIGFuZCBkb2Vz IHVzZSB0aGUgdW5pcXVlCi0gIGZvcm0gb2Ygc2VsZWN0KCkgdGhhdCBpcyBldmlkZW50IGluIHRo aXMgbW9kdWxlIChhbmQgaW4gY2t1dGlvLmMpLCBpdCBkb2VzCi0gIG5vdCBoYXZlIGEgc29ja2V0 cyBsaWJyYXJ5IGFuZCBzbyB3ZSBjYW4ndCBidWlsZCBLZXJtaXQgVENQL0lQIHN1cHBvcnQgZm9y Ci0gIGl0LiAgRm9yIHRoaXMsIHNvbWVib2R5IHdvdWxkIGhhdmUgdG8gd3JpdGUgVENQL0lQIHN0 cmVhbXMgY29kZS4KLSovCi0jZGVmaW5lIEJFTExTRUxFQ1QKLSNpZm5kZWYgRkRfU0VUU0laRQot I2RlZmluZSBGRF9TRVRTSVpFIDEyOAotI2VuZGlmIC8qIEZEX1NFVFNJWkUgKi8KLSNlbHNlCi0j aWZkZWYgV0lOVENQICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVk1TIHdpdGggV29sbG9u Z29uZyBXSU4vVENQICovCi0jaWZuZGVmIE9MRF9UV0cgICAgICAgICAgICAgICAgICAgICAgICAg LyogVFdHIDMuMiBoYXMgb25seSBzZWxlY3QocmVhZCkgKi8KLSNkZWZpbmUgQlNEU0VMRUNUCi0j ZW5kaWYgLyogT0xEX1RXRyAqLwotI2Vsc2UKLSNpZmRlZiBDTVVfVENQSVAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBMSUJDTVUgY2FuIGRvIHNlbGVjdCAqLwotI2RlZmluZSBCU0RTRUxFQ1QK LSNlbHNlCi0jaWZkZWYgREVDX1RDUElQCi0jZGVmaW5lIEJTRFNFTEVDVAotI2Vsc2UKLSNpZmRl ZiBPUzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPUy8yIHdpdGggVENQL0lQICov Ci0jaWZkZWYgTlQKLSNkZWZpbmUgQlNEU0VMRUNUCi0jZWxzZSAvKiBOVCAqLwotI2RlZmluZSBJ Qk1TRUxFQ1QKLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIERF Q19UQ1BJUCAqLwotI2VuZGlmIC8qIENNVV9UQ1BJUCAqLwotI2VuZGlmIC8qIFdJTlRDUCAqLwot I2VuZGlmIC8qIEJFTExWMTAgKi8KLSNlbmRpZiAvKiBOT1NFTEVDVCAqLwotLyoKLSAgT3RoZXJz IChUR1YsIFRDUHdhcmUsIC4uLikgdXNlIGFsYXJtKCkvc2lnbmFsKCkuICBUaGUgQlNEU0VMRUNU IGNhc2UgZG9lcyBub3QKLSAgY29tcGlsZSBhdCBhbGw7IHRoZSBJQk1TRUxFQ1QgY2FzZSBjb21w aWxlcyBhbmQgbGlua3MgYnV0IGNyYXNoZXMgYXQgcnVudGltZS4KLSAgTk9URTogSWYgYW55IG9m IHRoZXNlIGNhbiBiZSBjb252ZXJ0ZWQgdG8gc2VsZWN0KCksIHRoZXkgc2hvdWxkIGJlIGZvciB0 d28KLSAgcmVhc29uczogKDEpIEl0J3MgYSBsb3QgZmFzdGVyOyAoMikgY2VydGFpbiBzb2NrZXRz IGxpYnJhcmllcyBkbyBub3QgbGlrZQotICB0aGVpciBzb2NrZXRfcmVhZCgpIGNhbGxzIHRvIGJl IGludGVycnVwdGVkOyBzdWJzZXF1ZW50IHNvY2tldF9yZWFkKCkncyB0ZW5kCi0gIHRvIGZhaWwg d2l0aCBFQlVTWS4gIFRoaXMgaGFwcGVuZWQgaW4gdGhlIFVDWCBjYXNlIGJlZm9yZSBpdCB3YXMg Y29udmVydGVkCi0gIHRvIHVzZSBzZWxlY3QoKS4KLSovCi0jaWZuZGVmIE9TMgotI2lmbmRlZiBW TVMKLXN0YXRpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGVzZSBhcmUg dXNlZCBpbiBDS1ZUSU8uQyAqLwotI2VuZGlmIC8qIFZNUyAqLyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEFuZCBpbiBDS09ORVQuQyAgICAgICAgICAgICovCi0jZW5kaWYgLyogT1MyICovCi1p bnQKLSAgdHRpYnAgPSAwLAotICB0dGlibiA9IDA7Ci0vKgotICBSZWFkIGJ5dGVzIGZyb20gbmV0 d29yayBpbnRvIGludGVybmFsIGJ1ZmZlciB0dGlidWZbXS4KLSAgVG8gYmUgY2FsbGVkIHdoZW4g aW5wdXQgYnVmZmVyIGlzIGVtcHR5LCBpLmUuIHdoZW4gdHRpYm4gPT0gMC4KLQotICBPdGhlciBu ZXR3b3JrIHJlYWRpbmcgcm91dGluZXMsIGxpa2UgdHRpbmMsIHR0aW5sLCB0dHhpbiwgc2hvdWxk IGNoZWNrIHRoZQotICBpbnRlcm5hbCBidWZmZXIgZmlyc3QsIGFuZCBjYWxsIHRoaXMgcm91dGlu ZSBmb3IgYSByZWZpbGwgaWYgbmVjZXNzYXJ5LgotCi0gIFJldHVybnMgLTEgb24gZXJyb3IsIDAg aWYgbm90aGluZyBoYXBwZW5zLiAgV2hlbiBkYXRhIGlzIHJlYWQgc3VjY2Vzc2Z1bGx5LAotICBy ZXR1cm5zIG51bWJlciBvZiBieXRlcyByZWFkLCBhbmQgc2V0cyBnbG9iYWwgdHRpYm4gdG8gdGhh dCBudW1iZXIgYW5kCi0gIHR0aWJwICh0aGUgYnVmZmVyIHBvaW50ZXIpIHRvIHplcm8uCi0qLwot X1BST1RPVFlQKCBpbnQgdHRidWZyLCAoIFZPSUQgKSApOwotaW50Ci10dGJ1ZnIoKSB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogVFQgQnVmZmVyIFJlYWQgKi8KLSAgICBpbnQgY291 bnQ7Ci0KLSAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpICAgICAgICAgICAgICAvKiBGaXJzdCBt YWtlIHN1cmUgY3VycmVudCBuZXQgaXMgKi8KLSAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAg ICAgICAgICAgICAvKiBUQ1AvSVA7IGlmIG5vdCwgZG8gbm90aGluZy4gKi8KLQotI2lmZGVmIE9T MgotICAgIFJlcXVlc3RUQ1BJUE11dGV4KFNFTV9JTkRFRklOSVRFX1dBSVQpOwotI2VuZGlmIC8q IE9TMiAqLwotCi0gICAgaWYgKHR0aWJuID4gMCkgeyAgICAgICAgICAgICAgICAgICAgLyogT3Vy IGludGVybmFsIGJ1ZmZlciBpcyBub3QgZW1wdHksICovCi0jaWZkZWYgT1MyCi0gICAgICAgIFJl bGVhc2VUQ1BJUE11dGV4KCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgIHJldHVybih0dGli bik7ICAgICAgICAgICAgICAgICAgLyogc28ga2VlcCB1c2luZyBpdC4gKi8KLSAgICB9Ci0KLSAg ICBpZiAodHR5ZmQgPT0gLTEpIHsgICAgICAgICAgICAgICAgICAvKiBObyBjb25uZWN0aW9uLCBl cnJvciAqLwotI2lmZGVmIE9TMgotICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOwotI2VuZGlm IC8qIE9TMiAqLwotICAgICAgICByZXR1cm4oLTIpOwotICAgIH0KLQotICAgIHR0aWJwID0gMDsg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVsc2UgcmVzZXQgcG9pbnRlciB0byBiZWdpbm5p bmcgKi8KLQotI2lmZGVmIFdJTlRDUAotICAgIGNvdW50ID0gNTEyOyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFRoaXMgd29ya3MgZm9yIFdJTi9UQ1AgKi8KLSNlbHNlCi0jaWZkZWYgREVDX1RD UElQCi0gICAgY291bnQgPSA1MTI7ICAgICAgICAgICAgICAgICAgICAgICAgLyogVUNYICovCi0j ZWxzZQotI2lmZGVmIE9TMgotICAgIGNvdW50ID0gVFRJQlVGTDsKLSNlbHNlICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBNdWx0aW5ldCwgZXRjLiAqLwotICAgIGNvdW50ID0g dHRjaGsoKTsgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIG5ldHdvcmsgaW5wdXQgYnVmZmVy LCAqLwotICAgIGlmICh0dGlibiA+IDApIHsgICAgICAgICAgICAgICAgICAgIC8qIHdoaWNoIGNh biBwdXQgYSBjaGFyIHRoZXJlISAqLwotICAgICAgICBkZWJ1ZyhGMTExLCJ0dGJ1ZnIiLCJ0dGNo aygpIHJldHVybnMiLGNvdW50KTsKLSNpZmRlZiBPUzIKLSAgICAgICAgUmVsZWFzZVRDUElQTXV0 ZXgoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgcmV0dXJuKHR0aWJuKTsKLSAgICB9Ci0g ICAgaWYgKGNvdW50IDwgMCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIFJlYWQgZXJyb3IgLSBj b25uZWN0aW9uIGNsb3NlZCAqLwotI2lmZGVmIE9TMgotICAgICAgICBSZWxlYXNlVENQSVBNdXRl eCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICByZXR1cm4oLTIpOwotICAgIH0KLSAgICBl bHNlIGlmIChjb3VudCA+IFRUSUJVRkwpICAgICAgICAgICAvKiBUb28gbWFueSB0byByZWFkICov Ci0gICAgICBjb3VudCA9IFRUSUJVRkw7Ci0gICAgZWxzZSBpZiAoY291bnQgPT0gMCkgICAgICAg ICAgICAgICAgLyogTm9uZSwgc28gZm9yY2UgYmxvY2tpbmcgcmVhZCAqLwotICAgICAgY291bnQg PSAxOwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIERFQ19UQ1BJUCAqLwotI2VuZGlmIC8q IFdJTlRDUCAqLwotICAgIGRlYnVnKEYxMDEsInR0YnVmciBjb3VudCAxIiwiIixjb3VudCk7Ci0K LSNpZmRlZiBDS19TU0wKLSAgICBpZiAoc3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxh ZykgewotICAgICAgICBpbnQgZXJyb3I7Ci0gICAgICBzc2xfcmVhZDoKLSAgICAgICAgaWYgKHNz bF9hY3RpdmVfZmxhZykKLSAgICAgICAgICBjb3VudCA9IFNTTF9yZWFkKHNzbF9jb24sIHR0aWJ1 ZiwgY291bnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgY291bnQgPSBTU0xfcmVhZCh0bHNf Y29uLCB0dGlidWYsIGNvdW50KTsKLSAgICAgICAgZXJyb3IgPSBTU0xfZ2V0X2Vycm9yKHNzbF9h Y3RpdmVfZmxhZz9zc2xfY29uOnRsc19jb24sY291bnQpOwotICAgICAgICBzd2l0Y2ggKGVycm9y KSB7Ci0gICAgICAgICAgY2FzZSBTU0xfRVJST1JfTk9ORToKLSAgICAgICAgICAgIGRlYnVnKEYx MTEsInR0YnVmciBTU0xfRVJST1JfTk9ORSIsImNvdW50Iixjb3VudCk7Ci0gICAgICAgICAgICBp ZiAoY291bnQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgdHRpYnAgPSAwOyAgICAgICAgICAgICAg LyogUmVzZXQgYnVmZmVyIHBvaW50ZXIuICovCi0gICAgICAgICAgICAgICAgdHRpYm4gPSBjb3Vu dDsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOwotI2Vu ZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgIHJldHVybih0dGlibik7ICAgICAgICAgIC8q IFJldHVybiBidWZmZXIgY291bnQuICovCi0gICAgICAgICAgICB9IGVsc2UgaWYgKGNvdW50IDwg MCkgewotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7Ci0j ZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbmV0Y2xvcygpOwotI2lmZGVmIE9TMgotICAgICAg ICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAg ICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIFNTTF9F UlJPUl9XQU5UX1dSSVRFOgotICAgICAgICAgICAgZGVidWcoRjEwMCwidHRidWZyIFNTTF9FUlJP Ul9XQU5UX1dSSVRFIiwiIiwwKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgUmVsZWFzZVRD UElQTXV0ZXgoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0g ICAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgotICAgICAgICAgICAgZGVidWcoRjEw MCwidHRidWZyIFNTTF9FUlJPUl9XQU5UX1JFQUQiLCIiLDApOwotI2lmZGVmIE9TMgotICAgICAg ICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAg IHJldHVybigtMSk7Ci0gICAgICAgICAgY2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoKLSAgICAgICAg ICAgICAgaWYgKCBjb3VudCA9PSAwICkgeyAvKiBFT0YgKi8KLSAgICAgICAgICAgICAgICAgIG5l dGNsb3MoKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4 KCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAgICByZXR1cm4oLTIpOwotICAg ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgaW50IHJjID0gLTE7Ci0jaWZk ZWYgTlQKLSAgICAgICAgICAgICAgICAgIGludCBnbGUgPSBHZXRMYXN0RXJyb3IoKTsKLSAgICAg ICAgICAgICAgICAgIGRlYnVnKEYxMTEsInR0YnVmciBTU0xfRVJST1JfU1lTQ0FMTCIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgIkdldExhc3RFcnJvcigpIixnbGUpOwotICAgICAgICAgICAg ICAgICAgcmMgPSBvczJzb2NrZXRlcnJvcihnbGUpOwotICAgICAgICAgICAgICAgICAgaWYgKHJj ID09IC0xKQotICAgICAgICAgICAgICAgICAgICAgIHJjID0gLTI7Ci0gICAgICAgICAgICAgICAg ICBlbHNlIGlmICggcmMgPT0gLTIgKQotICAgICAgICAgICAgICAgICAgICAgIHJjID0gLTE7Ci0j ZW5kaWYgLyogTlQgKi8KLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJ UE11dGV4KCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAgICByZXR1cm4ocmMp OwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9YNTA5X0xP T0tVUDoKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0YnVmciBTU0xfRVJST1JfV0FOVF9YNTA5 X0xPT0tVUCIsIiIsMCk7Ci0gICAgICAgICAgICBuZXRjbG9zKCk7Ci0jaWZkZWYgT1MyCi0gICAg ICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAg ICAgICByZXR1cm4oLTIpOwotICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1NTTDoKLSAgICAgICAg ICAgICAgaWYgKGJpb19lcnIhPU5VTEwpIHsKLSAgICAgICAgICAgICAgICAgIGludCBsZW47Ci0g ICAgICAgICAgICAgICAgICBleHRlcm4gY2hhciBzc2xfZXJyW107Ci0gICAgICAgICAgICAgICAg ICBCSU9fcHJpbnRmKGJpb19lcnIsInR0YnVmciBTU0xfRVJST1JfU1NMXG4iKTsKLSAgICAgICAg ICAgICAgICAgIEVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7Ci0gICAgICAgICAgICAgICAgICBs ZW4gPSBCSU9fcmVhZChiaW9fZXJyLHNzbF9lcnIsU1NMX0VSUl9CRlNaKTsKLSAgICAgICAgICAg ICAgICAgIHNzbF9lcnJbbGVuIDwgU1NMX0VSUl9CRlNaID8gbGVuIDogU1NMX0VSUl9CRlNaXSA9 ICdcMCc7Ci0gICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ0dGJ1ZnIgU1NMX0VSUk9SX1NT TCIsc3NsX2VyciwwKTsKLSAgICAgICAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykgICAg ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICBwcmludGYoc3NsX2Vycik7Ci0g ICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3NsX2RlYnVnX2ZsYWcpIHsKLSAgICAgICAgICAgICAg ICAgIGRlYnVnKEYxMDAsInR0YnVmciBTU0xfRVJST1JfU1NMIiwiIiwwKTsKLSAgICAgICAgICAg ICAgICAgIGZmbHVzaChzdGRlcnIpOwotICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs InR0YnVmciBTU0xfRVJST1JfU1NMXG4iKTsKLSAgICAgICAgICAgICAgICAgIEVSUl9wcmludF9l cnJvcnNfZnAoc3RkZXJyKTsKLSAgICAgICAgICAgICAgfQotI2lmZGVmIENPTU1FTlQKLQkgICAg ICBuZXRjbG9zKCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2lmZGVmIE9TMgotICAgICAgICAg ICAgICBSZWxlYXNlVENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAg cmV0dXJuKC0yKTsKLSAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVSTjoKLSAgICAg ICAgICAgIGRlYnVnKEYxMDAsInR0YnVmciBTU0xfRVJST1JfWkVST19SRVRVUk4iLCIiLDApOwot ICAgICAgICAgICAgbmV0Y2xvcygpOwotI2lmZGVmIE9TMgotICAgICAgICAgICAgICBSZWxlYXNl VENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgcmV0dXJuKC0yKTsK LSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dGJ1ZnIgU1NM X0VSUk9SXz8/Pz8/IiwiIiwwKTsKLSAgICAgICAgICAgICAgbmV0Y2xvcygpOwotI2lmZGVmIE9T MgotICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9TMiAqLwot ICAgICAgICAgICAgICByZXR1cm4oLTIpOwotICAgICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyog Q0tfU1NMICovCi0KLSNpZmRlZiBDT01NRU5UCi0vKgotIFRoaXMgaXMgZm9yIG5vbmJsb2NraW5n IHJlYWRzLCB3aGljaCB3ZSBkb24ndCBkbyBhbnkgbW9yZS4gIFRoaXMgY29kZSBkaWRuJ3QKLSB3 b3JrIGFueXdheSwgaW4gdGhlIHNlbnNlIHRoYXQgYSBicm9rZW4gY29ubmVjdGlvbiB3YXMgbmV2 ZXIgc2Vuc2VkLgotKi8KLSAgICBpZiAoKGNvdW50ID0gc29ja2V0X3JlYWQodHR5ZmQsJnR0aWJ1 Zlt0dGlicCt0dGlibl0sY291bnQpKSA8IDEpIHsKLSAgICAgICAgaWYgKGNvdW50ID09IC0xICYm IHNvY2tldF9lcnJubyA9PSBFV09VTERCTE9DSykgewotICAgICAgICAgICAgZGVidWcoRjEwMCwi dHRidWZyIGZpbmRzIG5vdGhpbmciLCIiLDApOwotI2lmZGVmIE9TMgotICAgICAgICAgICAgUmVs ZWFzZVRDUElQTXV0ZXgoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgIHJldHVybigw KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsInR0YnVmciBzb2Nr ZXRfcmVhZCBlcnJvciIsIiIsc29ja2V0X2Vycm5vKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAg IFJlbGVhc2VUQ1BJUE11dGV4KCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICByZXR1 cm4oLTEpOwotICAgICAgICB9Ci0KLSAgICB9IGVsc2UgaWYgKGNvdW50ID09IDApIHsKLSAgICAg ICAgZGVidWcoRjEwMCwidHRidWZyIHNvY2tldCBlb2YiLCIiLDApOwotI2lmZGVmIE9TMgotICAg ICAgICBSZWxlYXNlVENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICByZXR1 cm4oLTEpOwotICAgIH0KLSNlbHNlIC8qIENPTU1FTlQgKi8KLQotLyogVGhpcyBpcyBmb3IgYmxv Y2tpbmcgcmVhZHMgKi8KLQotI2lmbmRlZiBWTVMKLSNpZmRlZiBTT19PT0JJTkxJTkUKLSAgICB7 Ci0gICAgICAgIGludCBvdXRvZmJhbmQgPSAwOwotI2lmZGVmIEJFTExTRUxFQ1QKLSAgICAgICAg aWYgKHNlbGVjdCgxMjgsIE5VTEwsIE5VTEwsIGVmZHMsIDApID4gMCAmJiBGRF9JU1NFVCh0dHlm ZCwgZWZkcykpCi0gICAgICAgICAgb3V0b2ZiYW5kID0gMTsKLSNlbHNlCi0jaWZkZWYgQlNEU0VM RUNUCi0gICAgICAgIGZkX3NldCBlZmRzOwotICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0djsKLSAg ICAgICAgRkRfWkVSTygmZWZkcyk7Ci0gICAgICAgIEZEX1NFVCh0dHlmZCwgJmVmZHMpOwotICAg ICAgICB0di50dl9zZWMgID0gdHYudHZfdXNlYyA9IDBMOwotICAgICAgICBkZWJ1ZyhGMTAwLCJP dXQtb2YtQmFuZCBCU0RTRUxFQ1QiLCIiLDApOwotI2lmZGVmIE5UCi0gICAgICAgIFdTQVNhZmVU b0NhbmNlbCA9IDE7Ci0jZW5kaWYgLyogTlQgKi8KLSAgICAgICAgaWYgKHNlbGVjdChGRF9TRVRT SVpFLCBOVUxMLCBOVUxMLCAmZWZkcywgJnR2KSA+IDAgJiYKLSAgICAgICAgICAgIEZEX0lTU0VU KHR0eWZkLCAmZWZkcykpCi0gICAgICAgICAgb3V0b2ZiYW5kID0gMTsKLSNpZmRlZiBOVAotICAg ICAgICBXU0FTYWZlVG9DYW5jZWwgPSAwOwotI2VuZGlmIC8qIE5UICovCi0jZWxzZSAvKiAhQlNE U0VMRUNUICovCi0jaWZkZWYgSUJNU0VMRUNUCi0vKiBJcyB1c2VkIGJ5IE9TLzIgLi4uICovCi0v KiAuLi4gYW5kIGl0IGNhbWUgaW4gaGFuZHkhICBGb3Igb3VyIFRDUC9JUCBsYXllciwgaXQgYXZv aWRzIGFsbCB0aGUgZmRfc2V0ICovCi0vKiBhbmQgdGltZXZhbCBzdHVmZiBzaW5jZSB0aGlzIGlz IHRoZSBvbmx5IHBsYWNlIHdoZXJlIGl0IGlzIHVzZWQuICovCi0gICAgICAgIGludCBzb2NrZXQg PSB0dHlmZDsKLSAgICAgICAgZGVidWcoRjEwMCwiT3V0LW9mLUJhbmQgSUJNU0VMRUNUIiwiIiww KTsKLSAgICAgICAgaWYgKChzZWxlY3QoJnNvY2tldCwgMCwgMCwgMSwgMEwpID09IDEpICYmIChz b2NrZXQgPT0gdHR5ZmQpKQotICAgICAgICAgIG91dG9mYmFuZCA9IDE7Ci0jZWxzZSAvKiAhSUJN U0VMRUNUICovCi0vKgotICBJZiB3ZSBjYW4ndCB1c2Ugc2VsZWN0KCksIHRoZW4gd2UgdXNlIHRo ZSByZWd1bGFyIGFsYXJtKCkvc2lnbmFsKCkKLSAgdGltZW91dCBtZWNoYW5pc20uCi0qLwotICAg ICAgZGVidWcoRjEwMSwiT3V0LW9mLUJhbmQgZGF0YSBub3Qgc3VwcG9ydGVkIiwiIiwwKTsKLSAg ICAgIG91dG9mYmFuZCA9IDA7Ci0KLSNlbmRpZiAvKiBJQk1TRUxFQ1QgKi8KLSNlbmRpZiAvKiBC U0RTRUxFQ1QgKi8KLSNlbmRpZiAvKiBCRUxMU0VMRUNUICovCi0gICAgICBpZiAob3V0b2ZiYW5k KSB7Ci0gICAgICAgICAvKiBHZXQgdGhlIFVyZ2VudCBEYXRhICovCi0gICAgICAgICAvKiBpZiBP T0JJTkxJTkUgaXMgZGlzYWJsZWQgdGhpcyBzaG91bGQgYmUgb25seSBhIHNpbmdsZSBieXRlICAg ICAgKi8KLSAgICAgICAgIC8qIE1TIFdpbnNvY2sgaGFzIGEgYnVnIGluIFdpbmRvd3MgOTUuICBF eHRyYSBieXRlcyBhcmUgZGVsaXZlcmVkICAqLwotICAgICAgICAgLyogVGhhdCB3ZXJlIG5ldmVy IHNlbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jaWZk ZWYgT1MyCi0gICAgICAgICAgUmVxdWVzdFRDUElQTXV0ZXgoU0VNX0lOREVGSU5JVEVfV0FJVCk7 Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgY291bnQgPSBzb2NrZXRfcmVjdih0dHlmZCwm dHRpYnVmW3R0aWJwK3R0aWJuXSxjb3VudCxNU0dfT09CKTsKLSNpZmRlZiBPUzIKLSAgICAgICAg ICBSZWxlYXNlVENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgIGlmIChj b3VudCA8PSAwKSB7Ci0gICAgICAgICAgICAgIGludCBzX2Vycm5vID0gc29ja2V0X2Vycm5vOwot ICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCAidHRidWZyIHNvY2tldF9yZWN2IE1TR19PT0IiLCIi LGNvdW50KTsKLSAgICAgICAgICAgICAgZGVidWcoRjEwMSwgInR0YnVmciBzb2NrZXRfZXJybm8i LCIiLHNfZXJybm8pOwotI2lmZGVmIE9TMk9OTFkKLSAgICAgICAgICAgICAgaWYgKGNvdW50IDwg MCAmJiAoc19lcnJubyA9PSAwIHx8IHNfZXJybm8gPT0gMjMpKSB7Ci0gICAgICAgICAgICAgICAg ICAvKiBUaGVzZSBhcHBlYXIgaW4gT1MvMiAtIGRvbid0IGtub3cgd2h5ICAgKi8KLSAgICAgICAg ICAgICAgICAgIC8qIGlnbm9yZSBpdCBhbmQgcmVhZCBhcyBub3JtYWwgZGF0YSAgICAgICAqLwot ICAgICAgICAgICAgICAgICAgLyogYW5kIGJyZWFrLCB0aGVuIHdlIHdpbGwgYXR0ZW1wdCB0byBy ZWFkICovCi0gICAgICAgICAgICAgICAgICAvKiB0aGUgcG9ydCB1c2luZyBub3JtYWwgcmVhZCgp IHRlY2huaXF1ZXMgKi8KLSAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0YnVmciBoYW5k aW5nIGFzIGluLWJhbmQgZGF0YSIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgICBjb3VudCA9IDE7 Ci0gICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICBuZXRjbG9zKCk7ICAg ICAgICAgICAgICAgICAgICAvKiAqKiogKioqICovCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICAg ICAgICBSZWxlYXNlVENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAg ICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgICAgICAgfQotI2Vsc2UgLyogT1MyT05MWSAqLwot ICAgICAgICAgICAgICBuZXRjbG9zKCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogKioqICoq KiAqLwotI2lmZGVmIE9TMgotICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOwotI2Vu ZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICByZXR1cm4oLTIpOwotI2VuZGlmIC8qIE9TMk9O TFkgKi8KLSAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAvKiB3ZSBnb3Qg b3V0LW9mLWJhbmQgZGF0YSAqLwotICAgICAgICAgICAgICBja2hleGR1bXAoInR0YnVmciBvdXQt b2YtYmFuZCBjaGFycyIsJnR0aWJ1Zlt0dGlicCt0dGlibl0sY291bnQpOwotI2lmZGVmIEJFVEFE RUJVRwotICAgICAgICAgICAgICBibGVlcChCUF9OT1RFKTsKLSNlbmRpZiAvKiBCRVRBREVCVUcg Ki8KLSNpZmRlZiBSTE9HQ09ERSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBibGFoICovCi0g ICAgICAgICAgICAgIGlmICh0dG5wcm90byA9PSBOUF9STE9HSU4gIHx8Ci0gICAgICAgICAgICAg ICAgICB0dG5wcm90byA9PSBOUF9LNExPR0lOIHx8IHR0bnByb3RvID09IE5QX0VLNExPR0lOIHx8 Ci0gICAgICAgICAgICAgICAgICAoKHR0bnByb3RvID09IE5QX0s1TE9HSU4gfHwgdHRucHJvdG8g PT0gTlBfRUs1TE9HSU4pICYmIAotICAgICAgICAgICAgICAgICAgIXJsb2dfaW5iYW5kKQotICAg ICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgLyoK LSAgICAgICAgICAgICAgICAgICAgV2hlbiB1cmdlbnQgZGF0YSBpcyByZWFkIHdpdGggTVNHX09P QiBhbmQgbm90IE9PQklOTElORQotICAgICAgICAgICAgICAgICAgICB0aGVuIHVyZ2VudCBkYXRh IGFuZCBub3JtYWwgZGF0YSBhcmUgbm90IG1peGVkLiAgU28KLSAgICAgICAgICAgICAgICAgICAg dHJlYXQgdGhlIGVudGlyZSBidWZmZXIgYXMgdXJnZW50IGRhdGEuCi0gICAgICAgICAgICAgICAg ICAqLwotICAgICAgICAgICAgICAgICAgcmxvZ19vb2IoJnR0aWJ1Zlt0dGlicCt0dGlibl0sIGNv dW50KTsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7 Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAgICByZXR1cm4gdHRidWZyKCk7Ci0g ICAgICAgICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIFJMT0dDT0RFICovIC8qIGJsYWggKi8KLSNp ZmRlZiBDT01NRU5UCi0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgSSBoYXZlbid0IHdy aXR0ZW4gdGhpcyB5ZXQsIG5vciBkbyBJIGtub3cgd2hhdCBpdCBzaG91bGQgZG8KLSAgICAgICAg ICAgICAqLwotICAgICAgICAgICAgICAgIGlmICh0dG5wcm90byA9PSBOUF9URUxORVQpIHsKLSAg ICAgICAgICAgICAgICAgICAgdG5fb29iKCk7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAg ICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAg ICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBDT01NRU5U ICovCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIC8qIEZvciBhbnkgcHJvdG9j b2xzIHdlIGRvbid0IGhhdmUgYSBzcGVjaWFsIG91dC1vZi1iYW5kICAqLwotICAgICAgICAgICAg ICAgICAgLyogaGFuZGxlciBmb3IsIGp1c3QgcHV0IHRoZSBieXRlcyBpbiB0aGUgbm9ybWFsIGJ1 ZmZlciAgICovCi0gICAgICAgICAgICAgICAgICAvKiBhbmQgcmV0dXJuICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgICAgICAgdHRp YnAgKz0gMDsgICAgICAgLyogUmVzZXQgYnVmZmVyIHBvaW50ZXIuICovCi0gICAgICAgICAgICAg ICAgICB0dGlibiArPSBjb3VudDsKLSNpZmRlZiBERUJVRwotICAgICAgICAgICAgICAgICAgLyog R290IHNvbWUgYnl0ZXMuICovCi0gICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ0dGJ1ZnIg Y291bnQgMiIsIiIsY291bnQpOwotICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID4gMCkKLSAg ICAgICAgICAgICAgICAgICAgICB0dGlidWZbdHRpYnArdHRpYm5dID0gJ1wwJzsKLSAgICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTEsInR0YnVmciB0dGlidWYiLHR0aWJ1Zix0dGlicCk7Ci0jZW5k aWYgLyogREVCVUcgKi8KLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJ UE11dGV4KCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAgICByZXR1cm4odHRp Ym4pOyAgICAvKiBSZXR1cm4gYnVmZmVyIGNvdW50LiAqLwotICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgfQotICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBTT19PT0JJTkxJTkUgKi8KLSNlbmRp ZiAvKiBWTVMgKi8KLQotICAgIGNvdW50ID0gc29ja2V0X3JlYWQodHR5ZmQsJnR0aWJ1Zlt0dGli cCt0dGlibl0sY291bnQpOwotICAgIGlmIChjb3VudCA8PSAwKSB7Ci0gICAgICAgIGludCBzX2Vy cm5vID0gc29ja2V0X2Vycm5vOwotICAgICAgICBkZWJ1ZyhGMTAxLCJ0dGJ1ZnIgc29ja2V0X3Jl YWQiLCIiLGNvdW50KTsKLSAgICAgICAgZGVidWcoRjEwMSwidHRidWZyIHNvY2tldF9lcnJubyIs IiIsc19lcnJubyk7Ci0jaWZkZWYgT1MyCi0gICAgICAgIGlmIChjb3VudCA9PSAwIHx8IG9zMnNv Y2tldGVycm9yKHNfZXJybm8pIDwgMCkgewotICAgICAgICAgICAgbmV0Y2xvcygpOwotICAgICAg ICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKLSAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAg ICAgIH0KLSAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKLSAgICAgICAgcmV0dXJuKC0xKTsK LSNlbHNlIC8qIE9TMiAqLwotICAgICAgICBuZXRjbG9zKCk7ICAgICAgICAgICAgICAgICAgICAg IC8qICoqKiAqKiogKi8KLSAgICAgICAgcmV0dXJuKC0yKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAg ICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLyAvKiAoYmxvY2tpbmcgdnMgbm9uYmxvY2sgcmVhZHMu Li4pICovCi0gICAgZWxzZSB7Ci0gICAgICAgIHR0aWJwID0gMDsgICAgICAgICAgICAgICAgICAg ICAgLyogUmVzZXQgYnVmZmVyIHBvaW50ZXIuICovCi0gICAgICAgIHR0aWJuICs9IGNvdW50Owot I2lmZGVmIERFQlVHCi0gICAgICAgIGRlYnVnKEYxMDEsInR0YnVmciBjb3VudCAyIiwiIixjb3Vu dCk7IC8qIEdvdCBzb21lIGJ5dGVzLiAqLwotICAgICAgICBpZiAoY291bnQgPiAwKQotICAgICAg ICAgIHR0aWJ1Zlt0dGlicCt0dGlibl0gPSAnXDAnOwotICAgICAgICBkZWJ1ZyhGMTExLCJ0dGJ1 ZnIgdHRpYnVmIiwmdHRpYnVmW3R0aWJwXSx0dGlibik7Ci0jZW5kaWYgLyogREVCVUcgKi8KLQot I2lmZGVmIE9TMgotICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9TMiAq LwotICAgICAgICByZXR1cm4odHRpYm4pOyAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBidWZm ZXIgY291bnQuICovCi0gICAgfQotfQotI2VuZGlmIC8qIFRDUElQTElCICovCi0KLSNpZm5kZWYg SUJNU0VMRUNUCi0jaWZuZGVmIEJFTExTRUxFQ1QKLSNpZm5kZWYgQlNEU0VMRUNUICAgICAgICAg ICAgICAgLyogTm9uLVRDUElQTElCIGNhc2UgKi8KLSNpZmRlZiBTRUxFQ1QKLSNkZWZpbmUgQlNE U0VMRUNUCi0jZW5kaWYgLyogU0VMRUNUICovCi0jZW5kaWYgLyogQlNEU0VMRUNUICovCi0jZW5k aWYgLyogQkVMTFNFTEVDVCAqLwotI2VuZGlmIC8qIElCTVNFTEVDVCAqLwotCi0jZGVmaW5lIFRF TE5FVF9QT1JUIDIzICAgICAgICAgIC8qIFNob3VsZCBkbyBsb29rdXAsIGJ1dCBpdCB3b24ndCBj aGFuZ2UgKi8KLSNkZWZpbmUgUkxPR0lOX1BPUlQgNTEzCi0jZGVmaW5lIEtFUk1JVF9QT1JUIDE2 NDkKLSNkZWZpbmUgS0xPR0lOX1BPUlQgNTQzCi0jZGVmaW5lIEVLTE9HSU5fUE9SVCAyMTA1Ci0K LSNpZm5kZWYgTk9ORVQKLS8qCi0gIEMtS2VybWl0IG5ldHdvcmsgb3Blbi9jbG9zZSBmdW5jdGlv bnMgZm9yIEJTRC1zb2NrZXRzLgotICBNdWNoIG9mIHRoaXMgY29kZSBzaGFyZWQgYnkgU3VuTGlu ayBYLjI1LCB3aGljaCBhbHNvIHVzZXMgdGhlIHNvY2tldCBsaWJyYXJ5LgotKi8KLQotLyogIE4g RSBUIE8gUCBOICAtLSAgT3BlbiBhIG5ldHdvcmsgY29ubmVjdGlvbi4gICovCi0vKgotICBDYWxs IHdpdGg6Ci0gICAgbmFtZSBvZiBob3N0IChvciBob3N0OnNlcnZpY2UpLAotICAgIGxjbCAtIGxv Y2FsLW1vZGUgZmxhZyB0byBiZSBzZXQgaWYgdGhpcyBmdW5jdGlvbiBzdWNjZWVkcywKLSAgICBu ZXR3b3JrIHR5cGUgLSB2YWx1ZSBkZWZpbmVkIGluIGNrdW5ldC5oLgotKi8KLSNpZmRlZiBUQ1BT T0NLRVQKLXN0cnVjdCBob3N0ZW50ICoKLSNpZmRlZiBDS19BTlNJQwotY2tfY29weWhvc3RlbnQo c3RydWN0IGhvc3RlbnQgKiBoKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLWNrX2NvcHlob3N0ZW50 KGgpIHN0cnVjdCBob3N0ZW50ICogaDsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIC8q Ci0gICAgICogIFRoZSBob3N0ZW50IHN0cnVjdHVyZSBpcyBkeW5hbWljIGluIG5hdHVyZS4KLSAg ICAgKiAgc3RydWN0ICBob3N0ZW50IHsKLSAgICAgKiAgY2hhciAgICAqIGhfbmFtZTsKLSAgICAg KiAgY2hhciAgICAqICogaF9hbGlhc2VzOwotICAgICAqICBzaG9ydCAgIGhfYWRkcnR5cGU7Ci0g ICAgICogIHNob3J0ICAgaF9sZW5ndGg7Ci0gICAgICogIGNoYXIgICAgKiAqIGhfYWRkcl9saXN0 OwotICAgICAqICAjZGVmaW5lIGhfYWRkciAgaF9hZGRyX2xpc3RbMF0KLSAgICAgKi8KLSNkZWZp bmUgSE9TVEVOVENOVCA1Ci0gICAgc3RhdGljIHN0cnVjdCBob3N0ZW50IGhvc3RzW0hPU1RFTlRD TlRdID0ge3tOVUxMLE5VTEwsMCwwLE5VTEx9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB7TlVMTCxOVUxMLDAsMCxOVUxMfSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge05VTEwsTlVMTCwwLDAsTlVMTH0sCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtOVUxMLE5VTEws MCwwLE5VTEx9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB7TlVMTCxOVUxMLDAsMCxOVUxMfX07Ci0gICAgc3RhdGljIGludCAgICBuZXh0ID0gMDsKLSAg ICBpbnQgICAgaSxjbnQ7Ci0gICAgY2hhciAqKiBwcDsKLQotICAgIGlmICggaCA9PSBOVUxMICkK LSAgICAgICAgcmV0dXJuKE5VTEwpOwotCi0gICAgaWYgKG5leHQgPT0gSE9TVEVOVENOVCkKLSAg ICAgICAgbmV4dCA9IDA7Ci0KLSAgICBpZiAoIGhvc3RzW25leHRdLmhfbmFtZSApIHsKLSAgICAg ICAgZnJlZShob3N0c1tuZXh0XS5oX25hbWUpOwotICAgICAgICBob3N0c1tuZXh0XS5oX25hbWUg PSBOVUxMOwotICAgIH0KLSAgICBpZiAoIGhvc3RzW25leHRdLmhfYWxpYXNlcyApIHsKLSAgICAg ICAgcHAgPSBob3N0c1tuZXh0XS5oX2FsaWFzZXM7Ci0gICAgICAgIHdoaWxlICggKnBwICkgewot ICAgICAgICAgICAgZnJlZSgqcHApOwotICAgICAgICAgICAgcHArKzsKLSAgICAgICAgfQotICAg ICAgICBmcmVlKGhvc3RzW25leHRdLmhfYWxpYXNlcyk7Ci0gICAgfQotI2lmZGVmIEhBRERSTElT VAotICAgIGlmICggaG9zdHNbbmV4dF0uaF9hZGRyX2xpc3QgKSB7Ci0gICAgICAgIHBwID0gaG9z dHNbbmV4dF0uaF9hZGRyX2xpc3Q7Ci0gICAgICAgIHdoaWxlICggKnBwICkgewotICAgICAgICAg ICAgZnJlZSgqcHApOwotICAgICAgICAgICAgcHArKzsKLSAgICAgICAgfQotICAgICAgICBmcmVl KGhvc3RzW25leHRdLmhfYWRkcl9saXN0KTsKLSAgICB9Ci0jZW5kaWYgLyogSEFERFJMSVNUICov Ci0KLSAgICBtYWtlc3RyKCZob3N0c1tuZXh0XS5oX25hbWUsaC0+aF9uYW1lKTsKLSAgICBpZiAo aC0+aF9hbGlhc2VzKSB7Ci0gICAgICAgIGZvciAoIGNudD0wLHBwPWgtPmhfYWxpYXNlczsgcHAg JiYgKnBwOyBwcCsrLGNudCsrKSA7Ci0gICAgICAgIC8qIFRoZSBmb2xsb3dpbmcgY2FuIGdpdmUg d2FybmluZ3MgaW4gbm9uLUFOU0kgYnVpbGRzICovCi0gICAgICAgIGhvc3RzW25leHRdLmhfYWxp YXNlcyA9IChjaGFyICoqKSBtYWxsb2Moc2l6ZW9mKGNoYXIgKikgKiAoY250KzEpKTsKLSAgICAg ICAgZm9yICggaT0wOyBpPGNudDsgaSsrKSB7Ci0gICAgICAgICAgICBob3N0c1tuZXh0XS5oX2Fs aWFzZXNbaV0gPSBOVUxMOwotICAgICAgICAgICAgbWFrZXN0cigmaG9zdHNbbmV4dF0uaF9hbGlh c2VzW2ldLGgtPmhfYWxpYXNlc1tpXSk7Ci0gICAgICAgIH0KLSAgICAgICAgaG9zdHNbbmV4dF0u aF9hbGlhc2VzW2ldID0gTlVMTDsKLSAgICB9IGVsc2UKLSAgICAgICAgaG9zdHNbbmV4dF0uaF9h bGlhc2VzID0gTlVMTDsKLQotICAgIGhvc3RzW25leHRdLmhfYWRkcnR5cGUgPSBoLT5oX2FkZHJ0 eXBlOwotICAgIGhvc3RzW25leHRdLmhfbGVuZ3RoID0gaC0+aF9sZW5ndGg7Ci0KLSNpZmRlZiBI QUREUkxJU1QKLSNpZmRlZiBoX2FkZHIKLSAgICBpZiAoaC0+aF9hZGRyX2xpc3QpIHsKLSAgICAg ICAgZm9yICggY250PTAscHA9aC0+aF9hZGRyX2xpc3Q7IHBwICYmICpwcDsgcHArKyxjbnQrKykg OwotICAgICAgICAvKiBUaGUgZm9sbG93aW5nIGNhbiBnaXZlIHdhcm5pbmdzIG5vbi1BTlNJIGJ1 aWxkcyAqLwotICAgICAgICBob3N0c1tuZXh0XS5oX2FkZHJfbGlzdCA9IChjaGFyICoqKSBtYWxs b2Moc2l6ZW9mKGNoYXIgKikgKiAoY250KzEpKTsKLSAgICAgICAgZm9yICggaT0wOyBpPGNudDsg aSsrKSB7Ci0gICAgICAgICAgICBob3N0c1tuZXh0XS5oX2FkZHJfbGlzdFtpXSA9IG1hbGxvYyho LT5oX2xlbmd0aCk7Ci0gICAgICAgICAgICBiY29weShoLT5oX2FkZHJfbGlzdFtpXSxob3N0c1tu ZXh0XS5oX2FkZHJfbGlzdFtpXSxoLT5oX2xlbmd0aCk7Ci0gICAgICAgIH0KLSAgICAgICAgaG9z dHNbbmV4dF0uaF9hZGRyX2xpc3RbaV0gPSBOVUxMOwotICAgIH0gZWxzZQotICAgICAgICBob3N0 c1tuZXh0XS5oX2FkZHJfbGlzdCA9IE5VTEw7Ci0jZWxzZQotICAgIGJjb3B5KGgtPmhfYWRkciwg Jmhvc3RzW25leHRdLmhfYWRkciwgaC0+aF9sZW5ndGgpOwotI2VuZGlmIC8qIGhfYWRkciAqLwot I2Vsc2UgLyogSEFERFJMSVNUICovCi0gICAgYmNvcHkoaC0+aF9hZGRyLCAmaG9zdHNbbmV4dF0u aF9hZGRyLCBoLT5oX2xlbmd0aCk7Ci0jZW5kaWYgLyogSEFERFJMSVNUICovCi0KLSAgICByZXR1 cm4oJmhvc3RzW25leHQrK10pOwotfQotCi0jaWZkZWYgRVhDRUxBTgotLyoKLSAgTW9zdCBvdGhl ciBCU0Qgc29ja2V0cyBpbXBsZW1lbnRhdGlvbnMgZGVmaW5lIHRoZXNlIGluIGhlYWRlciBmaWxl cwotICBhbmQgbGlicmFyaWVzLgotKi8KLXN0cnVjdCBzZXJ2ZW50IHsKLSAgICB1bnNpZ25lZCBz aG9ydCBzX3BvcnQ7Ci19OwotCi1zdHJ1Y3QgaG9zdGVudCB7Ci0gICAgc2hvcnQgaF9hZGRydHlw ZTsKLSAgICBzdHJ1Y3QgaW5fYWRkciBoX2FkZHI7Ci0gICAgaW50IGhfbGVuZ3RoOwotfTsKLQot c3RydWN0IHNlcnZlbnQgKgotZ2V0c2VydmJ5bmFtZShzZXJ2aWNlLCBjb25uZWN0aW9uKSBjaGFy ICpzZXJ2aWNlLCpjb25uZWN0aW9uOyB7Ci0gICAgc3RhdGljIHN0cnVjdCBzZXJ2ZW50IHNlcnZy ZWM7Ci0gICAgaW50IHBvcnQ7Ci0KLSAgICBwb3J0ID0gMDsKLSAgICBpZiAoc3RyY21wKHNlcnZp Y2UsICJ0ZWxuZXQiKSA9PSAwKSBwb3J0ID0gMjM7Ci0gICAgZWxzZSBpZiAoc3RyY21wKHNlcnZp Y2UsICJzbXRwIikgPT0gMCkgcG9ydCA9IDI1OwotICAgIGVsc2UgcG9ydCA9IGF0b2koc2Vydmlj ZSk7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJnZXRzZXJ2YnluYW1lIHJldHVybiBwb3J0ICIsIiIscG9y dCk7Ci0KLSAgICBpZiAocG9ydCA+IDApIHsKLSAgICAgICAgc2VydnJlYy5zX3BvcnQgPSBodG9u cyhwb3J0KTsKLSAgICAgICAgcmV0dXJuKCZzZXJ2cmVjKTsKLSAgICB9Ci0gICAgcmV0dXJuKChz dHJ1Y3Qgc2VydmVudCAqKSBOVUxMKTsKLX0KLQotc3RydWN0IGhvc3RlbnQgKgotZ2V0aG9zdGJ5 bmFtZShob3N0bmFtZSkgY2hhciAqaG9zdG5hbWU7IHsKLSAgICByZXR1cm4oKHN0cnVjdCBob3N0 ZW50ICopIE5VTEwpOwotfQotCi11bnNpZ25lZCBsb25nCi1pbmV0X2FkZHIobmFtZSkgY2hhciAq bmFtZTsgewotICAgIHVuc2lnbmVkIGxvbmcgYWRkcjsKLQotICAgIGFkZHIgPSByaG9zdCgmbmFt ZSk7Ci0gICAgZGVidWcoRjExMSwiaW5ldF9hZGRyICIsbmFtZSwoaW50KWFkZHIpOwotICAgIHJl dHVybihhZGRyKTsKLX0KLQotY2hhciAqCi1pbmV0X250b2EoaW4pIHN0cnVjdCBpbl9hZGRyIGlu OyB7Ci0gICAgc3RhdGljIGNoYXIgbmFtZVs4MF07Ci0gICAgY2ttYWt4bXNnKG5hbWUsIGNrdWl0 b2EoaW4uc19uZXQpLCIuIixja3VpdG9hKGluLnNfaG9zdCksIi4iLAotICAgICAgICAgICAgICAg Y2t1aXRvYShpbi5zX2xoKSwiLiIsIGNrdWl0b2EoaW4uc19pbXBubykpOwotICAgIHJldHVybihu YW1lKTsKLX0KLSNlbHNlCi0jaWZkZWYgREVDX1RDUElQICAgICAgICAgICAgICAgICAgICAgICAg LyogVUNYICovCi0KLWludCB1Y3hfcG9ydF9idWcgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBF eHBsYWluZWQgYmVsb3cgKi8KLQotI2lmZGVmIE9MRElQCQkJCS8qIFZlcnkgb2xkIFZBWEMgb3Ig R0NDICovCi0vKgotICBOb3RlIHRoYXQgbXkgb2xkZXN0IFZBWCBDIChWMy4xLTA1MSkgZG9lcyBu b3QgbmVlZCAob3Igd2FudCkgT0xESVAsCi0gIGhlbmNlIHRoZSAiVmVyeSBvbGQiIGluIHRoZSBj b21tZW50IC0gU01TLCAyMDEwLzAzLzE1LgotKi8KLSNkZWZpbmUgZ2V0c2VydmJ5bmFtZSBteV9n ZXRzZXJ2YnluYW1lCi0KLSNpZmRlZiBDS19BTlNJQwotZ2xvYmFscmVmIGludCAoKkMkJEdBX1VD WF9HRVRTRVJWQllOQU1FKSgpOwotZXh0ZXJuIHZvaWQgQyQkVFJBTlNMQVRFKCk7Ci1leHRlcm4g dm9pZCBDJCRTT0NLX1RSQU5TTEFURSgpOwotI2Vsc2UKLWdsb2JhbHJlZiBpbnQgKCpDJCRHQV9V Q1hfR0VUU0VSVkJZTkFNRSkoKTsKLWV4dGVybiBWT0lEIEMkJFRSQU5TTEFURSgpOwotZXh0ZXJu IFZPSUQgQyQkU09DS19UUkFOU0xBVEUoKTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotCi1zdHJ1 Y3Qgc2VydmVudCAqCi1teV9nZXRzZXJ2YnluYW1lIChzZXJ2aWNlLCBwcm90bykgY2hhciAqc2Vy dmljZSwgKnByb3RvOyB7Ci0gICAgc3RhdGljIHN0cnVjdCBzZXJ2ZW50IHNlbnQ7Ci0gICAgc3Ry dWN0IGlvc2IgewotICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0 YXR1czsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHN0WzJdOwotICAgICAgICB9IHNiOwot ICAgICAgICB1bnNpZ25lZCBsb25nIHNwYXJlOwotICAgIH0gczsKLSAgICBzdHJ1Y3QgewotICAg ICAgICBzdHJ1Y3QgaW9zYiAqczsKLSAgICAgICAgY2hhciAqc2VydjsKLSAgICAgICAgY2hhciAq cHJvdDsKLSAgICB9IHBhcjsKLSAgICB1bnNpZ25lZCBsb25nIGU7Ci0gICAgY2hhciBzYnVmWzMw XSwgcGJ1ZlszMF07Ci0gICAgY2hhciAqcDsKLQotICAgIGRlYnVnKEYxMTEsIlVDWCBnZXRzZXJ2 YnluYW1lIixzZXJ2aWNlLChpbnQpQyQkR0FfVUNYX0dFVFNFUlZCWU5BTUUpOwotCi0gICAgcCA9 IHNidWY7Ci0gICAgY2tzdHJuY3B5KHAsIHNlcnZpY2UsIDI5KTsKLSAgICB3aGlsZSAoKnAgPSB0 b3VwcGVyKCpwKSwgKnArKykge30KLSAgICBwID0gcGJ1ZjsKLSAgICBja3N0cm5jcHkocCwgcHJv dG8sIDI5KTsKLSAgICB3aGlsZSAoKnAgPSB0b3VwcGVyKCpwKSwgKnArKykge30KLQotICAgIHBh ci5zID0gJnM7Ci0KLSAgICBwYXIuc2VydiA9ICIiOwotICAgIHBhci5wcm90ID0gIiI7Ci0gICAg LyogcmVzZXQgZmlsZSBwb2ludGVyIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQhPyE/ICovCi0gICAg ZSA9ICgqQyQkR0FfVUNYX0dFVFNFUlZCWU5BTUUpKCZwYXIsICZzZW50LCBwYXIucyk7Ci0gICAg cGFyLnNlcnYgPSBzYnVmOwotICAgIHBhci5wcm90ID0gcGJ1ZjsgICAgICAgICAgICAvKiB0aGF0 IGlzIGRvbid0IGNhcmUgKi8KLSAgICBlID0gKCpDJCRHQV9VQ1hfR0VUU0VSVkJZTkFNRSkoJnBh ciwgJnNlbnQsIHBhci5zKTsKLSAgICBpZiAoKGxvbmcpZSA9PSAtMUwpCi0gICAgICByZXR1cm4g TlVMTDsKLSAgICBpZiAoKGUgJiAxKSA9PSAwTCkgewotICAgICAgICBDJCRUUkFOU0xBVEUoZSk7 Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBpZiAoKHMuc2Iuc3RbMF0gJiAxKSA9 PSAwKSB7Ci0gICAgICAgIEMkJFNPQ0tfVFJBTlNMQVRFKCZzLnNiLnN0WzBdKTsKLSAgICAgICAg cmV0dXJuIE5VTEw7Ci0gICAgfQotLyoKLSAgc2VudC5zX3BvcnQgaXMgc3VwcG9zZWQgdG8gYmUg cmV0dXJuZWQgYnkgVUNYIGluIG5ldHdvcmsgYnl0ZSBvcmRlci4KLSAgSG93ZXZlciwgVUNYIDIu MCB0aHJvdWdoIDIuMEMgZGlkIG5vdCBkbyB0aGlzOyAyLjBEIGFuZCBsYXRlciBkbyBpdC4KLSAg QnV0IHRoZXJlIGlzIG5vIHdheSBvZiBrbm93aW5nIHdoaWNoIFVDWCB2ZXJzaW9uLCBzbyB3ZSBo YXZlIGEgdXNlci1zZXR0YWJsZQotICBydW50aW1lIHZhcmlhYmxlLiAgTm90ZTogVUNYIDIuMCB3 YXMgb25seSBmb3IgdGhlIFZBWC4KLSovCi0gICAgZGVidWcoRjEwMSwiVUNYIGdldHNlcnZieW5h bWUgcG9ydCIsIiIsc2VudC5zX3BvcnQpOwotICAgIGRlYnVnKEYxMDEsIlVDWCBnZXRzZXJ2Ynlu YW1lIG50b2hzKHBvcnQpIiwiIixudG9ocyhzZW50LnNfcG9ydCkpOwotICAgIGlmICh1Y3hfcG9y dF9idWcpIHsKLSAgICAgICAgc2VudC5zX3BvcnQgPSBodG9ucyhzZW50LnNfcG9ydCk7Ci0gICAg ICAgIGRlYnVnKEYxMDAsIlVDWC1QT1JULUJVRyBPTjogc3dhcHBpbmcgYnl0ZXMiLCIiLDApOwot ICAgICAgICBkZWJ1ZyhGMTAxLCJVQ1ggc3dhcHBlZCBwb3J0IiwiIixzZW50LnNfcG9ydCk7Ci0g ICAgICAgIGRlYnVnKEYxMDEsIlVDWCBzd2FwcGVkIG50b2hzKHBvcnQpIiwiIixudG9ocyhzZW50 LnNfcG9ydCkpOwotICAgIH0KLSAgICByZXR1cm4gJnNlbnQ7Ci19Ci0jZW5kaWYgLyogZGVmIE9M RElQICovCi0jZW5kaWYgLyogREVDX1RDUElQICovCi0jZW5kaWYgLyogRVhDRUxBTiAqLwotCi1p bnQKLWdldHRjcHBvcnQoKSB7Ci0gICAgcmV0dXJuKHN2Y251bSk7Ci19Ci0KLSNlbmRpZiAvKiBU Q1BTT0NLRVQgKi8KLQotI2lmbmRlZiBOT1RDUE9QVFMKLSNpZm5kZWYgZGF0YWdlbmVyYWwKLWlu dAotY2tfbGluZ2VyKHNvY2ssIG9ub2ZmLCB0aW1vKSBpbnQgc29jazsgaW50IG9ub2ZmOyBpbnQg dGltbzsgewotLyoKLSAgVGhlIGZvbGxvd2luZywgZnJvbSBXaWxsaWFtIEJhZGVyLCB0dXJucyBv ZmYgdGhlIHNvY2tldCBsaW5nZXIgcGFyYW1ldGVyLAotICB3aGljaCBtYWtlcyBhIGNsb3NlKCkg YmxvY2sgdW50aWwgYWxsIGRhdGEgaXMgc2VudC4gICJJIGRvbid0IHRoaW5rIHRoYXQKLSAgZGlz YWJsaW5nIGxpbmdlciBjYW4gZXZlciBjYXVzZSBrZXJtaXQgdG8gbG9zZSBkYXRhLCBidXQgeW91 IHRlbG5ldCB0byBhCi0gIGZsYWt5IHNlcnZlciAob3IgdG8gb3VyIG1vZGVtIHNlcnZlciB3aGVu IHRoZSBtb2RlbSBpcyBpbiB1c2UpLCBkaXNhYmxpbmcKLSAgbGluZ2VyIHByZXZlbnRzIGtlcm1p dCBmcm9tIGhhbmdpbmcgb24gdGhlIGNsb3NlIGlmIHlvdSB0cnkgdG8gZXhpdC4iCi0KLSAgTW9k aWZpZWQgYnkgSmVmZiBBbHRtYW4gdG8gYmUgZ2VuZXJhbGx5IHVzZWZ1bC4KLSovCi0jaWZkZWYg U09MX1NPQ0tFVAotI2lmZGVmIFNPX0xJTkdFUgotICAgIHN0cnVjdCBsaW5nZXIgc2V0X2xpbmdl cl9vcHQ7Ci0gICAgc3RydWN0IGxpbmdlciBnZXRfbGluZ2VyX29wdDsKLSAgICBTT0NLT1BUX1Qg eDsKLQotI2lmZGVmIElLU0QKLSAgICBpZiAoIWluc2VydmVyKQotI2VuZGlmIC8qIElLU0QgKi8K LSAgICAgIGlmIChzb2NrID09IC0xIHx8Ci0gICAgICAgIG5ldHR5cGUgIT0gTkVUX1RDUEEgJiYg bmV0dHlwZSAhPSBORVRfVENQQiAmJgotICAgICAgICBuZXR0eXBlICE9IE5FVF9TU0ggfHwgdHRt ZG0gPj0gMCkgewotICAgICAgICB0Y3BfbGluZ2VyID0gb25vZmY7Ci0gICAgICAgIHRjcF9saW5n ZXJfdG1vID0gdGltbzsKLSAgICAgICAgcmV0dXJuKDEpOwotICAgIH0KLSAgICB4ID0gc2l6ZW9m KGdldF9saW5nZXJfb3B0KTsKLSAgICBpZiAoZ2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBT T19MSU5HRVIsCi0gICAgICAgICAgICAgICAgICAgIChjaGFyICopJmdldF9saW5nZXJfb3B0LCAm eCkpIHsKLSAgICAgICAgZGVidWcoRjExMSwiVENQIGNrX2xpbmdlciBjYW4ndCBnZXQgU09fTElO R0VSIixja19lcnJzdHIoKSxlcnJubyk7Ci0gICAgfSBlbHNlIGlmICh4ICE9IHNpemVvZihnZXRf bGluZ2VyX29wdCkpIHsKLSNpZmRlZiBPUzIKLSAgICAgICAgc3RydWN0IF9saW5nZXIxNiB7Ci0g ICAgICAgICAgICBzaG9ydCBzX2xpbmdlcjsKLSAgICAgICAgICAgIHNob3J0IHNfb25vZmY7Ci0g ICAgICAgIH0gZ2V0X2xpbmdlcl9vcHQxNiwgc2V0X2xpbmdlcl9vcHQxNjsKLSAgICAgICAgaWYg KCB4ID09IHNpemVvZihnZXRfbGluZ2VyX29wdDE2KSApIHsKLSAgICAgICAgICAgIGRlYnVnKEYx MTEsIlRDUCBzZXRsaW5nZXIgd2FybmluZzogU09fTElOR0VSIiwibGVuIGlzIDE2LWJpdCIseCk7 Ci0gICAgICAgICAgICBpZiAoZ2V0c29ja29wdChzb2NrLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgU09MX1NPQ0tFVCwgU09fTElOR0VSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg KGNoYXIgKikmZ2V0X2xpbmdlcl9vcHQxNiwgJngpCi0gICAgICAgICAgICAgICAgKSB7Ci0gICAg ICAgICAgICAgICAgZGVidWcoRjExMSwKLSAgICAgICAgICAgICAgICAgICAgICAiVENQIGNrX2xp bmdlciBjYW4ndCBnZXQgU09fTElOR0VSIixja19lcnJzdHIoKSxlcnJubyk7Ci0gICAgICAgICAg ICB9IGVsc2UgaWYgKGdldF9saW5nZXJfb3B0MTYuc19vbm9mZiAhPSBvbm9mZiB8fAotICAgICAg ICAgICAgICAgICAgICAgICBnZXRfbGluZ2VyX29wdDE2LnNfbGluZ2VyICE9IHRpbW8pCi0gICAg ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc2V0X2xpbmdlcl9vcHQxNi5zX29ub2ZmICA9IG9u b2ZmOwotICAgICAgICAgICAgICAgIHNldF9saW5nZXJfb3B0MTYuc19saW5nZXIgPSB0aW1vOwot ICAgICAgICAgICAgICAgIGlmIChzZXRzb2Nrb3B0KHNvY2ssCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgU09MX1NPQ0tFVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT T19MSU5HRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikmc2V0X2xp bmdlcl9vcHQxNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc2V0X2xp bmdlcl9vcHQxNikpCi0gICAgICAgICAgICAgICAgICAgICkgewotICAgICAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTExLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiVENQIGNrX2xpbmdlciBj YW4ndCBzZXQgU09fTElOR0VSIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2tfZXJyc3Ry KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgIHRjcF9saW5nZXIgPSBnZXRfbGluZ2VyX29w dDE2LnNfb25vZmY7Ci0gICAgICAgICAgICAgICAgICAgIHRjcF9saW5nZXJfdG1vID0gZ2V0X2xp bmdlcl9vcHQxNi5zX2xpbmdlcjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiVENQIGNr X2xpbmdlciBuZXcgU09fTElOR0VSIiwiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0 X2xpbmdlcl9vcHQxNi5zX29ub2ZmKTsKLSAgICAgICAgICAgICAgICAgICAgdGNwX2xpbmdlciA9 IHNldF9saW5nZXJfb3B0MTYuc19vbm9mZjsKLSAgICAgICAgICAgICAgICAgICAgdGNwX2xpbmdl cl90bW8gPSBzZXRfbGluZ2VyX29wdDE2LnNfbGluZ2VyOwotICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg ICAgICAgICAgIGRlYnVnKEYxMDEsIlRDUCBja19saW5nZXIgU09fTElOR0VSIHVuY2hhbmdlZCIs IiIsCi0gICAgICAgICAgICAgICAgICAgICAgIGdldF9saW5nZXJfb3B0MTYuc19vbm9mZik7Ci0g ICAgICAgICAgICAgICAgdGNwX2xpbmdlciA9IGdldF9saW5nZXJfb3B0MTYuc19vbm9mZjsKLSAg ICAgICAgICAgICAgICB0Y3BfbGluZ2VyX3RtbyA9IGdldF9saW5nZXJfb3B0MTYuc19saW5nZXI7 Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBy ZXR1cm4oMCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgZGVidWcoRjEx MSwiVENQIGNrX2xpbmdlciBlcnJvcjogU09fTElOR0VSIiwibGVuIix4KTsKLSAgICAgICAgZGVi dWcoRjExMSwiVENQIGNrX2xpbmdlciBTT19MSU5HRVIiLAotICAgICAgICAgICAgICAiZXhwZWN0 ZWQgbGVuIixzaXplb2YoZ2V0X2xpbmdlcl9vcHQpKTsKLSAgICAgICAgZGVidWcoRjExMSwiVENQ IGNrX2xpbmdlciBTT19MSU5HRVIiLCJsaW5nZXJfb3B0Lmxfb25vZmYiLAotICAgICAgICAgICAg ICBnZXRfbGluZ2VyX29wdC5sX29ub2ZmKTsKLSAgICAgICAgZGVidWcoRjExMSwiVENQIGxpbmdl ciBTT19MSU5HRVIiLCJsaW5nZXJfb3B0LmxfbGluZ2VyIiwKLSAgICAgICAgICAgICAgIGdldF9s aW5nZXJfb3B0LmxfbGluZ2VyKTsKLSAgICB9IGVsc2UgaWYgKGdldF9saW5nZXJfb3B0Lmxfb25v ZmYgIT0gb25vZmYgfHwKLSAgICAgICAgICAgICAgIGdldF9saW5nZXJfb3B0LmxfbGluZ2VyICE9 IHRpbW8pIHsKLSAgICAgICAgc2V0X2xpbmdlcl9vcHQubF9vbm9mZiAgPSBvbm9mZjsKLSAgICAg ICAgc2V0X2xpbmdlcl9vcHQubF9saW5nZXIgPSB0aW1vOwotICAgICAgICBpZiAoc2V0c29ja29w dChzb2NrLAotICAgICAgICAgICAgICAgICAgICAgICBTT0xfU09DS0VULAotICAgICAgICAgICAg ICAgICAgICAgICBTT19MSU5HRVIsCi0gICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopJnNl dF9saW5nZXJfb3B0LAotICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc2V0X2xpbmdlcl9v cHQpKSkgewotICAgICAgICAgICAgZGVidWcoRjExMSwiVENQIGNrX2xpbmdlciBjYW4ndCBzZXQg U09fTElOR0VSIixja19lcnJzdHIoKSxlcnJubyk7Ci0gICAgICAgICAgICB0Y3BfbGluZ2VyID0g Z2V0X2xpbmdlcl9vcHQubF9vbm9mZjsKLSAgICAgICAgICAgIHRjcF9saW5nZXJfdG1vID0gZ2V0 X2xpbmdlcl9vcHQubF9saW5nZXI7Ci0gICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgIGRl YnVnKEYxMDEsCi0gICAgICAgICAgICAgICAgICAgIlRDUCBja19saW5nZXIgbmV3IFNPX0xJTkdF UiIsCi0gICAgICAgICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICAgICAgICAgc2V0X2xpbmdl cl9vcHQubF9vbm9mZgotICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgdGNwX2xp bmdlciA9IHNldF9saW5nZXJfb3B0Lmxfb25vZmY7Ci0gICAgICAgICAgICAgdGNwX2xpbmdlcl90 bW8gPSBzZXRfbGluZ2VyX29wdC5sX2xpbmdlcjsKLSAgICAgICAgICAgICByZXR1cm4gMTsKLSAg ICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBkZWJ1ZyhGMTAxLCJUQ1AgY2tfbGluZ2Vy IFNPX0xJTkdFUiB1bmNoYW5nZWQiLCIiLAotICAgICAgICAgICAgICBnZXRfbGluZ2VyX29wdC5s X29ub2ZmKTsKLSAgICAgICAgdGNwX2xpbmdlciA9IGdldF9saW5nZXJfb3B0Lmxfb25vZmY7Ci0g ICAgICAgIHRjcF9saW5nZXJfdG1vID0gZ2V0X2xpbmdlcl9vcHQubF9saW5nZXI7Ci0gICAgICAg IHJldHVybiAxOwotICAgIH0KLSNlbHNlCi0gICAgZGVidWcoRjEwMCwiVENQIGNrX2xpbmdlciBT T19MSU5HRVIgbm90IGRlZmluZWQiLCIiLDApOwotI2VuZGlmIC8qIFNPX0xJTkdFUiAqLwotI2Vs c2UKLSAgICBkZWJ1ZyhGMTAwLCJUQ1AgY2tfbGluZ2VyIFNPX1NPQ0tFVCBub3QgZGVmaW5lZCIs IiIsMCk7Ci0jZW5kaWYgLyogU09MX1NPQ0tFVCAqLwotICAgIHJldHVybigwKTsKLX0KLQotaW50 Ci1zZW5kYnVmKHNvY2ssc2l6ZSkgaW50IHNvY2s7IGludCBzaXplOyB7Ci0vKgotICBUaGUgZm9s bG93aW5nLCBmcm9tIFdpbGxpYW0gQmFkZXIsIGFsbG93cyBjaGFuZ2luZyBvZiBzb2NrZXQgYnVm ZmVyIHNpemVzLAotICBpbiBjYXNlIHRoYXQgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlLgotCi0g IE1vZGlmaWVkIGJ5IEplZmYgQWx0bWFuIHRvIGJlIGdlbmVyYWxseSB1c2VmdWwuCi0qLwotI2lm ZGVmIFNPTF9TT0NLRVQKLSNpZmRlZiBTT19TTkRCVUYKLSAgICBpbnQgaSwgajsKLSAgICBTT0NL T1BUX1QgeDsKLQotI2lmZGVmIElLU0QKLSAgICBpZiAoIWluc2VydmVyKQotI2VuZGlmIC8qIElL U0QgKi8KLSAgICAgIGlmIChzb2NrID09IC0xIHx8Ci0gICAgICAgIG5ldHR5cGUgIT0gTkVUX1RD UEEgJiYgbmV0dHlwZSAhPSBORVRfVENQQiAmJiBuZXR0eXBlICE9IE5FVF9TU0gKLSAgICAgICAg ICAgICAgICB8fCB0dG1kbSA+PSAwKSB7Ci0gICAgICAgIHRjcF9zZW5kYnVmID0gc2l6ZTsKLSAg ICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIHggPSBzaXplb2YoaSk7Ci0gICAgaWYgKGdldHNv Y2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fU05EQlVGLCAoY2hhciAqKSZpLCAmeCkpIHsKLSAg ICAgICAgZGVidWcoRjExMSwiVENQIHNlbmRidWYgY2FuJ3QgZ2V0IFNPX1NOREJVRiIsY2tfZXJy c3RyKCksZXJybm8pOwotICAgIH0gZWxzZSBpZiAoeCAhPSBzaXplb2YoaSkpIHsKLSNpZmRlZiBP UzIKLSAgICAgICAgc2hvcnQgaTE2LGoxNjsKLSAgICAgICAgaWYgKHggPT0gc2l6ZW9mKGkxNikp IHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsIlRDUCBzZW5kYnVmIHdhcm5pbmc6IFNPX1NOREJV RiIsImxlbiBpcyAxNi1iaXQiLHgpOwotICAgICAgICAgICAgaWYgKGdldHNvY2tvcHQoc29jaywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopJmkxNiwgJngpCi0gICAgICAgICAgICAgICAg KSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwiVENQIHNlbmRidWYgY2FuJ3QgZ2V0IFNP X1NOREJVRiIsCi0gICAgICAgICAgICAgICAgICAgICAgY2tfZXJyc3RyKCksZXJybm8pOwotICAg ICAgICAgICAgfSBlbHNlIGlmIChzaXplIDw9IDApIHsKLSAgICAgICAgICAgICAgICB0Y3Bfc2Vu ZGJ1ZiA9IGkxNjsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJUQ1Agc2VuZGJ1ZiBTT19T TkRCVUYgcmV0cmlldmVkIiwiIixpMTYpOwotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAg ICAgICAgICAgfSBlbHNlIGlmIChpMTYgIT0gc2l6ZSkgewotICAgICAgICAgICAgICAgIGoxNiA9 IHNpemU7Ci0gICAgICAgICAgICAgICAgaWYgKHNldHNvY2tvcHQoc29jaywKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBTT0xfU09DS0VULAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFNPX1NOREJVRiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAq KSZqMTYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGoxNikpCi0gICAg ICAgICAgICAgICAgICAgICkgewotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJUQ1Ag c2VuZGJ1ZiBjYW4ndCBzZXQgU09fU05EQlVGIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg Y2tfZXJyc3RyKCksZXJybm8pOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICAgICAgICAgIGRlYnVnKEYxMDEsIlRDUCBzZW5kYnVmIG9sZCBTT19TTkRCVUYiLCIiLGkxNik7 Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsIlRDUCBzZW5kYnVmIG5ldyBTT19TTkRC VUYiLCIiLGoxNik7Ci0gICAgICAgICAgICAgICAgICAgIHRjcF9zZW5kYnVmID0gc2l6ZTsKLSAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJUQ1Agc2VuZGJ1ZiBTT19T TkRCVUYgdW5jaGFuZ2VkIiwiIixpMTYpOwotICAgICAgICAgICAgICAgIHRjcF9zZW5kYnVmID0g c2l6ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIHJldHVybigwKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICBkZWJ1 ZyhGMTExLCJUQ1Agc2VuZGJ1ZiBlcnJvcjogU09fU05EQlVGIiwibGVuIix4KTsKLSAgICAgICAg ZGVidWcoRjExMSwiVENQIHNlbmRidWYgU09fU05EQlVGIiwiZXhwZWN0ZWQgbGVuIixzaXplb2Yo aSkpOwotICAgICAgICBkZWJ1ZyhGMTExLCJUQ1Agc2VuZGJ1ZiBTT19TTkRCVUYiLCJpIixpKTsK LSAgICB9IGVsc2UgaWYgKHNpemUgPD0gMCkgewotICAgICAgICB0Y3Bfc2VuZGJ1ZiA9IGk7Ci0g ICAgICAgIGRlYnVnKEYxMDEsIlRDUCBzZW5kYnVmIFNPX1NOREJVRiByZXRyaWV2ZWQiLCIiLGkp OwotICAgICAgICByZXR1cm4gMTsKLSAgICB9IGVsc2UgaWYgKGkgIT0gc2l6ZSkgewotICAgICAg ICBqID0gc2l6ZTsKLSAgICAgICAgaWYgKHNldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09f U05EQlVGLCAoY2hhciAqKSZqLCBzaXplb2YoaikpKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEx LCJUQ1Agc2VuZGJ1ZiBjYW4ndCBzZXQgU09fU05EQlVGIixja19lcnJzdHIoKSxlcnJubyk7Ci0g ICAgICAgICAgICB0Y3Bfc2VuZGJ1ZiA9IGk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICBkZWJ1ZyhGMTAxLCJUQ1Agc2VuZGJ1ZiBvbGQgU09fU05EQlVGIiwiIixpKTsKLSAgICAgICAg ICAgIGRlYnVnKEYxMDEsIlRDUCBzZW5kYnVmIG5ldyBTT19TTkRCVUYiLCIiLGopOwotICAgICAg ICAgICAgdGNwX3NlbmRidWYgPSBzaXplOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAg IH0KLSAgICB9IGVsc2UgewotICAgICAgICBkZWJ1ZyhGMTAxLCJUQ1Agc2VuZGJ1ZiBTT19TTkRC VUYgdW5jaGFuZ2VkIiwiIixpKTsKLSAgICAgICAgdGNwX3NlbmRidWYgPSBzaXplOwotICAgICAg ICByZXR1cm4gMTsKLSAgICB9Ci0jZWxzZQotICAgIGRlYnVnKEYxMDAsIlRDUCBzZW5kYnVmIFNP X1NOREJVRiBub3QgZGVmaW5lZCIsIiIsMCk7Ci0jZW5kaWYgLyogU09fU05EQlVGICovCi0jZWxz ZQotICAgIGRlYnVnKEYxMDAsIlRDUCBzZW5kYnVmIFNPX1NPQ0tFVCBub3QgZGVmaW5lZCIsIiIs MCk7Ci0jZW5kaWYgLyogU09MX1NPQ0tFVCAqLwotICAgIHJldHVybigwKTsKLX0KLQotaW50Ci1y ZWN2YnVmKHNvY2ssc2l6ZSkgaW50IHNvY2s7IGludCBzaXplOyB7Ci0vKgotICBUaGUgZm9sbG93 aW5nLCBmcm9tIFdpbGxpYW0gQmFkZXIsIGFsbG93cyBjaGFuZ2luZyBvZiBzb2NrZXQgYnVmZmVy IHNpemVzLAotICBpbiBjYXNlIHRoYXQgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlLgotCi0gIE1v ZGlmaWVkIGJ5IEplZmYgQWx0bWFuIHRvIGJlIGdlbmVyYWxseSB1c2VmdWwuCi0qLwotI2lmZGVm IFNPTF9TT0NLRVQKLSNpZmRlZiBTT19SQ1ZCVUYKLSAgICBpbnQgaSwgajsKLSAgICBTT0NLT1BU X1QgeDsKLQotI2lmZGVmIElLU0QKLSAgICBpZiAoIWluc2VydmVyKQotI2VuZGlmIC8qIElLU0Qg Ki8KLSAgICAgIGlmIChzb2NrID09IC0xIHx8Ci0JICBuZXR0eXBlICE9IE5FVF9UQ1BBICYmIG5l dHR5cGUgIT0gTkVUX1RDUEIgJiYKLQkgIG5ldHR5cGUgIT0gTkVUX1NTSCB8fCB0dG1kbSA+PSAw KSB7Ci0gICAgICAgIHRjcF9yZWN2YnVmID0gc2l6ZTsKLSAgICAgICAgcmV0dXJuKDEpOwotICAg IH0KLSAgICB4ID0gc2l6ZW9mKGkpOwotICAgIGlmIChnZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NL RVQsIFNPX1JDVkJVRiwgKGNoYXIgKikmaSwgJngpKSB7Ci0gICAgICAgIGRlYnVnKEYxMTEsIlRD UCByZWN2YnVmIGNhbid0IGdldCBTT19SQ1ZCVUYiLGNrX2VycnN0cigpLGVycm5vKTsKLSAgICB9 IGVsc2UgaWYgKHggIT0gc2l6ZW9mKGkpKSB7Ci0jaWZkZWYgT1MyCi0gICAgICAgIHNob3J0IGkx NixqMTY7Ci0gICAgICAgIGlmICggeCA9PSBzaXplb2YoaTE2KSApIHsKLSAgICAgICAgICAgIGRl YnVnKEYxMTEsIlRDUCByZWN2YnVmIHdhcm5pbmc6IFNPX1JDVkJVRiIsImxlbiBpcyAxNi1iaXQi LHgpOwotICAgICAgICAgICAgaWYgKGdldHNvY2tvcHQoc29jaywKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgIChjaGFyICopJmkxNiwgJngpCi0gICAgICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAg ICAgZGVidWcoRjExMSwiVENQIHJlY3ZidWYgY2FuJ3QgZ2V0IFNPX1JDVkJVRiIsCi0gICAgICAg ICAgICAgICAgICAgICAgY2tfZXJyc3RyKCksZXJybm8pOwotICAgICAgICAgICAgfSBlbHNlIGlm IChzaXplIDw9IDApIHsKLSAgICAgICAgICAgICAgICB0Y3BfcmVjdmJ1ZiA9IGkxNjsKLSAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTAxLCJUQ1AgcmVjdmJ1ZiBTT19SQ1ZCVUYgcmV0cmlldmVkIiwi IixpMTYpOwotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgfSBlbHNlIGlm IChpMTYgIT0gc2l6ZSkgewotICAgICAgICAgICAgICAgIGoxNiA9IHNpemU7Ci0gICAgICAgICAg ICAgICAgaWYgKHNldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCAoY2hhciAq KSZqMTYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGoxNikpKSB7Ci0g ICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsIlRDUCByZWN2YnVmIGNhbicgc2V0IFNPX1JD VkJVRiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNrX2VycnN0cigpLGVycm5vKTsKLSAg ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJU Q1AgcmVjdmJ1ZiBvbGQgU09fUkNWQlVGIiwiIixpMTYpOwotICAgICAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTAxLCJUQ1AgcmVjdmJ1ZiBuZXcgU09fUkNWQlVGIiwiIixqMTYpOwotICAgICAgICAg ICAgICAgICAgICB0Y3BfcmVjdmJ1ZiA9IHNpemU7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy biAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICAgICAgZGVidWcoRjEwMSwiVENQIHJlY3ZidWYgU09fUkNWQlVGIHVuY2hhbmdlZCIsIiIsaTE2 KTsKLSAgICAgICAgICAgICAgICB0Y3BfcmVjdmJ1ZiA9IHNpemU7Ci0gICAgICAgICAgICAgICAg cmV0dXJuIDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAg IH0KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgZGVidWcoRjExMSwiVENQIHJlY3ZidWYgZXJy b3I6IFNPX1JDVkJVRiIsImxlbiIseCk7Ci0gICAgICAgIGRlYnVnKEYxMTEsIlRDUCByZWN2YnVm IFNPX1JDVkJVRiIsImV4cGVjdGVkIGxlbiIsc2l6ZW9mKGkpKTsKLSAgICAgICAgZGVidWcoRjEx MSwiVENQIHJlY3ZidWYgU09fUkNWQlVGIiwiaSIsaSk7Ci0gICAgfSBlbHNlIGlmIChzaXplIDw9 IDApIHsKLSAgICAgICAgdGNwX3JlY3ZidWYgPSBpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJUQ1Ag cmVjdmJ1ZiBTT19SQ1ZCVUYgcmV0cmlldmVkIiwiIixpKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0g ICAgfSBlbHNlIGlmIChpICE9IHNpemUpIHsKLSAgICAgICAgaiA9IHNpemU7Ci0gICAgICAgIGlm IChzZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwgKGNoYXIgKikmaiwgc2l6 ZW9mKGopKSkgewotICAgICAgICAgICAgZGVidWcoRjExMSwiVENQIHJlY3ZidWYgY2FuJ3Qgc2V0 IFNPX1JDVkJVRiIsY2tfZXJyc3RyKCksZXJybm8pOwotICAgICAgICAgICAgdGNwX3JlY3ZidWYg PSBpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVidWcoRjEwMSwiVENQIHJlY3Zi dWYgb2xkIFNPX1JDVkJVRiIsIiIsaSk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJUQ1AgcmVj dmJ1ZiBuZXcgU09fUkNWQlVGIiwiIixqKTsKLSAgICAgICAgICAgIHRjcF9yZWN2YnVmID0gc2l6 ZTsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAg ICAgZGVidWcoRjEwMSwiVENQIHJlY3ZidWYgU09fUkNWQlVGIHVuY2hhbmdlZCIsIiIsaSk7Ci0g ICAgICAgIHRjcF9yZWN2YnVmID0gc2l6ZTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotI2Vs c2UKLSAgICBkZWJ1ZyhGMTAwLCJUQ1AgcmVjdmJ1ZiBTT19SQ1ZCVUYgbm90IGRlZmluZWQiLCIi LDApOwotI2VuZGlmIC8qIFNPX1JDVkJVRiAqLwotI2Vsc2UKLSAgICBkZWJ1ZyhGMTAwLCJUQ1Ag cmVjdmJ1ZiBTT19TT0NLRVQgbm90IGRlZmluZWQiLCIiLDApOwotI2VuZGlmIC8qIFNPTF9TT0NL RVQgKi8KLSAgICByZXR1cm4gMDsKLX0KLQotaW50Ci1rZWVwYWxpdmUoc29jayxvbm9mZikgaW50 IHNvY2s7IGludCBvbm9mZjsgewotI2lmZGVmIFNPTF9TT0NLRVQKLSNpZmRlZiBTT19LRUVQQUxJ VkUKLSAgICBpbnQgZ2V0X2tlZXBhbGl2ZV9vcHQ7Ci0gICAgaW50IHNldF9rZWVwYWxpdmVfb3B0 OwotICAgIFNPQ0tPUFRfVCB4OwotCi0gICAgZGVidWcoRjExMSwiVENQIGtlZXBhbGl2ZSIsInNv Y2siLHNvY2spOwotICAgIGRlYnVnKEYxMTEsIlRDUCBrZWVwYWxpdmUiLCJuZXR0eXBlIixuZXR0 eXBlKTsKLSAgICBkZWJ1ZyhGMTExLCJUQ1Aga2VlcGFsaXZlIiwidHRtZG0iLHR0bWRtKTsKLQot I2lmZGVmIElLU0QKLSAgICBpZiAoIWluc2VydmVyKQotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAg IGlmIChzb2NrID09IC0xIHx8Ci0gICAgICAgIG5ldHR5cGUgIT0gTkVUX1RDUEEgJiYgbmV0dHlw ZSAhPSBORVRfVENQQiAmJiBuZXR0eXBlICE9IE5FVF9TU0gKLSAgICAgICAgICAgICAgICB8fCB0 dG1kbSA+PSAwKSB7Ci0gICAgICAgIHRjcF9rZWVwYWxpdmUgPSBvbm9mZjsKLSAgICAgICAgcmV0 dXJuIDE7Ci0gICAgfQotICAgIHggPSBzaXplb2YoZ2V0X2tlZXBhbGl2ZV9vcHQpOwotICAgIGlm IChnZXRzb2Nrb3B0KHNvY2ssCi0gICAgICAgICAgICAgICAgICAgU09MX1NPQ0tFVCwgU09fS0VF UEFMSVZFLCAoY2hhciAqKSZnZXRfa2VlcGFsaXZlX29wdCwgJngpKSB7Ci0gICAgICAgIGRlYnVn KEYxMTEsIlRDUCBrZWVwYWxpdmUgY2FuJ3QgZ2V0IFNPX0tFRVBBTElWRSIsY2tfZXJyc3RyKCks ZXJybm8pOwotICAgIH0gZWxzZSBpZiAoeCAhPSBzaXplb2YoZ2V0X2tlZXBhbGl2ZV9vcHQpKSB7 Ci0jaWZkZWYgT1MyCi0gICAgICAgIHNob3J0IGdldF9rZWVwYWxpdmVfb3B0MTY7Ci0gICAgICAg IHNob3J0IHNldF9rZWVwYWxpdmVfb3B0MTY7Ci0gICAgICAgIGlmICh4ID09IHNpemVvZihnZXRf a2VlcGFsaXZlX29wdDE2KSkgewotICAgICAgICAgICAgZGVidWcoRjExMSwiVENQIGtlZXBhbGl2 ZSB3YXJuaW5nOiBTT19LRUVQQUxJVkUiLAotICAgICAgICAgICAgICAgICAgImxlbiBpcyAxNi1i aXQiLHgpOwotICAgICAgICAgICAgaWYgKGdldHNvY2tvcHQoc29jaywKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgIFNPTF9TT0NLRVQsIFNPX0tFRVBBTElWRSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgIChjaGFyICopJmdldF9rZWVwYWxpdmVfb3B0MTYsICZ4KQotICAgICAgICAgICAg ICAgICkgewotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsCi0gICAgICAgICAgICAgICAgICAg ICAgIlRDUCBrZWVwYWxpdmUgY2FuJ3QgZ2V0IFNPX0tFRVBBTElWRSIsCi0gICAgICAgICAgICAg ICAgICAgICAgY2tfZXJyc3RyKCksCi0gICAgICAgICAgICAgICAgICAgICAgZXJybm8KLSAgICAg ICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgfSBlbHNlIGlmIChnZXRfa2VlcGFsaXZl X29wdDE2ICE9IG9ub2ZmKSB7Ci0gICAgICAgICAgICAgICAgc2V0X2tlZXBhbGl2ZV9vcHQxNiA9 IG9ub2ZmOwotICAgICAgICAgICAgICAgIGlmIChzZXRzb2Nrb3B0KHNvY2ssCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgU09MX1NPQ0tFVCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBTT19LRUVQQUxJVkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNo YXIgKikmc2V0X2tlZXBhbGl2ZV9vcHQxNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplb2Yoc2V0X2tlZXBhbGl2ZV9vcHQxNikpCi0gICAgICAgICAgICAgICAgICAgICkgewot ICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAiVENQIGtlZXBhbGl2ZSBjYW4ndCBjbGVhciBTT19LRUVQQUxJVkUiLAotICAgICAgICAgICAg ICAgICAgICAgICAgICBja19lcnJzdHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZXJy bm8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgdGNw X2tlZXBhbGl2ZSA9IGdldF9rZWVwYWxpdmVfb3B0MTY7Ci0gICAgICAgICAgICAgICAgfSBlbHNl IHsKLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIlRDUCBrZWVwYWxpdmUgbmV3IFNPX0tFRVBBTElWRSIsIiIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgIHNldF9rZWVwYWxpdmVfb3B0MTYpOwotICAgICAgICAgICAgICAgICAgICB0 Y3Bfa2VlcGFsaXZlID0gc2V0X2tlZXBhbGl2ZV9vcHQxNjsKLSAgICAgICAgICAgICAgICAgICAg cmV0dXJuIDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTAxLCJUQ1Aga2VlcGFsaXZlIFNPX0tFRVBBTElWRSB1bmNoYW5n ZWQiLCIiLAotICAgICAgICAgICAgICAgICAgICAgIGdldF9rZWVwYWxpdmVfb3B0MTYpOwotICAg ICAgICAgICAgICAgIHRjcF9rZWVwYWxpdmUgPSBvbm9mZjsKLSAgICAgICAgICAgICAgICByZXR1 cm4gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgfQot I2VuZGlmIC8qIE9TMiAqLwotICAgICAgICBkZWJ1ZyhGMTExLCJUQ1Aga2VlcGFsaXZlIGVycm9y OiBTT19LRUVQQUxJVkUiLCJsZW4iLHgpOwotICAgICAgICBkZWJ1ZyhGMTExLAotICAgICAgICAg ICAgICAiVENQIGtlZXBhbGl2ZSBTT19LRUVQQUxJVkUiLAotICAgICAgICAgICAgICAiZXhwZWN0 ZWQgbGVuIiwKLSAgICAgICAgICAgICAgc2l6ZW9mKGdldF9rZWVwYWxpdmVfb3B0KQotICAgICAg ICAgICAgICApOwotICAgICAgICBkZWJ1ZyhGMTExLAotICAgICAgICAgICAgICAiVENQIGtlZXBh bGl2ZSBTT19LRUVQQUxJVkUiLAotICAgICAgICAgICAgICAia2VlcGFsaXZlX29wdCIsCi0gICAg ICAgICAgICAgIGdldF9rZWVwYWxpdmVfb3B0Ci0gICAgICAgICAgICAgICk7Ci0gICAgfSBlbHNl IGlmIChnZXRfa2VlcGFsaXZlX29wdCAhPSBvbm9mZikgewotICAgICAgICAgICAgc2V0X2tlZXBh bGl2ZV9vcHQgPSBvbm9mZjsKLSAgICAgICAgICAgIGlmIChzZXRzb2Nrb3B0KHNvY2ssCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgU09MX1NPQ0tFVCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBTT19LRUVQQUxJVkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIg Kikmc2V0X2tlZXBhbGl2ZV9vcHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9m KHNldF9rZWVwYWxpdmVfb3B0KSkKLSAgICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTExLAotICAgICAgICAgICAgICAgICAgICAgICJUQ1Aga2VlcGFsaXZlIGNhbid0 IGNsZWFyIFNPX0tFRVBBTElWRSIsCi0gICAgICAgICAgICAgICAgICAgICAgY2tfZXJyc3RyKCks Ci0gICAgICAgICAgICAgICAgICAgICAgZXJybm8KLSAgICAgICAgICAgICAgICAgICAgICApOwot ICAgICAgICAgICAgICAgIHRjcF9rZWVwYWxpdmUgPSBnZXRfa2VlcGFsaXZlX29wdDsKLSAgICAg ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwKLSAgICAgICAgICAg ICAgICAgICAgICAiVENQIGtlZXBhbGl2ZSBuZXcgU09fS0VFUEFMSVZFIiwKLSAgICAgICAgICAg ICAgICAgICAgICAiIiwKLSAgICAgICAgICAgICAgICAgICAgICBzZXRfa2VlcGFsaXZlX29wdAot ICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgdGNwX2tlZXBhbGl2ZSA9 IG9ub2ZmOwotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgfQotICAgICAg ICB9IGVsc2UgewotICAgICAgICAgICAgZGVidWcoRjEwMSwiVENQIGtlZXBhbGl2ZSBTT19LRUVQ QUxJVkUgdW5jaGFuZ2VkIiwKLSAgICAgICAgICAgICAgICAgICIiLAotICAgICAgICAgICAgICAg ICAgZ2V0X2tlZXBhbGl2ZV9vcHQKLSAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICB0 Y3Bfa2VlcGFsaXZlID0gb25vZmY7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0jZWxz ZQotICAgIGRlYnVnKEYxMDAsIlRDUCBrZWVwYWxpdmUgU09fS0VFUEFMSVZFIG5vdCBkZWZpbmVk IiwiIiwwKTsKLSNlbmRpZiAvKiBTT19LRUVQQUxJVkUgKi8KLSNlbHNlCi0gICAgZGVidWcoRjEw MCwiVENQIGtlZXBhbGl2ZSBTT19TT0NLRVQgbm90IGRlZmluZWQiLCIiLDApOwotI2VuZGlmIC8q IFNPTF9TT0NLRVQgKi8KLSAgICByZXR1cm4oMCk7Ci19Ci0KLWludAotZG9udHJvdXRlKHNvY2ss b25vZmYpIGludCBzb2NrOyBpbnQgb25vZmY7IHsKLSNpZmRlZiBTT0xfU09DS0VUCi0jaWZkZWYg U09fRE9OVFJPVVRFCi0gICAgaW50IGdldF9kb250cm91dGVfb3B0OwotICAgIGludCBzZXRfZG9u dHJvdXRlX29wdDsKLSAgICBTT0NLT1BUX1QgeDsKLQotI2lmZGVmIElLU0QKLSAgICBpZiAoIWlu c2VydmVyKQotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgIGlmIChzb2NrID09IC0xIHx8Ci0gICAg ICAgIG5ldHR5cGUgIT0gTkVUX1RDUEEgJiYgbmV0dHlwZSAhPSBORVRfVENQQiAmJiBuZXR0eXBl ICE9IE5FVF9TU0gKLSAgICAgICAgICAgICAgICB8fCB0dG1kbSA+PSAwKSB7Ci0gICAgICAgIHRj cF9kb250cm91dGUgPSBvbm9mZjsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIHggPSBz aXplb2YoZ2V0X2RvbnRyb3V0ZV9vcHQpOwotICAgIGlmIChnZXRzb2Nrb3B0KHNvY2ssCi0gICAg ICAgICAgICAgICAgICAgU09MX1NPQ0tFVCwgU09fRE9OVFJPVVRFLCAoY2hhciAqKSZnZXRfZG9u dHJvdXRlX29wdCwgJngpKSB7Ci0gICAgICAgIGRlYnVnKEYxMTEsIlRDUCBkb250cm91dGUgY2Fu J3QgZ2V0IFNPX0RPTlRST1VURSIsY2tfZXJyc3RyKCksZXJybm8pOwotICAgIH0gZWxzZSBpZiAo eCAhPSBzaXplb2YoZ2V0X2RvbnRyb3V0ZV9vcHQpKSB7Ci0jaWZkZWYgT1MyCi0gICAgICAgIHNo b3J0IGdldF9kb250cm91dGVfb3B0MTY7Ci0gICAgICAgIHNob3J0IHNldF9kb250cm91dGVfb3B0 MTY7Ci0gICAgICAgIGlmICh4ID09IHNpemVvZihnZXRfZG9udHJvdXRlX29wdDE2KSkgewotICAg ICAgICAgICAgZGVidWcoRjExMSwiVENQIGRvbnRyb3V0ZSB3YXJuaW5nOiBTT19ET05UUk9VVEUi LAotICAgICAgICAgICAgICAgICAgImxlbiBpcyAxNi1iaXQiLHgpOwotICAgICAgICAgICAgaWYg KGdldHNvY2tvcHQoc29jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPTF9TT0NLRVQs IFNPX0RPTlRST1VURSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopJmdldF9k b250cm91dGVfb3B0MTYsICZ4KQotICAgICAgICAgICAgICAgICkgewotICAgICAgICAgICAgICAg IGRlYnVnKEYxMTEsCi0gICAgICAgICAgICAgICAgICAgICAgIlRDUCBkb250cm91dGUgY2FuJ3Qg Z2V0IFNPX0RPTlRST1VURSIsCi0gICAgICAgICAgICAgICAgICAgICAgY2tfZXJyc3RyKCksCi0g ICAgICAgICAgICAgICAgICAgICAgZXJybm8KLSAgICAgICAgICAgICAgICAgICAgICApOwotICAg ICAgICAgICAgfSBlbHNlIGlmIChnZXRfZG9udHJvdXRlX29wdDE2ICE9IG9ub2ZmKSB7Ci0gICAg ICAgICAgICAgICAgc2V0X2RvbnRyb3V0ZV9vcHQxNiA9IG9ub2ZmOwotICAgICAgICAgICAgICAg IGlmIChzZXRzb2Nrb3B0KHNvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU09M X1NPQ0tFVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT19ET05UUk9VVEUsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikmc2V0X2RvbnRyb3V0ZV9vcHQx NiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc2V0X2RvbnRyb3V0ZV9v cHQxNikpCi0gICAgICAgICAgICAgICAgICAgICkgewotICAgICAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTExLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiVENQIGRvbnRyb3V0ZSBjYW4ndCBj bGVhciBTT19ET05UUk9VVEUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBja19lcnJzdHIo KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8KLSAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgdGNwX2RvbnRyb3V0ZSA9IGdldF9kb250cm91 dGVfb3B0MTY7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg ZGVidWcoRjEwMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIlRDUCBkb250cm91dGUgbmV3 IFNPX0RPTlRST1VURSIsIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9kb250cm91 dGVfb3B0MTYpOwotICAgICAgICAgICAgICAgICAgICB0Y3BfZG9udHJvdXRlID0gc2V0X2RvbnRy b3V0ZV9vcHQxNjsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJU Q1AgZG9udHJvdXRlIFNPX0RPTlRST1VURSB1bmNoYW5nZWQiLCIiLAotICAgICAgICAgICAgICAg ICAgICAgIGdldF9kb250cm91dGVfb3B0MTYpOwotICAgICAgICAgICAgICAgIHRjcF9kb250cm91 dGUgPSBvbm9mZjsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAg ICBkZWJ1ZyhGMTExLCJUQ1AgZG9udHJvdXRlIGVycm9yOiBTT19ET05UUk9VVEUiLCJsZW4iLHgp OwotICAgICAgICBkZWJ1ZyhGMTExLAotICAgICAgICAgICAgICAiVENQIGRvbnRyb3V0ZSBTT19E T05UUk9VVEUiLAotICAgICAgICAgICAgICAiZXhwZWN0ZWQgbGVuIiwKLSAgICAgICAgICAgICAg c2l6ZW9mKGdldF9kb250cm91dGVfb3B0KQotICAgICAgICAgICAgICApOwotICAgICAgICBkZWJ1 ZyhGMTExLAotICAgICAgICAgICAgICAiVENQIGRvbnRyb3V0ZSBTT19ET05UUk9VVEUiLAotICAg ICAgICAgICAgICAiZG9udHJvdXRlX29wdCIsCi0gICAgICAgICAgICAgIGdldF9kb250cm91dGVf b3B0Ci0gICAgICAgICAgICAgICk7Ci0gICAgfSBlbHNlIGlmIChnZXRfZG9udHJvdXRlX29wdCAh PSBvbm9mZikgewotICAgICAgICAgICAgc2V0X2RvbnRyb3V0ZV9vcHQgPSBvbm9mZjsKLSAgICAg ICAgICAgIGlmIChzZXRzb2Nrb3B0KHNvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg U09MX1NPQ0tFVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT19ET05UUk9VVEUsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikmc2V0X2RvbnRyb3V0ZV9vcHQsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHNldF9kb250cm91dGVfb3B0KSkKLSAg ICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLAotICAgICAgICAg ICAgICAgICAgICAgICJUQ1AgZG9udHJvdXRlIGNhbid0IGNsZWFyIFNPX0RPTlRST1VURSIsCi0g ICAgICAgICAgICAgICAgICAgICAgY2tfZXJyc3RyKCksCi0gICAgICAgICAgICAgICAgICAgICAg ZXJybm8KLSAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgIHRjcF9kb250 cm91dGUgPSBnZXRfZG9udHJvdXRlX29wdDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg ICAgICAgICAgZGVidWcoRjEwMSwKLSAgICAgICAgICAgICAgICAgICAgICAiVENQIGRvbnRyb3V0 ZSBuZXcgU09fRE9OVFJPVVRFIiwKLSAgICAgICAgICAgICAgICAgICAgICAiIiwKLSAgICAgICAg ICAgICAgICAgICAgICBzZXRfZG9udHJvdXRlX29wdAotICAgICAgICAgICAgICAgICAgICAgICk7 Ci0gICAgICAgICAgICAgICAgdGNwX2RvbnRyb3V0ZSA9IG9ub2ZmOwotICAgICAgICAgICAgICAg IHJldHVybiAxOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg ZGVidWcoRjEwMSwiVENQIGRvbnRyb3V0ZSBTT19ET05UUk9VVEUgdW5jaGFuZ2VkIiwKLSAgICAg ICAgICAgICAgICAgICIiLAotICAgICAgICAgICAgICAgICAgZ2V0X2RvbnRyb3V0ZV9vcHQKLSAg ICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICB0Y3BfZG9udHJvdXRlID0gb25vZmY7Ci0g ICAgICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0jZWxzZQotICAgIGRlYnVnKEYxMDAsIlRDUCBk b250cm91dGUgU09fRE9OVFJPVVRFIG5vdCBkZWZpbmVkIiwiIiwwKTsKLSNlbmRpZiAvKiBTT19E T05UUk9VVEUgKi8KLSNlbHNlCi0gICAgZGVidWcoRjEwMCwiVENQIGRvbnRyb3V0ZSBTT19TT0NL RVQgbm90IGRlZmluZWQiLCIiLDApOwotI2VuZGlmIC8qIFNPTF9TT0NLRVQgKi8KLSAgICByZXR1 cm4oMCk7Ci19Ci0KLWludAotbm9fZGVsYXkoc29jayxvbm9mZikgIGludCBzb2NrOyBpbnQgb25v ZmY7IHsKLSNpZmRlZiBTT0xfU09DS0VUCi0jaWZkZWYgVENQX05PREVMQVkKLSAgICBpbnQgZ2V0 X25vZGVsYXlfb3B0OwotICAgIGludCBzZXRfbm9kZWxheV9vcHQ7Ci0gICAgU09DS09QVF9UIHg7 Ci0KLSNpZmRlZiBJS1NECi0gICAgaWYgKCFpbnNlcnZlcikKLSNlbmRpZiAvKiBJS1NEICovCi0g ICAgICBpZiAoc29jayA9PSAtMSB8fAotICAgICAgICBuZXR0eXBlICE9IE5FVF9UQ1BBICYmIG5l dHR5cGUgIT0gTkVUX1RDUEIgJiYgbmV0dHlwZSAhPSBORVRfU1NICi0gICAgICAgICAgICAgICAg fHwgdHRtZG0gPj0gMCkgewotICAgICAgICB0Y3Bfbm9kZWxheSA9IG9ub2ZmOwotICAgICAgICBy ZXR1cm4oMSk7Ci0gICAgfQotICAgIHggPSBzaXplb2YoZ2V0X25vZGVsYXlfb3B0KTsKLSAgICBp ZiAoZ2V0c29ja29wdChzb2NrLElQUFJPVE9fVENQLFRDUF9OT0RFTEFZLAotICAgICAgICAgICAg ICAgICAgIChjaGFyICopJmdldF9ub2RlbGF5X29wdCwmeCkpIHsKLSAgICAgICAgZGVidWcoRjEx MSwKLSAgICAgICAgICAgICAgIlRDUCBub19kZWxheSBjYW4ndCBnZXQgVENQX05PREVMQVkiLAot ICAgICAgICAgICAgICBja19lcnJzdHIoKSwKLSAgICAgICAgICAgICAgZXJybm8pOwotICAgIH0g ZWxzZSBpZiAoeCAhPSBzaXplb2YoZ2V0X25vZGVsYXlfb3B0KSkgewotI2lmZGVmIE9TMgotICAg ICAgICBzaG9ydCBnZXRfbm9kZWxheV9vcHQxNjsKLSAgICAgICAgc2hvcnQgc2V0X25vZGVsYXlf b3B0MTY7Ci0gICAgICAgIGlmICh4ID09IHNpemVvZihnZXRfbm9kZWxheV9vcHQxNikpIHsKLSAg ICAgICAgICAgIGRlYnVnKEYxMTEsIlRDUCBub19kZWxheSB3YXJuaW5nOiBUQ1BfTk9ERUxBWSIs ImxlbiBpcyAxNi1iaXQiLHgpOwotICAgICAgICAgICAgaWYgKGdldHNvY2tvcHQoc29jaywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopJmdldF9ub2RlbGF5X29wdDE2LCAmeCkKLSAg ICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLAotICAgICAgICAg ICAgICAgICAgICAgICJUQ1Agbm9fZGVsYXkgY2FuJ3QgZ2V0IFRDUF9OT0RFTEFZIiwKLSAgICAg ICAgICAgICAgICAgICAgICBja19lcnJzdHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICBlcnJu byk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGdldF9ub2RlbGF5X29wdDE2ICE9IG9ub2ZmKSB7 Ci0gICAgICAgICAgICAgICAgc2V0X25vZGVsYXlfb3B0MTYgPSBvbm9mZjsKLSAgICAgICAgICAg ICAgICBpZiAoc2V0c29ja29wdChzb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IElQUFJPVE9fVENQLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRDUF9OT0RFTEFZ LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopJnNldF9ub2RlbGF5X29w dDE2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzZXRfbm9kZWxheV9v cHQxNikpCi0gICAgICAgICAgICAgICAgICAgICkgewotICAgICAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTExLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiVENQIG5vX2RlbGF5IGNhbid0IGNs ZWFyIFRDUF9OT0RFTEFZIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2tfZXJyc3RyKCks Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vKTsKLSAgICAgICAgICAgICAgICAgICAg dGNwX25vZGVsYXkgPSBnZXRfbm9kZWxheV9vcHQxNjsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAiVENQIG5vX2RlbGF5IG5ldyBUQ1BfTk9ERUxBWSIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfbm9kZWxheV9vcHQxNik7 Ci0gICAgICAgICAgICAgICAgICAgIHRjcF9ub2RlbGF5ID0gb25vZmY7Ci0gICAgICAgICAgICAg ICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiVENQIG5vX2RlbGF5IFRDUF9OT0RFTEFZIHVu Y2hhbmdlZCIsIiIsCi0gICAgICAgICAgICAgICAgICAgICAgZ2V0X25vZGVsYXlfb3B0MTYpOwot ICAgICAgICAgICAgICAgIHRjcF9ub2RlbGF5ID0gb25vZmY7Ci0gICAgICAgICAgICAgICAgcmV0 dXJuIDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIH0K LSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgZGVidWcoRjExMSwiVENQIG5vX2RlbGF5IGVycm9y OiBUQ1BfTk9ERUxBWSIsImxlbiIseCk7Ci0gICAgICAgIGRlYnVnKEYxMTEsIlRDUCBub19kZWxh eSBUQ1BfTk9ERUxBWSIsImV4cGVjdGVkIGxlbiIsCi0gICAgICAgICAgICAgIHNpemVvZihnZXRf bm9kZWxheV9vcHQpKTsKLSAgICAgICAgZGVidWcoRjExMSwiVENQIG5vX2RlbGF5IFRDUF9OT0RF TEFZIiwibm9kZWxheV9vcHQiLGdldF9ub2RlbGF5X29wdCk7Ci0gICAgfSBlbHNlIGlmIChnZXRf bm9kZWxheV9vcHQgIT0gb25vZmYpIHsKLSAgICAgICAgc2V0X25vZGVsYXlfb3B0ID0gb25vZmY7 Ci0gICAgICAgIGlmIChzZXRzb2Nrb3B0KHNvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgIElQ UFJPVE9fVENQLAotICAgICAgICAgICAgICAgICAgICAgICBUQ1BfTk9ERUxBWSwKLSAgICAgICAg ICAgICAgICAgICAgICAgKGNoYXIgKikmc2V0X25vZGVsYXlfb3B0LAotICAgICAgICAgICAgICAg ICAgICAgICBzaXplb2Yoc2V0X25vZGVsYXlfb3B0KSkpIHsKLSAgICAgICAgICAgIGRlYnVnKEYx MTEsCi0gICAgICAgICAgICAgICAgICAiVENQIG5vX2RlbGF5IGNhbid0IGNsZWFyIFRDUF9OT0RF TEFZIiwKLSAgICAgICAgICAgICAgICAgIGNrX2VycnN0cigpLAotICAgICAgICAgICAgICAgICAg ZXJybm8KLSAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICB0Y3Bfbm9kZWxheSA9IGdl dF9ub2RlbGF5X29wdDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEs IlRDUCBub19kZWxheSBuZXcgVENQX05PREVMQVkiLCIiLHNldF9ub2RlbGF5X29wdCk7Ci0gICAg ICAgICAgICB0Y3Bfbm9kZWxheSA9IG9ub2ZmOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAg ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBkZWJ1ZyhGMTAxLCJUQ1Agbm9fZGVsYXkgVENQ X05PREVMQVkgdW5jaGFuZ2VkIiwiIixnZXRfbm9kZWxheV9vcHQpOwotICAgICAgICB0Y3Bfbm9k ZWxheSA9IG9ub2ZmOwotICAgICAgICByZXR1cm4oMSk7Ci0gICAgfQotI2Vsc2UKLSAgICBkZWJ1 ZyhGMTAwLCJUQ1Agbm9fZGVsYXkgVENQX05PREVMQVkgbm90IGRlZmluZWQiLCIiLDApOwotI2Vu ZGlmIC8qIFRDUF9OT0RFTEFZICovCi0jZWxzZQotICAgIGRlYnVnKEYxMDAsIlRDUCBub19kZWxh eSBTT19TT0NLRVQgbm90IGRlZmluZWQiLCIiLDApOwotI2VuZGlmIC8qIFNPTF9TT0NLRVQgKi8K LSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8qIE5P VENQT1BUUyAqLwotCi0jaWZkZWYgU1VOWDI1Ci0jaWZuZGVmIFgyNV9XUl9GQUNJTElUWQotLyog Rm9yIFNvbGFyaXMgMi4zIC8gU3VuTGluayA4LnggLSBzZWUgY29tbWVudHMgaW4gY2tjbmV0Lmgg Ki8KLXZvaWQKLWJ6ZXJvKHMsbikgY2hhciAqczsgaW50IG47IHsKLSAgICBtZW1zZXQocywwLG4p OwotfQotI2VuZGlmIC8qIFgyNV9XUl9GQUNJTElUWSAqLwotI2VuZGlmIC8qIFNVTlgyNSAqLwot Ci0jaWZkZWYgVENQU09DS0VUCi0jaWZuZGVmIE9TMgotI2lmbmRlZiBOT0xJU1RFTgotCi0jaWZk ZWYgQlNEU0VMRUNUCi0jaWZuZGVmIFZNUwotI2lmbmRlZiBCRUxMVjEwCi0jaWZuZGVmIGRhdGFn ZW5lcmFsCi0jaWZkZWYgaHA5MDAwczUwMCAgICAgICAgICAgICAgICAgICAgICAgLyogSFAtOTAw MC81MDAgSFAtVSA1LjIxICovCi0jaW5jbHVkZSA8dGltZS5oPgotI2Vsc2UKLQotLyoqKioqKiBU SElTIFNFQ1RJT04gQURERUQgQlkgU1RFVkUgUkFOQ0UgLSBPUzkgTkVUV09SSyBTRVJWRVIKLSog ICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCi0qCi0qICAgICAgIER1ZSB0byBPUzkncyBMYWNrIG9mIGEgc2VsZWN0KCkgY2FsbCwgdGhl IGZvbGxvd2luZyBzZWVtcyB0byBiZQotKiAgICAgICBlbm91Z2ggdG8gZm9vbCB0aGUgcmVzdCBv ZiB0aGUgY29kZSBpbnRvIGNvbXBpbGluZy4gVGhlIG9ubHkKLSogICAgICAgZWZmZWN0IHRoYXQg SSBjYW4gc2VlIGlzIHVzaW5nIGNvbnRyb2wgTCB0byByZWZyZXNoIHRoZSBzdGF0dXMKLSogICAg ICAgZGlzcGxheSBnZXRzIHF1ZWQgdXAgdW50aWwgc29tZSBuZXR3b3JrIHBhY2tldHMgYXJyaXZl LgotKgotKiAgICAgICBUaGlzIHNvbHV0aW9uIGlzIGJ5IG5vIG1lYW5zIGVsZWdhbnQgYnV0IHdv cmtzIGVub3VnaCB0byBiZQotKiAgICAgICBhICh0aGUpIHNvbHV0aW9uLgotKgotKiAgICAgICBB bHNvIHdpdGggdGhlIGRlZmluZXMgSSBoYWQgc3BlY2lmaWVkIGluIG15IG1ha2VmaWxlIEkgaGFk IHRvCi0qICAgICAgIGhhdmUgYW4gI2VuZGlmIHJpZ2h0IGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUg d2hlbiBjb21waWxpbmcuCi0qICAgICAgIEkgZGlkIG5vdCBib3RoZXIgc3BlZGluZyB0aW1lIHRv IGZpbmQgb3V0IHdoeS4KLSoKLSogICAgICAgQ09QVFMgICA9IC10bz1vc2sgLWQ9T1NLIC1kPVRD UFNPQ0tFVCAtZD1TRUxFQ1QgLWQ9Vk9JRD12b2lkIC1kPVNJR19WIFwKLSogICAgICAgICAgLWQ9 RFlOQU1JQyAtZD1QQVJTRU5TRSAtZD1LQU5KSSAtZD1NWUNVUlNFUyAtZD1aRkNEQVQgXAotKiAg ICAgICAgICAtZD1DS19BUEMgLWQ9Q0tfUkVESVIgLWQ9UkVOQU1FIC1kPUNLX1RUWUZEIC1kPU5P T0xETU9ERU1TIFwKLSogICAgICAgICAgLWQ9Q0tfQU5TSUMgLWQ9Q0tfWFlaIC10cD02ODA0MGQg LWw9bmV0ZGIubCAtbD1zb2NrbGliLmwgXAotKiAgICAgICAgICAtbD10ZXJtbGliLmwgLWw9bWF0 aC5sIC1sPXN5c19jbGliLmwKLSoKLSogICAgICAgc3RldmVyQG96ZW1haWwuY29tLmF1Ci0qLwot Ci0jaWZkZWYgIE9TSwotI2RlZmluZSBCU0RTRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgIC8q IHN3aXRjaCBvbiBCU0Qgc2VsZWN0IGNvZGUgKi8KLSNkZWZpbmUgRkRfU0VUU0laRSAzMiAgICAg ICAgICAgICAgICAgICAvKiBNYXggIyBvZiBwYXRocyBpbiBPUzkgKi8KLSNkZWZpbmUgRkRfWkVS TyhwKSAgICAgICAgICAgICAgICAgICAgICAoKCpwKT0wKQotI2RlZmluZSBGRF9TRVQobixiKSAg ICAgICAgICAgICAgICAgICAgICgoKmIpfD0oMTw8KG4pKSkKLSNkZWZpbmUgRkRfSVNTRVQobixi KSAgICAgICAgICAgMSAgICAgICAvKiBhbHdheXMgc2F5IGRhdGEgaXMgcmVhZHkgKi8KLSNkZWZp bmUgc2VsZWN0KGEsYixjLGQsZSkgICAgICAgMSAgICAgICAvKiBhbHdheXMgc2F5IDEgcGF0aCBo YXMgZGF0YSAqLwotdHlwZWRlZiBpbnQgICAgIGZkX3NldDsgICAgICAgICAgICAgICAgIC8qIGtl ZXAgQlNEIENvZGUgSGFwcHkgKi8KLXN0cnVjdCB0aW1ldmFsIHtpbnQgdHZfc2VjLHR2X3VzZWM7 fTsgICAvKiBrZWVwIEJTRCBDb2RlIEhhcHB5ICovCi0KLS8qKioqKiogRU5EIE9GIE9TOSBNT0RT IEZST00gU1RFVkUgUkFOQ0UgKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZW5kaWYgLyog T1NLICovCi0KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmIC8qIGhwOTAwMHM1MDAgKi8K LSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8qIEJFTExWMTAgKi8KLSNlbmRpZiAv KiBWTVMgKi8KLSNpZmRlZiBTRUxFQ1RfSAotI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KLSNlbmRp ZiAvKiBTRUxFQ1RfSCAqLwotI2VuZGlmIC8qIEJTRFNFTEVDVCAqLwotCi0jaWZkZWYgU0VMRUNU Ci0jaWZkZWYgQ0tfU0NPVjUKLSNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+Ci0jZW5kaWYgLyogQ0tf U0NPVjUgKi8KLSNlbmRpZiAvKiBTRUxFQ1QgKi8KLQotI2lmZGVmIE5PVFVTRUQKLS8qIFQgQyBQ IFMgTyBDIEsgRSBUIF8gTyBQIEUgTiAtLSBPcGVuIGEgcHJlZXhpc3Rpbmcgc29ja2V0IG51bWJl ciAqLwotCi1pbnQKLXRjcHNvY2tldF9vcGVuKG5hbWUsbGNsLG5ldHQsdGltbykgY2hhciAqIG5h bWU7IGludCAqIGxjbDsgaW50IG5ldHQ7IGludCB0aW1vIHsKLSAgICBpbnQgb24gPSAxOwotICAg IHN0YXRpYyBzdHJ1Y3Qgc2VydmVudCAqc2VydmljZSwgc2VydnJlYzsKLSAgICBzdGF0aWMgc3Ry dWN0IGhvc3RlbnQgKmhvc3Q7Ci0gICAgc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiBzYWRkcjsK LSAgICBzdGF0aWMKLSNpZmRlZiBVQ1g1MAotICAgICAgdW5zaWduZWQKLSNlbmRpZiAvKiBVQ1g1 MCAqLwotICAgICAgaW50IHNhZGRybGVuOwotI2lmZGVmIEJTRFNFTEVDVAotICAgIGZkX3NldCBy ZmRzOwotICAgIHN0cnVjdCB0aW1ldmFsIHR2OwotI2Vsc2UKLSNpZmRlZiBCRUxMU0VMRUNUCi0g ICAgZmRfc2V0IHJmZHM7Ci0jZWxzZQotICAgIGZkX3NldCByZmRzOwotICAgIGZkX3NldCByZmRz OwotICAgIHN0cnVjdCB0aW1ldmFsIHsKLSAgICAgICAgbG9uZyB0dl9zZWM7Ci0gICAgICAgIGxv bmcgdHZfdXNlYzsKLSAgICB9IHR2OwotI2VuZGlmIC8qIEJFTExTRUxFQ1QgKi8KLSNlbmRpZiAv KiBCU0RTRUxFQ1QgKi8KLQotICAgIGRlYnVnKEYxMDEsInRjcHNvY2tldF9vcGVuIG5ldHQiLCIi LG5ldHQpOwotICAgICppcGFkZHIgPSAnXDAnOwotCi0gICAgaWYgKG5ldHQgIT0gTkVUX1RDUEIp Ci0gICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAgICAgICAgICAgLyogQlNEIHNvY2tldCBz dXBwb3J0ICovCi0KLSAgICBuZXRjbG9zKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBD bG9zZSBhbnkgcHJldmlvdXMgY29ubmVjdGlvbi4gKi8KLSAgICBja3N0cm5jcHkobmFtZWNvcHks IG5hbWUsIE5BTUVDUFlMKTsgLyogQ29weSB0aGUgaG9zdG5hbWUuICovCi0jaWZkZWYgQ09NTUVO VAotICAgIC8qIEplZmYncyB2ZXJzaW9uIGZyb20gMzAgRGVjIDIwMDUgZG9lc24ndCBpbmhpYml0 IFRlbG5ldCAqLwotICAgIGlmICh0dG5wcm90byAhPSBOUF9UQ1BSQVcgJiYKLQl0dG5wcm90byAh PSBOUF9TU0xfUkFXICYmCi0JdHRucHJvdG8gIT0gTlBfVExTX1JBVykKLSAgICAgIHR0bnByb3Rv ID0gTlBfTk9ORTsgICAgICAgICAgICAgICAvKiBObyBwcm90b2NvbCBzZWxlY3RlZCB5ZXQuICov Ci0jZWxzZQotICAgIC8qIGZkYydzIHZlcnNpb24gZnJvbSA0IERlYyAyMDA1IHdvcmtzIG9rICov Ci0gICAgaWYgKHR0bnByb3RvICE9IE5QX1RDUFJBVykKLSAgICAgIHR0bnByb3RvID0gTlBfTk9O RTsgICAgICAgICAgICAgICAvKiBObyBwcm90b2NvbCBzZWxlY3RlZCB5ZXQuICovCi0jZW5kaWYJ LyogQ09NTUVOVCAqLwotICAgIGRlYnVnKEYxMTAsInRjcHNvY2tldF9vcGVuIG5hbWVjb3B5Iixu YW1lY29weSwwKTsKLQotICAgIC8qIEFzc2lnbiB0aGUgc29ja2V0IG51bWJlciB0byB0dHlmZCBh bmQgdGhlbiBmaWxsIGluIHRjcCBzdHJ1Y3R1cmVzICovCi0gICAgdHR5ZmQgPSBhdG9pKCZuYW1l WzFdKTsKLSAgICBkZWJ1ZyhGMTExLCJ0Y3Bzb2NrZXRfb3BlbiIsInR0eWZkIix0dHlmZCk7Ci0K LSNpZm5kZWYgTk9UQ1BPUFRTCi0jaWZkZWYgU09MX1NPQ0tFVAotICAgIHNldHNvY2tvcHQodHR5 ZmQsIFNPTF9TT0NLRVQsIFNPX09PQklOTElORSwoY2hhciAqKSAmb24sIHNpemVvZiBvbik7Ci0K LSNpZm5kZWYgZGF0YWdlbmVyYWwKLSNpZmRlZiBUQ1BfTk9ERUxBWQotICAgIG5vX2RlbGF5KHR0 eWZkLHRjcF9ub2RlbGF5KTsKLSNlbmRpZiAvKiBUQ1BfTk9ERUxBWSAqLwotI2lmZGVmIFNPX0tF RVBBTElWRQotICAgIGtlZXBhbGl2ZSh0dHlmZCx0Y3Bfa2VlcGFsaXZlKTsKLSNlbmRpZiAvKiBT T19LRUVQQUxJVkUgKi8KLSNpZmRlZiBTT19MSU5HRVIKLSAgICBja19saW5nZXIodHR5ZmQsdGNw X2xpbmdlciwgdGNwX2xpbmdlcl90bW8pOwotI2VuZGlmIC8qIFNPX0xJTkdFUiAqLwotI2lmZGVm IFNPX1NOREJVRgotICAgIHNlbmRidWYodHR5ZmQsdGNwX3NlbmRidWYpOwotI2VuZGlmIC8qIFNP X1NOREJVRiAqLwotI2lmZGVmIFNPX1JDVkJVRgotICAgIHJlY3ZidWYodHR5ZmQsdGNwX3JlY3Zi dWYpOwotI2VuZGlmIC8qIFNPX1JDVkJVRiAqLwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0j ZW5kaWYgLyogU09MX1NPQ0tFVCAqLwotI2VuZGlmIC8qIE5PVENQT1BUUyAqLwotCi0jaWZkZWYg TlRfVENQX09WRVJMQVBQRUQKLSAgICBPdmVybGFwcGVkV3JpdGVJbml0KCk7Ci0gICAgT3Zlcmxh cHBlZFJlYWRJbml0KCk7Ci0jZW5kaWYgLyogTlRfVENQX09WRVJMQVBQRUQgKi8KLQotCi0gICAg LyogR2V0IHRoZSBuYW1lIG9mIHRoZSBob3N0IHdlIGFyZSBjb25uZWN0ZWQgdG8gKi8KLQotICAg IHNhZGRybGVuID0gc2l6ZW9mKHNhZGRyKTsKLSAgICBnZXRwZWVybmFtZSh0dHlmZCwoc3RydWN0 IHNvY2thZGRyICopJnNhZGRyLCZzYWRkcmxlbik7Ci0KLSAgICBja3N0cm5jcHkoaXBhZGRyLChj aGFyICopaW5ldF9udG9hKHNhZGRyLnNpbl9hZGRyKSwyMCk7Ci0KLSAgICBpZiAodGNwX3JkbnMg PT0gU0VUX09OCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSAgICAgICAgfHwgdGNwX3JkbnMgPT0gU0VU X0FVVE8gJiYKLSAgICAgICAgIChja19rcmI1X2lzX2luc3RhbGxlZCgpIHx8IGNrX2tyYjRfaXNf aW5zdGFsbGVkKCkpCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSNpZm5kZWYgTk9IVFRQCi0g ICAgICAgICAgJiYgKHRjcF9odHRwX3Byb3h5ID09IE5VTEwpCi0jZW5kaWYgLyogTk9IVFRQICov Ci0jaWZkZWYgQ0tfU1NMCi0gICAgICAgICAgJiYgIShzc2xfb25seV9mbGFnIHx8IHRsc19vbmx5 X2ZsYWcpCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgICApIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogUmV2ZXJzZSBETlMgKi8KLSAgICAgICAgaWYgKCFxdWlldCkgewotICAg ICAgICAgICAgcHJpbnRmKCIgUmV2ZXJzZSBETlMgTG9va3VwLi4uICIpOwotICAgICAgICAgICAg ZmZsdXNoKHN0ZG91dCk7Ci0gICAgICAgIH0KLSAgICAgICAgaG9zdCA9IGdldGhvc3RieWFkZHIo KGNoYXIgKikmc2FkZHIuc2luX2FkZHIsNCxQRl9JTkVUKTsKLSAgICAgICAgZGVidWcoRjExMCwi dGNwc29ja2V0X29wZW4gZ2V0aG9zdGJ5YWRkciIsaG9zdCA/ICJPSyIgOiAiRkFJTEVEIiwwKTsK LSAgICAgICAgaWYgKGhvc3QpIHsKLSAgICAgICAgICAgIGhvc3QgPSBja19jb3B5aG9zdGVudCho b3N0KTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsInRjcHNvY2tldF9vcGVuIGdldGhvc3RieWFk ZHIgIT0gTlVMTCIsIiIsMCk7Ci0gICAgICAgICAgICBpZiAoIXF1aWV0KSB7Ci0gICAgICAgICAg ICAgICAgcHJpbnRmKCIoT0spXG4iKTsKLSAgICAgICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsK LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNrc3RybmNweShuYW1lLCBob3N0LT5oX25hbWUs IDgwKTsKLSAgICAgICAgICAgIGNrc3RybmNhdChuYW1lLCAiOiIsIDgwKTsKLSAgICAgICAgICAg IGNrc3RybmNhdChuYW1lLGNrdWl0b2EobnRvaHMoc2FkZHIuc2luX3BvcnQpKSwgODApOwotICAg ICAgICAgICAgaWYgKCFxdWlldAotI2lmbmRlZiBOT0lDUAotICAgICAgICAgICAgICAgICYmICFk b2NvbngKLSNlbmRpZiAvKiBOT0lDUCAqLwotICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAg ICAgcHJpbnRmKCIlcyBjb25uZWN0ZWQgb24gcG9ydCAlZFxuIiwKLSAgICAgICAgICAgICAgICAg ICBob3N0LT5oX25hbWUsCi0gICAgICAgICAgICAgICAgICAgbnRvaHMoc2FkZHIuc2luX3BvcnQp Ci0gICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgfSBlbHNlIGlmICghcXVpZXQpCi0gICAg ICAgICAgcHJpbnRmKCJGYWlsZWRcbiIpOwotICAgIH0gZWxzZSBpZiAoIXF1aWV0KQotICAgICAg cHJpbnRmKCIoT0spXG4iKTsKLQotICAgIGlmICh0Y3BfcmRucyAhPSBTRVRfT04gfHwgIWhvc3Qp IHsKLSAgICAgICAgY2tzdHJuY3B5KG5hbWUsaXBhZGRyLDgwKTsKLSAgICAgICAgY2tzdHJuY2F0 KG5hbWUsIjoiLDgwKTsKLSAgICAgICAgY2tzdHJuY2F0KG5hbWUsY2t1aXRvYShudG9ocyhzYWRk ci5zaW5fcG9ydCkpLDgwKTsKLSAgICAgICAgaWYgKCFxdWlldAotI2lmZGVmIE5PSUNQCi0gICAg ICAgICAgICAmJiAhZG9jb254Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLSAgICAgICAgICAgICkKLSAg ICAgICAgICBwcmludGYoIiVzIGNvbm5lY3RlZCBvbiBwb3J0ICVkXG4iLGlwYWRkcixudG9ocyhz YWRkci5zaW5fcG9ydCkpOwotICAgIH0KLSAgICBpZiAoIXF1aWV0KSBmZmx1c2goc3Rkb3V0KTsK LSAgICB0dG5ldCA9IG5ldHQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBUQ1AvSVAgKHNvY2tl dHMpIG5ldHdvcmsgKi8KLQotI2lmZGVmIFJMT0dDT0RFCi0gICAgaWYgKG50b2hzKHNhZGRyLnNp bl9wb3J0KSA9PSA1MTMpCi0gICAgICAgIHR0bnByb3RvID0gTlBfTE9HSU47Ci0gICAgZWxzZQot I2VuZGlmIC8qIFJMT0dDT0RFICovCi0gICAgLyogQXNzdW1lIHRoZSBzZXJ2aWNlIGlzIFRFTE5F VC4gKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAvKiBKZWZmJ3MgY29kZSBmcm9tIDIwMDUvMTIv MzAgKi8KLSAgICAgIGlmICh0dG5wcm90byAhPSBOUF9UQ1BfUkFXICYmCi0JICB0dG5wcm90byAh PSBOUF9TU0xfUkFXICYmCi0JICB0dG5wcm90byAhPSBOUF9UTFNfUkFXKQotI2Vsc2UKLSAgICAg IC8qIGZkYydzIGNvZGUgZnJvbSAyMDA1LzEyLzA0ICovCi0gICAgICBpZiAodHRucHJvdG8gIT0g TlBfVENQUkFXKQotI2VuZGlmCS8qIENPTU1FTlQgKi8KLQl0dG5wcm90byA9IE5QX1RFTE5FVDsJ CS8qIFllcywgc2V0IGdsb2JhbCBmbGFnLiAqLwotI2lmZGVmIENLX1NFQ1VSSVRZCi0gICAgLyog QmVmb3JlIEluaXRpYWxpemF0aW9uIFRlbG5ldC9SbG9naW4gTmVnb3RpYXRpb25zIEluaXQgS2Vy YmVyb3MgKi8KLSAgICBja19hdXRoX2luaXQoKHRjcF9yZG5zICYmIGhvc3QgJiYgaG9zdC0+aF9u YW1lICYmIGhvc3QtPmhfbmFtZVswXSkgPwotICAgICAgICAgICAgICAgIGhvc3QtPmhfbmFtZSA6 IGlwYWRkciwKLSAgICAgICAgICAgICAgICBpcGFkZHIsCi0gICAgICAgICAgICAgICAgdWlkYnVm LAotICAgICAgICAgICAgICAgIHR0eWZkCi0gICAgICAgICAgICAgICAgKTsKLSNlbmRpZiAvKiBD S19TRUNVUklUWSAqLwotICAgIGlmICh0bl9pbmkoKSA8IDApICAgICAgICAgICAgICAgICAgIC8q IFN0YXJ0L1Jlc2V0IFRFTE5FVCBuZWdvdGlhdGlvbnMgKi8KLSAgICAgIGlmICh0dGNoaygpIDwg MCkgICAgICAgICAgICAgICAgICAvKiBEaWQgaXQgZmFpbCBkdWUgdG8gY29ubmVjdCBsb3NzPyAq LwotICAgICAgICByZXR1cm4oLTEpOwotCi0gICAgaWYgKCpsY2wgPCAwKSAqbGNsID0gMTsgICAg ICAgICAgICAgLyogTG9jYWwgbW9kZS4gKi8KLQotICAgIHJldHVybigwKTsgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIERvbmUuICovCi19Ci0jZW5kaWYgLyogTk9UVVNFRCAqLwotCi0vKiAg VCBDIFAgUyBSIFYgXyBPIFAgRSBOICAtLSAgT3BlbiBhIFRDUC9JUCBTZXJ2ZXIgY29ubmVjdGlv biAgKi8KLS8qCi0gIENhbGxpbmcgY29udmVudGlvbnMgc2FtZSBhcyB0dG9wZW4oKSwgZXhjZXB0 IHRoaXJkIGFyZ3VtZW50IGlzIG5ldHdvcmsKLSAgdHlwZSByYXRoZXIgdGhhbiBtb2RlbSB0eXBl LgotKi8KLWludAotdGNwc3J2X29wZW4obmFtZSxsY2wsbmV0dCx0aW1vKSBjaGFyICogbmFtZTsg aW50ICogbGNsOyBpbnQgbmV0dDsgaW50IHRpbW87IHsKLSAgICBjaGFyICpwOwotICAgIGludCBp LCB4OwotICAgIFNPQ0tPUFRfVCBvbiA9IDE7Ci0gICAgaW50IHJlYWR5X3RvX2FjY2VwdCA9IDA7 Ci0gICAgc3RhdGljIHN0cnVjdCBzZXJ2ZW50ICpzZXJ2aWNlLCAqc2VydmljZTIsIHNlcnZyZWM7 Ci0gICAgc3RhdGljIHN0cnVjdCBob3N0ZW50ICpob3N0OwotICAgIHN0YXRpYyBzdHJ1Y3Qgc29j a2FkZHJfaW4gc2FkZHI7Ci0gICAgc3RydWN0IHNvY2thZGRyX2luIGxfYWRkcjsKLSAgICBHU09D S05BTUVfVCBsX3NsZW47Ci0jaWZkZWYgVUNYNTAKLSAgICBzdGF0aWMgdV9pbnQgc2FkZHJsZW47 Ci0jZWxzZQotICAgIHN0YXRpYyBTT0NLT1BUX1Qgc2FkZHJsZW47Ci0jZW5kaWYgLyogVUNYNTAg Ki8KLQotI2lmZGVmIEJTRFNFTEVDVAotICAgIGZkX3NldCByZmRzOwotICAgIHN0cnVjdCB0aW1l dmFsIHR2OwotI2Vsc2UKLSNpZmRlZiBCRUxMU0VMQ1QKLSAgICBmZF9zZXQgcmZkczsKLSNlbHNl Ci0gICAgZmRfc2V0IHJmZHM7Ci0gICAgc3RydWN0IHRpbWV2YWwgewotICAgICAgICBsb25nIHR2 X3NlYzsKLSAgICAgICAgbG9uZyB0dl91c2VjOwotICAgIH0gdHY7Ci0jZW5kaWYgLyogQkVMTFNF TEVDVCAqLwotI2VuZGlmIC8qIEJTRFNFTEVDVCAqLwotI2lmZGVmIENLX1NTTAotICAgIGludCBz c2xfZmFpbGVkID0gMDsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotICAgIGRlYnVnKEYxMDEsInRj cHNydl9vcGVuIG5ldHQiLCIiLG5ldHQpOwotICAgICppcGFkZHIgPSAnXDAnOwotCi0gICAgaWYg KG5ldHQgIT0gTkVUX1RDUEIpCi0gICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAgICAgICAg ICAgLyogQlNEIHNvY2tldCBzdXBwb3J0ICovCi0KLSAgICBuZXRjbG9zKCk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBDbG9zZSBhbnkgcHJldmlvdXMgY29ubmVjdGlvbi4gKi8KLSAgICBj a3N0cm5jcHkobmFtZWNvcHksIG5hbWUsIE5BTUVDUFlMKTsgLyogQ29weSB0aGUgaG9zdG5hbWUu ICovCi0gICAgLyogRG9uJ3QgZG8gdGhpcy4gKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgLyogZmRj ICovCi0gICAgaWYgKHR0bnByb3RvICE9IE5QX1RDUFJBVykKLSAgICAgIHR0bnByb3RvID0gTlBf Tk9ORTsgICAgICAgICAgICAgICAvKiBObyBwcm90b2NvbCBzZWxlY3RlZCB5ZXQuICovCi0jZW5k aWYJLyogQ09NTUVOVCAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAvKiBKZWZmICovCi0gICAgaWYg KHR0bnByb3RvICE9IE5QX1RDUF9SQVcgJiYKLQl0dG5wcm90byAhPSBOUF9TU0xfUkFXICYmCi0J dHRucHJvdG8gIT0gTlBfVExTX1JBVykKLSAgICAgIHR0bnByb3RvID0gTlBfTk9ORTsgICAgICAg ICAgICAgICAvKiBObyBwcm90b2NvbCBzZWxlY3RlZCB5ZXQuICovCi0jZW5kaWYgLyogQ09NTUVO VCAqLwotICAgIGRlYnVnKEYxMTAsInRjcHNydl9vcGVuIG5hbWVjb3B5IixuYW1lY29weSwwKTsK LQotICAgIHAgPSBuYW1lY29weTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFdhcyBhIHNlcnZp Y2UgcmVxdWVzdGVkPyAqLwotICAgIHdoaWxlICgqcCAhPSAnXDAnICYmICpwICE9ICc6JykKLSAg ICAgIHArKzsgLyogTG9vayBmb3IgY29sb24gKi8KLSAgICBpZiAoKnAgPT0gJzonKSB7ICAgICAg ICAgICAgICAgICAgICAvKiBIYXZlIGEgY29sb24gKi8KLSAgICAgICAgKnArKyA9ICdcMCc7ICAg ICAgICAgICAgICAgICAgICAvKiBHZXQgc2VydmljZSBuYW1lIG9yIG51bWJlciAqLwotICAgIH0g ZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSB1c2Uga2VybWl0 ICovCi0gICAgICAgIHAgPSAia2VybWl0IjsKLSAgICB9Ci0gICAgZGVidWcoRjExMCwidGNwc3J2 X29wZW4gc2VydmljZSByZXF1ZXN0ZWQiLHAsMCk7Ci0gICAgaWYgKGlzZGlnaXQoKnApKSB7ICAg ICAgICAgICAgICAgICAgLyogVXNlIHNvY2tldCBudW1iZXIgd2l0aG91dCBsb29rdXAgKi8KLSAg ICAgICAgc2VydmljZSA9ICZzZXJ2cmVjOwotICAgICAgICBzZXJ2aWNlLT5zX3BvcnQgPSBodG9u cygodW5zaWduZWQgc2hvcnQpYXRvaShwKSk7Ci0gICAgfSBlbHNlIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogT3RoZXJ3aXNlIGxvb2t1cCB0aGUgc2VydmljZSBuYW1lICovCi0gICAg ICAgIHNlcnZpY2UgPSBnZXRzZXJ2YnluYW1lKHAsICJ0Y3AiKTsKLSAgICB9Ci0gICAgaWYgKCFz ZXJ2aWNlICYmICFzdHJjbXAoImtlcm1pdCIscCkpIHsgLyogVXNlIEtlcm1pdCBzZXJ2aWNlIHBv cnQgKi8KLSAgICAgICAgc2VydmljZSA9ICZzZXJ2cmVjOwotICAgICAgICBzZXJ2aWNlLT5zX3Bv cnQgPSBodG9ucygxNjQ5KTsKLSAgICB9Ci0jaWZkZWYgUkxPR0NPREUKLSAgICBpZiAoc2Vydmlj ZSAmJiAhc3RyY21wKCJsb2dpbiIscCkgJiYgc2VydmljZS0+c19wb3J0ICE9IGh0b25zKDUxMykp IHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgIiAgV2FybmluZzog bG9naW4gc2VydmljZSBvbiBwb3J0ICVkIGluc3RlYWQgb2YgcG9ydCA1MTNcbiIsCi0gICAgICAg ICAgICAgICAgIG50b2hzKHNlcnZpY2UtPnNfcG9ydCkpOwotICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgIiAgRWRpdCBTRVJWSUNFUyBmaWxlIGlmIFJMT0dJTiBmYWlscyB0byBjb25uZWN0LlxuIik7 Ci0gICAgICAgIGRlYnVnKEYxMDEsInRjcHNydl9vcGVuIGxvZ2luIG9uIHBvcnQiLCIiLG50b2hz KHNlcnZpY2UtPnNfcG9ydCkpOwotICAgIH0KLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotICAgIGlm ICghc2VydmljZSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbm5vdCBmaW5kIHBvcnQg Zm9yIHNlcnZpY2U6ICVzXG4iLCBwKTsKLSAgICAgICAgZGVidWcoRjExMSwidGNwc3J2X29wZW4g Y2FuJ3QgZ2V0IHNlcnZpY2UiLHAsZXJybm8pOwotICAgICAgICBlcnJubyA9IDA7ICAgICAgICAg ICAgICAgICAgICAgIC8qIHJhdGhlciB0aGFuIG1pc2xlYWQgKi8KLSAgICAgICAgcmV0dXJuKC0x KTsKLSAgICB9Ci0KLSAgICAvKiBJZiB3ZSBjdXJyZW50bHkgaGF2ZSBhIGxpc3RlbiBhY3RpdmUg YnV0IHBvcnQgaGFzIGNoYW5nZWQgdGhlbiBjbG9zZSAqLwotCi0gICAgZGVidWcoRjEwMSwidGNw c3J2X29wZW4gY2hlY2tpbmcgcHJldmlvdXMgY29ubmVjdGlvbiIsIiIsdGNwc3JmZCk7Ci0gICAg ZGVidWcoRjEwMSwidGNwc3J2X29wZW4gcHJldmlvdXMgdGNwc3J2X3BvcnQiLCIiLHRjcHNydl9w b3J0KTsKLSAgICBpZiAodGNwc3JmZCAhPSAtMSAmJgotICAgICAgICB0Y3BzcnZfcG9ydCAhPSBu dG9ocygodW5zaWduZWQgc2hvcnQpc2VydmljZS0+c19wb3J0KSkgewotICAgICAgICBkZWJ1ZyhG MTAwLCJ0Y3BzcnZfb3BlbiBjbG9zaW5nIHByZXZpb3VzIGNvbm5lY3Rpb24iLCIiLDApOwotI2lm ZGVmIFRDUElQTElCCi0gICAgICAgIHNvY2tldF9jbG9zZSh0Y3BzcmZkKTsKLSNlbHNlCi0gICAg ICAgIGNsb3NlKHRjcHNyZmQpOwotI2VuZGlmIC8qIFRDUElQTElCICovCi0gICAgICAgIHRjcHNy ZmQgPSAtMTsKLSAgICB9Ci0gICAgZGVidWcoRjEwMCwidGNwc3J2X29wZW4gdGNwc3JmZCIsIiIs dGNwc3JmZCk7Ci0gICAgaWYgKHRjcHNyZmQgPT0gLTEpIHsKLQotICAgICAgICAvKiBTZXQgdXAg c29ja2V0IHN0cnVjdHVyZSBhbmQgZ2V0IGhvc3QgYWRkcmVzcyAqLwotCi0gICAgICAgIGJ6ZXJv KChjaGFyICopJnNhZGRyLCBzaXplb2Yoc2FkZHIpKTsKLSAgICAgICAgZGVidWcoRjEwMCwidGNw c3J2X29wZW4gYnplcm8gb2siLCIiLDApOwotICAgICAgICBzYWRkci5zaW5fZmFtaWx5ID0gQUZf SU5FVDsKLSAgICAgICAgaWYgKHRjcF9hZGRyZXNzKSB7Ci0jaWZkZWYgSU5BRERSWAotICAgICAg ICAgICAgaW5hZGRyeCA9IGluZXRfYWRkcih0Y3BfYWRkcmVzcyk7Ci0gICAgICAgICAgICBzYWRk ci5zaW5fYWRkci5zX2FkZHIgPSAqKHVuc2lnbmVkIGxvbmcgKikmaW5hZGRyeDsKLSNlbHNlCi0g ICAgICAgICAgICBzYWRkci5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIodGNwX2FkZHJlc3Mp OwotI2VuZGlmIC8qIElOQUREUlggKi8KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgc2FkZHIu c2luX2FkZHIuc19hZGRyID0gSU5BRERSX0FOWTsKLQotICAgICAgICAvKiBHZXQgYSBmaWxlIGRl c2NyaXB0b3IgZm9yIHRoZSBjb25uZWN0aW9uLiAqLwotCi0gICAgICAgIHNhZGRyLnNpbl9wb3J0 ID0gc2VydmljZS0+c19wb3J0OwotICAgICAgICBpcGFkZHJbMF0gPSAnXDAnOwotCi0gICAgICAg IGRlYnVnKEYxMDAsInRjcHNydl9vcGVuIGNhbGxpbmcgc29ja2V0IiwiIiwwKTsKLSAgICAgICAg aWYgKCh0Y3BzcmZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKSkgPCAwKSB7Ci0g ICAgICAgICAgICBwZXJyb3IoIlRDUCBzb2NrZXQgZXJyb3IiKTsKLSAgICAgICAgICAgIGRlYnVn KEYxMDEsInRjcHNydl9vcGVuIHNvY2tldCBlcnJvciIsIiIsZXJybm8pOwotICAgICAgICAgICAg cmV0dXJuICgtMSk7Ci0gICAgICAgIH0KLSAgICAgICAgZXJybm8gPSAwOwotCi0gICAgICAgIC8q IFNwZWNpZnkgdGhlIFBvcnQgbWF5IGJlIHJldXNlZCAqLwotCi0gICAgICAgIGRlYnVnKEYxMDAs InRjcHNydl9vcGVuIGNhbGxpbmcgc2V0c29ja29wdCIsIiIsMCk7Ci0gICAgICAgIHggPSBzZXRz b2Nrb3B0KHRjcHNyZmQsCi0gICAgICAgICAgICAgICAgICAgICAgIFNPTF9TT0NLRVQsU09fUkVV U0VBRERSLChjaGFyICopJm9uLHNpemVvZiBvbik7Ci0gICAgICAgIGRlYnVnKEYxMDEsInRjcHNy dl9vcGVuIHNldHNvY2tvcHQiLCIiLHgpOwotCi0gICAgICAgLyogTm93IGJpbmQgdG8gdGhlIHNv Y2tldCAqLwotICAgICAgICBwcmludGYoIlxuQmluZGluZyBzb2NrZXQgdG8gcG9ydCAlZCAuLi5c biIsCi0gICAgICAgICAgICAgICBudG9ocygodW5zaWduZWQgc2hvcnQpc2VydmljZS0+c19wb3J0 KSk7Ci0gICAgICAgIGlmIChiaW5kKHRjcHNyZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2FkZHIs IHNpemVvZihzYWRkcikpIDwgMCkgewotICAgICAgICAgICAgaSA9IGVycm5vOyAgICAgICAgICAg ICAgICAgIC8qIFNhdmUgZXJyb3IgY29kZSAqLwotI2lmZGVmIFRDUElQTElCCi0gICAgICAgICAg ICBzb2NrZXRfY2xvc2UodGNwc3JmZCk7Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwotICAgICAgICAg ICAgY2xvc2UodGNwc3JmZCk7Ci0jZW5kaWYgLyogVENQSVBMSUIgKi8KLSAgICAgICAgICAgIHRj cHNyZmQgPSAtMTsKLSAgICAgICAgICAgIHRjcHNydl9wb3J0ID0gMDsKLSAgICAgICAgICAgIHR0 eWZkID0gLTE7Ci0gICAgICAgICAgICB3YXNjbG9zZWQgPSAxOwotICAgICAgICAgICAgZXJybm8g PSBpOyAgICAgICAgICAgICAgICAgIC8qIGFuZCByZXBvcnQgdGhpcyBlcnJvciAqLwotICAgICAg ICAgICAgZGVidWcoRjEwMSwidGNwc3J2X29wZW4gYmluZCBlcnJubyIsIiIsZXJybm8pOwotICAg ICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGJpbmQgdG8gc29ja2V0IChlcnJubyA9ICVkKVxu IixlcnJubyk7Ci0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0gICAgICAgIGRl YnVnKEYxMDAsInRjcHNydl9vcGVuIGJpbmQgT0siLCIiLDApOwotICAgICAgICBwcmludGYoIkxp c3RlbmluZyAuLi5cbiIpOwotICAgICAgICBpZiAobGlzdGVuKHRjcHNyZmQsIDE1KSA8IDApIHsK LSAgICAgICAgICAgIGkgPSBlcnJubzsgICAgICAgICAgICAgICAgICAvKiBTYXZlIGVycm9yIGNv ZGUgKi8KLSNpZmRlZiBUQ1BJUExJQgotICAgICAgICAgICAgc29ja2V0X2Nsb3NlKHRjcHNyZmQp OwotI2Vsc2UgLyogVENQSVBMSUIgKi8KLSAgICAgICAgICAgIGNsb3NlKHRjcHNyZmQpOwotI2Vu ZGlmIC8qIFRDUElQTElCICovCi0gICAgICAgICAgICB0Y3BzcmZkID0gLTE7Ci0gICAgICAgICAg ICB0Y3BzcnZfcG9ydCA9IDA7Ci0gICAgICAgICAgICB0dHlmZCA9IC0xOwotICAgICAgICAgICAg d2FzY2xvc2VkID0gMTsKLSAgICAgICAgICAgIGVycm5vID0gaTsgICAgICAgICAgICAgICAgICAv KiBBbmQgcmVwb3J0IHRoaXMgZXJyb3IgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMDEsInRjcHNy dl9vcGVuIGxpc3RlbiBlcnJubyIsIiIsZXJybm8pOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsK LSAgICAgICAgfQotICAgICAgICBkZWJ1ZyhGMTAwLCJ0Y3BzcnZfb3BlbiBsaXN0ZW4gT0siLCIi LDApOwotICAgICAgICB0Y3BzcnZfcG9ydCA9IG50b2hzKCh1bnNpZ25lZCBzaG9ydClzZXJ2aWNl LT5zX3BvcnQpOwotICAgIH0KLQotI2lmZGVmIENLX1NTTAotICAgIGlmIChja19zc2xlYXlfaXNf aW5zdGFsbGVkKCkpIHsKLSAgICAgICAgaWYgKCFzc2xfdG5faW5pdChTU0xfU0VSVkVSKSkgewot ICAgICAgICAgICAgc3NsX2ZhaWxlZCA9IDE7Ci0gICAgICAgICAgICBpZiAoYmlvX2VyciE9TlVM TCkgewotICAgICAgICAgICAgICAgIEJJT19wcmludGYoYmlvX2VyciwiZG9fc3NsZWF5X2luaXQo KSBmYWlsZWRcbiIpOwotICAgICAgICAgICAgICAgIEVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7 Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZmbHVzaChzdGRlcnIpOwot ICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJkb19zc2xlYXlfaW5pdCgpIGZhaWxlZFxu Iik7Ci0gICAgICAgICAgICAgICAgRVJSX3ByaW50X2Vycm9yc19mcChzdGRlcnIpOwotICAgICAg ICAgICAgfQotICAgICAgICAgICAgaWYgKHRsc19vbmx5X2ZsYWcgfHwgc3NsX29ubHlfZmxhZykg ewotI2lmZGVmIFRDUElQTElCCi0gICAgICAgICAgICAgICAgc29ja2V0X2Nsb3NlKHR0eWZkKTsK LSAgICAgICAgICAgICAgICBzb2NrZXRfY2xvc2UodGNwc3JmZCk7Ci0jZWxzZSAvKiBUQ1BJUExJ QiAqLwotICAgICAgICAgICAgICAgIGNsb3NlKHR0eWZkKTsKLSAgICAgICAgICAgICAgICBjbG9z ZSh0Y3BzcmZkKTsKLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotICAgICAgICAgICAgICAgIHR0eWZk ID0gLTE7Ci0gICAgICAgICAgICAgICAgd2FzY2xvc2VkID0gMTsKLSAgICAgICAgICAgICAgICB0 Y3BzcmZkID0gLTE7Ci0gICAgICAgICAgICAgICAgdGNwc3J2X3BvcnQgPSAwOwotICAgICAgICAg ICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiB3ZSB3aWxs IGNvbnRpbnVlIHRvIGFjY2VwdCB0aGUgY29ubmVjdGlvbiAgICovCi0gICAgICAgICAgICAvKiB3 aXRob3V0IFNTTCBvciBUTFMgc3VwcG9ydCB1bmxlc3MgcmVxdWlyZWQuICovCi0gICAgICAgICAg ICBpZiAoIFRFTE9QVF9ERUZfU19NRV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpICE9IFROX05HX01V ICkKLSAgICAgICAgICAgICAgICBURUxPUFRfREVGX1NfTUVfTU9ERShURUxPUFRfU1RBUlRfVExT KSA9IFROX05HX1JGOwotICAgICAgICAgICAgaWYgKCBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9Q VF9TVEFSVF9UTFMpICE9IFROX05HX01VICkKLSAgICAgICAgICAgICAgICBURUxPUFRfREVGX1Nf VV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpID0gVE5fTkdfUkY7Ci0gICAgICAgICAgICBpZiAoIFRF TE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpICE9IFROX05HX01VICkKLSAgICAg ICAgICAgICAgICBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfU1RBUlRfVExTKSA9IFROX05H X1JGOwotICAgICAgICAgICAgaWYgKCBURUxPUFRfREVGX0NfVV9NT0RFKFRFTE9QVF9TVEFSVF9U TFMpICE9IFROX05HX01VICkKLSAgICAgICAgICAgICAgICBURUxPUFRfREVGX0NfVV9NT0RFKFRF TE9QVF9TVEFSVF9UTFMpID0gVE5fTkdfUkY7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyog Q0tfU1NMICovCi0KLSAgICBwcmludGYoIlxuV2FpdGluZyB0byBBY2NlcHQgYSBUQ1AvSVAgY29u bmVjdGlvbiBvbiBwb3J0ICVkIC4uLlxuIiwKLSAgICAgICAgICAgbnRvaHMoKHVuc2lnbmVkIHNo b3J0KXNlcnZpY2UtPnNfcG9ydCkpOwotICAgIHNhZGRybGVuID0gc2l6ZW9mKHNhZGRyKTsKLQot I2lmZGVmIEJTRFNFTEVDVAotICAgIHR2LnR2X3NlYyAgPSB0di50dl91c2VjID0gMEw7Ci0gICAg aWYgKHRpbW8gPCAwKQotICAgICAgdHYudHZfdXNlYyA9IChsb25nKSAtdGltbyAqIDEwMDAwTDsK LSAgICBlbHNlCi0gICAgICB0di50dl9zZWMgPSB0aW1vOwotICAgIGRlYnVnKEYxMDEsInRjcHNy dl9vcGVuIEJTRFNFTEVDVCIsIiIsdGltbyk7Ci0jZWxzZQotICAgIGRlYnVnKEYxMDEsInRjcHNy dl9vcGVuIG5vdCBCU0RTRUxFQ1QiLCIiLHRpbW8pOwotI2VuZGlmIC8qIEJTRFNFTEVDVCAqLwot Ci0gICAgaWYgKHRpbW8pIHsKLSAgICAgICAgd2hpbGUgKCFyZWFkeV90b19hY2NlcHQpIHsKLSNp ZmRlZiBCU0RTRUxFQ1QKLSAgICAgICAgICAgIEZEX1pFUk8oJnJmZHMpOwotICAgICAgICAgICAg RkRfU0VUKHRjcHNyZmQsICZyZmRzKTsKLSAgICAgICAgICAgIHJlYWR5X3RvX2FjY2VwdCA9Ci0g ICAgICAgICAgICAgICgoc2VsZWN0KEZEX1NFVFNJWkUsCi0jaWZkZWYgSFBVWAotI2lmZGVmIEhQ VVgxMDEwCi0gICAgICAgICAgICAgICAgICAgICAgIChmZF9zZXQgKikKLSNlbHNlCi0KLSAgICAg ICAgICAgICAgICAgICAgICAgKGludCAqKQotI2VuZGlmIC8qIEhQVVgxMDEwICovCi0jZWxzZQot I2lmZGVmIF9fREVDQwotI2lmZGVmIElOVFNFTEVDVAotICAgICAgICAgICAgICAgICAgICAgICAo aW50ICopCi0jZWxzZSAvKiBkZWYgSU5UU0VMRUNUICovCi0gICAgICAgICAgICAgICAgICAgICAg IChmZF9zZXQgKikKLSNlbmRpZiAvKiBkZWYgSU5UU0VMRUNUIFtlbHNlXSAqLwotI2VuZGlmIC8q IF9fREVDQyAqLwotI2VuZGlmIC8qIEhQVVggKi8KLSAgICAgICAgICAgICAgICAgICAgICAgJnJm ZHMsIE5VTEwsIE5VTEwsICZ0dikgPiAwKSAmJgotICAgICAgICAgICAgICAgRkRfSVNTRVQodGNw c3JmZCwgJnJmZHMpKTsKLSNlbHNlIC8qIEJTRFNFTEVDVCAqLwotI2lmZGVmIElCTVNFTEVDVAot I2RlZmluZSBja19zbGVlcGludCAyNTAKLSAgICAgICAgICAgIHJlYWR5X3RvX2FjY2VwdCA9Ci0g ICAgICAgICAgICAgIChzZWxlY3QoJnRjcHNyZmQsIDEsIDAsIDAsCi0gICAgICAgICAgICAgICAg ICAgICAgdGltbyA8IDAgPyAtdGltbyA6Ci0gICAgICAgICAgICAgICAgICAgICAgKHRpbW8gPiAw ID8gdGltbyAqIDEwMDBMIDogY2tfc2xlZXBpbnQpKSA9PSAxCi0gICAgICAgICAgICAgICApOwot I2Vsc2UKLSNpZmRlZiBCRUxMU0VMRUNUCi0gICAgICAgICAgICBGRF9aRVJPKHJmZHMpOwotICAg ICAgICAgICAgRkRfU0VUKHRjcHNyZmQsIHJmZHMpOwotICAgICAgICAgICAgcmVhZHlfdG9fYWNj ZXB0ID0KLSAgICAgICAgICAgICAgKChzZWxlY3QoMTI4LCByZmRzLCBOVUxMLCBOVUxMLCB0aW1v IDwgMCA/IC10aW1vIDoKLSAgICAgICAgICAgICAgICAgICAgICAodGltbyA+IDAgPyB0aW1vICog MTAwMEwpKSA+IDApICYmCi0gICAgICAgICAgICAgICBGRF9JU1NFVCh0Y3BzcmZkLCByZmRzKSk7 Ci0jZWxzZQotLyogVHJ5IHRoaXMgLSB3aGF0J3MgdGhlIHdvcnN0IHRoYXQgY2FuIGhhcHBlbi4u LiAqLwotCi0gICAgICAgICAgICBGRF9aRVJPKCZyZmRzKTsKLSAgICAgICAgICAgIEZEX1NFVCh0 Y3BzcmZkLCAmcmZkcyk7Ci0gICAgICAgICAgICByZWFkeV90b19hY2NlcHQgPQotICAgICAgICAg ICAgICAoKHNlbGVjdChGRF9TRVRTSVpFLAotICAgICAgICAgICAgICAgICAgICAgICAoZmRfc2V0 ICopICZyZmRzLCBOVUxMLCBOVUxMLCAmdHYpID4gMCkgJiYKLSAgICAgICAgICAgICAgIEZEX0lT U0VUKHRjcHNyZmQsICZyZmRzKSk7Ci0KLSNlbmRpZiAvKiBCRUxMU0VMRUNUICovCi0jZW5kaWYg LyogSUJNU0VMRUNUICovCi0jZW5kaWYgLyogQlNEU0VMRUNUICovCi0gICAgICAgIH0KLSAgICB9 Ci0gICAgaWYgKHJlYWR5X3RvX2FjY2VwdCB8fCB0aW1vID09IDApIHsKLSAgICAgICAgaWYgKCh0 dHlmZCA9IGFjY2VwdCh0Y3BzcmZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1 Y3Qgc29ja2FkZHIgKikmc2FkZHIsJnNhZGRybGVuKSkgPCAwKSB7Ci0gICAgICAgICAgICBpID0g ZXJybm87ICAgICAgICAgICAgICAgICAgLyogc2F2ZSBlcnJvciBjb2RlICovCi0jaWZkZWYgVENQ SVBMSUIKLSAgICAgICAgICAgIHNvY2tldF9jbG9zZSh0Y3BzcmZkKTsKLSNlbHNlIC8qIFRDUElQ TElCICovCi0gICAgICAgICAgICBjbG9zZSh0Y3BzcmZkKTsKLSNlbmRpZiAvKiBUQ1BJUExJQiAq LwotICAgICAgICAgICAgdHR5ZmQgPSAtMTsKLSAgICAgICAgICAgIHdhc2Nsb3NlZCA9IDE7Ci0g ICAgICAgICAgICB0Y3BzcmZkID0gLTE7Ci0gICAgICAgICAgICB0Y3BzcnZfcG9ydCA9IDA7Ci0g ICAgICAgICAgICBlcnJubyA9IGk7ICAgICAgICAgICAgICAgICAgLyogYW5kIHJlcG9ydCB0aGlz IGVycm9yICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ0Y3BzcnZfb3BlbiBhY2NlcHQgZXJy bm8iLCIiLGVycm5vKTsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLSAgICAg ICAgc2V0c29ja29wdCh0dHlmZCwgU09MX1NPQ0tFVCwgU09fT09CSU5MSU5FLChjaGFyICopICZv biwgc2l6ZW9mIG9uKTsKLQotI2lmbmRlZiBOT1RDUE9QVFMKLSNpZm5kZWYgZGF0YWdlbmVyYWwK LSNpZmRlZiBTT0xfU09DS0VUCi0jaWZkZWYgVENQX05PREVMQVkKLSAgICAgICAgbm9fZGVsYXko dHR5ZmQsdGNwX25vZGVsYXkpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJ0Y3BzcnZfb3BlbiBub19k ZWxheSIsIiIsdGNwX25vZGVsYXkpOwotI2VuZGlmIC8qIFRDUF9OT0RFTEFZICovCi0jaWZkZWYg U09fS0VFUEFMSVZFCi0gICAgICAgIGtlZXBhbGl2ZSh0dHlmZCx0Y3Bfa2VlcGFsaXZlKTsKLSAg ICAgICAgZGVidWcoRjEwMSwidGNwc3J2X29wZW4ga2VlcGFsaXZlIiwiIix0Y3Bfa2VlcGFsaXZl KTsKLSNlbmRpZiAvKiBTT19LRUVQQUxJVkUgKi8KLSNpZmRlZiBTT19MSU5HRVIKLSAgICAgICAg Y2tfbGluZ2VyKHR0eWZkLHRjcF9saW5nZXIsIHRjcF9saW5nZXJfdG1vKTsKLSAgICAgICAgZGVi dWcoRjEwMSwidGNwc3J2X29wZW4gbGluZ2VyIiwiIix0Y3BfbGluZ2VyX3Rtbyk7Ci0jZW5kaWYg LyogU09fTElOR0VSICovCi0jaWZkZWYgU09fU05EQlVGCi0gICAgICAgIHNlbmRidWYodHR5ZmQs dGNwX3NlbmRidWYpOwotI2VuZGlmIC8qIFNPX1NOREJVRiAqLwotI2lmZGVmIFNPX1JDVkJVRgot ICAgICAgICByZWN2YnVmKHR0eWZkLHRjcF9yZWN2YnVmKTsKLSNlbmRpZiAvKiBTT19SQ1ZCVUYg Ki8KLSNlbmRpZiAvKiBTT0xfU09DS0VUICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNl bmRpZiAvKiBOT1RDUE9QVFMgKi8KLQotICAgICAgICB0dG5ldCA9IG5ldHQ7ICAgICAgICAgICAg ICAgICAgIC8qIFRDUC9JUCAoc29ja2V0cykgbmV0d29yayAqLwotICAgICAgICB0Y3BfaW5jb21p bmcgPSAxOyAgICAgICAgICAgICAgIC8qIFRoaXMgaXMgYW4gaW5jb21pbmcgY29ubmVjdGlvbiAq LwotICAgICAgICBzc3RlbG5ldCA9IDE7ICAgICAgICAgICAgICAgICAgIC8qIERvIHNlcnZlci1z aWRlIFRlbG5ldCBwcm90b2NvbCAqLwotCi0gICAgICAgIC8qIFNlZSBpZiB0aGUgc2VydmljZSBp cyBURUxORVQuICovCi0gICAgICAgIHggPSAodW5zaWduZWQgc2hvcnQpc2VydmljZS0+c19wb3J0 OwotICAgICAgICBzZXJ2aWNlMiA9IGdldHNlcnZieW5hbWUoInRlbG5ldCIsICJ0Y3AiKTsKLSAg ICAgICAgaWYgKHNlcnZpY2UyICYmIHggPT0gc2VydmljZTItPnNfcG9ydCkgewotI2lmZGVmIENP TU1FTlQKLQkgICAgLyogSmVmZiAyMDA1LzEyLzMwICovCi0JICAgIGlmICh0dG5wcm90byAhPSBO UF9UQ1BSQVcgJiYgLyogWWVzLi4uICovCi0JCSB0dG5wcm90byAhPSBOUF9TU0xfUkFXICYmCi0J CSB0dG5wcm90byAhPSBOUF9UTFNfUkFXKSAvKiBhbmQgaWYgcmF3IHBvcnQgbm90IHJlcXVlc3Rl ZCAqLwotI2Vsc2UKLQkgICAgLyogZmRjIDIwMDUvMTIvMDQgKi8KLSAgICAgICAgICAgIGlmICh0 dG5wcm90byAhPSBOUF9UQ1BSQVcpICAvKiBZZXMgYW5kIGlmIHJhdyBwb3J0IG5vdCByZXF1ZXN0 ZWQgKi8KLSNlbmRpZgkvKiAgKi8KLSAgICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9URUxORVQ7 CS8qIHNldCBwcm90b2NvbCB0byBURUxORVQuICovCi0gICAgICAgIH0KLSAgICAgICAgY2tzdHJu Y3B5KGlwYWRkciwoY2hhciAqKWluZXRfbnRvYShzYWRkci5zaW5fYWRkciksMjApOwotICAgICAg ICBpZiAodGNwX3JkbnMpIHsKLSAgICAgICAgICAgIGlmICghcXVpZXQpIHsKLSAgICAgICAgICAg ICAgICBwcmludGYoIiBSZXZlcnNlIEROUyBMb29rdXAuLi4gIik7Ci0gICAgICAgICAgICAgICAg ZmZsdXNoKHN0ZG91dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaG9zdCA9IGdl dGhvc3RieWFkZHIoKGNoYXIgKikmc2FkZHIuc2luX2FkZHIsNCxQRl9JTkVUKSkgewotICAgICAg ICAgICAgICAgIGhvc3QgPSBja19jb3B5aG9zdGVudChob3N0KTsKLSAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTAwLCJ0Y3BzcnZfb3BlbiBnZXRob3N0YnlhZGRyICE9IE5VTEwiLCIiLDApOwotICAg ICAgICAgICAgICAgIGlmICghcXVpZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIo T0spXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7Ci0gICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgIG5hbWVbMF0gPSAnKic7Ci0gICAgICAgICAgICAgICAg Y2tzdHJuY3B5KCZuYW1lWzFdLGhvc3QtPmhfbmFtZSw3OCk7Ci0gICAgICAgICAgICAgICAgY2tz dHJuY2F0KG5hbWUsIjoiLDgwLXN0cmxlbihuYW1lKSk7Ci0gICAgICAgICAgICAgICAgY2tzdHJu Y2F0KG5hbWUscCw4MC1zdHJsZW4obmFtZSkpOwotICAgICAgICAgICAgICAgIGlmICghcXVpZXQK LSNpZm5kZWYgTk9JQ1AKLSAgICAgICAgICAgICAgICAgICAgJiYgIWRvY29ueAotI2VuZGlmIC8q IE5PSUNQICovCi0gICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgIHByaW50 ZigiJXMgY29ubmVjdGVkIG9uIHBvcnQgJXNcbiIsaG9zdC0+aF9uYW1lLHApOwotICAgICAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoIXF1aWV0KSBwcmludGYoIkZhaWxlZC5c biIpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCFxdWlldCkgcHJpbnRmKCIo T0spXG4iKTsKLQotICAgICAgICBpZiAoIXRjcF9yZG5zIHx8ICFob3N0KSB7Ci0gICAgICAgICAg ICBja3N0cm5jcHkobmFtZSxpcGFkZHIsODApOwotICAgICAgICAgICAgY2tzdHJuY2F0KG5hbWUs IjoiLDgwKTsKLSAgICAgICAgICAgIGNrc3RybmNhdChuYW1lLGNrdWl0b2EobnRvaHMoc2FkZHIu c2luX3BvcnQpKSw4MCk7Ci0gICAgICAgICAgICBpZiAoIXF1aWV0Ci0jaWZuZGVmIE5PSUNQCi0g ICAgICAgICAgICAgICAgJiYgIWRvY29ueAotI2VuZGlmIC8qIE5PSUNQICovCi0gICAgICAgICAg ICAgICAgKQotICAgICAgICAgICAgICBwcmludGYoIiVzIGNvbm5lY3RlZCBvbiBwb3J0ICVkXG4i LGlwYWRkcixudG9ocyhzYWRkci5zaW5fcG9ydCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgh cXVpZXQpIGZmbHVzaChzdGRvdXQpOwotCi0jaWZkZWYgQ0tfU0VDVVJJVFkKLSAgICAgICAgLyog QmVmb3JlIEluaXRpYWxpemF0aW9uIFRlbG5ldC9SbG9naW4gTmVnb3RpYXRpb25zIEluaXQgS2Vy YmVyb3MgKi8KLSAgICAgICAgY2tfYXV0aF9pbml0KCh0Y3BfcmRucyAmJiBob3N0ICYmIGhvc3Qt PmhfbmFtZSAmJiBob3N0LT5oX25hbWVbMF0pID8KLSAgICAgICAgICAgICAgICAgICAgIChjaGFy ICopaG9zdC0+aF9uYW1lIDogaXBhZGRyLAotICAgICAgICAgICAgICAgICAgICAgaXBhZGRyLAot ICAgICAgICAgICAgICAgICAgICAgdWlkYnVmLAotICAgICAgICAgICAgICAgICAgICAgdHR5ZmQK LSAgICAgICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYgLyogQ0tfU0VDVVJJVFkgKi8KLQotI2lm ZGVmIENLX1NTTAotICAgICAgICBpZiAoY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpICYmICFzc2xf ZmFpbGVkKSB7Ci0gICAgICAgICAgICBpZiAoY2tfc3NsX2luY29taW5nKHR0eWZkKSA8IDApIHsK LSNpZmRlZiBUQ1BJUExJQgotICAgICAgICAgICAgICAgICAgICBzb2NrZXRfY2xvc2UodHR5ZmQp OwotICAgICAgICAgICAgICAgICAgICBzb2NrZXRfY2xvc2UodGNwc3JmZCk7Ci0jZWxzZSAvKiBU Q1BJUExJQiAqLwotICAgICAgICAgICAgICAgICAgICBjbG9zZSh0dHlmZCk7Ci0gICAgICAgICAg ICAgICAgICAgIGNsb3NlKHRjcHNyZmQpOwotI2VuZGlmIC8qIFRDUElQTElCICovCi0gICAgICAg ICAgICAgICAgICAgIHR0eWZkID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgIHdhc2Nsb3NlZCA9 IDE7Ci0gICAgICAgICAgICAgICAgICAgIHRjcHNyZmQgPSAtMTsKLSAgICAgICAgICAgICAgICAg ICAgdGNwc3J2X3BvcnQgPSAwOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAg ICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSNpZm5kZWYgZGF0 YWdlbmVyYWwKLSAgICAgICAgLyogRmluZCBvdXQgb3VyIG93biBJUCBhZGRyZXNzLiAqLwotICAg ICAgICBsX3NsZW4gPSBzaXplb2YobF9hZGRyKTsKLSAgICAgICAgYnplcm8oKGNoYXIgKikmbF9h ZGRyLCBsX3NsZW4pOwotI2lmbmRlZiBFWENFTEFOCi0gICAgICAgIGlmICghZ2V0c29ja25hbWUo dHR5ZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmbF9hZGRyLCAmbF9zbGVuKSkgewotICAgICAgICAg ICAgY2hhciAqIHMgPSAoY2hhciAqKWluZXRfbnRvYShsX2FkZHIuc2luX2FkZHIpOwotICAgICAg ICAgICAgY2tzdHJuY3B5KG15aXBhZGRyLCBzLDIwKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAs ImdldHNvY2tuYW1lIixteWlwYWRkciwwKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIEVYQ0VMQU4g Ki8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotCi0gICAgICAgIGlmICh0bl9pbmkoKSA8IDAp ICAgICAgICAgICAgICAgLyogU3RhcnQgVEVMTkVUIG5lZ290aWF0aW9ucy4gKi8KLSAgICAgICAg ICBpZiAodHRjaGsoKSA8IDApIHsgICAgICAgICAgICAvKiBEaXNjb25uZWN0ZWQ/ICovCi0gICAg ICAgICAgICAgIGkgPSBlcnJubzsgICAgICAgICAgICAgICAgLyogc2F2ZSBlcnJvciBjb2RlICov Ci0jaWZkZWYgVENQSVBMSUIKLSAgICAgICAgICAgICAgc29ja2V0X2Nsb3NlKHRjcHNyZmQpOwot I2Vsc2UgLyogVENQSVBMSUIgKi8KLSAgICAgICAgICAgICAgY2xvc2UodGNwc3JmZCk7Ci0jZW5k aWYgLyogVENQSVBMSUIgKi8KLSAgICAgICAgICAgICAgdHR5ZmQgPSAtMTsKLSAgICAgICAgICAg ICAgd2FzY2xvc2VkID0gMTsKLSAgICAgICAgICAgICAgdGNwc3JmZCA9IC0xOwotICAgICAgICAg ICAgICB0Y3BzcnZfcG9ydCA9IDA7Ci0gICAgICAgICAgICAgIGVycm5vID0gaTsgICAgICAgICAg ICAgICAgLyogYW5kIHJlcG9ydCB0aGlzIGVycm9yICovCi0gICAgICAgICAgICAgIGRlYnVnKEYx MDEsInRjcHNydl9vcGVuIGFjY2VwdCBlcnJubyIsIiIsZXJybm8pOwotICAgICAgICAgICAgICBy ZXR1cm4oLTEpOwotICAgICAgICAgIH0KLSAgICAgICAgZGVidWcoRjEwMSwidGNwc3J2X29wZW4g c2VydmljZSIsIiIseCk7Ci0gICAgICAgIGlmICgqbGNsIDwgMCkgICAgICAgICAgICAgICAgICAg LyogU2V0IGxvY2FsIG1vZGUuICovCi0gICAgICAgICAgKmxjbCA9IDE7Ci0KLSNpZmRlZiBDS19L RVJCRVJPUwotI2lmZGVmIEtSQjVfVTJVCi0gICAgICAgIGlmICggdHRucHJvdG8gPT0gTlBfSzVV MlUgKSB7Ci0gICAgICAgICAgICBpZiAoazVfdXNlcl90b191c2VyX3NlcnZlcl9hdXRoKCkgIT0g MCkgewotICAgICAgICAgICAgICAgIGkgPSBlcnJubzsgICAgICAgICAgICAgICAgLyogc2F2ZSBl cnJvciBjb2RlICovCi0jaWZkZWYgVENQSVBMSUIKLSAgICAgICAgICAgICAgICBzb2NrZXRfY2xv c2UodGNwc3JmZCk7Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwotICAgICAgICAgICAgICAgIGNsb3Nl KHRjcHNyZmQpOwotI2VuZGlmIC8qIFRDUElQTElCICovCi0gICAgICAgICAgICAgICAgdHR5ZmQg PSAtMTsKLSAgICAgICAgICAgICAgICB3YXNjbG9zZWQgPSAxOwotICAgICAgICAgICAgICAgIHRj cHNyZmQgPSAtMTsKLSAgICAgICAgICAgICAgICB0Y3BzcnZfcG9ydCA9IDA7Ci0gICAgICAgICAg ICAgICAgZXJybm8gPSBpOyAgICAgICAgICAgICAgICAvKiBhbmQgcmVwb3J0IHRoaXMgZXJyb3Ig Ki8KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ0Y3BzcnZfb3BlbiBhY2NlcHQgZXJybm8i LCIiLGVycm5vKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgfQot ICAgICAgICB9Ci0jZW5kaWYgLyogS1JCNV9VMlUgKi8KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAq LwotICAgICAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIERvbmUuICovCi0g ICAgfSBlbHNlIHsKLSAgICAgICAgaSA9IGVycm5vOyAgICAgICAgICAgICAgICAgICAgICAvKiBz YXZlIGVycm9yIGNvZGUgKi8KLSNpZmRlZiBUQ1BJUExJQgotICAgICAgICBzb2NrZXRfY2xvc2Uo dGNwc3JmZCk7Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwotICAgICAgICBjbG9zZSh0Y3BzcmZkKTsK LSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotICAgICAgICB0dHlmZCA9IC0xOwotICAgICAgICB3YXNj bG9zZWQgPSAxOwotICAgICAgICB0Y3BzcmZkID0gLTE7Ci0gICAgICAgIHRjcHNydl9wb3J0ID0g MDsKLSAgICAgICAgZXJybm8gPSBpOyAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgcmVwb3J0 IHRoaXMgZXJyb3IgKi8KLSAgICAgICAgZGVidWcoRjEwMSwidGNwc3J2X29wZW4gYWNjZXB0IGVy cm5vIiwiIixlcnJubyk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotfQotI2VuZGlmIC8q IE5PTElTVEVOICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0j ZW5kaWYgLyogTk9ORVQgKi8KLQotI2lmZGVmIFRDUFNPQ0tFVAotY2hhciAqCi1ja25hbWUyYWRk cihuYW1lKSBjaGFyICogbmFtZTsKLXsKLSNpZmRlZiBIUFVYNQotICAgIHJldHVybigiIik7Ci0j ZWxzZQotICAgIHN0cnVjdCBob3N0ZW50ICpob3N0OwotCi0gICAgaWYgKG5hbWUgPT0gTlVMTCB8 fCAqbmFtZSA9PSAnXDAnKQotICAgICAgICByZXR1cm4oIiIpOwotCi0gICAgaG9zdCA9IGdldGhv c3RieW5hbWUobmFtZSk7Ci0gICAgaWYgKCBob3N0ICkgewotICAgICAgICBob3N0ID0gY2tfY29w eWhvc3RlbnQoaG9zdCk7Ci0gICAgICAgIHJldHVybihpbmV0X250b2EoKigoc3RydWN0IGluX2Fk ZHIgKikgaG9zdC0+aF9hZGRyKSkpOwotICAgIH0KLSAgICByZXR1cm4oIiIpOwotI2VuZGlmIC8q IEhQVVg1ICovCi19Ci0KLWNoYXIgKgotY2thZGRyMm5hbWUoYWRkcikgY2hhciAqIGFkZHI7Ci17 Ci0jaWZkZWYgSFBVWDUKLSAgICByZXR1cm4oIiIpOwotI2Vsc2UKLSAgICBzdHJ1Y3QgaG9zdGVu dCAqaG9zdDsKLSAgICBzdHJ1Y3QgaW5fYWRkciBzaW5fYWRkcjsKLQotICAgIGlmIChhZGRyID09 IE5VTEwgfHwgKmFkZHIgPT0gJ1wwJykKLSAgICAgICAgcmV0dXJuKCIiKTsKLQotICAgIHNpbl9h ZGRyLnNfYWRkciA9IGluZXRfYWRkcihhZGRyKTsKLSAgICBob3N0ID0gZ2V0aG9zdGJ5YWRkcigo Y2hhciAqKSZzaW5fYWRkciw0LEFGX0lORVQpOwotICAgIGlmIChob3N0KSB7Ci0gICAgICAgIGhv c3QgPSBja19jb3B5aG9zdGVudChob3N0KTsKLSAgICAgICAgcmV0dXJuKChjaGFyICopaG9zdC0+ aF9uYW1lKTsKLSAgICB9Ci0gICAgcmV0dXJuKCIiKTsKLSNlbmRpZiAvKiBIUFVYNSAqLwotfQot I2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotCi11bnNpZ25lZCBsb25nIHBlZXJ4aXBhZGRyID0gMEw7 Ci0KLWNoYXIgKgotY2tnZXRwZWVyKCkgewotI2lmZGVmIFRDUFNPQ0tFVAotICAgIHN0YXRpYyBj aGFyIG5hbWVidWZbMjU2XTsKLSAgICBzdGF0aWMgc3RydWN0IGhvc3RlbnQgKmhvc3Q7Ci0gICAg c3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiBzYWRkcjsKLSNpZmRlZiBHUEVFUk5BTUVfVAotICAg IHN0YXRpYyBHUEVFUk5BTUVfVCBzYWRkcmxlbjsKLSNlbHNlCi0jaWZkZWYgUFRYCi0gICAgc3Rh dGljIHNpemVfdCBzYWRkcmxlbjsKLSNlbHNlCi0jaWZkZWYgQUlYNDIKLSAgICAvKiBJdCdzIHNp emVfdCBpbiA0LjIgYnV0IGludCBpbiA0LjEgYW5kIGVhcmxpZXIuICovCi0gICAgLyogTm90ZTog dGhlIDQuMiBtYW4gcGFnZSBsaWVzOyBiZWxpZXZlIHNvY2tldC5oLiAqLwotICAgIHN0YXRpYyBz aXplX3Qgc2FkZHJsZW47Ci0jZWxzZQotI2lmZGVmIFVOSVhXQVJFCi0gICAgc3RhdGljIHNpemVf dCBzYWRkcmxlbjsKLSNlbHNlICAvKiBVTklYV0FSRSAqLwotI2lmZGVmIERFQ19UQ1BJUAotLyog MjAxMC0wMy0wOCBTTVMuCi0gKiBDb2luY2lkZW50YWxseSwgdGhlIGNvbmRpdGlvbiBmb3IgaW50 ZWdlciBhcmd1bWVudHMgaW4gc2VsZWN0KCksCi0gKiB3aGljaCBpcyBhY3R1YWxseSAiZGVmaW5l ZCggX0RFQ0NfVjRfU09VUkNFKSIsIHdvcmtzIGZvciBhbiBpbnRlZ2VyCi0gKiBhcmd1bWVudCBp biBnZXRwZWVybmFtZSgpLiAgU2FkbHksIGR1ZSB0byBhIGxhY2sgb2YgZm9yZXNpZ2h0LAotICog ImRlZmluZWQoIF9ERUNDX1Y0X1NPVVJDRSkiIGRvZXNuJ3Qgd29yayB3aXRoIERFQyBDIFY0LjAs IHNvIHRoZQotICogdXNlci1zcGVjaWZpZWQgSU5UU0VMRUNUIGlzIHVzZWQgaW5zdGVhZC4gIE1v c3QgbGlrZWx5LCAic2l6ZV90IgotICogc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiAidW5zaWdu ZWQgaW50IiwgYnV0IEknbSBhIGNvd2FyZC4KLSAqLwotI2lmZGVmIElOVFNFTEVDVAotICAgIHN0 YXRpYyBpbnQgc2FkZHJsZW47Ci0jZWxzZSAvKiBkZWYgSU5UU0VMRUNUICovCi0gICAgc3RhdGlj IHVuc2lnbmVkIGludCBzYWRkcmxlbjsKLSNlbmRpZiAvKiBkZWYgSU5UU0VMRUNUIFtlbHNlXSAq LwotI2Vsc2UKLSNpZmRlZiBNQUNPU1gxMAotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2FkZHJs ZW47Ci0jZWxzZQotI2lmZGVmIENLXzY0QklUCi0gICAgc3RhdGljIHNvY2tsZW5fdCBzYWRkcmxl bjsKLSNlbHNlCi0gICAgc3RhdGljIGludCBzYWRkcmxlbjsKLSNlbmRpZgkvKiBDS182NEJJVCAq LwotI2VuZGlmIC8qIE1BQ09TWDEwICovCi0jZW5kaWYgLyogREVDX1RDUElQICovCi0jZW5kaWYg LyogVU5JWFdBUkUgKi8KLSNlbmRpZiAvKiBBSVg0MiAqLwotI2VuZGlmIC8qIFBUWCAqLwotI2Vu ZGlmCS8qIEdQRUVSTkFNRV9UICovCi0gICAgc2FkZHJsZW4gPSBzaXplb2Yoc2FkZHIpOwotICAg IGlmIChnZXRwZWVybmFtZSh0dHlmZCwoc3RydWN0IHNvY2thZGRyICopJnNhZGRyLCZzYWRkcmxl bikgPCAwKSB7Ci0gICAgICAgIGRlYnVnKEYxMTEsImNrZ2V0cGVlciBmYWlsdXJlIixja2l0b2Eo dHR5ZmQpLGVycm5vKTsKLSAgICAgICAgcmV0dXJuKE5VTEwpOwotICAgIH0KLSAgICBob3N0ID0g Z2V0aG9zdGJ5YWRkcigoY2hhciAqKSZzYWRkci5zaW5fYWRkciw0LEFGX0lORVQpOwotICAgIGlm IChob3N0KSB7Ci0gICAgICAgIGhvc3QgPSBja19jb3B5aG9zdGVudChob3N0KTsKLSAgICAgICAg Y2tzdHJuY3B5KG5hbWVidWYsKGNoYXIgKilob3N0LT5oX25hbWUsODApOwotICAgIH0gZWxzZSB7 Ci0gICAgICAgIGNrc3RybmNweShuYW1lYnVmLChjaGFyICopaW5ldF9udG9hKHNhZGRyLnNpbl9h ZGRyKSw4MCk7Ci0gICAgfQotICAgIHBlZXJ4aXBhZGRyID0gbnRvaGwoc2FkZHIuc2luX2FkZHIu c19hZGRyKTsKLSAgICBkZWJ1ZyhGMTExLCJja2dldHBlZXIiLG5hbWVidWYscGVlcnhpcGFkZHIp OwotICAgIHJldHVybihuYW1lYnVmKTsKLSNlbHNlCi0gICAgcmV0dXJuKE5VTEwpOwotI2VuZGlm IC8qIFRDUFNPQ0tFVCAqLwotfQotCi0vKiBHZXQgZnVsbHkgcXVhbGlmaWVkIElQIGhvc3RuYW1l ICovCi0KLSNpZm5kZWYgTk9ORVQKLWNoYXIgKgotI2lmZGVmIENLX0FOU0lDCi1ja2dldGZxaG9z dG5hbWUoY2hhciAqIG5hbWUpCi0jZWxzZQotY2tnZXRmcWhvc3RuYW1lKG5hbWUpIGNoYXIgKiBu YW1lOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0jaWZkZWYgTk9DS0dFVEZRSE9TVAotCi0g ICAgcmV0dXJuKG5hbWUpOwotCi0jZWxzZSAvKiBJZiB0aGUgZm9sbG93aW5nIGNvZGUgZHVtcHMg Y29yZSwgZGVmaW5lIE5PQ0tHRVRGUUhPU1QgYW5kIHJlYnVpbGQuICovCi0KLSAgICBzdGF0aWMg Y2hhciBuYW1lYnVmWzI1Nl07Ci0gICAgc3RydWN0IGhvc3RlbnQgKmhvc3Q9TlVMTDsKLSAgICBz dHJ1Y3Qgc29ja2FkZHJfaW4gcl9hZGRyOwotICAgIGludCBpOwotCi0gICAgZGVidWcoRjExMCwi Y2tnZXRmcWhuKCkiLG5hbWUsMCk7Ci0KLSAgICBja3N0cm5jcHkobmFtZWJ1ZixuYW1lLDI1Nik7 Ci0gICAgbmFtZWJ1ZlsyNTVdID0gJ1wwJzsKLSAgICBpID0gY2tpbmRleCgiOiIsbmFtZWJ1Ziww LDAsMCk7Ci0gICAgaWYgKGkpCi0gICAgICBuYW1lYnVmW2ktMV0gPSAnXDAnOwotCi0gICAgYnpl cm8oKGNoYXIgKikmcl9hZGRyLCBzaXplb2Yocl9hZGRyKSk7Ci0KLSAgICBob3N0ID0gZ2V0aG9z dGJ5bmFtZShuYW1lYnVmKTsKLSAgICBpZiAoaG9zdCkgewotICAgICAgICBob3N0ID0gY2tfY29w eWhvc3RlbnQoaG9zdCk7Ci0gICAgICAgIGRlYnVnKEYxMDAsImNrZ2V0ZnFobigpIGdldGhvc3Ri eW5hbWUgIT0gTlVMTCIsIiIsMCk7Ci0gICAgICAgIHJfYWRkci5zaW5fZmFtaWx5ID0gaG9zdC0+ aF9hZGRydHlwZTsKLSNpZmRlZiBIQUREUkxJU1QKLSNpZmRlZiBoX2FkZHIKLSAgICAgICAgLyog VGhpcyBpcyBmb3IgdHJ5aW5nIG11bHRpcGxlIElQIGFkZHJlc3NlcyAtIHNlZSA8bmV0ZGIuaD4g Ki8KLSAgICAgICAgaWYgKCEoaG9zdC0+aF9hZGRyX2xpc3QpKQotICAgICAgICAgIGdvdG8gZXhp dF9mdW5jOwotICAgICAgICBiY29weShob3N0LT5oX2FkZHJfbGlzdFswXSwKLSAgICAgICAgICAg ICAgKGNhZGRyX3QpJnJfYWRkci5zaW5fYWRkciwKLSAgICAgICAgICAgICAgaG9zdC0+aF9sZW5n dGgKLSAgICAgICAgICAgICAgKTsKLSNlbHNlCi0gICAgICAgIGJjb3B5KGhvc3QtPmhfYWRkciwg KGNhZGRyX3QpJnJfYWRkci5zaW5fYWRkciwgaG9zdC0+aF9sZW5ndGgpOwotI2VuZGlmIC8qIGhf YWRkciAqLwotI2Vsc2UgIC8qIEhBRERSTElTVCAqLwotICAgICAgICBiY29weShob3N0LT5oX2Fk ZHIsIChjYWRkcl90KSZyX2FkZHIuc2luX2FkZHIsIGhvc3QtPmhfbGVuZ3RoKTsKLSNlbmRpZiAv KiBIQUREUkxJU1QgKi8KLSNpZmRlZiBDT01NRU5UCi0jaWZuZGVmIEVYQ0VMQU4KLSAgICAgICAg ZGVidWcoRjExMSwiQkNPUFkiLCJob3N0LT5oX2FkZHIiLGhvc3QtPmhfYWRkcik7Ci0jZW5kaWYg LyogRVhDRUxBTiAqLwotICAgICAgICBkZWJ1ZyhGMTExLCJCQ09QWSIsIiAoY2FkZHJfdCkmcl9h ZGRyLnNpbl9hZGRyIiwKLSAgICAgICAgICAgICAgKGNhZGRyX3QpJnJfYWRkci5zaW5fYWRkcik7 Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwotICAgICAgICBkZWJ1ZyhGMTExLCJCQ09QWSIsImhvc3Qt PmhfbGVuZ3RoIixob3N0LT5oX2xlbmd0aCk7Ci0KLSNpZmRlZiBOVAotICAgICAgICAvKiBXaW5k b3dzIDk1Lzk4IHJlcXVpcmVzIGEgMSBzZWNvbmQgd2FpdCBiZXR3ZWVuIGNhbGxzIHRvIE1pY3Jv c29mdCAqLwotICAgICAgICAvKiBwcm92aWRlZCBETlMgZnVuY3Rpb25zLiAgT3RoZXJ3aXNlLCB0 aGUgVFRMIG9mIHRoZSBETlMgcmVzcG9uc2UgKi8KLSAgICAgICAgLyogaXMgaWdub3JlZC4gKi8K LSAgICAgICAgaWYgKGlzV2luOTUoKSkKLSAgICAgICAgICBzbGVlcCgxKTsKLSNlbmRpZiAvKiBO VCAqLwotICAgICAgICBob3N0ID0gZ2V0aG9zdGJ5YWRkcigoY2hhciAqKSZyX2FkZHIuc2luX2Fk ZHIsNCxQRl9JTkVUKTsKLSAgICAgICAgaWYgKGhvc3QpIHsKLSAgICAgICAgICAgIGhvc3QgPSBj a19jb3B5aG9zdGVudChob3N0KTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsImNrZ2V0ZnFobigp IGdldGhvc3RieWFkZHIgIT0gTlVMTCIsIiIsMCk7Ci0gICAgICAgICAgICBja3N0cm5jcHkobmFt ZWJ1ZiwgaG9zdC0+aF9uYW1lLCAyNTYpOwotICAgICAgICB9Ci0gICAgfQotCi0jaWZkZWYgSEFE RFJMSVNUCi0jaWZkZWYgaF9hZGRyCi0gIGV4aXRfZnVuYzoKLSNlbmRpZiAvKiBoX2FkZHIgKi8K LSNlbmRpZiAvKiBIQUREUkxJU1QgKi8KLQotICAgIGlmIChpID4gMCkKLSAgICAgIGNrc3RybmNh dChuYW1lYnVmLCZuYW1lW2ktMV0sMjU2LXN0cmxlbihuYW1lYnVmKS1zdHJsZW4oJm5hbWVbaS0x XSkpOwotICAgIGRlYnVnKEYxMTAsImNrZ2V0ZnFobigpIixuYW1lYnVmLDApOwotICAgIHJldHVy bihuYW1lYnVmKTsKLSNlbmRpZiAvKiBOT0NLR0VURlFIT1NUICovCi19Ci0KLVZPSUQKLSNpZmRl ZiBDS19BTlNJQwotc2V0bnByb3RvKGNoYXIgKiBwKQotI2Vsc2UKLXNldG5wcm90byhwKSBjaGFy ICogcDsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmICghaXNkaWdpdCgqcCkpIHsK LSAgICAgICAgaWYgKCFzdHJjbXAoImtlcm1pdCIscCkpCi0gICAgICAgICAgdHRucHJvdG8gPSBO UF9LRVJNSVQ7Ci0gICAgICAgIGVsc2UgaWYgKCFzdHJjbXAoInRlbG5ldCIscCkpCi0gICAgICAg ICAgdHRucHJvdG8gPSBOUF9URUxORVQ7Ci0gICAgICAgIGVsc2UgaWYgKCFzdHJjbXAoImh0dHAi LHApKQotICAgICAgICAgIHR0bnByb3RvID0gTlBfVENQUkFXOwotI2lmZGVmIFJMT0dDT0RFCi0g ICAgICAgIGVsc2UgaWYgKCFzdHJjbXAoImxvZ2luIixwKSkKLSAgICAgICAgICB0dG5wcm90byA9 IE5QX1JMT0dJTjsKLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotI2lmZGVmIENLX1NTTAotICAgICAg ICAvKiBDb21tb25seSB1c2VkIFNTTCBwb3J0cyAobWlnaHQgbm90IGJlIGluIHNlcnZpY2VzIGZp bGUpICovCi0gICAgICAgIGVsc2UgaWYgKCFzdHJjbXAoImh0dHBzIixwKSkgewotICAgICAgICAg IHR0bnByb3RvID0gTlBfU1NMX1JBVzsKLSAgICAgICAgICBzc2xfb25seV9mbGFnID0gMTsKLSAg ICAgICAgfSBlbHNlIGlmICghc3RyY21wKCJzc2wtdGVsbmV0IixwKSkgewotICAgICAgICAgIHR0 bnByb3RvID0gTlBfVEVMTkVUOwotICAgICAgICAgIHNzbF9vbmx5X2ZsYWcgPSAxOwotICAgICAg ICB9IGVsc2UgaWYgKCFzdHJjbXAoInRlbG5ldHMiLHApKSB7Ci0gICAgICAgICAgdHRucHJvdG8g PSBOUF9URUxORVQ7Ci0gICAgICAgICAgc3NsX29ubHlfZmxhZyA9IDE7Ci0gICAgICAgIH0KLSNl bmRpZiAvKiBDS19TU0wgKi8KLSNpZmRlZiBDS19LRVJCRVJPUwotI2lmZGVmIFJMT0dDT0RFCi0g ICAgICAgIGVsc2UgaWYgKCFzdHJjbXAoImtsb2dpbiIscCkpIHsKLSAgICAgICAgICAgIGlmIChj a19rcmI1X2lzX2luc3RhbGxlZCgpKQotICAgICAgICAgICAgICB0dG5wcm90byA9IE5QX0s1TE9H SU47Ci0gICAgICAgICAgICBlbHNlIGlmIChja19rcmI0X2lzX2luc3RhbGxlZCgpKQotICAgICAg ICAgICAgICB0dG5wcm90byA9IE5QX0s0TE9HSU47Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg ICAgICAgIHR0bnByb3RvID0gTlBfUkxPR0lOOwotICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAo ImVrbG9naW4iLHApKSB7Ci0gICAgICAgICAgICBpZiAoY2tfa3JiNV9pc19pbnN0YWxsZWQoKSkK LSAgICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9FSzVMT0dJTjsKLSAgICAgICAgICAgIGVsc2Ug aWYgKGNrX2tyYjRfaXNfaW5zdGFsbGVkKCkpCi0gICAgICAgICAgICAgIHR0bnByb3RvID0gTlBf RUs0TE9HSU47Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHR0bnByb3RvID0gTlBf UkxPR0lOOwotICAgICAgICB9Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNlbmRpZiAvKiBDS19L RVJCRVJPUyAqLwotICAgICAgICBlbHNlCi0gICAgICAgICAgdHRucHJvdG8gPSBOUF9OT05FOwot ICAgIH0gZWxzZSB7Ci0gICAgICAgIHN3aXRjaCAoYXRvaShwKSkgewotICAgICAgICAgIGNhc2Ug MjM6ICAgICAgICAgICAgICAgICAgICAgIC8qIFRlbG5ldCAqLwotICAgICAgICAgICAgdHRucHJv dG8gPSBOUF9URUxORVQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDUxMzoK LSAgICAgICAgICAgIHR0bnByb3RvID0gTlBfUkxPR0lOOwotICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgY2FzZSAxNjQ5OgotICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9LRVJNSVQ7Ci0g ICAgICAgICAgICBicmVhazsKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICBjYXNlIDQ0MzoKLSNp ZmRlZiBDT01NRU5UCi0JICAgIC8qIEplZmYgMjAwNS8xMi8zMCAqLwotICAgICAgICAgICAgdHRu cHJvdG8gPSBOUF9TU0xfUkFXOwotI2Vsc2UKLQkgICAgLyogZmRjIDIwMDUvMTIvMDQgKi8KLSAg ICAgICAgICAgIHR0bnByb3RvID0gTlBfU1NMOwotI2VuZGlmCS8qIENPTU1FTlQgKi8KLSAgICAg ICAgICAgIHNzbF9vbmx5X2ZsYWcgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg Y2FzZSAxNTE6Ci0gICAgICAgICAgY2FzZSA5OTI6Ci0gICAgICAgICAgICB0dG5wcm90byA9IE5Q X1RFTE5FVDsKLSAgICAgICAgICAgIHNzbF9vbmx5X2ZsYWcgPSAxOwotICAgICAgICAgICAgYnJl YWs7Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSAgICAgICAgICBj YXNlIDU0MzoKLSAgICAgICAgICAgIGlmIChja19rcmI1X2lzX2luc3RhbGxlZCgpKQotICAgICAg ICAgICAgICB0dG5wcm90byA9IE5QX0s1TE9HSU47Ci0gICAgICAgICAgICBlbHNlIGlmIChja19r cmI0X2lzX2luc3RhbGxlZCgpKQotICAgICAgICAgICAgICB0dG5wcm90byA9IE5QX0s0TE9HSU47 Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHR0bnByb3RvID0gTlBfUkxPR0lOOwot ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAyMTA1OgotICAgICAgICAgICAgaWYg KGNrX2tyYjVfaXNfaW5zdGFsbGVkKCkpCi0gICAgICAgICAgICAgIHR0bnByb3RvID0gTlBfRUs1 TE9HSU47Ci0gICAgICAgICAgICBlbHNlIGlmIChja19rcmI0X2lzX2luc3RhbGxlZCgpKQotICAg ICAgICAgICAgICB0dG5wcm90byA9IE5QX0VLNExPR0lOOwotICAgICAgICAgICAgZWxzZQotICAg ICAgICAgICAgICB0dG5wcm90byA9IE5QX1JMT0dJTjsKLSAgICAgICAgICAgIGJyZWFrOwotI2Vu ZGlmIC8qIENLX0tFUkJFUk9TICovCi0gICAgICAgICAgY2FzZSA4MDogICAgICAgICAgICAgICAg ICAgICAgLyogSFRUUCAqLwotICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9UQ1BSQVc7Ci0gICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgdHRucHJvdG8g PSBOUF9OT05FOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8q IGNrZ2V0c2VydmljZSgpIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBwb3J0IG51bWJlciBmb3Ig YSBnaXZlbiAqLwotLyogc2VydmljZSB0YWtpbmcgaW50byBhY2NvdW50IHRoZSB1c2Ugb2YgRE5T IFNSViByZWNvcmRzLiAgICAgICAgICovCi0KLXN0YXRpYyBzdHJ1Y3Qgc2VydmVudCBzZXJ2cmVj Owotc3RhdGljIHN0cnVjdCBzZXJ2ZW50ICoKLWNrZ2V0c2VydmljZShob3N0bmFtZSwgc2Vydmlj ZW5hbWUsIGlwLCBpcGxlbikKLSAgICBjaGFyICpob3N0bmFtZTsgY2hhciAqIHNlcnZpY2VuYW1l OyBjaGFyICogaXA7IGludCBpcGxlbjsKLXsKLSAgICBzdHJ1Y3Qgc2VydmVudCAqIHNlcnZpY2Ug PSBOVUxMOwotI2lmZGVmIENLX0ROU19TUlYKLSAgICBzdHJ1Y3Qgc29ja2FkZHIgKiBkbnNfYWRk cnMgPSBOVUxMOwotICAgIGludCBkbnNfbmFkZHJzID0gMDsKLSNlbmRpZiAvKiBDS19ETlNfU1JW ICovCi0KLSAgICBpZiAoaXNkaWdpdCgqc2VydmljZW5hbWUpKSB7ICAgICAgICAvKiBVc2Ugc29j a2V0IG51bWJlciB3aXRob3V0IGxvb2t1cCAqLwotICAgICAgICBzZXJ2aWNlID0gJnNlcnZyZWM7 Ci0gICAgICAgIHNlcnZpY2UtPnNfcG9ydCA9IGh0b25zKCh1bnNpZ25lZCBzaG9ydClhdG9pKHNl cnZpY2VuYW1lKSk7Ci0gICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog T3RoZXJ3aXNlIGxvb2t1cCB0aGUgc2VydmljZSBuYW1lICovCi0jaWZkZWYgQ0tfRE5TX1NSVgot ICAgICAgICBpZiAodGNwX2Ruc19zcnYgJiYgIXF1aWV0KSB7Ci0gICAgICAgICAgICBwcmludGYo IiBETlMgU1JWIExvb2t1cC4uLiAiKTsKLSAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOwotICAg ICAgICB9Ci0gICAgICAgIGlmICh0Y3BfZG5zX3NydiAmJgotICAgICAgICAgICAgbG9jYXRlX3Ny dl9kbnMoaG9zdG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlbmFtZSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0Y3AiLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgJmRuc19hZGRycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZkbnNfbmFkZHJz Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICApIHsKLSAgICAgICAg ICAgIC8qIFVzZSB0aGUgZmlyc3Qgb25lLiAgRXZlbnR1YWxseSB3ZSBzaG91bGQgY3ljbGUgdGhy b3VnaCBhbGwgKi8KLSAgICAgICAgICAgIC8qIHRoZSByZXR1cm5lZCBJUCBhZGRyZXNzZXMgYW5k IHBvcnQgbnVtYmVycy4gKi8KLSAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0g TlVMTDsKLSNpZmRlZiBCRVRBREVCVUcKLSAgICAgICAgICAgIGludCBpOwotICAgICAgICAgICAg cHJpbnRmKCJcclxuIik7Ci0gICAgICAgICAgICBmb3IgKCBpPTA7aTxkbnNfbmFkZHJzO2krKyAp IHsKLSAgICAgICAgICAgICAgICBzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopICZkbnNfYWRk cnNbaV07Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJkbnNfYWRkcnNbJWRdID0gJXMgJWRcclxu IiwgaSwKLSAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopaW5ldF9udG9hKHNpbi0+c2lu X2FkZHIpLAotICAgICAgICAgICAgICAgICAgICAgICAgbnRvaHMoc2luLT5zaW5fcG9ydCkpOwot ICAgICAgICAgICAgfQotI2VuZGlmIC8qIEJFVEFERUJVRyAqLwotICAgICAgICAgICAgc2luID0g KHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmZG5zX2FkZHJzWzBdOwotICAgICAgICAgICAgaWYgKCBp cCAmJiBpcGxlbiA+IDAgKQotICAgICAgICAgICAgICAgIGNrc3RybmNweShpcCwoY2hhciAqKWlu ZXRfbnRvYShzaW4tPnNpbl9hZGRyKSxpcGxlbik7Ci0gICAgICAgICAgICBzZXJ2aWNlID0gJnNl cnZyZWM7Ci0gICAgICAgICAgICBzZXJ2aWNlLT5zX3BvcnQgPSBzaW4tPnNpbl9wb3J0OwotCi0g ICAgICAgICAgICBmcmVlKGRuc19hZGRycyk7Ci0gICAgICAgICAgICBkbnNfYWRkcnMgPSBOVUxM OwotICAgICAgICAgICAgZG5zX25hZGRycyA9IDA7Ci0gICAgICAgIH0gZWxzZQotI2VuZGlmIC8q IENLX0ROU19TUlYgKi8KLSAgICAgICAgICAgIHNlcnZpY2UgPSBnZXRzZXJ2YnluYW1lKHNlcnZp Y2VuYW1lLCAidGNwIik7Ci0gICAgfQotICAgIGlmICghc2VydmljZSkgewotICAgICAgICBpZiAo IWNrc3RyY21wKCJrZXJtaXQiLHNlcnZpY2VuYW1lLC0xLDApKSB7IC8qIEtlcm1pdCBzZXJ2aWNl IHBvcnQgKi8KLSAgICAgICAgICAgIHNlcnZpY2UgPSAmc2VydnJlYzsKLSAgICAgICAgICAgIHNl cnZpY2UtPnNfcG9ydCA9IGh0b25zKDE2NDkpOwotICAgICAgICB9IGVsc2UgaWYgKCFja3N0cmNt cCgidGVsbmV0IixzZXJ2aWNlbmFtZSwtMSwwKSkgeyAvKiBUZWxuZXQgcG9ydCAqLwotICAgICAg ICAgICAgc2VydmljZSA9ICZzZXJ2cmVjOwotICAgICAgICAgICAgc2VydmljZS0+c19wb3J0ID0g aHRvbnMoMjMpOwotICAgICAgICB9IGVsc2UgaWYgKCFja3N0cmNtcCgiaHR0cCIsc2VydmljZW5h bWUsLTEsMCkpIHsKLSAgICAgICAgICAgIHNlcnZpY2UgPSAmc2VydnJlYzsKLSAgICAgICAgICAg IHNlcnZpY2UtPnNfcG9ydCA9IGh0b25zKDgwKTsKLSAgICAgICAgfQotI2lmZGVmIFJMT0dDT0RF Ci0gICAgICAgIGVsc2UgaWYgKCFja3N0cmNtcCgibG9naW4iLHNlcnZpY2VuYW1lLC0xLDApKSB7 Ci0gICAgICAgICAgICBzZXJ2aWNlID0gJnNlcnZyZWM7Ci0gICAgICAgICAgICBzZXJ2aWNlLT5z X3BvcnQgPSBodG9ucyg1MTMpOwotICAgICAgICB9Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNp ZmRlZiBDS19TU0wKLSAgICAgICAgLyogQ29tbW9ubHkgdXNlZCBTU0wgcG9ydHMgKG1pZ2h0IG5v dCBiZSBpbiBzZXJ2aWNlcyBmaWxlKSAqLwotICAgICAgICBlbHNlIGlmICghY2tzdHJjbXAoImh0 dHBzIixzZXJ2aWNlbmFtZSwtMSwwKSkgewotICAgICAgICAgICAgc2VydmljZSA9ICZzZXJ2cmVj OwotICAgICAgICAgICAgc2VydmljZS0+c19wb3J0ID0gaHRvbnMoNDQzKTsKLSAgICAgICAgfSBl bHNlIGlmICghY2tzdHJjbXAoInNzbC10ZWxuZXQiLHNlcnZpY2VuYW1lLC0xLDApKSB7Ci0gICAg ICAgICAgICBzZXJ2aWNlID0gJnNlcnZyZWM7Ci0gICAgICAgICAgICBzZXJ2aWNlLT5zX3BvcnQg PSBodG9ucygxNTEpOwotICAgICAgICB9IGVsc2UgaWYgKCFja3N0cmNtcCgidGVsbmV0cyIsc2Vy dmljZW5hbWUsLTEsMCkpIHsKLSAgICAgICAgICAgIHNlcnZpY2UgPSAmc2VydnJlYzsKLSAgICAg ICAgICAgIHNlcnZpY2UtPnNfcG9ydCA9IGh0b25zKDk5Mik7Ci0gICAgICAgIH0KLSNlbmRpZiAv KiBDS19TU0wgKi8KLSNpZmRlZiBDS19LRVJCRVJPUwotI2lmZGVmIFJMT0dDT0RFCi0gICAgICAg IGVsc2UgaWYgKCFja3N0cmNtcCgia2xvZ2luIixzZXJ2aWNlbmFtZSwtMSwwKSkgewotICAgICAg ICAgICAgc2VydmljZSA9ICZzZXJ2cmVjOwotICAgICAgICAgICAgc2VydmljZS0+c19wb3J0ID0g aHRvbnMoNTQzKTsKLSAgICAgICAgfSBlbHNlIGlmICghY2tzdHJjbXAoImVrbG9naW4iLHNlcnZp Y2VuYW1lLC0xLDApKSB7Ci0gICAgICAgICAgICBzZXJ2aWNlID0gJnNlcnZyZWM7Ci0gICAgICAg ICAgICBzZXJ2aWNlLT5zX3BvcnQgPSBodG9ucygyMTA1KTsKLSAgICAgICAgfQotI2VuZGlmIC8q IFJMT0dDT0RFICovCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSAgICB9Ci0gICAgcmV0dXJu KHNlcnZpY2UpOwotfQotCi0vKiAgTiBFIFQgTyBQIEUgTiAgLS0gIE9wZW4gYSBuZXR3b3JrIGNv bm5lY3Rpb24gICovCi0vKgotICBDYWxsaW5nIGNvbnZlbnRpb25zIHNhbWUgYXMgdHRvcGVuKCks IGV4Y2VwdCB0aGlyZCBhcmd1bWVudCBpcyBuZXR3b3JrCi0gIHR5cGUgcmF0aGVyIHRoYW4gbW9k ZW0gdHlwZS4gIERlc2lnbmVkIHRvIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiB0dG9wZW4uCi0qLwot Ci0jZGVmaW5lIFhYTkFNRUxFTiAyNTYKLXN0YXRpYyBjaGFyIHh4bmFtZVtYWE5BTUVMRU5dOwot Ci1pbnQKLW5ldG9wZW4obmFtZSwgbGNsLCBuZXR0KSBjaGFyICpuYW1lOyBpbnQgKmxjbCwgbmV0 dDsgewotICAgIGNoYXIgKnA7Ci0gICAgaW50IGksIHgsIHJjX2luZXRfYWRkciA9IDAsIGRucyA9 IDA7Ci0jaWZkZWYgVENQU09DS0VUCi0gICAgaW50IGlzY29ubmVjdCA9IDA7Ci0jaWZkZWYgU09f T09CSU5MSU5FCi0gICAgaW50IG9uID0gMTsKLSNlbmRpZiAvKiBTT19PT0JJTkxJTkUgKi8KLSAg ICBzdHJ1Y3Qgc2VydmVudCAqc2VydmljZT1OVUxMOwotICAgIHN0cnVjdCBob3N0ZW50ICpob3N0 PU5VTEw7Ci0gICAgc3RydWN0IHNvY2thZGRyX2luIHJfYWRkcjsKLSAgICBzdHJ1Y3Qgc29ja2Fk ZHJfaW4gc2luOwotICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBsX2FkZHI7Ci0gICAgR1NPQ0tOQU1F X1QgbF9zbGVuOwotI2lmZGVmIEVYQ0VMQU4KLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2VuZF9z b2NrZXQ7Ci0jZW5kaWYgLyogRVhDRUxBTiAqLwotCi0jaWZkZWYgSU5BRERSWAotLyogaW5ldF9h ZGRyKCkgaXMgb2YgdHlwZSBzdHJ1Y3QgaW5fYWRkciAqLwotI2lmZGVmIGRhdGFnZW5lcmFsCi0g ICAgZXh0ZXJuIHN0cnVjdCBpbl9hZGRyIGluZXRfYWRkcigpOwotI2Vsc2UKLSNpZmRlZiBIUFVY NVdJTlRDUAotICAgIGV4dGVybiBzdHJ1Y3QgaW5fYWRkciBpbmV0X2FkZHIoKTsKLSNlbmRpZiAv KiBIUFVYNVdJTlRDUCAqLwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0gICAgc3RydWN0IGlu X2FkZHIgaWF4OwotI2Vsc2UKLSNpZmRlZiBJTkFERFJfTk9ORQotICAgIHN0cnVjdCBpbl9hZGRy IGlheDsKLSNlbHNlIC8qIElOQUREUl9OT05FICovCi0gICAgbG9uZyBpYXg7Ci0jZW5kaWYgLyog SU5BRERSX05PTkUgKi8KLSNlbmRpZiAvKiBJTkFERFJYICovCi0jZW5kaWYgLyogVENQU09DS0VU ICovCi0KLSNpZmRlZiBDT01NRU5UCi0vKiBUaGlzIGNhdXNlcyBiaWcgdHJvdWJsZSAqLwotI2lm bmRlZiBJTkFERFJfTk9ORQotI2RlZmluZSBJTkFERFJfTk9ORSAweGZmZmZmZmZmCi0jZW5kaWYg LyogSU5BRERSX05PTkUgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSNpZmRlZiBTVU5YMjUg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb2RlIGZvciBTdW5MaW5rIFguMjUgc3VwcG9y dCAqLwotI2RlZmluZSBYMjlQSUQgMSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFguMjkgUHJv dG9jb2wgSUQgKi8KLV9QUk9UT1RZUChTSUdUWVAgeDI1b29iaCwgKGludCkgKTsKLSAgICBDT05O X0RCIHgyNWhvc3Q7Ci0jaWZuZGVmIFgyNV9XUl9GQUNJTElUWQotICAgIEZBQ0lMSVRZIHgyNWZh Y2lsOwotI2Vsc2UKLSAgICBGQUNJTElUWV9EQiB4MjVmYWNpbDsKLSNlbmRpZiAvKiBYMjVfV1Jf RkFDSUxJVFkgKi8KLSAgICBzdGF0aWMgaW50IG5lZWRoID0gMTsKLSAgICBQSURfVCBwaWQ7Ci0g ICAgZXh0ZXJuIGludCBsaW5raWQsIGxjbiwgeDI1dmVyOwotI2VuZGlmIC8qIFNVTlgyNSAqLwot I2lmZGVmIEFOWVgyNQotICAgIGV4dGVybiBpbnQgcmV2Y2FsbCwgY2xvc2dyLCBjdWRhdGE7Ci0g ICAgZXh0ZXJuIGNoYXIgdWRhdGFbXTsKLSNlbmRpZiAvKiBBTllYMjUgKi8KLQotI2lmZGVmIElC TVgyNSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFZhcmlhYmxlcyBmb3IgSUJNIFgyNSAq LwotICAgIGV4dGVybiBpbnQgeDI1cG9ydDsgICAgICAgICAgICAgICAgIC8qIExvZ2ljYWwgcG9y dCB0byB1c2UgKi8KLSAgICBleHRlcm4geDI1YWRkcl90IGxvY2FsX251YTsgICAgICAgICAvKiBM b2NhbCBYLjI1IGFkZHJlc3MgKi8KLSAgICBleHRlcm4geDI1YWRkcl90IHJlbW90ZV9udWE7ICAg ICAgICAvKiBSZW1vdGUgWC4yNSBhZGRyZXNzICovCi0gICAgZXh0ZXJuIGNoYXIgeDI1bmFtZVtd OyAgICAgICAgICAgICAgLyogWDI1IGRldmljZSBuYW1lIChzeDI1YTApICovCi0gICAgZXh0ZXJu IGNoYXIgeDI1ZGV2W107ICAgICAgICAgICAgICAgLyogWDI1IGRldmljZSBmaWxlIC9kZXYveDI1 cGt0ICovCi0gICAgdWxvbmcgYmluZF9mbGFncyA9IDA7ICAgICAgICAgICAgICAgLyogRmxhZ3Mg Zm9yIGJpbmRpbmcgdGhlIFgyNSBzdHJlYW0gKi8KLSAgICB1bG9uZyB0b2tlbiA9IDA7ICAgICAg ICAgICAgICAgICAgICAvKiBUZW1wb3JhcnkgcmV0dXJuIGNvZGUgKi8KLSNlbmRpZiAvKiBJQk1Y MjUgKi8KLQotICAgIGRlYnVnKEYxMDEsIm5ldG9wZW4gbmV0dCIsIiIsbmV0dCk7Ci0gICAgKmlw YWRkciA9ICdcMCc7ICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBJUCBhZGRyZXNz IHN0cmluZyAqLwotCi0jaWZkZWYgU1VOWDI1Ci0gICAgaWYgKG5ldHQgPT0gTkVUX1NYMjUpIHsg ICAgICAgICAgICAgLyogSWYgbmV0d29yayB0eXBlIGlzIFguMjUgKi8KLSAgICAgICAgbmV0Y2xv cygpOyAgICAgICAgICAgICAgICAgICAgICAvKiBDbG9zZSBhbnkgcHJldmlvdXMgbmV0IGNvbm5l Y3Rpb24gKi8KLSAgICAgICAgdHRucHJvdG8gPSBOUF9OT05FOyAgICAgICAgICAgICAvKiBObyBw cm90b2NvbCBzZWxlY3RlZCB5ZXQgKi8KLQotICAgICAgICAvKiBTZXQgdXAgaG9zdCBzdHJ1Y3R1 cmUgKi8KLSAgICAgICAgYnplcm8oKGNoYXIgKikmeDI1aG9zdCxzaXplb2YoeDI1aG9zdCkpOwot ICAgICAgICBpZiAoKHgyNWhvc3QuaG9zdGxlbiA9IHBreDEyMShuYW1lLHgyNWhvc3QuaG9zdCkp IDwgMCkgewotICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCJJbnZhbGlkIFguMTIxIGhvc3Qg YWRkcmVzcyAlc1xuIixuYW1lKTsKLSAgICAgICAgICAgIGVycm5vID0gMDsKLSAgICAgICAgICAg IHJldHVybiAoLTEpOwotICAgICAgICB9Ci0gICAgICAgIHgyNWhvc3QuZGF0YWxlbiA9IFgyOVBJ RExFTjsKLSAgICAgICAgeDI1aG9zdC5kYXRhWzBdID0gWDI5UElEOwotCi0gICAgICAgIC8qIFNl dCBjYWxsIHVzZXIgZGF0YSBpZiBzcGVjaWZpZWQgKi8KLSAgICAgICAgaWYgKGN1ZGF0YSkgewot ICAgICAgICAgICAgY2tzdHJuY3B5KChjaGFyICopeDI1aG9zdC5kYXRhK1gyOVBJRExFTix1ZGF0 YSwoaW50KXN0cmxlbih1ZGF0YSkpOwotICAgICAgICAgICAgeDI1aG9zdC5kYXRhbGVuICs9IChp bnQpc3RybGVuKHVkYXRhKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIE9wZW4gU3VuTGluayBY LjI1IHNvY2tldCAqLwotICAgICAgICBpZiAoIXF1aWV0ICYmICpuYW1lKSB7Ci0gICAgICAgICAg ICBwcmludGYoIiBUcnlpbmcgJXMuLi4gIiwgbmFtZSk7Ci0gICAgICAgICAgICBmZmx1c2goc3Rk b3V0KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKHR0eWZkID0gc29ja2V0KEFGX1gyNSwgU09D S19TVFJFQU0sIDApKSA8IDApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldG9wZW4gc29j a2V0IGVycm9yIiwiIixlcnJubyk7Ci0gICAgICAgICAgICBwZXJyb3IgKCJYLjI1IHNvY2tldCBl cnJvciIpOwotICAgICAgICAgICAgcmV0dXJuICgtMSk7Ci0gICAgICAgIH0KLQotICAgICAgICAv KiBTZXR0aW5nIFguMjUgb3V0LW9mLWJhbmQgZGF0YSBoYW5kbGVyICovCi0gICAgICAgIHBpZCA9 IGdldHBpZCgpOwotICAgICAgICBpZiAoaW9jdGwodHR5ZmQsU0lPQ1NQR1JQLCZwaWQpKSB7Ci0g ICAgICAgICAgICBwZXJyb3IoIlguMjUgc2V0IHByb2Nlc3MgZ3JvdXAgaWQgZXJyb3IiKTsKLSAg ICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLSAgICAgICAgKFZPSUQpIHNpZ25hbChT SUdVUkcseDI1b29iaCk7Ci0KLSAgICAgICAgLyogU2V0IHJldmVyc2UgY2hhcmdlIGNhbGwgYW5k IGNsb3NlZCB1c2VyIGdyb3VwIGlmIHJlcXVlc3RlZCAqLwotICAgICAgICBiemVybyAoKGNoYXIg KikmeDI1ZmFjaWwsc2l6ZW9mKHgyNWZhY2lsKSk7Ci0KLSNpZm5kZWYgWDI1X1dSX0ZBQ0lMSVRZ Ci0vKiAgTmV3IFN1bkxpbmsgKDcuMCBvciA4LjAsIG5vdCBzdXJlIHdoaWNoKS4uLiAqLwotICAg ICAgICB4MjVmYWNpbC50eXBlID0gVF9SRVZFUlNFX0NIQVJHRTsgLyogUmV2ZXJzZSBDaGFyZ2Ug Ki8KLSAgICAgICAgeDI1ZmFjaWwuZl9yZXZlcnNlX2NoYXJnZSA9IHJldmNhbGwgPyAxIDogMDsK LSAgICAgICAgaWYgKGlvY3RsKHR0eWZkLFgyNV9TRVRfRkFDSUxJVFksJngyNWZhY2lsKSA8IDAp IHsKLSAgICAgICAgICAgIHBlcnJvciAoIlNldHRpbmcgWC4yNSByZXZlcnNlIGNoYXJnZSIpOwot ICAgICAgICAgICAgcmV0dXJuICgtMSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNsb3NnciA+ IC0xKSB7ICAgICAgICAgICAgICAvKiBDbG9zZWQgVXNlciBHcm91cCAoT3V0Z29pbmcpICovCi0g ICAgICAgICAgICBiemVybyAoKGNoYXIgKikmeDI1ZmFjaWwsc2l6ZW9mKHgyNWZhY2lsKSk7Ci0g ICAgICAgICAgICB4MjVmYWNpbC50eXBlID0gVF9DVUc7Ci0gICAgICAgICAgICB4MjVmYWNpbC5m X2N1Z19yZXEgPSBDVUdfUkVRX0FDUzsKLSAgICAgICAgICAgIHgyNWZhY2lsLmZfY3VnX2luZGV4 ID0gY2xvc2dyOwotICAgICAgICAgICAgaWYgKGlvY3RsKHR0eWZkLFgyNV9TRVRfRkFDSUxJVFks JngyNWZhY2lsKSA8IDApIHsKLSAgICAgICAgICAgICAgICBwZXJyb3IgKCJTZXR0aW5nIFguMjUg Y2xvc2VkIHVzZXIgZ3JvdXAiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgfQotI2Vsc2UKLS8qICBPbGQgU3VuTGluayA2LjAgKG9yIDcuMD8p Li4uICovCi0gICAgICAgIGlmIChyZXZjYWxsKSB4MjVmYWNpbC5yZXZlcnNlX2NoYXJnZSA9IHJl dmNhbGw7Ci0gICAgICAgIGlmIChjbG9zZ3IgPiAtMSkgewotICAgICAgICAgICAgeDI1ZmFjaWwu Y3VnX3JlcSA9IDE7Ci0gICAgICAgICAgICB4MjVmYWNpbC5jdWdfaW5kZXggPSBjbG9zZ3I7Ci0g ICAgICAgIH0KLSAgICAgICAgaWYgKGlvY3RsKHR0eWZkLFgyNV9XUl9GQUNJTElUWSwmeDI1ZmFj aWwpIDwgMCkgewotICAgICAgICAgICAgcGVycm9yICgiU2V0dGluZyBYLjI1IGZhY2lsaXRpZXMi KTsKLSAgICAgICAgICAgIHJldHVybiAoLTEpOwotICAgICAgICB9Ci0jZW5kaWYgLyogWDI1X1dS X0ZBQ0lMSVRZICovCi0KLSAgICAgICAgLyogIE5lZWQgWC4yNSBoZWFkZXIgd2l0aCBiaXRzIFEg YW5kIE0gKi8KLSAgICAgICAgaWYgKGlvY3RsICh0dHlmZCxYMjVfSEVBREVSLCZuZWVkaCkgPCAw KSB7Ci0gICAgICAgICAgICBwZXJyb3IgKCJTZXR0aW5nIFguMjUgaGVhZGVyIik7Ci0gICAgICAg ICAgICByZXR1cm4gKC0xKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIENvbm5lY3RzIHRvIHJl bW90ZSBob3N0IHZpYSBTdW5MaW5rIFguMjUgKi8KLSAgICAgICAgaWYgKGNvbm5lY3QodHR5ZmQs KHN0cnVjdCBzb2NrYWRkciAqKSZ4MjVob3N0LHNpemVvZih4MjVob3N0KSkgPCAwKSB7Ci0gICAg ICAgICAgICBpID0gZXJybm87Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXRvcGVuIGNvbm5l Y3QgZXJybm8iLCIiLGkpOwotICAgICAgICAgICAgaWYgKGkpIHsKLSAgICAgICAgICAgICAgICBw ZXJyb3IoIm5ldG9wZW4geDI1IGNvbm5lY3QiKTsKLSAgICAgICAgICAgICAgICB4MjVkaWFnKCk7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAoVk9JRCkgbmV0Y2xvcygpOwotICAgICAgICAg ICAgdHR5ZmQgPSAtMTsKLSAgICAgICAgICAgIHdhc2Nsb3NlZCA9IDE7Ci0gICAgICAgICAgICB0 dG5wcm90byA9IE5QX05PTkU7Ci0gICAgICAgICAgICBlcnJubyA9IGk7Ci0gICAgICAgICAgICBy ZXR1cm4gKC0xKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIEdldCBYLjI1IGxpbmsgaWRlbnRp ZmljYXRpb24gdXNlZCBmb3IgdGhlIGNvbm5lY3Rpb24gKi8KLSAgICAgICAgaWYgKGlvY3RsKHR0 eWZkLFgyNV9HRVRfTElOSywmbGlua2lkKSA8IDApIHsKLSAgICAgICAgICAgIHBlcnJvciAoIkdl dHRpbmcgWC4yNSBsaW5rIGlkIik7Ci0gICAgICAgICAgICByZXR1cm4gKC0xKTsKLSAgICAgICAg fQotCi0gICAgICAgIC8qIEdldCBYLjI1IGxvZ2ljYWwgY2hhbm5lbCBudW1iZXIgdXNlZCBmb3Ig dGhlIGNvbm5lY3Rpb24gKi8KLSAgICAgICAgaWYgKGlvY3RsKHR0eWZkLFgyNV9SRF9MQ0dOLCZs Y24pIDwgMCkgewotICAgICAgICAgICAgcGVycm9yICgiR2V0dGluZyBYLjI1IGxjbiIpOwotICAg ICAgICAgICAgcmV0dXJuICgtMSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBHZXQgU3VuTGlu ayBYLjI1IHZlcnNpb24gKi8KLSAgICAgICAgaWYgKGlvY3RsKHR0eWZkLFgyNV9WRVJTSU9OLCZ4 MjV2ZXIpIDwgMCkgewotICAgICAgICAgICAgcGVycm9yICgiR2V0dGluZyBTdW5MaW5rIFguMjUg dmVyc2lvbiIpOwotICAgICAgICAgICAgcmV0dXJuICgtMSk7Ci0gICAgICAgIH0KLSAgICAgICAg dHRuZXQgPSBuZXR0OyAgICAgICAgICAgICAgICAgICAvKiBTdW5saW5rIFguMjUgbmV0d29yayAq LwotICAgICAgICB0dG5wcm90byA9IE5QX1gzOyAgICAgICAgICAgICAgIC8qIFBBRCBYLjMsIFgu MjgsIFguMjkgcHJvdG9jb2wgKi8KLSAgICAgICAgaWYgKGxjbCkgaWYgKCpsY2wgPCAwKSAqbGNs ID0gMTsgLyogTG9jYWwgbW9kZSAqLwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfSBlbHNlIC8q IE5vdGUgdGhhdCBTVU5YMjUgc3VwcG9ydCBjYW4gY29leGlzdCB3aXRoIFRDUC9JUCBzdXBwb3J0 LiAqLwotI2VuZGlmIC8qIFNVTlgyNSAqLwotCi0jaWZkZWYgSUJNWDI1Ci0gICAgLyogcmllaG0g Ki8KLSAgICBpZiAobmV0dCA9PSBORVRfSVgyNSkgeyAgICAgICAgICAgICAvKiBJQk0gQUlYIFgu MjUgKi8KLSAgICAgICAgbmV0Y2xvcygpOyAgICAgICAgICAgICAgICAgICAgICAvKiBDbG9zZSBh bnkgcHJldmlvdXMgbmV0IGNvbm5lY3Rpb24gKi8KLSAgICAgICAgdHRucHJvdG8gPSBOUF9OT05F OyAgICAgICAgICAgICAvKiBObyBwcm90b2NvbCBzZWxlY3RlZCB5ZXQgKi8KLQotICAgICAgICAv KiBmaW5kIG91dCB3aG8gd2UgYXJlIC0gdGhpcyBpcyBub3Qgc28gZWFzeSBvbiBBSVggKi8KLSAg ICAgICAgLyogcmllaG06IG5lZWQgdG8gd3JpdGUgdGhlIGNvZGUgdGhhdCBmaW5kcyB0aGlzIG91 dAotICAgICAgICAgKiBhdXRvbWF0aWNhbGx5LCBvciBhdCBsZWFzdCBhbGxvdyBpdCB0byBiZSBj b25maWd1cmVkCi0gICAgICAgICAqIHNvbWVob3cKLSAgICAgICAgICovCi0gICAgICAgIGlmICgh bG9jYWxfbnVhWzBdICYmICF4MjVsb2NhbF9udWEobG9jYWxfbnVhKSkgewotICAgICAgICAgICAg cmV0dXJuKC0xKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIEluaXRpYWxpc2UgdGhlIFgyNSBB UEkgKG9uY2UgcGVyIHByb2Nlc3M/IG9uY2UgcGVyIGNvbm5lY3Rpb24/KSAqLwotCi0gICAgICAg IGRlYnVnKEYxMTAsICJPcGVuaW5nICIsIHgyNWRldiwgMCApOwotICAgICAgICAvKiBzZXQgT19O REVMQVkgdG8gYWxsb3cgcG9sbGluZz8gKi8KLSAgICAgICAgaWYgKCh0dHlmZCA9IG9wZW4oeDI1 ZGV2LCBPX1JEV1IpKSA8IDApIHsKLSAgICAgICAgICAgIHBlcnJvciAoIlguMjUgZGV2aWNlIG9w ZW4gZXJyb3IiKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldG9wZW46IGRldmljZSBvcGVu IGVycm9yIiwiIixlcnJubyk7Ci0gICAgICAgICAgICByZXR1cm4gKC0xKTsKLSAgICAgICAgfQot Ci0gICAgICAgIC8qIHB1c2ggdGhlIE5QSSBvbnRvIHRoZSBTVFJFQU0gKi8KLSAgICAgICAgaWYg KGlvY3RsKHR0eWZkLElfUFVTSCwibnBpIikgPCAwICkgewotICAgICAgICAgICAgY2xvc2UodHR5 ZmQpOwotICAgICAgICAgICAgdHR5ZmQgPSAtMTsKLSAgICAgICAgICAgIHdhc2Nsb3NlZCA9IDE7 Ci0gICAgICAgICAgICBwZXJyb3IoICJrZXJtaXQ6IG5ldG9wZW4oKTogY291bGRuJ3QgcHVzaCBu cGkgb24gdGhlIFgyNSBzdHJlYW0iICk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXRvcGVu OiBjYW4ndCBwdXNoIG5waSBvbiB0aGUgWDI1IHN0cmVhbSIsIiIsZXJybm8pOwotICAgICAgICAg ICAgcmV0dXJuICgtMSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBzZXQgdXAgc2VydmVyIG1v ZGUgLSBiaW5kIHRoZSB4MjUgcG9ydCBhbmQgd2FpdCBmb3IKLSAgICAgICAgICogaW5jb21pbmcg Y29ubmVjdGlvbnMKLSAgICAgICAgICovCi0gICAgICAgIGlmIChuYW1lWzBdID09ICcqJykgeyAg ICAgICAgICAgLyogU2VydmVyICovCi0gICAgICAgICAgICAvKiBzZXQgdXAgYSBzZXJ2ZXIgLSBz ZWUgdGhlIHdhcm5pbmcgaW4geDI1YmluZCgpICovCi0gICAgICAgICAgICBiaW5kX2ZsYWdzIHw9 IFRPS0VOX1JFUVVFU1Q7Ci0KLSAgICAgICAgICAgIC8qIGJpbmQga2VybWl0IHRvIHRoZSBsb2Nh bCBYMjUgYWRkcmVzcyAqLwotICAgICAgICAgICAgdG9rZW4gPSB4MjViaW5kKHR0eWZkLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX251YSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1ZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXN0cmxlbigg dWRhdGEgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHgyNXBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZF9m bGFncwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBpZiAodG9r ZW4gPCAwKSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMCwibmV0b3BlbjogY291bGRuJ3Qg YmluZCB0byBsb2NhbCBYMjUgYWRkcmVzcyIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgbmV0Y2xv cygpOwotICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICAvKiBDdXJyZW50bHkgbm90IGNvbm5lY3RlZCB0byBhIHJlbW90ZSBob3N0ICovCi0KLSAg ICAgICAgICAgIHJlbW90ZV9udWFbMF0gPSAnXDAnOwotCi0gICAgICAgICAgICAvKiBzdG9yZSB0 aGUgZmQgc28gdGhhdCBpbmNvbWluZyBjYWxscyBjYW4gaGF2ZSB0aGVpciBvd24gZmQKLSAgICAg ICAgICAgICAqIFRoaXMgaXMgYWxtb3N0IHN1cHBvcnQgZm9yIGEgdHJ1ZSBzZXJ2ZXIgKGllOiBh J2xhIGZ0cGQpCi0gICAgICAgICAgICAgKiBidXQgd2UncmUgbm90IHF1aXRlIHRoZXJlIHlldC4K LSAgICAgICAgICAgICAqIHVzZWQgaW4gbmV0Y2xvcygpCi0gICAgICAgICAgICAgKi8KLSAgICAg ICAgICAgIHgyNXNlcnZlcmZkID0gdHR5ZmQ7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAg ICogd2FpdCBmb3IgYW4gaW5jb21pbmcgY2FsbAotICAgICAgICAgICAgICogdGhpcyBzaG91bGQg aGFwcGVuIGluIHRoZSAic2VydmVyIiBjb21tYW5kIGFuZCBub3QgaW4KLSAgICAgICAgICAgICAq IHRoZSAic2V0IGhvc3QgKiIgY29tbWFuZC4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAg aWYgKCh0dHlmZCA9IHgyNWdldGNhbGwodHR5ZmQpKSA8IDApIHsKLSAgICAgICAgICAgICAgICBu ZXRjbG9zKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGllbnQgKi8KLSAgICAg ICAgICAgIC8qIEJpbmQga2VybWl0IHRvIHRoZSBsb2NhbCBYMjUgYWRkcmVzcyAqLwotICAgICAg ICAgICAgdG9rZW4gPSB4MjViaW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0eWZk LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX251YSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY2hhciAqKU5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg MCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHgyNXBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZF9mbGFncwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBpZiAodG9rZW4gPCAw KSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMCwibmV0b3BlbjogY291bGRuJ3QgYmluZCB0 byBsb2NhbCBYMjUgYWRkcmVzcyIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgbmV0Y2xvcygpOwot ICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICB9Ci0vKiByaWVobTogdGhp cyBzaG91bGQgYmUgZG9uZSB2aWEgdGhlIENPTk5FQ1QgY29tbWFuZCwgbm90IEhPU1QhICovCi0g ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeDI1c2VydmVyZmQgPSAwOwotICAgICAgICAg ICAgICAgIC8qIGNhbGwgdGhlIHJlbW90ZSBob3N0ICovCi0gICAgICAgICAgICAgICAgLyogbmFt ZSA9PSBhZGRyZXNzIG9mIHJlbW90ZSBob3N0IGFzIGNoYXIqICovCi0gICAgICAgICAgICAgICAg aWYgKHgyNWNhbGwodHR5ZmQsIG5hbWUsIHVkYXRhKSA8IDAgKSB7Ci0gICAgICAgICAgICAgICAg ICAgIGRlYnVnKEYxMDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJuZXRvcGVuOiBjb3Vs ZG4ndCBjb25uZWN0IHRvIHJlbW90ZSBYMjUgYWRkcmVzcyIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICIiLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgbmV0Y2xvcygpOwotICAgICAgICAg ICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICBzdHJjcHkocmVtb3RlX251YSwgbmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg ICAgICAgdHRuZXQgPSBuZXR0OyAgICAgICAgICAgICAgICAgICAvKiBBSVggWC4yNSBuZXR3b3Jr ICovCi0gICAgICAgIGlmIChsY2wpIGlmICgqbGNsIDwgMCkgKmxjbCA9IDE7IC8qIExvY2FsIG1v ZGUgKi8KLSAgICAgICAgcmV0dXJuKDApOwotCi0gICAgfSBlbHNlIC8qIE5vdGUgdGhhdCBJQk1Y MjUgc3VwcG9ydCBjYW4gY29leGlzdCB3aXRoIFRDUC9JUCBzdXBwb3J0LiAqLwotI2VuZGlmIC8q IElCTVgyNSAqLwotCi0vKiAgIEFkZCBzdXBwb3J0IGZvciBvdGhlciBuZXR3b3JrcyBoZXJlLiAq LwotCi0gICAgICBpZiAobmV0dCAhPSBORVRfVENQQikgcmV0dXJuKC0xKTsgLyogQlNEIHNvY2tl dCBzdXBwb3J0ICovCi0KLSNpZmRlZiBUQ1BTT0NLRVQKLSAgICBuZXRjbG9zKCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBDbG9zZSBhbnkgcHJldmlvdXMgY29ubmVjdGlvbi4gKi8KLSAg ICBja3N0cm5jcHkobmFtZWNvcHksIG5hbWUsIE5BTUVDUFlMKTsgICAgICAgIC8qIENvcHkgdGhl IGhvc3RuYW1lLiAqLwotICAgIGRlYnVnKEYxMTAsIm5ldG9wZW4gbmFtZWNvcHkiLG5hbWVjb3B5 LDApOwotCi0jaWZuZGVmIE5PTElTVEVOCi0gICAgaWYgKG5hbWVbMF0gPT0gJyonKQotICAgICAg cmV0dXJuKHRjcHNydl9vcGVuKG5hbWUsIGxjbCwgbmV0dCwgMCkpOwotI2VuZGlmIC8qIE5PTElT VEVOICovCi0KLSAgICBwID0gbmFtZWNvcHk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBXYXMg YSBzZXJ2aWNlIHJlcXVlc3RlZD8gKi8KLSAgICB3aGlsZSAoKnAgIT0gJ1wwJyAmJiAqcCAhPSAn OicpIHArKzsgLyogTG9vayBmb3IgY29sb24gKi8KLSAgICBpZiAoKnAgPT0gJzonKSB7ICAgICAg ICAgICAgICAgICAgICAvKiBIYXZlIGEgY29sb24gKi8KLSAgICAgICAgZGVidWcoRjExMCwibmV0 b3BlbiBuYW1lIGhhcyBjb2xvbiIsbmFtZWNvcHksMCk7Ci0gICAgICAgICpwKysgPSAnXDAnOyAg ICAgICAgICAgICAgICAgICAgLyogR2V0IHNlcnZpY2UgbmFtZSBvciBudW1iZXIgKi8KLSNpZmRl ZiBDS19VUkwKLSAgICAgICAgLyoKLSAgICAgICAgICAgSGVyZSB3ZSBoYXZlIHRvIGNoZWNrIGZv ciB2YXJpb3VzIHBvcHVsYXIgc3ludGF4ZXM6Ci0gICAgICAgICAgIGhvc3Q6cG9ydCAob3VyIG9y aWdpbmFsIHN5bnRheCkKLSAgICAgICAgICAgVVJMIHN1Y2ggYXMgdGVsbmV0Omhvc3Qgb3IgdGVs bmV0Oi8vaG9zdC8KLSAgICAgICAgICAgT3IgZXZlbiB0ZWxuZXQ6Ly91c2VyOnBhc3N3b3JkQGhv c3Q6cG9ydC9wYXRoLwotICAgICAgICAgICBPciBhIG1hbGZvcm1lZCBVUkwgc3VjaCBhcyBnZW5l cmF0ZWQgYnkgTmV0c2NhcGUgNC4wIGxpa2U6Ci0gICAgICAgICAgIHRlbG5ldDp0ZWxuZXQgb3Ig dGVsbmV0Ojpob3N0LgotICAgICAgICAqLwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFJFUExB Q0UgVEhJUyBDT0RFIFdJVEggdXJscGFyc2UoKSBidXQgbm90IG9uIHRoZSBkYXkgb2YgdGhlCi0g ICAgICAgICAqIEMtS2VybWl0IDguMCBSRUxFQVNFLgotICAgICAgICAgKi8KLQotICAgICAgICBp ZiAoKnAgPT0gJzonKSAgICAgICAgICAgICAgICAgIC8qIGEgc2Vjb25kIGNvbG9uICovCi0gICAg ICAgICAgKnArKyA9ICdcMCc7ICAgICAgICAgICAgICAgICAgLyogZ2V0IHJpZCBvZiB0aGF0IG9u ZSB0b28gKi8KLSAgICAgICAgd2hpbGUgKCpwID09ICcvJykgKnArKyA9ICdcMCc7ICAvKiBhbmQg c2xhc2hlcyAqLwotICAgICAgICB4ID0gc3RybGVuKHApOyAgICAgICAgICAgICAgICAgIC8qIExl bmd0aCBvZiByZW1haW5kZXIgKi8KLSAgICAgICAgaWYgKHBbeC0xXSA9PSAnLycpICAgICAgICAg ICAgICAvKiBJZiB0aGVyZSBpcyBhIHRyYWlsaW5nIHNsYXNoICovCi0gICAgICAgICAgcFt4LTFd ID0gJ1wwJzsgICAgICAgICAgICAgICAgLyogcmVtb3ZlIGl0LiAqLwotICAgICAgICBkZWJ1ZyhG MTEwLCJuZXRvcGVuIG5hbWVjb3B5IGFmdGVyIHN0cmlwcGluZyIsbmFtZWNvcHksMCk7Ci0gICAg ICAgIGRlYnVnKEYxMTAsIm5ldG9wZW4gcCBhZnRlciBzdHJpcHBpbmciLHAsMCk7Ci0gICAgICAg IHNlcnZpY2UgPSBnZXRzZXJ2YnluYW1lKG5hbWVjb3B5LCJ0Y3AiKTsKLSAgICAgICAgaWYgKHNl cnZpY2UgfHwKLSNpZmRlZiBSTE9HQ09ERQotICAgICAgICAgICAgIWNrc3RyY21wKCJybG9naW4i LG5hbWVjb3B5LE5BTUVDUFlMLDApIHx8Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNpZmRlZiBD S19TU0wKLSAgICAgICAgICAgICFja3N0cmNtcCgidGVsbmV0cyIsbmFtZWNvcHksTkFNRUNQWUws MCkgfHwKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICAgICFja3N0cmNtcCgiaWtzZCIs bmFtZWNvcHksTkFNRUNQWUwsMCkKLSAgICAgICAgICAgICkgewotICAgICAgICAgICAgY2hhciB0 ZW1waG9zdFsyNTZdLCB0ZW1wc2VydmljZVs4MF0sIHRlbXBwYXRoWzI1Nl07Ci0gICAgICAgICAg ICBjaGFyICogcSA9IHAsICpyID0gcCwgKncgPSBwOwotICAgICAgICAgICAgaW50IHVpZGZvdW5k PTA7Ci0gICAgICAgICAgICBleHRlcm4gY2hhciBwd2J1ZltdOwotICAgICAgICAgICAgZXh0ZXJu IGludCBwd2ZsZywgcHdjcnlwdDsKLQotICAgICAgICAgICAgaWYgKHR0bnByb3RvID09IE5QX0RF RkFVTFQpCi0gICAgICAgICAgICAgIHNldG5wcm90byhuYW1lY29weSk7Ci0KLSAgICAgICAgICAg IC8qIENoZWNrIGZvciB1c2VyaWQgYW5kIHBvc3NpYmx5IHBhc3N3b3JkICovCi0gICAgICAgICAg ICB3aGlsZSAoKnAgIT0gJ1wwJyAmJiAqcCAhPSAnQCcpCi0gICAgICAgICAgICAgICAgcCsrOyAv KiBsb29rIGZvciBAICovCi0gICAgICAgICAgICBpZiAoKnAgPT0gJ0AnKSB7Ci0gICAgICAgICAg ICAgICAgLyogZm91bmQgdXNlcm5hbWUgYW5kIHBlcmhhcHMgcGFzc3dvcmQgKi8KLSAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTEwLCJuZXRvcGVuIG5hbWVjb3B5IGZvdW5kIEAiLCIiLDApOwotICAg ICAgICAgICAgICAgICpwID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBwKys7Ci0gICAgICAgICAg ICAgICAgd2hpbGUgKCp3ICE9ICdcMCcgJiYgKncgIT0gJzonKQotICAgICAgICAgICAgICAgICAg dysrOwotICAgICAgICAgICAgICAgIGlmICgqdyA9PSAnOicpCi0gICAgICAgICAgICAgICAgICAq dysrID0gJ1wwJzsKLSAgICAgICAgICAgICAgICAvKiByIG5vdyBwb2ludHMgdG8gdXNlcm5hbWUs IHNhdmUgaXQgYW5kIHRoZSBwYXNzd29yZCAqLwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAs Im5ldG9wZW4gbmFtZWNvcHkgdXNlcm5hbWUiLHIsMCk7Ci0gICAgICAgICAgICAgICAgZGVidWco RjExMCwibmV0b3BlbiBuYW1lY29weSBwYXNzd29yZCIsdywwKTsKLSAgICAgICAgICAgICAgICB1 aWRmb3VuZD0xOwotICAgICAgICAgICAgICAgIGlmICggc3RyY21wKHVpZGJ1ZixyKSB8fCAqdyAp Ci0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShwd2J1Zix3LFBXQlVGTCsxKTsKLSAgICAg ICAgICAgICAgICBja3N0cm5jcHkodWlkYnVmLHIsVUlEQlVGTEVOKTsKLSAgICAgICAgICAgICAg ICBwd2ZsZyA9IDE7Ci0gICAgICAgICAgICAgICAgcHdjcnlwdCA9IDA7Ci0gICAgICAgICAgICAg ICAgcSA9IHA7ICAgICAgICAgICAgICAgICAgLyogSG9zdCBhZnRlciB1c2VyIGFuZCBwd2QgKi8K LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcCA9IHE7ICAgICAgICAgICAg ICAgICAgLyogTm8gdXNlcm5hbWUgb3IgcGFzc3dvcmQgKi8KLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIC8qIE5vdyB3ZSBtdXN0IGxvb2sgZm9yIHRoZSBvcHRpb25hbCBwb3J0LiAqLwotICAg ICAgICAgICAgZGVidWcoRjExMCwibmV0b3BlbiB4IHAiLHAsMCk7Ci0gICAgICAgICAgICBkZWJ1 ZyhGMTEwLCJuZXRvcGVuIHggcSIscSwwKTsKLQotICAgICAgICAgICAgLyogTG9vayBmb3IgdGhl IHBvcnQvc2VydmljZSBvciBhIGZpbGUvZGlyZWN0b3J5IHBhdGggKi8KLSAgICAgICAgICAgIHdo aWxlICgqcCAhPSAnXDAnICYmICpwICE9ICc6JyAmJiAqcCAhPSAnLycpCi0gICAgICAgICAgICAg IHArKzsKLSAgICAgICAgICAgIGlmICgqcCA9PSAnOicpIHsKLSAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTEwLCJuZXRvcGVuIGZvdW5kIHBvcnQiLHEsMCk7Ci0gICAgICAgICAgICAgICAgKnArKyA9 ICdcMCc7ICAgICAgICAgICAgLyogRm91bmQgYSBwb3J0IG5hbWUgb3IgbnVtYmVyICovCi0gICAg ICAgICAgICAgICAgciA9IHA7Ci0KLSAgICAgICAgICAgICAgICAvKiBMb29rIGZvciB0aGUgZW5k IG9mIHBvcnQvc2VydmljZSBvciBhIGZpbGUvZGlyZWN0b3J5IHBhdGggKi8KLSAgICAgICAgICAg ICAgICB3aGlsZSAoKnAgIT0gJ1wwJyAmJiAqcCAhPSAnLycpCi0gICAgICAgICAgICAgICAgICAg IHArKzsKLSAgICAgICAgICAgICAgICBpZiAoKnAgPT0gJy8nKQotICAgICAgICAgICAgICAgICAg ICAqcCsrID0gJ1wwJzsKLQotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsIm5ldG9wZW4gcG9y dCIsciwwKTsKLSAgICAgICAgICAgICAgICBja3N0cm5jcHkodGVtcHNlcnZpY2Usciw4MCk7Ci0g ICAgICAgICAgICAgICAgY2tzdHJuY3B5KHRlbXBob3N0LHEsMjU2KTsKLSAgICAgICAgICAgICAg ICBja3N0cm5jcHkodGVtcHBhdGgscCwyNTYpOwotICAgICAgICAgICAgICAgIGNrc3RybmNweShu YW1lY29weSx0ZW1waG9zdCxOQU1FQ1BZTCk7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwi bmV0b3BlbiB0ZW1wc2VydmljZSIsdGVtcHNlcnZpY2UsMCk7Ci0gICAgICAgICAgICAgICAgZGVi dWcoRjExMCwibmV0b3BlbiB0ZW1waG9zdCIsdGVtcGhvc3QsMCk7Ci0gICAgICAgICAgICAgICAg ZGVidWcoRjExMCwibmV0b3BlbiB0ZW1wcGF0aCIsdGVtcHBhdGgsMCk7Ci0KLSAgICAgICAgICAg ICAgICAvKiBtb3ZlIHBvcnQvc2VydmljZSB0byBhIGJ1ZmZlciB0aGF0IHdvbid0IGdvIGF3YXkg Ki8KLSAgICAgICAgICAgICAgICB4ID0gc3RybGVuKG5hbWVjb3B5KTsKLSAgICAgICAgICAgICAg ICBwID0gbmFtZWNvcHkgKyB4ICsgMTsKLSAgICAgICAgICAgICAgICBja3N0cm5jcHkocCwgdGVt cHNlcnZpY2UsIE5BTUVDUFlMIC0geCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg ICAgICAgIC8qIEhhbmRsZSBhIHBhdGggaWYgd2UgZm91bmQgb25lICovCi0gICAgICAgICAgICAg ICAgaWYgKCpwID09ICcvJykKLSAgICAgICAgICAgICAgICAgICAgKnArKyA9ICdcMCc7Ci0gICAg ICAgICAgICAgICAgY2tzdHJuY3B5KHRlbXBwYXRoLHAsMjU2KTsKLQotICAgICAgICAgICAgICAg IC8qIFdlIGRpZG4ndCBmaW5kIGFub3RoZXIgcG9ydCwgYnV0IGlmIHEgaXMgYSBzZXJ2aWNlICov Ci0gICAgICAgICAgICAgICAgLyogdGhlbiBhc3N1bWUgdGhhdCBuYW1lY29weSBpcyBhY3R1YWxs eSBhIGhvc3QuICAgICAgKi8KLSAgICAgICAgICAgICAgICBpZiAoZ2V0c2VydmJ5bmFtZShxLCJ0 Y3AiKSkgewotICAgICAgICAgICAgICAgICAgICBwID0gcTsKLSAgICAgICAgICAgICAgICB9IGVs c2UgewotI2lmZGVmIFJMT0dDT0RFCi0gICAgICAgICAgICAgICAgICAgIC8qIHJsb2dpbiBpcyBu b3QgYSB2YWxpZCBzZXJ2aWNlICovCi0gICAgICAgICAgICAgICAgICAgIGlmICghY2tzdHJjbXAo InJsb2dpbiIsbmFtZWNvcHksNiwwKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2tzdHJu Y3B5KG5hbWVjb3B5LCJsb2dpbiIsTkFNRUNQWUwpOwotICAgICAgICAgICAgICAgICAgICB9Ci0j ZW5kaWYgLyogUkxPR0NPREUgKi8KLSAgICAgICAgICAgICAgICAgICAgLyogaWtzZCBpcyBub3Qg YSB2YWxpZCBzZXJ2aWNlICovCi0gICAgICAgICAgICAgICAgICAgIGlmICghY2tzdHJjbXAoImlr c2QiLG5hbWVjb3B5LDYsMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShu YW1lY29weSwia2VybWl0IixOQU1FQ1BZTCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICAgICAgLyogUmVjb25zdHJ1Y3QgbmFtZWNvcHkgKi8KLSAgICAgICAgICAgICAg ICAgICAgY2tzdHJuY3B5KHRlbXBzZXJ2aWNlLG5hbWVjb3B5LDgwKTsKLSAgICAgICAgICAgICAg ICAgICAgY2tzdHJuY3B5KHRlbXBob3N0LHEsMjU2KTsKLSAgICAgICAgICAgICAgICAgICAgY2tz dHJuY3B5KG5hbWVjb3B5LHRlbXBob3N0LE5BTUVDUFlMKTsKLSAgICAgICAgICAgICAgICAgICAg ZGVidWcoRjExMCwibmV0b3BlbiB0ZW1wc2VydmljZSIsdGVtcHNlcnZpY2UsMCk7Ci0gICAgICAg ICAgICAgICAgICAgIGRlYnVnKEYxMTAsIm5ldG9wZW4gdGVtcGhvc3QiLHRlbXBob3N0LDApOwot ICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJuZXRvcGVuIHRlbXBwYXRoIix0ZW1wcGF0 aCwwKTsKLQotICAgICAgICAgICAgICAgICAgICAvKiBtb3ZlIHBvcnQvc2VydmljZSB0byBhIGJ1 ZmZlciB0aGF0IHdvbid0IGdvIGF3YXkgKi8KLSAgICAgICAgICAgICAgICAgICAgeCA9IHN0cmxl bihuYW1lY29weSk7Ci0gICAgICAgICAgICAgICAgICAgIHAgPSBuYW1lY29weSArIHggKyAxOwot ICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkocCwgdGVtcHNlcnZpY2UsIE5BTUVDUFlMIC0g eCAtIDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRl YnVnKEYxMTAsIm5ldG9wZW4gVVJMIHJlc3VsdDogaG9zdCIsbmFtZWNvcHksMCk7Ci0gICAgICAg ICAgICBkZWJ1ZyhGMTEwLCJuZXRvcGVuIFVSTCByZXN1bHQ6IHNlcnZpY2UiLHAsMCk7Ci0gICAg ICAgICAgICBkZWJ1ZyhGMTEwLCJuZXRvcGVuIFVSTCByZXN1bHQ6IHBhdGgiLHRlbXBwYXRoLDAp OwotCi0jaWZkZWYgSUtTX0dFVAotICAgICAgICAgICAgLyogSWYgd2UgaGF2ZSBzZXQgYSBwYXRo IHNwZWNpZmllZCwgd2UgbmVlZCB0byB0cnkgdG8gR0VUIGl0ICovCi0gICAgICAgICAgICAvKiBC dXQgd2UgaGF2ZSBhbm90aGVyIHByb2JsZW0sIHdlIGhhdmUgdG8gbG9naW4gZmlyc3QuICBIb3cg Ki8KLSAgICAgICAgICAgIC8qIGRvIHdlIHNwZWNpZnkgdGhhdCBhIGxvZ2luIG11c3QgYmUgZG9u ZSBiZWZvcmUgdGhlIEdFVD8gICAqLwotICAgICAgICAgICAgLyogVGhlIHVzZXIncyBuYW1lIGlm IHNwZWNpZmllZCBpcyBpbiAndXNlcmlkJyBhbmQgdGhlICAgICAgICovCi0gICAgICAgICAgICAv KiBwYXNzd29yZCBpZiBhbnkgaXMgaW4gJ3B3YnVmJy4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgKi8KLSAgICAgICAgICAgIGlmICggdGVtcHBhdGhbMF0gKSB7Ci0gICAgICAgICAgICAgICAg ZXh0ZXJuIGludCBhY3Rpb247Ci0gICAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIgKiBjbWFyZzsK LQotICAgICAgICAgICAgICAgIGlmICggIXVpZGZvdW5kICkgewotICAgICAgICAgICAgICAgICAg ICAvKiBJZiBubyB1c2VyaWQgd2FzIHNwZWNpZmllZCBhcyBwYXJ0IG9mIHRoZSBVUkwgYnV0Ci0g ICAgICAgICAgICAgICAgICAgICAqIGEgcGF0aCB3YXMgc3BlY2lmaWVkLCB0aGVuIHdlCi0gICAg ICAgICAgICAgICAgICAgICAqIHNldCB0aGUgdXNlciBuYW1lIHRvIGFub255bW91cyBhbmQgdGhl IHBhc3N3b3JkCi0gICAgICAgICAgICAgICAgICAgICAqIHRvIHRoZSBjdXJyZW50IHVzZXJpZC4K LSAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShw d2J1Zix1aWRidWYsUFdCVUZMKTsKLSAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHB3YnVm LCJAIixQV0JVRkwpOwotICAgICAgICAgICAgICAgICAgICBwd2ZsZyA9IDE7Ci0gICAgICAgICAg ICAgICAgICAgIHB3Y3J5cHQgPSAwOwotICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkodWlk YnVmLCJhbm9ueW1vdXMiLFVJREJVRkxFTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg ICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiBJZiBhIGZpbGUgcGF0aCB3YXMgc3BlY2lm aWVkIHdlIHBlcmZvcm0gdGhlIEdFVAotICAgICAgICAgICAgICAgICAqIG9wZXJhdGlvbiBhbmQg dGhlbiB0ZXJtaW5hdGUgdGhlIGNvbm5lY3Rpb24uCi0gICAgICAgICAgICAgICAgICoKLSAgICAg ICAgICAgICAgICAgKiBJZiBhIGRpcmVjdG9yeSB3YXMgZ2l2ZW4gaW5zdGVhZCBvZiBhIGZpbGUs IHRoZW4KLSAgICAgICAgICAgICAgICAgKiB3ZSBzaG91bGQgUkVNT1RFIENEIHRvIHRoZSBkaXJl Y3RvcnkgYW5kIGxpc3QgaXRzCi0gICAgICAgICAgICAgICAgICogY29udGVudHMuICBCdXQgaG93 IGRvIHdlIHRlbGwgdGhlIGRpZmZlcmVuY2U/Ci0gICAgICAgICAgICAgICAgICovCi0gICAgICAg ICAgICAgICAgbWFrZXN0cigmY21hcmcsdGVtcHBhdGgpOwotICAgICAgICAgICAgICAgIGFjdGlv biA9ICdyJzsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBJS1NfR0VUICovCi0gICAgICAgIH0K LSNlbmRpZiAvKiBDS19VUkwgKi8KLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBPdGhlcndpc2UgdXNlIHRlbG5ldCAqLwotICAgICAgICBwID0gInRlbG5ldCI7Ci0g ICAgfQotLyoKLSAgQnkgdGhlIHRpbWUgd2UgZ2V0IGhlcmUsIG5hbWVjb3B5W10gc2hvdWxkIGhv bGQgdGhlIG51bGwtdGVybWluYXRlZAotICBob3N0bmFtZSBvciBhZGRyZXNzLCBhbmQgcCBzaG91 bGQgcG9pbnQgdG8gdGhlIHNlcnZpY2UgbmFtZSBvciBudW1iZXIuCi0qLwotICAgIGRlYnVnKEYx MTAsIm5ldG9wZW4gaG9zdCIsbmFtZWNvcHksMCk7Ci0gICAgZGVidWcoRjExMCwibmV0b3BlbiBz ZXJ2aWNlIHJlcXVlc3RlZCIscCwwKTsKLQotICAgLyogVXNlIHRoZSBzZXJ2aWNlIHBvcnQgdG8g c2V0IHRoZSBkZWZhdWx0IHByb3RvY29sIHR5cGUgaWYgbmVjZXNzYXJ5ICovCi0gICAgaWYgKHR0 bnByb3RvID09IE5QX0RFRkFVTFQpCi0gICAgICAgc2V0bnByb3RvKHApOwotCi0gICAgY2tzdHJu Y3B5KG5hbWVjb3B5MixuYW1lY29weSxOQU1FQ1BZTCk7Ci0gICAgc2VydmljZSA9IGNrZ2V0c2Vy dmljZShuYW1lY29weSxwLG5hbWVjb3B5LE5BTUVDUFlMKTsKLSAgICBpZiAoIXNlcnZpY2UpIHsK LSAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW4ndCBmaW5kIHBvcnQgZm9yIHNlcnZpY2UgJXNc biIsIHApOwotI2lmZGVmIFRHVk9SV0lOCi0gICAgICAgIGRlYnVnKEYxMDEsIm5ldG9wZW4gY2Fu J3QgZ2V0IHNlcnZpY2UiLCIiLHNvY2tldF9lcnJubyk7Ci0jZWxzZQotICAgICAgICBkZWJ1ZyhG MTAxLCJuZXRvcGVuIGNhbid0IGdldCBzZXJ2aWNlIiwiIixlcnJubyk7Ci0jZW5kaWYgLyogVEdW T1JXSU4gKi8KLSAgICAgICAgZXJybm8gPSAwOyAgICAgICAgICAgICAgICAgIC8qIChyYXRoZXIg dGhhbiBtaXNsZWFkKSAqLwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0gZWxzZSB7Ci0gICAg ICAgIGlmICghY2tzdHJjbXAobmFtZWNvcHksbmFtZWNvcHkyLC0xLDApKQotCSAgbmFtZWNvcHky WzBdID0gJ1wwJzsKLSAgICAgICAgY2tzdHJuY3B5KHN2Y2J1Zixja3VpdG9hKG50b2hzKHNlcnZp Y2UtPnNfcG9ydCkpLHNpemVvZihzdmNidWYpKTsKLSAgICAgICAgZGVidWcoRjExMCwibmV0b3Bl biBzZXJ2aWNlIG9rIixzdmNidWYsMCk7Ci0gICAgfQotCi0jaWZkZWYgUkxPR0NPREUKLSAgICBp ZiAoc2VydmljZSAmJiAhc3RyY21wKCJsb2dpbiIscCkgJiYgc2VydmljZS0+c19wb3J0ICE9IGh0 b25zKDUxMykpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgIiAg V2FybmluZzogbG9naW4gc2VydmljZSBvbiBwb3J0ICVkIGluc3RlYWQgb2YgcG9ydCA1MTNcbiIs Ci0gICAgICAgICAgICAgICAgIG50b2hzKHNlcnZpY2UtPnNfcG9ydCkKLSAgICAgICAgICAgICAg ICApOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgRWRpdCBTRVJWSUNFUyBmaWxlIGlmIFJM T0dJTiBmYWlscyB0byBjb25uZWN0LlxuIik7Ci0gICAgICAgIGRlYnVnKEYxMDEsInRjcHNydl9v cGVuIGxvZ2luIG9uIHBvcnQiLCIiLG50b2hzKHNlcnZpY2UtPnNfcG9ydCkpOwotICAgIH0KLSNl bmRpZiAvKiBSTE9HQ09ERSAqLwotCi0jaWZuZGVmIE5PSFRUUAotICAgLyogRm9yIEhUVFAgY29u bmVjdGlvbnMgd2UgbXVzdCBwcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgaG9zdG5hbWUgYW5kICovCi0g ICAvKiBzZXJ2aWNlIHJlcXVlc3RlZCBzbyB3ZSBjYW4gaW5jbHVkZSB0aGVtIGluIHRoZSBIb3N0 IGhlYWRlci4gICAgKi8KLSAgICBja21ha21zZyhodHRwX2hvc3RfcG9ydCxzaXplb2YoaHR0cF9o b3N0X3BvcnQpLG5hbWVjb3B5LCI6IiwKLSAgICAgICAgICAgICAgY2tpdG9hKG50b2hzKHNlcnZp Y2UtPnNfcG9ydCkpLE5VTEwpOwotCi0gICAgLyogJ25hbWVjb3B5JyBjb250YWlucyB0aGUgbmFt ZSBvZiB0aGUgaG9zdCB0byB3aGljaCB3ZSB3YW50IHRvIGNvbm5lY3QgKi8KLSAgICAvKiAnc3Zj YnVmJyAgIGNvbnRhaW5zIHRoZSBzZXJ2aWNlIG5hbWUgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqLwotICAgIC8qICdzZXJ2aWNlLT5zX3BvcnQnIGNvbnRhaW5zIHRoZSBwb3J0IG51 bWJlciBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIgICAgICovCi0KLSAgICAvKiBJZiB3ZSBhcmUgdXNp bmcgYW4gaHR0cCBwcm94eSwgd2UgbmVlZCB0byBjcmVhdGUgYSBidWZmZXIgY29udGFpbmluZyAq LwotICAgIC8qICAgaG9zdG5hbWU6cG9ydC1udW1iZXIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogdG8gcGFzcyB0byB0aGUgaHR0cF9jb25u ZWN0KCkgZnVuY3Rpb24uICBUaGVuIHdlIG5lZWQgdG8gcmVwbGFjZSAgICAgKi8KLSAgICAvKiAn bmFtZWNvcHknIHdpdGggdGhlIG5hbWUgb2YgdGhlIHByb3h5IHNlcnZlciBhbmQgdGhlIHNlcnZp Y2UtPnNfcG9ydCAqLwotICAgIC8qIHdpdGggdGhlIHBvcnQgbnVtYmVyIG9mIHRoZSBwcm94eSAo ZGVmYXVsdCBwb3J0IDgwKS4gICAgICAgICAgICAgICAgICovCi0KLSAgICBpZiAoIHRjcF9odHRw X3Byb3h5ICkgewotICAgICAgICBja21ha21zZyhwcm94eWNvcHksc2l6ZW9mKHByb3h5Y29weSks bmFtZWNvcHksIjoiLAotICAgICAgICAgICAgICAgICBja3VpdG9hKG50b2hzKHNlcnZpY2UtPnNf cG9ydCkpLE5VTEwpOwotICAgICAgICBja3N0cm5jcHkobmFtZWNvcHksdGNwX2h0dHBfcHJveHks TkFNRUNQWUwpOwotCi0gICAgICAgIHAgPSBuYW1lY29weTsgICAgICAgICAgICAgICAgICAgICAg IC8qIFdhcyBhIHNlcnZpY2UgcmVxdWVzdGVkPyAqLwotICAgICAgICB3aGlsZSAoKnAgIT0gJ1ww JyAmJiAqcCAhPSAnOicpIHArKzsgLyogTG9vayBmb3IgY29sb24gKi8KLSAgICAgICAgaWYgKCpw ID09ICc6JykgeyAgICAgICAgICAgICAgICAgICAgLyogSGF2ZSBhIGNvbG9uICovCi0gICAgICAg ICAgICBkZWJ1ZyhGMTEwLCJuZXRvcGVuIG5hbWUgaGFzIGNvbG9uIixuYW1lY29weSwwKTsKLSAg ICAgICAgICAgICpwKysgPSAnXDAnOyAgICAgICAgICAgICAgICAgICAgLyogR2V0IHNlcnZpY2Ug bmFtZSBvciBudW1iZXIgKi8KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0cmNweSgr K3AsImh0dHAiKTsKLSAgICAgICAgfQotCi0gICAgICAgIHNlcnZpY2UgPSBja2dldHNlcnZpY2Uo bmFtZWNvcHkscCxuYW1lY29weSxOQU1FQ1BZTCk7Ci0gICAgICAgIGlmICghc2VydmljZSkgewot ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW4ndCBmaW5kIHBvcnQgZm9yIHNlcnZpY2Ug JXNcbiIsIHApOwotI2lmZGVmIFRHVk9SV0lOCi0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXRv cGVuIGNhbid0IGdldCBzZXJ2aWNlIGZvciBwcm94eSIsIiIsc29ja2V0X2Vycm5vKTsKLSNlbHNl Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXRvcGVuIGNhbid0IGdldCBzZXJ2aWNlIGZvciBw cm94eSIsIiIsZXJybm8pOwotI2VuZGlmIC8qIFRHVk9SV0lOICovCi0gICAgICAgICAgICBlcnJu byA9IDA7ICAgICAgICAgICAgICAgICAgLyogKHJhdGhlciB0aGFuIG1pc2xlYWQpICovCi0gICAg ICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0gICAgICAgIGNrc3RybmNweShwLGNrdWl0 b2EobnRvaHMoc2VydmljZS0+c19wb3J0KSksTkFNRUNQWUwtKHAtbmFtZWNvcHkpKTsKLQotICAg IH0KLSNlbmRpZiAvKiBOT0hUVFAgKi8KLQotICAgIC8qIFNldCB1cCBzb2NrZXQgc3RydWN0dXJl IGFuZCBnZXQgaG9zdCBhZGRyZXNzICovCi0KLSAgICBiemVybygoY2hhciAqKSZyX2FkZHIsIHNp emVvZihyX2FkZHIpKTsKLSAgICBkZWJ1ZyhGMTAwLCJuZXRvcGVuIGJ6ZXJvIG9rIiwiIiwwKTsK LS8qCi0gICBOT1RFOiBPcmlnaW5hbGx5IHRoZSBpbmV0X2FkZHIoKSBjaGVjayB3YXMgI2lmZGVm IE5ULCBidXQgaXMgZW5hYmxlZCBmb3IKLSAgIGFsbCBhcyBvZiAyMCBTZXAgOTcsIHRvIGFsbG93 IHBlb3BsZSB0byAic2V0IGhvc3QiIHRvIGEgc3BlY2lmaWMgbnVtZXJpYyBJUAotICAgYWRkcmVz cyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhlIG11bHRpaG9tZWQgaG9zdCBzZXF1ZW5jZSBhbmQg d2luZGluZyB1cAotICAgYXQgYSBkaWZmZXJlbnQgcGxhY2UgdGhhbiB0aGUgb25lIHJlcXVlc3Rl ZC4KLSovCi0jaWZkZWYgSU5BRERSX05PTkUKLSAgICBkZWJ1ZyhGMTAxLCJuZXRvcGVuIElOQURE Ul9OT05FIGRlZmluZWQiLCIiLElOQUREUl9OT05FKTsKLSNlbHNlIC8qIElOQUREUl9OT05FICov Ci0gICAgZGVidWcoRjEwMCwibmV0b3BlbiBJTkFERFJfTk9ORSBub3QgZGVmaW5lZCIsIiIsMCk7 Ci0jZW5kaWYgLyogSU5BRERSX05PTkUgKi8KLSNpZmRlZiBJTkFERFJYCi0gICAgZGVidWcoRjEw MCwibmV0b3BlbiBJTkFERFJYIGRlZmluZWQiLCIiLDApOwotI2Vsc2UgLyogSU5BRERSWCAqLwot ICAgIGRlYnVnKEYxMDAsIm5ldG9wZW4gSU5BRERSWCBub3QgZGVmaW5lZCIsIiIsMCk7Ci0jZW5k aWYgLyogSU5BRERSWCAqLwotCi0jaWZuZGVmIE5PTUhIT1NUCi0jaWZkZWYgSU5BRERSWAotICAg IGlheCA9IGluZXRfYWRkcihuYW1lY29weSk7Ci0gICAgZGVidWcoRjExMSwibmV0b3BlbiBpbmV0 X2FkZHIiLG5hbWVjb3B5LGlheC5zX2FkZHIpOwotI2Vsc2UgLyogSU5BRERSWCAqLwotI2lmZGVm IElOQUREUl9OT05FCi0gICAgaWF4LnNfYWRkciA9IGluZXRfYWRkcihuYW1lY29weSk7Ci0gICAg ZGVidWcoRjExMSwibmV0b3BlbiBpbmV0X2FkZHIiLG5hbWVjb3B5LGlheC5zX2FkZHIpOwotI2Vs c2UgLyogSU5BRERSX05PTkUgKi8KLSNpZmRlZiBTT0xBUklTCi0gICAgLyogSW4gU29sYXJpcyBp bmV0X2FkZHIoKSBpcyBvZiB0eXBlIGluX2FkZHJfdCB3aGljaCBpcyB1aW50MzJfdCAqLwotICAg IC8qICh1bnNpZ25lZCkgeWV0IGl0IHJldHVybnMgLTEgKHNpZ25lZCkgb24gZmFpbHVyZS4gKi8K LSAgICAvKiBJdCBtYWtlcyBhIGRpZmZlcmVuY2UgaW4gNjQtYml0IGJ1aWxkcy4gKi8KLSAgICBy Y19pbmV0X2FkZHIgPSBpbmV0X2FkZHIobmFtZWNvcHkpOwkvKiBBc3NpZ24gcmV0dXJuIGNvZGUg dG8gYW4gaW50ICovCi0gICAgaWF4ID0gKHVuc2lnbmVkKSByY19pbmV0X2FkZHI7CS8qIGFuZCBm cm9tIHRoZXJlIHRvIHdoYXRldmVyLi4gKi8KLSNlbHNlCi0jaWZuZGVmIGRhdGFnZW5lcmFsCi0g ICAgaWF4ID0gKHVuc2lnbmVkIGludCkgaW5ldF9hZGRyKG5hbWVjb3B5KTsKLSNlbHNlCi0gICAg aWF4ID0gLTFMOwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyogU09MQVJJUyAq LwotICAgIGRlYnVnKEYxMTEsIm5ldG9wZW4gcmNfaW5ldF9hZGRyIixuYW1lY29weSxyY19pbmV0 X2FkZHIpOwotICAgIGRlYnVnKEYxMTEsIm5ldG9wZW4gaW5ldF9hZGRyIixuYW1lY29weSxpYXgp OwotI2VuZGlmIC8qIElOQUREUl9OT05FICovCi0jZW5kaWYgLyogSU5BRERSWCAqLwotCi0gICAg ZG5zID0gMDsKLSAgICBpZiAoCi0vKiBUaGlzIG1pZ2h0IGdpdmUgd2FybmluZ3Mgb24gNjQtYml0 IHBsYXRmb3JtcyBidXQgdGhleSBzaG91bGQgYmUgaGFybWxlc3MgKi8KLS8qIGJlY2F1c2UgSU5B RERSX05PTkUgc2hvdWxkIGJlIGFsbCAxJ3MgYW55d2F5LCB0aHVzIHRoZSBPUiBwYXJ0IGlzICov Ci0vKiBwcm9iYWJseSBzdXBlcmZsdW91cyAtLSBub3Qgc3VyZSB3aHkgaXQncyBldmVuIHRoZXJl LCBtYXliZSBpdCBzaG91bGQgYmUgKi8KLS8qIHJlbW92ZWQuICovCi0jaWZkZWYgU09MQVJJUwot CXJjX2luZXRfYWRkciA9PSAtMQotI2Vsc2UKLSNpZmRlZiBJTkFERFJfTk9ORQotICAgICAgICBp YXguc19hZGRyID09IElOQUREUl9OT05FIC8qIHx8IGlheC5zX2FkZHIgPT0gKHVuc2lnbmVkIGxv bmcpIC0xTCAqLwotI2Vsc2UgLyogSU5BRERSX05PTkUgKi8KLSAgICAgICAgaWF4IDwgMAotI2Vu ZGlmIC8qIElOQUREUl9OT05FICovCi0jZW5kaWYgLyogU09MQVJJUyAqLwotICAgICAgICApIHsK LSAgICAgICAgaWYgKCFxdWlldCkgewotICAgICAgICAgICAgcHJpbnRmKCIgRE5TIExvb2t1cC4u LiAiKTsKLSAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOwotICAgICAgICB9Ci0gICAgICAgIGlm ICgoaG9zdCA9IGdldGhvc3RieW5hbWUobmFtZWNvcHkpKSAhPSBOVUxMKSB7Ci0gICAgICAgICAg ICBkZWJ1ZyhGMTEwLCJuZXRvcGVuIGdldGhvc3RieW5hbWUgIT0gTlVMTCIsbmFtZWNvcHksMCk7 Ci0gICAgICAgICAgICBob3N0ID0gY2tfY29weWhvc3RlbnQoaG9zdCk7Ci0gICAgICAgICAgICBk bnMgPSAxOyAgICAgICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgd2UgcGVyZm9ybWVkIGRucyBs b29rdXAgKi8KLSAgICAgICAgICAgIHJfYWRkci5zaW5fZmFtaWx5ID0gaG9zdC0+aF9hZGRydHlw ZTsKLSAgICAgICAgICAgIGlmICh0Y3BfcmRucyAmJiBob3N0LT5oX25hbWUgJiYgaG9zdC0+aF9u YW1lWzBdCi0jaWZuZGVmIE5PSFRUUAotICAgICAgICAgICAgICAgICAmJiAodGNwX2h0dHBfcHJv eHkgPT0gTlVMTCkKLSNlbmRpZiAvKiBOT0hUVFAgKi8KLQkJKSB7Ci0jaWZkZWYgQ09NTUVOVAot ICAgICAgICAgICAgICAgIGNrc3RybmNweSh4eG5hbWUsaG9zdC0+aF9uYW1lLFhYTkFNRUxFTik7 Ci0JCWRlYnVnKEYxMTAsIm5ldG9wZW4geHhuYW1lWzFdIix4eG5hbWUsMCk7Ci0gICAgICAgICAg ICAgICAgaWYgKChYWE5BTUVMRU4gLSAoaW50KXN0cmxlbihuYW1lKSkgPiAoKGludClzdHJsZW4o c3ZjYnVmKSsxKSl7Ci0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh4eG5hbWUsIjoiLFhY TkFNRUxFTiAtIChpbnQpc3RybGVuKHh4bmFtZSkpOwotICAgICAgICAgICAgICAgICAgICBja3N0 cm5jYXQoeHhuYW1lLHN2Y2J1ZixYWE5BTUVMRU4gLSAoaW50KXN0cmxlbih4eG5hbWUpKTsKLQkJ ICAgIGRlYnVnKEYxMTAsIm5ldG9wZW4geHhuYW1lWzJdIix4eG5hbWUsMCk7Ci0gICAgICAgICAg ICAgICAgfQotCQluYW1lID0gKGNoYXIgKil4eG5hbWU7Ci0jZWxzZQotICAgICAgICAgICAgICAg IGNrc3RybmNweShuYW1lLGhvc3QtPmhfbmFtZSw4MCk7ICAvKiBCYWQgQmFkIEJhZCAqLwotICAg ICAgICAgICAgICAgIGlmICggKDgwLXN0cmxlbihuYW1lKSkgPiAoc3RybGVuKHN2Y2J1ZikrMSkg KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdChuYW1lLCI6Iiw4MC1zdHJsZW4obmFt ZSkpOwotICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQobmFtZSxzdmNidWYsODAtc3RybGVu KG5hbWUpKTsKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwotICAgICAg ICAgICAgfQotCSAgICBkZWJ1ZyhGMTEwLCJuZXRvcGVuIG5hbWUgYWZ0ZXIgbG9va3VwIixuYW1l LDApOwotCi0jaWZkZWYgSEFERFJMSVNUCi0jaWZkZWYgaF9hZGRyCi0gICAgICAgICAgICAvKiBU aGlzIGlzIGZvciB0cnlpbmcgbXVsdGlwbGUgSVAgYWRkcmVzc2VzIC0gc2VlIDxuZXRkYi5oPiAq LwotICAgICAgICAgICAgaWYgKCEoaG9zdC0+aF9hZGRyX2xpc3QpKQotICAgICAgICAgICAgICBy ZXR1cm4oLTEpOwotICAgICAgICAgICAgYmNvcHkoaG9zdC0+aF9hZGRyX2xpc3RbMF0sCi0gICAg ICAgICAgICAgICAgICAoY2FkZHJfdCkmcl9hZGRyLnNpbl9hZGRyLAotICAgICAgICAgICAgICAg ICAgaG9zdC0+aF9sZW5ndGgKLSAgICAgICAgICAgICAgICAgICk7Ci0jZWxzZQotICAgICAgICAg ICAgYmNvcHkoaG9zdC0+aF9hZGRyLCAoY2FkZHJfdCkmcl9hZGRyLnNpbl9hZGRyLCBob3N0LT5o X2xlbmd0aCk7Ci0jZW5kaWYgLyogaF9hZGRyICovCi0jZWxzZSAgLyogSEFERFJMSVNUICovCi0j aWZkZWYgSFBVWDYKLQkgICAgcl9hZGRyLnNpbl9hZGRyLnNfYWRkciA9ICh1X2xvbmcpaG9zdC0+ aF9hZGRyOwotI2Vsc2UgIC8qIEhQVVg2ICovCi0gICAgICAgICAgICBiY29weShob3N0LT5oX2Fk ZHIsIChjYWRkcl90KSZyX2FkZHIuc2luX2FkZHIsIGhvc3QtPmhfbGVuZ3RoKTsKLSNlbmRpZgkv KiBIUFVYNiAqLwotI2VuZGlmIC8qIEhBRERSTElTVCAqLwotCi0jaWZuZGVmIEhQVVg2Ci0gICAg ICAgICAgICBkZWJ1ZyhGMTExLCJCQ09QWSIsImhvc3QtPmhfbGVuZ3RoIixob3N0LT5oX2xlbmd0 aCk7Ci0jZW5kaWYJLyogSFBVWDYgKi8KLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBOT01I SE9TVCAqLwotCi0gICAgZGVidWcoRjEwMSwibmV0b3BlbiBkbnMiLCIiLGRucyk7Ci0KLSAgICBp ZiAoIWRucykgewotI2lmZGVmIElOQUREUlgKLS8qIGluZXRfYWRkcigpIGlzIG9mIHR5cGUgc3Ry dWN0IGluX2FkZHIgKi8KLSAgICAgICAgc3RydWN0IGluX2FkZHIgaW5hOwotICAgICAgICB1bnNp Z25lZCBsb25nIHV1OwotICAgICAgICBkZWJ1ZyhGMTAwLCJuZXRvcGVuIGdldGhvc3RieW5hbWUg PT0gTlVMTDogSU5BRERSWCIsIiIsMCk7Ci0gICAgICAgIGluYSA9IGluZXRfYWRkcihuYW1lY29w eSk7Ci0gICAgICAgIHV1ID0gKih1bnNpZ25lZCBpbnQgKikmaW5hOwotI2Vsc2UgLyogTm90IElO QUREUlggKi8KLS8qIGluZXRfYWRkcigpIGlzIHVuc2lnbmVkIGxvbmcgKi8KLSAgICAgICAgdW5z aWduZWQgbG9uZyB1dTsKLSAgICAgICAgZGVidWcoRjEwMCwibmV0b3BlbiBnZXRob3N0YnluYW1l ID09IE5VTEw6IE5vdCBJTkFERFJYIiwiIiwwKTsKLSAgICAgICAgdXUgPSBpbmV0X2FkZHIobmFt ZWNvcHkpOwotI2VuZGlmIC8qIElOQUREUlggKi8KLSAgICAgICAgZGVidWcoRjEwMSwibmV0b3Bl biB1dSIsIiIsdXUpOwotICAgICAgICBpZiAoCi0jaWZkZWYgSU5BRERSX05PTkUKLSAgICAgICAg ICAgICEodXUgPT0gSU5BRERSX05PTkUgfHwgdXUgPT0gKHVuc2lnbmVkIGludCkgLTFMKQotI2Vs c2UgICAvKiBJTkFERFJfTk9ORSAqLwotICAgICAgICAgICAgdXUgIT0gKCh1bnNpZ25lZCBsb25n KS0xKQotI2VuZGlmIC8qIElOQUREUl9OT05FICovCi0gICAgICAgICAgICApIHsKLSAgICAgICAg ICAgIHJfYWRkci5zaW5fYWRkci5zX2FkZHIgPSB1dTsKLSAgICAgICAgICAgIHJfYWRkci5zaW5f ZmFtaWx5ID0gQUZfSU5FVDsKLSAgICAgICAgfSBlbHNlIHsKLSNpZmRlZiBWTVMKLSAgICAgICAg ICAgIGZwcmludGYoc3Rkb3V0LCAiXHJcbiIpOyAgICAvKiBjb21wbGV0ZSBhbnkgcHJldmlvdXMg bWVzc2FnZSAqLwotI2VuZGlmIC8qIFZNUyAqLwotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs ICJDYW4ndCBnZXQgYWRkcmVzcyBmb3IgJXNcbiIsIG5hbWVjb3B5KTsKLSNpZmRlZiBUR1ZPUldJ TgotICAgICAgICAgICAgZGVidWcoRjEwMSwibmV0b3BlbiBjYW4ndCBnZXQgYWRkcmVzcyIsIiIs c29ja2V0X2Vycm5vKTsKLSNlbHNlCi0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXRvcGVuIGNh bid0IGdldCBhZGRyZXNzIiwiIixlcnJubyk7Ci0jZW5kaWYgLyogVEdWT1JXSU4gKi8KLSAgICAg ICAgICAgIGVycm5vID0gMDsgICAgICAgICAgICAgICAgICAvKiBSYXRoZXIgdGhhbiBtaXNsZWFk ICovCi0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyog R2V0IGEgZmlsZSBkZXNjcmlwdG9yIGZvciB0aGUgY29ubmVjdGlvbi4gKi8KLQotICAgIHJfYWRk ci5zaW5fcG9ydCA9IHNlcnZpY2UtPnNfcG9ydDsKLSAgICBja3N0cm5jcHkoaXBhZGRyLChjaGFy ICopaW5ldF9udG9hKHJfYWRkci5zaW5fYWRkciksMjApOwotICAgIGRlYnVnKEYxMTAsIm5ldG9w ZW4gdHJ5aW5nIixpcGFkZHIsMCk7Ci0gICAgaWYgKCFxdWlldCAmJiAqaXBhZGRyKSB7Ci0gICAg ICAgIHByaW50ZigiIFRyeWluZyAlcy4uLiAiLCBpcGFkZHIpOwotICAgICAgICBmZmx1c2goc3Rk b3V0KTsKLSAgICB9Ci0KLSAgICAvKiBMb29wIHRvIHRyeSBhZGRpdGlvbmFsIElQIGFkZHJlc3Nl cywgaWYgYW55LiAqLwotCi0gICAgZG8gewotI2lmZGVmIEVYQ0VMQU4KLSAgICAgICAgc2VuZF9z b2NrZXQuc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0gICAgICAgIHNlbmRfc29ja2V0LnNpbl9hZGRy LnNfYWRkciA9IDA7Ci0gICAgICAgIHNlbmRfc29ja2V0LnNpbl9wb3J0ID0gMDsKLSAgICAgICAg aWYgKCh0dHlmZCA9IHNvY2tldChTT0NLX1NUUkVBTSwgKHN0cnVjdCBzb2NrcHJvdG8gKikwLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZW5kX3NvY2tldCwgU09fUkVVU0VBRERSKSkg PCAwKQotI2Vsc2UgIC8qIEVYQ0VMQU4gKi8KLSNpZmRlZiBOVAotI2lmZGVmIENPTU1FTlRfWAot ICAgICAgIC8qCi0gICAgICAgICBNdXN0IG1ha2Ugc3VyZSB0aGF0IGFsbCBzb2NrZXRzIGFyZSBv cGVuZWQgaW4KLSAgICAgICAgIE5vbi1vdmVybGFwcGVkIG1vZGUgc2luY2Ugd2UgdXNlIHRoZSBz dGFuZGFyZAotICAgICAgICAgQyBSVEwgZnVuY3Rpb25zIHRvIHJlYWQgYW5kIHdyaXRlIGRhdGEu Ci0gICAgICAgICBCdXQgaXQgZG9lc24ndCBzZWVtIHRvIHdvcmsgYXMgcGxhbm5lZC4KLSAgICAg ICAqLwotICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaW50IG9wdGlvblZhbHVlID0gU09fU1lO Q0hST05PVVNfTk9OQUxFUlQ7Ci0gICAgICAgICAgICAgIGlmIChzZXRzb2Nrb3B0KElOVkFMSURf U09DS0VULCBTT0xfU09DS0VULCBTT19PUEVOVFlQRSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGNoYXIgKikgJm9wdGlvblZhbHVlLCBzaXplb2Yob3B0aW9uVmFsdWUpKQotICAgICAg ICAgICAgICAgICAgIT0gTk9fRVJST1IpCi0gICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAg ICAgICAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2VuZGlmIC8qIE5UICovCi0KLSAgICAg ICAgaWYgKCh0dHlmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCkpIDwgMCkKLSNl bmRpZiAvKiBFWENFTEFOICovCi0gICAgICAgICAgICB7Ci0jaWZkZWYgRVhDRUxBTgotICAgICAg ICAgICAgICAgIGV4cGVycm9yKCJUQ1Agc29ja2V0IGVycm9yIik7Ci0jZWxzZQotI2lmZGVmIFZN UwotICAgICAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiXHJcbiIpOyAvKiBjb21wbGV0ZSBh bnkgcHJldmlvdXMgc3Rkb3V0ICovCi0jZW5kaWYgLyogVk1TICovCi0jaWZkZWYgVEdWT1JXSU4K LSNpZmRlZiBPTERfVFdHCi0gICAgICAgICAgICAgICAgZXJybm8gPSBzb2NrZXRfZXJybm87Ci0j ZW5kaWYgLyogT0xEX1RXRyAqLwotICAgICAgICAgICAgICAgIHNvY2tldF9wZXJyb3IoIlRDUCBz b2NrZXQgZXJyb3IiKTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXRvcGVuIHNvY2tl dCBlcnJvciIsIiIsc29ja2V0X2Vycm5vKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgcGVycm9y KCJUQ1Agc29ja2V0IGVycm9yIik7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwibmV0b3Bl biBzb2NrZXQgZXJyb3IiLCIiLGVycm5vKTsKLSNlbmRpZiAvKiBUR1ZPUldJTiAqLwotI2VuZGlm IC8qIEVYQ0VMQU4gKi8KLSAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKLSAgICAgICAgICAg IH0KLSAgICAgICAgZXJybm8gPSAwOwotCi0jaWZkZWYgUkxPR0NPREUKLSAgICAgICAvKiBOb3Qg cGFydCBvZiB0aGUgUkxPR0lOIFJGQywgYnV0IHRoZSBCU0QgaW1wbGVtZW50YXRpb24gICAgICov Ci0gICAgICAgLyogcmVxdWlyZXMgdGhhdCB0aGUgY2xpZW50IHBvcnQgYmUgYSBwcml2aWxpZ2Vk IHBvcnQgKDwxMDI0KSAqLwotICAgICAgIC8qIG9uIGEgVW5peCBzeXN0ZW0gdGhpcyB3b3VsZCBy ZXF1aXJlIFN1cGVyVXNlciBwZXJtaXNzaW9ucyAgKi8KLSAgICAgICAvKiB0aGVyZWJ5IHNheWlu ZyB0aGF0IHRoZSByb290IG9mIHRoZSBVbml4IHN5c3RlbSBoYXMgZ2l2ZW4gICovCi0gICAgICAg LyogcGVybWlzc2lvbiBmb3IgdGhpcyBjb25uZWN0aW9uIHRvIGJlIGNyZWF0ZWQgICAgICAgICAg ICAgICAqLwotICAgICAgIGlmIChzZXJ2aWNlLT5zX3BvcnQgPT0gaHRvbnMoKHVuc2lnbmVkIHNo b3J0KVJMT0dJTl9QT1JUKSkgewotICAgICAgICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbHBv cnQgPSAxMDI0OyAgLyogbWF4IHJlc2VydmVkIHBvcnQgKi8KLSNpZmRlZiBPUzIKLSAgICAgICAg ICAgaW50IHNfZXJybm87Ci0jZW5kaWYgLyogT1MyICovCi0KLSAgICAgICAgICAgbHBvcnQtLTsg ICAgICAgICAgICAgICAgICAgICAvKiBNYWtlIHN1cmUgd2UgZG8gbm90IHJldXNlIGEgcG9ydCAq LwotICAgICAgICAgICBpZiAobHBvcnQgPT0gNTEyKQotICAgICAgICAgICAgIGxwb3J0ID0gMTAy MzsKLQotICAgICAgICAgICBzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0gICAgICAgICAgIGlm ICh0Y3BfYWRkcmVzcykgewotI2lmZGVmIElOQUREUlgKLSAgICAgICAgICAgICAgIGluYWRkcngg PSBpbmV0X2FkZHIodGNwX2FkZHJlc3MpOwotICAgICAgICAgICAgICAgc2luLnNpbl9hZGRyLnNf YWRkciA9ICoodW5zaWduZWQgbG9uZyAqKSZpbmFkZHJ4OwotI2Vsc2UKLSAgICAgICAgICAgICAg IHNpbi5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIodGNwX2FkZHJlc3MpOwotI2VuZGlmIC8q IElOQUREUlggKi8KLSAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgc2luLnNpbl9hZGRy LnNfYWRkciA9IElOQUREUl9BTlk7Ci0gICAgICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAg ICAgICBzaW4uc2luX3BvcnQgPSBodG9ucyhscG9ydCk7Ci0gICAgICAgICAgICAgICBpZiAoYmlu ZCh0dHlmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVvZihzaW4pKSA+PSAwKQotICAg ICAgICAgICAgICAgICBicmVhazsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgIHNfZXJybm8g PSBzb2NrZXRfZXJybm87Ci0gICAgICAgICAgICAgICBpZiAoc19lcnJubyAmJiAvKiBPUzIgYmlu ZCBmYWlscyB3aXRoIDAsIGlmIGFscmVhZHkgaW4gdXNlICovCi0jaWZkZWYgTlQKLSAgICAgICAg ICAgICAgICAgICBzX2Vycm5vICE9IFdTQUVBRERSSU5VU0UKLSNlbHNlCi0gICAgICAgICAgICAg ICAgICAgc19lcnJubyAhPSBTT0NFQUREUklOVVNFICYmCi0gICAgICAgICAgICAgICAgICAgc19l cnJubyAhPSAoU09DRUFERFJJTlVTRSAtIFNPQ0JBU0VFUlIpCi0jZW5kaWYgLyogTlQgKi8KLSAg ICAgICAgICAgICAgICAgICApCi0jZWxzZSAvKiBPUzIgKi8KLSNpZmRlZiBUR1ZPUldJTgotICAg ICAgICAgICAgICAgICBpZiAoc29ja2V0X2Vycm5vICE9IEVBRERSSU5VU0UpCi0jZWxzZQotICAg ICAgICAgICAgICAgICBpZiAoZXJybm8gIT0gRUFERFJJTlVTRSkKLSNlbmRpZiAvKiBUR1ZPUldJ TiAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgICAgIHsKLSNpZmRlZiBDT01N RU5UCi0gICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXG5CaW5kIGZhaWxlZCB3aXRoIGVy cm5vICVkICBmb3IgcG9ydCAlZC5cbiIsCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzX2Vycm5vCi0jZWxzZQotI2lmZGVmIFRHVk9SV0lOCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzb2NrZXRfZXJybm8KLSNlbHNlCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBlcnJubwotI2VuZGlmIC8qIFRHVk9SV0lOICovCi0jZW5kaWYgLyogT1MyICov Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGxwb3J0Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOwotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTAxLCJybG9naW4gYmluZCBmYWlsZWQiLCIiLHNfZXJybm8pOwotI2Vsc2UKLSNpZmRlZiBU R1ZPUldJTgotICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJybG9naW4gYmluZCBm YWlsZWQiLCIiLHNvY2tldF9lcnJubyk7Ci0jaWZkZWYgT0xEX1RXRwotICAgICAgICAgICAgICAg ICAgICAgICBlcnJubyA9IHNvY2tldF9lcnJubzsKLSNlbmRpZiAvKiBPTERfVFdHICovCi0gICAg ICAgICAgICAgICAgICAgICAgIHNvY2tldF9wZXJyb3IoInJsb2dpbiBiaW5kIik7Ci0jZWxzZQot ICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJybG9naW4gYmluZCBmYWlsZWQiLCIi LGVycm5vKTsKLSAgICAgICAgICAgICAgICAgICAgICAgcGVycm9yKCJybG9naW4gYmluZCIpOwot I2VuZGlmIC8qIFRHVk9SV0lOICovCi0jZW5kaWYgLyogT1MyICovCi0jZWxzZSAgLyogQ09NTUVO VCAqLwotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJybG9n aW4gYmluZCBzX2Vycm5vIiwiIixzX2Vycm5vKTsKLSAgICAgICAgICAgICAgICAgICAgICAgcGVy cm9yKCJybG9naW4gYmluZCIpOwotI2Vsc2UKLSNpZmRlZiBWTVMKLSAgICAgICAgICAgICAgICAg ICAgICAgcHJpbnRmKCJcclxuIik7ICAvKiBjb21wbGV0ZSBhbnkgcHJldmlvdXMgbWVzc2FnZSAq LwotI2VuZGlmIC8qIFZNUyAqLwotI2lmZGVmIFRHVk9SV0lOCi0gICAgICAgICAgICAgICAgICAg ICAgIGRlYnVnKEYxMDEsInJsb2dpbiBiaW5kIHNvY2tldF9lcnJubyIsIiIsc29ja2V0X2Vycm5v KTsKLSNpZmRlZiBPTERfVFdHCi0gICAgICAgICAgICAgICAgICAgICAgIGVycm5vID0gc29ja2V0 X2Vycm5vOwotI2VuZGlmIC8qIE9MRF9UV0cgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgc29j a2V0X3BlcnJvcigicmxvZ2luIGJpbmQiKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgICAg IGRlYnVnKEYxMDEsInJsb2dpbiBiaW5kIGVycm5vIiwiIixlcnJubyk7Ci0gICAgICAgICAgICAg ICAgICAgICAgIHBlcnJvcigicmxvZ2luIGJpbmQiKTsKLSNlbmRpZiAvKiBUR1ZPUldJTiAqLwot I2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJybG9n aW4gbG9jYWwgcG9ydCIsIiIsbHBvcnQpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAg ICAgICAgICAgICAgICAgbmV0Y2xvcygpOwotICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g LTE7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgbHBvcnQtLTsKLSAgICAg ICAgICAgICAgIGlmIChscG9ydCA9PSA1MTIgLyogbG93ZXN0IHJlc2VydmVkIHBvcnQgdG8gdXNl ICovICkgewotICAgICAgICAgICAgICAgICAgIHByaW50ZigiXG5ObyByZXNlcnZlZCBwb3J0cyBh dmFpbGFibGUuXG4iKTsKLSAgICAgICAgICAgICAgICAgICBuZXRjbG9zKCk7Ci0gICAgICAgICAg ICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICB9Ci0gICAg ICAgICAgIGRlYnVnKEYxMDEsInJsb2dpbiBscG9ydCIsIiIsbHBvcnQpOwotICAgICAgICAgICB0 dG5wcm90byA9IE5QX1JMT0dJTjsKLSAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBSTE9HQ09ERSAg Ki8KLQotICAgICAgIC8qIElmIGEgc3BlY2lmaWMgVENQIGFkZHJlc3Mgb24gdGhlIGxvY2FsIGhv c3QgaXMgZGVzaXJlZCB3ZSAqLwotICAgICAgIC8qIG11c3QgYmluZCBpdCB0byB0aGUgc29ja2V0 LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2lmbmRlZiBkYXRhZ2VuZXJhbAot ICAgICAgICAgaWYgKHRjcF9hZGRyZXNzKSB7Ci0gICAgICAgICAgICAgaW50IHNfZXJybm87Ci0K LSAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJuZXRvcGVuIGJpbmRpbmcgc29ja2V0IHRvIix0Y3Bf YWRkcmVzcywwKTsKLSAgICAgICAgICAgICBiemVybygoY2hhciAqKSZzaW4sc2l6ZW9mKHNpbikp OwotICAgICAgICAgICAgIHNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLSNpZmRlZiBJTkFERFJY Ci0gICAgICAgICAgICAgaW5hZGRyeCA9IGluZXRfYWRkcih0Y3BfYWRkcmVzcyk7Ci0gICAgICAg ICAgICAgc2luLnNpbl9hZGRyLnNfYWRkciA9ICoodW5zaWduZWQgbG9uZyAqKSZpbmFkZHJ4Owot I2Vsc2UKLSAgICAgICAgICAgICBzaW4uc2luX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyKHRjcF9h ZGRyZXNzKTsKLSNlbmRpZiAvKiBJTkFERFJYICovCi0gICAgICAgICAgICAgc2luLnNpbl9wb3J0 ID0gMDsKLSAgICAgICAgICAgICBpZiAoYmluZCh0dHlmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZz aW4sIHNpemVvZihzaW4pKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgc19lcnJubyA9IHNvY2tl dF9lcnJubzsgLyogU2F2ZSBlcnJvciBjb2RlICovCi0jaWZkZWYgVENQSVBMSUIKLSAgICAgICAg ICAgICAgICAgc29ja2V0X2Nsb3NlKHR0eWZkKTsKLSNlbHNlIC8qIFRDUElQTElCICovCi0gICAg ICAgICAgICAgICAgIGNsb3NlKHR0eWZkKTsKLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotICAgICAg ICAgICAgICAgICB0dHlmZCA9IC0xOwotICAgICAgICAgICAgICAgICB3YXNjbG9zZWQgPSAxOwot ICAgICAgICAgICAgICAgICBlcnJubyA9IHNfZXJybm87ICAgICAgIC8qIGFuZCByZXBvcnQgdGhp cyBlcnJvciAqLwotICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXRvcGVuIGJpbmQgZXJy bm8iLCIiLGVycm5vKTsKLSAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAg ICB9Ci0gICAgICAgICB9Ci0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLQotLyogTm93IGNvbm5l Y3QgdG8gdGhlIHNvY2tldCBvbiB0aGUgb3RoZXIgZW5kLiAqLwotCi0jaWZkZWYgRVhDRUxBTgot ICAgICAgICBpZiAoY29ubmVjdCh0dHlmZCwgJnJfYWRkcikgPCAwKQotI2Vsc2UKLSNpZmRlZiBO VAotICAgICAgICAgIFdTQVNhZmVUb0NhbmNlbCA9IDE7Ci0jZW5kaWYgLyogTlQgKi8KLSAgICAg ICAgaWYgKGNvbm5lY3QodHR5ZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmcl9hZGRyLCBzaXplb2Yo cl9hZGRyKSkgPCAwKQotI2VuZGlmIC8qIEVYQ0VMQU4gKi8KLSAgICAgICAgICB7Ci0jaWZkZWYg TlQKLSAgICAgICAgICAgICAgV1NBU2FmZVRvQ2FuY2VsID0gMDsKLSNlbmRpZiAvKiBOVCAqLwot I2lmZGVmIE9TMgotICAgICAgICAgICAgICBpID0gc29ja2V0X2Vycm5vOwotI2Vsc2UgLyogT1My ICovCi0jaWZkZWYgVEdWT1JXSU4KLSAgICAgICAgICAgICAgaSA9IHNvY2tldF9lcnJubzsKLSNl bHNlCi0gICAgICAgICAgICAgIGkgPSBlcnJubzsgICAgICAgICAgICAgICAgLyogU2F2ZSBlcnJv ciBjb2RlICovCi0jZW5kaWYgLyogVEdWT1JXSU4gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNpZmRl ZiBSTE9HQ09ERQotICAgICAgICAgICAgICBpZiAoCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICAg ICAgIGkgJiYgLyogT1MyIGJpbmQgZmFpbHMgd2l0aCAwLCBpZiBhbHJlYWR5IGluIHVzZSAqLwot I2lmZGVmIE5UCi0gICAgICAgICAgICAgICAgIGkgPT0gV1NBRUFERFJJTlVTRQotI2Vsc2UKLSAg ICAgICAgICAgICAgICAgKGkgPT0gU09DRUFERFJJTlVTRSB8fAotICAgICAgICAgICAgICAgICBp ID09IChTT0NFQUREUklOVVNFIC0gU09DQkFTRUVSUikpCi0jZW5kaWYgLyogTlQgKi8KLSNlbHNl IC8qIE9TMiAqLwotI2lmZGVmIFRHVk9SV0lOCi0gICAgICAgICAgICAgICAgICBzb2NrZXRfZXJy bm8gPT0gRUFERFJJTlVTRQotI2Vsc2UKLSAgICAgICAgICAgICAgICAgIGVycm5vID09IEVBRERS SU5VU0UKLSNlbmRpZiAvKiBUR1ZPUldJTiAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAg ICAgICAgICAgJiYgdHRucHJvdG8gPT0gTlBfUkxPR0lOKSB7Ci0jaWZkZWYgVENQSVBMSUIKLSAg ICAgICAgICAgICAgICAgICBzb2NrZXRfY2xvc2UodHR5ZmQpOyAvKiBDbG9zZSBpdC4gKi8KLSNl bHNlCi0gICAgICAgICAgICAgICAgICAgY2xvc2UodHR5ZmQpOwotI2VuZGlmIC8qIFRDUElQTElC ICovCi0gICAgICAgICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgLyogVHJ5IGEgZGlm ZmVyZW50IGxwb3J0ICovCi0gICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8K LSNpZmRlZiBIQUREUkxJU1QKLSNpZmRlZiBoX2FkZHIKLSAgICAgICAgICAgICAgaWYgKGhvc3Qg JiYgaG9zdC0+aF9hZGRyX2xpc3QgJiYgaG9zdC0+aF9hZGRyX2xpc3RbMV0pIHsKLSAgICAgICAg ICAgICAgICAgIHBlcnJvcigiIik7Ci0gICAgICAgICAgICAgICAgICBob3N0LT5oX2FkZHJfbGlz dCsrOwotICAgICAgICAgICAgICAgICAgYmNvcHkoaG9zdC0+aF9hZGRyX2xpc3RbMF0sCi0gICAg ICAgICAgICAgICAgICAgICAgICAoY2FkZHJfdCkmcl9hZGRyLnNpbl9hZGRyLAotICAgICAgICAg ICAgICAgICAgICAgICAgaG9zdC0+aF9sZW5ndGgpOwotCi0gICAgICAgICAgICAgICAgICBja3N0 cm5jcHkoaXBhZGRyLChjaGFyICopaW5ldF9udG9hKHJfYWRkci5zaW5fYWRkciksMjApOwotICAg ICAgICAgICAgICAgICAgZGVidWcoRjExMCwibmV0b3BlbiBoX2FkZHJfbGlzdCIsaXBhZGRyLDAp OwotICAgICAgICAgICAgICAgICAgaWYgKCFxdWlldCAmJiAqaXBhZGRyKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKCIgVHJ5aW5nICVzLi4uICIsIGlwYWRkcik7Ci0gICAgICAgICAg ICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7Ci0gICAgICAgICAgICAgICAgICB9Ci0jaWZkZWYg VENQSVBMSUIKLSAgICAgICAgICAgICAgICAgIHNvY2tldF9jbG9zZSh0dHlmZCk7IC8qIENsb3Nl IGl0LiAqLwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgIGNsb3NlKHR0eWZkKTsKLSNlbmRpZiAv KiBUQ1BJUExJQiAqLwotICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg IH0KLSNlbmRpZiAvKiBoX2FkZHIgKi8KLSNlbmRpZiAgLyogSEFERFJMSVNUICovCi0gICAgICAg ICAgICAgIG5ldGNsb3MoKTsKLSAgICAgICAgICAgICAgdHR5ZmQgPSAtMTsKLSAgICAgICAgICAg ICAgd2FzY2xvc2VkID0gMTsKLSAgICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9OT05FOwotICAg ICAgICAgICAgICBlcnJubyA9IGk7ICAgICAgICAgICAgICAgIC8qIEFuZCByZXBvcnQgdGhpcyBl cnJvciAqLwotI2lmZGVmIEVYQ0VMQU4KLSAgICAgICAgICAgICAgaWYgKGVycm5vKSBleHBlcnJv cigibmV0b3BlbiBjb25uZWN0Iik7Ci0jZWxzZQotI2lmZGVmIFRHVk9SV0lOCi0gICAgICAgICAg ICAgIGRlYnVnKEYxMDEsIm5ldG9wZW4gY29ubmVjdCBlcnJvciIsIiIsc29ja2V0X2Vycm5vKTsK LSAgICAgICAgICAgICAgLyogaWYgKGVycm5vKSBzb2NrZXRfcGVycm9yKCJuZXRvcGVuIGNvbm5l Y3QiKTsgKi8KLSNpZmRlZiBPTERfVFdHCi0gICAgICAgICAgICAgIGVycm5vID0gc29ja2V0X2Vy cm5vOwotI2VuZGlmIC8qIE9MRF9UV0cgKi8KLSAgICAgICAgICAgICAgaWYgKCFxdWlldCkKLSAg ICAgICAgICAgICAgICBzb2NrZXRfcGVycm9yKCJuZXRvcGVuIGNvbm5lY3QiKTsKLSNlbHNlIC8q IFRHVk9SV0lOICovCi0gICAgICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldG9wZW4gY29ubmVjdCBl cnJubyIsIiIsZXJybm8pOwotI2lmZGVmIFZNUwotICAgICAgICAgICAgICBpZiAoIXF1aWV0KQot ICAgICAgICAgICAgICAgIHBlcnJvcigiXHJcbkZhaWxlZCIpOwotI2Vsc2UKLSAgICAgICAgICAg ICAgaWYgKCFxdWlldCkKLSAgICAgICAgICAgICAgICBwZXJyb3IoIkZhaWxlZCIpOwotI2VuZGlm IC8qIFZNUyAqLwotI2lmZGVmIERFQ19UQ1BJUAotICAgICAgICAgICAgICBpZiAoIXF1aWV0KQot ICAgICAgICAgICAgICAgIHBlcnJvcigibmV0b3BlbiBjb25uZWN0Iik7Ci0jZW5kaWYgLyogREVD X1RDUElQICovCi0jaWZkZWYgQ01VX1RDUElQCi0gICAgICAgICAgICAgIGlmICghcXVpZXQpCi0g ICAgICAgICAgICAgICAgcGVycm9yKCJuZXRvcGVuIGNvbm5lY3QiKTsKLSNlbmRpZiAvKiBDTVVf VENQSVAgKi8KLSNlbmRpZiAvKiBUR1ZPUldJTiAqLwotI2VuZGlmIC8qIEVYQ0VMQU4gKi8KLSAg ICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICB9Ci0jaWZkZWYgTlQKLSAgICAgICAg V1NBU2FmZVRvQ2FuY2VsID0gMDsKLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICBpc2Nvbm5lY3Qg PSAxOwotICAgIH0gd2hpbGUgKCFpc2Nvbm5lY3QpOwotCi0jaWZkZWYgTk9OX0JMT0NLX0lPCi0g ICAgb24gPSAxOwotICAgIHggPSBzb2NrZXRfaW9jdGwodHR5ZmQsRklPTkJJTywmb24pOwotICAg IGRlYnVnKEYxMDEsIm5ldG9wZW4gRklPTkJJTyIsIiIseCk7Ci0jZW5kaWYgLyogTk9OX0JMT0NL X0lPICovCi0KLSNpZmRlZiBOVF9UQ1BfT1ZFUkxBUFBFRAotICAgIE92ZXJsYXBwZWRXcml0ZUlu aXQoKTsKLSAgICBPdmVybGFwcGVkUmVhZEluaXQoKTsKLSNlbmRpZiAvKiBOVF9UQ1BfT1ZFUkxB UFBFRCAqLwotCi0gICAgdHRuZXQgPSBuZXR0OyAgICAgICAgICAgICAgICAgICAgICAgLyogVENQ L0lQIChzb2NrZXRzKSBuZXR3b3JrICovCi0KLSNpZm5kZWYgTk9IVFRQCi0gICAgLyogV2UgaGF2 ZSBzdWNjZWVkZWQgaW4gY29ubmVjdGluZyB0byB0aGUgSFRUUCBQUk9YWS4gIFNvIG5vdyB3ZSAg ICovCi0gICAgLyogbmVlZCB0byBhdHRlbXB0IHRvIGNvbm5lY3QgdGhyb3VnaCB0aGUgcHJveHkg dG8gdGhlIGFjdHVhbCBob3N0ICovCi0gICAgLyogSWYgdGhhdCBpcyBzdWNjZXNzZnVsLCB3ZSBo YXZlIHRvIHByZXRlbmQgdGhhdCB3ZSBtYWRlIGEgZGlyZWN0ICovCi0gICAgLyogY29ubmVjdGlv biB0byB0aGUgYWN0dWFsIGhvc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICov Ci0KLSAgICBpZiAoIHRjcF9odHRwX3Byb3h5ICkgewotI2lmZGVmIE9TMgotICAgICAgICBjaGFy ICogYWdlbnQgPSAiS2VybWl0IDk1IjsgICAgICAgICAgICAgLyogRGVmYXVsdCB1c2VyIGFnZW50 ICovCi0jZWxzZQotICAgICAgICBjaGFyICogYWdlbnQgPSAiQy1LZXJtaXQiOwotI2VuZGlmIC8q IE9TMiAqLwotCi0gICAgICAgIGlmIChodHRwX2Nvbm5lY3QodHR5ZmQsCi0JCQkgdGNwX2h0dHBf cHJveHlfYWdlbnQgPyB0Y3BfaHR0cF9wcm94eV9hZ2VudCA6IGFnZW50LAotCQkJIE5VTEwsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2h0dHBfcHJveHlfdXNlciwKLSAgICAgICAgICAg ICAgICAgICAgICAgICB0Y3BfaHR0cF9wcm94eV9wd2QsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBwcm94eWNvcHkKLSAgICAgICAgICAgICAg ICAgICAgICAgICApIDwgMCkgewotICAgICAgICAgICAgbmV0Y2xvcygpOwotICAgICAgICAgICAg cmV0dXJuKC0xKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNrc3RybmNweShuYW1lY29weSxwcm94 eWNvcHksTkFNRUNQWUwpOwotICAgICAgICBwID0gbmFtZWNvcHk7ICAgICAgICAgICAgICAgICAg ICAgICAvKiBXYXMgYSBzZXJ2aWNlIHJlcXVlc3RlZD8gKi8KLSAgICAgICAgd2hpbGUgKCpwICE9 ICdcMCcgJiYgKnAgIT0gJzonKSBwKys7IC8qIExvb2sgZm9yIGNvbG9uICovCi0gICAgICAgICpw ID0gJ1wwJzsKLSAgICB9Ci0jZW5kaWYgLyogTk9IVFRQICovCi0KLSAgICAvKiBKZWZmIC0gRG9l cyB0aGlzIG5leHQgYmxvY2sgb2YgY29kZSB0aGF0IHNldCdzIHRoZSBwcm90b2NvbCAqLwotICAg IC8qIG5lZWQgdG8gYmUgaGVyZSBhbnltb3JlPyAgNS8xMC8yMDAwICAgICAgICAgICAgICAgICAg ICAgICAgICovCi0KLSAgICAvKiBUaGVyZSBhcmUgY2VydGFpbiBtYWdpYyBwb3J0IG51bWJlcnMg dGhhdCB3aGVuIHVzZWQgcmVxdWlyZSAqLwotICAgIC8qIHRoZSB1c2Ugb2Ygc3BlY2lmaWMgcHJv dG9jb2xzLiAgQ2hlY2sgdGhpcyBub3cgYmVmb3JlIHdlICAgICovCi0gICAgLyogc2V0IHRoZSBT T19PT0JJTkxJTkUgc3RhdGUgb3Igd2UgbWlnaHQgZ2V0IGl0IHdyb25nLiAgICAgICAgKi8KLSAg ICB4ID0gbnRvaHMoKHVuc2lnbmVkIHNob3J0KXNlcnZpY2UtPnNfcG9ydCk7Ci0gICAgc3ZjbnVt ID0geDsKLSAgICAvKiBTZWUgaWYgdGhlIHNlcnZpY2UgaXMgVEVMTkVULiAqLwotICAgIGlmICh4 ID09IFRFTE5FVF9QT1JUKSB7Ci0gICAgICAgIC8qIFllcywgc28gaWYgcmF3IHBvcnQgbm90IHJl cXVlc3RlZCAqLwotI2lmZGVmIENPTU1FTlQKLQkvKiBKZWZmIDIwMDUvMTIvMzAgKi8KLSAgICAg ICAgaWYgKHR0bnByb3RvICE9IE5QX1RDUFJBVyAmJiB0dG5wcm90byAhPSBOUF9TU0xfUkFXICYm IAotCSAgICB0dG5wcm90byAhPSBOUF9UTFNfUkFXICYmIHR0bnByb3RvICE9IE5QX05PTkUpCi0j ZWxzZQotCS8qIGZkYyAyMDA1LzEyLzA0ICovCi0gICAgICAgIGlmICh0dG5wcm90byAhPSBOUF9U Q1BSQVcgJiYgdHRucHJvdG8gIT0gTlBfTk9ORSkKLSNlbmRpZgkvKiBDT01NRU5UICovCi0gICAg ICAgICAgdHRucHJvdG8gPSBOUF9URUxORVQ7ICAgICAgICAgLyogU2VsZWN0IFRFTE5FVCBwcm90 b2NvbC4gKi8KLSAgICB9Ci0jaWZkZWYgUkxPR0NPREUKLSAgICBlbHNlIGlmICh4ID09IFJMT0dJ Tl9QT1JUKSB7Ci0gICAgICAgIHR0bnByb3RvID0gTlBfUkxPR0lOOwotICAgIH0KLSNpZmRlZiBD S19LRVJCRVJPUwotICAgIC8qIFRoZXJlIGlzIG5vIGdvb2Qgd2F5IHRvIGRvIHRoaXMuICBJZiB0 aGUgdXNlciBkaWRuJ3QgdGVsbCAgICAqLwotICAgIC8qIHdoaWNoIG9uZSB0byB1c2UgdXAgZnJv bnQuICBXZSBtYXkgZ3Vlc3Mgd3JvbmcgaWYgdGhlIHVzZXIgICAqLwotICAgIC8qIGhhcyBib3Ro IEtlcmJlcm9zIHZlcnNpb25zIGluc3RhbGxlZCBhbmQgdmFsaWQgVEdUcyBmb3IgZWFjaCAqLwot ICAgIGVsc2UgaWYgKHggPT0gS0xPR0lOX1BPUlQgJiYKLSAgICAgICAgICAgICB0dG5wcm90byAh PSBOUF9LNExPR0lOICYmCi0gICAgICAgICAgICAgdHRucHJvdG8gIT0gTlBfSzVMT0dJTikgewot ICAgICAgICBpZiAoY2tfa3JiNV9pc19pbnN0YWxsZWQoKSAmJgotICAgICAgICAgICAgY2tfa3Ji NV9pc190Z3RfdmFsaWQoKSkKLSAgICAgICAgICB0dG5wcm90byA9IE5QX0s1TE9HSU47Ci0gICAg ICAgIGVsc2UgaWYgKGNrX2tyYjRfaXNfaW5zdGFsbGVkKCkgJiYgY2tfa3JiNF9pc190Z3RfdmFs aWQoKSkKLSAgICAgICAgICB0dG5wcm90byA9IE5QX0s0TE9HSU47Ci0gICAgICAgIGVsc2UKLSAg ICAgICAgICB0dG5wcm90byA9IE5QX0s0TE9HSU47Ci0gICAgfSBlbHNlIGlmICh4ID09IEVLTE9H SU5fUE9SVCAmJgotICAgICAgICAgICAgICAgdHRucHJvdG8gIT0gTlBfRUs0TE9HSU4gJiYKLSAg ICAgICAgICAgICAgIHR0bnByb3RvICE9IE5QX0VLNUxPR0lOKSB7Ci0gICAgICAgIGlmIChja19r cmI1X2lzX2luc3RhbGxlZCgpICYmIGNrX2tyYjVfaXNfdGd0X3ZhbGlkKCkpCi0gICAgICAgICAg dHRucHJvdG8gPSBOUF9FSzVMT0dJTjsKLSAgICAgICAgZWxzZSBpZiAoY2tfa3JiNF9pc19pbnN0 YWxsZWQoKSAmJiBja19rcmI0X2lzX3RndF92YWxpZCgpKQotICAgICAgICAgIHR0bnByb3RvID0g TlBfRUs0TE9HSU47Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICB0dG5wcm90byA9IE5QX0VLNExP R0lOOwotICAgIH0KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotI2VuZGlmIC8qIFJMT0dDT0RF ICovCi0jaWZkZWYgSUtTX09QVElPTgotICAgIGVsc2UgaWYgKHggPT0gS0VSTUlUX1BPUlQpIHsg ICAgICAgIC8qIElLUyB1c2VzIFRlbG5ldCBwcm90b2NvbCAqLwotICAgICAgICBpZiAodHRucHJv dG8gPT0gTlBfTk9ORSkKLSAgICAgICAgICB0dG5wcm90byA9IE5QX0tFUk1JVDsKLSAgICB9Ci0j ZW5kaWYgLyogSUtTX09QVElPTiAqLwotCi0jaWZkZWYgU09fT09CSU5MSU5FCi0vKgotICBUaGUg c3ltYm9sIFNPX09PQklOTElORSBpcyBub3Qga25vd24gdG8gVWx0cml4IDIuMC4KLSAgSXQgbWVh bnMgImxlYXZlIG91dCBvZiBiYW5kIGRhdGEgaW5saW5lIi4gIFRoZSBub3JtYWwgdmFsdWUgaXMg MHgwMTAwLAotICBidXQgZG9uJ3QgdHJ5IHRoaXMgb24gc3lzdGVtcyB3aGVyZSB0aGUgc3ltYm9s IGlzIHVuZGVmaW5lZC4KLSovCi0vKgotICBOb3RlIGZyb20gSmVmZiBBbHRtYW46IDEyLzEzLzk1 Ci0gIEluIGltcGxlbWVudGluZyBybG9naW4gcHJvdG9jb2wgSSBoYXZlIGNvbWUgdG8gdGhlIGNv bmNsdXNpb24gdGhhdCBpdCBpcwotICBhIHJlYWxseSBiYWQgaWRlYSB0byByZWFkIG91dC1vZi1i YW5kIGRhdGEgaW5saW5lLgotICBBdCBsZWFzdCBXaW5kb3dzIGFuZCBPUy8yIGRvZXMgbm90IGhh bmRsZSB0aGlzIHdlbGwuCi0gIEFuZCBpZiB5b3UgbmVlZCB0byBrbm93IHRoYXQgZGF0YSBpcyBv dXQtb2YtYmFuZCwgdGhlbiBpdCBiZWNvbWVzCi0gIGFic29sdXRlbHkgcG9pbnRsZXNzLgotCi0g IFRoZXJlZm9yZSwgYXQgbGVhc3Qgb24gT1MyIGFuZCBXaW5kb3dzIChOVCkgSSBoYXZlIGNoYW5n ZWQgdGhlIHZhbHVlIG9mCi0gIG9uIHRvIDAsIHNvIHRoYXQgb3V0LW9mLWJhbmQgZGF0YSBzdGF5 cyBvdXQtb2YtYmFuZC4KLQotICAxMi8xOC85NQotICBBY3R1YWxseSwgT09CIGRhdGEgc2hvdWxk IGJlIHJlYWQgaW5saW5lIHdoZW4gcG9zc2libGUuICBFc3BlY2lhbGx5IHdpdGgKLSAgcHJvdG9j b2xzIHRoYXQgZG9uJ3QgY2FyZSBhYm91dCB0aGUgVXJnZW50IGZsYWcuICBUaGlzIGlzIHRydWUg d2l0aCBUZWxuZXQuCi0gIFdpdGggUmxvZ2luLCB5b3UgbmVlZCB0byBiZSBhYmxlIHRvIGNhdGNo IE9PQiBkYXRhLiAgSG93ZXZlciwgdGhlIGJlc3QKLSAgd2F5IHRvIGRvIHRoaXMgaXMgdG8gc2V0 IGEgc2lnbmFsIGhhbmRsZXIgb24gU0lHVVJHLiAgVGhpcyBpc24ndCBwb3NzaWJsZQotICBvbiBP Uy8yIGFuZCBXaW5kb3dzLiAgQnV0IGl0IGlzIGluIFVOSVguICBXZSB3aWxsIGFsc28gbmVlZCBP T0IgZGF0YSBmb3IKLSAgRlRQIHNvIGJldHRlciBjcmVhdGUgYSBnZW5lcmFsIG1lY2hhbmlzbS4K LQotICBUaGUgcmVhc29uIGZvciBtYWtpbmcgT09CIGRhdGEgYmUgaW5saW5lIGlzIHRoYXQgdGhl IHN0YW5kYXJkIHR0aW5jL3R0b2MKLSAgY2FsbHMgY2FuIGJlIHVzZWQgZm9yIHJlYWRpbmcgdGhh dCBkYXRhIG9uIFVOSVggc3lzdGVtcy4gIElmIHdlIGRpZG4ndAotICBoYXZlIHRoZSBPT0JJTkxJ TkUgb3B0aW9uIHNldCB0aGVuIHdlIHdvdWxkIGhhdmUgdG8gdXNlIHJlY3YoLE1TR19PT0IpCi0g IHRvIHJlYWQgaXQuCi0qLwotI2lmZGVmIFJMT0dDT0RFCi0jaWZkZWYgVENQSVBMSUIKLSAgICBp ZiAodHRucHJvdG8gPT0gTlBfUkxPR0lOCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSAgICAgICAgfHwg dHRucHJvdG8gPT0gTlBfSzRMT0dJTiB8fCB0dG5wcm90byA9PSBOUF9FSzRMT0dJTgotICAgICAg ICB8fCB0dG5wcm90byA9PSBOUF9LNUxPR0lOIHx8IHR0bnByb3RvID09IE5QX0VLNUxPR0lOCi0j ZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSAgICAgICkKLSAgICAgIG9uID0gMDsKLSNlbHNlIC8q IFRDUElQTElCICovCi0gICAgaWYgKHR0bnByb3RvID09IE5QX1JMT0dJTgotI2lmZGVmIENLX0tF UkJFUk9TCi0gICAgICAgICB8fCB0dG5wcm90byA9PSBOUF9LNExPR0lOIHx8IHR0bnByb3RvID09 IE5QX0VLNExPR0lOCi0gICAgICAgICB8fCB0dG5wcm90byA9PSBOUF9LNUxPR0lOIHx8IHR0bnBy b3RvID09IE5QX0VLNUxPR0lOCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSAgICAgICAgICkg ewotICAgICAgICBkZWJ1ZyhGMTAwLCJJbnN0YWxsaW5nIHJsb2dvb2JoIG9uIFNJR1VSRyIsIiIs MCk7Ci0gICAgICAgIHNpZ25hbChTSUdVUkcsIHJsb2dvb2JoKTsKLSAgICAgICAgb24gPSAwOwot ICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlYnVnKEYxMDAsIklnbm9yaW5nIFNJR1VSRyIsIiIsMCk7 Ci0gICAgICAgIHNpZ25hbChTSUdVUkcsIFNJR19ERkwpOwotICAgIH0KLSNlbmRpZiAvKiBUQ1BJ UExJQiAqLwotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0KLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAg IHNldHNvY2tvcHQodHR5ZmQsIFNPTF9TT0NLRVQsIFNPX09PQklOTElORSwoY2hhciAqKSAmb24s IHNpemVvZiBvbik7Ci0jZWxzZQotI2lmZGVmIEJTRDQzCi0gICAgc2V0c29ja29wdCh0dHlmZCwg U09MX1NPQ0tFVCwgU09fT09CSU5MSU5FLChjaGFyICopICZvbiwgc2l6ZW9mIG9uKTsKLSNlbHNl Ci0jaWZkZWYgT1NGMQotICAgIHNldHNvY2tvcHQodHR5ZmQsIFNPTF9TT0NLRVQsIFNPX09PQklO TElORSwoY2hhciAqKSAmb24sIHNpemVvZiBvbik7Ci0jZWxzZQotI2lmZGVmIFBPU0lYCi0gICAg c2V0c29ja29wdCh0dHlmZCwgU09MX1NPQ0tFVCwgU09fT09CSU5MSU5FLChjaGFyICopICZvbiwg c2l6ZW9mIG9uKTsKLSNlbHNlCi0jaWZkZWYgTU9UU1Y4OFI0Ci0gICAgc2V0c29ja29wdCh0dHlm ZCwgU09MX1NPQ0tFVCwgU09fT09CSU5MSU5FLChjaGFyICopICZvbiwgc2l6ZW9mIG9uKTsKLSNl bHNlCi0jaWZkZWYgU09MQVJJUwotLyoKLSAgTWF5YmUgdGhpcyBhcHBsaWVzIHRvIGFsbCBTVlI0 IHZlcnNpb25zLCBidXQgdGhlIG90aGVyIChlbHNlKSB3YXkgaGFzIGJlZW4KLSAgY29tcGlsaW5n IGFuZCB3b3JraW5nIGZpbmUgb24gYWxsIHRoZSBvdGhlcnMsIHNvIGJlc3Qgbm90IHRvIGNoYW5n ZSBpdC4KLSovCi0gICAgc2V0c29ja29wdCh0dHlmZCwgU09MX1NPQ0tFVCwgU09fT09CSU5MSU5F LChjaGFyICopICZvbiwgc2l6ZW9mIG9uKTsKLSNlbHNlCi0jaWZkZWYgT1NLCi0gICAgc2V0c29j a29wdCh0dHlmZCwgU09MX1NPQ0tFVCwgU09fT09CSU5MSU5FLChjaGFyICopICZvbiwgc2l6ZW9m IG9uKTsKLSNlbHNlCi0jaWZkZWYgT1MyCi0gICAgewotICAgICAgICBpbnQgcmM7Ci0gICAgICAg IHJjID0gc2V0c29ja29wdCh0dHlmZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNPTF9TT0NL RVQsCi0gICAgICAgICAgICAgICAgICAgICAgICBTT19PT0JJTkxJTkUsCi0gICAgICAgICAgICAg ICAgICAgICAgICAoY2hhciAqKSAmb24sCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yg b24KLSAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIGRlYnVnKEYxMTEsInNldHNv Y2tvcHQgU09fT09CSU5MSU5FIixvbiA/ICJvbiIgOiAib2ZmIiAscmMpOwotICAgIH0KLSNlbHNl Ci0jaWZkZWYgVk1TIC8qIG9yLCBhdCBsZWFzdCwgVk1TIHdpdGggZ2NjICovCi0gICAgc2V0c29j a29wdCh0dHlmZCwgU09MX1NPQ0tFVCwgU09fT09CSU5MSU5FLChjaGFyICopICZvbiwgc2l6ZW9m IG9uKTsKLSNlbHNlCi0jaWZkZWYgQ0xJWAotICAgIHNldHNvY2tvcHQodHR5ZmQsIFNPTF9TT0NL RVQsIFNPX09PQklOTElORSwoY2hhciAqKSAmb24sIHNpemVvZiBvbik7Ci0jZWxzZQotICAgIHNl dHNvY2tvcHQodHR5ZmQsIFNPTF9TT0NLRVQsIFNPX09PQklOTElORSwgJm9uLCBzaXplb2Ygb24p OwotI2VuZGlmIC8qIENMSVggKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8K LSNlbmRpZiAvKiBPU0sgKi8KLSNlbmRpZiAvKiBTT0xBUklTICovCi0jZW5kaWYgLyogTU9UU1Y4 OFI0ICovCi0jZW5kaWYgLyogUE9TSVggKi8KLSNlbmRpZiAvKiBCU0Q0MyAqLwotI2VuZGlmIC8q IE9TRjEgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8qIFNPX09PQklOTElO RSAqLwotCi0jaWZuZGVmIE5PVENQT1BUUwotI2lmbmRlZiBkYXRhZ2VuZXJhbAotI2lmZGVmIFNP TF9TT0NLRVQKLSNpZmRlZiBUQ1BfTk9ERUxBWQotICAgIG5vX2RlbGF5KHR0eWZkLHRjcF9ub2Rl bGF5KTsKLSNlbmRpZiAvKiBUQ1BfTk9ERUxBWSAqLwotI2lmZGVmIFNPX0tFRVBBTElWRQotICAg IGtlZXBhbGl2ZSh0dHlmZCx0Y3Bfa2VlcGFsaXZlKTsKLSNlbmRpZiAvKiBTT19LRUVQQUxJVkUg Ki8KLSNpZmRlZiBTT19MSU5HRVIKLSAgICBja19saW5nZXIodHR5ZmQsdGNwX2xpbmdlciwgdGNw X2xpbmdlcl90bW8pOwotI2VuZGlmIC8qIFNPX0xJTkdFUiAqLwotI2lmZGVmIFNPX1NOREJVRgot ICAgIHNlbmRidWYodHR5ZmQsdGNwX3NlbmRidWYpOwotI2VuZGlmIC8qIFNPX1NOREJVRiAqLwot I2lmZGVmIFNPX1JDVkJVRgotICAgIHJlY3ZidWYodHR5ZmQsdGNwX3JlY3ZidWYpOwotI2VuZGlm IC8qIFNPX1JDVkJVRiAqLwotI2VuZGlmIC8qIFNPTF9TT0NLRVQgKi8KLSNlbmRpZiAvKiBkYXRh Z2VuZXJhbCAqLwotI2VuZGlmIC8qIE5PVENQT1BUUyAqLwotCi0jaWZuZGVmIGRhdGFnZW5lcmFs Ci0gICAgLyogRmluZCBvdXQgb3VyIG93biBJUCBhZGRyZXNzLiAqLwotICAgIC8qIFdlIG5lZWQg dGhlIGxfYWRkciBzdHJ1Y3R1cmUgZm9yIFtFXUtMT0dJTi4gKi8KLSAgICBsX3NsZW4gPSBzaXpl b2YobF9hZGRyKTsKLSAgICBiemVybygoY2hhciAqKSZsX2FkZHIsIGxfc2xlbik7Ci0jaWZuZGVm IEVYQ0VMQU4KLSAgICBpZiAoIWdldHNvY2tuYW1lKHR0eWZkLCAoc3RydWN0IHNvY2thZGRyICop JmxfYWRkciwgJmxfc2xlbikpIHsKLSAgICAgICAgY2hhciAqIHMgPSAoY2hhciAqKWluZXRfbnRv YShsX2FkZHIuc2luX2FkZHIpOwotICAgICAgICBja3N0cm5jcHkobXlpcGFkZHIsIHMsIDIwKTsK LSAgICAgICAgZGVidWcoRjExMCwiZ2V0c29ja25hbWUiLG15aXBhZGRyLDApOwotICAgIH0KLSNl bmRpZiAvKiBFWENFTEFOICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLQotLyoKLSAgVGhp cyBpcyByZWFsbHkgb25seSBuZWVkZWQgZm9yIEtlcmJlcm9zIElWIGJ1dCBpcyB1c2VmdWwgaW5m b3JtYXRpb24gaW4gYW55Ci0gIGNhc2UuICBJZiB3ZSBjb25uZWN0IHRvIGEgbmFtZSB0aGF0IGlz IHJlYWxseSBhIHBvb2wsIHdlIG5lZWQgdG8gZ2V0IHRoZQotICBuYW1lIG9mIHRoZSBtYWNoaW5l IHdlIGFyZSBhY3R1YWxseSBjb25uZWN0aW5nIHRvIGZvciBLNCB0byBhdXRoZW50aWNhdGUKLSAg cHJvcGVybHkuICBUaGlzIHdheSB3ZSBhbHNvIHVwZGF0ZSB0aGUgbmFtZXMgcHJvcGVybHkuCi0K LSAgSG93ZXZlciwgaXQgaXMgYSBzZWN1cml0eSBob2xlIHdoZW4gdXNlZCB3aXRoIGluc2VjdXJl IEROUy4KLQotICBOb3RlOiBUaGlzIGRvZXMgbm90IHdvcmsgb24gV2luZG93cyA5NSBvciBXaW5k b3dzIE5UIDMuNXguICBUaGlzIGlzIGJlY2F1c2UKLSAgb2YgdGhlIE1pY3Jvc29mdCBpbXBsZW1l bnRhdGlvbiBvZiBnZXRob3N0YnlhZGRyKCkgaW4gYm90aCBXaW5zb2NrIDEuMQotICBhbmQgV2lu c29jayAyLjAgb24gdGhvc2UgcGxhdGZvcm1zLiAgVGhlaXIgYWxnb3JpdGhtIGlzOgotCi0gIDEu IENoZWNrIHRoZSBIT1NURU5UIGNhY2hlLgotICAyLiBDaGVjayB0aGUgSE9TVFMgZmlsZSBhdCAl U3lzdGVtUm9vdCVcU3lzdGVtMzJcRFJJVkVSU1xFVEMuCi0gIDMuIERvIGEgRE5TIHF1ZXJ5IGlm IHRoZSBETlMgc2VydmVyIGlzIGNvbmZpZ3VyZWQgZm9yIG5hbWUgcmVzb2x1dGlvbi4KLSAgNC4g RG8gYW4gYWRkaXRpb25hbCBOZXRCSU9TIHJlbW90ZSBhZGFwdGVyIHN0YXR1cyB0byBhbiBJUCBh ZGRyZXNzIGZvciBpdHMKLSAgICAgTmV0QklPUyBuYW1lIHRhYmxlLiBUaGlzIHN0ZXAgaXMgc3Bl Y2lmaWMgb25seSB0byB0aGUgV2luZG93cyBOVCB2ZXJzaW9uCi0gICAgIDMuNTEgaW1wbGVtZW50 YXRpb24uCi0KLSAgVGhlIHByb2JsZW0gaXMgdGhlIHVzZSBvZiB0aGUgSE9TVEVOVCBjYWNoZS4g IEl0IG1lYW5zIHRoYXQgZ2V0aG9zdGJ5YWRkcigpCi0gIGNhbiBub3QgYmUgdXNlZCB0byByZXNv bHZlIHRoZSByZWFsIG5hbWUgb2YgbWFjaGluZSBpZiBpdCB3YXMgb3JpZ2luYWxseQotICBhY2Nl c3NlZCBieSBhbiBhbGlhcyB1c2VkIHRvIHJlcHJlc2VudCBhIGNsdXN0ZXIuCi0qLwotICAgICBp ZiAoKHRjcF9yZG5zICYmIGRucyB8fCB0Y3BfcmRucyA9PSBTRVRfT04KLSNpZmRlZiBDS19LRVJC RVJPUwotICAgICAgICAgfHwgdGNwX3JkbnMgPT0gU0VUX0FVVE8gJiYKLSAgICAgICAgICAoY2tf a3JiNV9pc19pbnN0YWxsZWQoKSB8fCBja19rcmI0X2lzX2luc3RhbGxlZCgpKQotI2VuZGlmIC8q IENLX0tFUkJFUk9TICovCi0gICAgICAgICApCi0jaWZuZGVmIE5PSFRUUAotICAgICAgICAgICYm ICh0Y3BfaHR0cF9wcm94eSA9PSBOVUxMKQotI2VuZGlmIC8qIE5PSFRUUCAqLwotI2lmZGVmIENL X1NTTAotICAgICAgICAgICYmICEoc3NsX29ubHlfZmxhZyB8fCB0bHNfb25seV9mbGFnKQotI2Vu ZGlmIC8qIENLX1NTTCAqLwotICAgICAgICAgKSB7Ci0jaWZkZWYgTlQKLSAgICAgICAgaWYgKGlz V2luOTUoKSkKLSAgICAgICAgICBzbGVlcCgxKTsKLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICBp ZiAoIXF1aWV0KSB7Ci0gICAgICAgICAgICBwcmludGYoIiBSZXZlcnNlIEROUyBMb29rdXAuLi4g Iik7Ci0gICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICAgICAgfQotICAgICAgICBpZiAo aG9zdCA9IGdldGhvc3RieWFkZHIoKGNoYXIgKikmcl9hZGRyLnNpbl9hZGRyLDQsUEZfSU5FVCkp IHsKLSAgICAgICAgICAgIGNoYXIgKiBzOwotICAgICAgICAgICAgaG9zdCA9IGNrX2NvcHlob3N0 ZW50KGhvc3QpOwotICAgICAgICAgICAgZGVidWcoRjEwMCwibmV0b3BlbiBnZXRob3N0YnluYW1l ICE9IE5VTEwiLCIiLDApOwotICAgICAgICAgICAgaWYgKCFxdWlldCkgewotICAgICAgICAgICAg ICAgIHByaW50ZigiKE9LKVxuIik7Ci0gICAgICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgICAgICBzID0gaG9zdC0+aF9uYW1lOwotICAgICAgICAgICAg aWYgKCFzKSB7ICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgY2FuIGhhcHBlbi4uLiAqLwotICAg ICAgICAgICAgICAgIGRlYnVnKEYxMDAsIm5ldG9wZW4gaG9zdC0+aF9uYW1lIGlzIE5VTEwiLCIi LDApOwotICAgICAgICAgICAgICAgIHMgPSAiIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg IC8qIFNvbWV0aGluZyBpcyB3cm9uZyB3aXRoIGluZXRfbnRvYSgpIG9uIEhQVVggMTAueHggKi8K LSAgICAgICAgICAgIC8qIFRoZSBjb21waWxlciBzYXlzICJJbnRlZ3JhbCB2YWx1ZSBpbXBsaWNp dGx5IGNvbnZlcnRlZCB0byAqLwotICAgICAgICAgICAgLyogcG9pbnRlciBpbiBhc3NpZ25tZW50 LiIgIFRoZSBwcm90b3R5cGUgaXMgcmlnaHQgdGhlcmUgKi8KLSAgICAgICAgICAgIC8qIGluIDxh cnBhL2luZXQuaD4gc28gd2hhdCdzIHRoZSBwcm9ibGVtPyAqLwotICAgICAgICAgICAgLyogRGl0 dG8gaW4gSFAtVVggNS54LCBidXQgbm90IDgueCBvciA5LnguLi4gKi8KLSAgICAgICAgICAgIGlm ICghKnMpIHsgICAgICAgICAgICAgICAgICAvKiBObyBuYW1lIHNvIHN1YnN0aXR1dGUgdGhlIGFk ZHJlc3MgKi8KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJuZXRvcGVuIGhvc3QtPmhfbmFt ZSBpcyBlbXB0eSIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgcyA9IGluZXRfbnRvYShyX2FkZHIu c2luX2FkZHIpOyAvKiBDb252ZXJ0IGFkZHJlc3MgdG8gc3RyaW5nICovCi0gICAgICAgICAgICAg ICAgaWYgKCFzKSAgICAgICAgICAgICAgICAgLyogVHJ1c3QgTm8gMSAqLwotICAgICAgICAgICAg ICAgICAgcyA9ICIiOwotICAgICAgICAgICAgICAgIGlmICgqcykgeyAgICAgICAgICAgICAgIC8q IElmIGl0IHdvcmtlZCwgdXNlIHRoaXMgc3RyaW5nICovCi0gICAgICAgICAgICAgICAgICAgIGNr c3RybmNweShpcGFkZHIscywyMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg IHMgPSBpcGFkZHI7ICAgICAgICAgICAgIC8qIE90aGVyd2lzZSBzdGljayB3aXRoIHRoZSBJUCAq LwotICAgICAgICAgICAgICAgIGlmICghKnMpICAgICAgICAgICAgICAgIC8qIG9yIGZhaWxpbmcg dGhhdCAqLwotICAgICAgICAgICAgICAgICAgcyA9IG5hbWVjb3B5OyAgICAgICAgIC8qIHRoZSBu YW1lIHdlIHdlcmUgY2FsbGVkIHdpdGguICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp ZiAoKnMpIHsgICAgICAgICAgICAgICAgICAgLyogQ29weWluZyBpbnRvIG91ciBhcmd1bWVudD8g Ki8KLSAgICAgICAgICAgICAgICBja3N0cm5jcHkobmFtZSxzLDgwKTsgICAvKiBCYWQgQmFkIEJh ZCAqLwotICAgICAgICAgICAgICAgIGlmICggKDgwLXN0cmxlbihuYW1lKSkgPiAoc3RybGVuKHN2 Y2J1ZikrMSkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdChuYW1lLCI6Iiw4MC1z dHJsZW4obmFtZSkpOwotICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQobmFtZSxzdmNidWYs ODAtc3RybGVuKG5hbWUpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg ICAgICAgICBpZiAoIXF1aWV0ICYmICpzCi0jaWZuZGVmIE5PSUNQCi0gICAgICAgICAgICAgICAg JiYgIWRvY29ueAotI2VuZGlmIC8qIE5PSUNQICovCi0gICAgICAgICAgICAgICAgKSB7Ci0gICAg ICAgICAgICAgICAgcHJpbnRmKCIgJXMgY29ubmVjdGVkIG9uIHBvcnQgJXNcbiIscyxwKTsKLSNp ZmRlZiBCRVRBREVCVUcKLSAgICAgICAgICAgICAgICAvKiBUaGlzIGlzIHNpbXBseSBmb3IgdGVz dGluZyB0aGUgRE5TIGVudHJpZXMgKi8KLSAgICAgICAgICAgICAgICBpZiAoaG9zdC0+aF9hbGlh c2VzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIgKiogYSA9IGhvc3QtPmhfYWxpYXNlczsK LSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCphKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg ICBwcmludGYoIiBhbGlhcyA9PiAlc1xuIiwqYSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBh Kys7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyog QkVUQURFQlVHICovCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICBpZiAoIXF1aWV0KSBwcmludGYoIkZhaWxlZC5cbiIpOwotICAgICAgICB9Ci0gICAgfSBlbHNl IGlmICghcXVpZXQpIHByaW50ZigiKE9LKVxuIik7Ci0gICAgaWYgKCFxdWlldCkgZmZsdXNoKHN0 ZG91dCk7Ci0KLSAgICAvKiBUaGlzIHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBkb25lIGJ1dCBq dXN0IGluIGNhc2UgKi8KLSAgICBja3N0cm5jcHkoaXBhZGRyLChjaGFyICopaW5ldF9udG9hKHJf YWRkci5zaW5fYWRkciksMjApOwotCi0jaWZkZWYgQ0tfU0VDVVJJVFkKLQotICAgIC8qIEJlZm9y ZSBJbml0aWFsaXphdGlvbiBUZWxuZXQvUmxvZ2luIE5lZ290aWF0aW9ucyBJbml0IEtlcmJlcm9z ICovCi0jaWZuZGVmIE5PSFRUUAotICAgIGlmICh0Y3BfaHR0cF9wcm94eSkgewotICAgICAgICBm b3IgKGk9c3RybGVuKHByb3h5Y29weSk7IGkgPj0gMCA7IGktLSkKLSAgICAgICAgICAgIGlmICgg cHJveHljb3B5W2ldID09ICc6JyApCi0gICAgICAgICAgICAgICAgcHJveHljb3B5W2ldID0gJ1ww JzsKLSAgICB9Ci0jZW5kaWYgLyogTk9IVFRQICovCi0gICAgY2tfYXV0aF9pbml0KAotI2lmbmRl ZiBOT0hUVFAKLSAgICAgICAgICAgICAgICAgdGNwX2h0dHBfcHJveHkgPyBwcm94eWNvcHkgOgot I2VuZGlmIC8qIE5PSFRUUCAqLwotICAgICAgICAgICAgICAgICAodGNwX3JkbnMgJiYgaG9zdCAm JiBob3N0LT5oX25hbWUgJiYgaG9zdC0+aF9uYW1lWzBdKSA/Ci0gICAgICAgICAgICAgICAgIChj aGFyICopaG9zdC0+aF9uYW1lIDogKG5hbWVjb3B5MlswXSA/IG5hbWVjb3B5MiA6IAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuYW1lY29weVswXSA/IG5hbWVjb3B5 IDogaXBhZGRyKSksCi0gICAgICAgICAgICAgICAgIGlwYWRkciwKLSAgICAgICAgICAgICAgICAg dWlkYnVmLAotICAgICAgICAgICAgICAgICB0dHlmZAotICAgICAgICAgICAgICAgICApOwotI2Vu ZGlmIC8qIENLX1NFQ1VSSVRZICovCi0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKGNrX3NzbGVheV9p c19pbnN0YWxsZWQoKSkgewotICAgICAgICBpZiAoIXNzbF90bl9pbml0KFNTTF9DTElFTlQpKSB7 Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJuZXRvcGVuIHNzbF90bl9pbml0KCkgZmFpbGVkIiwi IiwwKTsKLSAgICAgICAgICAgIGlmIChiaW9fZXJyIT1OVUxMKSB7Ci0gICAgICAgICAgICAgICAg QklPX3ByaW50ZihiaW9fZXJyLCJzc2xfdG5faW5pdCgpIGZhaWxlZFxuIik7Ci0gICAgICAgICAg ICAgICAgRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g ICAgICAgICAgICAgICAgZmZsdXNoKHN0ZGVycik7Ci0gICAgICAgICAgICAgICAgZnByaW50Zihz dGRlcnIsInNzbF90bl9pbml0KCkgZmFpbGVkXG4iKTsKLSAgICAgICAgICAgICAgICBFUlJfcHJp bnRfZXJyb3JzX2ZwKHN0ZGVycik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodGxz X29ubHlfZmxhZyB8fCBzc2xfb25seV9mbGFnKSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEw MCwibmV0b3BlbiBzc2wvdGxzIHJlcXVpcmVkIiwiIiwwKTsKLSAgICAgICAgICAgICAgICBuZXRj bG9zKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgIH0KLQotICAg ICAgICAgICAgLyogd2Ugd2lsbCBjb250aW51ZSB0byBhY2NlcHQgdGhlIGNvbm5lY3Rpb24gICAq LwotICAgICAgICAgICAgLyogd2l0aG91dCBTU0wgb3IgVExTIHN1cHBvcnQgdW5sZXNzIHJlcXVp cmVkLiAqLwotICAgICAgICAgICAgaWYgKCBURUxPUFRfREVGX1NfTUVfTU9ERShURUxPUFRfU1RB UlRfVExTKSAhPSBUTl9OR19NVSApCi0gICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9TX01FX01P REUoVEVMT1BUX1NUQVJUX1RMUykgPSBUTl9OR19SRjsKLSAgICAgICAgICAgIGlmICggVEVMT1BU X0RFRl9TX1VfTU9ERShURUxPUFRfU1RBUlRfVExTKSAhPSBUTl9OR19NVSApCi0gICAgICAgICAg ICAgICAgVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfU1RBUlRfVExTKSA9IFROX05HX1JGOwot ICAgICAgICAgICAgaWYgKCBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfU1RBUlRfVExTKSAh PSBUTl9OR19NVSApCi0gICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BU X1NUQVJUX1RMUykgPSBUTl9OR19SRjsKLSAgICAgICAgICAgIGlmICggVEVMT1BUX0RFRl9DX1Vf TU9ERShURUxPUFRfU1RBUlRfVExTKSAhPSBUTl9OR19NVSApCi0gICAgICAgICAgICAgICAgVEVM T1BUX0RFRl9DX1VfTU9ERShURUxPUFRfU1RBUlRfVExTKSA9IFROX05HX1JGOwotICAgICAgICB9 IGVsc2UgaWYgKCBja19zc2xfb3V0Z29pbmcodHR5ZmQpIDwgMCApIHsKLSAgICAgICAgICAgIGRl YnVnKEYxMDAsImNrX3NzbF9vdXRnb2luZygpIGZhaWxlZCIsIiIsMCk7Ci0gICAgICAgICAgICBu ZXRjbG9zKCk7Ci0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0gICAgfQotI2Vu ZGlmIC8qIENLX1NTTCAqLwotCi0jaWZkZWYgUkxPR0NPREUKLSAgICBpZiAodHRucHJvdG8gPT0g TlBfUkxPR0lOCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSAgICAgICAgfHwgdHRucHJvdG8gPT0gTlBf SzRMT0dJTiB8fCB0dG5wcm90byA9PSBOUF9FSzRMT0dJTgotICAgICAgICB8fCB0dG5wcm90byA9 PSBOUF9LNUxPR0lOIHx8IHR0bnByb3RvID09IE5QX0VLNUxPR0lOCi0jZW5kaWYgLyogQ0tfS0VS QkVST1MgKi8KLSAgICAgICAgKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTaW1p bGFyIGRlYWwgZm9yIHJsb2dpbiAqLwotICAgICAgICBpZiAocmxvZ19pbmkoKCh0Y3BfcmRucyAm JiBob3N0ICYmIGhvc3QtPmhfbmFtZSAmJiBob3N0LT5oX25hbWVbMF0pID8KLSAgICAgICAgICAg ICAgICAgICAgICAoQ0hBUiAqKWhvc3QtPmhfbmFtZSA6IChDSEFSICopaXBhZGRyKSwKLSAgICAg ICAgICAgICAgICAgICAgIHNlcnZpY2UtPnNfcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICZs X2FkZHIsJnJfYWRkcgotICAgICAgICAgICAgICAgICAgICAgKSA8IDApIHsKLSAgICAgICAgICAg IGRlYnVnKEYxMDAsInJsb2dpbiBpbml0aWFsaXphdGlvbiBmYWlsZWQiLCIiLDApOwotICAgICAg ICAgICAgbmV0Y2xvcygpOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAg IH0gZWxzZQotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0gICAgaWYgKHRuX2luaSgpIDwgMCkgeyAg ICAgICAgICAgICAgICAgLyogU3RhcnQgVGVsbmV0IG5lZ290aWF0aW9ucy4gKi8KLSAgICAgICAg bmV0Y2xvcygpOwotICAgICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAgICAgICAgIC8qIEdv bmUsIHNvIG9wZW4gZmFpbGVkLiAgKi8KLSAgICB9Ci0gICAgaWYgKHR0Y2hrKCkgPCAwKSB7Ci0g ICAgICAgIG5ldGNsb3MoKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0jaWZkZWYgQ0tf S0VSQkVST1MKLSNpZmRlZiBLUkI1X1UyVQotICAgaWYgKCB0dG5wcm90byA9PSBOUF9LNVUyVSAp IHsKLSAgICAgICBpZiAoazVfdXNlcl90b191c2VyX2NsaWVudF9hdXRoKCkpIHsKLSAgICAgICAg ICAgbmV0Y2xvcygpOwotICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgIH0KLSAgIH0KLSNl bmRpZiAvKiBLUkI1X1UyVSAqLwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0KLSAgICBkZWJ1 ZyhGMTAxLCJuZXRvcGVuIHNlcnZpY2UiLCIiLHN2Y251bSk7Ci0gICAgZGVidWcoRjExMCwibmV0 b3BlbiBuYW1lIixuYW1lLDApOwotICAgIGRlYnVnKEYxMTAsIm5ldG9wZW4gaXBhZGRyIixpcGFk ZHIsMCk7Ci0gICAgY2tzdHJuY3B5KGhvc3RpcGFkZHIsaXBhZGRyLDYzKTsKLQotICAgIGlmIChs Y2wpIGlmICgqbGNsIDwgMCkgICAgICAgICAgICAgIC8qIExvY2FsIG1vZGUuICovCi0gICAgICAq bGNsID0gMTsKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSAgICByZXR1cm4oMCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBEb25lLiAqLwotfQotCi0vKiAgTiBFIFQgQyBMIE8gUyAgLS0g IENsb3NlIGN1cnJlbnQgbmV0d29yayBjb25uZWN0aW9uLiAgKi8KLQotI2lmbmRlZiBOT0xPQ0FM Ci1fUFJPVE9UWVAoVk9JRCBzbHJlc3RvciwoVk9JRCkpOwotI2lmZGVmIENLX1NTTAotaW50IHRs c19ub3Jlc3RvcmUgPSAwOwotI2VuZGlmIC8qIENLX1NTTCAqLwotI2VuZGlmIC8qIE5PTE9DQUwg Ki8KLQotaW50Ci1uZXRjbG9zKCkgewotICAgIHN0YXRpYyBpbnQgY2xvc2VfaW5fcHJvZ3Jlc3Mg PSAwOwotICAgIGludCB4ID0gMCwgeSwgejsKLSAgICBkZWJ1ZyhGMTAxLCJuZXRjbG9zIiwiIix0 dHlmZCk7Ci0KLSNpZmRlZiBORVRMRUJVRgotICAgIGlmICghdHRfcHVzaF9pbml0ZWQpCi0gICAg ICBsZV9pbml0KCk7Ci0jZW5kaWYgLyogTkVUTEVCVUYgKi8KLQotICAgIGlmICh0dHlmZCA9PSAt MSkgICAgICAgICAgICAgICAgICAgIC8qIFdhcyBvcGVuPyAqLwotICAgICAgcmV0dXJuKDApOyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFdhc24ndC4gKi8KLQotICAgIGlmIChjbG9zZV9pbl9w cm9ncmVzcykKLSAgICAgIHJldHVybigwKTsKLSAgICBjbG9zZV9pbl9wcm9ncmVzcyA9IDE7ICAg ICAgICAgICAgICAvKiBSZW1lbWJlciAqLwotCi0jaWZuZGVmIE5PTE9DQUwKLSAgICAvKiBUaGlz IGZ1bmN0aW9uIGNhbGwgc2hvdWxkIG5vdCBiZSBoZXJlIHNpbmNlIHRoaXMgaXMgYSBkaXJlY3Qg Y2FsbCAqLwotICAgIC8qIGZyb20gYW4gSS9PIHJvdXRpbmUgdG8gYSB1c2VyIGludGVyZmFjZSBs ZXZlbCBmdW5jdGlvbi4gIEhvd2V2ZXIsICovCi0gICAgLyogdGhlIHJlYWxpdHkgaXMgdGhhdCB3 ZSBkbyBub3QgaGF2ZSBwdXJlIGludGVyZmFjZXMuICBJZiB3ZSBldmVyICAgKi8KLSAgICAvKiBk ZWNpZGUgdG8gY2xlYW4gdGhpcyB1cCB0aGUgVUkgbGV2ZWwgc2hvdWxkIGFzc2lnbiB0aGlzIGZ1 bmN0aW9uICAqLwotICAgIC8qIHZpYSBhIHBvaW50ZXIgYXNzaWdubWVudC4gIC0gSmVmZiA5LzEw LzE5OTkgICAgICAgICAgICAgICAgICAgICAgICovCi0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKCF0 bHNfbm9yZXN0b3JlKQotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgc2xyZXN0b3IoKTsKLSNl bmRpZiAvKiBOT0xPQ0FMICovCi0jaWZkZWYgT1MyCi0gICAgUmVxdWVzdFRDUElQTXV0ZXgoU0VN X0lOREVGSU5JVEVfV0FJVCk7Ci0jZWxzZSAvKiBPUzIgKi8KLSAgICBpZiAodHR5ZmQgPiAtMSkg ICAgICAgICAgICAgICAgICAgICAvKiBXYXMuICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgICB7 Ci0jaWZkZWYgVk1TCi0JICB5ID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR1cm4g b24gbm9uYmxvY2tpbmcgcmVhZHMgKi8KLQkgIHogPSBzb2NrZXRfaW9jdGwodHR5ZmQsRklPTkJJ TywmeSk7Ci0JICBkZWJ1ZyhGMTExLCJuZXRjbG9zIEZJT05CSU8iLCJvbiIseik7Ci0jZW5kaWYg LyogVk1TICovCi0jaWZkZWYgVE5DT0RFCi0gICAgICAgICAgaWYgKHR0bnByb3RvID09IE5QX1RF TE5FVCkgewotICAgICAgICAgICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0xPR09VVCkKLSNpZmRl ZiBDT01NRU5UCi0vKiBKZWZmIDIwMDUvMTIvMzAgKi8KLSNpZmRlZiBDS19TU0wKLQkJICYmICFz c2xfcmF3X2ZsYWcgJiYgIXRsc19yYXdfZmxhZwotI2VuZGlmCS8qIENLX1NTTCAqLwotI2VuZGlm CS8qIENPTU1FTlQgKi8KLQkJKSB7Ci0JCS8qIFNlbmQgTE9HT1VUIG9wdGlvbiBiZWZvcmUgY2xv c2UgKi8KLQkJaWYgKHRuX3NvcHQoRE8sVEVMT1BUX0xPR09VVCkgPj0gMCkgewotCQkgICAgVEVM T1BUX1VOQU5TV0VSRURfRE8oVEVMT1BUX0xPR09VVCkgPSAxOwotCQkgICAgLyogSXQgd291bGQg YmUgbmljZSB0byBjYWxsIHRuX3dhaXQgYnV0IHdlIGNhbid0ICovCi0JCX0KLQkgICAgfQotICAg ICAgICAgICAgdG5fcHVzaCgpOwkJCS8qIFBsYWNlIGFueSB3YWl0aW5nIGRhdGEgaW50byBpbnB1 dCovCi0gICAgICAgICAgfQotI2VuZGlmIC8qIFROQ09ERSAqLwotI2lmZGVmIENLX1NTTAotICAg ICAgICAgIGlmIChzc2xfYWN0aXZlX2ZsYWcpIHsKLSAgICAgICAgICAgICAgaWYgKHNzbF9kZWJ1 Z19mbGFnKQotICAgICAgICAgICAgICAgIEJJT19wcmludGYoYmlvX2VyciwiY2FsbGluZyBTU0xf c2h1dGRvd25cbiIpOwotICAgICAgICAgICAgICBTU0xfc2h1dGRvd24oc3NsX2Nvbik7Ci0gICAg ICAgICAgICAgIHNzbF9hY3RpdmVfZmxhZyA9IDA7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlm ICh0bHNfYWN0aXZlX2ZsYWcpIHsKLSAgICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQot ICAgICAgICAgICAgICAgIEJJT19wcmludGYoYmlvX2VyciwiY2FsbGluZyBTU0xfc2h1dGRvd25c biIpOwotICAgICAgICAgICAgICBTU0xfc2h1dGRvd24odGxzX2Nvbik7Ci0gICAgICAgICAgICAg IHRsc19hY3RpdmVfZmxhZyA9IDA7Ci0gICAgICAgICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwot I2lmZGVmIFZNUwotICAgICAgICAgIGNrX2NhbmNpbygpOyAgICAgICAgICAgICAgICAgIC8qIENh bmNlbCBhbnkgb3V0c3RhbmRpbmcgcmVhZHMuICovCi0jZW5kaWYgLyogVk1TICovCi0jaWZkZWYg VENQSVBMSUIKLSAgICAgICAgICB4ID0gc29ja2V0X2Nsb3NlKHR0eWZkKTsgICAgICAvKiBDbG9z ZSBpdC4gKi8KLSNlbHNlCi0jaWZuZGVmIE9TMgotI2lmZGVmIElCTVgyNQotICAgICAgICBpZiAo dHRuZXQgPT0gTkVUX0lYMjUpIHsKLSAgICAgICAgICAgIC8qIHJpZWhtOiBzaG91bGQgc2VuZCBh IGRpc2NfcmVxIC0gYnV0IG9ubHkgaWYgbGluayBpcyBzdGlsbCBPSyAqLwotICAgICAgICAgICAg eCA9IHgyNWNsZWFyKCk7Ci0gICAgICAgICAgICBjbG9zZSh0dHlmZCk7Ci0gICAgICAgICAgICBp ZiAoeDI1c2VydmVyZmQpIHsKLSAgICAgICAgICAgICAgICAgIC8qIHdlIHdlcmUgdGhlIHBhc3Np dmUgY2xpZW50IG9mIGEgc2VydmVyLCBub3cgd2UKLSAgICAgICAgICAgICAgICAgICAqIGdvIGJh Y2sgdG8gYmVpbmcgdGhlIG5vcm1hbCBjbGllbnQuCi0gICAgICAgICAgICAgICAgICAgKiBJIGhv cGUgdGhhdCBrZXJtaXQgY2FuIGNvcGUgd2l0aCB0aGUgbG9naWMgdGhhdAotICAgICAgICAgICAg ICAgICAgICogdGhlcmUgY2FuIHN0aWxsIGJlIGEgY29ubmVjdGlvbiBhZnRlciBuZXRjbG9zCi0g ICAgICAgICAgICAgICAgICAgKiBoYXMgYmVlbiBjYWxsZWQuCi0gICAgICAgICAgICAgICAgICAg Ki8KLSAgICAgICAgICAgICAgICAgIHR0eWZkID0geDI1c2VydmVyZmQ7Ci0gICAgICAgICAgICAg ICAgICB4MjVzZXJ2ZXJmZCA9IDA7Ci0gICAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAg ICAgICAgICogbmVlZCB0byBjbG9zZSB0aGUgc2VydmVyIGNvbm5lY3Rpb24gdG9vIC0gYmVjYXVz ZQotICAgICAgICAgICAgICAgICAgICogYWxsIGZpbGUgZGVzY3JpcHRvcnMgY29ubmVjdGVkIHRv IHRoZSBOUEkgaGF2ZSB0aGUKLSAgICAgICAgICAgICAgICAgICAqIHNhbWUgc3RhdHVzLgotICAg ICAgICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAgICAgICAqIFRoZSBwcm9ibGVtIGlzIHRo YXQgYW55IHdhaXRpbmcgY29ubmVjdGlvbnMgZ2V0Ci0gICAgICAgICAgICAgICAgICAgKiBsb3N0 LCB0aGUgY2xpZW50IGRvZXNuJ3QgcmVhbGlzZSwgYW5kIGhhbmdzLgotICAgICAgICAgICAgICAg ICAgICovCi0gICAgICAgICAgICAgICAgICBuZXRjbG9zKCk7Ci0gICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIHgyNV9zdGF0ZSA9IFgyNV9DTE9TRUQ7ICAgICAvKiByaWVobTogZGVhZCBjb2Rl PyAqLwotICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBJQk1YMjUgKi8KLSAgICAgICAgICB4ID0g Y2xvc2UodHR5ZmQpOwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFRDUElQTElCICovCi0g ICAgICB9Ci0gICAgdHR5ZmQgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFyayBp dCBhcyBjbG9zZWQuICovCi0gICAgd2FzY2xvc2VkID0gMTsKLSNpZmRlZiBPUzIKLSAgICBSZWxl YXNlVENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9TMiAqLwotI2lmZGVmIFROQ09ERQotI2lmZGVm IENLX0ZPUldBUkRfWAotICAgIGZ3ZHhfY2xvc2VfYWxsKCk7ICAgICAgICAgICAgICAgICAgIC8q IFNodXQgZG93biBhbnkgRm9yd2FyZCBYIHNvY2tldHMgKi8KLSNlbmRpZiAvKiBDS19GT1JXQVJE X1ggKi8KLSAgICB0bl9yZXNldCgpOyAgICAgICAgICAgICAgICAgICAvKiBUaGUgUmVzZXQgVGVs bmV0IE9wdGlvbiB0YWJsZS4gICovCi0gICAgZGVidWcoRjEwMCwibmV0Y2xvc2Ugc2V0dGluZyB0 bl9pbml0ID0gMCIsIiIsMCk7Ci0gICAgdG5faW5pdCA9IDA7ICAgICAgICAgICAgICAgICAgICAg ICAgLyogUmVtZW1iZXIgYWJvdXQgdGVsbmV0IHByb3RvY29sLi4uICovCi0gICAgc3N0ZWxuZXQg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xpZW50LXNpZGUgVGVsbmV0ICovCi0jZW5k aWYgLyogVE5DT0RFICovCi0gICAgKmlwYWRkciA9ICdcMCc7ICAgICAgICAgICAgICAgICAgICAg LyogWmVybyB0aGUgSVAgYWRkcmVzcyBzdHJpbmcgKi8KLSAgICB0Y3BfaW5jb21pbmcgPSAwOyAg ICAgICAgICAgICAgICAgICAvKiBObyBsb25nZXIgaW5jb21pbmcgKi8KLSAgICAvKiBEb24ndCBy ZXNldCB0dG5wcm90byBzbyB0aGF0IHdlIGNhbiByZW1lbWJlciB3aGljaCBwcm90b2NvbCBpcyBp biB1c2UgKi8KLQotI2lmZGVmIFRDUElQTElCCi0vKgotICBFbXB0eSB0aGUgaW50ZXJuYWwgYnVm ZmVycyBzbyB0aGV5IHdvbid0IGJlIHVzZWQgYXMgaW52YWxpZCBpbnB1dCBvbgotICB0aGUgbmV4 dCBjb25uZWN0IGF0dGVtcHQgKHJsb2dpbikuCi0qLwotICAgIHR0aWJwID0gMDsKLSAgICB0dGli biA9IDA7Ci0jZW5kaWYgLyogVENQSVBMSUIgKi8KLSNpZmRlZiBDS19LRVJCRVJPUwotICAgIC8q IElmIHdlIGFyZSBhdXRvbWF0aWNhbGx5IGRlc3Ryb3lpbmcgS2VyYmVyb3MgY3JlZGVudGlhbHMg b24gQ2xvc2UgKi8KLSAgICAvKiBkbyBpdCBub3cuICovCi0jaWZkZWYgS1JCNAotICAgIGlmIChr cmI0X2F1dG9kZWwgPT0gS1JCX0RFTF9DTCkgewotICAgICAgICBleHRlcm4gc3RydWN0IGtyYl9v cF9kYXRhIGtyYl9vcDsKLSAgICAgICAga3JiX29wLnZlcnNpb24gPSA0OwotICAgICAgICBrcmJf b3AuY2FjaGUgPSBOVUxMOwotICAgICAgICBja19rcmI0X2Rlc3Ryb3koJmtyYl9vcCk7Ci0gICAg fQotI2VuZGlmIC8qIEtSQjQgKi8KLSNpZmRlZiBLUkI1Ci0gICAgaWYgKGtyYjVfYXV0b2RlbCA9 PSBLUkJfREVMX0NMKSB7Ci0gICAgICAgIGV4dGVybiBzdHJ1Y3Qga3JiX29wX2RhdGEga3JiX29w OwotICAgICAgICBleHRlcm4gY2hhciAqIGtyYjVfZF9jYzsKLSAgICAgICAga3JiX29wLnZlcnNp b24gPSA1OwotICAgICAgICBrcmJfb3AuY2FjaGUgPSBrcmI1X2RfY2M7Ci0gICAgICAgIGNrX2ty YjVfZGVzdHJveSgma3JiX29wKTsKLSAgICB9Ci0jZW5kaWYgLyogS1JCNSAqLwotI2VuZGlmIC8q IENLX0tFUkJFUk9TICovCi0gICAgY2xvc2VfaW5fcHJvZ3Jlc3MgPSAwOyAgICAgICAgICAgICAg LyogUmVtZW1iZXIgd2UgYXJlIGRvbmUuICovCi0gICAgcmV0dXJuKHgpOwotfQotCi0jaWZkZWYg T1MyCi1pbnQKLW9zMnNvY2tldGVycm9yKCBpbnQgc19lcnJubyApIHsKLSNpZmRlZiBPUzJPTkxZ Ci0gICAgaWYgKHNfZXJybm8gPiAwICYmIHNfZXJybm8gPD0gU09DQkFTRUVSUikgewotICAgICAg ICAvKiBpbiBPUy8yLCB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aHJlYWRpbmcgaW4gdGhhdAot ICAgICAgICAgKiB0aGUgdmFsdWUgb2YgZXJybm8gaXMgbm90IHRocmVhZCBzYWZlLiAgSXQgY2Fu IGJlCi0gICAgICAgICAqIHNldCB0byBhIHZhbHVlIGZyb20gYSBwcmV2aW91cyBsaWJyYXJ5IGNh bGwgYW5kIGlmCi0gICAgICAgICAqIGl0IHdhcyBub3QgY2xlYXJlZCBpdCB3aWxsIGFwcGVhciBo ZXJlLiAgT25seSB0cmVhdAotICAgICAgICAgKiB2YWxpZCBzb2NrZXQgZXJyb3IgY29kZXMgYXMg ZXJyb3JzIGluIHRoaXMgZnVuY3Rpb24uCi0gICAgICAgICAqLwotICAgICAgICBkZWJ1ZyhGMTAw LCJvczJzb2NrZXRlcnJvciBlcnJuby5oIiwiIiwwKTsKLSAgICAgICAgc29ja2V0X2Vycm5vID0g MDsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBPUzJPTkxZICovCi0KLSAg ICBzd2l0Y2ggKHNfZXJybm8pIHsKLSAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBOTyBFUlJPUiAqLwotICAgICAgICBkZWJ1ZyhGMTAwLCJvczJzb2NrZXRlcnJvciBO T0VSUk9SIiwiIiwwKTsKLSAgICAgICAgcmV0dXJuKDApOwotI2lmZGVmIE5UCi0gICAgICBjYXNl IFdTQUVDT05OUkVTRVQ6Ci0jZWxzZSAvKiBOVCAqLwotICAgICAgY2FzZSBTT0NFQ09OTlJFU0VU OgotICAgICAgY2FzZSBTT0NFQ09OTlJFU0VUIC0gU09DQkFTRUVSUjoKLSNlbmRpZiAvKiBOVCAq LwotICAgICAgICBkZWJ1ZyhGMTAwLCJvczJzb2NrZXRlcnJvciBFQ09OUkVTRVQiLCIiLDApOwot ICAgICAgICB0bl9kZWJ1ZygiRUNPTlJFU0VUIik7Ci0gICAgICAgIG5ldGNsb3MoKTsgICAgICAg ICAgICAgIC8qICoqKiAqKiogKi8KLSAgICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgLyog Q29ubmVjdGlvbiBpcyBicm9rZW4uICovCi0jaWZkZWYgTlQKLSAgICAgIGNhc2UgV1NBRUNPTk5B Qk9SVEVEOgotI2Vsc2UgLyogTlQgKi8KLSAgICAgIGNhc2UgU09DRUNPTk5BQk9SVEVEOgotICAg ICAgY2FzZSBTT0NFQ09OTkFCT1JURUQgLSBTT0NCQVNFRVJSOgotI2VuZGlmIC8qIE5UICovCi0g ICAgICAgIGRlYnVnKEYxMDAsIm9zMnNvY2tldGVycm9yIEVDT05OQUJPUlRFRCIsIiIsMCk7Ci0g ICAgICAgIHRuX2RlYnVnKCJFQ09OTkFCT1JURUQiKTsKLSAgICAgICAgbmV0Y2xvcygpOyAgICAg ICAgICAgICAgLyogKioqICoqKiAqLwotICAgICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAv KiBDb25uZWN0aW9uIGlzIGJyb2tlbi4gKi8KLSNpZmRlZiBOVAotICAgICAgY2FzZSBXU0FFTkVU UkVTRVQ6Ci0jZWxzZSAvKiBOVCAqLwotICAgICAgY2FzZSBTT0NFTkVUUkVTRVQ6Ci0gICAgICBj YXNlIFNPQ0VORVRSRVNFVCAtIFNPQ0JBU0VFUlI6Ci0jZW5kaWYgLyogTlQgKi8KLSAgICAgICAg ZGVidWcoRjEwMCwib3Myc29ja2V0ZXJyb3IgRU5FVFJFU0VUIiwiIiwwKTsKLSAgICAgICAgdG5f ZGVidWcoIkVORVRSRVNFVCIpOwotICAgICAgICBuZXRjbG9zKCk7ICAgICAgICAgICAgICAvKiAq KiogKioqICovCi0gICAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAgIC8qIENvbm5lY3Rpb24g aXMgYnJva2VuLiAqLwotI2lmZGVmIE5UCi0gICAgICBjYXNlIFdTQUVOT1RDT05OOgotI2Vsc2Ug LyogTlQgKi8KLSAgICAgIGNhc2UgU09DRU5PVENPTk46Ci0gICAgICBjYXNlIFNPQ0VOT1RDT05O IC0gU09DQkFTRUVSUjoKLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICBkZWJ1ZyhGMTAwLCJvczJz b2NrZXRlcnJvciBFTk9UQ09OTiIsIiIsMCk7Ci0gICAgICAgIHRuX2RlYnVnKCJFTk9UQ09OTiIp OwotICAgICAgICBuZXRjbG9zKCk7ICAgICAgICAgICAgICAgICAgICAgIC8qICoqKiAqKiogKi8K LSAgICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgICAgICAgICAvKiBDb25uZWN0aW9uIGlz IGJyb2tlbi4gKi8KLSNpZmRlZiBOVAotICAgICAgY2FzZSBXU0FFU0hVVERPV046Ci0gICAgICAg IGRlYnVnKEYxMDAsIm9zMnNvY2tldGVycm9yIEVTSFVURE9XTiIsIiIsMCk7Ci0gICAgICAgIHRu X2RlYnVnKCJFU0hVVERPV04iKTsKLSAgICAgICAgbmV0Y2xvcygpOyAgICAgICAgICAgICAgICAg ICAgICAvKiAqKiogKioqICovCi0gICAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAgICAg ICAgLyogQ29ubmVjdGlvbiBpcyBicm9rZW4uICovCi0jZW5kaWYgLyogTlQgKi8KLSNpZmRlZiBO VAotICAgICAgY2FzZSBXU0FFV09VTERCTE9DSzoKLSNlbHNlCi0gICAgICBjYXNlIFNPQ0VXT1VM REJMT0NLOgotICAgICAgY2FzZSBTT0NFV09VTERCTE9DSyAtIFNPQ0JBU0VFUlI6Ci0jZW5kaWYg LyogTlQgKi8KLSAgICAgICAgZGVidWcoRjEwMCwib3Myc29ja2V0ZXJyb3IgRVdPVUxEQkxPQ0si LCIiLDApOwotICAgICAgICByZXR1cm4oMCk7Ci0jaWZkZWYgTlQKLSAgICAgIGNhc2UgRVJST1Jf SU9fSU5DT01QTEVURToKLSAgICAgIGNhc2UgRVJST1JfSU9fUEVORElORzoKLSAgICAgIGNhc2Ug RVJST1JfT1BFUkFUSU9OX0FCT1JURUQ6Ci0gICAgICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBO VCAqLwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuKC0yKTsKLSAgICB9Ci0gICAgcmV0 dXJuKDApOwotfQotI2VuZGlmIC8qIE9TMiAqLwotCi0vKiAgTiBFIFQgVCBDIEggSyAgLS0gIENo ZWNrIGlmIG5ldHdvcmsgdXAsIGFuZCBob3cgbWFueSBieXRlcyBjYW4gYmUgcmVhZCAqLwotLyoK LSAgUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgd2FpdGluZywgb3IgLTEgaWYgY29ubmVjdGlvbiBo YXMgYmVlbiBkcm9wcGVkLgotKi8KLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBDaGVjayBob3cgbWFueSBieXRlcyBhcmUgcmVhZHkgKi8KLW5ldHRjaGsoKSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgcmVhZGluZyBmcm9tIG5ldHdvcmsgKi8K LSNpZmRlZiBUQ1BJUExJQgotICAgIGxvbmcgY291bnQgPSAwOwotICAgIGludCB4ID0gMCwgejsK LSAgICBsb25nIHk7Ci0gICAgY2hhciBjOwotICAgIGludCByYzsKLSNpZmRlZiBOVAotICAgIGV4 dGVybiBpbnQgaW9ub2Jsb2NrOyAgICAgICAgICAgICAgIC8qIEZvciBPdmVybGFwcGVkIEkvTyAq LwotI2VuZGlmIC8qIE5UICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJuZXR0Y2hrIGVudHJ5IHR0aWJu IiwiIix0dGlibik7Ci0gICAgZGVidWcoRjEwMSwibmV0dGNoayBlbnRyeSB0dGlicCIsIiIsdHRp YnApOwotCi0jaWZkZWYgTkVUTEVCVUYKLSAgICB7Ci0gICAgICAgIGludCBuID0gMDsKLSAgICAg ICAgaWYgKHR0cHVzaCA+PSAwKQotICAgICAgICAgIG4rKzsKLSAgICAgICAgbiArPSBsZV9pbmJ1 ZigpOwotICAgICAgICBpZiAobiA+IDApCi0gICAgICAgICAgcmV0dXJuKG4pOwotICAgIH0KLSNl bmRpZiAvKiBORVRMRUJVRiAqLwotCi0jaWZuZGVmIE9TMgotI2lmbmRlZiBCRUJPWAotICAgIHNv Y2tldF9lcnJubyA9IDA7IC8qIFRoaXMgaXMgYSBmdW5jdGlvbiBjYWxsIGluIE5ULCBhbmQgQmVP UyAqLwotI2VuZGlmIC8qIEJFQk9YICovCi0jZW5kaWYgLyogT1MyICovCi0KLSAgICBpZiAodHR5 ZmQgPT0gLTEpIHsKLSAgICAgICAgZGVidWcoRjEwMCwibmV0dGNoayBzb2NrZXQgaXMgY2xvc2Vk IiwiIiwwKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0vKgotICBOb3RlOiB0aGlzIHNv Y2tldF9pb2N0bCgpIGNhbGwgZG9lcyBOT1QgcmV0dXJuIGFuIGVycm9yIGlmIHRoZQotICBjb25u ZWN0aW9uIGhhcyBiZWVuIGJyb2tlbi4gIChBdCBsZWFzdCBub3QgaW4gTXVsdGlOZXQuKQotKi8K LSNpZmRlZiBDT01NRU5UCi0vKiAgQW5vdGhlciB0cmljayB0aGF0IGNhbiBiZSB0cmllZCBoZXJl IGlzIHNvbWV0aGluZyBsaWtlIHRoaXM6ICovCi0KLSAgICBpZiAodHRuZXQgPT0gTkVUX1RDUEIp IHsKLSAgICAgICAgY2hhciBkdW1teTsKLSAgICAgICAgeCA9IHJlYWQodHR5ZmQsJmR1bW15LDAp OyAgICAgICAvKiBUcnkgdG8gcmVhZCBub3RoaW5nICovCi0gICAgICAgIGlmICh4IDwgMCkgeyAg ICAgICAgICAgICAgICAgICAgLyogIkNvbm5lY3Rpb24gcmVzZXQgYnkgcGVlciIgKi8KLSAgICAg ICAgICAgIHBlcnJvcigiVENQL0lQIik7ICAgICAgICAgICAvKiBvciBzb21lc3VjaC4uLiAqLwot ICAgICAgICAgICAgdHRjbG9zKDApOyAgICAgICAgICAgICAgICAgIC8qIENsb3NlIG91ciBlbmQg dG9vLiAqLwotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRp ZiAvKiBDT01NRU5UICovCi0KLQotI2lmZGVmIENLX1NTTAotICAgIGlmIChzc2xfYWN0aXZlX2Zs YWcpIHsKLSNpZm5kZWYgSUtTRE9OTFkKLSNpZmRlZiBPUzIKLSAgICAgICAgaWYgKCBJc0Nvbm5l Y3RNb2RlKCkgKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXR0Y2hrIChzc2xfYWN0aXZl X2ZsYWcpIHJldHVybnMiLCIiLGNvdW50KTsKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAg ICAgfQotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIElLU0RPTkxZICovCi0gICAgICAgIGNv dW50ID0gU1NMX3BlbmRpbmcoc3NsX2Nvbik7Ci0gICAgICAgIGlmIChjb3VudCA8IDApIHsKLSAg ICAgICAgICAgIGRlYnVnKEYxMTEsIm5ldHRjaGsiLCJTU0xfcGVuZGluZyBlcnJvciIsY291bnQp OwotICAgICAgICAgICAgbmV0Y2xvcygpOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAg ICAgfQotICAgICAgICBpZiAoIGNvdW50ID4gMCApCi0gICAgICAgICAgICByZXR1cm4oY291bnQp OyAgICAgICAgICAgICAgICAgIC8qIERvbid0IHBlcmZvcm0gYSByZWFkICovCi0gICAgfSBlbHNl IGlmICh0bHNfYWN0aXZlX2ZsYWcpIHsKLSNpZm5kZWYgSUtTRE9OTFkKLSNpZmRlZiBPUzIKLSAg ICAgICAgaWYgKCBJc0Nvbm5lY3RNb2RlKCkgKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJu ZXR0Y2hrICh0bHNfYWN0aXZlX2ZsYWcpIHJldHVybnMiLCIiLGNvdW50KTsKLSAgICAgICAgICAg IHJldHVybigwKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIElLU0RP TkxZICovCi0gICAgICAgIGNvdW50ID0gU1NMX3BlbmRpbmcodGxzX2Nvbik7Ci0gICAgICAgIGlm IChjb3VudCA8IDApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsIm5ldHRjaGsiLCJUTFNfcGVu ZGluZyBlcnJvciIsY291bnQpOwotICAgICAgICAgICAgbmV0Y2xvcygpOwotICAgICAgICAgICAg cmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIGNvdW50ID4gMCApCi0gICAgICAg ICAgICByZXR1cm4oY291bnQpOyAgICAgICAgICAgICAgICAgIC8qIERvbid0IHBlcmZvcm0gYSBy ZWFkICovCi0gICAgfSBlbHNlCi0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSAgICBpZiAoc29ja2V0 X2lvY3RsKHR0eWZkLEZJT05SRUFELAotI2lmZGVmIENPTU1FTlQKLSAgICAvKiBOb3cgd2UndmUg Y2hhbmdlZCB0aGUgaW9jdGwoLi4sLi4seCkgcHJvdG90eXBlIGZvciBERUNDIHRvICh2b2lkICop ICovCi0jaWZkZWYgX19ERUNDCi0gICAgLyogTk9URTogIiZjb3VudCIgbWlnaHQgbmVlZCB0byBi ZSAiKGNoYXIgKikmY291bnQiIGluIHNvbWUgc2V0dGluZ3MuICovCi0gICAgICAgICAgICAgICAg ICAgICAvKiBDYXN0IG5lZWRlZCBmb3IgREVDQyA0LjEgJiBsYXRlcj8gKi8KLSAgICAgICAgICAg ICAgICAgICAgIC8qIE1heWJlLCBidXQgX19ERUNDX1ZFUiBvbmx5IGV4aXN0cyBpbiA1LjAgYW5k IGxhdGVyICovCi0gICAgICAgICAgICAgICAgICAgICAoY2hhciAqKQotI2VuZGlmIC8qIF9fREVD QyAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgICAgICAgICAgICZjb3VudAot ICAgICAgICAgICAgICAgICAgICAgKSA8IDApIHsKLSAgICAgICAgZGVidWcoRjEwMSwibmV0dGNo ayBzb2NrZXRfaW9jdGwgZXJyb3IiLCIiLHNvY2tldF9lcnJubyk7Ci0gICAgICAgIC8qIElmIHRo ZSBjb25uZWN0aW9uIGlzIGdvbmUsIHRoZSBjb25uZWN0aW9uIGlzIGdvbmUuICovCi0gICAgICAg IG5ldGNsb3MoKTsKLSNpZmRlZiBOVF9UQ1BfT1ZFUkxBUFBFRAotICAgICAgICAvKiBJcyB0aGVy ZSBhbnl0aGluZyBpbiB0aGUgb3ZlcmxhcHBlZCBJL08gYnVmZmVycz8gKi8KLSAgICAgICAgY291 bnQgKz0gT3ZlcmxhcHBlZERhdGFXYWl0aW5nKCk7Ci0jZW5kaWYgLyogTlRfVENQX09WRVJMQVBQ RUQgKi8KLSAgICAgICAgY291bnQgKz0gdHRpYm47Ci0gICAgICAgIHJldHVybihjb3VudD4wP2Nv dW50Oi0xKTsKLSAgICB9Ci0gICAgZGVidWcoRjEwMSwibmV0dGNoayBjb3VudCIsIiIsY291bnQp OwotI2lmZGVmIE5UX1RDUF9PVkVSTEFQUEVECi0gICAgLyogSXMgdGhlcmUgYW55dGhpbmcgaW4g dGhlIG92ZXJsYXBwZWQgSS9PIGJ1ZmZlcnM/ICovCi0gICAgY291bnQgKz0gT3ZlcmxhcHBlZERh dGFXYWl0aW5nKCk7Ci0gICAgZGVidWcoRjEwMSwibmV0dGNoayBjb3VudCB3L292ZXJsYXBwZWQi LCIiLGNvdW50KTsKLSNlbmRpZiAvKiBOVF9UQ1BfT1ZFUkxBUFBFRCAqLwotCi0jaWZkZWYgT1My Ci0jaWZuZGVmIElLU0RPTkxZCi0gICAgaWYgKCBJc0Nvbm5lY3RNb2RlKCkgKSB7Ci0gICAgICAg IGRlYnVnKEYxMDEsIm5ldHRjaGsgKEZJT05SRUFEKSByZXR1cm5zIiwiIixjb3VudCk7Ci0gICAg ICAgIHJldHVybihjb3VudCk7Ci0gICAgfQotI2VuZGlmIC8qIElLU0RPTkxZICovCi0jZW5kaWYg LyogT1MyICovCi0KLS8qIEZvciB0aGUgc2FrZSBvZiBlZmZpY2llbmN5LCBpZiB0aGVyZSBpcyBz dGlsbCBkYXRhIGluIHRoZSB0dGlidWYgKi8KLS8qIGRvIG5vdCBnbyB0byB0aGUgYm90aGVyIG9m IGNoZWNraW5nIHRvIHNlZSBvZiB0aGUgY29ubmVjdGlvbiBpcyAgKi8KLS8qIHN0aWxsIHZhbGlk LiAgVGhlIGhhbmRsZSBpcyBzdGlsbCBnb29kLCBzbyBqdXN0IHJldHVybiB0aGUgY291bnQgKi8K LS8qIG9mIHRoZSBieXRlcyB0aGF0IHdlIGFscmVhZHkgaGF2ZSBsZWZ0IHRvIHByb2Nlc3MuICAg ICAgICAgICAgICAgKi8KLSNpZmRlZiBPUzIKLSAgICBpZiAoIGNvdW50ID4gMCB8fCB0dGlibiA+ IDAgKSB7Ci0gICAgICAgIGNvdW50Kz10dGlibjsKLSAgICAgICAgZGVidWcoRjEwMSwibmV0dGNo ayAoY291bnQrdHRpYm4gPiAwKSByZXR1cm5zIiwiIixjb3VudCk7Ci0gICAgICAgIHJldHVybihj b3VudCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUmVxdWVzdFRDUElQTXV0ZXgoU0VNX0lOREVG SU5JVEVfV0FJVCk7Ci0gICAgICAgIGlmICggdHRpYm4gPT0gMCApCi0gICAgICAgICAgICB0dGli cCA9IDA7ICAgICAgLyogcmVzZXQgZm9yIG5leHQgcmVhZCAqLwotICAgIH0KLSNlbHNlIC8qIE9T MiAqLwotICAgIGlmICggY291bnQgPiAwIHx8IHR0aWJuID4gMCApIHsKLSAgICAgICAgZGVidWco RjEwMSwibmV0dGNoayByZXR1cm5zIiwiIixjb3VudCt0dGlibik7Ci0gICAgICAgIHJldHVybihj b3VudCt0dGlibik7Ci0gICAgfQotICAgIHR0aWJuID0gdHRpYnAgPSAwOwotI2VuZGlmIC8qIE9T MiAqLwotCi0vKgotICBUaGUgZm9sbG93aW5nIGNvZGUgd29ya3Mgd2VsbCBpbiBtb3N0IHNldHRp bmdzLCBidXQgbWVzc2VzIHRoaW5ncyB1cCBpbgotICBvdGhlcnMsIGluY2x1ZGluZyBDTVUvVGVr IFRDUC9JUCBhbmQgVUNYIDIuMCwgd2hlcmUgaXQgc29tZWhvdyBtYW5hZ2VzIHRvCi0gIG1ha2Ug aXQgaW1wb3NzaWJsZSB0byBldmVyIG1ha2UgYSBuZXcgY29ubmVjdGlvbiB0byB0aGUgc2FtZSBo b3N0IGFnYWluIHdpdGgKLSAgQ09OTkVDVCwgb25jZSBpdCBoYXMgYmVlbiBsb2dnZWQgb3V0IGZy b20gdGhlIGZpcnN0IHRpbWUuICBOb3QgZXZlbiBpZiB5b3UKLSAgSEFOR1VQIGZpcnN0LCBvciBT RVQgSE9TVDxDUj4sIG9yIFNFVCBMSU5FPENSPi4gIFJlcG9ydGVkbHksIGhvd2V2ZXIsIGl0Ci0g IGRvZXMgd29yayBPSyBpbiBsYXRlciByZWxlYXNlcyBvZiBVQ1guICBCdXQgdGhlcmUgaXMgbm8g d2F5IHdlIGNhbgotICBhY2NvbW1vZGF0ZSBib3RoIG9sZCBhbmQgbmV3IC0tIHdlIG1pZ2h0IGhh dmUgc3RhdGljIGxpbmtpbmcgb3IgZHluYW1pYwotICBsaW5raW5nLCBldGMgZXRjLiAgSWYgd2Ug aGF2ZSBzdGF0aWMsIEkgb25seSBoYXZlIGFjY2VzcyB0byAyLjAsIHdoZXJlIHRoaXMKLSAgZG9l c24ndCB3b3JrLCBldGMgZXRjIGJsYWggYmxhaC4KLQotICBJbiB0aGUgZm9sbG93aW5nIGxpbmVz LCB3ZSBkZWZpbmUgYSBzeW1ib2wgTk9DT1VOVCBmb3IgYnVpbGRzIHdoZXJlIHdlIHdhbnQKLSAg dG8gb21pdCB0aGlzIGNvZGUuICBCeSBkZWZhdWx0LCBpdCBpcyBvbWl0dGVkIGZvciBDTVUvVGVr LiAgWW91IGNhbiBmb3JjZQotICBvbWlzc2lvbiBvZiBpdCBmb3Igb3RoZXIgY29tYmluYXRpb25z IGJ5IGRlZmluaW5nIE5PQ09VTlQgaW4gQ0ZMQUdTLiAgWW91Ci0gIGNhbiBmb3JjZSBpbmNsdXNp b24gb2YgdGhpcyBjb2RlLCBldmVuIGZvciBDTVUvVGVrLCBieSBpbmNsdWRpbmcgTk9OT0NPVU5U Ci0gIGluIENGTEFHUy4KLSovCi0jaWZkZWYgTk9OT0NPVU5UCi0jaWZkZWYgTk9DT1VOVAotI3Vu ZGVmIE5PQ09VTlQKLSNlbmRpZiAvKiBOT0NPVU5UICovCi0jZWxzZQotI2lmbmRlZiBOT0NPVU5U Ci0jaWZkZWYgQ01VX1RDUElQCi0jZGVmaW5lIE5PQ09VTlQKLSNlbmRpZiAvKiBDTVVfVENQSVAg Ki8KLSNlbmRpZiAvKiBOT0NPVU5UICovCi0jZW5kaWYgLyogTk9OT0NPVU5UICovCi0KLQotICAg IC8qIEZyb20gdGhpcyBwb2ludCBmb3J3YXJkIHdlIGhhdmUgYSBwb3NzaWJsZSByYWNlIGNvbmRp dGlvbiBpbiBLOTUKLSAgICAgKiBkdWUgdG8gaXRzIHVzZSBvZiBtdWx0aXBsZSB0aHJlYWRzLiAg VGhlcmVmb3JlLCB3ZSBtdXN0IGVuc3VyZQotICAgICAqIHRoYXQgb25seSBvbmUgdGhyZWFkIGF0 dGVtcHQgdG8gcmVhZC93cml0ZSBmcm9tIHRoZSBzb2NrZXQgYXQgYQotICAgICAqIHRpbWUuICBP dGhlcndpc2UsIGl0IGlzIHBvc3NpYmxlIGZvciBhIGJ1ZmZlciB0byBiZSBvdmVyd3JpdHRlbi4K LSAgICAgKi8KLSAgICAvKiB3ZSBrbm93IG5vdyB0aGF0IGNvdW50ID49IDAgYW5kIHRoYXQgdHRp Ym4gPT0gMCAqLwotCi0gICAgaWYgKGNvdW50ID09IDAKLSNpZmRlZiBSTE9HQ09ERQotI2lmZGVm IENLX0tFUkJFUk9TCi0gICAgICAgICYmIHR0bnByb3RvICE9IE5QX0VLNExPR0lOICYmIHR0bnBy b3RvICE9IE5QX0VLNUxPR0lOCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSNlbmRpZiAvKiBS TE9HQ09ERSAqLwotICAgICAgICApIHsKLSAgICAgICAgaW50IHNfZXJybm8gPSAwOwotI2lmbmRl ZiBOT0NPVU5UCi0vKgotICBIZXJlIHdlIG5lZWQgdG8gdGVsbCB0aGUgZGlmZmVyZW5jZSBiZXR3 ZWVuIGEgMCBjb3VudCBvbiBhbiBhY3RpdmUKLSAgY29ubmVjdGlvbiwgYW5kIGEgMCBjb3VudCBi ZWNhdXNlIHRoZSByZW1vdGUgZW5kIG9mIHRoZSBzb2NrZXQgYnJva2UgdGhlCi0gIGNvbm5lY3Rp b24uICBUaGVyZSBpcyBubyBtZWNoYW5pc20gaW4gVEdWIE11bHRpTmV0IChvciBXSU4vVENQPykg dG8gcXVlcnkKLSAgdGhlIHN0YXR1cyBvZiB0aGUgY29ubmVjdGlvbiwgc28gd2UgaGF2ZSB0byBk byBhIHJlYWQuICAtMSBtZWFucyB0aGVyZSB3YXMKLSAgbm8gZGF0YSBhdmFpbGFibGUgKHNvY2tl dF9lcnJubyA9PSBFV09VTERCTE9DSyksIDAgbWVhbnMgdGhlIGNvbm5lY3Rpb24gaXMKLSAgZG93 bi4gIEJ1dCBpZiwgYnkgY2hhbmNlLCB3ZSBhY3R1YWxseSBnZXQgYSBjaGFyYWN0ZXIsIHdlIGhh dmUgdG8gcHV0IGl0Ci0gIHdoZXJlIGl0IHdvbid0IGJlIGxvc3QuCi0qLwotI2lmbmRlZiBOT05f QkxPQ0tfSU8KLSNpZmRlZiBPUzIKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgUmVxdWVzdFNTTE11 dGV4KFNFTV9JTkRFRklOSVRFX1dBSVQpOwotI2VuZGlmIC8qIENLX1NTTCAqLwotI2VuZGlmIC8q IE9TMiAqLwotICAgICAgICB5ID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR1cm4g b24gbm9uYmxvY2tpbmcgcmVhZHMgKi8KLSAgICAgICAgeiA9IHNvY2tldF9pb2N0bCh0dHlmZCxG SU9OQklPLCZ5KTsKLSAgICAgICAgZGVidWcoRjExMSwibmV0dGNoayBGSU9OQklPIiwib24iLHop OwotI2lmZGVmIE9TMgotI2lmZGVmIENLX1NTTAotICAgICAgICBSZWxlYXNlU1NMTXV0ZXgoKTsK LSNlbmRpZiAvKiBDS19TU0wgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT05fQkxP Q0tfSU8gKi8KLSNpZmRlZiBOVF9UQ1BfT1ZFUkxBUFBFRAotICAgICAgICBpb25vYmxvY2sgPSAx OyAgICAgICAgICAgICAgICAgIC8qIEZvciBPdmVybGFwcGVkIEkvTyAqLwotI2VuZGlmIC8qIE5U X1RDUF9PVkVSTEFQUEVEICovCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAgIGlmICggc3NsX2FjdGl2 ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZyApIHsKLSNpZmRlZiBPUzIKLQkgIHNzbF9yZWFkOgot ICAgICAgICAgICAgeCA9IFNTTF9yZWFkKCBzc2xfYWN0aXZlX2ZsYWc/c3NsX2Nvbjp0bHNfY29u LAotICAgICAgICAgICAgICAgICAgICAgICAgICAmdHRpYnVmW3R0aWJwK3R0aWJuXSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgVFRJQlVGTC10dGlicC10dGlibiApOwotICAgICAgICAgICAg c3dpdGNoIChTU0xfZ2V0X2Vycm9yKHNzbF9hY3RpdmVfZmxhZz9zc2xfY29uOnRsc19jb24seCkp IHsKLSAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX05PTkU6Ci0gICAgICAgICAgICAgICAgZGVi dWcoRjExMSwibmV0dGNoayBTU0xfRVJST1JfTk9ORSIsIngiLHgpOwotICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9XUklURToKLSAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTAwLCJuZXR0Y2hrIFNTTF9FUlJPUl9XQU5UX1dSSVRFIiwiIiwwKTsK LSAgICAgICAgICAgICAgICB4ID0gLTE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEw MCwibmV0dGNoayBTU0xfRVJST1JfV0FOVF9SRUFEIiwiIiwwKTsKLSAgICAgICAgICAgICAgICB4 ID0gLTE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNTTF9FUlJP Ul9TWVNDQUxMOgotICAgICAgICAgICAgICAgIGlmICggeCA9PSAwICkgeyAvKiBFT0YgKi8KLSAg ICAgICAgICAgICAgICAgICAgbmV0Y2xvcygpOwotICAgICAgICAgICAgICAgICAgICByYyA9IC0x OwotICAgICAgICAgICAgICAgICAgICBnb3RvIG5ldHRjaGtfcmV0dXJuOwotICAgICAgICAgICAg ICB9IGVsc2UgewotI2lmZGVmIE5UCi0gICAgICAgICAgICAgICAgICBpbnQgZ2xlID0gR2V0TGFz dEVycm9yKCk7Ci0jZW5kaWYgLyogTlQgKi8KLSNpZm5kZWYgTk9OX0JMT0NLX0lPCi0jaWZkZWYg T1MyCi0jaWZkZWYgQ0tfU1NMCi0JCSAgUmVxdWVzdFNTTE11dGV4KFNFTV9JTkRFRklOSVRFX1dB SVQpOwotI2VuZGlmIC8qIENLX1NTTCAqLwotI2VuZGlmIC8qIE9TMiAqLwotCQkgIHkgPSAwOyAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogVHVybiBvZmYgbm9uYmxvY2tpbmcgcmVhZHMgKi8K LQkJICB6ID0gc29ja2V0X2lvY3RsKHR0eWZkLEZJT05CSU8sJnkpOwotCQkgIGRlYnVnKEYxMTEs Im5ldHRjaGsgRklPTkJJTyIsIm9mZiIseik7Ci0jaWZkZWYgT1MyCi0jaWZkZWYgQ0tfU1NMCi0J CSAgUmVsZWFzZVNTTE11dGV4KCk7Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0jZW5kaWYgLyogT1My ICovCi0jZW5kaWYgLyogTk9OX0JMT0NLX0lPICovCi0jaWZkZWYgTlRfVENQX09WRVJMQVBQRUQK LQkJICBpb25vYmxvY2sgPSAwOyAgICAgICAgICAgICAgICAgIC8qIEZvciBPdmVybGFwcGVkIEkv TyAqLwotI2VuZGlmIC8qIE5UX1RDUF9PVkVSTEFQUEVEICovCi0jaWZkZWYgTlQKLSAgICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTEsIm5ldHRjaGsgU1NMX0VSUk9SX1NZU0NBTEwiLAotICAgICAg ICAgICAgICAgICAgICAgICAgICJHZXRMYXN0RXJyb3IoKSIsZ2xlKTsKLSAgICAgICAgICAgICAg ICAgIHJjID0gb3Myc29ja2V0ZXJyb3IoZ2xlKTsKLSAgICAgICAgICAgICAgICAgIGlmIChyYyA9 PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgICByYyA9IC0yOwotICAgICAgICAgICAgICAgICAg ZWxzZSBpZiAoIHJjID09IC0yICkKLSAgICAgICAgICAgICAgICAgICAgICByYyA9IC0xOwotCQkg IGdvdG8gbmV0dGNoa19yZXR1cm47Ci0jZW5kaWYgLyogTlQgKi8KLSAgICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9Y NTA5X0xPT0tVUDoKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJuZXR0Y2hrIFNTTF9FUlJP Ul9XQU5UX1g1MDlfTE9PS1VQIiwiIiwwKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgIGNhc2UgU1NMX0VSUk9SX1NTTDoKLSAgICAgICAgICAgICAgICBpZiAoYmlvX2VyciE9 TlVMTCkgewotICAgICAgICAgICAgICAgICAgICBpbnQgbGVuOwotICAgICAgICAgICAgICAgICAg ICBleHRlcm4gY2hhciBzc2xfZXJyW107Ci0gICAgICAgICAgICAgICAgICAgIEJJT19wcmludGYo YmlvX2VyciwibmV0dGNoaygpIFNTTF9FUlJPUl9TU0xcbiIpOwotICAgICAgICAgICAgICAgICAg ICBFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOwotICAgICAgICAgICAgICAgICAgICBsZW4gPSBC SU9fcmVhZChiaW9fZXJyLHNzbF9lcnIsU1NMX0VSUl9CRlNaKTsKLSAgICAgICAgICAgICAgICAg ICAgc3NsX2VycltsZW4gPCBTU0xfRVJSX0JGU1ogPyBsZW4gOiBTU0xfRVJSX0JGU1pdID0gJ1ww JzsKLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwibmV0dGNoayBTU0xfRVJST1JfU1NM Iixzc2xfZXJyLDApOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCi0g ICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoc3NsX2Vycik7Ci0gICAgICAgICAgICAgICAg fSBlbHNlIGlmIChzc2xfZGVidWdfZmxhZykgewotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhG MTAwLCJuZXR0Y2hrIFNTTF9FUlJPUl9TU0wiLCIiLDApOwotICAgICAgICAgICAgICAgICAgICBm Zmx1c2goc3RkZXJyKTsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIm5ldHRj aGsoKSBTU0xfRVJST1JfU1NMXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgRVJSX3ByaW50X2Vy cm9yc19mcChzdGRlcnIpOwotICAgICAgICAgICAgICAgIH0KLSNpZmRlZiBDT01NRU5UCi0gICAg ICAgICAgICAgICAgbmV0Y2xvcygpOwotICAgICAgICAgICAgICAgIHJjID0gLTE7Ci0JCWdvdG8g bmV0dGNoa19yZXR1cm47Ci0jZWxzZQotICAgICAgICAgICAgICAgIHggPSAtMTsKLQkJYnJlYWs7 Ci0jZW5kaWYKLSAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVSTjoKLSAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTAwLCJuZXR0Y2hrIFNTTF9FUlJPUl9aRVJPX1JFVFVSTiIsIiIsMCk7 Ci0gICAgICAgICAgICAgICAgbmV0Y2xvcygpOwotICAgICAgICAgICAgICAgIHJjID0gLTE7Ci0g ICAgICAgICAgICAgICAgZ290byBuZXR0Y2hrX3JldHVybjsKLSAgICAgICAgICAgIGRlZmF1bHQ6 Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMCwibmV0dGNoayBTU0xfRVJST1JfPz8/Pz8iLCIi LDApOwotICAgICAgICAgICAgICAgIG5ldGNsb3MoKTsKLSAgICAgICAgICAgICAgICByYyA9IC0x OwotICAgICAgICAgICAgICAgIGdvdG8gbmV0dGNoa19yZXR1cm47Ci0gICAgICAgICAgICB9Ci0j ZWxzZSAvKiBPUzIgKi8KLQkgICAgLyogRG8gbm90IGJsb2NrICovCi0JICAgIHggPSAtMTsKLSNl bmRpZiAvKiBPUzIgKi8KLSAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAg ICAgIHsKLSNpZmRlZiBPUzIKLSAgICAgICAgeCA9IHNvY2tldF9yZWFkKHR0eWZkLCZ0dGlidWZb dHRpYnArdHRpYm5dLAotICAgICAgICAgICAgICAgICAgICAgICAgIFRUSUJVRkwtdHRpYnAtdHRp Ym4pOyAgLyogUmV0dXJucyAtMSBpZiBubyBkYXRhICovCi0jZWxzZSAvKiBPUzIgKi8KLSAgICAg ICAgeCA9IHNvY2tldF9yZWFkKHR0eWZkLCZjLDEpOyAgICAvKiBSZXR1cm5zIC0xIGlmIG5vIGRh dGEgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgfQotICAgICAgICBzX2Vycm5vID0gc29j a2V0X2Vycm5vOyAgICAgICAgIC8qIHNvY2tldF9lcnJubyBtYXkgYmUgYSBmdW5jdGlvbiAqLwot ICAgICAgICBkZWJ1ZyhGMTAxLCJuZXR0Y2hrIHNvY2tldF9yZWFkIiwiIix4KTsKLQotI2lmbmRl ZiBOT05fQkxPQ0tfSU8KLSNpZmRlZiBPUzIKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgUmVxdWVz dFNTTE11dGV4KFNFTV9JTkRFRklOSVRFX1dBSVQpOwotI2VuZGlmIC8qIENLX1NTTCAqLwotI2Vu ZGlmIC8qIE9TMiAqLwotICAgICAgICB5ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFR1cm4gb2ZmIG5vbmJsb2NraW5nIHJlYWRzICovCi0gICAgICAgIHogPSBzb2NrZXRfaW9jdGwo dHR5ZmQsRklPTkJJTywmeSk7Ci0gICAgICAgIGRlYnVnKEYxMTEsIm5ldHRjaGsgRklPTkJJTyIs Im9mZiIseik7Ci0jaWZkZWYgT1MyCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAgIFJlbGVhc2VTU0xN dXRleCgpOwotI2VuZGlmIC8qIENLX1NTTCAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8q IE5PTl9CTE9DS19JTyAqLwotI2lmZGVmIE5UX1RDUF9PVkVSTEFQUEVECi0gICAgICAgIGlvbm9i bG9jayA9IDA7ICAgICAgICAgICAgICAgICAgLyogRm9yIE92ZXJsYXBwZWQgSS9PICovCi0jZW5k aWYgLyogTlRfVENQX09WRVJMQVBQRUQgKi8KLQotICAgICAgICBpZiAoeCA9PSAtMSkgewotICAg ICAgICAgICAgZGVidWcoRjEwMSwibmV0dGNoayBzb2NrZXRfcmVhZCBlcnJubyIsIiIsc19lcnJu byk7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICBpZiAob3Myc29ja2V0ZXJyb3Ioc19lcnJubykg PCAwKSB7Ci0gICAgICAgICAgICAgICAgcmMgPSAtMTsKLSAgICAgICAgICAgICAgICBnb3RvIG5l dHRjaGtfcmV0dXJuOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICB9 IGVsc2UgaWYgKHggPT0gMCkgewotICAgICAgICAgICAgZGVidWcoRjEwMCwibmV0dGNoayBjb25u ZWN0aW9uIGNsb3NlZCIsIiIsMCk7Ci0gICAgICAgICAgICBuZXRjbG9zKCk7ICAgICAgICAgICAg ICAgICAgLyogKioqICoqKiAqLwotICAgICAgICAgICAgcmMgPSAtMTsKLSAgICAgICAgICAgIGdv dG8gbmV0dGNoa19yZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHggPj0gMSkgeyAgICAg ICAgICAgICAgICAgICAvKiBPb3BzLCBhY3R1YWxseSBnb3QgYSBieXRlPyAqLwotI2lmZGVmIE9T MgotICAgICAgICAgICAgLyogSW4gT1MvMiB3ZSByZWFkIGRpcmVjdGx5IGludG8gdHRpYnVmW10g Ki8KLSAgICAgICAgICAgIGNraGV4ZHVtcCgibmV0dGNoayBnb3QgcmVhbCBkYXRhIiwmdHRpYnVm W3R0aWJwK3R0aWJuXSx4KTsKLSAgICAgICAgICAgIHR0aWJuICs9IHg7Ci0jZWxzZSAvKiBPUzIg Ki8KLSNpZmRlZiBDS19TU0wKLQkgICAgaWYgKCBzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2 ZV9mbGFnICkgewotCQlja2hleGR1bXAoIm5ldHRjaGsgZ290IHJlYWwgZGF0YSIsJnR0aWJ1Zlt0 dGlicCt0dGlibl0seCk7Ci0JCXR0aWJuICs9IHg7Ci0JICAgIH0gZWxzZSAKLSNlbmRpZiAvKiBD S19TU0wgKi8KLQkgICAgewotCQlkZWJ1ZyhGMTAxLCJuZXR0Y2hrIHNvY2tldF9yZWFkIGNoYXIi LCIiLGMpOwotCQlkZWJ1ZyhGMTAxLCJuZXR0Y2hrIHR0aWJwIiwiIix0dGlicCk7Ci0JCWRlYnVn KEYxMDEsIm5ldHRjaGsgdHRpYm4iLCIiLHR0aWJuKTsKLS8qCi0gIEluIHRoZSBjYXNlIG9mIE92 ZXJsYXBwZWQgSS9PIHRoZSBjaGFyYWN0ZXIgd291bGQgaGF2ZSBjb21lIGZyb20KLSAgdGhlIGJl Z2lubmluZyBvZiB0aGUgYnVmZmVyLCBzbyBwdXQgaXQgYmFjay4KLSovCi0JCWlmICh0dGlicCA+ IDApIHsKLQkJICAgIHR0aWJwLS07Ci0JCSAgICB0dGlidWZbdHRpYnBdID0gYzsKLQkJICAgIHR0 aWJuKys7Ci0JCX0gZWxzZSB7Ci0JCSAgICB0dGlidWZbdHRpYnArdHRpYm5dID0gYzsKLQkJICAg IHR0aWJuKys7Ci0JCX0KLQkgICAgfQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICB9Ci0jZWxz ZSAvKiBOT0NPVU5UICovCi0gICAgICAgIGlmICh0dG5ldCA9PSBORVRfVENQQikgewotICAgICAg ICAgICAgY2hhciBkdW1teTsKLSAgICAgICAgICAgIHggPSByZWFkKHR0eWZkLCZkdW1teSwwKTsg ICAvKiBUcnkgdG8gcmVhZCBub3RoaW5nICovCi0gICAgICAgICAgICBpZiAoeCA8IDApIHsgICAg ICAgICAgICAgICAgLyogIkNvbm5lY3Rpb24gcmVzZXQgYnkgcGVlciIgKi8KLSAgICAgICAgICAg ICAgICBwZXJyb3IoIlRDUC9JUCIpOyAgICAgICAvKiBvciBzb21lc3VjaC4uLiAqLwotICAgICAg ICAgICAgICAgIHR0Y2xvcygwKTsgICAgICAgICAgICAgIC8qIENsb3NlIG91ciBlbmQgdG9vLiAq LwotICAgICAgICAgICAgICAgIHJjID0gLTE7Ci0gICAgICAgICAgICAgICAgZ290byBuZXR0Y2hr X3JldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIE5PQ09VTlQgKi8K LSAgICB9Ci0jaWZkZWYgQ0tfS0VSQkVST1MKLSNpZmRlZiBLUkI0Ci0jaWZkZWYgUkxPR0NPREUK LSAgICBpZiAodHRucHJvdG8gPT0gTlBfRUs0TE9HSU4pCi0gICAgICBjb3VudCArPSBrcmI0X2Rl c19hdmFpbCh0dHlmZCk7Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNlbmRpZiAvKiBLUkI0ICov Ci0jaWZkZWYgS1JCNQotI2lmZGVmIFJMT0dDT0RFCi0gICAgaWYgKHR0bnByb3RvID09IE5QX0VL NUxPR0lOKQotICAgICAgY291bnQgKz0ga3JiNV9kZXNfYXZhaWwodHR5ZmQpOwotI2VuZGlmIC8q IFJMT0dDT0RFICovCi0jaWZkZWYgS1JCNV9VMlUKLSAgICBpZiAodHRucHJvdG8gPT0gTlBfSzVV MlUpCi0gICAgICBjb3VudCArPSBrcmI1X3UydV9hdmFpbCh0dHlmZCk7Ci0jZW5kaWYgLyogS1JC NV9VMlUgKi8KLSNlbmRpZiAvKiBLUkI1ICovCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLQot ICAgIGRlYnVnKEYxMDEsIm5ldHRjaGsgcmV0dXJucyIsIiIsY291bnQrdHRpYm4pOwotICAgIHJj ID0gY291bnQgKyB0dGlibjsKLQotICBuZXR0Y2hrX3JldHVybjoKLSNpZmRlZiBPUzIKLSAgICBS ZWxlYXNlVENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgIHJldHVybihyYyk7Ci0K LSNlbHNlIC8qIE5vdCBUQ1BJUExJQiAqLwotLyoKLSAgVU5JWCBqdXN0IHVzZXMgdHRjaGsoKSwg aW4gd2hpY2ggdGhlIGlvY3RsKCkgY2FsbHMgb24gdGhlIGZpbGUgZGVzY3JpcHRvcgotICBzZWVt IHRvIHdvcmsgT0suCi0qLwotICAgIHJldHVybih0dGNoaygpKTsKLSNlbmRpZiAvKiBUQ1BJUExJ QiAqLwotLyoKLSAgQnV0IHdoYXQgYWJvdXQgWC4yNT8KLSovCi19Ci0KLSNpZm5kZWYgT1MyCi1W T0lECi1uZXR0b3V0KGkpIGludCBpOyB7ICAgICAgICAgICAgICAgICAgICAgLyogQ2F0Y2ggdGhl IGFsYXJtIGludGVycnVwdHMgKi8KLSAgICBkZWJ1ZyhGMTAwLCJuZXR0b3V0IGNhdWdodCB0aW1l b3V0IiwiIiwwKTsKLSAgICB0dGltb2ZmKCk7Ci0gICAgY2tsb25nam1wKG5qYnVmLCAtMSk7Ci19 Ci0jZW5kaWYgLyogIU9TMiAqLwotCi0jaWZkZWYgVENQSVBMSUIKLQotVk9JRAotI2lmZGVmIENL X0FOU0lDCi1kb25ldGluYyh2b2lkICogdGhyZWFkaW5mbykKLSNlbHNlIC8qIENLX0FOU0lDICov Ci1kb25ldGluYyh0aHJlYWRpbmZvKSBWT0lEICogdGhyZWFkaW5mbzsKLSNlbmRpZiAvKiBDS19B TlNJQyAqLwotLyogZG9uZXRpbmMgKi8gewotI2lmZGVmIE5UU0lHCi0gICAgZXh0ZXJuIGludCBU bHNJbmRleDsKLSAgICBzZXRpbnQoKTsKLSAgICBpZiAodGhyZWFkaW5mbykgeyAgICAgICAgICAg ICAgICAgICAvKiBUaHJlYWQgbG9jYWwgc3RvcmFnZS4uLiAqLwotICAgICAgICBUbHNTZXRWYWx1 ZShUbHNJbmRleCx0aHJlYWRpbmZvKTsKLSAgICB9Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSNpZmRl ZiBDS19MT0dJTgotI2lmZGVmIE5UCi0jaWZkZWYgSUtTRAotICAgIGlmIChpbnNlcnZlcikKLSAg ICAgIHNldG50Y3JlZHMoKTsKLSNlbmRpZiAvKiBJS1NEICovCi0jZW5kaWYgLyogTlQgKi8KLSNl bmRpZiAvKiBDS19MT0dJTiAqLwotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIGlmICh0dGJ1ZnIo KSA8IDApICAgICAgICAgICAgICAgLyogS2VlcCB0cnlpbmcgdG8gcmVmaWxsIGl0LiAqLwotICAg ICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRpbGwgd2UgZ2V0IGFuIGVy cm9yLiAqLwotICAgICAgICBpZiAodHRpYm4gPiAwKSAgICAgICAgICAgICAgICAgIC8qIE9yIHdl IGdldCBhIGNoYXJhY3Rlci4gKi8KLSAgICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0jZW5kaWYg LyogVENQSVBMSUIgKi8KLQotVk9JRAotI2lmZGVmIENLX0FOU0lDCi1mYWlsbmV0aW5jKHZvaWQg KiB0aHJlYWRpbmZvKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLWZhaWxuZXRpbmModGhyZWFkaW5m bykgVk9JRCAqIHRocmVhZGluZm87Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGZhaWxuZXRp bmMgKi8gewotICAgIDsgLyogTm90aGluZyB0byBkbyBvbiBhbiBlcnJvciAqLwotfQotCi0vKiBO IEUgVCBYIEkgTiAtLSBJbnB1dCBibG9jayBvZiBjaGFyYWN0ZXJzIGZyb20gbmV0d29yayAqLwot Ci1pbnQKLW5ldHhpbihuLGJ1ZikgaW50IG47IENIQVIgKiBidWY7IHsKLSAgICBpbnQgbGVuLCBp LCBqOwotI2lmZGVmIFRDUElQTElCCi0gICAgaW50IHJjOwotI2VuZGlmIC8qIFRDUElQTElCICov Ci0KLSAgICBpZiAodHR5ZmQgPT0gLTEpIHsKLSAgICAgICAgZGVidWcoRjEwMCwibmV0eGluIHNv Y2tldCBpcyBjbG9zZWQiLCIiLDApOwotICAgICAgICByZXR1cm4oLTIpOwotICAgIH0KLSNpZmRl ZiBDS19LRVJCRVJPUwotI2lmZGVmIEtSQjQKLSNpZmRlZiBSTE9HQ09ERQotICAgIGlmICh0dG5w cm90byA9PSBOUF9FSzRMT0dJTikgewotICAgICAgICBpZiAoKGxlbiA9IGtyYjRfZGVzX3JlYWQo dHR5ZmQsYnVmLG4pKSA8IDApCi0gICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgZWxzZQot ICAgICAgICAgIHJldHVybihsZW4pOwotICAgIH0KLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotI2Vu ZGlmIC8qIEtSQjQgKi8KLSNpZmRlZiBLUkI1Ci0jaWZkZWYgUkxPR0NPREUKLSAgICBpZiAodHRu cHJvdG8gPT0gTlBfRUs1TE9HSU4pIHsKLSAgICAgICAgaWYgKChsZW4gPSBrcmI1X2Rlc19yZWFk KHR0eWZkLChjaGFyICopYnVmLG4sMCkpIDwgMCkKLSAgICAgICAgICByZXR1cm4oLTEpOwotICAg ICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuKGxlbik7Ci0gICAgfQotI2VuZGlmIC8qIFJMT0dD T0RFICovCi0jaWZkZWYgS1JCNV9VMlUKLSAgICBpZiAodHRucHJvdG8gPT0gTlBfSzVVMlUpIHsK LSAgICAgICAgaWYgKChsZW4gPSBrcmI1X3UydV9yZWFkKHR0eWZkLChjaGFyICopYnVmLG4pKSA8 IDApCi0gICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHJldHVy bihsZW4pOwotICAgIH0KLSNlbmRpZiAvKiBLUkI1X1UyVSAqLwotI2VuZGlmIC8qIEtSQjUgKi8K LSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotCi0jaWZkZWYgVENQSVBMSUIKLSNpZmRlZiBPUzIK LSAgICBSZXF1ZXN0VENQSVBNdXRleChTRU1fSU5ERUZJTklURV9XQUlUKTsKLSNlbmRpZiAvKiBP UzIgKi8KLSAgICBpZiAodHRpYm4gPT0gMCkKLSAgICAgIGlmICgocmMgPSB0dGJ1ZnIoKSkgPD0g MCkgewotI2lmZGVmIE9TMgotICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOwotI2VuZGlmIC8q IE9TMiAqLwotICAgICAgICByZXR1cm4ocmMpOwotICAgICAgfQotCi0gICAgaWYgKHR0aWJuIDw9 IG4pIHsKLSAgICAgICAgbGVuID0gdHRpYm47Ci0gICAgICAgIG1lbWNweShidWYsJnR0aWJ1Zlt0 dGlicF0sbGVuKTsgICAgICAgICAvKiBzYWZlICovCi0gICAgICAgIHR0aWJwICs9IGxlbjsKLSAg ICAgICAgdHRpYm4gPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1lbWNweShidWYsJnR0aWJ1 Zlt0dGlicF0sbik7ICAgICAgICAgICAvKiBzYWZlICovCi0gICAgICAgIHR0aWJwICs9IG47Ci0g ICAgICAgIHR0aWJuIC09IG47Ci0gICAgICAgIGxlbiA9IG47Ci0gICAgfQotI2lmZGVmIE9TMgot ICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7Ci0jZW5kaWYgLyogT1MyICovCi0jZWxzZSAvKiBUQ1BJ UExJQiAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgaWYgKChqID0g bmV0aW5jKDApKSA8IDApIHsKLSAgICAgICAgICAgIGlmIChqIDwgLTEpCi0gICAgICAgICAgICAg IHJldHVybihqKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgIH0KLSAgICAgICAgYnVmW2ldID0gajsKLSAgICB9Ci0gICAgbGVuID0gaTsKLSNlbmRpZiAv KiBUQ1BJUExJQiAqLwotCi0jaWZkZWYgQ09NTUVOVAotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAg ICAvKiBUaGlzIHdvdWxkIGJlIGdyZWF0IGlmIGl0IHdvcmtlZC4gIEJ1dCB3aGF0IGlmIHRoZSBi dWZmZXIgd2UgcmVhZCAgKi8KLSAgICAvKiBjb250YWlucyBhIHRlbG5ldCBuZWdvdGlhdGlvbiB0 aGF0IGNoYW5nZXMgdGhlIHN0YXRlIG9mIHRoZSAgICAgICAgKi8KLSAgICAvKiBlbmNyeXB0aW9u LiAgSWYgc28sIHdlIHdvdWxkIGJlIGVpdGhlciBkZWNyeXB0aW5nIHVuZW5jcnlwdGVkIHRleHQg Ki8KLSAgICAvKiBvciBub3QgZGVjcnlwdGluZyBlbmNyeXB0ZWQgdGV4dC4gIFNvIHdlIG11c3Qg bW92ZSB0aGlzIGNhbGwgdG8gICAgKi8KLSAgICAvKiBhbGwgZnVuY3Rpb25zIHRoYXQgY2FsbCB0 dHhpbigpLiAgSW4gT1MyIHRoYXQgbWVhbnMgb3MyX25ldHhpbigpICAgKi8KLSAgICAvKiB3aGVy ZSB0aGUgVGVsbmV0IE5lZ290aWF0aW9ucyBhcmUgaGFuZGxlZC4gICAgICAgICAgICAgICAgICAg ICAgICAgKi8KLSAgICBpZiAodV9lbmNyeXB0KQotICAgICAgY2tfdG5fZGVjcnlwdChidWYsbGVu KTsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0g ICAgcmV0dXJuKGxlbik7Ci19Ci0KLS8qICBOIEUgVCBJIE4gQyAtLSAgSW5wdXQgY2hhcmFjdGVy IGZyb20gbmV0d29yayAqLwotCi0jaWZkZWYgTkVUTEVCVUYKLSNkZWZpbmUgTEVCVUYKLSNlbmRp ZiAvKiBORVRMRUJVRiAqLwotI2lmZGVmIFRUTEVCVUYKLSNkZWZpbmUgTEVCVUYKLSNlbmRpZiAv KiBUVExFQlVGICovCi0jaWZuZGVmIExFQlVGCi0jaWZkZWYgT1MyCi0jZGVmaW5lIExFQlVGCi0j ZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTEVCVUYgKi8KLQotaW50Ci1uZXRpbmModGltbykg aW50IHRpbW87IHsKLSNpZmRlZiBUQ1BJUExJQgotICAgIGludCB4OyB1bnNpZ25lZCBjaGFyIGM7 ICAgICAgICAgICAgIC8qIFRoZSBsb2NhbHMuICovCi0KLSNpZmRlZiBORVRMRUJVRgotICAgIGlm ICh0dHB1c2ggPj0gMCkgewotICAgICAgICBkZWJ1ZyhGMTExLCJuZXRpbmMiLCJ0dHB1c2giLHR0 cHVzaCk7Ci0gICAgICAgIGMgPSB0dHB1c2g7Ci0gICAgICAgIHR0cHVzaCA9IC0xOwotICAgICAg ICByZXR1cm4oYyk7Ci0gICAgfQotICAgIGlmIChsZV9kYXRhKSB7Ci0gICAgICAgIGlmIChsZV9n ZXRjaGFyKChDSEFSICopJmMpID4gMCkgewotICAgICAgICAgICAgZGVidWcoRjExMSwibmV0aW5j IGxlX2dldGNoYXIiLCJjIixjKTsKLSAgICAgICAgICAgIHJldHVybihjKTsKLSAgICAgICAgfQot ICAgIH0KLSNlbmRpZiAvKiBORVRMRUJVRiAqLwotCi0gICAgaWYgKHR0eWZkID09IC0xKSB7Ci0g ICAgICAgIGRlYnVnKEYxMDAsIm5ldGluYyBzb2NrZXQgaXMgY2xvc2VkIiwiIiwwKTsKLSAgICAg ICAgcmV0dXJuKC0yKTsKLSAgICB9Ci0KLSNpZmRlZiBDS19LRVJCRVJPUwotI2lmZGVmIEtSQjQK LSNpZmRlZiBSTE9HQ09ERQotICAgIGlmICh0dG5wcm90byA9PSBOUF9FSzRMT0dJTikgewotICAg ICAgICBpZiAoKHggPSBrcmI0X2Rlc19yZWFkKHR0eWZkLCZjLDEpKSA9PSAwKQotICAgICAgICAg IHJldHVybigtMSk7Ci0gICAgICAgIGVsc2UgaWYgKHggPCAwKQotICAgICAgICAgIHJldHVybigt Mik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4oYyk7Ci0gICAgfQotI2VuZGlmIC8q IFJMT0dDT0RFICovCi0jZW5kaWYgLyogS1JCNCAqLwotI2lmZGVmIEtSQjUKLSNpZmRlZiBSTE9H Q09ERQotICAgIGlmICh0dG5wcm90byA9PSBOUF9FSzVMT0dJTikgewotICAgICAgICBpZiAoKHgg PSBrcmI1X2Rlc19yZWFkKHR0eWZkLCZjLDEsMCkpID09IDApCi0gICAgICAgICAgcmV0dXJuKC0x KTsKLSAgICAgICAgZWxzZSBpZiAoeCA8IDApCi0gICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAg ICAgZWxzZQotICAgICAgICAgIHJldHVybihjKTsKLSAgICB9Ci0jZW5kaWYgLyogUkxPR0NPREUg Ki8KLSNpZmRlZiBLUkI1X1UyVQotICAgIGlmICh0dG5wcm90byA9PSBOUF9LNVUyVSkgewotICAg ICAgICBpZiAoKHggPSBrcmI1X3UydV9yZWFkKHR0eWZkLCZjLDEpKSA9PSAwKQotICAgICAgICAg IHJldHVybigtMSk7Ci0gICAgICAgIGVsc2UgaWYgKHggPCAwKQotICAgICAgICAgIHJldHVybigt Mik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4oYyk7Ci0gICAgfQotI2VuZGlmIC8q IEtSQjVfVTJVICovCi0jZW5kaWYgLyogS1JCNSAqLwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICov Ci0KLSNpZmRlZiBPUzIKLSAgICBSZXF1ZXN0VENQSVBNdXRleChTRU1fSU5ERUZJTklURV9XQUlU KTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICBpZiAodHRpYm4gPiAwKSB7ICAgICAgICAgICAgICAg ICAgICAvKiBTb21ldGhpbmcgaW4gaW50ZXJuYWwgYnVmZmVyPyAqLwotI2lmZGVmIENPTU1FTlQK LSAgICAgICAgZGVidWcoRjEwMCwibmV0aW5jIGNoYXIgaW4gYnVmIiwiIiwwKTsgLyogWWVzLiAq LwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgeCA9IDA7ICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBTdWNjZXNzLiAqLwotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEVsc2UgbXVzdCByZWFkIGZyb20gbmV0d29yay4gKi8KLSAgICAgICAgeCA9IC0x OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBc3N1bWUgZmFpbHVyZS4gKi8KLSNpZmRlZiBE RUJVRwotICAgICAgICBkZWJ1ZyhGMTAxLCJuZXRpbmMgZ29lcyB0byBuZXQsIHRpbW8iLCIiLHRp bW8pOwotI2VuZGlmIC8qIERFQlVHICovCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAgIC8qCi0gICAg ICAgICAqIEluIHRoZSBjYXNlIG9mIE9wZW5TU0wsIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlcmUg aXMgc3RpbGwKLSAgICAgICAgICogZGF0YSB3YWl0aW5nIGluIHRoZSBTU0wgc2Vzc2lvbiBidWZm ZXJzIHRoYXQgaGFzIG5vdCB5ZXQKLSAgICAgICAgICogYmVlbiByZWFkIGJ5IEtlcm1pdC4gIElm IHRoaXMgaXMgdGhlIGNhc2Ugd2UgbXVzdCBwcm9jZXNzCi0gICAgICAgICAqIGl0IHdpdGhvdXQg Y2FsbGluZyBzZWxlY3QoKSBiZWNhdXNlIHNlbGVjdCgpIHdpbGwgbm90IHJldHVybgotICAgICAg ICAgKiB3aXRoIGFuIGluZGljYXRpb24gdGhhdCB0aGVyZSBpcyBkYXRhIHRvIGJlIHJlYWQgZnJv bSB0aGUKLSAgICAgICAgICogc29ja2V0LiAgSWYgdGhlcmUgaXMgbm8gZGF0YSBwZW5kaW5nIGlu IHRoZSBTU0wgc2Vzc2lvbgotICAgICAgICAgKiBidWZmZXJzIHRoZW4gZmFsbCB0aHJvdWdoIHRv IHRoZSBzZWxlY3QoKSBjb2RlIGFuZCB3YWl0IGZvcgotICAgICAgICAgKiBzb21lIGRhdGEgdG8g YXJyaXZlLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKHNzbF9hY3RpdmVfZmxhZykgewotICAg ICAgICAgICAgeCA9IFNTTF9wZW5kaW5nKHNzbF9jb24pOwotICAgICAgICAgICAgaWYgKHggPCAw KSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwibmV0aW5jIiwiU1NMX3BlbmRpbmcgZXJy b3IiLHgpOwotICAgICAgICAgICAgICAgIG5ldGNsb3MoKTsKLSNpZmRlZiBPUzIKLSAgICAgICAg ICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAg ICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCB4ID4gMCApIHsKLSAg ICAgICAgICAgICAgICBpZiAoIHR0YnVmcigpID49IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAg IHggPSBuZXRpbmModGltbyk7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgICAgIFJlbGVh c2VUQ1BJUE11dGV4KCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAgICAgIHJl dHVybih4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB4 ID0gLTE7Ci0gICAgICAgIH0gZWxzZSBpZiAodGxzX2FjdGl2ZV9mbGFnKSB7Ci0gICAgICAgICAg ICB4ID0gU1NMX3BlbmRpbmcodGxzX2Nvbik7Ci0gICAgICAgICAgICBpZiAoeCA8IDApIHsKLSAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJuZXRpbmMiLCJUTFNfcGVuZGluZyBlcnJvciIseCk7 Ci0gICAgICAgICAgICAgICAgbmV0Y2xvcygpOwotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAg IFJlbGVhc2VUQ1BJUE11dGV4KCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAg cmV0dXJuKC0xKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIHggPiAwICkgewotICAgICAgICAg ICAgICAgIGlmICggdHRidWZyKCkgPj0gMCApIHsKLSAgICAgICAgICAgICAgICAgICAgeCA9IG5l dGluYyh0aW1vKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAgICAgUmVsZWFzZVRDUElQ TXV0ZXgoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHgp OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHggPSAtMTsK LSAgICAgICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotI2lmbmRlZiBMRUJVRgotICAgICAgICBp ZiAodGltbyA9PSAwKSB7ICAgICAgICAgICAgICAgIC8qIFVudGltZWQgY2FzZS4gKi8KLSAgICAg ICAgICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAgICAgICAvKiBXYWl0IGZvcmV2ZXIgaWYgbmVj ZXNzYXJ5LiAqLwotICAgICAgICAgICAgICAgIGlmICh0dGJ1ZnIoKSA8IDApICAgICAgIC8qIFJl ZmlsbCBidWZmZXIuICovCi0gICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAg LyogRXJyb3IsIGZhaWwuICovCi0gICAgICAgICAgICAgICAgaWYgKHR0aWJuID4gMCkgeyAgICAg ICAgLyogU3VjY2Vzcy4gKi8KLSAgICAgICAgICAgICAgICAgICAgeCA9IDA7Ci0gICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg ICAgfSBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaW1lZCBjYXNlLi4uICovCi0j ZW5kaWYgLyogTEVCVUYgKi8KLSAgICAgICAgICB7Ci0jaWZkZWYgTlRfVENQX09WRVJMQVBQRUQK LSAgICAgICAgICAgIC8qIFRoaXMgY29kZSBpcyBmb3IgdXNlIG9uIE5UIHdoZW4gd2UgYXJlIHVz aW5nICovCi0gICAgICAgICAgICAvKiBPdmVybGFwcGVkIEkvTyB0byBoYW5kbGUgcmVhZHMuICBJ biB0aGUgY2FzZSAqLwotICAgICAgICAgICAgLyogb2Ygb3V0c3RhbmRpbmcgcmVhZHMgc2VsZWN0 KCkgZG9lc24ndCB3b3JrICAgKi8KLQotICAgICAgICAgICAgaWYgKFdhaXRGb3JPdmVybGFwcGVk UmVhZERhdGEodGltbykpIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAg ICAgICAgICAgICBpZiAodHRidWZyKCkgPCAwKSAgIC8qIEtlZXAgdHJ5aW5nIHRvIHJlZmlsbCBp dC4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBUaWxsIHdl IGdldCBhbiBlcnJvci4gKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHR0aWJuID4gMCkgeyAg ICAvKiBPciB3ZSBnZXQgYSBjaGFyYWN0ZXIuICovCi0gICAgICAgICAgICAgICAgICAgICAgICB4 ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotI2Vsc2UgLyogTlRfVENQX09W RVJMQVBQRUQgKi8KLSNpZmRlZiBCU0RTRUxFQ1QKLSAgICAgICAgICAgIGZkX3NldCByZmRzOwot ICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgdHY7Ci0gICAgICAgICAgICBpbnQgdGltZW91dCA9 IHRpbW8gPCAwID8gLXRpbW8gOiAxMDAwICogdGltbzsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEs Im5ldGluYyBCU0RTRUxFQ1QiLCIiLHRpbW8pOwotCi0gICAgICAgICAgICBmb3IgKCA7IHRpbWVv dXQgPj0gMDsgdGltZW91dCAtPSAodGltbyA/IDEwMCA6IDApKSB7Ci0gICAgICAgICAgICAgICAg aW50IHJjOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsIm5ldGluYyIsInRpbWVvdXQiLHRp bWVvdXQpOwotICAgICAgICAgICAgICAgIC8qIERvbid0IG1vdmUgc2VsZWN0KCkgaW5pdGlhbGl6 YXRpb24gb3V0IG9mIHRoZSBsb29wLiAqLwotICAgICAgICAgICAgICAgIEZEX1pFUk8oJnJmZHMp OwotICAgICAgICAgICAgICAgIEZEX1NFVCh0dHlmZCwgJnJmZHMpOwotICAgICAgICAgICAgICAg IHR2LnR2X3NlYyAgPSB0di50dl91c2VjID0gMEw7Ci0gICAgICAgICAgICAgICAgaWYgKHRpbW8p Ci0gICAgICAgICAgICAgICAgICB0di50dl91c2VjID0gKGxvbmcpIDEwMDAwMEw7Ci0gICAgICAg ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgdHYudHZfc2VjID0gMzA7Ci0jaWZkZWYg TlQKLSAgICAgICAgICAgICAgICBXU0FTYWZlVG9DYW5jZWwgPSAxOwotI2VuZGlmIC8qIE5UICov Ci0gICAgICAgICAgICAgICAgcmMgPSBzZWxlY3QoRkRfU0VUU0laRSwKLSNpZmRlZiBfX0RFQ0MK LSNpZmRlZiBJTlRTRUxFQ1QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50ICopCi0j ZWxzZSAvKiBkZWYgSU5UU0VMRUNUICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZk X3NldCAqKQotI2VuZGlmIC8qIGRlZiBJTlRTRUxFQ1QgW2Vsc2VdICovCi0jZWxzZSAvKiBkZWYg X19ERUNDICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZkX3NldCAqKQotI2VuZGlm IC8qIGRlZiBfX0RFQ0MgW2Vsc2VdICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJm ZHMsIE5VTEwsIE5VTEwsICZ0dik7Ci0gICAgICAgICAgICAgICAgaWYgKHJjIDwgMCkgewotICAg ICAgICAgICAgICAgICAgICBpbnQgc19lcnJubyA9IHNvY2tldF9lcnJubzsKLSAgICAgICAgICAg ICAgICAgICAgZGVidWcoRjExMSwibmV0aW5jIiwic2VsZWN0IixyYyk7Ci0gICAgICAgICAgICAg ICAgICAgIGRlYnVnKEYxMTEsIm5ldGluYyIsInNvY2tldF9lcnJubyIsc19lcnJubyk7Ci0gICAg ICAgICAgICAgICAgICAgIGlmIChzX2Vycm5vKSB7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAg ICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJuZXRpbmMiLCJzZWxl Y3QiLHJjKTsKLSNpZmRlZiBOVAotICAgICAgICAgICAgICAgIFdTQVNhZmVUb0NhbmNlbCA9IDA7 Ci0jZW5kaWYgLyogTlQgKi8KLSAgICAgICAgICAgICAgICBpZiAoIUZEX0lTU0VUKHR0eWZkLCAm cmZkcykpIHsKLSNpZmRlZiBMRUJVRgotICAgICAgICAgICAgICAgICAgICBpZiAobGVfaW5idWYo KSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSAtMTsKLSAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyog TEVCVUYgKi8KLSAgICAgICAgICAgICAgICAgICAgLyogSWYgd2FpdGluZyBmb3JldmVyIHdlIGhh dmUgbm8gd2F5IG9mIGtub3dpbmcgaWYgdGhlICovCi0gICAgICAgICAgICAgICAgICAgIC8qIHNv Y2tldCBjbG9zZWQgc28gdHJ5IHdyaXRpbmcgYSAwLWxlbmd0aCBUQ1AgcGFja2V0ICAqLwotICAg ICAgICAgICAgICAgICAgICAvKiB3aGljaCBzaG91bGQgZm9yY2UgYW4gZXJyb3IgaWYgdGhlIHNv Y2tldCBpcyBjbG9zZWQgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKCF0aW1vKSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICBpZiAoKHJjID0gc29ja2V0X3dyaXRlKHR0eWZkLCIiLDApKSA8 IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc19lcnJubyA9IHNvY2tldF9l cnJubzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXRpbmMgc29j a2V0X3dyaXRlIGVycm9yIiwiIixzX2Vycm5vKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiAob3Myc29ja2V0ZXJyb3Ioc19lcnJubykgPCAwKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKLSNl bmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOyAv KiBDYWxsIGl0IGFuIGkvbyBlcnJvciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgICAg ICAgICBpZiAodHRidWZyKCkgPCAwKSB7IC8qIEtlZXAgdHJ5aW5nIHRvIHJlZmlsbCBpdC4gKi8K LSAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSAtMTsKLSAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBUaWxsIHdlIGdldCBhbiBlcnJvci4gKi8KLSAgICAg ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAodHRpYm4gPiAwKSB7ICAg IC8qIE9yIHdlIGdldCBhIGNoYXJhY3Rlci4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHgg PSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IC0xOwotICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICB9Ci0jaWZkZWYgTlQKLSAgICAgICAgICAgIFdTQVNhZmVUb0NhbmNl bCA9IDA7Ci0jZW5kaWYgLyogTlQgKi8KLSNlbHNlIC8qICFCU0RTRUxFQ1QgKi8KLSNpZmRlZiBJ Qk1TRUxFQ1QKLS8qCi0gIFdhcyB1c2VkIGJ5IE9TLzIsIGN1cnJlbnRseSBub3QgdXNlZCwgYnV0 IG1pZ2h0IGNvbWUgaW4gaGFuZHkgc29tZSBkYXkuLi4KLSAgLi4uIGFuZCBpdCBjYW1lIGluIGhh bmR5ISAgRm9yIG91ciBUQ1AvSVAgbGF5ZXIsIGl0IGF2b2lkcyBhbGwgdGhlIGZkX3NldAotICBh bmQgdGltZXZhbCBzdHVmZiBzaW5jZSB0aGlzIGlzIHRoZSBvbmx5IHBsYWNlIHdoZXJlIGl0IGlz IHVzZWQuCi0qLwotICAgICAgICAgICAgaW50IHNvY2tldCA9IHR0eWZkOwotICAgICAgICAgICAg aW50IHRpbWVvdXQgPSB0aW1vIDwgMCA/IC10aW1vIDogMTAwMCAqIHRpbW87Ci0KLSAgICAgICAg ICAgIGRlYnVnKEYxMDEsIm5ldGluYyBJQk1TRUxFQ1QiLCIiLHRpbW8pOwotICAgICAgICAgICAg Zm9yICggOyB0aW1lb3V0ID49IDA7IHRpbWVvdXQgLT0gKHRpbW8gPyAxMDAgOiAwKSkgewotICAg ICAgICAgICAgICAgIGlmIChzZWxlY3QoJnNvY2tldCwgMSwgMCwgMCwgMTAwTCkgPT0gMSkgewot ICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgICAgICAgICAgICAg aWYgKHR0YnVmcigpIDwgMCkgeyAvKiBLZWVwIHRyeWluZyB0byByZWZpbGwgaXQuICovCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IC0xOwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOyAgICAgIC8qIFRpbGwgd2UgZ2V0IGFuIGVycm9yLiAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR0aWJuID4g MCkgeyAvKiBPciB3ZSBnZXQgYSBjaGFyYWN0ZXIuICovCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgeCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IC0xOwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotI2lmZGVmIExF QlVGCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAobGVfaW5idWYoKSA+IDApICB7Ci0gICAgICAg ICAgICAgICAgICAgIHRpbWVvdXQgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIExFQlVGICovCi0gICAgICAgICAgICB9Ci0jZWxz ZSAvKiAhSUJNU0VMRUNUICovCi0jaWZkZWYgV0lOU09DSwotICAgICAgIC8qIEFjdHVhbGx5LCB1 bmRlciBXaW5Tb2NrIHdlIGhhdmUgYSBiZXR0ZXIgbWVjaGFuaXNtIHRoYW4gc2VsZWN0KCkgKi8K LSAgICAgICAvKiBmb3Igc2V0dGluZyB0aW1lb3V0cyAoU09fUkNWVElNRU8sIFNPX1NORFRJTUVP KSAqLwotICAgICAgICAgICAgU09DS0VUIHNvY2tldCA9IHR0eWZkOwotICAgICAgICAgICAgZGVi dWcoRjEwMSwibmV0aW5jIE5UU0VMRUNUIiwiIix0aW1vKTsKLSAgICAgICAgICAgIGlmIChzZXRz b2Nrb3B0KHNvY2tldCwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIChjaGFyICopJnRpbW8sCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRpbW8pKSAgPT0gTk9fRVJST1IpCi0g ICAgICAgICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICAgICAgICBpZiAodHRidWZyKCkg PCAwKSAgICAgLyogS2VlcCB0cnlpbmcgdG8gcmVmaWxsIGl0LiAqLwotICAgICAgICAgICAgICAg ICAgICBicmVhazsgICAgICAgICAgICAgIC8qIFRpbGwgd2UgZ2V0IGFuIGVycm9yLiAqLwotICAg ICAgICAgICAgICAgICAgaWYgKHR0aWJuID4gMCkgeyAgICAgIC8qIE9yIHdlIGdldCBhIGNoYXJh Y3Rlci4gKi8KLSAgICAgICAgICAgICAgICAgICAgICB4ID0gMDsKLSAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotI2Vsc2Ug LyogV0lOU09DSyAqLwotLyoKLSAgSWYgd2UgY2FuJ3QgdXNlIHNlbGVjdCgpLCB0aGVuIHdlIHVz ZSB0aGUgcmVndWxhciBhbGFybSgpL3NpZ25hbCgpCi0gIHRpbWVvdXQgbWVjaGFuaXNtLgotKi8K LSAgICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldGluYyBhbGFybSIsIiIsdGltbyk7Ci0gICAgICAg ICAgICB4ID0gYWxybV9leGVjdXRlKGNramFkZHIobmpidWYpLHRpbW8sbmV0dG91dCxkb25ldGlu YyxmYWlsbmV0aW5jKTsKLSAgICAgICAgICAgIHR0aW1vZmYoKTsgICAgICAgICAgICAgICAgICAv KiBUaW1lciBvZmYuICovCi0jZW5kaWYgLyogV0lOU09DSyAqLwotI2VuZGlmIC8qIElCTVNFTEVD VCAqLwotI2VuZGlmIC8qIEJTRFNFTEVDVCAqLwotI2VuZGlmIC8qIE5UX1RDUF9PVkVSTEFQUEVE ICovCi0gICAgICAgIH0KLSAgICB9Ci0KLSNpZmRlZiBMRUJVRgotICAgIGlmIChsZV9pbmJ1Zigp ID4gMCkgeyAgICAgICAgICAgICAgIC8qIElmIGRhdGEgd2FzIGluc2VydGVkIGludG8gdGhlICov Ci0gICAgICAgIGlmIChsZV9nZXRjaGFyKChDSEFSICopJmMpID4gMCkgey8qIExvY2FsIEVjaG8g YnVmZmVyIHdoaWxlIHRoZSAgICovCi0jaWZkZWYgT1MyICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIHdhcyB0YWtpbmcgcGxhY2UgZG8gbm90IG1peCAgICovCi0gICAgICAgICAgUmVs ZWFzZVRDUElQTXV0ZXgoKTsgICAgICAgICAgIC8qIHRoZSBsZSBkYXRhIHdpdGggdGhlIG5ldCBk YXRhICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgcmV0dXJuKGMpOwotICAgICAgICB9 Ci0gICAgfQotI2VuZGlmIC8qIExFQlVGICovCi0gICAgaWYgKHggPCAwKSB7ICAgICAgICAgICAg ICAgICAgICAgICAgLyogUmV0dXJuIC0xIGlmIHdlIGZhaWxlZC4gKi8KLSAgICAgICAgZGVidWco RjEwMCwibmV0aW5jIHRpbWVkIG91dCIsIiIsMCk7Ci0jaWZkZWYgT1MyCi0gICAgICAgIFJlbGVh c2VUQ1BJUE11dGV4KCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgIHJldHVybigtMSk7Ci0g ICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlICovCi0g ICAgICAgIGMgPSB0dGlidWZbdHRpYnBdOyAgICAgICAgICAgICAgLyogUmV0dXJuIHRoZSBmaXJz dCBjaGFyIGluIHR0aWJ1ZltdICovCi0gICAgICAgIGlmIChkZWJsb2cpIHsKLSNpZm5kZWYgQ09N TUVOVAotICAgICAgICAgICAgZGVidWcoRjEwMSwibmV0aW5jIHJldHVybmluZyIsIiIsYyk7Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgaWYgKGMgPT0gMCkgewotICAgICAgICAg ICAgICAgIGRlYnVnKEYxMDEsIm5ldGluYyAwIHR0aWJuIiwiIix0dGlibik7Ci0gICAgICAgICAg ICAgICAgZGVidWcoRjEwMSwibmV0aW5jIDAgdHRpYnAiLCIiLHR0aWJwKTsKLSNpZmRlZiBCRVRB REVCVUcKLSAgICAgICAgICAgICAgICB7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgICAg IGV4dGVybiBpbnQgdHRfdHlwZV9tb2RlOwotICAgICAgICAgICAgICAgICAgICBpZiAoICFJU1ZU TlQodHRfdHlwZV9tb2RlKSApCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAgICAg IGNraGV4ZHVtcCgibmV0aW5jICZ0dGJ1Zlt0dGlicF0iLCZ0dGlidWZbdHRpYnBdLHR0aWJuKTsK LSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQkVUQURFQlVHICovCi0gICAgICAgICAgICB9 Ci0gICAgICAgIH0KLSAgICAgICAgdHRpYnArKzsKLSAgICAgICAgdHRpYm4tLTsKLSNpZmRlZiBP UzIKLSAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSNpZmRl ZiBDS19FTkNSWVBUSU9OCi0gICAgICAgIGlmIChURUxPUFRfVShURUxPUFRfRU5DUllQVElPTikp Ci0gICAgICAgICAgY2tfdG5fZGVjcnlwdCgmYywxKTsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9O ICovCi0gICAgICAgIHJldHVybihjKTsKLSAgICB9Ci0jZWxzZSAvKiBOb3QgdXNpbmcgVENQSVBM SUIgKi8KLSAgICByZXR1cm4oLTEpOwotI2VuZGlmIC8qIFRDUElQTElCICovCi19Ci0KLS8qICBO IEUgVCBUIE8gTCAgLS0gIE91dHB1dCBhIHN0cmluZyBvZiBieXRlcyB0byB0aGUgbmV0d29yayAg Ki8KLS8qCi0gIENhbGwgd2l0aCBzID0gcG9pbnRlciB0byBzdHJpbmcsIG4gPSBsZW5ndGguCi0g IFJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4gb24gc3VjY2Vzcywgb3IK LSAgLTEgb24gaS9vIGVycm9yLCAtMiBpZiBjYWxsZWQgaW1wcm9wZXJseS4KLSovCi0KLWludAot bmV0dG9sKHMsbikgQ0hBUiAqczsgaW50IG47IHsKLSNpZmRlZiBUQ1BJUExJQgotICAgIGludCBj b3VudCA9IDA7Ci0gICAgaW50IGxlbiA9IG47Ci0gICAgaW50IHRyeSA9IDA7Ci0KLSAgICBpZiAo dHR5ZmQgPT0gLTEpIHsKLSAgICAgICAgZGVidWcoRjEwMCwibmV0dG9sIHNvY2tldCBpcyBjbG9z ZWQiLCIiLDApOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsIm5l dHRvbCBUQ1BJUExJQiB0dG5ldCIsIiIsdHRuZXQpOwotI2lmZGVmIENPTU1FTlQKLSAgICBja2hl eGR1bXAoIm5ldHRvbCIscyxuKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSNpZmRlZiBDS19L RVJCRVJPUwotI2lmZGVmIEtSQjQKLSNpZmRlZiBSTE9HQ09ERQotICAgIGlmICh0dG5wcm90byA9 PSBOUF9FSzRMT0dJTikgewotICAgICAgICByZXR1cm4oa3JiNF9kZXNfd3JpdGUodHR5ZmQscyxu KSk7Ci0gICAgfQotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0jZW5kaWYgLyogS1JCNCAqLwotI2lm ZGVmIEtSQjUKLSNpZmRlZiBSTE9HQ09ERQotICAgIGlmICh0dG5wcm90byA9PSBOUF9FSzVMT0dJ TikgewotICAgICAgICByZXR1cm4oa3JiNV9kZXNfd3JpdGUodHR5ZmQscyxuLDApKTsKLSAgICB9 Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNpZmRlZiBLUkI1X1UyVQotICAgIGlmICh0dG5wcm90 byA9PSBOUF9LNVUyVSkgewotICAgICAgICByZXR1cm4oa3JiNV91MnVfd3JpdGUodHR5ZmQscyxu KSk7Ci0gICAgfQotI2VuZGlmIC8qIEtSQjVfVTJVICovCi0jZW5kaWYgLyogS1JCNSAqLwotI2Vu ZGlmIC8qIENLX0tFUkJFUk9TICovCi0KLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgaWYgKFRF TE9QVF9NRShURUxPUFRfRU5DUllQVElPTikpCi0gICAgICBja190bl9lbmNyeXB0KHMsbik7Ci0j ZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotCi0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKHNzbF9h Y3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpIHsKLSAgICAgICAgaW50IGVycm9yLCByOwot ICAgICAgICAvKiBXcml0ZSB1c2luZyBTU0wgKi8KLSAgICAgIHNzbF9yZXRyeToKLSAgICAgICAg aWYgKHNzbF9hY3RpdmVfZmxhZykKLSAgICAgICAgICByID0gU1NMX3dyaXRlKHNzbF9jb24sIHMs IGxlbiAvKiA+MTAyND8xMDI0OmxlbiAqLyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByID0g U1NMX3dyaXRlKHRsc19jb24sIHMsIGxlbiAvKiA+MTAyND8xMDI0OmxlbiAqLyk7Ci0gICAgICAg IHN3aXRjaCAoU1NMX2dldF9lcnJvcihzc2xfYWN0aXZlX2ZsYWc/c3NsX2Nvbjp0bHNfY29uLHIp KSB7Ci0gICAgICAgICAgY2FzZSBTU0xfRVJST1JfTk9ORToKLSAgICAgICAgICAgIGRlYnVnKEYx MTEsIm5ldHRvbCIsIlNTTF93cml0ZSIscik7Ci0gICAgICAgICAgICBpZiAoIHIgPT0gbGVuICkK LSAgICAgICAgICAgICAgICByZXR1cm4obik7Ci0gICAgICAgICAgICAgcyArPSByOwotICAgICAg ICAgICAgIGxlbiAtPSByOwotICAgICAgICAgICAgIGdvdG8gc3NsX3JldHJ5OwotICAgICAgICAg IGNhc2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJuZXR0 b2wgU1NMX0VSUk9SX1dBTlRfV1JJVEUiLCIiLDApOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsK LSAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6Ci0gICAgICAgICAgICBkZWJ1ZyhG MTAwLCJuZXR0b2wgU1NMX0VSUk9SX1dBTlRfUkVBRCIsIiIsMCk7Ci0gICAgICAgICAgICByZXR1 cm4oLTEpOwotICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1NZU0NBTEw6Ci0gICAgICAgICAgICAg IGlmICggciA9PSAwICkgeyAvKiBFT0YgKi8KLSAgICAgICAgICAgICAgICAgIG5ldGNsb3MoKTsK LSAgICAgICAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgICAgICAgIH0gZWxzZSB7Ci0g ICAgICAgICAgICAgICAgICBpbnQgcmMgPSAtMTsKLSNpZmRlZiBOVAotICAgICAgICAgICAgICAg ICAgaW50IGdsZSA9IEdldExhc3RFcnJvcigpOwotICAgICAgICAgICAgICAgICAgZGVidWcoRjEx MSwibmV0dG9sIFNTTF9FUlJPUl9TWVNDQUxMIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAi R2V0TGFzdEVycm9yKCkiLGdsZSk7Ci0gICAgICAgICAgICAgICAgICByYyA9IG9zMnNvY2tldGVy cm9yKGdsZSk7Ci0gICAgICAgICAgICAgICAgICBpZiAocmMgPT0gLTEpCi0gICAgICAgICAgICAg ICAgICAgICAgcmMgPSAtMjsKLSAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCByYyA9PSAtMiAp Ci0gICAgICAgICAgICAgICAgICAgICAgcmMgPSAtMTsKLSNlbmRpZiAvKiBOVCAqLwotICAgICAg ICAgICAgICAgICAgcmV0dXJuKHJjKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgIGNhc2Ug U1NMX0VSUk9SX1dBTlRfWDUwOV9MT09LVVA6Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJuZXR0 b2wgU1NMX0VSUk9SX1dBTlRfWDUwOV9MT09LVVAiLCIiLDApOwotICAgICAgICAgICAgbmV0Y2xv cygpOwotICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9T U0w6Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJuZXR0b2wgU1NMX0VSUk9SX1NTTCIsIiIsMCk7 Ci0gICAgICAgICAgICAgIGlmIChiaW9fZXJyIT1OVUxMKSB7Ci0gICAgICAgICAgICAgICAgICBp bnQgbGVuOwotICAgICAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIgc3NsX2VycltdOwotICAgICAg ICAgICAgICAgICAgQklPX3ByaW50ZihiaW9fZXJyLCJuZXR0b2woKSBTU0xfRVJST1JfU1NMXG4i KTsKLSAgICAgICAgICAgICAgICAgIEVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7Ci0gICAgICAg ICAgICAgICAgICBsZW4gPSBCSU9fcmVhZChiaW9fZXJyLHNzbF9lcnIsU1NMX0VSUl9CRlNaKTsK LSAgICAgICAgICAgICAgICAgIHNzbF9lcnJbbGVuIDwgU1NMX0VSUl9CRlNaID8gbGVuIDogU1NM X0VSUl9CRlNaXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJuZXR0b2wg U1NMX0VSUk9SX1NTTCIsc3NsX2VyciwwKTsKLSAgICAgICAgICAgICAgICAgIGlmIChzc2xfZGVi dWdfZmxhZykKLSAgICAgICAgICAgICAgICAgICAgICBwcmludGYoc3NsX2Vycik7Ci0gICAgICAg ICAgICAgIH0gZWxzZSBpZiAoc3NsX2RlYnVnX2ZsYWcpIHsKLSAgICAgICAgICAgICAgICAgIGRl YnVnKEYxMDAsIm5ldHRvbCBTU0xfRVJST1JfU1NMIiwiIiwwKTsKLSAgICAgICAgICAgICAgICAg IGZmbHVzaChzdGRlcnIpOwotICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIm5ldHRv bCgpIFNTTF9FUlJPUl9TU0xcbiIpOwotICAgICAgICAgICAgICAgICAgRVJSX3ByaW50X2Vycm9y c19mcChzdGRlcnIpOwotICAgICAgICAgICAgICB9Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAg ICAgICBuZXRjbG9zKCk7Ci0gICAgICAgICAgICAgIHJldHVybigtMik7Ci0jZWxzZQotICAgICAg ICAgICAgICByZXR1cm4oLTEpOwotI2VuZGlmCi0gICAgICAgICAgY2FzZSBTU0xfRVJST1JfWkVS T19SRVRVUk46Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJuZXR0b2wgU1NMX0VSUk9SX1pFUk9f UkVUVVJOIiwiIiwwKTsKLSAgICAgICAgICAgIG5ldGNsb3MoKTsKLSAgICAgICAgICAgIHJldHVy bigtMik7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsIm5ldHRv bCBTU0xfRVJST1JfPz8/Pz8iLCIiLDApOwotICAgICAgICAgICAgbmV0Y2xvcygpOwotICAgICAg ICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8K LQotICBuZXR0b2xfcmV0cnk6Ci0gICAgdHJ5Kys7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogSW5jcmVhc2UgdGhlIHRyeSBjb3VudGVyICovCi0KLSAgICBpZiAodHRuZXQgPT0gTkVU X1RDUEIpIHsKLSNpZmRlZiBCU0RTRUxFQ1QKLSAgICAgICAgZmRfc2V0IHdmZHM7Ci0gICAgICAg IHN0cnVjdCB0aW1ldmFsIHR2OwotCi0gICAgICAgIGRlYnVnKEYxMDEsIm5ldHRvbCBCU0RTRUxF Q1QiLCIiLDApOwotICAgICAgICB0di50dl91c2VjID0gMEw7Ci0gICAgICAgIHR2LnR2X3NlYz0z MDsKLSNpZmRlZiBOVAotICAgICAgICBXU0FTYWZlVG9DYW5jZWwgPSAxOwotI2VuZGlmIC8qIE5U ICovCi0jaWZkZWYgU1RSRUFNSU5HCi0gICAgICBkb19zZWxlY3Q6Ci0jZW5kaWYgLyogU1RSRUFN SU5HICovCi0gICAgICAgIEZEX1pFUk8oJndmZHMpOwotICAgICAgICBGRF9TRVQodHR5ZmQsICZ3 ZmRzKTsKLSAgICAgICAgaWYgKHNlbGVjdChGRF9TRVRTSVpFLCBOVUxMLAotI2lmZGVmIF9fREVD QwotI2lmbmRlZiBfX0RFQ0NfVkVSCi0gICAgICAgICAgICAgICAgICAgIChpbnQgKikKLSNlbmRp ZiAvKiBfX0RFQ0NfVkVSICovCi0jZW5kaWYgLyogX19ERUNDICovCi0gICAgICAgICAgICAgICAg ICAgJndmZHMsIE5VTEwsICZ0dikgPCAwKSB7Ci0gICAgICAgICAgICBpbnQgc19lcnJubyA9IHNv Y2tldF9lcnJubzsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldHRvbCBzZWxlY3QgZmFpbGVk IiwiIixzX2Vycm5vKTsKLSNpZmRlZiBCRVRBREVCVUcKLSAgICAgICAgICAgIHByaW50ZigibmV0 dG9sIHNlbGVjdCBmYWlsZWQ6ICVkXG4iLCBzX2Vycm5vKTsKLSNlbmRpZiAvKiBCRVRBREVCVUcg Ki8KLSNpZmRlZiBOVAotICAgICAgICAgICAgV1NBU2FmZVRvQ2FuY2VsID0gMDsKLSAgICAgICAg ICAgIGlmICghd2luOTVzZWxlY3RidWcpCi0jZW5kaWYgLyogTlQgKi8KLSAgICAgICAgICAgICAg cmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIUZEX0lTU0VUKHR0eWZkLCAmd2Zk cykpIHsKLSNpZmRlZiBTVFJFQU1JTkcKLSAgICAgICAgICAgIGlmIChzdHJlYW1pbmcpCi0gICAg ICAgICAgICAgIGdvdG8gZG9fc2VsZWN0OwotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotICAgICAg ICAgICAgZGVidWcoRjExMSwibmV0dG9sIiwiIUZEX0lTU0VUIix0dHlmZCk7Ci0jaWZkZWYgTlQK LSAgICAgICAgICAgIFdTQVNhZmVUb0NhbmNlbCA9IDA7Ci0gICAgICAgICAgICBpZiAoIXdpbjk1 c2VsZWN0YnVnKQotI2VuZGlmIC8qIE5UICovCi0gICAgICAgICAgICAgIHJldHVybigtMSk7Ci0g ICAgICAgIH0KLSNpZmRlZiBOVAotICAgICAgICBXU0FTYWZlVG9DYW5jZWwgPSAwOwotI2VuZGlm IC8qIE5UICovCi0jZWxzZSAvKiBCU0RTRUxFQ1QgKi8KLSNpZmRlZiBJQk1TRUxFQ1QKLSAgICAg ICAgewotICAgICAgICAgICAgaW50IHRyaWVzID0gMDsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEs Im5ldHRvbCBJQk1TRUxFQ1QiLCIiLDApOwotICAgICAgICAgICAgd2hpbGUgKHNlbGVjdCgmdHR5 ZmQsIDAsIDEsIDAsIDEwMDApICE9IDEpIHsKLSAgICAgICAgICAgICAgICBpbnQgY291bnQ7Ci0g ICAgICAgICAgICAgICAgaWYgKHRyaWVzKysgPj0gNjApIHsKLSAgICAgICAgICAgICAgICAgICAg LyogaWYgYWZ0ZXIgNjAgc2Vjb25kcyB3ZSBjYW4ndCBnZXQgcGVybWlzc2lvbiB0byB3cml0ZSAq LwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXR0b2wgc2VsZWN0IGZhaWxlZCIs IiIsc29ja2V0X2Vycm5vKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKChjb3VudCA9IG5ldHRjaGsoKSkgPCAw KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsIm5ldHRvbCIsIm5ldHRjaGsoKSIs Y291bnQpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4oY291bnQpOwotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIElCTVNFTEVDVCAqLwot I2VuZGlmIC8qIEJTRFNFTEVDVCAqLwotICAgICAgICBpZiAoKGNvdW50ID0gc29ja2V0X3dyaXRl KHR0eWZkLHMsbikpIDwgMCkgewotICAgICAgICAgICAgaW50IHNfZXJybm8gPSBzb2NrZXRfZXJy bm87IC8qIG1heWJlIGEgZnVuY3Rpb24gKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldHRv bCBzb2NrZXRfd3JpdGUgZXJyb3IiLCIiLHNfZXJybm8pOwotI2lmZGVmIE9TMgotICAgICAgICAg ICAgaWYgKG9zMnNvY2tldGVycm9yKHNfZXJybm8pIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJu KC0yKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgIHJldHVybigtMSk7ICAgICAgICAg ICAgICAgICAvKiBDYWxsIGl0IGFuIGkvbyBlcnJvciAqLwotICAgICAgICB9Ci0gICAgICAgIGlm IChjb3VudCA8IG4pIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsIm5ldHRvbCBzb2NrZXRfd3Jp dGUiLHMsY291bnQpOwotICAgICAgICAgICAgaWYgKHRyeSA+IDI1KSB7Ci0gICAgICAgICAgICAg ICAgLyogZG9uJ3QgdHJ5IG1vcmUgdGhhbiAyNSB0aW1lcyAqLwotICAgICAgICAgICAgICAgIGRl YnVnKEYxMDAsIm5ldHRvbCB0cmllZCBtb3JlIHRoYW4gMjUgdGltZXMiLCIiLDApOwotICAgICAg ICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY291 bnQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgcyArPSBjb3VudDsKLSAgICAgICAgICAgICAgICBu IC09IGNvdW50OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVidWcoRjExMSwibmV0dG9s IHJldHJ5IixzLG4pOwotICAgICAgICAgICAgZ290byBuZXR0b2xfcmV0cnk7Ci0gICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJuZXR0b2wgc29ja2V0X3dyaXRlIixzLGNv dW50KTsKLSAgICAgICAgICAgIHJldHVybihsZW4pOyAvKiBzdWNjZXNzIC0gcmV0dXJuIHRvdGFs IGxlbmd0aCAqLwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICByZXR1cm4oLTIpOwotI2Vs c2UKLSAgICBkZWJ1ZyhGMTAwLCJuZXR0b2wgVENQSVBMSUIgbm90IGRlZmluZWQiLCIiLDApOwot ICAgIHJldHVybigtMik7Ci0jZW5kaWYgLyogVENQSVBMSUIgKi8KLX0KLQotLyogIE4gRSBUIFQg TyBDICAtLSAgIE91dHB1dCBjaGFyYWN0ZXIgdG8gbmV0d29yayAqLwotLyoKLSAgQ2FsbCB3aXRo IGNoYXJhY3RlciB0byBiZSB0cmFuc21pdHRlZC4KLSAgUmV0dXJucyAwIGlmIHRyYW5zbWlzc2lv biB3YXMgc3VjY2Vzc2Z1bCwgb3IKLSAgLTEgdXBvbiBpL28gZXJyb3IsIG9yIC0yIGlmIGNhbGxl ZCBpbXByb3Blcmx5LgotKi8KLWludAotI2lmZGVmIENLX0FOU0lDCi1uZXR0b2MoQ0hBUiBjKQot I2Vsc2UKLW5ldHRvYyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIG5ldHRv YyAqLyB7Ci0jaWZkZWYgVU5JWAotICAgIHJldHVybih0dG9jKGMpKTsKLSNlbHNlCi0jaWZkZWYg VENQSVBMSUIKLSAgICB1bnNpZ25lZCBjaGFyIGNjOwotICAgIGlmICh0dHlmZCA9PSAtMSkgewot ICAgICAgICBkZWJ1ZyhGMTAwLCJuZXR0b2Mgc29ja2V0IGlzIGNsb3NlZCIsIiIsMCk7Ci0gICAg ICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgY2MgPSBjOwotICAgIGRlYnVnKEYxMDEsIm5ldHRv YyBjYyIsIiIsY2MpOwotCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSNpZmRlZiBLUkI0Ci0jaWZkZWYg UkxPR0NPREUKLSAgICBpZiAodHRucHJvdG8gPT0gTlBfRUs0TE9HSU4pIHsKLSAgICAgICAgcmV0 dXJuKGtyYjRfZGVzX3dyaXRlKHR0eWZkLCZjYywxKT09MT8wOi0xKTsKLSAgICB9Ci0jZW5kaWYg LyogUkxPR0NPREUgKi8KLSNlbmRpZiAvKiBLUkI0ICovCi0jaWZkZWYgS1JCNQotI2lmZGVmIFJM T0dDT0RFCi0gICAgaWYgKHR0bnByb3RvID09IE5QX0VLNUxPR0lOKSB7Ci0gICAgICAgIHJldHVy bihrcmI1X2Rlc193cml0ZSh0dHlmZCwmY2MsMSwwKT09MT8wOi0xKTsKLSAgICB9Ci0jZW5kaWYg LyogUkxPR0NPREUgKi8KLSNpZmRlZiBLUkI1X1UyVQotICAgIGlmICh0dG5wcm90byA9PSBOUF9L NVUyVSkgewotICAgICAgICByZXR1cm4oa3JiNV91MnVfd3JpdGUodHR5ZmQsJmNjLDEpPT0xPzA6 LTEpOwotICAgIH0KLSNlbmRpZiAvKiBLUkI1X1UyVSAqLwotI2VuZGlmIC8qIEtSQjUgKi8KLSNl bmRpZiAvKiBDS19LRVJCRVJPUyAqLwotCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICBp ZiAoIFRFTE9QVF9NRShURUxPUFRfRU5DUllQVElPTikgKQotICAgICAgICAgICAgY2tfdG5fZW5j cnlwdCgmY2MsMSk7Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotI2lmZGVmIENLX1NTTAot ICAgIGlmIChzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSB7Ci0gICAgICAgIGlu dCBsZW4sIGVycm9yOwotICAgICAgICAvKiBXcml0ZSB1c2luZyBTU0wgKi8KLSAgICAgIHNzbF9y ZXRyeToKLSAgICAgICAgaWYgKHNzbF9hY3RpdmVfZmxhZykKLSAgICAgICAgICBsZW4gPSBTU0xf d3JpdGUoc3NsX2NvbiwgJmNjLCAxKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGxlbiA9IFNT TF93cml0ZSh0bHNfY29uLCAmY2MsIDEpOwotICAgICAgICBzd2l0Y2ggKFNTTF9nZXRfZXJyb3Io c3NsX2FjdGl2ZV9mbGFnP3NzbF9jb246dGxzX2NvbixsZW4pKSB7Ci0gICAgICAgICAgY2FzZSBT U0xfRVJST1JfTk9ORToKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsIm5ldHRvYyIsIlNTTF93cml0 ZSIsbGVuKTsKLSAgICAgICAgICAgIHJldHVybihsZW4gPT0gMSA/IDAgOiAtMSk7Ci0gICAgICAg ICAgY2FzZSBTU0xfRVJST1JfV0FOVF9XUklURToKLSAgCSAgY2FzZSBTU0xfRVJST1JfV0FOVF9S RUFEOgotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9T WVNDQUxMOgotICAgICAgICAgICAgICBpZiAoIGxlbiA9PSAwICkgeyAvKiBFT0YgKi8KLSAgICAg ICAgICAgICAgICAgIG5ldGNsb3MoKTsKLSAgICAgICAgICAgICAgICAgIHJldHVybigtMik7Ci0g ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICBpbnQgcmMgPSAtMTsKLSNp ZmRlZiBOVAotICAgICAgICAgICAgICAgICAgaW50IGdsZSA9IEdldExhc3RFcnJvcigpOwotICAg ICAgICAgICAgICAgICAgZGVidWcoRjExMSwibmV0dG9jIFNTTF9FUlJPUl9TWVNDQUxMIiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAiR2V0TGFzdEVycm9yKCkiLGdsZSk7Ci0gICAgICAgICAg ICAgICAgICByYyA9IG9zMnNvY2tldGVycm9yKGdsZSk7Ci0gICAgICAgICAgICAgICAgICBpZiAo cmMgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgICAgcmMgPSAtMjsKLSAgICAgICAgICAgICAg ICAgIGVsc2UgaWYgKCByYyA9PSAtMiApCi0gICAgICAgICAgICAgICAgICAgICAgcmMgPSAtMTsK LSNlbmRpZiAvKiBOVCAqLwotICAgICAgICAgICAgICAgICAgcmV0dXJuKHJjKTsKLSAgICAgICAg ICAgICAgfQotICAgICAgICBjYXNlIFNTTF9FUlJPUl9TU0w6Ci0gICAgICAgICAgICAgIGlmIChi aW9fZXJyIT1OVUxMKSB7Ci0gICAgICAgICAgICAgICAgICBpbnQgbGVuOwotICAgICAgICAgICAg ICAgICAgZXh0ZXJuIGNoYXIgc3NsX2VycltdOwotICAgICAgICAgICAgICAgICAgQklPX3ByaW50 ZihiaW9fZXJyLCJuZXR0b2MoKSBTU0xfRVJST1JfU1NMXG4iKTsKLSAgICAgICAgICAgICAgICAg IEVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7Ci0gICAgICAgICAgICAgICAgICBsZW4gPSBCSU9f cmVhZChiaW9fZXJyLHNzbF9lcnIsU1NMX0VSUl9CRlNaKTsKLSAgICAgICAgICAgICAgICAgIHNz bF9lcnJbbGVuIDwgU1NMX0VSUl9CRlNaID8gbGVuIDogU1NMX0VSUl9CRlNaXSA9ICdcMCc7Ci0g ICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJuZXR0b2MgU1NMX0VSUk9SX1NTTCIsc3NsX2Vy ciwwKTsKLSAgICAgICAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKLSAgICAgICAgICAg ICAgICAgICAgICBwcmludGYoc3NsX2Vycik7Ci0gICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3Ns X2RlYnVnX2ZsYWcpIHsKLSAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsIm5ldHRvYyBTU0xf RVJST1JfU1NMIiwiIiwwKTsKLSAgICAgICAgICAgICAgICAgIGZmbHVzaChzdGRlcnIpOwotICAg ICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIm5ldHRvYygpIFNTTF9FUlJPUl9TU0xcbiIp OwotICAgICAgICAgICAgICAgICAgRVJSX3ByaW50X2Vycm9yc19mcChzdGRlcnIpOwotICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfWDUwOV9MT09LVVA6Ci0gICAgICAgICAg Y2FzZSBTU0xfRVJST1JfWkVST19SRVRVUk46Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg ICAgIG5ldGNsb3MoKTsKLSAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgIH0KLSAgICB9 Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgaWYgKHR0bmV0ID09IE5FVF9UQ1BCKSB7Ci0jaWZk ZWYgQlNEU0VMRUNUCi0gICAgICAgIGZkX3NldCB3ZmRzOwotICAgICAgICBzdHJ1Y3QgdGltZXZh bCB0djsKLQotICAgICAgICBkZWJ1ZyhGMTAxLCJuZXR0b2MgQlNEU0VMRUNUIiwiIiwwKTsKLSAg ICAgICAgdHYudHZfdXNlYyA9IDBMOwotICAgICAgICB0di50dl9zZWMgPSAzMDsKLQotI2lmZGVm IFNUUkVBTUlORwotICAgICAgZG9fc2VsZWN0OgotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotCi0g ICAgICAgIEZEX1pFUk8oJndmZHMpOwotICAgICAgICBGRF9TRVQodHR5ZmQsICZ3ZmRzKTsKLSAg ICAgICAgaWYgKHNlbGVjdChGRF9TRVRTSVpFLCBOVUxMLAotI2lmZGVmIF9fREVDQwotI2lmbmRl ZiBfX0RFQ0NfVkVSCi0gICAgICAgICAgICAgICAgICAgKGludCAqKQotI2VuZGlmIC8qIF9fREVD Q19WRVIgKi8KLSNlbmRpZiAvKiBfX0RFQ0MgKi8KLSAgICAgICAgICAgICAgICAgICAmd2Zkcywg TlVMTCwgJnR2KSA8IDApIHsKLSAgICAgICAgICAgIGludCBzX2Vycm5vID0gc29ja2V0X2Vycm5v OwotICAgICAgICAgICAgZGVidWcoRjEwMSwibmV0dG9jIHNlbGVjdCBmYWlsZWQiLCIiLHNfZXJy bm8pOwotI2lmZGVmIEJFVEFERUJVRwotICAgICAgICAgICAgcHJpbnRmKCJuZXR0b2Mgc2VsZWN0 IGZhaWxlZDogJWRcbiIsIHNfZXJybm8pOwotI2VuZGlmIC8qIEJFVEFERUJVRyAqLwotI2lmZGVm IE5UCi0gICAgICAgICAgICBXU0FTYWZlVG9DYW5jZWwgPSAwOwotICAgICAgICAgICAgaWYgKCF3 aW45NXNlbGVjdGJ1ZykKLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICAgICAgICByZXR1cm4oLTEp OwotICAgICAgICB9Ci0gICAgICAgIGlmICghRkRfSVNTRVQodHR5ZmQsICZ3ZmRzKSkgewotI2lm ZGVmIFNUUkVBTUlORwotICAgICAgICAgICAgaWYgKHN0cmVhbWluZykKLSAgICAgICAgICAgICAg Z290byBkb19zZWxlY3Q7Ci0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0gICAgICAgICAgICBkZWJ1 ZyhGMTExLCJuZXR0b2MiLCIhRkRfSVNTRVQiLHR0eWZkKTsKLSNpZmRlZiBOVAotICAgICAgICAg ICAgV1NBU2FmZVRvQ2FuY2VsID0gMDsKLSAgICAgICAgICAgIGlmICghd2luOTVzZWxlY3RidWcp Ci0jZW5kaWYgLyogTlQgKi8KLSAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQot I2lmZGVmIE5UCi0gICAgICAgIFdTQVNhZmVUb0NhbmNlbCA9IDA7Ci0jZW5kaWYgLyogTlQgKi8K LSNlbHNlIC8qIEJTRFNFTEVDVCAqLwotI2lmZGVmIElCTVNFTEVDVAotICAgICAgICB7Ci0gICAg ICAgICAgICBpbnQgdHJpZXMgPSAwOwotICAgICAgICAgICAgd2hpbGUgKHNlbGVjdCgmdHR5ZmQs IDAsIDEsIDAsIDEwMDApICE9IDEpIHsKLSAgICAgICAgICAgICAgICBpbnQgY291bnQ7Ci0gICAg ICAgICAgICAgICAgaWYgKHRyaWVzKysgPj0gNjApIHsKLSAgICAgICAgICAgICAgICAgICAgLyog aWYgYWZ0ZXIgNjAgc2Vjb25kcyB3ZSBjYW4ndCBnZXQgcGVybWlzc2lvbiB0byB3cml0ZSAqLwot ICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXR0b2Mgc2VsZWN0IGZhaWxlZCIsIiIs c29ja2V0X2Vycm5vKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKChjb3VudCA9IG5ldHRjaGsoKSkgPCAwKSB7 Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsIm5ldHRvYyIsIm5ldHRjaGsoKSIsY291 bnQpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4oY291bnQpOwotICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIElCTVNFTEVDVCAqLwotI2Vu ZGlmIC8qIEJTRFNFTEVDVCAqLwotICAgICAgICBpZiAoc29ja2V0X3dyaXRlKHR0eWZkLCZjYywx KSA8IDEpIHsKLSAgICAgICAgICAgIGludCBzX2Vycm5vID0gc29ja2V0X2Vycm5vOyAgICAgICAg IC8qIG1heWJlIGEgZnVuY3Rpb24gKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldHRvYyBz b2NrZXRfd3JpdGUgZXJyb3IiLCIiLHNfZXJybm8pOwotI2lmZGVmIE9TMgotICAgICAgICAgICAg aWYgKG9zMnNvY2tldGVycm9yKHNfZXJybm8pIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKC0y KTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0K LSAgICAgICAgZGVidWcoRjEwMSwibmV0dG9jIHNvY2tldF93cml0ZSIsIiIsIGNjKTsKLSAgICAg ICAgcmV0dXJuKDApOwotICAgIH0gZWxzZSByZXR1cm4oLTIpOwotI2Vsc2UKLSAgICByZXR1cm4o LTIpOwotI2VuZGlmIC8qIFRDUElQTElCICovCi0jZW5kaWYgLyogVU5JWCAqLwotfQotCi0vKiAg TiBFIFQgRiBMIFUgSSAgLS0gIEZsdXNoIG5ldHdvcmsgaW5wdXQgYnVmZmVyICAqLwotCi0jaWZk ZWYgVE5DT0RFCi1zdGF0aWMgaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLW5ldGdldGMoaW50IHRpbW8p ICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnB1dCBmdW5jdGlvbiB0byBwb2ludCB0by4uLiAq LwotI2Vsc2UgIC8qIENLX0FOU0lDICovCi1uZXRnZXRjKHRpbW8pIGludCB0aW1vOwotI2VuZGlm IC8qIENLX0FOU0lDICovCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogLi4uaW4gdGhlIHRuX2Rvb3AoKSBjYWxsICovCi0jaWZkZWYgVENQSVBMSUIKLSAgICByZXR1 cm4gbmV0aW5jKHRpbW8pOwotI2Vsc2UgLyogVENQSVBMSUIgKi8KLSAgICByZXR1cm4gdHRpbmMo dGltbyk7Ci0jZW5kaWYgLyogVENQSVBMSUIgKi8KLX0KLSNlbmRpZiAvKiBUTkNPREUgKi8KLQot aW50Ci1uZXRmbHVpKCkgewotICAgIGludCBuOwotICAgIGludCBjaDsKLSNpZmRlZiBORVRMRUJV RgotICAgIHR0cHVzaCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIHRoZSBw ZWVrLWFoZWFkIGNoYXIgKi8KLSAgICB3aGlsZSAobGVfZGF0YSAmJiAobGVfaW5idWYoKSA+IDAp KSB7Ci0gICAgICAgIENIQVIgY2ggPSAnXDAnOwotICAgICAgICBpZiAobGVfZ2V0Y2hhcigmY2gp ID4gMCkgewotICAgICAgICAgICAgZGVidWcoRjEwMSwidHRmbHVpIGxlX2luYnVmIGNoIiwiIixj aCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogTkVUTEVCVUYgKi8KLQotI2lmZGVmIFRD UElQTElCCi0jaWZkZWYgT1MyCi0gICAgUmVxdWVzdFRDUElQTXV0ZXgoU0VNX0lOREVGSU5JVEVf V0FJVCk7Ci0jZW5kaWYgLyogT1MyICovCi0jaWZkZWYgVE5DT0RFCi0gICAgaWYgKHR0bnByb3Rv ID09IE5QX1RFTE5FVCkgewotICAgICAgICAvKiBOZXRmbHVpIG11c3QgcHJvY2VzcyBUZWxuZXQg bmVnb3RpYXRpb25zIG9yIGdldCBvdXQgb2Ygc3luYyAqLwotICAgICAgICBpZiAoKG4gPSBuZXR0 Y2hrKCkpIDw9IDApCi0gICAgICAgICAgZ290byBleGl0X2ZsdWk7Ci0gICAgICAgIHdoaWxlIChu LS0gPiAwKSB7Ci0gICAgICAgICAgICBjaCA9IG5ldGluYygxKTsKLSAgICAgICAgICAgIGlmIChj aCA9PSBJQUMpIHsKLSAgICAgICAgICAgICAgICBleHRlcm4gaW50IGR1cGxleDsgIC8qIHRoaXMg cmVhbGx5IHNob3VsZG4ndCBiZSBoZXJlIGJ1dCAuLi4gKi8KLSAgICAgICAgICAgICAgICBpbnQg dHggPSB0bl9kb29wKChDSEFSKShjaCAmIDB4ZmYpLGR1cGxleCxuZXRnZXRjKTsKLSAgICAgICAg ICAgICAgICBpZiAodHggPT0gMSkgZHVwbGV4ID0gMTsKLSAgICAgICAgICAgICAgICBlbHNlIGlm ICh0eCA9PSAyKSBkdXBsZXggPSAwOwotICAgICAgICAgICAgICAgIG4gPSBuZXR0Y2hrKCk7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSNlbmRpZiAvKiBUTkNPREUgKi8K LSAgICB7Ci0gICAgICAgIHR0aWJ1Zlt0dGlicCt0dGlibl0gPSAnXDAnOwotICAgICAgICBkZWJ1 ZyhGMTExLCJuZXRmbHVpIDEiLHR0aWJ1Zix0dGlibik7Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgot ICAgICAgICBpZiAoVEVMT1BUX1UoVEVMT1BUX0VOQ1JZUFRJT04pKSB7Ci0gICAgICAgICAgICBj a190bl9kZWNyeXB0KCZ0dGlidWZbdHRpYnBdLHR0aWJuKTsKLSAgICAgICAgfQotI2VuZGlmIC8q IENLX0VOQ1JZUFRJT04gKi8KLSAgICAgICAgdHRpYm4gPSB0dGlicCA9IDA7ICAgICAgICAgICAg ICAvKiBGbHVzaCBpbnRlcm5hbCBidWZmZXIgKkZJUlNUKiAqLwotICAgICAgICBpZiAodHR5ZmQg PCAxKQotICAgICAgICAgIGdvdG8gZXhpdF9mbHVpOwotICAgICAgICBpZiAoKG4gPSBuZXR0Y2hr KCkpID4gMCkgeyAgICAgIC8qIE5vdyBzZWUgd2hhdCdzIHdhaXRpbmcgb24gdGhlIG5ldCAqLwot ICAgICAgICAgICAgaWYgKG4gPiBUVElCVUZMKSBuID0gVFRJQlVGTDsgICAgICAgLyogYW5kIHNw b25nZSBpdCB1cCAqLwotICAgICAgICAgICAgZGVidWcoRjEwMSwibmV0Zmx1aSAyIiwiIixuKTsg ICAgICAgLyogLi4uICovCi0gICAgICAgICAgICBuID0gc29ja2V0X3JlYWQodHR5ZmQsdHRpYnVm LG4pOyAvKiBpbnRvIG91ciBidWZmZXIgKi8KLSAgICAgICAgICAgIGlmIChuID49IDApIHR0aWJ1 ZltuXSA9ICdcMCc7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJuZXRmbHVpIDMiLHR0aWJ1Zixu KTsKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAgICAgICBpZiAoVEVMT1BUX1UoVEVMT1BU X0VOQ1JZUFRJT04pKSB7Ci0gICAgICAgICAgICAgICAgY2tfdG5fZGVjcnlwdCgmdHRpYnVmW3R0 aWJwXSxuKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAg ICAgICAgICB0dGlidWZbMF0gPSAnXDAnOwotICAgICAgICB9Ci0gICAgfQotI2Vsc2UgIC8qICFU Q1BJUExJQiAqLwotICAgIGlmICh0dHlmZCA8IDEpCi0gICAgICBnb3RvIGV4aXRfZmx1aTsKLSNp ZmRlZiBUTkNPREUKLSAgICBpZiAodHRucHJvdG8gPT0gTlBfVEVMTkVUKSB7Ci0gICAgICAgIGlm ICgobiA9IHR0Y2hrKCkpIDw9IDApCi0gICAgICAgICAgZ290byBleGl0X2ZsdWk7Ci0gICAgICAg IHdoaWxlIChuLS0gPj0gMCkgewotICAgICAgICAgICAgLyogTmV0Zmx1aSBtdXN0IHByb2Nlc3Mg VGVsbmV0IG5lZ290aWF0aW9ucyBvciBnZXQgb3V0IG9mIHN5bmMgKi8KLSAgICAgICAgICAgIGNo ID0gdHRpbmMoMSk7Ci0gICAgICAgICAgICBpZiAoY2ggPT0gSUFDKSB7Ci0gICAgICAgICAgICAg ICAgZXh0ZXJuIGludCBkdXBsZXg7ICAvKiB0aGlzIHJlYWxseSBzaG91bGRuJ3QgYmUgaGVyZSBi dXQgLi4uICovCi0gICAgICAgICAgICAgICAgaW50IHR4ID0gdG5fZG9vcCgoQ0hBUikoY2ggJiAw eGZmKSxkdXBsZXgsbmV0Z2V0Yyk7Ci0gICAgICAgICAgICAgICAgaWYgKHR4ID09IDEpIGR1cGxl eCA9IDE7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAodHggPT0gMikgZHVwbGV4ID0gMDsKLSAg ICAgICAgICAgICAgICBuID0gdHRjaGsoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAg ICB9IGVsc2UKLSNlbmRpZiAvKiBUTkNPREUgKi8KLSAgICBpZiAoKG4gPSB0dGNoaygpKSA+IDAp IHsKLSAgICAgICAgZGVidWcoRjEwMSwibmV0Zmx1aSBub24tVENQSVBMSUIiLCIiLG4pOwotICAg ICAgICB3aGlsZSAoKG4tLSkgJiYgdHRpbmMoMSkgPiAtMSkgIC8qIERvbid0IHdvcnJ5LCB0dGlu YygpIGlzIGJ1ZmZlcmVkICovCi0gICAgICAgICAgOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogYW5kIGl0IGhhbmRsZXMgdGhlIGRlY3J5cHRpb24uLi4gKi8KLSAgICB9Ci0jZW5kaWYg LyogVENQSVBMSUIgKi8KLSAgZXhpdF9mbHVpOgotI2lmZGVmIE9TMgotICAgIFJlbGVhc2VUQ1BJ UE11dGV4KCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgcmV0dXJuKDApOwotfQotCi0jaWZkZWYg Q0tfS0VSQkVST1MKLS8qIFRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyBhcmUgcmVxdWlyZWQg Zm9yIGVuY3J5cHRlZCBybG9naW4gKi8KLS8qIFRoZXkgYXJlIGNhbGxlZCB3aXRoIG5ldHRvYygp IG9yIG5ldHRvbCgpIGFyZSB0cmFuc21pdHRpbmcgICAgKi8KLS8qIGVuY3J5cHRlZCBkYXRhLiAg VGhleSBjYWxsIGEgZnVuY3Rpb24gdG8gZW5jcnlwdCB0aGUgZGF0YSAgICAgKi8KLS8qIGFuZCB0 aGF0IGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGFibGUgdG8gd3JpdGUgdG8vcmVhZCBmcm9tIHRoZSAg Ki8KLS8qIG5ldHdvcmsgaW4gYW4gdW5pbXBlZGVkIG1hbm5lci4gIEhlbmNlLCB0aGVzZSB0d28g c2ltcGxlIGZucy4gKi8KLWludAotbmV0X3dyaXRlKGZkLCBidWYsIGxlbikKLSAgICBpbnQgZmQ7 Ci0gICAgcmVnaXN0ZXIgY29uc3QgY2hhciAqYnVmOwotICAgIGludCBsZW47Ci17Ci0gICAgaW50 IGNjOwotICAgIHJlZ2lzdGVyIGludCB3cmxlbiA9IGxlbjsKLSAgICBkbyB7Ci0jaWZkZWYgVENQ SVBMSUIKLSAgICAgICAgY2MgPSBzb2NrZXRfd3JpdGUoZmQsIGJ1Ziwgd3JsZW4pOwotI2Vsc2UK LSAgICAgICAgY2MgPSB3cml0ZShmZCxidWYsd3JsZW4pOwotI2VuZGlmIC8qIFRDUElQTElCICov Ci0gICAgICAgIGlmIChjYyA8IDApIHsKLSAgICAgICAgICAgIGludCBzX2Vycm5vID0gc29ja2V0 X2Vycm5vOwotICAgICAgICAgICAgZGVidWcoRjEwMSwibmV0X3dyaXRlIGVycm9yIiwiIixzX2Vy cm5vKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgIGlmIChvczJzb2NrZXRlcnJvcihzX2Vycm5v KSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgIGVsc2UKLSAg ICAgICAgICAgICAgICBjb250aW51ZTsKLSNlbHNlIC8qIE9TMiAqLwotICAgICAgICAgICAgaWYg KGVycm5vID09IEVJTlRSKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg cmV0dXJuKC0xKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgfQotICAgICAgICBlbHNlIHsK LSAgICAgICAgICAgIGJ1ZiArPSBjYzsKLSAgICAgICAgICAgIHdybGVuIC09IGNjOwotICAgICAg ICB9Ci0gICAgfSB3aGlsZSAod3JsZW4gPiAwKTsKLSAgICByZXR1cm4obGVuKTsKLX0KLWludAot bmV0X3JlYWQoZmQsIGJ1ZiwgbGVuKQotICAgIGludCBmZDsKLSAgICByZWdpc3RlciBjaGFyICpi dWY7Ci0gICAgcmVnaXN0ZXIgaW50IGxlbjsKLXsKLSAgICBpbnQgY2MsIGxlbjIgPSAwOwotCi0g ICAgZG8gewotI2lmZGVmIFRDUElQTElCCi0gICAgICAgIGNjID0gc29ja2V0X3JlYWQoZmQsIGJ1 ZiwgbGVuKTsKLSNlbHNlCi0gICAgICAgIGNjID0gcmVhZChmZCxidWYsbGVuKTsKLSNlbmRpZgot ICAgICAgICBpZiAoY2MgPCAwKSB7Ci0gICAgICAgICAgICBpbnQgc19lcnJubyA9IHNvY2tldF9l cnJubzsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldF9yZWFkIGVycm9yIiwiIixzX2Vycm5v KTsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgIGlmIChvczJzb2NrZXRlcnJvcihzX2Vycm5vKSA8 IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAg ICAgICAgIHJldHVybihjYyk7ICAgICAgICAgIC8qIGVycm5vIGlzIGFscmVhZHkgc2V0ICovCi0g ICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoY2MgPT0gMCkgewotICAgICAgICAgICAgbmV0Y2xv cygpOwotICAgICAgICAgICAgcmV0dXJuKGxlbjIpOwotICAgICAgICB9IGVsc2UgewotICAgICAg ICAgICAgYnVmICs9IGNjOwotICAgICAgICAgICAgbGVuMiArPSBjYzsKLSAgICAgICAgICAgIGxl biAtPSBjYzsKLSAgICAgICAgfQotICAgIH0gd2hpbGUgKGxlbiA+IDApOwotICAgIHJldHVybihs ZW4yKTsKLX0KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotI2VuZGlmIC8qIE5PTkVUICovCi0K LS8qIGdldGxvY2FsaXBhZGRyKCkgYXR0ZW1wdHMgdG8gcmVzb2x2ZSBhbiBJUCBBZGRyZXNzIGZv ciB0aGUgbG9jYWwgbWFjaGluZS4KLSAqICAgSWYgdGhlIGhvc3QgaXMgbXVsdGktaG9tZWQgaXQg cmV0dXJucyBvbmx5IG9uZSBhZGRyZXNzLgotICoKLSAqIFR3byB0ZWNobmlxdWVzIGFyZSB1c2Vk LgotICogKDEpIGdldCB0aGUgbG9jYWwgaG9zdCBuYW1lIGFuZCBwZXJmb3JtIGEgRE5TIGxvb2t1 cCwgdGhlbiB0YWtlCi0gKiAgICAgdGhlIGZpcnN0IGVudHJ5OwotICogKDIpIG9wZW4gYSBVRFAg c29ja2V0LCB1c2UgaXQgdG8gY29ubmVjdCB0byBhIGZpY3RpdGlvdXMgaG9zdCAoaXQncyBPSywK LSAqICAgIG5vIGRhdGEgaXMgc2VudCksIHRoZW4gcmV0cmlldmUgdGhlIGxvY2FsIGFkZHJlc3Mg ZnJvbSB0aGUgc29ja2V0LgotICogTm90ZTogdGhlIHNlY29uZCB0ZWNobmlxdWUgd29uJ3Qgd29y ayBvbiBNaWNyb3NvZnQgc3lzdGVtcy4gIFNlZQotICogQXJ0aWNsZSBJRDogUTEyOTA2NSBQUkI6 IEdldHNvY2tuYW1lKCkgUmV0dXJucyBJUCBBZGRyZXNzIDAuMC4wLjAgZm9yIFVEUAotICovCi0K LS8qIFRlY2huaXF1ZSBudW1iZXIgb25lIGNhbm5vdCB3b3JrIHJlbGlhYmx5IGlmIHRoZSBtYWNo aW5lIGlzIGEgbGFwdG9wCi0gKiBhbmQgdGhlIGhvc3RuYW1lIGlzIGFzc29jaWF0ZWQgd2l0aCBh IHBoeXNpY2FsIGFkYXB0ZXIgd2hpY2ggaXMgbm90Ci0gKiBpbnN0YWxsZWQgYW5kIGEgUFBQIGNv bm5lY3Rpb24gaXMgYmVpbmcgdXNlZCBpbnN0ZWFkLiAgVGhpcyBpcyBiZWNhdXNlCi0gKiB0aGUg aG9zdG5hbWUgRE5TIGxvb2t1cCB3aWxsIHN1Y2NlZWQgZm9yIHRoZSBwaHlzaWNhbCBhZGFwdGVy IGV2ZW4gdGhvdWdoCi0gKiBpdCB3b3VsZCBiZSBpbXBvc3NpYmxlIHRvIHVzZSBpdC4gIEluIE5U NCBTUDQsIHRoZSBnZXRob3N0YnluYW1lKCkKLSAqIHdoZW4gZ2l2ZW4gdGhlIHJlc3VsdCBvZiBn ZXRob3N0bmFtZSgpIHJldHVybnMgbm90IHRoZSByZWFsIEROUyBlbnRyaWVzCi0gKiBmb3IgdGhh dCBuYW1lK2RvbWFpbi4gIEluc3RlYWQgaXQgcmV0dXJucyBhbGwgb2YgdGhlIHN0YXRpYyBhbmQg ZHluYW1pYwotICogSVAgYWRkcmVzc2VzIGFzc2lnbmVkIHRvIGFueSBwaHlzaWNhbCBvciB2aXJ0 dWFsIGFkYXB0ZXIgZGVmaW5lZCBpbiB0aGUKLSAqIHN5c3RlbSByZWdhcmRsZXNzIG9mIHdoZXRo ZXIgb3Igbm90IGl0IGlzIGluc3RhbGxlZC4gIFRoZSBvcmRlciBvZiB0aGUKLSAqIGFkZHJlc3Nl cyBpcyBmaXhlZCBhY2NvcmRpbmcgdG8gdGhlIGJpbmRpbmcgb3JkZXIgaW4gdGhlIE5UIHJlZ2lz dHJ5LgotICovCi0KLS8qCi0gKiBJdCBhcHBlYXJzIHRoYXQgY2FsbGluZyBnZXRob3N0YnluYW1l KE5VTEwpIGlzIG1vcmUgcmVsaWFibGUgdGhhbgotICogY2FsbGluZyBnZXRob3N0YnluYW1lKGdl dGhvc3RuYW1lKCkpIG9uIFdpbmRvd3MuICBTbyBvbiBXaW5kb3dzIHdlIHdpbGwKLSAqIG9ubHkg Y2FsbCBnZXRob3N0YnluYW1lKE5VTEwpLgotICovCi0KLWludAotZ2V0bG9jYWxpcGFkZHIoKSB7 Ci0jaWZuZGVmIGRhdGFnZW5lcmFsCi0gICAgc3RydWN0IHNvY2thZGRyX2luIGxfc2E7Ci0gICAg c3RydWN0IHNvY2thZGRyX2luIHJfc2E7Ci0gICAgR1NPQ0tOQU1FX1Qgc2xlbiA9IHNpemVvZihz dHJ1Y3Qgc29ja2FkZHJfaW4pOwotICAgIGludCBzb2NrOwotICAgIGludCByYzsKLSAgICBzdHJ1 Y3QgaW5fYWRkciBsYWRkcjsKLQotICAgIC8qIGlmIHN0aWxsIG5vdCByZXNvbHZlZCwgdGhlbiB0 cnkgc2Vjb25kIHN0cmF0ZWd5ICovCi0gICAgLyogVGhpcyBzZWNvbmQgc3RyYXRlZ3kgZG9lcyBu b3Qgd29yayBvbiBXaW5kb3dzICovCi0KLSAgICBkZWJ1ZyhGMTAwLCJnZXRsb2NhbGlwYWRkciIs IiIsMCk7Ci0gICAgbWVtc2V0KCZsX3NhLDAsc2xlbik7Ci0gICAgbWVtc2V0KCZyX3NhLDAsc2xl bik7Ci0KLSAgICAvKiBnZXQgYSBVRFAgc29ja2V0ICovCi0gICAgc29jayA9IHNvY2tldChBRl9J TkVULCBTT0NLX0RHUkFNLCAwKTsKLSAgICBpZiAoc29jayAhPSAtMSkgewotICAgICAgICAvKiBj b25uZWN0IHRvIGFyYmlyYXJ5IHBvcnQgYW5kIGFkZHJlc3MgKE5PVCBsb29wYmFjaykgKi8KLSAg ICAgICAgcl9zYS5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLSAgICAgICAgcl9zYS5zaW5fcG9ydCA9 IGh0b25zKElQUE9SVF9FQ0hPKTsKLQotICAgICAgICAvKiBUaGUgZm9sbG93aW5nIGlzIGFuICJp bGxlZ2FsIGNvbnZlcnNpb24iIGluIEFPUy9WUyAqLwotICAgICAgICAvKiAoYW5kIHdobyBrbm93 cyB3aGVyZSBlbHNlKSAqLwotCi0jaWZkZWYgSU5BRERSWAotICAgICAgICBpbmFkZHJ4ID0gaW5l dF9hZGRyKCIxMjguMTI3LjUwLjEiKTsKLSAgICAgICAgcl9zYS5zaW5fYWRkci5zX2FkZHIgPSAq KHVuc2lnbmVkIGxvbmcgKikmaW5hZGRyeDsKLSNlbHNlCi0gICAgICAgIHJfc2Euc2luX2FkZHIu c19hZGRyID0gaW5ldF9hZGRyKCIxMjguMTI3LjUwLjEiKTsKLSNlbmRpZiAvKiBJTkFERFJYICov Ci0gICAgICAgIHJjID0gY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopICZyX3NhLCBz aXplb2Yoc3RydWN0IHNvY2thZGRyKSk7Ci0gICAgICAgIGlmICghcmMpIHsgICAgICAgICAgICAg ICAgICAgICAgLyogZ2V0IGxvY2FsIGFkZHJlc3MgKi8KLSAgICAgICAgICAgIGdldHNvY2tuYW1l KHNvY2ssKHN0cnVjdCBzb2NrYWRkciAqKSZsX3NhLCZzbGVuKTsKLSNpZmRlZiBUQ1BJUExJQgot ICAgICAgICAgICAgc29ja2V0X2Nsb3NlKHNvY2spOyAgICAgICAgIC8qIFdlJ3JlIGRvbmUgd2l0 aCB0aGUgc29ja2V0ICovCi0jZWxzZQotICAgICAgICAgICAgY2xvc2Uoc29jayk7Ci0jZW5kaWYg LyogVENQSVBMSUIgKi8KLSAgICAgICAgICAgIGlmIChsX3NhLnNpbl9hZGRyLnNfYWRkciAhPSBJ TkFERFJfQU5ZKSB7Ci0gICAgICAgICAgICAgICAgbXl4aXBhZGRyID0gbnRvaGwobF9zYS5zaW5f YWRkci5zX2FkZHIpOwotICAgICAgICAgICAgICAgIGNrc3RybmNweShteWlwYWRkciwoY2hhciAq KWluZXRfbnRvYShsX3NhLnNpbl9hZGRyKSwyMCk7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEx MCwiZ2V0bG9jYWxpcGFkZHIgc2V0dGluZyBidWYgdG8iLG15aXBhZGRyLDApOwotICAgICAgICAg ICAgICAgIHJldHVybigwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBy ZXR1cm4gZ2V0bG9jYWxpcGFkZHJzKG15aXBhZGRyLHNpemVvZihteWlwYWRkciksMCk7Ci0jZWxz ZSAvKiBkYXRhZ2VuZXJhbCAqLwotICAgIHJldHVybigtMSk7Ci0jZW5kaWYgLyogZGF0YWdlbmVy YWwgKi8KLX0KLQotaW50Ci1nZXRsb2NhbGlwYWRkcnMoYnVmLGJ1ZnN6LGluZGV4KQotICAgIGNo YXIgKiBidWY7Ci0gICAgaW50ICAgIGJ1ZnN6OwotICAgIGludCAgICBpbmRleDsKLS8qIGdldGxv Y2FsaXBhZGRycyAqLyB7Ci0jaWZuZGVmIGRhdGFnZW5lcmFsCi0gICAgY2hhciBsb2NhbGhvc3Rb MjU2XTsKLSAgICBzdHJ1Y3QgaG9zdGVudCAqIGhvc3Q9TlVMTDsKLSAgICBzdHJ1Y3Qgc29ja2Fk ZHJfaW4gbF9zYTsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gcl9zYTsKLSAgICBHU09DS05BTUVf VCBzbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0gICAgaW50IHJjOwotI2lmZGVm IENPTU1FTlQKLSAgICBpbnQgc29jazsKLSAgICBjaGFyIG1lc3NhZ2VCdWZbNjBdOwotICAgIHN0 cnVjdCBpbl9hZGRyIGxhZGRyOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgIGRlYnVnKEYx MDAsImdldGxvY2FsaXBhZGRycyIsIiIsMCk7Ci0gICAgbWVtc2V0KCZsX3NhLDAsc2xlbik7Ci0g ICAgbWVtc2V0KCZyX3NhLDAsc2xlbik7Ci0KLSAgICAvKiBpbml0IGxvY2FsIGFkZHJlc3MgKHRv IHplcm8pICovCi0gICAgbF9zYS5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOwotCi0jaWZk ZWYgQ0tHSE5MSE9TVAotICAgIHJjID0gZ2V0aG9zdG5hbWUobG9jYWxob3N0LCAyNTYpOwotICAg IGRlYnVnKEYxMTAsImdldGxvY2FsaXBhZGRycyBsb2NhbGhvc3QiLGxvY2FsaG9zdCwwKTsKLSNl bHNlCi0gICAgLyogVGhpcyBkb2Vzbid0IHdvcmsgb24gc29tZSBwbGF0Zm9ybXMsIGUuZy4gU29s YXJpcyAqLwotICAgIHJjID0gMDsKLSAgICBsb2NhbGhvc3RbMF0gPSAnXDAnOwotI2lmZGVmIE5U Ci0gICAgaWYgKCB3aW5zb2NrX3ZlcnNpb24gPCAyMCApIHsKLSAgICAgICAgcmMgPSBnZXRob3N0 bmFtZShsb2NhbGhvc3QsIDI1Nik7Ci0gICAgICAgIGRlYnVnKEYxMTAsImdldGxvY2FsaXBhZGRy cyBsb2NhbGhvc3QiLGxvY2FsaG9zdCwwKTsKLSAgICB9Ci0jZW5kaWYgLyogTlQgKi8KLSNlbmRp ZiAvKiBDS0dITkxIT1NUICovCi0gICAgaWYgKCFyYykgewotICAgICAgICAvKiByZXNvbHZlIGhv c3QgbmFtZSBmb3IgbG9jYWwgYWRkcmVzcyAqLwotICAgICAgICBkZWJ1ZyhGMTEwLCJnZXRsb2Nh bGlwYWRkcnMiLCJjYWxsaW5nIGdldGhvc3RieW5hbWUoKSIsMCk7Ci0gICAgICAgIGhvc3QgPSBn ZXRob3N0YnluYW1lKGxvY2FsaG9zdCk7Ci0gICAgICAgIC8qIGRlYnVnKEYxMTEsImdldGxvY2Fs aXBhZGRycyIsImdldGhvc3RieW5hbWUoKSByZXR1cm5lZCIsaG9zdCk7ICovCi0gICAgICAgIGlm IChob3N0KSB7Ci0jaWZkZWYgSEFERFJMSVNUCi0gICAgICAgICAgICBob3N0ID0gY2tfY29weWhv c3RlbnQoaG9zdCk7Ci0gICAgICAgICAgICBpZiAoIGluZGV4IDwgMCB8fCBpbmRleCA+IDYzIHx8 ICFob3N0LT5oX2FkZHJfbGlzdFtpbmRleF0gKSB7Ci0gICAgICAgICAgICAgICAgYnVmWzBdID0g J1wwJzsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgfQotICAgICAg ICAgICAgbF9zYS5zaW5fYWRkci5zX2FkZHIgPQotICAgICAgICAgICAgICAqKCh1bnNpZ25lZCBs b25nICopIChob3N0LT5oX2FkZHJfbGlzdFtpbmRleF0pKTsKLSAgICAgICAgICAgIGNrc3RybmNw eShidWYsKGNoYXIgKilpbmV0X250b2EobF9zYS5zaW5fYWRkciksMjApOwotICAgICAgICAgICAg ZGVidWcoRjExMCwiZ2V0bG9jYWxpcGFkZHJzIHNldHRpbmcgYnVmIHRvIixidWYsMCk7Ci0KLSNp ZmRlZiBDT01NRU5UCi0gICAgICAgICAgICAvKiBUaGlzIGlzIGZvciByZXBvcnRpbmcgbXVsdGlw bGUgSVAgQWRkcmVzcyAqLwotICAgICAgICAgICAgd2hpbGUgKGhvc3QtPmhfYWRkcl9saXN0ICYm IGhvc3QtPmhfYWRkcl9saXN0WzBdKSB7Ci0gICAgICAgICAgICAgICAgbF9zYS5zaW5fYWRkci5z X2FkZHIgPQotICAgICAgICAgICAgICAgICAgKigodW5zaWduZWQgbG9uZyAqKSAoaG9zdC0+aF9h ZGRyX2xpc3RbMF0pKTsKLSAgICAgICAgICAgICAgICBja3N0cm5jcHkobWVzc2FnZUJ1ZiwKLSAg ICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopaW5ldF9udG9hKGxfc2Euc2luX2FkZHIpLDYw KTsKLSAgICAgICAgICAgICAgICBpZiAodGNwX2FkZHJlc3MpIHsKLSAgICAgICAgICAgICAgICAg ICAgaWYgKCFzdHJjbXAobWVzc2FnZUJ1Zix0Y3BfYWRkcmVzcykpCi0gICAgICAgICAgICAgICAg ICAgICAgY2tzdHJuY3B5KG15aXBhZGRyLHRjcF9hZGRyZXNzLDIwKTsKLSAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZ2V0bG9jYWxpcGFkZHJzIGlwIGFkZHJl c3MgbGlzdCIsIG1lc3NhZ2VCdWYsIDApOwotICAgICAgICAgICAgICAgIGhvc3QtPmhfYWRkcl9s aXN0Kys7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2Vsc2UgICAvKiBI QUREUkxJU1QgKi8KLSAgICAgICAgICAgIGlmIChpbmRleCAhPSAwKSB7Ci0gICAgICAgICAgICAg ICAgYnVmWzBdID0gJ1wwJzsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAg ICAgfQotICAgICAgICAgICAgbF9zYS5zaW5fYWRkci5zX2FkZHIgPSAqKCh1bnNpZ25lZCBsb25n ICopIChob3N0LT5oX2FkZHIpKTsKLSAgICAgICAgICAgIGNrc3RybmNweShidWYsKGNoYXIgKilp bmV0X250b2EobF9zYS5zaW5fYWRkciksYnVmc3opOwotICAgICAgICAgICAgZGVidWcoRjExMCwi Z2V0bG9jYWxpcGFkZHJzIHNldHRpbmcgYnVmIHRvIixidWYsMCk7Ci0jZW5kaWYgIC8qIEhBRERS TElTVCAqLwotICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICB9IGVsc2UgZGVidWcoRjEx MCwKLSAgICAgICAgICAgICAgICAgICAgICJnZXRsb2NhbGlwYWRkcnM6IGdldGhvc3RieW5hbWUo KSBmYWlsZWQiLAotICAgICAgICAgICAgICAgICAgICAgbG9jYWxob3N0LAotICAgICAgICAgICAg ICAgICAgICAgMAotICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICB9Ci0jZW5kaWYgLyogZGF0 YWdlbmVyYWwgKi8KLSAgICByZXR1cm4oLTEpOwotfQotCi0jaWZkZWYgUkxPR0NPREUgICAgICAg ICAgICAgICAgIC8qIFRDUC9JUCBSTE9HSU4gcHJvdG9jb2wgc3VwcG9ydCBjb2RlICovCi1pbnQK LXJsb2dfbmF3cygpIHsKLSAgICBzdHJ1Y3QgcmxvZ19uYXdzIHsKLSAgICAgICAgdW5zaWduZWQg Y2hhciBpZFs0XTsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgcm93cywgY29scywgeXBpeCwgeHBp eDsKLSAgICB9IG5hd3NidWY7Ci0KLSAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpCi0gICAgICBy ZXR1cm4gMDsKLSAgICBpZiAodHRucHJvdG8gIT0gTlBfUkxPR0lOCi0jaWZkZWYgQ0tfS0VSQkVS T1MKLSAgICAgICAgJiYgdHRucHJvdG8gIT0gTlBfSzRMT0dJTgotICAgICAgICAmJiB0dG5wcm90 byAhPSBOUF9FSzRMT0dJTgotICAgICAgICAmJiB0dG5wcm90byAhPSBOUF9LNUxPR0lOCi0gICAg ICAgICYmIHR0bnByb3RvICE9IE5QX0VLNUxPR0lOCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8K LSAgICAgICAgICkKLSAgICAgIHJldHVybiAwOwotICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9O QVdTKSkKLSAgICAgIHJldHVybiAwOwotCi0gICAgZGVidWcoRjEwMCwicmxvZ2luIFdpbmRvdyBT aXplIHNlbnQiLCIiLDApOwotCi0gICAgbmF3c2J1Zi5pZFswXSA9IG5hd3NidWYuaWRbMV0gPSAw Mzc3OwotICAgIG5hd3NidWYuaWRbMl0gPSBuYXdzYnVmLmlkWzNdID0gJ3MnOwotI2lmZGVmIE9T MgotICAgIG5hd3NidWYucm93cyA9IGh0b25zKCh1bnNpZ25lZCBzaG9ydCkgKFZzY3JuR2V0SGVp Z2h0KFZURVJNKQotICAgICAgICAgICAgICAgICAgICAgICAgICAtKHR0X3N0YXR1c1tWVEVSTV0/ MTowKSkpOwotICAgIG5hd3NidWYuY29scyA9IGh0b25zKCh1bnNpZ25lZCBzaG9ydCkgVnNjcm5H ZXRXaWR0aChWVEVSTSkpOwotI2Vsc2UgLyogT1MyICovCi0gICAgbmF3c2J1Zi5yb3dzID0gaHRv bnMoKHVuc2lnbmVkIHNob3J0KSB0dF9yb3dzKTsKLSAgICBuYXdzYnVmLmNvbHMgPSBodG9ucygo dW5zaWduZWQgc2hvcnQpIHR0X2NvbHMpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgIG5hd3NidWYu eXBpeCA9IGh0b25zKDApOyAgICAgICAgICAgIC8qIHkgcGl4ZWxzICovCi0KLSAgICBuYXdzYnVm LnhwaXggPSBodG9ucygwKTsgICAgICAgICAgICAvKiB4IHBpeGVscyAqLwotICAgIGlmICh0dG9s KChDSEFSICopKCZuYXdzYnVmKSwgc2l6ZW9mKG5hd3NidWYpKSA8IDApCi0gICAgICByZXR1cm4o LTEpOwotICAgIHJldHVybigwKTsKLX0KLQotI2lmZGVmIE9TMk9SVU5JWAotI2RlZmluZSBSTE9H T1VUQlVGCi0jZW5kaWYgLyogT1MyICovCi1zdGF0aWMgaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXJs b2dfaW5pKENIQVIgKiBob3N0bmFtZSwgaW50IHBvcnQsCi0gICAgICAgICBzdHJ1Y3Qgc29ja2Fk ZHJfaW4gKiBsX2FkZHIsIHN0cnVjdCBzb2NrYWRkcl9pbiAqIHJfYWRkcikKLSNlbHNlIC8qIENL X0FOU0lDICovCi1ybG9nX2luaShob3N0bmFtZSwgcG9ydCwgbF9hZGRyLCByX2FkZHIpCi0gICAg Q0hBUiAqIGhvc3RuYW1lOwotICAgIGludCBwb3J0OwotICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAq IGxfYWRkcjsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKiByX2FkZHI7Ci0jZW5kaWYgLyogQ0tf QU5TSUMgKi8KLS8qIHJsb2dfaW5pICovIHsKLQotI2lmZGVmIFJMT0dPVVRCVUYKLSAgICBjaGFy IG91dGJ1Zls1MTJdOwotICAgIGludCAgb3V0Ynl0ZXM9MDsKLSNlbmRpZiAvKiBSTE9HT1VUQlVG ICovCi0gICAgaW50IGZsYWcgPSAwOwotI2RlZmluZSBURVJNTEVOIDE2Ci0jZGVmaW5lIENPTlNQ RExFTiAxNgotICAgIENIQVIgbG9jYWx1c2VyW1VJREJVRkxFTisxXTsKLSAgICBDSEFSIHJlbW90 ZXVzZXJbVUlEQlVGTEVOKzFdOwotICAgIGludCB1c2VybGVuID0gMDsKLSAgICBDSEFSIHRlcm1f c3BlZWRbVEVSTUxFTitDT05TUERMRU4rMV07Ci0jaWZkZWYgQ09OR1NQRAotICAgIGxvbmcgY29u c3BkID0gLTFMOwotI2VuZGlmIC8qIENPTkdTUEQgKi8KLSNpZmRlZiBPUzIKLSAgICBleHRlcm4g aW50IHR0X3R5cGUsIG1heF90dDsKLSAgICBleHRlcm4gc3RydWN0IHR0X2luZm9fcmVjIHR0X2lu Zm9bXTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICBpbnQgaSwgbjsKLQotICAgIGludCByYyA9IDA7 Ci0gICAgdG5fcmVzZXQoKTsgICAgICAgICAgICAgICAgIC8qIFRoaXMgY2FsbCB3aWxsIHJlc2V0 IGFsbCBvZiB0aGUgVGVsbmV0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IG9wdGlvbnMgYW5kIHRoZW4gcXVpdC4gIFdlIG5lZWQgdG8gZG8gICovCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIHRoaXMgc2luY2Ugd2UgdXNlIHRoZSBUZWxuZXQgb3B0aW9u cyAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRvIGhvbGQgdmFyaW91 cyBzdGF0ZSBpbmZvcm1hdGlvbiAgICAgICovCi0gICAgZHVwbGV4ID0gMDsgICAgICAgICAgICAg ICAgIC8qIFJsb2dpbiBpcyBhbHdheXMgcmVtb3RlIGVjaG8gKi8KLSAgICBybG9nX2luYmFuZCA9 IDA7Ci0KLSNpZmRlZiBDS19UVEdXU0laCi0vKgotICBCdXQgY29tcHV0ZSB0aGUgdmFsdWVzIGFu eXdheSBiZWZvcmUgdGhlIGZpcnN0IHJlYWQgc2luY2UgdGhlIG91dC0KLSAgb2YtYmFuZCBOQVdT IHJlcXVlc3Qgd291bGQgYXJyaXZlIGJlZm9yZSB0aGUgZmlyc3QgZGF0YSBieXRlIChOVUxMKS4K LSovCi0jaWZkZWYgT1MyCi0gICAgLyogQ29uc29sZSB0ZXJtaW5hbCBzY3JlZW4gcm93cyBhbmQg Y29sdW1ucyAqLwotICAgIGRlYnVnKEYxMDEsInJsb2dfaW5pIHR0X3Jvd3MgMSIsIiIsVnNjcm5H ZXRIZWlnaHQoVlRFUk0pCi0gICAgICAgICAgIC0odHRfc3RhdHVzW1ZURVJNXT8xOjApKTsKLSAg ICBkZWJ1ZyhGMTAxLCJybG9nX2luaSB0dF9jb2xzIDEiLCIiLFZzY3JuR2V0V2lkdGgoVlRFUk0p KTsKLSAgICAvKiBOb3Qga25vd24geWV0ICovCi0gICAgaWYgKFZzY3JuR2V0V2lkdGgoVlRFUk0p IDwgMCB8fAotICAgICAgICBWc2NybkdldEhlaWdodChWVEVSTSktKHR0X3N0YXR1c1tWVEVSTV0/ MTowKSA8IDApIHsKLSAgICAgICAgdHRnd3NpeigpOyAgICAgICAgICAgICAgICAgICAgICAvKiBU cnkgdG8gZ2V0IHNjcmVlbiBkaW1lbnNpb25zICovCi0gICAgfQotICAgIGRlYnVnKEYxMDEsCi0g ICAgICAgICAgInJsb2dfaW5pIHR0X3Jvd3MgMiIsCi0gICAgICAgICAgIiIsCi0gICAgICAgICAg VnNjcm5HZXRIZWlnaHQoVlRFUk0pLSh0dF9zdGF0dXNbVlRFUk1dPzE6MCkKLSAgICAgICAgICAp OwotICAgIGRlYnVnKEYxMDEsInJsb2dfaW5pIHR0X2NvbHMgMiIsIiIsVnNjcm5HZXRXaWR0aChW VEVSTSkpOwotI2Vsc2UgLyogT1MyICovCi0gICAgZGVidWcoRjEwMSwicmxvZ19pbmkgdHRfcm93 cyAxIiwiIix0dF9yb3dzKTsKLSAgICBkZWJ1ZyhGMTAxLCJybG9nX2luaSB0dF9jb2xzIDEiLCIi LHR0X2NvbHMpOwotICAgIGlmICh0dF9yb3dzIDwgMCB8fCB0dF9jb2xzIDwgMCkgeyAgIC8qIE5v dCBrbm93biB5ZXQgKi8KLSAgICAgICAgdHRnd3NpeigpOyAgICAgICAgICAgICAgICAgICAgICAv KiBUcnkgdG8gZmluZCBvdXQgKi8KLSAgICB9Ci0gICAgZGVidWcoRjEwMSwicmxvZ19pbmkgdHRf cm93cyAyIiwiIix0dF9yb3dzKTsKLSAgICBkZWJ1ZyhGMTAxLCJybG9nX2luaSB0dF9jb2xzIDIi LCIiLHR0X2NvbHMpOwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIENLX1RUR1dTSVogKi8K LQotICAgIHR0Zmx1aSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IGJ5IGZs dXNoaW5nIHRoZSBidWZmZXJzICovCi0KLSAgICBybG9nX21vZGUgPSBSTF9DT09LRUQ7Ci0KLSAg ICAvKiBEZXRlcm1pbmUgdGhlIHVzZXIncyBsb2NhbCB1c2VybmFtZSAuLi4gKi8KLQotICAgIGxv Y2FsdXNlclswXSA9ICdcMCc7Ci0jaWZkZWYgTlQKLSAgICB7Ci0gICAgICAgIGNoYXIgbG9jYWx1 aWRbVUlEQlVGTEVOKzFdOwotICAgICAgICBja3N0cm5jcHkoKGNoYXIgKilsb2NhbHVzZXIsKGNo YXIgKilHZXRMb2NhbFVzZXIoKSxVSURCVUZMRU4pOwotICAgIH0KLQotICAgIGlmICggIWxvY2Fs dXNlclswXSApCi0jZW5kaWYgLyogTlQgKi8KLSAgICB7Ci0gICAgICAgIGNoYXIgKiB1c2VyID0g Z2V0ZW52KCJVU0VSIik7Ci0gICAgICAgIGlmICghdXNlcikKLSAgICAgICAgICB1c2VyID0gIiI7 Ci0gICAgICAgIHVzZXJsZW4gPSBzdHJsZW4odXNlcik7Ci0gICAgICAgIGRlYnVnKEYxMTEsInJs b2dpbiBnZXRlbnYoVVNFUikiLHVzZXIsdXNlcmxlbik7Ci0gICAgICAgIGNrc3RybmNweSgoY2hh ciAqKWxvY2FsdXNlcix1c2VyLFVJREJVRkxFTik7Ci0gICAgICAgIGRlYnVnKEYxMTAsInJsb2df aW5pIGxvY2FsdXNlciAxIixsb2NhbHVzZXIsMCk7Ci0gICAgfQotICAgIGlmICggIWxvY2FsdXNl clswXSApCi0gICAgICAgIHN0cmNweSgoY2hhciAqKWxvY2FsdXNlciwidW5rbm93biIpOwotICAg IGVsc2UgaWYgKGNrX2xjbmFtZSkgewotICAgICAgICBja2xvd2VyKChjaGFyICopbG9jYWx1c2Vy KTsKLSAgICAgICAgZGVidWcoRjExMCwicmxvZ19pbmkgbG9jYWx1c2VyIDIiLGxvY2FsdXNlciww KTsKLSAgICB9Ci0KLSAgICAvKiBBbmQgdGhlIHVzZXJuYW1lIHRvIGxvZ2luIHdpdGggKi8KLSAg ICBpZiAodWlkYnVmWzBdKSB7Ci0gICAgICAgIGNrc3RybmNweSgoY2hhciAqKXJlbW90ZXVzZXIs dWlkYnVmLFVJREJVRkxFTik7Ci0gICAgICAgIGRlYnVnKEYxMTAsInJsb2dfaW5pIHJlbW90ZXVz ZXIgMSIscmVtb3RldXNlciwwKTsKLSAgICB9IGVsc2UgaWYgKGxvY2FsdXNlclswXSkgewotICAg ICAgICBja3N0cm5jcHkoKGNoYXIgKilyZW1vdGV1c2VyLChjaGFyICopbG9jYWx1c2VyLFVJREJV RkxFTik7Ci0gICAgICAgIGRlYnVnKEYxMTAsInJsb2dfaW5pIHJlbW90ZXVzZXIgMiIscmVtb3Rl dXNlciwwKTsKLSAgICB9IGVsc2UgewotICAgICAgICByZW1vdGV1c2VyWzBdID0gJ1wwJzsKLSAg ICAgICAgZGVidWcoRjExMCwicmxvZ19pbmkgcmVtb3RldXNlciAzIixyZW1vdGV1c2VyLDApOwot ICAgIH0KLSAgICBpZiAoY2tfbGNuYW1lKQotICAgICAgY2tsb3dlcigoY2hhciAqKXJlbW90ZXVz ZXIpOwotICAgIGRlYnVnKEYxMTAsInJsb2dfaW5pIHJlbW90ZXVzZXIgNCIscmVtb3RldXNlciww KTsKLQotICAgIC8qIFRoZSBjb21tYW5kIHRvIGlzc3VlIGlzIHRoZSB0ZXJtaW5hbCB0eXBlIGFu ZCBzcGVlZCAqLwotICAgIHRlcm1fc3BlZWRbMF0gPSAnXDAnOwotICAgIGlmICh0bl90ZXJtKSB7 ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBURUxORVQgVEVSTUlOQUwtVFlQRSB2YWx1ZSAq LwotICAgICAgICBpZiAoKnRuX3Rlcm0pIHsgICAgICAgICAgICAgICAgIC8qIChpZiBhbnkpIHRh a2VzIHByZWNlZGVuY2UuICovCi0gICAgICAgICAgICBja3N0cm5jcHkoKGNoYXIgKil0ZXJtX3Nw ZWVkLCB0bl90ZXJtLCBURVJNTEVOKTsKLSAgICAgICAgICAgIGZsYWcgPSAxOwotICAgICAgICB9 Ci0gICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlIHRo ZSBsb2NhbCB0ZXJtaW5hbCB0eXBlICovCi0jaWZkZWYgT1MyCi0gICAgICAgIC8qIEluIHRlcm1p bmFsLWVtdWxhdGluZyB2ZXJzaW9ucywgaXQncyB0aGUgU0VUIFRFUk0gVFlQRSB2YWx1ZSAqLwot ICAgICAgICBja3N0cm5jcHkodGVybV9zcGVlZCwgKHR0X3R5cGUgPj0gMCAmJiB0dF90eXBlIDw9 IG1heF90dCkgPwotICAgICAgICAgICAgICAgIHR0X2luZm9bdHRfdHlwZV0ueF9uYW1lIDogIm5l dHdvcmsiLCBURVJNTEVOKTsKLSNlbHNlCi0gICAgICAgIC8qIEluIHRoZSBvdGhlcnMsIHdlIGp1 c3QgbG9vayBhdCB0aGUgVEVSTSBlbnZpcm9ubWVudCB2YXJpYWJsZSAqLwotICAgICAgICB7Ci0g ICAgICAgICAgICBjaGFyICpwID0gZ2V0ZW52KCJURVJNIik7Ci0gICAgICAgICAgICBpZiAocCkK LSAgICAgICAgICAgICAgY2tzdHJuY3B5KChjaGFyICopdGVybV9zcGVlZCxwLFRFUk1MRU4pOwot ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB0ZXJtX3NwZWVkWzBdID0gJ1wwJzsKLSNp ZmRlZiBWTVMKLSAgICAgICAgICAgIGZvciAocCA9IChjaGFyICopIHRlcm1fc3BlZWQ7ICpwOyBw KyspIHsKLSAgICAgICAgICAgICAgICBpZiAoKnAgPT0gJy0nICYmICghc3RyY21wKHAsIi04MCIp IHx8ICFzdHJjbXAocCwiLTEzMiIpKSkKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICAgIGVsc2UgaWYgKGlzdXBwZXIoKnApKQotICAgICAgICAgICAgICAgICAgKnAgPSB0 b2xvd2VyKCpwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpwID0gJ1wwJzsKLSNlbmRp ZiAvKiBWTVMgKi8KLSAgICAgICAgfQotI2VuZGlmIC8qIE9TMiAqLwotICAgIH0KLSAgICBuID0g c3RybGVuKChjaGFyICopdGVybV9zcGVlZCk7Ci0gICAgaWYgKG4gPiAwKSB7ICAgICAgICAgICAg ICAgICAgICAgICAgLyogV2UgaGF2ZSBhIHRlcm1pbmFsIHR5cGUgKi8KLSAgICAgICAgaWYgKCFm bGFnKSB7ICAgICAgICAgICAgICAgICAgICAvKiBJZiBub3QgdXNlci1zcGVjaWZpZWQgKi8KLSAg ICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspICAgICAvKiB0aGVuIGxvd2VyY2FzZSBp dC4gICAgKi8KLSAgICAgICAgICAgICAgaWYgKGlzdXBwZXIodGVybV9zcGVlZFtpXSkpCi0gICAg ICAgICAgICAgICAgdGVybV9zcGVlZFtpXSA9IHRvbG93ZXIodGVybV9zcGVlZFtpXSk7Ci0gICAg ICAgIH0KLSAgICAgICAgZGVidWcoRjExMCwicmxvZ19pbmkgdGVybV9zcGVlZCAxIix0ZXJtX3Nw ZWVkLDApOwotCi0jaWZkZWYgQ09OR1NQRAotICAgICAgICAvKiBjb25zcGQoKSBpcyBub3QgeWV0 IGRlZmluZWQgaW4gYWxsIGNrKnRpby5jIG1vZHVsZXMgKi8KLSAgICAgICAgY29uc3BkID0gY29u Z3NwZCgpOwotICAgICAgICBpZiAoY29uc3BkID4gMEwpIHsKLSAgICAgICAgICAgIGNrc3RybmNh dCgoY2hhciAqKXRlcm1fc3BlZWQsIi8iLHNpemVvZih0ZXJtX3NwZWVkKSk7Ci0gICAgICAgICAg ICBja3N0cm5jYXQoKGNoYXIgKil0ZXJtX3NwZWVkLGNrbHRvYShjb25zcGQpLHNpemVvZih0ZXJt X3NwZWVkKSk7Ci0gICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIENPTkdTUEQgKi8KLSAgICAgICAg ICBja3N0cm5jYXQoKGNoYXIgKil0ZXJtX3NwZWVkLCIvMTkyMDAiLHNpemVvZih0ZXJtX3NwZWVk KSk7Ci0gICAgICAgIGRlYnVnKEYxMTAsInJsb2dfaW5pIHRlcm1fc3BlZWQgMiIsdGVybV9zcGVl ZCwwKTsKLSAgICB9IGVsc2UgewotICAgICAgICB0ZXJtX3NwZWVkWzBdID0gJ1wwJzsKLSAgICAg ICAgZGVidWcoRjExMCwicmxvZ19pbmkgdGVybV9zcGVlZCAzIix0ZXJtX3NwZWVkLDApOwotICAg IH0KLQotI2lmZGVmIENLX0tFUkJFUk9TCi0gICAgaWYgKHR0bnByb3RvID09IE5QX0s0TE9HSU4g fHwgdHRucHJvdG8gPT0gTlBfRUs0TE9HSU4gfHwKLSAgICAgICAgdHRucHJvdG8gPT0gTlBfSzVM T0dJTiB8fCB0dG5wcm90byA9PSBOUF9FSzVMT0dJTikgewotICAgICAgICBpbnQga3ZlciwgZW5j cnlwdCwgcmM7Ci0gICAgICAgIHN3aXRjaCAodHRucHJvdG8pIHsKLSAgICAgICAgICBjYXNlIE5Q X0s0TE9HSU46Ci0gICAgICAgICAgICBrdmVyID0gNDsKLSAgICAgICAgICAgIGVuY3J5cHQgPSAw OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBOUF9FSzRMT0dJTjoKLSAgICAg ICAgICAgIGt2ZXIgPSA0OwotICAgICAgICAgICAgZW5jcnlwdCA9IDE7Ci0gICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICBjYXNlIE5QX0s1TE9HSU46Ci0gICAgICAgICAgICBrdmVyID0gNTsK LSAgICAgICAgICAgIGVuY3J5cHQgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg Y2FzZSBOUF9FSzVMT0dJTjoKLSAgICAgICAgICAgIGt2ZXIgPSA1OwotICAgICAgICAgICAgZW5j cnlwdCA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg ICAgIGt2ZXIgPSAwOwotICAgICAgICAgICAgZW5jcnlwdCA9IDA7Ci0gICAgICAgIH0KLSAgICAg ICAgcmMgPSBja19rcmJfcmxvZ2luKGhvc3RuYW1lLCBwb3J0LAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgbG9jYWx1c2VyLCByZW1vdGV1c2VyLCB0ZXJtX3NwZWVkLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgbF9hZGRyLCByX2FkZHIsIGt2ZXIsIGVuY3J5cHQpOwotICAgICAgICBp ZiAoIXJjKSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIHN1Y2Nlc3MgKi8KLSAgICAgICAgICAg IFRFTE9QVF9NRShURUxPUFRfTkFXUykgPSAxOwotICAgICAgICAgICAgcmMgPSBybG9nX25hd3Mo KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4ocmMpOwotICAgIH0gZWxzZQotI2VuZGlmIC8q IENLX0tFUkJFUk9TICovCi0gICAgaWYgKHR0bnByb3RvID09IE5QX1JMT0dJTikgewotI2lmZGVm IFJMT0dPVVRCVUYKLSAgICAgICAgLyoKLSAgICAgICAgICogIFRoZSByY21kcyBzdGFydCB0aGUg Y29ubmVjdGlvbiB3aXRoIGEgc2VyaWVzIG9mIGluaXQgZGF0YToKLSAgICAgICAgICoKLSAgICAg ICAgICogICAgYSBwb3J0IG51bWJlciB1cG9uIHdoaWNoIGNsaWVudCBpcyBsaXN0ZW5pbmcgZm9y IHN0ZGVyciBkYXRhCi0gICAgICAgICAqICAgIHRoZSB1c2VyJ3MgbmFtZSBvbiB0aGUgY2xpZW50 IG1hY2hpbmUKLSAgICAgICAgICogICAgdGhlIHVzZXIncyBuYW1lIG9uIHRoZSBzZXJ2ZXIgbWFj aGluZQotICAgICAgICAgKiAgICB0aGUgdGVybWluYWxfdHlwZS9zcGVlZCBvciBjb21tYW5kIHRv IGV4ZWN1dGUKLSAgICAgICAgICovCi0gICAgICAgIG91dGJ1ZltvdXRieXRlcysrXSA9IDA7Ci0g ICAgICAgIHN0cmNweSgoY2hhciAqKW91dGJ1ZitvdXRieXRlcywoY2hhciAqKWxvY2FsdXNlcik7 Ci0gICAgICAgIG91dGJ5dGVzICs9IHN0cmxlbigoY2hhciAqKWxvY2FsdXNlcikgKyAxOwotICAg ICAgICBzdHJjcHkoKGNoYXIgKilvdXRidWYrb3V0Ynl0ZXMsKGNoYXIgKilyZW1vdGV1c2VyKTsK LSAgICAgICAgb3V0Ynl0ZXMgKz0gc3RybGVuKChjaGFyICopcmVtb3RldXNlcikgKyAxOwotICAg ICAgICBzdHJjcHkoKGNoYXIgKilvdXRidWYrb3V0Ynl0ZXMsKGNoYXIgKil0ZXJtX3NwZWVkKTsK LSAgICAgICAgb3V0Ynl0ZXMgKz0gc3RybGVuKChjaGFyICopdGVybV9zcGVlZCkgKyAxOwotICAg ICAgICByYyA9IHR0b2woKENIQVIgKilvdXRidWYsb3V0Ynl0ZXMpOwotI2Vsc2UgLyogUkxPR09V VEJVRiAqLwotICAgICAgICB0dG9jKDApOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQg YW4gaW5pdGlhbCBOVUwgYXMgd2FrZS11cCAqLwotICAgICAgICAvKiBTZW5kIGVhY2ggdmFyaWFi bGUgd2l0aCB0aGUgdHJhaWxpbmcgTlVMICovCi0gICAgICAgIHJjID0gdHRvbChsb2NhbHVzZXIs c3RybGVuKChjaGFyICopbG9jYWx1c2VyKSsxKTsKLSAgICAgICAgaWYgKHJjID4gMCkKLSAgICAg ICAgICByYyA9IHR0b2wocmVtb3RldXNlcixzdHJsZW4oKGNoYXIgKilyZW1vdGV1c2VyKSsxKTsK LSAgICAgICAgaWYgKHJjID4gMCkKLSAgICAgICAgICByYyA9IHR0b2wodGVybV9zcGVlZCxzdHJs ZW4oKGNoYXIgKil0ZXJtX3NwZWVkKSsxKTsKLSNlbmRpZiAvKiBSTE9HT1VUQlVGICovCi0KLSAg ICAgICAgLyogTm93IHdlIGFyZSBzdXBwb3NlZCB0byBnZXQgYmFjayBhIHNpbmdsZSBOVUwgYXMg Y29uZmlybWF0aW9uICovCi0gICAgICAgIGVycm5vID0gMDsKLSAgICAgICAgcmMgPSB0dGluYyg2 MCk7Ci0gICAgICAgIGRlYnVnKEYxMDEsInJsb2dpbiBmaXJzdCB0dGluYyIsIiIscmMpOwotICAg ICAgICBpZiAocmMgPiAwKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJybG9naW4gdHRpbmMg MSIsIiIscmMpOwotICAgICAgICAgICAgcHJpbnRmKAotICAgICAgICAgICAgICAgIlJsb2dpbiBw cm90b2NvbCBlcnJvciAtIDB4JXggcmVjZWl2ZWQgaW5zdGVhZCBvZiAweDAwXG4iLCByYyk7Ci0g ICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9IGVsc2UgaWYgKHJjIDwgMCkgewotICAg ICAgICAgICAgZGVidWcoRjEwMSwicmxvZ2luIHR0aW5jIGVycm5vIiwiIixlcnJubyk7Ci0gICAg ICAgICAgICAvKiBwcmludGYoIk5ldHdvcmsgZXJyb3I6ICVkXG4iLCBlcnJubyk7ICovCi0gICAg ICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybigwKTsKLX0K LQotLyogdHdvIGNvbnRyb2wgbWVzc2FnZXMgYXJlIGRlZmluZWQ6Ci0KLSAgIGEgZG91YmxlIGZs YWcgYnl0ZSBvZiAnbycgaW5kaWNhdGVzIGEgb25lLWJ5dGUgbWVzc2FnZSB3aGljaCBpcwotICAg aWRlbnRpY2FsIHRvIHdoYXQgd2FzIG9uY2UgY2FycmllZCBvdXQgb2YgYmFuZC4KLQotICAgYSBk b3VibGUgZmxhZyBieXRlIG9mICdxJyBpbmRpY2F0ZXMgYSB6ZXJvLWJ5dGUgbWVzc2FnZS4gIFRo aXMKLSAgIG1lc3NhZ2UgaXMgaW50ZXJwcmV0ZWQgYXMgdHdvIFwzNzcgZGF0YSBieXRlcy4gIFRo aXMgaXMganVzdCBhCi0gICBxdW90ZSBydWxlIHNvIHRoYXQgYmluYXJ5IGRhdGEgZnJvbSB0aGUg c2VydmVyIGRvZXMgbm90IGNvbmZ1c2UgdGhlCi0gICBjbGllbnQuICAqLwotCi1pbnQgCi1ybG9n X2N0cmwoY3AsIG4pCi0gICAgIHVuc2lnbmVkIGNoYXIgKmNwOwotICAgICBpbnQgbjsKLXsKLSAg ICBpZiAoKG4gPj0gNSkgJiYgKGNwWzJdID09ICdvJykgJiYgKGNwWzNdID09ICdvJykpIHsKLSAg ICAgICAgaWYgKHJsb2dfb29iKCZjcFs0XSwxKSkKLSAgICAgICAgICAgIHJldHVybigtNSk7Ci0g ICAgICAgIHJldHVybig1KTsKLSAgICB9IGVsc2UgaWYgKChuID49IDQpICYmIChjcFsyXSA9PSAn cScpICYmIChjcFszXSA9PSAncScpKSB7Ci0gICAgICAgIC8qIHRoaXMgaXMgc29tZXdoYXQgb2Yg YSBoYWNrICovCi0gICAgICAgIGNwWzJdID0gJ1wzNzcnOwotICAgICAgICBjcFszXSA9ICdcMzc3 JzsKLSAgICAgICAgcmV0dXJuKDIpOwotICAgIH0KLSAgICByZXR1cm4oMCk7Ci19Ci0KLXN0YXRp YyBpbnQKLXJsb2dfb29iKG9vYmRhdGEsIGNvdW50KSBDSEFSICogb29iZGF0YTsgaW50IGNvdW50 OyB7Ci0gICAgaW50IGk7Ci0gICAgaW50IGZsdXNoID0gMDsKLQotICAgIGRlYnVnKEYxMTEsInJs b2dpbiBvdXRfb2ZfYmFuZCIsImNvdW50Iixjb3VudCk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpPGNv dW50OyBpKyspICAgewotICAgICAgICBkZWJ1ZyhGMTAxLCJybG9naW4gb3V0X29mX2JhbmQiLCIi LG9vYmRhdGFbaV0pOwotICAgICAgICAgICAgICAgIGlmIChvb2JkYXRhW2ldICYgMHgwMSkKLSAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChvb2JkYXRhW2ld ICYgMHgwMikgeyAvKiBGbHVzaCBCdWZmZXJlZCBEYXRhIG5vdCB5ZXQgZGlzcGxheWVkICovCi0g ICAgICAgICAgICBkZWJ1ZyhGMTAxLCJybG9naW4gRmx1c2ggQnVmZmVyZWQgRGF0YSBjb21tYW5k IiwiIixvb2JkYXRhW2ldKTsKLQotICAgICAgICAgICAgLyogT25seSBmbHVzaCB0aGUgZGF0YSBp ZiBpbiBmYWN0IHdlIGFyZSBpbiBhIG1vZGUgdGhhdCB3b24ndCAqLwotICAgICAgICAgICAgLyog Z2V0IG91dCBvZiBzeW5jLiAgSWUsIG5vdCB3aGVuIHdlIGFyZSBpbiBwcm90b2NvbCBtb2RlLiAg ICAqLwotICAgICAgICAgICAgc3dpdGNoICggd2hhdCApIHsKLSAgICAgICAgICAgIGNhc2UgV19O T1RISU5HOgotICAgICAgICAgICAgY2FzZSBXX0NPTk5FQ1Q6Ci0gICAgICAgICAgICBjYXNlIFdf Q09NTUFORDoKLSAgICAgICAgICAgICAgICBpZiAoIHJsb2dfaW5iYW5kICkKLSAgICAgICAgICAg ICAgICAgICAgZmx1c2ggPSAxOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg ICAgICAgdHRmbHVpKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgIH0KLSAgICAgICAgaWYgKG9vYmRhdGFbaV0gJiAweDEwKSB7ICAgICAgICAvKiBTd2l0 Y2ggdG8gUkFXIG1vZGUgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMDEsInJsb2dpbiBSYXcgTW9k ZSBjb21tYW5kIiwiIixvb2JkYXRhW2ldKTsKLSAgICAgICAgICAgIHJsb2dfbW9kZSA9IFJMX1JB VzsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChvb2JkYXRhW2ldICYgMHgyMCkgeyAgICAgICAg LyogU3dpdGNoIHRvIENPT0tFRCBtb2RlICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJybG9n aW4gQ29va2VkIE1vZGUgY29tbWFuZCIsIiIsb29iZGF0YVtpXSk7Ci0gICAgICAgICAgICBybG9n X21vZGUgPSBSTF9DT09LRUQ7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG9vYmRhdGFbaV0gJiAw eDgwKQotICAgICAgICB7ICAgICAgICAvKiBTZW5kIFdpbmRvdyBTaXplIEluZm8gKi8KLSAgICAg ICAgICAgIGRlYnVnKEYxMDEsInJsb2dpbiBXaW5kb3cgU2l6ZSBjb21tYW5kIiwiIixvb2JkYXRh W2ldKTsKLSAgICAgICAgICAgIC8qIFJlbWVtYmVyIHRvIHNlbmQgV1MgSW5mbyB3aGVuIFdpbmRv dyBTaXplIGNoYW5nZXMgKi8KLSAgICAgICAgICAgIGlmICggIVRFTE9QVF9NRShURUxPUFRfTkFX UykgKSB7Ci0gICAgICAgICAgICAgICAgVEVMT1BUX01FKFRFTE9QVF9OQVdTKSA9IDE7Ci0gICAg ICAgICAgICAgICAgcmxvZ19uYXdzKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9 Ci0gICAgcmV0dXJuKGZsdXNoKTsKLX0KLSNpZm5kZWYgVENQSVBMSUIKLXN0YXRpYyBTSUdUWVAK LXJsb2dvb2JoKHNpZykgaW50IHNpZzsgewotI2lmZGVmIFNPTEFSSVMKLSAgICBjaGFyICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPciBzaG91bGQgaXQgYmUgY2hhciBmb3IgYWxs PyAqLwotI2Vsc2UKLSAgICBDSEFSCi0jZW5kaWYgLyogU09MQVJJUyAqLwotICAgICAgb29iZGF0 YTsKLQotICAgIC8qIGludCAgY291bnQgPSAwOyAqLyAvKiAobm90IHVzZWQpICovCi0KLSAgICB3 aGlsZSAocmVjdih0dHlmZCwgJm9vYmRhdGEsIDEsIE1TR19PT0IpIDwgMCkgewotICAgICAgLyoK LSAgICAgICAqIFdlIG5lZWQgdG8gZG8gc29tZSBzcGVjaWFsIHByb2Nlc3NpbmcgaGVyZS4KLSAg ICAgICAqIEp1c3QgaW4gY2FzZSB0aGUgc29ja2V0IGlzIGJsb2NrZWQgZm9yIGlucHV0Ci0gICAg ICAgKgotICAgICAgICovCi0gICAgICAgIHN3aXRjaCAoZXJybm8pIHsKLSAgICAgICAgICBjYXNl IEVXT1VMREJMT0NLOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAg ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJybG9n aW4gb3V0X29mX2JhbmQiLCIiLG9vYmRhdGEpOwotICAgIGlmIChvb2JkYXRhID09IDB4MDIpIHsg ICAgICAvKiBGbHVzaCBCdWZmZXJlZCBEYXRhIG5vdCB5ZXQgZGlzcGxheWVkICovCi0gICAgICAg IGRlYnVnKEYxMDEsInJsb2dpbiBGbHVzaCBCdWZmZXJlZCBEYXRhIGNvbW1hbmQiLCIiLG9vYmRh dGEpOwotICAgICAgICBuZXRmbHVpKCk7Ci0gICAgfQotICAgIGlmIChvb2JkYXRhICYgMHgxMCkg eyAgICAgICAgICAgICAgIC8qIFN3aXRjaCB0byByYXcgbW9kZSAqLwotICAgICAgICBkZWJ1ZyhG MTAxLCJybG9naW4gUmF3IE1vZGUgY29tbWFuZCIsIiIsb29iZGF0YSk7Ci0gICAgICAgIHJsb2df bW9kZSA9IFJMX1JBVzsKLSAgICB9Ci0gICAgaWYgKG9vYmRhdGEgJiAweDIwKSB7ICAgICAgICAg ICAgICAgLyogU3dpdGNoIHRvIGNvb2tlZCBtb2RlICovCi0gICAgICAgIGRlYnVnKEYxMDEsInJs b2dpbiBDb29rZWQgTW9kZSBjb21tYW5kIiwiIixvb2JkYXRhKTsKLSAgICAgICAgcmxvZ19tb2Rl ID0gUkxfQ09PS0VEOwotICAgIH0KLSAgICBpZiAob29iZGF0YSAmIDB4ODApIHsgICAgICAgICAg ICAgICAgIC8qIFNlbmQgV2luZG93IFNpemUgSW5mbyAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJy bG9naW4gV2luZG93IFNpemUgY29tbWFuZCIsIiIsb29iZGF0YSk7Ci0gICAgICAgIC8qIFJlbWVt YmVyIHRvIHNlbmQgV1MgSW5mbyB3aGVuIFdpbmRvdyBTaXplIGNoYW5nZXMgKi8KLSAgICAgICAg aWYgKCAhVEVMT1BUX01FKFRFTE9QVF9OQVdTKSApIHsKLSAgICAgICAgICAgIFRFTE9QVF9NRShU RUxPUFRfTkFXUykgPSAxOwotICAgICAgICAgICAgcmxvZ19uYXdzKCk7Ci0gICAgICAgIH0KLSAg ICB9Ci19Ci0jZW5kaWYgLyogVENQSVBMSUIgKi8KLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotCi0v KiBTZW5kIG5ldHdvcmsgQlJFQUsgKi8KLS8qCi0gIFJldHVybnMgLTEgb24gZXJyb3IsIDAgaWYg bm90aGluZyBoYXBwZW5zLCAxIGlmIEJSRUFLIHNlbnQgc3VjY2Vzc2Z1bGx5LgotKi8KLWludAot bmV0YnJlYWsoKSB7Ci0gICAgQ0hBUiBidWZbM107Ci0gICAgaWYgKHR0bmV0ID09IE5FVF9UQ1BC KSB7Ci0gICAgICAgIGlmICh0dG5wcm90byA9PSBOUF9URUxORVQpIHsKLSNpZmRlZiBUTkNPREUK LSAgICAgICAgICAgIGJ1ZlswXSA9IChDSEFSKSBJQUM7IGJ1ZlsxXSA9IChDSEFSKSBCUkVBSzsg YnVmWzJdID0gKENIQVIpIDA7Ci0gICAgICAgICAgICBpZiAoCi0jaWZkZWYgT1MyCi0gICAgICAg ICAgICAgICAgbmV0dG9sKChjaGFyICopIGJ1ZiwgMikKLSNlbHNlCi0gICAgICAgICAgICAgICAg dHRvbChidWYsIDIpCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAgPCAyKQotICAg ICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMg fHwgZGVibG9nKSB7Ci0gICAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIgdG5fbXNnW107Ci0gICAg ICAgICAgICAgICAgY2ttYWttc2codG5fbXNnLFROX01TR19MRU4sIlRFTE5FVCBTRU5UICIsVEVM Q01EKEJSRUFLKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMKTsKLSAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTAxLHRuX21zZywiIixCUkVBSyk7Ci0gICAgICAgICAgICAgICAg aWYgKGRlYnNlcyB8fCB0bl9kZWIpIHRuX2RlYnVnKHRuX21zZyk7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgICAgICByZXR1cm4oMSk7Ci0jZWxzZQotICAgICAgICAgICAgZGVidWcoRjEwMCwibmV0 YnJlYWsgbm8gVE5DT0RFIiwiIiwwKTsKLSAgICAgICAgICAgIHJldHVybigwKTsKLSNlbmRpZiAv KiBUTkNPREUgKi8KLSAgICAgICAgfQotICAgICAgICAvKiBJbnNlcnQgb3RoZXIgVENQL0lQIHBy b3RvY29scyBoZXJlICovCi0gICAgfQotICAgIC8qIEluc2VydCBvdGhlciBuZXR3b3JrcyBoZXJl ICovCi0gICAgcmV0dXJuKDApOwotfQotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQotCi0jaWZkZWYg TkVUQ09OTgotI2lmZGVmIFNVTlgyNQotLyoKLSAgU3VuTGluayBYLjI1IHN1cHBvcnQgYnkgTWFy Y2VsbG8gRnJ1dGlnLCBDYXRob2xpYyBVbml2ZXJzaXR5LAotICBSaW8gZGUgSmFuZWlybywgQnJh emlsLCAxOTkwLgotKi8KLQotLyogUEFEIFguMywgWC4yOCBhbmQgWC4yOSBzdXBwb3J0ICovCi0K LXN0YXRpYyBDSEFSIHgyOWVycltNQVhQQURQQVJNUyszXSA9IHsgWDI5X0VSUk9SLCBJTlZBTElE X1BBRF9QQVJNLCAnXDAnIH07Ci0KLS8qIEluaXRpYWxpemUgUEFEICovCi0KLWV4dGVybiBDSEFS IHBhZHBhcm1zW107Ci0KLVZPSUQKLWluaXRwYWQoKSB7Ci0gIHBhZHBhcm1zW1BBRF9CUkVBS19D SEFSQUNURVJdICAgICAgICA9IDA7ICAvKiBCcmVhayBjaGFyYWN0ZXIgKi8KLSAgcGFkcGFybXNb UEFEX0VTQ0FQRV0gICAgICAgICAgICAgICAgID0gMTsgIC8qIEVzY2FwZSBwZXJtaXR0ZWQgKi8K LSAgcGFkcGFybXNbUEFEX0VDSE9dICAgICAgICAgICAgICAgICAgID0gMTsgIC8qIEtlcm1pdCBQ QUQgZG9lcyBlY2hvICovCi0gIHBhZHBhcm1zW1BBRF9EQVRBX0ZPUldBUkRfQ0hBUl0gICAgICA9 IDI7ICAvKiBmb3J3YXJkIGNoYXJhY3RlciBDUiAqLwotICBwYWRwYXJtc1tQQURfREFUQV9GT1JX QVJEX1RJTUVPVVRdICAgPSAwOyAgLyogbm8gdGltZW91dCBmb3J3YXJkIGNvbmRpdGlvbiAqLwot ICBwYWRwYXJtc1tQQURfRkxPV19DT05UUk9MX0JZX1BBRF0gICAgPSAwOyAgLyogbm90IHVzZWQg Ki8KLSAgcGFkcGFybXNbUEFEX1NVUFBSRVNTSU9OX09GX1NJR05BTFNdID0gMTsgIC8qIGFsbG93 IFBBRCBzZXJ2aWNlIHNpZ25hbHMgKi8KLSAgcGFkcGFybXNbUEFEX0JSRUFLX0FDVElPTl0gICAg ICAgICAgID0gMjE7IC8qIGJyayBhY3Rpb246IElOVCBwayArIGJyayBpbmQqLwotICBwYWRwYXJt c1tQQURfU1VQUFJFU1NJT05fT0ZfREFUQV0gICAgPSAwOyAgLyogbm8gc3VwcmVzc2lvbiBvZiB1 c2VyIGRhdGEgKi8KLSAgcGFkcGFybXNbUEFEX1BBRERJTkdfQUZURVJfQ1JdICAgICAgID0gMDsg IC8qIG5vIHBhZGRpbmcgYWZ0ZXIgQ1IgKi8KLSAgcGFkcGFybXNbUEFEX0xJTkVfRk9MRElOR10g ICAgICAgICAgID0gMDsgIC8qIG5vIGxpbmUgZm9sZCAqLwotICBwYWRwYXJtc1tQQURfTElORV9T UEVFRF0gICAgICAgICAgICAgPSAwOyAgLyogbGluZSBzcGVlZCAtIGRvbid0IGNhcmUgKi8KLSAg cGFkcGFybXNbUEFEX0ZMT1dfQ09OVFJPTF9CWV9VU0VSXSAgID0gMDsgIC8qIGZsb3cgY29udCBv ZiBQQUQgLSBub3QgdXNlZCAqLwotICBwYWRwYXJtc1tQQURfTEZfQUZURVJfQ1JdICAgICAgICAg ICAgPSAwOyAgLyogbm8gTEYgaW5zZXJ0aW9uIGFmdGVyIENSICovCi0gIHBhZHBhcm1zW1BBRF9Q QURESU5HX0FGVEVSX0xGXSAgICAgICA9IDA7ICAvKiBubyBwYWRkaW5nIGFmdGVyIExGICovCi0g IHBhZHBhcm1zW1BBRF9FRElUSU5HXSAgICAgICAgICAgICAgICA9IDE7ICAvKiBjYW4gZWRpdCAq LwotICBwYWRwYXJtc1tQQURfQ0hBUl9ERUxFVEVfQ0hBUl0gICAgICAgPSA4OyAgLyogY2hhcmFj dGVyIGRlbGV0ZSBjaGFyYWN0ZXIgKi8KLSAgcGFkcGFybXNbUEFEX0JVRkZFUl9ERUxFVEVfQ0hB Ul0gICAgID0gMjE7IC8qIGJ1ZmZlciBkZWxldGUgY2hhcmFjdGVyICovCi0gIHBhZHBhcm1zW1BB RF9CVUZGRVJfRElTUExBWV9DSEFSXSAgICA9IDE4OyAvKiBidWZmZXIgZGlzcGxheSBjaGFyYWN0 ZXIgKi8KLX0KLQotLyogU2V0IFBBRCBwYXJhbWV0ZXJzICovCi0KLVZPSUQKLXNldHBhZChzLG4p IENIQVIgKnM7IGludCBuOyB7Ci0gICAgaW50IGk7Ci0gICAgQ0hBUiAqcHMgPSBzOwotCi0gICAg aWYgKG4gPCAxKSB7Ci0gICAgICAgIGluaXRwYWQoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBm b3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoKnBzID4gTUFYUEFEUEFS TVMpCi0gICAgICAgICAgICAgIHgyOWVycltpKzJdID0gKnBzOwotICAgICAgICAgICAgZWxzZQot ICAgICAgICAgICAgICBwYWRwYXJtc1sqcHNdID0gKihwcysxKTsKLSAgICAgICAgICAgIHBzICs9 IDI7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8qIFJlYWQgUEFEIHBhcmFtZXRlcnMgKi8KLQot Vk9JRAotcmVhZHBhZChzLG4scikgQ0hBUiAqczsgaW50IG47IENIQVIgKnI7IHsKLSAgICBpbnQg aTsKLSAgICBDSEFSICpwcyA9IHM7Ci0gICAgQ0hBUiAqcHIgPSByOwotCi0gICAgKnByKysgPSBY MjlfUEFSQU1FVEVSX0lORElDQVRJT047Ci0gICAgaWYgKG4gPiAwKSB7Ci0gICAgICAgIGZvciAo aSA9IDA7IGkgPCBuOyBpKyssIHBzKyspIHsKLSAgICAgICAgICAgIGlmICgqcHMgPiBNQVhQQURQ QVJNUykgewotICAgICAgICAgICAgICAgIHgyOWVycltpKzJdID0gKnBzKys7Ci0gICAgICAgICAg ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICpwcisrID0gKnBzOwotICAgICAgICAgICAgICAg ICpwcisrID0gcGFkcGFybXNbKnBzKytdOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg fSBlbHNlIHsKLSAgICAgICAgZm9yIChpID0gMTsgaSA8IE1BWFBBRFBBUk1TOyBpKyspIHsKLSAg ICAgICAgICAgICpwcisrID0gaTsKLSAgICAgICAgICAgICpwcisrID0gcGFkcGFybXNbaV07Ci0g ICAgICAgIH0KLSAgICB9Ci19Ci0KLWludAotcWJpdHBrdChzLG4pIENIQVIgKnM7IGludCBuOyB7 Ci0gICAgQ0hBUiAqcHMgPSBzOwotICAgIGludCB4MjljbWQgPSAqcHM7Ci0gICAgQ0hBUiAqcHNh ID0gcysxOwotICAgIENIQVIgeDI5cmVzcFsoTUFYUEFEUEFSTVMqMikrMV07Ci0KLSAgICBzd2l0 Y2ggKHgyOWNtZCkgewotCi0gICAgICAgIGNhc2UgWDI5X1NFVF9QQVJNUzoKLSAgICAgICAgICAg IHNldHBhZCAocHMrMSxuLzIpOwotICAgICAgICAgICAgaWYgKChpbnQpc3RybGVuKChjaGFyICop eDI5ZXJyKSA+IDIpIHsKLSAgICAgICAgICAgICAgICB0dG9sKHgyOWVyciwoaW50KXN0cmxlbigo Y2hhciAqKXgyOWVycikpOwotICAgICAgICAgICAgICAgIHgyOWVyclsyXSA9ICdcMCc7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gKC0yKTsKLSAgICAgICAgY2FzZSBYMjlfUkVB RF9QQVJNUzoKLSAgICAgICAgICAgIHJlYWRwYWQgKHBzKzEsbi8yLHgyOXJlc3ApOwotICAgICAg ICAgICAgc2V0cWJpdCAoKTsKLSAgICAgICAgICAgIHR0b2woeDI5cmVzcCwobj4xKT8obisxKToo MipNQVhQQURQQVJNUysxKSk7Ci0gICAgICAgICAgICBpZiAoKGludClzdHJsZW4oKGNoYXIgKil4 MjllcnIpID4gMikgewotICAgICAgICAgICAgICAgIHR0b2woeDI5ZXJyLChpbnQpc3RybGVuKChj aGFyICopeDI5ZXJyKSk7Ci0gICAgICAgICAgICAgICAgeDI5ZXJyWzJdID0gJ1wwJzsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIHJlc2V0cWJpdCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgIGNhc2UgWDI5X1NFVF9BTkRfUkVBRF9QQVJNUzoKLSAgICAgICAgICAgIHNldHBhZCAo cHMrMSxuLzIpOwotICAgICAgICAgICAgcmVhZHBhZCAocHMrMSxuLzIseDI5cmVzcCk7Ci0gICAg ICAgICAgICBzZXRxYml0KCk7Ci0gICAgICAgICAgICB0dG9sKHgyOXJlc3AsKG4+MSk/KG4rMSk6 KDIqTUFYUEFEUEFSTVMrMSkpOwotICAgICAgICAgICAgaWYgKChpbnQpc3RybGVuKChjaGFyICop eDI5ZXJyKSA+IDIpIHsKLSAgICAgICAgICAgICAgICB0dG9sICh4MjllcnIsKGludClzdHJsZW4o KGNoYXIgKil4MjllcnIpKTsKLSAgICAgICAgICAgICAgICB4MjllcnIgWzJdID0gJ1wwJzsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIHJlc2V0cWJpdCgpOwotICAgICAgICAgICAgcmV0dXJu ICgtMik7Ci0gICAgICAgIGNhc2UgWDI5X0lOVklUQVRJT05fVE9fQ0xFQVI6Ci0gICAgICAgICAg ICAoVk9JRCkgeDI1Y2xlYXIoKTsKLSAgICAgICAgICAgIHJldHVybiAoLTEpOwotICAgICAgICBj YXNlIFgyOV9JTkRJQ0FUSU9OX09GX0JSRUFLOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQot ICAgIHJldHVybiAoMCk7Ci19Ci0KLS8qIFBBRCBicmVhayBhY3Rpb24gcHJvY2Vzc29yICovCi0K LVZPSUQKLWJyZWFrYWN0KCkgewotICAgIGV4dGVybiBjaGFyIHgyNW9idWZbTUFYT1gyNV07Ci0g ICAgZXh0ZXJuIGludCBvYnVmbDsKLSAgICBleHRlcm4gaW50IGFjdGl2ZTsKLSAgICBleHRlcm4g dW5zaWduZWQgY2hhciB0b3NlbmQ7Ci0gICAgc3RhdGljIENIQVIgaW5kYnJrWzNdID0gewotICAg ICAgICBYMjlfSU5ESUNBVElPTl9PRl9CUkVBSywKLSAgICAgICAgUEFEX1NVUFBSRVNTSU9OX09G X0RBVEEsCi0gICAgICAgIDEKLSAgICB9OwotICAgIENIQVIgaW50dWRhdCwgY2F1c2UsIGRpYWc7 Ci0KLSAgICBpZiAoeDI1c3RhdCgpIDwgMCkgcmV0dXJuOyAgLyogSWdub3JlIGlmIG5vIHZpcnR1 YWwgY2FsbCBlc3RhYmxpc2hlZCAqLwotCi0gICAgaWYgKHBhZHBhcm1zW1BBRF9CUkVBS19BQ1RJ T05dICE9IDApIC8qIEZvcndhcmQgY29uZGl0aW9uICovCi0gICAgICAgIGlmICh0dG9sKChDSEFS ICopeDI1b2J1ZixvYnVmbCkgPCAwKSB7Ci0gICAgICAgICAgICBwZXJyb3IgKCJcclxuQ2FuJ3Qg c2VuZCBjaGFyYWN0ZXJzIik7Ci0gICAgICAgICAgICBhY3RpdmUgPSAwOwotICAgICAgICB9IGVs c2UgewotICAgICAgICAgICAgYnplcm8gKHgyNW9idWYsc2l6ZW9mKHgyNW9idWYpKTsKLSAgICAg ICAgICAgIG9idWZsID0gMDsKLSAgICAgICAgICAgIHRvc2VuZCA9IDA7Ci0gICAgICAgIH07Ci0K LSAgICBzd2l0Y2ggKHBhZHBhcm1zW1BBRF9CUkVBS19BQ1RJT05dKSB7Ci0KLSAgICAgICBjYXNl IDAgOiBicmVhazsgICAgICAgICAgICAgICAgICAvKiBkbyBub3RoaW5nICovCi0gICAgICAgY2Fz ZSAxIDogLyogc2VuZCBpbnRlcnJ1cHQgcGFja2V0IHdpdGggaW50ZXJydXB0IHVzZXIgZGF0YSBm aWVsZCA9IDEgKi8KLSAgICAgICAgICAgICAgICBpbnR1ZGF0ID0gMTsKLSAgICAgICAgICAgICAg ICB4MjVpbnRyIChpbnR1ZGF0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICBjYXNl IDIgOiAvKiBzZW5kIHJlc2V0IHBhY2tldCB3aXRoIGNhdXNlIGFuZCBkaWFnID0gMCAqLwotICAg ICAgICAgICAgICAgIGNhdXNlID0gZGlhZyA9IDA7Ci0gICAgICAgICAgICAgICAgeDI1cmVzZXQg KGNhdXNlLGRpYWcpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgNSA6IC8q IHNlbmQgaW50ZXJydXB0IHBhY2tldCB3aXRoIGludGVycnVwdCB1c2VyIGRhdGEgZmllbGQgPSAw ICovCi0gICAgICAgICAgICAgICAgaW50dWRhdCA9IDA7Ci0gICAgICAgICAgICAgICAgeDI1aW50 ciAoaW50dWRhdCk7Ci0gICAgICAgICAgICAgICAgc2V0cWJpdCAoKTsKLSAgICAgICAgICAgICAg ICAvKiBzZW5kIGluZGljYXRpb24gb2YgYnJlYWsgd2l0aG91dCBhIHBhcmFtZXRlciBmaWVsZCAq LwotICAgICAgICAgICAgICAgIHR0b2MoWDI5X0lORElDQVRJT05fT0ZfQlJFQUspOwotICAgICAg ICAgICAgICAgIHJlc2V0cWJpdCAoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICBj YXNlIDggOiBhY3RpdmUgPSAwOyAgICAgICAgICAgICAvKiBsZWF2ZSBkYXRhIHRyYW5zZmVyICov Ci0gICAgICAgICAgICAgICAgY29ub2wgKCJcclxuIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgY2FzZSAyMTogLyogc2VuZCBpbnRlcnJ1cHQgcGFja2V0IHdpdGggaW50ZXJydXB0 IHVzZXIgZGF0YSBmaWVsZCA9IDAgKi8KLSAgICAgICAgICAgICAgICBpbnR1ZGF0ID0gMDsKLSAg ICAgICAgICAgICAgICB4MjVpbnRyIChpbnR1ZGF0KTsKLSAgICAgICAgICAgICAgICBzZXRwYWQg KGluZGJyaysxLDIpOyAgICAvKiBzZXQgcGFkIHRvIGRpc2NhcmQgaW5wdXQgKi8KLSAgICAgICAg ICAgICAgICBzZXRxYml0ICgpOwotICAgICAgICAgICAgICAgIC8qIHNlbmQgaW5kaWNhdGlvbiBv ZiBicmVhayB3aXRoIHBhcmFtZXRlciBmaWVsZCAqLwotICAgICAgICAgICAgICAgIHR0b2wgKGlu ZGJyayxzaXplb2YoaW5kYnJrKSk7Ci0gICAgICAgICAgICAgICAgcmVzZXRxYml0ICgpOwotICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICB9Ci19Ci0KLS8qIFguMjUgc3VwcG9ydCBmdW5jdGlv bnMgKi8KLQotWDI1X0NBVVNFX0RJQUcgZGlhZzsKLQotLyoKLSAgQ29udmVydCBhIG51bGwtdGVy bWluYXRlZCBzdHJpbmcgcmVwcmVzZW50aW5nIGFuIFguMTIxIGFkZHJlc3MKLSAgdG8gYSBwYWNr ZWQgQkNEIGZvcm0uCi0qLwotaW50Ci1wa3gxMjEoc3RyLGJjZCkgY2hhciAqc3RyOyBDSEFSICpi Y2Q7IHsKLSAgICBpbnQgaSwgajsKLSAgICB1X2NoYXIgYzsKLQotICAgIGkgPSBqID0gMDsKLSAg ICB3aGlsZSAoc3RyW2ldKSB7Ci0gICAgICAgIGlmIChpID49IDE1IHx8IHN0ciBbaV0gPCAnMCcg fHwgc3RyIFtpXSA+ICc5JykKLSAgICAgICAgICByZXR1cm4gKC0xKTsKLSAgICAgICAgYyA9IHN0 ciBbaV0gLSAnMCc7Ci0gICAgICAgIGlmIChpICYgMSkKLSAgICAgICAgICBiY2QgW2orK10gfD0g YzsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGJjZCBbal0gPSBjIDw8IDQ7Ci0gICAgICAgIGkr KzsKLSAgICB9Ci0gICAgcmV0dXJuIChpKTsKLX0KLQotLyogUmVhZHMgYW5kIHByaW50cyBYLjI1 IGRpYWdub3N0aWMgKi8KLQotaW50Ci14MjVkaWFnICgpIHsKLSAgICBpbnQgaTsKLQotICAgIGJ6 ZXJvICgoY2hhciAqKSZkaWFnLHNpemVvZihkaWFnKSk7Ci0gICAgaWYgKGlvY3RsKHR0eWZkLFgy NV9SRF9DQVVTRV9ESUFHLCZkaWFnKSkgewotICAgICAgICBwZXJyb3IgKCJSZWFkaW5nIFguMjUg ZGlhZ25vc3RpYyIpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBpZiAoZGlhZy5k YXRhbGVuID4gMCkgewotICAgICAgICBwcmludGYgKCJYLjI1IERpYWdub3N0aWMgOiIpOwotICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgKGludClkaWFnLmRhdGFsZW47IGkrKykKLSAgICAgICAgICBw cmludGYoIiAlMDJoIixkaWFnLmRhdGFbaV0pKwotICAgICAgICBwcmludGYgKCJcclxuIik7Ci0g ICAgfQotICAgIHJldHVybigwKTsKLX0KLQotLyogWC4yNSBPdXQtb2YtQmFuZCBTaWduYWwgSGFu ZGxlciAqLwotCi1TSUdUWVAKLXgyNW9vYmgoZm9vKSBpbnQgZm9vOyB7Ci0gICAgaW50IG9vYnR5 cGU7Ci0gICAgdV9jaGFyIG9vYmRhdGE7Ci0gICAgaW50IHQ7Ci0KLSAgICAoVk9JRCkgc2lnbmFs KFNJR1VSRyx4MjVvb2JoKTsKLSAgICBkbyB7Ci0gICAgICAgIGlmIChpb2N0bCh0dHlmZCxYMjVf T09CX1RZUEUsJm9vYnR5cGUpKSB7Ci0gICAgICAgICAgICBwZXJyb3IgKCJHZXR0aW5nIHNpZ25h bCB0eXBlIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgc3dpdGNo IChvb2J0eXBlKSB7Ci0gICAgICAgICAgY2FzZSBJTlRfREFUQToKLSAgICAgICAgICAgIGlmIChy ZWN2KHR0eWZkLChjaGFyICopJm9vYmRhdGEsMSxNU0dfT09CKSA8IDApIHsKLSAgICAgICAgICAg ICAgICBwZXJyb3IgKCJSZWNlaXZpbmcgWC4yNSBpbnRlcnJ1cHQgZGF0YSIpOwotICAgICAgICAg ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHQgPSBvb2JkYXRhOwot ICAgICAgICAgICAgcHJpbnRmICgiXHJcbkludGVycnVwdCByZWNlaXZlZCwgZGF0YSA9ICVkXHJc biIsIHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBWQ19SRVNFVDoKLSAg ICAgICAgICAgIHByaW50ZiAoIlxyXG5WaXJ0dWFsIGNpcmN1aXQgcmVzZXRcclxuIik7Ci0gICAg ICAgICAgICB4MjVkaWFnICgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBO X1JFU0VUUzoKLSAgICAgICAgICAgIHByaW50ZiAoIlxyXG5SZXNldCB0aW1lb3V0XHJcbiIpOwot ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBOX0NMRUFSUzoKLSAgICAgICAgICAg IHByaW50ZiAoIlxyXG5DbGVhciB0aW1lb3V0XHJcbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgY2FzZSBNU0dfVE9PX0xPTkc6Ci0gICAgICAgICAgICBwcmludGYgKCJcclxuTWVz c2FnZSBkaXNjYXJkZWQsIHRvbyBsb25nXHJcbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlmIChvb2J0eXBlKSBwcmludGYoIlxyXG5Vbmtu b3duIG9vYiB0eXBlICVkXHJcbiIsb29idHlwZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg ICAgfQotICAgIH0gd2hpbGUgKG9vYnR5cGUpOwotfQotCi0vKiBTZW5kIGEgWC4yNSBpbnRlcnJ1 cHQgcGFja2V0ICovCi0KLWludAotI2lmZGVmIENLX0FOU0lDCi14MjVpbnRyKGNoYXIgaW50cikK LSNlbHNlCi14MjVpbnRyKGludHIpIGNoYXIgaW50cjsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot LyogeDI1aW50ciAqLyB7Ci0gICAgaWYgKHNlbmQodHR5ZmQsJmludHIsMSxNU0dfT09CKSA8IDAp IHJldHVybigtMSk7Ci0gICAgZGVidWcoRjEwMCwiWC4yNSBpbnRyIiwiIiwwKTsKLSAgICByZXR1 cm4oMCk7Ci19Ci0KLS8qIFJlc2V0IFguMjUgdmlydHVhbCBjaXJjdWl0ICovCi1pbnQKLSNpZmRl ZiBDS19BTlNJQwoteDI1cmVzZXQoY2hhciBjYXVzZSwgY2hhciBkaWFnbikKLSNlbHNlCi14MjVy ZXNldChjYXVzZSwgZGlhZ24pIGNoYXIgY2F1c2U7IGNoYXIgZGlhZ247Ci0jZW5kaWYgLyogQ0tf QU5TSUMgKi8KLS8qIHgyNXJlc2V0ICovIHsKLSAgICBiemVybyAoKGNoYXIgKikmZGlhZyxzaXpl b2YoZGlhZykpOwotICAgIGRpYWcuZmxhZ3MgICA9IDA7Ci0gICAgZGlhZy5kYXRhbGVuID0gMjsK LSAgICBkaWFnLmRhdGFbMF0gPSBjYXVzZTsKLSAgICBkaWFnLmRhdGFbMV0gPSBkaWFnbjsKLSAg ICBpZiAoaW9jdGwodHR5ZmQsWDI1X1dSX0NBVVNFX0RJQUcsJmRpYWcpIDwgMCkKLSAgICAgIHJl dHVybigtMSk7Ci0gICAgZGVidWcoRjEwMCwiWC4yNSByZXNldCIsIiIsMCk7Ci0gICAgcmV0dXJu KDApOwotfQotCi0vKiBDbGVhciBYLjI1IHZpcnR1YWwgY2lyY3VpdCAqLwotaW50Ci14MjVjbGVh cigpIHsKLSAgICBpbnQgaTsKLSAgICBkZWJ1ZyhGMTAwLCJYLjI1IGNsZWFyIiwiIiwwKTsKLSAg ICBiemVybyAoKGNoYXIgKikmZGlhZyxzaXplb2YoZGlhZykpOwotICAgIGRpYWcuZmxhZ3MgPSAo MSA8PCBESUFHX1RZUEUpOwotICAgIGRpYWcuZGF0YWxlbiA9IDI7Ci0gICAgZGlhZy5kYXRhWzBd ID0gMDsKLSAgICBkaWFnLmRhdGFbMV0gPSAwOwotICAgIGlvY3RsICh0dHlmZCxYMjVfV1JfQ0FV U0VfRElBRywmZGlhZyk7IC8qIFNlbmQgQ2xlYXIgUmVxdWVzdCAqLwotICAgIHJldHVybih0dGNs b3MoMCkpOyAgICAgICAgICAgICAgICAgIC8qIENsb3NlIHNvY2tldCAqLwotfQotCi0vKiBYLjI1 IHN0YXR1cyAqLwotaW50Ci14MjVzdGF0KCkgewotICAgIGlmICh0dHlmZCA9PSAtMSkgcmV0dXJu ICgtMSk7Ci0gICAgcmV0dXJuKDApOwotfQotCi0vKiBTZXQgUV9CSVQgb24gKi8KLVZPSUQKLXNl dHFiaXQoKSB7Ci0gICAgc3RhdGljIGludCBxYml0b24gPSAxIDw8IFFfQklUOwotICAgIGlvY3Rs ICh0dHlmZCxYMjVfU0VORF9UWVBFLCZxYml0b24pOwotfQotCi0vKiBTZXQgUV9CSVQgb2ZmICov Ci1WT0lECi1yZXNldHFiaXQoKSB7Ci0gICAgc3RhdGljIGludCBxYml0b2ZmID0gMDsKLSAgICBp b2N0bCAodHR5ZmQsWDI1X1NFTkRfVFlQRSwmcWJpdG9mZik7Ci19Ci0KLS8qIFJlYWQgbiBjaGFy YWN0ZXJzIGZyb20gWC4yNSBjaXJjdWl0IGludG8gYnVmICovCi0KLWludAoteDI1eGluKG4sYnVm KSBpbnQgbjsgQ0hBUiAqYnVmOyB7Ci0gICAgcmVnaXN0ZXIgaW50IHgsIGM7Ci0gICAgaW50IHFw a3Q7Ci0KLSAgICBkbyB7Ci0gICAgICAgIHggPSByZWFkKHR0eWZkLGJ1ZixuKTsKLSAgICAgICAg aWYgKGJ1ZlswXSAmICgxIDw8IFFfQklUKSkgeyAvKiBJZiBRX0JJVCBwYWNrZXQsIHByb2Nlc3Mg aXQgKi8KLSAgICAgICAgICAgIC8qIElmIHJldHVybiAtMSA6IGludml0YXRpb24gdG8gY2xlYXI7 IC0yIDogUEFEIGNoYW5nZXMgKi8KLSAgICAgICAgICAgIGlmICgoYz1xYml0cGt0KGJ1ZisxLHgt MikpIDwgMCkgcmV0dXJuKGMpOwotICAgICAgICAgICAgcXBrdCA9IDE7Ci0gICAgICAgIH0gZWxz ZSBxcGt0ID0gMDsKLSAgICB9IHdoaWxlIChxcGt0KTsKLQotI2lmZGVmIENPTU1FTlQgICAgICAg ICAgICAgICAgICAvKiBEaXNhYmxlZCBieSBTdGVwaGVuIFJpZWhtIDE5LjEyLjk3ICovCi0gICAg LyogQlVHIQotICAgICAqIGlmIGJ1ZltdIGlzIGZ1bGwsIHRoZW4gdGhpcyBudWxsIGxhbmRzIGlu IG5pcnZhbmEhCi0gICAgICogSSB3YXMgdW5hYmxlIHRvIGZpbmQgYW55IGNvZGUgd2hpY2ggbmVl ZHMgYSB0cmFpbGluZyBudWxsIGluIGJ1ZltdCi0gICAgICovCi0gICAgaWYgKHggPiAwKSBidWZb eF0gPSAnXDAnOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICBpZiAoeCA8IDEpIHggPSAtMTsK LSAgICBkZWJ1ZyhGMTAxLCJ4MjV4aW4geCIsIiIseCk7Ci0KLSAgICByZXR1cm4oeCk7Ci19Ci0K LSNpZmRlZiBDT01NRU5UIC8qIE5PIExPTkdFUiBORUVERUQhICovCi0vKiBYLjI1IHJlYWQgYSBs aW5lICovCi0KLWludAotI2lmZGVmIFBBUlNFTlNFCi0jaWZkZWYgQ0tfQU5TSUMKLXgyNWlubChD SEFSICpkZXN0LCBpbnQgbWF4LGludCB0aW1vLCBDSEFSIGVvbCwgQ0hBUiBzdGFydCkKLSNlbHNl Ci14MjVpbmwoZGVzdCxtYXgsdGltbyxlb2wsc3RhcnQpIGludCBtYXgsdGltbzsgQ0hBUiAqZGVz dCwgZW9sLCBzdGFydDsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotI2Vsc2UgLyogbm90IFBBUlNF TlNFICovCi0jaWZkZWYgQ0tfQU5TSUMKLXgyNWlubChDSEFSICpkZXN0LCBpbnQgbWF4LGludCB0 aW1vLCBDSEFSIGVvbCkKLSNlbHNlCi14MjVpbmwoZGVzdCxtYXgsdGltbyxlb2wpIGludCBtYXgs dGltbzsgQ0hBUiAqZGVzdCwgZW9sOwotI2VuZGlmIC8qIF9fU0RUQ19fICovCi0jZW5kaWYgLypQ QVJTRU5TRSAqLwotIC8qIHgyNWlubCAqLyB7Ci0gICAgQ0hBUiAqcGRlc3Q7Ci0gICAgaW50IHBr dHlwZSwgZ290ZW9sLCByZXN0LCBuOwotICAgIGludCBpLCBmbGFnID0gMDsKLSAgICBleHRlcm4g aW50IHR0cHJ0eSwgdHRwZmxnOwotICAgIGludCB0dHBtc2s7Ci0KLSAgICB0dHBtc2sgPSAodHRw cnR5KSA/IDAxNzcgOiAwMzc3OyAgICAvKiBTZXQgcGFyaXR5IHN0cmlwcGluZyBtYXNrICovCi0K LSAgICBkZWJ1ZyhGMTAxLCJ4MjVpbmwgbWF4IiwiIixtYXgpOwotICAgIGRlYnVnKEYxMDEsIngy NWlubCBlb2wiLCIiLGVvbCk7Ci0gICAgcGRlc3QgID0gZGVzdDsKLSAgICByZXN0ICAgPSBtYXg7 Ci0gICAgZ290ZW9sID0gMDsKLSAgICBkbyB7Ci0gICAgICAgIG4gPSByZWFkKHR0eWZkLHBkZXN0 LHJlc3QpOwotICAgICAgICBuLS07Ci0gICAgICAgIHBrdHlwZSA9ICpwZGVzdCAmIDB4N2Y7Ci0g ICAgICAgIHN3aXRjaCAocGt0eXBlKSB7Ci0gICAgICAgICAgY2FzZSAxIDw8IFFfQklUOgotICAg ICAgICAgICAgaWYgKHFiaXRwa3QocGRlc3QrMSwtLW4pIDwgMCkgcmV0dXJuKC0yKTsKLSAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAoZmxhZyA9 PSAwKSB7IC8qIGlmIG5vdCBpbiBwYWNrZXQsIHNlYXJjaCBzdGFydCAqLwotICAgICAgICAgICAg ICAgIGZvciAoaSA9IDE7IChpIDwgbikgJiYKLSAgICAgICAgICAgICAgICAgICAgICEoZmxhZyA9 ICgoZGVzdFtpXSAmIDB4N2YpID09IHN0YXJ0KSk7Ci0gICAgICAgICAgICAgICAgICAgICBpKysp OwotICAgICAgICAgICAgICAgIGlmIChmbGFnID09IDApIHsgLyogbm90IGZvdW5kLCBkaXNjYXJk IGp1bmsgKi8KLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwieDI1aW5sIHNraXBwaW5n IiwiIixuKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg fSBlbHNlIHsgICAgICAgICAgICAgICAgLyogZm91bmQsIGRpc2NhcmQganVuayBiZWZvcmUgc3Rh cnQgKi8KLSAgICAgICAgICAgICAgICAgICAgaW50IGs7Ci0gICAgICAgICAgICAgICAgICAgIG4g PSBuIC0gaSArIDE7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDE7IGsgPD0gbjsgaysr LCBpKyspIGRlc3Rba10gPSBkZXN0W2ldOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIGZvciAoaSA9IDA7IChpIDwgbikgJiYgLyogc2VhcmNoIGZvciBlb2wg Ki8KLSAgICAgICAgICAgICAgICAgIShnb3Rlb2w9KCgoKnBkZXN0ID0gKihwZGVzdCsxKSZ0dHBt c2spJjB4N2YpPT0gZW9sKSk7Ci0gICAgICAgICAgICAgICAgIGkrKyxwZGVzdCsrKTsKLSAgICAg ICAgICAgICpwZGVzdCA9ICdcMCc7Ci0gICAgICAgICAgICByZXN0IC09IG47Ci0gICAgICAgIH0K LSAgICB9IHdoaWxlICgocmVzdCA+IDApICYmICghZ290ZW9sKSk7Ci0KLSAgICBpZiAoZ290ZW9s KSB7Ci0gICAgICAgIG4gPSBtYXggLSByZXN0OwotICAgICAgICBkZWJ1ZyAoRjExMSwieDI1aW5s IFguMjUgZ290IiwoY2hhciAqKSBkZXN0LG4pOwotICAgICAgICBpZiAodGltbykgdHRpbW9mZigp OwotICAgICAgICBpZiAodHRwZmxnKysgPT0gMCAmJiB0dHBydHkgPT0gMCkgewotICAgICAgICAg ICAgaWYgKCh0dHBydHkgPSBwYXJjaGsoZGVzdCxzdGFydCxuKSkgPiAwKSB7Ci0gICAgICAgICAg ICAgICAgaW50IGo7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwieDI1aW5sIHNlbnNlcyBw YXJpdHkiLCIiLHR0cHJ0eSk7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwieDI1aW5sIHBh Y2tldCBiZWZvcmUiLChjaGFyICopZGVzdCwwKTsKLSAgICAgICAgICAgICAgICB0dHBtc2sgPSAw eDdmOwotICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBuOyBqKyspCi0gICAgICAgICAg ICAgICAgICBkZXN0W2pdICY9IDB4N2Y7IC8qIFN0cmlwIHBhcml0eSBmcm9tIHBhY2tldCAqLwot ICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsIngyNWlubCBwYWNrZXQgYWZ0ZXIgIixkZXN0LDAp OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJwYXJj aGsiLCIiLHR0cHJ0eSk7Ci0gICAgICAgICAgICAgICAgaWYgKHR0cHJ0eSA8IDApIHsgdHRwcnR5 ID0gMDsgbiA9IC0xOyB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdHRpbW9m ZigpOwotICAgICAgICByZXR1cm4obik7Ci0gICAgfQotICAgIHR0aW1vZmYoKTsKLSAgICByZXR1 cm4oLTEpOwotfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNlbmRpZiAvKiBTVU5YMjUgKi8KLQot I2lmZGVmIElCTVgyNQotLyoKLSAqIElCTSBYMjUgc3VwcG9ydCAtIHVzaW5nIHRoZSBOUEkgc3Ry ZWFtcyBpbnRlcmZhY2UKLSAqIHdyaXR0ZW4gYnkgU3RlcGhlbiBSaWVobSwgcGMtcGx1cywgTXVu aWNoIEdlcm1hbnkKLSAqLwotCi0vKiByaWVobTogbWlzc2luZyBmdW5jdGlvbnMgLyBUT0RPIGxp c3QgKi8KLQotLyoKLSAgeDI1aW50cigpIC0gU2VuZCBhbiBpbnRlcnJ1cHQgcGFja2V0Ci0qLwot Ci0vKiByZXR1cm4gYW4gZXJyb3IgbWVzc2FnZSBkZXBlbmRpbmcgb24gcGFja2V0IHR5cGUgKi8K LWNoYXIgKgoteDI1ZXJyKG4pIGludCBuOyB7Ci0gICAgc3RhdGljIGNoYXIgYnVmWzMwXTsKLSAg ICBzd2l0Y2ggKG4pIHsKLSAgICAgIGNhc2UgTkJBREFERFI6ICAgICByZXR1cm4gImludmFsaWQg YWRkcmVzcyI7Ci0gICAgICBjYXNlIE5CQURPUFQ6ICAgICAgcmV0dXJuICJpbnZhbGlkIG9wdGlv bnMiOwotICAgICAgY2FzZSBOQUNDRVNTOiAgICAgIHJldHVybiAibm8gcGVybWlzc2lvbiI7Ci0g ICAgICBjYXNlIE5OT0FERFI6ICAgICAgcmV0dXJuICJ1bmFibGUgdG8gYWxsb2NhdGUgYWRkcmVz cyI7Ci0gICAgICBjYXNlIE5PVVRTVEFURTogICAgcmV0dXJuICJpbnZhbGlkIHN0YXRlIjsKLSAg ICAgIGNhc2UgTkJBRFNFUTogICAgICByZXR1cm4gImludmFsaWQgc2VxdWVuY2UgbnVtYmVyIjsK LSAgICAgIGNhc2UgTlNZU0VSUjogICAgICByZXR1cm4gInN5c3RlbSBlcnJvciI7Ci0gICAgICBj YXNlIE5CQUREQVRBOiAgICAgcmV0dXJuICJpbnZhbGlkIGRhdGEgc2l6ZSI7Ci0gICAgICBjYXNl IE5CQURGTEFHOiAgICAgcmV0dXJuICJpbnZhbGlkIGZsYWciOwotICAgICAgY2FzZSBOTk9UU1VQ UE9SVDogIHJldHVybiAidW5zdXBwb3J0ZWQgcHJpbWl0aXZlIjsKLSAgICAgIGNhc2UgTkJPVU5E OiAgICAgICByZXR1cm4gImFkZHJlc3MgaW4gdXNlIjsKLSAgICAgIGNhc2UgTkJBRFFPU1BBUkFN OiByZXR1cm4gImJhZCBRT1MgcGFyYW1ldGVycyI7Ci0gICAgICBjYXNlIE5CQURRT1NUWVBFOiAg cmV0dXJuICJiYWQgUU9TIHR5cGUiOwotICAgICAgY2FzZSBOQkFEVE9LRU46ICAgIHJldHVybiAi YmFkIHRva2VuIHZhbHVlIjsKLSAgICAgIGNhc2UgTk5PUFJPVE9JRDogICByZXR1cm4gInByb3Rv Y29sIGlkIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQiOwotICAgICAgY2FzZSBOT0REQ1VEOiAgICAg IHJldHVybiAib2RkIGxlbmd0aCBjYWxsIHVzZXIgZGF0YSI7Ci0gICAgICBkZWZhdWx0OgotICAg ICAgICBja21ha21zZyhidWYsc2l6ZW9mKGJ1ZiksIlVua25vd24gTlBJIGVycm9yICIsY2tpdG9h KG4pLE5VTEwsTlVMTCk7Ci0gICAgICAgIHJldHVybiBidWY7Ci0gICAgfQotfQotCi0vKiB0dXJu IGEgbWVhbmluZ2xlc3MgcHJpbWl0aXZlIG51bWJlciBpbnRvIGEgbWVhbmluZ2Z1bCBwcmltaXRp dmUgbmFtZSAqLwotY2hhciAqCi14MjVwcmltKG4pIGludCBuOyB7Ci0gICAgc3RhdGljIGNoYXIg YnVmWzMwXTsKLSAgICBzd2l0Y2gobikgewotICAgICAgY2FzZSBOX0JJTkRfQUNLOiAgICAgcmV0 dXJuICJOX0JJTkRfQUNLIjsKLSAgICAgIGNhc2UgTl9CSU5EX1JFUTogICAgIHJldHVybiAiTl9C SU5EX1JFUSI7Ci0gICAgICBjYXNlIE5fQ09OTl9DT046ICAgICByZXR1cm4gIk5fQ09OTl9DT04i OwotICAgICAgY2FzZSBOX0NPTk5fSU5EOiAgICAgcmV0dXJuICJOX0NPTk5fSU5EIjsKLSAgICAg IGNhc2UgTl9DT05OX1JFUTogICAgIHJldHVybiAiTl9DT05OX1JFUSI7Ci0gICAgICBjYXNlIE5f Q09OTl9SRVM6ICAgICByZXR1cm4gIk5fQ09OTl9SRVMiOwotICAgICAgY2FzZSBOX0RBVEFDS19J TkQ6ICAgcmV0dXJuICJOX0RBVEFBQ0tfSU5EIjsKLSAgICAgIGNhc2UgTl9EQVRBQ0tfUkVROiAg IHJldHVybiAiTl9EQVRBQUNLX1JFUSI7Ci0gICAgICBjYXNlIE5fREFUQV9JTkQ6ICAgICByZXR1 cm4gIk5fREFUQV9JTkQiOwotICAgICAgY2FzZSBOX0RBVEFfUkVROiAgICAgcmV0dXJuICJOX0RB VEFfUkVRIjsKLSAgICAgIGNhc2UgTl9ESVNDT05fSU5EOiAgIHJldHVybiAiTl9ESVNDT05fSU5E IjsKLSAgICAgIGNhc2UgTl9ESVNDT05fUkVROiAgIHJldHVybiAiTl9ESVNDT05fUkVRIjsKLSAg ICAgIGNhc2UgTl9FUlJPUl9BQ0s6ICAgIHJldHVybiAiTl9FUlJPUl9BQ0siOwotICAgICAgY2Fz ZSBOX0VYREFUQV9JTkQ6ICAgcmV0dXJuICJOX0VYREFUQV9JTkQiOwotICAgICAgY2FzZSBOX0VY REFUQV9SRVE6ICAgcmV0dXJuICJOX0VYREFUQV9SRVEiOwotICAgICAgY2FzZSBOX0lORk9fQUNL OiAgICAgcmV0dXJuICJOX0lORk9fQUNLIjsKLSAgICAgIGNhc2UgTl9JTkZPX1JFUTogICAgIHJl dHVybiAiTl9JTkZPX1JFUSI7Ci0gICAgICBjYXNlIE5fT0tfQUNLOiAgICAgICByZXR1cm4gIk5f T0tfQUNLIjsKLSAgICAgIGNhc2UgTl9PUFRNR01UX1JFUTogIHJldHVybiAiTl9PUFRNR01UX1JF USI7Ci0gICAgICBjYXNlIE5fUkVTRVRfQ09OOiAgICByZXR1cm4gIk5fUkVTRVRfQ09OIjsKLSAg ICAgIGNhc2UgTl9SRVNFVF9JTkQ6ICAgIHJldHVybiAiTl9SRVNFVF9JTkQiOwotICAgICAgY2Fz ZSBOX1JFU0VUX1JFUTogICAgcmV0dXJuICJOX1JFU0VUX1JFUSI7Ci0gICAgICBjYXNlIE5fUkVT RVRfUkVTOiAgICByZXR1cm4gIk5fUkVTRVRfUkVTIjsKLSAgICAgIGNhc2UgTl9VREVSUk9SX0lO RDogIHJldHVybiAiTl9VREVSUk9SX0lORCI7Ci0gICAgICBjYXNlIE5fVU5CSU5EX1JFUTogICBy ZXR1cm4gIk5fVU5CSU5EX1JFUSI7Ci0gICAgICBjYXNlIE5fVU5JVERBVEFfUkVROiByZXR1cm4g Ik5fVU5JVERBVEFfUkVRIjsKLSAgICAgIGNhc2UgTl9VTklUREFUQV9JTkQ6IHJldHVybiAiTl9V TklUREFUQV9JTkQiOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgY2ttYWttc2coYnVmLHNpemVv ZihidWYpLCJVTktOT1dOICgiLGNraXRvYShuKSwiKSIsTlVMTCk7Ci0gICAgICAgIHJldHVybiBi dWY7Ci0gICAgfQotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEZ1bmN0aW9uOiB4MjVn ZXRtc2coKQotICogRGVzY3JpcHRpb246IGdldCBhIFNUUkVBTVMgbWVzc2FnZSwgYW5kIGNoZWNr IGl0IGZvciBlcnJvcnMKLSAqCi0gKiBQYXJhbWV0ZXJzOgotICogZmQgICAgICAgICAgIC0gZmls ZSBkZXNjcmlwdG9yIHRvIHgyNSBkZXZpY2UgKG9wZW5lZCkKLSAqIGNvbnRyb2wgICAgICAtIGNv bnRyb2wgYnVmZmVyIChwcmUtYWxsb2NhdGVkKQotICogY3RsX3NpemUgICAgIC0gc2l6ZSBvZiBj b250cm9sIGJ1ZmZlcgotICogZGF0YSAgICAgICAgIC0gZGF0YSBidWZmZXIgKHByZS1hbGxvY2F0 ZWQpCi0gKiBkYXRhX3NpemUgICAgLSBzaXplIG9mIGRhdGEgYnVmZmVyCi0gKiBmbGFncyAgICAg ICAgLSBmbGFncyBmb3IgZ2V0bXNnKCkKLSAqIGV4cGVjdGVkICAgICAtIGV4cGVjdGVkIFByaW1p dGl2ZSB0eXBlCi0gKgotICogUmV0dXJuIFZhbHVlOgotICogICAgICA+PSAwICAgIE9LIChzaXpl IG9mIGRhdGEgcmV0dXJuZWQpCi0gKiAgICAgIC0xICAgICAgZXJyb3IKLSAqCi0gKi8KLWludAot eDI1Z2V0bXNnKCBmZCwgY29udHJvbCwgY3RsX3NpemUsIGRhdGEsIGRhdGFfc2l6ZSwgZ2V0X2Zs YWdzLCBleHBlY3RlZCApCi0gICAgaW50ICAgICAgICAgICAgICAgICBmZDsgICAgICAgICAgICAg LyogWDI1IGRldmljZSAob3BlbmVkKSAqLwotICAgIE5fbnBpX2N0bF90ICAgICAgICAgKmNvbnRy b2w7ICAgICAgIC8qIGNvbnRyb2wgYnVmZmVyIChwcmUtYWxsb2NhdGVkKSAqLwotICAgIGludCAg ICAgICAgICAgICAgICAgY3RsX3NpemU7ICAgICAgIC8qIHNpemUgb2YgY29udHJvbCBidWZmZXIg Ki8KLSAgICBOX25waV9kYXRhX3QgICAgICAgICpkYXRhOyAgICAgICAgICAvKiBkYXRhIGJ1ZmZl ciAocHJlLWFsbG9jYXRlZCkgKi8KLSAgICBpbnQgICAgICAgICAgICAgICAgIGRhdGFfc2l6ZTsg ICAgICAvKiBzaXplIG9mIGRhdGEgYnVmZmVyICovCi0gICAgaW50ICAgICAgICAgICAgICAgICAq Z2V0X2ZsYWdzOyAgICAgLyogZ2V0bXNnKCkgZmxhZ3MgKi8KLSAgICBpbnQgICAgICAgICAgICAg ICAgIGV4cGVjdGVkOyAgICAgICAvKiBleHBlY3RlZCBwcmltaXRpdmUgdHlwZSAqLwotLyogeDI1 Z2V0bXNnICovIHsKLSAgICBpbnQgICAgICAgICAgICAgICAgIHJjID0gMDsgICAgICAgICAvKiBy ZXR1cm4gY29kZSAqLwotICAgIHN0cnVjdCBzdHJidWYgICAgICAgKmdldF9jdGw9TlVMTDsgIC8q IGdldG1zZyBjb250cm9sICovCi0gICAgc3RydWN0IHN0cmJ1ZiAgICAgICAqZ2V0X2RhdGE9TlVM TDsgLyogZ2V0bXNnIGRhdGEgKi8KLSAgICBpbnQgICAgICAgICAgICAgICAgIG1vcmUgPSAwOyAg ICAgICAvKiBmbGFnIGZvciBtb3JlIGRhdGEgZXRjICovCi0gICAgaW50ICAgICAgICAgICAgICAg ICBmaWxlX3N0YXR1cyA9IC0xOyAvKiBmaWxlIGFzeW5jIHN0YXR1cyAqLwotICAgIE5fbnBpX2N0 bF90ICAgICAgICAgKiByZXN1bHQ7ICAgICAgIC8qIHBvaW50ZXIgdG8gc2ltcGxpZnkgc3dpdGNo KCkgKi8KLSAgICBpbnQgICAgICAgICAgICAgICAgIHBhY2tldF90eXBlID0gLTE7IC8qIHVua25v d24gcGFja2V0IHRodXMgZmFyICovCi0KLSNpZmRlZiBUUkFDRQotICAgIHByaW50ZiggIlRSQUNF OiBlbnRlcmluZyB4MjVnZXRtc2dcbiIgKTsKLSNlbmRpZiAvKiBUUkFDRSAqLwotCi0gICAgZGVi dWcoIEYxMTAsICJ4MjVnZXRtc2cgd2FpdGluZyBmb3IgcGFja2V0ICIsIHgyNXByaW0oIGV4cGVj dGVkICksIDApOwotICAgIC8qIHByZXBhcmUgdGhlIGNvbnRyb2wgc3RydWN0dXJlcyBmb3IgZ2V0 bXNnICovCi0gICAgaWYgKGNvbnRyb2wpIHsKLSAgICAgICAgaWYgKChnZXRfY3RsID0gKHN0cnVj dCBzdHJidWYqKW1hbGxvYyhzaXplb2Yoc3RydWN0IHN0cmJ1ZikpKSA9PSBOVUxMKQotICAgICAg ICAgIHsKLSAgICAgICAgICAgICAgcGVycm9yKCJrZXJtaXQgeDI1Z2V0bXNnKCk6IGdldF9jdGwg bWFsbG9jIGZhaWxlZFxuIik7Ci0gICAgICAgICAgICAgIGRlYnVnKCBGMTAwLCAieDI1Z2V0bXNn IG1hbGxvYyBmYWlsZWQgZm9yIGdldF9jdGxcbiIsICIiLCAwKTsKLSAgICAgICAgICAgICAgcmV0 dXJuKC0xKTsKLSAgICAgICAgICB9Ci0gICAgICAgIC8qIGFsbG93IGdldG1zZyB0byByZXR1cm4g YW4gdW5leHBlY3RlZCBwYWNrZXQgdHlwZSAod2hpY2ggbWF5IGJlCi0gICAgICAgICAqIGxhcmdl ciB0aGFuIHRoZSBleHBlY3RlZCBvbmUpCi0gICAgICAgICAqLwotICAgICAgICBnZXRfY3RsLT5t YXhsZW4gPSBOUElfTUFYX0NUTDsKLSAgICAgICAgZ2V0X2N0bC0+bGVuID0gMDsKLSAgICAgICAg Z2V0X2N0bC0+YnVmID0gKGNoYXIgKiljb250cm9sOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHBy aW50ZigKLSAia2VybWl0IHgyNWdldG1zZygpOiBpbnRlcm5hbCBlcnJvci4gY29udHJvbCBidWZm ZXIgTVVTVCBiZSBwcmUtYWxsb2NhdGVkIVxuIgotICAgICAgICAgICAgICAgKTsKLSAgICAgICAg ZGVidWcoRjEwMCwieDI1Z2V0bXNnIGludGVybmFsIGVycm9yLiBubyBidWZmZXIgcHJlLWFsbG9j YXRlZCIsIiIsMCk7Ci0gICAgICAgIHJldHVybiggLTEgKTsKLSAgICB9Ci0gICAgaWYgKGRhdGEp IHsKLSAgICAgICAgaWYgKChnZXRfZGF0YSA9IChzdHJ1Y3Qgc3RyYnVmKiltYWxsb2Moc2l6ZW9m KHN0cnVjdCBzdHJidWYpKSkgPT0gTlVMTCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwZXJy b3IoImtlcm1pdCB4MjVnZXRtc2coKTogZ2V0X2RhdGEgbWFsbG9jIGZhaWxlZFxuIik7Ci0gICAg ICAgICAgICBkZWJ1ZyggRjEwMCwgIngyNWdldG1zZyBtYWxsb2MgZmFpbGVkIGZvciBnZXRfZGF0 YVxuIiwgIiIsIDApOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAgICAg ICBnZXRfZGF0YS0+bWF4bGVuID0gKE5QSV9NQVhfREFUQSA8IGRhdGFfc2l6ZSApID8KLSAgICAg ICAgICBOUElfTUFYX0RBVEEgOgotICAgICAgICAgICAgZGF0YV9zaXplOwotICAgICAgICBnZXRf ZGF0YS0+bGVuID0gMDsKLSAgICAgICAgZ2V0X2RhdGEtPmJ1ZiA9IChjaGFyICopZGF0YTsKLSAg ICB9Ci0KLSAgICAvKiBnZXQgYW4gWC4yNSBwYWNrZXQgLQotICAgICAqIGl0IG1heSBiZSBhbnkg a2luZCBvZiBwYWNrZXQsIHNvIGNoZWNrIGZvciBzcGVjaWFsIGNhc2VzCi0gICAgICogaXQgbWF5 IGJlIHNwbGl0IGludG8gbXVsdGlwbGUgcGFydHMgLSBzbyBsb29wIGlmIG5lY2Vzc2FyeQotICAg ICAqLwotICAgIGRvIHsKLSNpZmRlZiBERUJVRwotICAgICAgICBwcmludGYoICJrZXJtaXQ6IHgy NWdldG1zZygpOiBnZXR0aW5nIGEgbWVzc2FnZVxuIiApOwotI2VuZGlmIC8qIERFQlVHICovCi0g ICAgICAgIGVycm5vID0gMDsKLSAgICAgICAgaWYgKChtb3JlID0gZ2V0bXNnKGZkLCBnZXRfY3Rs LCBnZXRfZGF0YSwgZ2V0X2ZsYWdzKSkgPCAwKSB7Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgICAg IHByaW50ZiggImtlcm1pdDogeDI1Z2V0bXNnKCk6IGdldG1zZyByZXR1cm5lZCBhbiBlcnJvclxu IiApOwotICAgICAgICAgICAgcGVycm9yKCAiZ2V0bXNnIGVycm9yIHdhcyIgKTsKLSNlbmRpZiAv KiBERUJVRyAqLwotICAgICAgICAgICAgZGVidWcoRjEwMSwgIngyNWdldG1zZyBnZXRtc2cgcmV0 dXJuZWQgYW4gZXJyb3JcbiIsICIiLCBlcnJubyk7Ci0gICAgICAgICAgICBpZiAoKGVycm5vID09 IEVBR0FJTikgJiYgKGdldF9kYXRhICYmIChnZXRfZGF0YS0+bGVuID4gMCkpICkgewotICAgICAg ICAgICAgICAgIC8qIHdhcyBpbiBub24tYmxvY2tpbmcgbW9kZSwgbm90aGluZyB0byBnZXQsIGJ1 dCB3ZSdyZQotICAgICAgICAgICAgICAgICAqIGFscmVhZHkgd2FpdGluZyBmb3IgdGhlIHJlc3Qg b2YgdGhlIHBhY2tldCAtCi0gICAgICAgICAgICAgICAgICogc3dpdGNoIHRvIGJsb2NraW5nIG1v ZGUgZm9yIHRoZSBuZXh0IHJlYWQuCi0gICAgICAgICAgICAgICAgICogZmlsZV9zdGF0dXMgdXNl ZCB0byByZXNldCBmaWxlIHN0YXR1cyBiZWZvcmUgcmV0dXJuaW5nCi0gICAgICAgICAgICAgICAg ICovCi0gICAgICAgICAgICAgICAgaWYgKChmaWxlX3N0YXR1cyA9IGZjbnRsKGZkLCBGX0dFVEZM LCAwKSkgPCAwCi0gICAgICAgICAgICAgICAgICAgIHx8IGZjbnRsKGZkLCBGX1NFVEZMLCBmaWxl X3N0YXR1cyAmIH5PX05ERUxBWSkgPCAwKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAg ICAgICAgICAgICAgIHBlcnJvcigieDI1Z2V0bXNnKCk6IGNvdWxkbid0IGNoYW5nZSB4MjUgYmxv Y2tpbmcgbW9kZSIpOwotICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgIngyNWdldG1zZyBmY250bCByZXR1cm5lZCBhbiBlcnJvclxu IiwgIiIsIGVycm5vKTsKLSAgICAgICAgICAgICAgICAgICAgICAvKiBuZXRjbG9zKCk7ICovCi0g ICAgICAgICAgICAgICAgICAgICAgcmMgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgLyog bG9vcCBhZ2FpbiBpbnRvIGEgYmxvY2tpbmcgZ2V0bXNnKCkgKi8KLSAgICAgICAgICAgICAgICAg ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICAgICAgLyogbm8gZGF0YSB0byBnZXQgaW4gbm9uLWJsb2NraW5nIG1vZGUg LSByZXR1cm4gZW1wdHkgaGFuZGVkICovCi0gICAgICAgICAgICAgICAgcGVycm9yKCAieDI1Z2V0 bXNnKCk6IGdldG1zZyBmYWlsZWQiICk7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwieDI1 Z2V0bXNnIGdldG1zZyByZXR1cm5lZCBhbiBlcnJvclxuIiwgIiIsIGVycm5vKTsKLSAgICAgICAg ICAgICAgICByYyA9IC0xOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot ICAgICAgICB9IGVsc2UgaWYgKG1vcmUgJiBNT1JFQ1RMKSB7Ci0gICAgICAgICAgICAvKiBwYW5p YyAtIHRoZSBjb250cm9sIGluZm9ybWF0aW9uIHdhcyBsYXJnZXIgdGhhbiB0aGUKLSAgICAgICAg ICAgICAqIG1heGltdW0gY29udHJvbCBidWZmZXIgc2l6ZSEKLSAgICAgICAgICAgICAqLwotICAg ICAgICAgICAgLyogcmllaG06IGNsb3NlIGNvbm5lY3Rpb24/ICovCi0jaWZkZWYgREVCVUcKLSAg ICAgICAgICAgIHByaW50ZigieDI1Z2V0bXNnKCk6IHJlY2VpdmVkIHBhcnRpYWwgY29udHJvbCBw YWNrZXQgLSBwYW5pY1xuIik7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICAgICAgICAgIGRlYnVn KCBGMTAxLCAieDI1Z2V0bXNnIGdldG1zZyBiYWQgY29udHJvbCBibG9ja1xuIiwgIiIsIGVycm5v KTsKLSAgICAgICAgICAgIHJjID0gLTE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot Ci0gICAgICAgIGlmIChyZXN1bHQgPSAoTl9ucGlfY3RsX3QgKiljb250cm9sKSB7Ci0gICAgICAg ICAgICBwYWNrZXRfdHlwZSA9IHJlc3VsdC0+YmluZF9hY2suUFJJTV90eXBlOwotICAgICAgICAg ICAgaWYgKHBhY2tldF90eXBlICE9IE5fT0tfQUNLKSB7Ci0gICAgICAgICAgICAgICAgeDI1bGFz dG1zZyA9IHBhY2tldF90eXBlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jaWZkZWYgREVC VUcKLSAgICAgICAgLyogcHJpbnRmKCAia2VybWl0OiB4MjVnZXRtc2coKTogZ2V0dGluZyAiICk7 ICovCi0gICAgICAgIGlmIChnZXRfY3RsLT5sZW4gPiAwKSB7Ci0gICAgICAgICAgICB4MjVkdW1w X3ByaW0ocmVzdWx0KTsKLSAgICAgICAgfQotICAgICAgICBkZWJ1ZyhGMTEwLAotICAgICAgICAg ICAgICAieDI1Z2V0bXNnIGdvdCBwYWNrZXQgIiwKLSAgICAgICAgICAgICAgeDI1cHJpbSggcmVz dWx0LT5iaW5kX2Fjay5QUklNX3R5cGUgKSwKLSAgICAgICAgICAgICAgMAotICAgICAgICAgICAg ICApOwotI2VuZGlmIC8qIERFQlVHICovCi0KLSAgICAgICAgaWYgKGdldF9jdGwtPmxlbiA+PSAo aW50KXNpemVvZihyZXN1bHQtPmJpbmRfYWNrLlBSSU1fdHlwZSkpIHsKLSAgICAgICAgICAgIC8q IG5vdCBhcyBwcmV0dHkgYXMgYSBzd2l0Y2goKSwgYnV0IHN3aXRjaCBjYW4ndCBoYW5kbGUKLSAg ICAgICAgICAgICAqIHJ1bnRpbWUgdmFyaWFibGUgdmFsdWVzIDotKAotICAgICAgICAgICAgICov Ci0gICAgICAgICAgICBpZiAocGFja2V0X3R5cGUgPT0gZXhwZWN0ZWQgKSB7Ci0gICAgICAgICAg ICAgICAgLyogZ290IHdoYXQgd2Ugd2FudGVkLCBzcGVjaWFsIGNhc2UgZm9yIERBVEFfSU5ECi0g ICAgICAgICAgICAgICAgICogcGFja2V0cyB0aG91Z2ggKi8KLSAgICAgICAgICAgICAgICAvKiBy aWVobTogY2hlY2sgUS1iaXQgPyAqLwotI2lmZGVmIERFQlVHCi0gICAgICAgICAgICAgICAgcHJp bnRmKCJ4MjVnZXRtc2coKTogZ290IGV4cGVjdGVkIHBhY2tldFxucmMgaXMgJWRcbiIsIHJjKTsK LSNlbmRpZiAvKiBERUJVRyAqLwotICAgICAgICAgICAgICAgIGlmIChwYWNrZXRfdHlwZSA9PSBO X0RBVEFfSU5EICkgewotICAgICAgICAgICAgICAgICAgICAvKiBkYXRhIHJlY2VpdmVkLiBNYXkg YmUgaW5jb21wbGV0ZSwgZXZlbiB0aG91Z2gKLSAgICAgICAgICAgICAgICAgICAgICogZ2V0bXNn IHJldHVybmVkIE9LCi0gICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAg ICBpZiAocmVzdWx0LT5kYXRhX2luZC5EQVRBX3hmZXJfZmxhZ3MgJiBOX01PUkVfREFUQV9GTEFH KQotICAgICAgICAgICAgICAgICAgICAgICAgbW9yZSB8PSBNT1JFREFUQTsKLSAgICAgICAgICAg ICAgICAgICAgaWYgKHJlc3VsdC0+ZGF0YV9pbmQuREFUQV94ZmVyX2ZsYWdzICYgTl9SQ19GTEFH KQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCAieDI1Z2V0bXNnKCk6IGRhdGEgcGFj a2V0IHdhbnRzIGFja1xuIiApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxz ZSBpZiggcGFja2V0X3R5cGUgPT0gTl9ESVNDT05fSU5EKSB7Ci0gICAgICAgICAgICAgICAgcHJp bnRmKCAiWDI1IGRpY29ubmVjdGVkXG4iICk7Ci0gICAgICAgICAgICAgICAgLyogcmllaG06IG5l ZWQgdG8gYWNrbm93bGVkZ2UgYSBkaXNjb25uZWN0aW9uPyAqLwotICAgICAgICAgICAgICAgIHgy NWNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgLyogeDI1dW5iaW5kKCB0dHlmZCApOyAqLwotICAg ICAgICAgICAgICAgIHJjID0gLTE7Ci0gICAgICAgICAgICB9IGVsc2UgaWYoIHBhY2tldF90eXBl ID09IE5fRVJST1JfQUNLKSB7Ci0gICAgICAgICAgICAgICAgZXJybm8gPSByZXN1bHQtPmVycm9y X2Fjay5VTklYX2Vycm9yOwotICAgICAgICAgICAgICAgIHBlcnJvciggIlgyNSBlcnJvciByZWNl aXZlZCIgKTsKLSAgICAgICAgICAgICAgICByYyA9IC0xOwotICAgICAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgICAgICBwcmludGYoIngyNWdldG1zZygpOiBmYWlsZWQgJXNcbiIsIHgyNWVy cihwYWNrZXRfdHlwZSkpOwotICAgICAgICAgICAgICAgIHJjID0gLTE7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgIH0KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIGVsc2UgewotICAgICAgICAgICAg LyogUGFuaWMgLSBubyBjb250cm9sIGRhdGEgKi8KLSAgICAgICAgICAgIHByaW50ZiggImtlcm1p dDogeDI1Z2V0bXNnKCk6IG5vIGNvbnRyb2wgZGF0YSB3aXRoIHBhY2tldFxuIiApOwotICAgICAg ICAgICAgcmMgPSAtMTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgICAg ICBpZiAoZ2V0X2RhdGEgJiYgKGdldF9kYXRhLT5sZW4gPj0gMCkpIHsKLSAgICAgICAgICAgIGdl dF9kYXRhLT5idWYgKz0gZ2V0X2RhdGEtPmxlbjsKLSAgICAgICAgICAgIGdldF9kYXRhLT5tYXhs ZW4gLT0gZ2V0X2RhdGEtPmxlbjsKLSAgICAgICAgfQotICAgIH0gd2hpbGUgKChyYyA9PSAwKQot ICAgICAgICAgICAgICYmIChnZXRfZGF0YSAmJiAoZ2V0X2RhdGEtPm1heGxlbiA+IDApKQotICAg ICAgICAgICAgICYmIChtb3JlICYgTU9SRURBVEEpCi0gICAgICAgICAgICAgKTsKLQotICAgIC8q IHJldHVybiB0aGUgZmlsZSBzdGF0dXMgdG8gaXRzIG9yaWdpbmFsIHZhbHVlLCB1bmxlc3MgaXRz IHN0aWxsCi0gICAgICogc2V0IHRvIC0xLCBvciBvbmUgb2YgdGhlIGZjbnRsJ3MgZmFpbGVkICov Ci0gICAgaWYgKChmaWxlX3N0YXR1cyA+PSAwKSAmJiBmY250bChmZCwgRl9TRVRGTCwgZmlsZV9z dGF0dXMpIDwgMCkKLSAgICAgICAgcmMgPSAtMTsKLQotICAgIC8qCi0gICAgICogVmVyaWZ5IHRo YXQgd2UgcmVjZWl2ZWQgYW4gZXhwZWN0ZWQgcHJpbWl0aXZlCi0gICAgICogdGhlcmUgaXMgYXBw YXJhbnRseSBhbiBlcnJvciBjYXNlIHdoZXJlIHRoZSBwcmltaXRpdmUgaXMgc2V0Ci0gICAgICog Y29ycmVjdGx5LCBidXQgdGhlcmUgaXMgbm90IGVub3VnaCBkYXRhIGluIHRoZSBjb250cm9sIHN0 cnVjdHVyZQotICAgICAqLwotICAgIGlmICgocGFja2V0X3R5cGUgIT0gZXhwZWN0ZWQpICYmIChn ZXRfY3RsLT5sZW4gPj0gY3RsX3NpemUpICkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAg ICAgICAgICAgICAgICAieDI1Z2V0bXNnKCk6ICVzIE5PVCByZWNlaXZlZC4gUHJpbWl0aXZlIHJl Y2VpdmVkIHdhcyAlc1xuIiwKLSAgICAgICAgICAgICAgICB4MjVwcmltKCBleHBlY3RlZCApLCB4 MjVwcmltKCBwYWNrZXRfdHlwZSApKTsKLSAgICAgICAgZGVidWcoRjExMCwgIngyNWdldG1zZyBn b3QgYW4gdW5leHBlY3RlZCBwYWNrZXQgIiwKLSAgICAgICAgICAgICAgeDI1cHJpbShwYWNrZXRf dHlwZSksCi0gICAgICAgICAgICAgIDAKLSAgICAgICAgICAgICAgKTsKLSAgICAgICAgcmMgPSAt MTsKLSAgICB9Ci0KLSAgICBpZiAocmMgPT0gMCkgewotICAgICAgICBpZiAoZ2V0X2RhdGEgJiYg KCBnZXRfZGF0YS0+bGVuID49IDApKSB7Ci0gICAgICAgICAgICByYyA9IGdldF9kYXRhLT5sZW47 Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZ2V0X2N0bCkgIHsgZnJlZShnZXRfY3RsKTsg Z2V0X2N0bCA9IE5VTEw7IH0KLSAgICBpZiAoZ2V0X2RhdGEpIHsgZnJlZShnZXRfZGF0YSk7IGdl dF9kYXRhID0gTlVMTDsgfQotCi0jaWZkZWYgQ09NTUVOVAotI2lmZGVmIERFQlVHCi0gICAgcHJp bnRmKCAia2VybWl0IHgyNWdldG1zZygpOiByZXR1cm5pbmcgJWRcbiIsIHJjICk7Ci0jZW5kaWYg LyogREVCVUcgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgZGVidWcoRjExMCwgIngyNWdl dG1zZyByZXR1cm5pbmcgcGFja2V0ICIsIHgyNXByaW0oIHBhY2tldF90eXBlICksIDApOwotCi0j aWZkZWYgVFJBQ0UKLSAgICBwcmludGYoICJUUkFDRTogbGVhdmluZyB4MjVnZXRtc2dcbiIgKTsK LSNlbmRpZiAvKiBUUkFDRSAqLwotICAgIHJldHVybihyYyk7Ci19Ci0KLS8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKgotICogRnVuY3Rpb246IHgyNXB1dG1zZygpCi0gKgotICogRGVzY3JpcHRpb246Ci0g KiAgICAgIHNlbmQgYSBtZXNzYWdlIHRvIGEgWDI1IFNUUkVBTQotICoKLSAqIFBhcmFtZXRlcnM6 Ci0gKiAgICAgIGZkICAgICAgICAgICAgICAtIGZpbGUgZGVzY3JpcHRvciB0byB4MjUgZGV2aWNl IChvcGVuZWQpCi0gKiAgICAgIGNvbnRyb2wgICAgICAgICAtIGNvbnRyb2wgYnVmZmVyIChwcmUt YWxsb2NhdGVkKQotICogICAgICBkYXRhICAgICAgICAgICAgLSBkYXRhIGJ1ZmZlciAocHJlLWFs bG9jYXRlZCkKLSAqICAgICAgZGF0YV9sZW4gICAgICAgIC0gbGVuZ3RoIG9mIGRhdGEgdG8gYmUg dHJhbnNtaXR0ZWQKLSAqICAgICAgcHV0X2ZsYWdzICAgICAgIC0gZmxhZ3MgZm9yIHB1dG1zZygp Ci0gKgotICogUmV0dXJuIFZhbHVlOgotICogICAgICA+PSAwICAgIG51bWJlciBvZiBieXRlcyB0 cmFuc21pdHRlZAotICogICAgICAtMSAgICAgIGVycm9yCi0gKi8KLWludAoteDI1cHV0bXNnKGZk LCBjb250cm9sLCBkYXRhLCBkYXRhX2xlbiwgcHV0X2ZsYWdzKQotICAgIGludCAgICAgICAgICAg ICAgICAgZmQ7ICAgICAgICAgICAgIC8qIFgyNSBkZXZpY2UgKG9wZW5lZCkgKi8KLSAgICBOX25w aV9jdGxfdCAgICAgICAgICpjb250cm9sOyAgICAgICAvKiBjb250cm9sIGJ1ZmZlciAocHJlLWFs bG9jYXRlZCkgKi8KLSAgICBOX25waV9kYXRhX3QgICAgICAgICpkYXRhOyAgICAgICAgICAvKiBk YXRhIGJ1ZmZlciAocHJlLWFsbG9jYXRlZCkgKi8KLSAgICBpbnQgICAgICAgICAgICAgICAgIGRh dGFfbGVuOyAgICAgICAvKiBsZW5ndGggb2YgZGF0YSAobm90IHRoZSBzaXplIG9mCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJ1ZmZlcikgKi8KLSAgICBp bnQgICAgICAgICAgICAgICAgICpwdXRfZmxhZ3M7ICAgICAvKiBwdXRtc2coKSBmbGFncyAqLwot LyogeDI1cHV0bXNnICovIHsKLSAgICBpbnQgICAgICAgICAgICAgICAgIHJjID0gMDsgICAgICAg ICAvKiByZXR1cm4gY29kZSAqLwotICAgIHVsb25nICAgICAgICAgICAgICAgdHlwZTsgICAgICAg ICAgIC8qIHByaW1pdGl2ZSB0eXBlICovCi0gICAgc3RydWN0IHN0cmJ1ZiAgICAgICAqcHV0X2N0 bCA9IE5VTEw7IC8qIHB1dG1zZyBjb250cm9sICovCi0gICAgc3RydWN0IHN0cmJ1ZiAgICAgICAq cHV0X2RhdGEgPSBOVUxMOyAvKiBwdXRtc2cgZGF0YSAqLwotCi0jaWZkZWYgVFJBQ0UKLSAgICBw cmludGYoICJUUkFDRTogZW50ZXJpbmcgeDI1cHV0bXNnXG4iICk7Ci0jZW5kaWYgLyogVFJBQ0Ug Ki8KLQotI2lmZGVmIERFQlVHCi0gICAgcHJpbnRmKCAia2VybWl0OiB4MjVwdXRtc2coKTogcHV0 dGluZyAiICk7Ci0gICAgeDI1ZHVtcF9wcmltKCBjb250cm9sICk7Ci0gICAgcHJpbnRmKCAiXHRk YXRhOlx0XHQiICk7Ci0gICAgeDI1ZHVtcF9kYXRhKCBkYXRhLCAwLCBkYXRhX2xlbiApOwotICAg IGRlYnVnKEYxMTAsIngyNXB1dG1zZzogcHV0dGluZyBwYWNrZXQgIix4MjVwcmltKGNvbnRyb2wt PlBSSU1fdHlwZSksMCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotICAgIGlmIChjb250cm9sKSB7 Ci0gICAgICAgIHB1dF9jdGwgPSAoc3RydWN0IHN0cmJ1ZiAqKW1hbGxvYyggc2l6ZW9mKCBzdHJ1 Y3Qgc3RyYnVmICkgKTsKLSAgICAgICAgaWYgKHB1dF9jdGwgPT0gTlVMTCkgewotICAgICAgICAg ICAgcGVycm9yKCJrZXJtaXQgeDI1cHV0bXNnKCk6IHB1dF9jdGwgbWFsbG9jIGZhaWxlZFxuIik7 Ci0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0gICAgICAgIHB1dF9jdGwtPm1h eGxlbiA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiB1bnVzZWQgYnkgcHV0bXNnICovCi0gICAg ICAgIHB1dF9jdGwtPmxlbiA9IE5QSV9NQVhfQ1RMOwotICAgICAgICBwdXRfY3RsLT5idWYgPSAo Y2hhciAqKWNvbnRyb2w7Ci0gICAgfQotICAgIGlmIChkYXRhICYmICggZGF0YV9sZW4gPiAwKSkg ewotICAgICAgICBwdXRfZGF0YSA9IChzdHJ1Y3Qgc3RyYnVmICopbWFsbG9jKCBzaXplb2YoIHN0 cnVjdCBzdHJidWYgKSApOwotICAgICAgICBpZiggcHV0X2RhdGEgPT0gTlVMTCkgewotICAgICAg ICAgICAgcGVycm9yKCJrZXJtaXQgeDI1cHV0bXNnKCk6IHB1dF9kYXRhIG1hbGxvYyBmYWlsZWRc biIpOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAgICAgICBwdXRfZGF0 YS0+bWF4bGVuID0gMDsgICAgICAgICAgICAgICAgICAgLyogdW51c2VkIGJ5IHB1dG1zZyAqLwot ICAgICAgICBwdXRfZGF0YS0+bGVuID0gZGF0YV9sZW47Ci0gICAgICAgIHB1dF9kYXRhLT5idWYg PSAoY2hhciAqKWRhdGE7Ci0gICAgfQotCi0gICAgZXJybm8gPSAwOwotICAgIHJjID0gcHV0bXNn IChmZCwgcHV0X2N0bCwgcHV0X2RhdGEsIDApOwotICAgIGlmIChyYyA8IDApIHsKLSAgICAgICAg cHJpbnRmKCJ4MjVwdXRtc2coKTogY291bGRuJ3QgcHV0ICVzXG4iLHgyNXByaW0oY29udHJvbC0+ UFJJTV90eXBlKSk7Ci0gICAgICAgIHBlcnJvcigia2VybWl0OiB4MjVwdXRtc2coKTogcHV0bXNn IGZhaWxlZCIpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLQotICAgIC8qIHJpZWhtOiB0 aGlzIHNob3VsZCBwZXJoYXBzIGJlIGRpc2NvdW50ZWQhICovCi0gICAgeDI1bGFzdG1zZyA9IGNv bnRyb2wtPlBSSU1fdHlwZTsKLQotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBERUJVRwotICAgIHBy aW50ZiggImtlcm1pdCBkZWJ1ZzogeDI1cHV0bXNnKCkgcmV0dXJuaW5nICVkXG4iLCBkYXRhX2xl biApOwotI2VuZGlmIC8qIERFQlVHICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIGRlYnVn KCBGMTAxLCAieDI1cHV0bXNnIGJsb2NrIHNpemUgcHV0ICIsICIiLCBkYXRhX2xlbik7Ci0KLSNp ZmRlZiBUUkFDRQotICAgIHByaW50ZiggIlRSQUNFOiBsZWF2aW5nIHgyNXB1dG1zZ1xuIiApOwot I2VuZGlmIC8qIFRSQUNFICovCi0KLSAgICByZXR1cm4oIGRhdGFfbGVuICk7Ci19Ci0KLS8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKgotKiBGdW5jdGlvbjogeDI1YmluZAotKiBEZXNjcmlwdGlvbjogIFRo ZSBiaW5kIHN1Ym1pdHRlZCB0byBOUEkgcHJvdmlkZXMgdGhlIGluZm9ybWF0aW9uIHJlcXVpcmVk Ci0qICAgICAgICAgICAgICAgYnkgdGhlIHBhY2tldCBsYXllciBmb3IgaXQgdG8gbGlzdGVuIGZv ciBzdWl0YWJsZSBpbmNvbWluZwotKiAgICAgICAgICAgICAgIGNhbGxzLgotKgotKiBXQVJOSU5H OgotKgotKiBUaGlzIHJvdXRpbmUgbmVlZHMgdG8gYmUgY2FsbGVkIGluIGEgY29tcGxldGVseSBk aWZmZXJlbnQgbWFubmVyIGZvcgotKiB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIgc2lkZS4gV2hlbiBz dGFydGluZyBhIGNsaWVudCwgdGhlCi0qIG51bV93YWl0aW5nX2NhbGxzIGFuZCBDVUQgaW5mb3Jt YXRpb24gc2hvdWxkIGFsbCBiZSBzZXQgdG8gMCEgVGhlCi0qIGNsaWVudCdzIENVRCBtdXN0IGJl IGluc2VydGVkIGluIHRoZSBDT05OX1JFUSBkYXRhIGJsb2NrLgotKiBXaGVuIHN0YXJ0aW5nIGEg c2VydmVyLCB0aGUgQ1VEIG11c3QgYmUgc2V0IHRvIGEgQ1VEIHBhdHRlcm4sIGFuZAotKiB0aGUg bnVtYmVyIG9mIHdhaXRpbmcgY2FsbHMgc2hvdWxkIGJlIHNldCB0byBhIG51bWJlciBvdGhlciB0 aGFuIDAuCi0qIChudW0gd2FpdGluZyBjYWxscyBpcyB0aGUgbnVtYmVyIG9mIGluY29tbWluZyBj YWxscyB3aGljaCBhcmUgdG8gYmUKLSogcHV0IG9uIGhvbGQgd2hpbGUgdGhlIHNlcnZlciBpcyBz ZXJ2aWNpbmcgYW5vdGhlciBjbGllbnQuKQotKgotKiBXaG8gaW52ZW50ZWQgdGhpcyBjcmFwPwot KgotKiBQYXJhbWV0ZXJzOgotKiAgICAgICBmZCAgICAgICAgICAgICAgLSBYMjUgZGV2aWNlIChv cGVuZWQpCi0qICAgICAgIGFkZHIgICAgICAgICAgICAtIGxvY2FsIGFkZHJlc3MKLSogICAgICAg Y3VkICAgICAgICAgICAgIC0gVXNlciBEYXRhIChudWxsIHRlcm1pbmF0ZWQpCi0qICAgICAgIGN1 ZF9sZW4gICAgICAgICAtIFVzZXIgRGF0YSBsZW5ndGgKLSogICAgICAgbnVtX3dhaXRpbmdfY2Fs bHMgLSBudW1iZXIgb2Ygb3V0c3RhbmRpbmcgY2FsbHMgYWxsb3dlZCBvbiB0aGlzIHN0cmVhbQot KiAgICAgICBsaW5lICAgICAgICAgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyICgxKQotKiAgICAg ICBmbGFncyAgICAgICAgICAgLSAwLCBERUZBVUxUX0xJU1RFTkVSIG9yIFRPS0VOX1JFUVVFU1QK LSoKLSogUmV0dXJuIFZhbHVlOgotKiAgICAgICBpZiBiaW5kaW5nIGlzIHN1Y2Nlc3NmdWwsIDAg aXMgcmV0dXJuZWQgZm9yIGEgY2xpZW50LCBhbmQgYSB0b2tlbiBpcwotKiAgICAgICByZXR1cm5l ZCBmb3IgYSBzZXJ2ZXIKLSoKLSogUmV0dXJuIGNvZGU6IDAgaWYgc3VjY2Vzc2Z1bAotKiAgICAg ICAgICAgICAgLTEgaWYgdW5zdWNjZXNzZnVsCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdWxv bmcKLXgyNWJpbmQoZmQsIGFkZHIsIGN1ZCwgY3VkX2xlbiwgbnVtX3dhaXRpbmdfY2FsbHMsIGxp bmUsIGJpbmRfZmxhZ3MpCi0gICAgaW50IGZkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogWDI1IGRldmljZSAob3BlbmVkKSAqLwotICAgIGNoYXIgKiBhZGRyOyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIGxvY2FsIGFkZHJlc3MgKi8KLSAgICBjaGFyICogY3VkOyAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBDYWxsIFVzZXIgRGF0YSAobnVsbCB0ZXJtaW5hdGVkKSAqLwotICAg IGludCBjdWRfbGVuOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVzZXIgRGF0YSBsZW5ndGgg Ki8KLSAgICBpbnQgbnVtX3dhaXRpbmdfY2FsbHM7ICAgICAgICAgICAgICAvKiBPdXRzdGFuZGlu ZyBjYWxscyBhbGxvd2VkICovCi0gICAgaW50IGxpbmU7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogbG9naWNhbCBwb3J0IG51bWJlciAqLwotICAgIHVsb25nIGJpbmRfZmxhZ3M7ICAgICAg ICAgICAvKiAwLCBERUZBVUxUX0xJU1RFTkVSIG9yIFRPS0VOX1JFUVVFU1QgKi8KLS8qIHgyNWJp bmQgKi8gewotICAgIHVsb25nIHJjOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldHVy biBjb2RlICovCi0gICAgaW50IGdldF9mbGFnczsgICAgICAgICAgICAgICAgICAgICAgLyogcHJp b3JpdHkgZmxhZyBwYXNzZWQgdG8gZ2V0bXNnICovCi0gICAgaW50IHB1dF9mbGFncyA9IDA7ICAg ICAgICAgICAgICAgICAgLyogb3V0cHV0IGZsYWdzIGZvciBwdXRtc2csIGFsd2F5cyAwICovCi0g ICAgdWxvbmcgdHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJpbWl0aXZlIHR5cGUg Ki8KLSAgICBOX2JpbmRfcmVxX3QgKmJpbmRfcmVxOyAgICAgICAgICAgICAvKiBwb2ludGVyIHRv IE5fQklORF9SRVEgcHJpbWl0aXZlICovCi0gICAgTl9iaW5kX2Fja190ICpiaW5kX2FjazsgICAg ICAgICAgICAgLyogcG9pbnRlciB0byBOX0JJTkRfQUNLIHByaW1pdGl2ZSAqLwotICAgIGNoYXIg KmFkZHRsX2luZm87ICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gaW5mbyBpbiBhZGRp dGlvbiB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBO X0JJTkRfUkVRIHByaW1pdGl2ZSB0aGF0IGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICogcGFzc2VkIGluIHRoZSBjb250cm9sIHN0cnVjdHVyZQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRvIHB1dG1zZyAqLwotICAgIGludCBh ZGRyX2xlbiA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBvZiBhZGRyZXNzIHN0cmlu ZyAqLwotICAgIHVsb25nIGJpbmRfcmVxX3Rfc2l6ZTsgICAgICAgICAgICAgIC8qIGZvciBkZWJ1 Z2dpbmcgb25seSAqLwotCi0jaWZkZWYgVFJBQ0UKLSAgICBwcmludGYoIlRSQUNFOiBlbnRlcmlu ZyB4MjViaW5kXG4iICk7Ci0jZW5kaWYgLyogVFJBQ0UgKi8KLQotI2lmZGVmIERFQlVHCi0gICAg cHJpbnRmKCJUUkFDRTogeDI1YmluZCggJWQsICVzLCAlcywgJWQsICVkIClcbiIsCi0gICAgICAg ICAgIGZkLCBhZGRyLCBjdWQsIGxpbmUsIGJpbmRfZmxhZ3MKLSAgICAgICAgICAgKTsKLSNlbmRp ZiAvKiBERUJVRyAqLwotCi0gICAgLyoKLSAgICAgKiBBbGxvY2F0ZSAgYW5kIHplcm8gb3V0IHNw YWNlIHRvIGhvbGQgdGhlIGNvbnRyb2wgcG9ydGlvbiBvZiB0aGUKLSAgICAgKiBtZXNzYWdlIHBh c3NlZCB0byBwdXRtc2cuIFRoaXMgd2lsbCBjb250YWluIHRoZSBOX0JJTkRfUkVRCi0gICAgICog cHJpbWl0aXZlIGFuZCBhbnkgYWRkaXRpb25hbCBpbmZvIHJlcXVpcmVkIGZvciB0aGF0LgotICAg ICAqCi0gICAgICogTm90ZTogYWxsb2NhdGVkIHNwYWNlIGlzIHRoZSBzaXplIG9mIHRoZSB1bmlv biB0eXBlZGVmCi0gICAgICogTl9ucGlfY3RsX3QgdG8gYWxsb3cgdGhlIHVzZSBmbyB0aGUgZ2Vu ZXJpYyB4MjVwdXRtc2cgcm91dGluZS4KLSAgICAgKi8KLSAgICBiaW5kX3JlcSA9IChOX2JpbmRf cmVxX3QgKikgbWFsbG9jKHNpemVvZiggTl9ucGlfY3RsX3QpKTsKLSAgICBpZiAoYmluZF9yZXEg PT0gTlVMTCkgewotICAgICAgICBwZXJyb3IoImtlcm1pdDogeDI1YmluZCgpOiBiaW5kX3JlcSBt YWxsb2MgZmFpbGVkIik7Ci0gICAgICAgIGRlYnVnKEYxMDAsICJ4MjViaW5kIGJpbmRfcmVxIG1h bGxvYyBmYWlsZWQiLCAiIiwgMCk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIGJ6 ZXJvKChjaGFyICopYmluZF9yZXEsIHNpemVvZihOX25waV9jdGxfdCkpOwotCi0gICAgLyogQnVp bGQgdGhlIEJpbmQgUmVxdWVzdCBQcmltaXRpdmUgKi8KLSAgICBiaW5kX3JlcS0+UFJJTV90eXBl ID0gKHVsb25nKSBOX0JJTkRfUkVROwotCi0gICAgLyogTm90ZSB0aGF0IHRoZSBhZGRyZXNzIGxl bmd0aCBpcyBuKzIgYW5kIE5PVCBuLiBUd28gYnl0ZXMgTVVTVCBwcmVjZWVkCi0gICAgICogdGhl IGFjdHVhbCBhZGRyZXNzIGluIGFuIE5fQklORF9SRVEuIFRoZSBmaXJzdCBieXRlIGNvbnRhaW5z IHRoZQotICAgICAqIGxpbmUgbnVtYmVyIGJlaW5nIHVzZWQgd2l0aCB0aGlzIGFkZHJlc3MsIGFu ZCB0aGUgc2Vjb25kIGJ5dGUgaXMgdGhlCi0gICAgICogWC4xMjEgYWRkcmVzcyBwcmVmaXgsIHdo aWNoIG11c3QgYmUgemVyby4KLSAgICAgKi8KLSAgICBhZGRyX2xlbiA9IHN0cmxlbihhZGRyKTsK LSAgICBiaW5kX3JlcS0+QUREUl9sZW5ndGggPSAodWxvbmcpIChhZGRyX2xlbiArIDIpOwotICAg IGJpbmRfcmVxLT5BRERSX29mZnNldCA9ICh1bG9uZykoc2l6ZW9mKE5fYmluZF9yZXFfdCkpOwot ICAgIGJpbmRfcmVxLT5DT05JTkRfbnVtYmVyID0gKHVsb25nKW51bV93YWl0aW5nX2NhbGxzOyAv KiBzZXJ2ZXIgb25seSAqLwotICAgIGJpbmRfcmVxLT5CSU5EX2ZsYWdzID0gKHVsb25nKSBiaW5k X2ZsYWdzOyAvKiAwIGluIGNsaWVudCAqLwotICAgIGJpbmRfcmVxLT5QUk9UT0lEX2xlbmd0aCA9 ICh1bG9uZykgY3VkX2xlbjsgLyogMCBpbiBjbGllbnQgKi8KLSAgICBpZiAoY3VkX2xlbiA9PSAw KSB7Ci0gICAgICAgIGJpbmRfcmVxLT5QUk9UT0lEX29mZnNldCA9ICh1bG9uZykgMDsKLSAgICB9 IGVsc2UgewotICAgICAgICAvKiBuZWVkIHRvIHJlbWVtYmVyIHRoZSB0cmFpbGluZyBOVUxMIGlu IHRoZSBhZGRyZXNzIC0gbm90Ci0gICAgICAgICAqIGNvdW50ZWQgaW4gdGhlIGFkZHJlc3MgbGVu Z3RoCi0gICAgICAgICAqLwotICAgICAgICBiaW5kX3JlcS0+UFJPVE9JRF9vZmZzZXQKLSAgICAg ICAgICA9ICh1bG9uZykgKHNpemVvZihOX2JpbmRfcmVxX3QpICsgYmluZF9yZXEtPkFERFJfbGVu Z3RoKTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIE5vdyBmaWxsIGluIHRoZSBhZGRpdGlvbmFs IGluZm9ybWF0aW9uIHJlcXVpcmVkIHdpdGggdGhpcyBwcmltaXRpdmUKLSAgICAgKiAoYWRkcmVz cyBhbmQgcHJvdG9jb2wgaW5mb3JtYXRpb24gKENhbGwgVXNlciBEYXRhKSkKLSAgICAgKi8KLSAg ICBhZGR0bF9pbmZvID0gKGNoYXIgKikgKCh2b2lkICopYmluZF9yZXEgKyBiaW5kX3JlcS0+QURE Ul9vZmZzZXQpOwotICAgIC8qCi0gICAgICogVGhlIGJpdHdpc2UgIiYiIGVuc3VyZXMgdGhhdCB0 aGUgbGluZSBudW1iZXIgaXMgb25seSBvbmUgYnl0ZSBsb25nCi0gICAgICovCi0gICAgKmFkZHRs X2luZm8rKyA9IChjaGFyKSBsaW5lICYgMHhmZjsKLSAgICAqYWRkdGxfaW5mbysrID0gKGNoYXIp IDA7IC8qIFguMTIxIGZvcm1hdCAqLwotICAgIGJjb3B5KCBhZGRyLCBhZGR0bF9pbmZvLCBhZGRy X2xlbiApOyAvKiBpbmNsdWRlIHRyYWlsaW5nIG51bGwgKi8KLSAgICBhZGR0bF9pbmZvICs9IGFk ZHJfbGVuOwotICAgIGlmIChjdWRfbGVuID4gMCkKLSAgICAgIGJjb3B5KCBjdWQsIGFkZHRsX2lu Zm8sIGN1ZF9sZW4gKTsKLSAgICAvKgotICAgICAqIENhbGwgcHV0bXNnKCkgdG8gcHV0IHRoZSBi aW5kIHJlcXVlc3QgbWVzc2FnZSBvbiB0aGUgc3RyZWFtCi0gICAgICovCi0gICAgaWYgKHgyNXB1 dG1zZyhmZCwKLSAgICAgICAgICAgICAgICAgIChOX25waV9jdGxfdCopYmluZF9yZXEsCi0gICAg ICAgICAgICAgICAgICAoTl9ucGlfZGF0YV90ICopTlVMTCwKLSAgICAgICAgICAgICAgICAgIDAs Ci0gICAgICAgICAgICAgICAgICAmcHV0X2ZsYWdzCi0gICAgICAgICAgICAgICAgICApIDwgMCkg ewotICAgICAgICBwcmludGYoICJrZXJtaXQ6IHgyNWJpbmQoKTogeDI1cHV0bXNnIGZhaWxlZFxu IiApOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLQotICAgIC8qCi0gICAgICogQWxsb2Nh dGUgYW5kIHplcm8gb3V0IHNwYWNlIGZvciB0aGUgTl9CSU5EX0FDSyBwcmltaXRpdmUKLSAgICAg Ki8KLSAgICBiaW5kX2FjayA9IChOX2JpbmRfYWNrX3QgKikgbWFsbG9jKHNpemVvZihOX25waV9j dGxfdCkpOwotICAgIGlmIChiaW5kX2FjayA9PSBOVUxMKXsKLSAgICAgICAgcGVycm9yKCJrZXJt aXQ6IHgyNWJpbmQoKTogYmluZF9hY2sgbWFsbG9jIGZhaWxlZCIpOwotICAgICAgICByZXR1cm4o LTEpOwotICAgIH0KLSAgICBiemVybyhiaW5kX2Fjaywgc2l6ZW9mKE5fbnBpX2N0bF90KSk7Ci0g ICAgLyoKLSAgICAgKiBJbml0aWFsaXplIHRoZSBjb250cm9sIHN0cnVjdHVyZSBhbmQgZmxhZyB2 YXJpYWJsZSBzZW50IHRvIGdldG1zZwotICAgICAqLwotICAgIGdldF9mbGFncz0wOwotCi0gICAg LyogZ2V0IHRoZSBBQ0sgZm9yIHRoZSBiaW5kICovCi0jaWZkZWYgREVCVUcKLSAgICBwcmludGYo ICJrZXJtaXQ6IHgyNWJpbmQoKSB0cnlpbmcgdG8gZ2V0IGEgQklORF9BQ0tcbiIgKTsKLSNlbmRp ZiAvKiBERUJVRyAqLwotICAgIHJjID0gKHVsb25nKXgyNWdldG1zZyggZmQsIChOX25waV9jdGxf dCopYmluZF9hY2ssCi0gICAgICAgICAgICAoaW50KXNpemVvZiggTl9iaW5kX2Fja190ICksIChO X25waV9kYXRhX3QqKU5VTEwsIDAsICZnZXRfZmxhZ3MsCi0gICAgICAgICAgICBOX0JJTkRfQUNL ICk7Ci0KLSAgICAvKiB0dXJuIHF1YW50aXRpdmUgcmV0dXJuIGNvZGUgaW50byBhIHF1YWxpdGF0 aXZlIG9uZSAqLwotICAgIGlmIChyYyA+IDApIHJjID0gMDsKLQotICAgIC8qIGlmIGFsbCB3ZW50 IHdlbGwsIGdldCB0aGUgdG9rZW4gZnJvbSB0aGUgYWNrbm93bGVkZ2VtZW50IHBhY2tldCAqLwot ICAgIGlmICgoYmluZF9mbGFncyAmIFRPS0VOX1JFUVVFU1QgKSAmJiAoIHJjID49IDApKSB7Ci0g ICAgICAgIHJjID0gYmluZF9hY2stPlRPS0VOX3ZhbHVlOwotICAgIH0KLQotICAgIC8qIGZyZWUg dXAgdGhlIG1lbW9yeSB3ZSBhbGxvY2F0ZWQgZWFybGllciAqLwotICAgIGZyZWUoYmluZF9yZXEp OwotICAgIGZyZWUoYmluZF9hY2spOwotCi0jaWZkZWYgVFJBQ0UKLSAgICBwcmludGYoICJUUkFD RTogbGVhdmluZyB4MjViaW5kXG4iICk7Ci0jZW5kaWYgLyogVFJBQ0UgKi8KLQotICAgIHJldHVy biggcmMgKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIEZ1bmN0aW9uOiB4MjVjYWxs Ci0qIERlc2NyaXB0aW9uOiAgVGhpcyByb3V0aW5lIGJ1aWxkcyBhbmQgc2VuZHMgYW4gTl9DT05O X1JFUSBwcmltaXRpdmUsIHRoZW4KLSogICAgICAgICAgICAgICBjaGVja3MgZm9yIGFuIE5fQ09O Tl9DT04gcHJpbWl0aXZlIGluIHJldHVybi4KLSoKLSogUGFyYW1ldGVyczoKLSogZmQgICAgLSBm aWxlIGRlc2NyaXB0b3Igb2Ygc3RyZWFtCi0qIGNhZGRyIC0gY2FsbGVkIGFkZHJlc3MgKHJlbW90 ZSBhZGRyZXNzKQotKgotKiBGdW5jdGlvbnMgUmVmZXJlbmNlZDoKLSogbWFsbG9jKCkKLSogYnpl cm8oKQotKiBnZXRtc2coKQotKiBwdXRtc2coKQotKgotKiBSZXR1cm4gY29kZToKLSogMCAtIGlm IHN1Y2Nlc3NmdWwKLSogLTEgaWYgbm90IHN1Y2Nlc3NmdWwKLSoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LwotaW50Ci14MjVjYWxsKGZkLCByZW1vdGVfbnVhLCBjdWQpCi0gICAgaW50IGZkOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogWDI1IGRldmljZSAob3BlbmVkKSAqLwotICAgIGNoYXIg KiByZW1vdGVfbnVhOyAgICAgICAgICAgICAgICAgIC8qIHJlbW90ZSBhZGRyZXNzIHRvIGNhbGwg Ki8KLSAgICBjaGFyICogY3VkOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjYWxsIHVzZXIg ZGF0YSAqLwotLyogeDI1Y2FsbCAqLyB7Ci0gICAgaW50IHJjOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogcmV0dXJuIGNvZGUgKi8KLSAgICBpbnQgZmxhZ3M7ICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBDb25uZWN0aW9uIGZsYWdzICovCi0gICAgaW50IGdldF9mbGFnczsgICAg ICAgICAgICAgICAgICAgICAgLyogcHJpb3JpdHkgZmxhZ3MgZm9yIGdldG1zZyAqLwotICAgIHVs b25nIHR5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByaW1pdGl2ZSB0eXBlICovCi0g ICAgTl9jb25uX3JlcV90ICpjb25ucmVxX2N0bDsgICAgICAgICAgLyogcG9pbnRlciB0byBOX0NP Tk5fUkVRIHByaW1pdGl2ZSAqLwotICAgIE5fbnBpX2RhdGFfdCAqY29ubnJlcV9kYXRhOyAgICAg ICAgIC8qIHBvaW50ZXIgdG8gTl9DT05OX1JFUSBkYXRhIChDVUQpICovCi0gICAgaW50IGNvbm5y ZXFfZGF0YV9sZW47ICAgICAgICAgICAgICAgLyogbGVuZ3RoIG9mIGZpbGxlZCBkYXRhIGJ1ZmZl ciAqLwotICAgIE5fY29ubl9jb25fdCAqY29ubmNvbl9jdGw7ICAgICAgICAgIC8qIHBvaW50ZXIg dG8gTl9DT05OX0NPTiBwcmltaXRpdmUgKi8KLSAgICBOX25waV9kYXRhX3QgKmNvbm5jb25fZGF0 YTsgICAgICAgICAvKiBwb2ludGVyIHRvIGFueSBkYXRhIGFzc29jaWF0ZWQgd2l0aAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBOX0NPTk5fQ09OIHByaW1p dGl2ZSAqLwotICAgIGNoYXIgKmFkZHRsX2luZm87ICAgICAgICAgICAgICAgICAgIC8qIHBvaW50 ZXIgdG8gYWRkaXRpb25hbCBpbmZvIG5lZWRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqIGZvciBOX0NPTk5fUkVRIHByaW1pdGl2ZSAqLwotICAgIGludCBhZGRy X2xlbjsgICAgICAgICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBvZiBhZGRyZXNzICovCi0KLSNp ZmRlZiBUUkFDRQotICAgIHByaW50ZiggIlRSQUNFOiBlbnRlcmluZyB4MjVjYWxsXG4iICk7Ci0j ZW5kaWYgLyogVFJBQ0UgKi8KLQotI2lmZGVmIERFQlVHCi0gICAgcHJpbnRmKCAieDI1Y2FsbCgg JWQsICVzIClcbiIsIGZkLCByZW1vdGVfbnVhICk7Ci0gICAgcHJpbnRmKCAiY29ubmVjdGluZyB0 byAlcyBvbiBmZCAlZFxuIiwgcmVtb3RlX251YSwgZmQgKTsKLSNlbmRpZiAvKiBERUJVRyAqLwot Ci0gICAgLyoKLSAgICAgKiBBbGxvY2F0ZSBhbmQgemVybyBvdXQgc3BhY2UgZm9yIHRoZSBOX0NP Tk5fUkVRIHByaW1pdGl2ZQotICAgICAqIHVzZSB0aGUgc2l6ZSBvZiB0aGUgZ2VuZXJpYyBOUEkg cHJpbWl0aXZlIGNvbnRyb2wgYnVmZmVyCi0gICAgICovCi0gICAgY29ubnJlcV9jdGwgID0gKE5f Y29ubl9yZXFfdCAqKSBtYWxsb2Moc2l6ZW9mKE5fbnBpX2N0bF90KSk7Ci0gICAgaWYgKGNvbm5y ZXFfY3RsID09IE5VTEwpewotICAgICAgICBwZXJyb3IoImtlcm1pdDogeDI1Y2FsbCgpOiBjb25u cmVxX2N0bCBtYWxsb2MgZmFpbGVkIik7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAg IGJ6ZXJvKGNvbm5yZXFfY3RsLHNpemVvZihOX25waV9jdGxfdCkpOwotICAgIC8qCi0gICAgICog QnVpbGQgdGhlIENvbm5lY3Rpb24gUmVxdWVzdCBQcmltaXRpdmUKLSAgICAgKi8KLSAgICBmbGFn cyA9IDA7Ci0gICAgY29ubnJlcV9jdGwtPlBSSU1fdHlwZSA9ICh1bG9uZykgTl9DT05OX1JFUTsK LQotICAgIC8qIE5vdGUgdGhhdCB0aGUgYWRkcmVzcyBsZW5ndGggaXMgbmNoYWkrMSBhbmQgbm90 IG4rMi4gVGhlIGxpbmUgbnVtYmVyCi0gICAgICogaXMgb25seSBwYXNzZWQgd2l0aCB0aGUgYWRk cmVzcyBmb3IgdGhlIGJpbmQuIFRoZSBmaXJzdCBieXRlIG9mCi0gICAgICogdGhlIGFkZHJlc3Mg Zm9yIHRoZSBOX0NPTk4gcHJpbWl0aXZlcyBjb250YWlucyB0aGUgWC4xMjEKLSAgICAgKiBhZGRy ZXNzIHByZWZpeCwgd2hpY2ggbXVzdCBiZSB6ZXJvLiBUaGUgcmVtYWluaW5nIGJ5dGVzIGFyZSB0 aGUKLSAgICAgKiBhZGRyZXNzIGl0c2VsZi4KLSAgICAgKi8KLSAgICBhZGRyX2xlbiA9IHN0cmxl biggcmVtb3RlX251YSApOwotICAgIGNvbm5yZXFfY3RsLT5ERVNUX2xlbmd0aCA9ICh1bG9uZykg KGFkZHJfbGVuICsgMSk7Ci0gICAgY29ubnJlcV9jdGwtPkRFU1Rfb2Zmc2V0ID0gKHVsb25nKSBz aXplb2YoTl9jb25uX3JlcV90KTsKLSAgICAvKiBjb25ucmVxX2N0bC0+Q09OTl9mbGFncyA9ICh1 bG9uZylFWF9EQVRBX09QVCB8IFJFQ19DT05GX09QVDsgKi8KLSAgICBjb25ucmVxX2N0bC0+Q09O Tl9mbGFncyA9ICh1bG9uZykgMDsKLSAgICBjb25ucmVxX2N0bC0+UU9TX2xlbmd0aCA9ICh1bG9u ZykgMDsgICAgICAgIC8qIHVuc3VwcG9ydGVkIGluIEFJWCA0LjEgKi8KLSAgICBjb25ucmVxX2N0 bC0+UU9TX29mZnNldCA9ICh1bG9uZykgMDsgICAgICAgIC8qIHVuc3VwcG9ydGVkIGluIEFJWCA0 LjEgKi8KLQotICAgIGFkZHRsX2luZm8gPSAoY2hhciAqKSAoKHZvaWQqKWNvbm5yZXFfY3RsICsg Y29ubnJlcV9jdGwtPkRFU1Rfb2Zmc2V0KTsKLSAgICAqYWRkdGxfaW5mbysrID0gKGNoYXIpIDA7 IC8qIFguMTIxIGZvcm1hdCAqLwotICAgIGJjb3B5KCByZW1vdGVfbnVhLCBhZGR0bF9pbmZvLCBh ZGRyX2xlbiApOwotCi0gICAgLyoKLSAgICAgKiBzZXR1cCB0aGUgZGF0YSBidWZmZXIgZm9yIHRo ZSBjb25uZWN0aW9uIHJlcXVlc3QKLSAgICAgKi8KLSAgICBjb25ucmVxX2RhdGEgID0gKE5fbnBp X2RhdGFfdCAqKSBtYWxsb2Moc2l6ZW9mKE5fbnBpX2RhdGFfdCkpOwotICAgIGlmIChjb25ucmVx X2RhdGEgPT0gTlVMTCl7Ci0gICAgICAgIHBlcnJvcigia2VybWl0OiB4MjVjYWxsKCk6IGNvbm5y ZXFfZGF0YSBtYWxsb2MgZmFpbGVkIik7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAg IGJ6ZXJvKGNvbm5yZXFfZGF0YSxzaXplb2YoTl9ucGlfZGF0YV90KSk7Ci0KLSAgICAvKiBmYWNp bGl0eSBzZWxlY3Rpb24gbmVlZHMgdG8gYmUgcHV0IGluIHRoZSBmcm9udCBvZiBjb25ucmVxX2Rh dGEgKi8KLSAgICBjb25ucmVxX2RhdGFfbGVuID0gMDsKLSAgICBjb25ucmVxX2RhdGFfbGVuICs9 IHgyNWZhY2lsaXRpZXMoIChjaGFyICopY29ubnJlcV9kYXRhICk7Ci0gICAgaWYgKGN1ZCAmJiAq Y3VkKSB7Ci0gICAgICAgIGJjb3B5KGN1ZCwKLSAgICAgICAgICAgICAgKGNoYXIgKikoKGNoYXIg Kiljb25ucmVxX2RhdGEgKyBjb25ucmVxX2RhdGFfbGVuKSwKLSAgICAgICAgICAgICAgc3RybGVu KGN1ZCkKLSAgICAgICAgICAgICAgKTsKLSAgICAgICAgY29ubnJlcV9kYXRhX2xlbiArPSBzdHJs ZW4oIGN1ZCApOwotICAgICAgICB9Ci0KLSAgICAvKgotICAgICAqIENhbGwgcHV0bXNnKCkgdG8g cHV0IHRoZSBjb25uZWN0aW9uIHJlcXVlc3QgbWVzc2FnZSBvbiB0aGUgc3RyZWFtCi0gICAgICov Ci0gICAgcmMgPSB4MjVwdXRtc2coIGZkLCAoTl9ucGlfY3RsX3QqKWNvbm5yZXFfY3RsLCBjb25u cmVxX2RhdGEsCi0gICAgICAgICAgICBjb25ucmVxX2RhdGFfbGVuLCAmZmxhZ3MgKTsKLSAgICBp ZiAocmMgPCAwKSB7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAg KiBBbGxvY2F0ZSBhbmQgemVybyBvdXQgc3BhY2UgZm9yIHRoZSBOX0NPTk5fQ09OIHByaW1pdGl2 ZQotICAgICAqLwotICAgIGlmICgoY29ubmNvbl9jdGwgPSAoTl9jb25uX2Nvbl90ICopIG1hbGxv YyhzaXplb2YoTl9ucGlfY3RsX3QpKSkgPT0gTlVMTCkgewotICAgICAgICBwZXJyb3IoImtlcm1p dDogeDI1Y2FsbCgpOiBjb25uY29uX2N0bCBtYWxsb2MgZmFpbGVkIik7Ci0gICAgICAgIHJldHVy bigtMSk7Ci0gICAgfQotICAgIGJ6ZXJvKGNvbm5jb25fY3RsLCBzaXplb2YoTl9ucGlfY3RsX3Qp KTsKLQotICAgIC8qCi0gICAgICogQWxsb2NhdGUgYW5kIHplcm8gb3V0IHNwYWNlIGZvciBhbnkg ZGF0YSBhc3NvY2lhdGVkIHdpdGggTl9DT05OX0NPTgotICAgICAqLwotICAgIGlmICggKGNvbm5j b25fZGF0YSA9IChOX25waV9kYXRhX3QgKikgbWFsbG9jKE5QSV9NQVhfREFUQSkpID09IE5VTEwp IHsKLSAgICAgICAgcGVycm9yKCJrZXJtaXQ6IHgyNWNhbGwoKTogY29ubmNvbl9kYXRhIG1hbGxv YyBmYWlsZWQiKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgYnplcm8oY29ubmNv bl9kYXRhLCBOUElfTUFYX0RBVEEpOwotCi0gICAgLyogSW5pdGlhbGl6ZSBhbmQgYnVpbGQgdGhl IHN0cnVjdHVyZXMgZm9yIGdldG1zZyAqLwotICAgIGdldF9mbGFncz0wOwotCi0gICAgcmMgPSB4 MjVnZXRtc2coIGZkLCAoTl9ucGlfY3RsX3QqKWNvbm5jb25fY3RsLCAoaW50KXNpemVvZiggTl9j b25uX2Nvbl90ICksCi0gICAgICAgICAgICBjb25uY29uX2RhdGEsIE5QSV9NQVhfREFUQSwgJmdl dF9mbGFncywgTl9DT05OX0NPTiApOwotCi0gICAgLyogdHVybiBxdWFudGl0aXZlIHJldHVybiBj b2RlIGludG8gYSBxdWFsaXRhdGl2ZSBvbmUgKi8KLSAgICBpZiAocmMgPiAwKSByYyA9IDA7Ci0K LSAgICAvKiBGcmVlIHRoZSBzcGFjZSB0aGF0IHdlIG5vIGxvbmdlciBuZWVkICovCi0gICAgaWYg KGNvbm5yZXFfY3RsKSB7IGZyZWUoY29ubnJlcV9jdGwpOyBjb25ucmVxX2N0bCA9IE5VTEw7IH0K LSAgICBpZiAoY29ubmNvbl9jdGwpIHsgZnJlZShjb25uY29uX2N0bCk7IGNvbm5jb25fY3RsID0g TlVMTDsgfQotICAgIGlmIChjb25uY29uX2RhdGEpIHsgZnJlZShjb25uY29uX2RhdGEpOyBjb25u Y29uX2RhdGEgPSBOVUxMOyB9Ci0KLSNpZmRlZiBUUkFDRQotICAgIHByaW50ZiggIlRSQUNFOiBs ZWF2aW5nIHgyNWNhbGxcbiIgKTsKLSNlbmRpZiAvKiBUUkFDRSAqLwotCi0gICAgcmV0dXJuKHJj KTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBGdW5jdGlvbjogeDI1Z2V0Y2FsbAot ICoKLSAqIERlc2NyaXB0aW9uOiBUaGlzIHJvdXRpbmUgY2hlY2tzIGZvciBhbiBpbmNvbW1pbmcg Y2FsbCwgdmVyaWZpZWQKLSAqIHRoYXQgaXQgaXMgYSBDT05OSU5EIChjb25uZWN0aW9uIGluZGlj YXRpb24pIG1lc3NhZ2UsIGFuZCB0aGVuCi0gKiBhY2NlcHRzIHRoZSBjYWxsIGFuZCByZXR1cm5z IHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgdGhlIG5ldyBzdHJlYW0KLSAqCi0gKiBQYXJhbWV0ZXJz OgotICogZmQgICAtIGZpbGUgZGVzY3JpcHRvciBvZiBsaXN0ZW5pbmcgc3RyZWFtCi0gKgotICog UmV0dXJuIENvZGVzOgotICogY2FsbGZkICAgICAgIC0gZmlsZSBkZXNjcmlwdG9yIG9mIGNvbm5l Y3RlZCBpbmNvbW1pbmcgY2FsbC4KLSAqICAgICAgICAgICAgICAtIHNldCB0byAtMSBpZiBhbiBl cnJvciBvY2N1cmVkCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50Ci14MjVnZXRjYWxs KGZkKSBpbnQgZmQ7IHsKLSAgICBpbnQgeDI1Y2FsbGZkOyAgICAgICAgICAgICAgICAgICAgICAv KiBmZCBvZiBpbmNvbW1pbmcgY2FsbCAqLwotICAgIE5fY29ubl9pbmRfdCAqY29ubmluZF9jdGw7 ICAgICAgICAgIC8qIGNvbm5pbmQgY29udHJvbGwgYnVmZmVyICovCi0gICAgTl9ucGlfZGF0YV90 ICpjb25uaW5kX2RhdGE7ICAgICAgICAgLyogY29ubmluZCBkYXRhIGJ1ZmZlciAqLwotICAgIGlu dCBnZXRfZmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWdzIGZvciBnZXRtc2cgKi8K LSAgICB1bG9uZyBmbGFnczsgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW9uIGZs YWdzICovCi0gICAgaW50IHJjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJu IGNvZGUgKi8KLQotICAgIGV4dGVybiB4MjVhZGRyX3QgcmVtb3RlX251YTsgICAgICAgIC8qIHJl bW90ZSBYLjI1IGFkZHIgZ2xvYmFsIHZhciAqLwotCi0jaWZkZWYgVFJBQ0UKLSAgICBwcmludGYo ICJUUkFDRTogZW50ZXJpbmcgeDI1Z2V0Y2FsbFxuIiApOwotI2VuZGlmIC8qIFRSQUNFICovCi0K LSAgICAvKiBhbGxvY2F0ZSBzcGFjZSBmb3IgY29ubmVjdGlvbiBpbmRpY2F0aW9uIGJ1ZmZlcnMg Ki8KLSAgICBpZiAoKGNvbm5pbmRfY3RsID0gKE5fY29ubl9pbmRfdCAqKW1hbGxvYyhzaXplb2Yo Tl9ucGlfY3RsX3QpKSkgPT0gTlVMTCkgewotICAgICAgICBwZXJyb3IoImtlcm1pdDogeDI1Z2V0 Y2FsbCgpOiBjb25uaW5kX2N0bCBtYWxsb2MgZmFpbGVkIik7Ci0gICAgICAgIHJldHVybiAoLTEp OwotICAgIH0KLSAgICBiemVybyhjb25uaW5kX2N0bCwgc2l6ZW9mKE5fbnBpX2N0bF90KSk7Ci0K LSAgICBpZiAoKGNvbm5pbmRfZGF0YSA9IChOX25waV9kYXRhX3QgKiltYWxsb2MoTlBJX01BWF9E QVRBKSkgPT0gTlVMTCkgewotICAgICAgICBwZXJyb3IoImtlcm1pdDogeDI1Z2V0Y2FsbCgpOiBj b25uaW5kX2RhdGEgbWFsbG9jIGZhaWxlZCIpOwotICAgICAgICByZXR1cm4gKC0xKTsKLSAgICB9 Ci0gICAgYnplcm8oY29ubmluZF9kYXRhLCBOUElfTUFYX0RBVEEpOwotCi0gICAgLyogaW5pdGlh bGlzZSBjb250cm9sIHN0cnVjdHVyZXMgKi8KLSAgICBnZXRfZmxhZ3MgPSAwOwotCi0gICAgLyog Y2FsbCBnZXRtc2cgdG8gY2hlY2sgZm9yIGEgY29ubmVjdGlvbiBpbmRpY2F0aW9uICovCi0gICAg aWYgKHgyNWdldG1zZyhmZCwKLSAgICAgICAgICAgICAgICAgIChOX25waV9jdGxfdCopY29ubmlu ZF9jdGwsCi0gICAgICAgICAgICAgICAgICAoaW50KXNpemVvZihOX2Nvbm5faW5kX3QpLAotICAg ICAgICAgICAgICAgICAgY29ubmluZF9kYXRhLAotICAgICAgICAgICAgICAgICAgTlBJX01BWF9E QVRBLAotICAgICAgICAgICAgICAgICAgJmdldF9mbGFncywKLSAgICAgICAgICAgICAgICAgIE5f Q09OTl9JTkQKLSAgICAgICAgICAgICAgICAgICkgPCAwKSB7Ci0jaWZkZWYgREVCVUcKLSAgICAg ICAgcHJpbnRmKCAieDI1Z2V0Y2FsbCgpOiBlcnJubyBpczogJWRcbiIsIGVycm5vICk7Ci0jZW5k aWYgLyogREVCVUcgKi8KLSAgICAgICAgcGVycm9yICgieDI1Z2V0Y2FsbCgpOiBnZXRtc2cgZmFp bGVkIik7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotCi0gICAgLyogYSBjb25uZWN0aW9u IGluZGljYXRpb24gd2FzIHJlY2VpdmVkCi0gICAgICogLSBwdWxsIGl0IHRvIGJpdHMgYW5kIGFu c3dlciB0aGUgY2FsbAotICAgICAqLwotICAgIHgyNXNlcW5vID0gY29ubmluZF9jdGwtPlNFUV9u dW1iZXI7Ci0gICAgZmxhZ3MgPSBjb25uaW5kX2N0bC0+Q09OTl9mbGFnczsKLSNpZmRlZiBERUJV RwotICAgIHByaW50ZiggInNldHRpbmcgcmVtb3RlX251YSB0byBhIG5ldyB2YWx1ZSBkdWUgdG8g aW5jb21taW5nIGNhbGxcbiIgKTsKLSNlbmRpZiAvKiBERUJVRyAqLwotICAgIC8qCi0gICAgICog bm8gZ3VhcmFudGVlIHRoYXQgdGhlIGFkZHJlc3MgaXMgbnVsbCB0ZXJtaW5hdGVkLCBlbnN1cmUg dGhhdAotICAgICAqIGFmdGVyIGNvcHlpbmcgdGhhdCBpdCBpcyAoYXNzdW1wdGlvbjogcmVtb3Rl X251YSBpcyBsb25nZXIgdGhhbgotICAgICAqIHRoZSBhZGRyZXNzICsgMSkKLSAgICAgKi8KLSAg ICBiemVybyhyZW1vdGVfbnVhLCBzaXplb2YocmVtb3RlX251YSkpOwotICAgIC8qIG5vdGU6IGNv bm5pbmRfY3RsIGNvbnRhaW5zIGEgeDEyMSBhZGRyZXNzLCB3aGljaCBoYXMgYSBudWxsIGFzCi0g ICAgICogdGhlIEZJUlNUIGNoYXJhY3RlciAtIHN0cmlwIGl0IG9mZiEKLSAgICAgKi8KLSAgICBj a3N0cm5jcHkocmVtb3RlX251YSwKLSAgICAgICAgICAgIChjaGFyKikoKGNoYXIqKWNvbm5pbmRf Y3RsICsgY29ubmluZF9jdGwtPlNSQ19vZmZzZXQgKyAxKSwKLSAgICAgICAgICAgIGNvbm5pbmRf Y3RsLT5TUkNfbGVuZ3RoIC0gMQotICAgICAgICAgICAgKTsKLSNpZmRlZiBERUJVRwotICAgIHBy aW50ZiggInJlbW90ZV9udWEgc2V0IHRvIG5ldyB2YWx1ZSBvZiAlc1xuIiwgcmVtb3RlX251YSAp OwotI2VuZGlmIC8qIERFQlVHICovCi0KLSAgICAvKiBlcnJvcnMgaGFuZGxlZCBieSBjYWxsZWUg Ki8KLSAgICB4MjVjYWxsZmQgPSB4MjVhY2NlcHQoeDI1c2Vxbm8sIGZsYWdzKTsKLQotICAgIC8q IGZyZWUgdGhlIG1hbGxvYydkIGJ1ZmZlcnMgKi8KLSAgICBpZiAoY29ubmluZF9jdGwpIHsgZnJl ZShjb25uaW5kX2N0bCk7IGNvbm5pbmRfY3RsID0gTlVMTDsgfQotICAgIGlmIChjb25uaW5kX2Rh dGEpIHsgZnJlZShjb25uaW5kX2RhdGEpOyBjb25uaW5kX2RhdGEgPSBOVUxMOyB9Ci0KLSNpZmRl ZiBUUkFDRQotICAgIHByaW50ZiggIlRSQUNFOiBsZWF2aW5nIHgyNWdldGNhbGxcbiIgKTsKLSNl bmRpZiAvKiBUUkFDRSAqLwotCi0gICAgLyogcmV0dXJuIHRoZSBmaWxlIGRlc2NyaXB0b3IgKG9y IGVycm9yIGlmIDwgMCkgKi8KLSAgICByZXR1cm4oIHgyNWNhbGxmZCApOwotfQotCi0vKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKLSAqIEZ1bmN0aW9uOiB4MjVhY2NlcHQKLSAqCi0gKiBEZXNjcmlwdGlv bjogYWNjZXB0IGFuIGluY29tbWluZyBjYWxsCi0gKiAgICAgICAgICAgICAgVGhpcyBlc3NlbnRp YWxseSBtZWFucyBvcGVuaW5nIGEgbmV3IFNUUkVBTSBhbmQgc2VuZGluZwotICogICAgICAgICAg ICAgIGFuIGFja25vd2xlZGdlIGJhY2sgdG8gdGhlIGNhbGxlci4KLSAqCi0gKiBQYXJhbWV0ZXJz OgotICogICAgICBzZXFubyAgIC0gc2VxdWVuY2UgbnVtYmVyIGZvciBhY2tub3dsZWRnZW1lbnQK LSAqICAgICAgZmxhZ3MgICAtIGZsYWdzIHBhc3NlZCB0byB1cyBieSB0aGUgY2FsbGVyCi0gKgot ICogUmV0dXJuIENvZGVzOgotICogICAgICBmZCAgICAgIC0gZmlsZSBkZXNjcmlwdG9yIG9mIG5l dyBTVFJFQU0KLSAqICAgICAgICAgICAgICAgIHNldCB0byAtMSBpZiBhbiBlcnJvciBvY2N1cmVk Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50Ci14MjVhY2NlcHQoc2Vxbm8sZmxhZ3Mp Ci0gICAgdWxvbmcgc2Vxbm87ICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGlvbiBz ZXF1ZW5jZSBudW1iZXIgKi8KLSAgICB1bG9uZyBmbGFnczsgICAgICAgICAgICAgICAgICAgICAg ICAvKiBjb25uZWN0aW9uIGZsYWdzICovCi0vKiB4MjVhY2NlcHQgKi8gewotICAgIGludCB4MjVj YWxsZmQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIGZkIGZvciBpbmNvbW1pbmcgY2FsbCAqLwot ICAgIGludCBnZXRfZmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgIC8qIHByaW9yaXR5IGZsYWdz IGZvciBnZXRtc2cgKi8KLSAgICBpbnQgcHV0X2ZsYWdzID0gMDsgICAgICAgICAgICAgICAgICAv KiBmbGFncyBmb3IgcHV0bXNnLCBhbHdheXMgMCAqLwotICAgIGludCBhZGRyX2xlbjsgICAgICAg ICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBvZiBsb2NhbCBhZGRyZXNzICovCi0gICAgdWxvbmcg dG9rZW47ICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGlvbiB0b2tlbiAqLwotICAg IE5fY29ubl9yZXNfdCAqY29ubl9yZXM7ICAgICAgICAgICAgIC8qIE5fQ09OTl9SRVMgcHJpbWl0 aXZlICovCi0gICAgTl9va19hY2tfdCAqb2tfYWNrOyAgICAgICAgICAgICAgICAgLyogTl9PS19B Q0sgcHJpbWl0aXZlICovCi0gICAgY2hhciAqYWRkdGxfaW5mbzsgICAgICAgICAgICAgICAgICAg LyogdGVtcCBwb2ludGVyICovCi0gICAgaW50IHJjOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogdGVtcG9yYXJ5IHJldHVybiBjb2RlICovCi0KLS8qIGdsb2JhbCB2YXJpYWJsZXMgZnJv bSBja2NtYWkuYyAqLwotICAgIGV4dGVybiBpbnQgcmV2Y2FsbCwgY2xvc2dyLCBjdWRhdGE7Ci0g ICAgZXh0ZXJuIGNoYXIgdWRhdGFbXTsKLSAgICBleHRlcm4geDI1YWRkcl90IGxvY2FsX251YTsg ICAgICAgICAvKiBsb2NhbCBYLjI1IGFkZHJlc3MgKi8KLSAgICBleHRlcm4gY2hhciB4MjVuYW1l W107ICAgICAgICAgICAgICAvKiB4MjUgZGV2aWNlIG5hbWUgKHN4MjVhMCkgKi8KLSAgICBleHRl cm4gY2hhciB4MjVkZXZbXTsgICAgICAgICAgICAgICAvKiB4MjUgZGV2aWNlIGZpbGUgL2Rldi94 MjVwa3QgKi8KLSAgICBleHRlcm4gaW50IHgyNXBvcnQ7ICAgICAgICAgICAgICAgICAvKiBsb2dp Y2FsIHBvcnQgdG8gdXNlICovCi0gICAgdWxvbmcgYmluZF9mbGFncyA9IDA7ICAgICAgICAgICAg ICAgLyogZmxhZ3MgZm9yIGJpbmRpbmcgdGhlIFgyNSBzdHJlYW0gKi8KLQotI2lmZGVmIFRSQUNF Ci0gICAgcHJpbnRmKCAiVFJBQ0U6IGVudGVyaW5nIHgyNWFjY2VwdFxuIiApOwotI2VuZGlmIC8q IFRSQUNFICovCi0KLSAgICAvKiBvcGVuIGEgbmV3IHBhY2tldCBsZXZlbCBzdHJlYW0gKi8KLSAg ICBpZiAoKHgyNWNhbGxmZCA9IG9wZW4oeDI1ZGV2LCBPX1JEV1IpKSA8IDApIHsKLSAgICAgICAg cGVycm9yICgia2VybWl0OiB4MjVhY2NlcHQoKTogWC4yNSBkZXZpY2Ugb3BlbiBlcnJvciIpOwot ICAgICAgICBkZWJ1ZyhGMTAxLCJ4MjVhY2NlcHQoKSBkZXZpY2Ugb3BlbiBlcnJvciIsIiIsZXJy bm8pOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLQotICAgIC8qIHB1c2ggdGhlIE5QSSBv bnRvIHRoZSBTVFJFQU0gKi8KLSAgICBpZiAoaW9jdGwoeDI1Y2FsbGZkLElfUFVTSCwibnBpIikg PCAwKSB7Ci0gICAgICAgIHBlcnJvciggImtlcm1pdDogeDI1YWNjZXB0KCk6IGNvdWxkbid0IHB1 c2ggbnBpIG9uIHRoZSBYMjUgc3RyZWFtIiApOwotICAgICAgICBkZWJ1ZyhGMTAxLCJ4MjVhY2Nl cHQgY2FuJ3QgcHVzaCBucGkgb24gdGhlIFgyNSBzdHJlYW0iLCIiLGVycm5vKTsKLSAgICAgICAg cmV0dXJuICgtMSk7Ci0gICAgfQotCi0gICAgLyogYmluZCBrZXJtaXQgc2VydmVyIHRvIHRoZSBs b2NhbCBYMjUgYWRkcmVzcyAqLwotICAgIC8qIHRha2VuIGZyb20gL3Vzci9zYW1wbGVzL3N4MjUv bnBpL25waXNlcnZlci5jIChBSVggNCkgKi8KLSAgICBiaW5kX2ZsYWdzIHw9IFRPS0VOX1JFUVVF U1Q7Ci0gICAgdG9rZW4gPSB4MjViaW5kKHgyNWNhbGxmZCxsb2NhbF9udWEsKGNoYXIgKilOVUxM LDAsMCx4MjVwb3J0LGJpbmRfZmxhZ3MpOwotICAgIGlmICh0b2tlbiA8IDApIHsKLSAgICAgICAg cHJpbnRmKCAia2VybWl0OiB4MjVhY2NlcHQoKTogY291bGRuJ3QgYmluZCB0byBsb2NhbCBYMjUg YWRkcmVzc1xuIiApOwotICAgICAgICBuZXRjbG9zKCk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0g ICAgfQotCi0gICAgLyogYWxsb2NhdGUgY29ubmVjdGlvbiByZXNwb25zZSBwcmltaXRpdmUgKi8K LSAgICBpZiAoKGNvbm5fcmVzID0gKE5fY29ubl9yZXNfdCAqKW1hbGxvYyggTlBJX01BWF9DVEwg KSkgPT0gTlVMTCkgewotICAgICAgICBwZXJyb3IoImtlcm1pdDogeDI1YWNjZXB0KCk6IGNvbm5f cmVzIG1hbGxvYyBmYWlsZWQiKTsKLSAgICAgICAgcmV0dXJuICgtMSk7Ci0gICAgfQotICAgIGJ6 ZXJvKChjaGFyICopY29ubl9yZXMsIE5QSV9NQVhfQ1RMKTsKLQotICAgIC8qIHNldHVwIGNvbm5l Y3Rpb24gcmVzcG9uc2UgcHJpbWl0aXZlICovCi0gICAgYWRkcl9sZW4gPSBzdHJsZW4oIGxvY2Fs X251YSApOwotICAgIGNvbm5fcmVzLT5QUklNX3R5cGUgPSAodWxvbmcpTl9DT05OX1JFUzsKLSAg ICBjb25uX3Jlcy0+VE9LRU5fdmFsdWUgPSB0b2tlbjsKLSAgICAvKiBub3RlIGFkZHJlc3MgbGVu Z3RoIGlzIG4rMSB0byBhY2NvbW9kYXRlIHRoZSBYLjEyMSBhZGRyZXNzIHByZWZpeCAqLwotICAg IGNvbm5fcmVzLT5SRVNfbGVuZ3RoID0gKHVsb25nKShhZGRyX2xlbiArIDEpOwotICAgIGNvbm5f cmVzLT5SRVNfb2Zmc2V0ID0gKHVsb25nKXNpemVvZiggTl9jb25uX3Jlc190ICk7Ci0gICAgY29u bl9yZXMtPlNFUV9udW1iZXIgPSBzZXFubzsKLSAgICBjb25uX3Jlcy0+Q09OTl9mbGFncyA9IDA7 Ci0gICAgY29ubl9yZXMtPlFPU19sZW5ndGggPSAwOyAgICAgICAgICAgLyogdW5zdXBwb3J0ZWQg LSBtdXN0IGJlIDAgKCE/KSAqLwotICAgIGNvbm5fcmVzLT5RT1Nfb2Zmc2V0ID0gMDsKLQotICAg IGFkZHRsX2luZm8gPSAoY2hhciAqKSgoY2hhciAqKWNvbm5fcmVzICsgY29ubl9yZXMtPlJFU19v ZmZzZXQpOwotICAgICphZGR0bF9pbmZvKysgPSAoY2hhcikwOyAgICAvKiBYLjEyMSBhZGRyZXNz IHByZWZpeCAqLwotICAgIGJjb3B5KCBsb2NhbF9udWEsIGFkZHRsX2luZm8sIGFkZHJfbGVuICk7 Ci0KLSAgICAvKgotICAgICAqIHNlbmQgb2ZmIHRoZSBjb25uZWN0IHJlc3BvbnNlCi0gICAgICov Ci0gICAgaWYgKHgyNXB1dG1zZyh4MjVjYWxsZmQsCi0gICAgICAgICAgICAgICAgICAoTl9ucGlf Y3RsX3QqKWNvbm5fcmVzLAotICAgICAgICAgICAgICAgICAgKE5fbnBpX2RhdGFfdCAqKU5VTEws Ci0gICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgJnB1dF9mbGFncwotICAg ICAgICAgICAgICAgICAgKSA8IDAgKSB7Ci0gICAgICAgIHBlcnJvcigia2VybWl0OiB4MjVhY2Nl cHQoKTogcHV0bXNnIGNvbm5lY3QgcmVzcG9uc2UgZmFpbGVkIik7Ci0gICAgICAgIHJldHVybigt MSk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBBbGxvY2F0ZSBhbmQgemVybyBvdXQgc3BhY2Ug Zm9yIHRoZSBPS19BQ0sgcHJpbWl0aXZlCi0gICAgICovCi0gICAgaWYgKChva19hY2sgPSAoTl9v a19hY2tfdCAqKSBtYWxsb2Moc2l6ZW9mKE5fbnBpX2N0bF90KSkpID09IE5VTEwpIHsKLSAgICAg ICAgcGVycm9yKCJrZXJtaXQ6IHgyNWNhbGwoKTogb2tfYWNrIG1hbGxvYyBmYWlsZWQiKTsKLSAg ICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgYnplcm8ob2tfYWNrLCBzaXplb2YoTl9ucGlf Y3RsX3QpKTsKLQotICAgIC8qIEluaXRpYWxpemUgYW5kIGJ1aWxkIHRoZSBzdHJ1Y3R1cmVzIGZv ciBnZXRtc2cgKi8KLSAgICBnZXRfZmxhZ3M9MDsKLQotICAgIHJjID0gKGludCl4MjVnZXRtc2co eDI1Y2FsbGZkLAotICAgICAgICAgICAgICAgICAgICAgICAgKE5fbnBpX2N0bF90Kilva19hY2ss Ci0gICAgICAgICAgICAgICAgICAgICAgICAoaW50KXNpemVvZihOX29rX2Fja190KSwKLSAgICAg ICAgICAgICAgICAgICAgICAgIChOX25waV9kYXRhX3QqKU5VTEwsCi0gICAgICAgICAgICAgICAg ICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgJmdldF9mbGFncywKLSAgICAgICAg ICAgICAgICAgICAgICAgIE5fT0tfQUNLCi0gICAgICAgICAgICAgICAgICAgICAgICApOwotICAg IGlmIChyYyA9PSAwKSB7Ci0gICAgICAgIC8qIHNlcXVlbmNlIG51bWJlciBpcyBvbmx5IGZvciBk aXNjb25uZWN0aW5nIHdoZW4gbm90IGNvbm5lY3RlZCAhPyAqLwotICAgICAgICB4MjVzZXFubyA9 IDA7Ci0gICAgfQotCi0gICAgLyogZnJlZSB1cCBtYWxsb2MnZWQgYnVmZmVyIHNwYWNlICovCi0g ICAgaWYgKGNvbm5fcmVzKSB7IGZyZWUoY29ubl9yZXMpOyBjb25uX3JlcyA9IE5VTEw7IH0KLSAg ICBpZiAob2tfYWNrKSB7IGZyZWUob2tfYWNrKTsgb2tfYWNrID0gTlVMTDsgfQotCi0jaWZkZWYg VFJBQ0UKLSAgICBwcmludGYoICJUUkFDRTogbGVhdmluZyB4MjVhY2NlcHRcbiIgKTsKLSNlbmRp ZiAvKiBUUkFDRSAqLwotCi0gICAgcmV0dXJuKCAoIHJjID49IDAgKSA/IHgyNWNhbGxmZCA6IC0x ICk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRnVuY3Rpb246IHgyNXVuYmluZAot ICoKLSAqIERlc2NyaXB0aW9uOiAgVGhpcyBzdWJyb3V0aW5lIGJ1aWxkcyBhbmQgc2VuZHMgYW4g dW5iaW5kIHJlcXVlc3QgYW5kIGdldHMKLSAqIHRoZSBhY2tub3dsZWRnZW1lbnQgZm9yIGl0Lgot ICoKLSAqIFBhcmFtZXRlcnM6Ci0gKiBmZCAtIEZpbGUgZGVzY3JpcHRvciBvZiB0aGUgc3RyZWFt Ci0gKgotICogRnVuY3Rpb25zIFJlZmVyZW5jZWQ6Ci0gKiBnZXRtc2coKQotICogcHV0bXNnKCkK LSAqIG1hbGxvYygpCi0gKiBiemVybygpCi0gKgotICogUmV0dXJuIGNvZGU6Ci0gKiAwIC0gaWYg c3VjY2Vzc2Z1bAotICogLTEgLSBpZiBub3Qgc3VjY2Vzc2Z1bAotICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLwotaW50Ci14MjV1bmJpbmQoZmQpIGludCBmZDsgeyAgICAgICAgICAgICAgICAgLyogWDI1 IGRldmljZSAob3BlbmVkKSAqLwotICAgIGludCByYzsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHJldHVybiBjb2RlICovCi0gICAgaW50IGZsYWdzOyAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogYmluZCBmbGFncyAqLwotICAgIGludCBnZXRfZmxhZ3M7ICAgICAgICAgICAgICAg ICAgICAgIC8qIHByaW9yaXR5IGZsYWcgZm9yIGdldG1zZyAqLwotICAgIHVsb25nIHR5cGU7ICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHByaW1pdGl2ZSB0eXBlICovCi0gICAgTl91bmJpbmRf cmVxX3QgKnVuYmluZF9yZXE7ICAgICAgICAgLyogcG9pbnRlciB0byBOX1VOQklORF9SRVEgKi8K LSAgICBOX29rX2Fja190ICpva19hY2s7ICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIE5f T0tfQUNLICovCi0KLSNpZmRlZiBUUkFDRQotICAgIHByaW50ZiggIlRSQUNFOiBlbnRlcmluZyB4 MjV1bmJpbmRcbiIgKTsKLSNlbmRpZiAvKiBUUkFDRSAqLwotCi0jaWZkZWYgREVCVUcKLSAgICAv KiBwcmludGYoICJ4MjV1bmJpbmQoICVkIClcbiIsIGZkICk7ICovCi0jZW5kaWYgLyogREVCVUcg Ki8KLSAgICBkZWJ1ZyhGMTAxLCJ4MjV1bmJpbmQgY2xvc2luZyB4MjUgY29ubmVjdGlvbiAjIiwi IixmZCk7Ci0KLSAgICAvKiBBbGxvY2F0ZSBhbmQgemVybyBvdXQgc3BhY2UgdG8gaG9sZCB0aGUg Tl9VTkJJTkRfUkVRIHByaW1pdGl2ZSAqLwotICAgIHVuYmluZF9yZXEgPSAoTl91bmJpbmRfcmVx X3QgKikgbWFsbG9jKHNpemVvZihOX25waV9jdGxfdCkpOwotICAgIGlmICh1bmJpbmRfcmVxID09 IE5VTEwpIHsKLSAgICAgICAgcGVycm9yKCJrZXJtaXQ6IHgyNXVuYmluZCgpOiB1bmJpbmRfcmVx IG1hbGxvYyBmYWlsZWQiKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgYnplcm8o dW5iaW5kX3JlcSwgc2l6ZW9mKE5fbnBpX2N0bF90KSk7Ci0KLSAgICAvKgotICAgICAqIEJ1aWxk IHRoZSBVbmJpbmQgUmVxdWVzdCBQcmltaXRpdmUKLSAgICAgKi8KLSAgICBmbGFncyA9IDA7Ci0g ICAgdW5iaW5kX3JlcS0+UFJJTV90eXBlID0gKHVsb25nKSBOX1VOQklORF9SRVE7Ci0KLSAgICAv KgotICAgICAqIENhbGwgcHV0bXNnKCkgdG8gcHV0IHRoZSBiaW5kIHJlcXVlc3QgbWVzc2FnZSBv biB0aGUgc3RyZWFtCi0gICAgICovCi0gICAgaWYgKHgyNXB1dG1zZyhmZCwKLSAgICAgICAgICAg ICAgICAgIChOX25waV9jdGxfdCopdW5iaW5kX3JlcSwKLSAgICAgICAgICAgICAgICAgIChOX25w aV9kYXRhX3QgKilOVUxMLAotICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAg ICZmbGFncwotICAgICAgICAgICAgICAgICAgKSA8IDApIHsKLSAgICAgICAgcGVycm9yICgia2Vy bWl0OiB4MjV1bmJpbmQoKTogcHV0bXNnIGZhaWxlZCIpOwotICAgICAgICByZXR1cm4oLTEpOwot ICAgIH0KLQotICAgIC8qIEFsbG9jYXRlIGFuZCBaZXJvIG91dCBzcGFjZSBmb3IgdGhlIE5fT0tf QUNLIHByaW1pdGl2ZSAqLwotICAgIG9rX2FjayA9IChOX29rX2Fja190ICopIG1hbGxvYyhzaXpl b2YoTl9ucGlfY3RsX3QpKTsKLSAgICBpZiAob2tfYWNrID09IE5VTEwpIHsKLSAgICAgICAgcGVy cm9yKCJrZXJtaXQgeDI1dW5iaW5kKCk6IG9rX2FjayBtYWxsb2MgZmFpbGVkXG4iKTsKLSAgICAg ICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgYnplcm8ob2tfYWNrLCBzaXplb2YoTl9ucGlfY3Rs X3QpKTsKLQotICAgIC8qIEluaXRpYWxpemUgYW5kIGJ1aWxkIHRoZSBjb250cm9sIHN0cnVjdHVy ZSBmb3IgZ2V0bXNnICovCi0gICAgZ2V0X2ZsYWdzPTA7Ci0KLSAgICAvKiBDYWxsIGdldG1zZygp IHRvIGNoZWNrIGZvciBhbiBhY2tub3dsZWRnZW1lbnQgKi8KLSAgICByYyA9IHgyNWdldG1zZyhm ZCwKLSAgICAgICAgICAgICAgICAgICAoTl9ucGlfY3RsX3QqKW9rX2FjaywKLSAgICAgICAgICAg ICAgICAgICAoaW50KXNpemVvZihOX29rX2Fja190KSwKLSAgICAgICAgICAgICAgICAgICAoTl9u cGlfZGF0YV90KilOVUxMLAotICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAg ICAgJmdldF9mbGFncywKLSAgICAgICAgICAgICAgICAgICBOX09LX0FDSwotICAgICAgICAgICAg ICAgICAgICk7Ci0gICAgaWYgKHJjIDwgMCkgewotICAgICAgICBwZXJyb3IgKCJrZXJtaXQ6IHgy NXVuYmluZDogZ2V0bXNnIGZhaWxlZCIpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLQot ICAgIC8qIEZyZWUgdXAgdGhlIHNwYWNlIHRoYXQgd2Ugbm8gbG9uZ2VyIG5lZWQgKi8KLSAgICBp ZiAodW5iaW5kX3JlcSkgeyBmcmVlKHVuYmluZF9yZXEpOyB1bmJpbmRfcmVxID0gTlVMTDsgfQot ICAgIGlmIChva19hY2spIHsgZnJlZShva19hY2spOyBva19hY2sgPSBOVUxMOyB9Ci0KLSNpZmRl ZiBUUkFDRQotICAgIHByaW50ZiggIlRSQUNFOiBsZWF2aW5nIHgyNXVuYmluZFxuIiApOwotI2Vu ZGlmIC8qIFRSQUNFICovCi0KLSAgICByZXR1cm4oMCk7Ci19Ci0KLS8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKgotICogRnVuY3Rpb246IHgyNXhpbgotICoKLSAqIERlc2NyaXB0aW9uOgotICogICAgICBS ZWFkIG4gY2hhcmFjdGVycyBmcm9tIFguMjUgY2lyY3VpdCBpbnRvIGJ1ZiAoQUlYIG9ubHkpCi0g KgotICogUGFyYW1ldGVyczoKLSAqICAgICAgZGF0YV9idWZfbGVuICAgIG1heGltdW0gc2l6ZSBv ZiBkYXRhIGJ1ZmZlcgotICogICAgICBkYXRhX2J1ZiAgICAgICAgcG9pbnRlciB0byBwcmUtYWxs b2NhdGVkIGJ1ZmZlciBzcGFjZQotICoKLSAqIFJldHVybiBWYWx1ZToKLSAqICAgICAgdGhlIG51 bWJlciBvZiBjaGFyYWN0ZXJzIGFjdHVhbGx5IHJlYWQKLSAqLwotaW50Ci14MjV4aW4oZGF0YV9i dWZfbGVuLGRhdGFfYnVmKSBpbnQgZGF0YV9idWZfbGVuOyBDSEFSICpkYXRhX2J1ZjsgewotICAg IHN0cnVjdCBzdHJidWYgZ2V0bXNnX2N0bDsgICAgICAgICAgIC8qIHN0cmVhbXMgY29udHJvbCBz dHJ1Y3R1cmUgKi8KLSAgICBzdHJ1Y3Qgc3RyYnVmIGdldG1zZ19kYXRhOyAgICAgICAgICAvKiBz dHJlYW1zIGRhdGEgc3RydWN0dXJlICovCi0gICAgaW50IHJjID0gMDsgICAgICAgICAgICAgICAg ICAgICAgICAgLyogcmV0dXJuIGNvZGUgKi8KLSAgICBpbnQgZ2V0bXNnX2ZsYWdzOyAgICAgICAg ICAgICAgICAgICAvKiBwYWNrZXQgcHJpb3JpdHkgZmxhZ3MgKi8KLSAgICBjaGFyICogY3RsX2J1 ZjsgICAgICAgICAgICAgICAgICAgICAvKiBucGkgY29udHJvbCBidWZmZXIgKi8KLSAgICBOX25w aV9jdGxfdCAqIHJlc3VsdDsgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIHNpbXBsaWZ5IHN3 aXRjaCgpICovCi0KLSNpZmRlZiBUUkFDRQotICAgIHByaW50ZiggIlRSQUNFOiBlbnRlcmluZyB4 MjV4aW5cbiIgKTsKLSNlbmRpZiAvKiBUUkFDRSAqLwotCi0gICAgLyogZW5zdXJlIHRoYXQgbm8g bWF4aW11bSdzIGFyZSBvdmVycmlkZGVuICovCi0gICAgZGF0YV9idWZfbGVuID0gKE5QSV9NQVhf REFUQSA8IGRhdGFfYnVmX2xlbikgPyBOUElfTUFYX0RBVEEgOiBkYXRhX2J1Zl9sZW47Ci0KLSAg ICAvKiBhbGxvY2F0ZSBzcGFjZSBmb3IgcGFja2V0IGNvbnRyb2wgaW5mbyAqLwotICAgIGlmICgo Y3RsX2J1ZiA9IChjaGFyICopbWFsbG9jKE5QSV9NQVhfQ1RMKSkgPT0gTlVMTCkgewotICAgICAg ICBwZXJyb3IoICJrZXJtaXQ6IHgyNXhpbigpOiBjdGxfYnVmIG1hbGxvYyIgKTsKLSAgICAgICAg cmV0dXJuKC0xKTsKLSAgICB9Ci0jaWZkZWYgQ09NTUVOVAotICAgIC8qIHJpZWhtOiBuZWVkIHpl cm9lZCBidWZmZXIgZm9yIGdldG1zZz8gKi8KLSAgICBiemVybyggY3RsX2J1ZiwgTlBJX01BWF9D VEwgKTsKLSAgICAvKiBjbGVhciBkYXRhIGJ1ZmZlciAqLwotICAgIGJ6ZXJvKCBkYXRhX2J1Ziwg ZGF0YV9idWZfbGVuICk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgZ2V0bXNnX2ZsYWdz ID0gMDsgICAgICAgICAgICAgICAgICAgLyogZ2V0IHRoZSBmaXJzdCBwYWNrZXQgYXZhaWxhYmxl ICovCi0KLSAgICByYyA9IHgyNWdldG1zZyh0dHlmZCwKLSAgICAgICAgICAgICAgICAgICBjdGxf YnVmLAotICAgICAgICAgICAgICAgICAgIE5QSV9NQVhfQ1RMLAotICAgICAgICAgICAgICAgICAg IGRhdGFfYnVmLAotICAgICAgICAgICAgICAgICAgIGRhdGFfYnVmX2xlbiwKLSAgICAgICAgICAg ICAgICAgICAmZ2V0bXNnX2ZsYWdzLAotICAgICAgICAgICAgICAgICAgIE5fREFUQV9JTkQKLSAg ICAgICAgICAgICAgICAgICApOwotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBERUJVRwotICAgIGlm IChyYyA+PSAwKSB7Ci0gICAgICAgIHByaW50ZiggImtlcm1pdDogeDI1eGluKCk6IGdvdCAiICk7 Ci0gICAgICAgIHgyNWR1bXBfZGF0YSggZGF0YV9idWYsIDAsIHJjICk7Ci0gICAgfSBlbHNlIHsK LSAgICAgICAgcHJpbnRmKCAieDI1eGluKCk6IGF0dGVtcHQgdG8gZ2V0IGRhdGEgcmVzdWx0ZWQg aW4gYW4gZXJyb3JcbiIgKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNlbmRpZiAvKiBD T01NRU5UICovCi0KLSAgICAvKiBmcmVlIGJ1ZmZlcnMgKi8KLSAgICBpZiAoY3RsX2J1ZikgeyBm cmVlKGN0bF9idWYpOyBjdGxfYnVmID0gTlVMTDsgfQotCi0jaWZkZWYgVFJBQ0UKLSAgICBwcmlu dGYoICJUUkFDRTogbGVhdmluZyB4MjV4aVxuIiApOwotI2VuZGlmIC8qIFRSQUNFICovCi0KLSAg ICByZXR1cm4ocmMpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEZ1bmN0aW9uOiB4 MjV3cml0ZQotICoKLSAqIERlc2NyaXB0aW9uOgotICogICAgICB3cml0ZSBhIGJsb2NrIG9mIGNo YXJhY3RlcnMgdG8gdGhlIFgyNSBTVFJFQU0gKEFJWCkKLSAqCi0gKiBQYXJhbWV0ZXJzOgotICog ICAgICBmZCAgICAgICAgICAgICAgZmlsZSBkZXNjcmlwdG9yIHRvIHdyaXRlIHRvCi0gKiAgICAg IGRhdGFidWYgICAgICAgICBidWZmZXIgY29udGFpbmluZyBkYXRhIHRvIHdyaXRlCi0gKiAgICAg IGRhdGFidWZzaXplICAgICAgICAgICAgIHNpemUgb2YgdGhlIGJ1ZmZlciB0byB3cml0ZQotICoK LSAqIFJldHVybiBWYWx1ZToKLSAqICAgICAgc2l6ZSAgICAgICAgICAgIHRoZSBudW1iZXIgb2Yg Ynl0ZXMgYWN0dWFsbHkgdHJhbnNtaXR0ZWQKLSAqLwotaW50Ci14MjV3cml0ZShmZCwgZGF0YWJ1 ZiwgZGF0YWJ1ZnNpemUpCi0gICAgaW50ICAgICAgICAgZmQ7ICAgICAgICAgICAgICAgICAgLyog WDI1IFNUUkVBTVMgZmlsZSBkZXNjcmlwdG9yICh0dHlmZCkgKi8KLSAgICBjaGFyICAgICAgICAq ZGF0YWJ1ZjsgICAgICAgICAgICAgICAvKiBidWZmZXIgdG8gd3JpdGUgKi8KLSAgICBpbnQgICAg ICAgICBkYXRhYnVmc2l6ZTsgICAgICAgICAgICAvKiBidWZmZXIgc2l6ZSAqLwotLyogeDI1d3Jp dGUgKi8gewotICAgIE5fZGF0YV9yZXFfdCAqZGF0YV9yZXFfY3RsOwotICAgIGludCByYzsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiBjb2RlIChzaXplIHRyYW5zbWl0dGVk KSAqLwotICAgIGludCB3cml0ZV9mbGFncyA9IDA7ICAgICAgICAgICAgICAgIC8qIGFsd2F5cyAw ICE/ICovCi0KLSNpZmRlZiBUUkFDRQotICAgIHByaW50ZiggIlRSQUNFOiBlbnRlcmluZyB4MjV3 cml0ZVxuIiApOwotI2VuZGlmIC8qIFRSQUNFICovCi0KLSAgICBpZiAoKGRhdGFfcmVxX2N0bCA9 IChOX2RhdGFfcmVxX3QgKiltYWxsb2MoTlBJX01BWF9DVEwpICkgPT0gTlVMTCkgewotICAgICAg ICBwZXJyb3IoICJrZXJtaXQ6IHgyNXdyaXRlKCk6IGRhdGFfcmVxX2N0bCBtYWxsb2MiICk7Ci0g ICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIGRhdGFfcmVxX2N0bC0+UFJJTV90eXBlID0g Tl9EQVRBX1JFUTsKLSAgICBkYXRhX3JlcV9jdGwtPkRBVEFfeGZlcl9mbGFncyA9IDA7Ci0KLSAg ICAvKiByaWVobTogcG9zc2libGUgZXh0ZW5zaW9uCi0gICAgICogcG9zc2libHkgbmVlZCB0byB0 aGluayBhYm91dCBzcGxpdHRpbmcgdXAgdGhlIGRhdGEgYnVmZmVyCi0gICAgICogaW50byBtdWx0 aXBsZSBwYXJ0cyBpZiBkYXRhYnVmc2l6ZSA+IE5QSV9NQVhfREFUQQotICAgICAqLwotCi0jaWZk ZWYgQ09NTUVOVAotI2lmZGVmIERFQlVHCi0gICAgcHJpbnRmKCAia2VybWl0OiB4MjV3cml0ZSgp OiB3cml0aW5nIGRhdGEgdG8geDI1IHN0cmVhbVxuIiApOwotICAgIHByaW50ZiggIlx0ZGF0YTpc dCIgKTsKLSAgICB4MjVkdW1wX2RhdGEoZGF0YWJ1ZiwgMCwgZGF0YWJ1ZnNpemUpOwotI2VuZGlm IC8qIERFQlVHICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIHJjID0geDI1cHV0bXNnKGZk LAotICAgICAgICAgICAgICAgICAgIChOX25waV9jdGxfdCopZGF0YV9yZXFfY3RsLAotICAgICAg ICAgICAgICAgICAgIChOX25waV9kYXRhX3QqKWRhdGFidWYsCi0gICAgICAgICAgICAgICAgICAg ZGF0YWJ1ZnNpemUsCi0gICAgICAgICAgICAgICAgICAgJndyaXRlX2ZsYWdzCi0gICAgICAgICAg ICAgICAgICAgKTsKLSAgICBpZiAoZGF0YV9yZXEpIHsgZnJlZShkYXRhX3JlcV9jdGwpOyAgZGF0 YV9yZXEgPSBOVUxMOyB9Ci0KLSNpZmRlZiBUUkFDRQotICAgIHByaW50ZiggIlRSQUNFOiBsZWF2 aW5nIHgyNXdyaXRlXG4iICk7Ci0jZW5kaWYgLyogVFJBQ0UgKi8KLQotICAgIHJldHVybihyYyk7 Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRnVuY3Rpb246IHgyNWxvY2FsX251YQot ICoKLSAqIERlc2NyaXB0aW9uOgotICogICAgICBUaGlzIHJvdXRpbmUgaXMgb25seSBpbnRlcmVz dGluZyBmb3IgSUJNIGNvbXB1dGVycy4gSW4gb3JkZXIKLSAqICAgICAgdG8gc2V0IHVwIGEgY29u bmVjdGlvbiAoc2VlIHgyNWJpbmQoKSkgeW91IG5lZWQgdG8ga25vdyB0aGUKLSAqICAgICAgbG9j YWwgTlVBICh4MjUgYWRkcmVzcykuIFVuZm9ydHVuYXRlbHksIHlvdSBuZWVkIGFsbCB0aGlzIGNv ZGUKLSAqICAgICAgdG8gZmluZCB0aGF0IG91dCwgSSBqdXN0IGhvcGUgdGhpcyB3b3JrcyBmb3Ig ZXZlcnlvbmUgZWxzZSEKLSAqCi0gKiBQYXJhbWV0ZXJzOgotICogICAgICBhIHByZS1hbGxvY2F0 ZWQgY2hhcmFjdGVyIGJ1ZmZlciwgbG9uZyBlbm91Z2ggdG8gaG9sZCBhbiBYLjI1IGFkZHJlc3MK LSAqICAgICAgYW5kIHRoZSB0YWlsaW5nIG51bGwuCi0gKgotICogUmV0dXJuIFZhbHVlOgotICog ICAgICB0aGUgbGVuZ3RoIG9mIHRoZSBhZGRyZXNzIHN0cmluZy4KLSAqICAgICAgMCA9IGVycm9y Ci0gKi8KLWludAoteDI1bG9jYWxfbnVhKGNoYXIgKmJ1ZikgewotICAgIHN0cnVjdCBDdUF0ICpy ZXNwb25zZTsgICAgICAvKiBzdHJ1Y3R1cmUgdG8gZmlsbCB3aXRoIGluZm8gZnJvbSBPRE0gKi8K LSAgICBDTEFTU19TWU1CT0wgcmV0Q2xhc3M7ICAgICAgLyogT0RNIGNsYXNzICovCi0gICAgY2hh ciBxdWVyeVs2NF07ICAgICAgICAgICAgIC8qIG9kbSBkYXRhYmFzZSBxdWVyeSAqLwotICAgIGlu dCByYyA9IDA7ICAgICAgICAgICAgICAgICAvKiByZXR1cm4gdmFsdWUgKGxlbmd0aCBvZiBsb2Nh bCBOVUEpICovCi0gICAgZXh0ZXJuIGNoYXIgeDI1bmFtZVtdOyAgICAgIC8qIHgyNSBkZXZpY2Ug bmFtZSAoc3gyNWEwKSAqLwotCi0jaWZkZWYgVFJBQ0UKLSAgICBwcmludGYoICJUUkFDRTogZW50 ZXJpbmcgeDI1bG9jYWxfbnVhXG4iICk7Ci0jZW5kaWYgLyogVFJBQ0UgKi8KLQotICAgIC8qIHNl dCB1cCBxdWVyeSBzdHJpbmcgKi8KLSAgICBpZiAoeDI1bmFtZVswXSA9PSAnXDAnKSB7Ci0jaWZk ZWYgREVCVUcKLSAgICAgICAgcHJpbnRmKCAia2VybWl0OiB4MjVsb2NhbF9udWEoKTogTm8geDI1 IGRldmljZSBzZXQsIHRyeWluZyBzeDI1YTBcbiIgKTsKLSNlbmRpZiAvKiBERUJVRyAqLwotICAg ICAgICBzdHJjcHkoIHgyNW5hbWUsICJzeDI1YTAiICk7Ci0gICAgfQotICAgIGNrbWFrbXNnKHF1 ZXJ5LCBzaXplb2YocXVlcnkpLCAibmFtZSBsaWtlICIseDI1bmFtZSwKLSAgICAgICAgICAgICAi IGFuZCBhdHRyaWJ1dGUgbGlrZSBsb2NhbF9udWEiKTsKLQotICAgIC8qIGluaXRpYWxpc2UgT0RN IGRhdGFiYXNlICovCi0gICAgb2RtZXJybm8gPSAwOwotICAgIGlmIChvZG1faW5pdGlhbGl6ZSgp ID09IC0xKSB7Ci0gICAgICAgIHByaW50ZiggIngyNWxvY2FsX251YSgpOiBjYW4ndCBpbml0aWFs aXplIE9ETSBkYXRhYmFzZSIpOwotICAgICAgICBzd2l0Y2ggKG9kbWVycm5vKSB7Ci0gICAgICAg ICAgY2FzZSBPRE1JX0lOVkFMSURfUEFUSDoKLSAgICAgICAgICAgIHByaW50ZiggImludmFsaWQg cGF0aFxuIiApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBPRE1JX01BTExP Q19FUlI6Ci0gICAgICAgICAgICBwcmludGYoICJtYWxsb2MgZmFpbGVkXG4iICk7Ci0gICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcHJpbnRmKCAidW5r bm93biBlcnJvciAlZFxuUGxlYXNlIGNhbGwgSUJNXG4iLCBvZG1lcnJubyApOwotICAgICAgICB9 Ci0gICAgICAgIHJldHVybihyYyk7Ci0gICAgfQotCi0gICAgLyogb3BlbiB0aGUgQ3VBdCBjbGFz cyAqLwotICAgIHJldENsYXNzID0gb2RtX29wZW5fY2xhc3MoQ3VBdF9DTEFTUyk7Ci0gICAgaWYg KCgoaW50KXJldENsYXNzKSA9PSAtMSkgewotICAgICAgICBwcmludGYoICJrZXJtaXQ6IHgyNWxv Y2FsX251YSgpOiBjYW4ndCBvcGVuIEN1QXQgY2xhc3MgaW4gb2RtLiAiICk7Ci0gICAgICAgIHN3 aXRjaCAob2RtZXJybm8pIHsKLSAgICAgICAgICBjYXNlIE9ETUlfQ0xBU1NfRE5FOgotICAgICAg ICAgICAgcHJpbnRmKCAiQ3VBdCBjbGFzcyBkb2Vzbid0IGV4aXN0XG4iICk7Ci0gICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICBjYXNlIE9ETUlfQ0xBU1NfUEVSTVM6Ci0gICAgICAgICAgICBw cmludGYoICJwZXJtaXNzaW9uIHRvIEN1QXQgY2xhc3MgZmlsZSBkZW5pZWRcbiIgKTsKLSAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgT0RNSV9NQUdJQ05PX0VSUjoKLSAgICAgICAg ICAgIHByaW50ZiggIkN1QXQgaXMgYW4gaW52YWxpZCBPRE0gb2JqZWN0IGNsYXNzXG4iICk7Ci0g ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIE9ETUlfT1BFTl9FUlI6Ci0gICAgICAg ICAgICBwcmludGYoICJjYW5ub3Qgb3BlbiBDdUF0IGNsYXNzIC0gYW5kIGRvbid0IGtub3cgd2h5 IVxuIiApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBPRE1JX0lOVkFMSURf UEFUSDoKLSAgICAgICAgICAgIHByaW50ZiggImludmFsaWQgcGF0aFxuIiApOwotICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBPRE1JX1RPT01BTllDTEFTU0VTOgotICAgICAgICAg ICAgcHJpbnRmKCAidG9vIG1hbnkgb2JqZWN0IGNsYXNzZXMgaGF2ZSBiZWVuIG9wZW5lZFxuIiAp OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHBy aW50ZiggInVua25vd24gZXJyb3IgJWRcblBsZWFzZSBjYWxsIElCTVxuIiwgb2RtZXJybm8gKTsK LSAgICAgICAgfQotICAgICAgICByZXR1cm4ocmMpOwotICAgIH0KLQotI2lmZGVmIERFQlVHCi0g ICAgcHJpbnRmKCJyZXRDbGFzcz0gJWRcbiIsIHJldENsYXNzKTsKLSNlbmRpZiAvKiBERUJVRyAq LwotCi0gICAgcmVzcG9uc2UgPSAoc3RydWN0IEN1QXQgKilvZG1fZ2V0X2ZpcnN0KCByZXRDbGFz cywgcXVlcnksIE5VTEwgKTsKLSAgICBpZiAoKChpbnQpcmVzcG9uc2UpID09IC0xKSB7Ci0gICAg ICAgIHByaW50ZiggImtlcm1pdDogeDI1bG9jYWxfbnVhKCk6IG9kbSBxdWVyeSBmYWlsZWQgIiAp OwotICAgICAgICBzd2l0Y2ggKG9kbWVycm5vKSB7Ci0gICAgICAgICAgY2FzZSBPRE1JX0JBRF9D UklUOiAgICAgICAgICAgLyogUHJvZ3JhbW1pbmcgZXJyb3IgKi8KLSAgICAgICAgICAgIHByaW50 ZiggImJhZCBzZWFyY2ggY3JpdGVyaWFcbiIgKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgIGNhc2UgT0RNSV9DTEFTU19ETkU6Ci0gICAgICAgICAgICBwcmludGYoICJDdUF0IGNsYXNz IGRvZXNuJ3QgZXhpc3RcbiIgKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug T0RNSV9DTEFTU19QRVJNUzoKLSAgICAgICAgICAgIHByaW50ZiggInBlcm1pc3Npb24gdG8gQ3VB dCBjbGFzcyBmaWxlIGRlbmllZFxuIiApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg Y2FzZSBPRE1JX0lOVEVSTkFMX0VSUjoKLSAgICAgICAgICAgIHByaW50Zigib2RtIGludGVybmFs IGVycm9yXG5QbGVhc2UgY29udGFjdCB5b3VyIGFkbWluaXN0cmF0b3JcbiIgKTsKLSAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgT0RNSV9JTlZBTElEX0NMWE46Ci0gICAgICAgICAg ICBwcmludGYoIkN1QXQgaXMgaW52YWxpZCBvciBpbmNvbnNpc3RlbnQgb2RtIGNsYXNzIGNvbGxl Y3Rpb25cbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBPRE1JX0lOVkFM SURfUEFUSDoKLSAgICAgICAgICAgIHByaW50ZiggImludmFsaWQgcGF0aFxuIiApOwotICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBPRE1JX01BR0lDTk9fRVJSOgotICAgICAgICAg ICAgcHJpbnRmKCAiQ3VBdCBpcyBhbiBpbnZhbGlkIE9ETSBvYmplY3QgY2xhc3NcbiIgKTsKLSAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgT0RNSV9NQUxMT0NfRVJSOgotICAgICAg ICAgICAgcHJpbnRmKCAibWFsbG9jIGZhaWxlZFxuIiApOwotICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgY2FzZSBPRE1JX09QRU5fRVJSOgotICAgICAgICAgICAgcHJpbnRmKCAiY2Fubm90 IG9wZW4gQ3VBdCBjbGFzcyAtIGFuZCBkb24ndCBrbm93IHdoeSFcbiIgKTsKLSAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgIGNhc2UgT0RNSV9UT09NQU5ZQ0xBU1NFUzoKLSAgICAgICAgICAg IHByaW50ZiggInRvbyBtYW55IG9iamVjdCBjbGFzc2VzIGhhdmUgYmVlbiBvcGVuZWRcbiIgKTsK LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBwcmlu dGYoICJ1bmtub3duIGVycm9yICVkXG5QbGVhc2UgY2FsbCBJQk1cbiIsIG9kbWVycm5vICk7Ci0g ICAgICAgIH0KLSAgICAgICAgcmV0dXJuKHJjKTsKLSAgICB9Ci0KLSAgICAvKiBjaGVjayBmb3Ig YSBtZWFuaW5nZnVsbCByZXNwb25zZSAqLwotICAgIGlmIChyZXNwb25zZSAhPSBOVUxMKSB7Ci0g ICAgICAgIGlmIChyZXNwb25zZS0+dmFsdWUgIT0gTlVMTCkgewotICAgICAgICAgICAgc3RyY3B5 KGJ1ZiwgcmVzcG9uc2UtPnZhbHVlKTsKLSAgICAgICAgICAgIHJjID0gc3RybGVuKCBidWYgKTsK LSNpZmRlZiBERUJVRwotLyoKLSAgICAgICAgICAgIHByaW50ZiggImF0dHJpYnV0ZSBuYW1lIGlz OiAlc1xuIiwgKGNoYXIgKilyZXNwb25zZS0+YXR0cmlidXRlICk7Ci0gICAgICAgICAgICBwcmlu dGYoICJJIHRoaW5rIG15IGFkZHJlc3MgaXMgJXNcbiIsIChjaGFyKilyZXNwb25zZS0+dmFsdWUg KTsKLSovCi0jZW5kaWYgLyogREVCVUcgKi8KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg IHByaW50ZiggImtlcm1pdDogeDI1bG9jYWxfbnVhKCk6IGNvdWxkbid0IGZpbmQgdGhlIGxvY2Fs IE5VQVxuIiApOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3dpdGNoIChvZG1l cnJubykgewotICAgICAgICAgIGNhc2UgT0RNSV9CQURfQ1JJVDoKLSAgICAgICAgICAgIHByaW50 ZiggIkVycm9yOiBPRE1JX0JBRF9DUklUIC0gYmFkIGNyaXRlcmlhXG4iICk7Ci0gICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICBjYXNlIE9ETUlfQ0xBU1NfRE5FOgotICAgICAgICAgICAgcHJp bnRmKCAiRXJyb3I6IE9ETUlfQ0xBU1NfRE5FIC0gY2xhc3MgZG9lc24ndCBleGlzdFxuIiApOwot ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBPRE1JX0NMQVNTX1BFUk1TOgotICAg ICAgICAgICAgcHJpbnRmKCAiRXJyb3I6IE9ETUlfQ0xBU1NfUEVSTVMgLSBjbGFzcyBwZXJtaXNz aW9uc1xuIiApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBPRE1JX0lOVEVS TkFMX0VSUjoKLSAgICAgICAgICAgIHByaW50ZiggIkVycm9yOiBPRE1JX0lOVEVSTkFMX0VSUiAt IHBhbmljXG4iICk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIE9ETUlfSU5W QUxJRF9DTFhOOgotICAgICAgICAgICAgcHJpbnRmKCAiRXJyb3I6IE9ETUlfSU5WQUxJRF9DTFhO IC0gaW52YWxpZCBjb2xsZWN0aW9uXG4iICk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICBjYXNlIE9ETUlfSU5WQUxJRF9QQVRIOgotICAgICAgICAgICAgcHJpbnRmKCAiRXJyb3I6IE9E TUlfSU5WQUxJRF9QQVRIIC0gaW52YWxpZCBwYXRoIC0gd2hhdCBwYXRoP1xuIiApOwotICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBPRE1JX01BR0lDTk9fRVJSOgotICAgICAgICAg ICAgcHJpbnRmKCAiRXJyb3I6IE9ETUlfTUFHSUNOT19FUlIgLSBpbnZhbGlkIG9iamVjdCBtYWdp Y1xuIiApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBPRE1JX01BTExPQ19F UlI6Ci0gICAgICAgICAgICBwcmludGYoICJFcnJvcjogT0RNSV9NQUxMT0NfRVJSIC0gbWFsbG9j IGZhaWxlZFxuIiApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBPRE1JX09Q RU5fRVJSOgotICAgICAgICAgICAgcHJpbnRmKCAiRXJyb3I6IE9ETUlfT1BFTl9FUlIgLSBjYW5u b3Qgb3BlbiBjbGFzc1xuIiApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBP RE1JX1RPT01BTllDTEFTU0VTOgotICAgICAgICAgICAgcHJpbnRmKCAiRXJyb3I6IE9ETUlfVE9P TUFOWUNMQVNTRVMgLSB0b28gbWFueSBjbGFzc2VzXG4iICk7Ci0gICAgICAgICAgICBicmVhazsK LSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcHJpbnRmKCAiVW5rbm93biBlcnJvciFc biIgKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4ocmMpOwotICAgIH0KLQotICAgIC8qIGNs b3NlIHRoZSBkYXRhYmFzZSBhZ2FpbiAqLwotICAgIG9kbV9jbG9zZV9jbGFzcyggcmV0Q2xhc3Mg KTsKLQotICAgIC8qIGZvcmdldCBhYm91dCBPRE0gYWxsIHRvZ2V0aGVyICovCi0gICAgb2RtX3Rl cm1pbmF0ZSgpOwotCi0jaWZkZWYgVFJBQ0UKLSAgICBwcmludGYoICJUUkFDRTogbGVhdmluZyB4 MjVsb2NhbF9udWFcbiIgKTsKLSNlbmRpZiAvKiBUUkFDRSAqLwotCi0gICAgZGVidWcoRjExMCwg IngyNWxvY2FsX251YSBsb2NhbCBhZGRyZXNzIGlzICIsIGJ1ZiwgMCk7Ci0gICAgcmV0dXJuKHJj KTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBGdW5jdGlvbjogeDI1ZmFjaWxpdGll cwotICoKLSAqIERlc2NyaXB0aW9uOgotICogICAgICBidWlsZCB1cCB0aGUgZmFjaWxpdGllcyBk YXRhIHBhY2tldCBmb3IgYSBjb25uZWN0aW9uIHJlcXVlc3QKLSAqCi0gKiBQYXJhbWV0ZXJzOgot ICogICAgICBhIHByZS1hbGxvY2F0ZWQgY2hhciBidWZmZXIsIG5vcm1hbGx5IE5QSV9NQVhfREFU QSBiaWcuCi0gKgotICogUmV0dXJuIFZhbHVlOgotICogICAgICB0aGUgbnVtYmVyIG9mIGNoYXJh Y3RlcnMgaW5zZXJ0ZWQgaW50byB0aGUgYnVmZmVyCi0gKi8KLWludAoteDI1ZmFjaWxpdGllcyhi dWZmZXIpIGNoYXIgKmJ1ZmZlcjsgewotICAgIGV4dGVybiBpbnQgcmV2Y2FsbDsKLSAgICBleHRl cm4gaW50IGNsb3NncjsKLSAgICBjaGFyICpwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiB0ZW1wIHBvaW50ZXIgKi8KLSAgICBjaGFyICpzdGFydDsgICAgICAgICAgICAgICAgICAgICAg ICAvKiB0ZW1wIHBvaW50ZXIgKi8KLQotI2lmZGVmIFRSQUNFCi0gICAgcHJpbnRmKCAiVFJBQ0U6 IGVudGVyaW5nIHgyNWZhY2lsaXRpZXNcbiIgKTsKLSNlbmRpZiAvKiBUUkFDRSAqLwotCi0gICAg cCA9IGJ1ZmZlciArIDE7Ci0gICAgc3RhcnQgPSBwOwotCi0jaWZkZWYgREVCVUcKLSAgICBwcmlu dGYoICJrZXJtaXQ6IHgyNWZhY2lsaXRpZXMoKTogZ2V0dGluZyBYMjUgZmFjaWxpdGllc1xuIiAp OwotI2VuZGlmIC8qIERFQlVHICovCi0KLSAgICBpZiAocmV2Y2FsbCAhPSAwKSB7Ci0jaWZkZWYg REVCVUcKLSAgICAgICAgcHJpbnRmKCJyZXZlcnNlIGNoYXJnZTogJWRcbiIsIHJldmNhbGwgKTsK LSNlbmRpZiAvKiBERUJVRyAqLwotICAgICAgICAqKytwID0gMHgwMTsKLSAgICAgICAgKisrcCA9 IHJldmNhbGw7Ci0gICAgfQotICAgIGlmIChjbG9zZ3IgPiAwKSB7Ci0jaWZkZWYgREVCVUcKLSAg ICAgICAgcHJpbnRmKCJjbG9zZWQgdXNlciBncm91cDogJWRcbiIsIGNsb3NnciApOwotI2VuZGlm IC8qIERFQlVHICovCi0gICAgICAgICorK3AgPSAweDAzOwotICAgICAgICAqKytwID0gY2xvc2dy OwotICAgIH0KLQotI2lmZGVmIERFQlVHCi0gICAgaWYgKHAgPT0gc3RhcnQpIHsKLSAgICAgICAg cHJpbnRmKCAibm8gZmFjaWxpdGllc1xuIiApOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwot Ci0gICAgLyogc2V0IHRoZSBzaXplIG9mIHRoZSBmYWNpbGl0aWVzIGJ1ZmZlciAqLwotICAgICpi dWZmZXIgPSAoY2hhcikoIHAgLSBzdGFydCApICYgMHhmZjsKLQotI2lmZGVmIERFQlVHCi0gICAg cHJpbnRmKCAia2VybWl0OiB4MjVmYWNpbGl0aWVzKCk6IHJldHVybmluZyAlZFxuIiwgKGludCko cCAtIGJ1ZmZlcikgICk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotI2lmZGVmIFRSQUNFCi0gICAg cHJpbnRmKCAiVFJBQ0U6IGxlYXZpbmcgeDI1ZmFjaWxpdGllc1xuIiApOwotI2VuZGlmIC8qIFRS QUNFICovCi0KLSAgICAvKiByZXR1cm4gdGhlIHNpemUgb2YgdGhlIGZhY2lsaXRpZXMgd2l0aCBz aXplIGJ5dGUgKi8KLSAgICAvKiAxID09IG5vIGZhY2lsaXRpZXMsIDAgYnl0ZSByZXR1cm5lZCBh cyBmYWNpbGl0aWVzIHNpemUgKi8KLSAgICByZXR1cm4oIChpbnQpKHAgLSBidWZmZXIpICk7Ci19 Ci0KLS8qCi0gKiByZXNldCB0aGUgY29ubmVjdGlvbgotICovCi1pbnQKLXgyNXJlc2V0KGNhdXNl LCBkaWFnbikgY2hhciBjYXVzZTsgY2hhciBkaWFnbjsgewotICAgIC8qIG5vdCBpbXBsZW1lbnRl ZCAqLwotCi0jaWZkZWYgVFJBQ0UKLSAgICBwcmludGYoICJUUkFDRTogZW50ZXJpbmcgeDI1cmVz ZXRcbiIgKTsKLSNlbmRpZiAvKiBUUkFDRSAqLwotCi0jaWZkZWYgVFJBQ0UKLSAgICBwcmludGYo ICJUUkFDRTogbGVhdmluZyB4MjVyZXNldFxuIiApOwotI2VuZGlmIC8qIFRSQUNFICovCi0KLSAg ICByZXR1cm4oMCk7Ci19Ci0KLS8qCi0gKiBjbGVhciB0aGUgeDI1IGNvbm5lY3Rpb24gLSBpZTog aGFuZyB1cAotICovCi1pbnQKLXgyNWNsZWFyKCkgewotICAgIGludCBnZXRfZmxhZ3MgPSAwOyAg ICAgICAgICAgICAgICAgIC8qIHByaW9yaXR5IGZsYWcgZm9yIGdldG1zZyAqLwotICAgIGludCBw dXRfZmxhZ3MgPSAwOyAgICAgICAgICAgICAgICAgIC8qIHNlbmQgZmxhZ3MsIGFsd2F5cyAwICov Ci0gICAgdWxvbmcgdHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJpbWl0aXZlIHR5 cGUgKi8KLSAgICBOX2Rpc2Nvbl9yZXFfdCAqZGlzY29uX3JlcTsgICAgICAgICAvKiBwb2ludGVy IHRvIE5fRElTQ09OX1JFUSAqLwotICAgIE5fZGlzY29uX2luZF90ICpkaXNjb25faW5kOyAgICAg ICAgIC8qIHBvaW50ZXIgdG8gTl9ESVNDT05fSU5EICovCi0gICAgTl9ucGlfZGF0YV90ICpkaXNj b25fZGF0YTsgICAgICAgICAgLyogcG9pbnRlciB0byBOX0RJU0NPTl9JTkQgZGF0YSAqLwotICAg IGludCByYyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiBjb2RlICovCi0K LSNpZmRlZiBUUkFDRQotICAgIHByaW50ZiggIlRSQUNFOiBlbnRlcmluZyB4MjVjbGVhclxuIiAp OwotI2VuZGlmIC8qIFRSQUNFICovCi0KLSNpZmRlZiBERUJVRwotICAgIC8qIHByaW50ZiggIngy NWNsZWFyKCk6IGNoZWNraW5nIGxhc3QgbXNnOiAlc1xuIiwgeDI1cHJpbSh4MjVsYXN0bXNnKSk7 ICovCi0jZW5kaWYgLyogREVCVUcgKi8KLQotICAgIC8qCi0gICAgKiBUaGUgZm9sbG93aW5nIGNo ZWNrcyBhcmUgdXNlZCB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCBkaXNjb25uZWN0Ci0gICAgKiBv ciB1bmJpbmQgdHdpY2UgLSB0aGlzIHNlZW1zIHRvIHRocm93IHRoZSBOUEkgaW50ZXJmYWNlIHJp Z2h0IG91dCBvZgotICAgICoga2lsdGVyLgotICAgICovCi0gICAgc3dpdGNoKHgyNWxhc3Rtc2cp IHsKLSAgICAgIGNhc2UgTl9CSU5EX0FDSzoKLSAgICAgIGNhc2UgTl9DT05OX0NPTjoKLSAgICAg IGNhc2UgTl9DT05OX1JFUToKLSAgICAgIGNhc2UgTl9EQVRBX1JFUToKLSAgICAgIGNhc2UgTl9E QVRBX0lORDoKLSAgICAgICAgewotI2lmZGVmIERFQlVHCi0gICAgICAgICAgICAvKiBwcmludGYo IngyNWNsZWFyKCk6IGFjdGl2ZWx5IGRpc2Nvbm5lY3RpbmdcbiIpOyAqLwotI2VuZGlmIC8qIERF QlVHICovCi0KLSAgICAgICAgICAgICAgICBkaXNjb25fcmVxID0gKE5fZGlzY29uX3JlcV90ICop bWFsbG9jKE5QSV9NQVhfQ1RMKTsKLSAgICAgICAgICAgICAgICBpZiAoZGlzY29uX3JlcSA9PSBO VUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBlcnJvcigia2VybWl0IHgyNWNsZWFyKCk6IGRp c2Nvbl9yZXEgbWFsbG9jIGZhaWxlZFxuIik7Ci0gICAgICAgICAgICAgICAgICAgIC8qIGZhbGx0 aHJvdWdoLCB0cnkgdG8gdW5iaW5kIHRoZSBOUEkgYW55d2F5ICovCi0gICAgICAgICAgICAgICAg fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZGlzY29uX3JlcS0+UFJJTV90eXBlID0gTl9E SVNDT05fUkVROwotICAgICAgICAgICAgICAgICAgICBkaXNjb25fcmVxLT5ESVNDT05fcmVhc29u ID0gMDsgICAgICAvKiBub3QgdXNlZCBieSBBSVggKi8KLSAgICAgICAgICAgICAgICAgICAgZGlz Y29uX3JlcS0+UkVTX2xlbmd0aCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGRpc2Nvbl9yZXEt PlJFU19vZmZzZXQgPSAodWxvbmcpKHNpemVvZihOX2Rpc2Nvbl9yZXFfdCkpOwotICAgICAgICAg ICAgICAgICAgICBkaXNjb25fcmVxLT5TRVFfbnVtYmVyID0geDI1c2Vxbm87ICAvKiBnbG9iYWwg Ki8KLQotICAgICAgICAgICAgICAgICAgICBpZiAoeDI1cHV0bXNnKHR0eWZkLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChOX25waV9jdGxfdCopZGlzY29uX3JlcSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTl9ucGlfZGF0YV90KilOVUxMLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJnB1dF9mbGFncwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkg PCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwZXJyb3IoIngyNXB1dG1zZyBmYWlsZWQg aW4geDI1Y2xlYXIoKSIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg ICAgIGRpc2Nvbl9pbmQgPSAoTl9kaXNjb25faW5kX3QgKiltYWxsb2MoTlBJX01BWF9DVEwpOwot ICAgICAgICAgICAgICAgICAgICBkaXNjb25fZGF0YSA9IChOX25waV9kYXRhX3QgKiltYWxsb2Mo TlBJX01BWF9EQVRBKTsKLSAgICAgICAgICAgICAgICAgICAgaWYoKGRpc2Nvbl9pbmQgPT0gTlVM TCkgfHwgKGRpc2Nvbl9kYXRhID09IE5VTEwpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBw ZXJyb3IoIngyNWNsZWFyKCk6IGRpc2Nvbl9pbmQgbWFsbG9jIGZhaWxlZFxuIik7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAvKiBmYWxsdGhyb3VnaCwgdHJ5IHRvIHVuYmluZCB0aGUgTlBJIGFu eXdheSAqLwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg ICAgICAgaWYoeDI1Z2V0bXNnKHR0eWZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChOX25waV9jdGxfdCopZGlzY29uX2luZCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBOUElfTUFYX0NUTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoTl9ucGlfZGF0YV90KilkaXNjb25fZGF0YSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBOUElfTUFYX0RBVEEsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJmdldF9mbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBOX09LX0FDSwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgPCAw ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJvcigieDI1Z2V0bXNnIGZhaWxl ZCBpbiB4MjVjbGVhcigpIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZmFsbHRo cm91Z2gsIHRyeSB0byB1bmJpbmQgdGhlIE5QSSBhbnl3YXkgKi8KLSAgICAgICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoeDI1bGFz dG1zZyAhPSBOX1VOQklORF9SRVEpIHsKLSAgICAgICAgcmMgPSB4MjV1bmJpbmQodHR5ZmQpOwot ICAgIH0KLQotI2lmZGVmIFRSQUNFCi0gICAgcHJpbnRmKCAiVFJBQ0U6IGxlYXZpbmcgeDI1Y2xl YXJcbiIgKTsKLSNlbmRpZiAvKiBUUkFDRSAqLwotCi0gICAgcmV0dXJuKHJjKTsKLX0KLQotI2lm ZGVmIERFQlVHCi0vKgotICogb25seSBmb3IgZGVidWdnaW5nCi0gKgotICogdHVybiB0aGUgaW50 ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgYSBkYXRhYmxvY2sgaW50byBzb21ldGhpbmcKLSAqIGhh bGYtd2F5IHJlYWRhYmxlLiBCZWNhdXNlIHRoZSBsZW5ndGggaXMga25vd24sIHdlIGNhbiBwcmlu dAotICogdGhlIHN0cmluZyBpbmNsdWRpbmcgbnVsbCdzIGV0YyAoaW1wb3J0YW50LCBiZWNhdXNl IHRoZSBmaXJzdCghKQotICogYnl0ZSBvZiBhbiBYMTIxIGFkZHJlc3MgaXMgYSBudWxsISAoWDEy MSBhZGRyID09IDAgKyBYMjUgYWRkcikKLSAqLwoteDI1ZHVtcF9kYXRhKGNoYXIgKmFkZHIsIHVs b25nIG9mZnNldCwgdWxvbmcgbGVuZ3RoKSB7Ci0gICAgY2hhciAqcHRyID0gYWRkciArIG9mZnNl dDsKLSAgICB1bG9uZyBpID0gbGVuZ3RoOwotICAgIC8qIGFsbG9jYXRlIGVub3VnaCBtZW1vcnkg Zm9yIGFsbCB1bnByaW50YWJsZSBjaGFycyAqLwotICAgIGNoYXIgKmJ1ZiA9IChjaGFyICopbWFs bG9jKCBsZW5ndGggKiA0ICk7Ci0gICAgY2hhciAqYnB0ciA9IGJ1ZjsgICAvKiBwb2ludGVyIHRv IGN1cnJlbnQgcGxhY2UgaW4gdGhlIHByaW50IGJ1ZmZlciAqLwotCi0gICAgd2hpbGUgKGkgPiAw KSB7Ci0gICAgICAgIGlmIChpc3ByaW50KCpwdHIpKSB7Ci0gICAgICAgICAgICAqYnB0cisrID0g KnB0cjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICpicHRyKysgPSAnWyc7Ci0gICAg ICAgICAgICBzdHJjcHkoYnB0cixja2N0b3goKnB0ciwxKSk7IGJwdHIgKz0gMjsKLSAgICAgICAg ICAgICpicHRyKysgPSAnXSc7Ci0gICAgICAgIH0KLSAgICAgICAgcHRyKys7Ci0gICAgICAgIGkt LTsKLSAgICB9Ci0gICAgaWYgKGxlbmd0aCA+IDApIHsKLSAgICAgICAgKmJwdHIgPSAnXDAnOwot ICAgICAgICBwcmludGYoICIlcyIsIGJ1ZiApOwotICAgIH0KLSAgICBwcmludGYoICIgKCVkKyVk KVxuIiwgb2Zmc2V0LCBsZW5ndGggKTsKLQotICAgIGlmIChidWYpIHsgZnJlZShidWYpOyBidWYg PSBOVUxMOyB9Ci0gICAgcmV0dXJuOwotfQotCi0vKgotICogb25seSBmb3IgZGVidWdnaW5nCi0g KiBwcmludCBhcyBtdWNoIHVzZWZ1bCBpbmZvcm1hdGlvbiBhYm91dCBhIHBhY2tldCBhcyBwb3Nz aWJsZQotICovCi14MjVkdW1wX3ByaW0ocHJpbWl0aXZlKSAgICBOX25waV9jdGxfdCAqcHJpbWl0 aXZlOyB7Ci0gICAgcHJpbnRmKCJQcmltaXRpdmUiKTsKLSAgICBzd2l0Y2ggKHByaW1pdGl2ZS0+ UFJJTV90eXBlKSB7Ci0gICAgICBjYXNlIE5fQklORF9BQ0s6Ci0gICAgICAgIHByaW50ZiggIlx0 Tl9CSU5EX0FDS1xuXHRhZGRyZXNzOlx0IiApOwotICAgICAgICB4MjVkdW1wX2RhdGEoIChjaGFy ICopcHJpbWl0aXZlLAotICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlLT5iaW5kX2Fjay5B RERSX29mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZS0+YmluZF9hY2suQURE Ul9sZW5ndGggKTsKLSAgICAgICAgcHJpbnRmKCAiXHRwcm90byBpZDpcdCIgKTsKLSAgICAgICAg eDI1ZHVtcF9kYXRhKCAoY2hhciAqKXByaW1pdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgIHBy aW1pdGl2ZS0+YmluZF9hY2suUFJPVE9JRF9vZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICBw cmltaXRpdmUtPmJpbmRfYWNrLlBST1RPSURfbGVuZ3RoICk7Ci0gICAgICAgIHByaW50ZiggIlx0 Y29ubmluZDpcdCVkXG5cdHRva2VuOlx0XHQlZFxuIiwKLSAgICAgICAgICAgICAgIHByaW1pdGl2 ZS0+YmluZF9hY2suQ09OSU5EX251bWJlciwKLSAgICAgICAgICAgICAgIHByaW1pdGl2ZS0+Ymlu ZF9hY2suVE9LRU5fdmFsdWUgKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgTl9CSU5E X1JFUToKLSAgICAgICAgcHJpbnRmKCAiXHROX0JJTkRfUkVRXG5cdGFkZHJlc3M6XHQiICk7Ci0g ICAgICAgIHgyNWR1bXBfZGF0YSggKGNoYXIgKilwcmltaXRpdmUsCi0gICAgICAgICAgICAgICAg ICAgICBwcmltaXRpdmUtPmJpbmRfcmVxLkFERFJfb2Zmc2V0LAotICAgICAgICAgICAgICAgICAg ICAgcHJpbWl0aXZlLT5iaW5kX3JlcS5BRERSX2xlbmd0aCApOwotICAgICAgICBwcmludGYoICJc dHByb3RvIGlkOlx0IiApOwotICAgICAgICB4MjVkdW1wX2RhdGEoIChjaGFyICopcHJpbWl0aXZl LAotICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlLT5iaW5kX3JlcS5QUk9UT0lEX29mZnNl dCwKLSAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZS0+YmluZF9yZXEuUFJPVE9JRF9sZW5n dGggKTsKLSAgICAgICAgcHJpbnRmKCAiXHRjb25uaW5kOlx0JWRcblx0ZmxhZ3M6XHRcdCVkXG4i LAotICAgICAgICAgICAgICAgcHJpbWl0aXZlLT5iaW5kX3JlcS5DT05JTkRfbnVtYmVyLAotICAg ICAgICAgICAgICAgcHJpbWl0aXZlLT5iaW5kX3JlcS5CSU5EX2ZsYWdzICk7Ci0gICAgICAgIGJy ZWFrOwotCi0gICAgICBjYXNlIE5fQ09OTl9DT046Ci0gICAgICAgIHByaW50ZiggIlx0Tl9DT05O X0NPTlxuIiApOwotICAgICAgICBwcmludGYoICJcdFJFU1x0XHQiICk7Ci0gICAgICAgIHgyNWR1 bXBfZGF0YSggKGNoYXIgKilwcmltaXRpdmUsCi0gICAgICAgICAgICAgICAgICAgICBwcmltaXRp dmUtPmNvbm5fY29uLlJFU19vZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmUt PmNvbm5fY29uLlJFU19sZW5ndGggKTsKLSAgICAgICAgcHJpbnRmKCAiXHRmbGFnczpcdCVkXG4i LCBwcmltaXRpdmUtPmNvbm5fY29uLkNPTk5fZmxhZ3MgKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAg ICAgIGNhc2UgTl9DT05OX0lORDoKLSAgICAgICAgcHJpbnRmKCAiXHROX0NPTk5fSU5EXG4iICk7 Ci0gICAgICAgIHByaW50ZiggIlx0c291cmNlOlx0XHQiICk7Ci0gICAgICAgIHgyNWR1bXBfZGF0 YSggKGNoYXIgKilwcmltaXRpdmUsCi0gICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmUtPmNv bm5faW5kLlNSQ19vZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmUtPmNvbm5f aW5kLlNSQ19sZW5ndGggKTsKLSAgICAgICAgcHJpbnRmKCAiXHRkZXN0aW5hdGlvbjpcdCIgKTsK LSAgICAgICAgeDI1ZHVtcF9kYXRhKCAoY2hhciAqKXByaW1pdGl2ZSwKLSAgICAgICAgICAgICAg ICAgICAgIHByaW1pdGl2ZS0+Y29ubl9pbmQuREVTVF9vZmZzZXQsCi0gICAgICAgICAgICAgICAg ICAgICBwcmltaXRpdmUtPmNvbm5faW5kLkRFU1RfbGVuZ3RoICk7Ci0gICAgICAgIHByaW50Zigg Ilx0U0VRX251bWJlcjpcdCVkXG4iLCBwcmltaXRpdmUtPmNvbm5faW5kLlNFUV9udW1iZXIgKTsK LSAgICAgICAgcHJpbnRmKCAiXHRmbGFnczpcdCVkXG4iLCBwcmltaXRpdmUtPmNvbm5faW5kLkNP Tk5fZmxhZ3MgKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgTl9DT05OX1JFUToKLSAg ICAgICAgcHJpbnRmKCAiXHROX0NPTk5fUkVRXG5cdGRlc3RpbmF0aW9uOlx0IiApOwotICAgICAg ICB4MjVkdW1wX2RhdGEoIChjaGFyICopcHJpbWl0aXZlLAotICAgICAgICAgICAgICAgICAgICAg cHJpbWl0aXZlLT5jb25uX3JlcS5ERVNUX29mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgIHBy aW1pdGl2ZS0+Y29ubl9yZXEuREVTVF9sZW5ndGggKTsKLSAgICAgICAgcHJpbnRmKCAiXHRmbGFn czpcdCVkXG4iLCBwcmltaXRpdmUtPmNvbm5fcmVxLkNPTk5fZmxhZ3MgKTsKLSAgICAgICAgYnJl YWs7Ci0KLSAgICAgIGNhc2UgTl9DT05OX1JFUzoKLSAgICAgICAgcHJpbnRmKCAiXHROX0NPTk5f UkVTXG4iICk7Ci0gICAgICAgIHByaW50ZiggIlx0VE9LRU5fdmFsdWVcdCVkXG4iLCBwcmltaXRp dmUtPmNvbm5fcmVzLlRPS0VOX3ZhbHVlICk7Ci0gICAgICAgIHByaW50ZiggIlx0U0VRX251bWJl clx0JWRcbiIsIHByaW1pdGl2ZS0+Y29ubl9yZXMuU0VRX251bWJlciApOwotICAgICAgICBwcmlu dGYoICJcdENPTk5fZmxhZ3NcdCVkXG4iLCBwcmltaXRpdmUtPmNvbm5fcmVzLkNPTk5fZmxhZ3Mg KTsKLSAgICAgICAgcHJpbnRmKCAiXHRSRVNcdFx0IiApOwotICAgICAgICB4MjVkdW1wX2RhdGEo IChjaGFyICopcHJpbWl0aXZlLAotICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlLT5jb25u X3Jlcy5SRVNfb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlLT5jb25uX3Jl cy5SRVNfbGVuZ3RoICk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIE5fREFUQUNLX0lO RDoKLSAgICAgICAgcHJpbnRmKCAiXHROX0RBVEFDS19JTkRcbiIgKTsKLSAgICAgICAgYnJlYWs7 Ci0KLSAgICAgIGNhc2UgTl9EQVRBQ0tfUkVROgotICAgICAgICBwcmludGYoICJcdE5fREFUQUNL X1JFUVxuIiApOwotICAgICAgICBwcmludGYoICJcdGZsYWdzOlx0JWRcbiIsIHByaW1pdGl2ZS0+ ZGF0YV9yZXEuREFUQV94ZmVyX2ZsYWdzICk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNl IE5fREFUQV9JTkQ6Ci0gICAgICAgIHByaW50ZiggIlx0Tl9EQVRBX0lORFxuIiApOwotICAgICAg ICBwcmludGYoICJcdGZsYWdzOlx0JWRcbiIsIHByaW1pdGl2ZS0+ZGF0YV9pbmQuREFUQV94ZmVy X2ZsYWdzICk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIE5fREFUQV9SRVE6Ci0gICAg ICAgIHByaW50ZiggIlx0Tl9EQVRBX1JFUVxuIiApOwotICAgICAgICBicmVhazsKLQotICAgICAg Y2FzZSBOX0RJU0NPTl9JTkQ6Ci0gICAgICAgIHByaW50ZiggIlx0Tl9ESVNDT05fSU5EXG4iICk7 Ci0gICAgICAgIHByaW50ZiggIlx0b3JpZ2luOlx0JWRcbiIsIHByaW1pdGl2ZS0+ZGlzY29uX2lu ZC5ESVNDT05fb3JpZyApOwotICAgICAgICBwcmludGYoICJcdHJlYXNvbjpcdFx0JWRcbiIsIHBy aW1pdGl2ZS0+ZGlzY29uX2luZC5ESVNDT05fcmVhc29uICk7Ci0gICAgICAgIHByaW50ZiggIlx0 c2VxIG5vOlx0XHQlZFxuIiwgcHJpbWl0aXZlLT5kaXNjb25faW5kLlNFUV9udW1iZXIgKTsKLSAg ICAgICAgcHJpbnRmKCAiXHRSRVM6XHQiICk7Ci0gICAgICAgIHgyNWR1bXBfZGF0YSggKGNoYXIg KilwcmltaXRpdmUsCi0gICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmUtPmRpc2Nvbl9pbmQu UkVTX29mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZS0+ZGlzY29uX2luZC5S RVNfbGVuZ3RoICk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIE5fRElTQ09OX1JFUToK LSAgICAgICAgcHJpbnRmKCAiXHROX0RJU0NPTl9SRVFcbiIgKTsKLSAgICAgICAgcHJpbnRmKCAi XHRESVNDT05fcmVhc29uOlx0JWRcbiIsCi0gICAgICAgICAgICAgICBwcmltaXRpdmUtPmRpc2Nv bl9yZXEuRElTQ09OX3JlYXNvbiApOwotICAgICAgICBwcmludGYoICJcdFJFUzpcdCIgKTsKLSAg ICAgICAgeDI1ZHVtcF9kYXRhKCAoY2hhciAqKXByaW1pdGl2ZSwKLSAgICAgICAgICAgICAgICAg ICAgIHByaW1pdGl2ZS0+ZGlzY29uX3JlcS5SRVNfb2Zmc2V0LAotICAgICAgICAgICAgICAgICAg ICAgcHJpbWl0aXZlLT5kaXNjb25fcmVxLlJFU19sZW5ndGggKTsKLSAgICAgICAgcHJpbnRmKCAi XHRTRVFfbnVtYmVyOlx0JWRcbiIsIHByaW1pdGl2ZS0+ZGlzY29uX3JlcS5TRVFfbnVtYmVyICk7 Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIE5fRVJST1JfQUNLOgotICAgICAgICBwcmlu dGYoICJcdE5fRVJST1JfQUNLXG4iICk7Ci0gICAgICAgIHByaW50ZiggIlx0Q2F1c2VkIGJ5Olx0 JXNcbiIsCi0gICAgICAgICAgICAgICB4MjVwcmltKCBwcmltaXRpdmUtPmVycm9yX2Fjay5FUlJP Ul9wcmltICkgKTsKLSAgICAgICAgcHJpbnRmKCAiXHROUEkgZXJyb3I6XHQlc1xuIiwKLSAgICAg ICAgICAgICAgIHgyNWVyciggcHJpbWl0aXZlLT5lcnJvcl9hY2suTlBJX2Vycm9yICkpOwotICAg ICAgICBlcnJubyA9IHByaW1pdGl2ZS0+ZXJyb3JfYWNrLlVOSVhfZXJyb3I7Ci0gICAgICAgIHBl cnJvciggIlx0IiApOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBOX0VYREFUQV9JTkQ6 Ci0gICAgICAgIHByaW50ZiggIlx0Tl9FWERBVEFfQUNLXG4iICk7Ci0gICAgICAgIGJyZWFrOwot Ci0gICAgICBjYXNlIE5fRVhEQVRBX1JFUToKLSAgICAgICAgcHJpbnRmKCAiXHROX0VYREFUQV9S RVFcbiIgKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgTl9JTkZPX0FDSzoKLSAgICAg ICAgcHJpbnRmKCAiXHROX0lORk9fQUNLXG4iICk7Ci0gICAgICAgIHByaW50ZiggIlx0TlNEVSBz aXplOlx0JWRcbiIsIHByaW1pdGl2ZS0+aW5mb19hY2suTlNEVV9zaXplICk7Ci0gICAgICAgIHBy aW50ZiggIlx0RU5TRFUgc2l6ZTpcdCVkXG4iLCBwcmltaXRpdmUtPmluZm9fYWNrLkVOU0RVX3Np emUgKTsKLSAgICAgICAgcHJpbnRmKCAiXHRDREFUQSBzaXplOlx0JWRcbiIsIHByaW1pdGl2ZS0+ aW5mb19hY2suQ0RBVEFfc2l6ZSApOwotICAgICAgICBwcmludGYoICJcdEREQVRBIHNpemU6XHQl ZFxuIiwgcHJpbWl0aXZlLT5pbmZvX2Fjay5EREFUQV9zaXplICk7Ci0gICAgICAgIHByaW50Zigg Ilx0QUREUiBzaXplOlx0JWRcbiIsIHByaW1pdGl2ZS0+aW5mb19hY2suQUREUl9zaXplICk7Ci0g ICAgICAgIHByaW50ZiggIlx0TklEVSBzaXplOlx0JWRcbiIsIHByaW1pdGl2ZS0+aW5mb19hY2su TklEVV9zaXplICk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIE5fSU5GT19SRVE6Ci0g ICAgICAgIHByaW50ZiggIlx0Tl9JTkZPX1JFUVxuIiApOwotICAgICAgICBicmVhazsKLQotICAg ICAgY2FzZSBOX09LX0FDSzoKLSAgICAgICAgcHJpbnRmKCAiXHROX09LX0FDS1xuIiApOwotICAg ICAgICBicmVhazsKLQotICAgICAgY2FzZSBOX09QVE1HTVRfUkVROgotICAgICAgICBwcmludGYo ICJcdE5fT1BUTUdNVF9SRVFcbiIgKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgTl9S RVNFVF9DT046Ci0gICAgICAgIHByaW50ZiggIlx0Tl9SRVNFVF9DT05cbiIgKTsKLSAgICAgICAg YnJlYWs7Ci0KLSAgICAgIGNhc2UgTl9SRVNFVF9JTkQ6Ci0gICAgICAgIHByaW50ZiggIlx0Tl9S RVNFVF9JTkRcbiIgKTsKLSAgICAgICAgcHJpbnRmKCAiXHRyZWFzb246XHRcdCVkXG4iLCBwcmlt aXRpdmUtPnJlc2V0X2luZC5SRVNFVF9yZWFzb24gKTsKLSAgICAgICAgcHJpbnRmKCAiXHRvcmln aW46XHRcdCVkXG4iLCBwcmltaXRpdmUtPnJlc2V0X2luZC5SRVNFVF9vcmlnICk7Ci0gICAgICAg IGJyZWFrOwotCi0gICAgICBjYXNlIE5fUkVTRVRfUkVROgotICAgICAgICBwcmludGYoICJcdE5f UkVTRVRfUkVRXG4iICk7Ci0gICAgICAgIHByaW50ZiggIlx0cmVhc29uOlx0XHQlZFxuIiwgcHJp bWl0aXZlLT5yZXNldF9yZXEuUkVTRVRfcmVhc29uICk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAg ICBjYXNlIE5fUkVTRVRfUkVTOgotICAgICAgICBwcmludGYoICJcdE5fUkVTRVRfUkVTXG4iICk7 Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIE5fVURFUlJPUl9JTkQ6Ci0gICAgICAgIHBy aW50ZiggIlx0Tl9VREVSUk9SX0lORFxuIiApOwotICAgICAgICBicmVhazsKLQotICAgICAgY2Fz ZSBOX1VOQklORF9SRVE6Ci0gICAgICAgIHByaW50ZiggIlx0Tl9VTkJJTkRfUkVRXG4iICk7Ci0g ICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIE5fVU5JVERBVEFfUkVROgotICAgICAgICBwcmlu dGYoICJcdE5fVU5JVERBVEFfUkVRXG4iICk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNl IE5fVU5JVERBVEFfSU5EOgotICAgICAgICBwcmludGYoICJcdE5fVU5JVERBVEFfSU5EXG4iICk7 Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICAodm9pZCkgcHJpbnRm KCAiVW5rbm93biBOUEkgZXJyb3IgJWQiLCBwcmltaXRpdmUtPlBSSU1fdHlwZSApOwotICAgICAg ICByZXR1cm4gMDsKLSAgICB9Ci19Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotLyogaXQgbG9va3Mg bGlrZSBzaWduYWwgaGFuZGxpbmcgaXMgbm90IG5lZWRlZCB3aXRoIHN0cmVhbXMhICovCi0vKiB4 MjVvb2JoKCkgICAgLSBoYW5kbGUgU0lHVVJHIHNpZ25hbHMgLSB0YWtlIGZyb20gaXNvZGUgPyAq LwotCi0jZW5kaWYgLyogSUJNWDI1ICovCi0KLSNpZm5kZWYgTk9IVFRQCi0vKgotICBXaGljaCB0 aW1lLmggZmlsZXMgdG8gaW5jbHVkZS4uLiBTZWUgY2tjZGViLmggZm9yIGRlZmF1bHRzLgotICBO b3RlIHRoYXQgMCwgMSwgMiwgb3IgYWxsIDMgb2YgdGhlc2UgY2FuIGJlIGluY2x1ZGVkIGFjY29y ZGluZyB0bwotICB0aGUgc3ltYm9sIGRlZmluaXRpb25zLgotKi8KLSNpZm5kZWYgTk9USU1FSAot I2lmZGVmIFRJTUVICi0jaW5jbHVkZSA8dGltZS5oPgotI2VuZGlmIC8qIFRJTUVIICovCi0jZW5k aWYgLyogTk9USU1FSCAqLwotCi0jaWZuZGVmIE5PU1lTVElNRUgKLSNpZmRlZiBTWVNUSU1FSAot I2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYgLyogU1lTVElNRUggKi8KLSNlbmRpZiAvKiBO T1NZU1RJTUVIICovCi0KLSNpZm5kZWYgTk9TWVNUSU1FQkgKLSNpZmRlZiBTWVNUSU1FQkgKLSNp bmNsdWRlIDxzeXMvdGltZWIuaD4KLSNlbmRpZiAvKiBTWVNUSU1FQkggKi8KLSNlbmRpZiAvKiBO T1NZU1RJTUVCSCAqLwotCi0jaWZuZGVmIFRJTUVICi0jaWZuZGVmIFNZU1RJTUVICi0jaWZuZGVm IFNZU1RJTUVCSAotI2lmZGVmIFBsYW45Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbHNlCi0j aWZkZWYgQUlYNDEKLSNpbmNsdWRlIDx0aW1lLmg+Ci0jZWxzZQotI2lmZGVmIFNVTk9TNAotI2lu Y2x1ZGUgPHN5cy90aW1lLmg+Ci0jZWxzZQotI2lmZGVmIFNZU1RJTUVICi0jaW5jbHVkZSA8c3lz L3RpbWUuaD4KLSNlbHNlCi0jaWZkZWYgUE9TSVgKLSNpbmNsdWRlIDxwb3NpeC90aW1lLmg+Ci0j ZWxzZQotI2lmZGVmIENMSVgKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2Vsc2UKLSNpZmRlZiBP UzIKLSNpbmNsdWRlIDx0aW1lLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHRpbWUuaD4KLS8qICNpbmNs dWRlIDx1dGltZS5oPiAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIENMSVggKi8KLSNl bmRpZiAvKiBQT1NJWCAqLwotI2VuZGlmIC8qIFNZU1RJTUVIICovCi0jZW5kaWYgLyogU1VOT1M0 ICovCi0jZW5kaWYgLyogQUlYNDEgKi8KLSNlbmRpZiAvKiBQbGFuOSAqLwotI2VuZGlmCi0jZW5k aWYKLSNlbmRpZgotCi0jaWZkZWYgT1MyCi0jaW5jbHVkZSA8c3lzL3V0aW1lLmg+Ci0jaWZkZWYg TlQKLSNkZWZpbmUgdXRpbWJ1ZiBfdXRpbWJ1ZgotI2VuZGlmIC8qIE5UICovCi0jZGVmaW5lIHV0 aW1lICAgX3V0aW1lCi0jZWxzZQotI2lmZGVmIFNZU1VUSU1FSCAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDxzeXMvdXRpbWUuaD4gaWYgcmVxdWVzdGVkLCAgKi8KLSNpbmNsdWRlIDxzeXMvdXRp bWUuaD4gICAgICAgICAgICAgICAgICAvKiBmb3IgZXh0cmEgZmllbGRzIHJlcXVpcmVkIGJ5ICov Ci0jZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogODhPcGVuIHNwZWMu ICovCi0jaWZkZWYgVVRJTUVIICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb3IgPHV0aW1l Lmg+IGlmIHJlcXVlc3RlZCAqLwotI2luY2x1ZGUgPHV0aW1lLmg+ICAgICAgICAgICAgICAgICAg ICAgIC8qIChTVlI0LCBQT1NJWCkgKi8KLSNkZWZpbmUgU1lTVVRJTUVIICAgICAgICAgICAgICAg ICAgICAgICAvKiBVc2UgdGhpcyBmb3IgYm90aCBjYXNlcy4gKi8KLSNlbmRpZiAvKiBVVElNRUgg Ki8KLSNlbmRpZiAvKiBTWVNVVElNRUggKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIFZN UwkJCQkvKiBTTVMgMjAwNy8wMi8xNSAqLwotI2luY2x1ZGUgImNrdnJ0bC5oIgotI2VuZGlmIC8q IGRlZiBWTVMgKi8KLQotI2lmbmRlZiBIVFRQX1ZFUlNJT04KLSNkZWZpbmUgSFRUUF9WRVJTSU9O ICJIVFRQLzEuMSIKLSNlbmRpZiAvKiBIVFRQX1ZFUlNJT04gKi8KLQotI2lmZGVmIENNREFURTJU TQotdGltZV90Ci0jaWZkZWYgQ0tfQU5TSUMKLWh0dHBfZGF0ZShjaGFyICogZGF0ZSkKLSNlbHNl Ci1odHRwX2RhdGUoZGF0ZSkgY2hhciAqIGRhdGU7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8q IGh0dHBfZGF0ZSAqLyB7Ci0gICAgLyogSFRUUCBkYXRlcyBhcmUgb2YgdGhlIGZvcm06ICAiU3Vu LCAwNiBPY3QgMTk5NyAyMDoxMTo0NyBHTVQiICovCi0gICAgLyogVGhlcmUgYXJlIHR3byBvbGRl ciBmb3JtYXRzIHdoaWNoIHdlIGFyZSByZXF1aXJlZCB0byBwYXJzZQotICAgICAqIHRoYXQgd2Ug Y3VycmVudGx5IGRvIG5vdDoKLSAgICAgKgotICAgICAqIFJGQyA4NTA6ICAgIlN1bmRheSwgMDYt T2N0LTk3IDIwOjExOjQ3IEdNVCIKLSAgICAgKiBhc2N0aW1lKCk6ICJTdW4gTm92ICA2IDIwOjEx OjQ3IDE5OTciCi0gICAgICoKLSAgICAgKiBIb3dldmVyLCBpdCBpcyByZXF1aXJlZCB0aGF0IGFs bCBkYXRlcyBiZSBzZW50IGluIHRoZSBmb3JtIHdlCi0gICAgICogZG8gYWNjZXB0LiAgVGhlIG90 aGVyIHR3byBmb3JtYXRzIGFyZSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoCi0gICAgICogcmVhbGx5 IG9sZCBzZXJ2ZXJzLgotICAgICAqLwotICAgIGV4dGVybiBjaGFyIGNtZGF0ZWJ1ZlsxOF07Ci0g ICAgc3RydWN0IHRtIHRfdG07Ci0gICAgdGltZV90IHQ7Ci0gICAgY2hhciBsZGF0ZVszMl07Ci0g ICAgaW50IGo7Ci0KLSAgICBqID0gY2tpbmRleCgiLCIsZGF0ZSwwLDAsMCk7Ci0gICAgY2tzdHJu Y3B5KGxkYXRlLCZkYXRlW2orMV0sMjUpOwotCi0gICAgeyAgIC8qCi0gICAgICAgICAgIGNtY3Z0 YXRlKCkgZGF0ZSBjaGFuZ2VkIHRvIHJldHVybiBhIHN0cmluZyBwb2ludGVyLgotICAgICAgICAg ICBmZGMsIDEyIEF1ZyAyMDAxLgotICAgICAgICAqLwotICAgICAgICBjaGFyICogZHA7Ci0gICAg ICAgIGRwID0gKGNoYXIgKiljbWN2dGRhdGUobGRhdGUsMCk7IC8qIENvbnZlcnQgdG8gbm9ybWFs IGZvcm0gKi8KLSAgICAgICAgaWYgKCFkcCkKLSAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAg IHRfdG0gPSAqY21kYXRlMnRtKGRwLDEpOwotICAgIH0KLS8qCi0gIEZyb20gTHVjYXMgSGFydCwg NSBEZWMgMjAwMToKLSAgIk9uIHRoZSBzeXN0ZW1zIHRvIHdoaWNoIEkgaGF2ZSBhY2Nlc3MgKFN1 bk9TIDQuMS4xLCBTb2xhcmlzIDgsIGFuZCBUcnU2NCksCi0gIHNldHRpbmcgdG1faXNkc3QgdG8g LTEgbWFpbnRhaW5zIHRoZSBjb3JyZWN0IHRpbWV6b25lIG9mZnNldHMsIGkuZS4sIHdyaXRlcwot ICB0aGUgc3BlY2lmaWVkIChHTVQpIHRpbWUgaWYgdGhlIGJ1ZmZlciBzaXplIGlzIDIxLCBvciB0 aGUgY29udGVtcG9yYW5lb3VzCi0gIGxvY2FsdGltZSBpZiB0aGUgYnVmZmVyIHNpemUgaXMgMjUu ICBQZXJoYXBzIHRtX2lzZHN0IHNob3VsZCBiZSBzZXQgaW4KLSAgY21kYXRlMnRtKCksIHJhdGhl ciB0aGFuIG9ubHkgaW4gaHR0cF9kYXRlLiIKLSovCi0jaWZuZGVmIE5PVE1fSVNEU1QgICAgICAg ICAgICAgICAgICAgICAgLyogRm9yIHBsYXRmb3JtcyB3aGVyZSAqLwotICAgIHRfdG0udG1faXNk c3QgPSAtMTsgICAgICAgICAgICAgICAgIC8qIHRtX2lzZHN0IGRvZXNuJ3QgZXhpc3QuICovCi0j ZW5kaWYgLyogTk9UTV9JU0RTVCAqLwotCi0gICAgdCA9IG1rdGltZSgmdF90bSk7ICAgICAgICAg ICAgICAgICAgLyogTk9UIFBPUlRBQkxFICovCi0KLSNpZmRlZiBYWF9USU1FWk9ORQotICAgIHQg LT0gX3RpbWV6b25lOwotI2VuZGlmIC8qIFhYX1RJTUVaT05FICovCi0KLSAgICByZXR1cm4odCk7 Ci19Ci0jZW5kaWYgLyogQ01EQVRFMlRNICovCi0KLWNoYXIgKgotaHR0cF9ub3coKSB7Ci0gICAg c3RhdGljIGNoYXIgbm93c3RyWzMyXTsKLSNpZmRlZiBDTURBVEUyVE0KLSAgICBzdHJ1Y3QgdG0g ICpnbXQ7Ci0gICAgdGltZV90IGx0aW1lOyAgICAgICAgICAgICAgICAgICAgICAgLyogTk9UIFBP UlRBQkxFICovCi0KLSAgICB0aW1lKCZsdGltZSk7Ci0KLSAgICBnbXQgPSBnbXRpbWUoJmx0aW1l KTsgICAgICAgICAgICAgICAvKiBQUk9CQUJMWSBOT1QgUE9SVEFCTEUgKi8KLSAgICBzdHJmdGlt ZShub3dzdHIsMzIsIiVhLCAlZCAlYiAlWSAlSDolTTolUyBHTVQiLGdtdCk7IC8qIE5PVCBQT1JU QUJMRSAqLwotICAgIC8qIG5vdCBvbmx5IGlzIGl0IG5vdCBwb3J0YWJsZSBidXQgaXQncyBsb2Nh bGUtZGVwZW5kZW50ICovCi0jZWxzZQotLyoKLSAgVGhpcyBpcyBob3BlbGVzcy4gIEZpcnN0IG9m IGFsbCwgaXQgc2VlbXMgdGhhdCBIVFRQIHdhbnRzIERheSBhbmQgTW9udGgKLSAgTkFNRVM/ICBJ biBFbmdsaXNoPyAgV2hvc2UgaWRlYSB3YXMgdGhhdD8gIEV2ZW4gd29yc2UsIHRoZSBkYXRlL3Rp bWUgbXVzdCBiZQotICBleHByZXNzZWQgaW4gWnVsdSAoVVRDIChHTVQpKSwgYW5kIGNvbnZlcnRp bmcgZnJvbSBsb2NhbCB0aW1lIHRvIEdNVCBpcyBhCi0gIG5pZ2h0bWFyZS4gIEV2ZXJ5IHBsYXRm b3JtIGRvZXMgaXQgZGlmZmVyZW50bHksIGlmIGF0IGFsbCAtLSBldmVuIGlmIHdlCi0gIHJlc3Ry aWN0IG91cnNlbHZlcyB0byBVTklYLiAgRm9yIGV4YW1wbGUgKHF1b3RpbmcgZnJvbSByZWNlbnQg Qy1LZXJtaXQgZWRpdAotICBoaXN0b3J5KSwgIkZpeGVkIGEgbG9uZ3N0YW5kaW5nIGJ1ZyBpbiB0 aGUgQlNESSB2ZXJzaW9uLCBpbiB3aGljaCBpbmNvbWluZwotICBmaWxlIGRhdGVzIHdlcmUgc2V0 IGluIEdNVCByYXRoZXIgdGhhbiBsb2NhbCB0aW1lLiAgSXQgc2VlbXMgaW4gNC40QlNELAotICBs b2NhbHRpbWUoKSBkb2VzIG5vdCByZXR1cm4gdGhlIGxvY2FsIHRpbWUsIGJ1dCByYXRoZXIgWmVy byBNZXJpZGlhbiAoWnVsdSkKLSAgdGltZSAoR01UKSwgYW5kIG11c3QgYmUgYWRqdXN0ZWQgYnkg dGhlIHRtX2dtdG9mZiB2YWx1ZS4iICBTd2VsbC4gIEZvcgotICBncmVhdGVyIGFwcHJlY2lhdGlv biBvZiB0aGUgc2NvcGUgb2YgdGhlIHByb2JsZW0sIGp1c3QgdGFrZSBhIGxvb2sgYXQgdGhlCi0g IHRpbWUtcmVsYXRlZCAjaWZkZWZzIGluIGNrdXRpby5jLiAgVGhlIG9ubHkgcmlnaHQgd2F5IHRv IGRvIHRoaXMgaXMgdG8gYWRkCi0gIG91ciBvd24gcG9ydGFibGUgQVBJIGZvciBjb252ZXJ0aW5n IGJldHdlZW4gbG9jYWwgdGltZSBhbmQgR01UL1VUQy9adWx1Ci0gIHRoYXQgc2hpZWxkcyB1cyBu b3Qgb25seSBmcm9tIFVOSVhpc21zIGxpa2UgdGltZV90IGFuZCBzdHJ1Y3QgdG0sIGJ1dCBhbHNv Ci0gIHRoZSB1bmJlbGlldmFibGUgYW1vdW50IG9mIGRpZmZlcmVuY2VzIGluIHRpbWUtcmVsYXRl ZCBBUElzIC0tIGUuZy4gaXMKLSAgInRpbWV6b25lIiBhbiBleHRlcm5hbCB2YXJpYWJsZSBvciBh IGZ1bmN0aW9uOyB3aGljaCBoZWFkZXIgZmlsZShzKSBkbyB3ZQotICBpbmNsdWRlLCBldGMgZXRj IGV0Yy4gIEl0J3MgYSBtYWpvciBwcm9qZWN0LgotKi8KLSAgICBpbnQgeDsKLSAgICB4ID0gY21j dnRkYXRlKCIiLDEpOwotCi1FdmlkZW50bHkgdGhpcyBjb2RlIGlzIG5vdCB1c2VkIC0tIGlmIGl0 IGlzLCBpdCBtdXN0IGJlIGZpeGVkIHRvIHVzZQotbmV3IChhdWcgMjAwMSkgY21jdnRkYXRlKCkg Y2FsbGluZyBjb252ZW50aW9ucy4KLQotICAgIGlmICh4IDwgMCkKLSAgICAgIHJldHVybigiIik7 Ci0vKiAgeXl5eW1tZGQgaGg6bW06c3MgKi8KLS8qICAwMTIzNDU2Nzg5MDEyMzQ1NiAqLwotICAg IG5vd3N0clswXSAgPSAnWCc7ICAgICAgICAgICAgICAgICAgIC8qIDFzdCBsZXR0ZXIgb2YgZGF5 ICovCi0gICAgbm93c3RyWzFdICA9ICd4JzsgICAgICAgICAgICAgICAgICAgLyogMm5kIGxldHRl ciBvZiBkYXkgKi8KLSAgICBub3dzdHJbMl0gID0gJ3gnOyAgICAgICAgICAgICAgICAgICAvKiAz cmQgbGV0dGVyIG9mIGRheSAqLwotICAgIG5vd3N0clszXSAgPSAnLCc7Ci0gICAgbm93c3RyWzRd ICA9ICcgJzsKLSAgICBub3dzdHJbNV0gID0gY21kYXRlWzZdOwotICAgIG5vd3N0cls2XSAgPSBj bWRhdGVbN107Ci0gICAgbm93c3RyWzddICA9ICcgJzsKLSAgICBub3dzdHJbOF0gID0gJyAnOyAg ICAgICAgICAgICAgICAgICAvKiBmaXJzdCBsZXR0ZXIgb2YgbW9udGggKi8KLSAgICBub3dzdHJb OV0gID0gJyAnOyAgICAgICAgICAgICAgICAgICAvKiBzZWNvbmQgbGV0dGVyIG9mIG1vbnRoICov Ci0gICAgbm93c3RyWzEwXSA9ICcgJzsgICAgICAgICAgICAgICAgICAgLyogdGhpcmQgbGV0dGVy IG9mIG1vbnRoICovCi0gICAgbm93c3RyWzExXSA9ICcgJzsKLSAgICBub3dzdHJbMTJdID0gY21k YXRlWzBdOwotICAgIG5vd3N0clsxM10gPSBjbWRhdGVbMV07Ci0gICAgbm93c3RyWzE0XSA9IGNt ZGF0ZVsyXTsKLSAgICBub3dzdHJbMTVdID0gY21kYXRlWzNdOwotICAgIG5vd3N0clsxNl0gPSAn ICc7Ci0gICAgbm93c3RyWzE3XSA9IGNtZGF0ZVs5XTsKLSAgICBub3dzdHJbMThdID0gY21kYXRl WzEwXTsKLSAgICBub3dzdHJbMTldID0gY21kYXRlWzExXTsKLSAgICBub3dzdHJbMjBdID0gY21k YXRlWzEyXTsKLSAgICBub3dzdHJbMjFdID0gY21kYXRlWzEzXTsKLSAgICBub3dzdHJbMjJdID0g Y21kYXRlWzE0XTsKLSAgICBub3dzdHJbMjNdID0gY21kYXRlWzE1XTsKLSAgICBub3dzdHJbMjRd ID0gY21kYXRlWzE2XTsKLSAgICBub3dzdHJbMjVdID0gJyAnOwotICAgIG5vd3N0clsyNl0gPSAn Ryc7Ci0gICAgbm93c3RyWzI3XSA9ICdNJzsKLSAgICBub3dzdHJbMjhdID0gJ1QnOwotICAgIG5v d3N0clsyOV0gPSAnXDAnOwotI2VuZGlmIC8qIENNREFURTJUTSAqLwotICAgIHJldHVybihub3dz dHIpOwotfQotCi0jaWZuZGVmIE9TMgotI2lmbmRlZiBDS19BVVRIRU5USUNBVElPTgotLyogZnJv bSBja3V1c3IuaCwgd2hpY2ggdGhpcyBtb2R1bGUgbm9ybWFsbHkgZG9lc24ndCBpbmNsdWRlICov Ci1fUFJPVE9UWVAoIGludCBkY2xhcnJheSwgKGNoYXIsIGludCkgKTsKLSNlbmRpZiAvKiBDS19B VVRIRU5USUNBVElPTiAqLwotI2VuZGlmIC8qIE9TMiAqLwotLyoKLSAgQXNzaWduIGh0dHAgcmVz cG9uc2UgcGFpcnMgdG8gZ2l2ZW4gYXJyYXkuCi0gIEZvciBiZXN0IHJlc3VsdHMsIHJlc3BvbnNl IHBhaXJzIHNob3VsZCBjb250YWluIG5vIHNwYWNlcy4KLQotICBDYWxsIHdpdGg6Ci0gICAgcmVz cCAgPSAgcG9pbnRlciB0byByZXNwb25zZSBsaXN0LgotICAgIG4gICAgID0gIHNpemUgb2YgcmVz cG9uc2UgbGlzdC4KLSAgICBhcnJheSA9ICBhcnJheSBsZXR0ZXIuCi0gIFJldHVybnM6Ci0gICAg MCBvbiBmYWlsdXJlLgotICAgID49IDEsIHNpemUgb2YgYXJyYXksIG9uIHN1Y2Nlc3MuCi0qLwot c3RhdGljIGludAotI2lmZGVmIENLX0FOU0lDCi1odHRwX21rYXJyYXkoY2hhciAqKiByZXNwLCBp bnQgbiwgY2hhciBhcnJheSkKLSNlbHNlCi1odHRwX21rYXJyYXkocmVzcCwgbiwgYXJyYXkpIGNo YXIgKiogcmVzcDsgaW50IG47IGNoYXIgYXJyYXk7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsK LSNpZm5kZWYgTk9TUEwKLSAgICBpbnQgaSwgeDsKLSAgICBjaGFyICoqIGFwOwotICAgIGV4dGVy biBjaGFyICoqIGFfcHRyW107Ci0gICAgZXh0ZXJuIGludCBhX2RpbVtdOwotCi0gICAgaWYgKCFh cnJheSB8fCBuIDw9IDApCi0gICAgICByZXR1cm4oMCk7Ci0gICAgaWYgKCh4ID0gZGNsYXJyYXko YXJyYXksbikpIDwgMCkgewotICAgICAgICBwcmludGYoIj9BcnJheSBkZWNsYXJhdGlvbiBmYWls dXJlXG4iKTsKLSAgICAgICAgcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgLyogTm90ZTogYXJndW1l bnQgYXJyYXkgaXMgMC1iYXNlZCBidXQgS2VybWl0IGFycmF5IGlzIDEtYmFzZWQgKi8KLSAgICBh cCA9IGFfcHRyW3hdOwotICAgIGFwWzBdID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgIC8q IDB0aCBlbGVtZW50IGlzIGVtcHR5ICovCi0gICAgZm9yIChpID0gMTsgaSA8PSBuOyBpKyspIHsK LSAgICAgICAgYXBbaV0gPSByZXNwW2ktMV07ICAgICAgICAgICAgICAvKiBJZiByZXNwIGVsZW1l bnRzIHdlcmUgbWFsbG9jJ2QgKi8KLSAgICAgICAgcmVzcFtpLTFdID0gTlVMTDsKLSAgICB9Ci0g ICAgYV9kaW1beF0gPSBuOwotICAgIHJldHVybihuKTsKLSNlbHNlCi0gICAgcmV0dXJuKDApOwot I2VuZGlmIC8qIE5PU1BMICovCi19Ci0KLSNkZWZpbmUgSFRUUEhFQURDTlQgNjQKLWludAotaHR0 cF9nZXRfY2h1bmtfbGVuKCkKLXsKLSAgICBpbnQgbGVuID0gMDsKLSAgICBpbnQgaSA9IDAsIGog PSAtMTsKLSAgICBjaGFyIGJ1ZlsyNF07Ci0gICAgaW50IGNoOwotCi0gICAgd2hpbGUgKChjaCA9 IGh0dHBfaW5jKDApKSA+PSAwICYmIGkgPCAyNCkgewotICAgICAgICBidWZbaV0gPSBjaDsKLSAg ICAgICAgaWYgKCBidWZbaV0gPT0gJzsnICkgICAgICAgICAgICAvKiBGaW5kIGNodW5rLWV4dGVu c2lvbiAoaWYgYW55KSAqLwotICAgICAgICAgICAgaiA9IGk7Ci0gICAgICAgIGlmICggYnVmW2ld ID09IDEwICkgeyAgICAgICAgICAgLyogZm91bmQgZW5kIG9mIGxpbmUgKi8KLSAgICAgICAgICAg IGlmIChpID4gMCAmJiBidWZbaS0xXSA9PSAxMykKLSAgICAgICAgICAgICAgICBpLS07Ci0gICAg ICAgICAgICBidWZbaV0gPSAnXDAnOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg ICAgICAgaSsrOwotICAgIH0KLSAgICBpZiAoIGkgPCAyNCApIHsgICAgICAgICAgICAgICAgICAg ICAvKiBidWYgbm93IGNvbnRhaW5zIGxlbiBpbiBIZXggKi8KLSAgICAgICAgbGVuID0gaGV4dG91 bG9uZyhidWYsIGogPT0gLTEgPyBpIDogai0xKTsKLSAgICB9Ci0KLSAgICByZXR1cm4obGVuKTsK LX0KLQotaW50Ci1odHRwX2lzY29ubmVjdGVkKCkKLXsKLSAgICByZXR1cm4oaHR0cGZkICE9IC0x KTsKLX0KLQotY2hhciAqCi1odHRwX2hvc3QoKQotewotICAgIHJldHVybihodHRwZmQgIT0gLTEg PyBodHRwX2hvc3RfcG9ydCA6ICIiKTsKLX0KLQotY2hhciAqCi1odHRwX3NlY3VyaXR5KCkKLXsK LSAgICBpZiAoIGh0dHBmZCA9PSAtMSApCi0gICAgICAgIHJldHVybigiTlVMTCIpOwotI2lmZGVm IENLX1NTTAotICAgIGlmICh0bHNfaHR0cF9hY3RpdmVfZmxhZykgewotICAgICAgICBTU0xfQ0lQ SEVSICogY2lwaGVyOwotICAgICAgICBjb25zdCBjaGFyICpjaXBoZXJfbGlzdDsKLSAgICAgICAg c3RhdGljIGNoYXIgYnVmWzEyOF07Ci0gICAgICAgIGJ1ZlswXSA9IE5VTDsKLSAgICAgICAgY2lw aGVyID0gU1NMX2dldF9jdXJyZW50X2NpcGhlcih0bHNfaHR0cF9jb24pOwotICAgICAgICBjaXBo ZXJfbGlzdCA9IFNTTF9DSVBIRVJfZ2V0X25hbWUoY2lwaGVyKTsKLSAgICAgICAgU1NMX0NJUEhF Ul9kZXNjcmlwdGlvbihjaXBoZXIsYnVmLHNpemVvZihidWYpKTsKLSAgICAgICAgcmV0dXJuKGJ1 Zik7Ci0gICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgIHJldHVybigiTlVMTCIpOwotfQot Ci1pbnQKLWh0dHBfcmVvcGVuKCkKLXsKLSAgICBpbnQgcmMgPSAwOwotICAgIGNoYXIgKiBzID0g TlVMTDsgICAgICAgICAgICAgICAgICAgIC8qIHN0cmR1cCBpcyBub3QgcG9ydGFibGUgKi8KLSAg ICBpZiAoIHRjcF9odHRwX3Byb3h5ICkgewotICAgICAgICBjaGFyICogcDsKLSAgICAgICAgbWFr ZXN0cigmcywoY2hhciAqKWh0dHBfaG9zdF9wb3J0KTsKLSAgICAgICAgcCA9IHM7Ci0gICAgICAg IHdoaWxlICgqcCAhPSAnXDAnICYmICpwICE9ICc6JykgcCsrOyAvKiBMb29rIGZvciBjb2xvbiAq LwotICAgICAgICBpZiAoKnAgPT0gJzonKSB7ICAgICAgICAgICAgICAgICAgICAgLyogSGF2ZSBh IGNvbG9uICovCi0gICAgICAgICAgICAqcCsrID0gJ1wwJzsgICAgICAgICAgICAgICAgICAgICAv KiBHZXQgc2VydmljZSBuYW1lIG9yIG51bWJlciAqLwotICAgICAgICB9IGVsc2UgewotICAgICAg ICAgICAgcD0iaHR0cCI7Ci0gICAgICAgIH0KLSAgICAgICAgcmMgPSBodHRwX29wZW4ocyxwLGh0 dHBfc3NsLE5VTEwsMCxodHRwX2FnZW50KTsKLSAgICB9IGVsc2UgewotICAgICAgICBtYWtlc3Ry KCZzLChjaGFyICopaHR0cF9pcCk7Ci0gICAgICAgIHJjID0gaHR0cF9vcGVuKHMsY2t1aXRvYSho dHRwX3BvcnQpLGh0dHBfc3NsLE5VTEwsMCxodHRwX2FnZW50KTsKLSAgICB9Ci0gICAgZnJlZShz KTsKLSAgICByZXR1cm4ocmMpOwotfQotCi0KLWludAotI2lmZGVmIENLX0FOU0lDCi1odHRwX29w ZW4oY2hhciAqIGhvc3RuYW1lLCBjaGFyICogc3ZjbmFtZSwgaW50IHVzZV9zc2wsIGNoYXIgKiBy ZG5zX25hbWUsCi0gICAgICAgICAgaW50IHJkbnNfbGVuLCBjaGFyICogYWdlbnQpCi0jZWxzZSAv KiBDS19BTlNJQyAqLwotaHR0cF9vcGVuKGhvc3RuYW1lLCBzdmNuYW1lLCB1c2Vfc3NsLCByZG5z X25hbWUsIHJkbnNfbGVuLCBhZ2VudCkKLSAgICBjaGFyICogaG9zdG5hbWU7Ci0gICAgY2hhciAq IHN2Y25hbWU7Ci0gICAgaW50ICAgIHVzZV9zc2w7Ci0gICAgY2hhciAqIHJkbnNfbmFtZTsKLSAg ICBpbnQgICAgcmRuc19sZW47Ci0gICAgY2hhciAqIGFnZW50OwotI2VuZGlmIC8qIENLX0FOU0lD ICovCi17Ci0gICAgY2hhciBuYW1lY29weVtOQU1FQ1BZTF07Ci0gICAgY2hhciAqcDsKLSAgICBp bnQgaSwgeCwgZG5zID0gMDsKLSNpZmRlZiBUQ1BTT0NLRVQKLSAgICBpbnQgaXNjb25uZWN0ID0g MDsKLSNpZmRlZiBTT19PT0JJTkxJTkUKLSAgICBpbnQgb24gPSAxOwotI2VuZGlmIC8qIFNPX09P QklOTElORSAqLwotICAgIHN0cnVjdCBzZXJ2ZW50ICpzZXJ2aWNlPU5VTEw7Ci0gICAgc3RydWN0 IGhvc3RlbnQgKmhvc3Q9TlVMTDsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gcl9hZGRyOwotICAg IHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47Ci0gICAgc3RydWN0IHNvY2thZGRyX2luIGxfYWRkcjsK LSAgICBHU09DS05BTUVfVCBsX3NsZW47Ci0jaWZkZWYgRVhDRUxBTgotICAgIHN0cnVjdCBzb2Nr YWRkcl9pbiBzZW5kX3NvY2tldDsKLSNlbmRpZiAvKiBFWENFTEFOICovCi0KLSNpZmRlZiBJTkFE RFJYCi0vKiBpbmV0X2FkZHIoKSBpcyBvZiB0eXBlIHN0cnVjdCBpbl9hZGRyICovCi0jaWZkZWYg ZGF0YWdlbmVyYWwKLSAgICBleHRlcm4gc3RydWN0IGluX2FkZHIgaW5ldF9hZGRyKCk7Ci0jZWxz ZQotI2lmZGVmIEhQVVg1V0lOVENQCi0gICAgZXh0ZXJuIHN0cnVjdCBpbl9hZGRyIGluZXRfYWRk cigpOwotI2VuZGlmIC8qIEhQVVg1V0lOVENQICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8K LSAgICBzdHJ1Y3QgaW5fYWRkciBpYXg7Ci0jZWxzZQotI2lmZGVmIElOQUREUl9OT05FCi0gICAg c3RydWN0IGluX2FkZHIgaWF4OwotI2Vsc2UgLyogSU5BRERSX05PTkUgKi8KLSAgICBsb25nIGlh eDsKLSNlbmRpZiAvKiBJTkFERFJfTk9ORSAqLwotI2VuZGlmIC8qIElOQUREUlggKi8KLQotICAg IGlmICggcmRuc19uYW1lID09IE5VTEwgfHwgcmRuc19sZW4gPCAwICkKLSAgICAgICAgcmRuc19s ZW4gPSAwOwotCi0gICAgKmh0dHBfaXAgPSAnXDAnOyAgICAgICAgICAgICAgICAgICAgIC8qIElu aXRpYWxpemUgSVAgYWRkcmVzcyBzdHJpbmcgKi8KLSAgICBuYW1lY29weVswXSA9ICdcMCc7Ci0K LSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsKLSAgICAgICAgZGVidWcoRjExMCwiaHR0 cF9vcGVuIGhvc3RuYW1lIixob3N0bmFtZSwwKTsKLSAgICAgICAgZGVidWcoRjExMCwiaHR0cF9v cGVuIHN2Y25hbWUiLHN2Y25hbWUsMCk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0gICAg aWYgKCFob3N0bmFtZSkgaG9zdG5hbWUgPSAiIjsKLSAgICBpZiAoIXN2Y25hbWUpIHN2Y25hbWUg PSAiIjsKLSAgICBpZiAoISpob3N0bmFtZSB8fCAhKnN2Y25hbWUpIHJldHVybigtMSk7Ci0KLSAg ICAKLSAgICBzZXJ2aWNlID0gY2tnZXRzZXJ2aWNlKGhvc3RuYW1lLHN2Y25hbWUsaHR0cF9pcCwy MCk7Ci0KLSAgICBpZiAoc2VydmljZSA9PSBOVUxMKSB7Ci0gICAgICAgIGlmICggIXF1aWV0ICkK LSAgICAgICAgICAgIHByaW50ZigiP0ludmFsaWQgc2VydmljZTogJXNcclxuIixzdmNuYW1lKTsK LSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAgICAvKiBGb3IgSFRUUCBjb25uZWN0aW9u cyB3ZSBtdXN0IHByZXNlcnZlIHRoZSBvcmlnaW5hbCBob3N0bmFtZSBhbmQgKi8KLSAgICAvKiBz ZXJ2aWNlIHJlcXVlc3RlZCBzbyB3ZSBjYW4gaW5jbHVkZSB0aGVtIGluIHRoZSBIb3N0IGhlYWRl ci4gICAgKi8KLSAgICBja21ha21zZyhodHRwX2hvc3RfcG9ydCxzaXplb2YoaHR0cF9ob3N0X3Bv cnQpLGhvc3RuYW1lLCI6IiwKLSAgICAgICAgICAgICAgY2t1aXRvYShudG9ocyhzZXJ2aWNlLT5z X3BvcnQpKSxOVUxMKTsKLSAgICBodHRwX3BvcnQgPSBudG9ocyhzZXJ2aWNlLT5zX3BvcnQpOwot ICAgIGh0dHBfc3NsID0gdXNlX3NzbDsKLSAgICBkZWJ1ZyhGMTExLCJodHRwX29wZW4iLGh0dHBf aG9zdF9wb3J0LGh0dHBfcG9ydCk7Ci0KLSAgICAvKiAnaHR0cF9pcCcgY29udGFpbnMgdGhlIElQ IGFkZHJlc3MgdG8gd2hpY2ggd2Ugd2FudCB0byBjb25uZWN0ICAgICAgICAqLwotICAgIC8qICdz dmNuYW0nICAgY29udGFpbnMgdGhlIHNlcnZpY2UgbmFtZSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICovCi0gICAgLyogJ3NlcnZpY2UtPnNfcG9ydCcgY29udGFpbnMgdGhlIHBvcnQg bnVtYmVyIGluIG5ldHdvcmsgYnl0ZSBvcmRlciAgICAgKi8KLQotICAgIC8qIElmIHdlIGFyZSB1 c2luZyBhbiBodHRwIHByb3h5LCB3ZSBuZWVkIHRvIGNyZWF0ZSBhIGJ1ZmZlciBjb250YWluaW5n ICovCi0gICAgLyogICBob3N0bmFtZTpwb3J0LW51bWJlciAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKiB0byBwYXNzIHRvIHRoZSBodHRwX2Nv bm5lY3QoKSBmdW5jdGlvbi4gIFRoZW4gd2UgbmVlZCB0byByZXBsYWNlICAgICAqLwotICAgIC8q ICduYW1lY29weScgd2l0aCB0aGUgbmFtZSBvZiB0aGUgcHJveHkgc2VydmVyIGFuZCB0aGUgc2Vy dmljZS0+c19wb3J0ICovCi0gICAgLyogd2l0aCB0aGUgcG9ydCBudW1iZXIgb2YgdGhlIHByb3h5 IChkZWZhdWx0IHBvcnQgODApLiAgICAgICAgICAgICAgICAgKi8KLQotICAgIGlmICggdGNwX2h0 dHBfcHJveHkgKSB7Ci0KLSAgICAgICAgY2ttYWttc2cocHJveHljb3B5LHNpemVvZihwcm94eWNv cHkpLGhvc3RuYW1lLCI6IiwKLSAgICAgICAgICAgICAgICAgY2t1aXRvYShudG9ocyhzZXJ2aWNl LT5zX3BvcnQpKSxOVUxMKTsKLSAgICAgICAgY2tzdHJuY3B5KG5hbWVjb3B5LHRjcF9odHRwX3By b3h5LE5BTUVDUFlMKTsKLQotICAgICAgICBwID0gbmFtZWNvcHk7ICAgICAgICAgICAgICAgICAg ICAgICAvKiBXYXMgYSBzZXJ2aWNlIHJlcXVlc3RlZD8gKi8KLSAgICAgICAgd2hpbGUgKCpwICE9 ICdcMCcgJiYgKnAgIT0gJzonKSBwKys7IC8qIExvb2sgZm9yIGNvbG9uICovCi0gICAgICAgIGlm ICgqcCA9PSAnOicpIHsgICAgICAgICAgICAgICAgICAgIC8qIEhhdmUgYSBjb2xvbiAqLwotICAg ICAgICAgICAgZGVidWcoRjExMCwiaHR0cF9vcGVuIG5hbWUgaGFzIGNvbG9uIixuYW1lY29weSww KTsKLSAgICAgICAgICAgICpwKysgPSAnXDAnOyAgICAgICAgICAgICAgICAgICAgLyogR2V0IHNl cnZpY2UgbmFtZSBvciBudW1iZXIgKi8KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0 cmNweSgrK3AsImh0dHAiKTsKLSAgICAgICAgfQotCi0gICAgICAgIHNlcnZpY2UgPSBja2dldHNl cnZpY2UobmFtZWNvcHkscCxodHRwX2lwLDIwKTsKLSAgICAgICAgaWYgKCFzZXJ2aWNlKSB7Ci0g ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbid0IGZpbmQgcG9ydCBmb3Igc2VydmljZSAl c1xuIiwgcCk7Ci0jaWZkZWYgVEdWT1JXSU4KLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImh0dHBf b3BlbiBjYW4ndCBnZXQgc2VydmljZSBmb3IgcHJveHkiLCIiLHNvY2tldF9lcnJubyk7Ci0jZWxz ZQotICAgICAgICAgICAgZGVidWcoRjEwMSwiaHR0cF9vcGVuIGNhbid0IGdldCBzZXJ2aWNlIGZv ciBwcm94eSIsIiIsZXJybm8pOwotI2VuZGlmIC8qIFRHVk9SV0lOICovCi0gICAgICAgICAgICBl cnJubyA9IDA7ICAgICAgICAgICAgICAgICAgLyogKHJhdGhlciB0aGFuIG1pc2xlYWQpICovCi0g ICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogY29weSB0aGUg cHJveHluYW1lIGFuZCByZW1vdmUgdGhlIHNlcnZpY2UgaWYgYW55IHNvIHdlIGNhbiB1c2UgCi0g ICAgICAgICAqIGl0IGFzIHRoZSBob3N0bmFtZSAKLSAgICAgICAgICovCi0gICAgICAgIGNrc3Ry bmNweShuYW1lY29weSx0Y3BfaHR0cF9wcm94eSxOQU1FQ1BZTCk7Ci0gICAgICAgIHAgPSBuYW1l Y29weTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFdhcyBhIHNlcnZpY2UgcmVxdWVzdGVkPyAq LwotICAgICAgICB3aGlsZSAoKnAgIT0gJ1wwJyAmJiAqcCAhPSAnOicpIHArKzsgLyogTG9vayBm b3IgY29sb24gKi8KLSAgICAgICAgaWYgKCpwID09ICc6JykgeyAgICAgICAgICAgICAgICAgICAg LyogSGF2ZSBhIGNvbG9uICovCi0gICAgICAgICAgICAqcCA9ICdcMCc7ICAgICAgICAgICAgICAg ICAgICAgIC8qIHRlcm1pbmF0ZSBzdHJpbmcgKi8KLSAgICAgICAgfSAgICAgICAgCi0gICAgICAg IGhvc3RuYW1lID0gbmFtZWNvcHk7ICAgICAgICAgICAgICAgIC8qIHVzZSBwcm94eSBhcyBob3N0 bmFtZSAqLwotICAgIH0KLQotICAgIC8qIFNldCB1cCBzb2NrZXQgc3RydWN0dXJlIGFuZCBnZXQg aG9zdCBhZGRyZXNzICovCi0gICAgYnplcm8oKGNoYXIgKikmcl9hZGRyLCBzaXplb2Yocl9hZGRy KSk7Ci0gICAgZGVidWcoRjEwMCwiaHR0cF9vcGVuIGJ6ZXJvIG9rIiwiIiwwKTsKLQotI2lmZGVm IElOQUREUl9OT05FCi0gICAgZGVidWcoRjEwMSwiaHR0cF9vcGVuIElOQUREUl9OT05FIGRlZmlu ZWQiLCIiLElOQUREUl9OT05FKTsKLSNlbHNlIC8qIElOQUREUl9OT05FICovCi0gICAgZGVidWco RjEwMCwiaHR0cF9vcGVuIElOQUREUl9OT05FIG5vdCBkZWZpbmVkIiwiIiwwKTsKLSNlbmRpZiAv KiBJTkFERFJfTk9ORSAqLwotI2lmZGVmIElOQUREUlgKLSAgICBkZWJ1ZyhGMTAwLCJodHRwX29w ZW4gSU5BRERSWCBkZWZpbmVkIiwiIiwwKTsKLSNlbHNlIC8qIElOQUREUlggKi8KLSAgICBkZWJ1 ZyhGMTAwLCJodHRwX29wZW4gSU5BRERSWCBub3QgZGVmaW5lZCIsIiIsMCk7Ci0jZW5kaWYgLyog SU5BRERSWCAqLwotCi0jaWZuZGVmIE5PTUhIT1NUCi0jaWZkZWYgSU5BRERSWAotICAgIGlheCA9 IGluZXRfYWRkcihodHRwX2lwWzBdP2h0dHBfaXA6aG9zdG5hbWUpOwotICAgIGRlYnVnKEYxMTEs Imh0dHBfb3BlbiBpbmV0X2FkZHIiLGh0dHBfaXBbMF0/aHR0cF9pcDpob3N0bmFtZSxpYXguc19h ZGRyKTsKLSNlbHNlIC8qIElOQUREUlggKi8KLSNpZmRlZiBJTkFERFJfTk9ORQotICAgIGlheC5z X2FkZHIgPSBpbmV0X2FkZHIoaHR0cF9pcFswXT9odHRwX2lwOmhvc3RuYW1lKTsKLSAgICBkZWJ1 ZyhGMTExLCJodHRwX29wZW4gaW5ldF9hZGRyIixodHRwX2lwWzBdP2h0dHBfaXA6aG9zdG5hbWUs aWF4LnNfYWRkcik7Ci0jZWxzZSAvKiBJTkFERFJfTk9ORSAqLwotI2lmbmRlZiBkYXRhZ2VuZXJh bAotICAgIGlheCA9ICh1bnNpZ25lZCBpbnQpIGluZXRfYWRkcihodHRwX2lwWzBdP2h0dHBfaXA6 aG9zdG5hbWUpOwotI2Vsc2UKLSAgICBpYXggPSAtMUw7Ci0jZW5kaWYgLyogZGF0YWdlbmVyYWwg Ki8KLSAgICBkZWJ1ZyhGMTExLCJodHRwX29wZW4gaW5ldF9hZGRyIixodHRwX2lwWzBdP2h0dHBf aXA6aG9zdG5hbWUsaWF4KTsKLSNlbmRpZiAvKiBJTkFERFJfTk9ORSAqLwotI2VuZGlmIC8qIElO QUREUlggKi8KLQotICAgIGRucyA9IDA7Ci0gICAgaWYgKAotI2lmZGVmIElOQUREUl9OT05FCi0v KiBUaGlzIG1pZ2h0IGdpdmUgd2FybmluZ3Mgb24gNjQtYml0IHBsYXRmb3JtcyBidXQgdGhleSBz aG91bGQgYmUgaGFybWxlc3MgKi8KLS8qIGJlY2F1c2UgSU5BRERSX05PTkUgc2hvdWxkIGJlIGFs bCAxJ3MgYW55d2F5LCB0aHVzIHRoZSBPUiBwYXJ0IGlzICovCi0vKiBwcm9iYWJseSBzdXBlcmZs dW91cyAtLSBub3Qgc3VyZSB3aHkgaXQncyBldmVuIHRoZXJlLCBtYXliZSBpdCBzaG91bGQgYmUg Ki8KLS8qIHJlbW92ZWQuICovCi0gICAgICAgIGlheC5zX2FkZHIgPT0gSU5BRERSX05PTkUgLyog fHwgaWF4LnNfYWRkciA9PSAodW5zaWduZWQgbG9uZykgLTFMICovCi0jZWxzZSAvKiBJTkFERFJf Tk9ORSAqLwotICAgICAgICBpYXggPT0gLTEKLSNlbmRpZiAvKiBJTkFERFJfTk9ORSAqLwotICAg ICAgICApIHsKLSAgICAgICAgaWYgKCFxdWlldCkgewotICAgICAgICAgICAgcHJpbnRmKCIgRE5T IExvb2t1cC4uLiAiKTsKLSAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOwotICAgICAgICB9Ci0g ICAgICAgIGlmICgoaG9zdCA9IGdldGhvc3RieW5hbWUoaHR0cF9pcFswXSA/IGh0dHBfaXAgOiBo b3N0bmFtZSkpICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsImh0dHBfb3BlbiBn ZXRob3N0YnluYW1lICE9IE5VTEwiLCIiLDApOwotICAgICAgICAgICAgaG9zdCA9IGNrX2NvcHlo b3N0ZW50KGhvc3QpOwotICAgICAgICAgICAgZG5zID0gMTsgICAgICAgICAgICAgICAgICAgIC8q IFJlbWVtYmVyIHdlIHBlcmZvcm1lZCBkbnMgbG9va3VwICovCi0gICAgICAgICAgICByX2FkZHIu c2luX2ZhbWlseSA9IGhvc3QtPmhfYWRkcnR5cGU7Ci0gICAgICAgICAgICBpZiAodGNwX3JkbnMg JiYgaG9zdC0+aF9uYW1lICYmIGhvc3QtPmhfbmFtZVswXSAmJiAocmRuc19sZW4gPiAwKQotICAg ICAgICAgICAgICAgICAmJiAodGNwX2h0dHBfcHJveHkgPT0gTlVMTCkKLSAgICAgICAgICAgICAg ICAgKQotICAgICAgICAgICAgICAgIGNrbWFrbXNnKHJkbnNfbmFtZSxyZG5zX2xlbixob3N0LT5o X25hbWUsIjoiLHN2Y25hbWUsTlVMTCk7Ci0KLSNpZmRlZiBIQUREUkxJU1QKLSNpZmRlZiBoX2Fk ZHIKLSAgICAgICAgICAgIC8qIFRoaXMgaXMgZm9yIHRyeWluZyBtdWx0aXBsZSBJUCBhZGRyZXNz ZXMgLSBzZWUgPG5ldGRiLmg+ICovCi0gICAgICAgICAgICBpZiAoIShob3N0LT5oX2FkZHJfbGlz dCkpCi0gICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICBiY29weShob3N0LT5o X2FkZHJfbGlzdFswXSwKLSAgICAgICAgICAgICAgICAgIChjYWRkcl90KSZyX2FkZHIuc2luX2Fk ZHIsCi0gICAgICAgICAgICAgICAgICBob3N0LT5oX2xlbmd0aAotICAgICAgICAgICAgICAgICAg KTsKLSNlbHNlCi0gICAgICAgICAgICBiY29weShob3N0LT5oX2FkZHIsIChjYWRkcl90KSZyX2Fk ZHIuc2luX2FkZHIsIGhvc3QtPmhfbGVuZ3RoKTsKLSNlbmRpZiAvKiBoX2FkZHIgKi8KLSNlbHNl ICAvKiBIQUREUkxJU1QgKi8KLSAgICAgICAgICAgIGJjb3B5KGhvc3QtPmhfYWRkciwgKGNhZGRy X3QpJnJfYWRkci5zaW5fYWRkciwgaG9zdC0+aF9sZW5ndGgpOwotI2VuZGlmIC8qIEhBRERSTElT VCAqLwotI2lmZGVmIENPTU1FTlQKLSNpZm5kZWYgRVhDRUxBTgotICAgICAgICAgICAgZGVidWco RjExMSwiQkNPUFkiLCJob3N0LT5oX2FkZHIiLGhvc3QtPmhfYWRkcik7Ci0jZW5kaWYgLyogRVhD RUxBTiAqLwotICAgICAgICAgICAgZGVidWcoRjExMSwiQkNPUFkiLCIgKGNhZGRyX3QpJnJfYWRk ci5zaW5fYWRkciIsCi0gICAgICAgICAgICAgICAgICAoY2FkZHJfdCkmcl9hZGRyLnNpbl9hZGRy KTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsIkJDT1BZIiwiIHJfYWRkci5zaW5fYWRkci5zX2Fk ZHIiLAotICAgICAgICAgICAgICAgICAgcl9hZGRyLnNpbl9hZGRyLnNfYWRkcik7Ci0jZW5kaWYJ LyogQ09NTUVOVCAqLwotICAgICAgICAgICAgZGVidWcoRjExMSwiQkNPUFkiLCJob3N0LT5oX2xl bmd0aCIsaG9zdC0+aF9sZW5ndGgpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIE5PTUhI T1NUICovCi0KLSAgICBpZiAoIWRucykgewotI2lmZGVmIElOQUREUlgKLS8qIGluZXRfYWRkcigp IGlzIG9mIHR5cGUgc3RydWN0IGluX2FkZHIgKi8KLSAgICAgICAgc3RydWN0IGluX2FkZHIgaW5h OwotICAgICAgICB1bnNpZ25lZCBsb25nIHV1OwotICAgICAgICBkZWJ1ZyhGMTAwLCJodHRwX29w ZW4gZ2V0aG9zdGJ5bmFtZSA9PSBOVUxMOiBJTkFERFJYIiwiIiwwKTsKLSAgICAgICAgaW5hID0g aW5ldF9hZGRyKGh0dHBfaXBbMF0/aHR0cF9pcDpob3N0bmFtZSk7Ci0gICAgICAgIHV1ID0gKih1 bnNpZ25lZCBpbnQgKikmaW5hOwotI2Vsc2UgLyogTm90IElOQUREUlggKi8KLS8qIGluZXRfYWRk cigpIGlzIHVuc2lnbmVkIGxvbmcgKi8KLSAgICAgICAgdW5zaWduZWQgbG9uZyB1dTsKLSAgICAg ICAgZGVidWcoRjEwMCwiaHR0cF9vcGVuIGdldGhvc3RieW5hbWUgPT0gTlVMTDogTm90IElOQURE UlgiLCIiLDApOwotICAgICAgICB1dSA9IGluZXRfYWRkcihodHRwX2lwWzBdP2h0dHBfaXA6aG9z dG5hbWUpOwotI2VuZGlmIC8qIElOQUREUlggKi8KLSAgICAgICAgZGVidWcoRjEwMSwiaHR0cF9v cGVuIHV1IiwiIix1dSk7Ci0gICAgICAgIGlmICgKLSNpZmRlZiBJTkFERFJfTk9ORQotICAgICAg ICAgICAgISh1dSA9PSBJTkFERFJfTk9ORSB8fCB1dSA9PSAodW5zaWduZWQgaW50KSAtMUwpCi0j ZWxzZSAgIC8qIElOQUREUl9OT05FICovCi0gICAgICAgICAgICB1dSAhPSAoKHVuc2lnbmVkIGxv bmcpLTEpCi0jZW5kaWYgLyogSU5BRERSX05PTkUgKi8KLSAgICAgICAgICAgICkgewotICAgICAg ICAgICAgcl9hZGRyLnNpbl9hZGRyLnNfYWRkciA9IHV1OwotICAgICAgICAgICAgcl9hZGRyLnNp bl9mYW1pbHkgPSBBRl9JTkVUOwotICAgICAgICB9IGVsc2UgewotI2lmZGVmIFZNUwotICAgICAg ICAgICAgZnByaW50ZihzdGRvdXQsICJcclxuIik7ICAgIC8qIGNvbXBsZXRlIGFueSBwcmV2aW91 cyBtZXNzYWdlICovCi0jZW5kaWYgLyogVk1TICovCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgIkNhbid0IGdldCBhZGRyZXNzIGZvciAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgIGh0 dHBfaXBbMF0/aHR0cF9pcDpob3N0bmFtZSk7Ci0jaWZkZWYgVEdWT1JXSU4KLSAgICAgICAgICAg IGRlYnVnKEYxMDEsImh0dHBfb3BlbiBjYW4ndCBnZXQgYWRkcmVzcyIsIiIsc29ja2V0X2Vycm5v KTsKLSNlbHNlCi0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJodHRwX29wZW4gY2FuJ3QgZ2V0IGFk ZHJlc3MiLCIiLGVycm5vKTsKLSNlbmRpZiAvKiBUR1ZPUldJTiAqLwotICAgICAgICAgICAgZXJy bm8gPSAwOyAgICAgICAgICAgICAgICAgIC8qIFJhdGhlciB0aGFuIG1pc2xlYWQgKi8KLSAgICAg ICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBHZXQgYSBmaWxl IGRlc2NyaXB0b3IgZm9yIHRoZSBjb25uZWN0aW9uLiAqLwotCi0gICAgcl9hZGRyLnNpbl9wb3J0 ID0gc2VydmljZS0+c19wb3J0OwotICAgIGNrc3RybmNweShodHRwX2lwLChjaGFyICopaW5ldF9u dG9hKHJfYWRkci5zaW5fYWRkciksMjApOwotICAgIGRlYnVnKEYxMTAsImh0dHBfb3BlbiB0cnlp bmciLGh0dHBfaXAsMCk7Ci0gICAgaWYgKCFxdWlldCAmJiAqaHR0cF9pcCkgewotICAgICAgICBw cmludGYoIiBUcnlpbmcgJXMuLi4gIiwgaHR0cF9pcCk7Ci0gICAgICAgIGZmbHVzaChzdGRvdXQp OwotICAgIH0KLQotICAgIC8qIExvb3AgdG8gdHJ5IGFkZGl0aW9uYWwgSVAgYWRkcmVzc2VzLCBp ZiBhbnkuICovCi0KLSAgICBkbyB7Ci0jaWZkZWYgRVhDRUxBTgotICAgICAgICBzZW5kX3NvY2tl dC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLSAgICAgICAgc2VuZF9zb2NrZXQuc2luX2FkZHIuc19h ZGRyID0gMDsKLSAgICAgICAgc2VuZF9zb2NrZXQuc2luX3BvcnQgPSAwOwotICAgICAgICBpZiAo KGh0dHBmZCA9IHNvY2tldChTT0NLX1NUUkVBTSwgKHN0cnVjdCBzb2NrcHJvdG8gKikwLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZzZW5kX3NvY2tldCwgU09fUkVVU0VBRERSKSkgPCAw KQotI2Vsc2UgIC8qIEVYQ0VMQU4gKi8KLSAgICAgICAgaWYgKChodHRwZmQgPSBzb2NrZXQoQUZf SU5FVCwgU09DS19TVFJFQU0sIDApKSA8IDApCi0jZW5kaWYgLyogRVhDRUxBTiAqLwotICAgICAg ICAgICAgewotI2lmZGVmIEVYQ0VMQU4KLSAgICAgICAgICAgICAgICBleHBlcnJvcigiVENQIHNv Y2tldCBlcnJvciIpOwotI2Vsc2UKLSNpZmRlZiBUR1ZPUldJTgotI2lmZGVmIE9MRF9UV0cKLSAg ICAgICAgICAgICAgICBlcnJubyA9IHNvY2tldF9lcnJubzsKLSNlbmRpZiAvKiBPTERfVFdHICov Ci0gICAgICAgICAgICAgICAgc29ja2V0X3BlcnJvcigiVENQIHNvY2tldCBlcnJvciIpOwotICAg ICAgICAgICAgICAgIGRlYnVnKEYxMDEsImh0dHBfb3BlbiBzb2NrZXQgZXJyb3IiLCIiLHNvY2tl dF9lcnJubyk7Ci0jZWxzZQotICAgICAgICAgICAgICAgIHBlcnJvcigiVENQIHNvY2tldCBlcnJv ciIpOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImh0dHBfb3BlbiBzb2NrZXQgZXJyb3Ii LCIiLGVycm5vKTsKLSNlbmRpZiAvKiBUR1ZPUldJTiAqLwotI2VuZGlmIC8qIEVYQ0VMQU4gKi8K LSAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgZXJy bm8gPSAwOwotCi0gICAgICAgLyogSWYgYSBzcGVjaWZpYyBUQ1AgYWRkcmVzcyBvbiB0aGUgbG9j YWwgaG9zdCBpcyBkZXNpcmVkIHdlICovCi0gICAgICAgLyogbXVzdCBiaW5kIGl0IHRvIHRoZSBz b2NrZXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jaWZuZGVmIGRhdGFnZW5l cmFsCi0gICAgICAgICBpZiAodGNwX2FkZHJlc3MpIHsKLSAgICAgICAgICAgICBpbnQgc19lcnJu bzsKLQotICAgICAgICAgICAgIGRlYnVnKEYxMTAsImh0dHBfb3BlbiBiaW5kaW5nIHNvY2tldCB0 byIsdGNwX2FkZHJlc3MsMCk7Ci0gICAgICAgICAgICAgYnplcm8oKGNoYXIgKikmc2luLHNpemVv ZihzaW4pKTsKLSAgICAgICAgICAgICBzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0jaWZkZWYg SU5BRERSWAotICAgICAgICAgICAgIGluYWRkcnggPSBpbmV0X2FkZHIodGNwX2FkZHJlc3MpOwot ICAgICAgICAgICAgIHNpbi5zaW5fYWRkci5zX2FkZHIgPSAqKHVuc2lnbmVkIGxvbmcgKikmaW5h ZGRyeDsKLSNlbHNlCi0gICAgICAgICAgICAgc2luLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRk cih0Y3BfYWRkcmVzcyk7Ci0jZW5kaWYgLyogSU5BRERSWCAqLwotICAgICAgICAgICAgIHNpbi5z aW5fcG9ydCA9IDA7Ci0gICAgICAgICAgICAgaWYgKGJpbmQoaHR0cGZkLCAoc3RydWN0IHNvY2th ZGRyICopJnNpbiwgc2l6ZW9mKHNpbikpIDwgMCkgewotICAgICAgICAgICAgICAgICBzX2Vycm5v ID0gc29ja2V0X2Vycm5vOyAvKiBTYXZlIGVycm9yIGNvZGUgKi8KLSNpZmRlZiBUQ1BJUExJQgot ICAgICAgICAgICAgICAgICBzb2NrZXRfY2xvc2UoaHR0cGZkKTsKLSNlbHNlIC8qIFRDUElQTElC ICovCi0gICAgICAgICAgICAgICAgIGNsb3NlKGh0dHBmZCk7Ci0jZW5kaWYgLyogVENQSVBMSUIg Ki8KLSAgICAgICAgICAgICAgICAgaHR0cGZkID0gLTE7Ci0gICAgICAgICAgICAgICAgIGVycm5v ID0gc19lcnJubzsgICAgICAgLyogYW5kIHJlcG9ydCB0aGlzIGVycm9yICovCi0gICAgICAgICAg ICAgICAgIGRlYnVnKEYxMDEsImh0dHBfb3BlbiBiaW5kIGVycm5vIiwiIixlcnJubyk7Ci0gICAg ICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgfQotI2Vu ZGlmIC8qIGRhdGFnZW5lcmFsICovCi0KLS8qIE5vdyBjb25uZWN0IHRvIHRoZSBzb2NrZXQgb24g dGhlIG90aGVyIGVuZC4gKi8KLQotI2lmZGVmIEVYQ0VMQU4KLSAgICAgICAgaWYgKGNvbm5lY3Qo aHR0cGZkLCAmcl9hZGRyKSA8IDApCi0jZWxzZQotI2lmZGVmIE5UCi0gICAgICAgICAgV1NBU2Fm ZVRvQ2FuY2VsID0gMTsKLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICBpZiAoY29ubmVjdChodHRw ZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmcl9hZGRyLCBzaXplb2Yocl9hZGRyKSkgPCAwKQotI2Vu ZGlmIC8qIEVYQ0VMQU4gKi8KLSAgICAgICAgICB7Ci0jaWZkZWYgTlQKLSAgICAgICAgICAgICAg V1NBU2FmZVRvQ2FuY2VsID0gMDsKLSNlbmRpZiAvKiBOVCAqLwotI2lmZGVmIE9TMgotICAgICAg ICAgICAgICBpID0gc29ja2V0X2Vycm5vOwotI2Vsc2UgLyogT1MyICovCi0jaWZkZWYgVEdWT1JX SU4KLSAgICAgICAgICAgICAgaSA9IHNvY2tldF9lcnJubzsKLSNlbHNlCi0gICAgICAgICAgICAg IGkgPSBlcnJubzsgICAgICAgICAgICAgICAgLyogU2F2ZSBlcnJvciBjb2RlICovCi0jZW5kaWYg LyogVEdWT1JXSU4gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNpZmRlZiBIQUREUkxJU1QKLSNpZmRl ZiBoX2FkZHIKLSAgICAgICAgICAgICAgaWYgKGhvc3QgJiYgaG9zdC0+aF9hZGRyX2xpc3QgJiYg aG9zdC0+aF9hZGRyX2xpc3RbMV0pIHsKLSAgICAgICAgICAgICAgICAgIHBlcnJvcigiIik7Ci0g ICAgICAgICAgICAgICAgICBob3N0LT5oX2FkZHJfbGlzdCsrOwotICAgICAgICAgICAgICAgICAg YmNvcHkoaG9zdC0+aF9hZGRyX2xpc3RbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAoY2Fk ZHJfdCkmcl9hZGRyLnNpbl9hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgaG9zdC0+aF9s ZW5ndGgpOwotCi0gICAgICAgICAgICAgICAgICBja3N0cm5jcHkoaHR0cF9pcCwoY2hhciAqKWlu ZXRfbnRvYShyX2FkZHIuc2luX2FkZHIpLDIwKTsKLSAgICAgICAgICAgICAgICAgIGRlYnVnKEYx MTAsImh0dHBfb3BlbiBoX2FkZHJfbGlzdCIsaHR0cF9pcCwwKTsKLSAgICAgICAgICAgICAgICAg IGlmICghcXVpZXQgJiYgKmh0dHBfaXApIHsKLSAgICAgICAgICAgICAgICAgICAgICBwcmludGYo IiBUcnlpbmcgJXMuLi4gIiwgaHR0cF9pcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgZmZsdXNo KHN0ZG91dCk7Ci0gICAgICAgICAgICAgICAgICB9Ci0jaWZkZWYgVENQSVBMSUIKLSAgICAgICAg ICAgICAgICAgIHNvY2tldF9jbG9zZShodHRwZmQpOyAvKiBDbG9zZSBpdC4gKi8KLSNlbHNlCi0g ICAgICAgICAgICAgICAgICBjbG9zZShodHRwZmQpOwotI2VuZGlmIC8qIFRDUElQTElCICovCi0g ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIGhf YWRkciAqLwotI2VuZGlmICAvKiBIQUREUkxJU1QgKi8KLSAgICAgICAgICAgICAgaHR0cF9jbG9z ZSgpOwotICAgICAgICAgICAgICBodHRwZmQgPSAtMTsKLSAgICAgICAgICAgICAgZXJybm8gPSBp OyAgICAgICAgICAgICAgICAvKiBBbmQgcmVwb3J0IHRoaXMgZXJyb3IgKi8KLSNpZmRlZiBFWENF TEFOCi0gICAgICAgICAgICAgIGlmIChlcnJubykgZXhwZXJyb3IoImh0dHBfb3BlbiBjb25uZWN0 Iik7Ci0jZWxzZQotI2lmZGVmIFRHVk9SV0lOCi0gICAgICAgICAgICAgIGRlYnVnKEYxMDEsImh0 dHBfb3BlbiBjb25uZWN0IGVycm9yIiwiIixzb2NrZXRfZXJybm8pOwotICAgICAgICAgICAgICAv KiBpZiAoZXJybm8pIHNvY2tldF9wZXJyb3IoImh0dHBfb3BlbiBjb25uZWN0Iik7ICovCi0jaWZk ZWYgT0xEX1RXRwotICAgICAgICAgICAgICBlcnJubyA9IHNvY2tldF9lcnJubzsKLSNlbmRpZiAv KiBPTERfVFdHICovCi0gICAgICAgICAgICAgIGlmICghcXVpZXQpCi0gICAgICAgICAgICAgICAg c29ja2V0X3BlcnJvcigiaHR0cF9vcGVuIGNvbm5lY3QiKTsKLSNlbHNlIC8qIFRHVk9SV0lOICov Ci0gICAgICAgICAgICAgIGRlYnVnKEYxMDEsImh0dHBfb3BlbiBjb25uZWN0IGVycm5vIiwiIixl cnJubyk7Ci0jaWZkZWYgVk1TCi0gICAgICAgICAgICAgIGlmICghcXVpZXQpCi0gICAgICAgICAg ICAgICAgcGVycm9yKCJcclxuRmFpbGVkIik7Ci0jZWxzZQotICAgICAgICAgICAgICBpZiAoIXF1 aWV0KQotICAgICAgICAgICAgICAgIHBlcnJvcigiRmFpbGVkIik7Ci0jZW5kaWYgLyogVk1TICov Ci0jaWZkZWYgREVDX1RDUElQCi0gICAgICAgICAgICAgIGlmICghcXVpZXQpCi0gICAgICAgICAg ICAgICAgcGVycm9yKCJodHRwX29wZW4gY29ubmVjdCIpOwotI2VuZGlmIC8qIERFQ19UQ1BJUCAq LwotI2lmZGVmIENNVV9UQ1BJUAotICAgICAgICAgICAgICBpZiAoIXF1aWV0KQotICAgICAgICAg ICAgICAgIHBlcnJvcigiaHR0cF9vcGVuIGNvbm5lY3QiKTsKLSNlbmRpZiAvKiBDTVVfVENQSVAg Ki8KLSNlbmRpZiAvKiBUR1ZPUldJTiAqLwotI2VuZGlmIC8qIEVYQ0VMQU4gKi8KLSAgICAgICAg ICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICB9Ci0jaWZkZWYgTlQKLSAgICAgICAgV1NBU2Fm ZVRvQ2FuY2VsID0gMDsKLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICBpc2Nvbm5lY3QgPSAxOwot ICAgIH0gd2hpbGUgKCFpc2Nvbm5lY3QpOwotCi0jaWZkZWYgTk9OX0JMT0NLX0lPCi0gICAgb24g PSAxOwotICAgIHggPSBzb2NrZXRfaW9jdGwoaHR0cGZkLEZJT05CSU8sJm9uKTsKLSAgICBkZWJ1 ZyhGMTAxLCJodHRwX29wZW4gRklPTkJJTyIsIiIseCk7Ci0jZW5kaWYgLyogTk9OX0JMT0NLX0lP ICovCi0KLSAgICAvKiBXZSBoYXZlIHN1Y2NlZWRlZCBpbiBjb25uZWN0aW5nIHRvIHRoZSBIVFRQ IFBST1hZLiAgU28gbm93IHdlICAgKi8KLSAgICAvKiBuZWVkIHRvIGF0dGVtcHQgdG8gY29ubmVj dCB0aHJvdWdoIHRoZSBwcm94eSB0byB0aGUgYWN0dWFsIGhvc3QgKi8KLSAgICAvKiBJZiB0aGF0 IGlzIHN1Y2Nlc3NmdWwsIHdlIGhhdmUgdG8gcHJldGVuZCB0aGF0IHdlIG1hZGUgYSBkaXJlY3Qg Ki8KLSAgICAvKiBjb25uZWN0aW9uIHRvIHRoZSBhY3R1YWwgaG9zdC4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKi8KLQotICAgIGlmICggdGNwX2h0dHBfcHJveHkgKSB7Ci0jaWZk ZWYgT1MyCi0gICAgICAgIGlmICghYWdlbnQpIAotCSAgYWdlbnQgPSAiS2VybWl0IDk1IjsJLyog RGVmYXVsdCB1c2VyIGFnZW50ICovCi0jZWxzZQotICAgICAgICBpZiAoIWFnZW50KSAKLQkgIGFn ZW50ID0gIkMtS2VybWl0IjsKLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgICAgICBpZiAoaHR0cF9j b25uZWN0KGh0dHBmZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfaHR0cF9wcm94eV9h Z2VudCA/IHRjcF9odHRwX3Byb3h5X2FnZW50IDogYWdlbnQsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfaHR0cF9wcm94eV91c2Vy LAotICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9odHRwX3Byb3h5X3B3ZCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5Y29weQot ICAgICAgICAgICAgICAgICAgICAgICAgICkgPCAwKSB7Ci0gICAgICAgICAgICBodHRwX2Nsb3Nl KCk7Ci0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0gICAgfQotCi0jaWZkZWYg U09fT09CSU5MSU5FCi0gICAgLyogU2VlIG5vdGUgb24gU09fT09CSU5MSU5FIGluIG5ldG9wZW4o KSAqLwotI2lmZGVmIGRhdGFnZW5lcmFsCi0gICAgc2V0c29ja29wdChodHRwZmQsIFNPTF9TT0NL RVQsIFNPX09PQklOTElORSwoY2hhciAqKSAmb24sIHNpemVvZiBvbik7Ci0jZWxzZQotI2lmZGVm IEJTRDQzCi0gICAgc2V0c29ja29wdChodHRwZmQsIFNPTF9TT0NLRVQsIFNPX09PQklOTElORSwo Y2hhciAqKSAmb24sIHNpemVvZiBvbik7Ci0jZWxzZQotI2lmZGVmIE9TRjEKLSAgICBzZXRzb2Nr b3B0KGh0dHBmZCwgU09MX1NPQ0tFVCwgU09fT09CSU5MSU5FLChjaGFyICopICZvbiwgc2l6ZW9m IG9uKTsKLSNlbHNlCi0jaWZkZWYgUE9TSVgKLSAgICBzZXRzb2Nrb3B0KGh0dHBmZCwgU09MX1NP Q0tFVCwgU09fT09CSU5MSU5FLChjaGFyICopICZvbiwgc2l6ZW9mIG9uKTsKLSNlbHNlCi0jaWZk ZWYgTU9UU1Y4OFI0Ci0gICAgc2V0c29ja29wdChodHRwZmQsIFNPTF9TT0NLRVQsIFNPX09PQklO TElORSwoY2hhciAqKSAmb24sIHNpemVvZiBvbik7Ci0jZWxzZQotI2lmZGVmIFNPTEFSSVMKLS8q Ci0gIE1heWJlIHRoaXMgYXBwbGllcyB0byBhbGwgU1ZSNCB2ZXJzaW9ucywgYnV0IHRoZSBvdGhl ciAoZWxzZSkgd2F5IGhhcyBiZWVuCi0gIGNvbXBpbGluZyBhbmQgd29ya2luZyBmaW5lIG9uIGFs bCB0aGUgb3RoZXJzLCBzbyBiZXN0IG5vdCB0byBjaGFuZ2UgaXQuCi0qLwotICAgIHNldHNvY2tv cHQoaHR0cGZkLCBTT0xfU09DS0VULCBTT19PT0JJTkxJTkUsKGNoYXIgKikgJm9uLCBzaXplb2Yg b24pOwotI2Vsc2UKLSNpZmRlZiBPU0sKLSAgICBzZXRzb2Nrb3B0KGh0dHBmZCwgU09MX1NPQ0tF VCwgU09fT09CSU5MSU5FLChjaGFyICopICZvbiwgc2l6ZW9mIG9uKTsKLSNlbHNlCi0jaWZkZWYg T1MyCi0gICAgewotICAgICAgICBpbnQgcmM7Ci0gICAgICAgIHJjID0gc2V0c29ja29wdChodHRw ZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICBTT0xfU09DS0VULAotICAgICAgICAgICAgICAg ICAgICAgICAgU09fT09CSU5MSU5FLAotICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikg Jm9uLAotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIG9uCi0gICAgICAgICAgICAgICAg ICAgICAgICApOwotICAgICAgICBkZWJ1ZyhGMTExLCJzZXRzb2Nrb3B0IFNPX09PQklOTElORSIs b24gPyAib24iIDogIm9mZiIgLHJjKTsKLSAgICB9Ci0jZWxzZQotI2lmZGVmIFZNUyAvKiBvciwg YXQgbGVhc3QsIFZNUyB3aXRoIGdjYyAqLwotICAgIHNldHNvY2tvcHQoaHR0cGZkLCBTT0xfU09D S0VULCBTT19PT0JJTkxJTkUsKGNoYXIgKikgJm9uLCBzaXplb2Ygb24pOwotI2Vsc2UKLSNpZmRl ZiBDTElYCi0gICAgc2V0c29ja29wdChodHRwZmQsIFNPTF9TT0NLRVQsIFNPX09PQklOTElORSwo Y2hhciAqKSAmb24sIHNpemVvZiBvbik7Ci0jZWxzZQotICAgIHNldHNvY2tvcHQoaHR0cGZkLCBT T0xfU09DS0VULCBTT19PT0JJTkxJTkUsICZvbiwgc2l6ZW9mIG9uKTsKLSNlbmRpZiAvKiBDTElY ICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogT1NLICov Ci0jZW5kaWYgLyogU09MQVJJUyAqLwotI2VuZGlmIC8qIE1PVFNWODhSNCAqLwotI2VuZGlmIC8q IFBPU0lYICovCi0jZW5kaWYgLyogQlNENDMgKi8KLSNlbmRpZiAvKiBPU0YxICovCi0jZW5kaWYg LyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBTT19PT0JJTkxJTkUgKi8KLQotI2lmbmRlZiBO T1RDUE9QVFMKLSNpZm5kZWYgZGF0YWdlbmVyYWwKLSNpZmRlZiBTT0xfU09DS0VUCi0jaWZkZWYg VENQX05PREVMQVkKLSAgICBub19kZWxheSh0dHlmZCx0Y3Bfbm9kZWxheSk7Ci0jZW5kaWYgLyog VENQX05PREVMQVkgKi8KLSNpZmRlZiBTT19LRUVQQUxJVkUKLSAgICBrZWVwYWxpdmUodHR5ZmQs dGNwX2tlZXBhbGl2ZSk7Ci0jZW5kaWYgLyogU09fS0VFUEFMSVZFICovCi0jaWZkZWYgU09fTElO R0VSCi0gICAgY2tfbGluZ2VyKHR0eWZkLHRjcF9saW5nZXIsIHRjcF9saW5nZXJfdG1vKTsKLSNl bmRpZiAvKiBTT19MSU5HRVIgKi8KLSNpZmRlZiBTT19TTkRCVUYKLSAgICBzZW5kYnVmKHR0eWZk LHRjcF9zZW5kYnVmKTsKLSNlbmRpZiAvKiBTT19TTkRCVUYgKi8KLSNpZmRlZiBTT19SQ1ZCVUYK LSAgICByZWN2YnVmKHR0eWZkLHRjcF9yZWN2YnVmKTsKLSNlbmRpZiAvKiBTT19SQ1ZCVUYgKi8K LSNlbmRpZiAvKiBTT0xfU09DS0VUICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRp ZiAvKiBOT1RDUE9QVFMgKi8KLQotI2lmbmRlZiBkYXRhZ2VuZXJhbAotICAgIC8qIEZpbmQgb3V0 IG91ciBvd24gSVAgYWRkcmVzcy4gKi8KLSAgICAvKiBXZSBuZWVkIHRoZSBsX2FkZHIgc3RydWN0 dXJlIGZvciBbRV1LTE9HSU4uICovCi0gICAgbF9zbGVuID0gc2l6ZW9mKGxfYWRkcik7Ci0gICAg Ynplcm8oKGNoYXIgKikmbF9hZGRyLCBsX3NsZW4pOwotI2lmbmRlZiBFWENFTEFOCi0gICAgaWYg KCFnZXRzb2NrbmFtZShodHRwZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmbF9hZGRyLCAmbF9zbGVu KSkgewotICAgICAgICBjaGFyICogcyA9IChjaGFyICopaW5ldF9udG9hKGxfYWRkci5zaW5fYWRk cik7Ci0gICAgICAgIGNrc3RybmNweShteWlwYWRkciwgcywgMjApOwotICAgICAgICBkZWJ1ZyhG MTEwLCJnZXRzb2NrbmFtZSIsbXlpcGFkZHIsMCk7Ci0gICAgfQotI2VuZGlmIC8qIEVYQ0VMQU4g Ki8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotCi0vKiBTZWUgbm90ZSBpbiBuZXRvcGVuKCkg b24gUmV2ZXJzZSBETlMgbG9va3VwcyAqLwotICAgICBpZiAodGNwX3JkbnMgPT0gU0VUX09OKSB7 Ci0jaWZkZWYgTlQKLSAgICAgICAgaWYgKGlzV2luOTUoKSkKLSAgICAgICAgICBzbGVlcCgxKTsK LSNlbmRpZiAvKiBOVCAqLwotICAgICAgICBpZiAoIXF1aWV0KSB7Ci0gICAgICAgICAgICBwcmlu dGYoIiBSZXZlcnNlIEROUyBMb29rdXAuLi4gIik7Ci0gICAgICAgICAgICBmZmx1c2goc3Rkb3V0 KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaG9zdCA9IGdldGhvc3RieWFkZHIoKGNoYXIgKikm cl9hZGRyLnNpbl9hZGRyLDQsUEZfSU5FVCkpIHsKLSAgICAgICAgICAgIGNoYXIgKiBzOwotICAg ICAgICAgICAgaG9zdCA9IGNrX2NvcHlob3N0ZW50KGhvc3QpOwotICAgICAgICAgICAgZGVidWco RjEwMCwiaHR0cF9vcGVuIGdldGhvc3RieW5hbWUgIT0gTlVMTCIsIiIsMCk7Ci0gICAgICAgICAg ICBpZiAoIXF1aWV0KSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIoT0spXG4iKTsKLSAgICAg ICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHMg PSBob3N0LT5oX25hbWU7Ci0gICAgICAgICAgICBpZiAoIXMpIHsgICAgICAgICAgICAgICAgICAg LyogVGhpcyBjYW4gaGFwcGVuLi4uICovCi0gICAgICAgICAgICAgICAgZGVidWcoRjEwMCwiaHR0 cF9vcGVuIGhvc3QtPmhfbmFtZSBpcyBOVUxMIiwiIiwwKTsKLSAgICAgICAgICAgICAgICBzID0g IiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiBTb21ldGhpbmcgaXMgd3Jvbmcgd2l0 aCBpbmV0X250b2EoKSBvbiBIUFVYIDEwLnh4ICovCi0gICAgICAgICAgICAvKiBUaGUgY29tcGls ZXIgc2F5cyAiSW50ZWdyYWwgdmFsdWUgaW1wbGljaXRseSBjb252ZXJ0ZWQgdG8gKi8KLSAgICAg ICAgICAgIC8qIHBvaW50ZXIgaW4gYXNzaWdubWVudC4iICBUaGUgcHJvdG90eXBlIGlzIHJpZ2h0 IHRoZXJlICovCi0gICAgICAgICAgICAvKiBpbiA8YXJwYS9pbmV0Lmg+IHNvIHdoYXQncyB0aGUg cHJvYmxlbT8gKi8KLSAgICAgICAgICAgIC8qIERpdHRvIGluIEhQLVVYIDUueCwgYnV0IG5vdCA4 Lnggb3IgOS54Li4uICovCi0gICAgICAgICAgICBpZiAoISpzKSB7ICAgICAgICAgICAgICAgICAg LyogTm8gbmFtZSBzbyBzdWJzdGl0dXRlIHRoZSBhZGRyZXNzICovCi0gICAgICAgICAgICAgICAg ZGVidWcoRjEwMCwiaHR0cF9vcGVuIGhvc3QtPmhfbmFtZSBpcyBlbXB0eSIsIiIsMCk7Ci0gICAg ICAgICAgICAgICAgcyA9IGluZXRfbnRvYShyX2FkZHIuc2luX2FkZHIpOyAvKiBDb252ZXJ0IGFk ZHJlc3MgdG8gc3RyaW5nICovCi0gICAgICAgICAgICAgICAgaWYgKCFzKSAgICAgICAgICAgICAg ICAgLyogVHJ1c3QgTm8gMSAqLwotICAgICAgICAgICAgICAgICAgcyA9ICIiOwotICAgICAgICAg ICAgICAgIGlmICgqcykgeyAgICAgICAgICAgICAgIC8qIElmIGl0IHdvcmtlZCwgdXNlIHRoaXMg c3RyaW5nICovCi0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShodHRwX2lwLHMsMjApOwot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzID0gaHR0cF9pcDsgICAgICAgICAg ICAgLyogT3RoZXJ3aXNlIHN0aWNrIHdpdGggdGhlIElQICovCi0gICAgICAgICAgICAgICAgaWYg KCEqcykgICAgICAgICAgICAgICAgIC8qIG9yIGZhaWxpbmcgdGhhdCAqLwotICAgICAgICAgICAg ICAgICAgcyA9IGh0dHBfaG9zdF9wb3J0OyAgICAvKiB0aGUgbmFtZSB3ZSB3ZXJlIGNhbGxlZCB3 aXRoLiAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCpzKSAgICAgICAgICAgICAg ICAgICAgIC8qIHJldHVybiB0aGUgcmRucyBuYW1lICovCi0gICAgICAgICAgICAgICAgY2ttYWtt c2cocmRuc19uYW1lLHJkbnNfbGVuLHMsIjoiLHN2Y25hbWUsTlVMTCk7Ci0KLSAgICAgICAgICAg IGlmICghcXVpZXQgJiYgKnMKLSNpZm5kZWYgTk9JQ1AKLSAgICAgICAgICAgICAgICAmJiAhZG9j b254Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLSAgICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAg ICAgICBwcmludGYoIiAlcyBjb25uZWN0ZWQgb24gcG9ydCAlc1xuIixzLAotICAgICAgICAgICAg ICAgICAgICAgICBja3VpdG9hKG50b2hzKHNlcnZpY2UtPnNfcG9ydCkpKTsKLSNpZmRlZiBCRVRB REVCVUcKLSAgICAgICAgICAgICAgICAvKiBUaGlzIGlzIHNpbXBseSBmb3IgdGVzdGluZyB0aGUg RE5TIGVudHJpZXMgKi8KLSAgICAgICAgICAgICAgICBpZiAoaG9zdC0+aF9hbGlhc2VzKSB7Ci0g ICAgICAgICAgICAgICAgICAgIGNoYXIgKiogYSA9IGhvc3QtPmhfYWxpYXNlczsKLSAgICAgICAg ICAgICAgICAgICAgd2hpbGUgKCphKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYo IiBhbGlhcyA9PiAlc1xuIiwqYSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhKys7Ci0gICAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQkVUQURFQlVH ICovCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIXF1 aWV0KSBwcmludGYoIkZhaWxlZC5cbiIpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICghcXVp ZXQpIHByaW50ZigiKE9LKVxuIik7Ci0gICAgaWYgKCFxdWlldCkgZmZsdXNoKHN0ZG91dCk7Ci0K LQotICAgIGlmICggdGNwX2h0dHBfcHJveHkgKSB7Ci0gICAgICAgIC8qIEVyYXNlIHRoZSBJUCBh ZGRyZXNzIHNpbmNlIHdlIGNhbm5vdCByZXVzZSBpdCAqLwotICAgICAgICBodHRwX2lwWzBdID0g J1wwJzsKLSAgICB9IGVsc2UgewotICAgICAgICAvKiBUaGlzIHNob3VsZCBhbHJlYWR5IGhhdmUg YmVlbiBkb25lIGJ1dCBqdXN0IGluIGNhc2UgKi8KLSAgICAgICAgY2tzdHJuY3B5KGh0dHBfaXAs KGNoYXIgKilpbmV0X250b2Eocl9hZGRyLnNpbl9hZGRyKSwyMCk7Ci0gICAgfQotICAgIG1ha2Vz dHIoJmh0dHBfYWdlbnQsYWdlbnQpOwotCi0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKHVzZV9zc2wg JiYgY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpKSB7Ci0gICAgICAgIGlmICghc3NsX2h0dHBfaW5p dChob3N0bmFtZSkpIHsKLSAgICAgICAgICAgIGlmIChiaW9fZXJyIT1OVUxMKSB7Ci0gICAgICAg ICAgICAgICAgQklPX3ByaW50ZihiaW9fZXJyLCJzc2xfdG5faW5pdCgpIGZhaWxlZFxuIik7Ci0g ICAgICAgICAgICAgICAgRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKLSAgICAgICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgICAgICAgZmZsdXNoKHN0ZGVycik7Ci0gICAgICAgICAgICAgICAg ZnByaW50ZihzdGRlcnIsInNzbF90bl9pbml0KCkgZmFpbGVkXG4iKTsKLSAgICAgICAgICAgICAg ICBFUlJfcHJpbnRfZXJyb3JzX2ZwKHN0ZGVycik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg ICBodHRwX2Nsb3NlKCk7Ci0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9IGVsc2Ug aWYgKCBja19zc2xfaHR0cF9jbGllbnQoaHR0cGZkLGhvc3RuYW1lKSA8IDAgKSB7Ci0gICAgICAg ICAgICBodHRwX2Nsb3NlKCk7Ci0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0g ICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotCi0gICAg cmV0dXJuKDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRG9uZS4gKi8KLX0KLQotaW50 Ci0jaWZkZWYgQ0tfQU5TSUMKLWh0dHBfY2xvc2UoVk9JRCkKLSNlbHNlIC8qIENLX0FOU0lDICov Ci1odHRwX2Nsb3NlKCkKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGludCB4ID0gMDsK LSAgICBkZWJ1ZyhGMTAxLCJodHRwX2Nsb3NlIiwiIixodHRwZmQpOwotCi0jaWZkZWYgSFRUUF9C VUZGRVJJTkcKLSAgICBodHRwX2NvdW50ID0gMDsKLSAgICBodHRwX2J1ZnAgPSAwOwotI2VuZGlm CS8qIEhUVFBfQlVGRkVSSU5HICovCi0KLSAgICBpZiAoaHR0cGZkID09IC0xKSAgICAgICAgICAg ICAgICAgICAgLyogV2FzIG9wZW4/ICovCi0gICAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAg ICAgICAgICAgLyogV2Fzbid0LiAqLwotCi0jaWZuZGVmIE9TMgotICAgIGlmIChodHRwZmQgPiAt MSkgICAgICAgICAgICAgICAgICAgICAvKiBXYXMuICovCi0jZW5kaWYgLyogT1MyICovCi0gICAg ICB7Ci0jaWZkZWYgQ0tfU1NMCi0gICAgICAgICAgaWYgKHRsc19odHRwX2FjdGl2ZV9mbGFnKSB7 Ci0gICAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKLSAgICAgICAgICAgICAgICBCSU9f cHJpbnRmKGJpb19lcnIsImNhbGxpbmcgU1NMX3NodXRkb3duXG4iKTsKLSAgICAgICAgICAgICAg U1NMX3NodXRkb3duKHRsc19odHRwX2Nvbik7Ci0gICAgICAgICAgICAgIHRsc19odHRwX2FjdGl2 ZV9mbGFnID0gMDsKLSAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0jaWZkZWYgVENQ SVBMSUIKLSAgICAgICAgICB4ID0gc29ja2V0X2Nsb3NlKGh0dHBmZCk7ICAgICAgLyogQ2xvc2Ug aXQuICovCi0jZWxzZQotI2lmbmRlZiBPUzIKLSAgICAgICAgICB4ID0gY2xvc2UoaHR0cGZkKTsK LSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotICAgICAgfQotICAgIGh0 dHBmZCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFyayBpdCBhcyBjbG9zZWQu ICovCi0gICAgLyogZG8gbm90IGVyYXNlIGh0dHBfaG9zdF9wb3J0LCBodHRwX2lwLCBodHRwX3Bv cnQgc28gdGhleSAqLwotICAgIC8qIGNhbiBiZSB1c2VkIGJ5IGh0dHBfcmVvcGVuKCkgKi8KLSAg ICByZXR1cm4oeCk7Ci19Ci0KLQotLyogaHR0cF90b2woKQotICogQ2FsbCB3aXRoIHMgPSBwb2lu dGVyIHRvIHN0cmluZywgbiA9IGxlbmd0aC4KLSAqIFJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIGFj dHVhbGx5IHdyaXR0ZW4gb24gc3VjY2Vzcywgb3IKLSAqIC0xIG9uIGkvbyBlcnJvciwgLTIgaWYg Y2FsbGVkIGltcHJvcGVybHkuCi0gKi8KLQotaW50Ci1odHRwX3RvbChzLG4pIENIQVIgKnM7IGlu dCBuOyB7Ci0gICAgaW50IGNvdW50ID0gMDsKLSAgICBpbnQgbGVuID0gbjsKLSAgICBpbnQgdHJ5 ID0gMDsKLQotICAgIGlmIChodHRwZmQgPT0gLTEpIHsKLSAgICAgICAgZGVidWcoRjEwMCwiaHR0 cF90b2wgc29ja2V0IGlzIGNsb3NlZCIsIiIsMCk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9 Ci0gICAgZGVidWcoRjEwMSwiaHR0cF90b2wgVENQSVBMSUIgdHRuZXQiLCIiLHR0bmV0KTsKLSNp ZmRlZiBDT01NRU5UCi0gICAgY2toZXhkdW1wKCJodHRwX3RvbCIscyxuKTsKLSNlbmRpZiAvKiBD T01NRU5UICovCi0KLSNpZmRlZiBDS19TU0wKLSAgICBpZiAodGxzX2h0dHBfYWN0aXZlX2ZsYWcp IHsKLSAgICAgICAgaW50IGVycm9yLCByOwotICAgICAgICAvKiBXcml0ZSB1c2luZyBTU0wgKi8K LSAgICAgIHNzbF9yZXRyeToKLSAgICAgICAgICByID0gU1NMX3dyaXRlKHRsc19odHRwX2Nvbiwg cywgbGVuIC8qID4xMDI0PzEwMjQ6bGVuICovKTsKLSAgICAgICAgc3dpdGNoIChTU0xfZ2V0X2Vy cm9yKHRsc19odHRwX2NvbixyKSkgewotICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX05PTkU6Ci0g ICAgICAgICAgICBkZWJ1ZyhGMTExLCJodHRwX3RvbCIsIlNTTF93cml0ZSIscik7Ci0gICAgICAg ICAgICBpZiAoIHIgPT0gbGVuICkKLSAgICAgICAgICAgICAgICByZXR1cm4obik7Ci0gICAgICAg ICAgICAgcyArPSByOwotICAgICAgICAgICAgIGxlbiAtPSByOwotICAgICAgICAgICAgIGdvdG8g c3NsX3JldHJ5OwotICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6Ci0gICAgICAg ICAgICBkZWJ1ZyhGMTAwLCJodHRwX3RvbCBTU0xfRVJST1JfV0FOVF9XUklURSIsIiIsMCk7Ci0J ICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6Ci0g ICAgICAgICAgICBkZWJ1ZyhGMTAwLCJodHRwX3RvbCBTU0xfRVJST1JfV0FOVF9SRUFEIiwiIiww KTsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgY2FzZSBTU0xfRVJST1JfU1lT Q0FMTDoKLSAgICAgICAgICAgICAgaWYgKCByID09IDAgKSB7IC8qIEVPRiAqLwotICAgICAgICAg ICAgICAgICAgaHR0cF9jbG9zZSgpOwotICAgICAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAg ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgIGludCByYyA9IC0xOwotI2lm ZGVmIE5UCi0gICAgICAgICAgICAgICAgICBpbnQgZ2xlID0gR2V0TGFzdEVycm9yKCk7Ci0gICAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJodHRwX3RvbCBTU0xfRVJST1JfU1lTQ0FMTCIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgIkdldExhc3RFcnJvcigpIixnbGUpOwotICAgICAgICAg ICAgICAgICAgcmMgPSBvczJzb2NrZXRlcnJvcihnbGUpOwotICAgICAgICAgICAgICAgICAgaWYg KHJjID09IC0xKQotICAgICAgICAgICAgICAgICAgICAgIHJjID0gLTI7Ci0gICAgICAgICAgICAg ICAgICBlbHNlIGlmICggcmMgPT0gLTIgKQotICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAt MTsKLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICAgICAgICAgICAgcmV0dXJuKHJjKTsKLSAgICAg ICAgICAgICAgfQotICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfWDUwOV9MT09LVVA6Ci0g ICAgICAgICAgICBkZWJ1ZyhGMTAwLCJodHRwX3RvbCBTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tV UCIsIiIsMCk7Ci0gICAgICAgICAgICBodHRwX2Nsb3NlKCk7Ci0gICAgICAgICAgICByZXR1cm4o LTIpOwotICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1NTTDoKLSAgICAgICAgICAgIGRlYnVnKEYx MDAsImh0dHBfdG9sIFNTTF9FUlJPUl9TU0wiLCIiLDApOwotICAgICAgICAgICAgaHR0cF9jbG9z ZSgpOwotICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9a RVJPX1JFVFVSTjoKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsImh0dHBfdG9sIFNTTF9FUlJPUl9a RVJPX1JFVFVSTiIsIiIsMCk7Ci0gICAgICAgICAgICBodHRwX2Nsb3NlKCk7Ci0gICAgICAgICAg ICByZXR1cm4oLTIpOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAw LCJodHRwX3RvbCBTU0xfRVJST1JfPz8/Pz8iLCIiLDApOwotICAgICAgICAgICAgaHR0cF9jbG9z ZSgpOwotICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAv KiBDS19TU0wgKi8KLQotICBodHRwX3RvbF9yZXRyeToKLSAgICB0cnkrKzsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBJbmNyZWFzZSB0aGUgdHJ5IGNvdW50ZXIgKi8KLQotICAgIHsK LSNpZmRlZiBCU0RTRUxFQ1QKLSAgICAgICAgZmRfc2V0IHdmZHM7Ci0gICAgICAgIHN0cnVjdCB0 aW1ldmFsIHR2OwotCi0gICAgICAgIGRlYnVnKEYxMDEsImh0dHBfdG9sIEJTRFNFTEVDVCIsIiIs MCk7Ci0gICAgICAgIHR2LnR2X3VzZWMgPSAwTDsKLSAgICAgICAgdHYudHZfc2VjPTMwOwotI2lm ZGVmIE5UCi0gICAgICAgIFdTQVNhZmVUb0NhbmNlbCA9IDE7Ci0jZW5kaWYgLyogTlQgKi8KLSNp ZmRlZiBTVFJFQU1JTkcKLSAgICAgIGRvX3NlbGVjdDoKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8K LSAgICAgICAgRkRfWkVSTygmd2Zkcyk7Ci0gICAgICAgIEZEX1NFVChodHRwZmQsICZ3ZmRzKTsK LSAgICAgICAgaWYgKHNlbGVjdChGRF9TRVRTSVpFLCBOVUxMLAotI2lmZGVmIF9fREVDQwotI2lm bmRlZiBfX0RFQ0NfVkVSCi0gICAgICAgICAgICAgICAgICAgIChpbnQgKikKLSNlbmRpZiAvKiBf X0RFQ0NfVkVSICovCi0jZW5kaWYgLyogX19ERUNDICovCi0gICAgICAgICAgICAgICAgICAgJndm ZHMsIE5VTEwsICZ0dikgPCAwKSB7Ci0gICAgICAgICAgICBpbnQgc19lcnJubyA9IHNvY2tldF9l cnJubzsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImh0dHBfdG9sIHNlbGVjdCBmYWlsZWQiLCIi LHNfZXJybm8pOwotI2lmZGVmIEJFVEFERUJVRwotICAgICAgICAgICAgcHJpbnRmKCJodHRwX3Rv bCBzZWxlY3QgZmFpbGVkOiAlZFxuIiwgc19lcnJubyk7Ci0jZW5kaWYgLyogQkVUQURFQlVHICov Ci0jaWZkZWYgTlQKLSAgICAgICAgICAgIFdTQVNhZmVUb0NhbmNlbCA9IDA7Ci0gICAgICAgICAg ICBpZiAoIXdpbjk1c2VsZWN0YnVnKQotI2VuZGlmIC8qIE5UICovCi0gICAgICAgICAgICAgIHJl dHVybigtMSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFGRF9JU1NFVChodHRwZmQsICZ3ZmRz KSkgewotI2lmZGVmIFNUUkVBTUlORwotICAgICAgICAgICAgaWYgKHN0cmVhbWluZykKLSAgICAg ICAgICAgICAgZ290byBkb19zZWxlY3Q7Ci0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0gICAgICAg ICAgICBkZWJ1ZyhGMTExLCJodHRwX3RvbCIsIiFGRF9JU1NFVCIsdHR5ZmQpOwotI2lmZGVmIE5U Ci0gICAgICAgICAgICBXU0FTYWZlVG9DYW5jZWwgPSAwOwotICAgICAgICAgICAgaWYgKCF3aW45 NXNlbGVjdGJ1ZykKLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICAgICAgICByZXR1cm4oLTEpOwot ICAgICAgICB9Ci0jaWZkZWYgTlQKLSAgICAgICAgV1NBU2FmZVRvQ2FuY2VsID0gMDsKLSNlbmRp ZiAvKiBOVCAqLwotI2Vsc2UgLyogQlNEU0VMRUNUICovCi0jaWZkZWYgSUJNU0VMRUNUCi0gICAg ICAgIHsKLSAgICAgICAgICAgIGludCB0cmllcyA9IDA7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAx LCJodHRwX3RvbCBJQk1TRUxFQ1QiLCIiLDApOwotICAgICAgICAgICAgd2hpbGUgKHNlbGVjdCgm aHR0cGZkLCAwLCAxLCAwLCAxMDAwKSAhPSAxKSB7Ci0gICAgICAgICAgICAgICAgaW50IGNvdW50 OwotICAgICAgICAgICAgICAgIGlmICh0cmllcysrID49IDYwKSB7Ci0gICAgICAgICAgICAgICAg ICAgIC8qIGlmIGFmdGVyIDYwIHNlY29uZHMgd2UgY2FuJ3QgZ2V0IHBlcm1pc3Npb24gdG8gd3Jp dGUgKi8KLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiaHR0cF90b2wgc2VsZWN0IGZh aWxlZCIsIiIsc29ja2V0X2Vycm5vKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsK LSAgICAgICAgICAgICAgICB9Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgICAgIGlmICgo Y291bnQgPSBodHRwX3RjaGsoKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYx MTEsImh0dHBfdG9sIiwiaHR0cF90Y2hrKCkiLGNvdW50KTsKLSAgICAgICAgICAgICAgICAgICAg cmV0dXJuKGNvdW50KTsKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwot ICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLyogSUJNU0VMRUNUICovCi0jZW5kaWYg LyogQlNEU0VMRUNUICovCi0jaWZkZWYgVENQSVBMSUIKLSAgICAgICAgaWYgKChjb3VudCA9IHNv Y2tldF93cml0ZShodHRwZmQscyxuKSkgPCAwKSB7Ci0gICAgICAgICAgICBpbnQgc19lcnJubyA9 IHNvY2tldF9lcnJubzsgLyogbWF5YmUgYSBmdW5jdGlvbiAqLwotICAgICAgICAgICAgZGVidWco RjEwMSwiaHR0cF90b2wgc29ja2V0X3dyaXRlIGVycm9yIiwiIixzX2Vycm5vKTsKLSNpZmRlZiBP UzIKLSAgICAgICAgICAgIGlmIChvczJzb2NrZXRlcnJvcihzX2Vycm5vKSA8IDApCi0gICAgICAg ICAgICAgIHJldHVybigtMik7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICByZXR1cm4o LTEpOyAgICAgICAgICAgICAgICAgLyogQ2FsbCBpdCBhbiBpL28gZXJyb3IgKi8KLSAgICAgICAg fQotI2Vsc2UgLyogVENQSVBMSUIgKi8KLSAgICAgICAgaWYgKChjb3VudCA9IHdyaXRlKGh0dHBm ZCxzLG4pKSA8IDApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImh0dHBfdG9sIHNvY2tldF93 cml0ZSBlcnJvciIsIiIsZXJybm8pOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAg ICAgICAgIC8qIENhbGwgaXQgYW4gaS9vIGVycm9yICovCi0gICAgICAgIH0KLSNlbmRpZiAvKiBU Q1BJUExJQiAqLwotICAgICAgICBpZiAoY291bnQgPCBuKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhG MTExLCJodHRwX3RvbCBzb2NrZXRfd3JpdGUiLHMsY291bnQpOwotICAgICAgICAgICAgaWYgKHRy eSA+IDI1KSB7Ci0gICAgICAgICAgICAgICAgLyogZG9uJ3QgdHJ5IG1vcmUgdGhhbiAyNSB0aW1l cyAqLwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsImh0dHBfdG9sIHRyaWVkIG1vcmUgdGhh biAyNSB0aW1lcyIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIGlmIChjb3VudCA+IDApIHsKLSAgICAgICAgICAgICAgICBzICs9 IGNvdW50OwotICAgICAgICAgICAgICAgIG4gLT0gY291bnQ7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgICAgICBkZWJ1ZyhGMTExLCJodHRwX3RvbCByZXRyeSIscyxuKTsKLSAgICAgICAgICAgIGdv dG8gaHR0cF90b2xfcmV0cnk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZWJ1ZyhG MTExLCJodHRwX3RvbCBzb2NrZXRfd3JpdGUiLHMsY291bnQpOwotICAgICAgICAgICAgcmV0dXJu KGxlbik7IC8qIHN1Y2Nlc3MgLSByZXR1cm4gdG90YWwgbGVuZ3RoICovCi0gICAgICAgIH0KLSAg ICB9Ci19Ci0KLWludAotaHR0cF9pbmModGltbykgaW50IHRpbW87IHsKLSAgICBpbnQgeD0tMTsg dW5zaWduZWQgY2hhciBjOyAgICAgICAgICAgICAvKiBUaGUgbG9jYWxzLiAqLwotCi0gICAgaWYg KGh0dHBmZCA9PSAtMSkgewotI2lmZGVmIEhUVFBfQlVGRkVSSU5HCi0JaHR0cF9jb3VudCA9IDA7 Ci0gIAlodHRwX2J1ZnAgPSAwOwotI2VuZGlmCS8qIEhUVFBfQlVGRkVSSU5HICovCi0gICAgICAg IGRlYnVnKEYxMDAsImh0dHBfaW5jIHNvY2tldCBpcyBjbG9zZWQiLCIiLDApOwotICAgICAgICBy ZXR1cm4oLTIpOwotICAgIH0KLQotI2lmZGVmIENLX1NTTAotICAgIC8qCi0gICAgICogSW4gdGhl IGNhc2Ugb2YgT3BlblNTTCwgaXQgaXMgcG9zc2libGUgdGhhdCB0aGVyZSBpcyBzdGlsbAotICAg ICAqIGRhdGEgd2FpdGluZyBpbiB0aGUgU1NMIHNlc3Npb24gYnVmZmVycyB0aGF0IGhhcyBub3Qg eWV0Ci0gICAgICogYmVlbiByZWFkIGJ5IEtlcm1pdC4gIElmIHRoaXMgaXMgdGhlIGNhc2Ugd2Ug bXVzdCBwcm9jZXNzCi0gICAgICogaXQgd2l0aG91dCBjYWxsaW5nIHNlbGVjdCgpIGJlY2F1c2Ug c2VsZWN0KCkgd2lsbCBub3QgcmV0dXJuCi0gICAgICogd2l0aCBhbiBpbmRpY2F0aW9uIHRoYXQg dGhlcmUgaXMgZGF0YSB0byBiZSByZWFkIGZyb20gdGhlCi0gICAgICogc29ja2V0LiAgSWYgdGhl cmUgaXMgbm8gZGF0YSBwZW5kaW5nIGluIHRoZSBTU0wgc2Vzc2lvbgotICAgICAqIGJ1ZmZlcnMg dGhlbiBmYWxsIHRocm91Z2ggdG8gdGhlIHNlbGVjdCgpIGNvZGUgYW5kIHdhaXQgZm9yCi0gICAg ICogc29tZSBkYXRhIHRvIGFycml2ZS4KLSAgICAgKi8KLSAgICBpZiAodGxzX2h0dHBfYWN0aXZl X2ZsYWcpIHsKLSAgICAgICAgaW50IGVycm9yOwotCi0gICAgICAgIHggPSBTU0xfcGVuZGluZyh0 bHNfaHR0cF9jb24pOwotICAgICAgICBpZiAoeCA8IDApIHsKLSAgICAgICAgICAgIGRlYnVnKEYx MTEsImh0dHBfaW5jIiwiU1NMX3BlbmRpbmcgZXJyb3IiLHgpOwotICAgICAgICAgICAgaHR0cF9j bG9zZSgpOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfSBlbHNlIGlmICggeCA+ IDAgKSB7Ci0JICBzc2xfcmVhZDoKLSAgICAgICAgICAgIHggPSBTU0xfcmVhZCh0bHNfaHR0cF9j b24sICZjLCAxKTsKLSAgICAgICAgICAgIGVycm9yID0gU1NMX2dldF9lcnJvcih0bHNfaHR0cF9j b24seCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGVycm9yKSB7Ci0gICAgICAgICAgICBjYXNlIFNT TF9FUlJPUl9OT05FOgotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImh0dHBfaW5jIFNTTF9F UlJPUl9OT05FIiwieCIseCk7Ci0gICAgICAgICAgICAgICAgaWYgKHggPiAwKSB7Ci0jaWZkZWYg T1MyCi0gICAgICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7Ci0jZW5kaWYgLyog T1MyICovCi0gICAgICAgICAgICAgICAgICAgIHJldHVybihjKTsgICAgICAgICAgLyogUmV0dXJu IGNoYXJhY3Rlci4gKi8KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHggPCAwKSB7Ci0jaWZk ZWYgT1MyCi0gICAgICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7Ci0jZW5kaWYg LyogT1MyICovCi0gICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaHR0cF9jbG9zZSgpOwotI2lmZGVmIE9T MgotICAgICAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9T MiAqLwotICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTIpOwotICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6Ci0gICAgICAgICAgICAgICAg ZGVidWcoRjEwMCwiaHR0cF9pbmMgU1NMX0VSUk9SX1dBTlRfV1JJVEUiLCIiLDApOwotI2lmZGVm IE9TMgotICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7Ci0jZW5kaWYgLyogT1My ICovCi0gICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgIGNhc2UgU1NMX0VS Uk9SX1dBTlRfUkVBRDoKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJodHRwX2luYyBTU0xf RVJST1JfV0FOVF9SRUFEIiwiIiwwKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICBSZWxl YXNlVENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgIHJldHVy bigtMSk7Ci0gICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9TWVNDQUxMOgotICAgICAgICAgICAg ICAgIGlmICggeCA9PSAwICkgeyAvKiBFT0YgKi8KLSAgICAgICAgICAgICAgICAgICAgaHR0cF9j bG9zZSgpOwotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRl eCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTIpOwot ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCByYyA9IC0x OwotI2lmZGVmIE5UCi0gICAgICAgICAgICAgICAgICAgIGludCBnbGUgPSBHZXRMYXN0RXJyb3Io KTsKLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiaHR0cF9pbmMgU1NMX0VSUk9SX1NZ U0NBTEwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdldExhc3RFcnJvcigpIixnbGUp OwotICAgICAgICAgICAgICAgICAgICByYyA9IG9zMnNvY2tldGVycm9yKGdsZSk7Ci0gICAgICAg ICAgICAgICAgICAgIGlmIChyYyA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJjID0g LTI7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCByYyA9PSAtMiApCi0gICAgICAgICAg ICAgICAgICAgICAgICByYyA9IC0xOwotI2VuZGlmIC8qIE5UICovCi0jaWZkZWYgT1MyCi0gICAg ICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7Ci0jZW5kaWYgLyogT1MyICovCi0g ICAgICAgICAgICAgICAgICAgIHJldHVybihyYyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUDoKLSAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTAwLCJodHRwX2luYyBTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUCIsIiIsMCk7Ci0g ICAgICAgICAgICAgICAgaHR0cF9jbG9zZSgpOwotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAg IFJlbGVhc2VUQ1BJUE11dGV4KCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAg cmV0dXJuKC0yKTsKLSAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1NTTDoKLSAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTAwLCJodHRwX2luYyBTU0xfRVJST1JfU1NMIiwiIiwwKTsKLSNpZmRlZiBD T01NRU5UCi0gICAgICAgICAgICAgICAgaHR0cF9jbG9zZSgpOwotI2VuZGlmIC8qIENPTU1FTlQg Ki8KLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOwotI2Vu ZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgICAgICBj YXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVSTjoKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJo dHRwX2luYyBTU0xfRVJST1JfWkVST19SRVRVUk4iLCIiLDApOwotICAgICAgICAgICAgICAgIGh0 dHBfY2xvc2UoKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRl eCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAg ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsImh0dHBfaW5jIFNT TF9FUlJPUl8/Pz8/PyIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgaHR0cF9jbG9zZSgpOwotI2lm ZGVmIE9TMgotICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7Ci0jZW5kaWYgLyog T1MyICovCi0gICAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgfQotICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotI2lmZGVmIEhUVFBfQlVGRkVSSU5H Ci0gICAgLyogU2tpcCBhbGwgdGhlIHNlbGVjdCgpIHN0dWZmIGlmIHdlIGhhdmUgYnl0ZXMgYnVm ZmVyZWQgbG9jYWxseSAqLwotICAgIGlmIChodHRwX2NvdW50ID4gMCkKLSAgICAgIGdvdG8gZ2V0 ZnJvbWJ1ZmZlcjsKLSNlbmRpZgkvKiBIVFRQX0JVRkZFUklORyAqLwotCi0gICAgewotI2lmZGVm IEJTRFNFTEVDVAotICAgICAgICBmZF9zZXQgcmZkczsKLSAgICAgICAgc3RydWN0IHRpbWV2YWwg dHY7Ci0gICAgICAgIGludCB0aW1lb3V0ID0gdGltbyA8IDAgPyAtdGltbyA6IDEwMDAgKiB0aW1v OwotICAgICAgICBkZWJ1ZyhGMTAxLCJodHRwX2luYyBCU0RTRUxFQ1QiLCIiLHRpbW8pOwotCi0g ICAgICAgIGZvciAoIDsgdGltZW91dCA+PSAwOyB0aW1lb3V0IC09ICh0aW1vID8gMTAwIDogMCkp IHsKLSAgICAgICAgICAgIGludCByYzsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImh0dHBfaW5j IiwidGltZW91dCIsdGltZW91dCk7Ci0gICAgICAgICAgICAvKiBEb24ndCBtb3ZlIHNlbGVjdCgp IGluaXRpYWxpemF0aW9uIG91dCBvZiB0aGUgbG9vcC4gKi8KLSAgICAgICAgICAgIEZEX1pFUk8o JnJmZHMpOwotICAgICAgICAgICAgRkRfU0VUKGh0dHBmZCwgJnJmZHMpOwotICAgICAgICAgICAg dHYudHZfc2VjICA9IHR2LnR2X3VzZWMgPSAwTDsKLSAgICAgICAgICAgIGlmICh0aW1vKQotICAg ICAgICAgICAgICAgIHR2LnR2X3VzZWMgPSAobG9uZykgMTAwMDAwTDsKLSAgICAgICAgICAgIGVs c2UKLSAgICAgICAgICAgICAgICB0di50dl9zZWMgPSAzMDsKLSNpZmRlZiBOVAotICAgICAgICAg ICAgV1NBU2FmZVRvQ2FuY2VsID0gMTsKLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICAgICAgcmMg PSBzZWxlY3QoRkRfU0VUU0laRSwKLSNpZm5kZWYgX19ERUNDCi0gICAgICAgICAgICAgICAgICAg ICAgICAgKGZkX3NldCAqKQotI2VuZGlmIC8qIF9fREVDQyAqLwotICAgICAgICAgICAgICAgICAg ICAgICAgICZyZmRzLCBOVUxMLCBOVUxMLCAmdHYpOwotICAgICAgICAgICAgaWYgKHJjIDwgMCkg ewotICAgICAgICAgICAgICAgIGludCBzX2Vycm5vID0gc29ja2V0X2Vycm5vOwotICAgICAgICAg ICAgICAgIGRlYnVnKEYxMTEsImh0dHBfaW5jIiwic2VsZWN0IixyYyk7Ci0gICAgICAgICAgICAg ICAgZGVidWcoRjExMSwiaHR0cF9pbmMiLCJzb2NrZXRfZXJybm8iLHNfZXJybm8pOwotI2lmZGVm IEhUVFBfQlVGRkVSSU5HCi0JCWh0dHBfY291bnQgPSAwOwotCQlodHRwX2J1ZnAgPSAwOwotI2Vu ZGlmCS8qIEhUVFBfQlVGRkVSSU5HICovCi0gICAgICAgICAgICAgICAgaWYgKHNfZXJybm8pCi0g ICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg ICBkZWJ1ZyhGMTExLCJodHRwX2luYyIsInNlbGVjdCIscmMpOwotI2lmZGVmIE5UCi0gICAgICAg ICAgICBXU0FTYWZlVG9DYW5jZWwgPSAwOwotI2VuZGlmIC8qIE5UICovCi0gICAgICAgICAgICBp ZiAoRkRfSVNTRVQoaHR0cGZkLCAmcmZkcykpIHsKLSAgICAgICAgICAgICAgICB4ID0gMDsKLSAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg ICAgLyogSWYgd2FpdGluZyBmb3JldmVyIHdlIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgaWYgdGhl ICovCi0gICAgICAgICAgICAgICAgLyogc29ja2V0IGNsb3NlZCBzbyB0cnkgd3JpdGluZyBhIDAt bGVuZ3RoIFRDUCBwYWNrZXQgICovCi0gICAgICAgICAgICAgICAgLyogd2hpY2ggc2hvdWxkIGZv cmNlIGFuIGVycm9yIGlmIHRoZSBzb2NrZXQgaXMgY2xvc2VkICovCi0gICAgICAgICAgICAgICAg aWYgKCF0aW1vKSB7Ci0jaWZkZWYgVENQSVBMSUIKLSAgICAgICAgICAgICAgICAgICAgaWYgKChy YyA9IHNvY2tldF93cml0ZShodHRwZmQsIiIsMCkpIDwgMCkgewotI2lmZGVmIEhUVFBfQlVGRkVS SU5HCi0JCQlodHRwX2NvdW50ID0gMDsKLQkJCWh0dHBfYnVmcCA9IDA7Ci0jZW5kaWYJLyogSFRU UF9CVUZGRVJJTkcgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBzX2Vycm5vID0gc29j a2V0X2Vycm5vOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiaHR0cF9pbmMg c29ja2V0X3dyaXRlIGVycm9yIiwiIixzX2Vycm5vKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChvczJzb2NrZXRlcnJvcihzX2Vycm5vKSA8IDApCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybigtMSk7IC8qIENhbGwgaXQgYW4gaS9vIGVycm9yICovCi0g ICAgICAgICAgICAgICAgICAgIH0KLSNlbHNlIC8qIFRDUElQTElCICovCi0gICAgICAgICAgICAg ICAgICAgIGlmICgocmMgPSB3cml0ZShodHRwZmQsIiIsMCkpIDwgMCkgewotI2lmZGVmIEhUVFBf QlVGRkVSSU5HCi0JCQlodHRwX2NvdW50ID0gMDsKLQkJCWh0dHBfYnVmcCA9IDA7Ci0jZW5kaWYJ LyogSFRUUF9CVUZGRVJJTkcgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEs Imh0dHBfaW5jIHNvY2tldF93cml0ZSBlcnJvciIsIiIsZXJybm8pOwotICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuKC0xKTsgLyogQ2FsbCBpdCBhbiBpL28gZXJyb3IgKi8KLSAgICAgICAg ICAgICAgICAgICAgfQotI2VuZGlmIC8qIFRDUElQTElCICovCi0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jaWZk ZWYgTlQKLSAgICAgICAgV1NBU2FmZVRvQ2FuY2VsID0gMDsKLSNlbmRpZiAvKiBOVCAqLwotI2Vs c2UgLyogIUJTRFNFTEVDVCAqLwotI2lmZGVmIElCTVNFTEVDVAotIC8qCi0gIFdhcyB1c2VkIGJ5 IE9TLzIsIGN1cnJlbnRseSBub3QgdXNlZCwgYnV0IG1pZ2h0IGNvbWUgaW4gaGFuZHkgc29tZSBk YXkuLi4KLSAgLi4uIGFuZCBpdCBjYW1lIGluIGhhbmR5ISAgRm9yIG91ciBUQ1AvSVAgbGF5ZXIs IGl0IGF2b2lkcyBhbGwgdGhlIGZkX3NldAotICBhbmQgdGltZXZhbCBzdHVmZiBzaW5jZSB0aGlz IGlzIHRoZSBvbmx5IHBsYWNlIHdoZXJlIGl0IGlzIHVzZWQuCi0gKi8KLSAgICAgICAgaW50IHNv Y2tldCA9IGh0dHBmZDsKLSAgICAgICAgaW50IHRpbWVvdXQgPSB0aW1vIDwgMCA/IC10aW1vIDog MTAwMCAqIHRpbW87Ci0KLSAgICAgICAgZGVidWcoRjEwMSwiaHR0cF9pbmMgSUJNU0VMRUNUIiwi Iix0aW1vKTsKLSAgICAgICAgZm9yICggOyB0aW1lb3V0ID49IDA7IHRpbWVvdXQgLT0gKHRpbW8g PyAxMDAgOiAwKSkgewotICAgICAgICAgICAgaWYgKHNlbGVjdCgmc29ja2V0LCAxLCAwLCAwLCAx MDBMKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgeCA9IDA7Ci0gICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbHNlIC8qICFJQk1TRUxFQ1QgKi8KLSAg ICAgICAgU0VMRUNUIGlzIHJlcXVpcmVkIGZvciB0aGlzIGNvZGUKLSNlbmRpZiAvKiBJQk1TRUxF Q1QgKi8KLSNlbmRpZiAvKiBCU0RTRUxFQ1QgKi8KLSAgICB9Ci0KLSAgICBpZiAodGltbyAmJiB4 IDwgMCkgeyAgICAgICAgLyogc2VsZWN0KCkgdGltZWQgb3V0ICovCi0jaWZkZWYgSFRUUF9CVUZG RVJJTkcKLQlodHRwX2NvdW50ID0gMDsKLQlodHRwX2J1ZnAgPSAwOwotI2VuZGlmCS8qIEhUVFBf QlVGRkVSSU5HICovCi0gICAgICAgIGRlYnVnKEYxMDAsImh0dHBfaW5jIHNlbGVjdCgpIHRpbWVk IG91dCIsIiIsMCk7Ci0gICAgICAgIHJldHVybigtMSk7IC8qIENhbGwgaXQgYW4gaS9vIGVycm9y ICovCi0gICAgfQotCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAgIGlmICggdGxzX2h0dHBfYWN0aXZl X2ZsYWcgKSB7Ci0gICAgICAgICAgICBpbnQgZXJyb3I7Ci0JICBzc2xfcmVhZDI6Ci0gICAgICAg ICAgICB4ID0gU1NMX3JlYWQodGxzX2h0dHBfY29uLCAmYywgMSk7Ci0gICAgICAgICAgICBlcnJv ciA9IFNTTF9nZXRfZXJyb3IodGxzX2h0dHBfY29uLHgpOwotICAgICAgICAgICAgc3dpdGNoIChl cnJvcikgewotICAgICAgICAgICAgY2FzZSBTU0xfRVJST1JfTk9ORToKLSAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTExLCJodHRwX2luYyBTU0xfRVJST1JfTk9ORSIsIngiLHgpOwotICAgICAgICAg ICAgICAgIGlmICh4ID4gMCkgewotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICAgICBSZWxl YXNlVENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgICAgICBy ZXR1cm4oYyk7ICAgICAgICAgIC8qIFJldHVybiBjaGFyYWN0ZXIuICovCi0gICAgICAgICAgICAg ICAgfSBlbHNlIGlmICh4IDwgMCkgewotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICAgICBS ZWxlYXNlVENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgICAg ICByZXR1cm4oLTEpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg ICAgIGh0dHBfY2xvc2UoKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAgICAgUmVsZWFz ZVRDUElQTXV0ZXgoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICAgICAgcmV0 dXJuKC0yKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9X QU5UX1dSSVRFOgotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsImh0dHBfaW5jIFNTTF9FUlJP Ul9XQU5UX1dSSVRFIiwiIiwwKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICBSZWxlYXNl VENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgIHJldHVybigt MSk7Ci0gICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6Ci0gICAgICAgICAgICAg ICAgZGVidWcoRjEwMCwiaHR0cF9pbmMgU1NMX0VSUk9SX1dBTlRfUkVBRCIsIiIsMCk7Ci0jaWZk ZWYgT1MyCi0gICAgICAgICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKLSNlbmRpZiAvKiBP UzIgKi8KLSAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgY2FzZSBTU0xf RVJST1JfU1lTQ0FMTDoKLSAgICAgICAgICAgICAgICBpZiAoIHggPT0gMCApIHsgLyogRU9GICov Ci0gICAgICAgICAgICAgICAgICAgIGh0dHBfY2xvc2UoKTsKLSNpZmRlZiBPUzIKLSAgICAgICAg ICAgICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAg ICAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg ICAgICAgICAgICAgICAgICBpbnQgcmMgPSAtMTsKLSNpZmRlZiBOVAotICAgICAgICAgICAgICAg ICAgICBpbnQgZ2xlID0gR2V0TGFzdEVycm9yKCk7Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVn KEYxMTEsImh0dHBfaW5jIFNTTF9FUlJPUl9TWVNDQUxMIiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICJHZXRMYXN0RXJyb3IoKSIsZ2xlKTsKLSAgICAgICAgICAgICAgICAgICAgcmMgPSBv czJzb2NrZXRlcnJvcihnbGUpOwotICAgICAgICAgICAgICAgICAgICBpZiAocmMgPT0gLTEpCi0g ICAgICAgICAgICAgICAgICAgICAgICByYyA9IC0yOwotICAgICAgICAgICAgICAgICAgICBlbHNl IGlmICggcmMgPT0gLTIgKQotICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAtMTsKLSNlbmRp ZiAvKiBOVCAqLwotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBN dXRleCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgICAgICByZXR1cm4ocmMp OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfWDUw OV9MT09LVVA6Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMCwiaHR0cF9pbmMgU1NMX0VSUk9S X1dBTlRfWDUwOV9MT09LVVAiLCIiLDApOwotICAgICAgICAgICAgICAgIGh0dHBfY2xvc2UoKTsK LSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOwotI2VuZGlm IC8qIE9TMiAqLwotICAgICAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgICAgICBjYXNl IFNTTF9FUlJPUl9TU0w6Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMCwiaHR0cF9pbmMgU1NM X0VSUk9SX1NTTCIsIiIsMCk7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgICAgIGh0dHBf Y2xvc2UoKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICAg ICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAg ICByZXR1cm4oLTIpOwotICAgICAgICAgICAgY2FzZSBTU0xfRVJST1JfWkVST19SRVRVUk46Ci0g ICAgICAgICAgICAgICAgZGVidWcoRjEwMCwiaHR0cF9pbmMgU1NMX0VSUk9SX1pFUk9fUkVUVVJO IiwiIiwwKTsKLSAgICAgICAgICAgICAgICBodHRwX2Nsb3NlKCk7Ci0jaWZkZWYgT1MyCi0gICAg ICAgICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAg ICAgICAgICAgICByZXR1cm4oLTIpOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTAwLCJodHRwX2luYyBTU0xfRVJST1JfPz8/Pz8iLCIiLDApOwotICAgICAg ICAgICAgICAgIGh0dHBfY2xvc2UoKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICBSZWxl YXNlVENQSVBNdXRleCgpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgIHJldHVy bigtMik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLQot I2lmZGVmIEhUVFBfQlVGRkVSSU5HCi0vKgotICBCdWZmZXJpbmcgY29kZSBhZGRlZCBieSBmZGMg MTUgRGVjIDIwMDUgZm9yIG5vbi1TU0wgY2FzZSBvbmx5IGJlY2F1c2UgSFRUUAotICBHRVRzIHdl cmUgb3JkZXJzIG9mIG1hZ25pdHVkZSB0b28gc2xvdyBkdWUgdG8gdGhlIHNpbmdsZS1ieXRlIHJl YWQoKXMuICBUaGUKLSAgZmlsZS1kZXNjcmlwdG9yIHN3YXBwaW5nIGlzIHByZXR0eSBncm9zcywg YnV0IHRoZSBtb3JlIGVsZWdhbnQgc29sdXRpb24KLSAgKGNhbGxpbmcgYSBuZXR0Y2hrKCkgbGlr ZSByb3V0aW5lIHdpdGggdGhlIGZkIGFzIGEgcGFyYW1ldGVyKSBkb2Vzbid0IHdvcmssCi0gIGJl Y2F1c2UgbmV0dGNoaygpIHJlbGllcyBvbiB0b28gbWFueSBvdGhlciByb3V0aW5lcyB0aGF0LCBs aWtlIGl0c2VsZiwgYXJlCi0gIGhhcmR3aXJlZCBmb3IgdHR5ZmQuCi0qLwotICBnZXRmcm9tYnVm ZmVyOgotCWlmICgtLWh0dHBfY291bnQgPj0gMCkgewotCSAgICBjID0gaHR0cF9pbmJ1ZltodHRw X2J1ZnArK107Ci0JICAgIHggPSAxOwotCX0gZWxzZSB7Ci0JICAgIGludCBzYXZlZmQ7Ci0JICAg IHNhdmVmZCA9IHR0eWZkOwotCSAgICB0dHlmZCA9IGh0dHBmZDsKLQkgICAgeCA9IG5ldHRjaGso KTsKLQkgICAgdHR5ZmQgPSBzYXZlZmQ7CQkKLQkgICAgZGVidWcoRjEwMSwiaHR0cF9pbmMgbmV0 dGNoayIsIiIseCk7Ci0JICAgIGlmICh4ID4gSFRUUF9JTkJVRkxFTikKLQkgICAgICB4ID0gSFRU UF9JTkJVRkxFTjsKLSNpZmRlZiBUQ1BJUExJQgotCSAgICB4ID0gc29ja2V0X3JlYWQoaHR0cGZk LGh0dHBfaW5idWYseCk7Ci0jZWxzZSAgLyogTm90IFRDUElQTElCICovCi0JICAgIHggPSByZWFk KGh0dHBmZCxodHRwX2luYnVmLHgpOwotI2VuZGlmCS8qIFRDUElQTElCICovCi0JICAgIGh0dHBf Y291bnQgPSAwOwotCSAgICBodHRwX2J1ZnAgPSAwOwotCSAgICBpZiAoeCA+IDApIHsKLQkJYyA9 IGh0dHBfaW5idWZbaHR0cF9idWZwKytdOwotCQlodHRwX2NvdW50ID0geCAtIDE7Ci0JICAgIH0K LQl9Ci0jZWxzZSAgLyogTm90IEhUVFBfQlVGRkVSSU5HICovCi0jaWZkZWYgVENQSVBMSUIKLSAg ICAgICAgeCA9IHNvY2tldF9yZWFkKGh0dHBmZCwmYywxKTsKLSNlbHNlICAvKiBOb3QgVENQSVBM SUIgKi8KLSAgICAgICAgeCA9IHJlYWQoaHR0cGZkLCZjLDEpOwotI2VuZGlmCS8qIFRDUElQTElC ICovCi0jZW5kaWYJLyogSFRUUF9CVUZGRVJJTkcgKi8KLQotICAgICAgICBpZiAoeCA8PSAwKSB7 Ci0gICAgICAgICAgICBpbnQgc19lcnJubyA9IHNvY2tldF9lcnJubzsKLSAgICAgICAgICAgIGRl YnVnKEYxMDEsInR0YnVmciBzb2NrZXRfcmVhZCIsIiIseCk7Ci0gICAgICAgICAgICBkZWJ1ZyhG MTAxLCJ0dGJ1ZnIgc29ja2V0X2Vycm5vIiwiIixzX2Vycm5vKTsKLSNpZmRlZiBPUzIKLSAgICAg ICAgICAgIGlmICh4ID09IDAgfHwgb3Myc29ja2V0ZXJyb3Ioc19lcnJubykgPCAwKSB7Ci0gICAg ICAgICAgICAgICAgaHR0cF9jbG9zZSgpOwotICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11 dGV4KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7Ci0gICAgICAgICAgICByZXR1cm4oLTEpOwotI2Vs c2UgLyogT1MyICovCi0gICAgICAgICAgICBodHRwX2Nsb3NlKCk7ICAgICAgICAgICAgICAgICAg ICAgIC8qICoqKiAqKiogKi8KLSAgICAgICAgICAgIHJldHVybigtMik7Ci0jZW5kaWYgLyogT1My ICovCi0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuKGMpOwotfQotCi12b2lkCi0jaWZkZWYgQ0tf QU5TSUMKLWh0dHBfc2V0X2NvZGVfcmVwbHkoY2hhciAqIG1zZykKLSNlbHNlCi1odHRwX3NldF9j b2RlX3JlcGx5KG1zZykKLSAgICBjaGFyICogbXNnOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17 Ci0gICAgY2hhciAqIHAgPSBtc2c7Ci0gICAgY2hhciBidWZbMTZdOwotICAgIGludCBpPTA7Ci0K LSAgICB3aGlsZSAoICpwICE9IFNQICYmICpwICE9IE5VTCApIHsKLSAgICAgICAgYnVmW2ldID0g KnA7Ci0gICAgICAgIHArKzsKLSAgICAgICAgaSsrOwotICAgIH0KLQotICAgIGh0dHBfY29kZSA9 IGF0b2koYnVmKTsKLQotICAgIHdoaWxlICggKnAgPT0gU1AgKQotICAgICAgICBwKys7Ci0KLSAg ICBja3N0cm5jcHkoaHR0cF9yZXBseV9zdHIscCxIVFRQQlVGTEVOKTsKLX0KLQotaW50Ci0jaWZk ZWYgQ0tfQU5TSUMKLWh0dHBfZ2V0KGNoYXIgKiBhZ2VudCwgY2hhciAqKiBoZHJsaXN0LCBjaGFy ICogdXNlciwKLSAgICAgICAgIGNoYXIgKiBwd2QsIGNoYXIgYXJyYXksIGNoYXIgKiBsb2NhbCwg Y2hhciAqIHJlbW90ZSwKLSAgICAgICAgIGludCBzdGRpbykKLSNlbHNlCi1odHRwX2dldChhZ2Vu dCwgaGRybGlzdCwgdXNlciwgcHdkLCBhcnJheSwgbG9jYWwsIHJlbW90ZSwgc3RkaW8pCi0gICAg Y2hhciAqIGFnZW50OyBjaGFyICoqIGhkcmxpc3Q7IGNoYXIgKiB1c2VyOwotICAgIGNoYXIgKiBw d2Q7IGNoYXIgYXJyYXk7IGNoYXIgKiBsb2NhbDsgY2hhciAqIHJlbW90ZTsKLSAgICBpbnQgc3Rk aW87Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBjaGFyICogcmVxdWVzdCA9IE5VTEw7 Ci0gICAgaW50ICAgIGksIGosIGxlbiA9IDAsIGhkY250ID0gMCwgcmMgPSAwOwotICAgIGludCAg ICBjaDsKLSAgICBpbnQgICAgaHR0cF9mbmQgPSAwOwotICAgIGNoYXIgICBidWZbSFRUUEJVRkxF Tl0sICpwOwotICAgIGludCAgICBudWxsbGluZTsKLSNpZmRlZiBPUzIKLSAgICBzdHJ1Y3QgdXRp bWJ1ZiB1X3Q7Ci0jZWxzZSAvKiBPUzIgKi8KLSNpZmRlZiBTWVNVVElNRUgKLSAgICBzdHJ1Y3Qg dXRpbWJ1ZiB1X3Q7Ci0jZWxzZQotICAgIHN0cnVjdCB1dGltYnVmIHsKLSAgICAgICAgdGltZV90 IGF0aW1lOwotICAgICAgICB0aW1lX3QgbXRpbWU7Ci0gICAgfSB1X3Q7Ci0jZW5kaWYgLyogU1lT VVRJTUggKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB0aW1lX3QgbW9kX3QgPSAwOwotICAgIHRp bWVfdCBzcnZfdCA9IDA7Ci0gICAgdGltZV90IGxvY2FsX3QgPSAwOwotICAgIGNoYXIgcGFzc3dk WzY0XTsKLSAgICBjaGFyIGI2NGluWzEyOF07Ci0gICAgY2hhciBiNjRvdXRbMjU2XTsKLSAgICBj aGFyICogaGVhZGVyc1tIVFRQSEVBRENOVF07Ci0gICAgaW50IGNsb3NlY29uID0gMDsKLSAgICBp bnQgY2h1bmtlZCA9IDA7Ci0gICAgaW50IHpmaWxlID0gMDsKLSAgICBpbnQgZmlyc3QgPSAxOwot Ci0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKSB7Ci0gICAgICAgIGRlYnVnKEYxMDEsImh0 dHBfZ2V0IGh0dHBmZCIsIiIsaHR0cGZkKTsKLSAgICAgICAgZGVidWcoRjExMCwiaHR0cF9hZ2Vu dCIsYWdlbnQsMCk7Ci0gICAgICAgIGRlYnVnKEYxMTAsImh0dHBfdXNlciIsdXNlciwwKTsKLSAg ICAgICAgZGVidWcoRjExMCwiaHR0cF9sb2NhbCIsbG9jYWwsMCk7Ci0gICAgICAgIGRlYnVnKEYx MTAsImh0dHBfcmVtb3RlIixyZW1vdGUsMCk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0g ICAgaWYgKCFyZW1vdGUpIHJlbW90ZSA9ICIiOwotCi0gICAgaWYgKGh0dHBmZCA9PSAtMSkKLSAg ICAgIHJldHVybigtMSk7Ci0KLSAgICBpZiAoYXJyYXkpIHsKLSAgICAgICAgZm9yIChpID0gMDsg aSA8IEhUVFBIRUFEQ05UOyBpKyspCi0gICAgICAgICAgaGVhZGVyc1tpXSA9IE5VTEw7Ci0gICAg fQotICAgIGxlbiA9IDg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdFVCAqLwotICAg IGxlbiArPSBzdHJsZW4oSFRUUF9WRVJTSU9OKTsKLSAgICBsZW4gKz0gc3RybGVuKHJlbW90ZSk7 Ci0gICAgbGVuICs9IDE2OwotCi0gICAgaWYgKGhkcmxpc3QpIHsKLSAgICAgICAgZm9yIChpID0g MDsgaGRybGlzdFtpXTsgaSsrKQotICAgICAgICAgICAgbGVuICs9IHN0cmxlbihoZHJsaXN0W2ld KSArIDI7Ci0gICAgfQotICAgIGxlbiArPSAoaW50KSBzdHJsZW4oaHR0cF9ob3N0X3BvcnQpICsg ODsKLQotICAgIGlmIChhZ2VudCkKLSAgICAgIGxlbiArPSAxMyArIHN0cmxlbihhZ2VudCk7Ci0g ICAgaWYgKHVzZXIpIHsKLSAgICAgICAgaWYgKCFwd2QpIHsKLSAgICAgICAgICAgIHJlYWRwYXNz KCJQYXNzd29yZDogIixwYXNzd2QsNjQpOwotICAgICAgICAgICAgcHdkID0gcGFzc3dkOwotICAg ICAgICB9Ci0gICAgICAgIGNrbWFrbXNnKGI2NGluLHNpemVvZihiNjRpbiksdXNlciwiOiIscHdk LE5VTEwpOwotICAgICAgICBqID0gYjh0b2I2NChiNjRpbixzdHJsZW4oYjY0aW4pLGI2NG91dCwy NTYpOwotICAgICAgICBtZW1zZXQocHdkLDAsc3RybGVuKHB3ZCkpOyAgICAgIC8qIE5PVCBQT1JU QUJMRSAqLwotICAgICAgICBpZiAoaiA8IDApCi0gICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAg ICAgYjY0b3V0W2pdID0gJ1wwJzsKLSAgICAgICAgbGVuICs9IGogKyAyNDsKLSAgICB9Ci0jaWZk ZWYgSFRUUF9DTE9TRQotICAgIGxlbiArPSAxOTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IENvbm5lY3Rpb246IGNsb3NlICovCi0jZW5kaWYKLSAgICBsZW4gKz0gMzsgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBibGFuayBsaW5lICsgbnVsbCAqLwotCi0gICAgcmVxdWVzdCA9IG1h bGxvYyhsZW4pOwotICAgIGlmICghcmVxdWVzdCkKLSAgICAgIHJldHVybigtMSk7Ci0KLSAgICBz cHJpbnRmKHJlcXVlc3QsIkdFVCAlcyAlc1xyXG4iLHJlbW90ZSxIVFRQX1ZFUlNJT04pOyAgICAg ICAvKiBzYWZlICovCi0gICAgY2tzdHJuY2F0KHJlcXVlc3QsIkhvc3Q6ICIsIGxlbik7Ci0gICAg Y2tzdHJuY2F0KHJlcXVlc3QsaHR0cF9ob3N0X3BvcnQsIGxlbik7Ci0gICAgY2tzdHJuY2F0KHJl cXVlc3QsIlxyXG4iLGxlbik7Ci0gICAgaWYgKGFnZW50KSB7Ci0gICAgICAgIGNrc3RybmNhdChy ZXF1ZXN0LCJVc2VyLWFnZW50OiAiLGxlbik7Ci0gICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LGFn ZW50LGxlbik7Ci0gICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixsZW4pOwotICAgIH0K LSAgICBpZiAodXNlcikgewotICAgICAgICBja3N0cm5jYXQocmVxdWVzdCwiQXV0aG9yaXphdGlv bjogQmFzaWMgIixsZW4pOwotICAgICAgICBja3N0cm5jYXQocmVxdWVzdCxiNjRvdXQsbGVuKTsK LSAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7Ci0gICAgfQotICAgIGlmICgg aGRybGlzdCApIHsKLSAgICAgICAgZm9yIChpID0gMDsgaGRybGlzdFtpXTsgaSsrKSB7Ci0gICAg ICAgICAgICBja3N0cm5jYXQocmVxdWVzdCxoZHJsaXN0W2ldLGxlbik7Ci0gICAgICAgICAgICBj a3N0cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVuKTsKLSAgICAgICAgfQotICAgIH0KLSNpZmRlZiBI VFRQX0NMT1NFCi0gICAgY2tzdHJuY2F0KHJlcXVlc3QsIkNvbm5lY3Rpb246IGNsb3NlXHJcbiIs bGVuKTsKLSNlbmRpZgotICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixsZW4pOwotCi0gIGdl dHJlcToKLSAgICBpZiAoaHR0cF90b2woKENIQVIgKilyZXF1ZXN0LHN0cmxlbihyZXF1ZXN0KSkg PCAwKQotICAgIHsKLSAgICAgICAgaHR0cF9jbG9zZSgpOwotICAgICAgICBpZiAoIGZpcnN0ICkg ewotICAgICAgICAgICAgZmlyc3QtLTsKLSAgICAgICAgICAgIGh0dHBfcmVvcGVuKCk7Ci0gICAg ICAgICAgICBnb3RvIGdldHJlcTsKLSAgICAgICAgfQotICAgICAgICByYyA9IC0xOwotICAgICAg ICBnb3RvIGdldGV4aXQ7Ci0gICAgfQotCi0gICAgLyogUHJvY2VzcyB0aGUgaGVhZGVycyAqLwot ICAgIGxvY2FsX3QgPSB0aW1lKE5VTEwpOwotICAgIG51bGxsaW5lID0gMDsKLSAgICBpID0gMDsK LSAgICBsZW4gPSAtMTsKLSAgICB3aGlsZSAoIW51bGxsaW5lICYmIChjaCA9IGh0dHBfaW5jKDAp KSA+PSAwICYmIGkgPCBIVFRQQlVGTEVOKSB7Ci0gICAgICAgIGJ1ZltpXSA9IGNoOwotICAgICAg ICBpZiAoIGJ1ZltpXSA9PSAxMCApIHsgLyogZm91bmQgZW5kIG9mIGxpbmUgKi8KLSAgICAgICAg ICAgIGlmIChpID4gMCAmJiBidWZbaS0xXSA9PSAxMykKLSAgICAgICAgICAgICAgaS0tOwotICAg ICAgICAgICAgaWYgKGkgPCAxKQotICAgICAgICAgICAgICBudWxsbGluZSA9IDE7Ci0gICAgICAg ICAgICBidWZbaV0gPSAnXDAnOwotICAgICAgICAgICAgaWYgKGFycmF5ICYmICFudWxsbGluZSAm JiBoZGNudCA8IEhUVFBIRUFEQ05UKQotICAgICAgICAgICAgICBtYWtlc3RyKCZoZWFkZXJzW2hk Y250KytdLGJ1Zik7Ci0gICAgICAgICAgICBpZiAoIWNrc3RyY21wKGJ1ZiwiSFRUUCIsNCwwKSkg ewotICAgICAgICAgICAgICAgIGh0dHBfZm5kID0gMTsKLSAgICAgICAgICAgICAgICBqID0gY2tp bmRleCgiICIsYnVmLDAsMCwwKTsKLSAgICAgICAgICAgICAgICBwID0gJmJ1ZltqXTsKLSAgICAg ICAgICAgICAgICB3aGlsZSAoIGlzc3BhY2UoKnApICkKLSAgICAgICAgICAgICAgICAgIHArKzsK LSAgICAgICAgICAgICAgICBzd2l0Y2ggKCBwWzBdICkgewotICAgICAgICAgICAgICAgICAgY2Fz ZSAnMSc6ICAgICAgICAgICAgIC8qIEluZm9ybWF0aW9uYWwgbWVzc2FnZSAqLwotICAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgJzInOiAgICAgICAgICAg ICAvKiBTdWNjZXNzICovCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICAgICAgY2FzZSAnMyc6ICAgICAgICAgICAgIC8qIFJlZGlyZWN0aW9uICovCi0gICAgICAgICAg ICAgICAgICBjYXNlICc0JzogICAgICAgICAgICAgLyogQ2xpZW50IGZhaWx1cmUgKi8KLSAgICAg ICAgICAgICAgICAgIGNhc2UgJzUnOiAgICAgICAgICAgICAvKiBTZXJ2ZXIgZmFpbHVyZSAqLwot ICAgICAgICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgIC8qIFVua25vd24gKi8KLSAg ICAgICAgICAgICAgICAgICAgaWYgKCFxdWlldCkKLSAgICAgICAgICAgICAgICAgICAgICBwcmlu dGYoIkZhaWx1cmU6IFNlcnZlciByZXBvcnRzICVzXG4iLHApOwotICAgICAgICAgICAgICAgICAg ICByYyA9IC0xOwotICAgICAgICAgICAgICAgICAgICBsb2NhbCA9IE5VTEw7Ci0gICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgIGh0dHBfc2V0X2NvZGVfcmVwbHkocCk7Ci0jaWZkZWYg Q01EQVRFMlRNCi0gICAgICAgICAgICB9IGVsc2UgaWYgKCFja3N0cmNtcChidWYsIkxhc3QtTW9k aWZpZWQiLDEzLDApKSB7Ci0gICAgICAgICAgICAgICAgbW9kX3QgPSBodHRwX2RhdGUoJmJ1Zlsx NV0pOwotICAgICAgICAgICAgfSBlbHNlIGlmICghY2tzdHJjbXAoYnVmLCJEYXRlIiw0LDApKSB7 Ci0gICAgICAgICAgICAgICAgc3J2X3QgPSBodHRwX2RhdGUoJmJ1Zls0XSk7Ci0jZW5kaWYgLyog Q01EQVRFMlRNICovCi0gICAgICAgICAgICB9IGVsc2UgaWYgKCFja3N0cmNtcChidWYsIkNvbm5l Y3Rpb246IiwxMSwwKSkgewotICAgICAgICAgICAgICAgIGlmICggY2tpbmRleCgiY2xvc2UiLGJ1 ZiwxMSwwLDApICE9IDAgKQotICAgICAgICAgICAgICAgICAgICBjbG9zZWNvbiA9IDE7Ci0gICAg ICAgICAgICB9IGVsc2UgaWYgKCFja3N0cmNtcChidWYsIkNvbnRlbnQtTGVuZ3RoOiIsMTUsMCkp IHsKLSAgICAgICAgICAgICAgICBsZW4gPSBhdG9pKCZidWZbMTZdKTsKLSAgICAgICAgICAgIH0g ZWxzZSBpZiAoIWNrc3RyY21wKGJ1ZiwiVHJhbnNmZXItRW5jb2Rpbmc6IiwxOCwwKSkgewotICAg ICAgICAgICAgICAgIGlmICggY2tpbmRleCgiY2h1bmtlZCIsYnVmLDE4LDAsMCkgIT0gMCApCi0g ICAgICAgICAgICAgICAgICAgIGNodW5rZWQgPSAxOwotCQlkZWJ1ZyhGMTAxLCJodHRwX2dldCBj aHVua2VkIiwiIixjaHVua2VkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGkgPSAwOwot ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaSsrOwotICAgICAgICB9Ci0gICAgfQotICAg IGlmIChjaCA8IDAgJiYgZmlyc3QpIHsKLSAgICAgICAgZmlyc3QtLTsKLSAgICAgICAgaHR0cF9j bG9zZSgpOwotICAgICAgICBodHRwX3Jlb3BlbigpOwotICAgICAgICBnb3RvIGdldHJlcTsKLSAg ICB9Ci0gICAgaWYgKGh0dHBfZm5kID09IDApIHsKLSAgICAgICAgcmMgPSAtMTsKLSAgICAgICAg Y2xvc2Vjb24gPSAxOwotICAgICAgICBnb3RvIGdldGV4aXQ7Ci0gICAgfQotCi0gICAgLyogTm93 IHdlIGhhdmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlICovCi0gICAgaWYgKCBsb2NhbCAmJiBs b2NhbFswXSApIHsKLSAgICAgICAgaWYgKHpvcGVubyhaT0ZJTEUsbG9jYWwsTlVMTCxOVUxMKSkK LSAgICAgICAgICAgIHpmaWxlID0gMTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmMgPSAt MTsKLSAgICB9Ci0KLSAgICBpZiAoIGNodW5rZWQgKSB7Ci0gICAgICAgIHdoaWxlICgobGVuID0g aHR0cF9nZXRfY2h1bmtfbGVuKCkpID4gMCkgewotICAgICAgICAgICAgd2hpbGUgKGxlbiAmJiAo Y2ggPSBodHRwX2luYygwKSkgPj0gMCkgewotICAgICAgICAgICAgICAgIGxlbi0tOwotICAgICAg ICAgICAgICAgIGlmICggemZpbGUgKQotICAgICAgICAgICAgICAgICAgICB6Y2hvdXQoWk9GSUxF LChDSEFSKWNoKTsKLSAgICAgICAgICAgICAgICBpZiAoIHN0ZGlvICkKLSAgICAgICAgICAgICAg ICAgICAgY29ub2MoKENIQVIpY2gpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChj aCA9IGh0dHBfaW5jKDApKSAhPSBDUikKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgIGlmICgoY2ggPSBodHRwX2luYygwKSkgIT0gTEYpCi0gICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICB3aGlsZSAobGVuICYmIChjaCA9IGh0 dHBfaW5jKDApKSA+PSAwKSB7Ci0gICAgICAgICAgICBsZW4tLTsKLSAgICAgICAgICAgIGlmICgg emZpbGUgKQotICAgICAgICAgICAgICAgIHpjaG91dChaT0ZJTEUsKENIQVIpY2gpOwotICAgICAg ICAgICAgaWYgKCBzdGRpbyApCi0gICAgICAgICAgICAgICAgY29ub2MoKENIQVIpY2gpOwotICAg ICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCB6ZmlsZSApCi0gICAgICAgIHpjbG9zZShaT0ZJTEUp OwotCi0gICAgaWYgKCBjaHVua2VkICkgeyAgICAgICAgICAgIC8qIFBhcnNlIFRyYWlsaW5nIEhl YWRlcnMgKi8KLSAgICAgICAgbnVsbGxpbmUgPSAwOwotICAgICAgICB3aGlsZSAoIW51bGxsaW5l ICYmIChjaCA9IGh0dHBfaW5jKDApKSA+PSAwICYmIGkgPCBIVFRQQlVGTEVOKSB7Ci0gICAgICAg ICAgICBidWZbaV0gPSBjaDsKLSAgICAgICAgICAgIGlmICggYnVmW2ldID09IDEwICkgeyAvKiBm b3VuZCBlbmQgb2YgbGluZSAqLwotICAgICAgICAgICAgICAgIGlmIChpID4gMCAmJiBidWZbaS0x XSA9PSAxMykKLSAgICAgICAgICAgICAgICAgIGktLTsKLSAgICAgICAgICAgICAgICBpZiAoaSA8 IDEpCi0gICAgICAgICAgICAgICAgICBudWxsbGluZSA9IDE7Ci0gICAgICAgICAgICAgICAgYnVm W2ldID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBpZiAoYXJyYXkgJiYgIW51bGxsaW5lICYmIGhk Y250IDwgSFRUUEhFQURDTlQpCi0gICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmhlYWRlcnNb aGRjbnQrK10sYnVmKTsKLSNpZmRlZiBDTURBVEUyVE0KLSAgICAgICAgICAgICAgICBpZiAoIWNr c3RyY21wKGJ1ZiwiTGFzdC1Nb2RpZmllZCIsMTMsMCkpIHsKLSAgICAgICAgICAgICAgICAgICAg bW9kX3QgPSBodHRwX2RhdGUoJmJ1ZlsxNV0pOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo IWNrc3RyY21wKGJ1ZiwiRGF0ZSIsNCwwKSkgewotICAgICAgICAgICAgICAgICAgICBzcnZfdCA9 IGh0dHBfZGF0ZSgmYnVmWzRdKTsKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ01EQVRF MlRNICovCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWNrc3RyY21wKGJ1ZiwiQ29ubmVjdGlv bjoiLDExLDApKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggY2tpbmRleCgiY2xvc2UiLGJ1 ZiwxMSwwLDApICE9IDAgKQotICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2Vjb24gPSAxOwot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpID0gMDsKLSAgICAgICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g ICAgfQotCi0gICAgaWYgKCB6ZmlsZSApIHsgICAgICAgICAgICAgIC8qIFNldCB0aW1lc3RhbXAg Ki8KLSNpZm5kZWYgTk9TRVRUSU1FCi0jaWZkZWYgT1MyCi0gICAgICAgIHVfdC5hY3RpbWUgPSBz cnZfdCA/IHNydl90IDogbG9jYWxfdDsKLSAgICAgICAgdV90Lm1vZHRpbWUgPSBtb2RfdCA/IG1v ZF90IDogbG9jYWxfdDsKLSNlbHNlIC8qIE9TMiAqLwotI2lmZGVmIFNZU1VUSU1FSAotICAgICAg ICB1X3QuYWN0aW1lID0gc3J2X3QgPyBzcnZfdCA6IGxvY2FsX3Q7Ci0gICAgICAgIHVfdC5tb2R0 aW1lID0gbW9kX3QgPyBtb2RfdCA6IGxvY2FsX3Q7Ci0jZWxzZQotI2lmZGVmIEJTRDQ0Ci0gICAg ICAgIHVfdFswXS50dl9zZWMgPSBzcnZfdCA/IHNydl90IDogbG9jYWxfdDsKLSAgICAgICAgdV90 WzFdLnR2X3NlYyA9IG1vZF90ID8gbW9kX3QgOiBsb2NhbF90OwotI2Vsc2UKLSAgICAgICAgdV90 Lm10aW1lID0gc3J2X3QgPyBzcnZfdCA6IGxvY2FsX3Q7Ci0gICAgICAgIHVfdC5hdGltZSA9IG1v ZF90ID8gbW9kX3QgOiBsb2NhbF90OwotI2VuZGlmIC8qIEJTRDQ0ICovCi0jZW5kaWYgLyogU1lT VVRJTUVIICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICB1dGltZShsb2NhbCwmdV90 KTsKLSNlbmRpZiAvKiBOT1NFVFRJTUUgKi8KLSAgICB9Ci0KLSAgZ2V0ZXhpdDoKLSAgICBpZiAo YXJyYXkpCi0gICAgICBodHRwX21rYXJyYXkoaGVhZGVycyxoZGNudCxhcnJheSk7Ci0KLSAgICBp ZiAoIGNsb3NlY29uICkKLSAgICAgICAgaHR0cF9jbG9zZSgpOwotICAgIGZyZWUocmVxdWVzdCk7 Ci0gICAgZm9yIChpID0gMDsgaSA8IGhkY250OyBpKyspIHsKLSAgICAgICAgaWYgKGhlYWRlcnNb aV0pCi0gICAgICAgICAgZnJlZShoZWFkZXJzW2ldKTsKLSAgICB9Ci0gICAgcmV0dXJuKHJjKTsK LX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWh0dHBfaGVhZChjaGFyICogYWdlbnQsIGNoYXIg KiogaGRybGlzdCwgY2hhciAqIHVzZXIsCi0gICAgICAgICAgY2hhciAqIHB3ZCwgY2hhciBhcnJh eSwgY2hhciAqIGxvY2FsLCBjaGFyICogcmVtb3RlLAotICAgICAgICAgIGludCBzdGRpbykKLSNl bHNlCi1odHRwX2hlYWQoYWdlbnQsIGhkcmxpc3QsIHVzZXIsIHB3ZCwgYXJyYXksIGxvY2FsLCBy ZW1vdGUsIHN0ZGlvKQotICAgIGNoYXIgKiBhZ2VudDsgY2hhciAqKiBoZHJsaXN0OyBjaGFyICog dXNlcjsKLSAgICBjaGFyICogcHdkOyBjaGFyIGFycmF5OyBjaGFyICogbG9jYWw7IGNoYXIgKiBy ZW1vdGU7Ci0gICAgaW50IHN0ZGlvOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgY2hh ciAqIHJlcXVlc3QgPSBOVUxMOwotICAgIGludCAgICBpLCBqLCBsZW4gPSAwLCBoZGNudCA9IDAs IHJjID0gMDsKLSAgICBpbnQgICAgY2g7Ci0gICAgaW50ICAgIGh0dHBfZm5kID0gMDsKLSAgICBj aGFyICAgYnVmW0hUVFBCVUZMRU5dLCAqcDsKLSAgICBpbnQgICAgbnVsbGxpbmU7Ci0gICAgdGlt ZV90IG1vZF90OwotICAgIHRpbWVfdCBzcnZfdDsKLSAgICB0aW1lX3QgbG9jYWxfdDsKLSAgICBj aGFyIHBhc3N3ZFs2NF07Ci0gICAgY2hhciBiNjRpblsxMjhdOwotICAgIGNoYXIgYjY0b3V0WzI1 Nl07Ci0gICAgY2hhciAqIGhlYWRlcnNbSFRUUEhFQURDTlRdOwotICAgIGludCAgY2xvc2Vjb24g PSAwOwotICAgIGludCAgZmlyc3QgPSAxOwotCi0gICAgaWYgKGh0dHBmZCA9PSAtMSkKLSAgICAg IHJldHVybigtMSk7Ci0KLSAgICBpZiAoYXJyYXkpIHsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8 IEhUVFBIRUFEQ05UOyBpKyspCi0gICAgICAgICAgaGVhZGVyc1tpXSA9IE5VTEw7Ci0gICAgfQot ICAgIGxlbiA9IDk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhFQUQgKi8KLSAgICBs ZW4gKz0gc3RybGVuKEhUVFBfVkVSU0lPTik7Ci0gICAgbGVuICs9IHN0cmxlbihyZW1vdGUpOwot ICAgIGxlbiArPSAxNjsKLQotICAgIGlmICggaGRybGlzdCApIHsKLSAgICAgICAgZm9yIChpID0g MDsgaGRybGlzdFtpXTsgaSsrKQotICAgICAgICAgICAgbGVuICs9IHN0cmxlbihoZHJsaXN0W2ld KSArIDI7Ci0gICAgfQotICAgIGxlbiArPSBzdHJsZW4oaHR0cF9ob3N0X3BvcnQpICsgODsKLQot ICAgIGlmIChhZ2VudCkKLSAgICAgIGxlbiArPSAxMyArIHN0cmxlbihhZ2VudCk7Ci0gICAgaWYg KHVzZXIpIHsKLSAgICAgICAgaWYgKCFwd2QpIHsKLSAgICAgICAgICAgIHJlYWRwYXNzKCJQYXNz d29yZDogIixwYXNzd2QsNjQpOwotICAgICAgICAgICAgcHdkID0gcGFzc3dkOwotICAgICAgICB9 Ci0gICAgICAgIGNrbWFrbXNnKGI2NGluLHNpemVvZihiNjRpbiksdXNlciwiOiIscHdkLE5VTEwp OwotICAgICAgICBqID0gYjh0b2I2NChiNjRpbixzdHJsZW4oYjY0aW4pLGI2NG91dCwyNTYpOwot ICAgICAgICBtZW1zZXQocHdkLDAsc3RybGVuKHB3ZCkpOyAgICAgIC8qIE5PVCBQT1JUQUJMRSAq LwotICAgICAgICBpZiAoaiA8IDApCi0gICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgYjY0 b3V0W2pdID0gJ1wwJzsKLSAgICAgICAgbGVuICs9IGogKyAyNDsKLSAgICB9Ci0jaWZkZWYgSFRU UF9DTE9TRQotICAgIGxlbiArPSAxOTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbm5l Y3Rpb246IGNsb3NlICovCi0jZW5kaWYKLSAgICBsZW4gKz0gMzsgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBibGFuayBsaW5lICsgbnVsbCAqLwotCi0gICAgcmVxdWVzdCA9IChjaGFyICop bWFsbG9jKGxlbik7Ci0gICAgaWYgKCFyZXF1ZXN0KQotICAgICAgcmV0dXJuKC0xKTsKLQotICAg IHNwcmludGYocmVxdWVzdCwiSEVBRCAlcyAlc1xyXG4iLHJlbW90ZSxIVFRQX1ZFUlNJT04pOwot ICAgIGNrc3RybmNhdChyZXF1ZXN0LCJIb3N0OiAiLCBsZW4pOwotICAgIGNrc3RybmNhdChyZXF1 ZXN0LGh0dHBfaG9zdF9wb3J0LCBsZW4pOwotICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixs ZW4pOwotICAgIGlmIChhZ2VudCkgewotICAgICAgICBja3N0cm5jYXQocmVxdWVzdCwiVXNlci1h Z2VudDogIixsZW4pOwotICAgICAgICBja3N0cm5jYXQocmVxdWVzdCxhZ2VudCxsZW4pOwotICAg ICAgICBja3N0cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVuKTsKLSAgICB9Ci0gICAgaWYgKHVzZXIp IHsKLSAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsIkF1dGhvcml6YXRpb246IEJhc2ljICIsbGVu KTsKLSAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsYjY0b3V0LGxlbik7Ci0gICAgICAgIGNrc3Ry bmNhdChyZXF1ZXN0LCJcclxuIixsZW4pOwotICAgIH0KLSAgICBpZiAoIGhkcmxpc3QgKSB7Ci0g ICAgICAgIGZvciAoaSA9IDA7IGhkcmxpc3RbaV07IGkrKykgewotICAgICAgICAgICAgY2tzdHJu Y2F0KHJlcXVlc3QsaGRybGlzdFtpXSxsZW4pOwotICAgICAgICAgICAgY2tzdHJuY2F0KHJlcXVl c3QsIlxyXG4iLGxlbik7Ci0gICAgICAgIH0KLSAgICB9Ci0jaWZkZWYgSFRUUF9DTE9TRQotICAg IGNrc3RybmNhdChyZXF1ZXN0LCJDb25uZWN0aW9uOiBjbG9zZVxyXG4iLGxlbik7Ci0jZW5kaWYK LSAgICBja3N0cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVuKTsKLQotICAgIGlmICggbG9jYWwgJiYg bG9jYWxbMF0gKSB7Ci0gICAgICAgIGlmICghem9wZW5vKFpPRklMRSxsb2NhbCxOVUxMLE5VTEwp KSB7Ci0gICAgICAgICAgICBmcmVlKHJlcXVlc3QpOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsK LSAgICAgICAgfQotICAgIH0KLQotICBoZWFkcmVxOgotICAgIGlmIChodHRwX3RvbCgoQ0hBUiAq KXJlcXVlc3Qsc3RybGVuKHJlcXVlc3QpKSA8IDApCi0gICAgewotICAgICAgICBodHRwX2Nsb3Nl KCk7Ci0gICAgICAgIGlmICggZmlyc3QgKSB7Ci0gICAgICAgICAgICBmaXJzdC0tOwotICAgICAg ICAgICAgaHR0cF9yZW9wZW4oKTsKLSAgICAgICAgICAgIGdvdG8gaGVhZHJlcTsKLSAgICAgICAg fQotICAgICAgICByYyA9IC0xOwotICAgICAgICBnb3RvIGhlYWRleGl0OwotICAgIH0KLQotICAg IC8qIFByb2Nlc3MgdGhlIGhlYWRlcnMgKi8KLQotICAgIGxvY2FsX3QgPSB0aW1lKE5VTEwpOwot ICAgIG51bGxsaW5lID0gMDsKLSAgICBpID0gMDsKLSAgICB3aGlsZSAoIW51bGxsaW5lICYmIChj aCA9IGh0dHBfaW5jKDApKSA+PSAwICYmIGkgPCBIVFRQQlVGTEVOKSB7Ci0gICAgICAgIGJ1Zltp XSA9IGNoOwotICAgICAgICBpZiAoYnVmW2ldID09IDEwKSB7ICAgICAgICAgICAgIC8qIGZvdW5k IGVuZCBvZiBsaW5lICovCi0gICAgICAgICAgICBpZiAoaSA+IDAgJiYgYnVmW2ktMV0gPT0gMTMp Ci0gICAgICAgICAgICAgIGktLTsKLSAgICAgICAgICAgIGlmIChpIDwgMSkKLSAgICAgICAgICAg ICAgbnVsbGxpbmUgPSAxOwotICAgICAgICAgICAgYnVmW2ldID0gJ1wwJzsKLSAgICAgICAgICAg IGlmIChhcnJheSAmJiAhbnVsbGxpbmUgJiYgaGRjbnQgPCBIVFRQSEVBRENOVCkKLSAgICAgICAg ICAgICAgbWFrZXN0cigmaGVhZGVyc1toZGNudCsrXSxidWYpOwotICAgICAgICAgICAgaWYgKCFj a3N0cmNtcChidWYsIkhUVFAiLDQsMCkpIHsKLSAgICAgICAgICAgICAgICBodHRwX2ZuZCA9IDE7 Ci0gICAgICAgICAgICAgICAgaiA9IGNraW5kZXgoIiAiLGJ1ZiwwLDAsMCk7Ci0gICAgICAgICAg ICAgICAgcCA9ICZidWZbal07Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGlzc3BhY2UoKnApKQot ICAgICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgICAgIHN3aXRjaCAocFswXSkgewot ICAgICAgICAgICAgICAgICAgY2FzZSAnMSc6ICAgICAgICAgICAgIC8qIEluZm9ybWF0aW9uYWwg bWVzc2FnZSAqLwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg IGNhc2UgJzInOiAgICAgICAgICAgICAvKiBTdWNjZXNzICovCi0gICAgICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSAnMyc6ICAgICAgICAgICAgIC8qIFJlZGly ZWN0aW9uICovCi0gICAgICAgICAgICAgICAgICBjYXNlICc0JzogICAgICAgICAgICAgLyogQ2xp ZW50IGZhaWx1cmUgKi8KLSAgICAgICAgICAgICAgICAgIGNhc2UgJzUnOiAgICAgICAgICAgICAv KiBTZXJ2ZXIgZmFpbHVyZSAqLwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAg ICAgIC8qIFVua25vd24gKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFxdWlldCkKLSAgICAg ICAgICAgICAgICAgICAgICBwcmludGYoIkZhaWx1cmU6IFNlcnZlciByZXBvcnRzICVzXG4iLHAp OwotICAgICAgICAgICAgICAgICAgICByYyA9IC0xOwotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICBodHRwX3NldF9jb2RlX3JlcGx5KHApOwotICAgICAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgICAgICBpZiAoIWNrc3RyY21wKGJ1ZiwiQ29ubmVjdGlvbjoiLDExLDApKSB7 Ci0gICAgICAgICAgICAgICAgICAgIGlmICggY2tpbmRleCgiY2xvc2UiLGJ1ZiwxMSwwLDApICE9 IDAgKQotICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2Vjb24gPSAxOwotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIGxvY2FsICYmIGxvY2FsWzBdICkgewotICAgICAg ICAgICAgICAgICAgICB6c291dChaT0ZJTEUsYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgenNv dXQoWk9GSUxFLCJcclxuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlm IChzdGRpbykKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlc1xyXG4iLGJ1Zik7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBpID0gMDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgIGkrKzsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoY2ggPCAwICYmIGZpcnN0KSB7Ci0g ICAgICAgIGZpcnN0LS07Ci0gICAgICAgIGh0dHBfY2xvc2UoKTsKLSAgICAgICAgaHR0cF9yZW9w ZW4oKTsKLSAgICAgICAgZ290byBoZWFkcmVxOwotICAgIH0KLSAgICBpZiAoIGh0dHBfZm5kID09 IDAgKQotICAgICAgICByYyA9IC0xOwotCi0gICAgaWYgKGFycmF5KQotICAgICAgaHR0cF9ta2Fy cmF5KGhlYWRlcnMsaGRjbnQsYXJyYXkpOwotCi0gIGhlYWRleGl0OgotICAgIGlmICggbG9jYWwg JiYgbG9jYWxbMF0gKQotICAgICAgICB6Y2xvc2UoWk9GSUxFKTsKLSAgICBpZiAoY2xvc2Vjb24p Ci0gICAgICAgIGh0dHBfY2xvc2UoKTsKLSAgICBmcmVlKHJlcXVlc3QpOwotICAgIGZvciAoaSA9 IDA7IGkgPCBoZGNudDsgaSsrKSB7Ci0gICAgICAgIGlmIChoZWFkZXJzW2ldKQotICAgICAgICAg IGZyZWUoaGVhZGVyc1tpXSk7Ci0gICAgfQotICAgIHJldHVybihyYyk7Ci19Ci0KLWludAotI2lm ZGVmIENLX0FOU0lDCi1odHRwX2luZGV4KGNoYXIgKiBhZ2VudCwgY2hhciAqKiBoZHJsaXN0LCBj aGFyICogdXNlciwgY2hhciAqIHB3ZCwKLSAgICAgICAgICAgICBjaGFyIGFycmF5LCBjaGFyICog bG9jYWwsIGNoYXIgKiByZW1vdGUsIGludCBzdGRpbykKLSNlbHNlCi1odHRwX2luZGV4KGFnZW50 LCBoZHJsaXN0LCB1c2VyLCBwd2QsIGFycmF5LCBsb2NhbCwgcmVtb3RlLCBzdGRpbykKLSAgICBj aGFyICogYWdlbnQ7IGNoYXIgKiogaGRybGlzdDsgY2hhciAqIHVzZXI7IGNoYXIgKiBwd2Q7Ci0g ICAgY2hhciBhcnJheTsgY2hhciAqIGxvY2FsOyBjaGFyICogcmVtb3RlOyBpbnQgc3RkaW87Ci0j ZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBjaGFyICogcmVxdWVzdCA9IE5VTEw7Ci0gICAg aW50ICAgIGksIGosIGxlbiA9IDAsIGhkY250ID0gMCwgcmMgPSAwOwotICAgIGludCAgICBjaDsK LSAgICBpbnQgICAgaHR0cF9mbmQgPSAwOwotICAgIGNoYXIgICBidWZbSFRUUEJVRkxFTl0sICpw OwotICAgIGludCAgICBudWxsbGluZTsKLSAgICB0aW1lX3QgbW9kX3Q7Ci0gICAgdGltZV90IHNy dl90OwotICAgIHRpbWVfdCBsb2NhbF90OwotICAgIGNoYXIgcGFzc3dkWzY0XTsKLSAgICBjaGFy IGI2NGluWzEyOF07Ci0gICAgY2hhciBiNjRvdXRbMjU2XTsKLSAgICBjaGFyICogaGVhZGVyc1tI VFRQSEVBRENOVF07Ci0gICAgaW50ICBjbG9zZWNvbiA9IDA7Ci0gICAgaW50ICBjaHVua2VkID0g MDsKLSAgICBpbnQgIHpmaWxlID0gMDsKLSAgICBpbnQgIGZpcnN0ID0gMTsKLQotICAgIGlmICho dHRwZmQgPT0gLTEpCi0gICAgICByZXR1cm4oLTEpOwotCi0gICAgaWYgKGFycmF5KSB7Ci0gICAg ICAgIGZvciAoaSA9IDA7IGkgPCBIVFRQSEVBRENOVDsgaSsrKQotICAgICAgICAgIGhlYWRlcnNb aV0gPSBOVUxMOwotICAgIH0KLSAgICBsZW4gPSAxMDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogSU5ERVggKi8KLSAgICBsZW4gKz0gc3RybGVuKEhUVFBfVkVSU0lPTik7Ci0gICAgbGVu ICs9IHN0cmxlbihyZW1vdGUpOwotICAgIGxlbiArPSAxNjsKLQotICAgIGlmICggaGRybGlzdCAp IHsKLSAgICAgICAgZm9yIChpID0gMDsgaGRybGlzdFtpXTsgaSsrKQotICAgICAgICAgICAgbGVu ICs9IHN0cmxlbihoZHJsaXN0W2ldKSArIDI7Ci0gICAgfQotICAgIGxlbiArPSBzdHJsZW4oaHR0 cF9ob3N0X3BvcnQpICsgODsKLQotICAgIGlmIChhZ2VudCkKLSAgICAgICAgbGVuICs9IDEzICsg c3RybGVuKGFnZW50KTsKLSAgICBpZiAodXNlcikgewotICAgICAgICBpZiAoIXB3ZCkgewotICAg ICAgICAgICAgcmVhZHBhc3MoIlBhc3N3b3JkOiAiLHBhc3N3ZCw2NCk7Ci0gICAgICAgICAgICBw d2QgPSBwYXNzd2Q7Ci0gICAgICAgIH0KLSAgICAgICAgY2ttYWttc2coYjY0aW4sc2l6ZW9mKGI2 NGluKSx1c2VyLCI6Iixwd2QsTlVMTCk7Ci0gICAgICAgIGogPSBiOHRvYjY0KGI2NGluLHN0cmxl bihiNjRpbiksYjY0b3V0LDI1Nik7Ci0gICAgICAgIG1lbXNldChwd2QsMCxzdHJsZW4ocHdkKSk7 Ci0gICAgICAgIGlmIChqIDwgMCkKLSAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICBiNjRv dXRbal0gPSAnXDAnOwotICAgICAgICBsZW4gKz0gaiArIDI0OwotICAgIH0KLSNpZmRlZiBIVFRQ X0NMT1NFCi0gICAgbGVuICs9IDE5OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29ubmVj dGlvbjogY2xvc2UgKi8KLSNlbmRpZgotICAgIGxlbiArPSAzOyAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIGJsYW5rIGxpbmUgKyBudWxsICovCi0KLSAgICByZXF1ZXN0ID0gbWFsbG9jKGxl bik7Ci0gICAgaWYgKCFyZXF1ZXN0KQotICAgICAgcmV0dXJuKC0xKTsKLQotICAgIHNwcmludGYo cmVxdWVzdCwiSU5ERVggJXNcclxuIixIVFRQX1ZFUlNJT04pOwotICAgIGNrc3RybmNhdChyZXF1 ZXN0LCJIb3N0OiAiLCBsZW4pOwotICAgIGNrc3RybmNhdChyZXF1ZXN0LGh0dHBfaG9zdF9wb3J0 LCBsZW4pOwotICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixsZW4pOwotICAgIGlmIChhZ2Vu dCkgewotICAgICAgICBja3N0cm5jYXQocmVxdWVzdCwiVXNlci1hZ2VudDogIixsZW4pOwotICAg ICAgICBja3N0cm5jYXQocmVxdWVzdCxhZ2VudCxsZW4pOwotICAgICAgICBja3N0cm5jYXQocmVx dWVzdCwiXHJcbiIsbGVuKTsKLSAgICB9Ci0gICAgaWYgKHVzZXIpIHsKLSAgICAgICAgY2tzdHJu Y2F0KHJlcXVlc3QsIkF1dGhvcml6YXRpb246IEJhc2ljICIsbGVuKTsKLSAgICAgICAgY2tzdHJu Y2F0KHJlcXVlc3QsYjY0b3V0LGxlbik7Ci0gICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxu IixsZW4pOwotICAgIH0KLSAgICBpZiAoIGhkcmxpc3QgKSB7Ci0gICAgICAgIGZvciAoaSA9IDA7 IGhkcmxpc3RbaV07IGkrKykgewotICAgICAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsaGRybGlz dFtpXSxsZW4pOwotICAgICAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7Ci0g ICAgICAgIH0KLSAgICB9Ci0jaWZkZWYgSFRUUF9DTE9TRQotICAgIGNrc3RybmNhdChyZXF1ZXN0 LCJDb25uZWN0aW9uOiBjbG9zZVxyXG4iLGxlbik7Ci0jZW5kaWYKLSAgICBja3N0cm5jYXQocmVx dWVzdCwiXHJcbiIsbGVuKTsKLSAgaW5kZXhyZXE6Ci0gICAgaWYgKGh0dHBfdG9sKChDSEFSICop cmVxdWVzdCxzdHJsZW4ocmVxdWVzdCkpIDwgMCkKLSAgICB7Ci0gICAgICAgIGh0dHBfY2xvc2Uo KTsKLSAgICAgICAgaWYgKCBmaXJzdCApIHsKLSAgICAgICAgICAgIGZpcnN0LS07Ci0gICAgICAg ICAgICBodHRwX3Jlb3BlbigpOwotICAgICAgICAgICAgZ290byBpbmRleHJlcTsKLSAgICAgICAg fQotICAgICAgICByYyA9IC0xOwotICAgICAgICBnb3RvIGluZGV4ZXhpdDsKLSAgICB9Ci0KLSAg ICAvKiBQcm9jZXNzIHRoZSBoZWFkZXJzICovCi0gICAgbG9jYWxfdCA9IHRpbWUoTlVMTCk7Ci0g ICAgbnVsbGxpbmUgPSAwOwotICAgIGkgPSAwOwotICAgIGxlbiA9IC0xOwotICAgIHdoaWxlICgh bnVsbGxpbmUgJiYgKGNoID0gaHR0cF9pbmMoMCkpID49IDAgJiYgaSA8IEhUVFBCVUZMRU4pIHsK LSAgICAgICAgYnVmW2ldID0gY2g7Ci0gICAgICAgIGlmIChidWZbaV0gPT0gMTApIHsgICAgICAg ICAgICAgLyogZm91bmQgZW5kIG9mIGxpbmUgKi8KLSAgICAgICAgICAgIGlmIChpID4gMCAmJiBi dWZbaS0xXSA9PSAxMykKLSAgICAgICAgICAgICAgaS0tOwotICAgICAgICAgICAgaWYgKGkgPCAx KQotICAgICAgICAgICAgICBudWxsbGluZSA9IDE7Ci0gICAgICAgICAgICBidWZbaV0gPSAnXDAn OwotICAgICAgICAgICAgaWYgKGFycmF5ICYmICFudWxsbGluZSAmJiBoZGNudCA8IEhUVFBIRUFE Q05UKQotICAgICAgICAgICAgICBtYWtlc3RyKCZoZWFkZXJzW2hkY250KytdLGJ1Zik7Ci0gICAg ICAgICAgICBpZiAoIWNrc3RyY21wKGJ1ZiwiSFRUUCIsNCwwKSkgewotICAgICAgICAgICAgICAg IGh0dHBfZm5kID0gMTsKLSAgICAgICAgICAgICAgICBqID0gY2tpbmRleCgiICIsYnVmLDAsMCww KTsKLSAgICAgICAgICAgICAgICBwID0gJmJ1ZltqXTsKLSAgICAgICAgICAgICAgICB3aGlsZSAo aXNzcGFjZSgqcCkpCi0gICAgICAgICAgICAgICAgICBwKys7Ci0gICAgICAgICAgICAgICAgc3dp dGNoICggcFswXSApIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgJzEnOiAgICAgICAgICAgICAv KiBJbmZvcm1hdGlvbmFsIG1lc3NhZ2UgKi8KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICAgICAgICBjYXNlICcyJzogICAgICAgICAgICAgLyogU3VjY2VzcyAqLwotICAg ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgJzMnOiAgICAg ICAgICAgICAvKiBSZWRpcmVjdGlvbiAqLwotICAgICAgICAgICAgICAgICAgY2FzZSAnNCc6ICAg ICAgICAgICAgIC8qIENsaWVudCBmYWlsdXJlICovCi0gICAgICAgICAgICAgICAgICBjYXNlICc1 JzogICAgICAgICAgICAgLyogU2VydmVyIGZhaWx1cmUgKi8KLSAgICAgICAgICAgICAgICAgIGRl ZmF1bHQ6ICAgICAgICAgICAgICAvKiBVbmtub3duICovCi0gICAgICAgICAgICAgICAgICAgIGlm ICghcXVpZXQpCi0gICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJGYWlsdXJlOiBTZXJ2ZXIg cmVwb3J0cyAlc1xuIixwKTsKLSAgICAgICAgICAgICAgICAgICAgcmMgPSAtMTsKLSAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaHR0cF9zZXRfY29kZV9yZXBseShwKTsKLSAgICAg ICAgICAgIH0gZWxzZSBpZiAoICFudWxsbGluZSApIHsKLSAgICAgICAgICAgICAgICBpZiAoIWNr c3RyY21wKGJ1ZiwiQ29ubmVjdGlvbjoiLDExLDApKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm ICggY2tpbmRleCgiY2xvc2UiLGJ1ZiwxMSwwLDApICE9IDAgKQotICAgICAgICAgICAgICAgICAg ICAgICAgY2xvc2Vjb24gPSAxOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNrc3RyY21w KGJ1ZiwiQ29udGVudC1MZW5ndGg6IiwxNSwwKSkgewotICAgICAgICAgICAgICAgICAgICBsZW4g PSBhdG9pKCZidWZbMTZdKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFja3N0cmNtcChi dWYsIlRyYW5zZmVyLUVuY29kaW5nOiIsMTgsMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg KCBja2luZGV4KCJjaHVua2VkIixidWYsMTgsMCwwKSAhPSAwICkKLSAgICAgICAgICAgICAgICAg ICAgICAgIGNodW5rZWQgPSAxOwotCQkgICAgZGVidWcoRjEwMSwiaHR0cF9pbmRleCBjaHVua2Vk IiwiIixjaHVua2VkKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcHJpbnRm KCIlc1xuIixidWYpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaSA9IDA7Ci0gICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICBpKys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo Y2ggPCAwICYmIGZpcnN0KSB7Ci0gICAgICAgIGZpcnN0LS07Ci0gICAgICAgIGh0dHBfY2xvc2Uo KTsKLSAgICAgICAgaHR0cF9yZW9wZW4oKTsKLSAgICAgICAgZ290byBpbmRleHJlcTsKLSAgICB9 Ci0gICAgaWYgKCBodHRwX2ZuZCA9PSAwICkgewotICAgICAgICByYyA9IC0xOwotICAgICAgICBj bG9zZWNvbiA9IDE7Ci0gICAgICAgIGdvdG8gaW5kZXhleGl0OwotICAgIH0KLQotICAgIC8qIE5v dyB3ZSBoYXZlIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSAqLwotICAgIGlmICggbG9jYWwgJiYg bG9jYWxbMF0gKSB7Ci0gICAgICAgIGlmICh6b3Blbm8oWk9GSUxFLGxvY2FsLE5VTEwsTlVMTCkp Ci0gICAgICAgICAgICB6ZmlsZSA9IDE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJjID0g LTE7Ci0gICAgfQotCi0gICAgaWYgKCBjaHVua2VkICkgewotICAgICAgICB3aGlsZSAoKGxlbiA9 IGh0dHBfZ2V0X2NodW5rX2xlbigpKSA+IDApIHsKLSAgICAgICAgICAgIHdoaWxlIChsZW4gJiYg KGNoID0gaHR0cF9pbmMoMCkpID49IDApIHsKLSAgICAgICAgICAgICAgICBsZW4tLTsKLSAgICAg ICAgICAgICAgICBpZiAoIHpmaWxlICkKLSAgICAgICAgICAgICAgICAgICAgemNob3V0KFpPRklM RSwoQ0hBUiljaCk7Ci0gICAgICAgICAgICAgICAgaWYgKCBzdGRpbyApCi0gICAgICAgICAgICAg ICAgICAgIGNvbm9jKChDSEFSKWNoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgo Y2ggPSBodHRwX2luYygwKSkgIT0gQ1IpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICBpZiAoKGNoID0gaHR0cF9pbmMoMCkpICE9IExGKQotICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgd2hpbGUgKGxlbiAmJiAoY2ggPSBo dHRwX2luYygwKSkgPj0gMCkgewotICAgICAgICAgICAgbGVuLS07Ci0gICAgICAgICAgICBpZiAo IHpmaWxlICkKLSAgICAgICAgICAgICAgICB6Y2hvdXQoWk9GSUxFLChDSEFSKWNoKTsKLSAgICAg ICAgICAgIGlmICggc3RkaW8gKQotICAgICAgICAgICAgICAgIGNvbm9jKChDSEFSKWNoKTsKLSAg ICAgICAgfQotICAgIH0KLQotICAgIGlmICggemZpbGUgKQotICAgICAgICB6Y2xvc2UoWk9GSUxF KTsKLQotICAgIGlmICggY2h1bmtlZCApIHsgICAgICAgICAgICAvKiBQYXJzZSBUcmFpbGluZyBI ZWFkZXJzICovCi0gICAgICAgIG51bGxsaW5lID0gMDsKLSAgICAgICAgd2hpbGUgKCFudWxsbGlu ZSAmJiAoY2ggPSBodHRwX2luYygwKSkgPj0gMCAmJiBpIDwgSFRUUEJVRkxFTikgewotICAgICAg ICAgICAgYnVmW2ldID0gY2g7Ci0gICAgICAgICAgICBpZiAoIGJ1ZltpXSA9PSAxMCApIHsgLyog Zm91bmQgZW5kIG9mIGxpbmUgKi8KLSAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgYnVmW2kt MV0gPT0gMTMpCi0gICAgICAgICAgICAgICAgICBpLS07Ci0gICAgICAgICAgICAgICAgaWYgKGkg PCAxKQotICAgICAgICAgICAgICAgICAgbnVsbGxpbmUgPSAxOwotICAgICAgICAgICAgICAgIGJ1 ZltpXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgaWYgKGFycmF5ICYmICFudWxsbGluZSAmJiBo ZGNudCA8IEhUVFBIRUFEQ05UKQotICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZoZWFkZXJz W2hkY250KytdLGJ1Zik7Ci0gICAgICAgICAgICAgICAgaWYgKCFja3N0cmNtcChidWYsIkNvbm5l Y3Rpb246IiwxMSwwKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIGNraW5kZXgoImNsb3Nl IixidWYsMTEsMCwwKSAhPSAwICkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlY29uID0g MTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaSA9IDA7Ci0gICAgICAgICAg ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAg fQotICAgIH0KLSAgICByYyA9IDA7Ci0KLSAgaW5kZXhleGl0OgotICAgIGlmIChhcnJheSkKLSAg ICAgIGh0dHBfbWthcnJheShoZWFkZXJzLGhkY250LGFycmF5KTsKLQotICAgIGlmIChjbG9zZWNv bikKLSAgICAgICAgaHR0cF9jbG9zZSgpOwotICAgIGZyZWUocmVxdWVzdCk7Ci0gICAgZm9yIChp ID0gMDsgaSA8IGhkY250OyBpKyspIHsKLSAgICAgICAgaWYgKGhlYWRlcnNbaV0pCi0gICAgICAg ICAgZnJlZShoZWFkZXJzW2ldKTsKLSAgICB9Ci0gICAgcmV0dXJuKHJjKTsKLX0KLQotaW50Ci0j aWZkZWYgQ0tfQU5TSUMKLWh0dHBfcHV0KGNoYXIgKiBhZ2VudCwgY2hhciAqKiBoZHJsaXN0LCBj aGFyICogbWltZSwgY2hhciAqIHVzZXIsCi0gICAgICAgICBjaGFyICogcHdkLCBjaGFyIGFycmF5 LCBjaGFyICogbG9jYWwsIGNoYXIgKiByZW1vdGUsCi0gICAgICAgICBjaGFyICogZGVzdCwgaW50 IHN0ZGlvKQotI2Vsc2UKLWh0dHBfcHV0KGFnZW50LCBoZHJsaXN0LCBtaW1lLCB1c2VyLCBwd2Qs IGFycmF5LCBsb2NhbCwgcmVtb3RlLCBkZXN0LCBzdGRpbykKLSAgICBjaGFyICogYWdlbnQ7IGNo YXIgKiogaGRybGlzdDsgY2hhciAqIG1pbWU7IGNoYXIgKiB1c2VyOwotICAgIGNoYXIgKiBwd2Q7 IGNoYXIgYXJyYXk7IGNoYXIgKiBsb2NhbDsgY2hhciAqIHJlbW90ZTsgY2hhciAqIGRlc3Q7Ci0g ICAgaW50IHN0ZGlvOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgY2hhciAqIHJlcXVl c3Q9TlVMTDsKLSAgICBpbnQgICAgaSwgaiwgbGVuID0gMCwgaGRjbnQgPSAwLCByYyA9IDA7Ci0g ICAgaW50ICAgIGNoOwotICAgIGludCAgICBodHRwX2ZuZCA9IDA7Ci0gICAgY2hhciAgIGJ1ZltI VFRQQlVGTEVOXSwgKnA7Ci0gICAgaW50ICAgIG51bGxsaW5lOwotICAgIHRpbWVfdCBtb2RfdDsK LSAgICB0aW1lX3Qgc3J2X3Q7Ci0gICAgdGltZV90IGxvY2FsX3Q7Ci0gICAgY2hhciBwYXNzd2Rb NjRdOwotICAgIGNoYXIgYjY0aW5bMTI4XTsKLSAgICBjaGFyIGI2NG91dFsyNTZdOwotICAgIGlu dCAgZmlsZWxlbjsKLSAgICBjaGFyICogaGVhZGVyc1tIVFRQSEVBRENOVF07Ci0gICAgaW50ICBj bG9zZWNvbiA9IDA7Ci0gICAgaW50ICBjaHVua2VkID0gMDsKLSAgICBpbnQgIGZpcnN0ID0gMTsK LSAgICBpbnQgIHpmaWxlID0gMDsKLQotICAgIGlmIChodHRwZmQgPT0gLTEpCi0gICAgICByZXR1 cm4oLTEpOwotICAgIGlmICghbWltZSkgbWltZSA9ICIiOwotICAgIGlmICghcmVtb3RlKSByZW1v dGUgPSAiIjsKLSAgICBpZiAoIWxvY2FsKSBsb2NhbCA9ICIiOwotICAgIGlmICghKmxvY2FsKSBy ZXR1cm4oLTEpOwotCi0gICAgaWYgKGFycmF5KSB7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBI VFRQSEVBRENOVDsgaSsrKQotICAgICAgICAgIGhlYWRlcnNbaV0gPSBOVUxMOwotICAgIH0KLSAg ICBmaWxlbGVuID0gemNoa2kobG9jYWwpOwotICAgIGlmIChmaWxlbGVuIDwgMCkKLSAgICAgIHJl dHVybigtMSk7Ci0KLSAgICAvKiBDb21wdXRlIGxlbmd0aCBvZiByZXF1ZXN0IGhlYWRlciAqLwot ICAgIGxlbiA9IDg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBVVCAqLwotICAgIGxl biArPSBzdHJsZW4oSFRUUF9WRVJTSU9OKTsKLSAgICBsZW4gKz0gc3RybGVuKHJlbW90ZSk7Ci0g ICAgbGVuICs9IDE2OwotCi0gICAgaWYgKCBoZHJsaXN0ICkgewotICAgICAgICBmb3IgKGkgPSAw OyBoZHJsaXN0W2ldOyBpKyspCi0gICAgICAgICAgICBsZW4gKz0gc3RybGVuKGhkcmxpc3RbaV0p ICsgMjsKLSAgICB9Ci0gICAgbGVuICs9IHN0cmxlbihodHRwX2hvc3RfcG9ydCkgKyA4OwotCi0g ICAgaWYgKGFnZW50KQotICAgICAgbGVuICs9IDEzICsgc3RybGVuKGFnZW50KTsKLSAgICBpZiAo dXNlcikgewotICAgICAgICBpZiAoIXB3ZCkgewotICAgICAgICAgICAgcmVhZHBhc3MoIlBhc3N3 b3JkOiAiLHBhc3N3ZCw2NCk7Ci0gICAgICAgICAgICBwd2QgPSBwYXNzd2Q7Ci0gICAgICAgIH0K LSAgICAgICAgY2ttYWttc2coYjY0aW4sc2l6ZW9mKGI2NGluKSx1c2VyLCI6Iixwd2QsTlVMTCk7 Ci0gICAgICAgIGogPSBiOHRvYjY0KGI2NGluLHN0cmxlbihiNjRpbiksYjY0b3V0LDI1Nik7Ci0g ICAgICAgIG1lbXNldChwd2QsMCxzdHJsZW4ocHdkKSk7Ci0gICAgICAgIGlmIChqIDwgMCkKLSAg ICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICBiNjRvdXRbal0gPSAnXDAnOwotICAgICAgICBs ZW4gKz0gaiArIDI0OwotICAgIH0KLSAgICBsZW4gKz0gMTYgKyBzdHJsZW4obWltZSk7ICAgICAg ICAgICAvKiBDb250ZW50LXR5cGU6ICovCi0gICAgbGVuICs9IDMyOyAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogQ29udGVudC1sZW5ndGg6ICovCi0gICAgbGVuICs9IDMyOyAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogRGF0ZTogKi8KLSNpZmRlZiBIVFRQX0NMT1NFCi0gICAgbGVuICs9 IDE5OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29ubmVjdGlvbjogY2xvc2UgKi8KLSNl bmRpZgotICAgIGxlbiArPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJsYW5rIGxp bmUgKyBudWxsICovCi0KLSAgICByZXF1ZXN0ID0gbWFsbG9jKGxlbik7Ci0gICAgaWYgKCFyZXF1 ZXN0KQotICAgICAgcmV0dXJuKC0xKTsKLQotICAgIHNwcmludGYocmVxdWVzdCwiUFVUICVzICVz XHJcbiIscmVtb3RlLEhUVFBfVkVSU0lPTik7Ci0gICAgY2tzdHJuY2F0KHJlcXVlc3QsIkRhdGU6 ICIsbGVuKTsKLSNpZmRlZiBDTURBVEUyVE0KLSAgICBja3N0cm5jYXQocmVxdWVzdCxodHRwX25v dygpLGxlbik7Ci0jZWxzZQotICAgIGNrc3RybmNhdChyZXF1ZXN0LC4uLixsZW4pOwotI2VuZGlm IC8qIENNREFURTJUTSAqLwotICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixsZW4pOwotICAg IGNrc3RybmNhdChyZXF1ZXN0LCJIb3N0OiAiLCBsZW4pOwotICAgIGNrc3RybmNhdChyZXF1ZXN0 LGh0dHBfaG9zdF9wb3J0LCBsZW4pOwotICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixsZW4p OwotICAgIGlmIChhZ2VudCkgewotICAgICAgICBja3N0cm5jYXQocmVxdWVzdCwiVXNlci1hZ2Vu dDogIixsZW4pOwotICAgICAgICBja3N0cm5jYXQocmVxdWVzdCxhZ2VudCxsZW4pOwotICAgICAg ICBja3N0cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVuKTsKLSAgICB9Ci0gICAgaWYgKHVzZXIpIHsK LSAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsIkF1dGhvcml6YXRpb246IEJhc2ljICIsbGVuKTsK LSAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsYjY0b3V0LGxlbik7Ci0gICAgICAgIGNrc3RybmNh dChyZXF1ZXN0LCJcclxuIixsZW4pOwotICAgIH0KLSAgICBpZiAoIGhkcmxpc3QgKSB7Ci0gICAg ICAgIGZvciAoaSA9IDA7IGhkcmxpc3RbaV07IGkrKykgewotICAgICAgICAgICAgY2tzdHJuY2F0 KHJlcXVlc3QsaGRybGlzdFtpXSxsZW4pOwotICAgICAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3Qs IlxyXG4iLGxlbik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2tzdHJuY2F0KHJlcXVlc3QsIkNv bnRlbnQtdHlwZTogIixsZW4pOwotICAgIGNrc3RybmNhdChyZXF1ZXN0LG1pbWUsbGVuKTsKLSAg ICBja3N0cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVuKTsKLSAgICBzcHJpbnRmKGJ1ZiwiQ29udGVu dC1sZW5ndGg6ICVkXHJcbiIsZmlsZWxlbik7IC8qIHNhZmUgKi8KLSAgICBja3N0cm5jYXQocmVx dWVzdCxidWYsbGVuKTsKLSNpZmRlZiBIVFRQX0NMT1NFCi0gICAgY2tzdHJuY2F0KHJlcXVlc3Qs IkNvbm5lY3Rpb246IGNsb3NlXHJcbiIsbGVuKTsKLSNlbmRpZgotICAgIGNrc3RybmNhdChyZXF1 ZXN0LCJcclxuIixsZW4pOwotCi0gICAgLyogTm93IHdlIGhhdmUgdGhlIGNvbnRlbnRzIG9mIHRo ZSBmaWxlICovCi0gICAgaWYgKHpvcGVuaShaSUZJTEUsbG9jYWwpKSB7Ci0KLSAgICAgIHB1dHJl cToJCQkJLyogU2VuZCByZXF1ZXN0ICovCi0gICAgICAgIGlmIChodHRwX3RvbCgoQ0hBUiAqKXJl cXVlc3Qsc3RybGVuKHJlcXVlc3QpKSA8PSAwKSB7Ci0gICAgICAgICAgICBodHRwX2Nsb3NlKCk7 Ci0gICAgICAgICAgICBpZiAoIGZpcnN0ICkgewotICAgICAgICAgICAgICAgIGZpcnN0LS07Ci0g ICAgICAgICAgICAgICAgaHR0cF9yZW9wZW4oKTsKLSAgICAgICAgICAgICAgICBnb3RvIHB1dHJl cTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHpjbG9zZShaSUZJTEUpOwotICAgICAgICAg ICAgcmMgPSAtMTsKLSAgICAgICAgICAgIGdvdG8gcHV0ZXhpdDsKLSAgICAgICAgfQotICAgICAg ICAvKiBSZXF1ZXN0IGhlYWRlcnMgaGF2ZSBiZWVuIHNlbnQgKi8KLQotICAgICAgICBpID0gMDsK LSAgICAgICAgd2hpbGUgKHpjaGluKFpJRklMRSwmY2gpID09IDApIHsKLSAgICAgICAgICAgIGJ1 ZltpKytdID0gY2g7Ci0gICAgICAgICAgICBpZiAoaSA9PSBIVFRQQlVGTEVOKSB7Ci0gICAgICAg ICAgICAgICAgaWYgKGh0dHBfdG9sKChDSEFSICopYnVmLEhUVFBCVUZMRU4pIDw9IDApIHsKLSAg ICAgICAgICAgICAgICAgICAgaHR0cF9jbG9zZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAo IGZpcnN0ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QtLTsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGh0dHBfcmVvcGVuKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3Rv IHB1dHJlcTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICBpID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAo aSA+IDApIHsKLSAgICAgICAgICAgIGlmIChodHRwX3RvbCgoQ0hBUiAqKWJ1ZixpKSA8IDApIHsK LSAgICAgICAgICAgICAgICBodHRwX2Nsb3NlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCBmaXJz dCApIHsKLSAgICAgICAgICAgICAgICAgICAgZmlyc3QtLTsKLSAgICAgICAgICAgICAgICAgICAg aHR0cF9yZW9wZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBwdXRyZXE7Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHpjbG9zZShaSUZJ TEUpOwotCi0gICAgICAgIC8qIFByb2Nlc3MgdGhlIHJlc3BvbnNlIGhlYWRlcnMgKi8KLSAgICAg ICAgbG9jYWxfdCA9IHRpbWUoTlVMTCk7Ci0gICAgICAgIG51bGxsaW5lID0gMDsKLSAgICAgICAg aSA9IDA7Ci0gICAgICAgIGxlbiA9IC0xOwotICAgICAgICB3aGlsZSAoIW51bGxsaW5lICYmIChj aCA9IGh0dHBfaW5jKDApKSA+PSAwICYmIGkgPCBIVFRQQlVGTEVOKSB7Ci0gICAgICAgICAgICBi dWZbaV0gPSBjaDsKLSAgICAgICAgICAgIGlmIChidWZbaV0gPT0gMTApIHsgICAgICAgICAvKiBm b3VuZCBlbmQgb2YgbGluZSAqLwotICAgICAgICAgICAgICAgIGlmIChpID4gMCAmJiBidWZbaS0x XSA9PSAxMykKLSAgICAgICAgICAgICAgICAgIGktLTsKLSAgICAgICAgICAgICAgICBpZiAoaSA8 IDEpCi0gICAgICAgICAgICAgICAgICBudWxsbGluZSA9IDE7Ci0gICAgICAgICAgICAgICAgYnVm W2ldID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBpZiAoYXJyYXkgJiYgIW51bGxsaW5lICYmIGhk Y250IDwgSFRUUEhFQURDTlQpCi0gICAgICAgICAgICAgICAgICBtYWtlc3RyKCZoZWFkZXJzW2hk Y250KytdLGJ1Zik7Ci0gICAgICAgICAgICAgICAgaWYgKCFja3N0cmNtcChidWYsIkhUVFAiLDQs MCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaHR0cF9mbmQgPSAxOwotICAgICAgICAgICAgICAg ICAgICBqID0gY2tpbmRleCgiICIsYnVmLDAsMCwwKTsKLSAgICAgICAgICAgICAgICAgICAgcCA9 ICZidWZbal07Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKCpwKSkKLSAgICAg ICAgICAgICAgICAgICAgICBwKys7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocFswXSkg ewotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzEnOiAgICAgICAgIC8qIEluZm9ybWF0aW9u YWwgbWVzc2FnZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICAgICAgICAgICAgY2FzZSAnMic6ICAgICAgICAgLyogU3VjY2VzcyAqLwotICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMyc6ICAgICAg ICAgLyogUmVkaXJlY3Rpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICBjYXNlICc0JzogICAg ICAgICAvKiBDbGllbnQgZmFpbHVyZSAqLwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzUn OiAgICAgICAgIC8qIFNlcnZlciBmYWlsdXJlICovCi0gICAgICAgICAgICAgICAgICAgICAgZGVm YXVsdDogICAgICAgICAgLyogVW5rbm93biAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYg KCFxdWlldCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJGYWlsdXJlOiBTZXJ2 ZXIgcmVwb3J0cyAlc1xuIixwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gLTE7Ci0g ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaHR0cF9zZXRfY29kZV9y ZXBseShwKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBp ZiAoIWNrc3RyY21wKGJ1ZiwiQ29ubmVjdGlvbjoiLDExLDApKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICBpZiAoIGNraW5kZXgoImNsb3NlIixidWYsMTEsMCwwKSAhPSAwICkKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjbG9zZWNvbiA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0g ZWxzZSBpZiAoIWNrc3RyY21wKGJ1ZiwiQ29udGVudC1MZW5ndGg6IiwxNSwwKSkgewotICAgICAg ICAgICAgICAgICAgICAgICAgbGVuID0gYXRvaSgmYnVmWzE2XSk7Ci0gICAgICAgICAgICAgICAg ICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKGJ1ZiwiVHJhbnNmZXItRW5jb2Rpbmc6IiwxOCwwKSkg ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBja2luZGV4KCJjaHVua2VkIixidWYsMTgs MCwwKSAhPSAwICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVua2VkID0gMTsKLQkJ CWRlYnVnKEYxMDEsImh0dHBfcHV0IGNodW5rZWQiLCIiLGNodW5rZWQpOwotICAgICAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICggc3RkaW8gKQotICAgICAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKCIlc1xuIixidWYpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICBpID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg aSsrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChjaCA8IDAgJiYgZmly c3QpIHsKLSAgICAgICAgICAgIGZpcnN0LS07Ci0gICAgICAgICAgICBodHRwX2Nsb3NlKCk7Ci0g ICAgICAgICAgICBodHRwX3Jlb3BlbigpOwotICAgICAgICAgICAgZ290byBwdXRyZXE7Ci0gICAg ICAgIH0KLSAgICAgICAgaWYgKCBodHRwX2ZuZCA9PSAwICkgewotICAgICAgICAgICAgY2xvc2Vj b24gPSAxOwotICAgICAgICAgICAgcmMgPSAtMTsKLSAgICAgICAgICAgIGdvdG8gcHV0ZXhpdDsK LSAgICAgICAgfQotCi0gICAgICAgIC8qIEFueSByZXNwb25zZSBkYXRhPyAqLwotICAgICAgICBp ZiAoIGRlc3QgJiYgZGVzdFswXSApIHsKLSAgICAgICAgICAgIGlmICh6b3Blbm8oWk9GSUxFLGRl c3QsTlVMTCxOVUxMKSkKLSAgICAgICAgICAgICAgICB6ZmlsZSA9IDE7Ci0gICAgICAgICAgICBl bHNlCi0gICAgICAgICAgICAgICAgcmMgPSAtMTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgg Y2h1bmtlZCApIHsKLSAgICAgICAgICAgIHdoaWxlICgobGVuID0gaHR0cF9nZXRfY2h1bmtfbGVu KCkpID4gMCkgewotICAgICAgICAgICAgICAgIHdoaWxlIChsZW4gJiYgKGNoID0gaHR0cF9pbmMo MCkpID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgbGVuLS07Ci0gICAgICAgICAgICAgICAg ICAgIGlmICggemZpbGUgKQotICAgICAgICAgICAgICAgICAgICAgICAgemNob3V0KFpPRklMRSwo Q0hBUiljaCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggc3RkaW8gKQotICAgICAgICAgICAg ICAgICAgICAgICAgY29ub2MoKENIQVIpY2gpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICBpZiAoKGNoID0gaHR0cF9pbmMoMCkpICE9IENSKQotICAgICAgICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAoKGNoID0gaHR0cF9pbmMoMCkpICE9IExGKQot ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNl IHsKLSAgICAgICAgICAgIHdoaWxlIChsZW4gJiYgKGNoID0gaHR0cF9pbmMoMCkpID49IDApIHsK LSAgICAgICAgICAgICAgICBsZW4tLTsKLSAgICAgICAgICAgICAgICBpZiAoIHpmaWxlICkKLSAg ICAgICAgICAgICAgICAgICAgemNob3V0KFpPRklMRSwoQ0hBUiljaCk7Ci0gICAgICAgICAgICAg ICAgaWYgKCBzdGRpbyApCi0gICAgICAgICAgICAgICAgICAgIGNvbm9jKChDSEFSKWNoKTsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICggemZpbGUgKQotICAgICAgICAg ICAgemNsb3NlKFpPRklMRSk7Ci0KLSAgICAgICAgaWYgKCBjaHVua2VkICkgeyAgICAgICAgICAg IC8qIFBhcnNlIFRyYWlsaW5nIEhlYWRlcnMgKi8KLSAgICAgICAgICAgIG51bGxsaW5lID0gMDsK LSAgICAgICAgICAgIHdoaWxlICghbnVsbGxpbmUgJiYgKGNoID0gaHR0cF9pbmMoMCkpID49IDAg JiYgaSA8IEhUVFBCVUZMRU4pIHsKLSAgICAgICAgICAgICAgICBidWZbaV0gPSBjaDsKLSAgICAg ICAgICAgICAgICBpZiAoIGJ1ZltpXSA9PSAxMCApIHsgLyogZm91bmQgZW5kIG9mIGxpbmUgKi8K LSAgICAgICAgICAgICAgICAgICAgaWYgKGkgPiAwICYmIGJ1ZltpLTFdID09IDEzKQotICAgICAg ICAgICAgICAgICAgICAgIGktLTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCAxKQotICAg ICAgICAgICAgICAgICAgICAgIG51bGxsaW5lID0gMTsKLSAgICAgICAgICAgICAgICAgICAgYnVm W2ldID0gJ1wwJzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFycmF5ICYmICFudWxsbGluZSAm JiBoZGNudCA8IEhUVFBIRUFEQ05UKQotICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigm aGVhZGVyc1toZGNudCsrXSxidWYpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNrc3RyY21w KGJ1ZiwiQ29ubmVjdGlvbjoiLDExLDApKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo IGNraW5kZXgoImNsb3NlIixidWYsMTEsMCwwKSAhPSAwICkKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjbG9zZWNvbiA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICAgICAgaSA9IDA7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg ICAgICAgaSsrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot ICAgIH0gZWxzZSB7Ci0gICAgICAgIHJjID0gLTE7Ci0gICAgfQotCi0gIHB1dGV4aXQ6Ci0gICAg aWYgKCBhcnJheSApCi0gICAgICAgIGh0dHBfbWthcnJheShoZWFkZXJzLGhkY250LGFycmF5KTsK LQotICAgIGlmIChjbG9zZWNvbikKLSAgICAgICAgaHR0cF9jbG9zZSgpOwotICAgIGZyZWUocmVx dWVzdCk7Ci0gICAgZm9yIChpID0gMDsgaSA8IGhkY250OyBpKyspIHsKLSAgICAgICAgaWYgKGhl YWRlcnNbaV0pCi0gICAgICAgICAgZnJlZShoZWFkZXJzW2ldKTsKLSAgICB9Ci0gICAgcmV0dXJu KHJjKTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWh0dHBfZGVsZXRlKGNoYXIgKiBhZ2Vu dCwgY2hhciAqKiBoZHJsaXN0LCBjaGFyICogdXNlciwKLSAgICAgICAgICBjaGFyICogcHdkLCBj aGFyIGFycmF5LCBjaGFyICogcmVtb3RlKQotI2Vsc2UKLWh0dHBfZGVsZXRlKGFnZW50LCBoZHJs aXN0LCB1c2VyLCBwd2QsIGFycmF5LCByZW1vdGUpCi0gICAgY2hhciAqIGFnZW50OyBjaGFyICoq IGhkcmxpc3Q7IGNoYXIgKiB1c2VyOwotICAgIGNoYXIgKiBwd2Q7IGNoYXIgYXJyYXk7IGNoYXIg KiByZW1vdGU7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBjaGFyICogcmVxdWVzdD1O VUxMOwotICAgIGludCAgICBpLCBqLCBsZW4gPSAwLCBoZGNudCA9IDAsIHJjID0gMDsKLSAgICBp bnQgICAgY2g7Ci0gICAgaW50ICAgIGh0dHBfZm5kID0gMDsKLSAgICBjaGFyICAgYnVmW0hUVFBC VUZMRU5dLCAqcDsKLSAgICBpbnQgICAgbnVsbGxpbmU7Ci0gICAgdGltZV90IG1vZF90OwotICAg IHRpbWVfdCBzcnZfdDsKLSAgICB0aW1lX3QgbG9jYWxfdDsKLSAgICBjaGFyIHBhc3N3ZFs2NF07 Ci0gICAgY2hhciBiNjRpblsxMjhdOwotICAgIGNoYXIgYjY0b3V0WzI1Nl07Ci0gICAgY2hhciAq IGhlYWRlcnNbSFRUUEhFQURDTlRdOwotICAgIGludCAgY2xvc2Vjb24gPSAwOwotICAgIGludCAg Y2h1bmtlZCA9IDA7Ci0gICAgaW50ICBmaXJzdCA9IDE7Ci0KLSAgICBpZiAoaHR0cGZkID09IC0x KQotICAgICAgcmV0dXJuKC0xKTsKLQotICAgIGlmIChhcnJheSkgewotICAgICAgICBmb3IgKGkg PSAwOyBpIDwgSFRUUEhFQURDTlQ7IGkrKykKLSAgICAgICAgICBoZWFkZXJzW2ldID0gTlVMTDsK LSAgICB9Ci0KLSAgICAvKiBDb21wdXRlIGxlbmd0aCBvZiByZXF1ZXN0IGhlYWRlciAqLwotICAg IGxlbiA9IDExOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUxFVEUgKi8KLSAgICBs ZW4gKz0gc3RybGVuKEhUVFBfVkVSU0lPTik7Ci0gICAgbGVuICs9IHN0cmxlbihyZW1vdGUpOwot ICAgIGxlbiArPSAxNjsKLQotICAgIGlmICggaGRybGlzdCApIHsKLSAgICAgICAgZm9yIChpID0g MDsgaGRybGlzdFtpXTsgaSsrKQotICAgICAgICAgICAgbGVuICs9IHN0cmxlbihoZHJsaXN0W2ld KSArIDI7Ci0gICAgfQotICAgIGxlbiArPSBzdHJsZW4oaHR0cF9ob3N0X3BvcnQpICsgODsKLQot ICAgIGlmIChhZ2VudCkKLSAgICAgIGxlbiArPSAxMyArIHN0cmxlbihhZ2VudCk7Ci0gICAgaWYg KHVzZXIpIHsKLSAgICAgICAgaWYgKCFwd2QpIHsKLSAgICAgICAgICAgIHJlYWRwYXNzKCJQYXNz d29yZDogIixwYXNzd2QsNjQpOwotICAgICAgICAgICAgcHdkID0gcGFzc3dkOwotICAgICAgICB9 Ci0gICAgICAgIGNrbWFrbXNnKGI2NGluLHNpemVvZihiNjRpbiksdXNlciwiOiIscHdkLE5VTEwp OwotICAgICAgICBqID0gYjh0b2I2NChiNjRpbixzdHJsZW4oYjY0aW4pLGI2NG91dCwyNTYpOwot ICAgICAgICBtZW1zZXQocHdkLDAsc3RybGVuKHB3ZCkpOwotICAgICAgICBpZiAoaiA8IDApCi0g ICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgYjY0b3V0W2pdID0gJ1wwJzsKLSAgICAgICAg bGVuICs9IGogKyAyNDsKLSAgICB9Ci0gICAgbGVuICs9IDMyOyAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogRGF0ZTogKi8KLSNpZmRlZiBIVFRQX0NMT1NFCi0gICAgbGVuICs9IDE5OyAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogQ29ubmVjdGlvbjogY2xvc2UgKi8KLSNlbmRpZgotICAg IGxlbiArPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJsYW5rIGxpbmUgKyBudWxs ICovCi0KLSAgICByZXF1ZXN0ID0gbWFsbG9jKGxlbik7Ci0gICAgaWYgKCFyZXF1ZXN0KQotICAg ICAgcmV0dXJuKC0xKTsKLQotICAgIHNwcmludGYocmVxdWVzdCwiREVMRVRFICVzICVzXHJcbiIs cmVtb3RlLEhUVFBfVkVSU0lPTik7Ci0gICAgY2tzdHJuY2F0KHJlcXVlc3QsIkRhdGU6ICIsbGVu KTsKLSNpZmRlZiBDTURBVEUyVE0KLSAgICBja3N0cm5jYXQocmVxdWVzdCxodHRwX25vdygpLGxl bik7Ci0jZWxzZQotICAgIGNrc3RybmNhdChyZXF1ZXN0LC4uLixsZW4pOwotI2VuZGlmIC8qIENN REFURTJUTSAqLwotICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixsZW4pOwotICAgIGNrc3Ry bmNhdChyZXF1ZXN0LCJIb3N0OiAiLCBsZW4pOwotICAgIGNrc3RybmNhdChyZXF1ZXN0LGh0dHBf aG9zdF9wb3J0LCBsZW4pOwotICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixsZW4pOwotICAg IGlmIChhZ2VudCkgewotICAgICAgICBja3N0cm5jYXQocmVxdWVzdCwiVXNlci1hZ2VudDogIixs ZW4pOwotICAgICAgICBja3N0cm5jYXQocmVxdWVzdCxhZ2VudCxsZW4pOwotICAgICAgICBja3N0 cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVuKTsKLSAgICB9Ci0gICAgaWYgKHVzZXIpIHsKLSAgICAg ICAgY2tzdHJuY2F0KHJlcXVlc3QsIkF1dGhvcml6YXRpb246IEJhc2ljICIsbGVuKTsKLSAgICAg ICAgY2tzdHJuY2F0KHJlcXVlc3QsYjY0b3V0LGxlbik7Ci0gICAgICAgIGNrc3RybmNhdChyZXF1 ZXN0LCJcclxuIixsZW4pOwotICAgIH0KLSAgICBpZiAoIGhkcmxpc3QgKSB7Ci0gICAgICAgIGZv ciAoaSA9IDA7IGhkcmxpc3RbaV07IGkrKykgewotICAgICAgICAgICAgY2tzdHJuY2F0KHJlcXVl c3QsaGRybGlzdFtpXSxsZW4pOwotICAgICAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4i LGxlbik7Ci0gICAgICAgIH0KLSAgICB9Ci0jaWZkZWYgSFRUUF9DTE9TRQotICAgIGNrc3RybmNh dChyZXF1ZXN0LCJDb25uZWN0aW9uOiBjbG9zZVxyXG4iLGxlbik7Ci0jZW5kaWYKLSAgICBja3N0 cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVuKTsKLSAgZGVscmVxOgotICAgIGlmIChodHRwX3RvbCgo Q0hBUiAqKXJlcXVlc3Qsc3RybGVuKHJlcXVlc3QpKSA8IDApCi0gICAgewotICAgICAgICBodHRw X2Nsb3NlKCk7Ci0gICAgICAgIGlmICggZmlyc3QgKSB7Ci0gICAgICAgICAgICBmaXJzdC0tOwot ICAgICAgICAgICAgaHR0cF9yZW9wZW4oKTsKLSAgICAgICAgICAgIGdvdG8gZGVscmVxOwotICAg ICAgICB9Ci0gICAgICAgIHJjID0gLTE7Ci0gICAgICAgIGdvdG8gZGVsZXhpdDsKLSAgICB9Ci0K LSAgICAvKiBQcm9jZXNzIHRoZSByZXNwb25zZSBoZWFkZXJzICovCi0gICAgbG9jYWxfdCA9IHRp bWUoTlVMTCk7Ci0gICAgbnVsbGxpbmUgPSAwOwotICAgIGkgPSAwOwotICAgIGxlbiA9IC0xOwot ICAgIHdoaWxlICghbnVsbGxpbmUgJiYgKGNoID0gaHR0cF9pbmMoMCkpID49IDAgJiYgaSA8IEhU VFBCVUZMRU4pIHsKLSAgICAgICAgYnVmW2ldID0gY2g7Ci0gICAgICAgIGlmIChidWZbaV0gPT0g MTApIHsgICAgICAgICAvKiBmb3VuZCBlbmQgb2YgbGluZSAqLwotICAgICAgICAgICAgaWYgKGkg PiAwICYmIGJ1ZltpLTFdID09IDEzKQotICAgICAgICAgICAgICBpLS07Ci0gICAgICAgICAgICBp ZiAoaSA8IDEpCi0gICAgICAgICAgICAgIG51bGxsaW5lID0gMTsKLSAgICAgICAgICAgIGJ1Zltp XSA9ICdcMCc7Ci0gICAgICAgICAgICBpZiAoYXJyYXkgJiYgIW51bGxsaW5lICYmIGhkY250IDwg SFRUUEhFQURDTlQpCi0gICAgICAgICAgICAgICAgbWFrZXN0cigmaGVhZGVyc1toZGNudCsrXSxi dWYpOwotICAgICAgICAgICAgaWYgKCFja3N0cmNtcChidWYsIkhUVFAiLDQsMCkpIHsKLSAgICAg ICAgICAgICAgICBodHRwX2ZuZCA9IDE7Ci0gICAgICAgICAgICAgICAgaiA9IGNraW5kZXgoIiAi LGJ1ZiwwLDAsMCk7Ci0gICAgICAgICAgICAgICAgcCA9ICZidWZbal07Ci0gICAgICAgICAgICAg ICAgd2hpbGUgKGlzc3BhY2UoKnApKQotICAgICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAg ICAgICAgIHN3aXRjaCAocFswXSkgewotICAgICAgICAgICAgICAgICAgY2FzZSAnMSc6ICAgICAg ICAgICAgIC8qIEluZm9ybWF0aW9uYWwgbWVzc2FnZSAqLwotICAgICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgJzInOiAgICAgICAgICAgICAvKiBTdWNjZXNz ICovCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSAn Myc6ICAgICAgICAgICAgIC8qIFJlZGlyZWN0aW9uICovCi0gICAgICAgICAgICAgICAgICBjYXNl ICc0JzogICAgICAgICAgICAgLyogQ2xpZW50IGZhaWx1cmUgKi8KLSAgICAgICAgICAgICAgICAg IGNhc2UgJzUnOiAgICAgICAgICAgICAvKiBTZXJ2ZXIgZmFpbHVyZSAqLwotICAgICAgICAgICAg ICAgICAgZGVmYXVsdDogICAgICAgICAgICAgIC8qIFVua25vd24gKi8KLSAgICAgICAgICAgICAg ICAgICAgaWYgKCFxdWlldCkKLSAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkZhaWx1cmU6 IFNlcnZlciByZXBvcnRzICVzXG4iLHApOwotICAgICAgICAgICAgICAgICAgICByYyA9IC0xOwot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBodHRwX3NldF9jb2RlX3JlcGx5KHAp OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoIWNrc3RyY21wKGJ1 ZiwiQ29ubmVjdGlvbjoiLDExLDApKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggY2tpbmRl eCgiY2xvc2UiLGJ1ZiwxMSwwLDApICE9IDAgKQotICAgICAgICAgICAgICAgICAgICAgICAgY2xv c2Vjb24gPSAxOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKGJ1ZiwiQ29u dGVudC1MZW5ndGg6IiwxNSwwKSkgewotICAgICAgICAgICAgICAgICAgICBsZW4gPSBhdG9pKCZi dWZbMTZdKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFja3N0cmNtcChidWYsIlRyYW5z ZmVyLUVuY29kaW5nOiIsMTgsMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBja2luZGV4 KCJjaHVua2VkIixidWYsMTgsMCwwKSAhPSAwICkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNo dW5rZWQgPSAxOwotCQkgICAgZGVidWcoRjEwMSwiaHR0cF9kZWxldGUgY2h1bmtlZCIsIiIsY2h1 bmtlZCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHByaW50ZigiJXNcbiIs YnVmKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGkgPSAwOwotICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgaSsrOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChjaCA8IDAgJiYg Zmlyc3QpIHsKLSAgICAgICAgZmlyc3QtLTsKLSAgICAgICAgaHR0cF9jbG9zZSgpOwotICAgICAg ICBodHRwX3Jlb3BlbigpOwotICAgICAgICBnb3RvIGRlbHJlcTsKLSAgICB9Ci0gICAgaWYgKCBo dHRwX2ZuZCA9PSAwICkgewotICAgICAgICByYyA9IC0xOwotICAgICAgICBjbG9zZWNvbiA9IDE7 Ci0gICAgICAgIGdvdG8gZGVsZXhpdDsKLSAgICB9Ci0KLSAgICAvKiBBbnkgcmVzcG9uc2UgZGF0 YT8gKi8KLSAgICBpZiAoIGNodW5rZWQgKSB7Ci0gICAgICAgIHdoaWxlICgobGVuID0gaHR0cF9n ZXRfY2h1bmtfbGVuKCkpID4gMCkgewotICAgICAgICAgICAgd2hpbGUgKGxlbiAmJiAoY2ggPSBo dHRwX2luYygwKSkgPj0gMCkgewotICAgICAgICAgICAgICAgIGxlbi0tOwotICAgICAgICAgICAg ICAgIGNvbm9jKChDSEFSKWNoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoY2gg PSBodHRwX2luYygwKSkgIT0gQ1IpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICBpZiAoKGNoID0gaHR0cF9pbmMoMCkpICE9IExGKQotICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgd2hpbGUgKGxlbiAmJiAoY2ggPSBodHRw X2luYygwKSkgPj0gMCkgewotICAgICAgICAgICAgbGVuLS07Ci0gICAgICAgICAgICBjb25vYygo Q0hBUiljaCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIGNodW5rZWQgKSB7ICAgICAg ICAgICAgLyogUGFyc2UgVHJhaWxpbmcgSGVhZGVycyAqLwotICAgICAgICBudWxsbGluZSA9IDA7 Ci0gICAgICAgIHdoaWxlICghbnVsbGxpbmUgJiYgKGNoID0gaHR0cF9pbmMoMCkpID49IDAgJiYg aSA8IEhUVFBCVUZMRU4pIHsKLSAgICAgICAgICAgIGJ1ZltpXSA9IGNoOwotICAgICAgICAgICAg aWYgKCBidWZbaV0gPT0gMTAgKSB7IC8qIGZvdW5kIGVuZCBvZiBsaW5lICovCi0gICAgICAgICAg ICAgICAgaWYgKGkgPiAwICYmIGJ1ZltpLTFdID09IDEzKQotICAgICAgICAgICAgICAgICAgaS0t OwotICAgICAgICAgICAgICAgIGlmIChpIDwgMSkKLSAgICAgICAgICAgICAgICAgIG51bGxsaW5l ID0gMTsKLSAgICAgICAgICAgICAgICBidWZbaV0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGlm IChhcnJheSAmJiAhbnVsbGxpbmUgJiYgaGRjbnQgPCBIVFRQSEVBRENOVCkKLSAgICAgICAgICAg ICAgICAgICAgbWFrZXN0cigmaGVhZGVyc1toZGNudCsrXSxidWYpOwotICAgICAgICAgICAgICAg IGlmICghY2tzdHJjbXAoYnVmLCJDb25uZWN0aW9uOiIsMTEsMCkpIHsKLSAgICAgICAgICAgICAg ICAgICAgaWYgKCBja2luZGV4KCJjbG9zZSIsYnVmLDExLDAsMCkgIT0gMCApCi0gICAgICAgICAg ICAgICAgICAgICAgICBjbG9zZWNvbiA9IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgIGkgPSAwOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpKys7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgZGVsZXhpdDoKLSAgICBpZiAo YXJyYXkpCi0gICAgICAgIGh0dHBfbWthcnJheShoZWFkZXJzLGhkY250LGFycmF5KTsKLQotICAg IGlmIChjbG9zZWNvbikKLSAgICAgICAgaHR0cF9jbG9zZSgpOwotICAgIGZyZWUocmVxdWVzdCk7 Ci0gICAgZm9yIChpID0gMDsgaSA8IGhkY250OyBpKyspIHsKLSAgICAgICAgaWYgKGhlYWRlcnNb aV0pCi0gICAgICAgICAgZnJlZShoZWFkZXJzW2ldKTsKLSAgICB9Ci0gICAgcmV0dXJuKHJjKTsK LX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWh0dHBfcG9zdChjaGFyICogYWdlbnQsIGNoYXIg KiogaGRybGlzdCwgY2hhciAqIG1pbWUsIGNoYXIgKiB1c2VyLAotICAgICAgICAgIGNoYXIgKiBw d2QsIGNoYXIgYXJyYXksIGNoYXIgKiBsb2NhbCwgY2hhciAqIHJlbW90ZSwKLSAgICAgICAgICBj aGFyICogZGVzdCwgaW50IHN0ZGlvKQotI2Vsc2UKLWh0dHBfcG9zdChhZ2VudCwgaGRybGlzdCwg bWltZSwgdXNlciwgcHdkLCBhcnJheSwgbG9jYWwsIHJlbW90ZSwgZGVzdCwKLSAgICAgICAgICBz dGRpbykKLSAgICBjaGFyICogYWdlbnQ7IGNoYXIgKiogaGRybGlzdDsgY2hhciAqIG1pbWU7IGNo YXIgKiB1c2VyOwotICAgIGNoYXIgKiBwd2Q7IGNoYXIgYXJyYXk7IGNoYXIgKiBsb2NhbDsgY2hh ciAqIHJlbW90ZTsgY2hhciAqIGRlc3Q7Ci0gICAgaW50IHN0ZGlvOwotI2VuZGlmIC8qIENLX0FO U0lDICovCi17Ci0gICAgY2hhciAqIHJlcXVlc3Q9TlVMTDsKLSAgICBpbnQgICAgaSwgaiwgbGVu ID0gMCwgaGRjbnQgPSAwLCByYyA9IDA7Ci0gICAgaW50ICAgIGNoOwotICAgIGludCAgICBodHRw X2ZuZCA9IDA7Ci0gICAgY2hhciAgIGJ1ZltIVFRQQlVGTEVOXSwgKnA7Ci0gICAgaW50ICAgIG51 bGxsaW5lOwotICAgIHRpbWVfdCBtb2RfdDsKLSAgICB0aW1lX3Qgc3J2X3Q7Ci0gICAgdGltZV90 IGxvY2FsX3Q7Ci0gICAgY2hhciBwYXNzd2RbNjRdOwotICAgIGNoYXIgYjY0aW5bMTI4XTsKLSAg ICBjaGFyIGI2NG91dFsyNTZdOwotICAgIGludCAgZmlsZWxlbjsKLSAgICBjaGFyICogaGVhZGVy c1tIVFRQSEVBRENOVF07Ci0gICAgaW50ICBjbG9zZWNvbiA9IDA7Ci0gICAgaW50ICBjaHVua2Vk ID0gMDsKLSAgICBpbnQgIHpmaWxlID0gMDsKLSAgICBpbnQgIGZpcnN0ID0gMTsKLQotICAgIGlm IChodHRwZmQgPT0gLTEpCi0gICAgICByZXR1cm4oLTEpOwotCi0gICAgaWYgKGFycmF5KSB7Ci0g ICAgICAgIGZvciAoaSA9IDA7IGkgPCBIVFRQSEVBRENOVDsgaSsrKQotICAgICAgICAgIGhlYWRl cnNbaV0gPSBOVUxMOwotICAgIH0KLSAgICBmaWxlbGVuID0gemNoa2kobG9jYWwpOwotICAgIGlm IChmaWxlbGVuIDwgMCkKLSAgICAgIHJldHVybigtMSk7Ci0KLSAgICAvKiBDb21wdXRlIGxlbmd0 aCBvZiByZXF1ZXN0IGhlYWRlciAqLwotICAgIGxlbiA9IDk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFBPU1QgKi8KLSAgICBsZW4gKz0gc3RybGVuKEhUVFBfVkVSU0lPTik7Ci0gICAg bGVuICs9IHN0cmxlbihyZW1vdGUpOwotICAgIGxlbiArPSAxNjsKLQotICAgIGlmICggaGRybGlz dCApIHsKLSAgICAgICAgZm9yIChpID0gMDsgaGRybGlzdFtpXTsgaSsrKQotICAgICAgICAgICAg bGVuICs9IHN0cmxlbihoZHJsaXN0W2ldKSArIDI7Ci0gICAgfQotICAgIGxlbiArPSBzdHJsZW4o aHR0cF9ob3N0X3BvcnQpICsgODsKLQotICAgIGlmIChhZ2VudCkKLSAgICAgIGxlbiArPSAxMyAr IHN0cmxlbihhZ2VudCk7Ci0gICAgaWYgKHVzZXIpIHsKLSAgICAgICAgaWYgKCFwd2QpIHsKLSAg ICAgICAgICAgIHJlYWRwYXNzKCJQYXNzd29yZDogIixwYXNzd2QsNjQpOwotICAgICAgICAgICAg cHdkID0gcGFzc3dkOwotICAgICAgICB9Ci0gICAgICAgIGNrbWFrbXNnKGI2NGluLHNpemVvZihi NjRpbiksdXNlciwiOiIscHdkLE5VTEwpOwotICAgICAgICBqID0gYjh0b2I2NChiNjRpbixzdHJs ZW4oYjY0aW4pLGI2NG91dCwyNTYpOwotICAgICAgICBtZW1zZXQocHdkLDAsc3RybGVuKHB3ZCkp OwotICAgICAgICBpZiAoaiA8IDApCi0gICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgYjY0 b3V0W2pdID0gJ1wwJzsKLSAgICAgICAgbGVuICs9IGogKyAyNDsKLSAgICB9Ci0gICAgbGVuICs9 IDE2ICsgc3RybGVuKG1pbWUpOyAgICAgICAgICAgLyogQ29udGVudC10eXBlOiAqLwotICAgIGxl biArPSAzMjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnRlbnQtbGVuZ3RoOiAqLwot ICAgIGxlbiArPSAzMjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERhdGU6ICovCi0jaWZk ZWYgSFRUUF9DTE9TRQotICAgIGxlbiArPSAxOTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IENvbm5lY3Rpb246IGNsb3NlICovCi0jZW5kaWYKLSAgICBsZW4gKz0gMzsgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBibGFuayBsaW5lICsgbnVsbCAqLwotCi0gICAgcmVxdWVzdCA9IG1h bGxvYyhsZW4pOwotICAgIGlmICghcmVxdWVzdCkKLSAgICAgIHJldHVybigtMSk7Ci0KLSAgICBz cHJpbnRmKHJlcXVlc3QsIlBPU1QgJXMgJXNcclxuIixyZW1vdGUsSFRUUF9WRVJTSU9OKTsKLSAg ICBja3N0cm5jYXQocmVxdWVzdCwiRGF0ZTogIixsZW4pOwotICAgIGNrc3RybmNhdChyZXF1ZXN0 LGh0dHBfbm93KCksbGVuKTsKLSAgICBja3N0cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVuKTsKLSAg ICBja3N0cm5jYXQocmVxdWVzdCwiSG9zdDogIiwgbGVuKTsKLSAgICBja3N0cm5jYXQocmVxdWVz dCxodHRwX2hvc3RfcG9ydCwgbGVuKTsKLSAgICBja3N0cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVu KTsKLSAgICBpZiAoYWdlbnQpIHsKLSAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsIlVzZXItYWdl bnQ6ICIsbGVuKTsKLSAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsYWdlbnQsbGVuKTsKLSAgICAg ICAgY2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7Ci0gICAgfQotICAgIGlmICh1c2VyKSB7 Ci0gICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LCJBdXRob3JpemF0aW9uOiBCYXNpYyAiLGxlbik7 Ci0gICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LGI2NG91dCxsZW4pOwotICAgICAgICBja3N0cm5j YXQocmVxdWVzdCwiXHJcbiIsbGVuKTsKLSAgICB9Ci0gICAgaWYgKCBoZHJsaXN0ICkgewotICAg ICAgICBmb3IgKGkgPSAwOyBoZHJsaXN0W2ldOyBpKyspIHsKLSAgICAgICAgICAgIGNrc3RybmNh dChyZXF1ZXN0LGhkcmxpc3RbaV0sbGVuKTsKLSAgICAgICAgICAgIGNrc3RybmNhdChyZXF1ZXN0 LCJcclxuIixsZW4pOwotICAgICAgICB9Ci0gICAgfQotICAgIGNrc3RybmNhdChyZXF1ZXN0LCJD b250ZW50LXR5cGU6ICIsbGVuKTsKLSAgICBja3N0cm5jYXQocmVxdWVzdCxtaW1lLGxlbik7Ci0g ICAgY2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7Ci0jaWZkZWYgSFRUUF9DTE9TRQotICAg IGNrc3RybmNhdChyZXF1ZXN0LCJDb25uZWN0aW9uOiBjbG9zZVxyXG4iLGxlbik7Ci0jZW5kaWYK LSAgICBzcHJpbnRmKGJ1ZiwiQ29udGVudC1sZW5ndGg6ICVkXHJcbiIsZmlsZWxlbik7IC8qIHNh ZmUgKi8KLSAgICBja3N0cm5jYXQocmVxdWVzdCxidWYsbGVuKTsKLSAgICBja3N0cm5jYXQocmVx dWVzdCwiXHJcbiIsbGVuKTsKLSNpZmRlZiBDT01NRU5UCi0gICAgLyogVGhpcyBpcyBhcHBhcmVu dGx5IGEgbWlzdGFrZSAtIHRoZSBwcmV2aW91cyBja3N0cm5jYXQoKSBhbHJlYWR5ICAqLwotICAg IC8qIGFwcGVuZGVkIGEgYmxhbmsgbGluZSB0byB0aGUgcmVxdWVzdC4gIFRoZXJlIHNob3VsZCBv bmx5IGJlIG9uZS4gKi8KLSAgICAvKiBTZXJ2ZXJzIGFyZSBub3QgcmVxdWlyZWQgYnkgUkZDIDI2 MTYgdG8gaWdub3JlIGV4dHJhbmVvdXMgZW1wdHkgICovCi0gICAgLyogbGluZXMuICAtZmRjLCAy OCBBdWcgMjAwNS4gKi8KLSAgICBja3N0cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVuKTsKLSNlbmRp ZgkvKiBDT01NRU5UICovCi0KLSAgICAvKiBOb3cgd2UgaGF2ZSB0aGUgY29udGVudHMgb2YgdGhl IGZpbGUgKi8KLSAgcG9zdG9wZW46Ci0gICAgaWYgKHpvcGVuaShaSUZJTEUsbG9jYWwpKSB7Ci0g ICAgICBwb3N0cmVxOgotICAgICAgICBpZiAoaHR0cF90b2woKENIQVIgKilyZXF1ZXN0LHN0cmxl bihyZXF1ZXN0KSkgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBodHRwX2Nsb3NlKCk7Ci0g ICAgICAgICAgICBpZiAoIGZpcnN0ICkgewotICAgICAgICAgICAgICAgIGZpcnN0LS07Ci0gICAg ICAgICAgICAgICAgaHR0cF9yZW9wZW4oKTsKLSAgICAgICAgICAgICAgICBnb3RvIHBvc3RyZXE7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByYyA9IC0xOwotICAgICAgICAgICAgemNsb3Nl KFpJRklMRSk7Ci0gICAgICAgICAgICBnb3RvIHBvc3RleGl0OwotICAgICAgICB9Ci0KLSAgICAg ICAgaSA9IDA7Ci0gICAgICAgIHdoaWxlICh6Y2hpbihaSUZJTEUsJmNoKSA9PSAwKSB7Ci0gICAg ICAgICAgICBidWZbaSsrXSA9IGNoOwotICAgICAgICAgICAgaWYgKGkgPT0gSFRUUEJVRkxFTikg ewotICAgICAgICAgICAgICAgIGh0dHBfdG9sKChDSEFSICopYnVmLEhUVFBCVUZMRU4pOwotICAg ICAgICAgICAgICAgIGkgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlm IChpID4gMCkKLSAgICAgICAgICBodHRwX3RvbCgoQ0hBUiAqKWJ1ZixIVFRQQlVGTEVOKTsKLSAg ICAgICAgemNsb3NlKFpJRklMRSk7Ci0KLSAgICAgICAgLyogUHJvY2VzcyB0aGUgcmVzcG9uc2Ug aGVhZGVycyAqLwotICAgICAgICBsb2NhbF90ID0gdGltZShOVUxMKTsKLSAgICAgICAgbnVsbGxp bmUgPSAwOwotICAgICAgICBpID0gMDsKLSAgICAgICAgbGVuID0gLTE7Ci0gICAgICAgIHdoaWxl ICghbnVsbGxpbmUgJiYgKGNoID0gaHR0cF9pbmMoMCkpID49IDAgJiYgaSA8IEhUVFBCVUZMRU4p IHsKLSAgICAgICAgICAgIGJ1ZltpXSA9IGNoOwotICAgICAgICAgICAgaWYgKGJ1ZltpXSA9PSAx MCkgeyAgICAgICAgIC8qIGZvdW5kIGVuZCBvZiBsaW5lICovCi0gICAgICAgICAgICAgICAgaWYg KGkgPiAwICYmIGJ1ZltpLTFdID09IDEzKQotICAgICAgICAgICAgICAgICAgaS0tOwotICAgICAg ICAgICAgICAgIGlmIChpIDwgMSkKLSAgICAgICAgICAgICAgICAgIG51bGxsaW5lID0gMTsKLSAg ICAgICAgICAgICAgICBidWZbaV0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGlmIChhcnJheSAm JiAhbnVsbGxpbmUgJiYgaGRjbnQgPCBIVFRQSEVBRENOVCkKLSAgICAgICAgICAgICAgICAgIG1h a2VzdHIoJmhlYWRlcnNbaGRjbnQrK10sYnVmKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNrc3Ry Y21wKGJ1ZiwiSFRUUCIsNCwwKSkgewotICAgICAgICAgICAgICAgICAgICBodHRwX2ZuZCA9IDE7 Ci0gICAgICAgICAgICAgICAgICAgIGogPSBja2luZGV4KCIgIixidWYsMCwwLDApOwotICAgICAg ICAgICAgICAgICAgICBwID0gJmJ1ZltqXTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGlz c3BhY2UoKnApKQotICAgICAgICAgICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgICAgICAg ICAgc3dpdGNoIChwWzBdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMSc6ICAgICAg ICAgLyogSW5mb3JtYXRpb25hbCBtZXNzYWdlICovCi0gICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlICcyJzogICAgICAgICAvKiBTdWNjZXNz ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg ICBjYXNlICczJzogICAgICAgICAvKiBSZWRpcmVjdGlvbiAqLwotICAgICAgICAgICAgICAgICAg ICAgIGNhc2UgJzQnOiAgICAgICAgIC8qIENsaWVudCBmYWlsdXJlICovCi0gICAgICAgICAgICAg ICAgICAgICAgY2FzZSAnNSc6ICAgICAgICAgLyogU2VydmVyIGZhaWx1cmUgKi8KLSAgICAgICAg ICAgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAvKiBVbmtub3duICovCi0gICAgICAgICAg ICAgICAgICAgICAgICBpZiAoIXF1aWV0KQotICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlu dGYoIkZhaWx1cmU6IFNlcnZlciByZXBvcnRzICVzXG4iLHApOwotICAgICAgICAgICAgICAgICAg ICAgICAgcmMgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg ICBodHRwX3NldF9jb2RlX3JlcGx5KHApOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg ICAgICAgICAgICAgICAgIGlmICghY2tzdHJjbXAoYnVmLCJDb25uZWN0aW9uOiIsMTEsMCkpIHsK LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2tpbmRleCgiY2xvc2UiLGJ1ZiwxMSwwLDAp ICE9IDAgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlY29uID0gMTsKLSAgICAg ICAgICAgICAgICAgICAgfSBlbHNlIGlmICghY2tzdHJjbXAoYnVmLCJDb250ZW50LUxlbmd0aDoi LDE1LDApKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZW4gPSBhdG9pKCZidWZbMTZdKTsK LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghY2tzdHJjbXAoYnVmLCJUcmFuc2Zlci1F bmNvZGluZzoiLDE4LDApKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNraW5kZXgo ImNodW5rZWQiLGJ1ZiwxOCwwLDApICE9IDAgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNodW5rZWQgPSAxOwotCQkJZGVidWcoRjEwMSwiaHR0cF9wb3N0IGNodW5rZWQiLCIiLGNodW5r ZWQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGRp bykKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJXNcbiIsYnVmKTsKLSAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaSA9IDA7Ci0gICAgICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBp ZiAoY2ggPCAwICYmIGZpcnN0KSB7Ci0gICAgICAgICAgICBmaXJzdC0tOwotICAgICAgICAgICAg aHR0cF9jbG9zZSgpOwotICAgICAgICAgICAgaHR0cF9yZW9wZW4oKTsKLSAgICAgICAgICAgIGdv dG8gcG9zdG9wZW47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGh0dHBfZm5kID09IDApIHsKLSAg ICAgICAgICAgIHJjID0gLTE7Ci0gICAgICAgICAgICBjbG9zZWNvbiA9IDE7Ci0gICAgICAgICAg ICBnb3RvIHBvc3RleGl0OwotICAgICAgICB9Ci0KLSAgICAgICAgLyogQW55IHJlc3BvbnNlIGRh dGE/ICovCi0gICAgICAgIGlmICggZGVzdCAmJiBkZXN0WzBdICkgewotICAgICAgICAgICAgaWYg KHpvcGVubyhaT0ZJTEUsZGVzdCxOVUxMLE5VTEwpKQotICAgICAgICAgICAgICAgIHpmaWxlID0g MTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByYyA9IC0xOwotICAgICAgICB9 Ci0KLSAgICAgICAgaWYgKCBjaHVua2VkICkgewotICAgICAgICAgICAgd2hpbGUgKChsZW4gPSBo dHRwX2dldF9jaHVua19sZW4oKSkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGxlbiAm JiAoY2ggPSBodHRwX2luYygwKSkgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICBsZW4tLTsK LSAgICAgICAgICAgICAgICAgICAgaWYgKCB6ZmlsZSApCi0gICAgICAgICAgICAgICAgICAgICAg ICB6Y2hvdXQoWk9GSUxFLChDSEFSKWNoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGRp byApCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25vYygoQ0hBUiljaCk7Ci0gICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgoY2ggPSBodHRwX2luYygwKSkgIT0gQ1IpCi0g ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGlmICgoY2ggPSBodHRw X2luYygwKSkgIT0gTEYpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg fQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgd2hpbGUgKGxlbiAmJiAoY2ggPSBodHRw X2luYygwKSkgPj0gMCkgewotICAgICAgICAgICAgICAgIGxlbi0tOwotICAgICAgICAgICAgICAg IGlmICggemZpbGUgKQotICAgICAgICAgICAgICAgICAgICB6Y2hvdXQoWk9GSUxFLChDSEFSKWNo KTsKLSAgICAgICAgICAgICAgICBpZiAoIHN0ZGlvICkKLSAgICAgICAgICAgICAgICAgICAgY29u b2MoKENIQVIpY2gpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCB6 ZmlsZSApCi0gICAgICAgICAgICB6Y2xvc2UoWk9GSUxFKTsKLQotICAgICAgICBpZiAoIGNodW5r ZWQgKSB7ICAgICAgICAgICAgLyogUGFyc2UgVHJhaWxpbmcgSGVhZGVycyAqLwotICAgICAgICAg ICAgbnVsbGxpbmUgPSAwOwotICAgICAgICAgICAgd2hpbGUgKCFudWxsbGluZSAmJiAoY2ggPSBo dHRwX2luYygwKSkgPj0gMCAmJiBpIDwgSFRUUEJVRkxFTikgewotICAgICAgICAgICAgICAgIGJ1 ZltpXSA9IGNoOwotICAgICAgICAgICAgICAgIGlmICggYnVmW2ldID09IDEwICkgeyAvKiBmb3Vu ZCBlbmQgb2YgbGluZSAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgYnVmW2kt MV0gPT0gMTMpCi0gICAgICAgICAgICAgICAgICAgICAgaS0tOwotICAgICAgICAgICAgICAgICAg ICBpZiAoaSA8IDEpCi0gICAgICAgICAgICAgICAgICAgICAgbnVsbGxpbmUgPSAxOwotICAgICAg ICAgICAgICAgICAgICBidWZbaV0gPSAnXDAnOwotICAgICAgICAgICAgICAgICAgICBpZiAoYXJy YXkgJiYgIW51bGxsaW5lICYmIGhkY250IDwgSFRUUEhFQURDTlQpCi0gICAgICAgICAgICAgICAg ICAgICAgICBtYWtlc3RyKCZoZWFkZXJzW2hkY250KytdLGJ1Zik7Ci0gICAgICAgICAgICAgICAg ICAgIGlmICghY2tzdHJjbXAoYnVmLCJDb25uZWN0aW9uOiIsMTEsMCkpIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGlmICggY2tpbmRleCgiY2xvc2UiLGJ1ZiwxMSwwLDApICE9IDAgKQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlY29uID0gMTsKLSAgICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgICAgICBpID0gMDsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmMgPSAtMTsKLSAgICB9Ci0K LSAgcG9zdGV4aXQ6Ci0gICAgaWYgKGFycmF5KQotICAgICAgICBodHRwX21rYXJyYXkoaGVhZGVy cyxoZGNudCxhcnJheSk7Ci0gICAgaWYgKGNsb3NlY29uKQotICAgICAgICBodHRwX2Nsb3NlKCk7 Ci0gICAgZnJlZShyZXF1ZXN0KTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgaGRjbnQ7IGkrKykgewot ICAgICAgICBpZiAoaGVhZGVyc1tpXSkKLSAgICAgICAgICBmcmVlKGhlYWRlcnNbaV0pOwotICAg IH0KLSAgICByZXR1cm4ocmMpOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotaHR0cF9jb25u ZWN0KGludCBzb2NrZXQsIGNoYXIgKiBhZ2VudCwgY2hhciAqKiBoZHJsaXN0LCBjaGFyICogdXNl ciwKLSAgICAgICAgICAgICBjaGFyICogcHdkLCBjaGFyIGFycmF5LCBjaGFyICogaG9zdF9wb3J0 KQotI2Vsc2UKLWh0dHBfY29ubmVjdChzb2NrZXQsIGFnZW50LCBoZHJsaXN0LCB1c2VyLCBwd2Qs IGFycmF5LCBob3N0X3BvcnQpCi0gICAgaW50IHNvY2tldDsKLSAgICBjaGFyICogYWdlbnQ7IGNo YXIgKiogaGRybGlzdDsgY2hhciAqIHVzZXI7Ci0gICAgY2hhciAqIHB3ZDsgY2hhciBhcnJheTsg Y2hhciAqIGhvc3RfcG9ydDsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGNoYXIgKiBy ZXF1ZXN0PU5VTEw7Ci0gICAgaW50ICAgIGksIGosIGxlbiA9IDAsIGhkY250ID0gMCwgcmMgPSAw OwotICAgIGludCAgICBodHRwX2ZuZCA9IDA7Ci0gICAgY2hhciAgIGJ1ZltIVFRQQlVGTEVOXSwg KnAsIGNoOwotICAgIGludCAgICBudWxsbGluZTsKLSAgICB0aW1lX3QgbW9kX3Q7Ci0gICAgdGlt ZV90IHNydl90OwotICAgIHRpbWVfdCBsb2NhbF90OwotICAgIGNoYXIgcGFzc3dkWzY0XTsKLSAg ICBjaGFyIGI2NGluWzEyOF07Ci0gICAgY2hhciBiNjRvdXRbMjU2XTsKLSAgICBjaGFyICogaGVh ZGVyc1tIVFRQSEVBRENOVF07Ci0gICAgaW50ICAgIGNvbm5lY3RlZCA9IDA7Ci0KLSAgICB0Y3Bf aHR0cF9wcm94eV9lcnJubyA9IDA7Ci0KLSAgICBpZiAoc29ja2V0ID09IC0xKQotICAgICAgcmV0 dXJuKC0xKTsKLQotICAgIGlmIChhcnJheSkgewotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgSFRU UEhFQURDTlQ7IGkrKykKLSAgICAgICAgICBoZWFkZXJzW2ldID0gTlVMTDsKLSAgICB9Ci0KLSAg ICAvKiBDb21wdXRlIGxlbmd0aCBvZiByZXF1ZXN0IGhlYWRlciAqLwotICAgIGxlbiA9IDEyOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDT05ORUNUICovCi0gICAgbGVuICs9IHN0cmxl bihIVFRQX1ZFUlNJT04pOwotICAgIGxlbiArPSBzdHJsZW4oaG9zdF9wb3J0KTsKLSAgICBsZW4g Kz0gKGludCkgc3RybGVuKGh0dHBfaG9zdF9wb3J0KSArIDg7Ci0gICAgbGVuICs9IDE2OwotICAg IGxlbiArPSBzdHJsZW4oIlByb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmVcclxuIik7Ci0gICAg aWYgKCBoZHJsaXN0ICkgewotICAgICAgICBmb3IgKGkgPSAwOyBoZHJsaXN0W2ldOyBpKyspCi0g ICAgICAgICAgICBsZW4gKz0gc3RybGVuKGhkcmxpc3RbaV0pICsgMjsKLSAgICB9Ci0gICAgaWYg KGFnZW50ICYmIGFnZW50WzBdKQotICAgICAgbGVuICs9IDEzICsgc3RybGVuKGFnZW50KTsKLSAg ICBpZiAodXNlciAmJiB1c2VyWzBdKSB7Ci0gICAgICAgIGlmICghcHdkKSB7Ci0gICAgICAgICAg ICByZWFkcGFzcygiUGFzc3dvcmQ6ICIscGFzc3dkLDY0KTsKLSAgICAgICAgICAgIHB3ZCA9IHBh c3N3ZDsKLSAgICAgICAgfQotICAgICAgICBja21ha21zZyhiNjRpbixzaXplb2YoYjY0aW4pLHVz ZXIsIjoiLHB3ZCxOVUxMKTsKLSAgICAgICAgaiA9IGI4dG9iNjQoYjY0aW4sc3RybGVuKGI2NGlu KSxiNjRvdXQsMjU2KTsKLSAgICAgICAgbWVtc2V0KHB3ZCwwLHN0cmxlbihwd2QpKTsKLSAgICAg ICAgaWYgKGogPCAwKQotICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIGI2NG91dFtqXSA9 ICdcMCc7Ci0gICAgICAgIGxlbiArPSBqICsgNzI7Ci0gICAgfQotICAgIGxlbiArPSAzMjsgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIERhdGU6ICovCi0gICAgbGVuICs9IDM7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogYmxhbmsgbGluZSArIG51bGwgKi8KLQotICAgIHJlcXVlc3Qg PSBtYWxsb2MobGVuKTsKLSAgICBpZiAoIXJlcXVlc3QpCi0gICAgICByZXR1cm4oLTEpOwotCi0g ICAgc3ByaW50ZihyZXF1ZXN0LCJDT05ORUNUICVzICVzXHJcbiIsaG9zdF9wb3J0LEhUVFBfVkVS U0lPTik7Ci0gICAgY2tzdHJuY2F0KHJlcXVlc3QsIkRhdGU6ICIsbGVuKTsKLSNpZmRlZiBDTURB VEUyVE0KLSAgICBja3N0cm5jYXQocmVxdWVzdCxodHRwX25vdygpLGxlbik7Ci0jZWxzZQotICAg IHN0cmNhdChyZXF1ZXN0LC4uLik7Ci0jZW5kaWYgLyogQ01EQVRFMlRNICovCi0gICAgY2tzdHJu Y2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7Ci0gICAgY2tzdHJuY2F0KHJlcXVlc3QsIkhvc3Q6ICIs IGxlbik7Ci0gICAgY2tzdHJuY2F0KHJlcXVlc3QsaHR0cF9ob3N0X3BvcnQsIGxlbik7Ci0gICAg Y2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7Ci0gICAgaWYgKGFnZW50ICYmIGFnZW50WzBd KSB7Ci0gICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LCJVc2VyLWFnZW50OiAiLGxlbik7Ci0gICAg ICAgIGNrc3RybmNhdChyZXF1ZXN0LGFnZW50LGxlbik7Ci0gICAgICAgIGNrc3RybmNhdChyZXF1 ZXN0LCJcclxuIixsZW4pOwotICAgIH0KLSAgICBpZiAodXNlciAmJiB1c2VyWzBdKSB7Ci0gICAg ICAgIGNrc3RybmNhdChyZXF1ZXN0LCJQcm94eS1hdXRob3JpemF0aW9uOiBCYXNpYyAiLGxlbik7 Ci0gICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LGI2NG91dCxsZW4pOwotICAgICAgICBja3N0cm5j YXQocmVxdWVzdCwiXHJcbiIsbGVuKTsKLSAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsIkV4dGVu c2lvbjogU2VjdXJpdHkvUmVtb3RlLVBhc3NwaHJhc2VcclxuIixsZW4pOwotICAgIH0KLSAgICBj a3N0cm5jYXQocmVxdWVzdCwiUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZVxyXG4iLGxlbik7 Ci0gICAgaWYgKCBoZHJsaXN0ICkgewotICAgICAgICBmb3IgKGkgPSAwOyBoZHJsaXN0W2ldOyBp KyspIHsKLSAgICAgICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LGhkcmxpc3RbaV0sbGVuKTsKLSAg ICAgICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixsZW4pOwotICAgICAgICB9Ci0gICAg fQotICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixsZW4pOwotICAgIGxlbiA9IHN0cmxlbihy ZXF1ZXN0KTsKLQotI2lmZGVmIFRDUElQTElCCi0gICAgLyogU2VuZCByZXF1ZXN0ICovCi0gICAg aWYgKHNvY2tldF93cml0ZShzb2NrZXQsKENIQVIgKilyZXF1ZXN0LHN0cmxlbihyZXF1ZXN0KSkg PCAwKSB7Ci0gICAgICByYyA9IC0xOwotICAgICAgZ290byBjb25uZXhpdDsKLSAgICB9Ci0jZWxz ZQotICAgIGlmICh3cml0ZShzb2NrZXQsKENIQVIgKilyZXF1ZXN0LHN0cmxlbihyZXF1ZXN0KSkg PCAwKSB7IC8qIFNlbmQgcmVxdWVzdCAqLwotICAgICAgICByYyA9IC0xOwotICAgICAgICBnb3Rv IGNvbm5leGl0OwotICAgIH0KLSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotCi0gICAgLyogUHJvY2Vz cyB0aGUgcmVzcG9uc2UgaGVhZGVycyAqLwotICAgIGxvY2FsX3QgPSB0aW1lKE5VTEwpOwotICAg IG51bGxsaW5lID0gMDsKLSAgICBpID0gMDsKLSAgICB3aGlsZSAoIW51bGxsaW5lICYmCi0jaWZk ZWYgVENQSVBMSUIKLSAgICAgICAgICAgKHNvY2tldF9yZWFkKHNvY2tldCwmY2gsMSkgPT0gMSkg JiYKLSNlbHNlCi0gICAgICAgICAgIChyZWFkKHNvY2tldCwmY2gsMSkgPT0gMSkgJiYKLSNlbmRp ZiAvKiBUQ1BJUExJQiAqLwotICAgICAgICAgICBpIDwgSFRUUEJVRkxFTikgewotICAgICAgICBi dWZbaV0gPSBjaDsKLSAgICAgICAgaWYgKGJ1ZltpXSA9PSAxMCkgeyAgICAgICAgIC8qIGZvdW5k IGVuZCBvZiBsaW5lICovCi0gICAgICAgICAgICBpZiAoaSA+IDAgJiYgYnVmW2ktMV0gPT0gMTMp Ci0gICAgICAgICAgICAgIGktLTsKLSAgICAgICAgICAgIGlmIChpIDwgMSkKLSAgICAgICAgICAg ICAgbnVsbGxpbmUgPSAxOwotICAgICAgICAgICAgYnVmW2ldID0gJ1wwJzsKLQotICAgICAgICAg ICAgaWYgKGFycmF5ICYmICFudWxsbGluZSAmJiBoZGNudCA8IEhUVFBIRUFEQ05UKQotICAgICAg ICAgICAgICAgIG1ha2VzdHIoJmhlYWRlcnNbaGRjbnQrK10sYnVmKTsKLSAgICAgICAgICAgIGlm ICghY2tzdHJjbXAoYnVmLCJIVFRQIiw0LDApKSB7Ci0gICAgICAgICAgICAgICAgaHR0cF9mbmQg PSAxOwotICAgICAgICAgICAgICAgIGogPSBja2luZGV4KCIgIixidWYsMCwwLDApOwotICAgICAg ICAgICAgICAgIHAgPSAmYnVmW2pdOwotICAgICAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKCpw KSkKLSAgICAgICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgICAgICB0Y3BfaHR0cF9wcm94 eV9lcnJubyA9IGF0b2kocCk7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChwWzBdKSB7Ci0gICAg ICAgICAgICAgICAgICBjYXNlICcxJzogICAgICAgICAgICAgLyogSW5mb3JtYXRpb25hbCBtZXNz YWdlICovCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2Fz ZSAnMic6ICAgICAgICAgICAgIC8qIFN1Y2Nlc3MgKi8KLSAgICAgICAgICAgICAgICAgICAgY29u bmVjdGVkID0gMTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg ICBjYXNlICczJzogICAgICAgICAgICAgLyogUmVkaXJlY3Rpb24gKi8KLSAgICAgICAgICAgICAg ICAgIGNhc2UgJzQnOiAgICAgICAgICAgICAvKiBDbGllbnQgZmFpbHVyZSAqLwotICAgICAgICAg ICAgICAgICAgY2FzZSAnNSc6ICAgICAgICAgICAgIC8qIFNlcnZlciBmYWlsdXJlICovCi0gICAg ICAgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgLyogVW5rbm93biAqLwotICAgICAg ICAgICAgICAgICAgICBpZiAoIXF1aWV0KQotICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigi RmFpbHVyZTogU2VydmVyIHJlcG9ydHMgJXNcbiIscCk7Ci0gICAgICAgICAgICAgICAgICAgIHJj ID0gLTE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGh0dHBfc2V0X2NvZGVf cmVwbHkocCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByaW50Zigi JXNcbiIsYnVmKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGkgPSAwOwotICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgaSsrOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICggaHR0 cF9mbmQgPT0gMCApCi0gICAgICAgIHJjID0gLTE7Ci0KLSAgICBpZiAoYXJyYXkpCi0gICAgICAg IGh0dHBfbWthcnJheShoZWFkZXJzLGhkY250LGFycmF5KTsKLQotICBjb25uZXhpdDoKLSAgICBp ZiAoICFjb25uZWN0ZWQgKSB7Ci0gICAgICAgIGlmICggc29ja2V0ID09IHR0eWZkICkgewotICAg ICAgICAgICAgdHRjbG9zKDApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCBzb2NrZXQg PT0gaHR0cGZkICkgewotICAgICAgICAgICAgaHR0cF9jbG9zZSgpOwotICAgICAgICB9Ci0gICAg fQotCi0gICAgZnJlZShyZXF1ZXN0KTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgaGRjbnQ7IGkrKykg ewotICAgICAgICBpZiAoaGVhZGVyc1tpXSkKLSAgICAgICAgICBmcmVlKGhlYWRlcnNbaV0pOwot ICAgIH0KLSAgICByZXR1cm4ocmMpOwotfQotI2VuZGlmIC8qIE5PSFRUUCAqLwotCi0jaWZkZWYg Q0tfRE5TX1NSVgotCi0jZGVmaW5lIElOQ1JfQ0hFQ0soeCx5KSB4ICs9IHk7IGlmICh4ID4gc2l6 ZSArIGFuc3dlci5ieXRlcykgZ290byBkbnNvdXQKLSNkZWZpbmUgQ0hFQ0soeCx5KSBpZiAoeCAr IHkgPiBzaXplICsgYW5zd2VyLmJ5dGVzKSBnb3RvIGRuc291dAotI2RlZmluZSBOVE9IU1AoeCx5 KSB4WzBdIDw8IDggfCB4WzFdOyB4ICs9IHkKLQotI2lmbmRlZiBDS1FVRVJZVFlQRQotI2lmZGVm IFVOSVhXQVJFCi0jaWZuZGVmIFVXNwotI2RlZmluZSBDS1FVRVJZVFlQRSBDSEFSCi0jZW5kaWYg LyogVVc3ICovCi0jZW5kaWYgLyogVU5JWFdBUkUgKi8KLSNlbmRpZiAvKiBDS1FVRVJZVFlQRSAq LwotCi0jaWZuZGVmIENLUVVFUllUWVBFCi0jZGVmaW5lIENLUVVFUllUWVBFIGNoYXIKLSNlbmRp ZiAvKiBDS1FVRVJZVFlQRSAqLwotCi0vKiAxIGlzIHN1Y2Nlc3MsIDAgaXMgZmFpbHVyZSAqLwot aW50Ci1sb2NhdGVfc3J2X2Rucyhob3N0LCBzZXJ2aWNlLCBwcm90b2NvbCwgYWRkcl9wcCwgbmFk ZHJzKQotICAgIGNoYXIgKmhvc3Q7Ci0gICAgY2hhciAqc2VydmljZTsKLSAgICBjaGFyICpwcm90 b2NvbDsKLSAgICBzdHJ1Y3Qgc29ja2FkZHIgKiphZGRyX3BwOwotICAgIGludCAqbmFkZHJzOwot ewotICAgIGludCBub3V0LCBqLCBjb3VudDsKLSAgICB1bmlvbiB7Ci0gICAgICAgIHVuc2lnbmVk IGNoYXIgYnl0ZXNbMjA0OF07Ci0gICAgICAgIEhFQURFUiBoZHI7Ci0gICAgfSBhbnN3ZXI7Ci0g ICAgdW5zaWduZWQgY2hhciAqcD1OVUxMOwotICAgIENLUVVFUllUWVBFIHF1ZXJ5W01BWF9ETlNf TkFNRUxFTl07Ci0jaWZkZWYgQ0tfQU5TSUMKLSAgICBjb25zdCBjaGFyICogaDsKLSNlbHNlCi0g ICAgY2hhciAqIGg7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSAgICBzdHJ1Y3Qgc29ja2FkZHIg KmFkZHIgPSBOVUxMOwotICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gTlVMTDsKLSAgICBz dHJ1Y3QgaG9zdGVudCAqaHAgPSBOVUxMOwotICAgIGludCB0eXBlLCBjbGFzczsKLSAgICBpbnQg cHJpb3JpdHksIHdlaWdodCwgc2l6ZSwgbGVuLCBudW1hbnN3ZXJzLCBudW1xdWVyaWVzLCByZGxl bjsKLSAgICB1bnNpZ25lZCBzaG9ydCBwb3J0OwotI2lmZGVmIENLX0FOU0lDCi0gICAgY29uc3QK LSNlbmRpZiAvKiBDS19BTlNJQyAqLwotICAgICAgaW50IGhkcnNpemUgPSBzaXplb2YoSEVBREVS KTsKLSAgICBzdHJ1Y3Qgc3J2X2Ruc19lbnRyeSB7Ci0gICAgICAgIHN0cnVjdCBzcnZfZG5zX2Vu dHJ5ICpuZXh0OwotICAgICAgICBpbnQgcHJpb3JpdHk7Ci0gICAgICAgIGludCB3ZWlnaHQ7Ci0g ICAgICAgIHVuc2lnbmVkIHNob3J0IHBvcnQ7Ci0gICAgICAgIGNoYXIgKmhvc3Q7Ci0gICAgfTsK LSAgICBzdHJ1Y3Qgc3J2X2Ruc19lbnRyeSAqaGVhZCA9IE5VTEw7Ci0gICAgc3RydWN0IHNydl9k bnNfZW50cnkgKnNydiA9IE5VTEwsICplbnRyeSA9IE5VTEw7Ci0gICAgY2hhciAqIHMgPSBOVUxM OwotCi0gICAgbm91dCA9IDA7Ci0gICAgYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgbWFsbG9j KHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKTsKLSAgICBpZiAoYWRkciA9PSBOVUxMKQotICAgICAg cmV0dXJuIDA7Ci0KLSAgICBjb3VudCA9IDE7Ci0KLSAgICAvKgotICAgICAqIEZpcnN0IGJ1aWxk IGEgcXVlcnkgb2YgdGhlIGZvcm06Ci0gICAgICoKLSAgICAgKiAgIHNlcnZpY2UucHJvdG9jb2wu aG9zdAotICAgICAqCi0gICAgICogd2hpY2ggd2lsbCBtb3N0IGxpa2VseSBiZSBzb21ldGhpbmcg bGlrZToKLSAgICAgKgotICAgICAqICAgX3RlbG5ldC5fdGNwLmhvc3QKLSAgICAgKgotICAgICAq LwotICAgIGlmICgoKGludClzdHJsZW4oc2VydmljZSkgKyBzdHJsZW4ocHJvdG9jb2wpICsgc3Ry bGVuKGhvc3QpICsgNSkKLSAgICAgICAgPiBNQVhfRE5TX05BTUVMRU4KLSAgICAgICAgKQotICAg ICAgZ290byBkbnNvdXQ7Ci0KLSAgICAvKiBSZWFsbSBuYW1lcyBkb24ndCAobm9ybWFsbHkpIGVu ZCB3aXRoICIuIiwgYnV0IGlmIHRoZSBxdWVyeQotICAgICAgIGRvZXNuJ3QgZW5kIHdpdGggIi4i IGFuZCBkb2Vzbid0IGdldCBhbiBhbnN3ZXIgYXMgaXMsIHRoZQotICAgICAgIHJlc29sdiBjb2Rl IHdpbGwgdHJ5IGFwcGVuZGluZyB0aGUgbG9jYWwgZG9tYWluLiAgU2luY2UgdGhlCi0gICAgICAg cmVhbG0gbmFtZXMgYXJlIGFic29sdXRlcywgbGV0J3Mgc3RvcCB0aGF0LgotCi0gICAgICAgQnV0 IG9ubHkgaWYgYSBuYW1lIGhhcyBiZWVuIHNwZWNpZmllZC4gIElmIHdlIGFyZSBwZXJmb3JtaW5n Ci0gICAgICAgYSBzZWFyY2ggb24gdGhlIHByZWZpeCBhbG9uZSB0aGVuIHRoZSBpbnRlbnRpb24g aXMgdG8gYWxsb3cKLSAgICAgICB0aGUgbG9jYWwgZG9tYWluIG9yIGRvbWFpbiBzZWFyY2ggbGlz dHMgdG8gYmUgZXhwYW5kZWQuCi0gICAgKi8KLSAgICBoID0gaG9zdCArIHN0cmxlbiAoaG9zdCk7 Ci0gICAgY2ttYWt4bXNnKHF1ZXJ5LCBzaXplb2YocXVlcnkpLCAiXyIsc2VydmljZSwiLl8iLHBy b3RvY29sLCIuIiwgaG9zdCwKLSAgICAgICAgICAgICAgKChoID4gaG9zdCkgJiYgKGhbLTFdICE9 ICcuJyk/Ii4iOk5VTEwpLAotICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxM KTsKLQotICAgIHNpemUgPSByZXNfc2VhcmNoKHF1ZXJ5LCBDX0lOLCBUX1NSViwgYW5zd2VyLmJ5 dGVzLCBzaXplb2YoYW5zd2VyLmJ5dGVzKSk7Ci0KLSAgICBpZiAoc2l6ZSA8IGhkcnNpemUpCi0g ICAgICBnb3RvIGRuc291dDsKLQotICAgIC8qIFdlIGdvdCBhIHJlcGx5IC0gU2VlIGhvdyBtYW55 IGFuc3dlcnMgaXQgY29udGFpbnMuICovCi0KLSAgICBwID0gYW5zd2VyLmJ5dGVzOwotCi0gICAg bnVtcXVlcmllcyA9IG50b2hzKGFuc3dlci5oZHIucWRjb3VudCk7Ci0gICAgbnVtYW5zd2VycyA9 IG50b2hzKGFuc3dlci5oZHIuYW5jb3VudCk7Ci0KLSAgICBwICs9IHNpemVvZihIRUFERVIpOwot Ci0gICAgLyoKLSAgICAgKiBXZSBuZWVkIHRvIHNraXAgb3ZlciBhbGwgb2YgdGhlIHF1ZXN0aW9u cywgc28gd2UgaGF2ZSB0byBpdGVyYXRlCi0gICAgICogb3ZlciBldmVyeSBxdWVyeSByZWNvcmQu ICBkbl9leHBhbmQoKSBpcyBhYmxlIHRvIHRlbGwgdXMgdGhlIHNpemUKLSAgICAgKiBvZiBjb21w cmVzc2VkIEROUyBuYW1lcywgc28gd2UgdXNlIGl0LgotICAgICAqLwotICAgIHdoaWxlIChudW1x dWVyaWVzLS0pIHsKLSAgICAgICAgbGVuID0gZG5fZXhwYW5kKGFuc3dlci5ieXRlcyxhbnN3ZXIu Ynl0ZXMrc2l6ZSxwLHF1ZXJ5LHNpemVvZihxdWVyeSkpOwotICAgICAgICBpZiAobGVuIDwgMCkK LSAgICAgICAgICBnb3RvIGRuc291dDsKLSAgICAgICAgSU5DUl9DSEVDSyhwLCBsZW4gKyA0KTsK LSAgICB9Ci0KLSAgICAvKgotICAgICAqIFdlJ3JlIG5vdyBwb2ludGluZyBhdCB0aGUgYW5zd2Vy IHJlY29yZHMuICBPbmx5IHByb2Nlc3MgdGhlbSBpZgotICAgICAqIHRoZXkncmUgYWN0dWFsbHkg VF9TUlYgcmVjb3JkcyAodGhleSBtaWdodCBiZSBDTkFNRSByZWNvcmRzLAotICAgICAqIGZvciBp bnN0YW5jZSkuCi0gICAgICoKLSAgICAgKiBCdXQgaW4gYSBETlMgcmVwbHksIGlmIHlvdSBnZXQg YSBDTkFNRSB5b3UgYWx3YXlzIGdldCB0aGUgYXNzb2NpYXRlZAotICAgICAqICJyZWFsIiBSUiBm b3IgdGhhdCBDTkFNRS4gIFJGQyAxMDM0LCAzLjYuMjoKLSAgICAgKgotICAgICAqIENOQU1FIFJS cyBjYXVzZSBzcGVjaWFsIGFjdGlvbiBpbiBETlMgc29mdHdhcmUuICBXaGVuIGEgbmFtZSBzZXJ2 ZXIKLSAgICAgKiBmYWlscyB0byBmaW5kIGEgZGVzaXJlZCBSUiBpbiB0aGUgcmVzb3VyY2Ugc2V0 IGFzc29jaWF0ZWQgd2l0aCB0aGUKLSAgICAgKiBkb21haW4gbmFtZSwgaXQgY2hlY2tzIHRvIHNl ZSBpZiB0aGUgcmVzb3VyY2Ugc2V0IGNvbnNpc3RzIG9mIGEgQ05BTUUKLSAgICAgKiByZWNvcmQg d2l0aCBhIG1hdGNoaW5nIGNsYXNzLiAgSWYgc28sIHRoZSBuYW1lIHNlcnZlciBpbmNsdWRlcyB0 aGUgQ05BTUUKLSAgICAgKiByZWNvcmQgaW4gdGhlIHJlc3BvbnNlIGFuZCByZXN0YXJ0cyB0aGUg cXVlcnkgYXQgdGhlIGRvbWFpbiBuYW1lCi0gICAgICogc3BlY2lmaWVkIGluIHRoZSBkYXRhIGZp ZWxkIG9mIHRoZSBDTkFNRSByZWNvcmQuICBUaGUgb25lIGV4Y2VwdGlvbiB0bwotICAgICAqIHRo aXMgcnVsZSBpcyB0aGF0IHF1ZXJpZXMgd2hpY2ggbWF0Y2ggdGhlIENOQU1FIHR5cGUgYXJlIG5v dCByZXN0YXJ0ZWQuCi0gICAgICoKLSAgICAgKiBJbiBvdGhlciB3b3JkcywgQ05BTUVzIGRvIG5v dCBuZWVkIHRvIGJlIGV4cGFuZGVkIGJ5IHRoZSBjbGllbnQuCi0gICAgICovCi0gICAgd2hpbGUg KG51bWFuc3dlcnMtLSkgewotCi0gICAgICAgIC8qIEZpcnN0IGlzIHRoZSBuYW1lOyB1c2UgZG5f ZXhwYW5kKCkgdG8gZ2V0IHRoZSBjb21wcmVzc2VkIHNpemUuICovCi0gICAgICAgIGxlbiA9IGRu X2V4cGFuZChhbnN3ZXIuYnl0ZXMsYW5zd2VyLmJ5dGVzK3NpemUscCxxdWVyeSxzaXplb2YocXVl cnkpKTsKLSAgICAgICAgaWYgKGxlbiA8IDApCi0gICAgICAgICAgZ290byBkbnNvdXQ7Ci0gICAg ICAgIElOQ1JfQ0hFQ0socCwgbGVuKTsKLQotICAgICAgICBDSEVDSyhwLDIpOyAgICAgICAgICAg ICAgICAgICAgIC8qIFF1ZXJ5IHR5cGUgKi8KLSAgICAgICAgdHlwZSA9IE5UT0hTUChwLDIpOwot Ci0gICAgICAgIENIRUNLKHAsIDYpOyAgICAgICAgICAgICAgICAgICAgLyogUXVlcnkgY2xhc3Mg Ki8KLSAgICAgICAgY2xhc3MgPSBOVE9IU1AocCw2KTsgICAgICAgICAgICAvKiBBbHNvIHNraXAg b3ZlciA0LWJ5dGUgVFRMICovCi0KLSAgICAgICAgQ0hFQ0socCwyKTsgICAgICAgICAgICAgICAg ICAgICAvKiBSZWNvcmQgZGF0YSBsZW5ndGggKi8KLSAgICAgICAgcmRsZW4gPSBOVE9IU1AocCwy KTsKLSAgICAgICAgLyoKLSAgICAgICAgICogSWYgdGhpcyBpcyBhbiBTUlYgcmVjb3JkLCBwcm9j ZXNzIGl0LiAgUmVjb3JkIGZvcm1hdCBpczoKLSAgICAgICAgICoKLSAgICAgICAgICogUHJpb3Jp dHkKLSAgICAgICAgICogV2VpZ2h0Ci0gICAgICAgICAqIFBvcnQKLSAgICAgICAgICogU2VydmVy IG5hbWUKLSAgICAgICAgICovCi0gICAgICAgIGlmIChjbGFzcyA9PSBDX0lOICYmIHR5cGUgPT0g VF9TUlYpIHsKLSAgICAgICAgICAgIENIRUNLKHAsMik7Ci0gICAgICAgICAgICBwcmlvcml0eSA9 IE5UT0hTUChwLDIpOwotICAgICAgICAgICAgQ0hFQ0socCwgMik7Ci0gICAgICAgICAgICB3ZWln aHQgPSBOVE9IU1AocCwyKTsKLSAgICAgICAgICAgIENIRUNLKHAsIDIpOwotICAgICAgICAgICAg cG9ydCA9IE5UT0hTUChwLDIpOwotICAgICAgICAgICAgbGVuID0gZG5fZXhwYW5kKGFuc3dlci4K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlcywKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhbnN3ZXIuYnl0ZXMgKyBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg IHAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnksCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZW9mKHF1ZXJ5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 Ci0gICAgICAgICAgICBpZiAobGVuIDwgMCkKLSAgICAgICAgICAgICAgZ290byBkbnNvdXQ7Ci0g ICAgICAgICAgICBJTkNSX0NIRUNLKHAsIGxlbik7Ci0gICAgICAgICAgICAvKgotICAgICAgICAg ICAgICogV2UgZ290IGV2ZXJ5dGhpbmcuICBJbnNlcnQgaXQgaW50byBvdXIgbGlzdCwgYnV0IG1h a2Ugc3VyZQotICAgICAgICAgICAgICogaXQncyBpbiB0aGUgcmlnaHQgb3JkZXIuICBSaWdodCBu b3cgd2UgZG9uJ3QgZG8gYW55dGhpbmcKLSAgICAgICAgICAgICAqIHdpdGggdGhlIHdlaWdodCBm aWVsZAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBzcnYgPSAoc3RydWN0IHNydl9kbnNf ZW50cnkgKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBzcnZfZG5zX2VudHJ5KSk7Ci0gICAgICAgICAg ICBpZiAoc3J2ID09IE5VTEwpCi0gICAgICAgICAgICAgIGdvdG8gZG5zb3V0OwotCi0gICAgICAg ICAgICBzcnYtPnByaW9yaXR5ID0gcHJpb3JpdHk7Ci0gICAgICAgICAgICBzcnYtPndlaWdodCA9 IHdlaWdodDsKLSAgICAgICAgICAgIHNydi0+cG9ydCA9IHBvcnQ7Ci0gICAgICAgICAgICBtYWtl c3RyKCZzLChjaGFyICopcXVlcnkpOyAgLyogc3RyZHVwKCkgaXMgbm90IHBvcnRhYmxlICovCi0g ICAgICAgICAgICBzcnYtPmhvc3QgPSBzOwotCi0gICAgICAgICAgICBpZiAoaGVhZCA9PSBOVUxM IHx8IGhlYWQtPnByaW9yaXR5ID4gc3J2LT5wcmlvcml0eSkgewotICAgICAgICAgICAgICAgIHNy di0+bmV4dCA9IGhlYWQ7Ci0gICAgICAgICAgICAgICAgaGVhZCA9IHNydjsKLSAgICAgICAgICAg IH0gZWxzZQotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogQ29uZnVzaW5n LiAgSW5zZXJ0IGFuIGVudHJ5IGludG8gdGhpcyBzcG90IG9ubHkgaWY6Ci0gICAgICAgICAgICAg ICAgICogIC4gVGhlIG5leHQgcGVyc29uIGhhcyBhIGhpZ2hlciBwcmlvcml0eSAobG93ZXIKLSAg ICAgICAgICAgICAgICAgKiAgICBwcmlvcml0aWVzIGFyZSBwcmVmZXJyZWQpLCBvcjoKLSAgICAg ICAgICAgICAgICAgKiAgLiBUaGVyZSBpcyBubyBuZXh0IGVudHJ5ICh3ZSdyZSBhdCB0aGUgZW5k KQotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICBmb3IgKGVudHJ5ID0gaGVhZDsg ZW50cnkgIT0gTlVMTDsgZW50cnkgPSBlbnRyeS0+bmV4dCkKLSAgICAgICAgICAgICAgICBpZiAo KGVudHJ5LT5uZXh0ICYmCi0gICAgICAgICAgICAgICAgICAgICBlbnRyeS0+bmV4dC0+cHJpb3Jp dHkgPiBzcnYtPnByaW9yaXR5KSB8fAotICAgICAgICAgICAgICAgICAgICBlbnRyeS0+bmV4dCA9 PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNydi0+bmV4dCA9IGVudHJ5LT5uZXh0Owot ICAgICAgICAgICAgICAgICAgICBlbnRyeS0+bmV4dCA9IHNydjsKLSAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICBJ TkNSX0NIRUNLKHAsIHJkbGVuKTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIE5vdyB3ZSd2ZSBn b3QgYSBsaW5rZWQgbGlzdCBvZiBlbnRyaWVzIHNvcnRlZCBieSBwcmlvcml0eS4KLSAgICAgKiBT dGFydCBsb29raW5nIHVwIEEgcmVjb3JkcyBhbmQgcmV0dXJuaW5nIGFkZHJlc3Nlcy4KLSAgICAg Ki8KLSAgICBpZiAoaGVhZCA9PSBOVUxMKQotICAgICAgZ290byBkbnNvdXQ7Ci0KLSAgICBmb3Ig KGVudHJ5ID0gaGVhZDsgZW50cnkgIT0gTlVMTDsgZW50cnkgPSBlbnRyeS0+bmV4dCkgewotICAg ICAgICBocCA9IGdldGhvc3RieW5hbWUoZW50cnktPmhvc3QpOwotICAgICAgICBpZiAoaHAgIT0g MCkgewotCi0gICAgICAgICAgICAvKiBXYXRjaCBvdXQgLSBtZW1zZXQoKSBhbmQgbWVtY3B5KCkg YXJlIG5vdCBwb3J0YWJsZS4uLiAqLwotCi0gICAgICAgICAgICBzd2l0Y2ggKGhwLT5oX2FkZHJ0 eXBlKSB7Ci0gICAgICAgICAgICAgIGNhc2UgQUZfSU5FVDoKLSAgICAgICAgICAgICAgICBmb3Ig KGogPSAwOyBocC0+aF9hZGRyX2xpc3Rbal07IGorKykgewotICAgICAgICAgICAgICAgICAgICBz aW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopICZhZGRyW25vdXQrK107Ci0gICAgICAgICAgICAg ICAgICAgIG1lbXNldCAoKGNoYXIgKikgc2luLCAwLCBzaXplb2YgKHN0cnVjdCBzb2NrYWRkcikp OwotICAgICAgICAgICAgICAgICAgICBzaW4tPnNpbl9mYW1pbHkgPSBocC0+aF9hZGRydHlwZTsK LSAgICAgICAgICAgICAgICAgICAgc2luLT5zaW5fcG9ydCA9IGh0b25zKGVudHJ5LT5wb3J0KTsK LSAgICAgICAgICAgICAgICAgICAgbWVtY3B5KChjaGFyICopICZzaW4tPnNpbl9hZGRyLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgaHAtPmhfYWRkcl9saXN0W2pdLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7ICAgICAgICAg ICAgIC8qIHNhZmUgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vdXQgKyAxID49IGNvdW50 KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb3VudCArPSA1OwotICAgICAgICAgICAgICAg ICAgICAgICAgYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgcmVhbGxvYygoY2hhciAqKSBhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpICogY291bnQpOwotICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKCFhZGRyKQotICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRuc291 dDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBmb3IgKGVudHJ5ID0gaGVh ZDsgZW50cnkgIT0gTlVMTDspIHsKLSAgICAgICAgZnJlZShlbnRyeS0+aG9zdCk7Ci0gICAgICAg IGVudHJ5LT5ob3N0ID0gTlVMTDsKLSAgICAgICAgc3J2ID0gZW50cnk7Ci0gICAgICAgIGVudHJ5 ID0gZW50cnktPm5leHQ7Ci0gICAgICAgIGZyZWUoc3J2KTsKLSAgICAgICAgc3J2ID0gTlVMTDsK LSAgICB9Ci0KLSAgZG5zb3V0OgotICAgIGlmIChzcnYpCi0gICAgICBmcmVlKHNydik7Ci0KLSAg ICBpZiAobm91dCA9PSAwKSB7ICAgICAgICAgICAgICAgICAgICAvKiBObyBnb29kIHNlcnZlcnMg Ki8KLSAgICAgICAgaWYgKGFkZHIpCi0gICAgICAgICAgZnJlZShhZGRyKTsKLSAgICAgICAgcmV0 dXJuIDA7Ci0gICAgfQotICAgICphZGRyX3BwID0gYWRkcjsKLSAgICAqbmFkZHJzID0gbm91dDsK LSAgICByZXR1cm4gMTsKLX0KLSN1bmRlZiBJTkNSX0NIRUNLCi0jdW5kZWYgQ0hFQ0sKLSN1bmRl ZiBOVE9IU1AKLQotI2RlZmluZSBJTkNSX0NIRUNLKHgsIHkpIHggKz0geTsgaWYgKHggPiBzaXpl ICsgYW5zd2VyLmJ5dGVzKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKLSNk ZWZpbmUgQ0hFQ0soeCwgeSkgaWYgKHggKyB5ID4gc2l6ZSArIGFuc3dlci5ieXRlcykgXAotICAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwCi0jZGVmaW5lIE5UT0hTUCh4LCB5KSB4WzBd IDw8IDggfCB4WzFdOyB4ICs9IHkKLQotaW50Ci1sb2NhdGVfdHh0X3JyKHByZWZpeCwgbmFtZSwg cmV0c3RyKQotICAgIGNoYXIgKnByZWZpeCwgKm5hbWU7Ci0gICAgY2hhciAqKnJldHN0cjsKLXsK LSAgICB1bmlvbiB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYnl0ZXNbMjA0OF07Ci0gICAgICAg IEhFQURFUiBoZHI7Ci0gICAgfSBhbnN3ZXI7Ci0gICAgdW5zaWduZWQgY2hhciAqcDsKLSAgICBj aGFyIGhvc3RbTUFYX0ROU19OQU1FTEVOXSwgKmg7Ci0gICAgaW50IHNpemU7Ci0gICAgaW50IHR5 cGUsIGNsYXNzLCBudW1hbnN3ZXJzLCBudW1xdWVyaWVzLCByZGxlbiwgbGVuOwotCi0gICAgLyoK LSAgICAgKiBGb3JtIG91ciBxdWVyeSwgYW5kIHNlbmQgaXQgdmlhIEROUwotICAgICAqLwotCi0g ICAgaWYgKG5hbWUgPT0gTlVMTCB8fCBuYW1lWzBdID09ICdcMCcpIHsKLSAgICAgICAgc3RyY3B5 KGhvc3QscHJlZml4KTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIHN0cmxlbihwcmVmaXgp ICsgc3RybGVuKG5hbWUpICsgMyA+IE1BWF9ETlNfTkFNRUxFTiApCi0gICAgICAgICAgICByZXR1 cm4gMDsKLQotICAgICAgICAvKiBSZWFsbSBuYW1lcyBkb24ndCAobm9ybWFsbHkpIGVuZCB3aXRo ICIuIiwgYnV0IGlmIHRoZSBxdWVyeQotICAgICAgICAgICBkb2Vzbid0IGVuZCB3aXRoICIuIiBh bmQgZG9lc24ndCBnZXQgYW4gYW5zd2VyIGFzIGlzLCB0aGUKLSAgICAgICAgICAgcmVzb2x2IGNv ZGUgd2lsbCB0cnkgYXBwZW5kaW5nIHRoZSBsb2NhbCBkb21haW4uICBTaW5jZSB0aGUKLSAgICAg ICAgICAgcmVhbG0gbmFtZXMgYXJlIGFic29sdXRlcywgbGV0J3Mgc3RvcCB0aGF0LgotCi0gICAg ICAgICAgIEJ1dCBvbmx5IGlmIGEgbmFtZSBoYXMgYmVlbiBzcGVjaWZpZWQuICBJZiB3ZSBhcmUg cGVyZm9ybWluZwotICAgICAgICAgICBhIHNlYXJjaCBvbiB0aGUgcHJlZml4IGFsb25lIHRoZW4g dGhlIGludGVudGlvbiBpcyB0byBhbGxvdwotICAgICAgICAgICB0aGUgbG9jYWwgZG9tYWluIG9y IGRvbWFpbiBzZWFyY2ggbGlzdHMgdG8gYmUgZXhwYW5kZWQuCi0gICAgICAgICovCi0gICAgICAg IGggPSBob3N0ICsgc3RybGVuIChob3N0KTsKLSAgICAgICAgY2ttYWttc2coaG9zdCxzaXplb2Yo aG9zdCkscHJlZml4LCAiLiIsIG5hbWUsCi0gICAgICAgICAgICAgICAgICgoaCA+IGhvc3QpICYm IChoWy0xXSAhPSAnLicpKT8iLiI6TlVMTCk7Ci0KLSAgICB9Ci0gICAgc2l6ZSA9IHJlc19zZWFy Y2goaG9zdCwgQ19JTiwgVF9UWFQsIGFuc3dlci5ieXRlcywgc2l6ZW9mKGFuc3dlci5ieXRlcykp OwotCi0gICAgaWYgKHNpemUgPCAwKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHAgPSBhbnN3 ZXIuYnl0ZXM7Ci0KLSAgICBudW1xdWVyaWVzID0gbnRvaHMoYW5zd2VyLmhkci5xZGNvdW50KTsK LSAgICBudW1hbnN3ZXJzID0gbnRvaHMoYW5zd2VyLmhkci5hbmNvdW50KTsKLQotICAgIHAgKz0g c2l6ZW9mKEhFQURFUik7Ci0KLSAgICAvKgotICAgICAqIFdlIG5lZWQgdG8gc2tpcCBvdmVyIHRo ZSBxdWVzdGlvbnMgYmVmb3JlIHdlIGNhbiBnZXQgdG8gdGhlIGFuc3dlcnMsCi0gICAgICogd2hp Y2ggbWVhbnMgd2UgaGF2ZSB0byBpdGVyYXRlIG92ZXIgZXZlcnkgcXVlcnkgcmVjb3JkLiAgV2Ug dXNlCi0gICAgICogZG5fZXhwYW5kIHRvIHRlbGwgdXMgaG93IGxvbmcgZWFjaCBjb21wcmVzc2Vk IG5hbWUgaXMuCi0gICAgICovCi0KLSAgICB3aGlsZSAobnVtcXVlcmllcy0tKSB7Ci0gICAgICAg IGxlbiA9IGRuX2V4cGFuZChhbnN3ZXIuYnl0ZXMsIGFuc3dlci5ieXRlcyArIHNpemUsIHAsIGhv c3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGhvc3QpKTsKLSAgICAgICAgaWYg KGxlbiA8IDApCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgSU5DUl9DSEVDSyhwLCBs ZW4gKyA0KTsgICAgICAgICAvKiBOYW1lIHBsdXMgdHlwZSBwbHVzIGNsYXNzICovCi0gICAgfQot Ci0gICAgLyoKLSAgICAgKiBXZSdyZSBub3cgcG9pbnRpbmcgYXQgdGhlIGFuc3dlciByZWNvcmRz LiAgUHJvY2VzcyB0aGUgZmlyc3QKLSAgICAgKiBUWFQgcmVjb3JkIHdlIGZpbmQuCi0gICAgICov Ci0KLSAgICB3aGlsZSAobnVtYW5zd2Vycy0tKSB7Ci0KLSAgICAgICAgLyogRmlyc3QgdGhlIG5h bWU7IHVzZSBkbl9leHBhbmQgdG8gZ2V0IHRoZSBjb21wcmVzc2VkIHNpemUgKi8KLSAgICAgICAg bGVuID0gZG5fZXhwYW5kKGFuc3dlci5ieXRlcywgYW5zd2VyLmJ5dGVzICsgc2l6ZSwgcCwKLSAg ICAgICAgICAgICAgICAgICAgICAgIGhvc3QsIHNpemVvZihob3N0KSk7Ci0gICAgICAgIGlmIChs ZW4gPCAwKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIElOQ1JfQ0hFQ0socCwgbGVu KTsKLQotICAgICAgICAvKiBOZXh0IGlzIHRoZSBxdWVyeSB0eXBlICovCi0gICAgICAgIENIRUNL KHAsIDIpOwotICAgICAgICB0eXBlID0gTlRPSFNQKHAsMik7Ci0KLSAgICAgICAgLyogTmV4dCBp cyB0aGUgcXVlcnkgY2xhc3M7IGFsc28gc2tpcCBvdmVyIDQgYnl0ZSBUVEwgKi8KLSAgICAgICAg Q0hFQ0socCw2KTsKLSAgICAgICAgY2xhc3MgPSBOVE9IU1AocCw2KTsKLQotICAgICAgICAvKiBS ZWNvcmQgZGF0YSBsZW5ndGggLSBtYWtlIHN1cmUgd2UgYXJlbid0IHRydW5jYXRlZCAqLwotCi0g ICAgICAgIENIRUNLKHAsMik7Ci0gICAgICAgIHJkbGVuID0gTlRPSFNQKHAsMik7Ci0KLSAgICAg ICAgaWYgKHAgKyByZGxlbiA+IGFuc3dlci5ieXRlcyArIHNpemUpCi0gICAgICAgICAgICByZXR1 cm4gMDsKLQotICAgICAgICAvKgotICAgICAgICAgKiBJZiB0aGlzIGlzIGEgVFhUIHJlY29yZCwg cmV0dXJuIHRoZSBzdHJpbmcuICBOb3RlIHRoYXQgdGhlCi0gICAgICAgICAqIHN0cmluZyBoYXMg YSAxLWJ5dGUgbGVuZ3RoIGluIHRoZSBmcm9udAotICAgICAgICAgKi8KLSAgICAgICAgLyogWFhY IFdoYXQgYWJvdXQgZmxhZ2dpbmcgbXVsdGlwbGUgVFhUIHJlY29yZHMgYXMgYW4gZXJyb3I/ICAq LwotCi0gICAgICAgIGlmIChjbGFzcyA9PSBDX0lOICYmIHR5cGUgPT0gVF9UWFQpIHsKLSAgICAg ICAgICAgIGxlbiA9ICpwKys7Ci0gICAgICAgICAgICBpZiAocCArIGxlbiA+IGFuc3dlci5ieXRl cyArIHNpemUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAqcmV0c3Ry ID0gbWFsbG9jKGxlbiArIDEpOwotICAgICAgICAgICAgaWYgKCpyZXRzdHIgPT0gTlVMTCkKLSAg ICAgICAgICAgICAgICByZXR1cm4gRU5PTUVNOwotICAgICAgICAgICAgc3RybmNweSgqcmV0c3Ry LCAoY2hhciAqKSBwLCBsZW4pOwotICAgICAgICAgICAgKCpyZXRzdHIpW2xlbl0gPSAnXDAnOwot ICAgICAgICAgICAgLyogQXZvaWQgYSBjb21tb24gZXJyb3IuICovCi0gICAgICAgICAgICBpZiAo ICgqcmV0c3RyKVtsZW4tMV0gPT0gJy4nICkKLSAgICAgICAgICAgICAgICAoKnJldHN0cilbbGVu LTFdID0gJ1wwJzsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgfQotCi0g ICAgcmV0dXJuIDA7Ci19Ci0jdW5kZWYgSU5DUl9DSEVDSwotI3VuZGVmIENIRUNLCi0jdW5kZWYg TlRPSFNQCi0jZW5kaWYgLyogQ0tfRE5TX1NSViAqLwotCi0jaWZkZWYgVE5DT0RFCi0jaWZkZWYg Q0tfRk9SV0FSRF9YCi0jaWZkZWYgVU5JWAotI2luY2x1ZGUgPHN5cy91bi5oPgotI2RlZmluZSBG V0RYX1VOSVhfU09DSwotI2lmbmRlZiBBRl9MT0NBTAotI2RlZmluZSBBRl9MT0NBTCBBRl9VTklY Ci0jZW5kaWYKLSNpZm5kZWYgUEZfTE9DQUwKLSNkZWZpbmUgUEZfTE9DQUwgUEZfVU5JWAotI2Vu ZGlmCi0jaWZuZGVmIFNVTl9MRU4KLS8qIEV2YWx1YXRlIHRvIGFjdHVhbCBsZW5ndGggb2YgdGhl IGBzb2NrYWRkcl91bicgc3RydWN0dXJlLiAgKi8KLSNkZWZpbmUgU1VOX0xFTihwdHIpICgoc2l6 ZV90KSAoKChzdHJ1Y3Qgc29ja2FkZHJfdW4gKikgMCktPnN1bl9wYXRoKSAgICAgICAgIFwKLSAg ICAgICAgICAgICAgICAgICAgICArIHN0cmxlbiAoKHB0ciktPnN1bl9wYXRoKSkKLSNlbmRpZgot I2VuZGlmIC8qIFVOSVggKi8KLWludAotZndkeF9jcmVhdGVfbGlzdGVuX3NvY2tldChzY3JlZW4p IGludCBzY3JlZW47IHsKLSNpZmRlZiBOT1BVVEVOVgotICAgIHJldHVybigtMSk7Ci0jZWxzZSAv KiBOT1BVVEVOViAqLwotICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzYWRkcjsKLSAgICBpbnQgZGlz cGxheSwgcG9ydCwgc29jaz0tMSwgaTsKLSAgICBzdGF0aWMgY2hhciBlbnZbNTEyXTsKLQotICAg IC8qCi0gICAgICogWCBXaW5kb3dzIFNlcnZlcnMgc3VwcG9ydCBtdWx0aXBsZSBkaXNwbGF5cyBi eSBsaXN0ZW5pbmcgb24KLSAgICAgKiBvbmUgc29ja2V0IHBlciBkaXNwbGF5LiAgRGlzcGxheSAw IGlzIHBvcnQgNjAwMDsgRGlzcGxheSAxIGlzCi0gICAgICogcG9ydCA2MDAxOyBldGMuCi0gICAg ICoKLSAgICAgKiBXZSBzdGFydCBieSB0cnlpbmcgdG8gb3BlbiBwb3J0IDYwMDEgc28gdGhhdCBk aXNwbGF5IDAgaXMKLSAgICAgKiByZXNlcnZlZCBmb3IgdGhlIGxvY2FsIFggV2luZG93cyBTZXJ2 ZXIuCi0gICAgICovCi0KLSAgICBmb3IgKCBkaXNwbGF5PTE7IGRpc3BsYXkgPCAxMDAwIDsgZGlz cGxheSsrICApIHsKLQotICAgICAgICBpZiAoKHNvY2sgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19T VFJFQU0sIDApKSA8IDApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ3ZHhfY3JlYXRlX2xp c3Rlbl9zb2NrZXQoKSIsInNvY2tldCgpIDwgMCIsc29jayk7Ci0gICAgICAgICAgICByZXR1cm4o LTEpOwotICAgICAgICB9Ci0KLSAgICAgICAgcG9ydCA9IDYwMDAgKyBkaXNwbGF5OwotICAgICAg ICBiemVybygoY2hhciAqKSZzYWRkciwgc2l6ZW9mKHNhZGRyKSk7Ci0gICAgICAgIHNhZGRyLnNp bl9mYW1pbHkgPSBBRl9JTkVUOwotICAgICAgICBzYWRkci5zaW5fYWRkci5zX2FkZHIgPSBpbmV0 X2FkZHIobXlpcGFkZHIpOwotICAgICAgICBzYWRkci5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOwot Ci0gICAgICAgIGlmIChiaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2FkZHIsIHNpemVv ZihzYWRkcikpIDwgMCkgewotICAgICAgICAgICAgaSA9IGVycm5vOyAgICAgICAgICAgICAgICAg IC8qIFNhdmUgZXJyb3IgY29kZSAqLwotI2lmZGVmIFRDUElQTElCCi0gICAgICAgICAgICBzb2Nr ZXRfY2xvc2Uoc29jayk7Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwotICAgICAgICAgICAgY2xvc2Uo c29jayk7Ci0jZW5kaWYgLyogVENQSVBMSUIgKi8KLSAgICAgICAgICAgIHNvY2sgPSAtMTsKLSAg ICAgICAgICAgIGRlYnVnKEYxMTAsImZ3ZHhfY3JlYXRlX2xpc3Rlbl9zb2NrZXQoKSIsImJpbmQo KSA8IDAiLDApOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBk ZWJ1ZyhGMTAwLCJmZHd4X2NyZWF0ZV9saXN0ZW5fc29ja2V0KCkgYmluZCBPSyIsIiIsMCk7Ci0g ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmICggZGlzcGxheSA+IDEwMDAgKSB7Ci0gICAg ICAgIGRlYnVnKEYxMDAsImZ3ZHhfY3JlYXRlX2xpc3Rlbl9zb2NrZXQoKSBPdXQgb2YgRGlzcGxh eXMiLCIiLDApOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLQotICAgIGlmIChsaXN0ZW4o c29jaywgNSkgPCAwKSB7Ci0gICAgICAgIGkgPSBlcnJubzsgICAgICAgICAgICAgICAgICAvKiBT YXZlIGVycm9yIGNvZGUgKi8KLSNpZmRlZiBUQ1BJUExJQgotICAgICAgICBzb2NrZXRfY2xvc2Uo c29jayk7Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwotICAgICAgICBjbG9zZShzb2NrKTsKLSNlbmRp ZiAvKiBUQ1BJUExJQiAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJmZHd4X2NyZWF0ZV9saXN0ZW5f c29ja2V0KCkgbGlzdGVuKCkgZXJybm8iLCIiLGVycm5vKTsKLSAgICAgICAgcmV0dXJuKC0xKTsK LSAgICB9Ci0gICAgZGVidWcoRjEwMCwiZndkeF9jcmVhdGVfbGlzdGVuX3NvY2tldCgpIGxpc3Rl biBPSyIsIiIsMCk7Ci0KLSAgICBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94 Lmxpc3Rlbl9zb2NrZXQgPSBzb2NrOwotICAgIGlmICghbXlpcGFkZHJbMF0pCi0gICAgICAgIGdl dGxvY2FsaXBhZGRyKCk7Ci0gICAgaWYgKCBteWlwYWRkclswXSApCi0gICAgICAgIGNrbWFreG1z ZyhlbnYsc2l6ZW9mKGVudiksIkRJU1BMQVk9IixteWlwYWRkciwiOiIsCi0gICAgICAgICAgICAg ICAgICBja3VpdG9hKGRpc3BsYXkpLCI6Iixja3VpdG9hKHNjcmVlbiksCi0gICAgICAgICAgICAg ICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0gICAgZWxzZQotICAgICAgICBj a21ha21zZyhlbnYsc2l6ZW9mKGVudiksIkRJU1BMQVk9Iixja3VpdG9hKGRpc3BsYXkpLCI6IiwK LSAgICAgICAgICAgICAgICAgY2t1aXRvYShzY3JlZW4pKTsKLSAgICBwdXRlbnYoZW52KTsKLSAg ICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTk9QVVRFTlYgKi8KLX0KLQotCi1pbnQKLWZ3ZHhfb3Bl bl9jbGllbnRfY2hhbm5lbChjaGFubmVsKSBpbnQgY2hhbm5lbDsgewotICAgIGNoYXIgKiBlbnY7 Ci0gICAgc3RydWN0IHNvY2thZGRyX2luIHNhZGRyOwotI2lmZGVmIEZXRFhfVU5JWF9TT0NLCi0g ICAgc3RydWN0IHNvY2thZGRyX3VuIHNhZGRyX3VuID0geyBBRl9MT0NBTCB9OwotI2VuZGlmIC8q IEZXRFhfVU5JWF9TT0NLICovCi0gICAgaW50IGNvbG9uLCBkb3QsIGRpc3BsYXksIHBvcnQsIHNv Y2ssIGksIHNjcmVlbjsKLSAgICBpbnQgZmFtaWx5OwotICAgIGNoYXIgYnVmWzI1Nl0sICogaG9z dD1OVUxMLCAqIHJlc3Q9TlVMTDsKLSNpZmRlZiBUQ1BfTk9ERUxBWQotICAgIGludCBvbj0xOwot I2VuZGlmIC8qIFRDUF9OT0RFTEFZICovCi0KLSAgICBkZWJ1ZyhGMTExLCJmd2R4X2NyZWF0ZV9j bGllbnRfY2hhbm5lbCgpIiwiY2hhbm5lbCIsY2hhbm5lbCk7Ci0KLSAgICBmb3IgKCBpPTA7IGk8 TUFYRldEWCA7IGkrKyApIHsKLSAgICAgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9Y KS5mb3J3YXJkX3guY2hhbm5lbFtpXS5pZCA9PSBjaGFubmVsKSB7Ci0gICAgICAgICAgICAvKiBB bHJlYWR5IG9wZW4gKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ3ZHhfY3JlYXRlX2NsaWVu dF9jaGFubmVsKCkiLCJhbHJlYWR5IG9wZW4iLDApOwotICAgICAgICAgICAgcmV0dXJuKDApOwot ICAgICAgICB9Ci0gICAgfQotCi0gICAgZW52ID0gZ2V0ZW52KCJESVNQTEFZIik7Ci0gICAgaWYg KCAhZW52ICkKLSAgICAgIGVudiA9IChjaGFyICopdG5fZ2V0X2Rpc3BsYXkoKTsKLSAgICBpZiAo IGVudiApCi0gICAgICBja3N0cm5jcHkoYnVmLGVudiwyNTYpOwotICAgIGVsc2UKLSAgICAgIGNr c3RybmNweShidWYsIjEyNy4wLjAuMTowLjAiLDI1Nik7Ci0KLSAgICBiemVybygoY2hhciAqKSZz YWRkcixzaXplb2Yoc2FkZHIpKTsKLSAgICBzYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLQot ICAgIGlmICghZndkeF9wYXJzZV9kaXNwbGF5bmFtZShidWYsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZmYW1pbHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZo b3N0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGlzcGxheSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJnNjcmVlbiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJnJlc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgICAg ICApIHsKLSAgICAgICAgaWYgKCBob3N0ICkgZnJlZShob3N0KTsKLSAgICAgICAgaWYgKCByZXN0 ICkgZnJlZShyZXN0KTsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSAgICBpZiAocmVzdCkg ZnJlZShyZXN0KTsKLQotI2lmbmRlZiBGV0RYX1VOSVhfU09DSwotICAvKiBpZiAkRElTUExBWSBp bmRpY2F0ZXMgdXNlIG9mIHVuaXggZG9tYWluIHNvY2tldHMsIGJ1dCB3ZSBkb24ndCBzdXBwb3J0 IGl0LAotICAgKiB3ZSBjaGFuZ2UgdGhpbmdzIHRvIHVzZSBpbmV0IHNvY2tldHMgb24gdGhlIGlw IGxvb3BiYWNrIGludGVyZmFjZSBpbnN0ZWFkLAotICAgKiBhbmQgaG9wZSB0aGF0IGl0IHdvcmtz LgotICAgKi8KLSAgICBpZiAoZmFtaWx5ID09IEZhbWlseUxvY2FsKSB7Ci0gICAgICAgIGRlYnVn KEYxMDAsImZ3ZHhfY3JlYXRlX2NsaWVudF9jaGFubmVsKCkgRmFtaWx5TG9jYWwiLCIiLDApOwot ICAgICAgICBmYW1pbHkgPSBGYW1pbHlJbnRlcm5ldDsKLSAgICAgICAgaWYgKGhvc3QpIGZyZWUo aG9zdCk7Ci0gICAgICAgIGlmIChob3N0ID0gbWFsbG9jKHN0cmxlbigibG9jYWxob3N0IikgKyAx KSkKLSAgICAgICAgICAgIHN0cmNweShob3N0LCAibG9jYWxob3N0Iik7Ci0gICAgICAgIGVsc2Ug ewotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAgIH0KLSNlbHNlIC8qIEZX RFhfVU5JWF9TT0NLICovCi0gICAgaWYgKGZhbWlseSA9PSBGYW1pbHlMb2NhbCkgewotICAgICAg ICBpZiAoaG9zdCkgZnJlZShob3N0KTsKLSAgICAgICAgc29jayA9IHNvY2tldChQRl9MT0NBTCwg U09DS19TVFJFQU0sIDApOwotICAgICAgICBpZiAoc29jayA8IDApCi0gICAgICAgICAgICByZXR1 cm4oLTEpOwotCi0gICAgICAgIGNrbWFrbXNnKGJ1ZixzaXplb2YoYnVmKSwiL3RtcC8uWDExLXVu aXgvWCIsY2tpdG9hKGRpc3BsYXkpLE5VTEwsTlVMTCk7Ci0gICAgICAgIHN0cm5jcHkoc2FkZHJf dW4uc3VuX3BhdGgsIGJ1Ziwgc2l6ZW9mKHNhZGRyX3VuLnN1bl9wYXRoKSk7Ci0gICAgICAgIGlm IChjb25uZWN0KHNvY2ssKHN0cnVjdCBzb2NrYWRkciAqKSZzYWRkcl91biwgU1VOX0xFTigmc2Fk ZHJfdW4pKSA8IDApCi0gICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9IGVsc2UKLSNlbmRpZiAg LyogRldEWF9VTklYX1NPQ0sgKi8KLSAgICB7Ci0gICAgICAgIC8qIE90aGVyd2lzZSwgd2UgYXJl IGFzc3VtaW5nIEZhbWlseUludGVybmV0ICovCi0gICAgICAgIGlmIChob3N0KSB7Ci0gICAgICAg ICAgICBja3N0cm5jcHkoYnVmLGhvc3Qsc2l6ZW9mKGJ1ZikpOwotICAgICAgICAgICAgZnJlZSho b3N0KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBja3N0cm5jcHkoYnVmLG15aXBhZGRy LHNpemVvZihidWYpKTsKLQotICAgICAgICBkZWJ1ZyhGMTExLCJmd2R4X2NyZWF0ZV9jbGllbnRf Y2hhbm5lbCgpIiwiZGlzcGxheSIsZGlzcGxheSk7Ci0KLSAgICAgICAgcG9ydCA9IDYwMDAgKyBk aXNwbGF5OwotICAgICAgICBzYWRkci5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOwotCi0gICAgICAg IGRlYnVnKEYxMTAsImZ3ZHhfY3JlYXRlX2NsaWVudF9jaGFubmVsKCkgaXAtYWRkcmVzcyIsYnVm LDApOwotICAgICAgICBzYWRkci5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIoYnVmKTsKLSAg ICAgICAgaWYgKCBzYWRkci5zaW5fYWRkci5zX2FkZHIgPT0gKHVuc2lnbmVkIGxvbmcpIC0xCi0j aWZkZWYgSU5BRERSX05PTkUKLSAgICAgICAgICAgICB8fCBzYWRkci5zaW5fYWRkci5zX2FkZHIg PT0gSU5BRERSX05PTkUKLSNlbmRpZiAvKiBJTkFERFJfTk9ORSAqLwotICAgICAgICAgICAgICkK LSAgICAgICAgewotICAgICAgICAgICAgc3RydWN0IGhvc3RlbnQgKmhvc3Q7Ci0gICAgICAgICAg ICBob3N0ID0gZ2V0aG9zdGJ5bmFtZShidWYpOwotICAgICAgICAgICAgaWYgKCBob3N0ID09IE5V TEwgKQotICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICBob3N0ID0gY2tf Y29weWhvc3RlbnQoaG9zdCk7Ci0jaWZkZWYgSEFERFJMSVNUCi0jaWZkZWYgaF9hZGRyCi0gICAg ICAgICAgICAvKiBUaGlzIGlzIGZvciB0cnlpbmcgbXVsdGlwbGUgSVAgYWRkcmVzc2VzIC0gc2Vl IDxuZXRkYi5oPiAqLwotICAgICAgICAgICAgaWYgKCEoaG9zdC0+aF9hZGRyX2xpc3QpKQotICAg ICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICBiY29weShob3N0LT5oX2FkZHJf bGlzdFswXSwKLSAgICAgICAgICAgICAgICAgICAoY2FkZHJfdCkmc2FkZHIuc2luX2FkZHIsCi0g ICAgICAgICAgICAgICAgICAgaG9zdC0+aF9sZW5ndGgKLSAgICAgICAgICAgICAgICAgICApOwot I2Vsc2UKLSAgICAgICAgICAgIGJjb3B5KGhvc3QtPmhfYWRkciwgKGNhZGRyX3QpJnNhZGRyLnNp bl9hZGRyLCBob3N0LT5oX2xlbmd0aCk7Ci0jZW5kaWYgLyogaF9hZGRyICovCi0jZWxzZSAgLyog SEFERFJMSVNUICovCi0gICAgICAgICAgICBiY29weShob3N0LT5oX2FkZHIsIChjYWRkcl90KSZz YWRkci5zaW5fYWRkciwgaG9zdC0+aF9sZW5ndGgpOwotI2VuZGlmIC8qIEhBRERSTElTVCAqLwot ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKChzb2NrID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RS RUFNLCAwKSkgPCAwKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJmd2R4X2NyZWF0ZV9jbGll bnRfY2hhbm5lbCgpIiwic29ja2V0KCkgPCAwIixzb2NrKTsKLSAgICAgICAgICAgIHJldHVybigt MSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIGNvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2Nr YWRkciAqKSZzYWRkciwgc2l6ZW9mKHNhZGRyKSkgPCAwKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhG MTEwLCJmd2R4X2NyZWF0ZV9jbGllbnRfY2hhbm5lbCgpIiwiY29ubmVjdCgpIGZhaWxlZCIsMCk7 Ci0jaWZkZWYgVENQSVBMSUIKLSAgICAgICAgICAgIHNvY2tldF9jbG9zZShzb2NrKTsKLSNlbHNl IC8qIFRDUElQTElCICovCi0gICAgICAgICAgICBjbG9zZShzb2NrKTsKLSNlbmRpZiAvKiBUQ1BJ UExJQiAqLwotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotCi0jaWZkZWYgVENQ X05PREVMQVkKLSAgICAgICAgc2V0c29ja29wdChzb2NrLElQUFJPVE9fVENQLFRDUF9OT0RFTEFZ LChjaGFyICopJm9uLHNpemVvZihvbikpOwotI2VuZGlmIC8qIFRDUF9OT0RFTEFZICovCi0gICAg fQotCi0gICAgZm9yIChpID0gMDsgaSA8IE1BWEZXRFg7IGkrKykgewotICAgICBpZiAoVEVMT1BU X1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW2ldLmlkID09IC0xKSB7Ci0g ICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94LmNoYW5uZWxbaV0u ZmQgPSBzb2NrOwotICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRf eC5jaGFubmVsW2ldLmlkID0gY2hhbm5lbDsKLSAgICAgICBURUxPUFRfU0IoVEVMT1BUX0ZPUldB UkRfWCkuZm9yd2FyZF94LmNoYW5uZWxbaV0ubmVlZF90b19zZW5kX3hhdXRoID0gMTsKLSAgICAg ICAgIGRlYnVnKEYxMTEsImZ3ZHhfY3JlYXRlX2NsaWVudF9jaGFubmVsKCkiLCJzb2NrZXQiLHNv Y2spOwotICAgICAgICAgcmV0dXJuKDApOwotICAgICB9Ci0gICAgfQotICAgIHJldHVybigtMSk7 Ci19Ci0KLWludAotZndkeF9zZXJ2ZXJfYXZhaWwoKSB7Ci0gICAgY2hhciAqIGVudjsKLSAgICBz dHJ1Y3Qgc29ja2FkZHJfaW4gc2FkZHI7Ci0jaWZkZWYgRldEWF9VTklYX1NPQ0sKLSAgICBzdHJ1 Y3Qgc29ja2FkZHJfdW4gc2FkZHJfdW4gPSB7IEFGX0xPQ0FMIH07Ci0jZW5kaWYgIC8qIEZXRFhf VU5JWF9TT0NLICovCi0gICAgaW50IGNvbG9uLCBkb3QsIGRpc3BsYXksIHBvcnQsIHNvY2ssIGks IHNjcmVlbjsKLSAgICBjaGFyIGJ1ZlsyNTZdLCAqaG9zdD1OVUxMLCAqcmVzdD1OVUxMOwotI2lm ZGVmIFRDUF9OT0RFTEFZCi0gICAgaW50IG9uPTE7Ci0jZW5kaWYgLyogVENQX05PREVMQVkgKi8K LSAgICBpbnQgZmFtaWx5OwotCi0gICAgZW52ID0gZ2V0ZW52KCJESVNQTEFZIik7Ci0gICAgaWYg KCAhZW52ICkKLSAgICAgIGVudiA9IChjaGFyICopdG5fZ2V0X2Rpc3BsYXkoKTsKLSAgICBpZiAo IGVudiApCi0gICAgICBja3N0cm5jcHkoYnVmLGVudiwyNTYpOwotICAgIGVsc2UKLSAgICAgIGNr c3RybmNweShidWYsIjEyNy4wLjAuMTowLjAiLDI1Nik7Ci0KLSAgICBiemVybygoY2hhciAqKSZz YWRkcixzaXplb2Yoc2FkZHIpKTsKLSAgICBzYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLQot ICAgIGlmICghZndkeF9wYXJzZV9kaXNwbGF5bmFtZShidWYsJmZhbWlseSwmaG9zdCwmZGlzcGxh eSwmc2NyZWVuLCZyZXN0KSkgewotICAgICAgICBpZiAoIGhvc3QgKSBmcmVlKGhvc3QpOwotICAg ICAgICBpZiAoIHJlc3QgKSBmcmVlKHJlc3QpOwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQot ICAgIGlmIChyZXN0KSBmcmVlKHJlc3QpOwotCi0jaWZuZGVmIEZXRFhfVU5JWF9TT0NLCi0gIC8q IGlmICRESVNQTEFZIGluZGljYXRlcyB1c2Ugb2YgdW5peCBkb21haW4gc29ja2V0cywgYnV0IHdl IGRvbid0IHN1cHBvcnQgaXQsCi0gICAqIHdlIGNoYW5nZSB0aGluZ3MgdG8gdXNlIGluZXQgc29j a2V0cyBvbiB0aGUgaXAgbG9vcGJhY2sgaW50ZXJmYWNlIGluc3RlYWQsCi0gICAqIGFuZCBob3Bl IHRoYXQgaXQgd29ya3MuCi0gICAqLwotICAgIGlmIChmYW1pbHkgPT0gRmFtaWx5TG9jYWwpIHsK LSAgICAgICAgZmFtaWx5ID0gRmFtaWx5SW50ZXJuZXQ7Ci0gICAgICAgIGlmIChob3N0KSBmcmVl KGhvc3QpOwotICAgICAgICBpZiAoaG9zdCA9IG1hbGxvYyhzdHJsZW4oImxvY2FsaG9zdCIpICsg MSkpCi0gICAgICAgICAgICBzdHJjcHkoaG9zdCwgImxvY2FsaG9zdCIpOwotICAgICAgICBlbHNl IHsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZSAvKiBG V0RYX1VOSVhfU09DSyAqLwotICAgIGlmIChmYW1pbHkgPT0gRmFtaWx5TG9jYWwpIHsKLSAgICAg ICAgZGVidWcoRjEwMCwiZndkeF9zZXJ2ZXJfYXZhaWwoKSBGYW1pbHlMb2NhbCIsIiIsMCk7Ci0g ICAgICAgIGlmIChob3N0KSBmcmVlKGhvc3QpOwotICAgICAgICBzb2NrID0gc29ja2V0KFBGX0xP Q0FMLCBTT0NLX1NUUkVBTSwgMCk7Ci0gICAgICAgIGlmIChzb2NrIDwgMCkKLSAgICAgICAgICAg IHJldHVybigwKTsKLQotICAgICAgICBja21ha21zZyhidWYsc2l6ZW9mKGJ1ZiksIi90bXAvLlgx MS11bml4L1giLGNraXRvYShkaXNwbGF5KSxOVUxMLE5VTEwpOwotICAgICAgICBzdHJuY3B5KHNh ZGRyX3VuLnN1bl9wYXRoLCBidWYsIHNpemVvZihzYWRkcl91bi5zdW5fcGF0aCkpOwotICAgICAg ICBpZiAoY29ubmVjdChzb2NrLChzdHJ1Y3Qgc29ja2FkZHIgKikmc2FkZHJfdW4sU1VOX0xFTigm c2FkZHJfdW4pKSA8IDApCi0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIGNsb3NlKHNv Y2spOwotICAgICAgICByZXR1cm4oMSk7Ci0gICAgfQotI2VuZGlmICAvKiBGV0RYX1VOSVhfU09D SyAqLwotCi0gICAgLyogT3RoZXJ3aXNlLCB3ZSBhcmUgYXNzdW1pbmcgRmFtaWx5SW50ZXJuZXQg Ki8KLSAgICBpZiAoaG9zdCkgewotICAgICAgICBja3N0cm5jcHkoYnVmLGhvc3Qsc2l6ZW9mKGJ1 ZikpOwotICAgICAgICBmcmVlKGhvc3QpOwotICAgIH0gZWxzZQotICAgICAgICBja3N0cm5jcHko YnVmLG15aXBhZGRyLHNpemVvZihidWYpKTsKLQotICAgIGRlYnVnKEYxMTEsImZ3ZHhfc2VydmVy X2F2YWlsKCkiLCJkaXNwbGF5IixkaXNwbGF5KTsKLQotICAgIHBvcnQgPSA2MDAwICsgZGlzcGxh eTsKLSAgICBzYWRkci5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOwotCi0gICAgZGVidWcoRjExMCwi ZndkeF9zZXJ2ZXJfYXZhaWwoKSBpcC1hZGRyZXNzIixidWYsMCk7Ci0gICAgc2FkZHIuc2luX2Fk ZHIuc19hZGRyID0gaW5ldF9hZGRyKGJ1Zik7Ci0gICAgaWYgKCBzYWRkci5zaW5fYWRkci5zX2Fk ZHIgPT0gKHVuc2lnbmVkIGxvbmcpIC0xCi0jaWZkZWYgSU5BRERSX05PTkUKLSAgICAgICAgIHx8 IHNhZGRyLnNpbl9hZGRyLnNfYWRkciA9PSBJTkFERFJfTk9ORQotI2VuZGlmIC8qIElOQUREUl9O T05FICovCi0gICAgICAgICApCi0gICAgewotICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqaG9zdDsK LSAgICAgICAgaG9zdCA9IGdldGhvc3RieW5hbWUoYnVmKTsKLSAgICAgICAgaWYgKCBob3N0ID09 IE5VTEwgKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmd2R4X3NlcnZlcl9hdmFpbCgpIGdl dGhvc3RieW5hbWUoKSBmYWlsZWQiLAotICAgICAgICAgICAgICAgICAgIG15aXBhZGRyLDApOwot ICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAgICAgICBob3N0ID0gY2tfY29w eWhvc3RlbnQoaG9zdCk7Ci0jaWZkZWYgSEFERFJMSVNUCi0jaWZkZWYgaF9hZGRyCi0gICAgICAg IC8qIFRoaXMgaXMgZm9yIHRyeWluZyBtdWx0aXBsZSBJUCBhZGRyZXNzZXMgLSBzZWUgPG5ldGRi Lmg+ICovCi0gICAgICAgIGlmICghKGhvc3QtPmhfYWRkcl9saXN0KSkKLSAgICAgICAgICAgIHJl dHVybigtMSk7Ci0gICAgICAgIGJjb3B5KGhvc3QtPmhfYWRkcl9saXN0WzBdLAotICAgICAgICAg ICAgICAgKGNhZGRyX3QpJnNhZGRyLnNpbl9hZGRyLAotICAgICAgICAgICAgICAgaG9zdC0+aF9s ZW5ndGgKLSAgICAgICAgICAgICAgICk7Ci0jZWxzZQotICAgICAgICBiY29weShob3N0LT5oX2Fk ZHIsIChjYWRkcl90KSZzYWRkci5zaW5fYWRkciwgaG9zdC0+aF9sZW5ndGgpOwotI2VuZGlmIC8q IGhfYWRkciAqLwotI2Vsc2UgIC8qIEhBRERSTElTVCAqLwotICAgICAgICBiY29weShob3N0LT5o X2FkZHIsIChjYWRkcl90KSZzYWRkci5zaW5fYWRkciwgaG9zdC0+aF9sZW5ndGgpOwotI2VuZGlm IC8qIEhBRERSTElTVCAqLwotICAgIH0KLQotICAgIGlmICgoc29jayA9IHNvY2tldChBRl9JTkVU LCBTT0NLX1NUUkVBTSwgMCkpIDwgMCkgewotICAgICAgICBkZWJ1ZyhGMTExLCJmd2R4X3NlcnZl cl9hdmFpbCgpIiwic29ja2V0KCkgPCAwIixzb2NrKTsKLSAgICAgICAgcmV0dXJuKDApOwotICAg IH0KLQotICAgIGlmICggY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJnNhZGRyLCBz aXplb2Yoc2FkZHIpKSA8IDApIHsKLSAgICAgICAgZGVidWcoRjExMCwiZndkeF9zZXJ2ZXJfYXZh aWwoKSIsImNvbm5lY3QoKSBmYWlsZWQiLDApOwotI2lmZGVmIFRDUElQTElCCi0gICAgICAgIHNv Y2tldF9jbG9zZShzb2NrKTsKLSNlbHNlIC8qIFRDUElQTElCICovCi0gICAgICAgIGNsb3NlKHNv Y2spOwotI2VuZGlmIC8qIFRDUElQTElCICovCi0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0K LSNpZmRlZiBUQ1BJUExJQgotICAgIHNvY2tldF9jbG9zZShzb2NrKTsKLSNlbHNlIC8qIFRDUElQ TElCICovCi0gICAgY2xvc2Uoc29jayk7Ci0jZW5kaWYgLyogVENQSVBMSUIgKi8KLSAgICByZXR1 cm4oMSk7Ci19Ci0KLWludAotZndkeF9vcGVuX3NlcnZlcl9jaGFubmVsKCkgewotICAgIGludCBz b2NrLCByZWFkeV90b19hY2NlcHQsIHNvY2syLGNoYW5uZWwsaTsKLSNpZmRlZiBUQ1BfTk9ERUxB WQotICAgIGludCBvbj0xOwotI2VuZGlmIC8qIFRDUF9OT0RFTEFZICovCi0jaWZkZWYgVUNYNTAK LSAgICBzdGF0aWMgdV9pbnQgc2FkZHJsZW47Ci0jZWxzZQotICAgIHN0YXRpYyBTT0NLT1BUX1Qg c2FkZHJsZW47Ci0jZW5kaWYgLyogVUNYNTAgKi8KLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2Fk ZHI7Ci0gICAgY2hhciBzYls4XTsKLSAgICBleHRlcm4gY2hhciB0bl9tc2dbXTsKLSNpZmRlZiBC U0RTRUxFQ1QKLSAgICBmZF9zZXQgcmZkczsKLSAgICBzdHJ1Y3QgdGltZXZhbCB0djsKLSNlbHNl Ci0jaWZkZWYgQkVMTFNFTENUCi0gICAgZmRfc2V0IHJmZHM7Ci0jZWxzZQotICAgIGZkX3NldCBy ZmRzOwotICAgIHN0cnVjdCB0aW1ldmFsIHsKLSAgICAgICAgbG9uZyB0dl9zZWM7Ci0gICAgICAg IGxvbmcgdHZfdXNlYzsKLSAgICB9IHR2OwotI2VuZGlmIC8qIEJFTExTRUxFQ1QgKi8KLSNlbmRp ZiAvKiBCU0RTRUxFQ1QgKi8KLSAgICB1bnNpZ25lZCBzaG9ydCBuY2hhbm5lbDsKLSAgICB1bnNp Z25lZCBjaGFyICogcDsKLQotICAgIHNvY2sgPSBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCku Zm9yd2FyZF94Lmxpc3Rlbl9zb2NrZXQ7Ci0KLSAgdHJ5X2FnYWluOgotCi0jaWZkZWYgQlNEU0VM RUNUCi0gICAgdHYudHZfc2VjICA9IHR2LnR2X3VzZWMgPSAwTDsKLSAgICB0di50dl91c2VjID0g NTA7Ci0gICAgRkRfWkVSTygmcmZkcyk7Ci0gICAgRkRfU0VUKHNvY2ssICZyZmRzKTsKLSAgICBy ZWFkeV90b19hY2NlcHQgPQotICAgICAgICAoKHNlbGVjdChGRF9TRVRTSVpFLAotI2lmZGVmIEhQ VVgKLSNpZmRlZiBIUFVYMTAxMAotICAgICAgICAgICAgICAgICAgKGZkX3NldCAqKQotI2Vsc2UK LQotICAgICAgICAgICAgICAgICAgKGludCAqKQotI2VuZGlmIC8qIEhQVVgxMDEwICovCi0jZWxz ZQotI2lmZGVmIF9fREVDQwotICAgICAgICAgICAgICAgICAgKGZkX3NldCAqKQotI2VuZGlmIC8q IF9fREVDQyAqLwotI2VuZGlmIC8qIEhQVVggKi8KLSAgICAgICAgICAgICAgICAgICZyZmRzLCBO VUxMLCBOVUxMLCAmdHYpID4gMCkgJiYKLSAgICAgICAgICBGRF9JU1NFVChzb2NrLCAmcmZkcykp OwotI2Vsc2UgLyogQlNEU0VMRUNUICovCi0jaWZkZWYgSUJNU0VMRUNUCi0gICAgcmVhZHlfdG9f YWNjZXB0ID0gKHNlbGVjdCgmc29jaywgMSwgMCwgMCwgNTApID09IDEpOwotI2Vsc2UKLSNpZmRl ZiBCRUxMU0VMRUNUCi0gICAgRkRfWkVSTyhyZmRzKTsKLSAgICBGRF9TRVQoc29jaywgcmZkcyk7 Ci0gICAgcmVhZHlfdG9fYWNjZXB0ID0KLSAgICAgICAgKChzZWxlY3QoMTI4LCByZmRzLCBOVUxM LCBOVUxMLCA1MCkgPiAwKSAmJgotICAgICAgICAgIEZEX0lTU0VUKHNvY2ssIHJmZHMpKTsKLSNl bHNlCi0vKiBUcnkgdGhpcyAtIHdoYXQncyB0aGUgd29yc3QgdGhhdCBjYW4gaGFwcGVuLi4uICov Ci0KLSAgICB0di50dl9zZWMgID0gdHYudHZfdXNlYyA9IDBMOwotICAgIHR2LnR2X3VzZWMgPSA1 MDsKLSAgICBGRF9aRVJPKCZyZmRzKTsKLSAgICBGRF9TRVQoc29jaywgJnJmZHMpOwotICAgIHJl YWR5X3RvX2FjY2VwdCA9Ci0gICAgICAgICgoc2VsZWN0KEZEX1NFVFNJWkUsCi0gICAgICAgICAg ICAgICAgICAoZmRfc2V0ICopICZyZmRzLCBOVUxMLCBOVUxMLCAmdHYpID4gMCkgJiYKLSAgICAg ICAgICBGRF9JU1NFVChzb2NrLCAmcmZkcykpOwotI2VuZGlmIC8qIEJFTExTRUxFQ1QgKi8KLSNl bmRpZiAvKiBJQk1TRUxFQ1QgKi8KLSNlbmRpZiAvKiBCU0RTRUxFQ1QgKi8KLQotICAgIGlmICgg IXJlYWR5X3RvX2FjY2VwdCApCi0gICAgICAgIHJldHVybigwKTsKLQotICAgIGlmICgoc29jazIg PSBhY2NlcHQoc29jaywoc3RydWN0IHNvY2thZGRyICopJnNhZGRyLCZzYWRkcmxlbikpIDwgMCkg ewotICAgICAgICBpbnQgaSA9IGVycm5vOyAgICAgICAgICAgICAgICAgIC8qIHNhdmUgZXJyb3Ig Y29kZSAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJ0Y3BzcnZfb3BlbiBhY2NlcHQgZXJybm8iLCIi LGkpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLQotICAgIC8qCi0gICAgICogTm93IHdl IGhhdmUgdGhlIG9wZW4gc29ja2V0LiAgV2UgbXVzdCBub3cgZmluZCBhIGNoYW5uZWwgdG8gc3Rv cmUKLSAgICAgKiBpdCBpbiwgYW5kIHRoZW4gbm90aWZ5IHRoZSBjbGllbnQuCi0gICAgICovCi0K LSAgICBmb3IgKCBjaGFubmVsPTA7Y2hhbm5lbDxNQVhGV0RYO2NoYW5uZWwrKyApIHsKLSAgICAg ICAgaWYgKCBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94LmNoYW5uZWxbY2hh bm5lbF0uZmQgPT0gLTEgKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKCBj aGFubmVsID09IE1BWEZXRFggKSB7Ci0jaWZkZWYgVENQSVBMSUIKLSAgICAgICAgc29ja2V0X2Ns b3NlKHNvY2syKTsKLSNlbHNlIC8qIFRDUElQTElCICovCi0gICAgICAgIGNsb3NlKHNvY2syKTsK LSNlbmRpZiAvKiBUQ1BJUExJQiAqLwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLQotICAg IGlmICggZndkeF9zZW5kX29wZW4oY2hhbm5lbCkgPCAwICkgewotI2lmZGVmIFRDUElQTElCCi0g ICAgICAgIHNvY2tldF9jbG9zZShzb2NrMik7Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwotICAgICAg ICBjbG9zZShzb2NrMik7Ci0jZW5kaWYgLyogVENQSVBMSUIgKi8KLSAgICB9Ci0KLSNpZmRlZiBU Q1BfTk9ERUxBWQotICAgIHNldHNvY2tvcHQoc29jazIsSVBQUk9UT19UQ1AsVENQX05PREVMQVks KGNoYXIgKikmb24sc2l6ZW9mKG9uKSk7Ci0jZW5kaWYgLyogVENQX05PREVMQVkgKi8KLQotICAg IFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFtjaGFubmVsXS5m ZCA9IHNvY2syOwotICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hh bm5lbFtjaGFubmVsXS5pZCA9IGNoYW5uZWw7Ci0gICAgZ290byB0cnlfYWdhaW47Ci0KLSAgICBy ZXR1cm4oMCk7ICAvKiBuZXZlciByZWFjaGVkICovCi19Ci0KLWludAotZndkeF9jbG9zZV9jaGFu bmVsKGNoYW5uZWwpIGludCBjaGFubmVsOyB7Ci0gICAgaW50IGksZmQ7Ci0KLSAgICBmb3IgKCBp PTA7IGk8TUFYRldEWCA7IGkrKyApIHsKLSAgICAgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfRk9S V0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFtpXS5pZCA9PSBjaGFubmVsKQotICAgICAgICAgICAg YnJlYWs7Ci0gICAgfQotICAgIGlmICggaSA9PSBNQVhGV0RYICkKLSAgICAgICAgcmV0dXJuKC0x KTsKLQotICAgIGZkID0gVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFu bmVsW2ldLmZkOwotICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hh bm5lbFtpXS5mZCA9IC0xOwotICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJk X3guY2hhbm5lbFtpXS5pZCA9IC0xOwotICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5m b3J3YXJkX3guY2hhbm5lbFtpXS5uZWVkX3RvX3NlbmRfeGF1dGggPSAwOwotCi0jaWZkZWYgVENQ SVBMSUIKLSAgICBzb2NrZXRfY2xvc2UoZmQpOwotI2Vsc2UgLyogVENQSVBMSUIgKi8KLSAgICBj bG9zZShmZCk7Ci0jZW5kaWYgLyogVENQSVBMSUIgKi8KLSAgICByZXR1cm4oMCk7Ci19Ci0KLWlu dAotZndkeF9jbG9zZV9hbGwoKSB7Ci0gICAgaW50IHgsZmQ7Ci0KLSAgICBkZWJ1ZyhGMTExLCJm d2R4X2Nsb3NlX2FsbCgpIiwKLSAgICAgICAgICAiVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gp LmZvcndhcmRfeC5saXN0ZW5fc29ja2V0IiwKLSAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0ZP UldBUkRfWCkuZm9yd2FyZF94Lmxpc3Rlbl9zb2NrZXQpOwotCi0gICAgaWYgKCBURUxPUFRfU0Io VEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94Lmxpc3Rlbl9zb2NrZXQgIT0gLTEgKSB7Ci0jaWZk ZWYgVENQSVBMSUIKLSAgICAgICAgc29ja2V0X2Nsb3NlKFRFTE9QVF9TQihURUxPUFRfRk9SV0FS RF9YKS5mb3J3YXJkX3gubGlzdGVuX3NvY2tldCk7Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwotICAg ICAgICBjbG9zZShURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94Lmxpc3Rlbl9z b2NrZXQpOwotI2VuZGlmIC8qIFRDUElQTElCICovCi0gICAgICAgIFRFTE9QVF9TQihURUxPUFRf Rk9SV0FSRF9YKS5mb3J3YXJkX3gubGlzdGVuX3NvY2tldCA9IC0xOwotICAgIH0KLQotICAgIGZv ciAoeCA9IDA7IHggPCBNQVhGV0RYOyB4KyspIHsKLSAgICAgaWYgKFRFTE9QVF9TQihURUxPUFRf Rk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFt4XS5mZCAhPSAtMSkgewotICAgICAgZmQgPSBU RUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94LmNoYW5uZWxbeF0uZmQ7Ci0gICAg ICBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94LmNoYW5uZWxbeF0uZmQgPSAt MTsKLSAgICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFt4 XS5pZCA9IC0xOwotICAgICAgVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5j aGFubmVsW3hdLm5lZWRfdG9fc2VuZF94YXV0aCA9IDA7Ci0gICAgICBURUxPUFRfU0IoVEVMT1BU X0ZPUldBUkRfWCkuZm9yd2FyZF94LmNoYW5uZWxbeF0uc3VzcGVuZCA9IDA7Ci0jaWZkZWYgVENQ SVBMSUIKLSAgICAgIHNvY2tldF9jbG9zZShmZCk7Ci0jZWxzZSAvKiBUQ1BJUExJQiAqLwotICAg ICAgY2xvc2UoZmQpOwotI2VuZGlmIC8qIFRDUElQTElCICovCi0gICAgIH0KLSAgICB9Ci0gICAg cmV0dXJuKDApOwotfQotCi0vKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGFyZSBmb3IgVW5p eCAqLwotI2lmbmRlZiBzb2NrZXRfd3JpdGUKLSNkZWZpbmUgc29ja2V0X3dyaXRlKGYscyxuKSAg ICB3cml0ZShmLHMsbikKLSNlbmRpZiAvKiBzb2NrZXRfd3JpdGUgKi8KLSNpZm5kZWYgc29ja2V0 X3JlYWQKLSNkZWZpbmUgc29ja2V0X3JlYWQoZixzLG4pICAgICByZWFkKGYscyxuKQotI2VuZGlm IC8qIHNvY2tldF9yZWFkICovCi0KLWludAotZndkeF93cml0ZV9kYXRhX3RvX2NoYW5uZWwoY2hh bm5lbCwgZGF0YSwgbGVuKQotICAgIGludCBjaGFubmVsOyBjaGFyICogZGF0YTsgaW50IGxlbjsK LXsKLSAgICBpbnQgc29jaywgY291bnQsIHRyeT0wLCBsZW5ndGggPSBsZW4sIGk7Ci0KLSAgICBp ZiAoIGxlbiA8PSAwICkKLSAgICAgICAgcmV0dXJuKDApOwotCi0gICAgZm9yICggaT0wOyBpPE1B WEZXRFggOyBpKysgKSB7Ci0gICAgICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCku Zm9yd2FyZF94LmNoYW5uZWxbaV0uaWQgPT0gY2hhbm5lbCkKLSAgICAgICAgICAgIGJyZWFrOwot ICAgIH0KLSAgICBpZiAoIGkgPT0gTUFYRldEWCApIHsKLSAgICAgICAgZGVidWcoRjExMCwiZndk eF93cml0ZV9kYXRhX3RvX2NoYW5uZWwiLAotICAgICAgICAgICAgICAgImF0dGVtcHRpbmcgdG8g d3JpdGUgdG8gY2xvc2VkIGNoYW5uZWwiLDApOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0K LQotICAgIHNvY2sgPSBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94LmNoYW5u ZWxbaV0uZmQ7Ci0gICAgZGVidWcoRjExMSwiZndkeF93cml0ZV9kYXRhX3RvX2NoYW5uZWwiLCJz b2NrZXQiLHNvY2spOwotICAgIGNraGV4ZHVtcCgiZndkeF93cml0ZV9kYXRhX3RvX2NoYW5uZWwi LGRhdGEsbGVuKTsKLQotICBmd2R4X3dyaXRlX2RhdGFfdG9fY2hhbm5lbF9yZXRyeToKLQotICAg IGlmICgoY291bnQgPSBzb2NrZXRfd3JpdGUoc29jayxkYXRhLGxlbikpIDwgMCkgewotICAgICAg ICBpbnQgc19lcnJubyA9IHNvY2tldF9lcnJubzsgLyogbWF5YmUgYSBmdW5jdGlvbiAqLwotICAg ICAgICBkZWJ1ZyhGMTAxLCJmd2R4X3dyaXRlX2RhdGFfdG9fY2hhbm5lbCBzb2NrZXRfd3JpdGUg ZXJyb3IiLCIiLHNfZXJybm8pOwotI2lmZGVmIEJFVEFURVNUCi0gICAgICAgIHByaW50ZigiZndk eF93cml0ZV9kYXRhX3RvX2NoYW5uZWwgZXJyb3JcclxuIik7Ci0jZW5kaWYgLyogQkVUQVRFU1Qg Ki8KLSNpZmRlZiBPUzIKLSAgICAgICAgaWYgKG9zMnNvY2tldGVycm9yKHNfZXJybm8pIDwgMCkK LSAgICAgICAgICAgIHJldHVybigtMik7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgIHJldHVy bigtMSk7ICAgICAgICAgICAgICAgICAvKiBDYWxsIGl0IGFuIGkvbyBlcnJvciAqLwotICAgIH0K LSAgICBpZiAoY291bnQgPCBsZW4pIHsKLSAgICAgICAgZGVidWcoRjExMSwiZndkeF93cml0ZV9k YXRhX3RvX2NoYW5uZWwgc29ja2V0X3dyaXRlIixkYXRhLGNvdW50KTsKLSAgICAgICAgaWYgKGNv dW50ID4gMCkgewotICAgICAgICAgICAgZGF0YSArPSBjb3VudDsKLSAgICAgICAgICAgIGxlbiAt PSBjb3VudDsKLSAgICAgICAgfQotICAgICAgICBkZWJ1ZyhGMTExLCJmd2R4X3dyaXRlX2RhdGFf dG9fY2hhbm5lbCByZXRyeSIsZGF0YSxsZW4pOwotICAgICAgICBpZiAoIGxlbiA+IDAgKQotICAg ICAgICAgICAgZ290byBmd2R4X3dyaXRlX2RhdGFfdG9fY2hhbm5lbF9yZXRyeTsKLSAgICB9Ci0K LSAgICBkZWJ1ZyhGMTExLCJmd2R4X3dyaXRlX2RhdGFfdG9fY2hhbm5lbCBjb21wbGV0ZSIsZGF0 YSxsZW5ndGgpOwotICAgIHJldHVybihsZW5ndGgpOyAvKiBzdWNjZXNzIC0gcmV0dXJuIHRvdGFs IGxlbmd0aCAqLwotfQotCi1WT0lECi1md2R4X2NoZWNrX3NvY2tldHMoZmRfc2V0ICppYml0cykK LXsKLSAgICBpbnQgeCwgc29jaywgY2hhbm5lbCwgYnl0ZXM7Ci0gICAgc3RhdGljIGNoYXIgYnVm ZmVyWzMyMDAwXTsKLQotICAgIGRlYnVnKEYxMDAsImZ3ZHhfY2hlY2tfc29ja2V0cygpIiwiIiww KTsKLSAgICBpZiAoIHNzdGVsbmV0ICYmICFURUxPUFRfTUUoVEVMT1BUX0ZPUldBUkRfWCkgfHwK LSAgICAgICAgICFzc3RlbG5ldCAmJiAhVEVMT1BUX1UoVEVMT1BUX0ZPUldBUkRfWCkpIHsKLSAg ICAgICAgZGVidWcoRjExMCwiZndkeF9jaGVja19zb2NrZXRzKCkiLCJURUxPUFRfRk9SV0FSRF9Y IG5vdCBuZWdvdGlhdGVkIiwwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZvciAo eCA9IDA7IHggPCBNQVhGV0RYOyB4KyspIHsKLSAgICAgICAgaWYgKCBURUxPUFRfU0IoVEVMT1BU X0ZPUldBUkRfWCkuZm9yd2FyZF94LmNoYW5uZWxbeF0uZmQgPT0gLTEgfHwKLSAgICAgICAgICAg ICBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94LmNoYW5uZWxbeF0uc3VzcGVu ZCApCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBzb2NrID0gVEVMT1BUX1NCKFRF TE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW3hdLmZkOwotICAgICAgICBpZiAoRkRf SVNTRVQoc29jaywgaWJpdHMpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFubmVsID0gVEVM T1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW3hdLmlkOwotICAgICAg ICAgICAgZGVidWcoRjExMSwiZndkeF9jaGVja19zb2NrZXRzKCkiLCJjaGFubmVsIHNldCIsY2hh bm5lbCk7Ci0KLSAgICAgICAgICAgIGJ5dGVzID0gc29ja2V0X3JlYWQoc29jaywgYnVmZmVyLCBz aXplb2YoYnVmZmVyKSk7Ci0gICAgICAgICAgICBpZiAoYnl0ZXMgPiAwKQotICAgICAgICAgICAg ICAgIGZ3ZHhfc2VuZF9kYXRhX2Zyb21fY2hhbm5lbChjaGFubmVsLCBidWZmZXIsIGJ5dGVzKTsK LSAgICAgICAgICAgIGVsc2UgaWYgKGJ5dGVzID09IDApIHsKLSAgICAgICAgICAgICAgICBmd2R4 X2Nsb3NlX2NoYW5uZWwoY2hhbm5lbCk7Ci0gICAgICAgICAgICAgICAgZndkeF9zZW5kX2Nsb3Nl KGNoYW5uZWwpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1pbnQKLWZ3 ZHhfaW5pdF9mZF9zZXQoZmRfc2V0ICppYml0cykKLXsKLSAgICBpbnQgeCxzZXQ9MCxjbnQ9MDsK LQotICAgIGlmICggc3N0ZWxuZXQgJiYgIVRFTE9QVF9NRShURUxPUFRfRk9SV0FSRF9YKSB8fAot ICAgICAgICAgIXNzdGVsbmV0ICYmICFURUxPUFRfVShURUxPUFRfRk9SV0FSRF9YKSkgewotICAg ICAgICBkZWJ1ZyhGMTEwLCJmd2R4X2luaXRfZmRfc2V0KCkiLCJURUxPUFRfRk9SV0FSRF9YIG5v dCBuZWdvdGlhdGVkIiwwKTsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLQotICAgIGlmIChU RUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94Lmxpc3Rlbl9zb2NrZXQgIT0gLTEp IHsKLSAgICAgICAgc2V0Kys7Ci0gICAgICAgIEZEX1NFVChURUxPUFRfU0IoVEVMT1BUX0ZPUldB UkRfWCkuZm9yd2FyZF94Lmxpc3Rlbl9zb2NrZXQsIGliaXRzKTsKLSAgICB9Ci0gICAgZm9yICh4 ID0gMDsgeCA8IE1BWEZXRFg7IHgrKykgewotICAgICAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9G T1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW3hdLmZkICE9IC0xKSB7Ci0gICAgICAgICAgICBj bnQrKzsKLSAgICAgICAgICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2Fy ZF94LmNoYW5uZWxbeF0uc3VzcGVuZCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg ICAgICAgIHNldCsrOwotICAgICAgICAgICAgRkRfU0VUKFRFTE9QVF9TQihURUxPUFRfRk9SV0FS RF9YKS5mb3J3YXJkX3guY2hhbm5lbFt4XS5mZCwgaWJpdHMpOwotICAgICAgICB9Ci0gICAgfQot ICAgIGlmIChzZXQgKyBjbnQgPT0gMCkgewotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0gZWxz ZSB7Ci0gICAgICAgIHJldHVybihzZXQpOwotICAgIH0KLX0KLQotI2lmZGVmIE5UCi1WT0lECi1m d2R4X3RocmVhZCggVk9JRCAqIGR1bW15ICkKLXsKLSAgICBmZF9zZXQgaWZkczsKLSAgICBzdHJ1 Y3QgdGltZXZhbCB0djsKLSAgICBleHRlcm4gaW50IHByaW9yaXR5OwotICAgIGludCBuOwotCi0g ICAgc2V0aW50KCk7Ci0gICAgU2V0VGhyZWFkUHJ0eShwcmlvcml0eSxpc1dpbjk1KCkgPyAzIDog MTEpOwotCi0gICAgd2hpbGUgKCAhc3N0ZWxuZXQgJiYgVEVMT1BUX1UoVEVMT1BUX0ZPUldBUkRf WCkgfHwKLSAgICAgICAgICAgIHNzdGVsbmV0ICYmIFRFTE9QVF9NRShURUxPUFRfRk9SV0FSRF9Y KSkKLSAgICB7Ci0gICAgICAgIEZEX1pFUk8oJmlmZHMpOwotICAgICAgICBuID0gZndkeF9pbml0 X2ZkX3NldCgmaWZkcyk7Ci0gICAgICAgIGlmIChuID4gMCkgewotICAgICAgICAgICAgdHYudHZf c2VjID0gMDsKLSAgICAgICAgICAgIHR2LnR2X3VzZWMgPSAyNTAwOwotICAgICAgICAgICAgaWYg KCBzZWxlY3QoRkRfU0VUU0laRSwgJmlmZHMsIE5VTEwsIE5VTEwsICZ0dikgPiAwICkKLSAgICAg ICAgICAgICAgICBmd2R4X2NoZWNrX3NvY2tldHMoJmlmZHMpOwotCi0gICAgICAgIH0gZWxzZSBp ZiAobiA8IDApIHsKLSAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3 YXJkX3gudGhyZWFkX3N0YXJ0ZWQgPSAwOwotICAgICAgICAgICAgY2tUaHJlYWRFbmQoTlVMTCk7 Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzbGVlcCgxKTsKLSAgICAgICAgfQotICAg IH0KLX0KLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIENLX0ZPUldBUkRfWCAqLwotI2VuZGlm IC8qIFROQ09ERSAqLwotI2VuZGlmIC8qIE5FVENPTk4gKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0 LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY25ldC5oIGIvY2tlcm1pdC05LjAuMzAy LWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NuZXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDQwYmM3NC4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1p dC05LjAuMzAyL2NrY25ldC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUwOSArMCwwIEBACi0vKiBj a2NuZXQuaCAtLSBTeW1ib2wgYW5kIG1hY3JvIGRlZmluaXRpb25zIGZvciBDLUtlcm1pdCBuZXR3 b3JrIHN1cHBvcnQgKi8KLQotLyoKLSAgQXV0aG9yOiBGcmFuayBkYSBDcnV6IDxmZGNAY29sdW1i aWEuZWR1PgotICBDb2x1bWJpYSBVbml2ZXJzaXR5IEFjYWRlbWljIEluZm9ybWF0aW9uIFN5c3Rl bXMsIE5ldyBZb3JrIENpdHkuCi0KLSAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDA5LAotICAgIFRy dXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCi0g ICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmls ZSBvciB0aGUKLSAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBk aXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KLSovCi0jaWZuZGVmIENLQ05FVF9ICi0jZGVmaW5l IENLQ05FVF9ICi0KLS8qIE5ldHdvcmsgdHlwZXMgKi8KLQotI2RlZmluZSBORVRfTk9ORSAwICAg ICAgICAgICAgICAgICAgICAgIC8qIE5vbmUgKi8KLSNkZWZpbmUgTkVUX1RDUEIgMSAgICAgICAg ICAgICAgICAgICAgICAvKiBUQ1AvSVAgQmVya2VsZXkgKHNvY2tldCkgKi8KLSNkZWZpbmUgTkVU X1RDUEEgMiAgICAgICAgICAgICAgICAgICAgICAvKiBUQ1AvSVAgQVQmVCAoc3RyZWFtcykgKi8K LSNkZWZpbmUgTkVUX1NYMjUgMyAgICAgICAgICAgICAgICAgICAgICAvKiBTVU5PUyBTdW5MaW5r IFguMjUgKi8KLSNkZWZpbmUgTkVUX0RFQyAgNCAgICAgICAgICAgICAgICAgICAgICAvKiBERUNu ZXQgKi8KLSNkZWZpbmUgTkVUX1ZQU0kgNSAgICAgICAgICAgICAgICAgICAgICAvKiBWQVggUFNJ ICovCi0jZGVmaW5lIE5FVF9QSVBFIDYgICAgICAgICAgICAgICAgICAgICAgLyogTEFOIE1hbmFn ZXIgTmFtZWQgUGlwZSAqLwotI2RlZmluZSBORVRfVlgyNSA3ICAgICAgICAgICAgICAgICAgICAg IC8qIFN0cmF0dXMgVk9TIFguMjUgKi8KLSNkZWZpbmUgTkVUX0JJT1MgOCAgICAgICAgICAgICAg ICAgICAgICAvKiBJQk0gTmV0QmlvcyAqLwotI2RlZmluZSBORVRfU0xBVCA5ICAgICAgICAgICAg ICAgICAgICAgIC8qIE1lcmlkaWFuIFRlY2hub2xvZ2llcycgU3VwZXJMQVQgKi8KLSNkZWZpbmUg TkVUX0ZJTEUgMTAgICAgICAgICAgICAgICAgICAgICAvKiBSZWFkIGZyb20gYSBmaWxlICovCi0j ZGVmaW5lIE5FVF9DTUQgIDExICAgICAgICAgICAgICAgICAgICAgLyogUmVhZCBmcm9tIGEgc3Vi LXByb2Nlc3MgKi8KLSNkZWZpbmUgTkVUX0RMTCAgMTIgICAgICAgICAgICAgICAgICAgICAvKiBM b2FkIGEgRExMIGZvciB1c2UgYXMgY29tbSBjaGFubmVsKi8KLSNkZWZpbmUgTkVUX0lYMjUgMTMg ICAgICAgICAgICAgICAgICAgICAvKiBJQk0gQUlYIDQuMSBYLjI1ICovCi0jZGVmaW5lIE5FVF9I WDI1IDE0ICAgICAgICAgICAgICAgICAgICAgLyogSFAtVVggMTAgWC4yNSAqLwotI2RlZmluZSBO RVRfUFRZICAxNSAgICAgICAgICAgICAgICAgICAgIC8qIFBzZXVkb3Rlcm1pbmFsICovCi0jZGVm aW5lIE5FVF9TU0ggIDE2ICAgICAgICAgICAgICAgICAgICAgLyogU1NIICovCi0KLSNpZmRlZiBP UzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbiBPUy8yLCBvbmx5IHRoZSAzMi1i aXQgKi8KLSNpZm5kZWYgX18zMkJJVF9fICAgICAgICAgICAgICAgICAgICAgICAvKiB2ZXJzaW9u IGdldHMgTkVUQklPUyAqLwotI2lmZGVmIENLX05FVEJJT1MKLSN1bmRlZiBDS19ORVRCSU9TCi0j ZW5kaWYgLyogQ0tfTkVUQklPUyAqLwotI2VuZGlmIC8qIF9fMzJCSVRfXyAqLwotI2VuZGlmIC8q IE9TMiAqLwotCi0jaWZkZWYgX01fUFBDCi0jaWZkZWYgU1VQRVJMQVQKLSN1bmRlZiBTVVBFUkxB VAotI2VuZGlmIC8qIFNVUEVSTEFUICovCi0jZW5kaWYgLyogX01fUFBDICovCi0KLSNpZmRlZiBO UElQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgaXRlbXMgaW4gY29tbW9uIHRv ICovCi0jZGVmaW5lIE5QSVBFT1JCSU9TICAgICAgICAgICAgICAgICAgICAgLyogTmFtZWQgUGlw ZXMgYW5kIE5FVEJJT1MgKi8KLSNlbmRpZiAvKiBOUElQRSAqLwotI2lmZGVmIENLX05FVEJJT1MK LSNpZm5kZWYgTlBJUEVPUkJJT1MKLSNkZWZpbmUgTlBJUEVPUkJJT1MKLSNlbmRpZiAvKiBOUElQ RU9SQklPUyAqLwotI2VuZGlmIC8qIENLX05FVEJJT1MgKi8KLQotLyogTmV0d29yayB2aXJ0dWFs IHRlcm1pbmFsIHByb3RvY29scyAoZm9yIFNFVCBIT1NUIGNvbm5lY3Rpb25zKSAqLwotLyogRlRQ LCBIVFRQIGFuZCBTU0ggaGF2ZSB0aGVpciBvd24gc3RhY2tzICAgICAgICAgICAgICAgICAgICAg ICAqLwotCi0jZGVmaW5lIE5QX0RFRkFVTFQgICAgMjU1Ci0jZGVmaW5lIE5QX05PTkUgICAgICAg ICAwICAgICAgICAgICAgICAgLyogTm9uZSAoYXN5bmMpICovCi0jZGVmaW5lIE5QX1RFTE5FVCAg ICAgICAxICAgICAgICAgICAgICAgLyogVENQL0lQIHRlbG5ldCAqLwotI2RlZmluZSBOUF9WVFAg ICAgICAgICAgMiAgICAgICAgICAgICAgIC8qIElTTyBWaXJ0dWFsIFRlcm1pbmFsIFByb3RvY29s ICovCi0jZGVmaW5lIE5QX1gzICAgICAgICAgICAzICAgICAgICAgICAgICAgLyogQ0NJVFQgWC4z ICovCi0jZGVmaW5lIE5QX1gyOCAgICAgICAgICA0ICAgICAgICAgICAgICAgLyogQ0NJVFQgWC4y OCAqLwotI2RlZmluZSBOUF9YMjkgICAgICAgICAgNSAgICAgICAgICAgICAgIC8qIENDSVRUIFgu MjkgKi8KLSNkZWZpbmUgTlBfUkxPR0lOICAgICAgIDYgICAgICAgICAgICAgICAvKiBUQ1AvSVAg UmVtb3RlIGxvZ2luICovCi0jZGVmaW5lIE5QX0tFUk1JVCAgICAgICA3ICAgICAgICAgICAgICAg LyogVENQL0lQIEtlcm1pdCAqLwotI2RlZmluZSBOUF9UQ1BSQVcgICAgICAgOCAgICAgICAgICAg ICAgIC8qIFRDUC9JUCBSYXcgc29ja2V0ICovCi0jZGVmaW5lIE5QX1RDUFVOSyAgICAgICA5ICAg ICAgICAgICAgICAgLyogVENQL0lQIFVua25vd24gKi8KLSNkZWZpbmUgTlBfU1NMICAgICAgICAg MTAgICAgICAgICAgICAgICAvKiBUQ1AvSVAgU1NMdjIzICovCi0jZGVmaW5lIE5QX1RMUyAgICAg ICAgIDExICAgICAgICAgICAgICAgLyogVENQL0lQIFRMU3YxICovCi0jZGVmaW5lIE5QX1NTTF9U RUxORVQgIDEyICAgICAgICAgICAgICAgLyogVENQL0lQIFRlbG5ldCBvdmVyIFNTTHYyMyAqLwot I2RlZmluZSBOUF9UTFNfVEVMTkVUICAxMyAgICAgICAgICAgICAgIC8qIFRDUC9JUCBUZWxuZXQg b3ZlciBUTFN2MSAqLwotI2RlZmluZSBOUF9LNExPR0lOICAgICAxNCAgICAgICAgICAgICAgIC8q IFRDUC9JUCBLZXJiZXJpemVkIHJlbW90ZSBsb2dpbiAqLwotI2RlZmluZSBOUF9FSzRMT0dJTiAg ICAxNSAgICAgICAgICAgICAgIC8qIFRDUC9JUCBFbmNyeXB0ZWQgS2VyYmVyaXplZCAuLi4gKi8K LSNkZWZpbmUgTlBfSzVMT0dJTiAgICAgMTYgICAgICAgICAgICAgICAvKiBUQ1AvSVAgS2VyYmVy aXplZCByZW1vdGUgbG9naW4gKi8KLSNkZWZpbmUgTlBfRUs1TE9HSU4gICAgMTcgICAgICAgICAg ICAgICAvKiBUQ1AvSVAgRW5jcnlwdGVkIEtlcmJlcml6ZWQgLi4uICovCi0jZGVmaW5lIE5QX0s1 VTJVICAgICAgIDE4ICAgICAgICAgICAgICAgLyogVENQL0lQIEtlcmJlcm9zIDUgVXNlciB0byBV c2VyICovCi0jZGVmaW5lIE5QX0NURVJNICAgICAgIDE5ICAgICAgICAgICAgICAgLyogREVDIENU RVJNICovCi0jZGVmaW5lIE5QX0xBVCAgICAgICAgIDIwICAgICAgICAgICAgICAgLyogREVDIExB VCAqLwotI2RlZmluZSBOUF9TU0xfUkFXICAgICAyMQkJLyogU1NMIHdpdGggbm8gVGVsbmV0IHBl cm1pdHRlZCAqLwotI2RlZmluZSBOUF9UTFNfUkFXICAgICAyMgkJLyogVExTIHdpdGggbm8gVGVs bmV0IHBlcm1pdHRlZCAqLwotCi0vKiBvdGhlcnMgaGVyZS4uLiAqLwotCi0jaWZkZWYgQ0tfU1NM Ci0jZGVmaW5lIElTX1RFTE5FVCgpICAgICAgKG5ldHR5cGUgPT0gTkVUX1RDUEIgJiYgKHR0bnBy b3RvID09IE5QX1RFTE5FVCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgfHwgdHRucHJvdG8g PT0gTlBfU1NMX1RFTE5FVCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgfHwgdHRucHJvdG8g PT0gTlBfVExTX1RFTE5FVCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgfHwgdHRucHJvdG8g PT0gTlBfS0VSTUlUKSkKLSNlbHNlIC8qIENLX1NTTCAqLwotI2RlZmluZSBJU19URUxORVQoKSAg ICAgIChuZXR0eXBlID09IE5FVF9UQ1BCICYmICh0dG5wcm90byA9PSBOUF9URUxORVQgXAotICAg ICAgICAgICAgICAgICAgICAgICAgIHx8IHR0bnByb3RvID09IE5QX0tFUk1JVCkpCi0jZW5kaWYg LyogQ0tfU1NMICovCi0KLSNpZmRlZiBDS19LRVJCRVJPUwotI2lmZGVmIEtSQjUKLSNpZmRlZiBL UkI0Ci0jZGVmaW5lIElTX1JMT0dJTigpICAgICAgKG5ldHR5cGUgPT0gTkVUX1RDUEIgJiYgKHR0 bnByb3RvID09IE5QX1JMT0dJTiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgfHwgdHRucHJv dG8gPT0gTlBfSzVMT0dJTiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgfHwgdHRucHJvdG8g PT0gTlBfRUs1TE9HSU4gXAotICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHR0bnByb3RvID09 IE5QX0s0TE9HSU4gXAotICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHR0bnByb3RvID09IE5Q X0VLNExPR0lOIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICApKQotI2Vsc2UgLyogS1JCNCAq LwotI2RlZmluZSBJU19STE9HSU4oKSAgICAgIChuZXR0eXBlID09IE5FVF9UQ1BCICYmICh0dG5w cm90byA9PSBOUF9STE9HSU4gXAotICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHR0bnByb3Rv ID09IE5QX0s1TE9HSU4gXAotICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHR0bnByb3RvID09 IE5QX0VLNUxPR0lOIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICApKQotI2VuZGlmIC8qIEtS QjQgKi8KLSNlbHNlIC8qIEtSQjUgKi8KLSNpZmRlZiBLUkI0Ci0jZGVmaW5lIElTX1JMT0dJTigp ICAgICAgKG5ldHR5cGUgPT0gTkVUX1RDUEIgJiYgKHR0bnByb3RvID09IE5QX1JMT0dJTiBcCi0g ICAgICAgICAgICAgICAgICAgICAgICAgfHwgdHRucHJvdG8gPT0gTlBfSzRMT0dJTiBcCi0gICAg ICAgICAgICAgICAgICAgICAgICAgfHwgdHRucHJvdG8gPT0gTlBfRUs0TE9HSU4gXAotICAgICAg ICAgICAgICAgICAgICAgICAgICkpCi0jZWxzZSAvKiBLUkI0ICovCi1LRVJCRVJPUyBkZWZpbmVk IHdpdGhvdXQgZWl0aGVyIEtSQjQgb3IgS1JCNQotI2VuZGlmIC8qIEtSQjQgKi8KLSNlbmRpZiAv KiBLUkI1ICovCi0jZWxzZSAvKiBDS19LRVJCRVJPUyAqLwotI2RlZmluZSBJU19STE9HSU4oKSAg ICAgIChuZXR0eXBlID09IE5FVF9UQ1BCICYmICh0dG5wcm90byA9PSBOUF9STE9HSU4pKQotI2Vu ZGlmIC8qIENLX0tFUkJFUk9TICovCi0KLSNkZWZpbmUgSVNfU1NIKCkgICAgICAgICAobmV0dHlw ZSA9PSBORVRfU1NIKQotCi0vKiBSTE9HSU4gTW9kZXMgKi8KLSNkZWZpbmUgICAgUkxfUkFXICAg ICAwICAgICAgICAgICAgICAgICAvKiAgRG8gTm90IFByb2Nlc3MgWE9OL1hPRkYgKi8KLSNkZWZp bmUgICAgUkxfQ09PS0VEICAxICAgICAgICAgICAgICAgICAvKiAgRG8gUHJvY2VzcyBYT04vWE9G RiAqLwotCi0vKiBFbmNyeXB0aW9uIHR5cGVzICovCi0KLSNkZWZpbmUgQ1hfTk9ORSAgICA5OTkK LQotI2lmZGVmIEVOQ1RZUEVfQU5ZCi0jZGVmaW5lIENYX0FVVE8gRU5DVFlQRV9BTlkKLSNlbHNl Ci0jZGVmaW5lIENYX0FVVE8gMAotI2VuZGlmIC8qIEVOQ1RZUEVfQU5ZICovCi0KLSNpZmRlZiBF TkNUWVBFX0RFU19DRkI2NAotI2RlZmluZSBDWF9ERVNDNjQgRU5DVFlQRV9ERVNfQ0ZCNjQKLSNl bHNlCi0jZGVmaW5lIENYX0RFU0M2NCAxCi0jZW5kaWYgLyogRU5DVFlQRV9ERVNfQ0ZCNjQgKi8K LQotI2lmZGVmIEVOQ1RZUEVfREVTX09GQjY0Ci0jZGVmaW5lIENYX0RFU082NCBFTkNUWVBFX0RF U19PRkI2NAotI2Vsc2UKLSNkZWZpbmUgQ1hfREVTTzY0IDIKLSNlbmRpZiAvKiBFTkNUWVBFX0RF U19PRkI2NCAqLwotCi0jaWZkZWYgRU5DVFlQRV9ERVMzX0NGQjY0Ci0jZGVmaW5lIENYX0RFUzND NjQgRU5DVFlQRV9ERVMzX0NGQjY0Ci0jZWxzZQotI2RlZmluZSBDWF9ERVMzQzY0IDMKLSNlbmRp ZiAvKiBFTkNUWVBFX0RFU19DRkI2NCAqLwotCi0jaWZkZWYgRU5DVFlQRV9ERVMzX09GQjY0Ci0j ZGVmaW5lIENYX0RFU082NCBFTkNUWVBFX0RFUzNfT0ZCNjQKLSNlbHNlCi0jZGVmaW5lIENYX0RF UzNPNjQgNAotI2VuZGlmIC8qIEVOQ1RZUEVfREVTX09GQjY0ICovCi0KLSNpZmRlZiBFTkNUWVBF X0NBU1Q1XzQwX0NGQjY0Ci0jZGVmaW5lIENYX0M1NDBDNjQgRU5DVFlQRV9DQVNUNV80MF9DRkI2 NAotI2Vsc2UKLSNkZWZpbmUgQ1hfQzU0MEM2NCA4Ci0jZW5kaWYgLyogRU5DVFlQRV9DQVNUNV80 MF9DRkI2NCAqLwotCi0jaWZkZWYgRU5DVFlQRV9DQVNUNV80MF9PRkI2NAotI2RlZmluZSBDWF9D NTQwTzY0IEVOQ1RZUEVfQ0FTVDVfNDBfT0ZCNjQKLSNlbHNlCi0jZGVmaW5lIENYX0M1NDBPNjQg OQotI2VuZGlmIC8qIEVOQ1RZUEVfQ0FTVDVfNDBfT0ZCNjQgKi8KLQotI2lmZGVmIEVOQ1RZUEVf Q0FTVDEyOF9DRkI2NAotI2RlZmluZSBDWF9DMTI4QzY0IEVOQ1RZUEVfQ0FTVDEyOF9DRkI2NAot I2Vsc2UKLSNkZWZpbmUgQ1hfQzEyOEM2NCAxMAotI2VuZGlmIC8qIEVOQ1RZUEVfQ0FTVDEyOF9D RkI2NCAqLwotCi0jaWZkZWYgRU5DVFlQRV9DQVNUMTI4X09GQjY0Ci0jZGVmaW5lIENYX0MxMjhP NjQgRU5DVFlQRV9DQVNUMTI4X09GQjY0Ci0jZWxzZQotI2RlZmluZSBDWF9DMTI4TzY0IDExCi0j ZW5kaWYgLyogRU5DVFlQRV9DQVNUMTI4X09GQjY0ICovCi0KLS8qIEJhc2ljIG5ldHdvcmsgZnVu Y3Rpb24gcHJvdG90eXBlcywgY29tbW9uIHRvIGFsbC4gKi8KLQotX1BST1RPVFlQKCBpbnQgbmV0 b3BlbiwgKGNoYXIgKiwgaW50ICosIGludCkgKTsKLV9QUk9UT1RZUCggaW50IG5ldGNsb3MsICh2 b2lkKSApOwotX1BST1RPVFlQKCBpbnQgbmV0Zmx1aSwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGlu dCBuZXR0Y2hrLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IG5ldHhjaGssIChpbnQpICk7Ci1f UFJPVE9UWVAoIGludCBuZXRicmVhaywgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBuZXRpbmMs IChpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBuZXR4aW4sIChpbnQsIENIQVIgKikgKTsKLV9QUk9U T1RZUCggaW50IG5ldHRvbCwgKENIQVIgKiwgaW50KSApOwotX1BST1RPVFlQKCBpbnQgbmV0dG9j LCAoQ0hBUikgKTsKLSNpZmRlZiBUQ1BTT0NLRVQKLV9QUk9UT1RZUCggaW50IGdldHRjcHBvcnQs ICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgZ2V0dGNwcG9ydCwgKHZvaWQpICk7Ci0jZW5kaWYJ LyogVENQU09DS0VUICovCi0KLS8qCi0gIFN1bkxpbmsgWC4yNSBzdXBwb3J0IGJ5IE1hcmNlbGxv IEZydXRpZywgQ2F0aG9saWMgVW5pdmVyc2l0eSwKLSAgUmlvIGRlIEphbmVpcm8sIEJyYXppbCwg MTk5MC4KLQotICBNYXliZSB0aGlzIGNhbiBiZSBhZGFwdGVkIHRvIFZBWCBQU0kgYW5kIG90aGVy IFguMjUgcHJvZHVjdHMgdG9vLgotKi8KLSNpZm5kZWYgU1VOT1M0ICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBPbmx5IHZhbGlkIGZvciBTVU5PUzQgKi8KLSNpZm5kZWYgU09MQVJJUwotI2lm ZGVmIFNVTlgyNQotI3VuZGVmIFNVTlgyNQotI2VuZGlmIC8qIFNVTlgyNSAqLwotI2VuZGlmIC8q IFNPTEFSSVMgKi8KLSNlbmRpZiAvKiBTVU5PUzQgKi8KLQotI2lmZGVmIFNUUkFUVVNYMjUKLSNk ZWZpbmUgQU5ZWDI1Ci0jZGVmaW5lIE1BWF9VU0VSX0RBVEEgMTI4IC8qIFNVTiBkZWZpbmVzIHRo aXMgaW4gYSBoZWFkZXIgZmlsZSwgSSBiZWxpZXZlLiAqLwotI2VuZGlmIC8qIFNUUkFUVVNYMjUg Ki8KLQotI2lmZGVmIFNVTlgyNQotI2RlZmluZSBBTllYMjUKLSNlbmRpZiAvKiBTVU5YMjUgKi8K LQotI2lmZGVmIElCTVgyNSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFJWCA0LjEgWC4y NSAqLwotI2lmbmRlZiBBSVg0MQotI3VuZGVmIElCTVgyNQotI2Vsc2UgLyogQUlYNDEgKi8KLSNk ZWZpbmUgQU5ZWDI1Ci0jZGVmaW5lIE1BWF9VU0VSX0RBVEEgTlBJX01BWF9EQVRBICAgICAgLyog dXNlZCBmb3IgYnVmZmVyIHNpemVzICovCi0jZW5kaWYgLyogQUlYNDEgKi8KLSNlbmRpZiAvKiBJ Qk1YMjUgKi8KLQotI2lmZGVmIEhQWDI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhQ LVVYIDEwLiogWC4yNSAqLwotI2lmbmRlZiBIUFVYMTAKLSN1bmRlZiBIUFgyNQotI2Vsc2UgLyog SFBVWDEwICovCi0jZGVmaW5lIEFOWVgyNQotI2VuZGlmIC8qIEhQVVgxMCAqLwotI2VuZGlmIC8q IEhQWDI1ICovCi0KLSNpZmRlZiBBTllYMjUKLSNpZm5kZWYgTkVUQ09OTiAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBBTllYMjUgaW1wbGllcyBORVRDT05OICovCi0jZGVmaW5lIE5FVENPTk4K LSNlbmRpZiAvKiBORVRDT05OICovCi0KLSNkZWZpbmUgTUFYUEFEUEFSTVMgICAgICAgICAgICAg ICAgMjIgICAvKiBOdW1iZXIgb2YgUEFEIHBhcmFtZXRlcnMgKi8KLSNkZWZpbmUgTUFYQ1VEQVRB ICAgICAgICAgICAgICAgICAgMTIgICAvKiBNYXggbGVuZ3RoIG9mIFguMjUgY2FsbCB1c2VyIGRh dGEgKi8KLSNkZWZpbmUgWDI5UElEICAgICAgICAgICAgICAgICAgICAgIDEgICAvKiBYLjI5IHBy b3RvY29sIElEICovCi0jZGVmaW5lIFgyOVBJRExFTiAgICAgICAgICAgICAgICAgICA0ICAgLyog WC4yOSBwcm90b2NvbCBJRCBsZW5ndGggKi8KLQotI2RlZmluZSBYMjlfU0VUX1BBUk1TICAgICAg ICAgICAgICAgMgotI2RlZmluZSBYMjlfUkVBRF9QQVJNUyAgICAgICAgICAgICAgNAotI2RlZmlu ZSBYMjlfU0VUX0FORF9SRUFEX1BBUk1TICAgICAgNgotI2RlZmluZSBYMjlfSU5WSVRBVElPTl9U T19DTEVBUiAgICAgMQotI2RlZmluZSBYMjlfUEFSQU1FVEVSX0lORElDQVRJT04gICAgMAotI2Rl ZmluZSBYMjlfSU5ESUNBVElPTl9PRl9CUkVBSyAgICAgMwotI2RlZmluZSBYMjlfRVJST1IgICAg ICAgICAgICAgICAgICAgNQotCi0jZGVmaW5lIElOVkFMSURfUEFEX1BBUk0gICAgICAgICAgICAx Ci0KLSNkZWZpbmUgUEFEX0JSRUFLX0NIQVJBQ1RFUiAgICAgICAgIDAKLQotI2RlZmluZSBQQURf RVNDQVBFICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQQURfRUNITyAgICAgICAgICAgICAg ICAgICAgMgotI2RlZmluZSBQQURfREFUQV9GT1JXQVJEX0NIQVIgICAgICAgMwotI2RlZmluZSBQ QURfREFUQV9GT1JXQVJEX1RJTUVPVVQgICAgNAotI2RlZmluZSBQQURfRkxPV19DT05UUk9MX0JZ X1BBRCAgICAgNQotI2RlZmluZSBQQURfU1VQUFJFU1NJT05fT0ZfU0lHTkFMUyAgNgotI2RlZmlu ZSBQQURfQlJFQUtfQUNUSU9OICAgICAgICAgICAgNwotI2RlZmluZSBQQURfU1VQUFJFU1NJT05f T0ZfREFUQSAgICAgOAotI2RlZmluZSBQQURfUEFERElOR19BRlRFUl9DUiAgICAgICAgOQotI2Rl ZmluZSBQQURfTElORV9GT0xESU5HICAgICAgICAgICAxMAotI2RlZmluZSBQQURfTElORV9TUEVF RCAgICAgICAgICAgICAxMQotI2RlZmluZSBQQURfRkxPV19DT05UUk9MX0JZX1VTRVIgICAxMgot I2RlZmluZSBQQURfTEZfQUZURVJfQ1IgICAgICAgICAgICAxMwotI2RlZmluZSBQQURfUEFERElO R19BRlRFUl9MRiAgICAgICAxNAotI2RlZmluZSBQQURfRURJVElORyAgICAgICAgICAgICAgICAx NQotI2RlZmluZSBQQURfQ0hBUl9ERUxFVEVfQ0hBUiAgICAgICAxNgotI2RlZmluZSBQQURfQlVG RkVSX0RFTEVURV9DSEFSICAgICAxNwotI2RlZmluZSBQQURfQlVGRkVSX0RJU1BMQVlfQ0hBUiAg ICAxOAotCi0jZGVmaW5lIE1BWElYMjUgTUFYX1VTRVJfREFUQSo3Ci0jZGVmaW5lIE1BWE9YMjUg TUFYX1VTRVJfREFUQQotI2VuZGlmIC8qIEFOWVgyNSAqLwotCi0jaWZkZWYgU1VOWDI1Ci0jaWZk ZWYgU09MQVJJUzI1ICAgICAgICAgICAgICAgICAgICAgICAgLyogYW5kIHByZXN1bWFibHkgU3Vu TGluayA5Lnh4ICovCi0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2lu Y2x1ZGUgPHN5cy9pb2Njb20uaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxz eXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tpby5oPgotI2luY2x1ZGUgPHN1bmRldi9z eW5jc3RhdC5oPgotI2luY2x1ZGUgPG5ldHgyNS94MjVfcGsuaD4KLSNpbmNsdWRlIDxuZXR4MjUv eDI1X2N0bC5oPgotI2luY2x1ZGUgPG5ldHgyNS94MjVfaW9jdGwuaD4KLSNlbHNlCi0jaW5jbHVk ZSA8c3lzL2lvY3RsLmg+ICAgICAgICAgICAgICAgICAgLyogWC4yNSBpbmNsdWRlcywgU3VuIG9u bHkgKi8KLSNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KLSNpZm5kZWYgU09MQVJJUwotI2luY2x1ZGUg PHN5cy9tYnVmLmg+Ci0jZW5kaWYgLyogU09MQVJJUyAqLwotI2luY2x1ZGUgPHN5cy9zb2NrZXQu aD4KLSNpbmNsdWRlIDxzeXMvcHJvdG9zdy5oPgotI2lmZGVmIFNPTEFSSVMKLSNpbmNsdWRlIDxz eXMvc29ja2lvLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHN5cy9kb21haW4uaD4KLSNlbmRpZiAvKiBT T0xBUklTICovCi0jaW5jbHVkZSA8c3lzL3NvY2tldHZhci5oPgotI2luY2x1ZGUgPG5ldC9pZi5o PgotI2luY2x1ZGUgPHN1bmRldi9zeW5jc3RhdC5oPgotI2luY2x1ZGUgPG5ldHgyNS94MjVfcGsu aD4KLSNpbmNsdWRlIDxuZXR4MjUveDI1X2N0bC5oPgotI2luY2x1ZGUgPG5ldHgyNS94MjVfaW9j dGwuaD4KLSNlbmRpZiAvKiBTT0xBUklTMjUgKi8KLSNlbmRpZiAvKiBTVU5YMjUgKi8KLQotI2lm ZGVmIEFOWVgyNQotCi0jaWZkZWYgSUJNWDI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog WC4yNSBpbmNsdWRlcywgQUlYIG9ubHkgKi8KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUg PHN5cy90d3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3R3bGliLmg+Ci0KLSNpbmNsdWRlIDxzeXMv c3RyZWFtLmg+Ci0jaW5jbHVkZSA8c3Ryb3B0cy5oPgotCi0jZGVmaW5lIE5QSV8yMCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogcmVxdWlyZWQgdG8gaW5jbHVkZSB0aGUgd2hvbGUgTlBJICov Ci0jaW5jbHVkZSA8c3lzL25waV8yMC5oPgotI2luY2x1ZGUgPHN5cy9ucGlhcGkuaD4KLSNpbmNs dWRlIDxzeXMvcGt0aW50Zi5oPgotCi0jaW5jbHVkZSA8b2RtaS5oPiAgICAgICAgICAgICAgICAg ICAgICAgLyogcmVxdWlyZWQgZm9yIGFjY2VzcyB0byB0aGUgT0RNICAgKi8KLSNpbmNsdWRlIDxz eXMvY2Znb2RtLmg+ICAgICAgICAgICAgICAgICAvKiBkYXRhYmFzZSwgbmVlZGVkIHRvIGZpbmQg b3V0IHRoZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxv Y2FsIE5VQS4gc2VlIHgyNWxvY2FsX251YSgpICAgICovCi0KLQotLyogSUJNIFgyNSBOUEkgZ2Vu ZXJpYyBwcmltaXRpdmUgdHlwZSAqLwotdHlwZWRlZiB1bmlvbiBOX25waV9jdGxfdCB7Ci0gICAg dWxvbmcgICAgICAgICAgICAgICBQUklNX3R5cGU7ICAgICAgICAgICAgICAvKiBnZW5lcmljIHBy aW1pdGl2ZSB0eXBlICovCi0gICAgY2hhciAgICAgICAgICAgICAgICBidWZmZXJbTlBJX01BWF9D VExdOyAgICAvKiBtYXhpbXVtIHByaW1pdGl2ZSBzaXplICovCi0gICAgTl9iaW5kX2Fja190ICAg ICAgICBiaW5kX2FjazsKLSAgICBOX2JpbmRfcmVxX3QgICAgICAgIGJpbmRfcmVxOwotICAgIE5f Y29ubl9jb25fdCAgICAgICAgY29ubl9jb247Ci0gICAgTl9jb25uX2luZF90ICAgICAgICBjb25u X2luZDsKLSAgICBOX2Nvbm5fcmVxX3QgICAgICAgIGNvbm5fcmVxOwotICAgIE5fY29ubl9yZXNf dCAgICAgICAgY29ubl9yZXM7Ci0gICAgTl9kYXRhX3JlcV90ICAgICAgICBkYXRhX3JlcTsKLSAg ICBOX2RhdGFfaW5kX3QgICAgICAgIGRhdGFfaW5kOwotICAgIE5fZGlzY29uX2luZF90ICAgICAg ZGlzY29uX2luZDsKLSAgICBOX2Rpc2Nvbl9yZXFfdCAgICAgIGRpc2Nvbl9yZXE7Ci0gICAgTl9l cnJvcl9hY2tfdCAgICAgICBlcnJvcl9hY2s7Ci0gICAgTl9leGRhdGFfaW5kX3QgICAgICBleGRh dGFfaW5kOwotICAgIE5faW5mb19hY2tfdCAgICAgICAgaW5mb19hY2s7Ci0gICAgTl9va19hY2tf dCAgICAgICAgICBva19hY2s7Ci0gICAgTl9yZXNldF9jb25fdCAgICAgICByZXNldF9jb247Ci0g ICAgTl9yZXNldF9yZXFfdCAgICAgICByZXNldF9yZXE7Ci0gICAgTl9yZXNldF9pbmRfdCAgICAg ICByZXNldF9pbmQ7Ci19IE5fbnBpX2N0bF90OwotCi0vKiBzb21lIGV4dHJhIGRlZmluaXRpb25z IHRvIGhlbHAgb3V0ICovCi10eXBlZGVmIGNoYXIgICAgeDI1YWRkcl90WzQ1XTsgICAgICAgICAg LyogbWF4IDQwIGRlZmluZWQgYnkgQ0NJVFQgKi8KLXR5cGVkZWYgY2hhciAgICBOX25waV9kYXRh X3RbTlBJX01BWF9EQVRBXTsKLQotLyogZmQgb3Igc2VydmVyIHdhaXRpbmcgZm9yIGNvbm5lY3Rp b25zLCB1c2VkIGJ5IG5ldGNsb3MgYW5kIG5ldG9wZW4gKi8KLWV4dGVybiBpbnQgeDI1c2VydmVy ZmQ7Ci0KLSNlbmRpZiAvKiBJQk1YMjUgKi8KLQotI2lmZGVmIEhQWDI1ICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFguMjUgaW5jbHVkZXMsIEhQLVVYIG9ubHkgKi8KLSNpbmNsdWRlIDx4 MjUvY2NpdHRwcm90by5oPgotI2luY2x1ZGUgPHgyNS94MjUuaD4KLSNpbmNsdWRlIDx4MjUveDI1 YWRkcnN0ci5oPgotI2luY2x1ZGUgPHgyNS94MjVjb2Rlcy5oPgotI2luY2x1ZGUgPHgyNS94MjVo ZF9pb2N0bC5oPgotI2luY2x1ZGUgPHgyNS94MjVpb2N0bHMuaD4KLSNpbmNsdWRlIDx4MjUveDI1 c3RyLmg+Ci0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0jZW5kaWYgLyogSFBYMjUgKi8KLQotLyog Qy1LZXJtaXQgWC4zIC8gWC4yNSAvIFguMjkgLyBYLjEyMSBzdXBwb3J0IGZ1bmN0aW9ucyAqLwot Ci0vKiAocmllaG06IHRoaXMgbGlzdCBvZiBmdW5jdGlvbnMgaXNuJ3QgcXVpdGUgcmlnaHQgZm9y IEFJWCkgKi8KLQotX1BST1RPVFlQKCBpbnQgc2hvcGFkLCAoaW50KSApOwotX1BST1RPVFlQKCBp bnQgc2hveDI1LCAoaW50KSApOwotX1BST1RPVFlQKCBWT0lEIGluaXRwYWQsICh2b2lkKSApOwot X1BST1RPVFlQKCBWT0lEIHNldHBhZCwgKENIQVIgKiwgaW50KSApOwotX1BST1RPVFlQKCBWT0lE IHJlYWRwYWQsIChDSEFSICosIGludCwgQ0hBUiAqKSApOwotX1BST1RPVFlQKCBpbnQgcWJpdHBr dCwgKENIQVIgKiwgaW50KSApOwotX1BST1RPVFlQKCBWT0lEIHNldHFiaXQsICh2b2lkKSApOwot X1BST1RPVFlQKCBWT0lEIHJlc2V0cWJpdCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIFZPSUQgYnJl YWthY3QsICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgcGt4MTIxLCAoY2hhciAqLCBDSEFSICop ICk7Ci1fUFJPVE9UWVAoIFNJR1RZUCB4MjVvb2JoLCAoaW50KSApOwotX1BST1RPVFlQKCBpbnQg eDI1ZGlhZywgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCB4MjVpbnRyLCAoY2hhcikgKTsKLV9Q Uk9UT1RZUCggaW50IHgyNXJlc2V0LCAoY2hhciwgY2hhcikgKTsKLV9QUk9UT1RZUCggaW50IHgy NWNsZWFyLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IHgyNXN0YXQsICh2b2lkKSApOwotX1BS T1RPVFlQKCBpbnQgeDI1aW4sIChpbnQsIENIQVIgKikgKTsKLV9QUk9UT1RZUCggaW50IHNldHBh ZHAsICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgc2V0eDI1LCAodm9pZCkgKTsKLV9QUk9UT1RZ UCggaW50IHgyNXhpbiwgKGludCwgQ0hBUiAqKSApOwotX1BST1RPVFlQKCBpbnQgeDI1aW5sLCAo Q0hBUiAqLCBpbnQsIGludCwgQ0hBUikgKTsKLQotI2lmZGVmIElCTVgyNQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldHVwIHgyNSAqLwotX1BST1RPVFlQKCB1 bG9uZyB4MjViaW5kLCAoaW50LCBjaGFyICosIGNoYXIgKiwgaW50LCBpbnQsIGludCwgdWxvbmcp ICk7Ci1fUFJPVE9UWVAoIGludCB4MjVjYWxsLCAoaW50LCBjaGFyICosIGNoYXIgKikgKTsgLyog Y29ubmVjdCB0byByZW1vdGUgKi8KLV9QUk9UT1RZUCggaW50IHgyNXVuYmluZCwgKGludCkgKTsg ICAgICAvKiBkaXNjb25uZWN0ICovCi1fUFJPVE9UWVAoIGNoYXIgKngyNXByaW0sIChpbnQpICk7 ICAgICAgLyogZGlzcGxheSBwcmltaXRpdmVzICovCi1fUFJPVE9UWVAoIGludCB4MjVsb2NhbF9u dWEsIChjaGFyICopICk7IC8qIGZpbmQgbG9jYWwgTlVBICovCi0jZW5kaWYgLyogSUJNWDI1ICov Ci0KLSNlbmRpZiAvKiBBTllYMjUgKi8KLQotLyogQ01VLU9wZW5WTVMvSVAgKi8KLQotI2lmZGVm IENNVV9UQ1BJUCAgICAgICAgICAgICAgICAgICAgICAgIC8qIENNVV9UQ1BJUCBpbXBsaWVzIFRD UFNPQ0tFVCAqLwotI2lmbmRlZiBUQ1BTT0NLRVQKLSNkZWZpbmUgVENQU09DS0VUCi0jZW5kaWYg LyogVENQU09DS0VUICovCi0jaWZuZGVmIFRDUElQTElCCi0jZGVmaW5lIFRDUElQTElCCi0jZW5k aWYgLyogVENQSVBMSUIgKi8KLSNlbmRpZiAvKiBDTVVfVENQSVAgKi8KLQotLyogREVDIFRDUC9J UCBmb3IgKE9wZW4pVk1TLCBwcmV2aW91c2x5IGtub3duIGFzIFVDWCAqLwotCi0jaWZkZWYgREVD X1RDUElQICAgICAgICAgICAgICAgICAgICAgICAgLyogREVDX1RDUElQIGltcGxpZXMgVENQU09D S0VUICovCi0jaWZuZGVmIFRDUFNPQ0tFVAotI2RlZmluZSBUQ1BTT0NLRVQKLSNlbmRpZiAvKiBU Q1BTT0NLRVQgKi8KLSNpZm5kZWYgVENQSVBMSUIKLSNkZWZpbmUgVENQSVBMSUIKLSNlbmRpZiAv KiBUQ1BJUExJQiAqLwotI2VuZGlmIC8qIERFQ19UQ1BJUCAqLwotCi0vKiBTUkkvVEdWL0Npc2Nv L1Byb2Nlc3MgTXVsdGlOZXQsIFRDUC9JUCBmb3IgVkFYL1ZNUyAqLwotCi0jaWZkZWYgTVVMVElO RVQgICAgICAgICAgICAgICAgICAgICAgICAgLyogTVVMVElORVQgaW1wbGllcyBUQ1BTT0NLRVQg Ki8KLSNpZm5kZWYgVENQU09DS0VUCi0jZGVmaW5lIFRDUFNPQ0tFVAotI2VuZGlmIC8qIFRDUFNP Q0tFVCAqLwotI2lmbmRlZiBUQ1BJUExJQgotI2RlZmluZSBUQ1BJUExJQgotI2VuZGlmIC8qIFRD UElQTElCICovCi0jaWZuZGVmIFRHVk9SV0lOICAgICAgICAgICAgICAgICAgICAgICAgLyogTVVM VElORVQgYW5kIFdJTlRDUCAqLwotI2RlZmluZSBUR1ZPUldJTiAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHNoYXJlIGEgbG90IG9mIGNvZGUuLi4gKi8KLSNlbmRpZiAvKiBUR1ZPUldJTiAqLwot I2VuZGlmIC8qIE1VTFRJTkVUICovCi0KLS8qIFdvbGxvbmdvbmcgVENQL0lQIGZvciBWQVgvVk1T ICovCi0KLSNpZmRlZiBXSU5UQ1AgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXSU5UQ1Ag aW1wbGllcyBUQ1BTT0NLRVQgKi8KLSNpZm5kZWYgVENQU09DS0VUCi0jZGVmaW5lIFRDUFNPQ0tF VAotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2lmbmRlZiBUQ1BJUExJQgotI2RlZmluZSBUQ1BJ UExJQgotI2VuZGlmIC8qIFRDUElQTElCICovCi0jaWZuZGVmIFRHVk9SV0lOICAgICAgICAgICAg ICAgICAgICAgICAgLyogV0lOVENQIGFuZCBNVUxUSU5FVCAqLwotI2RlZmluZSBUR1ZPUldJTiAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHNoYXJlIGEgbG90IG9mIGNvZGUuLi4gKi8KLSNlbmRp ZiAvKiBUR1ZPUldJTiAqLwotI2VuZGlmIC8qIFdJTlRDUCAqLwotCi0vKiBXb2xsb25nb25nIFRD UC9JUCBmb3IgQVQmVCBTeXMgViAqLwotCi0jaWZkZWYgV09MTE9OR09ORyAgICAgICAgICAgICAg ICAgICAgICAgLyogV09MTE9OR09ORyBpbXBsaWVzIFRDUFNPQ0tFVCAqLwotI2lmbmRlZiBUQ1BT T0NLRVQgICAgICAgICAgICAgICAgICAgICAgIC8qIERvbid0IGNvbmZ1c2UgV09MTE9OR09ORyAq LwotI2RlZmluZSBUQ1BTT0NLRVQgICAgICAgICAgICAgICAgICAgICAgIC8qICh3aGljaCBpcyBm b3IgVU5JWCkgd2l0aCAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLyAgICAgICAgICAgICAgICAg IC8qIFdJTlRDUCwgd2hpY2ggaXMgZm9yIFZNUyEgKi8KLSNlbmRpZiAvKiBXT0xMT05HT05HICov Ci0KLSNpZmRlZiBFWENFTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFWENFTEFOIGlt cGxpZXMgVENQU09DS0VUICovCi0jaWZuZGVmIFRDUFNPQ0tFVAotI2RlZmluZSBUQ1BTT0NLRVQK LSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNlbmRpZiAvKiBFWENFTEFOICovCi0KLSNpZmRlZiBJ TlRFUkxBTiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJTlRFUkxBTiBpbXBsaWVzIFRDUFNP Q0tFVCAqLwotI2lmbmRlZiBUQ1BTT0NLRVQKLSNkZWZpbmUgVENQU09DS0VUCi0jZW5kaWYgLyog VENQU09DS0VUICovCi0jZW5kaWYgLyogSU5URVJMQU4gKi8KLQotI2lmZGVmIEJFQk9YCi0jaWZu ZGVmIFRDUFNPQ0tFVAotI2RlZmluZSBUQ1BTT0NLRVQKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8K LSNpZm5kZWYgVENQSVBMSUIKLSNkZWZpbmUgVENQSVBMSUIKLSNlbmRpZiAvKiBUQ1BJUExJQiAq LwotI2RlZmluZSBzb2NrZXRfZXJybm8gICAgaF9lcnJubwotI2RlZmluZSBzb2NrZXRfcmVhZCh4 LHkseikgICAgICByZWN2KHgseSxzaXplb2YoY2hhcikseikKLSNkZWZpbmUgc29ja2V0X3dyaXRl KHgseSx6KSAgICAgc2VuZCh4LHksc2l6ZW9mKGNoYXIpLHopCi0jZGVmaW5lIHNvY2tldF9pb2N0 bCAgICBpb2N0bAotI2RlZmluZSBzb2NrZXRfY2xvc2UoeCkgICAgICAgICBjbG9zZXNvY2tldCh4 KQotI2lmbmRlZiBGSU9OQklPCi0jZGVmaW5lIEZJT05CSU8gMgotI2VuZGlmIC8qIEZJT05CSU8g Ki8KLSNpZm5kZWYgRklPTlJFQUQKLSNkZWZpbmUgRklPTlJFQUQgICAgICAgMQotI2VuZGlmIC8q IEZJT05SRUFEICovCi0jaWZuZGVmIFNJT0NBVE1BUksKLSNkZWZpbmUgU0lPQ0FUTUFSSyAgICAg MwotI2VuZGlmIC8qIFNJT0NBVE1BUksgKi8KLSNlbmRpZiAvKiBCRUJPWCAqLwotCi0jaWZkZWYg Q09NTUVOVCAvKiBubyBsb25nZXIgdXNlZCBidXQgbWlnaHQgY29tZSBpbiBoYW5keSBhZ2FpbiBs YXRlci4uLiAqLwotLyoKLSAgQ0tfUkVBRDAgY2FuIChhbmQgc2hvdWxkKSBiZSBkZWZpbmVkIGlm IGFuZCBvbmx5IGlmOgotICAoYSkgcmVhZChmZCwmeCwwKSBjYW4gYmUgdXNlZCBoYXJtbGVzc2x5 IG9uIGEgVENQL0lQIHNvY2tldCBjb25uZWN0aW9uLgotICAoYikgcmVhZChmZCwmeCwwKSByZXR1 cm5zIDAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgdXAsIC0xIGlmIGl0IGlzIGRvd24uCi0qLwotI2lm bmRlZiBDS19SRUFEMAotI2lmZGVmIFRDUFNPQ0tFVAotI2lmZGVmIFNVTk9TNDEgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEl0IHdvcmtzIGluIFN1bk9TIDQuMSAqLwotI2RlZmluZSBDS19S RUFEMAotI2Vsc2UKLSNpZmRlZiBORVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBh bmQgTmVYVFNURVAgKi8KLSNkZWZpbmUgQ0tfUkVBRDAKLSNlbmRpZiAvKiBORVhUICovCi0jZW5k aWYgLyogU1VOT1M0MSAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2VuZGlmIC8qIENLX1JF QUQwICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0vKiBUZWxuZXQgcHJvdG9jb2wgKi8KLQot I2lmZGVmIFRDUFNPQ0tFVCAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRDUFNPQ0tFVCBpbXBs aWVzIFROQ09ERSAqLwotI2lmbmRlZiBUTkNPREUgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFdoaWNoIG1lYW5zLi4uICovCi0jZGVmaW5lIFROQ09ERSAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogQ29tcGlsZSBpbiB0ZWxuZXQgY29kZSAqLwotI2VuZGlmIC8qIFROQ09ERSAqLwotCi0v KgotICAgUGxhdGZvcm1zIHdoZXJlIHdlIG11c3QgY2FsbCBnZXRob3N0bmFtZShidWYsbGVuKSBh bmQgdGhlbgotICAgZ2V0aG9zdGJ5bmFtZShidWYpIHRvIGdldCBsb2NhbCBJUCBhZGRyZXNzLCBy YXRoZXIgdGhhbiBjYWxsaW5nCi0gICBnZXRob3N0YnluYW1lKCIiKS4KLSovCi0jaWZuZGVmIENL R0hOTEhPU1QKLSNpZmRlZiBkYXRhZ2VuZXJhbAotI2RlZmluZSBDS0dITkxIT1NUCi0jZWxzZQot I2lmZGVmIFNPTEFSSVMKLSNkZWZpbmUgQ0tHSE5MSE9TVAotI2Vsc2UKLSNpZmRlZiBTVU5PUzQK LSNkZWZpbmUgQ0tHSE5MSE9TVAotI2Vsc2UKLSNpZmRlZiBVTklYV0FSRQotI2RlZmluZSBDS0dI TkxIT1NUCi0jZWxzZQotI2lmZGVmIFNJTklYCi0jZGVmaW5lIENLR0hOTEhPU1QKLSNlbmRpZiAv KiBTSU5JWCAqLwotI2VuZGlmIC8qIFVOSVhXQVJFICovCi0jZW5kaWYgLyogU1VOT1M0ICovCi0j ZW5kaWYgLyogU09MQVJJUyAqLwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyog Q0tHSE5MSE9TVCAqLwotCi0jaWZuZGVmIFJMT0dDT0RFICAgICAgICAgICAgICAgICAgICAgICAg LyogV2hhdCBhYm91dCBSbG9naW4/ICovCi0jaWZuZGVmIE5PUkxPR0lOCi0vKgotICBSbG9naW4g Y2FuIGJlIGVuYWJsZWQgb25seSBmb3IgVU5JWCB2ZXJzaW9ucyB0aGF0IGhhdmUgYm90aCBTSUdV UkcKLSAgKFNDTyBkb2Vzbid0KSBhbmQgQ0tfVFRHV1NJWiAoT1NGLzEgZG9lc24ndCksIHNvIHdl IGRvbid0IGFzc3VtZSB0aGF0Ci0gIGFueSBvdGhlcnMgaGF2ZSB0aGVzZSB3aXRob3V0IHZlcmlm eWluZyBmaXJzdC4gIE5vdCB0aGF0IGl0IHJlYWxseSBtYWtlcwotICBtdWNoIGRpZmZlcmVuY2Ug c2luY2UgeW91IGNhbiBvbmx5IHVzZSBSbG9naW4gaWYgeW91IGFyZSByb290Li4uCi0qLwotI2lm ZGVmIFNVTk9TNDEKLSNkZWZpbmUgUkxPR0NPREUKLSNlbHNlCi0jaWZkZWYgU09MQVJJUwotI2Rl ZmluZSBSTE9HQ09ERQotI2Vsc2UKLSNpZmRlZiBIUFVYOQotI2RlZmluZSBSTE9HQ09ERQotI2Vs c2UKLSNpZmRlZiBIUFVYMTAKLSNkZWZpbmUgUkxPR0NPREUKLSNlbHNlCi0jaWZkZWYgT1NGNDAK LSNkZWZpbmUgUkxPR0NPREUKLSNlbHNlCi0jaWZkZWYgTkVYVAotI2RlZmluZSBSTE9HQ09ERQot I2Vsc2UKLSNpZmRlZiBBSVg0MQotI2RlZmluZSBSTE9HQ09ERQotI2Vsc2UKLSNpZmRlZiBVTklY V0FSRQotI2RlZmluZSBSTE9HQ09ERQotI2Vsc2UKLSNpZmRlZiBJUklYNTEKLSNkZWZpbmUgUkxP R0NPREUKLSNlbHNlCi0jaWZkZWYgSVJJWDYwCi0jZGVmaW5lIFJMT0dDT0RFCi0jZWxzZQotI2lm ZGVmIFFOWAotI2RlZmluZSBSTE9HQ09ERQotI2Vsc2UKLSNpZmRlZiBfX2xpbnV4X18KLSNkZWZp bmUgUkxPR0NPREUKLSNlbHNlCi0jaWZkZWYgQlNENDQKLSNkZWZpbmUgUkxPR0NPREUKLSNlbmRp ZiAvKiBCU0Q0NCAqLwotI2VuZGlmIC8qIF9fbGludXhfXyAqLwotI2VuZGlmIC8qIFFOWCAqLwot I2VuZGlmIC8qIElSSVg2MCAqLwotI2VuZGlmIC8qIElSSVg1MSAqLwotI2VuZGlmIC8qIFVOSVhX QVJFICovCi0jZW5kaWYgLyogQUlYNDEgKi8KLSNlbmRpZiAvKiBORVhUICovCi0jZW5kaWYgLyog T1NGNDAgKi8KLSNlbmRpZiAvKiBIUFVYMTAgKi8KLSNlbmRpZiAvKiBIUFVYOSAqLwotI2VuZGlm IC8qIFNPTEFSSVMgKi8KLSNlbmRpZiAvKiBTVU5PUzQxICovCi0jZW5kaWYgLyogTk9STE9HSU4g Ki8KLSNpZmRlZiBWTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBWTVMgKi8KLSNk ZWZpbmUgUkxPR0NPREUKLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwot I2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotCi0jaWZkZWYgVE5DT0RFCi0vKgotICBUZWxuZXQgbG9j YWwtZWNobyBidWZmZXIsIHVzZWQgZm9yIHNhdmluZyB1cCB1c2VyIGRhdGEgdGhhdCBjYW4ndCBi ZQotICBwcm9wZXJseSBkaXNwbGF5ZWQgYW5kL29yIGV2YWx1YXRlZCB1bnRpbCBwZW5kaW5nIFRl bG5ldCBuZWdvdGlhdGlvbnMgYXJlCi0gIGNvbXBsZXRlLiAgVFRMRUJVRiBpcyBkZWZpbmVkIGZv ciBwbGF0Zm9ybXMgKGxpa2UgVU5JWCkgd2hlcmUgbmV0IGkvbyBpcwotICBkb25lIGJ5IHRoZSBz YW1lIHJvdXRpbmVzIHRoYXQgZG8gc2VyaWFsIGkvbyAoaW4gd2hpY2ggY2FzZSB0aGUgcmVsZXZh bnQKLSAgY29kZSBnb2VzIGludG8gdGhlIGNrP3Rpby5jIG1vZHVsZSwgaW4gdGhlIHR0aW5jKCks IHR0Y2hrKCksIGV0Yywgcm91dGluZXMpOwotICBORVRMRVRCVUYgaXMgZGVmaW5lZCBmb3IgcGxh dGZvcm1zIChsaWtlIFZNUykgdGhhdCB1c2UgZGlmZmVyZW50IEFQSXMgZm9yCi0gIG5ldHdvcmsg YW5kIHNlcmlhbCBpL28sIGFuZCBlbmFibGVzIHRoZSBjb3BpZXMgb2YgdGhlIHNhbWUgcm91dGlu ZXMgdGhhdAotICBhcmUgaW4gY2tjbmV0LmMuCi0qLwotI2lmbmRlZiBUVExFQlVGCi0jaWZkZWYg VU5JWAotI2RlZmluZSBUVExFQlVGCi0jZWxzZQotI2lmZGVmIGRhdGFnZW5lcmFsCi0jZGVmaW5l IFRUTEVCVUYKLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSNl bmRpZiAvKiBUVExFQlVGICovCi0KLSNpZm5kZWYgTkVUTEVCVUYKLSNpZmRlZiBWTVMKLSNkZWZp bmUgTkVUTEVCVUYKLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBORVRMRUJVRiAqLwotI2Vu ZGlmIC8qIFROQ09ERSAqLwotCi0jaWZkZWYgU1VOWDI1ICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogU1VOWDI1IGltcGxpZXMgVENQU09DS0VUICovCi0jaWZuZGVmIFRDUFNPQ0tFVCAgICAg ICAgICAgICAgICAgICAgICAgLyogQnV0IGRvZXNuJ3QgaW1wbHkgVE5DT0RFICovCi0jZGVmaW5l IFRDUFNPQ0tFVAotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2VuZGlmIC8qIFNVTlgyNSAqLwot Ci0jaWZuZGVmIFRDUFNPQ0tFVAotI2lmbmRlZiBOT19ETlNfU1JWCi0jZGVmaW5lIE5PX0ROU19T UlYKLSNlbmRpZiAvKiBOT19ETlNfU1JWICovCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0KLS8q IFRoaXMgaXMgYW5vdGhlciBUQ1BTT0NLRVQgc2VjdGlvbi4uLiAqLwotCi0jaWZkZWYgVENQU09D S0VUCi0jaWZuZGVmIE5FVENPTk4gICAgICAgICAgICAgICAgICAgICAgICAgLyogVENQU09DS0VU IGltcGxpZXMgTkVUQ09OTiAqLwotI2RlZmluZSBORVRDT05OCi0jZW5kaWYgLyogTkVUQ09OTiAq LwotCi0jaWZuZGVmIE5PX0ROU19TUlYKLSNpZmRlZiBOT0xPQ0FMCi0jZGVmaW5lIE5PX0ROU19T UlYKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jaWZkZWYgT1MyT05MWQotI2RlZmluZSBOT19ETlNf U1JWCi0jZW5kaWYgLyogT1MyT05MWSAqLwotI2lmZGVmIE5UCi0jaWZkZWYgX01fUFBDCi0jZGVm aW5lIE5PX0ROU19TUlYKLSNlbmRpZiAvKiBfTV9ETlMgKi8KLSNlbmRpZiAvKiBOT19ETlNfU1JW ICovCi0jaWZkZWYgVk1TCi0jZGVmaW5lIE5PX0ROU19TUlYKLSNlbmRpZiAvKiBWTVMgKi8KLSNp ZmRlZiBTVFJBVFVTCi0jZGVmaW5lIE5PX0ROU19TUlYKLSNlbmRpZiAvKiBTVFJBVFVTICovCi0j aWZkZWYgZGF0YWdlbmVyYWwKLSNkZWZpbmUgTk9fRE5TX1NSVgotI2VuZGlmIC8qIGRhdGFnZW5l cmFsICovCi0jaWZkZWYgdWx0cml4Ci0jZGVmaW5lIE5PX0ROU19TUlYKLSNlbmRpZiAvKiB1bHRy aXggKi8KLSNpZmRlZiBORVhUCi0jZGVmaW5lIE5PX0ROU19TUlYKLSNlbmRpZiAvKiBORVhUICov Ci0jZW5kaWYgLyogTk9fRE5TX1NSViAqLwotCi0jaWZuZGVmIENLX0ROU19TUlYgICAgICAgICAg ICAgICAgICAgICAgLyogVXNlIEROUyBTUlYgcmVjb3JkcyB0byBkZXRlcm1pbmUgKi8KLSNpZm5k ZWYgTk9fRE5TX1NSViAgICAgICAgICAgICAgICAgICAgICAvKiBob3N0IGFuZCBwb3J0cyAqLwot I2RlZmluZSBDS19ETlNfU1JWCi0jZW5kaWYgLyogTk9fRE5TX1NSViAqLwotI2VuZGlmIC8qIENL X0ROU19TUlYgKi8KLQotI2lmbmRlZiBOT0xJU1RFTiAgICAgICAgICAgICAgICAgICAgICAgIC8q IHNlbGVjdCgpIGlzIHJlcXVpcmVkIHRvIHN1cHBvcnQgKi8KLSNpZm5kZWYgU0VMRUNUICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBpbmNvbWluZyBjb25uZWN0aW9ucy4gKi8KLSNpZm5kZWYg Vk1TCi0jaWZuZGVmIE9TMgotI2RlZmluZSBOT0xJU1RFTgotI2VuZGlmIC8qIE9TMiAqLwotI2Vu ZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIFNFTEVDVCAqLwotI2VuZGlmIC8qIE5PTElTVEVOICov Ci0KLS8qIEJTRCBzb2NrZXRzIGxpYnJhcnkgaGVhZGVyIGZpbGVzICovCi0KLSNpZmRlZiBWTVMK LS8qCi0gIEJlY2F1c2UgYnplcm8oKSBhbmQgYmNvcHkoKSBhcmUgbm90IHBvcnRhYmxlIGFtb25n IFZNUyB2ZXJzaW9ucywKLSAgb3IgY29tcGlsZXJzLCBvciBUQ1AvSVAgcHJvZHVjdHMsIGV0Yy4K LSovCi0jaWZuZGVmIGJ6ZXJvCi0jZGVmaW5lIGJ6ZXJvKHMsbikgbWVtc2V0KHMsMCxuKQotI2Vu ZGlmIC8qIGJ6ZXJvICovCi0jaWZuZGVmIGJjb3B5Ci0jZGVmaW5lIGJjb3B5KGgsYSxsKSBtZW1j cHkoYSxoLGwpCi0jZW5kaWYgLyogYmNvcHkgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQotI2lmZGVm IEhQVVg2Ci0vKiBUaGVzZSBhcmUgbWlzc2luZyBpbiBIUC1VWCA2Lnh4ICovCi0jaWZuZGVmIGJ6 ZXJvCi0jZGVmaW5lIGJ6ZXJvKHMsbikgbWVtc2V0KHMsMCxuKQotI2VuZGlmIC8qIGJ6ZXJvICov Ci0jaWZuZGVmIGJjb3B5Ci0jZGVmaW5lIGJjb3B5KGgsYSxsKSBtZW1jcHkoYSxoLGwpCi0jZW5k aWYgLyogYmNvcHkgKi8KLSNlbmRpZiAvKiBIUFVYNiAqLwotCi0jaWZkZWYgVU5JWCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogVU5JWCBzZWN0aW9uICovCi0KLSNpZmRlZiBTVlI0Ci0v KgotICBUaGVzZSBzdWdnZXN0ZWQgYnkgUm9iIEhlYWxleSwgcmhlYWxleUBrYXMuaGVsaW9zLm1u Lm9yZywgdG8gYXZvaWQKLSAgYnVncyBpbiBCZXJrZWxleSBjb21wYXRpYmlsaXR5IGxpYnJhcnkg b24gU3lzIFYgUjQgc3lzdGVtcywgYnV0IHVudGVzdGVkCi0gIGJ5IG1lIChmZGMpLiAgUmVtb3Zl IHRoaXMgYml0IGlmIGl0IGdpdmVzIHlvdSB0cm91YmxlLgotICAoTGF0ZXIgY29ycmVjdGVkIGJ5 IE1hcmMgQm91Y2hlciA8bWJvdWNoZXJAaXJvLnVtb250cmVhbC5jYT4gYmVjYXVzZQotICBiemVy by9iY29weSBhcmUgbm90IGFyZ3VtZW50LWNvbXBhdGlibGUgd2l0aCBtZW1zZXQvbWVtY3B5fG1l bW1vdmUuKQotKi8KLSNpZm5kZWYgYnplcm8KLSNkZWZpbmUgYnplcm8ocyxuKSBtZW1zZXQocyww LG4pCi0jZW5kaWYKLSNpZmRlZiBTT0xBUklTCi0jaWZkZWYgU1VOWDI1Ci0jdW5kZWYgYnplcm8K LS8qCi0gIFdPVUxEIFlPVSBCRUxJRVZFLi4uIFRoYXQgdGhlIFNvbGFyaXMgWC4yNSAvb3B0L1NV Tldjb21tL2xpYi9saWJzb2NreDI1Ci0gIGxpYnJhcnkgcmVmZXJlbmNlcyBiemVybywgZXZlbiB0 aG91Z2ggdGhlIHVzZSBvZiBiemVybyBpcyBmb3JiaWRkZW4gaW4KLSAgU29sYXJpcz8gIExvb2sg Zm9yIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGluIGNrY25ldC5jLgotKi8KLV9QUk9UT1RZUCgg dm9pZCBiemVybywgKGNoYXIgKiwgaW50KSApOwotI2VuZGlmIC8qIFNVTlgyNSAqLwotI2lmbmRl ZiBiY29weQotI2RlZmluZSBiY29weShoLGEsbCkgbWVtY3B5KGEsaCxsKQotI2VuZGlmCi0jZWxz ZQotI2lmbmRlZiBiY29weQotI2RlZmluZSBiY29weShoLGEsbCkgbWVtbW92ZShhLGgsbCkKLSNl bmRpZgotI2VuZGlmIC8qIFNPTEFSSVMgKi8KLSNlbHNlIC8qICFTVlI0ICovCi0jaWZkZWYgUFRY ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VxdWVudCBEWU5JWCBQVFggMS4zICov Ci0jaWZuZGVmIGJ6ZXJvCi0jZGVmaW5lIGJ6ZXJvKHMsbikgbWVtc2V0KHMsMCxuKQotI2VuZGlm Ci0jaWZuZGVmIGJjb3B5Ci0jZGVmaW5lIGJjb3B5KGgsYSxsKSBtZW1jcHkoYSxoLGwpCi0jZW5k aWYKLSNlbmRpZiAvKiBQVFggKi8KLSNlbmRpZiAvKiBTVlI0ICovCi0KLSNpZmRlZiBJTlRFUkxB TiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSYWNhbC1JbnRlcmxhbiBUQ1AvSVAgKi8KLSNp bmNsdWRlIDxpbnRlcmxhbi9zb2NrZXQuaD4KLSNpbmNsdWRlIDxpbnRlcmxhbi9pbF90eXBlcy5o PgotI2luY2x1ZGUgPGludGVybGFuL3RlbG5ldC5oPgotI2luY2x1ZGUgPGludGVybGFuL2lsX2Vy cm5vLmg+Ci0jaW5jbHVkZSA8aW50ZXJsYW4vaW4uaD4KLSNpbmNsdWRlIDxpbnRlcmxhbi90ZWxu ZXQuaD4gICAgICAgICAgICAvKiBXaHkgdHdpY2UgPyA/ID8gKi8KLSNlbHNlIC8qIE5vdCBJbnRl cmxhbiAqLwotI2lmZGVmIEJFQk9YCi0jaW5jbHVkZSA8c29ja2V0Lmg+Ci0jZWxzZSAvKiBOb3Qg QkVCT1ggKi8gICAgICAgICAgICAgICAgICAgLyogTm9ybWFsIEJTRCBUQ1AvSVAgbGlicmFyeSAq LwotI2lmZGVmIENPTU1FTlQKLSNpZm5kZWYgSFBVWAotI2luY2x1ZGUgPGFycGEvdGVsbmV0Lmg+ Ci0jZW5kaWYgLyogSFBVWCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNpZmRlZiBTQ08yMzQK LSNpbmNsdWRlIDxzeXMvZXJybm8udGNwLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLnRjcC5oPgot I2VuZGlmIC8qIFNDTzIzNCAqLwotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpZmRlZiBXT0xM T05HT05HCi0jaW5jbHVkZSA8c3lzL2luLmg+Ci0jZWxzZQotI2luY2x1ZGUgPG5ldGluZXQvaW4u aD4KLSNpZm5kZWYgU1Y2OFIzVjYgICAgICAgICAgICAgICAgLyogKG1heWJlIHRoaXMgc2hvdWxk IGJlIFNWUjMgaW4gZ2VuZXJhbCkgKi8KLSNpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPiAgICAgICAg LyogQWRkZWQgSnVuZSAyMDAxICovCi0jZW5kaWYgLyogU1Y2OFIzVjYgKi8KLSNlbmRpZiAvKiBX T0xMT05HT05HICovCi0jZW5kaWYgLyogQkVCT1ggKi8KLSNlbmRpZiAvKiBJTlRFUkxBTiAqLwot Ci0jaWZuZGVmIEVYQ0VMQU4KLSNpbmNsdWRlIDxuZXRkYi5oPgotI2lmbmRlZiBJTlRFUkxBTgot I2lmZGVmIFdPTExPTkdPTkcKLSNkZWZpbmUgbWlub3IgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBEbyBub3QgaW5jbHVkZSA8c3lzL21hY3Jvcy5oPiAqLwotI2luY2x1ZGUgPHN5cy9pbmV0 Lmg+Ci0jZWxzZQotI2lmbmRlZiBPWE9TCi0jaWZuZGVmIEhQVVgKLSNpZm5kZWYgQkVCT1gKLSNp bmNsdWRlIDxhcnBhL2luZXQuaD4KLSNlbmRpZiAvKiBCRUJPWCAqLwotI2VuZGlmIC8qIEhQVVgg Ki8KLSNlbHNlIC8qIE9YT1MgKi8KLS8qIEluIHRvbyBtYW55IHJlbGVhc2VzIG9mIFgvT1MsIDxh cnBhL2luZXQuaD4gZGVjbGFyZXMgaW5ldF9hZGRyKCkgYXMKLSAqIGBgc3RydWN0IGluX2FkZHIn Jy4gIFRoaXMgaXMgZGVmaW5pdGl2ZWx5IHdyb25nLCBhbmQgY291bGQgY2F1c2UKLSAqIGNvcmUg ZHVtcHMuICBJbnN0ZWFkIG9mIGluY2x1ZGluZyB0aGF0IGJhZCBmaWxlLCBpbmV0X2FkZHIoKSBp cwotICogY29ycmVjdGx5IGRlY2xhcmVkIGhlcmUuICBPZiBjb3Vyc2UsIGFsbCB0aGUgZGVjbGFy YXRpb25zIGRvbmUgdGhlcmUKLSAqIGhhcyBiZWVuIGNvcGllZCBoZXJlLgotICovCi11bnNpZ25l ZCBsb25nIGluZXRfYWRkcigpOwotY2hhciAgICAqaW5ldF9udG9hKCk7Ci1zdHJ1Y3QgIGluX2Fk ZHIgaW5ldF9tYWtlYWRkcigpOwotdW5zaWduZWQgbG9uZyBpbmV0X25ldHdvcmsoKTsKLSNlbmRp ZiAvKiBPWE9TICovCi0jZW5kaWYgLyogV09MTE9OR09ORyAqLwotI2VuZGlmIC8qIElOVEVSTEFO ICovCi0jZW5kaWYgLyogRVhDRUxBTiAqLwotCi0jaWZkZWYgRVhDRUxBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogRXhjZWxhbiBUQ1AvSVAgKi8KLSNpZm5kZWYgYnplcm8KLSNkZWZpbmUg Ynplcm8ocyxuKSBtZW1zZXQocywwLG4pCi0jZW5kaWYgLyogYnplcm8gKi8KLSNpZm5kZWYgYmNv cHkKLSNkZWZpbmUgYmNvcHkoaCxhLGwpIG1lbWNweShhLGgsbCkKLSNlbmRpZiAvKiBiY29weSAq LwotI2luY2x1ZGUgPGV4X2Vycm5vLmg+Ci0jZW5kaWYgLyogRVhDRUxBTiAqLwotCi0jaWZkZWYg STM4NklYICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW50ZXJhY3RpdmUgU3lzIFYgUjMg bmV0d29yay4gKi8KLS8qICNkZWZpbmUgVEVMT1BUUyAqLyAgICAgICAgICAgICAgICAgICAvKiBU aGlzIG1pZ2h0IG5lZWQgZGVmaW5pbmcuICovCi0jZGVmaW5lIE9SR19OTE9ORyBFTkFNRVRPT0xP TkcgICAgICAgICAgLyogUmVzb2x2ZSBjb25mbGljdGluZyBzeW1ib2xzICovCi0jdW5kZWYgRU5B TUVUT09MT05HICAgICAgICAgICAgICAgICAgICAgLyogaW4gPGVycm5vLmg+IGFuZCA8bmV0L2Vy cm5vLmg+ICovCi0jZGVmaW5lIE9SR19ORU1QVFkgRU5PVEVNUFRZCi0jdW5kZWYgRU5PVEVNUFRZ Ci0jaW5jbHVkZSA8bmV0L2Vycm5vLmg+Ci0jdW5kZWYgRU5BTUVUT09MT05HCi0jZGVmaW5lIEVO QU1FVE9PTE9ORyBPUkdfTkxPTkcKLSN1bmRlZiBFTk9URU1QVFkKLSNkZWZpbmUgRU5PVEVNUFRZ IE9SR19ORU1QVFkKLSNpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPiAgICAgICAgICAgICAgICAvKiBm b3IgaW5ldF9hZGRyKCkgKi8KLSNlbmRpZiAvKiBJMzg2SVggKi8KLS8qCi0gIERhdGEgdHlwZSBv ZiB0aGUgaW5ldF9hZGRyKCkgZnVuY3Rpb24uLi4KLSAgV2UgZGVmaW5lIElOQUREUlggaWYgaXQg aXMgb2YgdHlwZSBzdHJ1Y3QgaW5hZGRyLgotICBJZiBpdCBpcyB1bmRlZmluZWQsIHVuc2lnbmVk IGxvbmcgaXMgYXNzdW1lZC4KLSAgTG9vayBhdCA8YXJwYS9pbmV0Lmg+IHRvIGZpbmQgb3V0LiAg VGhlIGZvbGxvd2luZyBrbm93biBjYXNlcyBhcmUKLSAgaGFuZGxlZCBoZXJlLiAgT3RoZXIgc3lz dGVtcyB0aGF0IG5lZWQgaXQgY2FuIGJlIGFkZGVkIGhlcmUsIG9yIGVsc2UKLSAgLURJTkFERFJY IGNhbiBiZSBpbmNsdWRlZCBpbiB0aGUgQ0ZMQUdTIG9uIHRoZSBjYyBjb21tYW5kIGxpbmUuCi0q LwotI2lmbmRlZiBOT0lOQUREUlgKLSNpZmRlZiBEVTIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBERUMgVWx0cml4IDIuMCAqLwotI2RlZmluZSBJTkFERFJYCi0jZW5kaWYgLyogRFUy ICovCi0jZW5kaWYgLyogTk9JTkFERFJYICovCi0KLSNlbHNlIC8qIE5vdCBVTklYICovCi0KLSNp ZmRlZiBWTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAoT3BlbilWTVMgc2VjdGlv biAqLwotCi0jaWZkZWYgTVVMVElORVQgICAgICAgICAgICAgICAgICAgICAgICAgLyogVEdWIE11 bHRpTmV0ICovCi0vKgotICBJbiBDLUtlcm1pdCA3LjAgQmV0YS4wOCB3ZSBzdGFydGVkIGdldHRp bmcgc2NhZHMgb2YgY29tcGlsZSB0aW1lIHdhcm5pbmdzCi0gIGluIE11bHRpbmV0IGJ1aWxkczog ImJsYWgiIGlzIGltcGxpY2l0bHkgZGVjbGFyZWQgYXMgYSBmdW5jdGlvbiwgd2hlcmUgYmxhaAot ICBpcyBzb2NrZXRfcmVhZC93cml0ZS9jbG9zZSwgbnRvaHMsIGh0b25zLCBnZXRwZWVybmFtZSwg YWNjZXB0LCBzZWxlY3QsIGV0Yy4KLSAgSSBoYXZlIG5vIGlkZWEgd2h5IC0tIHRoZXNlIHJvdXRp bmVzIGFyZSBkZWNsYXJlZCBpbiB0aGUgaGVhZGVyIGZpbGVzIGJlbG93LAotICBhbmQgdGhlIGlu Y2x1ZGVzIGhhdmVuJ3QgY2hhbmdlZC4gIFRoZSBleGVjdXRhYmxlIHN0aWxsIHNlZW1zIHRvIHdv cmsgT0suCi0gIE1lc3Npbmcgd2l0aCB0aGUgb3JkZXIgb2YgdGhlIGZvbGxvd2luZyBpbmNsdWRl cyBpcyBkaXNhc3Ryb3VzLgotKi8KLSNpZmRlZiBNVUxUSU5FVF9OT19QUk9UT1RZUEVTCi0jdW5k ZWYgTVVMVElORVRfTk9fUFJPVE9UWVBFUwotI2VuZGlmIC8qIE1VTFRJTkVUX05PX1BST1RPVFlQ RVMgKi8KLQotI2lmZGVmICBfX2NwbHVzcGx1cwotI3VuZGVmICBfX2NwbHVzcGx1cwotI2VuZGlm IC8qICBfX2NwbHVzcGx1cyAqLwotCi0jaW5jbHVkZSAibXVsdGluZXRfcm9vdDpbbXVsdGluZXQu aW5jbHVkZV1lcnJuby5oIgotI2luY2x1ZGUgIm11bHRpbmV0X3Jvb3Q6W211bHRpbmV0LmluY2x1 ZGUuc3lzXXR5cGVzLmgiCi0jaW5jbHVkZSAibXVsdGluZXRfcm9vdDpbbXVsdGluZXQuaW5jbHVk ZS5zeXNdc29ja2V0LmgiCi0jaW5jbHVkZSAibXVsdGluZXRfcm9vdDpbbXVsdGluZXQuaW5jbHVk ZV1uZXRkYi5oIgotI2luY2x1ZGUgIm11bHRpbmV0X3Jvb3Q6W211bHRpbmV0LmluY2x1ZGUubmV0 aW5ldF1pbi5oIgotI2luY2x1ZGUgIm11bHRpbmV0X3Jvb3Q6W211bHRpbmV0LmluY2x1ZGUuYXJw YV1pbmV0LmgiCi0jaW5jbHVkZSAibXVsdGluZXRfcm9vdDpbbXVsdGluZXQuaW5jbHVkZS5zeXNd aW9jdGwuaCIKLQotI2lmZGVmIENPTU1FTlQKLS8qCi0gIE5vIGxvbmdlciBuZWVkZWQgYmVjYXVz ZSBub3cgYnplcm8vYmNvcHkgYXJlIG1hY3JvcyBkZWZpbmVkIGFzCi0gIG1lbXNldC9tZW1tb3Zl IGluIGFsbCBWTVMgYnVpbGRzLgotKi8KLS8qCi0gIFdlIHNob3VsZCBiZSBhYmxlIHRvIHBpY2sg dGhlc2UgdXAgZnJvbSA8c3RyaW5ncy5oPiBidXQgaXQncwotICBub3QgcG9ydGFibGUgYmV0d2Vl biBWQVhDIGFuZCBERUNDLiAgQW5kIGV2ZW4gd2l0aCBERUNDIDUueCB3ZSBoYXZlIGEKLSAgZGlm ZmVyZW5jZSBiZXR3ZWVuIFZBWCBhbmQgQWxwaGEuICBXZSBnZXQgd2FybmluZ3MgaGVyZSBvbiB0 aGUgVkFYCi0gIHdpdGggREVDQyA1LjYtMDAzIGJ1dCB0aGV5IGFyZSBub3QgZmF0YWwuCi0qLwot I2lmbmRlZiBfX0RFQ0NfVkVSCi0jaWZuZGVmIGJ6ZXJvCi1fUFJPVE9UWVAoIHZvaWQgYnplcm8s IChjaGFyICosIGludCkgKTsKLSNlbmRpZiAvKiBiemVybyAqLwotI2lmbmRlZiBiY29weQotX1BS T1RPVFlQKCB2b2lkIGJjb3B5LCAoY2hhciAqLCBjaGFyICosIGludCkgKTsKLSNlbmRpZiAvKiBi Y29weSAqLwotI2VuZGlmIC8qIF9fREVDQ19WRVIgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0K LSNpZmRlZiBfX0RFQ0MKLS8qCi0gICBJZiBjb21waWxpbmcgdW5kZXIgREVDIEMgdGhlIHNvY2tl dCBjYWxscyBtdXN0IG5vdCBiZSBwcmVmaXhlZCB3aXRoCi0gICBERUNDJC4gIFRoaXMgaXMgZG9u ZSBieSB1c2luZyB0aGUgY29tcGlsZXIgc3dpdGNoIC9QcmVmaXg9QW5zaV9DODkuCi0gICBIb3dl dmVyLCB0aGlzIGNhdXNlcyBzb21lIGNhbGxzIHRoYXQgc2hvdWxkIGJlIHByZWZpeGVkIHRvIG5v dCBiZQotICAgKHdoaWNoIEkgdGhpbmsgaXMgYSBidWcgaW4gdGhlIGNvbXBpbGVyIC0gSSd2ZSBi ZWVuIHRvbGQgdGhlc2UgY2FsbHMKLSAgIGFyZSBwcmVzZW50IGluIEFOU0kgY29tcGlsZXJzKS4g IEF0IGFueSByYXRlLCBzdWNoIGNhbGxzIGFyZSBmaXhlZAotICAgaGVyZSBieSBleHBsaWNpdGx5 IHByZWZpeGluZyB0aGVtLgotKi8KLSNpZmRlZiBDT01NRU5UCi0vKgotICAgQnV0IHRoaXMgY2F1 c2VzIGVycm9ycyB3aXRoIFZNUyA2LjIgLyBERUMgQyA1LjMtMDA2IC8gTXVsdGlOZXQgNC4wQSBv bgotICAgYSBWQVggKGJ1dCBub3Qgb24gYW4gQWxwaGEpLiAgU28gbm93IHdoYXQgaGFwcGVucyBp ZiB3ZSBza2lwIGRvaW5nIHRoaXM/Ci0qLwotI2RlZmluZSBjbG9zZSBkZWNjJGNsb3NlCi0jZGVm aW5lIGFsYXJtIGRlY2MkYWxhcm0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZW5kaWYgLyogX19E RUNDICovCi0KLSNlbHNlIC8qIE5vdCBNVUxUSU5FVCAqLwotCi0jaWZkZWYgV0lOVENQICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogV0lOL1RDUCA9IFBhdGhXYXkgZm9yIFZNUyAqLwotI2lm ZGVmIE9MRF9UV0cKLSNpbmNsdWRlICJ0d2ckdGNwOltuZXRkaXN0LmluY2x1ZGUuc3lzXWVycm5v LmgiCi0jaW5jbHVkZSAidHdnJHRjcDpbbmV0ZGlzdC5pbmNsdWRlLnN5c110eXBlczIuaCIgLyog YXZvaWQgc29tZSBkdXBsaWNhdGVzICovCi0jZWxzZQotI2luY2x1ZGUgInR3ZyR0Y3A6W25ldGRp c3QuaW5jbHVkZV1zb2NrZXRfYWxpYXNlcy5oIgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVk ZSAidHdnJHRjcDpbbmV0ZGlzdC5pbmNsdWRlLnN5c110eXBlcy5oIgotI2VuZGlmIC8qIE9MRF9U V0cgKi8KLSNpbmNsdWRlICJ0d2ckdGNwOltuZXRkaXN0LmluY2x1ZGUuc3lzXXNvY2tldC5oIgot I2luY2x1ZGUgInR3ZyR0Y3A6W25ldGRpc3QuaW5jbHVkZV1uZXRkYi5oIgotI2luY2x1ZGUgInR3 ZyR0Y3A6W25ldGRpc3QuaW5jbHVkZS5zeXNdZG9tYWluLmgiCi0jaW5jbHVkZSAidHdnJHRjcDpb bmV0ZGlzdC5pbmNsdWRlLnN5c11wcm90b3N3LmgiCi0jaW5jbHVkZSAidHdnJHRjcDpbbmV0ZGlz dC5pbmNsdWRlLm5ldGluZXRdaW4uaCIKLSNpbmNsdWRlICJ0d2ckdGNwOltuZXRkaXN0LmluY2x1 ZGUuYXJwYV1pbmV0LmgiCi0jaW5jbHVkZSAidHdnJHRjcDpbbmV0ZGlzdC5pbmNsdWRlLnN5c11p b2N0bC5oIgotCi0jZWxzZSAvKiBOb3QgV0lOVENQICovCi0KLSNpZmRlZiBERUNfVENQSVAKLSNp ZmRlZiBVQ1g1MAotI2lmbmRlZiBJRl9ET1RfSAotI2RlZmluZSBJRl9ET1RfSAotI2VuZGlmIC8q ICBJRl9ET1RfSCAqLwotI2VuZGlmIC8qIFVDWDUwICovCi0KLSNpZmRlZiBJRl9ET1RfSAotI2lu Y2x1ZGUgPGlmLmg+ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5lZWRlZCB0byBwdXQgdXAg dV9pbnQgdHlwZWRlZiAqLwotI2Vsc2UKLSNpZmRlZiBORUVEVUlOVAotdHlwZWRlZiB1bnNpZ25l ZCBpbnQgdV9pbnQ7Ci0jZW5kaWYgLyogTkVFRFVJTlQgKi8KLSNlbmRpZiAvKiBJRl9ET1RfSCAq LwotCi0jaW5jbHVkZSA8aW4uaD4KLSNpZmRlZiBWTVMKLSNpbmNsdWRlIDxpbmV0Lmg+CQkJLyog KFNNUyAyMDA3LzAyLzE1KSAqLwotI2VuZGlmCS8qIFZNUyAqLwotI2luY2x1ZGUgPG5ldGRiLmg+ Ci0jaW5jbHVkZSA8c29ja2V0Lmg+Ci0jaW5jbHVkZSAiY2t2aW9jLmgiCi0jZGVmaW5lIHNvY2tl dF9lcnJubyBlcnJubwotCi0jaWZkZWYgQ09NTUVOVAotLyoKLSAgTm8gbG9uZ2VyIG5lZWRlZCBi ZWNhdXNlIG5vdyBiemVyby9iY29weSBhcmUgbWFjcm9zIGRlZmluZWQgYXMKLSAgbWVtc2V0L21l bW1vdmUgaW4gYWxsIFZNUyBidWlsZHMuCi0qLwotLyoKLSAgVHJhbnNsYXRpb246IEluIDxzdHJp bmdzLmg+LCB3aGljaCBleGlzdHMgb25seSBmb3IgREVDQyA+PSA1LjIsIGJ6ZXJvKCkKLSAgYW5k IGJjb3B5KCkgYXJlIGRlY2xhcmVkIG9ubHkgZm9yIE9wZW5WTVMgPj0gNy4wLiAgVGhpcyBzdGls bCBtaWdodCBuZWVkCi0gIGFkanVzdG1lbnQgZm9yIERFQ0MgNS4wIGFuZCBoaWdoZXIuCi0qLwot I2lmZGVmIF9fREVDQ19WRVIKLSNpZmRlZiBWTVNWNzAKLS8qCi0gIE5vdGU6IHlvdSBjYW4ndCB1 c2UgIiNpZiAoX19WTVNfVkVSPj03MDAwMDAwMCkiIGJlY2F1c2UgdGhhdCBpcyBub3QKLSAgcG9y dGFibGUgYW5kIGtpbGxzIG5vbi1WTVMgYnVpbGRzLgotKi8KLSNpbmNsdWRlIDxzdHJpbmdzLmg+ Ci0jZWxzZQotI2lmbmRlZiBiemVybwotI2RlZmluZSBiemVybyhzLG4pIG1lbXNldChzLDAsbikK LSNlbmRpZgotI2lmbmRlZiBiY29weQotI2RlZmluZSBiY29weShoLGEsbCkgbWVtbW92ZShhLGgs bCkKLSNlbmRpZgotI2VuZGlmIC8qIFZNU1Y3MCAqLwotI2Vsc2UKLSNpZm5kZWYgYnplcm8KLSNk ZWZpbmUgYnplcm8ocyxuKSBtZW1zZXQocywwLG4pCi0jZW5kaWYKLSNpZm5kZWYgYmNvcHkKLSNk ZWZpbmUgYmNvcHkoaCxhLGwpIG1lbW1vdmUoYSxoLGwpCi0jZW5kaWYKLSNlbmRpZiAvKiBfX0RF Q0NfVkVSICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0jZGVmaW5lIHNvY2tldF9yZWFkICAg ICByZWFkCi0jZGVmaW5lIHNvY2tldF93cml0ZSAgICB3cml0ZQotI2RlZmluZSBzb2NrZXRfaW9j dGwgICAgaW9jdGwKLSNkZWZpbmUgc29ja2V0X2Nsb3NlICAgIGNsb3NlCi0KLSNpZmRlZiBfX0RF Q0MKLWludCBpb2N0bCAoaW50IGQsIGludCByZXF1ZXN0LCB2b2lkICphcmdwKTsKLSNlbHNlCi1p bnQgaW9jdGwgKGludCBkLCBpbnQgcmVxdWVzdCwgY2hhciAqYXJncCk7Ci0jZW5kaWYgLyogREVD QyAqLwotLyoKLSAgVUNYIHN1cHBvcnRzIHNlbGVjdCgpLCBidXQgZG9lcyBub3QgcHJvdmlkZSB0 aGUgbmVlZGVkIHN5bWJvbCBhbmQKLSAgc3RydWN0dXJlIGRlZmluaXRpb25zIGluIGFueSBoZWFk ZXIgZmlsZSwgc28gLi4uCi0qLwotI2luY2x1ZGUgPHR5cGVzLmg+Ci0jaWZuZGVmIE5CQlkKLS8q LQotICogQ29weXJpZ2h0IChjKSAxOTgyLCAxOTg2LCAxOTkxLCAxOTkzCi0gKiAgICAgIFRoZSBS ZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2Vy dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg ZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5n IGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhl IGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKLSAqICAgICAgQ2FsaWZv cm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCi0gKiA0LiBOZWl0aGVyIHRoZSBu YW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwot ICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdF TlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwg SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U IE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQg QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ Q1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX SVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdF LgotICoKLSAqICAgICAgQCgjKXR5cGVzLmggICAgIDguMSAoQmVya2VsZXkpIDYvMi85MwotICov Ci0KLSNkZWZpbmUgTkJCWSAgICA4ICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGJpdHMgaW4g YSBieXRlICovCi0KLS8qCi0gKiBTZWxlY3QgdXNlcyBiaXQgbWFza3Mgb2YgZmlsZSBkZXNjcmlw dG9ycyBpbiBsb25ncy4gIFRoZXNlIG1hY3JvcwotICogbWFuaXB1bGF0ZSBzdWNoIGJpdCBmaWVs ZHMgKHRoZSBmaWxlc3lzdGVtIG1hY3JvcyB1c2UgY2hhcnMpLgotICogRkRfU0VUU0laRSBtYXkg YmUgZGVmaW5lZCBieSB0aGUgdXNlciwgYnV0IHRoZSBkZWZhdWx0IGhlcmUgc2hvdWxkCi0gKiBi ZSBlbm91Z2ggZm9yIG1vc3QgdXNlcy4KLSAqLwotI2lmbmRlZiBGRF9TRVRTSVpFCi0jZGVmaW5l IEZEX1NFVFNJWkUgICAgICAyNTYKLSNlbmRpZgotCi10eXBlZGVmIGxvbmcgICAgZmRfbWFzazsK LSNkZWZpbmUgTkZEQklUUyAoc2l6ZW9mKGZkX21hc2spICogTkJCWSkgICAgICAgIC8qIGJpdHMg cGVyIG1hc2sgKi8KLQotI2lmbmRlZiBob3dtYW55Ci0jZGVmaW5lIGhvd21hbnkoeCwgeSkgICAo KCh4KSsoKHkpLTEpKS8oeSkpCi0jZW5kaWYKLQotdHlwZWRlZiBzdHJ1Y3QgZmRfc2V0IHsKLSAg ICAgICAgZmRfbWFzayBmZHNfYml0c1tob3dtYW55KEZEX1NFVFNJWkUsIE5GREJJVFMpXTsKLX0g ZmRfc2V0OwotCi0jZGVmaW5lIEZEX1NFVChuLCBwKSAgICAoKHApLT5mZHNfYml0c1sobikvTkZE QklUU10gfD0gKDEgPDwgKChuKSAlIE5GREJJVFMpKSkKLSNkZWZpbmUgRkRfQ0xSKG4sIHApICAg ICgocCktPmZkc19iaXRzWyhuKS9ORkRCSVRTXSAmPSB+KDEgPDwgKChuKSAlIE5GREJJVFMpKSkK LSNkZWZpbmUgRkRfSVNTRVQobiwgcCkgICgocCktPmZkc19iaXRzWyhuKS9ORkRCSVRTXSAmICgx IDw8ICgobikgJSBORkRCSVRTKSkpCi0jZGVmaW5lIEZEX0NPUFkoZiwgdCkgICBiY29weShmLCB0 LCBzaXplb2YoKihmKSkpCi0jZGVmaW5lIEZEX1pFUk8ocCkgICAgICBiemVybyhwLCBzaXplb2Yo KihwKSkpCi0jZW5kaWYgLyogIU5CQlkgKi8KLQotI2Vsc2UgIC8qIE5vdCBERUNfVENQSVAgKi8K LQotI2lmZGVmIENNVV9UQ1BJUAotI2luY2x1ZGUgPHR5cGVzLmg+Ci0jaW5jbHVkZSA8aW4uaD4K LSNpbmNsdWRlIDxuZXRkYi5oPgotI2luY2x1ZGUgPHNvY2tldC5oPgotI2luY2x1ZGUgPGluZXQu aD4KLSNpbmNsdWRlIDxpb2N0bC5oPgotI2luY2x1ZGUgImNrdmlvYy5oIgotI2RlZmluZSBzb2Nr ZXRfZXJybm8gZXJybm8KLQotLyoKLSAqIFJvdXRpbmVzIHN1cHBsaWVkIGluIExJQkNNVS5PTEIK LSAqLwotI2RlZmluZSBzb2NrZXRfaW9jdGwgICAgaW9jdGwKLSNkZWZpbmUgc29ja2V0X3JlYWQg ICAgIGNtdV9yZWFkCi0jZGVmaW5lIHNvY2tldF93cml0ZSAgICBjbXVfd3JpdGUKLSNkZWZpbmUg c29ja2V0X2Nsb3NlICAgIGNtdV9jbG9zZQotCi0jZW5kaWYgLyogQ01VX1RDUElQICovCi0jZW5k aWYgLyogREVDX1RDUElQICovCi0jZW5kaWYgLyogV0lOVENQICovCi0jZW5kaWYgLyogTVVMVElO RVQgKi8KLQotI2Vsc2UgLyogTm90IFZNUyAqLwotCi0jaWZkZWYgT1MyCi0jaW5jbHVkZSAiY2tv bmV0LmgiCi0jaWZuZGVmIE5UCi0jaW5jbHVkZSA8bmVycm5vLmg+Ci0jZW5kaWYKLSNlbmRpZiAv KiBPUzIgKi8KLQotI2lmZGVmIFNUUkFUVVMgIC8qIFN0cmF0dXMgVk9TIHVzaW5nIE9TIFRDUC9J UCBwcm9kdWN0cyBTMjM1LCBTMjM2LCBTMjM3ICovCi0jaW5jbHVkZSA8dGNwX3NvY2tldC5oPgot LyogVGhpcyBnZXRzIHVzZWQgc29tZSBwbGFjZXMgd2hlbiBUQ1BTT0NLRVQgaXMgZGVmaW5lZC4g Ki8KLS8qIE9TIFRDUCBwcm92aWRlcyBiemVybygpLCBidXQgbm90IGJjb3B5KCkuLi4gZ28gZmln dXJlLiAqLwotI2RlZmluZSBiY29weShzLGQseikgbWVtY3B5KGQscyx6KQotI2VuZGlmIC8qIFNU UkFUVVMgKi8KLQotI2lmZGVmIE9TSwotI2lmbmRlZiBPU0tYWEMKLSNpbmNsdWRlIDxpbmV0L2lu Lmg+Ci0jaW5jbHVkZSA8aW5ldC9uZXRkYi5oPgotI2luY2x1ZGUgPGluZXQvc29ja2V0Lmg+Ci0j ZWxzZQotI2luY2x1ZGUgPElORVQvaW4uaD4KLSNpbmNsdWRlIDxJTkVUL25ldGRiLmg+Ci0jaW5j bHVkZSA8SU5FVC9zb2NrZXQuaD4KLSNlbmRpZiAvKiBPU0tYWEMgKi8KLSNpZm5kZWYgYnplcm8K LSNkZWZpbmUgYnplcm8ocyxuKSBtZW1zZXQocywwLG4pCi0jZW5kaWYKLSNpZm5kZWYgYmNvcHkK LSNkZWZpbmUgYmNvcHkoaCxhLGwpIG1lbWNweShhLGgsbCkKLSNlbmRpZgotdHlwZWRlZiBjaGFy ICogY2FkZHJfdDsgLyogY29yZSBhZGRyZXNzIHR5cGUgKi8KLSNlbmRpZiAvKiBPU0sgKi8KLQot I2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBUQ1BTT0NLRVQg Ki8KLQotI2lmbmRlZiBOT0lOQUREUlgJCSAgICAgIC8qIDMwMSAtIE5lZWRlZCBmb3IgU29sYXJp cyAxMCBhbmQgMTEgKi8KLSNpZmRlZiBTT0xBUklTCi0jZGVmaW5lIE5PSU5BRERSWAotI2lmZGVm IElOQUREUl9OT05FCi0jdW5kZWYgSU5BRERSX05PTkUKLSNlbmRpZgkvKiBJTkFERFJfTk9ORSAq LwotI2VuZGlmCS8qIFNPTEFSSVMgKi8KLSNlbmRpZgkvKiBOT0lOQUREUlggKi8KLQotI2lmZGVm IE5PSU5BRERSWAotI2lmZGVmIElOQUREUlgKLSN1bmRlZiBJTkFERFJYCi0jZW5kaWYJLyogSU5B RERSWCAqLwotI2VuZGlmCS8qIE5PSU5BRERSWCAqLwotCi0jaWZkZWYgVENQU09DS0VUCi0jaWZu ZGVmIE5PSEFERFJMSVNUCi0jaWZuZGVmIEhBRERSTElTVAotI2lmZGVmIFNVTk9TNDEKLSNkZWZp bmUgSEFERFJMSVNUCi0jZW5kaWYgLyogU1VOT1M0MSAqLwotI2lmZGVmIFNPTEFSSVMKLSNkZWZp bmUgSEFERFJMSVNUCi0jZW5kaWYgLyogU09MQVJJUyAqLwotI2lmZGVmIExJTlVYCi0jZGVmaW5l IEhBRERSTElTVAotI2VuZGlmIC8qIExJTlVYICovCi0jaWZkZWYgQUlYUlMKLSNkZWZpbmUgSEFE RFJMSVNUCi0jZW5kaWYgLyogQUlYUlMgKi8KLSNpZmRlZiBIUFVYCi0jZGVmaW5lIEhBRERSTElT VAotI2VuZGlmIC8qIEhQVVggKi8KLSNpZmRlZiBJUklYCi0jZGVmaW5lIEhBRERSTElTVAotI2Vu ZGlmIC8qIElSSVggKi8KLSNpZmRlZiBJMzg2SVgKLSNkZWZpbmUgSEFERFJMSVNUCi0jZW5kaWYg LyogSTM4NklYICovCi0jZW5kaWYgLyogSEFERFJMSVNUICovCi0vKiBBIHN5c3RlbSB0aGF0IGRl ZmluZXMgaF9hZGRyIGFzIGhfYWRkcl9saXN0WzBdIHNob3VsZCBiZSBIQUREUkxJU1QgKi8KLSNp Zm5kZWYgSEFERFJMSVNUCi0jaWZkZWYgaF9hZGRyCi0jZGVmaW5lIEhBRERSTElTVAotI2VuZGlm IC8qIGhfYWRkciAqLwotI2VuZGlmIC8qIEhBRERSTElTVCAqLwotI2VuZGlmIC8qIE5PSEFERFJM SVNUICovCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0KLSNpZmRlZiBUTkNPREUgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBJZiB3ZSdyZSBjb21waWxpbmcgdGVsbmV0IGNvZGUuLi4gKi8K LSNpZm5kZWYgSUtTX09QVElPTgotI2lmbmRlZiBTVFJBVFVTCi0jZGVmaW5lIElLU19PUFRJT04K LSNlbmRpZiAvKiBTVFJBVFVTICovCi0jZW5kaWYgLyogSUtTX09QVElPTiAqLwotI2luY2x1ZGUg ImNrY3RlbC5oIgotI2Vsc2UKLWV4dGVybiBpbnQgc3N0ZWxuZXQ7Ci0jaWZkZWYgSUtTRAotI3Vu ZGVmIElLU0QKLSNlbmRpZiAvKiBJS1NEICovCi0jaWZuZGVmIE5PSUtTRAotI2RlZmluZSBOT0lL U0QKLSNlbmRpZiAvKiBOT0lLU0QgKi8KLSNpZmRlZiBJS1NfT1BUSU9OCi0jdW5kZWYgSUtTX09Q VElPTgotI2VuZGlmIC8qIElLU19PUFRJT04gKi8KLSNlbmRpZiAvKiBUTkNPREUgKi8KLQotI2lm bmRlZiBOT1RDUE9QVFMKLS8qCi0gIEF1dG9tYXRpY2FsbHkgZGVmaW5lIE5PVENQT1BUUyBmb3Ig Y29uZmlndXJhdGlvbnMgd2hlcmUgdGhleSBjYW4ndCBiZQotICB1c2VkIGF0IHJ1bnRpbWUgb3Ig Y2F1c2UgdG9vIG11Y2ggdHJvdWJsZSBhdCBjb21waWxlIHRpbWUuCi0qLwotI2lmZGVmIENNVV9U Q1BJUCAgICAgICAgICAgICAgICAgICAgICAgIC8qIENNVS9UZWsgKi8KLSNkZWZpbmUgTk9UQ1BP UFRTCi0jZW5kaWYgLyogQ01VX1RDUElQICovCi0jaWZkZWYgTVVMVElORVQgICAgICAgICAgICAg ICAgICAgICAgICAgLyogTXVsdGluZXQgb24gQWxwaGEgKi8KLSNpZmRlZiBfX2FscGhhCi0jZGVm aW5lIE5PVENQT1BUUwotI2VuZGlmIC8qIF9fYWxwaGEgKi8KLSNlbmRpZiAvKiBNVUxUSU5FVCAq LwotI2VuZGlmIC8qIE5PVENQT1BUUyAqLwotCi0jaWZkZWYgTk9UQ1BPUFRTCi0jaWZkZWYgVENQ X05PREVMQVkKLSN1bmRlZiBUQ1BfTk9ERUxBWQotI2VuZGlmIC8qIFRDUF9OT0RFTEFZICovCi0j aWZkZWYgU09fTElOR0VSCi0jdW5kZWYgU09fTElOR0VSCi0jZW5kaWYgLyogU09fTElOR0VSICov Ci0jaWZkZWYgU09fS0VFUEFMSVZFCi0jdW5kZWYgU09fS0VFUEFMSVZFCi0jZW5kaWYgLyogU09f S0VFUEFMSVZFICovCi0jaWZkZWYgU09fU05EQlVGCi0jdW5kZWYgU09fU05EQlVGCi0jZW5kaWYg LyogU09fU05EQlVGICovCi0jaWZkZWYgU09fUkNWQlVGCi0jdW5kZWYgU09fUkNWQlVGCi0jZW5k aWYgLyogU09fUkNWQlVGICovCi0jZW5kaWYgLyogTk9UQ1BPUFRTICovCi0KLS8qIFRoaXMgZnVu Y3Rpb24gaXMgZGVjbGFyZWQgZXZlbiB3aGVuIFRDUFNPQ0tFVCBpcyBub3QgYXZhaWxhYmxlICov Ci1fUFJPVE9UWVAoIGNoYXIgKiBja2dldHBlZXIsIChWT0lEKSk7Ci0KLSNpZmRlZiBUQ1BTT0NL RVQKLSNpZmRlZiBTT0xfU09DS0VUCi0jaWZkZWYgVENQX05PREVMQVkKLV9QUk9UT1RZUCggaW50 IG5vX2RlbGF5LCAoaW50LCBpbnQpICk7Ci0jZW5kaWYgLyogVENQX05PREVMQVkgKi8KLSNpZmRl ZiBTT19LRUVQQUxJVkUKLV9QUk9UT1RZUCggaW50IGtlZXBhbGl2ZSwgKGludCwgaW50KSApIDsK LSNlbmRpZiAvKiBTT19LRUVQQUxJVkUgKi8KLSNpZmRlZiBTT19MSU5HRVIKLV9QUk9UT1RZUCgg aW50IGNrX2xpbmdlciwgKGludCwgaW50LCBpbnQpICkgOwotI2VuZGlmIC8qIFNPX0xJTkdFUiAq LwotI2lmZGVmIFNPX1NOREJVRgotX1BST1RPVFlQKCBpbnQgc2VuZGJ1ZiwoaW50LCBpbnQpICkg OwotI2VuZGlmIC8qIFNPX1NOREJVRiAqLwotI2lmZGVmIFNPX1JDVkJVRgotX1BST1RPVFlQKCBp bnQgcmVjdmJ1ZiwgKGludCwgaW50KSApIDsKLSNlbmRpZiAvKiBTT19SQ1ZCVUYgKi8KLSNpZmRl ZiBTT19ET05UUk9VVEUKLV9QUk9UT1RZUChpbnQgZG9udHJvdXRlLCAoaW50LCBpbnQpKTsKLSNl bmRpZiAvKiBTT19ET05UUk9VVEUgKi8KLSNlbmRpZiAvKiBTT0xfU09DS0VUICovCi1fUFJPVE9U WVAoIGludCBnZXRsb2NhbGlwYWRkciwgKFZPSUQpKTsKLV9QUk9UT1RZUCggaW50IGdldGxvY2Fs aXBhZGRycywgKGNoYXIgKixpbnQsaW50KSk7Ci1fUFJPVE9UWVAoIGNoYXIgKiBja2dldGZxaG9z dG5hbWUsKGNoYXIgKikpOwotX1BST1RPVFlQKCBzdHJ1Y3QgaG9zdGVudCAqIGNrX2NvcHlob3N0 ZW50LChzdHJ1Y3QgaG9zdGVudCAqKSk7Ci1fUFJPVE9UWVAoIGNoYXIgKiBja25hbWUyYWRkciwg KGNoYXIgKikpOwotX1BST1RPVFlQKCBjaGFyICogY2thZGRyMm5hbWUsIChjaGFyICopKTsKLQot LyogQUlYICovCi0KLSNpZmRlZiBBSVhSUwotI2lmbmRlZiBUQ1BfTk9ERUxBWQotI2RlZmluZSBU Q1BfTk9ERUxBWSAweDEKLSNlbmRpZiAvKiBUQ1BfTk9ERUxBWSAqLwotI2lmbmRlZiBUQ1BfTUFY U0VHCi0jZGVmaW5lIFRDUF9NQVhTRUcgMHgyCi0jZW5kaWYgLyogVENQX01BWFNFRyAqLwotI2lm bmRlZiBUQ1BfS0VFUEFMSVZFCi0jZGVmaW5lIFRDUF9LRUVQQUxJVkUgMHg4Ci0jZW5kaWYgLyog VENQX0tFRVBBTElWRSAqLwotI2VuZGlmIC8qIEFJWFJTICovCi0jZW5kaWYgLyogVENQU09DS0VU ICovCi0KLSNpZmRlZiBSTE9HQ09ERQotI2lmbmRlZiBDS19UVEdXU0laCi1TT1JSWV9STE9HSU5f UkVRVUlSRVNfVFRHV1NJWl9zZWVfY2tjcGxtLmRvYwotI2VuZGlmIC8qIENLX1RUR1dTSVogKi8K LSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotCi0jaWZkZWYgQ0tfTkFXUwotI2lmbmRlZiBDS19UVEdX U0laCi1TT1JSWV9DS19OQVdTX1JFUVVJUkVTX1RUR1dTSVpfc2VlX2NrY3BsbS5kb2MKLSNlbmRp ZiAvKiBDS19UVEdXU0laICovCi0jZW5kaWYgLyogQ0tfTkFXUyAqLwotCi0jaWZuZGVmIFBGX0lO RVQKLSNpZmRlZiAgQUZfSU5FVAotI2RlZmluZSBQRl9JTkVUIEFGX0lORVQKLSNlbmRpZiAvKiBB Rl9JTkVUICovCi0jZW5kaWYgLyogUEZfSU5FVCAqLwotCi0jaWZuZGVmIElQUE9SVF9FQ0hPCi0j ZGVmaW5lIElQUE9SVF9FQ0hPIDcKLSNlbmRpZiAvKiBJUFBPUlRfRUNITyAqLwotCi0jaWZkZWYg Q0tfS0VSQkVST1MKLSNpZmRlZiBSTE9HQ09ERQotX1BST1RPVFlQKGludCBja19rcmJfcmxvZ2lu LChDSEFSICosIGludCwgQ0hBUiAqLCBDSEFSICosIENIQVIgKiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICosIGludCwgaW50KSk7Ci0jZW5kaWYgLyogUkxP R0NPREUgKi8KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotCi1fUFJPVE9UWVAoIFZPSUQgaW5p X2tlcmIsICggdm9pZCApICk7ICAgLyogS2VyYmVyb3MgaW5pdGlhbGl6YXRpb24gcm91dGluZSAq LwotX1BST1RPVFlQKCBpbnQgZG9hdXRoLCAoaW50KSApOyAgICAgICAgIC8qIEFVVEhFTlRJQ0FU RSBhY3Rpb24gcm91dGluZSAqLwotCi0jaWZkZWYgQ0tfRE5TX1NSVgotX1BST1RPVFlQKGludCBs b2NhdGVfc3J2X2RucywoY2hhciAqaG9zdCwgY2hhciAqc2VydmljZSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKnByb3RvY29sLCBzdHJ1Y3Qgc29ja2FkZHIgKiphZGRyX3Bw LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpuYWRkcnMpKTsKLSNlbmRpZiAv KiBDS19ETlNfU1JWICovCi0KLSNpZm5kZWYgTk9IVFRQCi1fUFJPVE9UWVAoaW50IGh0dHBfb3Bl biwgKGNoYXIgKiwgY2hhciAqLCBpbnQsIGNoYXIgKiwgaW50LCBjaGFyICopKTsKLV9QUk9UT1RZ UChpbnQgaHR0cF9yZW9wZW4sIChWT0lEKSk7Ci1fUFJPVE9UWVAoaW50IGh0dHBfY2xvc2UsIChW T0lEKSk7Ci1fUFJPVE9UWVAoaW50IGh0dHBfZ2V0LCAoY2hhciAqLGNoYXIgKiosY2hhciAqLGNo YXIgKixjaGFyLGNoYXIgKixjaGFyICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50KSk7 Ci1fUFJPVE9UWVAoaW50IGh0dHBfaGVhZCwgKGNoYXIgKixjaGFyICoqLGNoYXIgKixjaGFyICos Y2hhcixjaGFyICosY2hhciAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQpKTsKLV9Q Uk9UT1RZUChpbnQgaHR0cF9wdXQsIChjaGFyICosY2hhciAqKixjaGFyICosY2hhciAqLGNoYXIg KixjaGFyLGNoYXIgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGNoYXIgKiwg aW50KSk7Ci1fUFJPVE9UWVAoaW50IGh0dHBfZGVsZXRlLCAoY2hhciAqLGNoYXIgKiosY2hhciAq LGNoYXIgKixjaGFyLGNoYXIgKikpOwotX1BST1RPVFlQKGludCBodHRwX2Nvbm5lY3QsIChpbnQs IGNoYXIgKixjaGFyICoqLGNoYXIgKixjaGFyICosY2hhcixjaGFyICopKTsKLV9QUk9UT1RZUChp bnQgaHR0cF9wb3N0LCAoY2hhciAqLGNoYXIgKiosY2hhciAqLGNoYXIgKixjaGFyICosY2hhcixj aGFyICosCi0gICAgICAgICAgICAgICAgICBjaGFyICosY2hhciAqLCBpbnQpKTsKLV9QUk9UT1RZ UChpbnQgaHR0cF9pbmRleCwgKGNoYXIgKixjaGFyICoqLGNoYXIgKixjaGFyICosY2hhcixjaGFy ICosY2hhciAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KSk7Ci1fUFJPVE9UWVAo aW50IGh0dHBfaW5jLCAoaW50KSk7Ci1fUFJPVE9UWVAoaW50IGh0dHBfaXNjb25uZWN0ZWQsICh2 b2lkKSk7Ci0KLWV4dGVybiBjaGFyICogdGNwX2h0dHBfcHJveHk7ICAgICAgICAgICAvKiBOYW1l Wzpwb3J0XSBvZiBodHRwIHByb3h5IHNlcnZlciAqLwotZXh0ZXJuIGludCAgICB0Y3BfaHR0cF9w cm94eV9lcnJubzsgICAgIC8qIFJldHVybiB2YWx1ZSBmcm9tIHNlcnZlciAqLwotZXh0ZXJuIGNo YXIgKiB0Y3BfaHR0cF9wcm94eV91c2VyOyAgICAgIC8qIE5hbWUgb2YgdXNlciBmb3IgYXV0aGVu dGljYXRpb24gKi8KLWV4dGVybiBjaGFyICogdGNwX2h0dHBfcHJveHlfcHdkOyAgICAgICAvKiBQ YXNzd29yZCBvZiB1c2VyICovCi0jZW5kaWYgLyogTk9IVFRQICovCi0KLSNpZmRlZiBUQ1BTT0NL RVQKLQotLyogVHlwZSBuZWVkZWQgYXMgNXRoIGFyZ3VtZW50IChsZW5ndGgpIHRvIGdldC9zZXRz b2Nrb3B0KCkgKi8KLQotI2lmZGVmIFRSVTY0Ci0vKiBUaGV5IHNheSBpdCB0aGVtc2VsdmVzIC0g dGhpcyBkb2VzIG5vdCBjb25mb3JtIHRvIHN0YW5kYXJkcyAqLwotI2RlZmluZSBzb2NrbGVuX3Qg aW50Ci0jZWxzZQotI2lmZGVmIEhQVVgKLSNkZWZpbmUgc29ja2xlbl90IGludAotI2VuZGlmCS8q IEhQVVggKi8KLSNlbmRpZgkvKiBUUlU2NCAqLwotCi0jaWZuZGVmIFNPQ0tPUFRfVAotI2lmZGVm IENLXzY0QklUCi0jZGVmaW5lIFNPQ0tPUFRfVCBzb2NrbGVuX3QKLSNlbmRpZgkvKiBDS182NEJJ VCAqLwotI2VuZGlmCS8qIFNPQ0tPUFRfVCAqLwotCi0jaWZuZGVmIFNPQ0tPUFRfVAotI2RlZmlu ZSBTT0NLT1BUX1QgaW50Ci0jaWZkZWYgTUFDT1NYMTAKLSN1bmRlZiBTT0NLT1BUX1QKLSNkZWZp bmUgU09DS09QVF9UIHVuc2lnbmVkIGludAotI2Vsc2UKLSNpZmRlZiBBSVg0MgotI3VuZGVmIFNP Q0tPUFRfVAotI2RlZmluZSBTT0NLT1BUX1QgdW5zaWduZWQgbG9uZwotI2Vsc2UKLSNpZmRlZiBQ VFgKLSN1bmRlZiBTT0NLT1BUX1QKLSNkZWZpbmUgU09DS09QVF9UIHNpemVfdAotI2Vsc2UKLSNp ZmRlZiBOVAotI3VuZGVmIFNPQ0tPUFRfVAotI2RlZmluZSBTT0NLT1BUX1QgaW50Ci0jZWxzZSAv KiBOVCAqLwotI2lmZGVmIFVOSVhXQVJFCi0jdW5kZWYgU09DS09QVF9UCi0jZGVmaW5lIFNPQ0tP UFRfVCBzaXplX3QKLSNlbHNlIC8qIFVOSVhXQVJFICovCi0jaWZkZWYgVk1TCi0jaWZkZWYgREVD X1RDUElQCi0jaWZkZWYgX19ERUNDX1ZFUgotI3VuZGVmIFNPQ0tPUFRfVAotI2RlZmluZSBTT0NL T1BUX1Qgc2l6ZV90Ci0jZW5kaWYgLyogX19ERUNDX1ZFUiAqLwotI2VuZGlmIC8qIERFQ19UQ1BJ UCAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIFVOSVhXQVJFICovCi0jZW5kaWYgLyog TlQgKi8KLSNlbmRpZiAvKiBQVFggKi8KLSNlbmRpZiAvKiBBSVg0MiAqLwotI2VuZGlmIC8qIE1B Q09TWDEwICovCi0jZW5kaWYgLyogU09DS09QVF9UICovCi0KLS8qIERpdHRvIGZvciBnZXRzb2Nr bmFtZSgpICovCi0KLSNpZm5kZWYgR1NPQ0tOQU1FX1QKLSNpZmRlZiBDS182NEJJVAotI2RlZmlu ZSBHU09DS05BTUVfVCBzb2NrbGVuX3QKLSNlbmRpZgkvKiBDS182NEJJVCAqLwotI2VuZGlmCS8q IEdTT0NLTkFNRV9UICovCi0KLSNpZm5kZWYgR1NPQ0tOQU1FX1QKLSNkZWZpbmUgR1NPQ0tOQU1F X1QgaW50Ci0jaWZkZWYgTUFDT1NYMTAKLSN1bmRlZiBHU09DS05BTUVfVAotI2RlZmluZSBHU09D S05BTUVfVCB1bnNpZ25lZCBpbnQKLSNlbHNlCi0jaWZkZWYgUFRYCi0jdW5kZWYgR1NPQ0tOQU1F X1QKLSNkZWZpbmUgR1NPQ0tOQU1FX1Qgc2l6ZV90Ci0jZWxzZQotI2lmZGVmIEFJWDQyICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHNpemVfdCBpbiA0LjIrKywgaW50IGluIDQuMS0tICov Ci0jdW5kZWYgR1NPQ0tOQU1FX1QKLSNkZWZpbmUgR1NPQ0tOQU1FX1Qgc2l6ZV90Ci0jZWxzZQot I2lmZGVmIFVOSVhXQVJFCi0jdW5kZWYgR1NPQ0tOQU1FX1QKLSNkZWZpbmUgR1NPQ0tOQU1FX1Qg c2l6ZV90Ci0jZWxzZQotI2lmZGVmIFZNUwotI2lmZGVmIERFQ19UQ1BJUAotI2lmZGVmIF9fREVD Q19WRVIKLSN1bmRlZiBHU09DS05BTUVfVAotI2RlZmluZSBHU09DS05BTUVfVCBzaXplX3QKLSNl bmRpZiAvKiBfX0RFQ0NfVkVSICovCi0jZW5kaWYgLyogREVDX1RDUElQICovCi0jZW5kaWYgLyog Vk1TICovCi0jZW5kaWYgLyogVU5JWFdBUkUgKi8KLSNlbmRpZiAvKiBBSVg0MSAqLwotI2VuZGlm IC8qIFBUWCAqLwotI2VuZGlmIC8qIE1BQ09TWDEwICovCi0jZW5kaWYgLyogR1NPQ0tOQU1FX1Qg Ki8KLQotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotCi0jaWZkZWYgTUFDT1NYMTAKLSNpZmRlZiBi Y29weQotI3VuZGVmIGJjb3B5Ci0jZW5kaWYKLSNpZmRlZiBiemVybwotI3VuZGVmIGJ6ZXJvCi0j ZW5kaWYKLSNlbmRpZiAvKiBNQUNPU1gxMCAqLwotCi0jZW5kaWYgLyogQ0tDTkVUX0ggKi8KCmRp ZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3BsbS50 eHQgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3BsbS50eHQKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwMGVkZGUuLjAwMDAwMDAKLS0tIGEvY2tlcm1p dC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NwbG0udHh0CisrKyAvZGV2L251bGwK QEAgLTEsMzExMyArMCwwIEBACi0KLSAgIFsxXVRoZSBDb2x1bWJpYSBDcm93biBUaGUgS2VybWl0 IFByb2plY3QgfCBDb2x1bWJpYSBVbml2ZXJzaXR5Ci0gICA2MTIgV2VzdCAxMTV0aCBTdHJlZXQs IE5ldyBZb3JrIE5ZIDEwMDI1IFVTQSBvIFsyXWtlcm1pdEBjb2x1bWJpYS5lZHUKLSAgIC4uLnNp bmNlIDE5ODEKLSAgIFszXUhvbWUgWzRdS2VybWl0IDk1IFs1XUMtS2VybWl0IFs2XVNjcmlwdHMg WzddQ3VycmVudCBbOF1OZXcgWzldRkFRCi0gICBbMTBdU3VwcG9ydAotCi1DLUtlcm1pdCBQcm9n cmFtIExvZ2ljIE1hbnVhbAotCi0gICAgIEZyYW5rIGRhIENydXoKLSAgICAgWzExXVRoZSBLZXJt aXQgUHJvamVjdAotCi0gICBBcyBvZjogQy1LZXJtaXQgOS4wLjMwMCwgMzAgSnVuZSAyMDExCi0g ICBMYXN0IHVwZGF0ZTogRnJpIEp1bCAxIDE1OjQ3OjM0IDIwMTEKLQotICAgICBJRiBZT1UgQVJF IFJFQURJTkcgQSBQTEFJTi1URVhUIHZlcnNpb24gb2YgdGhpcyBkb2N1bWVudCwgbm90ZSB0aGF0 Ci0gICAgIHRoaXMgZmlsZSBpcyBhIHBsYWluLXRleHQgZHVtcCBvZiBhIFdlYiBwYWdlLiBZb3Ug Y2FuIHZpc2l0IHRoZQotICAgICBvcmlnaW5hbCAoYW5kIHBvc3NpYmx5IG1vcmUgdXAtdG8tZGF0 ZSkgV2ViIHBhZ2UgaGVyZToKLQotICBbMTJdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrY3BsbS5odG1sCi0KLUNPTlRFTlRTCi0KLSAgMS4gWzEzXUlOVFJPRFVDVElPTgotICAyLiBb MTRdRklMRVMKLSAgMy4gWzE1XVNPVVJDRSBDT0RFIFBPUlRBQklMSVRZIEFORCBTVFlMRQotICA0 LiBbMTZdTU9EVUxFUwotICAgICA0LkEuIFsxN11Hcm91cCBBOiBMaWJyYXJ5IFJvdXRpbmVzCi0g ICAgIDQuQi4gWzE4XUdyb3VwIEI6IEtlcm1pdCBGaWxlIFRyYW5zZmVyCi0gICAgIDQuQy4gWzE5 XUdyb3VwIEM6IENoYXJhY3Rlci1TZXQgQ29udmVyc2lvbgotICAgICA0LkQuIFsyMF1Hcm91cCBE OiBVc2VyIEludGVyZmFjZQotICAgICA0LkUuIFsyMV1Hcm91cCBFOiBQbGF0Zm9ybS1EZXBlbmRl bnQgSS9PCi0gICAgIDQuRi4gWzIyXUdyb3VwIEY6IE5ldHdvcmsgU3VwcG9ydAotICAgICA0Lkcu IFsyM11Hcm91cCBHOiBGb3JtYXR0ZWQgU2NyZWVuIFN1cHBvcnQKLSAgICAgNC5ILiBbMjRdR3Jv dXAgSDogUHNldWRvdGVybWluYWwgU3VwcG9ydAotICAgICA0LkkuIFsyNV1Hcm91cCBJOiBTZWN1 cml0eQotICBJLiBbMjZdQVBQRU5ESVggSTogRklMRSBQRVJNSVNTSU9OUwotCi0xLiBJTlRST0RV Q1RJT04KLQotICAgVGhlIEtlcm1pdCBQcm90b2NvbCBpcyBzcGVjaWZpZWQgaW4gdGhlIGJvb2sg WzI3XUtlcm1pdCwgQSBGaWxlCi0gICBUcmFuc2ZlciBQcm90b2NvbCBieSBGcmFuayBkYSBDcnV6 LCBEaWdpdGFsIFByZXNzIC8gQnV0dGVyd29ydGgKLSAgIEhlaW5lbWFubiwgTmV3dG9uLCBNQSwg VVNBICgxOTg3KSwgMzc5IHBhZ2VzLCBJU0JOIDAtOTMyMzc2LTg4LTYuIEl0IGlzCi0gICBhc3N1 bWVkIHRoZSByZWFkZXIgaXMgZmFtaWxpYXIgd2l0aCB0aGUgS2VybWl0IHByb3RvY29sIHNwZWNp ZmljYXRpb24uCi0KLSAgIFRoaXMgZmlsZSBkZXNjcmliZXMgdGhlIHJlbGF0aW9uc2hpcCBhbW9u ZyB0aGUgbW9kdWxlcyBhbmQgZnVuY3Rpb25zIG9mCi0gICBDLUtlcm1pdCA1QSBhbmQgbGF0ZXIs IGFuZCBvdGhlciBwcm9ncmFtbWluZyBjb25zaWRlcmF0aW9ucy4gQy1LZXJtaXQKLSAgIGlzIGRl c2lnbmVkIHRvIGJlIHBvcnRhYmxlIHRvIGFueSBraW5kIG9mIGNvbXB1dGVyIHRoYXQgaGFzIGEg QwotICAgY29tcGlsZXIuIFRoZSBzb3VyY2UgY29kZSBpcyBicm9rZW4gaW50byBtYW55IGZpbGVz IHRoYXQgYXJlIGdyb3VwZWQKLSAgIGFjY29yZGluZyB0byB0aGVpciBmdW5jdGlvbiwgYXMgc2hv d24gaW4gdGhlIFsyOF1Db250ZW50cy4KLQotICAgQy1LZXJtaXQgaGFzIHNlZW4gY29uc3RhbnQg ZGV2ZWxvcG1lbnQgc2luY2UgMTk4NS4gVGhyb3VnaG91dCBpdHMKLSAgIGhpc3RvcnksIHRoZXJl IGhhcyBiZWVuIGEgbmV2ZXJlbmRpbmcgdHVnLW9mLXdhciBhbW9uZzoKLQotICAgIGEuIEZ1bmN0 aW9uYWxpdHk6IGFkZGluZyBuZXcgZmVhdHVyZXMsIGZpeGluZyBidWdzLCBpbXByb3ZpbmcKLSAg ICAgICBwZXJmb3JtYW5jZS4KLSAgICBiLiBBZGRpbmcgc3VwcG9ydCBmb3IgbmV3IHBsYXRmb3Jt cyBvciBjb21tdW5pY2F0aW9uIG1ldGhvZHMuCi0gICAgYy4gIkJ1enp3b3JkIDEuMCBjb21wbGlh bmNlIi4KLQotICAgVGhlIGxhdHRlciBjYXRlZ29yeSBpcyB0aGUgbW9zdCBmcnVzdHJhdGluZywg c2luY2UgaXQgZ2VuZXJhbGx5Ci0gICBpbnZvbHZlcyBtYXNzaXZlIGNoYW5nZXMganVzdCB0byBr ZWVwIHRoZSBzb2Z0d2FyZSBkb2luZyB3aGF0IGl0IGRpZAotICAgYmVmb3JlIGluIHNvbWUgbmV3 IHNldHRpbmc6IGUuZy4gdGhlIEsmUi10by1BTlNJQyBjb252ZXJzaW9uICh3aGljaCBoYWQKLSAg IHRvIGJlIGRvbmUsIG9mIGNvdXJzZSwgd2l0aG91dCBicmVha2luZyBLJlIpOyBZMksgKG5vdCBh IGJpZyBkZWFsIGluCi0gICBvdXIgY2FzZSk7IHRoZSBtYW55IGFuZCB2YXJpZWQgVU5JWCBhbmQg b3RoZXIgQVBJICJzdGFuZGFyZHMiIHdpdGgKLSAgIHdoaWNoIHRvICJjb21wbHkiLgotCi0gICBV cG9uIGZpcnN0IGdsYW5jZSBhdCB0aGUgc291cmNlIGNvZGUsIHlvdSB3aWxsIHByb2JhYmx5IGJl IGFwcGFsbGVkLgotICAgTWFueSB3aWxsIGJlIHRlbXB0ZWQgdG8gY2xlYW4gaXQgdXAgYW5kIG1v ZGVybml6ZSBpdC4gQnV0IGFzIHNvb24gYXMKLSAgIHlvdSBkbywgeW91IGFyZSBzdXJlIHRvIGJy ZWFrIHNvbWV0aGluZy4gUmVtZW1iZXIgdGhhdCBhYm92ZSBhbGwgZWxzZSwKLSAgIHRoZSBDLUtl cm1pdCBjb2RlIGlzIHBvcnRhYmxlIHRvIGV2ZXJ5IFVuaXggcGxhdGZvcm0gdGhhdCBldmVyIGV4 aXN0ZWQsCi0gICBnb2luZyBiYWNrIFVuaXggVjcgKDE5NzkpKiwgYW5kIHRvIHNldmVyYWwgb3Ro ZXIgY29tcGxldGVseSBkaWZmZXJlbnQKLSAgIGFuZCB1bnJlbGF0ZWQgb3BlcmF0aW5nLXN5c3Rl bSBmYW1pbGllcyBzdWNoIGFzIERFQy9IUCBWTVMsIERHIEFPUy9WUywKLSAgIGFuZCBTdHJhdHVz IFZPUywgYXMgd2VsbCBhcyB0byBzb21lIFVuaXggb2Zmc2hvb3RzIGxpa2UgT1MtOSBhbmQgUGxh biA5Ci0gICAoZnJvbSBPdXRlciBTcGFjZSkuIEV2ZXJ5IHJlbGVhc2Ugb2YgS2VybWl0IGhhcyBi ZWVuIGNoZWNrZWQgb24gZXZlcnkKLSAgIHBsYXRmb3JtIGF2YWlsYWJsZSAtLSB0aGUgb2xkZXIg dGhlIGJldHRlciEgLS0gdG8gbWFrZSBzdXJlIGl0IHN0aWxsCi0gICBidWlsZHMgYW5kIHJ1bnMu IEV2ZW4gdG9kYXkgKDIwMTEpLCB0aGVyZSBhcmUgbW9kZXJuIFVuaXggc3lzdGVtcyB0aGF0Ci0g ICBoYXZlIG5vbi1BTlNJIEMgY29tcGlsZXJzLCBmb3JlbW9zdCBhbW9uZyB0aGVtIEhQLVVYICh3 aGVyZSBhbiBBTlNJCi0gICBvcHRpbWl6aW5nIEMgY29tcGlsZXIgaXMgYXZhaWxhYmxlLCBidXQg b25seSBhcyBhbiBleHBlbnNpdmUgYWRkLW9uKS4KLSAgIEluIGEgd2F5LCBwb3J0YWJpbGl0eSBp cyB0aGUgbW9zdCBpbXBvcnRhbnQgZmVhdHVyZSBvZiBDLUtlcm1pdCBhbmQKLSAgIGV2ZXJ5IGVm Zm9ydCBzaG91bGQgYmUgbWFkZSB0byBwcmVzZXJ2ZSBpdCB0aHJvdWdoIGZ1dHVyZSByZWxlYXNl cy4KLQotICAgVm9sdW1pbm91cyBlZGl0IGhpc3RvcmllcyBhcmUgYXZhaWxhYmxlIGdvaW5nIGJh Y2sgdG8gTWF5IDE5ODUuIFRoZQotICAgZmlyc3QgdmVyc2lvbnMgb2YgQy1LZXJtaXQgd2VyZSBk b25lIG9uIG91ciBbMjldREVDIFZBWC0xMS83NTAgd2l0aAotICAgVWx0cml4IDEuMCBhbmQgMi4w IChhcyB3ZWxsIGFzIGRlcGFydG1lbnRhbCA3NTBzIHdpdGggNC4yQlNEKiopLCBERUMKLSAgIFBy by0zODAgd29ya3N0YXRpb25zIChkZXNrdG9wIFBEUC0xMXMpIHJ1bm5pbmcgMi45QlNELCB3aGlj aCB3YXMKLSAgIFszMF1wb3J0ZWQgdG8gdGhlIDM4MCBieSB1cy4gTGF0ZXIgKDE5ODggb3Igc28p IG9uIGEgYmlnIFZBWCA4NjUwIHdpdGgKLSAgIFVsdHJpeCwgd2hpY2ggYmVjYW1lIGFuIDg3MDAg KHRoZXNlIG5vIGRvdWJ0IHdlaWdoZWQgc2V2ZXJhbCB0b25zKSwgYW5kCi0gICBmaW5hbGx5IGEg c3VjY2Vzc2lvbiBvZiBub24tREVDIGVxdWlwbWVudDogYW4gRW5jb3JlIE11bHRpbWF4LCAyNSB5 ZWFycwotICAgd29ydGggb2YgU3VucywgYW5kIG5vdyBMaW51eCBvbiBbMzFdSFAgQmxhZGVzLiBX ZSBhbHNvIGhhZCBvdXIgb3duIFZNUwotICAgZGV2ZWxvcG1lbnQgc3lzdGVtcyBmb3Igc29tZSB5 ZWFycy4gQWxsIHRoaXMgcGx1cyBhIGdlbmVyb3VzIGFzc29ydG1lbnQKLSAgIG9mIGRlcGFydG1l bnRhbCBhbmQgb2Zmc2l0ZSBndWVzdCBhY2NvdW50cyBvbiBhIG11bHRpdHVkZSBvZiBwbGF0Zm9y bXMuCi0gICBBbnl3YXksIHRoZSBlZGl0IGhpc3RvcmllczoKLQotICAgICBbMzJdY2tjMDRlLnR4 dCBDLUtlcm1pdCA0LjIoMDMwKSBNYXkgMTk4NSB0byA0RSgwNzIpIEphbiAxOTg5LgotICAgICBb MzNdY2tjMDRmLnR4dCBDLUtlcm1pdCA0RigwNzcpIEFycCAxOTg5IHRvIDRGKDA5NSkgQXVnIDE5 ODkuCi0gICAgIFszNF1ja2MxNjgudHh0IFVwZGF0ZXMgdG8gQy1LZXJtaXQgNUEoMTY4KSBmb3Ig Vk1TIE5vdiAxOTkxCi0gICAgIFszNV1ja2MxNzgudHh0IEMtS2VybWl0IDVBKDEwMCkgSnVsIDE5 ODkgdG8gNUEoMTc4KSBKYW4gMTk5MgotICAgICBbMzZdY2tjMTg4LnR4dCBDLUtlcm1pdCA1QSgx ODgpIGRldmVsb3BtZW50LCAxOTkyCi0gICAgIFszN11ja2MxODkudHh0IEMtS2VybWl0IDVBKDE4 OSkgZGV2ZWxvcG1lbnQsIDE5OTMKLSAgICAgWzM4XWNrYzE5Mi50eHQgQy1LZXJtaXQgNi4wKDE5 MikgZGV2ZWxvcG1lbnQsIDE5OTgKLSAgICAgWzM5XWNrYzE5Ny50eHQgQy1LZXJtaXQgNy4wKDE5 NykgZGV2ZWxvcG1lbnQsIDIwMDAKLSAgICAgWzQwXWNrYzIwMC50eHQgQy1LZXJtaXQgOC4wLjIw MCBkZXZlbG9wbWVudCwgMjAwMQotICAgICBbNDFdY2tjMjExLnR4dCBDLUtlcm1pdCA4LjAuMjAx IHRocm91Z2ggOC4wLjIwOSAyMDAxLTIwMDQKLSAgICAgWzQyXWNrYzMwMC50eHQgQy1LZXJtaXQg OS4wLjMwMCBKdW5lIDIwMTEKLQotICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Ci0gICAqIEMtS2VybWl0IDYuMCB3YXMgdGhlIGxhc3Qgb25lIHRvIGJlIGJ1aWx0IG9uIFY3LCBh cyBJIHJlY2FsbC4gVGhlCi0gICBjb2RlIHNob3VsZCBzdGlsbCBiZSBnb29kIGZvciBWNyBidXQg aXQgcHJvYmFibHkgaGFzIG91dGdyb3duIHRoZQotICAgMTYtYml0IGFkZHJlc3Mgc3BhY2UuIElu IGFueSBjYXNlIHRoZXJlIGlzIHN0aWxsIGEgVjcgbWFrZWZpbGUgdGFyZ2V0Ci0gICBhbmQgYSBW NyBwYXRoIHRocm91Z2ggdGhlIGZvcmVzdCBvZiAjaWZkZWZzIGluIHRoZSBjb2RlIGlmIGFueWJv ZHkgaXMKLSAgIHJ1bm5pbmcgVjcgb24gYW4gZW11bGF0b3IgYW5kIHdvdWxkIGxpa2UgdG8gdHJ5 IGJ1aWxkaW5nIEMtS2VybWl0LgotICAgVGhlcmUgaXMgbm8gc3VwcG9ydCBmb3IgVjYgYnV0IHRo YXQgaXMgb25seSBiZWNhdXNlIG5vIFY2IHN5c3RlbSB3YXMKLSAgIGV2ZXIgZm91bmQgZm9yIGRl dmVsb3BtZW50LiBOb3RpY2UgdGhhdCBzb21lIG90aGVyIDE2LWJpdCBVbml4ZXMgYXJlCi0gICBz dXBwb3J0ZWQgaW4gdGhlIGNvZGUsIGluY2x1ZGluZyAyLjlCU0QgYW5kIFRhbmR5IFhlbml4IDMu MCwgYnV0IGhhdmUKLSAgIG5vdCBiZWVuIHRyaWVkIHNpbmNlIEMtS2VybWl0IDYuMAotCi0gICAq KiAgQy1LZXJtaXQgOS4wLjMwMCB3YXMgYnVpbHQgc3VjY2Vzc2Z1bGx5IG9uIDQuMkJTRCBhYm91 dCAyNSB5ZWFycwotICAgbGF0ZXIsIGluIEp1bmUgMjAxMS4KLQotICAgWyBbNDNdQ29udGVudHMg XSBbIFs0NF1DLUtlcm1pdCBdIFsgWzQ1XUtlcm1pdCBIb21lIF0KLQotMi4gRklMRVMKLQotICAg Qy1LZXJtaXQgc291cmNlIGZpbGVzIGJlZ2luIHdpdGggdGhlIHR3byBsZXR0ZXJzICJjayIsIGZv ciBleGFtcGxlCi0gICBja3V0aW8uYy4gRmlsZW5hbWVzIGFyZSBrZXB0IHNob3J0ICg2LjMpIGZv ciBtYXhpbXVtIHBvcnRhYmlsaXR5IGFuZAotICAgKG9idmlvdXNseSBJIGhvcGUpIGRvIG5vdCBj b250YWluIHNwYWNlcyBvciBtb3JlIHRoYW4gb25lIHBlcmlvZC4gVGhlCi0gICB0aGlyZCBjaGFy YWN0ZXIgaW4gdGhlIG5hbWUgZGVub3RlcyBzb21ldGhpbmcgYWJvdXQgdGhlIGZ1bmN0aW9uIGdy b3VwCi0gICBhbmQgdGhlIGV4cGVjdGVkIGxldmVsIG9mIHBvcnRhYmlsaXR5OgotCi0gICAgIGEg ICAgIEdlbmVyYWwgZGVzY3JpcHRpdmUgbWF0ZXJpYWwgYW5kIGRvY3VtZW50YXRpb24gKHRleHQp Ci0gICAgIGIgICAgIEJPTyBmaWxlIGVuY29kZXJzIGFuZCBkZWNvZGVycyAob2Jzb2xldGUpCi0g ICAgIGMgICAgIEFsbCBwbGF0Zm9ybXMgd2l0aCBDIGNvbXBpbGVycyAoKikKLSAgICAgZCAgICAg RGF0YSBHZW5lcmFsIEFPUy9WUwotICAgICBlICAgICBSZXNlcnZlZCBmb3IgImNrZXJtaXQiIGZp bGVzLCBsaWtlIGNrZXJtaXQuaW5pLCBja2VybWl0Mi50eHQKLSAgICAgZiAgICAgKHJlc2VydmVk KQotICAgICBnICAgICAocmVzZXJ2ZWQpCi0gICAgIGggICAgIChyZXNlcnZlZCkKLSAgICAgaSAg ICAgQ29tbW9kb3JlIEFtaWdhIChJbnR1aXRpb24pCi0gICAgIGogICAgICh1bnVzZWQpCi0gICAg IGsgICAgICh1bnVzZWQpCi0gICAgIGwgICAgIFN0cmF0dXMgVk9TCi0gICAgIG0gICAgIE1hY2lu dG9zaCB3aXRoIE1hYyBPUyAxLTkKLSAgICAgbiAgICAgKHVudXNlZCkKLSAgICAgbyAgICAgT1Mv MiBhbmQgTWljcm9zb2Z0IFdpbmRvd3MgOXgvTUUvTlQvMjAwMC9YUC9WaXN0YS9ldGMKLSAgICAg cCAgICAgUGxhbiA5IGZyb20gQmVsbCBMYWJzCi0gICAgIHEgICAgIChyZXNlcnZlZCkKLSAgICAg ciAgICAgREVDIFBEUC0xMSB3aXRoIFJTVFMvRSAobmV2ZXIgdXNlZCwgb3BlbiBmb3IgcmVhc3Np Z25tZW50KQotICAgICBzICAgICBBdGFyaSBTVCBHRU1ET1MgKGxhc3Qgc3VwcG9ydGVkIGluIHZl cnNpb24gNUEoMTg5KSkKLSAgICAgdCAgICAgREVDIFBEUC0xMSB3aXRoIFJULTExIChuZXZlciB1 c2VkLCBvcGVuIGZvciByZWFzc2lnbm1lbnQpCi0gICAgIHUgICAgIFVuaXgtYmFzZWQgb3BlcmF0 aW5nIHN5c3RlbXMgKCopCi0gICAgIHYgICAgIFZNUyBhbmQgT3BlblZNUwotICAgICB3ICAgICBX YXJ0IChMZXgtbGlrZSBwcmVwcm9jZXNzb3IsIHBsYXRmb3JtIGluZGVwZW5kZW50KQotICAgICB4 ICAgICAocmVzZXJ2ZWQpCi0gICAgIHkgICAgIChyZXNlcnZlZCkKLSAgICAgeiAgICAgKHJlc2Vy dmVkKQotICAgICAwLTMgICAocmVzZXJ2ZWQpCi0gICAgIDQgICAgIElCTSBBUy80MDAKLSAgICAg NS04ICAgKHJlc2VydmVkKQotICAgICA5ICAgICBNaWNyb3dhcmUgT1MtOQotICAgICBfICAgICAo dW5kZXJzY29yZSkgRW5jcnlwdGlvbiBtb2R1bGVzCi0KLSAgICgqKSBJbiBmYWN0IHRoZXJlIGlz IGxpdHRsZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBja2MqLiogYW5kIGNrdSouKgotICAgY2F0 ZWdvcmllcy4gSXQgd291bGQgbWFrZSBtb3JlIHNlbnNlIGZvciBhbGwgY2t1Ki4qIG1vZHVsZXMg dG8gYmUKLSAgIGNrYyouKiBvbmVzLCBleGNlcHQgY2t1ZmlvLmMsIGNrdXRpby5jLCBja3Vjb24u YywgY2t1Y25zLmMsIGFuZAotICAgY2t1cHR5LmMsIHdoaWNoIHRydWx5IGFyZSBzcGVjaWZpYyB0 byBVbml4LiBUaGUgcmVzdCAoY2t1dXMqLmMsCi0gICBja3VjbWQuYywgZXRjKSBhcmUgcXVpdGUg cG9ydGFibGUuCi0KLSAgIE9uZSBoaW50IGJlZm9yZSBwcm9jZWVkaW5nOiBmdW5jdGlvbnMgYXJl IHNjYXR0ZXJlZCBhbGwgb3ZlciB0aGUgY2tjKi5jCi0gICBhbmQgY2t1Ki5jIG1vZHVsZXMsIHdo ZXJlIGZ1bmN0aW9uIHNpemUgaGFzIGJlZ3VuIHRvIHRha2UgcHJlY2VkZW5jZQotICAgb3ZlciB0 aGUgZGVzaXJhYmlsaXR5IG9mIGdyb3VwaW5nIHJlbGF0ZWQgZnVuY3Rpb25zIHRvZ2V0aGVyLCB0 aGUgYWltCi0gICBiZWluZyB0byBrZWVwIGFueSBwYXJ0aWN1bGFyIG1vZHVsZSBmcm9tIGdyb3dp bmcgZGlzcHJvcG9ydGlvbmF0ZWx5Ci0gICBsYXJnZS4gVGhlIGVhc2llc3Qgd2F5IChpbiBVTklY KSB0byBmaW5kIG91dCBpbiB3aGF0IHNvdXJjZSBmaWxlIGEKLSAgIGdpdmVuIGZ1bmN0aW9uIGlz IGRlZmluZWQgaXMgbGlrZSB0aGlzICh3aGVyZSB0aGUgZGVzaXJlZCBmdW5jdGlvbiBpcwotICAg Zm9vKCkuLi4pOgotCi0gIGdyZXAgXmZvb1woIGNrKi5jCi0KLSAgIFRoaXMgd29ya3MgYmVjYXVz ZSB0aGUgY29kaW5nIGNvbnZlbnRpb24gaGFzIGJlZW4gdG8gbWFrZSBmdW5jdGlvbgotICAgbmFt ZXMgYWx3YXlzIHN0YXJ0IG9uIHRoZSBsZWZ0IG1hcmdpbiB3aXRoIHRoZWlyIGNvbnRlbnRzIGlu ZGVudGVkLCBmb3IKLSAgIGV4YW1wbGU6Ci0KLXN0YXRpYyBjaGFyICoKLWZvbyh4LHkpIGludCB4 LCB5OyB7Ci0gICAgLi4uCi19Ci0KLSAgIEFsc28gbm90ZSB0aGUgc3R5bGUgZm9yIGJyYWNrZXQg cGxhY2VtZW50LiBUaGlzIGFsbG93cyBicmFja2V0LW1hdGNoaW5nCi0gICB0ZXh0IGVkaXRvcnMg KHN1Y2ggYXMgRU1BQ1MpIHRvIGhlbHAgeW91IG1ha2Ugc3VyZSB5b3Uga25vdyB3aGljaAotICAg b3BlbmluZyBicmFja2V0IGEgY2xvc2luZyBicmFja2V0IG1hdGNoZXMsIHBhcnRpY3VsYXJseSB3 aGVuIHRoZQotICAgb3BlbmluZyBicmFja2V0IGlzIGFib3ZlIHRoZSB2aXNpYmxlIHNjcmVlbiwg YW5kIGl0IGFsc28gbWFrZXMgaXQgZWFzeQotICAgdG8gZmluZCB0aGUgZW5kIG9mIGEgZnVuY3Rp b24gKHNlYXJjaCBmb3IgJ30nIG9uIHRoZSBsZWZ0IG1hcmdpbikuCi0KLSAgIE9mIGNvdXJzZSBF TUFDUyB0YWdzIHdvcmsgbmljZWx5IHdpdGggdGhpcyBmb3JtYXQgdG9vOgotCi0gICQgY2Qga2Vy bWl0LXNvdXJjZS1kaXJlY3RvcnkKLSAgJCBldGFncyBja1tjdV0qLmMKLSAgJCBlbWFjcwotICBF c2MtWCBWaXNpdC1UYWdzLVRhYmxlPENSPjxDUj4KLQotICAgKGJ1dCByZW1lbWJlciB0aGF0IHRo ZSBzb3VyY2UgZmlsZSBmb3IgY2tjcHJvLmMgaXMgWzQ2XWNrY3Byby53ISkKLQotICAgQWxzbzoK LQotICAgICAqIFRhYnMgc2hvdWxkIGJlIHNldCBldmVyeSA4IHNwYWNlcywgYXMgb24gYSBWVDEw MC4KLSAgICAgKiBBbGwgbGluZXMgbXVzdCBubyBtb3JlIHRoYW4gNzkgY2hhcmFjdGVycyB3aWRl IGFmdGVyIHRhYiBleHBhbnNpb24uCi0gICAgICogTm90ZSB0aGUgZGlzdGluY3Rpb24gYmV0d2Vl biBwaHlzaWNhbCB0YWJzIChBU0NJSSA5KSBhbmQgdGhlCi0gICAgICAgaW5kZW50YXRpb24gY29u dmVudGlvbnMsIHdoaWNoIGFyZTogNCBmb3IgYmxvY2sgY29udGVudHMsIDIgZm9yCi0gICAgICAg bW9zdCBvdGhlciBzdHVmZiAob2J2aW91c2x5IHRoaXMgaXMgbm90IGEgcG9ydGFiaWxpdHkgaXNz dWUsIGp1c3QKLSAgICAgICBzdHlsZSkuCi0KLSAgIFsgWzQ3XUNvbnRlbnRzIF0gWyBbNDhdQy1L ZXJtaXQgXSBbIFs0OV1LZXJtaXQgSG9tZSBdCi0KLTMuIFNPVVJDRSBDT0RFIFBPUlRBQklMSVRZ IEFORCBTVFlMRQotCi0gICBDLUtlcm1pdCB3YXMgZGVzaWduZWQgaW4gMTk4NSBhcyBhIHBsYXRm b3JtLWluZGVwZW5kZW50IHJlcGxhY2VtZW50IGZvcgotICAgdGhlIGVhcmxpZXIgVW5peCBLZXJt aXQuIEMtS2VybWl0J3MgZGVzaWduIHdhcyBleHBlY3RlZCB0byBwcm9tb3RlCi0gICBwb3J0YWJp bGl0eSwgYW5kIGp1ZGdpbmcgZnJvbSB0aGUgbnVtYmVyIG9mIHBsYXRmb3JtcyB0byB3aGljaCBp dCBoYXMKLSAgIGJlZW4gYWRhcHRlZCBzaW5jZSB0aGVuLCB0aGUgbW9kZWwgaXMgZWZmZWN0aXZl LCBpZiBub3QgaWRlYWwKLSAgIChvYnZpb3VzbHkgaWYgd2UgaGFkIGl0IGFsbCB0byBkbyBvdmVy LCB3ZSdkIGNoYW5nZSBhIGZldyB0aGluZ3MpLiBUbwotICAgYW5zd2VyIHRoZSBvZnQtcmVwZWF0 ZWQgcXVlc3Rpb246ICJXaHkgYXJlIHRoZXJlIHNvIG1hbnkgI2lmZGVmcz8iLAotICAgaXQncyBi ZWNhdXNlOgotCi0gICAgICogTWFueSBvZiB0aGVtIGFyZSByZWxhdGVkIHRvIGZlYXR1cmUgc2Vs ZWN0aW9uIGFuZCBwcm9ncmFtIHNpemUsIGFuZAotICAgICAgIHNvIG5lZWQgdG8gYmUgdGhlcmUg YW55d2F5LgotICAgICAqIFRob3NlIHRoYXQgdHJlYXQgY29tcGlsZXIsIGxpYnJhcnksIHBsYXRm b3JtLCBoZWFkZXItZmlsZSwgYW5kCi0gICAgICAgc2ltaWxhciBkaWZmZXJlbmNlcyBoYXZlIGJ1 aWx0IHVwIG92ZXIgdGltZSBhcyBodW5kcmVkcyBvZiBwZW9wbGUKLSAgICAgICBhbGwgb3ZlciB0 aGUgd29ybGQgYWRhcHRlZCBDLUtlcm1pdCB0byB0aGVpciBwYXJ0aWN1bGFyCi0gICAgICAgZW52 aXJvbm1lbnRzIGFuZCBzZW50IGJhY2sgdGhlaXIgY2hhbmdlcy4gVGhlcmUgbWlnaHQgYmUgbW9y ZQotICAgICAgIHBvbGl0aWNhbGx5LWNvcnJlY3Qgd2F5cyB0byBhY2hpZXZlIHBvcnRhYmlsaXR5 LCBidXQgdGhpcyBvbmUgaXMKLSAgICAgICBuYXR1cmFsIGFuZCBwcm92ZW4uIFRoZSBiYXNpYyBp ZGVhIGlzIHRvIGludHJvZHVjZSBjaGFuZ2VzIHRoYXQgY2FuCi0gICAgICAgYmUgc2VsZWN0ZWQg YnkgZGVmaW5pbmcgYSBzeW1ib2wsIHdoaWNoLCBpZiBub3QgZGVmaW5lZCwgbGVhdmVzIHRoZQot ICAgICAgIHByb2dyYW0gZXhhY3RseSBhcyBpdCB3YXMgYmVmb3JlIHRoZSBjaGFuZ2VzLgotICAg ICAqIEFsdGhvdWdoIGl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRvICJjbGVhbiB1cCIgdGhlICIjaWZk ZWYgbWVzcyIsCi0gICAgICAgbm9ib2R5IGhhcyBhY2Nlc3MgdG8gYWxsIHRoZSBodW5kcmVkcyBv ZiBwbGF0Zm9ybXMgc2VydmVkIGJ5IHRoZQotICAgICAgICNpZmRlZnMgdG8gY2hlY2sgdGhlIHJl c3VsdHMuCi0KLSAgIEFuZCB0byBhbnN3ZXIgdGhlIHNlY29uZC1tb3N0LW9mdC1yZXBlYXRlZCBx dWVzdGlvbjogIldoeSBkb24ndCB5b3UKLSAgIGp1c3QgdXNlIEdOVSBhdXRvY29uZmlnIC8gYXV0 b21ha2UgLyBhdXRvd2hhdGV2ZXIgaW5zdGVhZCBvZgotICAgaGFyZC1jb2RpbmcgYWxsIHRob3Nl ICNpZmRlZnM/IiBBbnN3ZXJzOgotCi0gICAgICogVGhlIEdOVSB0b29scyBhcmUgbm90IGF2YWls YWJsZSBvbiBhbGwgdGhlIHBsYXRmb3JtcyB3aGVyZSBDLUtlcm1pdAotICAgICAgIG11c3QgYmUg YnVpbHQgYW5kIEkgd291bGRuJ3QgbmVjZXNzYXJpbHkgdHJ1c3QgdGhlbSBpZiB0aGV5IHdlcmUu Ci0gICAgICogRWFjaCBwbGF0Zm9ybSBpcyBhIG1vdmluZyB0YXJnZXQsIHNvIHRoZSB0b29scyB0 aGVtc2VsdmVzIHdvdWxkCi0gICAgICAgbmVlZCB0byB1cGRhdGVkIGJlZm9yZSBLZXJtaXQgY291 bGQgYmUgdXBkYXRlZC4KLSAgICAgKiBJdCB3b3VsZCBvbmx5IGFkZCBhbm90aGVyIGxheWVyIG9m IGNvbXBsZXhpdHkgdG8gYW4gYWxyZWFkeSBjb21wbGV4Ci0gICAgICAgcHJvY2Vzcy4KLSAgICAg KiBDb252ZXJzaW9uIGF0IHRoaXMgcG9pbnQgd291bGQgbm90IGJlIHByYWN0aWNhbCB1bmxlc3Mg dGhlcmUgd2FzIGEKLSAgICAgICB3YXkgdG8gdGVzdCB0aGUgcmVzdWx0cyBvbiBhbGwgdGhlIGh1 bmRyZWRzIG9mIHBsYXRmb3JtcyB3aGVyZQotICAgICAgIEMtS2VybWl0IGlzIHN1cHBvc2VkIHRv IGJ1aWxkLgotCi0gICBXaGVuIHdyaXRpbmcgY29kZSBmb3IgdGhlIHN5c3RlbS1pbmRlcGVuZGVu dCBDLUtlcm1pdCBtb2R1bGVzLCBwbGVhc2UKLSAgIHN0aWNrIHRvIHRoZSBmb2xsb3dpbmcgY29k aW5nIGNvbnZlbnRpb25zIHRvIGVuc3VyZSBwb3J0YWJpbGl0eSB0byB0aGUKLSAgIHdpZGVzdCBw b3NzaWJsZSB2YXJpZXR5IG9mIEMgcHJlcHJvY2Vzc29ycywgY29tcGlsZXJzLCBhbmQgbGlua2Vy cywgYXMKLSAgIHdlbGwgYXMgY2VydGFpbiBuZXR3b3JrIGFuZC9vciBlbWFpbCB0cmFuc3BvcnRz LiBUaGUgc2FtZSBob2xkcyB0cnVlCi0gICBmb3IgbWFueSBvZiB0aGUgInN5c3RlbSBkZXBlbmRl bnQiIG1vZHVsZXMgdG9vOyBwYXJ0aWN1bGFybHkgdGhlIFVuaXgKLSAgIG9uZXMsIHNpbmNlIHRo ZXkgbXVzdCBiZSBidWlsZGFibGUgYnkgYSB3aWRlIHZhcmlldHkgb2YgY29tcGlsZXJzIGFuZAot ICAgbGlua2VycywgbmV3IGFuZCBvbGQuCi0KLSAgIFRoaXMgbGlzdCBkb2VzIG5vdCBwdXJwb3J0 IHRvIGJlIGNvbXByZWhlbnNpdmUsIGFuZCBhbHRob3VnaCBzb21lIGl0ZW1zCi0gICBvbiBpdCBt aWdodCBzZWVtIGZhci1mZXRjaGVkLCB0aGV5IHdvdWxkIG5vdCBiZSBsaXN0ZWQgdW5sZXNzIEkg aGFkCi0gICBlbmNvdW50ZXJlZCB0aGVtIHNvbWV3aGVyZSwgc29tZSB0aW1lLiBJIHdpc2ggSSBo YWQga2VwdCBiZXR0ZXIgcmVjb3JkcwotICAgc28gSSBjb3VsZCBjaXRlIHNwZWNpZmljIHBsYXRm b3JtcyBhbmQgY29tcGlsZXJzLgotCi0gICAgICogVHJ5IHRvIGtlZXAgdmFyaWFibGUgYW5kIGZ1 bmN0aW9uIG5hbWVzIHVuaXF1ZSB3aXRoaW4gNiBjaGFyYWN0ZXJzLAotICAgICAgIGVzcGVjaWFs bHkgaWYgdGhleSBhcmUgdXNlZCBhY3Jvc3MgbW9kdWxlcywgc2luY2UgNiBpcyB0aGUgbWF4aW11 bQotICAgICAgIGZvciBzb21lIG9sZCBsaW5rZXJzIChhY3R1YWxseSwgdGhpcyBnb2VzIGJhY2sg dG8gVE9QUy0xMCBhbmQgLTIwCi0gICAgICAgYW5kIG90aGVyIG9sZCBERUMgT1MncyB3aGVyZSBD LUtlcm1pdCBuZXZlciByYW4gYW55d2F5OyBhIG1vcmUKLSAgICAgICByZWFsaXN0aWMgbWF4aW11 bSBpcyBwcm9iYWJseSBzb21ld2hlcmUgYmV0d2VlbiA4IGFuZCAxNikuIFdlIGtub3cKLSAgICAg ICBmb3IgY2VydGFpbiB0aGF0IFZBWCBDIGhhcyBhIDMxLWNoYXJhY3RlciBtYXggYmVjYXVzZSBp dCBjb21wbGFpbnMKLSAgICAgICAtLSBvdGhlcnMgbWlnaHQgbm90IGNvbXBsYWluLCBidXQganVz dCBzaWxlbnRseSB0cnVuY2F0ZSwgdGh1cwotICAgICAgIGZvbGRpbmcgdHdvIG9yIG1vcmUgcm91 dGluZXMvdmFyaWFibGVzIGludG8gb25lLgotICAgICAqIEtlZXAgcHJlcHJvY2Vzc29yIHN5bWJv bHMgdW5pcXVlIHdpdGhpbiA4IGNoYXJhY3RlcnM7IHRoYXQncyB0aGUKLSAgICAgICBtYXggZm9y IHNvbWUgcHJlcHJvY2Vzc29ycyAoc29ycnksIEkgY2FuJ3QgZ2l2ZSBhIHNwZWNpZmljIGV4YW1w bGUsCi0gICAgICAgYnV0IGluIDE5ODggb3IgdGhlcmVhYm91dHMsIEkgaGFkIHRvIGNoYW5nZSBj aGFyYWN0ZXItc2V0IHN5bWJvbHMKLSAgICAgICBsaWtlIFRDX0xBVElOMSBhbmQgVENfTEFUSU4y IHRvIFRDXzFMQVRJTiBhbmQgVENfMkxBVElOIGJlY2F1c2UgdGhlCi0gICAgICAgZGlnaXRzIHdl cmUgYmVpbmcgdHJ1bmNhdGVkIGFuZCBpZ25vcmVkIG9uIGEgcGxhdGZvcm0gd2hlcmUgSQotICAg ICAgIGFjdHVhbGx5IGhhZCB0byBidWlsZCBDLUtlcm1pdCA1QTsgdW5mb3J0dW5hdGVseSBJIGRp ZG4ndCBub3RlCi0gICAgICAgd2hpY2ggcGxhdGZvcm0gLS0gbWF5YmUgc29tZSBlYXJseSBVbHRy aXggdmVyc2lvbj8pCi0gICAgICogRG9uJ3QgY3JlYXRlIHByZXByb2Nlc3NvciBzeW1ib2xzLCBv ciB2YXJpYWJsZSBvciBmdW5jdGlvbiBuYW1lcywKLSAgICAgICB0aGF0IHN0YXJ0IHdpdGggdW5k ZXJzY29yZSAoXykuIFRoZXNlIGFyZSB1c3VhbGx5IHJlc2VydmVkIGZvcgotICAgICAgIGludGVy bmFsIHVzZSBieSB0aGUgY29tcGlsZXIgYW5kIGhlYWRlciBmaWxlcy4KLSAgICAgKiBEb24ndCBw dXQgI2luY2x1ZGUgZGlyZWN0aXZlcyBpbnNpZGUgZnVuY3Rpb25zIG9yIHsgYmxvY2tzIH0uCi0g ICAgICogRG9uJ3QgdXNlIHRoZSAjaWYgb3IgI2VsaWYgcHJlcHJvY2Vzc29yIGNvbnN0cnVjdGlv bnMsIG9ubHkgdXNlCi0gICAgICAgI2lmZGVmLCAjaWZuZGVmLCAjZGVmaW5lLCAjdW5kZWYsIGFu ZCAjZW5kaWYuCi0gICAgICogUHV0IHRva2VucyBhZnRlciAjZW5kaWYgaW4gY29tbWVudCBicmFj a2V0cywgZS5nLiAjZW5kaWYgLyogRk9PICovLgotICAgICAqIERvbid0IGluZGVudCBwcmVwcm9j ZXNzb3Igc3RhdGVtZW50cyAtICMgbXVzdCBhbHdheXMgYmUgZmlyc3QgY2hhcgotICAgICAgIG9u IGxpbmUuCi0gICAgICogRG9uJ3QgcHV0IHdoaXRlc3BhY2UgYWZ0ZXIgIyBpbiBwcmVwcm9jZXNz b3Igc3RhdGVtZW50cy4KLSAgICAgKiBEb24ndCB1c2UgI3ByYWdtYSwgZXZlbiB3aXRoaW4gI2lm ZGVmcyAtLSBpdCBtYWtlcyBzb21lCi0gICAgICAgcHJlcHJvY2Vzc29ycyBnaXZlIHVwLgotICAg ICAqIFNhbWUgZ29lcyBmb3IgI21vZHVsZSwgI2lmLCBldGMgLSAjaWZkZWZzIGRvIE5PVCBwcm90 ZWN0IHRoZW0uCi0gICAgICogRG9uJ3QgdXNlIGxvZ2ljYWwgb3BlcmF0b3JzIGluIHByZXByb2Nl c3NvciBjb25zdHJ1Y3Rpb25zLgotICAgICAqIEF2b2lkICNpZmRlZnMgaW5zaWRlIGFyZ3VtZW50 IGxpc3QgdG8gZnVuY3Rpb24gY2FsbHMgKEkgY2FuJ3QKLSAgICAgICByZW1lbWJlciB3aHkgdGhp cyBvbmUgaXMgaGVyZSwgYnV0IHByb2JhYmx5IG5lZWRuJ3QgYmU7IHdlIGRvIHRoaXMKLSAgICAg ICBhbGwgdGhlIHRpbWUpLgotICAgICAqIEFsd2F5cyBjYXN0IHN0cmxlbigpIGluIGV4cHJlc3Np b25zIHRvIGludDoKLSAgICAgICBpZiAoKGludClzdHJsZW4oZm9vKSA8IHgpLi4uCi0gICAgICog QXZvaWQgdHlwZWRlZnM7IHRoZXkgbWlnaHQgYmUgcG9ydGFibGUgYnV0IHRoZXkgYXJlIHZlcnkg Y29uZnVzaW5nCi0gICAgICAgYW5kIHRoZXJlJ3Mgbm8gd2F5IHRvIHRlc3QgZm9yIHRoZWlyIHBy ZXNlbmNlIG9yIGFic2VuY2UgYXQgY29tcGlsZQotICAgICAgIHRpbWUuIFVzZSBwcmVwcm9jZXNz b3Igc3ltYm9scyBpbnN0ZWFkIGlmIHBvc3NpYmxlOyBhdCBsZWFzdCB5b3UKLSAgICAgICBjYW4g dGVzdCB0aGVpciBkZWZpbml0aW9ucy4KLSAgICAgKiBVbnNpZ25lZCBsb25nIGlzIG5vdCBwb3J0 YWJsZTsgdXNlIGEgcHJlcHJvY2Vzc29yIHN5bWJvbCAoS2VybWl0Ci0gICAgICAgdXNlcyBVTE9O RyBmb3IgdGhpcykuCi0gICAgICogTG9uZyBsb25nIGlzIG5vdCBwb3J0YWJsZS4gSWYgeW91IHJl YWxseSBuZWVkIGl0LCBiZSBjcmVhdGl2ZS4KLSAgICAgKiBTaW1pbGFybHkgMTIzNExMIGlzIG5v dCBwb3J0YWJsZSwgbm9yIGFsbW9zdCBhbnkgb3RoZXIgY29uc3RhbnQKLSAgICAgICBtb2RpZmll ciBvdGhlciB0aGFuIEwuCi0gICAgICogVW5zaWduZWQgY2hhciBpcyBub3QgcG9ydGFibGUsIHVz ZSBDSEFSIChhIHByZXByb2Nlc3NvciBzeW1ib2wKLSAgICAgICBkZWZpbmVkIGluIHRoZSBLZXJt aXQgaGVhZGVyIGZpbGVzKSBhbmQgYWx3YXlzIHRha2UgcHJlY2F1dGlvbnMKLSAgICAgICBhZ2Fp bnN0IGNoYXJhY3RlciBzaWduYWdlIChtb3JlIGFib3V0IHRoaXMgWzUwXWJlbG93KS4KLSAgICAg KiBEb24ndCB1c2UgaW5pdGlhbGl6ZXJzIHdpdGggYXV0b21hdGljIGFycmF5cyBvciBzdHJ1Y3Rz OiBpdCdzIG5vdAotICAgICAgIHBvcnRhYmxlLgotICAgICAqIERvbid0IHVzZSBiaWcgYXV0b21h dGljIGFycmF5cyBvciBzdHJ1Y3RzIGluIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0Ci0gICAgICAgYmUg Y2FsbGVkIHJlY3Vyc2l2ZWx5OyBzb21lIHBsYXRmb3JtcyBoYXZlIGZpeGVkLXNpemUgc3RhY2tz IChlLmcuCi0gICAgICAgV2luZG93cyA5eDogMjU2SykgYW5kIHJlY3Vyc2l2ZSBmdW5jdGlvbnMg Y3Jhc2ggd2l0aCBzdGFjawotICAgICAgIG92ZXJmbG93LiBFdmVuIHdoZW4gdGhlcmUgaXMgbm90 IGEgY29tcGlsZXIgbGltaXRhdGlvbiwgdGhpcyBjYXVzZXMKLSAgICAgICBtZW1vcnkgdG8gYmUg Y29uc3VtZWQgd2l0aG91dCBib3VuZCwgYW5kIGNhbiBlbmQgdXAgZmlsbGluZyBzd2FwCi0gICAg ICAgc3BhY2UuCi0gICAgICogRG9uJ3QgYXNzdW1lIHRoYXQgc3RydWN0IGFzc2lnbm1lbnQgcGVy Zm9ybXMgYSBjb3B5LCBvciB0aGF0IGl0Ci0gICAgICAgZXZlbiBleGlzdHMuCi0gICAgICogRG9u J3QgdXNlIHNpemVvZiB0byBnZXQgdGhlIHNpemUgb2YgYW4gYXJyYXk7IHNvbWVvbmUgbWlnaHQg Y29tZQotICAgICAgIGFsb25nIGxhdGVyIGFuZCBhbmQgY2hhbmdlIGl0IGZyb20gc3RhdGljIHRv IG1hbGxvYydkLiBBbHdheXMgdXNlIGEKLSAgICAgICBzeW1ib2wgdG8gcmVmZXIgdG8gdGhlIGFy cmF5J3Mgc2l6ZS4KLSAgICAgKiBEb24ndCBwdXQgcHJvdG90eXBlcyBmb3Igc3RhdGljIGZ1bmN0 aW9ucyBpbnRvIGhlYWRlciBmaWxlcyB0aGF0Ci0gICAgICAgYXJlIHVzZWQgYnkgbW9kdWxlcyB0 aGF0IGRvbid0IGNvbnRhaW4gdGhhdCBmdW5jdGlvbjsgdGhlIGxpbmsgc3RlcAotICAgICAgIGNh biBmYWlsIHdpdGggdW5yZXNvbHZlZCByZWZlcmVuY2VzIChlLmcuIG9uIEFPUy9WUykuCi0gICAg ICogQXZvaWQgdGhlIGNvbnN0cnVjdGlvbiAqKytwICh0aGUgb3JkZXIgb2YgZXZhbHVhdGlvbiB2 YXJpZXM7IGl0Ci0gICAgICAgc2hvdWxkbid0IGJ1dCBhdCBsZWFzdCBvbmUgY29tcGlsZXIgaGFk IGEgYnVnIHRoYXQgbWFkZSBtZSBpbmNsdWRlCi0gICAgICAgdGhpcyBpdGVtKS4KLSAgICAgKiBE b24ndCB1c2UgdHJpcGxlIGFzc2lnbm1lbnRzLCBsaWtlIGEgPSBiID0gYyA9IDA7IChvciBxdWFk cnVwbGUsCi0gICAgICAgZXRjKS4gU29tZSBjb21waWxlcnMgZ2VuZXJhdGUgYmFkIGNvZGUgZm9y IHRoZXNlLCBvciBjcmFzaCwgZXRjCi0gICAgICAgKHNvbWUgdmVyc2lvbiBvZiBERUMgQyBhcyBJ IHJlY2FsbCkuCi0gICAgICogU29tZSBjb21waWxlcnMgZG9uJ3QgYWxsb3cgc3RydWN0dXJlIG1l bWJlcnMgdG8gaGF2ZSB0aGUgc2FtZSBuYW1lcwotICAgICAgIGFzIG90aGVyIGlkZW50aWZpZXJz LiBUcnkgdG8gZ2l2ZSBzdHJ1Y3R1cmUgbWVtYmVycyB1bmlxdWUgbmFtZXMuCi0gICAgICogRG9u J3QgYXNzdW1lIGFueXRoaW5nIGFib3V0IG9yZGVyIG9mIGV2YWx1YXRpb24gaW4gYm9vbGVhbgot ICAgICAgIGV4cHJlc3Npb25zLCBvciB0aGF0IHRoZXkgd2lsbCBzdG9wIGVhcmx5IGlmIGEgcmVx dWlyZWQgY29uZGl0aW9uCi0gICAgICAgaXMgbm90IHRydWUsIGUuZy46Ci0gIGlmIChpID4gMCAm JiBwW2ktMV0gPT0gYmxhaCkKLQotICAgICAgIGNhbiBzdGlsbCBkdW1wIGNvcmUgaWYgaSA9PSAw IChob3BlZnVsbHkgdGhpcyBpcyBub3QgdHJ1ZSBvZiBhbnkKLSAgICAgICBtb2Rlcm4gY29tcGls ZXIsIGJ1dCBJIHdvdWxkIG5vdCBoYXZlIHNhaWQgdGhpcyBpZiBpdCBkaWQgbm90Ci0gICAgICAg YWN0dWFsbHkgaGFwcGVuIHNvbWV3aGVyZSkuCi0gICAgICogRG9uJ3QgaGF2ZSBhIHN3aXRjaCgp IHN0YXRlbWVudCB3aXRoIG5vIGNhc2VzIChlLmcuIGJlY2F1c2Ugb2YKLSAgICAgICAjaWZkZWZz KTsgdGhpcyBpcyBhIGZhdGFsIGVycm9yIGluIHNvbWUgY29tcGlsZXJzLgotICAgICAqIERvbid0 IHB1dCBsb3RzIG9mIGNvZGUgaW4gYSBzd2l0Y2ggY2FzZTsgbW92ZSBpdCBvdXQgdG8gYSBzZXBh cmF0ZQotICAgICAgIGZ1bmN0aW9uOyBzb21lIGNvbXBpbGVycyBydW4gb3V0IG9mIG1lbW9yeSB3 aGVuIHByZXNlbnRlZCB3aXRoIGEKLSAgICAgICBodWdlIHN3aXRjaCgpIHN0YXRlbWVudCAtLSBp dCdzIG5vdCB0aGUgbnVtYmVyIG9mIGNhc2VzIHRoYXQKLSAgICAgICBtYXR0ZXJzOyBpdCdzIHRo ZSBvdmVyYWxsIGFtb3VudCBvZiBjb2RlLgotICAgICAqIFNvbWUgY29tcGlsZXJzIG1pZ2h0IGFs c28gbGltaXQgdGhlIG51bWJlciBvZiBzd2l0Y2goKSBjYXNlcywgZS5nLgotICAgICAgIHRvIDI1 NC4KLSAgICAgKiBEb24ndCBwdXQgYW55dGhpbmcgYmV0d2VlbiAic3dpdGNoKCkgeyIgYW5kICJj YXNlOiIgLS0gc3dpdGNoCi0gICAgICAgYmxvY2tzIGFyZSBub3QgbGlrZSBvdGhlciBibG9ja3Mu Ci0gICAgICogRG9uJ3QganVtcCBpbnRvIG9yIG91dCBvZiBzd2l0Y2hlcy4KLSAgICAgKiBEb24n dCBtYWtlIGNoYXJhY3Rlci1zdHJpbmcgY29uc3RhbnRzIGxvbmdlciB0aGFuIGFib3V0IDI1MCBi eXRlcy4KLSAgICAgICBMb25nZXIgc3RyaW5ncyBzaG91bGQgYmUgYnJva2VuIHVwIGludG8gYXJy YXlzIG9mIHN0cmluZ3MuCi0gICAgICogRG9uJ3Qgd3JpdGUgaW50byBjaGFyYWN0ZXItc3RyaW5n IGNvbnN0YW50cyAob2J2aW91c2x5KS4gRXZlbiB3aGVuCi0gICAgICAgeW91IGtub3cgeW91IGFy ZSBub3Qgd3JpdGluZyBwYXN0IHRoZSBlbmQ7IHRoZSBjb21waWxlciBvciBsaW5rZXIKLSAgICAg ICBtaWdodCBoYXZlIHB1dCB0aGVtIGludG8gcmVhZC1vbmx5IGFuZC9vciBzaGFyZWQgbWVtb3J5 LCBhbmQvb3IKLSAgICAgICBjb2FsZXNjZWQgbXVsdGlwbGUgZXF1YWwgY29uc3RhbnRzIHNvIGlm IHlvdSBjaGFuZ2Ugb25lIHlvdSBjaGFuZ2UKLSAgICAgICB0aGVtIGFsbC4KLSAgICAgKiBEb24n dCBkZXBlbmQgb24gJ1xyJyBiZWluZyBjYXJyaWFnZSByZXR1cm4uCi0gICAgICogRG9uJ3QgZGVw ZW5kIG9uICdcbicgYmVpbmcgbGluZWZlZWQgb3IgZm9yIHRoYXQgbWF0dGVyIGFueSBTSU5HTEUK LSAgICAgICBjaGFyYWN0ZXIuCi0gICAgICogRG9uJ3QgZGVwZW5kIG9uICdccicgYW5kICdcbicg YmVpbmcgZGlmZmVyZW50IChlLmcuIGFzIHNlcGFyYXRlCi0gICAgICAgc3dpdGNoKCkgY2FzZXMp LgotICAgICAqIEluIG90aGVyIHdvcmRzLCBkb24ndCB1c2UgXG4gb3IgXHIgdG8gc3RhbmQgZm9y IHNwZWNpZmljCi0gICAgICAgY2hhcmFjdGVyczsgdXNlIFwwMTIgYW5kIFwwMTUgaW5zdGVhZC4K LSAgICAgKiBEb24ndCBjb2RlIGZvciAiYnV6endvcmQgMS4wIGNvbXBsaWFuY2UiLCB1bmxlc3Mg ImJ1enp3b3JkIiBpcyBLJlIKLSAgICAgICBhbmQgIjEuMCIgaXMgdGhlIGZpcnN0IGVkaXRpb24u Ci0gICAgICogRG9uJ3QgdXNlIG9yIGRlcGVuZCBvbiBhbnl0aGluZ190IChzaXplX3QsIHBpZF90 LCBldGMpLCBleGNlcHQKLSAgICAgICB0aW1lX3QsIHdpdGhvdXQgI2lmZGVmIHByb3RlY3Rpb24g KHRpbWVfdCBpcyB0aGUgb25seSBvbmUgSSd2ZQotICAgICAgIGZvdW5kIHRoYXQgaXMgYWNjZXB0 ZWQgZXZlcnl3aGVyZSkuIFRoaXMgaXMgYSB0b3VnaCBvbmUgYmVjYXVzZSB0aGUKLSAgICAgICBz YW1lIGZ1bmN0aW9uIG1pZ2h0IHJlcXVpcmUgKHNheSkgYSBzaXplX3QgYXJnIG9uIG9uZSBwbGF0 Zm9ybSwKLSAgICAgICB3aGVyZWFzIHNpemVfdCBpcyB1bmhlYXJkIG9mIG9uIGFub3RoZXI7IG9y IHdvcnNlLCBpdCBtaWdodCByZXF1aXJlCi0gICAgICAgYSB0b3RhbGx5IGRpZmZlcmVudCBkYXRh IHR5cGUsIGxpa2UgaW50IG9yIGxvbmcgb3Igc29tZSBvdGhlcgotICAgICAgIHR5cGVkZWYnZCB0 aGluZy4gSXQgaGFzIG9mdGVuIHByb3ZlZCBuZWNlc3NhcnkgdG8gZGVmaW5lIGEgc3ltYm9sCi0g ICAgICAgdG8gc3RhbmQgZm9yIHRoZSB0eXBlIG9mIGEgcGFydGljdWxhciBhcmd1bWVudCB0byBh IHBhcnRpY3VsYXIKLSAgICAgICBsaWJyYXJ5IG9yIHN5c3RlbSBmdW5jdGlvbiB0byBnZXQgYXJv dW5kIHRoaXMgcHJvYmxlbS4KLSAgICAgKiBEb24ndCB1c2Ugb3IgZGVwZW5kIG9uIGludGVybmF0 aW9uYWxpemF0aW9uICgiaTE4biIpIGZlYXR1cmVzLAotICAgICAgIHdjaGFyX3QsIGxvY2FsZXMs IGV0YywgaW4gcG9ydGFibGUgY29kZTsgdGhleSBhcmUgbm90IHBvcnRhYmxlLgotICAgICAgIEFu eXdheSwgbG9jYWxlcyBhcmUgbm90IHRoZSByaWdodCBtb2RlbCBmb3IgS2VybWl0J3MKLSAgICAg ICBtdWx0aS1jaGFyYWN0ZXItc2V0IHN1cHBvcnQuIEtlcm1pdCBkb2VzIGFsbCBjaGFyYWN0ZXIt c2V0Ci0gICAgICAgY29udmVyc2lvbiBpdHNlbGYgYW5kIGRvZXMgbm90IHVzZSBhbnkgZXh0ZXJu YWwgbGlicmFyaWVzIG9yCi0gICAgICAgZnVuY3Rpb25zLgotICAgICAqIEluIHBhcnRpY3VsYXIs IGRvbid0IHVzZSBhbnkgbGlicmFyeSBmdW5jdGlvbnMgdGhhdCBkZWFsIHdpdGggd2lkZQotICAg ICAgIGNoYXJhY3RlcnMgb3IgVW5pY29kZSBpbiBhbnkgZm9ybS4gVGhlc2UgYXJlIG5vdCBvbmx5 IG5vbnBvcnRhYmxlLAotICAgICAgIGJ1dCBhIGNvbnN0YW50bHkgc2hpZnRpbmcgdGFyZ2V0IChl LmcuIHRoZSBvbmVzIGluIGdsaWJjKS4KLSAgICAgKiBEb24ndCBtYWtlIGFueSBhc3N1bXB0aW9u IGFib3V0IHNpZ25hbCBoYW5kbGVyIHR5cGUuIEl0IGNhbiBiZQotICAgICAgIHZvaWQsIGludCwg bG9uZywgb3IgYW55dGhpbmcgZWxzZS4gQWx3YXlzIGRlY2xhcmUgc2lnbmFsIGhhbmRsZXJzCi0g ICAgICAgYXMgU0lHVFlQIChzZWUgZGVmaW5pdGlvbiBpbiBja2NkZWIuaCBhbmQgYXVnbWVudCBp dCBpZiBuZWNlc3NhcnkpCi0gICAgICAgYW5kIGFsd2F5cyB1c2UgU0lHUkVUVVJOIGF0IGV4aXQg cG9pbnRzIGZyb20gc2lnbmFsIGhhbmRsZXJzLgotICAgICAqIFNpZ25hbHMgc2hvdWxkIGFsd2F5 cyBiZSByZS1hcm1lZCB0byBiZSB1c2VkIGFnYWluICh0aGlzIGJhcmVseQotICAgICAgIHNjcmF0 Y2hlcyB0aGUgc3VyZmFjZSAtLSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBCU0QvVjcgYW5kIFN5 c3RlbQotICAgICAgIFYgYW5kIFBPU0lYIHNpZ25hbCBoYW5kbGluZyBhcmUgbnVtZXJvdXMsIGFu ZCBzb21lIHBsYXRmb3JtcyBkbyBub3QKLSAgICAgICBldmVuIHN1cHBvcnQgc2lnbmFscywgYWxh cm1zLCBvciBsb25nam1wcyBjb3JyZWN0bHkgb3IgYXQgYWxsIC0tCi0gICAgICAgYXZvaWQgYWxs IG9mIHRoaXMgaWYgeW91IGNhbikuCi0gICAgICogT24gdGhlIG90aGVyIGhhbmQsIGRvbid0IGFz c3VtZSB0aGF0IHNpZ25hbHMgYXJlIGRpc2FybWVkIGFmdGVyCi0gICAgICAgYmVpbmcgcmFpc2Vk LiBJbiBzb21lIHBsYXRmb3JtcyB5b3UgaGF2ZSB0byByZS1hcm0gdGhlbSwgaW4gb3RoZXJzCi0g ICAgICAgdGhleSBzdGF5IGFybWVkLgotICAgICAqIERvbid0IGNhbGwgbWFsbG9jKCkgYW5kIGZy aWVuZHMgZnJvbSBhIHNpZ25hbCBoYW5kbGVyOyBkb24ndCBkbwotICAgICAgIGFueXRoaW5nIGJ1 dCBzZXR0aW5nIGludGVnZXIgZ2xvYmFsIHZhcmlhYmxlcyBpbiBhIHNpZ25hbCBoYW5kbGVyLgot ICAgICAqIG1hbGxvYygpIGRvZXMgbm90IGluaXRpYWxpemUgYWxsb2NhdGVkIG1lbW9yeSAtLSBp dCBuZXZlciBzYWlkIGl0Ci0gICAgICAgZGlkLiBEb24ndCBleHBlY3QgaXQgdG8gYmUgYWxsIDAn cy4KLSAgICAgKiBEaWQgWW91IEtub3c6IG1hbGxvYygpIGNhbiBzdWNjZWVkIGFuZCB0aGUgcHJv Z3JhbSBjYW4gc3RpbGwgZHVtcAotICAgICAgIGNvcmUgbGF0ZXIgd2hlbiBpdCBhdHRlbXB0cyB0 byB1c2UgdGhlIG1hbGxvYydkIG1lbW9yeT8gKFRoaXMKLSAgICAgICBoYXBwZW5zIHdoZW4gYWxs b2NhdGlvbiBpcyBkZWZlcnJlZCB1bnRpbCB1c2UgYW5kIHN3YXAgc3BhY2UgaXMKLSAgICAgICBm dWxsLikKLSAgICAgKiBtZW1zZXQoKSwgbWVtbW92ZSgpLCBhbmQgbWVtY3B5KCkgYXJlIG5vdCBw b3J0YWJsZSwgZG9uJ3QgdXNlIHRoZW0KLSAgICAgICB3aXRob3V0IHByb3RlY3RpbmcgdGhlbSBp biBpZmRlZnMgKHdlIGhhdmUgVVNFX01FTUNQWSBmb3IgdGhpcykuCi0gICAgICAgYnplcm8oKS9i Y29weSgpIHRvbywgZXhjZXB0IHdlJ3JlIGd1YXJhbnRlZWQgdG8gaGF2ZQotICAgICAgIGJ6ZXJv KCkvYmNvcHkoKSB3aGVuIHVzaW5nIHRoZSBzb2NrZXRzIGxpYnJhcnkgKG5vdCByZWFsbHkpLiBT ZWUKLSAgICAgICBleGFtcGxlcyBpbiB0aGUgc291cmNlLgotICAgICAqIERvbid0IGFzc3VtZSB0 aGF0IHN0cm5jcHkoKSBzdG9wcyBvbiB0aGUgZmlyc3QgbnVsbCBieXRlIC0tIG1vc3QKLSAgICAg ICB2ZXJzaW9ucyBhbHdheXMgY29weSB0aGUgbnVtYmVyIG9mIGJ5dGVzIGdpdmVuIGluIGFyZyAz LCBwYWRkaW5nCi0gICAgICAgb3V0IHdpdGggMCdzIGFuZCBvdmVyd3JpdGluZyB3aGF0ZXZlciB3 YXMgdGhlcmUgYmVmb3JlLiBVc2UKLSAgICAgICBDLUtlcm1pdCBja3N0cm5jcHkoKSBpZiB5b3Ug d2FudCBwcmVkaWN0YWJsZSBub24tcGFkZGluZyBiZWhhdmlvciwKLSAgICAgICBndWFyYW50ZWVk IE5VTC10ZXJtaW5hdGlvbiwgYW5kIGEgdXNlZnVsIHJldHVybiBjb2RlLgotICAgICAqIERJRCBZ T1UgS05PVy4uIHRoYXQgc29tZSB2ZXJzaW9ucyBvZiBpbmV0X2JsYWgoKSByb3V0aW5lcyByZXR1 cm4gSVAKLSAgICAgICBhZGRyZXNzZXMgaW4gbmV0d29yayBieXRlIG9yZGVyLCB3aGlsZSBvdGhl cnMgcmV0dXJuIHRoZW0gbG9jYWwKLSAgICAgICBtYWNoaW5lIGJ5dGUgb3JkZXI/IFNvIHBhc3Np bmcgdGhlbSB0byBudG9ocygpIG9yIHdoYXRldmVyIGlzIG5vdAotICAgICAgIGFsd2F5cyB0aGUg cmlnaHQgdGhpbmcgdG8gZG8uCi0gICAgICogRG9uJ3QgdXNlIEFOU0ktZm9ybWF0IGZ1bmN0aW9u IGRlY2xhcmF0aW9ucyB3aXRob3V0ICNpZmRlZgotICAgICAgIENLX0FOU0lDLCBhbmQgYWx3YXlz IHByb3ZpZGUgYW4gI2Vsc2UgZm9yIHRoZSBub24tQU5TSSBjYXNlLgotICAgICAqIFVzZSB0aGUg S2VybWl0IF9QUk9UT1RZUCgpIG1hY3JvIGZvciBkZWNsYXJpbmcgZnVuY3Rpb24gcHJvdG90eXBl czsKLSAgICAgICBpdCB3b3JrcyBpbiBib3RoIHRoZSBBTlNJIGFuZCBub24tQU5TSSBjYXNlcy4K LSAgICAgKiBEb24ndCBkZXBlbmQgb24gYW55IG90aGVyIEFOU0kgcHJlcHJvY2Vzc29yIGZlYXR1 cmVzIGxpa2UgInBhc3RpbmciCi0gICAgICAgLS0gdGhleSBhcmUgb2Z0ZW4gbWlzc2luZyBvciBu b25vcGVyYXRpb25hbC4KLSAgICAgKiBEb24ndCBhc3N1bWUgYW55IEMrKyBzeW50YXggb3Igc2Vt YW50aWNzLgotICAgICAqIERvbid0IHVzZSAvLyBhcyBhIGNvbW1lbnQgaW50cm9kdWNlci4gQyBp cyBub3QgQysrLgotICAgICAqIERvbid0IGRlY2xhcmUgYSBzdHJpbmcgYXMgImNoYXIgZm9vW10i IGluIG9uZSBtb2R1bGUgYW5kICJleHRlcm4KLSAgICAgICBjaGFyICogZm9vIiBpbiBhbm90aGVy LCBvciB2aWNlLXZlcnNhOiB0aGlzIGNhdXNlcyBjb3JlIGR1bXBzLgotICAgICAqIFdpdGggY29t cGlsZXIgbWFrZXJzIGZhbGxpbmcgYWxsIG92ZXIgdGhlbXNlbHZlcyB0cnlpbmcgdG8gb3V0ZG8K LSAgICAgICBlYWNoIG90aGVyIGluIEFOU0kgc3RyaWN0bmVzcywgaXQgaGFzIGJlY29tZSBpbmNy ZWFzaW5nbHkgbmVjZXNzYXJ5Ci0gICAgICAgdG8gY2FzdCBFVkVSWVRISU5HLiBFc3BlY2lhbGx5 IGNoYXIgdnMgdW5zaWduZWQgY2hhci4gV2UgbmVlZCB0bwotICAgICAgIHVzZSB1bnNpZ25lZCBj aGFycyBpZiB3ZSB3YW50IHRvIGRlYWwgd2l0aCA4LWJpdCBjaGFyYWN0ZXIgc2V0cywKLSAgICAg ICBidXQgbW9zdCBjaGFyYWN0ZXItIGFuZCBzdHJpbmctb3JpZW50ZWQgQVBJcyB3YW50IChzaWdu ZWQpIGNoYXIKLSAgICAgICBhcmd1bWVudHMsIHNvIGV4cGxpY2l0IGNhc3RzIGFyZSBuZWNlc3Nh cnkuIEl0IHdvdWxkIGJlIG5pY2UgaWYKLSAgICAgICBldmVyeSBjb21waWxlciBoYWQgYSAtZnVu c2lnbmVkLWNoYXIgb3B0aW9uIChhcyBnY2MgZG9lcyksIGJ1dCB0aGV5Ci0gICAgICAgZG9uJ3Qu Ci0gICAgICogYVt4XSwgd2hlcmUgeCBpcyBhbiB1bnNpZ25lZCBjaGFyLCBjYW4gcHJvZHVjZSBh IHdpbGQgbWVtb3J5Ci0gICAgICAgcmVmZXJlbmNlIGlmIHgsIHdoZW4gcHJvbW90ZWQgdG8gYW4g aW50LCBiZWNvbWVzIG5lZ2F0aXZlLiBDYXN0IGl0Ci0gICAgICAgdG8gKHVuc2lnbmVkKSwgZXZl biB0aG91Z2ggaXQgQUxSRUFEWSBJUyB1bnNpZ25lZC4KLSAgICAgKiBCZSBjYXJlZnVsIGhvdyB5 b3UgZGVjbGFyZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGNoYXIgb3IgbG9uZwotICAgICAgIGFyZ3Vt ZW50czsgZm9yIEFOU0kgY29tcGlsZXJzIHlvdSBNVVNUIHVzZSBBTlNJIGRlY2xhcmF0aW9ucyB0 bwotICAgICAgIGF2b2lkIHByb21vdGlvbiBwcm9ibGVtcywgYnV0IHlvdSBjYW4ndCB1c2UgQU5T SSBkZWNsYXJhdGlvbnMgd2l0aAotICAgICAgIG5vbi1BTlNJIGNvbXBpbGVycy4gVGh1cyBkZWNs YXJhdGlvbnMgb2Ygc3VjaCBmdW5jdGlvbnMgbXVzdCBiZQotICAgICAgIGhpZGVvdXNseSBlbnR3 aW5lZCBpbiAjaWZkZWZzLiBFeGFtcGxlOgotICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAg IC8qICBQdXQgY2hhcmFjdGVyIGluIHNlcnZlciBjb21tYW5kIGJ1ZmZlciAgKi8KLSAgI2lmZGVm IENLX0FOU0lDCi0gIHB1dHNydihjaGFyIGMpCi0gICNlbHNlCi0gIHB1dHNydihjKSBjaGFyIGM7 Ci0gICNlbmRpZiAvKiBDS19BTlNJQyAqLwotICAvKiBwdXRzcnYgKi8gewotICAgICAgKnNydnB0 cisrID0gYzsKLSAgICAgICpzcnZwdHIgPSAnXDAnOyAgICAgICAgICAgLyogTWFrZSBzdXJlIGJ1 ZmZlciBpcyBudWxsLXRlcm1pbmF0ZWQgKi8KLSAgICAgIHJldHVybigwKTsKLSAgfQotCi0gICAg ICogQmUgY2FyZWZ1bCBob3cgeW91IHJldHVybiBjaGFyYWN0ZXJzIGZyb20gZnVuY3Rpb25zIHRo YXQgcmV0dXJuIGludAotICAgICAgIHZhbHVlcyAtLSAiZ2V0Yy1saWtlIGZ1bmN0aW9ucyIgLS0g aW4gdGhlIEFOU0kgd29ybGQuIFVubGVzcyB5b3UKLSAgICAgICBleHBsaWNpdGx5IGNhc3QgdGhl IHJldHVybiB2YWx1ZSB0byAodW5zaWduZWQpLCBpdCBpcyBsaWtlbHkgdG8gYmUKLSAgICAgICAi cHJvbW90ZWQiIHRvIGFuIGludCBhbmQgaGF2ZSBpdHMgc2lnbiBleHRlbmRlZC4KLSAgICAgKiBB dCBsZWFzdCBvbmUgY29tcGlsZXIgKHRoZSBvbmUgb24gREVDIE9TRi8xIDEuMykgdHJlYXRzICIv KiIgYW5kCi0gICAgICAgIiovIiB3aXRoaW4gc3RyaW5nIGNvbnN0YW50cyBhcyBjb21tZW50IGJl Z2luIGFuZCBlbmQuIE5vIGFtb3VudCBvZgotICAgICAgICNpZmRlZnMgd2lsbCBnZXQgYXJvdW5k IHRoaXMgb25lLiBZb3Ugc2ltcGx5IGNhbid0IHB1dCB0aGVzZQotICAgICAgIHNlcXVlbmNlcyBp biBhIHN0cmluZyBjb25zdGFudCwgZS5nLiAiL3Vzci9sb2NhbC9kb2MvKi4qIi4KLSAgICAgKiBB dm9pZCBwdXR0aW5nIG11bHRpcGxlIG1hY3JvIHJlZmVyZW5jZXMgb24gYSBzaW5nbGUgbGluZSwg ZS5nLjoKLSAgcHV0Y2hhcihCUyk7IHB1dGNoYXIoU1ApOyBwdXRjaGFyKEJTKQotCi0gICBUaGlz IG92ZXJmbG93cyB0aGUgQ1BQIG91dHB1dCBidWZmZXIgb2YgbW9yZSB0aGFuIGEgZmV3IEMgcHJl cHJvY2Vzc29ycwotICAgKHRoaXMgaGFwcGVuZWQsIGZvciBleGFtcGxlLCB3aXRoIFN1bk9TIDQu MSBjYywgd2hpY2ggZXZpZGVudGx5IGhhcyBhCi0gICAxSyBtYWNybyBleHBhbnNpb24gYnVmZmVy KS4KLQotICAgQy1LZXJtaXQgbmVlZHMgY29uc3RhbnQgYWRqdXN0bWVudCB0byBuZXcgT1MgYW5k IGNvbXBpbGVyIHJlbGVhc2VzLgotICAgRXZlcnkgbmV3IE9TIHJlbGVhc2Ugc2h1ZmZsZXMgaGVh ZGVyIGZpbGVzIG9yIHRoZWlyIGNvbnRlbnRzLCBvcgotICAgcHJvdG90eXBlcywgb3IgZGF0YSB0 eXBlcywgb3IgbGV2ZWxzIG9mIEFOU0kgc3RyaWN0bmVzcywgZXRjLiBFdmVyeQotICAgdGltZSB5 b3UgbWFrZSBhbiBhZGp1c3RtZW50IHRvIHJlbW92ZSBhIG5ldyBjb21waWxhdGlvbiBlcnJvciwg QkUgVkVSWQotICAgQ0FSRUZVTCB0byAjaWZkZWYgaXQgb24gYSBzeW1ib2wgdW5pcXVlIHRvIHRo ZSBuZXcgY29uZmlndXJhdGlvbiBzbwotICAgdGhhdCB0aGUgcHJldmlvdXMgY29uZmlndXJhdGlv biAoYW5kIGFsbCBvdGhlciBjb25maWd1cmF0aW9ucyBvbiBhbGwKLSAgIG90aGVyIHBsYXRmb3Jt cykgcmVtYWluIGFzIGJlZm9yZS4KLQotICAgQXNzdW1lIG5vdGhpbmcuIERvbid0IGFzc3VtZSBo ZWFkZXIgZmlsZXMgYXJlIHdoZXJlIHRoZXkgYXJlIHN1cHBvc2VkCi0gICB0byBiZSwgdGhhdCB0 aGV5IGNvbnRhaW4gd2hhdCB5b3UgdGhpbmsgdGhleSBjb250YWluLCB0aGF0IHRoZXkgZGVmaW5l Ci0gICBzcGVjaWZpYyBzeW1ib2xzIHRvIGhhdmUgY2VydGFpbiB2YWx1ZXMgLS0gb3IgZGVmaW5l IHRoZW0gYXQgYWxsISBEb24ndAotICAgYXNzdW1lIHN5c3RlbSBoZWFkZXIgZmlsZXMgcHJvdGVj dCB0aGVtc2VsdmVzIGFnYWluc3QgbXVsdGlwbGUKLSAgIGluY2x1c2lvbi4gRG9uJ3QgYXNzdW1l IHRoYXQgcGFydGljdWxhciBzeXN0ZW0gb3IgbGlicmFyeSBjYWxscyBhcmUKLSAgIGF2YWlsYWJs ZSwgb3IgdGhhdCB0aGUgYXJndW1lbnRzIGFyZSB3aGF0IHlvdSB0aGluayB0aGV5IGFyZSAtLSBv cmRlciwKLSAgIGRhdGEgdHlwZSwgcGFzc2VkIGJ5IHJlZmVyZW5jZSB2cyB2YWx1ZSwgZXRjLiBC ZSBjb25zZXJ2YXRpdmUgd2hlbgotICAgYXR0ZW1wdGluZyB0byB3cml0ZSBwb3J0YWJsZSBjb2Rl LiBBdm9pZCBhbGwgYWR2YW5jZWQgZmVhdHVyZXMuCi0KLSAgIElmIHlvdSBzZWUgc29tZXRoaW5n IHRoYXQgZG9lcyBub3QgbWFrZSBzZW5zZSwgZG9uJ3QgYXNzdW1lIGl0J3MgYQotICAgbWlzdGFr ZSAtLSBpdCBtaWdodCBiZSB0aGVyZSBmb3IgYSByZWFzb24sIGFuZCBjaGFuZ2luZyBpdCBvciBy ZW1vdmluZwotICAgaXMgbGlrZWx5IHRvIGNhdXNlIGNvbXBpbGF0aW9uLCBsaW5raW5nLCBvciBy dW50aW1lIGZhaWx1cmVzIHNvbWV0aW1lLAotICAgc29tZXdoZXJlLiBTb21lIGh1Z2UgcGVyY2Vu dGFnZSBvZiB0aGUgY29kZSwgZXNwZWNpYWxseSBpbiB0aGUKLSAgIHBsYXRmb3JtLWRlcGVuZGVu dCBtb2R1bGVzLCBpcyB3b3JrYXJvdW5kcyBmb3IgY29tcGlsZXIsIGxpbmtlciwgb3IgQVBJCi0g ICBidWdzLgotCi0gICBCdXQgZmluYWxseS4uLiBmZWVsIGZyZWUgdG8gdmlvbGF0ZSBhbnkgb3Ig YWxsIG9mIHRoZXNlIHJ1bGVzIGluCi0gICBwbGF0Zm9ybS1zcGVjaWZpYyBtb2R1bGVzIGZvciBl bnZpcm9ubWVudHMgaW4gd2hpY2ggdGhlIHJ1bGVzIGFyZQotICAgY2VydGFpbiBub3QgdG8gYXBw bHkuIEZvciBleGFtcGxlLCBpbiBWTVMtc3BlY2lmaWMgY29kZSwgaXQgaXMgT0sgdG8KLSAgIHVz ZSAjaWYsIGJlY2F1c2UgVkFYIEMsIERFQyBDLCBhbmQgVk1TIEdDQyBhbGwgc3VwcG9ydCBpdC4K LQotICAgWyBbNTFdQ29udGVudHMgXSBbIFs1Ml1DLUtlcm1pdCBdIFsgWzUzXUtlcm1pdCBIb21l IF0KLQotMy4xLiBNZW1vcnkgTGVha3MKLQotICAgVGhlIEMgbGFuZ3VhZ2UgYW5kIHN0YW5kYXJk IEMgbGlicmFyeSBhcmUgbm90b3Jpb3VzbHkgaW5hZGVxdWF0ZSBhbmQKLSAgIHVuc2FmZS4gU3Ry aW5ncyBhcmUgYXJyYXlzIG9mIGNoYXJhY3RlcnMsIHVzdWFsbHkgcmVmZXJlbmNlZCB0aHJvdWdo Ci0gICBwb2ludGVycy4gVGhlcmUgaXMgbm8gbmF0aXZlIHN0cmluZyBkYXRhdHlwZS4gQnVmZmVy cyBhcmUgZml4ZWQgc2l6ZSwKLSAgIGFuZCBDIHByb3ZpZGVzIG5vIHJ1bnRpbWUgYm91bmRzIGNo ZWNraW5nLCB0aHVzIGFsbG93aW5nIG92ZXJ3cml0aW5nIG9mCi0gICBvdGhlciBkYXRhIG9yIGV2 ZW4gcHJvZ3JhbSBjb2RlLiBXaXRoIHRoZSBwb3B1bGFyaXphdGlvbiBvZiB0aGUKLSAgIEludGVy bmV0LCB0aGUgImJ1ZmZlciBleHBsb2l0IiBoYXMgYmVjb21lIGEgcHJlZmVycmVkIG1ldGhvZCBm b3IKLSAgIGhhY2tlcnMgdG8gaGlqYWNrIHByaXZpbGVnZWQgcHJvZ3JhbXM7IGxvbmcgZGF0YSBz dHJpbmdzIGFyZSBmZWQgdG8gYQotICAgcHJvZ3JhbSBpbiBob3BlcyB0aGF0IGl0IHVzZXMgdW5z YWZlIEMgbGlicmFyeSBjYWxscyBzdWNoIGFzIHN0cmNweSgpCi0gICBvciBzcHJpbnRmKCkgdG8g Y29weSBzdHJpbmdzIGludG8gYXV0b21hdGljIGFycmF5cywgdGh1cyBvdmVyd3JpdGluZwotICAg dGhlIGNhbGwgc3RhY2ssIGFuZCB0aGVyZWZvcmUgdGhlIHJvdXRpbmUncyByZXR1cm4gYWRkcmVz cy4gV2hlbiBzdWNoIGEKLSAgIGhvbGUgaXMgZGlzY292ZXJlZCwgYSAic3RyaW5nIiBjYW4gYmUg Y29uc3RydWN0ZWQgdGhhdCBjb250YWlucyBtYWNoaW5lCi0gICBjb2RlIHRvIGhpamFjayB0aGUg cHJvZ3JhbSdzIHByaXZpbGVnZXMgYW5kIHBlbmV0cmF0ZSB0aGUgc3lzdGVtLgotCi0gICBUaGlz IHByb2JsZW0gaXMgcGFydGlhbGx5IGFkZHJlc3NlZCBieSB0aGUgc3Rybi4uLigpIHJvdXRpbmVz LCB3aGljaAotICAgc2hvdWxkIGFsd2F5cyBiZSB1c2VkIGluIHByZWZlcmVuY2UgdG8gdGhlaXIg c3RyLi4uKCkgZXF1aXZhbGVudHMKLSAgIChleGNlcHQgd2hlbiB0aGUgY29weSBvcGVyYXRpb24g aGFzIGFscmVhZHkgYmVlbiBwcmVjaGVja2VkLCBvciB0aGVyZQotICAgaXMgYSBnb29kIHJlYXNv biBmb3Igbm90IHVzaW5nIHRoZW0sIGUuZy4gdGhlIHNvbWV0aW1lcyB1bmRlc2lyYWJsZQotICAg c2lkZSBlZmZlY3Qgb2Ygc3RybmNweSgpIHplcm9pbmcgdGhlIHJlbWFpbmRlciBvZiB0aGUgYnVm ZmVyKS4gVGhlIG1vc3QKLSAgIGdhcGluZyB3aG9sZSwgaG93ZXZlciwgaXMgc3ByaW50ZigpLCB3 aGljaCBwZXJmb3JtcyBubyBsZW5ndGggY2hlY2tpbmcKLSAgIG9uIGl0cyBkZXN0aW5hdGlvbiBi dWZmZXIsIGFuZCBpcyBub3QgZWFzeSB0byByZXBsYWNlLiBBbHRob3VnaAotICAgc25wcmludGYo KSByb3V0aW5lcyBhcmUgc3RhcnRpbmcgdG8gYXBwZWFyLCB0aGV5IGFyZSBub3QgeWV0Ci0gICB3 aWRlc3ByZWFkLCBhbmQgY2VydGFpbmx5IG5vdCB1bml2ZXJzYWwsIG5vciBhcmUgdGhleSBlc3Bl Y2lhbGx5Ci0gICBwb3J0YWJsZSwgb3IgZXZlbiBmdWxsLWZlYXR1cmVkLgotCi0gICBGb3IgdGhl c2UgcmVhc29ucywgd2UgaGF2ZSBzdGFydGVkIHRvIGJ1aWxkIHVwIG91ciBvd24gbGl0dGxlIGxp YnJhcnkKLSAgIG9mIEMgTGlicmFyeSByZXBsYWNlbWVudHMsIGNrY2xpYi5bY2hdLiBUaGVzZSBh cmUgc2FmZSBhbmQgaGlnaGx5Ci0gICBwb3J0YWJsZSBwcmltaXRpdmVzIGZvciBtZW1vcnkgbWFu YWdlbWVudCBhbmQgc3RyaW5nIG1hbmlwdWxhdGlvbiwgc3VjaAotICAgYXM6Ci0KLSAgIGNrc3Ry bmNweSgpCi0gICAgICAgICAgTGlrZSBzdHJuY3B5IGJ1dCByZXR1cm5zIGEgdXNlZnVsIHZhbHVl LCBkb2Vzbid0IHplcm8gYnVmZmVyLgotCi0gICBja2l0b2EoKQotICAgICAgICAgIE9wcG9zaXRl IG9mIGF0b2koKQotCi0gICBja2x0b2EoKQotICAgICAgICAgIE9wcG9zaXRlIG9mIGF0b2woKQot Ci0gICBja2N0b2EoKQotICAgICAgICAgIFJldHVybnMgY2hhcmFjdGVyIGFzIHN0cmluZwotCi0g ICBja21ha21zZygpCi0gICAgICAgICAgVXNlZCB3aXRoIGNrP3RvPygpIGFzIGEgc2FmZSBzcHJp bnRmKCkgcmVwbGFjZW1lbnQgZm9yIHVwIHRvIDQKLSAgICAgICAgICBpdGVtcwotCi0gICBja21h a3htc2coKQotICAgICAgICAgIExpa2UgY2ttYWttc2coKSBidXQgYWNjZXB0cyB1cCB0byAxMiBp dGVtcwotCi0gICBNb3JlIGFib3V0IGxpYnJhcnkgZnVuY3Rpb25zIGluIFs1NF1TZWN0aW9uIDQu QS4KLQotICAgWyBbNTVdQ29udGVudHMgXSBbIFs1Nl1DLUtlcm1pdCBdIFsgWzU3XUtlcm1pdCBI b21lIF0KLQotMy4yLiBUaGUgImNoYXIiIHZzICJ1bnNpZ25lZCBjaGFyIiBEaWxlbW1hCi0KLSAg IFRoaXMgaXMgb25lIG9mIHRoZSBtb3N0IGFnZ3JhdmF0aW5nIGFuZCB2ZXhpbmcgY2hhcmFjdGVy aXN0aWNzIG9mIHRoZSBDCi0gICBsYW5ndWFnZS4gQnkgZGVzaWduLCBjaGFycyAoYW5kIGNoYXIg KidzKSBhcmUgU0lHTkVELiBCdXQgaW4gdGhlIG1vZGVybgotICAgZXJhLCBob3dldmVyLCB3ZSBu ZWVkIHRvIHByb2Nlc3MgY2hhcmFjdGVycyB0aGF0IGNhbiBoYXZlIChvciBpbmNsdWRlKQotICAg OC1iaXQgdmFsdWVzLCBhcyBpbiB0aGUgSVNPIExhdGluLTEsIElCTSBDUCA4NTAsIG9yIFVURi04 IGNoYXJhY3RlcgotICAgc2V0cywgc28gdGhpcyBkYXRhIG11c3QgYmUgdHJlYXRlZCBhcyB1bnNp Z25lZC4gQnV0IHNvbWUgQyBjb21waWxlcnMKLSAgIChzdWNoIGFzIHRob3NlIGJhc2VkIG9uIHRo ZSBCZWxsIFVOSVggVjcgY29tcGlsZXIpIGRvIG5vdCBzdXBwb3J0Ci0gICAidW5zaWduZWQgY2hh ciIgYXMgYSBkYXRhIHR5cGUuIFRoZXJlZm9yZSB3ZSBoYXZlIHRoZSBtYWNybyBvciB0eXBlZGVm Ci0gICBDSEFSLCB3aGljaCB3ZSB1c2Ugd2hlbiB3ZSBuZWVkIGNoYXJzIHRvIGJlIHVuc2lnbmVk LCBidXQgd2hpY2gsCi0gICB1bmZvcnR1bmF0ZWx5LCByZXNvbHZlcyBpdHNlbGYgdG8gImNoYXIi IG9uIHRob3NlIGNvbXBpbGVycyB0aGF0IGRvbid0Ci0gICBzdXBwb3J0ICJ1bnNpZ25lZCBjaGFy Ii4gQU5EIFNPLi4uIFdlIGhhdmUgdG8gZG8gYSBsb3Qgb2YgZmlkZGxpbmcgYXQKLSAgIHJ1bnRp bWUgdG8gYXZvaWQgc2lnbiBleHRlbnNpb24gYW5kIHNvIGZvcnRoLgotCi0gICBTb21lIG1vZGVy biBjb21waWxlcnMgKGUuZy4gSUJNLCBERUMsIE1pY3Jvc29mdCkgaGF2ZSBvcHRpb25zIHRoYXQg c2F5Ci0gICAibWFrZSBhbGwgY2hhcnMgYmUgdW5zaWduZWQiIChlLmcuIEdDQyAiLWZ1bnNpZ25l ZC1jaGFyIikgYW5kIHdlIHVzZQotICAgdGhlbSB3aGVuIHRoZXkgYXJlIGF2YWlsYWJsZS4gT3Ro ZXIgY29tcGlsZXJzIGRvbid0IGhhdmUgdGhpcyBvcHRpb24sCi0gICBhbmQgYXQgdGhlIHNhbWUg dGltZSwgYXJlIGJlY29taW5nIGluY3JlYXNpbmdseSBzdHJpY3QgYWJvdXQgdHlwZQotICAgbWlz bWF0Y2hlcywgYW5kIHNwZXcgb3V0IHRvcnJlbnRzIG9mIHdhcm5pbmdzIHdoZW4gd2UgdXNlIGEg Q0hBUiB3aGVyZQotICAgYSBjaGFyIGlzIGV4cGVjdGVkLCBvciB2aWNlIHZlcnNhLiBXZSBmaXgg dGhlc2Ugb25lIGJ5IG9uZSB1c2luZyBjYXN0cywKLSAgIGFuZCB0aGUgY29kZSBiZWNvbWVzIGlu Y3JlYXNpbmdseSB1Z2x5LiBCdXQgdGhlcmUgcmVtYWlucyBhIHNlcmlvdXMKLSAgIHByb2JsZW0s IG5hbWVseSB0aGF0IGNlcnRhaW4gbGlicmFyeSBhbmQga2VybmVsIGZ1bmN0aW9ucyBoYXZlCi0g ICBhcmd1bWVudHMgdGhhdCBhcmUgZGVjbGFyZWQgYXMgc2lnbmVkIGNoYXJzIChvciBwb2ludGVy cyB0byB0aGVtKSwKLSAgIHdoZXJlYXMgb3VyIGNoYXJhY3RlciBkYXRhIGlzIHVuc2lnbmVkLiBG aW5lLCB3ZSBjYW4gY2FuIHVzZSBjYXN0cyBoZXJlCi0gICB0b28gLS0gYnV0IHdobyBrbm93cyB3 aGF0IGhhcHBlbnMgaW5zaWRlIHRoZXNlIHJvdXRpbmVzLgotCi0gICBbIFs1OF1Db250ZW50cyBd IFsgWzU5XUMtS2VybWl0IF0gWyBbNjBdS2VybWl0IEhvbWUgXQotCi00LiBNT0RVTEVTCi0KLSAg IFdoZW4gQy1LZXJtaXQgaXMgb24gdGhlIGZhciBlbmQgb2YgYSBjb25uZWN0aW9uLCBpdCBpcyBz YWlkIHRvIGJlIGluCi0gICByZW1vdGUgbW9kZS4gV2hlbiBDLUtlcm1pdCBoYXMgbWFkZSBhIGNv bm5lY3Rpb24gdG8gYW5vdGhlciBjb21wdXRlciwKLSAgIGl0IGlzIGluIGxvY2FsIG1vZGUuIChJ ZiBDLUtlcm1pdCBpcyAiaW4gdGhlIG1pZGRsZSIgb2YgYSBtdWx0aWhvcAotICAgY29ubmVjdGlv biwgaXQgaXMgc3RpbGwgaW4gbG9jYWwgbW9kZS4pCi0KLSAgIE9uIGFub3RoZXIgYXhpcywgQy1L ZXJtaXQgY2FuIGJlIGluIGFueSBvZiBzZXZlcmFsIG1ham9yIHN0YXRlczoKLQotICAgQ29tbWFu ZCBTdGF0ZQotICAgICAgICAgIFJlYWRpbmcgYW5kIHdyaXRpbmcgZnJvbSB0aGUgam9iJ3MgY29u dHJvbGxpbmcgdGVybWluYWwgb3IKLSAgICAgICAgICAiY29uc29sZSIuIEluIHRoaXMgbW9kZSwg YWxsIGkvbyBpcyBoYW5kbGVkIGJ5IHRoZSBHcm91cCBFCi0gICAgICAgICAgY29ueHh4KCkgKGNv bnNvbGUgaS9vKSByb3V0aW5lcy4KLQotICAgUHJvdG9jb2wgU3RhdGUKLSAgICAgICAgICBSZWFk aW5nIGFuZCB3cml0aW5nIGZyb20gdGhlIGNvbW11bmljYXRpb25zIGRldmljZS4gSW4gdGhpcwot ICAgICAgICAgIG1vZGUsIGFsbCBpL28gaXMgaGFuZGxlZCBieSB0aGUgR3JvdXAgRSB0dHh4eCgp ICh0ZXJtaW5hbCBpL28pCi0gICAgICAgICAgcm91dGluZXMuCi0KLSAgIFRlcm1pbmFsIFN0YXRl Ci0gICAgICAgICAgUmVhZGluZyBmcm9tIHRoZSBrZXlib2FyZCB3aXRoIGNvbnh4eCgpIHJvdXRp bmVzIGFuZCB3cml0aW5nIHRvCi0gICAgICAgICAgdGhlIGNvbW11bmljYXRpb25zIGRldmljZSB3 aXRoIHR0eHh4KCkgcm91dGluZXMgQU5EIHZpY2UtdmVyc2EuCi0KLSAgIFdoZW4gaW4gbG9jYWwg bW9kZSwgdGhlIGNvbnNvbGUgYW5kIGNvbW11bmljYXRpb25zIGRldmljZSBhcmUgZGlzdGluY3Qu Ci0gICBEdXJpbmcgZmlsZSB0cmFuc2ZlciwgS2VybWl0IG1heSBwdXQgdXAgYSBmaWxlLXRyYW5z ZmVyIGRpc3BsYXkgb24gdGhlCi0gICBjb25zb2xlIGFuZCBzYW1wbGUgdGhlIGNvbnNvbGUgZm9y IGludGVycnVwdGlvbiBzaWduYWxzLgotCi0gICBXaGVuIGluIHJlbW90ZSBtb2RlLCB0aGUgY29u c29sZSBhbmQgY29tbXVuaWNhdGlvbnMgZGV2aWNlIGFyZSB0aGUKLSAgIHNhbWUsIGFuZCB0aGVy ZWZvcmUgdGhlcmUgY2FuIGJlIG5vIGZpbGUtdHJhbnNmZXIgZGlzcGxheSBvbiB0aGUKLSAgIGNv bnNvbGUgb3IgaW50ZXJydXB0aW9ucyBmcm9tIGl0IChleGNlcHQgZm9yICJpbi1iYW5kIiBpbnRl cnJ1cHRpb25zCi0gICBzdWNoIGFzIF5DXkNeQykuCi0KLSAgIFsgWzYxXUNvbnRlbnRzIF0gWyBb NjJdQy1LZXJtaXQgXSBbIFs2M11LZXJtaXQgSG9tZSBdCi0KLTQuQS4gR3JvdXAgQTogTGlicmFy eSBGdW5jdGlvbnMKLQotICAgTGlicmFyeSBmdW5jdGlvbnMsIHN0cmljdGx5IHBvcnRhYmxlLCBj YW4gYmUgdXNlZCBieSBhbGwgbW9kdWxlcyBvbiBhbGwKLSAgIHBsYXRmb3JtczogWzY0XWNrY2xp Yi5oLCBbNjVdY2tjbGliLmMuCi0KLSAgIChUbyBiZSBmaWxsZWQgaW4uLi4gRm9yIG5vdywgc2Vl IFs2Nl1TZWN0aW9uIDMuMSBhbmQgdGhlIGNvbW1lbnRzIGluCi0gICBja2NsaWIuYy4pCi0KLSAg IFsgWzY3XUNvbnRlbnRzIF0gWyBbNjhdQy1LZXJtaXQgXSBbIFs2OV1LZXJtaXQgSG9tZSBdCi0K LTQuQi4gR3JvdXAgQjogS2VybWl0IEZpbGUgVHJhbnNmZXIKLQotICAgVGhlIEtlcm1pdCBwcm90 b2NvbCBrZXJuZWwuIFRoZXNlIGZpbGVzLCB3aG9zZSBuYW1lcyBzdGFydCB3aXRoICJja2MKLSAg IGFyZSBzdXBwb3NlZCB0byBiZSB0b3RhbGx5IHBvcnRhYmxlIEMsIGFuZCBhcmUgZXhwZWN0ZWQg dG8gY29tcGlsZQotICAgY29ycmVjdGx5IG9uIGFueSBwbGF0Zm9ybSB3aXRoIGFueSBDIGNvbXBp bGVyLiAiUG9ydGFibGUiIGRvZXMgbm90IG1lYW4KLSAgIHRoZSBzYW1lIGFzIGFzICJBTlNJIiAt LSB0aGVzZSBtb2R1bGVzIG11c3QgY29tcGlsZSBvbiAxMC0gYW5kIDIwLXllYXIKLSAgIG9sZCBj b21wdXRlcnMsIHdpdGggQyBwcmVwcm9jZXNzb3JzLCBjb21waWxlcnMsIGFuZC9vciBsaW5rZXJz IHRoYXQKLSAgIGhhdmUgYWxsIHNvcnRzIG9mIHJlc3RyaWN0aW9ucy4gVGhlIEdyb3VwIEIgbW9k dWxlcyBkbyBub3QgaW5jbHVkZSBhbnkKLSAgIGhlYWRlciBmaWxlcyBvdGhlciB0aGFuIHRob3Nl IHRoYXQgY29tZSB3aXRoIEtlcm1pdCBpdHNlbGYuIFRoZXkgZG8gbm90Ci0gICBjb250YWluIGFu eSBsaWJyYXJ5IGNhbGxzIGV4Y2VwdCBmcm9tIHRoZSBzdGFuZGFyZCBDIGxpYnJhcnkgKGUuZy4K LSAgIHByaW50ZigpKS4gVGhleSBtb3N0IGNlcnRhaW5seSBkbyBub3QgY29udGFpbiBhbnkgc3lz dGVtIGNhbGxzLiBGaWxlczoKLQotICAgWzcwXWNrY3N5bS5oCi0gICAgICAgICAgRm9yIHVzZSBi eSBDIGNvbXBpbGVycyB0aGF0IGRvbid0IGFsbG93IC1EIG9uIHRoZSBjb21tYW5kIGxpbmUuCi0K LSAgIFs3MV1ja2Nhc2MuaAotICAgICAgICAgIEFTQ0lJIGNoYXJhY3RlciBzeW1ib2wgZGVmaW5p dGlvbnMuCi0KLSAgIFs3Ml1ja2NzaWcuaAotICAgICAgICAgIFN5c3RlbS1pbmRlcGVuZGVudCBz aWduYWwtaGFuZGxpbmcgZGVmaW5pdGlvbnMgYW5kIHByb3RvdHlwZXMuCi0KLSAgIFs3M11ja2Nk ZWIuaAotICAgICAgICAgIE9yaWdpbmFsbHksIGRlYnVnZ2luZyBkZWZpbml0aW9ucy4gTm93IHRo aXMgZmlsZSBhbHNvIGNvbnRhaW5zCi0gICAgICAgICAgYWxsIGRlZmluaXRpb25zIGFuZCBwcm90 b3R5cGVzIHRoYXQgYXJlIHNoYXJlZCBieSBhbGwgbW9kdWxlcyBpbgotICAgICAgICAgIGFsbCBn cm91cHMuCi0KLSAgIFs3NF1ja2NrZXIuaAotICAgICAgICAgIEtlcm1pdCBwcm90b2NvbCBzeW1i b2wgZGVmaW5pdGlvbnMuCi0KLSAgIFs3NV1ja2N4bGEuaAotICAgICAgICAgIENoYXJhY3Rlci1z ZXQtcmVsYXRlZCBzeW1ib2wgZGVmaW5pdGlvbnMgKHNlZSBuZXh0IHNlY3Rpb24pLgotCi0gICBb NzZdY2tjbWFpLmMKLSAgICAgICAgICBUaGUgbWFpbiBwcm9ncmFtLiBUaGlzIG1vZHVsZSBjb250 YWlucyB0aGUgZGVjbGFyYXRpb25zIG9mIGFsbAotICAgICAgICAgIHRoZSBwcm90b2NvbC1yZWxh dGVkIGdsb2JhbCB2YXJpYWJsZXMgdGhhdCBhcmUgc2hhcmVkIGFtb25nIHRoZQotICAgICAgICAg IG90aGVyIG1vZHVsZXMuCi0KLSAgIFs3N11ja2Nwcm8udwotICAgICAgICAgIFRoZSBwcm90b2Nv bCBtb2R1bGUgaXRzZWxmLCB3cml0dGVuIGluICJ3YXJ0IiwgYSBsZXgtbGlrZQotICAgICAgICAg IHByZXByb2Nlc3NvciB0aGF0IGlzIGRpc3RyaWJ1dGVkIHdpdGggS2VybWl0IHVuZGVyIHRoZSBu YW1lCi0gICAgICAgICAgQ0tXQVJULkMuCi0KLSAgIFs3OF1ja2NmbnMuYywgWzc5XWNrY2ZuMi5j LCBbODBdY2tjZm4zLmMKLSAgICAgICAgICBUaGUgcHJvdG9jb2wgc3VwcG9ydCBmdW5jdGlvbnMg dXNlZCBieSB0aGUgcHJvdG9jb2wgbW9kdWxlLgotCi0gICBbODFdR3JvdXAgQiBtb2R1bGVzIG1h eSBjYWxsIHVwb24gZnVuY3Rpb25zIGZyb20gWzgyXUdyb3VwIEUsIGJ1dCBub3QKLSAgIGZyb20g WzgzXUdyb3VwIEQgbW9kdWxlcyAod2l0aCB0aGUgc2luZ2xlIGV4Y2VwdGlvbiB0aGF0IHRoZSBt YWluCi0gICBwcm9ncmFtIGludm9rZXMgdGhlIHVzZXIgaW50ZXJmYWNlLCB3aGljaCBpcyBpbiBH cm91cCBEKS4gKFRoaXMgbGFzdAotICAgYXNzZXJ0aW9uIGlzIHJlYWxseSBvbmx5IGEgY29uamVj dHVyZS4pCi0KLSAgIFsgWzg0XUNvbnRlbnRzIF0gWyBbODVdQy1LZXJtaXQgXSBbIFs4Nl1LZXJt aXQgSG9tZSBdCi0KLTQuQy4gR3JvdXAgQzogQ2hhcmFjdGVyLVNldCBDb252ZXJzaW9uCi0KLSAg IENoYXJhY3RlciBzZXQgdHJhbnNsYXRpb24gdGFibGVzIGFuZCBmdW5jdGlvbnMuIFVzZWQgYnkg dGhlIFs4N11Hcm91cAotICAgQiwgcHJvdG9jb2wgbW9kdWxlcywgYnV0IG1heSBiZSBzcGVjaWZp YyB0byBkaWZmZXJlbnQgY29tcHV0ZXJzLiAoU28KLSAgIGZhciwgYWxsIGNoYXJhY3RlciBjaGFy YWN0ZXIgc2V0cyBzdXBwb3J0ZWQgYnkgQy1LZXJtaXQgYXJlIHN1cHBvcnRlZAotICAgaW4gWzg4 XWNrdXhsYS5jIGFuZCBbODldY2t1eGxhLmgsIGluY2x1ZGluZyBNYWNpbnRvc2ggYW5kIElCTSBj aGFyYWN0ZXIKLSAgIHNldHMpLiBUaGVzZSBtb2R1bGVzIHNob3VsZCBiZSBjb21wbGV0ZWx5IHBv cnRhYmxlLCBhbmQgbm90IHJlbHkgb24gYW55Ci0gICBraW5kIG9mIHN5c3RlbSBvciBsaWJyYXJ5 IHNlcnZpY2VzLgotCi0gICBbOTBdY2tjeGxhLmgKLSAgICAgICAgICBDaGFyYWN0ZXItc2V0IGRl ZmluaXRpb25zIHVzYWJsZSBieSBhbGwgdmVyc2lvbnMgb2YgQy1LZXJtaXQuCi0KLSAgIGNrP3hs YS5oCi0gICAgICAgICAgQ2hhcmFjdGVyLXNldCBkZWZpbml0aW9ucyBmb3IgY29tcHV0ZXIgIj8i LCBlLmcuIFs5MV1ja3V4bGEuaAotICAgICAgICAgIGZvciBVTklYLCBbOTJdY2tteGxhLmggZm9y IE1hY2ludG9zaC4KLQotICAgWzkzXWNrP3hsYQotICAgICAgICAgIENoYXJhY3Rlci1zZXQgdHJh bnNsYXRpb24gdGFibGVzIGFuZCBmdW5jdGlvbnMgZm9yIGNvbXB1dGVyICI/IiwKLSAgICAgICAg ICBGb3IgZXhhbXBsZSwgQ0tVWExBLkMgZm9yIFVOSVgsIENLTVhMQS5DIGZvciBNYWNpbnRvc2gu IFNvIGZhciwKLSAgICAgICAgICB0aGVzZSBhcmUgdGhlIG9ubHkgdHdvIHN1Y2ggbW9kdWxlcy4g VGhlIFVOSVggbW9kdWxlIGlzIHVzZWQgZm9yCi0gICAgICAgICAgYWxsIHZlcnNpb25zIG9mIEMt S2VybWl0IGV4Y2VwdCB0aGUgTWFjaW50b3NoIHZlcnNpb24uCi0KLSAgIFs5NF1ja2N1bmkuaAot ICAgICAgICAgIFVuaWNvZGUgZGVmaW5pdGlvbnMKLQotICAgWzk1XWNrY3VuaS5jCi0gICAgICAg ICAgVW5pY29kZSBtb2R1bGUKLQotICAgSGVyZSdzIGhvdyB0byBhZGQgYSBuZXcgZmlsZSBjaGFy YWN0ZXIgc2V0IGluIHRoZSBvcmlnaW5hbCAobm9uLVVuaWNvZGUKLSAgIG1vZHVsZXMpLiBBc3N1 bWluZyBpdCBpcyBiYXNlZCBvbiB0aGUgUm9tYW4gKExhdGluKSBhbHBoYWJldC4gTGV0J3MKLSAg IGNhbGwgaXQgIkJhcmJhcmlhbiIuIEZpcnN0LCBpbiBjaz94bGEuaCwgYWRkIGEgZGVmaW5pdGlv biBmb3IgRkNfQkFSQkEKLSAgICg4IGNoYXJzIG1heGltdW0gbGVuZ3RoKSBhbmQgaW5jcmVhc2Ug TUFYRkNTRVRTIGJ5IDEuIFRoZW4sIGluCi0gICBjaz94bGEuYzoKLQotICAgICAqIEFkZCBhIGJh cmJhcmlhbiBlbnRyeSBpbnRvIHRoZSBmY3NpbmZvIGFycmF5LgotICAgICAqIEFkZCBhICJiYXJi YXJpYW4iIGVudHJ5IHRvIGZpbGUgY2hhcmFjdGVyIHNldCBrZXl3b3JkIHRhYmxlLAotICAgICAg IGZjc3RhYi4KLSAgICAgKiBBZGQgYSAiYmFyYmFyaWFuIiBlbnRyeSB0byB0ZXJtaW5hbCBjaGFy YWN0ZXIgc2V0IGtleXdvcmQgdGFibGUsCi0gICAgICAgdHRjc3RhYi4KLSAgICAgKiBBZGQgYSB0 cmFuc2xhdGlvbiB0YWJsZSBmcm9tIExhdGluLTEgdG8gYmFyYmFyaWFuOiB5bDFiYVtdLgotICAg ICAqIEFkZCBhIHRyYW5zbGF0aW9uIHRhYmxlIGZyb20gYmFyYmFyaWFuIHRvIExhdGluLTE6IHli YWwxW10uCi0gICAgICogQWRkIGEgdHJhbnNsYXRpb24gZnVuY3Rpb24gZnJvbSBCYXJiYXJpYW4g dG8gQVNDSUk6IHhiYWFzKCkuCi0gICAgICogQWRkIGEgdHJhbnNsYXRpb24gZnVuY3Rpb24gZnJv bSBCYXJiYXJpYW4gdG8gTGF0aW4tMTogeGJhbDEoKS4KLSAgICAgKiBBZGQgYSB0cmFuc2xhdGlv biBmdW5jdGlvbiBmcm9tIExhdGluLTEgdG8gQmFyYmFyaWFuOiB4bDFiYSgpLgotICAgICAqIGV0 YyBldGMgZm9yIGVhY2ggdHJhbnNmZXIgY2hhcmFjdGVyIHNldC4uLgotICAgICAqIEFkZCB0cmFu c2xhdGlvbiBmdW5jdGlvbiBwb2ludGVycyB0byB0aGUgeGxzIGFuZCB4bHIgdGFibGVzLgotCi0g ICBPdGhlciB0cmFuc2xhdGlvbnMgaW52b2x2aW5nIEJhcmJhcmlhbiAoZS5nLiBmcm9tIEJhcmJh cmlhbiB0bwotICAgTGF0aW4tQ3lyaWxsaWMpIGFyZSBwZXJmb3JtZWQgdGhyb3VnaCB0aGVzZSB0 YWJsZXMgYW5kIGZ1bmN0aW9ucy4gU2VlCi0gICBja3V4bGEuaCBhbmQgY2t1eGxhLmMgZm9yIGV4 dGVuc2l2ZSBleGFtcGxlcy4KLQotICAgVG8gYWRkIGEgbmV3IFRyYW5zZmVyIENoYXJhY3RlciBT ZXQsIGUuZy4gTGF0aW4gQWxwaGFiZXQgOSAoZm9yIHRoZQotICAgRXVybyBzeW1ib2wpLCBhZ2Fp biBpbiB0aGUgIm9sZCIgY2hhcmFjdGVyLXNldCBtb2R1bGVzOgotCi0gICBJbiBja2N4bGEuaDoK LQotICAgICAgICAgICsgQWRkIGEgVENfeHh4eCBkZWZpbml0aW9uIGFuZCBpbmNyZWFzZSBNQVhU Q1NFVFMgYWNjb3JkaW5nbHkuCi0KLSAgIEluIGNrP3hsYS5oIChzaW5jZSBhbnkgdHJhbnNmZXIg Y2hhcnNldCBpcyBhbHNvIGEgZmlsZSBjaGFyc2V0KToKLQotICAgICAgICAgICsgQWRkIGFuIEZD X3h4eHggZGVmaW5pdGlvbiBhbmQgaW5jcmVhc2UgTUFYRkNTRVRTIGFjY29yZGluZ2x5LgotCi0g ICBJbiBjaz94bGEuYzoKLQotICAgICAgICAgICsgQWRkIGEgdGNzaW5mb1tdIGVudHJ5LgotICAg ICAgICAgICsgTWFrZSBhIHRjc3RhYltdIGtleXdvcmQgdGFibGUgZW50cnkuCi0gICAgICAgICAg KyBNYWtlIGFuIGZjc2luZm9bXSB0YWJsZSBlbnRyeS4KLSAgICAgICAgICArIE1ha2UgYW4gZmNz dGFiW10ga2V5d29yZCB0YWJsZSBlbnRyeS4KLSAgICAgICAgICArIE1ha2UgYSB0Y3N0YWJbXSBr ZXl3b3JkIHRhYmxlIGVudHJ5LgotICAgICAgICAgICsgSWYgbmVjZXNzYXJ5LCBtYWtlIGEgbGFu Z2luZm9bXSB0YWJsZSBlbnRyeS4KLSAgICAgICAgICArIE1ha2UgZW50cmllcyBpbiB0aGUgZnVu Y3Rpb24gcG9pbnRlciBhcnJheXMuCi0gICAgICAgICAgKyBQcm92aWRlIGFueSBuZWVkZWQgZnVu Y3Rpb25zLgotCi0gICBBcyBvZiBDLUtlcm1pdCA3LjAsIGNoYXJhY3RlciBzZXRzIGFyZSBhbHNv IGhhbmRsZWQgaW4gcGFyYWxsZWwgYnkgdGhlCi0gICBuZXcgKGFuZCB2ZXJ5IGxhcmdlKSBVbmlj b2RlIG1vZHVsZSwgY2tjdW5pLltjaF0uIEV2ZW50dWFsbHkgd2Ugc2hvdWxkCi0gICBwaGFzZSBv dXQgdGhlIG9sZCB3YXksIGRlc2NyaWJlZCBqdXN0IGFib3ZlLCBhbmQgb3BlcmF0ZSBlbnRpcmVs eSBpbgotICAgKGFuZCB0aHJvdWdoKSBVbmljb2RlLiBUaGUgYWR2YW50YWdlcyBhcmUgbWFueS4g VGhlIGRpc2FkdmFudGFnZXMgYXJlCi0gICBzaXplIGFuZCBwZXJmb3JtYW5jZS4gVG8gYWRkIGEg Y2hhcmFjdGVyIHRvIHRoZSBVbmljb2RlIG1vZHVsZXM6Ci0KLSAgIEluIGNrY3VuaS5oOgotCi0g ICAgICAgICAgKyAoVG8gYmUgZmlsbGVkIGluLi4uKQotCi0gICBJbiBja2N1bmkuYzoKLQotICAg ICAgICAgICsgKFRvIGJlIGZpbGxlZCBpbi4uLikKLQotICAgWyBbOTZdQ29udGVudHMgXSBbIFs5 N11DLUtlcm1pdCBdIFsgWzk4XUtlcm1pdCBIb21lIF0KLQotNC5ELiBHcm91cCBEOiBVc2VyIElu dGVyZmFjZQotCi0gICBUaGlzIGlzIHRoZSBjb2RlIHRoYXQgY29tbXVuaWNhdGVzIHdpdGggdGhl IHVzZXIsIGdldHMgaGVyIGNvbW1hbmRzLAotICAgaW5mb3JtcyBoZXIgb2YgdGhlIHJlc3VsdHMu IEl0IG1heSBiZSBjb21tYW5kLWxpbmUgb3JpZW50ZWQsCi0gICBpbnRlcmFjdGl2ZSBwcm9tcHRp bmcgZGlhbG9nLCBtZW51cyBhbmQgYXJyb3cga2V5cywgd2luZG93cyBhbmQgbWljZSwKLSAgIHNw ZWVjaCByZWNvZ25pdGlvbiwgdGVsZXBhdGh5LCBldGMuIFRoZSBvbmUgcHJvdmlkZWQgaXMgY29t bWFuZC1hbmQKLSAgIHByb21wdCwgd2l0aCB0aGUgYWJpbGl0eSB0byByZWFkIGNvbW1hbmRzIGZy b20gdmFyaW91cyBzb3VyY2VzOiB0aGUKLSAgIGNvbnNvbGUga2V5Ym9hcmQsIGEgZmlsZSwgb3Ig YSBtYWNybyBkZWZpbml0aW9uLiBUaGUgdXNlciBpbnRlcmZhY2UgaGFzCi0gICB0aHJlZSBtYWpv ciBmdW5jdGlvbnM6Ci0KLSAgICAxLiBTZXRzIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmlsZSB0 cmFuc2ZlciBhbmQgdGhlbiBzdGFydHMgaXQuIFRoaXMKLSAgICAgICBpcyBkb25lIGJ5IHNldHRp bmcgY2VydGFpbiAobWFueSkgZ2xvYmFsIHZhcmlhYmxlcywgc3VjaCBhcyB0aGUKLSAgICAgICBw cm90b2NvbCBtYWNoaW5lIHN0YXJ0IHN0YXRlLCB0aGUgZmlsZSBzcGVjaWZpY2F0aW9uLCBmaWxl IHR5cGUsCi0gICAgICAgY29tbXVuaWNhdGlvbiBwYXJhbWV0ZXJzLCBwYWNrZXQgbGVuZ3RoLCB3 aW5kb3cgc2l6ZSwgY2hhcmFjdGVyCi0gICAgICAgc2V0LCBldGMuCi0gICAgMi4gRGlzcGxheXMg bWVzc2FnZXMgb24gdGhlIHVzZXIncyBzY3JlZW4gZHVyaW5nIHRoZSBmaWxlIHRyYW5zZmVyLAot ICAgICAgIHVzaW5nIHRoZSBzY3JlZW4oKSBmdW5jdGlvbiwgd2hpY2ggaXMgY2FsbGVkIGJ5IHRo ZSBncm91cC0xCi0gICAgICAgbW9kdWxlcy4KLSAgICAzLiBFeGVjdXRlcyBhbnkgY29tbWFuZHMg ZGlyZWN0bHkgdGhhdCBkbyBub3QgcmVxdWlyZSBLZXJtaXQgcHJvdG9jb2wsCi0gICAgICAgc3Vj aCBhcyB0aGUgQ09OTkVDVCBjb21tYW5kLCBsb2NhbCBmaWxlIG1hbmFnZW1lbnQgY29tbWFuZHMs Ci0gICAgICAgcGFyYW1ldGVyLXNldHRpbmcgY29tbWFuZHMsIEZUUCBjbGllbnQgY29tbWFuZHMs IGV0Yy4KLQotICAgSWYgeW91IHBsYW4gdG8gZW1iZWQgdGhlIFs5OV1Hcm91cCBCLCBmaWxlcyBp bnRvIGEgcHJvZ3JhbSB3aXRoIGEKLSAgIGRpZmZlcmVudCB1c2VyIGludGVyZmFjZSwgeW91ciBp bnRlcmZhY2UgbXVzdCBzdXBwbHkgYW4gYXBwcm9wcmlhdGUKLSAgIHNjcmVlbigpIGZ1bmN0aW9u LCBwbHVzIGEgY291cGxlIHJlbGF0ZWQgb25lcyBsaWtlIGNoa2ludCgpIGFuZAotICAgaW50bXNn KCkgZm9yIGhhbmRsaW5nIGtleWJvYXJkIChvciBtb3VzZSwgZXRjKSBpbnRlcnJ1cHRpb25zIGR1 cmluZwotICAgZmlsZSB0cmFuc2Zlci4gVGhlIGJlc3Qgd2F5IHRvIGZpbmQgb3V0IGFib3V0IHRo aXMgaXMgdG8gbGluayBhbGwgdGhlCi0gICBDLUtlcm1pdCBtb2R1bGVzIHRvZ2V0aGVyIGV4Y2Vw dCB0aGUgY2t1dSoubyBhbmQgY2t1Y29uLm8gbW9kdWxlcywgYW5kCi0gICBzZWUgd2hpY2ggbWlz c2luZyBzeW1ib2xzIHR1cm4gdXAuCi0KLSAgIEMtS2VybWl0J3MgY2hhcmFjdGVyLW9yaWVudGVk IHVzZXIgaW50ZXJmYWNlIChhcyBvcHBvc2VkIHRvIHRoZQotICAgTWFjaW50b3NoIHZlcnNpb24n cyBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UpIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcKLSAg IG1vZHVsZXMuIEMtS2VybWl0IGNhbiBiZSBidWlsdCB3aXRoIGFuIGludGVyYWN0aXZlIGNvbW1h bmQgcGFyc2VyLCBhCi0gICBjb21tYW5kLWxpbmUtb3B0aW9uLW9ubHkgcGFyc2VyLCBhIGdyYXBo aWNhbCB1c2VyIGludGVyZmFjZSwgb3IgYW55Ci0gICBjb21iaW5hdGlvbiwgYW5kIGl0IGNhbiBl dmVuIGJlIGJ1aWx0IHdpdGggbm8gdXNlciBpbnRlcmZhY2UgYXQgYWxsIChpbgotICAgd2hpY2gg Y2FzZSBpdCBydW5zIGFzIGEgcmVtb3RlLW1vZGUgS2VybWl0IHNlcnZlcikuCi0KLSAgIFsxMDBd Y2t1Y21kLmgKLSAgIFsxMDFdY2t1Y21kLmMKLSAgICAgICAgICBUaGUgY29tbWFuZCBwYXJzaW5n IHByaW1pdGl2ZXMgdXNlZCBieSB0aGUgaW50ZXJhY3RpdmUgY29tbWFuZAotICAgICAgICAgIHBh cnNlciB0byBwYXJzZSBrZXl3b3JkcywgbnVtYmVycywgZmlsZW5hbWVzLCBldGMsIGFuZCB0byBn aXZlCi0gICAgICAgICAgaGVscCwgY29tcGxldGUgZmllbGRzLCBzdXBwbHkgZGVmYXVsdHMsIGFs bG93IGFiYnJldmlhdGlvbnMgYW5kCi0gICAgICAgICAgZWRpdGluZywgZXRjLiBUaGlzIHBhY2th Z2UgaXMgdG90YWxseSBpbmRlcGVuZGVudCBvZiBLZXJtaXQsIGJ1dAotICAgICAgICAgIGRvZXMg ZGVwZW5kIG9uIHRoZSBbMTAyXUdyb3VwIEUgZnVuY3Rpb25zLgotCi0gICBbMTAzXWNrdXVzci5o Ci0gICAgICAgICAgRGVmaW5pdGlvbnMgb2Ygc3ltYm9scyB1c2VkIGluIEtlcm1pdCdzIGNvbW1h bmRzLgotCi0gICBja3V1cyouYwotICAgICAgICAgIEtlcm1pdCdzIGludGVyYWN0aXZlIGNvbW1h bmQgcGFyc2VyLCBpbmNsdWRpbmcgdGhlIHNjcmlwdAotICAgICAgICAgIHByb2dyYW1taW5nIGxh bmd1YWdlOiBbMTA0XWNrdXVzci5jIChpbmNsdWRlcyB0b3AtbGV2ZWwga2V5d29yZAotICAgICAg ICAgIHRhYmxlcyk7IFsxMDVdY2t1dXMyLmMgKEhFTFAgY29tbWFuZCB0ZXh0KTsgWzEwNl1ja3V1 czMuYyAobW9zdAotICAgICAgICAgIG9mIHRoZSBTRVQgY29tbWFuZCk7IFsxMDddY2t1dXM0LmMg KGluY2x1ZGVzIHZhcmlhYmxlcyBhbmQKLSAgICAgICAgICBmdW5jdGlvbnMpOyBja3V1c1s1Njdd LmMgKG1pc2NlbGxhbmVvdXMpOwotCi0gICBbMTA4XWNrdXVzeS5jCi0gICAgICAgICAgVGhlIGNv bW1hbmQtbGluZS1vcHRpb24gcGFyc2VyLgotCi0gICBbMTA5XWNrdXVzeC5jCi0gICAgICAgICAg VXNlciBpbnRlcmZhY2UgZnVuY3Rpb25zIGNvbW1vbiB0byBib3RoIHRoZSBpbnRlcmFjdGl2ZSBh bmQKLSAgICAgICAgICBjb21tYW5kLWxpbmUgcGFyc2Vycy4KLQotICAgWzExMF1ja3V2ZXIuaAot ICAgICAgICAgIFZlcnNpb24gaGVyYWxkcyBmb3IgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucy4K LQotICAgWzExMV1ja3VzY3IuYwotICAgICAgICAgIFRoZSAob2xkLCB1dWNwLWxpa2UpIFNDUklQ VCBjb21tYW5kCi0KLSAgIFsxMTJdY2t1ZGlhLmMKLSAgICAgICAgICBUaGUgRElBTCBjb21tYW5k LiBJbmNsdWRlcyBzcGVjaWZpYyBrbm93bGVkZ2Ugb2YgbWFueSB0eXBlcyBvZgotICAgICAgICAg IG1vZGVtcy4KLQotICAgTm90ZSB0aGF0IG5vbmUgb2YgdGhlIGFib3ZlIGZpbGVzIGlzIGFjdHVh bGx5IFVuaXgtc3BlY2lmaWMuIE92ZXIgdGltZQotICAgdGhleSBoYXZlIHByb3ZlbiB0byBiZSBw b3J0YWJsZSBhbW9uZyBhbGwgcGxhdGZvcm1zIHdoZXJlIEMtS2VybWl0IGlzCi0gICBidWlsdDog VW5peCwgVk1TLCBBT1MvVlMsIEFtaWdhLCBPUy05LCBWT1MsIGV0YyBldGMuIFRodXMgdGhlIHRo aXJkCi0gICBsZXR0ZXIgc2hvdWxkIG1vcmUgcHJvcGVybHkgYmUgImMiLCBidXQgY2hhbmdpbmcg aXQgd291bGQgYmUgdG9vCi0gICBjb25mdXNpbmcuCi0KLSAgIGNrP2Nvbi5jLCBja3VjbnMuYwot ICAgICAgICAgIFRoZSBDT05ORUNUIGNvbW1hbmQuIFRlcm1pbmFsIGNvbm5lY3Rpb24sIGFuZCBp biBzb21lIGNhc2VzCi0gICAgICAgICAgKE1hY2ludG9zaCwgV2luZG93cykgYWxzbyB0ZXJtaW5h bCBlbXVsYXRpb24uIE5PVEU6IEFzIG9mCi0gICAgICAgICAgQy1LZXJtaXQgNy4wLCB0aGVyZSBh cmUgdHdvIGRpZmZlcmVudCBDT05ORUNUIG1vZHVsZXMgZm9yIFVOSVg6Ci0gICAgICAgICAgWzEx M11ja3Vjb24uYyAtLSB0aGUgdHJhZGl0aW9uYWwsIHBvcnRhYmxlLCBmb3JrKCktYmFzZWQgdmVy c2lvbgotICAgICAgICAgIC0tIGFuZCBbMTE0XWNrdWNucy5jLCBhIG5ldyB2ZXJzaW9uIHRoYXQg dXNlcyBzZWxlY3QoKSByYXRoZXIKLSAgICAgICAgICB0aGFuIGZvcmtzIHNvIGl0IGNhbiBoYW5k bGUgZW5jcnlwdGlvbi4gY2t1Y25zLmMgaXMgdGhlCi0gICAgICAgICAgcHJlZmVycmVkIHZlcnNp b24gZm9yIFVuaXg7IGNrdWNvbi5jIGlzIG5vdCBsaWtlbHkgdG8ga2VlcCBwYWNlCi0gICAgICAg ICAgd2l0aCBpdCBpbiB0ZXJtcyBvZiB1cGdyYWRlcywgZXRjLiBIb3dldmVyLCBzaW5jZSBzZWxl Y3QoKSBpcwotICAgICAgICAgIG5vdCBwb3J0YWJsZSB0byBldmVyeSBwbGF0Zm9ybSwgY2t1Y29u LmMgd2lsbCBiZSBrZXB0Ci0gICAgICAgICAgaW5kZWZpbml0ZWx5IGZvciB0aG9zZSBwbGF0Zm9y bXMgdGhhdCBjYW4ndCB1c2UgY2t1Y25zLmMuIE5PVEU6Ci0gICAgICAgICAgU3VuTGluayBYLjI1 IHN1cHBvcnQgaXMgYXZhaWxhYmxlIG9ubHkgaW4gY2t1Y29uLmMuCi0KLSAgIGNrXyouKiwgY2t1 YXQqLioKLSAgICAgICAgICBNb2R1bGVzIGhhdmluZyB0byBkbyB3aXRoIGF1dGhlbnRpY2F0aW9u IGFuZCBlbmNyeXB0aW9uLiBTaW5jZQotICAgICAgICAgIHRoZSByZWxheGF0aW9uIG9mIFVTQSBl eHBvcnQgbGF3cywgdGhleSBhcmUgaW5jbHVkZWQgd2l0aCB0aGUKLSAgICAgICAgICBnZW5lcmFs IHNvdXJjZS1jb2RlIGRpc3RyaWJ1dGlvbi4gU2VjdXJlIEMtS2VybWl0IGJpbmFyaWVzIGNhbgot ICAgICAgICAgIGJlIGJ1aWx0IHVzaW5nIHNwZWNpYWwgdGFyZ2V0cyBpbiB0aGUgc3RhbmRhcmQg bWFrZWZpbGUuCi0gICAgICAgICAgSG93ZXZlciwgc2VjdXJlIHByZWJ1aWx0IGJpbmFyaWVzIG1h eSBub3QgYmUgZGlzdHJpYnV0ZWQuCi0KLSAgIEZvciBvdGhlciBpbXBsZW1lbnRhdGlvbnMsIHRo ZSBmaWxlcyBtYXksIGFuZCBwcm9iYWJseSBkbywgaGF2ZQotICAgZGlmZmVyZW50IG5hbWVzLiBG b3IgZXhhbXBsZSwgdGhlIE1hY2ludG9zaCBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UKLSAgIGZp bGVuYW1lcyBzdGFydCB3aXRoICJja20iLiBLZXJtaXQgOTUgdXNlcyB0aGUgY2t1Y21kIGFuZCBj a3V1cyoKLSAgIG1vZHVsZXMsIGJ1dCBoYXMgaXRzIG93biBDT05ORUNUIGNvbW1hbmQgbW9kdWxl cy4gQW5kIHNvIG9uLgotCi0gICBIZXJlIGlzIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgQy1LZXJt aXQncyAidXNlciBpbnRlcmZhY2UgaW50ZXJmYWNlIiwKLSAgIGZyb20gY2t1dXNyLmMuIEl0IGlz IG5vd2hlcmUgbmVhciBjb21wbGV0ZTsgaW4gcGFydGljdWxhciwgaHVuZHJlZHMgb2YKLSAgIGds b2JhbCB2YXJpYWJsZXMgYXJlIHNoYXJlZCBhbW9uZyB0aGUgbWFueSBtb2R1bGVzLiBUaGVzZSBz aG91bGQsIHNvbWUKLSAgIGRheSwgYmUgY29sbGVjdGVkIGludG8gY2xhc3NlcyBvciBzdHJ1Y3R1 cmVzIHRoYXQgY2FuIGJlIHBhc3NlZCBhcm91bmQKLSAgIGFzIG5lZWRlZDsgbm90IG9ubHkgZm9y IHB1cml0eSdzIHNha2UsIGJ1dCBhbHNvIHRvIGFsbG93IGZvciBtdWx0aXBsZQotICAgc2ltdWx0 YW5lb3VzIGNvbW11bmljYXRpb24gc2Vzc2lvbnMgYW5kIG9yIHVzZXIgaW50ZXJmYWNlcy4gT3Vy IGxpc3Qgb2YKLSAgIHRoaW5ncyB0byBkbyBpcyBlbmRsZXNzLCBhbmQgcmVvcmdhbml6aW5nIHRo ZSBzb3VyY2UgaXMgYWxtb3N0IGFsd2F5cwotICAgYXQgdGhlIGJvdHRvbS4KLQotICAgVGhlIGNr dXVzKi5jIG1vZHVsZXMgKGxpa2UgbWFueSBvZiB0aGUgY2tjKi5jIG1vZHVsZXMpIGRlcGVuZCBv biB0aGUKLSAgIGV4aXN0ZW5jZSBvZiBDIGxpYnJhcnkgZmVhdHVyZXMgbGlrZSBmb3BlbiwgZmdl dHMsIGZlb2YsIChmKXByaW50ZiwKLSAgIGFyZ3YvYXJnYywgZXRjLiBPdGhlciBmdW5jdGlvbnMg dGhhdCBhcmUgbGlrZWx5IHRvIHZhcnkgYW1vbmcgb3BlcmF0aW5nCi0gICBzeXN0ZW1zIC0tIGxp a2Ugc2V0dGluZyB0ZXJtaW5hbCBtb2RlcyBvciBpbnRlcnJ1cHRzIC0tIGFyZSBpbnZva2VkIHZp YQotICAgY2FsbHMgdG8gZnVuY3Rpb25zIHRoYXQgYXJlIGRlZmluZWQgaW4gdGhlIFsxMTVdR3Jv dXAgRQotICAgcGxhdGZvcm0tZGVwZW5kZW50IG1vZHVsZXMsIGNrP1tmdF1pby5jLiBUaGUgY29t bWFuZCBsaW5lIHBhcnNlcgotICAgcHJvY2Vzc2VzIGFueSBhcmd1bWVudHMgZm91bmQgb24gdGhl IGNvbW1hbmQgbGluZSwgYXMgcGFzc2VkIHRvIG1haW4oKQotICAgdmlhIGFyZ3YvYXJnYy4gVGhl IGludGVyYWN0aXZlIHBhcnNlciB1c2VzIHRoZSBmYWNpbGl0aWVzIG9mIHRoZSBjbWQKLSAgIHBh Y2thZ2UgKGRldmVsb3BlZCBmb3IgdGhpcyBwcm9ncmFtLCBidXQsIGluIHRoZW9yeSwgdXNhYmxl IGJ5IGFueQotICAgcHJvZ3JhbSkuIEFueSBjb21tYW5kIHBhcnNlciBtYXkgYmUgc3Vic3RpdHV0 ZWQgZm9yIHRoaXMgb25lLiBUaGUgb25seQotICAgcmVxdWlyZW1lbnRzIGZvciB0aGUgS2VybWl0 IGNvbW1hbmQgcGFyc2VyIGFyZSB0aGVzZToKLQotICAgIDEuIFNldCBwYXJhbWV0ZXJzIHZpYSBn bG9iYWwgdmFyaWFibGVzIGxpa2UgZHVwbGV4LCBzcGVlZCwgdHRuYW1lLAotICAgICAgIGV0Yy4g U2VlIFsxMTZdY2tjbWFpLmMgZm9yIHRoZSBkZWNsYXJhdGlvbnMgYW5kIGRlc2NyaXB0aW9ucyBv ZgotICAgICAgIHRoZXNlIHZhcmlhYmxlcy4KLSAgICAyLiBJZiBhIGNvbW1hbmQgY2FuIGJlIGV4 ZWN1dGVkIHdpdGhvdXQgdGhlIHVzZSBvZiBLZXJtaXQgcHJvdG9jb2wsCi0gICAgICAgdGhlbiBl eGVjdXRlIHRoZSBjb21tYW5kIGRpcmVjdGx5IGFuZCBzZXQgdGhlIHNzdGF0ZSAoc3RhcnQgc3Rh dGUpCi0gICAgICAgdmFyaWFibGUgdG8gMC4gRXhhbXBsZXMgaW5jbHVkZSBTRVQgY29tbWFuZHMs IGxvY2FsIGRpcmVjdG9yeQotICAgICAgIGxpc3RpbmdzLCB0aGUgQ09OTkVDVCBjb21tYW5kLgot ICAgIDMuIElmIGEgY29tbWFuZCByZXF1aXJlcyB0aGUgS2VybWl0IHByb3RvY29sLCBzZXQgdGhl IGZvbGxvd2luZwotICAgICAgIHZhcmlhYmxlczoKLSBzc3RhdGUgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cmluZyBkYXRhCi0gICAneCcgKGVudGVyIHNlcnZlciBtb2RlKSAgICAgICAg ICAgIChub25lKQotICAgJ3InIChzZW5kIGEgJ2dldCcgY29tbWFuZCkgICAgICAgICBjbWFyZywg Y21hcmcyCi0gICAndicgKGVudGVyIHJlY2VpdmUgbW9kZSkgICAgICAgICAgIGNtYXJnMgotICAg J2cnIChzZW5kIGEgZ2VuZXJpYyBjb21tYW5kKSAgICAgICBjbWFyZwotICAgJ3MnIChzZW5kIGZp bGVzKSAgICAgICAgICAgICAgICAgICBuZmlscywgY21hcmcgJiBjbWFyZzIgT1IgY21saXN0Ci0g ICAnYycgKHNlbmQgYSByZW1vdGUgaG9zdCBjb21tYW5kKSAgIGNtYXJnCi0KLQotICAgICAgIGNt bGlzdCBpcyBhbiBhcnJheSBvZiBwb2ludGVycyB0byBzdHJpbmdzLgotICAgICAgIGNtYXJnLCBj bWFyZzIgYXJlIHBvaW50ZXJzIHRvIHN0cmluZ3MuCi0gICAgICAgbmZpbHMgaXMgYW4gaW50ZWdl ciAoaG1tbSwgcHJvYmFibHkgc2hvdWxkIGJlIGFuIHVuc2lnbmVkIGxvbmcpLgotCi0gICAgICAg IGNtYXJnIGNhbiBiZToKLSAgICAgICAgICAgICAgICBBIGZpbGVuYW1lIHN0cmluZyAocG9zc2li bHkgd2lsZCksIG9yOgotICAgICAgICAgICAgICAgIGEgcG9pbnRlciB0byBhIHByZWZhYnJpY2F0 ZWQgZ2VuZXJpYyBjb21tYW5kIHN0cmluZywgb3I6Ci0gICAgICAgICAgICAgICAgYSBwb2ludGVy IHRvIGEgaG9zdCBjb21tYW5kIHN0cmluZy4KLQotICAgICAgICBjbWFyZzIgaXM6Ci0gICAgICAg ICAgICAgICAgVGhlIG5hbWUgdG8gc2VuZCBhIHNpbmdsZSBmaWxlIHVuZGVyLCBvcjoKLSAgICAg ICAgICAgICAgICB0aGUgbmFtZSB1bmRlciB3aGljaCB0byBzdG9yZSBhbiBpbmNvbWluZyBmaWxl OyBtdXN0IG5vdAotICAgICAgICAgICAgICAgIGJlIHdpbGQuCi0gICAgICAgICAgICAgICAgSWYg aXQncyB0aGUgbmFtZSBmb3IgcmVjZWl2aW5nLCBhIG51bGwgdmFsdWUgbWVhbnMgdG8KLSAgICAg ICAgICAgICAgICBzdG9yZSB0aGUgZmlsZSB1bmRlciB0aGUgbmFtZSBpdCBhcnJpdmVzIHdpdGgu Ci0KLSAgICAgICAgY21saXN0IGlzOgotICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBub253aWxk IGZpbGVuYW1lcywgc3VjaCBhcyBwYXNzZWQgdmlhIGFyZ3YuCi0KLSAgICAgICAgbmZpbHMgaXMg YW4gaW50ZWdlciwgaW50ZXJwcmV0ZWQgYXMgZm9sbG93czoKLSAgICAgICAgICAgICAgICAtMTog ZmlsZXNwZWMgKHBvc3NpYmx5IHdpbGQpIGluIGNtYXJnLCBtdXN0IGJlIGV4cGFuZGVkCi0gICAg ICAgICAgICAgICAgaW50ZXJuYWxseS4KLSAgICAgICAgICAgICAgICAwOiBzZW5kIGZyb20gc3Rk aW4gKHN0YW5kYXJkIGlucHV0KS4KLSAgICAgICAgICAgICAgICA+MDogbnVtYmVyIG9mIGZpbGVz IHRvIHNlbmQsIGZyb20gY21saXN0LgotCi0gICBUaGUgc2NyZWVuKCkgZnVuY3Rpb24gaXMgdXNl ZCB0byB1cGRhdGUgdGhlIHNjcmVlbiBkdXJpbmcgZmlsZQotICAgdHJhbnNmZXIuIFRoZSB0bG9n KCkgZnVuY3Rpb24gd3JpdGVzIHRvIGEgdHJhbnNhY3Rpb24gbG9nIChpZiBUTE9HIGlzCi0gICBk ZWZpbmVkKS4gVGhlIGRlYnVnKCkgZnVuY3Rpb24gd3JpdGVzIHRvIGEgZGVidWdnaW5nIGxvZyAo aWYgREVCVUcgaXMKLSAgIGRlZmluZWQpLiBUaGUgaW50bXNnKCkgYW5kIGNoa2ludCgpIGZ1bmN0 aW9ucyBwcm92aWRlIHRoZSB1c2VyIGkvbyBmb3IKLSAgIGludGVycnVwdGluZyBmaWxlIHRyYW5z ZmVycy4KLQotICAgWyBbMTE3XUNvbnRlbnRzIF0gWyBbMTE4XUMtS2VybWl0IF0gWyBbMTE5XUtl cm1pdCBIb21lIF0KLQotNC5FLiBHcm91cCBFOiBQbGF0Zm9ybS1EZXBlbmRlbnQgSS9PCi0KLSAg IFBsYXRmb3JtLWRlcGVuZGVudCBmdW5jdGlvbiBkZWZpbml0aW9ucy4gQWxsIHRoZSBLZXJtaXQg bW9kdWxlcywKLSAgIGluY2x1ZGluZyB0aGUgY29tbWFuZCBwYWNrYWdlLCBjYWxsIHVwb24gdGhl c2UgZnVuY3Rpb25zLCB3aGljaCBhcmUKLSAgIGRlc2lnbmVkIHRvIHByb3ZpZGUgc3lzdGVtLWlu ZGVwZW5kZW50IHByaW1pdGl2ZXMgZm9yIGNvbnRyb2xsaW5nIGFuZAotICAgbWFuaXB1bGF0aW5n IGRldmljZXMgYW5kIGZpbGVzLiBGb3IgVW5peCwgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbmVk Ci0gICBpbiB0aGUgZmlsZXMgWzEyMF1ja3VmaW8uYyAoZmlsZXMpLCBbMTIxXWNrdXRpby5jIChj b21tdW5pY2F0aW9ucyksIGFuZAotICAgWzEyMl1ja3VzaWcuYyAoc2lnbmFsIGhhbmRsaW5nKS4K LQotICAgRm9yIFZNUywgdGhlIGZpbGVzIGFyZSBbMTIzXWNrdmZpby5jLCBja3Z0aW8uYywgYW5k IFsxMjRdY2t1c2lnLmMgKFZNUwotICAgY2FuIHVzZSB0aGUgc2FtZSBzaWduYWwgaGFuZGxpbmcg cm91dGluZXMgYXMgVW5peCkuIEl0IGRvZXNuJ3QgcmVhbGx5Ci0gICBtYXR0ZXIgd2hhdCB0aGUg ZmlsZXMgYXJlIGNhbGxlZCwgZXhjZXB0IGZvciBLZXJtaXQgZGlzdHJpYnV0aW9uCi0gICBwdXJw b3NlcyAoZ3JvdXBpbmcgcmVsYXRlZCBmaWxlcyB0b2dldGhlciBhbHBoYWJldGljYWxseSksIG9u bHkgdGhhdAotICAgZWFjaCBmdW5jdGlvbiBpcyBwcm92aWRlZCB3aXRoIHRoZSBuYW1lIGluZGlj YXRlZCwgb2JzZXJ2ZXMgdGhlIHNhbWUKLSAgIGNhbGxpbmcgYW5kIHJldHVybiBjb252ZW50aW9u cywgYW5kIGhhcyB0aGUgc2FtZSB0eXBlLgotCi0gICBUaGUgR3JvdXAgRSBtb2R1bGVzIGNvbnRh aW4gYm90aCBmdW5jdGlvbnMgYW5kIGdsb2JhbCB2YXJpYWJsZXMgdGhhdAotICAgYXJlIGFjY2Vz c2VkIGJ5IG1vZHVsZXMgaW4gdGhlIG90aGVyIGdyb3Vwcy4gVGhlc2UgYXJlIG5vdyBkZXNjcmli ZWQuCi0KLSAgIChCeSB0aGUgd2F5LCBJIGdvdCB0aGlzIGxpc3QgYnkgbGlua2luZyBhbGwgdGhl IEMtS2VybWl0IG1vZHVsZXMKLSAgIHRvZ2V0aGVyIGV4Y2VwdCBja3V0aW8gYW5kIGNrdWZpby4g VGhlc2UgYXJlIHRoZSBzeW1ib2xzIHRoYXQgbGQKLSAgIHJlcG9ydGVkIGFzIHVuZGVmaW5lZC4g QnV0IHRoYXQgd2FzIGEgbG9uZyB0aW1lIGFnbywgcHJvYmFibHkgY2lyY2EKLSAgIFZlcnNpb24g Ni4pCi0KLTQuRS4xLiBHbG9iYWwgVmFyaWFibGVzCi0KLSAgIGNoYXIgKkRFTENNRDsKLSAgICAg ICAgICBQb2ludGVyIHRvIHN0cmluZyBjb250YWluaW5nIGNvbW1hbmQgZm9yIGRlbGV0aW5nIGZp bGVzLgotICAgICAgICAgIEV4YW1wbGU6IGNoYXIgKkRFTENNRCA9ICJybSAtZiAiOyAoVU5JWCkK LSAgICAgICAgICBFeGFtcGxlOiBjaGFyICpERUxDTUQgPSAiZGVsZXRlICI7IChWTVMpCi0gICAg ICAgICAgTm90ZSB0cmFpbGluZyBzcGFjZS4gRmlsZW5hbWUgaXMgY29uY2F0ZW5hdGVkIHRvIGVu ZCBvZiB0aGlzCi0gICAgICAgICAgc3RyaW5nLiBOT1RFOiBERUxDTUQgaXMgdXNlZCBvbmx5IGlu IHZlcnNpb25zIHRoYXQgZG8gbm90Ci0gICAgICAgICAgcHJvdmlkZSB0aGVpciBvd24gYnVpbHQt aW4gREVMRVRFIGNvbW1hbmQuCi0KLSAgIGNoYXIgKkRJUkNNRDsKLSAgICAgICAgICBQb2ludGVy IHRvIHN0cmluZyBjb250YWluaW5nIGNvbW1hbmQgZm9yIGxpc3RpbmcgZmlsZXMgd2hlbiBhCi0g ICAgICAgICAgZmlsZXNwZWMgaXMgZ2l2ZW4uCi0gICAgICAgICAgRXhhbXBsZTogY2hhciAqRElS Q01EID0gIi9iaW4vbHMgLWwgIjsgKFVOSVgpCi0gICAgICAgICAgRXhhbXBsZTogY2hhciAqRElS Q01EID0gImRpcmVjdG9yeSAiOyAoVk1TKQotICAgICAgICAgIE5vdGUgdHJhaWxpbmcgc3BhY2Uu IEZpbGVuYW1lIGlzIGNvbmNhdGVuYXRlZCB0byBlbmQgb2YgdGhpcwotICAgICAgICAgIHN0cmlu Zy4gTk9URTogRElSQ01EIGlzIHVzZWQgb25seSBpbiB2ZXJzaW9ucyB0aGF0IGRvIG5vdAotICAg ICAgICAgIHByb3ZpZGUgdGhlaXIgb3duIGJ1aWx0LWluIERJUkVDVE9SWSBjb21tYW5kLgotCi0g ICBjaGFyICpESVJDTTI7Ci0gICAgICAgICAgUG9pbnRlciB0byBzdHJpbmcgY29udGFpbmluZyBj b21tYW5kIGZvciBsaXN0aW5nIGZpbGVzIHdoZW4gYQotICAgICAgICAgIGZpbGVzcGVjIGlzIG5v dCBnaXZlbi4gKGN1cnJlbnRseSBub3QgdXNlZCwgaGFuZGxlZCBpbiBhbm90aGVyCi0gICAgICAg ICAgd2F5LikKLSAgICAgICAgICBFeGFtcGxlOiBjaGFyICpESVJDTUQyID0gIi9iaW4vbHMgLWxk ICoiOwotICAgICAgICAgIE5PVEU6IERJUkNNRDIgaXMgdXNlZCBvbmx5IGluIHZlcnNpb25zIHRo YXQgZG8gbm90IHByb3ZpZGUgdGhlaXIKLSAgICAgICAgICBvd24gYnVpbHQtaW4gRElSRUNUT1JZ IGNvbW1hbmQuCi0KLSAgIGNoYXIgKlBXRENNRDsKLSAgICAgICAgICBQb2ludGVyIHRvIHN0cmlu ZyBjb250YWluaW5nIGNvbW1hbmQgdG8gZGlzcGxheSBjdXJyZW50Ci0gICAgICAgICAgZGlyZWN0 b3J5LgotICAgICAgICAgIEV4YW1wbGU6IGNoYXIgKlBXRENNRCA9ICJwd2QgIjsKLSAgICAgICAg ICBOT1RFOiBQV0RDTUQgaXMgdXNlZCBvbmx5IGluIHZlcnNpb25zIHRoYXQgZG8gbm90IHByb3Zp ZGUgdGhlaXIKLSAgICAgICAgICBvd24gYnVpbHQtaW4gUFdEIGNvbW1hbmQuCi0KLSAgIGNoYXIg KlNQQUNNRDsKLSAgICAgICAgICBQb2ludGVyIHRvIGNvbW1hbmQgdG8gZGlzcGxheSBmcmVlIGRp c2sgc3BhY2UgaW4gY3VycmVudAotICAgICAgICAgIGRldmljZS9kaXJlY3RvcnkuCi0gICAgICAg ICAgRXhhbXBsZTogY2hhciAqU1BBQ01EID0gImRmIC4iOwotICAgICAgICAgIE5PVEU6IFNQQUNN RCBpcyB1c2VkIG9ubHkgaW4gdmVyc2lvbnMgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGVpcgotICAg ICAgICAgIG93biBidWlsdC1pbiBTUEFDRSBjb21tYW5kLgotCi0gICBjaGFyICpTUEFDTTI7Ci0g ICAgICAgICAgUG9pbnRlciB0byBjb21tYW5kIHRvIGRpc3BsYXkgZnJlZSBkaXNrIHNwYWNlIGlu IGFub3RoZXIKLSAgICAgICAgICBkZXZpY2UvZGlyZWN0b3J5LgotICAgICAgICAgIEV4YW1wbGU6 IGNoYXIgKlNQQUNNMiA9ICJkZiAiOwotICAgICAgICAgIE5vdGUgdHJhaWxpbmcgc3BhY2UuIERl dmljZSBvciBkaXJlY3RvcnkgbmFtZSBpcyBhZGRlZCB0byB0aGlzCi0gICAgICAgICAgc3RyaW5n LiBOT1RFOiBTUEFDTUQyIGlzIHVzZWQgb25seSBpbiB2ZXJzaW9ucyB0aGF0IGRvIG5vdAotICAg ICAgICAgIHByb3ZpZGUgdGhlaXIgb3duIGJ1aWx0LWluIFNQQUNFIGNvbW1hbmQuCi0KLSAgIGNo YXIgKlRZUENNRDsKLSAgICAgICAgICBQb2ludGVyIHRvIGNvbW1hbmQgZm9yIGRpc3BsYXlpbmcg dGhlIGNvbnRlbnRzIG9mIGEgZmlsZS4KLSAgICAgICAgICBFeGFtcGxlOiBjaGFyICpUWVBDTUQg PSAiY2F0ICI7Ci0gICAgICAgICAgTm90ZSB0cmFpbGluZyBzcGFjZS4gRGV2aWNlIG9yIGRpcmVj dG9yeSBuYW1lIGlzIGFkZGVkIHRvIHRoaXMKLSAgICAgICAgICBzdHJpbmcuIE5PVEU6IFRZUENN RCBpcyB1c2VkIG9ubHkgaW4gdmVyc2lvbnMgdGhhdCBkbyBub3QKLSAgICAgICAgICBwcm92aWRl IHRoZWlyIG93biBidWlsdC1pbiBUWVBFIGNvbW1hbmQuCi0KLSAgIGNoYXIgKldIT0NNRDsKLSAg ICAgICAgICBQb2ludGVyIHRvIGNvbW1hbmQgZm9yIGRpc3BsYXlpbmcgbG9nZ2VkLWluIHVzZXJz LgotICAgICAgICAgIEV4YW1wbGU6IGNoYXIgKldIT0NNRCA9ICJ3aG8gIjsKLSAgICAgICAgICBO b3RlIHRyYWlsaW5nIHNwYWNlLiBTcGVjaWZpYyB1c2VyIG5hbWUgbWF5IGJlIGFkZGVkIHRvIHRo aXMKLSAgICAgICAgICBzdHJpbmcuCi0KLSAgIGludCBiYWNrZ3JkID0gMDsKLSAgICAgICAgICBG bGFnIGZvciB3aGV0aGVyIHByb2dyYW0gaXMgcnVubmluZyBpbiBmb3JlZ3JvdW5kICgwKSBvcgot ICAgICAgICAgIGJhY2tncm91bmQgKG5vbnplcm8pLiBCYWNrZ3JvdW5kIG9wZXJhdGlvbiBpbXBs aWVzIHRoYXQgc2NyZWVuCi0gICAgICAgICAgb3V0cHV0IHNob3VsZCBub3QgYmUgZG9uZSBhbmQg dGhhdCBhbGwgZXJyb3JzIHNob3VsZCBiZSBmYXRhbC4KLQotICAgaW50IGNreGVjaDsKLSAgICAg ICAgICBGbGFnIGZvciB3aG8gaXMgdG8gZWNobyBjb25zb2xlIHR5cGVpbjoKLSAgICAgICAgICAx OiBUaGUgcHJvZ3JhbSAoc3lzdGVtIGlzIG5vdCBlY2hvaW5nKS4KLSAgICAgICAgICAwOiBUaGUg T1MsIGZyb250IGVuZCwgdGVybWluYWwsIGV0YyAobm90IHRoaXMgcHJvZ3JhbSkuCi0KLSAgIGNo YXIgKmNreHN5czsKLSAgICAgICAgICBQb2ludGVyIHRvIHN0cmluZyB0aGF0IG5hbWVzIHRoZSBj b21wdXRlciBhbmQgb3BlcmF0aW5nIHN5c3RlbS4KLSAgICAgICAgICBFeGFtcGxlOiBjaGFyICpj a3hzeXMgPSAiIE5lWFQgTWFjaCAxLjAiOwotICAgICAgICAgIFRlbGxzIHdoYXQgY29tcHV0ZXIg c3lzdGVtIGNreHYgYXBwbGllcyB0by4gSW4gVU5JWCBLZXJtaXQsIHRoaXMKLSAgICAgICAgICB2 YXJpYWJsZSBpcyBhbHNvIHVzZWQgdG8gcHJpbnQgdGhlIHByb2dyYW0gaGVyYWxkLCBhbmQgaW4g dGhlCi0gICAgICAgICAgU0hPVyBWRVJTSU9OIGNvbW1hbmQuCi0KLSAgIGNoYXIgKmNreHY7Ci0g ICAgICAgICAgUG9pbnRlciB0byB2ZXJzaW9uL2VkaXQgaW5mbyBvZiBjaz90aW8uYyBtb2R1bGUu Ci0gICAgICAgICAgRXhhbXBsZTogY2hhciAqY2t4diA9ICJVTklYIENvbW11bmljYXRpb25zIFN1 cHBvcnQsIDYuMC4xNjksIDYKLSAgICAgICAgICBTZXAgOTYiOwotICAgICAgICAgIFVzZWQgYnkg U0hPVyBWRVJTSU9OIGNvbW1hbmQuCi0KLSAgIGNoYXIgKmNrenN5czsKLSAgICAgICAgICBMaWtl IGNreHN5cywgYnV0IGJyaWVmZXIuCi0gICAgICAgICAgRXhhbXBsZTogY2hhciAqY2t6c3lzID0g IiA0LjMgQlNEIjsKLSAgICAgICAgICBUZWxscyB3aGF0IHBsYXRmb3JtIGNrenYgYXBwbGllcyB0 by4gVXNlZCBieSB0aGUgU0hPVyBWRVJTSU9OCi0gICAgICAgICAgY29tbWFuZC4KLQotICAgY2hh ciAqY2t6djsKLSAgICAgICAgICBQb2ludGVyIHRvIHZlcnNpb24vZWRpdCBpbmZvIG9mIGNrP2Zp by5jIG1vZHVsZS4KLSAgICAgICAgICBFeGFtcGxlOiBjaGFyICpja3p2ID0gIlVOSVggRmlsZSBz dXBwb3J0LCA2LjAuMTEzLCA2IFNlcCA5NiI7Ci0gICAgICAgICAgVXNlZCBieSBTSE9XIFZFUlNJ T04gY29tbWFuZC4KLQotICAgaW50IGRmZmxvdzsKLSAgICAgICAgICBEZWZhdWx0IGZsb3cgY29u dHJvbC4gMCA9IG5vbmUsIDEgPSBYb24vWG9mZiwgLi4uIChzZWUgRkxPX3h4eAotICAgICAgICAg IHN5bWJvbHMgaW4gY2tjZGViLmgpCi0gICAgICAgICAgU2V0IGJ5IEdyb3VwIEUgbW9kdWxlLiBV c2VkIGJ5IFsxMjVdY2tjbWFpLmMgdG8gaW5pdGlhbGl6ZSBmbG93Ci0gICAgICAgICAgY29udHJv bCB2YXJpYWJsZS4KLQotICAgaW50IGRmbG9jOwotICAgICAgICAgIERlZmF1bHQgbG9jYXRpb24u IDAgPSByZW1vdGUsIDEgPSBsb2NhbC4gU2V0IGJ5IEdyb3VwIEUgbW9kdWxlLgotICAgICAgICAg IFVzZWQgYnkgY2tjbWFpLmMgdG8gaW5pdGlhbGl6ZSBsb2NhbCB2YXJpYWJsZS4gVXNlZCBpbiB2 YXJpb3VzCi0gICAgICAgICAgcGxhY2VzIGluIHRoZSB1c2VyIGludGVyZmFjZS4KLQotICAgaW50 IGRmcHJ0eTsKLSAgICAgICAgICBEZWZhdWx0IHBhcml0eS4gMCA9IG5vbmUsICdlJyA9IGV2ZW4s ICdvJyA9IG9kZCwgJ20nID0gbWFyaywgJ3MnCi0gICAgICAgICAgPSBzcGFjZS4gU2V0IGJ5IEdy b3VwIEUgbW9kdWxlLiBVc2VkIGJ5IGNrY21haS5jIHRvIGluaXRpYWxpemUKLSAgICAgICAgICBw YXJpdHkgdmFyaWFibGUuCi0KLSAgIGNoYXIgKmRmdHR5OwotICAgICAgICAgIERlZmF1bHQgY29t bXVuaWNhdGlvbiBkZXZpY2UuIFNldCBieSBHcm91cCBFIG1vZHVsZS4gVXNlZCBpbgotICAgICAg ICAgIG1hbnkgcGxhY2VzLiBUaGlzIHZhcmlhYmxlIHNob3VsZCBiZSBpbml0aWFsaXplZCB0aGUg c3ltYm9sCi0gICAgICAgICAgQ1RUTkFNLCB3aGljaCBpcyBkZWZpbmVkIGluIGNrY2RlYi5oLCBl LmcuIGFzICIvZGV2L3R0eSIgZm9yCi0gICAgICAgICAgVU5JWCwgIlRUOiIgZm9yIFZNUywgZXRj LiBFeGFtcGxlOiBjaGFyICpkZnR0eSA9IENUVE5BTTsKLQotICAgY2hhciAqbXRjaHNbXTsKLSAg ICAgICAgICBBcnJheSBvZiBzdHJpbmcgcG9pbnRlcnMgdG8gZmlsZW5hbWVzIHRoYXQgbWF0Y2hl ZCB0aGUgbW9zdAotICAgICAgICAgIHJlY2VudCB3aWxkY2FyZCBtYXRjaCwgaS5lLiB0aGUgbW9z dCByZWNlbnQgY2FsbCB0byB6eHBhbmQoKS4KLSAgICAgICAgICBVc2VkIChhdCBsZWFzdCkgYnkg Y29tbWFuZCBwYXJzaW5nIHBhY2thZ2UgZm9yIHBhcnRpYWwgZmlsZW5hbWUKLSAgICAgICAgICBj b21wbGV0aW9uLgotCi0gICBpbnQgdGlsZGVfZXhwYW5kOwotICAgICAgICAgIEZsYWcgZm9yIHdo ZXRoZXIgdG8gYXR0ZW1wdCB0byBleHBhbmQgbGVhZGluZyB0aWxkZXMgaW4KLSAgICAgICAgICBk aXJlY3RvcnkgbmFtZXMgKHVzZWQgaW4gVU5JWCBvbmx5LCBhbmQgdGhlbiBvbmx5IHdoZW4gdGhl Ci0gICAgICAgICAgc3ltYm9sIERUSUxERSBpcyBkZWZpbmVkLgotCi0gICBpbnQgdHRucHJvdG87 Ci0gICAgICAgICAgVGhlIHByb3RvY29sIGJlaW5nIHVzZWQgdG8gY29tbXVuaWNhdGUgb3ZlciBh IG5ldHdvcmsgZGV2aWNlLgotICAgICAgICAgIFZhbHVlcyBhcmUgZGVmaW5lZCBpbiBja2NuZXQu aC4gRXhhbXBsZTogTlBfVEVMTkVUIGlzIG5ldHdvcmsKLSAgICAgICAgICBwcm90b2NvbCAidGVs bmV0Ii4KLQotICAgaW50IG1heG5hbTsKLSAgICAgICAgICBUaGUgbWF4aW11bSBsZW5ndGggZm9y IGEgZmlsZW5hbWUsIGV4Y2x1c2l2ZSBvZiBhbnkgZGV2aWNlIG9yCi0gICAgICAgICAgZGlyZWN0 b3J5IGluZm9ybWF0aW9uLCBpbiB0aGUgZm9ybWF0IG9mIHRoZSBob3N0IG9wZXJhdGluZwotICAg ICAgICAgIHN5c3RlbS4KLQotICAgaW50IG1heHBhdGg7Ci0gICAgICAgICAgVGhlIG1heGltdW0g bGVuZ3RoIGZvciBhIGZ1bGx5IHNwZWNpZmllZCBmaWxlbmFtZSwgaW5jbHVkaW5nCi0gICAgICAg ICAgZGV2aWNlIGRlc2lnbmF0b3IsIGRpcmVjdG9yeSBuYW1lLCBuZXR3b3JrIG5vZGUgbmFtZSwg ZXRjLCBpbgotICAgICAgICAgIHRoZSBmb3JtYXQgb2YgdGhlIGhvc3Qgb3BlcmF0aW5nIHN5c3Rl bSwgYW5kIGluY2x1ZGluZyBhbGwKLSAgICAgICAgICBwdW5jdHVhdGlvbi4KLQotICAgaW50IHR0 eWZkOwotICAgICAgICAgIEZpbGUgZGVzY3JpcHRvciBvZiB0aGUgY29tbXVuaWNhdGlvbiBkZXZp Y2UuIC0xIGlmIHRoZXJlIGlzIG5vCi0gICAgICAgICAgb3BlbiBvciB1c2FibGUgY29ubmVjdGlv biwgaW5jbHVkaW5nIHdoZW4gQy1LZXJtaXQgaXMgaW4gcmVtb3RlCi0gICAgICAgICAgbW9kZS4g U2luY2UgdGhpcyBpcyBub3QgaW1wbGVtZW50ZWQgZXZlcnl3aGVyZSwgcmVmZXJlbmNlcyB0byBp dAotICAgICAgICAgIGFyZSBpbiAjaWZkZWYgQ0tfVFRZRkQuLiNlbmRpZi4KLQotICAgWyBbMTI2 XUNvbnRlbnRzIF0gWyBbMTI3XUMtS2VybWl0IF0gWyBbMTI4XUtlcm1pdCBIb21lIF0KLQotNC5F LjIuIEZ1bmN0aW9ucwotCi0gICBUaGVzZSBhcmUgZGl2aWRlZCBpbnRvIHRocmVlIGNhdGVnb3Jp ZXM6IGZpbGUtcmVsYXRlZCBmdW5jdGlvbnMgKEIuMSksCi0gICBjb21tdW5pY2F0aW9uIGZ1bmN0 aW9ucyAoQi4yKSwgYW5kIG1pc2NlbGxhbmVvdXMgZnVuY3Rpb25zIChCLjMpLgotCi00LkUuMi4x LiBGaWxlLVJlbGF0ZWQgRnVuY3Rpb25zCi0KLSAgIEluIG1vc3QgaW1wbGVtZW50YXRpb25zLCB0 aGVzZSBhcmUgY29sbGVjdGVkIHRvZ2V0aGVyIGludG8gYSBtb2R1bGUKLSAgIGNhbGxlZCBjaz9m aW8uYywgd2hlcmUgPyA9ICJ1IiAoWzEyOV1ja3V0aW8uYyBmb3IgVW5peCksICJ2IgotICAgKFsx MzBdY2t2dGlvLmMgZm9yIFZNUyksIFsxMzFdZXRjLiBUbyBiZSB0b3RhbGx5IHBsYXRmb3JtLWlu ZGVwZW5kZW50LAotICAgQy1LZXJtaXQgbWFpbnRhaW5zIGl0cyBvd24gZmlsZSBudW1iZXJzLCBh bmQgcHJvdmlkZXMgdGhlIGZ1bmN0aW9ucwotICAgZGVzY3JpYmVkIGluIHRoaXMgc2VjdGlvbiB0 byBkZWFsIHdpdGggdGhlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGVtLgotICAgVGhlIGZpbGUg bnVtYmVycyBhcmUgcmVmZXJyZWQgdG8gc3ltYm9saWNhbGx5LCBhbmQgYXJlIGRlZmluZWQgYXMK LSAgIGZvbGxvd3MgaW4gY2tja2VyLmg6Ci0KLSAgI2RlZmluZSBaQ1RFUk0gICAgICAwICAgICAg ICAgICAvKiBDb25zb2xlIHRlcm1pbmFsICovCi0gICNkZWZpbmUgWlNURElPICAgICAgMSAgICAg ICAgICAgLyogU3RhbmRhcmQgaW5wdXQvb3V0cHV0ICovCi0gICNkZWZpbmUgWklGSUxFICAgICAg MiAgICAgICAgICAgLyogQ3VycmVudCBpbnB1dCBmaWxlIGZvciBTRU5EIGNvbW1hbmQgKi8KLSAg I2RlZmluZSBaT0ZJTEUgICAgICAzICAgICAgICAgICAvKiBDdXJyZW50IG91dHB1dCBmaWxlIGZv ciBSRUNFSVZFIGNvbW1hbmQgKi8KLSAgI2RlZmluZSBaREZJTEUgICAgICA0ICAgICAgICAgICAv KiBDdXJyZW50IGRlYnVnZ2luZyBsb2cgZmlsZSAqLwotICAjZGVmaW5lIFpURklMRSAgICAgIDUg ICAgICAgICAgIC8qIEN1cnJlbnQgdHJhbnNhY3Rpb24gbG9nIGZpbGUgKi8KLSAgI2RlZmluZSBa UEZJTEUgICAgICA2ICAgICAgICAgICAvKiBDdXJyZW50IHBhY2tldCBsb2cgZmlsZSAqLwotICAj ZGVmaW5lIFpTRklMRSAgICAgIDcgICAgICAgICAgIC8qIEN1cnJlbnQgc2Vzc2lvbiBsb2cgZmls ZSAqLwotICAjZGVmaW5lIFpTWVNGTiAgICAgIDggICAgICAgICAgIC8qIElucHV0IGZyb20gYSBz eXN0ZW0gZnVuY3Rpb24gKHBpcGUpICovCi0gICNkZWZpbmUgWlJGSUxFICAgICAgOSAgICAgICAg ICAgLyogTG9jYWwgZmlsZSBmb3IgUkVBRCBjb21tYW5kICovICAoTkVXKQotICAjZGVmaW5lIFpX RklMRSAgICAgMTAgICAgICAgICAgIC8qIExvY2FsIGZpbGUgZm9yIFdSSVRFIGNvbW1hbmQgKi8g KE5FVykKLSAgI2RlZmluZSBaTUZJTEUgICAgIDExICAgICAgICAgICAvKiBBdXhpbGlhcnkgZmls ZSBmb3IgaW50ZXJuYWwgdXNlICovIChORVcpCi0gICNkZWZpbmUgWk5GSUxTICAgICAxMiAgICAg ICAgICAgLyogSG93IG1hbnkgZGVmaW5lZCBmaWxlIG51bWJlcnMgKi8KLQotICAgSW4gdGhlIGRl c2NyaXB0aW9ucyBiZWxvdywgZm4gcmVmZXJzIHRvIGEgZmlsZW5hbWUsIGFuZCBuIHJlZmVycyB0 byBvbmUKLSAgIG9mIHRoZXNlIGZpbGUgbnVtYmVycy4gRnVuY3Rpb25zIGFyZSBvZiB0eXBlIGlu dCB1bmxlc3Mgb3RoZXJ3aXNlCi0gICBub3RlZCwgYW5kIGFyZSBsaXN0ZWQgbW9zdGx5IGFscGhh YmV0aWNhbGx5LgotCi0gICBpbnQKLSAgICAgICAgICBjaGtmbihuKSBpbnQgbjsKLSAgICAgICAg ICBDaGVja3MgdGhlIGZpbGUgbnVtYmVyIG4uIFJldHVybnM6Ci0gICAgICAgICAgIC0xOiBGaWxl IG51bWJlciBuIGlzIG91dCBvZiByYW5nZQotICAgICAgICAgICAgMDogbiBpcyBpbiByYW5nZSwg YnV0IGZpbGUgaXMgbm90IG9wZW4KLSAgICAgICAgICAgIDE6IG4gaW4gcmFuZ2UgYW5kIGZpbGUg aXMgb3BlbgotCi0gICBpbnQKLSAgICAgICAgICBpc3dpbGQoZmlsc3BlYykgY2hhciAqZmlsZXNw ZWM7Ci0gICAgICAgICAgQ2hlY2tzIGlmIHRoZSBmaWxlIHNwZWNpZmljYXRpb24gaXMgIndpbGQi LCBpLmUuIGNvbnRhaW5zCi0gICAgICAgICAgbWV0YWNoYXJhY3RlcnMgb3Igb3RoZXIgbm90YXRp b25zIGludGVuZGVkIHRvIG1hdGNoIG11bHRpcGxlCi0gICAgICAgICAgZmlsZW5hbWVzLiBSZXR1 cm5zOgotICAgICAgICAgICAgMDogbm90IHdpbGQKLSAgICAgICAgICAgIDE6IHdpbGQuCi0KLSAg IGludAotICAgICAgICAgIGlzZGlyKHN0cmluZykgY2hhciAqc3RyaW5nOwotICAgICAgICAgIENo ZWNrcyBpZiB0aGUgc3RyaW5nIGlzIHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGRpcmVjdG9yeS4g VGhlCi0gICAgICAgICAgaWRlYSBpcyB0byBjaGVjayB3aGV0aGVyIHRoZSBzdHJpbmcgY2FuIGJl ICJjZCdkIiB0bywgc28gaW4gc29tZQotICAgICAgICAgIGNhc2VzIChlLmcuIERPUykgaXQgbWln aHQgYWxzbyBpbmRpY2F0ZSBhbnkgZmlsZSBzdHJ1Y3R1cmVkCi0gICAgICAgICAgZGV2aWNlLCBz dWNoIGFzIGEgZGlzayBkcml2ZSAobGlrZSBBOikuIE90aGVyIG5vbnplcm8gcmV0dXJucwotICAg ICAgICAgIGluZGljYXRlIHN5c3RlbS1kZXBlbmRlbnQgaW5mb3JtYXRpb247IGUuZy4gaW4gVk1T Ci0gICAgICAgICAgaXNkaXIoIlsuRk9PXSIpIHJldHVybnMgMSBidXQgaXNkaXIoIkZPTy5ESVI7 MSIpIHJldHVybnMgMiB0bwotICAgICAgICAgIGluZGljYXRlIHRoZSBkaXJlY3RvcnktZmlsZSBu YW1lIGlzIGluIGEgZm9ybWF0IHRoYXQgbmVlZHMKLSAgICAgICAgICBjb252ZXJzaW9uIGJlZm9y ZSBpdCBjYW4gYmUgY29tYmluZWQgd2l0aCBhIGZpbGVuYW1lLiBSZXR1cm5zOgotICAgICAgICAg ICAgMDogbm90IGEgZGlyZWN0b3J5IChpbmNsdWRpbmcgYW55IGtpbmQgb2YgZXJyb3IpCi0gICAg ICAgICAgICAxOiBpdCBpcyBhbiBleGlzdGluZyBkaXJlY3RvcnkKLQotICAgY2hhciAqCi0gICAg ICAgICAgemZjZGF0KG5hbWUpIGNoYXIgKm5hbWU7Ci0gICAgICAgICAgUmV0dXJucyBtb2RpZmlj YXRpb24gKHByZWZlcmFibHksIG90aGVyd2lzZSBjcmVhdGlvbikgZGF0ZS90aW1lCi0gICAgICAg ICAgb2YgZmlsZSB3aG9zZSBuYW1lIGlzIGdpdmVuIGluIHRoZSBhcmd1bWVudCBzdHJpbmcuIFJl dHVybiB2YWx1ZQotICAgICAgICAgIGlzIGEgcG9pbnRlciB0byBhIHN0cmluZyBvZiB0aGUgZm9y bSB5eXl5bW1kZCBoaDptbTpzcywgZm9yCi0gICAgICAgICAgZXhhbXBsZSAxOTkzMTIzMSAyMzo1 OTo1OSwgd2hpY2ggcmVwcmVzZW50cyB0aGUgbG9jYWwgdGltZSAobm8KLSAgICAgICAgICB0aW1l em9uZSBvciBkYXlsaWdodCBzYXZpbmdzIHRpbWUgZmluYWdsaW5nIHJlcXVpcmVkKS4gUmV0dXJu cwotICAgICAgICAgIHRoZSBudWxsIHN0cmluZyAoIiIpIG9uIGZhaWx1cmUuIFRoZSB0ZXh0IHBv aW50ZWQgdG8gYnkgdGhlCi0gICAgICAgICAgc3RyaW5nIHBvaW50ZXIgbWlnaHQgYmUgaW4gYSBz dGF0aWMgYnVmZmVyLCBhbmQgc28gc2hvdWxkIGJlCi0gICAgICAgICAgY29waWVkIHRvIGEgc2Fm ZSBwbGFjZSBieSB0aGUgY2FsbGVyIGJlZm9yZSBhbnkgc3Vic2VxdWVudCBjYWxscwotICAgICAg ICAgIHRvIHRoaXMgZnVuY3Rpb24uCi0KLSAgIHN0cnVjdCB6Zm5mcCAqCi0gICAgICAgICAgemZu cWZwKGZuLCBidWZsZW4sIGJ1ZikgY2hhciAqIGZuOyBpbnQgYnVmbGVuOyBjaGFyICogYnVmOwot ICAgICAgICAgIEdpdmVuIHRoZSBmaWxlbmFtZSBmbiwgdGhlIGNvcnJlc3BvbmRpbmcgZnVsbHkg cXVhbGlmaWVkLAotICAgICAgICAgIGFic29sdXRlIGZpbGVuYW1lIGlzIHBsYWNlZCBpbnRvIHRo ZSBidWZmZXIgYnVmLCB3aG9zZSBsZW5ndGggaXMKLSAgICAgICAgICBidWZsZW4uIE9uIGZhaWx1 cmUgcmV0dXJucyBhIE5VTEwgcG9pbnRlci4gT24gc3VjY2VzcyByZXR1cm5zIGEKLSAgICAgICAg ICBwb2ludGVyIHRvIGEgc3RydWN0IHpmbmZwIGNvbnRhaW5pbmcgcG9pbnRlcnMgdG8gdGhlIGZ1 bGwKLSAgICAgICAgICBwYXRobmFtZSBhbmQgdG8ganVzdCB0aGUgZmlsZW5hbWUsIGFuZCBhbiBp bnQgZ2l2aW5nIHRoZSBsZW5ndGgKLSAgICAgICAgICBvZiB0aGUgZnVsbCBwYXRobmFtZS4gQWxs IHJlZmVyZW5jZXMgdG8gdGhpcyBmdW5jdGlvbiBpbgotICAgICAgICAgIG1haW5saW5lIGNvZGUg bXVzdCBiZSBwcm90ZWN0ZWQgYnkgI2lmZGVmIFpGTlFGUC4uI2VuZGlmLAotICAgICAgICAgIGJl Y2F1c2UgaXQgaXMgbm90IHByZXNlbnQgaW4gYWxsIG9mIHRoZSBjaypmaW8uYyBtb2R1bGVzLiBT byBpZgotICAgICAgICAgIHlvdSBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiBpbiBhIHZlcnNpb24g dGhhdCBkaWQgbm90IGhhdmUgaXQKLSAgICAgICAgICBiZWZvcmUsIGJlIHN1cmUgdG8gYWRkICNk ZWZpbmUgWkZOUUZQIGluIHRoZSBhcHByb3ByaWF0ZSBzcG90IGluCi0gICAgICAgICAgY2tjZGVi Lmggb3IgaW4gdGhlIGJ1aWxkLXByb2NlZHVyZSBDRkxBR1MuCi0KLSAgIGludAotICAgICAgICAg IHpjbXBmbihzMSxzMikgY2hhciAqIHMyLCAqIHMyOwotICAgICAgICAgIENvbXBhcmVzIHR3byBm aWxlbmFtZXMgdG8gc2VlIGlmIHRoZXkgcmVmZXIgdG8gdGhlIHNhbWUuCi0gICAgICAgICAgSW50 ZXJuYWxseSwgdGhlIGFyZ3VtZW50cyBjYW4gYmUgY29udmVydGVkIHRvIGZ1bGx5IHF1YWxpZmll ZAotICAgICAgICAgIHBhdGhuYW1lcywgZS5nLiB3aXRoIHpmbnFmcCgpLCByZWFscGF0aCgpLCBv ciBzb21lc3VjaC4gSW4gVW5peAotICAgICAgICAgIG9yIG90aGVyIHN5c3RlbXMgd2hlcmUgc3lt Ym9saWMgbGlua3MgZXhpc3QsIHRoZSBsaW5rIHNob3VsZCBiZQotICAgICAgICAgIHJlc29sdmVk IGJlZm9yZSBtYWtpbmcgdGhlIGNvbXBhcmlzb24gb3IgbG9va2luZyBhdCB0aGUgaW5vZGVzLgot ICAgICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgICAwOiBGaWxlcyBhcmUgbm90IGlkZW50aWNh bC4KLSAgICAgICAgICAgIDE6IEZpbGVzIGFyZSBpZGVudGljYWwuCi0KLSAgIGludAotICAgICAg ICAgIHpmc2Vlayhwb3MpIGxvbmcgcG9zOwotICAgICAgICAgIFBvc2l0aW9ucyB0aGUgaW5wdXQg cG9pbnRlciBvbiB0aGUgY3VycmVudCBpbnB1dCBmaWxlIHRvIHRoZQotICAgICAgICAgIGdpdmVu IHBvc2l0aW9uLiBUaGUgcG9zIGFyZ3VtZW50IGlzIDAtYmFzZWQsIHRoZSBvZmZzZXQKLSAgICAg ICAgICAoZGlzdGFuY2UgaW4gYnl0ZXMpIGZyb20gYmVnaW5uaW5nIG9mIHRoZSBmaWxlLiBOZWVk ZWQgZm9yCi0gICAgICAgICAgUkVTRU5ELCBQU0VORCwgYW5kIG90aGVyIHJlY292ZXJ5IG9wZXJh dGlvbnMuIFRoaXMgZnVuY3Rpb24gaXMKLSAgICAgICAgICBub3QgbmVjZXNzYXJpbHkgcG9zc2li bGUgb24gYWxsIHN5c3RlbXMsIGUuZy4gcmVjb3JkLW9yaWVudGVkCi0gICAgICAgICAgc3lzdGVt cy4gSXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBvbiBiaW5hcnkgZmlsZXMgKGkuZS4gZmlsZXMgd2UK LSAgICAgICAgICBhcmUgc2VuZGluZyBpbiBiaW5hcnkgbW9kZSkgYW5kIHN0cmVhbS1vcmllbnRl ZCBmaWxlIHN5c3RlbXMuCi0gICAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICAgLTE6IG9uIGZh aWx1cmUuCi0gICAgICAgICAgICAwOiBPbiBzdWNjZXNzLgotCi0gICBpbnQKLSAgICAgICAgICB6 Y2hkaXIoZGlybmFtKSBjaGFyICpkaXJuYW07Ci0gICAgICAgICAgQ2hhbmdlcyBjdXJyZW50IG9y IGRlZmF1bHQgZGlyZWN0b3J5IHRvIHRoZSBvbmUgZ2l2ZW4gaW4gZGlybmFtLgotICAgICAgICAg IFJldHVybnM6Ci0gICAgICAgICAgICAwOiBPbiBmYWlsdXJlLgotICAgICAgICAgICAgMTogb24g c3VjY2Vzcy4KLQotICAgbG9uZwotICAgICAgICAgIHpjaGtpKGZuKSBjaGFyICpmbjsKLSAgICAg ICAgICBDaGVjayB0byBzZWUgaWYgZmlsZSB3aXRoIG5hbWUgZm4gaXMgYSByZWd1bGFyLCByZWFk YWJsZSwKLSAgICAgICAgICBleGlzdGluZyBmaWxlLCBzdWl0YWJsZSBmb3IgS2VybWl0IHRvIHNl bmQgLS0gbm90IGEgZGlyZWN0b3J5LAotICAgICAgICAgIG5vdCBhIHN5bWJvbGljIGxpbmssIGV0 Yy4gUmV0dXJuczoKLSAgICAgICAgICAgLTM6IGlmIGZpbGUgZXhpc3RzIGJ1dCBpcyBub3QgYWNj ZXNzaWJsZSAoZS5nLiByZWFkLXByb3RlY3RlZCk7Ci0gICAgICAgICAgIC0yOiBpZiBmaWxlIGV4 aXN0cyBidXQgaXMgbm90IG9mIGEgcmVhZGFibGUgdHlwZSAoZS5nLiBhCi0gICAgICAgICAgZGly ZWN0b3J5KTsKLSAgICAgICAgICAgLTE6IG9uIGVycm9yIChlLmcuIGZpbGUgZG9lcyBub3QgZXhp c3QsIG9yIGZuIGlzIGdhcmJhZ2UpOwotICAgICAgICAgID49MDogKGxlbmd0aCBvZiBmaWxlKSBp ZiBmaWxlIGV4aXN0cyBhbmQgaXMgcmVhZGFibGUuCi0gICAgICAgICAgQWxzbyBzZWUgaXNkaXIo KSwgemdldGZzKCkuCi0KLSAgIGludAotICAgICAgICAgIHpjaGtwaWQocGlkKSB1bnNpZ25lZCBs b25nIHBpZDsKLSAgICAgICAgICBSZXR1cm5zOgotICAgICAgICAgICAgMTogSWYgdGhlIGdpdmVu IHByb2Nlc3MgSUQgKGUuZy4gcGlkIGluIFVOSVgpIGlzIHZhbGlkIGFuZAotICAgICAgICAgIGFj dGl2ZQotICAgICAgICAgICAgMDogb3RoZXJ3aXNlLgotCi0gICBsb25nCi0gICAgICAgICAgemdl dGZzKGZuKSBjaGFyICpmbjsKLSAgICAgICAgICBHZXRzIHRoZSBzaXplIG9mIHRoZSBnaXZlbiBm aWxlLCByZWdhcmRsZXNzIG9mIGFjY2Vzc2liaWxpdHkuCi0gICAgICAgICAgVXNlZCBmb3IgZGly ZWN0b3J5IGxpc3RpbmdzLiBVbmxpa2UgemNoa2koKSwgc2hvdWxkIHJldHVybiB0aGUKLSAgICAg ICAgICBzaXplIG9mIGFueSBraW5kIG9mIGZpbGUsIGV2ZW4gYSBkaXJlY3RvcnkuIHpnZXRmcygp IGFsc28gc2hvdWxkCi0gICAgICAgICAgc2VydmUgYXMgYSBtaW5pICJnZXQgZmlsZSBpbmZvIiBm dW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHVudGlsCi0gICAgICAgICAgd2UgZGVzaWduIGEgYmV0 dGVyIG9uZSwgYnkgYWxzbyBzZXR0aW5nIHNvbWUgZ2xvYmFsIHZhcmlhYmxlczoKLSAgICAgICAg ICAgIGludCB6Z2ZzX2xpbmsgICA9IDEvMCA9IGZpbGUgaXMgKG5vdCkgYSBzeW1ib2xpYyBsaW5r LgotICAgICAgICAgICAgaW50IHpnZnNfZGlyICAgID0gMS8wID0gZmlsZSBpcyAobm90KSBhIGRp cmVjdG9yeS4KLSAgICAgICAgICAgIGNoYXIgbGlua25hbWVbXSA9IGlmIHpnZnNfbGluayAhPSAw LCBuYW1lIG9mIGZpbGUgbGluayBwb2ludHMKLSAgICAgICAgICB0by4KLSAgICAgICAgICBSZXR1 cm5zOgotICAgICAgICAgICAtMTogb24gZXJyb3IgKGUuZy4gZmlsZSBkb2VzIG5vdCBleGlzdCwg b3IgZm4gaXMgZ2FyYmFnZSk7Ci0gICAgICAgICAgPj0wOiAobGVuZ3RoIG9mIGZpbGUpIGlmIGZp bGUgZXhpc3RzIGFuZCBpcyByZWFkYWJsZS4KLQotICAgaW50Ci0gICAgICAgICAgemNoa28oZm4p IGNoYXIgKmZuOwotICAgICAgICAgIENoZWNrcyB0byBzZWUgaWYgYSBmaWxlIG9mIHRoZSBnaXZl biBuYW1lIGNhbiBiZSBjcmVhdGVkLgotICAgICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgIC0x OiBpZiBmaWxlIGNhbm5vdCBiZSBjcmVhdGVkLCBvciBvbiBhbnkga2luZCBvZiBlcnJvci4KLSAg ICAgICAgICAgIDA6IGlmIGZpbGUgY2FuIGJlIGNyZWF0ZWQuCi0KLSAgIGludAotICAgICAgICAg IHpjaGtzcGEoZm4sbGVuKSBjaGFyICpmOyBsb25nIGxlbjsKLSAgICAgICAgICBDaGVja3MgdG8g c2VlIGlmIHRoZXJlIGlzIHN1ZmZpY2llbnQgc3BhY2UgdG8gc3RvcmUgdGhlIGZpbGUKLSAgICAg ICAgICBuYW1lZCBmbiwgd2hpY2ggaXMgbGVuIGJ5dGVzIGxvbmcuIElmIHlvdSBjYW4ndCB3cml0 ZSBhIGZ1bmN0aW9uCi0gICAgICAgICAgdG8gZG8gdGhpcywgdGhlbiBqdXN0IG1ha2UgYSBkdW1t eSB0aGF0IGFsd2F5cyByZXR1cm5zIDE7IGhpZ2hlcgotICAgICAgICAgIGxldmVsIGNvZGUgd2ls bCByZWNvdmVyIGZyb20gZGlzay1mdWxsIGVycm9ycy4gVGhlIHJlY2VpdmluZwotICAgICAgICAg IEtlcm1pdCB1c2VzIHRoaXMgZnVuY3Rpb24gdG8gcmVmdXNlIGFuIGluY29taW5nIGZpbGUgYmFz ZWQgb24KLSAgICAgICAgICBpdHMgc2l6ZSwgdmlhIHRoZSBhdHRyaWJ1dGUgbWVjaGFuaXNtLiBS ZXR1cm5zOgotICAgICAgICAgICAtMTogb24gZXJyb3IuCi0gICAgICAgICAgICAwOiBpZiB0aGVy ZSBpcyBub3QgZW5vdWdoIHNwYWNlLgotICAgICAgICAgICAgMTogaWYgdGhlcmUgaXMgZW5vdWdo IHNwYWNlLgotCi0gICBpbnQKLSAgICAgICAgICB6Y2hpbihuLGMpIGludCBuOyBpbnQgKmM7Ci0g ICAgICAgICAgR2V0cyBhIGNoYXJhY3RlciBmcm9tIGZpbGUgbnVtYmVyIG4sIHJldHVybiBpdCBp biBjIChjYWxsIHdpdGgKLSAgICAgICAgICAmYykuIFJldHVybnM6Ci0gICAgICAgICAgIC0xOiBv biBmYWlsdXJlLCBpbmNsdWRpbmcgRU9GLgotICAgICAgICAgICAgMDogb24gc3VjY2VzcyB3aXRo IGNoYXJhY3RlciBpbiBjLgotCi0gICBpbnQKLSAgICAgICAgICB6Y2hvdXQobixjKSBpbnQgbjsg Y2hhciBjOwotICAgICAgICAgIFdyaXRlcyB0aGUgY2hhcmFjdGVyIGMgdG8gZmlsZSBudW1iZXIg bi4gUmV0dXJuczoKLSAgICAgICAgICAgLTE6IG9uIGVycm9yLgotICAgICAgICAgICAgMDogb24g c3VjY2Vzcy4KLQotICAgaW50Ci0gICAgICAgICAgemNsb3NlKG4pIGludCBuOwotICAgICAgICAg IENsb3NlcyBmaWxlIG51bWJlciBuLiBSZXR1cm5zOgotICAgICAgICAgICAtMTogb24gZXJyb3Iu Ci0gICAgICAgICAgICAxOiBvbiBzdWNjZXNzLgotCi0gICBpbnQKLSAgICAgICAgICB6ZGVsZXQo Zm4pIGNoYXIgKm5hbWU7Ci0gICAgICAgICAgQXR0ZW1wdHMgdG8gZGVsZXRlIChyZW1vdmUsIGVy YXNlKSB0aGUgbmFtZWQgZmlsZS4gUmV0dXJuczoKLSAgICAgICAgICAgLTE6IG9uIGVycm9yLgot ICAgICAgICAgICAgMTogaWYgZmlsZSB3YXMgZGVsZXRlZCBzdWNjZXNzZnVsbHkuCi0KLSAgIGNo YXIgKgotICAgICAgICAgIHpncGVybShjaGFyICogZikKLSAgICAgICAgICBSZXR1cm5zIGEgcG9p bnRlciB0byB0aGUgc3lzdGVtLWRlcGVuZGVudCBudW1lcmljCi0gICAgICAgICAgcGVybWlzc2lv bnMvcHJvdGVjdGlvbiBzdHJpbmcgZm9yIGZpbGUgZiwgb3IgTlVMTCB1cG9uIGZhaWx1cmUuCi0g ICAgICAgICAgVXNlZCBpZiBDS19QRVJNUyBpcyBkZWZpbmVkLgotCi0gICBjaGFyICoKLSAgICAg ICAgICB6aXBlcm0oY2hhciAqIGYpCi0gICAgICAgICAgUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhl IHN5c3RlbS1kZXBlbmRlbnQgc3ltYm9saWMKLSAgICAgICAgICBwZXJtaXNzaW9ucy9wcm90ZWN0 aW9uIHN0cmluZyBmb3IgZmlsZSBmLCBvciBOVUxMIHVwb24gZmFpbHVyZS4KLSAgICAgICAgICBV c2VkIGlmIENLX1BFUk1TIGlzIGRlZmluZWQuIEV4YW1wbGU6IEluIFVOSVggemdwZXJtKGYpIG1p Z2h0Ci0gICAgICAgICAgcmV0dXJuICIxMDA3NzAiLCBidXQgemlwZXJtKCkgbWlnaHQgcmV0dXJu ICItcnd4cnd4LS0tIi4gSW4gVk1TLAotICAgICAgICAgIHpncGVybSgpIHdvdWxkIHJldHVybiBh IGhleGFkZWNpbWFsIHN0cmluZywgYnV0IHppcGVybSgpIHdvdWxkCi0gICAgICAgICAgcmV0dXJu IHNvbWV0aGluZyBsaWtlICIoUldFRCxSV0VELFJFLCkiLgotCi0gICBjaGFyICoKLSAgICAgICAg ICB6Z3RkaXIoKQotICAgICAgICAgIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBuYW1lIG9mIHRo ZSBjdXJyZW50IGRpcmVjdG9yeSwgZm9sZGVyLAotICAgICAgICAgIGV0Yywgb3IgYSBOVUxMIHBv aW50ZXIgaWYgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGNhbm5vdCBiZQotICAgICAgICAgIGRldGVy bWluZWQuIElmIHBvc3NpYmxlLCB0aGUgZGlyZWN0b3J5IHNwZWNpZmljYXRpb24gc2hvdWxkIGJl Ci0gICAgICAgICAgKGEpIGZ1bGx5IHNwZWNpZmllZCwgZS5nLiBhcyBhIGNvbXBsZXRlIHBhdGhu YW1lLCBhbmQgKGIpIGJlCi0gICAgICAgICAgc3VpdGFibGUgZm9yIGFwcGVuZGluZyBhIGZpbGVu YW1lLiBUaHVzLCBmb3IgZXhhbXBsZSwgVW5peAotICAgICAgICAgIGRpcmVjdG9yeSBuYW1lcyBz aG91bGQgZW5kIHdpdGggJy8nLiBWTVMgZGlyZWN0b3J5IG5hbWVzIHNob3VsZAotICAgICAgICAg IGxvb2sgbGlrZSBERVY6W05BTUVdIChyYXRoZXIgdGhhbiwgc2F5LCBOQU1FLkRJUjsxKS4KLQot ICAgY2hhciAqCi0gICAgICAgICAgemhvbWUoKQotICAgICAgICAgIFJldHVybnMgYSBwb2ludGVy IHRvIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHVzZXIncyBob21lCi0gICAgICAgICAgZGlyZWN0 b3J5LCBvciBOVUxMIHVwb24gZXJyb3IuIFNob3VsZCBiZSBmb3JtYXR0ZWQgbGlrZSB6Z3RkaXIo KQotICAgICAgICAgIChxLnYuKS4KLQotICAgaW50Ci0gICAgICAgICAgemluZmlsbCgpCi0gICAg ICAgICAgRmlsbCBidWZmZXIgZnJvbSBpbnB1dCBmaWxlLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQg YnkgdGhlIG1hY3JvCi0gICAgICAgICAgem1pbmNoYXIoKSwgd2hpY2ggaXMgZGVmaW5lZCBpbiBj a2NrZXIuaC4gem1pbmNoYXIoKSBtYW5hZ2VzIGl0cwotICAgICAgICAgIG93biBidWZmZXIsIGFu ZCBjYWxscyB6aW5maWxsKCkgdG8gZmlsbCBpdCB3aGVuZXZlciBpdCBiZWNvbWVzCi0gICAgICAg ICAgZW1wdHkuIEl0IGlzIHVzZWQgb25seSBmb3Igc2VuZGluZyBmaWxlcywgYW5kIHJlYWRzIGNo YXJhY3RlcnMKLSAgICAgICAgICBvbmx5IGZyb20gZmlsZSBudW1iZXIgWklGSUxFLiB6aW5maWxs KCkgcmV0dXJucyAtMSB1cG9uIGVuZCBvZgotICAgICAgICAgIGZpbGUsIC0yIHVwb24gZmF0YWwg ZXJyb3IsIGFuZCAtMyB1cG9uIHRpbWVvdXQgKGUuZy4gd2hlbgotICAgICAgICAgIHJlYWRpbmcg ZnJvbSBhIHBpcGUpOyBvdGhlcndpc2UgaXQgcmV0dXJucyB0aGUgZmlyc3QgY2hhcmFjdGVyCi0g ICAgICAgICAgZnJvbSB0aGUgYnVmZmVyIGl0IGp1c3QgcmVhZC4KLQotICAgaW50Ci0gICAgICAg ICAgemtzZWxmKCkKLSAgICAgICAgICBLaWxscyB0aGUgY3VycmVudCBqb2IsIHNlc3Npb24sIHBy b2Nlc3MsIGV0YywgbG9ncyBvdXQsCi0gICAgICAgICAgZGlzYXBwZWFycy4gVXNlZCBieSB0aGUg S2VybWl0IHNlcnZlciB3aGVuIGl0IHJlY2VpdmVzIGEgQllFCi0gICAgICAgICAgY29tbWFuZC4g T24gZmFpbHVyZSwgcmV0dXJucyAtMS4gT24gc3VjY2VzcywgZG9lcyBub3QgcmV0dXJuIGF0Ci0g ICAgICAgICAgYWxsISBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgY2FsbGVkIHVudGlsIGFs bCBvdGhlciBzdGVwcwotICAgICAgICAgIGhhdmUgYmVlbiB0YWtlbiB0byBjbG9zZSBmaWxlcywg ZXRjLgotCi0gICBWT0lECi0gICAgICAgICAgenN0cmlwKGZuLCZmbjIpIGNoYXIgKmZuMSwgKipm bjI7Ci0gICAgICAgICAgU3RyaXBzIGRldmljZSBhbmQgZGlyZWN0b3J5LCBldGMsIGZyb20gZmls ZSBzcGVjaWZpY2F0aW9uIGZuLAotICAgICAgICAgIGxlYXZpbmcgb25seSB0aGUgZmlsZW5hbWUg KGluY2x1ZGluZyAiZXh0ZW5zaW9uIiBvciAiZmlsZXR5cGUiCi0gICAgICAgICAgLS0gdGhlIHBh cnQgYWZ0ZXIgdGhlIGRvdCkuIEZvciBleGFtcGxlIERVQTA6W1BST0dSQU1TXU9PRkEuQzszCi0g ICAgICAgICAgYmVjb21lcyBPT0ZBLkMsIG9yIC91c3IvZmRjL29vZmEuYyBiZWNvbWVzIG9vZmEu Yy4gUmV0dXJucyBhCi0gICAgICAgICAgcG9pbnRlciB0byByZXN1bHQgaW4gZm4yLgotCi0gICBp bnQKLSAgICAgICAgICB6c2V0cGVybShjaGFyICogZmlsZSwgdW5zaWduZWQgaW50IGNvZGUpCi0g ICAgICAgICAgU2V0IHBlcm1pc3Npb25zIG9mIGZpbGUgdG8gZ2l2ZW4gc3lzdGVtLWRlcGVuZGVu dCBjb2RlLiAgIDA6IE9uCi0gICAgICAgICAgZmFpbHVyZS4KLSAgICAgICAgICAgIDE6IG9uIHN1 Y2Nlc3MuCi0KLSAgIGludAotICAgICAgICAgIHpzZXRyb290KGNoYXIgKiBkaXIpCi0gICAgICAg ICAgU2V0cyB0aGUgcm9vdCBmb3IgdGhlIHVzZXIncyBmaWxlIGFjY2VzcywgbGlrZSBVbml4IGNo cm9vdCgpLAotICAgICAgICAgIGJ1dCBkb2VzIG5vdCByZXF1aXJlIHByaXZpbGVnZS4gSW4gVW5p eCwgdGhpcyBtdXN0IGJlCi0gICAgICAgICAgaW1wbGVtZW50ZWQgZW50aXJlbHkgYnkgS2VybWl0 J3Mgb3duIGZpbGUgYWNjZXNzIHJvdXRpbmVzLgotICAgICAgICAgIFJldHVybnM6Ci0gICAgICAg ICAgICAxOiBTdWNjZXNzCi0gICAgICAgICAgIC0xOiBJbnZhbGlkIGFyZ3VtZW50Ci0gICAgICAg ICAgIC0yOgotICAgICAgICAgICAtMzogSW50ZXJuYWwgZXJyb3IKLSAgICAgICAgICAgLTQ6IEFj Y2VzcyB0byBnaXZlbiBkaXJlY3RvcnkgZGVuaWVkCi0gICAgICAgICAgIC01OiBOZXcgcm9vdCBu b3Qgd2l0aGluIG9sZCByb290Ci0KLSAgIGludAotICAgICAgICAgIHppbnJvb3QoY2hhciAqIGZp bGUpCi0gICAgICAgICAgSWYgbm8gcm9vdCBpcyBzZXQgKHpzZXRyb290KCkpLCByZXR1cm5zIDEu Ci0gICAgICAgICAgT3RoZXJ3aXNlLCBpZiBnaXZlbiBmaWxlIGlzIGluIHRoZSByb290LCByZXR1 cm5zIDEuCi0gICAgICAgICAgT3RoZXJ3aXNlLCByZXR1cm5zIDAuCi0KLSAgIFZPSUQKLSAgICAg ICAgICB6bHRvcihmbixmbjIpIGNoYXIgKmZuMSwgKmZuMjsKLSAgICAgICAgICBMb2NhbC1Uby1S ZW1vdGUgZmlsZW5hbWUgdHJhbnNsYXRpb24uIE9CU09MRVRFOiByZXBsYWNlZCBieQotICAgICAg ICAgIG56bHRvcigpIChxLnYuKS4gVHJhbnNsYXRlcyB0aGUgbG9jYWwgZmlsZW5hbWUgZm4gaW50 byBhIGZvcm1hdAotICAgICAgICAgIHN1aXRhYmxlIGZvciB0cmFuc21pc3Npb24gdG8gYW4gYXJi aXRyYXJ5IHR5cGUgb2YgY29tcHV0ZXIsIGFuZAotICAgICAgICAgIGNvcGllcyB0aGUgcmVzdWx0 IGludG8gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IGZuMi4gVHJhbnNsYXRpb24KLSAgICAgICAg ICBtYXkgaW52b2x2ZSAoYSkgc3RyaXBwaW5nIHRoZSBkZXZpY2UgYW5kL29yIGRpcmVjdG9yeS9w YXRoIG5hbWUsCi0gICAgICAgICAgKGIpIGNvbnZlcnRpbmcgbG93ZXJjYXNlIHRvIHVwcGVyY2Fz ZSwgKGMpIHJlbW92aW5nIHNwYWNlcyBhbmQKLSAgICAgICAgICBzdHJhbmdlIGNoYXJhY3RlcnMs IG9yIGNvbnZlcnRpbmcgdGhlbSB0byBzb21lIGlubm9jdW91cwotICAgICAgICAgIGFscGhhYmV0 aWMgY2hhcmFjdGVyIGxpa2UgWCwgKGQpIGRpc2NhcmRpbmcgb3IgY29udmVydGluZyBleHRyYQot ICAgICAgICAgIHBlcmlvZHMgKHRoZXJlIHNob3VsZCBub3QgYmUgbW9yZSB0aGFuIG9uZSkuIERv ZXMgaXRzIGJlc3QuCi0gICAgICAgICAgUmV0dXJucyBubyB2YWx1ZS4gbmFtZTIgaXMgYSBwb2lu dGVyIHRvIGEgYnVmZmVyLCBmdXJuaXNoZWQgYnkKLSAgICAgICAgICB0aGUgY2FsbGVyLCBpbnRv IHdoaWNoIHpsdG9yKCkgd3JpdGVzIHRoZSByZXN1bHRpbmcgbmFtZS4gTm8KLSAgICAgICAgICBs ZW5ndGggY2hlY2tpbmcgaXMgZG9uZS4KLQotICAgI2lmZGVmIE5aTFRPUgotICAgICAgICAgIFZP SUQKLSAgICAgICAgICBuemx0b3IoZm4sZm4yLGNvbnZlcnQscGF0aG5hbWVzLG1heCkgY2hhciAq Zm4xLCpmbjI7IGludAotICAgICAgICAgIGNvbnZlcnQscGF0aG5hbWVzLG1heDsKLSAgICAgICAg ICBSZXBsYWNlcyB6bHRvcigpLiBUaGlzIG5ldyB2ZXJzaW9uIGhhbmRsZXMgcGF0aG5hbWVzIGFu ZCBjaGVja3MKLSAgICAgICAgICBsZW5ndGguIGZuMSBhbmQgZm4yIGFyZSBhcyBpbiB6bHRvcigp LiBUaGlzIHZlcnNpb24gaXMgY2FsbGVkCi0gICAgICAgICAgdW5jb25kaXRpb25hbGx5IGZvciBl YWNoIGZpbGUsIHJhdGhlciB0aGFuIG9ubHkgd2hlbiBmaWxlbmFtZQotICAgICAgICAgIGNvbnZl cnNpb24gaXMgZW5hYmxlZC4gUGF0aG5hbWVzIGNhbiBoYXZlIHRoZSBmb2xsb3dpbmcgdmFsdWVz OgotCi0gICAgICAgICAgICBQQVRIX09GRjogUGF0aG5hbWUsIGlmIGFueSwgaXMgdG8gYmUgc3Ry aXBwZWQKLSAgICAgICAgICAgIFBBVEhfUkVMOiBUaGUgcmVsYXRpdmUgcGF0aG5hbWUgaXMgdG8g YmUgaW5jbHVkZWQKLSAgICAgICAgICAgIFBBVEhfQUJTOiBUaGUgZnVsbCBwYXRobmFtZSBpcyB0 byBiZSBpbmNsdWRlZAotCi0gICAgICAgICAgQWZ0ZXIgaGFuZGxpbmcgcGF0aG5hbWVzLCBjb252 ZXJzaW9uIGlzIGRvbmUgdG8gdGhlIHJlc3VsdCBhcyBpbgotICAgICAgICAgIHRoZSB6bHRvcigp IGRlc2NyaXB0aW9uIGlmIGNvbnZlcnQgIT0gMDsgaWYgcmVsYXRpdmUgb3IgYWJzb2x1dGUKLSAg ICAgICAgICBwYXRobmFtZXMgYXJlIGluY2x1ZGVkLCB0aGV5IGFyZSBjb252ZXJ0ZWQgdG8gVU5J WCBmb3JtYXQsIGkuZS4KLSAgICAgICAgICB3aXRoIHNsYXNoICgvKSBhcyB0aGUgZGlyZWN0b3J5 IHNlcGFyYXRvci4gVGhlIG1heCBwYXJhbWV0ZXIKLSAgICAgICAgICBzcGVjaWZpZXMgdGhlIG1h eGltdW0gc2l6ZSBvZiBmbjIuIElmIGNvbnZlcnQgPiAwLCB0aGUgcmVndWxhcgotICAgICAgICAg IGNvbnZlcnNpb25zIGFyZSBkb25lOyBpZiBjb252ZXJ0IDwgMCwgbWluaW1hbCBjb252ZXJzaW9u cyBhcmUKLSAgICAgICAgICBkb25lICh3ZSBza2lwIHVwcGVyY2FzaW5nIHRoZSBsZXR0ZXJzLCB3 ZSBhbGxvdyBtb3JlIHRoYW4gb25lCi0gICAgICAgICAgcGVyaW9kLCBldGM7IHRoaXMgY2FuIGJl IHVzZWQgd2hlbiB3ZSBrbm93IG91ciBwYXJ0bmVyIGlzIFVOSVgKLSAgICAgICAgICBvciBzaW1p bGFyKS4KLQotICAgI2VuZGlmIC8qIE5aTFRPUiAqLwotCi0gICBpbnQKLSAgICAgICAgICBuenhw YW5kKGZuLGZsYWdzKSBjaGFyICpmbjsgaW50IGZsYWdzOwotICAgICAgICAgIFJlcGxhY2VzIHp4 cGFuZCgpLCB3aGljaCBpcyBvYnNvbGV0ZSBhcyBvZiBDLUtlcm1pdCA3LjAuCi0gICAgICAgICAg Q2FsbCB3aXRoOgotICAgICAgICAgICAgZm4gPSBQb2ludGVyIHRvIGZpbGVuYW1lIG9yIHBhdHRl cm4uCi0gICAgICAgICAgICBmbGFncyA9IG9wdGlvbiBiaXRzOgotICAgICAgICAgICAgICBmbGFn cyAmIFpYX0ZJTE9OTFkgIE1hdGNoIHJlZ3VsYXIgZmlsZXMKLSAgICAgICAgICAgICAgZmxhZ3Mg JiBaWF9ESVJPTkxZICBNYXRjaCBkaXJlY3RvcmllcwotICAgICAgICAgICAgICBmbGFncyAmIFpY X1JFQ1VSU0UgIERlc2NlbmQgdGhyb3VnaCBkaXJlY3RvcnkgdHJlZQotICAgICAgICAgICAgICBm bGFncyAmIFpYX01BVENIRE9UIE1hdGNoICJkb3QgZmlsZXMiCi0gICAgICAgICAgICAgIGZsYWdz ICYgWlhfTk9CQUNLVVAgRG9uJ3QgbWF0Y2ggImJhY2t1cCBmaWxlcyIKLSAgICAgICAgICAgICAg ZmxhZ3MgJiBaWF9OT0xJTktTICBEb24ndCBmb2xsb3cgc3ltbGlua3MuCi0KLSAgICAgICAgICBS ZXR1cm5zIHRoZSBudW1iZXIgb2YgZmlsZXMgdGhhdCBtYXRjaCBmbiwgd2l0aCBkYXRhIHN0cnVj dHVyZXMKLSAgICAgICAgICBzZXQgdXAgc28gdGhlIGZpcnN0IGZpbGUgKGlmIGFueSkgd2lsbCBi ZSByZXR1cm5lZCBieSB0aGUgbmV4dAotICAgICAgICAgIHpuZXh0KCkgY2FsbC4gSWYgWlhfRklM T05MWSBhbmQgWlhfRElST05MWSBhcmUgYm90aCBzZXQsIG9yCi0gICAgICAgICAgbmVpdGhlciBv bmUgaXMgc2V0LCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgYXJlIG1hdGNoZWQuIE5vdGVzOgotCi0g ICAgICAgICAxLiBJdCBpcyBlc3NlbnRpYWwgdGhhdCB0aGUgbnVtYmVyIHJldHVybmVkIGJ5IG56 eHBhbmQoKSByZWZsZWN0Ci0gICAgICAgICAgICB0aGUgYWN0dWFsIG51bWJlciBvZiBmaWxlbmFt ZXMgdGhhdCB3aWxsIGJlIHJldHVybmVkIGJ5Ci0gICAgICAgICAgICB6bmV4dCgpIGNhbGxzLiBJ biBvdGhlciB3b3JkczoKLSAgZm9yIChuID0gbnp4cGFuZChzdHJpbmcsZmxhZ3MpOyBuID4gMDsg bi0tKSB7Ci0gICAgICB6bmV4dChidWYpOwotICAgICAgcHJpbnRmKCIlc1xuIiwgYnVmKTsKLSAg fQotCi0gICAgICAgICAgICBzaG91bGQgcHJpbnQgYWxsIHRoZSBmaWxlIG5hbWVzOyBubyBtb3Jl LCBubyBsZXNzLgotICAgICAgICAgMi4gSW4gVU5JWCwgRE9TLCBPUy05LCBldGMsIHdoZXJlIGRp cmVjdG9yaWVzIGNvbnRhaW4gZW50cmllcyBmb3IKLSAgICAgICAgICAgIHRoZW1zZWx2ZXMgKC4p IGFuZCB0aGUgc3VwZXJpb3IgZGlyZWN0b3J5ICguLiksIHRoZXNlIHNob3VsZAotICAgICAgICAg ICAgTk9UIGJlIGluY2x1ZGVkIGluIHRoZSBsaXN0IHVuZGVyIGFueSBjaXJjdW1zdGFuY2VzLCBp bmNsdWRpbmcKLSAgICAgICAgICAgIHdoZW4gWlhfTUFUQ0hET1QgaXMgc2V0LgotICAgICAgICAg My4gQWRkaXRpb25hbCBvcHRpb24gYml0cyBtaWdodCBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLCBl LmcuIGZvcgotICAgICAgICAgICAgc29ydGluZyAoc29ydCBieSBkYXRlL25hbWUvc2l6ZSwgcmV2 ZXJzZS9hc2NlbmRpbmcsIGV0YykuCi0gICAgICAgICAgICBDdXJyZW50bHkgdGhpcyBpcyBkb25l IG9ubHkgaW4gaGlnaGVyIGxldmVsIGNvZGUgKHRocm91Z2ggYQotICAgICAgICAgICAgaGFjayBp biB3aGljaCB0aGUgbnp4cGFuZCgpIGV4cG9ydHMgaXRzIGZpbGVuYW1lIGFycmF5LCB3aGljaAot ICAgICAgICAgICAgaXMgbm90IHBvcnRhYmxlIGJlY2F1c2Ugbm90IGFsbCBPUydzIGNhbiB1c2Ug dGhpcyBtZWNoYW5pc20pLgotCi0gICBpbnQKLSAgICAgICAgICB6bWFpbChhZGRyLGZuKSBjaGFy ICphZGRyLCBmbjsKLSAgICAgICAgICBTZW5kIHRoZSBsb2NhbCwgZXhpc3RpbmcgZmlsZSBmbiBh cyBlLW1haWwgdG8gdGhlIGFkZHJlc3MgYWRkci4KLSAgICAgICAgICBSZXR1cm5zOgotICAgICAg ICAgICAgMDogb24gc3VjY2VzcwotICAgICAgICAgICAgMjogaWYgbWFpbCBkZWxpdmVyZWQgYnV0 IHRlbXAgZmlsZSBjYW4ndCBiZSBkZWxldGVkCi0gICAgICAgICAgIC0yOiBpZiBtYWlsIGNhbid0 IGJlIGRlbGl2ZXJlZAotCi0gICBpbnQKLSAgICAgICAgICB6bWtkaXIocGF0aCkgY2hhciAqcGF0 aDsKLSAgICAgICAgICBUaGUgcGF0aCBjYW4gYmUgYSBmaWxlIHNwZWNpZmljYXRpb24gdGhhdCBt aWdodCBjb250YWluCi0gICAgICAgICAgZGlyZWN0b3J5IGluZm9ybWF0aW9uLCBpbiB3aGljaCB0 aGUgZmlsZW5hbWUgaXMgZXhwZWN0ZWQgdG8gYmUKLSAgICAgICAgICBpbmNsdWRlZCwgb3IgYW4g dW5hbWJpZ3VvdXMgZGlyZWN0b3J5IHNwZWNpZmljYXRpb24gKGUuZy4gaW4KLSAgICAgICAgICBV TklYIGl0IG11c3QgZW5kIHdpdGggIi8iKS4gVGhpcyByb3V0aW5lIGF0dGVtcHRzIHRvIGNyZWF0 ZSBhbnkKLSAgICAgICAgICBkaXJlY3RvcmllcyBpbiB0aGUgZ2l2ZW4gcGF0aCB0aGF0IGRvbid0 IGFscmVhZHkgZXhpc3QuIFJldHVybnMKLSAgICAgICAgICAwIG9yIGdyZWF0ZXIgc3VjY2Vzczog bm8gZGlyZWN0b3JpZXMgbmVlZGVkIGNyZWF0aW9uLCBvciBlbHNlCi0gICAgICAgICAgYWxsIGRp cmVjdG9yaWVzIHRoYXQgbmVlZGVkIGNyZWF0aW9uIHdlcmUgY3JlYXRlZCBzdWNjZXNzZnVsbHk7 Ci0gICAgICAgICAgdGhlIHJldHVybiBjb2RlIGlzIHRoZSBudW1iZXIgb2YgZGlyZWN0b3JpZXMg dGhhdCB3ZXJlIGNyZWF0ZWQuCi0gICAgICAgICAgUmV0dXJucyAtMSBvbiBmYWlsdXJlIHRvIGNy ZWF0ZSBhbnkgb2YgdGhlIG5lZWRlZCBkaXJlY3Rvcmllcy4KLQotICAgaW50Ci0gICAgICAgICAg enJtZGlyKHBhdGgpIGNoYXIgKnBhdGg7Ci0gICAgICAgICAgQXR0ZW1wdHMgdG8gcmVtb3ZlIHRo ZSBnaXZlbiBkaXJlY3RvcnkuIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMQotICAgICAgICAgIG9u IGZhaWx1cmUuIFRoZSBkZXRhaWxlZCBzZW1hbnRpY3MgYXJlIG9wZW4gLS0gc2hvdWxkIGl0IGZh aWwgaWYKLSAgICAgICAgICB0aGUgZGlyZWN0b3J5IGNvbnRhaW5zIGFueSBmaWxlcyBvciBzdWJk aXJlY3RvcmllcywgZXRjLiBJdCBpcwotICAgICAgICAgIHByb2JhYmx5IGJlc3QgZm9yIHRoaXMg cm91dGluZSB0byBiZWhhdmUgaW4gd2hhdGV2ZXIgbWFubmVyIGlzCi0gICAgICAgICAgY3VzdG9t YXJ5IG9uIHRoZSB1bmRlcmx5aW5nIHBsYXRmb3JtOyBlLmcuIGluIFVOSVgsIFZNUywgRE9TLAot ICAgICAgICAgIGV0Yywgd2hlcmUgZGlyZWN0b3JpZXMgY2FuIG5vdCBiZSByZW1vdmVkIHVubGVz cyB0aGV5IGFyZSBlbXB0eS4KLQotICAgVk9JRAotICAgICAgICAgIHpuZXduKGZuLHMpIGNoYXIg KmZuLCAqKnM7Ci0gICAgICAgICAgVHJhbnNmb3JtcyB0aGUgbmFtZSBmbiBpbnRvIGEgZmlsZW5h bWUgdGhhdCBpcyBndWFyYW50ZWVkIHRvIGJlCi0gICAgICAgICAgdW5pcXVlLiBJZiB0aGUgZmls ZSBmbiBkb2VzIG5vdCBleGlzdCwgdGhlbiB0aGUgbmV3IG5hbWUgaXMgdGhlCi0gICAgICAgICAg c2FtZSBhcyBmbjsgT3RoZXJ3aXNlLCBpdCdzIGRpZmZlcmVudC4gdGhpcyBmdW5jdGlvbiBkb2Vz IGl0cwotICAgICAgICAgIGJlc3QsIHJldHVybnMgbm8gdmFsdWUuIE5ldyBuYW1lIGlzIGNyZWF0 ZWQgaW4gY2FsbGVyJ3Mgc3BhY2UuCi0gICAgICAgICAgQ2FsbCBsaWtlIHRoaXM6IHpuZXduKG9s ZCwmbmV3KTsuIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIGEKLSAgICAgICAgICBwb2ludGVyIHRv IHRoZSBuZXcgbmFtZS4gVGhpcyBwb2ludGVyIGlzIHNldCBieSB6bmV3bigpIHRvIHBvaW50Ci0g ICAgICAgICAgdG8gYSBzdGF0aWMgc3RyaW5nIGluIGl0cyBvd24gc3BhY2UsIHNvIGJlIHN1cmUg dG8gdGhlIHJlc3VsdCB0bwotICAgICAgICAgIGEgc2FmZSBwbGFjZSBiZWZvcmUgY2FsbGluZyB0 aGlzIGZ1bmN0aW9uIGFnYWluLgotCi0gICBpbnQKLSAgICAgICAgICB6bmV4dChmbikgY2hhciAq Zm47Ci0gICAgICAgICAgQ29waWVzIHRoZSBuZXh0IGZpbGUgbmFtZSBmcm9tIGEgZmlsZSBsaXN0 IGNyZWF0ZWQgYnkgenhwYW5kKCkKLSAgICAgICAgICBpbnRvIHRoZSBzdHJpbmcgcG9pbnRlZCB0 byBieSBmbiAoc2VlIHp4cGFuZCkuIElmIG5vIG1vcmUgZmlsZXMsCi0gICAgICAgICAgdGhlbiB0 aGUgbnVsbCBzdHJpbmcgaXMgcGxhY2VkIHRoZXJlLiBSZXR1cm5zIDAgaWYgdGhlcmUgYXJlIG5v Ci0gICAgICAgICAgbW9yZSBmaWxlbmFtZXMsIHdpdGggMHRoIGVsZW1lbnQgdGhlIGFycmF5IHBv aW50ZWQgdG8gYnkgZm4gc2V0Ci0gICAgICAgICAgdG8gTlVMLiBJZiB0aGVyZSBpcyBhIGZpbGVu YW1lLCBpdCBpcyBzdG9yZWQgaW4gdGhlIGFycmF5Ci0gICAgICAgICAgcG9pbnRlZCB0byBieSBm biBhbmQgYSBwb3NpdGl2ZSBudW1iZXIgaXMgcmV0dXJuZWQuIE5PVEU6IFRoaXMKLSAgICAgICAg ICBpcyBhIGNoYW5nZSBmcm9tIGVhcmxpZXIgZGVmaW5pdGlvbnMgb2YgdGhpcyBmdW5jdGlvbgot ICAgICAgICAgIChwcmUtMTk5OSksIHdoaWNoIHJldHVybmVkIHRoZSBudW1iZXIgb2YgZmlsZXMg cmVtYWluaW5nOyB0aHVzIDAKLSAgICAgICAgICB3YXMgdGhlIHJldHVybiB2YWx1ZSB3aGVuIHJl dHVybmluZyB0aGUgZmluYWwgZmlsZS4gSG93ZXZlciwgbm8KLSAgICAgICAgICBtYWlubGluZSBj b2RlIGV2ZXIgZGVwZW5kZWQgb24gdGhlIHJldHVybiB2YWx1ZSwgc28gdGhpcyBjaGFuZ2UKLSAg ICAgICAgICBzaG91bGQgYmUgc2FmZS4KLQotICAgaW50Ci0gICAgICAgICAgem9wZW5pKG4sZm4p IGludCBuOyBjaGFyICpmbjsKLSAgICAgICAgICBPcGVucyB0aGUgZmlsZSBuYW1lZCBmbiBmb3Ig aW5wdXQgYXMgZmlsZSBudW1iZXIgbi4gUmV0dXJuczoKLSAgICAgICAgICAgIDA6IG9uIGZhaWx1 cmUuCi0gICAgICAgICAgICAxOiBvbiBzdWNjZXNzLgotCi0gICBpbnQKLSAgICAgICAgICB6b3Bl bm8obixmbix6eixmY2IpIGludCBuOyBjaGFyICpuYW1lOyBzdHJ1Y3QgemF0dHIgKnp6OyBzdHJ1 Y3QKLSAgICAgICAgICBmaWxpbmZvICpmY2I7Ci0gICAgICAgICAgQXR0ZW1wdHMgdG8gb3BlbiB0 aGUgbmFtZWQgZmlsZSBmb3Igb3V0cHV0IGFzIGZpbGUgbnVtYmVyIG4uIHp6Ci0gICAgICAgICAg aXMgYSBLZXJtaXQgZmlsZSBhdHRyaWJ1dGUgc3RydWN0dXJlIGFzIGRlZmluZWQgaW4gY2tjZGVi LmgsCi0gICAgICAgICAgY29udGFpbmluZyB2YXJpb3VzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBm aWxlLCBpbmNsdWRpbmcgaXRzCi0gICAgICAgICAgc2l6ZSwgY3JlYXRpb24gZGF0ZSwgYW5kIHNv IGZvcnRoLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBhdHRlbXB0Ci0gICAgICAgICAgdG8gaG9ub3Ig YXMgbWFueSBvZiB0aGVzZSBhcyBwb3NzaWJsZS4gZmNiIGlzIGEgImZpbGUgY29udHJvbAotICAg ICAgICAgIGJsb2NrIiBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UsIGRlZmluZWQgaW4gY2tjZGVi LmgsIGNvbnRhaW5pbmcKLSAgICAgICAgICBpbmZvcm1hdGlvbiByZWxldmFudCB0byBjb21wbGlj YXRlZCBmaWxlIHN5c3RlbXMgbGlrZSBWTVMgKFJNUyksCi0gICAgICAgICAgSUJNIE1WUywgZXRj LCBsaWtlIGJsb2Nrc2l6ZSwgcmVjb3JkIGxlbmd0aCwgb3JnYW5pemF0aW9uLAotICAgICAgICAg IHJlY29yZCBmb3JtYXQsIGNhcnJpYWdlIGNvbnRyb2wsIGV0Yy4gUmV0dXJuczoKLSAgICAgICAg ICAgIDA6IG9uIGZhaWx1cmUuCi0gICAgICAgICAgICAxOiBvbiBzdWNjZXNzLgotCi0gICBpbnQK LSAgICAgICAgICB6b3V0ZHVtcCgpCi0gICAgICAgICAgRHVtcHMgYSBmaWxlIG91dHB1dCBidWZm ZXIuIFVzZWQgd2l0aCB0aGUgbWFjcm8gem1jaG91dCgpCi0gICAgICAgICAgZGVmaW5lZCBpbiBj a2NrZXIuaC4gVXNlZCBvbmx5IHdpdGggZmlsZSBudW1iZXIgWk9GSUxFLCBpLmUuIHRoZQotICAg ICAgICAgIGZpbGUgdGhhdCBpcyBiZWluZyByZWNlaXZlZCBieSBLZXJtaXQgZHVyaW5nIGZpbGUg dHJhbnNmZXIuCi0gICAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICAgLTE6IG9uIGZhaWx1cmUu Ci0gICAgICAgICAgICAwOiBvbiBzdWNjZXNzLgotCi0gICBpbnQKLSAgICAgICAgICB6cHJpbnQo cCxmbikgY2hhciAqcCwgKmY7Ci0gICAgICAgICAgUHJpbnRzIHRoZSBmaWxlIHdpdGggbmFtZSBm biBvbiBhIGxvY2FsIHByaW50ZXIsIHdpdGggb3B0aW9ucyBwLgotICAgICAgICAgIFJldHVybnM6 Ci0gICAgICAgICAgICAwOiBvbiBzdWNjZXNzCi0gICAgICAgICAgICAzOiBpZiBmaWxlIHNlbnQg dG8gcHJpbnRlciBidXQgY2FuJ3QgYmUgZGVsZXRlZAotICAgICAgICAgICAtMzogaWYgZmlsZSBj YW4ndCBiZSBwcmludGVkCi0KLSAgIGludAotICAgICAgICAgIHpyZW5hbWUoZm4sZm4yKSBjaGFy ICpmbiwgKmZuMjsKLSAgICAgICAgICBDaGFuZ2VzIHRoZSBuYW1lIG9mIGZpbGUgZm4gdG8gZm4y LiBJZiBmbjIgaXMgdGhlIG5hbWUgb2YgYW4KLSAgICAgICAgICBleGlzdGluZyBkaXJlY3Rvcnks IG9yIGEgZmlsZS1zdHJ1Y3R1cmVkIGRldmljZSwgdGhlbiBmaWxlIGZuIGlzCi0gICAgICAgICAg bW92ZWQgdG8gdGhhdCBkaXJlY3Rvcnkgb3IgZGV2aWNlLCBrZWVwaW5nIGl0cyBvcmlnaW5hbCBu YW1lLiBJZgotICAgICAgICAgIGZuMiBsYWNrcyBhIGRpcmVjdG9yeSBzZXBhcmF0b3Igd2hlbiBw YXNzZWQgdG8gdGhpcyBmdW5jdGlvbiwgYW4KLSAgICAgICAgICBhcHByb3ByaWF0ZSBvbmUgaXMg c3VwcGxpZWQuIFJldHVybnM6Ci0gICAgICAgICAgIC0xOiBvbiBmYWlsdXJlLgotICAgICAgICAg ICAgMDogb24gc3VjY2Vzcy4KLQotICAgaW50Ci0gICAgICAgICAgemNvcHkoc291cmNlLGRlc3Qp IGNoYXIgKiBzb3VyY2UsICogZGVzdDsKLSAgICAgICAgICBDb3BpZXMgdGhlIHNvdXJjZSBmaWxl IHRvIHRoZSBkZXN0aW5hdGlvbi4gT25lIGZpbGUgb25seS4gTm8KLSAgICAgICAgICB3aWxkY2Fy ZHMuIFRoZSBkZXN0aW5hdGlvbiBzdHJpbmcgbWF5IGJlIGEgZmlsZW5hbWUgb3IgYQotICAgICAg ICAgIGRpcmVjdG9yeSBuYW1lLiBSZXR1cm5zOgotICAgICAgICAgICAgMDogb24gc3VjY2Vzcy4K LSAgICAgICAgICAgPDA6IG9uIGZhaWx1cmU6Ci0gICAgICAgICAgICAtMjogc291cmNlIGZpbGUg aXMgbm90IGEgcmVndWxhciBmaWxlLgotICAgICAgICAgICAgLTM6IHNvdXJjZSBmaWxlIG5vdCBm b3VuZC4KLSAgICAgICAgICAgIC00OiBwZXJtaXNzaW9uIGRlbmllZC4KLSAgICAgICAgICAgIC01 OiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2FtZSBmaWxlLgotICAgICAgICAgICAg LTY6IGkvbyBlcnJvci4KLSAgICAgICAgICAgIC0xOiBvdGhlciBlcnJvci4KLQotICAgY2hhciAq Ci0gICAgICAgICAgemxvY2FsdGltZShjaGFyICopCi0gICAgICAgICAgQ2FsbCB3aXRoOiAieXl5 eW1tZGQgaGg6bW06c3MiIEdNVC9VVEMgZGF0ZS10aW1lLiBSZXR1cm5zCi0gICAgICAgICAgcG9p bnRlciB0byBsb2NhbCBkYXRlLXRpbWUgc3RyaW5nICJ5eXl5bW1kZCBoaDptbTpzcyIgb24KLSAg ICAgICAgICBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUuCi0KLSAgIFZPSUQKLSAgICAgICAgICB6 cnRvbChmbixmbjIpIGNoYXIgKmZuLCAqZm4yOwotICAgICAgICAgIFJlbW90ZS1Uby1Mb2NhbCBm aWxlbmFtZSB0cmFuc2xhdGlvbi4gT0JTT0xFVEU6IHJlcGxhY2VkIGJ5Ci0gICAgICAgICAgbnpy dG9sKCkuIFRyYW5zbGF0ZXMgYSAic3RhbmRhcmQiIGZpbGVuYW1lIHRvIGEgbG9jYWwgZmlsZW5h bWUuCi0gICAgICAgICAgRm9yIGV4YW1wbGUsIGluIFVuaXggdGhpcyBmdW5jdGlvbiBtaWdodCBj b252ZXJ0IGFuCi0gICAgICAgICAgYWxsLXVwcGVyY2FzZSBuYW1lIHRvIGxvd2VyY2FzZSwgYnV0 IGxlYXZlIGxvd2VyLSBvciBtaXgtY2FzZQotICAgICAgICAgIG5hbWVzIGFsb25lLiBEb2VzIGl0 cyBiZXN0LCByZXR1cm5zIG5vIHZhbHVlLiBOZXcgbmFtZSBpcyBpbgotICAgICAgICAgIHN0cmlu ZyBwb2ludGVkIHRvIGJ5IGZuMi4gTm8gbGVuZ3RoIGNoZWNraW5nIGlzIGRvbmUuCi0KLSAgICNp ZmRlZiBOWkxUT1IKLSAgIGludAotICAgICAgICAgIG56cnRvbChmbixmbjIsY29udmVydCxwYXRo bmFtZXMsbWF4KSBjaGFyICpmbjEsKmZuMjsgaW50Ci0gICAgICAgICAgY29udmVydCxwYXRobmFt ZXMsbWF4OwotICAgICAgICAgIFJlcGxhY2VzIHpydG9sLiBMaWtlIHpydG9sIGJ1dCBoYW5kbGVz IHBhdGhuYW1lcyBhbmQgY2hlY2tzCi0gICAgICAgICAgbGVuZ3RoLiBTZWUgbnpsdG9yIGZvciBk ZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBwYXJhbWV0ZXJzLgotCi0gICAjZW5kaWYgLyogTlpMVE9S ICovCi0KLSAgIGludAotICAgICAgICAgIHpzYXR0cih4eCkgc3RydWN0IHphdHRyICp4eDsKLSAg ICAgICAgICBGaWxscyBpbiBhIEtlcm1pdCBmaWxlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUgZm9yIHRo ZSBmaWxlIHdoaWNoIGlzCi0gICAgICAgICAgdG8gYmUgc2VudCwgbmFtZWx5IHRoZSBjdXJyZW50 bHkgb3BlbiBaSUZJTEUuIE5vdGUgdGhhdCB0aGlzIGlzCi0gICAgICAgICAgbm90IGEgdmVyeSBn b29kIGRlc2lnbiwgYnV0IHdlJ3JlIHN0dWNrIHdpdGggaXQuIENhbGxlcnMgbXVzdAotICAgICAg ICAgIGVuc3VyZSB0aGF0IHpzYXR0cigpIGlzIGNhbGxlZCBvbmx5IG9uIHJlYWwgZmlsZXMsIG5v dCBvbiBwaXBlcywKLSAgICAgICAgICBpbnRlcm5hbGx5IGdlbmVyYXRlZCBmaWxlLWxpa2Ugb2Jq ZWN0cyBzdWNoIGFzIHNlcnZlciBSRU1PVEUKLSAgICAgICAgICBjb21tYW5kIHJlc3BvbnNlcywg ZXRjLiBSZXR1cm5zOgotICAgICAgICAgICAtMTogb24gZmFpbHVyZS4KLSAgICAgICAgICAgIDA6 IG9uIHN1Y2Nlc3Mgd2l0aCB0aGUgc3RydWN0dXJlIGZpbGxlZCBpbi4KLSAgICAgICAgICBJZiBh bnkgc3RyaW5nIG1lbWJlciBpcyBudWxsLCBpdCBzaG91bGQgYmUgaWdub3JlZCBieSB0aGUKLSAg ICAgICAgICBjYWxsZXIuCi0gICAgICAgICAgSWYgYW55IG51bWVyaWMgbWVtYmVyIGlzIC0xLCBp dCBzaG91bGQgYmUgaWdub3JlZCBieSB0aGUgY2FsbGVyLgotCi0gICBpbnQKLSAgICAgICAgICB6 c2hjbWQocykgY2hhciAqczsKLSAgICAgICAgICBzIGNvbnRhaW5zIHRvIHBvaW50ZXIgdG8gYSBj b21tYW5kIHRvIGJlIGV4ZWN1dGVkIGJ5IHRoZSBob3N0Ci0gICAgICAgICAgY29tcHV0ZXIncyBz aGVsbCwgY29tbWFuZCBwYXJzZXIsIG9yIG9wZXJhdGluZyBzeXN0ZW0uIElmIHRoZQotICAgICAg ICAgIHN5c3RlbSBhbGxvd3MgdGhlIHVzZXIgdG8gY2hvb3NlIGZyb20gYSB2YXJpZXR5IG9mIGNv bW1hbmQKLSAgICAgICAgICBwcm9jZXNzb3JzIChzaGVsbHMpLCB0aGVuIHRoaXMgZnVuY3Rpb24g c2hvdWxkIGVtcGxveSB0aGUgdXNlcidzCi0gICAgICAgICAgcHJlZmVycmVkIHNoZWxsLiBJZiBw b3NzaWJsZSwgdGhlIHVzZXIncyBqb2IgKGVudmlyb25tZW50LAotICAgICAgICAgIHByb2Nlc3Ms IGV0Yykgc2hvdWxkIGJlIHNldCB1cCB0byBjYXRjaCBrZXlib2FyZCBpbnRlcnJ1cHRpb24KLSAg ICAgICAgICBzaWduYWxzIHRvIGFsbG93IHRoZSB1c2VyIHRvIGhhbHQgdGhlIHN5c3RlbSBjb21t YW5kIGFuZCByZXR1cm4KLSAgICAgICAgICB0byBLZXJtaXQuIFRoZSBjb21tYW5kIG11c3QgcnVu IGluIG9yZGluYXJ5LCB1bnByaXZpbGVnZWQgdXNlcgotICAgICAgICAgIG1vZGUuIElmIHBvc3Np YmxlLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gLTEgb24gZmFpbHVyZSB0bwotICAgICAg ICAgIHN0YXJ0IHRoZSBjb21tYW5kLCBvciBlbHNlIGl0IHNob3VsZCByZXR1cm4gMSBpZiB0aGUg Y29tbWFuZAotICAgICAgICAgIHN1Y2NlZWRlZCBhbmQgMCBpZiBpdCBmYWlsZWQuCi0KLSAgIGlu dAotICAgICAgICAgIHBleGl0c3RhdHVzCi0gICAgICAgICAgenNoY21kKCkgYW5kIHpzeXNjbWQo KSBzaG91bGQgc2V0IHRoaXMgdG8gdGhlIGNvbW1hbmQncyBhY3R1YWwKLSAgICAgICAgICBleGl0 IHN0YXR1cyBjb2RlIGlmIHBvc3NpYmxlLgotCi0gICBpbnQKLSAgICAgICAgICB6c3lzY21kKHMp IGNoYXIgKnM7Ci0gICAgICAgICAgcyBjb250YWlucyB0byBwb2ludGVyIHRvIGEgY29tbWFuZCB0 byBiZSBleGVjdXRlZCBieSB0aGUgaG9zdAotICAgICAgICAgIGNvbXB1dGVyJ3Mgc2hlbGwsIGNv bW1hbmQgcGFyc2VyLCBvciBvcGVyYXRpbmcgc3lzdGVtLiBJZiB0aGUKLSAgICAgICAgICBzeXN0 ZW0gYWxsb3dzIHRoZSB1c2VyIHRvIGNob29zZSBmcm9tIGEgdmFyaWV0eSBvZiBjb21tYW5kCi0g ICAgICAgICAgcHJvY2Vzc29ycyAoc2hlbGxzKSwgdGhlbiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBl bXBsb3kgdGhlIHN5c3RlbQotICAgICAgICAgIHN0YW5kYXJkIHNoZWxsIChlLmcuIC9iaW4vc2gg Zm9yIFVuaXgpLCBzbyB0aGF0IHRoZSByZXN1bHRzIHdpbGwKLSAgICAgICAgICBhbHdheXMgYmUg dGhlIHNhbWUgZm9yIGV2ZXJ5Ym9keS4gSWYgcG9zc2libGUsIHRoZSB1c2VyJ3Mgam9iCi0gICAg ICAgICAgKGVudmlyb25tZW50LCBwcm9jZXNzLCBldGMpIHNob3VsZCBiZSBzZXQgdXAgdG8gY2F0 Y2gga2V5Ym9hcmQKLSAgICAgICAgICBpbnRlcnJ1cHRpb24gc2lnbmFscyB0byBhbGxvdyB0aGUg dXNlciB0byBoYWx0IHRoZSBzeXN0ZW0KLSAgICAgICAgICBjb21tYW5kIGFuZCByZXR1cm4gdG8g S2VybWl0LiBUaGUgY29tbWFuZCBtdXN0IHJ1biBpbiBvcmRpbmFyeSwKLSAgICAgICAgICB1bnBy aXZpbGVnZWQgdXNlciBtb2RlLiBJZiBwb3NzaWJsZSwgdGhpcyBmdW5jdGlvbiBzaG91bGQgcmV0 dXJuCi0gICAgICAgICAgLTEgb24gZmFpbHVyZSB0byBzdGFydCB0aGUgY29tbWFuZCwgb3IgZWxz ZSBpdCBzaG91bGQgcmV0dXJuIDEKLSAgICAgICAgICBpZiB0aGUgY29tbWFuZCBzdWNjZWVkZWQg YW5kIDAgaWYgaXQgZmFpbGVkLgotCi0gICBWT0lECi0gICAgICAgICAgel9leGVjKHMsYXJncykg Y2hhciAqIHM7IGNoYXIgKiBhcmdzW107Ci0gICAgICAgICAgVGhpcyBvbmUgZXhlY3V0ZXMgdGhl IGNvbW1hbmQgcyAod2hpY2ggaXMgc2VhcmNoZWQgZm9yIHVzaW5nIHRoZQotICAgICAgICAgIHN5 c3RlbSdzIG5vcm1hbCBzZWFyY2hpbmcgbWVjaGFuaXNtLCBzdWNoIGFzIFBBVEggaW4gVU5JWCks IHdpdGgKLSAgICAgICAgICB0aGUgZ2l2ZW4gYXJndW1lbnQgdmVjdG9yLCB3aGljaCBmb2xsb3dz IHRoZSBjb252ZW50aW9ucyBvZiBVTklYCi0gICAgICAgICAgYXJndltdOiB0aGUgbmFtZSBvZiB0 aGUgY29tbWFuZCBwb2ludGVkIHRvIGJ5IGVsZW1lbnQgMCwgdGhlCi0gICAgICAgICAgZmlyc3Qg YXJnIGJ5IGVsZW1lbnQgMSwgYW5kIHNvIG9uLiBBIG51bGwgYXJnc1tdIHBvaW50ZXIKLSAgICAg ICAgICBpbmRpY2F0ZXMgdGhlIGVuZCBvZiB0aGUgYXJndW1lbnQgbGlzdC4gQWxsIG9wZW4gZmls ZXMgbXVzdAotICAgICAgICAgIHJlbWFpbiBvcGVuIHNvIHRoZSBleGVjJ2QgcHJvY2VzcyBjYW4g dXNlIHRoZW0uIFJldHVybnMgb25seSBpZgotICAgICAgICAgIHVuc3VjY2Vzc2Z1bC4KLQotICAg aW50Ci0gICAgICAgICAgenNpbmwobixzLHgpIGludCBuLCB4OyBjaGFyICpzOwotICAgICAgICAg IFJlYWRzIGEgbGluZSBmcm9tIGZpbGUgbnVtYmVyIG4uIFdyaXRlcyB0aGUgbGluZSBpbnRvIHRo ZQotICAgICAgICAgIGFkZHJlc3MgcyBwcm92aWRlZCBieSB0aGUgY2FsbGVyLiBXcml0aW5nIHRl cm1pbmF0ZXMgd2hlbgotICAgICAgICAgIG5ld2xpbmUgaXMgcmVhZCwgYnV0IHdpdGggbmV3bGlu ZSBkaXNjYXJkZWQuIFdyaXRpbmcgYWxzbwotICAgICAgICAgIHRlcm1pbmF0ZXMgdXBvbiBFT0Yg b3IgaWYgbGVuZ3RoIHggaXMgZXhoYXVzdGVkLiBSZXR1cm5zOgotICAgICAgICAgICAtMTogb24g RU9GIG9yIGVycm9yLgotICAgICAgICAgICAgMDogb24gc3VjY2Vzcy4KLQotICAgaW50Ci0gICAg ICAgICAgenNvdXQobixzKSBpbnQgbjsgY2hhciAqczsKLSAgICAgICAgICBXcml0ZXMgdGhlIHN0 cmluZyBzIG91dCB0byBmaWxlIG51bWJlciBuLiBSZXR1cm5zOgotICAgICAgICAgICAtMTogb24g ZmFpbHVyZS4KLSAgICAgICAgICAgIDA6IG9uIHN1Y2Nlc3MuCi0KLSAgIGludAotICAgICAgICAg IHpzb3V0bChuLHMpIGludCBuOyBjaGFyICpzOwotICAgICAgICAgIFdyaXRlcyB0aGUgc3RyaW5n IHMgb3V0IHRvIGZpbGUgbnVtYmVyIG4gYW5kIGFkZHMgYSBsaW5lCi0gICAgICAgICAgKHJlY29y ZCkgdGVybWluYXRvciAoYm91bmRhcnkpIGFwcHJvcHJpYXRlIGZvciB0aGUgc3lzdGVtIGFuZAot ICAgICAgICAgIHRoZSBmaWxlIGZvcm1hdC4gUmV0dXJuczoKLSAgICAgICAgICAgLTE6IG9uIGZh aWx1cmUuCi0gICAgICAgICAgICAwOiBvbiBzdWNjZXNzLgotCi0gICBpbnQKLSAgICAgICAgICB6 c291dHgobixzLHgpIGludCBuLCB4OyBjaGFyICpzOwotICAgICAgICAgIFdyaXRlcyBleGFjdGx5 IHggY2hhcmFjdGVycyBmcm9tIHN0cmluZyBzIHRvIGZpbGUgbnVtYmVyIG4uIElmIHMKLSAgICAg ICAgICBoYXMgZmV3ZXIgdGhhbiB4IGNoYXJhY3RlcnMsIHRoZW4gdGhlIGVudGlyZSBzdHJpbmcg cyBpcwotICAgICAgICAgIHdyaXR0ZW4uIFJldHVybnM6Ci0gICAgICAgICAgIC0xOiBvbiBmYWls dXJlLgotICAgICAgICAgID49IDA6IG9uIHN1Y2Nlc3MsIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVy cyBhY3R1YWxseSB3cml0dGVuLgotCi0gICBpbnQKLSAgICAgICAgICB6c3RpbWUoZm4seXkseCkg Y2hhciAqZm47IHN0cnVjdCB6YXR0ciAqeXk7IGludCB4OwotICAgICAgICAgIFNldHMgdGhlIGNy ZWF0aW9uIGRhdGUgKGFuZCBvdGhlciBhdHRyaWJ1dGVzKSBvZiBhbiBleGlzdGluZwotICAgICAg ICAgIGZpbGUsIG9yIGNvbXBhcmVzIGEgZmlsZSdzIGNyZWF0aW9uIGRhdGUgd2l0aCBhIGdpdmVu IGRhdGUuIENhbGwKLSAgICAgICAgICB3aXRoOgotCi0gICBmbjogcG9pbnRlciB0byBuYW1lIG9m IGV4aXN0aW5nIGZpbGUuCi0gICB5eTogUG9pbnRlciB0byBhIEtlcm1pdCBmaWxlIGF0dHJpYnV0 ZSBzdHJ1Y3R1cmUgaW4gd2hpY2ggeXktPmRhdGUudmFsCi0gICBpcyBhIGRhdGUgb2YgdGhlIGZv cm0geXl5eW1tZGQgaGg6bW06c3MsIGUuZy4gMTk5MDAyMDggMTM6MDA6MDAsIHdoaWNoCi0gICBp cyB0byBiZSB1c2VkIGZvciBzZXR0aW5nIG9yIGNvbXBhcmluZyB0aGUgZmlsZSBkYXRlLiBPdGhl ciBhdHRyaWJ1dGVzCi0gICBpbiB0aGUgc3RydWN0IGNhbiBhbHNvIGJlIHNldCwgc3VjaCBhcyB0 aGUgcHJvdGVjdGlvbi9wZXJtaXNzaW9uIChTZWUKLSAgIFsxMzJdQXBwZW5kaXggSSksIHdoZW4g aXQgbWFrZXMgc2Vuc2UgKGUuZy4gInl5LT5scHJvdGVjdC52YWwiIGNhbiBiZQotICAgc2V0IGlm IHRoZSByZW1vdGUgc3lzdGVtIElEIG1hdGNoZXMgdGhlIGxvY2FsIG9uZSkuCi0gICAgeDogQSBm dW5jdGlvbiBjb2RlOiAwIG1lYW5zIHRvIHNldCB0aGUgZmlsZSdzIGNyZWF0aW9uIGRhdGUgYXMg Z2l2ZW4uCi0gICAxIG1lYW5zIGNvbXBhcmUgdGhlIGRhdGUgZnJvbSB0aGUgeXkgc3RydWN0IHdp dGggdGhlIGZpbGUncyBkYXRlLgotCi0gICAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICAgLTE6 IG9uIGFueSBraW5kIG9mIGVycm9yLgotICAgICAgICAgICAgMDogaWYgeCBpcyAwIGFuZCB0aGUg ZmlsZSBkYXRlIHdhcyBzZXQgc3VjY2Vzc2Z1bGx5LgotICAgICAgICAgICAgMDogaWYgeCBpcyAx IGFuZCBkYXRlIGZyb20gYXR0cmlidXRlIHN0cnVjdHVyZSA+IGZpbGUgY3JlYXRpb24KLSAgICAg ICAgICBkYXRlLgotICAgICAgICAgICAgMTogaWYgeCBpcyAxIGFuZCBkYXRlIGZyb20gYXR0cmli dXRlIHN0cnVjdHVyZSA8PSBmaWxlCi0gICAgICAgICAgY3JlYXRpb24gZGF0ZS4KLQotICAgVk9J RAotICAgICAgICAgIHpzdHJpcChuYW1lLG5hbWUyKSBjaGFyICpuYW1lLCAqKm5hbWUyOwotICAg ICAgICAgIFN0cmlwcyBwYXRobmFtZSBmcm9tIGZpbGVuYW1lICJuYW1lIi4gQ29uc3RydWN0cyB0 aGUgcmVzdWx0aW5nCi0gICAgICAgICAgc3RyaW5nIGluIGEgc3RhdGljIGJ1ZmZlciBpbiBpdHMg b3duIHNwYWNlIGFuZCByZXR1cm5zIGEgcG9pbnRlcgotICAgICAgICAgIHRvIGl0IGluIG5hbWUy LiBBbHNvIHN0cmlwcyBkZXZpY2UgbmFtZSwgZmlsZSB2ZXJzaW9uIG51bWJlcnMsCi0gICAgICAg ICAgYW5kIG90aGVyICJub24tbmFtZSIgbWF0ZXJpYWwuCi0KLSAgIGludAotICAgICAgICAgIHp4 Y21kKG4scykgY2hhciAqczsKLSAgICAgICAgICBSdW5zIGEgc3lzdGVtIGNvbW1hbmQgc28gaXRz IG91dHB1dCBjYW4gYmUgYWNjZXNzZWQgYXMgaWYgaXQKLSAgICAgICAgICB3ZXJlIGZpbGUgbi4g VGhlIGNvbW1hbmQgaXMgcnVuIGluIG9yZGluYXJ5LCB1bnByaXZpbGVnZWQgdXNlcgotICAgICAg ICAgIG1vZGUuCi0gICAgICAgICAgSWYgbiBpcyBaU1RESU8gb3IgWkNURVJNLCByZXR1cm5zIC0x LgotICAgICAgICAgIElmIG4gaXMgWklGSUxFIG9yIFpSRklMRSwgdGhlbiBLZXJtaXQgcmVhZHMg ZnJvbSB0aGUgY29tbWFuZCwKLSAgICAgICAgICBvdGhlcndpc2UgS2VybWl0IHdyaXRlcyB0byB0 aGUgY29tbWFuZC4KLSAgICAgICAgICBSZXR1cm5zIDAgb24gZXJyb3IsIDEgb24gc3VjY2Vzcy4K LQotICAgaW50Ci0gICAgICAgICAgenhwYW5kKGZuKSBjaGFyICpmbjsKLSAgICAgICAgICBPQlNP TEVURTogUmVwbGFjZWQgYnkgbnp4cGFuZCgpLCBxLnYuCi0KLSAgICNpZmRlZiBaWFJFV0lORAot ICAgaW50Ci0gICAgICAgICAgenhyZXdpbmQoKQotICAgICAgICAgIFJldHVybnMgdGhlIG51bWJl ciBvZiBmaWxlcyByZXR1cm5lZCBieSB0aGUgbW9zdCByZWNlbnQKLSAgICAgICAgICBuenhwYW5k KCkgY2FsbCwgYW5kIHJlc2V0cyB0aGUgbGlzdCB0byB0aGUgYmVnaW5uaW5nIHNvIHRoZSBuZXh0 Ci0gICAgICAgICAgem5leHQoKSBjYWxsIHJldHVybnMgdGhlIGZpcnN0IGZpbGUuIFJldHVybnMg LTEgaWYgenhwYW5kIGhhcwotICAgICAgICAgIG5vdCB5ZXQgYmVlbiBjYWxsZWQuIElmIHRoaXMg ZnVuY3Rpb24gaXMgYXZhaWxhYmxlLCBaWFJFV0lORAotICAgICAgICAgIHNob3VsZCBiZSBkZWZp bmVkOyBvdGhlcndpc2UgaXQgc2hvdWxkIG5vdCBiZSByZWZlcmVuY2VkLgotCi0gICAjZW5kaWYg LyogWlhSRVdJTkQgKi8KLQotICAgaW50Ci0gICAgICAgICAgeHN5c3RlbShjbWQpIGNoYXIgKmNt ZDsKLSAgICAgICAgICBFeGVjdXRlcyB0aGUgc3lzdGVtIGNvbW1hbmQgd2l0aG91dCByZWRpcmVj dGluZyBhbnkgb2YgaXRzIGkvbywKLSAgICAgICAgICBzaW1pbGFyICh3ZWxsLCBpZGVudGljYWwp IHRvIHN5c3RlbSgpIGluIFVuaXguIEJ1dCBiZWZvcmUKLSAgICAgICAgICBwYXNzaW5nIHRoZSBj b21tYW5kIHRvIHRoZSBzeXN0ZW0sIHhzeXN0ZW0oKSBlbnN1cmVzIHRoYXQgYWxsCi0gICAgICAg ICAgcHJpdmlsZWdlcyBhcmUgdHVybmVkIG9mZiwgc28gdGhhdCB0aGUgc3lzdGVtIGNvbW1hbmQg ZXhlY3V0ZXMKLSAgICAgICAgICBpbiBvcmRpbmFyeSB1bnByaXZpbGVnZWQgdXNlciBtb2RlLiBJ ZiBwb3NzaWJsZSwgeHN5c3RlbSgpCi0gICAgICAgICAgcmV0dXJucyB0aGUgcmV0dXJuIGNvZGUg b2YgdGhlIGNvbW1hbmQgdGhhdCB3YXMgZXhlY3V0ZWQuCi0KLTQuRS4yLjIuIElLU0QgVmFyaWFi bGVzIGFuZCBGdW5jdGlvbnMKLQotICAgVGhlc2UgbXVzdCBiZSBpbXBsZW1lbnRlZCBpbiBhbnkg Qy1LZXJtaXQgdmVyc2lvbiB0aGF0IGlzIHRvIGJlCi0gICBpbnN0YWxsZWQgYXMgYW4gSW50ZXJu ZXQgS2VybWl0IFNlcnZpY2UgRGFlbW9uIChJS1NEKS4gSUtTRCBpcyBleHBlY3RlZAotICAgdG8g YmUgc3RhcnRlZCBieSB0aGUgSW50ZXJuZXQgRGFlbW9uIChlLmcuIGluZXRkKSB3aXRoIGl0cyBz dGFuZGFyZCBpL28KLSAgIHJlZGlyZWN0ZWQgdG8gdGhlIGluY29taW5nIGNvbm5lY3Rpb24uCi0K LSAgIGludCBja3hhbm9uOwotICAgICAgICAgIE5vbnplcm8gaWYgYW5vbnltb3VzIGxvZ2lucyBh bGxvd2VkLgotCi0gICBleHRlcm4gaW50IGluc2VydmVyOwotICAgICAgICAgIE5vbnplcm8gaWYg c3RhcnRlZCBpbiBJS1NEIG1vZGUuCi0KLSAgIGV4dGVybiBpbnQgaXNndWVzdDsKLSAgICAgICAg ICBOb256ZXJvIGlmIElLU0QgYW5kIHVzZXIgbG9nZ2VkIGluIGFub255bW91c2x5LgotCi0gICBl eHRlcm4gY2hhciAqIGhvbWRpcjsKLSAgICAgICAgICBQb2ludGVyIHRvIHVzZXIncyBob21lIGRp cmVjdG9yeS4KLQotICAgZXh0ZXJuIGNoYXIgKiBhbm9ucm9vdDsKLSAgICAgICAgICBQb2ludGVy IHRvIGZpbGUtc3lzdGVtIHJvb3QgZm9yIGFub255bW91cyB1c2Vycy4KLQotICAgRXhpc3Rpbmcg ZnVuY3Rpb25zIG11c3QgbWFrZSAiaWYgKGluc2VydmVyICYmIGlzZ3Vlc3QpIiBjaGVja3MgZm9y Ci0gICBhY3Rpb25zIHRoYXQgd291bGQgbm90IGJlIGxlZ2FsIGZvciBndWVzdHM6IHpkZWxldGUo KSwgenJtZGlyKCksCi0gICB6cHJpbnQoKSwgem1haWwoKSwgZXRjLgotCi0gICBpbnQKLSAgICAg ICAgICB6dnVzZXIobmFtZSkgY2hhciAqIG5hbWU7Ci0gICAgICAgICAgVmVyaWZpZXMgdGhhdCB1 c2VyICJuYW1lIiBleGlzdHMgYW5kIGlzIGFsbG93ZWQgdG8gbG9nIGluLiBJZgotICAgICAgICAg IHRoZSBuYW1lIGlzICJmdHAiIG9yICJhbm9ueW1vdXMiIGFuZCBja3hhbm9uICE9IDAsIGEgZ3Vl c3QgbG9naW4KLSAgICAgICAgICBpcyBzZXQgdXAuIFJldHVybnMgMCBpZiB1c2VyIG5vdCBhbGxv d2VkIHRvIGxvZyBpbiwgbm9uemVybyBpZgotICAgICAgICAgIHVzZXIgbWF5IGxvZyBpbi4KLQot ICAgaW50Ci0gICAgICAgICAgenZwYXNzKHN0cmluZykgY2hhciAqIHN0cmluZzsKLSAgICAgICAg ICBWZXJpZmllcyBwYXNzd29yZCBvZiB0aGUgdXNlciBmcm9tIHRoZSBtb3N0IHJlY2VudCB6dnVz ZXIoKQotICAgICAgICAgIGNhbGwuIFJldHVybnMgbm9uemVybyBpZiBwYXNzd29yZCBpcyB2YWxp ZCBmb3IgdXNlciwgMCBpZiBpdAotICAgICAgICAgIGlzbid0LiBNYWtlcyBhbnkgYXBwcm9wcmlh dGUgc3lzdGVtIGxvZyBlbnRyaWVzIChJS1NEIGxvZ2lucywKLSAgICAgICAgICBmYWlsZWQgbG9n aW4gYXR0ZW1wdHMsIGV0YykuIElmIHBhc3N3b3JkIGlzIHZhbGlkLCBsb2dzIHRoZSB1c2VyCi0g ICAgICAgICAgaW4gYXMgaGVyc2VsZiAoaWYgcmVhbCB1c2VyKSwgb3Igc2V0cyB1cCByZXN0cmlj dGVkIGFub255bW91cwotICAgICAgICAgIGFjY2VzcyBpZiB1c2VyIGlzIGd1ZXN0IChlLmcuIGNo YW5nZXMgZmlsZS1zeXN0ZW0gcm9vdCB0bwotICAgICAgICAgIGFub25yb290IGFuZCBzZXRzIGlz Z3Vlc3QgPSAxKS4KLQotICAgVk9JRAotICAgICAgICAgIHpzeXNsb2coKQotICAgICAgICAgIEJl Z2lucyBhbnkgZGVzaXJlZCBzeXN0ZW0gbG9nZ2luZyBvZiBhbiBJS1NEIHNlc3Npb24uCi0KLSAg IFZPSUQKLSAgICAgICAgICB6dmxvZ291dCgpCi0gICAgICAgICAgVGVybWluYXRlcyBhbiBJS1NE IHNlc3Npb24uIEluIG1vc3QgY2FzZXMgdGhpcyBpcyBzaW1wbHkgYQotICAgICAgICAgIHdyYXBw ZXIgZm9yIGV4aXQoKSBvciBkb2V4aXQoKSwgd2l0aCBzb21lIHN5c3RlbSBsb2dnaW5nIGFkZGVk LgotCi00LkUuMi4zLiBQcml2aWxlZ2UgRnVuY3Rpb25zCi0KLSAgIFRoZXNlIGZ1bmN0aW9ucyBh cmUgdXNlZCBieSBDLUtlcm1pdCB0byBhZGFwdCBpdHNlbGYgdG8gb3BlcmF0aW5nCi0gICBzeXN0 ZW1zIHdoZXJlIHRoZSBwcm9ncmFtIGNhbiBiZSBtYWRlIHRvIHJ1biBpbiBhICJwcml2aWxlZ2Vk IiBtb2RlLAotICAgZS5nLiBzZXR1aWQgb3Igc2V0Z2lkIGluIFVuaXguIEMtS2VybWl0IHNob3Vs ZCBOT1QgcmVhZCBhbmQgd3JpdGUgZmlsZXMKLSAgIG9yIHN0YXJ0IHN1YnByb2Nlc3NlcyBhcyBh IHByaXZpbGVnZWQgcHJvZ3JhbS4gVGhpcyB3b3VsZCBwcmVzZW50IGEKLSAgIHNlcmlvdXMgdGhy ZWF0IHRvIHN5c3RlbSBzZWN1cml0eS4gVGhlIHNlY3VyaXR5IHBhY2thZ2UgaGFzIGJlZW4KLSAg IGluc3RhbGxlZCB0byBwcmV2ZW50IHN1Y2ggc2VjdXJpdHkgYnJlYWNoZXMgYnkgdHVybmluZyBv ZmYgdGhlCi0gICBwcm9ncmFtJ3Mgc3BlY2lhbCBwcml2aWxlZ2VzIGF0IGFsbCB0aW1lcyBleGNl cHQgd2hlbiB0aGV5IGFyZSBuZWVkZWQuCi0KLSAgIEluIFVOSVgsIHRoZSBvbmx5IG5lZWQgS2Vy bWl0IGhhcyBmb3IgcHJpdmlsZWdlZCBzdGF0dXMgaXMgYWNjZXNzIHRvCi0gICB0aGUgVVVDUCBs b2NrZmlsZSBkaXJlY3RvcnksIGluIG9yZGVyIHRvIHJlYWQsIGNyZWF0ZSwgYW5kIGRlc3Ryb3kK LSAgIGxvY2tmaWxlcywgYW5kIHRvIG9wZW4gY29tbXVuaWNhdGlvbiBkZXZpY2VzIHRoYXQgYXJl IG5vcm1hbGx5Ci0gICBwcm90ZWN0ZWQgYWdhaW5zdCB0aGUgdXNlciAoc2VlIHRoZSBbMTMzXVVu aXggQy1LZXJtaXQgSW5zdGFsbGF0aW9uCi0gICBJbnN0cnVjdGlvbnMgZm9yIGRpc2N1c3Npb24p LiBUaGVyZWZvcmUsIHByaXZpbGVnZXMgc2hvdWxkIG9ubHkgYmUKLSAgIGVuYWJsZWQgZm9yIHRo ZXNlIG9wZXJhdGlvbnMgYW5kIGRpc2FibGVkIGF0IGFsbCBvdGhlciB0aW1lcy4gVGhpcwotICAg cmVsaWV2ZXMgdGhlIHByb2dyYW1tZXIgb2YgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHB1dHRpbmcg ZXhwZW5zaXZlIGFuZAotICAgdW5yZWxpYWJsZSBhY2Nlc3MgY2hlY2tzIGFyb3VuZCBldmVyeSBm aWxlIGFjY2VzcyBhbmQgc3VicHJvY2VzcwotICAgY3JlYXRpb24uCi0KLSAgIFN0cmljdGx5IHNw ZWFraW5nLCB0aGVzZSBmdW5jdGlvbnMgYXJlIG5vdCByZXF1aXJlZCBpbiBhbGwgQy1LZXJtaXQK LSAgIGltcGxlbWVudGF0aW9ucywgYmVjYXVzZSB0aGVpciB1c2UgKHNvIGZhciwgYXQgbGVhc3Qp IGlzIGludGVybmFsIHRvCi0gICB0aGUgR3JvdXAgRSBtb2R1bGVzLiBIb3dldmVyLCB0aGV5IHNo b3VsZCBiZSBpbmNsdWRlZCBpbiBhbGwgQy1LZXJtaXQKLSAgIGltcGxlbWVudGF0aW9ucyBmb3Ig b3BlcmF0aW5nIHN5c3RlbXMgdGhhdCBzdXBwb3J0IHRoZSBub3Rpb24gb2YgYQotICAgcHJpdmls ZWdlZCBwcm9ncmFtIChVTklYLCBSU1RTL0UsIHdoYXQgb3RoZXJzPykuCi0KLSAgIGludAotICAg ICAgICAgIHByaXZfaW5pKCkKLSAgICAgICAgICBEZXRlcm1pbmUgd2hldGhlciB0aGUgcHJvZ3Jh bSBpcyBydW5uaW5nIGluIHByaXZpbGVnZWQgc3RhdHVzLgotICAgICAgICAgIElmIHNvLCB0dXJu IG9mZiB0aGUgcHJpdmlsZWdlcywgaW4gc3VjaCBhIHdheSB0aGF0IHRoZXkgY2FuIGJlCi0gICAg ICAgICAgdHVybmVkIG9uIGFnYWluIHdoZW4gbmVlZGVkLiBDYWxsZWQgZnJvbSBzeXNpbml0KCkg YXQgcHJvZ3JhbQotICAgICAgICAgIHN0YXJ0dXAgdGltZS4gUmV0dXJuczoKLSAgICAgICAgICAg IDAgb24gc3VjY2VzcwotICAgICAgICAgICAgbm9uemVybyBvbiBmYWlsdXJlLCBpbiB3aGljaCBj YXNlIHRoZSBwcm9ncmFtIHNob3VsZCBoYWx0Ci0gICAgICAgICAgaW1tZWRpYXRlbHkuCi0KLSAg IGludAotICAgICAgICAgIHByaXZfb24oKQotICAgICAgICAgIElmIHRoZSBwcm9ncmFtIGlzIG5v dCBwcml2aWxlZ2VkLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4gSWYKLSAgICAgICAgICB0 aGUgcHJvZ3JhbSBpcyBwcml2aWxlZ2VkLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgaXQgdG8KLSAg ICAgICAgICBwcml2aWxlZ2VkIHN0YXR1cy4gcHJpdl9pbmkoKSBtdXN0IGhhdmUgYmVlbiBjYWxs ZWQgZmlyc3QuCi0gICAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICAgIDAgb24gc3VjY2Vzcwot ICAgICAgICAgICAgbm9uemVybyBvbiBmYWlsdXJlCi0KLSAgIGludAotICAgICAgICAgIHByaXZf b2ZmKCkKLSAgICAgICAgICBUdXJucyBwcml2aWxlZ2VzIG9mZiAoaWYgdGhleSBhcmUgb24pIGlu IHN1Y2ggYSB3YXkgdGhhdCB0aGV5Ci0gICAgICAgICAgY2FuIGJlIHR1cm5lZCBiYWNrIG9uIGFn YWluLiBSZXR1cm5zOgotICAgICAgICAgICAgMCBvbiBzdWNjZXNzCi0gICAgICAgICAgICBub256 ZXJvIG9uIGZhaWx1cmUKLQotICAgaW50Ci0gICAgICAgICAgcHJpdl9jYW4oKQotICAgICAgICAg IFR1cm5zIHByaXZpbGVnZXMgb2ZmIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGV5IGNhbm5vdCBiZSB0 dXJuZWQKLSAgICAgICAgICBiYWNrIG9uLiBSZXR1cm5zOgotICAgICAgICAgICAgMCBvbiBzdWNj ZXNzCi0gICAgICAgICAgICBub256ZXJvIG9uIGZhaWx1cmUKLQotICAgaW50Ci0gICAgICAgICAg cHJpdl9jaGsoKQotICAgICAgICAgIEF0dGVtcHRzIHRvIHR1cm5zIHByaXZpbGVnZXMgb2ZmIGlu IHN1Y2ggYSB3YXkgdGhhdCB0aGV5IGNhbiBiZQotICAgICAgICAgIHR1cm5lZCBvbiBhZ2FpbiBs YXRlci4gVGhlbiBjaGVja3MgdG8gbWFrZSBzdXJlIHRoYXQgdGhleSB3ZXJlCi0gICAgICAgICAg cmVhbGx5IHR1cm5lZCBvZmYuIElmIHRoZXkgd2VyZSBub3QgcmVhbGx5IHR1cm5lZCBvZmYsIHRo ZW4gdGhleQotICAgICAgICAgIGFyZSBjYW5jZWxlZCBwZXJtYW5lbnRseS4gUmV0dXJuczoKLSAg ICAgICAgICAgIDAgb24gc3VjY2VzcwotICAgICAgICAgICAgbm9uemVybyBvbiBmYWlsdXJlCi0K LTQuRS4yLjQuIENvbnNvbGUtUmVsYXRlZCBGdW5jdGlvbnMKLQotICAgVGhlc2UgcmVsYXRlIHRv IHRoZSBwcm9ncmFtJ3MgImNvbnNvbGUiLCBvciBjb250cm9sbGluZyB0ZXJtaW5hbCwgaS5lLgot ICAgdGhlIHRlcm1pbmFsIHRoYXQgdGhlIHVzZXIgaXMgbG9nZ2VkIGluIG9uIGFuZCB0eXBlcyBj b21tYW5kcyBhdCwgb3Igb24KLSAgIGEgUEMgb3Igd29ya3N0YXRpb24sIHRoZSBhY3R1YWwga2V5 Ym9hcmQgYW5kIHNjcmVlbi4KLQotICAgaW50Ci0gICAgICAgICAgY29uYmluKGVzYykgY2hhciBl c2M7Ci0gICAgICAgICAgUHV0cyB0aGUgY29uc29sZSBpbnRvICJiaW5hcnkiIG1vZGUsIHNvIHRo YXQgS2VybWl0J3MgY29tbWFuZAotICAgICAgICAgIHBhcnNlciBjYW4gY29udHJvbCBlY2hvaW5n IGFuZCBvdGhlciB0cmVhdG1lbnQgb2YgY2hhcmFjdGVycwotICAgICAgICAgIHRoYXQgdGhlIHVz ZXIgdHlwZXMuIGVzYyBpcyB0aGUgY2hhcmFjdGVyIHRoYXQgd2lsbCBiZSB1c2VkIHRvCi0gICAg ICAgICAgZ2V0IEtlcm1pdCdzIGF0dGVudGlvbiBkdXJpbmcgcGFja2V0IG1vZGU7IHB1dHMgdGhp cyBpbiBhIGdsb2JhbAotICAgICAgICAgIHBsYWNlLiBTZXRzIHRoZSBja3hlY2ggdmFyaWFibGUu IFJldHVybnM6Ci0gICAgICAgICAgIC0xOiBvbiBlcnJvci4KLSAgICAgICAgICAgIDA6IG9uIHN1 Y2Nlc3MuCi0KLSAgIGludAotICAgICAgICAgIGNvbmNiKGVzYykgY2hhciBlc2M7Ci0gICAgICAg ICAgUHV0IGNvbnNvbGUgaW4gImNicmVhayIgKHNpbmdsZS1jaGFyYWN0ZXIgd2FrZXVwKSBtb2Rl LiBUaGF0IGlzLAotICAgICAgICAgIGVuc3VyZSB0aGF0IGVhY2ggY29uc29sZSBjaGFyYWN0ZXIg aXMgYXZhaWxhYmxlIHRvIHRoZSBwcm9ncmFtCi0gICAgICAgICAgaW1tZWRpYXRlbHkgd2hlbiB0 aGUgdXNlciB0eXBlcyBpdC4gT3RoZXJ3aXNlIGp1c3QgbGlrZQotICAgICAgICAgIGNvbmJpbigp LiBSZXR1cm5zOgotICAgICAgICAgICAtMTogb24gZXJyb3IuCi0gICAgICAgICAgICAwOiBvbiBz dWNjZXNzLgotCi0gICBpbnQKLSAgICAgICAgICBjb25jaGsoKQotICAgICAgICAgIFJldHVybnMg YSBudW1iZXIsIDAgb3IgZ3JlYXRlciwgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdhaXRpbmcK LSAgICAgICAgICB0byBiZSByZWFkIGZyb20gdGhlIGNvbnNvbGUsIGkuZS4gdGhlIG51bWJlciBv ZiBjaGFyYWN0ZXJzIHRoYXQKLSAgICAgICAgICB0aGUgdXNlciBoYXMgdHlwZWQgdGhhdCBoYXZl IG5vdCBiZWVuIHJlYWQgeWV0IGJ5IEtlcm1pdC4KLQotICAgbG9uZwotICAgICAgICAgIGNvbmdz cGQoKTsKLSAgICAgICAgICBSZXR1cm5zIHRoZSBzcGVlZCAoImJhdWQgcmF0ZSIpIG9mIHRoZSBj b250cm9sbGluZyB0ZXJtaW5hbCwgaWYKLSAgICAgICAgICBrbm93biwgb3RoZXJ3aXNlIC0xTC4K LQotICAgaW50Ci0gICAgICAgICAgY29uZ2tzKHRpbW8pIGludCB0aW1vOwotICAgICAgICAgIEdl dCBLZXlib2FyZCBTY2FuY29kZS4gUmVhZHMgYSBrZXlib2FyZCBzY2FuIGNvZGUgZnJvbSB0aGUK LSAgICAgICAgICBwaHlzaWNhbCBjb25zb2xlIGtleWJvYXJkLiBJZiB0aGUgdGltbyBwYXJhbWV0 ZXIgaXMgZ3JlYXRlciB0aGFuCi0gICAgICAgICAgemVybywgdGhlbiB0aW1lcyBvdXQgYW5kIHJl dHVybnMgLTIgaWYgbm8gY2hhcmFjdGVyIGFwcGVhcnMKLSAgICAgICAgICB3aXRoaW4gdGhlIGdp dmVuIG51bWJlciBvZiBzZWNvbmRzLiBVcG9uIGFueSBvdGhlciBraW5kIG9mCi0gICAgICAgICAg ZXJyb3IsIHJldHVybnMgLTEuIFVwb24gc3VjY2VzcyByZXR1cm5zIGEgc2NhbiBjb2RlLCB3aGlj aCBtYXkKLSAgICAgICAgICBiZSBhbnkgcG9zaXRpdmUgaW50ZWdlci4gRm9yIHNpdHVhdGlvbnMg d2hlcmUgc2NhbiBjb2RlcyBjYW5ub3QKLSAgICAgICAgICBiZSByZWFkIChmb3IgZXhhbXBsZSwg d2hlbiBhbiBBU0NJSSB0ZXJtaW5hbCBpcyB1c2VkIGFzIHRoZQotICAgICAgICAgIGpvYidzIGNv bnRyb2xsaW5nIHRlcm1pbmFsKSwgdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8KLSAgICAg ICAgICBjb25pbmMoKSwgaS5lLiBpdCByZXR1cm5zIGFuIDgtYml0IGNoYXJhY3RlciB2YWx1ZS4g Y29uZ2tzKCkgaXMKLSAgICAgICAgICBmb3IgdXNlIHdpdGggd29ya3N0YXRpb25zIHdob3NlIGtl eWJvYXJkcyBoYXZlIEFsdGVybmF0ZSwKLSAgICAgICAgICBDb21tYW5kLCBPcHRpb24sIGFuZCBz aW1pbGFyIG1vZGlmaWVyIGtleXMsIGFuZCBGdW5jdGlvbiBrZXlzCi0gICAgICAgICAgdGhhdCBn ZW5lcmF0ZSBjb2RlcyBncmVhdGVyIHRoYW4gMjU1LgotCi0gICBpbnQKLSAgICAgICAgICBjb25n bSgpCi0gICAgICAgICAgQ29uc29sZSBnZXQgbW9kZXMuIEdldHMgdGhlIGN1cnJlbnQgY29uc29s ZSB0ZXJtaW5hbCBtb2RlcyBhbmQKLSAgICAgICAgICBzYXZlcyB0aGVtIHNvIHRoYXQgY29ucmVz KCkgY2FuIHJlc3RvcmUgdGhlbSBsYXRlci4gUmV0dXJucyAxIGlmCi0gICAgICAgICAgaXQgZ290 IHRoZSBtb2RlcyBPSywgMCBpZiBpdCBkaWQgbm90aGluZyAoZS5nLiBiZWNhdXNlIEtlcm1pdCBp cwotICAgICAgICAgIG5vdCBjb25uZWN0ZWQgd2l0aCBhbnkgdGVybWluYWwpLCAtMSBvbiBlcnJv ci4KLQotICAgaW50Ci0gICAgICAgICAgY29uaW5jKHRpbW8pIGludCB0aW1vOwotICAgICAgICAg IENvbnNvbGUgSW5wdXQgQ2hhcmFjdGVyLiBSZWFkcyBhIGNoYXJhY3RlciBmcm9tIHRoZSBjb25z b2xlLiBJZgotICAgICAgICAgIHRoZSB0aW1vIHBhcmFtZXRlciBpcyBncmVhdGVyIHRoYW4gemVy bywgdGhlbiBjb25pbmMoKSB0aW1lcyBvdXQKLSAgICAgICAgICBhbmQgcmV0dXJucyAtMiBpZiBu byBjaGFyYWN0ZXIgYXBwZWFycyB3aXRoaW4gdGhlIGdpdmVuIG51bWJlcgotICAgICAgICAgIG9m IHNlY29uZHMuIFVwb24gYW55IG90aGVyIGtpbmQgb2YgZXJyb3IsIHJldHVybnMgLTEuIFVwb24K LSAgICAgICAgICBzdWNjZXNzLCByZXR1cm5zIHRoZSBjaGFyYWN0ZXIgaXRzZWxmLCB3aXRoIGEg dmFsdWUgaW4gdGhlIHJhbmdlCi0gICAgICAgICAgMC0yNTUgZGVjaW1hbC4KLQotICAgVk9JRAot ICAgICAgICAgIGNvbmludChmLHMpIFNJR1RZUCAoKmYpKCksICgqcykoKTsKLSAgICAgICAgICBT ZXRzIHRoZSBjb25zb2xlIHRvIGdlbmVyYXRlIGFuIGludGVycnVwdCBpZiB0aGUgdXNlciB0eXBl cyBhCi0gICAgICAgICAga2V5Ym9hcmQgaW50ZXJydXB0IGNoYXJhY3RlciwgYW5kIHRvIHRyYW5z ZmVyIGNvbnRyb2wgdGhlCi0gICAgICAgICAgc2lnbmFsLWhhbmRsaW5nIGZ1bmN0aW9uIGYuIEZv ciBzeXN0ZW1zIHdpdGggam9iIGNvbnRyb2wsIHMgaXMKLSAgICAgICAgICB0aGUgYWRkcmVzcyBv ZiB0aGUgZnVuY3Rpb24gdGhhdCBzdXNwZW5kcyB0aGUgam9iLiBTZXRzIHRoZQotICAgICAgICAg IGdsb2JhbCB2YXJpYWJsZSAiYmFja2dyZCIgdG8gemVybyBpZiBLZXJtaXQgaXMgcnVubmluZyBp biB0aGUKLSAgICAgICAgICBmb3JlZ3JvdW5kLCBhbmQgdG8gbm9uemVybyBpZiBLZXJtaXQgaXMg cnVubmluZyBpbiB0aGUKLSAgICAgICAgICBiYWNrZ3JvdW5kLiBTZWUgY2tjZGViLmggZm9yIHRo ZSBkZWZpbml0aW9uIG9mIFNJR1RZUC4gTm8gcmV0dXJuCi0gICAgICAgICAgdmFsdWUuCi0KLSAg IFZPSUQKLSAgICAgICAgICBjb25ub2koKQotICAgICAgICAgIENvbnNvbGUgbm8gaW50ZXJydXB0 cy4gRGlzYWJsZSBrZXlib2FyZCBpbnRlcnJ1cHRzIG9uIHRoZQotICAgICAgICAgIGNvbnNvbGUu IE5vIHJldHVybiB2YWx1ZS4KLQotICAgaW50Ci0gICAgICAgICAgY29ub2MoYykgY2hhciBjOwot ICAgICAgICAgIFdyaXRlcyBjaGFyYWN0ZXIgYyB0byB0aGUgY29uc29sZSB0ZXJtaW5hbC4gUmV0 dXJuczoKLSAgICAgICAgICAwIG9uIGZhaWx1cmUsIDEgb24gc3VjY2Vzcy4KLQotICAgaW50Ci0g ICAgICAgICAgY29ub2wocykgY2hhciAqczsKLSAgICAgICAgICBXcml0ZXMgc3RyaW5nIHMgdG8g dGhlIGNvbnNvbGUuIFJldHVybnMgLTEgb24gZXJyb3IsIDAgb3IKLSAgICAgICAgICBncmVhdGVy IG9uIHN1Y2Nlc3MuCi0KLSAgIGludAotICAgICAgICAgIGNvbm9sYShzKSBjaGFyICpzW107IHsK LSAgICAgICAgICBXcml0ZXMgYW4gYXJyYXkgb2Ygc3RyaW5ncyB0byB0aGUgY29uc29sZS4gUmV0 dXJucyAtMSBvbiBlcnJvciwKLSAgICAgICAgICAwIG9yIGdyZWF0ZXIgb24gc3VjY2Vzcy4KLQot ICAgaW50Ci0gICAgICAgICAgY29ub2xsKHMpIGNoYXIgKnM7Ci0gICAgICAgICAgV3JpdGVzIHN0 cmluZyBzIHRvIHRoZSBjb25zb2xlLCBmb2xsb3dlZCBieSB0aGUgbmVjZXNzYXJ5IGxpbmUKLSAg ICAgICAgICB0ZXJtaW5hdGlvbiBjaGFyYWN0ZXJzIHRvIHB1dCB0aGUgY29uc29sZSBjdXJzb3Ig YXQgdGhlCi0gICAgICAgICAgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGxpbmUuIFJldHVybnMgLTEg b24gZXJyb3IsIDAgb3IgZ3JlYXRlciBvbgotICAgICAgICAgIHN1Y2Nlc3MuCi0KLSAgIGludAot ICAgICAgICAgIGNvbnJlcygpCi0gICAgICAgICAgUmVzdG9yZXMgdGhlIGNvbnNvbGUgdGVybWlu YWwgdG8gdGhlIG1vZGVzIG9idGFpbmVkIGJ5IGNvbmdtKCkuCi0gICAgICAgICAgUmV0dXJuczog LTEgb24gZXJyb3IsIDAgb24gc3VjY2Vzcy4KLQotICAgaW50Ci0gICAgICAgICAgY29ueG8oeCxz KSBpbnQgeDsgY2hhciAqczsKLSAgICAgICAgICBXcml0ZSB4IGNoYXJhY3RlcnMgZnJvbSBzdHJp bmcgcyB0byB0aGUgY29uc29sZS4gUmV0dXJucyAwIG9yCi0gICAgICAgICAgZ3JlYXRlciBvbiBz dWNjZXNzLCAtMSBvbiBlcnJvci4KLQotICAgY2hhciAqCi0gICAgICAgICAgY29ua2JnKCk7Ci0g ICAgICAgICAgUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGRlc2lnbmF0b3Igb2YgdGhlIGNvbnNv bGUga2V5Ym9hcmQKLSAgICAgICAgICB0eXBlLiBGb3IgZXhhbXBsZSwgb24gYSBQQywgdGhpcyBm dW5jdGlvbiB3b3VsZCByZXR1cm4gIjg4IiwKLSAgICAgICAgICAiMTAxIiwgZXRjLiBVcG9uIGZh aWx1cmUsIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBlbXB0eSBzdHJpbmcuCi0KLTQuRS4yLjUu IENvbW11bmljYXRpb25zIEZ1bmN0aW9ucwotCi0gICBUaGUgY29tbXVuaWNhdGlvbiBkZXZpY2Ug aXMgdGhlIGRldmljZSB1c2VkIGZvciB0ZXJtaW5hbCBlbXVsYXRpb24gYW5kCi0gICBmaWxlIHRy YW5zZmVyLiBJdCBtYXkgb3IgbWF5IG5vdCBiZSB0aGUgc2FtZSBkZXZpY2UgYXMgdGhlIGNvbnNv bGUsIGFuZAotICAgaXQgbWF5IG9yIG1heSBub3QgYmUgYSB0ZXJtaW5hbCAoc2VyaWFsLXBvcnQp IGRldmljZTsgaXQgY291bGQgYWxzbyBiZQotICAgYSBuZXR3b3JrIGNvbm5lY3Rpb24uIEZvciBi cmV2aXR5LCB0aGUgY29tbXVuaWNhdGlvbiBkZXZpY2UgaXMgcmVmZXJyZWQKLSAgIHRvIGhlcmUg YXMgdGhlICJ0dHkiLiBXaGVuIHRoZSBjb21tdW5pY2F0aW9uIGRldmljZSBpcyB0aGUgc2FtZSBh cyB0aGUKLSAgIGNvbnNvbGUgZGV2aWNlLCBLZXJtaXQgaXMgc2FpZCB0byBiZSBpbiByZW1vdGUg bW9kZS4gV2hlbiB0aGUgdHdvCi0gICBkZXZpY2VzIGFyZSBkaWZmZXJlbnQsIEtlcm1pdCBpcyBp biBsb2NhbCBtb2RlLgotCi0gICBpbnQKLSAgICAgICAgICB0dGNoaygpCi0gICAgICAgICAgUmV0 dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCBoYXZlIGFycml2ZWQgYXQgdGhlCi0g ICAgICAgICAgY29tbXVuaWNhdGlvbiBkZXZpY2UgYnV0IGhhdmUgbm90IHlldCBiZWVuIHJlYWQg YnkgdHRpbmMoKSwKLSAgICAgICAgICB0dGlubCgpLCBhbmQgZnJpZW5kcy4gSWYgY29tbXVuaWNh dGlvbiBpbnB1dCBpcyBidWZmZXJlZCAoYW5kIGl0Ci0gICAgICAgICAgc2hvdWxkIGJlKSwgdGhp cyBpcyB0aGUgc3VtIG9mIHRoZSBudW1iZXIgb2YgdW5yZWFkIGNoYXJhY3RlcnMKLSAgICAgICAg ICBpbiBLZXJtaXQncyBidWZmZXIgUExVUyB0aGUgbnVtYmVyIG9mIHVucmVhZCBjaGFyYWN0ZXJz IGluIHRoZQotICAgICAgICAgIG9wZXJhdGluZyBzeXN0ZW0ncyBpbnRlcm5hbCBidWZmZXIuIFRo ZSBjYWxsIG11c3QgYmUKLSAgICAgICAgICBub25kZXN0cnVjdGl2ZSBhbmQgbm9uYmxvY2tpbmcs IGFuZCBhcyBpbmV4cGVuc2l2ZSBhcyBwb3NzaWJsZS4KLSAgICAgICAgICBSZXR1cm5zOgotICAg ICAgICAgICAgMDogb3IgZ3JlYXRlciBvbiBzdWNjZXNzLAotICAgICAgICAgICAgMDogaW4gY2Fz ZSBvZiBpbnRlcm5hbCBlcnJvciwKLSAgICAgICAgICAgLTE6IG9yIGxlc3Mgd2hlbiBpdCBkZXRl cm1pbmVzIHRoZSBjb25uZWN0aW9uIGhhcyBiZWVuIGJyb2tlbiwKLSAgICAgICAgICBvciB0aGVy ZSBpcyBubyBjb25uZWN0aW9uLgotCi0gICAgICAgICAgVGhhdCBpcywgYSBuZWdhdGl2ZSByZXR1 cm4gZnJvbSB0dGNoaygpIHNob3VsZCByZWxpYWJseSBpbmRpY2F0ZQotICAgICAgICAgIHRoYXQg dGhlcmUgaXMgbm8gdXNhYmxlIGNvbm5lY3Rpb24uIEZ1cnRoZXJtb3JlLCB0dGNoaygpIHNob3Vs ZAotICAgICAgICAgIGJlIGNhbGxhYmxlIGF0IGFueSB0aW1lIHRvIHNlZSBpZiB0aGUgY29ubmVj dGlvbiBpcyBvcGVuLiBXaGVuCi0gICAgICAgICAgdGhlIGNvbm5lY3Rpb24gaXMgb3BlbiwgZXZl cnkgZWZmb3J0IG11c3QgYmUgbWFkZSB0byBlbnN1cmUgdGhhdAotICAgICAgICAgIHR0Y2hrIHJl dHVybnMgYW4gYWNjdXJhdGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd2FpdGluZyB0byBiZQotICAg ICAgICAgIHJlYWQsIHJhdGhlciB0aGFuIGp1c3QgMCAobm8gY2hhcmFjdGVycykgb3IgMSAoMSBv ciBtb3JlCi0gICAgICAgICAgY2hhcmFjdGVycyksIGFzIHdvdWxkIGJlIHRoZSBjYXNlIHdoZW4g d2UgdXNlIHNlbGVjdCgpLiBUaGlzCi0gICAgICAgICAgYXNwZWN0IG9mIHR0Y2hrJ3Mgb3BlcmF0 aW9uIGlzIGNyaXRpY2FsIHRvIHN1Y2Nlc3NmdWwgb3BlcmF0aW9uCi0gICAgICAgICAgb2Ygc2xp ZGluZyB3aW5kb3dzIGFuZCBzdHJlYW1pbmcsIGJ1dCAibm9uZGVzdHJ1Y3RpdmUgYnVmZmVyCi0g ICAgICAgICAgcGVla2luZyIgaXMgYW4gb2JzY3VyZSBvcGVyYXRpbmcgc3lzdGVtIGZlYXR1cmUs IGFuZCBzbyB3aGVuIGl0Ci0gICAgICAgICAgaXMgbm90IGF2YWlsYWJsZSwgd2UgaGF2ZSB0byBk byBpdCBvdXJzZWx2ZXMgYnkgbWFuYWdpbmcgb3VyIG93bgotICAgICAgICAgIGludGVybmFsIGJ1 ZmZlciBhdCBhIGxldmVsIGJlbG93IHR0aW5jKCksIHR0aW5sKCksIGV0YywgYXMgaW4KLSAgICAg ICAgICB0aGUgVU5JWCB2ZXJzaW9uIChub24tRklPTlJFQUQgY2FzZSkuCi0KLSAgICAgICAgICBB biBleHRlcm5hbCBnbG9iYWwgdmFyaWFibGUsIGNsc29uZGlzYywgaWYgbm9uemVybywgbWVhbnMg dGhhdAotICAgICAgICAgIGlmIGEgc2VyaWFsIGNvbm5lY3Rpb24gZHJvcHMgKGNhcnJpZXIgb24t dG8tb2ZmIHRyYW5zaXRpb24KLSAgICAgICAgICBkZXRlY3RlZCBieSB0dGNoaygpKSwgdGhlIGRl dmljZSBzaG91bGQgYmUgY2xvc2VkIGFuZCByZWxlYXNlZAotICAgICAgICAgIGF1dG9tYXRpY2Fs bHkuCi0KLSAgIGludAotICAgICAgICAgIHR0Y2xvcygpCi0gICAgICAgICAgQ2xvc2VzIHRoZSBj b21tdW5pY2F0aW9uIGRldmljZSAodHR5IG9yIG5ldHdvcmspLiBJZiB0aGVyZSB3ZXJlCi0gICAg ICAgICAgYW55IGtpbmQgb2YgZXhjbHVzaXZlIGFjY2VzcyBsb2NrcyBjb25uZWN0ZWQgd2l0aCB0 aGUgdHR5LCB0aGVzZQotICAgICAgICAgIGFyZSByZWxlYXNlZC4gSWYgdGhlIHR0eSBoYXMgYSBt b2RlbSBjb25uZWN0aW9uLCBpdCBpcyBodW5nIHVwLgotICAgICAgICAgIEZvciB0cnVlIHR0eSBk ZXZpY2VzLCB0aGUgb3JpZ2luYWwgdHR5IGRldmljZSBtb2RlcyBhcmUKLSAgICAgICAgICByZXN0 b3JlZC4gUmV0dXJuczoKLSAgICAgICAgICAgLTE6IG9uIGZhaWx1cmUuCi0gICAgICAgICAgICAw OiBvbiBzdWNjZXNzLgotCi0gICBpbnQKLSAgICAgICAgICB0dGZsdWkoKQotICAgICAgICAgIEZs dXNoIGNvbW11bmljYXRpb25zIGlucHV0IGJ1ZmZlci4gSWYgYW55IGNoYXJhY3RlcnMgaGF2ZQot ICAgICAgICAgIGFycml2ZWQgYnV0IGhhdmUgbm90IHlldCBiZWVuIHJlYWQsIGRpc2NhcmQgdGhl c2UgY2hhcmFjdGVycy4gSWYKLSAgICAgICAgICBjb21tdW5pY2F0aW9ucyBpbnB1dCBpcyBidWZm ZXJlZCBieSBLZXJtaXQgKGFuZCBpdCBzaG91bGQgYmUpLAotICAgICAgICAgIHRoaXMgZnVuY3Rp b24gZmx1c2hlcyBLZXJtaXQncyBidWZmZXIgYXMgd2VsbCBhcyB0aGUgb3BlcmF0aW5nCi0gICAg ICAgICAgc3lzdGVtJ3MgaW50ZXJuYWwgaW5wdXQgYnVmZmVyLiBSZXR1cm5zOgotICAgICAgICAg ICAtMTogb24gZmFpbHVyZS4KLSAgICAgICAgICAgIDA6IG9uIHN1Y2Nlc3MuCi0KLSAgIGludAot ICAgICAgICAgIHR0Zmx1bygpCi0gICAgICAgICAgRmx1c2ggdHR5IG91dHB1dCBidWZmZXIuIElm IGFueSBjaGFyYWN0ZXJzIGhhdmUgYmVlbiB3cml0dGVuIGJ1dAotICAgICAgICAgIG5vdCBhY3R1 YWxseSB0cmFuc21pdHRlZCAoZS5nLiBiZWNhdXNlIHRoZSBzeXN0ZW0gaGFzIGJlZW4KLSAgICAg ICAgICBmbG93LWNvbnRyb2xsZWQpLCByZW1vdmUgdGhlbSBmcm9tIHRoZSBzeXN0ZW0ncyBvdXRw dXQgYnVmZmVyLgotICAgICAgICAgIChOb3RlLCB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBhY3R1YWxs eSB1c2VkLCBidXQgaXQgaXMgcmVjb21tZW5kZWQKLSAgICAgICAgICB0aGF0IGFsbCBDLUtlcm1p dCBwcm9ncmFtbWVycyBhZGQgaXQgZm9yIGZ1dHVyZSB1c2UsIGV2ZW4gaWYgaXQKLSAgICAgICAg ICBpcyBvbmx5IGEgZHVtbXkgZnVuY3Rpb24gdGhhdCByZXR1cm5zIDAgYWx3YXlzLikKLQotICAg aW50Ci0gICAgICAgICAgdHRnbWRtKCkKLSAgICAgICAgICBMb29rcyBmb3IgdGhlIG1vZGVtIHNp Z25hbHMgQ1RTLCBEU1IsIGFuZCBDVFMsIGFuZCByZXR1cm5zIHRob3NlCi0gICAgICAgICAgdGhh dCBhcmUgb24gaW4gYXMgaXRzIHJldHVybiB2YWx1ZSwgaW4gYSBiaXQgbWFzayBhcyBkZXNjcmli ZWQKLSAgICAgICAgICBmb3IgdHR3bWRtLCBpbiB3aGljaCBhIGJpdCBpcyBvbiAoMSkgb3Igb2Zm ICgwKSBhY2NvcmRpbmcgdG8KLSAgICAgICAgICB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIHNp Z25hbCBpcyBvbiAoYXNzZXJ0ZWQpIG9yIG9mZiAobm90Ci0gICAgICAgICAgYXNzZXJ0ZWQpLiBS ZXR1cm4gdmFsdWVzOgotICAgICAgICAgICAtMzogTm90IGltcGxlbWVudGVkCi0gICAgICAgICAg IC0yOiBpZiB0aGUgbGluZSBkb2VzIG5vdCBoYXZlIG1vZGVtIGNvbnRyb2wKLSAgICAgICAgICAg LTE6IG9uIGVycm9yCi0gICAgICAgICAgPj0wOiBvbiBzdWNjZXNzLCB3aXRoIGJpdCBtYXNrIGNv bnRhaW5pbmcgdGhlIG1vZGVtIHNpZ25hbHMuCi0KLSAgIGxvbmcKLSAgICAgICAgICB0dGdzcGQo KQotICAgICAgICAgIFJldHVybnMgdGhlIGN1cnJlbnQgdHR5IHNwZWVkIGluIEJJVFMgKG5vdCBD SEFSQUNURVJTKSBwZXIKLSAgICAgICAgICBzZWNvbmQsIG9yIC0xIGlmIGl0IGlzIG5vdCBrbm93 biBvciBpZiB0aGUgdHR5IGlzIHJlYWxseSBhCi0gICAgICAgICAgbmV0d29yaywgb3IgdXBvbiBh bnkga2luZCBvZiBlcnJvci4gT24gc3VjY2VzcywgdGhlIHNwZWVkCi0gICAgICAgICAgcmV0dXJu ZWQgaXMgdGhlIGFjdHVhbCBudW1iZXIgb2YgYml0cyBwZXIgc2Vjb25kLCBsaWtlIDEyMDAsCi0g ICAgICAgICAgOTYwMCwgMTkyMDAsIGV0Yy4KLQotICAgaW50Ci0gICAgICAgICAgdHRnd3Npeigp Ci0gICAgICAgICAgR2V0IHRlcm1pbmFsIHdpbmRvdyBzaXplLiBSZXR1cm5zIC0xIG9uIGVycm9y LCAwIGlmIHRoZSB3aW5kb3cKLSAgICAgICAgICBzaXplIGNhbid0IGJlIG9idGFpbmVkLCAxIGlm IHRoZSB3aW5kb3cgc2l6ZSBoYXMgYmVlbgotICAgICAgICAgIHN1Y2Nlc3NmdWxseSBvYnRhaW5l ZC4gVXBvbiBzdWNjZXNzLCB0aGUgZXh0ZXJuYWwgZ2xvYmFsCi0gICAgICAgICAgdmFyaWFibGVz IHR0X3Jvd3MgYW5kIHR0X2NvbHMgYXJlIHNldCB0byB0aGUgbnVtYmVyIG9mIHNjcmVlbgotICAg ICAgICAgIHJvd3MgYW5kIG51bWJlciBvZiBzY3JlZW4gY29sdW1ucywgcmVzcGVjdGl2ZWx5LiBB cyB0aGlzCi0gICAgICAgICAgZnVuY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIGFsbCBjayp0 aW8uYyBtb2R1bGVzLCBjYWxscyB0byBpdAotICAgICAgICAgIG11c3QgYmUgd3JhcHBlZCBpbiAj aWZkZWYgQ0tfVFRHV1NJWi4uI2VuZGlmLiBOT1RFOiBUaGlzCi0gICAgICAgICAgZnVuY3Rpb24g bXVzdCBiZSBhdmFpbGFibGUgdG8gdXNlIHRoZSBURUxORVQgTkFXUyBmZWF0dXJlCi0gICAgICAg ICAgKE5lZ290aWF0ZSBBYm91dCBXaW5kb3cgU2l6ZSkgYXMgd2VsbCBhcyBSbG9naW4uCi0KLSAg IGludAotICAgICAgICAgIHR0aGFuZygpCi0gICAgICAgICAgSGFuZyB1cCB0aGUgY3VycmVudCB0 dHkgZGV2aWNlLiBGb3IgcmVhbCB0dHkgZGV2aWNlcywgdHVybiBvZmYKLSAgICAgICAgICBEVFIg Zm9yIGFib3V0IDEvMy0xLzIgc2Vjb25kIChvciBvdGhlciBsZW5ndGggb2YgdGltZSwgZGVwZW5k aW5nCi0gICAgICAgICAgb24gdGhlIHN5c3RlbSkuIElmIHRoZSB0dHkgaXMgcmVhbGx5IGEgbmV0 d29yayBjb25uZWN0aW9uLCBjbG9zZQotICAgICAgICAgIGl0LiBSZXR1cm5zOgotICAgICAgICAg ICAtMTogb24gZmFpbHVyZS4KLSAgICAgICAgICAgIDA6IGlmIGl0IGRvZXMgbm90IGV2ZW4gdHJ5 IHRvIGhhbmcgdXAuCi0gICAgICAgICAgICAxOiBpZiBpdCBiZWxpZXZlcyBpdCBodW5nIHVwIHN1 Y2Nlc3NmdWxseS4KLQotICAgVk9JRAotICAgICAgICAgIHR0aW1vZmYoKQotICAgICAgICAgIFR1 cm5zIG9mZiBhbGwgcGVuZGluZyB0aW1lciBpbnRlcnJ1cHRzLgotCi0gICBpbnQKLSAgICAgICAg ICB0dGluYyh0aW1vKSBpbnQgdGltbzsgKGZ1bmN0aW9uIGlzIG9sZCwgcmV0dXJuIGNvZGVzIGFy ZSBuZXcpCi0gICAgICAgICAgUmVhZHMgb25lIGNoYXJhY3RlciBmcm9tIHRoZSBjb21tdW5pY2F0 aW9uIGRldmljZS4gSWYgdGltbyBpcwotICAgICAgICAgIGdyZWF0ZXIgdGhhbiB6ZXJvLCB3YWl0 IHRoZSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcyBhbmQgdGhlbgotICAgICAgICAgIHRpbWUgb3V0 IGlmIG5vIGNoYXJhY3RlciBhcnJpdmVzLCBvdGhlcndpc2Ugd2FpdCBmb3JldmVyIGZvciBhCi0g ICAgICAgICAgY2hhcmFjdGVyLiBSZXR1cm5zOgotICAgICAgICAgICAtMzogaW50ZXJuYWwgZXJy b3IgKGUuZy4gdHR5IG1vZGVzIHNldCB3cm9uZykKLSAgICAgICAgICAgLTI6IGNvbW11bmljYXRp b25zIGRpc2Nvbm5lY3QKLSAgICAgICAgICAgLTE6IHRpbWVvdXQgb3Igb3RoZXIgZXJyb3IKLSAg ICAgICAgICA+PTA6IHRoZSBjaGFyYWN0ZXIgdGhhdCB3YXMgcmVhZC4KLSAgICAgICAgICBJdCBp cyBISUdITFkgUkVDT01NRU5ERUQgdGhhdCB0dGluYygpIGJlIGludGVybmFsbHkgYnVmZmVyZWQg c28KLSAgICAgICAgICB0aGF0IGNhbGxzIHRvIGl0IGFyZSByZWxhdGl2ZWx5IGluZXhwZW5zaXZl LiBJZiBpdCBpcyBwb3NzaWJsZQotICAgICAgICAgIHRvIHRvIGltcGxlbWVudCB0dGluYygpIGFz IGEgbWFjcm8sIGFsbCB0aGUgYmV0dGVyLCBmb3IgZXhhbXBsZQotICAgICAgICAgIHNvbWV0aGlu ZyBsaWtlOgotCi0gICNkZWZpbmUgdHRpbmModCkgKCAoLS10eGJ1Zm4gPj0gMCkgPyB0eGJ1Zlt0 dGJ1ZnArK10gOiB0eGJ1ZnIodCkgKQotCi0gICAgICAgICAgKHNlZSBkZXNjcmlwdGlvbiBvZiB0 eGJ1ZnIoKSBiZWxvdykKLQotICAgaW50Ci0gICAgICAgICAgdHRpbmwoZGVzdCxtYXgsdGltbyxl b2wsc3RhcnQsdHVybikgaW50IG1heCx0aW1vLHR1cm47IENIQVIKLSAgICAgICAgICAqZGVzdCwg ZW9sLCBzdGFydDsKLSAgICAgICAgICB0dGlubCgpIGlzIEtlcm1pdCdzIHBhY2tldCByZWFkZXIu IFJlYWRzIGEgcGFja2V0IGZyb20gdGhlCi0gICAgICAgICAgY29tbXVuaWNhdGlvbnMgZGV2aWNl LCBvciB1cCB0byBtYXggY2hhcmFjdGVycywgd2hpY2hldmVyIG9jY3VycwotICAgICAgICAgIGZp cnN0LiBBIGxpbmUgaXMgYSBzdHJpbmcgb2YgY2hhcmFjdGVycyBzdGFydGluZyB3aXRoIHRoZSBz dGFydAotICAgICAgICAgIGNoYXJhY3RlciB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBjaGFyYWN0 ZXIgZ2l2ZW4gaW4gZW9sIG9yCi0gICAgICAgICAgdW50aWwgdGhlIGxlbmd0aCBpcyBleGhhdXN0 ZWQsIG9yLCBpZiB0dXJuICE9IDAsIHVudGlsIHRoZSBsaW5lCi0gICAgICAgICAgdHVybmFyb3Vu ZCBjaGFyYWN0ZXIgKHR1cm4pIGlzIHJlYWQuIElmIHR1cm4gaXMgMCwgdHRpbmwoKQotICAgICAg ICAgICpzaG91bGQqIHVzZSB0aGUgcGFja2V0IGxlbmd0aCBmaWVsZCB0byBkZXRlY3QgdGhlIGVu ZCwgdG8gYWxsb3cKLSAgICAgICAgICBmb3IgdGhlIHBvc3NpYmlsaXR5IHRoYXQgdGhlIGVvbCBj aGFyYWN0ZXIgYXBwZWFycyB1bnByZWZpeGVkIGluCi0gICAgICAgICAgdGhlIHBhY2tldCBkYXRh LiAoVGhlIHR1cm5hcm91bmQgY2hhcmFjdGVyIGlzIGZvciBoYWxmLWR1cGxleAotICAgICAgICAg IGxpbmVtb2RlIGNvbm5lY3Rpb25zLikKLQotICAgICAgICAgIElmIHRpbW8gaXMgZ3JlYXRlciB0 aGFuIHplcm8sIHR0aW5sKCkgdGltZXMgb3V0IGlmIHRoZSBlb2wKLSAgICAgICAgICBjaGFyYWN0 ZXIgaXMgbm90IGVuY291bnRlcmVkIHdpdGhpbiB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMK LSAgICAgICAgICBhbmQgcmV0dXJucyAtMS4KLQotICAgICAgICAgIFRoZSBjaGFyYWN0ZXJzIHRo YXQgd2VyZSBpbnB1dCBhcmUgY29waWVkIGludG8gImRlc3QiIHdpdGggdGhlaXIKLSAgICAgICAg ICBwYXJpdHkgYml0cyBzdHJpcHBlZCBpZiBwYXJpdHkgaXMgbm90IG5vbmUuIFRoZSBmaXJzdCBj aGFyYWN0ZXIKLSAgICAgICAgICBjb3BpZWQgaW50byBkZXN0IHNob3VsZCBiZSB0aGUgc3RhcnQg Y2hhcmFjdGVyLCBhbmQgdGhlIGxhc3QKLSAgICAgICAgICBzaG91bGQgYmUgdGhlIGZpbmFsIGNo YXJhY3RlciBvZiB0aGUgcGFja2V0ICh0aGUgbGFzdCBibG9jawotICAgICAgICAgIGNoZWNrIGNo YXJhY3RlcikuIHR0aW5sKCkgc2hvdWxkIGFsc28gYWJzb3JiIGFuZCBkaXNjYXJkIHRoZSBlb2wK LSAgICAgICAgICBhbmQgdHVybiBjaGFyYWN0ZXJzLCBhbmQgYW55IG90aGVyIGNoYXJhY3RlcnMg dGhhdCBhcmUgd2FpdGluZwotICAgICAgICAgIHRvIGJlIHJlYWQsIHVwIHVudGlsIHRoZSBuZXh0 IHN0YXJ0IGNoYXJhY3Rlciwgc28gdGhhdAotICAgICAgICAgIHN1YnNlcXVlbnQgY2FsbHMgdG8g dHRjaGsoKSB3aWxsIG5vdCBzdWNjZWVkIHNpbXBseSBiZWNhdXNlCi0gICAgICAgICAgdGhlcmUg YXJlIHNvbWUgdGVybWluYXRvcnMgc3RpbGwgc2l0dGluZyBpbiB0aGUgYnVmZmVyIHRoYXQKLSAg ICAgICAgICB0dGlubCgpIGRpZG4ndCByZWFkLiBUaGlzIG9wZXJhdGlvbiwgaWYgcGVyZm9ybWVk LCBNVVNUIE5PVAotICAgICAgICAgIEJMT0NLIChzbyBpZiBpdCBjYW4ndCBiZSBwZXJmb3JtZWQg aW4gYSBndWFyYW50ZWVkIG5vbmJsb2NraW5nCi0gICAgICAgICAgd2F5LCBkb24ndCBkbyBpdCku Ci0KLSAgICAgICAgICBPbiBzdWNjZXNzLCB0dGlubCgpIHJldHVybnMgdGhlIG51bWJlciBvZiBj aGFyYWN0ZXJzIHJlYWQuCi0gICAgICAgICAgT3B0aW9uYWxseSwgdHRpbmwoKSBjYW4gc2Vuc2Ug dGhlIHBhcml0eSBvZiBpbmNvbWluZyBwYWNrZXRzLiBJZgotICAgICAgICAgIGl0IGRvZXMgdGhp cywgdGhlbiBpdCBzaG91bGQgc2V0IHRoZSBnbG9iYWwgdmFyaWFibGUgdHRwcnR5Ci0gICAgICAg ICAgYWNjb3JkaW5nbHkuIHR0aW5sKCkgc2hvdWxkIGJlIGNvZGVkIHRvIGJlIGFzIGVmZmljaWVu dCBhcwotICAgICAgICAgIHBvc3NpYmxlLCBzaW5jZSBpdCBpcyBhdCB0aGUgImlubmVyIGxvb3Ai IG9mIHBhY2tldCByZWNlcHRpb24uCi0gICAgICAgICAgdHRpbmwoKSByZXR1cm5zOgotICAgICAg ICAgICAtMTogVGltZW91dCBvciBvdGhlciBwb3NzaWJseSBjb3JyZWN0YWJsZSBlcnJvci4KLSAg ICAgICAgICAgLTI6IEludGVycnVwdGVkIGZyb20ga2V5Ym9hcmQuCi0gICAgICAgICAgIC0zOiBV bmNvcnJlY3RhYmxlIGkvbyBlcnJvciAtLSBjb25uZWN0aW9uIGxvc3QsIGNvbmZpZ3VyYXRpb24K LSAgICAgICAgICBwcm9ibGVtLCBldGMuCi0gICAgICAgICAgPj0wOiBvbiBzdWNjZXNzLCB0aGUg bnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCB3ZXJlIGFjdHVhbGx5Ci0gICAgICAgICAgcmVhZCBh bmQgcGxhY2VkIGluIHRoZSBkZXN0IGJ1ZmZlciwgbm90IGNvdW50aW5nIHRoZSB0cmFpbGluZwot ICAgICAgICAgIG51bGwuCi0KLSAgIGludAotICAgICAgICAgIHR0b2MoYykgY2hhciBjOwotICAg ICAgICAgIE91dHB1dHMgdGhlIGNoYXJhY3RlciBjIHRvIHRoZSBjb21tdW5pY2F0aW9uIGxpbmUu IElmIHRoZQotICAgICAgICAgIG9wZXJhdGlvbiBmYWlscyB0byBjb21wbGV0ZSB3aXRoaW4gdHdv IHNlY29uZHMsIHRoaXMgZnVuY3Rpb24KLSAgICAgICAgICByZXR1cm5zIC0xLiBPdGhlcndpc2Ug aXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMKLSAgICAgICAgICBhY3R1YWxseSB3 cml0dGVuIHRvIHRoZSB0dHkgKDAgb3IgMSkuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkKLSAg ICAgICAgICBiZSB1c2VkIGZvciBpbnRlcmFjdGl2ZSwgY2hhcmFjdGVyLW1vZGUgb3BlcmF0aW9u cywgbGlrZQotICAgICAgICAgIHRlcm1pbmFsIGNvbm5lY3Rpb24sIHNjcmlwdCBleGVjdXRpb24s IGRpYWxlciBpL28sIHdoZXJlIHRoZQotICAgICAgICAgIG92ZXJoZWFkIG9mIHRoZSBzaWduYWxz IGFuZCBhbGFybXMgZG9lcyBub3QgY3JlYXRlIGEgYm90dGxlbmVjay4KLSAgICAgICAgICAoVEhJ UyBERVNDUklQVElPTiBORUVEUyBJTVBST1ZFTUVOVCAtLSBJZiB0aGUgb3BlcmF0aW9uIGZhaWxz Ci0gICAgICAgICAgd2l0aGluIGEgImNlcnRhaW4gYW1vdW50IG9mIHRpbWUiLi4uIHdoaWNoIG1p Z2h0IGJlIGRlcGVuZGVudCBvbgotICAgICAgICAgIHRoZSBjb21tdW5pY2F0aW9uIG1ldGhvZCwg c3BlZWQsIGV0Yy4gSW4gcGFydGljdWxhciwKLSAgICAgICAgICBmbG93LWNvbnRyb2wgZGVhZGxv Y2tzIG11c3QgYmUgYWNjb3VudGVkIGZvciBhbmQgYnJva2VuIG91dCBvZgotICAgICAgICAgIHRv IHByZXZlbnQgdGhlIHByb2dyYW0gZnJvbSBoYW5naW5nIGluZGVmaW5pdGVseSwgZXRjLikKLQot ICAgaW50Ci0gICAgICAgICAgdHRvbChzLG4pIGludCBuOyBjaGFyICpzOwotICAgICAgICAgIEtl cm1pdCdzIHBhY2tldCB3cml0ZXIuIFdyaXRlcyB0aGUgbiBjaGFyYWN0ZXJzIG9mIHRoZSBzdHJp bmcKLSAgICAgICAgICBwb2ludGVkIHRvIHRvIGJ5IHMuIE5PVEU6IEl0IGlzIHR0b2wncyByZXNw b25zaWJpbGl0eSB0byB3cml0ZQotICAgICAgICAgIEFMTCBvZiB0aGUgY2hhcmFjdGVycywgbm90 IGp1c3Qgc29tZSBvZiB0aGVtLiBSZXR1cm5zOgotICAgICAgICAgICAtMTogb24gYSBwb3NzaWJs eSBjb3JyZWN0YWJsZSBlcnJvciAoc28gaXQgY2FuIGJlIHJldHJpZWQpLgotICAgICAgICAgICAt Mzogb24gYSBmYXRhbCBlcnJvciwgZS5nLiBjb25uZWN0aW9uIGxvc3QuCi0gICAgICAgICAgPj0w OiBvbiBzdWNjZXNzLCB0aGUgYWN0dWFsIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4gKHRo ZQotICAgICAgICAgIHNwZWNpZmljIG51bWJlciBpcyBub3QgYWN0dWFsbHkgdXNlZCBmb3IgYW55 dGhpbmcpLgotCi0gICBpbnQKLSAgICAgICAgICB0dG9wZW4odHRuYW1lLGxjbCxtb2RlbSx0aW1v KSBjaGFyICp0dG5hbWU7IGludCAqbGNsLCBtb2RlbSwKLSAgICAgICAgICB0aW1vOwotICAgICAg ICAgIE9wZW5zIGEgdHR5IGRldmljZSwgaWYgaXQgaXMgbm90IGFscmVhZHkgb3Blbi4gdHRvcGVu IG11c3QgY2hlY2sKLSAgICAgICAgICB0byBtYWtlIHN1cmUgdGhlIFNBTUUgZGV2aWNlIGlzIG5v dCBhbHJlYWR5IG9wZW47IGlmIGl0IGlzLAotICAgICAgICAgIHR0b3BlbiByZXR1cm5zIHN1Y2Nl c3NmdWxseSB3aXRob3V0IGRvaW5nIGFueXRoaW5nLiBJZiBhCi0gICAgICAgICAgRElGRkVSRU5U IGRldmljZSBpcyBjdXJyZW50bHkgb3BlbiwgdHRvcGVuKCkgbXVzdCBjYWxsIHR0Y2xvcygpCi0g ICAgICAgICAgdG8gY2xvc2UgaXQgYmVmb3JlIG9wZW5pbmcgdGhlIG5ldyBvbmUuCi0KLSAgICAg ICAgUGFyYW1ldGVyczoKLQotICAgICAgICAgICAgICB0dG5hbWU6Ci0gICAgICAgICAgICAgICAg ICAgICAgY2hhcmFjdGVyIHN0cmluZyAtIGRldmljZSBuYW1lIG9yIG5ldHdvcmsgaG9zdCBuYW1l LgotCi0gICAgICAgICAgICAgIGxjbDoKLSAgICAgICAgICAgICAgICAgICAgICBJZiBjYWxsZWQg d2l0aCBsY2wgPCAwLCBzZXRzIHZhbHVlIG9mIGxjbCBhcwotICAgICAgICAgICAgICAgICAgICAg IGZvbGxvd3M6Ci0gICAgICAgICAgICAgICAgICAgICAgMDogdGhlIHRlcm1pbmFsIG5hbWVkIGJ5 IHR0bmFtZSBpcyB0aGUgam9iJ3MKLSAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGluZyB0 ZXJtaW5hbC4KLSAgICAgICAgICAgICAgICAgICAgICAxOiB0aGUgdGVybWluYWwgbmFtZWQgYnkg dHRuYW1lIGlzIG5vdCB0aGUgam9iJ3MKLSAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGlu ZyB0ZXJtaW5hbC4KLSAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgZGV2aWNlIGlzIGFscmVh ZHkgb3Blbiwgb3IgaWYgdGhlIHJlcXVlc3RlZAotICAgICAgICAgICAgICAgICAgICAgIGRldmlj ZSBjYW4ndCBiZSBvcGVuZWQsIHRoZW4gbGNsIHJlbWFpbnMgKGFuZCBpcwotICAgICAgICAgICAg ICAgICAgICAgIHJldHVybmVkIGFzKSAtMS4KLQotICAgICAgICAgICAgICBtb2RlbToKLSAgICAg ICAgICAgICAgICAgICAgICBMZXNzIHRoYW4gemVybzogdGhpcyBpcyB0aGUgbmVnYXRpdmUgb2Yg dGhlIG5ldHdvcmsKLSAgICAgICAgICAgICAgICAgICAgICB0eXBlLCBhbmQgdHRuYW1lIGlzIGEg bmV0d29yayBob3N0IG5hbWUuIE5ldHdvcmsKLSAgICAgICAgICAgICAgICAgICAgICB0eXBlcyAo ZnJvbSBbMTM0XWNrY25ldC5oOgotCi0gIE5FVF9UQ1BCIDEgICBUQ1AvSVAgQmVya2VsZXkgKHNv Y2tldCkgIChpbXBsZW1lbnRlZCBpbiBbMTM1XWNrdXRpby5jKQotICBORVRfVENQQSAyICAgVENQ L0lQIEFUJlQgKHN0cmVhbXMpICAgICAobm90IHlldCBpbXBsZW1lbnRlZCkKLSAgTkVUX0RFQyAg MyAgIERFQ25ldCAgICAgICAgICAgICAgICAgICAgKG5vdCB5ZXQgaW1wbGVtZW50ZWQpCi0KLSAg ICAgICAgICAgICAgICAgICAgICBaZXJvIG9yIGdyZWF0ZXI6IHR0bmFtZSBpcyBhIHRlcm1pbmFs IGRldmljZSBuYW1lLgotICAgICAgICAgICAgICAgICAgICAgIFplcm8gbWVhbnMgYSBkaXJlY3Qg Y29ubmVjdGlvbiAoZG9uJ3QgdXNlIG1vZGVtCi0gICAgICAgICAgICAgICAgICAgICAgc2lnbmFs cykuIFBvc2l0aXZlIG1lYW5zIHVzZSBtb2RlbSBzaWduYWxzIGRlcGVuZGluZwotICAgICAgICAg ICAgICAgICAgICAgIG9uIHRoZSBjdXJyZW50IHNldHRpbmcgb2YgdHRjYXJyIChzZWUgdHRzY2Fy cigpKS4KLQotICAgICAgICAgICAgICB0aW1vOgotICAgICAgICAgICAgICAgICAgICAgID4gMDog bnVtYmVyIG9mIHNlY29uZHMgdG8gd2FpdCBmb3Igb3BlbigpIHRvIHJldHVybgotICAgICAgICAg ICAgICAgICAgICAgIGJlZm9yZSB0aW1pbmcgb3V0LgotICAgICAgICAgICAgICAgICAgICAgIDw9 MDogbm8gdGltZXIsIHdhaXQgZm9yZXZlciAoZS5nLiBmb3IgaW5jb21pbmcKLSAgICAgICAgICAg ICAgICAgICAgICBjYWxsKS4KLSAgICAgICAgICAgICAgICAgICAgICBGb3IgcmVhbCB0dHkgZGV2 aWNlcywgdHRvcGVuKCkgYXR0ZW1wdHMgdG8gZ2FpbgotICAgICAgICAgICAgICAgICAgICAgIGV4 Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIHR0eSBkZXZpY2UsIGZvciBleGFtcGxlIGluCi0gICAgICAg ICAgICAgICAgICAgICAgVU5JWCBieSBjcmVhdGluZyBhICJsb2NrZmlsZSIgKGluIG90aGVyIG9w ZXJhdGluZwotICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbXMsIGxpa2UgVk1TLCBleGNsdXNp dmUgYWNjZXNzIHByb2JhYmx5Ci0gICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZXMgbm8gc3Bl Y2lhbCBhY3Rpb24pLgotCi0gICAgICAgIFNpZGUgZWZmZWN0czoKLSAgICAgICAgICAgICAgICBD b3BpZXMgaXRzIGFyZ3VtZW50cyBhbmQgdGhlIHR0eSBmaWxlIGRlc2NyaXB0b3IgdG8gZ2xvYmFs Ci0gICAgICAgICAgICAgICAgdmFyaWFibGVzIHRoYXQgYXJlIGF2YWlsYWJsZSB0byB0aGUgb3Ro ZXIgdHR5LXJlbGF0ZWQKLSAgICAgICAgICAgICAgICBmdW5jdGlvbnMsIHdpdGggdGhlIGxjbCB2 YWx1ZSBhbHRlcmVkIGFzIGRlc2NyaWJlZCBhYm92ZS4KLSAgICAgICAgICAgICAgICBHZXRzIGFs bCBwYXJhbWV0ZXJzIGFuZCBzZXR0aW5ncyBhc3NvY2lhdGVkIHdpdGggdGhlIGxpbmUKLSAgICAg ICAgICAgICAgICBhbmQgcHV0cyB0aGVtIGluIGEgZ2xvYmFsIGFyZWEsIHNvIHRoYXQgdGhleSBj YW4gYmUKLSAgICAgICAgICAgICAgICByZXN0b3JlZCBieSB0dHJlcygpLCBlLmcuIHdoZW4gdGhl IGRldmljZSBpcyBjbG9zZWQuCi0KLSAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICAgICAgICAg IDA6IG9uIHN1Y2Nlc3MKLSAgICAgICAgICAgICAgICAgLTU6IGlmIGRldmljZSBpcyBpbiB1c2UK LSAgICAgICAgICAgICAgICAgLTQ6IGlmIGFjY2VzcyB0byBkZXZpY2UgaXMgZGVuaWVkCi0gICAg ICAgICAgICAgICAgIC0zOiBpZiBhY2Nlc3MgdG8gbG9jayBtZWNoYW5pc20gZGVuaWVkCi0gICAg ICAgICAgICAgICAgIC0yOiB1cG9uIHRpbWVvdXQgd2FpdGluZyBmb3IgZGV2aWNlIHRvIG9wZW4K LSAgICAgICAgICAgICAgICAgLTE6IG9uIG90aGVyIGVycm9yCi0KLSAgIGludAotICAgICAgICAg IHR0cGt0KHNwZWVkLGZsb3cscGFyaXR5KSBsb25nIHNwZWVkOyBpbnQgZmxvdywgcGFyaXR5Owot ICAgICAgICAgIFB1dHMgdGhlIGN1cnJlbnRseSBvcGVuIHR0eSBkZXZpY2UgaW50byB0aGUgYXBw cm9wcmlhdGUgbW9kZXMKLSAgICAgICAgICBmb3IgdHJhbnNtaXR0aW5nIGFuZCByZWNlaXZpbmcg S2VybWl0IHBhY2tldHMuCi0KLSAgICAgICAgQXJndW1lbnRzOgotCi0gICAgICAgICAgICAgIHNw ZWVkOgotICAgICAgICAgICAgICAgICAgICAgIGlmIHNwZWVkID4gLTEsIGFuZCB0aGUgZGV2aWNl IGlzIGEgdHJ1ZSB0dHkgZGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAgIGFuZCBLZXJtaXQg aXMgaW4gbG9jYWwgbW9kZSwgdHRwa3QgYWxzbyBzZXRzIHRoZQotICAgICAgICAgICAgICAgICAg ICAgIHNwZWVkLgotCi0gICAgICAgICAgICAgIGZsb3c6Ci0gICAgICAgICAgICAgICAgICAgICAg aWYgaW4gdGhlIHJhbmdlIDAtMywgdHRwa3Qgc2VsZWN0cyB0aGUgY29ycmVzcG9uZGluZwotICAg ICAgICAgICAgICAgICAgICAgIHR5cGUgb2YgZmxvdyBjb250cm9sLiBDdXJyZW50bHkgMCBpcyBk ZWZpbmVkIGFzIG5vCi0gICAgICAgICAgICAgICAgICAgICAgZmxvdyBjb250cm9sLCAxIGlzIFhv bi9Yb2ZmLCBhbmQgbm8gb3RoZXIgdHlwZXMgYXJlCi0gICAgICAgICAgICAgICAgICAgICAgZGVm aW5lZC4gSWYgKGFuZCB0aGlzIGlzIGEgaG9ycmlibGUgaGFjaywgYnV0IGl0Ci0gICAgICAgICAg ICAgICAgICAgICAgZ29lcyBiYWNrIG1hbnkgeWVhcnMgYW5kIHdpbGwgYmUgaGFyZCB0byBlcmFk aWNhdGUpCi0gICAgICAgICAgICAgICAgICAgICAgZmxvdyBpcyA0LCB0aGVuIHRoZSBhcHByb3By aWF0ZSB0dHkgbW9kZXMgYXJlIHNldAotICAgICAgICAgICAgICAgICAgICAgIGZvciBtb2RlbSBk aWFsaW5nLCBhIHNwZWNpYWwgY2FzZSBpbiB3aGljaCB3ZSB0YWxrCi0gICAgICAgICAgICAgICAg ICAgICAgdG8gYSBtb2RlbS1jb250cm9sbGVkIGxpbmUgd2l0aG91dCByZXF1aXJpbmcKLSAgICAg ICAgICAgICAgICAgICAgICBjYXJyaWVyLiBJZiBmbG93IGlzIDUsIHRoZW4gd2UgcmVxdWlyZSBj YXJyaWVyLgotCi0gICAgICAgICAgICAgIHBhcml0eToKLSAgICAgICAgICAgICAgICAgICAgICBU aGlzIGlzIHNpbXBseSBjb3BpZWQgaW50byBhIGdsb2JhbCB2YXJpYWJsZSBzbyB0aGF0Ci0gICAg ICAgICAgICAgICAgICAgICAgb3RoZXIgZnVuY3Rpb25zIChsaWtlIHR0aW5sLCB0dGluYywgZXRj KSBjYW4gdXNlIGl0LgotCi0gICAgICAgIFNpZGUgZWZmZWN0czoKLSAgICAgICAgICAgICAgICBD b3BpZXMgaXRzIGFyZ3VtZW50cyB0byBnbG9iYWwgdmFyaWFibGVzLCBmbHVzaGVzIHRoZQotICAg ICAgICAgICAgICAgIHRlcm1pbmFsIGRldmljZSBpbnB1dCBidWZmZXIuCi0KLSAgICAgICAgUmV0 dXJuczoKLSAgICAgICAgICAgICAgICAgLTE6IG9uIGVycm9yLgotICAgICAgICAgICAgICAgICAg MDogb24gc3VjY2Vzcy4KLQotICAgaW50Ci0gICAgICAgICAgdHRzZXRmbG93KGludCkKLSAgICAg ICAgICBFbmFibGVzIHRoZSBnaXZlbiB0eXBlIG9mIGZsb3cgY29udHJvbCBvbiB0aGUgb3BlbiBz ZXJpYWwKLSAgICAgICAgICBjb21tdW5pY2F0aW9ucyBkZXZpY2UgaW1tZWRpYXRlbHkuIEFyZ3Vt ZW50cyBhcmUgdGhlIEZMT194eHgKLSAgICAgICAgICB2YWx1ZXMgZnJvbSBja2NkZWIuaCwgZXhj ZXB0IEZMT19ESUFMLCBGTE9fRElBWCwgb3IgRkxPX0FVVE8sCi0gICAgICAgICAgd2hpY2ggYXJl IG5vdCBhY3R1YWwgZmxvdy1jb250cm9sIHR5cGVzLiBSZXR1cm5zIDAgb24gc3VjY2VzcywKLSAg ICAgICAgICAtMSBvbiBmYWlsdXJlLgotCi0gICAjaWZkZWYgVFRTUERMSVNUCi0gICBsb25nICoK LSAgICAgICAgICB0dHNwZGxpc3QoKQotICAgICAgICAgIFJldHVybnMgYSBwb2ludGVyIHRvIGFu IGFycmF5IG9mIGxvbmdzLCBvciBOVUxMIG9uIGZhaWx1cmUuIE9uCi0gICAgICAgICAgc3VjY2Vz cywgZWxlbWVudCAwIG9mIHRoZSBhcnJheSBjb250YWlucyBudW1iZXIsIG4sIGluZGljYXRpbmcK LSAgICAgICAgICBob3cgbWFueSBmb2xsb3cuIEVsZW1lbnRzIDEtbiBhcmUgc2VyaWFsIHNwZWVk cywgZXhwcmVzc2VkIGluCi0gICAgICAgICAgYml0cyBwZXIgc2Vjb25kLCB0aGF0IGFyZSBsZWdh bCBvbiB0aGlzIHBsYXRmb3JtLiBUaGUgdXNlcgotICAgICAgICAgIGludGVyZmFjZSBtYXkgdXNl IHRoaXMgbGlzdCB0byBjb25zdHJ1Y3QgYSBtZW51LCBrZXl3b3JkIHRhYmxlLAotICAgICAgICAg IGV0Yy4KLQotICAgI2VuZGlmIC8qIFRUU1BETElTVCAqLwotCi0gICBpbnQKLSAgICAgICAgICB0 dHJlcygpCi0gICAgICAgICAgUmVzdG9yZXMgdGhlIHR0eSBkZXZpY2UgdG8gdGhlIG1vZGVzIGFu ZCBzZXR0aW5ncyB0aGF0IHdlcmUgaW4KLSAgICAgICAgICBlZmZlY3QgYXQgdGhlIHRpbWUgaXQg d2FzIG9wZW5lZCAoc2VlIHR0b3BlbikuIFJldHVybnM6Ci0gICAgICAgICAgIC0xOiBvbiBlcnJv ci4KLSAgICAgICAgICAgIDA6IG9uIHN1Y2Nlc3MuCi0KLSAgIGludAotICAgICAgICAgIHR0cnVu Y21kKHN0cmluZykgY2hhciAqIHN0cmluZzsKLSAgICAgICAgICBSdW5zIHRoZSBnaXZlbiBjb21t YW5kIG9uIHRoZSBsb2NhbCBzeXN0ZW0sIGJ1dCByZWRpcmVjdHMgaXRzCi0gICAgICAgICAgaW5w dXQgYW5kIG91dHB1dCB0byB0aGUgY29tbXVuaWNhdGlvbiAoU0VUIExJTkUsIFNFVCBQT1JULCBv cgotICAgICAgICAgIFNFVCBIT1NUKSBkZXZpY2UuIFJldHVybnM6Ci0gICAgICAgICAgICAwOiBv biBmYWlsdXJlLgotICAgICAgICAgICAgMTogb24gc3VjY2Vzcy4KLQotICAgaW50Ci0gICAgICAg ICAgdHRzY2FycihjYXJyaWVyKSBpbnQgY2FycmllcjsKLSAgICAgICAgICBDb3BpZXMgaXRzIGFy Z3VtZW50IHRvIGEgdmFyaWFibGUgdGhhdCBpcyBnbG9iYWwgdG8gdGhlIG90aGVyCi0gICAgICAg ICAgdHR5LXJlbGF0ZWQgZnVuY3Rpb25zLCBhbmQgdGhlbiByZXR1cm5zIGl0LiBUaGUgdmFsdWVz IGZvcgotICAgICAgICAgIGNhcnJpZXIgYXJlIGRlZmluZWQgaW4gY2tjZGViLmg6IENBUl9PTiwg Q0FSX09GRiwgQ0FSX0FVVE8uCi0gICAgICAgICAgdHRvcGVuKCksIHR0cGt0KCksIGFuZCB0dHZ0 KCkgdXNlIHRoaXMgdmFyaWFibGUgd2hlbiBkZWNpZGluZwotICAgICAgICAgIGhvdyB0byBvcGVu IHRoZSB0dHkgZGV2aWNlIGFuZCB3aGF0IG1vZGVzIHRvIHNlbGVjdC4gVGhlCi0gICAgICAgICAg bWVhbmluZ3MgYXJlIHRoZXNlOgotCi0gICBDQVJfT0ZGOiBJZ25vcmUgY2FycmllciBhdCBhbGwg dGltZXMuCi0gICBDQVJfT046IFJlcXVpcmUgY2FycmllciBhdCBhbGwgdGltZXMsIGV4Y2VwdCB3 aGVuIGRpYWxpbmcuIFRoaXMgbWVhbnMsCi0gICBmb3IgZXhhbXBsZSwgdGhhdCB0dG9wZW4oKSBj b3VsZCBoYW5nIGZvcmV2ZXIgd2FpdGluZyBmb3IgY2FycmllciBpZiBpdAotICAgaXMgbm90IHBy ZXNlbnQuCi0gICBDQVJfQVVUTzogSWYgdGhlIG1vZGVtIHR5cGUgaXMgemVybyAoaS5lLiB0aGUg Y29ubmVjdGlvbiBpcyBkaXJlY3QpLAotICAgdGhpcyBpcyB0aGUgc2FtZSBhcyBDQVJfT0ZGLiBJ ZiB0aGUgbW9kZW0gdHlwZSBpcyBwb3NpdGl2ZSwgdGhlbiBoZWVkCi0gICBjYXJyaWVyIGR1cmlu ZyBDT05ORUNUICh0dHZ0IG1vZGUpLCBidXQgaWdub3JlIGl0IGF0IG90aGVyIHRpbWVzCi0gICAo cGFja2V0IG1vZGUsIGR1cmluZyBTRVQgTElORSwgZXRjKS4gQ29tcGF0aWJsZSB3aXRoIHByZS01 QSB2ZXJzaW9ucyBvZgotICAgQy1LZXJtaXQuIFRoaXMgc2hvdWxkIGJlIHRoZSBkZWZhdWx0IGNh cnJpZXIgbW9kZS4KLQotICAgICAgICAgIEtlcm1pdCdzIERJQUwgY29tbWFuZCBpZ25vcmVzIHRo ZSBjYXJyaWVyIHNldHRpbmcsIGJ1dCB0dG9wZW4oKSwKLSAgICAgICAgICB0dHZ0KCksIGFuZCB0 dHBrdCgpIGFsbCBob25vciB0aGUgY2FycmllciBvcHRpb24gaW4gZWZmZWN0IGF0Ci0gICAgICAg ICAgdGhlIHRpbWUgdGhleSBhcmUgY2FsbGVkLiBOb25lIG9mIHRoaXMgYXBwbGllcyB0byByZW1v dGUgbW9kZQotICAgICAgICAgICh0aGUgdHR5IGRldmljZSBpcyB0aGUgam9iJ3MgY29udHJvbGxp bmcgdGVybWluYWwpIG9yIHRvIG5ldHdvcmsKLSAgICAgICAgICBob3N0IGNvbm5lY3Rpb25zICht b2RlbSB0eXBlIGlzIG5lZ2F0aXZlKS4KLQotICAgaW50Ci0gICAgICAgICAgdHRzbmRiKCkKLSAg ICAgICAgICBTZW5kcyBhIEJSRUFLIHNpZ25hbCBvbiB0aGUgdHR5IGRldmljZS4gT24gYSByZWFs IHR0eSBkZXZpY2UsCi0gICAgICAgICAgc2VuZCBhIHJlYWwgQlJFQUsgbGFzdGluZyBhcHByb3hp bWF0ZWx5IDI3NSBtaWxsaXNlY29uZHMuIElmCi0gICAgICAgICAgdGhpcyBpcyBub3QgcG9zc2li bGUsIHNpbXVsYXRlIGEgQlJFQUsgYnkgKGZvciBleGFtcGxlKSBkcm9wcGluZwotICAgICAgICAg IGRvd24gc29tZSB2ZXJ5IGxvdyBiYXVkIHJhdGUsIGxpa2UgNTAsIGFuZCBzZW5kaW5nIGEgYnVu Y2ggb2YKLSAgICAgICAgICBudWxsIGNoYXJhY3RlcnMuIE9uIGEgbmV0d29yayBjb25uZWN0aW9u LCBkbyB0aGUgYXBwcm9wcmlhdGUKLSAgICAgICAgICBuZXR3b3JrIHByb3RvY29sIGZvciBCUkVB Sy4gUmV0dXJuczoKLSAgICAgICAgICAgLTE6IG9uIGVycm9yLgotICAgICAgICAgICAgMDogb24g c3VjY2Vzcy4KLQotICAgaW50Ci0gICAgICAgICAgdHRzbmRsYigpCi0gICAgICAgICAgTGlrZSB0 dHNuZGIoKSwgYnV0IHNlbmRzIGEgIkxvbmcgQlJFQUsiIChhcHByb3ggMS41IHNlY29uZHMpLgot ICAgICAgICAgIEZvciBuZXR3b3JrIGNvbm5lY3Rpb25zLCBpdCBpcyBpZGVudGljYWwgdG8gdHRz bmRiKCkuIEN1cnJlbnRseSwKLSAgICAgICAgICB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgb25seSBp ZiBDS19MQlJLIGlzIGRlZmluZWQgKGFzIGl0IGlzIGZvcgotICAgICAgICAgIFVOSVggYW5kIFZN UykuCi0KLSAgIGludAotICAgICAgICAgIHR0c3NwZChjcHMpIGludCBjcHM7Ci0gICAgICAgICAg Rm9yIHNlcmlhbCBkZXZpY2VzIG9ubHksIHNldCB0aGUgZGV2aWNlIHRyYW5zbWlzc2lvbiBzcGVl ZCB0bwotICAgICAgICAgIChub3RlIGNhcmVmdWxseSkgVEVOIFRJTUVTIHRoZSBhcmd1bWVudC4g VGhlIGFyZ3VtZW50IGlzIGluCi0gICAgICAgICAgY2hhcmFjdGVycyBwZXIgc2Vjb25kLCBidXQg dHJhbnNtaXNzaW9uIHNwZWVkcyBhcmUgaW4gYml0cyBwZXIKLSAgICAgICAgICBzZWNvbmQuIGNw cyBhcmUgdXNlZCByYXRoZXIgdGhhbiBicHMgYmVjYXVzZSBoaWdoIHNwZWVkcyBsaWtlCi0gICAg ICAgICAgMzg0MDAgYXJlIG5vdCBleHByZXNzaWJsZSBpbiBhIDE2LWJpdCBpbnQgYnV0IGxvbmdz IGNhbm5vdCBiZQotICAgICAgICAgIHVzZWQgYmVjYXVzZSBrZXl3b3JkLXRhYmxlIHZhbHVlcyBh cmUgaW50cyBhbmQgbm90IGxvbmdzLiBJZiB0aGUKLSAgICAgICAgICBhcmd1bWVudCBpcyA3LCB0 aGVuIHRoZSBicHMgaXMgNzUsIG5vdCA3MC4gSWYgdGhlIGFyZ3VtZW50IGlzCi0gICAgICAgICAg ODg4LCB0aGlzIGlzIGEgc3BlY2lhbCBjb2RlIGZvciA3NS8xMjAwIHNwbGl0LXNwZWVkIG9wZXJh dGlvbgotICAgICAgICAgICg3NSBicHMgb3V0LCAxMjAwIGJwcyBpbikuIFJldHVybnM6Ci0gICAg ICAgICAgIC0xOiBvbiBlcnJvciwgbWVhbmluZyB0aGUgcmVxdWVzdGVkIHNwZWVkIGlzIG5vdCB2 YWxpZCBvcgotICAgICAgICAgIGF2YWlsYWJsZS4KLSAgICAgICAgICA+PTA6IG9uIHN1Y2Nlc3Mg KGRvbid0IHRyeSB0byB1c2UgdGhpcyB2YWx1ZSBmb3IgYW55dGhpbmcpLgotCi0gICBpbnQKLSAg ICAgICAgICB0dHZ0KHNwZWVkLGZsb3cpIGxvbmcgc3BlZWQ7IGludCBmbG93OwotICAgICAgICAg IFB1dHMgdGhlIGN1cnJlbnRseSBvcGVuIHR0eSBkZXZpY2UgaW50byB0aGUgYXBwcm9wcmlhdGUg bW9kZXMKLSAgICAgICAgICBmb3IgdGVybWluYWwgZW11bGF0aW9uLiBUaGUgYXJndW1lbnRzIGFy ZSBpbnRlcnByZXRlZCBhcyBpbgotICAgICAgICAgIHR0cGt0KCkuIFNpZGUgZWZmZWN0czogdHR2 dCgpIHN0b3JlcyBpdHMgYXJndW1lbnRzIGluIGdsb2JhbAotICAgICAgICAgIHZhcmlhYmxlcywg YW5kIHNldHMgYSBmbGFnIHRoYXQgaXQgaGFzIGJlZW4gY2FsbGVkIHNvIHRoYXQKLSAgICAgICAg ICBzdWJzZXF1ZW50IGNhbGxzIGNhbiBiZSBpZ25vcmVkIHNvIGxvbmcgYXMgdGhlIGFyZ3VtZW50 cyBhcmUgdGhlCi0gICAgICAgICAgc2FtZSBhcyBpbiB0aGUgbGFzdCBlZmZlY3RpdmUgY2FsbC4g T3RoZXIgZnVuY3Rpb25zLCBzdWNoIGFzCi0gICAgICAgICAgdHRvcGVuKCksIHR0Y2xvc2UoKSwg dHRyZXMoKSwgdHR2dCgpLCBldGMsIHRoYXQgY2hhbmdlIHRoZSB0dHkKLSAgICAgICAgICBkZXZp Y2UgaW4gYW55IHdheSBtdXN0IHVuc2V0IHRoaXMgZmxhZy4gSW4gVU5JWCBLZXJtaXQsIHRoaXMK LSAgICAgICAgICBmbGFnIGlzIGNhbGxlZCB0dnRmbGcuCi0KLSAgIGludAotICAgICAgICAgIHR0 d21kbShtZG1zaWcsdGltbykgaW50IG1kbXNpZywgdGltbzsKLSAgICAgICAgICBXYWl0cyB1cCB0 byB0aW1vIHNlY29uZHMgZm9yIGFsbCBvZiB0aGUgZ2l2ZW4gbW9kZW0gc2lnbmFscyB0bwotICAg ICAgICAgIGFwcGVhci4gbWRtc2lnIGlzIGEgYml0IG1hc2ssIGluIHdoaWNoIGEgYml0IGlzIG9u ICgxKSBvciBvZmYKLSAgICAgICAgICAoMCkgYWNjb3JkaW5nIHRvIHdoZXRoZXIgdGhlIGNvcnJl c3BvbmRpbmcgc2lnbmFsIGlzIHRvIGJlCi0gICAgICAgICAgd2FpdGVkIGZvci4gVGhlc2Ugc3lt Ym9scyBhcmUgZGVmaW5lZCBpbiBja2NkZWIuaDoKLSAgICAgICAgICAgIEJNX0NUUyAoYml0IDAp IG1lYW5zIHdhaXQgZm9yIENsZWFyIFRvIFNlbmQKLSAgICAgICAgICAgIEJNX0RTUiAoYml0IDEp IG1lYW5zIHdhaXQgZm9yIERhdGEgU2V0IFJlYWR5Ci0gICAgICAgICAgICBCTV9EQ0QgKGJpdCAy KSBtZWFucyB3YWl0IGZvciBDYXJyaWVyIERldGVjdAotICAgICAgICAgIFJldHVybnM6Ci0gICAg ICAgICAgIC0zOiBOb3QgaW1wbGVtZW50ZWQuCi0gICAgICAgICAgIC0yOiBUaGlzIGxpbmUgZG9l cyBub3QgaGF2ZSBtb2RlbSBjb250cm9sLgotICAgICAgICAgICAtMTogVGltZW91dDogdGltZSBs aW1pdCBleGNlZWRlZCBiZWZvcmUgYWxsIHNpZ25hbHMgd2VyZQotICAgICAgICAgIGRldGVjdGVk LgotICAgICAgICAgICAgMTogU3VjY2Vzcy4KLQotICAgaW50Ci0gICAgICAgICAgdHR4aW4obixi dWYpIGludCBuOyBDSEFSICpidWY7Ci0gICAgICAgICAgUmVhZHMgeCBjaGFyYWN0ZXJzIGZyb20g dGhlIHR0eSBkZXZpY2UgaW50byB0aGUgc3BlY2lmaWVkIGJ1ZiwKLSAgICAgICAgICBzdHJpcHBp bmcgcGFyaXR5IGlmIHBhcml0eSBpcyBub3Qgbm9uZS4gVGhpcyBjYWxsIHdhaXRzIGZvcmV2ZXIs Ci0gICAgICAgICAgdGhlcmUgaXMgbm8gdGltZW91dC4gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25l ZCB0byBiZSBjYWxsZWQgb25seQotICAgICAgICAgIHdoZW4geW91IGtub3cgdGhhdCBhdCBsZWFz dCB4IGNoYXJhY3RlcnMgYXJlIHdhaXRpbmcgdG8gYmUgcmVhZAotICAgICAgICAgIChhcyBkZXRl cm1pbmVkLCBmb3IgZXhhbXBsZSwgYnkgdHRjaGsoKSkuIFRoaXMgZnVuY3Rpb24gc2hvdWxkCi0g ICAgICAgICAgdXNlIHRoZSBzYW1lIGJ1ZmZlciBhcyB0dGluYygpLgotCi0gICBpbnQKLSAgICAg ICAgICB0eGJ1ZnIodGltbykgaW50IHRpbW87Ci0gICAgICAgICAgUmVhZHMgY2hhcmFjdGVycyBp bnRvIHRoZSBpbnRlcm5hbCBjb21tdW5pY2F0aW9ucyBpbnB1dCBidWZmZXIuCi0gICAgICAgICAg dGltbyBpcyBhIHRpbWVvdXQgaW50ZXJ2YWwsIGluIHNlY29uZHMuIDAgbWVhbnMgbm8gdGltZW91 dCwgd2FpdAotICAgICAgICAgIGZvcmV2ZXIuIENhbGxlZCBieSB0dGluYygpIChhbmQgcG9zc2li bHkgdHR4aW4oKSBhbmQgdHRpbmwoKSkKLSAgICAgICAgICB3aGVuIHRoZSBjb21tdW5pY2F0aW9u cyBpbnB1dCBidWZmZXIgaXMgZW1wdHkuIFRoZSBidWZmZXIgc2hvdWxkCi0gICAgICAgICAgYmUg Y2FsbGVkIHR0eGJ1ZltdLCBpdHMgbGVuZ3RoIGlzIGRlZmluZWQgYnkgdGhlIHN5bWJvbCBUWEJV RkwuCi0gICAgICAgICAgVGhlIGdsb2JhbCB2YXJpYWJsZSB0eGJ1Zm4gaXMgdGhlIG51bWJlciBv ZiBjaGFyYWN0ZXJzIGF2YWlsYWJsZQotICAgICAgICAgIHRvIGJlIHJlYWQgZnJvbSB0dHhidWZb XSwgYW5kIHR4YnVmcCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQKLSAgICAgICAgICBjaGFyYWN0 ZXIgdG8gYmUgcmVhZC4gU2hvdWxkIG5vdCBiZSBjYWxsZWQgaWYgdHhidWZuID4gMCwgaW4KLSAg ICAgICAgICB3aGljaCBjYXNlIHRoZSBidWZmZXIgZG9lcyBub3QgbmVlZCByZWZpbGxpbmcuIFRo aXMgcm91dGluZQotICAgICAgICAgIHJldHVybnM6Ci0gICAgICAgICAgICAtMjogQ29tbXVuaWNh dGlvbnMgZGlzY29ubmVjdAotICAgICAgICAgICAgLTE6IFRpbWVvdXQKLSAgICAgICAgICA+PTA6 IEEgY2hhcmFjdGVyICgwIC0gMjU1KSBPbiBzdWNjZXNzLCB0aGUgZmlyc3QgY2hhcmFjdGVyIHRo YXQKLSAgICAgICAgICB3YXMgcmVhZCwgd2l0aCB0aGUgdmFyaWFibGVzIHR4YnVmbiBhbmQgdHhi dWZwIHNldCBhcHByb3ByaWF0ZWx5Ci0gICAgICAgICAgZm9yIGFueSByZW1haW5pbmcgY2hhcmFj dGVycy4KLSAgICAgICAgICBOT1RFOiBDdXJyZW50bHkgdGhpcyByb3V0aW5lIGlzIHVzZWQgaW50 ZXJuYWxseSBvbmx5IGJ5IHRoZSBVTklYCi0gICAgICAgICAgYW5kIFZNUyB2ZXJzaW9ucy4gVGhl IGFpbSBpcyB0byBtYWtlIGl0IGF2YWlsYWJsZSB0byBhbGwKLSAgICAgICAgICB2ZXJzaW9ucyBz byB0aGVyZSBpcyBvbmUgc2luZ2xlIGNvaGVyZW50IGFuZCBlZmZpY2llbnQgd2F5IG9mCi0gICAg ICAgICAgcmVhZGluZyBmcm9tIHRoZSBjb21tdW5pY2F0aW9ucyBkZXZpY2Ugb3IgbmV0d29yay4K LQotNC5FLjIuNi4gTWlzY2VsbGFuZW91cyBzeXN0ZW0tZGVwZW5kZW50IGZ1bmN0aW9ucwotCi0g ICBWT0lECi0gICAgICAgICAgenRpbWUocykgY2hhciAqKnM7Ci0gICAgICAgICAgUmV0dXJucyBh IHBvaW50ZXIsIHMsIHRvIHRoZSBjdXJyZW50IGRhdGUtYW5kLXRpbWUgc3RyaW5nIGluIHMuCi0g ICAgICAgICAgVGhpcyBzdHJpbmcgbXVzdCBiZSBpbiB0aGUgZml4ZWQtZmllbGQgZm9ybWF0IGFz c29jaWF0ZWQgd2l0aAotICAgICAgICAgIHRoZSBDIHJ1bnRpbWUgYXNjdGltZSgpIGZ1bmN0aW9u LCBsaWtlOiAiU3VuIFNlcCAxNiAxMzoyMzo0NQotICAgICAgICAgIDE5NzNcbiIgc28gdGhhdCBj YWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24gY2FuIGV4dHJhY3QgdGhlCi0gICAgICAgICAgZGlmZmVy ZW50IGZpZWxkcy4gVGhlIHBvaW50ZXIgdmFsdWUgaXMgZmlsbGVkIGluIGJ5IHp0aW1lLCBhbmQK LSAgICAgICAgICB0aGUgZGF0YSBpdCBwb2ludHMgdG8gaXMgbm90IHNhZmUsIHNvIHNob3VsZCBi ZSBjb3BpZWQgdG8gYSBzYWZlCi0gICAgICAgICAgcGxhY2UgYmVmb3JlIHVzZS4genRpbWUoKSBo YXMgbm8gcmV0dXJuIHZhbHVlLiBBcyBhIHNpZGUgZWZmZWN0LAotICAgICAgICAgIHRoaXMgcm91 dGluZSBjYW4gYWxzbyBmaWxsIGluIHRoZSBmb2xsb3dpbmcgdHdvIGV4dGVybmFsCi0gICAgICAg ICAgdmFyaWFibGVzICh3aGljaCBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIHN5c3RlbS1kZXBlbmRl bnQgbW9kdWxlcwotICAgICAgICAgIGZvciBlYWNoIHBsYXRmb3JtKToKLSAgICAgICAgICAgIGxv bmcgenR1c2VjOiBGcmFjdGlvbiBvZiBzZWNvbmRzIG9mIGNsb2NrIHRpbWUsIG1pY3Jvc2Vjb25k cy4KLSAgICAgICAgICAgIGxvbmcgenRtc2VjOiBGcmFjdGlvbiBvZiBzZWNvbmRzIG9mIGNsb2Nr IHRpbWUsIG1pbGxpc2Vjb25kcy4KLSAgICAgICAgICBJZiB0aGVzZSB2YXJpYWJsZXMgYXJlIG5v dCBzZXQgYnkgenN0aW1lKCksIHRoZXkgcmVtYWluIGF0IHRoZWlyCi0gICAgICAgICAgaW5pdGlh bCB2YWx1ZSBvZiAtMUwuCi0KLSAgIGludAotICAgICAgICAgIGd0aW1lcigpCi0gICAgICAgICAg UmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZWxhcHNlZCB0aW1lIGNvdW50ZXIgaW4g c2Vjb25kcwotICAgICAgICAgIChzZWUgcnRpbWVyKSwgb3IgMCBvbiBhbnkga2luZCBvZiBlcnJv ci4KLQotICAgI2lmZGVmIEdGVElNRVIKLSAgICAgICAgICBDS0ZMT0FUCi0gICAgICAgICAgZ2Z0 aW1lcigpCi0gICAgICAgICAgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZWxhcHNl ZCB0aW1lIGNvdW50ZXIgaW4KLSAgICAgICAgICBzZWNvbmRzLCBhcyBhIGZsb2F0aW5nIHBvaW50 IG51bWJlciwgY2FwYWJsZSBvZiByZXByZXNlbnRpbmcgbm90Ci0gICAgICAgICAgb25seSB3aG9s ZSBzZWNvbmRzLCBidXQgYWxzbyB0aGUgZnJhY3Rpb25hbCBwYXJ0LCB0byB0aGUKLSAgICAgICAg ICBtaWxsaXNlY29uZCBvciBtaWNyb3NlY29uZCBsZXZlbCwgd2hhdGV2ZXIgcHJlY2lzaW9uIGlz Ci0gICAgICAgICAgYXZhaWxhYmxlLiBSZXF1aXJlcyBhIGZ1bmN0aW9uIHRvIGdldCB0aW1lcyBh dCBzdWJzZWNvbmQKLSAgICAgICAgICBwcmVjaXNpb24sIGFzIHdlbGwgYXMgZmxvYXRpbmctcG9p bnQgc3VwcG9ydC4gVGhhdCdzIHdoeSBpdCdzCi0gICAgICAgICAgI2lmZGVmJ2QuCi0KLSAgICNl bmRpZiAvKiBHRlRJTUVSICovCi0KLSAgIGludAotICAgICAgICAgIG1zbGVlcChtKSBpbnQgbTsK LSAgICAgICAgICBTbGVlcHMgKHBhdXNlcywgZG9lcyBub3RoaW5nKSBmb3IgbSBtaWxsaXNlY29u ZHMgKGEgbWlsbGlzZWNvbmQKLSAgICAgICAgICBpcyBvbmUgdGhvdXNhbmR0aCBvZiBhIHNlY29u ZCkuIFJldHVybnM6Ci0gICAgICAgICAgIC0xOiBvbiBmYWlsdXJlLgotICAgICAgICAgICAgMDog b24gc3VjY2Vzcy4KLQotICAgVk9JRAotICAgICAgICAgIHJ0aW1lcigpCi0gICAgICAgICAgU2V0 cyB0aGUgZWxhcHNlZCB0aW1lIGNvdW50ZXIgdG8gemVyby4gSWYgeW91IHdhbnQgdG8gdGltZSBo b3cKLSAgICAgICAgICBsb25nIGFuIG9wZXJhdGlvbiB0YWtlcywgY2FsbCBydGltZXIoKSB3aGVu IGl0IHN0YXJ0cyBhbmQgZ3RpbWVyCi0gICAgICAgICAgd2hlbiBpdCBlbmRzLiBydGltZXIoKSBo YXMgbm8gcmV0dXJuIHZhbHVlLgotCi0gICAjaWZkZWYgR0ZUSU1FUgotICAgICAgICAgIFZPSUQK LSAgICAgICAgICByZnRpbWVyKCkKLSAgICAgICAgICBTZXRzIHRoZSBlbGFwc2VkIHRpbWUgY291 bnRlciB0byB6ZXJvLiBJZiB5b3Ugd2FudCB0byB0aW1lIGhvdwotICAgICAgICAgIGxvbmcgYW4g b3BlcmF0aW9uIHRha2VzLCBjYWxsIHJmdGltZXIoKSB3aGVuIGl0IHN0YXJ0cyBhbmQKLSAgICAg ICAgICBnZnRpbWVyIHdoZW4gaXQgZW5kcy4gcmZ0aW1lcigpIGhhcyBubyByZXR1cm4gdmFsdWUu IE5vdGU6Ci0gICAgICAgICAgcmZ0aW1lcigpIGlzIHRvIGJlIHVzZWQgd2l0aCBnZnRpbWVyKCkg YW5kIHJ0aW1lcigpIGlzIHRvIGJlCi0gICAgICAgICAgdXNlZCB3aXRoIGd0aW1lcigpLiBTZWUg dGhlIHJmdGltZXIoKSBkZXNjcmlwdGlvbi4KLQotICAgI2VuZGlmIC8qIEdGVElNRVIgKi8KLQot ICAgaW50Ci0gICAgICAgICAgc3lzaW5pdCgpCi0gICAgICAgICAgRG9lcyB3aGF0ZXZlciBuZWVk cyBkb2luZyB1cG9uIHByb2dyYW0gc3RhcnQuIEluIHBhcnRpY3VsYXIsIGlmCi0gICAgICAgICAg dGhlIHByb2dyYW0gaXMgcnVubmluZyBpbiBhbnkga2luZCBvZiBwcml2aWxlZ2VkIG1vZGUsIHR1 cm5zIG9mZgotICAgICAgICAgIHRoZSBwcml2aWxlZ2VzIChzZWUgcHJpdl9pbmkoKSkuIFJldHVy bnM6Ci0gICAgICAgICAgIC0xOiBvbiBlcnJvci4KLSAgICAgICAgICAgIDA6IG9uIHN1Y2Nlc3Mu Ci0KLSAgIGludAotICAgICAgICAgIHN5c2NsZWFudXAoKQotICAgICAgICAgIERvZXMgd2hhdGV2 ZXIgbmVlZHMgZG9pbmcgdXBvbiBwcm9ncmFtIGV4aXQuIFJldHVybnM6Ci0gICAgICAgICAgIC0x OiBvbiBlcnJvci4KLSAgICAgICAgICAgIDA6IG9uIHN1Y2Nlc3MuCi0KLSAgIGludAotICAgICAg ICAgIHBzdXNwZW5kKCkKLSAgICAgICAgICBTdXNwZW5kcyB0aGUgS2VybWl0IHByb2Nlc3MsIHB1 dHMgaXQgaW4gdGhlIGJhY2tncm91bmQgc28gaXQgY2FuCi0gICAgICAgICAgYmUgY29udGludWVk ICgiZm9yZWdyb3VuZGVkIikgbGF0ZXIuIFJldHVybnM6Ci0gICAgICAgICAgIC0xOiBpZiB0aGlz IGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuCi0gICAgICAgICAgICAwOiBvbiBzdWNjZXNzLgot Ci0gICBbIFsxMzZdQ29udGVudHMgXSBbIFsxMzddQy1LZXJtaXQgXSBbIFsxMzhdS2VybWl0IEhv bWUgXQotCi00LkYuIEdyb3VwIEY6IE5ldHdvcmsgU3VwcG9ydAotCi0gICBBcyBvZiB2ZXJzaW9u IDVBLCBDLUtlcm1pdCBpbmNsdWRlcyBzdXBwb3J0IGZvciBzZXZlcmFsIG5ldHdvcmtzLgotICAg T3JpZ2luYWxseSwgdGhpcyB3YXMganVzdCB3b3JrZWQgaW50byB0aGUgdHRvcGVuKCksIHR0Y2xv cygpLCB0dGluYygpLAotICAgdHRpbmwoKSwgYW5kIHNpbWlsYXIgcm91dGluZXMgaW4gWzEzOV1j a3V0aW8uYy4gQnV0IHRoaXMgbWFkZSBpdAotICAgaW1wb3NzaWJsZSB0byBzaGFyZSB0aGlzIGNv ZGUgd2l0aCBub24tVU5JWCB2ZXJzaW9ucywgbGlrZSBWTVMsIEFPUy9WUywKLSAgIE9TLzIsIGV0 Yy4gU28gYXMgb2YgZWRpdCAxNjgsIG5ldHdvcmsgY29kZSBoYXMgYmVlbiBzZXBhcmF0ZWQgb3V0 IGludG8KLSAgIGl0cyBvd24gbW9kdWxlIGFuZCBoZWFkZXIgZmlsZSwgY2tjbmV0LmMgYW5kIGNr Y25ldC5oOgotCi0gICAgIFsxNDBdY2tjbmV0Lmg6IE5ldHdvcmstcmVsYXRlZCBzeW1ib2wgZGVm aW5pdGlvbnMuCi0gICAgIFsxNDFdY2tjbmV0LmM6IE5ldHdvcmsgaS9vIChUQ1AvSVAsIFguMjUs IGV0YyksIHNoYXJlZCBieSBtb3N0Ci0gICBwbGF0Zm9ybXMuCi0gICAgIFsxNDJdY2tsbmV0LmM6 IE5ldHdvcmsgaS9vIChUQ1AvSVAsIFguMjUsIGV0Yykgc3BlY2lmaWMgdG8gU3RyYXR1cwotICAg Vk9TLgotCi0gICBUaGUgcm91dGluZXMgYW5kIHZhcmlhYmxlcyBpbiB0aGVzZSBtb2R1bGVzIGZh bGwgaW50byB0d28gY2F0ZWdvcmllczoKLQotICAgIDEuIFN1cHBvcnQgZm9yIHNwZWNpZmljIG5l dHdvcmsgcGFja2FnZXMgbGlrZSBTdW5MaW5rIFguMjUgYW5kIFRHVgotICAgICAgIE11bHRpTmV0 LCBhbmQ6Ci0gICAgMi4gc3VwcG9ydCBmb3Igc3BlY2lmaWMgbmV0d29yayB2aXJ0dWFsIHRlcm1p bmFsIHByb3RvY29scyBsaWtlIENDSVRUCi0gICAgICAgWC4zIGFuZCBUQ1AvSVAgVGVsbmV0Lgot Ci0gICBDYXRlZ29yeSAoMSkgZnVuY3Rpb25zIGFyZSBhbmFsb2dzIHRvIHRoZSB0dCooKSBmdW5j dGlvbnMsIGFuZCBoYXZlCi0gICBuYW1lcyBsaWtlIG5ldG9wZW4sIG5ldGNsb3MsIG5ldHRpbmMs IGV0Yy4gR3JvdXAgQS1EIG1vZHVsZXMgZG8gbm90Ci0gICAoYW5kIG11c3Qgbm90KSBrbm93IGFu eXRoaW5nIGFib3V0IHRoZXNlIGZ1bmN0aW9ucyAtLSB0aGV5IGNvbnRpbnVlIHRvCi0gICBjYWxs IHRoZSBvbGQgR3JvdXAgRSBmdW5jdGlvbnMgKHR0b3BlbiwgdHRpbmMsIGV0YykuIENhdGVnb3J5 ICgyKQotICAgZnVuY3Rpb25zIGFyZSBwcm90b2NvbCBzcGVjaWZpYyBhbmQgaGF2ZSBuYW1lcyBw cmVmaXhlZCBieSBhIHByb3RvY29sCi0gICBpZGVudGlmaWVyLCBsaWtlIHRuIGZvciB0ZWxuZXQg eDI1IGZvciBYLjI1LgotCi0gICBja2NuZXQuaCBjb250YWlucyBwcm90b3R5cGVzIGZvciBhbGwg dGhlc2UgZnVuY3Rpb25zLCBhcyB3ZWxsIGFzIHN5bWJvbAotICAgZGVmaW5pdGlvbnMgZm9yIG5l dHdvcmsgdHlwZXMsIHByb3RvY29scywgYW5kIG5ldHdvcmstIGFuZCBwcm90b2NvbC0KLSAgIHNw ZWNpZmljIHN5bWJvbHMsIGFzIHdlbGwgYXMgI2luY2x1ZGVzIGZvciB0aGUgaGVhZGVyIGZpbGVz IG5lY2Vzc2FyeQotICAgZm9yIGVhY2ggbmV0d29yayBhbmQgcHJvdG9jb2wuCi0KLSAgIFRoZSBm b2xsb3dpbmcgZnVuY3Rpb25zIGFyZSB0byBiZSBwcm92aWRlZCBmb3IgbmV0d29ya3MgdGhhdCBk byBub3QgdXNlCi0gICBub3JtYWwgc3lzdGVtIGkvbyAob3BlbiwgcmVhZCwgd3JpdGUsIGNsb3Nl KToKLQotICAgaW50Ci0gICAgICAgICAgbmV0b3BlbigpCi0gICAgICAgICAgVG8gYmUgY2FsbGVk IGZyb20gd2l0aGluIHR0b3BlbigpIHdoZW4gYSBuZXR3b3JrIGNvbm5lY3Rpb24gaXMKLSAgICAg ICAgICByZXF1ZXN0ZWQuIENhbGxpbmcgY29udmVudGlvbnMgYW5kIHB1cnBvc2Ugc2FtZSBhcyBH cm91cCBFCi0gICAgICAgICAgdHRvcGVuKCkuCi0KLSAgIGludAotICAgICAgICAgIG5ldGNsb3Mo KQotICAgICAgICAgIFRvIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiB0dGNsb3MoKSB3aGVuIGEgbmV0 d29yayBjb25uZWN0aW9uIGlzCi0gICAgICAgICAgYmVpbmcgY2xvc2VkLiBDYWxsaW5nIGNvbnZl bnRpb25zIGFuZCBwdXJwb3NlIHNhbWUgYXMgR3JvdXAgRQotICAgICAgICAgIHR0Y2xvcygpLgot Ci0gICBpbnQKLSAgICAgICAgICBuZXR0Y2hrKCkKLSAgICAgICAgICBUbyBiZSBjYWxsZWQgZnJv bSB3aXRoaW4gdHRjaGsoKS4gQ2FsbGluZyBjb252ZW50aW9ucyBhbmQKLSAgICAgICAgICBwdXJw b3NlIHNhbWUgYXMgR3JvdXAgRSB0dGNoaygpLgotCi0gICBpbnQKLSAgICAgICAgICBuZXRmbHVp KCkKLSAgICAgICAgICBUbyBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gdHRmbHVpKCkuIENhbGxpbmcg Y29udmVudGlvbnMgYW5kCi0gICAgICAgICAgcHVycG9zZSBzYW1lIGFzIEdyb3VwIEUgdHRmbHVp KCkuCi0KLSAgIGludAotICAgICAgICAgIG5ldGJyZWFrKCkKLSAgICAgICAgICBUbyBzZW5kIGEg bmV0d29yayBicmVhayAoYXR0ZW50aW9uKSBzaWduYWwuIENhbGxpbmcgY29udmVudGlvbnMKLSAg ICAgICAgICBhbmQgcHVycG9zZSBzYW1lIGFzIEdyb3VwIEUgdHRzbmRicmsoKS4KLQotICAgaW50 Ci0gICAgICAgICAgbmV0aW5jKCkKLSAgICAgICAgICBUbyBnZXQgYSBjaGFyYWN0ZXIgZnJvbSB0 aGUgbmV0d29yay4gQ2FsbGluZyBjb252ZW50aW9ucyBzYW1lIGFzCi0gICAgICAgICAgR3JvdXAg RSB0dHNuZGJyaygpLgotCi0gICBpbnQKLSAgICAgICAgICBuZXR0b2MoKQotICAgICAgICAgIFNl bmQgYSAiY2hhcmFjdGVyIiAoYnl0ZSkgdG8gdGhlIG5ldHdvcmsuIENhbGxpbmcgY29udmVudGlv bnMKLSAgICAgICAgICBzYW1lIGFzIEdyb3VwIEUgdHRvYygpLgotCi0gICBpbnQKLSAgICAgICAg ICBuZXR0b2woKQotICAgICAgICAgIFNlbmQgYSAibGluZSIgKHNlcXVlbmNlIG9mIGJ5dGVzKSB0 byB0aGUgbmV0d29yay4gQ2FsbGluZwotICAgICAgICAgIGNvbnZlbnRpb25zIHNhbWUgYXMgR3Jv dXAgRSB0dG9sKCkuCi0KLSAgIENvbmNlaXZhYmx5LCBzb21lIHN5c3RlbXMgc3VwcG9ydCBuZXR3 b3JrIGNvbm5lY3Rpb25zIHNpbXBseSBieSBsZXR0aW5nCi0gICB5b3Ugb3BlbiBhIGRldmljZSBv ZiBhIGNlcnRhaW4gbmFtZSBhbmQgbGV0dGluZyB5b3UgZG8gaS9vIHRvIGl0LgotICAgT3RoZXJz IChsaWtlIHRoZSBCZXJrZWxleSBzb2NrZXRzIFRDUC9JUCBsaWJyYXJ5IG9uIFVOSVgpIHJlcXVp cmUgeW91Ci0gICB0byBvcGVuIHRoZSBjb25uZWN0aW9uIGluIGEgc3BlY2lhbCB3YXksIGJ1dCB0 aGVuIGRvIG5vcm1hbCBpL28gKHJlYWQsCi0gICB3cml0ZSkuIEluIHN1Y2ggYSBjYXNlLCB5b3Ug d291bGQgdXNlIG5ldG9wZW4oKSwgYnV0IHlvdSB3b3VsZCBub3QgdXNlCi0gICBuZXR0aW5jLCBu ZXR0b2MsIGV0Yy4KLQotICAgVk1TIFRDUC9JUCBwcm9kdWN0cyBoYXZlIHRoZWlyIG93biBzZXQg b2YgZnVuY3Rpb25zIGZvciBhbGwgbmV0d29yawotICAgb3BlcmF0aW9ucywgc28gaW4gdGhhdCBj YXNlIHRoZSBmdWxsIHJhbmdlIG9mIG5ldHh4eCgpIGZ1bmN0aW9ucyBpcwotICAgdXNlZC4KLQot ICAgVGhlIHRlY2huaXF1ZSBpcyB0byBwdXQgYSB0ZXN0IGluIGVhY2ggY29ycmVzcG9uZGluZyB0 dHh4eCgpIGZ1bmN0aW9uCi0gICB0byBzZWUgaWYgYSBuZXR3b3JrIGNvbm5lY3Rpb24gaXMgYWN0 aXZlIChvciBpcyBiZWluZyByZXF1ZXN0ZWQpLCB0ZXN0Ci0gICBmb3Igd2hpY2gga2luZCBvZiBu ZXR3b3JrIGl0IGlzLCBhbmQgaWYgbmVjZXNzYXJ5IHJvdXRlIHRoZSBjYWxsIHRvIHRoZQotICAg Y29ycmVzcG9uZGluZyBuZXR4eHgoKSBmdW5jdGlvbi4gVGhlIG5ldHh4eCgpIGZ1bmN0aW9uIG11 c3QgYWxzbwotICAgY29udGFpbiBjb2RlIHRvIHRlc3QgZm9yIHRoZSBuZXR3b3JrIHR5cGUsIHdo aWNoIGlzIGF2YWlsYWJsZSB2aWEgdGhlCi0gICBnbG9iYWwgdmFyaWFibGUgdHRuZXQuCi0KLSAg IFsgWzE0M11Db250ZW50cyBdIFsgWzE0NF1DLUtlcm1pdCBdIFsgWzE0NV1LZXJtaXQgSG9tZSBd Ci0KLTQuRi4xLiBUZWxuZXQgUHJvdG9jb2wKLQotICAgKFRoaXMgc2VjdGlvbiBuZWVkcyBhIGdy ZWF0IGRlYWwgb2YgdXBkYXRpbmcuLi4pCi0KLSAgIEFzIG9mIGVkaXQgMTk1LCBUZWxuZXQgcHJv dG9jb2wgaXMgc3BsaXQgb3V0IGludG8gaXRzIG93biBmaWxlcywgc2luY2UKLSAgIGl0IGNhbiBi ZSBpbXBsZW1lbnRlZCBpbiByZW1vdGUgbW9kZSwgd2hpY2ggZG9lcyBub3QgaGF2ZSBhIG5ldHdv cmsKLSAgIGNvbm5lY3Rpb246Ci0KLSAgICAgIFsxNDZdY2tjdGVsLmg6IFRlbG5ldCBwcm90b2Nv bCBzeW1ib2wgZGVmaW5pdGlvbnMuCi0gICAgICBbMTQ3XWNrY3RlbC5jOiBUZWxuZXQgcHJvdG9j b2wuCi0KLSAgIFRoZSBUZWxuZXQgcHJvdG9jb2wgaXMgc3VwcG9ydGVkIGJ5IHRoZSBmb2xsb3dp bmcgdmFyaWFibGVzIGFuZAotICAgcm91dGluZXM6Ci0KLSAgIGludCB0bl9pbml0Ci0gICAgICAg ICAgTm9uemVybyBpZiB0ZWxuZXQgcHJvdG9jb2wgaW5pdGlhbGl6ZWQsIHplcm8gb3RoZXJ3aXNl LgotCi0gICBpbnQKLSAgICAgICAgICB0bl9pbml0KCkKLSAgICAgICAgICBJbml0aWFsaXplIHRo ZSB0ZWxuZXQgcHJvdG9jb2wgKHNlbmQgaW5pdGlhbCBvcHRpb25zKS4KLQotICAgaW50Ci0gICAg ICAgICAgdG5fc29wdCgpCi0gICAgICAgICAgU2VuZCBhIHRlbG5ldCBvcHRpb24uCi0KLSAgIGlu dAotICAgICAgICAgIHRuX2Rvb3AoKQotICAgICAgICAgIFJlY2VpdmUgYW5kIGFjdCBvbiBhIHRl bG5ldCBvcHRpb24gZnJvbSB0aGUgcmVtb3RlLgotCi0gICBpbnQKLSAgICAgICAgICB0bl9zdHR5 cCgpCi0gICAgICAgICAgU2VuZCB0ZXJtaW5hbCB0eXBlIHVzaW5nIHRlbG5ldCBwcm90b2NvbC4K LQotNC5GLjIuIEZUUCBQcm90b2NvbAotCi0gICAoVG8gYmUgZmlsbGVkIGluLi4uKSBTZWUgdGhl IFsxNDhdc291cmNlIGZpbGUKLQotNC5GLjMuIEhUVFAgUHJvdG9jb2wKLQotICAgKFRvIGJlIGZp bGxlZCBpbi4uLikKLQotNC5GLjQuIFguMjUgTmV0d29ya3MKLQotICAgVGhlc2Ugcm91dGluZXMg d2VyZSB3cml0dGVuIFN1bkxpbmsgWC4yNSBhbmQgaGF2ZSBzaW5jZSBiZWVuIGFkYXB0ZWQgdG8K LSAgIGF0IGxlYXN0IG9uIG9uZSBvdGhlcjogSUJNIEFJWExpbmsvWC4yNS4KLQotICAgaW50Ci0g ICAgICAgICAgeDI1ZGlhZygpCi0gICAgICAgICAgUmVhZHMgYW5kIHByaW50cyBYLjI1IGRpYWdu b3N0aWNzCi0KLSAgIGludAotICAgICAgICAgIHgyNW9vYmgoKQotICAgICAgICAgIFguMjUgb3V0 IG9mIGJhbmQgc2lnbmFsIGhhbmRsZXIKLQotICAgaW50Ci0gICAgICAgICAgeDI1aW50cigpCi0g ICAgICAgICAgU2VuZHMgWC4yNSBpbnRlcnJ1cHQgcGFja2V0Ci0KLSAgIGludAotICAgICAgICAg IHgyNXJlc2V0KCkKLSAgICAgICAgICBSZXNldHMgWC4yNSB2aXJ0dWFsIGNpcmN1aXQKLQotICAg aW50Ci0gICAgICAgICAgeDI1Y2xlYXIoKQotICAgICAgICAgIENsZWFyIFguMjUgdmlydHVhbCBj aXJjdWl0Ci0KLSAgIGludAotICAgICAgICAgIHgyNXN0YXQoKQotICAgICAgICAgIFguMjUgc3Rh dHVzCi0KLSAgIGludAotICAgICAgICAgIHNldHFiaXQoKQotICAgICAgICAgIFNldHMgWC4yNSBR LWJpdAotCi0gICBpbnQKLSAgICAgICAgICByZXNldHFiaXQoKQotICAgICAgICAgIFJlc2V0cyBY LjI1IFEtYml0Ci0KLSAgIGludAotICAgICAgICAgIHgyNXhpbigpCi0gICAgICAgICAgUmVhZHMg biBjaGFyYWN0ZXJzIGZyb20gWC4yNSBjaXJjdWl0LgotCi0gICBpbnQKLSAgICAgICAgICB4MjVp bmwoKQotICAgICAgICAgIFJlYWQgYSBLZXJtaXQgcGFja2V0IGZyb20gWC4yNSBjaXJjdWl0Lgot Ci0gICBbIFsxNDldQ29udGVudHMgXSBbIFsxNTBdQy1LZXJtaXQgXSBbIFsxNTFdS2VybWl0IEhv bWUgXQotCi00LkYuNS4gQWRkaW5nIE5ldyBOZXR3b3JrIFR5cGVzCi0KLSAgIEV4YW1wbGU6IEFk ZGluZyBzdXBwb3J0IGZvciBJQk0gWC4yNSBhbmQgSGV3bGV0dCBQYWNrYXJkIFguMjUuIEZpcnN0 LAotICAgYWRkIG5ldyBuZXR3b3JrIHR5cGUgc3ltYm9scyBmb3IgZWFjaCBvbmUuIFRoZXJlIGFy ZSBhbHJlYWR5IHNvbWUKLSAgIG5ldHdvcmsgdHlwZXMgZGVmaW5lZCBmb3Igb3RoZXIgWC4yNSBw YWNrYWdlczoKLQotICBORVRfU1gyNSBpcyB0aGUgbmV0d29yay10eXBlIElEIGZvciBTdW5MaW5r IFguMjUuCi0gIE5FVF9WWDI1IGlzIHRoZSBuZXR3b3JrLXR5cGUgSUQgZm9yIFZPUyBYLjI1Lgot Ci0gICBTbyBmaXJzdCB5b3Ugc2hvdWxkIG5ldyBzeW1ib2xzIGZvciB0aGUgbmV3IG5ldHdvcmsg dHlwZXMsIGdpdmluZyB0aGVtCi0gICB0aGUgbmV4dCBudW1iZXJzIGluIHRoZSBzZXF1ZW5jZSwg ZS5nLjoKLQotI2RlZmluZSBORVRfSFgyNSAxMSAgICAgICAgICAgICAgICAgICAgIC8qIEhld2xl dHQtUGFja2FyZCBYLjI1ICovCi0jZGVmaW5lIE5FVF9JWDI1IDEyICAgICAgICAgICAgICAgICAg ICAgLyogSUJNIFguMjUgKi8KLQotICAgVGhpcyBpcyBpbiBja2NuZXQuaC4KLQotICAgVGhlbiB3 ZSBuZWVkIHN5bWJvbHMgdG8gc2F5IHRoYXQgd2UgYXJlIGFjdHVhbGx5IGNvbXBpbGluZyBpbiB0 aGUgY29kZQotICAgZm9yIHRoZXNlIHBsYXRmb3Jtcy4gVGhlc2Ugd291bGQgYmUgZGVmaW5lZCBv biB0aGUgY2MgY29tbWFuZCBsaW5lOgotCi0gIC1ESUJNWDI1ICAoZm9yIElCTSkKLSAgLURIUFgy NSAgIChmb3IgSFApCi0KLSAgIFNvIHdlIGNhbiBidWlsZCBDLUtlcm1pdCB2ZXJzaW9ucyBmb3Ig QUlYIGFuZCBIUC1VWCBib3RoIHdpdGggYW5kCi0gICB3aXRob3V0IFguMjUgc3VwcG9ydCAoc2lu Y2Ugbm90IGFsbCBBSVggYW5kIElCTSBzeXN0ZW1zIGhhdmUgdGhlIG5lZWRlZAotICAgbGlicmFy aWVzLCBhbmQgc28gYW4gZXhlY3V0YWJsZSB0aGF0IHdhcyBsaW5rZWQgd2l0aCB0aGVtIG1pZ2h0 IG5vCi0gICBsb2FkKS4KLQotICAgVGhlbiBpbiBja2NuZXQuaDoKLQotI2lmZGVmIElCTVgyNQot I2RlZmluZSBBTllYMjUKLSNlbmRpZiAvKiBJQk1YMjUgKi8KLQotI2lmZGVmIEhQWDI1Ci0jZGVm aW5lIEFOWVgyNQotI2VuZGlmIC8qIEhQWDI1ICovCi0KLSAgIEFuZCB0aGVuIHVzZSBBTllYMjUg Zm9yIGNvZGUgdGhhdCBpcyBjb21tb24gdG8gYWxsIG9mIHRoZW0sIGFuZCBJQk1YMjUKLSAgIG9y IEhQWDI1IGZvciBjb2RlIHNwZWNpZmljIHRvIElCTSBvciBIUC4KLQotICAgSXQgbWlnaHQgYWxz byBoYXBwZW4gdGhhdCBzb21lIGNvZGUgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIHR3byBvciBtb3Jl Ci0gICBvZiB0aGVzZSwgYnV0IG5vdCB0aGUgb3RoZXJzLiBTdXBwb3NlLCBmb3IgZXhhbXBsZSwg dGhhdCB5b3Ugd3JpdGUgY29kZQotICAgdGhhdCBhcHBsaWVzIHRvIGJvdGggSUJNIGFuZCBIUCwg YnV0IG5vdCBTdW4gb3IgVk9TIFguMjUuIFRoZW4geW91IGFkZAotICAgdGhlIGZvbGxvd2luZyBk ZWZpbml0aW9uIHRvIGNrY25ldC5oOgotCi0jaWZuZGVmIEhQT1JJQk1YMjUKLSNpZmRlZiBIUFgy NQotI2RlZmluZSBIUE9SSUJNWDI1Ci0jZWxzZQotI2lmZGVmIElCTVgyNQotI2RlZmluZSBIUE9S SUJNWDI1Ci0jZW5kaWYgLyogSUJNWDI1ICovCi0jZW5kaWYgLyogSFBYMjUgKi8KLSNlbmRpZiAv KiBIUE9SSUJNWDI1ICovCi0KLSAgIFlvdSBjYW4gTk9UIHVzZSBjb25zdHJ1Y3Rpb25zIGxpa2Ug IiNpZiBkZWZpbmVkIChIUFgyNSB8fCBJQk1YMjUpIjsKLSAgIHRoZXkgYXJlIG5vdCBwb3J0YWJs ZS4KLQotICAgWyBbMTUyXUNvbnRlbnRzIF0gWyBbMTUzXUMtS2VybWl0IF0gWyBbMTU0XUtlcm1p dCBIb21lIF0KLQotNC5HLiBHcm91cCBHOiBGb3JtYXR0ZWQgU2NyZWVuIFN1cHBvcnQKLQotICAg U28gZmFyLCB0aGlzIGlzIHVzZWQgb25seSBmb3IgdGhlIGZ1bGxzY3JlZW4gbG9jYWwtbW9kZSBm aWxlIHRyYW5zZmVyCi0gICBkaXNwbGF5LiBJbiB0aGUgZnV0dXJlLCBpdCBtaWdodCBiZSBleHRl bmRlZCB0byBvdGhlciB1c2VzLiBUaGUKLSAgIGZ1bGxzY3JlZW4gZGlzcGxheSBjb2RlIGlzIGlu IGFuZCBhcm91bmQgdGhlIHJvdXRpbmUgc2NyZWVuYygpIGluCi0gICBbMTU1XWNrdXVzeC5jLgot Ci0gICBJbiB0aGUgVU5JWCB2ZXJzaW9uLCB3ZSB1c2UgdGhlIGN1cnNlcyBsaWJyYXJ5LCBwbHVz IG9uZSBjYWxsIGZyb20gdGhlCi0gICB0ZXJtY2FwIGxpYnJhcnkuIEluIG90aGVyIHZlcnNpb25z IChPUy8yLCBWTVMsIGV0Yykgd2UgaW5zZXJ0IGR1bW15Ci0gICByb3V0aW5lcyB0aGF0IGhhdmUg dGhlIHNhbWUgbmFtZXMgYXMgY3Vyc2VzIHJvdXRpbmVzLiBTbyBmYXIsIHRoZXJlIGFyZQotICAg dHdvIG1ldGhvZHMgZm9yIHNpbXVsYXRpbmcgY3Vyc2VzIHJvdXRpbmVzOgotCi0gICAgMS4gSW4g Vk1TLCB3ZSB1c2UgdGhlIFNjcmVlbiBNYW5hZ2VtZW50IExpYnJhcnkgKFNNRyksIGFuZCBpbnNl cnQKLSAgICAgICBzdHVicyB0byBjb252ZXJ0IGN1cnNlcyBjYWxscyBpbnRvIFNNRyBjYWxscy4K LSAgICAyLiBJbiBPUy8yLCB3ZSB1c2UgdGhlIE1ZQ1VSU0VTIGNvZGUsIGluIHdoaWNoIHRoZSBz dHViIHJvdXRpbmVzCi0gICAgICAgYWN0dWFsbHkgZW1pdCB0aGUgYXBwcm9wcmlhdGUgZXNjYXBl IHNlcXVlbmNlcyB0aGVtc2VsdmVzLgotCi0gICBIZXJlIGFyZSB0aGUgc3R1YiByb3V0aW5lczoK LQotICAgaW50Ci0gICAgICAgICAgdGdldGVudChjaGFyICpidWYsIGNoYXIgKnRlcm0pCi0gICAg ICAgICAgQXJndW1lbnRzIGFyZSBpZ25vcmVkLiBSZXR1cm5zIDEgaWYgdGhlIHVzZXIgaGFzIGEg c3VwcG9ydGVkCi0gICAgICAgICAgdGVybWluYWwgdHlwZSwgMCBvdGhlcndpc2UuIFNldHMgYSBn bG9iYWwgdmFyaWFibGUgKGZvciBleGFtcGxlLAotICAgICAgICAgICJpc3Z0NTIiIG9yICJpc2Rh c2hlciIpIHRvIGluZGljYXRlIHRoZSB0ZXJtaW5hbCB0eXBlLgotCi0gICBWT0lECi0gICAgICAg ICAgbW92ZShpbnQgcm93LCBpbnQgY29sKQotICAgICAgICAgIFNlbmRzIHRoZSBlc2NhcGUgc2Vx dWVuY2UgdG8gcG9zaXRpb24gdGhlIGN1cnNvciBhdCB0aGUKLSAgICAgICAgICBpbmRpY2F0ZWQg cm93IGFuZCBjb2x1bW4uIFRoZSBudW1iZXJzIGFyZSAwLWJhc2VkLCBlLmcuIHRoZSBob21lCi0g ICAgICAgICAgcG9zaXRpb24gaXMgMCwwLgotCi0gICBpbnQKLSAgICAgICAgICBjbGVhcigpCi0g ICAgICAgICAgU2VuZHMgdGhlIGVzY2FwZSBzZXF1ZW5jZSB0byBjbGVhciB0aGUgc2NyZWVuLgot Ci0gICBpbnQKLSAgICAgICAgICBjbHJ0b2VvbCgpCi0gICAgICAgICAgU2VuZHMgdGhlIGVzY2Fw ZSBzZXF1ZW5jZSB0byBjbGVhciBmcm9tIHRoZSBjdXJyZW50IGN1cnNvcgotICAgICAgICAgIHBv c2l0aW9uIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuCi0KLSAgIEluIHRoZSBNWUNVUlNFUyBjYXNl LCBjb2RlIG11c3QgYmUgYWRkZWQgdG8gZWFjaCBvZiB0aGUgbGFzdCB0aHJlZQotICAgcm91dGlu ZXMgdG8gZW1pdCB0aGUgYXBwcm9wcmlhdGUgZXNjYXBlIHNlcXVlbmNlcyBmb3IgYSBuZXcgdGVy bWluYWwKLSAgIHR5cGUuCi0KLSAgIGNsZWFyb2soY3Vyc2NyKSwgd3JlZnJlc2goKQotICAgICAg ICAgIEluIHJlYWwgY3Vyc2VzLCB0aGVzZSB0d28gY2FsbHMgYXJlIHJlcXVpcmVkIHRvIHJlZnJl c2ggdGhlCi0gICAgICAgICAgc2NyZWVuLCBmb3IgZXhhbXBsZSBhZnRlciBpdCB3YXMgZnJhY3R1 cmVkIGJ5IGEgYnJvYWRjYXN0Ci0gICAgICAgICAgbWVzc2FnZS4gVGhlc2UgYXJlIHVzZWZ1bCBv bmx5IGlmIHRoZSB1bmRlcmx5aW5nIHNjcmVlbgotICAgICAgICAgIG1hbmFnZW1lbnQgc2Vydmlj ZSBrZWVwcyBhIGNvcHkgb2YgdGhlIGVudGlyZSBzY3JlZW4sIGFzIGN1cnNlcwotICAgICAgICAg IGFuZCBTTUcgZG8uIEMtS2VybWl0IGRvZXMgbm90IGRvIHRoaXMgaXRzZWxmLgotCi0gICBbIFsx NTZdQ29udGVudHMgXSBbIFsxNTddQy1LZXJtaXQgXSBbIFsxNThdS2VybWl0IEhvbWUgXQotCi00 LkguIEdyb3VwIEg6IFBzZXVkb3Rlcm1pbmFsIFN1cHBvcnQKLQotICAgKFRvIGJlIGZpbGxlZCBp bi4uLikgQnV0IHNlZTogWzE1OV10aGVzZSBjb21tZW50cywgYW5kIHRoZSBzb3VyY2UgZmlsZXMK LSAgIFsxNjBdY2t1cHR5LmggYW5kIFsxNjFdY2t1cHR5LmMuCi0KLTQuSS4gR3JvdXAgSTogU2Vj dXJpdHkKLQotICAgKFRvIGJlIGZpbGxlZCBpbi4uLikgTWVhbndoaWxlLCBzZWUgWzE2Ml1zZWN1 cml0eS5odG1sLgotCi0gICBbIFsxNjNdQ29udGVudHMgXSBbIFsxNjRdQy1LZXJtaXQgXSBbIFsx NjVdS2VybWl0IEhvbWUgXQotCi1BUFBFTkRJWCBJLiBGSUxFIFBFUk1JU1NJT05TCi0KLUkuMS4g Rm9ybWF0IG9mIFN5c3RlbS1EZXBlbmRlbnQgRmlsZSBQZXJtaXNzaW9ucyBpbiBBLVBhY2tldHMK LQotICAgVGhlIGZvcm1hdCBvZiB0aGlzIGZpZWxkICh0aGUgIiwiIGF0dHJpYnV0ZSkgaXMgaW50 ZXJwcmV0ZWQgYWNjb3JkaW5nCi0gICB0byB0aGUgU3lzdGVtIElEICgiLiIgQXR0cmlidXRlKS4K LQotICAgRm9yIFVOSVggKFN5c3RlbSBJRCA9IFUxKSwgaXQncyB0aGUgZmFtaWxpYXIgMy1kaWdp dCBvY3RhbCBudW1iZXIsIHRoZQotICAgbG93LW9yZGVyIDkgYml0cyBvZiB0aGUgZmlsZW1vZGU6 IE93bmVyLCBHcm91cCwgV29ybGQsIGUuZy4gNjYwID0KLSAgIHJlYWQvd3JpdGUgYWNjZXNzIGZv ciBvd25lciBhbmQgZ3JvdXAsIG5vbmUgZm9yIHdvcmxkLCByZWNvcmRlZCBhcyBhCi0gICAzLWRp Z2l0IG9jdGFsIHN0cmluZy4gSGlnaC1vcmRlciBVTklYIHBlcm1pc3Npb24gYml0cyBhcmUgbm90 Ci0gICB0cmFuc21pdHRlZC4KLQotICAgRm9yIFZNUyAoU3lzdGVtIElEID0gRDcpLCBpdCdzIGEg NC1kaWdpdCBoZXggc3RyaW5nLCByZXByZXNlbnRpbmcgdGhlCi0gICAxNi1iaXQgZmlsZSBwcm90 ZWN0aW9uIFdHT1MgZmllbGRzIChXb3JsZCxHcm91cCxPd25lcixTeXN0ZW0pLCBpbiB0aGF0Ci0g ICBvcmRlciAod2hpY2ggaXMgdGhlIHJldmVyc2Ugb2YgaG93IHRoZXkncmUgc2hvd24gaW4gYSBk aXJlY3RvcnkKLSAgIGxpc3RpbmcpOyBpbiBlYWNoIGZpZWxkLCBCaXQgMCA9IFJlYWQsIDEgPSBX cml0ZSwgMiA9IEV4ZWN1dGUsIDMgPQotICAgRGVsZXRlLiBBIGJpdCB2YWx1ZSBvZiAwIG1lYW5z IHBlcm1pc3Npb24gaXMgZ3JhbnRlZCwgMSBtZWFucwotICAgcGVybWlzc2lvbiBpcyBkZW5pZWQu IFNhbXBsZToKLQotICByLTAxLTAwLV5BLyFGV0VSTUlULkVYRSciCi0gIHMtMDEtMDAtXkFFIVkv YW1kL3dhdHN1bi93L2ZkYy9uZXcvd2VybWl0LmV4ZS5EVgotICByLTAyLTAxLV5BXSJBLiJENyIi QjgjMTE5OTgwMTAxIDE4OjE0OjA1ISM4NTMxJjg3Mjk2MCwkQTIwQi0hNygjNTEyQCAjLlkKLSAg cy0wMi0wMS1eQSUiWS41IQotCi0gICBBIFZNUyBkaXJlY3RvcnkgbGlzdGluZyBzaG93cyB0aGUg ZmlsZSdzIHByb3RlY3Rpb24gYXMgKEUsUldFRCxSRUQsUkUpCi0gICB3aGljaCByZWFsbHkgbWVh bnMgKFM9RSxPPVJXRUQsRz1SRUQsVz1SRSksIHdoaWNoIGlzIHJldmVyc2Ugb3JkZXIgZnJvbQot ICAgdGhlIGludGVybmFsIHN0b3JhZ2UsIHNvIChSRSxSRUQsUldFRCxFKS4gTm93IHRyYW5zbGF0 ZSBlYWNoIGxldHRlciB0bwotICAgaXRzIGNvcnJlc3BvbmRpbmcgYml0OgotCi0gIFJFPTAxMDEs IFJFRD0xMTAxLCBSV0VEPTExMTEsIEU9MDAxMAotCi0gICBOb3cgcmV2ZXJzZSB0aGUgYml0czoK LQotICBSRT0xMDEwLCBSRUQ9MDAxMCwgUldFRD0wMDAwLCBFPTExMDEKLQotICAgVGhpcyBnaXZl cyB0aGUgMTYtYml0IHF1YW50aXR5OgotCi0gIDEwMTAwMDEwMDAwMDExMDEKLQotICAgVGhpcyBp cyB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIFZNUyBmaWxlIHBlcm1pc3Npb247 IGluIGhleDoKLQotICBBMjBCCi0KLSAgIGFzIHNob3duIGluIHRoZSBzYW1wbGUgcGFja2V0IGFi b3ZlLgotCi0gICBUaGUgVk1TIGZvcm1hdCBwcm9iYWJseSB3b3VsZCBhbHNvIGFwcGx5IHRvIFJT WCBvciBhbnkgb3RoZXIgRklMRVMtMTEKLSAgIHN5c3RlbS4KLQotSS4yLiBIYW5kbGluZyBvZiBH ZW5lcmljIFByb3RlY3Rpb24KLQotICAgVG8gYmUgdXNlZCB3aGVuIHRoZSB0d28gc3lzdGVtcyBh cmUgZGlmZmVyZW50IChhbmQvb3IgZG8gbm90IHJlY29nbml6ZQotICAgb3IgdW5kZXJzdGFuZCBl YWNoIG90aGVyJ3MgbG9jYWwgcHJvdGVjdGlvbiBjb2RlcykuCi0KLSAgIEZpcnN0IG9mIGFsbCwg dGhlIGJvb2sgaXMgd3JvbmcuIFRoaXMgc2hvdWxkIG5vdCBiZSB0aGUgV29ybGQKLSAgIHByb3Rl Y3Rpb24sIGJ1dCB0aGUgT3duZXIgcHJvdGVjdGlvbi4gVGhlIG90aGVyIGZpZWxkcyBzaG91bGQg YmUgc2V0Ci0gICBhY2NvcmRpbmcgdG8gc3lzdGVtIGRlZmF1bHRzIChlLmcuIFVOSVggdW1hc2ss IFZNUyBkZWZhdWx0IHByb3RlY3Rpb24sCi0gICBldGMpLCBleGNlcHQgdGhhdCBubyBub24tT3du ZXIgZmllbGQgc2hvdWxkIGdpdmUgbW9yZSBwZXJtaXNzaW9ucyB0aGFuCi0gICB0aGUgT3duZXIg ZmllbGQuCi0KLSAgIFsgWzE2Nl1Ub3AgXSBbIFsxNjddQ29udGVudHMgXSBbIFsxNjhdQy1LZXJt aXQgSG9tZSBdIFsgWzE2OV1LZXJtaXQKLSAgIEhvbWUgXQotICAgICBfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KLQotCi0g ICAgQy1LZXJtaXQgUHJvZ3JhbSBMb2dpYyBNYW51YWwgLyBbMTcwXVRoZSBLZXJtaXQgUHJvamVj dCAvCi0gICAgWzE3MV1rZXJtaXRAY29sdW1iaWEuZWR1IC8gMzAgSnVuZSAyMDExCi0KLVJlZmVy ZW5jZXMKLQotICAgMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUvCi0gICAyLiBtYWlsdG86a2Vy bWl0QGNvbHVtYmlhLmVkdQotICAgMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2lu ZGV4Lmh0bWwKLSAgIDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9rOTUuaHRtbAot ICAgNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotICAgNi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nrc2NyaXB0cy5odG1sCi0gICA3LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY3VycmVudC5odG1sCi0gICA4LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvd2hhdHNuZXcuaHRtbAotICAgOS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZmFxLmh0bWwKLSAgMTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9zdXBwb3J0Lmh0bWwKLSAgMTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC8KLSAgMTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbAotICAx My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI3gxCi0gIDE0LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwjeDIKLSAgMTUuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCN4MwotICAxNi4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI3g0Ci0gIDE3LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwjeDQuQQotICAxOC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI3g0LkIKLSAgMTkuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCN4NC5DCi0gIDIwLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwjeDQuRAotICAyMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrY3BsbS5odG1sI3g0LkUKLSAgMjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2NwbG0uaHRtbCN4NC5GCi0gIDIzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjcGxtLmh0bWwjeDQuRwotICAyNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrY3BsbS5odG1sI3g0LkgKLSAgMjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2NwbG0uaHRtbCN4NC5JCi0gIDI2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tjcGxtLmh0bWwjeGExCi0gIDI3LiBodHRwOi8vd3d3LmFtYXpvbi5jb20vZ3AvcHJvZHVjdC8w OTMyMzc2ODg2P2llPVVURjgmdGFnPWFsZWlkbW9yZWxkb20tMjAmbGlua0NvZGU9YXMyJmNhbXA9 MTc4OSZjcmVhdGl2ZT05MzI1JmNyZWF0aXZlQVNJTj0wOTMyMzc2ODg2Ci0gIDI4LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwjY29udGVudHMKLSAgMjkuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC92YXhfMTEtNzUwLmpwZwotICAzMC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUvY3UvY29tcHV0aW5naGlzdG9yeS9oZXJtaXQuaHRtbAotICAzMS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2N1ZG9jcy9pbG9zZXR1cC5odG1sCi0gIDMyLiBm dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL2NrYzA0ZS50eHQKLSAgMzMuIGZ0cDov L2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2YvY2tjMDRmLnR4dAotICAzNC4gZnRwOi8va2Vy bWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9ja2MxNjgudHh0Ci0gIDM1LiBmdHA6Ly9rZXJtaXQu Y29sdW1iaWEuZWR1L2tlcm1pdC9mL2NrYzE3OC50eHQKLSAgMzYuIGZ0cDovL2tlcm1pdC5jb2x1 bWJpYS5lZHUva2VybWl0L2YvY2tjMTg4LnR4dAotICAzNy4gZnRwOi8va2VybWl0LmNvbHVtYmlh LmVkdS9rZXJtaXQvZi9ja2MxODkudHh0Ci0gIDM4LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1 L2tlcm1pdC9mL2NrYzE5Mi50eHQKLSAgMzkuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2Vy bWl0L2YvY2tjMTk3LnR4dAotICA0MC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQv Zi9ja2MyMDAudHh0Ci0gIDQxLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL2Nr YzIxMS50eHQKLSAgNDIuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2YvY2tjMzAw LnR4dAotICA0My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI2Nv bnRlbnRzCi0gIDQ0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1s Ci0gIDQ1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotICA0Ni4g ZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjcHJvLncKLSAgNDcu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCNjb250ZW50cwotICA0 OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotICA0OS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSAgNTAuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCN4My4yCi0gIDUxLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwjY29udGVudHMKLSAgNTIuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAgNTMuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gIDU0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjcGxtLmh0bWwjeDQuQQotICA1NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrY3BsbS5odG1sI2NvbnRlbnRzCi0gIDU2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdC5odG1sCi0gIDU3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv aW5kZXguaHRtbAotICA1OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5o dG1sI2NvbnRlbnRzCi0gIDU5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dC5odG1sCi0gIDYwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAot ICA2MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI2NvbnRlbnRz Ci0gIDYyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gIDYz LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotICA2NC4gZnRwOi8v a2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjbGliLmgKLSAgNjUuIGZ0cDov L2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY2xpYi5jCi0gIDY2LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwjeDMuMQotICA2Ny4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI2NvbnRlbnRzCi0gIDY4LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gIDY5LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotICA3MC4gZnRwOi8va2VybWl0LmNvbHVt YmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjc3ltLmgKLSAgNzEuIGZ0cDovL2tlcm1pdC5jb2x1 bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY2FzYy5oCi0gIDcyLiBmdHA6Ly9rZXJtaXQuY29s dW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2NzaWcuaAotICA3My4gZnRwOi8va2VybWl0LmNv bHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjZGViLmgKLSAgNzQuIGZ0cDovL2tlcm1pdC5j b2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY2tlci5oCi0gIDc1LiBmdHA6Ly9rZXJtaXQu Y29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2N4bGEuaAotICA3Ni4gZnRwOi8va2VybWl0 LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjbWFpLmMKLSAgNzcuIGZ0cDovL2tlcm1p dC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY3Byby53Ci0gIDc4LiBmdHA6Ly9rZXJt aXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2NmbnMuYwotICA3OS4gZnRwOi8va2Vy bWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjZm4yLmMKLSAgODAuIGZ0cDovL2tl cm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY2ZuMy5jCi0gIDgxLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwjeDQuQgotICA4Mi4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI3g0LkUKLSAgODMuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCN4NC5ECi0gIDg0LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwjY29udGVudHMKLSAgODUuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAgODYuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gIDg3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjcGxtLmh0bWwjeDQuQgotICA4OC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9r ZXJtaXQvYy1rZXJtaXQvY2t1eGxhLmMKLSAgODkuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUv a2VybWl0L2Mta2VybWl0L2NrdXhsYS5oCi0gIDkwLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1 L2tlcm1pdC9jLWtlcm1pdC9ja2N4bGEuaAotICA5MS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVk dS9rZXJtaXQvYy1rZXJtaXQvY2t1eGxhLmgKLSAgOTIuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5l ZHUva2VybWl0L2Mta2VybWl0L2NrbXhsYS5oCi0gIDkzLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEu ZWR1L2tlcm1pdC9jLWtlcm1pdC9jaz94bGEKLSAgOTQuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5l ZHUva2VybWl0L2Mta2VybWl0L2NrY3VuaS5oCi0gIDk1LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEu ZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2N1bmkuYwotICA5Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrY3BsbS5odG1sI2NvbnRlbnRzCi0gIDk3LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gIDk4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvaW5kZXguaHRtbAotICA5OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr Y3BsbS5odG1sI3g0LkIKLSAxMDAuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mt a2VybWl0L2NrdWNtZC5oCi0gMTAxLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9j LWtlcm1pdC9ja3VjbWQuYwotIDEwMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr Y3BsbS5odG1sI3g0LkUKLSAxMDMuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mt a2VybWl0L2NrdXVzci5oCi0gMTA0LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9j LWtlcm1pdC9ja3V1c3IuYwotIDEwNS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQv Yy1rZXJtaXQvY2t1dXMyLmMKLSAxMDYuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0 L2Mta2VybWl0L2NrdXVzMy5jCi0gMTA3LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1p dC9jLWtlcm1pdC9ja3V1czQuYwotIDEwOC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJt aXQvYy1rZXJtaXQvY2t1dXN5LmMKLSAxMDkuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2Vy bWl0L2Mta2VybWl0L2NrdXVzeC5jCi0gMTEwLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tl cm1pdC9jLWtlcm1pdC9ja3V2ZXIuaAotIDExMS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9r ZXJtaXQvYy1rZXJtaXQvY2t1c2NyLmMKLSAxMTIuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUv a2VybWl0L2Mta2VybWl0L2NrdWRpYS5jCi0gMTEzLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1 L2tlcm1pdC9jLWtlcm1pdC9ja3Vjb24uYwotIDExNC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVk dS9rZXJtaXQvYy1rZXJtaXQvY2t1Y25zLmMKLSAxMTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2NwbG0uaHRtbCN4NC5FCi0gMTE2LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1 L2tlcm1pdC9jLWtlcm1pdC9ja2NtYWkuYwotIDExNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrY3BsbS5odG1sI2NvbnRlbnRzCi0gMTE4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gMTE5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvaW5kZXguaHRtbAotIDEyMC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1r ZXJtaXQvY2t1ZmlvLmMKLSAxMjEuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mt a2VybWl0L2NrdXRpby5jCi0gMTIyLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9j LWtlcm1pdC9ja3VzaWcuYwotIDEyMy4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQv Yy1rZXJtaXQvY2t2ZmlvLmMKLSAxMjQuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0 L2Mta2VybWl0L2NrdXNpZy5jCi0gMTI1LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1p dC9jLWtlcm1pdC9ja2NtYWkuYwotIDEyNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrY3BsbS5odG1sI2NvbnRlbnRzCi0gMTI3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdC5odG1sCi0gMTI4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5k ZXguaHRtbAotIDEyOS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQv Y2t1dGlvLmMKLSAxMzAuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0 L2NrdnRpby5jCi0gMTMxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0 bWwjeDIKLSAxMzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCN4 YTEKLSAxMzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbAotIDEz NC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjbmV0LmgKLSAx MzUuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXRpby5jCi0g MTM2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwjY29udGVudHMK LSAxMzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAxMzgu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gMTM5LiBmdHA6Ly9r ZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V0aW8uYwotIDE0MC4gZnRwOi8v a2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjbmV0LmgKLSAxNDEuIGZ0cDov L2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY25ldC5jCi0gMTQyLiBmdHA6 Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2xuZXQuYwotIDE0My4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI2NvbnRlbnRzCi0gMTQ0LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gMTQ1LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDE0Ni4gZnRwOi8va2VybWl0LmNv bHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjdGVsLmgKLSAxNDcuIGZ0cDovL2tlcm1pdC5j b2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY3RlbC5jCi0gMTQ4LiBmdHA6Ly9rZXJtaXQu Y29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2NmdHAuYwotIDE0OS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI2NvbnRlbnRzCi0gMTUwLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gMTUxLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDE1Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrY3BsbS5odG1sI2NvbnRlbnRzCi0gMTUzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gMTU0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvaW5kZXguaHRtbAotIDE1NS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1r ZXJtaXQvY2t1dXN4LmMKLSAxNTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nw bG0uaHRtbCNjb250ZW50cwotIDE1Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQuaHRtbAotIDE1OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0 bWwKLSAxNTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0OTAuaHRtbCNM b29zZUVuZAotIDE2MC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9ja3VwdHku aAotIDE2MS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9ja3VwdHkuYwotIDE2 Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NlY3VyaXR5Lmh0bWwKLSAxNjMuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCNjb250ZW50cwotIDE2NC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDE2NS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSAxNjYuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCN0b3AKLSAxNjcuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCNjb250ZW50cwotIDE2OC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDE2OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2luZGV4Lmh0bWwKLSAxNzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9pbmRleC5odG1sCi0gMTcxLiBtYWlsdG86a2VybWl0QGNvbHVtYmlhLmVkdQoKZGlmZiAtLWdp dCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjcHJvLmMgYi9ja2Vy bWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3Byby5jCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAzYzUxYjZiLi4wMDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4wLjMwMi1i dWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjcHJvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzODE0ICsw LDAgQEAKLQotLyogV0FSTklORyAtLSBUaGlzIEMgc291cmNlIHByb2dyYW0gZ2VuZXJhdGVkIGJ5 IFdhcnQgcHJlcHJvY2Vzc29yLiAqLwotLyogRG8gbm90IGVkaXQgdGhpcyBmaWxlOyBlZGl0IHRo ZSBXYXJ0LWZvcm1hdCBzb3VyY2UgZmlsZSBpbnN0ZWFkLCAqLwotLyogYW5kIHRoZW4gcnVuIGl0 IHRocm91Z2ggV2FydCB0byBwcm9kdWNlIGEgbmV3IEMgc291cmNlIGZpbGUuICAgICAqLwotCi0v KiBXYXJ0IFZlcnNpb24gSW5mbzogKi8KLWNoYXIgKndhcnR2ID0gIldhcnQgVmVyc2lvbiAyLjE0 LCAxMCBOb3YgMTk5OSI7Ci0KLWNoYXIgKnByb3R2ID0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC0qLUMtKi0gKi8KLSJDLUtlcm1pdCBQcm90 b2NvbCBNb2R1bGUgOC4wLjE2MCwgMTIgQXVnIDIwMDciOwotCi1pbnQga2FjdGl2ZSA9IDA7CQkJ LyogS2VybWl0IHByb3RvY29sIGlzIGFjdGl2ZSAqLwotCi0jZGVmaW5lIFBLVFpFUk9IQUNLCi0K LS8qIEMgSyBDIFAgUiBPICAtLSBDLUtlcm1pdCBQcm90b2NvbCBNb2R1bGUsIGluIFdhcnQgcHJl cHJvY2Vzc29yIG5vdGF0aW9uLiAqLwotLyoKLSAgQXV0aG9yOiBGcmFuayBkYSBDcnV6IDxmZGNA Y29sdW1iaWEuZWR1PiwKLSAgQ29sdW1iaWEgVW5pdmVyc2l0eSBBY2FkZW1pYyBJbmZvcm1hdGlv biBTeXN0ZW1zLCBOZXcgWW9yayBDaXR5LgotCi0gIENvcHlyaWdodCAoQykgMTk4NSwgMjAwNywK LSAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZ b3JrLgotICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcu VFhUIGZpbGUgb3IgdGhlCi0gICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVs ZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCi0qLwotI2lmbmRlZiBOT1hGRVIKLSNp bmNsdWRlICJja2NzeW0uaCIKLSNpbmNsdWRlICJja2NkZWIuaCIKLSNpbmNsdWRlICJja2Nhc2Mu aCIKLSNpbmNsdWRlICJja2NrZXIuaCIKLSNpZmRlZiBPUzIKLSNpZm5kZWYgTlQKLSNkZWZpbmUg SU5DTF9OT1BNCi0jZGVmaW5lIElOQ0xfVklPCQkJLyogTmVlZGVkIGZvciBja29jb24uaCAqLwot I2luY2x1ZGUgPG9zMi5oPgotI3VuZGVmIENPTU1FTlQKLSNlbmRpZiAvKiBOVCAqLwotI2luY2x1 ZGUgImNrb2Nvbi5oIgotI2VuZGlmIC8qIE9TMiAqLwotCi0vKgotIE5vdGUgLS0gVGhpcyBmaWxl IG1heSBhbHNvIGJlIHByZXByb2Nlc3NlZCBieSB0aGUgVU5JWCBMZXggcHJvZ3JhbSwgYnV0Ci0g eW91IG11c3QgaW5kZW50IHRoZSBhYm92ZSAjaW5jbHVkZSBzdGF0ZW1lbnRzIGJlZm9yZSB1c2lu ZyBMZXgsIGFuZCB0aGVuCi0gcmVzdG9yZSB0aGVtIHRvIHRoZSBsZWZ0IG1hcmdpbiBpbiB0aGUg cmVzdWx0aW5nIEMgcHJvZ3JhbSBiZWZvcmUgY29tcGlsYXRpb24uCi0gQWxzbywgdGhlIGludm9j YXRpb24gb2YgdGhlICJ3YXJ0KCkiIGZ1bmN0aW9uIGJlbG93IG11c3QgYmUgcmVwbGFjZWQgYnkg YW4KLSBpbnZvY2F0aW9uICBvZiB0aGUgInl5bGV4KCkiIGZ1bmN0aW9uLiAgSXQgbWlnaHQgYWxz byBiZSBuZWNlc3NhcnkgdG8gcmVtb3ZlCi0gY29tbWVudHMgaW4gdGhlICglKSglKS4uLiglKSgl KSBzZWN0aW9uLgotKi8KLQotLyogU3RhdGUgZGVmaW5pdGlvbnMgZm9yIFdhcnQgKG9yIExleCkg Ki8KLSNkZWZpbmUgaXBrdCAxCi0jZGVmaW5lIHJmaWxlIDIKLSNkZWZpbmUgcmF0dHIgMwotI2Rl ZmluZSByZHBrdCA0Ci0jZGVmaW5lIHNzaW5pdCA1Ci0jZGVmaW5lIHNzZmlsZSA2Ci0jZGVmaW5l IHNzYXR0ciA3Ci0jZGVmaW5lIHNzZGF0YSA4Ci0jZGVmaW5lIHNzZW9mIDkKLSNkZWZpbmUgc3Nl b3QgMTAKLSNkZWZpbmUgc2VydmUgMTEKLSNkZWZpbmUgZ2VuZXJpYyAxMgotI2RlZmluZSBnZXQg MTMKLSNkZWZpbmUgcmdlbiAxNAotI2RlZmluZSBzc29wa3QgMTUKLSNkZWZpbmUgcm9wa3QgMTYK LQotX1BST1RPVFlQKHN0YXRpYyBWT0lEIHh4cHJvdG8sKHZvaWQpKTsKLV9QUk9UT1RZUChzdGF0 aWMgVk9JRCB3aGVyZW1zZywodm9pZCkpOwotX1BST1RPVFlQKGludCB3YXJ0LCh2b2lkKSk7Ci1f UFJPVE9UWVAoc3RhdGljIGludCBzZ2V0aW5pdCwoaW50LGludCkpOwotX1BST1RPVFlQKGludCBz bmRzcGFjZSwoaW50KSk7Ci0KLS8qIEV4dGVybmFsIEMtS2VybWl0IHZhcmlhYmxlIGRlY2xhcmF0 aW9ucyAqLwotICBleHRlcm4gY2hhciAqdmVyc2lvLCAqc3J2dHh0LCAqY21hcmcsICpjbWFyZzIs ICoqY21saXN0LCAqcmZfZXJyOwotICBleHRlcm4gY2hhciAqIHJmc3BlYywgKiBzZnNwZWMsICog c3Jmc3BlYywgKiBycmZzcGVjOwotICBleHRlcm4gY2hhciAqIHByZnNwZWMsICogcHNmc3BlYywg KiBwc3Jmc3BlYywgKiBwcnJmc3BlYzsKLSAgZXh0ZXJuIGNoYXIgKmNkbXNnZmlsZVtdOwotICBl eHRlcm4gY2hhciAqIHNuZF9tb3ZlLCAqIHNuZF9yZW5hbWUsICogc3JpbXNnOwotICBleHRlcm4g Y2hhciBmaWxuYW1bXSwgb2ZpbG5hbVtdLCBmc3BlY1tdLCB0dG5hbWVbXSwgb2ZuMVtdOwotICBl eHRlcm4gQ0hBUiBzc3RhdGUsICpzcnZwdHIsICpkYXRhOwotICBleHRlcm4gaW50IHRpbWludCwg cnRpbW8sIG5maWxzLCBoY2ZsZywgeGZsZywgZmxvdywgbWRtdHlwLCBuZXR3b3JrOwotICBleHRl cm4gaW50IG9vcHRzLCBvbW9kZSwgb25hbWUsIG9wYXRoLCBub3B1c2gsIGlzZ3Vlc3QsIHhjbWRz cmMsIHJjZGFjdGl2ZTsKLSAgZXh0ZXJuIGludCByZWplY3Rpb24sIG1vdmluZywgZm5jYWN0LCBi eWVfYWN0aXZlLCB1cnNlcnZlciwgZmF0YWxpbzsKLSAgZXh0ZXJuIGludCBwcm90b2NvbCwgcHJl Zml4aW5nLCBmaWxjbnQsIGNhcnJpZXIsIGZuc3BhdGgsIGludGVycnVwdGVkOwotICBleHRlcm4g aW50IHJlY3Vyc2l2ZSwgaW5zZXJ2ZXIsIG56eG9wdHMsIGlkbGV0bW8sIHNydmlkbCwgeGZyaW50 OwotICBleHRlcm4gc3RydWN0IGNrX3AgcHRhYltdOwotICBleHRlcm4gaW50IHJlbWZpbGUsIHJl bXBpcGUsIHhmZXJzdGF0LCBmaWxlc3RhdHVzLCB3ZWFyZWFsaWtlLCBmYWNrcGF0aDsKLSAgZXh0 ZXJuIGludCBwYXR0ZXJucywgZmlsZXBlZWssIGduZmVycm9yOwotICBleHRlcm4gY2hhciAqIHJl bWRlc3Q7Ci0KLSNpZmRlZiBQS1RaRVJPSEFDSwotI2RlZmluZSBQS1RaRVJPTEVOIDMyCi1zdGF0 aWMgY2hhciBpcGt0YWNrW1BLVFpFUk9MRU5dOwotc3RhdGljIGludCBpcGt0bGVuID0gMDsKLSNl bmRpZiAvKiBQS1RaRVJPSEFDSyAqLwotCi1zdGF0aWMgaW50IHNfdGltaW50ID0gLTE7CQkvKiBG b3Igc2F2aW5nIHRpbWVvdXQgdmFsdWUgKi8KLXN0YXRpYyBpbnQgbXlqb2IgPSAwOwotc3RhdGlj IGludCBoYXZlZnMgPSAwOwotI2lmZGVmIENLX0xPR0lOCi1zdGF0aWMgaW50IGxvZ3RyaWVzID0g MDsKLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotCi1zdGF0aWMgaW50IGNhbmNlbCA9IDA7Ci1pbnQg ZmFja2J1ZyA9IDA7Ci0KLSNpZmRlZiBTVFJFQU1JTkcKLWV4dGVybiBpbnQgc3RyZWFtaW5nLCBz dHJlYW1vazsKLQotc3RhdGljIFZPSUQKLXN0cmVhbW9uKCkgewotICAgIGlmIChzdHJlYW1vaykg ewotCWRlYnVnKEYxMDAsInN0cmVhbW9uIiwiIiwwKTsKLQlzdHJlYW1pbmcgPSAxOwotCXRpbWlu dCA9IDA7CQkJLyogTm8gdGltZW91dHMgd2hpbGUgc3RyZWFtaW5nLiAqLwotICAgIH0KLX0KLQot I2lmZGVmIENPTU1FTlQJCQkJLyogKG5vdCB1c2VkKSAqLwotc3RhdGljIFZPSUQKLXN0cmVhbW9m ZigpIHsKLSAgICBpZiAoc3RyZWFtaW5nKSB7Ci0JZGVidWcoRjEwMCwic3RyZWFtb2ZmIiwiIiww KTsKLQlzdHJlYW1pbmcgPSAwOwotCXRpbWludCA9IHNfdGltaW50OwkJLyogUmVzdG9yZSB0aW1l b3V0ICovCi0gICAgfQotfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNlbHNlIC8qIFNUUkVBTUlO RyAqLwotI2RlZmluZSBzdHJlYW1vbigpCi0jZGVmaW5lIHN0cmVhbW9mZigpCi0jZW5kaWYgLyog U1RSRUFNSU5HICovCi0KLSNpZm5kZWYgTk9TUEwKLV9QUk9UT1RZUCggaW50IGFkZG1hYywgKGNo YXIgKiwgY2hhciAqKSApOwotX1BST1RPVFlQKCBpbnQgenpzdHJpbmcsIChjaGFyICosIGNoYXIg KiosIGludCAqKSApOwotI2VuZGlmIC8qIE5PU1BMICovCi0jaWZuZGVmIE5PSUNQCi1fUFJPVE9U WVAoIGludCBjbWRzcmMsICh2b2lkKSApOwotI2VuZGlmIC8qIE5PSUNQICovCi0KLSNpZm5kZWYg Tk9TRVJWRVIKLSAgZXh0ZXJuIGNoYXIgKiB4X3VzZXIsICogeF9wYXNzd2QsICogeF9hY2N0Owot ICBleHRlcm4gaW50IHhfbG9naW4sIHhfbG9nZ2VkOwotI2VuZGlmIC8qIE5PU0VSVkVSICovCi0K LSNpbmNsdWRlICJja2NuZXQuaCIKLQotI2lmZGVmIFROQ09ERQotICBleHRlcm4gaW50IHR0bnBy b3RvOwkJCS8qIE5ldHdvcmsgcHJvdG9jb2wgKi8KLSNlbmRpZiAvKiBUTkNPREUgKi8KLQotI2lm ZGVmIENLX1NQRUVECi0gIGV4dGVybiBzaG9ydCBjdGxwW107CQkJLyogQ29udHJvbC1jaGFyYWN0 ZXIgcHJlZml4IHRhYmxlICovCi0jZW5kaWYgLyogQ0tfU1BFRUQgKi8KLQotI2lmZGVmIFROQ09E RQotICBleHRlcm4gaW50IHRuX2JfbmxtLCB0bl9iX3hmZXIsIHRuX25sbTsKLSNpZmRlZiBDS19F TkNSWVBUSU9OCi0gIGV4dGVybiBpbnQgdG5fbm9fZW5jcnlwdF94ZmVyOwotI2VuZGlmIC8qIENL X0VOQ1JZUFRJT04gKi8KLSNlbmRpZiAvKiBUTkNPREUgKi8KLQotI2lmZGVmIFRDUFNPQ0tFVAot I2lmbmRlZiBOT0xJU1RFTgotICBleHRlcm4gaW50IHRjcHNyZmQ7Ci0jZW5kaWYgLyogTk9MSVNU RU4gKi8KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLQotICBleHRlcm4gaW50IGN4c2VlbiwgY3pz ZWVuLCBzZXJ2ZXIsIHNydmRpcywgbG9jYWwsIGRpc3BsYSwgYmN0dSwgYmN0ciwgYmN0bDsKLSAg ZXh0ZXJuIGludCBxdWlldCwgdHNlY3MsIHBhcml0eSwgYmFja2dyZCwgbmFrc3RhdGUsIGF0Y2Fw dSwgd3Nsb3RuLCB3aW5sbzsKLSAgZXh0ZXJuIGludCB3c2xvdHMsIHN1Y2Nlc3MsIHhpdHN0YSwg cnByaW50ZiwgZGlzY2FyZCwgY2R0aW1vLCBrZWVwLCBmZGlzcGxhOwotICBleHRlcm4gaW50IHRp bWVmLCBzdGRpbmYsIHJzY2FwdSwgc2VuZG1vZGUsIGVwa3RmbGcsIGVwa3RyY3ZkLCBlcGt0c2Vu dDsKLSAgZXh0ZXJuIGludCBiaW5hcnksIGZuY252OwotICBleHRlcm4gbG9uZyBzcGVlZCwgZmZj LCBjcmMxNiwgY2FsaWJyYXRlLCBkZXN0OwotI2lmZGVmIENPTU1FTlQKLSAgZXh0ZXJuIGNoYXIg KlRZUENNRCwgKkRJUkNNRCwgKkRJUkNNMjsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0jaWZuZGVm IE9TMgotICBleHRlcm4gY2hhciAqU1BBQ01ELCAqU1BBQ00yLCAqV0hPQ01EOwotI2VuZGlmIC8q IE9TMiAqLwotICBleHRlcm4gQ0hBUiAqcmRhdGFwOwotICBleHRlcm4gc3RydWN0IHphdHRyIGlh dHRyOwotCi0jaWZkZWYgVk1TCi0gIGV4dGVybiBpbnQgYmF0Y2g7Ci0jZW5kaWYgLyogVk1TICov Ci0KLSNpZmRlZiBHRlRJTUVSCi0gIGV4dGVybiBDS0ZMT0FUIGZwdHNlY3M7Ci0jZW5kaWYgLyog R0ZUSU1FUiAqLwotCi0gIGV4dGVybiBDSEFSICpzcnZjbWQ7Ci0gIGV4dGVybiBDSEFSICplcGt0 bXNnOwotCi0jaWZkZWYgQ0tfVE1QRElSCi1leHRlcm4gaW50IGZfdG1wZGlyOwkJCS8qIERpcmVj dG9yeSBjaGFuZ2VkIHRlbXBvcmFyaWx5ICovCi1leHRlcm4gY2hhciBzYXZkaXJbXTsJCQkvKiBG b3Igc2F2aW5nIGN1cnJlbnQgZGlyZWN0b3J5ICovCi1leHRlcm4gY2hhciAqIGRsZGlyOwotI2Vu ZGlmIC8qIENLX1RNUERJUiAqLwotCi0gIGV4dGVybiBpbnQgcXVlcnk7CQkJLyogUXVlcnktYWN0 aXZlIGZsYWcgKi8KLSNpZm5kZWYgTk9TUEwKLSAgZXh0ZXJuIGludCBjbWRsdmw7Ci0gIGNoYXIg cXVlcnlidWZbUUJVRkwrMV0gPSB7IE5VTCwgTlVMIH07IC8qIFFVRVJZIHJlc3BvbnNlIGJ1ZmZl ciAqLwotICBjaGFyICpxYnVmcCA9IHF1ZXJ5YnVmOwkJLyogUG9pbnRlciB0byBpdCAqLwotICBp bnQgcWJ1Zm4gPSAwOwkJCS8qIExlbmd0aCBvZiBkYXRhIGluIGl0ICovCi0jZWxzZQotICBleHRl cm4gaW50IHRsZXZlbDsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVmIE5PSUNQCi0gIGV4 dGVybiBpbnQgZXNjYXBlOwotI2VuZGlmIC8qIE5PSUNQICovCi0vKgotICBJZiB0aGUgZm9sbG93 aW5nIGZsYWcgaXMgbm9uemVybyB3aGVuIHRoZSBwcm90b2NvbCBtb2R1bGUgaXMgZW50ZXJlZCwK LSAgdGhlbiBzZXJ2ZXIgbW9kZSBwZXJzaXN0cyBmb3IgZXhhY3RseSBvbmUgdHJhbnNhY3Rpb24s IHJhdGhlciB0aGFuCi0gIGxvb3BpbmcgdW50aWwgQllFIG9yIEZJTklTSCBpcyByZWNlaXZlZC4K LSovCi1leHRlcm4gaW50IGp1c3RvbmU7Ci0KLXN0YXRpYyBpbnQgcl9zYXZlID0gLTE7Ci1zdGF0 aWMgaW50IHBfc2F2ZSA9IC0xOwotCi0vKiBGdW5jdGlvbiB0byBsZXQgcmVtb3RlLW1vZGUgdXNl ciBrbm93IHdoZXJlIHRoZWlyIGZpbGUocykgd2VudCAqLwotCi1pbnQgd2hlcmVmbGcgPSAxOwkJ CS8qIFVuc2V0IHdpdGggU0VUIFhGRVIgUkVQT1JUICovCi0KLXN0YXRpYyBWT0lECi13aGVyZW1z ZygpIHsKLSAgICBleHRlcm4gaW50IHF1aWV0LCBmaWxyZWo7Ci0gICAgaW50IG47Ci0gICAgbiA9 IGZpbGNudCAtIGZpbHJlajsKLSAgICBkZWJ1ZyhGMTAxLCJ3aGVyZW1zZyBuIiwiIixuKTsKLQot ICAgIGRlYnVnKEYxMTAsIndoZXJlbXNnIHByZnNwZWMiLHByZnNwZWMsMCk7Ci0gICAgZGVidWco RjExMCwid2hlcmVtc2cgcmZzcGVjIixyZnNwZWMsMCk7Ci0gICAgZGVidWcoRjExMCwid2hlcmVt c2cgcHNmc3BlYyIscHNmc3BlYywwKTsKLSAgICBkZWJ1ZyhGMTEwLCJ3aGVyZW1zZyBzZnNwZWMi LHNmc3BlYywwKTsKLQotICAgIGRlYnVnKEYxMTAsIndoZXJlbXNnIHBycmZzcGVjIixwcnJmc3Bl YywwKTsKLSAgICBkZWJ1ZyhGMTEwLCJ3aGVyZW1zZyBycmZzcGVjIixycmZzcGVjLDApOwotICAg IGRlYnVnKEYxMTAsIndoZXJlbXNnIHBzcmZzcGVjIixwc3Jmc3BlYywwKTsKLSAgICBkZWJ1ZyhG MTEwLCJ3aGVyZW1zZyBzcmZzcGVjIixzcmZzcGVjLDApOwotCi0gICAgaWYgKCFxdWlldCAmJiAh bG9jYWwpIHsKLQlpZiAobiA9PSAxKSB7Ci0JICAgIHN3aXRjaCAobXlqb2IpIHsKLQkgICAgICBj YXNlICdzJzoKLQkJaWYgKHNmc3BlYykgewotCQkgICAgcHJpbnRmKCIgU0VOVDogWyVzXSIsc2Zz cGVjKTsKLQkJICAgIGlmIChzcmZzcGVjKQotCQkgICAgICBwcmludGYoIiBUbzogWyVzXSIsc3Jm c3BlYyk7Ci0JCSAgICBwcmludGYoIiAoJXMpXHJcbiIsIHN1Y2Nlc3MgPyAiT0siIDogIkZBSUxF RCIpOwotCQl9Ci0JCWJyZWFrOwotCSAgICAgIGNhc2UgJ3InOgotCSAgICAgIGNhc2UgJ3YnOgot CQlpZiAocnJmc3BlYykgewotCQkgICAgcHJpbnRmKCIgUkNWRDogWyVzXSIscnJmc3BlYyk7Ci0J CSAgICBpZiAocmZzcGVjKQotCQkgICAgICBwcmludGYoIiBUbzogWyVzXSIscmZzcGVjKTsKLQkJ ICAgIHByaW50ZigiICglcylcclxuIiwgc3VjY2VzcyA/ICJPSyIgOiAiRkFJTEVEIik7Ci0JCX0K LQkgICAgfQotCX0gZWxzZSBpZiAobiA+IDEpIHsKLQkgICAgc3dpdGNoIChteWpvYikgewotCSAg ICAgIGNhc2UgJ3MnOgotCQlpZiAoc2ZzcGVjKSB7Ci0JCSAgICBwcmludGYoIiBTRU5UOiAoJWQg ZmlsZXMpIixuKTsKLQkJICAgIGlmIChzcmZzcGVjKQotCQkgICAgICBwcmludGYoIiBMYXN0OiBb JXNdIixzcmZzcGVjKTsKLQkJICAgIHByaW50ZigiICglcylcclxuIiwgc3VjY2VzcyA/ICJPSyIg OiAiRkFJTEVEIik7Ci0JCX0KLQkJYnJlYWs7Ci0JICAgICAgY2FzZSAncic6Ci0JICAgICAgY2Fz ZSAndic6Ci0JCWlmIChycmZzcGVjKSB7Ci0JCSAgICBwcmludGYoIiBSQ1ZEOiAoJWQgZmlsZXMp IixuKTsKLQkJICAgIGlmIChyZnNwZWMpCi0JCSAgICAgIHByaW50ZigiIExhc3Q6IFslc10iLHJm c3BlYyk7Ci0JCSAgICBwcmludGYoIiAoJXMpXHJcbiIsIHN1Y2Nlc3MgPyAiT0siIDogIkZBSUxF RCIpOwotCQl9Ci0JICAgIH0KLQl9IGVsc2UgaWYgKG4gPT0gMCkgewotCSAgICBpZiAobXlqb2Ig PT0gJ3MnKQotCSAgICAgIHByaW50ZigiIFNFTlQ6ICgwIGZpbGVzKSAgICAgICAgICBcclxuIik7 Ci0JICAgIGVsc2UgaWYgKG15am9iID09ICdyJyB8fCBteWpvYiA9PSAndicpCi0JICAgICAgcHJp bnRmKCIgUkNWRDogKDAgZmlsZXMpICAgICAgICAgIFxyXG4iKTsKLQl9Ci0gICAgfQotfQotCi1z dGF0aWMgVk9JRAotcmRlYnVnKCkgewotICAgIGlmIChzZXJ2ZXIpCi0gICAgICBkZWJ1ZyhGMTEx LCJSRVNVTUUiLCJzZXJ2ZXI9MSIsanVzdG9uZSk7Ci0gICAgZWxzZQotICAgICAgZGVidWcoRjEx MSwiUkVTVU1FIiwic2VydmVyPTAiLGp1c3RvbmUpOwotfQotCi0vKiBGbGFncyBmb3IgdGhlIEVO QUJMRSBhbmQgRElTQUJMRSBjb21tYW5kcyAqLwotZXh0ZXJuIGludAotICBlbl9jcHksIGVuX2N3 ZCwgZW5fZGVsLCBlbl9kaXIsIGVuX2ZpbiwgZW5fZ2V0LCBlbl9ieWUsIGVuX21haSwgZW5fcHJp LAotICBlbl9ob3MsIGVuX3JlbiwgZW5fc2VuLCBlbl9zcGEsIGVuX3NldCwgZW5fdHlwLCBlbl93 aG8sIGVuX3JldCwgZW5feGl0LAotICBlbl9ta2QsIGVuX3JtZDsKLSNpZm5kZWYgTk9TUEwKLWV4 dGVybiBpbnQgZW5fYXNnLCBlbl9xdWU7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLWV4dGVybiBpbnQg d2hhdCwgbGFzdHhmZXI7Ci0KLS8qIEdsb2JhbCB2YXJpYWJsZXMgZGVjbGFyZWQgaGVyZSAqLwot Ci0gIGludCB3aGF0cnUgPSAwOwkJCS8qIFdoYXQgYXJlIHlvdS4gKi8KLSAgaW50IHdoYXRydTIg PSAwOwkJCS8qIFdoYXQgYXJlIHlvdSwgY29udCdkLiAqLwotCi0vKiBMb2NhbCB2YXJpYWJsZXMg Ki8KLQotICBzdGF0aWMgY2hhciB2c3RhdGUgPSAwOyAgCQkvKiBTYXZlZCBTdGF0ZSAgICovCi0g IHN0YXRpYyBjaGFyIHZjbWQgPSAwOyAgICAJCS8qIFNhdmVkIENvbW1hbmQgKi8KLSAgc3RhdGlj IGludCByZWdldCA9IDA7CQkJLyogRmxhZyBmb3IgZXhlY3V0aW5nIFJFR0VUICovCi0gIHN0YXRp YyBpbnQgcmV0cmlldmUgPSAwOwkJLyogRmxhZyBmb3IgZXhlY3V0aW5nIFJFVFJJRVZFICovCi0g IHN0YXRpYyBpbnQgb3BrdCA9IDA7CQkJLyogU2VuZCBFeHRlbmRlZCBHRVQgcGFja2V0ICovCi0K LSAgc3RhdGljIGludCB4OwkJCQkvKiBHZW5lcmFsLXB1cnBvc2UgaW50ZWdlciAqLwotICBzdGF0 aWMgY2hhciAqczsJCQkvKiBHZW5lcmFsLXB1cnBvc2Ugc3RyaW5nIHBvaW50ZXIgKi8KLQotLyog TWFjcm9zIC0gTm90ZSwgQkVHSU4gaXMgcHJlZGVmaW5lZCBieSBXYXJ0IChhbmQgTGV4KSBhcyAi c3RhdGUgPSAiLCAqLwotLyogQkVHSU4gaXMgTk9UIGEgR09UTyEgKi8KLSNkZWZpbmUgVElOSVQg aWYgKHRpbml0KDEpIDwgMCkgcmV0dXJuKC05KQotI2RlZmluZSBTRVJWRSB7IFRJTklUOyByZXNl dGMoKTsgbmFrc3RhdGU9MTsgd2hhdD1XX05PVEhJTkc7IGNtYXJnMj0iIjsgXAotc2VuZG1vZGU9 U01fU0VORDsgaGF2ZWZzPTA7IHJlY3Vyc2l2ZT1yX3NhdmU7IGZuc3BhdGg9cF9zYXZlOyBCRUdJ TiBzZXJ2ZTsgfQotI2RlZmluZSBSRVNVTUUgeyByZGVidWcoKTsgaWYgKCFzZXJ2ZXIpIHsgd2hl cmVtc2coKTsgcmV0dXJuKDApOyB9IGVsc2UgXAotaWYgKGp1c3RvbmUpIHsganVzdG9uZT0wOyB3 aGVyZW1zZygpOyByZXR1cm4oMCk7IH0gZWxzZSB7IFNFUlZFOyB9IH0KLQotI2lmZGVmIEdGVElN RVIKLSNkZWZpbmUgUVVJVCB4PXF1aWV0OyBxdWlldD0xOyBjbHNpZigpOyBjbHNvZigxKTsgdHNl Y3M9Z3RpbWVyKCk7IFwKLSBmcHRzZWNzPWdmdGltZXIoKTsgcXVpZXQ9eDsgcmV0dXJuKHN1Y2Nl c3MpCi0jZWxzZQotI2RlZmluZSBRVUlUIHg9cXVpZXQ7IHF1aWV0PTE7IGNsc2lmKCk7IGNsc29m KDEpOyB0c2Vjcz1ndGltZXIoKTsgcXVpZXQ9eDsgXAotIHJldHVybihzdWNjZXNzKQotI2VuZGlm IC8qIEdGVElNRVIgKi8KLQotLyoKLSAgQnkgbGF0ZSAxOTk5LCB0aGUgYmlnIHN3aXRjaCgpIHN0 YXRlbWVudCBnZW5lcmF0ZWQgZnJvbSB0aGUgZm9sbG93aW5nIHN0YXRlCi0gIHRhYmxlIGJlZ2Fu IGNob2tpbmcgZXZlbiBnY2MsIHNvIGhlcmUgd2UgZXh0cmFjdCB0aGUgY29kZSBmcm9tIHRoZSBs YXJnZXIKLSAgc3RhdGVzIGludG8gc3RhdGljIHJvdXRpbmVzIHRvIHJlZHVjZSB0aGUgc2l6ZSBv ZiB0aGUgY2FzZXMgYW5kIHRoZQotICBzd2l0Y2goKSBvdmVyYWxsLiAgVGhlIHJvdXRpbmVzIGZv bGxvdyB0aGUgc3RhdGUgdGFibGU7IHRoZSBwcm90b3R5cGVzIGFyZQotICBoZXJlLiAgRWFjaCBv ZiB0aGVzZSByb3V0aW5lcyBzaW1wbHkgY29udGFpbnMgdGhlIHRleHQgZnJvbSB0aGUKLSAgY29y cmVzcG9uZGluZyBjYXNlLCBidXQgd2l0aCByZXR1cm4oLTEpIGFkZGVkIGluIGFwcHJvcHJpYXRl IHBsYWNlczsgc2VlCi0gIGluc3RydWN0aW9ucyBhZnRlciB0aGUgc3RhdGUgdGFibGUgc3dpdGNo ZXIuCi0qLwotc3RhdGljIGludCByYzsJCQkJLyogUmV0dXJuIGNvZGUgZm9yIHRoZXNlIHJvdXRp bmVzICovCi1zdGF0aWMgaW50IHJjdl9zX3BrdCgpOwkJCS8qIFJlY2VpdmVkIGFuIFMgcGFja2V0 ICovCi1zdGF0aWMgaW50IHJjdl9maXJzdGRhdGEoKTsJCS8qIFJlY2VpdmVkIGZpcnN0IERhdGEg cGFja2V0ICovCi1zdGF0aWMgaW50IHJjdl9zaG9ydHJlcGx5KCk7CQkvKiBTaG9ydCByZXBseSB0 byBhIFJFTU9URSBjb21tYW5kICAqLwotc3RhdGljIGludCBzcnZfcXVlcnkoKTsJCQkvKiBTZXJ2 ZXIgYW5zd2VycyBhbiBxdWVyeSAqLwotc3RhdGljIGludCBzcnZfY29weSgpOwkJCS8qIFNlcnZl ciBleGVjdXRlcyBSRU1PVEUgQ09QWSAqLwotc3RhdGljIGludCBzcnZfcmVuYW1lKCk7CQkvKiBT ZXJ2ZXIgZXhlY3V0ZXMgUkVNT1RFIFJFTkFNRSAqLwotc3RhdGljIGludCBzcnZfbG9naW4oKTsJ CQkvKiBTZXJ2ZXIgZXhlY3V0ZXMgUkVNT1RFIExPR0lOICovCi1zdGF0aWMgaW50IHNydl90aW1l b3V0KCk7CQkvKiBTZXJ2ZXIgdGltZXMgb3V0ICovCi0KLQotI2RlZmluZSBCRUdJTiBzdGF0ZSA9 Ci0KLWludCBzdGF0ZSA9IDA7Ci0KLWludAotd2FydCgpCi17Ci0gICAgaW50IGMsYWN0bm87Ci0g ICAgZXh0ZXJuIGNoYXIgdGJsW107Ci0gICAgd2hpbGUgKDEpIHsKLQljID0gaW5wdXQoKSAtIDMy OwotCWRlYnVnKEYwMDAsIlBST1RPIGlucHV0Iixja2l0b2Eoc3RhdGUpLGMrMzIpOwotCWlmIChj IDwgMCB8fCBjID4gOTUpIGMgPSAwOwotCWlmICgoYWN0bm8gPSB0YmxbYyArIHN0YXRlKjk2XSkg IT0gLTEpCi0JICAgIHN3aXRjaChhY3RubykgewotY2FzZSAxOgotICAgIHsgVElOSVQ7CQkJCS8q IFNlbmQgZmlsZShzKSAqLwotICAgIGlmIChzaW5pdCgpID4gMCkgQkVHSU4gc3Npbml0OwotICAg ICAgIGVsc2UgUkVTVU1FOyB9Ci0gICAgYnJlYWs7Ci1jYXNlIDI6Ci0gICAgeyBUSU5JVDsgbmFr c3RhdGUgPSAxOyBCRUdJTiBnZXQ7IH0KLSAgICBicmVhazsKLWNhc2UgMzoKLSAgICB7CQkJCQkv KiBDbGllbnQgc2VuZHMgYSBHRVQgY29tbWFuZCAqLwotICAgIFRJTklUOwotICAgIHZzdGF0ZSA9 IGdldDsKLSAgICByZWdldCA9IDA7Ci0gICAgcmV0cmlldmUgPSAwOwotICAgIG9wa3QgPSAwOwot ICAgIHZjbWQgPSAwOwotI2lmZGVmIFBLVFpFUk9IQUNLCi0gICAgaXBrdGFja1swXSA9IE5VTDsK LSNlbmRpZiAvKiBQS1RaRVJPSEFDSyAqLwotICAgIGlmIChzaXBrdCgnSScpID49IDApCi0gICAg ICBCRUdJTiBpcGt0OwotICAgIGVsc2UKLSAgICAgIFJFU1VNRTsKLX0KLSAgICBicmVhazsKLWNh c2UgNDoKLSAgICB7CQkJCQkvKiBDbGllbnQgc2VuZHMgYSBSRVRSSUVWRSBjb21tYW5kICovCi0g ICAgVElOSVQ7Ci0gICAgdnN0YXRlID0gZ2V0OwotICAgIHJlZ2V0ID0gMDsKLSAgICByZXRyaWV2 ZSA9IDE7Ci0gICAgb3BrdCA9IDA7Ci0gICAgdmNtZCA9IDA7Ci0gICAgaWYgKHNpcGt0KCdJJykg Pj0gMCkKLSAgICAgIEJFR0lOIGlwa3Q7Ci0gICAgZWxzZQotICAgICAgUkVTVU1FOwotfQotICAg IGJyZWFrOwotY2FzZSA1OgotICAgIHsJCQkJCS8qIENsaWVudCBzZW5kcyBhIFJFR0VUIGNvbW1h bmQgKi8KLSAgICBUSU5JVDsKLSAgICB2c3RhdGUgPSBnZXQ7Ci0gICAgcmVnZXQgPSAxOwotICAg IHJldHJpZXZlID0gMDsKLSAgICBvcGt0ID0gMDsKLSAgICB2Y21kID0gMDsKLSAgICBpZiAoc2lw a3QoJ0knKSA+PSAwKQotICAgICAgQkVHSU4gaXBrdDsKLSAgICBlbHNlCi0gICAgICBSRVNVTUU7 Ci19Ci0gICAgYnJlYWs7Ci1jYXNlIDY6Ci0gICAgewkJCQkJLyogQ2xpZW50IHNlbmRzIEV4dGVu ZGVkIEdFVCBQYWNrZXQgKi8KLSAgICBUSU5JVDsKLSAgICB2c3RhdGUgPSBnZXQ7Ci0gICAgcmVn ZXQgPSBvb3B0cyAmIEdPUFRfUkVTOwotICAgIHJldHJpZXZlID0gb29wdHMgJiBHT1BUX0RFTDsK LSAgICBvcGt0ID0gMTsKLSAgICB2Y21kID0gMDsKLSAgICBpZiAoc2lwa3QoJ0knKSA+PSAwKQot ICAgICAgQkVHSU4gaXBrdDsKLSAgICBlbHNlCi0gICAgICBSRVNVTUU7Ci19Ci0gICAgYnJlYWs7 Ci1jYXNlIDc6Ci0gICAgewkJCQkJLyogQ2xpZW50IHNlbmRzIGEgSG9zdCBjb21tYW5kICovCi0g ICAgVElOSVQ7Ci0gICAgdnN0YXRlID0gcmdlbjsKLSAgICB2Y21kID0gJ0MnOwotICAgIGlmIChz aXBrdCgnSScpID49IDApCi0gICAgICBCRUdJTiBpcGt0OwotICAgIGVsc2UKLSAgICAgIFJFU1VN RTsKLX0KLSAgICBicmVhazsKLWNhc2UgODoKLSAgICB7IFRJTklUOwkJCQkvKiBDbGllbnQgc2Vu ZHMgYSBLZXJtaXQgY29tbWFuZCAqLwotICAgIHZzdGF0ZSA9IHJnZW47Ci0gICAgdmNtZCA9ICdL JzsKLSAgICBpZiAoc2lwa3QoJ0knKSA+PSAwKQotICAgICAgQkVHSU4gaXBrdDsKLSAgICBlbHNl Ci0gICAgICBSRVNVTUU7Ci19Ci0gICAgYnJlYWs7Ci1jYXNlIDk6Ci0gICAgewkJCQkJLyogQ2xp ZW50IHNlbmRzIGEgUkVNT1RFIGNvbW1hbmQgKi8KLSAgICBUSU5JVDsKLSAgICB2c3RhdGUgPSBy Z2VuOwotICAgIHZjbWQgPSAnRyc7Ci0gICAgaWYgKHNpcGt0KCdJJykgPj0gMCkKLSAgICAgIEJF R0lOIGlwa3Q7Ci0gICAgZWxzZQotICAgICAgUkVTVU1FOwotfQotICAgIGJyZWFrOwotY2FzZSAx MDoKLSAgICB7CQkJCQkvKiBFbnRlciBzZXJ2ZXIgbW9kZSAqLwotICAgIGludCB4OwotICAgIHgg PSBqdXN0b25lOwotICAgIGlmICghRU5BQkxFRChlbl9kZWwpKSB7CQkvKiBJZiBERUxFVEUgaXMg ZGlzYWJsZWQgKi8KLQlpZiAoZm5jYWN0ID09IFhZRlhfQiB8fAkJLyogdW5kbyBhbnkgZmlsZSBj b2xsaXNpb24gYWN0aW9uICovCi0JICAgIGZuY2FjdCA9PSBYWUZYX1UgfHwJCS8qIHRoYXQgY291 bGQgcmVzdWx0IGluIGRlbGV0aW9uIG9yICovCi0JICAgIGZuY2FjdCA9PSBYWUZYX0EgfHwJCS8q IG1vZGlmaWNhdGlvbiBvZiBleGlzdGluZyBmaWxlcy4gKi8KLQkgICAgZm5jYWN0ID09IFhZRlhf WCkgewotI2lmbmRlZiBOT0lDUAotCSAgICBleHRlcm4gaW50IGdfZm5jYWN0OwotCSAgICBnX2Zu Y2FjdCA9IGZuY2FjdDsJCS8qIFNhdmUgY3VycmVudCBzZXR0aW5nICovCi0jZW5kaWYgLyogTk9J Q1AgKi8KLQkgICAgZm5jYWN0ID0gWFlGWF9SOwkJLyogQ2hhbmdlIHRvIFJFTkFNRSAqLwotCSAg ICBkZWJ1ZyhGMTAxLCJzZXJ2ZXIgREVMRVRFIGRpc2FibGVkIHNvIGZuY2FjdCBSRU5BTUUiLCIi LGZuY2FjdCk7Ci0JfQotICAgIH0KLSAgICBTRVJWRTsJCQkJLyogdGluaXQoKSBjbGVhcnMganVz dG9uZS4uLiAqLwotICAgIGp1c3RvbmUgPSB4OwotI2lmZGVmIElLU0RCCi0gICAgaWYgKGlrZGJv cGVuKSBzbG90c3RhdGUod2hhdCwgIlNFUlZFUiIsICIiLCAiIik7Ci0jZW5kaWYgLyogSUtTREIg Ki8KLX0KLSAgICBicmVhazsKLWNhc2UgMTE6Ci0gICAgewotICAgIGludCBiMSA9IDAsIGIyID0g MDsKLSAgICBpZiAoIWRhdGEpIFRJTklUOwkJCS8qICJBQkVORCIgLS0gVGVsbCBvdGhlciBzaWRl LiAqLwotI2lmbmRlZiBwZHAxMQotICAgIGlmIChlcGt0ZmxnKSB7CQkJLyogSWYgYmVjYXVzZSBv ZiBFLVBBQ0tFVCBjb21tYW5kICovCi0JYjEgPSBiY3RsOyBiMiA9IGJjdHU7CQkvKiBTYXZlIGJs b2NrIGNoZWNrIHR5cGUgKi8KLQliY3RsID0gYmN0dSA9IDE7CQkvKiBzZXQgaXQgdG8gMSAqLwot ICAgIH0KLSNlbmRpZiAvKiBwZHAxMSAqLwotICAgIGVycnBrdCgoQ0hBUiAqKSJVc2VyIGNhbmNl bGxlZCIpOwkvKiBTZW5kIHRoZSBwYWNrZXQgKi8KLSNpZm5kZWYgcGRwMTEKLSAgICBpZiAoZXBr dGZsZykgewkJCS8qIFJlc3RvcmUgdGhlIGJsb2NrIGNoZWNrICovCi0JZXBrdGZsZyA9IDA7Ci0J YmN0bCA9IGIxOyBiY3R1ID0gYjI7Ci0gICAgfQotI2VuZGlmIC8qIHBkcDExICovCi0gICAgc3Vj Y2VzcyA9IDA7Ci0gICAgcmV0dXJuKDApOwkJCQkvKiBSZXR1cm4gZnJvbSBwcm90b2NvbC4gKi8K LX0KLSAgICBicmVhazsKLWNhc2UgMTI6Ci0gICAgewkJLyogUmVjZWl2ZSBTZW5kLUluaXQgcGFj a2V0LiAqLwotICAgIHJjID0gcmN2X3NfcGt0KCk7Ci0gICAgY2FuY2VsID0gMDsJCQkJLyogUmVz ZXQgY2FuY2VsbGF0aW9uIGNvdW50ZXIgKi8KLSAgICBkZWJ1ZyhGMTAxLCJyY3Zfc19wa3QiLCIi LHJjKTsKLSAgICBpZiAocmMgPiAtMSkgcmV0dXJuKHJjKTsJCS8qIChzZWUgYmVsb3cpICovCi19 Ci0gICAgYnJlYWs7Ci1jYXNlIDEzOgotICAgIHsJCQkJLyogR2V0IGFjayBmb3IgSS1wYWNrZXQg Ki8KLSAgICBpbnQgeCA9IDA7Ci0jaWZkZWYgUEtUWkVST0hBQ0sKLSAgICBja3N0cm5jcHkoaXBr dGFjaywoY2hhciAqKXJkYXRhcCxQS1RaRVJPTEVOKTsgLyogU2F2ZSBhIGNvcHkgb2YgdGhlIEFD SyAqLwotICAgIGlwa3RsZW4gPSBzdHJsZW4oaXBrdGFjayk7Ci0jZW5kaWYgLyogUEtUWkVST0hB Q0sgKi8KLSAgICBzcGFyKHJkYXRhcCk7CQkJLyogU2V0IHBhcmFtZXRlcnMgKi8KLSAgICBjYW5j ZWwgPSAwOwotICAgIHdpbmxvID0gMDsJCQkJLyogU2V0IHdpbmRvdy1sb3cgYmFjayB0byB6ZXJv ICovCi0gICAgZGVidWcoRjEwMSwiPGlwa3Q+WSB3aW5sbyIsIiIsd2lubG8pOwotICAgIHVyc2Vy dmVyID0gMTsJCQkvKiBTbyBJIGtub3cgSSdtIHRhbGtpbmcgdG8gYSBzZXJ2ZXIgKi8KLSAgICBp ZiAodmNtZCkgewkJCQkvKiBJZiBzZW5kaW5nIGEgZ2VuZXJpYyBjb21tYW5kICovCi0JaWYgKHRp bml0KDApIDwgMCkgcmV0dXJuKC05KTsJLyogSW5pdGlhbGl6ZSBtYW55IHRoaW5ncyAqLwotCXgg PSBzY21kKHZjbWQsKENIQVIgKiljbWFyZyk7CS8qIERvIHRoYXQgKi8KLQlpZiAoeCA+PSAwKSB4 ID0gMDsJCS8qIChiZWNhdXNlIG9mIE8tUGFja2V0KSAqLwotCWRlYnVnKEYxMDEsInByb3RvIEcg cGFja2V0IHNjbWQiLCIiLHgpOwotCXZjbWQgPSAwOwkJCS8qIGFuZCB0aGVuIHVuLXJlbWVtYmVy IGl0LiAqLwotICAgIH0gZWxzZSBpZiAodnN0YXRlID09IGdldCkgewotCWRlYnVnKEYxMDEsIlJF R0VUIHNzdGF0ZSIsIiIsc3N0YXRlKTsKLQl4ID0gc3Jpbml0KHJlZ2V0LCByZXRyaWV2ZSwgb3Br dCk7IC8qIEdFVCBvciBSRUdFVCwgZXRjICovCi0gICAgfQotICAgIGlmICh4IDwgMCkgewkJCS8q IElmIGNvbW1hbmQgd2FzIHRvbyBsb25nICovCi0JaWYgKCFzcmltc2cpCi0JICBzcmltc2cgPSAi RXJyb3Igc2VuZGluZyBzdHJpbmciOwotCWVycnBrdCgoQ0hBUiAqKXNyaW1zZyk7CQkvKiBjYW5j ZWwgYm90aCBzaWRlcy4gKi8KLQlzdWNjZXNzID0gMDsKLQlSRVNVTUU7Ci0gICAgfSBlbHNlIGlm ICh4ID4gMCkgewkJCS8qIE5lZWQgdG8gc2VuZCBtb3JlIE8tUGFja2V0cyAqLwotCUJFR0lOIHNz b3BrdDsKLSAgICB9IGVsc2UgewotCXJ0aW1lcigpOwkJCS8qIFJlc2V0IHRoZSBlbGFwc2VkIHNl Y29uZHMgdGltZXIuICovCi0jaWZkZWYgR0ZUSU1FUgotCXJmdGltZXIoKTsKLSNlbmRpZiAvKiBH RlRJTUVSICovCi0Jd2lubG8gPSAwOwkJCS8qIFdpbmRvdyBiYWNrIHRvIDAsIGFnYWluLiAqLwot CWRlYnVnKEYxMDEsIjxpcGt0PlkgdnN0YXRlIiwiIix2c3RhdGUpOwotCW5ha3N0YXRlID0gMTsJ CQkvKiBDYW4gc2VuZCBOQUtzIGZyb20gaGVyZS4gKi8KLQlCRUdJTiB2c3RhdGU7CQkJLyogU3dp dGNoIHRvIGRlc2lyZWQgc3RhdGUgKi8KLSAgICB9Ci19Ci0gICAgYnJlYWs7Ci1jYXNlIDE0Ogot ICAgIHsJCQkJLyogR290IEFDSyB0byBPLVBhY2tldCAqLwotICAgIGRlYnVnKEYxMDAsIkNQQ1BS TyA8c3NvcGt0PlkiLCIiLDApOwotICAgIHggPSBzb3BrdCgpOwotICAgIGRlYnVnKEYxMDEsIkNQ Q1BSTyA8c3NvcGt0PlkgeCIsIiIseCk7Ci0gICAgaWYgKHggPCAwKSB7CQkJLyogSWYgZXJyb3Ig Ki8KLQllcnJwa3QoKENIQVIgKilzcmltc2cpOwkJLyogY2FuY2VsIGJvdGggc2lkZXMuICovCi0J c3VjY2VzcyA9IDA7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSBpZiAoeCA9PSAwKSB7CQkvKiBUaGlz IHdhcyB0aGUgbGFzdCBPLVBhY2tldCAqLwotCXJ0aW1lcigpOwkJCS8qIFJlc2V0IHRoZSBlbGFw c2VkIHNlY29uZHMgdGltZXIuICovCi0jaWZkZWYgR0ZUSU1FUgotCXJmdGltZXIoKTsKLSNlbmRp ZiAvKiBHRlRJTUVSICovCi0Jd2lubG8gPSAwOwkJCS8qIFdpbmRvdyBiYWNrIHRvIDAsIGFnYWlu LiAqLwotCWRlYnVnKEYxMDEsIjxzc29wa3Q+WSB3aW5sbyIsIiIsd2lubG8pOwotCW5ha3N0YXRl ID0gMTsJCQkvKiBDYW4gc2VuZCBOQUtzIGZyb20gaGVyZS4gKi8KLQlCRUdJTiB2c3RhdGU7CQkJ LyogU3dpdGNoIHRvIGRlc2lyZWQgc3RhdGUgKi8KLSAgICB9Ci0gICAgZGVidWcoRjEwMSwiQ1BD UFJPIDxzc29wa3Q+WSBub3QgY2hhbmdpbmcgc3RhdGUiLCIiLHgpOwotfQotICAgIGJyZWFrOwot Y2FzZSAxNToKLSAgICB7CQkJCS8qIElnbm9yZSBFcnJvciByZXBseSB0byBJIHBhY2tldCAqLwot ICAgIGludCB4ID0gMDsKLSAgICB3aW5sbyA9IDA7CQkJCS8qIFNldCB3aW5kb3ctbG93IGJhY2sg dG8gemVybyAqLwotICAgIGRlYnVnKEYxMDEsIjxpcGt0PkUgd2lubG8iLCIiLHdpbmxvKTsKLSAg ICBpZiAodmNtZCkgewkJCQkvKiBJbiBjYXNlIG90aGVyIEtlcm1pdCBkb2Vzbid0ICovCi0JaWYg KHRpbml0KDApIDwgMCkgcmV0dXJuKC05KTsKLQl4ID0gc2NtZCh2Y21kLChDSEFSICopY21hcmcp OwkvKiB1bmRlcnN0YW5kIEktcGFja2V0cy4gKi8KLQlpZiAoeCA+PSAwKSB4ID0gMDsJCS8qIChi ZWNhdXNlIG9mIE8tUGFja2V0KSAqLwotCXZjbWQgPSAwOwkJCS8qIE90aGVyd2lzZSBhY3QgYXMg YWJvdmUuLi4gKi8KLSAgICB9IGVsc2UgaWYgKHZzdGF0ZSA9PSBnZXQpIHggPSBzcmluaXQocmVn ZXQsIHJldHJpZXZlLCBvcGt0KTsKLSAgICBpZiAoeCA8IDApIHsJCQkvKiBJZiBjb21tYW5kIHdh cyB0b28gbG9uZyAqLwotCWVycnBrdCgoQ0hBUiAqKXNyaW1zZyk7CQkvKiBjYW5jZWwgYm90aCBz aWRlcy4gKi8KLQlzdWNjZXNzID0gMDsKLQlSRVNVTUU7Ci0gICAgfSBlbHNlIGlmICh4ID4gMCkg ewkJCS8qIE5lZWQgdG8gc2VuZCBtb3JlIE8tUGFja2V0cyAqLwotCUJFR0lOIHNzb3BrdDsKLSAg ICB9IGVsc2UgewotCWZyZWVycGt0KHdpbmxvKTsJCS8qIERpc2NhcmQgdGhlIEVycm9yIHBhY2tl dC4gKi8KLQlkZWJ1ZyhGMTAxLCI8aXBrdD5FIHdpbmxvIiwiIix3aW5sbyk7Ci0Jd2lubG8gPSAw OwkJCS8qIEJhY2sgdG8gcGFja2V0IDAgYWdhaW4uICovCi0JbmFrc3RhdGUgPSAxOwkJCS8qIENh biBzZW5kIE5BS3MgZnJvbSBoZXJlLiAqLwotCUJFR0lOIHZzdGF0ZTsKLSAgICB9Ci19Ci0gICAg YnJlYWs7Ci1jYXNlIDE2OgotICAgIHsJCS8qIFJlc2VuZCBvZiBwcmV2aW91cyBJLXBrdCBBQ0ss IHNhbWUgc2VxIG51bWJlciAqLwotICAgIGZyZWVycGt0KDApOwkJCS8qIEZyZWUgdGhlIEFDSydz IHJlY2VpdmUgYnVmZmVyICovCi0gICAgcmVzZW5kKDApOwkJCQkvKiBTZW5kIHRoZSBHRVQgcGFj a2V0IGFnYWluLiAqLwotfQotICAgIGJyZWFrOwotY2FzZSAxNzoKLSAgICB7CQkJCS8qIEdldCBJ LXBhY2tldCAqLwotI2lmbmRlZiBOT1NFUlZFUgotICAgIHNwYXIocmRhdGFwKTsJCQkvKiBTZXQg cGFyYW1ldGVycyBmcm9tIGl0ICovCi0gICAgYWNrMShycGFyKCkpOwkJCS8qIFJlc3BvbmQgd2l0 aCBvdXIgb3duIHBhcmFtZXRlcnMgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgcGt0aW5pdCgpOwkJ CQkvKiBSZWluaXRpYWxpemUgcGFja2V0IG51bWJlcnMgKi8KLSNlbHNlCi0jaWZkZWYgQ09NTUVO VAotICAgIC8qIFRoaXMgY2FuJ3QgYmUgcmlnaHQgLSBpdCB1bmRvZXMgdGhlIHN0dWZmIHdlIGp1 c3QgbmVnb3RpYXRlZCAqLwotICAgIHggPSBqdXN0b25lOwotICAgIHRpbml0KDEpOwkJCQkvKiBS ZWluaXRpYWxpemUgRVZFUllUSElORyAqLwotICAgIGp1c3RvbmUgPSB4OwkJCS8qIEJ1dCB0aGlz Li4uICovCi0jZWxzZQotICAgIHRpbml0KDApOwkJCQkvKiBJbml0aWFsaXplIG1vc3QgdGhpbmdz ICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNlbmRpZiAv KiBOT1NFUlZFUiAqLwotICAgIGNhbmNlbCA9IDA7CQkJCS8qIFJlc2V0IGNhbmNlbGxhdGlvbiBj b3VudGVyICovCi19Ci0gICAgYnJlYWs7Ci1jYXNlIDE4OgotICAgIHsJCQkJLyogR0VUICovCi0j aWZuZGVmIE5PU0VSVkVSCi0gICAgaWYgKHhfbG9naW4gJiYgIXhfbG9nZ2VkKSB7Ci0JZXJycGt0 KChDSEFSICopIkxvZ2luIHJlcXVpcmVkIik7Ci0JU0VSVkU7Ci0gICAgfSBlbHNlIGlmIChzZ2V0 aW5pdCgwLDApIDwgMCkgewotCVJFU1VNRTsKLSAgICB9IGVsc2UgewotI2lmZGVmIENLU1lTTE9H Ci0JaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQotCSAgY2tzeXNsb2co U1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiR0VUIiwgKGNoYXIgKilzcnZjbWQpOwotI2VuZGlmIC8q IENLU1lTTE9HICovCi0JQkVHSU4gc3Npbml0OwotICAgIH0KLSNlbmRpZiAvKiBOT1NFUlZFUiAq LwotfQotICAgIGJyZWFrOwotY2FzZSAxOToKLSAgICB7CQkJCS8qIEdFVCAvREVMRVRFIChSRVRS SUVWRSkgKi8KLSNpZm5kZWYgTk9TRVJWRVIKLSAgICBpZiAoeF9sb2dpbiAmJiAheF9sb2dnZWQp IHsKLQllcnJwa3QoKENIQVIgKikiTG9naW4gcmVxdWlyZWQiKTsKLQlSRVNVTUU7Ci0gICAgfSBl bHNlIGlmICghRU5BQkxFRChlbl9kZWwpKSB7Ci0JZXJycGt0KChDSEFSICopIkRlbGV0aW5nIGZp bGVzIGlzIGRpc2FibGVkIik7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSBpZiAoc2dldGluaXQoMCww KSA8IDApIHsKLQlSRVNVTUU7Ci0gICAgfSBlbHNlIHsKLQltb3ZpbmcgPSAxOwotI2lmZGVmIENL U1lTTE9HCi0JaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQotCSAgY2tz eXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiR0VUIC9ERUxFVEUiLCAoY2hhciAqKXNydmNt ZCk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLQlCRUdJTiBzc2luaXQ7Ci0gICAgfQotI2VuZGlm IC8qIE5PU0VSVkVSICovCi19Ci0gICAgYnJlYWs7Ci1jYXNlIDIwOgotICAgIHsJCQkJLyogR0VU IC9SRUNVUlNJVkUgKi8KLSNpZm5kZWYgTk9TRVJWRVIKLSAgICByZWN1cnNpdmUgPSAxOwkJCS8q IFNldCB0aGVzZSBiZWZvcmUgc2dldGluaXQoKSAqLwotICAgIGlmIChmbnNwYXRoID09IFBBVEhf T0ZGKQotICAgICAgZm5zcGF0aCA9IFBBVEhfUkVMOwkJLyogRG9uJ3Qgd29ycnksIHRoZXkgd2ls bCBiZSAqLwotICAgIGlmICh4X2xvZ2luICYmICF4X2xvZ2dlZCkgewkJLyogcmVzZXQgbmV4dCB0 aW1lIHRocm91Z2guICovCi0JZXJycGt0KChDSEFSICopIkxvZ2luIHJlcXVpcmVkIik7Ci0JUkVT VU1FOwotICAgIH0gZWxzZSBpZiAoc2dldGluaXQoMCwwKSA8IDApIHsKLQlSRVNVTUU7Ci0gICAg fSBlbHNlIHsKLSNpZmRlZiBDS1NZU0xPRwotCWlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYg Y2t4bG9nZ2luZykKLQkgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIkdFVCAvUkVD VVJTSVZFIiwgKGNoYXIgKilzcnZjbWQpOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0JQkVHSU4g c3Npbml0OwotICAgIH0KLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotfQotICAgIGJyZWFrOwotY2Fz ZSAyMToKLSAgICB7CQkJCS8qIEdFVCAvUkVDVVJTSVZFIC9ERUxFVEUgKi8KLSNpZm5kZWYgTk9T RVJWRVIKLSAgICByZWN1cnNpdmUgPSAxOwkJCS8qIFNldCB0aGVzZSBiZWZvcmUgc2dldGluaXQo KSAqLwotICAgIGlmIChmbnNwYXRoID09IFBBVEhfT0ZGKQotICAgICAgZm5zcGF0aCA9IFBBVEhf UkVMOwkJLyogRG9uJ3Qgd29ycnksIHRoZXkgd2lsbCBiZSAqLwotICAgIG1vdmluZyA9IDE7CQkJ CS8qIHJlc2V0IG5leHQgdGltZSB0aHJvdWdoLiAqLwotICAgIGlmICh4X2xvZ2luICYmICF4X2xv Z2dlZCkgewotCWVycnBrdCgoQ0hBUiAqKSJMb2dpbiByZXF1aXJlZCIpOwotCVJFU1VNRTsKLSAg ICB9IGVsc2UgaWYgKCFFTkFCTEVEKGVuX2RlbCkpIHsKLQllcnJwa3QoKENIQVIgKikiRGVsZXRp bmcgZmlsZXMgaXMgZGlzYWJsZWQiKTsKLQlSRVNVTUU7Ci0gICAgfSBlbHNlIGlmIChzZ2V0aW5p dCgwLDApIDwgMCkgewotCVJFU1VNRTsKLSAgICB9IGVsc2UgewotI2lmZGVmIENLU1lTTE9HCi0J aWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQotCSAgY2tzeXNsb2coU1lT TEdfUFIsMSwic2VydmVyIiwKLQkJICAgIkdFVCAvUkVDVVJTSVZFIC9ERUxFVEUiLChjaGFyICop c3J2Y21kKTsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotCUJFR0lOIHNzaW5pdDsKLSAgICB9Ci0j ZW5kaWYgLyogTk9TRVJWRVIgKi8KLX0KLSAgICBicmVhazsKLWNhc2UgMjI6Ci0gICAgewkJCQkv KiBHRVQgL1JFQ09WRVIgKFJFR0VUKSAqLwotI2lmbmRlZiBOT1NFUlZFUgotICAgIGlmICh4X2xv Z2luICYmICF4X2xvZ2dlZCkgewotCWVycnBrdCgoQ0hBUiAqKSJMb2dpbiByZXF1aXJlZCIpOwot CVNFUlZFOwotICAgIH0gZWxzZSBpZiAoc2dldGluaXQoMSwwKSA8IDApIHsKLQlSRVNVTUU7Ci0g ICAgfSBlbHNlIHsKLSNpZmRlZiBDS1NZU0xPRwotCWlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIg JiYgY2t4bG9nZ2luZykKLQkgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIkdFVCAv UkVDT1ZFUiIsIChjaGFyICopc3J2Y21kKTsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotCUJFR0lO IHNzaW5pdDsKLSAgICB9Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLX0KLSAgICBicmVhazsKLWNh c2UgMjM6Ci0gICAgewkJCQkvKiBFeHRlbmRlZCBHRVQgKi8KLSNpZm5kZWYgTk9TRVJWRVIKLSAg ICBpZiAoeF9sb2dpbiAmJiAheF9sb2dnZWQpIHsJCS8qIChhbnkgY29tYmluYXRpb24gb2Ygb3B0 aW9ucykgKi8KLQllcnJwa3QoKENIQVIgKikiTG9naW4gcmVxdWlyZWQiKTsKLQlTRVJWRTsKLSAg ICB9IGVsc2UgaWYgKCh4ID0gc2dldGluaXQoMCwxKSkgPCAwKSB7Ci0JZGVidWcoRjEwMSwiQ0tD UFJPIDxzZXJ2ZT5PIHNnZXRpbml0IGZhaWwiLCIiLHgpOwotCVJFU1VNRTsKLSAgICB9IGVsc2Ug aWYgKHggPT0gMCkgewotCWRlYnVnKEYxMDEsIkNLQ1BSTyA8c2VydmU+TyBzZ2V0aW5pdCBkb25l IiwiIix4KTsKLSNpZmRlZiBDS1NZU0xPRwotCWlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYg Y2t4bG9nZ2luZykKLQkgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIkVYVEVOREVE IEdFVCIsIChjaGFyICopc3J2Y21kKTsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotCUJFR0lOIHNz aW5pdDsKLSAgICB9IGVsc2UgewkJCQkvKiBPdGhlcndpc2Ugc3RheSBpbiB0aGlzIHN0YXRlICov Ci0JZGVidWcoRjEwMSwiQ0tDUFJPIDxzZXJ2ZT5PIHNnZXRpbml0IFRCQyIsIiIseCk7Ci0JYWNr KCk7Ci0JQkVHSU4gcm9wa3Q7Ci0gICAgfQotI2VuZGlmIC8qIE5PU0VSVkVSICovCi19Ci0gICAg YnJlYWs7Ci1jYXNlIDI0OgotICAgIHsKLSNpZm5kZWYgTk9TRVJWRVIKLSAgICBpZiAoeF9sb2dp biAmJiAheF9sb2dnZWQpIHsJCS8qIChhbnkgY29tYmluYXRpb24gb2Ygb3B0aW9ucykgKi8KLQll cnJwa3QoKENIQVIgKikiTG9naW4gcmVxdWlyZWQiKTsKLQlTRVJWRTsKLSAgICB9IGVsc2UgaWYg KCh4ID0gc2dldGluaXQoMCwxKSkgPCAwKSB7Ci0JZGVidWcoRjEwMSwiQ0tDUFJPIDxyb3BrdD5P IHNnZXRpbml0IGZhaWwiLCIiLHgpOwotCVJFU1VNRTsKLSAgICB9IGVsc2UgaWYgKHggPT0gMCkg ewotCWRlYnVnKEYxMDEsIkNLQ1BSTyA8cm9wa3Q+TyBzZ2V0aW5pdCBkb25lIiwiIix4KTsKLSNp ZmRlZiBDS1NZU0xPRwotCWlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykK LQkgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIkVYVEVOREVEIEdFVCIsIChjaGFy ICopc3J2Y21kKTsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotCUJFR0lOIHNzaW5pdDsKLSAgICB9 IGVsc2UgewkJCQkvKiBPdGhlcndpc2Ugc3RheSBpbiB0aGlzIHN0YXRlICovCi0JZGVidWcoRjEw MSwiQ0tDUFJPIDxyb3BrdD5PIHNnZXRpbml0IFRCQyIsIiIseCk7Ci0JYWNrKCk7Ci0gICAgfQot I2VuZGlmIC8qIE5PU0VSVkVSICovCi19Ci0gICAgYnJlYWs7Ci1jYXNlIDI1OgotICAgIHsJCQkJ LyogR2VuZXJpYyBzZXJ2ZXIgY29tbWFuZCAqLwotI2lmbmRlZiBOT1NFUlZFUgotICAgIHNydnB0 ciA9IHNydmNtZDsJCQkvKiBQb2ludCB0byBjb21tYW5kIGJ1ZmZlciAqLwotICAgIGRlY29kZShy ZGF0YXAscHV0c3J2LDApOwkJLyogRGVjb2RlIHBhY2tldCBkYXRhIGludG8gaXQgKi8KLSAgICBw dXRzcnYoTlVMKTsJCQkvKiBJbnNlcnQgYSBjb3VwbGUgbnVsbHMgKi8KLSAgICBwdXRzcnYoTlVM KTsJCQkvKiBmb3IgdGVybWluYXRpb24gKi8KLSAgICBpZiAoc3J2Y21kWzBdKSB7Ci0Jc3N0YXRl ID0gc3J2Y21kWzBdOwkJLyogU2V0IHJlcXVlc3RlZCBzdGFydCBzdGF0ZSAqLwotCWlmICh4X2xv Z2luICYmICF4X2xvZ2dlZCAmJgkvKiBMb2dpbiByZXF1aXJlZD8gKi8KLQkgICAgLyogTG9naW4s IExvZ291dCwgYW5kIEhlbHAgYXJlIGFsbG93ZWQgd2hlbiBub3QgbG9nZ2VkIGluICovCi0JICAg IHNzdGF0ZSAhPSAnSScgJiYgc3N0YXRlICE9ICdMJyAmJiBzc3RhdGUgIT0gJ0gnKSB7Ci0JICAg IGVycnBrdCgoQ0hBUiAqKSJMb2dpbiByZXF1aXJlZCIpOwotCSAgICBTRVJWRTsKLQl9IGVsc2Ug ewotCSAgICBuYWtzdGF0ZSA9IDA7CQkvKiBOb3cgSSdtIHRoZSBzZW5kZXIuICovCi0JICAgIHdo YXQgPSBXX1JFTU87CQkvKiBEb2luZyBhIFJFTU9URSBjb21tYW5kLiAqLwotI2lmZGVmIFNUUkVB TUlORwotCSAgICBpZiAoIXN0cmVhbWluZykKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLQkgICAg ICBpZiAodGltaW50IDwgMSkKLQkJdGltaW50ID0gY2hrdGltbyhydGltbyx0aW1lZik7IC8qIFN3 aXRjaCB0byBwZXItcGFja2V0IHRpbWVyICovCi0JICAgIGJpbmFyeSA9IFhZRlRfVDsJCS8qIFN3 aXRjaCB0byB0ZXh0IG1vZGUgKi8KLQkgICAgQkVHSU4gZ2VuZXJpYzsJCS8qIFN3aXRjaCB0byBn ZW5lcmljIGNvbW1hbmQgc3RhdGUgKi8KLQl9Ci0gICAgfSBlbHNlIHsKLQllcnJwa3QoKENIQVIg KikiQmFkbHkgZm9ybWVkIHNlcnZlciBjb21tYW5kIik7IC8qIHJlcG9ydCBlcnJvciAqLwotCVJF U1VNRTsJCQkvKiAmIGdvIGJhY2sgdG8gc2VydmVyIGNvbW1hbmQgd2FpdCAqLwotICAgIH0KLSNl bmRpZiAvKiBOT1NFUlZFUiAqLwotfQotICAgIGJyZWFrOwotY2FzZSAyNjoKLSAgICB7CQkJCS8q IFJlY2VpdmUgSG9zdCBjb21tYW5kICovCi0jaWZuZGVmIE5PU0VSVkVSCi0gICAgaWYgKHhfbG9n aW4gJiYgIXhfbG9nZ2VkKSB7Ci0JZXJycGt0KChDSEFSICopIkxvZ2luIHJlcXVpcmVkIik7Ci0J U0VSVkU7Ci0gICAgfSBlbHNlIGlmICghRU5BQkxFRChlbl9ob3MpKSB7Ci0JZXJycGt0KChDSEFS ICopIlJFTU9URSBIT1NUIGRpc2FibGVkIik7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSBpZiAobm9w dXNoKSB7Ci0JZXJycGt0KChDSEFSICopIkhPU1QgY29tbWFuZHMgbm90IGF2YWlsYWJsZSIpOwot CVJFU1VNRTsKLSAgICB9IGVsc2UgewotCXNydnB0ciA9IHNydmNtZDsJCS8qIFBvaW50IHRvIGNv bW1hbmQgYnVmZmVyICovCi0JZGVjb2RlKHJkYXRhcCxwdXRzcnYsMCk7CS8qIERlY29kZSBjb21t YW5kIHBhY2tldCBpbnRvIGl0ICovCi0JcHV0c3J2KE5VTCk7CQkJLyogTnVsbC10ZXJtaW5hdGUg Ki8KLQluYWtzdGF0ZSA9IDA7CQkJLyogTm93IHNlbmRpbmcsIG5vdCByZWNlaXZpbmcgKi8KLQli aW5hcnkgPSBYWUZUX1Q7CQkvKiBTd2l0Y2ggdG8gdGV4dCBtb2RlICovCi0JaWYgKHN5c2NtZCgo Y2hhciAqKXNydmNtZCwiIikpIHsgLyogVHJ5IHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQgKi8KLQkg ICAgd2hhdCA9IFdfUkVNTzsJCS8qIERvaW5nIGEgUkVNT1RFIGNvbW1hbmQuICovCi0jaWZkZWYg U1RSRUFNSU5HCi0JICAgIGlmICghc3RyZWFtaW5nKQotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwot CSAgICAgIGlmICh0aW1pbnQgPCAxKQotCQl0aW1pbnQgPSBjaGt0aW1vKHJ0aW1vLHRpbWVmKTsg LyogU3dpdGNoIHRvIHBlci1wYWNrZXQgdGltZXIgKi8KLSNpZmRlZiBDS1NZU0xPRwotCSAgICBp ZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCi0JICAgICAgY2tzeXNsb2co U1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiUkVNT1RFIEhPU1QiLCAoY2hhciAqKXNydmNtZCk7Ci0j ZW5kaWYgLyogQ0tTWVNMT0cgKi8KLQkgICAgQkVHSU4gc3Npbml0OwkJLyogSWYgT0ssIHNlbmQg YmFjayBpdHMgb3V0cHV0ICovCi0JfSBlbHNlIHsJCQkvKiBPdGhlcndpc2UgKi8KLQkgICAgZXJy cGt0KChDSEFSICopIkNhbid0IGRvIHN5c3RlbSBjb21tYW5kIik7IC8qIHJlcG9ydCBlcnJvciAq LwotCSAgICBSRVNVTUU7CQkJLyogJiBnbyBiYWNrIHRvIHNlcnZlciBjb21tYW5kIHdhaXQgKi8K LQl9Ci0gICAgfQotI2VuZGlmIC8qIE5PU0VSVkVSICovCi19Ci0gICAgYnJlYWs7Ci1jYXNlIDI3 OgotICAgIHsJCQkJLyogSW50ZXJydXB0ZWQgb3IgY29ubmVjdGlvbiBsb3N0ICovCi0gICAgcmMg PSBzcnZfdGltZW91dCgpOwotICAgIGRlYnVnKEYxMDEsInNydl90aW1lb3V0IiwiIixyYyk7Ci0g ICAgaWYgKHJjID4gLTEpIHJldHVybihyYyk7CQkvKiAoc2VlIGJlbG93KSAqLwotfQotICAgIGJy ZWFrOwotY2FzZSAyODoKLSAgICB7CQkJCS8qIFNlcnZlciBnb3QgYSBOQUsgaW4gY29tbWFuZC13 YWl0ICovCi0jaWZuZGVmIE5PU0VSVkVSCi0gICAgZXJycGt0KChDSEFSICopIkRpZCB5b3Ugc2F5 IFJFQ0VJVkUgaW5zdGVhZCBvZiBHRVQ/Iik7Ci0gICAgUkVTVU1FOwotI2VuZGlmIC8qIE5PU0VS VkVSICovCi19Ci0gICAgYnJlYWs7Ci1jYXNlIDI5OgotICAgIHsJCQkJLyogQW55IG90aGVyIGNv bW1hbmQgaW4gdGhpcyBzdGF0ZSAqLwotI2lmbmRlZiBOT1NFUlZFUgotICAgIGlmIChjICE9ICgn RScgLSBTUCkgJiYgYyAhPSAoJ1knIC0gU1ApKSAvKiBleGNlcHQgRSBhbmQgWSBwYWNrZXRzLiAq LwotICAgICAgZXJycGt0KChDSEFSICopIlVuaW1wbGVtZW50ZWQgc2VydmVyIGZ1bmN0aW9uIik7 Ci0gICAgLyogSWYgd2UgYW5zd2VyIGFuIEUgd2l0aCBhbiBFLCB3ZSBnZXQgYW4gaW5maW5pdGUg bG9vcC4gKi8KLSAgICAvKiBBIFkgKEFDSykgY2FuIHNob3cgdXAgaGVyZSBpZiB3ZSBzZW50IGJh Y2sgYSBzaG9ydC1mb3JtIHJlcGx5IHRvICovCi0gICAgLyogYSBHIHBhY2tldCBhbmQgaXQgd2Fz IGVjaG9lZC4gIEFDS3MgY2FuIGJlIHNhZmVseSBpZ25vcmVkIGhlcmUuICovCi0gICAgUkVTVU1F OwkJCQkvKiBHbyBiYWNrIHRvIHNlcnZlciBjb21tYW5kIHdhaXQuICovCi0jZW5kaWYgLyogTk9T RVJWRVIgKi8KLX0KLSAgICBicmVhazsKLWNhc2UgMzA6Ci0gICAgewkJCQkvKiBMb2dpbi9PdXQg Ki8KLSAgICByYyA9IHNydl9sb2dpbigpOwotICAgIGRlYnVnKEYxMDEsIjxnZW5lcmljPkkgc3J2 X2xvZ2luIiwiIixyYyk7Ci0gICAgaWYgKHJjID4gLTEpIHJldHVybihyYyk7CQkvKiAoc2VlIGJl bG93KSAqLwotfQotICAgIGJyZWFrOwotY2FzZSAzMToKLSAgICB7CQkJCS8qIEdvdCBSRU1PVEUg Q0QgY29tbWFuZCAqLwotI2lmbmRlZiBOT1NFUlZFUgotI2lmZGVmIENLU1lTTE9HCi0gICAgaWYg KGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQotICAgICAgY2tzeXNsb2coU1lT TEdfUFIsIDEsICJzZXJ2ZXIiLCAiUkVNT1RFIENEIiwgKGNoYXIgKilzcnZjbWQpOwotI2VuZGlm IC8qIENLU1lTTE9HICovCi0gICAgaWYgKCFFTkFCTEVEKGVuX2N3ZCkpIHsKLQllcnJwa3QoKENI QVIgKikiUkVNT1RFIENEIGRpc2FibGVkIik7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSB7Ci0JY2hh ciAqIHAgPSBOVUxMOwotCXggPSBjd2QoKGNoYXIgKikoc3J2Y21kKzEpKTsJLyogVHJ5IHRvIGNo YW5nZSBkaXJlY3RvcnkgKi8KLSNpZmRlZiBJS1NEQgotCWlmIChpa2Rib3Blbikgc2xvdHN0YXRl KHdoYXQsIlJFTU9URSBDRCIsIChjaGFyICopKHNydmNtZCsyKSwgIiIpOwotI2VuZGlmIC8qIElL U0RCICovCi0JaWYgKCF4KSB7CQkJLyogRmFpbGVkICovCi0JICAgIGVycnBrdCgoQ0hBUiAqKSJD YW4ndCBjaGFuZ2UgZGlyZWN0b3J5Iik7Ci0JICAgIFJFU1VNRTsJCQkvKiBCYWNrIHRvIHNlcnZl ciBjb21tYW5kIHdhaXQgKi8KLQl9IGVsc2UgaWYgKHggPT0gMikgewkJLyogVXNlciB3YW50cyBt ZXNzYWdlICovCi0JICAgIGlmICghRU5BQkxFRChlbl90eXApKSB7CS8qIE1lc3NhZ2VzIChSRU1P VEUgVFlQRSkgZGlzYWJsZWQ/ICovCi0JCWVycnBrdCgoQ0hBUiAqKSJSRU1PVEUgVFlQRSBkaXNh YmxlZCIpOwotCQlSRVNVTUU7Ci0JICAgIH0gZWxzZSB7CQkJLyogVFlQRSBpcyBlbmFibGVkICov Ci0JCWludCBpOwotCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCSAgICBpZiAoemNoa2ko Y2Rtc2dmaWxlW2ldKSA+IC0xKSB7Ci0JCQlicmVhazsKLQkJICAgIH0KLQkJfQotCQliaW5hcnkg PSBYWUZUX1Q7CS8qIFVzZSB0ZXh0IG1vZGUgZm9yIHRoaXMuICovCi0JCWlmIChpIDwgOCAmJiBz bmR0eXBlKGNkbXNnZmlsZVtpXSkpIHsgLyogSGF2ZSByZWFkbWUgZmlsZT8gKi8KLQkJICAgIEJF R0lOIHNzaW5pdDsJLyogT0sgKi8KLQkJfSBlbHNlIHsJCS8qIG5vdCBPSyAqLwotCQkgICAgcCA9 IHpndGRpcigpOwotCQkgICAgaWYgKCFwKSBwID0gIiI7Ci0JCSAgICBzdWNjZXNzID0gKCpwKSA/ IDEgOiAwOwotCQkgICAgYWNrMSgoQ0hBUiAqKXApOwkvKiBBQ0sgd2l0aCBuZXcgZGlyZWN0b3J5 IG5hbWUgKi8KLQkJICAgIHN1Y2Nlc3MgPSAxOwotCQkgICAgUkVTVU1FOwkJLyogd2FpdCBmb3Ig bmV4dCBzZXJ2ZXIgY29tbWFuZCAqLwotCQl9Ci0JICAgIH0KLQl9IGVsc2UgewkJCS8qIFVzZXIg ZG9lc24ndCB3YW50IG1lc3NhZ2UgKi8KLQkgICAgcCA9emd0ZGlyKCk7Ci0JICAgIGlmICghcCkg cCA9ICIiOwotCSAgICBzdWNjZXNzID0gKCpwKSA/IDEgOiAwOwotCSAgICBhY2sxKChDSEFSICop cCk7Ci0JICAgIHN1Y2Nlc3MgPSAxOwotCSAgICBSRVNVTUU7CQkJLyogV2FpdCBmb3IgbmV4dCBz ZXJ2ZXIgY29tbWFuZCAqLwotCX0KLSAgICB9Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLX0KLSAg ICBicmVhazsKLWNhc2UgMzI6Ci0gICAgewkJCQkvKiBHb3QgUkVNT1RFIFBXRCBjb21tYW5kICov Ci0jaWZuZGVmIE5PU0VSVkVSCi0jaWZkZWYgQ0tTWVNMT0cKLSAgICBpZiAoY2t4c3lzbG9nID49 IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCi0gICAgICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNl cnZlciIsICJSRU1PVEUgUFdEIiwgTlVMTCk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICBp ZiAoIUVOQUJMRUQoZW5fY3dkKSkgewotCWVycnBrdCgoQ0hBUiAqKSJSRU1PVEUgQ0QgZGlzYWJs ZWQiKTsKLQlSRVNVTUU7Ci0gICAgfSBlbHNlIHsKLQlpZiAoZW5jc3RyKChDSEFSICopemd0ZGly KCkpID4gLTEpIHsgLyogRW5jb2RlIGN1cnJlbnQgZGlyZWN0b3J5ICovCi0JICAgIGFjazEoZGF0 YSk7CQkJLyogSWYgaXQgZml0cywgc2VuZCBpdCBiYWNrIGluIEFDSyAqLwotCSAgICBzdWNjZXNz ID0gMTsKLQl9IGVsc2UgewkJCS8qIEZhaWxlZCAqLwotCSAgICBhY2soKTsJCQkvKiBTZW5kIGVt cHR5IEFDSyAqLwotCSAgICBzdWNjZXNzID0gMDsJCS8qIGFuZCBpbmRpY2F0ZSBmYWlsdXJlIGxv Y2FsbHkgKi8KLQl9Ci0JUkVTVU1FOwkJCQkvKiBCYWNrIHRvIHNlcnZlciBjb21tYW5kIHdhaXQg Ki8KLSAgICB9Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLX0KLSAgICBicmVhazsKLWNhc2UgMzM6 Ci0gICAgewkJCQkvKiBSRU1PVEUgRElSRUNUT1JZIGNvbW1hbmQgKi8KLSNpZm5kZWYgTk9TRVJW RVIKLSAgICBjaGFyICpuMjsKLSNpZmRlZiBDS1NZU0xPRwotICAgIGlmIChja3hzeXNsb2cgPj0g U1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKLSAgICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2Vy dmVyIiwgIlJFTU9URSBESVJFQ1RPUlkiLCAoY2hhciAqKXNydmNtZCk7Ci0jZW5kaWYgLyogQ0tT WVNMT0cgKi8KLSAgICBpZiAoIUVOQUJMRUQoZW5fZGlyKSkgewkJLyogSWYgRElSIGlzIGRpc2Fi bGVkLCAqLwotCWVycnBrdCgoQ0hBUiAqKSJSRU1PVEUgRElSRUNUT1JZIGRpc2FibGVkIik7IC8q IHJlZnVzZS4gKi8KLQlSRVNVTUU7Ci0gICAgfSBlbHNlIHsJCQkJLyogRElSIGlzIGVuYWJsZWQu ICovCi0jaWZkZWYgSUtTREIKLQlpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJSRU1PVEUg RElSIiwgKGNoYXIgKikoc3J2Y21kKzIpLCAiIik7Ci0jZW5kaWYgLyogSUtTREIgKi8KLQlpZiAo IUVOQUJMRUQoZW5fY3dkKSkgewkJLyogQnV0IENXRCBpcyBkaXNhYmxlZCAqLwotCSAgICB6c3Ry aXAoKGNoYXIgKikoc3J2Y21kKzIpLCZuMik7IC8qIGFuZCB0aGV5IGluY2x1ZGVkIGEgcGF0aG5h bWUsICovCi0JICAgIGlmIChzdHJjbXAoKGNoYXIgKikoc3J2Y21kKzIpLG4yKSkgeyAvKiBzbyBy ZWZ1c2UuICovCi0JCWVycnBrdCgoQ0hBUiAqKSJBY2Nlc3MgZGVuaWVkIik7Ci0JCVJFU1VNRTsJ CQkvKiBSZW1lbWJlciwgdGhpcyBpcyBub3QgYSBnb3RvISAqLwotCSAgICB9Ci0JfQotCWlmIChz dGF0ZSA9PSBnZW5lcmljKSB7CQkJLyogSXQncyBPSyB0byBnbyBhaGVhZC4gKi8KLSNpZmRlZiBD T01NRU5UCi0JICAgIG4yID0gKCooc3J2Y21kKzIpKSA/IERJUkNNRCA6IERJUkNNMjsKLQkgICAg aWYgKHN5c2NtZChuMiwoY2hhciAqKShzcnZjbWQrMikpKSAgLyogSWYgaXQgY2FuIGJlIGRvbmUg Ki8KLSNlbHNlCi0JICAgIGludCB4OwotCSAgICBpZiAoKHggPSBzbmRkaXIoKGNoYXIqKShzcnZj bWQrMikpKSA+IDApCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCSAgICB7Ci0JCUJFR0lOIHNzaW5p dDsJCS8qIHNlbmQgdGhlIHJlc3VsdHMgYmFjazsgKi8KLQkgICAgfSBlbHNlIHsJCQkvKiBvdGhl cndpc2UgKi8KLQkJaWYgKHggPCAwKQotCQkgIGVycnBrdCgoQ0hBUiAqKSJObyBmaWxlcyBtYXRj aCIpOwotCQllbHNlCi0JCSAgZXJycGt0KChDSEFSICopIkNhbid0IGxpc3QgZGlyZWN0b3J5Iik7 Ci0JCVJFU1VNRTsJCQkvKiByZXR1cm4gdG8gc2VydmVyIGNvbW1hbmQgd2FpdCAqLwotCSAgICB9 Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotfQotICAgIGJyZWFrOwotY2FzZSAz NDoKLSAgICB7CQkJCS8qIFJFTU9URSBERUxFVEUgKEVyYXNlKSAqLwotI2lmbmRlZiBOT1NFUlZF UgotICAgIGNoYXIgKm4yOwotI2lmZGVmIENLU1lTTE9HCi0gICAgaWYgKGNreHN5c2xvZyA+PSBT WVNMR19QUiAmJiBja3hsb2dnaW5nKQotICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2 ZXIiLCAiUkVNT1RFIERFTEVURSIsIChjaGFyICopc3J2Y21kKTsKLSNlbmRpZiAvKiBDS1NZU0xP RyAqLwotICAgIGlmICghRU5BQkxFRChlbl9kZWwpKSB7Ci0JZXJycGt0KChDSEFSICopIlJFTU9U RSBERUxFVEUgZGlzYWJsZWQiKTsKLQlSRVNVTUU7Ci0gICAgfSBlbHNlIHsJCQkJLyogREVMRVRF IGlzIGVuYWJsZWQgKi8KLSNpZmRlZiBJS1NEQgotCWlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdo YXQsIlJFTU9URSBERUxFVEUiLCAoY2hhciAqKShzcnZjbWQrMiksICIiKTsKLSNlbmRpZiAvKiBJ S1NEQiAqLwotCWlmICghRU5BQkxFRChlbl9jd2QpKSB7CQkvKiBidXQgQ1dEIGlzIGRpc2FibGVk ICovCi0JICAgIHpzdHJpcCgoY2hhciAqKShzcnZjbWQrMiksJm4yKTsgLyogYW5kIHRoZXkgaW5j bHVkZWQgYSBwYXRobmFtZSwgKi8KLQkgICAgaWYgKHN0cmNtcCgoY2hhciAqKShzcnZjbWQrMiks bjIpKSB7IC8qIHNvIHJlZnVzZS4gKi8KLQkJZXJycGt0KChDSEFSICopIkFjY2VzcyBkZW5pZWQi KTsKLQkJUkVTVU1FOwkJCS8qIFJlbWVtYmVyLCB0aGlzIGlzIG5vdCBhIGdvdG8hICovCi0JICAg IH0KLQl9IGVsc2UgaWYgKGlzZGlyKChjaGFyICopKHNydmNtZCsyKSkpIHsgLyogQSBkaXJlY3Rv cnkgbmFtZT8gKi8KLQkgICAgZXJycGt0KChDSEFSICopIkl0J3MgYSBkaXJlY3RvcnkiKTsKLQkg ICAgUkVTVU1FOwotCX0KLQlpZiAoc3RhdGUgPT0gZ2VuZXJpYykgewkJLyogSXQncyBPSyB0byBn byBhaGVhZC4gKi8KLQkgICAgaW50IHg7Ci0JICAgIGlmICgoeCA9IHNuZGRlbCgoY2hhciopKHNy dmNtZCsyKSkpID4gMCkgewotCQlCRUdJTiBzc2luaXQ7CQkvKiBJZiBPSyBzZW5kIHJlc3VsdHMg YmFjayAqLwotCSAgICB9IGVsc2UgewkJCS8qIG90aGVyd2lzZSAqLwotCQlpZiAoeCA8IDApCi0J CSAgZXJycGt0KChDSEFSICopIkZpbGUgbm90IGZvdW5kIik7IC8qIHJlcG9ydCBmYWlsdXJlICov Ci0JCWVsc2UKLQkJICBlcnJwa3QoKENIQVIgKikiREVMRVRFIGZhaWxlZCIpOwotCQlSRVNVTUU7 CQkJLyogJiByZXR1cm4gdG8gc2VydmVyIGNvbW1hbmQgd2FpdCAqLwotCSAgICB9Ci0JfQotICAg IH0KLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotfQotICAgIGJyZWFrOwotY2FzZSAzNToKLSAgICB7 CQkJCS8qIEZJTklTSCAqLwotI2lmbmRlZiBOT1NFUlZFUgotI2lmZGVmIENLU1lTTE9HCi0gICAg aWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQotICAgICAgY2tzeXNsb2co U1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiRklOSVNIIiwgTlVMTCk7Ci0jZW5kaWYgLyogQ0tTWVNM T0cgKi8KLSNpZmRlZiBJS1NEQgotICAgIGlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsIlNF UlZFUiBGSU5JU0giLCAiIiwgIiIpOwotI2VuZGlmIC8qIElLU0RCICovCi0gICAgaWYgKCFFTkFC TEVEKGVuX2ZpbikpIHsKLQllcnJwa3QoKENIQVIgKikiRklOSVNIIGRpc2FibGVkIik7Ci0JUkVT VU1FOwotICAgIH0gZWxzZSB7Ci0JYWNrKCk7CQkJCS8qIEFja25vd2xlZGdlICovCi0JeHhzY3Jl ZW4oU0NSX1RDLDAsMEwsIiIpOwkvKiBEaXNwbGF5ICovCi0Jc3VjY2VzcyA9IDE7Ci0JcmV0dXJu KDApOwkJCS8qIERvbmUgKi8KLSAgICB9Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLX0KLSAgICBi cmVhazsKLWNhc2UgMzY6Ci0gICAgewkJCQkvKiBFWElUICovCi0jaWZuZGVmIE5PU0VSVkVSCi0j aWZkZWYgQ0tTWVNMT0cKLSAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dp bmcpCi0gICAgICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJSRU1PVEUgRVhJVCIs IE5VTEwpOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0jaWZkZWYgSUtTREIKLSAgICBpZiAoaWtk Ym9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJSRU1PVEUgRVhJVCIsICIiLCAiIik7Ci0jZW5kaWYgLyog SUtTREIgKi8KLSAgICBpZiAoIUVOQUJMRUQoZW5feGl0KSkgewotCWVycnBrdCgoQ0hBUiAqKSJF WElUIGRpc2FibGVkIik7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSB7Ci0JYWNrKCk7CQkJCS8qIEFj a25vd2xlZGdlICovCi0JeHhzY3JlZW4oU0NSX1RDLDAsMEwsIiIpOwkvKiBEaXNwbGF5ICovCi0J ZG9leGl0KEdPT0RfRVhJVCx4aXRzdGEpOwotICAgIH0KLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwot fQotICAgIGJyZWFrOwotY2FzZSAzNzoKLSAgICB7CQkJCS8qIEJZRSAoTG9nb3V0KSAqLwotI2lm bmRlZiBOT1NFUlZFUgotI2lmZGVmIENLU1lTTE9HCi0gICAgaWYgKGNreHN5c2xvZyA+PSBTWVNM R19QUiAmJiBja3hsb2dnaW5nKQotICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIi LCAiQllFIiwgTlVMTCk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSNpZmRlZiBJS1NEQgotICAg IGlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsIlNFUlZFUiBCWUUiLCAiIiwgIiIpOwotI2Vu ZGlmIC8qIElLU0RCICovCi0gICAgaWYgKCFFTkFCTEVEKGVuX2J5ZSkpIHsKLQllcnJwa3QoKENI QVIgKikiQllFIGRpc2FibGVkIik7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSB7Ci0JYWNrKCk7CQkJ CS8qIEFja25vd2xlZGdlICovCi0Jc3VjY2VzcyA9IDE7Ci0JbXNsZWVwKDc1MCk7CQkJLyogR2l2 ZSB0aGUgQUNLIHRpbWUgdG8gZ2V0IG91dCAqLwotCWlmIChsb2NhbCkKLQkgIHR0cmVzKCk7CQkJ LyogUmVzZXQgdGhlIHRlcm1pbmFsICovCi0JeHhzY3JlZW4oU0NSX1RDLDAsMEwsIiIpOwkvKiBE aXNwbGF5ICovCi0JZG9jbGVhbigxKTsJCQkvKiBDbGVhbiB1cCBmaWxlcywgZXRjICovCi0jaWZk ZWYgREVCVUcKLQlkZWJ1ZyhGMTAwLCJDLUtlcm1pdCBCWUUgLSBMb2dnaW4gb3V0Li4uIiwiIiww KTsKLQl6Y2xvc2UoWkRGSUxFKTsKLSNlbmRpZiAvKiBERUJVRyAqLwotI2lmZGVmIElLU0QKLSNp ZmRlZiBDS19MT0dJTgotCWlmIChpbnNlcnZlcikKLQkgIGNreGxvZ291dCgpOwotCWVsc2UKLSNl bmRpZiAvKiBDS19MT0dJTiAqLwotI2VuZGlmIC8qIElLU0QgKi8KLSNpZmRlZiBUQ1BTT0NLRVQK LSNpZm5kZWYgTk9MSVNURU4KLQkgIGlmIChuZXR3b3JrICYmIHRjcHNyZmQgPiAwICYmICFpbnNl cnZlcikKLQkgICAgZG9leGl0KEdPT0RfRVhJVCx4aXRzdGEpOwotCWVsc2UKLSNlbmRpZiAvKiBO T0xJU1RFTiAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotCSAgcmV0dXJuKHprc2VsZigpKTsJ CS8qIFRyeSB0byBsb2cgc2VsZiBvdXQgKi8KLSAgICB9Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8K LX0KLSAgICBicmVhazsKLWNhc2UgMzg6Ci0gICAgewkJCQkvKiBSRU1PVEUgSEVMUCAqLwotI2lm ZGVmIENLU1lTTE9HCi0gICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5n KQotICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiUkVNT1RFIEhFTFAiLCBO VUxMKTsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotI2lmZGVmIElLU0RCCi0gICAgaWYgKGlrZGJv cGVuKSBzbG90c3RhdGUod2hhdCwiUkVNT1RFIEhFTFAiLCAiIiwgIiIpOwotI2VuZGlmIC8qIElL U0RCICovCi0jaWZuZGVmIE5PU0VSVkVSCi0gICAgaWYgKHNuZGhscCgpKSB7Ci0JQkVHSU4gc3Np bml0OwkJCS8qIHRyeSB0byBzZW5kIGl0ICovCi0gICAgfSBlbHNlIHsJCQkJLyogSWYgbm90IG9r LCAqLwotCWVycnBrdCgoQ0hBUiAqKSJDYW4ndCBzZW5kIGhlbHAiKTsgLyogc2VuZCBlcnJvciBt ZXNzYWdlIGluc3RlYWQgKi8KLQlSRVNVTUU7CQkJCS8qIGFuZCByZXR1cm4gdG8gc2VydmVyIGNv bW1hbmQgd2FpdCAqLwotICAgIH0KLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotfQotICAgIGJyZWFr OwotY2FzZSAzOToKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJFTU9URSBS RU5BTUUgKi8KLSAgICByYyA9IHNydl9yZW5hbWUoKTsKLSAgICBkZWJ1ZyhGMTAxLCJzcnZfcmVu YW1lIiwiIixyYyk7Ci0gICAgaWYgKHJjID4gLTEpIHJldHVybihyYyk7CQkvKiAoc2VlIGJlbG93 KSAqLwotfQotICAgIGJyZWFrOwotY2FzZSA0MDoKLSAgICB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFJFTU9URSBDT1BZICovCi0gICAgcmMgPSBzcnZfY29weSgpOwotICAgIGRlYnVn KEYxMDEsInNydl9jb3B5IiwiIixyYyk7Ci0gICAgaWYgKHJjID4gLTEpIHJldHVybihyYyk7CQkv KiAoc2VlIGJlbG93KSAqLwotfQotICAgIGJyZWFrOwotY2FzZSA0MToKLSAgICB7CQkJCS8qIFJF TU9URSBTRVQgKi8KLSNpZmRlZiBDS1NZU0xPRwotICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdf UFIgJiYgY2t4bG9nZ2luZykKLSAgICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwg IlJFTU9URSBTRVQiLCAoY2hhciAqKXNydmNtZCk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSNp Zm5kZWYgTk9TRVJWRVIKLSNpZmRlZiBJS1NEQgotICAgIGlmIChpa2Rib3Blbikgc2xvdHN0YXRl KHdoYXQsIlJFTU9URSBTRVQiLCAoY2hhciAqKShzcnZjbWQrMSksICIiKTsKLSNlbmRpZiAvKiBJ S1NEQiAqLwotICAgIGlmICghRU5BQkxFRChlbl9zZXQpKSB7Ci0JZXJycGt0KChDSEFSICopIlJF TU9URSBTRVQgZGlzYWJsZWQiKTsKLQlSRVNVTUU7Ci0gICAgfSBlbHNlIHsKLQlpZiAocmVtc2V0 KChjaGFyICopKHNydmNtZCsxKSkpIHsgLyogVHJ5IHRvIGRvIHdoYXQgdGhleSBhc2sgKi8KLQkg ICAgc3VjY2VzcyA9IDE7Ci0JICAgIGFjaygpOwkJCS8qIElmIE9LLCB0aGVuIGFja25vd2xlZGdl ICovCi0JfSBlbHNlCQkJCS8qIE90aGVyd2lzZSAqLwotCSAgZXJycGt0KChDSEFSICopIlVua25v d24gUkVNT1RFIFNFVCBwYXJhbWV0ZXIiKTsgLyogZ2l2ZSBlcnJvciBtc2cgKi8KLQlSRVNVTUU7 CQkJCS8qIFJldHVybiB0byBzZXJ2ZXIgY29tbWFuZCB3YWl0ICovCi0gICAgfQotI2VuZGlmIC8q IE5PU0VSVkVSICovCi19Ci0gICAgYnJlYWs7Ci1jYXNlIDQyOgotICAgIHsJCQkJLyogUkVNT1RF IFRZUEUgKi8KLSNpZm5kZWYgTk9TRVJWRVIKLSAgICBjaGFyICpuMjsKLSNpZmRlZiBDS1NZU0xP RwotICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKLSAgICAgIGNr c3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIlJFTU9URSBUWVBFIiwgKGNoYXIgKilzcnZj bWQpOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgaWYgKCFFTkFCTEVEKGVuX3R5cCkpIHsK LQllcnJwa3QoKENIQVIgKikiUkVNT1RFIFRZUEUgZGlzYWJsZWQiKTsKLQlSRVNVTUU7Ci0gICAg fSBlbHNlIHsKLSNpZmRlZiBJS1NEQgotCWlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsIlJF TU9URSBUWVBFIiwgKGNoYXIgKikoc3J2Y21kKzIpLCAiIik7Ci0jZW5kaWYgLyogSUtTREIgKi8K LQlpZiAoIUVOQUJMRUQoZW5fY3dkKSkgewkJLyogSWYgQ1dEIGRpc2FibGVkICovCi0JICAgIHpz dHJpcCgoY2hhciAqKShzcnZjbWQrMiksJm4yKTsgLyogYW5kIHRoZXkgaW5jbHVkZWQgYSBwYXRo bmFtZSwgKi8KLQkgICAgaWYgKHN0cmNtcCgoY2hhciAqKShzcnZjbWQrMiksbjIpKSB7IC8qIHJl ZnVzZS4gKi8KLQkJZXJycGt0KChDSEFSICopIkFjY2VzcyBkZW5pZWQiKTsKLQkJUkVTVU1FOwkJ CS8qIFJlbWVtYmVyLCB0aGlzIGlzIG5vdCBhIGdvdG8hICovCi0JICAgIH0KLQl9Ci0JaWYgKHN0 YXRlID09IGdlbmVyaWMpIHsJCS8qIEl0J3MgT0sgdG8gZ28gYWhlYWQuICovCi0JICAgIGJpbmFy eSA9IFhZRlRfVDsJCS8qIFVzZSB0ZXh0IG1vZGUgZm9yIHRoaXMuICovCi0JICAgIGlmICgJCQkv KiAoUkVTVU1FIGRpZG4ndCBjaGFuZ2Ugc3RhdGUpICovCi0jaWZkZWYgQ09NTUVOVAotCSAgICAg IHN5c2NtZChUWVBDTUQsKGNoYXIgKikoc3J2Y21kKzIpKQkvKiBPbGQgd2F5ICovCi0jZWxzZQot CSAgICAgIHNuZHR5cGUoKGNoYXIgKikoc3J2Y21kKzIpKSAvKiBOZXcgd2F5ICovCi0jZW5kaWYg LyogQ09NTUVOVCAqLwotCQkpCi0JICAgICAgQkVHSU4gc3Npbml0OwkJLyogT0sgKi8KLQkgICAg ZWxzZSB7CQkJLyogbm90IE9LICovCi0JCWVycnBrdCgoQ0hBUiAqKSJDYW4ndCB0eXBlIGZpbGUi KTsgLyogZ2l2ZSBlcnJvciBtZXNzYWdlICovCi0JCVJFU1VNRTsJCQkvKiB3YWl0IGZvciBuZXh0 IHNlcnZlciBjb21tYW5kICovCi0JICAgIH0KLQl9Ci0gICAgfQotI2VuZGlmIC8qIE5PU0VSVkVS ICovCi19Ci0gICAgYnJlYWs7Ci1jYXNlIDQzOgotICAgIHsJCQkJLyogUkVNT1RFIE1LRElSICov Ci0jaWZuZGVmIE5PU0VSVkVSCi0jaWZkZWYgQ0tfTUtESVIKLSNpZmRlZiBDS1NZU0xPRwotICAg IGlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKLSAgICAgIGNrc3lzbG9n KFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIlJFTU9URSBNS0RJUiIsIChjaGFyICopc3J2Y21kKTsK LSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotI2lmZGVmIElLU0RCCi0gICAgaWYgKGlrZGJvcGVuKSBz bG90c3RhdGUod2hhdCwiUkVNT1RFIE1LRElSIiwgKGNoYXIgKikoc3J2Y21kKzIpLCAiIik7Ci0j ZW5kaWYgLyogSUtTREIgKi8KLSAgICBpZiAoIUVOQUJMRUQoZW5fbWtkKSkgewotCWVycnBrdCgo Q0hBUiAqKSJSRU1PVEUgTUtESVIgZGlzYWJsZWQiKTsKLQlSRVNVTUU7Ci0gICAgfSBlbHNlIGlm ICghRU5BQkxFRChlbl9jd2QpKSB7CS8qIElmIENXRCBkaXNhYmxlZCAqLwotCWVycnBrdCgoQ0hB UiAqKSJEaXJlY3RvcnkgYWNjZXNzIHJlc3RyaWN0ZWQiKTsKLQlSRVNVTUU7CQkJCS8qIFJlbWVt YmVyLCB0aGlzIGlzIG5vdCBhIGdvdG8hICovCi0gICAgfQotICAgIGlmIChzdGF0ZSA9PSBnZW5l cmljKSB7CQkvKiBPSyB0byBnbyBhaGVhZC4gKi8KLQljaGFyICpwID0gTlVMTDsKLQl4ID0gY2tt a2RpcigwLChjaGFyICopKHNydmNtZCsyKSwmcCwwLDEpOyAvKiBNYWtlIHRoZSBkaXJlY3Rvcnkg Ki8KLQlpZiAoIXApIHAgPSAiIjsKLQlpZiAoeCA+IC0xKSB7Ci0JICAgIGVuY3N0cigoQ0hBUiAq KXApOwkJLyogT0sgLSBlbmNvZGUgdGhlIG5hbWUgKi8KLQkgICAgYWNrMShkYXRhKTsJCQkvKiBT ZW5kIHNob3J0LWZvcm0gcmVzcG9uc2UgKi8KLQkgICAgc3VjY2VzcyA9IDE7Ci0JICAgIFJFU1VN RTsKLQl9IGVsc2UgewkJCS8qIG5vdCBPSyAqLwotCSAgICBpZiAoISpwKSBwID0gIkRpcmVjdG9y eSBjcmVhdGlvbiBmYWlsdXJlIjsKLQkgICAgZXJycGt0KChDSEFSICopcCk7CQkvKiBnaXZlIGVy cm9yIG1lc3NhZ2UgKi8KLQkgICAgUkVTVU1FOwkJCS8qIFdhaXQgZm9yIG5leHQgc2VydmVyIGNv bW1hbmQgKi8KLQl9Ci0gICAgfQotI2Vsc2UKLSAgICBlcnJwa3QoKENIQVIgKikiUkVNT1RFIE1L RElSIG5vdCBhdmFpbGFibGUiKTsKLSAgICBSRVNVTUU7Ci0jZW5kaWYgLyogQ0tfTUtESVIgKi8K LSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotfQotICAgIGJyZWFrOwotY2FzZSA0NDoKLSAgICB7CQkJ CS8qIFJFTU9URSBSTURJUiAqLwotI2lmbmRlZiBOT1NFUlZFUgotI2lmZGVmIENLX01LRElSCi0j aWZkZWYgQ0tTWVNMT0cKLSAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dp bmcpCi0gICAgICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJSRU1PVEUgUk1ESVIi LCAoY2hhciAqKXNydmNtZCk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSNpZmRlZiBJS1NEQgot ICAgIGlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsIlJFTU9URSBSTURJUiIsIChjaGFyICop KHNydmNtZCsyKSwgIiIpOwotI2VuZGlmIC8qIElLU0RCICovCi0gICAgaWYgKCFFTkFCTEVEKGVu X3JtZCkpIHsKLQllcnJwa3QoKENIQVIgKikiUkVNT1RFIFJNRElSIGRpc2FibGVkIik7Ci0JUkVT VU1FOwotICAgIH0gZWxzZSBpZiAoIUVOQUJMRUQoZW5fY3dkKSkgewkvKiBJZiBDV0QgZGlzYWJs ZWQgKi8KLQllcnJwa3QoKENIQVIgKikiRGlyZWN0b3J5IGFjY2VzcyByZXN0cmljdGVkIik7Ci0J UkVTVU1FOwkJCQkvKiBSZW1lbWJlciwgdGhpcyBpcyBub3QgYSBnb3RvISAqLwotICAgIH0KLSAg ICBpZiAoc3RhdGUgPT0gZ2VuZXJpYykgewkJLyogT0sgdG8gZ28gYWhlYWQuICovCi0JY2hhciAq cCA9IE5VTEw7Ci0JeCA9IGNrbWtkaXIoMSwoY2hhciAqKShzcnZjbWQrMiksJnAsMCwxKTsKLQlp ZiAoIXApIHAgPSAiIjsKLQlpZiAoeCA+IC0xKSB7Ci0JICAgIGVuY3N0cigoQ0hBUiAqKXApOwkJ LyogT0sgLSBlbmNvZGUgdGhlIG5hbWUgKi8KLQkgICAgYWNrMShkYXRhKTsJCQkvKiBTZW5kIHNo b3J0LWZvcm0gcmVzcG9uc2UgKi8KLQkgICAgc3VjY2VzcyA9IDE7Ci0JICAgIFJFU1VNRTsKLQl9 IGVsc2UgewkJCS8qIG5vdCBPSyAqLwotCSAgICBpZiAoISpwKSBwID0gIkRpcmVjdG9yeSByZW1v dmFsIGZhaWx1cmUiOwotCSAgICBlcnJwa3QoKENIQVIgKilwKTsJCS8qIGdpdmUgZXJyb3IgbWVz c2FnZSAqLwotCSAgICBSRVNVTUU7CQkJLyogV2FpdCBmb3IgbmV4dCBzZXJ2ZXIgY29tbWFuZCAq LwotCX0KLSAgICB9Ci0jZWxzZQotICAgIGVycnBrdCgoQ0hBUiAqKSJSRU1PVEUgUk1ESVIgbm90 IGF2YWlsYWJsZSIpOwotICAgIFJFU1VNRTsKLSNlbmRpZiAvKiBDS19NS0RJUiAqLwotI2VuZGlm IC8qIE5PU0VSVkVSICovCi19Ci0gICAgYnJlYWs7Ci1jYXNlIDQ1OgotICAgIHsJCQkJLyogUkVN T1RFIFNQQUNFICovCi0jaWZuZGVmIE5PU0VSVkVSCi0jaWZkZWYgQ0tTWVNMT0cKLSAgICBpZiAo Y2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCi0gICAgICBja3N5c2xvZyhTWVNM R19QUiwgMSwgInNlcnZlciIsICJSRU1PVEUgU1BBQ0UiLCAoY2hhciAqKXNydmNtZCk7Ci0jZW5k aWYgLyogQ0tTWVNMT0cgKi8KLSAgICBpZiAoIUVOQUJMRUQoZW5fc3BhKSkgewotCWVycnBrdCgo Q0hBUiAqKSJSRU1PVEUgU1BBQ0UgZGlzYWJsZWQiKTsKLQlSRVNVTUU7Ci0gICAgfSBlbHNlIHsK LQl4ID0gc3J2Y21kWzFdOwkJCS8qIEdldCBhcmVhIHRvIGNoZWNrICovCi0JeCA9ICgoeCA9PSBO VUwpIHx8ICh4ID09IFNQKQotI2lmZGVmIE9TMgotCSAgICAgfHwgKHggPT0gJyEnKSB8fCAoc3J2 Y21kWzNdID09ICc6JykKLSNlbmRpZiAvKiBPUzIgKi8KLQkgICAgICk7Ci0jaWZkZWYgSUtTREIK LQlpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LAotCQkJICAgICAgIlJFTU9URSBTUEFDRSIs Ci0JCQkgICAgICAoeCA/ICIiIDogKGNoYXIgKilzcnZjbWQpLAotCQkJICAgICAgIiIKLQkJCSAg ICAgICk7Ci0jZW5kaWYgLyogSUtTREIgKi8KLQlpZiAoIXggJiYgIUVOQUJMRUQoZW5fY3dkKSkg ewkvKiBDV0QgZGlzYWJsZWQgKi8KLQkgICAgZXJycGt0KChDSEFSICopIkFjY2VzcyBkZW5pZWQi KTsgLyogYW5kIG5vbi1kZWZhdWx0IGFyZWEgZ2l2ZW4sICovCi0JICAgIFJFU1VNRTsJCQkvKiBy ZWZ1c2UuICovCi0JfSBlbHNlIHsKLSNpZmRlZiBPUzIKLV9QUk9UT1RZUChpbnQgc25kc3BhY2Us KGludCkpOwotCSAgICBpZiAoc25kc3BhY2UoeCA/IHRvdXBwZXIoc3J2Y21kWzJdKSA6IDApKSB7 Ci0JCUJFR0lOIHNzaW5pdDsJCS8qIHNlbmQgdGhlIHJlcG9ydC4gKi8KLQkgICAgfSBlbHNlIHsJ CQkvKiBJZiBub3Qgb2ssICovCi0JCWVycnBrdCgoQ0hBUiAqKSJDYW4ndCBzZW5kIHNwYWNlIik7 IC8qIHNlbmQgZXJyb3IgbWVzc2FnZSAqLwotCQlSRVNVTUU7CQkJLyogYW5kIHJldHVybiB0byBz ZXJ2ZXIgY29tbWFuZCB3YWl0ICovCi0JICAgIH0KLSNlbHNlCi0gICAgICAgICAgICBpZiAobm9w dXNoKQotICAgICAgICAgICAgICB4ID0gMDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg ICAgeCA9ICh4ID8gc3lzY21kKFNQQUNNRCwiIikgOiBzeXNjbWQoU1BBQ00yLChjaGFyICopKHNy dmNtZCsyKSkpOwotCSAgICBpZiAoeCkgewkJCS8qIElmIHdlIGdvdCB0aGUgaW5mbyAqLwotCQlC RUdJTiBzc2luaXQ7CQkvKiBzZW5kIGl0ICovCi0JICAgIH0gZWxzZSB7CQkJLyogb3RoZXJ3aXNl ICovCi0JCWVycnBrdCgoQ0hBUiAqKSJDYW4ndCBjaGVjayBzcGFjZSIpOyAvKiBzZW5kIGVycm9y IG1lc3NhZ2UgKi8KLQkJUkVTVU1FOwkJCS8qIGFuZCBhd2FpdCBuZXh0IHNlcnZlciBjb21tYW5k ICovCi0JICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLQl9Ci0gICAgfQotI2VuZGlmIC8qIE5PU0VS VkVSICovCi19Ci0gICAgYnJlYWs7Ci1jYXNlIDQ2OgotICAgIHsJCQkJLyogUkVNT1RFIFdITyAq LwotI2lmbmRlZiBOT1NFUlZFUgotI2lmZGVmIENLU1lTTE9HCi0gICAgaWYgKGNreHN5c2xvZyA+ PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQotICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJz ZXJ2ZXIiLCAiUkVNT1RFIFdITyIsIChjaGFyICopc3J2Y21kKTsKLSNlbmRpZiAvKiBDS1NZU0xP RyAqLwotI2lmZGVmIElLU0RCCi0gICAgaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiUkVN T1RFIFdITyIsIChjaGFyICopKHNydmNtZCsyKSwgIiIpOwotI2VuZGlmIC8qIElLU0RCICovCi0g ICAgaWYgKCFFTkFCTEVEKGVuX3dobykpIHsKLQllcnJwa3QoKENIQVIgKikiUkVNT1RFIFdITyBk aXNhYmxlZCIpOwotCVJFU1VNRTsKLSAgICB9IGVsc2UgewotI2lmZGVmIE9TMgotX1BST1RPVFlQ KGludCBzbmR3aG8sKGNoYXIgKikpOwotCSAgICBpZiAoc25kd2hvKChjaGFyICopKHNydmNtZCsy KSkpIHsKLQkJQkVHSU4gc3Npbml0OwkJLyogdHJ5IHRvIHNlbmQgaXQgKi8KLQkgICAgfSBlbHNl IHsJCQkvKiBJZiBub3Qgb2ssICovCi0JCWVycnBrdCgoQ0hBUiAqKSJDYW4ndCBkbyB3aG8gY29t bWFuZCIpOyAvKiBzZW5kIGVycm9yIG1zZyAqLwotCQlSRVNVTUU7CQkJLyogYW5kIHJldHVybiB0 byBzZXJ2ZXIgY29tbWFuZCB3YWl0ICovCi0JICAgIH0KLSNlbHNlCi0JaWYgKHN5c2NtZChXSE9D TUQsKGNoYXIgKikoc3J2Y21kKzIpKSkgewotCSAgICBCRUdJTiBzc2luaXQ7Ci0JfSBlbHNlIHsK LQkgICAgZXJycGt0KChDSEFSICopIkNhbid0IGRvIHdobyBjb21tYW5kIik7Ci0JICAgIFJFU1VN RTsKLQl9Ci0jZW5kaWYgLyogT1MyICovCi0gICAgfQotI2VuZGlmIC8qIE5PU0VSVkVSICovCi19 Ci0gICAgYnJlYWs7Ci1jYXNlIDQ3OgotICAgIHsJCQkJLyogVmFyaWFibGUgcXVlcnkgb3Igc2V0 ICovCi0gICAgcmMgPSBzcnZfcXVlcnkoKTsKLSAgICBkZWJ1ZyhGMTAxLCJzcnZfcXVlcnkiLCIi LHJjKTsKLSAgICBpZiAocmMgPiAtMSkgcmV0dXJuKHJjKTsKLX0KLSAgICBicmVhazsKLWNhc2Ug NDg6Ci0gICAgewkJCQkvKiBSRU1PVEUgTUVTU0FHRSBjb21tYW5kICovCi0jaWZuZGVmIE5PU0VS VkVSCi0gICAgZGVidWcoRjExMCwiUk1TRyIsKGNoYXIgKilzcnZjbWQrMiwwKTsKLSAgICB4eHNj cmVlbihTQ1JfTVMsMCwwTCwoY2hhciAqKShzcnZjbWQrMikpOwotICAgIGFjaygpOwotICAgIFJF U1VNRTsKLSNlbmRpZgkvKiBOT1NFUlZFUiAqLwotfQotICAgIGJyZWFrOwotY2FzZSA0OToKLSAg ICB7CQkJCS8qIEludGVycnVwdGVkIG9yIGNvbm5lY3Rpb24gbG9zdCAqLwotI2lmbmRlZiBOT1NF UlZFUgotICAgIGlmIChmYXRhbGlvKSB7CQkJLyogQ29ubmVjdGlvbiBsb3N0ICovCi0jaWZkZWYg Q0tTWVNMT0cKLQlpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCi0JICBj a3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJJbnRlcnJ1cHRlZCIsIE5VTEwpOwotI2Vu ZGlmIC8qIENLU1lTTE9HICovCi0Jc3VjY2VzcyA9IDA7Ci0JeGl0c3RhIHw9ICh3aGF0ICYgV19L RVJNSVQpOwotCVFVSVQ7Ci0gICAgfSBlbHNlIGlmIChpbnRlcnJ1cHRlZCkgewotCWlmICghRU5B QkxFRChlbl9maW4pKSB7CQkvKiBDdHJsLUMgdHlwZWQgKi8KLQkgICAgZXJycGt0KChDSEFSICop IlFVSVQgZGlzYWJsZWQiKTsKLQkgICAgUkVTVU1FOwotCX0gZWxzZSB7Ci0jaWZkZWYgQ0tTWVNM T0cKLQkgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQotCSAgICAg IGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIkludGVycnVwdGVkIiwgTlVMTCk7Ci0j ZW5kaWYgLyogQ0tTWVNMT0cgKi8KLQkgICAgc3VjY2VzcyA9IDA7Ci0JICAgIHhpdHN0YSB8PSAo d2hhdCAmIFdfS0VSTUlUKTsKLQkgICAgUVVJVDsKLQl9Ci0gICAgfSBlbHNlIHsJCQkJLyogU2hv dWxkbid0IGhhcHBlbiAqLwotCWRlYnVnKEYxMDAsIlNFUlZFUiAoZ2VuZXJpYykgR09UIFVORVhQ RUNURUQgJ3EnIiwiIiwwKTsKLQlRVUlUOwotICAgIH0KLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwot fQotICAgIGJyZWFrOwotY2FzZSA1MDoKLSAgICB7CQkJCS8qIEFueXRoaW5nIGVsc2UgaW4gdGhp cyBzdGF0ZS4uLiAqLwotI2lmbmRlZiBOT1NFUlZFUgotICAgIGVycnBrdCgoQ0hBUiAqKSJVbmlt cGxlbWVudGVkIFJFTU9URSBjb21tYW5kIik7IC8qIENvbXBsYWluICovCi0gICAgUkVTVU1FOwkJ CQkvKiBhbmQgcmV0dXJuIHRvIHNlcnZlciBjb21tYW5kIHdhaXQgKi8KLSNlbmRpZiAvKiBOT1NF UlZFUiAqLwotfQotICAgIGJyZWFrOwotY2FzZSA1MToKLSAgICB7CQkJCS8qIFNlbnQgQllFIGFu ZCBjb25uZWN0aW9uIGJyb2tlbiAqLwotICAgIGlmIChieWVfYWN0aXZlICYmIHR0Y2hrKCkgPCAw KSB7Ci0JbXNsZWVwKDUwMCk7Ci0JYnllX2FjdGl2ZSA9IDA7Ci0JdHRjbG9zKDApOwkJCS8qIENs b3NlIG91ciBlbmQgb2YgdGhlIGNvbm5lY3Rpb24gKi8KLQljbHNvZigwKTsKLQlyZXR1cm4oc3Vj Y2VzcyA9IDEpOwotICAgIH0gZWxzZSB7CQkJCS8qIE90aGVyIGdlbmVyaWMgY29tbWFuZCAqLwot CXJldHVybihzdWNjZXNzID0gMCk7CQkvKiBvciBjb25uZWN0aW9uIG5vdCBicm9rZW4gKi8KLSAg ICB9Ci19Ci0gICAgYnJlYWs7Ci1jYXNlIDUyOgotICAgIHsJCQkJLyogU2hvcnQtRm9ybSByZXBs eSAqLwotICAgIHJjID0gcmN2X3Nob3J0cmVwbHkoKTsKLSAgICBkZWJ1ZyhGMTAxLCI8cmdlbj5Z IHJjdl9zaG9ydHJlcGx5IiwiIixyYyk7Ci0gICAgaWYgKHJjID4gLTEpIHJldHVybihyYyk7Ci19 Ci0gICAgYnJlYWs7Ci1jYXNlIDUzOgotICAgIHsJCQkJLyogRmlsZSBoZWFkZXIgKi8KLSAgICAv KiBjaGFyICpuMjsgKi8KLSAgICBleHRlcm4gaW50IHJzbjsKLSAgICBkZWJ1ZyhGMTAxLCI8cmZp bGU+RiB3aW5sbyAxIiwiIix3aW5sbyk7Ci0gICAgeGZsZyA9IDA7CQkJCS8qIE5vdCBzY3JlZW4g ZGF0YSAqLwotICAgIGlmICghY3pzZWVuKQotICAgICAgY2FuY2VsID0gMDsJCQkvKiBSZXNldCBj YW5jZWxsYXRpb24gY291bnRlciAqLwotI2lmZGVmIENBTElCUkFURQotICAgIGlmIChkZXN0ID09 IERFU1RfTikKLSAgICAgIGNhbGlicmF0ZSA9IDE7Ci0jZW5kaWYgLyogQ0FMSUJSQVRFICovCi0g ICAgaWYgKCFyY3ZmaWwoZmlsbmFtKSkgewkJLyogRmlndXJlIG91dCBsb2NhbCBmaWxlbmFtZSAq LwotCWVycnBrdCgoQ0hBUiAqKXJmX2Vycik7CQkvKiBUcm91YmxlICovCi0JUkVTVU1FOwotICAg IH0gZWxzZSB7CQkJCS8qIFJlYWwgZmlsZSwgT0sgdG8gcmVjZWl2ZSAqLwotCWNoYXIgKiBmbnA7 Ci0JZGVidWcoRjExMSwiPHJmaWxlPkYgd2lubG8gMiIsZnNwZWMsd2lubG8pOwotCWlmIChmaWxj bnQgPT0gMSkJCS8qIHJjdmZpbCBzZXQgdGhpcyB0byAxIGZvciAxc3QgZmlsZSAqLwotCSAgY3Jj MTYgPSAwTDsJCQkvKiBDbGVhciBmaWxlIENSQyAqLwotCWZucCA9IGZzcGVjOwkJCS8qIFRoaXMg aXMgdGhlIGZ1bGwgcGF0aCAqLwotCWlmIChzZXJ2ZXIgJiYgIUVOQUJMRUQoZW5fY3dkKSB8fCAv KiBpZiBESVNBQkxFIENEICovCi0JICAgICFmYWNrcGF0aAkJCSAgLyogb3IgRi1BQ0stUEFUSCBP RkYgKi8KLQkgICAgKSB7Ci0JICAgIHpzdHJpcChmc3BlYywmZm5wKTsJCS8qIGRvbid0IHNlbmQg YmFjayBmdWxsIHBhdGggKi8KLQl9Ci0JZW5jc3RyKChDSEFSICopZm5wKTsKLQlpZiAoZmFja2J1 ZykKLQkgIGFjaygpOwotCWVsc2UKLQkgIGFjazEoZGF0YSk7CQkJLyogU2VuZCBpdCBiYWNrIGlu IEFDSyAqLwotCWluaXRhdHRyKCZpYXR0cik7CQkvKiBDbGVhciBmaWxlIGF0dHJpYnV0ZSBzdHJ1 Y3R1cmUgKi8KLQlzdHJlYW1vbigpOwotCWlmICh3aW5kb3cod3Nsb3RuKSA8IDApIHsJLyogQWxs b2NhdGUgbmVnb3RpYXRlZCB3aW5kb3cgc2xvdHMgKi8KLQkgICAgZXJycGt0KChDSEFSICopIkNh bid0IG9wZW4gd2luZG93Iik7Ci0JICAgIFJFU1VNRTsKLQl9Ci0jaWZkZWYgSUtTREIKLQlpZiAo aWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LAotCQkJICAgICAgc2VydmVyID8gIlNFUlZFUiIgOiAi IiwKLQkJCSAgICAgICJSRUNFSVZFIiwKLQkJCSAgICAgIGZzcGVjCi0JCQkgICAgICApOwotI2Vu ZGlmIC8qIElLU0RCICovCi0JQkVHSU4gcmF0dHI7CQkJLyogTm93IGV4cGVjdCBBdHRyaWJ1dGUg cGFja2V0cyAqLwotICAgIH0KLX0KLSAgICBicmVhazsKLWNhc2UgNTQ6Ci0gICAgewkJCQkvKiBY LXBhY2tldCBpbnN0ZWFkIG9mIGZpbGUgaGVhZGVyICovCi0gICAgeGZsZyA9IDE7CQkJCS8qIFNj cmVlbiBkYXRhICovCi0gICAgaWYgKCFjenNlZW4pCi0gICAgICBjYW5jZWwgPSAwOwkJCS8qIFJl c2V0IGNhbmNlbGxhdGlvbiBjb3VudGVyICovCi0gICAgYWNrKCk7CQkJCS8qIEFja25vd2xlZGdl IHRoZSBYLXBhY2tldCAqLwotICAgIGluaXRhdHRyKCZpYXR0cik7CQkJLyogSW5pdGlhbGl6ZSBh dHRyaWJ1dGUgc3RydWN0dXJlICovCi0gICAgc3RyZWFtb24oKTsKLSAgICBpZiAod2luZG93KHdz bG90bikgPCAwKSB7CQkvKiBhbGxvY2F0ZSBuZWdvdGlhdGVkIHdpbmRvdyBzbG90cyAqLwotCWVy cnBrdCgoQ0hBUiAqKSJDYW4ndCBvcGVuIHdpbmRvdyIpOwotCVJFU1VNRTsKLSAgICB9Ci0jaWZu ZGVmIE5PU1BMCi0gICAgaWYgKHF1ZXJ5KSB7CQkJLyogSWYgdGhpcyBpcyB0aGUgcmVzcG9uc2Ug dG8gKi8KLQlxYnVmcCA9IHF1ZXJ5YnVmOwkJLyogYSBxdWVyeSB0aGF0IHdlIHNlbnQsIGluaXRp YWxpemUgKi8KLQlxYnVmbiA9IDA7CQkJLyogdGhlIHJlc3BvbnNlIGJ1ZmZlciAqLwotCXF1ZXJ5 YnVmWzBdID0gTlVMOwotICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgIHdoYXQgPSBXX1JF TU87CQkJLyogd2UncmUgZG9pbmcgYSBSRU1PVEUgY29tbWFuZCAqLwotI2lmZGVmIElLU0RCCi0g ICAgaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwKLQkJCSAgc2VydmVyID8gIlNFUlZFUiIg OiAiIiwKLQkJCSAgIlJFQ0VJVkUiLAotCQkJICBmc3BlYwotCQkJICApOwotI2VuZGlmIC8qIElL U0RCICovCi0gICAgQkVHSU4gcmF0dHI7CQkJLyogRXhwZWN0IEF0dHJpYnV0ZSBwYWNrZXRzICov Ci19Ci0gICAgYnJlYWs7Ci1jYXNlIDU1OgotICAgIHsJCQkJLyogQXR0cmlidXRlIHBhY2tldCAq LwotICAgIGlmIChnYXR0cihyZGF0YXAsJmlhdHRyKSA9PSAwKSB7CS8qIFJlYWQgaW50byBhdHRy aWJ1dGUgc3RydWN0dXJlICovCi0jaWZkZWYgQ0tfUkVTRU5ECi0JYWNrMSgoQ0hBUiAqKWlhdHRy LnJlcGx5LnZhbCk7CS8qIFJlcGx5IHdpdGggZGF0YSAqLwotI2Vsc2UKLQlhY2soKTsJCQkJLyog SWYgT0ssIGFja25vd2xlZGdlICovCi0jZW5kaWYgLyogQ0tfUkVTRU5EICovCi0gICAgfSBlbHNl IHsJCQkJLyogT3RoZXJ3aXNlICovCi0JZXh0ZXJuIGxvbmcgZnNpemU7Ci0JY2hhciAqcjsKLQly ID0gZ2V0cmVhc29uKGlhdHRyLnJlcGx5LnZhbCk7Ci0JYWNrMSgoQ0hBUiAqKWlhdHRyLnJlcGx5 LnZhbCk7CS8qIHJlZnVzZSB0byBhY2NlcHQgdGhlIGZpbGUgKi8KLQl4eHNjcmVlbihTQ1JfU1Qs U1RfUkVGVSwwTCxyKTsJLyogcmVhc29uICovCi0jaWZkZWYgVExPRwotCWlmICh0cmFsb2cgJiYg IXRsb2dmbXQpCi0JICBkb3hsb2cod2hhdCxmaWxuYW0sZnNpemUsYmluYXJ5LDEscik7Ci0jZW5k aWYgLyogVExPRyAqLwotICAgIH0KLX0KLSAgICBicmVhazsKLWNhc2UgNTY6Ci0gICAgewkJCQkv KiBGaXJzdCBkYXRhIHBhY2tldCAqLwotICAgIGRlYnVnKEYxMDAsIjxyYXR0cj4gRCBmaXJzdGRh dGEiLCIiLDApOwotICAgIHJjID0gcmN2X2ZpcnN0ZGF0YSgpOwotICAgIGRlYnVnKEYxMDEsInJj dl9maXJzdGRhdGEgcmMiLCIiLHJjKTsKLSAgICBpZiAocmMgPiAtMSkgcmV0dXJuKHJjKTsJCS8q IChzZWUgYmVsb3cpICovCi19Ci0gICAgYnJlYWs7Ci1jYXNlIDU3OgotICAgIHsJCQkJLyogRU9U LCBubyBtb3JlIGZpbGVzICovCi0gICAgYWNrKCk7CQkJCS8qIEFja25vd2xlZGdlIHRoZSBCIHBh Y2tldCAqLwotICAgIHJlb3QoKTsJCQkJLyogRG8gRU9UIHRoaW5ncyAqLwotI2lmZGVmIENLX1RN UERJUgotLyogSWYgd2Ugd2VyZSBjZCdkIHRlbXBvcmFyaWx5IHRvIGFub3RoZXIgZGV2aWNlIG9y IGRpcmVjdG9yeSAuLi4gKi8KLSAgICBpZiAoZl90bXBkaXIpIHsKLQlpbnQgeDsKLQl4ID0gemNo ZGlyKChjaGFyICopIHNhdmRpcik7CS8qIC4uLiByZXN0b3JlIHByZXZpb3VzIGRpcmVjdG9yeSAq LwotCWZfdG1wZGlyID0gMDsJCQkvKiBhbmQgcmVtZW1iZXIgd2UgZGlkIGl0LiAqLwotCWRlYnVn KEYxMTEsImNrY3Byby53IEIgdG1wZGlyIHJlc3RvcmluZyIsc2F2ZGlyLHgpOwotICAgIH0KLSNl bmRpZiAvKiBDS19UTVBESVIgKi8KLSAgICBSRVNVTUU7CQkJCS8qIGFuZCBxdWl0ICovCi19Ci0g ICAgYnJlYWs7Ci1jYXNlIDU4OgotICAgIHsJCQkJLyogR290IERhdGEgcGFja2V0ICovCi0gICAg ZGVidWcoRjEwMSwiPHJkcGt0PkQgY3hzZWVuIiwiIixjeHNlZW4pOwotICAgIGRlYnVnKEYxMDEs IjxyZHBrdD5EIGN6c2VlbiIsIiIsY3pzZWVuKTsKLSAgICBpZiAoY3hzZWVuIHx8IGN6c2VlbiB8 fCBkaXNjYXJkKSB7CS8qIElmIGZpbGUgb3IgZ3JvdXAgaW50ZXJydXB0aW9uICovCi0JQ0hBUiAq IG1zZzsKLQltc2cgPSBjenNlZW4gPyAoQ0hBUiAqKSJaIiA6IChDSEFSICopIlgiOwotI2lmZGVm IFNUUkVBTUlORwotCWlmIChzdHJlYW1pbmcpIHsJCS8qIE5lZWQgdG8gY2FuY2VsICovCi0JICAg IGRlYnVnKEYxMTEsIjxyZHBrdD5EIHN0cmVhbWluZyBjYW5jZWwiLG1zZyxjYW5jZWwpOwotCSAg ICBpZiAoY2FuY2VsKysgPT0gMCkgewkvKiBPbmx5IGRvIHRoaXMgb25jZSAqLwotCQlhY2sxKG1z Zyk7CQkvKiBQdXQgIlgiIG9yICJaIiBpbiBBQ0sgKi8KLQkgICAgfSBlbHNlIGlmIChjenNlZW4p IHsKLQkJZXJycGt0KChDSEFSICopIlVzZXIgY2FuY2VsZWQiKTsKLQkJUkVTVU1FOwotCSAgICB9 IGVsc2UgewotCQlmYXN0YWNrKCk7Ci0JICAgIH0KLQl9IGVsc2UKLSNlbmRpZiAvKiBTVFJFQU1J TkcgKi8KLQkgIGFjazEobXNnKTsKLSAgICB9IGVsc2UgewkJCQkvKiBObyBpbnRlcnJ1cHRpb24g Ki8KLQlpbnQgcmMsIHFmOwotI2lmbmRlZiBOT1NQTAotCXFmID0gcXVlcnk7Ci0jZWxzZQotCXFm ID0gMDsKLSNlbmRpZiAvKiBOT1NQTCAqLwotI2lmZGVmIENLVFVOSU5HCi0JcmMgPSAoYmluYXJ5 ICYmICFwYXJpdHkpID8KLQkgIGJkZWNvZGUocmRhdGFwLHB1dGZpbCk6Ci0JICAgIGRlY29kZShy ZGF0YXAsIHFmID8gcHV0dHJtIDogcHV0ZmlsLCAxKTsKLSNlbHNlCi0JcmMgPSBkZWNvZGUocmRh dGFwLCBxZiA/IHB1dHRybSA6IHB1dGZpbCwgMSk7Ci0jZW5kaWYgLyogQ0tUVU5JTkcgKi8KLQlp ZiAocmMgPCAwKSB7Ci0JICAgIGRpc2NhcmQgPSAoa2VlcCA9PSAwIHx8IChrZWVwID09IFNFVF9B VVRPICYmIGJpbmFyeSAhPSBYWUZUX1QpKTsKLQkgICAgZXJycGt0KChDSEFSICopIkVycm9yIHdy aXRpbmcgZGF0YSIpOyAvKiBJZiBmYWlsdXJlLCAqLwotCSAgICBSRVNVTUU7Ci0JfSBlbHNlCQkJ CS8qIERhdGEgd3JpdHRlbiBPSywgc2VuZCBBQ0sgKi8KLSNpZmRlZiBTVFJFQU1JTkcKLQkgIGlm IChzdHJlYW1pbmcpCi0JICAgIGZhc3RhY2soKTsKLQllbHNlCi0jZW5kaWYgLyogU1RSRUFNSU5H ICovCi0JICBhY2soKTsKLSAgICB9Ci19Ci0gICAgYnJlYWs7Ci1jYXNlIDU5OgotICAgIHsJCQkJ LyogRU9GIGltbWVkaWF0ZWx5IGFmdGVyIEEtUGFja2V0LiAqLwotICAgIHJmX2VyciA9ICJDYW4n dCBjcmVhdGUgZmlsZSI7Ci0gICAgdGltaW50ID0gc190aW1pbnQ7Ci0gICAgaWYgKGRpc2NhcmQp IHsJCQkvKiBEaXNjYXJkaW5nIGEgcmVhbCBmaWxlLi4uICovCi0JeCA9IDE7Ci0gICAgfSBlbHNl IGlmICh4ZmxnKSB7CQkJLyogSWYgc2NyZWVuIGRhdGEgKi8KLQlpZiAocmVtZmlsZSkgewkJCS8q IHJlZGlyZWN0ZWQgdG8gZmlsZSAqLwotCSAgICBpZiAocmVtcGlwZSkJCS8qIG9yIHBpcGUgKi8K LQkgICAgICB4ID0gb3BlbmMoWk9GSUxFLHJlbWRlc3QpOyAvKiBQaXBlOiBzdGFydCBjb21tYW5k ICovCi0JICAgIGVsc2UKLQkgICAgICB4ID0gb3BlbmEocmVtZGVzdCwmaWF0dHIpOyAvKiBGaWxl OiBvcGVuIHdpdGggYXR0cmlidXRlcyAqLwotCX0gZWxzZSB7CQkJLyogb3RoZXJ3aXNlICovCi0J ICAgIHggPSBvcGVudCgmaWF0dHIpOwkJLyogIm9wZW4iIHRoZSBzY3JlZW4gKi8KLQl9Ci0jaWZk ZWYgQ0FMSUJSQVRFCi0gICAgfSBlbHNlIGlmIChjYWxpYnJhdGUpIHsJCS8qIElmIGNhbGlicmF0 aW9uIHJ1biAqLwotCXggPSBja29wZW54KCZpYXR0cik7CQkvKiBkbyB0aGlzICovCi0jZW5kaWYg LyogQ0FMSUJSQVRFICovCi0gICAgfSBlbHNlIHsJCQkJLyogb3RoZXJ3aXNlICovCi0JeCA9IG9w ZW5hKGZpbG5hbSwmaWF0dHIpOwkvKiBvcGVuIHRoZSBmaWxlLCB3aXRoIGF0dHJpYnV0ZXMgKi8K LQlpZiAoeCA9PSAtMTcpIHsJCQkvKiBSRUdFVCBza2lwcGVkIGJlY2F1c2Ugc2FtZSBzaXplICov Ci0JICAgIGRpc2NhcmQgPSAxOwotCSAgICByZWplY3Rpb24gPSAxOwotCX0KLSAgICB9Ci0gICAg aWYgKCF4IHx8IHJlb2YoZmlsbmFtLCAmaWF0dHIpIDwgMCkgeyAvKiBDbG9zZSBvdXRwdXQgZmls ZSAqLwotCWVycnBrdCgoQ0hBUiAqKSByZl9lcnIpOwkvKiBJZiBwcm9ibGVtLCBzZW5kIGVycm9y IG1zZyAqLwotCVJFU1VNRTsJCQkJLyogYW5kIHF1aXQgKi8KLSAgICB9IGVsc2UgewkJCQkvKiBv dGhlcndpc2UgKi8KLQlpZiAoeCA9PSAtMTcpCi0JICB4eHNjcmVlbihTQ1JfU1QsU1RfU0tJUCxT S1BfUkVTLCIiKTsKLQlhY2soKTsJCQkJLyogYWNrbm93bGVkZ2UgdGhlIEVPRiBwYWNrZXQgKi8K LQlCRUdJTiByZmlsZTsJCQkvKiBhbmQgYXdhaXQgYW5vdGhlciBmaWxlICovCi0gICAgfQotfQot ICAgIGJyZWFrOwotY2FzZSA2MDoKLSAgICB7ICAJCQkJLyogQ3RybC1DIG9yIGNvbm5lY3Rpb24g bG9zcy4gKi8KLSAgICB0aW1pbnQgPSBzX3RpbWludDsKLSAgICB3aW5kb3coMSk7CQkJCS8qIFNl dCB3aW5kb3cgc2l6ZSBiYWNrIHRvIDEuLi4gKi8KLSAgICBjeHNlZW4gPSAxOwotICAgIHggPSBj bHNvZigxKTsJCQkvKiBDbG9zZSBmaWxlICovCi0gICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsJCS8q IEZhaWxlZCAqLwotfQotICAgIGJyZWFrOwotY2FzZSA2MToKLSAgICB7CQkJCS8qIEVuZCBPZiBG aWxlIChFT0YpIFBhY2tldCAqLwotLyogIHdzbG90cyA9IDE7CSovCQkJLyogKGRvbid0IHNldCkg V2luZG93IHNpemUgYmFjayB0byAxICovCi0jaWZuZGVmIENPSEVSRU5UIC8qIENvaGVyZW50IGNv bXBpbGVyIGJsb3dzIHVwIG9uIHRoaXMgc3dpdGNoKCkgc3RhdGVtZW50LiAqLwotICAgIHggPSBy ZW9mKGZpbG5hbSwgJmlhdHRyKTsJCS8qIEhhbmRsZSB0aGUgRU9GIHBhY2tldCAqLwotICAgIHN3 aXRjaCAoeCkgewkJCS8qIHJlb2YoKSBzZXRzIHRoZSBzdWNjZXNzIGZsYWcgKi8KLSAgICAgIGNh c2UgLTU6CQkJCS8qIEhhbmRsZSBwcm9ibGVtcyAqLwotCWVycnBrdCgoQ0hBUiAqKSJSRU5BTUUg ZmFpbGVkIik7IC8qIEZhdGFsICovCi0JUkVTVU1FOwotCWJyZWFrOwotICAgICAgY2FzZSAtNDoK LQllcnJwa3QoKENIQVIgKikiTU9WRSBmYWlsZWQiKTsJLyogRmF0YWwgKi8KLQlSRVNVTUU7Ci0J YnJlYWs7Ci0gICAgICBjYXNlIC0zOgkJCQkvKiBJZiBwcm9ibGVtLCBzZW5kIGVycm9yIG1zZyAq LwotCWVycnBrdCgoQ0hBUiAqKSJDYW4ndCBwcmludCBmaWxlIik7IC8qIEZhdGFsICovCi0JUkVT VU1FOwotCWJyZWFrOwotICAgICAgY2FzZSAtMjoKLQllcnJwa3QoKENIQVIgKikiQ2FuJ3QgbWFp bCBmaWxlIik7IC8qIEZhdGFsICovCi0JUkVTVU1FOwotCWJyZWFrOwotICAgICAgY2FzZSAyOgkJ CQkvKiBOb3QgZmF0YWwgKi8KLSAgICAgIGNhc2UgMzoKLQl4eHNjcmVlbihTQ1JfRU0sMCwwTCwi UmVjZWl2ZXIgY2FuJ3QgZGVsZXRlIHRlbXAgZmlsZSIpOwotCVJFU1VNRTsKLQlicmVhazsKLSAg ICAgIGRlZmF1bHQ6Ci0JaWYgKHggPCAwKSB7CQkJLyogRmF0YWwgKi8KLQkgICAgZXJycGt0KChD SEFSICopIkNhbid0IGNsb3NlIGZpbGUiKTsKLQkgICAgUkVTVU1FOwotCX0gZWxzZSB7CQkJLyog U3VjY2VzcyAqLwotI2lmbmRlZiBOT1NQTAotCSAgICBpZiAocXVlcnkpCQkJLyogUXVlcnkgcmVw b25zZXMgZ2VuZXJhbGx5ICovCi0JICAgICAgY29ub2xsKCIiKTsJCS8qIGRvbid0IGhhdmUgbGlu ZSB0ZXJtaW5hdG9ycyAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0JICAgIGlmIChjenNlZW4pIHsJ CS8qIEJhdGNoIGNhbmNlbGVkPyAqLwotCQlpZiAoY2FuY2VsKysgPT0gMCkgewkvKiBJZiB3ZSBo YXZlbid0IHRyaWVkIHRoaXMgeWV0ICovCi0JCSAgICBhY2sxKChDSEFSICopIloiKTsJLyogVHJ5 IGl0IG9uY2UgKi8KLQkJfSBlbHNlIHsJCS8qIE90aGVyd2lzZSAqLwotCQkgICAgZXJycGt0KChD SEFSICopIlVzZXIgY2FuY2VsZWQiKTsgLyogcXVpdGUgd2l0aCBFcnJvciAqLwotCQkgICAgUkVT VU1FOwotCQl9Ci0JICAgIH0gZWxzZQotCSAgICAgIGFjaygpOwkJCS8qIEFja25vd2xlZGdlIHRo ZSBFT0YgcGFja2V0ICovCi0JICAgIEJFR0lOIHJmaWxlOwkJLyogYW5kIGF3YWl0IGFub3RoZXIg ZmlsZSAqLwotCX0KLSAgICB9Ci0jZWxzZQotICAgIGlmIChyZW9mKGZpbG5hbSwgJmlhdHRyKSA8 IDApIHsJLyogQ2xvc2UgdGhlIGZpbGUgKi8KLQllcnJwa3QoKENIQVIgKikiRXJyb3IgYXQgZW5k IG9mIGZpbGUiKTsKLQlSRVNVTUU7Ci0gICAgfSBlbHNlIHsJCQkJLyogcmVvZigpIHNldHMgc3Vj Y2VzcyBmbGFnICovCi0JYWNrKCk7Ci0JQkVHSU4gcmZpbGU7Ci0gICAgfQotI2VuZGlmIC8qIENP SEVSRU5UICovCi19Ci0gICAgYnJlYWs7Ci1jYXNlIDYyOgotICAgIHsJCQkJLyogQUNLIGZvciBT ZW5kLUluaXQgKi8KLSAgICBzcGFyKHJkYXRhcCk7CQkJLyogc2V0IHBhcmFtZXRlcnMgZnJvbSBp dCAqLwotICAgIGNhbmNlbCA9IDA7Ci0gICAgYmN0dSA9IGJjdHI7CQkJLyogc3dpdGNoIHRvIGFn cmVlZC11cG9uIGJsb2NrIGNoZWNrICovCi0gICAgYmN0bCA9IChiY3R1ID09IDQpID8gMiA6IGJj dHU7CS8qIFNldCBibG9jay1jaGVjayBsZW5ndGggKi8KLSNpZmRlZiBDS19SRVNFTkQKLSAgICBp ZiAoKHNlbmRtb2RlID09IFNNX1JFU0VORCkgJiYgKCFhdGNhcHUgfHwgIXJzY2FwdSkpIHsgLyog UkVTRU5EICovCi0JZXJycGt0KChDSEFSICopICJSRVNFTkQgY2FwYWJpbGl0aWVzIG5vdCBuZWdv dGlhdGVkIik7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSB7Ci0jZW5kaWYgLyogQ0tfUkVTRU5EICov Ci0Jd2hhdCA9IFdfU0VORDsJCQkvKiBSZW1lbWJlciB3ZSdyZSBzZW5kaW5nICovCi0JbGFzdHhm ZXIgPSBXX1NFTkQ7Ci0JeCA9IHNmaWxlKHhmbGcpOwkJLyogU2VuZCBYIG9yIEYgaGVhZGVyIHBh Y2tldCAqLwotCWNhbmNlbCA9IDA7CQkJLyogUmVzZXQgY2FuY2VsbGF0aW9uIGNvdW50ZXIgKi8K LQlpZiAoeCkgewkJCS8qIElmIHRoZSBwYWNrZXQgd2FzIHNlbnQgT0sgKi8KLQkgICAgaWYgKCF4 ZmxnICYmIGZpbGNudCA9PSAxKQkvKiBhbmQgaXQncyBhIHJlYWwgZmlsZSAqLwotCSAgICAgIGNy YzE2ID0gMEw7CQkvKiBDbGVhciB0aGUgZmlsZSBDUkMgKi8KLQkgICAgcmVzZXRjKCk7CQkJLyog cmVzZXQgcGVyLXRyYW5zYWN0aW9uIGNvdW50ZXJzICovCi0JICAgIHJ0aW1lcigpOwkJCS8qIHJl c2V0IHRpbWVycyAqLwotI2lmZGVmIEdGVElNRVIKLQkgICAgcmZ0aW1lcigpOwotI2VuZGlmIC8q IEdGVElNRVIgKi8KLQkgICAgc3RyZWFtb24oKTsJCQkvKiB0dXJuIG9uIHN0cmVhbWluZyAqLwot I2lmZGVmIElLU0RCCi0JICAgIGlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsCi0JCQkJICAo c2VydmVyID8gIlNFUlZFUiIgOiAiIiksCi0JCQkJICAiU0VORCIsCi0JCQkJICBmaWxuYW0KLQkJ CQkgICk7Ci0jZW5kaWYgLyogSUtTREIgKi8KLQkgICAgQkVHSU4gc3NmaWxlOwkJLyogYW5kIHN3 aXRjaCB0byByZWNlaXZlLWZpbGUgc3RhdGUgKi8KLQl9IGVsc2UgewkJCS8qIG90aGVyd2lzZSBz ZW5kIGVycm9yIG1zZyAmIHF1aXQgKi8KLQkgICAgcyA9IHhmbGcgPyAiQ2FuJ3QgZXhlY3V0ZSBj b21tYW5kIiA6IChjaGFyICopZXBrdG1zZzsKLQkgICAgaWYgKCEqcykgcyA9ICJDYW4ndCBvcGVu IGZpbGUiOwotCSAgICBlcnJwa3QoKENIQVIgKilzKTsKLQkgICAgUkVTVU1FOwotCX0KLSNpZmRl ZiBDS19SRVNFTkQKLSAgICB9Ci0jZW5kaWYgLyogQ0tfUkVTRU5EICovCi19Ci0gICAgYnJlYWs7 Ci1jYXNlIDYzOgotICAgIHsJCQkJLyogUiBwYWNrZXQgd2FzIHJldHJhbnNtaXR0ZWQuICovCi0g ICAgeHNpbml0KCk7CQkJCS8qIFJlc2VuZCBwYWNrZXQgMCAqLwotfQotICAgIGJyZWFrOwotY2Fz ZSA2NDoKLSAgICB7CQkJCS8qIFNhbWUgZGVhbCBpZiBHIHBhY2tldCBjb21lcyBhZ2FpbiAqLwot ICAgIHhzaW5pdCgpOwotfQotICAgIGJyZWFrOwotY2FzZSA2NToKLSAgICB7CQkJCS8qIFNhbWUg ZGVhbCBpZiBDIHBhY2tldCBjb21lcyBhZ2FpbiAqLwotICAgIHhzaW5pdCgpOwotfQotICAgIGJy ZWFrOwotY2FzZSA2NjoKLSAgICB7CQkJCS8qIEFDSyBmb3IgRiBvciBYIHBhY2tldCAqLwotICAg IHNydnB0ciA9IHNydmNtZDsJCQkvKiBQb2ludCB0byBzdHJpbmcgYnVmZmVyICovCi0gICAgZGVj b2RlKHJkYXRhcCxwdXRzcnYsMCk7CQkvKiBEZWNvZGUgZGF0YSBmaWVsZCwgaWYgYW55ICovCi0g ICAgcHV0c3J2KE5VTCk7CQkJLyogVGVybWluYXRlIHdpdGggbnVsbCAqLwotICAgIGZmYyA9IDBM OwkJCQkvKiBSZXNldCBmaWxlIGJ5dGUgY291bnRlciAqLwotICAgIGRlYnVnKEYxMDEsIjxzc2Zp bGU+WSBjeHNlZW4iLCIiLGN4c2Vlbik7Ci0gICAgaWYgKCpzcnZjbWQpIHsJCQkvKiBJZiByZW1v dGUgbmFtZSB3YXMgcmVjb3JkZWQgKi8KLSAgICAgICAgaWYgKHNlbmRtb2RlICE9IFNNX1JFU0VO RCkgewotCSAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0MgfHwgZmRpc3BsYSA9PSBYWUZEX1MpCi0J ICAgICAgeHhzY3JlZW4oU0NSX0FOLDAsMEwsKGNoYXIgKilzcnZjbWQpOwotCSAgICB0bG9nKEYx MTAsIiByZW1vdGUgbmFtZToiLChjaGFyICopIHNydmNtZCwwTCk7Ci0JICAgIG1ha2VzdHIoJnBz cmZzcGVjLChjaGFyICopc3J2Y21kKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoY3hzZWVu fHxjenNlZW4pIHsJCS8qIEludGVycnVwdGVkPyAqLwotCWRlYnVnKEYxMDEsIjxzc2ZpbGU+WSBj YW5jZWxpbmciLCIiLDApOwotCXggPSBjbHNpZigpOwkJCS8qIENsb3NlIGlucHV0IGZpbGUgKi8K LQlzeGVvZigxKTsJCQkvKiBTZW5kIEVPRihEKSAqLwotCUJFR0lOIHNzZW9mOwkJCS8qIGFuZCBz d2l0Y2ggdG8gRU9GIHN0YXRlLiAqLwotICAgIH0gZWxzZSBpZiAoYXRjYXB1KSB7CQkvKiBJZiBh dHRyaWJ1dGVzIGFyZSB0byBiZSB1c2VkICovCi0JaWYgKHNhdHRyKHhmbGcgfCBzdGRpbmYsIDEp IDwgMCkgeyAvKiBzZW5kIHRoZW0gKi8KLQkgICAgZXJycGt0KChDSEFSICopIkNhbid0IHNlbmQg YXR0cmlidXRlcyIpOyAvKiBpZiBwcm9ibGVtLCBzYXkgc28gKi8KLQkgICAgUkVTVU1FOwkJCS8q IGFuZCBxdWl0ICovCi0JfSBlbHNlIEJFR0lOIHNzYXR0cjsJCS8qIGlmIG9rLCBzd2l0Y2ggdG8g YXR0cmlidXRlIHN0YXRlICovCi0gICAgfSBlbHNlIHsJCQkJLyogQXR0cmlidXRlcyBub3QgbmVn b3RpYXRlZCAqLwotCWlmICh3aW5kb3cod3Nsb3RuKSA8IDApIHsJLyogT3BlbiB3aW5kb3cgKi8K LQkgICAgZXJycGt0KChDSEFSICopIkNhbid0IG9wZW4gd2luZG93Iik7Ci0JICAgIFJFU1VNRTsK LQl9IGVsc2UgaWYgKCh4ID0gc2RhdGEoKSkgPT0gLTIpIHsgLyogU2VuZCBmaXJzdCBkYXRhIHBh Y2tldCBkYXRhICovCi0JICAgIHdpbmRvdygxKTsJCQkvKiBDb25uZWN0aW9uIGxvc3QsIHJlc2V0 IHdpbmRvdyAqLwotCSAgICB4ID0gY2xzaWYoKTsJCS8qIENsb3NlIGlucHV0IGZpbGUgKi8KLQkg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsJLyogUmV0dXJuIGZhaWx1cmUgKi8KLQl9IGVsc2UgaWYg KHggPT0gLTkpIHsJCS8qIFVzZXIgaW50ZXJydXB0ZWQgKi8KLQkgICAgZXJycGt0KChDSEFSICop IlVzZXIgY2FuY2VsbGVkIik7IC8qIFNlbmQgRXJyb3IgcGFja2V0ICovCi0JICAgIHdpbmRvdygx KTsJCQkvKiBTZXQgd2luZG93IHNpemUgYmFjayB0byAxLi4uICovCi0JICAgIHRpbWludCA9IHNf dGltaW50OwkJLyogUmVzdG9yZSB0aW1lb3V0ICovCi0JICAgIHJldHVybihzdWNjZXNzID0gMCk7 CS8qIEZhaWxlZCAqLwotCX0gZWxzZSBpZiAoeCA8IDApIHsJCS8qIEVPRiAoZW1wdHkgZmlsZSkg b3IgaW50ZXJydXB0ZWQgKi8KLQkgICAgd2luZG93KDEpOwkJCS8qIHB1dCB3aW5kb3cgc2l6ZSBi YWNrIHRvIDEsICovCi0JICAgIGRlYnVnKEYxMDEsIjxzc2ZpbGU+WSBjeHNlZW4iLCIiLGN4c2Vl bik7Ci0JICAgIHggPSBjbHNpZigpOwkJLyogSWYgbm90IG9rLCBjbG9zZSBpbnB1dCBmaWxlLCAq LwotCSAgICBpZiAoeCA8IDApCQkJLyogdHJlYXRpbmcgZmFpbHVyZSBhcyBpbnRlcnJ1cHRpb24g Ki8KLQkgICAgICBjeHNlZW4gPSAxOwkJLyogU2VuZCBFT0YgcGFja2V0ICovCi0JICAgIHNlb2Yo Y3hzZWVufHxjenNlZW4pOwotCSAgICBCRUdJTiBzc2VvZjsJCS8qIGFuZCBzd2l0Y2ggdG8gRU9G IHN0YXRlLiAqLwotCX0gZWxzZSB7CQkJLyogRmlyc3QgZGF0YSBzZW50IE9LICovCi0JICAgIEJF R0lOIHNzZGF0YTsJCS8qIEFsbCBvaywgc3dpdGNoIHRvIHNlbmQtZGF0YSBzdGF0ZSAqLwotCX0K LSAgICB9Ci19Ci0gICAgYnJlYWs7Ci1jYXNlIDY3OgotICAgIHsJCQkJLyogR290IEFDSyB0byBB IHBhY2tldCAqLwotICAgIGZmYyA9IDBMOwkJCQkvKiBSZXNldCBmaWxlIGJ5dGUgY291bnRlciAq LwotICAgIGRlYnVnKEYxMDEsIjxzc2F0dHI+WSBjeHNlZW4iLCIiLGN4c2Vlbik7Ci0gICAgaWYg KGN4c2Vlbnx8Y3pzZWVuKSB7CQkvKiBJbnRlcnJ1cHRlZD8gKi8KLQlkZWJ1ZyhGMTAxLCI8c2F0 dHI+WSBjYW5jZWxpbmciLCIiLDApOwotCXggPSBjbHNpZigpOwkJCS8qIENsb3NlIGlucHV0IGZp bGUgKi8KLQlzeGVvZigxKTsJCQkvKiBTZW5kIEVPRihEKSAqLwotCUJFR0lOIHNzZW9mOwkJCS8q IGFuZCBzd2l0Y2ggdG8gRU9GIHN0YXRlLiAqLwotICAgIH0gZWxzZSBpZiAocnNhdHRyKHJkYXRh cCkgPCAwKSB7CS8qIFdhcyB0aGUgZmlsZSByZWZ1c2VkPyAqLwotCWRpc2NhcmQgPSAxOwkJCS8q IFNldCB0aGUgZGlzY2FyZCBmbGFnICovCi0JY2xzaWYoKTsJCQkvKiBDbG9zZSB0aGUgZmlsZSAq LwotCXN4ZW9mKDEpOwkJCS8qIHNlbmQgRU9GIHdpdGggImRpc2NhcmQiIGNvZGUgKi8KLQlCRUdJ TiBzc2VvZjsJCQkvKiBzd2l0Y2ggdG8gc2VuZC1FT0Ygc3RhdGUgKi8KLSAgICB9IGVsc2UgaWYg KCh4ID0gc2F0dHIoeGZsZyB8IHN0ZGluZiwgMCkpIDwgMCkgeyAvKiBTZW5kIG1vcmU/ICovCi0J ZXJycGt0KChDSEFSICopIkNhbid0IHNlbmQgYXR0cmlidXRlcyIpOyAvKiBUcm91YmxlLi4uICov Ci0JUkVTVU1FOwotICAgIH0gZWxzZSBpZiAoeCA9PSAwKSB7CQkvKiBObyBtb3JlIHRvIHNlbmQg c28gbm93IHRoZSBkYXRhICovCi0JaWYgKHdpbmRvdyh3c2xvdG4pIDwgMCkgewkvKiBBbGxvY2F0 ZSBuZWdvdGlhdGVkIHdpbmRvdyBzbG90cyAqLwotCSAgICBlcnJwa3QoKENIQVIgKikiQ2FuJ3Qg b3BlbiB3aW5kb3ciKTsKLQkgICAgUkVTVU1FOwotCX0KLQlpZiAoKHggPSBzZGF0YSgpKSA9PSAt MikgewkvKiBGaWxlIGFjY2VwdGVkLCBzZW5kIGZpcnN0IGRhdGEgKi8KLQkgICAgd2luZG93KDEp OwkJCS8qIENvbm5lY3Rpb24gYnJva2VuICovCi0JICAgIHggPSBjbHNpZigpOwkJLyogQ2xvc2Ug ZmlsZSAqLwotCSAgICByZXR1cm4oc3VjY2VzcyA9IDApOwkvKiBSZXR1cm4gZmFpbHVyZSAqLwot CX0gZWxzZSBpZiAoeCA9PSAtOSkgewkJLyogVXNlciBpbnRlcnJ1cHRlZCAqLwotCSAgICBlcnJw a3QoKENIQVIgKikiVXNlciBjYW5jZWxsZWQiKTsgLyogU2VuZCBFcnJvciBwYWNrZXQgKi8KLQkg ICAgd2luZG93KDEpOwkJCS8qIFNldCB3aW5kb3cgc2l6ZSBiYWNrIHRvIDEuLi4gKi8KLQkgICAg dGltaW50ID0gc190aW1pbnQ7CQkvKiBSZXN0b3JlIHRpbWVvdXQgKi8KLQkgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAwKTsJLyogRmFpbGVkICovCi0JfSBlbHNlIGlmICh4IDwgMCkgewkJLyogSWYgZGF0 YSB3YXMgbm90IHNlbnQgKi8KLQkgICAgd2luZG93KDEpOwkJCS8qIHB1dCB3aW5kb3cgc2l6ZSBi YWNrIHRvIDEsICovCi0JICAgIGRlYnVnKEYxMDEsIjxzc2F0dHI+WSBjeHNlZW4iLCIiLGN4c2Vl bik7Ci0JICAgIGlmIChjbHNpZigpIDwgMCkJCS8qIENsb3NlIGlucHV0IGZpbGUgKi8KLQkgICAg ICBjeHNlZW4gPSAxOwkJLyogU2VuZCBFT0YgcGFja2V0ICovCi0JICAgIHNlb2YoY3hzZWVufHxj enNlZW4pOwotCSAgICBCRUdJTiBzc2VvZjsJCS8qIGFuZCBzd2l0Y2ggdG8gRU9GIHN0YXRlLiAq LwotCX0gZWxzZSB7Ci0JICAgIEJFR0lOIHNzZGF0YTsJCS8qIEFsbCBvaywgc3dpdGNoIHRvIHNl bmQtZGF0YSBzdGF0ZSAqLwotCX0KLSAgICB9Ci19Ci0gICAgYnJlYWs7Ci1jYXNlIDY4OgotICAg IHsgIAkJCQkvKiBDdHJsLUMgb3IgY29ubmVjdGlvbiBsb3NzLiAqLwotICAgIHdpbmRvdygxKTsJ CQkJLyogU2V0IHdpbmRvdyBzaXplIGJhY2sgdG8gMS4uLiAqLwotICAgIGN4c2VlbiA9IDE7CQkJ CS8qIFRvIGluZGljYXRlIGludGVycnVwdGlvbiAqLwotICAgIHggPSBjbHNpZigpOwkJCS8qIENs b3NlIGZpbGUgKi8KLSAgICByZXR1cm4oc3VjY2VzcyA9IDApOwkJLyogRmFpbGVkICovCi19Ci0g ICAgYnJlYWs7Ci1jYXNlIDY5OgotICAgIHsJCQkJLyogR290IEFDSyB0byBEYXRhIHBhY2tldCAq LwotICAgIGNhbm5lZChyZGF0YXApOwkJCS8qIENoZWNrIGlmIGZpbGUgdHJhbnNmZXIgY2FuY2Vs bGVkICovCi0gICAgZGVidWcoRjExMSwiPHNzZGF0YT5ZIGN4c2VlbiIscmRhdGFwLGN4c2Vlbik7 Ci0gICAgZGVidWcoRjExMSwiPHNzZGF0YT5ZIGN6c2VlbiIscmRhdGFwLGN6c2Vlbik7Ci0gICAg aWYgKCh4ID0gc2RhdGEoKSkgPT0gLTIpIHsJCS8qIFRyeSB0byBzZW5kIG5leHQgZGF0YSAqLwot CXdpbmRvdygxKTsJCQkvKiBDb25uZWN0aW9uIGxvc3QsIHJlc2V0IHdpbmRvdyAqLwotCXggPSBj bHNpZigpOwkJCS8qIENsb3NlIGZpbGUgKi8KLQlyZXR1cm4oc3VjY2VzcyA9IDApOwkJLyogRmFp bGVkICovCi0gICAgfSBlbHNlIGlmICh4ID09IC05KSB7CQkvKiBVc2VyIGludGVycnVwdGVkICov Ci0JZXJycGt0KChDSEFSICopIlVzZXIgY2FuY2VsbGVkIik7IC8qIFNlbmQgRXJyb3IgcGFja2V0 ICovCi0Jd2luZG93KDEpOwkJCS8qIFNldCB3aW5kb3cgc2l6ZSBiYWNrIHRvIDEuLi4gKi8KLQl0 aW1pbnQgPSBzX3RpbWludDsJCS8qIFJlc3RvcmUgb3JpZ2luYWwgdGltZW91dCAqLwotCXJldHVy bihzdWNjZXNzID0gMCk7CQkvKiBGYWlsZWQgKi8KLSAgICB9IGVsc2UgaWYgKHggPCAwKSB7CQkJ LyogRU9GIC0gZmluaXNoZWQgc2VuZGluZyBkYXRhICovCi0JZGVidWcoRjEwMSwiPHNzZGF0YT5Z IGN4c2VlbiIsIiIsY3hzZWVuKTsKLQl3aW5kb3coMSk7CQkJLyogU2V0IHdpbmRvdyBzaXplIGJh Y2sgdG8gMS4uLiAqLwotCWlmIChjbHNpZigpIDwgMCkJCS8qIENsb3NlIGlucHV0IGZpbGUgKi8K LQkgIGN4c2VlbiA9IDE7CQkJLyogU2VuZCBFT0YgcGFja2V0ICovCi0JZGVidWcoRjEwMSwiPHNz ZGF0YT5ZIENBTExJTkcgU0VPRigpIiwiIixjeHNlZW4pOwotCXNlb2YoY3hzZWVufHxjenNlZW4p OwotCUJFR0lOIHNzZW9mOwkJCS8qIGFuZCBlbnRlciBzZW5kLWVvZiBzdGF0ZSAqLwotICAgIH0K LSAgICAvKiBOT1RFOiBJZiB4ID09IDAgaXQgbWVhbnMgd2UncmUgZHJhaW5pbmc6IHNlZSBzZGF0 YSgpISAqLwotfQotICAgIGJyZWFrOwotY2FzZSA3MDoKLSAgICB7CQkJCS8qIEdvdCBBQ0sgdG8g RU9GICovCi0gICAgaW50IGcsIHhkaXNjYXJkOwotICAgIGNhbm5lZChyZGF0YXApOwkJCS8qIENo ZWNrIGlmIGZpbGUgdHJhbnNmZXIgY2FuY2VsbGVkICovCi0gICAgZGVidWcoRjExMSwiPHNzZW9m PlkgY3hzZWVuIixyZGF0YXAsY3hzZWVuKTsKLSAgICBkZWJ1ZyhGMTExLCI8c3Nlb2Y+WSBjenNl ZW4iLHJkYXRhcCxjenNlZW4pOwotICAgIGRlYnVnKEYxMTEsIjxzc2VvZj5ZIGRpc2NhcmQiLHJk YXRhcCxkaXNjYXJkKTsKLSAgICB4ZGlzY2FyZCA9IGRpc2NhcmQ7Ci0gICAgZGlzY2FyZCA9IDA7 Ci0gICAgc3VjY2VzcyA9IChjeHNlZW4gPT0gMCAmJiBjenNlZW4gPT0gMCk7IC8qIFRyYW5zZmVy IHN0YXR1cy4uLiAqLwotICAgIGRlYnVnKEYxMDEsIjxzc2VvZj5ZIHN1Y2Nlc3MiLCIiLHN1Y2Nl c3MpOwotICAgIGlmIChzdWNjZXNzICYmIHJlamVjdGlvbiA+IDApCSAgICAvKiBJZiByZWplY3Rl ZCwgc3VjY2VlZCBpZiAqLwotICAgICAgaWYgKHJlamVjdGlvbiAhPSAnIycgJiYJCSAgICAvKiBy ZWFzb24gd2FzIGRhdGUgKi8KLQkgIHJlamVjdGlvbiAhPSAxICYmIHJlamVjdGlvbiAhPSAnPycp IC8qIG9yIG5hbWU7ICovCi0Jc3VjY2VzcyA9IDA7CQkJICAgIC8qIGZhaWwgb3RoZXJ3aXNlLiAq LwotICAgIGN4c2VlbiA9IDA7CQkJCS8qIFRoaXMgZ29lcyBiYWNrIHRvIHplcm8uICovCi0gICAg aWYgKHN1Y2Nlc3MpIHsJCQkvKiBPbmx5IGlmIHRyYW5zZmVyIHN1Y2NlZWRlZC4uLiAqLwotCXh4 c2NyZWVuKFNDUl9TVCxTVF9PSywwTCwiIik7Ci0JaWYgKCF4ZGlzY2FyZCkgewotCSAgICBtYWtl c3RyKCZzZnNwZWMscHNmc3BlYyk7CS8qIFJlY29yZCBmaWxlbmFtZXMgZm9yIFdIRVJFICovCi0J ICAgIG1ha2VzdHIoJnNyZnNwZWMscHNyZnNwZWMpOwotCX0KLQlpZiAobW92aW5nKSB7CQkJLyog SWYgTU9WRSdpbmcgKi8KLQkgICAgeCA9IHpkZWxldChmaWxuYW0pOwkJLyogVHJ5IHRvIGRlbGV0 ZSB0aGUgc291cmNlIGZpbGUgKi8KLSNpZmRlZiBUTE9HCi0JICAgIGlmICh0cmFsb2cpIHsKLQkJ aWYgKHggPiAtMSkgewotCQkgICAgdGxvZyhGMTEwLCIgZGVsZXRlZCIsZmlsbmFtLDApOwotCQl9 IGVsc2UgewotCQkgICAgdGxvZyhGMTEwLCIgZGVsZXRlIGZhaWxlZDoiLGNrX2VycnN0cigpLDAp OwotCQl9Ci0JICAgIH0KLSNlbmRpZiAvKiBUTE9HICovCi0JfSBlbHNlIGlmIChzbmRfbW92ZSkg ewkJLyogT3IgbW92ZSBpdCAqLwotCSAgICBpbnQgeDsKLQkgICAgeCA9IHpyZW5hbWUoZmlsbmFt LHNuZF9tb3ZlKTsKLSNpZmRlZiBUTE9HCi0JICAgIGlmICh0cmFsb2cpIHsKLQkJaWYgKHggPiAt MSkgewotCQkgICAgdGxvZyhGMTEwLCIgbW92ZWQgdG8gIixzbmRfbW92ZSwwKTsKLQkJfSBlbHNl IHsKLQkJICAgIHRsb2coRjExMCwiIG1vdmUgZmFpbGVkOiIsY2tfZXJyc3RyKCksMCk7Ci0JCX0K LQkgICAgfQotI2VuZGlmIC8qIFRMT0cgKi8KLQl9IGVsc2UgaWYgKHNuZF9yZW5hbWUpIHsJLyog T3IgcmVuYW1lIGl0ICovCi0JICAgIGNoYXIgKnMgPSBzbmRfcmVuYW1lOwkvKiBSZW5hbWluZyBz dHJpbmcgKi8KLSNpZm5kZWYgTk9TUEwKLQkgICAgaW50IHk7CQkJLyogUGFzcyBpdCB0aHJ1IHRo ZSBldmFsdWF0b3IgKi8KLQkgICAgZXh0ZXJuIGludCBjbWRfcXVvdGluZzsJLyogZm9yIFx2KGZp bGVuYW1lKSAqLwotCSAgICBpZiAoY21kX3F1b3RpbmcpIHsJCS8qIEJ1dCBvbmx5IGlmIGNtZF9x dW90aW5nIGlzIG9uICovCi0JCXkgPSBNQVhSUDsKLQkJcyA9IChjaGFyICopc3J2Y21kOwotCQl6 enN0cmluZyhzbmRfcmVuYW1lLCZzLCZ5KTsKLQkJcyA9IChjaGFyICopc3J2Y21kOwotCSAgICB9 Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQkgICAgaWYgKHMpIGlmICgqcykgewotCQlpbnQgeDsKLQkJ eCA9IHpyZW5hbWUoZmlsbmFtLHMpOwotI2lmZGVmIFRMT0cKLQkgICAgaWYgKHRyYWxvZykgewot CQlpZiAoeCA+IC0xKSB7Ci0JCSAgICB0bG9nKEYxMTAsIiByZW5hbWVkIHRvIixzLDApOwotCQl9 IGVsc2UgewotCQkgICAgdGxvZyhGMTEwLCIgcmVuYW1lIGZhaWxlZDoiLGNrX2VycnN0cigpLDAp OwotCQl9Ci0JICAgIH0KLSNlbmRpZiAvKiBUTE9HICovCi0jaWZkZWYgQ09NTUVOVAotCQkqcyA9 IE5VTDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0JICAgIH0KLQl9Ci0gICAgfQotICAgIGlmIChj enNlZW4pIHsJCQkvKiBDaGVjayBncm91cCBpbnRlcnJ1cHRpb24gZmxhZyAqLwotCWcgPSAwOwkJ CQkvKiBObyBtb3JlIGZpbGVzIGlmIGludGVycnVwdGVkICovCi0gICAgfSBlbHNlIHsJCQkJLyog T3RoZXJ3aXNlLi4uICovCi0jaWZkZWYgQ09NTUVOVAotCS8qIFRoaXMgY29kZSBtYWtlcyBhbnkg b3BlbiBlcnJvciBmYXRhbCB0byBhIGZpbGUtZ3JvdXAgdHJhbnNmZXIuICovCi0JZyA9IGduZmls ZSgpOwotCWRlYnVnKEYxMTEsIjxzc2VvZj5ZIGduZmlsZSIsZmlsbmFtLGcpOwotCWlmIChnID4g MCkgewkJCS8qIEFueSBtb3JlIGZpbGVzIHRvIHNlbmQ/ICovCi0JICAgIGlmIChzZmlsZSh4Zmxn KSkJCS8qIFllcywgdHJ5IHRvIHNlbmQgbmV4dCBmaWxlIGhlYWRlciAqLwotCSAgICAgIEJFR0lO IHNzZmlsZTsJCS8qIGlmIG9rLCBlbnRlciBzZW5kLWZpbGUgc3RhdGUgKi8KLQkgICAgZWxzZSB7 CQkJLyogb3RoZXJ3aXNlICovCi0JCXMgPSB4ZmxnID8gIkNhbid0IGV4ZWN1dGUgY29tbWFuZCIg OiAoY2hhciAqKWVwa3Rtc2c7Ci0JCWlmICghKnMpIHMgPSAiQ2FuJ3Qgb3BlbiBmaWxlIjsKLQkJ ZXJycGt0KChDSEFSICopcyk7CS8qIHNlbmQgZXJyb3IgbWVzc2FnZSAqLwotCQlSRVNVTUU7CQkJ LyogYW5kIHF1aXQgKi8KLQkgICAgfQotCX0gZWxzZSB7CQkJLyogTm8gbmV4dCBmaWxlICovCi0J ICAgIHRzZWNzID0gZ3RpbWVyKCk7CQkvKiBnZXQgc3RhdGlzdGljcyB0aW1lcnMgKi8KLSNpZmRl ZiBHRlRJTUVSCi0JICAgIGZwdHNlY3MgPSBnZnRpbWVyKCk7Ci0jZW5kaWYgLyogR0ZUSU1FUiAq LwotCSAgICBzZW90KCk7CQkJLyogc2VuZCBFT1QgcGFja2V0ICovCi0JICAgIEJFR0lOIHNzZW90 OwkJLyogZW50ZXIgc2VuZC1lb3Qgc3RhdGUgKi8KLQl9Ci0jZWxzZSAgLyogQ09NTUVOVCAqLwot CXdoaWxlICgxKSB7CQkJLyogS2VlcCB0cnlpbmcuLi4gKi8KLQkgICAgZyA9IGduZmlsZSgpOwkJ LyogR2V0IG5leHQgZmlsZSAqLwotCSAgICBkZWJ1ZyhGMTExLCI8c3Nlb2Y+WSBnbmZpbGUiLGZp bG5hbSxnKTsKLQkgICAgaWYgKGcgPT0gMCAmJiBnbmZlcnJvciA9PSAwKSAvKiBObyBtb3JlLCBz dG9wIHRyeWluZyAqLwotCSAgICAgIGJyZWFrOwotCSAgICBpZiAoZyA+IDApIHsJCS8qIEhhdmUg b25lICovCi0JCWlmIChzZmlsZSh4ZmxnKSkgewkvKiBUcnkgdG8gb3BlbiBhbmQgc2VuZCBGIHBh Y2tldCAqLwotCQkgICAgQkVHSU4gc3NmaWxlOwkvKiBJZiBPSywgZW50ZXIgc2VuZC1maWxlIHN0 YXRlICovCi0JCSAgICBicmVhazsJCS8qIGFuZCBicmVhayBvdXQgb2YgbG9vcC4gKi8KLQkJfQot CSAgICB9IC8qIE90aGVyd2lzZSBrZWVwIHRyeWluZyB0byBnZXQgb25lIHdlIGNhbiBzZW5kLi4u ICovCi0JfQotICAgIH0KLSAgICBpZiAoZyA9PSAwKSB7Ci0JZGVidWcoRjEwMSwiPHNzZW9mPlkg bm8gbW9yZSBmaWxlcyIsIiIsY3pzZWVuKTsKLQl0c2VjcyA9IGd0aW1lcigpOwkJLyogR2V0IHN0 YXRpc3RpY3MgdGltZXJzICovCi0jaWZkZWYgR0ZUSU1FUgotCWZwdHNlY3MgPSBnZnRpbWVyKCk7 Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotCXNlb3QoKTsJCQkJLyogU2VuZCBFT1QgcGFja2V0ICov Ci0JQkVHSU4gc3Nlb3Q7CQkJLyogRW50ZXIgc2VuZC1lb3Qgc3RhdGUgKi8KLSAgICB9Ci0jZW5k aWYgLyogQ09NTUVOVCAqLwotfQotICAgIGJyZWFrOwotY2FzZSA3MToKLSAgICB7CQkJCS8qIEdv dCBBQ0sgdG8gRU9UICovCi0gICAgZGVidWcoRjEwMSwic3Nlb3QganVzdG9uZSIsIiIsanVzdG9u ZSk7Ci0gICAgUkVTVU1FOwkJCQkvKiBBbGwgZG9uZSwganVzdCBxdWl0ICovCi19Ci0gICAgYnJl YWs7Ci1jYXNlIDcyOgotICAgIHsJCQkJCS8qIEdvdCBFcnJvciBwYWNrZXQsIGluIGFueSBzdGF0 ZSAqLwotICAgIGNoYXIgKnMgPSAiIjsKLSAgICB3aW5kb3coMSk7CQkJCS8qIENsb3NlIHdpbmRv dyAqLwotICAgIHRpbWludCA9IHNfdGltaW50OwkJCS8qIFJlc3RvcmUgb3JpZ2luYWwgdGltZW91 dCAqLwotICAgIGlmICgqZXBrdG1zZykJCQkvKiBNZXNzYWdlIGZyb20gRXJyb3IgcGFja2V0ICov Ci0gICAgICBzID0gKGNoYXIgKillcGt0bXNnOwotICAgIGlmICghKnMpIHsJCQkJLyogSWYgbm90 IHRoZXJlIHRoZW4gbWF5YmUgaGVyZSAqLwotCXMgPSAoY2hhciAqKXJkYXRhcDsKLQlja3N0cm5j cHkoKGNoYXIgKillcGt0bXNnLChjaGFyICopcmRhdGFwLFBLVE1TR0xFTik7Ci0gICAgfQotICAg IGlmICghKnMpCQkJCS8qIEhvcGVmdWxseSB3ZSdsbCBuZXZlciBzZWUgdGhpcy4gKi8KLSAgICAg IHMgPSAiVW5rbm93biBlcnJvciI7Ci0gICAgc3VjY2VzcyA9IDA7CQkJLyogRm9yIElGIFNVQ0NF U1MvRkFJTC4gKi8KLSAgICBkZWJ1ZyhGMTAxLCJja2Nwcm8udyBqdXN0b25lIGF0IEUgcGt0Iiwi IixqdXN0b25lKTsKLQotICAgIHN1Y2Nlc3MgPSAwOwkJCS8qIFRyYW5zZmVyIGZhaWxlZCAqLwot ICAgIHhmZXJzdGF0ID0gc3VjY2VzczsJCQkvKiBSZW1lbWJlciB0cmFuc2ZlciBzdGF0dXMgKi8K LSAgICBpZiAoIWVwa3RzZW50KSB7Ci0JeCA9IHF1aWV0OyBxdWlldCA9IDE7CQkvKiBDbG9zZSBm aWxlcyBzaWxlbnRseSwgKi8KLQllcGt0cmN2ZCA9IDE7CQkJLyogUHJldmVudCBtZXNzYWdlcyBm cm9tIGNsc29mKCkgKi8KLQljbHNpZigpOwotCWNsc29mKDEpOyAJCQkvKiBkaXNjYXJkaW5nIGFu eSBvdXRwdXQgZmlsZS4gKi8KLQllcm1zZyhzKTsJCQkvKiBJc3N1ZSB0aGUgbWVzc2FnZSAoY2Fs bHMgc2NyZWVuKS4gKi8KLQlxdWlldCA9IHg7CQkJLyogUmVzdG9yZSBxdWlldCBzdGF0ZSAqLwot ICAgIH0KLSAgICB0c3RhdHMoKTsJCQkJLyogR2V0IHN0YXRzICovCi0vKgotICBJZiB3ZSBhcmUg ZXhlY3V0aW5nIGNvbW1hbmRzIGZyb20gYSBjb21tYW5kIGZpbGUgb3IgbWFjcm8sIGxldCB0aGUg Y29tbWFuZAotICBmaWxlIG9yIG1hY3JvIGRlY2lkZSB3aGV0aGVyIHRvIGV4aXQsIGJhc2VkIG9u IFNFVCB7IFRBS0UsIE1BQ1JPIH0gRVJST1IuCi0qLwotICAgIGlmICgKLSNpZm5kZWYgTk9JQ1AK LQkheGNtZHNyYyAmJgotI2VuZGlmIC8qIE5PSUNQICovCi0JYmFja2dyZCAmJiAhc2VydmVyKQot ICAgICAgZmF0YWwoIlByb3RvY29sIGVycm9yIik7Ci0gICAgeGl0c3RhIHw9ICh3aGF0ICYgV19L RVJNSVQpOwkvKiBTYXZlIHRoaXMgZm9yIGRvZXhpdCgpLiAqLwotI2lmZGVmIENLX1RNUERJUgot LyogSWYgd2Ugd2VyZSBjZCdkIHRlbXBvcmFyaWx5IHRvIGFub3RoZXIgZGV2aWNlIG9yIGRpcmVj dG9yeSAuLi4gKi8KLSAgICBpZiAoZl90bXBkaXIpIHsKLQlpbnQgeDsKLQl4ID0gemNoZGlyKChj aGFyICopIHNhdmRpcik7CS8qIC4uLiByZXN0b3JlIHByZXZpb3VzIGRpcmVjdG9yeSAqLwotCWZf dG1wZGlyID0gMDsJCQkvKiBhbmQgcmVtZW1iZXIgd2UgZGlkIGl0LiAqLwotCWRlYnVnKEYxMTEs ImNrY3Byby53IEUgdG1wZGlyIHJlc3RvcmVkIixzYXZkaXIseCk7Ci0gICAgfQotI2VuZGlmIC8q IENLX1RNUERJUiAqLwotI2lmZGVmIElLU0RCCi0gICAgaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUo d2hhdCwiRVJST1IiLCAoY2hhciAqKWVwa3Rtc2csICIiKTsKLSNlbmRpZiAvKiBJS1NEQiAqLwot ICAgIFJFU1VNRTsKLX0KLSAgICBicmVhazsKLWNhc2UgNzM6Ci0gICAgeyBzdWNjZXNzID0gMDsg UVVJVDsgfQotICAgIGJyZWFrOwotY2FzZSA3NDoKLSAgICB7CQkJCQkvKiBBbnl0aGluZyBub3Qg YWNjb3VudGVkIGZvciBhYm92ZSAqLwotICAgIGVycnBrdCgoQ0hBUiAqKSJVbmV4cGVjdGVkIHBh Y2tldCB0eXBlIik7IC8qIEdpdmUgZXJyb3IgbWVzc2FnZSAqLwotICAgIHdpbmRvdygxKTsKLSAg ICB4aXRzdGEgfD0gKHdoYXQgJiBXX0tFUk1JVCk7CS8qIFNhdmUgdGhpcyBmb3IgZG9leGl0KCku ICovCi0gICAgUkVTVU1FOwkJCQkvKiBhbmQgcXVpdCAqLwotfQotICAgIGJyZWFrOwotCi0JICAg IH0KLSAgICB9Ci19Ci0KLWNoYXIgdGJsW10gPSB7Ci0gLTEsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDc0 LCA3NCwgNzQsIDc0LCA3MiwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs Ci0gNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsCi0gNzQsIDExLCA3NCwgIDcsIDc0LCA3NCwgNzQsICA5LCAgNCwgNzQsICA1LCAg OCwgNzQsIDc0LCA3NCwgIDYsCi0gNzQsIDczLCAgMywgIDEsIDc0LCA3NCwgIDIsIDc0LCAxMCwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gLTEsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDc0LCA3 NCwgNzQsIDc0LCAxNSwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0g NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgMTMsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsCi0gNzQsIDExLCA3NCwgIDcsIDc0LCA3NCwgNzQsICA5LCAgNCwgNzQsICA1LCAgOCwg NzQsIDc0LCA3NCwgIDYsCi0gNzQsIDczLCAgMywgIDEsIDc0LCA3NCwgIDIsIDc0LCAxMCwgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gLTEsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDc0LCA1Nywg NzQsIDc0LCA3MiwgNTMsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA1NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsCi0gNzQsIDExLCA3NCwgIDcsIDc0LCA3NCwgNzQsICA5LCAgNCwgNzQsICA1LCAgOCwgNzQs IDc0LCA3NCwgIDYsCi0gNzQsIDczLCAgMywgIDEsIDc0LCA3NCwgIDIsIDc0LCAxMCwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gLTEsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDU1LCA3NCwgNzQs IDU2LCA3MiwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDU5LCA3NCwgNzQsIDc0LCA3NCwgNzQs Ci0gNzQsIDExLCA3NCwgIDcsIDc0LCA3NCwgNzQsICA5LCAgNCwgNzQsICA1LCAgOCwgNzQsIDc0 LCA3NCwgIDYsCi0gNzQsIDczLCAgMywgIDEsIDc0LCA3NCwgIDIsIDc0LCAxMCwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsCi0gLTEsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDc0LCA3NCwgNzQsIDU4 LCA3MiwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDYxLCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0g NzQsIDExLCA3NCwgIDcsIDc0LCA3NCwgNzQsICA5LCAgNCwgNzQsICA1LCAgOCwgNzQsIDc0LCA3 NCwgIDYsCi0gNzQsIDYwLCAgMywgIDEsIDc0LCA3NCwgIDIsIDc0LCAxMCwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsCi0gLTEsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDc0LCA3NCwgNjUsIDc0LCA3 MiwgNzQsIDY0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDc0LCA2Mywg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNjIsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQs IDExLCA3NCwgIDcsIDc0LCA3NCwgNzQsICA5LCAgNCwgNzQsICA1LCAgOCwgNzQsIDc0LCA3NCwg IDYsCi0gNzQsIDczLCAgMywgIDEsIDc0LCA3NCwgIDIsIDc0LCAxMCwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsCi0gLTEsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDc0LCA3NCwgNzQsIDc0LCA3Miwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNjYsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDEx LCA3NCwgIDcsIDc0LCA3NCwgNzQsICA5LCAgNCwgNzQsICA1LCAgOCwgNzQsIDc0LCA3NCwgIDYs Ci0gNzQsIDczLCAgMywgIDEsIDc0LCA3NCwgIDIsIDc0LCAxMCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsCi0gLTEsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDc0LCA3NCwgNzQsIDc0LCA3MiwgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNjcsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDExLCA3 NCwgIDcsIDc0LCA3NCwgNzQsICA5LCAgNCwgNzQsICA1LCAgOCwgNzQsIDc0LCA3NCwgIDYsCi0g NzQsIDczLCAgMywgIDEsIDc0LCA3NCwgIDIsIDc0LCAxMCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsCi0gLTEsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsCi0gNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDc0LCA3NCwgNzQsIDc0LCA3MiwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNjksIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDExLCA3NCwg IDcsIDc0LCA3NCwgNzQsICA5LCAgNCwgNzQsICA1LCAgOCwgNzQsIDc0LCA3NCwgIDYsCi0gNzQs IDY4LCAgMywgIDEsIDc0LCA3NCwgIDIsIDc0LCAxMCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsCi0gLTEsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsCi0gNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDc0LCA3NCwgNzQsIDc0LCA3MiwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzAsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDExLCA3NCwgIDcs IDc0LCA3NCwgNzQsICA5LCAgNCwgNzQsICA1LCAgOCwgNzQsIDc0LCA3NCwgIDYsCi0gNzQsIDcz LCAgMywgIDEsIDc0LCA3NCwgIDIsIDc0LCAxMCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs Ci0gLTEsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsCi0gNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDc0LCA3NCwgNzQsIDc0LCA3MiwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzEsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDExLCA3NCwgIDcsIDc0 LCA3NCwgNzQsICA5LCAgNCwgNzQsICA1LCAgOCwgNzQsIDc0LCA3NCwgIDYsCi0gNzQsIDczLCAg MywgIDEsIDc0LCA3NCwgIDIsIDc0LCAxMCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0g LTEsIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAy OSwgMjksCi0gMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwg MjksIDI5LCAyOSwgMjksCi0gMjksIDI5LCAyOSwgMjYsIDI5LCAyOSwgMjksIDI1LCAxOSwgMTcs IDIyLCAyOSwgMjksIDI5LCAyOCwgMjMsCi0gMjksIDI5LCAxOCwgMTIsIDI5LCAyOSwgMjAsIDIx LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksCi0gMjksIDExLCAyOSwgIDcsIDI5LCAy OSwgMjksICA5LCAgNCwgMjksICA1LCAgOCwgMjksIDI5LCAyOSwgIDYsCi0gMjksIDI3LCAgMywg IDEsIDI5LCAyOSwgIDIsIDI5LCAxMCwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksCi0gLTEs IDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwg NTAsCi0gNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAs IDUwLCA1MCwgNTAsCi0gNTAsIDMyLCA1MCwgMzEsIDMzLCAzNCwgMzUsIDUwLCAzOCwgMzAsIDUw LCA0MCwgMzcsIDQ4LCA1MCwgNTAsCi0gNTAsIDUwLCAzOSwgNDEsIDQyLCA0NSwgNDcsIDQ2LCAz NiwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsCi0gNTAsIDExLCA1MCwgIDcsIDQ0LCA1MCwg NTAsICA5LCAgNCwgNTAsICA1LCAgOCwgNTAsIDQzLCA1MCwgIDYsCi0gNTAsIDQ5LCAgMywgIDEs IDUwLCA1MCwgIDIsIDUwLCAxMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsCi0gLTEsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs Ci0gNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsCi0gNzQsIDc0LCA3NCwgNzQsIDc0LCA3MiwgNzQsIDc0LCA3NCwgMTcsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDc0LCA3NCwgMTIsIDc0LCA3NCwgNzQsIDc0LCA3NCwg MTYsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDExLCA3NCwgIDcsIDc0LCA3NCwgNzQs ICA5LCAgNCwgNzQsICA1LCAgOCwgNzQsIDc0LCA3NCwgIDYsCi0gNzQsIDczLCAgMywgIDEsIDc0 LCA3NCwgIDIsIDc0LCAxMCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gLTEsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0g NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsCi0gNzQsIDc0LCA3NCwgNzQsIDc0LCA3MiwgNTMsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsCi0gNzQsIDc0LCA3NCwgMTIsIDc0LCA3NCwgNzQsIDc0LCA1NCwgNTIs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDExLCA3NCwgIDcsIDc0LCA3NCwgNzQsICA5 LCAgNCwgNzQsICA1LCAgOCwgNzQsIDc0LCA3NCwgIDYsCi0gNzQsIDUxLCAgMywgIDEsIDc0LCA3 NCwgIDIsIDc0LCAxMCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gLTEsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsCi0gNzQsIDc0LCA3NCwgNzQsIDc0LCA3MiwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsCi0gNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgMTQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDExLCA3NCwgIDcsIDc0LCA3NCwgNzQsICA5LCAg NCwgNzQsICA1LCAgOCwgNzQsIDc0LCA3NCwgIDYsCi0gNzQsIDczLCAgMywgIDEsIDc0LCA3NCwg IDIsIDc0LCAxMCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gIDAsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs Ci0gNzQsIDc0LCA3NCwgNzQsIDc0LCA3MiwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgMjQsCi0gNzQsIDc0LCA3NCwgMTIsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsCi0gNzQsIDExLCA3NCwgIDcsIDc0LCA3NCwgNzQsICA5LCAgNCwg NzQsICA1LCAgOCwgNzQsIDc0LCA3NCwgIDYsCi0gNzQsIDczLCAgMywgIDEsIDc0LCA3NCwgIDIs IDc0LCAxMCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCw3NAotfTsKLQotCi0vKgotICBGcm9tIGhl cmUgZG93biB0byBwcm90bygpIGFyZSByb3V0aW5lcyB0aGF0IHdlcmUgbW92ZWQgb3V0IG9mIHRo ZSBzdGF0ZQotICB0YWJsZSBzd2l0Y2hlciBiZWNhdXNlIHRoZSByZXN1bHRpbmcgc3dpdGNoKCkg aGFkIGJlY29tZSB0b28gbGFyZ2UuCi0gIFRvIG1vdmUgdGhlIGNvbnRlbnRzIG9mIGEgc3RhdGUt dGFibGUgY2FzZSB0byBhIHJvdXRpbmU6Ci0gICAgMS4gQWRkIGEgcHJvdG90eXBlIHRvIHRoZSBs aXN0IGFib3ZlIHRoZSBzdGF0ZSB0YWJsZSBzd2l0Y2hlci4KLSAgICAyLiBNYWtlIGEgcm91dGlu ZSB3aXRoIGFuIGFwcHJvcHJpYXRlIG5hbWUsIHJldHVybmluZyBpbnQuCi0gICAgMy4gTW92ZSB0 aGUgY29kZSBpbnRvIGl0LgotICAgIDQuIFB1dCBhIGNhbGwgdG8gdGhlIG5ldyByb3V0aW5lIGlu IHRoZSBmb3JtZXIgc3BvdDoKLSAgICAgICAgIHJjID0gbmFtZV9vZl9yb3V0aW5lKCk7Ci0gICAg ICAgICBpZiAocmMgPiAtMSkgcmV0dXJuKHJjKTsKLSAgICA1LiBBZGQgInJldHVybigtMSk7IiBh ZnRlciBldmVyeSBSRVNVTUUsIFNFUlZFLCBvciBCRUdJTiBtYWNybyBhbmQKLSAgICAgICBhdCB0 aGUgZW5kIGlmIHRoZSBjb2RlIGlzIG9wZW4tZW5kZWQuCi0qLwotc3RhdGljIGludAotcmN2X2Zp cnN0ZGF0YSgpIHsKLSAgICBleHRlcm4gaW50IGRpc3BvczsKLSAgICBkZWJ1ZyhGMTAxLCJyY3Zf Zmlyc3RkYXRhIiwiIixkaXNwb3MpOwotCi0gICAgaWYgKGRpc2NhcmQpIHsJCQkvKiBpZiB3ZSdy ZSBkaXNjYXJkaW5nIHRoZSBmaWxlICovCi0JYWNrMSgoQ0hBUiAqKSJYIik7CQkvKiBqdXN0IGFj ayB0aGUgZGF0YSBsaWtlIHRoaXMuICovCi0JY2FuY2VsKys7CQkJLyogYW5kIGNvdW50IGl0ICov Ci0JQkVHSU4gcmRwa3Q7CQkJLyogYW5kIHdhaXQgZm9yIG1vcmUgZGF0YSBwYWNrZXRzLiAqLwot CXJldHVybigtMSk7Ci0gICAgfSBlbHNlIHsJCQkJLyogTm90IGRpc2NhcmRpbmcuICovCi0JcmZf ZXJyID0gIkNhbid0IG9wZW4gZmlsZSI7Ci0JaWYgKHhmbGcpIHsJCQkvKiBJZiBzY3JlZW4gZGF0 YSAqLwotCSAgICBpZiAocmVtZmlsZSkgewkJLyogcmVkaXJlY3RlZCB0byBmaWxlICovCi0JCWlm IChyZW1waXBlKQkJLyogb3IgcGlwZSAqLwotCQkgIHggPSBvcGVuYyhaT0ZJTEUscmVtZGVzdCk7 IC8qIFBpcGU6IHN0YXJ0IGNvbW1hbmQgKi8KLQkJZWxzZQotCQkgIHggPSBvcGVuYShyZW1kZXN0 LCZpYXR0cik7IC8qIEZpbGU6IG9wZW4gd2l0aCBhdHRyaWJ1dGVzICovCi0JICAgIH0gZWxzZSB7 CQkJLyogb3RoZXJ3aXNlICovCi0JCXggPSBvcGVudCgmaWF0dHIpOwkvKiAib3BlbiIgdGhlIHNj cmVlbiAqLwotCSAgICB9Ci0JfSBlbHNlIHsJCQkvKiBvdGhlcndpc2UgKi8KLSNpZmRlZiBDQUxJ QlJBVEUKLQkgICAgaWYgKGNhbGlicmF0ZSkgewkJLyogSWYgY2FsaWJyYXRpb24gcnVuICovCi0J CXggPSBja29wZW54KCZpYXR0cik7CS8qIG9wZW4gbm90aGluZyAqLwotI2lmZGVmIFNUUkVBTUlO RwotCQlpZiAoc3RyZWFtaW5nKQkJLyogU3RyZWFtaW5nICovCi0JCSAgZmFzdGFjaygpOwkJLyog QUNLIHdpdGhvdXQgQUNLaW5nLiAqLwotCQllbHNlCi0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0J CSAgYWNrKCk7CQkvKiBTZW5kIHJlYWwgQUNLICovCi0JCUJFR0lOIHJkcGt0OwkJLyogUHJvY2Vl ZCB0byBuZXh0IHN0YXRlICovCi0JCXJldHVybigtMSk7Ci0JICAgIH0gZWxzZQotI2VuZGlmIC8q IENBTElCUkFURSAqLwotI2lmZGVmIFVOSVgKLS8qCi0gIEluIFVOSVggd2UgY2FuIHBpcGUgdGhl IGZpbGUgZGF0YSBpbnRvIHRoZSBtYWlsIHByb2dyYW0sIHdoaWNoIGlzIHRvIGJlCi0gIHByZWZl cnJlZCB0byB3cml0aW5nIGl0IG91dCB0byBhIHRlbXAgZmlsZSBhbmQgdGhlbiBtYWlsaW5nIGl0 IGFmdGVyd2FyZHMuCi0gIFRoaXMgZGVwZW5kcyByYXRoZXIgaGVhdmlseSBvbiBhbGwgVU5JWGVz IGhhdmluZyBhIG1haWwgY29tbWFuZCB0aGF0Ci0gIGFjY2VwdHMgJy1zICJzdWJqZWN0Iicgb24g dGhlIGNvbW1hbmQgbGluZS4gIE1BSUxDTUQgKGUuZy4gbWFpbCwgTWFpbCwgbWFpbHgpCi0gIGlz IGRlZmluZWQgaW4gY2t1ZmlvLmMuCi0qLwotCSAgICBpZiAoZGlzcG9zID09ICdNJykgewkvKiBN YWlsLi4uICovCi0JCWNoYXIgKnM7Ci0JCWNoYXIgKiB0bXAgPSBOVUxMOwotCQlpbnQgbiA9IDA7 Ci0JCWV4dGVybiBjaGFyICpNQUlMQ01EOwotCQlzID0gaWF0dHIuZGlzcC52YWwgKyAxOwotCQlu ID0gKGludClzdHJsZW4oTUFJTENNRCkgKyAgICAvKiBNYWlsIGNvbW1hbmQgKi8KLQkJICAoaW50 KXN0cmxlbihzKSArCSAgICAgIC8qIGFkZHJlc3MgKi8KLQkJICAoaW50KXN0cmxlbihvZmlsbmFt KSArIDMyOyAgLyogc3ViamVjdCAqLwotCQlpZiAodG1wID0gKGNoYXIgKiltYWxsb2MobikpIHsK LQkJICAgIGNrbWFreG1zZyh0bXAsbiwKLQkJCSAgICAgIE1BSUxDTUQsIiAtcyBcIiIsb2ZpbG5h bSwiXCIgIixzLAotCQkJICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7 Ci0JCSAgICBkZWJ1ZyhGMTExLCJyY3ZfZmlyc2RhdGEgbWFpbCIsdG1wLChpbnQpc3RybGVuKHRt cCkpOwotCQkgICAgeCA9IG9wZW5jKFpPRklMRSwoY2hhciAqKXRtcCk7Ci0JCSAgICBmcmVlKHRt cCk7Ci0JCX0gZWxzZQotCQkgIHggPSAwOwotCSAgICB9IGVsc2UgaWYgKGRpc3BvcyA9PSAnUCcp IHsgLyogRGl0dG8gZm9yIHByaW50ICovCi0JCWNoYXIgKiB0bXAgPSBOVUxMOwotCQlpbnQgbjsK LQkJZXh0ZXJuIGNoYXIgKlBSSU5UQ01EOwotCQluID0gKGludClzdHJsZW4oUFJJTlRDTUQpICsg KGludClzdHJsZW4oaWF0dHIuZGlzcC52YWwrMSkgKyA0OwotCQlpZiAodG1wID0gKGNoYXIgKilt YWxsb2MobikpIHsKLQkJICAgIHNwcmludGYodG1wLAkvKiBzYWZlIChwcmVjaGVja2VkKSAqLwot CQkJICAgICIlcyAlcyIsIFBSSU5UQ01ELCBpYXR0ci5kaXNwLnZhbCArIDEpOwotCQkgICAgeCA9 IG9wZW5jKFpPRklMRSwoY2hhciAqKXRtcCk7Ci0JCSAgICBmcmVlKHRtcCk7Ci0JCX0gZWxzZQot CQkgIHggPSAwOwotCSAgICB9IGVsc2UKLSNlbmRpZiAvKiBVTklYICovCi0JICAgICAgeCA9IG9w ZW5hKGZpbG5hbSwmaWF0dHIpOwkvKiBvcGVuIHRoZSBmaWxlLCB3aXRoIGF0dHJpYnV0ZXMgKi8K LQl9Ci0JaWYgKHgpIHsJCQkvKiBJZiBmaWxlIHdhcyBvcGVuZWQgb2sgKi8KLQkgICAgaW50IHJj LCBxZjsKLSNpZm5kZWYgTk9TUEwKLQkgICAgcWYgPSBxdWVyeTsKLSNlbHNlCi0JICAgIHFmID0g MDsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZkZWYgQ0tUVU5JTkcKLQkgICAgcmMgPSAoYmlu YXJ5ICYmICFwYXJpdHkpID8KLQkgICAgICBiZGVjb2RlKHJkYXRhcCxwdXRmaWwpOgotCSAgICAg ICBkZWNvZGUocmRhdGFwLCBxZiA/IHB1dHRybSA6IHB1dGZpbCwgMSk7Ci0jZWxzZQotCSAgICBy YyA9IGRlY29kZShyZGF0YXAsIHFmID8gcHV0dHJtIDogcHV0ZmlsLCAxKTsKLSNlbmRpZiAvKiBD S1RVTklORyAqLwotCSAgICBpZiAocmMgPCAwKSB7Ci0JCWVycnBrdCgoQ0hBUiAqKSJFcnJvciB3 cml0aW5nIGRhdGEiKTsKLQkJUkVTVU1FOwotCQlyZXR1cm4oLTEpOwotCSAgICB9Ci0jaWZkZWYg U1RSRUFNSU5HCi0JICAgIGlmIChzdHJlYW1pbmcpCQkvKiBTdHJlYW1pbmcgd2FzIG5lZ290aWF0 ZWQgKi8KLQkgICAgICBmYXN0YWNrKCk7CQkvKiBBQ0sgd2l0aG91dCBBQ0tpbmcuICovCi0JICAg IGVsc2UKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLQkgICAgICBhY2soKTsJCQkvKiBhY2tub3ds ZWRnZSBpdCAqLwotCSAgICBCRUdJTiByZHBrdDsJCS8qIGFuZCBzd2l0Y2ggdG8gcmVjZWl2ZS1k YXRhIHN0YXRlICovCi0JICAgIHJldHVybigtMSk7Ci0JfSBlbHNlIHsJCQkvKiBvdGhlcndpc2Ug Ki8KLQkgICAgZXJycGt0KChDSEFSICopIHJmX2Vycik7CS8qIHNlbmQgZXJyb3IgcGFja2V0ICov Ci0gICAgCSAgICBSRVNVTUU7CQkJLyogYW5kIHF1aXQuICovCi0JICAgIHJldHVybigtMSk7Ci0J fQotICAgIH0KLX0KLQotc3RhdGljIGludAotcmN2X3Nob3J0cmVwbHkoKSB7Ci0jaWZkZWYgUEtU WkVST0hBQ0sKLSAgICBzdWNjZXNzID0gMDsKLSAgICBkZWJ1ZyhGMTExLCJyY3Zfc2hvcnRyZXBs eSIscmRhdGFwLGlwa3RsZW4pOwotICAgIGlmIChpcGt0YWNrWzBdICYmICFzdHJuY21wKGlwa3Rh Y2ssKGNoYXIgKilyZGF0YXAsaXBrdGxlbikpIHsKLQkvKiBObyBpdCdzIHRoZSBBQ0sgdG8gdGhl IEkgcGFja2V0IGFnYWluICovCi0JeCA9IHNjbWQodmNtZCwoQ0hBUiAqKWNtYXJnKTsJLyogU28g c2VuZCB0aGUgUkVNT1RFIGNvbW1hbmQgYWdhaW4gKi8KLQkvKiBNYXliZSB0aGlzIHNob3VsZCBi ZSByZXNlbmQoKSAqLwotCWRlYnVnKEYxMTAsIklQS1RaRVJPSEFDSyIsaXBrdGFjayx4KTsKLQlp ZiAoeCA8IDApIHsKLQkgICAgZXJycGt0KChDSEFSICopc3JpbXNnKTsKLQkgICAgUkVTVU1FOwot CSAgICByZXR1cm4oLTEpOwotCX0KLSAgICB9IGVsc2UgewotCWlwa3RhY2tbMF0gPSBOVUw7Ci0j ZW5kaWYgLyogUEtUWkVST0hBQ0sgKi8KLQl1cnNlcnZlciA9IDE7Ci0jaWZuZGVmIE5PU0VSVkVS Ci0jaWZuZGVmIE5PU1BMCi0JaWYgKHF1ZXJ5KSB7CQkJLyogSWYgdG8gcXVlcnksICovCi0JICAg IHFidWZwID0gcXVlcnlidWY7CQkvKiAgaW5pdGlhbGl6ZSBxdWVyeSByZXNwb25zZSBidWZmZXIg Ki8KLQkgICAgcWJ1Zm4gPSAwOwotCSAgICBxdWVyeWJ1ZlswXSA9IE5VTDsKLQl9Ci0jZW5kaWYg LyogTk9TUEwgKi8KLQl4ID0gMTsKLQlpZiAocmVtZmlsZSkgewkJCS8qIFJlc3BvbnNlIHJlZGly ZWN0ZWQgdG8gZmlsZSAqLwotCSAgICByZl9lcnIgPSAiQ2FuJ3Qgb3BlbiBmaWxlIjsKLQkgICAg aWYgKHJlbXBpcGUpCQkvKiBvciBwaXBlICovCi0JICAgICAgeCA9Ci0jaWZuZGVmIE5PUFVTSAot CQl6eGNtZChaT0ZJTEUscmVtZGVzdCkJLyogUGlwZTogU3RhcnQgY29tbWFuZCAqLwotI2Vsc2UK LQkJMAotI2VuZGlmIC8qIE5PUFVTSCAqLwotCQk7Ci0JICAgIGVsc2UKLQkgICAgICB4ID0gb3Bl bmEocmVtZGVzdCwmaWF0dHIpOyAvKiBGaWxlOiBPcGVuIHdpdGggYXR0cmlidXRlcyAqLwotCSAg ICBkZWJ1ZyhGMTExLCJyY3Zfc2hvcnRyZXBseSByZW1maWxlIixyZW1kZXN0LHgpOwotCX0gZWxz ZSB7Ci0JICAgIHggPSBvcGVudCgmaWF0dHIpOwkJLyogIm9wZW4iIHRoZSBzY3JlZW4gKi8KLQl9 Ci0JaWYgKHgpIHsJCQkvKiBJZiBmaWxlIHdhcyBvcGVuZWQgb2sgKi8KLQkgICAgaWYgKGRlY29k ZShyZGF0YXAsCi0jaWZuZGVmIE5PU1BMCi0JCSAgICAgICAocXVlcnkgfHwgIXJlbWZpbGUpID8g cHV0dHJtIDoKLSNlbHNlCi0JCSAgICAgICAhcmVtZmlsZSA/IHB1dHRybSA6Ci0jZW5kaWYgLyog Tk9TUEwgKi8KLQkJICAgICAgIHpwdXRmaWwsIDEpIDwgMCkgeyAvKiBOb3RlOiB6cHV0ZmlsLCBu b3QgcHV0ZmlsLiAqLwotCQllcnJwa3QoKENIQVIgKikiRXJyb3Igd3JpdGluZyBkYXRhIik7Ci0J CVJFU1VNRTsKLQkJcmV0dXJuKC0xKTsKLQkgICAgfSBlbHNlIHsKLQkJaWYgKHJkYXRhcCkJCS8q IElmIHdlIGhhZCBkYXRhICovCi0JCSAgaWYgKCpyZGF0YXApCQkvKiBhZGQgYSBsaW5lIHRlcm1p bmF0b3IgKi8KLQkJICAgIGlmIChyZW1maWxlKSB7CS8qIHRvIGZpbGUgKi8KLQkJCXpzb3V0bCha T0ZJTEUsIiIpOwotCQkgICAgfSBlbHNlIHsJCS8qIG9yIHRvIHNjcmVlbi4gKi8KLSNpZm5kZWYg Tk9JQ1AKLQkJCWlmICghcXVlcnkgfHwgIXhjbWRzcmMpCi0jZW5kaWYgLyogTk9JQ1AgKi8KLQkJ CSAgaWYgKCEocXVpZXQgJiYgcmNkYWN0aXZlKSkKLQkJCSAgICBjb25vbGwoIiIpOwotCQkgICAg fQotCQlpZiAoYnllX2FjdGl2ZSAmJiBuZXR3b3JrKSB7IC8qIEkgc2VudCBCWUUgb3IgUkVNT1RF IExPR09VVCAqLwotCQkgICAgbXNsZWVwKDUwMCk7CS8qIGNvbW1hbmQgYW5kIGdvdCB0aGUgQUNL Li4uICovCi0JCSAgICBieWVfYWN0aXZlID0gMDsKLQkJICAgIHR0Y2xvcygwKTsKLQkJfQotCQlj bHNvZigwKTsKLQkJaWYgKCFlcGt0c2VudCAmJiAhZXBrdHJjdmQpIC8qIElmIG5vIGVycm9yIHBh Y2tldC4uLiAqLwotCQkgIHN1Y2Nlc3MgPSAxOwkJLyogc3VjY2Vzcy4gKi8KLQkJUkVTVU1FOwot CQlyZXR1cm4oLTEpOwotCSAgICB9Ci0JfSBlbHNlIHsJCQkvKiBGaWxlIG5vdCBvcGVuZWQgT0sg Ki8KLQkgICAgZXJycGt0KChDSEFSICopIHJmX2Vycik7CS8qIHNlbmQgZXJyb3IgbWVzc2FnZSAq LwotCSAgICBSRVNVTUU7CQkJLyogYW5kIHF1aXQuICovCi0JICAgIHJldHVybigtMSk7Ci0JfQot I2VuZGlmIC8qIE5PU0VSVkVSICovCi0jaWZkZWYgUEtUWkVST0hBQ0sKLSAgICB9Ci0jZW5kaWYg LyogUEtUWkVST0hBQ0sgKi8KLSAgICBkZWJ1ZyhGMTAxLCJyY3Zfc2hvcnRyZXBseSBmYWxsdGhy dSIsIiIsc3VjY2Vzcyk7Ci0gICAgcmV0dXJuKC0xKTsKLX0KLQotCi1zdGF0aWMgaW50Ci1zcnZf cXVlcnkoKSB7Ci0jaWZuZGVmIE5PU0VSVkVSCi0jaWZuZGVmIE5PU1BMCi0gICAgY2hhciBjOwot I2lmZGVmIENLU1lTTE9HCi0gICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dn aW5nKQotICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiUkVNT1RFIFFVRVJZ IiwgKGNoYXIgKilzcnZjbWQpOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0jaWZkZWYgSUtTREIK LSAgICBpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJSRU1PVEUgUVVFUlkiLCAoY2hhciAq KShzcnZjbWQrMiksICIiKTsKLSNlbmRpZiAvKiBJS1NEQiAqLwotICAgIGMgPSAqKHNydmNtZCsy KTsJCQkvKiBRID0gUXVlcnksIFMgPSBTZXQgKi8KLSAgICBpZiAoYyA9PSAnUScpIHsJCQkvKiBR dWVyeSAqLwotCWlmICghRU5BQkxFRChlbl9xdWUpKSB7IC8qIFNlY3VyaXR5ICovCi0JICAgIGVy cnBrdCgoQ0hBUiAqKSJSRU1PVEUgUVVFUlkgZGlzYWJsZWQiKTsKLQkgICAgUkVTVU1FOwotCSAg ICByZXR1cm4oLTEpOwotCX0gZWxzZSB7CQkJLyogUXVlcnkgYWxsb3dlZCAqLwotCSAgICBpbnQg bjsgY2hhciAqcCwgKnE7Ci0JICAgIHFidWZwID0gcXVlcnlidWY7CQkvKiBXaXBlIG91dCBvbGQg c3R1ZmYgKi8KLQkgICAgcWJ1Zm4gPSAwOwotCSAgICBxdWVyeWJ1ZlswXSA9IE5VTDsKLQkgICAg cCA9IChjaGFyICopIHNydmNtZCArIDM7CS8qIFBvaW50ZXIgZm9yIG1ha2luZyB3cmFwcGVyICov Ci0JICAgIG4gPSBzdHJsZW4oKGNoYXIgKilzcnZjbWQpOwkvKiBQb3NpdGlvbiBvZiBlbmQgKi8K LQkgICAgYyA9ICooc3J2Y21kKzQpOwkJLyogV2hpY2ggdHlwZSBvZiB2YXJpYWJsZSAqLwotCi0J ICAgIGlmICgqKHNydmNtZCs2KSA9PSBDTURRKSB7CS8qIFN0YXJ0cyB3aXRoIGNvbW1hbmQgcXVv dGU/ICovCi0JCXAgPSAoY2hhciAqKSBzcnZjbWQgKyA2OyAvKiBUYWtlIGl0IGxpdGVyYWxseSAq LwotCQlpZiAoKnAgPT0gQ01EUSkgcCsrOwotCSAgICB9IGVsc2UgewkJCS8qIFRoZXkgcGxheWVk IGJ5IHRoZSBydWxlcyAqLwotCQlpZiAoYyA9PSAnSycpIHsJCS8qIEtlcm1pdCB2YXJpYWJsZSAq LwotCQkgICAgaW50IGs7Ci0JCSAgICBrID0gKGludCkgc3RybGVuKHApOwotCQkgICAgaWYgKGsg PiAwICYmIHBbay0xXSA9PSAnKScpIHsKLQkJCXAgPSAoY2hhciAqKShzcnZjbWQgKyA0KTsKLQkJ CSooc3J2Y21kKzQpID0gQ01EUTsKLQkJCSooc3J2Y21kKzUpID0gJ2YnOyAvKiBGdW5jdGlvbiwg c28gbWFrZSBpdCBcZi4uLigpICovCi0JCSAgICB9IGVsc2UgewotCQkJKihzcnZjbWQrMykgPSBD TURROyAvKiBTdHVmZiB3cmFwcGluZyBpbnRvIGJ1ZmZlciAqLwotCQkJKihzcnZjbWQrNCkgPSAn dic7ICAvKiBWYXJpYWJsZSwgc28gbWFrZSBpdCBcdiguLi4pICovCi0JCQkqKHNydmNtZCs1KSA9 ICcoJzsgIC8qIGFyb3VuZCB2YXJpYWJsZSBuYW1lICovCi0JCQkqKHNydmNtZCtuKSA9ICcpJzsK LQkJCSooc3J2Y21kK24rMSkgPSBOVUw7Ci0JCSAgICB9Ci0JCX0gZWxzZSB7Ci0JCSAgICAqKHNy dmNtZCszKSA9IENNRFE7IC8qIFN0dWZmIHdyYXBwaW5nIGludG8gYnVmZmVyICovCi0JCSAgICAq KHNydmNtZCs0KSA9ICd2JzsgLyogIFZhcmlhYmxlLCBzbyBtYWtlIGl0IFx2KC4uLikgKi8KLQkJ ICAgICooc3J2Y21kKzUpID0gJygnOwkvKiBhcm91bmQgdmFyaWFibGUgbmFtZSAqLwotCQkgICAg KihzcnZjbWQrbikgPSAnKSc7Ci0JCSAgICAqKHNydmNtZCtuKzEpID0gTlVMOwotCQkgICAgaWYg KGMgPT0gJ1MnKSB7CS8qIFN5c3RlbSB2YXJpYWJsZSAqLwotCQkJKihzcnZjbWQrNCkgPSAnJCc7 IC8qICBzbyBpdCdzIFwkKC4uLikgKi8KLQkJICAgIH0gZWxzZSBpZiAoYyA9PSAnRycpIHsgLyog Tm9uLVwgR2xvYmFsIHZhcmlhYmxlICovCi0JCQkqKHNydmNtZCs0KSA9ICdtJzsgLyogIHNvIHdy YXAgaXQgaW4gXG0oLi4uKSAqLwotCQkgICAgfQotCQl9Ci0JICAgIH0JCQkJLyogTm93IGV2YWx1 YXRlIGl0ICovCi0JICAgIG4gPSBRQlVGTDsJCQkvKiBNYXggbGVuZ3RoICovCi0JICAgIHEgPSBx dWVyeWJ1ZjsJCS8qIFdoZXJlIHRvIHB1dCBpdCAqLwotCSAgICBpZiAoenpzdHJpbmcocCwmcSwm bikgPCAwKSB7Ci0JCWVycnBrdCgobiA+IDApID8gKENIQVIgKikiQ2FuJ3QgZ2V0IHZhbHVlIgot CQkgICAgICAgICAgICAgICA6IChDSEFSICopIlZhbHVlIHRvbyBsb25nIgotCQkgICAgICAgKTsK LQkJUkVTVU1FOwotCQlyZXR1cm4oLTEpOwotCSAgICB9IGVsc2UgewotCQlpZiAoZW5jc3RyKChD SEFSICopcXVlcnlidWYpID4gLTEpIHsgLyogRW5jb2RlIGl0ICovCi0JCSAgICBhY2sxKGRhdGEp OwkJLyogSWYgaXQgZml0cywgc2VuZCBpdCBiYWNrIGluIEFDSyAqLwotCQkgICAgc3VjY2VzcyA9 IDE7Ci0JCSAgICBSRVNVTUU7Ci0JCSAgICByZXR1cm4oLTEpOwotCQl9IGVsc2UgaWYgKHNuZHN0 cmluZyhxdWVyeWJ1ZikpIHsgLyogTG9uZyBmb3JtIHJlc3BvbnNlICovCi0JCSAgICBCRUdJTiBz c2luaXQ7Ci0JCSAgICByZXR1cm4oLTEpOwotCQl9IGVsc2UgewkJLyogc25kaGxwKCkgZmFpbHMg Ki8KLQkJICAgIGVycnBrdCgoQ0hBUiAqKSJDYW4ndCBzZW5kIHZhbHVlIik7Ci0JCSAgICBSRVNV TUU7Ci0JCSAgICByZXR1cm4oLTEpOwotCQl9Ci0JICAgIH0KLQl9Ci0gICAgfSBlbHNlIGlmIChj ID09ICdTJykgewkJLyogU2V0IChhc3NpZ24pICovCi0JaWYgKCFFTkFCTEVEKGVuX2FzZykpIHsJ CS8qIFNlY3VyaXR5ICovCi0JICAgIGVycnBrdCgoQ0hBUiAqKSJSRU1PVEUgQVNTSUdOIGRpc2Fi bGVkIik7Ci0JICAgIFJFU1VNRTsKLQkgICAgcmV0dXJuKC0xKTsKLQl9IGVsc2UgewkJCS8qIE9L ICovCi0JICAgIGludCBuOwotCSAgICBuID0geHVuY2hhcigqKHNydmNtZCszKSk7CS8qIExlbmd0 aCBvZiBuYW1lICovCi0JICAgIG4gPSAzICsgbiArIDE7CQkvKiBQb3NpdGlvbiBvZiBsZW5ndGgg b2YgdmFsdWUgKi8KLQkgICAgKihzcnZjbWQrbikgPSBOVUw7CQkvKiBEb24ndCBuZWVkIGl0ICov Ci0JICAgIGlmIChhZGRtYWMoKGNoYXIgKikoc3J2Y21kKzQpLChjaGFyICopKHNydmNtZCtuKzEp KSA8IDApCi0JICAgICAgZXJycGt0KChDSEFSICopIlJFTU9URSBBU1NJR04gZmFpbGVkIik7Ci0J ICAgIGVsc2UgewotCQlhY2soKTsKLQkJc3VjY2VzcyA9IDE7Ci0JICAgIH0KLQkgICAgUkVTVU1F OwotCSAgICByZXR1cm4oLTEpOwotCX0KLSAgICB9IGVsc2UgewotCWVycnBrdCgoQ0hBUiAqKSJC YWRseSBmb3JtZWQgc2VydmVyIGNvbW1hbmQiKTsKLQlSRVNVTUU7Ci0JcmV0dXJuKC0xKTsKLSAg ICB9Ci0jZWxzZQotICAgIGVycnBrdCgoQ0hBUiAqKSJWYXJpYWJsZSBxdWVyeS9zZXQgbm90IGF2 YWlsYWJsZSIpOwotICAgIFJFU1VNRTsKLSAgICByZXR1cm4oLTEpOwotI2VuZGlmIC8qIE5PU1BM ICovCi0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLX0KLQotc3RhdGljIGludAotc3J2X2NvcHkoKSB7 Ci0jaWZuZGVmIE5PU0VSVkVSCi0jaWZkZWYgQ0tTWVNMT0cKLSAgICBpZiAoY2t4c3lzbG9nID49 IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCi0gICAgICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNl cnZlciIsICJSRU1PVEUgQ09QWSIsIChjaGFyICopc3J2Y21kKTsKLSNlbmRpZiAvKiBDS1NZU0xP RyAqLwotI2lmZGVmIFpDT1BZCi0gICAgaWYgKCFFTkFCTEVEKGVuX2NweSkpIHsKLQllcnJwa3Qo KENIQVIgKikiUkVNT1RFIENPUFkgZGlzYWJsZWQiKTsKLQlSRVNVTUU7Ci0JcmV0dXJuKC0xKTsK LSAgICB9IGVsc2UgewotCWNoYXIgKnN0cjEsICpzdHIyLCBmMVsyNTZdLCBmMlsyNTZdOwotCWlu dCAgbGVuMSwgbGVuMjsKLSAgICAgICAgbGVuMSA9IHh1bmNoYXIoc3J2Y21kWzFdKTsJLyogU2Vw YXJhdGUgdGhlIHBhcmFtZXRlcnMgKi8KLSAgICAgICAgbGVuMiA9IHh1bmNoYXIoc3J2Y21kWzIr bGVuMV0pOwotICAgICAgICBzdHJuY3B5KGYxLChjaGFyICopKHNydmNtZCsyKSxsZW4xKTsKLSAg ICAgICAgZjFbbGVuMV0gPSBOVUw7Ci0gICAgICAgIHN0cm5jcHkoZjIsKGNoYXIgKikoc3J2Y21k KzMrbGVuMSksbGVuMik7Ci0gICAgICAgIGYyW2xlbjJdID0gTlVMOwotI2lmZGVmIElLU0RCCi0J aWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiUkVNT1RFIENPUFkiLCBmMSwgZjIpOwotI2Vu ZGlmIC8qIElLU0RCICovCi0JaWYgKCFFTkFCTEVEKGVuX2N3ZCkpIHsJCS8qIElmIENXRCBpcyBk aXNhYmxlZCAqLwotCSAgICB6c3RyaXAoZjEsJnN0cjEpOwkJLyogYW5kIHRoZXkgaW5jbHVkZWQg YSBwYXRobmFtZSwgKi8KLSAgICAgICAgICAgIHpzdHJpcChmMiwmc3RyMik7Ci0JICAgIGlmIChz dHJjbXAoZjEsc3RyMSkgfHwgc3RyY21wKGYyLHN0cjIpKSB7IC8qIFJlZnVzZS4gKi8KLQkJZXJy cGt0KChDSEFSICopIkFjY2VzcyBkZW5pZWQiKTsKLQkJUkVTVU1FOwkJCS8qIFJlbWVtYmVyLCB0 aGlzIGlzIG5vdCBhIGdvdG8hICovCi0JCXJldHVybigtMSk7Ci0JICAgIH0KLQl9Ci0JaWYgKHN0 YXRlID09IGdlbmVyaWMpIHsJCS8qIEl0J3MgT0sgdG8gZ28gYWhlYWQuICovCi0gICAgICAgICAg ICBpZiAoemNvcHkoZjEsZjIpKSB7CQkvKiBUcnkgKi8KLQkJZXJycGt0KChDSEFSICopIkNhbid0 IGNvcHkgZmlsZSIpOyAvKiBnaXZlIGVycm9yIG1lc3NhZ2UgKi8KLQkgICAgfSBlbHNlIHsKLQkJ c3VjY2VzcyA9IDE7Ci0JCWFjaygpOwotCSAgICB9Ci0gICAgICAgICAgICBSRVNVTUU7CQkJLyog d2FpdCBmb3IgbmV4dCBzZXJ2ZXIgY29tbWFuZCAqLwotCSAgICByZXR1cm4oLTEpOwotCX0KLSAg ICB9Ci0gICAgcmV0dXJuKC0xKTsKLSNlbHNlIC8qIG5vIFpDT1BZICovCi0gICAgZXJycGt0KChD SEFSICopIlJFTU9URSBDT1BZIG5vdCBhdmFpbGFibGUiKTsgLyogZ2l2ZSBlcnJvciBtZXNzYWdl ICovCi0gICAgUkVTVU1FOwkJCQkvKiB3YWl0IGZvciBuZXh0IHNlcnZlciBjb21tYW5kICovCi0g ICAgcmV0dXJuKC0xKTsKLSNlbmRpZiAvKiBaQ09QWSAqLwotI2VuZGlmIC8qIE5PU0VSVkVSICov Ci19Ci0KLXN0YXRpYyBpbnQKLXNydl9yZW5hbWUoKSB7Ci0jaWZuZGVmIE5PU0VSVkVSCi0jaWZk ZWYgQ0tTWVNMT0cKLSAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcp Ci0gICAgICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJSRU1PVEUgUkVOQU1FIiwg KGNoYXIgKilzcnZjbWQpOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0jaWZkZWYgWlJFTkFNRQot ICAgIGlmICghRU5BQkxFRChlbl9yZW4pKSB7Ci0JZXJycGt0KChDSEFSICopIlJFTU9URSBSRU5B TUUgZGlzYWJsZWQiKTsKLQlSRVNVTUU7Ci0JcmV0dXJuKC0xKTsKLSAgICB9IGVsc2UgewkJCQkv KiBSRU5BTUUgaXMgZW5hYmxlZCAqLwotCWNoYXIgKnN0cjEsICpzdHIyLCBmMVsyNTZdLCBmMlsy NTZdOwotCWludCBsZW4xLCBsZW4yOwotCWxlbjEgPSB4dW5jaGFyKHNydmNtZFsxXSk7CS8qIFNl cGFyYXRlIHRoZSBwYXJhbWV0ZXJzICovCi0JbGVuMiA9IHh1bmNoYXIoc3J2Y21kWzIrbGVuMV0p OwotCXN0cm5jcHkoZjEsKGNoYXIgKikoc3J2Y21kKzIpLGxlbjEpOwotCWYxW2xlbjFdID0gTlVM OwotCXN0cm5jcHkoZjIsKGNoYXIgKikoc3J2Y21kKzMrbGVuMSksbGVuMik7Ci0JZjJbbGVuMl0g PSBOVUw7Ci0JbGVuMiA9IHh1bmNoYXIoc3J2Y21kWzIrbGVuMV0pOwotCXN0cm5jcHkoZjEsKGNo YXIgKikoc3J2Y21kKzIpLGxlbjEpOwotCWYxW2xlbjFdID0gTlVMOwotCXN0cm5jcHkoZjIsKGNo YXIgKikoc3J2Y21kKzMrbGVuMSksbGVuMik7Ci0JZjJbbGVuMl0gPSBOVUw7Ci0jaWZkZWYgSUtT REIKLQlpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJSRU1PVEUgUkVOQU1FIiwgZjEsIGYy KTsKLSNlbmRpZiAvKiBJS1NEQiAqLwotCWlmICghRU5BQkxFRChlbl9jd2QpKSB7CQkvKiBJZiBD V0QgaXMgZGlzYWJsZWQgKi8KLQkgICAgenN0cmlwKGYxLCZzdHIxKTsJCS8qIGFuZCB0aGV5IGlu Y2x1ZGVkIGEgcGF0aG5hbWUsICovCi0JICAgIHpzdHJpcChmMiwmc3RyMik7Ci0JICAgIGlmICgg c3RyY21wKGYxLHN0cjEpIHx8IHN0cmNtcChmMixzdHIyKSApIHsgLyogcmVmdXNlLiAqLwotCQll cnJwa3QoKENIQVIgKikiQWNjZXNzIGRlbmllZCIpOwotCQlSRVNVTUU7CQkJLyogUmVtZW1iZXIs IHRoaXMgaXMgbm90IGEgZ290byEgKi8KLQkJcmV0dXJuKC0xKTsKLQkgICAgfQotCX0KLQlpZiAo c3RhdGUgPT0gZ2VuZXJpYykgewkJLyogSXQncyBPSyB0byBnbyBhaGVhZC4gKi8KLQkgICAgaWYg KHpyZW5hbWUoZjEsZjIpKSB7CS8qIFRyeSAqLwotCQllcnJwa3QoKENIQVIgKikiQ2FuJ3QgcmVu YW1lIGZpbGUiKTsgLyogR2l2ZSBlcnJvciBtc2cgKi8KLQkgICAgfSBlbHNlIHsKLQkJc3VjY2Vz cyA9IDE7Ci0JCWFjaygpOwotCSAgICB9Ci0JICAgIFJFU1VNRTsJCQkvKiBXYWl0IGZvciBuZXh0 IHNlcnZlciBjb21tYW5kICovCi0JICAgIHJldHVybigtMSk7Ci0JfQotICAgIH0KLSAgICByZXR1 cm4oLTEpOwotI2Vsc2UgLyogbm8gWlJFTkFNRSAqLwotICAgIC8qIEdpdmUgZXJyb3IgbWVzc2Fn ZSAqLwotICAgIGVycnBrdCgoQ0hBUiAqKSJSRU1PVEUgUkVOQU1FIG5vdCBhdmFpbGFibGUiKTsK LSAgICBSRVNVTUU7CQkJCS8qIFdhaXQgZm9yIG5leHQgc2VydmVyIGNvbW1hbmQgKi8KLSAgICBy ZXR1cm4oLTEpOwotI2VuZGlmIC8qIFpSRU5BTUUgKi8KLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwot fQotCi1zdGF0aWMgaW50Ci1zcnZfbG9naW4oKSB7Ci0jaWZuZGVmIE5PU0VSVkVSCi0gICAgY2hh ciBmMVtMT0dJTkxFTisxXSwgZjJbTE9HSU5MRU4rMV0sIGYzW0xPR0lOTEVOKzFdOwotICAgIENI QVIgKnA7Ci0gICAgaW50IGxlbiwgaTsKLQotICAgIGRlYnVnKEYxMDEsIlJFTU9URSBMT0dJTiB4 X2xvZ2luIiwiIix4X2xvZ2luKTsKLSAgICBkZWJ1ZyhGMTAxLCJSRU1PVEUgTE9HSU4geF9sb2dn ZWQiLCIiLHhfbG9nZ2VkKTsKLQotICAgIGYxWzBdID0gTlVMOyBmMlswXSA9IE5VTDsgZjNbMF0g PSBOVUw7Ci0gICAgbGVuID0gMDsKLSAgICBpZiAoc3J2Y21kWzFdKQkJCS8qIEZpcnN0IGxlbmd0 aCBmaWVsZCAqLwotICAgICAgbGVuID0geHVuY2hhcihzcnZjbWRbMV0pOwkJLyogU2VwYXJhdGUg dGhlIHBhcmFtZXRlcnMgKi8KLQotICAgIGlmICh4X2xvZ2luKSB7CQkJLyogTG9naW4gcmVxdWly ZWQgKi8KLQlpZiAoeF9sb2dnZWQpIHsJCQkvKiBBbmQgYWxyZWFkeSBsb2dnZWQgaW4gKi8KLQkg ICAgaWYgKGxlbiA+IDApIHsJCS8qIExvZ2dpbmcgaW4gYWdhaW4gKi8KLQkJZXJycGt0KChDSEFS ICopIkFscmVhZHkgbG9nZ2VkIGluLiIpOwotCSAgICB9IGVsc2UgewkJCS8qIExvZ2dpbmcgb3V0 ICovCi0JCWRlYnVnKEYxMDEsIlJFTU9URSBMT0dPVVQiLCIiLHhfbG9nZ2VkKTsKLSNpZmRlZiBD S1NZU0xPRwotCQlpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCi0JCSAg Y2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiUkVNT1RFIExPR09VVCIsIE5VTEwpOwot I2VuZGlmIC8qIENLU1lTTE9HICovCi0jaWZkZWYgSUtTREIKLQkJaWYgKGlrZGJvcGVuKSBzbG90 c3RhdGUod2hhdCwiUkVNT1RFIExPR09VVCIsICIiLCAiIik7Ci0jZW5kaWYgLyogSUtTREIgKi8K LQkJdGxvZyhGMTEwLCJMb2dnZWQgb3V0Iix4X3VzZXIsMCk7Ci0JCWFjazEoKENIQVIgKikiTG9n Z2VkIG91dCIpOwotCQlzdWNjZXNzID0gMTsKLQkJbXNsZWVwKDUwMCk7Ci0jaWZkZWYgQ0tfTE9H SU4KLQkJeF9sb2dnZWQgPSAwOwotI2lmZGVmIElLU0QKLQkJaWYgKGluc2VydmVyKQotCQkgIGNr eGxvZ291dCgpOwotI2VuZGlmIC8qIElLU0QgKi8KLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotCSAg ICB9Ci0JfSBlbHNlIHsJCQkvKiBOb3QgbG9nZ2VkIGluIHlldCAqLwotCSAgICBkZWJ1ZyhGMTAx LCJSRU1PVEUgTE9HSU4gbGVuIiwiIixsZW4pOwotCSAgICBpZiAobGVuID4gMCkgewkJLyogSGF2 ZSB1c2VybmFtZSAqLwotI2lmZGVmIENLU1lTTE9HCi0JCWlmIChja3hzeXNsb2cgPj0gU1lTTEdf UFIgJiYgY2t4bG9nZ2luZykKLQkJICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJS RU1PVEUgTE9HSU4iLCBOVUxMKTsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotCQlpZiAobGVuID4g TE9HSU5MRU4pIHsKLQkJICAgIGVycnBrdCgoQ0hBUiAqKSJVc2VybmFtZSB0b28gbG9uZyIpOwot CQl9Ci0JCXAgPSBzcnZjbWQgKyAyOwkJLyogUG9pbnQgdG8gaXQgKi8KLQkJZm9yIChpID0gMDsg aSA8IGxlbjsgaSsrKSAvKiBDb3B5IGl0ICovCi0JCSAgZjFbaV0gPSBwW2ldOwotCQlmMVtsZW5d ID0gTlVMOwkJLyogVGVybWluYXRlIGl0ICovCi0JCXAgKz0gbGVuOwkJLyogUG9pbnQgdG8gbmV4 dCBsZW5ndGggZmllbGQgKi8KLQkJaWYgKCpwKSB7CQkvKiBJZiB3ZSBoYXZlIG9uZSAqLwotCQkg ICAgbGVuID0geHVuY2hhcigqcCsrKTsgLyogZGVjb2RlIGl0ICovCi0JCSAgICBpZiAobGVuID4g MCAmJiBsZW4gPD0gTE9HSU5MRU4pIHsKLQkJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgLyog U2FtZSBkZWFsIGZvciBwYXNzd29yZCAqLwotCQkJICBmMltpXSA9IHBbaV07Ci0JCQlmMltsZW5d ID0gTlVMOwotCQkJcCArPSBsZW47CS8qIEFuZCBhY2NvdW50ICovCi0JCQlpZiAoKnApIHsKLQkJ CSAgICBsZW4gPSB4dW5jaGFyKCpwKyspOwotCQkJICAgIGlmIChsZW4gPiAwICYmIGxlbiA8PSBM T0dJTkxFTikgewotCQkJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKLQkJCQkgIGYzW2ldID0g cFtpXTsJLyogU2V0IGJ1dCBuZXZlciB1c2VkICovCi0JCQkJZjNbbGVuXSA9IE5VTDsgLyogKGJl Y2F1c2UgYWNjb3VudCBub3QgdXNlZCkgKi8KLQkJCSAgICB9Ci0JCQl9Ci0JCSAgICB9Ci0JCX0K LQkJZGVidWcoRjEwMSwiUkVNT1RFIExPR0lOIDEiLCIiLHhfbG9nZ2VkKTsKLSNpZmRlZiBJS1NE Ci0jaWZkZWYgQ0tfTE9HSU4KLQkJaWYgKGluc2VydmVyKSB7CQkvKiBMb2cgaW4gdG8gc3lzdGVt IGZvciByZWFsICovCi0JCSAgICB4X2xvZ2dlZCA9IGNreGxvZ2luKChDSEFSICopZjEsKENIQVIg KilmMixOVUxMLDApOwotCQkgICAgZGVidWcoRjEwMSwiUkVNT1RFIExPR0lOIDIiLCIiLHhfbG9n Z2VkKTsKLQkJICAgIGlmICh4X2xvZ2dlZCkgewkvKiBDb3VudCBhdHRlbXB0cyAqLwotCQkJbG9n dHJpZXMgPSAwOwotCQkJanVzdG9uZSA9IDE7Ci0JCSAgICB9IGVsc2UgewotCQkJbG9ndHJpZXMr KzsKLQkJCXNsZWVwKGxvZ3RyaWVzKTsKLQkJICAgIH0KLQkJfSBlbHNlCi0jZW5kaWYgLyogQ0tf TE9HSU4gKi8KLSNlbmRpZiAvKiBJS1NEICovCi0JCSAgaWYgKHhfdXNlciAmJiB4X3Bhc3N3ZCkg eyAvKiBVc2VyIGFuZCBwYXNzd29yZCBtdXN0IG1hdGNoICovCi0JCSAgICAgIGlmICghc3RyY21w KHhfdXNlcixmMSkpIC8qIFNFVCBTRVJWRVIgTE9HSU4gKi8KLQkJCWlmICghc3RyY21wKHhfcGFz c3dkLGYyKSkKLQkJCSAgeF9sb2dnZWQgPSAxOwotCQkgICAgICBkZWJ1ZyhGMTAxLCJSRU1PVEUg TE9HSU4gMyIsIiIseF9sb2dnZWQpOwotCQkgIH0gZWxzZSBpZiAoeF91c2VyKSB7CS8qIE9ubHkg dXNlcm5hbWUgZ2l2ZW4sIG5vIHBhc3N3b3JkICovCi0JCSAgICAgIGlmICghc3RyY21wKHhfdXNl cixmMSkpIC8qIHNvIG9ubHkgdXNlcm5hbWUgbXVzdCBtYXRjaCAqLwotCQkJeF9sb2dnZWQgPSAx OwotCQkgICAgICBkZWJ1ZyhGMTAxLCJSRU1PVEUgTE9HSU4gNCIsIiIseF9sb2dnZWQpOwotCQkg IH0KLSNpZmRlZiBDS19MT0dJTiAKLSAgICAgICAgICAgICAgICBlbHNlIHsKLQkJICAgIHhfbG9n Z2VkID0gY2t4bG9naW4oKENIQVIgKilmMSwoQ0hBUiAqKWYyLE5VTEwsMCk7Ci0JCSAgICBkZWJ1 ZyhGMTAxLCJSRU1PVEUgTE9HSU4gNSIsIiIseF9sb2dnZWQpOwotICAgICAgICAgICAgICAgIH0K LSNlbmRpZiAvKiBDS19MT0dJTiAqLwotCQlpZiAoeF9sb2dnZWQpIHsJCS8qIExvZ2dlZCBpbj8g Ki8KLQkJICAgIHRsb2coRjExMCwiTG9nZ2VkIGluIiwgeF91c2VyLCAwKTsKLQkJICAgIGlmIChp c2d1ZXN0KQotCQkgICAgICBhY2sxKChDSEFSICopIkxvZ2dlZCBpbiBhcyBndWVzdCAtIHJlc3Ry aWN0aW9ucyBhcHBseSIpOwotCQkgICAgZWxzZQotCQkgICAgICBhY2sxKChDSEFSICopIkxvZ2dl ZCBpbiIpOwotCQkgICAgc3VjY2VzcyA9IDE7Ci0JCX0gZWxzZSB7Ci0JCSAgICB0bG9nKEYxMTAs IkxvZ2luIGZhaWxlZCIsIGYxLCAwKTsKLQkJICAgIGVycnBrdCgoQ0hBUiAqKSJBY2Nlc3MgZGVu aWVkLiIpOwotI2lmZGVmIElLU0QKLSNpZmRlZiBDS19MT0dJTgotCQkgICAgaWYgKGluc2VydmVy ICYmIGxvZ3RyaWVzID4gMikKLQkJICAgICAgY2t4bG9nb3V0KCk7Ci0jZW5kaWYgLyogQ0tfTE9H SU4gKi8KLSNlbmRpZiAvKiBJS1NEICovCi0JCX0KLQkgICAgfSBlbHNlIHsJCQkvKiBMT0dPVVQg Ki8KLQkJZXJycGt0KChDSEFSICopIkxvZ291dCBpZ25vcmVkIik7Ci0JICAgIH0KLQl9Ci0gICAg fSBlbHNlIHsJCQkJLyogTG9naW4gbm90IHJlcXVpcmVkICovCi0JaWYgKGxlbiA+IDApCi0JICBl cnJwa3QoKENIQVIgKikiTG9naW4gaWdub3JlZC4iKTsKLQllbHNlCi0JICBlcnJwa3QoKENIQVIg KikiTG9nb3V0IGlnbm9yZWQuIik7Ci0gICAgfQotI2VuZGlmIC8qIE5PU0VSVkVSICovCi0gICAg UkVTVU1FOwotICAgIHJldHVybigtMSk7Ci19Ci0KLXN0YXRpYyBpbnQKLXNydl90aW1lb3V0KCkg ewotICAgIC8qIEs5NSBkb2VzIHRoaXMgaXRzIG93biB3YXkgKi8KLSAgICBpZiAoaWRsZXRtbykg ewotI2lmZGVmIElLU0QKLSAgICAgICAgaWYgKGluc2VydmVyKSB7Ci0gICAgICAgICAgIHByaW50 ZigiXHJcbklLU0QgSURMRSBUSU1FT1VUOiAlZCBzZWNcclxuIiwgc3J2aWRsKTsKLSAgICAgICAg ICAgZG9leGl0KEdPT0RfRVhJVCx4aXRzdGEpOwotICAgICAgICB9Ci0jZW5kaWYgLyogSUtTRCAq LwotCWlkbGV0bW8gPSAwOwotCXByaW50ZigiXHJcblNFUlZFUiBJRExFIFRJTUVPVVQ6ICVkIHNl Y1xyXG4iLCBzcnZpZGwpOwotCXhpdHN0YSB8PSAod2hhdCAmIFdfS0VSTUlUKTsKLQlRVUlUOwot ICAgIH0KLSNpZm5kZWYgTk9TRVJWRVIKLSAgICBlbHNlIGlmIChmYXRhbGlvKSB7CQkJLyogQ29u bmVjdGlvbiBsb3N0ICovCi0jaWZkZWYgQ0tTWVNMT0cKLQkgIGlmIChja3hzeXNsb2cgPj0gU1lT TEdfUFIgJiYgY2t4bG9nZ2luZykKLQkgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIi LCAiQ29ubmVjdGlvbiBsb3N0IiwgTlVMTCk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSNpZmRl ZiBJS1NEQgotCSAgaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiU0VSVkVSIERJU0NPTk5F Q1QiLChjaGFyICopc3J2Y21kLCAiIik7Ci0jZW5kaWYgLyogSUtTREIgKi8KLQl4aXRzdGEgfD0g d2hhdDsKLQlRVUlUOwotICAgIH0gZWxzZSBpZiAoaW50ZXJydXB0ZWQpIHsJCS8qIEludGVycnVw dGVkIGJ5IGhhbmQgKi8KLQlpZiAoIUVOQUJMRUQoZW5fZmluKSkgewotCSAgICBlcnJwa3QoKENI QVIgKikiUVVJVCBkaXNhYmxlZCIpOwotCSAgICBSRVNVTUU7Ci0JICAgIHJldHVybigtMSk7Ci0J fSBlbHNlIHsKLQkgICAgaWYgKHdoYXQgPT0gV19TRU5EIHx8IHdoYXQgPT0gV19SRUNWIHx8IHdo YXQgPT0gV19SRU1PKSB7Ci0JCXN1Y2Nlc3MgPSAwOwotI2lmZGVmIENLU1lTTE9HCi0JCWlmIChj a3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKLQkJICBja3N5c2xvZyhTWVNMR19Q UiwgMSwgInNlcnZlciIsICJJbnRlcnJ1cHRlZCIsIE5VTEwpOwotI2VuZGlmIC8qIENLU1lTTE9H ICovCi0JICAgIH0gZWxzZSBpZiAod2hhdCA9PSBXX05PVEhJTkcgJiYgZmlsY250ID09IDApIHsK LQkJc3VjY2VzcyA9IDE7Ci0JICAgIH0gLyogT3RoZXJ3aXNlIGxlYXZlIHN1Y2Nlc3MgYWxvbmUg Ki8KLQkgICAgeGl0c3RhIHw9ICh3aGF0ICYgV19LRVJNSVQpOwotCSAgICBRVUlUOwotCX0KLSAg ICB9IGVsc2UgewkJCQkvKiBTaG91bGRuJ3QgaGFwcGVuICovCi0JZGVidWcoRjEwMCwiU0VSVkVS ICh0b3ApIEdPVCBVTkVYUEVDVEVEICdxJyIsIiIsMCk7Ci0JUVVJVDsKLSAgICB9Ci0jZW5kaWYg LyogTk9TRVJWRVIgKi8KLX0KLQotc3RhdGljIGludAotcmN2X3NfcGt0KCkgewotI2lmbmRlZiBO T1NFUlZFUgotICAgIGlmIChzdGF0ZSA9PSByZ2VuKQotICAgICAgdXJzZXJ2ZXIgPSAxOwotICAg IGlmICgvKiBzdGF0ZSA9PSBzZXJ2ZSAmJiAqLyB4X2xvZ2luICYmICF4X2xvZ2dlZCkgewotCWVy cnBrdCgoQ0hBUiAqKSJMb2dpbiByZXF1aXJlZCIpOwotCVNFUlZFOwotICAgIH0gZWxzZQotI2Vu ZGlmIC8qIE5PU0VSVkVSICovCi0gICAgICBpZiAoc3RhdGUgPT0gc2VydmUgJiYgIUVOQUJMRUQo ZW5fc2VuKSkgeyAvKiBOb3QgaW4gc2VydmVyIG1vZGUgKi8KLQllcnJwa3QoKENIQVIgKikiU0VO RCBkaXNhYmxlZCIpOyAvKiB3aGVuIFNFTkQgaXMgZGlzYWJsZWQuICovCi0JUkVTVU1FOwotCXJl dHVybigtMSk7Ci0gICAgfSBlbHNlIHsJCQkJLyogT0sgdG8gZ28gYWhlYWQuICovCi0jaWZkZWYg Q0tfVE1QRElSCi0JaWYgKGRsZGlyICYmICFmX3RtcGRpcikgewkvKiBJZiB0aGV5IGhhdmUgYSBk b3dubG9hZCBkaXJlY3RvcnkgKi8KLQkgICAgZGVidWcoRjExMCwicmVjZWl2ZSBkb3dubG9hZCBk aXIiLGRsZGlyLDApOwotCSAgICBpZiAocyA9IHpndGRpcigpKSB7CQkvKiBHZXQgY3VycmVudCBk aXJlY3RvcnkgKi8KLQkJZGVidWcoRjExMCwicmVjZWl2ZSBjdXJyZW50IGRpciIscywwKTsKLQkJ aWYgKHpjaGRpcihkbGRpcikpIHsJLyogQ2hhbmdlIHRvIGRvd25sb2FkIGRpcmVjdG9yeSAqLwot CQkgICAgZGVidWcoRjEwMCwicmVjZWl2ZSB6Y2hkaXIgb2siLCIiLDApOwotCQkgICAgY2tzdHJu Y3B5KHNhdmRpcixzLFRNUERJUkxFTik7Ci0JCSAgICBmX3RtcGRpciA9IDE7CS8qIFJlbWVtYmVy IHRoYXQgd2UgZGlkIHRoaXMgKi8KLQkJfSBlbHNlCi0JCSAgZGVidWcoRjEwMCwicmVjZWl2ZSB6 Y2hkaXIgZmFpbGVkIiwiIiwwKTsKLQkgICAgfQotCX0KLSNlbmRpZiAvKiBDS19UTVBESVIgKi8K LQluYWtzdGF0ZSA9IDE7CQkJLyogQ2FuIHNlbmQgTkFLcyBmcm9tIGhlcmUuICovCi0JcmluaXQo cmRhdGFwKTsJCQkvKiBTZXQgcGFyYW1ldGVycyAqLwotCWJjdHUgPSBiY3RyOwkJCS8qIFN3aXRj aCB0byBhZ3JlZWQtdXBvbiBibG9jayBjaGVjayAqLwotCWJjdGwgPSAoYmN0dSA9PSA0KSA/IDIg OiBiY3R1OwkvKiBTZXQgYmxvY2stY2hlY2sgbGVuZ3RoICovCi0Jd2hhdCA9IFdfUkVDVjsJCQkv KiBSZW1lbWJlciB3ZSdyZSByZWNlaXZpbmcgKi8KLQlsYXN0eGZlciA9IFdfUkVDVjsKLQlyZXNl dGMoKTsJCQkvKiBSZXNldCBjb3VudGVycyAqLwotCXJ0aW1lcigpOwkJCS8qIFJlc2V0IHRpbWVy ICovCi0jaWZkZWYgR0ZUSU1FUgotCXJmdGltZXIoKTsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0J c3RyZWFtb24oKTsKLQlCRUdJTiByZmlsZTsJCQkvKiBHbyBpbnRvIHJlY2VpdmUtZmlsZSBzdGF0 ZSAqLwotICAgIH0KLSAgICByZXR1cm4oLTEpOwotfQotCi0KLS8qIEVORCBPRiBST1VUSU5FUyBN T1ZFRCBPVVQgT0YgU1RBVEUgTUFDSElORSAqLwotCi0KLS8qICBQIFIgTyBUIE8gIC0tICBQcm90 b2NvbCBlbnRyeSBmdW5jdGlvbiAgKi8KLQotc3RhdGljIGludCBpc190biA9IDA7CQkJLyogSXQn cyBhIFRlbG5ldCBjb25uZWN0aW9uICovCi0KLSNpZmRlZiBDS19TUEVFRAotaW50IGZfY3RscCA9 IDA7CQkJCS8qIENvbnRyb2wtY2hhcmFjdGVyIHByZWZpeCB0YWJsZSAqLwotI2lmZGVmIENPTU1F TlQKLXNob3J0IHNfY3RscFsyNTZdOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNlbmRpZiAvKiBD S19TUEVFRCAqLwotCi0vKgotICBUaGlzIGlzIHNpbXBseSBhIHdyYXBwZXIgZm9yIHRoZSByZWFs IHByb3RvY29sIGZ1bmN0aW9uIGp1c3QgYmVsb3csCi0gIHRoYXQgc2F2ZXMgYW55IGl0ZW1zIHRo YXQgbWlnaHQgYmUgY2hhbmdlZCBhdXRvbWF0aWNhbGx5IGJ5IHByb3RvY29sCi0gIG5lZ290aWF0 aW9ucyBhbmQgdGhlbiByZXN0b3JlcyB0aGVtIHVwb24gZXhpdCBmcm9tIHByb3RvY29sIG1vZGUu Ci0qLwotVk9JRAotcHJvdG8oKSB7Ci0gICAgZXh0ZXJuIGludCBiX3NhdmUsIGZfc2F2ZSwgY19z YXZlLCBzc19zYXZlLCBzbG9zdGFydCwgcmVsaWFibGUsIHVyY2xlYXI7Ci0jaWZuZGVmIE5PQ1NF VFMKLSAgICBleHRlcm4gaW50IGZjaGFyc2V0LCBmY3Nfc2F2ZSwgdGNoYXJzZXQsIHRjc19zYXZl OwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQotI2lmZGVmIFBJUEVTRU5ECi0gICAgZXh0ZXJuIGlu dCBwaXBlc2VuZDsKLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotI2lmbmRlZiBOT0xPQ0FMCi0jaWZk ZWYgT1MyCi0gICAgZXh0ZXJuIGludCBjdXJzb3JlbmFbXSwgY3Vyc29yX3NhdmUsIHRlcm1faW87 Ci0gICAgZXh0ZXJuIEJZVEUgdm1vZGU7Ci0gICAgZXh0ZXJuIGludCBkaXNwbGF5X2RlbW87Ci0g ICAgaW50IHRlcm1faW9fc2F2ZTsKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT0xPQ0FM ICovCi0jaWZkZWYgVE5DT0RFCi0gICAgaW50IF91X2Jpbj0wLCBfbWVfYmluID0gMDsKLSNpZmRl ZiBJS1NfT1BUSU9OCi0gICAgaW50IC8qIF91X3N0YXJ0PTAsICovIF9tZV9zdGFydCA9IDA7Ci0j ZW5kaWYgLyogSUtTX09QVElPTiAqLwotI2VuZGlmIC8qIFROQ09ERSAqLwotI2lmZGVmIFBBVFRF Uk5TCi0gICAgaW50IHBhX3NhdmU7Ci0gICAgaW50IGk7Ci0jZW5kaWYgLyogUEFUVEVSTlMgKi8K LSAgICBpbnQgc2Nhbl9zYXZlOwotCi0jaWZkZWYgUEFUVEVSTlMKLSAgICBwYV9zYXZlID0gcGF0 dGVybnM7Ci0jZW5kaWYgLyogUEFUVEVSTlMgKi8KLSAgICBzY2FuX3NhdmUgPSBmaWxlcGVlazsK LQotICAgIG15am9iID0gc3N0YXRlOwotCi0jaWZkZWYgQ0tfTE9HSU4KLSAgICBpZiAoaXNndWVz dCkgewkJCS8qIElmIHVzZXIgaXMgYW5vbnltb3VzICovCi0JZW5fcHJpID0gMDsJCQkvKiBkaXNh YmxlIHByaW50aW5nICovCi0JZW5fbWFpID0gMDsJCQkvKiBhbmQgZGlzYWJsZSBlbWFpbCAqLwot CWVuX2RlbCA9IDA7CQkJLyogYW5kIGZpbGUgZGVsZXRpb24gKi8KLSAgICB9Ci0jZW5kaWYgLyog Q0tfTE9HSU4gKi8KLQotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0gICAgY3Vyc29yX3Nh dmUgPSBjdXJzb3JlbmFbdm1vZGVdOwotICAgIGN1cnNvcmVuYVt2bW9kZV0gPSAwOwotICAgIHRl cm1faW9fc2F2ZSA9IHRlcm1faW87Ci0gICAgdGVybV9pbyA9IDA7Ci0jZW5kaWYgLyogT1MyICov Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotICAgIGJfc2F2ZSA9IGJpbmFyeTsJCQkvKiBTRVQgRklM RSBUWVBFICovCi0gICAgZl9zYXZlID0gZm5jbnY7CQkJLyogU0VUIEZJTEUgTkFNRVMgKi8KLSAg ICBjX3NhdmUgPSBiY3RyOwotICAgIHBfc2F2ZSA9IGZuc3BhdGg7Ci0gICAgcl9zYXZlID0gcmVj dXJzaXZlOwotICAgIHNfdGltaW50ID0gdGltaW50OwotICAgIHNzX3NhdmUgPSBzbG9zdGFydDsK LSNpZm5kZWYgTk9DU0VUUwotICAgIGZjc19zYXZlID0gZmNoYXJzZXQ7Ci0gICAgdGNzX3NhdmUg PSB0Y2hhcnNldDsKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSNpZmRlZiBDT01NRU5UCi0vKiBE b24ndCBkbyB0aGlzIGJlY2F1c2UgdGhlbiB1c2VyIGNhbiBuZXZlciBmaW5kIG91dCB3aGF0IGhh cHBlbmVkLiAqLwotI2lmZGVmIENLX1NQRUVECi0gICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsr KQotICAgICAgc19jdGxwW2ldID0gY3RscFtpXTsKLSAgICBmX2N0bHAgPSAxOwotI2VuZGlmIC8q IENLX1NQRUVEICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIGlmIChyZWxpYWJsZSA9PSBT RVRfT04pCi0gICAgICBzbG9zdGFydCA9IDA7Ci0gICAgaXNfdG4gPSAoIWxvY2FsICYmIHNzdGVs bmV0KQotI2lmZGVmIFROQ09ERQotICAgICAgfHwgKGxvY2FsICYmIG5ldHdvcmsgJiYgdHRucHJv dG8gPT0gTlBfVEVMTkVUKQotI2VuZGlmIC8qIFROQ09ERSAqLwotCTsKLSNpZmRlZiBUTkNPREUK LSAgICBpZiAoaXNfdG4pIHsKLSAgICAgICAgaWYgKHRuX2JfeGZlciAmJiAhKHNzdGVsbmV0IHx8 IGluc2VydmVyKSkgewotCSAgICAvKiBTYXZlIHRoZSBjdXJyZW50IHN0YXRlIG9mIFRlbG5ldCBC aW5hcnkgKi8KLQkgICAgX3VfYmluID0gVEVMT1BUX1UoVEVMT1BUX0JJTkFSWSk7Ci0JICAgIF9t ZV9iaW4gPSBURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSk7Ci0KLQkgICAgLyogSWYgZWl0aGVyIGRp cmVjdGlvbiBpcyBub3QgQmluYXJ5IGF0dGVtcHQgdG8gbmVnb3RpYXRlIGl0ICovCi0JICAgIGlm ICghX3VfYmluICYmIFRFTE9QVF9VX01PREUoVEVMT1BUX0JJTkFSWSkgIT0gVE5fTkdfUkYpIHsK LQkJdG5fc29wdChETyxURUxPUFRfQklOQVJZKTsKLQkJVEVMT1BUX1VOQU5TV0VSRURfRE8oVEVM T1BUX0JJTkFSWSkgPSAxOwotCSAgICB9Ci0JICAgIGlmICghX21lX2JpbiAmJiBURUxPUFRfTUVf TU9ERShURUxPUFRfQklOQVJZKSAhPSBUTl9OR19SRikgewotCQl0bl9zb3B0KFdJTEwsVEVMT1BU X0JJTkFSWSk7Ci0JCVRFTE9QVF9VTkFOU1dFUkVEX1dJTEwoVEVMT1BUX0JJTkFSWSkgPSAxOwot CSAgICB9Ci0JICAgIGlmICghKF9tZV9iaW4gJiYgX3VfYmluKSkKLQkgICAgICB0bl93YWl0KCJw cm90byBzZXQgYmluYXJ5IG1vZGUiKTsKLSAgICAgICAgfQotI2lmZGVmIElLU19PUFRJT04KLSNp ZmRlZiBDS19YWVoKLSAgICAgICAgaWYgKHByb3RvY29sICE9IFBST1RPX0spIHsJLyogTm9uLUtl cm1pdCBwcm90b2NvbCBzZWxlY3RlZCAqLwotICAgICAgICAgICAgaWYgKFRFTE9QVF9VKFRFTE9Q VF9LRVJNSVQpICYmCi0gICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtl cm1pdC51X3N0YXJ0KSB7Ci0gICAgICAgICAgICAgICAgaWtzX3dhaXQoS0VSTUlUX1JFUV9TVE9Q LDApOyAvKiBTdG9wIHRoZSBvdGhlciBTZXJ2ZXIgKi8KLQkJLyogX3Vfc3RhcnQgPSAxOyAqLwot ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKFRFTE9QVF9NRShURUxPUFRfS0VSTUlUKSAm JgotICAgICAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3Rh cnQpIHsKLSAgICAgICAgICAgICAgICB0bl9zaWtzKEtFUk1JVF9TVE9QKTsJLyogSSdtIG5vdCBz ZXJ2ZXJpbmcgKi8KLQkgCVRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQg PSAwOwotCQlfbWVfc3RhcnQgPSAxOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSNl bmRpZiAvKiBDS19YWVogKi8KLSAgICAgICAgaWYgKHNzdGF0ZSA9PSAneCcgfHwgc3N0YXRlID09 ICd2JykgeyAvKiBSZXNwb25kaW5nIHRvIGEgcmVxdWVzdCAqLwotICAgICAgICAgICAgaWYgKCFp bnNlcnZlciAmJiBURUxPUFRfVShURUxPUFRfS0VSTUlUKSAmJgotICAgICAgICAgICAgICAgIFRF TE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQudV9zdGFydCkgewotICAgICAgICAgICAgICAg IGlrc193YWl0KEtFUk1JVF9SRVFfU1RPUCwwKTsgLyogU3RvcCB0aGUgb3RoZXIgU2VydmVyICov Ci0JCS8qIF91X3N0YXJ0ID0gMTsgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChU RUxPUFRfTUUoVEVMT1BUX0tFUk1JVCkgJiYKLSAgICAgICAgICAgICAgICAhVEVMT1BUX1NCKFRF TE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCkgewotICAgICAgICAgICAgICAgIHRuX3Npa3Mo S0VSTUlUX1NUQVJUKTsJLyogU2VuZCBLZXJtaXQtU2VydmVyIFN0YXJ0ICovCi0JIAlURUxPUFRf U0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0ID0gMTsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgfSBlbHNlIHsJCQkvKiBJbml0aWF0aW5nIGEgcmVxdWVzdCAqLwotICAgICAgICAgICAg aWYgKFRFTE9QVF9NRShURUxPUFRfS0VSTUlUKSAmJgotICAgICAgICAgICAgICAgIFRFTE9QVF9T QihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQpIHsKLSAgICAgICAgICAgICAgICB0bl9z aWtzKEtFUk1JVF9TVE9QKTsJLyogSSdtIG5vdCBzZXJ2ZXJpbmcgKi8KLQkgCVRFTE9QVF9TQihU RUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQgPSAwOwotCQlfbWVfc3RhcnQgPSAxOwotICAg ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKFRFTE9QVF9VKFRFTE9QVF9LRVJNSVQpICYmCi0J ICAgICAgICAhVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0KSB7Ci0JCS8q IFNlbmQgUmVxLVNlcnZlci1TdGFydCAqLwotICAgICAgICAgICAgICAgIGlmICghaWtzX3dhaXQo S0VSTUlUX1JFUV9TVEFSVCwwKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoc3N0YXRlICE9 ICdzJykgewotCQkJc3VjY2VzcyA9IDA7CS8qIE90aGVyIEtlcm1pdCByZWZ1c2VkIHRvIHNlcnZl ICovCi0JCQlpZiAobG9jYWwpCi0JCQkgIHByaW50ZigiQSBLZXJtaXQgU2VydmVyIGlzIG5vdCBh dmFpbGFibGVcclxuIik7Ci0JCQlkZWJ1ZyhGMTEwLCJwcm90bygpIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIkEgS2VybWl0IFNlcnZlciBpcyBub3QgYXZhaWxhYmxlIiwwKTsKLQkJ CXRsb2coRjExMCwiSUtTIGNsaWVudC9zZXJ2ZXIgZmFpbHVyZSIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJBIEtlcm1pdCBTZXJ2ZXIgaXMgbm90IGF2YWlsYWJsZSIsMCk7Ci0JCQln b3RvIHh4cHJvdG94OwotICAgICAgICAgICAgICAgICAgICB9Ci0JCX0KLSAgICAgICAgICAgIH0K LSAgICAgICAgfQotI2VuZGlmIC8qIElLU19PUFRJT04gKi8KLSNpZmRlZiBDS19FTkNSWVBUSU9O Ci0gICAgICAgIGlmICh0bl9ub19lbmNyeXB0X3hmZXIgJiYgIShzc3RlbG5ldCB8fCBpbnNlcnZl cikpIHsKLSAgICAgICAgICAgIGNrX3RuX2VuY19zdG9wKCk7Ci0gICAgICAgIH0KLSNlbmRpZiAv KiBDS19FTkNSWVBUSU9OICovCi0gICAgfQotI2VuZGlmIC8qIFROQ09ERSAqLwotCi0gICAgaWYg KCF4ZnJpbnQpIGNvbm5vaSgpOwotICAgIHh4cHJvdG8oKTsJCQkJLyogQ2FsbCB0aGUgcmVhbCBw cm90b2NvbCBmdW5jdGlvbiAqLwotCi0jaWZkZWYgSUtTX09QVElPTgotICB4eHByb3RveDoKLSNl bmRpZiAvKiBJS1NfT1BUSU9OICovCi0gICAgeGZlcnN0YXQgPSBzdWNjZXNzOwkJCS8qIFJlbWVt YmVyIHRyYW5zZmVyIHN0YXR1cyAqLwotICAgIGthY3RpdmUgPSAwOwotCi0jaWZkZWYgVE5DT0RF Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICBpZiAodG5fbm9fZW5jcnlwdF94ZmVyICYm ICEoc3N0ZWxuZXQgfHwgaW5zZXJ2ZXIpKSB7Ci0gICAgICAgICAgICBja190bl9lbmNfc3RhcnQo KTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNpZmRlZiBJS1NfT1BU SU9OCi0gICAgaWYgKFRFTE9QVF9NRShURUxPUFRfS0VSTUlUKSAmJgotICAgICAgICBURUxPUFRf U0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0ICYmICFfbWVfc3RhcnQpIHsKLSAgICAg ICAgdG5fc2lrcyhLRVJNSVRfU1RPUCk7CQkvKiBTZXJ2ZXIgaXMgc3RvcHBlZCAqLwotIAlURUxP UFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0ID0gMDsKLSAgICB9Ci0jZW5kaWYg LyogSUtTX09QVElPTiAqLwotICAgIGlmIChpc190biAmJiB0bl9iX3hmZXIgJiYgIShzc3RlbG5l dCB8fCBpbnNlcnZlcikpIHsKLSAgICAgICAgLyogaWYgd2UgbmVnb3RpYXRlZCBCaW5hcnkgbW9k ZSB0cnkgdG8gcmVzZXQgaXQgKi8KLSAgICAgICAgaWYgKCFfdV9iaW4pIHsKLSAgICAgICAgICAg IC8qIENoZWNrIHRvIHNlZSBpZiB0aGUgc3RhdGUgY2hhbmdlZCBkdXJpbmcgdGhlIHRyYW5zZmVy ICovCi0JICAgIGlmIChURUxPUFRfVShURUxPUFRfQklOQVJZKSkgewotCQl0bl9zb3B0KERPTlQs VEVMT1BUX0JJTkFSWSk7Ci0JCVRFTE9QVF9VTkFOU1dFUkVEX0RPTlQoVEVMT1BUX0JJTkFSWSkg PSAxOwotCSAgICB9IGVsc2UKLQkgICAgICBfdV9iaW4gPSAxOwkJLyogU28gd2UgZG9uJ3QgY2Fs bCB0bl93YWl0KCkgKi8KLSAgICAgICAgfQotICAgICAgICBpZiAoIV9tZV9iaW4pIHsKLSAgICAg ICAgICAgIC8qIENoZWNrIHRvIHNlZSBpZiB0aGUgc3RhdGUgY2hhbmdlZCBkdXJpbmcgdGhlIHRy YW5zZmVyICovCi0JICAgIGlmIChURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkpIHsKLQkJdG5fc29w dChXT05ULFRFTE9QVF9CSU5BUlkpOwotCQlURUxPUFRfVU5BTlNXRVJFRF9XT05UKFRFTE9QVF9C SU5BUlkpID0gMTsKLQkgICAgfSBlbHNlCi0JICAgICAgX21lX2JpbiA9IDE7CQkvKiBTbyB3ZSBk b24ndCBjYWxsIHRuX3dhaXQoKSAqLwotCX0KLQlpZiAoIShfbWVfYmluICYmIF91X2JpbikpCi0J ICB0bl93YWl0KCJwcm90byByZXNldCBiaW5hcnkgbW9kZSIpOwotICAgIH0KLSNlbmRpZiAvKiBU TkNPREUgKi8KLQotI2lmZGVmIFBBVFRFUk5TCi0gICAgcGF0dGVybnMgPSBwYV9zYXZlOwotI2Vu ZGlmIC8qIFBBVFRFUk5TICovCi0gICAgZmlsZXBlZWsgPSBzY2FuX3NhdmU7Ci0KLSNpZmRlZiBT VFJFQU1JTkcKLSAgICBzdHJlYW1pbmcgPSAwOwotICAgIC8qIHN0cmVhbW9rID0gMDsgKi8KLSNl bmRpZiAvKiBTVFJFQU1JTkcgKi8KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgQ0tfU1BFRUQKLSAg ICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCi0gICAgICBjdGxwW2ldID0gc19jdGxwW2ldOwot ICAgIGZfY3RscCA9IDA7Ci0jZW5kaWYgLyogQ0tfU1BFRUQgKi8KLSNlbmRpZiAvKiBDT01NRU5U ICovCi0gICAgdXJjbGVhciA9IDA7Ci0gICAgaWYgKCFzdWNjZXNzKSB7Ci0JeGl0c3RhIHw9ICh3 aGF0ICYgV19LRVJNSVQpOwotCXRsb2coRjExMCwiIGZhaWxlZDoiLChjaGFyICopZXBrdG1zZyww KTsKLSAgICB9Ci0gICAgZGVidWcoRjExMSwicHJvdG8geGZlcnN0YXQiLGVwa3Rtc2cseGZlcnN0 YXQpOwotICAgIHNsb3N0YXJ0ID0gc3Nfc2F2ZTsKLSAgICBpZiAoc190aW1pbnQgPiAtMSkgewkJ LyogQmVjYXVzZSBvZiBSRU1PVEUgU0VUICovCi0JdGltaW50ID0gc190aW1pbnQ7Ci0Jc190aW1p bnQgPSAtMTsKLSAgICB9Ci0gICAgcmVjdXJzaXZlID0gcl9zYXZlOwotICAgIGZuc3BhdGggPSBw X3NhdmU7Ci0gICAgaWYgKGNfc2F2ZSA+IC0xKSB7CQkJLyogQmVjYXVzZSBvZiBSRU1PVEUgU0VU ICovCi0JYmN0ciA9IGNfc2F2ZTsKLQljX3NhdmUgPSAtMTsKLSAgICB9Ci0gICAgZm5jbnYgICA9 IGZfc2F2ZTsKLSAgICBiaW5hcnkgID0gYl9zYXZlOwotI2lmZGVmIFBJUEVTRU5ECi0gICAgcGlw ZXNlbmQgPSAwOyAgICAJCQkvKiBOZXh0IHRpbWUgbWlnaHQgbm90IGJlIHBpcGVzZW5kICovCi0j ZW5kaWYgLyogUElQRVNFTkQgKi8KLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIE9TMgotICAgIGN1 cnNvcmVuYVt2bW9kZV0gPSBjdXJzb3Jfc2F2ZTsKLSAgICB0ZXJtX2lvID0gdGVybV9pb19zYXZl OwotICAgIGRpc3BsYXlfZGVtbyA9IDE7Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9M T0NBTCAqLwotfQotCi1zdGF0aWMgVk9JRAoteHhwcm90bygpIHsKLSAgICBpbnQgeDsKLSAgICBs b25nIGx4OwotI2lmZGVmIENLX1hZWgotI2lmZGVmIFhZWl9JTlRFUk5BTAotX1BST1RPVFlQKCBp bnQgcHh5eiwgKGludCkgKTsKLSNlbmRpZiAvKiBYWVpfSU5URVJOQUwgKi8KLSNlbmRpZiAvKiBD S19YWVogKi8KLQotICAgIGNoYXIgeHNzWzJdOwkJCS8qIFN0cmluZyByZXByZXNlbnRhdGlvbiBv ZiBzc3RhdGUgKi8KLSAgICB4c3NbMF0gPSBzc3RhdGU7Ci0gICAgeHNzWzFdID0gTlVMOwotICAg IHNfdGltaW50ID0gdGltaW50OwotCi0gICAgZGVidWcoRjEwMSwieHhwcm90byBlbnRyeSBqdXN0 b25lIiwiIixqdXN0b25lKTsKLSAgICBzdWNjZXNzID0gMDsKLQotICAgIHJldHJpZXZlID0gMDsJ CQkvKiBSZXNldCB0aGVzZSAuLi4gKi8KLSAgICByZWdldCA9IDA7Ci0gICAgb3BrdCA9IDA7Ci0K LSAgICBpZiAobG9jYWwgJiYgdHRjaGsoKSA8IDApIHsJCS8qIEdpdmluZyBCWUUgb3IgRklOICov Ci0JaWYgKGJ5ZV9hY3RpdmUpIHsJCS8qIGJ1dCB0aGVyZSBpcyBubyBjb25uZWN0aW9uICovCi0J ICAgIHR0Y2xvcygwKTsKLQkgICAgc3VjY2VzcyA9IDE7Ci0JICAgIHJldHVybjsKLQl9Ci0JLyog RGl0dG8gZm9yIGFueSBSRU1PVEUgY29tbWFuZCAqLwotCWlmIChzc3RhdGUgPT0gJ2cnICYmIGNt YXJnICkgewotCSAgICBpZiAoKmNtYXJnID09ICdMJyB8fCAqY21hcmcgPT0gJ0YnIHx8ICpjbWFy ZyA9PSAnWCcpCi0JICAgICAgc3VjY2VzcyA9IDE7Ci0JICAgIGVsc2UKLQkgICAgICBwcmludGYo Ij9ObyBjb25uZWN0aW9uXHJcbiIpOwotCSAgICByZXR1cm47Ci0JfQotICAgIH0KLQotLyogU2V0 IHVwIHRoZSBjb21tdW5pY2F0aW9uIGxpbmUgZm9yIGZpbGUgdHJhbnNmZXIuICovCi0vKiBOT1RF OiBBbGwgb2YgdGhlIHh4c2NyZWVuKCkgY2FsbHMgcHJpb3IgdG8gdGhlIHdhcnQoKSBpbnZvY2F0 aW9uICovCi0vKiBjb3VsZCBqdXN0IGFzIGVhc2lseSBiZSBwcmludGYncyBvciwgZm9yIHRoYXQg bWF0dGVyLCBoaW50cy4gKi8KLQotICAgIGlmIChsb2NhbCAmJiAoc3BlZWQgPCAwTCkgJiYgKG5l dHdvcmsgPT0gMCkpIHsKLQl4eHNjcmVlbihTQ1JfRU0sMCwwTCwiU29ycnksIHlvdSBtdXN0ICdz ZXQgc3BlZWQnIGZpcnN0Iik7Ci0JcmV0dXJuOwotICAgIH0KLSAgICB4ID0gLTE7Ci0gICAgaWYg KHR0b3Blbih0dG5hbWUsJngsbWRtdHlwLGNkdGltbykgPCAwKSB7Ci0JZGVidWcoRjExMSwiZmFp bGVkOiBwcm90byB0dG9wZW4gbG9jYWwiLHR0bmFtZSxsb2NhbCk7Ci0JeHhzY3JlZW4oU0NSX0VN LDAsMEwsIkNhbid0IG9wZW4gbGluZSIpOwotCXJldHVybjsKLSAgICB9Ci0gICAgaWYgKHggPiAt MSkgbG9jYWwgPSB4OwotICAgIGRlYnVnKEYxMTEsInByb3RvIHR0b3BlbiBsb2NhbCIsdHRuYW1l LGxvY2FsKTsKLQotICAgIGx4ID0gKGxvY2FsICYmICFuZXR3b3JrKSA/IHNwZWVkIDogLTE7Ci0j aWZkZWYgTkVUQ09OTgotI2lmZGVmIENLX1NQRUVECi0gICAgaWYgKGlzX3RuKSB7Ci0JY3RscFso dW5zaWduZWQpMjU1XSA9IGN0bHBbQ1JdID0gMTsKLQlpZiAocGFyaXR5ID09ICdlJyB8fCBwYXJp dHkgPT0gJ20nKSBjdGxwWzEyN10gPSAxOwotCWlmIChmbG93ID09IEZMT19YT05YKSB7CQkvKiBB bHNvIHdhdGNoIG91dCBmb3IgWG9uL1hvZmYgKi8KLQkgICAgY3RscFsxN10gPSBjdGxwWzE5XSA9 IDE7Ci0JICAgIGN0bHBbMTcrMTI4XSA9IGN0bHBbMTkrMTI4XSA9IDE7Ci0JfQotICAgIH0KLSNl bmRpZiAvKiBDS19TUEVFRCAqLwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSAgICBpZiAodHRwa3Qo bHgsZmxvdyxwYXJpdHkpIDwgMCkgewkvKiBQdXQgbGluZSBpbiBwYWNrZXQgbW9kZSwgKi8KLQl4 eHNjcmVlbihTQ1JfRU0sMCwwTCwiQ2FuJ3QgY29uZGl0aW9uIGxpbmUiKTsKLQlyZXR1cm47Ci0g ICAgfQotICAgIGlmIChsb2NhbCAmJiAhbmV0d29yayAmJiBjYXJyaWVyICE9IENBUl9PRkYpIHsK LQlpbnQgeDsJCQkJLyogU2VyaWFsIGNvbm5lY3Rpb24gKi8KLQl4ID0gdHRnbWRtKCk7CQkJLyog d2l0aCBjYXJyaWVyIGNoZWNraW5nICovCi0JaWYgKHggPiAtMSkgewotCSAgICBpZiAoISh4ICYg Qk1fRENEKSkgewotCQlkZWJ1ZyhGMTAxLCJwcm90byB0dGdtZG0iLCIiLDApOwotCQl4eHNjcmVl bihTQ1JfRU0sMCwwTCwiQ2FycmllciByZXF1aXJlZCBidXQgbm90IGRldGVjdGVkIik7Ci0JCXJl dHVybjsKLQkgICAgfQotCX0KLSAgICB9Ci0gICAgLyogU2VuZCByZW1vdGUgc2lkZSdzICJyZWNl aXZlIiBvciAic2VydmVyIiBzdGFydHVwIHN0cmluZywgaWYgYW55ICovCi0gICAgaWYgKGxvY2Fs ICYmIGNraW5kZXgoKGNoYXIgKil4c3MsInNyZ2NqaGsiLDAsMCwxKSkgewotCWNoYXIgKnMgPSBO VUxMOwotICAgICAgICBpZiAoCi0jaWZkZWYgSUtTX09QVElPTgotCSAgICAvKiBEb24ndCBzZW5k IGF1dG8tYmxhaCBzdHJpbmcgaWYgd2Uga25vdyBvdGhlciBzaWRlIGlzIHNlcnZpbmcgKi8KLQkg ICAgIVRFTE9QVF9VKFRFTE9QVF9LRVJNSVQpIHx8Ci0JICAgICFURUxPUFRfU0IoVEVMT1BUX0tF Uk1JVCkua2VybWl0LnVfc3RhcnQKLSNlbHNlCi0JICAgIDEKLSNlbmRpZiAvKiBJS1NfT1BUSU9O ICovCi0JICAgICkgewotCSAgICBpZiAoc3N0YXRlID09ICdzJykgewkvKiBTZW5kaW5nIGZpbGUo cykgKi8KLQkJcyA9IGJpbmFyeSA/IHB0YWJbcHJvdG9jb2xdLmhfYl9pbml0IDogcHRhYltwcm90 b2NvbF0uaF90X2luaXQ7Ci0JICAgIH0gZWxzZSBpZiAocHJvdG9jb2wgPT0gUFJPVE9fSykgeyAv KiBDb21tYW5kIGZvciBzZXJ2ZXIgKi8KLQkJcyA9IHB0YWJbcHJvdG9jb2xdLmhfeF9pbml0Owot CSAgICB9Ci0JfQotI2lmZGVmIENLX1NQRUVECi0jaWZuZGVmIFVOUFJFRklYWkVSTwotCWlmIChw cm90b2NvbCA9PSBQUk9UT19LKQkvKiBCZWNhdXNlIG9mIEMtc3RyaW5ncy4uLiAqLwotCSAgY3Rs cFswXSA9IDE7Ci0jZW5kaWYgLyogVU5QUkVGSVhaRVJPICovCi0jZW5kaWYgLyogQ0tfU1BFRUQg Ki8KLQlpZiAocykgaWYgKCpzKSB7CQkvKiBJZiB3ZSBoYXZlIGEgY29tbWFuZCB0byBzZW5kLi4u ICovCi0JICAgIGNoYXIgdG1wYnVmWzM1Nl07Ci0JICAgIGludCB0bXBidWZzaXogPSAzNTY7Ci0J ICAgIGludCBzdHVmZiA9IC0xLCBzdHVmZjIgPSAtMSwgbGVuID0gMDsKLQkgICAgZXh0ZXJuIGlu dCB0bmxtOwotCSAgICBpZiAoc3N0YXRlID09ICdzJykgewkvKiBTZW5kaW5nIGZpbGUocykgKi8K LSNpZmRlZiBDS19YWVoKLQkJaWYgKHByb3RvY29sID09IFBST1RPX1gpIHsKLQkJICAgIGNoYXIg KiBzMjsKLQkJICAgIHMyID0gY21hcmcyWzBdID8gY21hcmcyIDogY21hcmc7Ci0JCSAgICBpZiAo KGludClzdHJsZW4ocykgKyAoaW50KXN0cmxlbihzMikgKyA0IDwgMzU2KQotCQkgICAgICBzcHJp bnRmKHRtcGJ1ZiwgcywgczIpOwotCQkgICAgZWxzZQotCQkgICAgICB0bXBidWZbMF0gPSBOVUw7 Ci0JCX0gZWxzZSB7Ci0jZW5kaWYgLyogQ0tfWFlaICovCi0JCSAgICBja21ha21zZyh0bXBidWYs IDM1NiwgcywgTlVMTCwgTlVMTCwgTlVMTCk7Ci0jaWZkZWYgQ0tfWFlaCi0JCX0KLSNlbmRpZiAv KiBDS19YWVogKi8KLQkgICAgfSBlbHNlIHsJCQkvKiBDb21tYW5kIGZvciBzZXJ2ZXIgKi8KLQkJ Y2tzdHJuY3B5KHRtcGJ1ZixzLDM1Nik7Ci0JICAgIH0KLQkgICAgY2tzdHJuY2F0KHRtcGJ1Ziwg IlwwMTUiLHNpemVvZih0bXBidWYpKTsKLQkgICAgaWYgKHRubG0pCQkJLyogVEVSTUlOQUwgTkVX TElORSBPTiAqLwotCSAgICAgIHN0dWZmID0gTEY7CQkvKiBTdHVmZiBMRiAqLwotI2lmZGVmIFRO Q09ERQotCSAgICAvKiBURUxORVQgTkVXTElORSBNT0RFICovCi0JICAgIGlmIChpc190bikgewot CQlzd2l0Y2ggKFRFTE9QVF9NRShURUxPUFRfQklOQVJZKSA/IHRuX2JfbmxtIDogdG5fbmxtKSB7 Ci0JCSAgY2FzZSBUTkxfQ1I6Ci0JCSAgICBicmVhazsKLQkJICBjYXNlIFROTF9DUk5VTDoKLQkJ ICAgIGJyZWFrOwotCQkgIGNhc2UgVE5MX0NSTEY6Ci0JCSAgICBzdHVmZjIgPSBzdHVmZjsKLQkJ ICAgIHN0dWZmID0gTEY7Ci0JCSAgICBicmVhazsKLQkJfQotCSAgICB9Ci0jZW5kaWYgLyogVE5D T0RFICovCi0KLSNpZmRlZiBORVRDT05OCi0jaWZkZWYgVENQU09DS0VUCi0jaWZkZWYgUkxPR0NP REUKLQkgICAgaWYgKG5ldHdvcmsgJiYgdHRucHJvdG8gPT0gTlBfUkxPR0lOKSB7Ci0JCXN3aXRj aCAodG5fYl9ubG0pIHsgLyogQWx3YXlzIEJJTkFSWSAqLwotCQkgIGNhc2UgVE5MX0NSOgotCQkg ICAgYnJlYWs7Ci0JCSAgY2FzZSBUTkxfQ1JOVUw6Ci0JCSAgICBzdHVmZjIgPSBzdHVmZjsKLQkJ ICAgIHN0dWZmICA9IE5VTDsKLQkJICAgIGJyZWFrOwotCQkgIGNhc2UgVE5MX0NSTEY6Ci0JCSAg ICBzdHVmZjIgPSBzdHVmZjsKLQkJICAgIHN0dWZmID0gTEY7Ci0JCSAgICBicmVhazsKLQkJfQot CSAgICB9Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNl bmRpZiAvKiBORVRDT05OICovCi0KLQkgICAgbGVuID0gc3RybGVuKHRtcGJ1Zik7Ci0JICAgIGlm IChzdHVmZiA+PSAwICYmIGxlbiA8IHRtcGJ1ZnNpeiAtIDEpIHsKLQkJdG1wYnVmW2xlbisrXSA9 IHN0dWZmOwotCQlpZiAoc3R1ZmYyID49IDAgJiYgbGVuIDwgdG1wYnVmc2l6IC0gMSkKLQkJICB0 bXBidWZbbGVuKytdID0gc3R1ZmYyOwotCQl0bXBidWZbbGVuXSA9IE5VTDsKLQkgICAgfQotCSAg ICB0dG9sKChDSEFSICopdG1wYnVmLGxlbik7Ci0JICAgIGlmIChwcm90b2NvbCA9PSBQUk9UT19L KQkvKiBHaXZlIHJlbW90ZSBLZXJtaXQgdGltZSB0byBzdGFydCAqLwotCSAgICAgIG1zbGVlcCg0 MDApOwotCX0KLSAgICB9Ci0KLSNpZmRlZiBDS19YWVoKLSAgICBpZiAocHJvdG9jb2wgIT0gUFJP VE9fSykgewkJLyogTm9uLUtlcm1pdCBwcm90b2NvbCBzZWxlY3RlZCAqLwotCWNoYXIgdG1wYnVm WzM1Nl07Ci0JaW50IHRtcGJ1ZnNpeiA9IDM1NjsKLQljaGFyICogcyA9ICIiOwotCi0jaWZkZWYg Q0tfVE1QRElSCi0JaWYgKHNzdGF0ZSA9PSAndicpIHsJCS8qIElmIHJlY2VpdmluZyBhbmQuLi4g Ki8KLQkgICAgaWYgKGRsZGlyICYmICFmX3RtcGRpcikgewkvKiBpZiB0aGV5IGhhdmUgYSBkb3du bG9hZCBkaXJlY3RvcnkgKi8KLQkJaWYgKHMgPSB6Z3RkaXIoKSkgewkvKiBHZXQgY3VycmVudCBk aXJlY3RvcnkgKi8KLQkJICAgIGlmICh6Y2hkaXIoZGxkaXIpKSB7IC8qIENoYW5nZSB0byBkb3du bG9hZCBkaXJlY3RvcnkgKi8KLQkJCWNrc3RybmNweShzYXZkaXIscyxUTVBESVJMRU4pOwotCQkJ Zl90bXBkaXIgPSAxOwkvKiBSZW1lbWJlciB0aGF0IHdlIGRpZCB0aGlzICovCi0JCSAgICB9Ci0J CX0KLQkgICAgfQotCX0KLSNlbmRpZiAvKiBDS19UTVBESVIgKi8KLQotI2lmZGVmIFhZWl9JTlRF Uk5BTAkJCS8qIEludGVybmFsICovCi0Jc3VjY2VzcyA9ICFweHl6KHNzdGF0ZSk7Ci0jZWxzZQot I2lmZGVmIENLX1JFRElSCQkJCS8qIEV4dGVybmFsICovCi0Jc3dpdGNoIChzc3RhdGUpIHsKLQkg IGNhc2UgJ3MnOgkJCS8qICdUaXMgYmV0dGVyIHRvIFNFTkQuLi4gKi8KLQkgICAgcyA9IGJpbmFy eSA/IHB0YWJbcHJvdG9jb2xdLnBfYl9zY21kIDogcHRhYltwcm90b2NvbF0ucF90X3NjbWQ7Ci0J ICAgIGJyZWFrOwotCSAgY2FzZSAndic6CQkJLyogLi4uIHRoYW4gUkVDRUlWRSAqLwotCSAgICBz ID0gYmluYXJ5ID8gcHRhYltwcm90b2NvbF0ucF9iX3JjbWQgOiBwdGFiW3Byb3RvY29sXS5wX3Rf cmNtZDsKLQkgICAgYnJlYWs7Ci0JfQotCWlmICghcykgcyA9ICIiOwotCWlmICgqcykgewotCSAg ICBpZiAoc3N0YXRlID09ICdzJykgewkvKiBTZW5kaW5nICovCi0JCWV4dGVybiBpbnQgeGZlcm1v ZGU7Ci0JCWludCBrID0gMCwgeCA9IDAsIGIgPSBiaW5hcnk7Ci0JCS8qCi0JCSAgSWYganVzdCBv bmUgZmlsZSB3ZSBjYW4gc2NhbiBpdCB0byBzZXQgdGhlIHhmZXIgbW9kZS4KLQkJICBPdGhlcndp c2UgaXQncyB1cCB0byB0aGUgZXh0ZXJuYWwgcHJvdG9jb2wgcHJvZ3JhbS4KLQkJKi8KLQkJaWYg KHBhdHRlcm5zICYmIHhmZXJtb2RlID09IFhNT0RFX0EgJiYgIWlzd2lsZChmc3BlYykpIHsKLQkJ ICAgIGV4dGVybiBpbnQgbnNjYW5maWxlOwotCQkgICAgayA9IHNjYW5maWxlKGZzcGVjLCZ4LG5z Y2FuZmlsZSk7Ci0JCSAgICBpZiAoayA+IC0xKSB7Ci0JCQliID0gKGsgPT0gRlRfQklOKSA/IFhZ RlRfQiA6IFhZRlRfVDsKLQkJCXMgPSBiID8KLQkJCSAgICBwdGFiW3Byb3RvY29sXS5wX2Jfc2Nt ZCA6Ci0JCQkgICAgcHRhYltwcm90b2NvbF0ucF90X3NjbWQ7Ci0JCSAgICB9Ci0JCX0KLQkJaWYg KChpbnQpc3RybGVuKHMpICsgKGludClzdHJsZW4oZnNwZWMpIDwgdG1wYnVmc2l6KSB7Ci0JCSAg ICBzcHJpbnRmKHRtcGJ1ZixzLGZzcGVjKTsgLyogc2FmZSAocHJlY2hlY2tlZCkgKi8KLQkJICAg IHRsb2coRjExMCwiU2VuZGluZyIsZnNwZWMsMEwpOwotCQl9Ci0JICAgIH0gZWxzZSB7CQkJLyog UmVjZWl2aW5nICovCi0JCWlmICgoaW50KXN0cmxlbihzKSArIChpbnQpc3RybGVuKGNtYXJnMikg PCB0bXBidWZzaXopIHsKLQkJICAgIHNwcmludGYodG1wYnVmLHMsY21hcmcyKTsgLyogc2FmZSAo cHJlY2hlY2tlZCkgKi8KLQkJICAgIHRsb2coRjExMCwiUmVjZWl2aW5nIixjbWFyZzIsMEwpOwot CQl9Ci0JICAgIH0KLQkgICAgdGxvZyhGMTEwLCIgdmlhIGV4dGVybmFsIHByb3RvY29sOiIsdG1w YnVmLDApOwotCSAgICBkZWJ1ZyhGMTEwLCJja2Nwcm8gdHRydW5jbWQiLHRtcGJ1ZiwwKTsKLQkg ICAgc3VjY2VzcyA9IHR0cnVuY21kKHRtcGJ1Zik7Ci0JICAgIHRsb2coRjExMCwiIHN0YXR1czoi LHN1Y2Nlc3MgPyAiT0siIDogIkZBSUxFRCIsIDApOwotCX0gZWxzZSB7Ci0JICAgIHByaW50Zigi P1NvcnJ5LCBubyBleHRlcm5hbCBwcm90b2NvbCBkZWZpbmVkIGZvciAlc1xyXG4iLAotCQkgICBw dGFiW3Byb3RvY29sXS5wX25hbWUKLQkJICAgKTsKLQl9Ci0jZWxzZQotCXByaW50ZigKLSJTb3Jy eSwgb25seSBLZXJtaXQgcHJvdG9jb2wgaXMgc3VwcG9ydGVkIGluIHRoaXMgdmVyc2lvbiBvZiBL ZXJtaXRcbiIKLQkgICAgICAgKTsKLSNlbmRpZiAvKiBDS19SRURJUiAqLwotI2VuZGlmIC8qIFhZ Wl9JTlRFUk5BTCAqLwotCXJldHVybjsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfWFlaICovCi0KLSNp ZmRlZiBOVFNJR1gKLSAgICBjb25yYXcoKTsKLSAgICBjb25ub2koKTsKLSNlbHNlCi0gICAgaWYg KCFsb2NhbCkKLSAgICAgIGNvbm5vaSgpOwkJCQkvKiBObyBjb25zb2xlIGludGVycnVwdHMgaWYg cmVtb3RlICovCi0jZW5kaWYgLyogTlRTSUcgKi8KLQotICAgIGthY3RpdmUgPSAxOwotICAgIGlm IChzc3RhdGUgPT0gJ3gnKSB7CQkvKiBJZiBlbnRlcmluZyBzZXJ2ZXIgbW9kZSwgKi8KLQlleHRl cm4gaW50IGhvd2NhbGxlZDsKLQlzZXJ2ZXIgPSAxOwkJCS8qIHNldCBmbGFnLCAqLwotCWRlYnVn KEYxMDEsInNlcnZlciBiYWNrZ3JkIiwiIixiYWNrZ3JkKTsKLQlkZWJ1ZyhGMTAxLCJzZXJ2ZXIg cXVpZXQiLCIiLHF1aWV0KTsKLQlkZWJ1ZyhGMTAwLCJTSE9VTEQgTk9UIFNFRSBUSElTIElGIElO IEJBQ0tHUk9VTkQhIiwiIiwwKTsKLQlpZiAoaG93Y2FsbGVkID09IElfQU1fU1NIU1VCKSB7CS8q IGFuZCBpc3N1ZSBhcHByb3ByaWF0ZSBtZXNzYWdlLiAqLwotCSAgICB0dG9sKChDSEFSICopIktF Uk1JVCBSRUFEWSBUTyBTRVJWRS4uLlwwMTVcMDEyIiwyNik7Ci0JfSBlbHNlIGlmICghbG9jYWwp IHsKLQkgICAgaWYgKCFxdWlldCAmJiAhYmFja2dyZAotI2lmZGVmIElLU19PUFRJT04KLSAgICAg ICAgICAgICAgICAmJiAhVEVMT1BUX01FKFRFTE9QVF9LRVJNSVQpIC8qIFVzZXIgd2FzIHRvbGQg YnkgbmVnb3RpYXRpb24gKi8KLSNlbmRpZiAvKiBJS1NfT1BUSU9OICovCi0JCSkgewotCQljb25v bGwoc3J2dHh0KTsKLQkJY29ub2xsKCJLRVJNSVQgUkVBRFkgVE8gU0VSVkUuLi4iKTsKLQkgICAg fQotCX0gZWxzZSB7Ci0JICAgIGNvbm9sKCJFbnRlcmluZyBzZXJ2ZXIgbW9kZSBvbiAiKTsKLQkg ICAgY29ub2xsKHR0bmFtZSk7Ci0JICAgIGNvbm9sbCgiVHlwZSBDdHJsLUMgdG8gcXVpdC4iKTsK LQkgICAgaWYgKHNydmRpcykgaW50bXNnKC0xTCk7Ci0jaWZkZWYgVENQU09DS0VUCi0jaWZuZGVm IE5PTElTVEVOCi0JICAgIGlmIChuZXR3b3JrICYmIHRjcHNyZmQgPiAwKQotCSAgICAgIHR0b2wo KENIQVIgKikiS0VSTUlUIFJFQURZIFRPIFNFUlZFLi4uXDAxNVwwMTIiLDI2KTsKLSNlbmRpZiAv KiBOT0xJU1RFTiAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotCX0KLSAgICB9IGVsc2UKLSAg ICAgIHNlcnZlciA9IDA7Ci0jaWZkZWYgVk1TCi0gICAgaWYgKCFxdWlldCAmJiAhYmFja2dyZCkg ICAgLyogU28gbWVzc2FnZSBkb2Vzbid0IG92ZXJ3cml0ZSBwcm9tcHQgKi8KLSAgICAgIGNvbm9s bCgiIik7Ci0gICAgaWYgKGxvY2FsKSBjb25yZXMoKTsgICAgICAgLyogU28gQ3RybC1DIHdpbGwg d29yayAqLwotI2VuZGlmIC8qIFZNUyAqLwotLyoKLSAgSWYgaW4gcmVtb3RlIG1vZGUsIG5vdCBz aHVzaGVkLCBub3QgaW4gYmFja2dyb3VuZCwgYW5kIGF0IHRvcCBjb21tYW5kIGxldmVsLAotICBp c3N1ZSBhIGhlbHBmdWwgbWVzc2FnZSB0ZWxsaW5nIHdoYXQgdG8gZG8uLi4KLSovCi0gICAgaWYg KCFsb2NhbCAmJiAhcXVpZXQgJiYgIWJhY2tncmQpIHsKLQlpZiAoc3N0YXRlID09ICd2Jykgewot CSAgICBjb25vbGwoIlJldHVybiB0byB5b3VyIGxvY2FsIEtlcm1pdCBhbmQgZ2l2ZSBhIFNFTkQg Y29tbWFuZC4iKTsKLQkgICAgY29ub2xsKCIiKTsKLQkgICAgY29ub2xsKCJLRVJNSVQgUkVBRFkg VE8gUkVDRUlWRS4uLiIpOwotCX0gZWxzZSBpZiAoc3N0YXRlID09ICdzJykgewotCSAgICBjb25v bGwoIlJldHVybiB0byB5b3VyIGxvY2FsIEtlcm1pdCBhbmQgZ2l2ZSBhIFJFQ0VJVkUgY29tbWFu ZC4iKTsKLQkgICAgY29ub2xsKCIiKTsKLQkgICAgY29ub2xsKCJLRVJNSVQgUkVBRFkgVE8gU0VO RC4uLiIpOwotCX0gZWxzZSBpZiAoIHNzdGF0ZSA9PSAnZycgfHwgc3N0YXRlID09ICdyJyB8fCBz c3RhdGUgPT0gJ2gnIHx8Ci0JCSAgICBzc3RhdGUgPT0gJ2onIHx8IHNzdGF0ZSA9PSAnYycgKSB7 Ci0JICAgIGNvbm9sbCgiUmV0dXJuIHRvIHlvdXIgbG9jYWwgS2VybWl0IGFuZCBnaXZlIGEgU0VS VkVSIGNvbW1hbmQuIik7Ci0JICAgIGNvbm9sbCgiIik7Ci0JICAgIGNvbm9sbCgoc3N0YXRlID09 ICdyJyB8fCBzc3RhdGUgPT0gJ2onIHx8IHNzdGF0ZSA9PSAnaCcpID8KLQkJICAgIktFUk1JVCBS RUFEWSBUTyBHRVQuLi4iIDoKLQkJICAgIktFUk1JVCBSRUFEWSBUTyBTRU5EIFNFUlZFUiBDT01N QU5ELi4uIik7Ci0JfQotICAgIH0KLSNpZmRlZiBDT01NRU5UCi0gICAgaWYgKCFsb2NhbCkgc2xl ZXAoMSk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotLyoKLSAgVGhlICd3YXJ0KCknIGZ1bmN0aW9u IGlzIGdlbmVyYXRlZCBieSB0aGUgd2FydCBwcm9ncmFtLiAgSXQgZ2V0cyBhCi0gIGNoYXJhY3Rl ciBmcm9tIHRoZSBpbnB1dCgpIHJvdXRpbmUgYW5kIHRoZW4gYmFzZWQgb24gdGhhdCBjaGFyYWN0 ZXIgYW5kCi0gIHRoZSBjdXJyZW50IHN0YXRlLCBzZWxlY3RzIHRoZSBhcHByb3ByaWF0ZSBhY3Rp b24sIGFjY29yZGluZyB0byB0aGUgc3RhdGUKLSAgdGFibGUgYWJvdmUsIHdoaWNoIGlzIHRyYW5z Zm9ybWVkIGJ5IHRoZSB3YXJ0IHByb2dyYW0gaW50byBhIGJpZyBjYXNlCi0gIHN0YXRlbWVudC4g IFRoZSBmdW5jdGlvbiBpcyBhY3RpdmUgZm9yIG9uZSB0cmFuc2FjdGlvbi4KLSovCi0gICAgcnRp bWVyKCk7CQkJCS8qIFJlc2V0IGVsYXBzZWQtdGltZSB0aW1lciAqLwotI2lmZGVmIEdGVElNRVIK LSAgICByZnRpbWVyKCk7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotICAgIHJlc2V0YygpOwkJCQkv KiAmIG90aGVyIHBlci10cmFuc2FjdGlvbiBjb3VudGVycy4gKi8KLQotICAgIGRlYnVnKEYxMDEs InByb3RvIGNhbGxpbmcgd2FydCwganVzdG9uZSIsIiIsanVzdG9uZSk7Ci0KLSAgICB3YXJ0KCk7 CQkJCS8qIEVudGVyIHRoZSBzdGF0ZSB0YWJsZSBzd2l0Y2hlci4gKi8KLS8qCi0gIE5vdGU6IHRo ZSBmb2xsb3dpbmcgaXMgbmVjZXNzYXJ5IGluIGNhc2Ugd2UgaGF2ZSBqdXN0IGRvbmUgYSByZW1v dGUtbW9kZQotICBmaWxlIHRyYW5zZmVyLCBpbiB3aGljaCBjYXNlIHRoZSBjb250cm9sbGluZyB0 ZXJtaW5hbCBtb2RlcyBoYXZlIGJlZW4KLSAgY2hhbmdlZCBieSB0dHBrdCgpLiAgSW4gcGFydGlj dWxhciwgc3BlY2lhbCBjaGFyYWN0ZXJzIGxpa2UgQ3RybC1DIGFuZAotICBDdHJsLVwgbWlnaHQg aGF2ZSBiZWVuIHR1cm5lZCBvZmYgKHNlZSB0dHBrdCkuICBTbyB0aGlzIGNhbGwgdG8gdHRyZXMo KSBpcwotICBlc3NlbnRpYWwuICBJTVBPUlRBTlQ6IHJlc3RvcmUgaW50ZXJydXB0IGhhbmRsZXJz IGZpcnN0LCBvdGhlcndpc2UgYW55Ci0gIHRlcm1pbmFsIGludGVycnVwdHMgdGhhdCBvY2N1ciBi ZWZvcmUgdGhpcyBpcyBkb25lIGluIHRoZSBub3JtYWwgcGxhY2UKLSAgbGF0ZXIgd2lsbCBjYXVz ZSBhIGNyYXNoLgotKi8KLSNpZmRlZiBPUzIKLSAgICB0dHJlcygpOwkJCQkvKiBSZXNldCB0aGUg Y29tbXVuaWNhdGlvbiBkZXZpY2UgKi8KLSNlbHNlCi0gICAgaWYgKCFsb2NhbCkgewotCXNldGlu dCgpOwkJCS8qIEFybSBpbnRlcnJ1cHQgaGFuZGxlcnMgRklSU1QgKi8KLQltc2xlZXAoNTAwKTsK LQl0dHJlcygpOwkJCS8qIFRoZW4gcmVzdG9yZSB0ZXJtaW5hbC4gKi8KLSAgICB9Ci0jZW5kaWYg LyogT1MyICovCi0gICAgeHhzY3JlZW4oU0NSX1RDLDAsMEwsIiIpOwkJLyogVHJhbnNhY3Rpb24g Y29tcGxldGUgKi8KLSAgICB4ID0gcXVpZXQ7Ci0gICAgcXVpZXQ9MTsKLSAgICBjbHNpZigpOwkJ CQkvKiBGYWlsc2FmZSBpbiBjYXNlIHdlIG1pc3NlZCAqLwotICAgIGNsc29mKDEpOwkJCQkvKiBh IGNhc2UgaW4gdGhlIHN0YXRlIG1hY2hpbmUuICovCi0gICAgcXVpZXQgPSB4OwotCi0gICAgaWYg KHNlcnZlcikgewkJCS8qIEJhY2sgZnJvbSBwYWNrZXQgcHJvdG9jb2wuICovCi0gICAgCWlmICgh cXVpZXQgJiYgIWJhY2tncmQKLSNpZmRlZiBJS1NECi0JICAgICYmICFpbnNlcnZlcgotI2VuZGlm IC8qIElLU0QgKi8KLQkgICAgKSB7CQkJCS8qIEdpdmUgYXBwcm9wcmlhdGUgbWVzc2FnZSAqLwot CSAgICBjb25vbGwoIiIpOwotCSAgICBjb25vbGwoIkMtS2VybWl0IHNlcnZlciBkb25lIik7Ci0g ICAgICAgIH0KLSAgICAgICAgc2VydmVyID0gMDsJCQkvKiBOb3QgYSBzZXJ2ZXIgYW55IG1vcmUg Ki8KLSAgICB9Ci19Ci0KLS8qICBTIEcgRSBUIEkgTiBJIFQgIC0tICBIYW5kbGUgaW5jb21pbmcg R0VULUNsYXNzIHBhY2tldHMgICovCi0KLS8qCi0gIFJldHVybnM6Ci0gICAtMTogT24gZXJyb3IK LSAgICAwOiBHRVQgcGFja2V0IHByb2Nlc3NlZCBPSyAtIHJlYWR5IHRvIFNlbmQuCi0gICAgMTog RXh0ZW5kZWQgR0VUIHByb2Nlc3NlZCBPSyAtIHdhaXQgZm9yIGFub3RoZXIuCi0qLwotc3RhdGlj IGludAotc2dldGluaXQocmVnZXQseGdldCkgaW50IHJlZ2V0LCB4Z2V0OyB7CS8qIFNlcnZlciBl bmQgb2YgR0VUIGNvbW1hbmQgKi8KLSAgICBjaGFyICogZnMgPSBOVUxMOwkJCS8qIFBvaW50ZXIg dG8gZmlsZXNwZWMgKi8KLSAgICBpbnQgaSwgbiwgZG9uZSA9IDA7Ci0jaWZkZWYgUElQRVNFTkQK LSAgICBleHRlcm4gaW50IHVzZXBpcGVzLCBwaXBlc2VuZDsKLSNlbmRpZiAvKiBQSVBFU0VORCAq LwotICAgIGV4dGVybiBpbnQgbm9saW5rczsKLQotICAgIGlmICghRU5BQkxFRChlbl9nZXQpKSB7 CQkvKiBPbmx5IGlmIG5vdCBkaXNhYmxlZCEgICovCi0JZXJycGt0KChDSEFSICopIkdFVCBkaXNh YmxlZCIpOwotCXJldHVybigtMSk7Ci0gICAgfQotCi0gICAgLyogT0sgdG8gcHJvY2VlZCAqLwot Ci0gICAgbm9saW5rcyA9IHJlY3Vyc2l2ZTsKLSAgICBmaWxjbnQgPSAwOwotCi0jaWZkZWYgV0hB VEFNSQotICAgIC8qIElmIHRoZXkgYXJlIGFsaWtlIHRoaXMgd2FzIGFscmVhZHkgZG9uZSBpbiB3 aG9hcmV3ZSgpICovCi0gICAgZGVidWcoRjEwMSwic2dldGluaXQgd2hhdHJ1IiwiIix3aGF0cnUp OwotICAgIGlmICh3aGF0cnUgJiBXTUlfRkxBRykgewkJLyogRGlkIHdlIGdldCBXSEFUQU1JIGlu Zm8/ICovCi0JZGVidWcoRjEwMSwic2dldGluaXQgYmluYXJ5ICgxKSIsIiIsYmluYXJ5KTsKLSNp ZmRlZiBWTVMKLQlpZiAoYmluYXJ5ICE9IFhZRlRfSSAmJiBiaW5hcnkgIT0gWFlGVF9MKQotI2Vs c2UKLSNpZmRlZiBPUzIKLQkgIGlmIChiaW5hcnkgIT0gWFlGVF9MKQotI2VuZGlmIC8qIE9TMiAq LwotI2VuZGlmIC8qIFZNUyAqLwotCSAgICBiaW5hcnkgPSAod2hhdHJ1ICYgV01JX0ZNT0RFKSA/ IC8qIFllcywgc2V0IGZpbGUgdHlwZSAqLwotCSAgICAgIFhZRlRfQiA6IFhZRlRfVDsJLyogYXV0 b21hdGljYWxseSAqLwotCWRlYnVnKEYxMDEsInNnZXRpbml0IGJpbmFyeSAoMikiLCIiLGJpbmFy eSk7Ci0JaWYgKCF3ZWFyZWFsaWtlKQotCSAgZm5jbnYgPSAod2hhdHJ1ICYgV01JX0ZOQU1FKSA/ IDEgOiAwOyAvKiBBbmQgbmFtZSBjb252ZXJzaW9uICovCi0gICAgfQotI2VuZGlmIC8qIFdIQVRB TUkgKi8KLQotICAgIGZzID0gKGNoYXIgKilzcnZjbWQ7Ci0gICAgc3J2cHRyID0gc3J2Y21kOwkJ CS8qIFBvaW50IHRvIHNlcnZlciBjb21tYW5kIGJ1ZmZlciAqLwotICAgIGRlY29kZShyZGF0YXAs cHV0c3J2LDApOwkJLyogRGVjb2RlIHRoZSBHRVQgY29tbWFuZCBpbnRvIGl0ICovCi0gICAgLyog QWNjZXB0IG11bHRpcGxlIGZpbGVzcGVjcyAqLwotICAgIGNtYXJnMiA9ICIiOwkJCS8qIERvbid0 IHVzZSBjbWFyZzIgKi8KLSAgICBjbWFyZyA9ICIiOwkJCQkvKiBEb24ndCB1c2UgY21hcmcgKi8K LQotICAgIGRvbmUgPSAxOwkJCQkvKiBPbmx5IDEgcGFja2V0IG5lZWRlZC4uLiAqLwotICAgIGlm ICh4Z2V0KSB7CQkJCS8qIFNwZWNpYWwgZGVjb2RpbmcgZm9yIEV4dGVuZGVkIEdFVCAqLwotCWNo YXIgTCwgbmV4dCwgYzsJCS8qIFBMViBpdGVtcyAqLwotCWludCBsZW4sIHZhbDsJCQkvKiBNb3Jl IFBMViBpdGVtcyAqLwotCWNoYXIgKiBwID0gKGNoYXIgKilzcnZjbWQ7CS8qIFN0cmluZyB0byBk ZWNvZGUgKi8KLQotCWRvbmUgPSAwOwkJCS8qIE1heWJlIG1vcmUgcGFja2V0cyBuZWVkZWQgKi8K LQlmcyA9IE5VTEw7CQkJLyogV2UgZG9uJ3Qga25vdyB0aGUgZmlsZXNwZWMgeWV0ICovCi0JYyA9 ICpwKys7CQkJLyogR2V0IGZpcnN0IHBhcmFtZXRlciAqLwotCi0Jd2hpbGUgKGMpIHsJCQkvKiBG b3IgYWxsIHBhcmFtZXRlcnMuLi4gKi8KLQkgICAgZGVidWcoRjAwMCwic2dldGluaXQgYyIsIiIs Yyk7Ci0JICAgIEwgPSAqcCsrOwkJCS8qIEdldCBsZW5ndGggKi8KLQkgICAgaWYgKEwgPj0gU1Ap CQkvKiBEZWNvZGUgbGVuZ3RoICovCi0JICAgICAgbGVuID0geHVuY2hhcihMKTsKLQkgICAgZWxz ZSBpZiAoYyA9PSAnQCcpIHsJLyogQWxsb3cgbWlzc2luZyBFT1AgbGVuZ3RoIGZpZWxkICovCi0J CWxlbiA9IDA7Ci0JICAgIH0gZWxzZSB7Ci0JCWxlbiA9ICh4dW5jaGFyKCpwKyspICogOTUpOwot CQlsZW4gKz0geHVuY2hhcigqcCsrKTsKLQkgICAgfQotCSAgICBkZWJ1ZyhGMTAxLCJzZ2V0aW5p dCBsZW4iLCIiLGxlbik7Ci0JICAgIG5leHQgPSAqKHArbGVuKTsJCS8qIEdldCBuZXh0IHBhcmFt ZXRlciAqLwotCSAgICAqKHArbGVuKSA9IE5VTDsJCS8qIFplcm8gaXQgb3V0IHRvIHRlcm1pbmFs IHZhbHVlICovCi0JICAgIGRlYnVnKEYxMTAsInNnZXRpbml0IHAiLHAsMCk7Ci0JICAgIHN3aXRj aCAoYykgewkJLyogRG8gdGhlIHBhcmFtZXRlciAqLwotCSAgICAgIGNhc2UgJ08nOgkJCS8qIEdF VCBPcHRpb25zICovCi0JCXZhbCA9IGF0b2kocCk7CQkvKiBDb252ZXJ0IHRvIGludCAqLwotCQlk ZWJ1ZyhGMTAxLCJzZ2V0aW5pdCBPIHZhbCIsIiIsdmFsKTsKLQkJaWYgKHZhbCAmIEdPUFRfREVM KSBtb3ZpbmcgPSAxOwotCQlpZiAodmFsICYgR09QVF9SRVMpIHJlZ2V0ID0gMTsKLQkJaWYgKHZh bCAmIEdPUFRfUkVDKSB7Ci0JCSAgICByZWN1cnNpdmUgPSAxOwotCQkgICAgbm9saW5rcyA9IDI7 Ci0JCSAgICBpZiAoZm5zcGF0aCA9PSBQQVRIX09GRikKLQkJICAgICAgZm5zcGF0aCA9IFBBVEhf UkVMOwotCQl9Ci0JCWJyZWFrOwotCSAgICAgIGNhc2UgJ00nOgkJCS8qIFRyYW5zZmVyIE1vZGUg Ki8KLQkJdmFsID0gYXRvaShwKTsKLQkJZGVidWcoRjEwMSwic2dldGluaXQgTSB2YWwiLCIiLHZh bCk7Ci0JCWlmICh2YWwgPCAxKQotCQkgIGJyZWFrOwotCQlwYXR0ZXJucyA9IDA7CQkvKiBUYWtl cyBwcmVjZWRlbmNlIG92ZXIgcGF0dGVybnMgKi8KLQkJZmlsZXBlZWsgPSAwOwkJLyogYW5kIEZJ TEUgU0NBTiAqLwotCQlpZiAodmFsID09IEdNT0RfVFhUKSBiaW5hcnkgPSBYWUZUX1Q7IC8qIFRl eHQgKi8KLQkJaWYgKHZhbCA9PSBHTU9EX0JJTikgYmluYXJ5ID0gWFlGVF9COyAvKiBCaW5hcnkg Ki8KLQkJaWYgKHZhbCA9PSBHTU9EX0xCTCkgYmluYXJ5ID0gWFlGVF9MOyAvKiBMYWJlbGVkICov Ci0JCWJyZWFrOwotCSAgICAgIGNhc2UgJ0YnOgkJCS8qIEZpbGVuYW1lICovCi0JCWZzID0gcDsK LQkJZGVidWcoRjExMCwic2dldGluaXQgZmlsZW5hbWUiLGZzLDApOwotCQlicmVhazsKLQkgICAg ICBjYXNlICdAJzoJCQkvKiBFbmQgT2YgUGFyYW1ldGVycyAqLwotCQlkb25lID0gMTsKLQkJZGVi dWcoRjEwMCwic2dldGluaXQgRU9QIiwiIiwwKTsKLQkJYnJlYWs7Ci0JICAgICAgZGVmYXVsdDoK LQkJZXJycGt0KChDSEFSICopIlVua25vd24gR0VUIFBhcmFtZXRlciIpOwotCQlkZWJ1ZyhGMTAw LCJzZ2V0aW5pdCB1bmtub3duIHBhcmFtZXRlciIsIiIsMCk7Ci0JCXJldHVybigtMSk7Ci0JICAg IH0KLQkgICAgcCArPSAobGVuICsgMSk7Ci0JICAgIGMgPSBuZXh0OwotCX0KLSAgICB9Ci0gICAg aWYgKCFmcykgZnMgPSAiIjsJCQkvKiBBIGZpbGVuYW1lIGlzIHJlcXVpcmVkICovCi0gICAgaWYg KCpmcykgewotCWhhdmVmcyA9IDE7Ci0JbiA9IDA7CQkJCS8qIENoZWNrIGZvciBxdW90ZWQgbmFt ZSAqLwotCWlmICgobiA9IHN0cmxlbihmcykpID4gMSkgewotCSAgICAvKiBOb3RlOiB0aGlzIGRv ZXMgbm90IGFsbG93IGZvciBtdWx0aXBsZSBxdW90ZWQgbmFtZXMgKi8KLQkgICAgaWYgKChmc1sw XSA9PSAneycgJiYgZnNbbi0xXSA9PSAnfScpIHx8Ci0JCShmc1swXSA9PSAnIicgJiYgZnNbbi0x XSA9PSAnIicpKSB7Ci0JCWZzW24tMV0gPSAnXDAnOwotCQlmcysrOwotCQlkZWJ1ZyhGMTExLCJz Z2V0aW5pdCB1bnF1b3RlZCBmaWxlbmFtZSIsZnMsbik7Ci0JICAgIH0gZWxzZQotCSAgICAgIG4g PSAwOwkJCS8qIFRoaXMgbWVhbnMgbm8gcXVvdGluZyAqLwotCX0KLQotI2lmZGVmIFBJUEVTRU5E Ci0JZGVidWcoRjExMSwic2dldGluaXQiLGZzLHVzZXBpcGVzKTsKLQlpZiAodXNlcGlwZXMgJiYg RU5BQkxFRChlbl9ob3MpICYmICpmcyA9PSAnIScpIHsKLQkgICAgY21hcmcgPSBmcyArIDE7CQkv KiBQb2ludCBwYXN0IHRoZSBiYW5nICovCi0JICAgICpmcyA9IE5VTDsKLQkgICAgbmZpbHMgPSAt MTsKLQkgICAgcGlwZXNlbmQgPSAxOwotCSAgICBkZWJ1ZyhGMTExLCJzZ2V0aW5pdCBwaXBlc2Vu ZCIsY21hcmcscGlwZXNlbmQpOwotCX0KLQlpZiAoIXBpcGVzZW5kKSB7CQkvKiBJZiBpdCdzIG5v dCBhIHBpcGUgKi8KLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotCSAgICBpZiAobiA9PSAwKSB7CQkv KiBJZiB0aGUgbmFtZSB3YXMgbm90IHF1b3RlZCAqLwotI2lmbmRlZiBOT01TRU5ECi0JCW5maWxz ID0gZm5wYXJzZShmcyk7CS8qIEFsbG93IGl0IHRvIGJlIGEgbGlzdCBvZiBuYW1lcyAqLwotCQlk ZWJ1ZyhGMTExLCJzZ2V0aW5pdCBBIixmcyxuZmlscyk7Ci0jaWZkZWYgQ09NTUVOVAotLyogVGhp cyBkb2Vzbid0IHdvcmsgaWYgYSBHRVQtUEFUSCBpcyBzZXQuICovCi0JCWlmIChuZmlscyA9PSAx ICYmICFpc3dpbGQoZnMpKSB7IC8qIFNpbmdsZSBmaWxlICovCi0JCSAgICBjaGFyICogbTsKLQkJ ICAgIGlmICgoeCA9IHpjaGtpKGZzKSkgPCAwKSB7IC8qIENoZWNrIGlmIGl0J3Mgc2VuZGFibGUg Ki8KLQkJCXN3aXRjaCAoeCkgewotCQkJICBjYXNlIC0xOiBtID0gIkZpbGUgbm90IGZvdW5kIjsg YnJlYWs7Ci0JCQkgIGNhc2UgLTI6IG0gPSAiTm90IGEgcmVndWxhciBmaWxlIjsgYnJlYWs7Ci0J CQkgIGNhc2UgLTM6IG0gPSAiUmVhZCBhY2Nlc3MgZGVuaWVkIjsgYnJlYWs7Ci0JCQl9Ci0JCQll cnJwa3QoKENIQVIgKiltKTsKLQkJCXJldHVybigtMSk7Ci0JCSAgICB9Ci0JCX0KLSNlbmRpZiAv KiBDT01NRU5UICovCi0JICAgIH0gZWxzZSB7CQkJLyogSWYgaXQgd2FzIHF1b3RlZCAqLwotI2Vu ZGlmIC8qIE5PTVNFTkQgKi8KLQkJbnp4b3B0cyA9IDA7Ci0jaWZkZWYgVU5JWE9ST1NLCi0JCWlm IChtYXRjaGRvdCkgIG56eG9wdHMgfD0gWlhfTUFUQ0hET1Q7Ci0jZW5kaWYgLyogVU5JWE9ST1NL ICovCi0JCWlmIChyZWN1cnNpdmUpIG56eG9wdHMgfD0gWlhfUkVDVVJTRTsKLQkJLyogVHJlYXQg YXMgYSBzaW5nbGUgZmlsZXNwZWMgKi8KLQkJbmZpbHMgPSAwIC0gbnp4cGFuZChmcyxuenhvcHRz KTsKLQkJZGVidWcoRjExMSwic2dldGluaXQgQiIsZnMsbmZpbHMpOwotCQljbWFyZyA9IGZzOwot CSAgICB9Ci0jaWZkZWYgUElQRVNFTkQKLQl9Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLSAgICB9 Ci0gICAgaWYgKCFkb25lKSB7CQkJLyogTmVlZCBtb3JlIE8gcGFja2V0cy4uLiAqLwotCWRlYnVn KEYxMDAsInNnZXRpbml0IE8tUGFja2V0IFRCQyIsIiIsMCk7IC8qIFRvIEJlIENvbnRpbnVlZCAq LwotCXJldHVybigxKTsKLSAgICB9Ci0gICAgZGVidWcoRjEwMCwic2dldGluaXQgTy1QYWNrZXQg ZG9uZSAtIGhhdmVmcyIsIiIsaGF2ZWZzKTsKLSAgICBpZiAoIWhhdmVmcykgewkJCS8qIERvbmUg LSBtYWtlIHN1cmUgd2UgaGF2ZSBmaWxlbmFtZSAqLwotCWVycnBrdCgoQ0hBUiAqKSJHRVQgd2l0 aG91dCBmaWxlbmFtZSIpOwotCXJldHVybigtMSk7Ci0gICAgfQotICAgIGZyZWVycGt0KHdpbmxv KTsKLSAgICB3aW5sbyA9IDA7CQkJCS8qIEJhY2sgdG8gcGFja2V0IDAgYWdhaW4uICovCi0gICAg ZGVidWcoRjEwMSwic2dldGluaXQgd2lubG8iLCIiLHdpbmxvKTsKLSAgICBuYWtzdGF0ZSA9IDA7 CQkJLyogTm93IEknbSB0aGUgc2VuZGVyISAqLwotICAgIGlmIChyZWdldCkgc2VuZG1vZGUgPSBT TV9SRVNFTkQ7Ci0gICAgaWYgKHNpbml0KCkgPiAwKSB7CQkJLyogU2VuZCBTZW5kLUluaXQgKi8K LSNpZmRlZiBTVFJFQU1JTkcKLQlpZiAoIXN0cmVhbWluZykKLSNlbmRpZiAvKiBTVFJFQU1JTkcg Ki8KLQkgIHRpbWludCA9IGNoa3RpbW8ocnRpbW8sdGltZWYpOyAvKiBTd2l0Y2ggdG8gcGVyLXBh Y2tldCB0aW1lciAqLwotCXJldHVybigwKTsJCQkvKiBJZiBzdWNjZXNzZnVsLCBzd2l0Y2ggc3Rh dGUgKi8KLSAgICB9IGVsc2UgcmV0dXJuKC0xKTsJCQkvKiBFbHNlIGJhY2sgdG8gc2VydmVyIGNv bW1hbmQgd2FpdCAqLwotfQotCi0jZWxzZSAgLyogTk9YRkVSICovCi0KLSNpbmNsdWRlICJja2Nk ZWIuaCIKLQotVk9JRAotcHJvdG8oKSB7Ci0gICAgZXh0ZXJuIGludCBzdWNjZXNzOwotICAgIHN1 Y2Nlc3MgPSAwOwotfQotI2VuZGlmIC8qIE5PWEZFUiAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQt OS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjcHJvLncgYi9ja2VybWl0LTkuMC4zMDIt YnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3Byby53CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCBhNmI1ZjQ4Li4wMDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0 LTkuMC4zMDIvY2tjcHJvLncKKysrIC9kZXYvbnVsbApAQCAtMSwzNjMzICswLDAgQEAKLWNoYXIg KnByb3R2ID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIC0qLUMtKi0gKi8KLSJDLUtlcm1pdCBQcm90b2NvbCBNb2R1bGUgOS4wLjE2MCwgMTYg T2N0IDIwMDkiOwotCi1pbnQga2FjdGl2ZSA9IDA7CQkJLyogS2VybWl0IHByb3RvY29sIGlzIGFj dGl2ZSAqLwotCi0jZGVmaW5lIFBLVFpFUk9IQUNLCi0KLS8qIEMgSyBDIFAgUiBPICAtLSBDLUtl cm1pdCBQcm90b2NvbCBNb2R1bGUsIGluIFdhcnQgcHJlcHJvY2Vzc29yIG5vdGF0aW9uLiAqLwot LyoKLSAgQXV0aG9yOiBGcmFuayBkYSBDcnV6IDxmZGNAY29sdW1iaWEuZWR1PiwKLSAgQ29sdW1i aWEgVW5pdmVyc2l0eSBBY2FkZW1pYyBJbmZvcm1hdGlvbiBTeXN0ZW1zLCBOZXcgWW9yayBDaXR5 LgotCi0gIENvcHlyaWdodCAoQykgMTk4NSwgMjAwOSwKLSAgICBUcnVzdGVlcyBvZiBDb2x1bWJp YSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgotICAgIEFsbCByaWdodHMgcmVz ZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCi0gICAgY29w eXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVy bWlzc2lvbnMuCi0qLwotI2lmbmRlZiBOT1hGRVIKLSNpbmNsdWRlICJja2NzeW0uaCIKLSNpbmNs dWRlICJja2NkZWIuaCIKLSNpbmNsdWRlICJja2Nhc2MuaCIKLSNpbmNsdWRlICJja2NrZXIuaCIK LSNpZmRlZiBPUzIKLSNpZm5kZWYgTlQKLSNkZWZpbmUgSU5DTF9OT1BNCi0jZGVmaW5lIElOQ0xf VklPCQkJLyogTmVlZGVkIGZvciBja29jb24uaCAqLwotI2luY2x1ZGUgPG9zMi5oPgotI3VuZGVm IENPTU1FTlQKLSNlbmRpZiAvKiBOVCAqLwotI2luY2x1ZGUgImNrb2Nvbi5oIgotI2VuZGlmIC8q IE9TMiAqLwotCi0vKgotIE5vdGUgLS0gVGhpcyBmaWxlIG1heSBhbHNvIGJlIHByZXByb2Nlc3Nl ZCBieSB0aGUgVU5JWCBMZXggcHJvZ3JhbSwgYnV0Ci0geW91IG11c3QgaW5kZW50IHRoZSBhYm92 ZSAjaW5jbHVkZSBzdGF0ZW1lbnRzIGJlZm9yZSB1c2luZyBMZXgsIGFuZCB0aGVuCi0gcmVzdG9y ZSB0aGVtIHRvIHRoZSBsZWZ0IG1hcmdpbiBpbiB0aGUgcmVzdWx0aW5nIEMgcHJvZ3JhbSBiZWZv cmUgY29tcGlsYXRpb24uCi0gQWxzbywgdGhlIGludm9jYXRpb24gb2YgdGhlICJ3YXJ0KCkiIGZ1 bmN0aW9uIGJlbG93IG11c3QgYmUgcmVwbGFjZWQgYnkgYW4KLSBpbnZvY2F0aW9uICBvZiB0aGUg Inl5bGV4KCkiIGZ1bmN0aW9uLiAgSXQgbWlnaHQgYWxzbyBiZSBuZWNlc3NhcnkgdG8gcmVtb3Zl Ci0gY29tbWVudHMgaW4gdGhlICglKSglKS4uLiglKSglKSBzZWN0aW9uLgotKi8KLQotLyogU3Rh dGUgZGVmaW5pdGlvbnMgZm9yIFdhcnQgKG9yIExleCkgKi8KLSVzdGF0ZXMgaXBrdCByZmlsZSBy YXR0ciByZHBrdCBzc2luaXQgc3NmaWxlIHNzYXR0ciBzc2RhdGEgc3Nlb2Ygc3Nlb3QKLSVzdGF0 ZXMgc2VydmUgZ2VuZXJpYyBnZXQgcmdlbiBzc29wa3Qgcm9wa3QKLQotX1BST1RPVFlQKHN0YXRp YyBWT0lEIHh4cHJvdG8sKHZvaWQpKTsKLV9QUk9UT1RZUChzdGF0aWMgVk9JRCB3aGVyZW1zZywo dm9pZCkpOwotX1BST1RPVFlQKGludCB3YXJ0LCh2b2lkKSk7Ci1fUFJPVE9UWVAoc3RhdGljIGlu dCBzZ2V0aW5pdCwoaW50LGludCkpOwotX1BST1RPVFlQKGludCBzbmRzcGFjZSwoaW50KSk7Ci0K LS8qIEV4dGVybmFsIEMtS2VybWl0IHZhcmlhYmxlIGRlY2xhcmF0aW9ucyAqLwotICBleHRlcm4g Y2hhciAqdmVyc2lvLCAqc3J2dHh0LCAqY21hcmcsICpjbWFyZzIsICoqY21saXN0LCAqcmZfZXJy OwotICBleHRlcm4gY2hhciAqIHJmc3BlYywgKiBzZnNwZWMsICogc3Jmc3BlYywgKiBycmZzcGVj OwotICBleHRlcm4gY2hhciAqIHByZnNwZWMsICogcHNmc3BlYywgKiBwc3Jmc3BlYywgKiBwcnJm c3BlYzsKLSAgZXh0ZXJuIGNoYXIgKmNkbXNnZmlsZVtdOwotICBleHRlcm4gY2hhciAqIHNuZF9t b3ZlLCAqIHNuZF9yZW5hbWUsICogc3JpbXNnOwotICBleHRlcm4gY2hhciBmaWxuYW1bXSwgb2Zp bG5hbVtdLCBmc3BlY1tdLCB0dG5hbWVbXSwgb2ZuMVtdOwotICBleHRlcm4gQ0hBUiBzc3RhdGUs ICpzcnZwdHIsICpkYXRhOwotICBleHRlcm4gaW50IHRpbWludCwgcnRpbW8sIG5maWxzLCBoY2Zs ZywgeGZsZywgZmxvdywgbWRtdHlwLCBuZXR3b3JrOwotICBleHRlcm4gaW50IG9vcHRzLCBvbW9k ZSwgb25hbWUsIG9wYXRoLCBub3B1c2gsIGlzZ3Vlc3QsIHhjbWRzcmMsIHJjZGFjdGl2ZTsKLSAg ZXh0ZXJuIGludCByZWplY3Rpb24sIG1vdmluZywgZm5jYWN0LCBieWVfYWN0aXZlLCB1cnNlcnZl ciwgZmF0YWxpbzsKLSAgZXh0ZXJuIGludCBwcm90b2NvbCwgcHJlZml4aW5nLCBmaWxjbnQsIGNh cnJpZXIsIGZuc3BhdGgsIGludGVycnVwdGVkOwotICBleHRlcm4gaW50IHJlY3Vyc2l2ZSwgaW5z ZXJ2ZXIsIG56eG9wdHMsIGlkbGV0bW8sIHNydmlkbCwgeGZyaW50OwotICBleHRlcm4gc3RydWN0 IGNrX3AgcHRhYltdOwotICBleHRlcm4gaW50IHJlbWZpbGUsIHJlbXBpcGUsIHhmZXJzdGF0LCBm aWxlc3RhdHVzLCB3ZWFyZWFsaWtlLCBmYWNrcGF0aDsKLSAgZXh0ZXJuIGludCBwYXR0ZXJucywg ZmlsZXBlZWssIGduZmVycm9yOwotICBleHRlcm4gY2hhciAqIHJlbWRlc3Q7Ci0KLSNpZmRlZiBQ S1RaRVJPSEFDSwotI2RlZmluZSBQS1RaRVJPTEVOIDMyCi1zdGF0aWMgY2hhciBpcGt0YWNrW1BL VFpFUk9MRU5dOwotc3RhdGljIGludCBpcGt0bGVuID0gMDsKLSNlbmRpZiAvKiBQS1RaRVJPSEFD SyAqLwotCi1zdGF0aWMgaW50IHNfdGltaW50ID0gLTE7CQkvKiBGb3Igc2F2aW5nIHRpbWVvdXQg dmFsdWUgKi8KLXN0YXRpYyBpbnQgbXlqb2IgPSAwOwotc3RhdGljIGludCBoYXZlZnMgPSAwOwot I2lmZGVmIENLX0xPR0lOCi1zdGF0aWMgaW50IGxvZ3RyaWVzID0gMDsKLSNlbmRpZiAvKiBDS19M T0dJTiAqLwotCi1zdGF0aWMgaW50IGNhbmNlbCA9IDA7Ci1pbnQgZmFja2J1ZyA9IDA7Ci0KLSNp ZmRlZiBTVFJFQU1JTkcKLWV4dGVybiBpbnQgc3RyZWFtaW5nLCBzdHJlYW1vazsKLQotc3RhdGlj IFZPSUQKLXN0cmVhbW9uKCkgewotICAgIGlmIChzdHJlYW1vaykgewotCWRlYnVnKEYxMDAsInN0 cmVhbW9uIiwiIiwwKTsKLQlzdHJlYW1pbmcgPSAxOwotCXRpbWludCA9IDA7CQkJLyogTm8gdGlt ZW91dHMgd2hpbGUgc3RyZWFtaW5nLiAqLwotICAgIH0KLX0KLQotI2lmZGVmIENPTU1FTlQJCQkJ LyogKG5vdCB1c2VkKSAqLwotc3RhdGljIFZPSUQKLXN0cmVhbW9mZigpIHsKLSAgICBpZiAoc3Ry ZWFtaW5nKSB7Ci0JZGVidWcoRjEwMCwic3RyZWFtb2ZmIiwiIiwwKTsKLQlzdHJlYW1pbmcgPSAw OwotCXRpbWludCA9IHNfdGltaW50OwkJLyogUmVzdG9yZSB0aW1lb3V0ICovCi0gICAgfQotfQot I2VuZGlmIC8qIENPTU1FTlQgKi8KLSNlbHNlIC8qIFNUUkVBTUlORyAqLwotI2RlZmluZSBzdHJl YW1vbigpCi0jZGVmaW5lIHN0cmVhbW9mZigpCi0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0KLSNp Zm5kZWYgTk9TUEwKLV9QUk9UT1RZUCggaW50IGFkZG1hYywgKGNoYXIgKiwgY2hhciAqKSApOwot X1BST1RPVFlQKCBpbnQgenpzdHJpbmcsIChjaGFyICosIGNoYXIgKiosIGludCAqKSApOwotI2Vu ZGlmIC8qIE5PU1BMICovCi0jaWZuZGVmIE5PSUNQCi1fUFJPVE9UWVAoIGludCBjbWRzcmMsICh2 b2lkKSApOwotI2VuZGlmIC8qIE5PSUNQICovCi0KLSNpZm5kZWYgTk9TRVJWRVIKLSAgZXh0ZXJu IGNoYXIgKiB4X3VzZXIsICogeF9wYXNzd2QsICogeF9hY2N0OwotICBleHRlcm4gaW50IHhfbG9n aW4sIHhfbG9nZ2VkOwotI2VuZGlmIC8qIE5PU0VSVkVSICovCi0KLSNpbmNsdWRlICJja2NuZXQu aCIKLQotI2lmZGVmIFROQ09ERQotICBleHRlcm4gaW50IHR0bnByb3RvOwkJCS8qIE5ldHdvcmsg cHJvdG9jb2wgKi8KLSNlbmRpZiAvKiBUTkNPREUgKi8KLQotI2lmZGVmIENLX1NQRUVECi0gIGV4 dGVybiBzaG9ydCBjdGxwW107CQkJLyogQ29udHJvbC1jaGFyYWN0ZXIgcHJlZml4IHRhYmxlICov Ci0jZW5kaWYgLyogQ0tfU1BFRUQgKi8KLQotI2lmZGVmIFROQ09ERQotICBleHRlcm4gaW50IHRu X2JfbmxtLCB0bl9iX3hmZXIsIHRuX25sbTsKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gIGV4dGVy biBpbnQgdG5fbm9fZW5jcnlwdF94ZmVyOwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNl bmRpZiAvKiBUTkNPREUgKi8KLQotI2lmZGVmIFRDUFNPQ0tFVAotI2lmbmRlZiBOT0xJU1RFTgot ICBleHRlcm4gaW50IHRjcHNyZmQ7Ci0jZW5kaWYgLyogTk9MSVNURU4gKi8KLSNlbmRpZiAvKiBU Q1BTT0NLRVQgKi8KLQotICBleHRlcm4gaW50IGN4c2VlbiwgY3pzZWVuLCBzZXJ2ZXIsIHNydmRp cywgbG9jYWwsIGRpc3BsYSwgYmN0dSwgYmN0ciwgYmN0bDsKLSAgZXh0ZXJuIGludCBiY3RmOwot ICBleHRlcm4gaW50IHF1aWV0LCB0c2VjcywgcGFyaXR5LCBiYWNrZ3JkLCBuYWtzdGF0ZSwgYXRj YXB1LCB3c2xvdG4sIHdpbmxvOwotICBleHRlcm4gaW50IHdzbG90cywgc3VjY2VzcywgeGl0c3Rh LCBycHJpbnRmLCBkaXNjYXJkLCBjZHRpbW8sIGtlZXAsIGZkaXNwbGE7Ci0gIGV4dGVybiBpbnQg dGltZWYsIHN0ZGluZiwgcnNjYXB1LCBzZW5kbW9kZSwgZXBrdGZsZywgZXBrdHJjdmQsIGVwa3Rz ZW50OwotICBleHRlcm4gaW50IGJpbmFyeSwgZm5jbnY7Ci0gIGV4dGVybiBsb25nIHNwZWVkLCBm ZmMsIGNyYzE2LCBjYWxpYnJhdGUsIGRlc3Q7Ci0jaWZkZWYgQ09NTUVOVAotICBleHRlcm4gY2hh ciAqVFlQQ01ELCAqRElSQ01ELCAqRElSQ00yOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNpZm5k ZWYgT1MyCi0gIGV4dGVybiBjaGFyICpTUEFDTUQsICpTUEFDTTIsICpXSE9DTUQ7Ci0jZW5kaWYg LyogT1MyICovCi0gIGV4dGVybiBDSEFSICpyZGF0YXA7Ci0gIGV4dGVybiBzdHJ1Y3QgemF0dHIg aWF0dHI7Ci0KLSNpZmRlZiBWTVMKLSAgZXh0ZXJuIGludCBiYXRjaDsKLSNlbmRpZiAvKiBWTVMg Ki8KLQotI2lmZGVmIEdGVElNRVIKLSAgZXh0ZXJuIENLRkxPQVQgZnB0c2VjczsKLSNlbmRpZiAv KiBHRlRJTUVSICovCi0KLSAgZXh0ZXJuIENIQVIgKnNydmNtZDsKLSAgZXh0ZXJuIENIQVIgKmVw a3Rtc2c7Ci0KLSNpZmRlZiBDS19UTVBESVIKLWV4dGVybiBpbnQgZl90bXBkaXI7CQkJLyogRGly ZWN0b3J5IGNoYW5nZWQgdGVtcG9yYXJpbHkgKi8KLWV4dGVybiBjaGFyIHNhdmRpcltdOwkJCS8q IEZvciBzYXZpbmcgY3VycmVudCBkaXJlY3RvcnkgKi8KLWV4dGVybiBjaGFyICogZGxkaXI7Ci0j ZW5kaWYgLyogQ0tfVE1QRElSICovCi0KLSAgZXh0ZXJuIGludCBxdWVyeTsJCQkvKiBRdWVyeS1h Y3RpdmUgZmxhZyAqLwotI2lmbmRlZiBOT1NQTAotICBleHRlcm4gaW50IGNtZGx2bDsKLSAgY2hh ciBxdWVyeWJ1ZltRQlVGTCsxXSA9IHsgTlVMLCBOVUwgfTsgLyogUVVFUlkgcmVzcG9uc2UgYnVm ZmVyICovCi0gIGNoYXIgKnFidWZwID0gcXVlcnlidWY7CQkvKiBQb2ludGVyIHRvIGl0ICovCi0g IGludCBxYnVmbiA9IDA7CQkJLyogTGVuZ3RoIG9mIGRhdGEgaW4gaXQgKi8KLSNlbHNlCi0gIGV4 dGVybiBpbnQgdGxldmVsOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5kZWYgTk9JQ1AKLSAg ZXh0ZXJuIGludCBlc2NhcGU7Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLS8qCi0gIElmIHRoZSBmb2xs b3dpbmcgZmxhZyBpcyBub256ZXJvIHdoZW4gdGhlIHByb3RvY29sIG1vZHVsZSBpcyBlbnRlcmVk LAotICB0aGVuIHNlcnZlciBtb2RlIHBlcnNpc3RzIGZvciBleGFjdGx5IG9uZSB0cmFuc2FjdGlv biwgcmF0aGVyIHRoYW4KLSAgbG9vcGluZyB1bnRpbCBCWUUgb3IgRklOSVNIIGlzIHJlY2VpdmVk LgotKi8KLWV4dGVybiBpbnQganVzdG9uZTsKLQotc3RhdGljIGludCByX3NhdmUgPSAtMTsKLXN0 YXRpYyBpbnQgcF9zYXZlID0gLTE7Ci0KLS8qIEZ1bmN0aW9uIHRvIGxldCByZW1vdGUtbW9kZSB1 c2VyIGtub3cgd2hlcmUgdGhlaXIgZmlsZShzKSB3ZW50ICovCi0KLWludCB3aGVyZWZsZyA9IDE7 CQkJLyogVW5zZXQgd2l0aCBTRVQgWEZFUiBSRVBPUlQgKi8KLQotc3RhdGljIFZPSUQKLXdoZXJl bXNnKCkgewotICAgIGV4dGVybiBpbnQgcXVpZXQsIGZpbHJlajsKLSAgICBpbnQgbjsKLSAgICBu ID0gZmlsY250IC0gZmlscmVqOwotICAgIGRlYnVnKEYxMDEsIndoZXJlbXNnIG4iLCIiLG4pOwot Ci0gICAgZGVidWcoRjExMCwid2hlcmVtc2cgcHJmc3BlYyIscHJmc3BlYywwKTsKLSAgICBkZWJ1 ZyhGMTEwLCJ3aGVyZW1zZyByZnNwZWMiLHJmc3BlYywwKTsKLSAgICBkZWJ1ZyhGMTEwLCJ3aGVy ZW1zZyBwc2ZzcGVjIixwc2ZzcGVjLDApOwotICAgIGRlYnVnKEYxMTAsIndoZXJlbXNnIHNmc3Bl YyIsc2ZzcGVjLDApOwotCi0gICAgZGVidWcoRjExMCwid2hlcmVtc2cgcHJyZnNwZWMiLHBycmZz cGVjLDApOwotICAgIGRlYnVnKEYxMTAsIndoZXJlbXNnIHJyZnNwZWMiLHJyZnNwZWMsMCk7Ci0g ICAgZGVidWcoRjExMCwid2hlcmVtc2cgcHNyZnNwZWMiLHBzcmZzcGVjLDApOwotICAgIGRlYnVn KEYxMTAsIndoZXJlbXNnIHNyZnNwZWMiLHNyZnNwZWMsMCk7Ci0KLSAgICBpZiAoIXF1aWV0ICYm ICFsb2NhbCkgewotCWlmIChuID09IDEpIHsKLQkgICAgc3dpdGNoIChteWpvYikgewotCSAgICAg IGNhc2UgJ3MnOgotCQlpZiAoc2ZzcGVjKSB7Ci0JCSAgICBwcmludGYoIiBTRU5UOiBbJXNdIixz ZnNwZWMpOwotCQkgICAgaWYgKHNyZnNwZWMpCi0JCSAgICAgIHByaW50ZigiIFRvOiBbJXNdIixz cmZzcGVjKTsKLQkJICAgIHByaW50ZigiICglcylcclxuIiwgc3VjY2VzcyA/ICJPSyIgOiAiRkFJ TEVEIik7Ci0JCX0KLQkJYnJlYWs7Ci0JICAgICAgY2FzZSAncic6Ci0JICAgICAgY2FzZSAndic6 Ci0JCWlmIChycmZzcGVjKSB7Ci0JCSAgICBwcmludGYoIiBSQ1ZEOiBbJXNdIixycmZzcGVjKTsK LQkJICAgIGlmIChyZnNwZWMpCi0JCSAgICAgIHByaW50ZigiIFRvOiBbJXNdIixyZnNwZWMpOwot CQkgICAgcHJpbnRmKCIgKCVzKVxyXG4iLCBzdWNjZXNzID8gIk9LIiA6ICJGQUlMRUQiKTsKLQkJ fQotCSAgICB9Ci0JfSBlbHNlIGlmIChuID4gMSkgewotCSAgICBzd2l0Y2ggKG15am9iKSB7Ci0J ICAgICAgY2FzZSAncyc6Ci0JCWlmIChzZnNwZWMpIHsKLQkJICAgIHByaW50ZigiIFNFTlQ6ICgl ZCBmaWxlcykiLG4pOwotCQkgICAgaWYgKHNyZnNwZWMpCi0JCSAgICAgIHByaW50ZigiIExhc3Q6 IFslc10iLHNyZnNwZWMpOwotCQkgICAgcHJpbnRmKCIgKCVzKVxyXG4iLCBzdWNjZXNzID8gIk9L IiA6ICJGQUlMRUQiKTsKLQkJfQotCQlicmVhazsKLQkgICAgICBjYXNlICdyJzoKLQkgICAgICBj YXNlICd2JzoKLQkJaWYgKHJyZnNwZWMpIHsKLQkJICAgIHByaW50ZigiIFJDVkQ6ICglZCBmaWxl cykiLG4pOwotCQkgICAgaWYgKHJmc3BlYykKLQkJICAgICAgcHJpbnRmKCIgTGFzdDogWyVzXSIs cmZzcGVjKTsKLQkJICAgIHByaW50ZigiICglcylcclxuIiwgc3VjY2VzcyA/ICJPSyIgOiAiRkFJ TEVEIik7Ci0JCX0KLQkgICAgfQotCX0gZWxzZSBpZiAobiA9PSAwKSB7Ci0JICAgIGlmIChteWpv YiA9PSAncycpCi0JICAgICAgcHJpbnRmKCIgU0VOVDogKDAgZmlsZXMpICAgICAgICAgIFxyXG4i KTsKLQkgICAgZWxzZSBpZiAobXlqb2IgPT0gJ3InIHx8IG15am9iID09ICd2JykKLQkgICAgICBw cmludGYoIiBSQ1ZEOiAoMCBmaWxlcykgICAgICAgICAgXHJcbiIpOwotCX0KLSAgICB9Ci19Ci0K LXN0YXRpYyBWT0lECi1yZGVidWcoKSB7Ci0gICAgaWYgKHNlcnZlcikKLSAgICAgIGRlYnVnKEYx MTEsIlJFU1VNRSIsInNlcnZlcj0xIixqdXN0b25lKTsKLSAgICBlbHNlCi0gICAgICBkZWJ1ZyhG MTExLCJSRVNVTUUiLCJzZXJ2ZXI9MCIsanVzdG9uZSk7Ci19Ci0KLS8qIEZsYWdzIGZvciB0aGUg RU5BQkxFIGFuZCBESVNBQkxFIGNvbW1hbmRzICovCi1leHRlcm4gaW50Ci0gIGVuX2NweSwgZW5f Y3dkLCBlbl9kZWwsIGVuX2RpciwgZW5fZmluLCBlbl9nZXQsIGVuX2J5ZSwgZW5fbWFpLCBlbl9w cmksCi0gIGVuX2hvcywgZW5fcmVuLCBlbl9zZW4sIGVuX3NwYSwgZW5fc2V0LCBlbl90eXAsIGVu X3dobywgZW5fcmV0LCBlbl94aXQsCi0gIGVuX21rZCwgZW5fcm1kOwotI2lmbmRlZiBOT1NQTAot ZXh0ZXJuIGludCBlbl9hc2csIGVuX3F1ZTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotZXh0ZXJuIGlu dCB3aGF0LCBsYXN0eGZlcjsKLQotLyogR2xvYmFsIHZhcmlhYmxlcyBkZWNsYXJlZCBoZXJlICov Ci0KLSAgaW50IHdoYXRydSA9IDA7CQkJLyogV2hhdCBhcmUgeW91LiAqLwotICBpbnQgd2hhdHJ1 MiA9IDA7CQkJLyogV2hhdCBhcmUgeW91LCBjb250J2QuICovCi0KLS8qIExvY2FsIHZhcmlhYmxl cyAqLwotCi0gIHN0YXRpYyBjaGFyIHZzdGF0ZSA9IDA7ICAJCS8qIFNhdmVkIFN0YXRlICAgKi8K LSAgc3RhdGljIGNoYXIgdmNtZCA9IDA7ICAgIAkJLyogU2F2ZWQgQ29tbWFuZCAqLwotICBzdGF0 aWMgaW50IHJlZ2V0ID0gMDsJCQkvKiBGbGFnIGZvciBleGVjdXRpbmcgUkVHRVQgKi8KLSAgc3Rh dGljIGludCByZXRyaWV2ZSA9IDA7CQkvKiBGbGFnIGZvciBleGVjdXRpbmcgUkVUUklFVkUgKi8K LSAgc3RhdGljIGludCBvcGt0ID0gMDsJCQkvKiBTZW5kIEV4dGVuZGVkIEdFVCBwYWNrZXQgKi8K LQotICBzdGF0aWMgaW50IHg7CQkJCS8qIEdlbmVyYWwtcHVycG9zZSBpbnRlZ2VyICovCi0gIHN0 YXRpYyBjaGFyICpzOwkJCS8qIEdlbmVyYWwtcHVycG9zZSBzdHJpbmcgcG9pbnRlciAqLwotCi0v KiBNYWNyb3MgLSBOb3RlLCBCRUdJTiBpcyBwcmVkZWZpbmVkIGJ5IFdhcnQgKGFuZCBMZXgpIGFz ICJzdGF0ZSA9ICIsICovCi0vKiBCRUdJTiBpcyBOT1QgYSBHT1RPISAqLwotI2RlZmluZSBUSU5J VCBpZiAodGluaXQoMSkgPCAwKSByZXR1cm4oLTkpCi0jZGVmaW5lIFNFUlZFIHsgVElOSVQ7IHJl c2V0YygpOyBuYWtzdGF0ZT0xOyB3aGF0PVdfTk9USElORzsgY21hcmcyPSIiOyBcCi1zZW5kbW9k ZT1TTV9TRU5EOyBoYXZlZnM9MDsgcmVjdXJzaXZlPXJfc2F2ZTsgZm5zcGF0aD1wX3NhdmU7IEJF R0lOIHNlcnZlOyB9Ci0jZGVmaW5lIFJFU1VNRSB7IHJkZWJ1ZygpOyBpZiAoIXNlcnZlcikgeyB3 aGVyZW1zZygpOyByZXR1cm4oMCk7IH0gZWxzZSBcCi1pZiAoanVzdG9uZSkgeyBqdXN0b25lPTA7 IHdoZXJlbXNnKCk7IHJldHVybigwKTsgfSBlbHNlIHsgU0VSVkU7IH0gfQotCi0jaWZkZWYgR0ZU SU1FUgotI2RlZmluZSBRVUlUIHg9cXVpZXQ7IHF1aWV0PTE7IGNsc2lmKCk7IGNsc29mKDEpOyB0 c2Vjcz1ndGltZXIoKTsgXAotIGZwdHNlY3M9Z2Z0aW1lcigpOyBxdWlldD14OyByZXR1cm4oc3Vj Y2VzcykKLSNlbHNlCi0jZGVmaW5lIFFVSVQgeD1xdWlldDsgcXVpZXQ9MTsgY2xzaWYoKTsgY2xz b2YoMSk7IHRzZWNzPWd0aW1lcigpOyBxdWlldD14OyBcCi0gcmV0dXJuKHN1Y2Nlc3MpCi0jZW5k aWYgLyogR0ZUSU1FUiAqLwotCi0vKgotICBCeSBsYXRlIDE5OTksIHRoZSBiaWcgc3dpdGNoKCkg c3RhdGVtZW50IGdlbmVyYXRlZCBmcm9tIHRoZSBmb2xsb3dpbmcgc3RhdGUKLSAgdGFibGUgYmVn YW4gY2hva2luZyBldmVuIGdjYywgc28gaGVyZSB3ZSBleHRyYWN0IHRoZSBjb2RlIGZyb20gdGhl IGxhcmdlcgotICBzdGF0ZXMgaW50byBzdGF0aWMgcm91dGluZXMgdG8gcmVkdWNlIHRoZSBzaXpl IG9mIHRoZSBjYXNlcyBhbmQgdGhlCi0gIHN3aXRjaCgpIG92ZXJhbGwuICBUaGUgcm91dGluZXMg Zm9sbG93IHRoZSBzdGF0ZSB0YWJsZTsgdGhlIHByb3RvdHlwZXMgYXJlCi0gIGhlcmUuICBFYWNo IG9mIHRoZXNlIHJvdXRpbmVzIHNpbXBseSBjb250YWlucyB0aGUgdGV4dCBmcm9tIHRoZQotICBj b3JyZXNwb25kaW5nIGNhc2UsIGJ1dCB3aXRoIHJldHVybigtMSkgYWRkZWQgaW4gYXBwcm9wcmlh dGUgcGxhY2VzOyBzZWUKLSAgaW5zdHJ1Y3Rpb25zIGFmdGVyIHRoZSBzdGF0ZSB0YWJsZSBzd2l0 Y2hlci4KLSovCi1zdGF0aWMgaW50IHJjOwkJCQkvKiBSZXR1cm4gY29kZSBmb3IgdGhlc2Ugcm91 dGluZXMgKi8KLXN0YXRpYyBpbnQgcmN2X3NfcGt0KCk7CQkJLyogUmVjZWl2ZWQgYW4gUyBwYWNr ZXQgKi8KLXN0YXRpYyBpbnQgcmN2X2ZpcnN0ZGF0YSgpOwkJLyogUmVjZWl2ZWQgZmlyc3QgRGF0 YSBwYWNrZXQgKi8KLXN0YXRpYyBpbnQgcmN2X3Nob3J0cmVwbHkoKTsJCS8qIFNob3J0IHJlcGx5 IHRvIGEgUkVNT1RFIGNvbW1hbmQgICovCi1zdGF0aWMgaW50IHNydl9xdWVyeSgpOwkJCS8qIFNl cnZlciBhbnN3ZXJzIGFuIHF1ZXJ5ICovCi1zdGF0aWMgaW50IHNydl9jb3B5KCk7CQkJLyogU2Vy dmVyIGV4ZWN1dGVzIFJFTU9URSBDT1BZICovCi1zdGF0aWMgaW50IHNydl9yZW5hbWUoKTsJCS8q IFNlcnZlciBleGVjdXRlcyBSRU1PVEUgUkVOQU1FICovCi1zdGF0aWMgaW50IHNydl9sb2dpbigp OwkJCS8qIFNlcnZlciBleGVjdXRlcyBSRU1PVEUgTE9HSU4gKi8KLXN0YXRpYyBpbnQgc3J2X3Rp bWVvdXQoKTsJCS8qIFNlcnZlciB0aW1lcyBvdXQgKi8KLQotJSUKLQotLyoKLSAgUHJvdG9jb2wg ZW50cnkgcG9pbnRzLCBvbmUgZm9yIGVhY2ggc3RhcnQgc3RhdGUgKHNzdGF0ZSkuCi0gIFRoZSBs b3dlcmNhc2UgbGV0dGVycyBhcmUgaW50ZXJuYWwgImlucHV0cyIgZnJvbSB0aGUgdXNlciBpbnRl cmZhY2UuCi0gIE5PVEU6IFRoZSBzdGFydCBzdGF0ZSBsZXR0ZXJzIHRoYXQgYXBwZWFyIG9uIHRo ZSBsZWZ0IG1hcmdpbiBpbW1lZGlhdGVseQotICBiZWxvdyBjYW4gTk9UIGJlIHVzZWQgYXMgcGFj a2V0IHR5cGVzIE9SIGFzIEctcGFja2V0IHN1YmNvZGVzLgotKi8KLQotcyB7IFRJTklUOwkJCQkv KiBTZW5kIGZpbGUocykgKi8KLSAgICBpZiAoc2luaXQoKSA+IDApIEJFR0lOIHNzaW5pdDsKLSAg ICAgICBlbHNlIFJFU1VNRTsgfQotCi12IHsgVElOSVQ7IG5ha3N0YXRlID0gMTsgQkVHSU4gZ2V0 OyB9CS8qIFJlY2VpdmUgZmlsZShzKSAqLwotCi1yIHsJCQkJCS8qIENsaWVudCBzZW5kcyBhIEdF VCBjb21tYW5kICovCi0gICAgVElOSVQ7Ci0gICAgdnN0YXRlID0gZ2V0OwotICAgIHJlZ2V0ID0g MDsKLSAgICByZXRyaWV2ZSA9IDA7Ci0gICAgb3BrdCA9IDA7Ci0gICAgdmNtZCA9IDA7Ci0jaWZk ZWYgUEtUWkVST0hBQ0sKLSAgICBpcGt0YWNrWzBdID0gTlVMOwotI2VuZGlmIC8qIFBLVFpFUk9I QUNLICovCi0gICAgaWYgKHNpcGt0KCdJJykgPj0gMCkKLSAgICAgIEJFR0lOIGlwa3Q7Ci0gICAg ZWxzZQotICAgICAgUkVTVU1FOwotfQotCi1oIHsJCQkJCS8qIENsaWVudCBzZW5kcyBhIFJFVFJJ RVZFIGNvbW1hbmQgKi8KLSAgICBUSU5JVDsKLSAgICB2c3RhdGUgPSBnZXQ7Ci0gICAgcmVnZXQg PSAwOwotICAgIHJldHJpZXZlID0gMTsKLSAgICBvcGt0ID0gMDsKLSAgICB2Y21kID0gMDsKLSAg ICBpZiAoc2lwa3QoJ0knKSA+PSAwKQotICAgICAgQkVHSU4gaXBrdDsKLSAgICBlbHNlCi0gICAg ICBSRVNVTUU7Ci19Ci1qIHsJCQkJCS8qIENsaWVudCBzZW5kcyBhIFJFR0VUIGNvbW1hbmQgKi8K LSAgICBUSU5JVDsKLSAgICB2c3RhdGUgPSBnZXQ7Ci0gICAgcmVnZXQgPSAxOwotICAgIHJldHJp ZXZlID0gMDsKLSAgICBvcGt0ID0gMDsKLSAgICB2Y21kID0gMDsKLSAgICBpZiAoc2lwa3QoJ0kn KSA+PSAwKQotICAgICAgQkVHSU4gaXBrdDsKLSAgICBlbHNlCi0gICAgICBSRVNVTUU7Ci19Ci1v IHsJCQkJCS8qIENsaWVudCBzZW5kcyBFeHRlbmRlZCBHRVQgUGFja2V0ICovCi0gICAgVElOSVQ7 Ci0gICAgdnN0YXRlID0gZ2V0OwotICAgIHJlZ2V0ID0gb29wdHMgJiBHT1BUX1JFUzsKLSAgICBy ZXRyaWV2ZSA9IG9vcHRzICYgR09QVF9ERUw7Ci0gICAgb3BrdCA9IDE7Ci0gICAgdmNtZCA9IDA7 Ci0gICAgaWYgKHNpcGt0KCdJJykgPj0gMCkKLSAgICAgIEJFR0lOIGlwa3Q7Ci0gICAgZWxzZQot ICAgICAgUkVTVU1FOwotfQotYyB7CQkJCQkvKiBDbGllbnQgc2VuZHMgYSBIb3N0IGNvbW1hbmQg Ki8KLSAgICBUSU5JVDsKLSAgICB2c3RhdGUgPSByZ2VuOwotICAgIHZjbWQgPSAnQyc7Ci0gICAg aWYgKHNpcGt0KCdJJykgPj0gMCkKLSAgICAgIEJFR0lOIGlwa3Q7Ci0gICAgZWxzZQotICAgICAg UkVTVU1FOwotfQotayB7IFRJTklUOwkJCQkvKiBDbGllbnQgc2VuZHMgYSBLZXJtaXQgY29tbWFu ZCAqLwotICAgIHZzdGF0ZSA9IHJnZW47Ci0gICAgdmNtZCA9ICdLJzsKLSAgICBpZiAoc2lwa3Qo J0knKSA+PSAwKQotICAgICAgQkVHSU4gaXBrdDsKLSAgICBlbHNlCi0gICAgICBSRVNVTUU7Ci19 Ci1nIHsJCQkJCS8qIENsaWVudCBzZW5kcyBhIFJFTU9URSBjb21tYW5kICovCi0gICAgVElOSVQ7 Ci0gICAgdnN0YXRlID0gcmdlbjsKLSAgICB2Y21kID0gJ0cnOwotICAgIGlmIChzaXBrdCgnSScp ID49IDApCi0gICAgICBCRUdJTiBpcGt0OwotICAgIGVsc2UKLSAgICAgIFJFU1VNRTsKLX0KLXgg ewkJCQkJLyogRW50ZXIgc2VydmVyIG1vZGUgKi8KLSAgICBpbnQgeDsKLSAgICB4ID0ganVzdG9u ZTsKLSAgICBpZiAoIUVOQUJMRUQoZW5fZGVsKSkgewkJLyogSWYgREVMRVRFIGlzIGRpc2FibGVk ICovCi0JaWYgKGZuY2FjdCA9PSBYWUZYX0IgfHwJCS8qIHVuZG8gYW55IGZpbGUgY29sbGlzaW9u IGFjdGlvbiAqLwotCSAgICBmbmNhY3QgPT0gWFlGWF9VIHx8CQkvKiB0aGF0IGNvdWxkIHJlc3Vs dCBpbiBkZWxldGlvbiBvciAqLwotCSAgICBmbmNhY3QgPT0gWFlGWF9BIHx8CQkvKiBtb2RpZmlj YXRpb24gb2YgZXhpc3RpbmcgZmlsZXMuICovCi0JICAgIGZuY2FjdCA9PSBYWUZYX1gpIHsKLSNp Zm5kZWYgTk9JQ1AKLQkgICAgZXh0ZXJuIGludCBnX2ZuY2FjdDsKLQkgICAgZ19mbmNhY3QgPSBm bmNhY3Q7CQkvKiBTYXZlIGN1cnJlbnQgc2V0dGluZyAqLwotI2VuZGlmIC8qIE5PSUNQICovCi0J ICAgIGZuY2FjdCA9IFhZRlhfUjsJCS8qIENoYW5nZSB0byBSRU5BTUUgKi8KLQkgICAgZGVidWco RjEwMSwic2VydmVyIERFTEVURSBkaXNhYmxlZCBzbyBmbmNhY3QgUkVOQU1FIiwiIixmbmNhY3Qp OwotCX0KLSAgICB9Ci0gICAgU0VSVkU7CQkJCS8qIHRpbml0KCkgY2xlYXJzIGp1c3RvbmUuLi4g Ki8KLSAgICBqdXN0b25lID0geDsKLSNpZmRlZiBJS1NEQgotICAgIGlmIChpa2Rib3Blbikgc2xv dHN0YXRlKHdoYXQsICJTRVJWRVIiLCAiIiwgIiIpOwotI2VuZGlmIC8qIElLU0RCICovCi19Ci0K LWEgewotICAgIGludCBiMSA9IDAsIGIyID0gMDsKLSAgICBpZiAoIWRhdGEpIFRJTklUOwkJCS8q ICJBQkVORCIgLS0gVGVsbCBvdGhlciBzaWRlLiAqLwotCi0gICAgaWYgKCFiY3RmKSB7CQkgICAg IC8qIEJsb2NrIGNoZWNrIDMgZm9yY2VkIG9uIGFsbCBwYWNrZXRzICovCi0jaWZuZGVmIHBkcDEx Ci0JaWYgKGVwa3RmbGcpIHsJCQkvKiBJZiBiZWNhdXNlIG9mIEUtUEFDS0VUIGNvbW1hbmQgKi8K LQkgICAgYjEgPSBiY3RsOyBiMiA9IGJjdHU7CS8qIFNhdmUgYmxvY2sgY2hlY2sgdHlwZSAqLwot CSAgICBiY3RsID0gYmN0dSA9IDE7CQkvKiBzZXQgaXQgdG8gMSAqLwotCX0KLSNlbmRpZiAvKiBw ZHAxMSAqLwotICAgIH0KLSAgICBlcnJwa3QoKENIQVIgKikiVXNlciBjYW5jZWxsZWQiKTsJLyog U2VuZCB0aGUgcGFja2V0ICovCi0gICAgaWYgKCFiY3RmKSB7CQkgICAgIC8qIEJsb2NrIGNoZWNr IDMgZm9yY2VkIG9uIGFsbCBwYWNrZXRzICovCi0jaWZuZGVmIHBkcDExCi0JaWYgKGVwa3RmbGcp IHsJCQkvKiBSZXN0b3JlIHRoZSBibG9jayBjaGVjayAqLwotCSAgICBlcGt0ZmxnID0gMDsKLQkg ICAgYmN0bCA9IGIxOyBiY3R1ID0gYjI7Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBwZHAxMSAqLwot ICAgIHN1Y2Nlc3MgPSAwOwotICAgIHJldHVybigwKTsJCQkJLyogUmV0dXJuIGZyb20gcHJvdG9j b2wuICovCi19Ci0KLS8qCi0gIER5bmFtaWMgc3RhdGVzOiA8Y3VycmVudC1zdGF0ZXM+aW5wdXQt Y2hhcmFjdGVyIHsgYWN0aW9uIH0KLSAgbmFrc3RhdGUgIT0gMCBtZWFucyB3ZSdyZSBpbiBhIHJl Y2VpdmluZyBzdGF0ZSwgaW4gd2hpY2ggd2Ugc2VuZCBBQ0tzICYgTkFLcy4KLSovCi0KLTxyZ2Vu LGdldCxzZXJ2ZSxyb3BrdD5TIHsJCS8qIFJlY2VpdmUgU2VuZC1Jbml0IHBhY2tldC4gKi8KLSAg ICByYyA9IHJjdl9zX3BrdCgpOwotICAgIGNhbmNlbCA9IDA7CQkJCS8qIFJlc2V0IGNhbmNlbGxh dGlvbiBjb3VudGVyICovCi0gICAgZGVidWcoRjEwMSwicmN2X3NfcGt0IiwiIixyYyk7Ci0gICAg aWYgKHJjID4gLTEpIHJldHVybihyYyk7CQkvKiAoc2VlIGJlbG93KSAqLwotfQotCi0vKiBTdGF0 ZXMgaW4gd2hpY2ggd2UgZ2V0IHJlcGxpZXMgYmFjayBmcm9tIGNvbW1hbmRzIHNlbnQgdG8gYSBz ZXJ2ZXIuICovCi0vKiBDb21wbGljYXRlZCBiZWNhdXNlIGRpcmVjdGlvbiBvZiBwcm90b2NvbCBj aGFuZ2VzLCBwYWNrZXQgbnVtYmVyICAgICovCi0vKiBzdGF5cyBhdCB6ZXJvIHRocm91Z2ggSS1H LVMgc2VxdWVuY2UsIGFuZCBjb21wbGljYXRlZCBldmVuIG1vcmUgYnkgICovCi0vKiBzbGlkaW5n IHdpbmRvd3MgYnVmZmVyIGFsbG9jYXRpb24uICovCi0KLTxpcGt0PlkgewkJCQkvKiBHZXQgYWNr IGZvciBJLXBhY2tldCAqLwotICAgIGludCB4ID0gMDsKLSNpZmRlZiBQS1RaRVJPSEFDSwotICAg IGNrc3RybmNweShpcGt0YWNrLChjaGFyICopcmRhdGFwLFBLVFpFUk9MRU4pOyAvKiBTYXZlIGEg Y29weSBvZiB0aGUgQUNLICovCi0gICAgaXBrdGxlbiA9IHN0cmxlbihpcGt0YWNrKTsKLSNlbmRp ZiAvKiBQS1RaRVJPSEFDSyAqLwotICAgIHNwYXIocmRhdGFwKTsJCQkvKiBTZXQgcGFyYW1ldGVy cyAqLwotICAgIGNhbmNlbCA9IDA7Ci0gICAgd2lubG8gPSAwOwkJCQkvKiBTZXQgd2luZG93LWxv dyBiYWNrIHRvIHplcm8gKi8KLSAgICBkZWJ1ZyhGMTAxLCI8aXBrdD5ZIHdpbmxvIiwiIix3aW5s byk7Ci0gICAgdXJzZXJ2ZXIgPSAxOwkJCS8qIFNvIEkga25vdyBJJ20gdGFsa2luZyB0byBhIHNl cnZlciAqLwotICAgIGlmICh2Y21kKSB7CQkJCS8qIElmIHNlbmRpbmcgYSBnZW5lcmljIGNvbW1h bmQgKi8KLQlpZiAodGluaXQoMCkgPCAwKSByZXR1cm4oLTkpOwkvKiBJbml0aWFsaXplIG1hbnkg dGhpbmdzICovCi0JeCA9IHNjbWQodmNtZCwoQ0hBUiAqKWNtYXJnKTsJLyogRG8gdGhhdCAqLwot CWlmICh4ID49IDApIHggPSAwOwkJLyogKGJlY2F1c2Ugb2YgTy1QYWNrZXQpICovCi0JZGVidWco RjEwMSwicHJvdG8gRyBwYWNrZXQgc2NtZCIsIiIseCk7Ci0JdmNtZCA9IDA7CQkJLyogYW5kIHRo ZW4gdW4tcmVtZW1iZXIgaXQuICovCi0gICAgfSBlbHNlIGlmICh2c3RhdGUgPT0gZ2V0KSB7Ci0J ZGVidWcoRjEwMSwiUkVHRVQgc3N0YXRlIiwiIixzc3RhdGUpOwotCXggPSBzcmluaXQocmVnZXQs IHJldHJpZXZlLCBvcGt0KTsgLyogR0VUIG9yIFJFR0VULCBldGMgKi8KLSAgICB9Ci0gICAgaWYg KHggPCAwKSB7CQkJLyogSWYgY29tbWFuZCB3YXMgdG9vIGxvbmcgKi8KLQlpZiAoIXNyaW1zZykK LQkgIHNyaW1zZyA9ICJFcnJvciBzZW5kaW5nIHN0cmluZyI7Ci0JZXJycGt0KChDSEFSICopc3Jp bXNnKTsJCS8qIGNhbmNlbCBib3RoIHNpZGVzLiAqLwotCXN1Y2Nlc3MgPSAwOwotCVJFU1VNRTsK LSAgICB9IGVsc2UgaWYgKHggPiAwKSB7CQkJLyogTmVlZCB0byBzZW5kIG1vcmUgTy1QYWNrZXRz ICovCi0JQkVHSU4gc3NvcGt0OwotICAgIH0gZWxzZSB7Ci0JcnRpbWVyKCk7CQkJLyogUmVzZXQg dGhlIGVsYXBzZWQgc2Vjb25kcyB0aW1lci4gKi8KLSNpZmRlZiBHRlRJTUVSCi0JcmZ0aW1lcigp OwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLQl3aW5sbyA9IDA7CQkJLyogV2luZG93IGJhY2sgdG8g MCwgYWdhaW4uICovCi0JZGVidWcoRjEwMSwiPGlwa3Q+WSB2c3RhdGUiLCIiLHZzdGF0ZSk7Ci0J bmFrc3RhdGUgPSAxOwkJCS8qIENhbiBzZW5kIE5BS3MgZnJvbSBoZXJlLiAqLwotCUJFR0lOIHZz dGF0ZTsJCQkvKiBTd2l0Y2ggdG8gZGVzaXJlZCBzdGF0ZSAqLwotICAgIH0KLX0KLQotPHNzb3Br dD5ZIHsJCQkJLyogR290IEFDSyB0byBPLVBhY2tldCAqLwotICAgIGRlYnVnKEYxMDAsIkNQQ1BS TyA8c3NvcGt0PlkiLCIiLDApOwotICAgIHggPSBzb3BrdCgpOwotICAgIGRlYnVnKEYxMDEsIkNQ Q1BSTyA8c3NvcGt0PlkgeCIsIiIseCk7Ci0gICAgaWYgKHggPCAwKSB7CQkJLyogSWYgZXJyb3Ig Ki8KLQllcnJwa3QoKENIQVIgKilzcmltc2cpOwkJLyogY2FuY2VsIGJvdGggc2lkZXMuICovCi0J c3VjY2VzcyA9IDA7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSBpZiAoeCA9PSAwKSB7CQkvKiBUaGlz IHdhcyB0aGUgbGFzdCBPLVBhY2tldCAqLwotCXJ0aW1lcigpOwkJCS8qIFJlc2V0IHRoZSBlbGFw c2VkIHNlY29uZHMgdGltZXIuICovCi0jaWZkZWYgR0ZUSU1FUgotCXJmdGltZXIoKTsKLSNlbmRp ZiAvKiBHRlRJTUVSICovCi0Jd2lubG8gPSAwOwkJCS8qIFdpbmRvdyBiYWNrIHRvIDAsIGFnYWlu LiAqLwotCWRlYnVnKEYxMDEsIjxzc29wa3Q+WSB3aW5sbyIsIiIsd2lubG8pOwotCW5ha3N0YXRl ID0gMTsJCQkvKiBDYW4gc2VuZCBOQUtzIGZyb20gaGVyZS4gKi8KLQlCRUdJTiB2c3RhdGU7CQkJ LyogU3dpdGNoIHRvIGRlc2lyZWQgc3RhdGUgKi8KLSAgICB9Ci0gICAgZGVidWcoRjEwMSwiQ1BD UFJPIDxzc29wa3Q+WSBub3QgY2hhbmdpbmcgc3RhdGUiLCIiLHgpOwotfQotCi08aXBrdD5FIHsJ CQkJLyogSWdub3JlIEVycm9yIHJlcGx5IHRvIEkgcGFja2V0ICovCi0gICAgaW50IHggPSAwOwot ICAgIHdpbmxvID0gMDsJCQkJLyogU2V0IHdpbmRvdy1sb3cgYmFjayB0byB6ZXJvICovCi0gICAg ZGVidWcoRjEwMSwiPGlwa3Q+RSB3aW5sbyIsIiIsd2lubG8pOwotICAgIGlmICh2Y21kKSB7CQkJ CS8qIEluIGNhc2Ugb3RoZXIgS2VybWl0IGRvZXNuJ3QgKi8KLQlpZiAodGluaXQoMCkgPCAwKSBy ZXR1cm4oLTkpOwotCXggPSBzY21kKHZjbWQsKENIQVIgKiljbWFyZyk7CS8qIHVuZGVyc3RhbmQg SS1wYWNrZXRzLiAqLwotCWlmICh4ID49IDApIHggPSAwOwkJLyogKGJlY2F1c2Ugb2YgTy1QYWNr ZXQpICovCi0JdmNtZCA9IDA7CQkJLyogT3RoZXJ3aXNlIGFjdCBhcyBhYm92ZS4uLiAqLwotICAg IH0gZWxzZSBpZiAodnN0YXRlID09IGdldCkgeCA9IHNyaW5pdChyZWdldCwgcmV0cmlldmUsIG9w a3QpOwotICAgIGlmICh4IDwgMCkgewkJCS8qIElmIGNvbW1hbmQgd2FzIHRvbyBsb25nICovCi0J ZXJycGt0KChDSEFSICopc3JpbXNnKTsJCS8qIGNhbmNlbCBib3RoIHNpZGVzLiAqLwotCXN1Y2Nl c3MgPSAwOwotCVJFU1VNRTsKLSAgICB9IGVsc2UgaWYgKHggPiAwKSB7CQkJLyogTmVlZCB0byBz ZW5kIG1vcmUgTy1QYWNrZXRzICovCi0JQkVHSU4gc3NvcGt0OwotICAgIH0gZWxzZSB7Ci0JZnJl ZXJwa3Qod2lubG8pOwkJLyogRGlzY2FyZCB0aGUgRXJyb3IgcGFja2V0LiAqLwotCWRlYnVnKEYx MDEsIjxpcGt0PkUgd2lubG8iLCIiLHdpbmxvKTsKLQl3aW5sbyA9IDA7CQkJLyogQmFjayB0byBw YWNrZXQgMCBhZ2Fpbi4gKi8KLQluYWtzdGF0ZSA9IDE7CQkJLyogQ2FuIHNlbmQgTkFLcyBmcm9t IGhlcmUuICovCi0JQkVHSU4gdnN0YXRlOwotICAgIH0KLX0KLQotPGdldD5ZIHsJCS8qIFJlc2Vu ZCBvZiBwcmV2aW91cyBJLXBrdCBBQ0ssIHNhbWUgc2VxIG51bWJlciAqLwotICAgIGZyZWVycGt0 KDApOwkJCS8qIEZyZWUgdGhlIEFDSydzIHJlY2VpdmUgYnVmZmVyICovCi0gICAgcmVzZW5kKDAp OwkJCQkvKiBTZW5kIHRoZSBHRVQgcGFja2V0IGFnYWluLiAqLwotfQotCi0vKiBTdGF0ZXMgaW4g d2hpY2ggd2UncmUgYmVpbmcgYSBzZXJ2ZXIgKi8KLQotPHNlcnZlLGdldD5JIHsJCQkJLyogR2V0 IEktcGFja2V0ICovCi0jaWZuZGVmIE5PU0VSVkVSCi0gICAgc3BhcihyZGF0YXApOwkJCS8qIFNl dCBwYXJhbWV0ZXJzIGZyb20gaXQgKi8KLSAgICBhY2sxKHJwYXIoKSk7CQkJLyogUmVzcG9uZCB3 aXRoIG91ciBvd24gcGFyYW1ldGVycyAqLwotI2lmZGVmIENPTU1FTlQKLSAgICBwa3Rpbml0KCk7 CQkJCS8qIFJlaW5pdGlhbGl6ZSBwYWNrZXQgbnVtYmVycyAqLwotI2Vsc2UKLSNpZmRlZiBDT01N RU5UCi0gICAgLyogVGhpcyBjYW4ndCBiZSByaWdodCAtIGl0IHVuZG9lcyB0aGUgc3R1ZmYgd2Ug anVzdCBuZWdvdGlhdGVkICovCi0gICAgeCA9IGp1c3RvbmU7Ci0gICAgdGluaXQoMSk7CQkJCS8q IFJlaW5pdGlhbGl6ZSBFVkVSWVRISU5HICovCi0gICAganVzdG9uZSA9IHg7CQkJLyogQnV0IHRo aXMuLi4gKi8KLSNlbHNlCi0gICAgdGluaXQoMCk7CQkJCS8qIEluaXRpYWxpemUgbW9zdCB0aGlu Z3MgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2VuZGlm IC8qIE5PU0VSVkVSICovCi0gICAgY2FuY2VsID0gMDsJCQkJLyogUmVzZXQgY2FuY2VsbGF0aW9u IGNvdW50ZXIgKi8KLX0KLQotPHNlcnZlPlIgewkJCQkvKiBHRVQgKi8KLSNpZm5kZWYgTk9TRVJW RVIKLSAgICBpZiAoeF9sb2dpbiAmJiAheF9sb2dnZWQpIHsKLQllcnJwa3QoKENIQVIgKikiTG9n aW4gcmVxdWlyZWQiKTsKLQlTRVJWRTsKLSAgICB9IGVsc2UgaWYgKHNnZXRpbml0KDAsMCkgPCAw KSB7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSB7Ci0jaWZkZWYgQ0tTWVNMT0cKLQlpZiAoY2t4c3lz bG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCi0JICBja3N5c2xvZyhTWVNMR19QUiwgMSwg InNlcnZlciIsICJHRVQiLCAoY2hhciAqKXNydmNtZCk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8K LQlCRUdJTiBzc2luaXQ7Ci0gICAgfQotI2VuZGlmIC8qIE5PU0VSVkVSICovCi19Ci0KLTxzZXJ2 ZT5IIHsJCQkJLyogR0VUIC9ERUxFVEUgKFJFVFJJRVZFKSAqLwotI2lmbmRlZiBOT1NFUlZFUgot ICAgIGlmICh4X2xvZ2luICYmICF4X2xvZ2dlZCkgewotCWVycnBrdCgoQ0hBUiAqKSJMb2dpbiBy ZXF1aXJlZCIpOwotCVJFU1VNRTsKLSAgICB9IGVsc2UgaWYgKCFFTkFCTEVEKGVuX2RlbCkpIHsK LQllcnJwa3QoKENIQVIgKikiRGVsZXRpbmcgZmlsZXMgaXMgZGlzYWJsZWQiKTsKLQlSRVNVTUU7 Ci0gICAgfSBlbHNlIGlmIChzZ2V0aW5pdCgwLDApIDwgMCkgewotCVJFU1VNRTsKLSAgICB9IGVs c2UgewotCW1vdmluZyA9IDE7Ci0jaWZkZWYgQ0tTWVNMT0cKLQlpZiAoY2t4c3lzbG9nID49IFNZ U0xHX1BSICYmIGNreGxvZ2dpbmcpCi0JICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIs ICJHRVQgL0RFTEVURSIsIChjaGFyICopc3J2Y21kKTsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwot CUJFR0lOIHNzaW5pdDsKLSAgICB9Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLX0KLQotPHNlcnZl PlYgewkJCQkvKiBHRVQgL1JFQ1VSU0lWRSAqLwotI2lmbmRlZiBOT1NFUlZFUgotICAgIHJlY3Vy c2l2ZSA9IDE7CQkJLyogU2V0IHRoZXNlIGJlZm9yZSBzZ2V0aW5pdCgpICovCi0gICAgaWYgKGZu c3BhdGggPT0gUEFUSF9PRkYpCi0gICAgICBmbnNwYXRoID0gUEFUSF9SRUw7CQkvKiBEb24ndCB3 b3JyeSwgdGhleSB3aWxsIGJlICovCi0gICAgaWYgKHhfbG9naW4gJiYgIXhfbG9nZ2VkKSB7CQkv KiByZXNldCBuZXh0IHRpbWUgdGhyb3VnaC4gKi8KLQllcnJwa3QoKENIQVIgKikiTG9naW4gcmVx dWlyZWQiKTsKLQlSRVNVTUU7Ci0gICAgfSBlbHNlIGlmIChzZ2V0aW5pdCgwLDApIDwgMCkgewot CVJFU1VNRTsKLSAgICB9IGVsc2UgewotI2lmZGVmIENLU1lTTE9HCi0JaWYgKGNreHN5c2xvZyA+ PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQotCSAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2 ZXIiLCAiR0VUIC9SRUNVUlNJVkUiLCAoY2hhciAqKXNydmNtZCk7Ci0jZW5kaWYgLyogQ0tTWVNM T0cgKi8KLQlCRUdJTiBzc2luaXQ7Ci0gICAgfQotI2VuZGlmIC8qIE5PU0VSVkVSICovCi19Ci0K LTxzZXJ2ZT5XIHsJCQkJLyogR0VUIC9SRUNVUlNJVkUgL0RFTEVURSAqLwotI2lmbmRlZiBOT1NF UlZFUgotICAgIHJlY3Vyc2l2ZSA9IDE7CQkJLyogU2V0IHRoZXNlIGJlZm9yZSBzZ2V0aW5pdCgp ICovCi0gICAgaWYgKGZuc3BhdGggPT0gUEFUSF9PRkYpCi0gICAgICBmbnNwYXRoID0gUEFUSF9S RUw7CQkvKiBEb24ndCB3b3JyeSwgdGhleSB3aWxsIGJlICovCi0gICAgbW92aW5nID0gMTsJCQkJ LyogcmVzZXQgbmV4dCB0aW1lIHRocm91Z2guICovCi0gICAgaWYgKHhfbG9naW4gJiYgIXhfbG9n Z2VkKSB7Ci0JZXJycGt0KChDSEFSICopIkxvZ2luIHJlcXVpcmVkIik7Ci0JUkVTVU1FOwotICAg IH0gZWxzZSBpZiAoIUVOQUJMRUQoZW5fZGVsKSkgewotCWVycnBrdCgoQ0hBUiAqKSJEZWxldGlu ZyBmaWxlcyBpcyBkaXNhYmxlZCIpOwotCVJFU1VNRTsKLSAgICB9IGVsc2UgaWYgKHNnZXRpbml0 KDAsMCkgPCAwKSB7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSB7Ci0jaWZkZWYgQ0tTWVNMT0cKLQlp ZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCi0JICBja3N5c2xvZyhTWVNM R19QUiwxLCJzZXJ2ZXIiLAotCQkgICAiR0VUIC9SRUNVUlNJVkUgL0RFTEVURSIsKGNoYXIgKilz cnZjbWQpOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0JQkVHSU4gc3Npbml0OwotICAgIH0KLSNl bmRpZiAvKiBOT1NFUlZFUiAqLwotfQotCi08c2VydmU+SiB7CQkJCS8qIEdFVCAvUkVDT1ZFUiAo UkVHRVQpICovCi0jaWZuZGVmIE5PU0VSVkVSCi0gICAgaWYgKHhfbG9naW4gJiYgIXhfbG9nZ2Vk KSB7Ci0JZXJycGt0KChDSEFSICopIkxvZ2luIHJlcXVpcmVkIik7Ci0JU0VSVkU7Ci0gICAgfSBl bHNlIGlmIChzZ2V0aW5pdCgxLDApIDwgMCkgewotCVJFU1VNRTsKLSAgICB9IGVsc2UgewotI2lm ZGVmIENLU1lTTE9HCi0JaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQot CSAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiR0VUIC9SRUNPVkVSIiwgKGNoYXIg KilzcnZjbWQpOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0JQkVHSU4gc3Npbml0OwotICAgIH0K LSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotfQotCi08c2VydmU+TyB7CQkJCS8qIEV4dGVuZGVkIEdF VCAqLwotI2lmbmRlZiBOT1NFUlZFUgotICAgIGlmICh4X2xvZ2luICYmICF4X2xvZ2dlZCkgewkJ LyogKGFueSBjb21iaW5hdGlvbiBvZiBvcHRpb25zKSAqLwotCWVycnBrdCgoQ0hBUiAqKSJMb2dp biByZXF1aXJlZCIpOwotCVNFUlZFOwotICAgIH0gZWxzZSBpZiAoKHggPSBzZ2V0aW5pdCgwLDEp KSA8IDApIHsKLQlkZWJ1ZyhGMTAxLCJDS0NQUk8gPHNlcnZlPk8gc2dldGluaXQgZmFpbCIsIiIs eCk7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSBpZiAoeCA9PSAwKSB7Ci0JZGVidWcoRjEwMSwiQ0tD UFJPIDxzZXJ2ZT5PIHNnZXRpbml0IGRvbmUiLCIiLHgpOwotI2lmZGVmIENLU1lTTE9HCi0JaWYg KGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQotCSAgY2tzeXNsb2coU1lTTEdf UFIsIDEsICJzZXJ2ZXIiLCAiRVhURU5ERUQgR0VUIiwgKGNoYXIgKilzcnZjbWQpOwotI2VuZGlm IC8qIENLU1lTTE9HICovCi0JQkVHSU4gc3Npbml0OwotICAgIH0gZWxzZSB7CQkJCS8qIE90aGVy d2lzZSBzdGF5IGluIHRoaXMgc3RhdGUgKi8KLQlkZWJ1ZyhGMTAxLCJDS0NQUk8gPHNlcnZlPk8g c2dldGluaXQgVEJDIiwiIix4KTsKLQlhY2soKTsKLQlCRUdJTiByb3BrdDsKLSAgICB9Ci0jZW5k aWYgLyogTk9TRVJWRVIgKi8KLX0KLQotPHJvcGt0Pk8gewotI2lmbmRlZiBOT1NFUlZFUgotICAg IGlmICh4X2xvZ2luICYmICF4X2xvZ2dlZCkgewkJLyogKGFueSBjb21iaW5hdGlvbiBvZiBvcHRp b25zKSAqLwotCWVycnBrdCgoQ0hBUiAqKSJMb2dpbiByZXF1aXJlZCIpOwotCVNFUlZFOwotICAg IH0gZWxzZSBpZiAoKHggPSBzZ2V0aW5pdCgwLDEpKSA8IDApIHsKLQlkZWJ1ZyhGMTAxLCJDS0NQ Uk8gPHJvcGt0Pk8gc2dldGluaXQgZmFpbCIsIiIseCk7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSBp ZiAoeCA9PSAwKSB7Ci0JZGVidWcoRjEwMSwiQ0tDUFJPIDxyb3BrdD5PIHNnZXRpbml0IGRvbmUi LCIiLHgpOwotI2lmZGVmIENLU1lTTE9HCi0JaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBj a3hsb2dnaW5nKQotCSAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiRVhURU5ERUQg R0VUIiwgKGNoYXIgKilzcnZjbWQpOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0JQkVHSU4gc3Np bml0OwotICAgIH0gZWxzZSB7CQkJCS8qIE90aGVyd2lzZSBzdGF5IGluIHRoaXMgc3RhdGUgKi8K LQlkZWJ1ZyhGMTAxLCJDS0NQUk8gPHJvcGt0Pk8gc2dldGluaXQgVEJDIiwiIix4KTsKLQlhY2so KTsKLSAgICB9Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLX0KLQotPHNlcnZlPkcgewkJCQkvKiBH ZW5lcmljIHNlcnZlciBjb21tYW5kICovCi0jaWZuZGVmIE5PU0VSVkVSCi0gICAgc3J2cHRyID0g c3J2Y21kOwkJCS8qIFBvaW50IHRvIGNvbW1hbmQgYnVmZmVyICovCi0gICAgZGVjb2RlKHJkYXRh cCxwdXRzcnYsMCk7CQkvKiBEZWNvZGUgcGFja2V0IGRhdGEgaW50byBpdCAqLwotICAgIHB1dHNy dihOVUwpOwkJCS8qIEluc2VydCBhIGNvdXBsZSBudWxscyAqLwotICAgIHB1dHNydihOVUwpOwkJ CS8qIGZvciB0ZXJtaW5hdGlvbiAqLwotICAgIGlmIChzcnZjbWRbMF0pIHsKLQlzc3RhdGUgPSBz cnZjbWRbMF07CQkvKiBTZXQgcmVxdWVzdGVkIHN0YXJ0IHN0YXRlICovCi0JaWYgKHhfbG9naW4g JiYgIXhfbG9nZ2VkICYmCS8qIExvZ2luIHJlcXVpcmVkPyAqLwotCSAgICAvKiBMb2dpbiwgTG9n b3V0LCBhbmQgSGVscCBhcmUgYWxsb3dlZCB3aGVuIG5vdCBsb2dnZWQgaW4gKi8KLQkgICAgc3N0 YXRlICE9ICdJJyAmJiBzc3RhdGUgIT0gJ0wnICYmIHNzdGF0ZSAhPSAnSCcpIHsKLQkgICAgZXJy cGt0KChDSEFSICopIkxvZ2luIHJlcXVpcmVkIik7Ci0JICAgIFNFUlZFOwotCX0gZWxzZSB7Ci0J ICAgIG5ha3N0YXRlID0gMDsJCS8qIE5vdyBJJ20gdGhlIHNlbmRlci4gKi8KLQkgICAgd2hhdCA9 IFdfUkVNTzsJCS8qIERvaW5nIGEgUkVNT1RFIGNvbW1hbmQuICovCi0jaWZkZWYgU1RSRUFNSU5H Ci0JICAgIGlmICghc3RyZWFtaW5nKQotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotCSAgICAgIGlm ICh0aW1pbnQgPCAxKQotCQl0aW1pbnQgPSBjaGt0aW1vKHJ0aW1vLHRpbWVmKTsgLyogU3dpdGNo IHRvIHBlci1wYWNrZXQgdGltZXIgKi8KLQkgICAgYmluYXJ5ID0gWFlGVF9UOwkJLyogU3dpdGNo IHRvIHRleHQgbW9kZSAqLwotCSAgICBCRUdJTiBnZW5lcmljOwkJLyogU3dpdGNoIHRvIGdlbmVy aWMgY29tbWFuZCBzdGF0ZSAqLwotCX0KLSAgICB9IGVsc2UgewotCWVycnBrdCgoQ0hBUiAqKSJC YWRseSBmb3JtZWQgc2VydmVyIGNvbW1hbmQiKTsgLyogcmVwb3J0IGVycm9yICovCi0JUkVTVU1F OwkJCS8qICYgZ28gYmFjayB0byBzZXJ2ZXIgY29tbWFuZCB3YWl0ICovCi0gICAgfQotI2VuZGlm IC8qIE5PU0VSVkVSICovCi19Ci0KLTxzZXJ2ZT5DIHsJCQkJLyogUmVjZWl2ZSBIb3N0IGNvbW1h bmQgKi8KLSNpZm5kZWYgTk9TRVJWRVIKLSAgICBpZiAoeF9sb2dpbiAmJiAheF9sb2dnZWQpIHsK LQllcnJwa3QoKENIQVIgKikiTG9naW4gcmVxdWlyZWQiKTsKLQlTRVJWRTsKLSAgICB9IGVsc2Ug aWYgKCFFTkFCTEVEKGVuX2hvcykpIHsKLQllcnJwa3QoKENIQVIgKikiUkVNT1RFIEhPU1QgZGlz YWJsZWQiKTsKLQlSRVNVTUU7Ci0gICAgfSBlbHNlIGlmIChub3B1c2gpIHsKLQllcnJwa3QoKENI QVIgKikiSE9TVCBjb21tYW5kcyBub3QgYXZhaWxhYmxlIik7Ci0JUkVTVU1FOwotICAgIH0gZWxz ZSB7Ci0Jc3J2cHRyID0gc3J2Y21kOwkJLyogUG9pbnQgdG8gY29tbWFuZCBidWZmZXIgKi8KLQlk ZWNvZGUocmRhdGFwLHB1dHNydiwwKTsJLyogRGVjb2RlIGNvbW1hbmQgcGFja2V0IGludG8gaXQg Ki8KLQlwdXRzcnYoTlVMKTsJCQkvKiBOdWxsLXRlcm1pbmF0ZSAqLwotCW5ha3N0YXRlID0gMDsJ CQkvKiBOb3cgc2VuZGluZywgbm90IHJlY2VpdmluZyAqLwotCWJpbmFyeSA9IFhZRlRfVDsJCS8q IFN3aXRjaCB0byB0ZXh0IG1vZGUgKi8KLQlpZiAoc3lzY21kKChjaGFyICopc3J2Y21kLCIiKSkg eyAvKiBUcnkgdG8gZXhlY3V0ZSB0aGUgY29tbWFuZCAqLwotCSAgICB3aGF0ID0gV19SRU1POwkJ LyogRG9pbmcgYSBSRU1PVEUgY29tbWFuZC4gKi8KLSNpZmRlZiBTVFJFQU1JTkcKLQkgICAgaWYg KCFzdHJlYW1pbmcpCi0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0JICAgICAgaWYgKHRpbWludCA8 IDEpCi0JCXRpbWludCA9IGNoa3RpbW8ocnRpbW8sdGltZWYpOyAvKiBTd2l0Y2ggdG8gcGVyLXBh Y2tldCB0aW1lciAqLwotI2lmZGVmIENLU1lTTE9HCi0JICAgIGlmIChja3hzeXNsb2cgPj0gU1lT TEdfUFIgJiYgY2t4bG9nZ2luZykKLQkgICAgICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZl ciIsICJSRU1PVEUgSE9TVCIsIChjaGFyICopc3J2Y21kKTsKLSNlbmRpZiAvKiBDS1NZU0xPRyAq LwotCSAgICBCRUdJTiBzc2luaXQ7CQkvKiBJZiBPSywgc2VuZCBiYWNrIGl0cyBvdXRwdXQgKi8K LQl9IGVsc2UgewkJCS8qIE90aGVyd2lzZSAqLwotCSAgICBlcnJwa3QoKENIQVIgKikiQ2FuJ3Qg ZG8gc3lzdGVtIGNvbW1hbmQiKTsgLyogcmVwb3J0IGVycm9yICovCi0JICAgIFJFU1VNRTsJCQkv KiAmIGdvIGJhY2sgdG8gc2VydmVyIGNvbW1hbmQgd2FpdCAqLwotCX0KLSAgICB9Ci0jZW5kaWYg LyogTk9TRVJWRVIgKi8KLX0KLQotPHNlcnZlPnEgewkJCQkvKiBJbnRlcnJ1cHRlZCBvciBjb25u ZWN0aW9uIGxvc3QgKi8KLSAgICByYyA9IHNydl90aW1lb3V0KCk7Ci0gICAgZGVidWcoRjEwMSwi c3J2X3RpbWVvdXQiLCIiLHJjKTsKLSAgICBpZiAocmMgPiAtMSkgcmV0dXJuKHJjKTsJCS8qIChz ZWUgYmVsb3cpICovCi19Ci0KLTxzZXJ2ZT5OIHsJCQkJLyogU2VydmVyIGdvdCBhIE5BSyBpbiBj b21tYW5kLXdhaXQgKi8KLSNpZm5kZWYgTk9TRVJWRVIKLSAgICBlcnJwa3QoKENIQVIgKikiRGlk IHlvdSBzYXkgUkVDRUlWRSBpbnN0ZWFkIG9mIEdFVD8iKTsKLSAgICBSRVNVTUU7Ci0jZW5kaWYg LyogTk9TRVJWRVIgKi8KLX0KLQotPHNlcnZlPi4gewkJCQkvKiBBbnkgb3RoZXIgY29tbWFuZCBp biB0aGlzIHN0YXRlICovCi0jaWZuZGVmIE5PU0VSVkVSCi0gICAgaWYgKGMgIT0gKCdFJyAtIFNQ KSAmJiBjICE9ICgnWScgLSBTUCkpIC8qIGV4Y2VwdCBFIGFuZCBZIHBhY2tldHMuICovCi0gICAg ICBlcnJwa3QoKENIQVIgKikiVW5pbXBsZW1lbnRlZCBzZXJ2ZXIgZnVuY3Rpb24iKTsKLSAgICAv KiBJZiB3ZSBhbnN3ZXIgYW4gRSB3aXRoIGFuIEUsIHdlIGdldCBhbiBpbmZpbml0ZSBsb29wLiAq LwotICAgIC8qIEEgWSAoQUNLKSBjYW4gc2hvdyB1cCBoZXJlIGlmIHdlIHNlbnQgYmFjayBhIHNo b3J0LWZvcm0gcmVwbHkgdG8gKi8KLSAgICAvKiBhIEcgcGFja2V0IGFuZCBpdCB3YXMgZWNob2Vk LiAgQUNLcyBjYW4gYmUgc2FmZWx5IGlnbm9yZWQgaGVyZS4gKi8KLSAgICBSRVNVTUU7CQkJCS8q IEdvIGJhY2sgdG8gc2VydmVyIGNvbW1hbmQgd2FpdC4gKi8KLSNlbmRpZiAvKiBOT1NFUlZFUiAq LwotfQotCi08Z2VuZXJpYz5JIHsJCQkJLyogTG9naW4vT3V0ICovCi0gICAgcmMgPSBzcnZfbG9n aW4oKTsKLSAgICBkZWJ1ZyhGMTAxLCI8Z2VuZXJpYz5JIHNydl9sb2dpbiIsIiIscmMpOwotICAg IGlmIChyYyA+IC0xKSByZXR1cm4ocmMpOwkJLyogKHNlZSBiZWxvdykgKi8KLX0KLQotPGdlbmVy aWM+QyB7CQkJCS8qIEdvdCBSRU1PVEUgQ0QgY29tbWFuZCAqLwotI2lmbmRlZiBOT1NFUlZFUgot I2lmZGVmIENLU1lTTE9HCi0gICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dn aW5nKQotICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiUkVNT1RFIENEIiwg KGNoYXIgKilzcnZjbWQpOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgaWYgKCFFTkFCTEVE KGVuX2N3ZCkpIHsKLQllcnJwa3QoKENIQVIgKikiUkVNT1RFIENEIGRpc2FibGVkIik7Ci0JUkVT VU1FOwotICAgIH0gZWxzZSB7Ci0JY2hhciAqIHAgPSBOVUxMOwotCXggPSBjd2QoKGNoYXIgKiko c3J2Y21kKzEpKTsJLyogVHJ5IHRvIGNoYW5nZSBkaXJlY3RvcnkgKi8KLSNpZmRlZiBJS1NEQgot CWlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsIlJFTU9URSBDRCIsIChjaGFyICopKHNydmNt ZCsyKSwgIiIpOwotI2VuZGlmIC8qIElLU0RCICovCi0JaWYgKCF4KSB7CQkJLyogRmFpbGVkICov Ci0JICAgIGVycnBrdCgoQ0hBUiAqKSJDYW4ndCBjaGFuZ2UgZGlyZWN0b3J5Iik7Ci0JICAgIFJF U1VNRTsJCQkvKiBCYWNrIHRvIHNlcnZlciBjb21tYW5kIHdhaXQgKi8KLQl9IGVsc2UgaWYgKHgg PT0gMikgewkJLyogVXNlciB3YW50cyBtZXNzYWdlICovCi0JICAgIGlmICghRU5BQkxFRChlbl90 eXApKSB7CS8qIE1lc3NhZ2VzIChSRU1PVEUgVFlQRSkgZGlzYWJsZWQ/ICovCi0JCWVycnBrdCgo Q0hBUiAqKSJSRU1PVEUgVFlQRSBkaXNhYmxlZCIpOwotCQlSRVNVTUU7Ci0JICAgIH0gZWxzZSB7 CQkJLyogVFlQRSBpcyBlbmFibGVkICovCi0JCWludCBpOwotCQlmb3IgKGkgPSAwOyBpIDwgODsg aSsrKSB7Ci0JCSAgICBpZiAoemNoa2koY2Rtc2dmaWxlW2ldKSA+IC0xKSB7Ci0JCQlicmVhazsK LQkJICAgIH0KLQkJfQotCQliaW5hcnkgPSBYWUZUX1Q7CS8qIFVzZSB0ZXh0IG1vZGUgZm9yIHRo aXMuICovCi0JCWlmIChpIDwgOCAmJiBzbmR0eXBlKGNkbXNnZmlsZVtpXSkpIHsgLyogSGF2ZSBy ZWFkbWUgZmlsZT8gKi8KLQkJICAgIEJFR0lOIHNzaW5pdDsJLyogT0sgKi8KLQkJfSBlbHNlIHsJ CS8qIG5vdCBPSyAqLwotCQkgICAgcCA9IHpndGRpcigpOwotCQkgICAgaWYgKCFwKSBwID0gIiI7 Ci0JCSAgICBzdWNjZXNzID0gKCpwKSA/IDEgOiAwOwotCQkgICAgYWNrMSgoQ0hBUiAqKXApOwkv KiBBQ0sgd2l0aCBuZXcgZGlyZWN0b3J5IG5hbWUgKi8KLQkJICAgIHN1Y2Nlc3MgPSAxOwotCQkg ICAgUkVTVU1FOwkJLyogd2FpdCBmb3IgbmV4dCBzZXJ2ZXIgY29tbWFuZCAqLwotCQl9Ci0JICAg IH0KLQl9IGVsc2UgewkJCS8qIFVzZXIgZG9lc24ndCB3YW50IG1lc3NhZ2UgKi8KLQkgICAgcCA9 IHpndGRpcigpOwotCSAgICBpZiAoIXApIHAgPSAiIjsKLQkgICAgc3VjY2VzcyA9ICgqcCkgPyAx IDogMDsKLQkgICAgYWNrMSgoQ0hBUiAqKXApOwotCSAgICBzdWNjZXNzID0gMTsKLQkgICAgUkVT VU1FOwkJCS8qIFdhaXQgZm9yIG5leHQgc2VydmVyIGNvbW1hbmQgKi8KLQl9Ci0gICAgfQotI2Vu ZGlmIC8qIE5PU0VSVkVSICovCi19Ci0KLTxnZW5lcmljPkEgewkJCQkvKiBHb3QgUkVNT1RFIFBX RCBjb21tYW5kICovCi0jaWZuZGVmIE5PU0VSVkVSCi0jaWZkZWYgQ0tTWVNMT0cKLSAgICBpZiAo Y2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCi0gICAgICBja3N5c2xvZyhTWVNM R19QUiwgMSwgInNlcnZlciIsICJSRU1PVEUgUFdEIiwgTlVMTCk7Ci0jZW5kaWYgLyogQ0tTWVNM T0cgKi8KLSAgICBpZiAoIUVOQUJMRUQoZW5fY3dkKSkgewotCWVycnBrdCgoQ0hBUiAqKSJSRU1P VEUgQ0QgZGlzYWJsZWQiKTsKLQlSRVNVTUU7Ci0gICAgfSBlbHNlIHsKLQlpZiAoZW5jc3RyKChD SEFSICopemd0ZGlyKCkpID4gLTEpIHsgLyogRW5jb2RlIGN1cnJlbnQgZGlyZWN0b3J5ICovCi0J ICAgIGFjazEoZGF0YSk7CQkJLyogSWYgaXQgZml0cywgc2VuZCBpdCBiYWNrIGluIEFDSyAqLwot CSAgICBzdWNjZXNzID0gMTsKLQl9IGVsc2UgewkJCS8qIEZhaWxlZCAqLwotCSAgICBhY2soKTsJ CQkvKiBTZW5kIGVtcHR5IEFDSyAqLwotCSAgICBzdWNjZXNzID0gMDsJCS8qIGFuZCBpbmRpY2F0 ZSBmYWlsdXJlIGxvY2FsbHkgKi8KLQl9Ci0JUkVTVU1FOwkJCQkvKiBCYWNrIHRvIHNlcnZlciBj b21tYW5kIHdhaXQgKi8KLSAgICB9Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLX0KLQotPGdlbmVy aWM+RCB7CQkJCS8qIFJFTU9URSBESVJFQ1RPUlkgY29tbWFuZCAqLwotI2lmbmRlZiBOT1NFUlZF UgotICAgIGNoYXIgKm4yOwotI2lmZGVmIENLU1lTTE9HCi0gICAgaWYgKGNreHN5c2xvZyA+PSBT WVNMR19QUiAmJiBja3hsb2dnaW5nKQotICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2 ZXIiLCAiUkVNT1RFIERJUkVDVE9SWSIsIChjaGFyICopc3J2Y21kKTsKLSNlbmRpZiAvKiBDS1NZ U0xPRyAqLwotICAgIGlmICghRU5BQkxFRChlbl9kaXIpKSB7CQkvKiBJZiBESVIgaXMgZGlzYWJs ZWQsICovCi0JZXJycGt0KChDSEFSICopIlJFTU9URSBESVJFQ1RPUlkgZGlzYWJsZWQiKTsgLyog cmVmdXNlLiAqLwotCVJFU1VNRTsKLSAgICB9IGVsc2UgewkJCQkvKiBESVIgaXMgZW5hYmxlZC4g Ki8KLSNpZmRlZiBJS1NEQgotCWlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsIlJFTU9URSBE SVIiLCAoY2hhciAqKShzcnZjbWQrMiksICIiKTsKLSNlbmRpZiAvKiBJS1NEQiAqLwotCWlmICgh RU5BQkxFRChlbl9jd2QpKSB7CQkvKiBCdXQgQ1dEIGlzIGRpc2FibGVkICovCi0JICAgIHpzdHJp cCgoY2hhciAqKShzcnZjbWQrMiksJm4yKTsgLyogYW5kIHRoZXkgaW5jbHVkZWQgYSBwYXRobmFt ZSwgKi8KLQkgICAgaWYgKHN0cmNtcCgoY2hhciAqKShzcnZjbWQrMiksbjIpKSB7IC8qIHNvIHJl ZnVzZS4gKi8KLQkJZXJycGt0KChDSEFSICopIkFjY2VzcyBkZW5pZWQiKTsKLQkJUkVTVU1FOwkJ CS8qIFJlbWVtYmVyLCB0aGlzIGlzIG5vdCBhIGdvdG8hICovCi0JICAgIH0KLQl9Ci0JaWYgKHN0 YXRlID09IGdlbmVyaWMpIHsJCQkvKiBJdCdzIE9LIHRvIGdvIGFoZWFkLiAqLwotI2lmZGVmIENP TU1FTlQKLQkgICAgbjIgPSAoKihzcnZjbWQrMikpID8gRElSQ01EIDogRElSQ00yOwotCSAgICBp ZiAoc3lzY21kKG4yLChjaGFyICopKHNydmNtZCsyKSkpICAvKiBJZiBpdCBjYW4gYmUgZG9uZSAq LwotI2Vsc2UKLQkgICAgaW50IHg7Ci0JICAgIGlmICgoeCA9IHNuZGRpcigoY2hhciopKHNydmNt ZCsyKSkpID4gMCkKLSNlbmRpZiAvKiBDT01NRU5UICovCi0JICAgIHsKLQkJQkVHSU4gc3Npbml0 OwkJLyogc2VuZCB0aGUgcmVzdWx0cyBiYWNrOyAqLwotCSAgICB9IGVsc2UgewkJCS8qIG90aGVy d2lzZSAqLwotCQlpZiAoeCA8IDApCi0JCSAgZXJycGt0KChDSEFSICopIk5vIGZpbGVzIG1hdGNo Iik7Ci0JCWVsc2UKLQkJICBlcnJwa3QoKENIQVIgKikiQ2FuJ3QgbGlzdCBkaXJlY3RvcnkiKTsK LQkJUkVTVU1FOwkJCS8qIHJldHVybiB0byBzZXJ2ZXIgY29tbWFuZCB3YWl0ICovCi0JICAgIH0K LQl9Ci0gICAgfQotI2VuZGlmIC8qIE5PU0VSVkVSICovCi19Ci0KLTxnZW5lcmljPkUgewkJCQkv KiBSRU1PVEUgREVMRVRFIChFcmFzZSkgKi8KLSNpZm5kZWYgTk9TRVJWRVIKLSAgICBjaGFyICpu MjsKLSNpZmRlZiBDS1NZU0xPRwotICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4 bG9nZ2luZykKLSAgICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIlJFTU9URSBE RUxFVEUiLCAoY2hhciAqKXNydmNtZCk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICBpZiAo IUVOQUJMRUQoZW5fZGVsKSkgewotCWVycnBrdCgoQ0hBUiAqKSJSRU1PVEUgREVMRVRFIGRpc2Fi bGVkIik7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSB7CQkJCS8qIERFTEVURSBpcyBlbmFibGVkICov Ci0jaWZkZWYgSUtTREIKLQlpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJSRU1PVEUgREVM RVRFIiwgKGNoYXIgKikoc3J2Y21kKzIpLCAiIik7Ci0jZW5kaWYgLyogSUtTREIgKi8KLQlpZiAo IUVOQUJMRUQoZW5fY3dkKSkgewkJLyogYnV0IENXRCBpcyBkaXNhYmxlZCAqLwotCSAgICB6c3Ry aXAoKGNoYXIgKikoc3J2Y21kKzIpLCZuMik7IC8qIGFuZCB0aGV5IGluY2x1ZGVkIGEgcGF0aG5h bWUsICovCi0JICAgIGlmIChzdHJjbXAoKGNoYXIgKikoc3J2Y21kKzIpLG4yKSkgeyAvKiBzbyBy ZWZ1c2UuICovCi0JCWVycnBrdCgoQ0hBUiAqKSJBY2Nlc3MgZGVuaWVkIik7Ci0JCVJFU1VNRTsJ CQkvKiBSZW1lbWJlciwgdGhpcyBpcyBub3QgYSBnb3RvISAqLwotCSAgICB9Ci0JfSBlbHNlIGlm IChpc2RpcigoY2hhciAqKShzcnZjbWQrMikpKSB7IC8qIEEgZGlyZWN0b3J5IG5hbWU/ICovCi0J ICAgIGVycnBrdCgoQ0hBUiAqKSJJdCdzIGEgZGlyZWN0b3J5Iik7Ci0JICAgIFJFU1VNRTsKLQl9 Ci0JaWYgKHN0YXRlID09IGdlbmVyaWMpIHsJCS8qIEl0J3MgT0sgdG8gZ28gYWhlYWQuICovCi0J ICAgIGludCB4OwotCSAgICBpZiAoKHggPSBzbmRkZWwoKGNoYXIqKShzcnZjbWQrMikpKSA+IDAp IHsKLQkJQkVHSU4gc3Npbml0OwkJLyogSWYgT0sgc2VuZCByZXN1bHRzIGJhY2sgKi8KLQkgICAg fSBlbHNlIHsJCQkvKiBvdGhlcndpc2UgKi8KLQkJaWYgKHggPCAwKQotCQkgIGVycnBrdCgoQ0hB UiAqKSJGaWxlIG5vdCBmb3VuZCIpOyAvKiByZXBvcnQgZmFpbHVyZSAqLwotCQllbHNlCi0JCSAg ZXJycGt0KChDSEFSICopIkRFTEVURSBmYWlsZWQiKTsKLQkJUkVTVU1FOwkJCS8qICYgcmV0dXJu IHRvIHNlcnZlciBjb21tYW5kIHdhaXQgKi8KLQkgICAgfQotCX0KLSAgICB9Ci0jZW5kaWYgLyog Tk9TRVJWRVIgKi8KLX0KLQotPGdlbmVyaWM+RiB7CQkJCS8qIEZJTklTSCAqLwotI2lmbmRlZiBO T1NFUlZFUgotI2lmZGVmIENLU1lTTE9HCi0gICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAm JiBja3hsb2dnaW5nKQotICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiRklO SVNIIiwgTlVMTCk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSNpZmRlZiBJS1NEQgotICAgIGlm IChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsIlNFUlZFUiBGSU5JU0giLCAiIiwgIiIpOwotI2Vu ZGlmIC8qIElLU0RCICovCi0gICAgaWYgKCFFTkFCTEVEKGVuX2ZpbikpIHsKLQllcnJwa3QoKENI QVIgKikiRklOSVNIIGRpc2FibGVkIik7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSB7Ci0JYWNrKCk7 CQkJCS8qIEFja25vd2xlZGdlICovCi0JeHhzY3JlZW4oU0NSX1RDLDAsMEwsIiIpOwkvKiBEaXNw bGF5ICovCi0Jc3VjY2VzcyA9IDE7Ci0JcmV0dXJuKDApOwkJCS8qIERvbmUgKi8KLSAgICB9Ci0j ZW5kaWYgLyogTk9TRVJWRVIgKi8KLX0KLQotPGdlbmVyaWM+WCB7CQkJCS8qIEVYSVQgKi8KLSNp Zm5kZWYgTk9TRVJWRVIKLSNpZmRlZiBDS1NZU0xPRwotICAgIGlmIChja3hzeXNsb2cgPj0gU1lT TEdfUFIgJiYgY2t4bG9nZ2luZykKLSAgICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVy IiwgIlJFTU9URSBFWElUIiwgTlVMTCk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSNpZmRlZiBJ S1NEQgotICAgIGlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsIlJFTU9URSBFWElUIiwgIiIs ICIiKTsKLSNlbmRpZiAvKiBJS1NEQiAqLwotICAgIGlmICghRU5BQkxFRChlbl94aXQpKSB7Ci0J ZXJycGt0KChDSEFSICopIkVYSVQgZGlzYWJsZWQiKTsKLQlSRVNVTUU7Ci0gICAgfSBlbHNlIHsK LQlhY2soKTsJCQkJLyogQWNrbm93bGVkZ2UgKi8KLQl4eHNjcmVlbihTQ1JfVEMsMCwwTCwiIik7 CS8qIERpc3BsYXkgKi8KLQlkb2V4aXQoR09PRF9FWElULHhpdHN0YSk7Ci0gICAgfQotI2VuZGlm IC8qIE5PU0VSVkVSICovCi19Ci0KLTxnZW5lcmljPkwgewkJCQkvKiBCWUUgKExvZ291dCkgKi8K LSNpZm5kZWYgTk9TRVJWRVIKLSNpZmRlZiBDS1NZU0xPRwotICAgIGlmIChja3hzeXNsb2cgPj0g U1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKLSAgICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2Vy dmVyIiwgIkJZRSIsIE5VTEwpOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0jaWZkZWYgSUtTREIK LSAgICBpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJTRVJWRVIgQllFIiwgIiIsICIiKTsK LSNlbmRpZiAvKiBJS1NEQiAqLwotICAgIGlmICghRU5BQkxFRChlbl9ieWUpKSB7Ci0JZXJycGt0 KChDSEFSICopIkJZRSBkaXNhYmxlZCIpOwotCVJFU1VNRTsKLSAgICB9IGVsc2UgewotCWFjaygp OwkJCQkvKiBBY2tub3dsZWRnZSAqLwotCXN1Y2Nlc3MgPSAxOwotCW1zbGVlcCg3NTApOwkJCS8q IEdpdmUgdGhlIEFDSyB0aW1lIHRvIGdldCBvdXQgKi8KLQlpZiAobG9jYWwpCi0JICB0dHJlcygp OwkJCS8qIFJlc2V0IHRoZSB0ZXJtaW5hbCAqLwotCXh4c2NyZWVuKFNDUl9UQywwLDBMLCIiKTsJ LyogRGlzcGxheSAqLwotCWRvY2xlYW4oMSk7CQkJLyogQ2xlYW4gdXAgZmlsZXMsIGV0YyAqLwot I2lmZGVmIERFQlVHCi0JZGVidWcoRjEwMCwiQy1LZXJtaXQgQllFIC0gTG9nZ2luZyBvdXQuLi4i LCIiLDApOwotCXpjbG9zZShaREZJTEUpOwotI2VuZGlmIC8qIERFQlVHICovCi0jaWZkZWYgSUtT RAotI2lmZGVmIENLX0xPR0lOCi0JaWYgKGluc2VydmVyKQotCSAgY2t4bG9nb3V0KCk7Ci0JZWxz ZQotI2VuZGlmIC8qIENLX0xPR0lOICovCi0jZW5kaWYgLyogSUtTRCAqLwotI2lmZGVmIFRDUFNP Q0tFVAotI2lmbmRlZiBOT0xJU1RFTgotCSAgaWYgKG5ldHdvcmsgJiYgdGNwc3JmZCA+IDAgJiYg IWluc2VydmVyKQotCSAgICBkb2V4aXQoR09PRF9FWElULHhpdHN0YSk7Ci0JZWxzZQotI2VuZGlm IC8qIE5PTElTVEVOICovCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0JICByZXR1cm4oemtzZWxm KCkpOwkJLyogVHJ5IHRvIGxvZyBzZWxmIG91dCAqLwotICAgIH0KLSNlbmRpZiAvKiBOT1NFUlZF UiAqLwotfQotCi08Z2VuZXJpYz5IIHsJCQkJLyogUkVNT1RFIEhFTFAgKi8KLSNpZmRlZiBDS1NZ U0xPRwotICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKLSAgICAg IGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIlJFTU9URSBIRUxQIiwgTlVMTCk7Ci0j ZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSNpZmRlZiBJS1NEQgotICAgIGlmIChpa2Rib3Blbikgc2xv dHN0YXRlKHdoYXQsIlJFTU9URSBIRUxQIiwgIiIsICIiKTsKLSNlbmRpZiAvKiBJS1NEQiAqLwot I2lmbmRlZiBOT1NFUlZFUgotICAgIGlmIChzbmRobHAoKSkgewotCUJFR0lOIHNzaW5pdDsJCQkv KiB0cnkgdG8gc2VuZCBpdCAqLwotICAgIH0gZWxzZSB7CQkJCS8qIElmIG5vdCBvaywgKi8KLQll cnJwa3QoKENIQVIgKikiQ2FuJ3Qgc2VuZCBoZWxwIik7IC8qIHNlbmQgZXJyb3IgbWVzc2FnZSBp bnN0ZWFkICovCi0JUkVTVU1FOwkJCQkvKiBhbmQgcmV0dXJuIHRvIHNlcnZlciBjb21tYW5kIHdh aXQgKi8KLSAgICB9Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLX0KLQotPGdlbmVyaWM+UiB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJFTU9URSBSRU5BTUUgKi8KLSAgICByYyA9IHNy dl9yZW5hbWUoKTsKLSAgICBkZWJ1ZyhGMTAxLCJzcnZfcmVuYW1lIiwiIixyYyk7Ci0gICAgaWYg KHJjID4gLTEpIHJldHVybihyYyk7CQkvKiAoc2VlIGJlbG93KSAqLwotfQotCi08Z2VuZXJpYz5L IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUkVNT1RFIENPUFkgKi8KLSAgICByYyA9 IHNydl9jb3B5KCk7Ci0gICAgZGVidWcoRjEwMSwic3J2X2NvcHkiLCIiLHJjKTsKLSAgICBpZiAo cmMgPiAtMSkgcmV0dXJuKHJjKTsJCS8qIChzZWUgYmVsb3cpICovCi19Ci0KLTxnZW5lcmljPlMg ewkJCQkvKiBSRU1PVEUgU0VUICovCi0jaWZkZWYgQ0tTWVNMT0cKLSAgICBpZiAoY2t4c3lzbG9n ID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCi0gICAgICBja3N5c2xvZyhTWVNMR19QUiwgMSwg InNlcnZlciIsICJSRU1PVEUgU0VUIiwgKGNoYXIgKilzcnZjbWQpOwotI2VuZGlmIC8qIENLU1lT TE9HICovCi0jaWZuZGVmIE5PU0VSVkVSCi0jaWZkZWYgSUtTREIKLSAgICBpZiAoaWtkYm9wZW4p IHNsb3RzdGF0ZSh3aGF0LCJSRU1PVEUgU0VUIiwgKGNoYXIgKikoc3J2Y21kKzEpLCAiIik7Ci0j ZW5kaWYgLyogSUtTREIgKi8KLSAgICBpZiAoIUVOQUJMRUQoZW5fc2V0KSkgewotCWVycnBrdCgo Q0hBUiAqKSJSRU1PVEUgU0VUIGRpc2FibGVkIik7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSB7Ci0J aWYgKHJlbXNldCgoY2hhciAqKShzcnZjbWQrMSkpKSB7IC8qIFRyeSB0byBkbyB3aGF0IHRoZXkg YXNrICovCi0JICAgIHN1Y2Nlc3MgPSAxOwotCSAgICBhY2soKTsJCQkvKiBJZiBPSywgdGhlbiBh Y2tub3dsZWRnZSAqLwotCX0gZWxzZQkJCQkvKiBPdGhlcndpc2UgKi8KLQkgIGVycnBrdCgoQ0hB UiAqKSJVbmtub3duIFJFTU9URSBTRVQgcGFyYW1ldGVyIik7IC8qIGdpdmUgZXJyb3IgbXNnICov Ci0JUkVTVU1FOwkJCQkvKiBSZXR1cm4gdG8gc2VydmVyIGNvbW1hbmQgd2FpdCAqLwotICAgIH0K LSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotfQotCi08Z2VuZXJpYz5UIHsJCQkJLyogUkVNT1RFIFRZ UEUgKi8KLSNpZm5kZWYgTk9TRVJWRVIKLSAgICBjaGFyICpuMjsKLSNpZmRlZiBDS1NZU0xPRwot ICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKLSAgICAgIGNrc3lz bG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIlJFTU9URSBUWVBFIiwgKGNoYXIgKilzcnZjbWQp OwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgaWYgKCFFTkFCTEVEKGVuX3R5cCkpIHsKLQll cnJwa3QoKENIQVIgKikiUkVNT1RFIFRZUEUgZGlzYWJsZWQiKTsKLQlSRVNVTUU7Ci0gICAgfSBl bHNlIHsKLSNpZmRlZiBJS1NEQgotCWlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsIlJFTU9U RSBUWVBFIiwgKGNoYXIgKikoc3J2Y21kKzIpLCAiIik7Ci0jZW5kaWYgLyogSUtTREIgKi8KLQlp ZiAoIUVOQUJMRUQoZW5fY3dkKSkgewkJLyogSWYgQ1dEIGRpc2FibGVkICovCi0JICAgIHpzdHJp cCgoY2hhciAqKShzcnZjbWQrMiksJm4yKTsgLyogYW5kIHRoZXkgaW5jbHVkZWQgYSBwYXRobmFt ZSwgKi8KLQkgICAgaWYgKHN0cmNtcCgoY2hhciAqKShzcnZjbWQrMiksbjIpKSB7IC8qIHJlZnVz ZS4gKi8KLQkJZXJycGt0KChDSEFSICopIkFjY2VzcyBkZW5pZWQiKTsKLQkJUkVTVU1FOwkJCS8q IFJlbWVtYmVyLCB0aGlzIGlzIG5vdCBhIGdvdG8hICovCi0JICAgIH0KLQl9Ci0JaWYgKHN0YXRl ID09IGdlbmVyaWMpIHsJCS8qIEl0J3MgT0sgdG8gZ28gYWhlYWQuICovCi0JICAgIGJpbmFyeSA9 IFhZRlRfVDsJCS8qIFVzZSB0ZXh0IG1vZGUgZm9yIHRoaXMuICovCi0JICAgIGlmICgJCQkvKiAo UkVTVU1FIGRpZG4ndCBjaGFuZ2Ugc3RhdGUpICovCi0jaWZkZWYgQ09NTUVOVAotCSAgICAgIHN5 c2NtZChUWVBDTUQsKGNoYXIgKikoc3J2Y21kKzIpKQkvKiBPbGQgd2F5ICovCi0jZWxzZQotCSAg ICAgIHNuZHR5cGUoKGNoYXIgKikoc3J2Y21kKzIpKSAvKiBOZXcgd2F5ICovCi0jZW5kaWYgLyog Q09NTUVOVCAqLwotCQkpCi0JICAgICAgQkVHSU4gc3Npbml0OwkJLyogT0sgKi8KLQkgICAgZWxz ZSB7CQkJLyogbm90IE9LICovCi0JCWVycnBrdCgoQ0hBUiAqKSJDYW4ndCB0eXBlIGZpbGUiKTsg LyogZ2l2ZSBlcnJvciBtZXNzYWdlICovCi0JCVJFU1VNRTsJCQkvKiB3YWl0IGZvciBuZXh0IHNl cnZlciBjb21tYW5kICovCi0JICAgIH0KLQl9Ci0gICAgfQotI2VuZGlmIC8qIE5PU0VSVkVSICov Ci19Ci0KLTxnZW5lcmljPm0gewkJCQkvKiBSRU1PVEUgTUtESVIgKi8KLSNpZm5kZWYgTk9TRVJW RVIKLSNpZmRlZiBDS19NS0RJUgotI2lmZGVmIENLU1lTTE9HCi0gICAgaWYgKGNreHN5c2xvZyA+ PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQotICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJz ZXJ2ZXIiLCAiUkVNT1RFIE1LRElSIiwgKGNoYXIgKilzcnZjbWQpOwotI2VuZGlmIC8qIENLU1lT TE9HICovCi0jaWZkZWYgSUtTREIKLSAgICBpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJS RU1PVEUgTUtESVIiLCAoY2hhciAqKShzcnZjbWQrMiksICIiKTsKLSNlbmRpZiAvKiBJS1NEQiAq LwotICAgIGlmICghRU5BQkxFRChlbl9ta2QpKSB7Ci0JZXJycGt0KChDSEFSICopIlJFTU9URSBN S0RJUiBkaXNhYmxlZCIpOwotCVJFU1VNRTsKLSAgICB9IGVsc2UgaWYgKCFFTkFCTEVEKGVuX2N3 ZCkpIHsJLyogSWYgQ1dEIGRpc2FibGVkICovCi0JZXJycGt0KChDSEFSICopIkRpcmVjdG9yeSBh Y2Nlc3MgcmVzdHJpY3RlZCIpOwotCVJFU1VNRTsJCQkJLyogUmVtZW1iZXIsIHRoaXMgaXMgbm90 IGEgZ290byEgKi8KLSAgICB9Ci0gICAgaWYgKHN0YXRlID09IGdlbmVyaWMpIHsJCS8qIE9LIHRv IGdvIGFoZWFkLiAqLwotCWNoYXIgKnAgPSBOVUxMOwotCXggPSBja21rZGlyKDAsKGNoYXIgKiko c3J2Y21kKzIpLCZwLDAsMSk7IC8qIE1ha2UgdGhlIGRpcmVjdG9yeSAqLwotCWlmICghcCkgcCA9 ICIiOwotCWlmICh4ID4gLTEpIHsKLQkgICAgZW5jc3RyKChDSEFSICopcCk7CQkvKiBPSyAtIGVu Y29kZSB0aGUgbmFtZSAqLwotCSAgICBhY2sxKGRhdGEpOwkJCS8qIFNlbmQgc2hvcnQtZm9ybSBy ZXNwb25zZSAqLwotCSAgICBzdWNjZXNzID0gMTsKLQkgICAgUkVTVU1FOwotCX0gZWxzZSB7CQkJ Lyogbm90IE9LICovCi0JICAgIGlmICghKnApIHAgPSAiRGlyZWN0b3J5IGNyZWF0aW9uIGZhaWx1 cmUiOwotCSAgICBlcnJwa3QoKENIQVIgKilwKTsJCS8qIGdpdmUgZXJyb3IgbWVzc2FnZSAqLwot CSAgICBSRVNVTUU7CQkJLyogV2FpdCBmb3IgbmV4dCBzZXJ2ZXIgY29tbWFuZCAqLwotCX0KLSAg ICB9Ci0jZWxzZQotICAgIGVycnBrdCgoQ0hBUiAqKSJSRU1PVEUgTUtESVIgbm90IGF2YWlsYWJs ZSIpOwotICAgIFJFU1VNRTsKLSNlbmRpZiAvKiBDS19NS0RJUiAqLwotI2VuZGlmIC8qIE5PU0VS VkVSICovCi19Ci0KLTxnZW5lcmljPmQgewkJCQkvKiBSRU1PVEUgUk1ESVIgKi8KLSNpZm5kZWYg Tk9TRVJWRVIKLSNpZmRlZiBDS19NS0RJUgotI2lmZGVmIENLU1lTTE9HCi0gICAgaWYgKGNreHN5 c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQotICAgICAgY2tzeXNsb2coU1lTTEdfUFIs IDEsICJzZXJ2ZXIiLCAiUkVNT1RFIFJNRElSIiwgKGNoYXIgKilzcnZjbWQpOwotI2VuZGlmIC8q IENLU1lTTE9HICovCi0jaWZkZWYgSUtTREIKLSAgICBpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3 aGF0LCJSRU1PVEUgUk1ESVIiLCAoY2hhciAqKShzcnZjbWQrMiksICIiKTsKLSNlbmRpZiAvKiBJ S1NEQiAqLwotICAgIGlmICghRU5BQkxFRChlbl9ybWQpKSB7Ci0JZXJycGt0KChDSEFSICopIlJF TU9URSBSTURJUiBkaXNhYmxlZCIpOwotCVJFU1VNRTsKLSAgICB9IGVsc2UgaWYgKCFFTkFCTEVE KGVuX2N3ZCkpIHsJLyogSWYgQ1dEIGRpc2FibGVkICovCi0JZXJycGt0KChDSEFSICopIkRpcmVj dG9yeSBhY2Nlc3MgcmVzdHJpY3RlZCIpOwotCVJFU1VNRTsJCQkJLyogUmVtZW1iZXIsIHRoaXMg aXMgbm90IGEgZ290byEgKi8KLSAgICB9Ci0gICAgaWYgKHN0YXRlID09IGdlbmVyaWMpIHsJCS8q IE9LIHRvIGdvIGFoZWFkLiAqLwotCWNoYXIgKnAgPSBOVUxMOwotCXggPSBja21rZGlyKDEsKGNo YXIgKikoc3J2Y21kKzIpLCZwLDAsMSk7Ci0JaWYgKCFwKSBwID0gIiI7Ci0JaWYgKHggPiAtMSkg ewotCSAgICBlbmNzdHIoKENIQVIgKilwKTsJCS8qIE9LIC0gZW5jb2RlIHRoZSBuYW1lICovCi0J ICAgIGFjazEoZGF0YSk7CQkJLyogU2VuZCBzaG9ydC1mb3JtIHJlc3BvbnNlICovCi0JICAgIHN1 Y2Nlc3MgPSAxOwotCSAgICBSRVNVTUU7Ci0JfSBlbHNlIHsJCQkvKiBub3QgT0sgKi8KLQkgICAg aWYgKCEqcCkgcCA9ICJEaXJlY3RvcnkgcmVtb3ZhbCBmYWlsdXJlIjsKLQkgICAgZXJycGt0KChD SEFSICopcCk7CQkvKiBnaXZlIGVycm9yIG1lc3NhZ2UgKi8KLQkgICAgUkVTVU1FOwkJCS8qIFdh aXQgZm9yIG5leHQgc2VydmVyIGNvbW1hbmQgKi8KLQl9Ci0gICAgfQotI2Vsc2UKLSAgICBlcnJw a3QoKENIQVIgKikiUkVNT1RFIFJNRElSIG5vdCBhdmFpbGFibGUiKTsKLSAgICBSRVNVTUU7Ci0j ZW5kaWYgLyogQ0tfTUtESVIgKi8KLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotfQotCi08Z2VuZXJp Yz5VIHsJCQkJLyogUkVNT1RFIFNQQUNFICovCi0jaWZuZGVmIE5PU0VSVkVSCi0jaWZkZWYgQ0tT WVNMT0cKLSAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCi0gICAg ICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJSRU1PVEUgU1BBQ0UiLCAoY2hhciAq KXNydmNtZCk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICBpZiAoIUVOQUJMRUQoZW5fc3Bh KSkgewotCWVycnBrdCgoQ0hBUiAqKSJSRU1PVEUgU1BBQ0UgZGlzYWJsZWQiKTsKLQlSRVNVTUU7 Ci0gICAgfSBlbHNlIHsKLQl4ID0gc3J2Y21kWzFdOwkJCS8qIEdldCBhcmVhIHRvIGNoZWNrICov Ci0JeCA9ICgoeCA9PSBOVUwpIHx8ICh4ID09IFNQKQotI2lmZGVmIE9TMgotCSAgICAgfHwgKHgg PT0gJyEnKSB8fCAoc3J2Y21kWzNdID09ICc6JykKLSNlbmRpZiAvKiBPUzIgKi8KLQkgICAgICk7 Ci0jaWZkZWYgSUtTREIKLQlpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LAotCQkJICAgICAg IlJFTU9URSBTUEFDRSIsCi0JCQkgICAgICAoeCA/ICIiIDogKGNoYXIgKilzcnZjbWQpLAotCQkJ ICAgICAgIiIKLQkJCSAgICAgICk7Ci0jZW5kaWYgLyogSUtTREIgKi8KLQlpZiAoIXggJiYgIUVO QUJMRUQoZW5fY3dkKSkgewkvKiBDV0QgZGlzYWJsZWQgKi8KLQkgICAgZXJycGt0KChDSEFSICop IkFjY2VzcyBkZW5pZWQiKTsgLyogYW5kIG5vbi1kZWZhdWx0IGFyZWEgZ2l2ZW4sICovCi0JICAg IFJFU1VNRTsJCQkvKiByZWZ1c2UuICovCi0JfSBlbHNlIHsKLSNpZmRlZiBPUzIKLV9QUk9UT1RZ UChpbnQgc25kc3BhY2UsKGludCkpOwotCSAgICBpZiAoc25kc3BhY2UoeCA/IHRvdXBwZXIoc3J2 Y21kWzJdKSA6IDApKSB7Ci0JCUJFR0lOIHNzaW5pdDsJCS8qIHNlbmQgdGhlIHJlcG9ydC4gKi8K LQkgICAgfSBlbHNlIHsJCQkvKiBJZiBub3Qgb2ssICovCi0JCWVycnBrdCgoQ0hBUiAqKSJDYW4n dCBzZW5kIHNwYWNlIik7IC8qIHNlbmQgZXJyb3IgbWVzc2FnZSAqLwotCQlSRVNVTUU7CQkJLyog YW5kIHJldHVybiB0byBzZXJ2ZXIgY29tbWFuZCB3YWl0ICovCi0JICAgIH0KLSNlbHNlCi0gICAg ICAgICAgICBpZiAobm9wdXNoKQotICAgICAgICAgICAgICB4ID0gMDsKLSAgICAgICAgICAgIGVs c2UKLSAgICAgICAgICAgICAgeCA9ICh4ID8gc3lzY21kKFNQQUNNRCwiIikgOiBzeXNjbWQoU1BB Q00yLChjaGFyICopKHNydmNtZCsyKSkpOwotCSAgICBpZiAoeCkgewkJCS8qIElmIHdlIGdvdCB0 aGUgaW5mbyAqLwotCQlCRUdJTiBzc2luaXQ7CQkvKiBzZW5kIGl0ICovCi0JICAgIH0gZWxzZSB7 CQkJLyogb3RoZXJ3aXNlICovCi0JCWVycnBrdCgoQ0hBUiAqKSJDYW4ndCBjaGVjayBzcGFjZSIp OyAvKiBzZW5kIGVycm9yIG1lc3NhZ2UgKi8KLQkJUkVTVU1FOwkJCS8qIGFuZCBhd2FpdCBuZXh0 IHNlcnZlciBjb21tYW5kICovCi0JICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLQl9Ci0gICAgfQot I2VuZGlmIC8qIE5PU0VSVkVSICovCi19Ci0KLTxnZW5lcmljPlcgewkJCQkvKiBSRU1PVEUgV0hP ICovCi0jaWZuZGVmIE5PU0VSVkVSCi0jaWZkZWYgQ0tTWVNMT0cKLSAgICBpZiAoY2t4c3lzbG9n ID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCi0gICAgICBja3N5c2xvZyhTWVNMR19QUiwgMSwg InNlcnZlciIsICJSRU1PVEUgV0hPIiwgKGNoYXIgKilzcnZjbWQpOwotI2VuZGlmIC8qIENLU1lT TE9HICovCi0jaWZkZWYgSUtTREIKLSAgICBpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJS RU1PVEUgV0hPIiwgKGNoYXIgKikoc3J2Y21kKzIpLCAiIik7Ci0jZW5kaWYgLyogSUtTREIgKi8K LSAgICBpZiAoIUVOQUJMRUQoZW5fd2hvKSkgewotCWVycnBrdCgoQ0hBUiAqKSJSRU1PVEUgV0hP IGRpc2FibGVkIik7Ci0JUkVTVU1FOwotICAgIH0gZWxzZSB7Ci0jaWZkZWYgT1MyCi1fUFJPVE9U WVAoaW50IHNuZHdobywoY2hhciAqKSk7Ci0JICAgIGlmIChzbmR3aG8oKGNoYXIgKikoc3J2Y21k KzIpKSkgewotCQlCRUdJTiBzc2luaXQ7CQkvKiB0cnkgdG8gc2VuZCBpdCAqLwotCSAgICB9IGVs c2UgewkJCS8qIElmIG5vdCBvaywgKi8KLQkJZXJycGt0KChDSEFSICopIkNhbid0IGRvIHdobyBj b21tYW5kIik7IC8qIHNlbmQgZXJyb3IgbXNnICovCi0JCVJFU1VNRTsJCQkvKiBhbmQgcmV0dXJu IHRvIHNlcnZlciBjb21tYW5kIHdhaXQgKi8KLQkgICAgfQotI2Vsc2UKLQlpZiAoc3lzY21kKFdI T0NNRCwoY2hhciAqKShzcnZjbWQrMikpKSB7Ci0JICAgIEJFR0lOIHNzaW5pdDsKLQl9IGVsc2Ug ewotCSAgICBlcnJwa3QoKENIQVIgKikiQ2FuJ3QgZG8gd2hvIGNvbW1hbmQiKTsKLQkgICAgUkVT VU1FOwotCX0KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB9Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8K LX0KLQotPGdlbmVyaWM+ViB7CQkJCS8qIFZhcmlhYmxlIHF1ZXJ5IG9yIHNldCAqLwotICAgIHJj ID0gc3J2X3F1ZXJ5KCk7Ci0gICAgZGVidWcoRjEwMSwic3J2X3F1ZXJ5IiwiIixyYyk7Ci0gICAg aWYgKHJjID4gLTEpIHJldHVybihyYyk7Ci19Ci0KLTxnZW5lcmljPk0gewkJCQkvKiBSRU1PVEUg TUVTU0FHRSBjb21tYW5kICovCi0jaWZuZGVmIE5PU0VSVkVSCi0gICAgZGVidWcoRjExMCwiUk1T RyIsKGNoYXIgKilzcnZjbWQrMiwwKTsKLSAgICB4eHNjcmVlbihTQ1JfTVMsMCwwTCwoY2hhciAq KShzcnZjbWQrMikpOwotICAgIGFjaygpOwotICAgIFJFU1VNRTsKLSNlbmRpZgkvKiBOT1NFUlZF UiAqLwotfQotCi08Z2VuZXJpYz5xIHsJCQkJLyogSW50ZXJydXB0ZWQgb3IgY29ubmVjdGlvbiBs b3N0ICovCi0jaWZuZGVmIE5PU0VSVkVSCi0gICAgaWYgKGZhdGFsaW8pIHsJCQkvKiBDb25uZWN0 aW9uIGxvc3QgKi8KLSNpZmRlZiBDS1NZU0xPRwotCWlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIg JiYgY2t4bG9nZ2luZykKLQkgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIkludGVy cnVwdGVkIiwgTlVMTCk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLQlzdWNjZXNzID0gMDsKLQl4 aXRzdGEgfD0gKHdoYXQgJiBXX0tFUk1JVCk7Ci0JUVVJVDsKLSAgICB9IGVsc2UgaWYgKGludGVy cnVwdGVkKSB7Ci0JaWYgKCFFTkFCTEVEKGVuX2ZpbikpIHsJCS8qIEN0cmwtQyB0eXBlZCAqLwot CSAgICBlcnJwa3QoKENIQVIgKikiUVVJVCBkaXNhYmxlZCIpOwotCSAgICBSRVNVTUU7Ci0JfSBl bHNlIHsKLSNpZmRlZiBDS1NZU0xPRwotCSAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYm IGNreGxvZ2dpbmcpCi0JICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiSW50 ZXJydXB0ZWQiLCBOVUxMKTsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotCSAgICBzdWNjZXNzID0g MDsKLQkgICAgeGl0c3RhIHw9ICh3aGF0ICYgV19LRVJNSVQpOwotCSAgICBRVUlUOwotCX0KLSAg ICB9IGVsc2UgewkJCQkvKiBTaG91bGRuJ3QgaGFwcGVuICovCi0JZGVidWcoRjEwMCwiU0VSVkVS IChnZW5lcmljKSBHT1QgVU5FWFBFQ1RFRCAncSciLCIiLDApOwotCVFVSVQ7Ci0gICAgfQotI2Vu ZGlmIC8qIE5PU0VSVkVSICovCi19Ci0KLTxnZW5lcmljPi4gewkJCQkvKiBBbnl0aGluZyBlbHNl IGluIHRoaXMgc3RhdGUuLi4gKi8KLSNpZm5kZWYgTk9TRVJWRVIKLSAgICBlcnJwa3QoKENIQVIg KikiVW5pbXBsZW1lbnRlZCBSRU1PVEUgY29tbWFuZCIpOyAvKiBDb21wbGFpbiAqLwotICAgIFJF U1VNRTsJCQkJLyogYW5kIHJldHVybiB0byBzZXJ2ZXIgY29tbWFuZCB3YWl0ICovCi0jZW5kaWYg LyogTk9TRVJWRVIgKi8KLX0KLQotPHJnZW4+cSB7CQkJCS8qIFNlbnQgQllFIGFuZCBjb25uZWN0 aW9uIGJyb2tlbiAqLwotICAgIGlmIChieWVfYWN0aXZlICYmIHR0Y2hrKCkgPCAwKSB7Ci0JbXNs ZWVwKDUwMCk7Ci0JYnllX2FjdGl2ZSA9IDA7Ci0JdHRjbG9zKDApOwkJCS8qIENsb3NlIG91ciBl bmQgb2YgdGhlIGNvbm5lY3Rpb24gKi8KLQljbHNvZigwKTsKLQlyZXR1cm4oc3VjY2VzcyA9IDEp OwotICAgIH0gZWxzZSB7CQkJCS8qIE90aGVyIGdlbmVyaWMgY29tbWFuZCAqLwotCXJldHVybihz dWNjZXNzID0gMCk7CQkvKiBvciBjb25uZWN0aW9uIG5vdCBicm9rZW4gKi8KLSAgICB9Ci19Ci0K LTxyZ2VuPlkgewkJCQkvKiBTaG9ydC1Gb3JtIHJlcGx5ICovCi0gICAgcmMgPSByY3Zfc2hvcnRy ZXBseSgpOwotICAgIGRlYnVnKEYxMDEsIjxyZ2VuPlkgcmN2X3Nob3J0cmVwbHkiLCIiLHJjKTsK LSAgICBpZiAocmMgPiAtMSkgcmV0dXJuKHJjKTsKLX0KLQotPHJnZW4scmZpbGU+RiB7CQkJCS8q IEZpbGUgaGVhZGVyICovCi0gICAgLyogY2hhciAqbjI7ICovCi0gICAgZXh0ZXJuIGludCByc247 Ci0gICAgZGVidWcoRjEwMSwiPHJmaWxlPkYgd2lubG8gMSIsIiIsd2lubG8pOwotICAgIHhmbGcg PSAwOwkJCQkvKiBOb3Qgc2NyZWVuIGRhdGEgKi8KLSAgICBpZiAoIWN6c2VlbikKLSAgICAgIGNh bmNlbCA9IDA7CQkJLyogUmVzZXQgY2FuY2VsbGF0aW9uIGNvdW50ZXIgKi8KLSNpZmRlZiBDQUxJ QlJBVEUKLSAgICBpZiAoZGVzdCA9PSBERVNUX04pCi0gICAgICBjYWxpYnJhdGUgPSAxOwotI2Vu ZGlmIC8qIENBTElCUkFURSAqLwotICAgIGlmICghcmN2ZmlsKGZpbG5hbSkpIHsJCS8qIEZpZ3Vy ZSBvdXQgbG9jYWwgZmlsZW5hbWUgKi8KLQllcnJwa3QoKENIQVIgKilyZl9lcnIpOwkJLyogVHJv dWJsZSAqLwotCVJFU1VNRTsKLSAgICB9IGVsc2UgewkJCQkvKiBSZWFsIGZpbGUsIE9LIHRvIHJl Y2VpdmUgKi8KLQljaGFyICogZm5wOwotCWRlYnVnKEYxMTEsIjxyZmlsZT5GIHdpbmxvIDIiLGZz cGVjLHdpbmxvKTsKLQlpZiAoZmlsY250ID09IDEpCQkvKiByY3ZmaWwgc2V0IHRoaXMgdG8gMSBm b3IgMXN0IGZpbGUgKi8KLQkgIGNyYzE2ID0gMEw7CQkJLyogQ2xlYXIgZmlsZSBDUkMgKi8KLQlm bnAgPSBmc3BlYzsJCQkvKiBUaGlzIGlzIHRoZSBmdWxsIHBhdGggKi8KLQlpZiAoc2VydmVyICYm ICFFTkFCTEVEKGVuX2N3ZCkgfHwgLyogaWYgRElTQUJMRSBDRCAqLwotCSAgICAhZmFja3BhdGgJ CQkgIC8qIG9yIEYtQUNLLVBBVEggT0ZGICovCi0JICAgICkgewotCSAgICB6c3RyaXAoZnNwZWMs JmZucCk7CQkvKiBkb24ndCBzZW5kIGJhY2sgZnVsbCBwYXRoICovCi0JfQotCWVuY3N0cigoQ0hB UiAqKWZucCk7Ci0JaWYgKGZhY2tidWcpCi0JICBhY2soKTsKLQllbHNlCi0JICBhY2sxKGRhdGEp OwkJCS8qIFNlbmQgaXQgYmFjayBpbiBBQ0sgKi8KLQlpbml0YXR0cigmaWF0dHIpOwkJLyogQ2xl YXIgZmlsZSBhdHRyaWJ1dGUgc3RydWN0dXJlICovCi0Jc3RyZWFtb24oKTsKLQlpZiAod2luZG93 KHdzbG90bikgPCAwKSB7CS8qIEFsbG9jYXRlIG5lZ290aWF0ZWQgd2luZG93IHNsb3RzICovCi0J ICAgIGVycnBrdCgoQ0hBUiAqKSJDYW4ndCBvcGVuIHdpbmRvdyIpOwotCSAgICBSRVNVTUU7Ci0J fQotI2lmZGVmIElLU0RCCi0JaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwKLQkJCSAgICAg IHNlcnZlciA/ICJTRVJWRVIiIDogIiIsCi0JCQkgICAgICAiUkVDRUlWRSIsCi0JCQkgICAgICBm c3BlYwotCQkJICAgICAgKTsKLSNlbmRpZiAvKiBJS1NEQiAqLwotCUJFR0lOIHJhdHRyOwkJCS8q IE5vdyBleHBlY3QgQXR0cmlidXRlIHBhY2tldHMgKi8KLSAgICB9Ci19Ci0KLTxyZ2VuLHJmaWxl PlggewkJCQkvKiBYLXBhY2tldCBpbnN0ZWFkIG9mIGZpbGUgaGVhZGVyICovCi0gICAgeGZsZyA9 IDE7CQkJCS8qIFNjcmVlbiBkYXRhICovCi0gICAgaWYgKCFjenNlZW4pCi0gICAgICBjYW5jZWwg PSAwOwkJCS8qIFJlc2V0IGNhbmNlbGxhdGlvbiBjb3VudGVyICovCi0gICAgYWNrKCk7CQkJCS8q IEFja25vd2xlZGdlIHRoZSBYLXBhY2tldCAqLwotICAgIGluaXRhdHRyKCZpYXR0cik7CQkJLyog SW5pdGlhbGl6ZSBhdHRyaWJ1dGUgc3RydWN0dXJlICovCi0gICAgc3RyZWFtb24oKTsKLSAgICBp ZiAod2luZG93KHdzbG90bikgPCAwKSB7CQkvKiBhbGxvY2F0ZSBuZWdvdGlhdGVkIHdpbmRvdyBz bG90cyAqLwotCWVycnBrdCgoQ0hBUiAqKSJDYW4ndCBvcGVuIHdpbmRvdyIpOwotCVJFU1VNRTsK LSAgICB9Ci0jaWZuZGVmIE5PU1BMCi0gICAgaWYgKHF1ZXJ5KSB7CQkJLyogSWYgdGhpcyBpcyB0 aGUgcmVzcG9uc2UgdG8gKi8KLQlxYnVmcCA9IHF1ZXJ5YnVmOwkJLyogYSBxdWVyeSB0aGF0IHdl IHNlbnQsIGluaXRpYWxpemUgKi8KLQlxYnVmbiA9IDA7CQkJLyogdGhlIHJlc3BvbnNlIGJ1ZmZl ciAqLwotCXF1ZXJ5YnVmWzBdID0gTlVMOwotICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotICAg IHdoYXQgPSBXX1JFTU87CQkJLyogd2UncmUgZG9pbmcgYSBSRU1PVEUgY29tbWFuZCAqLwotI2lm ZGVmIElLU0RCCi0gICAgaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwKLQkJCSAgc2VydmVy ID8gIlNFUlZFUiIgOiAiIiwKLQkJCSAgIlJFQ0VJVkUiLAotCQkJICBmc3BlYwotCQkJICApOwot I2VuZGlmIC8qIElLU0RCICovCi0gICAgQkVHSU4gcmF0dHI7CQkJLyogRXhwZWN0IEF0dHJpYnV0 ZSBwYWNrZXRzICovCi19Ci0KLTxyYXR0cj5BIHsJCQkJLyogQXR0cmlidXRlIHBhY2tldCAqLwot ICAgIGlmIChnYXR0cihyZGF0YXAsJmlhdHRyKSA9PSAwKSB7CS8qIFJlYWQgaW50byBhdHRyaWJ1 dGUgc3RydWN0dXJlICovCi0jaWZkZWYgQ0tfUkVTRU5ECi0JYWNrMSgoQ0hBUiAqKWlhdHRyLnJl cGx5LnZhbCk7CS8qIFJlcGx5IHdpdGggZGF0YSAqLwotI2Vsc2UKLQlhY2soKTsJCQkJLyogSWYg T0ssIGFja25vd2xlZGdlICovCi0jZW5kaWYgLyogQ0tfUkVTRU5EICovCi0gICAgfSBlbHNlIHsJ CQkJLyogT3RoZXJ3aXNlICovCi0JZXh0ZXJuIGxvbmcgZnNpemU7Ci0JY2hhciAqcjsKLQlyID0g Z2V0cmVhc29uKGlhdHRyLnJlcGx5LnZhbCk7Ci0JYWNrMSgoQ0hBUiAqKWlhdHRyLnJlcGx5LnZh bCk7CS8qIHJlZnVzZSB0byBhY2NlcHQgdGhlIGZpbGUgKi8KLQl4eHNjcmVlbihTQ1JfU1QsU1Rf UkVGVSwwTCxyKTsJLyogcmVhc29uICovCi0jaWZkZWYgVExPRwotCWlmICh0cmFsb2cgJiYgIXRs b2dmbXQpCi0JICBkb3hsb2cod2hhdCxmaWxuYW0sZnNpemUsYmluYXJ5LDEscik7Ci0jZW5kaWYg LyogVExPRyAqLwotICAgIH0KLX0KLQotPHJhdHRyPkQgewkJCQkvKiBGaXJzdCBkYXRhIHBhY2tl dCAqLwotICAgIGRlYnVnKEYxMDAsIjxyYXR0cj4gRCBmaXJzdGRhdGEiLCIiLDApOwotICAgIHJj ID0gcmN2X2ZpcnN0ZGF0YSgpOwotICAgIGRlYnVnKEYxMDEsInJjdl9maXJzdGRhdGEgcmMiLCIi LHJjKTsKLSAgICBpZiAocmMgPiAtMSkgcmV0dXJuKHJjKTsJCS8qIChzZWUgYmVsb3cpICovCi19 Ci0KLTxyZmlsZT5CIHsJCQkJLyogRU9ULCBubyBtb3JlIGZpbGVzICovCi0gICAgYWNrKCk7CQkJ CS8qIEFja25vd2xlZGdlIHRoZSBCIHBhY2tldCAqLwotICAgIHJlb3QoKTsJCQkJLyogRG8gRU9U IHRoaW5ncyAqLwotI2lmZGVmIENLX1RNUERJUgotLyogSWYgd2Ugd2VyZSBjZCdkIHRlbXBvcmFy aWx5IHRvIGFub3RoZXIgZGV2aWNlIG9yIGRpcmVjdG9yeSAuLi4gKi8KLSAgICBpZiAoZl90bXBk aXIpIHsKLQlpbnQgeDsKLQl4ID0gemNoZGlyKChjaGFyICopIHNhdmRpcik7CS8qIC4uLiByZXN0 b3JlIHByZXZpb3VzIGRpcmVjdG9yeSAqLwotCWZfdG1wZGlyID0gMDsJCQkvKiBhbmQgcmVtZW1i ZXIgd2UgZGlkIGl0LiAqLwotCWRlYnVnKEYxMTEsImNrY3Byby53IEIgdG1wZGlyIHJlc3Rvcmlu ZyIsc2F2ZGlyLHgpOwotICAgIH0KLSNlbmRpZiAvKiBDS19UTVBESVIgKi8KLSAgICBSRVNVTUU7 CQkJCS8qIGFuZCBxdWl0ICovCi19Ci0KLTxyZHBrdD5EIHsJCQkJLyogR290IERhdGEgcGFja2V0 ICovCi0gICAgZGVidWcoRjEwMSwiPHJkcGt0PkQgY3hzZWVuIiwiIixjeHNlZW4pOwotICAgIGRl YnVnKEYxMDEsIjxyZHBrdD5EIGN6c2VlbiIsIiIsY3pzZWVuKTsKLSAgICBpZiAoY3hzZWVuIHx8 IGN6c2VlbiB8fCBkaXNjYXJkKSB7CS8qIElmIGZpbGUgb3IgZ3JvdXAgaW50ZXJydXB0aW9uICov Ci0JQ0hBUiAqIG1zZzsKLQltc2cgPSBjenNlZW4gPyAoQ0hBUiAqKSJaIiA6IChDSEFSICopIlgi OwotI2lmZGVmIFNUUkVBTUlORwotCWlmIChzdHJlYW1pbmcpIHsJCS8qIE5lZWQgdG8gY2FuY2Vs ICovCi0JICAgIGRlYnVnKEYxMTEsIjxyZHBrdD5EIHN0cmVhbWluZyBjYW5jZWwiLG1zZyxjYW5j ZWwpOwotCSAgICBpZiAoY2FuY2VsKysgPT0gMCkgewkvKiBPbmx5IGRvIHRoaXMgb25jZSAqLwot CQlhY2sxKG1zZyk7CQkvKiBQdXQgIlgiIG9yICJaIiBpbiBBQ0sgKi8KLQkgICAgfSBlbHNlIGlm IChjenNlZW4pIHsKLQkJZXJycGt0KChDSEFSICopIlVzZXIgY2FuY2VsZWQiKTsKLQkJUkVTVU1F OwotCSAgICB9IGVsc2UgewotCQlmYXN0YWNrKCk7Ci0JICAgIH0KLQl9IGVsc2UKLSNlbmRpZiAv KiBTVFJFQU1JTkcgKi8KLQkgIGFjazEobXNnKTsKLSAgICB9IGVsc2UgewkJCQkvKiBObyBpbnRl cnJ1cHRpb24gKi8KLQlpbnQgcmMsIHFmOwotI2lmbmRlZiBOT1NQTAotCXFmID0gcXVlcnk7Ci0j ZWxzZQotCXFmID0gMDsKLSNlbmRpZiAvKiBOT1NQTCAqLwotI2lmZGVmIENLVFVOSU5HCi0JcmMg PSAoYmluYXJ5ICYmICFwYXJpdHkpID8KLQkgIGJkZWNvZGUocmRhdGFwLHB1dGZpbCk6Ci0JICAg IGRlY29kZShyZGF0YXAsIHFmID8gcHV0dHJtIDogcHV0ZmlsLCAxKTsKLSNlbHNlCi0JcmMgPSBk ZWNvZGUocmRhdGFwLCBxZiA/IHB1dHRybSA6IHB1dGZpbCwgMSk7Ci0jZW5kaWYgLyogQ0tUVU5J TkcgKi8KLQlpZiAocmMgPCAwKSB7Ci0JICAgIGRpc2NhcmQgPSAoa2VlcCA9PSAwIHx8IChrZWVw ID09IFNFVF9BVVRPICYmIGJpbmFyeSAhPSBYWUZUX1QpKTsKLQkgICAgZXJycGt0KChDSEFSICop IkVycm9yIHdyaXRpbmcgZGF0YSIpOyAvKiBJZiBmYWlsdXJlLCAqLwotCSAgICBSRVNVTUU7Ci0J fSBlbHNlCQkJCS8qIERhdGEgd3JpdHRlbiBPSywgc2VuZCBBQ0sgKi8KLSNpZmRlZiBTVFJFQU1J TkcKLQkgIGlmIChzdHJlYW1pbmcpCi0JICAgIGZhc3RhY2soKTsKLQllbHNlCi0jZW5kaWYgLyog U1RSRUFNSU5HICovCi0JICBhY2soKTsKLSAgICB9Ci19Ci0KLTxyYXR0cj5aIHsJCQkJLyogRU9G IGltbWVkaWF0ZWx5IGFmdGVyIEEtUGFja2V0LiAqLwotICAgIHJmX2VyciA9ICJDYW4ndCBjcmVh dGUgZmlsZSI7Ci0gICAgdGltaW50ID0gc190aW1pbnQ7Ci0gICAgaWYgKGRpc2NhcmQpIHsJCQkv KiBEaXNjYXJkaW5nIGEgcmVhbCBmaWxlLi4uICovCi0JeCA9IDE7Ci0gICAgfSBlbHNlIGlmICh4 ZmxnKSB7CQkJLyogSWYgc2NyZWVuIGRhdGEgKi8KLQlpZiAocmVtZmlsZSkgewkJCS8qIHJlZGly ZWN0ZWQgdG8gZmlsZSAqLwotCSAgICBpZiAocmVtcGlwZSkJCS8qIG9yIHBpcGUgKi8KLQkgICAg ICB4ID0gb3BlbmMoWk9GSUxFLHJlbWRlc3QpOyAvKiBQaXBlOiBzdGFydCBjb21tYW5kICovCi0J ICAgIGVsc2UKLQkgICAgICB4ID0gb3BlbmEocmVtZGVzdCwmaWF0dHIpOyAvKiBGaWxlOiBvcGVu IHdpdGggYXR0cmlidXRlcyAqLwotCX0gZWxzZSB7CQkJLyogb3RoZXJ3aXNlICovCi0JICAgIHgg PSBvcGVudCgmaWF0dHIpOwkJLyogIm9wZW4iIHRoZSBzY3JlZW4gKi8KLQl9Ci0jaWZkZWYgQ0FM SUJSQVRFCi0gICAgfSBlbHNlIGlmIChjYWxpYnJhdGUpIHsJCS8qIElmIGNhbGlicmF0aW9uIHJ1 biAqLwotCXggPSBja29wZW54KCZpYXR0cik7CQkvKiBkbyB0aGlzICovCi0jZW5kaWYgLyogQ0FM SUJSQVRFICovCi0gICAgfSBlbHNlIHsJCQkJLyogb3RoZXJ3aXNlICovCi0JeCA9IG9wZW5hKGZp bG5hbSwmaWF0dHIpOwkvKiBvcGVuIHRoZSBmaWxlLCB3aXRoIGF0dHJpYnV0ZXMgKi8KLQlpZiAo eCA9PSAtMTcpIHsJCQkvKiBSRUdFVCBza2lwcGVkIGJlY2F1c2Ugc2FtZSBzaXplICovCi0JICAg IGRpc2NhcmQgPSAxOwotCSAgICByZWplY3Rpb24gPSAxOwotCX0KLSAgICB9Ci0gICAgaWYgKCF4 IHx8IHJlb2YoZmlsbmFtLCAmaWF0dHIpIDwgMCkgeyAvKiBDbG9zZSBvdXRwdXQgZmlsZSAqLwot CWVycnBrdCgoQ0hBUiAqKSByZl9lcnIpOwkvKiBJZiBwcm9ibGVtLCBzZW5kIGVycm9yIG1zZyAq LwotCVJFU1VNRTsJCQkJLyogYW5kIHF1aXQgKi8KLSAgICB9IGVsc2UgewkJCQkvKiBvdGhlcndp c2UgKi8KLQlpZiAoeCA9PSAtMTcpCi0JICB4eHNjcmVlbihTQ1JfU1QsU1RfU0tJUCxTS1BfUkVT LCIiKTsKLQlhY2soKTsJCQkJLyogYWNrbm93bGVkZ2UgdGhlIEVPRiBwYWNrZXQgKi8KLQlCRUdJ TiByZmlsZTsJCQkvKiBhbmQgYXdhaXQgYW5vdGhlciBmaWxlICovCi0gICAgfQotfQotCi08cmRw a3Q+cSB7ICAJCQkJLyogQ3RybC1DIG9yIGNvbm5lY3Rpb24gbG9zcy4gKi8KLSAgICB0aW1pbnQg PSBzX3RpbWludDsKLSAgICB3aW5kb3coMSk7CQkJCS8qIFNldCB3aW5kb3cgc2l6ZSBiYWNrIHRv IDEuLi4gKi8KLSAgICBjeHNlZW4gPSAxOwotICAgIHggPSBjbHNvZigxKTsJCQkvKiBDbG9zZSBm aWxlICovCi0gICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsJCS8qIEZhaWxlZCAqLwotfQotCi08cmRw a3Q+WiB7CQkJCS8qIEVuZCBPZiBGaWxlIChFT0YpIFBhY2tldCAqLwotLyogIHdzbG90cyA9IDE7 CSovCQkJLyogKGRvbid0IHNldCkgV2luZG93IHNpemUgYmFjayB0byAxICovCi0jaWZuZGVmIENP SEVSRU5UIC8qIENvaGVyZW50IGNvbXBpbGVyIGJsb3dzIHVwIG9uIHRoaXMgc3dpdGNoKCkgc3Rh dGVtZW50LiAqLwotICAgIHggPSByZW9mKGZpbG5hbSwgJmlhdHRyKTsJCS8qIEhhbmRsZSB0aGUg RU9GIHBhY2tldCAqLwotICAgIHN3aXRjaCAoeCkgewkJCS8qIHJlb2YoKSBzZXRzIHRoZSBzdWNj ZXNzIGZsYWcgKi8KLSAgICAgIGNhc2UgLTU6CQkJCS8qIEhhbmRsZSBwcm9ibGVtcyAqLwotCWVy cnBrdCgoQ0hBUiAqKSJSRU5BTUUgZmFpbGVkIik7IC8qIEZhdGFsICovCi0JUkVTVU1FOwotCWJy ZWFrOwotICAgICAgY2FzZSAtNDoKLQllcnJwa3QoKENIQVIgKikiTU9WRSBmYWlsZWQiKTsJLyog RmF0YWwgKi8KLQlSRVNVTUU7Ci0JYnJlYWs7Ci0gICAgICBjYXNlIC0zOgkJCQkvKiBJZiBwcm9i bGVtLCBzZW5kIGVycm9yIG1zZyAqLwotCWVycnBrdCgoQ0hBUiAqKSJDYW4ndCBwcmludCBmaWxl Iik7IC8qIEZhdGFsICovCi0JUkVTVU1FOwotCWJyZWFrOwotICAgICAgY2FzZSAtMjoKLQllcnJw a3QoKENIQVIgKikiQ2FuJ3QgbWFpbCBmaWxlIik7IC8qIEZhdGFsICovCi0JUkVTVU1FOwotCWJy ZWFrOwotICAgICAgY2FzZSAyOgkJCQkvKiBOb3QgZmF0YWwgKi8KLSAgICAgIGNhc2UgMzoKLQl4 eHNjcmVlbihTQ1JfRU0sMCwwTCwiUmVjZWl2ZXIgY2FuJ3QgZGVsZXRlIHRlbXAgZmlsZSIpOwot CVJFU1VNRTsKLQlicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0JaWYgKHggPCAwKSB7CQkJLyogRmF0 YWwgKi8KLQkgICAgZXJycGt0KChDSEFSICopIkNhbid0IGNsb3NlIGZpbGUiKTsKLQkgICAgUkVT VU1FOwotCX0gZWxzZSB7CQkJLyogU3VjY2VzcyAqLwotI2lmbmRlZiBOT1NQTAotCSAgICBpZiAo cXVlcnkpCQkJLyogUXVlcnkgcmVwb25zZXMgZ2VuZXJhbGx5ICovCi0JICAgICAgY29ub2xsKCIi KTsJCS8qIGRvbid0IGhhdmUgbGluZSB0ZXJtaW5hdG9ycyAqLwotI2VuZGlmIC8qIE5PU1BMICov Ci0JICAgIGlmIChjenNlZW4pIHsJCS8qIEJhdGNoIGNhbmNlbGVkPyAqLwotCQlpZiAoY2FuY2Vs KysgPT0gMCkgewkvKiBJZiB3ZSBoYXZlbid0IHRyaWVkIHRoaXMgeWV0ICovCi0JCSAgICBhY2sx KChDSEFSICopIloiKTsJLyogVHJ5IGl0IG9uY2UgKi8KLQkJfSBlbHNlIHsJCS8qIE90aGVyd2lz ZSAqLwotCQkgICAgZXJycGt0KChDSEFSICopIlVzZXIgY2FuY2VsZWQiKTsgLyogcXVpdGUgd2l0 aCBFcnJvciAqLwotCQkgICAgUkVTVU1FOwotCQl9Ci0JICAgIH0gZWxzZQotCSAgICAgIGFjaygp OwkJCS8qIEFja25vd2xlZGdlIHRoZSBFT0YgcGFja2V0ICovCi0JICAgIEJFR0lOIHJmaWxlOwkJ LyogYW5kIGF3YWl0IGFub3RoZXIgZmlsZSAqLwotCX0KLSAgICB9Ci0jZWxzZQotICAgIGlmIChy ZW9mKGZpbG5hbSwgJmlhdHRyKSA8IDApIHsJLyogQ2xvc2UgdGhlIGZpbGUgKi8KLQllcnJwa3Qo KENIQVIgKikiRXJyb3IgYXQgZW5kIG9mIGZpbGUiKTsKLQlSRVNVTUU7Ci0gICAgfSBlbHNlIHsJ CQkJLyogcmVvZigpIHNldHMgc3VjY2VzcyBmbGFnICovCi0JYWNrKCk7Ci0JQkVHSU4gcmZpbGU7 Ci0gICAgfQotI2VuZGlmIC8qIENPSEVSRU5UICovCi19Ci0KLTxzc2luaXQ+WSB7CQkJCS8qIEFD SyBmb3IgU2VuZC1Jbml0ICovCi0gICAgc3BhcihyZGF0YXApOwkJCS8qIHNldCBwYXJhbWV0ZXJz IGZyb20gaXQgKi8KLSAgICBjYW5jZWwgPSAwOwotICAgIGlmIChiY3RmKSB7Ci0JYmN0dSA9IDM7 Ci0JYmN0bCA9IDM7Ci0gICAgfSBlbHNlIHsKLQliY3R1ID0gYmN0cjsJCQkvKiBzd2l0Y2ggdG8g YWdyZWVkLXVwb24gYmxvY2sgY2hlY2sgKi8KLQliY3RsID0gKGJjdHUgPT0gNCkgPyAyIDogYmN0 dTsJLyogU2V0IGJsb2NrLWNoZWNrIGxlbmd0aCAqLwotICAgIH0KLQotI2lmZGVmIENLX1JFU0VO RAotICAgIGlmICgoc2VuZG1vZGUgPT0gU01fUkVTRU5EKSAmJiAoIWF0Y2FwdSB8fCAhcnNjYXB1 KSkgeyAvKiBSRVNFTkQgKi8KLQllcnJwa3QoKENIQVIgKikgIlJFU0VORCBjYXBhYmlsaXRpZXMg bm90IG5lZ290aWF0ZWQiKTsKLQlSRVNVTUU7Ci0gICAgfSBlbHNlIHsKLSNlbmRpZiAvKiBDS19S RVNFTkQgKi8KLQl3aGF0ID0gV19TRU5EOwkJCS8qIFJlbWVtYmVyIHdlJ3JlIHNlbmRpbmcgKi8K LQlsYXN0eGZlciA9IFdfU0VORDsKLQl4ID0gc2ZpbGUoeGZsZyk7CQkvKiBTZW5kIFggb3IgRiBo ZWFkZXIgcGFja2V0ICovCi0JY2FuY2VsID0gMDsJCQkvKiBSZXNldCBjYW5jZWxsYXRpb24gY291 bnRlciAqLwotCWlmICh4KSB7CQkJLyogSWYgdGhlIHBhY2tldCB3YXMgc2VudCBPSyAqLwotCSAg ICBpZiAoIXhmbGcgJiYgZmlsY250ID09IDEpCS8qIGFuZCBpdCdzIGEgcmVhbCBmaWxlICovCi0J ICAgICAgY3JjMTYgPSAwTDsJCS8qIENsZWFyIHRoZSBmaWxlIENSQyAqLwotCSAgICByZXNldGMo KTsJCQkvKiByZXNldCBwZXItdHJhbnNhY3Rpb24gY291bnRlcnMgKi8KLQkgICAgcnRpbWVyKCk7 CQkJLyogcmVzZXQgdGltZXJzICovCi0jaWZkZWYgR0ZUSU1FUgotCSAgICByZnRpbWVyKCk7Ci0j ZW5kaWYgLyogR0ZUSU1FUiAqLwotCSAgICBzdHJlYW1vbigpOwkJCS8qIHR1cm4gb24gc3RyZWFt aW5nICovCi0jaWZkZWYgSUtTREIKLQkgICAgaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwK LQkJCQkgIChzZXJ2ZXIgPyAiU0VSVkVSIiA6ICIiKSwKLQkJCQkgICJTRU5EIiwKLQkJCQkgIGZp bG5hbQotCQkJCSAgKTsKLSNlbmRpZiAvKiBJS1NEQiAqLwotCSAgICBCRUdJTiBzc2ZpbGU7CQkv KiBhbmQgc3dpdGNoIHRvIHJlY2VpdmUtZmlsZSBzdGF0ZSAqLwotCX0gZWxzZSB7CQkJLyogb3Ro ZXJ3aXNlIHNlbmQgZXJyb3IgbXNnICYgcXVpdCAqLwotCSAgICBzID0geGZsZyA/ICJDYW4ndCBl eGVjdXRlIGNvbW1hbmQiIDogKGNoYXIgKillcGt0bXNnOwotCSAgICBpZiAoISpzKSBzID0gIkNh bid0IG9wZW4gZmlsZSI7Ci0JICAgIGVycnBrdCgoQ0hBUiAqKXMpOwotCSAgICBSRVNVTUU7Ci0J fQotI2lmZGVmIENLX1JFU0VORAotICAgIH0KLSNlbmRpZiAvKiBDS19SRVNFTkQgKi8KLX0KLQot LyoKLSAgVGhlc2Ugc3RhdGVzIGFyZSBuZWNlc3NhcnkgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJl IHdlIGdldCBhIHNlcnZlciBjb21tYW5kCi0gIHBhY2tldCAoUiwgRywgb3IgQykgcmVwbHkgd2l0 aCBhbiBTIHBhY2tldCwgYnV0IHRoZSBjbGllbnQgcmV0cmFuc21pdHMgdGhlCi0gIGNvbW1hbmQg cGFja2V0LiAgVGhlIGlucHV0KCkgZnVuY3Rpb24gZG9lc24ndCBjYXRjaCB0aGlzIGJlY2F1c2Ug dGhlIHBhY2tldAotICBudW1iZXIgaXMgc3RpbGwgemVyby4KLSovCi08c3Npbml0PlIgewkJCQkv KiBSIHBhY2tldCB3YXMgcmV0cmFuc21pdHRlZC4gKi8KLSAgICB4c2luaXQoKTsJCQkJLyogUmVz ZW5kIHBhY2tldCAwICovCi19Ci0KLTxzc2luaXQ+RyB7CQkJCS8qIFNhbWUgZGVhbCBpZiBHIHBh Y2tldCBjb21lcyBhZ2FpbiAqLwotICAgIHhzaW5pdCgpOwotfQotCi0vKiBzaG91bGQgcHJvYmFi bHkgYWRkIGNhc2VzIGZvciBPLCBXLCBWLCBILCBKLCAuLi4gKi8KLQotPHNzaW5pdD5DIHsJCQkJ LyogU2FtZSBkZWFsIGlmIEMgcGFja2V0IGNvbWVzIGFnYWluICovCi0gICAgeHNpbml0KCk7Ci19 Ci0KLTxzc2ZpbGU+WSB7CQkJCS8qIEFDSyBmb3IgRiBvciBYIHBhY2tldCAqLwotICAgIHNydnB0 ciA9IHNydmNtZDsJCQkvKiBQb2ludCB0byBzdHJpbmcgYnVmZmVyICovCi0gICAgZGVjb2RlKHJk YXRhcCxwdXRzcnYsMCk7CQkvKiBEZWNvZGUgZGF0YSBmaWVsZCwgaWYgYW55ICovCi0gICAgcHV0 c3J2KE5VTCk7CQkJLyogVGVybWluYXRlIHdpdGggbnVsbCAqLwotICAgIGZmYyA9IDBMOwkJCQkv KiBSZXNldCBmaWxlIGJ5dGUgY291bnRlciAqLwotICAgIGRlYnVnKEYxMDEsIjxzc2ZpbGU+WSBj eHNlZW4iLCIiLGN4c2Vlbik7Ci0gICAgaWYgKCpzcnZjbWQpIHsJCQkvKiBJZiByZW1vdGUgbmFt ZSB3YXMgcmVjb3JkZWQgKi8KLSAgICAgICAgaWYgKHNlbmRtb2RlICE9IFNNX1JFU0VORCkgewot CSAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0MgfHwgZmRpc3BsYSA9PSBYWUZEX1MpCi0JICAgICAg eHhzY3JlZW4oU0NSX0FOLDAsMEwsKGNoYXIgKilzcnZjbWQpOwotCSAgICB0bG9nKEYxMTAsIiBy ZW1vdGUgbmFtZToiLChjaGFyICopIHNydmNtZCwwTCk7Ci0JICAgIG1ha2VzdHIoJnBzcmZzcGVj LChjaGFyICopc3J2Y21kKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoY3hzZWVufHxjenNl ZW4pIHsJCS8qIEludGVycnVwdGVkPyAqLwotCWRlYnVnKEYxMDEsIjxzc2ZpbGU+WSBjYW5jZWxp bmciLCIiLDApOwotCXggPSBjbHNpZigpOwkJCS8qIENsb3NlIGlucHV0IGZpbGUgKi8KLQlzeGVv ZigxKTsJCQkvKiBTZW5kIEVPRihEKSAqLwotCUJFR0lOIHNzZW9mOwkJCS8qIGFuZCBzd2l0Y2gg dG8gRU9GIHN0YXRlLiAqLwotICAgIH0gZWxzZSBpZiAoYXRjYXB1KSB7CQkvKiBJZiBhdHRyaWJ1 dGVzIGFyZSB0byBiZSB1c2VkICovCi0JaWYgKHNhdHRyKHhmbGcgfCBzdGRpbmYsIDEpIDwgMCkg eyAvKiBzZW5kIHRoZW0gKi8KLQkgICAgZXJycGt0KChDSEFSICopIkNhbid0IHNlbmQgYXR0cmli dXRlcyIpOyAvKiBpZiBwcm9ibGVtLCBzYXkgc28gKi8KLQkgICAgUkVTVU1FOwkJCS8qIGFuZCBx dWl0ICovCi0JfSBlbHNlIEJFR0lOIHNzYXR0cjsJCS8qIGlmIG9rLCBzd2l0Y2ggdG8gYXR0cmli dXRlIHN0YXRlICovCi0gICAgfSBlbHNlIHsJCQkJLyogQXR0cmlidXRlcyBub3QgbmVnb3RpYXRl ZCAqLwotCWlmICh3aW5kb3cod3Nsb3RuKSA8IDApIHsJLyogT3BlbiB3aW5kb3cgKi8KLQkgICAg ZXJycGt0KChDSEFSICopIkNhbid0IG9wZW4gd2luZG93Iik7Ci0JICAgIFJFU1VNRTsKLQl9IGVs c2UgaWYgKCh4ID0gc2RhdGEoKSkgPT0gLTIpIHsgLyogU2VuZCBmaXJzdCBkYXRhIHBhY2tldCBk YXRhICovCi0JICAgIHdpbmRvdygxKTsJCQkvKiBDb25uZWN0aW9uIGxvc3QsIHJlc2V0IHdpbmRv dyAqLwotCSAgICB4ID0gY2xzaWYoKTsJCS8qIENsb3NlIGlucHV0IGZpbGUgKi8KLQkgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAwKTsJLyogUmV0dXJuIGZhaWx1cmUgKi8KLQl9IGVsc2UgaWYgKHggPT0g LTkpIHsJCS8qIFVzZXIgaW50ZXJydXB0ZWQgKi8KLQkgICAgZXJycGt0KChDSEFSICopIlVzZXIg Y2FuY2VsbGVkIik7IC8qIFNlbmQgRXJyb3IgcGFja2V0ICovCi0JICAgIHdpbmRvdygxKTsJCQkv KiBTZXQgd2luZG93IHNpemUgYmFjayB0byAxLi4uICovCi0JICAgIHRpbWludCA9IHNfdGltaW50 OwkJLyogUmVzdG9yZSB0aW1lb3V0ICovCi0JICAgIHJldHVybihzdWNjZXNzID0gMCk7CS8qIEZh aWxlZCAqLwotCX0gZWxzZSBpZiAoeCA8IDApIHsJCS8qIEVPRiAoZW1wdHkgZmlsZSkgb3IgaW50 ZXJydXB0ZWQgKi8KLQkgICAgd2luZG93KDEpOwkJCS8qIHB1dCB3aW5kb3cgc2l6ZSBiYWNrIHRv IDEsICovCi0JICAgIGRlYnVnKEYxMDEsIjxzc2ZpbGU+WSBjeHNlZW4iLCIiLGN4c2Vlbik7Ci0J ICAgIHggPSBjbHNpZigpOwkJLyogSWYgbm90IG9rLCBjbG9zZSBpbnB1dCBmaWxlLCAqLwotCSAg ICBpZiAoeCA8IDApCQkJLyogdHJlYXRpbmcgZmFpbHVyZSBhcyBpbnRlcnJ1cHRpb24gKi8KLQkg ICAgICBjeHNlZW4gPSAxOwkJLyogU2VuZCBFT0YgcGFja2V0ICovCi0JICAgIHNlb2YoY3hzZWVu fHxjenNlZW4pOwotCSAgICBCRUdJTiBzc2VvZjsJCS8qIGFuZCBzd2l0Y2ggdG8gRU9GIHN0YXRl LiAqLwotCX0gZWxzZSB7CQkJLyogRmlyc3QgZGF0YSBzZW50IE9LICovCi0JICAgIEJFR0lOIHNz ZGF0YTsJCS8qIEFsbCBvaywgc3dpdGNoIHRvIHNlbmQtZGF0YSBzdGF0ZSAqLwotCX0KLSAgICB9 Ci19Ci0KLTxzc2F0dHI+WSB7CQkJCS8qIEdvdCBBQ0sgdG8gQSBwYWNrZXQgKi8KLSAgICBmZmMg PSAwTDsJCQkJLyogUmVzZXQgZmlsZSBieXRlIGNvdW50ZXIgKi8KLSAgICBkZWJ1ZyhGMTAxLCI8 c3NhdHRyPlkgY3hzZWVuIiwiIixjeHNlZW4pOwotICAgIGlmIChjeHNlZW58fGN6c2VlbikgewkJ LyogSW50ZXJydXB0ZWQ/ICovCi0JZGVidWcoRjEwMSwiPHNhdHRyPlkgY2FuY2VsaW5nIiwiIiww KTsKLQl4ID0gY2xzaWYoKTsJCQkvKiBDbG9zZSBpbnB1dCBmaWxlICovCi0Jc3hlb2YoMSk7CQkJ LyogU2VuZCBFT0YoRCkgKi8KLQlCRUdJTiBzc2VvZjsJCQkvKiBhbmQgc3dpdGNoIHRvIEVPRiBz dGF0ZS4gKi8KLSAgICB9IGVsc2UgaWYgKHJzYXR0cihyZGF0YXApIDwgMCkgewkvKiBXYXMgdGhl IGZpbGUgcmVmdXNlZD8gKi8KLQlkaXNjYXJkID0gMTsJCQkvKiBTZXQgdGhlIGRpc2NhcmQgZmxh ZyAqLwotCWNsc2lmKCk7CQkJLyogQ2xvc2UgdGhlIGZpbGUgKi8KLQlzeGVvZigxKTsJCQkvKiBz ZW5kIEVPRiB3aXRoICJkaXNjYXJkIiBjb2RlICovCi0JQkVHSU4gc3Nlb2Y7CQkJLyogc3dpdGNo IHRvIHNlbmQtRU9GIHN0YXRlICovCi0gICAgfSBlbHNlIGlmICgoeCA9IHNhdHRyKHhmbGcgfCBz dGRpbmYsIDApKSA8IDApIHsgLyogU2VuZCBtb3JlPyAqLwotCWVycnBrdCgoQ0hBUiAqKSJDYW4n dCBzZW5kIGF0dHJpYnV0ZXMiKTsgLyogVHJvdWJsZS4uLiAqLwotCVJFU1VNRTsKLSAgICB9IGVs c2UgaWYgKHggPT0gMCkgewkJLyogTm8gbW9yZSB0byBzZW5kIHNvIG5vdyB0aGUgZGF0YSAqLwot CWlmICh3aW5kb3cod3Nsb3RuKSA8IDApIHsJLyogQWxsb2NhdGUgbmVnb3RpYXRlZCB3aW5kb3cg c2xvdHMgKi8KLQkgICAgZXJycGt0KChDSEFSICopIkNhbid0IG9wZW4gd2luZG93Iik7Ci0JICAg IFJFU1VNRTsKLQl9Ci0JaWYgKCh4ID0gc2RhdGEoKSkgPT0gLTIpIHsJLyogRmlsZSBhY2NlcHRl ZCwgc2VuZCBmaXJzdCBkYXRhICovCi0JICAgIHdpbmRvdygxKTsJCQkvKiBDb25uZWN0aW9uIGJy b2tlbiAqLwotCSAgICB4ID0gY2xzaWYoKTsJCS8qIENsb3NlIGZpbGUgKi8KLQkgICAgcmV0dXJu KHN1Y2Nlc3MgPSAwKTsJLyogUmV0dXJuIGZhaWx1cmUgKi8KLQl9IGVsc2UgaWYgKHggPT0gLTkp IHsJCS8qIFVzZXIgaW50ZXJydXB0ZWQgKi8KLQkgICAgZXJycGt0KChDSEFSICopIlVzZXIgY2Fu Y2VsbGVkIik7IC8qIFNlbmQgRXJyb3IgcGFja2V0ICovCi0JICAgIHdpbmRvdygxKTsJCQkvKiBT ZXQgd2luZG93IHNpemUgYmFjayB0byAxLi4uICovCi0JICAgIHRpbWludCA9IHNfdGltaW50OwkJ LyogUmVzdG9yZSB0aW1lb3V0ICovCi0JICAgIHJldHVybihzdWNjZXNzID0gMCk7CS8qIEZhaWxl ZCAqLwotCX0gZWxzZSBpZiAoeCA8IDApIHsJCS8qIElmIGRhdGEgd2FzIG5vdCBzZW50ICovCi0J ICAgIHdpbmRvdygxKTsJCQkvKiBwdXQgd2luZG93IHNpemUgYmFjayB0byAxLCAqLwotCSAgICBk ZWJ1ZyhGMTAxLCI8c3NhdHRyPlkgY3hzZWVuIiwiIixjeHNlZW4pOwotCSAgICBpZiAoY2xzaWYo KSA8IDApCQkvKiBDbG9zZSBpbnB1dCBmaWxlICovCi0JICAgICAgY3hzZWVuID0gMTsJCS8qIFNl bmQgRU9GIHBhY2tldCAqLwotCSAgICBzZW9mKGN4c2Vlbnx8Y3pzZWVuKTsKLQkgICAgQkVHSU4g c3Nlb2Y7CQkvKiBhbmQgc3dpdGNoIHRvIEVPRiBzdGF0ZS4gKi8KLQl9IGVsc2UgewotCSAgICBC RUdJTiBzc2RhdGE7CQkvKiBBbGwgb2ssIHN3aXRjaCB0byBzZW5kLWRhdGEgc3RhdGUgKi8KLQl9 Ci0gICAgfQotfQotCi08c3NkYXRhPnEgeyAgCQkJCS8qIEN0cmwtQyBvciBjb25uZWN0aW9uIGxv c3MuICovCi0gICAgd2luZG93KDEpOwkJCQkvKiBTZXQgd2luZG93IHNpemUgYmFjayB0byAxLi4u ICovCi0gICAgY3hzZWVuID0gMTsJCQkJLyogVG8gaW5kaWNhdGUgaW50ZXJydXB0aW9uICovCi0g ICAgeCA9IGNsc2lmKCk7CQkJLyogQ2xvc2UgZmlsZSAqLwotICAgIHJldHVybihzdWNjZXNzID0g MCk7CQkvKiBGYWlsZWQgKi8KLX0KLQotPHNzZGF0YT5ZIHsJCQkJLyogR290IEFDSyB0byBEYXRh IHBhY2tldCAqLwotICAgIGNhbm5lZChyZGF0YXApOwkJCS8qIENoZWNrIGlmIGZpbGUgdHJhbnNm ZXIgY2FuY2VsbGVkICovCi0gICAgZGVidWcoRjExMSwiPHNzZGF0YT5ZIGN4c2VlbiIscmRhdGFw LGN4c2Vlbik7Ci0gICAgZGVidWcoRjExMSwiPHNzZGF0YT5ZIGN6c2VlbiIscmRhdGFwLGN6c2Vl bik7Ci0gICAgaWYgKCh4ID0gc2RhdGEoKSkgPT0gLTIpIHsJCS8qIFRyeSB0byBzZW5kIG5leHQg ZGF0YSAqLwotCXdpbmRvdygxKTsJCQkvKiBDb25uZWN0aW9uIGxvc3QsIHJlc2V0IHdpbmRvdyAq LwotCXggPSBjbHNpZigpOwkJCS8qIENsb3NlIGZpbGUgKi8KLQlyZXR1cm4oc3VjY2VzcyA9IDAp OwkJLyogRmFpbGVkICovCi0gICAgfSBlbHNlIGlmICh4ID09IC05KSB7CQkvKiBVc2VyIGludGVy cnVwdGVkICovCi0JZXJycGt0KChDSEFSICopIlVzZXIgY2FuY2VsbGVkIik7IC8qIFNlbmQgRXJy b3IgcGFja2V0ICovCi0Jd2luZG93KDEpOwkJCS8qIFNldCB3aW5kb3cgc2l6ZSBiYWNrIHRvIDEu Li4gKi8KLQl0aW1pbnQgPSBzX3RpbWludDsJCS8qIFJlc3RvcmUgb3JpZ2luYWwgdGltZW91dCAq LwotCXJldHVybihzdWNjZXNzID0gMCk7CQkvKiBGYWlsZWQgKi8KLSAgICB9IGVsc2UgaWYgKHgg PCAwKSB7CQkJLyogRU9GIC0gZmluaXNoZWQgc2VuZGluZyBkYXRhICovCi0JZGVidWcoRjEwMSwi PHNzZGF0YT5ZIGN4c2VlbiIsIiIsY3hzZWVuKTsKLQl3aW5kb3coMSk7CQkJLyogU2V0IHdpbmRv dyBzaXplIGJhY2sgdG8gMS4uLiAqLwotCWlmIChjbHNpZigpIDwgMCkJCS8qIENsb3NlIGlucHV0 IGZpbGUgKi8KLQkgIGN4c2VlbiA9IDE7CQkJLyogU2VuZCBFT0YgcGFja2V0ICovCi0JZGVidWco RjEwMSwiPHNzZGF0YT5ZIENBTExJTkcgU0VPRigpIiwiIixjeHNlZW4pOwotCXNlb2YoY3hzZWVu fHxjenNlZW4pOwotCUJFR0lOIHNzZW9mOwkJCS8qIGFuZCBlbnRlciBzZW5kLWVvZiBzdGF0ZSAq LwotICAgIH0KLSAgICAvKiBOT1RFOiBJZiB4ID09IDAgaXQgbWVhbnMgd2UncmUgZHJhaW5pbmc6 IHNlZSBzZGF0YSgpISAqLwotfQotCi08c3Nlb2Y+WSB7CQkJCS8qIEdvdCBBQ0sgdG8gRU9GICov Ci0gICAgaW50IGcsIHhkaXNjYXJkOwotICAgIGNhbm5lZChyZGF0YXApOwkJCS8qIENoZWNrIGlm IGZpbGUgdHJhbnNmZXIgY2FuY2VsbGVkICovCi0gICAgZGVidWcoRjExMSwiPHNzZW9mPlkgY3hz ZWVuIixyZGF0YXAsY3hzZWVuKTsKLSAgICBkZWJ1ZyhGMTExLCI8c3Nlb2Y+WSBjenNlZW4iLHJk YXRhcCxjenNlZW4pOwotICAgIGRlYnVnKEYxMTEsIjxzc2VvZj5ZIGRpc2NhcmQiLHJkYXRhcCxk aXNjYXJkKTsKLSAgICB4ZGlzY2FyZCA9IGRpc2NhcmQ7Ci0gICAgZGlzY2FyZCA9IDA7Ci0gICAg c3VjY2VzcyA9IChjeHNlZW4gPT0gMCAmJiBjenNlZW4gPT0gMCk7IC8qIFRyYW5zZmVyIHN0YXR1 cy4uLiAqLwotICAgIGRlYnVnKEYxMDEsIjxzc2VvZj5ZIHN1Y2Nlc3MiLCIiLHN1Y2Nlc3MpOwot ICAgIGlmIChzdWNjZXNzICYmIHJlamVjdGlvbiA+IDApCSAgICAvKiBJZiByZWplY3RlZCwgc3Vj Y2VlZCBpZiAqLwotICAgICAgaWYgKHJlamVjdGlvbiAhPSAnIycgJiYJCSAgICAvKiByZWFzb24g d2FzIGRhdGUgKi8KLQkgIHJlamVjdGlvbiAhPSAxICYmIHJlamVjdGlvbiAhPSAnPycpIC8qIG9y IG5hbWU7ICovCi0Jc3VjY2VzcyA9IDA7CQkJICAgIC8qIGZhaWwgb3RoZXJ3aXNlLiAqLwotICAg IGN4c2VlbiA9IDA7CQkJCS8qIFRoaXMgZ29lcyBiYWNrIHRvIHplcm8uICovCi0gICAgaWYgKHN1 Y2Nlc3MpIHsJCQkvKiBPbmx5IGlmIHRyYW5zZmVyIHN1Y2NlZWRlZC4uLiAqLwotCXh4c2NyZWVu KFNDUl9TVCxTVF9PSywwTCwiIik7Ci0JaWYgKCF4ZGlzY2FyZCkgewotCSAgICBtYWtlc3RyKCZz ZnNwZWMscHNmc3BlYyk7CS8qIFJlY29yZCBmaWxlbmFtZXMgZm9yIFdIRVJFICovCi0JICAgIG1h a2VzdHIoJnNyZnNwZWMscHNyZnNwZWMpOwotCX0KLQlpZiAobW92aW5nKSB7CQkJLyogSWYgTU9W RSdpbmcgKi8KLQkgICAgeCA9IHpkZWxldChmaWxuYW0pOwkJLyogVHJ5IHRvIGRlbGV0ZSB0aGUg c291cmNlIGZpbGUgKi8KLSNpZmRlZiBUTE9HCi0JICAgIGlmICh0cmFsb2cpIHsKLQkJaWYgKHgg PiAtMSkgewotCQkgICAgdGxvZyhGMTEwLCIgZGVsZXRlZCIsZmlsbmFtLDApOwotCQl9IGVsc2Ug ewotCQkgICAgdGxvZyhGMTEwLCIgZGVsZXRlIGZhaWxlZDoiLGNrX2VycnN0cigpLDApOwotCQl9 Ci0JICAgIH0KLSNlbmRpZiAvKiBUTE9HICovCi0JfSBlbHNlIGlmIChzbmRfbW92ZSkgewkJLyog T3IgbW92ZSBpdCAqLwotCSAgICBpbnQgeDsKLQkgICAgeCA9IHpyZW5hbWUoZmlsbmFtLHNuZF9t b3ZlKTsKLSNpZmRlZiBUTE9HCi0JICAgIGlmICh0cmFsb2cpIHsKLQkJaWYgKHggPiAtMSkgewot CQkgICAgdGxvZyhGMTEwLCIgbW92ZWQgdG8gIixzbmRfbW92ZSwwKTsKLQkJfSBlbHNlIHsKLQkJ ICAgIHRsb2coRjExMCwiIG1vdmUgZmFpbGVkOiIsY2tfZXJyc3RyKCksMCk7Ci0JCX0KLQkgICAg fQotI2VuZGlmIC8qIFRMT0cgKi8KLQl9IGVsc2UgaWYgKHNuZF9yZW5hbWUpIHsJLyogT3IgcmVu YW1lIGl0ICovCi0JICAgIGNoYXIgKnMgPSBzbmRfcmVuYW1lOwkvKiBSZW5hbWluZyBzdHJpbmcg Ki8KLSNpZm5kZWYgTk9TUEwKLQkgICAgaW50IHk7CQkJLyogUGFzcyBpdCB0aHJ1IHRoZSBldmFs dWF0b3IgKi8KLQkgICAgZXh0ZXJuIGludCBjbWRfcXVvdGluZzsJLyogZm9yIFx2KGZpbGVuYW1l KSAqLwotCSAgICBpZiAoY21kX3F1b3RpbmcpIHsJCS8qIEJ1dCBvbmx5IGlmIGNtZF9xdW90aW5n IGlzIG9uICovCi0JCXkgPSBNQVhSUDsKLQkJcyA9IChjaGFyICopc3J2Y21kOwotCQl6enN0cmlu ZyhzbmRfcmVuYW1lLCZzLCZ5KTsKLQkJcyA9IChjaGFyICopc3J2Y21kOwotCSAgICB9Ci0jZW5k aWYgLyogTk9TUEwgKi8KLQkgICAgaWYgKHMpIGlmICgqcykgewotCQlpbnQgeDsKLQkJeCA9IHpy ZW5hbWUoZmlsbmFtLHMpOwotI2lmZGVmIFRMT0cKLQkgICAgaWYgKHRyYWxvZykgewotCQlpZiAo eCA+IC0xKSB7Ci0JCSAgICB0bG9nKEYxMTAsIiByZW5hbWVkIHRvIixzLDApOwotCQl9IGVsc2Ug ewotCQkgICAgdGxvZyhGMTEwLCIgcmVuYW1lIGZhaWxlZDoiLGNrX2VycnN0cigpLDApOwotCQl9 Ci0JICAgIH0KLSNlbmRpZiAvKiBUTE9HICovCi0jaWZkZWYgQ09NTUVOVAotCQkqcyA9IE5VTDsK LSNlbmRpZiAvKiBDT01NRU5UICovCi0JICAgIH0KLQl9Ci0gICAgfQotICAgIGlmIChjenNlZW4p IHsJCQkvKiBDaGVjayBncm91cCBpbnRlcnJ1cHRpb24gZmxhZyAqLwotCWcgPSAwOwkJCQkvKiBO byBtb3JlIGZpbGVzIGlmIGludGVycnVwdGVkICovCi0gICAgfSBlbHNlIHsJCQkJLyogT3RoZXJ3 aXNlLi4uICovCi0jaWZkZWYgQ09NTUVOVAotCS8qIFRoaXMgY29kZSBtYWtlcyBhbnkgb3BlbiBl cnJvciBmYXRhbCB0byBhIGZpbGUtZ3JvdXAgdHJhbnNmZXIuICovCi0JZyA9IGduZmlsZSgpOwot CWRlYnVnKEYxMTEsIjxzc2VvZj5ZIGduZmlsZSIsZmlsbmFtLGcpOwotCWlmIChnID4gMCkgewkJ CS8qIEFueSBtb3JlIGZpbGVzIHRvIHNlbmQ/ICovCi0JICAgIGlmIChzZmlsZSh4ZmxnKSkJCS8q IFllcywgdHJ5IHRvIHNlbmQgbmV4dCBmaWxlIGhlYWRlciAqLwotCSAgICAgIEJFR0lOIHNzZmls ZTsJCS8qIGlmIG9rLCBlbnRlciBzZW5kLWZpbGUgc3RhdGUgKi8KLQkgICAgZWxzZSB7CQkJLyog b3RoZXJ3aXNlICovCi0JCXMgPSB4ZmxnID8gIkNhbid0IGV4ZWN1dGUgY29tbWFuZCIgOiAoY2hh ciAqKWVwa3Rtc2c7Ci0JCWlmICghKnMpIHMgPSAiQ2FuJ3Qgb3BlbiBmaWxlIjsKLQkJZXJycGt0 KChDSEFSICopcyk7CS8qIHNlbmQgZXJyb3IgbWVzc2FnZSAqLwotCQlSRVNVTUU7CQkJLyogYW5k IHF1aXQgKi8KLQkgICAgfQotCX0gZWxzZSB7CQkJLyogTm8gbmV4dCBmaWxlICovCi0JICAgIHRz ZWNzID0gZ3RpbWVyKCk7CQkvKiBnZXQgc3RhdGlzdGljcyB0aW1lcnMgKi8KLSNpZmRlZiBHRlRJ TUVSCi0JICAgIGZwdHNlY3MgPSBnZnRpbWVyKCk7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotCSAg ICBzZW90KCk7CQkJLyogc2VuZCBFT1QgcGFja2V0ICovCi0JICAgIEJFR0lOIHNzZW90OwkJLyog ZW50ZXIgc2VuZC1lb3Qgc3RhdGUgKi8KLQl9Ci0jZWxzZSAgLyogQ09NTUVOVCAqLwotCXdoaWxl ICgxKSB7CQkJLyogS2VlcCB0cnlpbmcuLi4gKi8KLQkgICAgZyA9IGduZmlsZSgpOwkJLyogR2V0 IG5leHQgZmlsZSAqLwotCSAgICBkZWJ1ZyhGMTExLCI8c3Nlb2Y+WSBnbmZpbGUiLGZpbG5hbSxn KTsKLQkgICAgaWYgKGcgPT0gMCAmJiBnbmZlcnJvciA9PSAwKSAvKiBObyBtb3JlLCBzdG9wIHRy eWluZyAqLwotCSAgICAgIGJyZWFrOwotCSAgICBpZiAoZyA+IDApIHsJCS8qIEhhdmUgb25lICov Ci0JCWlmIChzZmlsZSh4ZmxnKSkgewkvKiBUcnkgdG8gb3BlbiBhbmQgc2VuZCBGIHBhY2tldCAq LwotCQkgICAgQkVHSU4gc3NmaWxlOwkvKiBJZiBPSywgZW50ZXIgc2VuZC1maWxlIHN0YXRlICov Ci0JCSAgICBicmVhazsJCS8qIGFuZCBicmVhayBvdXQgb2YgbG9vcC4gKi8KLQkJfQotCSAgICB9 IC8qIE90aGVyd2lzZSBrZWVwIHRyeWluZyB0byBnZXQgb25lIHdlIGNhbiBzZW5kLi4uICovCi0J fQotICAgIH0KLSAgICBpZiAoZyA9PSAwKSB7Ci0JZGVidWcoRjEwMSwiPHNzZW9mPlkgbm8gbW9y ZSBmaWxlcyIsIiIsY3pzZWVuKTsKLQl0c2VjcyA9IGd0aW1lcigpOwkJLyogR2V0IHN0YXRpc3Rp Y3MgdGltZXJzICovCi0jaWZkZWYgR0ZUSU1FUgotCWZwdHNlY3MgPSBnZnRpbWVyKCk7Ci0jZW5k aWYgLyogR0ZUSU1FUiAqLwotCXNlb3QoKTsJCQkJLyogU2VuZCBFT1QgcGFja2V0ICovCi0JQkVH SU4gc3Nlb3Q7CQkJLyogRW50ZXIgc2VuZC1lb3Qgc3RhdGUgKi8KLSAgICB9Ci0jZW5kaWYgLyog Q09NTUVOVCAqLwotfQotCi08c3Nlb3Q+WSB7CQkJCS8qIEdvdCBBQ0sgdG8gRU9UICovCi0gICAg ZGVidWcoRjEwMSwic3Nlb3QganVzdG9uZSIsIiIsanVzdG9uZSk7Ci0gICAgUkVTVU1FOwkJCQkv KiBBbGwgZG9uZSwganVzdCBxdWl0ICovCi19Ci0KLUUgewkJCQkJLyogR290IEVycm9yIHBhY2tl dCwgaW4gYW55IHN0YXRlICovCi0gICAgY2hhciAqcyA9ICIiOwotICAgIHdpbmRvdygxKTsJCQkJ LyogQ2xvc2Ugd2luZG93ICovCi0gICAgdGltaW50ID0gc190aW1pbnQ7CQkJLyogUmVzdG9yZSBv cmlnaW5hbCB0aW1lb3V0ICovCi0gICAgaWYgKCplcGt0bXNnKQkJCS8qIE1lc3NhZ2UgZnJvbSBF cnJvciBwYWNrZXQgKi8KLSAgICAgIHMgPSAoY2hhciAqKWVwa3Rtc2c7Ci0gICAgaWYgKCEqcykg ewkJCQkvKiBJZiBub3QgdGhlcmUgdGhlbiBtYXliZSBoZXJlICovCi0JcyA9IChjaGFyICopcmRh dGFwOwotCWNrc3RybmNweSgoY2hhciAqKWVwa3Rtc2csKGNoYXIgKilyZGF0YXAsUEtUTVNHTEVO KTsKLSAgICB9Ci0gICAgaWYgKCEqcykJCQkJLyogSG9wZWZ1bGx5IHdlJ2xsIG5ldmVyIHNlZSB0 aGlzLiAqLwotICAgICAgcyA9ICJVbmtub3duIGVycm9yIjsKLSAgICBzdWNjZXNzID0gMDsJCQkv KiBGb3IgSUYgU1VDQ0VTUy9GQUlMLiAqLwotICAgIGRlYnVnKEYxMDEsImNrY3Byby53IGp1c3Rv bmUgYXQgRSBwa3QiLCIiLGp1c3RvbmUpOwotCi0gICAgc3VjY2VzcyA9IDA7CQkJLyogVHJhbnNm ZXIgZmFpbGVkICovCi0gICAgeGZlcnN0YXQgPSBzdWNjZXNzOwkJCS8qIFJlbWVtYmVyIHRyYW5z ZmVyIHN0YXR1cyAqLwotICAgIGlmICghZXBrdHNlbnQpIHsKLQl4ID0gcXVpZXQ7IHF1aWV0ID0g MTsJCS8qIENsb3NlIGZpbGVzIHNpbGVudGx5LCAqLwotCWVwa3RyY3ZkID0gMTsJCQkvKiBQcmV2 ZW50IG1lc3NhZ2VzIGZyb20gY2xzb2YoKSAqLwotCWNsc2lmKCk7Ci0JY2xzb2YoMSk7IAkJCS8q IGRpc2NhcmRpbmcgYW55IG91dHB1dCBmaWxlLiAqLwotCWVybXNnKHMpOwkJCS8qIElzc3VlIHRo ZSBtZXNzYWdlIChjYWxscyBzY3JlZW4pLiAqLwotCXF1aWV0ID0geDsJCQkvKiBSZXN0b3JlIHF1 aWV0IHN0YXRlICovCi0gICAgfQotICAgIHRzdGF0cygpOwkJCQkvKiBHZXQgc3RhdHMgKi8KLS8q Ci0gIElmIHdlIGFyZSBleGVjdXRpbmcgY29tbWFuZHMgZnJvbSBhIGNvbW1hbmQgZmlsZSBvciBt YWNybywgbGV0IHRoZSBjb21tYW5kCi0gIGZpbGUgb3IgbWFjcm8gZGVjaWRlIHdoZXRoZXIgdG8g ZXhpdCwgYmFzZWQgb24gU0VUIHsgVEFLRSwgTUFDUk8gfSBFUlJPUi4KLSovCi0gICAgaWYgKAot I2lmbmRlZiBOT0lDUAotCSF4Y21kc3JjICYmCi0jZW5kaWYgLyogTk9JQ1AgKi8KLQliYWNrZ3Jk ICYmICFzZXJ2ZXIpCi0gICAgICBmYXRhbCgiUHJvdG9jb2wgZXJyb3IiKTsKLSAgICB4aXRzdGEg fD0gKHdoYXQgJiBXX0tFUk1JVCk7CS8qIFNhdmUgdGhpcyBmb3IgZG9leGl0KCkuICovCi0jaWZk ZWYgQ0tfVE1QRElSCi0vKiBJZiB3ZSB3ZXJlIGNkJ2QgdGVtcG9yYXJpbHkgdG8gYW5vdGhlciBk ZXZpY2Ugb3IgZGlyZWN0b3J5IC4uLiAqLwotICAgIGlmIChmX3RtcGRpcikgewotCWludCB4Owot CXggPSB6Y2hkaXIoKGNoYXIgKikgc2F2ZGlyKTsJLyogLi4uIHJlc3RvcmUgcHJldmlvdXMgZGly ZWN0b3J5ICovCi0JZl90bXBkaXIgPSAwOwkJCS8qIGFuZCByZW1lbWJlciB3ZSBkaWQgaXQuICov Ci0JZGVidWcoRjExMSwiY2tjcHJvLncgRSB0bXBkaXIgcmVzdG9yZWQiLHNhdmRpcix4KTsKLSAg ICB9Ci0jZW5kaWYgLyogQ0tfVE1QRElSICovCi0jaWZkZWYgSUtTREIKLSAgICBpZiAoaWtkYm9w ZW4pIHNsb3RzdGF0ZSh3aGF0LCJFUlJPUiIsIChjaGFyICopZXBrdG1zZywgIiIpOwotI2VuZGlm IC8qIElLU0RCICovCi0gICAgUkVTVU1FOwotfQotCi1xIHsgc3VjY2VzcyA9IDA7IFFVSVQ7IH0J CS8qIEN0cmwtQyBvciBjb25uZWN0aW9uIGxvc3MuICovCi0KLS4gewkJCQkJLyogQW55dGhpbmcg bm90IGFjY291bnRlZCBmb3IgYWJvdmUgKi8KLSAgICBlcnJwa3QoKENIQVIgKikiVW5leHBlY3Rl ZCBwYWNrZXQgdHlwZSIpOyAvKiBHaXZlIGVycm9yIG1lc3NhZ2UgKi8KLSAgICB3aW5kb3coMSk7 Ci0gICAgeGl0c3RhIHw9ICh3aGF0ICYgV19LRVJNSVQpOwkvKiBTYXZlIHRoaXMgZm9yIGRvZXhp dCgpLiAqLwotICAgIFJFU1VNRTsJCQkJLyogYW5kIHF1aXQgKi8KLX0KLQotJSUKLQotLyoKLSAg RnJvbSBoZXJlIGRvd24gdG8gcHJvdG8oKSBhcmUgcm91dGluZXMgdGhhdCB3ZXJlIG1vdmVkIG91 dCBvZiB0aGUgc3RhdGUKLSAgdGFibGUgc3dpdGNoZXIgYmVjYXVzZSB0aGUgcmVzdWx0aW5nIHN3 aXRjaCgpIGhhZCBiZWNvbWUgdG9vIGxhcmdlLgotICBUbyBtb3ZlIHRoZSBjb250ZW50cyBvZiBh IHN0YXRlLXRhYmxlIGNhc2UgdG8gYSByb3V0aW5lOgotICAgIDEuIEFkZCBhIHByb3RvdHlwZSB0 byB0aGUgbGlzdCBhYm92ZSB0aGUgc3RhdGUgdGFibGUgc3dpdGNoZXIuCi0gICAgMi4gTWFrZSBh IHJvdXRpbmUgd2l0aCBhbiBhcHByb3ByaWF0ZSBuYW1lLCByZXR1cm5pbmcgaW50LgotICAgIDMu IE1vdmUgdGhlIGNvZGUgaW50byBpdC4KLSAgICA0LiBQdXQgYSBjYWxsIHRvIHRoZSBuZXcgcm91 dGluZSBpbiB0aGUgZm9ybWVyIHNwb3Q6Ci0gICAgICAgICByYyA9IG5hbWVfb2Zfcm91dGluZSgp OwotICAgICAgICAgaWYgKHJjID4gLTEpIHJldHVybihyYyk7Ci0gICAgNS4gQWRkICJyZXR1cm4o LTEpOyIgYWZ0ZXIgZXZlcnkgUkVTVU1FLCBTRVJWRSwgb3IgQkVHSU4gbWFjcm8gYW5kCi0gICAg ICAgYXQgdGhlIGVuZCBpZiB0aGUgY29kZSBpcyBvcGVuLWVuZGVkLgotKi8KLXN0YXRpYyBpbnQK LXJjdl9maXJzdGRhdGEoKSB7Ci0gICAgZXh0ZXJuIGludCBkaXNwb3M7Ci0gICAgZGVidWcoRjEw MSwicmN2X2ZpcnN0ZGF0YSIsIiIsZGlzcG9zKTsKLQotICAgIGlmIChkaXNjYXJkKSB7CQkJLyog aWYgd2UncmUgZGlzY2FyZGluZyB0aGUgZmlsZSAqLwotCWFjazEoKENIQVIgKikiWCIpOwkJLyog anVzdCBhY2sgdGhlIGRhdGEgbGlrZSB0aGlzLiAqLwotCWNhbmNlbCsrOwkJCS8qIGFuZCBjb3Vu dCBpdCAqLwotCUJFR0lOIHJkcGt0OwkJCS8qIGFuZCB3YWl0IGZvciBtb3JlIGRhdGEgcGFja2V0 cy4gKi8KLQlyZXR1cm4oLTEpOwotICAgIH0gZWxzZSB7CQkJCS8qIE5vdCBkaXNjYXJkaW5nLiAq LwotCXJmX2VyciA9ICJDYW4ndCBvcGVuIGZpbGUiOwotCWlmICh4ZmxnKSB7CQkJLyogSWYgc2Ny ZWVuIGRhdGEgKi8KLQkgICAgaWYgKHJlbWZpbGUpIHsJCS8qIHJlZGlyZWN0ZWQgdG8gZmlsZSAq LwotCQlpZiAocmVtcGlwZSkJCS8qIG9yIHBpcGUgKi8KLQkJICB4ID0gb3BlbmMoWk9GSUxFLHJl bWRlc3QpOyAvKiBQaXBlOiBzdGFydCBjb21tYW5kICovCi0JCWVsc2UKLQkJICB4ID0gb3BlbmEo cmVtZGVzdCwmaWF0dHIpOyAvKiBGaWxlOiBvcGVuIHdpdGggYXR0cmlidXRlcyAqLwotCSAgICB9 IGVsc2UgewkJCS8qIG90aGVyd2lzZSAqLwotCQl4ID0gb3BlbnQoJmlhdHRyKTsJLyogIm9wZW4i IHRoZSBzY3JlZW4gKi8KLQkgICAgfQotCX0gZWxzZSB7CQkJLyogb3RoZXJ3aXNlICovCi0jaWZk ZWYgQ0FMSUJSQVRFCi0JICAgIGlmIChjYWxpYnJhdGUpIHsJCS8qIElmIGNhbGlicmF0aW9uIHJ1 biAqLwotCQl4ID0gY2tvcGVueCgmaWF0dHIpOwkvKiBvcGVuIG5vdGhpbmcgKi8KLSNpZmRlZiBT VFJFQU1JTkcKLQkJaWYgKHN0cmVhbWluZykJCS8qIFN0cmVhbWluZyAqLwotCQkgIGZhc3RhY2so KTsJCS8qIEFDSyB3aXRob3V0IEFDS2luZy4gKi8KLQkJZWxzZQotI2VuZGlmIC8qIFNUUkVBTUlO RyAqLwotCQkgIGFjaygpOwkJLyogU2VuZCByZWFsIEFDSyAqLwotCQlCRUdJTiByZHBrdDsJCS8q IFByb2NlZWQgdG8gbmV4dCBzdGF0ZSAqLwotCQlyZXR1cm4oLTEpOwotCSAgICB9IGVsc2UKLSNl bmRpZiAvKiBDQUxJQlJBVEUgKi8KLSNpZmRlZiBVTklYCi0vKgotICBJbiBVTklYIHdlIGNhbiBw aXBlIHRoZSBmaWxlIGRhdGEgaW50byB0aGUgbWFpbCBwcm9ncmFtLCB3aGljaCBpcyB0byBiZQot ICBwcmVmZXJyZWQgdG8gd3JpdGluZyBpdCBvdXQgdG8gYSB0ZW1wIGZpbGUgYW5kIHRoZW4gbWFp bGluZyBpdCBhZnRlcndhcmRzLgotICBUaGlzIGRlcGVuZHMgcmF0aGVyIGhlYXZpbHkgb24gYWxs IFVOSVhlcyBoYXZpbmcgYSBtYWlsIGNvbW1hbmQgdGhhdAotICBhY2NlcHRzICctcyAic3ViamVj dCInIG9uIHRoZSBjb21tYW5kIGxpbmUuICBNQUlMQ01EIChlLmcuIG1haWwsIE1haWwsIG1haWx4 KQotICBpcyBkZWZpbmVkIGluIGNrdWZpby5jLgotKi8KLQkgICAgaWYgKGRpc3BvcyA9PSAnTScp IHsJLyogTWFpbC4uLiAqLwotCQljaGFyICpzOwotCQljaGFyICogdG1wID0gTlVMTDsKLQkJaW50 IG4gPSAwOwotCQlleHRlcm4gY2hhciAqTUFJTENNRDsKLQkJcyA9IGlhdHRyLmRpc3AudmFsICsg MTsKLQkJbiA9IChpbnQpc3RybGVuKE1BSUxDTUQpICsgICAgLyogTWFpbCBjb21tYW5kICovCi0J CSAgKGludClzdHJsZW4ocykgKwkgICAgICAvKiBhZGRyZXNzICovCi0JCSAgKGludClzdHJsZW4o b2ZpbG5hbSkgKyAzMjsgIC8qIHN1YmplY3QgKi8KLQkJaWYgKHRtcCA9IChjaGFyICopbWFsbG9j KG4pKSB7Ci0JCSAgICBja21ha3htc2codG1wLG4sCi0JCQkgICAgICBNQUlMQ01ELCIgLXMgXCIi LG9maWxuYW0sIlwiICIscywKLQkJCSAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxM LE5VTEwpOwotCQkgICAgZGVidWcoRjExMSwicmN2X2ZpcnNkYXRhIG1haWwiLHRtcCwoaW50KXN0 cmxlbih0bXApKTsKLQkJICAgIHggPSBvcGVuYyhaT0ZJTEUsKGNoYXIgKil0bXApOwotCQkgICAg ZnJlZSh0bXApOwotCQl9IGVsc2UKLQkJICB4ID0gMDsKLQkgICAgfSBlbHNlIGlmIChkaXNwb3Mg PT0gJ1AnKSB7IC8qIERpdHRvIGZvciBwcmludCAqLwotCQljaGFyICogdG1wID0gTlVMTDsKLQkJ aW50IG47Ci0JCWV4dGVybiBjaGFyICpQUklOVENNRDsKLQkJbiA9IChpbnQpc3RybGVuKFBSSU5U Q01EKSArIChpbnQpc3RybGVuKGlhdHRyLmRpc3AudmFsKzEpICsgNDsKLQkJaWYgKHRtcCA9IChj aGFyICopbWFsbG9jKG4pKSB7Ci0JCSAgICBzcHJpbnRmKHRtcCwJLyogc2FmZSAocHJlY2hlY2tl ZCkgKi8KLQkJCSAgICAiJXMgJXMiLCBQUklOVENNRCwgaWF0dHIuZGlzcC52YWwgKyAxKTsKLQkJ ICAgIHggPSBvcGVuYyhaT0ZJTEUsKGNoYXIgKil0bXApOwotCQkgICAgZnJlZSh0bXApOwotCQl9 IGVsc2UKLQkJICB4ID0gMDsKLQkgICAgfSBlbHNlCi0jZW5kaWYgLyogVU5JWCAqLwotCSAgICAg IHggPSBvcGVuYShmaWxuYW0sJmlhdHRyKTsJLyogb3BlbiB0aGUgZmlsZSwgd2l0aCBhdHRyaWJ1 dGVzICovCi0JfQotCWlmICh4KSB7CQkJLyogSWYgZmlsZSB3YXMgb3BlbmVkIG9rICovCi0JICAg IGludCByYywgcWY7Ci0jaWZuZGVmIE5PU1BMCi0JICAgIHFmID0gcXVlcnk7Ci0jZWxzZQotCSAg ICBxZiA9IDA7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmZGVmIENLVFVOSU5HCi0JICAgIHJj ID0gKGJpbmFyeSAmJiAhcGFyaXR5KSA/Ci0JICAgICAgYmRlY29kZShyZGF0YXAscHV0ZmlsKToK LQkgICAgICAgZGVjb2RlKHJkYXRhcCwgcWYgPyBwdXR0cm0gOiBwdXRmaWwsIDEpOwotI2Vsc2UK LQkgICAgcmMgPSBkZWNvZGUocmRhdGFwLCBxZiA/IHB1dHRybSA6IHB1dGZpbCwgMSk7Ci0jZW5k aWYgLyogQ0tUVU5JTkcgKi8KLQkgICAgaWYgKHJjIDwgMCkgewotCQllcnJwa3QoKENIQVIgKiki RXJyb3Igd3JpdGluZyBkYXRhIik7Ci0JCVJFU1VNRTsKLQkJcmV0dXJuKC0xKTsKLQkgICAgfQot I2lmZGVmIFNUUkVBTUlORwotCSAgICBpZiAoc3RyZWFtaW5nKQkJLyogU3RyZWFtaW5nIHdhcyBu ZWdvdGlhdGVkICovCi0JICAgICAgZmFzdGFjaygpOwkJLyogQUNLIHdpdGhvdXQgQUNLaW5nLiAq LwotCSAgICBlbHNlCi0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0JICAgICAgYWNrKCk7CQkJLyog YWNrbm93bGVkZ2UgaXQgKi8KLQkgICAgQkVHSU4gcmRwa3Q7CQkvKiBhbmQgc3dpdGNoIHRvIHJl Y2VpdmUtZGF0YSBzdGF0ZSAqLwotCSAgICByZXR1cm4oLTEpOwotCX0gZWxzZSB7CQkJLyogb3Ro ZXJ3aXNlICovCi0JICAgIGVycnBrdCgoQ0hBUiAqKSByZl9lcnIpOwkvKiBzZW5kIGVycm9yIHBh Y2tldCAqLwotICAgIAkgICAgUkVTVU1FOwkJCS8qIGFuZCBxdWl0LiAqLwotCSAgICByZXR1cm4o LTEpOwotCX0KLSAgICB9Ci19Ci0KLXN0YXRpYyBpbnQKLXJjdl9zaG9ydHJlcGx5KCkgewotI2lm ZGVmIFBLVFpFUk9IQUNLCi0gICAgc3VjY2VzcyA9IDA7Ci0gICAgZGVidWcoRjExMSwicmN2X3No b3J0cmVwbHkiLHJkYXRhcCxpcGt0bGVuKTsKLSAgICBpZiAoaXBrdGFja1swXSAmJiAhc3RybmNt cChpcGt0YWNrLChjaGFyICopcmRhdGFwLGlwa3RsZW4pKSB7Ci0JLyogTm8gaXQncyB0aGUgQUNL IHRvIHRoZSBJIHBhY2tldCBhZ2FpbiAqLwotCXggPSBzY21kKHZjbWQsKENIQVIgKiljbWFyZyk7 CS8qIFNvIHNlbmQgdGhlIFJFTU9URSBjb21tYW5kIGFnYWluICovCi0JLyogTWF5YmUgdGhpcyBz aG91bGQgYmUgcmVzZW5kKCkgKi8KLQlkZWJ1ZyhGMTEwLCJJUEtUWkVST0hBQ0siLGlwa3RhY2ss eCk7Ci0JaWYgKHggPCAwKSB7Ci0JICAgIGVycnBrdCgoQ0hBUiAqKXNyaW1zZyk7Ci0JICAgIFJF U1VNRTsKLQkgICAgcmV0dXJuKC0xKTsKLQl9Ci0gICAgfSBlbHNlIHsKLQlpcGt0YWNrWzBdID0g TlVMOwotI2VuZGlmIC8qIFBLVFpFUk9IQUNLICovCi0JdXJzZXJ2ZXIgPSAxOwotI2lmbmRlZiBO T1NFUlZFUgotI2lmbmRlZiBOT1NQTAotCWlmIChxdWVyeSkgewkJCS8qIElmIHRvIHF1ZXJ5LCAq LwotCSAgICBxYnVmcCA9IHF1ZXJ5YnVmOwkJLyogIGluaXRpYWxpemUgcXVlcnkgcmVzcG9uc2Ug YnVmZmVyICovCi0JICAgIHFidWZuID0gMDsKLQkgICAgcXVlcnlidWZbMF0gPSBOVUw7Ci0JfQot I2VuZGlmIC8qIE5PU1BMICovCi0JeCA9IDE7Ci0JaWYgKHJlbWZpbGUpIHsJCQkvKiBSZXNwb25z ZSByZWRpcmVjdGVkIHRvIGZpbGUgKi8KLQkgICAgcmZfZXJyID0gIkNhbid0IG9wZW4gZmlsZSI7 Ci0JICAgIGlmIChyZW1waXBlKQkJLyogb3IgcGlwZSAqLwotCSAgICAgIHggPQotI2lmbmRlZiBO T1BVU0gKLQkJenhjbWQoWk9GSUxFLHJlbWRlc3QpCS8qIFBpcGU6IFN0YXJ0IGNvbW1hbmQgKi8K LSNlbHNlCi0JCTAKLSNlbmRpZiAvKiBOT1BVU0ggKi8KLQkJOwotCSAgICBlbHNlCi0JICAgICAg eCA9IG9wZW5hKHJlbWRlc3QsJmlhdHRyKTsgLyogRmlsZTogT3BlbiB3aXRoIGF0dHJpYnV0ZXMg Ki8KLQkgICAgZGVidWcoRjExMSwicmN2X3Nob3J0cmVwbHkgcmVtZmlsZSIscmVtZGVzdCx4KTsK LQl9IGVsc2UgewotCSAgICB4ID0gb3BlbnQoJmlhdHRyKTsJCS8qICJvcGVuIiB0aGUgc2NyZWVu ICovCi0JfQotCWlmICh4KSB7CQkJLyogSWYgZmlsZSB3YXMgb3BlbmVkIG9rICovCi0JICAgIGlm IChkZWNvZGUocmRhdGFwLAotI2lmbmRlZiBOT1NQTAotCQkgICAgICAgKHF1ZXJ5IHx8ICFyZW1m aWxlKSA/IHB1dHRybSA6Ci0jZWxzZQotCQkgICAgICAgIXJlbWZpbGUgPyBwdXR0cm0gOgotI2Vu ZGlmIC8qIE5PU1BMICovCi0JCSAgICAgICB6cHV0ZmlsLCAxKSA8IDApIHsgLyogTm90ZTogenB1 dGZpbCwgbm90IHB1dGZpbC4gKi8KLQkJZXJycGt0KChDSEFSICopIkVycm9yIHdyaXRpbmcgZGF0 YSIpOwotCQlSRVNVTUU7Ci0JCXJldHVybigtMSk7Ci0JICAgIH0gZWxzZSB7Ci0JCWlmIChyZGF0 YXApCQkvKiBJZiB3ZSBoYWQgZGF0YSAqLwotCQkgIGlmICgqcmRhdGFwKQkJLyogYWRkIGEgbGlu ZSB0ZXJtaW5hdG9yICovCi0JCSAgICBpZiAocmVtZmlsZSkgewkvKiB0byBmaWxlICovCi0JCQl6 c291dGwoWk9GSUxFLCIiKTsKLQkJICAgIH0gZWxzZSB7CQkvKiBvciB0byBzY3JlZW4uICovCi0j aWZuZGVmIE5PSUNQCi0JCQlpZiAoIXF1ZXJ5IHx8ICF4Y21kc3JjKQotI2VuZGlmIC8qIE5PSUNQ ICovCi0JCQkgIGlmICghKHF1aWV0ICYmIHJjZGFjdGl2ZSkpCi0JCQkgICAgY29ub2xsKCIiKTsK LQkJICAgIH0KLQkJaWYgKGJ5ZV9hY3RpdmUgJiYgbmV0d29yaykgeyAvKiBJIHNlbnQgQllFIG9y IFJFTU9URSBMT0dPVVQgKi8KLQkJICAgIG1zbGVlcCg1MDApOwkvKiBjb21tYW5kIGFuZCBnb3Qg dGhlIEFDSy4uLiAqLwotCQkgICAgYnllX2FjdGl2ZSA9IDA7Ci0JCSAgICB0dGNsb3MoMCk7Ci0J CX0KLQkJY2xzb2YoMCk7Ci0JCWlmICghZXBrdHNlbnQgJiYgIWVwa3RyY3ZkKSAvKiBJZiBubyBl cnJvciBwYWNrZXQuLi4gKi8KLQkJICBzdWNjZXNzID0gMTsJCS8qIHN1Y2Nlc3MuICovCi0JCVJF U1VNRTsKLQkJcmV0dXJuKC0xKTsKLQkgICAgfQotCX0gZWxzZSB7CQkJLyogRmlsZSBub3Qgb3Bl bmVkIE9LICovCi0JICAgIGVycnBrdCgoQ0hBUiAqKSByZl9lcnIpOwkvKiBzZW5kIGVycm9yIG1l c3NhZ2UgKi8KLQkgICAgUkVTVU1FOwkJCS8qIGFuZCBxdWl0LiAqLwotCSAgICByZXR1cm4oLTEp OwotCX0KLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotI2lmZGVmIFBLVFpFUk9IQUNLCi0gICAgfQot I2VuZGlmIC8qIFBLVFpFUk9IQUNLICovCi0gICAgZGVidWcoRjEwMSwicmN2X3Nob3J0cmVwbHkg ZmFsbHRocnUiLCIiLHN1Y2Nlc3MpOwotICAgIHJldHVybigtMSk7Ci19Ci0KLQotc3RhdGljIGlu dAotc3J2X3F1ZXJ5KCkgewotI2lmbmRlZiBOT1NFUlZFUgotI2lmbmRlZiBOT1NQTAotICAgIGNo YXIgYzsKLSNpZmRlZiBDS1NZU0xPRwotICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYg Y2t4bG9nZ2luZykKLSAgICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIlJFTU9U RSBRVUVSWSIsIChjaGFyICopc3J2Y21kKTsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotI2lmZGVm IElLU0RCCi0gICAgaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiUkVNT1RFIFFVRVJZIiwg KGNoYXIgKikoc3J2Y21kKzIpLCAiIik7Ci0jZW5kaWYgLyogSUtTREIgKi8KLSAgICBjID0gKihz cnZjbWQrMik7CQkJLyogUSA9IFF1ZXJ5LCBTID0gU2V0ICovCi0gICAgaWYgKGMgPT0gJ1EnKSB7 CQkJLyogUXVlcnkgKi8KLQlpZiAoIUVOQUJMRUQoZW5fcXVlKSkgeyAvKiBTZWN1cml0eSAqLwot CSAgICBlcnJwa3QoKENIQVIgKikiUkVNT1RFIFFVRVJZIGRpc2FibGVkIik7Ci0JICAgIFJFU1VN RTsKLQkgICAgcmV0dXJuKC0xKTsKLQl9IGVsc2UgewkJCS8qIFF1ZXJ5IGFsbG93ZWQgKi8KLQkg ICAgaW50IG47IGNoYXIgKnAsICpxOwotCSAgICBxYnVmcCA9IHF1ZXJ5YnVmOwkJLyogV2lwZSBv dXQgb2xkIHN0dWZmICovCi0JICAgIHFidWZuID0gMDsKLQkgICAgcXVlcnlidWZbMF0gPSBOVUw7 Ci0JICAgIHAgPSAoY2hhciAqKSBzcnZjbWQgKyAzOwkvKiBQb2ludGVyIGZvciBtYWtpbmcgd3Jh cHBlciAqLwotCSAgICBuID0gc3RybGVuKChjaGFyICopc3J2Y21kKTsJLyogUG9zaXRpb24gb2Yg ZW5kICovCi0JICAgIGMgPSAqKHNydmNtZCs0KTsJCS8qIFdoaWNoIHR5cGUgb2YgdmFyaWFibGUg Ki8KLQotCSAgICBpZiAoKihzcnZjbWQrNikgPT0gQ01EUSkgewkvKiBTdGFydHMgd2l0aCBjb21t YW5kIHF1b3RlPyAqLwotCQlwID0gKGNoYXIgKikgc3J2Y21kICsgNjsgLyogVGFrZSBpdCBsaXRl cmFsbHkgKi8KLQkJaWYgKCpwID09IENNRFEpIHArKzsKLQkgICAgfSBlbHNlIHsJCQkvKiBUaGV5 IHBsYXllZCBieSB0aGUgcnVsZXMgKi8KLQkJaWYgKGMgPT0gJ0snKSB7CQkvKiBLZXJtaXQgdmFy aWFibGUgKi8KLQkJICAgIGludCBrOwotCQkgICAgayA9IChpbnQpIHN0cmxlbihwKTsKLQkJICAg IGlmIChrID4gMCAmJiBwW2stMV0gPT0gJyknKSB7Ci0JCQlwID0gKGNoYXIgKikoc3J2Y21kICsg NCk7Ci0JCQkqKHNydmNtZCs0KSA9IENNRFE7Ci0JCQkqKHNydmNtZCs1KSA9ICdmJzsgLyogRnVu Y3Rpb24sIHNvIG1ha2UgaXQgXGYuLi4oKSAqLwotCQkgICAgfSBlbHNlIHsKLQkJCSooc3J2Y21k KzMpID0gQ01EUTsgLyogU3R1ZmYgd3JhcHBpbmcgaW50byBidWZmZXIgKi8KLQkJCSooc3J2Y21k KzQpID0gJ3YnOyAgLyogVmFyaWFibGUsIHNvIG1ha2UgaXQgXHYoLi4uKSAqLwotCQkJKihzcnZj bWQrNSkgPSAnKCc7ICAvKiBhcm91bmQgdmFyaWFibGUgbmFtZSAqLwotCQkJKihzcnZjbWQrbikg PSAnKSc7Ci0JCQkqKHNydmNtZCtuKzEpID0gTlVMOwotCQkgICAgfQotCQl9IGVsc2UgewotCQkg ICAgKihzcnZjbWQrMykgPSBDTURROyAvKiBTdHVmZiB3cmFwcGluZyBpbnRvIGJ1ZmZlciAqLwot CQkgICAgKihzcnZjbWQrNCkgPSAndic7IC8qICBWYXJpYWJsZSwgc28gbWFrZSBpdCBcdiguLi4p ICovCi0JCSAgICAqKHNydmNtZCs1KSA9ICcoJzsJLyogYXJvdW5kIHZhcmlhYmxlIG5hbWUgKi8K LQkJICAgICooc3J2Y21kK24pID0gJyknOwotCQkgICAgKihzcnZjbWQrbisxKSA9IE5VTDsKLQkJ ICAgIGlmIChjID09ICdTJykgewkvKiBTeXN0ZW0gdmFyaWFibGUgKi8KLQkJCSooc3J2Y21kKzQp ID0gJyQnOyAvKiAgc28gaXQncyBcJCguLi4pICovCi0JCSAgICB9IGVsc2UgaWYgKGMgPT0gJ0cn KSB7IC8qIE5vbi1cIEdsb2JhbCB2YXJpYWJsZSAqLwotCQkJKihzcnZjbWQrNCkgPSAnbSc7IC8q ICBzbyB3cmFwIGl0IGluIFxtKC4uLikgKi8KLQkJICAgIH0KLQkJfQotCSAgICB9CQkJCS8qIE5v dyBldmFsdWF0ZSBpdCAqLwotCSAgICBuID0gUUJVRkw7CQkJLyogTWF4IGxlbmd0aCAqLwotCSAg ICBxID0gcXVlcnlidWY7CQkvKiBXaGVyZSB0byBwdXQgaXQgKi8KLQkgICAgaWYgKHp6c3RyaW5n KHAsJnEsJm4pIDwgMCkgewotCQllcnJwa3QoKG4gPiAwKSA/IChDSEFSICopIkNhbid0IGdldCB2 YWx1ZSIKLQkJICAgICAgICAgICAgICAgOiAoQ0hBUiAqKSJWYWx1ZSB0b28gbG9uZyIKLQkJICAg ICAgICk7Ci0JCVJFU1VNRTsKLQkJcmV0dXJuKC0xKTsKLQkgICAgfSBlbHNlIHsKLQkJaWYgKGVu Y3N0cigoQ0hBUiAqKXF1ZXJ5YnVmKSA+IC0xKSB7IC8qIEVuY29kZSBpdCAqLwotCQkgICAgYWNr MShkYXRhKTsJCS8qIElmIGl0IGZpdHMsIHNlbmQgaXQgYmFjayBpbiBBQ0sgKi8KLQkJICAgIHN1 Y2Nlc3MgPSAxOwotCQkgICAgUkVTVU1FOwotCQkgICAgcmV0dXJuKC0xKTsKLQkJfSBlbHNlIGlm IChzbmRzdHJpbmcocXVlcnlidWYpKSB7IC8qIExvbmcgZm9ybSByZXNwb25zZSAqLwotCQkgICAg QkVHSU4gc3Npbml0OwotCQkgICAgcmV0dXJuKC0xKTsKLQkJfSBlbHNlIHsJCS8qIHNuZGhscCgp IGZhaWxzICovCi0JCSAgICBlcnJwa3QoKENIQVIgKikiQ2FuJ3Qgc2VuZCB2YWx1ZSIpOwotCQkg ICAgUkVTVU1FOwotCQkgICAgcmV0dXJuKC0xKTsKLQkJfQotCSAgICB9Ci0JfQotICAgIH0gZWxz ZSBpZiAoYyA9PSAnUycpIHsJCS8qIFNldCAoYXNzaWduKSAqLwotCWlmICghRU5BQkxFRChlbl9h c2cpKSB7CQkvKiBTZWN1cml0eSAqLwotCSAgICBlcnJwa3QoKENIQVIgKikiUkVNT1RFIEFTU0lH TiBkaXNhYmxlZCIpOwotCSAgICBSRVNVTUU7Ci0JICAgIHJldHVybigtMSk7Ci0JfSBlbHNlIHsJ CQkvKiBPSyAqLwotCSAgICBpbnQgbjsKLQkgICAgbiA9IHh1bmNoYXIoKihzcnZjbWQrMykpOwkv KiBMZW5ndGggb2YgbmFtZSAqLwotCSAgICBuID0gMyArIG4gKyAxOwkJLyogUG9zaXRpb24gb2Yg bGVuZ3RoIG9mIHZhbHVlICovCi0JICAgICooc3J2Y21kK24pID0gTlVMOwkJLyogRG9uJ3QgbmVl ZCBpdCAqLwotCSAgICBpZiAoYWRkbWFjKChjaGFyICopKHNydmNtZCs0KSwoY2hhciAqKShzcnZj bWQrbisxKSkgPCAwKQotCSAgICAgIGVycnBrdCgoQ0hBUiAqKSJSRU1PVEUgQVNTSUdOIGZhaWxl ZCIpOwotCSAgICBlbHNlIHsKLQkJYWNrKCk7Ci0JCXN1Y2Nlc3MgPSAxOwotCSAgICB9Ci0JICAg IFJFU1VNRTsKLQkgICAgcmV0dXJuKC0xKTsKLQl9Ci0gICAgfSBlbHNlIHsKLQllcnJwa3QoKENI QVIgKikiQmFkbHkgZm9ybWVkIHNlcnZlciBjb21tYW5kIik7Ci0JUkVTVU1FOwotCXJldHVybigt MSk7Ci0gICAgfQotI2Vsc2UKLSAgICBlcnJwa3QoKENIQVIgKikiVmFyaWFibGUgcXVlcnkvc2V0 IG5vdCBhdmFpbGFibGUiKTsKLSAgICBSRVNVTUU7Ci0gICAgcmV0dXJuKC0xKTsKLSNlbmRpZiAv KiBOT1NQTCAqLwotI2VuZGlmIC8qIE5PU0VSVkVSICovCi19Ci0KLXN0YXRpYyBpbnQKLXNydl9j b3B5KCkgewotI2lmbmRlZiBOT1NFUlZFUgotI2lmZGVmIENLU1lTTE9HCi0gICAgaWYgKGNreHN5 c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQotICAgICAgY2tzeXNsb2coU1lTTEdfUFIs IDEsICJzZXJ2ZXIiLCAiUkVNT1RFIENPUFkiLCAoY2hhciAqKXNydmNtZCk7Ci0jZW5kaWYgLyog Q0tTWVNMT0cgKi8KLSNpZmRlZiBaQ09QWQotICAgIGlmICghRU5BQkxFRChlbl9jcHkpKSB7Ci0J ZXJycGt0KChDSEFSICopIlJFTU9URSBDT1BZIGRpc2FibGVkIik7Ci0JUkVTVU1FOwotCXJldHVy bigtMSk7Ci0gICAgfSBlbHNlIHsKLQljaGFyICpzdHIxLCAqc3RyMiwgZjFbMjU2XSwgZjJbMjU2 XTsKLQlpbnQgIGxlbjEsIGxlbjI7Ci0gICAgICAgIGxlbjEgPSB4dW5jaGFyKHNydmNtZFsxXSk7 CS8qIFNlcGFyYXRlIHRoZSBwYXJhbWV0ZXJzICovCi0gICAgICAgIGxlbjIgPSB4dW5jaGFyKHNy dmNtZFsyK2xlbjFdKTsKLSAgICAgICAgc3RybmNweShmMSwoY2hhciAqKShzcnZjbWQrMiksbGVu MSk7Ci0gICAgICAgIGYxW2xlbjFdID0gTlVMOwotICAgICAgICBzdHJuY3B5KGYyLChjaGFyICop KHNydmNtZCszK2xlbjEpLGxlbjIpOwotICAgICAgICBmMltsZW4yXSA9IE5VTDsKLSNpZmRlZiBJ S1NEQgotCWlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsIlJFTU9URSBDT1BZIiwgZjEsIGYy KTsKLSNlbmRpZiAvKiBJS1NEQiAqLwotCWlmICghRU5BQkxFRChlbl9jd2QpKSB7CQkvKiBJZiBD V0QgaXMgZGlzYWJsZWQgKi8KLQkgICAgenN0cmlwKGYxLCZzdHIxKTsJCS8qIGFuZCB0aGV5IGlu Y2x1ZGVkIGEgcGF0aG5hbWUsICovCi0gICAgICAgICAgICB6c3RyaXAoZjIsJnN0cjIpOwotCSAg ICBpZiAoc3RyY21wKGYxLHN0cjEpIHx8IHN0cmNtcChmMixzdHIyKSkgeyAvKiBSZWZ1c2UuICov Ci0JCWVycnBrdCgoQ0hBUiAqKSJBY2Nlc3MgZGVuaWVkIik7Ci0JCVJFU1VNRTsJCQkvKiBSZW1l bWJlciwgdGhpcyBpcyBub3QgYSBnb3RvISAqLwotCQlyZXR1cm4oLTEpOwotCSAgICB9Ci0JfQot CWlmIChzdGF0ZSA9PSBnZW5lcmljKSB7CQkvKiBJdCdzIE9LIHRvIGdvIGFoZWFkLiAqLwotICAg ICAgICAgICAgaWYgKHpjb3B5KGYxLGYyKSkgewkJLyogVHJ5ICovCi0JCWVycnBrdCgoQ0hBUiAq KSJDYW4ndCBjb3B5IGZpbGUiKTsgLyogZ2l2ZSBlcnJvciBtZXNzYWdlICovCi0JICAgIH0gZWxz ZSB7Ci0JCXN1Y2Nlc3MgPSAxOwotCQlhY2soKTsKLQkgICAgfQotICAgICAgICAgICAgUkVTVU1F OwkJCS8qIHdhaXQgZm9yIG5leHQgc2VydmVyIGNvbW1hbmQgKi8KLQkgICAgcmV0dXJuKC0xKTsK LQl9Ci0gICAgfQotICAgIHJldHVybigtMSk7Ci0jZWxzZSAvKiBubyBaQ09QWSAqLwotICAgIGVy cnBrdCgoQ0hBUiAqKSJSRU1PVEUgQ09QWSBub3QgYXZhaWxhYmxlIik7IC8qIGdpdmUgZXJyb3Ig bWVzc2FnZSAqLwotICAgIFJFU1VNRTsJCQkJLyogd2FpdCBmb3IgbmV4dCBzZXJ2ZXIgY29tbWFu ZCAqLwotICAgIHJldHVybigtMSk7Ci0jZW5kaWYgLyogWkNPUFkgKi8KLSNlbmRpZiAvKiBOT1NF UlZFUiAqLwotfQotCi1zdGF0aWMgaW50Ci1zcnZfcmVuYW1lKCkgewotI2lmbmRlZiBOT1NFUlZF UgotI2lmZGVmIENLU1lTTE9HCi0gICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hs b2dnaW5nKQotICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiUkVNT1RFIFJF TkFNRSIsIChjaGFyICopc3J2Y21kKTsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotI2lmZGVmIFpS RU5BTUUKLSAgICBpZiAoIUVOQUJMRUQoZW5fcmVuKSkgewotCWVycnBrdCgoQ0hBUiAqKSJSRU1P VEUgUkVOQU1FIGRpc2FibGVkIik7Ci0JUkVTVU1FOwotCXJldHVybigtMSk7Ci0gICAgfSBlbHNl IHsJCQkJLyogUkVOQU1FIGlzIGVuYWJsZWQgKi8KLQljaGFyICpzdHIxLCAqc3RyMiwgZjFbMjU2 XSwgZjJbMjU2XTsKLQlpbnQgbGVuMSwgbGVuMjsKLQlsZW4xID0geHVuY2hhcihzcnZjbWRbMV0p OwkvKiBTZXBhcmF0ZSB0aGUgcGFyYW1ldGVycyAqLwotCWxlbjIgPSB4dW5jaGFyKHNydmNtZFsy K2xlbjFdKTsKLQlzdHJuY3B5KGYxLChjaGFyICopKHNydmNtZCsyKSxsZW4xKTsKLQlmMVtsZW4x XSA9IE5VTDsKLQlzdHJuY3B5KGYyLChjaGFyICopKHNydmNtZCszK2xlbjEpLGxlbjIpOwotCWYy W2xlbjJdID0gTlVMOwotCWxlbjIgPSB4dW5jaGFyKHNydmNtZFsyK2xlbjFdKTsKLQlzdHJuY3B5 KGYxLChjaGFyICopKHNydmNtZCsyKSxsZW4xKTsKLQlmMVtsZW4xXSA9IE5VTDsKLQlzdHJuY3B5 KGYyLChjaGFyICopKHNydmNtZCszK2xlbjEpLGxlbjIpOwotCWYyW2xlbjJdID0gTlVMOwotI2lm ZGVmIElLU0RCCi0JaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiUkVNT1RFIFJFTkFNRSIs IGYxLCBmMik7Ci0jZW5kaWYgLyogSUtTREIgKi8KLQlpZiAoIUVOQUJMRUQoZW5fY3dkKSkgewkJ LyogSWYgQ1dEIGlzIGRpc2FibGVkICovCi0JICAgIHpzdHJpcChmMSwmc3RyMSk7CQkvKiBhbmQg dGhleSBpbmNsdWRlZCBhIHBhdGhuYW1lLCAqLwotCSAgICB6c3RyaXAoZjIsJnN0cjIpOwotCSAg ICBpZiAoIHN0cmNtcChmMSxzdHIxKSB8fCBzdHJjbXAoZjIsc3RyMikgKSB7IC8qIHJlZnVzZS4g Ki8KLQkJZXJycGt0KChDSEFSICopIkFjY2VzcyBkZW5pZWQiKTsKLQkJUkVTVU1FOwkJCS8qIFJl bWVtYmVyLCB0aGlzIGlzIG5vdCBhIGdvdG8hICovCi0JCXJldHVybigtMSk7Ci0JICAgIH0KLQl9 Ci0JaWYgKHN0YXRlID09IGdlbmVyaWMpIHsJCS8qIEl0J3MgT0sgdG8gZ28gYWhlYWQuICovCi0J ICAgIGlmICh6cmVuYW1lKGYxLGYyKSkgewkvKiBUcnkgKi8KLQkJZXJycGt0KChDSEFSICopIkNh bid0IHJlbmFtZSBmaWxlIik7IC8qIEdpdmUgZXJyb3IgbXNnICovCi0JICAgIH0gZWxzZSB7Ci0J CXN1Y2Nlc3MgPSAxOwotCQlhY2soKTsKLQkgICAgfQotCSAgICBSRVNVTUU7CQkJLyogV2FpdCBm b3IgbmV4dCBzZXJ2ZXIgY29tbWFuZCAqLwotCSAgICByZXR1cm4oLTEpOwotCX0KLSAgICB9Ci0g ICAgcmV0dXJuKC0xKTsKLSNlbHNlIC8qIG5vIFpSRU5BTUUgKi8KLSAgICAvKiBHaXZlIGVycm9y IG1lc3NhZ2UgKi8KLSAgICBlcnJwa3QoKENIQVIgKikiUkVNT1RFIFJFTkFNRSBub3QgYXZhaWxh YmxlIik7Ci0gICAgUkVTVU1FOwkJCQkvKiBXYWl0IGZvciBuZXh0IHNlcnZlciBjb21tYW5kICov Ci0gICAgcmV0dXJuKC0xKTsKLSNlbmRpZiAvKiBaUkVOQU1FICovCi0jZW5kaWYgLyogTk9TRVJW RVIgKi8KLX0KLQotc3RhdGljIGludAotc3J2X2xvZ2luKCkgewotI2lmbmRlZiBOT1NFUlZFUgot ICAgIGNoYXIgZjFbTE9HSU5MRU4rMV0sIGYyW0xPR0lOTEVOKzFdLCBmM1tMT0dJTkxFTisxXTsK LSAgICBDSEFSICpwOwotICAgIGludCBsZW4sIGk7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJSRU1PVEUg TE9HSU4geF9sb2dpbiIsIiIseF9sb2dpbik7Ci0gICAgZGVidWcoRjEwMSwiUkVNT1RFIExPR0lO IHhfbG9nZ2VkIiwiIix4X2xvZ2dlZCk7Ci0KLSAgICBmMVswXSA9IE5VTDsgZjJbMF0gPSBOVUw7 IGYzWzBdID0gTlVMOwotICAgIGxlbiA9IDA7Ci0gICAgaWYgKHNydmNtZFsxXSkJCQkvKiBGaXJz dCBsZW5ndGggZmllbGQgKi8KLSAgICAgIGxlbiA9IHh1bmNoYXIoc3J2Y21kWzFdKTsJCS8qIFNl cGFyYXRlIHRoZSBwYXJhbWV0ZXJzICovCi0KLSAgICBpZiAoeF9sb2dpbikgewkJCS8qIExvZ2lu IHJlcXVpcmVkICovCi0JaWYgKHhfbG9nZ2VkKSB7CQkJLyogQW5kIGFscmVhZHkgbG9nZ2VkIGlu ICovCi0JICAgIGlmIChsZW4gPiAwKSB7CQkvKiBMb2dnaW5nIGluIGFnYWluICovCi0JCWVycnBr dCgoQ0hBUiAqKSJBbHJlYWR5IGxvZ2dlZCBpbi4iKTsKLQkgICAgfSBlbHNlIHsJCQkvKiBMb2dn aW5nIG91dCAqLwotCQlkZWJ1ZyhGMTAxLCJSRU1PVEUgTE9HT1VUIiwiIix4X2xvZ2dlZCk7Ci0j aWZkZWYgQ0tTWVNMT0cKLQkJaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5n KQotCQkgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIlJFTU9URSBMT0dPVVQiLCBO VUxMKTsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotI2lmZGVmIElLU0RCCi0JCWlmIChpa2Rib3Bl bikgc2xvdHN0YXRlKHdoYXQsIlJFTU9URSBMT0dPVVQiLCAiIiwgIiIpOwotI2VuZGlmIC8qIElL U0RCICovCi0JCXRsb2coRjExMCwiTG9nZ2VkIG91dCIseF91c2VyLDApOwotCQlhY2sxKChDSEFS ICopIkxvZ2dlZCBvdXQiKTsKLQkJc3VjY2VzcyA9IDE7Ci0JCW1zbGVlcCg1MDApOwotI2lmZGVm IENLX0xPR0lOCi0JCXhfbG9nZ2VkID0gMDsKLSNpZmRlZiBJS1NECi0JCWlmIChpbnNlcnZlcikK LQkJICBja3hsb2dvdXQoKTsKLSNlbmRpZiAvKiBJS1NEICovCi0jZW5kaWYgLyogQ0tfTE9HSU4g Ki8KLQkgICAgfQotCX0gZWxzZSB7CQkJLyogTm90IGxvZ2dlZCBpbiB5ZXQgKi8KLQkgICAgZGVi dWcoRjEwMSwiUkVNT1RFIExPR0lOIGxlbiIsIiIsbGVuKTsKLQkgICAgaWYgKGxlbiA+IDApIHsJ CS8qIEhhdmUgdXNlcm5hbWUgKi8KLSNpZmRlZiBDS1NZU0xPRwotCQlpZiAoY2t4c3lzbG9nID49 IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCi0JCSAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2 ZXIiLCAiUkVNT1RFIExPR0lOIiwgTlVMTCk7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLQkJaWYg KGxlbiA+IExPR0lOTEVOKSB7Ci0JCSAgICBlcnJwa3QoKENIQVIgKikiVXNlcm5hbWUgdG9vIGxv bmciKTsKLQkJfQotCQlwID0gc3J2Y21kICsgMjsJCS8qIFBvaW50IHRvIGl0ICovCi0JCWZvciAo aSA9IDA7IGkgPCBsZW47IGkrKykgLyogQ29weSBpdCAqLwotCQkgIGYxW2ldID0gcFtpXTsKLQkJ ZjFbbGVuXSA9IE5VTDsJCS8qIFRlcm1pbmF0ZSBpdCAqLwotCQlwICs9IGxlbjsJCS8qIFBvaW50 IHRvIG5leHQgbGVuZ3RoIGZpZWxkICovCi0JCWlmICgqcCkgewkJLyogSWYgd2UgaGF2ZSBvbmUg Ki8KLQkJICAgIGxlbiA9IHh1bmNoYXIoKnArKyk7IC8qIGRlY29kZSBpdCAqLwotCQkgICAgaWYg KGxlbiA+IDAgJiYgbGVuIDw9IExPR0lOTEVOKSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBp KyspIC8qIFNhbWUgZGVhbCBmb3IgcGFzc3dvcmQgKi8KLQkJCSAgZjJbaV0gPSBwW2ldOwotCQkJ ZjJbbGVuXSA9IE5VTDsKLQkJCXAgKz0gbGVuOwkvKiBBbmQgYWNjb3VudCAqLwotCQkJaWYgKCpw KSB7Ci0JCQkgICAgbGVuID0geHVuY2hhcigqcCsrKTsKLQkJCSAgICBpZiAobGVuID4gMCAmJiBs ZW4gPD0gTE9HSU5MRU4pIHsKLQkJCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0JCQkJICBm M1tpXSA9IHBbaV07CS8qIFNldCBidXQgbmV2ZXIgdXNlZCAqLwotCQkJCWYzW2xlbl0gPSBOVUw7 IC8qIChiZWNhdXNlIGFjY291bnQgbm90IHVzZWQpICovCi0JCQkgICAgfQotCQkJfQotCQkgICAg fQotCQl9Ci0JCWRlYnVnKEYxMDEsIlJFTU9URSBMT0dJTiAxIiwiIix4X2xvZ2dlZCk7Ci0jaWZk ZWYgSUtTRAotI2lmZGVmIENLX0xPR0lOCi0JCWlmIChpbnNlcnZlcikgewkJLyogTG9nIGluIHRv IHN5c3RlbSBmb3IgcmVhbCAqLwotCQkgICAgeF9sb2dnZWQgPSBja3hsb2dpbigoQ0hBUiAqKWYx LChDSEFSICopZjIsTlVMTCwwKTsKLQkJICAgIGRlYnVnKEYxMDEsIlJFTU9URSBMT0dJTiAyIiwi Iix4X2xvZ2dlZCk7Ci0JCSAgICBpZiAoeF9sb2dnZWQpIHsJLyogQ291bnQgYXR0ZW1wdHMgKi8K LQkJCWxvZ3RyaWVzID0gMDsKLQkJCWp1c3RvbmUgPSAxOwotCQkgICAgfSBlbHNlIHsKLQkJCWxv Z3RyaWVzKys7Ci0JCQlzbGVlcChsb2d0cmllcyk7Ci0JCSAgICB9Ci0JCX0gZWxzZQotI2VuZGlm IC8qIENLX0xPR0lOICovCi0jZW5kaWYgLyogSUtTRCAqLwotCQkgIGlmICh4X3VzZXIgJiYgeF9w YXNzd2QpIHsgLyogVXNlciBhbmQgcGFzc3dvcmQgbXVzdCBtYXRjaCAqLwotCQkgICAgICBpZiAo IXN0cmNtcCh4X3VzZXIsZjEpKSAvKiBTRVQgU0VSVkVSIExPR0lOICovCi0JCQlpZiAoIXN0cmNt cCh4X3Bhc3N3ZCxmMikpCi0JCQkgIHhfbG9nZ2VkID0gMTsKLQkJICAgICAgZGVidWcoRjEwMSwi UkVNT1RFIExPR0lOIDMiLCIiLHhfbG9nZ2VkKTsKLQkJICB9IGVsc2UgaWYgKHhfdXNlcikgewkv KiBPbmx5IHVzZXJuYW1lIGdpdmVuLCBubyBwYXNzd29yZCAqLwotCQkgICAgICBpZiAoIXN0cmNt cCh4X3VzZXIsZjEpKSAvKiBzbyBvbmx5IHVzZXJuYW1lIG11c3QgbWF0Y2ggKi8KLQkJCXhfbG9n Z2VkID0gMTsKLQkJICAgICAgZGVidWcoRjEwMSwiUkVNT1RFIExPR0lOIDQiLCIiLHhfbG9nZ2Vk KTsKLQkJICB9Ci0jaWZkZWYgQ0tfTE9HSU4gCi0gICAgICAgICAgICAgICAgZWxzZSB7Ci0JCSAg ICB4X2xvZ2dlZCA9IGNreGxvZ2luKChDSEFSICopZjEsKENIQVIgKilmMixOVUxMLDApOwotCQkg ICAgZGVidWcoRjEwMSwiUkVNT1RFIExPR0lOIDUiLCIiLHhfbG9nZ2VkKTsKLSAgICAgICAgICAg ICAgICB9Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLQkJaWYgKHhfbG9nZ2VkKSB7CQkvKiBMb2dn ZWQgaW4/ICovCi0JCSAgICB0bG9nKEYxMTAsIkxvZ2dlZCBpbiIsIHhfdXNlciwgMCk7Ci0JCSAg ICBpZiAoaXNndWVzdCkKLQkJICAgICAgYWNrMSgoQ0hBUiAqKSJMb2dnZWQgaW4gYXMgZ3Vlc3Qg LSByZXN0cmljdGlvbnMgYXBwbHkiKTsKLQkJICAgIGVsc2UKLQkJICAgICAgYWNrMSgoQ0hBUiAq KSJMb2dnZWQgaW4iKTsKLQkJICAgIHN1Y2Nlc3MgPSAxOwotCQl9IGVsc2UgewotCQkgICAgdGxv ZyhGMTEwLCJMb2dpbiBmYWlsZWQiLCBmMSwgMCk7Ci0JCSAgICBlcnJwa3QoKENIQVIgKikiQWNj ZXNzIGRlbmllZC4iKTsKLSNpZmRlZiBJS1NECi0jaWZkZWYgQ0tfTE9HSU4KLQkJICAgIGlmIChp bnNlcnZlciAmJiBsb2d0cmllcyA+IDIpCi0JCSAgICAgIGNreGxvZ291dCgpOwotI2VuZGlmIC8q IENLX0xPR0lOICovCi0jZW5kaWYgLyogSUtTRCAqLwotCQl9Ci0JICAgIH0gZWxzZSB7CQkJLyog TE9HT1VUICovCi0JCWVycnBrdCgoQ0hBUiAqKSJMb2dvdXQgaWdub3JlZCIpOwotCSAgICB9Ci0J fQotICAgIH0gZWxzZSB7CQkJCS8qIExvZ2luIG5vdCByZXF1aXJlZCAqLwotCWlmIChsZW4gPiAw KQotCSAgZXJycGt0KChDSEFSICopIkxvZ2luIGlnbm9yZWQuIik7Ci0JZWxzZQotCSAgZXJycGt0 KChDSEFSICopIkxvZ291dCBpZ25vcmVkLiIpOwotICAgIH0KLSNlbmRpZiAvKiBOT1NFUlZFUiAq LwotICAgIFJFU1VNRTsKLSAgICByZXR1cm4oLTEpOwotfQotCi1zdGF0aWMgaW50Ci1zcnZfdGlt ZW91dCgpIHsKLSAgICAvKiBLOTUgZG9lcyB0aGlzIGl0cyBvd24gd2F5ICovCi0gICAgaWYgKGlk bGV0bW8pIHsKLSNpZmRlZiBJS1NECi0gICAgICAgIGlmIChpbnNlcnZlcikgewotICAgICAgICAg ICBwcmludGYoIlxyXG5JS1NEIElETEUgVElNRU9VVDogJWQgc2VjXHJcbiIsIHNydmlkbCk7Ci0g ICAgICAgICAgIGRvZXhpdChHT09EX0VYSVQseGl0c3RhKTsKLSAgICAgICAgfQotI2VuZGlmIC8q IElLU0QgKi8KLQlpZGxldG1vID0gMDsKLQlwcmludGYoIlxyXG5TRVJWRVIgSURMRSBUSU1FT1VU OiAlZCBzZWNcclxuIiwgc3J2aWRsKTsKLQl4aXRzdGEgfD0gKHdoYXQgJiBXX0tFUk1JVCk7Ci0J UVVJVDsKLSAgICB9Ci0jaWZuZGVmIE5PU0VSVkVSCi0gICAgZWxzZSBpZiAoZmF0YWxpbykgewkJ CS8qIENvbm5lY3Rpb24gbG9zdCAqLwotI2lmZGVmIENLU1lTTE9HCi0JICBpZiAoY2t4c3lzbG9n ID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCi0JICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAi c2VydmVyIiwgIkNvbm5lY3Rpb24gbG9zdCIsIE5VTEwpOwotI2VuZGlmIC8qIENLU1lTTE9HICov Ci0jaWZkZWYgSUtTREIKLQkgIGlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsIlNFUlZFUiBE SVNDT05ORUNUIiwoY2hhciAqKXNydmNtZCwgIiIpOwotI2VuZGlmIC8qIElLU0RCICovCi0JeGl0 c3RhIHw9IHdoYXQ7Ci0JUVVJVDsKLSAgICB9IGVsc2UgaWYgKGludGVycnVwdGVkKSB7CQkvKiBJ bnRlcnJ1cHRlZCBieSBoYW5kICovCi0JaWYgKCFFTkFCTEVEKGVuX2ZpbikpIHsKLQkgICAgZXJy cGt0KChDSEFSICopIlFVSVQgZGlzYWJsZWQiKTsKLQkgICAgUkVTVU1FOwotCSAgICByZXR1cm4o LTEpOwotCX0gZWxzZSB7Ci0JICAgIGlmICh3aGF0ID09IFdfU0VORCB8fCB3aGF0ID09IFdfUkVD ViB8fCB3aGF0ID09IFdfUkVNTykgewotCQlzdWNjZXNzID0gMDsKLSNpZmRlZiBDS1NZU0xPRwot CQlpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCi0JCSAgY2tzeXNsb2co U1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiSW50ZXJydXB0ZWQiLCBOVUxMKTsKLSNlbmRpZiAvKiBD S1NZU0xPRyAqLwotCSAgICB9IGVsc2UgaWYgKHdoYXQgPT0gV19OT1RISU5HICYmIGZpbGNudCA9 PSAwKSB7Ci0JCXN1Y2Nlc3MgPSAxOwotCSAgICB9IC8qIE90aGVyd2lzZSBsZWF2ZSBzdWNjZXNz IGFsb25lICovCi0JICAgIHhpdHN0YSB8PSAod2hhdCAmIFdfS0VSTUlUKTsKLQkgICAgUVVJVDsK LQl9Ci0gICAgfSBlbHNlIHsJCQkJLyogU2hvdWxkbid0IGhhcHBlbiAqLwotCWRlYnVnKEYxMDAs IlNFUlZFUiAodG9wKSBHT1QgVU5FWFBFQ1RFRCAncSciLCIiLDApOwotCVFVSVQ7Ci0gICAgfQot I2VuZGlmIC8qIE5PU0VSVkVSICovCi19Ci0KLXN0YXRpYyBpbnQKLXJjdl9zX3BrdCgpIHsKLSNp Zm5kZWYgTk9TRVJWRVIKLSAgICBpZiAoc3RhdGUgPT0gcmdlbikKLSAgICAgIHVyc2VydmVyID0g MTsKLSAgICBpZiAoLyogc3RhdGUgPT0gc2VydmUgJiYgKi8geF9sb2dpbiAmJiAheF9sb2dnZWQp IHsKLQllcnJwa3QoKENIQVIgKikiTG9naW4gcmVxdWlyZWQiKTsKLQlTRVJWRTsKLSAgICB9IGVs c2UKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotICAgICAgaWYgKHN0YXRlID09IHNlcnZlICYmICFF TkFCTEVEKGVuX3NlbikpIHsgLyogTm90IGluIHNlcnZlciBtb2RlICovCi0JZXJycGt0KChDSEFS ICopIlNFTkQgZGlzYWJsZWQiKTsgLyogd2hlbiBTRU5EIGlzIGRpc2FibGVkLiAqLwotCVJFU1VN RTsKLQlyZXR1cm4oLTEpOwotICAgIH0gZWxzZSB7CQkJCS8qIE9LIHRvIGdvIGFoZWFkLiAqLwot I2lmZGVmIENLX1RNUERJUgotCWlmIChkbGRpciAmJiAhZl90bXBkaXIpIHsJLyogSWYgdGhleSBo YXZlIGEgZG93bmxvYWQgZGlyZWN0b3J5ICovCi0JICAgIGRlYnVnKEYxMTAsInJlY2VpdmUgZG93 bmxvYWQgZGlyIixkbGRpciwwKTsKLQkgICAgaWYgKHMgPSB6Z3RkaXIoKSkgewkJLyogR2V0IGN1 cnJlbnQgZGlyZWN0b3J5ICovCi0JCWRlYnVnKEYxMTAsInJlY2VpdmUgY3VycmVudCBkaXIiLHMs MCk7Ci0JCWlmICh6Y2hkaXIoZGxkaXIpKSB7CS8qIENoYW5nZSB0byBkb3dubG9hZCBkaXJlY3Rv cnkgKi8KLQkJICAgIGRlYnVnKEYxMDAsInJlY2VpdmUgemNoZGlyIG9rIiwiIiwwKTsKLQkJICAg IGNrc3RybmNweShzYXZkaXIscyxUTVBESVJMRU4pOwotCQkgICAgZl90bXBkaXIgPSAxOwkvKiBS ZW1lbWJlciB0aGF0IHdlIGRpZCB0aGlzICovCi0JCX0gZWxzZQotCQkgIGRlYnVnKEYxMDAsInJl Y2VpdmUgemNoZGlyIGZhaWxlZCIsIiIsMCk7Ci0JICAgIH0KLQl9Ci0jZW5kaWYgLyogQ0tfVE1Q RElSICovCi0JbmFrc3RhdGUgPSAxOwkJCS8qIENhbiBzZW5kIE5BS3MgZnJvbSBoZXJlLiAqLwot CXJpbml0KHJkYXRhcCk7CQkJLyogU2V0IHBhcmFtZXRlcnMgKi8KLQlpZiAoYmN0ZikgewotCSAg ICBiY3R1ID0gMzsKLQkgICAgYmN0bCA9IDM7Ci0JfSBlbHNlIHsKLQkgICAgYmN0dSA9IGJjdHI7 CSAgICAgICAvKiBzd2l0Y2ggdG8gYWdyZWVkLXVwb24gYmxvY2sgY2hlY2sgKi8KLQkgICAgYmN0 bCA9IChiY3R1ID09IDQpID8gMiA6IGJjdHU7IC8qIFNldCBibG9jay1jaGVjayBsZW5ndGggKi8K LQl9Ci0Jd2hhdCA9IFdfUkVDVjsJCQkvKiBSZW1lbWJlciB3ZSdyZSByZWNlaXZpbmcgKi8KLQls YXN0eGZlciA9IFdfUkVDVjsKLQlyZXNldGMoKTsJCQkvKiBSZXNldCBjb3VudGVycyAqLwotCXJ0 aW1lcigpOwkJCS8qIFJlc2V0IHRpbWVyICovCi0jaWZkZWYgR0ZUSU1FUgotCXJmdGltZXIoKTsK LSNlbmRpZiAvKiBHRlRJTUVSICovCi0Jc3RyZWFtb24oKTsKLQlCRUdJTiByZmlsZTsJCQkvKiBH byBpbnRvIHJlY2VpdmUtZmlsZSBzdGF0ZSAqLwotICAgIH0KLSAgICByZXR1cm4oLTEpOwotfQot Ci0KLS8qIEVORCBPRiBST1VUSU5FUyBNT1ZFRCBPVVQgT0YgU1RBVEUgTUFDSElORSAqLwotCi0K LS8qICBQIFIgTyBUIE8gIC0tICBQcm90b2NvbCBlbnRyeSBmdW5jdGlvbiAgKi8KLQotc3RhdGlj IGludCBpc190biA9IDA7CQkJLyogSXQncyBhIFRlbG5ldCBjb25uZWN0aW9uICovCi0KLSNpZmRl ZiBDS19TUEVFRAotaW50IGZfY3RscCA9IDA7CQkJCS8qIENvbnRyb2wtY2hhcmFjdGVyIHByZWZp eCB0YWJsZSAqLwotI2lmZGVmIENPTU1FTlQKLXNob3J0IHNfY3RscFsyNTZdOwotI2VuZGlmIC8q IENPTU1FTlQgKi8KLSNlbmRpZiAvKiBDS19TUEVFRCAqLwotCi0vKgotICBUaGlzIGlzIHNpbXBs eSBhIHdyYXBwZXIgZm9yIHRoZSByZWFsIHByb3RvY29sIGZ1bmN0aW9uIGp1c3QgYmVsb3csCi0g IHRoYXQgc2F2ZXMgYW55IGl0ZW1zIHRoYXQgbWlnaHQgYmUgY2hhbmdlZCBhdXRvbWF0aWNhbGx5 IGJ5IHByb3RvY29sCi0gIG5lZ290aWF0aW9ucyBhbmQgdGhlbiByZXN0b3JlcyB0aGVtIHVwb24g ZXhpdCBmcm9tIHByb3RvY29sIG1vZGUuCi0qLwotVk9JRAotcHJvdG8oKSB7Ci0gICAgZXh0ZXJu IGludCBiX3NhdmUsIGZfc2F2ZSwgY19zYXZlLCBzc19zYXZlLCBzbG9zdGFydCwgcmVsaWFibGUs IHVyY2xlYXI7Ci0jaWZuZGVmIE5PQ1NFVFMKLSAgICBleHRlcm4gaW50IGZjaGFyc2V0LCBmY3Nf c2F2ZSwgdGNoYXJzZXQsIHRjc19zYXZlOwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQotI2lmZGVm IFBJUEVTRU5ECi0gICAgZXh0ZXJuIGludCBwaXBlc2VuZDsKLSNlbmRpZiAvKiBQSVBFU0VORCAq LwotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0gICAgZXh0ZXJuIGludCBjdXJzb3JlbmFb XSwgY3Vyc29yX3NhdmUsIHRlcm1faW87Ci0gICAgZXh0ZXJuIEJZVEUgdm1vZGU7Ci0gICAgZXh0 ZXJuIGludCBkaXNwbGF5X2RlbW87Ci0gICAgaW50IHRlcm1faW9fc2F2ZTsKLSNlbmRpZiAvKiBP UzIgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jaWZkZWYgVE5DT0RFCi0gICAgaW50IF91X2Jp bj0wLCBfbWVfYmluID0gMDsKLSNpZmRlZiBJS1NfT1BUSU9OCi0gICAgaW50IC8qIF91X3N0YXJ0 PTAsICovIF9tZV9zdGFydCA9IDA7Ci0jZW5kaWYgLyogSUtTX09QVElPTiAqLwotI2VuZGlmIC8q IFROQ09ERSAqLwotI2lmZGVmIFBBVFRFUk5TCi0gICAgaW50IHBhX3NhdmU7Ci0gICAgaW50IGk7 Ci0jZW5kaWYgLyogUEFUVEVSTlMgKi8KLSAgICBpbnQgc2Nhbl9zYXZlOwotCi0jaWZkZWYgUEFU VEVSTlMKLSAgICBwYV9zYXZlID0gcGF0dGVybnM7Ci0jZW5kaWYgLyogUEFUVEVSTlMgKi8KLSAg ICBzY2FuX3NhdmUgPSBmaWxlcGVlazsKLQotICAgIG15am9iID0gc3N0YXRlOwotCi0jaWZkZWYg Q0tfTE9HSU4KLSAgICBpZiAoaXNndWVzdCkgewkJCS8qIElmIHVzZXIgaXMgYW5vbnltb3VzICov Ci0JZW5fcHJpID0gMDsJCQkvKiBkaXNhYmxlIHByaW50aW5nICovCi0JZW5fbWFpID0gMDsJCQkv KiBhbmQgZGlzYWJsZSBlbWFpbCAqLwotCWVuX2RlbCA9IDA7CQkJLyogYW5kIGZpbGUgZGVsZXRp b24gKi8KLSAgICB9Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLQotI2lmbmRlZiBOT0xPQ0FMCi0j aWZkZWYgT1MyCi0gICAgY3Vyc29yX3NhdmUgPSBjdXJzb3JlbmFbdm1vZGVdOwotICAgIGN1cnNv cmVuYVt2bW9kZV0gPSAwOwotICAgIHRlcm1faW9fc2F2ZSA9IHRlcm1faW87Ci0gICAgdGVybV9p byA9IDA7Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotICAgIGJfc2F2 ZSA9IGJpbmFyeTsJCQkvKiBTRVQgRklMRSBUWVBFICovCi0gICAgZl9zYXZlID0gZm5jbnY7CQkJ LyogU0VUIEZJTEUgTkFNRVMgKi8KLSAgICBjX3NhdmUgPSBiY3RyOwotICAgIHBfc2F2ZSA9IGZu c3BhdGg7Ci0gICAgcl9zYXZlID0gcmVjdXJzaXZlOwotICAgIHNfdGltaW50ID0gdGltaW50Owot ICAgIHNzX3NhdmUgPSBzbG9zdGFydDsKLSNpZm5kZWYgTk9DU0VUUwotICAgIGZjc19zYXZlID0g ZmNoYXJzZXQ7Ci0gICAgdGNzX3NhdmUgPSB0Y2hhcnNldDsKLSNlbmRpZiAvKiBOT0NTRVRTICov Ci0KLSNpZmRlZiBDT01NRU5UCi0vKiBEb24ndCBkbyB0aGlzIGJlY2F1c2UgdGhlbiB1c2VyIGNh biBuZXZlciBmaW5kIG91dCB3aGF0IGhhcHBlbmVkLiAqLwotI2lmZGVmIENLX1NQRUVECi0gICAg Zm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQotICAgICAgc19jdGxwW2ldID0gY3RscFtpXTsKLSAg ICBmX2N0bHAgPSAxOwotI2VuZGlmIC8qIENLX1NQRUVEICovCi0jZW5kaWYgLyogQ09NTUVOVCAq LwotICAgIGlmIChyZWxpYWJsZSA9PSBTRVRfT04pCi0gICAgICBzbG9zdGFydCA9IDA7Ci0gICAg aXNfdG4gPSAoIWxvY2FsICYmIHNzdGVsbmV0KQotI2lmZGVmIFROQ09ERQotICAgICAgfHwgKGxv Y2FsICYmIG5ldHdvcmsgJiYgdHRucHJvdG8gPT0gTlBfVEVMTkVUKQotI2VuZGlmIC8qIFROQ09E RSAqLwotCTsKLSNpZmRlZiBUTkNPREUKLSAgICBpZiAoaXNfdG4pIHsKLSAgICAgICAgaWYgKHRu X2JfeGZlciAmJiAhKHNzdGVsbmV0IHx8IGluc2VydmVyKSkgewotCSAgICAvKiBTYXZlIHRoZSBj dXJyZW50IHN0YXRlIG9mIFRlbG5ldCBCaW5hcnkgKi8KLQkgICAgX3VfYmluID0gVEVMT1BUX1Uo VEVMT1BUX0JJTkFSWSk7Ci0JICAgIF9tZV9iaW4gPSBURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSk7 Ci0KLQkgICAgLyogSWYgZWl0aGVyIGRpcmVjdGlvbiBpcyBub3QgQmluYXJ5IGF0dGVtcHQgdG8g bmVnb3RpYXRlIGl0ICovCi0JICAgIGlmICghX3VfYmluICYmIFRFTE9QVF9VX01PREUoVEVMT1BU X0JJTkFSWSkgIT0gVE5fTkdfUkYpIHsKLQkJdG5fc29wdChETyxURUxPUFRfQklOQVJZKTsKLQkJ VEVMT1BUX1VOQU5TV0VSRURfRE8oVEVMT1BUX0JJTkFSWSkgPSAxOwotCSAgICB9Ci0JICAgIGlm ICghX21lX2JpbiAmJiBURUxPUFRfTUVfTU9ERShURUxPUFRfQklOQVJZKSAhPSBUTl9OR19SRikg ewotCQl0bl9zb3B0KFdJTEwsVEVMT1BUX0JJTkFSWSk7Ci0JCVRFTE9QVF9VTkFOU1dFUkVEX1dJ TEwoVEVMT1BUX0JJTkFSWSkgPSAxOwotCSAgICB9Ci0JICAgIGlmICghKF9tZV9iaW4gJiYgX3Vf YmluKSkKLQkgICAgICB0bl93YWl0KCJwcm90byBzZXQgYmluYXJ5IG1vZGUiKTsKLSAgICAgICAg fQotI2lmZGVmIElLU19PUFRJT04KLSNpZmRlZiBDS19YWVoKLSAgICAgICAgaWYgKHByb3RvY29s ICE9IFBST1RPX0spIHsJLyogTm9uLUtlcm1pdCBwcm90b2NvbCBzZWxlY3RlZCAqLwotICAgICAg ICAgICAgaWYgKFRFTE9QVF9VKFRFTE9QVF9LRVJNSVQpICYmCi0gICAgICAgICAgICAgICAgVEVM T1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0KSB7Ci0gICAgICAgICAgICAgICAg aWtzX3dhaXQoS0VSTUlUX1JFUV9TVE9QLDApOyAvKiBTdG9wIHRoZSBvdGhlciBTZXJ2ZXIgKi8K LQkJLyogX3Vfc3RhcnQgPSAxOyAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKFRF TE9QVF9NRShURUxPUFRfS0VSTUlUKSAmJgotICAgICAgICAgICAgICAgIFRFTE9QVF9TQihURUxP UFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQpIHsKLSAgICAgICAgICAgICAgICB0bl9zaWtzKEtF Uk1JVF9TVE9QKTsJLyogSSdtIG5vdCBzZXJ2ZXJpbmcgKi8KLQkgCVRFTE9QVF9TQihURUxPUFRf S0VSTUlUKS5rZXJtaXQubWVfc3RhcnQgPSAwOwotCQlfbWVfc3RhcnQgPSAxOwotICAgICAgICAg ICAgfQotICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBDS19YWVogKi8KLSAgICAgICAgaWYgKHNz dGF0ZSA9PSAneCcgfHwgc3N0YXRlID09ICd2JykgeyAvKiBSZXNwb25kaW5nIHRvIGEgcmVxdWVz dCAqLwotICAgICAgICAgICAgaWYgKCFpbnNlcnZlciAmJiBURUxPUFRfVShURUxPUFRfS0VSTUlU KSAmJgotICAgICAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQudV9z dGFydCkgewotICAgICAgICAgICAgICAgIGlrc193YWl0KEtFUk1JVF9SRVFfU1RPUCwwKTsgLyog U3RvcCB0aGUgb3RoZXIgU2VydmVyICovCi0JCS8qIF91X3N0YXJ0ID0gMTsgKi8KLSAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIGlmIChURUxPUFRfTUUoVEVMT1BUX0tFUk1JVCkgJiYKLSAgICAg ICAgICAgICAgICAhVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCkgewot ICAgICAgICAgICAgICAgIHRuX3Npa3MoS0VSTUlUX1NUQVJUKTsJLyogU2VuZCBLZXJtaXQtU2Vy dmVyIFN0YXJ0ICovCi0JIAlURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0 ID0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsJCQkvKiBJbml0aWF0aW5nIGEg cmVxdWVzdCAqLwotICAgICAgICAgICAgaWYgKFRFTE9QVF9NRShURUxPUFRfS0VSTUlUKSAmJgot ICAgICAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQp IHsKLSAgICAgICAgICAgICAgICB0bl9zaWtzKEtFUk1JVF9TVE9QKTsJLyogSSdtIG5vdCBzZXJ2 ZXJpbmcgKi8KLQkgCVRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQgPSAw OwotCQlfbWVfc3RhcnQgPSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKFRFTE9Q VF9VKFRFTE9QVF9LRVJNSVQpICYmCi0JICAgICAgICAhVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQp Lmtlcm1pdC51X3N0YXJ0KSB7Ci0JCS8qIFNlbmQgUmVxLVNlcnZlci1TdGFydCAqLwotICAgICAg ICAgICAgICAgIGlmICghaWtzX3dhaXQoS0VSTUlUX1JFUV9TVEFSVCwwKSkgewotICAgICAgICAg ICAgICAgICAgICBpZiAoc3N0YXRlICE9ICdzJykgewotCQkJc3VjY2VzcyA9IDA7CS8qIE90aGVy IEtlcm1pdCByZWZ1c2VkIHRvIHNlcnZlICovCi0JCQlpZiAobG9jYWwpCi0JCQkgIHByaW50Zigi QSBLZXJtaXQgU2VydmVyIGlzIG5vdCBhdmFpbGFibGVcclxuIik7Ci0JCQlkZWJ1ZyhGMTEwLCJw cm90bygpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkEgS2VybWl0IFNlcnZlciBp cyBub3QgYXZhaWxhYmxlIiwwKTsKLQkJCXRsb2coRjExMCwiSUtTIGNsaWVudC9zZXJ2ZXIgZmFp bHVyZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBIEtlcm1pdCBTZXJ2ZXIgaXMg bm90IGF2YWlsYWJsZSIsMCk7Ci0JCQlnb3RvIHh4cHJvdG94OwotICAgICAgICAgICAgICAgICAg ICB9Ci0JCX0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIElLU19PUFRJT04g Ki8KLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAgIGlmICh0bl9ub19lbmNyeXB0X3hmZXIg JiYgIShzc3RlbG5ldCB8fCBpbnNlcnZlcikpIHsKLSAgICAgICAgICAgIGNrX3RuX2VuY19zdG9w KCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAgfQotI2VuZGlm IC8qIFROQ09ERSAqLwotCi0gICAgaWYgKCF4ZnJpbnQpIGNvbm5vaSgpOwotICAgIHh4cHJvdG8o KTsJCQkJLyogQ2FsbCB0aGUgcmVhbCBwcm90b2NvbCBmdW5jdGlvbiAqLwotCi0jaWZkZWYgSUtT X09QVElPTgotICB4eHByb3RveDoKLSNlbmRpZiAvKiBJS1NfT1BUSU9OICovCi0gICAgeGZlcnN0 YXQgPSBzdWNjZXNzOwkJCS8qIFJlbWVtYmVyIHRyYW5zZmVyIHN0YXR1cyAqLwotICAgIGthY3Rp dmUgPSAwOwotCi0jaWZkZWYgVE5DT0RFCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICBp ZiAodG5fbm9fZW5jcnlwdF94ZmVyICYmICEoc3N0ZWxuZXQgfHwgaW5zZXJ2ZXIpKSB7Ci0gICAg ICAgICAgICBja190bl9lbmNfc3RhcnQoKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENLX0VOQ1JZ UFRJT04gKi8KLSNpZmRlZiBJS1NfT1BUSU9OCi0gICAgaWYgKFRFTE9QVF9NRShURUxPUFRfS0VS TUlUKSAmJgotICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0 ICYmICFfbWVfc3RhcnQpIHsKLSAgICAgICAgdG5fc2lrcyhLRVJNSVRfU1RPUCk7CQkvKiBTZXJ2 ZXIgaXMgc3RvcHBlZCAqLwotIAlURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0 YXJ0ID0gMDsKLSAgICB9Ci0jZW5kaWYgLyogSUtTX09QVElPTiAqLwotICAgIGlmIChpc190biAm JiB0bl9iX3hmZXIgJiYgIShzc3RlbG5ldCB8fCBpbnNlcnZlcikpIHsKLSAgICAgICAgLyogaWYg d2UgbmVnb3RpYXRlZCBCaW5hcnkgbW9kZSB0cnkgdG8gcmVzZXQgaXQgKi8KLSAgICAgICAgaWYg KCFfdV9iaW4pIHsKLSAgICAgICAgICAgIC8qIENoZWNrIHRvIHNlZSBpZiB0aGUgc3RhdGUgY2hh bmdlZCBkdXJpbmcgdGhlIHRyYW5zZmVyICovCi0JICAgIGlmIChURUxPUFRfVShURUxPUFRfQklO QVJZKSkgewotCQl0bl9zb3B0KERPTlQsVEVMT1BUX0JJTkFSWSk7Ci0JCVRFTE9QVF9VTkFOU1dF UkVEX0RPTlQoVEVMT1BUX0JJTkFSWSkgPSAxOwotCSAgICB9IGVsc2UKLQkgICAgICBfdV9iaW4g PSAxOwkJLyogU28gd2UgZG9uJ3QgY2FsbCB0bl93YWl0KCkgKi8KLSAgICAgICAgfQotICAgICAg ICBpZiAoIV9tZV9iaW4pIHsKLSAgICAgICAgICAgIC8qIENoZWNrIHRvIHNlZSBpZiB0aGUgc3Rh dGUgY2hhbmdlZCBkdXJpbmcgdGhlIHRyYW5zZmVyICovCi0JICAgIGlmIChURUxPUFRfTUUoVEVM T1BUX0JJTkFSWSkpIHsKLQkJdG5fc29wdChXT05ULFRFTE9QVF9CSU5BUlkpOwotCQlURUxPUFRf VU5BTlNXRVJFRF9XT05UKFRFTE9QVF9CSU5BUlkpID0gMTsKLQkgICAgfSBlbHNlCi0JICAgICAg X21lX2JpbiA9IDE7CQkvKiBTbyB3ZSBkb24ndCBjYWxsIHRuX3dhaXQoKSAqLwotCX0KLQlpZiAo IShfbWVfYmluICYmIF91X2JpbikpCi0JICB0bl93YWl0KCJwcm90byByZXNldCBiaW5hcnkgbW9k ZSIpOwotICAgIH0KLSNlbmRpZiAvKiBUTkNPREUgKi8KLQotI2lmZGVmIFBBVFRFUk5TCi0gICAg cGF0dGVybnMgPSBwYV9zYXZlOwotI2VuZGlmIC8qIFBBVFRFUk5TICovCi0gICAgZmlsZXBlZWsg PSBzY2FuX3NhdmU7Ci0KLSNpZmRlZiBTVFJFQU1JTkcKLSAgICBzdHJlYW1pbmcgPSAwOwotICAg IC8qIHN0cmVhbW9rID0gMDsgKi8KLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLSNpZmRlZiBDT01N RU5UCi0jaWZkZWYgQ0tfU1BFRUQKLSAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCi0gICAg ICBjdGxwW2ldID0gc19jdGxwW2ldOwotICAgIGZfY3RscCA9IDA7Ci0jZW5kaWYgLyogQ0tfU1BF RUQgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgdXJjbGVhciA9IDA7Ci0gICAgaWYgKCFz dWNjZXNzKSB7Ci0JeGl0c3RhIHw9ICh3aGF0ICYgV19LRVJNSVQpOwotCXRsb2coRjExMCwiIGZh aWxlZDoiLChjaGFyICopZXBrdG1zZywwKTsKLSAgICB9Ci0gICAgZGVidWcoRjExMSwicHJvdG8g eGZlcnN0YXQiLGVwa3Rtc2cseGZlcnN0YXQpOwotICAgIHNsb3N0YXJ0ID0gc3Nfc2F2ZTsKLSAg ICBpZiAoc190aW1pbnQgPiAtMSkgewkJLyogQmVjYXVzZSBvZiBSRU1PVEUgU0VUICovCi0JdGlt aW50ID0gc190aW1pbnQ7Ci0Jc190aW1pbnQgPSAtMTsKLSAgICB9Ci0gICAgcmVjdXJzaXZlID0g cl9zYXZlOwotICAgIGZuc3BhdGggPSBwX3NhdmU7Ci0gICAgaWYgKGNfc2F2ZSA+IC0xKSB7CQkJ LyogQmVjYXVzZSBvZiBSRU1PVEUgU0VUICovCi0JYmN0ciA9IGNfc2F2ZTsKLQljX3NhdmUgPSAt MTsKLSAgICB9Ci0gICAgZm5jbnYgICA9IGZfc2F2ZTsKLSAgICBiaW5hcnkgID0gYl9zYXZlOwot I2lmZGVmIFBJUEVTRU5ECi0gICAgcGlwZXNlbmQgPSAwOyAgICAJCQkvKiBOZXh0IHRpbWUgbWln aHQgbm90IGJlIHBpcGVzZW5kICovCi0jZW5kaWYgLyogUElQRVNFTkQgKi8KLSNpZm5kZWYgTk9M T0NBTAotI2lmZGVmIE9TMgotICAgIGN1cnNvcmVuYVt2bW9kZV0gPSBjdXJzb3Jfc2F2ZTsKLSAg ICB0ZXJtX2lvID0gdGVybV9pb19zYXZlOwotICAgIGRpc3BsYXlfZGVtbyA9IDE7Ci0jZW5kaWYg LyogT1MyICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotfQotCi1zdGF0aWMgVk9JRAoteHhwcm90 bygpIHsKLSAgICBpbnQgeDsKLSAgICBsb25nIGx4OwotI2lmZGVmIENLX1hZWgotI2lmZGVmIFhZ Wl9JTlRFUk5BTAotX1BST1RPVFlQKCBpbnQgcHh5eiwgKGludCkgKTsKLSNlbmRpZiAvKiBYWVpf SU5URVJOQUwgKi8KLSNlbmRpZiAvKiBDS19YWVogKi8KLQotICAgIGNoYXIgeHNzWzJdOwkJCS8q IFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBzc3RhdGUgKi8KLSAgICB4c3NbMF0gPSBzc3RhdGU7 Ci0gICAgeHNzWzFdID0gTlVMOwotICAgIHNfdGltaW50ID0gdGltaW50OwotCi0gICAgZGVidWco RjEwMSwieHhwcm90byBlbnRyeSBqdXN0b25lIiwiIixqdXN0b25lKTsKLSAgICBzdWNjZXNzID0g MDsKLQotICAgIHJldHJpZXZlID0gMDsJCQkvKiBSZXNldCB0aGVzZSAuLi4gKi8KLSAgICByZWdl dCA9IDA7Ci0gICAgb3BrdCA9IDA7Ci0KLSAgICBpZiAobG9jYWwgJiYgdHRjaGsoKSA8IDApIHsJ CS8qIEdpdmluZyBCWUUgb3IgRklOICovCi0JaWYgKGJ5ZV9hY3RpdmUpIHsJCS8qIGJ1dCB0aGVy ZSBpcyBubyBjb25uZWN0aW9uICovCi0JICAgIHR0Y2xvcygwKTsKLQkgICAgc3VjY2VzcyA9IDE7 Ci0JICAgIHJldHVybjsKLQl9Ci0JLyogRGl0dG8gZm9yIGFueSBSRU1PVEUgY29tbWFuZCAqLwot CWlmIChzc3RhdGUgPT0gJ2cnICYmIGNtYXJnICkgewotCSAgICBpZiAoKmNtYXJnID09ICdMJyB8 fCAqY21hcmcgPT0gJ0YnIHx8ICpjbWFyZyA9PSAnWCcpCi0JICAgICAgc3VjY2VzcyA9IDE7Ci0J ICAgIGVsc2UKLQkgICAgICBwcmludGYoIj9ObyBjb25uZWN0aW9uXHJcbiIpOwotCSAgICByZXR1 cm47Ci0JfQotICAgIH0KLQotLyogU2V0IHVwIHRoZSBjb21tdW5pY2F0aW9uIGxpbmUgZm9yIGZp bGUgdHJhbnNmZXIuICovCi0vKiBOT1RFOiBBbGwgb2YgdGhlIHh4c2NyZWVuKCkgY2FsbHMgcHJp b3IgdG8gdGhlIHdhcnQoKSBpbnZvY2F0aW9uICovCi0vKiBjb3VsZCBqdXN0IGFzIGVhc2lseSBi ZSBwcmludGYncyBvciwgZm9yIHRoYXQgbWF0dGVyLCBoaW50cy4gKi8KLQotICAgIGlmIChsb2Nh bCAmJiAoc3BlZWQgPCAwTCkgJiYgKG5ldHdvcmsgPT0gMCkpIHsKLQl4eHNjcmVlbihTQ1JfRU0s MCwwTCwiU29ycnksIHlvdSBtdXN0ICdzZXQgc3BlZWQnIGZpcnN0Iik7Ci0JcmV0dXJuOwotICAg IH0KLSAgICB4ID0gLTE7Ci0gICAgaWYgKHR0b3Blbih0dG5hbWUsJngsbWRtdHlwLGNkdGltbykg PCAwKSB7Ci0JZGVidWcoRjExMSwiZmFpbGVkOiBwcm90byB0dG9wZW4gbG9jYWwiLHR0bmFtZSxs b2NhbCk7Ci0JeHhzY3JlZW4oU0NSX0VNLDAsMEwsIkNhbid0IG9wZW4gbGluZSIpOwotCXJldHVy bjsKLSAgICB9Ci0gICAgaWYgKHggPiAtMSkgbG9jYWwgPSB4OwotICAgIGRlYnVnKEYxMTEsInBy b3RvIHR0b3BlbiBsb2NhbCIsdHRuYW1lLGxvY2FsKTsKLQotICAgIGx4ID0gKGxvY2FsICYmICFu ZXR3b3JrKSA/IHNwZWVkIDogLTE7Ci0jaWZkZWYgTkVUQ09OTgotI2lmZGVmIENLX1NQRUVECi0g ICAgaWYgKGlzX3RuKSB7Ci0JY3RscFsodW5zaWduZWQpMjU1XSA9IGN0bHBbQ1JdID0gMTsKLQlp ZiAocGFyaXR5ID09ICdlJyB8fCBwYXJpdHkgPT0gJ20nKSBjdGxwWzEyN10gPSAxOwotCWlmIChm bG93ID09IEZMT19YT05YKSB7CQkvKiBBbHNvIHdhdGNoIG91dCBmb3IgWG9uL1hvZmYgKi8KLQkg ICAgY3RscFsxN10gPSBjdGxwWzE5XSA9IDE7Ci0JICAgIGN0bHBbMTcrMTI4XSA9IGN0bHBbMTkr MTI4XSA9IDE7Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBDS19TUEVFRCAqLwotI2VuZGlmIC8qIE5F VENPTk4gKi8KLSAgICBpZiAodHRwa3QobHgsZmxvdyxwYXJpdHkpIDwgMCkgewkvKiBQdXQgbGlu ZSBpbiBwYWNrZXQgbW9kZSwgKi8KLQl4eHNjcmVlbihTQ1JfRU0sMCwwTCwiQ2FuJ3QgY29uZGl0 aW9uIGxpbmUiKTsKLQlyZXR1cm47Ci0gICAgfQotICAgIGlmIChsb2NhbCAmJiAhbmV0d29yayAm JiBjYXJyaWVyICE9IENBUl9PRkYpIHsKLQlpbnQgeDsJCQkJLyogU2VyaWFsIGNvbm5lY3Rpb24g Ki8KLQl4ID0gdHRnbWRtKCk7CQkJLyogd2l0aCBjYXJyaWVyIGNoZWNraW5nICovCi0JaWYgKHgg PiAtMSkgewotCSAgICBpZiAoISh4ICYgQk1fRENEKSkgewotCQlkZWJ1ZyhGMTAxLCJwcm90byB0 dGdtZG0iLCIiLDApOwotCQl4eHNjcmVlbihTQ1JfRU0sMCwwTCwiQ2FycmllciByZXF1aXJlZCBi dXQgbm90IGRldGVjdGVkIik7Ci0JCXJldHVybjsKLQkgICAgfQotCX0KLSAgICB9Ci0gICAgLyog U2VuZCByZW1vdGUgc2lkZSdzICJyZWNlaXZlIiBvciAic2VydmVyIiBzdGFydHVwIHN0cmluZywg aWYgYW55ICovCi0gICAgaWYgKGxvY2FsICYmIGNraW5kZXgoKGNoYXIgKil4c3MsInNyZ2NqaGsi LDAsMCwxKSkgewotCWNoYXIgKnMgPSBOVUxMOwotICAgICAgICBpZiAoCi0jaWZkZWYgSUtTX09Q VElPTgotCSAgICAvKiBEb24ndCBzZW5kIGF1dG8tYmxhaCBzdHJpbmcgaWYgd2Uga25vdyBvdGhl ciBzaWRlIGlzIHNlcnZpbmcgKi8KLQkgICAgIVRFTE9QVF9VKFRFTE9QVF9LRVJNSVQpIHx8Ci0J ICAgICFURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnVfc3RhcnQKLSNlbHNlCi0JICAg IDEKLSNlbmRpZiAvKiBJS1NfT1BUSU9OICovCi0JICAgICkgewotCSAgICBpZiAoc3N0YXRlID09 ICdzJykgewkvKiBTZW5kaW5nIGZpbGUocykgKi8KLQkJcyA9IGJpbmFyeSA/IHB0YWJbcHJvdG9j b2xdLmhfYl9pbml0IDogcHRhYltwcm90b2NvbF0uaF90X2luaXQ7Ci0JICAgIH0gZWxzZSBpZiAo cHJvdG9jb2wgPT0gUFJPVE9fSykgeyAvKiBDb21tYW5kIGZvciBzZXJ2ZXIgKi8KLQkJcyA9IHB0 YWJbcHJvdG9jb2xdLmhfeF9pbml0OwotCSAgICB9Ci0JfQotI2lmZGVmIENLX1NQRUVECi0jaWZu ZGVmIFVOUFJFRklYWkVSTwotCWlmIChwcm90b2NvbCA9PSBQUk9UT19LKQkvKiBCZWNhdXNlIG9m IEMtc3RyaW5ncy4uLiAqLwotCSAgY3RscFswXSA9IDE7Ci0jZW5kaWYgLyogVU5QUkVGSVhaRVJP ICovCi0jZW5kaWYgLyogQ0tfU1BFRUQgKi8KLQlpZiAocykgaWYgKCpzKSB7CQkvKiBJZiB3ZSBo YXZlIGEgY29tbWFuZCB0byBzZW5kLi4uICovCi0JICAgIGNoYXIgdG1wYnVmWzM1Nl07Ci0JICAg IGludCB0bXBidWZzaXogPSAzNTY7Ci0JICAgIGludCBzdHVmZiA9IC0xLCBzdHVmZjIgPSAtMSwg bGVuID0gMDsKLQkgICAgZXh0ZXJuIGludCB0bmxtOwotCSAgICBpZiAoc3N0YXRlID09ICdzJykg ewkvKiBTZW5kaW5nIGZpbGUocykgKi8KLSNpZmRlZiBDS19YWVoKLQkJaWYgKHByb3RvY29sID09 IFBST1RPX1gpIHsKLQkJICAgIGNoYXIgKiBzMjsKLQkJICAgIHMyID0gY21hcmcyWzBdID8gY21h cmcyIDogY21hcmc7Ci0JCSAgICBpZiAoKGludClzdHJsZW4ocykgKyAoaW50KXN0cmxlbihzMikg KyA0IDwgMzU2KQotCQkgICAgICBzcHJpbnRmKHRtcGJ1ZiwgcywgczIpOwotCQkgICAgZWxzZQot CQkgICAgICB0bXBidWZbMF0gPSBOVUw7Ci0JCX0gZWxzZSB7Ci0jZW5kaWYgLyogQ0tfWFlaICov Ci0JCSAgICBja21ha21zZyh0bXBidWYsIDM1NiwgcywgTlVMTCwgTlVMTCwgTlVMTCk7Ci0jaWZk ZWYgQ0tfWFlaCi0JCX0KLSNlbmRpZiAvKiBDS19YWVogKi8KLQkgICAgfSBlbHNlIHsJCQkvKiBD b21tYW5kIGZvciBzZXJ2ZXIgKi8KLQkJY2tzdHJuY3B5KHRtcGJ1ZixzLDM1Nik7Ci0JICAgIH0K LQkgICAgY2tzdHJuY2F0KHRtcGJ1ZiwgIlwwMTUiLHNpemVvZih0bXBidWYpKTsKLQkgICAgaWYg KHRubG0pCQkJLyogVEVSTUlOQUwgTkVXTElORSBPTiAqLwotCSAgICAgIHN0dWZmID0gTEY7CQkv KiBTdHVmZiBMRiAqLwotI2lmZGVmIFROQ09ERQotCSAgICAvKiBURUxORVQgTkVXTElORSBNT0RF ICovCi0JICAgIGlmIChpc190bikgewotCQlzd2l0Y2ggKFRFTE9QVF9NRShURUxPUFRfQklOQVJZ KSA/IHRuX2JfbmxtIDogdG5fbmxtKSB7Ci0JCSAgY2FzZSBUTkxfQ1I6Ci0JCSAgICBicmVhazsK LQkJICBjYXNlIFROTF9DUk5VTDoKLQkJICAgIGJyZWFrOwotCQkgIGNhc2UgVE5MX0NSTEY6Ci0J CSAgICBzdHVmZjIgPSBzdHVmZjsKLQkJICAgIHN0dWZmID0gTEY7Ci0JCSAgICBicmVhazsKLQkJ fQotCSAgICB9Ci0jZW5kaWYgLyogVE5DT0RFICovCi0KLSNpZmRlZiBORVRDT05OCi0jaWZkZWYg VENQU09DS0VUCi0jaWZkZWYgUkxPR0NPREUKLQkgICAgaWYgKG5ldHdvcmsgJiYgdHRucHJvdG8g PT0gTlBfUkxPR0lOKSB7Ci0JCXN3aXRjaCAodG5fYl9ubG0pIHsgLyogQWx3YXlzIEJJTkFSWSAq LwotCQkgIGNhc2UgVE5MX0NSOgotCQkgICAgYnJlYWs7Ci0JCSAgY2FzZSBUTkxfQ1JOVUw6Ci0J CSAgICBzdHVmZjIgPSBzdHVmZjsKLQkJICAgIHN0dWZmICA9IE5VTDsKLQkJICAgIGJyZWFrOwot CQkgIGNhc2UgVE5MX0NSTEY6Ci0JCSAgICBzdHVmZjIgPSBzdHVmZjsKLQkJICAgIHN0dWZmID0g TEY7Ci0JCSAgICBicmVhazsKLQkJfQotCSAgICB9Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNl bmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNlbmRpZiAvKiBORVRDT05OICovCi0KLQkgICAgbGVuID0g c3RybGVuKHRtcGJ1Zik7Ci0JICAgIGlmIChzdHVmZiA+PSAwICYmIGxlbiA8IHRtcGJ1ZnNpeiAt IDEpIHsKLQkJdG1wYnVmW2xlbisrXSA9IHN0dWZmOwotCQlpZiAoc3R1ZmYyID49IDAgJiYgbGVu IDwgdG1wYnVmc2l6IC0gMSkKLQkJICB0bXBidWZbbGVuKytdID0gc3R1ZmYyOwotCQl0bXBidWZb bGVuXSA9IE5VTDsKLQkgICAgfQotCSAgICB0dG9sKChDSEFSICopdG1wYnVmLGxlbik7Ci0JICAg IGlmIChwcm90b2NvbCA9PSBQUk9UT19LKQkvKiBHaXZlIHJlbW90ZSBLZXJtaXQgdGltZSB0byBz dGFydCAqLwotCSAgICAgIG1zbGVlcCg0MDApOwotCX0KLSAgICB9Ci0KLSNpZmRlZiBDS19YWVoK LSAgICBpZiAocHJvdG9jb2wgIT0gUFJPVE9fSykgewkJLyogTm9uLUtlcm1pdCBwcm90b2NvbCBz ZWxlY3RlZCAqLwotCWNoYXIgdG1wYnVmWzM1Nl07Ci0JaW50IHRtcGJ1ZnNpeiA9IDM1NjsKLQlj aGFyICogcyA9ICIiOwotCi0jaWZkZWYgQ0tfVE1QRElSCi0JaWYgKHNzdGF0ZSA9PSAndicpIHsJ CS8qIElmIHJlY2VpdmluZyBhbmQuLi4gKi8KLQkgICAgaWYgKGRsZGlyICYmICFmX3RtcGRpcikg ewkvKiBpZiB0aGV5IGhhdmUgYSBkb3dubG9hZCBkaXJlY3RvcnkgKi8KLQkJaWYgKHMgPSB6Z3Rk aXIoKSkgewkvKiBHZXQgY3VycmVudCBkaXJlY3RvcnkgKi8KLQkJICAgIGlmICh6Y2hkaXIoZGxk aXIpKSB7IC8qIENoYW5nZSB0byBkb3dubG9hZCBkaXJlY3RvcnkgKi8KLQkJCWNrc3RybmNweShz YXZkaXIscyxUTVBESVJMRU4pOwotCQkJZl90bXBkaXIgPSAxOwkvKiBSZW1lbWJlciB0aGF0IHdl IGRpZCB0aGlzICovCi0JCSAgICB9Ci0JCX0KLQkgICAgfQotCX0KLSNlbmRpZiAvKiBDS19UTVBE SVIgKi8KLQotI2lmZGVmIFhZWl9JTlRFUk5BTAkJCS8qIEludGVybmFsICovCi0Jc3VjY2VzcyA9 ICFweHl6KHNzdGF0ZSk7Ci0jZWxzZQotI2lmZGVmIENLX1JFRElSCQkJCS8qIEV4dGVybmFsICov Ci0Jc3dpdGNoIChzc3RhdGUpIHsKLQkgIGNhc2UgJ3MnOgkJCS8qICdUaXMgYmV0dGVyIHRvIFNF TkQuLi4gKi8KLQkgICAgcyA9IGJpbmFyeSA/IHB0YWJbcHJvdG9jb2xdLnBfYl9zY21kIDogcHRh Yltwcm90b2NvbF0ucF90X3NjbWQ7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSAndic6CQkJLyogLi4u IHRoYW4gUkVDRUlWRSAqLwotCSAgICBzID0gYmluYXJ5ID8gcHRhYltwcm90b2NvbF0ucF9iX3Jj bWQgOiBwdGFiW3Byb3RvY29sXS5wX3RfcmNtZDsKLQkgICAgYnJlYWs7Ci0JfQotCWlmICghcykg cyA9ICIiOwotCWlmICgqcykgewotCSAgICBpZiAoc3N0YXRlID09ICdzJykgewkvKiBTZW5kaW5n ICovCi0JCWV4dGVybiBpbnQgeGZlcm1vZGU7Ci0JCWludCBrID0gMCwgeCA9IDAsIGIgPSBiaW5h cnk7Ci0JCS8qCi0JCSAgSWYganVzdCBvbmUgZmlsZSB3ZSBjYW4gc2NhbiBpdCB0byBzZXQgdGhl IHhmZXIgbW9kZS4KLQkJICBPdGhlcndpc2UgaXQncyB1cCB0byB0aGUgZXh0ZXJuYWwgcHJvdG9j b2wgcHJvZ3JhbS4KLQkJKi8KLQkJaWYgKHBhdHRlcm5zICYmIHhmZXJtb2RlID09IFhNT0RFX0Eg JiYgIWlzd2lsZChmc3BlYykpIHsKLQkJICAgIGV4dGVybiBpbnQgbnNjYW5maWxlOwotCQkgICAg ayA9IHNjYW5maWxlKGZzcGVjLCZ4LG5zY2FuZmlsZSk7Ci0JCSAgICBpZiAoayA+IC0xKSB7Ci0J CQliID0gKGsgPT0gRlRfQklOKSA/IFhZRlRfQiA6IFhZRlRfVDsKLQkJCXMgPSBiID8KLQkJCSAg ICBwdGFiW3Byb3RvY29sXS5wX2Jfc2NtZCA6Ci0JCQkgICAgcHRhYltwcm90b2NvbF0ucF90X3Nj bWQ7Ci0JCSAgICB9Ci0JCX0KLQkJaWYgKChpbnQpc3RybGVuKHMpICsgKGludClzdHJsZW4oZnNw ZWMpIDwgdG1wYnVmc2l6KSB7Ci0JCSAgICBzcHJpbnRmKHRtcGJ1ZixzLGZzcGVjKTsgLyogc2Fm ZSAocHJlY2hlY2tlZCkgKi8KLQkJICAgIHRsb2coRjExMCwiU2VuZGluZyIsZnNwZWMsMEwpOwot CQl9Ci0JICAgIH0gZWxzZSB7CQkJLyogUmVjZWl2aW5nICovCi0JCWlmICgoaW50KXN0cmxlbihz KSArIChpbnQpc3RybGVuKGNtYXJnMikgPCB0bXBidWZzaXopIHsKLQkJICAgIHNwcmludGYodG1w YnVmLHMsY21hcmcyKTsgLyogc2FmZSAocHJlY2hlY2tlZCkgKi8KLQkJICAgIHRsb2coRjExMCwi UmVjZWl2aW5nIixjbWFyZzIsMEwpOwotCQl9Ci0JICAgIH0KLQkgICAgdGxvZyhGMTEwLCIgdmlh IGV4dGVybmFsIHByb3RvY29sOiIsdG1wYnVmLDApOwotCSAgICBkZWJ1ZyhGMTEwLCJja2Nwcm8g dHRydW5jbWQiLHRtcGJ1ZiwwKTsKLQkgICAgc3VjY2VzcyA9IHR0cnVuY21kKHRtcGJ1Zik7Ci0J ICAgIHRsb2coRjExMCwiIHN0YXR1czoiLHN1Y2Nlc3MgPyAiT0siIDogIkZBSUxFRCIsIDApOwot CX0gZWxzZSB7Ci0JICAgIHByaW50ZigiP1NvcnJ5LCBubyBleHRlcm5hbCBwcm90b2NvbCBkZWZp bmVkIGZvciAlc1xyXG4iLAotCQkgICBwdGFiW3Byb3RvY29sXS5wX25hbWUKLQkJICAgKTsKLQl9 Ci0jZWxzZQotCXByaW50ZigKLSJTb3JyeSwgb25seSBLZXJtaXQgcHJvdG9jb2wgaXMgc3VwcG9y dGVkIGluIHRoaXMgdmVyc2lvbiBvZiBLZXJtaXRcbiIKLQkgICAgICAgKTsKLSNlbmRpZiAvKiBD S19SRURJUiAqLwotI2VuZGlmIC8qIFhZWl9JTlRFUk5BTCAqLwotCXJldHVybjsKLSAgICB9Ci0j ZW5kaWYgLyogQ0tfWFlaICovCi0KLSNpZmRlZiBOVFNJR1gKLSAgICBjb25yYXcoKTsKLSAgICBj b25ub2koKTsKLSNlbHNlCi0gICAgaWYgKCFsb2NhbCkKLSAgICAgIGNvbm5vaSgpOwkJCQkvKiBO byBjb25zb2xlIGludGVycnVwdHMgaWYgcmVtb3RlICovCi0jZW5kaWYgLyogTlRTSUcgKi8KLQot ICAgIGthY3RpdmUgPSAxOwotICAgIGlmIChzc3RhdGUgPT0gJ3gnKSB7CQkvKiBJZiBlbnRlcmlu ZyBzZXJ2ZXIgbW9kZSwgKi8KLQlleHRlcm4gaW50IGhvd2NhbGxlZDsKLQlzZXJ2ZXIgPSAxOwkJ CS8qIHNldCBmbGFnLCAqLwotCWRlYnVnKEYxMDEsInNlcnZlciBiYWNrZ3JkIiwiIixiYWNrZ3Jk KTsKLQlkZWJ1ZyhGMTAxLCJzZXJ2ZXIgcXVpZXQiLCIiLHF1aWV0KTsKLQlkZWJ1ZyhGMTAwLCJT SE9VTEQgTk9UIFNFRSBUSElTIElGIElOIEJBQ0tHUk9VTkQhIiwiIiwwKTsKLQlpZiAoaG93Y2Fs bGVkID09IElfQU1fU1NIU1VCKSB7CS8qIGFuZCBpc3N1ZSBhcHByb3ByaWF0ZSBtZXNzYWdlLiAq LwotCSAgICB0dG9sKChDSEFSICopIktFUk1JVCBSRUFEWSBUTyBTRVJWRS4uLlwwMTVcMDEyIiwy Nik7Ci0JfSBlbHNlIGlmICghbG9jYWwpIHsKLQkgICAgaWYgKCFxdWlldCAmJiAhYmFja2dyZAot I2lmZGVmIElLU19PUFRJT04KLSAgICAgICAgICAgICAgICAmJiAhVEVMT1BUX01FKFRFTE9QVF9L RVJNSVQpIC8qIFVzZXIgd2FzIHRvbGQgYnkgbmVnb3RpYXRpb24gKi8KLSNlbmRpZiAvKiBJS1Nf T1BUSU9OICovCi0JCSkgewotCQljb25vbGwoc3J2dHh0KTsKLQkJY29ub2xsKCJLRVJNSVQgUkVB RFkgVE8gU0VSVkUuLi4iKTsKLQkgICAgfQotCX0gZWxzZSB7Ci0JICAgIGNvbm9sKCJFbnRlcmlu ZyBzZXJ2ZXIgbW9kZSBvbiAiKTsKLQkgICAgY29ub2xsKHR0bmFtZSk7Ci0JICAgIGNvbm9sbCgi VHlwZSBDdHJsLUMgdG8gcXVpdC4iKTsKLQkgICAgaWYgKHNydmRpcykgaW50bXNnKC0xTCk7Ci0j aWZkZWYgVENQU09DS0VUCi0jaWZuZGVmIE5PTElTVEVOCi0JICAgIGlmIChuZXR3b3JrICYmIHRj cHNyZmQgPiAwKQotCSAgICAgIHR0b2woKENIQVIgKikiS0VSTUlUIFJFQURZIFRPIFNFUlZFLi4u XDAxNVwwMTIiLDI2KTsKLSNlbmRpZiAvKiBOT0xJU1RFTiAqLwotI2VuZGlmIC8qIFRDUFNPQ0tF VCAqLwotCX0KLSAgICB9IGVsc2UKLSAgICAgIHNlcnZlciA9IDA7Ci0jaWZkZWYgVk1TCi0gICAg aWYgKCFxdWlldCAmJiAhYmFja2dyZCkgICAgLyogU28gbWVzc2FnZSBkb2Vzbid0IG92ZXJ3cml0 ZSBwcm9tcHQgKi8KLSAgICAgIGNvbm9sbCgiIik7Ci0gICAgaWYgKGxvY2FsKSBjb25yZXMoKTsg ICAgICAgLyogU28gQ3RybC1DIHdpbGwgd29yayAqLwotI2VuZGlmIC8qIFZNUyAqLwotLyoKLSAg SWYgaW4gcmVtb3RlIG1vZGUsIG5vdCBzaHVzaGVkLCBub3QgaW4gYmFja2dyb3VuZCwgYW5kIGF0 IHRvcCBjb21tYW5kIGxldmVsLAotICBpc3N1ZSBhIGhlbHBmdWwgbWVzc2FnZSB0ZWxsaW5nIHdo YXQgdG8gZG8uLi4KLSovCi0gICAgaWYgKCFsb2NhbCAmJiAhcXVpZXQgJiYgIWJhY2tncmQpIHsK LQlpZiAoc3N0YXRlID09ICd2JykgewotCSAgICBjb25vbGwoIlJldHVybiB0byB5b3VyIGxvY2Fs IEtlcm1pdCBhbmQgZ2l2ZSBhIFNFTkQgY29tbWFuZC4iKTsKLQkgICAgY29ub2xsKCIiKTsKLQkg ICAgY29ub2xsKCJLRVJNSVQgUkVBRFkgVE8gUkVDRUlWRS4uLiIpOwotCX0gZWxzZSBpZiAoc3N0 YXRlID09ICdzJykgewotCSAgICBjb25vbGwoIlJldHVybiB0byB5b3VyIGxvY2FsIEtlcm1pdCBh bmQgZ2l2ZSBhIFJFQ0VJVkUgY29tbWFuZC4iKTsKLQkgICAgY29ub2xsKCIiKTsKLQkgICAgY29u b2xsKCJLRVJNSVQgUkVBRFkgVE8gU0VORC4uLiIpOwotCX0gZWxzZSBpZiAoIHNzdGF0ZSA9PSAn ZycgfHwgc3N0YXRlID09ICdyJyB8fCBzc3RhdGUgPT0gJ2gnIHx8Ci0JCSAgICBzc3RhdGUgPT0g J2onIHx8IHNzdGF0ZSA9PSAnYycgKSB7Ci0JICAgIGNvbm9sbCgiUmV0dXJuIHRvIHlvdXIgbG9j YWwgS2VybWl0IGFuZCBnaXZlIGEgU0VSVkVSIGNvbW1hbmQuIik7Ci0JICAgIGNvbm9sbCgiIik7 Ci0JICAgIGNvbm9sbCgoc3N0YXRlID09ICdyJyB8fCBzc3RhdGUgPT0gJ2onIHx8IHNzdGF0ZSA9 PSAnaCcpID8KLQkJICAgIktFUk1JVCBSRUFEWSBUTyBHRVQuLi4iIDoKLQkJICAgIktFUk1JVCBS RUFEWSBUTyBTRU5EIFNFUlZFUiBDT01NQU5ELi4uIik7Ci0JfQotICAgIH0KLSNpZmRlZiBDT01N RU5UCi0gICAgaWYgKCFsb2NhbCkgc2xlZXAoMSk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotLyoK LSAgVGhlICd3YXJ0KCknIGZ1bmN0aW9uIGlzIGdlbmVyYXRlZCBieSB0aGUgd2FydCBwcm9ncmFt LiAgSXQgZ2V0cyBhCi0gIGNoYXJhY3RlciBmcm9tIHRoZSBpbnB1dCgpIHJvdXRpbmUgYW5kIHRo ZW4gYmFzZWQgb24gdGhhdCBjaGFyYWN0ZXIgYW5kCi0gIHRoZSBjdXJyZW50IHN0YXRlLCBzZWxl Y3RzIHRoZSBhcHByb3ByaWF0ZSBhY3Rpb24sIGFjY29yZGluZyB0byB0aGUgc3RhdGUKLSAgdGFi bGUgYWJvdmUsIHdoaWNoIGlzIHRyYW5zZm9ybWVkIGJ5IHRoZSB3YXJ0IHByb2dyYW0gaW50byBh IGJpZyBjYXNlCi0gIHN0YXRlbWVudC4gIFRoZSBmdW5jdGlvbiBpcyBhY3RpdmUgZm9yIG9uZSB0 cmFuc2FjdGlvbi4KLSovCi0gICAgcnRpbWVyKCk7CQkJCS8qIFJlc2V0IGVsYXBzZWQtdGltZSB0 aW1lciAqLwotI2lmZGVmIEdGVElNRVIKLSAgICByZnRpbWVyKCk7Ci0jZW5kaWYgLyogR0ZUSU1F UiAqLwotICAgIHJlc2V0YygpOwkJCQkvKiAmIG90aGVyIHBlci10cmFuc2FjdGlvbiBjb3VudGVy cy4gKi8KLQotICAgIGRlYnVnKEYxMDEsInByb3RvIGNhbGxpbmcgd2FydCwganVzdG9uZSIsIiIs anVzdG9uZSk7Ci0KLSAgICB3YXJ0KCk7CQkJCS8qIEVudGVyIHRoZSBzdGF0ZSB0YWJsZSBzd2l0 Y2hlci4gKi8KLS8qCi0gIE5vdGU6IHRoZSBmb2xsb3dpbmcgaXMgbmVjZXNzYXJ5IGluIGNhc2Ug d2UgaGF2ZSBqdXN0IGRvbmUgYSByZW1vdGUtbW9kZQotICBmaWxlIHRyYW5zZmVyLCBpbiB3aGlj aCBjYXNlIHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbCBtb2RlcyBoYXZlIGJlZW4KLSAgY2hhbmdl ZCBieSB0dHBrdCgpLiAgSW4gcGFydGljdWxhciwgc3BlY2lhbCBjaGFyYWN0ZXJzIGxpa2UgQ3Ry bC1DIGFuZAotICBDdHJsLVwgbWlnaHQgaGF2ZSBiZWVuIHR1cm5lZCBvZmYgKHNlZSB0dHBrdCku ICBTbyB0aGlzIGNhbGwgdG8gdHRyZXMoKSBpcwotICBlc3NlbnRpYWwuICBJTVBPUlRBTlQ6IHJl c3RvcmUgaW50ZXJydXB0IGhhbmRsZXJzIGZpcnN0LCBvdGhlcndpc2UgYW55Ci0gIHRlcm1pbmFs IGludGVycnVwdHMgdGhhdCBvY2N1ciBiZWZvcmUgdGhpcyBpcyBkb25lIGluIHRoZSBub3JtYWwg cGxhY2UKLSAgbGF0ZXIgd2lsbCBjYXVzZSBhIGNyYXNoLgotKi8KLSNpZmRlZiBPUzIKLSAgICB0 dHJlcygpOwkJCQkvKiBSZXNldCB0aGUgY29tbXVuaWNhdGlvbiBkZXZpY2UgKi8KLSNlbHNlCi0g ICAgaWYgKCFsb2NhbCkgewotCXNldGludCgpOwkJCS8qIEFybSBpbnRlcnJ1cHQgaGFuZGxlcnMg RklSU1QgKi8KLQltc2xlZXAoNTAwKTsKLQl0dHJlcygpOwkJCS8qIFRoZW4gcmVzdG9yZSB0ZXJt aW5hbC4gKi8KLSAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0gICAgeHhzY3JlZW4oU0NSX1RDLDAs MEwsIiIpOwkJLyogVHJhbnNhY3Rpb24gY29tcGxldGUgKi8KLSAgICB4ID0gcXVpZXQ7Ci0gICAg cXVpZXQ9MTsKLSAgICBjbHNpZigpOwkJCQkvKiBGYWlsc2FmZSBpbiBjYXNlIHdlIG1pc3NlZCAq LwotICAgIGNsc29mKDEpOwkJCQkvKiBhIGNhc2UgaW4gdGhlIHN0YXRlIG1hY2hpbmUuICovCi0g ICAgcXVpZXQgPSB4OwotCi0gICAgaWYgKHNlcnZlcikgewkJCS8qIEJhY2sgZnJvbSBwYWNrZXQg cHJvdG9jb2wuICovCi0gICAgCWlmICghcXVpZXQgJiYgIWJhY2tncmQKLSNpZmRlZiBJS1NECi0J ICAgICYmICFpbnNlcnZlcgotI2VuZGlmIC8qIElLU0QgKi8KLQkgICAgKSB7CQkJCS8qIEdpdmUg YXBwcm9wcmlhdGUgbWVzc2FnZSAqLwotCSAgICBjb25vbGwoIiIpOwotCSAgICBjb25vbGwoIkMt S2VybWl0IHNlcnZlciBkb25lIik7Ci0gICAgICAgIH0KLSAgICAgICAgc2VydmVyID0gMDsJCQkv KiBOb3QgYSBzZXJ2ZXIgYW55IG1vcmUgKi8KLSAgICB9Ci19Ci0KLS8qICBTIEcgRSBUIEkgTiBJ IFQgIC0tICBIYW5kbGUgaW5jb21pbmcgR0VULUNsYXNzIHBhY2tldHMgICovCi0KLS8qCi0gIFJl dHVybnM6Ci0gICAtMTogT24gZXJyb3IKLSAgICAwOiBHRVQgcGFja2V0IHByb2Nlc3NlZCBPSyAt IHJlYWR5IHRvIFNlbmQuCi0gICAgMTogRXh0ZW5kZWQgR0VUIHByb2Nlc3NlZCBPSyAtIHdhaXQg Zm9yIGFub3RoZXIuCi0qLwotc3RhdGljIGludAotc2dldGluaXQocmVnZXQseGdldCkgaW50IHJl Z2V0LCB4Z2V0OyB7CS8qIFNlcnZlciBlbmQgb2YgR0VUIGNvbW1hbmQgKi8KLSAgICBjaGFyICog ZnMgPSBOVUxMOwkJCS8qIFBvaW50ZXIgdG8gZmlsZXNwZWMgKi8KLSAgICBpbnQgaSwgbiwgZG9u ZSA9IDA7Ci0jaWZkZWYgUElQRVNFTkQKLSAgICBleHRlcm4gaW50IHVzZXBpcGVzLCBwaXBlc2Vu ZDsKLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotICAgIGV4dGVybiBpbnQgbm9saW5rczsKLQotICAg IGlmICghRU5BQkxFRChlbl9nZXQpKSB7CQkvKiBPbmx5IGlmIG5vdCBkaXNhYmxlZCEgICovCi0J ZXJycGt0KChDSEFSICopIkdFVCBkaXNhYmxlZCIpOwotCXJldHVybigtMSk7Ci0gICAgfQotCi0g ICAgLyogT0sgdG8gcHJvY2VlZCAqLwotCi0gICAgbm9saW5rcyA9IHJlY3Vyc2l2ZTsKLSAgICBm aWxjbnQgPSAwOwotCi0jaWZkZWYgV0hBVEFNSQotICAgIC8qIElmIHRoZXkgYXJlIGFsaWtlIHRo aXMgd2FzIGFscmVhZHkgZG9uZSBpbiB3aG9hcmV3ZSgpICovCi0gICAgZGVidWcoRjEwMSwic2dl dGluaXQgd2hhdHJ1IiwiIix3aGF0cnUpOwotICAgIGlmICh3aGF0cnUgJiBXTUlfRkxBRykgewkJ LyogRGlkIHdlIGdldCBXSEFUQU1JIGluZm8/ICovCi0JZGVidWcoRjEwMSwic2dldGluaXQgYmlu YXJ5ICgxKSIsIiIsYmluYXJ5KTsKLSNpZmRlZiBWTVMKLQlpZiAoYmluYXJ5ICE9IFhZRlRfSSAm JiBiaW5hcnkgIT0gWFlGVF9MKQotI2Vsc2UKLSNpZmRlZiBPUzIKLQkgIGlmIChiaW5hcnkgIT0g WFlGVF9MKQotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFZNUyAqLwotCSAgICBiaW5hcnkg PSAod2hhdHJ1ICYgV01JX0ZNT0RFKSA/IC8qIFllcywgc2V0IGZpbGUgdHlwZSAqLwotCSAgICAg IFhZRlRfQiA6IFhZRlRfVDsJLyogYXV0b21hdGljYWxseSAqLwotCWRlYnVnKEYxMDEsInNnZXRp bml0IGJpbmFyeSAoMikiLCIiLGJpbmFyeSk7Ci0JaWYgKCF3ZWFyZWFsaWtlKQotCSAgZm5jbnYg PSAod2hhdHJ1ICYgV01JX0ZOQU1FKSA/IDEgOiAwOyAvKiBBbmQgbmFtZSBjb252ZXJzaW9uICov Ci0gICAgfQotI2VuZGlmIC8qIFdIQVRBTUkgKi8KLQotICAgIGZzID0gKGNoYXIgKilzcnZjbWQ7 Ci0gICAgc3J2cHRyID0gc3J2Y21kOwkJCS8qIFBvaW50IHRvIHNlcnZlciBjb21tYW5kIGJ1ZmZl ciAqLwotICAgIGRlY29kZShyZGF0YXAscHV0c3J2LDApOwkJLyogRGVjb2RlIHRoZSBHRVQgY29t bWFuZCBpbnRvIGl0ICovCi0gICAgLyogQWNjZXB0IG11bHRpcGxlIGZpbGVzcGVjcyAqLwotICAg IGNtYXJnMiA9ICIiOwkJCS8qIERvbid0IHVzZSBjbWFyZzIgKi8KLSAgICBjbWFyZyA9ICIiOwkJ CQkvKiBEb24ndCB1c2UgY21hcmcgKi8KLQotICAgIGRvbmUgPSAxOwkJCQkvKiBPbmx5IDEgcGFj a2V0IG5lZWRlZC4uLiAqLwotICAgIGlmICh4Z2V0KSB7CQkJCS8qIFNwZWNpYWwgZGVjb2Rpbmcg Zm9yIEV4dGVuZGVkIEdFVCAqLwotCWNoYXIgTCwgbmV4dCwgYzsJCS8qIFBMViBpdGVtcyAqLwot CWludCBsZW4sIHZhbDsJCQkvKiBNb3JlIFBMViBpdGVtcyAqLwotCWNoYXIgKiBwID0gKGNoYXIg KilzcnZjbWQ7CS8qIFN0cmluZyB0byBkZWNvZGUgKi8KLQotCWRvbmUgPSAwOwkJCS8qIE1heWJl IG1vcmUgcGFja2V0cyBuZWVkZWQgKi8KLQlmcyA9IE5VTEw7CQkJLyogV2UgZG9uJ3Qga25vdyB0 aGUgZmlsZXNwZWMgeWV0ICovCi0JYyA9ICpwKys7CQkJLyogR2V0IGZpcnN0IHBhcmFtZXRlciAq LwotCi0Jd2hpbGUgKGMpIHsJCQkvKiBGb3IgYWxsIHBhcmFtZXRlcnMuLi4gKi8KLQkgICAgZGVi dWcoRjAwMCwic2dldGluaXQgYyIsIiIsYyk7Ci0JICAgIEwgPSAqcCsrOwkJCS8qIEdldCBsZW5n dGggKi8KLQkgICAgaWYgKEwgPj0gU1ApCQkvKiBEZWNvZGUgbGVuZ3RoICovCi0JICAgICAgbGVu ID0geHVuY2hhcihMKTsKLQkgICAgZWxzZSBpZiAoYyA9PSAnQCcpIHsJLyogQWxsb3cgbWlzc2lu ZyBFT1AgbGVuZ3RoIGZpZWxkICovCi0JCWxlbiA9IDA7Ci0JICAgIH0gZWxzZSB7Ci0JCWxlbiA9 ICh4dW5jaGFyKCpwKyspICogOTUpOwotCQlsZW4gKz0geHVuY2hhcigqcCsrKTsKLQkgICAgfQot CSAgICBkZWJ1ZyhGMTAxLCJzZ2V0aW5pdCBsZW4iLCIiLGxlbik7Ci0JICAgIG5leHQgPSAqKHAr bGVuKTsJCS8qIEdldCBuZXh0IHBhcmFtZXRlciAqLwotCSAgICAqKHArbGVuKSA9IE5VTDsJCS8q IFplcm8gaXQgb3V0IHRvIHRlcm1pbmFsIHZhbHVlICovCi0JICAgIGRlYnVnKEYxMTAsInNnZXRp bml0IHAiLHAsMCk7Ci0JICAgIHN3aXRjaCAoYykgewkJLyogRG8gdGhlIHBhcmFtZXRlciAqLwot CSAgICAgIGNhc2UgJ08nOgkJCS8qIEdFVCBPcHRpb25zICovCi0JCXZhbCA9IGF0b2kocCk7CQkv KiBDb252ZXJ0IHRvIGludCAqLwotCQlkZWJ1ZyhGMTAxLCJzZ2V0aW5pdCBPIHZhbCIsIiIsdmFs KTsKLQkJaWYgKHZhbCAmIEdPUFRfREVMKSBtb3ZpbmcgPSAxOwotCQlpZiAodmFsICYgR09QVF9S RVMpIHJlZ2V0ID0gMTsKLQkJaWYgKHZhbCAmIEdPUFRfUkVDKSB7Ci0JCSAgICByZWN1cnNpdmUg PSAxOwotCQkgICAgbm9saW5rcyA9IDI7Ci0JCSAgICBpZiAoZm5zcGF0aCA9PSBQQVRIX09GRikK LQkJICAgICAgZm5zcGF0aCA9IFBBVEhfUkVMOwotCQl9Ci0JCWJyZWFrOwotCSAgICAgIGNhc2Ug J00nOgkJCS8qIFRyYW5zZmVyIE1vZGUgKi8KLQkJdmFsID0gYXRvaShwKTsKLQkJZGVidWcoRjEw MSwic2dldGluaXQgTSB2YWwiLCIiLHZhbCk7Ci0JCWlmICh2YWwgPCAxKQotCQkgIGJyZWFrOwot CQlwYXR0ZXJucyA9IDA7CQkvKiBUYWtlcyBwcmVjZWRlbmNlIG92ZXIgcGF0dGVybnMgKi8KLQkJ ZmlsZXBlZWsgPSAwOwkJLyogYW5kIEZJTEUgU0NBTiAqLwotCQlpZiAodmFsID09IEdNT0RfVFhU KSBiaW5hcnkgPSBYWUZUX1Q7IC8qIFRleHQgKi8KLQkJaWYgKHZhbCA9PSBHTU9EX0JJTikgYmlu YXJ5ID0gWFlGVF9COyAvKiBCaW5hcnkgKi8KLQkJaWYgKHZhbCA9PSBHTU9EX0xCTCkgYmluYXJ5 ID0gWFlGVF9MOyAvKiBMYWJlbGVkICovCi0JCWJyZWFrOwotCSAgICAgIGNhc2UgJ0YnOgkJCS8q IEZpbGVuYW1lICovCi0JCWZzID0gcDsKLQkJZGVidWcoRjExMCwic2dldGluaXQgZmlsZW5hbWUi LGZzLDApOwotCQlicmVhazsKLQkgICAgICBjYXNlICdAJzoJCQkvKiBFbmQgT2YgUGFyYW1ldGVy cyAqLwotCQlkb25lID0gMTsKLQkJZGVidWcoRjEwMCwic2dldGluaXQgRU9QIiwiIiwwKTsKLQkJ YnJlYWs7Ci0JICAgICAgZGVmYXVsdDoKLQkJZXJycGt0KChDSEFSICopIlVua25vd24gR0VUIFBh cmFtZXRlciIpOwotCQlkZWJ1ZyhGMTAwLCJzZ2V0aW5pdCB1bmtub3duIHBhcmFtZXRlciIsIiIs MCk7Ci0JCXJldHVybigtMSk7Ci0JICAgIH0KLQkgICAgcCArPSAobGVuICsgMSk7Ci0JICAgIGMg PSBuZXh0OwotCX0KLSAgICB9Ci0gICAgaWYgKCFmcykgZnMgPSAiIjsJCQkvKiBBIGZpbGVuYW1l IGlzIHJlcXVpcmVkICovCi0gICAgaWYgKCpmcykgewotCWhhdmVmcyA9IDE7Ci0JbiA9IDA7CQkJ CS8qIENoZWNrIGZvciBxdW90ZWQgbmFtZSAqLwotCWlmICgobiA9IHN0cmxlbihmcykpID4gMSkg ewotCSAgICAvKiBOb3RlOiB0aGlzIGRvZXMgbm90IGFsbG93IGZvciBtdWx0aXBsZSBxdW90ZWQg bmFtZXMgKi8KLQkgICAgaWYgKChmc1swXSA9PSAneycgJiYgZnNbbi0xXSA9PSAnfScpIHx8Ci0J CShmc1swXSA9PSAnIicgJiYgZnNbbi0xXSA9PSAnIicpKSB7Ci0JCWZzW24tMV0gPSAnXDAnOwot CQlmcysrOwotCQlkZWJ1ZyhGMTExLCJzZ2V0aW5pdCB1bnF1b3RlZCBmaWxlbmFtZSIsZnMsbik7 Ci0JICAgIH0gZWxzZQotCSAgICAgIG4gPSAwOwkJCS8qIFRoaXMgbWVhbnMgbm8gcXVvdGluZyAq LwotCX0KLQotI2lmZGVmIFBJUEVTRU5ECi0JZGVidWcoRjExMSwic2dldGluaXQiLGZzLHVzZXBp cGVzKTsKLQlpZiAodXNlcGlwZXMgJiYgRU5BQkxFRChlbl9ob3MpICYmICpmcyA9PSAnIScpIHsK LQkgICAgY21hcmcgPSBmcyArIDE7CQkvKiBQb2ludCBwYXN0IHRoZSBiYW5nICovCi0JICAgICpm cyA9IE5VTDsKLQkgICAgbmZpbHMgPSAtMTsKLQkgICAgcGlwZXNlbmQgPSAxOwotCSAgICBkZWJ1 ZyhGMTExLCJzZ2V0aW5pdCBwaXBlc2VuZCIsY21hcmcscGlwZXNlbmQpOwotCX0KLQlpZiAoIXBp cGVzZW5kKSB7CQkvKiBJZiBpdCdzIG5vdCBhIHBpcGUgKi8KLSNlbmRpZiAvKiBQSVBFU0VORCAq LwotCSAgICBpZiAobiA9PSAwKSB7CQkvKiBJZiB0aGUgbmFtZSB3YXMgbm90IHF1b3RlZCAqLwot I2lmbmRlZiBOT01TRU5ECi0JCW5maWxzID0gZm5wYXJzZShmcyk7CS8qIEFsbG93IGl0IHRvIGJl IGEgbGlzdCBvZiBuYW1lcyAqLwotCQlkZWJ1ZyhGMTExLCJzZ2V0aW5pdCBBIixmcyxuZmlscyk7 Ci0jaWZkZWYgQ09NTUVOVAotLyogVGhpcyBkb2Vzbid0IHdvcmsgaWYgYSBHRVQtUEFUSCBpcyBz ZXQuICovCi0JCWlmIChuZmlscyA9PSAxICYmICFpc3dpbGQoZnMpKSB7IC8qIFNpbmdsZSBmaWxl ICovCi0JCSAgICBjaGFyICogbTsKLQkJICAgIGlmICgoeCA9IHpjaGtpKGZzKSkgPCAwKSB7IC8q IENoZWNrIGlmIGl0J3Mgc2VuZGFibGUgKi8KLQkJCXN3aXRjaCAoeCkgewotCQkJICBjYXNlIC0x OiBtID0gIkZpbGUgbm90IGZvdW5kIjsgYnJlYWs7Ci0JCQkgIGNhc2UgLTI6IG0gPSAiTm90IGEg cmVndWxhciBmaWxlIjsgYnJlYWs7Ci0JCQkgIGNhc2UgLTM6IG0gPSAiUmVhZCBhY2Nlc3MgZGVu aWVkIjsgYnJlYWs7Ci0JCQl9Ci0JCQllcnJwa3QoKENIQVIgKiltKTsKLQkJCXJldHVybigtMSk7 Ci0JCSAgICB9Ci0JCX0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0JICAgIH0gZWxzZSB7CQkJLyog SWYgaXQgd2FzIHF1b3RlZCAqLwotI2VuZGlmIC8qIE5PTVNFTkQgKi8KLQkJbnp4b3B0cyA9IDA7 Ci0jaWZkZWYgVU5JWE9ST1NLCi0JCWlmIChtYXRjaGRvdCkgIG56eG9wdHMgfD0gWlhfTUFUQ0hE T1Q7Ci0jZW5kaWYgLyogVU5JWE9ST1NLICovCi0JCWlmIChyZWN1cnNpdmUpIG56eG9wdHMgfD0g WlhfUkVDVVJTRTsKLQkJLyogVHJlYXQgYXMgYSBzaW5nbGUgZmlsZXNwZWMgKi8KLQkJbmZpbHMg PSAwIC0gbnp4cGFuZChmcyxuenhvcHRzKTsKLQkJZGVidWcoRjExMSwic2dldGluaXQgQiIsZnMs bmZpbHMpOwotCQljbWFyZyA9IGZzOwotCSAgICB9Ci0jaWZkZWYgUElQRVNFTkQKLQl9Ci0jZW5k aWYgLyogUElQRVNFTkQgKi8KLSAgICB9Ci0gICAgaWYgKCFkb25lKSB7CQkJLyogTmVlZCBtb3Jl IE8gcGFja2V0cy4uLiAqLwotCWRlYnVnKEYxMDAsInNnZXRpbml0IE8tUGFja2V0IFRCQyIsIiIs MCk7IC8qIFRvIEJlIENvbnRpbnVlZCAqLwotCXJldHVybigxKTsKLSAgICB9Ci0gICAgZGVidWco RjEwMCwic2dldGluaXQgTy1QYWNrZXQgZG9uZSAtIGhhdmVmcyIsIiIsaGF2ZWZzKTsKLSAgICBp ZiAoIWhhdmVmcykgewkJCS8qIERvbmUgLSBtYWtlIHN1cmUgd2UgaGF2ZSBmaWxlbmFtZSAqLwot CWVycnBrdCgoQ0hBUiAqKSJHRVQgd2l0aG91dCBmaWxlbmFtZSIpOwotCXJldHVybigtMSk7Ci0g ICAgfQotICAgIGZyZWVycGt0KHdpbmxvKTsKLSAgICB3aW5sbyA9IDA7CQkJCS8qIEJhY2sgdG8g cGFja2V0IDAgYWdhaW4uICovCi0gICAgZGVidWcoRjEwMSwic2dldGluaXQgd2lubG8iLCIiLHdp bmxvKTsKLSAgICBuYWtzdGF0ZSA9IDA7CQkJLyogTm93IEknbSB0aGUgc2VuZGVyISAqLwotICAg IGlmIChyZWdldCkgc2VuZG1vZGUgPSBTTV9SRVNFTkQ7Ci0gICAgaWYgKHNpbml0KCkgPiAwKSB7 CQkJLyogU2VuZCBTZW5kLUluaXQgKi8KLSNpZmRlZiBTVFJFQU1JTkcKLQlpZiAoIXN0cmVhbWlu ZykKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLQkgIHRpbWludCA9IGNoa3RpbW8ocnRpbW8sdGlt ZWYpOyAvKiBTd2l0Y2ggdG8gcGVyLXBhY2tldCB0aW1lciAqLwotCXJldHVybigwKTsJCQkvKiBJ ZiBzdWNjZXNzZnVsLCBzd2l0Y2ggc3RhdGUgKi8KLSAgICB9IGVsc2UgcmV0dXJuKC0xKTsJCQkv KiBFbHNlIGJhY2sgdG8gc2VydmVyIGNvbW1hbmQgd2FpdCAqLwotfQotCi0jZWxzZSAgLyogTk9Y RkVSICovCi0KLSNpbmNsdWRlICJja2NkZWIuaCIKLQotVk9JRAotcHJvdG8oKSB7Ci0gICAgZXh0 ZXJuIGludCBzdWNjZXNzOwotICAgIHN1Y2Nlc3MgPSAwOwotfQotI2VuZGlmIC8qIE5PWEZFUiAq LwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tj c2lnLmggYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3NpZy5oCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGJhODVjLi4wMDAwMDAwCi0tLSBhL2NrZXJt aXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjc2lnLmgKKysrIC9kZXYvbnVsbApA QCAtMSwyMTQgKzAsMCBAQAotLyogIEMgSyBDIFMgSSBHIC4gSCAgKi8KLQotLyogIERlZmluaXRp b25zIGFuZCBwcm90b3R5cGVzIGZvciBzaWduYWwgaGFuZGxpbmcgICovCi0KLS8qCi0gIEF1dGhv cjogSmVmZnJleSBFIEFsdG1hbiAoamFsdG1hbkBzZWN1cmUtZW5kcG9pbnRzLmNvbSksCi0gIFNl Y3VyZSBFbmRwb2ludHMgSW5jLiwgTmV3IFlvcmsgQ2l0eS4KLQotICBDb3B5cmlnaHQgKEMpIDE5 ODUsIDIwMDksCi0gICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0 eSBvZiBOZXcgWW9yay4KLSAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1p dCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQotICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2Nt YWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgotKi8KLSNpZmRlZiBP UzIKLSNpZm5kZWYgTlQKLSNpZm5kZWYgX19IRVZfXyAgICAgICAgICAgICAgICAgLyogSU5DTF9T RU1BUEhPUkUgbWF5IGFsc28gZGVmaW5lIEhFViAqLwotI2RlZmluZSBfX0hFVl9fCi10eXBlZGVm ICBVTE9ORyAgICBIRVY7ICAgICAgICAgICAgICAgICAgLyogaGV2ICovCi10eXBlZGVmICBIRVYg ICAgICAqUEhFVjsKLSNlbmRpZiAvKiBfX0hFVl9fICovCi0jZW5kaWYgLyogTlQgKi8KLXN0cnVj dCBfdGhyZWFkaW5mbyB7Ci0gICAgaW50IGludXNlOwotICAgIGludCBjaGlsZDsKLSAgICBpbnQg c2libGluZzsKLSNpZmRlZiBOVAotICAgIEhBTkRMRSBpZDsKLSAgICBIQU5ETEUgaGFuZGxlOwot ICAgIEhBTkRMRSBwYXJlbnQ7Ci0gICAgSEFORExFIENvbXBsZXRpb25TZW0gOwotICAgIEhBTkRM RSBEaWVTZW0gOwotI2Vsc2UgLyogTlQgKi8KLSAgICBUSUQgaWQ7Ci0gICAgVElEIHBhcmVudDsK LSAgICBIRVYgQ29tcGxldGlvblNlbTsKLSAgICBIRVYgRGllU2VtOwotI2VuZGlmIC8qIE5UICov Ci19OwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgQ0tfQU5TSUMKLXR5cGVkZWYgU0lHVFlQ ICgqY2tfc2lnZnVuYykodm9pZCAqKTsKLXR5cGVkZWYgU0lHVFlQICgqY2tfc2lnaGFuZCkoaW50 KTsKLSNlbHNlCi10eXBlZGVmIFNJR1RZUCAoKmNrX3NpZ2Z1bmMpKCk7Ci10eXBlZGVmIFNJR1RZ UCAoKmNrX3NpZ2hhbmQpKCk7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLQotLyogTWFjcm9zIGZv ciBQT1NJWCB2cyBvbGQtc3R5bGUgc2lnbmFsIGhhbmRsaW5nLiAqLwotCi0jaWZkZWYgQ0tfUE9T SVhfU0lHCi10eXBlZGVmIHNpZ2ptcF9idWYgY2tqbXBidWY7Ci0jZWxzZQotI2lmZGVmIE5UCi0j ZGVmaW5lIE5PQ1JZUFQKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaWZkZWYgTlRBU00KLXR5cGVk ZWYgc3RydWN0IHsKLSAgICBDT05URVhUIGNvbnRleHQ7Ci0gICAgRFdPUkQgcmV0Y29kZTsKLX0g Y2tqbXBidWY7Ci0jZWxzZSAvKiBOVEFTTSAqLwotdHlwZWRlZiBqbXBfYnVmIGNram1wYnVmOwot I2VuZGlmIC8qIE5UQVNNICovCi0jZWxzZQotdHlwZWRlZiBqbXBfYnVmIGNram1wYnVmOwotI2Vu ZGlmCi0jZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCi0vKgotICBTdXBwb3NlIHlvdSB3YW50IHRv IHBhc3MgdGhlIGFkZHJlc3Mgb2YgYSBqbXBfYnVmIGJhciB0byBhIGZ1bmN0aW9uIGZvby4KLSAg U2luY2Ugam1wX2J1ZiBpcyBub3JtYWxseSBkZWZpbmVkICh0eXBlZGVmJ2QpIGFzIGFuIGFycmF5 LCB5b3Ugd291bGQgZG8KLSAgaXQgbGlrZSB0aGlzOiAgZm9vKGJhciksIHdoZXJlIGZvbyA9IGZv byhqbXBfYnVmIGJhcikuICBCdXQgc3VwcG9zZSBhCi0gIGptcF9idWYgaXMgKHNheSkgYSBzdHJ1 Y3QgcmF0aGVyIHRoYW4gYW4gYXJyYXkuICBUaGVuIHlvdSBtdXN0IGRvCi0gIGZvbygmYmFyKSB3 aGVyZSBmb28gaXMgZm9vKGptcF9idWYgKiBiYXIpLiAgVGhpcyBpcyBjb250cm9sbGVkIGhlcmUg aW4KLSAgdGhlIHRyYWRpdGlvbmFsIGZhc2hpb24sIGJ5IGlmZGVmcy4gIEJ5IGRlZmF1bHQsIHdl IGFzc3VtZSB0aGF0IGptcF9idWYKLSAgaXMgYW4gYXJyYXkuICBEZWZpbmUgdGhlIHN5bWJvbCBK Qk5PVEFSUkFZIGlmIGptcF9idWYgaXMgbm90IGFuIGFycmF5LgotKi8KLSNpZm5kZWYgSkJOT1RB UlJBWQotI2lmZGVmIE5UCi0jZGVmaW5lIEpCTk9UQVJSQVkKLSNlbmRpZiAvKiBOVCAqLwotI2Vu ZGlmIC8qIEpCTk9UQVJSQVkgKi8KLQotI2lmZGVmIEpCTk9UQVJSQVkKLXR5cGVkZWYgY2tqbXBi dWYgKiBja2pwdHI7Ci0jZGVmaW5lIGNramFkZHIoeCkgJiB4Ci0jZGVmaW5lIGNramRyZWYoeCkg KiB4Ci0jaWZkZWYgQ0tfUE9TSVhfU0lHCi0jZGVmaW5lIGNrc2V0am1wKHgpIHNpZ3NldGptcCh4 LDEpCi0jZGVmaW5lIGNrbG9uZ2ptcCh4LHkpIHNpZ2xvbmdqbXAoeCx5KQotI2Vsc2UKLSNpZmRl ZiBOVAotX19pbmxpbmUgaW50Ci1ja19paCh2b2lkKSB7Ci0gICAgZXh0ZXJuIGludCBUbHNJbmRl eDsKLSNpZmRlZiBOVFNJRwotICAgIHN0cnVjdCBfdGhyZWFkaW5mbyAqIHRocmVhZGluZm87Ci0g ICAgdGhyZWFkaW5mbyA9IChzdHJ1Y3QgX3RocmVhZGluZm8gKikgVGxzR2V0VmFsdWUoVGxzSW5k ZXgpOwotICAgIGlmICh0aHJlYWRpbmZvKSB7Ci0gICAgICAgIGlmIChXYWl0QW5kUmVzZXRTZW0o dGhyZWFkaW5mby0+RGllU2VtLDApKSB7Ci0gICAgICAgICAgICBja1RocmVhZERpZSh0aHJlYWRp bmZvKTsKLSAgICAgICAgICAgIHJldHVybiAxOyAgICAgICAgICAgICAgICAgICAvKiBUaGlzIHNo b3VsZCBuZXZlciBleGVjdXRlICovCi0gICAgICAgIH0KLSAgICB9Ci0jaWZkZWYgQ09NTUVOVAot ICAgIGVsc2UgZGVidWcoIEYxMDAsICJja19paCgpIHRocmVhZGluZm8gaXMgTlVMTCIsIiIsMCk7 Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2VuZGlmIC8qIE5UU0lHICovCi0gICAgcmV0dXJuIDA7 Ci19Ci0jaWZkZWYgTlRTSUcKLSNkZWZpbmUgY2tzZXRqbXAoeCkgc2V0am1wKHgpCi0jZGVmaW5l IGNrbG9uZ2ptcCh4LHkpIGxvbmdqbXAoeCx5KQotI2Vsc2UgLyogTlRTSUcgKi8KLSNpZmRlZiBO VEFTTQotX19pbmxpbmUgRFdPUkQKLWNrc2V0am1wKCBja2pwdHIgam1wICkgewotICAgIGV4dGVy biBpbnQgaXNpbnRlcnJ1cHRlZDsKLSAgICBqbXAtPnJldGNvZGUgPSAwOwotICAgIG1lbXNldCgg JmptcC0+Y29udGV4dCwgMCwgc2l6ZW9mKENPTlRFWFQpICk7Ci0gICAgam1wLT5jb250ZXh0LkNv bnRleHRGbGFncyA9IENPTlRFWFRfRlVMTCA7Ci0gICAgaWYgKCAhR2V0VGhyZWFkQ29udGV4dCgg R2V0Q3VycmVudFRocmVhZCgpLCAmam1wLT5jb250ZXh0ICkgKQotICAgICAgZGVidWcoIEYxMDEs ICJja3NldGptcCBHZXRUaHJlYWRDb250ZXh0IGZhaWxlZCIsIiIsR2V0TGFzdEVycm9yKCkpOwot ICAgIGRlYnVnKEYxMDEsImNrc2V0am1wIHJldHVybnMiLCIiLGptcC0+cmV0Y29kZSk7Ci0gICAg aXNpbnRlcnJ1cHRlZCA9IDA7Ci0gICAgcmV0dXJuIChqbXAtPnJldGNvZGUpOwotfQotCi1fX2lu bGluZSB2b2lkCi1ja2xvbmdqbXAoIGNranB0ciBqbXAsIGludCByZXR2YWwgKSB7Ci0gICAgZXh0 ZXJuIEhBTkRMRSB0aWRDb21tYW5kOwotICAgIGV4dGVybiBpbnQgdHR5ZmQsIG1kbXR5cCA7Ci0g ICAgZXh0ZXJuIERXT1JEIENvbW1hbmRJRDsKLSAgICBleHRlcm4gaW50IGlzaW50ZXJydXB0ZWQ7 Ci0KLSAgICBjb25ub2koKTsKLSAgICBpc2ludGVycnVwdGVkID0gMTsKLSAgICBqbXAtPnJldGNv ZGUgPSAoIHJldHZhbCA/IHJldHZhbCA6IDEgKTsKLSAgICBkZWJ1ZyhGMTAxLCJhYm91dCB0byBT ZXRUaHJlYWRDb250ZXh0IGZvciB0aHJlYWQiLCIiLCBDb21tYW5kSUQpOwotICAgIGRlYnVnKEYx MDEsImZyb20gVGhyZWFkIiwiIixHZXRDdXJyZW50VGhyZWFkSWQoKSk7Ci0gICAgaWYgKCBtZG10 eXAgPj0gMCApIHsKLSAgICAgICAgUHVyZ2VDb21tKCAoSEFORExFKSB0dHlmZCwgUFVSR0VfVFhB Qk9SVCB8IFBVUkdFX1JYQUJPUlQgKTsKLSAgICB9Ci0gICAgaWYgKFNldFRocmVhZENvbnRleHQo IHRpZENvbW1hbmQsICZqbXAtPmNvbnRleHQgKSkKLSAgICAgIGRlYnVnKEYxMDAsImNrbG9uZ2pt cCBTZXRUaHJlYWRDb250ZXh0IHN1Y2Nlc3MiLCIiLDApOwotICAgIGVsc2UKLSAgICAgIGRlYnVn KEYxMDEsImNrbG9uZ2ptcCBTZXRUaHJlYWRDb250ZXh0IGZhaWxlZCIsIiIsR2V0TGFzdEVycm9y KCkpOwotICAgIG1zbGVlcCg1MCk7Ci0gICAgY21pbmkoMSk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogUmVzZXQgY29tbWFuZCBwYXJzZXIgKi8KLSAgICBwdXRrZXkoMTMpOyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBTdHVmZiBhIGNhcnJpYWdlIHJldHVybiAqLwotICAgLyogUG9z dEV2ZW50QXZhaWxTZW0oKTsgKi8KLX0KLSNlbHNlIC8qIE5UQVNNICovCi12b2lkIGNyYXNoKCB2 b2lkICkgOwotI2RlZmluZSBja3NldGptcCh4KSBzZXRqbXAoeCkKLV9faW5saW5lIHZvaWQKLWNr bG9uZ2ptcCggY2tqcHRyIGptcCwgaW50IHJldHZhbCApIHsKLSAgICBleHRlcm4gSEFORExFIHRp ZENvbW1hbmQ7Ci0gICAgZXh0ZXJuIGludCB0dHlmZCwgbWRtdHlwOwotICAgIGV4dGVybiBEV09S RCBDb21tYW5kSUQ7Ci0gICAgQ09OVEVYVCBjb250ZXh0OwotCi0gICAgaWYgKCBtZG10eXAgPj0g MCApIHsKLSAgICAgICAgUHVyZ2VDb21tKCAoSEFORExFKSB0dHlmZCwgUFVSR0VfVFhBQk9SVCB8 IFBVUkdFX1JYQUJPUlQgKSA7Ci0gICAgfQotICAgIG1lbXNldCggJmNvbnRleHQsIDAsIHNpemVv ZihDT05URVhUKSApOwotICAgIGNvbnRleHQuQ29udGV4dEZsYWdzID0gQ09OVEVYVF9GVUxMOwot ICAgIGlmICggIUdldFRocmVhZENvbnRleHQoIHRpZENvbW1hbmQsICZjb250ZXh0ICkgKQotICAg ICAgZGVidWcoIEYxMDEsICJja2xvbmdqbXAgR2V0VGhyZWFkQ29udGV4dCBmYWlsZWQiLCIiLEdl dExhc3RFcnJvcigpKTsKLQotICAgIC8qIEludmFsaWRhdGUgdGhlIGluc3RydWN0aW9uIHBvaW50 ZXIgKi8KLSAgICBjb250ZXh0LkVpcCA9ICAodW5zaWduZWQgbG9uZykgY3Jhc2g7Ci0KLSAgICBk ZWJ1ZyhGMTAxLCJhYm91dCB0byBTZXRUaHJlYWRDb250ZXh0IGZvciB0aHJlYWQiLCIiLCBDb21t YW5kSUQpOwotICAgIGRlYnVnKEYxMDEsImZyb20gVGhyZWFkIiwiIixHZXRDdXJyZW50VGhyZWFk SWQoKSk7Ci0gICAgaWYgKFNldFRocmVhZENvbnRleHQoIHRpZENvbW1hbmQsICZjb250ZXh0ICkp Ci0gICAgICBkZWJ1ZyhGMTAwLCJja2xvbmdqbXAgU2V0VGhyZWFkQ29udGV4dCBzdWNjZXNzIiwi IiwwKTsKLSAgICBlbHNlCi0gICAgICBkZWJ1ZyhGMTAxLCJja2xvbmdqbXAgU2V0VGhyZWFkQ29u dGV4dCBmYWlsZWQiLCIiLEdldExhc3RFcnJvcigpKTsKLX0KLSNlbmRpZiAvKiBOVEFTTSAqLwot I2VuZGlmIC8qIE5UU0lHICovCi0jZWxzZSAvKiBOVCAqLwotI2RlZmluZSBja3NldGptcCh4KSBz ZXRqbXAoeCkKLSNkZWZpbmUgY2tsb25nam1wKHgseSkgbG9uZ2ptcCh4LHkpCi0jZW5kaWYgLyog TlQgKi8KLSNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KLSNlbHNlICAvKiBqbXBfYnVmIGlzIGFu IGFycmF5ICovCi10eXBlZGVmIGNram1wYnVmIGNranB0cjsKLSNkZWZpbmUgY2tqYWRkcih4KSB4 Ci0jZGVmaW5lIGNramRyZWYoeCkgeAotI2lmZGVmIENLX1BPU0lYX1NJRwotI2RlZmluZSBja3Nl dGptcCh4KSBzaWdzZXRqbXAoeCwxKQotI2RlZmluZSBja2xvbmdqbXAoeCx5KSBzaWdsb25nam1w KHgseSkKLSNlbHNlCi0jZGVmaW5lIGNrc2V0am1wKHgpIHNldGptcCh4KQotI2RlZmluZSBja2xv bmdqbXAoeCx5KSBsb25nam1wKHgseSkKLSNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KLSNlbmRp ZiAvKiBKQk5PVEFSUkFZICovCi0KLV9QUk9UT1RZUCggaW50IGNjX2V4ZWN1dGUsIChja2pwdHIs IGNrX3NpZ2Z1bmMsIGNrX3NpZ2Z1bmMpICk7Ci1fUFJPVE9UWVAoIGludCBhbHJtX2V4ZWN1dGUs Ci0gICAgICAgICAgKGNranB0ciwKLSAgICAgICAgICAgaW50IC8qIHRpbW8gKi8sCi0gICAgICAg ICAgIGNrX3NpZ2hhbmQgLyogaGFuZGxlciAqLywKLSAgICAgICAgICAgY2tfc2lnZnVuYywgY2tf c2lnZnVuYykgKTsKLV9QUk9UT1RZUCggaW50IGNjX2Fscm1fZXhlY3V0ZSwKLSAgICAgICAgICAo Y2tqcHRyLAotICAgICAgICAgICBpbnQgLyogdGltbyAqLywKLSAgICAgICAgICAgY2tfc2lnaGFu ZCAvKiBoYW5kbGVyICovLAotICAgICAgICAgICBja19zaWdmdW5jLAotICAgICAgICAgICBja19z aWdmdW5jKSApOwotCi0vKiBFbmQgb2YgY2t1c2lnLmggKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0 LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3NzbC5oIGIvY2tlcm1pdC05LjAuMzAy LWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2Nzc2wuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggNGUzMWYxMi4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1p dC05LjAuMzAyL2NrY3NzbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLSNpZmRl ZiBDS19TU0wKLSNpZm5kZWYgQ0tfQU5TSUMKLSNkZWZpbmUgTk9QUk9UTwotI2VuZGlmIC8qIENL X0FOU0lDICovCi0jaW5jbHVkZSAiYmlvLmgiCi0jaW5jbHVkZSAiYnVmZmVyLmgiCi0jaW5jbHVk ZSAieDUwOS5oIgotI2luY2x1ZGUgInBlbS5oIgotI2luY2x1ZGUgInNzbC5oIgotCi1leHRlcm4g QklPICpiaW9fZXJyOwotZXh0ZXJuIFNTTCAqc3NsX2NvbjsKLWV4dGVybiBTU0xfQ1RYICpzc2xf Y3R4OwotZXh0ZXJuIGludCBzc2xfZGVidWdfZmxhZzsKLWV4dGVybiBpbnQgc3NsX29ubHlfZmxh ZzsKLWV4dGVybiBpbnQgc3NsX2FjdGl2ZV9mbGFnOwotZXh0ZXJuIGludCBzc2xfdmVyaWZ5X2Zs YWc7Ci1leHRlcm4gaW50IHNzbF9zZWN1cmVfZmxhZzsKLWV4dGVybiBpbnQgc3NsX3ZlcmJvc2Vf ZmxhZzsKLWV4dGVybiBpbnQgc3NsX2Rpc2FibGVkX2ZsYWc7Ci1leHRlcm4gaW50IHNzbF9jZXJ0 X3JlcXVpcmVkOwotZXh0ZXJuIGludCBzc2xfY2VydHNva19mbGFnOwotZXh0ZXJuIGludCBzc2xf ZHVtbXlfZmxhZzsKLQotZXh0ZXJuIGNoYXIgKnNzbF9sb2dfZmlsZTsKLWV4dGVybiBjaGFyICpz c2xfcnNhX2NlcnRfZmlsZTsKLWV4dGVybiBjaGFyICpzc2xfcnNhX2tleV9maWxlOwotZXh0ZXJu IGNoYXIgKnNzbF9kc2FfY2VydF9maWxlOwotZXh0ZXJuIGNoYXIgKnNzbF9kaF9rZXlfZmlsZTsK LWV4dGVybiBjaGFyICpzc2xfY2lwaGVyX2xpc3Q7Ci0KLWV4dGVybiBTU0xfQ1RYICp0bHNfY3R4 OwotZXh0ZXJuIFNTTCAqdGxzX2NvbjsKLWV4dGVybiBpbnQgdGxzX29ubHlfZmxhZzsKLWV4dGVy biBpbnQgdGxzX2FjdGl2ZV9mbGFnOwotZXh0ZXJuIGludCB0bHNfc2VjdXJlX2ZsYWc7Ci0KLV9Q Uk9UT1RZUChpbnQgc3NsX2RvX2luaXQsKGludCkpOwotX1BST1RPVFlQKGludCBzc2xfZGlzcGxh eV9jb25uZWN0X2RldGFpbHMsKFNTTCAqLGludCkpOwotX1BST1RPVFlQKGludCBzc2xfc2VydmVy X3ZlcmlmeV9jYWxsYmFjaywoaW50LCBYNTA5X1NUT1JFX0NUWCAqKSk7Ci1fUFJPVE9UWVAoaW50 IHNzbF9jbGllbnRfdmVyaWZ5X2NhbGxiYWNrLChpbnQsIFg1MDlfU1RPUkVfQ1RYICopKTsKLQot I2lmZGVmIE9TMgotI2RlZmluZSBTU0xfZ2V0X2Vycm9yICAgICAgICAgICAgICAgICAgICBja19T U0xfZ2V0X2Vycm9yCi0jZGVmaW5lIFNTTF9yZWFkICAgICAgICAgICAgICAgICAgICAgICAgIGNr X1NTTF9yZWFkCi0jZGVmaW5lIFNTTF9wZWVrICAgICAgICAgICAgICAgICAgICAgICAgIGNrX1NT TF9wZWVrCi0jZGVmaW5lIFNTTF9jb25uZWN0ICAgICAgICAgICAgICAgICAgICAgIGNrX1NTTF9j b25uZWN0Ci0jZGVmaW5lIFNTTF9zZXRfZmQgICAgICAgICAgICAgICAgICAgICAgIGNrX1NTTF9z ZXRfZmQKLSNkZWZpbmUgU1NMX2ZyZWUgICAgICAgICAgICAgICAgICAgICAgICAgY2tfU1NMX2Zy ZWUKLSNkZWZpbmUgU1NMX3NodXRkb3duICAgICAgICAgICAgICAgICAgICAgY2tfU1NMX3NodXRk b3duCi0jZGVmaW5lIFNTTF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgIGNrX1NTTF93cml0 ZQotI2RlZmluZSBTU0xfcGVuZGluZyAgICAgICAgICAgICAgICAgICAgICBja19TU0xfcGVuZGlu ZwotI2RlZmluZSBTU0xfbG9hZF9lcnJvcl9zdHJpbmdzICAgICAgICAgICBja19TU0xfbG9hZF9l cnJvcl9zdHJpbmdzCi0jZGVmaW5lIFNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZSAgICAgICAgIGNr X1NTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZQotI2RlZmluZSBTU0xfQ0lQSEVSX2dldF9uYW1lICAg ICAgICAgICAgICBja19TU0xfQ0lQSEVSX2dldF9uYW1lCi0jZGVmaW5lIFNTTF9nZXRfY3VycmVu dF9jaXBoZXIgICAgICAgICAgIGNrX1NTTF9nZXRfY3VycmVudF9jaXBoZXIKLSNkZWZpbmUgU1NM X2dldF9zaGFyZWRfY2lwaGVycyAgICAgICAgICAgY2tfU1NMX2dldF9zaGFyZWRfY2lwaGVycwot I2RlZmluZSBTU0xfZ2V0X2NpcGhlcnMgICAgICAgICAgICAgICAgICBja19TU0xfZ2V0X2NpcGhl cnMKLSNkZWZpbmUgU1NMX2dldF9jaXBoZXJfbGlzdCAgICAgICAgICAgICAgY2tfU1NMX2dldF9j aXBoZXJfbGlzdAotI2RlZmluZSBTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyBja19T U0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocwotI2RlZmluZSBTU0xfdXNlX1JTQVByaXZh dGVLZXlfZmlsZSAgICAgICBja19TU0xfdXNlX1JTQVByaXZhdGVLZXlfZmlsZQotI2RlZmluZSBT U0xfdXNlX0RTQVByaXZhdGVLZXlfZmlsZSAgICAgICBja19TU0xfdXNlX0RTQVByaXZhdGVLZXlf ZmlsZQotI2RlZmluZSBTU0xfdXNlX1ByaXZhdGVLZXlfZmlsZSAgICAgICAgICBja19TU0xfdXNl X1ByaXZhdGVLZXlfZmlsZQotI2RlZmluZSBTU0xfdXNlX2NlcnRpZmljYXRlX2ZpbGUgICAgICAg ICBja19TU0xfdXNlX2NlcnRpZmljYXRlX2ZpbGUKLSNkZWZpbmUgU1NMX0NUWF91c2VfUHJpdmF0 ZUtleV9maWxlICAgICAgY2tfU1NMX0NUWF91c2VfUHJpdmF0ZUtleV9maWxlCi0jZGVmaW5lIFNT TF9DVFhfdXNlX2NlcnRpZmljYXRlX2ZpbGUgICAgIGNrX1NTTF9DVFhfdXNlX2NlcnRpZmljYXRl X2ZpbGUKLSNkZWZpbmUgU1NMX3NldF92ZXJpZnkgICAgICAgICAgICAgICAgICAgY2tfU1NMX3Nl dF92ZXJpZnkKLSNkZWZpbmUgU1NMX25ldyAgICAgICAgICAgICAgICAgICAgICAgICAgY2tfU1NM X25ldwotI2RlZmluZSBTU0xfQ1RYX2N0cmwgICAgICAgICAgICAgICAgICAgICBja19TU0xfQ1RY X2N0cmwKLSNkZWZpbmUgU1NMX0NUWF9uZXcgICAgICAgICAgICAgICAgICAgICAgY2tfU1NMX0NU WF9uZXcKLSNkZWZpbmUgU1NMX0NUWF9mcmVlICAgICAgICAgICAgICAgICAgICAgY2tfU1NMX0NU WF9mcmVlCi0jZGVmaW5lIFNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiICAgIGNrX1NTTF9D VFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiCi0jZGVmaW5lIFNTTHYyM19tZXRob2QgICAgICAgICAg ICAgICAgICAgIGNrX1NTTHYyM19tZXRob2QKLSNkZWZpbmUgU1NMdjNfbWV0aG9kICAgICAgICAg ICAgICAgICAgICAgY2tfU1NMdjNfbWV0aG9kCi0jZGVmaW5lIFRMU3YxX21ldGhvZCAgICAgICAg ICAgICAgICAgICAgIGNrX1RMU3YxX21ldGhvZAotI2RlZmluZSBTU0x2MjNfY2xpZW50X21ldGhv ZCAgICAgICAgICAgICBja19TU0x2MjNfY2xpZW50X21ldGhvZAotI2RlZmluZSBTU0x2M19jbGll bnRfbWV0aG9kICAgICAgICAgICAgICBja19TU0x2M19jbGllbnRfbWV0aG9kCi0jZGVmaW5lIFRM U3YxX2NsaWVudF9tZXRob2QgICAgICAgICAgICAgIGNrX1RMU3YxX2NsaWVudF9tZXRob2QKLSNk ZWZpbmUgU1NMdjIzX3NlcnZlcl9tZXRob2QgICAgICAgICAgICAgY2tfU1NMdjIzX3NlcnZlcl9t ZXRob2QKLSNkZWZpbmUgU1NMdjNfc2VydmVyX21ldGhvZCAgICAgICAgICAgICAgY2tfU1NMdjNf c2VydmVyX21ldGhvZAotI2RlZmluZSBUTFN2MV9zZXJ2ZXJfbWV0aG9kICAgICAgICAgICAgICBj a19UTFN2MV9zZXJ2ZXJfbWV0aG9kCi0jZGVmaW5lIFNTTF9saWJyYXJ5X2luaXQgICAgICAgICAg ICAgICAgIGNrX1NTTF9saWJyYXJ5X2luaXQKLSNkZWZpbmUgU1NMX3N0YXRlX3N0cmluZyAgICAg ICAgICAgICAgICAgY2tfU1NMX3N0YXRlX3N0cmluZwotI2RlZmluZSBTU0xfc3RhdGVfc3RyaW5n X2xvbmcgICAgICAgICAgICBja19TU0xfc3RhdGVfc3RyaW5nX2xvbmcKLSNkZWZpbmUgU1NMX2Fj Y2VwdCAgICAgICAgICAgICAgICAgICAgICAgY2tfU1NMX2FjY2VwdAotI2RlZmluZSBTU0xfc2V0 X2NpcGhlcl9saXN0ICAgICAgICAgICAgICBja19TU0xfc2V0X2NpcGhlcl9saXN0Ci0KLSNkZWZp bmUgRVJSX3ByaW50X2Vycm9ycyAgICAgICAgICAgICAgICAgY2tfRVJSX3ByaW50X2Vycm9ycwot I2RlZmluZSBFUlJfcHJpbnRfZXJyb3JzX2ZwICAgICAgICAgICAgICBja19FUlJfcHJpbnRfZXJy b3JzX2ZwCi0jZGVmaW5lIEVSUl9lcnJvcl9zdHJpbmcgICAgICAgICAgICAgICAgIGNrX0VSUl9l cnJvcl9zdHJpbmcKLSNkZWZpbmUgRVJSX2dldF9lcnJvciAgICAgICAgICAgICAgICAgICAgY2tf RVJSX2dldF9lcnJvcgotCi0jZGVmaW5lIEJJT19wcmludGYgICAgICAgICAgICAgICAgICAgICAg IGNrX0JJT19wcmludGYKLSNkZWZpbmUgQklPX2N0cmwgICAgICAgICAgICAgICAgICAgICAgICAg Y2tfQklPX2N0cmwKLSNkZWZpbmUgQklPX25ldyAgICAgICAgICAgICAgICAgICAgICAgICAgY2tf QklPX25ldwotI2RlZmluZSBCSU9fc19maWxlICAgICAgICAgICAgICAgICAgICAgICBja19CSU9f c19maWxlCi0jZGVmaW5lIEJJT19zX21lbSAgICAgICAgICAgICAgICAgICAgICAgIGNrX0JJT19z X21lbQotI2RlZmluZSBCSU9fc19udWxsICAgICAgICAgICAgICAgICAgICAgICBja19CSU9fc19u dWxsCi0jZGVmaW5lIEJJT19yZWFkICAgICAgICAgICAgICAgICAgICAgICAgIGNrX0JJT19yZWFk Ci0jZGVmaW5lIEJJT19uZXdfZmlsZSAgICAgICAgICAgICAgICAgICAgIGNrX0JJT19uZXdfZmls ZQotI2RlZmluZSBCSU9fZnJlZSAgICAgICAgICAgICAgICAgICAgICAgICBja19CSU9fZnJlZQot Ci0jZGVmaW5lIFg1MDlfZ2V0X2lzc3Vlcl9uYW1lICAgICAgICAgICAgIGNrX1g1MDlfZ2V0X2lz c3Vlcl9uYW1lCi0jZGVmaW5lIFg1MDlfdmVyaWZ5X2NlcnRfZXJyb3Jfc3RyaW5nICAgIGNrX1g1 MDlfdmVyaWZ5X2NlcnRfZXJyb3Jfc3RyaW5nCi0jZGVmaW5lIFg1MDlfTkFNRV9vbmVsaW5lICAg ICAgICAgICAgICAgIGNrX1g1MDlfTkFNRV9vbmVsaW5lCi0jZGVmaW5lIFg1MDlfZ2V0X3N1Ympl Y3RfbmFtZSAgICAgICAgICAgIGNrX1g1MDlfZ2V0X3N1YmplY3RfbmFtZQotI2RlZmluZSBYNTA5 X1NUT1JFX0NUWF9nZXRfY3VycmVudF9jZXJ0ICBja19YNTA5X1NUT1JFX0NUWF9nZXRfY3VycmVu dF9jZXJ0Ci0jZGVmaW5lIFg1MDlfZ2V0X2RlZmF1bHRfY2VydF9kaXIgICAgICAgIGNrX1g1MDlf Z2V0X2RlZmF1bHRfY2VydF9kaXIKLSNkZWZpbmUgWDUwOV9mcmVlICAgICAgICAgICAgICAgICAg ICAgICAgY2tfWDUwOV9mcmVlCi0KLSNkZWZpbmUgUlNBX2ZyZWUgICAgICAgICAgICAgICAgICAg ICAgICAgY2tfUlNBX2ZyZWUKLSNkZWZpbmUgUlNBX2dlbmVyYXRlX2tleSAgICAgICAgICAgICAg ICAgY2tfUlNBX2dlbmVyYXRlX2tleQotCi0jZGVmaW5lIERIX25ldyAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNrX0RIX25ldwotI2RlZmluZSBESF9mcmVlICAgICAgICAgICAgICAgICAgICAg ICAgICBja19ESF9mcmVlCi0jZGVmaW5lIERIX2dlbmVyYXRlX2tleSAgICAgICAgICAgICAgICAg IGNrX0RIX2dlbmVyYXRlX2tleQotI2RlZmluZSBESF9nZW5lcmF0ZV9wYXJhbWV0ZXJzICAgICAg ICAgICBja19ESF9nZW5lcmF0ZV9wYXJhbWV0ZXJzCi0KLSNkZWZpbmUgRFNBX2ZyZWUgICAgICAg ICAgICAgICAgICAgICAgICAgY2tfRFNBX2ZyZWUKLSNkZWZpbmUgRFNBX2dlbmVyYXRlX2tleSAg ICAgICAgICAgICAgICAgY2tfRFNBX2dlbmVyYXRlX2tleQotI2RlZmluZSBEU0FfZ2VuZXJhdGVf cGFyYW1ldGVycyAgICAgICAgICBja19EU0FfZ2VuZXJhdGVfcGFyYW1ldGVycwotCi0jZGVmaW5l IFBFTV9yZWFkX2Jpb19ESHBhcmFtcyAgICAgICAgICAgIGNrX1BFTV9yZWFkX2Jpb19ESHBhcmFt cwotI2RlZmluZSBCTl9iaW4yYm4gICAgICAgICAgICAgICAgICAgICAgICBja19CTl9iaW4yYm4K LSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBDS19TU0wgKi8KCmRpZmYgLS1naXQgYS9ja2Vy bWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3N5bS5oIGIvY2tlcm1pdC05LjAu MzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NzeW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggYzM0MGNhMy4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tl cm1pdC05LjAuMzAyL2NrY3N5bS5oCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi0vKiBU aGlzIGZpbGUgaXMgZm9yIHVzZSB3aXRoIGNvbXBpbGVycyB0aGF0IGRvbid0IGhhdmUgdGhlIGNh cGFiaWxpdHkgdG8KLSAqICNkZWZpbmUgc3ltYm9scyBvbiB0aGUgQyBjb21waWxlciBjb21tYW5k IGxpbmUuICBUaGlzIGZpbGUgbXVzdAotICogYmUgI2luY2x1ZGUnZCBiZWZvcmUgYWxsIG90aGVy IGNrKi5oIGZpbGVzIHNvIHRoYXQgdGhlIHN5bWJvbHMgI2RlZmluZSdkCi0gKiBoZXJlIGNhbiBi ZSB1c2VkIGZvciBhbnkgc3Vic2VxdWVudCBjb25kaXRpb25hbCBjb2RlLgotICovCgpkaWZmIC0t Z2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2N0ZWwuYyBiL2Nr ZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjdGVsLmMKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IGU5ZjEyOTUuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAy LWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2N0ZWwuYworKysgL2Rldi9udWxsCkBAIC0xLDkwMTUg KzAsMCBAQAotY2hhciAqY2t0ZWx2ID0gIlRlbG5ldCBzdXBwb3J0LCA5LjAuMjc0LCAxNiBNYXIg MjAxMCI7Ci0jZGVmaW5lIENLQ1RFTF9DCi0KLWludCBzc3RlbG5ldCA9IDA7ICAgICAgICAgICAg ICAgICAgICAgICAvKiBEbyBzZXJ2ZXItc2lkZSBUZWxuZXQgbmVnb3RpYXRpb24gKi8KLQotLyog IEMgSyBDIFQgRSBMICAtLSAgVGVsbmV0IHN1cHBvcnQgICovCi0KLS8qCi0gIEF1dGhvcnM6Ci0g ICAgVGVsbmV0IHByb3RvY29sIGJ5IEZyYW5rIGRhIENydXogYW5kIEplZmZyZXkgQWx0bWFuLgot ICAgIFRlbG5ldCBGb3J3YXJkIFggYnkgSmVmZnJleSBBbHRtYW4KLSAgICBUZWxuZXQgU1RBUlRf VExTIHN1cHBvcnQgYnkgSmVmZnJleSBBbHRtYW4KLSAgICBUZWxuZXQgQVVUSCBhbmQgRU5DUllQ VCBzdXBwb3J0IGJ5IEplZmZyZXkgQWx0bWFuCi0gICAgVGVsbmV0IENPTVBPUlQgc3VwcG9ydCBi eSBKZWZmcmV5IEFsdG1hbgotICAgIFRlbG5ldCBORVctRU5WSVJPTk1FTlQgc3VwcG9ydCBieSBK ZWZmcmV5IEFsdG1hbgotICAgIFRlbG5ldCBOQVdTIHN1cHBvcnQgYnkgRnJhbmsgZGEgQ3J1eiBh bmQgSmVmZnJleSBBbHRtYW4KLSAgICBUZWxuZXQgVEVSTVRZUEUgc3VwcG9ydCBieSBKZWZmcmV5 IEFsdG1hbgotICAgIFRlbG5ldCBLRVJNSVQgc3VwcG9ydCBieSBKZWZmcmV5IEFsdG1hbgotICAg IE90aGVyIGNvbnRyaWJ1dGlvbnMgYXMgaW5kaWNhdGVkIGluIHRoZSBjb2RlLgotCi0gIENvcHly aWdodCAoQykgMTk4NSwgMjAxMCwKLSAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5 IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgotICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUg dGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCi0gICAgY29weXJpZ2h0IHRleHQg aW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCi0q LwotCi0vKgotICBOT1RFIFRPIENPTlRSSUJVVE9SUzogVGhpcyBmaWxlLCBhbmQgYWxsIHRoZSBv dGhlciBzaGFyZWQgKGNrYyBhbmQgY2t1KQotICBDLUtlcm1pdCBzb3VyY2UgZmlsZXMsIG11c3Qg YmUgY29tcGF0aWJsZSB3aXRoIEMgcHJlcHJvY2Vzc29ycyB0aGF0IHN1cHBvcnQKLSAgb25seSAj aWZkZWYsICNlbHNlLCAjZW5kaWYsICNkZWZpbmUsIGFuZCAjdW5kZWYuICBQbGVhc2UgZG8gbm90 IHVzZSAjaWYsCi0gIGxvZ2ljYWwgb3BlcmF0b3JzLCBvciBvdGhlciBwcmVwcm9jZXNzb3IgZmVh dHVyZXMgaW4gdGhpcyBtb2R1bGUuICBBbHNvLAotICBkb24ndCB1c2UgYW55IEFOU0kgQyBjb25z dHJ1Y3RzIGV4Y2VwdCB3aXRoaW4gI2lmZGVmIENLX0FOU0lDLi4jZW5kaWYuCi0qLwotCi0jaW5j bHVkZSAiY2tjc3ltLmgiCi0jaW5jbHVkZSAiY2tjZGViLmgiCi0KLSNpZmRlZiBUTkNPREUKLSNp bmNsdWRlICJja2NrZXIuaCIKLSNkZWZpbmUgVEVMQ01EUyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiB0byBkZWZpbmUgbmFtZSBhcnJheSAqLwotI2RlZmluZSBURUxPUFRTICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIHRvIGRlZmluZSBuYW1lIGFycmF5ICovCi0jZGVmaW5lIFNMQ19OQU1F UyAgICAgICAgICAgICAgICAgICAgICAgLyogdG8gZGVmaW5lIG5hbWUgYXJyYXkgKi8KLSNkZWZp bmUgRU5DUllQVF9OQU1FUwotI2RlZmluZSBBVVRIX05BTUVTCi0jZGVmaW5lIFRFTE9QVF9TVEFU RVMKLSNkZWZpbmUgVEVMT1BUX01PREVTCi0jZGVmaW5lIFROQ19OQU1FUwotI2luY2x1ZGUgImNr Y25ldC5oIgotI2luY2x1ZGUgImNrY3RlbC5oIgotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0j aW5jbHVkZSAiY2t1YXRoLmgiCi0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSNpZmRl ZiBDS19TU0wKLSNpbmNsdWRlICJja19zc2wuaCIKLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotI2lm bmRlZiBOT1RFUk0KLSNpZmRlZiBPUzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBG b3IgdGVybWluYWwgdHlwZSBuYW1lIHN0cmluZyAqLwotI2luY2x1ZGUgImNrdXVzci5oIgotI2lm bmRlZiBOVAotI2luY2x1ZGUgPG9zMi5oPgotI3VuZGVmIENPTU1FTlQKLSNlbHNlCi0jZGVmaW5l IGlzYXNjaWkgX19pc2FzY2lpCi0jZW5kaWYgLyogTlQgKi8KLSNpbmNsdWRlICJja29jb24uaCIK LWV4dGVybiBpbnQgdHRfdHlwZSwgbWF4X3R0OwotZXh0ZXJuIHN0cnVjdCB0dF9pbmZvX3JlYyB0 dF9pbmZvW107Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9URVJNICovCi0KLSNpZmRl ZiBPUzIKLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpZmRlZiBOVAotI2luY2x1ZGUgPHNldGptcGV4 Lmg+Ci0jZWxzZSAvKiBOVCAqLwotI2luY2x1ZGUgPHNldGptcC5oPgotI2VuZGlmIC8qIE5UICov Ci0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jaW5jbHVkZSAiY2tjc2lnLmgiCi0jaW5jbHVkZSAiY2tv c3luLmgiCi0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBDS19OQVdTICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBOZWdvdGlhdGUgQWJvdXQgV2luZG93IFNpemUgKi8KLSNpZmRlZiBSTE9H Q09ERQotX1BST1RPVFlQKCBpbnQgcmxvZ19uYXdzLCAodm9pZCkgKTsKLSNlbmRpZiAvKiBSTE9H Q09ERSAqLwotI2VuZGlmIC8qIENLX05BV1MgKi8KLQotaW50IHRuX2luaXQgPSAwOyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFRlbG5ldCBwcm90b2NvbCBpbml0aWFsaXplZCBmbGFnICovCi1p bnQgdG5fYmVndW4gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogVGVsbmV0IHByb3RvY29s IHN0YXJ0ZWQgZmxhZyAqLwotc3RhdGljIGludCB0bl9maXJzdCA9IDE7ICAgICAgICAgICAgICAg IC8qIEZpcnN0IHRpbWUgaW5pdCBmbGFnICovCi1leHRlcm4gaW50IHRuX2V4aXQ7ICAgICAgICAg ICAgICAgICAgICAgLyogRXhpdCBvbiBkaXNjb25uZWN0ICovCi1leHRlcm4gaW50IG5ldHR5cGU7 Ci1leHRlcm4gaW50IGluc2VydmVyOyAgICAgICAgICAgICAgICAgICAgLyogUnVubmluZyBhcyBJ S1NEICovCi1jaGFyICp0bl90ZXJtID0gTlVMTDsgICAgICAgICAgICAgICAgICAgLyogVGVybWlu YWwgdHlwZSBvdmVycmlkZSAqLwotCi0jaWZkZWYgQ0tfU05ETE9DCi1jaGFyICp0bl9sb2MgPSBO VUxMOyAgICAgICAgICAgICAgICAgICAgLyogTG9jYXRpb24gb3ZlcnJpZGUgKi8KLSNlbmRpZiAv KiBDS19TTkRMT0MgKi8KLWludCB0bl9ubG0gPSBUTkxfQ1JMRjsgICAgICAgICAgICAgICAgICAv KiBUZWxuZXQgQ1IgLT4gQ1IgTEYgbW9kZSAqLwotaW50IHRuX2JfbmxtID0gVE5MX0NSOyAgICAg ICAgICAgICAgICAgIC8qIFRlbG5ldCBCaW5hcnkgQ1IgUkFXIG1vZGUgKi8KLWludCB0bl9iX21l dSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBUZWxuZXQgQmluYXJ5IE1FIG1lYW5zIFUg dG9vICovCi1pbnQgdG5fYl91bWUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogVGVsbmV0 IEJpbmFyeSBVIG1lYW5zIE1FIHRvbyAqLwotaW50IHRuX3dhaXRfZmxnID0gMTsgICAgICAgICAg ICAgICAgICAgIC8qIFRlbG5ldCBXYWl0IGZvciBOZWdvdGlhdGlvbnMgKi8KLWludCB0bl9pbmZp bml0ZSA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBUZWxuZXQgQnVnIEluZmluaXRlLUxvb3At Q2hlY2sgKi8KLWludCB0bl9yZW1fZWNobyA9IDE7ICAgICAgICAgICAgICAgICAgICAvKiBXZSB3 aWxsIGVjaG8gaWYgV0lMTCBFQ0hPICovCi1pbnQgdG5fYl94ZmVyID0gMDsgICAgICAgICAgICAg ICAgICAgICAgLyogVGVsbmV0IEJpbmFyeSBmb3IgWGZlcnM/ICovCi1pbnQgdG5fc2JfYnVnID0g MTsgICAgICAgICAgICAgICAgICAgICAgLyogVGVsbmV0IEJVRyAtIFNCIHcvbyBXSUxMIG9yIERP ICovCi1pbnQgdG5fYXV0aF9rcmI1X2Rlc19idWcgPSAxOyAgICAgICAgICAgLyogVGVsbmV0IEJV RyAtIEFVVEggS1JCNSBERVMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiAgICAgICAgICAgICAgdHJ1bmNhdGVzIGxvbmcga2V5cyAqLwotaW50IHRuX25vX2Vu Y3J5cHRfeGZlciA9IDA7ICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIFRlbG5ldCBFbmNyeXB0PyAq LwotaW50IHRuX2RlbGF5X3NiID0gMTsgICAgICAgICAgICAgICAgICAgIC8qIERlbGF5IFNCcyB1 bnRpbCBzYWZlICovCi1pbnQgdG5fYXV0aF9ob3cgPSBUTl9BVVRIX0hPV19BTlk7Ci1pbnQgdG5f YXV0aF9lbmMgPSBUTl9BVVRIX0VOQ19BTlk7Ci1pbnQgdG5fZGViID0gMDsgICAgICAgICAgICAg ICAgICAgICAgICAgLyogVGVsbmV0IERlYnVnIG1vZGUgKi8KLWludCB0bl9zZnUgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBNaWNyb3NvZnQgU0ZVIGNvbXBhdGliaWxpdHkgKi8KLSNp ZmRlZiBDS19GT1JXQVJEX1gKLWNoYXIgKiB0bl9md2R4X3hhdXRob3JpdHkgPSBOVUxMOyAgICAg ICAvKiBYYXV0aG9yaXR5IEZpbGUgKi8KLWludCAgICBmd2R4X25vX2VuY3J5cHQgPSAwOyAgICAg ICAgICAgICAvKiBGb3J3YXJkLVggcmVxdWlyZXMgZW5jcnlwdGlvbiAqLwotI2VuZGlmIC8qIENL X0ZPUldBUkRfWCAqLwotCi0jaWZkZWYgT1MyCi1pbnQgdHRudW0gPSAtMTsgICAgICAgICAgICAg ICAgICAgICAgICAgLyogTGFzdCBUZWxuZXQgVGVybWluYWwgVHlwZSBzZW50ICovCi1pbnQgdHRu dW1lbmQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogSGFzIGVuZCBvZiBsaXN0IGJlZW4g Zm91bmQgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotY2hhciB0bl9tc2dbVE5fTVNHX0xFTl07ICAg ICAgICAgICAgICAgIC8qIFRlbG5ldCBkYXRhIGNhbiBiZSByYXRoZXIgbG9uZyAqLwotY2hhciBo ZXhidWZbVE5fTVNHX0xFTl07Ci1jaGFyIHRuX21zZ19vdXRbVE5fTVNHX0xFTl07Ci0jaWZkZWYg Q0tfRk9SV0FSRF9YCi1DSEFSIGZ3ZHhfbXNnX291dFtUTl9NU0dfTEVOXTsKLSNlbmRpZiAvKiBD S19GT1JXQVJEX1ggKi8KLQotLyoKLSAgSW4gb3JkZXIgdG8gcHJldmVudCBhbiBpbmZpbml0ZSB0 ZWxuZXQgbmVnb3RpYXRpb24gbG9vcCB3ZSBtYWludGFpbiBhCi0gIGNvdW50IG9mIHRoZSBudW1i ZXIgb2YgdGltZXMgdGhlIHNhbWUgdGVsbmV0IG5lZ290aWF0aW9uIG1lc3NhZ2UgaXMKLSAgc2Vu dC4gV2hlbiB0aGlzIGNvdW50IGhpdHMgTUFYVE5DTlQsIHdlIGRvIG5vdCBzZW5kIGFueSBtb3Jl IG9mIHRoZQotICBtZXNzYWdlLiBUaGUgY291bnQgaXMgc3RvcmVkIGluIHRoZSB0bmNudHNbXVtd IGFycmF5LgotCi0gIFRoZSB0bmNudHNbXVtdIGFycmF5IGlzIGluZGV4ZWQgYnkgbmVnb3RpYXRp b24gb3B0aW9uIChTVVBQUkVTUyBHTyBBSEVBRCwKLSAgVEVSTUlOQUwgVFlQRSwgTkFXUywgZXRj LiAtIHNlZSB0aGUgdG5vcHRzW10gYXJyYXkpIGFuZCB0aGUgZm91cgotICBuZWdvdGlhdGlvbiBt ZXNzYWdlIHR5cGVzIChXSUxMLCBXT05ULCBETywgRE9OVCkuICBBbGwgdGVsbmV0IG5lZ290aWF0 aW9ucwotICBhcmUga2VwdCB0cmFjayBvZiBpbiB0aGlzIHdheS4KLQotICBUaGUgY291bnQgZm9y IGEgbWVzc2FnZSBpcyB6ZXJvZWQgd2hlbiB0aGUgIm9wcG9zaXRlIiBtZXNzYWdlIGlzIHNlbnQu Ci0gIFdJTEwgaXMgdGhlIG9wcG9zaXRlIG9mIFdPTlQsIGFuZCBETyBpcyB0aGUgb3Bwb3NpdGUg b2YgRE9OVC4KLSAgRm9yIGV4YW1wbGUgc2VuZGluZyAiV0lMTCBTR0EiIGluY3JlbWVudHMgdG5j bnRzW1RFTE9QVF9TR0FdWzBdCi0gIGFuZCB6ZXJvZXMgdG5jbnRzW1RFTE9QVF9TR0FdWzFdLgot Ci0gIFRoZSBjb2RlIHRoYXQgZG9lcyB0aGlzIGlzIGluIHRuX3NvcHQoKS4KLQotICByb2dlcnNo QGZzai5jby5qcCwgMTgvMy8xOTk1Ci0KLSAgOC8xNi8xOTk4IC0gd2l0aCB0aGUgcmVjZW50IHJl d3JpdGUgb2YgdGhlIHRlbG5ldCBzdGF0ZSBtYWNoaW5lIEkgZG9uJ3QKLSAgdGhpbmsgdGhpcyBj b2RlIGlzIG5lY2Vzc2FyeSBhbnltb3JlLiAgSG93ZXZlciwgaXQgY2FuJ3QgZG8gYW55IGhhcm0g c28KLSAgSSBhbSBsZWF2aW5nIGl0IGluLiAgICAtIEplZmYKLQotICAxMi8yOC8xOTk4IC0gYWxs IHJlZmVyZW5jZXMgdG8gdG5jbnRzW10gbXVzdCBiZSBkb25lIHdpdGggVEVMT1BUX0lOREVYKG9w dCkKLSAgYmVjYXVzZSB0aGUgVGVsbmV0IG9wdGlvbiBsaXN0IGlzIG5vIGxvbmdlciBjb250aWd1 b3VzLiAgV2UgYWxzbyBtdXN0Ci0gIGFsbG9jYXRlIE5URUxPUFRTICsgMSBiZWNhdXNlIHRoZSBU RUxPUFRfSU5ERVgoKSBtYWNybyByZXR1cm5zIE5URUxPUFRTCi0gIGZvciBhbiBpbnZhbGlkIG9w dGlvbiBudW1iZXIuCi0qLwotCi0jZGVmaW5lIE1BWFROQ05UIDQgICAgICAvKiBQZXJtaXRzIDQg aW50ZXJtZWRpYXRlIHRlbG5ldCBmaXJld2FsbHMvZ2F0ZXdheXMgKi8KLQotY2hhciB0bmNudHNb TlRFTE9QVFMrMV1bNF07ICAgICAgICAgICAgIC8qIENvdW50cyAqLwotY2hhciB0bm9wcHNbNF0g PSB7IDEsMCwzLDIgfTsgICAgICAgICAgIC8qIE9wcG9zaXRlcyAqLwotCi0jaWZkZWYgQ0tfRU5W SVJPTk1FTlQKLSNpZmRlZiBDS19GT1JXQVJEX1gKLSNkZWZpbmUgVFNCVUZTSVogMjA1NgotI2Vs c2UgLyogQ0tfRk9SV0FSRF9YICovCi0jZGVmaW5lIFRTQlVGU0laIDEwMjQKLSNlbmRpZiAvKiBD S19GT1JXQVJEX1ggKi8KLWNoYXIgdG5fZW52X2FjY3RbNjRdOwotY2hhciB0bl9lbnZfZGlzcFs2 NF07Ci1jaGFyIHRuX2Vudl9qb2JbNjRdOwotY2hhciB0bl9lbnZfcHJudFs2NF07Ci1jaGFyIHRu X2Vudl9zeXNbNjRdOwotY2hhciAqIHRuX2Vudl91c2VydmFyWzhdWzJdOwotaW50IHRuX2Vudl9m bGcgPSAxOwotI2Vsc2UgLyogQ0tfRU5WSVJPTk1FTlQgKi8KLSNkZWZpbmUgVFNCVUZTSVogNDEK LWludCB0bl9lbnZfZmxnID0gMDsKLSNlbmRpZiAvKiBDS19FTlZJUk9OTUVOVCAqLwotCi0jaWZk ZWYgQ09NTUVOVAotLyogU0lHV0lOQ0ggaGFuZGxlciBtb3ZlZCB0byBja3V1c3guYyAqLwotI2lm bmRlZiBOT1NJR1dJTkNICi0jaWZkZWYgQ0tfTkFXUyAgICAgICAgICAgICAgICAgICAgICAgICAg LyogV2luZG93IHNpemUgYnVzaW5lc3MgKi8KLSNpZmRlZiBVTklYCi0jaW5jbHVkZSA8c2lnbmFs Lmg+Ci0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIENLX05BV1MgKi8KLSNlbmRpZiAvKiBO T1NJR1dJTkNIICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi1DSEFSIHNiW1RTQlVGU0laXTsg ICAgICAgICAgICAgICAgICAgICAgLyogQnVmZmVyIC0gaW5jb21pbmcgc3VibmVnb3RpYXRpb25z ICovCi1DSEFSIHNiX291dFtUU0JVRlNJWl07ICAgICAgICAgICAgICAgICAgLyogQnVmZmVyIC0g b3V0Z29pbmcgc3VibmVnb3RpYXRpb25zICovCi0KLWludCB0bl9kdXBsZXggPSAxOyAgICAgICAg ICAgICAgICAgICAgICAvKiBMb2NhbCBlY2hvICovCi0KLWV4dGVybiBjaGFyIHVpZGJ1ZltdOyAg ICAgICAgICAgICAgICAgICAvKiBVc2VyIElEIGJ1ZmZlciAqLwotZXh0ZXJuIGludCBxdWlldCwg dHRuZXQsIHR0bnByb3RvLCBkZWJzZXMsIHdoYXQsIGR1cGxleCwgb2xkcGxleCwgbG9jYWw7Ci1l eHRlcm4gaW50IHNlc2xvZywgc2Vzc2Z0LCB3aHljbG9zZWQ7Ci0jaWZkZWYgT1MyCi0jaWZuZGVm IE5PVEVSTQotZXh0ZXJuIGludCB0dF9yb3dzW10sIHR0X2NvbHNbXTsKLWV4dGVybiBpbnQgdHRf c3RhdHVzW1ZOVU1dOwotZXh0ZXJuIGludCBzY3JuaW5pdGlhbGl6ZWRbXTsKLSNlbmRpZiAvKiBO T1RFUk0gKi8KLSNlbHNlIC8qIE9TMiAqLwotZXh0ZXJuIGludCB0dF9yb3dzLCB0dF9jb2xzOyAg ICAgICAgICAgIC8qIEV2ZXJ5Ym9keSBoYXMgdGhpcyAqLwotI2VuZGlmIC8qIE9TMiAqLwotZXh0 ZXJuIGludCBjbWRfY29scywgY21kX3Jvd3M7Ci1leHRlcm4gY2hhciBuYW1lY29weVtdOwotZXh0 ZXJuIGNoYXIgbXlpcGFkZHJbXTsgICAgICAgICAgICAgLyogR2xvYmFsIGNvcHkgb2YgbXkgSVAg YWRkcmVzcyAqLwotCi0jaWZuZGVmIFRFTE9QVF9NQUNSTwotaW50Ci10ZWxvcHRfaW5kZXgob3B0 KSBpbnQgb3B0OyB7Ci0gICAgaWYgKG9wdCA+PSAwICYmIG9wdCA8PSBURUxPUFRfU1RERVJSKQot ICAgICAgcmV0dXJuKG9wdCk7Ci0gICAgZWxzZSBpZiAob3B0ID49IFRFTE9QVF9QUkFHTUFfTE9H T04gJiYgb3B0IDw9IFRFTE9QVF9QUkFHTUFfSEVBUlRCRUFUKQotICAgICAgcmV0dXJuKG9wdC04 OCk7Ci0gICAgZWxzZSBpZiAob3B0ID09IFRFTE9QVF9JQk1fU0FLKQotICAgICAgcmV0dXJuKG9w dC0xNDcpOwotICAgIGVsc2UKLSAgICAgIHJldHVybihOVEVMT1BUUyk7Ci19Ci0KLWludAotdGVs b3B0X29rKG9wdCkgaW50IG9wdDsgewotICAgIHJldHVybigob3B0ID49IFRFTE9QVF9CSU5BUlkg JiYgb3B0IDw9IFRFTE9QVF9TVERFUlIpIHx8Ci0gICAgICAgICAgIChvcHQgPj0gVEVMT1BUX1BS QUdNQV9MT0dPTiAmJiBvcHQgPD0gVEVMT1BUX1BSQUdNQV9IRUFSVEJFQVQpIHx8Ci0gICAgICAg ICAgIChvcHQgPT0gVEVMT1BUX0lCTV9TQUspKTsKLX0KLQotQ0hBUiAqCi10ZWxvcHQob3B0KSBp bnQgb3B0OyB7Ci0gICAgaWYgKHRlbG9wdF9vayhvcHQpKQotICAgICAgcmV0dXJuKChDSEFSICop dGVsb3B0c1t0ZWxvcHRfaW5kZXgob3B0KV0pOwotICAgIGVsc2UKLSAgICAgIHJldHVybigoQ0hB UiAqKSJVTktOT1dOIik7Ci19Ci0KLWludAotdGVsb3B0X21vZGVfb2sob3B0KSBpbnQgb3B0OyB7 Ci0gICAgcmV0dXJuKCh1bnNpZ25lZCBpbnQpKG9wdCkgPD0gVE5fTkdfTVUpOwotfQotCi1DSEFS ICoKLXRlbG9wdF9tb2RlKG9wdCkgaW50IG9wdDsgewotICAgIGlmICh0ZWxvcHRfbW9kZV9vayhv cHQpKQotICAgICAgcmV0dXJuKChDSEFSICopdGVsb3B0X21vZGVzW29wdC1UTl9OR19SRl0pOwot ICAgIGVsc2UKLSAgICAgIHJldHVybigoQ0hBUiAqKSJVTktOT1dOIik7Ci19Ci0jZW5kaWYgLyog VEVMT1BUX01BQ1JPICovCi0KLXN0YXRpYyBpbnQKLXRuX291dHN0KG5vdHF1aWV0KSBpbnQgbm90 cXVpZXQ7IHsKLSAgICBpbnQgb3V0c3RhbmRpbmcgPSAwOwotICAgIGludCB4ID0gMDsKLSNpZmRl ZiBDS19FTkNSWVBUSU9OCi0gICAgaW50IGUgPSAwOwotICAgIGludCBkID0gMDsKLSNlbmRpZiAv KiBDS19FTkNSWVBUSU9OICovCi0KLSAgICBpZiAodG5fd2FpdF9mbGcpIHsKLSAgICAgICAgZm9y ICh4ID0gVEVMT1BUX0ZJUlNUOyB4IDw9IFRFTE9QVF9MQVNUOyB4KyspIHsKLSAgICAgICAgICAg IGlmIChURUxPUFRfT0soeCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoVEVMT1BUX1VOQU5TV0VS RURfV0lMTCh4KSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIG5vdHF1aWV0ICkKLSAgICAg ICAgICAgICAgICAgICAgICBwcmludGYoIj9UZWxuZXQgd2FpdGluZyBmb3IgcmVzcG9uc2UgdG8g V0lMTCAlc1xyXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURUxPUFQoeCkpOwot ICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0bl9vdXRzdCIsInVuYW5zd2VyZWQgV0lM TCIseCk7Ci0gICAgICAgICAgICAgICAgICAgIG91dHN0YW5kaW5nID0gMTsKLSAgICAgICAgICAg ICAgICAgICAgaWYgKCAhbm90cXVpZXQgKQotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoVEVMT1BUX1VOQU5TV0VSRURf RE8oeCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBub3RxdWlldCApCi0gICAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKCI/VGVsbmV0IHdhaXRpbmcgZm9yIHJlc3BvbnNlIHRvIERPICVz XHJcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVCh4KSk7Ci0gICAgICAg ICAgICAgICAgICAgIGRlYnVnKEYxMTEsInRuX291dHN0IiwidW5hbnN3ZXJlZCBETyIseCk7Ci0g ICAgICAgICAgICAgICAgICAgIG91dHN0YW5kaW5nID0gMTsKLSAgICAgICAgICAgICAgICAgICAg aWYgKCAhbm90cXVpZXQgKQotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoVEVMT1BUX1VOQU5TV0VSRURfV09OVCh4KSkg ewotICAgICAgICAgICAgICAgICAgICBpZiAoIG5vdHF1aWV0ICkKLSAgICAgICAgICAgICAgICAg ICAgICBwcmludGYoIj9UZWxuZXQgd2FpdGluZyBmb3IgcmVzcG9uc2UgdG8gV09OVCAlc1xyXG4i LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURUxPUFQoeCkpOwotICAgICAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTExLCJ0bl9vdXRzdCIsInVuYW5zd2VyZWQgV09OVCIseCk7Ci0gICAg ICAgICAgICAgICAgICAgIG91dHN0YW5kaW5nID0gMTsKLSAgICAgICAgICAgICAgICAgICAgaWYg KCAhbm90cXVpZXQgKQotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoVEVMT1BUX1VOQU5TV0VSRURfRE9OVCh4KSkgewot ICAgICAgICAgICAgICAgICAgICBpZiAoIG5vdHF1aWV0ICkKLSAgICAgICAgICAgICAgICAgICAg ICBwcmludGYoIj9UZWxuZXQgd2FpdGluZyBmb3IgcmVzcG9uc2UgdG8gRE9OVCAlc1xyXG4iLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURUxPUFQoeCkpOwotICAgICAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTExLCJ0bl9vdXRzdCIsInVuYW5zd2VyZWQgRE9OVCIseCk7Ci0gICAgICAg ICAgICAgICAgICAgIG91dHN0YW5kaW5nID0gMTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAh bm90cXVpZXQgKQotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICBpZiAoVEVMT1BUX1VOQU5TV0VSRURfU0IoeCkpIHsKLSAgICAg ICAgICAgICAgICAgICAgaWYgKCBub3RxdWlldCApCi0gICAgICAgICAgICAgICAgICAgICAgcHJp bnRmKCI/VGVsbmV0IHdhaXRpbmcgZm9yIHJlc3BvbnNlIHRvIFNCICVzXHJcbiIsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVCh4KSk7Ci0gICAgICAgICAgICAgICAgICAgIGRl YnVnKEYxMTEsInRuX291dHN0IiwidW5hbnN3ZXJlZCBTQiIseCk7Ci0gICAgICAgICAgICAgICAg ICAgIG91dHN0YW5kaW5nID0gMTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAhbm90cXVpZXQg KQotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIH0KLSAgICAgICAgfQotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0gICAgICAgIGlm IChja190bl9hdXRoX2luX3Byb2dyZXNzKCkpIHsKLSAgICAgICAgICAgIGlmIChURUxPUFRfTUUo VEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSkgewotICAgICAgICAgICAgICAgIGlmIChub3RxdWlldCkK LSAgICAgICAgICAgICAgICAgIHByaW50ZigiP1RlbG5ldCB3YWl0aW5nIGZvciBXSUxMICVzIHN1 Ym5lZ290aWF0aW9uXHJcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUKFRFTE9Q VF9BVVRIRU5USUNBVElPTikpOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsCi0gICAgICAg ICAgICAgICAgICAgICAgInRuX291dHN0IiwKLSAgICAgICAgICAgICAgICAgICAgICAiTUUgYXV0 aGVudGljYXRpb24gaW4gcHJvZ3Jlc3MiLAotICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9B VVRIRU5USUNBVElPTgotICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAg b3V0c3RhbmRpbmcgPSAxOwotICAgICAgICAgICAgfSBlbHNlIGlmIChURUxPUFRfVShURUxPUFRf QVVUSEVOVElDQVRJT04pKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vdHF1aWV0KQotICAgICAg ICAgICAgICAgICAgcHJpbnRmKCI/VGVsbmV0IHdhaXRpbmcgZm9yIERPICVzIHN1Ym5lZ290aWF0 aW9uXHJcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUKFRFTE9QVF9BVVRIRU5U SUNBVElPTikpOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsCi0gICAgICAgICAgICAgICAg ICAgICAgInRuX291dHN0IiwKLSAgICAgICAgICAgICAgICAgICAgICAiVSBhdXRoZW50aWNhdGlv biBpbiBwcm9ncmVzcyIsCi0gICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX0FVVEhFTlRJQ0FU SU9OCi0gICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICBvdXRzdGFuZGlu ZyA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS19BVVRIRU5USUNB VElPTiAqLwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgaWYgKCFvdXRzdGFuZGluZykg ewotICAgICAgICAgICAgZSA9IGNrX3RuX2VuY3J5cHRpbmcoKTsKLSAgICAgICAgICAgIGQgPSBj a190bl9kZWNyeXB0aW5nKCk7Ci0gICAgICAgICAgICBpZiAoVEVMT1BUX01FKFRFTE9QVF9FTkNS WVBUSU9OKSkgewotICAgICAgICAgICAgICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX0VOQ1JZUFRJ T04pLmVuY3J5cHQuc3RvcCAmJiBlIHx8Ci0gICAgICAgICAgICAgICAgICAgICFURUxPUFRfU0Io VEVMT1BUX0VOQ1JZUFRJT04pLmVuY3J5cHQuc3RvcCAmJiAhZQotICAgICAgICAgICAgICAgICAg ICApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBub3RxdWlldCApCi0gICAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCI/VGVsbmV0IHdhaXRpbmcgZm9yIFdJTEwgJXMgc3VibmVnb3RpYXRp b25cclxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUKFRFTE9QVF9FTkNS WVBUSU9OKSk7Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICJ0bl9vdXRzdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJlbmNy eXB0aW9uIG1vZGUgc3dpdGNoIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX0VO Q1JZUFRJT04KLSAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAg ICAgb3V0c3RhbmRpbmcgPSAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIGlmIChURUxPUFRfVShURUxPUFRfRU5DUllQVElPTikpIHsKLSAgICAgICAgICAg ICAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9FTkNSWVBUSU9OKS5lbmNyeXB0LnN0b3AgJiYgZCB8 fAotICAgICAgICAgICAgICAgICAgICAhVEVMT1BUX1NCKFRFTE9QVF9FTkNSWVBUSU9OKS5lbmNy eXB0LnN0b3AgJiYgIWQKLSAgICAgICAgICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAgICAg ICAgIGlmICggbm90cXVpZXQgKQotICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1RlbG5l dCB3YWl0aW5nIGZvciBETyAlcyBzdWJuZWdvdGlhdGlvblxyXG4iLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBURUxPUFQoVEVMT1BUX0VOQ1JZUFRJT04pKTsKLSAgICAgICAgICAgICAg ICAgICAgZGVidWcoRjExMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgInRuX291dHN0IiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgImRlY3J5cHRpb24gbW9kZSBzd2l0Y2giLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX0VOQ1JZUFRJT04KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgb3V0c3RhbmRpbmcgPSAxOwotICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIENLX0VO Q1JZUFRJT04gKi8KLSAgICB9IC8qIGlmICh0bl93YWl0X2ZsZykgKi8KLQotI2lmZGVmIElLU19P UFRJT04KLSAgICAvKiBFdmVuIGlmIHdlIGFyZSBub3Qgd2FpdGluZyBmb3IgVGVsbmV0IG9wdGlv bnMgd2UgbXVzdCB3YWl0IGZvciAqLwotICAgIC8qIEtlcm1pdCBUZWxuZXQgU3VibmVnb3RpYXRp b25zIGlmIHdlIGhhdmUgc2VudCBhIHJlcXVlc3QgdG8gdGhlICovCi0gICAgLyogb3RoZXIgZ3V5 LiAgT3RoZXJ3aXNlIHdlIHdpbGwgZ2V0IG91dCBvZiBzeW5jLiAgICAgICAgICAgICAgICAgKi8K LSAgICBpZiAoIW91dHN0YW5kaW5nKSB7Ci0gICAgICAgIGlmIChURUxPUFRfVShURUxPUFRfS0VS TUlUKSAmJgotICAgICAgICAgICAgKFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVf cmVxX3N0YXJ0IHx8Ci0gICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1p dC5tZV9yZXFfc3RvcCB8fAotICAgICAgICAgICAgICFURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCku a2VybWl0LnNvcCkKLSAgICAgICAgICAgICkgewotICAgICAgICAgICAgaWYgKCBub3RxdWlldCAp Ci0gICAgICAgICAgICAgIHByaW50ZigiP1RlbG5ldCB3YWl0aW5nIGZvciBTQiAlcyBuZWdvdGlh dGlvblxyXG4iLAotICAgICAgICAgICAgICAgICAgICAgVEVMT1BUKFRFTE9QVF9LRVJNSVQpKTsK LSAgICAgICAgICAgIGRlYnVnKEYxMTEsInRuX291dHN0IiwiVSBrZXJtaXQgaW4gcHJvZ3Jlc3Mi LFRFTE9QVF9LRVJNSVQpOwotICAgICAgICAgICAgb3V0c3RhbmRpbmcgPSAxOwotICAgICAgICB9 Ci0gICAgfQotI2VuZGlmIC8qIElLU19PUFRJT04gKi8KLQotI2lmZGVmIFROX0NPTVBPUlQKLSAg ICBpZiAoIW91dHN0YW5kaW5nKSB7Ci0gICAgICAgIGlmIChURUxPUFRfTUUoVEVMT1BUX0NPTVBP UlQpKSB7Ci0gICAgICAgICAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9DT01QT1JUKS5jb21wb3J0 LndhaXRfZm9yX3NiKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vdHF1aWV0KQotICAgICAgICAg ICAgICAgICAgICBwcmludGYoIj9UZWxuZXQgd2FpdGluZyBmb3IgU0IgJXMgbmVnb3RpYXRpb25c clxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBURUxPUFQoVEVMT1BUX0NPTVBPUlQp KTsKLSAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsInRuX291dHN0IiwiQ29tUG9ydCBTQiBpbiBw cm9ncmVzcyIsVEVMT1BUX0NPTVBPUlQpOwotICAgICAgICAgICAgICAgb3V0c3RhbmRpbmcgPSAx OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfQ09NUE9S VCkuY29tcG9ydC53YWl0X2Zvcl9tcykgewotICAgICAgICAgICAgICAgIGlmIChub3RxdWlldCkK LSAgICAgICAgICAgICAgcHJpbnRmKCI/VGVsbmV0IHdhaXRpbmcgZm9yIFNCICVzIE1PREVNX1NU QVRVUyBuZWdvdGlhdGlvblxyXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9Q VChURUxPUFRfQ09NUE9SVCkpOwotICAgICAgICAgICAgZGVidWcoRjExMSwidG5fb3V0c3QiLCJD b21Qb3J0IFNCIE1TIGluIHByb2dyZXNzIixURUxPUFRfQ09NUE9SVCk7Ci0gICAgICAgICAgICAg ICBvdXRzdGFuZGluZyA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5k aWYgLyogVE5fQ09NUE9SVCAqLwotICAgIHJldHVybihvdXRzdGFuZGluZyk7Ci19Ci0KLWludAot aXN0bmNvbXBvcnQoKSB7Ci0jaWZkZWYgVE5fQ09NUE9SVAotICAgIGlmICghbG9jYWwpIHJldHVy bigwKTsKLSAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVybigwKTsKLSAgICBpZiAodHRu cHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4oMCk7Ci0gICAgaWYgKFRFTE9QVF9NRShURUxPUFRf Q09NUE9SVCkpCi0gICAgICByZXR1cm4oMSk7Ci0gICAgZWxzZQotI2VuZGlmIC8qIFROX0NPTVBP UlQgKi8KLSAgICAgIHJldHVybigwKTsKLX0KLQotLyogdG5fd2FpdCgpIC0tIFdhaXQgZm9yIHJl c3BvbnNlIHRvIFRlbG5ldCBuZWdvdGlhdGlvbi4gKi8KLS8qCi0gIFdhaXQgZm9yIHVwIHRvIDx0 aW1lb3V0PiBzZWNvbmRzIGZvciB0aGUgcmVzcG9uc2UgdG8gYXJyaXZlLgotICBQbGFjZSBhbGwg bm9uLXRlbG5ldCBkYXRhIGludG8gVGVsbmV0IFdhaXQgQnVmZmVyLgotICBJZiByZXNwb25zZSBk b2VzIGFycml2ZSByZXR1cm4gMSwgZWxzZSByZXR1cm4gMC4KLSovCi0jaWZuZGVmIFROX1dBSVRf QlVGX1NaCi0jZGVmaW5lIFROX1dBSVRfQlVGX1NaIDQwOTYKLSNlbmRpZiAvKiBUTl9XQUlUX0JV Rl9TWiAqLwotc3RhdGljIGNoYXIgdG5fd2FpdF9idWZbVE5fV0FJVF9CVUZfU1pdOwotc3RhdGlj IGludCAgdG5fd2FpdF9pZHggPSAwOwotI2lmbmRlZiBUTl9USU1FT1VUCi0jZGVmaW5lIFROX1RJ TUVPVVQgMTIwCi0jZW5kaWYgLyogVE5fVElNRU9VVCAqLwotc3RhdGljIGludCB0bl93YWl0X3Rt byA9IFROX1RJTUVPVVQ7Ci0KLSNpZmRlZiBDS1NQSU5ORVIKLVZPSUQKLXBydHdhaXQoc3RhdGUp IGludCBzdGF0ZTsgewotICAgIHN3aXRjaCAoc3RhdGUgJSA0KSB7Ci0gICAgICBjYXNlIDA6Ci0g ICAgICAgIHByaW50ZigiLyIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgMToKLSAgICAg ICAgcHJpbnRmKCItIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAyOgotICAgICAgICBw cmludGYoIlxcIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAzOgotICAgICAgICBwcmlu dGYoInwiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotI2VuZGlmIC8qIENLU1BJTk5FUiAq LwotCi1zdGF0aWMgaW50IG5mbGFnID0gMDsKLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXRuX3dh aXQoY2hhciAqIHdoZXJlKQotI2Vsc2UKLXRuX3dhaXQod2hlcmUpIGNoYXIgKiB3aGVyZTsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwotLyogdG5fd2FpdCAqLyB7Ci0gICAgZXh0ZXJuIGludCBja3hl Y2gsIGxvY2FsOwotICAgIGludCBjaCA9IDAsIGNvdW50ID0gMDsKLSNpZm5kZWYgTk9ISU5UUwot ICAgIGludCBub2hpbnRnaXZlbiA9IDE7Ci0gICAgZXh0ZXJuIGludCBoaW50czsKLSNlbmRpZiAv KiBOT0hJTlRTICovCi0gICAgaW50IG91dHN0YW5kaW5nOwotI2lmZGVmIFROX0NPTVBPUlQKLSAg ICBpbnQgc2F2Y2FycjsKLSAgICBleHRlcm4gaW50IHR0Y2FycjsKLSNlbmRpZiAvKiBUTl9DT01Q T1JUICovCi0KLSAgICAvKiBpZiAoIUlTX1RFTE5FVCgpKSByZXR1cm4oMSk7ICovCi0KLSAgICBy dGltZXIoKTsKLQotICAgIGRlYnVnKEYxMTAsInRuX3dhaXQgd2FpdGluZyBmb3IiLHdoZXJlLDAp OwotICAgIHRuX3dhaXRfdG1vID0gVE5fVElNRU9VVDsKLSAgICBkZWJ1ZyhGMTExLCJ0bl93YWl0 IiwidGltZW91dCIsdG5fd2FpdF90bW8pOwotICAgIG91dHN0YW5kaW5nID0gdG5fb3V0c3QoMCk7 Ci0gICAgZGVidWcoRjExMSwidG5fd2FpdCIsIm91dHN0YW5kaW5nIixvdXRzdGFuZGluZyk7Ci0g ICAgZGVidWcoRjExMSwidG5fd2FpdCIsInRuX3dhaXRfZmxnIix0bl93YWl0X2ZsZyk7Ci0KLSAg ICAvKiBUaGUgZm9sbG93aW5nIGlzIG1lYW50IHRvIGJlICEofHwpLiAgV2Ugb25seSB3YW50IHRv IHJldHVybiAqLwotICAgIC8qIGltbWVkaWF0ZWx5IGlmIGJvdGggdGhlIHRuX3dhaXRfZmxnICYm IHRuX291dHN0KCkgYXJlIGZhbHNlICovCi0gICAgaWYgKCEob3V0c3RhbmRpbmcgfHwgdG5fd2Fp dF9mbGcpKSAgLyogSWYgbm8gbmVlZCB0byB3YWl0ICovCi0gICAgICByZXR1cm4oMSk7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogRG9uJ3QuICovCi0KLSAgICBpZiAodG5fZGViIHx8IGRlYnNl cykgdG5fZGVidWcoIjx3YWl0IGZvciBvdXRzdGFuZGluZyBuZWdvdGlhdGlvbnM+Iik7Ci0KLSNp ZmRlZiBDS1NQSU5ORVIKLSAgICBpZiAoIXNzdGVsbmV0ICYmICFxdWlldCkKLSAgICAgICAgcHJ0 d2FpdCgwKTsKLSNlbmRpZiAvKiBDS1NQSU5ORVIgKi8KLQotICAgIC8qIFdhaXQgdXAgdG8gVE5f VElNRU9VVCBzZWMgZm9yIHJlc3BvbnNlcyB0byBvdXRzdGFuZGluZyB0ZWxuZXQgbmVncyAqLwot ICAgIGRvIHsKLSNpZmRlZiBOVFNJRwotICAgICAgICBja19paCgpOwotI2VuZGlmIC8qIE5UU0lH ICovCi0gICAgICAgIGNoID0gdHRpbmMoMSk7Ci0gICAgICAgIGlmIChjaCA9PSAtMSkgeyAgICAg ICAgICAgICAgICAgLyogVGltZWQgb3V0ICovCi0gICAgICAgICAgICBpZiAoIXNzdGVsbmV0ICYm ICFxdWlldCkgeyAgLyogTGV0IHVzZXIga25vdy4uLiAqLwotI2lmZGVmIENLU1BJTk5FUgotICAg ICAgICAgICAgICAgIHByaW50ZigiXGIiKTsKLSAgICAgICAgICAgICAgICBwcnR3YWl0KGd0aW1l cigpKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgaWYgKG5mbGFnID09IDApIHsKLSAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKCIgTmVnb3RpYXRpb25zLiIpOwotICAgICAgICAgICAgICAgICAg ICBuZmxhZysrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobmZsYWcg PiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiLiIpOwotICAgICAgICAgICAgICAg ICAgICBuZmxhZysrOwotICAgICAgICAgICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICAg ICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tTUElOTkVSICovCi0gICAgICAgICAgICB9Ci0gICAg ICAgIH0gZWxzZSBpZiAoY2ggPCAtMSkgewotICAgICAgICAgICAgcHJpbnRmKCJcclxuP0Nvbm5l Y3Rpb24gY2xvc2VkIGJ5IHBlZXIuXHJcbiIpOwotICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBk ZWJzZXMpIHRuX2RlYnVnKCI8Y29ubmVjdGlvbiBjbG9zZWQgYnkgcGVlcj4iKTsKLSAgICAgICAg ICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICBzd2l0Y2ggKGNoKSB7Ci0g ICAgICAgICAgY2FzZSBJQUM6Ci0jaWZkZWYgQ0tTUElOTkVSCi0gICAgICAgICAgICBpZiAoIXNz dGVsbmV0ICYmICFxdWlldCkKLSAgICAgICAgICAgICAgcHJpbnRmKCJcYiIpOwotI2VuZGlmIC8q IENLU1BJTk5FUiAqLwotICAgICAgICAgICAgY2ggPSB0bl9kb29wKChDSEFSKShjaCAmIDB4ZmYp LGluc2VydmVyP2NreGVjaDpkdXBsZXgsdHRpbmMpOwotI2lmZGVmIENLU1BJTk5FUgotICAgICAg ICAgICAgaWYgKCFzc3RlbG5ldCAmJiAhcXVpZXQpIHsKLSAgICAgICAgICAgICAgICBwcnR3YWl0 KGd0aW1lcigpKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS1NQSU5ORVIgKi8KLSAgICAg ICAgICAgIGRlYnVnKEYxMDEsInRuX3dhaXQgdG5fZG9vcCIsIiIsY2gpOwotICAgICAgICAgICAg c3dpdGNoIChjaCkgewotICAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgZHVw bGV4ID0gMTsgICAgICAgICAgICAgLyogVHVybiBvbiBlY2hvaW5nICovCi0gICAgICAgICAgICAg ICAgaWYgKGluc2VydmVyKQotICAgICAgICAgICAgICAgICAgY2t4ZWNoID0gMTsKLSAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgIGR1 cGxleCA9IDA7ICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIGVjaG9pbmcgKi8KLSAgICAgICAgICAg ICAgICBpZiAoaW5zZXJ2ZXIpCi0gICAgICAgICAgICAgICAgICBja3hlY2ggPSAwOwotICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICAgICAg dG5fd2FpdF9idWZbdG5fd2FpdF9pZHgrK10gPSBJQUM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgIGNhc2UgNDogICAgICAgICAgICAgICAgICAgLyogSUtTIGV2ZW50ICov Ci0gICAgICAgICAgICAgIGNhc2UgNjogICAgICAgICAgICAgICAgICAgLyogTG9nb3V0ICovCi0g ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgLTE6Ci0JCWlmICghcXVp ZXQpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCI/VGVsbmV0IE9wdGlvbiBuZWdvdGlhdGlvbiBl cnJvci5cbiIpOwotICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQotICAgICAg ICAgICAgICAgICAgdG5fZGVidWcoIjxUZWxuZXQgT3B0aW9uIG5lZ290aWF0aW9uIGVycm9yPiIp OwotICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICAgIGNhc2UgLTI6Ci0g ICAgICAgICAgICAgICAgcHJpbnRmKCI/Q29ubmVjdGlvbiBjbG9zZWQgYnkgcGVlci5cbiIpOwot ICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1ZygiPENvbm5lY3Rp b24gY2xvc2VkIGJ5IHBlZXI+Iik7Ci0JCXR0Y2xvcygwKTsKLSAgICAgICAgICAgICAgICByZXR1 cm4oLTIpOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChjaCA8 IDApIHsKLSAgICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zygi PFVua25vd24gY29ubmVjdGlvbiBlcnJvcj4iKTsKLSAgICAgICAgICAgICAgICAgIHJldHVybihj aCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSAvKiBzd2l0Y2ggKi8KLSAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0jaWZkZWYgQ0tTUElOTkVSCi0gICAg ICAgICAgICBpZiAoIXNzdGVsbmV0ICYmICFxdWlldCkgewotICAgICAgICAgICAgICAgIHByaW50 ZigiXGIiKTsKLSAgICAgICAgICAgICAgICBwcnR3YWl0KGd0aW1lcigpKTsKLSAgICAgICAgICAg IH0KLSNlbmRpZiAvKiBDS1NQSU5ORVIgKi8KLSAgICAgICAgICAgIHRuX3dhaXRfYnVmW3RuX3dh aXRfaWR4KytdID0gKENIQVIpKGNoICYgMHhmZik7Ci0gICAgICAgIH0gLyogc3dpdGNoICovCi0K LSAgICAgICAgb3V0c3RhbmRpbmcgPSB0bl9vdXRzdCgwKTsKLQotICAgICAgICBpZiAoIG91dHN0 YW5kaW5nICYmIGNoICE9IElBQyApIHsKLSAgICAgICAgICAgIGludCB0aW1lciA9IGd0aW1lcigp OwotICAgICAgICAgICAgaWYgKCB0aW1lciA+IHRuX3dhaXRfdG1vICkgewotICAgICAgICAgICAg ICAgIGlmICghc3N0ZWxuZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAotICAgICAg ICAgICAgICAgICAgICAiXHJcbj9UZWxuZXQgUHJvdG9jb2wgVGltZW91dCAtIGNvbm5lY3Rpb24g Y2xvc2VkXHJcbiIpOwotICAgICAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykK LSAgICAgICAgICAgICAgICAgICAgICAgIHRuX2RlYnVnKAotICAgICAgICAgICAgICAgICAgICAg ICAgIjx0ZWxuZXQgcHJvdG9jb2wgdGltZW91dCAtIGNvbm5lY3Rpb24gY2xvc2VkPiIpOwotICAg ICAgICAgICAgICAgICAgICB0bl9vdXRzdCgxKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgLyogaWYgd2UgZG8gbm90IGNsb3NlIHRoZSBjb25uZWN0aW9uLCB0aGVuIHdlIHdp bGwgYmxvY2sgKi8KLSAgICAgICAgICAgICAgICAvKiB0aGUgbmV4dCB0aW1lIHdlIGhpdCBhIHdh aXQuICBhbmQgaWYgd2UgZG9uJ3Qgd2Ugd2lsbCAqLwotICAgICAgICAgICAgICAgIC8qIGRvIHRo ZSB3cm9uZyB0aGluZyBpZiB0aGUgaG9zdCBzZW5kcyAweEZGIGFuZCBkb2VzICAgICovCi0gICAg ICAgICAgICAgICAgLyogbm90IGludGVuZCBpdCB0byBiZSBhbiBJQUMuICAgICAgICAgICAgICAg ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICB0dGNsb3MoMCk7Ci0gICAgICAgICAgICAg ICAgd2h5Y2xvc2VkID0gV0NfVEVMT1BUOwotICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0g ICAgICAgICAgICB9Ci0jaWZuZGVmIE5PSElOVFMKLSAgICAgICAgICAgIGVsc2UgaWYgKCBoaW50 cyAmJiB0aW1lciA+IDMwICYmIG5vaGludGdpdmVuICYmICFpbnNlcnZlciApIHsKLSNpZmRlZiBD S1NQSU5ORVIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcYiIpOwot I2Vsc2UgLyogQ0tTUElOTkVSICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy aW50ZigiXHJcbiIpOwotI2VuZGlmIC8qIENLU1BJTk5FUiAqLwotICAgICAgcHJpbnRmKCIqKioq KioqKioqKioqKioqKioqKioqKioqXHJcbiIpOwotICAgICAgICBwcmludGYoIlRoZSBUZWxuZXQg JXMgaXMgbm90IHNlbmRpbmcgcmVxdWlyZWQgcmVzcG9uc2VzLlxyXG5cclxuIiwKLSAgICAgICAg ICAgICAgICBzc3RlbG5ldD8iY2xpZW50Ijoic2VydmVyIik7Ci0gICAgICB0bl9vdXRzdCgxKTsK LSAgICAgIHByaW50ZigiXG5Zb3UgY2FuIGNvbnRpbnVlIHRvIHdhaXQgb3IgeW91IGNhbiBjYW5j ZWwgd2l0aCBDdHJsLUMuXHJcbiIpOwotICAgICAgcHJpbnRmKCJJbiBjYXNlIHRoZSBUZWxuZXQg c2VydmVyIG5ldmVyIHJlc3BvbmRzIGFzIHJlcXVpcmVkLFxyXG4iKTsKLSAgICAgIHByaW50Zigi eW91IGNhbiB0cnkgY29ubmVjdGluZyB0byB0aGlzIGhvc3Qgd2l0aCBURUxORVQgL05PV0FJVC5c clxuIik7Ci0gICAgICBwcmludGYoIlVzZSBTRVQgSElOVFMgT0ZGIHRvIHN1cHByZXNzIGZ1cnRo ZXIgaGludHMuXHJcbiIpOwotICAgICAgcHJpbnRmKCIqKioqKioqKioqKioqKioqKioqKioqKioq XHJcbiIpOwotICAgICAgbm9oaW50Z2l2ZW4gPSAwOwotICAgICAgICAgICAgfQotI2VuZGlmIC8q IE5PSElOVFMgKi8KLSAgICAgICAgfQotCi0jaWZkZWYgVE5fQ09NUE9SVAotICAgICAgICAvKiBN dXN0IGRpc2FibGUgY2FycmllciBkZXRlY3QgY2hlY2sgaWYgd2UgYXJlIHVzaW5nIFRlbG5ldCBD b21wb3J0ICovCi0gICAgICAgIHNhdmNhcnIgPSB0dGNhcnI7Ci0gICAgICAgIHR0c2NhcnIoQ0FS X09GRik7Ci0gICAgICAgIGNvdW50ID0gdHRjaGsoKTsKLSAgICAgICAgdHRzY2FycihzYXZjYXJy KTsKLSNlbHNlIC8qIFROX0NPTVBPUlQgKi8KLSAgICAgICAgY291bnQgPSB0dGNoaygpOwotI2Vu ZGlmIC8qIFROX0NPTVBPUlQgKi8KLSAgICB9IHdoaWxlICgodG5fd2FpdF9pZHggPCBUTl9XQUlU X0JVRl9TWikgJiYKLSAgICAgICAgICAgICAob3V0c3RhbmRpbmcgJiYgY291bnQgPj0gMCkpOwot Ci0gICAgaWYgKHRuX3dhaXRfaWR4ID09IFROX1dBSVRfQlVGX1NaKSB7Ci0gICAgICBpZiAodG5f ZGViIHx8IGRlYnNlcykgdG5fZGVidWcoIjxUZWxuZXQgV2FpdCBCdWZmZXIgZmlsbGVkPiIpOwot ICAgICAgcmV0dXJuKDApOwotICAgIH0KLQotICAgIGlmICghc3N0ZWxuZXQgJiYgIXF1aWV0KSB7 Ci0jaWZkZWYgQ0tTUElOTkVSCi0gICAgICAgIHByaW50ZigiXGIgXGIiKTsKLSNlbHNlCi0gICAg ICAgIGlmIChuZmxhZyA+IDApIHsKLSAgICAgICAgICAgIHByaW50ZigiIChPSylcbiIpOwotICAg ICAgICAgICAgbmZsYWcgPSAtMTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENLU1BJTk5FUiAqLwot ICAgIH0KLSAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcoIjxubyBvdXRzdGFuZGlu ZyBuZWdvdGlhdGlvbnM+Iik7Ci0gICAgcmV0dXJuKDApOwotfQotCi0vKiBQdXNoIGRhdGEgZnJv bSB0aGUgVGVsbmV0IFdhaXQgQnVmZmVyIGludG8gdGhlIEkvTyBRdWV1ZSAqLwotLyogUmV0dXJu IDEgb24gc3VjY2VzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQot aW50Ci10bl9wdXNoKCkgewotI2lmZGVmIE5FVExFQlVGCi0gICAgZXh0ZXJuIGludCB0dF9wdXNo X2luaXRlZDsKLSNlbmRpZiAvKiBORVRMRUJVRiAqLwotICAgIC8qIGlmICghSVNfVEVMTkVUKCkp IHJldHVybigxKTsgKi8KLQotICAgIGlmICh0bl93YWl0X2lkeCkgewotICAgICAgICBja2hleGR1 bXAoKENIQVIgKikidG5fcHVzaCIsdG5fd2FpdF9idWYsdG5fd2FpdF9pZHgpOwotI2lmZGVmIE5F VExFQlVGCi0gICAgICAgIGlmICghdHRfcHVzaF9pbml0ZWQpICAgICAgICAgICAgLyogTG9jYWwg aGFuZGxpbmcgKi8KLSAgICAgICAgICBsZV9pbml0KCk7Ci0gICAgICAgIGxlX3B1dHMoKENIQVIg Kil0bl93YWl0X2J1Zix0bl93YWl0X2lkeCk7Ci0jZWxzZSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogRXh0ZXJuYWwgaGFuZGxpbmcuLi4gKi8KLSNpZmRlZiBPUzIgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBLOTUgaGFzIGl0cyBvd24gd2F5ICovCi0gICAgICAg IGxlX3B1dHMoKENIQVIgKil0bl93YWl0X2J1Zix0bl93YWl0X2lkeCk7Ci0jZWxzZQotI2lmZGVm IFRUTEVCVUYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVOSVgsIGV0YyAqLwotICAgICAg ICBsZV9wdXRzKChDSEFSICopdG5fd2FpdF9idWYsdG5fd2FpdF9pZHgpOwotI2Vsc2UKLS8qCi0g IElmIHlvdSBzZWUgdGhpcyBtZXNzYWdlIGluIEFPUy9WUywgT1MtOSwgVk9TLCBldGMsIHlvdSBu ZWVkIHRvIGNvcHkKLSAgdGhlICNpZmRlZiBUVExFQlVGLi4jZW5kaWYgY29kZSBmcm9tIGNrdXRp by5jIHRvIHRoZSBjb3JyZXNwb25kaW5nCi0gIHBsYWNlcyBpbiB5b3VyIGNrP3Rpby5jIG1vZHVs ZS4KLSovCi0gICAgICAgIHByaW50ZigidG5fcHVzaCBjYWxsZWQgYnV0IG5vdCBpbXBsZW1lbnRl ZCAtIGRhdGEgbG9zdC5cbiIpOwotI2VuZGlmIC8qIFRUTEVCVUYgKi8KLSNlbmRpZiAvKiBPUzIg Ki8KLSNlbmRpZiAvKiBORVRMRUJVRiAqLwotICAgICAgICB0bl93YWl0X2lkeCA9IDA7Ci0gICAg fQotICAgIHRuX3dhaXRfdG1vID0gVE5fVElNRU9VVDsgICAgICAgICAgIC8qIFJlc2V0IHdhaXQg dGltZXIgc3RhdHMgKi8KLSAgICByZXR1cm4oMSk7Ci19Ci0KLS8qICBUIE4gXyBTIE8gUCBUICAq LwotLyoKLSAgIFNlbmRzIGEgdGVsbmV0IG9wdGlvbiwgYXZvaWRzIGxvb3BzLgotICAgUmV0dXJu cyAxIGlmIGNvbW1hbmQgd2FzIHNlbnQsIDAgaWYgbm90LCAtMSBvbiBlcnJvci4KLSovCi1pbnQK LXRuX3NvcHQoY21kLG9wdCkgaW50IGNtZCwgb3B0OyB7ICAgICAgICAvKiBURUxORVQgU0VORCBP UFRJT04gKi8KLSAgICBDSEFSIGJ1Zls1XTsKLSAgICBjaGFyIG1zZ1sxMjhdOwotICAgIGludCBy YzsKLSAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVybigtMSk7ICAvKiBNdXN0IGJlIFRD UC9JUCAqLwotICAgIGlmICh0dG5wcm90byAhPSBOUF9URUxORVQpIHJldHVybigtMSk7IC8qIE11 c3QgYmUgdGVsbmV0IHByb3RvY29sICovCi0gICAgaWYgKCFURUxDTURfT0soY21kKSkgcmV0dXJu KC0xKTsKLSAgICBpZiAoVEVMT1BUX09LKG9wdCkpIHsKLSAgICAgICAgaWYgKGNtZCA9PSBETyAm JiBURUxPUFRfVU5BTlNXRVJFRF9ETyhvcHQpKSByZXR1cm4oMCk7Ci0gICAgICAgIGlmIChjbWQg PT0gV0lMTCAmJiBURUxPUFRfVU5BTlNXRVJFRF9XSUxMKG9wdCkpIHJldHVybigwKTsKLSAgICAg ICAgaWYgKGNtZCA9PSBET05UICYmIFRFTE9QVF9VTkFOU1dFUkVEX0RPTlQob3B0KSkgcmV0dXJu KDApOwotICAgICAgICBpZiAoY21kID09IFdPTlQgJiYgVEVMT1BUX1VOQU5TV0VSRURfV09OVChv cHQpKSByZXR1cm4oMCk7Ci0gICAgfQotI2lmZGVmIENLX1NTTAotICAgIGlmIChURUxPUFRfU0Io VEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKLSAgICAgICAgcmV0dXJu KDApOwotICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotICAgIGlmIChjbWQgPT0gRE8gJiYg b3B0ID09IFRFTE9QVF9BVVRIRU5USUNBVElPTikKLSAgICAgIGJ1ZlswXSA9IDA7Ci0KLSAgICBp ZiAodG5faW5maW5pdGUgJiYgVEVMT1BUX09LKG9wdCkpIHsgLyogU2VlIGNvbW1lbnQgYWJvdmUg YWJvdXQgICAqLwotICAgICAgICBpbnQgaW5kZXggPSBURUxPUFRfSU5ERVgob3B0KTsgICAvKiBw cmV2ZW50aW5nIGluZmluaXRlIGxvb3BzICovCi0gICAgICAgIGludCBtID0gY21kIC0gV0lMTDsK LQotICAgICAgICBpZiAodG5jbnRzW2luZGV4XVttXSA+IE1BWFROQ05UKSB7Ci0jaWZkZWYgREVC VUcKLSAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzIHx8IGRlYmxvZykgewotICAgICAg ICAgICAgICAgIGNrbWFrbXNnKG1zZyxzaXplb2YobXNnKSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICJURUxORVQgbmVnb3RpYXRpb24gbG9vcCAiLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgVEVMQ01EKGNtZCksICIgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9Q VChvcHQpKTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLG1zZywiIixvcHQpOwotICAgICAg ICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyhtc2cpOwotICAgICAgICAg ICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAg IH0KLSAgICAgICAgdG5jbnRzW2luZGV4XVttXSsrOwotICAgICAgICB0bmNudHNbaW5kZXhdW3Ru b3Bwc1ttXV0gPSAwOwotICAgIH0KLSAgICBidWZbMF0gPSAoQ0hBUikgSUFDOwotICAgIGJ1Zlsx XSA9IChDSEFSKSAoY21kICYgMHhmZik7Ci0gICAgYnVmWzJdID0gKENIQVIpIChvcHQgJiAweGZm KTsKLSAgICBidWZbM10gPSAoQ0hBUikgMDsKLSNpZmRlZiBERUJVRwotICAgIGlmICgodG5fZGVi IHx8IGRlYnNlcyB8fCBkZWJsb2cpICYmIGNtZCAhPSBTQikKLSAgICAgICAgY2ttYWttc2cobXNn LHNpemVvZihtc2cpLCJURUxORVQgU0VOVCAiLFRFTENNRChjbWQpLCIgIiwKLSAgICAgICAgICAg ICAgICAgIFRFTE9QVChvcHQpKTsKLSNlbmRpZiAvKiBERUJVRyAqLwotI2lmZGVmIE9TMgotICAg IFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwotI2VuZGlmCi0gICAg ZGVidWcoRjEwMSxtc2csIiIsb3B0KTsKLSAgICBpZiAoKHRuX2RlYiB8fCBkZWJzZXMpICYmIGNt ZCAhPSBTQikKLSAgICAgIHRuX2RlYnVnKG1zZyk7Ci0gICAgcmMgPSAodHRvbChidWYsMykgPCAz KTsKLSNpZmRlZiBPUzIKLSAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRpZgotICAgIGlm IChyYykKLSAgICAgICAgcmV0dXJuKC0xKTsKLQotCi0gICAgaWYgKFRFTE9QVF9PSyhvcHQpKSB7 Ci0gICAgICAgIGlmIChjbWQgPT0gRE9OVCAmJiBURUxPUFRfVU5BTlNXRVJFRF9ETyhvcHQpKQot ICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPKG9wdCkgPSAwOwotICAgICAgICBpZiAoY21k ID09IFdPTlQgJiYgVEVMT1BUX1VOQU5TV0VSRURfV0lMTChvcHQpKQotICAgICAgICAgIFRFTE9Q VF9VTkFOU1dFUkVEX1dJTEwob3B0KSA9IDA7Ci0gICAgICAgIGlmIChjbWQgPT0gRE8gJiYgVEVM T1BUX1VOQU5TV0VSRURfRE9OVChvcHQpKQotICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RP TlQob3B0KSA9IDA7Ci0gICAgICAgIGlmIChjbWQgPT0gV0lMTCAmJiBURUxPUFRfVU5BTlNXRVJF RF9XT05UKG9wdCkpCi0gICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfV09OVChvcHQpID0gMDsK LSAgICB9Ci0gICAgcmV0dXJuKDEpOwotfQotCi0vKiBTZW5kIGEgdGVsbmV0IHN1Yi1vcHRpb24g Ki8KLS8qIFJldHVybnMgMSBpZiBjb21tYW5kIHdhcyBzZW50LCAwIGlmIG5vdCwgLTEgb24gZXJy b3IgKi8KLQotaW50Ci10bl9zc2JvcHQob3B0LHN1YixkYXRhLGxlbikgaW50IG9wdCwgc3ViOyBD SEFSICogZGF0YTsgaW50IGxlbjsgewotICAgIENIQVIgYnVmWzI1Nl07Ci0gICAgaW50IG4sbSxy YzsKLQotICAgIGlmICh0dG5ldCAhPSBORVRfVENQQikgcmV0dXJuKDApOyAgIC8qIE11c3QgYmUg VENQL0lQICovCi0gICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDApOyAvKiBN dXN0IGJlIHRlbG5ldCBwcm90b2NvbCAqLwotICAgIGlmICghVEVMT1BUX09LKG9wdCkpIHJldHVy bigtMSk7Ci0gICAgaWYgKGxlbiA8IDAgfHwgbGVuID4gMjUwKSB7Ci0gICAgICAgIGRlYnVnKEYx MTEsIlVuYWJsZSB0byBTZW5kIFRFTE5FVCBTQiAtIGRhdGEgdG9vIGxvbmciLCJsZW4iLGxlbik7 Ci0gICAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAgICAgICAgLyogRGF0YSB0b28gbG9u ZyAqLwotICAgIH0KLSNpZmRlZiBDS19TU0wKLSAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFS VF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7Ci0gICAgICAgIGlmICh0dGNoaygpIDwgMCkK LSAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuKDEp OwotICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotICAgIGlmICghZGF0YSkgbGVuID0gMDsK LQotICAgIGJ1ZlswXSA9IChDSEFSKSBJQUM7Ci0gICAgYnVmWzFdID0gKENIQVIpIChTQiAmIDB4 ZmYpOwotICAgIGJ1ZlsyXSA9IChDSEFSKSAob3B0ICYgMHhmZik7Ci0gICAgYnVmWzNdID0gKENI QVIpIChzdWIgJiAweGZmKTsKLSAgICBpZiAoZGF0YSAmJiBsZW4gPiAwKSB7Ci0gICAgICAgIG1l bWNweSgmYnVmWzRdLGRhdGEsbGVuKTsKLSAgICB9Ci0gICAgYnVmWzQrbGVuXSA9IChDSEFSKSBJ QUM7Ci0gICAgYnVmWzUrbGVuXSA9IChDSEFSKSBTRTsKLQotI2lmZGVmIERFQlVHCi0gICAgaWYg KHRuX2RlYiB8fCBkZWJzZXMgfHwgZGVibG9nKSB7Ci0gICAgICAgIGlmIChvcHQgPT0gVEVMT1BU X1NUQVJUX1RMUyAmJiBzdWIgPT0gMSkKLSAgICAgICAgICBja21ha21zZyh0bl9tc2dfb3V0LFRO X01TR19MRU4sIlRFTE5FVCBTRU5UIFNCICIsCi0gICAgICAgICAgICAgICAgICAgIFRFTE9QVChv cHQpLCIgRk9MTE9XUyBJQUMgU0UiLE5VTEwpOwotICAgICAgICBlbHNlIGlmIChvcHQgPT0gVEVM T1BUX1RUWVBFICYmIHN1YiA9PSAxKQotICAgICAgICAgIGNrbWFrbXNnKHRuX21zZ19vdXQsVE5f TVNHX0xFTiwiVEVMTkVUIFNFTlQgU0IgIiwgVEVMT1BUKG9wdCksCi0gICAgICAgICAgICAgICAg ICAgICIgU0VORCBJQUMgU0UiLE5VTEwpOwotICAgICAgICBlbHNlIGlmIChvcHQgPT0gVEVMT1BU X1RUWVBFICYmIHN1YiA9PSAwKQotICAgICAgICAgIGNrbWFreG1zZyh0bl9tc2dfb3V0LFROX01T R19MRU4sIlRFTE5FVCBTRU5UIFNCICIsVEVMT1BUKG9wdCksIiBJUyAiLAotICAgICAgICAgICAg ICAgICAgICAoY2hhciAqKWRhdGEsIiBJQUMgU0UiLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwpOwotICAgICAgICBlbHNlIGlmIChvcHQgPT0gVEVMT1BUX05FV0VOVklST04pIHsK LSAgICAgICAgICAgIGludCBpLCBxdW90ZTsKLSAgICAgICAgICAgIGNrbWFrbXNnKHRuX21zZ19v dXQsVE5fTVNHX0xFTiwiVEVMTkVUIFNFTlQgU0IgIiwKLSAgICAgICAgICAgICAgICAgICAgIFRF TE9QVChURUxPUFRfTkVXRU5WSVJPTiksIiAiLAotICAgICAgICAgICAgICAgICAgICAgc3ViID09 IFRFTFFVQUxfU0VORCA/ICJTRU5EIiA6Ci0gICAgICAgICAgICAgICAgICAgICBzdWIgPT0gVEVM UVVBTF9JUyA/ICJJUyIgOgotICAgICAgICAgICAgICAgICAgICAgc3ViID09IFRFTFFVQUxfSU5G TyA/IklORk8iIDogIlVOS05PV04iICk7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwLCBxdW90ZSA9 IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChxdW90ZSkgewotICAgICAg ICAgICAgICAgICAgICBzcHJpbnRmKGhleGJ1ZiwiJTAyeCIsZGF0YVtpXSk7IC8qIHNhZmUgYnV0 IHVnbHkgKi8KLSAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZ19vdXQsaGV4YnVm LFROX01TR19MRU4pOwotICAgICAgICAgICAgICAgICAgICBxdW90ZSA9IDA7Ci0gICAgICAgICAg ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChkYXRhW2ldKSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgY2FzZSBURUxfRU5WX1VTRVJWQVI6Ci0gICAgICAgICAgICAg ICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnX291dCwiIFVTRVJWQVIgIixUTl9NU0dfTEVOKTsK LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNh c2UgVEVMX0VOVl9WQVI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQodG5fbXNn X291dCwiIFZBUiAiLFROX01TR19MRU4pOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBURUxfRU5WX1ZBTFVFOgotICAgICAgICAgICAg ICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZ19vdXQsIiBWQUxVRSAiLFROX01TR19MRU4pOwot ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2Fz ZSBURUxfRU5WX0VTQzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2df b3V0LCIgRVNDICIsVE5fTVNHX0xFTik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBxdW90ZSA9 IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg ICBjYXNlIElBQzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2dfb3V0 LCIgSUFDICIsVE5fTVNHX0xFTik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgc3By aW50ZihoZXhidWYsIiVjIixkYXRhW2ldKTsgLyogc2FmZSBidXQgdWdseSAqLwotICAgICAgICAg ICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZ19vdXQsaGV4YnVmLFROX01TR19MRU4pOwot ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot ICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZ19vdXQsIiBJQUMgU0UiLFROX01TR19MRU4pOwot ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3ByaW50ZihoZXhidWYsIiUwMngiLHN1Yik7 ICAgICAgICAgICAgIC8qIHNhZmUgYnV0IHVnbHkgKi8KLSAgICAgICAgICAgIGNrbWFreG1zZyh0 bl9tc2dfb3V0LFROX01TR19MRU4sCi0gICAgICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5U IFNCICIsVEVMT1BUKG9wdCksCi0gICAgICAgICAgICAgICAgICAgICAgIiAiLAotICAgICAgICAg ICAgICAgICAgICAgIGhleGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAiIDxkYXRhPiBJQUMg U0UiLAotICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVM TCxOVUxMCi0gICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRp ZiAvKiBERUJVRyAqLwotI2lmZGVmIE9TMgotICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lO REVGSU5JVEVfV0FJVCApOwotI2VuZGlmIC8qIE9TMiAqLwotI2lmZGVmIERFQlVHCi0gICAgZGVi dWcoRjEwMSx0bl9tc2dfb3V0LCIiLG9wdCk7Ci0gICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCi0g ICAgICB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKLSNlbmRpZiAvKiBERUJVRyAqLwotICAgIHJjID0g KHR0b2woYnVmLDYrbGVuKSA8IDYrbGVuKTsKLSNpZmRlZiBPUzIKLSAgICBSZWxlYXNlVGVsbmV0 TXV0ZXgoKTsKLSNlbmRpZgotCi0gICAgaWYgKHJjKQotICAgICAgcmV0dXJuKC0xKTsKLSAgICBy ZXR1cm4oMSk7Ci19Ci0KLS8qCi0gIHRuX2ZsdWkoKSAtLSBQcm9jZXNzZXMgYWxsIHdhaXRpbmcg ZGF0YSBmb3IgVGVsbmV0IGNvbW1hbmRzLgotICBBbGwgbm9uLVRlbG5ldCBkYXRhIGlzIHRvIGJl IHN0b3JlZCBpbnRvIHRoZSBUZWxuZXQgV2FpdCBCdWZmZXIuCi0gIFJldHVybnMgMSBvbiBzdWNj ZXNzLgotKi8KLWludAotdG5fZmx1aSgpIHsKLSAgICBleHRlcm4gaW50IGNreGVjaDsKLSAgICBp bnQgeCA9IDA7Ci0KLSAgICAvKiBpZiAoIUlTX1RFTE5FVCgpKSByZXR1cm4oMCk7ICovCi0KLSAg ICAvKiBXYWl0IHVwIHRvIDUgc2VjIGZvciByZXNwb25zZXMgdG8gb3V0c3RhbmRpbmcgdGVsbmV0 IG5lZ290aWF0aW9ucyAqLwotICAgIHdoaWxlICh4ID49IDAgJiYgdHRjaGsoKSA+IDAgICYmIHRu X3dhaXRfaWR4IDwgVE5fV0FJVF9CVUZfU1opIHsKLSAgICAgICAgeCA9IHR0aW5jKDEpOwotICAg ICAgICBzd2l0Y2ggKHgpIHsKLSAgICAgICAgICBjYXNlIElBQzoKLSAgICAgICAgICAgIHggPSB0 bl9kb29wKChDSEFSKSh4ICYgMHhmZiksaW5zZXJ2ZXI/Y2t4ZWNoOmR1cGxleCx0dGluYyk7Ci0g ICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ0bl9mbHVpIHRuX2Rvb3AiLCIiLHgpOwotICAgICAgICAg ICAgc3dpdGNoICh4KSB7Ci0gICAgICAgICAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAg LyogVHVybiBvbiBlY2hvaW5nICovCi0gICAgICAgICAgICAgICAgZHVwbGV4ID0gMTsKLSAgICAg ICAgICAgICAgICBpZiAoaW5zZXJ2ZXIpCi0gICAgICAgICAgICAgICAgICBja3hlY2ggPSAxOwot ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIDI6ICAgICAgICAgICAg ICAgICAgIC8qIFR1cm4gb2ZmIGVjaG9pbmcgKi8KLSAgICAgICAgICAgICAgICBkdXBsZXggPSAw OwotICAgICAgICAgICAgICAgIGlmIChpbnNlcnZlcikKLSAgICAgICAgICAgICAgICAgIGNreGVj aCA9IDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgMzoKLSAg ICAgICAgICAgICAgICB0bl93YWl0X2J1Zlt0bl93YWl0X2lkeCsrXSA9IElBQzsKLSAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSA0OiAgICAgICAgICAgICAgICAgICAv KiBJS1MgZXZlbnQgKi8KLSAgICAgICAgICAgICAgY2FzZSA2OiAgICAgICAgICAgICAgICAgICAv KiBMb2dvdXQgKi8KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAoeCA+PSAw KQotICAgICAgICAgICAgICB0bl93YWl0X2J1Zlt0bl93YWl0X2lkeCsrXSA9IHg7Ci0gICAgICAg IH0KLSAgICB9Ci0gICAgcmV0dXJuKDEpOwotfQotCi11bnNpZ25lZCBjaGFyICoKLXRuX2dldF9k aXNwbGF5KCkKLXsKLSAgICBjaGFyICogZGlzcCA9IE5VTEw7Ci0gICAgc3RhdGljIGNoYXIgdG1w bG9jWzI1Nl07Ci0KLSAgICAvKiBNdXN0IGNvbXB1dGUgdGhlIERJU1BMQVkgc3RyaW5nIHdlIGFy ZSBnb2luZyB0byBzZW5kIHRvIHRoZSBob3N0ICovCi0gICAgLyogSWYgb25lIGlzIG5vdCBhc3Np Z25lZCwgZG8gbm90IHNlbmQgYSBzdHJpbmcgdW5sZXNzIHRoZSB1c2VyIGhhcyAqLwotICAgIC8q IGV4cGxpY2l0ZWRseSByZXF1ZXN0ZWQgd2UgdHJ5IHRvIHNlbmQgb25lIHZpYSBYLURpc3BsYXkg TG9jYXRpb24gKi8KLSAgICAvKiBCdXQgZG8gbm90IHNlbmQgYSBzdHJpbmcgYXQgYWxsIGlmIEZP UldBUkRfWCBpcyBpbiB1c2UuICAgICAgICAgICovCi0KLSAgICAvKiBpZiAoIUlTX1RFTE5FVCgp KSByZXR1cm4oMCk7ICovCi0KLSAgICBkZWJ1ZyhGMTEwLCJ0bl9nZXRfZGlzcGxheSgpIG15aXBh ZGRyIixteWlwYWRkciwwKTsKLSNpZmRlZiBDS19FTlZJUk9OTUVOVAotICAgIGRlYnVnKEYxMTAs InRuX2dldF9kaXNwbGF5KCkgdG5fZW52X2Rpc3AiLHRuX2Vudl9kaXNwLDApOwotICAgIGlmICh0 bl9lbnZfZGlzcFswXSkgewotICAgICAgICBpbnQgY29sb24gPSBja2luZGV4KCI6Iix0bl9lbnZf ZGlzcCwwLDAsMSk7Ci0gICAgICAgIGlmICggIWNvbG9uICkgewotICAgICAgICAgICAgY2ttYWtt c2codG1wbG9jLDI1NixteWlwYWRkciwiOiIsdG5fZW52X2Rpc3AsTlVMTCk7Ci0gICAgICAgICAg ICBkaXNwID0gdG1wbG9jOwotICAgICAgICB9IGVsc2UgaWYgKCBja2luZGV4KCJsb2NhbGhvc3Q6 Iix0bl9lbnZfZGlzcCwwLDAsMCkgfHwKLSAgICAgICAgICAgICAgICAgICAgY2tpbmRleCgidW5p eDoiLHRuX2Vudl9kaXNwLDAsMCwwKSB8fAotICAgICAgICAgICAgICAgICAgICBja2luZGV4KCIx MjcuMC4wLjE6Iix0bl9lbnZfZGlzcCwwLDAsMCkgfHwKLSAgICAgICAgICAgICAgICAgICAgIWNr c3RyY21wKCIwOiIsdG5fZW52X2Rpc3AsMiwxKSB8fAotICAgICAgICAgICAgICAgICAgICB0bl9l bnZfZGlzcFswXSA9PSAnOicgKSB7Ci0gICAgICAgICAgICBja21ha21zZyh0bXBsb2MsMjU2LG15 aXBhZGRyLCI6IiwmdG5fZW52X2Rpc3BbY29sb25dLE5VTEwpOwotICAgICAgICAgICAgZGlzcCA9 IHRtcGxvYzsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBkaXNwID0gdG5fZW52X2Rpc3A7 Ci0gICAgfQotICAgIGVsc2UKLSNlbmRpZiAvKiBDS19FTlZJUk9OTUVOVCAqLwotICAgICAgICBp ZiAoVEVMT1BUX01FKFRFTE9QVF9YRElTUExPQykgfHwKLSAgICAgICAgICAgICAgVEVMT1BUX1Uo VEVMT1BUX0ZPUldBUkRfWCkpIHsKLSAgICAgICAgY2ttYWttc2codG1wbG9jLDI1NixteWlwYWRk ciwiOjAuMCIsTlVMTCxOVUxMKTsKLSAgICAgICAgZGlzcCA9IHRtcGxvYzsKLSAgICB9Ci0gICAg ZGVidWcoRjExMCwidG5fZ2V0X2Rpc3BsYXkoKSByZXR1cm5zIixkaXNwLDApOwotICAgIHJldHVy bigoQ0hBUiAqKWRpc3ApOwotfQotCi0jaWZkZWYgQ0tfRk9SV0FSRF9YCi1zdGF0aWMgWGF1dGgg ZmFrZV94YXV0aCA9IHswLDAsTlVMTCwwLE5VTEwsMCxOVUxMLDAsTlVMTH07Ci1zdGF0aWMgWGF1 dGggKnJlYWxfeGF1dGg9TlVMTDsKLQotLyoKLSAqIEF1dGhvcjogIEppbSBGdWx0b24sIE1JVCBY IENvbnNvcnRpdW0KLSAqCi0gKiBmd2R4X3BhcnNlX2Rpc3BsYXluYW1lIC0KLSAqIGRpc3BsYXkg YSBkaXNwbGF5IHN0cmluZyB1cCBpbnRvIGl0cyBjb21wb25lbnQgcGFydHMKLSAqLwotI2lmZGVm IFVOSVgKLSNkZWZpbmUgVU5JWF9DT05ORUNUSU9OICJ1bml4IgotI2RlZmluZSBVTklYX0NPTk5F Q1RJT05fTEVOR1RIIDQKLSNlbmRpZgotCi0vKgotICogcHJpdmF0ZSB1dGlsaXR5IHJvdXRpbmVz Ci0gKi8KLQotc3RhdGljIGludAotI2lmZGVmIENLX0FOU0lDCi1YbXVHZXRIb3N0bmFtZSAoY2hh ciAqYnVmLCBpbnQgbWF4bGVuKQotI2Vsc2UKLVhtdUdldEhvc3RuYW1lIChidWYsIG1heGxlbikK LSAgICBjaGFyICpidWY7Ci0gICAgaW50IG1heGxlbjsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot ewotICAgIGludCBsZW47Ci0KLSNpZmRlZiBORUVEX1VUU05BTUUKLSAgICAvKgotICAgICAqIHNh bWUgaG9zdCBuYW1lIGNyb2NrIGFzIGluIHNlcnZlciBhbmQgeGluaXQuCi0gICAgICovCi0gICAg c3RydWN0IHV0c25hbWUgbmFtZTsKLQotICAgIHVuYW1lICgmbmFtZSk7Ci0gICAgbGVuID0gc3Ry bGVuIChuYW1lLm5vZGVuYW1lKTsKLSAgICBpZiAobGVuID49IG1heGxlbikgbGVuID0gbWF4bGVu IC0gMTsKLSAgICBzdHJuY3B5IChidWYsIG5hbWUubm9kZW5hbWUsIGxlbik7Ci0gICAgYnVmW2xl bl0gPSAnXDAnOwotI2Vsc2UKLSAgICBidWZbMF0gPSAnXDAnOwotICAgICh2b2lkKSBnZXRob3N0 bmFtZSAoYnVmLCBtYXhsZW4pOwotICAgIGJ1ZiBbbWF4bGVuIC0gMV0gPSAnXDAnOwotICAgIGxl biA9IHN0cmxlbihidWYpOwotI2VuZGlmIC8qIGhwdXggKi8KLSAgICByZXR1cm4gbGVuOwotfQot Ci1zdGF0aWMgY2hhciAqCi0jaWZkZWYgQ0tfQU5TSUMKLWNvcHlzdHJpbmcgKGNoYXIgKnNyYywg aW50IGxlbikKLSNlbHNlCi1jb3B5c3RyaW5nIChzcmMsIGxlbikKLSAgICBjaGFyICpzcmM7Ci0g ICAgaW50IGxlbjsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGNoYXIgKmNwOwotCi0g ICAgaWYgKCFzcmMgJiYgbGVuICE9IDApIHJldHVybiBOVUxMOwotICAgIGNwID0gbWFsbG9jIChs ZW4gKyAxKTsKLSAgICBpZiAoY3ApIHsKLSAgICAgICAgaWYgKHNyYykgc3RybmNweSAoY3AsIHNy YywgbGVuKTsKLSAgICAgICAgY3BbbGVuXSA9ICdcMCc7Ci0gICAgfQotICAgIHJldHVybiBjcDsK LX0KLQotc3RhdGljIGNoYXIgKgotI2lmZGVmIENLX0FOU0lDCi1nZXRfbG9jYWxfaG9zdG5hbWUg KGNoYXIgKmJ1ZiwgaW50IG1heGxlbikKLSNlbHNlCi1nZXRfbG9jYWxfaG9zdG5hbWUgKGJ1Ziwg bWF4bGVuKQotICAgIGNoYXIgKmJ1ZjsKLSAgICBpbnQgbWF4bGVuOwotI2VuZGlmCi17Ci0gICAg YnVmWzBdID0gJ1wwJzsKLSAgICAodm9pZCkgWG11R2V0SG9zdG5hbWUgKGJ1ZiwgbWF4bGVuKTsK LSAgICByZXR1cm4gKGJ1ZlswXSA/IGJ1ZiA6IE5VTEwpOwotfQotCi0jaWZuZGVmIFVOSVgKLXN0 YXRpYyBjaGFyICoKLWNvcHlob3N0bmFtZSAoKQotewotICAgIGNoYXIgYnVmWzI1Nl07Ci0KLSAg ICByZXR1cm4gKGdldF9sb2NhbF9ob3N0bmFtZSAoYnVmLCBzaXplb2YgYnVmKSA/Ci0gICAgICAg ICAgICBjb3B5c3RyaW5nIChidWYsIHN0cmxlbiAoYnVmKSkgOiBOVUxMKTsKLX0KLSNlbmRpZgot Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi1md2R4X3BhcnNlX2Rpc3BsYXluYW1lIChjaGFyICpk aXNwbGF5bmFtZSwgaW50ICpmYW1pbHlwLCBjaGFyICoqaG9zdHAsCi0gICAgICAgICAgICAgICAg ICAgICAgICBpbnQgKmRweW51bXAsIGludCAqc2NybnVtcCwgY2hhciAqKnJlc3RwKQotI2Vsc2UK LWZ3ZHhfcGFyc2VfZGlzcGxheW5hbWUgKGRpc3BsYXluYW1lLCBmYW1pbHlwLCBob3N0cCwgZHB5 bnVtcCwgc2NybnVtcCwgcmVzdHApCi0gICAgY2hhciAqZGlzcGxheW5hbWU7Ci0gICAgaW50ICpm YW1pbHlwOyAgICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuICovCi0gICAgY2hhciAqKmhv c3RwOyAgICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuICovCi0gICAgaW50ICpkcHludW1w LCAqc2NybnVtcDsgICAgICAgICAgICAgLyogcmV0dXJuICovCi0gICAgY2hhciAqKnJlc3RwOyAg ICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuICovCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8K LXsKLSAgICBjaGFyICpwdHI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3b3JrIHZhcmlh YmxlcyAqLwotICAgIGludCBsZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdvcmsg dmFyaWFibGUgKi8KLSAgICBpbnQgZmFtaWx5ID0gLTE7ICAgICAgICAgICAgICAgICAgICAvKiB2 YWx1ZSB0byBiZSByZXR1cm5lZCAqLwotICAgIGNoYXIgKmhvc3QgPSBOVUxMOyAgICAgICAgICAg ICAgICAgIC8qIG11c3QgZnJlZSBpZiBzZXQgYW5kIGVycm9yIHJldHVybiAqLwotICAgIGludCBk cHludW0gPSAtMTsgICAgICAgICAgICAgICAgICAgIC8qIHZhbHVlIHRvIGJlIHJldHVybmVkICov Ci0gICAgaW50IHNjcm51bSA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogdmFsdWUgdG8gYmUg cmV0dXJuZWQgKi8KLSAgICBjaGFyICpyZXN0ID0gTlVMTDsgICAgICAgICAgICAgICAgICAvKiBt dXN0IGZyZWUgaWYgc2V0IGFuZCBlcnJvciByZXR1cm4gKi8KLSAgICBpbnQgZG5ldCA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAvKiBpZiAxIHRoZW4gdXNpbmcgREVDbmV0ICovCi0KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGVjayB0aGUgbmFtZSAqLwot ICAgIGlmICghZGlzcGxheW5hbWUgfHwgIWRpc3BsYXluYW1lWzBdKQotICAgICAgICByZXR1cm4g MDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtdXN0IGhhdmUg YXQgbGVhc3QgOm51bWJlciAqLwotICAgIHB0ciA9IChjaGFyICopc3RyY2hyKGRpc3BsYXluYW1l LCAnOicpOwotICAgIGlmICghcHRyIHx8ICFwdHJbMV0pIHJldHVybiAwOwotICAgIGlmIChwdHJb MV0gPT0gJzonKSB7Ci0gICAgICAgIGlmIChwdHJbMl0gPT0gJ1wwJykgcmV0dXJuIDA7Ci0gICAg ICAgIGRuZXQgPSAxOwotICAgIH0KLQotICAgIC8qCi0gICAgICogZ2V0IHRoZSBob3N0IHN0cmlu ZzsgaWYgbm9uZSBpcyBnaXZlbiwgdXNlIHRoZSBtb3N0IGVmZmllY2llbnQgcGF0aAotICAgICAq LwotCi0gICAgbGVuID0gKHB0ciAtIGRpc3BsYXluYW1lKTsgIC8qIGxlbmd0aCBvZiBob3N0IG5h bWUgKi8KLSAgICBpZiAobGVuID09IDApIHsgICAgICAgICAgICAgICAgICAgICAvKiBjaG9vc2Ug bW9zdCBlZmZpY2llbnQgcGF0aCAqLwotI2lmZGVmIFVOSVgKLSAgICAgICAgaG9zdCA9IGNvcHlz dHJpbmcgKFVOSVhfQ09OTkVDVElPTiwgVU5JWF9DT05ORUNUSU9OX0xFTkdUSCk7Ci0gICAgICAg IGZhbWlseSA9IEZhbWlseUxvY2FsOwotI2Vsc2UKLSAgICAgICAgaWYgKGRuZXQpIHsKLSAgICAg ICAgICAgIGhvc3QgPSBjb3B5c3RyaW5nICgiMCIsIDEpOwotICAgICAgICAgICAgZmFtaWx5ID0g RmFtaWx5REVDbmV0OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaG9zdCA9IGNvcHlo b3N0bmFtZSAoKTsKLSAgICAgICAgICAgIGZhbWlseSA9IEZhbWlseUludGVybmV0OwotICAgICAg ICB9Ci0jZW5kaWYKLSAgICB9IGVsc2UgewotICAgICAgICBob3N0ID0gY29weXN0cmluZyAoZGlz cGxheW5hbWUsIGxlbik7Ci0gICAgICAgIGlmIChkbmV0KSB7Ci0gICAgICAgICAgICBmYW1pbHkg PSBkbmV0OwotICAgICAgICB9IGVsc2UgewotI2lmZGVmIFVOSVgKLSAgICAgICAgICAgIGlmICho b3N0ICYmIHN0cmNtcCAoaG9zdCwgVU5JWF9DT05ORUNUSU9OKSA9PSAwKQotICAgICAgICAgICAg ICBmYW1pbHkgPSBGYW1pbHlMb2NhbDsKLSAgICAgICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAg ICAgICAgICBmYW1pbHkgPSBGYW1pbHlJbnRlcm5ldDsKLSAgICAgICAgfQotICAgIH0KLQotICAg IGlmICghaG9zdCkgcmV0dXJuIDA7Ci0KLQotICAgIC8qCi0gICAgICogZ2V0IHRoZSBkaXNwbGF5 IG51bWJlcjsgd2Uga25vdyB0aGF0IHRoZXJlIGlzIHNvbWV0aGluZyBhZnRlciB0aGUKLSAgICAg KiBjb2xvbiAob3IgY29sb25zKSBmcm9tIGFib3ZlLiAgbm90ZSB0aGF0IGhvc3QgaXMgbm93IHNl dCBhbmQgbXVzdAotICAgICAqIGJlIGZyZWVkIGlmIHRoZXJlIGlzIGFuIGVycm9yLgotICAgICAq LwotCi0gICAgaWYgKGRuZXQpIHB0cisrOyAgICAgICAgICAgICAgICAgICAgLyogc2tpcCB0aGUg ZXh0cmEgREVDbmV0IGNvbG9uICovCi0gICAgcHRyKys7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogbW92ZSB0byBzdGFydCBvZiBkaXNwbGF5IG51bSAqLwotICAgIHsKLSAgICAgICAg cmVnaXN0ZXIgY2hhciAqY3A7Ci0KLSAgICAgICAgZm9yIChjcCA9IHB0cjsgKmNwICYmIGlzYXNj aWkoKmNwKSAmJiBpc2RpZ2l0KCpjcCk7IGNwKyspIDsKLSAgICAgICAgbGVuID0gKGNwIC0gcHRy KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGVjayBwcmVz ZW50IGFuZCB2YWxpZCBmb2xsb3cgKi8KLSAgICAgICAgaWYgKGxlbiA9PSAwIHx8ICgqY3AgJiYg KmNwICE9ICcuJykpIHsKLSAgICAgICAgICAgIGZyZWUgKGhvc3QpOwotICAgICAgICAgICAgcmV0 dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICBkcHludW0gPSBhdG9pIChwdHIpOyAgICAgICAg ICAgIC8qIGl0IHdpbGwgaGFuZGxlIG51bS4gYXMgd2VsbCAqLwotICAgICAgICBwdHIgPSBjcDsK LSAgICB9Ci0KLSAgICAvKgotICAgICAqIG5vdyBnZXQgc2NyZWVuIG51bWJlciBpZiBnaXZlbjsg cHRyIG1heSBwb2ludCB0byBudWwgYXQgdGhpcyBwb2ludAotICAgICAqLwotICAgIGlmIChwdHJb MF0gPT0gJy4nKSB7Ci0gICAgICAgIHJlZ2lzdGVyIGNoYXIgKmNwOwotCi0gICAgICAgIHB0cisr OwotICAgICAgICBmb3IgKGNwID0gcHRyOyAqY3AgJiYgaXNhc2NpaSgqY3ApICYmIGlzZGlnaXQo KmNwKTsgY3ArKykgOwotICAgICAgICBsZW4gPSAoY3AgLSBwdHIpOwotICAgICAgICBpZiAobGVu ID09IDAgfHwgKCpjcCAmJiAqY3AgIT0gJy4nKSkgeyAgLyogYWxsIHByb3AgbmFtZSAqLwotICAg ICAgICAgICAgZnJlZSAoaG9zdCk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQot Ci0gICAgICAgIHNjcm51bSA9IGF0b2kgKHB0cik7ICAgICAgICAgICAgLyogaXQgd2lsbCBoYW5k bGUgbnVtLiBhcyB3ZWxsICovCi0gICAgICAgIHB0ciA9IGNwOwotICAgIH0KLQotICAgIC8qCi0g ICAgICogYW5kIGZpbmFsbHksIGdldCBhbnkgYWRkaXRpb25hbCBzdHVmZiB0aGF0IG1pZ2h0IGJl IGZvbGxvd2luZyB0aGUKLSAgICAgKiB0aGUgc2NyZWVuIG51bWJlcjsgcHRyIG11c3QgcG9pbnQg dG8gYSBwZXJpb2QgaWYgdGhlcmUgaXMgYW55dGhpbmcKLSAgICAgKi8KLQotICAgIGlmIChwdHJb MF0gPT0gJy4nKSB7Ci0gICAgICAgIHB0cisrOwotICAgICAgICBsZW4gPSBzdHJsZW4gKHB0cik7 Ci0gICAgICAgIGlmIChsZW4gPiAwKSB7Ci0gICAgICAgICAgICByZXN0ID0gY29weXN0cmluZyAo cHRyLCBsZW4pOwotICAgICAgICAgICAgaWYgKCFyZXN0KSB7Ci0gICAgICAgICAgICAgICAgZnJl ZSAoaG9zdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgIH0KLSAgICB9Ci0KLSAgICAvKgotICAgICAqIGFuZCB3ZSBhcmUgZG9uZSEKLSAgICAgKi8K LQotICAgIGlmICggZmFtaWx5cCApCi0gICAgICAgICpmYW1pbHlwID0gZmFtaWx5OwotICAgIGlm ICggaG9zdHAgKQotICAgICAgICAqaG9zdHAgPSBob3N0OwotICAgIGVsc2UKLSAgICAgICAgZnJl ZShob3N0KTsKLSAgICBpZiAoIGRweW51bXAgKQotICAgICAgICAqZHB5bnVtcCA9IGRweW51bTsK LSAgICBpZiAoIHNjcm51bXAgKQotICAgICAgICAqc2NybnVtcCA9IHNjcm51bTsKLSAgICBpZiAo IHJlc3RwICkKLSAgICAgICAgKnJlc3RwID0gcmVzdDsKLSAgICBlbHNlCi0gICAgICAgIGZyZWUo cmVzdCk7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWZ3ZHhf dG5fc2IoIHVuc2lnbmVkIGNoYXIgKiBzYiwgaW50IG4gKQotI2Vsc2UKLWZ3ZHhfdG5fc2IoIHNi LCBuICkgdW5zaWduZWQgY2hhciAqIHNiOyBpbnQgbjsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot ewotICAgIHVuc2lnbmVkIHNob3J0IGhjaGFubmVsLCBuY2hhbm5lbDsKLSAgICB1bnNpZ25lZCBj aGFyICogcDsKLSAgICBpbnQgaTsKLSAgICBpbnQgcmMgPSAtMTsKLQotICAgIC8qIGNoZWNrIHRv IGVuc3VyZSB3ZSBoYXZlIG5lZ290aWF0ZWQgRm9yd2FyZCBYICovCi0gICAgaWYgKCBzc3RlbG5l dCAmJiAhVEVMT1BUX01FKFRFTE9QVF9GT1JXQVJEX1gpIHx8Ci0gICAgICAgICAhc3N0ZWxuZXQg JiYgIVRFTE9QVF9VKFRFTE9QVF9GT1JXQVJEX1gpICkgewotICAgICAgICBkZWJ1ZyhGMTAwLCJm d2R4X3RuX3NiKCkgbm90IG5lZ290aWF0ZWQiLCIiLDApOwotICAgICAgICByZXR1cm4oMCk7Ci0g ICAgfQotCi0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExT KS5zdGFydF90bHMubWVfZm9sbG93cykgewotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2Vu ZGlmIC8qIENLX1NTTCAqLwotCi0gICAgc3dpdGNoIChzYlswXSkgewotICAgIGNhc2UgRldEWF9T Q1JFRU46Ci0gICAgICAgIGlmIChzc3RlbG5ldCAmJiBuID09IDQpCi0gICAgICAgICAgICByYyA9 IGZ3ZHhfY3JlYXRlX2xpc3Rlbl9zb2NrZXQoc2JbMV0pOwotICAgICAgICBicmVhazsKLSAgICBj YXNlIEZXRFhfT1BFTjoKLSAgICAgICAgaWYgKCAhc3N0ZWxuZXQgJiYgbiA+PSA1ICkgewotICAg ICAgICAgICAgcCA9ICh1bnNpZ25lZCBjaGFyICopICZuY2hhbm5lbDsKLSAgICAgICAgICAgIGkg PSAxOwotICAgICAgICAgICAgLyogSUFDIHF1b3RpbmcgaGFzIGJlZW4gc3RyaXBwZWQgaW4gdG5f c2IoKSAqLwotICAgICAgICAgICAgcFswXSA9IHNiW2krK107Ci0gICAgICAgICAgICBwWzFdID0g c2JbaSsrXTsKLSAgICAgICAgICAgIGhjaGFubmVsID0gbnRvaHMobmNoYW5uZWwpOwotICAgICAg ICAgICAgcmMgPSBmd2R4X29wZW5fY2xpZW50X2NoYW5uZWwoaGNoYW5uZWwpOwotICAgICAgICAg ICAgaWYgKCByYyA8IDAgKSB7Ci0gICAgICAgICAgICAgICAgLyogRmFpbGVkOyBTZW5kIENMT1NF IGNoYW5uZWwgKi8KLSAgICAgICAgICAgICAgICBmd2R4X3NlbmRfY2xvc2UoaGNoYW5uZWwpOwot ICAgICAgICAgICAgICAgIHJjID0gMDsgICAgICAgICAvKiBEbyBub3QgY29uc2lkZXIgdGhpcyB0 byBiZSBhIHRlbG5ldCBlcnJvciAqLwotICAgICAgICAgICAgfQotI2lmZGVmIE5UCi0gICAgICAg ICAgICBpZiAoICFURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94LnRocmVhZF9z dGFydGVkICkgewotICAgICAgICAgICAgICAgIGNrVGhyZWFkQmVnaW4oICZmd2R4X3RocmVhZCwz MjY1NSwgMCwgRkFMU0UsIDAgKSA7Ci0gICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9G T1JXQVJEX1gpLmZvcndhcmRfeC50aHJlYWRfc3RhcnRlZCA9IDE7Ci0gICAgICAgICAgICB9Ci0j ZW5kaWYgLyogTlQgKi8KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZXRFhf Q0xPU0U6Ci0gICAgICAgIHAgPSAodW5zaWduZWQgY2hhciAqKSAmbmNoYW5uZWw7Ci0gICAgICAg IGkgPSAxOwotICAgICAgICAvKiBJQUMgcXVvdGluZyBoYXMgYmVlbiBzdHJpcHBlZCBpbiB0bl9z YigpICovCi0gICAgICAgIHBbMF0gPSBzYltpKytdOwotICAgICAgICBwWzFdID0gc2JbaSsrXTsK LSAgICAgICAgaGNoYW5uZWwgPSBudG9ocyhuY2hhbm5lbCk7Ci0gICAgICAgIGZ3ZHhfY2xvc2Vf Y2hhbm5lbChoY2hhbm5lbCk7Ci0gICAgICAgIHJjID0gMDsgLyogbm8gZXJyb3JzIHdoZW4gY2xv c2luZyAqLwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZXRFhfREFUQToKLSAgICAgICAgcCA9 ICh1bnNpZ25lZCBjaGFyICopICZuY2hhbm5lbDsKLSAgICAgICAgaSA9IDE7Ci0gICAgICAgIC8q IElBQyBxdW90aW5nIGhhcyBiZWVuIHN0cmlwcGVkIGluIHRuX3NiKCkgKi8KLSAgICAgICAgcFsw XSA9IHNiW2krK107Ci0gICAgICAgIHBbMV0gPSBzYltpKytdOwotICAgICAgICBoY2hhbm5lbCA9 IG50b2hzKG5jaGFubmVsKTsKLSAgICAgICAgcmMgPSBmd2R4X3NlbmRfeGF1dGhfdG9feHNlcnZl cihoY2hhbm5lbCwoQ0hBUiAqKSZzYlszXSxuLTUpOwotICAgICAgICBpZiAoIHJjID49IDAgJiYg bi01LXJjID4gMCkgewotICAgICAgICAgICAgcmMgPSBmd2R4X3dyaXRlX2RhdGFfdG9fY2hhbm5l bChoY2hhbm5lbCwoY2hhciAqKSZzYlszK3JjXSxuLTUtcmMpOwotICAgICAgICAgICAgaWYgKCBy YyA8IDAgKSB7Ci0gICAgICAgICAgICAgICAgLyogRmFpbGVkOyBTZW5kIENMT1NFIGNoYW5uZWwg Ki8KLSAgICAgICAgICAgICAgICByYyA9IGZ3ZHhfc2VuZF9jbG9zZShoY2hhbm5lbCk7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGV0RYX09QVElP TlM6Ci0gICAgICAgIGlmICggc3N0ZWxuZXQgKSB7Ci0jaWZuZGVmIEZXRFhfU0VSVkVSCi0gICAg ICAgICAgICByYyA9IDA7Ci0jZWxzZQotICAgICAgICAgICAgcmMgPSBmd2R4X3NlcnZlcl9hY2Nl cHRfb3B0aW9ucygoY2hhciopJnNiWzJdLG4tMyk7Ci0jZW5kaWYKLSAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgIHJjID0gZndkeF9jbGllbnRfcmVwbHlfb3B0aW9ucygoY2hhciAqKSZzYlsy XSxuLTMpOwotICAgICAgICAgICAgaWYgKCByYyA+PSAwICkgewotICAgICAgICAgICAgICAgIHJj ID0gdG5fc25kZndkeCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFr OwotICAgIGNhc2UgRldEWF9PUFRfREFUQToKLSAgICAgICAgc3dpdGNoICggc2JbMV0gKSB7Ci0g ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByYyA9IDA7ICAgICAgICAgICAgIC8qIHdlIGRv bid0IHJlY29nbml6ZSwgbm90IGFuIGVycm9yICovCi0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7 Ci0KLSAgICBjYXNlIEZXRFhfWE9GRjoKLSAgICBjYXNlIEZXRFhfWE9OOgotICAgICAgICBpZiAo ICFzc3RlbG5ldCApIHsKLSAgICAgICAgICAgIHAgPSAodW5zaWduZWQgY2hhciAqKSAmbmNoYW5u ZWw7Ci0gICAgICAgICAgICBpID0gMTsKLSAgICAgICAgICAgIC8qIElBQyBxdW90aW5nIGhhcyBi ZWVuIHN0cmlwcGVkIGluIHRuX3NiKCkgKi8KLSAgICAgICAgICAgIHBbMF0gPSBzYltpKytdOwot ICAgICAgICAgICAgcFsxXSA9IHNiW2krK107Ci0gICAgICAgICAgICBoY2hhbm5lbCA9IG50b2hz KG5jaGFubmVsKTsKLSAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3 YXJkX3guY2hhbm5lbFtoY2hhbm5lbF0uc3VzcGVuZCA9Ci0gICAgICAgICAgICAgICAgKHNiWzBd ID09IEZXRFhfWE9GRik7Ci0gICAgICAgICAgICByYyA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAg YnJlYWs7Ci0gICAgfQotICAgIHJldHVybihyYyA8IDAgPyAtMSA6IDApOwotfQotCi1pbnQKLSNp ZmRlZiBDS19BTlNJQwotZndkeF9zZW5kX3hhdXRoX3RvX3hzZXJ2ZXIoaW50IGNoYW5uZWwsIHVu c2lnbmVkIGNoYXIgKiBkYXRhLCBpbnQgbGVuKQotI2Vsc2UKLWZ3ZHhfc2VuZF94YXV0aF90b194 c2VydmVyKGNoYW5uZWwsIGRhdGEsIGxlbikKLSAgICBpbnQgY2hhbm5lbDsgdW5zaWduZWQgY2hh ciAqIGRhdGE7IGludCBsZW47Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpbnQgbmFt ZV9sZW4sIGRhdGFfbGVuLCBpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IE1BWEZXRFggOyBpKysp IHsKLSAgICAgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hh bm5lbFtpXS5pZCA9PSBjaGFubmVsKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlm ICggaSA9PSBNQVhGV0RYICkKLSAgICAgICAgZ290byBhdXRoX2VycjsKLQotICAgIGlmICghVEVM T1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW2ldLm5lZWRfdG9fc2Vu ZF94YXV0aCkKLSAgICAgICAgcmV0dXJuKDApOwotCi0gICAgaWYgKGxlbiA8IDEyKQotICAgICAg ICBnb3RvIGF1dGhfZXJyOwotCi0gICAgLyogUGFyc2UgdGhlIGxlbmd0aHMgb2YgdmFyaWFibGUt bGVuZ3RoIGZpZWxkcy4gKi8KLSAgICBpZiAoZGF0YVswXSA9PSAweDQyKSB7ICAgICAgICAgICAg ICAvKiBieXRlIG9yZGVyIE1TQiBmaXJzdC4gKi8KLSAgICAgICAgLyogWGF1dGggcGFja2V0cyBh cHBlYXIgdG8gYWx3YXlzIGhhdmUgdGhpcyBmb3JtYXQgKi8KLSAgICAgICAgaWYgKCBkYXRhWzFd ICE9IDB4MDAgfHwKLSAgICAgICAgICAgICBkYXRhWzJdICE9IDB4MDAgfHwKLSAgICAgICAgICAg ICBkYXRhWzNdICE9IDB4MEIgfHwKLSAgICAgICAgICAgICBkYXRhWzRdICE9IDB4MDAgfHwKLSAg ICAgICAgICAgICBkYXRhWzVdICE9IDB4MDAgKQotICAgICAgICAgICAgZ290byBhdXRoX2VycjsK LQotICAgICAgICBuYW1lX2xlbiA9IChkYXRhWzZdIDw8IDgpICsgZGF0YVs3XTsKLSAgICAgICAg ZGF0YV9sZW4gPSAoZGF0YVs4XSA8PCA4KSArIGRhdGFbOV07Ci0gICAgfSBlbHNlIGlmIChkYXRh WzBdID09IDB4NmMpIHsgICAgICAgLyogQnl0ZSBvcmRlciBMU0IgZmlyc3QuICovCi0gICAgICAg IC8qIFhhdXRoIHBhY2tldHMgYXBwZWFyIHRvIGFsd2F5cyBoYXZlIHRoaXMgZm9ybWF0ICovCi0g ICAgICAgIGlmICggZGF0YVsxXSAhPSAweDAwIHx8Ci0gICAgICAgICAgICAgZGF0YVsyXSAhPSAw eDBCIHx8Ci0gICAgICAgICAgICAgZGF0YVszXSAhPSAweDAwIHx8Ci0gICAgICAgICAgICAgZGF0 YVs0XSAhPSAweDAwIHx8Ci0gICAgICAgICAgICAgZGF0YVs1XSAhPSAweDAwICkKLSAgICAgICAg ICAgIGdvdG8gYXV0aF9lcnI7Ci0KLSAgICAgICAgbmFtZV9sZW4gPSBkYXRhWzZdICsgKGRhdGFb N10gPDwgOCk7Ci0gICAgICAgIGRhdGFfbGVuID0gZGF0YVs4XSArIChkYXRhWzldIDw8IDgpOwot ICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIGJhZCBieXRlIG9yZGVyIGJ5dGUgKi8KLSAgICAgICAg Z290byBhdXRoX2VycjsKLSAgICB9Ci0KLSAgICAvKiBDaGVjayBpZiB0aGUgd2hvbGUgcGFja2V0 IGlzIGluIGJ1ZmZlci4gKi8KLSAgICBpZiAobGVuIDwgMTIgKyAoKG5hbWVfbGVuICsgMykgJiB+ MykgKyAoKGRhdGFfbGVuICsgMykgJiB+MykpCi0gICAgICAgIGdvdG8gYXV0aF9lcnI7Ci0gICAg LyogSWYgdGhlIFRlbG5ldCBTZXJ2ZXIgYWxsb3dzIGEgcmVhbCBYYXV0aCBtZXNzYWdlIHRvIGJl IHNlbnQgKi8KLSAgICAvKiBUaGVuIGxldCB0aGUgbWVzc2FnZSBiZSBwcm9jZXNzZWQgYnkgdGhl IFhzZXJ2ZXIuICAgICAgICAgICAqLwotICAgIGlmIChuYW1lX2xlbiArIGRhdGFfbGVuID4gMCkg ewotICAgICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFtp XS5uZWVkX3RvX3NlbmRfeGF1dGggPSAwOwotICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0gICAg ZWxzZQotICAgIC8qIElmIGFuIGVtcHR5IFhhdXRoIG1lc3NhZ2Ugd2FzIHJlY2VpdmVkLiAgV2Ug YXJlIGdvaW5nIHRvICAgKi8KLSAgICAvKiBzZW5kIG91ciBvd24gWGF1dGggbWVzc2FnZSB1c2lu ZyB0aGUgcmVhbCBYYXV0aCBkYXRhLiAgQW5kICovCi0gICAgLyogdGhlbiBzZW5kIGFueSBvdGhl ciBkYXRhIGluIHRoZSBidWZmZXIuICAgICAgICAgICAgICAgICAgICAqLwotICAgIHsKLSAgICAg ICAgaW50IGMsIGVyciwgZHB5bnVtLCBzY3JudW0sIGZhbWlseSwgc2JfbGVuOwotICAgICAgICBj aGFyICpkaXNwbGF5LCAqaG9zdCA9IE5VTEwsICpyZXN0ID0gTlVMTDsKLSAgICAgICAgdW5zaWdu ZWQgY2hhciAqc2IsICpwOwotCi0gICAgICAgIC8qIHBhcnNlIHRoZSBsb2NhbCBESVNQTEFZIGVu diB2YXIgKi8KLSAgICAgICAgZGlzcGxheSA9IGdldGVudigiRElTUExBWSIpOwotICAgICAgICBp ZiAoICFkaXNwbGF5ICkKLSAgICAgICAgICAgIGRpc3BsYXkgPSAiMTI3LjAuMC4xOjAuMCI7Ci0K LSAgICAgICAgaWYgKGZ3ZHhfcGFyc2VfZGlzcGxheW5hbWUoZGlzcGxheSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJmZhbWlseSwgJmhvc3QsICZkcHludW0sICZzY3JudW0s ICZyZXN0KSkgewotICAgICAgICAgICAgY2hhciAqIGRpc3Bfbm8gPSBja2l0b2EoZHB5bnVtKTsg ICAgLyogc2hvdWxkIGJlIHVuc2lnbmVkICovCi0gICAgICAgICAgICBpZiAoZmFtaWx5ID09IEZh bWlseUxvY2FsKSB7Ci0gICAgICAgICAgICAgICAgLyogY2FsbCB3aXRoIGFkZHJlc3MgPSAiPGxv Y2FsIGhvc3QgbmFtZT4iICovCi0gICAgICAgICAgICAgICAgY2hhciBhZGRyZXNzWzMwMF0gPSAi bG9jYWxob3N0IjsKLSAgICAgICAgICAgICAgICBnZXRob3N0bmFtZShhZGRyZXNzLCBzaXplb2Yo YWRkcmVzcykgLSAxKTsKLSAgICAgICAgICAgICAgICByZWFsX3hhdXRoID0gWGF1R2V0QXV0aEJ5 QWRkcihmYW1pbHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RybGVuKGFkZHJlc3MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGFkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RybGVuKGRpc3Bfbm8pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRpc3Bfbm8sIDAsIE5VTEwpOwotICAgICAgICAgICAgfQotICAgICAg ICAgICAgZWxzZSBpZiAoZmFtaWx5ID09IEZhbWlseUludGVybmV0KSB7Ci0gICAgICAgICAgICAg ICAgLyogY2FsbCB3aXRoIGFkZHJlc3MgPSA0IGJ5dGVzIG51bWVyaWMgaXAgYWRkciAoTVNCKSAq LwotICAgICAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50ICpoaTsKLSAgICAgICAgICAgICAgICBp ZiAoaGkgPSBnZXRob3N0YnluYW1lKGhvc3QpKQotICAgICAgICAgICAgICAgICAgICByZWFsX3hh dXRoID0gWGF1R2V0QXV0aEJ5QWRkcihmYW1pbHksIDQsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpLT5oX2FkZHIsIHN0cmxlbihkaXNwX25vKSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcF9u bywgMCwgTlVMTCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGhvc3Qp IGZyZWUoaG9zdCk7Ci0gICAgICAgIGlmIChyZXN0KSBmcmVlKHJlc3QpOwotICAgICAgICBpZiAo IXJlYWxfeGF1dGgpIHsKLSAgICBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94 LmNoYW5uZWxbaV0ubmVlZF90b19zZW5kX3hhdXRoID0gMDsKLSAgICAgICAgICAgIHJldHVybigw KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghc3RybmNtcChyZWFsX3hhdXRoLT5uYW1lLAot ICAgICAgICAgICAgICAgICAgICAgIk1JVC1NQUdJQy1DT09LSUUtMSIsCi0gICAgICAgICAgICAg ICAgICAgICByZWFsX3hhdXRoLT5uYW1lX2xlbmd0aCkpIHsKLSAgICAgICAgICAgIGNoYXIgbXNn WzY0XTsKLQotICAgICAgICAgICAgbmFtZV9sZW4gPSByZWFsX3hhdXRoLT5uYW1lX2xlbmd0aDsK LSAgICAgICAgICAgIGRhdGFfbGVuID0gMTY7Ci0KLSAgICAgICAgICAgIGlmICggZGF0YVswXSA9 PSAweDQyICkgewotICAgICAgICAgICAgICAgIG1zZ1swXSA9IDB4NDI7IC8qIE1TQiBvcmRlciAq LwotICAgICAgICAgICAgICAgIG1zZ1sxXSA9IG1zZ1syXSA9IDA7Ci0gICAgICAgICAgICAgICAg bXNnWzNdID0gMHgwQjsKLSAgICAgICAgICAgICAgICBtc2dbNF0gPSBtc2dbNV0gPSAwOwotICAg ICAgICAgICAgICAgIG1zZ1s2XSA9IChuYW1lX2xlbiA+PiA4KTsKLSAgICAgICAgICAgICAgICBt c2dbN10gPSAobmFtZV9sZW4gJiAweEZGKTsKLSAgICAgICAgICAgICAgICBtc2dbOF0gPSAoZGF0 YV9sZW4gPj4gOCk7Ci0gICAgICAgICAgICAgICAgbXNnWzldID0gKGRhdGFfbGVuICYgMHhGRik7 Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1zZ1swXSA9IDB4NmM7IC8q IExTQiBvcmRlciAqLwotICAgICAgICAgICAgICAgIG1zZ1sxXSA9IDA7Ci0gICAgICAgICAgICAg ICAgbXNnWzJdID0gMHgwQjsKLSAgICAgICAgICAgICAgICBtc2dbM10gPSBtc2dbNF0gPSBtc2db NV0gPSAwOwotICAgICAgICAgICAgICAgIG1zZ1s2XSA9IChuYW1lX2xlbiAmIDB4RkYpOwotICAg ICAgICAgICAgICAgIG1zZ1s3XSA9IChuYW1lX2xlbiA+PiA4KTsKLSAgICAgICAgICAgICAgICBt c2dbOF0gPSAoZGF0YV9sZW4gJiAweEZGKTsKLSAgICAgICAgICAgICAgICBtc2dbOV0gPSAoZGF0 YV9sZW4gPj4gOCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtc2dbMTBdID0gbXNnWzEx XSA9IDA7Ci0gICAgICAgICAgICBtZW1jcHkoJm1zZ1sxMl0scmVhbF94YXV0aC0+bmFtZSwxOCk7 Ci0gICAgICAgICAgICBtc2dbMzBdID0gbXNnWzMxXSA9IDA7Ci0gICAgICAgICAgICBtZW1jcHko Jm1zZ1szMl0scmVhbF94YXV0aC0+ZGF0YSwxNik7Ci0KLSAgICAgICAgICAgIGlmIChmd2R4X3dy aXRlX2RhdGFfdG9fY2hhbm5lbChjaGFubmVsLChjaGFyICopbXNnLDQ4KSA8IDApIHsKLSAgVEVM T1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW2ldLm5lZWRfdG9fc2Vu ZF94YXV0aCA9IDA7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgIH0g ZWxzZSB7Ci0gIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFtp XS5uZWVkX3RvX3NlbmRfeGF1dGggPSAwOwotICAgICAgICAgICAgICAgIHJldHVybigxMik7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gIFRFTE9QVF9TQihURUxPUFRfRk9SV0FS RF9YKS5mb3J3YXJkX3guY2hhbm5lbFtpXS5uZWVkX3RvX3NlbmRfeGF1dGggPSAwOwotICAgICAg ICAgICAgcmV0dXJuKDApOyAgICAgICAgLyogd2UgZG8gbm90IGtub3cgaG93IHRvIGhhbmRsZSB0 aGlzIHR5cGUgeWV0ICovCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgYXV0aF9lcnI6Ci0gICAgICAg IGRlYnVnKEYxMDAsImZ3ZHhfc2VuZF94YXV0aF90b194c2VydmVyIGVycm9yIiwiIiwwKTsKLSAg ICByZXR1cm4oLTEpOwotfQotCi0KLSNpZmRlZiBDT01NRU5UCi1pbnQKLSNpZmRlZiBDS19BTlNJ QwotZndkeF9hdXRob3JpemVfY2hhbm5lbChpbnQgY2hhbm5lbCwgdW5zaWduZWQgY2hhciAqIGRh dGEsIGludCBsZW4pCi0jZWxzZQotZndkeF9hdXRob3JpemVfY2hhbm5lbChjaGFubmVsLCBkYXRh LCBsZW4pCi0gICAgaW50IGNoYW5uZWw7IHVuc2lnbmVkIGNoYXIgKiBkYXRhOyBpbnQgbGVuOwot I2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgLyogWFhYIG1heWJlIHdlIHNob3VsZCBoYXZl IHNvbWUgcmV0cnkgaGFuZGxpbmcgaWYgbm90IHRoZSB3aG9sZSBmaXJzdAotICAgICogYXV0aG9y aXphdGlvbiBwYWNrZXQgYXJyaXZlcyBjb21wbGV0ZQotICAgICovCi0gICAgaWYgKCAhVEVMT1BU X1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW2NoYW5uZWxdLmF1dGhvcml6 ZWQgKSB7Ci0gICAgICAgIGludCBuYW1lX2xlbiwgZGF0YV9sZW47Ci0KLSAgICAgICAgaWYgKGxl biA8IDEyKQotICAgICAgICAgICAgZ290byBhdXRoX2VycjsKLQotICAgICAgICAvKiBQYXJzZSB0 aGUgbGVuZ3RocyBvZiB2YXJpYWJsZS1sZW5ndGggZmllbGRzLiAqLwotICAgICAgICBpZiAoZGF0 YVswXSA9PSAweDQyKSB7ICAgICAgICAgIC8qIGJ5dGUgb3JkZXIgTVNCIGZpcnN0LiAqLwotICAg ICAgICAgICAgLyogWGF1dGggcGFja2V0cyBhcHBlYXIgdG8gYWx3YXlzIGhhdmUgdGhpcyBmb3Jt YXQgKi8KLSAgICAgICAgICAgIGlmICggZGF0YVsxXSAhPSAweDAwIHx8Ci0gICAgICAgICAgICAg ICAgIGRhdGFbMl0gIT0gMHgwMCB8fAotICAgICAgICAgICAgICAgICBkYXRhWzNdICE9IDB4MEIg fHwKLSAgICAgICAgICAgICAgICAgZGF0YVs0XSAhPSAweDAwIHx8Ci0gICAgICAgICAgICAgICAg IGRhdGFbNV0gIT0gMHgwMCApCi0gICAgICAgICAgICAgICAgZ290byBhdXRoX2VycjsKLQotICAg ICAgICAgICAgbmFtZV9sZW4gPSAoZGF0YVs2XSA8PCA4KSArIGRhdGFbN107Ci0gICAgICAgICAg ICBkYXRhX2xlbiA9IChkYXRhWzhdIDw8IDgpICsgZGF0YVs5XTsKLSAgICAgICAgfSBlbHNlIGlm IChkYXRhWzBdID09IDB4NmMpIHsgICAvKiBCeXRlIG9yZGVyIExTQiBmaXJzdC4gKi8KLSAgICAg ICAgICAgIC8qIFhhdXRoIHBhY2tldHMgYXBwZWFyIHRvIGFsd2F5cyBoYXZlIHRoaXMgZm9ybWF0 ICovCi0gICAgICAgICAgICBpZiAoIGRhdGFbMV0gIT0gMHgwMCB8fAotICAgICAgICAgICAgICAg ICBkYXRhWzJdICE9IDB4MEIgfHwKLSAgICAgICAgICAgICAgICAgZGF0YVszXSAhPSAweDAwIHx8 Ci0gICAgICAgICAgICAgICAgIGRhdGFbNF0gIT0gMHgwMCB8fAotICAgICAgICAgICAgICAgICBk YXRhWzVdICE9IDB4MDAgKQotICAgICAgICAgICAgICAgIGdvdG8gYXV0aF9lcnI7Ci0KLSAgICAg ICAgICAgIG5hbWVfbGVuID0gZGF0YVs2XSArIChkYXRhWzddIDw8IDgpOwotICAgICAgICAgICAg ZGF0YV9sZW4gPSBkYXRhWzhdICsgKGRhdGFbOV0gPDwgOCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g ICAgICAgICAgICAvKiBiYWQgYnl0ZSBvcmRlciBieXRlICovCi0gICAgICAgICAgICBnb3RvIGF1 dGhfZXJyOwotICAgICAgICB9Ci0gICAgICAgIC8qIENoZWNrIGlmIGF1dGhlbnRpY2F0aW9uIHBy b3RvY29sIG1hdGNoZXMuICovCi0gICAgICAgIGlmIChuYW1lX2xlbiAhPSBmYWtlX3hhdXRoLm5h bWVfbGVuZ3RoIHx8Ci0gICAgICAgICAgICAgbWVtY21wKGRhdGEgKyAxMiwgZmFrZV94YXV0aC5u YW1lLCBuYW1lX2xlbikgIT0gMCkgewotICAgICAgICAgICAgLyogY29ubmVjdGlvbiB1c2VzIGRp ZmZlcmVudCBhdXRoZW50aWNhdGlvbiBwcm90b2NvbCAqLwotICAgICAgICAgICAgZ290byBhdXRo X2VycjsKLSAgICAgICAgfQotICAgICAgICAvKiBDaGVjayBpZiBhdXRoZW50aWNhdGlvbiBkYXRh IG1hdGNoZXMgb3VyIGZha2UgZGF0YS4gKi8KLSAgICAgICAgaWYgKGRhdGFfbGVuICE9IGZha2Vf eGF1dGguZGF0YV9sZW5ndGggfHwKLSAgICAgICAgICAgICBtZW1jbXAoZGF0YSArIDEyICsgKChu YW1lX2xlbiArIDMpICYgfjMpLAotICAgICAgICAgICAgICAgICAgICAgZmFrZV94YXV0aC5kYXRh LCBmYWtlX3hhdXRoLmRhdGFfbGVuZ3RoKSAhPSAwKSB7Ci0gICAgICAgICAgICAvKiBhdXRoIGRh dGEgZG9lcyBub3QgbWF0Y2ggZmFrZSBkYXRhICovCi0gICAgICAgICAgICBnb3RvIGF1dGhfZXJy OwotICAgICAgICB9Ci0gICAgICAgIC8qIHN1YnN0aXR1dGUgdGhlIGZha2UgZGF0YSB3aXRoIHJl YWwgZGF0YSBpZiB3ZSBoYXZlIGFueSAqLwotICAgICAgICBpZiAocmVhbF94YXV0aCAmJiByZWFs X3hhdXRoLT5kYXRhKQotICAgICAgICAgICAgbWVtY3B5KGRhdGEgKyAxMiArICgobmFtZV9sZW4g KyAzKSAmIH4zKSwKLSAgICAgICAgICAgICAgICAgICByZWFsX3hhdXRoLT5kYXRhLCBkYXRhX2xl bik7Ci0KLSAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFu bmVsW2NoYW5uZWxdLmF1dGhvcml6ZWQgPSAxOwotICAgIH0KLSAgICByZXR1cm4oMCk7Ci0gIGF1 dGhfZXJyOgotICAgIHJldHVybigtMSk7Ci19Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi1pbnQK LSNpZmRlZiBDS19BTlNJQwotZndkeF9zZW5kX2Nsb3NlKGludCBjaGFubmVsKQotI2Vsc2UKLWZ3 ZHhfc2VuZF9jbG9zZShjaGFubmVsKSBpbnQgY2hhbm5lbDsKLSNlbmRpZiAvKiBDS19BTlNJQyAq LwotewotICAgIHVuc2lnbmVkIHNob3J0IG5jaGFubmVsOwotICAgIGludCBpLHJjOwotICAgIENI QVIgKiBwOwotCi0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRf VExTKS5zdGFydF90bHMubWVfZm9sbG93cykgewotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQot I2VuZGlmIC8qIENLX1NTTCAqLwotCi0gICAgbmNoYW5uZWwgPSBodG9ucyhjaGFubmVsKTsKLSAg ICBwID0gKHVuc2lnbmVkIGNoYXIgKikgJm5jaGFubmVsOwotCi0gICAgaSA9IDA7Ci0gICAgc2Jf b3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgIC8qIEkgQW0gYSBDb21tYW5kICov Ci0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAgIC8qIFN1Ym5lZ290 aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSBURUxPUFRfRk9SV0FSRF9YOyAgICAgICAgIC8q IEZvcndhcmQgWCAqLwotICAgIHNiX291dFtpKytdID0gRldEWF9DTE9TRTsgICAgICAgICAgICAg ICAvKiBPcGVuICovCi0gICAgc2Jfb3V0W2krK10gPSBwWzBdOyAgICAgICAgICAgICAgICAgICAg IC8qIEZpcnN0IEJ5dGUgb2YgQ2hhbm5lbCAqLwotICAgIGlmICggcFswXSA9PSBJQUMgKQotICAg ICAgICBzYl9vdXRbaSsrXSA9IElBQzsKLSAgICBzYl9vdXRbaSsrXSA9IHBbMV07ICAgICAgICAg ICAgICAgICAgICAgLyogU2Vjb25kIEJ5dGUgb2YgQ2hhbm5lbCAqLwotICAgIGlmICggcFsxXSA9 PSBJQUMgKQotICAgICAgICBzYl9vdXRbaSsrXSA9IElBQzsKLSAgICBzYl9vdXRbaSsrXSA9IChD SEFSKSBJQUM7ICAgICAgICAgICAgICAgLyogRW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCi0gICAg c2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7ICAgICAgICAgICAgICAgIC8qIG1hcmtlZCBieSBJQUMg U0UgKi8KLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykg ewotICAgICAgICBja21ha3htc2coKGNoYXIgKilmd2R4X21zZ19vdXQsVE5fTVNHX0xFTiwiVEVM TkVUIFNFTlQgU0IgIiwKLSAgICAgICAgICAgICAgICAgIFRFTE9QVChURUxPUFRfRk9SV0FSRF9Y KSwKLSAgICAgICAgICAgICAgICAgICIgQ0xPU0UgQ0hBTk5FTD0iLGNraXRvYShjaGFubmVsKSwi IElBQyBTRSIsCi0gICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVM TCxOVUxMCi0gICAgICAgICAgICAgICAgICApOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwot I2lmZGVmIE9TMgotICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCAp OwotI2VuZGlmCi0jaWZkZWYgREVCVUcKLSAgICBkZWJ1ZyhGMTAwLChjaGFyICopZndkeF9tc2df b3V0LCIiLDApOwotICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1ZygoY2hhciAqKWZ3 ZHhfbXNnX291dCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICByYyA9ICh0dG9sKChDSEFSICop c2Jfb3V0LGkpIDwgMCk7ICAgICAgLyogU2VuZCBpdC4gKi8KLSNpZmRlZiBPUzIKLSAgICBSZWxl YXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRpZgotICAgIGlmIChyYykKLSAgICAgIHJldHVybigtMSk7 Ci0gICAgcmV0dXJuKDApOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotZndkeF9zZW5kX29w ZW4oaW50IGNoYW5uZWwpCi0jZWxzZSAvKiBDS19BTlNJQyAqLwotZndkeF9zZW5kX29wZW4oY2hh bm5lbCkgaW50IGNoYW5uZWw7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICB1bnNpZ25l ZCBzaG9ydCBuY2hhbm5lbDsKLSAgICBpbnQgaSwgcmM7Ci0gICAgQ0hBUiAqIHA7Ci0KLSNpZmRl ZiBDS19TU0wKLSAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5t ZV9mb2xsb3dzKSB7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1NM ICovCi0KLSAgICBuY2hhbm5lbCA9IGh0b25zKGNoYW5uZWwpOwotICAgIHAgPSAodW5zaWduZWQg Y2hhciAqKSAmbmNoYW5uZWw7Ci0KLSAgICBpID0gMDsKLSAgICBzYl9vdXRbaSsrXSA9IChDSEFS KSBJQUM7ICAgICAgICAgICAgICAgICAvKiBJIEFtIGEgQ29tbWFuZCAqLwotICAgIHNiX291dFtp KytdID0gKENIQVIpIFNCOyAgICAgICAgICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICovCi0g ICAgc2Jfb3V0W2krK10gPSBURUxPUFRfRk9SV0FSRF9YOyAgICAgICAgICAgLyogRm9yd2FyZCBY ICovCi0gICAgc2Jfb3V0W2krK10gPSBGV0RYX09QRU47ICAgICAgICAgICAgICAgICAgLyogT3Bl biAqLwotICAgIHNiX291dFtpKytdID0gcFswXTsgICAgICAgICAgICAgICAgICAgICAgIC8qIEZp cnN0IEJ5dGUgb2YgQ2hhbm5lbCAqLwotICAgIGlmICggcFswXSA9PSBJQUMgKQotICAgICAgICBz Yl9vdXRbaSsrXSA9IElBQzsKLSAgICBzYl9vdXRbaSsrXSA9IHBbMV07ICAgICAgICAgICAgICAg ICAgICAgICAvKiBTZWNvbmQgQnl0ZSBvZiBDaGFubmVsICovCi0gICAgaWYgKCBwWzFdID09IElB QyApCi0gICAgICAgIHNiX291dFtpKytdID0gSUFDOwotICAgIHNiX291dFtpKytdID0gKENIQVIp IElBQzsgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAqLwotICAgIHNi X291dFtpKytdID0gKENIQVIpIFNFOyAgICAgICAgICAgICAgICAgIC8qIG1hcmtlZCBieSBJQUMg U0UgKi8KLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykg ewotICAgICAgICBja21ha3htc2coKGNoYXIgKilmd2R4X21zZ19vdXQsVE5fTVNHX0xFTiwiVEVM TkVUIFNFTlQgU0IgIiwKLSAgICAgICAgICAgICAgICAgIFRFTE9QVChURUxPUFRfRk9SV0FSRF9Y KSwKLSAgICAgICAgICAgICAgICAgICIgT1BFTiBDSEFOTkVMPSIsY2tpdG9hKGNoYW5uZWwpLCIg SUFDIFNFIiwKLSAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxM LE5VTEwpOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotI2lmZGVmIE9TMgotICAgIFJlcXVl c3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwotI2VuZGlmCi0jaWZkZWYgREVC VUcKLSAgICBkZWJ1ZyhGMTAwLChjaGFyICopZndkeF9tc2dfb3V0LCIiLDApOwotICAgIGlmICh0 bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1ZygoY2hhciAqKWZ3ZHhfbXNnX291dCk7Ci0jZW5kaWYg LyogREVCVUcgKi8KLSAgICByYyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAg ICAvKiBTZW5kIGl0LiAqLwotI2lmZGVmIE9TMgotICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwot I2VuZGlmCi0gICAgaWYgKHJjKQotICAgICAgcmV0dXJuKC0xKTsKLSAgICByZXR1cm4oMCk7Ci19 Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi1md2R4X2NsaWVudF9yZXBseV9vcHRpb25zKGNoYXIg Km9wdHMsIGludCBuKQotI2Vsc2UKLWZ3ZHhfY2xpZW50X3JlcGx5X29wdGlvbnMob3B0cywgbikg Y2hhciAqb3B0czsgaW50IG47Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpbnQgaSxq LHJjOwotCi0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExT KS5zdGFydF90bHMubWVfZm9sbG93cykgewotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2Vu ZGlmIC8qIENLX1NTTCAqLwotCi0gICAgaSA9IDA7Ci0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikg SUFDOyAgICAgICAgICAgICAgICAgLyogSSBBbSBhIENvbW1hbmQgKi8KLSAgICBzYl9vdXRbaSsr XSA9IChDSEFSKSBTQjsgICAgICAgICAgICAgICAgICAvKiBTdWJuZWdvdGlhdGlvbiAqLwotICAg IHNiX291dFtpKytdID0gVEVMT1BUX0ZPUldBUkRfWDsgICAgICAgICAgIC8qIEZvcndhcmQgWCAq LwotICAgIHNiX291dFtpKytdID0gRldEWF9PUFRJT05TOyAgICAgICAgICAgICAgIC8qIE9wdGlv bnMgKi8KLQotICAgIC8qIExvb2sgZm9yIHRoZSBvcHRpb25zIHdlIHJlY29nbml6ZSBhbmQgd2ls bCBzdXBwb3J0IGZvciB0aGlzIHNlc3Npb24gKi8KLSAgICAvKiBhbmQgcmVwbHkgd2l0aCB0aGVp ciBieXRlcyBzZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAg Zm9yIChqPTA7IGo8bjsgaisrLGkrKykgewotICAgICAgICBzYl9vdXRbaV0gPSBGV0RYX09QVF9O T05FOyAgICAgICAgICAvKiBBZGQgemVybyBieXRlIC0gbm8gb3B0aW9ucyAqLwotI2lmZGVmIENP TU1FTlQKLSAgICAgICAgLyogSWYgd2UgaGFkIGFueSBvcHRpb25zIHRvIHN1cHBvcnQsIHRoaXMg aXMgaG93IHdlIHdvdWxkIGRvIGl0ICovCi0gICAgICAgIGlmICggaiA9PSAwICkgewotICAgICAg ICAgICAgaWYgKG9wdHNbal0gJiBGV0RYX09QVF9YWFhYKSB7Ci0gICAgICAgICAgICAgICAgLyog c2V0IGZsYWcgdG8gcmVtZW1iZXIgb3B0aW9uIGlzIGluIHVzZSAqLwotICAgICAgICAgICAgICAg IGZsYWcgPSAxOwotICAgICAgICAgICAgICAgIHNiX291dFtpXSB8PSBGV0RYX09QVF9YWFhYOwot ICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIH0KLSAg ICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgU3Vi bmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTRTsgICAgICAgICAgICAg ICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9n IHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgY2ttYWt4bXNnKChjaGFyICopZndkeF9t c2dfb3V0LFROX01TR19MRU4sIlRFTE5FVCBTRU5UIFNCICIsCi0gICAgICAgICAgICAgICAgICBU RUxPUFQoVEVMT1BUX0ZPUldBUkRfWCksCi0gICAgICAgICAgICAgICAgICAiIE9QVElPTlMgIixj a2N0b3goc2Jfb3V0WzRdLDEpLCIgSUFDIFNFIiwKLSAgICAgICAgICAgICAgICAgIE5VTEwsTlVM TCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwot I2lmZGVmIE9TMgotICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCAp OwotI2VuZGlmCi0jaWZkZWYgREVCVUcKLSAgICBkZWJ1ZyhGMTAwLChjaGFyICopZndkeF9tc2df b3V0LCIiLDApOwotICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1ZygoY2hhciAqKWZ3 ZHhfbXNnX291dCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICByYyA9ICh0dG9sKChDSEFSICop c2Jfb3V0LGkpIDwgMCk7ICAgICAgICAvKiBTZW5kIGl0LiAqLwotI2lmZGVmIE9TMgotICAgIFJl bGVhc2VUZWxuZXRNdXRleCgpOwotI2VuZGlmCi0gICAgaWYgKHJjKQotICAgICAgcmV0dXJuKC0x KTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLQotaW50Ci1md2R4X3NlbmRfb3B0aW9ucygpIHsKLSAg ICBpbnQgaSwgcmM7Ci0KLSNpZmRlZiBDS19TU0wKLSAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9T VEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7Ci0gICAgICAgIHJldHVybigwKTsKLSAg ICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSAgICBpID0gMDsKLSAgICBzYl9vdXRbaSsrXSA9 IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgLyogSSBBbSBhIENvbW1hbmQgKi8KLSAgICBzYl9v dXRbaSsrXSA9IChDSEFSKSBTQjsgICAgICAgICAgICAgICAgLyogU3VibmVnb3RpYXRpb24gKi8K LSAgICBzYl9vdXRbaSsrXSA9IFRFTE9QVF9GT1JXQVJEX1g7ICAgICAgICAgLyogRm9yd2FyZCBY ICovCi0gICAgc2Jfb3V0W2krK10gPSBGV0RYX09QVElPTlM7ICAgICAgICAgICAgIC8qIE9wdGlv bnMgKi8KLSAgICBzYl9vdXRbaV0gICA9IEZXRFhfT1BUX05PTkU7Ci0gICAgLyogYWN0aXZhdGUg b3B0aW9ucyBoZXJlICovCi0gICAgaSsrOwotICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsg ICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAqLwotICAgIHNiX291dFtp KytdID0gKENIQVIpIFNFOyAgICAgICAgICAgICAgICAgIC8qIG1hcmtlZCBieSBJQUMgU0UgKi8K LQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7Ci0g ICAgICAgIGNrbWFrbXNnKChjaGFyICopZndkeF9tc2dfb3V0LFROX01TR19MRU4sIlRFTE5FVCBT RU5UIFNCICIsCi0gICAgICAgICAgICAgICAgIFRFTE9QVChURUxPUFRfRk9SV0FSRF9YKSwKLSAg ICAgICAgICAgICAgICAgIiBPUFRJT05TIDAwIElBQyBTRSIsTlVMTCk7Ci0gICAgfQotI2VuZGlm IC8qIERFQlVHICovCi0jaWZkZWYgT1MyCi0gICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5E RUZJTklURV9XQUlUICk7Ci0jZW5kaWYKLSNpZmRlZiBERUJVRwotICAgIGRlYnVnKEYxMDAsKGNo YXIgKilmd2R4X21zZ19vdXQsIiIsMCk7Ci0gICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2Rl YnVnKChjaGFyICopZndkeF9tc2dfb3V0KTsKLSNlbmRpZiAvKiBERUJVRyAqLwotICAgIHJjID0g KHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAwKTsgICAgICAgIC8qIFNlbmQgaXQuICovCi0jaWZk ZWYgT1MyCi0gICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7Ci0jZW5kaWYKLSAgICBpZiAocmMpCi0g ICAgICByZXR1cm4oLTEpOwotICAgIHJldHVybigwKTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5T SUMKLWZ3ZHhfc2VuZF9kYXRhX2Zyb21fY2hhbm5lbChpbnQgY2hhbm5lbCwgY2hhciAqIGRhdGEs IGludCBsZW4pCi0jZWxzZQotZndkeF9zZW5kX2RhdGFfZnJvbV9jaGFubmVsKGNoYW5uZWwsIGRh dGEsIGxlbikKLSAgICBpbnQgY2hhbm5lbDsgY2hhciAqIGRhdGE7IGludCBsZW47Ci0jZW5kaWYK LXsKLSAgICB1bnNpZ25lZCBzaG9ydCBuY2hhbm5lbDsKLSAgICAvKiBzdGF0aWMgKi8gQ0hBUiBz Yl9wcml2WzIwNDhdOwotICAgIENIQVIgKiBwOwotICAgIGludCBpLCBqLCBqX3NhdiwgcmM7Ci0g ICAgdW5zaWduZWQgaW50IHRtcDsKLQotICAgIGRlYnVnKEYxMTEsImZ3ZHhfc2VuZF9kYXRhX2Zy b21fY2hhbm5lbCgpIiwiY2hhbm5lbCIsY2hhbm5lbCk7Ci0KLSNpZmRlZiBDS19TU0wKLSAgICBp ZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7Ci0g ICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSAgICBuY2hh bm5lbCA9IGh0b25zKGNoYW5uZWwpOwotICAgIHAgPSAodW5zaWduZWQgY2hhciAqKSAmbmNoYW5u ZWw7Ci0KLSAgICBqID0gMDsKLSAgICBzYl9wcml2W2orK10gPSAoQ0hBUikgSUFDOyAgICAgICAg ICAgICAgICAgLyogSSBBbSBhIENvbW1hbmQgKi8KLSAgICBzYl9wcml2W2orK10gPSAoQ0hBUikg U0I7ICAgICAgICAgICAgICAgICAgLyogU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9wcml2W2or K10gPSBURUxPUFRfRk9SV0FSRF9YOyAgICAgICAgICAgLyogRm9yd2FyZCBYICovCi0gICAgc2Jf cHJpdltqKytdID0gRldEWF9EQVRBOyAgICAgICAgICAgICAgICAgIC8qIERhdGEgKi8KLSAgICBz Yl9wcml2W2orK10gPSBwWzBdOyAgICAgICAgICAgICAgICAgICAgICAgLyogRmlyc3QgQnl0ZSBv ZiBDaGFubmVsICovCi0gICAgaWYgKCBwWzBdID09IElBQyApCi0gICAgICAgIHNiX3ByaXZbaisr XSA9IElBQzsKLSAgICBzYl9wcml2W2orK10gPSBwWzFdOyAgICAgICAgICAgICAgICAgICAgICAg LyogU2Vjb25kIEJ5dGUgb2YgQ2hhbm5lbCAqLwotICAgIGlmICggcFsxXSA9PSBJQUMgKQotICAg ICAgICBzYl9wcml2W2orK10gPSBJQUM7Ci0gICAgal9zYXYgPSBqOwotCi0gICAgZm9yIChpID0g MDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgIHRtcCA9ICh1bnNpZ25lZCBpbnQpZGF0YVtpXTsK LSAgICAgICAgaWYgKCB0bXAgPT0gSUFDICkgewotICAgICAgICAgICAgc2JfcHJpdltqKytdID0g SUFDOwotICAgICAgICAgICAgc2JfcHJpdltqKytdID0gSUFDOwotICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgc2JfcHJpdltqKytdID0gdG1wOwotICAgICAgICB9Ci0gICAgICAgIGlmICgg aiA+PSAyMDQ1ICYmIChpIDwgbGVuLTEpICkgewotICAgICAgICAgICAgc2JfcHJpdltqKytdID0g KENIQVIpIElBQzsgIC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAqLwotICAgICAgICAgICAgc2Jf cHJpdltqKytdID0gKENIQVIpIFNFOyAgIC8qIG1hcmtlZCBieSBJQUMgU0UgKi8KLQotI2lmZGVm IERFQlVHCi0gICAgICAgICAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAg ICAgICAgICAgICAgICBja21ha3htc2coIChjaGFyICopZndkeF9tc2dfb3V0LFROX01TR19MRU4s IlRFTE5FVCBTRU5UIFNCICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBURUxPUFQoVEVM T1BUX0ZPUldBUkRfWCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiIERBVEEgQ0hBTk5F TD0iLGNraXRvYShjaGFubmVsKSwiICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM LE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMICk7Ci0gICAgICAgICAgICAgICAgdG5faGV4 KChDSEFSICopZndkeF9tc2dfb3V0LAotCQkgICAgICAgVE5fTVNHX0xFTiwmc2JfcHJpdltqX3Nh dl0sai0oal9zYXYrMikpOwotICAgICAgICAgICAgICAgIGNrc3RybmNhdCgoY2hhciAqKWZ3ZHhf bXNnX291dCwiIElBQyBTRSIsVE5fTVNHX0xFTik7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyog REVCVUcgKi8KLSNpZmRlZiBPUzIKLSAgICAgICAgICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VN X0lOREVGSU5JVEVfV0FJVCApOwotI2VuZGlmCi0jaWZkZWYgREVCVUcKLSAgICAgICAgICAgIGRl YnVnKEYxMDAsKGNoYXIgKilmd2R4X21zZ19vdXQsIiIsMCk7Ci0gICAgICAgICAgICBpZiAodG5f ZGViIHx8IGRlYnNlcykgdG5fZGVidWcoKGNoYXIgKilmd2R4X21zZ19vdXQpOwotI2VuZGlmIC8q IERFQlVHICovCi0gICAgICAgICAgICByYyA9ICh0dG9sKHNiX3ByaXYsaikgPCAwKTsgICAgICAg ICAgICAgICAgLyogU2VuZCBpdC4gKi8KLSNpZmRlZiBPUzIKLSAgICAgICAgICAgIFJlbGVhc2VU ZWxuZXRNdXRleCgpOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAocmMpIHsKLSAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTEwLCJmd2R4X3NlbmRfZGF0YV9mcm9tX2NoYW5uZWwoKSIsInR0b2woKSBm YWlsZWQiLDApOwotICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICB9Ci0K LSAgICAgICAgICAgIGogPSAwOwotICAgICAgICAgICAgc2JfcHJpdltqKytdID0gKENIQVIpIElB QzsgICAgICAgICAgICAgICAgIC8qIEkgQW0gYSBDb21tYW5kICovCi0gICAgICAgICAgICBzYl9w cml2W2orK10gPSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAgICAgLyogU3VibmVnb3RpYXRpb24g Ki8KLSAgICAgICAgICAgIHNiX3ByaXZbaisrXSA9IFRFTE9QVF9GT1JXQVJEX1g7ICAgICAgICAg ICAvKiBGb3J3YXJkIFggKi8KLSAgICAgICAgICAgIHNiX3ByaXZbaisrXSA9IEZXRFhfREFUQTsg ICAgICAgICAgICAgICAgICAvKiBEYXRhICovCi0gICAgICAgICAgICBzYl9wcml2W2orK10gPSBw WzBdOyAgICAgICAgICAgICAgICAgICAgICAgLyogRmlyc3QgQnl0ZSBvZiBDaGFubmVsICovCi0g ICAgICAgICAgICBpZiAoIHBbMF0gPT0gSUFDICkKLSAgICAgICAgICAgICAgICBzYl9wcml2W2or K10gPSBJQUM7Ci0gICAgICAgICAgICBzYl9wcml2W2orK10gPSBwWzFdOyAgICAgICAgICAgICAg ICAgICAgICAgLyogU2Vjb25kIEJ5dGUgb2YgQ2hhbm5lbCAqLwotICAgICAgICAgICAgaWYgKCBw WzFdID09IElBQyApCi0gICAgICAgICAgICAgICAgc2JfcHJpdltqKytdID0gSUFDOwotICAgICAg ICB9Ci0gICAgfQotCi0gICAgc2JfcHJpdltqKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAg ICAgIC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAqLwotICAgIHNiX3ByaXZbaisrXSA9IChDSEFS KSBTRTsgICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCi0KLSNpZmRlZiBE RUJVRwotICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewotICAgICAgICBja21h a3htc2coIChjaGFyICopZndkeF9tc2dfb3V0LFROX01TR19MRU4sCi0gICAgICAgICAgICAgICAg ICAgIlRFTE5FVCBTRU5UIFNCICIsVEVMT1BUKFRFTE9QVF9GT1JXQVJEX1gpLAotICAgICAgICAg ICAgICAgICAgICIgREFUQSAiLGNrY3RveChwWzBdLDEpLCIgIixja2N0b3gocFsxXSwxKSwiICIs Ci0gICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICAgICAg dG5faGV4KChDSEFSICopZndkeF9tc2dfb3V0LFROX01TR19MRU4sJnNiX3ByaXZbNl0sai04KTsK LSAgICAgICAgY2tzdHJuY2F0KChjaGFyICopZndkeF9tc2dfb3V0LCIgSUFDIFNFIixUTl9NU0df TEVOKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNpZmRlZiBPUzIKLSAgICBSZXF1ZXN0 VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNlbmRpZgotI2lmZGVmIERFQlVH Ci0gICAgZGVidWcoRjEwMCwoY2hhciAqKWZ3ZHhfbXNnX291dCwiIiwwKTsKLSAgICBpZiAodG5f ZGViIHx8IGRlYnNlcykgdG5fZGVidWcoKGNoYXIgKilmd2R4X21zZ19vdXQpOwotI2VuZGlmIC8q IERFQlVHICovCi0gICAgcmMgPSAodHRvbChzYl9wcml2LGopIDwgMCk7ICAgICAgICAgICAgICAg IC8qIFNlbmQgaXQuICovCi0jaWZkZWYgT1MyCi0gICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7Ci0j ZW5kaWYKLSAgICBpZiAoIHJjICkgewotICAgICAgICBkZWJ1ZyhGMTEwLCJmd2R4X3NlbmRfZGF0 YV9mcm9tX2NoYW5uZWwoKSIsInR0b2woKSBmYWlsZWQiLDApOwotICAgICAgICByZXR1cm4oLTEp OwotICAgIH0KLQotCi0gICAgcmV0dXJuKDApOwotfQotCi1zdGF0aWMgdW5zaWduZWQgY2hhciAq Ci0jaWZkZWYgQ0tfQU5TSUMKLWZ3ZHhfYWRkX3F1b3RlZF90d29ieXRlKHVuc2lnbmVkIGNoYXIg KnAsIHVuc2lnbmVkIHNob3J0IHR3b2J5dGUpCi0jZWxzZQotZndkeF9hZGRfcXVvdGVkX3R3b2J5 dGUocCwgdHdvYnl0ZSkKLSAgICB1bnNpZ25lZCBjaGFyICpwOyB1bnNpZ25lZCBzaG9ydCB0d29i eXRlOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBhZGRzIHRoZSBJQUMgcXVvdGVkIChNU0Ip IHJlcHJlc2VudGF0aW9uIG9mICdjaGFubmVsJyBhdCBidWZmZXIgcG9pbnRlciAncCcsCi0gKiBy ZXR1cm5pbmcgcG9pbnRlciB0byBuZXcgYnVmZmVyIHBvc2l0aW9uLiBOTyBPVkVSRkxPVyBDSEVD SyEKLSAqLwotewotICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoKHR3b2J5dGUgPj4gOCkgJiAw eEZGKTsKLSAgICBpZiAoKihwIC0gMSkgPT0gMHhGRikKLSAgICAgICAgKnArKyA9IDB4RkY7Ci0g ICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSh0d29ieXRlICYgMHhGRik7Ci0gICAgaWYgKCoocCAt IDEpID09IDB4RkYpCi0gICAgICAgICpwKysgPSAweEZGOwotICAgIHJldHVybiBwOwotfQotCi1p bnQKLSNpZmRlZiBDS19BTlNJQwotZndkeF9jcmVhdGVfZmFrZV94YXV0aChjaGFyICpuYW1lLCBp bnQgbmFtZV9sZW4sIGludCBkYXRhX2xlbikKLSNlbHNlCi1md2R4X2NyZWF0ZV9mYWtlX3hhdXRo KG5hbWUsIG5hbWVfbGVuLCBkYXRhX2xlbikKLSAgICBjaGFyICpuYW1lOyBpbnQgbmFtZV9sZW47 IGludCBkYXRhX2xlbjsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGNoYXIgc3RhY2tk YXRhWzI1Nl07Ci0gICAgdW5zaWduZWQgaW50IGMsIG47Ci0KLSAgICBpZiAoIW5hbWVfbGVuIHx8 ICFkYXRhX2xlbikKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgZmFrZV94YXV0aC5uYW1lID0gbWFs bG9jKG5hbWVfbGVuKTsKLSAgICBmYWtlX3hhdXRoLmRhdGEgPSBtYWxsb2MoZGF0YV9sZW4pOwot ICAgIGlmICghZmFrZV94YXV0aC5uYW1lIHx8ICFmYWtlX3hhdXRoLmRhdGEpCi0gICAgICAgIHJl dHVybiAyOwotICAgIGZha2VfeGF1dGgubmFtZV9sZW5ndGggPSBuYW1lX2xlbjsKLSAgICBtZW1j cHkoZmFrZV94YXV0aC5uYW1lLCBuYW1lLCBuYW1lX2xlbik7Ci0gICAgZmFrZV94YXV0aC5kYXRh X2xlbmd0aCA9IGRhdGFfbGVuOwotCi0gICAgLyogdHJ5IHRvIG1ha2UgYSByYW5kb20gdW5zaWdu ZWQgaW50IHRvIGZlZWQgc3JhbmQoKSAqLwotICAgIGMgPSB0aW1lKE5VTEwpOwotICAgIGMgKj0g Z2V0cGlkKCk7Ci0gICAgZm9yIChuID0gMDsgbiA8IHNpemVvZihzdGFja2RhdGEpOyBuKyspCi0g ICAgICAgIGMgKz0gc3RhY2tkYXRhW25dOwotICAgIHNyYW5kKCh1bnNpZ25lZCBpbnQpYyk7Ci0g ICAgZm9yIChjID0gMDsgYyA8IGRhdGFfbGVuOyBjKyspCi0gICAgICAgIGZha2VfeGF1dGguZGF0 YVtjXSA9ICh1bnNpZ25lZCBjaGFyKXJhbmQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotI2lmZGVm IENPTU1FTlQKLS8qIE5vIGxvbmdlciB1c2VkICovCi1pbnQKLWZ3ZHhfc2VuZF94YXV0aCh2b2lk KQotewotICAgIGludCBjLCBlcnIsIGRweW51bSwgZmFtaWx5LCBzYl9sZW4sIHJjOwotICAgIGNo YXIgKmRpc3BsYXksICpob3N0ID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpzYl9wcml2LCAq cDsKLQotICAgIC8qIHBhcnNlIHRoZSBsb2NhbCBESVNQTEFZIGVudiB2YXIgKi8KLSAgICBpZiAo IShkaXNwbGF5ID0gdG5fZ2V0X2Rpc3BsYXkoKSkpCi0gICAgICAgIHJldHVybiAoLTEpOwotICAg IGlmIChmd2R4X3BhcnNlX2Rpc3BsYXluYW1lKGRpc3BsYXksICZmYW1pbHksICZob3N0LCAmZHB5 bnVtLCBOVUxMLCBOVUxMKSkgewotICAgICAgICBjaGFyICogZGlzcF9ubyA9IGNraXRvYShkcHlu dW0pOwotICAgICAgICBpZiAoZmFtaWx5ID09IEZhbWlseUxvY2FsKSB7Ci0gICAgICAgICAgICAv KiBjYWxsIHdpdGggYWRkcmVzcyA9ICI8bG9jYWwgaG9zdCBuYW1lPiIgKi8KLSAgICAgICAgICAg IGNoYXIgYWRkcmVzc1szMDBdID0gImxvY2FsaG9zdCI7Ci0gICAgICAgICAgICBnZXRob3N0bmFt ZShhZGRyZXNzLCBzaXplb2YoYWRkcmVzcykgLSAxKTsKLSAgICAgICAgICAgIHJlYWxfeGF1dGgg PSBYYXVHZXRBdXRoQnlBZGRyKGZhbWlseSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cmxlbihhZGRyZXNzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGFkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJsZW4oZGlzcF9ubyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkaXNwX25vLCAwLCBOVUxMCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGZhbWlseSA9 PSBGYW1pbHlJbnRlcm5ldCkgewotICAgICAgICAgICAgLyogY2FsbCB3aXRoIGFkZHJlc3MgPSA0 IGJ5dGVzIG51bWVyaWMgaXAgYWRkciAoTVNCKSAqLwotICAgICAgICAgICAgc3RydWN0IGhvc3Rl bnQgKmhpOwotICAgICAgICAgICAgaWYgKGhpID0gZ2V0aG9zdGJ5bmFtZShob3N0KSkKLSAgICAg ICAgICAgICAgICByZWFsX3hhdXRoID0gWGF1R2V0QXV0aEJ5QWRkcihmYW1pbHksIDQsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGktPmhfYWRkciwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oZGlzcF9u byksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcF9u bywgMCwgTlVMTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGhvc3QpIHsKLSAgICAgICAgZnJlZShob3N0 KTsKLSAgICAgICAgaG9zdCA9IE5VTEw7Ci0gICAgfQotICAgIGlmIChyZWFsX3hhdXRoKQotICAg ICAgICBlcnIgPSBmd2R4X2NyZWF0ZV9mYWtlX3hhdXRoKHJlYWxfeGF1dGgtPm5hbWUsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbF94YXV0aC0+bmFtZV9sZW5ndGgs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbF94YXV0aC0+ZGF0YV9s ZW5ndGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIGVsc2UK LSAgICAgIGVyciA9IGZ3ZHhfY3JlYXRlX2Zha2VfeGF1dGgoIk1JVC1NQUdJQy1DT09LSUUtMSIs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbigiTUlULU1BR0lDLUNP T0tJRS0xIiksIDE2KTsKLSAgICBpZiAoZXJyKQotICAgICAgICByZXR1cm4oLTEpOwotCi0gICAg LyogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgU0IgYmxvY2ssIGFsbG9jIGZvciB3b3JzdCBjYXNl ICAgICAgICAgICAgICAqLwotICAgIC8qIHRoZSBmb2xsb3dpbmcgc3ByaW50ZigpIGNhbGxzIGFy ZSBzYWZlIGR1ZSB0byBsZW5ndGggY2hlY2tpbmcgICAgICAgKi8KLSAgICAvKiBidWZmZXIgaXMg dHdpY2UgYXMgYmlnIGFzIHRoZSBpbnB1dCBqdXN0IGluIGNhc2UgZXZlcnkgYnl0ZSB3YXMgSUFD ICovCi0gICAgc2JfbGVuID0gNSArIDIgKyAyICsgZmFrZV94YXV0aC5uYW1lX2xlbmd0aCArIGZh a2VfeGF1dGguZGF0YV9sZW5ndGggKyAyOwotICAgIGlmICghKHNiX3ByaXYgPSBtYWxsb2MoMiAq IHNiX2xlbikpKQotICAgICAgICByZXR1cm4oLTEpOwotICAgIHAgPSBzYl9wcml2OwotICAgIHNw cmludGYocCwgIiVjJWMlYyVjJWMiLCBJQUMsIFNCLCBURUxPUFRfRk9SV0FSRF9YLAotICAgICAg ICAgICAgRldEWF9PUFRfREFUQSwgRldEWF9PUFRfWEFVVEgpOwotICAgIHAgKz0gNTsKLSAgICBw ID0gZndkeF9hZGRfcXVvdGVkX3R3b2J5dGUocCwgZmFrZV94YXV0aC5uYW1lX2xlbmd0aCk7Ci0g ICAgcCA9IGZ3ZHhfYWRkX3F1b3RlZF90d29ieXRlKHAsIGZha2VfeGF1dGguZGF0YV9sZW5ndGgp OwotICAgIGZvciAoYyA9IDA7IGMgPCBmYWtlX3hhdXRoLm5hbWVfbGVuZ3RoOyBjKyspIHsKLSAg ICAgICAgKnArKyA9IGZha2VfeGF1dGgubmFtZVtjXTsKLSAgICAgICAgaWYgKCh1bnNpZ25lZCBj aGFyKWZha2VfeGF1dGgubmFtZVtjXSA9PSAweEZGKQotICAgICAgICAgICAgKnArKyA9IDB4RkY7 Ci0gICAgfQotICAgIGZvciAoYyA9IDA7IGMgPCBmYWtlX3hhdXRoLmRhdGFfbGVuZ3RoOyBjKysp IHsKLSAgICAgICAgKnArKyA9IGZha2VfeGF1dGguZGF0YVtjXTsKLSAgICAgICAgaWYgKCh1bnNp Z25lZCBjaGFyKWZha2VfeGF1dGguZGF0YVtjXSA9PSAweEZGKQotICAgICAgICAgICAgKnArKyA9 IDB4RkY7Ci0gICAgfQotICAgIHNwcmludGYocCwgIiVjJWMiLCBJQUMsIFNFKTsKLSAgICBwICs9 IDI7Ci0KLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykg ewotICAgICAgICBzcHJpbnRmKChjaGFyICopZndkeF9tc2dfb3V0LCJURUxORVQgU0VOVCBTQiAl cyBPUFRJT05fREFUQSBYQVVUSCAiLAotICAgICAgICAgICAgICAgICBURUxPUFQoVEVMT1BUX0ZP UldBUkRfWCkpOwotICAgICAgICB0bl9oZXgoKGNoYXIgKilmd2R4X21zZ19vdXQsVE5fTVNHX0xF Tiwmc2JfcHJpdls1XSwocC1zYl9wcml2KS03KTsKLSAgICAgICAgY2tzdHJuY2F0KChjaGFyICop ZndkeF9tc2dfb3V0LCIgSUFDIFNFIixUTl9NU0dfTEVOKTsKLSAgICB9Ci0jZW5kaWYgLyogREVC VUcgKi8KLQotICAgIC8qIEFkZCBUZWxuZXQgRGVidWcgaW5mbyBoZXJlICovCi0jaWZkZWYgT1My Ci0gICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Ci0jZW5kaWYK LSNpZmRlZiBERUJVRwotICAgIGRlYnVnKEYxMDAsKGNoYXIgKilmd2R4X21zZ19vdXQsIiIsMCk7 Ci0gICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKChjaGFyICopZndkeF9tc2dfb3V0 KTsKLSNlbmRpZiAvKiBERUJVRyAqLwotICAgIHJjID0gKCB0dG9sKHNiX3ByaXYscC1zYl9wcml2 KSA8IDAgKTsgICAgICAgICAgICAgICAgLyogU2VuZCBpdC4gKi8KLSNpZmRlZiBPUzIKLSAgICBS ZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRpZgotICAgIGlmIChyYykgewotICAgICAgICBkZWJ1 ZyhGMTEwLCJmd2R4X3NlbmRfeGF1dGgoKSIsInR0b2woKSBmYWlsZWQiLDApOwotICAgICAgICBy ZXR1cm4oLTEpOwotICAgIH0KLQotCi0gICAgZnJlZShzYl9wcml2KTsKLSAgICByZXR1cm4oMCk7 Ci19Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2lmZGVmIEZXRFhfU0VSVkVSCi0vKiBPbmx5IGlm IHdlIGV2ZXIgYmVjb21lIGEgc2VydmVyIC0gbm90IHlldCBwb3J0ZWQgdG8gS2VybWl0ICAgKi8K LS8qIEFuZCBldmVuIHNvIG1vc3Qgb2YgdGhpcyBjb2RlIGRvZXMgbm90IGJlbG9uZyBpbiB0aGlz IG1vZHVsZSAqLwotCi1pbnQKLWZ3ZHhfd3JpdGVfeGF1dGhmaWxlKHZvaWQpCi17Ci0gICAgaW50 IGRweW51bSwgc2NybnVtLCBmYW1pbHk7Ci0gICAgY2hhciBteWhvc3RbMzAwXSwgKmhvc3QsICpy ZXN0ID0gTlVMTDsKLSAgICBGSUxFICpmaWxlOwotICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzYWRk cjsKLSAgICBzdHJ1Y3QgaG9zdGVudCAqaGk7Ci0KLSAgICBpZiAoIWZ3ZHhfZGlzcGxheSAmJiAh ZndkeF94YXV0aGZpbGUpCi0gICAgICAgIHJldHVybiAxOwotICAgIGlmICghcGFyc2VfZGlzcGxh eW5hbWUoZndkeF9kaXNwbGF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZhbWlseSwg Jmhvc3QsICZkcHludW0sICZzY3JudW0sICZyZXN0KSkKLSAgICAgICAgcmV0dXJuIDI7Ci0gICAg aWYgKHJlc3QpIGZyZWUocmVzdCk7Ci0gICAgaWYgKGhvc3QpIGZyZWUoaG9zdCk7Ci0gICAgaWYg KGZhbWlseSAhPSBGYW1pbHlJbnRlcm5ldCkKLSAgICAgICAgcmV0dXJuIDM7IC8qIGV2ZXJ5IHRo aW5nIGJ1dCBGYW1pbHlJbnRlcm5ldCBpcyB1bmV4cGVjdGVkICovCi0KLSAgICAvKiBYIGNvbm5l Y3Rpb25zIHRvIGxvY2FsaG9zdDoxIGlzIGFjdHVhbGx5IHRyZWF0ZWQgYXMgbG9jYWwgdW5peCBz b2NrZXRzLAotICAgICAqIHNlZSB0aGUgJ3hhdXRoJyBtYW4gcGFnZS4KLSAgICAgKi8KLSAgICB4 YXV0aC5mYW1pbHkgPSBGYW1pbHlMb2NhbDsKLSAgICBpZiAoZ2V0aG9zdG5hbWUobXlob3N0LCBz aXplb2YobXlob3N0KSAtIDEpKQotICAgICAgICByZXR1cm4gNTsKLSAgICB4YXV0aC5hZGRyZXNz X2xlbmd0aCA9IHN0cmxlbihteWhvc3QpOwotICAgIGlmICghKHhhdXRoLmFkZHJlc3MgPSBtYWxs b2MoeGF1dGguYWRkcmVzc19sZW5ndGgpKSkKLSAgICAgICAgcmV0dXJuIDU7Ci0gICAgbWVtY3B5 KHhhdXRoLmFkZHJlc3MsIG15aG9zdCwgeGF1dGguYWRkcmVzc19sZW5ndGgpOwotCi0gICAgLyog dGhlIGRpc3BsYXkgbnVtYmVyIGlzIHdyaXR0ZW4gYXMgYSBzdHJpbmcsIG5vdCBudW1lcmljICov Ci0gICAgaWYgKCEoeGF1dGgubnVtYmVyID0gbWFsbG9jKDYpKSkKLSAgICAgICAgcmV0dXJuIDY7 Ci0gICAgc25wcmludGYoeGF1dGgubnVtYmVyLCA1LCAiJXUiLCBkcHludW0pOwotICAgIHhhdXRo Lm51bWJlcl9sZW5ndGggPSBzdHJsZW4oeGF1dGgubnVtYmVyKTsKLSAgICBpZiAoIShmaWxlID0g Zm9wZW4oZndkeF94YXV0aGZpbGUsICJ3YiIpKSkKLSAgICAgICAgcmV0dXJuIDc7Ci0gICAgaWYg KCFYYXVXcml0ZUF1dGgoZmlsZSwgJnhhdXRoKSkKLSAgICAgICAgcmV0dXJuIDg7Ci0gICAgZmNs b3NlKGZpbGUpOwotICAgIHNldGVudigiWEFVVEhPUklUWSIsIGZ3ZHhfeGF1dGhmaWxlLCAxKTsK LSAgICByZXR1cm4gMDsKLX0KLQotaW50Ci1md2R4X3NldHVwX3hhdXRoKHVuc2lnbmVkIGNoYXIg KnNwLCBpbnQgbGVuKQotLyogY2FsbGVkIHdpdGggJ2xlbicgeGF1dGggYnl0ZXMsIHN0YXJ0aW5n IGF0ICdzcCcKLSAqIHRoZSBkYXRhIGZvcm1hdCBpczogPHVpbnQxNiBuYW1lX2xlbmd0aD4gPHVp bnQxNiBkYXRhX2xlbmd0aD4gPG5hbWU+IDxkYXRhPgotICovCi17Ci0gICAgaW50IHhhdXRoZmQ7 Ci0KLSAgICBpZiAoIWZ3ZHhfb3B0aW9uc1tGV0RYX09QVF9YQVVUSF0pCi0gICAgICAgIHJldHVy biAxOwotICAgIGlmIChsZW4gPCA0KQotICAgICAgICByZXR1cm4gMjsKLQotICAgIC8qIHNldHVw IHRoZSB4YXV0aCBzdHJ1Y3QgKi8KLSAgICB4YXV0aC5uYW1lX2xlbmd0aCA9IChzcFswXSA8PCA4 KSArIHNwWzFdOwotICAgIHhhdXRoLmRhdGFfbGVuZ3RoID0gKHNwWzJdIDw8IDgpICsgc3BbM107 Ci0gICAgaWYgKGxlbiAhPSA0ICsgeGF1dGgubmFtZV9sZW5ndGggKyB4YXV0aC5kYXRhX2xlbmd0 aCkKLSAgICAgICAgcmV0dXJuIDM7Ci0gICAgeGF1dGgubmFtZSA9IG1hbGxvYyh4YXV0aC5uYW1l X2xlbmd0aCk7Ci0gICAgeGF1dGguZGF0YSA9IG1hbGxvYyh4YXV0aC5kYXRhX2xlbmd0aCk7Ci0g ICAgaWYgKCF4YXV0aC5uYW1lIHx8ICF4YXV0aC5kYXRhKQotICAgICAgICByZXR1cm4gNDsKLSAg ICBtZW1jcHkoeGF1dGgubmFtZSwgc3AgKyA0LCB4YXV0aC5uYW1lX2xlbmd0aCk7Ci0gICAgbWVt Y3B5KHhhdXRoLmRhdGEsIHNwICsgNCArIHhhdXRoLm5hbWVfbGVuZ3RoLCB4YXV0aC5kYXRhX2xl bmd0aCk7Ci0KLSAgICAvKiBTZXR1cCB0byBhbHdheXMgaGF2ZSBhIGxvY2FsIC5YYXV0aG9yaXR5 LiAqLwotICAgIGZ3ZHhfeGF1dGhmaWxlID0gbWFsbG9jKE1BWFBBVEhMRU4rMSk7Ci0gICAgc25w cmludGYoZndkeF94YXV0aGZpbGUsIE1BWFBBVEhMRU4sICIvdG1wL1hhdXRoWFhYWFhYIik7Ci0g ICAgaWYgKCh4YXV0aGZkID0gbWtzdGVtcChmd2R4X3hhdXRoZmlsZSkpICE9IC0xKQotICAgICAg ICAvKiB3ZSBjaGFuZ2UgZmlsZSBvd25lcnNoaXAgbGF0ZXIsIHdoZW4gd2Uga25vdyB3aG8gaXMg dG8gYmUgb3duZXIhICovCi0gICAgICAgIGNsb3NlKHhhdXRoZmQpOwotICAgIGVsc2UgewotICAg ICAgICBmcmVlKGZ3ZHhfeGF1dGhmaWxlKTsKLSAgICAgICAgZndkeF94YXV0aGZpbGUgPSBOVUxM OwotICAgICAgICByZXR1cm4gNTsKLSAgICB9Ci0vKiBNdXN0IGhhdmUgdGhlIHN1YnNoZWxsJ3Mg bmV3IERJU1BMQVkgZW52IHZhciB0byB3cml0ZSB4YXV0aCB0byB4YXV0aGZpbGUgKi8KLSAgICBp ZiAoZndkeF9kaXNwbGF5KQotICAgICAgICBpZiAoZndkeF93cml0ZV94YXV0aGZpbGUoKSkKLSAg ICAgICAgICAgIHJldHVybiA2OwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgZndkeF9zZXRf eGF1dGhmaWxlX293bmVyKGludCB1aWQpCi17Ci0gICAgc3RydWN0IHBhc3N3ZCAqcHdkOwotCi0g ICAgaWYgKCFmd2R4X3hhdXRoZmlsZSB8fCAhKHB3ZCA9IGdldHB3dWlkKHVpZCkpKQotICAgICAg ICByZXR1cm47Ci0gICAgY2hvd24oZndkeF94YXV0aGZpbGUsIHB3ZC0+cHdfdWlkLCBwd2QtPnB3 X2dpZCk7Ci19Ci0KLWludAotZndkeF9zZXJ2ZXJfYWNjZXB0X29wdGlvbnModW5zaWduZWQgY2hh ciAqc3AsIGludCBsZW4pCi0vKiBjYWxsZWQgd2l0aCAnbGVuJyBvcHRpb24gYnl0ZXMsIHN0YXJ0 aW5nIGF0ICdzcCcgKi8KLXsKLSAgICBpbnQgYzsKLQotICAgIGZvciAoYyA9IDA7IGMgPCBsZW4t MjsgYysrKSB7Ci0gICAgICAgIGlmIChjID09IDApIHsKLSAgICAgICAgICAgIGlmIChzcFtjXSAm IEZXRFhfT1BUX1hBVVRIKQotICAgICAgICAgICAgICAgIGZsYWcgPSAxOwotICAgICAgICB9Ci0g ICAgfQotICAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAvKiBGV0RYX1NFUlZFUiAqLwotI2VuZGlm IC8qIENLX0ZPUldBUkRfWCAqLwotCi0jaWZkZWYgSUtTX09QVElPTgotLyoKLSAgaWtzX3dhaXQo KSAtLSBXYWl0IGZvciBhbiBJS1Mgc3VibmVnb3RpYXRpb24gcmVzcG9uc2UuCi0gIHNiIC0gaXMg ZWl0aGVyIEtFUk1JVF9SRVFfU1RBUlQgb3IgS0VSTUlUX1JFUV9TVE9QIGRlcGVuZGluZyBvbiB0 aGUgZGVzaXJlZAotICAgICAgIHN0YXRlIG9mIHRoZSBwZWVyJ3MgS2VybWl0IHNlcnZlci4KLSAg Zmx1c2hvayAtIHNwZWNpZmllcyB3aGV0aGVyIGl0IGlzIG9rIHRvIHRocm93IGF3YXkgbm9uLVRl bG5ldCBkYXRhCi0gICAgICAgaWYgc28sIHRoZW4gd2UgY2FsbCB0dGZsdWkoKSBpbnN0ZWFkIG9m IHRuX2ZsdWkoKS4KLSAgUmV0dXJuczoKLSAgIDEgaWYgdGhlIGRlc2lyZWQgc3RhdGUgaXMgYWNo aWV2ZWQgb3IgaWYgaXQgaXMgdW5rbm93bi4KLSAgIDAgaWYgdGhlIGRlc2lyZWQgc3RhdGUgaXMg bm90IGFjaGlldmVkLgotKi8KLWludAotI2lmZGVmIENLX0FOU0lDCi1pa3Nfd2FpdChpbnQgc2Is IGludCBmbHVzaG9rKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLWlrc193YWl0KHNiLGZsdXNob2sp IGludCBzYjsgaW50IGZsdXNob2s7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpbnQg dG5fd2FpdF9zYXZlID0gdG5fd2FpdF9mbGc7Ci0gICAgaW50IHg7Ci0KLSAgICBpZiAoVEVMT1BU X1UoVEVMT1BUX0tFUk1JVCkpIHsKLSAgICAgICAgc3dpdGNoIChzYikgewotICAgICAgICAgIGNh c2UgS0VSTUlUX1JFUV9TVEFSVDoKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsCi0gICAgICAgICAg ICAgICAgICAiaWtzX3dhaXQgS0VSTUlUX1JFUV9TVEFSVCIsCi0gICAgICAgICAgICAgICAgICAi dV9zdGFydCIsCi0gICAgICAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2Vy bWl0LnVfc3RhcnQKLSAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICB0bl9zaWtzKEtF Uk1JVF9SRVFfU1RBUlQpOwotICAgICAgICAgICAgdG5fd2FpdF9mbGcgPSAxOyAgICAgICAgICAg IC8qIEtlcm1pdCBPcHRpb24gTVVTVCB3YWl0ICovCi0gICAgICAgICAgICBkbyB7Ci0gICAgICAg ICAgICAgICAgaWYgKGZsdXNob2spCi0gICAgICAgICAgICAgICAgICB0bl93YWl0X2lkeCA9IDA7 Ci0gICAgICAgICAgICAgICAgeCA9IHRuX3dhaXQoImlrc193YWl0KCkgbWVfaWtzX3JlcV9zdGFy dCIpOwotICAgICAgICAgICAgfSB3aGlsZSAoeCA9PSAwICYmIGZsdXNob2sgJiYgdG5fd2FpdF9p ZHggPT0gVE5fV0FJVF9CVUZfU1opOwotICAgICAgICAgICAgdG5fd2FpdF9mbGcgPSB0bl93YWl0 X3NhdmU7Ci0gICAgICAgICAgICBpZiAoZmx1c2hvaykKLSAgICAgICAgICAgICAgdG5fd2FpdF9p ZHggPSAwOwotICAgICAgICAgICAgaWYgKHRuX3dhaXRfaWR4ID09IFROX1dBSVRfQlVGX1NaKSB7 Ci0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiBXZSBhcmUgYXR0ZW1wdGlu ZyB0byBzdGFydCBhIGtlcm1pdCBzZXJ2ZXIgb24gdGhlIHBlZXIKLSAgICAgICAgICAgICAgICAg KiB0aGUgbW9zdCBsaWtlbHkgcmVhc29uIGlzIGJlY2F1c2Ugd2Ugd2FudCB0byBwZXJmb3JtIGEK LSAgICAgICAgICAgICAgICAgKiBmaWxlIHRyYW5zZmVyLiAgQnV0IHRoZXJlIGlzIGEgaHVnZSBh bW91bnQgb2Ygbm9uIHRlbG5ldAotICAgICAgICAgICAgICAgICAqIG5lZ290aWF0aW9uIGRhdGEg Y29taW5nIGluIGFuZCBzbyB3ZSBoYXZlIG5vdCBiZWVuIGFibGUKLSAgICAgICAgICAgICAgICAg KiB0byBmaW5kIHRoZSByZXNwb25zZS4gIFNvIHdlIHdpbGwgbGllIGFuZCBhc3N1bWUgdGhhdAot ICAgICAgICAgICAgICAgICAqIHJlc3BvbnNlIGlzICd5ZXMnLiAgVGhlIHdvcnNlIHRoYXQgd2ls bCBoYXBwZW4gaXMgdGhhdAotICAgICAgICAgICAgICAgICAqIGEgUkVTUF9TVE9QIGlzIHJlY2Vp dmVkIGFmdGVyIHdlIGVudGVyIHByb3RvY29sIG1vZGUuCi0gICAgICAgICAgICAgICAgICogQW5k IHRoZSBwcm90b2NvbCBvcGVyYXRpb24gd2lsbCBiZSBjYW5jZWxlZC4KLSAgICAgICAgICAgICAg ICAgKi8KLSAgICAgICAgICAgICAgICB0bl9wdXNoKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu KDEpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0bl9wdXNoKCk7Ci0g ICAgICAgICAgICAgICAgcmV0dXJuKFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQudV9z dGFydCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSBLRVJNSVRfUkVRX1NUT1A6Ci0g ICAgICAgICAgICBkZWJ1ZyhGMTExLAotICAgICAgICAgICAgICAgICAgImlrc193YWl0IEtFUk1J VF9SRVFfU1RPUCIsCi0gICAgICAgICAgICAgICAgICAidV9zdGFydCIsCi0gICAgICAgICAgICAg ICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnVfc3RhcnQKLSAgICAgICAgICAg ICAgICAgICk7Ci0gICAgICAgICAgICB0bl9zaWtzKEtFUk1JVF9SRVFfU1RPUCk7Ci0gICAgICAg ICAgICB0bl93YWl0X2ZsZyA9IDE7ICAgICAgICAgICAgLyogS2VybWl0IE9wdGlvbiBNVVNUIHdh aXQgKi8KLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBpZiAoZmx1c2hvaykKLSAg ICAgICAgICAgICAgICAgIHRuX3dhaXRfaWR4ID0gMDsKLSAgICAgICAgICAgICAgICB4ID0gdG5f d2FpdCgiaWtzX3dhaXQoKSBtZV9pa3NfcmVxX3N0b3AiKTsKLSAgICAgICAgICAgIH0gd2hpbGUg KHggPT0gMCAmJiBmbHVzaG9rICYmIHRuX3dhaXRfaWR4ID09IFROX1dBSVRfQlVGX1NaKTsKLSAg ICAgICAgICAgIHRuX3dhaXRfZmxnID0gdG5fd2FpdF9zYXZlOwotICAgICAgICAgICAgaWYgKGZs dXNob2spCi0gICAgICAgICAgICAgIHRuX3dhaXRfaWR4ID0gMDsKLQotICAgICAgICAgICAgaWYg KHRuX3dhaXRfaWR4ID09IFROX1dBSVRfQlVGX1NaKSB7Ci0gICAgICAgICAgICAgICAgLyoKLSAg ICAgICAgICAgICAgICAgKiBXZSBhcmUgYXR0ZW1wdGluZyB0byBzdG9wIGEga2VybWl0IHNlcnZl ciBvbiB0aGUgcGVlcgotICAgICAgICAgICAgICAgICAqIHRoZSBtb3N0IGxpa2VseSByZWFzb24g YmVpbmcgdGhhdCB3ZSB3YW50IHRvIGVudGVyCi0gICAgICAgICAgICAgICAgICogQ09OTkVDVCBt b2RlLiAgQnV0IHRoZXJlIGlzIGEgaHVnZSBhbW91bnQgb2Ygbm9uIHRlbG5ldAotICAgICAgICAg ICAgICAgICAqIG5lZ290aWF0aW9uIGRhdGEgY29taW5nIGluIGFuZCBzbyB3ZSBoYXZlIG5vdCBi ZWVuIGFibGUKLSAgICAgICAgICAgICAgICAgKiB0byBmaW5kIHRoZSByZXNwb25zZS4gIFNvIHdl IHdpbGwgbGllIGFuZCBhc3N1bWUgdGhhdAotICAgICAgICAgICAgICAgICAqIHRoZSBhbnN3ZXIg aXMgJ3llcycgYW5kIGFsbG93IHRoZSBDT05ORUNUIGNvbW1hbmQgdG8KLSAgICAgICAgICAgICAg ICAgKiBzdWNjZWVkLiAgVGhlIHdvcnN0IHRoYXQgaGFwcGVucyBpcyB0aGF0IENPTk5FQ1QgbW9k ZQotICAgICAgICAgICAgICAgICAqIHN3YWxsb3dzIHRoZSBpbmNvbWluZyBkYXRhIGRpc3BsYXlp bmcgaXQgdG8gdGhlIHVzZXIKLSAgICAgICAgICAgICAgICAgKiBhbmQgdGhlbiBpdCByZXN1bWVz IEtlcm1pdCBjbGllbnQgbW9kZS4KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAg ICB0bl9wdXNoKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKDEpOwotICAgICAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgICAgICB0bl9wdXNoKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu KCFURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnVfc3RhcnQpOwotICAgICAgICAgICAg fQotICAgICAgICB9Ci0gICAgICAgIHRuX3B1c2goKTsKLSAgICB9Ci0gICAgcmV0dXJuKDEpOwot fQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotaWtzX3RuX3NiKENIQVIgKiBzYiwgaW50IG4pCi0j ZWxzZQotaWtzX3RuX3NiKHNiLCBuKSBDSEFSICogc2I7IGludCBuOwotI2VuZGlmIC8qIENLX0FO U0lDICovCi17Ci0gICAgZXh0ZXJuIGludCBzZXJ2ZXI7Ci0gICAgZXh0ZXJuIENIQVIgc3N0YXRl OwotI2lmZGVmIE5PSUNQCi0gICAgZXh0ZXJuIGludCBhdXRvZGw7Ci0gICAgaW50IGluYXV0b2Rs ID0gMCwgY21kYWRsID0gMTsKLSNlbHNlCi0jaWZkZWYgQ0tfQVVUT0RMCi0gICAgZXh0ZXJuIGlu dCBhdXRvZGwsIGluYXV0b2RsLCBjbWRhZGw7Ci0jZW5kaWYgLyogQ0tfQVVUT0RMICovCi0jZW5k aWYgLyogTk9JQ1AgKi8KLSAgICBzd2l0Y2ggKHNiWzBdKSB7Ci0gICAgICBjYXNlIEtFUk1JVF9T VEFSVDogICAgICAgICAgICAgICAgLyogU1RBUlQgKi8KLSAgICAgICAgVEVMT1BUX1NCKFRFTE9Q VF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0ID0gMTsKLSAgICAgICAgcmV0dXJuKDQpOwotCi0gICAg ICBjYXNlIEtFUk1JVF9TVE9QOiAgICAgICAgICAgICAgICAgLyogU1RPUCAqLwotICAgICAgICBU RUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnVfc3RhcnQgPSAwOwotICAgICAgICByZXR1 cm4oNCk7Ci0KLSAgICAgIGNhc2UgS0VSTUlUX1JFUV9TVEFSVDogICAgICAgICAgICAvKiBSRVEt U1RBUlQgKi8KLSNpZm5kZWYgTk9YRkVSCi0gICAgICAgIGlmIChpbnNlcnZlcikgewotI2lmZGVm IENLX0FVVE9ETAotICAgICAgICAgICAgY21kYWRsID0gMTsgICAgICAgICAgICAgICAgIC8qIFR1 cm4gb24gcGFja2V0IGRldGVjdGlvbiAqLwotI2VuZGlmIC8qIENLX0FVVE9ETCAqLwotICAgICAg ICAgICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCA9IDE7Ci0gICAg ICAgICAgICB0bl9zaWtzKEtFUk1JVF9SRVNQX1NUQVJUKTsKLSAgICAgICAgfSBlbHNlIGlmIChU RUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0KSB7Ci0gICAgICAgICAgICB0 bl9zaWtzKEtFUk1JVF9SRVNQX1NUQVJUKTsKLSAgICAgICAgfSBlbHNlIHsKLSNpZm5kZWYgSUtT RE9OTFkKLSNpZmRlZiBDS19BVVRPREwKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgIGlmIChsb2Nh bCAmJiAoSXNDb25uZWN0TW9kZSgpICYmIGF1dG9kbCkgfHwKLSAgICAgICAgICAgICAgICAoIUlz Q29ubmVjdE1vZGUoKSAmJiAKLSAgICAgICAgICAgICAgICAgIChpbmF1dG9kbCB8fCBzc3RhdGUg PT0gJ3gnIHx8IHNzdGF0ZSA9PSAndicpKQotICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAg ICAgdG5fc2lrcyhLRVJNSVRfUkVTUF9TVEFSVCk7IC8qIFNUQVJUICovCi0gICAgICAgICAgICBl bHNlCi0KLSNlbHNlIC8qIE9TMiAqLwotICAgICAgICAgICAgaWYgKChsb2NhbCAmJiB3aGF0ID09 IFdfQ09OTkVDVCAmJiBhdXRvZGwpIHx8Ci0gICAgICAgICAgICAgICAgKGxvY2FsICYmIHdoYXQg IT0gV19DT05ORUNUICYmCi0gICAgICAgICAgICAgICAgICAoaW5hdXRvZGwgfHwgc3N0YXRlID09 ICd4JyB8fCBzc3RhdGUgPT0gJ3YnKQotICAgICAgICAgICAgICAgICkpCi0gICAgICAgICAgICAg IHRuX3Npa3MoS0VSTUlUX1JFU1BfU1RBUlQpOyAvKiBTVEFSVCAqLwotICAgICAgICAgICAgZWxz ZQotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIENLX0FVVE9ETCAqLwotI2VuZGlmIC8qIElL U0RPTkxZICovCi0gICAgICAgICAgICAgIHRuX3Npa3MoS0VSTUlUX1JFU1BfU1RPUCk7Ci0gICAg ICAgIH0KLSNlbHNlIC8qIE5PWEZFUiAqLwotICAgICAgICAgIHRuX3Npa3MoS0VSTUlUX1JFU1Bf U1RPUCk7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0gICAgICAgIHJldHVybig0KTsKLQotICAgICAg Y2FzZSBLRVJNSVRfUkVRX1NUT1A6ICAgICAgICAgICAgIC8qIFJFUS1TVE9QICovCi0gICAgICAg IC8qIFRoZSBwcm90b2NvbCByZXF1aXJlcyB0aGF0IHRoZSByZXF1ZXN0IGJlIHJlc3BvbmRlZCB0 byAqLwotICAgICAgICAvKiBlaXRoZXIgYnkgY2hhbmdpbmcgc3RhdGVzIG9yIGJ5IHJlcG9ydGlu ZyB0aGUgY3VycmVudCAgKi8KLSAgICAgICAgLyogc3RhdGUuICAqLwotCi0gICAgICAgIC8qIFdl IG5lZWQgdG8gcHJvdmlkZSB0aGUgdXNlciBzb21lIHdheSBvZiBkaWN0YXRpbmcgd2hhdCAqLwot ICAgICAgICAvKiB0aGUgcG9saWNpZXMgc2hvdWxkIGJlLiAgRm9yIGluc3RhbmNlLCBpZiB3ZSBh cmUgaW4gICAgKi8KLSAgICAgICAgLyogQ09OTkVDVCBtb2RlIHdpdGggYXV0b2Rvd25sb2FkIE9O IGFuZCB3ZSBnZXQgYSBSRVEtU1RPUCovCi0gICAgICAgIC8qIHdoYXQgc2hvdWxkIHRoZSBwcm9w ZXIgcmVzcG9uc2UgYmU/ICAgICAgICAgICAgICAgICAgICAqLwotI2lmbmRlZiBOT1hGRVIKLSAg ICAgICAgaWYgKGluc2VydmVyCi0jaWZkZWYgQ0tfQVVUT0RMCi0gICAgICAgICAgICB8fCAhbG9j YWwgJiYgY21kYWRsCi0jZW5kaWYgLyogQ0tfQVVUT0RMICovCi0gICAgICAgICAgICApIHsKLSNp ZmRlZiBDS19BVVRPREwKLSAgICAgICAgICAgIGNtZGFkbCA9IDA7ICAgICAgICAgICAgICAgICAv KiBUdXJuIG9mZiBwYWNrZXQgZGV0ZWN0aW9uICovCi0jZW5kaWYgLyogQ0tfQVVUT0RMICovCi0g ICAgICAgICAgICB0bl9zaWtzKEtFUk1JVF9SRVNQX1NUT1ApOwotICAgICAgICB9IGVsc2UgaWYg KHNlcnZlcikgewotICAgICAgICAgICAgZXh0ZXJuIGludCBlbl9maW47Ci0gICAgICAgICAgICBp ZiAoZW5fZmluKSB7ICAgICAgICAgICAgICAgLyogSWYgdGhlIHNlcnZlciBpcyBhbGxvd2VkIHRv IHN0b3AgKi8KLSAgICAgICAgICAgICAgICB0bl9zaWtzKEtFUk1JVF9SRVNQX1NUT1ApOwotICAg ICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIFdlIGFyZSBub3QgYWxsb3dl ZCB0byBzdG9wICovCi0gICAgICAgICAgICAgICAgdG5fc2lrcyhLRVJNSVRfUkVTUF9TVEFSVCk7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNpZm5kZWYgSUtTRE9OTFkKLSNpZmRlZiBDS19B VVRPREwKLSNpZmRlZiBPUzIKLSAgICAgICAgZWxzZSBpZiAobG9jYWwgJiYgKElzQ29ubmVjdE1v ZGUoKSAmJiBhdXRvZGwpIHx8Ci0gICAgICAgICAgICAgICAgICAgKCFJc0Nvbm5lY3RNb2RlKCkg JiYgaW5hdXRvZGwpCi0gICAgICAgICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAvKiBJZiB3 ZSBhcmUgYSBwc2V1ZG8tc2VydmVyIGFuZCB0aGUgb3RoZXIgc2lkZSByZXF1ZXN0cyAqLwotICAg ICAgICAgICAgLyogdGhhdCB3ZSBzdG9wLCB0ZWxsIHRoZW4gdGhhdCB3ZSBoYXZlIGV2ZW4gdGhv dWdoIHdlICAgKi8KLSAgICAgICAgICAgIC8qIGhhdmUgbm90LiAgT3RoZXJ3aXNlLCB0aGUgb3Ro ZXIgc2lkZSBtaWdodCByZWZ1c2UgdG8gICovCi0gICAgICAgICAgICAvKiBlbnRlciBTRVJWRVIg bW9kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0gICAgICAgICAg ICB0bl9zaWtzKEtFUk1JVF9SRVNQX1NUT1ApOyAgLyogU1RPUCAqLwotICAgICAgICB9Ci0jZWxz ZSAvKiBPUzIgKi8KLSAgICAgICAgZWxzZSBpZiAoKGxvY2FsICYmIHdoYXQgPT0gV19DT05ORUNU ICYmIGF1dG9kbCkgfHwKLSAgICAgICAgICAgICAgICAgICAobG9jYWwgJiYgd2hhdCAhPSBXX0NP Tk5FQ1QgJiYgaW5hdXRvZGwpCi0gICAgICAgICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAv KiBJZiB3ZSBhcmUgYSBwc2V1ZG8tc2VydmVyIGFuZCB0aGUgb3RoZXIgc2lkZSByZXF1ZXN0cyAq LwotICAgICAgICAgICAgLyogdGhhdCB3ZSBzdG9wLCB0ZWxsIHRoZW4gdGhhdCB3ZSBoYXZlIGV2 ZW4gdGhvdWdoIHdlICAgKi8KLSAgICAgICAgICAgIC8qIGhhdmUgbm90LiAgT3RoZXJ3aXNlLCB0 aGUgb3RoZXIgc2lkZSBtaWdodCByZWZ1c2UgdG8gICovCi0gICAgICAgICAgICAvKiBlbnRlciBT RVJWRVIgbW9kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0gICAg ICAgICAgICB0bl9zaWtzKEtFUk1JVF9SRVNQX1NUT1ApOyAgLyogU1RPUCAqLwotICAgICAgICB9 Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogQ0tfQVVUT0RMICovCi0jZW5kaWYgLyogSUtT RE9OTFkgKi8KLSAgICAgICAgZWxzZQotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgICAgICB7Ci0g ICAgICAgICAgICAvKiBJZiB3ZSBhcmUgbm90IGN1cnJlbnRseSBpbiBhbnkgbW9kZSB0aGF0IGFj Y2VwdHMgKi8KLSAgICAgICAgICAgIC8qIEtlcm1pdCBwYWNrZXRzIHRoZW4gb2YgY291cnNlIHJl cG9ydCB0aGF0IHdlIGFyZSAqLwotICAgICAgICAgICAgLyogbm90IGJlaW5nIGEgS2VybWl0IHNl cnZlci4gICAgICAgICAgICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgIHRuX3Npa3MoS0VS TUlUX1JFU1BfU1RPUCk7ICAvKiBTVE9QICovCi0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuKDQp OwotCi0gICAgICBjYXNlIEtFUk1JVF9TT1A6IHsgICAgICAgICAgICAgICAgLyogU09QICovCi0j aWZuZGVmIE5PWEZFUgotICAgICAgICAgIGV4dGVybiBDSEFSIHN0Y2hyOyAgICAgICAgICAgIC8q IEluY29taW5nIFNPUCBjaGFyYWN0ZXIgKi8KLSAgICAgICAgICBzdGNociA9IHNiWzFdOwotI2Vu ZGlmIC8qIE5PWEZFUiAqLwotICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJt aXQuc29wID0gMTsKLSAgICAgICAgICByZXR1cm4oNCk7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2Ug S0VSTUlUX1JFU1BfU1RBUlQ6ICAgICAgICAgICAvKiBTVEFSVCAqLwotICAgICAgICBURUxPUFRf U0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnVfc3RhcnQgPSAxOwotICAgICAgICBpZiAoVEVMT1BU X1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9yZXFfc3RhcnQpIHsKLSAgICAgICAgICAgIFRF TE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfcmVxX3N0YXJ0ID0gMDsKLSAgICAgICAg fSBlbHNlIGlmIChURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3JlcV9zdG9wKSB7 Ci0gICAgICAgICAgICAvKiBJZiB3ZSBoYXZlIGlzc3VlZCBhIHJlcXVlc3QgdG8gc3RvcCBhIEtl cm1pdCBTZXJ2ZXIgKi8KLSAgICAgICAgICAgIC8qIGFuZCB0aGUgcmVzcG9uc2UgaXMgU3RhcnQs IHRoZW4gd2UgbXVzdCByZXBvcnQgdGhpcyAqLwotICAgICAgICAgICAgLyogdG8gdGhlIGNhbGxl ci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBU RUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3JlcV9zdG9wID0gMDsKLSAgICAgICAg fQotICAgICAgICByZXR1cm4oNCk7Ci0KLSAgICAgIGNhc2UgS0VSTUlUX1JFU1BfU1RPUDogICAg ICAgICAgICAvKiBTVE9QICovCi0gICAgICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJt aXQudV9zdGFydCA9IDA7Ci0gICAgICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2Vy bWl0Lm1lX3JlcV9zdGFydCkgewotICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQp Lmtlcm1pdC5tZV9yZXFfc3RhcnQgPSAwOwotICAgICAgICAgICAgLyogSWYgd2UgaGF2ZSBpc3N1 ZWQgYSByZXF1ZXN0IHRvIHN0YXJ0IGEgS2VybWl0IFNlcnZlciAqLwotICAgICAgICAgICAgLyog YW5kIHRoZSByZXNwb25zZSBpcyBTdG9wLCB0aGVuIHdlIG11c3QgcmVwb3J0IHRoaXMgICAqLwot ICAgICAgICAgICAgLyogdG8gdGhlIGNhbGxlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqLwotICAgICAgICB9IGVsc2UgaWYgKFRFTE9QVF9TQihURUxPUFRfS0VSTUlU KS5rZXJtaXQubWVfcmVxX3N0b3ApIHsKLSAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfS0VS TUlUKS5rZXJtaXQubWVfcmVxX3N0b3AgPSAwOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybig0 KTsKLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuKDApOwotCi0gICAgfSAvKiBzd2l0 Y2ggKHNiWzBdKSAqLwotfQotI2VuZGlmIC8qIElLU19PUFRJT04gKi8KLQotLyogSW5pdGlhbGl6 ZSB0ZWxuZXQgc2V0dGluZ3MgLSBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIE1FIGFuZCBVIG1vZGVz ICovCi1pbnQKLXRuX3NldF9tb2RlcygpIHsKLSAgICBpbnQgb3B0LGNtZDsKLSNpZmRlZiBDS19G T1JXQVJEX1gKLSAgICBpbnQgeDsKLSNlbmRpZiAvKiBDS19GT1JXQVJEX1ggKi8KLSNpZmRlZiBD S19FTlZJUk9OTUVOVAotICAgIHsKLSAgICAgICAgaW50IGksajsKLSAgICAgICAgZm9yIChpID0g MDsgaSA8IDg7IGkrKykgewotICAgICAgICAgICAgdG5fZW52X3VzZXJ2YXJbaV1bMF0gPSBOVUxM OwotICAgICAgICAgICAgdG5fZW52X3VzZXJ2YXJbaV1bMV0gPSBOVUxMOwotICAgICAgICB9Ci0g ICAgfQotI2VuZGlmIC8qIENLX0VOVklST05NRU5UICovCi0KLSAgICAvKiBpbml0aWFsaXplIGFs bCBvcHRpb25zIHRvIHJlZnVzZSBpbiBib3RoIGRpcmVjdGlvbnMgKi8KLSAgICBmb3IgKG9wdCA9 IDA7IG9wdCA8IE5URUxPUFRTOyBvcHQrKykgewotICAgICAgICBURUxPUFRfTUUob3B0KSA9IDA7 Ci0gICAgICAgIFRFTE9QVF9VKG9wdCkgID0gMDsKLSAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURf V0lMTChvcHQpID0gMDsKLSAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE8ob3B0KSAgID0gMDsK LSAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfV09OVChvcHQpID0gMDsKLSAgICAgICAgVEVMT1BU X1VOQU5TV0VSRURfRE9OVChvcHQpICAgPSAwOwotICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9T QihvcHQpICAgPSAwOwotICAgICAgICBURUxPUFRfTUVfTU9ERShvcHQpID0gVE5fTkdfUkY7Ci0g ICAgICAgIFRFTE9QVF9VX01PREUob3B0KSA9IFROX05HX1JGOwotICAgICAgICBURUxPUFRfREVG X1NfTUVfTU9ERShvcHQpID0gVE5fTkdfUkY7Ci0gICAgICAgIFRFTE9QVF9ERUZfU19VX01PREUo b3B0KSA9IFROX05HX1JGOwotICAgICAgICBURUxPUFRfREVGX0NfTUVfTU9ERShvcHQpID0gVE5f TkdfUkY7Ci0gICAgICAgIFRFTE9QVF9ERUZfQ19VX01PREUob3B0KSA9IFROX05HX1JGOwotICAg ICAgICBmb3IgKGNtZCA9IDA7IGNtZCA8IDQ7IGNtZCArKykKLSAgICAgICAgICB0bmNudHNbVEVM T1BUX0lOREVYKG9wdCldW2NtZF0gPSAwOwotICAgIH0KLSNpZmRlZiBJS1NfT1BUSU9OCi0gICAg VEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCA9IDA7Ci0gICAgVEVMT1BU X1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0ID0gMDsKLSAgICBURUxPUFRfU0IoVEVM T1BUX0tFUk1JVCkua2VybWl0Lm1lX3JlcV9zdGFydCA9IDA7Ci0gICAgVEVMT1BUX1NCKFRFTE9Q VF9LRVJNSVQpLmtlcm1pdC5tZV9yZXFfc3RvcCA9IDA7Ci0gICAgVEVMT1BUX1NCKFRFTE9QVF9L RVJNSVQpLmtlcm1pdC5zb3AgPSAwOwotI2VuZGlmIC8qIElLU19PUFRJT04gKi8KLQotI2lmZGVm IENLX0VOQ1JZUFRJT04KLSAgICBURUxPUFRfU0IoVEVMT1BUX0VOQ1JZUFRJT04pLmVuY3J5cHQu c3RvcCA9IDA7Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotCi0jaWZkZWYgIENLX05BV1MK LSAgICBURUxPUFRfU0IoVEVMT1BUX05BV1MpLm5hd3MueCA9IDA7Ci0gICAgVEVMT1BUX1NCKFRF TE9QVF9OQVdTKS5uYXdzLnkgPSAwOwotI2VuZGlmIC8qIENLX05BV1MgKi8KLQotI2lmZGVmIENL X1NTTAotICAgIFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMudV9mb2xsb3dz ID0gMDsKLSAgICBURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxv d3MgPSAwOwotICAgIFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMuYXV0aF9y ZXF1ZXN0ID0gMDsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotICAgIC8qIE5vdyBzZXQgdGhlIG9u ZXMgd2Ugd2FudCB0byBhY2NlcHQgdG8gdGhlIHByb3BlciB2YWx1ZXMgKi8KLSAgICBURUxPUFRf REVGX1NfTUVfTU9ERShURUxPUFRfU0dBKSA9IFROX05HX1JROwotICAgIFRFTE9QVF9ERUZfU19V X01PREUoVEVMT1BUX1NHQSkgPSBUTl9OR19SUTsKLSAgICBURUxPUFRfREVGX0NfTUVfTU9ERShU RUxPUFRfU0dBKSA9IFROX05HX0FDOwotICAgIFRFTE9QVF9ERUZfQ19VX01PREUoVEVMT1BUX1NH QSkgPSBUTl9OR19BQzsKLQotICAgIFRFTE9QVF9ERUZfU19NRV9NT0RFKFRFTE9QVF9CSU5BUlkp ID0gVE5fTkdfQUM7Ci0gICAgVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfQklOQVJZKSA9IFRO X05HX0FDOwotICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9CSU5BUlkpID0gVE5fTkdf QUM7Ci0gICAgVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfQklOQVJZKSA9IFROX05HX0FDOwot Ci0gICAgVEVMT1BUX0RFRl9TX01FX01PREUoVEVMT1BUX0xPR09VVCkgPSBUTl9OR19BQzsKLSAg ICBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9MT0dPVVQpID0gVE5fTkdfQUM7Ci0gICAgVEVM T1BUX0RFRl9DX01FX01PREUoVEVMT1BUX0xPR09VVCkgPSBUTl9OR19BQzsKLSAgICBURUxPUFRf REVGX0NfVV9NT0RFKFRFTE9QVF9MT0dPVVQpID0gVE5fTkdfQUM7Ci0KLSNpZmRlZiBJS1NfT1BU SU9OCi0gICAgVEVMT1BUX0RFRl9TX01FX01PREUoVEVMT1BUX0tFUk1JVCkgPSBUTl9OR19SUTsK LSAgICBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9LRVJNSVQpID0gVE5fTkdfUlE7Ci0gICAg VEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX0tFUk1JVCkgPSBUTl9OR19SUTsKLSAgICBURUxP UFRfREVGX0NfVV9NT0RFKFRFTE9QVF9LRVJNSVQpID0gVE5fTkdfUlE7Ci0jZW5kaWYgLyogSUtT X09QVElPTiAqLwotCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgIFRFTE9QVF9ERUZfU19VX01P REUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUlE7Ci0gICAgVEVMT1BUX0RFRl9TX01FX01P REUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUlE7Ci0gICAgVEVMT1BUX0RFRl9DX1VfTU9E RShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SUTsKLSAgICBURUxPUFRfREVGX0NfTUVfTU9E RShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SUTsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9O ICovCi0KLSAgICBURUxPUFRfREVGX1NfTUVfTU9ERShURUxPUFRfRUNITykgPSBUTl9OR19SUTsK LSNpZmRlZiBJS1NECi0gICAgaWYgKCAhaW5zZXJ2ZXIgKQotI2VuZGlmIC8qIElLU0QgKi8KLSAg ICAgIFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX1RUWVBFKSA9IFROX05HX1JROwotCi0jaWZk ZWYgQ0tfRU5WSVJPTk1FTlQKLSAgICBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9ORVdFTlZJ Uk9OKSA9IFROX05HX1JROwotI2VuZGlmIC8qIENLX0VOVklST05NRU5UICovCi0KLSNpZmRlZiBD S19BVVRIRU5USUNBVElPTgotICAgIFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX0FVVEhFTlRJ Q0FUSU9OKSA9IFROX05HX1JROwotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0KLSNp ZmRlZiBDS19TU0wKLSAgICBpZiAoY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpKSB7Ci0gICAgICAg IFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX1NUQVJUX1RMUykgPSBUTl9OR19SUTsKLSAgICAg ICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX1NUQVJUX1RMUykgPSBUTl9OR19BQzsKLSAg ICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSNpZmRlZiBDS19OQVdTCi0gICAgVEVMT1BUX0RF Rl9TX1VfTU9ERShURUxPUFRfTkFXUykgPSBUTl9OR19SUTsKLSNlbmRpZiAvKiBDS19OQVdTICov Ci0KLSAgICBURUxPUFRfREVGX0NfVV9NT0RFKFRFTE9QVF9FQ0hPKSA9IFROX05HX0FDOwotICAg IFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9UVFlQRSkgPSBUTl9OR19SUTsKLQotI2lmZGVm IENLX0VOVklST05NRU5UCi0gICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX05FV0VOVklS T04pID0gVE5fTkdfUlE7Ci0jZW5kaWYgLyogQ0tfRU5WSVJPTk1FTlQgKi8KLQotI2lmZGVmIENL X0FVVEhFTlRJQ0FUSU9OCi0gICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX0FVVEhFTlRJ Q0FUSU9OKSA9IFROX05HX1JROwotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0KLSNp ZmRlZiBDS19OQVdTCi0gICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX05BV1MpID0gVE5f TkdfUlE7Ci0jZW5kaWYgLyogQ0tfTkFXUyAqLwotCi0jaWZkZWYgQ0tfU05ETE9DCi0gICAgVEVM T1BUX0RFRl9DX01FX01PREUoVEVMT1BUX1NORExPQykgPSBUTl9OR19SUTsKLSNlbmRpZiAvKiBD S19TTkRMT0MgKi8KLQotI2lmZGVmIENLX0ZPUldBUkRfWAotICAgIFRFTE9QVF9ERUZfQ19VX01P REUoVEVMT1BUX0ZPUldBUkRfWCkgPSBUTl9OR19BQzsKLSAgICBURUxPUFRfU0IoVEVMT1BUX0ZP UldBUkRfWCkuZm9yd2FyZF94Lmxpc3Rlbl9zb2NrZXQgPSAtMTsKLSAgICBmb3IgKHggPSAwOyB4 IDwgTUFYRldEWDsgeCsrKSB7Ci0gICAgICAgVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZv cndhcmRfeC5jaGFubmVsW3hdLmZkID0gLTE7Ci0gICAgICAgVEVMT1BUX1NCKFRFTE9QVF9GT1JX QVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW3hdLmlkID0gLTE7Ci0gICAgICAgVEVMT1BUX1NCKFRF TE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW3hdLm5lZWRfdG9fc2VuZF94YXV0aCA9 IDA7Ci0gICAgICAgVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVs W3hdLnN1c3BlbmQgPSAwOwotICAgIH0KLSNlbmRpZiAvKiBDS19GT1JXQVJEX1ggKi8KLQotI2lm ZGVmIFROX0NPTVBPUlQKLSAgICBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfQ09NUE9SVCkg PSBUTl9OR19SUTsKLSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0KLSAgICAvKiBTZXQgdGhlIGlu aXRpYWwgdmFsdWVzIGZvciBjdXJyZW50bHkga25vd24gbW9kZSAqLwotICAgIGZvciAob3B0ID0g VEVMT1BUX0ZJUlNUOyBvcHQgPD0gVEVMT1BUX0xBU1Q7IG9wdCsrKSB7Ci0gICAgICAgIGlmIChU RUxPUFRfT0sob3B0KSkgewotICAgICAgICAgICAgVEVMT1BUX01FX01PREUob3B0KSA9IHNzdGVs bmV0ID8KLSAgICAgICAgICAgICAgVEVMT1BUX0RFRl9TX01FX01PREUob3B0KSA6Ci0gICAgICAg ICAgICAgICAgVEVMT1BUX0RFRl9DX01FX01PREUob3B0KTsKLSAgICAgICAgICAgIFRFTE9QVF9V X01PREUob3B0KSA9IHNzdGVsbmV0ID8KLSAgICAgICAgICAgICAgVEVMT1BUX0RFRl9TX1VfTU9E RShvcHQpIDoKLSAgICAgICAgICAgICAgICBURUxPUFRfREVGX0NfVV9NT0RFKG9wdCk7Ci0gICAg ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuKDEpOwotfQotCi0KLS8qIFNlbmQgRGVsYXllZCBTdWJu ZWdvdGlhdGlvbnMgKi8KLQotVk9JRAotdG5fc2RzYigpIHsKLSAgICAvKiBpZiAoIUlTX1RFTE5F VCgpKSByZXR1cm47ICovCi0KLSAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9UVFlQRSkudGVybS5u ZWVkX3RvX3NlbmQpIHsKLSAgICAgICAgdG5fc3R0eXAoKTsKLSAgICAgICAgVEVMT1BUX1NCKFRF TE9QVF9UVFlQRSkudGVybS5uZWVkX3RvX3NlbmQgPSAwOwotICAgIH0KLSNpZmRlZiBDS19FTlZJ Uk9OTUVOVAotICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX05FV0VOVklST04pLmVudi5uZWVkX3Rv X3NlbmQgJiYKLSAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9ORVdFTlZJUk9OKS5lbnYuc3RyKSB7 Ci0gICAgICAgIHRuX3NuZW52KChDSEFSICopVEVMT1BUX1NCKFRFTE9QVF9ORVdFTlZJUk9OKS5l bnYuc3RyLAotICAgICAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX05FV0VOVklST04pLmVu di5sZW4pOwotICAgICAgICBmcmVlKFRFTE9QVF9TQihURUxPUFRfTkVXRU5WSVJPTikuZW52LnN0 cik7Ci0gICAgICAgIFRFTE9QVF9TQihURUxPUFRfTkVXRU5WSVJPTikuZW52LnN0cj1OVUxMOwot ICAgICAgICBURUxPUFRfU0IoVEVMT1BUX05FV0VOVklST04pLmVudi5sZW49MDsKLSAgICAgICAg VEVMT1BUX1NCKFRFTE9QVF9ORVdFTlZJUk9OKS5lbnYubmVlZF90b19zZW5kID0gMDsKLSAgICB9 Ci0jaWZkZWYgQ0tfWERJU1BMT0MKLSAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9YRElTUExPQyku eGRpc3AubmVlZF90b19zZW5kKSB7Ci0gICAgICAgIHRuX3N4ZGlzcGxvYygpOwotICAgICAgICBU RUxPUFRfU0IoVEVMT1BUX1hESVNQTE9DKS54ZGlzcC5uZWVkX3RvX3NlbmQgPSAwOwotICAgIH0K LSNlbmRpZiAvKiBDS19YRElTUExPQyAqLwotI2VuZGlmIC8qIENLX0VOVklST05NRU5UICovCi0j aWZkZWYgQ0tfTkFXUwotICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX05BV1MpLm5hd3MubmVlZF90 b19zZW5kKSB7Ci0gICAgICAgIHRuX3NuYXdzKCk7Ci0gICAgICAgIFRFTE9QVF9TQihURUxPUFRf TkFXUykubmF3cy5uZWVkX3RvX3NlbmQgPSAwOwotICAgIH0KLSNlbmRpZiAvKiBDS19OQVdTICov Ci0jaWZkZWYgQ0tfU05ETE9DCi0gICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU05ETE9DKS5zbmRs b2MubmVlZF90b19zZW5kKSB7Ci0gICAgICAgIHRuX3NuZGxvYygpOwotICAgICAgICBURUxPUFRf U0IoVEVMT1BUX1NORExPQykuc25kbG9jLm5lZWRfdG9fc2VuZCA9IDA7Ci0gICAgfQotI2VuZGlm IC8qIENLX1NORExPQyAqLwotI2lmZGVmIENLX0ZPUldBUkRfWAotICAgIGlmIChURUxPUFRfU0Io VEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94Lm5lZWRfdG9fc2VuZCkgewotICAgICAgICBpZiAo IHNzdGVsbmV0ICkKLSAgICAgICAgICAgIGZ3ZHhfc2VuZF9vcHRpb25zKCk7Ci0gICAgICAgIFRF TE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3gubmVlZF90b19zZW5kID0gMDsKLSAg ICB9Ci0jZW5kaWYgLyogQ0tfRk9SV0FSRF9YICovCi0jaWZkZWYgVE5fQ09NUE9SVAotICAgIGlm IChURUxPUFRfU0IoVEVMT1BUX0NPTVBPUlQpLmNvbXBvcnQubmVlZF90b19zZW5kKSB7Ci0gICAg ICAgIHRuX3NuZGNvbXBvcnQoKTsKLSAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9DT01QT1JUKS5j b21wb3J0Lm5lZWRfdG9fc2VuZCA9IDA7Ci0gICAgfQotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8K LQotfQotCi1pbnQKLXRuX3Jlc2V0KCkgewotICAgIGludCB4LG9wdCxjbWQ7Ci0KLSAgICAvKiBp ZiAoIUlTX1RFTE5FVCgpKSByZXR1cm4oMSk7ICovCi0KLSAgICB0bl93YWl0X2lkeCA9IDA7ICAg ICAgICAgICAgICAgICAgICAvKiBDbGVhciB0aGUgdG5fcHVzaCgpIGJ1ZmZlciAqLwotICAgIHRu X3dhaXRfdG1vID0gVE5fVElNRU9VVDsgICAgICAgICAgIC8qIFJlc2V0IHdhaXQgdGltZXIgc3Rh dHMgKi8KLQotICAgIG5mbGFnID0gMDsKLQotICAgIC8qIFJlc2V0IHRoZSBURUxORVQgT1BUSU9O UyBjb3VudHMgKi8KLSAgICBmb3IgKG9wdCA9IFRFTE9QVF9GSVJTVDsgb3B0IDw9IFRFTE9QVF9M QVNUOyBvcHQrKykgewotICAgICAgICBpZiAoVEVMT1BUX09LKG9wdCkpIHsKLSAgICAgICAgICAg IFRFTE9QVF9NRShvcHQpID0gMDsKLSAgICAgICAgICAgIFRFTE9QVF9VKG9wdCkgID0gMDsKLSAg ICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwob3B0KSA9IDA7Ci0gICAgICAgICAgICBU RUxPUFRfVU5BTlNXRVJFRF9ETyhvcHQpICAgPSAwOwotICAgICAgICAgICAgVEVMT1BUX1VOQU5T V0VSRURfV09OVChvcHQpID0gMDsKLSAgICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPTlQo b3B0KSAgID0gMDsKLSAgICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1NCKG9wdCkgICA9IDA7 Ci0gICAgICAgICAgICBURUxPUFRfTUVfTU9ERShvcHQpID0gc3N0ZWxuZXQgPwotICAgICAgICAg ICAgICBURUxPUFRfREVGX1NfTUVfTU9ERShvcHQpIDoKLSAgICAgICAgICAgICAgICBURUxPUFRf REVGX0NfTUVfTU9ERShvcHQpOwotICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShvcHQpID0gc3N0 ZWxuZXQgPwotICAgICAgICAgICAgICBURUxPUFRfREVGX1NfVV9NT0RFKG9wdCkgOgotICAgICAg ICAgICAgICAgIFRFTE9QVF9ERUZfQ19VX01PREUob3B0KTsKLQotI2lmZGVmIERFQlVHCi0gICAg ICAgICAgICBpZiAoZGVibG9nKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChURUxPUFRfTUVf TU9ERShvcHQpKSB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFROX05HX1JGOgotICAgICAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ0bl9pbmkgTUUgUkVGVVNFICIsVEVMT1BUKG9wdCksMCk7 Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBUTl9O R19BQzoKLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwidG5faW5pIE1FIEFDQ0VQVCAi LFRFTE9QVChvcHQpLDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg ICAgICAgIGNhc2UgVE5fTkdfUlE6Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInRu X2luaSBNRSBSRVFVRVNUIixURUxPUFQob3B0KSwwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFROX05HX01VOgotICAgICAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTEwLCJ0bl9pbmkgTUUgUkVRVUlSRSIsVEVMT1BUKG9wdCksMCk7Ci0gICAgICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBz d2l0Y2ggKFRFTE9QVF9VX01PREUob3B0KSkgewotICAgICAgICAgICAgICAgICAgY2FzZSBUTl9O R19SRjoKLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwidG5faW5pIFUgIFJFRlVTRSAi LFRFTE9QVChvcHQpLDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg ICAgICAgIGNhc2UgVE5fTkdfQUM6Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInRu X2luaSBVICBBQ0NFUFQgIixURUxPUFQob3B0KSwwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFROX05HX1JROgotICAgICAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTEwLCJ0bl9pbmkgVSAgUkVRVUVTVCIsVEVMT1BUKG9wdCksMCk7Ci0gICAgICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBUTl9OR19NVToKLSAg ICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwidG5faW5pIFUgIFJFUVVJUkUiLFRFTE9QVChv cHQpLDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICAgICAgICAgIGZvciAoY21kID0g MDsgY21kIDwgNDsgY21kICsrKQotICAgICAgICAgICAgICB0bmNudHNbVEVMT1BUX0lOREVYKG9w dCldW2NtZF0gPSAwOwotICAgICAgICB9Ci0gICAgfQotI2lmZGVmIENLX0VOVklST05NRU5UCi0g ICAgaWYgKCF0bl9lbnZfZmxnKSB7Ci0gICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9ORVdF TlZJUk9OKSA9IFROX05HX1JGOwotICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9ORVdFTlZJ Uk9OKSA9IFROX05HX1JGOwotICAgIH0KLSNlbmRpZiAvKiBDS19FTlZJUk9OTUVOVCAqLwotI2lm ZGVmIENLX1NORExPQwotICAgIGlmICghdG5fbG9jKQotICAgICAgICBURUxPUFRfREVGX0NfTUVf TU9ERShURUxPUFRfU05ETE9DKSA9IFROX05HX1JGOwotI2VuZGlmIC8qIENLX1NORExPQyAqLwot I2lmZGVmIElLU19PUFRJT04KLSAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1l X3N0YXJ0ID0gMDsKLSAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnVfc3RhcnQg PSAwOwotICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfcmVxX3N0YXJ0ID0g MDsKLSAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3JlcV9zdG9wID0gMDsK LSAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnNvcCA9IDA7Ci0jZW5kaWYgLyog SUtTX09QVElPTiAqLwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICBURUxPUFRfU0IoVEVMT1BU X0VOQ1JZUFRJT04pLmVuY3J5cHQuc3RvcCA9IDA7Ci0gICAgVEVMT1BUX1NCKFRFTE9QVF9FTkNS WVBUSU9OKS5lbmNyeXB0Lm5lZWRfdG9fc2VuZCA9IDA7Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElP TiAqLwotI2lmZGVmICBDS19OQVdTCi0gICAgVEVMT1BUX1NCKFRFTE9QVF9OQVdTKS5uYXdzLm5l ZWRfdG9fc2VuZCA9IDA7Ci0gICAgVEVMT1BUX1NCKFRFTE9QVF9OQVdTKS5uYXdzLnggPSAwOwot ICAgIFRFTE9QVF9TQihURUxPUFRfTkFXUykubmF3cy55ID0gMDsKLSNlbmRpZiAvKiBDS19OQVdT ICovCi0gICAgVEVMT1BUX1NCKFRFTE9QVF9UVFlQRSkudGVybS5uZWVkX3RvX3NlbmQgPSAwOwot ICAgIFRFTE9QVF9TQihURUxPUFRfVFRZUEUpLnRlcm0udHlwZVswXSA9ICdcMCc7Ci0jaWZkZWYg Q0tfRU5WSVJPTk1FTlQKLSAgICBURUxPUFRfU0IoVEVMT1BUX05FV0VOVklST04pLmVudi5uZWVk X3RvX3NlbmQgPSAwOwotICAgIGlmICh0bl9maXJzdCkKLSAgICAgICAgVEVMT1BUX1NCKFRFTE9Q VF9ORVdFTlZJUk9OKS5lbnYuc3RyPU5VTEw7Ci0gICAgZWxzZSBpZiAoVEVMT1BUX1NCKFRFTE9Q VF9ORVdFTlZJUk9OKS5lbnYuc3RyKSB7Ci0gICAgICAgIGZyZWUoVEVMT1BUX1NCKFRFTE9QVF9O RVdFTlZJUk9OKS5lbnYuc3RyKTsKLSAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9ORVdFTlZJUk9O KS5lbnYuc3RyPU5VTEw7Ci0gICAgfQotICAgIFRFTE9QVF9TQihURUxPUFRfTkVXRU5WSVJPTiku ZW52Lmxlbj0wOwotI2lmZGVmIENLX1hESVNQTE9DCi0gICAgVEVMT1BUX1NCKFRFTE9QVF9YRElT UExPQykueGRpc3AubmVlZF90b19zZW5kID0gMDsKLSNlbmRpZiAvKiBDS19YRElTUExPQyAqLwot I2VuZGlmIC8qIENLX0VOVklST05NRU5UICovCi0jaWZkZWYgQ0tfU05ETE9DCi0gICAgVEVMT1BU X1NCKFRFTE9QVF9TTkRMT0MpLnNuZGxvYy5uZWVkX3RvX3NlbmQgPSAwOwotI2VuZGlmIC8qIENL X1NORExPQyAqLwotI2lmZGVmIENLX0ZPUldBUkRfWAotICAgIFRFTE9QVF9TQihURUxPUFRfRk9S V0FSRF9YKS5mb3J3YXJkX3gubmVlZF90b19zZW5kID0gMDsKLSAgICBURUxPUFRfU0IoVEVMT1BU X0ZPUldBUkRfWCkuZm9yd2FyZF94Lmxpc3Rlbl9zb2NrZXQgPSAtMTsKLSAgICBmb3IgKHggPSAw OyB4IDwgTUFYRldEWDsgeCsrKSB7Ci0gICAgICAgVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gp LmZvcndhcmRfeC5jaGFubmVsW3hdLmZkID0gLTE7Ci0gICAgICAgVEVMT1BUX1NCKFRFTE9QVF9G T1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW3hdLmlkID0gLTE7Ci0gICAgICAgVEVMT1BUX1NC KFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW3hdLm5lZWRfdG9fc2VuZF94YXV0 aCA9IDA7Ci0gICAgICAgVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFu bmVsW3hdLnN1c3BlbmQgPSAwOwotICAgIH0KLSAgICAvKiBSZXNldCBYYXV0aCBkYXRhICovCi0g ICAgaWYgKCByZWFsX3hhdXRoICkgewotICAgICAgICBYYXVEaXNwb3NlQXV0aChyZWFsX3hhdXRo KTsKLSAgICAgICAgcmVhbF94YXV0aCA9IE5VTEw7Ci0gICAgfQotICAgIGlmICggZmFrZV94YXV0 aC5uYW1lICkKLSAgICAgICAgZnJlZShmYWtlX3hhdXRoLm5hbWUpOwotICAgIGlmICggZmFrZV94 YXV0aC5kYXRhICkKLSAgICAgICAgZnJlZShmYWtlX3hhdXRoLmRhdGEpOwotICAgIGlmICggZmFr ZV94YXV0aC5hZGRyZXNzICkKLSAgICAgICAgZnJlZShmYWtlX3hhdXRoLmFkZHJlc3MpOwotICAg IGlmICggZmFrZV94YXV0aC5udW1iZXIgKQotICAgICAgICBmcmVlKGZha2VfeGF1dGgubnVtYmVy KTsKLSAgICBtZW1zZXQoJmZha2VfeGF1dGgsMCxzaXplb2YoZmFrZV94YXV0aCkpOwotI2lmZGVm IE5UCi0gICAgVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC50aHJlYWRfc3Rh cnRlZCA9IDA7Ci0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBDS19GT1JXQVJEX1ggKi8KLSNp ZmRlZiBDS19TU0wKLSAgICBpZiAodGxzX29ubHlfZmxhZyB8fCBzc2xfb25seV9mbGFnKSB7Ci0g ICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpID0gVE5fTkdfUkY7Ci0gICAg ICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX1NUQVJUX1RMUykgPSBUTl9OR19SRjsKLSAgICB9Ci0g ICAgVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy51X2ZvbGxvd3MgPSAwOwot ICAgIFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cyA9IDA7 Ci0gICAgVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5hdXRoX3JlcXVlc3Qg PSAwOwotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgIGlm ICghY2tfY3J5cHRfaXNfaW5zdGFsbGVkKCkKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgfHwgdGxz X29ubHlfZmxhZyB8fCBzc2xfb25seV9mbGFnCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAg ICkgewotICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19S RjsKLSAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsK LSAgICB9Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotCi0jaWZkZWYgVE5fQ09NUE9SVAot ICAgIFRFTE9QVF9TQihURUxPUFRfQ09NUE9SVCkuY29tcG9ydC5uZWVkX3RvX3NlbmQgPSAwOwot ICAgIFRFTE9QVF9TQihURUxPUFRfQ09NUE9SVCkuY29tcG9ydC53YWl0X2Zvcl9zYiA9IDA7Ci0g ICAgVEVMT1BUX1NCKFRFTE9QVF9DT01QT1JUKS5jb21wb3J0LndhaXRfZm9yX21zID0gMDsKLSAg ICB0bmNfaW5pdCgpOwotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLQotICAgIHRuX2ZpcnN0ID0g MDsgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIGxvbmdlciB0aGUgZmlyc3QgdGltZSBpbml0 ICovCi0KLSNpZmRlZiBPUzIKLSAgICB0dG51bSA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBSZXNldCBUZXJtVHlwZSBuZWdvdGlhdGlvbiAqLwotICAgIHR0bnVtZW5kID0gMDsKLSNl bmRpZiAvKiBPUzIgKi8KLQotICAgIHJldHVybigwKTsKLX0KLQotaW50Ci10bl9zdGFydCgpIHsK LSAgICBpbnQgd2FpdCwgeCwgb3B0OwotCi0gICAgLyogaWYgKCFJU19URUxORVQoKSkgcmV0dXJu KDApOyAqLwotCi0gICAgaWYgKHRuX2luaXQgJiYgdG5fYmVndW4pCi0gICAgICAgIHJldHVybigw KTsKLSAgICB0bl9iZWd1biA9IDE7Ci0KLSAgICBkZWJ1ZyhGMTExLCJ0bl9zdGFydCIsInNzdGVs bmV0Iixzc3RlbG5ldCk7Ci0gICAgd2FpdCA9IDA7Ci0gICAgaWYgKHRuX2R1cGxleCkgIHsKLSAg ICAgICAgb2xkcGxleCA9IGR1cGxleDsgICAgICAgICAgICAgICAvKiBzYXZlIG9sZCBkdXBsZXgg dmFsdWUgKi8KLSAgICAgICAgZHVwbGV4ID0gMTsgICAgICAgICAgICAgICAgICAgICAvKiBhbmQg c2V0IHRvIGhhbGYgZHVwbGV4IGZvciB0ZWxuZXQgKi8KLSAgICB9Ci0jaWZkZWYgQ0tfU1NMCi0g ICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX1NUQVJUX1RMUykgJiYKLSAgICAgICAgVEVMT1BUX01F X01PREUoVEVMT1BUX1NUQVJUX1RMUykgPj0gVE5fTkdfUlEpIHsKLSAgICAgICAgaWYgKHRuX3Nv cHQoV0lMTCwgVEVMT1BUX1NUQVJUX1RMUykgPCAwKQotICAgICAgICAgIHJldHVybigtMSk7Ci0g ICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwoVEVMT1BUX1NUQVJUX1RMUykgPSAxOwotICAg ICAgICB3YWl0ID0gMTsKLSAgICB9Ci0gICAgaWYgKCFURUxPUFRfVShURUxPUFRfU1RBUlRfVExT KSAmJgotICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpID49IFROX05HX1JR KSB7Ci0gICAgICAgIGlmICh0bl9zb3B0KERPLCBURUxPUFRfU1RBUlRfVExTKSA8IDApCi0gICAg ICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE8oVEVMT1BUX1NU QVJUX1RMUykgPSAxOwotICAgICAgICB3YWl0ID0gMTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1NM ICovCi0KLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotICAgIGRlYnVnKEYxMTAsInRuX2luaSgp IENLX0FVVEhFTlRJQ0FUSU9OIiwiIiwwKTsKLSAgICBpZiAodG5faW5pdCkgICAgICAgICAgICAg ICAgLyogdG5faW5pKCkgbWlnaHQgYmUgY2FsbGVkIHJlY3Vyc2l2ZWx5ICovCi0gICAgICByZXR1 cm4oMCk7Ci0gICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSAmJgotICAg ICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID49IFROX05HX1JRKSB7 Ci0gICAgICAgIGlmICh0bl9zb3B0KFdJTEwsIFRFTE9QVF9BVVRIRU5USUNBVElPTikgPCAwKQot ICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwoVEVM T1BUX0FVVEhFTlRJQ0FUSU9OKSA9IDE7Ci0gICAgICAgIHdhaXQgPSAxOwotICAgIH0KLSAgICBp ZiAoIVRFTE9QVF9VKFRFTE9QVF9BVVRIRU5USUNBVElPTikgJiYKLSAgICAgICAgVEVMT1BUX1Vf TU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID49IFROX05HX1JRKSB7Ci0gICAgICAgIGlmICh0 bl9zb3B0KERPLCBURUxPUFRfQVVUSEVOVElDQVRJT04pIDwgMCkKLSAgICAgICAgICByZXR1cm4o LTEpOwotICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9ETyhURUxPUFRfQVVUSEVOVElDQVRJT04p ID0gMTsKLSAgICAgICAgd2FpdCA9IDE7Ci0gICAgfQotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAg ICBpZiAoVEVMT1BUX1VfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID09IFROX05HX1JGICYm Ci0gICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID09IFROX05H X1JGKSB7Ci0gICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05H X1JGOwotICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JG OwotICAgIH0KLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jZW5kaWYgLyogQ0tfQVVUSEVO VElDQVRJT04gKi8KLQotI2lmZGVmIENLX05BV1MKLSNpZm5kZWYgTk9MT0NBTAotICAgIGRlYnVn KEYxMTAsInRuX2luaSgpIENLX05BV1MgIU5PTE9DQUwiLCIiLDApOwotICAgIGlmICghc3N0ZWxu ZXQpIHsKLSAgICAgICAgLyogQ29uc29sZSB0ZXJtaW5hbCBzY3JlZW4gcm93cyBhbmQgY29sdW1u cyAqLwotI2lmZGVmIE9TMgotICAgICAgICBkZWJ1ZyhGMTAxLAotICAgICAgICAgICAgICAidG5f aW5pIHR0X3Jvd3MgMSIsCi0gICAgICAgICAgICAgICIiLAotICAgICAgICAgICAgICBWc2Nybkdl dEhlaWdodChWVEVSTSktKHR0X3N0YXR1c1tWVEVSTV0/MTowKQotICAgICAgICAgICAgICApOwot ICAgICAgICBkZWJ1ZyhGMTAxLCJ0bl9pbmkgdHRfY29scyAxIiwiIixWc2NybkdldFdpZHRoKFZU RVJNKSk7Ci0gICAgICAgIC8qIE5vdCBrbm93biB5ZXQgKi8KLSAgICAgICAgaWYgKFZzY3JuR2V0 V2lkdGgoVlRFUk0pIDwgMCB8fAotICAgICAgICAgICAgVnNjcm5HZXRIZWlnaHQoVlRFUk0pLSh0 dF9zdGF0dXNbVlRFUk1dPzE6MCkgPCAwKSB7Ci0gICAgICAgICAgICB0dGd3c2l6KCk7ICAgICAg ICAgICAgICAgICAgLyogVHJ5IHRvIGZpbmQgb3V0ICovCi0gICAgICAgIH0KLSAgICAgICAgZGVi dWcoRjEwMSwKLSAgICAgICAgICAgICAgInRuX2luaSB0dF9yb3dzIDIiLAotICAgICAgICAgICAg ICAiIiwKLSAgICAgICAgICAgICAgVnNjcm5HZXRIZWlnaHQoVlRFUk0pLSh0dF9zdGF0dXNbVlRF Uk1dPzE6MCkKLSAgICAgICAgICAgICAgKTsKLSAgICAgICAgZGVidWcoRjEwMSwidG5faW5pIHR0 X2NvbHMgMiIsIiIsVnNjcm5HZXRXaWR0aChWVEVSTSkpOwotICAgICAgICAvKiBOb3cgZG8gd2Ug a25vdz8gKi8KLSAgICAgICAgaWYgKFZzY3JuR2V0V2lkdGgoVlRFUk0pID4gMCAmJgotICAgICAg ICAgICAgVnNjcm5HZXRIZWlnaHQoVlRFUk0pLSh0dF9zdGF0dXNbVlRFUk1dPzE6MCkgPiAwKSB7 Ci0gICAgICAgICAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfTkFXUykgJiYKLSAgICAgICAgICAg ICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfTkFXUykgPj0gVE5fTkdfUlEpIHsKLSAgICAgICAg ICAgICAgICBpZiAodG5fc29wdChXSUxMLCBURUxPUFRfTkFXUykgPCAwKQotICAgICAgICAgICAg ICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9XSUxM KFRFTE9QVF9OQVdTKSA9IDE7Ci0gICAgICAgICAgICAgICAgd2FpdCA9IDE7Ci0gICAgICAgICAg ICB9Ci0gICAgICAgIH0KLSNlbHNlIC8qIE9TMiAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJ0bl9p bmkgdHRfcm93cyAxIiwiIix0dF9yb3dzKTsKLSAgICAgICAgZGVidWcoRjEwMSwidG5faW5pIHR0 X2NvbHMgMSIsIiIsdHRfY29scyk7Ci0gICAgICAgIGlmICh0dF9yb3dzIDwgMCB8fCB0dF9jb2xz IDwgMCkgeyAvKiBOb3Qga25vd24geWV0ICovCi0gICAgICAgICAgICB0dGd3c2l6KCk7ICAgICAg ICAgICAgICAgICAgLyogVHJ5IHRvIGZpbmQgb3V0ICovCi0gICAgICAgIH0KLSAgICAgICAgZGVi dWcoRjEwMSwidG5faW5pIHR0X3Jvd3MgMiIsIiIsdHRfcm93cyk7Ci0gICAgICAgIGRlYnVnKEYx MDEsInRuX2luaSB0dF9jb2xzIDIiLCIiLHR0X2NvbHMpOwotICAgICAgICBpZiAodHRfcm93cyA+ IDAgJiYgdHRfY29scyA+IDApIHsgLyogTm93IGRvIHdlIGtub3c/ICovCi0gICAgICAgICAgICBp ZiAoIVRFTE9QVF9NRShURUxPUFRfTkFXUykgJiYKLSAgICAgICAgICAgICAgICBURUxPUFRfTUVf TU9ERShURUxPUFRfTkFXUykgPj0gVE5fTkdfUlEpIHsKLSAgICAgICAgICAgICAgICBpZiAodG5f c29wdChXSUxMLCBURUxPUFRfTkFXUykgPCAwKQotICAgICAgICAgICAgICAgICAgcmV0dXJuKC0x KTsKLSAgICAgICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9XSUxMKFRFTE9QVF9OQVdTKSA9 IDE7Ci0gICAgICAgICAgICAgICAgd2FpdCA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K LSNlbmRpZiAvKiBPUzIgKi8KLSAgICB9IGVsc2UKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0gICAg ewotICAgICAgICBpZiAoIVRFTE9QVF9VKFRFTE9QVF9OQVdTKSAmJgotICAgICAgICAgICAgVEVM T1BUX1VfTU9ERShURUxPUFRfTkFXUykgPj0gVE5fTkdfUlEpIHsKLSAgICAgICAgICAgIGlmICh0 bl9zb3B0KERPLCBURUxPUFRfTkFXUykgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oLTEpOwot ICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE8oVEVMT1BUX05BV1MpID0gMTsKLSAgICAg ICAgICAgIHdhaXQgPSAxOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIENLX05BV1MgKi8K LQotICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9TR0EpICYmCi0gICAgICAgIFRFTE9QVF9NRV9N T0RFKFRFTE9QVF9TR0EpID49IFROX05HX1JRKSB7Ci0gICAgICAgIGlmICh0bl9zb3B0KFdJTEws IFRFTE9QVF9TR0EpIDwgMCkKLSAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICBURUxPUFRf VU5BTlNXRVJFRF9XSUxMKFRFTE9QVF9TR0EpID0gMTsKLSAgICAgICAgd2FpdCA9IDE7Ci0gICAg fQotICAgIGlmICghVEVMT1BUX1UoVEVMT1BUX1NHQSkgJiYKLSAgICAgICAgVEVMT1BUX1VfTU9E RShURUxPUFRfU0dBKSA+PSBUTl9OR19SUSkgewotICAgICAgICBpZiAodG5fc29wdChETywgVEVM T1BUX1NHQSkgPCAwKQotICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIFRFTE9QVF9VTkFO U1dFUkVEX0RPKFRFTE9QVF9TR0EpID0gMTsKLSAgICAgICAgd2FpdCA9IDE7Ci0gICAgfQotICAg IGlmICghdG5fZHVwbGV4KSB7Ci0gICAgICAgIGlmICghVEVMT1BUX1UoVEVMT1BUX0VDSE8pICYm Ci0gICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FQ0hPKSA+PSBUTl9OR19SUSkgewot ICAgICAgICAgICAgaWYgKHRuX3NvcHQoRE8sIFRFTE9QVF9FQ0hPKSA8IDApCi0gICAgICAgICAg ICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9ETyhURUxPUFRf RUNITykgPSAxOwotICAgICAgICAgICAgd2FpdCA9IDE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg aWYgKCFURUxPUFRfTUUoVEVMT1BUX0VDSE8pICYmCi0gICAgICAgIFRFTE9QVF9NRV9NT0RFKFRF TE9QVF9FQ0hPKSA+PSBUTl9OR19SUSkgewotICAgICAgICBpZiAodG5fc29wdChXSUxMLCBURUxP UFRfRUNITykgPCAwKQotICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIFRFTE9QVF9VTkFO U1dFUkVEX1dJTEwoVEVMT1BUX0VDSE8pID0gMTsKLSAgICAgICAgd2FpdCA9IDE7Ci0gICAgfQot Ci0gICAgZGVidWcoRjEwMCwidG5faW5pIGFib3V0IHRvIHNlbmQgV0lMTCBUVFlQRSBpZiByZXF1 ZXN0ZWQiLCIiLDApOwotLyoKLSAgVGFsa2luZyB0byBURUxORVQgcG9ydCwgc28gc2VuZCBXSUxM IFRFUk1JTkFMIFRZUEUgYW5kIERPIFNHQS4KLSAgQWxzbyBzZW5kIFdJTEwgTkFXUyBpZiB3ZSBr bm93IG91ciBzY3JlZW4gZGltZW5zaW9ucy4KLSovCi0gICAgaWYgKCFURUxPUFRfTUUoVEVMT1BU X1RUWVBFKSAmJgotICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfVFRZUEUpID49IFROX05H X1JRKSB7Ci0gICAgICAgIGlmICgoeCA9IHRuX3NvcHQoV0lMTCxURUxPUFRfVFRZUEUpKSA8IDAp IHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsInRuX2luaSB0bl9zb3B0IFdJTEwgVFRZUEUgZmFp bGVkIiwiIix4KTsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLSAgICAgICAg VEVMT1BUX1VOQU5TV0VSRURfV0lMTChURUxPUFRfVFRZUEUpID0gMTsKLSAgICAgICAgd2FpdCA9 IDE7Ci0gICAgICAgIGRlYnVnKEYxMDAsInRuX2luaSBzZW50IFdJTEwgVFRZUEUgb2siLCIiLDAp OwotICAgIH0KLSAgICBpZiAoIVRFTE9QVF9VKFRFTE9QVF9UVFlQRSkgJiYKLSAgICAgICAgVEVM T1BUX1VfTU9ERShURUxPUFRfVFRZUEUpID49IFROX05HX1JRKSB7Ci0gICAgICAgIGlmICgoeCA9 IHRuX3NvcHQoRE8sVEVMT1BUX1RUWVBFKSkgPCAwKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAx LCJ0bl9pbmkgdG5fc29wdCBETyBUVFlQRSBmYWlsZWQiLCIiLHgpOwotICAgICAgICAgICAgcmV0 dXJuKC0xKTsKLSAgICAgICAgfQotICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9ETyhURUxPUFRf VFRZUEUpID0gMTsKLSAgICAgICAgd2FpdCA9IDE7Ci0gICAgICAgIGRlYnVnKEYxMDAsInRuX2lu aSBzZW50IERPIFRUWVBFIG9rIiwiIiwwKTsKLSAgICB9Ci0gICAgaWYgKCFURUxPUFRfTUUoVEVM T1BUX0JJTkFSWSkgJiYKLSAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BUX0JJTkFSWSkgPj0g VE5fTkdfUlEpIHsKLSAgICAgICAgaWYgKHRuX3NvcHQoV0lMTCwgVEVMT1BUX0JJTkFSWSkgPCAw KQotICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwo VEVMT1BUX0JJTkFSWSkgPSAxOwotICAgICAgICB3YWl0ID0gMTsKLSAgICB9Ci0gICAgaWYgKCFU RUxPUFRfVShURUxPUFRfQklOQVJZKSAmJgotICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9C SU5BUlkpID49IFROX05HX1JRKSB7Ci0gICAgICAgIGlmICh0bl9zb3B0KERPLCBURUxPUFRfQklO QVJZKSA8IDApCi0gICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgVEVMT1BUX1VOQU5TV0VS RURfRE8oVEVMT1BUX0JJTkFSWSkgPSAxOwotICAgICAgICB3YWl0ID0gMTsKLSAgICB9Ci0jaWZk ZWYgQ0tfU05ETE9DCi0gICAgaWYgKHRuX2xvYykgewotICAgICAgICBpZiAoIVRFTE9QVF9NRShU RUxPUFRfU05ETE9DKSAmJgotICAgICAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BUX1NORExP QykgPj0gVE5fTkdfUlEpIHsKLSAgICAgICAgICAgIGlmICh0bl9zb3B0KFdJTEwsIFRFTE9QVF9T TkRMT0MpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgIFRFTE9Q VF9VTkFOU1dFUkVEX1dJTEwoVEVMT1BUX1NORExPQykgPSAxOwotICAgICAgICAgICAgd2FpdCA9 IDE7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogQ0tfU05ETE9DICovCi0jaWZkZWYgQ0tf RU5WSVJPTk1FTlQKLSNpZmRlZiBDS19GT1JXQVJEX1gKLSAgICBpZiAoIVRFTE9QVF9VKFRFTE9Q VF9GT1JXQVJEX1gpICYmCi0gICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9GT1JXQVJEX1gp ID49IFROX05HX1JRKSB7Ci0gICAgICAgIGlmICh0bl9zb3B0KFdJTEwsIFRFTE9QVF9GT1JXQVJE X1gpIDwgMCkKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIFRFTE9QVF9VTkFOU1dF UkVEX1dJTEwoVEVMT1BUX0ZPUldBUkRfWCkgPSAxOwotICAgICAgICB3YWl0ID0gMTsKLSAgICB9 Ci0jZW5kaWYgLyogRk9SV0FSRF9YICovCi0jaWZkZWYgQ0tfWERJU1BMT0MKLSAgICBpZiAoIVRF TE9QVF9NRShURUxPUFRfWERJU1BMT0MpICYmCi0gICAgICAgICBURUxPUFRfTUVfTU9ERShURUxP UFRfWERJU1BMT0MpID49IFROX05HX1JRKSB7Ci0gICAgICAgIGlmICh0bl9zb3B0KFdJTEwsIFRF TE9QVF9YRElTUExPQykgPCAwKQotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgVEVM T1BUX1VOQU5TV0VSRURfV0lMTChURUxPUFRfWERJU1BMT0MpID0gMTsKLSAgICAgICAgd2FpdCA9 IDE7Ci0gICAgfQotI2VuZGlmIC8qIENLX1hESVNQTE9DICovCi0gICAgLyogV2lsbCBzZW5kIHRl cm1pbmFsIGVudmlyb25tZW50LiAqLwotICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9ORVdFTlZJ Uk9OKSAmJgotICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfTkVXRU5WSVJPTikgPj0gVE5f TkdfUlEpIHsKLSAgICAgICAgaWYgKHRuX3NvcHQoV0lMTCwgVEVMT1BUX05FV0VOVklST04pIDwg MCkKLSAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9XSUxM KFRFTE9QVF9ORVdFTlZJUk9OKSA9IDE7Ci0gICAgICAgIHdhaXQgPSAxOwotICAgIH0KLSAgICBp ZiAoIVRFTE9QVF9VKFRFTE9QVF9ORVdFTlZJUk9OKSAmJgotICAgICAgICBURUxPUFRfVV9NT0RF KFRFTE9QVF9ORVdFTlZJUk9OKSA+PSBUTl9OR19SUSkgewotICAgICAgICBpZiAodG5fc29wdChE TywgVEVMT1BUX05FV0VOVklST04pIDwgMCkKLSAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAg ICBURUxPUFRfVU5BTlNXRVJFRF9ETyhURUxPUFRfTkVXRU5WSVJPTikgPSAxOwotICAgICAgICB3 YWl0ID0gMTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfRU5WSVJPTk1FTlQgKi8KLQotICAgIC8qIFRh a2UgY2FyZSBvZiBhbnkgb3RoZXIgdGVsbmV0IG9wdGlvbnMgdGhhdCByZXF1aXJlIGhhbmRsaW5n LiAqLwotCi0gICAgZm9yIChvcHQgPSBURUxPUFRfRklSU1Q7IG9wdCA8PSBURUxPUFRfTEFTVDsg b3B0KyspIHsKLSAgICAgICAgc3dpdGNoIChvcHQpIHsKLSAgICAgICAgICBjYXNlIFRFTE9QVF9B VVRIRU5USUNBVElPTjoKLSAgICAgICAgICBjYXNlIFRFTE9QVF9FTkNSWVBUSU9OOgotICAgICAg ICAgIGNhc2UgVEVMT1BUX1RUWVBFOgotICAgICAgICAgIGNhc2UgVEVMT1BUX05BV1M6Ci0gICAg ICAgICAgY2FzZSBURUxPUFRfQklOQVJZOgotICAgICAgICAgIGNhc2UgVEVMT1BUX05FV0VOVklS T046Ci0gICAgICAgICAgY2FzZSBURUxPUFRfU05ETE9DOgotICAgICAgICAgIGNhc2UgVEVMT1BU X1hESVNQTE9DOgotICAgICAgICAgIGNhc2UgVEVMT1BUX1NHQToKLSAgICAgICAgICBjYXNlIFRF TE9QVF9FQ0hPOgotICAgICAgICAgIGNhc2UgVEVMT1BUX0tFUk1JVDoKLSAgICAgICAgICBjYXNl IFRFTE9QVF9TVEFSVF9UTFM6Ci0gICAgICAgICAgY2FzZSBURUxPUFRfRk9SV0FSRF9YOgotICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVs dDoKLSAgICAgICAgICAgIGlmIChURUxPUFRfT0sob3B0KSkgewotICAgICAgICAgICAgICAgIGlm ICghVEVMT1BUX01FKG9wdCkgJiYKLSAgICAgICAgICAgICAgICAgICAgVEVMT1BUX01FX01PREUo b3B0KSA+PSBUTl9OR19SUSkgewotICAgICAgICAgICAgICAgICAgICBpZiAodG5fc29wdChXSUxM LCBvcHQpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAg ICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9XSUxMKG9wdCkgPSAxOwotICAgICAgICAgICAg ICAgICAgICB3YWl0ID0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYg KCFURUxPUFRfVShvcHQpICYmCi0gICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VX01PREUob3B0 KSA+PSBUTl9OR19SUSkgewotICAgICAgICAgICAgICAgICAgICBpZiAodG5fc29wdChETywgb3B0 KSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgICAg ICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE8ob3B0KSA9IDE7Ci0gICAgICAgICAgICAgICAgICAg IHdhaXQgPSAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot ICAgIH0KLSAgICBpZiAod2FpdCkgewotICAgICAgICBpZiAodG5fd2FpdCgicHJlLWVuY3J5cHQi KSA8IDApIHsKLSAgICAgICAgICAgIHRuX3B1c2goKTsKLSAgICAgICAgICAgIHJldHVybigtMSk7 Ci0gICAgICAgIH0KLSAgICAgICAgd2FpdCA9IDA7Ci0gICAgfQotCi0jaWZkZWYgQ0tfRU5DUllQ VElPTgotICAgIGlmICh0bl9pbml0KSAgICAgICAgICAgICAgICAvKiB0bl9pbmkoKSBtYXkgYmUg Y2FsbGVkIHJlY3Vyc2l2ZWx5ICovCi0gICAgICByZXR1cm4oMCk7Ci0KLSAgICBpZiAoIVRFTE9Q VF9NRShURUxPUFRfRU5DUllQVElPTikgJiYKLSAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BU X0VOQ1JZUFRJT04pID49IFROX05HX1JRKSB7Ci0gICAgICAgIGlmICh0bl9zb3B0KFdJTEwsIFRF TE9QVF9FTkNSWVBUSU9OKSA8IDApCi0gICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgVEVM T1BUX1VOQU5TV0VSRURfV0lMTChURUxPUFRfRU5DUllQVElPTikgPSAxOwotICAgICAgICB3YWl0 ID0gMTsKLSAgICB9Ci0gICAgaWYgKCFURUxPUFRfVShURUxPUFRfRU5DUllQVElPTikgJiYKLSAg ICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPj0gVE5fTkdfUlEpIHsKLSAg ICAgICAgaWYgKHRuX3NvcHQoRE8sIFRFTE9QVF9FTkNSWVBUSU9OKSA8IDApCi0gICAgICAgICAg cmV0dXJuKC0xKTsKLSAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE8oVEVMT1BUX0VOQ1JZUFRJ T04pID0gMTsKLSAgICAgICAgd2FpdCA9IDE7Ci0gICAgfQotCi0gICAgLyogSWYgd2UgYXJlIGdv aW5nIHRvIGVuY3J5cHQsIHdlIHdhbnQgdG8gZG8gaXQgYmVmb3JlIHdlIHNlbmQgYW55IG1vcmUg Ki8KLSAgICAvKiBkYXRhLCBlc3BlY2lhbGx5IHRoZSB0ZXJtaW5hbCB0eXBlIGFuZCBlbnZpcm9u bWVudCB2YXJpYWJsZXMuICAgICAgICAqLwotICAgIGlmICh3YWl0KSB7Ci0gICAgICAgIGlmICh0 bl93YWl0KCJwb3N0LWVuY3J5cHQiKSA8IDApIHsKLSAgICAgICAgICAgIHRuX3B1c2goKTsKLSAg ICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLSAgICAgICAgd2FpdCA9IDA7Ci0gICAg fQotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLQotICAgIHRuX3Nkc2IoKTsKLQotICAgIGlm ICh0bl9pbml0KSAgICAgICAgICAgICAgICAgICAvKiB0bl9pbmkoKSBtYXkgYmUgY2FsbGVkIHJl Y3Vyc2l2ZWx5ICovCi0gICAgICAgIHJldHVybigwKTsKLQotI2lmZGVmIElLU19PUFRJT04KLSAg ICAvKiBLZXJtaXQgU2VydmVyIG5lZ290aWF0aW9uIG11c3QgZ28gbGFzdCAqLwotICAgIC8qIFNl bmQgVSBiZWZvcmUgTUUgKi8KLQotICAgIGlmICghVEVMT1BUX1UoVEVMT1BUX0tFUk1JVCkgJiYK LSAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfS0VSTUlUKSA+PSBUTl9OR19SUSkgewotICAg ICAgICBpZiAodG5fc29wdChETywgVEVMT1BUX0tFUk1JVCkgPCAwKQotICAgICAgICAgIHJldHVy bigtMSk7Ci0gICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPKFRFTE9QVF9LRVJNSVQpID0gMTsK LSAgICAgICAgd2FpdCA9IDE7Ci0gICAgfQotICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9LRVJN SVQpICYmCi0gICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9LRVJNSVQpID49IFROX05HX1JR KSB7Ci0gICAgICAgIGlmICh0bl9zb3B0KFdJTEwsIFRFTE9QVF9LRVJNSVQpIDwgMCkKLSAgICAg ICAgICByZXR1cm4oLTEpOwotICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9XSUxMKFRFTE9QVF9L RVJNSVQpID0gMTsKLSAgICAgICAgd2FpdCA9IDE7Ci0gICAgfQotI2VuZGlmIC8qIElLU19PUFRJ T04gKi8KLQotICAgIGlmICh3YWl0KSB7Ci0gICAgICAgIGlmICh0bl93YWl0KCJlbmQgb2YgdGVs bmV0IG5lZ290aWF0aW9ucyIpIDwgMCkgewotICAgICAgICAgICAgdG5fcHVzaCgpOwotICAgICAg ICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAgICAgICB3YWl0ID0gMDsKLSAgICB9Ci0K LSAgICB0bl9zZHNiKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIGRlbGF5ZWQg c3VibmVnb3RpYXRpb25zICovCi0gICAgdG5fcHVzaCgpOwotICAgIHJldHVybigwKTsKLX0KLQot LyogU3RhcnQgYSB0ZWxuZXQgY29ubmVjdGlvbi4gKi8KLS8qIFJldHVybnMgLTEgb24gZXJyb3Is IDAgaWYgbm90aGluZyBoYXBwZW5zLCAxIGlmIGluaXQgbXNncyBzZW50IG9rICovCi0KLWludAot dG5faW5pKCkgewotICAgIGludCB4OwotCi0gICAgZGVidWcoRjEwMSwidG5faW5pIHR0bnByb3Rv IiwiIix0dG5wcm90byk7Ci0gICAgZGVidWcoRjEwMSwidG5faW5pIHRuX2luaXQiLCIiLHRuX2lu aXQpOwotCi0gICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSAgICAgICAgICAgICAgLyogTWFrZSBz dXJlIGNvbm5lY3Rpb24gaXMgVENQL0lQICovCi0gICAgICByZXR1cm4oMCk7Ci0vKgotICAgIGlm ICghSVNfVEVMTkVUKCkpCi0gICAgICByZXR1cm4oMCk7Ci0qLwotICAgIGlmICh0bl9pbml0KSAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEhhdmUgd2UgZG9uZSB0aGlzIGFscmVhZHk/ICovCi0g ICAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRG9uJ3QgZG8gaXQgYWdh aW4uICovCi0KLSAgICB0bl9yZXNldCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNl dCB0ZWxuZXQgcGFyYW1ldGVycyAqLwotICAgIHRuX2JlZ3VuID0gMDsgICAgICAgICAgICAgICAg ICAgICAgIC8qIFJlc2V0OyB3aWxsIGJlIHNldCBieSB0bl9zdGFydCgpICovCi0KLSAgICBzd2l0 Y2ggKCB0dG5wcm90byApIHsKLSAgICAgIGNhc2UgTlBfUkxPR0lOOgotICAgICAgY2FzZSBOUF9L NExPR0lOOgotICAgICAgY2FzZSBOUF9FSzRMT0dJTjoKLSAgICAgIGNhc2UgTlBfSzVMT0dJTjoK LSAgICAgIGNhc2UgTlBfRUs1TE9HSU46Ci0gICAgICBjYXNlIE5QX0s1VTJVOgotICAgICAgICB0 bl9pbml0ID0gMTsKLSAgICAgICAgZGVidWcoRjEwMCwidG5faW5pIHRlbG5ldCBuZWdvdGlhdGlv bnMgaWdub3JlZCIsInRuX2luaXQiLHRuX2luaXQpOwotICAgICAgICByZXR1cm4oMCk7Ci0jaWZk ZWYgQ09NTUVOVAotICAgICAgLyogSmVmZidzIGNvZGUgZnJvbSAzMCBEZWMgMjAwNSAtIGRvZXNu J3Qgd29yayB3aXRoIFNTTCBQT1Agc2VydmVyICovCi0gICAgICBjYXNlIE5QX05PTkU6Ci0gICAg ICBjYXNlIE5QX1NTTDoKLSAgICAgIGNhc2UgTlBfVExTOgotICAgICAgICB0dG5wcm90byA9IE5Q X1RFTE5FVDsgICAgICAgICAgIC8qIHByZXRlbmQgaXQncyB0ZWxuZXQgYW55d2F5LCAqLwotICAg ICAgICBvbGRwbGV4ID0gZHVwbGV4OyAgICAgICAgICAgICAgIC8qIHNhdmUgb2xkIGR1cGxleCB2 YWx1ZSAqLwotICAgICAgICBkdXBsZXggPSAxOyAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBz ZXQgdG8gaGFsZiBkdXBsZXggZm9yIHRlbG5ldCAqLwotICAgICAgICBpZiAoaW5zZXJ2ZXIpCi0g ICAgICAgICAgZGVidWcoRjEwMCwidG5faW5pIHNraXBwaW5nIHRlbG5ldCBuZWdvdGlhdGlvbnMi LCIiLDApOwotCWVsc2UKLQkgIHRuX3dhaXQoInRuX2luaSAtIHdhaXRpbmcgdG8gc2VlIGlmIHRl bG5ldCBuZWdvdGlhdGlvbnMgd2VyZSBzZW50Iik7Ci0JdG5fcHVzaCgpOwotICAgICAgICByZXR1 cm4oMCk7Ci0gICAgICBjYXNlIE5QX1NTTF9SQVc6Ci0gICAgICBjYXNlIE5QX1RMU19SQVc6Ci0g ICAgICBjYXNlIE5QX1RDUFJBVzogICAgICAgICAgICAgICAgICAgLyogUmF3IHNvY2tldCByZXF1 ZXN0ZWQuICovCi0gICAgICAgIGRlYnVnKEYxMDAsInRuX2luaSB0ZWxuZXQgbmVnb3RpYXRpb25z IGlnbm9yZWQiLCJ0bl9pbml0Iix0bl9pbml0KTsKLSAgICAgICAgcmV0dXJuKDApOwotI2Vsc2UK LSAgICAgIC8qIE15IGNvZGUgZnJvbSA0IERlYyAyMDA1IC0gd29ya3Mgd2l0aCBTU0wgUE9QIHNl cnZlciAqLwotICAgICAgY2FzZSBOUF9OT05FOgotICAgICAgY2FzZSBOUF9TU0w6Ci0gICAgICBj YXNlIE5QX1RMUzogICAgICAgICAgICAgICAgICAgICAgLyogSWYgbm90IHRhbGtpbmcgdG8gYSB0 ZWxuZXQgcG9ydCwgKi8KLSAgICAgIGNhc2UgTlBfU1NMX1JBVzoJCQkvKiBTU0wgYW5kIFRMUyB3 aXRoIFRlbG5ldCAqLwotICAgICAgY2FzZSBOUF9UTFNfUkFXOgkJCS8qIG5lZ290aWF0aW9ucyBk aXNhYmxlZC4gKi8KLSAgICAgICAgdHRucHJvdG8gPSBOUF9URUxORVQ7ICAgICAgICAgICAvKiBw cmV0ZW5kIGl0J3MgdGVsbmV0IGFueXdheSwgKi8KLSAgICAgICAgb2xkcGxleCA9IGR1cGxleDsg ICAgICAgICAgICAgICAvKiBzYXZlIG9sZCBkdXBsZXggdmFsdWUgKi8KLSAgICAgICAgZHVwbGV4 ID0gMTsgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgc2V0IHRvIGhhbGYgZHVwbGV4IGZvciB0 ZWxuZXQgKi8KLSAgICAgICAgaWYgKGluc2VydmVyKQotICAgICAgICAgIGRlYnVnKEYxMDAsInRu X2luaSBza2lwcGluZyB0ZWxuZXQgbmVnb3RpYXRpb25zIiwiIiwwKTsKLQllbHNlCi0JICB0bl93 YWl0KCJ0bl9pbmkgLSB3YWl0aW5nIHRvIHNlZSBpZiB0ZWxuZXQgbmVnb3RpYXRpb25zIHdlcmUg c2VudCIpOwotCXRuX3B1c2goKTsKLSAgICAgICAgcmV0dXJuKDApOwotICAgICAgY2FzZSBOUF9U Q1BSQVc6ICAgICAgICAgICAgICAgICAgIC8qIFJhdyBzb2NrZXQgcmVxdWVzdGVkLiAqLwotICAg ICAgICBkZWJ1ZyhGMTAwLCJ0bl9pbmkgdGVsbmV0IG5lZ290aWF0aW9ucyBpZ25vcmVkIiwidG5f aW5pdCIsdG5faW5pdCk7Ci0gICAgICAgIHJldHVybigwKTsKLSNlbmRpZgkvKiBDT01NRU5UICov Ci0gICAgICBjYXNlIE5QX0tFUk1JVDogICAgICAgICAgICAgICAgICAgLyogc3dpdGNoaW5nIHRv IFRlbG5ldCBwcm90b2NvbCAqLwotICAgICAgY2FzZSBOUF9TU0xfVEVMTkVUOgotICAgICAgY2Fz ZSBOUF9UTFNfVEVMTkVUOgotICAgICAgICBkZWJ1ZyhGMTAxLCJ0bl9pbmkgc3dpdGNoaW5nIGZy b20gWFhYIHRvIFRlbG5ldCIsIiIsdHRucHJvdG8pOwotICAgICAgICB0dG5wcm90byA9IE5QX1RF TE5FVDsKLSAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCi0gICAgICBkZWZhdWx0OgotICAgICAg ICAvKiBXZSBhcmUgYWxyZWFkeSB1c2luZyBhIHZhcmlhdGlvbiBvbiBUZWxuZXQgcHJvdG9jb2wg Ki8KLSAgICAgICAgOwotICAgIH0KLQotICAgIHggPSB0bl9zdGFydCgpOwotICAgIHRuX2luaXQg PSAxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIHN1Y2Nlc3NmdWwgY29tcGxl dGlvbi4gKi8KLQotICAgIC8qIERvbid0IHNlbmQgYW55dGhpbmcgZWxzZSEgKi8KLSAgICBkZWJ1 ZyhGMTAxLCJ0bl9pbmkgZHVwbGV4IiwiIixkdXBsZXgpOwotICAgIGRlYnVnKEYxMDEsInRuX2lu aSBkb25lLCB0bl9pbml0IiwiIix0bl9pbml0KTsKLSAgICByZXR1cm4oeCk7Ci19Ci0KLWludAot I2lmZGVmIENLX0FOU0lDCi10bl9oZXgoQ0hBUiAqIGJ1ZiwgaW50IGJ1ZmxlbiwgQ0hBUiAqIGRh dGEsIGludCBkYXRhbGVuKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLXRuX2hleChidWYsIGJ1Zmxl biwgZGF0YSwgZGF0YWxlbikKLSAgICBDSEFSICogYnVmOwotICAgIGludCBidWZsZW47Ci0gICAg Q0hBUiAqIGRhdGE7Ci0gICAgaW50IGRhdGFsZW47Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsK LSAgICBpbnQgaSA9IDAsIGogPSAwLCBrID0gMDsKLSAgICBDSEFSIHRtcFsxNl07CQkvKiBpbiBj YXNlIHZhbHVlIGlzIHRyZWF0ZWQgYXMgbmVnYXRpdmUgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAg aW50IHdhc19oZXggPSAxOwotCi0gICAgZm9yIChrPTA7IGsgPCBkYXRhbGVuOyBrKyspIHsKLSAg ICAgICAgaWYgKGRhdGFba10gPCAzMiB8fCBkYXRhW2tdID49IDEyNykgewotICAgICAgICAgICAg c3ByaW50Zih0bXAsIiVzJTAyWCAiLHdhc19oZXg/IiI6IlwiICIsZGF0YVtrXSk7Ci0gICAgICAg ICAgICB3YXNfaGV4ID0gMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNwcmludGYo dG1wLCIlcyVjIix3YXNfaGV4PyJcIiI6IiIsZGF0YVtrXSk7Ci0gICAgICAgICAgICB3YXNfaGV4 ID0gMDsKLSAgICAgICAgfQotICAgICAgICBja3N0cm5jYXQoKGNoYXIgKilidWYsdG1wLGJ1Zmxl bik7Ci0gICAgfQotICAgIGlmICghd2FzX2hleCkKLSAgICAgICAgY2tzdHJuY2F0KChjaGFyICop YnVmLCJcIiAiLGJ1Zmxlbik7Ci0jZWxzZSAvKiBDT01NRU5UICovCi0gICAgaWYgKGRhdGFsZW4g PD0gMCB8fCBkYXRhID09IE5VTEwgfHwgYnVmID09IE5VTEwgfHwgYnVmbGVuIDw9IDApCi0gICAg ICAgIHJldHVybigwKTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBkYXRhbGVuOyBpKyspIHsKLSAg ICAgICAgY2tzdHJuY2F0KChjaGFyICopYnVmLCJcclxuICAiLGJ1Zmxlbik7Ci0gICAgICAgIGZv ciAoaiA9IDAgOyAoaiA8IDE2KTsgaisrKSB7Ci0gICAgICAgICAgICBpZiAoKGkgKyBqKSA8IGRh dGFsZW4pCi0gICAgICAgICAgICAgIHNwcmludGYoKGNoYXIgKil0bXAsCi0gICAgICAgICAgICAg ICAgICAgICAgIiVzJTAyeCAiLAotICAgICAgICAgICAgICAgICAgICAgIChqID09IDggPyAifCAi IDogIiIpLAotICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpIGRhdGFbaSArIGpd Ci0gICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg ICAgc3ByaW50ZigoY2hhciAqKXRtcCwKLSAgICAgICAgICAgICAgICAgICAgICAiJXMgICAiLAot ICAgICAgICAgICAgICAgICAgICAgIChqID09IDggPyAifCAiIDogIiIpCi0gICAgICAgICAgICAg ICAgICAgICAgKTsKLSAgICAgICAgICAgIGNrc3RybmNhdCgoY2hhciAqKWJ1ZiwoY2hhciAqKXRt cCxidWZsZW4pOwotICAgICAgICB9Ci0gICAgICAgIGNrc3RybmNhdCgoY2hhciAqKWJ1ZiwiICIs YnVmbGVuKTsKLSAgICAgICAgZm9yIChrID0gMDsgKGsgPCAxNikgJiYgKChpICsgaykgPCBkYXRh bGVuKTsgaysrKSB7Ci0gICAgICAgICAgICBzcHJpbnRmKChjaGFyICopdG1wLAotICAgICAgICAg ICAgICAgICAgICAgIiVzJWMiLAotICAgICAgICAgICAgICAgICAgICAgKGsgPT0gOCA/ICIgIiA6 ICIiKSwKLSAgICAgICAgICAgICAgICAgICAgIGlzcHJpbnQoKGNoYXIpKGRhdGFbaStrXSkpID8g ZGF0YVtpK2tdIDogJy4nCi0gICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgY2tz dHJuY2F0KChjaGFyICopYnVmLChjaGFyICopdG1wLGJ1Zmxlbik7Ci0gICAgICAgIH0KLSAgICAg ICAgaSArPSBqIC0gMTsKLSAgICB9IC8qIGVuZCBmb3IgKi8KLSAgICBja3N0cm5jYXQoKGNoYXIg KilidWYsIlxyXG4gICIsYnVmbGVuKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgcmV0dXJu KHN0cmxlbigoY2hhciAqKWJ1ZikpOwotfQotCi1WT0lECi10bl9kZWJ1ZyhzKSBjaGFyICpzOyB7 Ci0jaWZkZWYgTk9MT0NBTAotICAgIHJldHVybjsKLSNlbHNlIC8qIE5PTE9DQUwgKi8KLSNpZmRl ZiBPUzIKLSAgICB2b2lkIGN3cml0ZSh1bnNpZ25lZCBzaG9ydCk7Ci0gICAgY2hhciAqcCA9IHM7 Ci0gICAgX1BST1RPVFlQICh2b2lkIG9zMmJvbGQsICh2b2lkKSk7Ci0gICAgZXh0ZXJuIGludCB0 dF90eXBlX21vZGU7Ci0jZW5kaWYgLyogT1MyICovCi0KLSAgICBpZiAoISh0bl9kZWIgfHwgZGVi c2VzKSkKLSAgICAgIHJldHVybjsKLSAgICBkZWJ1ZyhGMTExLCJ0bl9kZWJ1ZyIscyx3aGF0KTsK LSNpZmRlZiBPUzIKLSAgICBpZiAoMSkgewotICAgICAgICBleHRlcm4gdW5zaWduZWQgY2hhciBj b2xvcmNtZDsKLSAgICAgICAgY29sb3JjbWQgXj0gMHg4IDsKLSAgICAgICAgcHJpbnRmKCIlc1xy XG4iLHMpOwotICAgICAgICBjb2xvcmNtZCBePSAweDggOwotICAgIH0KLSAgICBpZiAoIXNjcm5p bml0aWFsaXplZFtWVEVSTV0pIHsKLSAgICAgICAgVVNIT1JUIHgseTsKLSAgICAgICAgY2hlY2tz Y3JlZW5tb2RlKCk7Ci0gICAgICAgIEdldEN1clBvcygmeSwgJngpOwotICAgICAgICBTYXZlQ21k TW9kZSh4KzEseSsxKTsKLSAgICAgICAgc2NybmluaXQoKTsKLSAgICAgICAgUmVzdG9yZUNtZE1v ZGUoKTsKLSAgICB9Ci0KLSAgICBpZiAoIElTVlROVCh0dF90eXBlX21vZGUpICYmIHR0bnVtICE9 IC0xICYmICFkZWJzZXMgKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZXF1ZXN0VnNjcm5NdXRl eCggVlRFUk0sIFNFTV9JTkRFRklOSVRFX1dBSVQgKSA7Ci0KLSAgICBvczJib2xkKCk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBUb2dnbGUgYm9sZG5lc3MgKi8KLSAgICB3aGlsZSAoKnAp Ci0gICAgICBjd3JpdGUoKENIQVIpICpwKyspOyAgICAgICAgICAgICAgLyogR28gYm9sZGx5IC4u LiAqLwotICAgIG9zMmJvbGQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRvZ2dsZSBi b2xkbmVzcyBiYWNrICovCi0gICAgaWYgKGRlYnNlcykgewotICAgICAgICBkZWJzZXMgPSAwOwot ICAgICAgICBjd3JpdGUoKENIQVIpICdcMDE1Jyk7Ci0gICAgICAgIGN3cml0ZSgoQ0hBUikgJ1ww MTInKTsKLSAgICAgICAgZGVic2VzID0gMTsKLSAgICB9IGVsc2UgewotICAgICAgICBjd3JpdGUo KENIQVIpICdcMDE1Jyk7Ci0gICAgICAgIGN3cml0ZSgoQ0hBUikgJ1wwMTInKTsKLSAgICB9Ci0g ICAgUmVsZWFzZVZzY3JuTXV0ZXgoVlRFUk0pIDsKLSNlbHNlCi0gICAgaWYgKHdoYXQgIT0gV19D T05ORUNUICYmIHdoYXQgIT0gV19ESUFMSU5HICYmIAotICAgICAgICB3aGF0ICE9IFdfQ09NTUFO RCAmJiB3aGF0ICE9IFdfTk9USElORykKLSAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBDT05ORUNUL2NvbW1hbmQgbXVzdCBiZSBhY3RpdmUgKi8KLSAgICBjb25vbGwo cyk7Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotfQotCi0vKgotICBQ cm9jZXNzIGluLWJhbmQgVGVsbmV0IG5lZ290aWF0aW9uIGNoYXJhY3RlcnMgZnJvbSB0aGUgcmVt b3RlIGhvc3QuCi0gIENhbGwgd2l0aCB0aGUgdGVsbmV0IElBQyBjaGFyYWN0ZXIgYW5kIHRoZSBj dXJyZW50IGR1cGxleCBzZXR0aW5nCi0gICgwID0gcmVtb3RlIGVjaG8sIDEgPSBsb2NhbCBlY2hv KSwgYW5kIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRvIGNhbGwKLSAgdG8gcmVhZCBtb3JlIGNo YXJhY3RlcnMuICBSZXR1cm5zOgotICAgIDYgaWYgRE8gTE9HT1VUIHdhcyByZWNlaXZlZCBhbmQg YWNjZXB0ZWQKLSAgICA1IGlmIHRoZSBLZXJtaXQgc3RhcnQgb2YgcGFja2V0IGNoYXJhY3RlciBo YXMgY2hhbmdlZAotICAgIDQgaWYgc3RhdGUgb2YgcmVtb3RlIEludGVybmV0IEtlcm1pdCBTZXJ2 aWNlIGhhcyBjaGFuZ2VkCi0gICAgMyBpZiBhIHF1b3RlZCBJQUMgd2FzIHJlY2VpdmVkCi0gICAg MiBpZiBsb2NhbCBlY2hvIG11c3QgYmUgY2hhbmdlZCB0byByZW1vdGUKLSAgICAxIGlmIHJlbW90 ZSBlY2hvIG11c3QgYmUgY2hhbmdlZCB0byBsb2NhbAotICAgIDAgaWYgbm90aGluZyBoYXBwZW5z IG9yIG5vIGFjdGlvbiBuZWNlc3NhcnkKLSAgIC0xIG9uIGZhaWx1cmUgKD0gaW50ZXJuYWwgb3Ig aS9vIGVycm9yKQotKi8KLSNpZmRlZiBJS1NfT1BUSU9OCi1pbnQKLXRuX3Npa3MoY21kKSBpbnQg Y21kOyB7ICAgICAgICAgLyogVEVMTkVUIFNFTkQgSUtTIFNVQiAqLwotICAgIENIQVIgYnVmWzhd OwotI2lmbmRlZiBOT1hGRVIKLSAgICBleHRlcm4gQ0hBUiBteXN0Y2g7ICAgICAgICAgICAgICAg ICAvKiBPdXRnb2luZyBTdGFydCBvZiBQYWNrZXQgQ2hhciAqLwotI2Vsc2UKLSAgICBDSEFSIG15 c3RjaCA9ICdcMSc7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0gICAgaW50IG4sbSxyYzsKLQotICAg IGlmICh0dG5ldCAhPSBORVRfVENQQikgcmV0dXJuKDApOyAgIC8qIE11c3QgYmUgVENQL0lQICov Ci0gICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDApOyAvKiBNdXN0IGJlIHRl bG5ldCBwcm90b2NvbCAqLwotCi0gICAgaWYgKGNtZCA8IEtFUk1JVF9TVEFSVCB8fCBjbWQgPiBL RVJNSVRfUkVTUF9TVE9QKSAvKiBJbGxlZ2FsIHN1YmNvbW1hbmQgKi8KLSAgICAgIHJldHVybigt MSk7Ci0KLSNpZmRlZiBDS19TU0wKLSAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMp LnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jZW5k aWYgLyogQ0tfU1NMICovCi0gICAgaWYgKGNtZCA9PSBLRVJNSVRfU1RBUlQgfHwgY21kID09IEtF Uk1JVF9SRVNQX1NUQVJUKSB7Ci0gICAgICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJt aXQubWVfc3RhcnQgPSAxOwotICAgIH0gZWxzZSBpZiAoY21kID09IEtFUk1JVF9TVE9QIHx8IGNt ZCA9PSBLRVJNSVRfUkVTUF9TVE9QKSB7Ci0gICAgICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlU KS5rZXJtaXQubWVfc3RhcnQgPSAwOwotICAgIH0gZWxzZSBpZiAoY21kID09IEtFUk1JVF9SRVFf U1RPUCkKLSAgICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfcmVxX3N0b3Ag PSAxOwotICAgIGVsc2UgaWYgKGNtZCA9PSBLRVJNSVRfUkVRX1NUQVJUKQotICAgICAgVEVMT1BU X1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9yZXFfc3RhcnQgPSAxOwotCi0gICAgaWYgKGNt ZCA9PSBLRVJNSVRfU09QKSB7Ci0gICAgICAgIGJ1ZlswXSA9IChDSEFSKSBJQUM7Ci0gICAgICAg IGJ1ZlsxXSA9IChDSEFSKSBTQjsKLSAgICAgICAgYnVmWzJdID0gKENIQVIpIFRFTE9QVF9LRVJN SVQ7Ci0gICAgICAgIGJ1ZlszXSA9IChDSEFSKSAoY21kICYgMHhmZik7Ci0gICAgICAgIGJ1Zls0 XSA9IChDSEFSKSBteXN0Y2g7Ci0gICAgICAgIGJ1Zls1XSA9IChDSEFSKSBJQUM7Ci0gICAgICAg IGJ1Zls2XSA9IChDSEFSKSBTRTsKLSAgICAgICAgYnVmWzddID0gKENIQVIpIDA7Ci0jaWZkZWYg REVCVUcKLSAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMgfHwgZGVibG9nKQotICAgICAgICAg ICAgY2ttYWttc2coIHRuX21zZ19vdXQsVE5fTVNHX0xFTiwiVEVMTkVUIFNFTlQgU0IgS0VSTUlU IFNPUCAiLAotICAgICAgICAgICAgICAgICAgICAgIGNrY3RveChteXN0Y2gsMSksIiBJQUMgU0Ui LE5VTEwpOwotI2VuZGlmIC8qIERFQlVHICovCi0jaWZkZWYgT1MyCi0gICAgICAgIFJlcXVlc3RU ZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwotI2VuZGlmCi0jaWZkZWYgREVCVUcK LSAgICAgICAgZGVidWcoRjEwMSx0bl9tc2dfb3V0LCIiLGNtZCk7Ci0gICAgICAgIGlmICh0bl9k ZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKLSNlbmRpZiAvKiBERUJVRyAqLwot ICAgICAgICByYyA9ICggdHRvbChidWYsNykgPCA3ICk7ICAgICAgICAgICAgICAgIC8qIFNlbmQg aXQuICovCi0jaWZkZWYgT1MyCi0gICAgICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwotI2VuZGlm Ci0gICAgaWYgKHJjKQotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg IGJ1ZlswXSA9IChDSEFSKSBJQUM7Ci0gICAgICAgIGJ1ZlsxXSA9IChDSEFSKSBTQjsKLSAgICAg ICAgYnVmWzJdID0gKENIQVIpIFRFTE9QVF9LRVJNSVQ7Ci0gICAgICAgIGJ1ZlszXSA9IChDSEFS KSAoY21kICYgMHhmZik7Ci0gICAgICAgIGJ1Zls0XSA9IChDSEFSKSBJQUM7Ci0gICAgICAgIGJ1 Zls1XSA9IChDSEFSKSBTRTsKLSAgICAgICAgYnVmWzZdID0gKENIQVIpIDA7Ci0KLSNpZmRlZiBE RUJVRwotICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcyB8fCBkZWJsb2cpIHsKLSAgICAgICAg ICAgIGNoYXIgKiBzID0gMDsKLSAgICAgICAgICAgIHN3aXRjaCAoY21kKSB7Ci0gICAgICAgICAg ICAgIGNhc2UgS0VSTUlUX1NUQVJUOiBzID0gIlNUQVJUIjsgYnJlYWs7Ci0gICAgICAgICAgICAg IGNhc2UgS0VSTUlUX1NUT1A6IHMgPSAiU1RPUCI7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNl IEtFUk1JVF9SRVFfU1RBUlQ6IHMgPSAiUkVRLVNUQVJUIjsgYnJlYWs7Ci0gICAgICAgICAgICAg IGNhc2UgS0VSTUlUX1JFUV9TVE9QOiBzID0gIlJFUS1TVE9QIjsgYnJlYWs7Ci0gICAgICAgICAg ICAgIGNhc2UgS0VSTUlUX1JFU1BfU1RBUlQ6IHMgPSAiUkVTUC1TVEFSVCI7IGJyZWFrOwotICAg ICAgICAgICAgICBjYXNlIEtFUk1JVF9SRVNQX1NUT1A6ICBzID0gIlJFU1AtU1RPUCI7IGJyZWFr OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2ttYWttc2coIHRuX21zZ19vdXQsVE5fTVNH X0xFTiwKLSAgICAgICAgICAgICAgICAgICAgICAiVEVMTkVUIFNFTlQgU0Iga2VybWl0ICIscywi IElBQyBTRSIsTlVMTCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotI2lmZGVmIE9T MgotICAgICAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNl bmRpZgotI2lmZGVmIERFQlVHCi0gICAgICAgIGRlYnVnKEYxMDEsdG5fbXNnX291dCwiIixjbWQp OwotICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7Ci0j ZW5kaWYgLyogREVCVUcgKi8KLSAgICAgICAgcmMgPSAoIHR0b2woYnVmLDYpIDwgNiApOyAgICAg ICAgICAgICAgICAvKiBTZW5kIGl0LiAqLwotI2lmZGVmIE9TMgotICAgICAgICBSZWxlYXNlVGVs bmV0TXV0ZXgoKTsKLSNlbmRpZgotICAgICAgICBpZiAocmMpCi0gICAgICAgICAgICByZXR1cm4o LTEpOwotICAgIH0KLSAgICByZXR1cm4oMSk7Ci19Ci0jZW5kaWYgLyogSUtTX09QVElPTiAqLwot Ci0vKiB0bl9zYigpIHBlcmZvcm1zIFRlbG5ldCBTdWJuZWdvdGlhdGlvbiBQYXJzaW5nIGFuZCBE ZWJ1Z2dpbmcgKi8KLS8qIHJldHVybnMgPD0gMCBvbiBlcnJvciwgMSBvbiBzdWNjZXNzICovCi0v KiB0aGUgbGVuZ3RoIHJldHVybmVkIGluY2x1ZGVzIHRoZSBJQUMgU0UgYnl0ZXMgKi8KLQotaW50 Ci0jaWZkZWYgQ0tfQU5TSUMgICAgICAgICAgICAgICAgICAgICAgICAgLyogVEVMTkVUIFNCICov Ci10bl9zYiggaW50IG9wdCwgaW50ICogbGVuLCBpbnQgKCpmbikoaW50KSApCi0jZWxzZQotdG5f c2IoIG9wdCwgbGVuLCBmbiApIGludCBvcHQ7IGludCAqIGxlbjsgaW50ICgqZm4pKCk7Ci0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLS8qIHRuX3NiICovIHsKLSAgICBpbnQgYywgeCwgeSwgbiwgbSwg ZmxhZzsKLSAgICAvKiBpZiAoIUlTX1RFTE5FVCgpKSByZXR1cm4oMSk7ICovCi0KLSAgICBkZWJ1 ZyhGMTAwLCJFbnRlcmluZyB0bl9zYigpIiwiIiwwKTsKLSAgICAqbGVuID0gMDsgICAgICAgICAg ICAgICAgICAgLyogSW5pdGlhbGl6ZSBMZW4gdG8gMCAqLwotICAgIG4gPSBmbGFnID0gMDsgICAg ICAgICAgICAgICAvKiBGbGFnIGZvciB3aGVuIGRvbmUgcmVhZGluZyBTQiAqLwotICAgIHdoaWxl IChuIDwgVFNCVUZTSVopIHsgICAgICAvKiBMb29wIGxvb2tpbmcgZm9yIElBQyBTRSAqLwotICAg ICAgICBpZiAoKHkgPSAoKmZuKSgwKSkgPCAwKSAvKiBSZWFkIGEgYnl0ZSAqLwotICAgICAgICAg IHJldHVybih5KTsKLSAgICAgICAgeSAmPSAweGZmOyAgICAgICAgICAgICAgLyogTWFrZSBzdXJl IGl0J3MganVzdCA4IGJpdHMuICovCi0gICAgICAgIHNiW24rK10gPSAoY2hhcikgeTsgICAgIC8q IERlcG9zaXQgaW4gYnVmZmVyLiAqLwotICAgICAgICBpZiAoc2VzbG9nICYmIHNlc3NmdCA9PSBY WUZUX0QpIHsgLyogVGFrZSBjYXJlIG9mIHNlc3Npb24gbG9nICovCi0gICAgICAgICAgICBsb2dj aGFyKChjaGFyKSB5KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoeSA9PSBJQUMpIHsgICAgICAg ICAvKiBJZiB0aGlzIGlzIGFuIElBQyAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYg KGZsYWcpIHsgICAgICAgICAvKiBJZiBwcmV2aW91cyBjaGFyIHdhcyBJQUMgICAgICAgICAqLwot ICAgICAgICAgICAgICAgIG4tLTsgICAgICAgICAgICAvKiBpdCdzIHF1b3RlZCwga2VlcCBvbmUg SUFDICAgICAgICAqLwotICAgICAgICAgICAgICAgIGZsYWcgPSAwOyAgICAgICAvKiBhbmQgdHVy biBvZmYgdGhlIGZsYWcuICAgICAgICAgICAqLwotICAgICAgICAgICAgfSBlbHNlIGZsYWcgPSAx OyAgICAvKiBPdGhlcndpc2Ugc2V0IHRoZSBmbGFnLiAgICAgICAgICAqLwotICAgICAgICB9IGVs c2UgaWYgKGZsYWcpIHsgICAgICAvKiBTb21ldGhpbmcgZWxzZSBmb2xsb3dpbmcgSUFDICAgICAq LwotICAgICAgICAgICAgaWYgKHkgPT0gU0UpICAgICAgICAvKiBJZiBub3QgU0UsIGl0J3MgYSBw cm90b2NvbCBlcnJvciAqLwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGVsc2Ug aWYgKHkgPT0gRE9OVCkgeyAvKiBVc2VkIERPTlQgaW5zdGVhZCBvZiBTRSAqLwotICAgICAgICAg ICAgICAgIGRlYnVnKEYxMDAsCi0gICAgICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTdWJuZWdv dGlhdGlvbiBlcnJvciAtIHVzZWQgRE9OVCBpbnN0ZWFkIG9mIFNFISIsCi0gICAgICAgICAgICAg ICAgICAgICAgIiIKLSAgICAgICAgICAgICAgICAgICAgICAsMAotICAgICAgICAgICAgICAgICAg ICAgICk7Ci0gICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCi0gICAgICAgICAg ICAgICAgICB0bl9kZWJ1ZygKLSAgICAgICAgICAgICAgICAgICAgICJURUxORVQgU3VibmVnb3Rp YXRpb24gZXJyb3IgLSB1c2VkIERPTlQgaW5zdGVhZCBvZiBTRSEiKTsKLSAgICAgICAgICAgICAg ICBmbGFnID0gMzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0gZWxzZSB7 ICAgICAgICAgICAgLyogT3RoZXIgcHJvdG9jb2wgZXJyb3IgKi8KLSAgICAgICAgICAgICAgICBm bGFnID0gMDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg fQotCi0jaWZkZWYgQ0tfRk9SV0FSRF9YCi0gICAgICAgIGlmICggb3B0ID09IFRFTE9QVF9GT1JX QVJEX1ggJiYgc2JbMF0gPT0gRldEWF9EQVRBICYmCi0gICAgICAgICAgICAgbiA+PSAoVFNCVUZT SVotNCkgJiYgIWZsYWcgKSB7Ci0gICAgICAgICAgICAvKiBkbyBub3QgbGV0IHRoZSBidWZmZXIg b3ZlciBmbG93ICovCi0gICAgICAgICAgICAvKiB3cml0ZSB0aGUgZGF0YSB0byB0aGUgY2hhbm5l bCBhbmQgY29udGludWUgcHJvY2Vzc2luZyAqLwotICAgICAgICAgICAgLyogdGhlIGluY29taW5n IGRhdGEgdW50aWwgSUFDIFNFIGlzIHJlYWNoZWQuICovCi0gICAgICAgICAgICBzYltuKytdID0g SUFDOwotICAgICAgICAgICAgc2JbbisrXSA9IFNFOwotCi0jaWZkZWYgREVCVUcKLSAgICAgICAg ICAgIGlmICggZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMgKSB7Ci0gICAgICAgICAgICAgICAg aW50IGk7Ci0gICAgICAgICAgICAgICAgY2ttYWttc2coIHRuX21zZyxUTl9NU0dfTEVOLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAiVEVMTkVUIFJDVkQgU0IgIixURUxPUFQob3B0KSwKLQkJ CSAgIiBEQVRBKGJ1ZmZlci1mdWxsKSAiLE5VTEwpOwotICAgICAgICAgICAgICAgIHRuX2hleCgo Q0hBUiAqKXRuX21zZyxUTl9NU0dfTEVOLCZzYlsxXSxuLTMpOwotICAgICAgICAgICAgICAgIGlm IChmbGFnID09IDIpCi0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csIiBTRSIs VE5fTVNHX0xFTik7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoZmxhZyA9PSAzKQotICAgICAg ICAgICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLCIgSUFDIERPTlQiLFROX01TR19MRU4pOwot ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21z ZywiIElBQyBTRSIsVE5fTVNHX0xFTik7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMCx0bl9t c2csIiIsMCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCi0gICAgICAg ICAgICAgICAgICAgIHRuX2RlYnVnKHRuX21zZyk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyog REVCVUcgKi8KLQotICAgICAgICAgICAgaWYgKCBmd2R4X3RuX3NiKHNiLG4pIDwgMCApIHsKLSAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJmeGR4X3RuX3NiKCkgZmFpbGVkIiwiIiwwKTsKLSAg ICAgICAgICAgICAgICAvKiBXZSBjYW4ndCByZXR1cm4gdGhvdWdoIGJlY2F1c2UgdGhhdCB3b3Vs ZCBsZWF2ZSAgKi8KLSAgICAgICAgICAgICAgICAvKiBkYXRhIHRvIGJlIGZvcndhcmRlZCBpbiB0 aGUgcXVldWUgdG8gdGhlIGJlIHNlbnQgKi8KLSAgICAgICAgICAgICAgICAvKiB0byB0aGUgdGVy bWluYWwgZW11bGF0b3IuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIC8qIHJlc2V0IGxlYXZlIHRoZSBtc2cgdHlwZSBhbmQgY2hhbm5lbCBudW1i ZXIgaW4gcGxhY2UgKi8KLSAgICAgICAgICAgIG4gPSAzOwotICAgICAgICB9Ci0jZW5kaWYgLyog Q0tfRk9SV0FSRF9YICovCi0gICAgfQotICAgIGRlYnVnKEYxMTEsInRuX3NiIGVuZCBvZiB3aGls ZSBsb29wIiwiZmxhZyIsZmxhZyk7Ci0gICAgaWYgKCFmbGFnKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgLyogTWFrZSBzdXJlIHdlIGdvdCBhIHZhbGlkIFNCICovCi0gICAgICAgIGRlYnVnKEYx MTEsICJURUxORVQgU3VibmVnb3RpYXRpb24gcHJlbWF0dXJlbHkgYnJva2VuIiwib3B0IixvcHQp OwotICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgewotICAgICAgICAgICAgY2ttYWttc2co IHRuX21zZywgVE5fTVNHX0xFTiwKLSAgICAgICAgICAgICAgICAgICAgICAiVEVMTkVUICIsIFRF TE9QVChvcHQpLAotICAgICAgICAgICAgICAgICAgICAgICIgU3VibmVnb3RpYXRpb24gcHJlbWF0 dXJlbHkgYnJva2VuIixOVUxMCi0gICAgICAgICAgICAgICAgICAgICAgKTsKLQotICAgICAgICAg IHRuX2RlYnVnKHRuX21zZyk7Ci0gICAgICAgIH0KLSAgICAgICAgLyogV2FzIC0xIGJ1dCB0aGF0 IHdvdWxkIGJlIGFuIEkvTyBlcnJvciwgc28gYWJzb3JiIGl0IGFuZCBnbyBvbi4gKi8KLSAgICAg ICAgcmV0dXJuKDApOwotICAgIH0KLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cgfHwgdG5f ZGViIHx8IGRlYnNlcykgewotICAgICAgICBpbnQgaTsKLSAgICAgICAgY2hhciAqIHNbMTZdOwot ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKLSAgICAgICAgICBzW2ldID0gIiI7Ci0g ICAgICAgIGlmIChvcHQgPT0gVEVMT1BUX05BV1MpIHsKLSAgICAgICAgICAgIGkgPSAwOwotICAg ICAgICB9IGVsc2UgewotICAgICAgICAgICAgaSA9IDE7Ci0gICAgICAgICAgICBzWzBdID0gIlVO S05PV04iOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHNiWzBdKSB7Ci0gICAgICAgICAgICAgIGNh c2UgMDoKLSAgICAgICAgICAgICAgICBpZiAob3B0ID09IFRFTE9QVF9GT1JXQVJEX1gpCi0gICAg ICAgICAgICAgICAgICBzWzBdID0gIlNDUkVFTiI7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAo b3B0ID09IFRFTE9QVF9LRVJNSVQpCi0gICAgICAgICAgICAgICAgICBzWzBdID0gIlNUQVJUIjsK LSAgICAgICAgICAgICAgICBlbHNlIGlmIChvcHQgPT0gVEVMT1BUX0xGTE9XKQotICAgICAgICAg ICAgICAgICAgc1swXSA9ICJPRkYiOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9wdCA9PSBU RUxPUFRfQ09NUE9SVCkKLSAgICAgICAgICAgICAgICAgIHNbMF0gPSAiU0lHTkFUVVJFIjsKLSAg ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBzWzBdID0gIklTIjsKLSAgICAg ICAgICAgICAgICBpZiAob3B0ID09IFRFTE9QVF9FTkNSWVBUSU9OKSB7Ci0gICAgICAgICAgICAg ICAgICAgIGkrKzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNiWzFdIDwgRU5DVFlQRV9DTlQp IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNbMV0gPSBlbmN0eXBlX25hbWVzW3NiWzFdXTsK LSAgICAgICAgICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3 aXRjaChzYlsyXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgc1syXSA9ICJGQjY0X0lWIjsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNbMl0gPSAiRkI2NF9JVl9PSyI7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug MzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzJdID0gIkZCNjRfSVZfQkFEIjsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgY2FzZSA0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbMl0gPSAiRkI2NF9DSEFM TEVOR0UiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICAgICAgICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc1syXSA9 ICJGQjY0X1JFU1BPTlNFIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgIHNbMV0gPSAiVU5LTk9XTiI7Ci0gICAgICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG9wdCA9PSBURUxP UFRfQVVUSEVOVElDQVRJT04pIHsKLSAgICAgICAgICAgICAgICAgICAgaSArPSAyOwotICAgICAg ICAgICAgICAgICAgICBzWzFdID0gQVVUSFRZUEVfTkFNRShzYlsxXSk7Ci0gICAgICAgICAgICAg ICAgICAgIHNbMl0gPSBBVVRITU9ERV9OQU1FKHNiWzJdKTsKLSAgICAgICAgICAgICAgICAgICAg aWYgKHNiWzFdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBzd2l0Y2ggKHNiWzNdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNh c2UgMDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHNiWzFdKSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFVVEhUWVBFX05UTE06Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAiTlRMTV9BVVRIIjsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk ZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNdID0gIkFVVEgiOwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN3aXRjaCAoc2JbMV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNhc2UgQVVUSFRZUEVfU1NMOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzWzNdID0gIlNUQVJUIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFVVEhUWVBFX05UTE06Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAiTlRMTV9DSEFMTEVOR0UiOwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10g PSAiUkVKRUNUIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHNiWzFdKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjYXNlIEFVVEhUWVBFX05UTE06Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNbM10gPSAiTlRMTV9SRVNQT05TRSI7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm YXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1szXSA9ICJBQ0NFUFQiOwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN3aXRjaCAoc2JbMV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNhc2UgQVVUSFRZUEVfTlRMTToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc1szXSA9ICJOVExNX0FDQ0VQVCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiAgIC8qIEtFUkJF Uk9TX3Y0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6ICAgLyogU1JQ ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAiQ0hBTExFTkdFIjsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjYXNlIDI6ICAgLyogS0VSQkVST1NfdjUgKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc1szXSA9ICJSRVNQT05TRSI7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBB VVRIVFlQRV9TU0w6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAiUkVK RUNUIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3dpdGNoIChzYlsxXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz ZSBBVVRIVFlQRV9OVExNOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNdID0g Ik5UTE1fUkVKRUNUIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6ICAgLyogS0VSQkVST1NfVjQgKi8K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTogICAvKiBTUlAgKi8KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc1szXSA9ICJSRVNQT05TRSI7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2FzZSAyOiAgIC8qIEtFUkJFUk9TX1Y1ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNbM10gPSAiRk9SV0FSRCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OgotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc2JbMV0pIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNhc2UgNTogICAvKiBTUlAgKi8KLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc1szXSA9ICJGT1JXQVJEIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6ICAgLyog S0VSQkVST1NfVjUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1szXSA9ICJG T1JXQVJEX0FDQ0VQVCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN3aXRjaCAoc2JbMV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNhc2UgNTogICAvKiBTUlAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc1szXSA9ICJGT1JXQVJEX0FDQ0VQVCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiAvKiBLRVJC RVJPU19WNSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNdID0gIkZPUldB UkRfUkVKRUNUIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDc6Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3dpdGNoIChzYlsxXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2FzZSA1OiAgIC8qIFNSUCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz WzNdID0gIkZPUldBUkRfUkVKRUNUIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IC8qIEtFUkJFUk9T X1Y1ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAiVExTX1ZFUklG WSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDg6Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3dpdGNoIChzYlsxXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz ZSA1OiAvKiBTUlAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1szXSA9ICJF WFAiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOToKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzd2l0Y2ggKHNiWzFdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl IDU6IC8qIFNSUCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNdID0gIlBB UkFNUyI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSAx OgotICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0KSB7Ci0gICAgICAgICAgICAgICAgICBjYXNl IFRFTE9QVF9GT1JXQVJEX1g6Ci0gICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiT1BFTiI7Ci0g ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRf TEZMT1c6Ci0gICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiT04iOwotICAgICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0tFUk1JVDoKLSAgICAg ICAgICAgICAgICAgICAgc1swXSA9ICJTVE9QIjsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9DT01QT1JUOgotICAgICAgICAgICAgICAg ICAgICBzWzBdID0gIlNFVC1CQVVEUkFURSI7Ci0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9BVVRIRU5USUNBVElPTjoKLSAgICAgICAg ICAgICAgICAgICAgc1swXSA9ICJTRU5EIjsKLSAgICAgICAgICAgICAgICAgICAgaGV4YnVmWzBd ID0gJ1wwJzsKLSAgICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBuLTI7IGkgKz0gMikgewot ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBBVVRIVFlQRV9OQU1FX09LKHNiW2ldKSAmJgot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVRITU9ERV9OQU1FX09LKHNiW2ldKSkKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBja21ha21zZyggdG5fbXNnLCBUTl9NU0dfTEVOLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVRIVFlQRV9OQU1FKHNiW2ld KSwiICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVVEhNT0RFX05B TUUoc2JbaSsxXSksIiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAg IGNrbWFreG1zZyh0bl9tc2csIFROX01TR19MRU4sCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBBVVRIVFlQRV9OQU1FKHNiW2ldKSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICI9IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNr aXRvYShzYltpXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVRITU9ERV9OQU1FKHNiW2krMV0p LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj0iLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2tpdG9hKHNiW2krMV0pLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIiAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdChoZXhidWYsdG5fbXNn LHNpemVvZihoZXhidWYpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg ICAgICBzWzFdID0gaGV4YnVmOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg ICAgICAgICAgICAgY2FzZSBURUxPUFRfRU5DUllQVElPTjoKLSAgICAgICAgICAgICAgICAgICAg c1swXSA9ICJTVVBQT1JUIjsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCBuLTIpIHsK LSAgICAgICAgICAgICAgICAgICAgICAgIHNbaV0gPSBlbmN0eXBlX25hbWVzW3NiW2ldXTsKLSAg ICAgICAgICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfU1RB UlRfVExTOgotICAgICAgICAgICAgICAgICAgICBzWzBdID0gIkZPTExPV1MiOwotICAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg ICAgICAgICAgIHNbMF0gPSAiU0VORCI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICBzd2l0 Y2ggKG9wdCkgewotICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0ZPUldBUkRfWDoKLSAgICAg ICAgICAgICAgICAgICAgc1swXSA9ICJDTE9TRSI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfTEZMT1c6Ci0gICAgICAgICAgICAgICAg ICAgIHNbMF0gPSAiUkVTVEFSVC1BTlkiOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0tFUk1JVDoKLSAgICAgICAgICAgICAgICAgICAg c1swXSA9ICJSRVEtU1RBUlQiOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgICAgICAgIGNhc2UgVEVMT1BUX0NPTVBPUlQ6Ci0gICAgICAgICAgICAgICAgICAgIHNbMF0g PSAiU0VULURBVEFTSVpFIjsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICAgICAgICBjYXNlIFRFTE9QVF9ORVdFTlZJUk9OOgotICAgICAgICAgICAgICAgICAgICBzWzBd ID0gIklORk8iOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg IGNhc2UgVEVMT1BUX0FVVEhFTlRJQ0FUSU9OOgotICAgICAgICAgICAgICAgICAgICBzWzBdID0g IlJFUExZIjsKLSAgICAgICAgICAgICAgICAgICAgaT00OwotICAgICAgICAgICAgICAgICAgICBz WzFdID0gQVVUSFRZUEVfTkFNRShzYlsxXSk7Ci0gICAgICAgICAgICAgICAgICAgIHNbMl0gPSBB VVRITU9ERV9OQU1FKHNiWzJdKTsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzYlszXSkg ewotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICAgICAgICAg IHN3aXRjaCAoc2JbMV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBVVRIVFlQ RV9OVExNOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAiTlRMTV9BVVRIIjsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNdID0gIkFVVEgi OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgICAgICAg ICAgc3dpdGNoIChzYlsxXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFVVEhU WVBFX05UTE06Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc1szXSA9ICJOVExNX0NIQUxM RU5HRSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc1szXSA9 ICJSRUpFQ1QiOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAg ICAgICAgICAgICAgc3dpdGNoIChzYlsxXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICBj YXNlIEFVVEhUWVBFX05UTE06Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc1szXSA9ICJO VExNX1JFU1BPTlNFIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzWzNdID0gIkFDQ0VQVCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6Ci0gICAg ICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHNiWzFdKSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgIGNhc2UgQVVUSFRZUEVfTlRMTToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBz WzNdID0gIk5UTE1fQUNDRVBUIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBVVRIVFlQRV9LRVJCRVJPU19WNDoKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBVVRIVFlQRV9TUlA6Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgc1szXSA9ICJDSEFMTEVOR0UiOwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFVVEhUWVBFX0tF UkJFUk9TX1Y1OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAiUkVTUE9OU0Ui OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg ICAgICAgY2FzZSA0OgotICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzYlsxXSkgewot ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFVVEhUWVBFX05UTE06Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgc1szXSA9ICJOVExNX1JFSkVDVCI7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQVVUSFRZ UEVfS0VSQkVST1NfVjQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQVVUSFRZUEVf U1JQOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAiUkVTUE9OU0UiOwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAg ICBjYXNlIEFVVEhUWVBFX0tFUkJFUk9TX1Y1OgotICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNbM10gPSAiRk9SV0FSRCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBz d2l0Y2ggKHNiWzFdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQVVUSFRZUEVf U1JQOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAiRk9SV0FSRCI7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg IGNhc2UgQVVUSFRZUEVfS0VSQkVST1NfVjU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg c1szXSA9ICJGT1JXQVJEX0FDQ0VQVCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6Ci0gICAgICAgICAgICAgICAgICAg ICAgICBzd2l0Y2ggKHNiWzFdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQVVU SFRZUEVfU1JQOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAiRk9SV0FSRF9B Q0NFUFQiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICAgICAgICAgICAgICBjYXNlIEFVVEhUWVBFX0tFUkJFUk9TX1Y1OgotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNbM10gPSAiRk9SV0FSRF9SRUpFQ1QiOwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSA3OgotICAgICAg ICAgICAgICAgICAgICAgICAgc3dpdGNoIChzYlsxXSkgewotICAgICAgICAgICAgICAgICAgICAg ICAgICBjYXNlIEFVVEhUWVBFX1NSUDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNd ID0gIkZPUldBUkRfUkVKRUNUIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBVVRIVFlQRV9LRVJCRVJPU19WNToKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNdID0gIlRMU19WRVJJRlkiOwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSA4 OgotICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzYlsxXSkgewotICAgICAgICAgICAg ICAgICAgICAgICAgICBjYXNlIEFVVEhUWVBFX1NSUDoKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzWzNdID0gIkVYUCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgICAgICAgICAgICBjYXNlIDk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBz d2l0Y2ggKHNiWzFdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQVVUSFRZUEVf U1JQOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAiUEFSQU1TIjsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRf RU5DUllQVElPTjoKLSAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJSRVBMWSI7Ci0gICAgICAg ICAgICAgICAgICAgIHNbMV0gPSBlbmN0eXBlX25hbWVzW3NiWzFdXTsKLSAgICAgICAgICAgICAg ICAgICAgaSsrOwotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHNiWzJdKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgICAgICAgICAgaSsrOwotICAg ICAgICAgICAgICAgICAgICAgICAgc1syXSA9ICJGQjY0X0lWIjsKLSAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAg ICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNbMl0gPSAiRkI2NF9J Vl9PSyI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg ICAgICBjYXNlIDM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBzWzJdID0gIkZCNjRfSVZfQkFEIjsKLSAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgICAgICAg ICAgICAgIGkrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNbMl0gPSAiRkI2NF9DSEFMTEVO R0UiOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg ICAgY2FzZSA1OgotICAgICAgICAgICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgICAg ICAgICAgICAgc1syXSA9ICJGQjY0X1JFU1BPTlNFIjsKLSAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg ICAgY2FzZSAzOgotICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0KSB7Ci0gICAgICAgICAgICAg ICAgICBjYXNlIFRFTE9QVF9GT1JXQVJEX1g6Ci0gICAgICAgICAgICAgICAgICAgIHNbMF0gPSAi REFUQSI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2Fz ZSBURUxPUFRfTEZMT1c6Ci0gICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiUkVTVEFSVC1YT04i OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgVEVM T1BUX0tFUk1JVDoKLSAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJSRVEtU1RPUCI7Ci0gICAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfQ09N UE9SVDoKLSAgICAgICAgICAgICAgICAgICAgICBzWzBdID0gIlNFVC1QQVJJVFkiOwotICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfQVVU SEVOVElDQVRJT046Ci0gICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiTkFNRSI7Ci0gICAgICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfRU5DUllQ VElPTjoKLSAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJTVEFSVCI7Ci0gICAgICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0KSB7Ci0g ICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9GT1JXQVJEX1g6Ci0gICAgICAgICAgICAgICAg ICAgIHNbMF0gPSAiT1BUSU9OUyI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICAgICAgY2FzZSBURUxPUFRfS0VSTUlUOgotICAgICAgICAgICAgICAgICAgICBzWzBd ID0gIlNPUCI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg Y2FzZSBURUxPUFRfQ09NUE9SVDoKLSAgICAgICAgICAgICAgICAgICAgICBzWzBdID0gIlNFVC1T VE9QU0laRSI7Ci0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg ICBjYXNlIFRFTE9QVF9FTkNSWVBUSU9OOgotICAgICAgICAgICAgICAgICAgICBzWzBdID0gIkVO RCI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAgICAg IHN3aXRjaCAob3B0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfRk9SV0FSRF9YOgot ICAgICAgICAgICAgICAgICAgICBzWzBdID0gIk9QVElPTl9EQVRBIjsKLSAgICAgICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfRU5DUllQVElPTjoKLSAg ICAgICAgICAgICAgICAgICAgc1swXSA9ICJSRVFVRVNULVNUQVJUIjsKLSAgICAgICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfQ09NUE9SVDoKLSAgICAg ICAgICAgICAgICAgICAgc1swXSA9ICJTRVQtQ09OVFJPTCI7Ci0gICAgICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0KSB7Ci0gICAgICAg ICAgICAgICAgICBjYXNlIFRFTE9QVF9GT1JXQVJEX1g6Ci0gICAgICAgICAgICAgICAgICAgIHNb MF0gPSAiWE9GRiI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg ICAgY2FzZSBURUxPUFRfRU5DUllQVElPTjoKLSAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJS RVFVRVNULUVORCI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg ICAgY2FzZSBURUxPUFRfQ09NUE9SVDoKLSAgICAgICAgICAgICAgICAgICAgICBzWzBdID0gIk5P VElGWS1MSU5FU1RBVEUiOwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIDc6 Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChvcHQpIHsKLSAgICAgICAgICAgICAgICAgIGNhc2Ug VEVMT1BUX0ZPUldBUkRfWDoKLSAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJYT04iOwotICAg ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0VO Q1JZUFRJT046Ci0gICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiRU5DLUtFWUlEIjsKLSAgICAg ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9DT01Q T1JUOgotICAgICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiTk9USUZZLU1PREVNU1RBVEUiOwot ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIDg6Ci0gICAgICAgICAgICAgICAg c3dpdGNoIChvcHQpIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0tFUk1JVDoKLSAg ICAgICAgICAgICAgICAgICAgc1swXSA9ICJSRVNQLVNUQVJUIjsKLSAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9FTkNSWVBUSU9OOgotICAg ICAgICAgICAgICAgICAgICBzWzBdID0gIkRFQy1LRVlJRCI7Ci0gICAgICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfQ09NUE9SVDoKLSAgICAgICAg ICAgICAgICAgICAgICBzWzBdID0gIkZMT1dDT05UUk9MLVNVU1BFTkQiOwotICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICBjYXNlIDk6Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChvcHQp IHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0tFUk1JVDoKLSAgICAgICAgICAgICAg ICAgICAgc1swXSA9ICJSRVNQLVNUT1AiOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0NPTVBPUlQ6Ci0gICAgICAgICAgICAgICAgICAg ICAgc1swXSA9ICJGTE9XQ09OVFJPTC1SRVNVTUUiOwotICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICBjYXNlIDEwOgotICAgICAgICAgICAgICAgICAgc3dpdGNoIChvcHQpIHsKLSAgICAg ICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0NPTVBPUlQ6Ci0gICAgICAgICAgICAgICAgICAgIHNb MF0gPSAiU0VULUxJTkVTVEFURS1NQVNLIjsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg IGNhc2UgMTE6Ci0gICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdCkgewotICAgICAgICAgICAg ICAgICAgY2FzZSBURUxPUFRfQ09NUE9SVDoKLSAgICAgICAgICAgICAgICAgICAgICBzWzBdID0g IlNFVC1NT0RFTVNUQVRFLU1BU0siOwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj YXNlIDEyOgotICAgICAgICAgICAgICAgICAgc3dpdGNoIChvcHQpIHsKLSAgICAgICAgICAgICAg ICAgIGNhc2UgVEVMT1BUX0NPTVBPUlQ6Ci0gICAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJQ VVJHRS1EQVRBIjsKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0KLSAgICAgICAgICAgIGNhc2UgMTAw OgotICAgICAgICAgICAgICAgICAgc3dpdGNoIChvcHQpIHsKLSAgICAgICAgICAgICAgICAgIGNh c2UgVEVMT1BUX0NPTVBPUlQ6Ci0gICAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJTX1NJR05B VFVSRSI7Ci0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMTAxOgotICAgICAg ICAgICAgICAgICAgc3dpdGNoIChvcHQpIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BU X0NPTVBPUlQ6Ci0gICAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJTX1NFVC1CQVVEUkFURSI7 Ci0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMTAyOgotICAgICAgICAgICAg ICAgICAgc3dpdGNoIChvcHQpIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0NPTVBP UlQ6Ci0gICAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJTX1NFVC1EQVRBU0laRSI7Ci0gICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMTAzOgotICAgICAgICAgICAgICAgICAg c3dpdGNoIChvcHQpIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0NPTVBPUlQ6Ci0g ICAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJTX1NFVC1QQVJJVFkiOwotICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDEwNDoKLSAgICAgICAgICAgICAgICAgIHN3aXRjaCAo b3B0KSB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9DT01QT1JUOgotICAgICAgICAg ICAgICAgICAgICAgIHNbMF0gPSAiU19TRVQtU1RPUFNJWkUiOwotICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICBjYXNlIDEwNToKLSAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0KSB7 Ci0gICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9DT01QT1JUOgotICAgICAgICAgICAgICAg ICAgICAgIHNbMF0gPSAiU19TRVQtQ09OVFJPTCI7Ci0gICAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgIGNhc2UgMTA2OgotICAgICAgICAgICAgICAgICAgc3dpdGNoIChvcHQpIHsKLSAgICAg ICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0NPTVBPUlQ6Ci0gICAgICAgICAgICAgICAgICAgICAg c1swXSA9ICJTX05PVElGWS1MSU5FU1RBVEUiOwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICBjYXNlIDEwNzoKLSAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0KSB7Ci0gICAgICAg ICAgICAgICAgICBjYXNlIFRFTE9QVF9DT01QT1JUOgotICAgICAgICAgICAgICAgICAgICAgIHNb MF0gPSAiU19OT1RJRlktTU9ERU1TVEFURSI7Ci0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgIGNhc2UgMTA4OgotICAgICAgICAgICAgICAgICAgc3dpdGNoIChvcHQpIHsKLSAgICAgICAg ICAgICAgICAgIGNhc2UgVEVMT1BUX0NPTVBPUlQ6Ci0gICAgICAgICAgICAgICAgICAgICAgc1sw XSA9ICJTX0ZMT1dDT05UUk9MLVNVU1BFTkQiOwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICBjYXNlIDEwOToKLSAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0KSB7Ci0gICAgICAg ICAgICAgICAgICBjYXNlIFRFTE9QVF9DT01QT1JUOgotICAgICAgICAgICAgICAgICAgICAgIHNb MF0gPSAiU19GTE9XQ09OVFJPTC1SRVNVTUUiOwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICBjYXNlIDExMDoKLSAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0KSB7Ci0gICAgICAg ICAgICAgICAgICBjYXNlIFRFTE9QVF9DT01QT1JUOgotICAgICAgICAgICAgICAgICAgICAgIHNb MF0gPSAiU19TRVQtTElORVNUQVRFLU1BU0siOwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICBjYXNlIDExMToKLSAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0KSB7Ci0gICAgICAg ICAgICAgICAgICBjYXNlIFRFTE9QVF9DT01QT1JUOgotICAgICAgICAgICAgICAgICAgICAgIHNb MF0gPSAiU19TRVQtTU9ERU1TVEFURS1NQVNLIjsKLSAgICAgICAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgY2FzZSAxMTI6Ci0gICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdCkgewotICAgICAg ICAgICAgICAgICAgY2FzZSBURUxPUFRfQ09NUE9SVDoKLSAgICAgICAgICAgICAgICAgICAgICBz WzBdID0gIlNfUFVSR0UtREFUQSI7Ci0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg fQotICAgICAgICB9Ci0jaWZkZWYgTV9YRU5JWAotICAgICAgICB7Ci0gICAgICAgICAgaW50IGxl biwgcGFyYW0sIHBhcmFtX2xlbjsKLSAgICAgICAgICBja21ha21zZyggdG5fbXNnLCBUTl9NU0df TEVOLAotICAgICAgICAgICAgICAgICAgICAiVEVMTkVUIFJDVkQgU0IgIiwKLSAgICAgICAgICAg ICAgICAgICAgVEVMT1BUKG9wdCksIiAiLE5VTEwpOwotICAgICAgICAgIGxlbiA9IHN0cmxlbih0 bl9tc2cpOwotICAgICAgICAgIGZvciAocGFyYW0gPSAwOyBwYXJhbSA8PSAxNTsgcGFyYW0rKykg ewotICAgICAgICAgICAgcGFyYW1fbGVuID0gc3RybGVuKHNbcGFyYW1dKTsKLSAgICAgICAgICAg IGlmIChwYXJhbV9sZW4gPiAwKSB7Ci0gICAgICAgICAgICAgIHN0cmNweSgmdG5fbXNnW2xlbl0s IHNbcGFyYW1dKTsKLSAgICAgICAgICAgICAgbGVuICs9IHBhcmFtX2xlbjsKLSAgICAgICAgICAg ICAgdG5fbXNnW2xlbisrXSA9ICcgJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAg ICAgICAgdG5fbXNnW2xlbl0gPSAnXDAnOwotICAgICAgICB9Ci0jZWxzZSAvKiBNX1hFTklYICov Ci0gICAgICAgIGNrbWFreG1zZyh0bl9tc2csVE5fTVNHX0xFTiwiVEVMTkVUIFJDVkQgU0IgIixU RUxPUFQob3B0KSwiICIsCi0gICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5V TEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBpOwot ICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKLSAgICAgICAgICAgICAgICBp ZiAoc1tpXVswXSkgewotICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLHNbaV0s VE5fTVNHX0xFTik7Ci0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csIiAiLFRO X01TR19MRU4pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot I2VuZGlmIC8qIE1fWEVOSVggKi8KLSAgICAgICAgdG5faGV4KChDSEFSICopdG5fbXNnLFROX01T R19MRU4sJnNiW2ldLG4tMi1pKTsKLSAgICAgICAgaWYgKGZsYWcgPT0gMikKLSAgICAgICAgICBj a3N0cm5jYXQodG5fbXNnLCIgU0UiLFROX01TR19MRU4pOwotICAgICAgICBlbHNlIGlmIChmbGFn ID09IDMpCi0gICAgICAgICAgY2tzdHJuY2F0KHRuX21zZywiIElBQyBET05UIixUTl9NU0dfTEVO KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csIiBJQUMgU0UiLFRO X01TR19MRU4pOwotICAgICAgICBkZWJ1ZyhGMTAwLHRuX21zZywiIiwwKTsKLSAgICAgICAgaWYg KHRuX2RlYiB8fCBkZWJzZXMpCi0gICAgICAgICAgdG5fZGVidWcodG5fbXNnKTsKLSAgICB9Ci0g ICAgZGVidWcoRjExMSwidG5fc2IiLCJsZW4iLG4pOwotI2VuZGlmIC8qIERFQlVHICovCi0gICAg KmxlbiA9IG47ICAgICAgICAgICAvKiByZXR1cm4gbGVuZ3RoICovCi0gICAgcmV0dXJuKDEpOyAg ICAgICAgICAvKiBzdWNjZXNzICovCi19Ci0KLXN0YXRpYyBjaGFyIHJvd3NfYnVmWzE2XSA9IHsg MCwgMCB9OyAvKiBMSU5FUyBFbnZpcm9ubWVudCB2YXJpYWJsZSAqLwotc3RhdGljIGNoYXIgY29s c19idWZbMTZdID0geyAwLCAwIH07IC8qIENPTFVNTlMgRW52aW9ybm1lbnQgdmFyaWFibGUgKi8K LXN0YXRpYyBjaGFyIHRlcm1fYnVmWzY0XSA9IHsgMCwgMCB9OyAvKiBURVJNIEVudmlyb25tZW50 IHZhcmlhYmxlICovCi0KLSNpZmRlZiBDS19DVVJTRVMKLSNpZm5kZWYgVk1TCi0jaWZuZGVmIENP SEVSRU5UCi1fUFJPVE9UWVAoaW50IHRnZXRlbnQsKGNoYXIgKiwgY2hhciAqKSk7Ci0jZW5kaWYg LyogQ09IRVJFTlQgKi8KLSNlbHNlCi0jaWZkZWYgX19ERUNDCi1fUFJPVE9UWVAoaW50IHRnZXRl bnQsKGNoYXIgKiwgY2hhciAqKSk7Ci0jZW5kaWYgLyogX19ERUNDICovCi0jZW5kaWYgLyogVk1T ICovCi1leHRlcm4gY2hhciAqIHRybWJ1ZjsgICAgICAgICAgICAgICAgICAgLyogUmVhbCBjdXJz ZXMgKi8KLSNlbmRpZiAvKiBDS19DVVJTRVMgKi8KLQotI2lmZGVmIENLX0VOQ1JZUFRJT04KLXN0 YXRpYyBpbnQKLXRuX25vX2VuY3J5cHQoKQotewotICAgIC8qIFByZXZlbnQgRW5jcnlwdGlvbiBm cm9tIGJlaW5nIG5lZ290aWF0ZWQgKi8KLSAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQ VElPTikgPSBUTl9OR19SRjsKLSAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9 IFROX05HX1JGOwotCi0gICAgLyogQ2FuY2VsIGFueSBuZWdvdGlhdGlvbiB0aGF0IG1pZ2h0IGhh dmUgc3RhcnRlZCAqLwotICAgIGNrX3RuX2VuY19zdG9wKCk7Ci0KLSAgICBpZiAoVEVMT1BUX01F KFRFTE9QVF9FTkNSWVBUSU9OKSB8fAotICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfV0lMTChU RUxPUFRfRU5DUllQVElPTikpIHsKLSAgICAgICAgVEVMT1BUX01FKFRFTE9QVF9FTkNSWVBUSU9O KSA9IDA7Ci0gICAgICAgIGlmICh0bl9zb3B0KFdPTlQsVEVMT1BUX0VOQ1JZUFRJT04pIDwgMCkK LSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1dPTlQo VEVMT1BUX0VOQ1JZUFRJT04pID0gMTsKLSAgICB9Ci0gICAgaWYgKFRFTE9QVF9VKFRFTE9QVF9F TkNSWVBUSU9OKSB8fAotICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE8oVEVMT1BUX0VOQ1JZ UFRJT04pKSB7Ci0gICAgICAgIFRFTE9QVF9VKFRFTE9QVF9FTkNSWVBUSU9OKSA9IDA7Ci0gICAg ICAgIGlmICh0bl9zb3B0KERPTlQsVEVMT1BUX0VOQ1JZUFRJT04pIDwgMCkKLSAgICAgICAgICAg IHJldHVybigtMSk7Ci0gICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPTlQoVEVMT1BUX0VOQ1JZ UFRJT04pID0gMTsKLSAgICB9Ci0gICAgcmV0dXJuKDApOwotfQotI2VuZGlmIC8qIENLX0VOQ1JZ UFRJT04gKi8KLQotLyogVGhlIGZvbGxvd2luZyBub3RlIGNhbWUgZnJvbSB0aGUgb2xkIFNHQSBu ZWdvdGlhdGlvbiBjb2RlLiAgVGhpcyBzaG91bGQgKi8KLS8qIG5vIGxvbmdlciBiZSBuZWNlc3Nh cnkgd2l0aCB0aGUgTmV3IFRlbG5ldCBuZWdvdGlhdGlvbiBzdGF0ZSBtYWNoaW5lLiAgICovCi0v KgotICBOb3RlOiBUaGUgZm9sbG93aW5nIGlzIHByb3BlciBiZWhhdmlvciwgYW5kIHJlcXVpcmVk IGZvciB0YWxraW5nIHRvIHRoZQotICBBcGVydHVzIGludGVyZmFjZSB0byB0aGUgTk9USVMgbGli cmFyeSBzeXN0ZW0sIGUuZy4gYXQgSW93YSBTdGF0ZSBVOgotICBzY2hvbGFyLmlhc3RhdGUuZWR1 LiAgV2l0aG91dCB0aGlzIHJlcGx5LCB0aGUgc2VydmVyIGhhbmdzIGZvcmV2ZXIuICBUaGlzCi0g IGNvZGUgc2hvdWxkIG5vdCBiZSBsb29wLWluZHVjaW5nLCBzaW5jZSBDLUtlcm1pdCBuZXZlciBz ZW5kcyBXSUxMIFNHQSBhcwotICBhbiBpbml0aWFsIGJpZCwgc28gaWYgRE8gU0dBIGNvbWVzLCBp dCBpcyBuZXZlciBhbiBBQ0suCi0qLwotLyoKLSAgUmV0dXJuIHZhbHVlczoKLSAgLTEgPSBUZWxu ZXQgT3B0aW9uIG5lZ290aWF0aW9uIGVycm9yCi0gIC0yID0gQ29ubmVjdGlvbiBjbG9zZWQgYnkg cGVlcgotICAtMyA9IENvbm5lY3Rpb24gY2xvc2VkIGJ5IHVzCi0gIDAgID0gU3VjY2VzcwotICAx ICA9IEVjaG9pbmcgb24KLSAgMiAgPSBFY2hvaW5nIG9mZgotICAzICA9IFF1b3RlZCBJQUMKLSAg NCAgPSBJS1MgRXZlbnQKLSAgNSAgPSAodW5hc3NpZ25lZCkKLSAgNiAgPSBMb2dvdXQKLSovCi0K LXN0YXRpYyBpbnQKLSNpZmRlZiBDS19BTlNJQyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBU RUxORVQgRE8gT1BUSU9OICovCi10bl94ZG9vcChDSEFSIHosIGludCBlY2hvLCBpbnQgKCpmbiko aW50KSkKLSNlbHNlCi10bl94ZG9vcCh6LCBlY2hvLCBmbikgQ0hBUiB6OyBpbnQgZWNobzsgaW50 ICgqZm4pKCk7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHRuX3hkb29wICovIHsKLSAgICBp bnQgYywgeCwgeSwgbiwgbTsKLSNpZmRlZiBJS1NfT1BUSU9OCi0gICAgZXh0ZXJuIGludCBzZXJ2 ZXI7Ci0jaWZkZWYgTk9JQ1AKLSAgICBleHRlcm4gaW50IGF1dG9kbDsKLSAgICBpbnQgaW5hdXRv ZGwgPSAwLCBjbWRhZGwgPSAxOwotI2Vsc2UKLSNpZmRlZiBDS19BVVRPREwKLSAgICBleHRlcm4g aW50IGF1dG9kbCwgaW5hdXRvZGwsIGNtZGFkbDsKLSNlbmRpZiAvKiBDS19BVVRPREwgKi8KLSNl bmRpZiAvKiBOT0lDUCAqLwotI2VuZGlmIC8qIElLU19PUFRJT04gKi8KLQotICAgIC8qIGlmICgh SVNfVEVMTkVUKCkpIHJldHVybig3KTsgKi8KLQotLyogSGF2ZSBJQUMsIHJlYWQgY29tbWFuZCBj aGFyYWN0ZXIuICovCi0KLSAgICB3aGlsZSAoKGMgPSAoKmZuKSgwKSkgPT0gLTEpOyAgICAgICAv KiBSZWFkIGNvbW1hbmQgY2hhcmFjdGVyICovCi0gICAgaWYgKGMgPCAwKQotICAgICAgcmV0dXJu KGMpOwotICAgIGMgJj0gMHhGRjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0cmlwIGhp Z2ggYml0cyAqLwotCi0gICAgaWYgKCFURUxDTURfT0soYykpIHsKLSNpZmRlZiBERUJVRwotICAg ICAgICBpZiAodG5fZGViIHx8IGRlYnNlcyB8fCBkZWJsb2cpIHsKLSAgICAgICAgICAgIGNrbWFr bXNnKHRuX21zZyxUTl9NU0dfTEVOLCJURUxORVQgUkNWRCBVTktOT1dOICgiLAotICAgICAgICAg ICAgICAgICAgICAgY2tpdG9hKGMpLCIpIixOVUxMKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEs dG5fbXNnLCIiLGMpOwotICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCi0gICAgICAg ICAgICAgIHRuX2RlYnVnKHRuX21zZyk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwot ICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotICAgIGlmICh0dG5wcm90byA9PSBOUF9OT05FKSB7 Ci0gICAgICAgIGRlYnVnKEYxMDAsInRuX2Rvb3AgZGlzY292ZXJlZCBhIFRlbG5ldCBjb21tYW5k IiwKLSAgICAgICAgICAgICAgInR0bnByb3RvID0gTlBfVEVMTkVUIiwwKTsKLSAgICAgICAgdHRu cHJvdG8gPSBOUF9URUxORVQ7Ci0gICAgfQotICAgIGlmIChzZXNsb2cgJiYgc2Vzc2Z0ID09IFhZ RlRfRCkgeyAgIC8qIENvcHkgdG8gc2Vzc2lvbiBsb2csIGlmIGFueS4gKi8KLSAgICAgICAgbG9n Y2hhcigoY2hhcil6KTsKLSAgICAgICAgbG9nY2hhcigoY2hhciljKTsKLSAgICB9Ci0KLSAgICBp ZiAoYyA9PSAoQ0hBUikgSUFDKSAgICAgICAgICAgICAgICAvKiBRdW90ZWQgSUFDICovCi0gICAg ICByZXR1cm4oMyk7Ci0KLSAgICBpZiAoYyA8IFNCKSB7ICAgICAgICAgICAgICAgICAgICAgICAv KiBPdGhlciBjb21tYW5kIHdpdGggbm8gYXJndW1lbnRzLiAqLwotI2lmZGVmIERFQlVHCi0gICAg ICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewotICAgICAgICAgICAgY2ttYWtt c2codG5fbXNnLFROX01TR19MRU4sIlRFTE5FVCBSQ1ZEICIsVEVMQ01EKGMpLE5VTEwsTlVMTCk7 Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLHRuX21zZywiIixjKTsKLSAgICAgICAgICAgIGlmICh0 bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2cpOwotICAgICAgICB9Ci0jZW5kaWYgLyog REVCVUcgKi8KLSAgICAgICAgc3dpdGNoIChjKSB7ICAgICAgICAgICAgICAgICAgICAvKiBXaGF0 IHdlIHdvdWxkIGxpa2UgdG8gZG8gaGVyZSAgICAqLwotICAgICAgICAgIGNhc2UgVE5fR0E6ICAg ICAgICAgICAgICAgICAgIC8qIElzIHN1YnN0aXR1dGUgQVNDSUkgY2hhcmFjdGVycyAgICovCi0g ICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIHRoZSBUZWxuZXQg Q29tbWFuZCBzbyB0aGF0ICAgKi8KLSAgICAgICAgICBjYXNlIFROX0VMOiAgICAgICAgICAgICAg ICAgICAvKiB0aGUgY29tbWFuZCBtYXkgYmUgcHJvY2Vzc2VkIGJ5ICAqLwotICAgICAgICAgICAg YnJlYWs7ICAgICAgICAgICAgICAgICAgICAgIC8qIGVpdGhlciB0aGUgaW50ZXJuYWwgZW11bGF0 b3Igb3IgICovCi0gICAgICAgICAgY2FzZSBUTl9FQzogICAgICAgICAgICAgICAgICAgLyogYnkg dGhlIHN1cGVyaW9yIHByb2Nlc3Mgb3Igc2hlbGwgKi8KLSAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgIGNhc2UgVE5fQVlUOgotI2lmZGVmIE9TMgotICAgICAgICAgICAgUmVxdWVzdFRlbG5l dE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHR0b2wo KENIQVIgKikiW1llc11cMDE1XDAxMiIsNyk7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICBSZWxl YXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg Y2FzZSBUTl9BTzoKLSNpZmRlZiBCRVRBREVCVUcKLSAgICAgICAgICAgIGJsZWVwKEJQX05PVEUp OwotI2VuZGlmIC8qIEJFVEFERUJVRyAqLwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg Y2FzZSBUTl9JUDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgQlJFQUs6Ci0g ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFROX0RNOgotICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgY2FzZSBUTl9OT1A6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICBjYXNlIFNFOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBUTl9FT1I6Ci0g ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFROX0FCT1JUOgotICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgY2FzZSBUTl9TVVNQOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgY2FzZSBUTl9FT0Y6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFRO X1NBSzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybigwKTsK LSAgICB9Ci0KLS8qIFNCLCBXSUxMLCBXT05ULCBETywgb3IgRE9OVCBuZWVkIG1vcmUgYnl0ZXMu Li4gKi8KLQotICAgIGlmICgoeCA9ICgqZm4pKDApKSA8IDApICAgICAgICAgICAgIC8qIEdldCB0 aGUgb3B0aW9uLiAqLwotICAgICAgcmV0dXJuKHgpOwotICAgIHggJj0gMHhmZjsgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFRyaW0gdG8gOCBiaXRzLiAqLwotCi0gICAgaWYgKHNlc2xvZyAm JiBzZXNzZnQgPT0gWFlGVF9EKSB7ICAgLyogU2Vzc2lvbiBsb2cgKi8KLSAgICAgICAgbG9nY2hh cigoY2hhcikgeCk7Ci0gICAgfQotI2lmZGVmIERFQlVHCi0gICAgaWYgKChkZWJsb2cgfHwgdG5f ZGViIHx8IGRlYnNlcykgJiYgYyAhPSBTQikgewotICAgICAgICBja21ha21zZyh0bl9tc2csVE5f TVNHX0xFTiwiVEVMTkVUIFJDVkQgIixURUxDTUQoYyksIiAiLFRFTE9QVCh4KSk7Ci0gICAgICAg IGRlYnVnKEYxMDEsdG5fbXNnLCIiLHgpOwotICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykg dG5fZGVidWcodG5fbXNnKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICAvKiBOb3cg aGFuZGxlIHRoZSBjb21tYW5kICovCi0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBjYXNlIFdJTEw6 Ci0jaWZkZWYgQ0tfU1NMCi0gICAgICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUyku c3RhcnRfdGxzLm1lX2ZvbGxvd3MpCi0gICAgICAgICAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyog Q0tfU1NMICovCi0jaWZkZWYgQ0tfRk9SV0FSRF9YCi0gICAgICAgICAgaWYgKHggPT0gVEVMT1BU X0ZPUldBUkRfWCkgewotICAgICAgICAgICAgICBpZiAoIWZ3ZHhfc2VydmVyX2F2YWlsKCkgfHwg IShmd2R4X25vX2VuY3J5cHQgfHwKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAgICAgICAgKHNz bF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpCi0jZWxzZSAvKiBDS19TU0wgKi8KLSAg ICAgICAgICAgICAgICAgMAotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICAgICAgICAgICB8 fAotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgICAgICAgICAgKGNrX3RuX2VuY3J5cHRp bmcoKSAmJiBja190bl9kZWNyeXB0aW5nKCkpCi0jZWxzZSAvKiBDS19FTkNSWVBUSU9OICovCi0g ICAgICAgICAgICAgICAgIDAKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAgICAgICAg ICAgICAgICkpIHsKLSAgICAgICAgICAgICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0ZPUldB UkRfWCkgPSBUTl9OR19SRjsKLSAgICAgICAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9Q VF9GT1JXQVJEX1gpID0gVE5fTkdfUkY7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0j ZW5kaWYgLyogQ0tfRk9SV0FSRF9YICovCi0gICAgICAgIGlmICghVEVMT1BUX09LKHgpIHx8IFRF TE9QVF9VX01PREUoeCkgPT0gVE5fTkdfUkYpIHsKLSAgICAgICAgICAgIGlmICh0bl9zb3B0KERP TlQseCkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgaWYgKFRF TE9QVF9VTkFOU1dFUkVEX0RPKHgpKQotICAgICAgICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVE X0RPKHgpID0gMDsKLSAgICAgICAgfSBlbHNlIGlmICghVEVMT1BUX1UoeCkpIHsKLSAgICAgICAg ICAgIGlmICghVEVMT1BUX1VOQU5TV0VSRURfRE8oeCkpIHsKLSAgICAgICAgICAgICAgICBpZiAo dG5fc29wdChETyx4KSA8IDApCi0gICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgICAgICBpZiAoVEVMT1BUX1VOQU5TV0VSRURfRE8oeCkpCi0gICAgICAg ICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE8oeCkgPSAwOwotICAgICAgICAgICAgVEVMT1BU X1UoeCkgPSAxOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHgpIHsKLSNpZmRlZiBDS19TU0wKLSAg ICAgICAgICAgICAgY2FzZSBURUxPUFRfU1RBUlRfVExTOgotICAgICAgICAgICAgICAgIC8qCi0g ICAgICAgICAgICAgICAgICAgSWYgbXkgcHJvcG9zYWwgaXMgYWNjZXB0ZWQsIGF0IHRoaXMgcG9p bnQgdGhlIFRlbG5ldAotICAgICAgICAgICAgICAgICAgIHByb3RvY29sIGlzIHR1cm5lZCBvZmYg YW5kIGEgVExTIG5lZ290aWF0aW9uIHRha2VzCi0gICAgICAgICAgICAgICAgICAgcGxhY2UuCi0K LSAgICAgICAgICAgICAgICAgICBTdGFydCBieSBzZW5kaW5nIFNCIFNUQVJUX1RMUyBGT0xMT1dT ICB0byBzaWduYWwKLSAgICAgICAgICAgICAgICAgICB3ZSBhcmUgcmVhZHkuICBXYWl0IGZvciB0 aGUgcGVlciB0byBzZW5kIHRoZSBzYW1lCi0gICAgICAgICAgICAgICAgICAgYW5kIHRoZW4gc3Rh cnQgdGhlIFRMUyBuZWdvdGlhdGlvbi4KLQotICAgICAgICAgICAgICAgICAgIElmIHRoZSBUTFMg bmVnb3RpYXRpb24gc3VjY2VlZHMgd2UgY2FsbCB0bl9pbmkoKQotICAgICAgICAgICAgICAgICAg IGFnYWluIHRvIHJlc2V0IHRoZSB0ZWxuZXQgc3RhdGUgbWFjaGluZSBhbmQgcmVzdGFydAotICAg ICAgICAgICAgICAgICAgIHRoZSBuZWdvdGlhdGlvbiBwcm9jZXNzIG92ZXIgdGhlIG5vdyBzZWN1 cmUgbGluay4KLQotICAgICAgICAgICAgICAgICAgIElmIHRoZSBUTFMgbmVnb3RpYXRpb24gZmFp bHMsIHdlIGNhbGwgdHRjbG9zKCkKLSAgICAgICAgICAgICAgICAgICB0byB0ZXJtaW5hdGUgdGhl IGNvbm5lY3Rpb24uCi0KLSAgICAgICAgICAgICAgICAgICBPbmx5IHRoZSBzZXJ2ZXIgc2hvdWxk IHJlY2VpdmUgYSBXSUxMIFNUQVJUX1RMUwotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAg ICAgICAgIHRuX3NzYm9wdChURUxPUFRfU1RBUlRfVExTLDEsTlVMTCwwKTsKLSAgICAgICAgICAg ICAgICBURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MgPSAx OwotICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0jaWZkZWYg Q0tfQVVUSEVOVElDQVRJT04KLSAgICAgICAgICAgICAgY2FzZSBURUxPUFRfQVVUSEVOVElDQVRJ T046IHsKLSAgICAgICAgICAgICAgICAgIC8qIFdlIG5vdyBoYXZlIHRvIHBlcmZvcm0gYSBTQiBT RU5EIHRvIGlkZW50aWZ5IHRoZSAgKi8KLSAgICAgICAgICAgICAgICAgIC8qIHN1cHBvcnRlZCBh dXRoZW50aWNhdGlvbiB0eXBlcyB0byB0aGUgb3RoZXIgc2lkZS4gKi8KLSAgICAgICAgICAgICAg ICAgIGV4dGVybiBpbnQgYXV0aGVudGljYXRpb25fdmVyc2lvbjsKLQotI2lmZGVmIENLX1NTTAot ICAgICAgICAgICAgICAgICAgLyogaWYgd2UgaGF2ZSBhbiBvdXRzdGFuZGluZyBETyBTVEFSVF9U TFMgdGhlbiB3ZSBtdXN0IAotICAgICAgICAgICAgICAgICAgICogd2FpdCBmb3IgdGhlIHJlc3Bv bnNlIGJlZm9yZSB3ZSBkZXRlcm1pbmUgd2hhdCB0byBkbwotICAgICAgICAgICAgICAgICAgICov Ci0gICAgICAgICAgICAgICAgICBpZiAoVEVMT1BUX1VOQU5TV0VSRURfRE8oVEVMT1BUX1NUQVJU X1RMUykpIHsKLSAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RM Uykuc3RhcnRfdGxzLmF1dGhfcmVxdWVzdCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgICAg ICAgICAgICBhdXRoZW50aWNhdGlvbl92ZXJzaW9uID0gQVVUSFRZUEVfQVVUTzsKLSAgICAgICAg ICAgICAgICAgIGNrX3RuX2F1dGhfcmVxdWVzdCgpOwotICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotI2lmZGVm IENLX0VOQ1JZUFRJT04KLSAgICAgICAgICAgICAgY2FzZSBURUxPUFRfRU5DUllQVElPTjoKLSAg ICAgICAgICAgICAgICBpZiAoIShURUxPUFRfTUUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSB8fAot ICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VKFRFTE9QVF9BVVRIRU5USUNBVElPTikpCi0g ICAgICAgICAgICAgICAgICAgICkgewotICAgICAgICAgICAgICAgICAgICBpZiAodG5fc29wdChE T05ULHgpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAg ICAgICAgICAgICBURUxPUFRfVSh4KSA9IDA7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg ICAgICAgICAgICAgICAgICAgaWYgKGNrX3RuX2F1dGhfaW5fcHJvZ3Jlc3MoKSkgewotICAgICAg ICAgICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9FTkNSWVBUSU9OKS5lbmNyeXB0Lm5l ZWRfdG9fc2VuZCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAvKiBQZXJmb3JtIHN1Ym5lZ290aWF0aW9uICovCi0gICAgICAgICAgICAg ICAgICAgICAgICBja19lbmNyeXB0X3NlbmRfc3VwcG9ydCgpOwotICAgICAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICghKFRFTE9QVF9NRSh4KSB8fCBURUxPUFRfVU5B TlNXRVJFRF9XSUxMKHgpKQotICAgICAgICAgICAgICAgICAgICAgICAgJiYgVEVMT1BUX01FX01P REUoeCkgIT0gVE5fTkdfUkYpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bl9zb3B0 KFdJTEwsIHgpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAg ICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwoeCkgPSAxOwotICAg ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy ZWFrOwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNpZmRlZiBJS1NfT1BUSU9OCi0gICAg ICAgICAgICAgIGNhc2UgVEVMT1BUX0tFUk1JVDoKLSAgICAgICAgICAgICAgICBpZiAoIVRFTE9Q VF9NRSh4KSkgewotICAgICAgICAgICAgICAgICAgICAvKiBUZWxsIHRoZSBvdGhlciBzaWRlIHdo YXQgU3RhcnQgb2YgUGFja2V0IENoYXJhY3RlciAqLwotICAgICAgICAgICAgICAgICAgICB0bl9z aWtzKEtFUk1JVF9TT1ApOyAvKiBTT1AgKi8KLQotICAgICAgICAgICAgICAgICAgICBpZiAoIVRF TE9QVF9VTkFOU1dFUkVEX1dJTEwoeCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9Q VF9NRV9NT0RFKHgpICE9IFROX05HX1JGKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo dG5fc29wdChXSUxMLCB4KSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigt MSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9XSUxMKHgpID0g MTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICBicmVhazsKLSNlbmRpZiAvKiBJS1NfT1BUSU9OICovCi0gICAgICAgICAgICAgIGNhc2Ug VEVMT1BUX0JJTkFSWToKLSAgICAgICAgICAgICAgICBpZiAoIVRFTE9QVF9NRSh4KSkgewotICAg ICAgICAgICAgICAgICAgICBpZiAoIVRFTE9QVF9VTkFOU1dFUkVEX1dJTEwoeCkgJiYKLSAgICAg ICAgICAgICAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKHgpID49IFROX05HX1JRKSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICBpZiAodG5fc29wdChXSUxMLCB4KSA8IDApCi0gICAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBURUxP UFRfVU5BTlNXRVJFRF9XSUxMKHgpID0gMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBU RUxPUFRfRUNITzoKLSAgICAgICAgICAgICAgICBpZiAoZWNobykgewotICAgICAgICAgICAgICAg ICAgICBpZiAoVEVMT1BUX1VOQU5TV0VSRURfRE8oeCkpCi0gICAgICAgICAgICAgICAgICAgICAg VEVMT1BUX1VOQU5TV0VSRURfRE8oeCkgPSAwOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4o Mik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICBjYXNlIFRFTE9QVF9UVFlQRToKLSAgICAgICAgICAgICAgICAvKiBTQiBUVFlQRSBTRU5E ICovCi0gICAgICAgICAgICAgICAgdG5fc3Nib3B0KFRFTE9QVF9UVFlQRSxURUxRVUFMX1NFTkQs TlVMTCwwKTsKLSAgICAgICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9TQihURUxPUFRfVFRZ UEUpPTE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgQ0tfRU5WSVJPTk1FTlQKLSAg ICAgICAgICAgICAgY2FzZSBURUxPUFRfTkVXRU5WSVJPTjogICAvKiBTQiBORVctRU5WSVJPTiBT RU5EICovCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2hhciByZXF1ZXN0 WzZdOyAgICAgIC8qIHJlcXVlc3QgaXQgKi8KLSAgICAgICAgICAgICAgICAgIHNwcmludGYocmVx dWVzdCwiJWNVU0VSIixURUxfRU5WX1ZBUik7ICAgICAgICAvKiBzYWZlICovCi0gICAgICAgICAg ICAgICAgICB0bl9zc2JvcHQoVEVMT1BUX05FV0VOVklST04sVEVMUVVBTF9TRU5ELHJlcXVlc3Qs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKHJlcXVlc3QpKTsKLSAgICAgICAg ICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1NCKFRFTE9QVF9ORVdFTlZJUk9OKT0xOwotICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBDS19FTlZJ Uk9OTUVOVCAqLwotICAgICAgICAgICAgfSAvKiBzd2l0Y2ggKi8KLSAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgIGlmIChURUxPUFRfVU5BTlNXRVJFRF9ETyh4KSkKLSAgICAgICAgICAgICAg ICBURUxPUFRfVU5BTlNXRVJFRF9ETyh4KSA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7 Ci0gICAgICBjYXNlIFdPTlQ6Ci0jaWZkZWYgQ0tfU1NMCi0gICAgICAgIGlmIChURUxPUFRfU0Io VEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpCi0gICAgICAgICAgICByZXR1 cm4oMCk7Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgIGlmIChURUxPUFRfVSh4KSB8fCBU RUxPUFRfVU5BTlNXRVJFRF9ETyh4KSkgewotICAgICAgICAgICAgLyogRGF2aWQgQm9ybWFuIHNh eXMgd2Ugc2hvdWxkIG5vdCByZXNwb25kIERPTlQgd2hlbgotICAgICAgICAgICAgICogdGhlIFdP TlQgaXMgYSByZXNwb25zZSB0byBhIERPIHRoYXQgd2Ugc2VudC4KLSAgICAgICAgICAgICAqIE5v ciBzaG91bGQgd2Ugc2VuZCBvbmUgaWYgdGhlIHN0YXRlIGlzIGFscmVhZHkgV09OVAotICAgICAg ICAgICAgICogc3VjaCBhcyB3aGVuIHdlIGRvIG5vdCByZWNvZ25pemUgdGhlIG9wdGlvbiBzaW5j ZQotICAgICAgICAgICAgICogb3B0aW9ucyBhcmUgaW5pdGlhbGl6ZWQgaW4gdGhlIFdPTlQvRE9O VCBzdGF0ZS4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKCEoVEVMT1BUX1VOQU5T V0VSRURfRE8oeCkgfHwgVEVMT1BUX1VOQU5TV0VSRURfRE9OVCh4KSkpCi0gICAgICAgICAgICAg IGlmICh0bl9zb3B0KERPTlQseCkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0g ICAgICAgICAgICBpZiAoVEVMT1BUX1VOQU5TV0VSRURfRE9OVCh4KSkKLSAgICAgICAgICAgICAg ICBURUxPUFRfVU5BTlNXRVJFRF9ET05UKHgpID0gMDsKLSAgICAgICAgICAgIGlmIChURUxPUFRf VU5BTlNXRVJFRF9ETyh4KSkKLSAgICAgICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9ETyh4 KSA9IDA7Ci0gICAgICAgICAgICBpZiAoVEVMT1BUX1UoeCkpIHsKLSAgICAgICAgICAgICAgICBU RUxPUFRfVSh4KSA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzd2l0Y2goeCkgewot I2lmZGVmIENLX1NTTAotICAgICAgICAgICAgY2FzZSBURUxPUFRfU1RBUlRfVExTOgotICAgICAg ICAgICAgICAgIGlmIChzc3RlbG5ldCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoVEVMT1BU X1VfTU9ERSh4KSA9PSBUTl9OR19NVSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRm KCJUZWxuZXQgU3RhcnQtVExTIHJlZnVzZWQuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAg IHR0Y2xvcygwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoeWNsb3NlZCA9IFdDX1RFTE9Q VDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtMyk7Ci0gICAgICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKFRFTE9QVF9TQih4KS5zdGFydF90bHMuYXV0 aF9yZXF1ZXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBleHRlcm4gaW50IGF1dGhlbnRp Y2F0aW9uX3ZlcnNpb247Ci0gICAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfU0IoeCkuc3Rh cnRfdGxzLmF1dGhfcmVxdWVzdCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRoZW50 aWNhdGlvbl92ZXJzaW9uID0gQVVUSFRZUEVfQVVUTzsKLSAgICAgICAgICAgICAgICAgICAgICAg IGNrX3RuX2F1dGhfcmVxdWVzdCgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIENLX1NTTCAqLwotI2lm ZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0gICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0FVVEhFTlRJ Q0FUSU9OOgotICAgICAgICAgICAgICAgIGlmIChzc3RlbG5ldCAmJiBURUxPUFRfVV9NT0RFKHgp ID09IFROX05HX01VKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiVGVsbmV0IGF1dGhl bnRpY2F0aW9uIHJlZnVzZWQuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgdHRjbG9zKDApOwot ICAgICAgICAgICAgICAgICAgICB3aHljbG9zZWQgPSBXQ19URUxPUFQ7Ci0gICAgICAgICAgICAg ICAgICAgIHJldHVybigtMyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChURUxPUFRfVV9N T0RFKHgpID09IFROX05HX1JRKSB7Ci0gICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VX01PREUo eCkgPSBUTl9OR19BQzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNr X3RuX2F1dGhfaW5fcHJvZ3Jlc3MoKSkKLSAgICAgICAgICAgICAgICAgIHByaW50ZigiVGVsbmV0 IGF1dGhlbnRpY2F0aW9uIHJlZnVzZWQuXG4iKTsKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAg ICAgICAgICAgICAgaWYgKHNzdGVsbmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0bl9u b19lbmNyeXB0KCk8MCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAg ICAgICAgICAgICAgfQotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSAgICAgICAgICAgICAg ICBicmVhazsKLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotI2lmZGVmIENLX0VOQ1JZ UFRJT04KLSAgICAgICAgICAgICAgY2FzZSBURUxPUFRfRU5DUllQVElPTjoKLSAgICAgICAgICAg ICAgICBja190bl9lbmNfc3RvcCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8q IENLX0VOQ1JZUFRJT04gKi8KLSNpZmRlZiBJS1NfT1BUSU9OCi0gICAgICAgICAgICAgIGNhc2Ug VEVMT1BUX0tFUk1JVDoKLSAgICAgICAgICAgICAgICBURUxPUFRfU0IoeCkua2VybWl0LnVfc3Rh cnQgPSAwOwotICAgICAgICAgICAgICAgIFRFTE9QVF9TQih4KS5rZXJtaXQubWVfcmVxX3N0YXJ0 ID0gMDsKLSAgICAgICAgICAgICAgICBURUxPUFRfU0IoeCkua2VybWl0Lm1lX3JlcV9zdG9wID0g MDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBJS1NfT1BUSU9OICovCi0gICAg ICAgICAgICAgIGNhc2UgVEVMT1BUX05BV1M6IHsKLSAgICAgICAgICAgICAgICAgIC8qIFRoZSBj bGllbnQgZG9lcyBub3Qgc3VwcG9ydCBOQVdTLiAqLwotICAgICAgICAgICAgICAgICAgLyogQXNz dW1lIGEgaGVpZ2h0IG9mIDI0IGFuZCBhIHdpZHRoIG9mIDgwICovCi0gICAgICAgICAgICAgICAg ICBpZiAoc3N0ZWxuZXQKLSNpZmRlZiBJS1NECi0gICAgICAgICAgICAgICAgICAgfHwgaW5zZXJ2 ZXIKLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAgICAgICAgICAgICAgKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgaW50IHcgPSA4MCwgaCA9IDI0OwotI2lmbmRlZiBOT0xPQ0FMCi0gICAgICAg ICAgICAgICAgICAgICAgaWYgKHRjcF9pbmNvbWluZykgewotI2lmZGVmIE9TMgotICAgICAgICAg ICAgICAgICAgICAgICAgICB0dF9jb2xzW1ZURVJNXSA9IHc7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgIHR0X3Jvd3NbVlRFUk1dID0gaDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVnNj cm5TZXRXaWR0aChWVEVSTSwgdyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIFZzY3JuU2V0 SGVpZ2h0KFZURVJNLCBoKyh0dF9zdGF0dXNbVlRFUk1dPzE6MCkpOwotI2Vsc2UgLyogT1MyICov Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHR0X2NvbHMgPSB3OwotICAgICAgICAgICAgICAg ICAgICAgICAgICB0dF9yb3dzID0gaDsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAg ICAgICAgICB9IGVsc2UgewotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICAgICAgICAgICB0 dF9jb2xzW1ZDTURdID0gdzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdHRfcm93c1tWQ01E XSA9IGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIFZzY3JuU2V0V2lkdGgoVkNNRCwgdyk7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIFZzY3JuU2V0SGVpZ2h0KFZDTUQsIGgpOwotI2Vu ZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRfY29scyA9IHc7Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgIGNtZF9yb3dzID0gaDsKLSAgICAgICAgICAgICAgICAg ICAgICB9Ci0jZWxzZSAvKiBOT0xPQ0FMICovCi0gICAgICAgICAgICAgICAgICAgICAgY21kX2Nv bHMgPSB3OwotICAgICAgICAgICAgICAgICAgICAgIGNtZF9yb3dzID0gaDsKLSNlbmRpZiAvKiBO T0xPQ0FMICovCi0gICAgICAgICAgICAgICAgICAgICAgLyogQWRkIExJTkVTIGFuZCBDT0xVTU5T IHRvIHRoZSBlbnZpcm9ubWVudCAqLwotICAgICAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKChj aGFyICopcm93c19idWYsMTYsIkxJTkVTPSIsY2tpdG9hKGgpLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBOVUxMLE5VTEwpOwotICAgICAgICAgICAgICAgICAgICAgIGNrbWFrbXNn KChjaGFyICopY29sc19idWYsMTYsIkNPTFVNTlM9Iixja2l0b2EodyksCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCk7Ci0jaWZkZWYgT1MyT1JVTklYCi0jaWZuZGVm IE5PUFVURU5WCi0gICAgICAgICAgICAgICAgICAgICAgcHV0ZW52KHJvd3NfYnVmKTsKLSAgICAg ICAgICAgICAgICAgICAgICBwdXRlbnYoY29sc19idWYpOwotI2VuZGlmIC8qIE5PUFVURU5WICov Ci0jZW5kaWYgLyogT1MyT1JVTklYICovCi0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBjYXNlIFRFTE9Q VF9FQ0hPOgotICAgICAgICAgICAgICAgIGlmICghZWNobykgewotICAgICAgICAgICAgICAgICAg ICBpZiAoVEVMT1BUX1VOQU5TV0VSRURfRE8oeCkpCi0gICAgICAgICAgICAgICAgICAgICAgVEVM T1BUX1VOQU5TV0VSRURfRE8oeCkgPSAwOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4oMSk7 Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg fQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX0RP TlQoeCkpCi0gICAgICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE9OVCh4KSA9IDA7Ci0g ICAgICAgICAgICBpZiAoVEVMT1BUX1VOQU5TV0VSRURfRE8oeCkpCi0gICAgICAgICAgICAgICAg VEVMT1BUX1VOQU5TV0VSRURfRE8oeCkgPSAwOwotICAgICAgICB9Ci0gICAgICAgIGlmIChURUxP UFRfVV9NT0RFKHgpID09IFROX05HX01VKSB7Ci0gICAgICAgICAgICBja21ha21zZyggdG5fbXNn LFROX01TR19MRU4sCi0gICAgICAgICAgICAgICAgICAgICAgIlBlZXIgcmVmdXNlcyBURUxORVQg RE8gIixURUxPUFQoeCksCi0gICAgICAgICAgICAgICAgICAgICAgIiBuZWdvdGlhdGlvbnMgLSB0 ZXJtaW5hdGluZyBjb25uZWN0aW9uIixOVUxMCi0gICAgICAgICAgICAgICAgICAgICk7Ci0gICAg ICAgICAgICBkZWJ1ZyhGMTAwLHRuX21zZywiIiwwKTsKLSAgICAgICAgICAgIGlmICh0bl9kZWIg fHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2cpOwotICAgICAgICAgICAgcHJpbnRmKCIlc1xuIix0 bl9tc2cpOwotICAgICAgICAgICAgdHRjbG9zKDApOwotICAgICAgICAgICAgd2h5Y2xvc2VkID0g V0NfVEVMT1BUOwotICAgICAgICAgICAgcmV0dXJuKC0zKTsKLSAgICAgICAgfQotI2lmZGVmIENP TU1FTlQKLSAgICAgICAgaWYgKHggPT0gVEVMT1BUX0VDSE8gJiYgIWVjaG8pIC8qIFNwZWNpYWwg aGFuZGxpbmcgZm9yIGVjaG8gKi8KLSAgICAgICAgICByZXR1cm4oMSk7ICAgICAgICAgICAgICAg ICAgIC8qIGJlY2F1c2Ugd2UgYWxsb3cgJ2R1cGxleCcgKi8KLSNlbmRpZiAvKiBDT01NRU5UICov Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERPOgotI2lmZGVmIENLX1NTTAotICAgICAg ICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKQot ICAgICAgICAgICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICBpZiAo IVRFTE9QVF9PSyh4KSB8fCBURUxPUFRfTUVfTU9ERSh4KSA9PSBUTl9OR19SRikgewotICAgICAg ICAgICAgaWYgKHRuX3NvcHQoV09OVCx4KSA8IDApCi0gICAgICAgICAgICAgIHJldHVybigtMSk7 Ci0gICAgICAgICAgICBpZiAoVEVMT1BUX1VOQU5TV0VSRURfV0lMTCh4KSkKLSAgICAgICAgICAg ICAgICBURUxPUFRfVU5BTlNXRVJFRF9XSUxMKHgpID0gMDsKLSAgICAgICAgfSBlbHNlIGlmICgh VEVMT1BUX01FKHgpKSB7Ci0gICAgICAgICAgICBpZiAoIVRFTE9QVF9VTkFOU1dFUkVEX1dJTEwo eCkpIHsKLSAgICAgICAgICAgICAgICBpZiAodG5fc29wdChXSUxMLHgpIDwgMCkKLSAgICAgICAg ICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoVEVM T1BUX1VOQU5TV0VSRURfV0lMTCh4KSkKLSAgICAgICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJF RF9XSUxMKHgpID0gMDsKLSAgICAgICAgICAgIFRFTE9QVF9NRSh4KSA9IDE7Ci0KLSAgICAgICAg ICAgIHN3aXRjaCAoeCkgewotI2lmZGVmIENLX1NTTAotICAgICAgICAgICAgICBjYXNlIFRFTE9Q VF9TVEFSVF9UTFM6Ci0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgICBJZiBt eSBwcm9wb3NhbCBpcyBhY2NlcHRlZCBhdCB0aGlzIHBvaW50IHRoZSBUZWxuZXQKLSAgICAgICAg ICAgICAgICAgICBwcm90b2NvbCBpcyB0dXJuZWQgb2ZmIGFuZCBhIFRMUyBuZWdvdGlhdGlvbiB0 YWtlcwotICAgICAgICAgICAgICAgICAgIHBsYWNlLgotCi0gICAgICAgICAgICAgICAgICAgU3Rh cnQgYnkgc2VuZGluZyBTQiBTVEFSVF9UTFMgRk9MTE9XUyAgdG8gc2lnbmFsCi0gICAgICAgICAg ICAgICAgICAgd2UgYXJlIHJlYWR5LiAgV2FpdCBmb3IgdGhlIHBlZXIgdG8gc2VuZCB0aGUgc2Ft ZQotICAgICAgICAgICAgICAgICAgIGFuZCB0aGVuIHN0YXJ0IHRoZSBUTFMgbmVnb3RpYXRpb24u Ci0KLSAgICAgICAgICAgICAgICAgICBJZiB0aGUgVExTIG5lZ290aWF0aW9uIHN1Y2NlZWRzIHdl IGNhbGwgdG5faW5pKCkKLSAgICAgICAgICAgICAgICAgICBhZ2FpbiB0byByZXNldCB0aGUgdGVs bmV0IHN0YXRlIG1hY2hpbmUgYW5kIHJlc3RhcnQKLSAgICAgICAgICAgICAgICAgICB0aGUgbmVn b3RpYXRpb24gcHJvY2VzcyBvdmVyIHRoZSBub3cgc2VjdXJlIGxpbmsuCi0KLSAgICAgICAgICAg ICAgICAgICBJZiB0aGUgVExTIG5lZ290aWF0aW9uIGZhaWxzLCB3ZSBjYWxsIHR0Y2xvcygpCi0g ICAgICAgICAgICAgICAgICAgdG8gdGVybWluYXRlIHRoZSBjb25uZWN0aW9uLiAgVGhlbiB3ZSBz ZXQgdGhlCi0gICAgICAgICAgICAgICAgICAgVV9NT0RFIGFuZCBNRV9NT0RFIGZvciBURUxPUFRf U1RBUlRfVExTIHRvIFJFRlVTRQotICAgICAgICAgICAgICAgICAgIGFuZCB0aGVuIGNhbGwgdHRv cGVuKCkgdG8gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24KLSAgICAgICAgICAgICAgICAgICB0byB0 aGUgc2FtZSBob3N0IGJ1dCB0aGlzIHRpbWUgZG8gbm90IGF0dGVtcHQKLSAgICAgICAgICAgICAg ICAgICBUTFMgc2VjdXJpdHkuCi0KLSAgICAgICAgICAgICAgICAgICBPbmx5IHRoZSBjbGllbnQg c2hvdWxkIHJlY2VpdmUgRE8gU1RBUlRfVExTLgotICAgICAgICAgICAgICAgICovCi0gICAgICAg ICAgICAgICAgdG5fc3Nib3B0KFRFTE9QVF9TVEFSVF9UTFMsMSxOVUxMLDApOwotICAgICAgICAg ICAgICAgIFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cyA9 IDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSNpZmRl ZiBDS19BVVRIRU5USUNBVElPTgotICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9BVVRIRU5USUNB VElPTjogewotICAgICAgICAgICAgICAgICAgLyogV2UgZG9uJ3Qga25vdyB3aGF0IGF1dGhlbnRp Y2F0aW9uIHdlIGFyZSB1c2luZyB5ZXQgKi8KLSAgICAgICAgICAgICAgICAgIC8qIGJ1dCBpdCBp cyBub3QgTlVMTCB1bnRpbCBhIGZhaWx1cmUgaXMgZGV0ZWN0ZWQgc28gKi8KLSAgICAgICAgICAg ICAgICAgIC8qIHVzZSBBVVRPIGluIHRoZSBtZWFudGltZS4gKi8KLSAgICAgICAgICAgICAgICAg IGV4dGVybiBpbnQgYXV0aGVudGljYXRpb25fdmVyc2lvbjsKLSAgICAgICAgICAgICAgICAgIGF1 dGhlbnRpY2F0aW9uX3ZlcnNpb24gPSBBVVRIVFlQRV9BVVRPOwotICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwot I2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgICAgICAgY2FzZSBURUxPUFRfRU5DUllQVElP TjoKLSAgICAgICAgICAgICAgICBpZiAoIShURUxPUFRfTUUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9O KSB8fAotICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VKFRFTE9QVF9BVVRIRU5USUNBVElP TikpCi0gICAgICAgICAgICAgICAgICAgICkgewotICAgICAgICAgICAgICAgICAgICBpZiAodG5f c29wdChXT05ULHgpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAg ICAgICAgICAgICAgICAgICBURUxPUFRfTUUoeCkgPSAwOwotICAgICAgICAgICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghKFRFTE9QVF9VKHgpIHx8IFRFTE9QVF9VTkFO U1dFUkVEX0RPKHgpKQotICAgICAgICAgICAgICAgICAgICAgICAgJiYgVEVMT1BUX1VfTU9ERSh4 KSAhPSBUTl9OR19SRikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRuX3NvcHQoRE8s IHgpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAg ICAgICAgICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPKHgpID0gMTsKLSAgICAgICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSNl bmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jaWZkZWYgSUtTX09QVElPTgotICAgICAgICAgICAg ICBjYXNlIFRFTE9QVF9LRVJNSVQ6Ci0vKiBJZiBjdXJyZW50bHkgcHJvY2Vzc2luZyBLZXJtaXQg c2VydmVyIHBhY2tldHMsIG11c3QgdGVsbCB0aGUgb3RoZXIgc2lkZSAqLwotCi0gICAgICAgICAg ICAgICAgZGVidWcoRjExMSwidG5fZG9vcCIsIndoYXQiLHdoYXQpOwotICAgICAgICAgICAgICAg IGRlYnVnKEYxMTEsInRuX2Rvb3AiLCJzZXJ2ZXIiLHNlcnZlcik7Ci0jaWZkZWYgQ0tfQVVUT0RM Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwidG5fZG9vcCIsImF1dG9kbCIsYXV0b2RsKTsK LSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0bl9kb29wIiwiaW5hdXRvZGwiLGluYXV0b2Rs KTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0bl9kb29wIiwiY21kYWRsIixjbWRhZGwp OwotI2VuZGlmIC8qIENLX0FVVE9ETCAqLwotCi0gICAgICAgICAgICAgICAgaWYgKHNlcnZlcgot I2lmZGVmIENLX0FVVE9ETAotICAgICAgICAgICAgICAgICAgICB8fCAobG9jYWwgJiYgKCh3aGF0 ID09IFdfQ09OTkVDVCAmJiBhdXRvZGwpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKHdoYXQgIT0gV19DT05ORUNUICYmIGluYXV0b2RsKSkpCi0gICAgICAgICAgICAgICAg ICAgIHx8ICghbG9jYWwgJiYgY21kYWRsKQotI2VuZGlmIC8qIENLX0FVVE9ETCAqLwotICAgICAg ICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICAgICAgdG5fc2lrcyhLRVJNSVRfU1RB UlQpOyAgICAgIC8qIFNUQVJUICovCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg IGlmICghVEVMT1BUX1UoeCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLyogVGVsbCB0aGUgb3Ro ZXIgc2lkZSB3aGF0IFN0YXJ0IG9mIFBhY2tldCBDaGFyYWN0ZXIgKi8KLSAgICAgICAgICAgICAg ICAgICAgdG5fc2lrcyhLRVJNSVRfU09QKTsgICAgICAgICAgICAgLyogU09QICovCi0gICAgICAg ICAgICAgICAgICAgIGlmICghVEVMT1BUX1VOQU5TV0VSRURfRE8oeCkgJiYKLSAgICAgICAgICAg ICAgICAgICAgICAgIFRFTE9QVF9VX01PREUoeCkgIT0gVE5fTkdfUkYpIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGlmICh0bl9zb3B0KERPLCB4KSA8IDApCi0gICAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfVU5BTlNX RVJFRF9ETyh4KSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogSUtTX09QVElPTiAqLwotCi0gICAg ICAgICAgICAgIGNhc2UgVEVMT1BUX0JJTkFSWToKLSAgICAgICAgICAgICAgICBpZiAoIVRFTE9Q VF9VKHgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghVEVMT1BUX1VOQU5TV0VSRURfRE8o eCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VX01PREUoeCkgPj0gVE5fTkdf UlEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bl9zb3B0KERPLCB4KSA8IDApCi0g ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBURUxPUFRfVU5BTlNXRVJFRF9ETyh4KSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg IGNhc2UgVEVMT1BUX05BV1M6Ci0jaWZkZWYgQ0tfTkFXUwotICAgICAgICAgICAgICAgIGlmICgg IXRuX2RlbGF5X3NiIHx8ICF0bl9vdXRzdCgwKSB8fCB0bl9pbml0ICkgewotICAgICAgICAgICAg ICAgICAgICBpZiAodG5fc25hd3MoKSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4oLTEpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFRF TE9QVF9TQihURUxPUFRfTkFXUykubmF3cy5uZWVkX3RvX3NlbmQgPSAxOwotICAgICAgICAgICAg ICAgIH0KLSNlbmRpZiAvKiBDS19OQVdTICovCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgIGNhc2UgVEVMT1BUX0xPR09VVDoKLSAgICAgICAgICAgICAgICB0dGNsb3MoMCk7 ICAgICAgICAgICAgICAvKiBBbmQgdGhlbiBoYW5ndXAgKi8KLSAgICAgICAgICAgICAgICB3aHlj bG9zZWQgPSBXQ19URUxPUFQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKDYpOwotI2lmZGVmIENL X1NORExPQwotICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfU05ETE9DOgotICAgICAgICAgICAg ICAgICAgaWYgKCAhdG5fZGVsYXlfc2IgfHwgIXRuX291dHN0KDApIHx8IHRuX2luaXQgKSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgaWYgKHRuX3NuZGxvYygpIDwgMCkKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9TTkRMT0MpLnNuZGxvYy5uZWVkX3Rv X3NlbmQgPSAxOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0jZW5kaWYgLyogQ0tfU05ETE9DICovCi0jaWZkZWYgQ0tfRk9SV0FSRF9YCi0gICAgICAgICAg ICAgICBjYXNlIFRFTE9QVF9GT1JXQVJEX1g6Ci0gICAgICAgICAgICAgICAgICBpZiAoICF0bl9k ZWxheV9zYiB8fCAhdG5fb3V0c3QoMCkgfHwgdG5faW5pdCApIHsKLSAgICAgICAgICAgICAgICAg ICAgICBpZiAoZndkeF9zZW5kX29wdGlvbnMoKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKHRuX3NvcHQoRE9OVCx4KSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfVU5BTlNX RVJFRF9ET05UKHgpID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfRk9S V0FSRF9YKS5mb3J3YXJkX3gubmVlZF90b19zZW5kID0gMTsKLSAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIENLX0ZPUldBUkRfWCAqLwotI2lm ZGVmIFROX0NPTVBPUlQKLSAgICAgICAgICAgICAgY2FzZSBURUxPUFRfQ09NUE9SVDogewotICAg ICAgICAgICAgICAgIGV4dGVybiBpbnQgcmVsaWFibGU7Ci0gICAgICAgICAgICAgICAgaWYgKCF0 bl9kZWxheV9zYiB8fCAhdG5fb3V0c3QoMCkgfHwgdG5faW5pdCkgewotICAgICAgICAgICAgICAg ICAgICBpZiAodG5fc25kY29tcG9ydCgpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4oLTEpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFRF TE9QVF9TQihURUxPUFRfQ09NUE9SVCkuY29tcG9ydC5uZWVkX3RvX3NlbmQgPSAxOwotICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvKiBUZWxuZXQgLT4gU2VyaWFsIC0+ID8/PyBp cyBub3QgYSByZWxpYWJsZSBjb25uZWN0aW9uLiAqLwotICAgICAgICAgICAgICAgIHJlbGlhYmxl ID0gU0VUX09GRjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotI2Vu ZGlmIC8qIFROX0NPTVBPUlQgKi8KLSAgICAgICAgICAgIH0gLyogc3dpdGNoICovCi0gICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwoeCkpCi0gICAg ICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9XSUxMKHgpID0gMDsKLSAgICAgICAgfQotICAgICAg ICBicmVhazsKLQotICAgICAgY2FzZSBET05UOgotI2lmZGVmIENLX1NTTAotICAgICAgICBpZiAo VEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKQotICAgICAg ICAgICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICBpZiAoVEVMT1BU X01FKHgpIHx8IFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwoeCkpIHsKLSAgICAgICAgICAgIC8qIERh dmlkIEJvcm1hbiBzYXlzIHdlIHNob3VsZCBub3QgcmVzcG9uZCBXT05UIHdoZW4KLSAgICAgICAg ICAgICAqIHRoZSBET05UIGlzIGEgcmVzcG9uc2UgdG8gYSBXSUxMIHRoYXQgd2Ugc2VudC4KLSAg ICAgICAgICAgICAqIE5vciBzaG91bGQgd2Ugc2VuZCBvbmUgaWYgdGhlIHN0YXRlIGlzIGFscmVh ZHkgV09OVAotICAgICAgICAgICAgICogc3VjaCBhcyB3aGVuIHdlIGRvIG5vdCByZWNvZ25pemUg dGhlIG9wdGlvbiBzaW5jZQotICAgICAgICAgICAgICogb3B0aW9ucyBhcmUgaW5pdGlhbGl6ZWQg aW4gdGhlIFdPTlQvRE9OVCBzdGF0ZS4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYg KCEoVEVMT1BUX1VOQU5TV0VSRURfV0lMTCh4KSB8fCBURUxPUFRfVU5BTlNXRVJFRF9XT05UKHgp KSkKLSAgICAgICAgICAgICAgaWYgKHRuX3NvcHQoV09OVCx4KSA8IDApCi0gICAgICAgICAgICAg ICAgcmV0dXJuKC0xKTsKLQotICAgICAgICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwo eCkpCi0gICAgICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfV0lMTCh4KSA9IDA7Ci0gICAg ICAgICAgICBpZiAoVEVMT1BUX1VOQU5TV0VSRURfV09OVCh4KSkKLSAgICAgICAgICAgICAgICBU RUxPUFRfVU5BTlNXRVJFRF9XT05UKHgpID0gMDsKLSAgICAgICAgICAgIGlmIChURUxPUFRfTUUo eCkpCi0gICAgICAgICAgICAgIFRFTE9QVF9NRSh4KSA9IDA7Ci0KLSAgICAgICAgICAgIHN3aXRj aCAoeCkgewotI2lmZGVmIENLX1NTTAotICAgICAgICAgICAgY2FzZSBURUxPUFRfU1RBUlRfVExT OgotICAgICAgICAgICAgICAgIGlmICghc3N0ZWxuZXQgJiYgVEVMT1BUX01FX01PREUoeCkgPT0g VE5fTkdfTVUpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJUZWxuZXQgU3RhcnQtVExT IHJlZnVzZWQuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgdHRjbG9zKDApOwotICAgICAgICAg ICAgICAgICAgICB3aHljbG9zZWQgPSBXQ19URUxPUFQ7Ci0gICAgICAgICAgICAgICAgICAgIHJl dHVybigtMyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotI2Vu ZGlmIC8qIENLX1NTTCAqLwotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0gICAgICAgICAgICAg IGNhc2UgVEVMT1BUX0FVVEhFTlRJQ0FUSU9OOgotICAgICAgICAgICAgICAgIGlmICghc3N0ZWxu ZXQgJiYgVEVMT1BUX01FX01PREUoeCkgPT0gVE5fTkdfTVUpIHsKLSNpZmRlZiBDS19TU0wKLSAg ICAgICAgICAgICAgICAgICAgaWYgKHRsc19hY3RpdmVfZmxhZykgewotICAgICAgICAgICAgICAg ICAgICAgICAgVEVMT1BUX01FX01PREUoeCkgPSBUTl9OR19BQzsKLSAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBDS19T U0wgKi8KLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJp bnRmKCJUZWxuZXQgYXV0aGVudGljYXRpb24gcmVmdXNlZC5cbiIpOwotICAgICAgICAgICAgICAg ICAgICAgICAgdHRjbG9zKDApOwotICAgICAgICAgICAgICAgICAgICAgICAgd2h5Y2xvc2VkID0g V0NfVEVMT1BUOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0zKTsKLSAgICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoVEVMT1BUX01FX01PREUo eCkgPT0gVE5fTkdfUlEpIHsKLSAgICAgICAgICAgICAgICAgICAgVEVMT1BUX01FX01PREUoeCkg PSBUTl9OR19BQzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNrX3Ru X2F1dGhfaW5fcHJvZ3Jlc3MoKSkKLSAgICAgICAgICAgICAgICAgIHByaW50ZigiVGVsbmV0IGF1 dGhlbnRpY2F0aW9uIHJlZnVzZWQuXG4iKTsKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAg ICAgICAgICAgaWYgKCFzc3RlbG5ldCkgewotICAgICAgICAgICAgICAgICAgICBpZiAodG5fbm9f ZW5jcnlwdCgpPDApCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAg ICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAgICAgICAgICAgICAg YnJlYWs7Ci0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSAgICAgICAgICAgICAgY2Fz ZSBURUxPUFRfRU5DUllQVElPTjoKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAgICAgICAg ICAgY2tfdG5fZW5jX3N0b3AoKTsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0tFUk1JVDoKLSNpZmRl ZiBJS1NfT1BUSU9OCi0gICAgICAgICAgICAgICAgVEVMT1BUX1NCKHgpLmtlcm1pdC5tZV9zdGFy dCA9IDA7Ci0jZW5kaWYgLyogSUtTX09QVElPTiAqLwotICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgfSAvKiBzd2l0Y2ggKi8KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBpZiAoVEVMT1BU X1VOQU5TV0VSRURfV0lMTCh4KSkKLSAgICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfV0lM TCh4KSA9IDA7Ci0gICAgICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX1dPTlQoeCkpCi0gICAg ICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1dPTlQoeCkgPSAwOwotICAgICAgICB9Ci0gICAg ICAgIGlmIChURUxPUFRfTUVfTU9ERSh4KSA9PSBUTl9OR19NVSkgewotICAgICAgICAgICAgY2tt YWttc2coIHRuX21zZyxUTl9NU0dfTEVOLAotICAgICAgICAgICAgICAgICAgICAgICJQZWVyIHJl ZnVzZXMgVEVMTkVUIFdJTEwgIixURUxPUFQoeCksCi0gICAgICAgICAgICAgICAgICAgICAgIiBu ZWdvdGlhdGlvbnMgLSB0ZXJtaW5hdGluZyBjb25uZWN0aW9uIiwKLSAgICAgICAgICAgICAgICAg ICAgICBOVUxMCi0gICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGRlYnVnKEYx MDAsdG5fbXNnLCIiLDApOwotICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2Rl YnVnKHRuX21zZyk7Ci0gICAgICAgICAgICBwcmludGYoIiVzXG4iLHRuX21zZyk7Ci0gICAgICAg ICAgICB0dGNsb3MoMCk7Ci0gICAgICAgICAgICB3aHljbG9zZWQgPSBXQ19URUxPUFQ7Ci0gICAg ICAgICAgICByZXR1cm4oLTMpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz ZSBTQjoKLSAgICAgICAgaWYgKCh5ID0gdG5fc2IoeCwmbixmbikpIDw9IDApCi0gICAgICAgICAg cmV0dXJuKHkpOwotCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAgIC8qIERvIG5vdCBwcm9jZXNzIHN1 Ym5lZ290aWF0aW9ucyBvdGhlciB0aGFuIFNUQVJUX1RMUyBhZnRlciB3ZSAqLwotICAgICAgICAv KiBoYXZlIGFncmVlZCB0byBiZWdpbiB0aGUgVExTIG5lZ290aWF0aW9uIHNlcXVlbmNlLiAgICAg ICAgICAgKi8KLSAgICAgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90 bHMubWVfZm9sbG93cyAmJgotICAgICAgICAgICAgIHggIT0gVEVMT1BUX1NUQVJUX1RMUykKLSAg ICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0gICAgICAgIGlmICghVEVM T1BUX09LKHgpKSB7Ci0gICAgICAgICAgICBja2hleGR1bXAoInVua25vd24gdGVsbmV0IHN1Ym5l Z290aWF0aW9uIixzYixuKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgaWYg KCAhKFRFTE9QVF9NRSh4KSB8fCBURUxPUFRfVSh4KSkgKSB7Ci0gICAgICAgICAgICBja2hleGR1 bXAoInRlbG5ldCBvcHRpb24gbm90IG5lZ290aWF0ZWQiLHNiLG4pOwotICAgICAgICAgICAgaWYg KCF0bl9zYl9idWcpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoVEVM T1BUX1VOQU5TV0VSRURfV0lMTCh4KSkgewotICAgICAgICAgICAgICAgIFRFTE9QVF9VTkFOU1dF UkVEX1dJTEwoeCkgPSAwOwotICAgICAgICAgICAgICAgIFRFTE9QVF9VKHgpID0gMTsKLSAgICAg ICAgICAgICAgICBja21ha21zZyh0bl9tc2csVE5fTVNHX0xFTiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAiVEVMTkVUIERPICIsVEVMT1BUKHgpLAotICAgICAgICAgICAgICAgICAgICAgICAg ICIoaW1wbGllZCBieSByZWNlaXB0IG9mIFNCIC0gcHJvdG9jb2wgZXJyb3IgaWdub3JlZCkiLAot ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwKLSAgICAgICAgICAgICAgICAgICAgICAgICAp OwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsdG5fbXNnLCIiLDApOwotICAgICAgICAgICAg ICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2cpOwotICAgICAgICAgICAg fQotICAgICAgICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX0RPKHgpKSB7Ci0gICAgICAgICAg ICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE8oeCkgPSAwOwotICAgICAgICAgICAgICAgIFRFTE9Q VF9NRSh4KSA9IDE7Ci0gICAgICAgICAgICAgICAgY2ttYWttc2codG5fbXNnLFROX01TR19MRU4s IlRFTE5FVCBXSUxMICIsVEVMT1BUKHgpLAotICAgICAgICAgICAgICAgICAgICAgICAgIiAoaW1w bGllZCBieSByZWNlaXB0IG9mIFNCIC0gcHJvdG9jb2wgZXJyb3IgaWdub3JlZCkiLAotICAgICAg ICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMCx0bl9t c2csIiIsMCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVn KHRuX21zZyk7Ci0gICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgVEVMT1BUX1VO QU5TV0VSRURfU0IoeCk9MDsKLSAgICAgICAgc3dpdGNoICh4KSB7Ci0jaWZkZWYgQ0tfRk9SV0FS RF9YCi0gICAgICAgICAgY2FzZSBURUxPUFRfRk9SV0FSRF9YOgotICAgICAgICAgICAgcmV0dXJu KGZ3ZHhfdG5fc2Ioc2IsIG4pKTsKLSNlbmRpZiAvKiBDS19GT1JXQVJEX1ggKi8KLSNpZmRlZiBD S19TU0wKLSAgICAgICAgICBjYXNlIFRFTE9QVF9TVEFSVF9UTFM6IHsKLSAgICAgICAgICAgICAg LyoKLSAgICAgICAgICAgICAgICAgdGhlIG90aGVyIHNpZGUgaXMgc2F5aW5nIFNCIFNUQVJUX1RM UyBGT0xMT1dTCi0gICAgICAgICAgICAgICAgIHRoZSBpbmNvbWluZyBjaGFubmVsIGlzIG5vdyBy ZWFkeSBmb3Igc3RhcnRpbmcgdGhlCi0gICAgICAgICAgICAgICAgIFRMUyBuZWdvdGlhdGlvbi4K LSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgaW50IGRlZl90bHNfdV9tb2RlLCBk ZWZfdGxzX21lX21vZGU7Ci0gICAgICAgICAgICAgIGludCBkZWZfZW5jX3VfbW9kZSwgZGVmX2Vu Y19tZV9tb2RlOwotICAgICAgICAgICAgICBpbnQgcmMgPSAwOwotCi0gICAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChzYlswXSAhPSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg ICBURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLnVfZm9sbG93cyA9IDE7Ci0g ICAgICAgICAgICAgIC8qIFByZXNlcnZlIHRoZSBkZWZhdWx0IG1vZGVzIGFuZCBtYWtlIHN1cmUg d2Ugd2lsbCAqLwotICAgICAgICAgICAgICAvKiByZWZ1c2UgU1RBUlRfVExTIHdoZW4gd2UgcmV0 cnkuICovCi0gICAgICAgICAgICAgIGlmIChzc3RlbG5ldCkgewotICAgICAgICAgICAgICAgICAg ZGVmX3Rsc191X21vZGUgPSBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpOwot ICAgICAgICAgICAgICAgICAgZGVmX3Rsc19tZV9tb2RlID0gVEVMT1BUX0RFRl9TX01FX01PREUo VEVMT1BUX1NUQVJUX1RMUyk7Ci0gICAgICAgICAgICAgICAgICBURUxPUFRfREVGX1NfVV9NT0RF KFRFTE9QVF9TVEFSVF9UTFMpID0gVE5fTkdfUkY7Ci0gICAgICAgICAgICAgICAgICBURUxPUFRf REVGX1NfTUVfTU9ERShURUxPUFRfU1RBUlRfVExTKT0gVE5fTkdfUkY7Ci0jaWZkZWYgQ0tfRU5D UllQVElPTgotICAgICAgICAgICAgICAgICAgZGVmX2VuY191X21vZGUgPSBURUxPUFRfREVGX1Nf VV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKTsKLSAgICAgICAgICAgICAgICAgIGRlZl9lbmNfbWVf bW9kZSA9IFRFTE9QVF9ERUZfU19NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKTsKLSAgICAgICAg ICAgICAgICAgIFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdf UkY7Ci0gICAgICAgICAgICAgICAgICBURUxPUFRfREVGX1NfTUVfTU9ERShURUxPUFRfRU5DUllQ VElPTik9IFROX05HX1JGOwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSAgICAgICAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgIGRlZl90bHNfdV9tb2RlID0gVEVMT1BUX0RF Rl9DX1VfTU9ERShURUxPUFRfU1RBUlRfVExTKTsKLSAgICAgICAgICAgICAgICAgIGRlZl90bHNf bWVfbW9kZSA9IFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpOwotICAgICAg ICAgICAgICAgICAgVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfU1RBUlRfVExTKSA9IFROX05H X1JGOwotICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX1NUQVJU X1RMUyk9IFROX05HX1JGOwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgICAgICAgICAg IGRlZl9lbmNfdV9tb2RlID0gVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfRU5DUllQVElPTik7 Ci0gICAgICAgICAgICAgICAgICBkZWZfZW5jX21lX21vZGUgPSBURUxPUFRfREVGX0NfTUVfTU9E RShURUxPUFRfRU5DUllQVElPTik7Ci0gICAgICAgICAgICAgICAgICBURUxPUFRfREVGX0NfVV9N T0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOwotICAgICAgICAgICAgICAgICAgVEVM T1BUX0RFRl9DX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pPSBUTl9OR19SRjsKLSNlbmRpZiAv KiBDS19FTkNSWVBUSU9OICovCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgLyogTmVn b3RpYXRlIFRMUyAqLwotICAgICAgICAgICAgICB0dG5wcm90byA9IE5QX1RMUzsKLSAgICAgICAg ICAgICAgdG5faW5pdCA9IDA7Ci0gICAgICAgICAgICAgIHRuX2JlZ3VuID0gMDsKLSAgICAgICAg ICAgICAgaWYgKGNrX3RuX3Rsc19uZWdvdGlhdGUoKTwwKSB7Ci0gICAgICAgICAgICAgICAgICAv KiB3ZSBmYWlsZWQuICBkaXNjb25uZWN0IGFuZCBpZiB3ZSBhcmUgdGhlIGNsaWVudCAqLwotICAg ICAgICAgICAgICAgICAgLyogdGhlbiByZWNvbm5lY3QgYW5kIHRyeSB3aXRob3V0IFNUQVJUX1RM Uy4gICAgICAgKi8KLSAgICAgICAgICAgICAgICAgIGV4dGVybiBjaGFyICogbGluZTsKLSAgICAg ICAgICAgICAgICAgIGludCB4ID0gLTE7Ci0gICAgICAgICAgICAgICAgICBleHRlcm4gaW50IG1k bXR5cDsKLQotICAgICAgICAgICAgICAgICAgaWYgKHNzdGVsbmV0KSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCJUTFMgZmFpbGVkOiAgRGlzY29ubmVjdGluZy5cbiIpOwotICAgICAg ICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX1NUQVJUX1RMUykgID0g ZGVmX3Rsc191X21vZGU7Ci0gICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9TX01FX01P REUoVEVMT1BUX1NUQVJUX1RMUykgPSBkZWZfdGxzX21lX21vZGU7Ci0jaWZkZWYgQ0tfRU5DUllQ VElPTgotICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfRU5D UllQVElPTikgID0gZGVmX2VuY191X21vZGU7Ci0gICAgICAgICAgICAgICAgICAgICBURUxPUFRf REVGX1NfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBkZWZfZW5jX21lX21vZGU7Ci0jZW5k aWYgLyogQ0tfRU5DUllQVElPTiAqLwotICAgICAgICAgICAgICAgICAgICAgIHR0Y2xvcygwKTsK LSAgICAgICAgICAgICAgICAgICAgICB3aHljbG9zZWQgPSBXQ19URUxPUFQ7Ci0gICAgICAgICAg ICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9URUxORVQ7Ci0gICAgICAgICAgICAgICAgICAgICAg cmMgPSAtMzsKLSAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0jaWZuZGVmIE5PTE9DQUwKLSAg ICAgICAgICAgICAgICAgICAgICBleHRlcm4gaW50IHRsc19ub3Jlc3RvcmU7Ci0jZW5kaWYgLyog Tk9MT0NBTCAqLwotICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiVExTIGZhaWxlZDogIERp c2Nvbm5lY3RpbmcuLi5cbiIpOwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgICAgICAg ICAgICAgIFRFTE9QVF9ERUZfQ19VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pICA9IGRlZl9lbmNf dV9tb2RlOwotICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BU X0VOQ1JZUFRJT04pID0gZGVmX2VuY19tZV9tb2RlOwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04g Ki8KLSAgICAgICAgICAgICAgICAgICAgICAvKiBpZiBTVEFSVF9UTFMgaXMgbm90IFJFUVVJUkVE LCB0aGVuIHJldHJ5IHdpdGhvdXQgaXQgKi8KLSAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRl Zl90bHNfbWVfbW9kZSAhPSBUTl9OR19NVSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ZXh0ZXJuIGNoYXIgdHRuYW1lW107Ci0jaWZuZGVmIE5PTE9DQUwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgdGxzX25vcmVzdG9yZSA9IDE7Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgICB0dGNsb3MoMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg IHdoeWNsb3NlZCA9IFdDX1RFTE9QVDsKLSNpZm5kZWYgTk9MT0NBTAotICAgICAgICAgICAgICAg ICAgICAgICAgICB0bHNfbm9yZXN0b3JlID0gMDsKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0gICAg ICAgICAgICAgICAgICAgICAgICAgIHR0bnByb3RvID0gTlBfVEVMTkVUOwotICAgICAgICAgICAg ICAgICAgICAgICAgICBwcmludGYoIlJlY29ubmVjdGluZyB3aXRob3V0IFRMUy5cbiIpOwotICAg ICAgICAgICAgICAgICAgICAgICAgICBzbGVlcCgyKTsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKHR0b3Blbih0dG5hbWUsJngsbWRtdHlwLDApPDApCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByYyA9IC0zOwotICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfQ19VX01PREUoVEVMT1BUX1NUQVJUX1RM UykgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZl90bHNfdV9tb2RlOwotICAgICAg ICAgICAgICAgICAgICAgICAgICBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfU1RBUlRfVExT KSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmX3Rsc19tZV9tb2RlOwotICAgICAg ICAgICAgICAgICAgICAgICAgICB0dGNsb3MoMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg IHdoeWNsb3NlZCA9IFdDX1RFTE9QVDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdHRucHJv dG8gPSBOUF9URUxORVQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gLTM7Ci0gICAg ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9 IGVsc2UgewotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0gICAgICAgICAgICAgICAgICAvKiB3 ZSBzdWNjZWVkZWQuICByZXN0YXJ0IHRlbG5ldCBuZWdvdGlhdGlvbnMgZnJvbSAqLwotICAgICAg ICAgICAgICAgICAgLyogdGhlIGJlZ2lubmluZy4gIEhvd2V2ZXIsIGlmIHdlIGhhdmUgcmVjZWl2 ZWQgYSAgKi8KLSAgICAgICAgICAgICAgICAgIC8qIGNsaWVudCBjZXJ0aWZpY2F0ZSBhbmQgd2Ug YXJlIGEgc2VydmVyLCB0aGVuIGRvICovCi0gICAgICAgICAgICAgICAgICAvKiBub3Qgb2ZmZXIg VEVMT1BUX0FVVEguICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAg ICAgaWYgKCBja190bl9hdXRoX3ZhbGlkKCkgPT0gQVVUSF9WQUxJRCApIHsKLSAgICAgICAgICAg ICAgICAgICAgICBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9BVVRIRU5USUNBVElPTikgPSBU Tl9OR19BQzsKLSAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfREVGX1NfTUVfTU9ERShURUxP UFRfQVVUSEVOVElDQVRJT04pPSBUTl9OR19BQzsKLSAgICAgICAgICAgICAgICAgIH0KLSNlbmRp ZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotICAgICAgICAgICAgICAgICAgdHRucHJvdG8gPSBO UF9URUxORVQ7Ci0gICAgICAgICAgICAgICAgICBpZiAodG5faW5pKCkgPCAwKQotICAgICAgICAg ICAgICAgICAgICBpZiAodHRjaGsoKSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgcmMgPSAt MTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAvKiBSZXN0b3JlIHRoZSBkZWZhdWx0 IG1vZGVzICovCi0gICAgICAgICAgICAgIGlmIChzc3RlbG5ldCkgewotICAgICAgICAgICAgICAg ICAgVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfU1RBUlRfVExTKSAgPSBkZWZfdGxzX3VfbW9k ZTsKLSAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfU19NRV9NT0RFKFRFTE9QVF9TVEFSVF9U TFMpID0gZGVmX3Rsc19tZV9tb2RlOwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgICAg ICAgICAgIFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pICA9IGRlZl9lbmNf dV9tb2RlOwotICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9TX01FX01PREUoVEVMT1BUX0VO Q1JZUFRJT04pID0gZGVmX2VuY19tZV9tb2RlOwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8K LSAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfQ19V X01PREUoVEVMT1BUX1NUQVJUX1RMUykgID0gZGVmX3Rsc191X21vZGU7Ci0gICAgICAgICAgICAg ICAgICBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfU1RBUlRfVExTKSA9IGRlZl90bHNfbWVf bW9kZTsKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAgICAgICAgICAgICBURUxPUFRfREVG X0NfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSAgPSBkZWZfZW5jX3VfbW9kZTsKLSAgICAgICAg ICAgICAgICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IGRlZl9l bmNfbWVfbW9kZTsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgcmV0dXJuKHJjKTsKLSAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfU1NM ICovCi0jaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KLSAgICAgICAgICBjYXNlIFRFTE9QVF9BVVRI RU5USUNBVElPTjoKLSAgICAgICAgICAgIGlmIChja190bl9zYl9hdXRoKChjaGFyICopc2Isbikg PCAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNzdGVsbmV0ICYmIFRFTE9QVF9VX01PREUoeCkg PT0gVE5fTkdfTVUpIHsKLSAgICAgICAgICAgICAgICAgICAgdHRjbG9zKDApOwotICAgICAgICAg ICAgICAgICAgICB3aHljbG9zZWQgPSBXQ19URUxPUFQ7Ci0gICAgICAgICAgICAgICAgICAgIHJl dHVybigtMyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3N0ZWxuZXQgJiYgVEVMT1BU X01FX01PREUoeCkgPT0gVE5fTkdfTVUpIHsKLSAgICAgICAgICAgICAgICAgICAgdHRjbG9zKDAp OwotICAgICAgICAgICAgICAgICAgICB3aHljbG9zZWQgPSBXQ19URUxPUFQ7Ci0gICAgICAgICAg ICAgICAgICAgIHJldHVybigtMyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgICAgICAgICAgaWYgKFRFTE9QVF9NRV9NT0RFKHgpID09IFROX05HX1JRKQotICAgICAgICAg ICAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKHgpID0gVE5fTkdfQUM7Ci0gICAgICAgICAgICAg ICAgICAgIGlmIChURUxPUFRfVV9NT0RFKHgpID09IFROX05HX1JRKQotICAgICAgICAgICAgICAg ICAgICAgIFRFTE9QVF9VX01PREUoeCkgPSBUTl9OR19BQzsKLSAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgaWYgKFRFTE9QVF9NRSh4KSkgewotICAgICAgICAgICAgICAgICAgICBU RUxPUFRfTUUoeCkgPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAodG5fc29wdChXT05ULHgp IDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICBpZiAoVEVMT1BUX1UoeCkpIHsKLSAgICAgICAgICAgICAgICAg ICAgVEVMT1BUX1UoeCkgPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAodG5fc29wdChET05U LHgpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAg ICAgIH0KLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAgICAgICAgICAgaWYgKHRuX25vX2Vu Y3J5cHQoKTwwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotI2VuZGlmIC8qIENL X0VOQ1JZUFRJT04gKi8KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0jaWZkZWYgQ0tfRU5DUllQVElP TgotICAgICAgICAgICAgICAgIGlmICghY2tfdG5fYXV0aF9pbl9wcm9ncmVzcygpKSB7IC8qIHdl IGFyZSBmaW5pc2hlZCAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoY2tfdG5fYXV0aGVudGlj YXRlZCgpID09IEFVVEhUWVBFX1NTTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLyogVExT IHdhcyBzdWNjZXNzZnVsLiAgRGlzYWJsZSBFTkNSWVBUSU9OICovCi0gICAgICAgICAgICAgICAg ICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOwotICAg ICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0g VE5fTkdfUkY7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYg KFRFTE9QVF9TQihURUxPUFRfRU5DUllQVElPTikuZW5jcnlwdC5uZWVkX3RvX3NlbmQpIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgIGNrX2VuY3J5cHRfc2VuZF9zdXBwb3J0KCk7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0VOQ1JZUFRJT04pLmVuY3J5cHQubmVl ZF90b19zZW5kID0gMDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K LSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBi cmVhazsKLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotI2lmZGVmIENLX0VOQ1JZUFRJ T04KLSAgICAgICAgICBjYXNlIFRFTE9QVF9FTkNSWVBUSU9OOgotICAgICAgICAgICAgaWYgKGNr X3RuX3NiX2VuY3J5cHQoKGNoYXIgKilzYiwgbikgPCAwKSB7Ci0gICAgICAgICAgICAgICAgaWYg KFRFTE9QVF9VX01PREUoeCkgPT0gVE5fTkdfTVUgfHwKLSAgICAgICAgICAgICAgICAgICAgVEVM T1BUX01FX01PREUoeCkgPT0gVE5fTkdfTVUpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAg ICAgICAgICAgICAgICAgdHRjbG9zKDApOwotICAgICAgICAgICAgICAgICAgICAgIHdoeWNsb3Nl ZCA9IFdDX1RFTE9QVDsKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTMpOwotICAgICAg ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChURUxPUFRfTUVfTU9E RSh4KSA9PSBUTl9OR19SUSkKLSAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfTUVfTU9ERSh4 KSA9IFROX05HX0FDOwotICAgICAgICAgICAgICAgICAgICBpZiAoVEVMT1BUX1VfTU9ERSh4KSA9 PSBUTl9OR19SUSkKLSAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKHgpID0gVE5f TkdfQUM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChURUxPUFRfTUUo eCkpIHsKLSAgICAgICAgICAgICAgICAgICAgVEVMT1BUX01FKHgpID0gMDsKLSAgICAgICAgICAg ICAgICAgICAgaWYgKHRuX3NvcHQoV09OVCx4KSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAg cmV0dXJuKC0xKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKFRFTE9Q VF9VKHgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VKHgpID0gMDsKLSAgICAgICAg ICAgICAgICAgICAgaWYgKHRuX3NvcHQoRE9OVCx4KSA8IDApCi0gICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICBicmVhazsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jaWZkZWYgSUtTX09QVElP TgotICAgICAgICAgIGNhc2UgVEVMT1BUX0tFUk1JVDoKLSAgICAgICAgICAgIHJldHVybihpa3Nf dG5fc2Ioc2IsIG4tMikpOwotI2VuZGlmIC8qIElLU19PUFRJT04gKi8KLSNpZmRlZiBUTl9DT01Q T1JUCi0gICAgICAgICAgY2FzZSBURUxPUFRfQ09NUE9SVDoKLSAgICAgICAgICAgIHJldHVybih0 bmNfdG5fc2Ioc2IsIG4tMikpOwotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLSAgICAgICAgICBj YXNlIFRFTE9QVF9UVFlQRToKLSAgICAgICAgICAgIHN3aXRjaCAoc2JbMF0pIHsKLSAgICAgICAg ICAgICAgY2FzZSBURUxRVUFMX1NFTkQ6ICAgICAgICAvKiBTRU5EIHRlcm1pbmFsIHR5cGU/ICov Ci0gICAgICAgICAgICAgICAgaWYgKCAhdG5fZGVsYXlfc2IgfHwgIXRuX291dHN0KDApIHx8IHRu X2luaXQgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0bl9zdHR5cCgpIDwgMCkgLyogWWVz LCBzbyBzZW5kIGl0LiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAg ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBURUxPUFRfU0IoVEVM T1BUX1RUWVBFKS50ZXJtLm5lZWRfdG9fc2VuZCA9IDE7Ci0gICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIFRFTFFVQUxfSVM6IHsgICAg ICAgIC8qIElTIHRlcm1pbmFsIHR5cGU/ICovCi0gICAgICAgICAgICAgICAgICAvKiBJUyB0ZXJt aW5hbCB0eXBlIC0tIHJlbW90ZSBnYXZlIHVzIGl0cyBjdXJyZW50IHR5cGUgKi8KLSAgICAgICAg ICAgICAgICAgIGludCBpID0gMDsKLSNpZm5kZWYgT1MyCi0gICAgICAgICAgICAgICAgICBDSEFS IG9sZHRlcm1bNjRdLCAqcDsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICAgIC8q IElzb2xhdGUgdGhlIHNwZWNpZmllZCB0ZXJtaW5hbCB0eXBlIHN0cmluZyAqLwotICAgICAgICAg ICAgICAgICAgd2hpbGUgKHNiW2krK10gIT0gSUFDKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg aWYgKGkgPT0gNDAgfHwgICAgLyogbWF4IGxlbiBvZiB0ZXJtIHN0cmluZyAtIFJGQyAqLwotICAg ICAgICAgICAgICAgICAgICAgICAgICBzYltpXSA9PSBJQUMpIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgc2JbaV0gPSAnXDAnOwotICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0jaWZkZWYgT1My Ci0jaWZuZGVmIE5PVEVSTQotICAgICAgICAgICAgICAgICAgc3RydXByKCYoc2JbMV0pKTsgICAg IC8qIFVwcGVyIGNhc2UgaXQgKi8KLSAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0g bWF4X3R0OyBpKyspIHsgLyogZmluZCBpdCBpbiBvdXIgbGlzdCAqLwotICAgICAgICAgICAgICAg ICAgICAgIGlmICghc3RyY21wKCYoc2JbMV0pLHR0X2luZm9baV0ueF9uYW1lKQotICAgICAgICAg ICAgICAgICAgICAgICAgICAmJiBpICE9IFRUX1ZUTlQpIC8qIGNhbid0IHN1cHBvcnQgVlROVCBh cyBzZXJ2ZXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogU2V0IHRlcm1pbmFsIHR5cGUgdG8gdGhlIG9uZSBjaG9zZW4gKi8KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gdHRfdHlwZSkKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzZXR0ZXJtdHlwZShpLDApOwotICAgICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgICBpZiAoaSA+IG1heF90dCAmJgotICAgICAgICAgICAgICAgICAgICAgIHN0 cmNtcCgmKHNiWzFdKSxURUxPUFRfU0IoVEVMT1BUX1RUWVBFKS50ZXJtLnR5cGUpKSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgLyogQ291bGRuJ3QgZmluZCB0aGUgc3BlY2lmaWVkIHRlcm0gdHlw ZSAqLwotICAgICAgICAgICAgICAgICAgICAgIHNiWzQwXSA9ICdcMCc7Ci0gICAgICAgICAgICAg ICAgICAgICAgc3RyY3B5KFRFTE9QVF9TQihURUxPUFRfVFRZUEUpLnRlcm0udHlwZSwmKHNiWzFd KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgLyogU0IgVFRZUEUgU0VORCAqLwotICAgICAgICAg ICAgICAgICAgICAgIHRuX3NzYm9wdChURUxPUFRfVFRZUEUsVEVMUVVBTF9TRU5ELE5VTEwsMCk7 Ci0gICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfU0IoVEVMT1BUX1RUWVBF KT0xOwotICAgICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIE5PVEVSTSAqLwotI2Vsc2UgLyog T1MyICovCi0gICAgICAgICAgICAgICAgICBwID0gKENIQVIgKikgZ2V0ZW52KCJURVJNIik7Ci0g ICAgICAgICAgICAgICAgICBpZiAocCkKLSAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KChj aGFyICopb2xkdGVybSwoY2hhciAqKXAsNjMpOwotICAgICAgICAgICAgICAgICAgZWxzZQotICAg ICAgICAgICAgICAgICAgICBvbGR0ZXJtWzBdID0gJ1wwJzsKLSAgICAgICAgICAgICAgICAgIGNr bG93ZXIoKGNoYXIgKikmKHNiWzFdKSk7IC8qIExvd2VyIGNhc2UgbmV3IHRlcm0gKi8KLSAgICAg ICAgICAgICAgICAgIGNrbWFrbXNnKHRlcm1fYnVmLDY0LCJURVJNPSIsKGNoYXIgKikmKHNiWzFd KSxOVUxMLE5VTEwpOwotI2lmZGVmIE9TMk9SVU5JWAotI2lmbmRlZiBOT1BVVEVOVgotICAgICAg ICAgICAgICAgICAgcHV0ZW52KHRlcm1fYnVmKTsKLSNlbmRpZiAvKiBOT1BVVEVOViAqLwotI2Vu ZGlmIC8qIE9TMk9SVU5JWCAqLwotI2lmZGVmIENLX0NVUlNFUwotI2lmbmRlZiBNWUNVUlNFUwot I2lmbmRlZiBDT0hFUkVOVAotICAgICAgICAgICAgICAgICAgaWYgKHRybWJ1ZikgewotICAgICAg ICAgICAgICAgICAgICAgIGlmICh0Z2V0ZW50KHRybWJ1ZiwoY2hhciAqKSZzYlsxXSkgPCAxKSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVuc3VwcG9ydGVkIHRlcm1pbmFsLiAgSWYg bmV3IGFuZCBvbGQgdGVybWluYWwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHlw ZXMgZG8gbm90IG1hdGNoLCBhc2sgZm9yIGFub3RoZXIgdHlwZS4gKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKHN0cmNtcCgoY2hhciAqKW9sZHRlcm0sKGNoYXIgKikmc2JbMV0pKSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQiBUVFlQRSBTRU5EICovCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0bl9zc2JvcHQoVEVMT1BUX1RUWVBFLFRFTFFVQUxf U0VORCxOVUxMLDApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1VOQU5T V0VSRURfU0IoVEVMT1BUX1RUWVBFKT0xOwotICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIENP SEVSRU5UICovCi0jZW5kaWYgLyogTVlDVVJTRVMgKi8KLSNlbmRpZiAvKiBDS19DVVJTRVMgKi8K LSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg ICAgICAgYnJlYWs7Ci0jaWZkZWYgQ0tfRU5WSVJPTk1FTlQKLSNpZmRlZiBDS19YRElTUExPQwot ICAgICAgICAgIGNhc2UgVEVMT1BUX1hESVNQTE9DOiAgICAgICAgIC8qIFNlbmQgWC1EaXNwbGF5 IExvY2F0aW9uICovCi0gICAgICAgICAgICBpZiAoc2JbMF0gPT0gVEVMUVVBTF9TRU5EKSB7Lyog U0VORCBYLURpc3BsYXkgTG9jPyAqLwotICAgICAgICAgICAgICAgIGlmICggIXRuX2RlbGF5X3Ni IHx8ICF0bl9vdXRzdCgwKSB8fCB0bl9pbml0ICkgewotICAgICAgICAgICAgICAgICAgICBpZiAo dG5fc3hkaXNwbG9jKCkgPCAwKSAgICAgLyogWWVzLCBzbyBzZW5kIGl0LiAqLwotICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg ICAgICAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX1hESVNQTE9DKS54ZGlzcC5uZWVkX3Rv X3NlbmQgPSAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg IC8qIElTIC0tIFggRGlzcGxheSBMb2NhdGlvbiAobm90IHN1cHBvcnRlZCkgKi8KLSAgICAgICAg ICAgIGVsc2UgaWYgKHNiWzBdID09IFRFTFFVQUxfSVMpIHsKLSAgICAgICAgICAgICAgICBpbnQg aSA9IDA7Ci0gICAgICAgICAgICAgICAgLyogSXNvbGF0ZSB0aGUgc3BlY2lmaWVkIFgtZGlzcGxh eSBzdHJpbmcgKi8KLSAgICAgICAgICAgICAgICB3aGlsZSAoc2JbaSsrXSAhPSBJQUMpIHsKLSAg ICAgICAgICAgICAgICAgICAgaWYgKGkgPj0gVFNCVUZTSVopCi0gICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuICgtMSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzYltpXSA9PSBJQUMpIHsK LSAgICAgICAgICAgICAgICAgICAgICAgIHNiW2ldID0gJ1wwJzsKLSAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsIlRFTE5FVCBTQiBYRElTUExPQyBJUyIsJnNiWzFd LDApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ0tfWERJ U1BMT0MgKi8KLSNlbmRpZiAvKiBDS19FTlZJUk9OTUVOVCAqLwotICAgICAgICAgIGNhc2UgVEVM T1BUX05BV1M6Ci0gICAgICAgICAgICAgIGlmIChzc3RlbG5ldAotI2lmZGVmIElLU0QKLSAgICAg ICAgICAgICAgICAgICB8fCBpbnNlcnZlcgotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgICAgICAg ICAgICAgICApIHsKLSAgICAgICAgICAgICAgICAgIGludCB3ID0gMCwgaCA9IDA7Ci0gICAgICAg ICAgICAgICAgICBpbnQgaSA9IDA7Ci0gICAgICAgICAgICAgICAgICAvKiBBdCB0aGlzIHBvaW50 IHNiW10gc2hvdWxkIGNvbnRhaW4gd2lkdGggYW5kIGhlaWdodCAqLwotICAgICAgICAgICAgICAg ICAgaWYgKHNiW2ldID09IElBQykgaSsrOwotICAgICAgICAgICAgICAgICAgdyA9IChzYltpKytd IDw8IDgpOyAgIC8qIHNhdmUgdXBwZXIgaGVpZ2h0ICovCi0gICAgICAgICAgICAgICAgICBpZiAo c2JbaV0gPT0gSUFDKSBpKys7Ci0gICAgICAgICAgICAgICAgICB3ICs9IHNiW2krK107ICAgICAg ICAgLyogc2F2ZSB0aGUgd2lkdGggKi8KLSAgICAgICAgICAgICAgICAgIGlmIChzYltpXSA9PSBJ QUMpIGkrKzsKLSAgICAgICAgICAgICAgICAgIGggPSAoc2JbaSsrXSA8PCA4KTsgICAvKiBzYXZl IHVwcGVyIGhlaWdodCAqLwotICAgICAgICAgICAgICAgICAgaWYgKHNiW2ldID09IElBQykgaSsr OwotICAgICAgICAgICAgICAgICAgaCArPSBzYltpKytdOwotICAgICAgICAgICAgICAgICAgZGVi dWcoRjExMSwidG5fZG9vcCBOQVdTIFNCIiwid2lkdGgiLHcpOwotICAgICAgICAgICAgICAgICAg ZGVidWcoRjExMSwidG5fZG9vcCBOQVdTIFNCIiwiaGVpZ2h0IixoKTsKLQotICAgICAgICAgICAg ICAgICAgaWYgKHcgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgdyA9IDgwOwotICAgICAgICAg ICAgICAgICAgaWYgKGggPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgaCA9IDI0OwotI2lmbmRl ZiBOT0xPQ0FMCi0gICAgICAgICAgICAgICAgICBpZiAodGNwX2luY29taW5nIHx8IGluc2VydmVy KSB7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgICAgICAgdHRfY29sc1tWVEVSTV0gPSB3 OwotICAgICAgICAgICAgICAgICAgICAgIHR0X3Jvd3NbVlRFUk1dID0gaDsKLSAgICAgICAgICAg ICAgICAgICAgICBWc2NyblNldFdpZHRoKFZURVJNLCB3KTsKLSAgICAgICAgICAgICAgICAgICAg ICBWc2NyblNldEhlaWdodChWVEVSTSwgaCsodHRfc3RhdHVzW1ZURVJNXT8xOjApKTsKLSNpZmRl ZiBJS1NECi0gICAgICAgICAgICAgICAgICAgICAgaWYgKGluc2VydmVyKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgIGNtZF9jb2xzID0gdHRfY29sc1tWQ01EXSA9IHc7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgIGNtZF9yb3dzID0gdHRfcm93c1tWQ01EXSA9IGg7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgIFZzY3JuU2V0V2lkdGgoVkNNRCwgdyk7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgIFZzY3JuU2V0SGVpZ2h0KFZDTUQsIGgpOwotICAgICAgICAgICAgICAgICAgICAg IH0KLSNlbmRpZiAvKiBJS1NEICovCi0jZWxzZSAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICAg ICAgICB0dF9jb2xzID0gdzsKLSAgICAgICAgICAgICAgICAgICAgICB0dF9yb3dzID0gaDsKLSNl bmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0jaWZkZWYgT1MyCi0g ICAgICAgICAgICAgICAgICAgICAgdHRfY29sc1tWQ01EXSA9IHc7Ci0gICAgICAgICAgICAgICAg ICAgICAgdHRfcm93c1tWQ01EXSA9IGg7Ci0gICAgICAgICAgICAgICAgICAgICAgVnNjcm5TZXRX aWR0aChWQ01ELCB3KTsKLSAgICAgICAgICAgICAgICAgICAgICBWc2NyblNldEhlaWdodChWQ01E LCBoKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICAgICAgICBjbWRfY29scyA9 IHc7Ci0gICAgICAgICAgICAgICAgICAgICAgY21kX3Jvd3MgPSBoOwotICAgICAgICAgICAgICAg ICAgfQotI2Vsc2UgLyogTk9MT0NBTCAqLwotICAgICAgICAgICAgICAgICAgY21kX2NvbHMgPSB3 OwotICAgICAgICAgICAgICAgICAgY21kX3Jvd3MgPSBoOwotI2VuZGlmIC8qIE5PTE9DQUwgKi8K LQotICAgICAgICAgICAgICAgICAgLyogQWRkIExJTkVTIGFuZCBDT0xVTU5TIHRvIHRoZSBlbnZp cm9ubWVudCAqLwotICAgICAgICAgICAgICAgICAgY2ttYWttc2coKGNoYXIgKilyb3dzX2J1Ziwx NiwiTElORVM9Iixja2l0b2EoaCksTlVMTCxOVUxMKTsKLSAgICAgICAgICAgICAgICAgIGNrbWFr bXNnKChjaGFyICopY29sc19idWYsMTYsIkNPTFVNTlM9Iixja2l0b2EodyksTlVMTCxOVUxMKTsK LSNpZmRlZiBPUzJPUlVOSVgKLSNpZm5kZWYgTk9QVVRFTlYKLSAgICAgICAgICAgICAgICAgIHB1 dGVudihyb3dzX2J1Zik7Ci0gICAgICAgICAgICAgICAgICBwdXRlbnYoY29sc19idWYpOwotI2Vu ZGlmIC8qIE5PUFVURU5WICovCi0jZW5kaWYgLyogT1MyT1JVTklYICovCi0gICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgQ0tfRU5WSVJPTk1FTlQKLSAgICAgICAg ICBjYXNlIFRFTE9QVF9ORVdFTlZJUk9OOgotICAgICAgICAgICAgc3dpdGNoIChzYlswXSkgewot ICAgICAgICAgICAgICBjYXNlIFRFTFFVQUxfSVM6ICAgICAgICAgICAgICAgICAgLyogSVMgKi8K LSAgICAgICAgICAgICAgY2FzZSBURUxRVUFMX0lORk86ICAgICAgICAgICAgICAgIC8qIElORk8g Ki8KLSAgICAgICAgICAgICAgICBpZiAoc2JbMF0gPT0gVEVMUVVBTF9JUykKLSAgICAgICAgICAg ICAgICAgIGRlYnVnKEYxMDEsInRuX2Rvb3AgTkVXLUVOViBTQiBJUyIsIiIsbi0zKTsKLSAgICAg ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ0bl9kb29wIE5F Vy1FTlYgU0IgSU5GTyIsIiIsbi0zKTsKLSAgICAgICAgICAgICAgICBpZiAoc3N0ZWxuZXQgfHwg aW5zZXJ2ZXIpIHsgLyogWWVzLCByZWNlaXZlIGl0LiAqLwotICAgICAgICAgICAgICAgICAgICBp ZiAodG5fcm5lbnYoKENIQVIgKikmc2JbMV0sbi0zKSA8IDApCi0gICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgIGNhc2UgVEVMUVVBTF9TRU5EOiAgICAgICAgLyogU0VORCAqLwotICAg ICAgICAgICAgICAgIGlmICggc3N0ZWxuZXQgfHwgaW5zZXJ2ZXIgKSAgICAgICAgIC8qIGlnbm9y ZSBpZiBzZXJ2ZXIgKi8KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg ICAgLyogV2UgbmVlZCB0byB0YWtlIHRoZSBzYltdIGFuZCBidWlsZCBhIHN0cnVjdHVyZSAqLwot ICAgICAgICAgICAgICAgIC8qIGNvbnRhaW5pbmcgYWxsIG9mIHRoZSB2YXJpYWJsZXMgYW5kIHR5 cGVzIHRoYXQgKi8KLSAgICAgICAgICAgICAgICAvKiB3ZSBhcmUgc3VwcG9zZWQgdG8ga2VlcCB0 cmFjayBvZiBhbmQgc2VuZCB0byAgICovCi0gICAgICAgICAgICAgICAgLyogdGhlIGhvc3QsIHRo ZW4gY2FsbCB0bl9zbmVudigpLiAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAg LyogT3Igd2UgY2FuIHB1bnQgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0g ICAgICAgICAgICAgICAgaWYgKCAhdG5fZGVsYXlfc2IgfHwgIXRuX291dHN0KDApIHx8IHRuX2lu aXQgKSB7Ci0gICAgICAgICAgICAgICAgICBpZiAodG5fc25lbnYoKENIQVIgKikmc2JbMV0sbi0z KSA8IDApIC8qIFllcywgc2VuZCBpdC4gKi8KLSAgICAgICAgICAgICAgICAgICAgIHJldHVybigt MSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSNpZm5kZWYgVk1TCi0gICAgICAgICAgICAg ICAgICBDSEFSICogeHh4OwotICAgICAgICAgICAgICAgICAgeHh4ID0gKENIQVIgKikgbWFsbG9j KG4tMSk7Ci0jZWxzZQotICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqIHh4eDsKLSAg ICAgICAgICAgICAgICAgIHh4eCA9ICh1bnNpZ25lZCBjaGFyICopIG1hbGxvYyhuLTEpOwotI2Vu ZGlmIC8qIFZNUyAqLwotICAgICAgICAgICAgICAgICAgLyogUG9zdHBvbmUgc2VuZGluZyB1bnRp bCBlbmQgb2YgdG5faW5pKCkgKi8KLSAgICAgICAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRf TkVXRU5WSVJPTikuZW52LnN0ciA9IHh4eDsKLSAgICAgICAgICAgICAgICAgIGlmIChURUxPUFRf U0IoVEVMT1BUX05FV0VOVklST04pLmVudi5zdHIpIHsKLSAgICAgICAgICAgICAgICAgIG1lbWNw eSgoY2hhciAqKVRFTE9QVF9TQihURUxPUFRfTkVXRU5WSVJPTikuZW52LnN0ciwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSZzYlsxXSxuLTMpOwotICAgICAgICAgICAgICAg ICAgVEVMT1BUX1NCKFRFTE9QVF9ORVdFTlZJUk9OKS5lbnYuc3RyW24tM10gPSBJQUM7Ci0gICAg ICAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX05FV0VOVklST04pLmVudi5zdHJbbi0yXSA9 ICdcMCc7Ci0gICAgICAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX05FV0VOVklST04pLmVu di5sZW4gPSBuLTM7Ci0gICAgICAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX05FV0VOVklS T04pLmVudi5uZWVkX3RvX3NlbmQgPSAxOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBDS19FTlZJUk9OTUVOVCAqLwotI2lmZGVmIENLX1NO RExPQwotICAgICAgICAgIGNhc2UgVEVMT1BUX1NORExPQzogewotICAgICAgICAgICAgICBpZiAo IGRlYmxvZyApIHsKLSAgICAgICAgICAgICAgICAgIHNiW24tMl0gPSAnXDAnOwotICAgICAgICAg ICAgICAgICAgZGVidWcoRjExMCwiVEVMTkVUIFNlbmQtTG9jYXRpb24iLHNiLDApOwotICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSNlbmRpZiAvKiBD S19TTkRMT0MgKi8KLSAgICAgICAgICB9IC8qIHN3aXRjaCAqLwotICAgICAgICBicmVhazsKLSAg ICB9Ci0gICAgcmV0dXJuKDApOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQyAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBURUxORVQgRE8gT1BUSU9OICovCi10bl9kb29wKENIQVIgeiwgaW50 IGVjaG8sIGludCAoKmZuKShpbnQpKQotI2Vsc2UKLXRuX2Rvb3AoeiwgZWNobywgZm4pIENIQVIg ejsgaW50IGVjaG87IGludCAoKmZuKSgpOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB0bl9k b29wICovIHsKLSAgICBpbnQgeD0wLCB5PTA7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJ0bl9kb29wIGNo YXIiLCIiLHopOwotICAgIGRlYnVnKEYxMDEsInRuX2Rvb3AgdHRucHJvdG8iLCIiLHR0bnByb3Rv KTsKLQotICAgIGlmICghSVNfVEVMTkVUKCkpIHJldHVybigzKTsKLQotI2lmZGVmIENLX1NTTAot ICAgIGRlYnVnKEYxMDEsInRuX2Rvb3Agc3NsX3Jhd19mbGFnIiwiIixzc2xfcmF3X2ZsYWcpOwot ICAgIGlmIChzc2xfcmF3X2ZsYWcgfHwgdGxzX3Jhd19mbGFnKSByZXR1cm4oNyk7Ci0jZW5kaWYJ LyogQ0tfU1NMICovCi0gICAgZGVidWcoRjEwMCwidG5fZG9vcCB0dG5wcm90byBwcm9jZWVkaW5n Li4uIiwiIiwwKTsKLQotICAgIGlmICh6ICE9IChDSEFSKSBJQUMpIHsKLSAgICAgICAgZGVidWco RjEwMSwidG5fZG9vcCBiYWQgY2FsbCIsIiIseik7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAg fQotICAgIGlmICh0dG5ldCAhPSBORVRfVENQQikgICAgICAgICAgICAgIC8qIENoZWNrIG5ldHdv cmsgdHlwZSAqLwotICAgICAgcmV0dXJuKDApOwotICAgIGlmICh0dG5wcm90byAhPSBOUF9URUxO RVQgJiYKLSAgICAgICAgIHR0bnByb3RvICE9IE5QX05PTkUpICAgICAgICAgICAvKiBDaGVjayBw cm90b2NvbCAqLwotICAgICAgICByZXR1cm4oMCk7Ci0KLSAgICB4ID0gdG5feGRvb3AoeixlY2hv LGZuKTsKLSAgICBpZiAoeCA+PSAwICYmICF0bl9iZWd1bikgewotICAgICAgICB5ID0gdG5fc3Rh cnQoKTsKLSAgICB9Ci0gICAgcmV0dXJuKHkgPCAwID8geSA6IHgpOwotfQotCi0jaWZkZWYgQ0tf RU5WSVJPTk1FTlQKLQotLyogVGVsbmV0IHJlY2VpdmUgbmV3IGVudmlyb25tZW50ICovCi0vKiBS ZXR1cm5zIC0xIG9uIGVycm9yLCAwIGlmIG5vdGhpbmcgaGFwcGVucywgMSBvbiBzdWNjZXNzICov Ci0vKiBJbiBvcmRlciBmb3IgdGhpcyBjb2RlIHRvIHdvcmssIHNiW2xlbl0gPT0gSUFDICAgICAg ICAgICovCi0vKiBXZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IHRoZSBVU0VSIGVudmlyb25tZW50 IHZhcmlhYmxlICovCi0KLWludAotI2lmZGVmIENLX0FOU0lDCi10bl9ybmVudihDSEFSICogc2Is IGludCBsZW4pCi0jZWxzZQotdG5fcm5lbnYoc2IsIGxlbikgQ0hBUiAqIHNiOyBpbnQgbGVuOwot I2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB0bl9ybmVudiAqLyB7ICAgICAgICAgICAgICAgICAg ICAgICAgLyogUmVjZWl2ZSBuZXcgZW52aXJvbm1lbnQgKi8KLSAgICBjaGFyIHZhcm5hbWVbMTdd OwotICAgIGNoYXIgdmFsdWVbNjVdOwotICAgIGNoYXIgKiByZXBseSA9IDAsICogcyA9IDA7Ci0g ICAgaW50IGksaixrLG47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXb3JrZXIu ICovCi0gICAgaW50IHR5cGUgPSAwOyAvKiAwIGZvciBOT05FLCAxIGZvciBWQVIsIDIgZm9yIFVT RVJWQVIsICovCi0gICAgICAgICAgICAgICAgICAvKiAzIGZvciBWQUxVRSBpbiBwcm9ncmVzcyAq LwotCi0gICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSByZXR1cm4oMCk7Ci0gICAgaWYgKHR0bnBy b3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDApOwotICAgIGlmIChzYiA9PSBOVUxMKSByZXR1cm4o LTEpOwotCi0gICAgaWYgKGxlbiA9PSAwKSByZXR1cm4oMSk7Ci0KLSAgICAvKgotICAgIFBhaXJz IG9mIDx0eXBlPiBbVkFSPTAsIFZBTFVFPTEsIEVTQz0yLCBVU0VSVkFSPTNdIDx2YWx1ZT4gInVu dGVybWluYXRlZCIKLSAgICBmb2xsb3cgaGVyZSB1bnRpbCBkb25lLi4uCi0gICAgKi8KLSAgICBm b3IgKGkgPSAwLCBqID0gMCwgayA9IDAsIHR5cGUgPSAwLCB2YXJuYW1lWzBdPSAnXDAnOyBpIDw9 IGxlbjsgaSsrKSB7Ci0gICAgICAgIHN3aXRjaCAoc2JbaV0pIHsKLSAgICAgICAgY2FzZSBURUxf RU5WX1ZBUjogICAgICAgICAgICAgICAvKiBWQVIgKi8KLSAgICAgICAgY2FzZSBURUxfRU5WX1VT RVJWQVI6ICAgICAgICAgICAvKiBVU0VSVkFSICovCi0gICAgICAgIGNhc2UgSUFDOiAgICAgICAg ICAgICAgICAgICAgICAgLyogRW5kIG9mIHRoZSBsaXN0ICovCi0gICAgICAgICAgICBzd2l0Y2gg KHR5cGUpIHsKLSAgICAgICAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAvKiBOb3Ro aW5nIGluIHByb2dyZXNzICovCi0gICAgICAgICAgICAgICAgLyogSWYgd2UgZ2V0IElBQyBvbmx5 LCB0aGVuIHRoYXQgbWVhbnMgdGhlcmUgd2VyZSAqLwotICAgICAgICAgICAgICAgIC8qIG5vIGVu dmlyb25tZW50IHZhcmlhYmxlcyB0byBzZW5kLiAgd2UgYXJlIGRvbmUgKi8KLSAgICAgICAgICAg ICAgICBpZiAoaiA9PSAwICYmIHNiW2ldID09IElBQykKLSAgICAgICAgICAgICAgICAgICAgcmV0 dXJuKDEpOwotICAgICAgICAgICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgIC8qIFZBUiBp biBwcm9ncmVzcyAqLwotICAgICAgICAgICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgICAgIC8q IFVTRVJWQVIgaW4gcHJvZ3Jlc3MgKi8KLSAgICAgICAgICAgICAgY2FzZSAzOiAgICAgICAgICAg ICAgICAgICAvKiBWQUxVRSBpbiBwcm9ncmVzcyAqLwotICAgICAgICAgICAgICAgIHZhbHVlW2td ID0gJ1wwJzsKLSAgICAgICAgICAgICAgICB2YXJuYW1lW2pdID0gJ1wwJzsKLSAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTExLCJ0bl9ybmVudiB2YXJuYW1lIix2YXJuYW1lLHR5cGUpOwotICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTEsInRuX3JuZW52IHZhbHVlIix2YWx1ZSx0eXBlKTsKLSAgICAg ICAgICAgICAgICBpZiAoIXN0cmNtcCh2YXJuYW1lLCJVU0VSIikpIHsKLSNpZmRlZiBDS19BVVRI RU5USUNBVElPTgotICAgICAgICAgICAgICAgICAgICBpZiAoY2tfdG5fYXV0aF92YWxpZCgpICE9 IEFVVEhfVkFMSUQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybiBjaGFyIHN6VXNl ck5hbWVSZXF1ZXN0ZWRbXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInRu X3JuZW52ICE9IEFVVEhfVkFMSUQiLCIiLDApOwotICAgICAgICAgICAgICAgICAgICAgICAgY2tz dHJuY3B5KHN6VXNlck5hbWVSZXF1ZXN0ZWQsdmFsdWUsVUlEQlVGTEVOKTsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGNrc3RybmNweSh1aWRidWYsdmFsdWUsVUlEQlVGTEVOKTsKLSNpZmRlZiBD S19TU0wKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzc2xfYWN0aXZlX2ZsYWcpIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRsc19pc191c2VyX3ZhbGlkKHNzbF9jb24s IHVpZGJ1ZikgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybiBjaGFy IHN6VXNlck5hbWVBdXRoZW50aWNhdGVkW107Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNrc3RybmNweShzelVzZXJOYW1lQXV0aGVudGljYXRlZCx1aWRidWYsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlEQlVGTEVOKTsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1ZBTElEKTsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg KHRsc19hY3RpdmVfZmxhZykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGxz X2lzX3VzZXJfdmFsaWQodGxzX2NvbiwgdWlkYnVmKSApIHsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZXh0ZXJuIGNoYXIgc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWRbXTsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHN6VXNlck5hbWVBdXRoZW50aWNh dGVkLHVpZGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBV SURCVUZMRU4pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVk KEFVVEhfVkFMSUQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICAgICAgICAgICAg fSBlbHNlIHsgICAgLyogQVVUSF9WQUxJRCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaW50 IHggPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwidG5fcm5lbnYgQVVU SF9WQUxJRCB1aWRidWYiLHVpZGJ1ZiwwKTsKLQotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAg ICAgICAgICAgeCA9IGNrc3RyY21wKHZhbHVlLHVpZGJ1ZiwtMSwwKTsgLyogY2FzZSBpbnNlbnNp dGl2ZSAqLwotI2lmZGVmIE5UCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBOVExNIGF1dGhl bnRpY2F0aW9uIHJldHVybnMgbmFtZXMgb2YgdGhlIGZvcm0gKi8KLSAgICAgICAgICAgICAgICAg ICAgICAgIC8qIERPTUFJTlx1c2VyLiAgV2UgbmVlZCB0byBjaGVjayB0byBzZWUgb2YgdGhlICAq LwotICAgICAgICAgICAgICAgICAgICAgICAgLyogVVNFUiBWQVIgY29udGFpbnMgYSBkb21haW4g bmFtZSBvciBub3QuICBJZiAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBub3QsIHRo ZW4gd2UgZG8gbm90IHdhbnQgdG8gY2hhbmdlIHN0YXRlIGlmICAgKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgIC8qIHRoZSB1aWRidWYgbWF0Y2hlcyB0aGUgVVNFUiBWQVIgd2hlbiB0aGUgICAg ICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgLyogRE9NQUlOIGlzIGlnbm9yZWQuICAgICAg ICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHgg JiYgY2tfdG5fYXV0aGVudGljYXRlZCgpID09IEFVVEhUWVBFX05UTE0gKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciAqIHMxPU5VTEwsICogczI9TlVMTDsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgICAgbGVuMSwgbGVuMiwgaTsKLQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxlbjEgPSBzdHJsZW4odmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZvciAoIGk9bGVuMS0xIDsgaT49MCA7IGktLSkgewotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoIHZhbHVlW2ldID09ICdcXCcgKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzMSA9ICZ2YWx1ZVtpKzFdOyAgIC8qIERPTUFJTiBmb3VuZCAq LwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHMxID09IE5VTEwgKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxlbjIgPSBzdHJsZW4odWlkYnVmKTsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaT1sZW4yLTEgOyBpPj0wIDsgaS0tKSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHVpZGJ1ZltpXSA9PSAnXFwn ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMyID0gJnVpZGJ1 ZltpKzFdOyAgIC8qIERPTUFJTiBmb3VuZCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKCBzMiApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB4ID0gY2tzdHJjbXAodmFsdWUsczIsLTEsMCk7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIE5UICovCi0jZWxz ZSAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHggPSBja3N0cmNtcCh2YWx1ZSx1 aWRidWYsLTEsMSk7IC8qIGNhc2Ugc2Vuc2l0aXZlICovCi0jZW5kaWYgLyogT1MyICovCi0gICAg ICAgICAgICAgICAgICAgICAgICBpZiAoIHggKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgZXh0ZXJuIGNoYXIgc3pVc2VyTmFtZVJlcXVlc3RlZFtdOwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNrc3RybmNweSh1aWRidWYsdmFsdWUsVUlEQlVGTEVOKTsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBja3N0cm5jcHkoc3pVc2VyTmFtZVJlcXVlc3RlZCx2YWx1ZSxVSURC VUZMRU4pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9V U0VSKTsKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3Ns X2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykgewotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoIHRsc19pc191c2VyX3ZhbGlkKHNzbF9jb24sIHVpZGJ1ZikgKQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1ZBTElE KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0g ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSNlbHNlIC8q IENLX0FVVEhFTlRJQ0FUSU9OICovCi0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNweSh1aWRi dWYsdmFsdWUsVUlEQlVGTEVOKTsKLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIHZhcm5hbWVbMF0gPSAnXDAnOwotICAgICAgICAgICAgdmFsdWVbMF0gPSAnXDAn OwotICAgICAgICAgICAgaiA9IDA7Ci0gICAgICAgICAgICBrID0gMDsKLSAgICAgICAgICAgIHR5 cGUgPSAoc2JbaV0gPT0gVEVMX0VOVl9VU0VSVkFSID8gMiA6ICAgICAgLyogVVNFUlZBUiAqLwot ICAgICAgICAgICAgICAgICAgICBzYltpXSA9PSBURUxfRU5WX1ZBUiA/IDEgOiAgLyogVkFSICov Ci0gICAgICAgICAgICAgICAgICAgICAwCi0gICAgICAgICAgICAgICAgICAgICApOwotICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVEVMX0VOVl9WQUxVRTogLyogVkFMVUUgKi8KLSAg ICAgICAgICAgIGlmICggdHlwZSA9PSAxIHx8IHR5cGUgPT0gMiApCi0gICAgICAgICAgICAgICAg dHlwZSA9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBURUxfRU5WX0VTQzog ICAgICAgLyogRVNDICovCi0gICAgICAgICAgICAvKiBUYWtlIG5leHQgY2hhcmFjdGVyIGxpdGVy YWxseSAqLwotICAgICAgICAgICAgaWYgKCArK2kgPj0gbGVuICkKLSAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgIC8qIG90aGVyd2lzZSwgZmFsbHRocm91Z2ggc28gYnl0ZSB3aWxs IGJlIGFkZGVkIHRvIHN0cmluZy4gKi8KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHN3 aXRjaCAodHlwZSkgewotICAgICAgICAgICAgY2FzZSAxOiAgICAgLyogVkFSIGluIHByb2dyZXNz ICovCi0gICAgICAgICAgICBjYXNlIDI6ICAgICAvKiBVU0VSVkFSIGluIHByb2dyZXNzICovCi0g ICAgICAgICAgICAgICAgaWYgKCBqIDwgMTYgKQotICAgICAgICAgICAgICAgICAgICB2YXJuYW1l W2orK10gPSBzYltpXTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug MzoKLSAgICAgICAgICAgICAgICBpZiAoIGsgPCA2NCApCi0gICAgICAgICAgICAgICAgICAgIHZh bHVlW2srK10gPSBzYltpXTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K LSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4oMCk7Ci19Ci0KLS8qIFRoZXNlIGFyZSBmb3Ig TWljcm9zb2Z0IFNGVSB2ZXJzaW9uIDIgVGVsbmV0IFNlcnZlciAqLwotI2RlZmluZSBTRlVUTE5U VkVSICJTRlVUTE5UVkVSIgotI2RlZmluZSBTRlVUTE5UTU9ERSAiU0ZVVExOVE1PREUiCi0jZGVm aW5lIFNGVVRMTlRWRVJfVkFMVUUgICIyIgotI2RlZmluZSBTRlVUTE5UTU9ERV9WQUxVRSAiY29u c29sZSIJLyogVGhlIG90aGVyIHZhbHVlIGlzICJzdHJlYW0iICovCi0KLS8qIFRlbG5ldCBzZW5k IG5ldyBlbnZpcm9ubWVudCAqLwotLyogUmV0dXJucyAtMSBvbiBlcnJvciwgMCBpZiBub3RoaW5n IGhhcHBlbnMsIDEgb24gc3VjY2VzcyAqLwotLyogSW4gb3JkZXIgZm9yIHRoaXMgY29kZSB0byB3 b3JrLCBzYltsZW5dID09IElBQyAgICAgICAgICAqLwotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwot dG5fc25lbnYoQ0hBUiAqIHNiLCBpbnQgbGVuKQotI2Vsc2UKLXRuX3NuZW52KHNiLCBsZW4pIENI QVIgKiBzYjsgaW50IGxlbjsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogdG5fc25lbnYgKi8g eyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgbmV3IGVudmlyb25tZW50ICovCi0gICAg Y2hhciB2YXJuYW1lWzE2XTsKLSAgICBjaGFyICogcmVwbHkgPSAwLCAqIHMgPSAwOwotICAgIGlu dCBpLGosbjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdvcmtlci4gKi8KLSAgICBpbnQg dHlwZSA9IDA7ICAgICAgIC8qIDAgZm9yIE5PTkUsIDEgZm9yIFZBUiwgMiBmb3IgVVNFUlZBUiBp biBwcm9ncmVzcyAqLwotICAgIGV4dGVybiBpbnQgY2tfbGNuYW1lOwotICAgIGNoYXIgbG9jYWx1 aWRidWZbVUlEQlVGTEVOXTsJLyogKEluaXRpYWxpemVkIGp1c3QgYmVsb3cpICovCi0gICAgY2hh ciAqIHV1ID0gdWlkYnVmOwotICAgIGNoYXIgKiBkaXNwID0gTlVMTDsKLQotICAgIGxvY2FsdWlk YnVmWzBdID0gJ1wwJzsKLSAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVybigwKTsKLSAg ICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4oMCk7Ci0gICAgaWYgKCFzYikgcmV0 dXJuKC0xKTsKLQotI2lmZGVmIENLX1NTTAotICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJU X1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0K LSNlbmRpZiAvKiBDS19TU0wgKi8KLQotI2lmZGVmIENLX0ZPUldBUkRfWAotICAgIGlmIChURUxP UFRfVShURUxPUFRfRk9SV0FSRF9YKSkgewotICAgICAgICBkaXNwID0gTlVMTDsKLSAgICB9IGVs c2UKLSNlbmRpZiAvKiBDS19GT1JXQVJEX1ggKi8KLSAgICAgICAgZGlzcCA9IChjaGFyICopdG5f Z2V0X2Rpc3BsYXkoKTsKLQotICAgIGlmIChja19sY25hbWUpIHsKLSAgICAgICAgY2tzdHJuY3B5 KGxvY2FsdWlkYnVmLHVpZGJ1ZixVSURCVUZMRU4pOwotICAgICAgICBja2xvd2VyKGxvY2FsdWlk YnVmKTsKLSAgICAgICAgdXUgPSBsb2NhbHVpZGJ1ZjsKLSAgICB9Ci0KLSAgICBja2hleGR1bXAo KENIQVIgKikidG5fc25lbnYgc2JbXSIsc2IsbGVuKTsKLSAgICBkZWJ1ZyhGMTEwLCJ0bl9zbmVu diB1aWRidWYiLHVpZGJ1ZiwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJ0bl9zbmVudiBsb2NhbHVpZGJ1 ZiIsbG9jYWx1aWRidWYsMCk7Ci0gICAgZGVidWcoRjExMCwidG5fc25lbnYgdG5fZW52X3N5cyIs dG5fZW52X3N5cywwKTsKLSAgICBkZWJ1ZyhGMTEwLCJ0bl9zbmVudiB0bl9lbnZfZGlzcCIsdG5f ZW52X2Rpc3AsMCk7Ci0gICAgZGVidWcoRjExMCwidG5fc25lbnYgZGlzcCIsZGlzcCwwKTsKLQot ICAgIC8qIEZpcnN0IGRldGVybWluZSB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHdlIHdpbGwgbmVl ZCAqLwotICAgIGZvciAoaSA9IDAsIGogPSAwLCBuID0gMCwgdHlwZSA9IDAsIHZhcm5hbWVbMF09 ICdcMCc7IGkgPD0gbGVuOyBpKyspIHsKLSAgICAgICAgc3dpdGNoIChzYltpXSkgewotICAgICAg ICAgIGNhc2UgVEVMX0VOVl9WQVI6ICAgICAgICAgICAgIC8qIFZBUiAqLwotICAgICAgICAgIGNh c2UgVEVMX0VOVl9VU0VSVkFSOiAgICAgICAgIC8qIFVTRVJWQVIgKi8KLSAgICAgICAgY2FzZSBJ QUM6ICAgICAgICAgICAgICAgICAgICAgLyogRW5kIG9mIHRoZSBsaXN0ICovCi0gICAgICAgICAg ICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAg LyogTm90aGluZyBpbiBwcm9ncmVzcyAqLwotICAgICAgICAgICAgICAgIC8qIElmIHdlIGdldCBJ QUMgb25seSwgdGhlbiB0aGF0IG1lYW5zIHNlbmQgYWxsICovCi0gICAgICAgICAgICAgICAgLyog VkFSIGFuZCBVU0VSVkFSLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAg ICAgICAgICBpZiAoIShqID09IDAgJiYgc2JbaV0gPT0gSUFDKSkKLSAgICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAvKiBWQVIgaW4g cHJvZ3Jlc3MgKi8KLSAgICAgICAgICAgICAgICB2YXJuYW1lW2pdID0gJ1wwJyA7Ci0gICAgICAg ICAgICAgICAgaWYgKCF2YXJuYW1lWzBdKSB7ICAgICAgLyogU2VuZCBBbGwgKi8KLSAgICAgICAg ICAgICAgICAgICAgaWYgKHV1WzBdKQotICAgICAgICAgICAgICAgICAgICAgIG4gKz0gc3RybGVu KHV1KSArIDQgKyAyOwotICAgICAgICAgICAgICAgICAgICBpZiAodG5fZW52X2pvYlswXSkKLSAg ICAgICAgICAgICAgICAgICAgICBuICs9IHN0cmxlbih0bl9lbnZfam9iKSArIDMgKyAyOwotICAg ICAgICAgICAgICAgICAgICBpZiAodG5fZW52X2FjY3RbMF0pCi0gICAgICAgICAgICAgICAgICAg ICAgbiArPSBzdHJsZW4odG5fZW52X2FjY3QpICsgNCArIDI7Ci0gICAgICAgICAgICAgICAgICAg IGlmICh0bl9lbnZfcHJudFswXSkKLSAgICAgICAgICAgICAgICAgICAgICBuICs9IHN0cmxlbih0 bl9lbnZfcHJudCkgKyA3ICsgMjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRuX2Vudl9zeXNb MF0pCi0gICAgICAgICAgICAgICAgICAgICAgbiArPSBzdHJsZW4odG5fZW52X3N5cykgKyAxMCAr IDI7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkaXNwKQotICAgICAgICAgICAgICAgICAgICAg IG4gKz0gc3RybGVuKGRpc3ApICsgNyArIDI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgh c3RyY21wKHZhcm5hbWUsIlVTRVIiKSAmJiB1dVswXSkKLSAgICAgICAgICAgICAgICAgIG4gKz0g c3RybGVuKHV1KSArIDQgKyAyOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAodmFy bmFtZSwiSk9CIikgJiYgdG5fZW52X2pvYlswXSkKLSAgICAgICAgICAgICAgICAgIG4gKz0gc3Ry bGVuKHRuX2Vudl9qb2IpICsgMyArIDI7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoIXN0cmNt cCh2YXJuYW1lLCJBQ0NUIikgJiYgdG5fZW52X2FjY3RbMF0pCi0gICAgICAgICAgICAgICAgICBu ICs9IHN0cmxlbih0bl9lbnZfYWNjdCkgKyA0ICsgMjsKLSAgICAgICAgICAgICAgICBlbHNlIGlm ICghc3RyY21wKHZhcm5hbWUsIlBSSU5URVIiKSAmJiB0bl9lbnZfcHJudFswXSkKLSAgICAgICAg ICAgICAgICAgIG4gKz0gc3RybGVuKHRuX2Vudl9wcm50KSArIDcgKyAyOwotICAgICAgICAgICAg ICAgIGVsc2UgaWYgKCFzdHJjbXAodmFybmFtZSwiU1lTVEVNVFlQRSIpICYmIHRuX2Vudl9zeXNb MF0pCi0gICAgICAgICAgICAgICAgICBuICs9IHN0cmxlbih0bl9lbnZfc3lzKSArIDEwICsgMjsK LSAgICAgICAgICAgICAgICBlbHNlIGlmICghc3RyY21wKHZhcm5hbWUsIkRJU1BMQVkiKSAmJiBk aXNwKQotICAgICAgICAgICAgICAgICAgbiArPSBzdHJsZW4oZGlzcCkgKyA3ICsgMjsKLSAgICAg ICAgICAgICAgICAvKiBJZiB3ZSBnZXQgSUFDIG9ubHksIHRoZW4gdGhhdCBtZWFucyBzZW5kIGFs bCAqLwotICAgICAgICAgICAgICAgIC8qIFZBUiBhbmQgVVNFUlZBUi4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICBpZiAoIShqID09IDAgJiYgc2JbaV0g PT0gSUFDKSkKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug MjogICAgICAgICAgICAgICAgICAgLyogVVNFUlZBUiBpbiBwcm9ncmVzcyAqLwotICAgICAgICAg ICAgICAgIHZhcm5hbWVbal0gPSAnXDAnIDsKLSAgICAgICAgICAgICAgICBpZiAoIXZhcm5hbWVb MF0pIHsgICAgICAvKiBTZW5kIEFsbCAqLwotICAgICAgICAgICAgICAgICAgICBpbnQgeDsKLSAg ICAgICAgICAgICAgICAgICAgZm9yICggeD0wIDsgeDw4IDsgeCsrICkgewotICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKCB0bl9lbnZfdXNlcnZhclt4XVswXSAmJgotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0bl9lbnZfdXNlcnZhclt4XVsxXSApCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgbiArPSBzdHJsZW4odG5fZW52X3VzZXJ2YXJbeF1bMF0pCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICsgc3RybGVuKHRuX2Vudl91c2VydmFyW3hdWzFdKSArIDI7Ci0g ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCB0bl9zZnUgKSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIE1pY3Jv c29mdCBUZWxuZXQgU2VydmVyICovCi0gICAgICAgICAgICAgICAgICAgICAgICBuICs9IHN0cmxl bihTRlVUTE5UVkVSKSArIHN0cmxlbihTRlVUTE5UVkVSX1ZBTFVFKSArIDI7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBuICs9IHN0cmxlbihTRlVUTE5UTU9ERSkgKwotICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJsZW4oU0ZVVExOVE1PREVfVkFMVUUpICsgMjsKLSAgICAgICAgICAgICAg ICAgICAgfQotI2lmZGVmIENLX1NORExPQwotICAgICAgICAgICAgICAgICAgICBpZiAoIHRuX2xv YyAmJiB0bl9sb2NbMF0gKQotICAgICAgICAgICAgICAgICAgICAgICAgbiArPSBzdHJsZW4oIkxP Q0FUSU9OIikgKyBzdHJsZW4odG5fbG9jKSArIDI7Ci0jZW5kaWYgLyogQ0tfU05ETE9DICovCi0g ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRuX3NmdSAmJiAhc3Ry Y21wKHZhcm5hbWUsU0ZVVExOVFZFUikpCi0gICAgICAgICAgICAgICAgICAgIG4gKz0gc3RybGVu KFNGVVRMTlRWRVIpICsgc3RybGVuKFNGVVRMTlRWRVJfVkFMVUUpICsgMjsKLSAgICAgICAgICAg ICAgICBlbHNlIGlmICh0bl9zZnUgJiYgIXN0cmNtcCh2YXJuYW1lLFNGVVRMTlRNT0RFKSkKLSAg ICAgICAgICAgICAgICAgICAgbiArPSBzdHJsZW4oU0ZVVExOVE1PREUpICsgc3RybGVuKFNGVVRM TlRNT0RFX1ZBTFVFKSArIDI7Ci0jaWZkZWYgQ0tfU05ETE9DCi0gICAgICAgICAgICAgICAgZWxz ZSBpZiAoIHRuX2xvYyAmJiB0bl9sb2NbMF0gJiYgIXN0cmNtcCh2YXJuYW1lLCJMT0NBVElPTiIp KQotICAgICAgICAgICAgICAgICAgICBuICs9IHN0cmxlbigiTE9DQVRJT04iKSArIHN0cmxlbih0 bl9sb2MpICsgMjsKLSNlbmRpZiAvKiBDS19TTkRMT0MgKi8KLSAgICAgICAgICAgICAgICBlbHNl IHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHg7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAo IHg9MCA7IHg8OCA7IHgrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdG5fZW52 X3VzZXJ2YXJbeF1bMF0gJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG5fZW52X3Vz ZXJ2YXJbeF1bMV0gJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXN0cmNtcCh2YXJu YW1lLHRuX2Vudl91c2VydmFyW3hdWzBdKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBu ICs9IHN0cmxlbih0bl9lbnZfdXNlcnZhclt4XVswXSkKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKyBzdHJsZW4odG5fZW52X3VzZXJ2YXJbeF1bMV0pICsgMjsKLSAgICAgICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhcm5hbWVbMF0gPSAnXDAnOwotICAgICAgICAgICAg aiA9IDA7Ci0gICAgICAgICAgICB0eXBlID0gKHNiW2ldID09IFRFTF9FTlZfVVNFUlZBUiA/IDIg OiAgICAgIC8qIFVTRVJWQVIgKi8KLSAgICAgICAgICAgICAgICAgICAgc2JbaV0gPT0gVEVMX0VO Vl9WQVIgPyAxIDogICAgICAgICAgLyogVkFSICovCi0gICAgICAgICAgICAgICAgICAgIDAKLSAg ICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBU RUxfRU5WX1ZBTFVFOiAgICAgICAgICAgLyogVkFMVUUgKi8KLSAgICAgICAgICAgIC8qIFByb3Rv Y29sIEVycm9yICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCAiVEVMTkVUIFN1Ym5lZ290aWF0 aW9uIGVycm9yIC0gVkFMVUUgaW4gU0VORCIsICIiLDApOwotICAgICAgICAgICAgaWYgKHRuX2Rl YiB8fCBkZWJzZXMpCi0gICAgICAgICAgICAgIHRuX2RlYnVnKCJURUxORVQgU3VibmVnb3RpYXRp b24gZXJyb3IgLSBWQUxVRSBpbiBTRU5EIik7Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAg ICAgICAgY2FzZSBURUxfRU5WX0VTQzogICAgIC8qIEVTQyAqLwotICAgICAgICAgICAgaWYgKCsr aSA+PSBsZW4pCi0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg ICAgICAgICBpZiAoaiA8IDE2ICkKLSAgICAgICAgICAgICAgdmFybmFtZVtqKytdID0gc2JbaV07 Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmVwbHkgPSBtYWxsb2MobiArIDE2KTsgICAgICAgICAg ICAgIC8qIExlYXZlIHJvb20gZm9yIElBQyBzdHVmZiAqLwotICAgIGlmICghcmVwbHkpIHsKLSAg ICAgICAgZGVidWcoRjEwMCwgIlRFTE5FVCBTdWJuZWdvdGlhdGlvbiBlcnJvciAtIG1hbGxvYyBm YWlsZWQiLCAiIiwwKTsKLSAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCi0gICAgICAgICAg dG5fZGVidWcoIlRFTE5FVCBTdWJuZWdvdGlhdGlvbiBlcnJvciAtIG1hbGxvYyBmYWlsZWQiKTsK LQotICAgICAgICAvKiBTZW5kIGEgcmV0dXJuIHBhY2tldCB3aXRoIG5vIHZhcmlhYmxlcyBzbyB0 aGF0IHRoZSBob3N0ICovCi0gICAgICAgIC8qIG1heSBjb250aW51ZSB3aXRoIGFkZGl0aW9uYWwg bmVnb3RpYXRpb25zICAgICAgICAgICAgICAgKi8KLSAgICAgICAgaWYgKHRuX3NzYm9wdChURUxP UFRfTkVXRU5WSVJPTixURUxRVUFMX0lTLCIiLDApIDwgMCkKLSAgICAgICAgICByZXR1cm4oLTEp OwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotCi0gICAgLyogTm93IGNvbnN0cnVjdCB0aGUg cmVhbCByZXBseSAqLwotCi0gICAgbiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogU3RhcnQgYXQgYmVnaW5uaW5nIG9mIGJ1ZmZlciAqLwotLyoKLSAgUGFpcnMgb2YgPHR5cGU+ IFtWQVI9MCwgVkFMVUU9MSwgRVNDPTIsIFVTRVJWQVI9M10gPHZhbHVlPiAidW50ZXJtaW5hdGVk IgotICBmb2xsb3cgaGVyZSB1bnRpbCBkb25lLi4uCi0qLwotICAgIGZvciAoaSA9IDAsIGogPSAw LCB0eXBlID0gMCwgdmFybmFtZVswXT0gJ1wwJzsgaSA8PSBsZW47IGkrKykgewotICAgICAgICBz d2l0Y2ggKHNiW2ldKSB7Ci0gICAgICAgICAgY2FzZSBURUxfRU5WX1ZBUjogICAgICAgICAgICAg LyogVkFSICovCi0gICAgICAgICAgY2FzZSBURUxfRU5WX1VTRVJWQVI6ICAgICAgICAgLyogVVNF UlZBUiAqLwotICAgICAgICAgIGNhc2UgSUFDOiAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBv ZiB0aGUgbGlzdCAqLwotICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgICAgICAg IGNhc2UgMDogICAgICAgICAgICAgICAgICAgLyogTm90aGluZyBpbiBwcm9ncmVzcyAqLwotICAg ICAgICAgICAgICAgIC8qIElmIHdlIGdldCBJQUMgb25seSwgdGhlbiB0aGF0IG1lYW5zIHNlbmQg YWxsICovCi0gICAgICAgICAgICAgICAgLyogVkFSIGFuZCBVU0VSVkFSLiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBpZiAoIShqID09IDAgJiYgc2JbaV0g PT0gSUFDKSkKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIDE6 ICAgICAgICAgICAgICAgICAgIC8qIFZBUiBpbiBwcm9ncmVzcyAqLwotICAgICAgICAgICAgICAg IHZhcm5hbWVbal0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGlmICghdmFybmFtZVswXSkgewot ICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIEFsbCAqLwotICAgICAgICAgICAgICAgICAgICBp ZiAodXVbMF0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5W25dID0gVEVMX0VOVl9W QVI7IC8qIFZBUiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzFd LCJVU0VSIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVtuKzVdID0gVEVMX0VOVl9W QUxVRTsgICAgICAgICAgICAgLyogVkFMVUUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0 cmNweSgmcmVwbHlbbis2XSx1dSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuICs9IHN0cmxl bih1dSkgKyA0ICsgMjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg ICBpZiAodG5fZW52X2pvYlswXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlbbl0g PSBURUxfRU5WX1ZBUjsgLyogVkFSICovCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHko JnJlcGx5W24rMV0sIkpPQiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlbbis0XSA9 IFRFTF9FTlZfVkFMVUU7ICAgICAvKiBWQUxVRSAqLwotICAgICAgICAgICAgICAgICAgICAgICAg c3RyY3B5KCZyZXBseVtuKzVdLHRuX2Vudl9qb2IpOwotICAgICAgICAgICAgICAgICAgICAgICAg biArPSBzdHJsZW4odG5fZW52X2pvYikgKyAzICsgMjsKLSAgICAgICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgICAgICBpZiAodG5fZW52X2FjY3RbMF0pIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgIHJlcGx5W25dID0gVEVMX0VOVl9WQVI7IC8qIFZBUiAqLwotICAgICAgICAgICAg ICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzFdLCJBQ0NUIik7Ci0gICAgICAgICAgICAgICAg ICAgICAgICByZXBseVtuKzVdID0gVEVMX0VOVl9WQUxVRTsgICAgIC8qIFZBTFVFICovCi0gICAg ICAgICAgICAgICAgICAgICAgICBzdHJjcHkoJnJlcGx5W24rNl0sdG5fZW52X2FjY3QpOwotICAg ICAgICAgICAgICAgICAgICAgICAgbiArPSBzdHJsZW4odG5fZW52X2FjY3QpICsgNCArIDI7Ci0g ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHRuX2Vudl9wcm50 WzBdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBseVtuXSA9IFRFTF9FTlZfVkFSOyAv KiBWQVIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlbbisxXSwiUFJJ TlRFUiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlbbis4XSA9IFRFTF9FTlZfVkFM VUU7ICAgICAvKiBWQUxVRSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBs eVtuKzldLHRuX2Vudl9wcm50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG4gKz0gc3RybGVu KHRuX2Vudl9wcm50KSArIDcgKyAyOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgICAgIGlmICh0bl9lbnZfc3lzWzBdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy ZXBseVtuXSA9IFRFTF9FTlZfVkFSOyAvKiBWQVIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAg IHN0cmNweSgmcmVwbHlbbisxXSwiU1lTVEVNVFlQRSIpOwotICAgICAgICAgICAgICAgICAgICAg ICAgcmVwbHlbbisxMV0gPSBURUxfRU5WX1ZBTFVFOyAvKiBWQUxVRSAqLwotICAgICAgICAgICAg ICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzEyXSx0bl9lbnZfc3lzKTsKLSAgICAgICAgICAg ICAgICAgICAgICAgIG4gKz0gc3RybGVuKHRuX2Vudl9zeXMpICsgMTAgKyAyOwotICAgICAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkaXNwKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICByZXBseVtuXSA9IFRFTF9FTlZfVkFSOyAvKiBWQVIgKi8KLSAgICAgICAg ICAgICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlbbisxXSwiRElTUExBWSIpOwotICAgICAgICAg ICAgICAgICAgICAgICAgcmVwbHlbbis4XSA9IFRFTF9FTlZfVkFMVUU7ICAgICAvKiBWQUxVRSAq LwotICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzldLGRpc3ApOwotICAg ICAgICAgICAgICAgICAgICAgICAgbiArPSBzdHJsZW4oZGlzcCkgKyA3ICsgMjsKLSAgICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcCh2YXJuYW1l LCJVU0VSIikgJiYgdXVbMF0pIHsKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlbbl0gPSBURUxf RU5WX1ZBUjsgICAgIC8qIFZBUiAqLwotICAgICAgICAgICAgICAgICAgICBzdHJjcHkoJnJlcGx5 W24rMV0sIlVTRVIiKTsKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlbbis1XSA9IFRFTF9FTlZf VkFMVUU7IC8qIFZBTFVFICovCi0gICAgICAgICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlbbis2 XSx1dSk7Ci0gICAgICAgICAgICAgICAgICAgIG4gKz0gc3RybGVuKHV1KSArIDQgKyAyOwotICAg ICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcCh2YXJuYW1lLCJKT0IiKSAmJiB0bl9lbnZf am9iWzBdKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5W25dID0gVEVMX0VOVl9WQVI7ICAg ICAvKiBWQVIgKi8KLSAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzFdLCJKT0Ii KTsKLSAgICAgICAgICAgICAgICAgICAgcmVwbHlbbis0XSA9IFRFTF9FTlZfVkFMVUU7IC8qIFZB TFVFICovCi0gICAgICAgICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlbbis1XSx0bl9lbnZfam9i KTsKLSAgICAgICAgICAgICAgICAgICAgbiArPSBzdHJsZW4odG5fZW52X2pvYikgKyAzICsgMjsK LSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAodmFybmFtZSwiQUNDVCIpICYmIHRu X2Vudl9hY2N0WzBdKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5W25dID0gVEVMX0VOVl9W QVI7ICAgICAvKiBWQVIgKi8KLSAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzFd LCJBQ0NUIik7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5W24rNV0gPSBURUxfRU5WX1ZBTFVF OyAvKiBWQUxVRSAqLwotICAgICAgICAgICAgICAgICAgICBzdHJjcHkoJnJlcGx5W24rNl0sdG5f ZW52X2FjY3QpOwotICAgICAgICAgICAgICAgICAgICBuICs9IHN0cmxlbih0bl9lbnZfYWNjdCkg KyA0ICsgMjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAodmFybmFtZSwiUFJJ TlRFUiIpICYmIHRuX2Vudl9wcm50WzBdKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5W25d ID0gVEVMX0VOVl9WQVI7ICAgICAvKiBWQVIgKi8KLSAgICAgICAgICAgICAgICAgICAgc3RyY3B5 KCZyZXBseVtuKzFdLCJQUklOVEVSIik7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5W24rOF0g PSBURUxfRU5WX1ZBTFVFOyAvKiBWQUxVRSAqLwotICAgICAgICAgICAgICAgICAgICBzdHJjcHko JnJlcGx5W24rOV0sdG5fZW52X3BybnQpOwotICAgICAgICAgICAgICAgICAgICBuICs9IHN0cmxl bih0bl9lbnZfcHJudCkgKyA3ICsgMjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJj bXAodmFybmFtZSwiU1lTVEVNVFlQRSIpICYmIHRuX2Vudl9zeXNbMF0pIHsKLSAgICAgICAgICAg ICAgICAgICAgcmVwbHlbbl0gPSBURUxfRU5WX1ZBUjsgICAgIC8qIFZBUiAqLwotICAgICAgICAg ICAgICAgICAgICBzdHJjcHkoJnJlcGx5W24rMV0sIlNZU1RFTVRZUEUiKTsKLSAgICAgICAgICAg ICAgICAgICAgcmVwbHlbbisxMV0gPSBURUxfRU5WX1ZBTFVFOyAgICAgICAgLyogVkFMVUUgKi8K LSAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzEyXSx0bl9lbnZfc3lzKTsKLSAg ICAgICAgICAgICAgICAgICAgbiArPSBzdHJsZW4odG5fZW52X3N5cykgKyAxMCArIDI7Ci0gICAg ICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKHZhcm5hbWUsIkRJU1BMQVkiKSAmJiBkaXNw KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5W25dID0gVEVMX0VOVl9WQVI7ICAgICAvKiBW QVIgKi8KLSAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzFdLCJESVNQTEFZIik7 Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5W24rOF0gPSBURUxfRU5WX1ZBTFVFOyAvKiBWQUxV RSAqLwotICAgICAgICAgICAgICAgICAgICBzdHJjcHkoJnJlcGx5W24rOV0sZGlzcCk7Ci0gICAg ICAgICAgICAgICAgICAgIG4gKz0gc3RybGVuKGRpc3ApICsgNyArIDI7Ci0gICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgICAgLyogSWYgd2UgZ2V0IElBQyBvbmx5LCB0aGVuIHRoYXQg bWVhbnMgc2VuZCBhbGwgKi8KLSAgICAgICAgICAgICAgICAgIC8qIFZBUiBhbmQgVVNFUlZBUi4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICBpZiAoIShq ID09IDAgJiYgc2JbaV0gPT0gSUFDKSkKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgIGNhc2UgMjogICAgIC8qIFVTRVJWQVIgaW4gcHJvZ3Jlc3MgKi8KLSAgICAgICAg ICAgICAgICAgIHZhcm5hbWVbal0gPSAnXDAnOwotICAgICAgICAgICAgICAgICAgaWYgKCF2YXJu YW1lWzBdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgLyogU2VuZCBBbGwgKi8KLSAgICAgICAg ICAgICAgICAgICAgICBpbnQgeCx5OwotICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHg9MCA7 IHg8OCA7IHgrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0bl9lbnZfdXNl cnZhclt4XVswXSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRuX2Vudl91c2Vy dmFyW3hdWzFdICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlbbl0gPSBU RUxfRU5WX1VTRVJWQVI7ICAgICAvKiBWQVIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHkgPSBzdHJsZW4odG5fZW52X3VzZXJ2YXJbeF1bMF0pOwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzFdLHRuX2Vudl91c2VydmFyW3hdWzBdKTsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5W24reSsxXSA9IFRFTF9FTlZfVkFMVUU7 IC8qIFZBTFVFICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkoJnJlcGx5 W24reSsyXSx0bl9lbnZfdXNlcnZhclt4XVsxXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBuICs9IHkrc3RybGVuKHRuX2Vudl91c2VydmFyW3hdWzFdKSsyOwotICAgICAgICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg ICAgICAgIGlmICggdG5fc2Z1ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21w YXRpYmlsaXR5IHdpdGggTWljcm9zb2Z0IFRlbG5ldCBTZXJ2ZXIgKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgcmVwbHlbbl0gPSBURUxfRU5WX1VTRVJWQVI7ICAgICAvKiBWQVIgKi8KLSAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzFdLFNGVVRMTlRWRVIpOwot ICAgICAgICAgICAgICAgICAgICAgICAgICByZXBseVtuKzExXSA9IFRFTF9FTlZfVkFMVUU7IC8q IFZBTFVFICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlbbisxMl0s U0ZVVExOVFZFUl9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIG4gKz0gc3RybGVu KFNGVVRMTlRWRVIpK3N0cmxlbihTRlVUTE5UVkVSX1ZBTFVFKSsyOwotCi0gICAgICAgICAgICAg ICAgICAgICAgICAgIHJlcGx5W25dID0gVEVMX0VOVl9VU0VSVkFSOyAgICAgLyogVkFSICovCi0g ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlbbisxXSxTRlVUTE5UTU9ERSk7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5W24rMTJdID0gVEVMX0VOVl9WQUxVRTsg LyogVkFMVUUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzEz XSxTRlVUTE5UTU9ERV9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIG4gKz0gc3Ry bGVuKFNGVVRMTlRNT0RFKStzdHJsZW4oU0ZVVExOVE1PREVfVkFMVUUpKzI7Ci0gICAgICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIGlmICh0bl9sb2MgJiYgdG5fbG9j WzBdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5W25dID0gVEVMX0VOVl9VU0VS VkFSOyAgICAgLyogVkFSICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSgmcmVw bHlbbisxXSwiTE9DQVRJT04iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlbbis5 XSA9IFRFTF9FTlZfVkFMVUU7IC8qIFZBTFVFICovCi0gICAgICAgICAgICAgICAgICAgICAgICAg IHN0cmNweSgmcmVwbHlbbisxMF0sdG5fbG9jKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg biArPSBzdHJsZW4oIkxPQ0FUSU9OIikgKyBzdHJsZW4odG5fbG9jKSArIDI7Ci0gICAgICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfSAgZWxzZSBpZiAodG5fc2Z1ICYmICFz dHJjbXAodmFybmFtZSxTRlVUTE5UVkVSKSkgewotICAgICAgICAgICAgICAgICAgICAgIHJlcGx5 W25dID0gVEVMX0VOVl9VU0VSVkFSOyAgICAgLyogVkFSICovCi0gICAgICAgICAgICAgICAgICAg ICAgc3RyY3B5KCZyZXBseVtuKzFdLFNGVVRMTlRWRVIpOwotICAgICAgICAgICAgICAgICAgICAg IHJlcGx5W24rMTFdID0gVEVMX0VOVl9WQUxVRTsgLyogVkFMVUUgKi8KLSAgICAgICAgICAgICAg ICAgICAgICBzdHJjcHkoJnJlcGx5W24rMTJdLFNGVVRMTlRWRVJfVkFMVUUpOwotICAgICAgICAg ICAgICAgICAgICAgIG4gKz0gc3RybGVuKFNGVVRMTlRWRVIpICsgc3RybGVuKFNGVVRMTlRWRVJf VkFMVUUpICsgMjsKLSAgICAgICAgICAgICAgICAgIH0gIGVsc2UgaWYgKHRuX3NmdSAmJiAhc3Ry Y21wKHZhcm5hbWUsU0ZVVExOVE1PREUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgcmVwbHlb bl0gPSBURUxfRU5WX1VTRVJWQVI7ICAgICAvKiBWQVIgKi8KLSAgICAgICAgICAgICAgICAgICAg ICBzdHJjcHkoJnJlcGx5W24rMV0sU0ZVVExOVE1PREUpOwotICAgICAgICAgICAgICAgICAgICAg IHJlcGx5W24rMTJdID0gVEVMX0VOVl9WQUxVRTsgLyogVkFMVUUgKi8KLSAgICAgICAgICAgICAg ICAgICAgICBzdHJjcHkoJnJlcGx5W24rMTNdLFNGVVRMTlRNT0RFX1ZBTFVFKTsKLSAgICAgICAg ICAgICAgICAgICAgICBuICs9IHN0cmxlbihTRlVUTE5UTU9ERSkgKyBzdHJsZW4oU0ZVVExOVE1P REVfVkFMVUUpICsgMjsKLSAgICAgICAgICAgICAgICAgIH0KLSNpZmRlZiBDS19TTkRMT0MKLSAg ICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRuX2xvYyAmJiB0bl9sb2NbMF0gJiYgIXN0cmNtcCh2 YXJuYW1lLCJMT0NBVElPTiIpKXsKLSAgICAgICAgICAgICAgICAgICAgICByZXBseVtuXSA9IFRF TF9FTlZfVVNFUlZBUjsgICAgIC8qIFZBUiAqLwotICAgICAgICAgICAgICAgICAgICAgIHN0cmNw eSgmcmVwbHlbbisxXSwiTE9DQVRJT04iKTsKLSAgICAgICAgICAgICAgICAgICAgICByZXBseVtu KzldID0gVEVMX0VOVl9WQUxVRTsgLyogVkFMVUUgKi8KLSAgICAgICAgICAgICAgICAgICAgICBz dHJjcHkoJnJlcGx5W24rMTBdLHRuX2xvYyk7Ci0gICAgICAgICAgICAgICAgICAgICAgbiArPSBz dHJsZW4oIkxPQ0FUSU9OIikgKyBzdHJsZW4odG5fbG9jKSArIDI7Ci0gICAgICAgICAgICAgICAg ICB9Ci0jZW5kaWYgLyogQ0tfU05ETE9DICovCi0gICAgICAgICAgICAgICAgICBlbHNlIHsKLSAg ICAgICAgICAgICAgICAgICAgICBpbnQgeCx5OwotICAgICAgICAgICAgICAgICAgICAgIGZvciAo IHg9MCA7IHg8OCA7IHgrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0bl9l bnZfdXNlcnZhclt4XVswXSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRuX2Vu dl91c2VydmFyW3hdWzFdICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXN0cmNt cCh2YXJuYW1lLHRuX2Vudl91c2VydmFyW3hdWzBdKSkgewotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmVwbHlbbl0gPSBURUxfRU5WX1VTRVJWQVI7ICAgICAvKiBWQVIgKi8KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBzdHJsZW4odG5fZW52X3VzZXJ2YXJbeF1bMF0p OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzFdLHRuX2Vu dl91c2VydmFyW3hdWzBdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5W24r eSsxXSA9IFRFTF9FTlZfVkFMVUU7IC8qIFZBTFVFICovCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJjcHkoJnJlcGx5W24reSsyXSx0bl9lbnZfdXNlcnZhclt4XVsxXSk7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuICs9IHkrc3RybGVuKHRuX2Vudl91c2VydmFyW3hd WzFdKSsyOwotICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgfQotICAgICAgICAgICAgdmFybmFtZVswXSA9ICdcMCc7Ci0gICAgICAgICAgICBqID0g MDsKLSAgICAgICAgICAgIHR5cGUgPSAoc2JbaV0gPT0gVEVMX0VOVl9VU0VSVkFSID8gMiA6ICAg ICAgLyogVVNFUlZBUiAqLwotICAgICAgICAgICAgICAgICAgICBzYltpXSA9PSBURUxfRU5WX1ZB UiA/IDEgOiAgLyogVkFSICovCi0gICAgICAgICAgICAgICAgICAgIDAKLSAgICAgICAgICAgICAg ICAgICApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBURUxfRU5WX1ZBTFVF OiAvKiBWQUxVRSAqLwotICAgICAgICAgICAgLyogUHJvdG9jb2wgRXJyb3IgKi8KLSAgICAgICAg ICAgIGRlYnVnKEYxMDAsICJURUxORVQgU3VibmVnb3RpYXRpb24gZXJyb3IgLSBWQUxVRSBpbiBT RU5EIiwgIiIsMCk7Ci0gICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKLSAgICAgICAg ICAgICAgdG5fZGVidWcoIlRFTE5FVCBTdWJuZWdvdGlhdGlvbiBlcnJvciAtIFZBTFVFIGluIFNF TkQiKTsKLSAgICAgICAgICAgIHJldHVybigwKTsgIC8qIFdhcyAtMSBidXQgdGhhdCB3b3VsZCBi ZSB0YWtlbiBhcyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgLyogYW4gSS9PIGVycm9yLCBz byBhYnNvcmIgaXQgYW5kIGdvIG9uLiAqLwotICAgICAgICAgIGNhc2UgVEVMX0VOVl9FU0M6ICAg ICAvKiBFU0MgKi8KLSAgICAgICAgICAgIC8qIE5vdCBzdXJlIHdoYXQgdGhpcyBmb3IuICBRdW90 ZSBuZXh0IGNoYXJhY3Rlcj8gKi8KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1 bHQ6Ci0gICAgICAgICAgICB2YXJuYW1lW2orK10gPSBzYltpXTsKLSAgICAgICAgfQotICAgIH0K LSAgICBpZiAodG5fc3Nib3B0KFRFTE9QVF9ORVdFTlZJUk9OLFRFTFFVQUxfSVMscmVwbHksbikg PCAwKSB7Ci0gICAgICAgIGZyZWUocmVwbHkpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0K LSAgICBmcmVlKHJlcGx5KTsKLSAgICByZXR1cm4oMSk7Ci19Ci0jZW5kaWYgLyogQ0tfRU5WSVJP Tk1FTlQgKi8KLQotLyogVGVsbmV0IHNlbmQgdGVybWluYWwgdHlwZSAqLwotLyogUmV0dXJucyAt MSBvbiBlcnJvciwgMCBpZiBub3RoaW5nIGhhcHBlbnMsIDEgaWYgdHlwZSBzZW50IHN1Y2Nlc3Nm dWxseSAqLwotCi1pbnQKLXRuX3N0dHlwKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBTZW5kIHRlbG5ldCB0ZXJtaW5hbCB0eXBlLiAqLwotICAgIGNoYXIgKnR0bjsgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIE5hbWUgb2YgdGVybWluYWwgdHlwZS4gKi8KLSNpZmRlZiBPUzIK LSAgICBzdGF0aWMgaW50IGFsaWFzID0gLTE7ICAgICAgICAgICAgICAvKiB3aGljaCBhbGlhcyBh cmUgd2UgdXNpbmcgPyAqLwotICAgIGludCBzZXR0eXBlID0gMDsKLSNlbmRpZiAvKiBPUzIgKi8K LSAgICBpbnQgaSwgcmM7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXb3JrZXIuICovCi0g ICAgaW50IHRudGVybWZsZyA9IDA7Ci0KLSAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVy bigwKTsKLSAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4oMCk7Ci0KLSAgICBp ZiAoIVRFTE9QVF9NRShURUxPUFRfVFRZUEUpKSByZXR1cm4oMCk7Ci0KLSNpZmRlZiBDS19TU0wK LSAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dz KSB7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAg dHRuID0gTlVMTDsKLQotI2lmbmRlZiBOT1RFUk0KLSNpZmRlZiBPUzIKLSAgICBpZiAoIXRuX3Rl cm0pIHsKLSAgICAgICAgaWYgKHR0bnVtID09IC0xKSB7Ci0gICAgICAgICAgICB0dG51bSA9IHR0 X3R5cGU7Ci0gICAgICAgICAgICBzZXR0eXBlID0gMDsKLSAgICAgICAgICAgIGFsaWFzID0gLTE7 Ci0gICAgICAgIH0gZWxzZSBpZiAodHRudW1lbmQpIHsKLSAgICAgICAgICAgIHR0bnVtZW5kID0g MDsKLSAgICAgICAgICAgIHNldHR5cGUgPSAwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg ICAgaWYgKHR0X2luZm9bdHRfdHlwZV0ueF9hbGlhc2VzWysrYWxpYXNdID09IE5VTEwpICB7Ci0g ICAgICAgICAgICAgICAgaWYgKC0tdHRfdHlwZSA8IDApCi0gICAgICAgICAgICAgICAgICB0dF90 eXBlID0gbWF4X3R0OwotICAgICAgICAgICAgICAgIGlmICh0dG51bSA9PSB0dF90eXBlKQotICAg ICAgICAgICAgICAgICAgdHRudW1lbmQgPSAxOwotICAgICAgICAgICAgICAgIHNldHR5cGUgPSAx OwotICAgICAgICAgICAgICAgIGFsaWFzID0gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K LSAgICAgICAgaWYgKHR0X3R5cGUgPj0gMCAmJiB0dF90eXBlIDw9IG1heF90dCkgewotICAgICAg ICAgICAgaWYgKGFsaWFzID09IC0xKQotICAgICAgICAgICAgICB0dG4gPSB0dF9pbmZvW3R0X3R5 cGVdLnhfbmFtZTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgdHRuID0gdHRfaW5m b1t0dF90eXBlXS54X2FsaWFzZXNbYWxpYXNdOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICB0 dG4gPSBOVUxMOwotICAgIH0KLSAgICBlbHNlIHNldHR5cGUgPSAwOwotI2VuZGlmIC8qIE9TMiAq LwotI2VuZGlmIC8qIE5PVEVSTSAqLwotCi0gICAgaWYgKHRuX3Rlcm0pIHsgICAgICAgICAgICAg ICAgICAgICAgLyogVGVybWluYWwgdHlwZSBvdmVycmlkZT8gKi8KLSAgICAgICAgZGVidWcoRjEx MCwidG5fc3R0eXAiLHRuX3Rlcm0sMCk7Ci0gICAgICAgIGlmICgqdG5fdGVybSkgewotICAgICAg ICAgICAgdHRuID0gdG5fdGVybTsKLSAgICAgICAgICAgIHRudGVybWZsZyA9IDE7Ci0gICAgICAg IH0KLSAgICB9IGVsc2UgZGVidWcoRjEwMCwidG5fc3R0eXAgbm8gdGVybSBvdmVycmlkZSIsIiIs MCk7Ci0KLSNpZm5kZWYgZGF0YWdlbmVyYWwKLSAgICBpZiAoIXR0bikgeyAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBJZiBubyBvdmVycmlkZSwgKi8KLSAgICAgICAgdHRuID0gZ2V0ZW52KCJU RVJNIik7ICAgICAgICAgICAvKiBnZXQgaXQgZnJvbSB0aGUgZW52aXJvbm1lbnQuICovCi0gICAg fQotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0gICAgaWYgKCh0dG4gPT0gKChjaGFyICopMCkp IHx8ICgoaW50KXN0cmxlbih0dG4pID49IFRTQlVGU0laKSkKLSAgICAgIHR0biA9ICJVTktOT1dO IjsKLSAgICBzYl9vdXRbMF0gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyogSSBBbSBh IENvbW1hbmQgKi8KLSAgICBzYl9vdXRbMV0gPSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAgICAg LyogU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbMl0gPSBURUxPUFRfVFRZUEU7ICAgICAg ICAgICAgICAgLyogVGVybWluYWwgVHlwZSAqLwotICAgIHNiX291dFszXSA9IChDSEFSKSAwOyAg ICAgICAgICAgICAgICAgICAvKiBJcy4uLiAqLwotICAgIGZvciAoaSA9IDQ7ICp0dG47IHR0bisr LGkrKykgeyAgICAgIC8qIENvcHkgYW5kIHVwcGVyY2FzZSBpdCAqLwotI2lmZGVmIFZNUwotICAg ICAgICBpZiAoIXRudGVybWZsZyAmJiAqdHRuID09ICctJyAmJgotICAgICAgICAgICAgKCFzdHJj bXAodHRuLCItODAiKSB8fCAhc3RyY21wKHR0biwiLTEzMiIpKSkKLSAgICAgICAgICBicmVhazsK LSAgICAgICAgZWxzZQotI2VuZGlmIC8qIFZNUyAqLwotICAgICAgICAgIHNiX291dFtpXSA9IChj aGFyKSAoKCF0bnRlcm1mbGcgJiYgaXNsb3dlcigqdHRuKSkgPwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdG91cHBlcigqdHRuKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqdHRuKTsKLSAgICB9Ci0gICAgdHRuID0gKGNoYXIgKilzYl9vdXQ7ICAgICAgICAgICAgICAg ICAgIC8qIFBvaW50IGJhY2sgdG8gYmVnaW5uaW5nICovCi0jaWZkZWYgREVCVUcKLSAgICBpZiAo ZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgc2Jfb3V0W2ldID0gJ1wwJzsg ICAgICAgICAgICAgICAgICAgLyogRm9yIGRlYnVnZ2luZyAqLwotICAgICAgICBja21ha3htc2co dG5fbXNnX291dCxUTl9NU0dfTEVOLCJURUxORVQgU0VOVCBTQiAiLAotICAgICAgICAgICAgICAg ICBURUxPUFQoVEVMT1BUX1RUWVBFKSwiIElTICIsKGNoYXIgKilzYl9vdXQrNCwiIElBQyBTRSIs Ci0gICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwot ICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsg ICAgICAgICAgICAgICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsr XSA9IChDSEFSKSBTRTsgICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLwotI2lm ZGVmIE9TMgotICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwot I2VuZGlmCi0jaWZkZWYgREVCVUcKLSAgICBkZWJ1ZyhGMTAwLHRuX21zZ19vdXQsIiIsMCk7Ci0g ICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZ19vdXQpOwotI2VuZGlmIC8q IERFQlVHICovCi0gICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNiX291dCxpKSA8IDApOyAgICAgICAv KiBTZW5kIGl0LiAqLwotI2lmZGVmIE9TMgotICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwotI2Vu ZGlmCi0gICAgaWYgKHJjKQotICAgICAgICByZXR1cm4oLTEpOwotI2lmbmRlZiBOT1RFUk0KLSNp ZmRlZiBPUzIKLSAgICBpZiAoc2V0dHlwZSkKLSAgICAgICAgc2V0dGVybXR5cGUodHRfdHlwZSww KTsKLSAgICBlbHNlIHsKLSAgICAgICAgaXBhZGwyNSgpOwotICAgICAgICBWc2NybklzRGlydHko VlRFUk0pOwotICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT1RFUk0gKi8KLSAg ICByZXR1cm4oMSk7Ci19Ci0KLSNpZmRlZiBDS19FTlZJUk9OTUVOVAotI2lmZGVmIENLX1hESVNQ TE9DCi0KLS8qIFRlbG5ldCBzZW5kIHhkaXNwbGF5IGxvY2F0aW9uICovCi0vKiBSZXR1cm5zIC0x IG9uIGVycm9yLCAwIGlmIG5vdGhpbmcgaGFwcGVucywgMSBpZiB0eXBlIHNlbnQgc3VjY2Vzc2Z1 bGx5ICovCi0KLWludAotdG5fc3hkaXNwbG9jKCkgeyAgICAgICAgICAgICAgICAgICAgICAgIC8q IFNlbmQgdGVsbmV0IFggZGlzcGxheSBsb2NhdGlvbi4gKi8KLSAgICBjaGFyICogZGlzcD1OVUxM OwotICAgIGludCBpLHJjOwotCi0gICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSByZXR1cm4oMCk7 Ci0gICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDApOwotCi0gICAgaWYgKCFU RUxPUFRfTUUoVEVMT1BUX1hESVNQTE9DKSkgcmV0dXJuKDApOwotCi0jaWZkZWYgQ0tfU1NMCi0g ICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykg ewotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0jaWZk ZWYgQ0tfRk9SV0FSRF9YCi0gICAgaWYgKFRFTE9QVF9VKFRFTE9QVF9GT1JXQVJEX1gpKSB7Ci0g ICAgICAgIGRpc3AgPSBOVUxMOwotICAgIH0gZWxzZQotI2VuZGlmIC8qIENLX0ZPUldBUkRfWCAq LwotICAgICAgICBkaXNwID0gKGNoYXIgKil0bl9nZXRfZGlzcGxheSgpOwotICAgIGRlYnVnKEYx MTAsInRuX3N4ZGlzcGxvYyIsZGlzcCwwKTsKLQotICAgIGlmICghZGlzcCkgewotICAgICAgICAv KiBDYW4ndCBkbyBib3RoLCBzZW5kIFdPTlQgKi8KLSAgICAgICAgaWYgKHRuX3NvcHQoV09OVCxU RUxPUFRfWERJU1BMT0MpIDwgMCkKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIFRF TE9QVF9VTkFOU1dFUkVEX1dPTlQoVEVMT1BUX1hESVNQTE9DKSA9IDE7Ci0gICAgICAgIHJldHVy bigwKTsKLSAgICB9Ci0KLSAgICBzYl9vdXRbMF0gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAg ICAgLyogSSBBbSBhIENvbW1hbmQgKi8KLSAgICBzYl9vdXRbMV0gPSAoQ0hBUikgU0I7ICAgICAg ICAgICAgICAgICAgLyogU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbMl0gPSBURUxPUFRf WERJU1BMT0M7ICAgICAgICAgICAgLyogWC1EaXNwbGF5IExvY2F0aW9uICovCi0gICAgc2Jfb3V0 WzNdID0gKENIQVIpIDA7ICAgICAgICAgICAgICAgICAgIC8qIElzLi4uICovCi0gICAgZm9yIChp ID0gNDsgKmRpc3A7IGRpc3ArKyxpKyspIHsgICAgICAvKiBDb3B5IGFuZCB1cHBlcmNhc2UgaXQg Ki8KLSAgICAgICAgc2Jfb3V0W2ldID0gKGNoYXIpICpkaXNwOwotICAgIH0KLSNpZmRlZiBERUJV RwotICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewotICAgICAgICBzYl9vdXRb aV0gPSAnXDAnOyAgICAgICAgICAgICAgICAgICAvKiBGb3IgZGVidWdnaW5nICovCi0gICAgICAg IGNrbWFreG1zZyggdG5fbXNnX291dCxUTl9NU0dfTEVOLAotICAgICAgICAgICAgICAgICAgIlRF TE5FVCBTRU5UIFNCICIsVEVMT1BUKFRFTE9QVF9YRElTUExPQyksCi0gICAgICAgICAgICAgICAg ICAiIElTICIsKGNoYXIgKilzYl9vdXQrNCwiIElBQyBTRSIsCi0gICAgICAgICAgICAgICAgICBO VUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICB9Ci0jZW5kaWYgLyogREVC VUcgKi8KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgLyogRW5k IG9mIFN1Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7ICAgICAg ICAgICAgICAgIC8qIG1hcmtlZCBieSBJQUMgU0UgKi8KLSNpZmRlZiBPUzIKLSAgICBSZXF1ZXN0 VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNlbmRpZgotI2lmZGVmIERFQlVH Ci0gICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0LCIiLDApOwotICAgIGlmICh0bl9kZWIgfHwgZGVi c2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKLSNlbmRpZiAvKiBERUJVRyAqLwotICAgIHJjID0g KHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAwKTsgICAgICAvKiBTZW5kIGl0LiAqLwotI2lmZGVm IE9TMgotICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwotI2VuZGlmCi0gICAgaWYgKHJjKQotICAg ICAgICByZXR1cm4oLTEpOwotICAgIHJldHVybigxKTsKLX0KLSNlbmRpZiAvKiBDS19YRElTUExP QyAqLwotI2VuZGlmIC8qIENLX0VOVklST05NRU5UICovCi0KLSNpZmRlZiBDS19GT1JXQVJEX1gK LWludAotdG5fc25kZndkeCgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgRndk IFggU2NyZWVuIG51bWJlciB0byBob3N0ICovCi0gICAgdW5zaWduZWQgY2hhciBzY3JlZW4gPSAw OwotICAgIGNoYXIgKiBkaXNwOwotICAgIGludCBpLHJjOwotCi0gICAgLyogaWYgKCFJU19URUxO RVQoKSkgcmV0dXJuKDApOyAqLwotCi0gICAgaWYgKCFURUxPUFRfVShURUxPUFRfRk9SV0FSRF9Y KSkgcmV0dXJuKDApOwotI2lmZGVmIENLX1NTTAotICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NU QVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKLSAgICAgICAgcmV0dXJuKDApOwotICAg IH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotICAgIC8qCi0gICAgICogVGhlIGZvcm1hdCBvZiB0 aGUgRElTUExBWSB2YXJpYWJsZSBpcyBbPGhvc3Q+Ol08ZGlzcGxheT5bLjxzY3JlZW4+XQotICAg ICAqIHdoZXJlIDxob3N0PiBpcyBhbiBvcHRpb25hbCBETlMgbmFtZSBvciBpcCBhZGRyZXNzIHdp dGggYSBkZWZhdWx0IG9mCi0gICAgICogdGhlIGxvY2FsaG9zdDsgdGhlIHNjcmVlbiBkZWZhdWx0 cyB0byAwCi0gICAgICovCi0KLSAgICBkaXNwID0gKGNoYXIgKil0bl9nZXRfZGlzcGxheSgpOwot ICAgIGlmIChkaXNwKSB7Ci0gICAgICAgIGludCBjb2xvbixkb3Q7Ci0gICAgICAgIGNvbG9uID0g Y2tpbmRleCgiOiIsZGlzcCwwLDAsMSk7Ci0gICAgICAgIGRvdCAgID0gY2tpbmRleCgiLiIsJmRp c3BbY29sb25dLDAsMCwxKTsKLQotICAgICAgICBpZiAoIGRvdCApIHsKLSAgICAgICAgICAgIHNj cmVlbiA9IGF0b2koJmRpc3BbY29sb24rZG90XSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ugewot ICAgICAgICBzY3JlZW4gPSAwOwotICAgIH0KLQotICAgIGkgPSAwOwotICAgIHNiX291dFtpKytd ID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAgIC8qIEkgQW0gYSBDb21tYW5kICovCi0gICAg c2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAgICAgLyogU3VibmVnb3RpYXRp b24gKi8KLSAgICBzYl9vdXRbaSsrXSA9IFRFTE9QVF9GT1JXQVJEX1g7ICAgICAgICAgICAvKiBG b3J3YXJkIFggKi8KLSAgICBzYl9vdXRbaSsrXSA9IEZXRFhfU0NSRUVOOyAgICAgICAgICAgICAg ICAvKiBTY3JlZW4gKi8KLSAgICBzYl9vdXRbaSsrXSA9IHNjcmVlbjsKLSAgICBpZiAoIHNjcmVl biA9PSBJQUMgKQotICAgICAgICBzYl9vdXRbaSsrXSA9IElBQzsKLSAgICBzYl9vdXRbaSsrXSA9 IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8K LSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTRTsgICAgICAgICAgICAgICAgICAvKiBtYXJrZWQg YnkgSUFDIFNFICovCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBk ZWJzZXMpIHsKLSAgICAgICAgY2ttYWt4bXNnKCB0bl9tc2dfb3V0LFROX01TR19MRU4sCi0gICAg ICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICIsVEVMT1BUKFRFTE9QVF9GT1JXQVJEX1gp LAotICAgICAgICAgICAgICAgICAgICIgU0NSRUVOICIsY2tjdG94KHNjcmVlbiwxKSwiIElBQyBT RSIsCi0gICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVM TCk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0jaWZkZWYgT1MyCi0gICAgUmVxdWVzdFRl bG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Ci0jZW5kaWYKLSNpZmRlZiBERUJVRwot ICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwiIiwwKTsKLSAgICBpZiAodG5fZGViIHx8IGRlYnNl cykgdG5fZGVidWcodG5fbXNnX291dCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICByYyA9ICh0 dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgLyogU2VuZCBpdC4gKi8KLSNpZmRlZiBP UzIKLSAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRpZgotICAgIGlmIChyYykKLSAgICAg ICAgcmV0dXJuKC0xKTsKLSAgICByZXR1cm4oMCk7Ci19Ci0jZW5kaWYgLyogQ0tfRk9SV0FSRF9Y ICovCi0KLSNpZmRlZiBDS19TTkRMT0MKLWludAotdG5fc25kbG9jKCkgeyAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFNlbmQgbG9jYXRpb24uICovCi0gICAgaW50IGkscmM7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogV29ya2VyLiAqLwotICAgIGNoYXIgKnR0bG9jOwotCi0g ICAgLyogaWYgKCFJU19URUxORVQoKSkgcmV0dXJuKDApOyAqLwotCi0gICAgaWYgKCFURUxPUFRf TUUoVEVMT1BUX1NORExPQykpIHJldHVybigwKTsKLQotI2lmZGVmIENLX1NTTAotICAgIGlmIChU RUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKLSAgICAg ICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICB0dGxvYyA9ICh0 bl9sb2MgPyB0bl9sb2MgOiAiIik7ICAgICAvKiBJbiBjYXNlIHdlIGFyZSBiZWluZyBjYWxsZWQg ZXZlbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRob3Vn aCB0aGVyZSBpcyBubyBsb2NhdGlvbi4gKi8KLSAgICBzYl9vdXRbMF0gPSAoQ0hBUikgSUFDOyAg ICAgICAgICAgICAgICAgLyogSSBBbSBhIENvbW1hbmQgKi8KLSAgICBzYl9vdXRbMV0gPSAoQ0hB UikgU0I7ICAgICAgICAgICAgICAgICAgLyogU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRb Ml0gPSBURUxPUFRfU05ETE9DOyAgICAgICAgICAgICAgLyogTG9jYXRpb24gKi8KLSAgICBmb3Ig KGkgPSAzOyAqdHRsb2MgJiYgaSA8IFRTQlVGU0laOyB0dGxvYysrLGkrKykgLyogQ29weSBpdCAq LwotICAgICAgc2Jfb3V0W2ldID0gKGNoYXIpICp0dGxvYzsKLSAgICBzYl9vdXRbaSsrXSA9IChD SEFSKSBJQUM7ICAgICAgICAgICAgICAgLyogRW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCi0gICAg c2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7ICAgICAgICAgICAgICAgIC8qIG1hcmtlZCBieSBJQUMg U0UgKi8KLQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2Vz KSB7Ci0gICAgICAgIGNrbWFreG1zZyh0bl9tc2dfb3V0LFROX01TR19MRU4sCi0gICAgICAgICAg ICAgICAgICAiVEVMTkVUIFNFTlQgU0IgIixURUxPUFQoVEVMT1BUX1NORExPQyksIiAiLChjaGFy ICopc2Jfb3V0KzMsCi0gICAgICAgICAgICAgICAgICAiIElBQyBTRSIsIE5VTEwsTlVMTCxOVUxM LE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotI2lmZGVm IE9TMgotICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwotI2Vu ZGlmCi0jaWZkZWYgREVCVUcKLSAgICBkZWJ1ZyhGMTAwLHRuX21zZ19vdXQsIiIsMCk7Ci0gICAg aWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZ19vdXQpOwotI2VuZGlmIC8qIERF QlVHICovCi0gICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNiX291dCxpKSA8IDApOyAgICAgIC8qIFNl bmQgaXQuICovCi0jaWZkZWYgT1MyCi0gICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7Ci0jZW5kaWYK LSAgICBpZiAocmMpCi0gICAgICAgIHJldHVybigtMSk7Ci0gICAgc2Jfb3V0W2ktMl0gPSAnXDAn OyAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBkZWJ1Z2dpbmcgKi8KLSAgICByZXR1cm4oMCk7 Ci19Ci0jZW5kaWYgLyogQ0tfU05ETE9DICovCi0KLSNpZmRlZiBDS19OQVdTICAgICAgICAgICAg ICAgICAgLyogIE5BV1MgPSBOZWdvdGlhdGUgQWJvdXQgV2luZG93IFNpemUgICovCi1pbnQKLXRu X3NuYXdzKCkgeyAgICAgICAgICAgICAgICAgICAgLyogIFNlbmQgdGVybWluYWwgd2lkdGggYW5k IGhlaWdodCwgUkZDIDEwNzMgKi8KLSNpZm5kZWYgTk9MT0NBTAotICAgIENIQVIgc2Jfb3V0WzI0 XTsgICAgICAgICAgICAvKiAgbXVsdGlwbGUgdGhyZWFkcyAqLwotICAgIGludCBpID0gMCxyYzsK LSNpZmRlZiBPUzIKLSAgICBpbnQgeCA9IFZzY3JuR2V0V2lkdGgoVlRFUk0pLAotICAgIHkgPSBW c2NybkdldEhlaWdodChWVEVSTSkgLSAodHRfc3RhdHVzW1ZURVJNXSA/IDEgOiAwKTsKLSNlbHNl IC8qIE9TMiAqLwotICAgIGludCB4ID0gdHRfY29scywgeSA9IHR0X3Jvd3M7Ci0jZW5kaWYgLyog T1MyICovCi0KLSAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVybigwKTsKLSAgICBpZiAo dHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4oMCk7Ci0gICAgaWYgKCFURUxPUFRfTUUoVEVM T1BUX05BV1MpKSByZXR1cm4oMCk7Ci0KLSNpZmRlZiBDS19TU0wKLSAgICBpZiAoVEVMT1BUX1NC KFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7Ci0gICAgICAgIHJldHVy bigwKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgaWYgKHggPCAwKSB4ID0gMDsK LSAgICBpZiAoeSA8IDApIHkgPSAwOwotCi0gICAgaWYgKHggPT0gVEVMT1BUX1NCKFRFTE9QVF9O QVdTKS5uYXdzLnggJiYgLyogT25seSBzZW5kIGlmIGNoYW5nZWQgKi8KLSAgICAgICAgeSA9PSBU RUxPUFRfU0IoVEVMT1BUX05BV1MpLm5hd3MueQotICAgICAgICApCi0gICAgICByZXR1cm4oMCk7 Ci0gICAgVEVMT1BUX1NCKFRFTE9QVF9OQVdTKS5uYXdzLnggPSB4OyAgLyogUmVtZW1iZXIgdGhl IHNpemUgICAgICovCi0gICAgVEVMT1BUX1NCKFRFTE9QVF9OQVdTKS5uYXdzLnkgPSB5OwotCi0g ICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgIC8qIFNlbmQgdGhlIHN1 Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7Ci0gICAgc2Jfb3V0 W2krK10gPSBURUxPUFRfTkFXUzsKLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSAoeCA+PiA4KSAm IDB4ZmY7Ci0gICAgaWYgKChDSEFSKSBzYl9vdXRbaS0xXSA9PSAoQ0hBUikgSUFDKSAgIC8qIElB QyBpbiBkYXRhIG11c3QgYmUgZG91YmxlZCAqLwotICAgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikg SUFDOwotICAgIHNiX291dFtpKytdID0gKENIQVIpICh4ICYgMHhmZik7Ci0gICAgaWYgKChDSEFS KSBzYl9vdXRbaS0xXSA9PSAoQ0hBUikgSUFDKQotICAgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikg SUFDOwotICAgIHNiX291dFtpKytdID0gKENIQVIpICh5ID4+IDgpICYgMHhmZjsKLSAgICBpZiAo KENIQVIpIHNiX291dFtpLTFdID09IChDSEFSKSBJQUMpCi0gICAgICBzYl9vdXRbaSsrXSA9IChD SEFSKSBJQUM7Ci0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgKHkgJiAweGZmKTsKLSAgICBpZiAo KENIQVIpIHNiX291dFtpLTFdID09IChDSEFSKSBJQUMpCi0gICAgICBzYl9vdXRbaSsrXSA9IChD SEFSKSBJQUM7Ci0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOwotICAgIHNiX291dFtpKytd ID0gKENIQVIpIFNFOwotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwg ZGVic2VzKSB7Ci0gICAgICAgIGNrbWFreG1zZyh0bl9tc2dfb3V0LFROX01TR19MRU4sIlRFTE5F VCBTRU5UIFNCIE5BV1MgIiwKLSAgICAgICAgICAgICAgICAgIGNraXRvYSh4KSwiICIsY2tpdG9h KHkpLCIgSUFDIFNFIiwKLSAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5V TEwsTlVMTCxOVUxMKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNpZmRlZiBPUzIKLSAg ICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNlbmRpZgotI2lm ZGVmIERFQlVHCi0gICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0LCIiLDApOwotICAgIGlmICh0bl9k ZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKLSNlbmRpZiAvKiBERUJVRyAqLwot ICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAwKTsgICAgICAvKiBTZW5kIGl0LiAq LwotI2lmZGVmIE9TMgotICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwotI2VuZGlmCi0gICAgaWYg KHJjKQotICAgICAgICByZXR1cm4oLTEpOwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSAgICByZXR1 cm4gKDApOwotfQotI2VuZGlmIC8qIENLX05BV1MgKi8KLQotI2lmZGVmIFROX0NPTVBPUlQKLXN0 YXRpYyBjaGFyICogdG5jX3NpZ25hdHVyZSA9IE5VTEw7Ci1zdGF0aWMgaW50IHRuY19sc19tYXNr ID0gMDsKLXN0YXRpYyBpbnQgdG5jX2xzID0gMDsKLXN0YXRpYyBpbnQgdG5jX21zX21hc2sgPSAy NTU7Ci1zdGF0aWMgaW50IHRuY19tcyA9IDA7Ci1zdGF0aWMgaW50IHRuY19vZmxvdyA9IDA7Ci1z dGF0aWMgaW50IHRuY19pZmxvdyA9IDA7Ci1zdGF0aWMgaW50IHRuY19icHMgPSAwOwotc3RhdGlj IGludCB0bmNfZGF0YXNpemUgPSAwOwotc3RhdGljIGludCB0bmNfcGFyaXR5ID0gMDsKLXN0YXRp YyBpbnQgdG5jX3N0b3BiaXQgPSAwOwotc3RhdGljIGludCB0bmNfYnJlYWsgPSAwOwotc3RhdGlj IGludCB0bmNfZHRyID0gMDsKLXN0YXRpYyBpbnQgdG5jX3J0cyA9IDA7Ci1zdGF0aWMgaW50IHRu Y19zdXNwZW5kX3htaXQgPSAwOwotc3RhdGljIGludCB0bmNfYnBzX2luZGV4ID0gLTE7Ci0KLWlu dAotI2lmZGVmIENLX0FOU0lDCi10bmNfaW5pdCh2b2lkKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8K LXRuY19pbml0KCkKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogdG5jX2luaXQgKi8gewotICAg IGRlYnVnKEYxMDAsInRuY19pbml0IiwiIiwwKTsKLQotICAgIC8qIGlmICghSVNfVEVMTkVUKCkp IHJldHVybigwKTsgKi8KLQotICAgIGlmICh0bmNfc2lnbmF0dXJlKSB7Ci0gICAgICAgIGZyZWUo dG5jX3NpZ25hdHVyZSk7Ci0gICAgICAgIHRuY19zaWduYXR1cmUgPSBOVUxMOwotICAgIH0KLSAg ICB0bmNfbHNfbWFzayA9IDA7Ci0gICAgdG5jX2xzID0gMDsKLSAgICB0bmNfbXNfbWFzayA9IDI1 NTsKLSAgICB0bmNfbXMgPSAwOwotICAgIHRuY19vZmxvdyA9IDA7Ci0gICAgdG5jX2lmbG93ID0g MDsKLSAgICB0bmNfYnBzID0gMDsKLSAgICB0bmNfZGF0YXNpemUgPSAwOwotICAgIHRuY19wYXJp dHkgPSAwOwotICAgIHRuY19zdG9wYml0ID0gMDsKLSAgICB0bmNfYnJlYWsgPSAwOwotICAgIHRu Y19kdHIgPSAwOwotICAgIHRuY19ydHMgPSAwOwotICAgIHRuY19zdXNwZW5kX3htaXQgPSAwOwot ICAgIHRuY19icHNfaW5kZXggPSAtMTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLWludAotI2lmZGVm IENLX0FOU0lDCi10bl9zbmRjb21wb3J0KHZvaWQpCi0jZWxzZSAvKiBDS19BTlNJQyAqLwotdG5f c25kY29tcG9ydCgpCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHRuX3NuZGNvbXBvcnQgKi8g ewotICAgIGludCBiYXVkLCBkYXRhc2l6ZSwgcGFyaXR5LCBzdG9wc2l6ZSwgb2Zsb3csIGlmbG93 OwotICAgIENPTlNUIGNoYXIgKiBzaWduYXR1cmU7Ci0KLSAgICAvKiBpZiAoIUlTX1RFTE5FVCgp KSByZXR1cm4oMCk7ICovCi0KLSAgICBkZWJ1ZyhGMTAwLCJ0bmNfc25kY29tcG9ydCIsIiIsMCk7 Ci0gICAgc2lnbmF0dXJlID0gdG5jX2dldF9zaWduYXR1cmUoKTsKLSAgICBiYXVkID0gdG5jX2dl dF9iYXVkKCk7Ci0gICAgZGF0YXNpemUgPSB0bmNfZ2V0X2RhdGFzaXplKCk7Ci0gICAgcGFyaXR5 ID0gdG5jX2dldF9wYXJpdHkoKTsKLSAgICBzdG9wc2l6ZSA9IHRuY19nZXRfc3RvcHNpemUoKTsK LSAgICBvZmxvdyA9IHRuY19nZXRfb2Zsb3coKTsKLSAgICBpZmxvdyA9IHRuY19nZXRfaWZsb3co KTsKLSAgICB0bmNfc2V0X2xzX21hc2soMjU1KTsKLSAgICB0bmNfc2V0X21zX21hc2soMjU1KTsK LSAgICByZXR1cm4oMCk7Ci19Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi10bmNfd2FpdChDSEFS ICogbXNnLCBpbnQgbXMpCi0jZWxzZSAvKiBDS19BTlNJQyAqLwotdG5jX3dhaXQobXNnLCBtcykg Q0hBUiAqIG1zZzsgaW50IG1zOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB0bmNfd2FpdCAq LyB7Ci0gICAgaW50IHJjLCB0bl93YWl0X3NhdmUgPSB0bl93YWl0X2ZsZzsKLQotICAgIC8qIGlm ICghSVNfVEVMTkVUKCkpIHJldHVybigwKTsgKi8KLQotICAgIGRlYnVnKEYxMTEsInRuY193YWl0 IiwiYmVnaW4iLG1zKTsKLSAgICBpZiAoIG1zICkKLSAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9D T01QT1JUKS5jb21wb3J0LndhaXRfZm9yX21zID0gMTsKLSAgICBlbHNlCi0gICAgICAgIFRFTE9Q VF9TQihURUxPUFRfQ09NUE9SVCkuY29tcG9ydC53YWl0X2Zvcl9zYiA9IDE7Ci0gICAgdG5fd2Fp dF9mbGcgPSAxOwotICAgIHJjID0gdG5fd2FpdCgoY2hhciAqKW1zZyk7Ci0gICAgdG5fcHVzaCgp OwotICAgIGRlYnVnKEYxMTAsInRuY193YWl0IiwiZW5kIiwwKTsKLSAgICB0bl93YWl0X2ZsZyA9 IHRuX3dhaXRfc2F2ZTsKLSAgICByZXR1cm4ocmMpOwotfQotCi0vKiBSZXR1cm5zIC0xIG9uIGVy cm9yLCAwIG9uIHN1Y2Nlc3MgKi8KLS8qIEluIG9yZGVyIGZvciB0aGlzIGNvZGUgdG8gd29yaywg c2JbbGVuXSA9PSBJQUMgICAgICAgICAgKi8KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXRuY190 bl9zYihDSEFSICogc2IsIGludCBsZW4pCi0jZWxzZQotdG5jX3RuX3NiKHNiLCBsZW4pIENIQVIg KiBzYjsgaW50IGxlbjsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogdG5jX3RuX3NiICovIHsK LSAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVybigwKTsKLSAgICBpZiAodHRucHJvdG8g IT0gTlBfVEVMTkVUKSByZXR1cm4oMCk7Ci0gICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0NPTVBP UlQpKSByZXR1cm4oMCk7Ci0KLSAgICBpZiAoIXNiKSByZXR1cm4oLTEpOwotCi0jaWZkZWYgQ0tf U1NMCi0gICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9s bG93cykgewotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwot Ci0gICAgZGVidWcoRjExMSwidG5jX3RuX3NiIiwic2JbMF0iLHNiWzBdKTsKLSAgICBkZWJ1ZyhG MTExLCJ0bmNfdG5fc2IiLCJsZW4iLGxlbik7Ci0KLSAgICBzd2l0Y2ggKHNiWzBdKSB7Ci0gICAg ICBjYXNlIFROQ19DMlNfU0lHTkFUVVJFOgotICAgICAgY2FzZSBUTkNfUzJDX1NJR05BVFVSRToK LSAgICAgICAgZGVidWcoRjExMSwidG5jX3RuX3NiIiwic2lnbmF0dXJlIixsZW4pOwotICAgICAg ICBpZiAobGVuID09IDEpIHsKLSAgICAgICAgICAgIHRuY19zZW5kX3NpZ25hdHVyZSgiS2VybWl0 IFRlbG5ldCBDb20gUG9ydCBPcHRpb24iKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg IFRFTE9QVF9TQihURUxPUFRfQ09NUE9SVCkuY29tcG9ydC53YWl0X2Zvcl9zYiA9IDA7Ci0gICAg ICAgICAgICBpZiAodG5jX3NpZ25hdHVyZSkKLSAgICAgICAgICAgICAgZnJlZSh0bmNfc2lnbmF0 dXJlKTsKLSAgICAgICAgICAgIHRuY19zaWduYXR1cmUgPSBtYWxsb2MobGVuKTsKLSAgICAgICAg ICAgIGlmICh0bmNfc2lnbmF0dXJlKSB7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHRuY19zaWdu YXR1cmUsJnNiWzFdLGxlbi0xKTsKLSAgICAgICAgICAgICAgICB0bmNfc2lnbmF0dXJlW2xlbi0x XSA9ICdcMCc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAg ICAgIGNhc2UgVE5DX0MyU19TRVRfQkFVRFJBVEU6Ci0gICAgICBjYXNlIFROQ19TMkNfU0VUX0JB VURSQVRFOiB7Ci0gICAgICAgICAgbG9uZyBiYXVkcmF0ZTsKLSAgICAgICAgICBjaGFyICogYnIg PSAoY2hhciAqKSZiYXVkcmF0ZTsKLSAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0NPTVBPUlQp LmNvbXBvcnQud2FpdF9mb3Jfc2IgPSAwOwotICAgICAgICAgIGlmIChsZW4gPT0gMikgewotICAg ICAgICAgICAgLyogQWN0dWFsIGJlaGF2aW9yIG9mIHRoZSBBY2Nlc3MgU2VydmVyLi4uICovCi0g ICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0bmNfdG5fc2IiLCJiYXVkcmF0ZSBpbmRleCIsc2JbMV0p OwotICAgICAgICAgICAgdG5jX2Jwc19pbmRleCA9IDE7Ci0gICAgICAgICAgICBzd2l0Y2ggKHNi WzFdKSB7Ci0gICAgICAgICAgICBjYXNlIFROQ19CUFNfMzAwOgotICAgICAgICAgICAgICB0bmNf YnBzID0gMzAwOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVE5DX0JQ U182MDA6Ci0gICAgICAgICAgICAgIHRuY19icHMgPSA2MDA7Ci0gICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgY2FzZSBUTkNfQlBTXzEyMDA6Ci0gICAgICAgICAgICAgIHRuY19icHMg PSAxMjAwOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVE5DX0JQU18y NDAwOgotICAgICAgICAgICAgICB0bmNfYnBzID0gMjQwMDsKLSAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICBjYXNlIFROQ19CUFNfNDgwMDoKLSAgICAgICAgICAgICAgdG5jX2JwcyA9 IDQ4MDA7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUTkNfQlBTXzk2 MDA6Ci0gICAgICAgICAgICAgIHRuY19icHMgPSA5NjAwOwotICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgIGNhc2UgVE5DX0JQU18xNDQwMDoKLSAgICAgICAgICAgICAgdG5jX2JwcyA9 IDE0NDAwOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVE5DX0JQU18x OTIwMDoKLSAgICAgICAgICAgICAgdG5jX2JwcyA9IDE5MjAwOwotICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgIGNhc2UgVE5DX0JQU18yODgwMDoKLSAgICAgICAgICAgICAgdG5jX2Jw cyA9IDI4ODAwOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVE5DX0JQ U18zODQwMDoKLSAgICAgICAgICAgICAgdG5jX2JwcyA9IDM4NDAwOwotICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgIGNhc2UgVE5DX0JQU181NzYwMDoKLSAgICAgICAgICAgICAgdG5j X2JwcyA9IDU3NjAwOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVE5D X0JQU18xMTUyMDA6Ci0gICAgICAgICAgICAgIHRuY19icHMgPSAxMTUyMDA7Ci0gICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUTkNfQlBTXzIzMDQwMDoKLSAgICAgICAgICAg ICAgdG5jX2JwcyA9IDIzMDQwMDsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj YXNlIFROQ19CUFNfNDYwODAwOgotICAgICAgICAgICAgICB0bmNfYnBzID0gNDYwODAwOwotICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgIHRu Y19icHMgPSAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IGVsc2UgaWYgKGxlbiA9PSA1 KSB7Ci0gICAgICAgICAgICAvKiBUaGlzIHNlY3Rpb24gYXR0ZW1wdHMgdG8gZm9sbG93IFJGQyAy MjE3ICovCi0gICAgICAgICAgICAgIHRuY19icHNfaW5kZXggPSAwOwotICAgICAgICAgICAgICBi clswXSA9IHNiWzFdOwotICAgICAgICAgICAgICBiclsxXSA9IHNiWzJdOwotICAgICAgICAgICAg ICBiclsyXSA9IHNiWzNdOwotICAgICAgICAgICAgICBiclszXSA9IHNiWzRdOwotI2lmZGVmIGRh dGFnZW5lcmFsCi0gICAgICAgICAgICAgIC8qIEFPUy9WUyBkb2Vzbid0IGhhdmUgbnRvaGwoKSBi dXQgTVYncyBhcmUgYmlnLWVuZGlhbiAqLwotICAgICAgICAgICAgICB0bmNfYnBzID0gYmF1ZHJh dGU7Ci0jZWxzZQotICAgICAgICAgICAgICB0bmNfYnBzID0gbnRvaGwoYmF1ZHJhdGUpOwotI2Vu ZGlmIC8qIGRhdGFnZW5lcmFsICovCi0gICAgICAgICAgICAgIGRlYnVnKEYxMTEsInRuY190bl9z YiIsImJhdWRyYXRlIHJmYyIsdG5jX2Jwcyk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgICAgZGVidWcoRjExMSwidG5jX3RuX3NiIiwiYmF1ZHJhdGUgaW52YWxpZCBsZW4iLGxlbik7 Ci0gICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFr OwotICAgICAgfQotICAgICAgY2FzZSBUTkNfQzJTX1NFVF9EQVRBU0laRToKLSAgICAgIGNhc2Ug VE5DX1MyQ19TRVRfREFUQVNJWkU6Ci0gICAgICAgIFRFTE9QVF9TQihURUxPUFRfQ09NUE9SVCku Y29tcG9ydC53YWl0X2Zvcl9zYiA9IDA7Ci0gICAgICAgIGlmIChsZW4gPCAyKQotICAgICAgICAg IHJldHVybigtMSk7Ci0gICAgICAgIHRuY19kYXRhc2l6ZSA9IHNiWzFdOwotICAgICAgICBkZWJ1 ZyhGMTExLCJ0bmNfdG5fc2IiLCJkYXRhc2l6ZSIsc2JbMV0pOwotICAgICAgICBicmVhazsKLQot ICAgICAgY2FzZSBUTkNfQzJTX1NFVF9QQVJJVFk6Ci0gICAgICBjYXNlIFROQ19TMkNfU0VUX1BB UklUWToKLSAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9DT01QT1JUKS5jb21wb3J0LndhaXRfZm9y X3NiID0gMDsKLSAgICAgICAgaWYgKGxlbiA8IDIpCi0gICAgICAgICAgcmV0dXJuKC0xKTsKLSAg ICAgICAgdG5jX3Bhcml0eSA9IHNiWzFdOwotICAgICAgICBkZWJ1ZyhGMTExLCJ0bmNfdG5fc2Ii LCJwYXJpdHkiLHNiWzFdKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgVE5DX0MyU19T RVRfU1RPUFNJWkU6Ci0gICAgICBjYXNlIFROQ19TMkNfU0VUX1NUT1BTSVpFOgotICAgICAgICBU RUxPUFRfU0IoVEVMT1BUX0NPTVBPUlQpLmNvbXBvcnQud2FpdF9mb3Jfc2IgPSAwOwotICAgICAg ICBpZiAobGVuIDwgMikKLSAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB0bmNfc3RvcGJp dCA9IHNiWzFdOwotICAgICAgICBkZWJ1ZyhGMTExLCJ0bmNfdG5fc2IiLCJzdG9wc2l6ZSIsc2Jb MV0pOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBUTkNfQzJTX1NFVF9DT05UUk9MOgot ICAgICAgY2FzZSBUTkNfUzJDX1NFVF9DT05UUk9MOgotICAgICAgICBpZiAobGVuIDwgMikgewot ICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9DT01QT1JUKS5jb21wb3J0LndhaXRfZm9yX3Ni ID0gMDsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLQotI2lmZGVmIENPTU1F TlQKLSAgICAgICAgLyogVGhpcyBsaW5lIHNob3VsZCBiZSByZW1vdmVkIHdoZW4gdGVzdGluZyBp cyBjb21wbGV0ZS4gKi8KLSAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9DT01QT1JUKS5jb21wb3J0 LndhaXRfZm9yX3NiID0gMDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICAgICAgc3dpdGNo ICggc2JbMV0gKSB7Ci0gICAgICAgICAgY2FzZSBUTkNfQ1RMX09GTE9XX1JFUVVFU1Q6Ci0gICAg ICAgICAgICAvKiBkZXRlcm1pbmUgbG9jYWwgb3V0Ym91bmQgZmxvdyBjb250cm9sIGFuZCBzZW5k IHRvIHBlZXIgKi8KLQkgICAgLyogQ2lzY28gSU9TIHJldHVybnMgMCAoVE5DX0NUTF9PRkxPV19S RVFVRVNUKSB3aGVuIGF0dGVtcHRpbmcgKi8KLQkgICAgLyogdG8gc2V0IHRoZSBpbmJvdW5kIGZs b3cgY29udHJvbCBpZiBpdCBpcyBub3Qgc3VwcG9ydGVkICAgICAgKi8KLQkgICAgLyogc2VwYXJh dGVseSBmcm9tIG91dGJvdW5kIGZsb3cgY29udHJvbC4gIFNvIG11c3QgcmVzZXQgICAgICAgKi8K LQkgICAgLyogd2FpdCBmb3Igc2IgZmxhZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTAsInRuY190bl9zYiIsIm9mbG93 IHJlcXVlc3QiLDApOwotICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9DT01QT1JUKS5jb21w b3J0LndhaXRfZm9yX3NiID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug VE5DX0NUTF9PRkxPV19OT05FOgotICAgICAgICAgIGNhc2UgVE5DX0NUTF9PRkxPV19YT05fWE9G RjoKLSAgICAgICAgICBjYXNlIFROQ19DVExfT0ZMT1dfUlRTX0NUUzoKLSAgICAgICAgICBjYXNl IFROQ19DVExfT0ZMT1dfRENEOgotICAgICAgICAgIGNhc2UgVE5DX0NUTF9PRkxPV19EU1I6Ci0g ICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0NPTVBPUlQpLmNvbXBvcnQud2FpdF9mb3Jfc2Ig PSAwOwotICAgICAgICAgICAgdG5jX29mbG93ID0gc2JbMV07Ci0gICAgICAgICAgICBkZWJ1ZyhG MTExLCJ0bmNfdG5fc2IiLCJvZmxvdyIsc2JbMV0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgY2FzZSBUTkNfQ1RMX0JSRUFLX1JFUVVFU1Q6Ci0gICAgICAgICAgICAvKiBkZXRlcm1p bmUgbG9jYWwgYnJlYWsgc3RhdGUgYW5kIHNlbmQgdG8gcGVlciAqLwotICAgICAgICAgICAgZGVi dWcoRjExMCwidG5jX3RuX3NiIiwiYnJlYWsgcmVxdWVzdCIsMCk7Ci0gICAgICAgICAgICBicmVh azsKLSAgICAgICAgICBjYXNlIFROQ19DVExfQlJFQUtfT046Ci0gICAgICAgICAgICBURUxPUFRf U0IoVEVMT1BUX0NPTVBPUlQpLmNvbXBvcnQud2FpdF9mb3Jfc2IgPSAwOwotICAgICAgICAgICAg dG5jX2JyZWFrID0gMTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsInRuY190bl9zYiIsImJyZWFr IG9uIiwwKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBUTkNfQ1RMX0JS RUFLX09GRjoKLSAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfQ09NUE9SVCkuY29tcG9ydC53 YWl0X2Zvcl9zYiA9IDA7Ci0gICAgICAgICAgICB0bmNfYnJlYWsgPSAwOwotICAgICAgICAgICAg ZGVidWcoRjExMCwidG5jX3RuX3NiIiwiYnJlYWsgb2ZmIiwwKTsKLSAgICAgICAgICAgIGJyZWFr OwotCi0gICAgICAgICAgY2FzZSBUTkNfQ1RMX0RUUl9SRVFVRVNUOgotICAgICAgICAgICAgLyog ZGV0ZXJtaW5lIGxvY2FsIGR0ciBzdGF0ZSBhbmQgc2VuZCB0byBwZWVyICovCi0gICAgICAgICAg ICBkZWJ1ZyhGMTEwLCJ0bmNfdG5fc2IiLCJkdHIgcmVxdWVzdCIsMCk7Ci0gICAgICAgICAgICBi cmVhazsKLQotICAgICAgICAgIGNhc2UgVE5DX0NUTF9EVFJfT046Ci0gICAgICAgICAgICBURUxP UFRfU0IoVEVMT1BUX0NPTVBPUlQpLmNvbXBvcnQud2FpdF9mb3Jfc2IgPSAwOwotICAgICAgICAg ICAgdG5jX2R0ciA9IDE7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ0bmNfdG5fc2IiLCJkdHIg b24iLDApOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFROQ19DVExfRFRS X09GRjoKLSAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfQ09NUE9SVCkuY29tcG9ydC53YWl0 X2Zvcl9zYiA9IDA7Ci0gICAgICAgICAgICB0bmNfZHRyID0gMDsKLSAgICAgICAgICAgIGRlYnVn KEYxMTAsInRuY190bl9zYiIsImR0ciBvZmYiLDApOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg ICAgICAgICBjYXNlIFROQ19DVExfUlRTX1JFUVVFU1Q6Ci0gICAgICAgICAgICAvKiBkZXRlcm1p bmUgbG9jYWwgcnRzIHN0YXRlIGFuZCBzZW5kIHRvIHBlZXIgKi8KLSAgICAgICAgICAgIGRlYnVn KEYxMTAsInRuY190bl9zYiIsInJ0cyByZXF1ZXN0IiwwKTsKLSAgICAgICAgICAgIGJyZWFrOwot Ci0gICAgICAgICAgY2FzZSBUTkNfQ1RMX1JUU19PTjoKLSAgICAgICAgICAgIFRFTE9QVF9TQihU RUxPUFRfQ09NUE9SVCkuY29tcG9ydC53YWl0X2Zvcl9zYiA9IDA7Ci0gICAgICAgICAgICB0bmNf cnRzID0gMTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsInRuY190bl9zYiIsInJ0cyBvbiIsMCk7 Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgVE5DX0NUTF9SVFNfT0ZGOgot ICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9DT01QT1JUKS5jb21wb3J0LndhaXRfZm9yX3Ni ID0gMDsKLSAgICAgICAgICAgIHRuY19ydHMgPSAwOwotICAgICAgICAgICAgZGVidWcoRjExMCwi dG5jX3RuX3NiIiwicnRzIG9mZiIsMCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg IGNhc2UgVE5DX0NUTF9JRkxPV19SRVFVRVNUOgotICAgICAgICAgICAgLyogZGV0ZXJtaW5lIGxv Y2FsIGluYm91bmQgZmxvdyBjb250cm9sIGFuZCBzZW5kIHRvIHBlZXIgKi8KLSAgICAgICAgICAg IGRlYnVnKEYxMTAsInRuY190bl9zYiIsImlmbG93IHJlcXVlc3QiLDApOwotICAgICAgICAgICAg YnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFROQ19DVExfSUZMT1dfTk9ORToKLSAgICAgICAgICBj YXNlIFROQ19DVExfSUZMT1dfWE9OX1hPRkY6Ci0gICAgICAgICAgY2FzZSBUTkNfQ1RMX0lGTE9X X1JUU19DVFM6Ci0gICAgICAgICAgY2FzZSBUTkNfQ1RMX0lGTE9XX0RUUjoKLSAgICAgICAgICAg IFRFTE9QVF9TQihURUxPUFRfQ09NUE9SVCkuY29tcG9ydC53YWl0X2Zvcl9zYiA9IDA7Ci0gICAg ICAgICAgICB0bmNfaWZsb3cgPSBzYlsxXTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsInRuY190 bl9zYiIsImlmbG93IixzYlsxXSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZh dWx0OgotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK LQotICAgICAgY2FzZSBUTkNfQzJTX05PVElGWV9MSU5FU1RBVEU6Ci0gICAgICBjYXNlIFROQ19T MkNfU0VORF9MUzoKLSAgICAgICAgaWYgKGxlbiA8IDIpCi0gICAgICAgICAgcmV0dXJuKC0xKTsK LSAgICAgICAgdG5jX2xzID0gc2JbMV07Ci0gICAgICAgIGRlYnVnKEYxMTEsInRuY190bl9zYiIs ImxpbmVzdGF0ZSIsc2JbMV0pOwotICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgewotICAg ICAgICAgICAgaWYgKHRuY19scyAmIFROQ19NU19EQVRBX1JFQURZICkKLSAgICAgICAgICAgICAg dG5fZGVidWcoIiAgQ29tUG9ydCBMaW5lc3RhdGUgRGF0YSBSZWFkeSIpOwotICAgICAgICAgICAg aWYgKHRuY19scyAmIFROQ19NU19PVkVSUlVOX0VSUk9SICkKLSAgICAgICAgICAgICAgdG5fZGVi dWcoIiAgQ29tUG9ydCBMaW5lc3RhdGUgT3ZlcnJ1biBFcnJvciIpOwotICAgICAgICAgICAgaWYg KHRuY19scyAmIFROQ19NU19QQVJJVFlfRVJST1IgKQotICAgICAgICAgICAgICB0bl9kZWJ1Zygi ICBDb21Qb3J0IExpbmVzdGF0ZSBQYXJpdHkgRXJyb3IiKTsKLSAgICAgICAgICAgIGlmICh0bmNf bHMgJiBUTkNfTVNfRlJBTUVfRVJST1IgKQotICAgICAgICAgICAgICB0bl9kZWJ1ZygiICBDb21Q b3J0IExpbmVzdGF0ZSBGcmFtaW5nIEVycm9yIik7Ci0gICAgICAgICAgICBpZiAodG5jX2xzICYg VE5DX01TX0JSRUFLX0VSUk9SICkKLSAgICAgICAgICAgICAgdG5fZGVidWcoIiAgQ29tUG9ydCBM aW5lc3RhdGUgQnJlYWsgRGV0ZWN0IEVycm9yIik7Ci0gICAgICAgICAgICBpZiAodG5jX2xzICYg VE5DX01TX0hSX0VNUFRZICkKLSAgICAgICAgICAgICAgdG5fZGVidWcoIiAgQ29tUG9ydCBMaW5l c3RhdGUgSG9sZGluZyBSZWdpc3RlciBFbXB0eSIpOwotICAgICAgICAgICAgaWYgKHRuY19scyAm IFROQ19NU19TUl9FTVBUWSApCi0gICAgICAgICAgICAgIHRuX2RlYnVnKCIgIENvbVBvcnQgTGlu ZXN0YXRlIFNoaWZ0IFJlZ2lzdGVyIEVtcHR5Iik7Ci0gICAgICAgICAgICBpZiAodG5jX2xzICYg VE5DX01TX1RJTUVPVVRfRVJST1IgKQotICAgICAgICAgICAgICB0bl9kZWJ1ZygiICBDb21Qb3J0 IExpbmVzdGF0ZSBUaW1lb3V0IEVycm9yIik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0K LSAgICAgIGNhc2UgVE5DX0MyU19OT1RJRllfTU9ERU1TVEFURToKLSAgICAgIGNhc2UgVE5DX1My Q19TRU5EX01TOgotICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0NPTVBPUlQpLmNvbXBvcnQud2Fp dF9mb3JfbXMgPSAwOwotICAgICAgICBpZiAobGVuIDwgMikKLSAgICAgICAgICByZXR1cm4oLTEp OwotICAgICAgICB0bmNfbXMgPSBzYlsxXTsKLSAgICAgICAgZGVidWcoRjExMSwidG5jX3RuX3Ni IiwibW9kZW1zdGF0ZSIsc2JbMV0pOwotICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgewot ICAgICAgICAgICAgaWYgKHRuY19tcyAmIFROQ19NU19DVFNfREVMVEEgKQotICAgICAgICAgICAg ICB0bl9kZWJ1ZygiICBDb21Qb3J0IE1vZGVtc3RhdGUgQ1RTIFN0YXRlIENoYW5nZSIpOwotICAg ICAgICAgICAgaWYgKHRuY19tcyAmIFROQ19NU19EU1JfREVMVEEgKQotICAgICAgICAgICAgICB0 bl9kZWJ1ZygiICBDb21Qb3J0IE1vZGVtc3RhdGUgRFNSIFN0YXRlIENoYW5nZSIpOwotICAgICAg ICAgICAgaWYgKHRuY19tcyAmIFROQ19NU19FREdFX1JJTkcgKQotICAgICAgICAgICAgICB0bl9k ZWJ1ZygiICBDb21Qb3J0IE1vZGVtc3RhdGUgVHJhaWxpbmcgRWRnZSBSaW5nIERldGVjdG9yIE9u Iik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHRuX2RlYnVnKCIgIENvbVBvcnQg TW9kZW1zdGF0ZSBUcmFpbGluZyBFZGdlIFJpbmcgRGV0ZWN0b3IgT2ZmIik7Ci0gICAgICAgICAg ICBpZiAodG5jX21zICYgVE5DX01TX1JMU0RfREVMVEEgKQotICAgICAgICAgICAgICB0bl9kZWJ1 ZygiICBDb21Qb3J0IE1vZGVtc3RhdGUgUkxTRCBTdGF0ZSBDaGFuZ2UiKTsKLSAgICAgICAgICAg IGlmICh0bmNfbXMgJiBUTkNfTVNfQ1RTX1NJRyApCi0gICAgICAgICAgICAgIHRuX2RlYnVnKCIg IENvbVBvcnQgTW9kZW1zdGF0ZSBDVFMgU2lnbmFsIE9uIik7Ci0gICAgICAgICAgICBlbHNlCi0g ICAgICAgICAgICAgIHRuX2RlYnVnKCIgIENvbVBvcnQgTW9kZW1zdGF0ZSBDVFMgU2lnbmFsIE9m ZiIpOwotICAgICAgICAgICAgaWYgKHRuY19tcyAmIFROQ19NU19EU1JfU0lHICkKLSAgICAgICAg ICAgICAgdG5fZGVidWcoIiAgQ29tUG9ydCBNb2RlbXN0YXRlIERTUiBTaWduYWwgT24iKTsKLSAg ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgdG5fZGVidWcoIiAgQ29tUG9ydCBNb2RlbXN0 YXRlIERTUiBTaWduYWwgT2ZmIik7Ci0gICAgICAgICAgICBpZiAodG5jX21zICYgVE5DX01TX1JJ X1NJRyApCi0gICAgICAgICAgICAgIHRuX2RlYnVnKCIgIENvbVBvcnQgTW9kZW1zdGF0ZSBSaW5n IEluZGljYXRvciBPbiIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB0bl9kZWJ1 ZygiICBDb21Qb3J0IE1vZGVtc3RhdGUgUmluZyBJbmRpY2F0b3IgT2ZmIik7Ci0gICAgICAgICAg ICBpZiAodG5jX21zICYgVE5DX01TX1JMU0RfU0lHICkKLSAgICAgICAgICAgICAgdG5fZGVidWco IiAgQ29tUG9ydCBNb2RlbXN0YXRlIFJMU0QgU2lnbmFsIE9uIik7Ci0gICAgICAgICAgICBlbHNl Ci0gICAgICAgICAgICAgIHRuX2RlYnVnKCIgIENvbVBvcnQgTW9kZW1zdGF0ZSBSTFNEIFNpZ25h bCBPZmYiKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBUTkNfQzJT X0ZMT1dfU1VTUEVORDoKLSAgICAgIGNhc2UgVE5DX1MyQ19GTE9XX1NVU1BFTkQ6Ci0gICAgICAg IGRlYnVnKEYxMTAsInRuY190bl9zYiIsImZsb3cgc3VzcGVuZCIsMCk7Ci0gICAgICAgIHRuY19z dXNwZW5kX3htaXQgPSAxOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBUTkNfQzJTX0ZM T1dfUkVTVU1FOgotICAgICAgY2FzZSBUTkNfUzJDX0ZMT1dfUkVTVU1FOgotICAgICAgICBkZWJ1 ZyhGMTEwLCJ0bmNfdG5fc2IiLCJmbG93IHJlc3VtZSIsMCk7Ci0gICAgICAgIHRuY19zdXNwZW5k X3htaXQgPSAwOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBUTkNfQzJTX1NFVF9MU19N QVNLOgotICAgICAgY2FzZSBUTkNfUzJDX1NFVF9MU19NQVNLOgotICAgICAgICAgIFRFTE9QVF9T QihURUxPUFRfQ09NUE9SVCkuY29tcG9ydC53YWl0X2Zvcl9zYiA9IDA7Ci0gICAgICAgICAgaWYg KGxlbiA8IDIpCi0gICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgZGVidWcoRjExMSwidG5j X3RuX3NiIiwibGluZXN0YXRlIG1hc2siLHNiWzFdKTsKLSAgICAgICAgdG5jX2xzX21hc2sgPSBz YlsxXTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgVE5DX0MyU19TRVRfTVNfTUFTSzoK LSAgICAgIGNhc2UgVE5DX1MyQ19TRVRfTVNfTUFTSzoKLSAgICAgICAgICBURUxPUFRfU0IoVEVM T1BUX0NPTVBPUlQpLmNvbXBvcnQud2FpdF9mb3Jfc2IgPSAwOwotICAgICAgICAgIGlmIChsZW4g PCAyKQotICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIGRlYnVnKEYxMTEsInRuY190bl9z YiIsIm1vZGVtc3RhdGUgbWFzayIsc2JbMV0pOwotICAgICAgICB0bmNfbHNfbWFzayA9IHNiWzFd OwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBUTkNfQzJTX1BVUkdFOgotICAgICAgY2Fz ZSBUTkNfUzJDX1BVUkdFOgotICAgICAgICBpZiAobGVuIDwgMikKLSAgICAgICAgICByZXR1cm4o LTEpOwotICAgICAgICBkZWJ1ZyhGMTExLCJ0bmNfdG5fc2IiLCJwdXJnZSIsc2JbMV0pOwotICAg ICAgICBzd2l0Y2ggKCBzYlsxXSApIHsKLSAgICAgICAgICBjYXNlIFROQ19QVVJHRV9SRUNFSVZF OgotICAgICAgICAgIGNhc2UgVE5DX1BVUkdFX1RSQU5TTUlUOgotICAgICAgICAgIGNhc2UgVE5D X1BVUkdFX0JPVEg6Ci0gICAgICAgICAgICAvKiBwdXJnZSBsb2NhbCBidWZmZXJzICovCi0gICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuKC0x KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl dHVybigtMSk7Ci0gICAgfQotICAgIHJldHVybigwKTsKLX0KLQotQ09OU1QgY2hhciAqCi0jaWZk ZWYgQ0tfQU5TSUMKLXRuY19nZXRfc2lnbmF0dXJlKHZvaWQpCi0jZWxzZSAvKiBDS19BTlNJQyAq LwotdG5jX2dldF9zaWduYXR1cmUoKQotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB0bmNfZ2V0 X3NpZ25hdHVyZSAqLyB7Ci0gICAgLyogc2VuZCBJQUMgU0IgQ09NLVBPUlQgU0lHTkFUVVJFIElB QyBTRSAqLwotICAgIC8qIHdhaXQgZm9yIHJlc3BvbnNlICovCi0gICAgaW50IGkgPSAwLCByYzsK LQotICAgIGlmICh0dG5ldCAhPSBORVRfVENQQikgcmV0dXJuKE5VTEwpOwotICAgIGlmICh0dG5w cm90byAhPSBOUF9URUxORVQpIHJldHVybihOVUxMKTsKLQotICAgIGlmICghVEVMT1BUX01FKFRF TE9QVF9DT01QT1JUKSkgcmV0dXJuKE5VTEwpOwotCi0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKFRF TE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykgewotICAgICAg ICByZXR1cm4oTlVMTCk7Ci0gICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0gICAgaWYgKCB0 bmNfc2lnbmF0dXJlICkKLSAgICAgICAgcmV0dXJuKHRuY19zaWduYXR1cmUpOwotCi0gICAgc2Jf b3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgLyogSSBBbSBhIENvbW1hbmQgKi8KLSAg ICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTQjsgICAgICAgICAgICAvKiBTdWJuZWdvdGlhdGlvbiAq LwotICAgIHNiX291dFtpKytdID0gVEVMT1BUX0NPTVBPUlQ7ICAgICAgICAgICAgICAgLyogQ29t UG9ydCAqLwotICAgIHNiX291dFtpKytdID0gVE5DX0MyU19TSUdOQVRVUkU7ICAgIC8qIFNpZ25h dHVyZSAqLwotICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAvKiBF bmQgb2YgU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTRTsgICAg ICAgICAgICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLwotCi0jaWZkZWYgREVCVUcKLSAgICBp ZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgY2ttYWttc2codG5fbXNn X291dCxUTl9NU0dfTEVOLAotICAgICAgICAgICAgICAgICAiVEVMTkVUIFNFTlQgU0IgIixURUxP UFQoVEVMT1BUX0NPTVBPUlQpLAotICAgICAgICAgICAgICAgICAiIFNJR05BVFVSRSBJQUMgU0Ui LCBOVUxMKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNpZmRlZiBPUzIKLSAgICBSZXF1 ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNlbmRpZgotI2lmZGVmIERF QlVHCi0gICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0LCIiLDApOwotICAgIGlmICh0bl9kZWIgfHwg ZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKLSNlbmRpZiAvKiBERUJVRyAqLwotICAgIHJj ID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAwKTsgICAgICAvKiBTZW5kIGl0LiAqLwotI2lm ZGVmIE9TMgotICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwotI2VuZGlmCi0gICAgaWYgKHJjKQot ICAgICAgICByZXR1cm4oTlVMTCk7Ci0KLSAgICBpZiAodG5jX3dhaXQoKENIQVIgKikiY29tcG9y dCBzaWduYXR1cmUgcmVxdWVzdCIsMCkgPCAwKSB7Ci0gICAgICAgIHRuX3B1c2goKTsKLSAgICAg ICAgcmV0dXJuKE5VTEwpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJ0bmNfZ2V0X3NpZ25hdHVy ZSIsdG5jX3NpZ25hdHVyZSwwKTsKLSAgICByZXR1cm4odG5jX3NpZ25hdHVyZSk7Ci19Ci0KLWlu dAotI2lmZGVmIENLX0FOU0lDCi10bmNfc2VuZF9zaWduYXR1cmUoY2hhciAqIHNpZ25hdHVyZSkK LSNlbHNlIC8qIENLX0FOU0lDICovCi10bmNfc2VuZF9zaWduYXR1cmUoc2lnbmF0dXJlKSBjaGFy ICogc2lnbmF0dXJlOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB0bmNfc2VuZF9zaWduYXR1 cmUgKi8gewotICAgIC8qIHNlbmQgSUFDIFNCIENPTS1QT1JUIFNJR05BVFVSRSA8dGV4dD4gSUFD IFNFICovCi0gICAgaW50IGkgPSAwLCBqID0gMCwgcmM7Ci0KLSAgICBkZWJ1ZyhGMTEwLCJ0bmNf c2VuZF9zaWduYXR1cmUiLHNpZ25hdHVyZSwwKTsKLQotICAgIGlmICghc2lnbmF0dXJlIHx8ICFz aWduYXR1cmVbMF0pCi0gICAgICByZXR1cm4oMCk7Ci0KLSAgICBpZiAodHRuZXQgIT0gTkVUX1RD UEIpIHJldHVybigwKTsKLSAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4oMCk7 Ci0KLSAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHJldHVybigwKTsKLQotI2lm ZGVmIENLX1NTTAotICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxz Lm1lX2ZvbGxvd3MpIHsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBDS19T U0wgKi8KLQotICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAgIC8q IEkgQW0gYSBDb21tYW5kICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAgICAg ICAgICAgICAgLyogU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsrXSA9IFRFTE9QVF9D T01QT1JUOyAgICAgICAgICAgICAvKiBDb21Qb3J0ICovCi0gICAgc2Jfb3V0W2krK10gPSBUTkNf QzJTX1NJR05BVFVSRTsgICAgICAvKiBTaWduYXR1cmUgKi8KLSAgICBmb3IgKDsgc2lnbmF0dXJl W2pdOyBpKyssaisrKQotICAgICAgc2Jfb3V0W2ldID0gc2lnbmF0dXJlW2pdOwotICAgIHNiX291 dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAvKiBFbmQgb2YgU3VibmVnb3RpYXRp b24gKi8KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTRTsgICAgICAgICAgICAgICAgLyogbWFy a2VkIGJ5IElBQyBTRSAqLwotCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nIHx8IHRuX2Rl YiB8fCBkZWJzZXMpIHsKLSAgICAgICAgY2ttYWt4bXNnKHRuX21zZ19vdXQsVE5fTVNHX0xFTiwK LSAgICAgICAgICAgICAgICAgICJURUxORVQgU0VOVCBTQiAiLFRFTE9QVChURUxPUFRfQ09NUE9S VCksCi0gICAgICAgICAgICAgICAgICAiIFNJR05BVFVSRSAiLCBzaWduYXR1cmUsICIgSUFDIFNF IiwgTlVMTCwKLSAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxM KTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNpZmRlZiBPUzIKLSAgICBSZXF1ZXN0VGVs bmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNlbmRpZgotI2lmZGVmIERFQlVHCi0g ICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0LCIiLDApOwotICAgIGlmICh0bl9kZWIgfHwgZGVic2Vz KSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKLSNlbmRpZiAvKiBERUJVRyAqLwotICAgIHJjID0gKHR0 b2woKENIQVIgKilzYl9vdXQsaSkgPCAwKTsgICAgICAvKiBTZW5kIGl0LiAqLwotI2lmZGVmIE9T MgotICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwotI2VuZGlmCi0gICAgaWYgKHJjKQotICAgICAg ICByZXR1cm4oLTEpOwotICAgIHJldHVybigwKTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMK LXRuY19zZXRfYmF1ZCggbG9uZyBiYXVkICkKLSNlbHNlIC8qIENLX0FOU0lDICovCi10bmNfc2V0 X2JhdWQoYmF1ZCkgbG9uZyBiYXVkOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB0bmNfc2V0 X2JhdWQgKi8gewotICAgIC8qIHNlbmQgSUFDIFNCIENPTS1QT1JUIFNFVC1CQVVEIDx2YWx1ZSg0 KT4gSUFDIFNFICAqLwotICAgIC8qIHdhaXQgZm9yIHJlc3BvbnNlICovCi0gICAgLyogMCBpcyB1 c2VkIHRvIHJlcXVlc3QgdGhlIGN1cnJlbnQgYmF1ZCByYXRlIGFuZCAqLwotICAgIC8qIG1heSBu b3QgYmUgc2VudCBieSB0aGlzIGZ1bmMgKi8KLSAgICAvKiByZXR1cm4gbmV3IGhvc3QgdmFsdWUg Ki8KLQotICAgIC8qCi0gICAgICogICB0aGUgYWJvdmUgY29tZXMgZnJvbSB0aGUgUkZDLiAgQnV0 IHRoYXQgaXMgbm90IHdoYXQgSSBhbSBzZWVpbmcKLSAgICAgKiAgIGluc3RlYWQgSSBhcHBlYXIg dG8gYmUgc2VlaW5nIHRvIGZvbGxvd2luZzoKLSAgICAgKgotICAgICAqICAgICAgVmFsdWUgICAg ICAgICAgICAgICBCYXVkCi0gICAgICogICAgICAgICAgMSAgICAgICAgICAgICAgID8KLSAgICAg KiAgICAgICAgICAyICAgICAgICAgICAgICAgPwotICAgICAqICAgICAgICAgIDMgICAgICAgICAg ICAgICAzMDAKLSAgICAgKiAgICAgICAgICA0ICAgICAgICAgICAgICAgNjAwCi0gICAgICogICAg ICAgICAgNSAgICAgICAgICAgICAgIDEyMDAKLSAgICAgKiAgICAgICAgICA2ICAgICAgICAgICAg ICAgMjQwMAotICAgICAqICAgICAgICAgIDcgICAgICAgICAgICAgICA0ODAwICAgICAgPwotICAg ICAqICAgICAgICAgIDggICAgICAgICAgICAgICA5NjAwCi0gICAgICogICAgICAgICAgOSAgICAg ICAgICAgICAgICAgICAgICAgICA/Ci0gICAgICogICAgICAgICAgMTAgICAgICAgICAgICAgIDE5 MjAwICAgICA/Ci0gICAgICogICAgICAgICAgMTEgICAgICAgICAgICAgICAgICAgICAgICA/Ci0g ICAgICogICAgICAgICAgMTIgICAgICAgICAgICAgIDM4NDAwCi0gICAgICogICAgICAgICAgMTMg ICAgICAgICAgICAgIDU3NjAwICAgICA/Ci0gICAgICogICAgICAgICAgMTQgICAgICAgICAgICAg IDExNTIwMAotICAgICAqICAgICAgICAgIDE1ICAgICAgICAgICAgICAyMzA0MDAgICAgPwotICAg ICAqICAgICAgICAgIDE2ICAgICAgICAgICAgICA0NjA4MDAgICAgPwotICAgICAqLwotCi0gICAg aW50IGkgPSAwLCByYzsKLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgIC8qIEFPUy9WUyBkb2Vzbid0 IGhhdmUgaHRvbmwoKSBidXQgTVYncyBhcmUgYmlnLWVuZGlhbiAqLwotICAgIGxvbmcgbmV0X2Jh dWQgPSBiYXVkOwotI2Vsc2UKLSAgICBsb25nIG5ldF9iYXVkID0gaHRvbmwoYmF1ZCk7Ci0jZW5k aWYgLyogZGF0YWdlbmVyYWwgKi8KLSAgICBDSEFSIGI7Ci0KLSAgICBkZWJ1ZyhGMTExLCJ0bmNf c2V0X2JhdWQiLCJiZWdpbiIsYmF1ZCk7Ci0KLSAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJl dHVybigwKTsKLSAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4oMCk7Ci0KLSAg ICBpZiAoIVRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHJldHVybigwKTsKLQotI2lmZGVmIENL X1NTTAotICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2Zv bGxvd3MpIHsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8K LQotICAgIGlmIChiYXVkIDw9IDApCi0gICAgICAgIHJldHVybigwKTsKLQotICAgIGlmICggbmV0 X2JhdWQgIT0gMCAmJiBuZXRfYmF1ZCA9PSB0bmNfYnBzKQotICAgICAgICByZXR1cm4odG5jX2Jw cyk7Ci0KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBJ IEFtIGEgQ29tbWFuZCAqLwotICAgIHNiX291dFtpKytdID0gKENIQVIpIFNCOyAgICAgICAgICAg ICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSBURUxPUFRfQ09N UE9SVDsgICAgICAgICAgICAgLyogQ29tUG9ydCAqLwotICAgIHNiX291dFtpKytdID0gVE5DX0My U19TRVRfQkFVRFJBVEU7ICAgLyogU2V0IEJhdWQgUmF0ZSAqLwotCi0gICAgaWYgKHRuY19icHNf aW5kZXgpIHsKLSAgICAgICAgLyogSU9TIEFjY2VzcyBTZXJ2ZXIgKi8KLSAgICAgICAgaWYgKGJh dWQgPD0gMzAwKQotICAgICAgICAgICAgYiA9IFROQ19CUFNfMzAwOwotICAgICAgICBlbHNlIGlm IChiYXVkIDw9IDYwMCkKLSAgICAgICAgICAgIGIgPSBUTkNfQlBTXzYwMDsKLSAgICAgICAgZWxz ZSBpZiAoYmF1ZCA8PSAxMjAwKQotICAgICAgICAgICAgYiA9IFROQ19CUFNfMTIwMDsKLSAgICAg ICAgZWxzZSBpZiAoYmF1ZCA8PSAyNDAwKQotICAgICAgICAgICAgYiA9IFROQ19CUFNfMjQwMDsK LSAgICAgICAgZWxzZSBpZiAoYmF1ZCA8PSA0ODAwKQotICAgICAgICAgICAgYiA9IFROQ19CUFNf NDgwMDsKLSAgICAgICAgZWxzZSBpZiAoYmF1ZCA8PSA5NjAwKQotICAgICAgICAgICAgYiA9IFRO Q19CUFNfOTYwMDsKLSAgICAgICAgZWxzZSBpZiAoYmF1ZCA8PSAxNDQwMCkKLSAgICAgICAgICAg IGIgPSBUTkNfQlBTXzE0NDAwOwotICAgICAgICBlbHNlIGlmIChiYXVkIDw9IDE5MjAwKQotICAg ICAgICAgICAgYiA9IFROQ19CUFNfMTkyMDA7Ci0gICAgICAgIGVsc2UgaWYgKGJhdWQgPD0gMjg4 MDApCi0gICAgICAgICAgICBiID0gVE5DX0JQU18yODgwMDsKLSAgICAgICAgZWxzZSBpZiAoYmF1 ZCA8PSAzODQwMCkKLSAgICAgICAgICAgIGIgPSBUTkNfQlBTXzM4NDAwOwotICAgICAgICBlbHNl IGlmIChiYXVkIDw9IDU3NjAwKQotICAgICAgICAgICAgYiA9IFROQ19CUFNfNTc2MDA7Ci0gICAg ICAgIGVsc2UgaWYgKGJhdWQgPD0gMTE1MjAwKQotICAgICAgICAgICAgYiA9IFROQ19CUFNfMTE1 MjAwOwotICAgICAgICBlbHNlIGlmIChiYXVkIDw9IDIzMDQwMCkKLSAgICAgICAgICAgIGIgPSBU TkNfQlBTXzIzMDQwMDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYiA9IFROQ19CUFNfNDYw ODAwOwotICAgICAgICBzYl9vdXRbaSsrXSA9IGI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLyog UkZDIDIyMTcgKi8KLSAgICAgICAgc2Jfb3V0W2krK10gPSAoKGNoYXIgKikmbmV0X2JhdWQpWzBd OwotICAgICAgICBzYl9vdXRbaSsrXSA9ICgoY2hhciAqKSZuZXRfYmF1ZClbMV07Ci0gICAgICAg IHNiX291dFtpKytdID0gKChjaGFyICopJm5ldF9iYXVkKVsyXTsKLSAgICAgICAgc2Jfb3V0W2kr K10gPSAoKGNoYXIgKikmbmV0X2JhdWQpWzNdOwotICAgIH0KLSAgICBzYl9vdXRbaSsrXSA9IChD SEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KLSAg ICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTRTsgICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkg SUFDIFNFICovCi0KLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRl YnNlcykgewotICAgICAgICBja21ha3htc2codG5fbXNnX291dCxUTl9NU0dfTEVOLAotICAgICAg ICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICIsVEVMT1BUKFRFTE9QVF9DT01QT1JUKSwKLSAg ICAgICAgICAgICAgICAgICIgU0VULUJBVUQtUkFURSAiLCBja2x0b2EoYmF1ZCksIiBJQUMgU0Ui LCBOVUxMLAotICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwp OwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0jaWZkZWYgT1MyCi0gICAgUmVxdWVzdFRl bG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Ci0jZW5kaWYKLSNpZmRlZiBERUJVRwot ICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwiIiwwKTsKLSAgICBpZiAodG5fZGViIHx8IGRlYnNl cykgdG5fZGVidWcodG5fbXNnX291dCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICByYyA9ICh0 dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgLyogU2VuZCBpdC4gKi8KLSNpZmRlZiBP UzIKLSAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRpZgotICAgIGlmIChyYykKLSAgICAg ICAgcmV0dXJuKC0xKTsKLQotICAgIGlmICh0bmNfd2FpdCgoQ0hBUiAqKSJjb21wb3J0IHNldCBi YXVkIHJhdGUiLDApIDwgMCkgewotICAgICAgICB0bl9wdXNoKCk7Ci0gICAgICAgIHJldHVybigt MSk7Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsInRuY19zZXRfYmF1ZCIsImVuZCIsdG5jX2Jwcyk7 Ci0gICAgcmV0dXJuKHRuY19icHMpOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotdG5jX2dl dF9iYXVkKHZvaWQpCi0jZWxzZSAvKiBDS19BTlNJQyAqLwotdG5jX2dldF9iYXVkKCkKLSNlbmRp ZiAvKiBDS19BTlNJQyAqLwotLyogdG5jX2dldF9iYXVkICovIHsKLSAgICAvKiBzZW5kIElBQyBT QiBDT00tUE9SVCBTRVQtQkFVRCA8dmFsdWUoNCk9MD4gSUFDIFNFICAqLwotICAgIC8qIHdhaXQg Zm9yIHJlc3BvbnNlICovCi0gICAgaW50IGkgPSAwLCByYzsKLQotICAgIGRlYnVnKEYxMTAsInRu Y19nZXRfYmF1ZCIsImJlZ2luIiwwKTsKLQotICAgIGlmICh0dG5ldCAhPSBORVRfVENQQikgcmV0 dXJuKDApOwotICAgIGlmICh0dG5wcm90byAhPSBOUF9URUxORVQpIHJldHVybigwKTsKLQotICAg IGlmICghVEVMT1BUX01FKFRFTE9QVF9DT01QT1JUKSkgcmV0dXJuKDApOwotCi0jaWZkZWYgQ0tf U1NMCi0gICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9s bG93cykgewotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwot Ci0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyogSSBBbSBh IENvbW1hbmQgKi8KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTQjsgICAgICAgICAgICAgICAg ICAvKiBTdWJuZWdvdGlhdGlvbiAqLwotICAgIHNiX291dFtpKytdID0gVEVMT1BUX0NPTVBPUlQ7 ICAgICAgICAgICAgIC8qIENvbVBvcnQgKi8KLSAgICBzYl9vdXRbaSsrXSA9IFROQ19DMlNfU0VU X0JBVURSQVRFOyAgIC8qIFNldCBCYXVkIFJhdGUgKi8KLQotICAgIGlmICh0bmNfYnBzX2luZGV4 ID4gMCkgewotICAgICAgICAvKiBBY2Nlc3MgU2VydmVyICovCi0gICAgICAgIHNiX291dFtpKytd ID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICAvKiBSRkMgMjIxNyAqLwotICAgICAgICBzYl9v dXRbaSsrXSA9IDA7Ci0gICAgICAgIHNiX291dFtpKytdID0gMDsKLSAgICAgICAgc2Jfb3V0W2kr K10gPSAwOwotICAgICAgICBzYl9vdXRbaSsrXSA9IDA7Ci0gICAgfQotICAgIHNiX291dFtpKytd ID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAq LwotICAgIHNiX291dFtpKytdID0gKENIQVIpIFNFOyAgICAgICAgICAgICAgICAgIC8qIG1hcmtl ZCBieSBJQUMgU0UgKi8KLQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIg fHwgZGVic2VzKSB7Ci0gICAgICAgIGNrbWFreG1zZyh0bl9tc2dfb3V0LFROX01TR19MRU4sCi0g ICAgICAgICAgICAgICAgICAiVEVMTkVUIFNFTlQgU0IgIixURUxPUFQoVEVMT1BUX0NPTVBPUlQp LAotICAgICAgICAgICAgICAgICAgIiBTRVQtQkFVRC1SQVRFICIsIGNrbHRvYSgwKSwiIElBQyBT RSIsIE5VTEwsCi0gICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVM TCk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0jaWZkZWYgT1MyCi0gICAgUmVxdWVzdFRl bG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Ci0jZW5kaWYKLSNpZmRlZiBERUJVRwot ICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwiIiwwKTsKLSAgICBpZiAodG5fZGViIHx8IGRlYnNl cykgdG5fZGVidWcodG5fbXNnX291dCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICByYyA9ICh0 dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgLyogU2VuZCBpdC4gKi8KLSNpZmRlZiBP UzIKLSAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRpZgotICAgIGlmIChyYykKLSAgICAg ICAgcmV0dXJuKC0xKTsKLQotICAgIGlmICh0bmNfd2FpdCgoQ0hBUiAqKSJjb21wb3J0IGdldCBi YXVkIHJhdGUiLDApIDwgMCkgewotICAgICAgICB0bl9wdXNoKCk7Ci0gICAgICAgIHJldHVybigt MSk7Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsInRuY19nZXRfYmF1ZCIsImVuZCIsdG5jX2Jwcyk7 Ci0gICAgcmV0dXJuKHRuY19icHMpOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotdG5jX3Nl dF9kYXRhc2l6ZShpbnQgZGF0YXNpemUpCi0jZWxzZSAvKiBDS19BTlNJQyAqLwotdG5jX3NldF9k YXRhc2l6ZShkYXRhc2l6ZSkgaW50IGRhdGFzaXplOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0v KiB0bmNfc2V0X2RhdGFzaXplICovIHsKLSAgICAvKiBJQUMgU0IgQ09NLVBPUlQgU0VUX0RBVEFT SVpFIDx2YWx1ZSgxKT4gSUFDIFNFICovCi0gICAgLyogVmFsaWQgPHZhbHVlPnMgYXJlIDUgdGhy b3VnaCA4ICovCi0gICAgLyogV2FpdCBmb3IgcmVzcG9uc2UgKi8KLSAgICAvKiByZXR1cm4gbmV3 IGhvc3QgdmFsdWUgKi8KLQotICAgIGludCBpID0gMCwgcmM7Ci0KLSAgICBkZWJ1ZyhGMTExLCJ0 bmNfc2V0X2RhdGFzaXplIiwiYmVnaW4iLGRhdGFzaXplKTsKLQotICAgIGlmICh0dG5ldCAhPSBO RVRfVENQQikgcmV0dXJuKDApOwotICAgIGlmICh0dG5wcm90byAhPSBOUF9URUxORVQpIHJldHVy bigwKTsKLQotICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9DT01QT1JUKSkgcmV0dXJuKDApOwot Ci0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFy dF90bHMubWVfZm9sbG93cykgewotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8q IENLX1NTTCAqLwotCi0gICAgaWYgKCAhKGRhdGFzaXplID49IDUgJiYgZGF0YXNpemUgPD0gOCkg KQotICAgICAgICByZXR1cm4oMCk7Ci0KLSAgICBpZiAoIGRhdGFzaXplICAhPSAwICYmICBkYXRh c2l6ZSA9PSB0bmNfZGF0YXNpemUgKQotICAgICAgICByZXR1cm4odG5jX2RhdGFzaXplKTsKLQot ICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAgIC8qIEkgQW0gYSBD b21tYW5kICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAgICAg LyogU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsrXSA9IFRFTE9QVF9DT01QT1JUOyAg ICAgICAgICAgICAvKiBDb21Qb3J0ICovCi0gICAgc2Jfb3V0W2krK10gPSBUTkNfQzJTX1NFVF9E QVRBU0laRTsgICAvKiBTZXQgRGF0YVNpemUgKi8KLSAgICBzYl9vdXRbaSsrXSA9ICh1bnNpZ25l ZCBjaGFyKShkYXRhc2l6ZSAmIDB4RkYpOwotICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsg ICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAqLwotICAgIHNiX291dFtp KytdID0gKENIQVIpIFNFOyAgICAgICAgICAgICAgICAgIC8qIG1hcmtlZCBieSBJQUMgU0UgKi8K LQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7Ci0g ICAgICAgIGNrbWFreG1zZyh0bl9tc2dfb3V0LFROX01TR19MRU4sCi0gICAgICAgICAgICAgICAg ICAiVEVMTkVUIFNFTlQgU0IgIixURUxPUFQoVEVMT1BUX0NPTVBPUlQpLAotICAgICAgICAgICAg ICAgICAgIiBTRVQtREFUQVNJWkUgIiwgY2tpdG9hKGRhdGFzaXplKSwiIElBQyBTRSIsIE5VTEws Ci0gICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0gICAg fQotI2VuZGlmIC8qIERFQlVHICovCi0jaWZkZWYgT1MyCi0gICAgUmVxdWVzdFRlbG5ldE11dGV4 KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Ci0jZW5kaWYKLSNpZmRlZiBERUJVRwotICAgIGRlYnVn KEYxMDAsdG5fbXNnX291dCwiIiwwKTsKLSAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVi dWcodG5fbXNnX291dCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICByYyA9ICh0dG9sKChDSEFS ICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgLyogU2VuZCBpdC4gKi8KLSNpZmRlZiBPUzIKLSAgICBS ZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRpZgotICAgIGlmIChyYykKLSAgICAgICAgcmV0dXJu KC0xKTsKLQotICAgIGlmICh0bmNfd2FpdCgoQ0hBUiAqKSJjb21wb3J0IHNldCBkYXRhc2l6ZSIs MCkgPCAwKSB7Ci0gICAgICAgIHRuX3B1c2goKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9 Ci0gICAgZGVidWcoRjExMSwidG5jX3NldF9kYXRhc2l6ZSIsImVuZCIsdG5jX2RhdGFzaXplKTsK LSAgICByZXR1cm4odG5jX2RhdGFzaXplKTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXRu Y19nZXRfZGF0YXNpemUodm9pZCkKLSNlbHNlIC8qIENLX0FOU0lDICovCi10bmNfZ2V0X2RhdGFz aXplKCkKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogdG5jX2dldF9kYXRhc2l6ZSAqLyB7Ci0g ICAgLyogSUFDIFNCIENPTS1QT1JUIFNFVF9EQVRBU0laRSA8dmFsdWUoMSk9MD4gSUFDIFNFICov Ci0gICAgLyogV2FpdCBmb3IgcmVzcG9uc2UgKi8KLSAgICBpbnQgaSA9IDAsIHJjOwotCi0gICAg ZGVidWcoRjExMCwidG5jX2dldF9kYXRhc2l6ZSIsImJlZ2luIiwwKTsKLQotICAgIGlmICh0dG5l dCAhPSBORVRfVENQQikgcmV0dXJuKDApOwotICAgIGlmICh0dG5wcm90byAhPSBOUF9URUxORVQp IHJldHVybigwKTsKLQotICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9DT01QT1JUKSkgcmV0dXJu KDApOwotCi0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExT KS5zdGFydF90bHMubWVfZm9sbG93cykgewotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2Vu ZGlmIC8qIENLX1NTTCAqLwotCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAg ICAgICAgICAgLyogSSBBbSBhIENvbW1hbmQgKi8KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBT QjsgICAgICAgICAgICAgICAgICAvKiBTdWJuZWdvdGlhdGlvbiAqLwotICAgIHNiX291dFtpKytd ID0gVEVMT1BUX0NPTVBPUlQ7ICAgICAgICAgICAgIC8qIENvbVBvcnQgKi8KLSAgICBzYl9vdXRb aSsrXSA9IFROQ19DMlNfU0VUX0RBVEFTSVpFOyAgIC8qIFNldCBEYXRhU2l6ZSAqLwotICAgIHNi X291dFtpKytdID0gMDsKLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAg ICAgICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFS KSBTRTsgICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCi0KLSNpZmRlZiBE RUJVRwotICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewotICAgICAgICBja21h a3htc2codG5fbXNnX291dCxUTl9NU0dfTEVOLAotICAgICAgICAgICAgICAgICAgIlRFTE5FVCBT RU5UIFNCICIsVEVMT1BUKFRFTE9QVF9DT01QT1JUKSwKLSAgICAgICAgICAgICAgICAgICIgU0VU LURBVEFTSVpFICIsIGNrbHRvYSgwKSwiIElBQyBTRSIsIE5VTEwsCi0gICAgICAgICAgICAgICAg ICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVH ICovCi0jaWZkZWYgT1MyCi0gICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9X QUlUICk7Ci0jZW5kaWYKLSNpZmRlZiBERUJVRwotICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwi IiwwKTsKLSAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7Ci0j ZW5kaWYgLyogREVCVUcgKi8KLSAgICByYyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7 ICAgICAgLyogU2VuZCBpdC4gKi8KLSNpZmRlZiBPUzIKLSAgICBSZWxlYXNlVGVsbmV0TXV0ZXgo KTsKLSNlbmRpZgotICAgIGlmIChyYykKLSAgICAgICAgcmV0dXJuKC0xKTsKLQotICAgIGlmICh0 bmNfd2FpdCgoQ0hBUiAqKSJjb21wb3J0IGdldCBkYXRhc2l6ZSIsMCkgPCAwKSB7Ci0gICAgICAg IHRuX3B1c2goKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgZGVidWcoRjExMSwi dG5jX2dldF9kYXRhc2l6ZSIsImVuZCIsdG5jX2RhdGFzaXplKTsKLSAgICByZXR1cm4odG5jX2Rh dGFzaXplKTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXRuY19zZXRfcGFyaXR5KGludCBw YXJpdHkpCi0jZWxzZSAvKiBDS19BTlNJQyAqLwotdG5jX3NldF9wYXJpdHkocGFyaXR5KSBpbnQg cGFyaXR5OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB0bmNfc2V0X3Bhcml0eSAqLyB7Ci0g ICAgLyogSUFDIFNCIENPTS1QT1JUIFNFVF9QQVJJVFkgPHZhbHVlKDEpPiBJQUMgU0UgKi8KLSAg ICAvKiAgICAgICAgVmFsdWUgICAgIFBhcml0eQotICAgICAqICAgICAgICAgIDEgICAgICAgTm9u ZQotICAgICAqICAgICAgICAgIDIgICAgICAgT2RkCi0gICAgICogICAgICAgICAgMyAgICAgICBF dmVuCi0gICAgICogICAgICAgICAgNCAgICAgICBNYXJrCi0gICAgICogICAgICAgICAgNSAgICAg ICBTcGFjZQotICAgICAqLwotICAgIC8qIFdhaXQgZm9yIHJlc3BvbnNlLiAgUmV0dXJuIG5ldyBo b3N0IHZhbHVlLiAqLwotICAgIGludCBpID0gMCwgcmM7Ci0KLSAgICBkZWJ1ZyhGMTEwLCJ0bmNf c2V0X3Bhcml0eSIsImJlZ2luIixwYXJpdHkpOwotCi0gICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BC KSByZXR1cm4oMCk7Ci0gICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDApOwot Ci0gICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQpKSByZXR1cm4oMCk7Ci0KLSNpZmRl ZiBDS19TU0wKLSAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5t ZV9mb2xsb3dzKSB7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1NM ICovCi0KLSAgICBpZiAoICEocGFyaXR5ID49IDEgJiYgcGFyaXR5IDw9IDUpICkKLSAgICAgICAg cmV0dXJuKDApOwotCi0gICAgaWYgKCBwYXJpdHkgIT0gMCAmJiBwYXJpdHkgPT0gdG5jX3Bhcml0 eSApCi0gICAgICAgIHJldHVybih0bmNfcGFyaXR5KTsKLQotICAgIHNiX291dFtpKytdID0gKENI QVIpIElBQzsgICAgICAgICAgICAgICAgIC8qIEkgQW0gYSBDb21tYW5kICovCi0gICAgc2Jfb3V0 W2krK10gPSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAgICAgLyogU3VibmVnb3RpYXRpb24gKi8K LSAgICBzYl9vdXRbaSsrXSA9IFRFTE9QVF9DT01QT1JUOyAgICAgICAgICAgICAvKiBDb21Qb3J0 ICovCi0gICAgc2Jfb3V0W2krK10gPSBUTkNfQzJTX1NFVF9QQVJJVFk7ICAgICAvKiBTZXQgUGFy aXR5ICovCi0gICAgc2Jfb3V0W2krK10gPSAodW5zaWduZWQgY2hhcikocGFyaXR5ICYgMHhGRik7 Ci0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyogRW5kIG9m IFN1Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7ICAgICAgICAg ICAgICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLwotCi0jaWZkZWYgREVCVUcKLSAgICBpZiAo ZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgY2ttYWt4bXNnKHRuX21zZ19v dXQsVE5fTVNHX0xFTiwKLSAgICAgICAgICAgICAgICAgICJURUxORVQgU0VOVCBTQiAiLFRFTE9Q VChURUxPUFRfQ09NUE9SVCksCi0gICAgICAgICAgICAgICAgICAiIFNFVC1QQVJJVFkgIiwgY2tp dG9hKHBhcml0eSksIiBJQUMgU0UiLCBOVUxMLAotICAgICAgICAgICAgICAgICAgTlVMTCxOVUxM LE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotI2lmZGVm IE9TMgotICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwotI2Vu ZGlmCi0jaWZkZWYgREVCVUcKLSAgICBkZWJ1ZyhGMTAwLHRuX21zZ19vdXQsIiIsMCk7Ci0gICAg aWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZ19vdXQpOwotI2VuZGlmIC8qIERF QlVHICovCi0gICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNiX291dCxpKSA8IDApOyAgICAgIC8qIFNl bmQgaXQuICovCi0jaWZkZWYgT1MyCi0gICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7Ci0jZW5kaWYK LSAgICBpZiAocmMpCi0gICAgICAgIHJldHVybigtMSk7Ci0KLSAgICBpZiAodG5jX3dhaXQoKENI QVIgKikiY29tcG9ydCBzZXQgcGFyaXR5IiwwKSA8IDApIHsKLSAgICAgICAgdG5fcHVzaCgpOwot ICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJ0bmNfc2V0X3Bhcml0 eSIsImVuZCIsdG5jX3Bhcml0eSk7Ci0gICAgcmV0dXJuKHRuY19wYXJpdHkpOwotfQotCi1pbnQK LSNpZmRlZiBDS19BTlNJQwotdG5jX2dldF9wYXJpdHkodm9pZCkKLSNlbHNlIC8qIENLX0FOU0lD ICovCi10bmNfZ2V0X3Bhcml0eSgpCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHRuY19nZXRf cGFyaXR5ICovIHsKLSAgICAvKiBJQUMgU0IgQ09NLVBPUlQgU0VUX1BBUklUWSA8dmFsdWUoMSk9 MD4gSUFDIFNFICovCi0gICAgLyogd2FpdCBmb3IgcmVzcG9uc2UgKi8KLSAgICBpbnQgaSA9IDAs IHJjOwotCi0gICAgZGVidWcoRjExMCwidG5jX2dldF9wYXJpdHkiLCJiZWdpbiIsMCk7Ci0gICAg aWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSByZXR1cm4oMCk7Ci0gICAgaWYgKHR0bnByb3RvICE9IE5Q X1RFTE5FVCkgcmV0dXJuKDApOwotCi0gICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQp KSByZXR1cm4oMCk7Ci0KLSNpZmRlZiBDS19TU0wKLSAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9T VEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7Ci0gICAgICAgIHJldHVybigwKTsKLSAg ICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7 ICAgICAgICAgICAgICAgICAvKiBJIEFtIGEgQ29tbWFuZCAqLwotICAgIHNiX291dFtpKytdID0g KENIQVIpIFNCOyAgICAgICAgICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICovCi0gICAgc2Jf b3V0W2krK10gPSBURUxPUFRfQ09NUE9SVDsgICAgICAgICAgICAgLyogQ29tUG9ydCAqLwotICAg IHNiX291dFtpKytdID0gVE5DX0MyU19TRVRfUEFSSVRZOyAgICAgLyogU2V0IFBhcml0eSAqLwot ICAgIHNiX291dFtpKytdID0gMDsKLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAg ICAgICAgICAgICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsrXSA9 IChDSEFSKSBTRTsgICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCi0KLSNp ZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewotICAgICAg ICBja21ha3htc2codG5fbXNnX291dCxUTl9NU0dfTEVOLAotICAgICAgICAgICAgICAgICAgIlRF TE5FVCBTRU5UIFNCICIsVEVMT1BUKFRFTE9QVF9DT01QT1JUKSwKLSAgICAgICAgICAgICAgICAg ICIgU0VULVBBUklUWSAiLCBja2l0b2EoMCksIiBJQUMgU0UiLCBOVUxMLAotICAgICAgICAgICAg ICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgIH0KLSNlbmRpZiAvKiBE RUJVRyAqLwotI2lmZGVmIE9TMgotICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5J VEVfV0FJVCApOwotI2VuZGlmCi0jaWZkZWYgREVCVUcKLSAgICBkZWJ1ZyhGMTAwLHRuX21zZ19v dXQsIiIsMCk7Ci0gICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZ19vdXQp OwotI2VuZGlmIC8qIERFQlVHICovCi0gICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNiX291dCxpKSA8 IDApOyAgICAgIC8qIFNlbmQgaXQuICovCi0jaWZkZWYgT1MyCi0gICAgUmVsZWFzZVRlbG5ldE11 dGV4KCk7Ci0jZW5kaWYKLSAgICBpZiAocmMpCi0gICAgICAgIHJldHVybigtMSk7Ci0KLSAgICBp ZiAodG5jX3dhaXQoKENIQVIgKikiY29tcG9ydCBnZXQgcGFyaXR5IiwwKSA8IDApIHsKLSAgICAg ICAgdG5fcHVzaCgpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTEx LCJ0bmNfZ2V0X3Bhcml0eSIsImVuZCIsdG5jX3Bhcml0eSk7Ci0gICAgcmV0dXJuKHRuY19wYXJp dHkpOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotdG5jX3NldF9zdG9wc2l6ZShpbnQgc3Rv cHNpemUpCi0jZWxzZSAvKiBDS19BTlNJQyAqLwotdG5jX3NldF9zdG9wc2l6ZShzdG9wc2l6ZSkg aW50IHN0b3BzaXplOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB0bmNfc2V0X3N0b3BzaXpl ICovIHsKLSAgICAvKiBJQUMgU0IgQ09NLVBPUlQgU0VUX1NUT1BTSVpFIDx2YWx1ZSgxKT4gSUFD IFNFICovCi0gICAgLyogICAgICAgIFZhbHVlICAgICBTdG9wIEJpdCBTaXplCi0gICAgICogICAg ICAgICAgMSAgICAgICAxCi0gICAgICogICAgICAgICAgMiAgICAgICAyCi0gICAgICogICAgICAg ICAgMyAgICAgICAxLjUKLSAgICAgKi8KLSAgICAvKiBXYWl0IGZvciByZXNwb25zZS4gIFJldHVy biBuZXcgaG9zdCB2YWx1ZS4gKi8KLSAgICBpbnQgaSA9IDAsIHJjOwotCi0gICAgZGVidWcoRjEx MSwidG5jX3NldF9zdG9wc2l6ZSIsImJlZ2luIixzdG9wc2l6ZSk7Ci0gICAgaWYgKHR0bmV0ICE9 IE5FVF9UQ1BCKSByZXR1cm4oMCk7Ci0gICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0 dXJuKDApOwotCi0gICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQpKSByZXR1cm4oMCk7 Ci0KLSNpZmRlZiBDS19TU0wKLSAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0 YXJ0X3Rscy5tZV9mb2xsb3dzKSB7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYg LyogQ0tfU1NMICovCi0KLSAgICBpZiAoIShzdG9wc2l6ZSA+PSAxICYmIHN0b3BzaXplIDw9IDMp ICkKLSAgICAgIHJldHVybigwKTsKLQotICAgIGlmICggc3RvcHNpemUgIT0gMCAmJiBzdG9wc2l6 ZSA9PSB0bmNfc3RvcGJpdCApCi0gICAgICAgIHJldHVybih0bmNfc3RvcGJpdCk7Ci0KLSAgICBz Yl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBJIEFtIGEgQ29tbWFu ZCAqLwotICAgIHNiX291dFtpKytdID0gKENIQVIpIFNCOyAgICAgICAgICAgICAgICAgIC8qIFN1 Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSBURUxPUFRfQ09NUE9SVDsgICAgICAg ICAgICAgLyogQ29tUG9ydCAqLwotICAgIHNiX291dFtpKytdID0gVE5DX0MyU19TRVRfU1RPUFNJ WkU7ICAgLyogU2V0IFN0b3AgQml0cyAqLwotICAgIHNiX291dFtpKytdID0gKHVuc2lnbmVkIGNo YXIpKHN0b3BzaXplICYgMHhGRik7Ci0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAg ICAgICAgICAgICAgLyogRW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10g PSAoQ0hBUikgU0U7ICAgICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLwotCi0j aWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAg ICAgY2ttYWt4bXNnKHRuX21zZ19vdXQsVE5fTVNHX0xFTiwKLSAgICAgICAgICAgICAgICAgICJU RUxORVQgU0VOVCBTQiAiLFRFTE9QVChURUxPUFRfQ09NUE9SVCksCi0gICAgICAgICAgICAgICAg ICAiIFNFVC1TVE9QU0laRSAiLCBja2l0b2Eoc3RvcHNpemUpLCIgSUFDIFNFIiwgTlVMTCwKLSAg ICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICB9Ci0j ZW5kaWYgLyogREVCVUcgKi8KLSNpZmRlZiBPUzIKLSAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNF TV9JTkRFRklOSVRFX1dBSVQgKTsKLSNlbmRpZgotI2lmZGVmIERFQlVHCi0gICAgZGVidWcoRjEw MCx0bl9tc2dfb3V0LCIiLDApOwotICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0 bl9tc2dfb3V0KTsKLSNlbmRpZiAvKiBERUJVRyAqLwotICAgIHJjID0gKHR0b2woKENIQVIgKilz Yl9vdXQsaSkgPCAwKTsgICAgICAvKiBTZW5kIGl0LiAqLwotI2lmZGVmIE9TMgotICAgIFJlbGVh c2VUZWxuZXRNdXRleCgpOwotI2VuZGlmCi0gICAgaWYgKHJjKQotICAgICAgICByZXR1cm4oLTEp OwotCi0gICAgaWYgKHRuY193YWl0KChDSEFSICopImNvbXBvcnQgc2V0IHN0b3BzaXplIiwwKSA8 IDApIHsKLSAgICAgICAgdG5fcHVzaCgpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAg ICBkZWJ1ZyhGMTExLCJ0bmNfc2V0X3N0b3BzaXplIiwiZW5kIix0bmNfc3RvcGJpdCk7Ci0gICAg cmV0dXJuKHRuY19zdG9wYml0KTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXRuY19nZXRf c3RvcHNpemUodm9pZCkKLSNlbHNlIC8qIENLX0FOU0lDICovCi10bmNfZ2V0X3N0b3BzaXplKCkK LSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogdG5jX2dldF9zdG9wc2l6ZSAqLyB7Ci0gICAgLyog SUFDIFNCIENPTS1QT1JUIFNFVF9TVE9QU0laRSA8dmFsdWUoMSk9MD4gSUFDIFNFICovCi0gICAg LyogV2FpdCBmb3IgcmVzcG9uc2UgKi8KLSAgICBpbnQgaSA9IDAsIHJjOwotCi0gICAgZGVidWco RjExMCwidG5jX2dldF9zdG9wc2l6ZSIsImJlZ2luIiwwKTsKLSAgICBpZiAodHRuZXQgIT0gTkVU X1RDUEIpIHJldHVybigwKTsKLSAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4o MCk7Ci0KLSAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHJldHVybigwKTsKLQot I2lmZGVmIENLX1NTTAotICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRf dGxzLm1lX2ZvbGxvd3MpIHsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBD S19TU0wgKi8KLQotICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAg IC8qIEkgQW0gYSBDb21tYW5kICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAg ICAgICAgICAgICAgLyogU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsrXSA9IFRFTE9Q VF9DT01QT1JUOyAgICAgICAgICAgICAvKiBDb21Qb3J0ICovCi0gICAgc2Jfb3V0W2krK10gPSBU TkNfQzJTX1NFVF9TVE9QU0laRTsgICAvKiBTZXQgU3RvcCBCaXRzICovCi0gICAgc2Jfb3V0W2kr K10gPSAwOwotICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAgIC8q IEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAqLwotICAgIHNiX291dFtpKytdID0gKENIQVIpIFNFOyAg ICAgICAgICAgICAgICAgIC8qIG1hcmtlZCBieSBJQUMgU0UgKi8KLQotI2lmZGVmIERFQlVHCi0g ICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7Ci0gICAgICAgIGNrbWFreG1zZyh0 bl9tc2dfb3V0LFROX01TR19MRU4sCi0gICAgICAgICAgICAgICAgICAiVEVMTkVUIFNFTlQgU0Ig IixURUxPUFQoVEVMT1BUX0NPTVBPUlQpLAotICAgICAgICAgICAgICAgICAgIiBTRVQtU1RPUFNJ WkUgIiwgY2tpdG9hKDApLCIgSUFDIFNFIiwgTlVMTCwKLSAgICAgICAgICAgICAgICAgIE5VTEws TlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNp ZmRlZiBPUzIKLSAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsK LSNlbmRpZgotI2lmZGVmIERFQlVHCi0gICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0LCIiLDApOwot ICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKLSNlbmRpZiAv KiBERUJVRyAqLwotICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAwKTsgICAgICAv KiBTZW5kIGl0LiAqLwotI2lmZGVmIE9TMgotICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwotI2Vu ZGlmCi0gICAgaWYgKHJjKQotICAgICAgICByZXR1cm4oLTEpOwotCi0gICAgaWYgKHRuY193YWl0 KChDSEFSICopImNvbXBvcnQgc2V0IHN0b3BzaXplIiwwKSA8IDApIHsKLSAgICAgICAgdG5fcHVz aCgpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJ0bmNfZ2V0 X3N0b3BzaXplIiwiZW5kIix0bmNfc3RvcGJpdCk7Ci0gICAgcmV0dXJuKHRuY19zdG9wYml0KTsK LX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXRuY19zZXRfb2Zsb3coaW50IGNvbnRyb2wpCi0j ZWxzZSAvKiBDS19BTlNJQyAqLwotdG5jX3NldF9vZmxvdyhjb250cm9sKSBpbnQgY29udHJvbDsK LSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogdG5jX3NldF9vZmxvdyAqLyB7Ci0gICAgLyogSUFD IFNCIENPTV9QT1JUIFNFVF9DT05UUk9MIDx2YWx1ZSgxKT4gSUFDIFNFICovCi0gICAgLyogICAg ICAgIFZhbHVlICAgICBGbG93IENvbnRyb2wKLSAgICAgKiAgICAgICAgICAxICAgICAgIE5vIEZs b3cgQ29udHJvbAotICAgICAqICAgICAgICAgIDIgICAgICAgWG9uL1hvZmYKLSAgICAgKiAgICAg ICAgICAzICAgICAgIFJ0cy9DdHMKLSAgICAgKiAgICAgICAgIDE3ICAgICAgIERDRAotICAgICAq ICAgICAgICAgMTkgICAgICAgRFNSCi0gICAgICovCi0gICAgLyogd2FpdCBmb3IgcmVzcG9uc2Us IHJldHVybiBuZXcgaG9zdCB2YWx1ZS4gKi8KLSAgICBpbnQgaSA9IDAsIHJjOwotCi0gICAgZGVi dWcoRjExMSwidG5jX3NldF9vZmxvdyIsImJlZ2luIixjb250cm9sKTsKLSAgICBpZiAodHRuZXQg IT0gTkVUX1RDUEIpIHJldHVybigwKTsKLSAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSBy ZXR1cm4oMCk7Ci0KLSAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHJldHVybigw KTsKLQotI2lmZGVmIENLX1NTTAotICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUyku c3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRp ZiAvKiBDS19TU0wgKi8KLQotICAgIGlmIChjb250cm9sICE9IDEgJiYgY29udHJvbCAhPSAyICYm IGNvbnRyb2wgIT0gMyAmJgotICAgICAgICBjb250cm9sICE9IDE3ICYmIGNvbnRyb2wgIT0gMTkp Ci0gICAgICByZXR1cm4oMCk7Ci0KLSAgICBpZiAoIGNvbnRyb2wgIT0gMCAmJiBjb250cm9sID09 IHRuY19vZmxvdyApCi0gICAgICAgIHJldHVybih0bmNfb2Zsb3cpOwotCi0gICAgc2Jfb3V0W2kr K10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyogSSBBbSBhIENvbW1hbmQgKi8KLSAg ICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTQjsgICAgICAgICAgICAgICAgICAvKiBTdWJuZWdvdGlh dGlvbiAqLwotICAgIHNiX291dFtpKytdID0gVEVMT1BUX0NPTVBPUlQ7ICAgICAgICAgICAgIC8q IENvbVBvcnQgKi8KLSAgICBzYl9vdXRbaSsrXSA9IFROQ19DMlNfU0VUX0NPTlRST0w7ICAgIC8q IFNldCBDb250cm9sICovCi0gICAgc2Jfb3V0W2krK10gPSAodW5zaWduZWQgY2hhcikoY29udHJv bCAmIDB4RkYpOwotICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAg IC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAqLwotICAgIHNiX291dFtpKytdID0gKENIQVIpIFNF OyAgICAgICAgICAgICAgICAgIC8qIG1hcmtlZCBieSBJQUMgU0UgKi8KLQotI2lmZGVmIERFQlVH Ci0gICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7Ci0gICAgICAgIGNrbWFreG1z Zyh0bl9tc2dfb3V0LFROX01TR19MRU4sCi0gICAgICAgICAgICAgICAgICAiVEVMTkVUIFNFTlQg U0IgIixURUxPUFQoVEVMT1BUX0NPTVBPUlQpLAotICAgICAgICAgICAgICAgICAgIiBTRVQtQ09O VFJPTCAiLCBja2l0b2EoY29udHJvbCksIiBJQUMgU0UiLCBOVUxMLAotICAgICAgICAgICAgICAg ICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgIH0KLSNlbmRpZiAvKiBERUJV RyAqLwotI2lmZGVmIE9TMgotICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVf V0FJVCApOwotI2VuZGlmCi0jaWZkZWYgREVCVUcKLSAgICBkZWJ1ZyhGMTAwLHRuX21zZ19vdXQs IiIsMCk7Ci0gICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZ19vdXQpOwot I2VuZGlmIC8qIERFQlVHICovCi0gICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNiX291dCxpKSA8IDAp OyAgICAgIC8qIFNlbmQgaXQuICovCi0jaWZkZWYgT1MyCi0gICAgUmVsZWFzZVRlbG5ldE11dGV4 KCk7Ci0jZW5kaWYKLSAgICBpZiAocmMpCi0gICAgICAgIHJldHVybigtMSk7Ci0KLSAgICBpZiAo dG5jX3dhaXQoKENIQVIgKikiY29tcG9ydCBzZXQgb3V0Ym91bmQgZmxvdyBjb250cm9sIiwwKSA8 IDApIHsKLSAgICAgICAgdG5fcHVzaCgpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAg ICBkZWJ1ZyhGMTExLCJ0bmNfc2V0X29mbG93IiwiZW5kIix0bmNfb2Zsb3cpOwotICAgIHJldHVy bih0bmNfb2Zsb3cpOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotdG5jX2dldF9vZmxvdyh2 b2lkKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLXRuY19nZXRfb2Zsb3coKQotI2VuZGlmIC8qIENL X0FOU0lDICovCi0vKiB0bmNfZ2V0X29mbG93ICovIHsKLSAgICAvKiBJQUMgU0IgQ09NX1BPUlQg U0VUX0NPTlRST0wgPHZhbHVlKDEpPTA+IElBQyBTRSAqLwotICAgIC8qIHdhaXQgZm9yIHJlc3Bv bnNlICovCi0gICAgaW50IGkgPSAwLCByYzsKLQotICAgIGRlYnVnKEYxMTAsInRuY19nZXRfb2Zs b3ciLCJiZWdpbiIsMCk7Ci0gICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSByZXR1cm4oMCk7Ci0g ICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDApOwotCi0gICAgaWYgKCFURUxP UFRfTUUoVEVMT1BUX0NPTVBPUlQpKSByZXR1cm4oMCk7Ci0KLSNpZmRlZiBDS19TU0wKLSAgICBp ZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7Ci0g ICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSAgICBzYl9v dXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBJIEFtIGEgQ29tbWFuZCAq LwotICAgIHNiX291dFtpKytdID0gKENIQVIpIFNCOyAgICAgICAgICAgICAgICAgIC8qIFN1Ym5l Z290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSBURUxPUFRfQ09NUE9SVDsgICAgICAgICAg ICAgLyogQ29tUG9ydCAqLwotICAgIHNiX291dFtpKytdID0gVE5DX0MyU19TRVRfQ09OVFJPTDsg ICAgLyogU2V0IENvbnRyb2wgKi8KLSAgICBzYl9vdXRbaSsrXSA9IFROQ19DVExfT0ZMT1dfUkVR VUVTVDsKLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBF bmQgb2YgU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTRTsgICAg ICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCi0KLSNpZmRlZiBERUJVRwotICAg IGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewotICAgICAgICBja21ha3htc2codG5f bXNnX291dCxUTl9NU0dfTEVOLAotICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICIs VEVMT1BUKFRFTE9QVF9DT01QT1JUKSwKLSAgICAgICAgICAgICAgICAgICIgU0VULUNPTlRST0wg IiwKLSAgICAgICAgICAgICAgICAgICBja2l0b2EoVE5DX0NUTF9PRkxPV19SRVFVRVNUKSwKLSAg ICAgICAgICAgICAgICAgICAiIElBQyBTRSIsIE5VTEwsCi0gICAgICAgICAgICAgICAgICBOVUxM LE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0j aWZkZWYgT1MyCi0gICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7 Ci0jZW5kaWYKLSNpZmRlZiBERUJVRwotICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwiIiwwKTsK LSAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7Ci0jZW5kaWYg LyogREVCVUcgKi8KLSAgICByYyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAg LyogU2VuZCBpdC4gKi8KLSNpZmRlZiBPUzIKLSAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNl bmRpZgotICAgIGlmIChyYykKLSAgICAgICAgcmV0dXJuKC0xKTsKLQotICAgIGlmICh0bmNfd2Fp dCgoQ0hBUiAqKSJjb21wb3J0IGdldCBvdXRib3VuZCBmbG93IGNvbnRyb2wiLDApIDwgMCkgewot ICAgICAgICB0bl9wdXNoKCk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIGRlYnVn KEYxMTEsInRuY19nZXRfb2Zsb3ciLCJlbmQiLHRuY19vZmxvdyk7Ci0gICAgcmV0dXJuKHRuY19v Zmxvdyk7Ci19Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi10bmNfc2V0X2lmbG93KGludCBjb250 cm9sKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLXRuY19zZXRfaWZsb3coY29udHJvbCkgaW50IGNv bnRyb2w7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHRuY19zZXRfaWZsb3cgKi8gewotICAg IC8qIElBQyBTQiBDT01fUE9SVCBTRVRfQ09OVFJPTCA8dmFsdWUoMSk+IElBQyBTRSAqLwotICAg IC8qICAgICAgICBWYWx1ZSAgICAgRmxvdyBDb250cm9sCi0gICAgICogICAgICAgICAxNCAgICAg ICBObyBGbG93IENvbnRyb2wKLSAgICAgKiAgICAgICAgIDE1ICAgICAgIFhvbi9Yb2ZmCi0gICAg ICogICAgICAgICAxNiAgICAgICBSdHMvQ3RzCi0gICAgICogICAgICAgICAxOCAgICAgICBEVFIK LSAgICAgKi8KLSAgICAvKiB3YWl0IGZvciByZXNwb25zZSwgcmV0dXJuIG5ldyBob3N0IHZhbHVl LiAqLwotICAgIGludCBpID0gMCwgcmM7Ci0KLSAgICBkZWJ1ZyhGMTExLCJ0bmNfc2V0X2lmbG93 IiwiYmVnaW4iLGNvbnRyb2wpOwotICAgIGlmICh0dG5ldCAhPSBORVRfVENQQikgcmV0dXJuKDAp OwotICAgIGlmICh0dG5wcm90byAhPSBOUF9URUxORVQpIHJldHVybigwKTsKLQotICAgIGlmICgh VEVMT1BUX01FKFRFTE9QVF9DT01QT1JUKSkgcmV0dXJuKDApOwotCi0jaWZkZWYgQ0tfU1NMCi0g ICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykg ewotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0gICAg aWYgKGNvbnRyb2wgIT0gMTQgJiYgY29udHJvbCAhPSAxNSAmJiBjb250cm9sICE9IDE2ICYmIGNv bnRyb2wgIT0gMTgpCi0gICAgICByZXR1cm4oMCk7Ci0KLSAgICBpZiAoIGNvbnRyb2wgIT0gMCAm JiBjb250cm9sID09IHRuY19pZmxvdyApCi0gICAgICAgIHJldHVybih0bmNfaWZsb3cpOwotCi0g ICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyogSSBBbSBhIENv bW1hbmQgKi8KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTQjsgICAgICAgICAgICAgICAgICAv KiBTdWJuZWdvdGlhdGlvbiAqLwotICAgIHNiX291dFtpKytdID0gVEVMT1BUX0NPTVBPUlQ7ICAg ICAgICAgICAgIC8qIENvbVBvcnQgKi8KLSAgICBzYl9vdXRbaSsrXSA9IFROQ19DMlNfU0VUX0NP TlRST0w7ICAgIC8qIFNldCBDb250cm9sICovCi0gICAgc2Jfb3V0W2krK10gPSAodW5zaWduZWQg Y2hhcikoY29udHJvbCAmIDB4RkYpOwotICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAg ICAgICAgICAgICAgIC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAqLwotICAgIHNiX291dFtpKytd ID0gKENIQVIpIFNFOyAgICAgICAgICAgICAgICAgIC8qIG1hcmtlZCBieSBJQUMgU0UgKi8KLQot I2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7Ci0gICAg ICAgIGNrbWFreG1zZyh0bl9tc2dfb3V0LFROX01TR19MRU4sCi0gICAgICAgICAgICAgICAgICAi VEVMTkVUIFNFTlQgU0IgIixURUxPUFQoVEVMT1BUX0NPTVBPUlQpLAotICAgICAgICAgICAgICAg ICAgIiBTRVQtQ09OVFJPTCAiLCBja2l0b2EoY29udHJvbCksIiBJQUMgU0UiLCBOVUxMLAotICAg ICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgIH0KLSNl bmRpZiAvKiBERUJVRyAqLwotI2lmZGVmIE9TMgotICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VN X0lOREVGSU5JVEVfV0FJVCApOwotI2VuZGlmCi0jaWZkZWYgREVCVUcKLSAgICBkZWJ1ZyhGMTAw LHRuX21zZ19vdXQsIiIsMCk7Ci0gICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRu X21zZ19vdXQpOwotI2VuZGlmIC8qIERFQlVHICovCi0gICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNi X291dCxpKSA8IDApOyAgICAgIC8qIFNlbmQgaXQuICovCi0jaWZkZWYgT1MyCi0gICAgUmVsZWFz ZVRlbG5ldE11dGV4KCk7Ci0jZW5kaWYKLSAgICBpZiAocmMpCi0gICAgICByZXR1cm4oLTEpOwot Ci0gICAgaWYgKHRuY193YWl0KChDSEFSICopImNvbXBvcnQgc2V0IGluYm91bmQgZmxvdyBjb250 cm9sIiwwKSA8IDApIHsKLSAgICAgICAgdG5fcHVzaCgpOwotICAgICAgICByZXR1cm4oLTEpOwot ICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJ0bmNfc2V0X2lmbG93IiwiZW5kIix0bmNfaWZsb3cpOwot ICAgIHJldHVybih0bmNfaWZsb3cpOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotdG5jX2dl dF9pZmxvdyh2b2lkKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLXRuY19nZXRfaWZsb3coKQotI2Vu ZGlmIC8qIENLX0FOU0lDICovCi0vKiB0bmNfZ2V0X2lmbG93ICovIHsKLSAgICAvKiBJQUMgU0Ig Q09NX1BPUlQgU0VUX0NPTlRST0wgPHZhbHVlKDEpPTEzPiBJQUMgU0UgKi8KLSAgICAvKiB3YWl0 IGZvciByZXNwb25zZSAqLwotICAgIGludCBpID0gMCwgcmM7Ci0KLSAgICBkZWJ1ZyhGMTEwLCJ0 bmNfZ2V0X2lmbG93IiwiYmVnaW4iLDApOwotICAgIGlmICh0dG5ldCAhPSBORVRfVENQQikgcmV0 dXJuKDApOwotICAgIGlmICh0dG5wcm90byAhPSBOUF9URUxORVQpIHJldHVybigwKTsKLQotICAg IGlmICghVEVMT1BUX01FKFRFTE9QVF9DT01QT1JUKSkgcmV0dXJuKDApOwotCi0jaWZkZWYgQ0tf U1NMCi0gICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9s bG93cykgewotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwot Ci0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyogSSBBbSBh IENvbW1hbmQgKi8KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTQjsgICAgICAgICAgICAgICAg ICAvKiBTdWJuZWdvdGlhdGlvbiAqLwotICAgIHNiX291dFtpKytdID0gVEVMT1BUX0NPTVBPUlQ7 ICAgICAgICAgICAgIC8qIENvbVBvcnQgKi8KLSAgICBzYl9vdXRbaSsrXSA9IFROQ19DMlNfU0VU X0NPTlRST0w7ICAgIC8qIFNldCBDb250cm9sICovCi0gICAgc2Jfb3V0W2krK10gPSBUTkNfQ1RM X0lGTE9XX1JFUVVFU1Q7Ci0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAg ICAgICAgLyogRW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hB UikgU0U7ICAgICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLwotCi0jaWZkZWYg REVCVUcKLSAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgY2tt YWt4bXNnKHRuX21zZ19vdXQsVE5fTVNHX0xFTiwKLSAgICAgICAgICAgICAgICAgICJURUxORVQg U0VOVCBTQiAiLFRFTE9QVChURUxPUFRfQ09NUE9SVCksCi0gICAgICAgICAgICAgICAgICAiIFNF VC1DT05UUk9MICIsCi0gICAgICAgICAgICAgICAgICBja2l0b2EoVE5DX0NUTF9JRkxPV19SRVFV RVNUKSwKLSAgICAgICAgICAgICAgICAgICIgSUFDIFNFIiwgTlVMTCwKLSAgICAgICAgICAgICAg ICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICB9Ci0jZW5kaWYgLyogREVC VUcgKi8KLSNpZmRlZiBPUzIKLSAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRF X1dBSVQgKTsKLSNlbmRpZgotI2lmZGVmIERFQlVHCi0gICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0 LCIiLDApOwotICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsK LSNlbmRpZiAvKiBERUJVRyAqLwotICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAw KTsgICAgICAvKiBTZW5kIGl0LiAqLwotI2lmZGVmIE9TMgotICAgIFJlbGVhc2VUZWxuZXRNdXRl eCgpOwotI2VuZGlmCi0gICAgaWYgKHJjKQotICAgICAgICByZXR1cm4oLTEpOwotCi0gICAgaWYg KHRuY193YWl0KChDSEFSICopImNvbXBvcnQgZ2V0IGluYm91bmQgZmxvdyBjb250cm9sIiwwKSA8 IDApIHsKLSAgICAgICAgdG5fcHVzaCgpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAg ICBkZWJ1ZyhGMTExLCJ0bmNfZ2V0X2lmbG93IiwiZW5kIix0bmNfaWZsb3cpOwotICAgIHJldHVy bih0bmNfaWZsb3cpOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotdG5jX3NldF9icmVha19z dGF0ZShpbnQgb25vZmYpCi0jZWxzZSAvKiBDS19BTlNJQyAqLwotdG5jX3NldF9icmVha19zdGF0 ZShvbm9mZikgaW50IG9ub2ZmOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB0bmNfc2V0X2Jy ZWFrX3N0YXRlICovIHsKLSAgICAvKiBJQUMgU0IgQ09NX1BPUlQgU0VUX0NPTlRST0wgPHZhbHVl KDEpPiBJQUMgU0UgKi8KLSAgICAvKiAgICAgICAgVmFsdWUgICAgIEJyZWFrIFN0YXRlCi0gICAg ICogICAgICAgICAgNSAgICAgICBPbgotICAgICAqICAgICAgICAgIDYgICAgICAgT2ZmCi0gICAg ICovCi0gICAgLyogd2FpdCBmb3IgcmVzcG9uc2UsIHJldHVybiBuZXcgaG9zdCB2YWx1ZS4gKi8K LSAgICBpbnQgaSA9IDAsIHJjOwotCi0gICAgZGVidWcoRjExMSwidG5jX3NldF9icmVha19zdGF0 ZSIsImJlZ2luIixvbm9mZik7Ci0gICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSByZXR1cm4oMCk7 Ci0gICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDApOwotCi0gICAgaWYgKCFU RUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQpKSByZXR1cm4oMCk7Ci0KLSNpZmRlZiBDS19TU0wKLSAg ICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7 Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSAgICBp ZiAoIG9ub2ZmICE9IDAgJiYgb25vZmYgPT0gdG5jX2JyZWFrICkKLSAgICAgICAgcmV0dXJuKHRu Y19icmVhayk7Ci0KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAg ICAvKiBJIEFtIGEgQ29tbWFuZCAqLwotICAgIHNiX291dFtpKytdID0gKENIQVIpIFNCOyAgICAg ICAgICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSBURUxP UFRfQ09NUE9SVDsgICAgICAgICAgICAgLyogQ29tUG9ydCAqLwotICAgIHNiX291dFtpKytdID0g VE5DX0MyU19TRVRfQ09OVFJPTDsgICAgLyogU2V0IENvbnRyb2wgKi8KLSAgICBzYl9vdXRbaSsr XSA9IG9ub2ZmID8KLSAgICAgIFROQ19DVExfQlJFQUtfT04gOiBUTkNfQ1RMX0JSRUFLX09GRjsK LSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBFbmQgb2Yg U3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTRTsgICAgICAgICAg ICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCi0KLSNpZmRlZiBERUJVRwotICAgIGlmIChk ZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewotICAgICAgICBja21ha3htc2codG5fbXNnX291 dCxUTl9NU0dfTEVOLAotICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICIsVEVMT1BU KFRFTE9QVF9DT01QT1JUKSwKLSAgICAgICAgICAgICAgICAgICIgU0VULUNPTlRST0wgIiwKLSAg ICAgICAgICAgICAgICAgIG9ub2ZmID8gIkJSRUFLLU9OIiA6ICJCUkVBSy1PRkYiLAotICAgICAg ICAgICAgICAgICAgIiBJQUMgU0UiLCBOVUxMLAotICAgICAgICAgICAgICAgICAgTlVMTCxOVUxM LE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotI2lmZGVm IE9TMgotICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwotI2Vu ZGlmCi0jaWZkZWYgREVCVUcKLSAgICBkZWJ1ZyhGMTAwLHRuX21zZ19vdXQsIiIsMCk7Ci0gICAg aWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZ19vdXQpOwotI2VuZGlmIC8qIERF QlVHICovCi0gICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNiX291dCxpKSA8IDApOyAgICAgIC8qIFNl bmQgaXQuICovCi0jaWZkZWYgT1MyCi0gICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7Ci0jZW5kaWYK LSAgICBpZiAocmMpCi0gICAgICAgIHJldHVybigtMSk7Ci0KLSAgICBpZiAodG5jX3dhaXQoKENI QVIgKikiY29tcG9ydCBzZXQgYnJlYWsgc3RhdGUiLDApIDwgMCkgewotICAgICAgICB0bl9wdXNo KCk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsInRuY19zZXRf YnJlYWtfc3RhdGUiLCJlbmQiLHRuY19icmVhayk7Ci0gICAgcmV0dXJuKHRuY19icmVhayk7Ci19 Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi10bmNfZ2V0X2JyZWFrX3N0YXRlKHZvaWQpCi0jZWxz ZSAvKiBDS19BTlNJQyAqLwotdG5jX2dldF9icmVha19zdGF0ZSgpCi0jZW5kaWYgLyogQ0tfQU5T SUMgKi8KLS8qIHRuY19nZXRfYnJlYWtfc3RhdGUgKi8gewotICAgIC8qIElBQyBTQiBDT01fUE9S VCBTRVRfQ09OVFJPTCA8dmFsdWUoMSk9ND4gSUFDIFNFICovCi0gICAgLyogd2FpdCBmb3IgcmVz cG9uc2UgKi8KLSAgICBpbnQgaSA9IDAsIHJjOwotCi0gICAgZGVidWcoRjExMCwidG5jX2dldF9i cmVha19zdGF0ZSIsImJlZ2luIiwwKTsKLSAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVy bigwKTsKLSAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4oMCk7Ci0KLSAgICBp ZiAoIVRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHJldHVybigwKTsKLQotI2lmZGVmIENLX1NT TAotICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxv d3MpIHsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLQot ICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAgIC8qIEkgQW0gYSBD b21tYW5kICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAgICAg LyogU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsrXSA9IFRFTE9QVF9DT01QT1JUOyAg ICAgICAgICAgICAvKiBDb21Qb3J0ICovCi0gICAgc2Jfb3V0W2krK10gPSBUTkNfQzJTX1NFVF9D T05UUk9MOyAgICAvKiBTZXQgQ29udHJvbCAqLwotICAgIHNiX291dFtpKytdID0gVE5DX0NUTF9C UkVBS19SRVFVRVNUOwotICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAg ICAgIC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAqLwotICAgIHNiX291dFtpKytdID0gKENIQVIp IFNFOyAgICAgICAgICAgICAgICAgIC8qIG1hcmtlZCBieSBJQUMgU0UgKi8KLQotI2lmZGVmIERF QlVHCi0gICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7Ci0gICAgICAgIGNrbWFr eG1zZyh0bl9tc2dfb3V0LFROX01TR19MRU4sCi0gICAgICAgICAgICAgICAgICAiVEVMTkVUIFNF TlQgU0IgIixURUxPUFQoVEVMT1BUX0NPTVBPUlQpLAotICAgICAgICAgICAgICAgICAgIiBTRVQt Q09OVFJPTCAiLAotICAgICAgICAgICAgICAgICAgIkJSRUFLLVJFUVVFU1QiLAotICAgICAgICAg ICAgICAgICAgIiBJQUMgU0UiLCBOVUxMLAotICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5V TEwsTlVMTCxOVUxMLE5VTEwpOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotI2lmZGVmIE9T MgotICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwotI2VuZGlm Ci0jaWZkZWYgREVCVUcKLSAgICBkZWJ1ZyhGMTAwLHRuX21zZ19vdXQsIiIsMCk7Ci0gICAgaWYg KHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZ19vdXQpOwotI2VuZGlmIC8qIERFQlVH ICovCi0gICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNiX291dCxpKSA8IDApOyAgICAgIC8qIFNlbmQg aXQuICovCi0jaWZkZWYgT1MyCi0gICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7Ci0jZW5kaWYKLSAg ICBpZiAocmMpCi0gICAgICAgIHJldHVybigtMSk7Ci0KLSAgICBpZiAodG5jX3dhaXQoKENIQVIg KikiY29tcG9ydCBnZXQgYnJlYWsgc3RhdGUiLDApIDwgMCkgewotICAgICAgICB0bl9wdXNoKCk7 Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsInRuY19nZXRfYnJl YWtfc3RhdGUiLCJlbmQiLHRuY19icmVhayk7Ci0gICAgcmV0dXJuKHRuY19icmVhayk7Ci19Ci0K LWludAotI2lmZGVmIENLX0FOU0lDCi10bmNfc2V0X2R0cl9zdGF0ZShpbnQgb25vZmYpCi0jZWxz ZSAvKiBDS19BTlNJQyAqLwotdG5jX3NldF9kdHJfc3RhdGUob25vZmYpIGludCBvbm9mZjsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwotLyogdG5jX3NldF9kdHJfc3RhdGUgKi8gewotICAgIC8qIElB QyBTQiBDT01fUE9SVCBTRVRfQ09OVFJPTCA8dmFsdWUoMSk+IElBQyBTRSAqLwotICAgIC8qICAg ICAgICBWYWx1ZSAgICAgRHRyIFN0YXRlCi0gICAgICogICAgICAgICAgOCAgICAgICBPbgotICAg ICAqICAgICAgICAgIDkgICAgICAgT2ZmCi0gICAgICovCi0gICAgLyogd2FpdCBmb3IgcmVzcG9u c2UsIHJldHVybiBuZXcgaG9zdCB2YWx1ZS4gKi8KLSAgICBpbnQgaSA9IDAsIHJjOwotCi0gICAg ZGVidWcoRjExMSwidG5jX3NldF9kdHJfc3RhdGUiLCJiZWdpbiIsb25vZmYpOwotICAgIGlmICh0 dG5ldCAhPSBORVRfVENQQikgcmV0dXJuKDApOwotICAgIGlmICh0dG5wcm90byAhPSBOUF9URUxO RVQpIHJldHVybigwKTsKLQotICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9DT01QT1JUKSkgcmV0 dXJuKDApOwotCi0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRf VExTKS5zdGFydF90bHMubWVfZm9sbG93cykgewotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQot I2VuZGlmIC8qIENLX1NTTCAqLwotCi0gICAgaWYgKCBvbm9mZiAhPSAwICYmIG9ub2ZmID09IHRu Y19kdHIgKQotICAgICAgICByZXR1cm4odG5jX2R0cik7Ci0KLSAgICBzYl9vdXRbaSsrXSA9IChD SEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBJIEFtIGEgQ29tbWFuZCAqLwotICAgIHNiX291 dFtpKytdID0gKENIQVIpIFNCOyAgICAgICAgICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICov Ci0gICAgc2Jfb3V0W2krK10gPSBURUxPUFRfQ09NUE9SVDsgICAgICAgICAgICAgLyogQ29tUG9y dCAqLwotICAgIHNiX291dFtpKytdID0gVE5DX0MyU19TRVRfQ09OVFJPTDsgICAgLyogU2V0IENv bnRyb2wgKi8KLSAgICBzYl9vdXRbaSsrXSA9IG9ub2ZmID8KLSAgICAgICAgVE5DX0NUTF9EVFJf T04gOiBUTkNfQ1RMX0RUUl9PRkY7Ci0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAg ICAgICAgICAgICAgLyogRW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10g PSAoQ0hBUikgU0U7ICAgICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLwotCi0j aWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAg ICAgY2ttYWt4bXNnKHRuX21zZ19vdXQsVE5fTVNHX0xFTiwKLSAgICAgICAgICAgICAgICAgICJU RUxORVQgU0VOVCBTQiAiLFRFTE9QVChURUxPUFRfQ09NUE9SVCksCi0gICAgICAgICAgICAgICAg ICAiIFNFVC1DT05UUk9MICIsCi0gICAgICAgICAgICAgICAgICBvbm9mZiA/ICJEVFItT04iIDog IkRUUi1PRkYiLAotICAgICAgICAgICAgICAgICAgIiBJQUMgU0UiLCBOVUxMLAotICAgICAgICAg ICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgIH0KLSNlbmRpZiAv KiBERUJVRyAqLwotI2lmZGVmIE9TMgotICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVG SU5JVEVfV0FJVCApOwotI2VuZGlmCi0jaWZkZWYgREVCVUcKLSAgICBkZWJ1ZyhGMTAwLHRuX21z Z19vdXQsIiIsMCk7Ci0gICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZ19v dXQpOwotI2VuZGlmIC8qIERFQlVHICovCi0gICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNiX291dCxp KSA8IDApOyAgICAgIC8qIFNlbmQgaXQuICovCi0jaWZkZWYgT1MyCi0gICAgUmVsZWFzZVRlbG5l dE11dGV4KCk7Ci0jZW5kaWYKLSAgICBpZiAocmMpCi0gICAgICByZXR1cm4oLTEpOwotCi0gICAg aWYgKHRuY193YWl0KChDSEFSICopImNvbXBvcnQgc2V0IGR0ciBzdGF0ZSIsMCkgPCAwKSB7Ci0g ICAgICAgIHRuX3B1c2goKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgZGVidWco RjExMSwidG5jX3NldF9kdHJfc3RhdGUiLCJlbmQiLHRuY19kdHIpOwotICAgIHJldHVybih0bmNf ZHRyKTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXRuY19nZXRfZHRyX3N0YXRlKHZvaWQp Ci0jZWxzZSAvKiBDS19BTlNJQyAqLwotdG5jX2dldF9kdHJfc3RhdGUoKQotI2VuZGlmIC8qIENL X0FOU0lDICovCi0vKiB0bmNfZ2V0X2R0cl9zdGF0ZSAqLyB7Ci0gICAgLyogSUFDIFNCIENPTV9Q T1JUIFNFVF9DT05UUk9MIDx2YWx1ZSgxKT03PiBJQUMgU0UgKi8KLSAgICAvKiB3YWl0IGZvciBy ZXNwb25zZSAqLwotICAgIGludCBpID0gMCwgcmM7Ci0KLSAgICBkZWJ1ZyhGMTEwLCJ0bmNfZ2V0 X2R0cl9zdGF0ZSIsImJlZ2luIiwwKTsKLSAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVy bigwKTsKLSAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4oMCk7Ci0KLSAgICBp ZiAoIVRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHJldHVybigwKTsKLQotI2lmZGVmIENLX1NT TAotICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxv d3MpIHsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLQot ICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAgIC8qIEkgQW0gYSBD b21tYW5kICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAgICAg LyogU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsrXSA9IFRFTE9QVF9DT01QT1JUOyAg ICAgICAgICAgICAvKiBDb21Qb3J0ICovCi0gICAgc2Jfb3V0W2krK10gPSBUTkNfQzJTX1NFVF9D T05UUk9MOyAgICAvKiBTZXQgQ29udHJvbCAqLwotICAgIHNiX291dFtpKytdID0gVE5DX0NUTF9E VFJfUkVRVUVTVDsKLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAg ICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBT RTsgICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCi0KLSNpZmRlZiBERUJV RwotICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewotICAgICAgICBja21ha3ht c2codG5fbXNnX291dCxUTl9NU0dfTEVOLAotICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5U IFNCICIsVEVMT1BUKFRFTE9QVF9DT01QT1JUKSwKLSAgICAgICAgICAgICAgICAgICIgU0VULUNP TlRST0wgIiwKLSAgICAgICAgICAgICAgICAgICJEVFItUkVRVUVTVCIsCi0gICAgICAgICAgICAg ICAgICAiIElBQyBTRSIsIE5VTEwsCi0gICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwsTlVMTCk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0jaWZkZWYgT1MyCi0g ICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Ci0jZW5kaWYKLSNp ZmRlZiBERUJVRwotICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwiIiwwKTsKLSAgICBpZiAodG5f ZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7Ci0jZW5kaWYgLyogREVCVUcgKi8K LSAgICByYyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgLyogU2VuZCBpdC4g Ki8KLSNpZmRlZiBPUzIKLSAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRpZgotICAgIGlm IChyYykKLSAgICAgIHJldHVybigtMSk7Ci0KLSAgICBpZiAodG5jX3dhaXQoKENIQVIgKikiY29t cG9ydCBnZXQgZHRyIHN0YXRlIiwwKSA8IDApIHsKLSAgICAgICAgdG5fcHVzaCgpOwotICAgICAg ICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJ0bmNfZ2V0X2R0cl9zdGF0ZSIs ImVuZCIsdG5jX2R0cik7Ci0gICAgcmV0dXJuKHRuY19kdHIpOwotfQotCi1pbnQKLSNpZmRlZiBD S19BTlNJQwotdG5jX3NldF9ydHNfc3RhdGUoaW50IG9ub2ZmKQotI2Vsc2UgLyogQ0tfQU5TSUMg Ki8KLXRuY19zZXRfcnRzX3N0YXRlKG9ub2ZmKSBpbnQgb25vZmY7Ci0jZW5kaWYgLyogQ0tfQU5T SUMgKi8KLS8qIHRuY19zZXRfcnRzX3N0YXRlICovIHsKLSAgICAvKiBJQUMgU0IgQ09NX1BPUlQg U0VUX0NPTlRST0wgPHZhbHVlKDEpPiBJQUMgU0UgKi8KLSAgICAvKiAgICAgICAgVmFsdWUgICAg IFJ0cyBTdGF0ZQotICAgICAqICAgICAgICAgIDUgICAgICAgT24KLSAgICAgKiAgICAgICAgICA2 ICAgICAgIE9mZgotICAgICAqLwotICAgIC8qIHdhaXQgZm9yIHJlc3BvbnNlLCByZXR1cm4gbmV3 IGhvc3QgdmFsdWUuICovCi0gICAgaW50IGkgPSAwLCByYzsKLQotICAgIGRlYnVnKEYxMTEsInRu Y19zZXRfcnRzX3N0YXRlIiwiYmVnaW4iLG9ub2ZmKTsKLSAgICBpZiAodHRuZXQgIT0gTkVUX1RD UEIpIHJldHVybigwKTsKLSAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4oMCk7 Ci0KLSAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHJldHVybigwKTsKLQotI2lm ZGVmIENLX1NTTAotICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxz Lm1lX2ZvbGxvd3MpIHsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBDS19T U0wgKi8KLQotICAgIGlmICggb25vZmYgIT0gMCAmJiBvbm9mZiA9PSB0bmNfcnRzICkKLSAgICAg ICAgcmV0dXJuKHRuY19ydHMpOwotCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAg ICAgICAgICAgICAgLyogSSBBbSBhIENvbW1hbmQgKi8KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFS KSBTQjsgICAgICAgICAgICAgICAgICAvKiBTdWJuZWdvdGlhdGlvbiAqLwotICAgIHNiX291dFtp KytdID0gVEVMT1BUX0NPTVBPUlQ7ICAgICAgICAgICAgIC8qIENvbVBvcnQgKi8KLSAgICBzYl9v dXRbaSsrXSA9IFROQ19DMlNfU0VUX0NPTlRST0w7ICAgIC8qIFNldCBDb250cm9sICovCi0gICAg c2Jfb3V0W2krK10gPSBvbm9mZiA/Ci0gICAgICBUTkNfQ1RMX1JUU19PTiA6IFROQ19DVExfUlRT X09GRjsKLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBF bmQgb2YgU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTRTsgICAg ICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCi0KLSNpZmRlZiBERUJVRwotICAg IGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewotICAgICAgICBja21ha3htc2codG5f bXNnX291dCxUTl9NU0dfTEVOLAotICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICIs VEVMT1BUKFRFTE9QVF9DT01QT1JUKSwKLSAgICAgICAgICAgICAgICAgICIgU0VULUNPTlRST0wg IiwKLSAgICAgICAgICAgICAgICAgIG9ub2ZmID8gIlJUUy1PTiIgOiAiUlRTLU9GRiIsCi0gICAg ICAgICAgICAgICAgICAiIElBQyBTRSIsIE5VTEwsCi0gICAgICAgICAgICAgICAgICBOVUxMLE5V TEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0jaWZk ZWYgT1MyCi0gICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Ci0j ZW5kaWYKLSNpZmRlZiBERUJVRwotICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwiIiwwKTsKLSAg ICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7Ci0jZW5kaWYgLyog REVCVUcgKi8KLSAgICByYyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgLyog U2VuZCBpdC4gKi8KLSNpZmRlZiBPUzIKLSAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRp ZgotICAgIGlmIChyYykKLSAgICAgIHJldHVybigtMSk7Ci0KLSAgICBpZiAodG5jX3dhaXQoKENI QVIgKikiY29tcG9ydCBzZXQgcnRzIHN0YXRlIiwwKSA8IDApIHsKLSAgICAgICAgdG5fcHVzaCgp OwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJ0bmNfc2V0X3J0 c19zdGF0ZSIsImVuZCIsdG5jX3J0cyk7Ci0gICAgcmV0dXJuKHRuY19ydHMpOwotfQotCi1pbnQK LSNpZmRlZiBDS19BTlNJQwotdG5jX2dldF9ydHNfc3RhdGUodm9pZCkKLSNlbHNlIC8qIENLX0FO U0lDICovCi10bmNfZ2V0X3J0c19zdGF0ZSgpCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHRu Y19nZXRfcnRzX3N0YXRlICovIHsKLSAgICAvKiBJQUMgU0IgQ09NX1BPUlQgU0VUX0NPTlRST0wg PHZhbHVlKDEpPTEwPiBJQUMgU0UgKi8KLSAgICAvKiB3YWl0IGZvciByZXNwb25zZSAqLwotICAg IGludCBpID0gMCwgcmM7Ci0KLSAgICBkZWJ1ZyhGMTEwLCJ0bmNfZ2V0X3J0c19zdGF0ZSIsImJl Z2luIiwwKTsKLSAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVybigwKTsKLSAgICBpZiAo dHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4oMCk7Ci0KLSAgICBpZiAoIVRFTE9QVF9NRShU RUxPUFRfQ09NUE9SVCkpIHJldHVybigwKTsKLQotI2lmZGVmIENLX1NTTAotICAgIGlmIChURUxP UFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKLSAgICAgICAg cmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotICAgIHNiX291dFtpKytd ID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAgIC8qIEkgQW0gYSBDb21tYW5kICovCi0gICAg c2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAgICAgLyogU3VibmVnb3RpYXRp b24gKi8KLSAgICBzYl9vdXRbaSsrXSA9IFRFTE9QVF9DT01QT1JUOyAgICAgICAgICAgICAvKiBD b21Qb3J0ICovCi0gICAgc2Jfb3V0W2krK10gPSBUTkNfQzJTX1NFVF9DT05UUk9MOyAgICAvKiBT ZXQgQ29udHJvbCAqLwotICAgIHNiX291dFtpKytdID0gVE5DX0NUTF9SVFNfUkVRVUVTVDsKLSAg ICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgU3Vi bmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTRTsgICAgICAgICAgICAg ICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCi0KLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJs b2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewotICAgICAgICBja21ha3htc2codG5fbXNnX291dCxU Tl9NU0dfTEVOLAotICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICIsVEVMT1BUKFRF TE9QVF9DT01QT1JUKSwKLSAgICAgICAgICAgICAgICAgICIgU0VULUNPTlRST0wgIiwKLSAgICAg ICAgICAgICAgICAgICJSVFMtUkVRVUVTVCIsCi0gICAgICAgICAgICAgICAgICAiIElBQyBTRSIs IE5VTEwsCi0gICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7 Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0jaWZkZWYgT1MyCi0gICAgUmVxdWVzdFRlbG5l dE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Ci0jZW5kaWYKLSNpZmRlZiBERUJVRwotICAg IGRlYnVnKEYxMDAsdG5fbXNnX291dCwiIiwwKTsKLSAgICBpZiAodG5fZGViIHx8IGRlYnNlcykg dG5fZGVidWcodG5fbXNnX291dCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICByYyA9ICh0dG9s KChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgLyogU2VuZCBpdC4gKi8KLSNpZmRlZiBPUzIK LSAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRpZgotICAgIGlmIChyYykKLSAgICAgICAg cmV0dXJuKC0xKTsKLQotICAgIGlmICh0bmNfd2FpdCgoQ0hBUiAqKSJjb21wb3J0IGdldCBydHMg c3RhdGUiLDApIDwgMCkgewotICAgICAgICB0bl9wdXNoKCk7Ci0gICAgICAgIHJldHVybigtMSk7 Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsInRuY19nZXRfcnRzX3N0YXRlIiwiZW5kIix0bmNfcnRz KTsKLSAgICByZXR1cm4odG5jX3J0cyk7Ci19Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi10bmNf c2V0X2xzX21hc2soaW50IG1hc2spCi0jZWxzZSAvKiBDS19BTlNJQyAqLwotdG5jX3NldF9sc19t YXNrKG1hc2spIGludCBtYXNrOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB0bmNfc2V0X2xz X21hc2sgKi8gewotICAgIC8qIElBQyBTQiBDT01fUE9SVCBTRVRfTElORVNUQVRFX01BU0sgPHZh bHVlKDEpPiBJQUMgU0UgKi8KLSAgICAvKiAgICAgICAgQml0ICAgICAgIE1lYW5pbmcKLSAgICAg KiAgICAgICAgICAwICAgICAgIERhdGEgUmVhZHkKLSAgICAgKiAgICAgICAgICAxICAgICAgIE92 ZXJydW4gRXJyb3IKLSAgICAgKiAgICAgICAgICAyICAgICAgIFBhcml0eSBFcnJvcgotICAgICAq ICAgICAgICAgIDMgICAgICAgRnJhbWluZyBFcnJvcgotICAgICAqICAgICAgICAgIDQgICAgICAg QnJlYWsgRGV0ZWN0IEVycm9yCi0gICAgICogICAgICAgICAgNSAgICAgICBUcmFuc2ZlciBIb2xk aW5nIFJlZ2lzdGVyIEVtcHR5Ci0gICAgICogICAgICAgICAgNiAgICAgICBUcmFuc2ZlciBTaGlm dCBSZWdpc3RlciBFbXB0eQotICAgICAqICAgICAgICAgIDcgICAgICAgVGltZW91dCBFcnJvcgot ICAgICAqLwotICAgIGludCBpID0gMCwgcmM7Ci0KLSAgICBkZWJ1ZyhGMTExLCJ0bmNfc2V0X2xz X21hc2siLCJiZWdpbiIsbWFzayk7Ci0gICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSByZXR1cm4o MCk7Ci0gICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDApOwotCi0gICAgaWYg KCFURUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQpKSByZXR1cm4oMCk7Ci0KLSNpZmRlZiBDS19TU0wK LSAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dz KSB7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSAg ICBpZiAoIG1hc2sgIT0gMCAmJiBtYXNrID09IHRuY19sc19tYXNrICkKLSAgICAgICAgcmV0dXJu KHRuY19sc19tYXNrKTsKLQotICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAg ICAgICAgIC8qIEkgQW0gYSBDb21tYW5kICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7 ICAgICAgICAgICAgICAgICAgLyogU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsrXSA9 IFRFTE9QVF9DT01QT1JUOyAgICAgICAgICAgICAvKiBDb21Qb3J0ICovCi0gICAgc2Jfb3V0W2kr K10gPSBUTkNfQzJTX1NFVF9MU19NQVNLOwotICAgIHNiX291dFtpKytdID0gKHVuc2lnbmVkIGNo YXIpKG1hc2sgJiAweEZGKTsKLSAgICBpZiAoc2Jfb3V0W2ktMV0gPT0gSUFDICkKLSAgICAgIHNi X291dFtpKytdID0gSUFDOwotICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAg ICAgICAgIC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAqLwotICAgIHNiX291dFtpKytdID0gKENI QVIpIFNFOyAgICAgICAgICAgICAgICAgIC8qIG1hcmtlZCBieSBJQUMgU0UgKi8KLQotI2lmZGVm IERFQlVHCi0gICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7Ci0gICAgICAgIGNr bWFreG1zZyh0bl9tc2dfb3V0LFROX01TR19MRU4sCi0gICAgICAgICAgICAgICAgICAiVEVMTkVU IFNFTlQgU0IgIixURUxPUFQoVEVMT1BUX0NPTVBPUlQpLAotICAgICAgICAgICAgICAgICAgIiBT RVQtTElORVNUQVRFLU1BU0sgIiwKLSAgICAgICAgICAgICAgICAgIGNraXRvYShtYXNrICYgMHhG RiksCi0gICAgICAgICAgICAgICAgICAiIElBQyBTRSIsIE5VTEwsCi0gICAgICAgICAgICAgICAg ICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVH ICovCi0jaWZkZWYgT1MyCi0gICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9X QUlUICk7Ci0jZW5kaWYKLSNpZmRlZiBERUJVRwotICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwi IiwwKTsKLSAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7Ci0j ZW5kaWYgLyogREVCVUcgKi8KLSAgICByYyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7 ICAgICAgLyogU2VuZCBpdC4gKi8KLSNpZmRlZiBPUzIKLSAgICBSZWxlYXNlVGVsbmV0TXV0ZXgo KTsKLSNlbmRpZgotICAgIGlmIChyYykKLSAgICAgIHJldHVybigtMSk7Ci0KLSAgICB0bmNfbHNf bWFzayA9IG1hc2s7Ci0gICAgZGVidWcoRjExMSwidG5jX3NldF9sc19tYXNrIiwiZW5kIix0bmNf bHNfbWFzayk7Ci0gICAgcmV0dXJuKDApOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotdG5j X2dldF9sc19tYXNrKHZvaWQpCi0jZWxzZSAvKiBDS19BTlNJQyAqLwotdG5jX2dldF9sc19tYXNr KCkKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogdG5jX2dldF9sc19tYXNrICovIHsKLSAgICBk ZWJ1ZyhGMTAxLCJ0bmNfZ2V0X2xzX21hc2siLCIiLHRuY19sc19tYXNrKTsKLSAgICByZXR1cm4o dG5jX2xzX21hc2spOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotdG5jX2dldF9scyh2b2lk KQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLXRuY19nZXRfbHMoKQotI2VuZGlmIC8qIENLX0FOU0lD ICovCi0vKiB0bmNfZ2V0X2xzICovIHsKLSAgICBpbnQgbHMgPSB0bmNfbHM7Ci0gICAgZGVidWco RjEwMSwidG5jX2dldF9scyIsIiIsdG5jX2xzKTsKLSAgICByZXR1cm4obHMpOwotfQotCi1pbnQK LSNpZmRlZiBDS19BTlNJQwotdG5jX3NldF9tc19tYXNrKGludCBtYXNrKQotI2Vsc2UgLyogQ0tf QU5TSUMgKi8KLXRuY19zZXRfbXNfbWFzayhtYXNrKSBpbnQgbWFzazsKLSNlbmRpZiAvKiBDS19B TlNJQyAqLwotLyogdG5jX3NldF9tc19tYXNrICovIHsKLSAgICAvKiBJQUMgU0IgQ09NX1BPUlQg U0VUX01PREVNU1RBVEVfTUFTSyA8dmFsdWUoMSk+IElBQyBTRSAqLwotICAgIC8qICAgICAgICBC aXQgICAgICAgTWVhbmluZwotICAgICAqICAgICAgICAgIDAgICAgICAgRGVsdGEgQ2xlYXIgVG8g U2VuZAotICAgICAqICAgICAgICAgIDEgICAgICAgRGVsdGEgRGF0YSBTZXQgUmVhZHkKLSAgICAg KiAgICAgICAgICAyICAgICAgIFRyYWlsaW5nIEVkZ2UgUmluZyBEZXRlY3RvcgotICAgICAqICAg ICAgICAgIDMgICAgICAgRGVsdGEgUmVjZWl2ZSBMaW5lIFNpZ25hbCAoQ2FycmllcikgRGV0ZWN0 Ci0gICAgICogICAgICAgICAgNCAgICAgICBDbGVhciBUbyBTZW5kIFNpZ25hbCBTdGF0ZQotICAg ICAqICAgICAgICAgIDUgICAgICAgRGF0YS1TZXQtUmVhZHkgU2lnbmFsIFN0YXRlCi0gICAgICog ICAgICAgICAgNiAgICAgICBSaW5nIEluZGljYXRvcgotICAgICAqICAgICAgICAgIDcgICAgICAg UmVjZWl2ZSBMaW5lIFNpZ25hbCAoQ2FycmllcikgRGV0ZWN0Ci0gICAgICovCi0KLSAgICBpbnQg aSA9IDAsIHJjOwotCi0gICAgZGVidWcoRjExMSwidG5jX3NldF9tc19tYXNrIiwiYmVnaW4iLG1h c2spOwotICAgIGlmICh0dG5ldCAhPSBORVRfVENQQikgcmV0dXJuKDApOwotICAgIGlmICh0dG5w cm90byAhPSBOUF9URUxORVQpIHJldHVybigwKTsKLQotICAgIGlmICghVEVMT1BUX01FKFRFTE9Q VF9DT01QT1JUKSkgcmV0dXJuKDApOwotCi0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKFRFTE9QVF9T QihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykgewotICAgICAgICByZXR1 cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0gICAgaWYgKCBtYXNrICE9IDAg JiYgbWFzayA9PSB0bmNfbXNfbWFzayApCi0gICAgICAgIHJldHVybih0bmNfbXNfbWFzayk7Ci0K LSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBJIEFtIGEg Q29tbWFuZCAqLwotICAgIHNiX291dFtpKytdID0gKENIQVIpIFNCOyAgICAgICAgICAgICAgICAg IC8qIFN1Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSBURUxPUFRfQ09NUE9SVDsg ICAgICAgICAgICAgLyogQ29tUG9ydCAqLwotICAgIHNiX291dFtpKytdID0gVE5DX0MyU19TRVRf TVNfTUFTSzsKLSAgICBzYl9vdXRbaSsrXSA9ICh1bnNpZ25lZCBjaGFyKShtYXNrICYgMHhGRik7 Ci0gICAgaWYgKHNiX291dFtpLTFdID09IElBQyApCi0gICAgICBzYl9vdXRbaSsrXSA9IElBQzsK LSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBFbmQgb2Yg U3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTRTsgICAgICAgICAg ICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCi0KLSNpZmRlZiBERUJVRwotICAgIGlmIChk ZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewotICAgICAgICBja21ha3htc2codG5fbXNnX291 dCxUTl9NU0dfTEVOLAotICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICIsVEVMT1BU KFRFTE9QVF9DT01QT1JUKSwKLSAgICAgICAgICAgICAgICAgICIgU0VULU1PREVNU1RBVEUtTUFT SyAiLAotICAgICAgICAgICAgICAgICAgY2tpdG9hKG1hc2sgJiAweEZGKSwKLSAgICAgICAgICAg ICAgICAgICIgSUFDIFNFIiwgTlVMTCwKLSAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxM LE5VTEwsTlVMTCxOVUxMKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNpZmRlZiBPUzIK LSAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNlbmRpZgot I2lmZGVmIERFQlVHCi0gICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0LCIiLDApOwotICAgIGlmICh0 bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKLSNlbmRpZiAvKiBERUJVRyAq LwotICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAwKTsgICAgICAvKiBTZW5kIGl0 LiAqLwotI2lmZGVmIE9TMgotICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwotI2VuZGlmCi0gICAg aWYgKHJjKQotICAgICAgcmV0dXJuKC0xKTsKLQotICAgIHRuY19tc19tYXNrID0gbWFzazsKLSAg ICBkZWJ1ZyhGMTExLCJ0bmNfc2V0X21zX21hc2siLCJlbmQiLHRuY19tc19tYXNrKTsKLSAgICBy ZXR1cm4oMCk7Ci19Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi10bmNfZ2V0X21zX21hc2sodm9p ZCkKLSNlbHNlIC8qIENLX0FOU0lDICovCi10bmNfZ2V0X21zX21hc2soKQotI2VuZGlmIC8qIENL X0FOU0lDICovCi0vKiB0bmNfZ2V0X21zX21hc2sgKi8gewotICAgIGRlYnVnKEYxMDEsInRuY19n ZXRfZ3NfbWFzayIsIiIsdG5jX21zX21hc2spOwotICAgIHJldHVybih0bmNfbXNfbWFzayk7Ci19 Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi10bmNfZ2V0X21zKHZvaWQpCi0jZWxzZSAvKiBDS19B TlNJQyAqLwotdG5jX2dldF9tcygpCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHRuY19nZXRf bXMgKi8gewotICAgIGludCBtcyA9IHRuY19tczsKLSAgICBkZWJ1ZyhGMTAxLCJ0bmNfZ2V0X21z IiwiIix0bmNfbXMpOwotICAgIHJldHVybihtcyk7Ci19Ci0KLWludAotI2lmZGVmIENLX0FOU0lD Ci10bmNfc2VuZF9wdXJnZV9kYXRhKGludCBtb2RlKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLXRu Y19zZW5kX3B1cmdlX2RhdGEobW9kZSkgaW50IG1vZGU7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8K LS8qIHRuY19zZW5kX3B1cmdlX2RhdGEgKi8gewotICAgIC8qIElBQyBTQiBDT01fUE9SVCBQVVJH RV9EQVRBIDx2YWx1ZSgxKT4gSUFDIFNFICovCi0gICAgLyogICAgICAgIFZhbHVlICAgICBNZWFu aW5nCi0gICAgICogICAgICAgICAgMSAgICAgICBQdXJnZSBhY2Nlc3Mgc2VydmVyIHJlY2VpdmUg ZGF0YSBidWZmZXIKLSAgICAgKiAgICAgICAgICAyICAgICAgIFB1cmdlIGFjY2VzcyBzZXJ2ZXIg dHJhbnNtaXQgZGF0YSBidWZmZXIKLSAgICAgKiAgICAgICAgICAzICAgICAgIFB1cmdlIGFjY2Vz cyBzZXJ2ZXIgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgZGF0YSBidWZmZXJzCi0gICAgICovCi0gICAg LyogTm8gcmVzcG9uc2UgKi8KLSAgICBpbnQgaSA9IDAsIHJjOwotCi0gICAgZGVidWcoRjExMSwi dG5jX3NlbmRfcHVyZ2VfZGF0YSIsImJlZ2luIixtb2RlKTsKLSAgICBpZiAodHRuZXQgIT0gTkVU X1RDUEIpIHJldHVybigwKTsKLSAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4o MCk7Ci0KLSAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHJldHVybigwKTsKLQot I2lmZGVmIENLX1NTTAotICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRf dGxzLm1lX2ZvbGxvd3MpIHsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBD S19TU0wgKi8KLQotICAgIGlmICggIShtb2RlID49IDEgJiYgbW9kZSA8PSAzKSApCi0gICAgICAg IHJldHVybigwKTsKLQotICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAg ICAgIC8qIEkgQW0gYSBDb21tYW5kICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAg ICAgICAgICAgICAgICAgLyogU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsrXSA9IFRF TE9QVF9DT01QT1JUOyAgICAgICAgICAgICAvKiBDb21Qb3J0ICovCi0gICAgc2Jfb3V0W2krK10g PSBUTkNfQzJTX1BVUkdFOwotICAgIHNiX291dFtpKytdID0gKHVuc2lnbmVkIGNoYXIpKG1vZGUg JiAweEZGKTsKLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAv KiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTRTsg ICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCi0KLSNpZmRlZiBERUJVRwot ICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewotICAgICAgICBja21ha3htc2co dG5fbXNnX291dCxUTl9NU0dfTEVOLAotICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNC ICIsVEVMT1BUKFRFTE9QVF9DT01QT1JUKSwKLSAgICAgICAgICAgICAgICAgICIgUFVSR0UtREFU QSAiLAotICAgICAgICAgICAgICAgICAgY2tpdG9hKG1vZGUgJiAweEZGKSwKLSAgICAgICAgICAg ICAgICAgICIgSUFDIFNFIiwgTlVMTCwKLSAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxM LE5VTEwsTlVMTCxOVUxMKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNpZmRlZiBPUzIK LSAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNlbmRpZgot I2lmZGVmIERFQlVHCi0gICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0LCIiLDApOwotICAgIGlmICh0 bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKLSNlbmRpZiAvKiBERUJVRyAq LwotICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAwKTsgICAgICAvKiBTZW5kIGl0 LiAqLwotI2lmZGVmIE9TMgotICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwotI2VuZGlmCi0gICAg aWYgKHJjKQotICAgICAgcmV0dXJuKC0xKTsKLSAgICBkZWJ1ZyhGMTEwLCJ0bmNfc2VuZF9wdXJn ZV9kYXRhIiwiZW5kIiwwKTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLWludAotI2lmZGVmIENLX0FO U0lDCi10bmNfZmxvd19zdXNwZW5kZWQodm9pZCkKLSNlbHNlIC8qIENLX0FOU0lDICovCi10bmNf Zmxvd19zdXNwZW5kZWQoKQotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB0bmNfZmxvd19zdXNw ZW5kZWQgKi8gewotICAgIGRlYnVnKEYxMTEsInRuY19mbG93X3N1c3BlbmRlZCIsIiIsdG5jX3N1 c3BlbmRfeG1pdCk7Ci0gICAgcmV0dXJuKHRuY19zdXNwZW5kX3htaXQpOwotfQotCi1pbnQKLSNp ZmRlZiBDS19BTlNJQwotdG5jX3N1c3BlbmRfZmxvdyh2b2lkKQotI2Vsc2UgLyogQ0tfQU5TSUMg Ki8KLXRuY19zdXNwZW5kX2Zsb3coKQotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB0bmNfc3Vz cGVuZF9mbG93ICovIHsKLSAgICAvKiBJQUMgU0IgQ09NX1BPUlQgRkxPV0NPTlRST0xfU1VTUEVO RCBJQUMgU0UgKi8KLSAgICBpbnQgaSA9IDAsIHJjOwotCi0gICAgZGVidWcoRjExMCwidG5jX3N1 c3BlbmRfZmxvdyIsImJlZ2luIiwwKTsKLSAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVy bigwKTsKLSAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4oMCk7Ci0KLSAgICBp ZiAoIVRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHJldHVybigwKTsKLQotI2lmZGVmIENLX1NT TAotICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxv d3MpIHsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLQot ICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAgIC8qIEkgQW0gYSBD b21tYW5kICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAgICAg LyogU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsrXSA9IFRFTE9QVF9DT01QT1JUOyAg ICAgICAgICAgICAvKiBDb21Qb3J0ICovCi0gICAgc2Jfb3V0W2krK10gPSBUTkNfQzJTX0ZMT1df U1VTUEVORDsKLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAv KiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KLSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTRTsg ICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCi0KLSNpZmRlZiBERUJVRwot ICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewotICAgICAgICBja21ha21zZyh0 bl9tc2dfb3V0LFROX01TR19MRU4sCi0gICAgICAgICAgICAgICAgICJURUxORVQgU0VOVCBTQiAi LFRFTE9QVChURUxPUFRfQ09NUE9SVCksCi0gICAgICAgICAgICAgICAgICIgRkxPV0NPTlRST0wt U1VTUEVORCBJQUMgU0UiLCBOVUxMKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNpZmRl ZiBPUzIKLSAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNl bmRpZgotI2lmZGVmIERFQlVHCi0gICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0LCIiLDApOwotICAg IGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKLSNlbmRpZiAvKiBE RUJVRyAqLwotICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAwKTsgICAgICAvKiBT ZW5kIGl0LiAqLwotI2lmZGVmIE9TMgotICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwotI2VuZGlm Ci0gICAgaWYgKHJjKQotICAgICAgICByZXR1cm4oLTEpOwotICAgIGRlYnVnKEYxMTAsInRuY19z dXNwZW5kX2Zsb3ciLCJlbmQiLDApOwotICAgIHJldHVybigwKTsKLX0KLQotaW50Ci0jaWZkZWYg Q0tfQU5TSUMKLXRuY19yZXN1bWVfZmxvdyh2b2lkKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLXRu Y19yZXN1bWVfZmxvdygpCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHRuY19yZXN1bWVfZmxv dyAqLyB7Ci0gICAgLyogSUFDIFNCIENPTV9QT1JUIEZMT1dDT05UUk9MX1JFU1VNRSBJQUMgU0Ug Ki8KLSAgICBpbnQgaSA9IDAsIHJjOwotCi0gICAgZGVidWcoRjExMCwidG5jX3Jlc3VtZV9mbG93 IiwiYmVnaW4iLDApOwotICAgIGlmICh0dG5ldCAhPSBORVRfVENQQikgcmV0dXJuKDApOwotICAg IGlmICh0dG5wcm90byAhPSBOUF9URUxORVQpIHJldHVybigwKTsKLQotICAgIGlmICghVEVMT1BU X01FKFRFTE9QVF9DT01QT1JUKSkgcmV0dXJuKDApOwotCi0jaWZkZWYgQ0tfU1NMCi0gICAgaWYg KFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykgewotICAg ICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0gICAgc2Jfb3V0 W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyogSSBBbSBhIENvbW1hbmQgKi8K LSAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTQjsgICAgICAgICAgICAgICAgICAvKiBTdWJuZWdv dGlhdGlvbiAqLwotICAgIHNiX291dFtpKytdID0gVEVMT1BUX0NPTVBPUlQ7ICAgICAgICAgICAg IC8qIENvbVBvcnQgKi8KLSAgICBzYl9vdXRbaSsrXSA9IFROQ19DMlNfRkxPV19SRVNVTUU7Ci0g ICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyogRW5kIG9mIFN1 Ym5lZ290aWF0aW9uICovCi0gICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7ICAgICAgICAgICAg ICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLwotCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVi bG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgY2ttYWttc2codG5fbXNnX291dCxU Tl9NU0dfTEVOLAotICAgICAgICAgICAgICAgICAiVEVMTkVUIFNFTlQgU0IgIixURUxPUFQoVEVM T1BUX0NPTVBPUlQpLAotICAgICAgICAgICAgICAgICAiIEZMT1dDT05UUk9MLVJFU1VNRSBJQUMg U0UiLCBOVUxMKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNpZmRlZiBPUzIKLSAgICBS ZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNlbmRpZgotI2lmZGVm IERFQlVHCi0gICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0LCIiLDApOwotICAgIGlmICh0bl9kZWIg fHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKLSNlbmRpZiAvKiBERUJVRyAqLwotICAg IHJjID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAwKTsgICAgICAvKiBTZW5kIGl0LiAqLwot I2lmZGVmIE9TMgotICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwotI2VuZGlmCi0gICAgaWYgKHJj KQotICAgICAgICByZXR1cm4oLTEpOwotICAgIGRlYnVnKEYxMTAsInRuY19yZXN1bWVfZmxvdyIs ImVuZCIsMCk7Ci0gICAgcmV0dXJuKDApOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotdG5z ZXRmbG93KGludCBuZmxvdykKLSNlbHNlCi10bnNldGZsb3cobmZsb3cpIGludCBuZmxvdzsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwotLyogdG5zZXRmbG93ICovIHsKLQotICAgIGludCByYyA9IC0x OwotCi0gICAgZGVidWcoRjExMSwidG5zZXRmbG93IiwiYmVnaW4iLG5mbG93KTsKLSAgICBpZiAo dHRuZXQgIT0gTkVUX1RDUEIgfHwgdHRucHJvdG8gIT0gTlBfVEVMTkVUKQotICAgICAgICByZXR1 cm4oLTEpOwotCi0gICAgaWYgKFRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHsKLSAgICAgICAg c3dpdGNoKG5mbG93KSB7Ci0gICAgICAgICAgY2FzZSBGTE9fWE9OWDoKLSAgICAgICAgICAgIHJj ID0gdG5jX3NldF9vZmxvdygKLSAgICAgICAgICAgICAgICAgVE5DX0NUTF9PRkxPV19YT05fWE9G RgotICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgaWYgKHJjID49IDApCi0gICAgICAg ICAgICAgIHJjID0gdG5jX3NldF9pZmxvdygKLSAgICAgICAgICAgICAgICAgICBUTkNfQ1RMX0lG TE9XX1hPTl9YT0ZGCi0gICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgIGNhc2UgRkxPX1JUU0M6Ci0gICAgICAgICAgICByYyA9IHRuY19zZXRfb2Zsb3co Ci0gICAgICAgICAgICAgICAgIFROQ19DVExfT0ZMT1dfUlRTX0NUUwotICAgICAgICAgICAgICAg ICApOwotICAgICAgICAgICAgaWYgKHJjID49IDApCi0gICAgICAgICAgICAgIHJjID0gdG5jX3Nl dF9pZmxvdygKLSAgICAgICAgICAgICAgICAgICBUTkNfQ1RMX0lGTE9XX1JUU19DVFMKLSAgICAg ICAgICAgICAgICAgICApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBGTE9f S0VFUDoKLSAgICAgICAgICAgIC8qIGxlYXZlIHRoaW5ncyBleGFjdGx5IGFzIHRoZXkgYXJlICov Ci0gICAgICAgICAgICByYyA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNl IEZMT19OT05FOgotICAgICAgICAgIGNhc2UgRkxPX0RJQUw6ICAvKiBkaWFsaW5nIGhhY2sgKi8K LSAgICAgICAgICBjYXNlIEZMT19ESUFYOiAgLyogY2FuY2VsIGRpYWxpbmcgaGFjayAqLwotICAg ICAgICAgICAgcmMgPSB0bmNfc2V0X29mbG93KAotICAgICAgICAgICAgICAgICBUTkNfQ1RMX09G TE9XX05PTkUKLSAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGlmIChyYyA+PSAwKQot ICAgICAgICAgICAgICByYyA9IHRuY19zZXRfaWZsb3coCi0gICAgICAgICAgICAgICAgICAgVE5D X0NUTF9JRkxPV19OT05FCi0gICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgIGNhc2UgRkxPX0RUUkM6Ci0gICAgICAgICAgY2FzZSBGTE9fRVRYQToKLSAg ICAgICAgICBjYXNlIEZMT19TVFJHOgotICAgICAgICAgIGNhc2UgRkxPX0RUUlQ6Ci0gICAgICAg ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIC8qIG5vdCBzdXBwb3J0ZWQgKi8KLSAgICAgICAgICAg IHJjID0gLTE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBkZWJ1 ZyhGMTExLCJ0bnNldGZsb3ciLCJlbmQiLHJjKTsKLSAgICByZXR1cm4ocmMgPj0gMCA/IDAgOiAt MSk7Ci19Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi10bnNldHRpbmdzKGludCBwYXIsIGludCBz dG9wKQotI2Vsc2UKLXRuc2V0dGluZ3MocGFyLCBzdG9wKSBpbnQgcGFyLCBzdG9wOwotI2VuZGlm IC8qIENLX0FOU0lDICovCi0vKiB0bnNldHRpbmdzICovIHsKLSAgICBpbnQgcmMgPSAtMTsKLSAg ICBpbnQgZGF0YXNpemUgPSAwOwotICAgIGV4dGVybiBpbnQgaHdwYXJpdHk7Ci0KLSAgICBkZWJ1 ZyhGMTExLCJ0bnNldHRpbmdzIGJlZ2luIiwicGFyIixwYXIpOwotICAgIGRlYnVnKEYxMTEsInRu c2V0dGluZ3MgYmVnaW4iLCJzdG9wIixzdG9wKTsKLSAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIg fHwgdHRucHJvdG8gIT0gTlBfVEVMTkVUKQotICAgICAgcmV0dXJuKC0xKTsKLQotICAgIGRhdGFz aXplID0gcGFyID8gVE5DX0RTXzcgOiBUTkNfRFNfODsKLSAgICBpZiAoIXBhcikgcGFyID0gaHdw YXJpdHk7Ci0KLSAgICBpZiAoVEVMT1BUX01FKFRFTE9QVF9DT01QT1JUKSkgewotICAgICAgICBz d2l0Y2ggKHBhcikgewotICAgICAgICAgIGNhc2UgJ2UnOgotICAgICAgICAgICAgcmMgPSB0bmNf c2V0X3Bhcml0eShUTkNfUEFSX0VWRU4pOwotICAgICAgICAgICAgaWYgKHJjID49IDApCi0gICAg ICAgICAgICAgIHJjID0gdG5jX3NldF9kYXRhc2l6ZShkYXRhc2l6ZSk7Ci0gICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICBjYXNlICdvJzoKLSAgICAgICAgICAgIHJjID0gdG5jX3NldF9wYXJp dHkoVE5DX1BBUl9PREQpOwotICAgICAgICAgICAgaWYgKHJjID49IDApCi0gICAgICAgICAgICAg IHJjID0gdG5jX3NldF9kYXRhc2l6ZShkYXRhc2l6ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICBjYXNlICdtJzoKLSAgICAgICAgICAgIHJjID0gdG5jX3NldF9wYXJpdHkoVE5DX1BB Ul9NQVJLKTsKLSAgICAgICAgICAgIGlmIChyYyA+PSAwKQotICAgICAgICAgICAgICByYyA9IHRu Y19zZXRfZGF0YXNpemUoZGF0YXNpemUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg Y2FzZSAncyc6Ci0gICAgICAgICAgICByYyA9IHRuY19zZXRfcGFyaXR5KFROQ19QQVJfU1BBQ0Up OwotICAgICAgICAgICAgaWYgKHJjID49IDApCi0gICAgICAgICAgICAgIHJjID0gdG5jX3NldF9k YXRhc2l6ZShkYXRhc2l6ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDA6 Ci0gICAgICAgICAgY2FzZSAnbic6Ci0gICAgICAgICAgICByYyA9IHRuY19zZXRfcGFyaXR5KFRO Q19QQVJfTk9ORSk7Ci0gICAgICAgICAgICBpZiAocmMgPj0gMCkKLSAgICAgICAgICAgICAgcmMg PSB0bmNfc2V0X2RhdGFzaXplKGRhdGFzaXplKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAvKiBubyBjaGFuZ2UgKi8KLSAgICAgICAgICAgIHJj ID0gMDsKLSAgICAgICAgfQotICAgICAgICBzd2l0Y2goc3RvcCkgewotICAgICAgICAgIGNhc2Ug MjoKLSAgICAgICAgICAgIGlmIChyYyA+PSAwKQotICAgICAgICAgICAgICByYyA9IHRuY19zZXRf c3RvcHNpemUoVE5DX1NCXzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAx OgotICAgICAgICAgICAgaWYgKHJjID49IDApCi0gICAgICAgICAgICAgIHJjID0gdG5jX3NldF9z dG9wc2l6ZShUTkNfU0JfMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0 OgotICAgICAgICAgICAgLyogbm8gY2hhbmdlICovCi0gICAgICAgICAgICBpZiAocmMgPj0gMCkK LSAgICAgICAgICAgICAgcmMgPSAwOwotICAgICAgICB9Ci0gICAgfQotICAgIGRlYnVnKEYxMTEs InRuc2V0dGluZ3MiLCJlbmQiLHJjKTsKLSAgICByZXR1cm4oKHJjID49IDApID8gMCA6IC0xKTsK LX0KLQotLyogIFQgTiBHIE0gRCBNICAtLSAgVGVsbmV0IEdldCBtb2RlbSBzaWduYWxzICAqLwot LyoKLSBMb29rcyBmb3IgdGhlIG1vZGVtIHNpZ25hbHMgQ1RTLCBEU1IsIGFuZCBDVFMsIGFuZCBy ZXR1cm5zIHRob3NlIHRoYXQgYXJlCi0gb24gaW4gYXMgaXRzIHJldHVybiB2YWx1ZSwgaW4gYSBi aXQgbWFzayBhcyBkZXNjcmliZWQgZm9yIHR0d21kbS4KLSBSZXR1cm5zOgotICAtMyBOb3QgaW1w bGVtZW50ZWQKLSAgLTIgaWYgdGhlIGxpbmUgZG9lcyBub3QgaGF2ZSBtb2RlbSBjb250cm9sCi0g IC0xIG9uIGVycm9yLgotICA+PSAwIG9uIHN1Y2Nlc3MsIHdpdGggYSBiaXQgbWFzayBjb250YWlu aW5nIHRoZSBtb2RlbSBzaWduYWxzIHRoYXQgYXJlIG9uLgotKi8KLWludAotI2lmZGVmIENLX0FO U0lDCi10bmdtZG0odm9pZCkKLSNlbHNlCi10bmdtZG0oKQotI2VuZGlmIC8qIENLX0FOU0lDICov Ci0vKiB0bmdtZG0gKi8gewotCi0gICAgaW50IHJjID0gLTE7Ci0KLSAgICBkZWJ1ZyhGMTEwLCJ0 bmdtZG0iLCJiZWdpbiIsMCk7Ci0gICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCIHx8IHR0bnByb3Rv ICE9IE5QX1RFTE5FVCkKLSAgICAgIHJldHVybigtMSk7Ci0KLSAgICBpZiAoVEVMT1BUX01FKFRF TE9QVF9DT01QT1JUKSkgewotICAgICAgICBpbnQgbW9kZW1zdGF0ZSA9IHRuY19nZXRfbXMoKTsK LSAgICAgICAgaW50IG1vZGVtID0gMDsKLSAgICAgICAgaWYgKG1vZGVtc3RhdGUgJiBUTkNfTVNf Q1RTX1NJRykKLSAgICAgICAgICBtb2RlbSB8PSBCTV9DVFM7Ci0gICAgICAgIGlmIChtb2RlbXN0 YXRlICYgVE5DX01TX0RTUl9TSUcpCi0gICAgICAgICAgbW9kZW0gfD0gQk1fRFNSOwotICAgICAg ICBpZiAobW9kZW1zdGF0ZSAmIFROQ19NU19SSV9TSUcpCi0gICAgICAgICAgbW9kZW0gfD0gQk1f Uk5HOwotICAgICAgICBpZiAobW9kZW1zdGF0ZSAmIFROQ19NU19STFNEX1NJRykKLSAgICAgICAg ICBtb2RlbSB8PSBCTV9EQ0Q7Ci0gICAgICAgIGRlYnVnKEYxMTEsInRuZ21kbSIsImVuZCIsbW9k ZW0pOwotICAgICAgICByZXR1cm4obW9kZW0pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlYnVn KEYxMTEsInRuZ21kbSIsImVuZCIsLTIpOwotICAgICAgICByZXR1cm4oLTIpOwotICAgIH0KLX0K LQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXRuc25kYihsb25nIHdhaXQpCi0jZWxzZQotdG5zbmRi KHdhaXQpIGxvbmcgd2FpdDsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogdG5zbmRiICovIHsK LSAgICBpbnQgcmMgPSAtMTsKLQotICAgIGRlYnVnKEYxMTEsInRuc25kYiIsImJlZ2luIix3YWl0 KTsKLSAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIgfHwgdHRucHJvdG8gIT0gTlBfVEVMTkVUKQot ICAgICAgcmV0dXJuKC0xKTsKLQotICAgIGlmIChURUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQpKSB7 Ci0gICAgICAgIHJjICA9IHRuY19zZXRfYnJlYWtfc3RhdGUoMSk7Ci0gICAgICAgIGlmIChyYyA+ PSAwKSB7Ci0gICAgICAgICAgICBtc2xlZXAod2FpdCk7ICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFpaWnp6eiAqLwotICAgICAgICAgICAgcmMgPSB0bmNfc2V0X2JyZWFrX3N0YXRlKDApOwot ICAgICAgICB9Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsInRuc25kYiIsImVuZCIscmMpOwotICAg IHJldHVybigocmMgPj0gMCkgPyAwIDogLTEpOwotfQotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8K LSNlbmRpZiAvKiBUTkNPREUgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQv Y2tlcm1pdC05LjAuMzAyL2NrY3RlbC5oIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQt OS4wLjMwMi9ja2N0ZWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQyZTM5Ni4u MDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3Rl bC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMzNiArMCwwIEBACi0vKiBja2N0ZWwuaCAtLSBTeW1i b2wgYW5kIG1hY3JvIGRlZmluaXRpb25zIGZvciBDLUtlcm1pdCB0ZWxuZXQgc3VwcG9ydCAqLwot Ci0vKgotICBBdXRob3JzOiBKZWZmcmV5IEUgQWx0bWFuIDxqYWx0bWFuQHNlY3VyZS1lbmRwb2lu dHMuY29tPiwKLSAgICAgICAgICAgICAgU2VjdXJlIEVuZHBvaW50cyBJbmMuLCBOZXcgWW9yayBD aXR5Ci0gICAgICAgICAgIEZyYW5rIGRhIENydXogPGZkY0Bjb2x1bWJpYS5lZHU+Ci0gIENvbHVt YmlhIFVuaXZlcnNpdHkgQWNhZGVtaWMgSW5mb3JtYXRpb24gU3lzdGVtcywgTmV3IFlvcmsgQ2l0 eS4KLQotICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMDksCi0gICAgVHJ1c3RlZXMgb2YgQ29sdW1i aWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KLSAgICBBbGwgcmlnaHRzIHJl c2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQotICAgIGNv cHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBl cm1pc3Npb25zLgotCi0gIE5vdGVzOgotICAuIFRoaXMgZmlsZSBzaG91bGQgYmUgdXNlZCBpbiBw bGFjZSBvZiAiYXJwYS90ZWxuZXQuaCIKLSAgLiBPbmx5IG9uZSBzb3VyY2UgZmlsZSBzaG91bGQg aW5jbHVkZSAjZGVmaW5lcyBmb3IKLSAgICBURUxDTURTLCBURUxPUFRTLCBURUxPUFRfU1RBVEVT LCBTTENfTkFNRVMsIGFuZCBBVVRIX05BTUVTLgotKi8KLQotI2lmbmRlZiBDS0NURUxfSAotI2Rl ZmluZSBDS0NURUxfSAotI2lmZGVmIFROQ09ERQotLyoKLSAgRGVmaW5pdGlvbnMgZm9yIHRoZSBU RUxORVQgcHJvdG9jb2wuCi0gIGNhbid0IHJlbHkgb24gbGlicmFyeSBoZWFkZXIgZmlsZXMgZm9y IGFueSBvZiB0aGVtLgotKi8KLSNpZmRlZiBDT01NRU5UCi0vKiBJbiBzb21lIGNvbXBpbGVycyB0 aGVzZSBhcmUgcHJvbmUgdG8gc2lnbiBleHRlbnNpb24gKi8KLQotI2lmbmRlZiBJQUMgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpcnN0IHRoZSB0ZWxuZXQgY29tbWFuZHMgKi8KLSNk ZWZpbmUgSUFDIDI1NQotI2VuZGlmIC8qIElBQyAqLwotI2lmbmRlZiBET05UCi0jZGVmaW5lIERP TlQgMjU0Ci0jZW5kaWYgLyogRE9OVCAqLwotI2lmbmRlZiBETwotI2RlZmluZSBETyAyNTMKLSNl bmRpZiAvKiBETyAqLwotI2lmbmRlZiBXT05UCi0jZGVmaW5lIFdPTlQgMjUyCi0jZW5kaWYgLyog V09OVCAqLwotI2lmbmRlZiBXSUxMCi0jZGVmaW5lIFdJTEwgMjUxCi0jZW5kaWYgLyogV0lMTCAq LwotI2lmbmRlZiBTQgotI2RlZmluZSBTQiAyNTAKLSNlbmRpZiAvKiBTQiAqLwotI2lmbmRlZiBU Tl9HQQotI2RlZmluZSBUTl9HQSAyNDkKLSNlbmRpZiAvKiBUTl9HQSAqLwotI2lmbmRlZiBUTl9F TAotI2RlZmluZSBUTl9FTCAyNDgKLSNlbmRpZiAvKiBUTl9FTCAqLwotI2lmbmRlZiBUTl9FQwot I2RlZmluZSBUTl9FQyAyNDcKLSNlbmRpZiAvKiBUTl9FQyAqLwotI2lmbmRlZiBUTl9BWVQKLSNk ZWZpbmUgVE5fQVlUIDI0NgotI2VuZGlmIC8qIFROX0FZVCAqLwotI2lmbmRlZiBUTl9BTwotI2Rl ZmluZSBUTl9BTyAyNDUKLSNlbmRpZiAvKiBUTl9BTyAqLwotI2lmbmRlZiBUTl9JUAotI2RlZmlu ZSBUTl9JUCAyNDQKLSNlbmRpZiAvKiBUTl9JUCAqLwotI2lmbmRlZiBCUkVBSwotI2RlZmluZSBC UkVBSyAyNDMKLSNlbmRpZiAvKiBCUkVBSyAqLwotI2lmbmRlZiBUTl9ETQotI2RlZmluZSBUTl9E TSAyNDIKLSNlbmRpZiAvKiBUTl9ETSAqLwotI2lmbmRlZiBUTl9OT1AKLSNkZWZpbmUgVE5fTk9Q IDI0MQotI2VuZGlmIC8qIFROX05PUCAqLwotI2lmbmRlZiBTRQotI2RlZmluZSBTRSAyNDAKLSNl bmRpZiAvKiBTRSAqLwotI2lmbmRlZiBUTl9FT1IKLSNkZWZpbmUgVE5fRU9SIDIzOQotI2VuZGlm IC8qIFROX0VPUiAqLwotI2lmbmRlZiBUTl9BQk9SVAotI2RlZmluZSBUTl9BQk9SVCAyMzgKLSNl bmRpZiAvKiBUTl9BQk9SVCAqLwotI2lmbmRlZiBUTl9TVVNQCi0jZGVmaW5lIFROX1NVU1AgMjM3 Ci0jZW5kaWYgLyogVE5fU1VTUCAqLwotI2lmbmRlZiBUTl9FT0YKLSNkZWZpbmUgVE5fRU9GIDIz NgotI2VuZGlmIC8qIFROX0VPRiAqLwotI2lmbmRlZiBMQVNUX1ROX0NNRAotI2RlZmluZSBMQVNU X1ROX0NNRCAyMzYKLQotI2RlZmluZSBUTl9TQUsgMjAwICAgICAgICAgICAgICAvKiBJQk0gU2Vj dXJlIEF0dGVudGlvbiBLZXkgKi8KLSNlbmRpZiAvKiBMQVNUX1ROX0NNRCAqLwotI2RlZmluZSBT WU5DSCAgIDI0MiAgICAgICAgICAgICAvKiBmb3IgdGVsZnVuYyBjYWxscyAqLwotCi0jZWxzZQot LyogSGV4IG5vdGF0aW9uIHNlZW1zIHRvIHN1cHByZXNzIHRoZSBzdWduIGV4dGVuc2lvbiBlZmZl Y3QgKi8KLQotCi0jaWZuZGVmIElBQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmly c3QgdGhlIHRlbG5ldCBjb21tYW5kcyAqLwotI2RlZmluZSBJQUMgMHhmZgotI2VuZGlmIC8qIElB QyAqLwotI2lmbmRlZiBET05UCi0jZGVmaW5lIERPTlQgMHhmZQkJCS8qIDI1NCAqLwotI2VuZGlm IC8qIERPTlQgKi8KLSNpZm5kZWYgRE8KLSNkZWZpbmUgRE8gMHhmZAkJCQkvKiAyNTMgKi8KLSNl bmRpZiAvKiBETyAqLwotI2lmbmRlZiBXT05UCi0jZGVmaW5lIFdPTlQgMHhmYwkJCS8qIDI1MiAq LwotI2VuZGlmIC8qIFdPTlQgKi8KLSNpZm5kZWYgV0lMTAotI2RlZmluZSBXSUxMIDB4ZmIJCQkv KiAyNTEgKi8KLSNlbmRpZiAvKiBXSUxMICovCi0jaWZuZGVmIFNCCi0jZGVmaW5lIFNCIDB4ZmEJ CQkJLyogMjUwICovCi0jZW5kaWYgLyogU0IgKi8KLSNpZm5kZWYgVE5fR0EKLSNkZWZpbmUgVE5f R0EgMHhmOQkJCS8qIDI0OSAqLwotI2VuZGlmIC8qIFROX0dBICovCi0jaWZuZGVmIFROX0VMCi0j ZGVmaW5lIFROX0VMIDB4ZjgJCQkvKiAyNDggKi8KLSNlbmRpZiAvKiBUTl9FTCAqLwotI2lmbmRl ZiBUTl9FQwotI2RlZmluZSBUTl9FQyAweGY3CQkJLyogMjQ3ICovCi0jZW5kaWYgLyogVE5fRUMg Ki8KLSNpZm5kZWYgVE5fQVlUCi0jZGVmaW5lIFROX0FZVCAweGY2CQkJLyogMjQ2ICovCi0jZW5k aWYgLyogVE5fQVlUICovCi0jaWZuZGVmIFROX0FPCi0jZGVmaW5lIFROX0FPIDB4ZjUJCQkvKiAy NDUgKi8KLSNlbmRpZiAvKiBUTl9BTyAqLwotI2lmbmRlZiBUTl9JUAotI2RlZmluZSBUTl9JUCAw eGY0CQkJLyogMjQ0ICovCi0jZW5kaWYgLyogVE5fSVAgKi8KLSNpZm5kZWYgQlJFQUsKLSNkZWZp bmUgQlJFQUsgMHhmMwkJCS8qIDI0MyAqLwotI2VuZGlmIC8qIEJSRUFLICovCi0jaWZuZGVmIFRO X0RNCi0jZGVmaW5lIFROX0RNIDB4ZjIJCQkvKiAyNDIgKi8KLSNlbmRpZiAvKiBUTl9ETSAqLwot I2lmbmRlZiBUTl9OT1AKLSNkZWZpbmUgVE5fTk9QIDB4ZjEJCQkvKiAyNDEgKi8KLSNlbmRpZiAv KiBUTl9OT1AgKi8KLSNpZm5kZWYgU0UKLSNkZWZpbmUgU0UgMHhmMAkJCQkvKiAyNDAgKi8KLSNl bmRpZiAvKiBTRSAqLwotI2lmbmRlZiBUTl9FT1IKLSNkZWZpbmUgVE5fRU9SIDB4ZWYJCQkvKiAy MzkgKi8KLSNlbmRpZiAvKiBUTl9FT1IgKi8KLSNpZm5kZWYgVE5fQUJPUlQKLSNkZWZpbmUgVE5f QUJPUlQgMHhlZQkJCS8qIDIzOCAqLwotI2VuZGlmIC8qIFROX0FCT1JUICovCi0jaWZuZGVmIFRO X1NVU1AKLSNkZWZpbmUgVE5fU1VTUCAweGVkCQkJLyogMjM3ICovCi0jZW5kaWYgLyogVE5fU1VT UCAqLwotI2lmbmRlZiBUTl9FT0YKLSNkZWZpbmUgVE5fRU9GIDB4ZWMJCQkvKiAyMzYgKi8KLSNl bmRpZiAvKiBUTl9FT0YgKi8KLSNpZm5kZWYgTEFTVF9UTl9DTUQKLSNkZWZpbmUgTEFTVF9UTl9D TUQgMHhlYwkJLyogMjM2ICovCi0KLSNkZWZpbmUgVE5fU0FLIDB4YzgJCQkvKiAyMDAgLSBJQk0g U2VjdXJlIEF0dGVudGlvbiBLZXkgKi8KLSNlbmRpZiAvKiBMQVNUX1ROX0NNRCAqLwotI2RlZmlu ZSBTWU5DSCAweGYyCQkJLyogMjQyIC0gZm9yIHRlbGZ1bmMgY2FsbHMgKi8KLQotI2VuZGlmCS8q IENPTU1FTlQgKi8KLQotI2lmZGVmIFRFTENNRFMKLWNoYXIgKnRlbGNtZHNbXSA9IHsKLSAgICAg ICAgIkVPRiIsICJTVVNQIiwgIkFCT1JUIiwgIkVPUiIsCi0gICAgICAgICJTRSIsICJOT1AiLCAi RE1BUksiLCAiQlJLIiwgIklQIiwgIkFPIiwgIkFZVCIsICJFQyIsCi0gICAgICAgICJFTCIsICJH QSIsICJTQiIsICJXSUxMIiwgIldPTlQiLCAiRE8iLCAiRE9OVCIsICJJQUMiLCAwCi19OwotI2Vs c2UgLyogVEVMQ01EUyAqLwotZXh0ZXJuIGNoYXIgKnRlbGNtZHNbXTsKLSNlbmRpZiAvKiBURUxD TURTICovCi0KLSNkZWZpbmUgVEVMQ01EX0ZJUlNUICAgIFROX0VPRgotI2RlZmluZSBURUxDTURf TEFTVCAgICAgSUFDCi0jZGVmaW5lIFRFTENNRF9PSyh4KSAgICAoKHVuc2lnbmVkIGludCkoeCkg PD0gVEVMQ01EX0xBU1QgJiYgXAotICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBp bnQpKHgpID49IFRFTENNRF9GSVJTVCB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICh1 bnNpZ25lZCBpbnQpKHgpID09IFROX1NBSykKLSNkZWZpbmUgVEVMQ01EKHgpICAgICAgIChURUxD TURfT0soeCk/ICgoeCkgPT0gVE5fU0FLPyJTQUsiOiBcCi0gICAgICAgICAgICAgICAgICAgICAg ICAgdGVsY21kc1soeCktVEVMQ01EX0ZJUlNUXSk6IlVOS05PV04iKQotCi0vKiBUaGVuIHRoZSBv cHRpb25zICovCi0vKiBOQjogdGhlIGZvbGxvd2luZyBwbGF0Zm9ybXMgaGF2ZSBURUxPUFRfQVVU SEVOVElDQVRJT04gZGVmaW5lZCBhcyAqLwotLyogNDUgaW5zdGVhZCBvZiAzNy4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNpZmRlZiBURUxPUFRf QVVUSEVOVElDQVRJT04KLSNpZmRlZiBfX29zZl9fCi0jdW5kZWYgVEVMT1BUX0FVVEhFTlRJQ0FU SU9OCi0jZW5kaWYgLyogX19vc2ZfXyAqLwotI2lmbmRlZiBJUklYCi0jdW5kZWYgVEVMT1BUX0FV VEhFTlRJQ0FUSU9OCi0jZW5kaWYgLyogSVJJWCAqLwotI2lmbmRlZiB1bHRyaXgKLSN1bmRlZiBU RUxPUFRfQVVUSEVOVElDQVRJT04KLSNlbmRpZiAvKiB1bHRyaXggKi8KLSNlbmRpZiAvKiBURUxP UFRfQVVUSEVOVElDQVRJT04gKi8KLQotLyogdGVsbmV0IG9wdGlvbnMgKi8KLSNpZm5kZWYgVEVM T1BUX0JJTkFSWQotI2RlZmluZSBURUxPUFRfQklOQVJZICAgMCAgICAgICAvKiA4LWJpdCBkYXRh IHBhdGggKFJGQyA4NTYpKi8KLSNlbmRpZgotI2lmbmRlZiBURUxPUFRfRUNITwotI2RlZmluZSBU RUxPUFRfRUNITyAgICAgMSAgICAgICAvKiBlY2hvIChSRkMgODU3KSovCi0jZW5kaWYKLSNpZm5k ZWYgVEVMT1BUX1JDUAotI2RlZmluZSBURUxPUFRfUkNQICAgICAgMiAgICAgICAvKiBwcmVwYXJl IHRvIHJlY29ubmVjdCAoTklDIDUwMDA1KSovCi0jZW5kaWYKLSNpZm5kZWYgVEVMT1BUX1NHQQot I2RlZmluZSBURUxPUFRfU0dBICAgICAgMyAgICAgICAvKiBzdXBwcmVzcyBnbyBhaGVhZCAoUkZD IDg1OCkgKi8KLSNlbmRpZgotI2lmbmRlZiBURUxPUFRfTkFNUwotI2RlZmluZSBURUxPUFRfTkFN UyAgICAgNCAgICAgICAvKiBhcHByb3hpbWF0ZSBtZXNzYWdlIHNpemUgKEVUSEVSTkVUKSAqLwot I2VuZGlmCi0jaWZuZGVmIFRFTE9QVF9TVEFUVVMKLSNkZWZpbmUgVEVMT1BUX1NUQVRVUyAgIDUg ICAgICAgLyogZ2l2ZSBzdGF0dXMgKFJGQyA4NTkpICovCi0jZW5kaWYKLSNpZm5kZWYgVEVMT1BU X1RNCi0jZGVmaW5lIFRFTE9QVF9UTSAgICAgICA2ICAgICAgIC8qIHRpbWluZyBtYXJrIChSRkMg ODYwKSAqLwotI2VuZGlmCi0jaWZuZGVmIFRFTE9QVF9SQ1RFCi0jZGVmaW5lIFRFTE9QVF9SQ1RF ICAgICA3ICAgICAgIC8qIHJlbW90ZSBjb250cm9sbGVkIHRyYW5zbWlzc2lvbiBhbmQgZWNobyAq LwotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAoUkZDIDcyNikgKi8KLSNpZm5k ZWYgVEVMT1BUX05BT0wKLSNkZWZpbmUgVEVMT1BUX05BT0wgICAgIDggICAgICAgLyogbmVnb3Rp YXRlIGFib3V0IG91dHB1dCBsaW5lIHdpZHRoICovCi0jZW5kaWYgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIChOSUMgNTAwMDUpICovCi0jaWZuZGVmIFRFTE9QVF9OQU9QCi0jZGVmaW5lIFRF TE9QVF9OQU9QICAgICA5ICAgICAgIC8qIG5lZ290aWF0ZSBhYm91dCBvdXRwdXQgcGFnZSBzaXpl ICovCi0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChOSUMgNTAwMDUpICovCi0j aWZuZGVmIFRFTE9QVF9OQU9DUkQKLSNkZWZpbmUgVEVMT1BUX05BT0NSRCAgIDEwICAgICAgLyog bmVnb3RpYXRlIGFib3V0IENSIGRpc3Bvc2l0aW9uIChSRkMgNjUyKSAqLwotI2VuZGlmICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBbSGlzdG9yaWNdICovCi0jaWZuZGVmIFRFTE9QVF9OQU9I VFMKLSNkZWZpbmUgVEVMT1BUX05BT0hUUyAgIDExICAgICAgLyogbmVnb3RpYXRlIGFib3V0IGhv cml6b250YWwgdGFic3RvcHMgKi8KLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyog KFJGQyA2NTMpIFtIaXN0b3JpY10gKi8KLSNpZm5kZWYgVEVMT1BUX05BT0hURAotI2RlZmluZSBU RUxPUFRfTkFPSFREICAgMTIgICAgICAvKiBuZWdvdGlhdGUgYWJvdXQgaG9yaXogdGFiIGRpc3Bv c2l0aW9uICovCi0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChSRkMgNjU0KSBb SGlzdG9yaWNdICovCi0jaWZuZGVmIFRFTE9QVF9OQU9GRkQKLSNkZWZpbmUgVEVMT1BUX05BT0ZG RCAgIDEzICAgICAgLyogbmVnb3RpYXRlIGFib3V0IGZvcm1mZWVkIGRpc3Bvc2l0aW9uICovCi0j ZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChSRkMgNjU1KSBbSGlzdG9yaWNdICov Ci0jaWZuZGVmIFRFTE9QVF9OQU9WVFMKLSNkZWZpbmUgVEVMT1BUX05BT1ZUUyAgIDE0ICAgICAg LyogbmVnb3RpYXRlIGFib3V0IHZlcnRpY2FsIHRhYiBzdG9wcyAqLwotI2VuZGlmICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiAoUkZDIDY1NikgW0hpc3RvcmljXSAqLwotI2lmbmRlZiBURUxP UFRfTkFPVlRECi0jZGVmaW5lIFRFTE9QVF9OQU9WVEQgICAxNSAgICAgIC8qIG5lZ290aWF0ZSBh Ym91dCB2ZXJ0aWNhbCB0YWIgZGlzcG9zaXRpb24gKi8KLSNlbmRpZiAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogKFJGQyA2NTcpIFtIaXN0b3JpY10gKi8KLSNpZm5kZWYgVEVMT1BUX05BT0xG RAotI2RlZmluZSBURUxPUFRfTkFPTEZEICAgMTYgICAgICAvKiBuZWdvdGlhdGUgYWJvdXQgb3V0 cHV0IExGIGRpc3Bvc2l0aW9uICovCi0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IChSRkMgNjU4KSBbSGlzdG9yaWNdICovCi0jaWZuZGVmIFRFTE9QVF9YQVNDSUkKLSNkZWZpbmUg VEVMT1BUX1hBU0NJSSAgIDE3ICAgICAgLyogZXh0ZW5kZWQgYXNjaWkgY2hhcmFjdGVyIHNldCAq LwotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAoUkZDIDY5OCkgKi8KLSNpZm5k ZWYgVEVMT1BUX0xPR09VVAotI2RlZmluZSBURUxPUFRfTE9HT1VUICAgMTggICAgICAvKiBmb3Jj ZSBsb2dvdXQgKFJGQyA3MjcpICovCi0jZW5kaWYKLSNpZm5kZWYgVEVMT1BUX0JNCi0jZGVmaW5l IFRFTE9QVF9CTSAgICAgICAxOSAgICAgIC8qIGJ5dGUgbWFjcm8gKFJGQyA3MzUpICovCi0jZW5k aWYKLSNpZm5kZWYgVEVMT1BUX0RFVAotI2RlZmluZSBURUxPUFRfREVUICAgICAgMjAgICAgICAv KiBkYXRhIGVudHJ5IHRlcm1pbmFsIChSRkMgMTA0MywgNzMyKSAqLwotI2VuZGlmCi0jaWZuZGVm IFRFTE9QVF9TVVBEVVAKLSNkZWZpbmUgVEVMT1BUX1NVUERVUCAgIDIxICAgICAgLyogc3VwZHVw IHByb3RvY29sIChSRkMgNzM2LCA3MzQpICovCi0jZW5kaWYKLSNpZm5kZWYgVEVMT1BUX1NVUERV UE9VVFBVVAotI2RlZmluZSBURUxPUFRfU1VQRFVQT1VUUFVUIDIyICAvKiBzdXBkdXAgb3V0cHV0 IChSRkMgNzQ5KSAqLwotI2VuZGlmCi0jaWZuZGVmIFRFTE9QVF9TTkRMT0MKLSNkZWZpbmUgVEVM T1BUX1NORExPQyAgIDIzICAgICAgLyogc2VuZCBsb2NhdGlvbiAoUkZDIDc3OSkgKi8KLSNlbmRp ZgotI2lmbmRlZiBURUxPUFRfVFRZUEUKLSNkZWZpbmUgVEVMT1BUX1RUWVBFICAgIDI0ICAgICAg LyogdGVybWluYWwgdHlwZSAoUkZDIDEwOTEpICovCi0jZW5kaWYKLSNpZm5kZWYgVEVMT1BUX0VP UgotI2RlZmluZSBURUxPUFRfRU9SICAgICAgMjUgICAgICAvKiBlbmQgb2YgcmVjb3JkIChSRkMg ODg1KSAqLwotI2VuZGlmCi0jaWZuZGVmIFRFTE9QVF9UVUlECi0jZGVmaW5lIFRFTE9QVF9UVUlE ICAgICAyNiAgICAgIC8qIFRBQ0FDUyB1c2VyIGlkZW50aWZpY2F0aW9uIChSRkMgOTI3KSAqLwot I2VuZGlmCi0jaWZuZGVmIFRFTE9QVF9PVVRNUksKLSNkZWZpbmUgVEVMT1BUX09VVE1SSyAgIDI3 ICAgICAgLyogb3V0cHV0IG1hcmtpbmcgKFJGQyA5MzMpICovCi0jZW5kaWYKLSNpZm5kZWYgVEVM T1BUX1RUWUxPQwotI2RlZmluZSBURUxPUFRfVFRZTE9DICAgMjggICAgICAvKiB0ZXJtaW5hbCBs b2NhdGlvbiBudW1iZXIgKFJGQyA5NDYpICovCi0jZW5kaWYKLSNpZm5kZWYgVEVMT1BUXzMyNzBS RUdJTUUKLSNkZWZpbmUgVEVMT1BUXzMyNzBSRUdJTUUgMjkgICAgLyogMzI3MCByZWdpbWUgKFJG QyAxMDQxKSAqLwotI2VuZGlmCi0jaWZuZGVmIFRFTE9QVF9YM1BBRAotI2RlZmluZSBURUxPUFRf WDNQQUQgICAgMzAgICAgICAvKiBYLjMgUEFEIChSRkMgMTA1MykgKi8KLSNlbmRpZgotI2lmbmRl ZiBURUxPUFRfTkFXUwotI2RlZmluZSBURUxPUFRfTkFXUyAgICAgMzEgICAgICAvKiB3aW5kb3cg c2l6ZSAoUkZDIDEwNzMpICovCi0jZW5kaWYKLSNpZm5kZWYgVEVMT1BUX1RTUEVFRAotI2RlZmlu ZSBURUxPUFRfVFNQRUVEICAgMzIgICAgICAvKiB0ZXJtaW5hbCBzcGVlZCAoUkZDIDEwNzkpICov Ci0jZW5kaWYKLSNpZm5kZWYgVEVMT1BUX0xGTE9XCi0jZGVmaW5lIFRFTE9QVF9MRkxPVyAgICAz MyAgICAgIC8qIHJlbW90ZSBmbG93IGNvbnRyb2wgKFJGQyAxMzcyKSAqLwotI2VuZGlmCi0jaWZu ZGVmIFRFTE9QVF9MSU5FTU9ERQotI2RlZmluZSBURUxPUFRfTElORU1PREUgMzQgICAgICAvKiBM aW5lbW9kZSBvcHRpb24gKFJGQyAxMTg0KSAqLwotI2VuZGlmCi0jaWZuZGVmIFRFTE9QVF9YRElT UExPQwotI2RlZmluZSBURUxPUFRfWERJU1BMT0MgMzUgICAgICAvKiBYIERpc3BsYXkgTG9jYXRp b24gKFJGQyAxMDk2KSAqLwotI2VuZGlmCi0jaWZuZGVmIFRFTE9QVF9PTERfRU5WSVJPTgotI2Rl ZmluZSBURUxPUFRfT0xEX0VOVklST04gMzYgICAvKiBPbGQgLSBFbnZpcm9ubWVudCB2YXJpYWJs ZXMgKFJGQyAxNDA4KSAqLwotI2VuZGlmCi0jaWZuZGVmIFRFTE9QVF9BVVRIRU5USUNBVElPTgot I2RlZmluZSBURUxPUFRfQVVUSEVOVElDQVRJT04gMzcvKiBBdXRoZW50aWNhdGUgKFJGQyAyOTQx KSAqLwotI2VuZGlmCi0jaWZuZGVmIFRFTE9QVF9FTkNSWVBUSU9OCi0jZGVmaW5lIFRFTE9QVF9F TkNSWVBUSU9OIDM4ICAgIC8qIEVuY3J5cHRpb24gb3B0aW9uIChSRkMgMjk0NikgKi8KLSNlbmRp ZgotI2lmbmRlZiBURUxPUFRfTkVXRU5WSVJPTgotI2RlZmluZSBURUxPUFRfTkVXRU5WSVJPTiAz OSAgICAvKiBOZXcgLSBFbnZpcm9ubWVudCB2YXJpYWJsZXMgKFJGQyAxNTcyKSAqLwotI2VuZGlm Ci0jaWZuZGVmIFRFTE9QVF8zMjcwRQotI2RlZmluZSBURUxPUFRfMzI3MEUgICAgNDAgICAgICAv KiAzMjcwIEV4dGVuZGVkIChSRkMgMTY0NykgKi8KLSNlbmRpZgotI2lmbmRlZiBURUxPUFRfWEFV VEgKLSNkZWZpbmUgVEVMT1BUX1hBVVRIICAgIDQxICAgICAgLyogPz8/IChFYXJoYXJ0KSAqLwot I2VuZGlmCi0jaWZuZGVmIFRFTE9QVF9DSEFSU0VUCi0jZGVmaW5lIFRFTE9QVF9DSEFSU0VUICA0 MiAgICAgIC8qIENoYXJhY3Rlci1zZXQgKFJGQyAyMDY2KSAqLwotI2VuZGlmCi0jaWZuZGVmIFRF TE9QVF9SU1AKLSNkZWZpbmUgVEVMT1BUX1JTUCAgICAgIDQzICAgICAgLyogUmVtb3RlIFNlcmlh bCBQb3J0IChCYXJuZXMpICovCi0jZW5kaWYKLSNpZm5kZWYgVEVMT1BUX0NPTVBPUlQKLSNkZWZp bmUgVEVMT1BUX0NPTVBPUlQgIDQ0ICAgICAgLyogQ29tIFBvcnQgQ29udHJvbCAoUkZDIDIyMTcp ICovCi0jZW5kaWYKLSNpZm5kZWYgVEVMT1BUX1NMRQotI2RlZmluZSBURUxPUFRfU0xFICAgICAg NDUgICAgICAvKiBTdXBwcmVzcyBMb2NhbCBFY2hvIChBdG1hcikgLSBbcmVqZWN0ZWRdICovCi0j ZW5kaWYKLSNpZm5kZWYgVEVMT1BUX1NUQVJUX1RMUwotI2RlZmluZSBURUxPUFRfU1RBUlRfVExT IDQ2ICAgICAvKiBUZWxuZXQgb3ZlciBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKi8KLSNlbmRp ZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKEJvZSkgKi8KLSNpZm5kZWYgVEVMT1BUX0tF Uk1JVAotI2RlZmluZSBURUxPUFRfS0VSTUlUICAgNDcgICAgICAvKiBLZXJtaXQgKFJGQyAyODQw KSAqLwotI2VuZGlmCi0jaWZuZGVmIFRFTE9QVF9TRU5EX1VSTAotI2RlZmluZSBURUxPUFRfU0VO RF9VUkwgNDggICAgICAvKiBTZW5kIFVSTCAqLwotI2VuZGlmCi0KLSNpZm5kZWYgVEVMT1BUX0ZP UldBUkRfWAotI2RlZmluZSBURUxPUFRfRk9SV0FSRF9YIDQ5ICAgICAvKiBYIFdpbmRvd3MgRm9y d2FyZGluZyAoQWx0bWFuKSAqLwotI2VuZGlmIC8qIFRFTE9QVF9GT1JXQVJEX1ggKi8KLQotI2lm bmRlZiBURUxPUFRfU1RERVJSCi0jZGVmaW5lIFRFTE9QVF9TVERFUlIgICAgNTAgICAgLyogUmVk aXJlY3RlZCBTdGRlcnIgKEFsdG1hbikgKi8KLSNlbmRpZiAvKiBURUxPUFRfU1RERVJSICovCi0K LSNpZm5kZWYgVEVMT1BUX1BSQUdNQV9MT0dPTgotI2RlZmluZSBURUxPUFRfUFJBR01BX0xPR09O IDEzOCAvKiBFbmNyeXB0ZWQgTG9nb24gb3B0aW9uIChQcmFnbWFTeXMpICovCi0jZW5kaWYKLSNp Zm5kZWYgVEVMT1BUX1NTUElfTE9HT04KLSNkZWZpbmUgVEVMT1BUX1NTUElfTE9HT04gMTM5ICAg LyogTVMgU1NQSSBMb2dvbiBvcHRpb24gKFByYWdtYVN5cykgKi8KLSNlbmRpZgotI2lmbmRlZiBU RUxPUFRfUFJBR01BX0hFQVJUQkVBVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBTZXJ2ZXIgU2VuZCBIZWFydGJlYXQgb3B0aW9uIChQcmFnbWFTeXMpICovCi0jZGVmaW5lIFRF TE9QVF9QUkFHTUFfSEVBUlRCRUFUIDE0MAotI2VuZGlmCi0KLSNkZWZpbmUgVEVMT1BUX0lCTV9T QUsgMjAwICAgICAgLyogSUJNIFNlY3VyZSBBdHRlbnRpb24gS2V5ICovCi0KLS8qCi0gIElCTSBT ZWN1cmUgQXR0ZW50aW9uIEtleSAoU0FLKSBPcHRpb24KLQotICBJbiBhZGRpdGlvbiB0byB0ZXJt aW5hbCBuZWdvdGlhdGlvbiwgdGhlIHRlbG5ldCBjb21tYW5kIGFsbG93cwotICBuZWdvdGlhdGlv biBmb3IgdGhlIFNlY3VyZSBBdHRlbnRpb24gS2V5IChTQUspCi0gIG9wdGlvbi4gVGhpcyBvcHRp b24sIHdoZW4gc3VwcG9ydGVkLCBwcm92aWRlcyB0aGUgbG9jYWwgdXNlciB3aXRoCi0gIGEgc2Vj dXJlIGNvbW11bmljYXRpb24gcGF0aCB0byB0aGUgcmVtb3RlCi0gIGhvc3QgZm9yIHRhc2tzIHN1 Y2ggYXMgY2hhbmdpbmcgdXNlciBJRHMgb3IgcGFzc3dvcmRzLiBJZiB0aGUgcmVtb3RlCi0gIGhv c3Qgc3VwcG9ydHMgdGhlIFNBSyBmdW5jdGlvbiwgYSB0cnVzdGVkCi0gIHNoZWxsIGlzIG9wZW5l ZCBvbiB0aGUgcmVtb3RlIGhvc3Qgd2hlbiB0aGUgdGVsbmV0IHNlbmQgc2FrCi0gIHN1YmNvbW1h bmQgaXMgaXNzdWVkLiBUaGUgU0FLIGZ1bmN0aW9uIGNhbgotICBhbHNvIGJlIGFzc2lnbmVkIHRv IGEgc2luZ2xlIGtleSBhdmFpbGFibGUgaW4gdGVsbmV0IGlucHV0IG1vZGUsCi0gIHVzaW5nIHRo ZSBzZXQgc2FrIHN1YmNvbW1hbmQuCi0KLSAgVE5fU0FLCi0KLSAgU2VuZHMgdGhlIFRFTE5FVCBT QUsgKFNlY3VyZSBBdHRlbnRpb24gS2V5KSBzZXF1ZW5jZSwgd2hpY2ggY2F1c2VzCi0gIHRoZSBy ZW1vdGUgc3lzdGVtIHRvIGludm9rZSB0aGUgdHJ1c3RlZCBzaGVsbC4gSWYgdGhlIFNBSyBpcyBu b3QKLSAgc3VwcG9ydGVkLCB0aGVuIGFuIGVycm9yIG1lc3NhZ2UgaXMgZGlzcGxheWVkIHRoYXQg cmVhZHM6Ci0gICAgUmVtb3RlIHNpZGUgZG9lcyBub3Qgc3VwcG9ydCBTQUsuCi0qLwotCi0jaWZu ZGVmIFRFTE9QVF9FWE9QTAotI2RlZmluZSBURUxPUFRfRVhPUEwgICAgMjU1ICAgICAvKiBFeHRl bmRlZC1vcHRpb25zLWxpc3QgKFJGQyA4NjEpICovCi0jZW5kaWYKLQotI2lmZGVmIE5URUxPUFRT Ci0jdW5kZWYgTlRFTE9QVFMKLSNlbmRpZiAvKiBOVEVMT1BUUyAqLwotLyogVGhlIFRlbG5ldCBP cHRpb24gc3BhY2UgaXMgbm8gbG9uZ2VyIGJlaW5nIGFsbG9jYXRlZCBieSBJQ0FOTiBhcyBhICov Ci0vKiBjb250aW51b3VzIGxpc3QuICBJbiBvdGhlciB3b3JkcyBpdCBpcyBiZWNvbWluZyBzcGFy c2UuICBCdXQgd2UgZG8gKi8KLS8qIG5vdCB3YW50IHRvIGhhdmUgdG8gYWxsb2NhdGUgbWVtb3J5 IGZvciBhIGxvbmcgbGlzdCBvZiBzdHJpbmdzIGFuZCAqLwotLyogc3RydWN0cyB3aGljaCB3aWxs IG5ldmVyIGJlIHVzZWQuICBUaGVyZWZvcmUsIHRoZSBOVEVMT1BUUyBkZWZpbmUgICovCi0vKiBj YW4gbm8gbG9uZ2VyIGJlIGVxdWFsIHRvIFRFTE9QVF9MQVNUKzEuICBJbiBmYWN0LCB0aGUgbm90 aW9uIG9mICAgKi8KLS8qIFRFTE9QVF9GSVJTVCBhbmQgVEVMT1BUX0xBU1Qgbm8gbG9uZ2VyIG1h a2Ugc2Vuc2UuICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBOVEVMT1BUUyAgICAgICAgNTUK LQotI2RlZmluZSBURUxPUFRfRklSU1QgICAgIFRFTE9QVF9CSU5BUlkKLSNkZWZpbmUgVEVMT1BU X0xBU1QgICAgICBURUxPUFRfSUJNX1NBSwotCi0vKgotICBUaGUgZm9sbG93aW5nIG1hY3JvcyBz cGVlZCB1cyB1cCBhdCBydW50aW1lIGJ1dCBhcmUgdG9vIGNvbXBsZXgKLSAgZm9yIHNvbWUgcHJl cHJvY2Vzc29ycyAvIGNvbXBpbGVyczsgaWYgeW91ciBjb21waWxlciBib21icyBvbiBja2N0ZWwu YwotICB3aXRoICJJbnN0cnVjdGlvbiB0YWJsZSBvdmVyZmxvdyIgb3Igc29tZXN1Y2gsIHJlYnVp bGQgd2l0aCAtRE5PVE9NQUNST1MuCi0qLwotI2lmbmRlZiBOT1RPTUFDUk9TCi0jaWZuZGVmIFRF TE9QVF9NQUNSTwotI2RlZmluZSBURUxPUFRfTUFDUk8KLSNlbmRpZiAvKiBURUxPUFRfTUFDUk8g Ki8KLSNlbmRpZiAvKiBOT1RPTUFDUk9TICovCi0KLSNpZmRlZiBURUxPUFRfTUFDUk8KLSNkZWZp bmUgVEVMT1BUX0lOREVYKHgpICgoKHgpPj0wICYmICh4KTw9IFRFTE9QVF9TVERFUlIpPyh4KTpc Ci0gICAgICAgICgoeCk+PVRFTE9QVF9QUkFHTUFfTE9HT04gJiYgKHgpPD1URUxPUFRfUFJBR01B X0hFQVJUQkVBVCk/KHgpLTg3OiBcCi0gICAgICAgICgoeCkgPT0gVEVMT1BUX0lCTV9TQUspPyh4 KS0xNDY6IE5URUxPUFRTKQotCi0jZGVmaW5lIFRFTE9QVF9PSyh4KSAgICAoKCh4KSA+PSBURUxP UFRfQklOQVJZICYmICh4KSA8PSBURUxPUFRfU1RERVJSKSB8fFwKLSAgICAgICAgICAgICAoKHgp ID49IFRFTE9QVF9QUkFHTUFfTE9HT04gJiYgKHgpIDw9IFRFTE9QVF9QUkFHTUFfSEVBUlRCRUFU KSB8fFwKLSAgICAgICAgICAgICAoKHgpID09IFRFTE9QVF9JQk1fU0FLKSkKLSNkZWZpbmUgVEVM T1BUKHgpICAgICAgIChURUxPUFRfT0soeCk/dGVsb3B0c1tURUxPUFRfSU5ERVgoeCldOiJVTktO T1dOIikKLSNlbHNlIC8qIFRFTE9QVF9NQUNSTyAqLwotX1BST1RPVFlQKGludCB0ZWxvcHRfaW5k ZXgsKGludCkpOwotX1BST1RPVFlQKGludCB0ZWxvcHRfb2ssKGludCkpOwotX1BST1RPVFlQKENI QVIgKiB0ZWxvcHQsIChpbnQpKTsKLQotI2RlZmluZSBURUxPUFRfSU5ERVgoeCkgdGVsb3B0X2lu ZGV4KHgpCi0jZGVmaW5lIFRFTE9QVF9PSyh4KSAgICB0ZWxvcHRfb2soeCkKLSNkZWZpbmUgVEVM T1BUKHgpICAgICAgIHRlbG9wdCh4KQotI2VuZGlmIC8qIFRFTE9QVF9NQUNSTyAqLwotCi0jaWZk ZWYgVEVMT1BUUwotY2hhciAqdGVsb3B0c1tOVEVMT1BUUysyXSA9IHsKLS8qICAgMCAqLyAiQklO QVJZIiwgICAiRUNITyIsICAgICAgICAgIlJDUCIsICAiU1VQUFJFU1MtR08tQUhFQUQiLAotLyog ICA0ICovICJOQU1FIiwgICAiU1RBVFVTIiwgIlRJTUlORy1NQVJLIiwgIlJDVEUiLAotLyogICA4 ICovICJOQU9MIiwgIk5BT1AiLCAgIk5BT0NSRCIsICJOQU9IVFMiLAotLyogIDEyICovICJOQU9I VEQiLCAiTkFPRkZEIiwgIk5BT1ZUUyIsICAiTkFPVlREIiwKLS8qICAxNiAqLyAiTkFPTEZEIiwg IkVYVEVORC1BU0NJSSIsICJMT0dPVVQiLCAiQllURS1NQUNSTyIsCi0vKiAgMjAgKi8gIkRBVEEt RU5UUlktVEVSTUlOQUwiLCAiU1VQRFVQIiwgIlNVUERVUC1PVVRQVVQiLCAgIlNFTkQtTE9DQVRJ T04iLAotLyogIDI0ICovICJURVJNSU5BTC1UWVBFIiwgICJFTkQtT0YtUkVDT1JEIiwgIlRBQ0FD Uy1VSUQiLCAiT1VUUFVULU1BUktJTkciLAotLyogIDI4ICovICJUVFlMT0MiLCAiMzI3MC1SRUdJ TUUiLCAiWC4zLVBBRCIsICJOQVdTIiwKLS8qICAzMiAqLyAiVFNQRUVEIiwgIkxGTE9XIiwgIkxJ TkVNT0RFIiwgIlhESVNQTE9DIiwKLS8qICAzNiAqLyAiT0xELUVOVklST04iLCAiQVVUSEVOVElD QVRJT04iLCAiRU5DUllQVElPTiIsICJORVctRU5WSVJPTk1FTlQiLAotLyogIDQwICovICJUTjMy NzBFIiwieGF1dGgiLCJDSEFSU0VUIiwgInJlbW90ZS1zZXJpYWwtcG9ydCIsCi0vKiAgNDQgKi8g IkNPTS1QT1JULUNPTlRST0wiLCJzdXBwcmVzcy1sb2NhbC1lY2hvIiwiU1RBUlQtVExTIiwiS0VS TUlUIiwKLS8qICA0OCAqLyAic2VuZC11cmwiLCJGT1JXQVJELVgiLCJzdGRlcnIiLAotLyogMTM4 ICovICJwcmFnbWEtbG9nb24iLCAic3NwaS1sb2dvbiIsICJwcmFnbWEtaGVhcnRiZWF0IiwKLS8q IDIwMCAqLyAiaWJtLXNhayIsCi0gICAgICAgICAgInVua25vd24iLAotICAgICAgICAwCi19Owot I2Vsc2UgLypURUxPUFRTICovCi1leHRlcm4gY2hhciAqIHRlbG9wdHNbXTsKLSNlbmRpZiAvKiBU RUxPUFRTICovCi0KLS8qIFRFTE5FVCBOZXdsaW5lIE1vZGUgKi8KLQotI2RlZmluZSBUTkxfQ1Ig ICAgIDAgICAgICAgICAgICAgICAgICAgIC8qIENSIHNlbmRzIGJhcmUgY2FycmlhZ2UgcmV0dXJu ICovCi0jZGVmaW5lIFROTF9DUk5VTCAgMSAgICAgICAgICAgICAgICAgICAgLyogQ1IgYW5kIE5V TCAqLwotI2RlZmluZSBUTkxfQ1JMRiAgIDIgICAgICAgICAgICAgICAgICAgIC8qIENSIGFuZCBM RiAqLwotI2RlZmluZSBUTkxfTEYgICAgIDMgICAgICAgICAgICAgICAgICAgIC8qIExGIGluc3Rl YWQgb2YgQ1IgKi8KLQotLyogVEVMTkVUIE5lZ290aWF0aW9uIE1vZGUgKi8KLQotI2RlZmluZSAg ICBUTl9OR19SRiAgMCAgICAgICAgICAgICAgICAgIC8qICBOZWdvdGlhdGlvbiBSRUZVU0VEICov Ci0jZGVmaW5lICAgIFROX05HX0FDICAxICAgICAgICAgICAgICAgICAgLyogIE5lZ290aWF0aW9u IEFDQ0VQVEVEICovCi0jZGVmaW5lICAgIFROX05HX1JRICAyICAgICAgICAgICAgICAgICAgLyog IE5lZ290aWF0aW9uIFJFUVVFU1RFRCAqLwotI2RlZmluZSAgICBUTl9OR19NVSAgMyAgICAgICAg ICAgICAgICAgIC8qICBOZWdvdGlhdGlvbiBSRVFVSVJFRCAobXVzdCkgKi8KLQotCi0vKiBTeXN0 ZW1zIHdoZXJlIHdlIGtub3cgd2UgY2FuIGRlZmluZSBURUxORVQgTkFXUyBhdXRvbWF0aWNhbGx5 LiAqLwotCi0jaWZuZGVmIENLX05BV1MgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW4gb3Ro ZXIgd29yZHMsIGlmIGJvdGggKi8KLSNpZmRlZiBDS19UVEdXU0laICAgICAgICAgICAgICAgICAg ICAgICAvKiBUTkNPREUgYW5kIFRUR1dTSVogYXJlIGRlZmluZWQgKi8KLSNkZWZpbmUgQ0tfTkFX UyAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGVuIHdlIGNhbiBkbyBOQVdTLiAqLwotI2Vu ZGlmIC8qIENLX1RUR1dTSVogKi8KLSNlbmRpZiAvKiBDS19OQVdTICovCi0KLSNpZmRlZiBDS19G T1JXQVJEX1gKLSNpZm5kZWYgTUFYRldEWAotI2RlZmluZSBNQVhGV0RYIDY0ICAgICAgICAgICAg ICAgICAgICAgIC8qIE51bSBvZiBYIHdpbmRvd3MgdG8gYmUgZndkJ2QgKi8KLSNlbmRpZiAvKiBN QVhGV0RYICovCi0jZW5kaWYgLyogQ0tfRk9SV0FSRF9YICovCi0KLS8qIFRlbG5ldCBTdGF0ZSBz dHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucyAqLwotc3RydWN0IF90ZWxvcHRfc3RhdGUgewotICB1 bnNpZ25lZCBjaGFyIGRlZl9zZXJ2ZXJfbWVfbW9kZTsgICAvKiBEZWZhdWx0IE5lZ290aWF0aW9u IE1vZGUgKi8KLSAgdW5zaWduZWQgY2hhciBkZWZfc2VydmVyX3VfbW9kZTsgICAgLyogRGVmYXVs dCBOZWdvdGlhdGlvbiBNb2RlICovCi0gIHVuc2lnbmVkIGNoYXIgZGVmX2NsaWVudF9tZV9tb2Rl OyAgIC8qIERlZmF1bHQgTmVnb3RpYXRpb24gTW9kZSAqLwotICB1bnNpZ25lZCBjaGFyIGRlZl9j bGllbnRfdV9tb2RlOyAgICAvKiBEZWZhdWx0IE5lZ290aWF0aW9uIE1vZGUgKi8KLSAgdW5zaWdu ZWQgY2hhciBtZV9tb2RlOyAgICAgICAgICAgICAgLyogVGVsbmV0IE5lZ290aWF0aW9uIE1vZGUg Ki8KLSAgdW5zaWduZWQgY2hhciB1X21vZGU7ICAgICAgICAgICAgICAgLyogVGVsbmV0IE5lZ290 aWF0aW9uIE1vZGUgKi8KLSAgdW5zaWduZWQgY2hhciBtZTsgICAgICAgICAgICAgICAgICAgLyog QW0gSSA/ICAgICAgICAgICAgICAgICAgKi8KLSAgdW5zaWduZWQgY2hhciB1OyAgICAgICAgICAg ICAgICAgICAgLyogQXJlIHlvdT8gICAgICAgICAgICAgICAgKi8KLSAgdW5zaWduZWQgY2hhciB1 bmFuc3dlcmVkX3dpbGw7ICAgICAgLyogU2VudCBXaWxsLCBXYWl0aW5nIGZvciBETy9ET05UICov Ci0gIHVuc2lnbmVkIGNoYXIgdW5hbnN3ZXJlZF9kbzsgICAgICAgIC8qIFNlbmQgRE8sIFdhaXRp bmcgZm9yIFdJTEwvV09OVCAqLwotICB1bnNpZ25lZCBjaGFyIHVuYW5zd2VyZWRfd29udDsgICAg ICAvKiBTZW50IFdPTlQsIFdhaXRpbmcgZm9yIERPTlQgKi8KLSAgdW5zaWduZWQgY2hhciB1bmFu c3dlcmVkX2RvbnQ7ICAgICAgLyogU2VudCBET05ULCBXYWl0aW5nIGZvciBXT05UICovCi0gIHVu c2lnbmVkIGNoYXIgdW5hbnN3ZXJlZF9zYjsgICAgICAgIC8qIFNlbnQgU0IsICAgV2FpdGluZyBm b3IgU0IgKHNlcnZlcikgKi8KLSAgdW5pb24gewotI2lmZGVmIElLU19PUFRJT04KLSAgICBzdHJ1 Y3QgX3RlbG9wdF9rZXJtaXQgeyAgICAgICAgIC8qIEtlcm1pdCBPcHRpb24gU3RhdGVzICovCi0g ICAgICB1bnNpZ25lZCBjaGFyIG1lX3N0YXJ0OyAgICAgICAvKiBJIGhhdmUgYSBTZXJ2ZXIgYWN0 aXZlICovCi0gICAgICB1bnNpZ25lZCBjaGFyIG1lX3JlcV9zdGFydDsgICAvKiBTZW50IFJlcS1T dGFydCwgV2FpdGluZyBmb3IgcmVzcG9uc2UgKi8KLSAgICAgIHVuc2lnbmVkIGNoYXIgbWVfcmVx X3N0b3A7ICAgIC8qIFNlbnQgUmVxLVN0b3AsIFdhaXRpbmcgZm9yIHJlc3BvbnNlICAqLwotICAg ICAgdW5zaWduZWQgY2hhciB1X3N0YXJ0OyAgICAgICAgLyogWW91IGhhdmUgYSBTZXJ2ZXIgYWN0 aXZlICovCi0gICAgICB1bnNpZ25lZCBjaGFyIHNvcDsgICAgICAgICAgICAvKiBIYXZlIHdlIHJl Y2VpdmVkIHRoZSBTT1AgY2hhcj8gKi8KLSAgICB9IGtlcm1pdDsKLSNlbmRpZiAvKiBJS1NfT1BU SU9OICovCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgIHN0cnVjdCBfdGVsb3B0X2VuY3J5cHQg eyAgICAgICAgLyogRW5jcnlwdGlvbiBPcHRpb24gU3RhdGVzICovCi0gICAgICB1bnNpZ25lZCBj aGFyIG5lZWRfdG9fc2VuZDsKLSAgICAgIHVuc2lnbmVkIGNoYXIgIHN0b3A7ICAgICAgICAgIC8q IElzIGVuY3J5cHRpb24gc3RvcHBlZD8gICAqLwotICAgIH0gZW5jcnlwdDsKLSNlbmRpZiAvKiBD S19FTkNSWVBUSU9OICovCi0jaWZkZWYgQ0tfTkFXUwotICAgIHN0cnVjdCBfdGVsb3B0X25hd3Mg eyAgICAgICAgICAgLyogTkFXUyBPcHRpb24gSW5mb3JtYXRpb24gICovCi0gICAgICB1bnNpZ25l ZCBjaGFyIG5lZWRfdG9fc2VuZDsKLSAgICAgIGludCB4OyAgICAgICAgICAgICAgICAgICAgICAg IC8qIExhc3QgV2lkdGggICAgICAgICAgICAgICAqLwotICAgICAgaW50IHk7ICAgICAgICAgICAg ICAgICAgICAgICAgLyogTGFzdCBIZWlnaHQgICAgICAgICAgICAgICovCi0gICAgfSBuYXdzOwot I2VuZGlmIC8qIENLX05BV1MgKi8KLSNpZmRlZiBDS19TU0wKLSAgICBzdHJ1Y3QgX3RlbG9wdF9z dGFydF90bHMgeyAgICAgIC8qIFN0YXJ0IFRMUyBPcHRpb24gICAgICAgICAgICAgKi8KLSAgICAg ICB1bnNpZ25lZCBjaGFyIHVfZm9sbG93czsgICAgIC8qIHUgcmVhZHkgZm9yIFRMUyBuZWdvdGlh dGlvbiAgKi8KLSAgICAgICB1bnNpZ25lZCBjaGFyIG1lX2ZvbGxvd3M7ICAgIC8qIG1lIHJlYWR5 IGZvciBUTFMgbmVnb3RpYXRpb24gKi8KLSAgICAgICB1bnNpZ25lZCBjaGFyIGF1dGhfcmVxdWVz dDsgIC8qIFJjdmQgV0lMTCBBVVRIIGJlZm9yZSBXT05UIFNUQVJUX1RMUyAqLwotICAgIH0gc3Rh cnRfdGxzOwotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgIHN0cnVjdCBfdGVsb3B0X3Rlcm0geyAg ICAgICAgICAvKiBUZXJtaW5hbCBUeXBlICAgICAgICAgICAgKi8KLSAgICAgICB1bnNpZ25lZCBj aGFyIG5lZWRfdG9fc2VuZDsKLSAgICAgICB1bnNpZ25lZCBjaGFyIHR5cGVbNDFdOyAgICAgLyog TGFzdCB0ZXJtaW5hbCB0eXBlICAgICAgICovCi0gICAgfSB0ZXJtOwotI2lmZGVmIENLX0VOVklS T05NRU5UCi0gICAgc3RydWN0IF90ZWxvcHRfbmV3X2VudiB7Ci0gICAgICAgdW5zaWduZWQgY2hh ciBuZWVkX3RvX3NlbmQ7Ci0gICAgICAgdW5zaWduZWQgY2hhciAqIHN0cjsKLSAgICAgICBpbnQg ICAgICAgICAgICAgbGVuOwotICAgIH0gZW52OwotI2lmZGVmIENLX1hESVNQTE9DCi0gICAgc3Ry dWN0IF90ZWxvcHRfeGRpc3AgewotICAgICAgIHVuc2lnbmVkIGNoYXIgbmVlZF90b19zZW5kOwot ICAgIH0geGRpc3A7Ci0jZW5kaWYgLyogQ0tfWERJU1BMT0MgKi8KLSNlbmRpZiAvKiBDS19FTlZJ Uk9OTUVOVCAqLwotI2lmZGVmIENLX1NORExPQwotICAgIHN0cnVjdCBfdGVsb3B0X3NuZGxvYyB7 Ci0gICAgICAgdW5zaWduZWQgY2hhciBuZWVkX3RvX3NlbmQ7Ci0gICAgfSBzbmRsb2M7Ci0jZW5k aWYgLyogQ0tfU05ETE9DICovCi0jaWZkZWYgQ0tfRk9SV0FSRF9YCi0gICAgc3RydWN0IF90ZWxv cHRfZndkX3ggewotICAgICAgICB1bnNpZ25lZCBjaGFyIG5lZWRfdG9fc2VuZDsKLSAgICAgICAg aW50IGxpc3Rlbl9zb2NrZXQ7Ci0gICAgICAgIHN0cnVjdCBfY2hhbm5lbCB7Ci0gICAgICAgICAg ICBpbnQgZmQ7Ci0gICAgICAgICAgICBpbnQgaWQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFy IG5lZWRfdG9fc2VuZF94YXV0aDsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgc3VzcGVuZDsK LSAgICAgICAgfSBjaGFubmVsW01BWEZXRFhdOwotI2lmZGVmIE5UCi0gICAgICAgIGludCB0aHJl YWRfc3RhcnRlZDsKLSNlbmRpZiAvKiBOVCAqLwotICAgIH0gZm9yd2FyZF94OwotI2VuZGlmIC8q IENLX0ZPUldBUkRfWCAqLwotI2lmZGVmIFROX0NPTVBPUlQKLSAgICAgIHN0cnVjdCBfdGVsb3B0 X2NvbXBvcnQgewotICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbmVlZF90b19zZW5kOwotICAgICAg ICAgIHVuc2lnbmVkIGNoYXIgd2FpdF9mb3Jfc2I7Ci0gICAgICAgICAgdW5zaWduZWQgY2hhciB3 YWl0X2Zvcl9tczsKLSAgICAgIH0gY29tcG9ydDsKLSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0g ICAgLyogYWRkaXRpb25hbCBvcHRpb25zIHN1Y2ggYXMgTmV3IEVudmlyb25tZW50IG9yIFNlbmQg TG9jYXRpb24gKi8KLSAgfSBzYjsKLX07Ci10eXBlZGVmIHN0cnVjdCBfdGVsb3B0X3N0YXRlIHRl bG9wdF9zdGF0ZSwgKnBfdGVsb3B0X3N0YXRlOwotCi0vKiB0ZWxvcHRfc3RhdGVzW10gaXMgdGhl IGFycmF5IG9mIHN0cnVjdHMgd2hpY2ggdGhlIHN0YXRlIG9mIGVhY2ggdGVsbmV0ICovCi0vKiBv cHRpb24gaXMgc3RvcmVkLiAgV2UgYWxsb2NhdGUgb25lIG1vcmUgdGhhbiB3ZSBuZWVkIGluIGNh c2Ugd2UgYXJlICAgICovCi0vKiBzZW50IHRlbG5ldCBvcHRpb25zIHRoYXQgd2UgZG8gbm90IHJl Y29nbml6ZS4gIElmIGJ5IHNvbWUgY2hhbmNlIHRoZSAgICovCi0vKiBURUxPUFRfT0soKSBjaGVj ayBpcyBza2lwcGVkLCBURUxPUFRfSU5ERVgoKSB3aWxsIGZvcmNlIHRoZSBvcHRpb24gdG8gICov Ci0vKiB1c2UgdGhlIGV4dHJhIGNlbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICovCi0KLSNpZmRlZiBURUxPUFRfU1RBVEVTCi10ZWxvcHRfc3Rh dGUgdGVsb3B0X3N0YXRlc1tOVEVMT1BUUysxXTsKLSNlbHNlIC8qIFRFTE9QVF9TVEFURVMgKi8K LWV4dGVybiB0ZWxvcHRfc3RhdGUgdGVsb3B0X3N0YXRlc1tdOwotI2VuZGlmIC8qIFRFTE9QVF9T VEFURVMgKi8KLQotI2RlZmluZSBURUxPUFRfTUUoeCkgKHRlbG9wdF9zdGF0ZXNbVEVMT1BUX0lO REVYKHgpXS5tZSkKLSNkZWZpbmUgVEVMT1BUX1UoeCkgICh0ZWxvcHRfc3RhdGVzW1RFTE9QVF9J TkRFWCh4KV0udSkKLSNkZWZpbmUgVEVMT1BUX01FX01PREUoeCkgXAotICAgICAgICAodGVsb3B0 X3N0YXRlc1tURUxPUFRfSU5ERVgoeCldLm1lX21vZGUpCi0jZGVmaW5lIFRFTE9QVF9VX01PREUo eCkgIFwKLSAgICAgICAgKHRlbG9wdF9zdGF0ZXNbVEVMT1BUX0lOREVYKHgpXS51X21vZGUpCi0j ZGVmaW5lIFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwoeCkgXAotICAgICAgICAodGVsb3B0X3N0YXRl c1tURUxPUFRfSU5ERVgoeCldLnVuYW5zd2VyZWRfd2lsbCkKLSNkZWZpbmUgVEVMT1BUX1VOQU5T V0VSRURfRE8oeCkgICBcCi0gICAgICAgICh0ZWxvcHRfc3RhdGVzW1RFTE9QVF9JTkRFWCh4KV0u dW5hbnN3ZXJlZF9kbykKLSNkZWZpbmUgVEVMT1BUX1VOQU5TV0VSRURfV09OVCh4KSBcCi0gICAg ICAgICh0ZWxvcHRfc3RhdGVzW1RFTE9QVF9JTkRFWCh4KV0udW5hbnN3ZXJlZF93b250KQotI2Rl ZmluZSBURUxPUFRfVU5BTlNXRVJFRF9ET05UKHgpICAgXAotICAgICAgICAodGVsb3B0X3N0YXRl c1tURUxPUFRfSU5ERVgoeCldLnVuYW5zd2VyZWRfZG9udCkKLSNkZWZpbmUgVEVMT1BUX1VOQU5T V0VSRURfU0IoeCkgICBcCi0gICAgICAgICh0ZWxvcHRfc3RhdGVzW1RFTE9QVF9JTkRFWCh4KV0u dW5hbnN3ZXJlZF9zYikKLSNkZWZpbmUgVEVMT1BUX1NCKHgpIFwKLSAgICAgICAgKHRlbG9wdF9z dGF0ZXNbVEVMT1BUX0lOREVYKHgpXS5zYikKLSNkZWZpbmUgVEVMT1BUX0RFRl9TX01FX01PREUo eCkgXAotICAgICAgICAodGVsb3B0X3N0YXRlc1tURUxPUFRfSU5ERVgoeCldLmRlZl9zZXJ2ZXJf bWVfbW9kZSkKLSNkZWZpbmUgVEVMT1BUX0RFRl9TX1VfTU9ERSh4KSAgXAotICAgICAgICAodGVs b3B0X3N0YXRlc1tURUxPUFRfSU5ERVgoeCldLmRlZl9zZXJ2ZXJfdV9tb2RlKQotI2RlZmluZSBU RUxPUFRfREVGX0NfTUVfTU9ERSh4KSBcCi0gICAgICAgICh0ZWxvcHRfc3RhdGVzW1RFTE9QVF9J TkRFWCh4KV0uZGVmX2NsaWVudF9tZV9tb2RlKQotI2RlZmluZSBURUxPUFRfREVGX0NfVV9NT0RF KHgpICBcCi0gICAgICAgICh0ZWxvcHRfc3RhdGVzW1RFTE9QVF9JTkRFWCh4KV0uZGVmX2NsaWVu dF91X21vZGUpCi0KLSNpZmRlZiBURUxPUFRfTU9ERVMKLWNoYXIgKiB0ZWxvcHRfbW9kZXNbNF0g PSB7Ci0gICAgIlJFRlVTRUQiLCAiQUNDRVBURUQiLCAiUkVRVUVTVEVEIiwgIlJFUVVJUkVEIgot fTsKLSNlbHNlIC8qIFRFTE9QVF9NT0RFUyAqLwotZXh0ZXJuIGNoYXIgKiB0ZWxvcHRfbW9kZXNb XTsKLSNlbmRpZiAvKiBURUxPUFRfTU9ERVMgKi8KLQotI2lmZGVmIFRFTE9QVF9NQUNSTwotI2Rl ZmluZSBURUxPUFRfTU9ERV9PSyh4KSAoKHVuc2lnbmVkIGludCkoeCkgPD0gVE5fTkdfTVUpCi0j ZGVmaW5lIFRFTE9QVF9NT0RFKHgpIChURUxPUFRfTU9ERV9PSyh4KT90ZWxvcHRfbW9kZXNbKHgp LVROX05HX1JGXToiVU5LTk9XTiIpCi0jZWxzZSAvKiBURUxPUFRfTUFDUk8gKi8KLV9QUk9UT1RZ UChpbnQgdGVsb3B0X21vZGVfb2ssKGludCkpOwotX1BST1RPVFlQKENIQVIgKiB0ZWxvcHRfbW9k ZSwoaW50KSk7Ci0KLSNkZWZpbmUgVEVMT1BUX01PREVfT0soeCkgdGVsb3B0X21vZGVfb2soeCkK LSNkZWZpbmUgVEVMT1BUX01PREUoeCkgICAgdGVsb3B0X21vZGUoeCkKLSNlbmRpZiAvKiBURUxP UFRfTUFDUk8gKi8KLQotLyogU3ViLW9wdGlvbiBxdWFsaWZpZXJzICovCi0jZGVmaW5lIFRFTFFV QUxfSVMgICAgICAwICAgICAgIC8qIG9wdGlvbiBpcy4uLiAqLwotI2RlZmluZSBURUxRVUFMX1NF TkQgICAgMSAgICAgICAvKiBzZW5kIG9wdGlvbiAqLwotI2RlZmluZSBURUxRVUFMX0lORk8gICAg MiAgICAgICAvKiBFTlZJUk9OOiBpbmZvcm1hdGlvbmFsIHZlcnNpb24gb2YgSVMgKi8KLSNkZWZp bmUgVEVMUVVBTF9SRVBMWSAgIDIgICAgICAgLyogQVVUSEVOVElDQVRJT046IGNsaWVudCB2ZXJz aW9uIG9mIElTICovCi0jZGVmaW5lIFRFTFFVQUxfTkFNRSAgICAzICAgICAgIC8qIEFVVEhFTlRJ Q0FUSU9OOiBjbGllbnQgdmVyc2lvbiBvZiBJUyAqLwotCi0jZGVmaW5lIFRFTF9FTlZfVkFSICAg ICAwCi0jZGVmaW5lIFRFTF9FTlZfVkFMVUUgICAxCi0jZGVmaW5lIFRFTF9FTlZfRVNDICAgICAy Ci0jZGVmaW5lIFRFTF9FTlZfVVNFUlZBUiAzCi0KLSNkZWZpbmUgTEZMT1dfT0ZGICAgICAgICAg ICAgICAgMCAgICAgICAvKiBEaXNhYmxlIHJlbW90ZSBmbG93IGNvbnRyb2wgKi8KLSNkZWZpbmUg TEZMT1dfT04gICAgICAgICAgICAgICAgMSAgICAgICAvKiBFbmFibGUgcmVtb3RlIGZsb3cgY29u dHJvbCAqLwotI2RlZmluZSBMRkxPV19SRVNUQVJUX0FOWSAgICAgICAyICAgICAgIC8qIFJlc3Rh cnQgb3V0cHV0IG9uIGFueSBjaGFyICovCi0jZGVmaW5lIExGTE9XX1JFU1RBUlRfWE9OICAgICAg IDMgICAgICAgLyogUmVzdGFydCBvdXRwdXQgb25seSBvbiBYT04gKi8KLQotLyoKLSAqIExJTkVN T0RFIHN1Ym9wdGlvbnMKLSAqLwotCi0jZGVmaW5lIExNX01PREUgICAgICAgICAxCi0jZGVmaW5l IExNX0ZPUldBUkRNQVNLICAyCi0jZGVmaW5lIExNX1NMQyAgICAgICAgICAzCi0KLSNkZWZpbmUg TU9ERV9FRElUICAgICAgIDB4MDEKLSNkZWZpbmUgTU9ERV9UUkFQU0lHICAgIDB4MDIKLSNkZWZp bmUgTU9ERV9BQ0sgICAgICAgIDB4MDQKLSNkZWZpbmUgTU9ERV9TT0ZUX1RBQiAgIDB4MDgKLSNk ZWZpbmUgTU9ERV9MSVRfRUNITyAgIDB4MTAKLQotI2RlZmluZSBNT0RFX01BU0sgICAgICAgMHgx ZgotCi0vKiBOb3QgcGFydCBvZiBwcm90b2NvbCwgYnV0IG5lZWRlZCB0byBzaW1wbGlmeSB0aGlu Z3MuLi4gKi8KLSNkZWZpbmUgTU9ERV9GTE9XICAgICAgICAgICAgICAgMHgwMTAwCi0jZGVmaW5l IE1PREVfRUNITyAgICAgICAgICAgICAgIDB4MDIwMAotI2RlZmluZSBNT0RFX0lOQklOICAgICAg ICAgICAgICAweDA0MDAKLSNkZWZpbmUgTU9ERV9PVVRCSU4gICAgICAgICAgICAgMHgwODAwCi0j ZGVmaW5lIE1PREVfRk9SQ0UgICAgICAgICAgICAgIDB4MTAwMAotCi0jZGVmaW5lIFNMQ19TWU5D SCAgICAgICAxCi0jZGVmaW5lIFNMQ19CUksgICAgICAgICAyCi0jZGVmaW5lIFNMQ19JUCAgICAg ICAgICAzCi0jZGVmaW5lIFNMQ19BTyAgICAgICAgICA0Ci0jZGVmaW5lIFNMQ19BWVQgICAgICAg ICA1Ci0jZGVmaW5lIFNMQ19FT1IgICAgICAgICA2Ci0jZGVmaW5lIFNMQ19BQk9SVCAgICAgICA3 Ci0jZGVmaW5lIFNMQ19FT0YgICAgICAgICA4Ci0jZGVmaW5lIFNMQ19TVVNQICAgICAgICA5Ci0j ZGVmaW5lIFNMQ19FQyAgICAgICAgICAxMAotI2RlZmluZSBTTENfRUwgICAgICAgICAgMTEKLSNk ZWZpbmUgU0xDX0VXICAgICAgICAgIDEyCi0jZGVmaW5lIFNMQ19SUCAgICAgICAgICAxMwotI2Rl ZmluZSBTTENfTE5FWFQgICAgICAgMTQKLSNkZWZpbmUgU0xDX1hPTiAgICAgICAgIDE1Ci0jZGVm aW5lIFNMQ19YT0ZGICAgICAgICAxNgotI2RlZmluZSBTTENfRk9SVzEgICAgICAgMTcKLSNkZWZp bmUgU0xDX0ZPUlcyICAgICAgIDE4Ci0jZGVmaW5lIFNMQ19NQ0wgICAgICAgICAxOQotI2RlZmlu ZSBTTENfTUNSICAgICAgICAgMjAKLSNkZWZpbmUgU0xDX01DV0wgICAgICAgIDIxCi0jZGVmaW5l IFNMQ19NQ1dSICAgICAgICAyMgotI2RlZmluZSBTTENfTUNCT0wgICAgICAgMjMKLSNkZWZpbmUg U0xDX01DRU9MICAgICAgIDI0Ci0jZGVmaW5lIFNMQ19JTlNSVCAgICAgICAyNQotI2RlZmluZSBT TENfT1ZFUiAgICAgICAgMjYKLSNkZWZpbmUgU0xDX0VDUiAgICAgICAgIDI3Ci0jZGVmaW5lIFNM Q19FV1IgICAgICAgICAyOAotI2RlZmluZSBTTENfRUJPTCAgICAgICAgMjkKLSNkZWZpbmUgU0xD X0VFT0wgICAgICAgIDMwCi0KLSNkZWZpbmUgTlNMQyAgICAgICAgICAgIDMwCi0KLS8qCi0gKiBG b3IgYmFja3dhcmRzIGNvbXBhdGFiaWxpdHksIHdlIGRlZmluZSBTTENfTkFNRVMgdG8gYmUgdGhl Ci0gKiBsaXN0IG9mIG5hbWVzIGlmIFNMQ19OQU1FUyBpcyBub3QgZGVmaW5lZC4KLSAqLwotI2Rl ZmluZSBTTENfTkFNRUxJU1QgICAgIjAiLCAiU1lOQ0giLCAiQlJLIiwgIklQIiwgIkFPIiwgIkFZ VCIsICJFT1IiLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAiQUJPUlQiLCAiRU9GIiwgIlNV U1AiLCAiRUMiLCAiRUwiLCAiRVciLCAiUlAiLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAi TE5FWFQiLCAiWE9OIiwgIlhPRkYiLCAiRk9SVzEiLCAiRk9SVzIiLCBcCi0gICAgICAgICAgICAg ICAgICAgICAgICAiTUNMIiwgIk1DUiIsICJNQ1dMIiwgIk1DV1IiLCAiTUNCT0wiLCAiTUNFT0wi LCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAiSU5TUlQiLCAiT1ZFUiIsICJFQ1IiLCAiRVdS IiwgIkVCT0wiLCAiRUVPTCIsIDAKLSNpZmRlZiAgU0xDX05BTUVTCi1jaGFyICpzbGNfbmFtZXNb XSA9IHsKLSAgICAgICAgU0xDX05BTUVMSVNUCi19OwotI2Vsc2UKLWV4dGVybiBjaGFyICpzbGNf bmFtZXNbXTsKLSNkZWZpbmUgU0xDX05BTUVTIFNMQ19OQU1FTElTVAotI2VuZGlmCi0KLSNkZWZp bmUgU0xDX05BTUVfT0soeCkgICgodW5zaWduZWQgaW50KSh4KSA8PSBOU0xDKQotI2RlZmluZSBT TENfTkFNRSh4KSAgICAgKFNMQ19OQU1FX09LKHgpP3NsY19uYW1lc1t4XToiVU5LTk9XTiIpCi0K LSNkZWZpbmUgU0xDX05PU1VQUE9SVCAgICAgICAwCi0jZGVmaW5lIFNMQ19DQU5UQ0hBTkdFICAg ICAgMQotI2RlZmluZSBTTENfVkFSSUFCTEUgICAgICAgIDIKLSNkZWZpbmUgU0xDX0RFRkFVTFQg ICAgICAgICAzCi0jZGVmaW5lIFNMQ19MRVZFTEJJVFMgICAgICAgMHgwMwotCi0jZGVmaW5lIFNM Q19GVU5DICAgICAgICAgICAgMAotI2RlZmluZSBTTENfRkxBR1MgICAgICAgICAgIDEKLSNkZWZp bmUgU0xDX1ZBTFVFICAgICAgICAgICAyCi0KLSNkZWZpbmUgU0xDX0FDSyAgICAgICAgICAgICAw eDgwCi0jZGVmaW5lIFNMQ19GTFVTSElOICAgICAgICAgMHg0MAotI2RlZmluZSBTTENfRkxVU0hP VVQgICAgICAgIDB4MjAKLQotI2RlZmluZSBPTERfRU5WX1ZBUiAgICAgICAgIDEKLSNkZWZpbmUg T0xEX0VOVl9WQUxVRSAgICAgICAwCi0jZGVmaW5lIE5FV19FTlZfVkFSICAgICAgICAgMAotI2Rl ZmluZSBORVdfRU5WX1ZBTFVFICAgICAgIDEKLSNkZWZpbmUgRU5WX0VTQyAgICAgICAgICAgICAy Ci0jZGVmaW5lIEVOVl9VU0VSVkFSICAgICAgICAgMwotCi0jZGVmaW5lIEZXRFhfU0NSRUVOICAg ICAgICAgMAotI2RlZmluZSBGV0RYX09QRU4gICAgICAgICAgIDEKLSNkZWZpbmUgRldEWF9DTE9T RSAgICAgICAgICAyCi0jZGVmaW5lIEZXRFhfREFUQSAgICAgICAgICAgMwotI2RlZmluZSBGV0RY X09QVElPTlMgICAgICAgIDQKLSNkZWZpbmUgRldEWF9PUFRfREFUQSAgICAgICA1Ci0jZGVmaW5l IEZXRFhfWE9GRiAgICAgICAgICAgNgotI2RlZmluZSBGV0RYX1hPTiAgICAgICAgICAgIDcKLQot I2RlZmluZSBGV0RYX09QVF9OT05FICAgICAgIDAKLSNkZWZpbmUgRldEWF9PUFRfWEFVVEggICAg ICAxCi0KLS8qCi0gKiBBVVRIRU5USUNBVElPTiBzdWJvcHRpb25zCi0gKi8KLQotLyoKLSAqIFdo byBpcyBhdXRoZW50aWNhdGluZyB3aG8gLi4uCi0gKi8KLSNkZWZpbmUgQVVUSF9DTElFTlRfVE9f U0VSVkVSICAgMCAgICAgICAvKiBDbGllbnQgYXV0aGVudGljYXRpbmcgc2VydmVyICovCi0jZGVm aW5lIEFVVEhfU0VSVkVSX1RPX0NMSUVOVCAgIDEgICAgICAgLyogU2VydmVyIGF1dGhlbnRpY2F0 aW5nIGNsaWVudCAqLwotI2RlZmluZSBBVVRIX1dIT19NQVNLICAgICAgICAgICAxCi0KLS8qCi0g KiBhbW91bnQgb2YgYXV0aGVudGljYXRpb24gZG9uZQotICovCi0jZGVmaW5lIEFVVEhfSE9XX09O RV9XQVkgICAgICAgIDAKLSNkZWZpbmUgQVVUSF9IT1dfTVVUVUFMICAgICAgICAgMgotI2RlZmlu ZSBBVVRIX0hPV19NQVNLICAgICAgICAgICAyCi0KLS8qCi0gKiBzaG91bGQgd2UgYmUgZW5jcnlw dGluZz8KLSAqLwotI2RlZmluZSBBVVRIX0VOQ1JZUFRfT0ZGICAgICAgICAgICAgIDAKLSNkZWZp bmUgQVVUSF9FTkNSWVBUX1VTSU5HX1RFTE9QVCAgICA0Ci0jZGVmaW5lIEFVVEhfRU5DUllQVF9B RlRFUl9FWENIQU5HRSAxNgotI2RlZmluZSBBVVRIX0VOQ1JZUFRfU1RBUlRfVExTICAgICAgMjAK LSNkZWZpbmUgQVVUSF9FTkNSWVBUX01BU0sgICAgICAgICAgIDIwCi0KLS8qCi0gKiB3aWxsIHdl IGJlIGZvcndhcmRpbmc/Ci0gKiBpZiB3ZSB3YW50IHRvIGFjdGl2YXRlIHRoZSB1c2Ugb2YgdGhp cyBmbGFnIHRoZW4KLSAqICAgI2RlZmluZSBVU0VfSU5JX0NSRURfRldECi0gKi8KLSNkZWZpbmUg SU5JX0NSRURfRldEX09GRiAgICAgICAgMAotI2RlZmluZSBJTklfQ1JFRF9GV0RfT04gICAgICAg ICA4Ci0jZGVmaW5lIElOSV9DUkVEX0ZXRF9NQVNLICAgICAgIDgKLSNkZWZpbmUgVVNFX0lOSV9D UkVEX0ZXRAotCi0jZGVmaW5lIEFVVEhUWVBFX05VTEwgICAgICAgICAgIDAKLSNkZWZpbmUgQVVU SFRZUEVfS0VSQkVST1NfVjQgICAgMQotI2RlZmluZSBBVVRIVFlQRV9LRVJCRVJPU19WNSAgICAy Ci0jZGVmaW5lIEFVVEhUWVBFX1NQWCAgICAgICAgICAgIDMKLSNkZWZpbmUgQVVUSFRZUEVfTUlO SyAgICAgICAgICAgNAotI2RlZmluZSBBVVRIVFlQRV9TUlAgICAgICAgICAgICA1Ci0jZGVmaW5l IEFVVEhUWVBFX1JTQSAgICAgICAgICAgIDYKLSNkZWZpbmUgQVVUSFRZUEVfU1NMICAgICAgICAg ICAgNwotI2RlZmluZSBBVVRIVFlQRV9MT0tJICAgICAgICAgIDEwCi0jZGVmaW5lIEFVVEhUWVBF X1NTQSAgICAgICAgICAgMTEKLSNkZWZpbmUgQVVUSFRZUEVfS0VBX1NKICAgICAgICAxMgotI2Rl ZmluZSBBVVRIVFlQRV9LRUFfSU5URUcgICAgIDEzCi0jZGVmaW5lIEFVVEhUWVBFX0RTUyAgICAg ICAgICAgMTQKLSNkZWZpbmUgQVVUSFRZUEVfTlRMTSAgICAgICAgICAxNQotI2RlZmluZSBBVVRI VFlQRV9HU1NBUElfS1JCNSAgIDE2ICAgICAgICAgICAgICAgLyogTm90IGFsbG9jYXRlZCBieSBJ QU5BICovCi0jaWZkZWYgQVVUSFRZUEVfQ05UCi0jdW5kZWYgQVVUSFRZUEVfQ05UCi0jZW5kaWYg LyogQVVUSFRZUEVfQ05UICovCi0jZGVmaW5lIEFVVEhUWVBFX0NOVCAgICAgICAgICAgMTcKLQot LyoKLSAqIEFVVEhUWVBFcyBMYXN0IHVwZGF0ZWQgMjEgTWFyY2ggMTk5OQotICogZnJvbSBodHRw Oi8vd3d3LmlzaS5lZHUvaW4tbm90ZXMvaWFuYS9hc3NpZ25tZW50cy90ZWxuZXQtb3B0aW9ucwot ICovCi0KLSNkZWZpbmUgQVVUSFRZUEVfQVVUTyAgICAgICAgICAgOTkKLQotI2lmZGVmICBBVVRI X05BTUVTCi1jaGFyICphdXRodHlwZV9uYW1lc1tdID0gewotICAgICJOVUxMIiwgICAgICAgICAg ICAgICAgICAgICAvKiBSRkMgMjk0MSAqLwotICAgICJLRVJCRVJPU19WNCIsICAgICAgICAgICAg ICAvKiBSRkMgMjk0MSAvIDE0MTEgKi8KLSAgICAiS0VSQkVST1NfVjUiLCAgICAgICAgICAgICAg LyogUkZDIDI5NDEgKi8KLSAgICAiU1BYIiwgICAgICAgICAgICAgICAgICAgICAgLyogUkZDIDI5 NDEgKG5vdCBJbnRlcm5ldCBTdGFuZGFyZCkgKi8KLSAgICAiTUlOSyIsICAgICAgICAgICAgICAg ICAgICAgLyogUkZDIDI5NDEgKG5vdCBJbnRlcm5ldCBTdGFuZGFyZCkgKi8KLSAgICAiU1JQIiwg ICAgICAgICAgICAgICAgICAgICAgLyogUkZDIDI5NDQgKi8KLSAgICAiUlNBIiwgICAgICAgICAg ICAgICAgICAgICAgLyogUkZDIDI5NDEgKG5vdCBJbnRlcm5ldCBTdGFuZGFyZCkgKi8KLSAgICAi U1NMIiwgICAgICAgICAgICAgICAgICAgICAgLyogUkZDIDI5NDEgKG5vdCBJbnRlcm5ldCBTdGFu ZGFyZCkgKi8KLSAgICAiSUFOQV84IiwgICAgICAgICAgICAgICAgICAgLyogbm90IGFzc2lnbmVk IGJ5IElBTkEgKi8KLSAgICAiSUFOQV85IiwgICAgICAgICAgICAgICAgICAgLyogbm90IGFzc2ln bmVkIGJ5IElBTkEgKi8KLSAgICAiTE9LSSIsICAgICAgICAgICAgICAgICAgICAgLyogUkZDIDI5 NDEgKG5vdCBJbnRlcm5ldCBTdGFuZGFyZCkgKi8KLSAgICAiU1NBIiwgICAgICAgICAgICAgICAg ICAgICAgLyogU2Nob2NoICovCi0gICAgIktFQV9TSiIsICAgICAgICAgICAgICAgICAgIC8qIFJG QyAyOTUxICovCi0gICAgIktFQV9TSl9JTlRFRyIsICAgICAgICAgICAgIC8qIFJGQyAyOTUxICov Ci0gICAgIkRTUyIsICAgICAgICAgICAgICAgICAgICAgIC8qIFJGQyAyOTQzICovCi0gICAgIk5U TE0iLCAgICAgICAgICAgICAgICAgICAgIC8qIEthaG4gPGxvdWlza0BtaWNyb3NvZnQuY29tPiAq LwotICAgICJHU1NBUEktS1JCNSIsICAgICAgICAgICAgICAvKiBleHBlcmltZW50YWwgLSBhbHRt YW4gKi8KLSAgICAwCi19OwotY2hhciAqIGF1dGhtb2RlX25hbWVzW10gPSB7Ci0gICAgIkNMSUVO VF9UT19TRVJWRVJ8T05FX1dBWSIsCi0gICAgIlNFUlZFUl9UT19DTElFTlR8T05FX1dBWSIsCi0g ICAgIkNMSUVOVF9UT19TRVJWRVJ8TVVUVUFMIiwKLSAgICAiU0VSVkVSX1RPX0NMSUVOVHxNVVRV QUwiLAotICAgICJDTElFTlRfVE9fU0VSVkVSfE9ORV9XQVl8RU5DUllQVF9VU0lOR19URUxPUFQi LAotICAgICJTRVJWRVJfVE9fQ0xJRU5UfE9ORV9XQVl8RU5DUllQVF9VU0lOR19URUxPUFQiLAot ICAgICJDTElFTlRfVE9fU0VSVkVSfE1VVFVBTHxFTkNSWVBUX1VTSU5HX1RFTE9QVCIsCi0gICAg IlNFUlZFUl9UT19DTElFTlR8TVVUVUFMfEVOQ1JZUFRfVVNJTkdfVEVMT1BUIiwKLSAgICAiQ0xJ RU5UX1RPX1NFUlZFUnxPTkVfV0FZfENSRURfRldEIiwKLSAgICAiU0VSVkVSX1RPX0NMSUVOVHxP TkVfV0FZfENSRURfRldEIiwKLSAgICAiQ0xJRU5UX1RPX1NFUlZFUnxNVVRVQUx8Q1JFRF9GV0Qi LAotICAgICJTRVJWRVJfVE9fQ0xJRU5UfE1VVFVBTHxDUkVEX0ZXRCIsCi0gICAgIkNMSUVOVF9U T19TRVJWRVJ8T05FX1dBWXxFTkNSWVBUX1VTSU5HX1RFTE9QVHxDUkVEX0ZXRCIsCi0gICAgIlNF UlZFUl9UT19DTElFTlR8T05FX1dBWXxFTkNSWVBUX1VTSU5HX1RFTE9QVHxDUkVEX0ZXRCIsCi0g ICAgIkNMSUVOVF9UT19TRVJWRVJ8TVVUVUFMfEVOQ1JZUFRfVVNJTkdfVEVMT1BUfENSRURfRldE IiwKLSAgICAiU0VSVkVSX1RPX0NMSUVOVHxNVVRVQUx8RU5DUllQVF9VU0lOR19URUxPUFR8Q1JF RF9GV0QiLAotICAgICJDTElFTlRfVE9fU0VSVkVSfE9ORV9XQVl8RU5DUllQVF9BRlRFUl9FWENI QU5HRSIsCi0gICAgIlNFUlZFUl9UT19DTElFTlR8T05FX1dBWXxFTkNSWVBUX0FGVEVSX0VYQ0hB TkdFIiwKLSAgICAiQ0xJRU5UX1RPX1NFUlZFUnxNVVRVQUx8RU5DUllQVF9BRlRFUl9FWENIQU5H RSIsCi0gICAgIlNFUlZFUl9UT19DTElFTlR8TVVUVUFMfEVOQ1JZUFRfQUZURVJfRVhDSEFOR0Ui LAotICAgICJDTElFTlRfVE9fU0VSVkVSfE9ORV9XQVl8RU5DUllQVF9TVEFSVF9UTFMiLAotICAg ICJTRVJWRVJfVE9fQ0xJRU5UfE9ORV9XQVl8RU5DUllQVF9TVEFSVF9UTFMiLAotICAgICJDTElF TlRfVE9fU0VSVkVSfE1VVFVBTHxFTkNSWVBUX1NUQVJUX1RMUyIsCi0gICAgIlNFUlZFUl9UT19D TElFTlR8TVVUVUFMfEVOQ1JZUFRfU1RBUlRfVExTIiwKLSAgICAiQ0xJRU5UX1RPX1NFUlZFUnxP TkVfV0FZfEVOQ1JZUFRfQUZURVJfRVhDSEFOR0V8Q1JFRF9GV0QiLAotICAgICJTRVJWRVJfVE9f Q0xJRU5UfE9ORV9XQVl8RU5DUllQVF9BRlRFUl9FWENIQU5HRXxDUkVEX0ZXRCIsCi0gICAgIkNM SUVOVF9UT19TRVJWRVJ8TVVUVUFMfEVOQ1JZUFRfQUZURVJfRVhDSEFOR0V8Q1JFRF9GV0QiLAot ICAgICJTRVJWRVJfVE9fQ0xJRU5UfE1VVFVBTHxFTkNSWVBUX0FGVEVSX0VYQ0hBTkdFfENSRURf RldEIiwKLSAgICAiQ0xJRU5UX1RPX1NFUlZFUnxPTkVfV0FZfEVOQ1JZUFRfU1RBUlRfVExTfENS RURfRldEIiwKLSAgICAiU0VSVkVSX1RPX0NMSUVOVHxPTkVfV0FZfEVOQ1JZUFRfU1RBUlRfVExT fENSRURfRldEIiwKLSAgICAiQ0xJRU5UX1RPX1NFUlZFUnxNVVRVQUx8RU5DUllQVF9TVEFSVF9U TFN8Q1JFRF9GV0QiLAotICAgICJTRVJWRVJfVE9fQ0xJRU5UfE1VVFVBTHxFTkNSWVBUX1NUQVJU X1RMU3xDUkVEX0ZXRCIsCi0gICAgMAotfTsKLSNlbHNlCi1leHRlcm4gY2hhciAqYXV0aHR5cGVf bmFtZXNbXTsKLWV4dGVybiBjaGFyICphdXRobW9kZV9uYW1lc1tdOwotI2VuZGlmCi0jZGVmaW5l IEFVVEhNT0RFX0NOVCAgMzIKLQotI2RlZmluZSBBVVRIVFlQRV9OQU1FX09LKHgpICAgICAoKHVu c2lnbmVkIGludCkoeCkgPCBBVVRIVFlQRV9DTlQpCi0jZGVmaW5lIEFVVEhUWVBFX05BTUUoeCkg ICAgICAoQVVUSFRZUEVfTkFNRV9PSyh4KT9hdXRodHlwZV9uYW1lc1t4XToiVU5LTk9XTiIpCi0K LSNkZWZpbmUgQVVUSE1PREVfTkFNRV9PSyh4KSAgICAgKCh1bnNpZ25lZCBpbnQpKHgpIDwgQVVU SE1PREVfQ05UKQotI2RlZmluZSBBVVRITU9ERV9OQU1FKHgpICAgICAgKEFVVEhNT0RFX05BTUVf T0soeCk/YXV0aG1vZGVfbmFtZXNbeF06IlVOS05PV04iKQotCi0vKiBLZXJiZXJvcyBBdXRoZW50 aWNhdGlvbiBNZXNzYWdlIElkZW50aWZpZXJzICovCi0jZGVmaW5lIEtSQl9BVVRIICAgICAgICAg ICAgICAgIDAgICAgICAgLyogQXV0aGVudGljYXRpb24gZGF0YSBmb2xsb3dzICovCi0jZGVmaW5l IEtSQl9SRUpFQ1QgICAgICAgICAgICAgIDEgICAgICAgLyogUmVqZWN0ZWQgKHJlYXNvbiBtaWdo dCBmb2xsb3cpICovCi0jZGVmaW5lIEtSQl9BQ0NFUFQgICAgICAgICAgICAgIDIgICAgICAgLyog QWNjZXB0ZWQgKi8KLSNkZWZpbmUgS1JCNF9DSEFMTEVOR0UgICAgICAgICAgMwotI2RlZmluZSBL UkI0X1JFU1BPTlNFICAgICAgICAgICA0Ci0jZGVmaW5lIEtSQjVfUkVTUE9OU0UgICAgICAgICAg IDMgICAgICAgLyogUmVzcG9uc2UgZm9yIG11dHVhbCBhdXRoLiAqLwotI2RlZmluZSBLUkI1X0ZP UldBUkQgICAgICAgICAgICA0ICAgICAgIC8qIEZvcndhcmRlZCBjcmVkZW50aWFscyBmb2xsb3cg Ki8KLSNkZWZpbmUgS1JCNV9GT1JXQVJEX0FDQ0VQVCAgICAgNSAgICAgICAvKiBGb3J3YXJkZWQg Y3JlZGVudGlhbHMgYWNjZXB0ZWQgKi8KLSNkZWZpbmUgS1JCNV9GT1JXQVJEX1JFSkVDVCAgICAg NiAgICAgICAvKiBGb3J3YXJkZWQgY3JlZGVudGlhbHMgcmVqZWN0ZWQgKi8KLSNkZWZpbmUgS1JC NV9UTFNfVkVSSUZZICAgICAgICAgNyAgICAgICAvKiBUTFMgRmluaXNoZWQgTXNnIHZlcmlmaWVy ICovCi0KLS8qIEdTU0FQSS1LUkI1IEF1dGhlbnRpY2F0aW9uIE1lc3NhZ2UgSWRlbnRpZmllcnMg Ki8KLSNkZWZpbmUgR1NTX0FVVEhfREFUQSAgICAgICAgICAgMCAgICAgICAvKiBBdXRoZW50aWNh dGlvbiBkYXRhIGZvbGxvd3MgKi8KLSNkZWZpbmUgR1NTX1JFSkVDVCAgICAgICAgICAgICAgMSAg ICAgICAvKiBSZWplY3RlZCAocmVhc29uIG1pZ2h0IGZvbGxvdykgKi8KLSNkZWZpbmUgR1NTX0FD Q0VQVCAgICAgICAgICAgICAgMiAgICAgICAvKiBBY2NlcHRlZCAodXNlcm5hbWUgbWlnaHQgZm9s bG93KSAqLwotI2RlZmluZSBHU1NfQ09OVElOVUUgICAgICAgICAgICAzCi0KLS8qIFNlY3VyZSBS ZW1vdGUgUGFzc3dvcmQgQXV0aGVudGljYXRpb24gTWVzc2FnZSBJZGVudGlmaWVycyAqLwotI2Rl ZmluZSBTUlBfQVVUSCAgICAgICAgICAgICAgICAwICAgICAgIC8qIEF1dGhlbnRpY2F0aW9uIGRh dGEgZm9sbG93cyAqLwotI2RlZmluZSBTUlBfUkVKRUNUICAgICAgICAgICAgICAxICAgICAgIC8q IFJlamVjdGVkIChyZWFzb24gbWlnaHQgZm9sbG93KSAqLwotI2RlZmluZSBTUlBfQUNDRVBUICAg ICAgICAgICAgICAyICAgICAgIC8qIEFjY2VwdGVkICovCi0jZGVmaW5lIFNSUF9DSEFMTEVOR0Ug ICAgICAgICAgIDMKLSNkZWZpbmUgU1JQX1JFU1BPTlNFICAgICAgICAgICAgNAotI2RlZmluZSBT UlBfRVhQICAgICAgICAgICAgICAgICA4ICAgICAgIC8qICovCi0jZGVmaW5lIFNSUF9QQVJBTVMg ICAgICAgICAgICAgIDkgICAgICAgLyogKi8KLQotLyogVGVsbmV0IEF1dGggdXNpbmcgS0VBIGFu ZCBTS0lQSkFDSyAqLwotCi0jZGVmaW5lIEtFQV9DRVJUQV9SQSAgICAgICAgICAgICAgMQotI2Rl ZmluZSBLRUFfQ0VSVEJfUkJfSVZCX05PTkNFQiAgIDIKLSNkZWZpbmUgS0VBX0lWQV9SRVNQT05T RUJfTk9OQ0VBICAzCi0jZGVmaW5lIEtFQV9SRVNQT05TRUEgICAgICAgICAgICAgNAotCi0vKiBU aW0gSHVkc29uJ3MgU1NMIEF1dGhlbnRpY2F0aW9uIE1lc3NhZ2UgSWRlbnRpZmllcnMgKi8KLSNk ZWZpbmUgU1NMX1NUQVJUICAgICAxCi0jZGVmaW5lIFNTTF9BQ0NFUFQgICAgMgotI2RlZmluZSBT U0xfUkVKRUNUICAgIDMKLQotLyogTWljcm9zb2Z0IE5UTE0gQXV0aGVudGljYXRpb24gTWVzc2Fn ZSBJZGVudGlmaWVycyAqLwotI2RlZmluZSBOVExNX0FVVEggICAwCi0jZGVmaW5lIE5UTE1fQ0hB TExFTkdFIDEKLSNkZWZpbmUgTlRMTV9SRVNQT05TRSAgMgotI2RlZmluZSBOVExNX0FDQ0VQVCAz Ci0jZGVmaW5lIE5UTE1fUkVKRUNUIDQKLQotLyogR2VuZXJpYyBDb25zdGFudHMgKi8KLSNkZWZp bmUgQVVUSF9TVUNDRVNTICAgIDAKLSNkZWZpbmUgQVVUSF9GQUlMVVJFICAgIDI1NQotCi0vKgot ICogRU5DUllQVGlvbiBzdWJvcHRpb25zCi0gKi8KLSNkZWZpbmUgRU5DUllQVF9JUyAgICAgICAg ICAgICAgMCAgICAgICAvKiBJIHBpY2sgZW5jcnlwdGlvbiB0eXBlIC4uLiAqLwotI2RlZmluZSBF TkNSWVBUX1NVUFBPUlQgICAgICAgICAxICAgICAgIC8qIEkgc3VwcG9ydCBlbmNyeXB0aW9uIHR5 cGVzIC4uLiAqLwotI2RlZmluZSBFTkNSWVBUX1JFUExZICAgICAgICAgICAyICAgICAgIC8qIElu aXRpYWwgc2V0dXAgcmVzcG9uc2UgKi8KLSNkZWZpbmUgRU5DUllQVF9TVEFSVCAgICAgICAgICAg MyAgICAgICAvKiBBbSBzdGFydGluZyB0byBzZW5kIGVuY3J5cHRlZCAqLwotI2RlZmluZSBFTkNS WVBUX0VORCAgICAgICAgICAgICA0ICAgICAgIC8qIEFtIGVuZGluZyBlbmNyeXB0ZWQgKi8KLSNk ZWZpbmUgRU5DUllQVF9SRVFTVEFSVCAgICAgICAgNSAgICAgICAvKiBSZXF1ZXN0IHlvdSBzdGFy dCBlbmNyeXB0aW5nICovCi0jZGVmaW5lIEVOQ1JZUFRfUkVRRU5EICAgICAgICAgIDYgICAgICAg LyogUmVxdWVzdCB5b3Ugc2VuZCBlbmNyeXB0aW5nICovCi0jZGVmaW5lIEVOQ1JZUFRfRU5DX0tF WUlEICAgICAgIDcKLSNkZWZpbmUgRU5DUllQVF9ERUNfS0VZSUQgICAgICAgOAotI2RlZmluZSBF TkNSWVBUX0NOVCAgICAgICAgICAgICA5Ci0KLSNkZWZpbmUgRU5DVFlQRV9BTlkgICAgICAgICAg ICAgMAotI2RlZmluZSBFTkNUWVBFX0RFU19DRkI2NCAgICAgICAxCi0jZGVmaW5lIEVOQ1RZUEVf REVTX09GQjY0ICAgICAgIDIKLSNkZWZpbmUgRU5DVFlQRV9ERVMzX0NGQjY0ICAgICAgMwotI2Rl ZmluZSBFTkNUWVBFX0RFUzNfT0ZCNjQgICAgICA0Ci0jZGVmaW5lIEVOQ1RZUEVfQ0FTVDVfNDBf Q0ZCNjQgIDgKLSNkZWZpbmUgRU5DVFlQRV9DQVNUNV80MF9PRkI2NCAgOQotI2RlZmluZSBFTkNU WVBFX0NBU1QxMjhfQ0ZCNjQgICAxMAotI2RlZmluZSBFTkNUWVBFX0NBU1QxMjhfT0ZCNjQgICAx MQotI2lmZGVmIEVOQ1RZUEVfQ05UCi0jdW5kZWYgRU5DVFlQRV9DTlQKLSNlbmRpZgotI2RlZmlu ZSBFTkNUWVBFX0NOVCAgICAgICAgICAgICAxMgotCi0jaWZkZWYgIEVOQ1JZUFRfTkFNRVMKLWNo YXIgKmVuY3J5cHRfbmFtZXNbXSA9IHsKLSAgICAgICAgIklTIiwgIlNVUFBPUlQiLCAiUkVQTFki LCAiU1RBUlQiLCAiRU5EIiwKLSAgICAgICAgIlJFUVVFU1QtU1RBUlQiLCAiUkVRVUVTVC1FTkQi LCAiRU5DLUtFWUlEIiwgIkRFQy1LRVlJRCIsCi0gICAgICAgIDAKLX07Ci1jaGFyICplbmN0eXBl X25hbWVzW10gPSB7Ci0gICAgIkFOWSIsCi0gICAgIkRFU19DRkI2NCIsICAgICAgICAgICAgICAg IC8qIFJGQyAyOTUyICovCi0gICAgIkRFU19PRkI2NCIsICAgICAgICAgICAgICAgIC8qIFJGQyAy OTUzICovCi0gICAgIkRFUzNfQ0ZCNjQiLCAgICAgICAgICAgICAgIC8qIFJGQyAyOTQ3ICovCi0g ICAgIkRFUzNfT0ZCNjQiLCAgICAgICAgICAgICAgIC8qIFJGQyAyOTQ4ICovCi0gICAgIlVOS05P V04tNSIsCi0gICAgIlVOS05PV04tNiIsCi0gICAgIlVOS05PV04tNyIsCi0gICAgIkNBU1Q1XzQw X0NGQjY0IiwgICAgICAgICAgIC8qIFJGQyAyOTUwICovCi0gICAgIkNBU1Q1XzQwX09GQjY0Iiwg ICAgICAgICAgIC8qIFJGQyAyOTQ5ICovCi0gICAgIkNBU1QxMjhfQ0ZCNjQiLCAgICAgICAgICAg IC8qIFJGQyAyOTUwKi8KLSAgICAiQ0FTVDEyOF9PRkI2NCIsICAgICAgICAgICAgLyogUkZDIDI5 NDkgKi8KLSAgICAwCi19OwotI2Vsc2UKLWV4dGVybiBjaGFyICplbmNyeXB0X25hbWVzW107Ci1l eHRlcm4gY2hhciAqZW5jdHlwZV9uYW1lc1tdOwotI2VuZGlmCi0KLSNkZWZpbmUgRU5DUllQVF9O QU1FX09LKHgpICAgICAgKCh1bnNpZ25lZCBpbnQpKHgpIDwgRU5DUllQVF9DTlQpCi0jZGVmaW5l IEVOQ1JZUFRfTkFNRSh4KSAgICAgIChFTkNSWVBUX05BTUVfT0soeCk/ZW5jcnlwdF9uYW1lc1t4 XToiVU5LTk9XTiIpCi0KLSNkZWZpbmUgRU5DVFlQRV9OQU1FX09LKHgpICAgICAgKCh1bnNpZ25l ZCBpbnQpKHgpIDwgRU5DVFlQRV9DTlQpCi0jZGVmaW5lIEVOQ1RZUEVfTkFNRSh4KSAgICAgIChF TkNUWVBFX05BTUVfT0soeCk/ZW5jdHlwZV9uYW1lc1t4XToiVU5LTk9XTiIpCi0KLS8qIEZvciBz ZXR0aW5nIHRoZSBzdGF0ZSBvZiB2YWxpZFVzZXIgKi8KLQotI2RlZmluZSBBVVRIX1JFSkVDVCAg ICAgMCAgICAgICAvKiBSZWplY3RlZCAqLwotI2RlZmluZSBBVVRIX1VOS05PV04gICAgMSAgICAg ICAvKiBXZSBkb24ndCBrbm93IHdobyBoZSBpcywgYnV0IGhlJ3Mgb2theSAqLwotI2RlZmluZSBB VVRIX09USEVSICAgICAgMiAgICAgICAvKiBXZSBrbm93IGhpbSwgYnV0IG5vdCBoaXMgbmFtZSAq LwotI2RlZmluZSBBVVRIX1VTRVIgICAgICAgMyAgICAgICAvKiBXZSBrbm93IGhlIG5hbWUgKi8K LSNkZWZpbmUgQVVUSF9WQUxJRCAgICAgIDQgICAgICAgLyogV2Uga25vdyBoaW0sIGFuZCBoZSBu ZWVkcyBubyBwYXNzd29yZCAqLwotCi0vKiBLZXJtaXQgT3B0aW9uIFN1Ym5lZ290aWF0aW9ucyAq LwotCi0jZGVmaW5lIEtFUk1JVF9TVEFSVCAgICAgIDAKLSNkZWZpbmUgS0VSTUlUX1NUT1AgICAg ICAgMQotI2RlZmluZSBLRVJNSVRfUkVRX1NUQVJUICAyCi0jZGVmaW5lIEtFUk1JVF9SRVFfU1RP UCAgIDMKLSNkZWZpbmUgS0VSTUlUX1NPUCAgICAgICAgNAotI2RlZmluZSBLRVJNSVRfUkVTUF9T VEFSVCA4Ci0jZGVmaW5lIEtFUk1JVF9SRVNQX1NUT1AgIDkKLQotLyogRm9yIFNFVCBURUxORVQg QVVUSCBIT1cgICovCi0jZGVmaW5lIFROX0FVVEhfSE9XX0FOWSAgICAgMAotI2RlZmluZSBUTl9B VVRIX0hPV19PTkVfV0FZIDEKLSNkZWZpbmUgVE5fQVVUSF9IT1dfTVVUVUFMICAyCi0KLS8qIEZv ciBTRVQgVEVMTkVUIEFVVEggRU5DUllQVCAqLwotI2RlZmluZSBUTl9BVVRIX0VOQ19BTlkgICAg IDAKLSNkZWZpbmUgVE5fQVVUSF9FTkNfTk9ORSAgICAxCi0jZGVmaW5lIFROX0FVVEhfRU5DX1RF TE9QVCAgMgotI2RlZmluZSBUTl9BVVRIX0VOQ19FWENIICAgIDMgIC8qIG5vdCB1c2VkIGluIEtl cm1pdCAqLwotI2RlZmluZSBUTl9BVVRIX0VOQ19UTFMgICAgIDQKLQotLyogVGVsbmV0IHByb3Rv Y29sIGZ1bmN0aW9ucyBkZWZpbmVkIGluIEMtS2VybWl0ICovCi0KLV9QUk9UT1RZUCggaW50IHRu X2luaSwgKHZvaWQpICk7ICAgICAgICAvKiBUZWxuZXQgcHJvdG9jb2wgc3VwcG9ydCAqLwotX1BS T1RPVFlQKCBpbnQgdG5fcmVzZXQsICh2b2lkKSk7Ci1fUFJPVE9UWVAoIGludCB0bl9zZXRfbW9k ZXMsICh2b2lkKSk7Ci1fUFJPVE9UWVAoIGludCB0bl9zb3B0LCAoaW50LCBpbnQpICk7Ci1fUFJP VE9UWVAoIGludCB0bl9kb29wLCAoQ0hBUiwgaW50LCBpbnQgKCopKGludCkgKSApOwotX1BST1RP VFlQKCBpbnQgdG5fc3R0eXAsICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgdG5fc25lbnYsIChD SEFSICosIGludCkgKSA7Ci1fUFJPVE9UWVAoIGludCB0bl9ybmVudiwgKENIQVIgKiwgaW50KSAp IDsKLV9QUk9UT1RZUCggaW50IHRuX3dhaXQsIChjaGFyICopICkgOwotX1BST1RPVFlQKCBpbnQg dG5fcHVzaCwgKHZvaWQpICkgOwotX1BST1RPVFlQKCBpbnQgdG5zbmRicmssICh2b2lkKSApOwot X1BST1RPVFlQKCBWT0lEIHRuX2RlYnVnLCAoY2hhciAqKSk7Ci1fUFJPVE9UWVAoIGludCB0bl9o ZXgsIChDSEFSICosIGludCwgQ0hBUiAqLCBpbnQpKTsKLV9QUk9UT1RZUCggdW5zaWduZWQgY2hh ciAqIHRuX2dldF9kaXNwbGF5LCAodm9pZCkpOwotI2lmZGVmIElLU19PUFRJT04KLV9QUk9UT1RZ UCggaW50IHRuX3Npa3MsIChpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBpa3Nfd2FpdCwgKGludCwg aW50KSApOwotI2VuZGlmIC8qIElLU19PUFRJT04gKi8KLSNpZmRlZiBDS19OQVdTCi1fUFJPVE9U WVAoIGludCB0bl9zbmF3cywgKHZvaWQpICk7Ci0jZW5kaWYgLyogQ0tfTkFXUyAqLwotI2lmZGVm IENLX1hESVNQTE9DCi1fUFJPVE9UWVAoIGludCB0bl9zeGRpc3Bsb2MsICh2b2lkKSApOwotI2Vu ZGlmIC8qIENLX1hESVNQTE9DICovCi0jaWZkZWYgQ0tfU05ETE9DCi1fUFJPVE9UWVAoIGludCB0 bl9zbmRsb2MsICh2b2lkKSApOwotI2VuZGlmIC8qIENLX1NORExPQyAqLwotI2lmZGVmIENLX0ZP UldBUkRfWAotLyogRnJvbSBYYXV0aC5oICovCi10eXBlZGVmIHN0cnVjdCB4YXV0aCB7Ci0gICAg dW5zaWduZWQgc2hvcnQgICBmYW1pbHk7Ci0gICAgdW5zaWduZWQgc2hvcnQgICBhZGRyZXNzX2xl bmd0aDsKLSAgICBjaGFyICAgICAgICAgICAgKmFkZHJlc3M7Ci0gICAgdW5zaWduZWQgc2hvcnQg ICBudW1iZXJfbGVuZ3RoOwotICAgIGNoYXIgICAgICAgICAgICAqbnVtYmVyOwotICAgIHVuc2ln bmVkIHNob3J0ICAgbmFtZV9sZW5ndGg7Ci0gICAgY2hhciAgICAgICAgICAgICpuYW1lOwotICAg IHVuc2lnbmVkIHNob3J0ICAgZGF0YV9sZW5ndGg7Ci0gICAgY2hhciAgICAgICAgICAgICpkYXRh OwotfSBYYXV0aDsKLQotI2luY2x1ZGUgICA8c3RkaW8uaD4KLQotLyogZnJvbSBYLmggKi8KLSNk ZWZpbmUgRmFtaWx5SW50ZXJuZXQgICAgICAgICAgMAotI2RlZmluZSBGYW1pbHlERUNuZXQgICAg ICAgICAgICAxCi0jZGVmaW5lIEZhbWlseUNoYW9zICAgICAgICAgICAgIDIKLQotIyBkZWZpbmUg RmFtaWx5TG9jYWwgKDI1NikgICAgICAvKiBub3QgcGFydCBvZiBYIHN0YW5kYXJkIChpLmUuIFgu aCkgKi8KLSMgZGVmaW5lIEZhbWlseVdpbGQgICg2NTUzNSkKLSMgZGVmaW5lIEZhbWlseU5ldG5h bWUgICAgKDI1NCkgICAvKiBub3QgcGFydCBvZiBYIHN0YW5kYXJkICovCi0jIGRlZmluZSBGYW1p bHlLcmI1UHJpbmNpcGFsICgyNTMpIC8qIEtlcmJlcm9zIDUgcHJpbmNpcGFsIG5hbWUgKi8KLSMg ZGVmaW5lIEZhbWlseUxvY2FsSG9zdCAoMjUyKSAgLyogZm9yIGxvY2FsIG5vbi1uZXQgYXV0aGVu dGljYXRpb24gKi8KLWNoYXIgKlhhdUZpbGVOYW1lKCk7Ci0KLVhhdXRoICpYYXVSZWFkQXV0aCgK LUZJTEUqICAgLyogYXV0aF9maWxlICovCi0pOwotCi1pbnQgWGF1V3JpdGVBdXRoKAotRklMRSog ICAgICAgICAgIC8qIGF1dGhfZmlsZSAqLywKLVhhdXRoKiAgICAgICAgICAvKiBhdXRoICovCi0p OwotCi1YYXV0aCAqWGF1R2V0QXV0aEJ5TmFtZSgKLWNvbnN0IGNoYXIqICAgICAvKiBkaXNwbGF5 X25hbWUgKi8KLSk7Ci0KLVhhdXRoICpYYXVHZXRBdXRoQnlBZGRyKAotdW5zaWduZWQgaW50ICAg IC8qIGZhbWlseSAqLywKLXVuc2lnbmVkIGludCAgICAvKiBhZGRyZXNzX2xlbmd0aCAqLywKLWNv bnN0IGNoYXIqICAgICAvKiBhZGRyZXNzICovLAotdW5zaWduZWQgaW50ICAgIC8qIG51bWJlcl9s ZW5ndGggKi8sCi1jb25zdCBjaGFyKiAgICAgLyogbnVtYmVyICovLAotdW5zaWduZWQgaW50ICAg IC8qIG5hbWVfbGVuZ3RoICovLAotY29uc3QgY2hhciogICAgIC8qIG5hbWUgKi8KLSk7Ci0KLXZv aWQgWGF1RGlzcG9zZUF1dGgoCi1YYXV0aCogICAgICAgICAgLyogYXV0aCAqLwotKTsKLQotCi1f UFJPVE9UWVAoIGludCBmd2R4X2NyZWF0ZV9saXN0ZW5fc29ja2V0LChpbnQpKTsKLV9QUk9UT1RZ UCggaW50IGZ3ZHhfb3Blbl9jbGllbnRfY2hhbm5lbCwoaW50KSk7Ci1fUFJPVE9UWVAoIGludCBm d2R4X29wZW5fc2VydmVyX2NoYW5uZWwsKFZPSUQpKTsKLV9QUk9UT1RZUCggaW50IGZ3ZHhfY2xv c2VfY2hhbm5lbCwoaW50KSk7Ci1fUFJPVE9UWVAoIGludCBmd2R4X3dyaXRlX2RhdGFfdG9fY2hh bm5lbCwoaW50LCBjaGFyICosaW50KSk7Ci1fUFJPVE9UWVAoIGludCBmd2R4X3NlbmRfZGF0YV9m cm9tX2NoYW5uZWwsKGludCwgY2hhciAqLGludCkpOwotX1BST1RPVFlQKCBpbnQgZndkeF9jbG9z ZV9hbGwsKFZPSUQpKTsKLV9QUk9UT1RZUCggaW50IGZ3ZHhfdG5fc2IsKHVuc2lnbmVkIGNoYXIg KiwgaW50KSk7Ci1fUFJPVE9UWVAoIGludCB0bl9zbmRmd2R4LCAodm9pZCkpOwotX1BST1RPVFlQ KCBpbnQgZndkeF9zZW5kX2Nsb3NlLChpbnQpKTsKLV9QUk9UT1RZUCggaW50IGZ3ZHhfc2VuZF9v cGVuLChpbnQpKTsKLV9QUk9UT1RZUCggaW50IGZ3ZHhfY2xpZW50X3JlcGx5X29wdGlvbnMsKGNo YXIgKiwgaW50KSk7Ci1fUFJPVE9UWVAoIGludCBmd2R4X3NlbmRfb3B0aW9ucywoVk9JRCkpOwot X1BST1RPVFlQKCBWT0lEIGZ3ZHhfY2hlY2tfc29ja2V0cywoZmRfc2V0ICopKTsKLV9QUk9UT1RZ UCggaW50IGZ3ZHhfaW5pdF9mZF9zZXQsKGZkX3NldCAqKSk7Ci1fUFJPVE9UWVAoIGludCBmd2R4 X2F1dGhvcml6ZV9jaGFubmVsLCAoaW50LCB1bnNpZ25lZCBjaGFyICosIGludCkpOwotX1BST1RP VFlQKCBpbnQgZndkeF9jcmVhdGVfZmFrZV94YXV0aCwgKGNoYXIgKiwgaW50LCBpbnQpKTsKLV9Q Uk9UT1RZUCggaW50IGZ3ZHhfc2VuZF94YXV0aF90b194c2VydmVyLCAoaW50LCB1bnNpZ25lZCBj aGFyICosIGludCBsZW4pKTsKLV9QUk9UT1RZUCggaW50IGZ3ZHhfc2VydmVyX2F2YWlsLCAoVk9J RCkpOwotX1BST1RPVFlQKCBpbnQgZndkeF9wYXJzZV9kaXNwbGF5bmFtZSwgKGNoYXIgKiwgaW50 ICosIGNoYXIgKiosIGludCAqLCBpbnQgKiwgY2hhciAqKikpOwotCi0jaWZkZWYgTlQKLV9QUk9U T1RZUCggVk9JRCBmd2R4X3RocmVhZCwoVk9JRCAqKSk7Ci0jZW5kaWYgLyogTlQgKi8KLSNlbmRp ZiAvKiBDS19GT1JXQVJEX1ggKi8KLQotI2lmZGVmIFROX0NPTVBPUlQKLSNkZWZpbmUgVE5DX0My U19TSUdOQVRVUkUgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgVE5DX0MyU19TRVRfQkFVRFJB VEUgICAgICAgICAgICAgIDEKLSNkZWZpbmUgVE5DX0MyU19TRVRfREFUQVNJWkUgICAgICAgICAg ICAgIDIKLSNkZWZpbmUgVE5DX0MyU19TRVRfUEFSSVRZICAgICAgICAgICAgICAgIDMKLSNkZWZp bmUgVE5DX0MyU19TRVRfU1RPUFNJWkUgICAgICAgICAgICAgIDQKLSNkZWZpbmUgVE5DX0MyU19T RVRfQ09OVFJPTCAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgVE5DX0MyU19OT1RJRllfTElORVNU QVRFICAgICAgICAgIDYKLSNkZWZpbmUgVE5DX0MyU19OT1RJRllfTU9ERU1TVEFURSAgICAgICAg IDcKLSNkZWZpbmUgVE5DX0MyU19GTE9XX1NVU1BFTkQgICAgICAgICAgICAgIDgKLSNkZWZpbmUg VE5DX0MyU19GTE9XX1JFU1VNRSAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgVE5DX0MyU19TRVRf TFNfTUFTSyAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgVE5DX0MyU19TRVRfTVNfTUFTSyAgICAg ICAgICAgICAgMTEKLSNkZWZpbmUgVE5DX0MyU19QVVJHRSAgICAgICAgICAgICAgICAgICAgMTIK LSNkZWZpbmUgVE5DX1MyQ19TSUdOQVRVUkUgICAgICAgICAgICAgICAxMDAKLSNkZWZpbmUgVE5D X1MyQ19TRVRfQkFVRFJBVEUgICAgICAgICAgICAxMDEKLSNkZWZpbmUgVE5DX1MyQ19TRVRfREFU QVNJWkUgICAgICAgICAgICAxMDIKLSNkZWZpbmUgVE5DX1MyQ19TRVRfUEFSSVRZICAgICAgICAg ICAgICAxMDMKLSNkZWZpbmUgVE5DX1MyQ19TRVRfU1RPUFNJWkUgICAgICAgICAgICAxMDQKLSNk ZWZpbmUgVE5DX1MyQ19TRVRfQ09OVFJPTCAgICAgICAgICAgICAxMDUKLSNkZWZpbmUgVE5DX1My Q19TRU5EX0xTICAgICAgICAgICAgICAgICAxMDYKLSNkZWZpbmUgVE5DX1MyQ19TRU5EX01TICAg ICAgICAgICAgICAgICAxMDcKLSNkZWZpbmUgVE5DX1MyQ19GTE9XX1NVU1BFTkQgICAgICAgICAg ICAxMDgKLSNkZWZpbmUgVE5DX1MyQ19GTE9XX1JFU1VNRSAgICAgICAgICAgICAxMDkKLSNkZWZp bmUgVE5DX1MyQ19TRVRfTFNfTUFTSyAgICAgICAgICAgICAxMTAKLSNkZWZpbmUgVE5DX1MyQ19T RVRfTVNfTUFTSyAgICAgICAgICAgICAxMTEKLSNkZWZpbmUgVE5DX1MyQ19QVVJHRSAgICAgICAg ICAgICAgICAgICAxMTIKLQotLyogVGhlIENPTVBPUlQgdmFsdWVzIGFyZSBub3QgZGVmaW5lZCBp biBSRkMgMjIxNyAqLwotI2RlZmluZSBUTkNfQlBTX1JFUVVFU1QgICAgICAgICAgICAgICAgICAw Ci0jZGVmaW5lIFROQ19CUFNfMzAwICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgVE5D X0JQU182MDAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBUTkNfQlBTXzEyMDAgICAg ICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFROQ19CUFNfMjQwMCAgICAgICAgICAgICAgICAg ICAgIDYKLSNkZWZpbmUgVE5DX0JQU180ODAwICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmlu ZSBUTkNfQlBTXzk2MDAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFROQ19CUFNfMTQ0 MDAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgVE5DX0JQU18xOTIwMCAgICAgICAgICAg ICAgICAgICAxMAotI2RlZmluZSBUTkNfQlBTXzI4ODAwICAgICAgICAgICAgICAgICAgIDExCi0j ZGVmaW5lIFROQ19CUFNfMzg0MDAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgVE5DX0JQ U181NzYwMCAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBUTkNfQlBTXzExNTIwMCAgICAg ICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFROQ19CUFNfMjMwNDAwICAgICAgICAgICAgICAgICAg MTUKLSNkZWZpbmUgVE5DX0JQU180NjA4MDAgICAgICAgICAgICAgICAgICAxNgotCi0jZGVmaW5l IFROQ19EU19SRVFVRVNUICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgVE5DX0RTXzUgICAg ICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBUTkNfRFNfNiAgICAgICAgICAgICAgICAg ICAgICAgICA2Ci0jZGVmaW5lIFROQ19EU183ICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNk ZWZpbmUgVE5DX0RTXzggICAgICAgICAgICAgICAgICAgICAgICAgOAotCi0jZGVmaW5lIFROQ19Q QVJfUkVRVUVTVCAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgVE5DX1BBUl9OT05FICAgICAg ICAgICAgICAgICAgICAgMQotI2RlZmluZSBUTkNfUEFSX09ERCAgICAgICAgICAgICAgICAgICAg ICAyCi0jZGVmaW5lIFROQ19QQVJfRVZFTiAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUg VE5DX1BBUl9NQVJLICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBUTkNfUEFSX1NQQUNF ICAgICAgICAgICAgICAgICAgICA1Ci0KLSNkZWZpbmUgVE5DX1NCX1JFUVVFU1QgICAgICAgICAg ICAgICAgICAgMAotI2RlZmluZSBUTkNfU0JfMSAgICAgICAgICAgICAgICAgICAgICAgICAxCi0j ZGVmaW5lIFROQ19TQl8xXzUgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgVE5DX1NC XzIgICAgICAgICAgICAgICAgICAgICAgICAgMgotCi0jZGVmaW5lIFROQ19DVExfT0ZMT1dfUkVR VUVTVCAgICAgICAgICAgIDAKLSNkZWZpbmUgVE5DX0NUTF9PRkxPV19OT05FICAgICAgICAgICAg ICAgMQotI2RlZmluZSBUTkNfQ1RMX09GTE9XX1hPTl9YT0ZGICAgICAgICAgICAyCi0jZGVmaW5l IFROQ19DVExfT0ZMT1dfUlRTX0NUUyAgICAgICAgICAgIDMKLSNkZWZpbmUgVE5DX0NUTF9PRkxP V19EQ0QgICAgICAgICAgICAgICAxNwotI2RlZmluZSBUTkNfQ1RMX09GTE9XX0RTUiAgICAgICAg ICAgICAgIDE5Ci0KLSNkZWZpbmUgVE5DX0NUTF9CUkVBS19SRVFVRVNUICAgICAgICAgICAgNAot I2RlZmluZSBUTkNfQ1RMX0JSRUFLX09OICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFROQ19D VExfQlJFQUtfT0ZGICAgICAgICAgICAgICAgIDYKLQotI2RlZmluZSBUTkNfQ1RMX0RUUl9SRVFV RVNUICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFROQ19DVExfRFRSX09OICAgICAgICAgICAgICAg ICAgIDgKLSNkZWZpbmUgVE5DX0NUTF9EVFJfT0ZGICAgICAgICAgICAgICAgICAgOQotCi0jZGVm aW5lIFROQ19DVExfUlRTX1JFUVVFU1QgICAgICAgICAgICAgMTAKLSNkZWZpbmUgVE5DX0NUTF9S VFNfT04gICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBUTkNfQ1RMX1JUU19PRkYgICAgICAg ICAgICAgICAgIDEyCi0KLSNkZWZpbmUgVE5DX0NUTF9JRkxPV19SRVFVRVNUICAgICAgICAgICAx MwotI2RlZmluZSBUTkNfQ1RMX0lGTE9XX05PTkUgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFRO Q19DVExfSUZMT1dfWE9OX1hPRkYgICAgICAgICAgMTUKLSNkZWZpbmUgVE5DX0NUTF9JRkxPV19S VFNfQ1RTICAgICAgICAgICAxNgotI2RlZmluZSBUTkNfQ1RMX0lGTE9XX0RUUiAgICAgICAgICAg ICAgIDE4Ci0KLSNkZWZpbmUgVE5DX01TX0RBVEFfUkVBRFkgICAgICAgICAgICAgICAgMQotI2Rl ZmluZSBUTkNfTVNfT1ZFUlJVTl9FUlJPUiAgICAgICAgICAgICAyCi0jZGVmaW5lIFROQ19NU19Q QVJJVFlfRVJST1IgICAgICAgICAgICAgIDQKLSNkZWZpbmUgVE5DX01TX0ZSQU1FX0VSUk9SICAg ICAgICAgICAgICAgOAotI2RlZmluZSBUTkNfTVNfQlJFQUtfRVJST1IgICAgICAgICAgICAgIDE2 Ci0jZGVmaW5lIFROQ19NU19IUl9FTVBUWSAgICAgICAgICAgICAgICAgMzIKLSNkZWZpbmUgVE5D X01TX1NSX0VNUFRZICAgICAgICAgICAgICAgICA2NAotI2RlZmluZSBUTkNfTVNfVElNRU9VVF9F UlJPUiAgICAgICAgICAgMTI4Ci0KLSNkZWZpbmUgVE5DX01TX0NUU19ERUxUQSAgICAgICAgICAg ICAgICAgMQotI2RlZmluZSBUTkNfTVNfRFNSX0RFTFRBICAgICAgICAgICAgICAgICAyCi0jZGVm aW5lIFROQ19NU19FREdFX1JJTkcgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgVE5DX01TX1JM U0RfREVMVEEgICAgICAgICAgICAgICAgOAotI2RlZmluZSBUTkNfTVNfQ1RTX1NJRyAgICAgICAg ICAgICAgICAgIDE2Ci0jZGVmaW5lIFROQ19NU19EU1JfU0lHICAgICAgICAgICAgICAgICAgMzIK LSNkZWZpbmUgVE5DX01TX1JJX1NJRyAgICAgICAgICAgICAgICAgICA2NAotI2RlZmluZSBUTkNf TVNfUkxTRF9TSUcgICAgICAgICAgICAgICAgMTI4Ci0KLSNkZWZpbmUgVE5DX1BVUkdFX1JFQ0VJ VkUgICAgICAgICAgICAgICAgMQotI2RlZmluZSBUTkNfUFVSR0VfVFJBTlNNSVQgICAgICAgICAg ICAgICAyCi0jZGVmaW5lIFROQ19QVVJHRV9CT1RIICAgICAgICAgICAgICAgICAgIDMKLQotI2lm ZGVmICBUTkNfTkFNRVMKLWNoYXIgKnRuY19uYW1lc1tdID0gewotICAgICJTSUdOQVRVUkUiLCAi U0VULUJBVURSQVRFIiwgIlNFVC1EQVRBUkFURSIsICJTRVQtUEFSSVRZIiwgIlNFVC1TVE9QU0la RSIsCi0gICAgIlNFVC1DT05UUk9MIiwgIk5PVElGWS1MSU5FU1RBVEUiLCAiTk9USUZZLU1PREVN U1RBVEUiLAotICAgICJGTE9XQ09OVFJPTC1TVVNQRU5EIiwgIkZMT1dDT05UUk9MLVJFU1VNRSIs ICJTRVQtTElORVNUQVRFLU1BU0siLAotICAgICJTRVQtTU9ERU1TVEFURS1NQVNLIiwgIlBVUkdF LURBVEEiLAotICAgIDAKLX07Ci0jZWxzZQotZXh0ZXJuIGNoYXIgKnRuY19uYW1lc1tdOwotI2Vu ZGlmCi0KLSNkZWZpbmUgVE5DX05BTUVfT0soeCkgICgoeCkgPj0gMCAmJiAoeCkgPD0gMTIgfHwg KHgpID49IDEwMCAmJiAoeCkgPD0gMTEyKQotI2RlZmluZSBUTkNfTkFNRSh4KSBcCi0gICAgICAg ICAgICAgKFROQ19OQU1FX09LKHgpP3RuY19uYW1lc1soeCk+PTEwMD8oeCktMTAwOih4KV06IlVO S05PV04iKQotCi1fUFJPVE9UWVAoaW50IHRuY19pbml0LCh2b2lkKSk7Ci1fUFJPVE9UWVAoaW50 IHRuY193YWl0LChDSEFSICosIGludCkpOwotX1BST1RPVFlQKGludCB0bmNfdG5fc2IsKENIQVIg KixpbnQpKTsKLV9QUk9UT1RZUChDT05TVCBjaGFyICogdG5jX2dldF9zaWduYXR1cmUsICh2b2lk KSk7Ci1fUFJPVE9UWVAoaW50IHRuY19zZW5kX3NpZ25hdHVyZSwgKGNoYXIgKikpOwotX1BST1RP VFlQKGludCB0bmNfc2V0X2JhdWQsKGxvbmcpKTsKLV9QUk9UT1RZUChpbnQgdG5jX2dldF9iYXVk LCh2b2lkKSk7Ci1fUFJPVE9UWVAoaW50IHRuY19zZXRfZGF0YXNpemUsKGludCkpOwotX1BST1RP VFlQKGludCB0bmNfZ2V0X2RhdGFzaXplLCh2b2lkKSk7Ci1fUFJPVE9UWVAoaW50IHRuY19zZXRf cGFyaXR5LChpbnQpKTsKLV9QUk9UT1RZUChpbnQgdG5jX2dldF9wYXJpdHksKHZvaWQpKTsKLV9Q Uk9UT1RZUChpbnQgdG5jX3NldF9zdG9wc2l6ZSwoaW50KSk7Ci1fUFJPVE9UWVAoaW50IHRuY19n ZXRfc3RvcHNpemUsKHZvaWQpKTsKLV9QUk9UT1RZUChpbnQgdG5jX3NldF9vZmxvdywoaW50KSk7 Ci1fUFJPVE9UWVAoaW50IHRuY19nZXRfb2Zsb3csKHZvaWQpKTsKLV9QUk9UT1RZUChpbnQgdG5j X3NldF9pZmxvdywoaW50KSk7Ci1fUFJPVE9UWVAoaW50IHRuY19nZXRfaWZsb3csKHZvaWQpKTsK LV9QUk9UT1RZUChpbnQgdG5jX3NldF9icmVha19zdGF0ZSwoaW50KSk7Ci1fUFJPVE9UWVAoaW50 IHRuY19nZXRfYnJlYWtfc3RhdGUsKHZvaWQpKTsKLV9QUk9UT1RZUChpbnQgdG5jX3NldF9kdHJf c3RhdGUsKGludCkpOwotX1BST1RPVFlQKGludCB0bmNfZ2V0X2R0cl9zdGF0ZSwodm9pZCkpOwot X1BST1RPVFlQKGludCB0bmNfc2V0X3J0c19zdGF0ZSwoaW50KSk7Ci1fUFJPVE9UWVAoaW50IHRu Y19nZXRfcnRzX3N0YXRlLCh2b2lkKSk7Ci1fUFJPVE9UWVAoaW50IHRuY19zZXRfbHNfbWFzaywo aW50KSk7Ci1fUFJPVE9UWVAoaW50IHRuY19nZXRfbHNfbWFzaywodm9pZCkpOwotX1BST1RPVFlQ KGludCB0bmNfZ2V0X2xzLCh2b2lkKSk7Ci1fUFJPVE9UWVAoaW50IHRuY19zZXRfbXNfbWFzaywo aW50KSk7Ci1fUFJPVE9UWVAoaW50IHRuY19nZXRfbXNfbWFzaywodm9pZCkpOwotX1BST1RPVFlQ KGludCB0bmNfZ2V0X21zLCh2b2lkKSk7Ci1fUFJPVE9UWVAoaW50IHRuY19zZW5kX3B1cmdlX2Rh dGEsKGludCkpOwotX1BST1RPVFlQKGludCB0bmNfZmxvd19zdXNwZW5kZWQsKHZvaWQpKTsKLV9Q Uk9UT1RZUChpbnQgdG5jX3N1c3BlbmRfZmxvdywodm9pZCkpOwotX1BST1RPVFlQKGludCB0bmNf cmVzdW1lX2Zsb3csKHZvaWQpKTsKLQotLyogVGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSB0byBi ZSBjYWxsZWQgYnkgY2s/dGlvLmMgcm91dGluZXMgKi8KLV9QUk9UT1RZUChpbnQgdG5zZXRmbG93 LChpbnQpKTsKLV9QUk9UT1RZUChpbnQgdG5zZXR0aW5ncywoaW50LGludCkpOwotX1BST1RPVFlQ KGludCB0bmdtZG0sKHZvaWQpKTsKLV9QUk9UT1RZUChpbnQgdG5zbmRiLChsb25nKSk7Ci1fUFJP VE9UWVAoaW50IGlzdG5jb21wb3J0LCh2b2lkKSk7Ci1fUFJPVE9UWVAoaW50IHRuX3NuZGNvbXBv cnQsKHZvaWQpKTsKLSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0KLSNpZm5kZWYgQ0tDVEVMX0Mg ICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGVzZSBhcmUgZGVjbGFyZWQgaW4gY2tjdGVsLmMg Ki8KLWV4dGVybiBpbnQgdG5faW5pdDsgICAgICAgICAgICAgICAgICAgICAvKiBUZWxuZXQgcHJv dG9jb2wgaW5pdGlhbGl6ZWQgZmxhZyAqLwotZXh0ZXJuIGNoYXIgKnRuX3Rlcm07ICAgICAgICAg ICAgICAgICAgIC8qIFRlcm1pbmFsIHR5cGUgb3ZlcnJpZGUgKi8KLWV4dGVybiBpbnQgc3N0ZWxu ZXQ7ICAgICAgICAgICAgICAgICAgICAvKiBTZXJ2ZXIgc2lkZSB0ZWxuZXQ/ICovCi1leHRlcm4g aW50IHRuX2RlYjsgICAgICAgICAgICAgICAgICAgICAgLyogVGVsbmV0IG9wdGlvbiBkZWJ1Z2dp bmcgZmxhZyAqLwotZXh0ZXJuIGludCB0bl9hdXRoX2tyYjVfZGVzX2J1ZzsgICAgICAgIC8qIFRl bG5ldCBCVUcgKi8KLSNlbmRpZiAvKiBDS0NURUxfQyAqLwotCi0jZGVmaW5lIFROX01TR19MRU4g MTIyOTIKLSNlbmRpZiAvKiBUTkNPREUgKi8KLSNlbmRpZiAvKiBDS0NURUxfSCAqLwoKZGlmZiAt LWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjdW5pLmMgYi9j a2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3VuaS5jCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAxZjU4NTQ4Li4wMDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4wLjMw Mi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjdW5pLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjE3 MyArMCwwIEBACi1jaGFyICogY2tjdW5pID0gIlVuaWNvZGUgc3VwcG9ydCA5LjAuMTE1LCAxNiBP Y3QgMjAwOSI7Ci0KLSNpZmRlZiBPUzIKLSNkZWZpbmUgS0VSTUlURk9OVAotI2VuZGlmIC8qIE9T MiAqLwotCi0vKiAgQyBLIEMgVSBOIEkgLiBDICAtLSAgVW5pY29kZS9UZXJtaW5hbCBjaGFyYWN0 ZXItc2V0IHRyYW5zbGF0aW9ucyAgKi8KLQotLyoKLSAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDA5 LAotICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3 IFlvcmsuCi0gICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlO Ry5UWFQgZmlsZSBvciB0aGUKLSAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9k dWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KLQotICBBdXRob3JzOgotICAgIEZy YW5rIGRhIENydXogPGZkY0Bjb2x1bWJpYS5lZHU+Ci0gICAgICBUaGUgS2VybWl0IFByb2plY3Qs IENvbHVtYmlhIFVuaXZlcnNpdHksIE5ldyBZb3JrIENpdHkuCi0gICAgSmVmZnJleSBFIEFsdG1h biA8amFsdG1hbkBzZWN1cmUtZW5kcG9pbnRzLmNvbT4KLSAgICAgIFNlY3VyZSBFbmRwb2ludHMg SW5jLiwgTmV3IFlvcmsgQ2l0eQotCi0gIEZ1bmN0aW9ucyB1X2JsYWgoKSB0cmFuc2xhdGUgZnJv bSBibGFoIHRvIFVuaWNvZGUgKGluY29taW5nIG1hdGVyaWFsKS4KLSAgRnVuY3Rpb25zIHR4X2Js YWgoKSB0cmFuc2xhdGUgZnJvbSBVbmljb2RlIHRvIGJsYWggKGtleXN0cm9rZXMpLgotICBGdW5j dGlvbiBwb2ludGVycyBhcmUga2VwdCBpbiBwYXJhbGxlbCBhcnJheXMgaW5kZXhlZCBieSBUWF9i bGFoIHZhbHVlcwotICBkZWZpbmVkIGluIGNrY3VuaS5oLiAgIE5PVEU6IHR4X2RlY3NwZWMgYW5k IHR4X2RlY3RlY2ggYXJlIHVuZGVmaW5lZCBzaW5jZQotICB0aGVzZSBjaGFyYWN0ZXIgc2V0cyBh cmUgbmV2ZXIgdHlwZWQsIG9ubHkgZGlzcGxheWVkLgotCi0gIFRoZSBibGFoX3UoKSByb3V0aW5l cyBhY2NlcHQgYW4gdW5zaWduZWQgY2hhcmFjdGVyIHZhbHVlIGluIGNoYXJhY3Rlci1zZXQKLSAg YmxhaCwgYW5kIHJldHVybiB0aGUgVW5pY29kZSB0cmFuc2xhdGlvbiwgb3IgMHhmZmZkIGlmIHRo ZSBjaGFyYWN0ZXIgaXMgbm90Ci0gIGRlZmluZWQgaW4gVW5pY29kZS4gIFRoZSA4dGggYml0IG9m IHRoZSBhcmd1bWVudCBzaG91bGQgYmUgaWdub3JlZCwgYWBsYSBJU08KLSAgNDg3MyBhbmQgMjAy Mi4KLQotICBUaGUgdHhfYmxhaCgpIHJvdXRpbmVzIGFjY2VwdCBhIHVuaWNvZGUgdmFsdWUgYW5k IHJldHVybiB0aGUgdmFsdWUgb2YgdGhlCi0gIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVyIGluIGNo YXJhY3Rlci1zZXQgYmxhaCwgb3IgZWxzZSAtMSBpZiB0aGUgY2hhcmFjdGVyCi0gIGRvZXMgbm90 IGV4aXN0IGluIGJsYWguICBJbiB0aGlzIGNhc2UsIHRoZSBmdWxsIDgtYml0IHZhbHVlIGlzIHJl dHVybmVkLAotICBzaW5jZSBJU08gMjAyMiBvbmx5IHdvcmtzIGluIHRoZSBob3N0LXRvLXRlcm1p bmFsIGRpcmVjdGlvbi4KLQotICBOT1RFOiBLRVJNSVRGT05UIHNob3VsZCBiZSBkZWZpbmVkIG9u bHkgaWYgd2UgYXJlIHVzaW5nIHRoZSBuZXcgKHN0aWxsCi0gIGh5cG90aGV0aWNhbCkgS2VybWl0 IGZvbnQgdGhhdCBoYXMgYWxsIHRoZSBWVC9IZWF0aC9XeXNlL1RWSSBncmFwaGljCi0gIGNoYXJh Y3RlcnMgaW4gaXQuICBJTVBPUlRBTlQ6IGFsbCBLZXJtaXRmb250IGNvZGUgcG9pbnRzIG5lZWQg dXBkYXRpbmcgdG8KLSAgdGhlIHZhbHVlcyBpbiB0aGUgZmluYWwgcHJvcG9zYWwgdG8gdGhlIFVU Qy4KLQotICBMQVRFUiBOT1RFOiBUaGUgbmVlZGVkIGNoYXJhY3RlcnMgd2VyZSBhcHByb3ZlZCBm b3IgVW5pY29kZSAzLjEsIGFuZAotICB0aGVyZWZvcmUgbm90aGluZyBzcGVjaWFsIHNob3VsZCBi ZSByZXF1aXJlZCB0byB1c2UgdGhlbSwgZXhjZXB0IHRoYXQgaXQKLSAgd2lsbCB0YWtlIHNvbWUg dGltZSBmb3IgdGhlbSB0byBzaG93IHVwIGluIGNvbW1lcmNpYWwgZm9udHMuCi0KLSAgVE8gRE86 IEEgbG90IG9mIHRoZSBmdW5jdGlvbnMgY2FuIGJlIHRpZ2h0ZW5lZCB1cCAtLSB1c2UgcmFuZ2Vz IHdoZW4KLSAgcG9zc2libGUsIHNvcnQgc3dpdGNoIHN0YXRlbWVudHMgaW4gb3JkZXIgb2YgZnJl cXVlbmN5LCBldGMuCi0qLwotI2luY2x1ZGUgImNrY3N5bS5oIiAgICAgICAgICAgICAgICAgICAg IC8qIEluY2x1ZGVzLi4uICovCi0jaW5jbHVkZSAiY2tjZGViLmgiCi0jaW5jbHVkZSAiY2tja2Vy LmgiCi0jaW5jbHVkZSAiY2t1Y21kLmgiCi0jaW5jbHVkZSAiY2tjeGxhLmgiCi0jaW5jbHVkZSAi Y2t1eGxhLmgiCi0KLSNpZmRlZiBVTklDT0RFCi0KLSNpZmRlZiBPUzIKLS8qCi0gIFRoaXMgbWF0 ZXJpYWwgaXMgbmVlZGVkIGZvciB0aGUgaW50ZWdyYXRpb24gb2YgVGV4dFBTIGludG8gS2VybWl0 IDk1LgotICBXaGVuIHByaW50aW5nIGEgZmlsZSB3ZSB1c2UgdGhlIFNFVCBGSUxFIENIQVJBQ1RF Ui1TRVQgdmFsdWUgYXMgdGhlIGlucHV0Ci0gIGNoYXJhY3Rlci1zZXQgYW5kIHRoZW4gY29udmVy dCBpdCB0byB0aGUgc3BlY2lhbCBMYXRpbjEgc2V0IGNhbGxlZAotICBDb3VyaWVyTGF0aW4xIHVz aW5nIHRoZSBVbmljb2RlIHRyYW5zbGF0aW9uIGZ1bmN0aW9ucy4KLSovCi1zdHJ1Y3QgX3BhaXIg eyBpbnQgdHg7IGludCBmYzsgfSBUWEZDW10gPSB7Ci0gICAgVFhfQVNDSUksICAgICAgIEZDX1VT QVNDSUksCi0gICAgVFhfQlJJVElTSCwgICAgIEZDX1VLQVNDSUksCi0gICAgVFhfQ05fRlJFTkNI LCAgIEZDX0ZDQVNDSUksCi0gICAgVFhfQ1A0MzcsICAgICAgIEZDX0NQNDM3LAotICAgIFRYX0NQ ODUwLCAgICAgICBGQ19DUDg1MCwKLSAgICBUWF9DUDg1MiwgICAgICAgRkNfQ1A4NTIsCi0gICAg VFhfQ1A4NTcsICAgICAgIC0yLAotICAgIFRYX0NQODYyLCAgICAgICBGQ19DUDg2MiwKLSAgICBU WF9DUDg2NCwgICAgICAgLTIsCi0gICAgVFhfQ1A4NjYsICAgICAgIEZDX0NQODY2LAotICAgIFRY X0NQODY5LCAgICAgICAtMiwKLSAgICBUWF9DVUJBTiwgICAgICAgLTIsCi0gICAgVFhfQ1pFQ0gs ICAgICAgIC0yLAotICAgIFRYX0RBTklTSCwgICAgICAtMiwKLSAgICBUWF9ERUNNQ1MsICAgICAg RkNfREVDTUNTLAotICAgIFRYX0RFQ1NQRUMsICAgICAtMiwgICAgICAgICAgICAgLyogd2hpbGUg ZGVmaW5lZCwgbm90IGluIGZjcyB0YWJsZXMgKi8KLSAgICBUWF9ERUNURUNILCAgICAgLTIsICAg ICAgICAgICAgIC8qIHdoaWxlIGRlZmluZWQsIG5vdCBpbiBmY3MgdGFibGVzICovCi0gICAgVFhf REdJLCAgICAgICAgIEZDX0RHTUNTLAotICAgIFRYX0RVVENILCAgICAgICBGQ19EVUFTQ0lJLAot ICAgIFRYX0ZJTk5JU0gsICAgICBGQ19GSUFTQ0lJLAotICAgIFRYX0ZSRU5DSCwgICAgICBGQ19G UkFTQ0lJLAotICAgIFRYX0dFUk1BTiwgICAgICBGQ19HRUFTQ0lJLAotICAgIFRYX0hFNywgICAg ICAgICBGQ19IRTcsCi0gICAgVFhfSFBSOCwgICAgICAgIEZDX0hQUjgsCi0gICAgVFhfSFVOR0FS SUFOLCAgIEZDX0hVQVNDSUksCi0gICAgVFhfSVRBTElBTiwgICAgIEZDX0lUQVNDSUksCi0gICAg VFhfSjIwMVIsICAgICAgIC0yLAotICAgIFRYX0oyMDFLLCAgICAgICAtMiwKLSAgICBUWF9LT0k3 LCAgICAgICAgRkNfS09JNywKLSAgICBUWF9LT0k4LCAgICAgICAgRkNfS09JOCwKLSAgICBUWF9L T0k4UiwgICAgICAgRkNfS09JOFIsCi0gICAgVFhfS09JOFUsICAgICAgIEZDX0tPSThVLAotICAg IFRYXzg4NTlfMSwgICAgICBGQ18xTEFUSU4sCi0gICAgVFhfODg1OV8yLCAgICAgIEZDXzJMQVRJ TiwKLSAgICBUWF84ODU5XzMsICAgICAgLTIsCi0gICAgVFhfODg1OV80LCAgICAgIC0yLAotICAg IFRYXzg4NTlfNSwgICAgICBGQ19DWVJJTEwsCi0gICAgVFhfODg1OV82LCAgICAgIC0yLAotICAg IFRYXzg4NTlfNywgICAgICAtMiwKLSAgICBUWF84ODU5XzgsICAgICAgRkNfSEVCUkVXLAotICAg IFRYXzg4NTlfOSwgICAgICAtMiwKLSAgICBUWF84ODU5XzEwLCAgICAgLTIsCi0gICAgVFhfODg1 OV8xNSwgICAgIC0yLAotICAgIFRYX01BQ0wxLCAgICAgICBGQ19BUFBRRCwKLSAgICBUWF9ORVhU LCAgICAgICAgRkNfTkVYVCwKLSAgICBUWF9OT1JXRUdJQU4sICAgRkNfTk9BU0NJSSwKLSAgICBU WF9QT1JUVUdVRVNFLCAgRkNfUE9BU0NJSSwKLSAgICBUWF9TUEFOSVNILCAgICAgRkNfU1BBU0NJ SSwKLSAgICBUWF9TV0VESVNILCAgICAgRkNfU1dBU0NJSSwKLSAgICBUWF9TV0lTUywgICAgICAg RkNfQ0hBU0NJSSwKLSAgICBUWF9JQ0VMQU5ESUMsICAgLTIsCi0gICAgVFhfSklTNywgICAgICAg IC0yLAotICAgIFRYX1NISklTLCAgICAgICBGQ19TSEpJUywKLSAgICBUWF9KRVVDLCAgICAgICAg RkNfSkVVQywKLSAgICBUWF9KREVDLCAgICAgICAgRkNfSkRFQywKLSAgICBUWF9FTE9UOTI3LCAg ICAgRkNfRUxPVCwKLSAgICBUWF9ER1BDR1JQSCwgICAgLTIsCi0gICAgVFhfREdMREdSUEgsICAg IC0yLAotICAgIFRYX0RHV1BHUlBILCAgICAtMiwKLSAgICBUWF9IUExJTkUsICAgICAgLTIsCi0g ICAgVFhfSFBNQVRILCAgICAgIC0yLAotICAgIFRYX1FOWEdSUEgsICAgICAtMiwKLSAgICBUWF9T TklCUkFDSywgICAgLTIsCi0gICAgVFhfU05JRVVSTywgICAgIC0yLAotICAgIFRYX1NOSUZBQ0VU LCAgICAtMiwKLSAgICBUWF9TTklJQk0sICAgICAgLTIsCi0gICAgVFhfU05JQkxBTkssICAgIC0y LAotICAgIFRYX0NQMTI1MiwgICAgICAtMiwKLSAgICBUWF9DUDEyNTAsICAgICAgRkNfQ1AxMjUw LAotICAgIFRYX0NQMTI1MSwgICAgICBGQ19DUDEyNTEsCi0gICAgVFhfQ1AxMjUzLCAgICAgIC0y LAotICAgIFRYX0NQMTI1NCwgICAgICAtMiwKLSAgICBUWF9DUDEyNTcsICAgICAgLTIsCi0gICAg VFhfQ1A4NTYsICAgICAgIC0yLAotICAgIFRYX0NQODU1LCAgICAgICBGQ19DUDg1NSwKLSAgICBU WF9DUDgxOSwgICAgICAgRkNfMUxBVElOLAotICAgIFRYX0NQOTEyLCAgICAgICBGQ18yTEFUSU4s Ci0gICAgVFhfQ1A5MTMsICAgICAgIC0yLAotICAgIFRYX0NQOTE0LCAgICAgICAtMiwKLSAgICBU WF9DUDkxNSwgICAgICAgRkNfQ1lSSUxMLAotICAgIFRYX0NQMTA4OSwgICAgICAtMiwKLSAgICBU WF9DUDgxMywgICAgICAgRkNfR1JFRUssCi0gICAgVFhfQ1A5MTYsICAgICAgIEZDX0hFQlJFVywK LSAgICBUWF9DUDkyMCwgICAgICAgLTIsCi0gICAgVFhfQ1AxMDUxLCAgICAgIC0yLAotICAgIFRY X0NQODU4LCAgICAgICBGQ19DUDg1OCwKLSAgICBUWF84ODU5XzE1LCAgICAgRkNfOUxBVElOLAot ICAgIFRYX0NQOTIzLCAgICAgICBGQ19DUDkyMywKLSAgICBUWF9FTE9UOTI4LCAgICAgLTIsCi0g ICAgVFhfQ1AxMDAwMCwgICAgIC0yLAotICAgIFRYX0NQMzcsICAgICAgICAtMiwKLSAgICBUWF9D UDEyNTUsICAgICAgLTIsCi0gICAgVFhfQ1AxMjU2LCAgICAgIC0yLAotICAgIFRYX0NQMTI1OCwg ICAgICAtMiwKLSAgICBUWF9NQVpPVklBLCAgICAgRkNfTUFaT1ZJQSwKLSAgICBUWF9BUEwxLCAg ICAgICAgLTIsCi0gICAgVFhfQVBMMiwgICAgICAgIC0yLAotICAgIFRYX0FQTDMsICAgICAgICAt MiwKLSAgICBUWF9BUEw0LCAgICAgICAgLTIsCi0gICAgVFhfQVBMNSwgICAgICAgIC0yLAotICAg IFRYX1RSQU5TUCwgICAgICBGQ19UUkFOU1AKLX07Ci1pbnQgblRYRkMgPSBzaXplb2YoVFhGQykg LyBzaXplb2Yoc3RydWN0IF9wYWlyKTsKLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWZjMnR4KGlu dCBmYykKLSNlbHNlCi1mYzJ0eChpbnQgYykgaW50IGZjOwotI2VuZGlmIC8qIENLX0FOU0lDICov Ci17Ci0gICAgaW50IGk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG5UWEZDIDsgaSsrKQotICAgICAg aWYgKFRYRkNbaV0uZmMgPT0gZmMgJiYgVFhGQ1tpXS50eCA+PSAwKQotICAgICAgICByZXR1cm4o VFhGQ1tpXS50eCk7Ci0gICAgcmV0dXJuKFRYX0FTQ0lJKTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tf QU5TSUMKLXR4MmZjKGludCB0eCkKLSNlbHNlCi10eDJmYyhpbnQgeCkgaW50IHR4OwotI2VuZGlm IC8qIENLX0FOU0lDICovCi17Ci0gICAgaW50IGk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG5UWEZD IDsgaSsrKQotICAgICAgaWYgKFRYRkNbaV0udHggPT0gdHggJiYgVFhGQ1tpXS5mYyA+PSAwKQot ICAgICAgICByZXR1cm4oVFhGQ1tpXS5mYyk7Ci0gICAgcmV0dXJuKEZDX1VTQVNDSUkpOwotfQot Ci0vKiBTRVQgVEVSTUlOQUwgUkVNT1RFIENIQVJBQ1RFUi1TRVQga2V5d29yZCB0YWJsZSAqLwot Ci1zdHJ1Y3Qga2V5dGFiIHR4cnRhYltdID0gewotICAgICJhcGwyLWlibSIsICAgICAgICAgVFhf QVBMNCwgICAgICAgMCwKLSAgICAiYXBsLTI3NDEiLCAgICAgICAgIFRYX0FQTDUsICAgICAgIDAs Ci0gICAgImFwbC1keWFkaWMiLCAgICAgICBUWF9BUEwyLCAgICAgICAwLAotICAgICJhcGwtaXNv IiwgICAgICAgICAgVFhfQVBMMSwgICAgICAgMCwKLSAgICAiYXBsLXBsdXMtMjAwMCIsICAgIFRY X0FQTDMsICAgICAgIDAsIC8qID0gQVBMLTIwMDAgKi8KLSAgICAiYXJhYmljLWlzbyIsICAgICAg IFRYXzg4NTlfNiwgICAgIDAsCi0gICAgImFzY2lpIiwgICAgICAgICAgICBUWF9BU0NJSSwgICAg ICAwLAotICAgICJicml0aXNoIiwgICAgICAgICAgVFhfQlJJVElTSCwgICAgMCwKLSAgICAiY2Fu YWRpYW4tZnJlbmNoIiwgIFRYX0NOX0ZSRU5DSCwgIDAsCi0gICAgImJ1bGdhcmlhLXBjIiwgICAg ICBUWF9DUDg1NiwgICAgICAwLAotI2lmZGVmIENPTU1FTlQKLSAgICAiY3AwMzciLCAgICAgICAg ICAgIFRYX0NQMzcsICAgICAgIDAsIC8qIFUuUy4gRUJDRElDICovCi0jZW5kaWYgLyogQ09NTUVO VCAqLwotICAgICJjcDEwMDAwIiwgICAgICAgICAgVFhfQ1AxMDAwMCwgICAgMCwgLyogQXBwbGUg UXVpY2tkcmF3ICovCi0gICAgImNwMTA1MSIsICAgICAgICAgICBUWF9DUDEwNTEsICAgICAwLCAv KiBTYW1lIGFzIEhQIFJvbWFuIDggKi8KLSAgICAiY3AxMDg5IiwgICAgICAgICAgIFRYX0NQMTA4 OSwgICAgIDAsIC8qIFNhbWUgYXMgSVNPIDg4NTktNiAqLwotICAgICJjcDEyNTAiLCAgICAgICAg ICAgVFhfQ1AxMjUwLCAgICAgMCwgLyogTGF0aW4tMiBXaW5kb3dzICovCi0gICAgImNwMTI1MSIs ICAgICAgICAgICBUWF9DUDEyNTEsICAgICAwLCAvKiBDeXJpbGxpYyBXaW5kb3dzICovCi0gICAg ImNwMTI1MiIsICAgICAgICAgICBUWF9DUDEyNTIsICAgICAwLCAvKiBMYXRpbi0xIFdpbmRvd3Mg Ki8KLSAgICAiY3AxMjUzIiwgICAgICAgICAgIFRYX0NQMTI1MywgICAgIDAsIC8qIEdyZWVrIFdp bmRvd3MgKi8KLSAgICAiY3AxMjU0IiwgICAgICAgICAgIFRYX0NQMTI1NCwgICAgIDAsIC8qIFR1 cmtleSBXaW5kb3dzICovCi0gICAgImNwMTI1NSIsICAgICAgICAgICBUWF9DUDEyNTUsICAgICAw LCAvKiBIZWJyZXcgV2luZG93cyAqLwotICAgICJjcDEyNTYiLCAgICAgICAgICAgVFhfQ1AxMjU2 LCAgICAgMCwgLyogQXJhYmljIFdpbmRvd3MgKi8KLSAgICAiY3AxMjU3IiwgICAgICAgICAgIFRY X0NQMTI1NywgICAgIDAsIC8qIExhdGluLTQgV2luZG93cyAqLwotICAgICJjcDEyNTgiLCAgICAg ICAgICAgVFhfQ1AxMjU4LCAgICAgMCwgLyogVmlldCBOYW0gV2luZG93cyAqLwotICAgICJjcDQz NyIsICAgICAgICAgICAgVFhfQ1A0MzcsICAgICAgMCwKLSAgICAiY3A4MTMiLCAgICAgICAgICAg IFRYX0NQODEzLCAgICAgIDAsIC8qIFNhbWUgYXMgSVNPIDg4NTktNyAqLwotICAgICJjcDgxOSIs ICAgICAgICAgICAgVFhfQ1A4MTksICAgICAgMCwgLyogU2FtZSBhcyBJU08gODg1OS0xICovCi0g ICAgImNwODUwIiwgICAgICAgICAgICBUWF9DUDg1MCwgICAgICAwLAotICAgICJjcDg1MiIsICAg ICAgICAgICAgVFhfQ1A4NTIsICAgICAgMCwKLSAgICAiY3A4NTUiLCAgICAgICAgICAgIFRYX0NQ ODU1LCAgICAgIDAsIC8qIEN5cmlsbGljICovCi0gICAgImNwODU2IiwgICAgICAgICAgICBUWF9D UDg1NiwgICAgICBDTV9JTlYsIC8qIEJ1bGdhcmlhICovCi0gICAgImNwODU3IiwgICAgICAgICAg ICBUWF9DUDg1NywgICAgICAwLCAvKiBMYXRpbi01ICovCi0gICAgImNwODU4IiwgICAgICAgICAg ICBUWF9DUDg1OCwgICAgICAwLCAvKiBFdXJvIG1vZGlmaWVkIGNwODUwICovCi0gICAgImNwODYy LWhlYnJldyIsICAgICBUWF9DUDg2MiwgICAgICAwLCAvKiBIZWJyZXcgKi8KLSAgICAiY3A4NjQi LCAgICAgICAgICAgIFRYX0NQODY0LCAgICAgIDAsIC8qIEFyYWJpYyAqLwotICAgICJjcDg2NiIs ICAgICAgICAgICAgVFhfQ1A4NjYsICAgICAgMCwgLyogQ3lyaWxsaWMgKi8KLSAgICAiY3A4Njki LCAgICAgICAgICAgIFRYX0NQODY5LCAgICAgIDAsIC8qIEdyZWVrICovCi0gICAgImNwOTEyIiwg ICAgICAgICAgICBUWF9DUDkxMiwgICAgICAwLCAvKiBTYW1lIGFzIElTTyA4ODU5LTIgKi8KLSAg ICAiY3A5MTMiLCAgICAgICAgICAgIFRYX0NQOTEzLCAgICAgIDAsIC8qIFNhbWUgYXMgSVNPIDg4 NTktMyAqLwotICAgICJjcDkxNCIsICAgICAgICAgICAgVFhfQ1A5MTQsICAgICAgMCwgLyogU2Ft ZSBhcyBJU08gODg1OS00ICovCi0gICAgImNwOTE1IiwgICAgICAgICAgICBUWF9DUDkxNSwgICAg ICAwLCAvKiBTYW1lIGFzIElTTyA4ODU5LTUgKi8KLSAgICAiY3A5MTYiLCAgICAgICAgICAgIFRY X0NQOTE2LCAgICAgIDAsIC8qIFNhbWUgYXMgSVNPIDg4NTktOCAqLwotICAgICJjcDkyMCIsICAg ICAgICAgICAgVFhfQ1A5MjAsICAgICAgMCwgLyogU2FtZSBhcyBJU08gODg1OS05ICovCi0gICAg ImNwOTIzIiwgICAgICAgICAgICBUWF9DUDkyMywgICAgICAwLCAvKiBTYW1lIGFzIElTTyA4ODU5 LTE1ICovCi0jaWZkZWYgQ09NTUVOVAotLyogTm90IGltcGxlbWVudGVkIHlldCAqLwotICAgICJj dWJhbiIsICAgICAgICAgICAgVFhfQ1VCQU4sICAgICAgMCwKLSNlbmRpZiAvKiBDT01NRU5UICov Ci0gICAgImN5cmlsbGljLWlzbyIsICAgICBUWF84ODU5XzUsICAgICAwLAotI2lmZGVmIENPTU1F TlQKLS8qIE5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KLSAgICAiY3plY2giLCAgICAgICAgICAgIFRY X0NaRUNILCAgICAgIDAsCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICJkYW5pc2giLCAgICAg ICAgICAgVFhfREFOSVNILCAgICAgMCwKLSAgICAiZGVjLW0iLCAgICAgICAgICAgIFRYX0RFQ01D UywgICAgIENNX0FCUnxDTV9JTlYsCi0gICAgImRlYy1tY3MiLCAgICAgICAgICBUWF9ERUNNQ1Ms ICAgICBDTV9JTlYsCi0gICAgImRlYy1tdWx0aW5hdGlvbmFsIixUWF9ERUNNQ1MsICAgICAwLAot I2lmZGVmIENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBpbXBsZW1lbnRl ZCB5ZXQgKi8KLSAgICAiZGVjLWthbmppIiwgICAgICAgIFRYX0pERUMsICAgICAgIDAsCi0jZW5k aWYgLyogQ09NTUVOVCAqLwotICAgICJkZWMtc3BlY2lhbCIsICAgICAgVFhfREVDU1BFQywgICAg MCwKLSAgICAiZGVjLXRlY2huaWNhbCIsICAgIFRYX0RFQ1RFQ0gsICAgIDAsCi0gICAgImRnLWlu dGVybmF0aW9uYWwiLCBUWF9ER0ksICAgICAgICAwLAotICAgICJkZy1saW5lZHJhd2luZyIsICAg VFhfREdMREdSUEgsICAgMCwKLSAgICAiZGctc3BlY2lhbGdyYXBoY3MiLFRYX0RHUENHUlBILCAg IDAsCi0gICAgImRnLXdvcmRwcm9jZXNzaW5nIixUWF9ER1dQR1JQSCwgICAwLAotICAgICJkdXRj aCIsICAgICAgICAgICAgVFhfRFVUQ0gsICAgICAgMCwKLSAgICAiZWxvdDkyNy1ncmVlayIsICAg IFRYX0VMT1Q5MjcsICAgIDAsCi0gICAgImVsb3Q5MjgtZ3JlZWsiLCAgICBUWF9FTE9UOTI4LCAg ICAwLAotICAgICJmaW5uaXNoIiwgICAgICAgICAgVFhfRklOTklTSCwgICAgMCwKLSAgICAiZnJl bmNoIiwgICAgICAgICAgIFRYX0ZSRU5DSCwgICAgIDAsCi0gICAgImdlcm1hbiIsICAgICAgICAg ICBUWF9HRVJNQU4sICAgICAwLAotICAgICJncmVlay1pc28iLCAgICAgICAgVFhfODg1OV83LCAg ICAgMCwKLSAgICAiaGVicmV3LTciLCAgICAgICAgIFRYX0hFNywgICAgICAgIDAsCi0gICAgImhl YnJldy1pc28iLCAgICAgICBUWF84ODU5XzgsICAgICAwLAotICAgICJocC1saW5lLWRyYXdpbmci LCAgVFhfSFBMSU5FLCAgICAgMCwKLSAgICAiaHAtbWF0aC90ZWNobmljYWwiLFRYX0hQTUFUSCwg ICAgIDAsCi0gICAgImhwLXJvbWFuOCIsICAgICAgICBUWF9IUFI4LCAgICAgICAwLAotICAgICJo dW5nYXJpYW4iLCAgICAgICAgVFhfSFVOR0FSSUFOLCAgMCwKLSAgICAiaXRhbGlhbiIsICAgICAg ICAgIFRYX0lUQUxJQU4sICAgIDAsCi0gICAgImphcGFuZXNlLXJvbWFuIiwgICBUWF9KMjAxUiwg ICAgICAwLAotI2lmZGVmIENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBp bXBsZW1lbnRlZCB5ZXQgKi8KLSAgICAiamFwYW5lc2UtZXVjIiwgICAgIFRYX0pFVUMsICAgICAg IDAsCi0gICAgImppczcta2FuamkiLCAgICAgICBUWF9KSVM3LCAgICAgICAwLAotI2VuZGlmIC8q IENPTU1FTlQgKi8KLSAgICAia2F0YWthbmEiLCAgICAgICAgIFRYX0oyMDFLLCAgICAgIDAsCi0g ICAgImtvIiwgICAgICAgICAgICAgICBUWF9LT0k4LCAgICAgICBDTV9BQlJ8Q01fSU5WLAotICAg ICJrb2kiLCAgICAgICAgICAgICAgVFhfS09JOCwgICAgICAgQ01fQUJSfENNX0lOViwKLSAgICAi a29pOCIsICAgICAgICAgICAgIFRYX0tPSTgsICAgICAgIDAsCi0gICAgImtvaTgtY3lyaWxsaWMi LCAgICBUWF9LT0k4LCAgICAgICBDTV9JTlYsCi0gICAgImtvaThyIiwgICAgICAgICAgICBUWF9L T0k4UiwgICAgICAwLAotICAgICJrb2k4dSIsICAgICAgICAgICAgVFhfS09JOFUsICAgICAgMCwK LSAgICAibCIsICAgICAgICAgICAgICAgIFRYXzg4NTlfMSwgICAgIENNX0FCUnxDTV9JTlYsCi0g ICAgImxhIiwgICAgICAgICAgICAgICBUWF84ODU5XzEsICAgICBDTV9BQlJ8Q01fSU5WLAotICAg ICJsYXQiLCAgICAgICAgICAgICAgVFhfODg1OV8xLCAgICAgQ01fQUJSfENNX0lOViwKLSAgICAi bGF0aSIsICAgICAgICAgICAgIFRYXzg4NTlfMSwgICAgIENNX0FCUnxDTV9JTlYsCi0gICAgImxh dGluIiwgICAgICAgICAgICBUWF84ODU5XzEsICAgICBDTV9BQlJ8Q01fSU5WLAotICAgICJsYXRp bjEtaXNvIiwgICAgICAgVFhfODg1OV8xLCAgICAgMCwKLSAgICAibGF0aW4yLWlzbyIsICAgICAg IFRYXzg4NTlfMiwgICAgIDAsCi0gICAgImxhdGluMy1pc28iLCAgICAgICBUWF84ODU5XzMsICAg ICAwLAotICAgICJsYXRpbjQtaXNvIiwgICAgICAgVFhfODg1OV80LCAgICAgMCwKLSAgICAibGF0 aW41LWlzbyIsICAgICAgIFRYXzg4NTlfOSwgICAgIDAsCi0gICAgImxhdGluNi1pc28iLCAgICAg ICBUWF84ODU5XzEwLCAgICAwLAotICAgICJsYXRpbjktaXNvIiwgICAgICAgVFhfODg1OV8xNSwg ICAgMCwKLSAgICAibWFjaW50b3NoLWxhdGluIiwgIFRYX01BQ0wxLCAgICAgIDAsCi0gICAgIm1h em92aWEtcGMiLCAgICAgICBUWF9NQVpPVklBLCAgICAwLAotICAgICJuZXh0LW11bHRpbmF0aW9u YWwiLFRYX05FWFQsICAgICAgMCwKLSAgICAibm9yd2VnaWFuIiwgICAgICAgIFRYX05PUldFR0lB TiwgIDAsCi0gICAgInBvcnR1Z3Vlc2UiLCAgICAgICBUWF9QT1JUVUdVRVNFLCAwLAotICAgICJx bngtY29uc29sZSIsICAgICAgVFhfUU5YR1JQSCwgICAgMCwKLSNpZmRlZiBDT01NRU5UICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBOb3QgaW1wbGVtZW50ZWQgeWV0ICovCi0gICAgInNoaWZ0 LWppcyIsICAgICAgICBUWF9TSEpJUywgICAgICAwLAotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAg ICAic2hvcnQta29pIiwgICAgICAgIFRYX0tPSTcsICAgICAgIDAsCi0gICAgInNuaS1ibGFua3Mi LCAgICAgICBUWF9TTklCTEFOSywgICAwLAotICAgICJzbmktYnJhY2tldHMiLCAgICAgVFhfU05J QlJBQ0ssICAgMCwKLSAgICAic25pLWV1cm8iLCAgICAgICAgIFRYX1NOSUVVUk8sICAgIDAsCi0g ICAgInNuaS1mYWNldCIsICAgICAgICBUWF9TTklGQUNFVCwgICAwLAotICAgICJzbmktaWJtIiwg ICAgICAgICAgVFhfU05JSUJNLCAgICAgMCwKLSAgICAic3BhbmlzaCIsICAgICAgICAgIFRYX1NQ QU5JU0gsICAgIDAsCi0gICAgInN3ZWRpc2giLCAgICAgICAgICBUWF9TV0VESVNILCAgICAwLAot ICAgICJzd2lzcyIsICAgICAgICAgICAgVFhfU1dJU1MsICAgICAgMCwKLSAgICAidHJhbnNwYXJl bnQiLCAgICAgIFRYX1RSQU5TUCwgICAgIDAsCi0jaWZkZWYgQ09NTUVOVAotICAgICJ1dGY3Iiwg ICAgICAgICAgICAgVFhfVVRGNywgICAgICAgMCwKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAg InV0ZjgiLCAgICAgICAgICAgICBUWF9VVEY4LCAgICAgICAwLAotICAgICIiLCAwLCAwCi19Owot aW50IG50eHJ0YWIgPSBzaXplb2YodHhydGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYikgLSAxOwot I2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgS0FOSkkKLS8qCi0gIEFsbCBLYW5qaS9Vbmljb2Rl IHRyYW5zbGF0aW9ucyBhcmUgYmFzZWQgb24gdGhlIFVuaWNvZGUgMy4wCi0gIFNoaWZ0LUpJUyBt YXBwaW5nLiAgT3RoZXIgY2hhcmFjdGVyIHNldHMsIGxpa2UgRVVDLUpQLCBKSVMtNywgZXRjLAot ICBhcmUgdHJhbnNmb3JtZWQgYWxnb3JpdGhtaWNhbGx5IHRvL2Zyb20gU2hpZnQtSklTIGJlZm9y ZS9hZnRlcgotICBjb252ZXJzaW9uIHRvL2Zyb20gVW5pY29kZS4gIFRoaXMgaXMgYmVjYXVzZSBL YW5qaS9Vbmljb2RlIG1hcHBpbmcKLSAgdGFibGVzIGFkZCBhYm91dCAxMjBLIHRvIHRoZSBwcm9n cmFtLCBhbmQgd2UgZG9uJ3Qgd2FudCB0byBkbyB0aGlzCi0gIGZvciBlYWNoIEthbmppIGNoYXJh Y3RlciBzZXQuCi0qLwotc3RhdGljIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFNoaWZ0LUpJUyB0byBVbmljb2RlICovCi1zanVfODE0MFtdID0geyAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogMHg4MTQwIHRocnUgMHg5ZmZjICovCi0gICAgMHgzMDAwLCAweDMwMDEsIDB4 MzAwMiwgMHhmZjBjLCAweGZmMGUsIDB4MzBmYiwgMHhmZjFhLCAweGZmMWIsCi0gICAgMHhmZjFm LCAweGZmMDEsIDB4MzA5YiwgMHgzMDljLCAweDAwYjQsIDB4ZmY0MCwgMHgwMGE4LCAweGZmM2Us Ci0gICAgMHhmZmUzLCAweGZmM2YsIDB4MzBmZCwgMHgzMGZlLCAweDMwOWQsIDB4MzA5ZSwgMHgz MDAzLCAweDRlZGQsCi0gICAgMHgzMDA1LCAweDMwMDYsIDB4MzAwNywgMHgzMGZjLCAweDIwMTUs IDB4MjAxMCwgMHhmZjBmLCAweDAwNWMsCi0gICAgMHgzMDFjLCAweDIwMTYsIDB4ZmY1YywgMHgy MDI2LCAweDIwMjUsIDB4MjAxOCwgMHgyMDE5LCAweDIwMWMsCi0gICAgMHgyMDFkLCAweGZmMDgs IDB4ZmYwOSwgMHgzMDE0LCAweDMwMTUsIDB4ZmYzYiwgMHhmZjNkLCAweGZmNWIsCi0gICAgMHhm ZjVkLCAweDMwMDgsIDB4MzAwOSwgMHgzMDBhLCAweDMwMGIsIDB4MzAwYywgMHgzMDBkLCAweDMw MGUsCi0gICAgMHgzMDBmLCAweDMwMTAsIDB4MzAxMSwgMHhmZjBiLCAweDIyMTIsIDB4MDBiMSwg MHgwMGQ3LCAweGZmZmQsCi0gICAgMHgwMGY3LCAweGZmMWQsIDB4MjI2MCwgMHhmZjFjLCAweGZm MWUsIDB4MjI2NiwgMHgyMjY3LCAweDIyMWUsCi0gICAgMHgyMjM0LCAweDI2NDIsIDB4MjY0MCwg MHgwMGIwLCAweDIwMzIsIDB4MjAzMywgMHgyMTAzLCAweGZmZTUsCi0gICAgMHhmZjA0LCAweDAw YTIsIDB4MDBhMywgMHhmZjA1LCAweGZmMDMsIDB4ZmYwNiwgMHhmZjBhLCAweGZmMjAsCi0gICAg MHgwMGE3LCAweDI2MDYsIDB4MjYwNSwgMHgyNWNiLCAweDI1Y2YsIDB4MjVjZSwgMHgyNWM3LCAw eDI1YzYsCi0gICAgMHgyNWExLCAweDI1YTAsIDB4MjViMywgMHgyNWIyLCAweDI1YmQsIDB4MjVi YywgMHgyMDNiLCAweDMwMTIsCi0gICAgMHgyMTkyLCAweDIxOTAsIDB4MjE5MSwgMHgyMTkzLCAw eDMwMTMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHgyMjA4LCAw eDIyMGIsIDB4MjI4NiwgMHgyMjg3LCAweDIyODIsIDB4MjI4MywgMHgyMjJhLCAweDIyMjksCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHgyMjI3LCAweDIyMjgsIDB4MDBhYywgMHgyMWQyLCAweDIxZDQsIDB4 MjIwMCwgMHgyMjAzLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 MjIyMCwgMHgyMmE1LCAweDIzMTIsIDB4MjIwMiwgMHgyMjA3LCAweDIyNjEsCi0gICAgMHgyMjUy LCAweDIyNmEsIDB4MjI2YiwgMHgyMjFhLCAweDIyM2QsIDB4MjIxZCwgMHgyMjM1LCAweDIyMmIs Ci0gICAgMHgyMjJjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHgyMTJiLCAweDIwMzAsIDB4MjY2ZiwgMHgyNjZkLCAweDI2NmEs IDB4MjAyMCwgMHgyMDIxLCAweDAwYjYsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDI1ZWYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmMTAsCi0gICAgMHhmZjExLCAw eGZmMTIsIDB4ZmYxMywgMHhmZjE0LCAweGZmMTUsIDB4ZmYxNiwgMHhmZjE3LCAweGZmMTgsCi0g ICAgMHhmZjE5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZjIxLCAweGZmMjIsIDB4ZmYyMywgMHhmZjI0LCAweGZmMjUsIDB4 ZmYyNiwgMHhmZjI3LCAweGZmMjgsCi0gICAgMHhmZjI5LCAweGZmMmEsIDB4ZmYyYiwgMHhmZjJj LCAweGZmMmQsIDB4ZmYyZSwgMHhmZjJmLCAweGZmMzAsCi0gICAgMHhmZjMxLCAweGZmMzIsIDB4 ZmYzMywgMHhmZjM0LCAweGZmMzUsIDB4ZmYzNiwgMHhmZjM3LCAweGZmMzgsCi0gICAgMHhmZjM5 LCAweGZmM2EsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmNDEsIDB4ZmY0MiwgMHhmZjQzLCAweGZmNDQsIDB4ZmY0NSwgMHhm ZjQ2LCAweGZmNDcsCi0gICAgMHhmZjQ4LCAweGZmNDksIDB4ZmY0YSwgMHhmZjRiLCAweGZmNGMs IDB4ZmY0ZCwgMHhmZjRlLCAweGZmNGYsCi0gICAgMHhmZjUwLCAweGZmNTEsIDB4ZmY1MiwgMHhm ZjUzLCAweGZmNTQsIDB4ZmY1NSwgMHhmZjU2LCAweGZmNTcsCi0gICAgMHhmZjU4LCAweGZmNTks IDB4ZmY1YSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDMwNDEsCi0gICAgMHgz MDQyLCAweDMwNDMsIDB4MzA0NCwgMHgzMDQ1LCAweDMwNDYsIDB4MzA0NywgMHgzMDQ4LCAweDMw NDksCi0gICAgMHgzMDRhLCAweDMwNGIsIDB4MzA0YywgMHgzMDRkLCAweDMwNGUsIDB4MzA0Ziwg MHgzMDUwLCAweDMwNTEsCi0gICAgMHgzMDUyLCAweDMwNTMsIDB4MzA1NCwgMHgzMDU1LCAweDMw NTYsIDB4MzA1NywgMHgzMDU4LCAweDMwNTksCi0gICAgMHgzMDVhLCAweDMwNWIsIDB4MzA1Yywg MHgzMDVkLCAweDMwNWUsIDB4MzA1ZiwgMHgzMDYwLCAweDMwNjEsCi0gICAgMHgzMDYyLCAweDMw NjMsIDB4MzA2NCwgMHgzMDY1LCAweDMwNjYsIDB4MzA2NywgMHgzMDY4LCAweDMwNjksCi0gICAg MHgzMDZhLCAweDMwNmIsIDB4MzA2YywgMHgzMDZkLCAweDMwNmUsIDB4MzA2ZiwgMHgzMDcwLCAw eDMwNzEsCi0gICAgMHgzMDcyLCAweDMwNzMsIDB4MzA3NCwgMHgzMDc1LCAweDMwNzYsIDB4MzA3 NywgMHgzMDc4LCAweDMwNzksCi0gICAgMHgzMDdhLCAweDMwN2IsIDB4MzA3YywgMHgzMDdkLCAw eDMwN2UsIDB4MzA3ZiwgMHgzMDgwLCAweDMwODEsCi0gICAgMHgzMDgyLCAweDMwODMsIDB4MzA4 NCwgMHgzMDg1LCAweDMwODYsIDB4MzA4NywgMHgzMDg4LCAweDMwODksCi0gICAgMHgzMDhhLCAw eDMwOGIsIDB4MzA4YywgMHgzMDhkLCAweDMwOGUsIDB4MzA4ZiwgMHgzMDkwLCAweDMwOTEsCi0g ICAgMHgzMDkyLCAweDMwOTMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHgzMGExLCAweDMwYTIsIDB4MzBhMywgMHgzMGE0LCAweDMwYTUsIDB4MzBhNiwg MHgzMGE3LCAweDMwYTgsCi0gICAgMHgzMGE5LCAweDMwYWEsIDB4MzBhYiwgMHgzMGFjLCAweDMw YWQsIDB4MzBhZSwgMHgzMGFmLCAweDMwYjAsCi0gICAgMHgzMGIxLCAweDMwYjIsIDB4MzBiMywg MHgzMGI0LCAweDMwYjUsIDB4MzBiNiwgMHgzMGI3LCAweDMwYjgsCi0gICAgMHgzMGI5LCAweDMw YmEsIDB4MzBiYiwgMHgzMGJjLCAweDMwYmQsIDB4MzBiZSwgMHgzMGJmLCAweDMwYzAsCi0gICAg MHgzMGMxLCAweDMwYzIsIDB4MzBjMywgMHgzMGM0LCAweDMwYzUsIDB4MzBjNiwgMHgzMGM3LCAw eDMwYzgsCi0gICAgMHgzMGM5LCAweDMwY2EsIDB4MzBjYiwgMHgzMGNjLCAweDMwY2QsIDB4MzBj ZSwgMHgzMGNmLCAweDMwZDAsCi0gICAgMHgzMGQxLCAweDMwZDIsIDB4MzBkMywgMHgzMGQ0LCAw eDMwZDUsIDB4MzBkNiwgMHgzMGQ3LCAweDMwZDgsCi0gICAgMHgzMGQ5LCAweDMwZGEsIDB4MzBk YiwgMHgzMGRjLCAweDMwZGQsIDB4MzBkZSwgMHgzMGRmLCAweGZmZmQsCi0gICAgMHgzMGUwLCAw eDMwZTEsIDB4MzBlMiwgMHgzMGUzLCAweDMwZTQsIDB4MzBlNSwgMHgzMGU2LCAweDMwZTcsCi0g ICAgMHgzMGU4LCAweDMwZTksIDB4MzBlYSwgMHgzMGViLCAweDMwZWMsIDB4MzBlZCwgMHgzMGVl LCAweDMwZWYsCi0gICAgMHgzMGYwLCAweDMwZjEsIDB4MzBmMiwgMHgzMGYzLCAweDMwZjQsIDB4 MzBmNSwgMHgzMGY2LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDAzOTEsCi0gICAgMHgwMzkyLCAweDAzOTMsIDB4 MDM5NCwgMHgwMzk1LCAweDAzOTYsIDB4MDM5NywgMHgwMzk4LCAweDAzOTksCi0gICAgMHgwMzlh LCAweDAzOWIsIDB4MDM5YywgMHgwMzlkLCAweDAzOWUsIDB4MDM5ZiwgMHgwM2EwLCAweDAzYTEs Ci0gICAgMHgwM2EzLCAweDAzYTQsIDB4MDNhNSwgMHgwM2E2LCAweDAzYTcsIDB4MDNhOCwgMHgw M2E5LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDAzYjEsCi0gICAgMHgwM2IyLCAweDAzYjMsIDB4MDNiNCwgMHgw M2I1LCAweDAzYjYsIDB4MDNiNywgMHgwM2I4LCAweDAzYjksCi0gICAgMHgwM2JhLCAweDAzYmIs IDB4MDNiYywgMHgwM2JkLCAweDAzYmUsIDB4MDNiZiwgMHgwM2MwLCAweDAzYzEsCi0gICAgMHgw M2MzLCAweDAzYzQsIDB4MDNjNSwgMHgwM2M2LCAweDAzYzcsIDB4MDNjOCwgMHgwM2M5LCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHgwNDEw LCAweDA0MTEsIDB4MDQxMiwgMHgwNDEzLCAweDA0MTQsIDB4MDQxNSwgMHgwNDAxLCAweDA0MTYs Ci0gICAgMHgwNDE3LCAweDA0MTgsIDB4MDQxOSwgMHgwNDFhLCAweDA0MWIsIDB4MDQxYywgMHgw NDFkLCAweDA0MWUsCi0gICAgMHgwNDFmLCAweDA0MjAsIDB4MDQyMSwgMHgwNDIyLCAweDA0MjMs IDB4MDQyNCwgMHgwNDI1LCAweDA0MjYsCi0gICAgMHgwNDI3LCAweDA0MjgsIDB4MDQyOSwgMHgw NDJhLCAweDA0MmIsIDB4MDQyYywgMHgwNDJkLCAweDA0MmUsCi0gICAgMHgwNDJmLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHgwNDMwLCAweDA0MzEsIDB4MDQzMiwgMHgwNDMzLCAweDA0MzQsIDB4MDQzNSwg MHgwNDUxLCAweDA0MzYsCi0gICAgMHgwNDM3LCAweDA0MzgsIDB4MDQzOSwgMHgwNDNhLCAweDA0 M2IsIDB4MDQzYywgMHgwNDNkLCAweGZmZmQsCi0gICAgMHgwNDNlLCAweDA0M2YsIDB4MDQ0MCwg MHgwNDQxLCAweDA0NDIsIDB4MDQ0MywgMHgwNDQ0LCAweDA0NDUsCi0gICAgMHgwNDQ2LCAweDA0 NDcsIDB4MDQ0OCwgMHgwNDQ5LCAweDA0NGEsIDB4MDQ0YiwgMHgwNDRjLCAweDA0NGQsCi0gICAg MHgwNDRlLCAweDA0NGYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDI1MDAsCi0gICAgMHgyNTAyLCAweDI1MGMsIDB4MjUxMCwgMHgyNTE4LCAw eDI1MTQsIDB4MjUxYywgMHgyNTJjLCAweDI1MjQsCi0gICAgMHgyNTM0LCAweDI1M2MsIDB4MjUw MSwgMHgyNTAzLCAweDI1MGYsIDB4MjUxMywgMHgyNTFiLCAweDI1MTcsCi0gICAgMHgyNTIzLCAw eDI1MzMsIDB4MjUyYiwgMHgyNTNiLCAweDI1NGIsIDB4MjUyMCwgMHgyNTJmLCAweDI1MjgsCi0g ICAgMHgyNTM3LCAweDI1M2YsIDB4MjUxZCwgMHgyNTMwLCAweDI1MjUsIDB4MjUzOCwgMHgyNTQy LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDRlOWMsCi0gICAgMHg1NTE2LCAweDVhMDMsIDB4OTYzZiwgMHg1NGMwLCAweDYx MWIsIDB4NjMyOCwgMHg1OWY2LCAweDkwMjIsCi0gICAgMHg4NDc1LCAweDgzMWMsIDB4N2E1MCwg MHg2MGFhLCAweDYzZTEsIDB4NmUyNSwgMHg2NWVkLCAweDg0NjYsCi0gICAgMHg4MmE2LCAweDli ZjUsIDB4Njg5MywgMHg1NzI3LCAweDY1YTEsIDB4NjI3MSwgMHg1YjliLCAweDU5ZDAsCi0gICAg MHg4NjdiLCAweDk4ZjQsIDB4N2Q2MiwgMHg3ZGJlLCAweDliOGUsIDB4NjIxNiwgMHg3YzlmLCAw eDg4YjcsCi0gICAgMHg1Yjg5LCAweDVlYjUsIDB4NjMwOSwgMHg2Njk3LCAweDY4NDgsIDB4OTVj NywgMHg5NzhkLCAweDY3NGYsCi0gICAgMHg0ZWU1LCAweDRmMGEsIDB4NGY0ZCwgMHg0ZjlkLCAw eDUwNDksIDB4NTZmMiwgMHg1OTM3LCAweDU5ZDQsCi0gICAgMHg1YTAxLCAweDVjMDksIDB4NjBk ZiwgMHg2MTBmLCAweDYxNzAsIDB4NjYxMywgMHg2OTA1LCAweDcwYmEsCi0gICAgMHg3NTRmLCAw eDc1NzAsIDB4NzlmYiwgMHg3ZGFkLCAweDdkZWYsIDB4ODBjMywgMHg4NDBlLCAweDg4NjMsCi0g ICAgMHg4YjAyLCAweDkwNTUsIDB4OTA3YSwgMHg1MzNiLCAweDRlOTUsIDB4NGVhNSwgMHg1N2Rm LCAweDgwYjIsCi0gICAgMHg5MGMxLCAweDc4ZWYsIDB4NGUwMCwgMHg1OGYxLCAweDZlYTIsIDB4 OTAzOCwgMHg3YTMyLCAweDgzMjgsCi0gICAgMHg4MjhiLCAweDljMmYsIDB4NTE0MSwgMHg1Mzcw LCAweDU0YmQsIDB4NTRlMSwgMHg1NmUwLCAweDU5ZmIsCi0gICAgMHg1ZjE1LCAweDk4ZjIsIDB4 NmRlYiwgMHg4MGU0LCAweDg1MmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5NjYyLCAweDk2NzAsIDB4OTZhMCwg MHg5N2ZiLCAweDU0MGIsIDB4NTNmMywgMHg1Yjg3LCAweDcwY2YsCi0gICAgMHg3ZmJkLCAweDhm YzIsIDB4OTZlOCwgMHg1MzZmLCAweDlkNWMsIDB4N2FiYSwgMHg0ZTExLCAweDc4OTMsCi0gICAg MHg4MWZjLCAweDZlMjYsIDB4NTYxOCwgMHg1NTA0LCAweDZiMWQsIDB4ODUxYSwgMHg5YzNiLCAw eDU5ZTUsCi0gICAgMHg1M2E5LCAweDZkNjYsIDB4NzRkYywgMHg5NThmLCAweDU2NDIsIDB4NGU5 MSwgMHg5MDRiLCAweDk2ZjIsCi0gICAgMHg4MzRmLCAweDk5MGMsIDB4NTNlMSwgMHg1NWI2LCAw eDViMzAsIDB4NWY3MSwgMHg2NjIwLCAweDY2ZjMsCi0gICAgMHg2ODA0LCAweDZjMzgsIDB4NmNm MywgMHg2ZDI5LCAweDc0NWIsIDB4NzZjOCwgMHg3YTRlLCAweDk4MzQsCi0gICAgMHg4MmYxLCAw eDg4NWIsIDB4OGE2MCwgMHg5MmVkLCAweDZkYjIsIDB4NzVhYiwgMHg3NmNhLCAweDk5YzUsCi0g ICAgMHg2MGE2LCAweDhiMDEsIDB4OGQ4YSwgMHg5NWIyLCAweDY5OGUsIDB4NTNhZCwgMHg1MTg2 LCAweGZmZmQsCi0gICAgMHg1NzEyLCAweDU4MzAsIDB4NTk0NCwgMHg1YmI0LCAweDVlZjYsIDB4 NjAyOCwgMHg2M2E5LCAweDYzZjQsCi0gICAgMHg2Y2JmLCAweDZmMTQsIDB4NzA4ZSwgMHg3MTE0 LCAweDcxNTksIDB4NzFkNSwgMHg3MzNmLCAweDdlMDEsCi0gICAgMHg4Mjc2LCAweDgyZDEsIDB4 ODU5NywgMHg5MDYwLCAweDkyNWIsIDB4OWQxYiwgMHg1ODY5LCAweDY1YmMsCi0gICAgMHg2YzVh LCAweDc1MjUsIDB4NTFmOSwgMHg1OTJlLCAweDU5NjUsIDB4NWY4MCwgMHg1ZmRjLCAweDYyYmMs Ci0gICAgMHg2NWZhLCAweDZhMmEsIDB4NmIyNywgMHg2YmI0LCAweDczOGIsIDB4N2ZjMSwgMHg4 OTU2LCAweDlkMmMsCi0gICAgMHg5ZDBlLCAweDllYzQsIDB4NWNhMSwgMHg2Yzk2LCAweDgzN2Is IDB4NTEwNCwgMHg1YzRiLCAweDYxYjYsCi0gICAgMHg4MWM2LCAweDY4NzYsIDB4NzI2MSwgMHg0 ZTU5LCAweDRmZmEsIDB4NTM3OCwgMHg2MDY5LCAweDZlMjksCi0gICAgMHg3YTRmLCAweDk3ZjMs IDB4NGUwYiwgMHg1MzE2LCAweDRlZWUsIDB4NGY1NSwgMHg0ZjNkLCAweDRmYTEsCi0gICAgMHg0 ZjczLCAweDUyYTAsIDB4NTNlZiwgMHg1NjA5LCAweDU5MGYsIDB4NWFjMSwgMHg1YmI2LCAweDVi ZTEsCi0gICAgMHg3OWQxLCAweDY2ODcsIDB4Njc5YywgMHg2N2I2LCAweDZiNGMsIDB4NmNiMywg MHg3MDZiLCAweDczYzIsCi0gICAgMHg3OThkLCAweDc5YmUsIDB4N2EzYywgMHg3Yjg3LCAweDgy YjEsIDB4ODJkYiwgMHg4MzA0LCAweDgzNzcsCi0gICAgMHg4M2VmLCAweDgzZDMsIDB4ODc2Niwg MHg4YWIyLCAweDU2MjksIDB4OGNhOCwgMHg4ZmU2LCAweDkwNGUsCi0gICAgMHg5NzFlLCAweDg2 OGEsIDB4NGZjNCwgMHg1Y2U4LCAweDYyMTEsIDB4NzI1OSwgMHg3NTNiLCAweDgxZTUsCi0gICAg MHg4MmJkLCAweDg2ZmUsIDB4OGNjMCwgMHg5NmM1LCAweDk5MTMsIDB4OTlkNSwgMHg0ZWNiLCAw eDRmMWEsCi0gICAgMHg4OWUzLCAweDU2ZGUsIDB4NTg0YSwgMHg1OGNhLCAweDVlZmIsIDB4NWZl YiwgMHg2MDJhLCAweDYwOTQsCi0gICAgMHg2MDYyLCAweDYxZDAsIDB4NjIxMiwgMHg2MmQwLCAw eDY1MzksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHg5YjQxLCAweDY2NjYsIDB4NjhiMCwgMHg2ZDc3LCAweDcwNzAs IDB4NzU0YywgMHg3Njg2LCAweDdkNzUsCi0gICAgMHg4MmE1LCAweDg3ZjksIDB4OTU4YiwgMHg5 NjhlLCAweDhjOWQsIDB4NTFmMSwgMHg1MmJlLCAweDU5MTYsCi0gICAgMHg1NGIzLCAweDViYjMs IDB4NWQxNiwgMHg2MTY4LCAweDY5ODIsIDB4NmRhZiwgMHg3ODhkLCAweDg0Y2IsCi0gICAgMHg4 ODU3LCAweDhhNzIsIDB4OTNhNywgMHg5YWI4LCAweDZkNmMsIDB4OTlhOCwgMHg4NmQ5LCAweDU3 YTMsCi0gICAgMHg2N2ZmLCAweDg2Y2UsIDB4OTIwZSwgMHg1MjgzLCAweDU2ODcsIDB4NTQwNCwg MHg1ZWQzLCAweDYyZTEsCi0gICAgMHg2NGI5LCAweDY4M2MsIDB4NjgzOCwgMHg2YmJiLCAweDcz NzIsIDB4NzhiYSwgMHg3YTZiLCAweDg5OWEsCi0gICAgMHg4OWQyLCAweDhkNmIsIDB4OGYwMywg MHg5MGVkLCAweDk1YTMsIDB4OTY5NCwgMHg5NzY5LCAweDViNjYsCi0gICAgMHg1Y2IzLCAweDY5 N2QsIDB4OTg0ZCwgMHg5ODRlLCAweDYzOWIsIDB4N2IyMCwgMHg2YTJiLCAweGZmZmQsCi0gICAg MHg2YTdmLCAweDY4YjYsIDB4OWMwZCwgMHg2ZjVmLCAweDUyNzIsIDB4NTU5ZCwgMHg2MDcwLCAw eDYyZWMsCi0gICAgMHg2ZDNiLCAweDZlMDcsIDB4NmVkMSwgMHg4NDViLCAweDg5MTAsIDB4OGY0 NCwgMHg0ZTE0LCAweDljMzksCi0gICAgMHg1M2Y2LCAweDY5MWIsIDB4NmEzYSwgMHg5Nzg0LCAw eDY4MmEsIDB4NTE1YywgMHg3YWMzLCAweDg0YjIsCi0gICAgMHg5MWRjLCAweDkzOGMsIDB4NTY1 YiwgMHg5ZDI4LCAweDY4MjIsIDB4ODMwNSwgMHg4NDMxLCAweDdjYTUsCi0gICAgMHg1MjA4LCAw eDgyYzUsIDB4NzRlNiwgMHg0ZTdlLCAweDRmODMsIDB4NTFhMCwgMHg1YmQyLCAweDUyMGEsCi0g ICAgMHg1MmQ4LCAweDUyZTcsIDB4NWRmYiwgMHg1NTlhLCAweDU4MmEsIDB4NTllNiwgMHg1Yjhj LCAweDViOTgsCi0gICAgMHg1YmRiLCAweDVlNzIsIDB4NWU3OSwgMHg2MGEzLCAweDYxMWYsIDB4 NjE2MywgMHg2MWJlLCAweDYzZGIsCi0gICAgMHg2NTYyLCAweDY3ZDEsIDB4Njg1MywgMHg2OGZh LCAweDZiM2UsIDB4NmI1MywgMHg2YzU3LCAweDZmMjIsCi0gICAgMHg2Zjk3LCAweDZmNDUsIDB4 NzRiMCwgMHg3NTE4LCAweDc2ZTMsIDB4NzcwYiwgMHg3YWZmLCAweDdiYTEsCi0gICAgMHg3YzIx LCAweDdkZTksIDB4N2YzNiwgMHg3ZmYwLCAweDgwOWQsIDB4ODI2NiwgMHg4MzllLCAweDg5YjMs Ci0gICAgMHg4YWNjLCAweDhjYWIsIDB4OTA4NCwgMHg5NDUxLCAweDk1OTMsIDB4OTU5MSwgMHg5 NWEyLCAweDk2NjUsCi0gICAgMHg5N2QzLCAweDk5MjgsIDB4ODIxOCwgMHg0ZTM4LCAweDU0MmIs IDB4NWNiOCwgMHg1ZGNjLCAweDczYTksCi0gICAgMHg3NjRjLCAweDc3M2MsIDB4NWNhOSwgMHg3 ZmViLCAweDhkMGIsIDB4OTZjMSwgMHg5ODExLCAweDk4NTQsCi0gICAgMHg5ODU4LCAweDRmMDEs IDB4NGYwZSwgMHg1MzcxLCAweDU1OWMsIDB4NTY2OCwgMHg1N2ZhLCAweDU5NDcsCi0gICAgMHg1 YjA5LCAweDViYzQsIDB4NWM5MCwgMHg1ZTBjLCAweDVlN2UsIDB4NWZjYywgMHg2M2VlLCAweDY3 M2EsCi0gICAgMHg2NWQ3LCAweDY1ZTIsIDB4NjcxZiwgMHg2OGNiLCAweDY4YzQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHg2YTVmLCAweDVlMzAsIDB4NmJjNSwgMHg2YzE3LCAweDZjN2QsIDB4NzU3ZiwgMHg3OTQ4 LCAweDViNjMsCi0gICAgMHg3YTAwLCAweDdkMDAsIDB4NWZiZCwgMHg4OThmLCAweDhhMTgsIDB4 OGNiNCwgMHg4ZDc3LCAweDhlY2MsCi0gICAgMHg4ZjFkLCAweDk4ZTIsIDB4OWEwZSwgMHg5YjNj LCAweDRlODAsIDB4NTA3ZCwgMHg1MTAwLCAweDU5OTMsCi0gICAgMHg1YjljLCAweDYyMmYsIDB4 NjI4MCwgMHg2NGVjLCAweDZiM2EsIDB4NzJhMCwgMHg3NTkxLCAweDc5NDcsCi0gICAgMHg3ZmE5 LCAweDg3ZmIsIDB4OGFiYywgMHg4YjcwLCAweDYzYWMsIDB4ODNjYSwgMHg5N2EwLCAweDU0MDks Ci0gICAgMHg1NDAzLCAweDU1YWIsIDB4Njg1NCwgMHg2YTU4LCAweDhhNzAsIDB4NzgyNywgMHg2 Nzc1LCAweDllY2QsCi0gICAgMHg1Mzc0LCAweDViYTIsIDB4ODExYSwgMHg4NjUwLCAweDkwMDYs IDB4NGUxOCwgMHg0ZTQ1LCAweDRlYzcsCi0gICAgMHg0ZjExLCAweDUzY2EsIDB4NTQzOCwgMHg1 YmFlLCAweDVmMTMsIDB4NjAyNSwgMHg2NTUxLCAweGZmZmQsCi0gICAgMHg2NzNkLCAweDZjNDIs IDB4NmM3MiwgMHg2Y2UzLCAweDcwNzgsIDB4NzQwMywgMHg3YTc2LCAweDdhYWUsCi0gICAgMHg3 YjA4LCAweDdkMWEsIDB4N2NmZSwgMHg3ZDY2LCAweDY1ZTcsIDB4NzI1YiwgMHg1M2JiLCAweDVj NDUsCi0gICAgMHg1ZGU4LCAweDYyZDIsIDB4NjJlMCwgMHg2MzE5LCAweDZlMjAsIDB4ODY1YSwg MHg4YTMxLCAweDhkZGQsCi0gICAgMHg5MmY4LCAweDZmMDEsIDB4NzlhNiwgMHg5YjVhLCAweDRl YTgsIDB4NGVhYiwgMHg0ZWFjLCAweDRmOWIsCi0gICAgMHg0ZmEwLCAweDUwZDEsIDB4NTE0Nywg MHg3YWY2LCAweDUxNzEsIDB4NTFmNiwgMHg1MzU0LCAweDUzMjEsCi0gICAgMHg1MzdmLCAweDUz ZWIsIDB4NTVhYywgMHg1ODgzLCAweDVjZTEsIDB4NWYzNywgMHg1ZjRhLCAweDYwMmYsCi0gICAg MHg2MDUwLCAweDYwNmQsIDB4NjMxZiwgMHg2NTU5LCAweDZhNGIsIDB4NmNjMSwgMHg3MmMyLCAw eDcyZWQsCi0gICAgMHg3N2VmLCAweDgwZjgsIDB4ODEwNSwgMHg4MjA4LCAweDg1NGUsIDB4OTBm NywgMHg5M2UxLCAweDk3ZmYsCi0gICAgMHg5OTU3LCAweDlhNWEsIDB4NGVmMCwgMHg1MWRkLCAw eDVjMmQsIDB4NjY4MSwgMHg2OTZkLCAweDVjNDAsCi0gICAgMHg2NmYyLCAweDY5NzUsIDB4NzM4 OSwgMHg2ODUwLCAweDdjODEsIDB4NTBjNSwgMHg1MmU0LCAweDU3NDcsCi0gICAgMHg1ZGZlLCAw eDkzMjYsIDB4NjVhNCwgMHg2YjIzLCAweDZiM2QsIDB4NzQzNCwgMHg3OTgxLCAweDc5YmQsCi0g ICAgMHg3YjRiLCAweDdkY2EsIDB4ODJiOSwgMHg4M2NjLCAweDg4N2YsIDB4ODk1ZiwgMHg4YjM5 LCAweDhmZDEsCi0gICAgMHg5MWQxLCAweDU0MWYsIDB4OTI4MCwgMHg0ZTVkLCAweDUwMzYsIDB4 NTNlNSwgMHg1MzNhLCAweDcyZDcsCi0gICAgMHg3Mzk2LCAweDc3ZTksIDB4ODJlNiwgMHg4ZWFm LCAweDk5YzYsIDB4OTljOCwgMHg5OWQyLCAweDUxNzcsCi0gICAgMHg2MTFhLCAweDg2NWUsIDB4 NTViMCwgMHg3YTdhLCAweDUwNzYsIDB4NWJkMywgMHg5MDQ3LCAweDk2ODUsCi0gICAgMHg0ZTMy LCAweDZhZGIsIDB4OTFlNywgMHg1YzUxLCAweDVjNDgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg2Mzk4LCAweDdh OWYsIDB4NmM5MywgMHg5Nzc0LCAweDhmNjEsIDB4N2FhYSwgMHg3MThhLCAweDk2ODgsCi0gICAg MHg3YzgyLCAweDY4MTcsIDB4N2U3MCwgMHg2ODUxLCAweDkzNmMsIDB4NTJmMiwgMHg1NDFiLCAw eDg1YWIsCi0gICAgMHg4YTEzLCAweDdmYTQsIDB4OGVjZCwgMHg5MGUxLCAweDUzNjYsIDB4ODg4 OCwgMHg3OTQxLCAweDRmYzIsCi0gICAgMHg1MGJlLCAweDUyMTEsIDB4NTE0NCwgMHg1NTUzLCAw eDU3MmQsIDB4NzNlYSwgMHg1NzhiLCAweDU5NTEsCi0gICAgMHg1ZjYyLCAweDVmODQsIDB4NjA3 NSwgMHg2MTc2LCAweDYxNjcsIDB4NjFhOSwgMHg2M2IyLCAweDY0M2EsCi0gICAgMHg2NTZjLCAw eDY2NmYsIDB4Njg0MiwgMHg2ZTEzLCAweDc1NjYsIDB4N2EzZCwgMHg3Y2ZiLCAweDdkNGMsCi0g ICAgMHg3ZDk5LCAweDdlNGIsIDB4N2Y2YiwgMHg4MzBlLCAweDgzNGEsIDB4ODZjZCwgMHg4YTA4 LCAweDhhNjMsCi0gICAgMHg4YjY2LCAweDhlZmQsIDB4OTgxYSwgMHg5ZDhmLCAweDgyYjgsIDB4 OGZjZSwgMHg5YmU4LCAweGZmZmQsCi0gICAgMHg1Mjg3LCAweDYyMWYsIDB4NjQ4MywgMHg2ZmMw LCAweDk2OTksIDB4Njg0MSwgMHg1MDkxLCAweDZiMjAsCi0gICAgMHg2YzdhLCAweDZmNTQsIDB4 N2E3NCwgMHg3ZDUwLCAweDg4NDAsIDB4OGEyMywgMHg2NzA4LCAweDRlZjYsCi0gICAgMHg1MDM5 LCAweDUwMjYsIDB4NTA2NSwgMHg1MTdjLCAweDUyMzgsIDB4NTI2MywgMHg1NWE3LCAweDU3MGYs Ci0gICAgMHg1ODA1LCAweDVhY2MsIDB4NWVmYSwgMHg2MWIyLCAweDYxZjgsIDB4NjJmMywgMHg2 MzcyLCAweDY5MWMsCi0gICAgMHg2YTI5LCAweDcyN2QsIDB4NzJhYywgMHg3MzJlLCAweDc4MTQs IDB4Nzg2ZiwgMHg3ZDc5LCAweDc3MGMsCi0gICAgMHg4MGE5LCAweDg5OGIsIDB4OGIxOSwgMHg4 Y2UyLCAweDhlZDIsIDB4OTA2MywgMHg5Mzc1LCAweDk2N2EsCi0gICAgMHg5ODU1LCAweDlhMTMs IDB4OWU3OCwgMHg1MTQzLCAweDUzOWYsIDB4NTNiMywgMHg1ZTdiLCAweDVmMjYsCi0gICAgMHg2 ZTFiLCAweDZlOTAsIDB4NzM4NCwgMHg3M2ZlLCAweDdkNDMsIDB4ODIzNywgMHg4YTAwLCAweDhh ZmEsCi0gICAgMHg5NjUwLCAweDRlNGUsIDB4NTAwYiwgMHg1M2U0LCAweDU0N2MsIDB4NTZmYSwg MHg1OWQxLCAweDViNjQsCi0gICAgMHg1ZGYxLCAweDVlYWIsIDB4NWYyNywgMHg2MjM4LCAweDY1 NDUsIDB4NjdhZiwgMHg2ZTU2LCAweDcyZDAsCi0gICAgMHg3Y2NhLCAweDg4YjQsIDB4ODBhMSwg MHg4MGUxLCAweDgzZjAsIDB4ODY0ZSwgMHg4YTg3LCAweDhkZTgsCi0gICAgMHg5MjM3LCAweDk2 YzcsIDB4OTg2NywgMHg5ZjEzLCAweDRlOTQsIDB4NGU5MiwgMHg0ZjBkLCAweDUzNDgsCi0gICAg MHg1NDQ5LCAweDU0M2UsIDB4NWEyZiwgMHg1ZjhjLCAweDVmYTEsIDB4NjA5ZiwgMHg2OGE3LCAw eDZhOGUsCi0gICAgMHg3NDVhLCAweDc4ODEsIDB4OGE5ZSwgMHg4YWE0LCAweDhiNzcsIDB4OTE5 MCwgMHg0ZTVlLCAweDliYzksCi0gICAgMHg0ZWE0LCAweDRmN2MsIDB4NGZhZiwgMHg1MDE5LCAw eDUwMTYsIDB4NTE0OSwgMHg1MTZjLCAweDUyOWYsCi0gICAgMHg1MmI5LCAweDUyZmUsIDB4NTM5 YSwgMHg1M2UzLCAweDU0MTEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg1NDBlLCAweDU1ODksIDB4NTc1MSwgMHg1 N2EyLCAweDU5N2QsIDB4NWI1NCwgMHg1YjVkLCAweDViOGYsCi0gICAgMHg1ZGU1LCAweDVkZTcs IDB4NWRmNywgMHg1ZTc4LCAweDVlODMsIDB4NWU5YSwgMHg1ZWI3LCAweDVmMTgsCi0gICAgMHg2 MDUyLCAweDYxNGMsIDB4NjI5NywgMHg2MmQ4LCAweDYzYTcsIDB4NjUzYiwgMHg2NjAyLCAweDY2 NDMsCi0gICAgMHg2NmY0LCAweDY3NmQsIDB4NjgyMSwgMHg2ODk3LCAweDY5Y2IsIDB4NmM1Ziwg MHg2ZDJhLCAweDZkNjksCi0gICAgMHg2ZTJmLCAweDZlOWQsIDB4NzUzMiwgMHg3Njg3LCAweDc4 NmMsIDB4N2EzZiwgMHg3Y2UwLCAweDdkMDUsCi0gICAgMHg3ZDE4LCAweDdkNWUsIDB4N2RiMSwg MHg4MDE1LCAweDgwMDMsIDB4ODBhZiwgMHg4MGIxLCAweDgxNTQsCi0gICAgMHg4MThmLCAweDgy MmEsIDB4ODM1MiwgMHg4ODRjLCAweDg4NjEsIDB4OGIxYiwgMHg4Y2EyLCAweDhjZmMsCi0gICAg MHg5MGNhLCAweDkxNzUsIDB4OTI3MSwgMHg3ODNmLCAweDkyZmMsIDB4OTVhNCwgMHg5NjRkLCAw eGZmZmQsCi0gICAgMHg5ODA1LCAweDk5OTksIDB4OWFkOCwgMHg5ZDNiLCAweDUyNWIsIDB4NTJh YiwgMHg1M2Y3LCAweDU0MDgsCi0gICAgMHg1OGQ1LCAweDYyZjcsIDB4NmZlMCwgMHg4YzZhLCAw eDhmNWYsIDB4OWViOSwgMHg1MTRiLCAweDUyM2IsCi0gICAgMHg1NDRhLCAweDU2ZmQsIDB4N2E0 MCwgMHg5MTc3LCAweDlkNjAsIDB4OWVkMiwgMHg3MzQ0LCAweDZmMDksCi0gICAgMHg4MTcwLCAw eDc1MTEsIDB4NWZmZCwgMHg2MGRhLCAweDlhYTgsIDB4NzJkYiwgMHg4ZmJjLCAweDZiNjQsCi0g ICAgMHg5ODAzLCAweDRlY2EsIDB4NTZmMCwgMHg1NzY0LCAweDU4YmUsIDB4NWE1YSwgMHg2MDY4 LCAweDYxYzcsCi0gICAgMHg2NjBmLCAweDY2MDYsIDB4NjgzOSwgMHg2OGIxLCAweDZkZjcsIDB4 NzVkNSwgMHg3ZDNhLCAweDgyNmUsCi0gICAgMHg5YjQyLCAweDRlOWIsIDB4NGY1MCwgMHg1M2M5 LCAweDU1MDYsIDB4NWQ2ZiwgMHg1ZGU2LCAweDVkZWUsCi0gICAgMHg2N2ZiLCAweDZjOTksIDB4 NzQ3MywgMHg3ODAyLCAweDhhNTAsIDB4OTM5NiwgMHg4OGRmLCAweDU3NTAsCi0gICAgMHg1ZWE3 LCAweDYzMmIsIDB4NTBiNSwgMHg1MGFjLCAweDUxOGQsIDB4NjcwMCwgMHg1NGM5LCAweDU4NWUs Ci0gICAgMHg1OWJiLCAweDViYjAsIDB4NWY2OSwgMHg2MjRkLCAweDYzYTEsIDB4NjgzZCwgMHg2 YjczLCAweDZlMDgsCi0gICAgMHg3MDdkLCAweDkxYzcsIDB4NzI4MCwgMHg3ODE1LCAweDc4MjYs IDB4Nzk2ZCwgMHg2NThlLCAweDdkMzAsCi0gICAgMHg4M2RjLCAweDg4YzEsIDB4OGYwOSwgMHg5 NjliLCAweDUyNjQsIDB4NTcyOCwgMHg2NzUwLCAweDdmNmEsCi0gICAgMHg4Y2ExLCAweDUxYjQs IDB4NTc0MiwgMHg5NjJhLCAweDU4M2EsIDB4Njk4YSwgMHg4MGI0LCAweDU0YjIsCi0gICAgMHg1 ZDBlLCAweDU3ZmMsIDB4Nzg5NSwgMHg5ZGZhLCAweDRmNWMsIDB4NTI0YSwgMHg1NDhiLCAweDY0 M2UsCi0gICAgMHg2NjI4LCAweDY3MTQsIDB4NjdmNSwgMHg3YTg0LCAweDdiNTYsIDB4N2QyMiwg MHg5MzJmLCAweDY4NWMsCi0gICAgMHg5YmFkLCAweDdiMzksIDB4NTMxOSwgMHg1MThhLCAweDUy MzcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHg1YmRmLCAweDYyZjYsIDB4NjRhZSwgMHg2NGU2LCAweDY3MmQsIDB4 NmJiYSwgMHg4NWE5LCAweDk2ZDEsCi0gICAgMHg3NjkwLCAweDliZDYsIDB4NjM0YywgMHg5MzA2 LCAweDliYWIsIDB4NzZiZiwgMHg2NjUyLCAweDRlMDksCi0gICAgMHg1MDk4LCAweDUzYzIsIDB4 NWM3MSwgMHg2MGU4LCAweDY0OTIsIDB4NjU2MywgMHg2ODVmLCAweDcxZTYsCi0gICAgMHg3M2Nh LCAweDc1MjMsIDB4N2I5NywgMHg3ZTgyLCAweDg2OTUsIDB4OGI4MywgMHg4Y2RiLCAweDkxNzgs Ci0gICAgMHg5OTEwLCAweDY1YWMsIDB4NjZhYiwgMHg2YjhiLCAweDRlZDUsIDB4NGVkNCwgMHg0 ZjNhLCAweDRmN2YsCi0gICAgMHg1MjNhLCAweDUzZjgsIDB4NTNmMiwgMHg1NWUzLCAweDU2ZGIs IDB4NThlYiwgMHg1OWNiLCAweDU5YzksCi0gICAgMHg1OWZmLCAweDViNTAsIDB4NWM0ZCwgMHg1 ZTAyLCAweDVlMmIsIDB4NWZkNywgMHg2MDFkLCAweDYzMDcsCi0gICAgMHg2NTJmLCAweDViNWMs IDB4NjVhZiwgMHg2NWJkLCAweDY1ZTgsIDB4Njc5ZCwgMHg2YjYyLCAweGZmZmQsCi0gICAgMHg2 YjdiLCAweDZjMGYsIDB4NzM0NSwgMHg3OTQ5LCAweDc5YzEsIDB4N2NmOCwgMHg3ZDE5LCAweDdk MmIsCi0gICAgMHg4MGEyLCAweDgxMDIsIDB4ODFmMywgMHg4OTk2LCAweDhhNWUsIDB4OGE2OSwg MHg4YTY2LCAweDhhOGMsCi0gICAgMHg4YWVlLCAweDhjYzcsIDB4OGNkYywgMHg5NmNjLCAweDk4 ZmMsIDB4NmI2ZiwgMHg0ZThiLCAweDRmM2MsCi0gICAgMHg0ZjhkLCAweDUxNTAsIDB4NWI1Nywg MHg1YmZhLCAweDYxNDgsIDB4NjMwMSwgMHg2NjQyLCAweDZiMjEsCi0gICAgMHg2ZWNiLCAweDZj YmIsIDB4NzIzZSwgMHg3NGJkLCAweDc1ZDQsIDB4NzhjMSwgMHg3OTNhLCAweDgwMGMsCi0gICAg MHg4MDMzLCAweDgxZWEsIDB4ODQ5NCwgMHg4ZjllLCAweDZjNTAsIDB4OWU3ZiwgMHg1ZjBmLCAw eDhiNTgsCi0gICAgMHg5ZDJiLCAweDdhZmEsIDB4OGVmOCwgMHg1YjhkLCAweDk2ZWIsIDB4NGUw MywgMHg1M2YxLCAweDU3ZjcsCi0gICAgMHg1OTMxLCAweDVhYzksIDB4NWJhNCwgMHg2MDg5LCAw eDZlN2YsIDB4NmYwNiwgMHg3NWJlLCAweDhjZWEsCi0gICAgMHg1YjlmLCAweDg1MDAsIDB4N2Jl MCwgMHg1MDcyLCAweDY3ZjQsIDB4ODI5ZCwgMHg1YzYxLCAweDg1NGEsCi0gICAgMHg3ZTFlLCAw eDgyMGUsIDB4NTE5OSwgMHg1YzA0LCAweDYzNjgsIDB4OGQ2NiwgMHg2NTljLCAweDcxNmUsCi0g ICAgMHg3OTNlLCAweDdkMTcsIDB4ODAwNSwgMHg4YjFkLCAweDhlY2EsIDB4OTA2ZSwgMHg4NmM3 LCAweDkwYWEsCi0gICAgMHg1MDFmLCAweDUyZmEsIDB4NWMzYSwgMHg2NzUzLCAweDcwN2MsIDB4 NzIzNSwgMHg5MTRjLCAweDkxYzgsCi0gICAgMHg5MzJiLCAweDgyZTUsIDB4NWJjMiwgMHg1ZjMx LCAweDYwZjksIDB4NGUzYiwgMHg1M2Q2LCAweDViODgsCi0gICAgMHg2MjRiLCAweDY3MzEsIDB4 NmI4YSwgMHg3MmU5LCAweDczZTAsIDB4N2EyZSwgMHg4MTZiLCAweDhkYTMsCi0gICAgMHg5MTUy LCAweDk5OTYsIDB4NTExMiwgMHg1M2Q3LCAweDU0NmEsIDB4NWJmZiwgMHg2Mzg4LCAweDZhMzks Ci0gICAgMHg3ZGFjLCAweDk3MDAsIDB4NTZkYSwgMHg1M2NlLCAweDU0NjgsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHg1Yjk3LCAweDVjMzEsIDB4NWRkZSwgMHg0ZmVlLCAweDYxMDEsIDB4NjJmZSwgMHg2ZDMyLCAw eDc5YzAsCi0gICAgMHg3OWNiLCAweDdkNDIsIDB4N2U0ZCwgMHg3ZmQyLCAweDgxZWQsIDB4ODIx ZiwgMHg4NDkwLCAweDg4NDYsCi0gICAgMHg4OTcyLCAweDhiOTAsIDB4OGU3NCwgMHg4ZjJmLCAw eDkwMzEsIDB4OTE0YiwgMHg5MTZjLCAweDk2YzYsCi0gICAgMHg5MTljLCAweDRlYzAsIDB4NGY0 ZiwgMHg1MTQ1LCAweDUzNDEsIDB4NWY5MywgMHg2MjBlLCAweDY3ZDQsCi0gICAgMHg2YzQxLCAw eDZlMGIsIDB4NzM2MywgMHg3ZTI2LCAweDkxY2QsIDB4OTI4MywgMHg1M2Q0LCAweDU5MTksCi0g ICAgMHg1YmJmLCAweDZkZDEsIDB4Nzk1ZCwgMHg3ZTJlLCAweDdjOWIsIDB4NTg3ZSwgMHg3MTlm LCAweDUxZmEsCi0gICAgMHg4ODUzLCAweDhmZjAsIDB4NGZjYSwgMHg1Y2ZiLCAweDY2MjUsIDB4 NzdhYywgMHg3YWUzLCAweDgyMWMsCi0gICAgMHg5OWZmLCAweDUxYzYsIDB4NWZhYSwgMHg2NWVj LCAweDY5NmYsIDB4NmI4OSwgMHg2ZGYzLCAweGZmZmQsCi0gICAgMHg2ZTk2LCAweDZmNjQsIDB4 NzZmZSwgMHg3ZDE0LCAweDVkZTEsIDB4OTA3NSwgMHg5MTg3LCAweDk4MDYsCi0gICAgMHg1MWU2 LCAweDUyMWQsIDB4NjI0MCwgMHg2NjkxLCAweDY2ZDksIDB4NmUxYSwgMHg1ZWI2LCAweDdkZDIs Ci0gICAgMHg3ZjcyLCAweDY2ZjgsIDB4ODVhZiwgMHg4NWY3LCAweDhhZjgsIDB4NTJhOSwgMHg1 M2Q5LCAweDU5NzMsCi0gICAgMHg1ZThmLCAweDVmOTAsIDB4NjA1NSwgMHg5MmU0LCAweDk2NjQs IDB4NTBiNywgMHg1MTFmLCAweDUyZGQsCi0gICAgMHg1MzIwLCAweDUzNDcsIDB4NTNlYywgMHg1 NGU4LCAweDU1NDYsIDB4NTUzMSwgMHg1NjE3LCAweDU5NjgsCi0gICAgMHg1OWJlLCAweDVhM2Ms IDB4NWJiNSwgMHg1YzA2LCAweDVjMGYsIDB4NWMxMSwgMHg1YzFhLCAweDVlODQsCi0gICAgMHg1 ZThhLCAweDVlZTAsIDB4NWY3MCwgMHg2MjdmLCAweDYyODQsIDB4NjJkYiwgMHg2MzhjLCAweDYz NzcsCi0gICAgMHg2NjA3LCAweDY2MGMsIDB4NjYyZCwgMHg2Njc2LCAweDY3N2UsIDB4NjhhMiwg MHg2YTFmLCAweDZhMzUsCi0gICAgMHg2Y2JjLCAweDZkODgsIDB4NmUwOSwgMHg2ZTU4LCAweDcx M2MsIDB4NzEyNiwgMHg3MTY3LCAweDc1YzcsCi0gICAgMHg3NzAxLCAweDc4NWQsIDB4NzkwMSwg MHg3OTY1LCAweDc5ZjAsIDB4N2FlMCwgMHg3YjExLCAweDdjYTcsCi0gICAgMHg3ZDM5LCAweDgw OTYsIDB4ODNkNiwgMHg4NDhiLCAweDg1NDksIDB4ODg1ZCwgMHg4OGYzLCAweDhhMWYsCi0gICAg MHg4YTNjLCAweDhhNTQsIDB4OGE3MywgMHg4YzYxLCAweDhjZGUsIDB4OTFhNCwgMHg5MjY2LCAw eDkzN2UsCi0gICAgMHg5NDE4LCAweDk2OWMsIDB4OTc5OCwgMHg0ZTBhLCAweDRlMDgsIDB4NGUx ZSwgMHg0ZTU3LCAweDUxOTcsCi0gICAgMHg1MjcwLCAweDU3Y2UsIDB4NTgzNCwgMHg1OGNjLCAw eDViMjIsIDB4NWUzOCwgMHg2MGM1LCAweDY0ZmUsCi0gICAgMHg2NzYxLCAweDY3NTYsIDB4NmQ0 NCwgMHg3MmI2LCAweDc1NzMsIDB4N2E2MywgMHg4NGI4LCAweDhiNzIsCi0gICAgMHg5MWI4LCAw eDkzMjAsIDB4NTYzMSwgMHg1N2Y0LCAweDk4ZmUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg2MmVkLCAweDY5MGQs IDB4NmI5NiwgMHg3MWVkLCAweDdlNTQsIDB4ODA3NywgMHg4MjcyLCAweDg5ZTYsCi0gICAgMHg5 OGRmLCAweDg3NTUsIDB4OGZiMSwgMHg1YzNiLCAweDRmMzgsIDB4NGZlMSwgMHg0ZmI1LCAweDU1 MDcsCi0gICAgMHg1YTIwLCAweDViZGQsIDB4NWJlOSwgMHg1ZmMzLCAweDYxNGUsIDB4NjMyZiwg MHg2NWIwLCAweDY2NGIsCi0gICAgMHg2OGVlLCAweDY5OWIsIDB4NmQ3OCwgMHg2ZGYxLCAweDc1 MzMsIDB4NzViOSwgMHg3NzFmLCAweDc5NWUsCi0gICAgMHg3OWU2LCAweDdkMzMsIDB4ODFlMywg MHg4MmFmLCAweDg1YWEsIDB4ODlhYSwgMHg4YTNhLCAweDhlYWIsCi0gICAgMHg4ZjliLCAweDkw MzIsIDB4OTFkZCwgMHg5NzA3LCAweDRlYmEsIDB4NGVjMSwgMHg1MjAzLCAweDU4NzUsCi0gICAg MHg1OGVjLCAweDVjMGIsIDB4NzUxYSwgMHg1YzNkLCAweDgxNGUsIDB4OGEwYSwgMHg4ZmM1LCAw eDk2NjMsCi0gICAgMHg5NzZkLCAweDdiMjUsIDB4OGFjZiwgMHg5ODA4LCAweDkxNjIsIDB4NTZm MywgMHg1M2E4LCAweGZmZmQsCi0gICAgMHg5MDE3LCAweDU0MzksIDB4NTc4MiwgMHg1ZTI1LCAw eDYzYTgsIDB4NmMzNCwgMHg3MDhhLCAweDc3NjEsCi0gICAgMHg3YzhiLCAweDdmZTAsIDB4ODg3 MCwgMHg5MDQyLCAweDkxNTQsIDB4OTMxMCwgMHg5MzE4LCAweDk2OGYsCi0gICAgMHg3NDVlLCAw eDlhYzQsIDB4NWQwNywgMHg1ZDY5LCAweDY1NzAsIDB4NjdhMiwgMHg4ZGE4LCAweDk2ZGIsCi0g ICAgMHg2MzZlLCAweDY3NDksIDB4NjkxOSwgMHg4M2M1LCAweDk4MTcsIDB4OTZjMCwgMHg4OGZl LCAweDZmODQsCi0gICAgMHg2NDdhLCAweDViZjgsIDB4NGUxNiwgMHg3MDJjLCAweDc1NWQsIDB4 NjYyZiwgMHg1MWM0LCAweDUyMzYsCi0gICAgMHg1MmUyLCAweDU5ZDMsIDB4NWY4MSwgMHg2MDI3 LCAweDYyMTAsIDB4NjUzZiwgMHg2NTc0LCAweDY2MWYsCi0gICAgMHg2Njc0LCAweDY4ZjIsIDB4 NjgxNiwgMHg2YjYzLCAweDZlMDUsIDB4NzI3MiwgMHg3NTFmLCAweDc2ZGIsCi0gICAgMHg3Y2Jl LCAweDgwNTYsIDB4NThmMCwgMHg4OGZkLCAweDg5N2YsIDB4OGFhMCwgMHg4YTkzLCAweDhhY2Is Ci0gICAgMHg5MDFkLCAweDkxOTIsIDB4OTc1MiwgMHg5NzU5LCAweDY1ODksIDB4N2EwZSwgMHg4 MTA2LCAweDk2YmIsCi0gICAgMHg1ZTJkLCAweDYwZGMsIDB4NjIxYSwgMHg2NWE1LCAweDY2MTQs IDB4Njc5MCwgMHg3N2YzLCAweDdhNGQsCi0gICAgMHg3YzRkLCAweDdlM2UsIDB4ODEwYSwgMHg4 Y2FjLCAweDhkNjQsIDB4OGRlMSwgMHg4ZTVmLCAweDc4YTksCi0gICAgMHg1MjA3LCAweDYyZDks IDB4NjNhNSwgMHg2NDQyLCAweDYyOTgsIDB4OGEyZCwgMHg3YTgzLCAweDdiYzAsCi0gICAgMHg4 YWFjLCAweDk2ZWEsIDB4N2Q3NiwgMHg4MjBjLCAweDg3NDksIDB4NGVkOSwgMHg1MTQ4LCAweDUz NDMsCi0gICAgMHg1MzYwLCAweDViYTMsIDB4NWMwMiwgMHg1YzE2LCAweDVkZGQsIDB4NjIyNiwg MHg2MjQ3LCAweDY0YjAsCi0gICAgMHg2ODEzLCAweDY4MzQsIDB4NmNjOSwgMHg2ZDQ1LCAweDZk MTcsIDB4NjdkMywgMHg2ZjVjLCAweDcxNGUsCi0gICAgMHg3MTdkLCAweDY1Y2IsIDB4N2E3Ziwg MHg3YmFkLCAweDdkZGEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg3ZTRhLCAweDdmYTgsIDB4ODE3YSwgMHg4MjFi LCAweDgyMzksIDB4ODVhNiwgMHg4YTZlLCAweDhjY2UsCi0gICAgMHg4ZGY1LCAweDkwNzgsIDB4 OTA3NywgMHg5MmFkLCAweDkyOTEsIDB4OTU4MywgMHg5YmFlLCAweDUyNGQsCi0gICAgMHg1NTg0 LCAweDZmMzgsIDB4NzEzNiwgMHg1MTY4LCAweDc5ODUsIDB4N2U1NSwgMHg4MWIzLCAweDdjY2Us Ci0gICAgMHg1NjRjLCAweDU4NTEsIDB4NWNhOCwgMHg2M2FhLCAweDY2ZmUsIDB4NjZmZCwgMHg2 OTVhLCAweDcyZDksCi0gICAgMHg3NThmLCAweDc1OGUsIDB4NzkwZSwgMHg3OTU2LCAweDc5ZGYs IDB4N2M5NywgMHg3ZDIwLCAweDdkNDQsCi0gICAgMHg4NjA3LCAweDhhMzQsIDB4OTYzYiwgMHg5 MDYxLCAweDlmMjAsIDB4NTBlNywgMHg1Mjc1LCAweDUzY2MsCi0gICAgMHg1M2UyLCAweDUwMDks IDB4NTVhYSwgMHg1OGVlLCAweDU5NGYsIDB4NzIzZCwgMHg1YjhiLCAweDVjNjQsCi0gICAgMHg1 MzFkLCAweDYwZTMsIDB4NjBmMywgMHg2MzVjLCAweDYzODMsIDB4NjMzZiwgMHg2M2JiLCAweGZm ZmQsCi0gICAgMHg2NGNkLCAweDY1ZTksIDB4NjZmOSwgMHg1ZGUzLCAweDY5Y2QsIDB4NjlmZCwg MHg2ZjE1LCAweDcxZTUsCi0gICAgMHg0ZTg5LCAweDc1ZTksIDB4NzZmOCwgMHg3YTkzLCAweDdj ZGYsIDB4N2RjZiwgMHg3ZDljLCAweDgwNjEsCi0gICAgMHg4MzQ5LCAweDgzNTgsIDB4ODQ2Yywg MHg4NGJjLCAweDg1ZmIsIDB4ODhjNSwgMHg4ZDcwLCAweDkwMDEsCi0gICAgMHg5MDZkLCAweDkz OTcsIDB4OTcxYywgMHg5YTEyLCAweDUwY2YsIDB4NTg5NywgMHg2MThlLCAweDgxZDMsCi0gICAg MHg4NTM1LCAweDhkMDgsIDB4OTAyMCwgMHg0ZmMzLCAweDUwNzQsIDB4NTI0NywgMHg1MzczLCAw eDYwNmYsCi0gICAgMHg2MzQ5LCAweDY3NWYsIDB4NmUyYywgMHg4ZGIzLCAweDkwMWYsIDB4NGZk NywgMHg1YzVlLCAweDhjY2EsCi0gICAgMHg2NWNmLCAweDdkOWEsIDB4NTM1MiwgMHg4ODk2LCAw eDUxNzYsIDB4NjNjMywgMHg1YjU4LCAweDViNmIsCi0gICAgMHg1YzBhLCAweDY0MGQsIDB4Njc1 MSwgMHg5MDVjLCAweDRlZDYsIDB4NTkxYSwgMHg1OTJhLCAweDZjNzAsCi0gICAgMHg4YTUxLCAw eDU1M2UsIDB4NTgxNSwgMHg1OWE1LCAweDYwZjAsIDB4NjI1MywgMHg2N2MxLCAweDgyMzUsCi0g ICAgMHg2OTU1LCAweDk2NDAsIDB4OTljNCwgMHg5YTI4LCAweDRmNTMsIDB4NTgwNiwgMHg1YmZl LCAweDgwMTAsCi0gICAgMHg1Y2IxLCAweDVlMmYsIDB4NWY4NSwgMHg2MDIwLCAweDYxNGIsIDB4 NjIzNCwgMHg2NmZmLCAweDZjZjAsCi0gICAgMHg2ZWRlLCAweDgwY2UsIDB4ODE3ZiwgMHg4MmQ0 LCAweDg4OGIsIDB4OGNiOCwgMHg5MDAwLCAweDkwMmUsCi0gICAgMHg5NjhhLCAweDllZGIsIDB4 OWJkYiwgMHg0ZWUzLCAweDUzZjAsIDB4NTkyNywgMHg3YjJjLCAweDkxOGQsCi0gICAgMHg5ODRj LCAweDlkZjksIDB4NmVkZCwgMHg3MDI3LCAweDUzNTMsIDB4NTU0NCwgMHg1Yjg1LCAweDYyNTgs Ci0gICAgMHg2MjllLCAweDYyZDMsIDB4NmNhMiwgMHg2ZmVmLCAweDc0MjIsIDB4OGExNywgMHg5 NDM4LCAweDZmYzEsCi0gICAgMHg4YWZlLCAweDgzMzgsIDB4NTFlNywgMHg4NmY4LCAweDUzZWEs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHg1M2U5LCAweDRmNDYsIDB4OTA1NCwgMHg4ZmIwLCAweDU5NmEsIDB4ODEz MSwgMHg1ZGZkLCAweDdhZWEsCi0gICAgMHg4ZmJmLCAweDY4ZGEsIDB4OGMzNywgMHg3MmY4LCAw eDljNDgsIDB4NmEzZCwgMHg4YWIwLCAweDRlMzksCi0gICAgMHg1MzU4LCAweDU2MDYsIDB4NTc2 NiwgMHg2MmM1LCAweDYzYTIsIDB4NjVlNiwgMHg2YjRlLCAweDZkZTEsCi0gICAgMHg2ZTViLCAw eDcwYWQsIDB4NzdlZCwgMHg3YWVmLCAweDdiYWEsIDB4N2RiYiwgMHg4MDNkLCAweDgwYzYsCi0g ICAgMHg4NmNiLCAweDhhOTUsIDB4OTM1YiwgMHg1NmUzLCAweDU4YzcsIDB4NWYzZSwgMHg2NWFk LCAweDY2OTYsCi0gICAgMHg2YTgwLCAweDZiYjUsIDB4NzUzNywgMHg4YWM3LCAweDUwMjQsIDB4 NzdlNSwgMHg1NzMwLCAweDVmMWIsCi0gICAgMHg2MDY1LCAweDY2N2EsIDB4NmM2MCwgMHg3NWY0 LCAweDdhMWEsIDB4N2Y2ZSwgMHg4MWY0LCAweDg3MTgsCi0gICAgMHg5MDQ1LCAweDk5YjMsIDB4 N2JjOSwgMHg3NTVjLCAweDdhZjksIDB4N2I1MSwgMHg4NGM0LCAweGZmZmQsCi0gICAgMHg5MDEw LCAweDc5ZTksIDB4N2E5MiwgMHg4MzM2LCAweDVhZTEsIDB4Nzc0MCwgMHg0ZTJkLCAweDRlZjIs Ci0gICAgMHg1Yjk5LCAweDVmZTAsIDB4NjJiZCwgMHg2NjNjLCAweDY3ZjEsIDB4NmNlOCwgMHg4 NjZiLCAweDg4NzcsCi0gICAgMHg4YTNiLCAweDkxNGUsIDB4OTJmMywgMHg5OWQwLCAweDZhMTcs IDB4NzAyNiwgMHg3MzJhLCAweDgyZTcsCi0gICAgMHg4NDU3LCAweDhjYWYsIDB4NGUwMSwgMHg1 MTQ2LCAweDUxY2IsIDB4NTU4YiwgMHg1YmY1LCAweDVlMTYsCi0gICAgMHg1ZTMzLCAweDVlODEs IDB4NWYxNCwgMHg1ZjM1LCAweDVmNmIsIDB4NWZiNCwgMHg2MWYyLCAweDYzMTEsCi0gICAgMHg2 NmEyLCAweDY3MWQsIDB4NmY2ZSwgMHg3MjUyLCAweDc1M2EsIDB4NzczYSwgMHg4MDc0LCAweDgx MzksCi0gICAgMHg4MTc4LCAweDg3NzYsIDB4OGFiZiwgMHg4YWRjLCAweDhkODUsIDB4OGRmMywg MHg5MjlhLCAweDk1NzcsCi0gICAgMHg5ODAyLCAweDljZTUsIDB4NTJjNSwgMHg2MzU3LCAweDc2 ZjQsIDB4NjcxNSwgMHg2Yzg4LCAweDczY2QsCi0gICAgMHg4Y2MzLCAweDkzYWUsIDB4OTY3Mywg MHg2ZDI1LCAweDU4OWMsIDB4NjkwZSwgMHg2OWNjLCAweDhmZmQsCi0gICAgMHg5MzlhLCAweDc1 ZGIsIDB4OTAxYSwgMHg1ODVhLCAweDY4MDIsIDB4NjNiNCwgMHg2OWZiLCAweDRmNDMsCi0gICAg MHg2ZjJjLCAweDY3ZDgsIDB4OGZiYiwgMHg4NTI2LCAweDdkYjQsIDB4OTM1NCwgMHg2OTNmLCAw eDZmNzAsCi0gICAgMHg1NzZhLCAweDU4ZjcsIDB4NWIyYywgMHg3ZDJjLCAweDcyMmEsIDB4NTQw YSwgMHg5MWUzLCAweDlkYjQsCi0gICAgMHg0ZWFkLCAweDRmNGUsIDB4NTA1YywgMHg1MDc1LCAw eDUyNDMsIDB4OGM5ZSwgMHg1NDQ4LCAweDU4MjQsCi0gICAgMHg1YjlhLCAweDVlMWQsIDB4NWU5 NSwgMHg1ZWFkLCAweDVlZjcsIDB4NWYxZiwgMHg2MDhjLCAweDYyYjUsCi0gICAgMHg2MzNhLCAw eDYzZDAsIDB4NjhhZiwgMHg2YzQwLCAweDc4ODcsIDB4Nzk4ZSwgMHg3YTBiLCAweDdkZTAsCi0g ICAgMHg4MjQ3LCAweDhhMDIsIDB4OGFlNiwgMHg4ZTQ0LCAweDkwMTMsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5 MGI4LCAweDkxMmQsIDB4OTFkOCwgMHg5ZjBlLCAweDZjZTUsIDB4NjQ1OCwgMHg2NGUyLCAweDY1 NzUsCi0gICAgMHg2ZWY0LCAweDc2ODQsIDB4N2IxYiwgMHg5MDY5LCAweDkzZDEsIDB4NmViYSwg MHg1NGYyLCAweDVmYjksCi0gICAgMHg2NGE0LCAweDhmNGQsIDB4OGZlZCwgMHg5MjQ0LCAweDUx NzgsIDB4NTg2YiwgMHg1OTI5LCAweDVjNTUsCi0gICAgMHg1ZTk3LCAweDZkZmIsIDB4N2U4Ziwg MHg3NTFjLCAweDhjYmMsIDB4OGVlMiwgMHg5ODViLCAweDcwYjksCi0gICAgMHg0ZjFkLCAweDZi YmYsIDB4NmZiMSwgMHg3NTMwLCAweDk2ZmIsIDB4NTE0ZSwgMHg1NDEwLCAweDU4MzUsCi0gICAg MHg1ODU3LCAweDU5YWMsIDB4NWM2MCwgMHg1ZjkyLCAweDY1OTcsIDB4Njc1YywgMHg2ZTIxLCAw eDc2N2IsCi0gICAgMHg4M2RmLCAweDhjZWQsIDB4OTAxNCwgMHg5MGZkLCAweDkzNGQsIDB4Nzgy NSwgMHg3ODNhLCAweDUyYWEsCi0gICAgMHg1ZWE2LCAweDU3MWYsIDB4NTk3NCwgMHg2MDEyLCAw eDUwMTIsIDB4NTE1YSwgMHg1MWFjLCAweGZmZmQsCi0gICAgMHg1MWNkLCAweDUyMDAsIDB4NTUx MCwgMHg1ODU0LCAweDU4NTgsIDB4NTk1NywgMHg1Yjk1LCAweDVjZjYsCi0gICAgMHg1ZDhiLCAw eDYwYmMsIDB4NjI5NSwgMHg2NDJkLCAweDY3NzEsIDB4Njg0MywgMHg2OGJjLCAweDY4ZGYsCi0g ICAgMHg3NmQ3LCAweDZkZDgsIDB4NmU2ZiwgMHg2ZDliLCAweDcwNmYsIDB4NzFjOCwgMHg1ZjUz LCAweDc1ZDgsCi0gICAgMHg3OTc3LCAweDdiNDksIDB4N2I1NCwgMHg3YjUyLCAweDdjZDYsIDB4 N2Q3MSwgMHg1MjMwLCAweDg0NjMsCi0gICAgMHg4NTY5LCAweDg1ZTQsIDB4OGEwZSwgMHg4YjA0 LCAweDhjNDYsIDB4OGUwZiwgMHg5MDAzLCAweDkwMGYsCi0gICAgMHg5NDE5LCAweDk2NzYsIDB4 OTgyZCwgMHg5YTMwLCAweDk1ZDgsIDB4NTBjZCwgMHg1MmQ1LCAweDU0MGMsCi0gICAgMHg1ODAy LCAweDVjMGUsIDB4NjFhNywgMHg2NDllLCAweDZkMWUsIDB4NzdiMywgMHg3YWU1LCAweDgwZjQs Ci0gICAgMHg4NDA0LCAweDkwNTMsIDB4OTI4NSwgMHg1Y2UwLCAweDlkMDcsIDB4NTMzZiwgMHg1 Zjk3LCAweDVmYjMsCi0gICAgMHg2ZDljLCAweDcyNzksIDB4Nzc2MywgMHg3OWJmLCAweDdiZTQs IDB4NmJkMiwgMHg3MmVjLCAweDhhYWQsCi0gICAgMHg2ODAzLCAweDZhNjEsIDB4NTFmOCwgMHg3 YTgxLCAweDY5MzQsIDB4NWM0YSwgMHg5Y2Y2LCAweDgyZWIsCi0gICAgMHg1YmM1LCAweDkxNDks IDB4NzAxZSwgMHg1Njc4LCAweDVjNmYsIDB4NjBjNywgMHg2NTY2LCAweDZjOGMsCi0gICAgMHg4 YzVhLCAweDkwNDEsIDB4OTgxMywgMHg1NDUxLCAweDY2YzcsIDB4OTIwZCwgMHg1OTQ4LCAweDkw YTMsCi0gICAgMHg1MTg1LCAweDRlNGQsIDB4NTFlYSwgMHg4NTk5LCAweDhiMGUsIDB4NzA1OCwg MHg2MzdhLCAweDkzNGIsCi0gICAgMHg2OTYyLCAweDk5YjQsIDB4N2UwNCwgMHg3NTc3LCAweDUz NTcsIDB4Njk2MCwgMHg4ZWRmLCAweDk2ZTMsCi0gICAgMHg2YzVkLCAweDRlOGMsIDB4NWMzYywg MHg1ZjEwLCAweDhmZTksIDB4NTMwMiwgMHg4Y2QxLCAweDgwODksCi0gICAgMHg4Njc5LCAweDVl ZmYsIDB4NjVlNSwgMHg0ZTczLCAweDUxNjUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg1OTgyLCAweDVjM2YsIDB4 OTdlZSwgMHg0ZWZiLCAweDU5OGEsIDB4NWZjZCwgMHg4YThkLCAweDZmZTEsCi0gICAgMHg3OWIw LCAweDc5NjIsIDB4NWJlNywgMHg4NDcxLCAweDczMmIsIDB4NzFiMSwgMHg1ZTc0LCAweDVmZjUs Ci0gICAgMHg2MzdiLCAweDY0OWEsIDB4NzFjMywgMHg3Yzk4LCAweDRlNDMsIDB4NWVmYywgMHg0 ZTRiLCAweDU3ZGMsCi0gICAgMHg1NmEyLCAweDYwYTksIDB4NmZjMywgMHg3ZDBkLCAweDgwZmQs IDB4ODEzMywgMHg4MWJmLCAweDhmYjIsCi0gICAgMHg4OTk3LCAweDg2YTQsIDB4NWRmNCwgMHg2 MjhhLCAweDY0YWQsIDB4ODk4NywgMHg2Nzc3LCAweDZjZTIsCi0gICAgMHg2ZDNlLCAweDc0MzYs IDB4NzgzNCwgMHg1YTQ2LCAweDdmNzUsIDB4ODJhZCwgMHg5OWFjLCAweDRmZjMsCi0gICAgMHg1 ZWMzLCAweDYyZGQsIDB4NjM5MiwgMHg2NTU3LCAweDY3NmYsIDB4NzZjMywgMHg3MjRjLCAweDgw Y2MsCi0gICAgMHg4MGJhLCAweDhmMjksIDB4OTE0ZCwgMHg1MDBkLCAweDU3ZjksIDB4NWE5Miwg MHg2ODg1LCAweGZmZmQsCi0gICAgMHg2OTczLCAweDcxNjQsIDB4NzJmZCwgMHg4Y2I3LCAweDU4 ZjIsIDB4OGNlMCwgMHg5NjZhLCAweDkwMTksCi0gICAgMHg4NzdmLCAweDc5ZTQsIDB4NzdlNywg MHg4NDI5LCAweDRmMmYsIDB4NTI2NSwgMHg1MzVhLCAweDYyY2QsCi0gICAgMHg2N2NmLCAweDZj Y2EsIDB4NzY3ZCwgMHg3Yjk0LCAweDdjOTUsIDB4ODIzNiwgMHg4NTg0LCAweDhmZWIsCi0gICAg MHg2NmRkLCAweDZmMjAsIDB4NzIwNiwgMHg3ZTFiLCAweDgzYWIsIDB4OTljMSwgMHg5ZWE2LCAw eDUxZmQsCi0gICAgMHg3YmIxLCAweDc4NzIsIDB4N2JiOCwgMHg4MDg3LCAweDdiNDgsIDB4NmFl OCwgMHg1ZTYxLCAweDgwOGMsCi0gICAgMHg3NTUxLCAweDc1NjAsIDB4NTE2YiwgMHg5MjYyLCAw eDZlOGMsIDB4NzY3YSwgMHg5MTk3LCAweDlhZWEsCi0gICAgMHg0ZjEwLCAweDdmNzAsIDB4NjI5 YywgMHg3YjRmLCAweDk1YTUsIDB4OWNlOSwgMHg1NjdhLCAweDU4NTksCi0gICAgMHg4NmU0LCAw eDk2YmMsIDB4NGYzNCwgMHg1MjI0LCAweDUzNGEsIDB4NTNjZCwgMHg1M2RiLCAweDVlMDYsCi0g ICAgMHg2NDJjLCAweDY1OTEsIDB4Njc3ZiwgMHg2YzNlLCAweDZjNGUsIDB4NzI0OCwgMHg3MmFm LCAweDczZWQsCi0gICAgMHg3NTU0LCAweDdlNDEsIDB4ODIyYywgMHg4NWU5LCAweDhjYTksIDB4 N2JjNCwgMHg5MWM2LCAweDcxNjksCi0gICAgMHg5ODEyLCAweDk4ZWYsIDB4NjMzZCwgMHg2NjY5 LCAweDc1NmEsIDB4NzZlNCwgMHg3OGQwLCAweDg1NDMsCi0gICAgMHg4NmVlLCAweDUzMmEsIDB4 NTM1MSwgMHg1NDI2LCAweDU5ODMsIDB4NWU4NywgMHg1ZjdjLCAweDYwYjIsCi0gICAgMHg2MjQ5 LCAweDYyNzksIDB4NjJhYiwgMHg2NTkwLCAweDZiZDQsIDB4NmNjYywgMHg3NWIyLCAweDc2YWUs Ci0gICAgMHg3ODkxLCAweDc5ZDgsIDB4N2RjYiwgMHg3Zjc3LCAweDgwYTUsIDB4ODhhYiwgMHg4 YWI5LCAweDhjYmIsCi0gICAgMHg5MDdmLCAweDk3NWUsIDB4OThkYiwgMHg2YTBiLCAweDdjMzgs IDB4NTA5OSwgMHg1YzNlLCAweDVmYWUsCi0gICAgMHg2Nzg3LCAweDZiZDgsIDB4NzQzNSwgMHg3 NzA5LCAweDdmOGUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5ZjNiLCAweDY3Y2EsIDB4N2ExNywgMHg1MzM5LCAw eDc1OGIsIDB4OWFlZCwgMHg1ZjY2LCAweDgxOWQsCi0gICAgMHg4M2YxLCAweDgwOTgsIDB4NWYz YywgMHg1ZmM1LCAweDc1NjIsIDB4N2I0NiwgMHg5MDNjLCAweDY4NjcsCi0gICAgMHg1OWViLCAw eDVhOWIsIDB4N2QxMCwgMHg3NjdlLCAweDhiMmMsIDB4NGZmNSwgMHg1ZjZhLCAweDZhMTksCi0g ICAgMHg2YzM3LCAweDZmMDIsIDB4NzRlMiwgMHg3OTY4LCAweDg4NjgsIDB4OGE1NSwgMHg4Yzc5 LCAweDVlZGYsCi0gICAgMHg2M2NmLCAweDc1YzUsIDB4NzlkMiwgMHg4MmQ3LCAweDkzMjgsIDB4 OTJmMiwgMHg4NDljLCAweDg2ZWQsCi0gICAgMHg5YzJkLCAweDU0YzEsIDB4NWY2YywgMHg2NThj LCAweDZkNWMsIDB4NzAxNSwgMHg4Y2E3LCAweDhjZDMsCi0gICAgMHg5ODNiLCAweDY1NGYsIDB4 NzRmNiwgMHg0ZTBkLCAweDRlZDgsIDB4NTdlMCwgMHg1OTJiLCAweDVhNjYsCi0gICAgMHg1YmNj LCAweDUxYTgsIDB4NWUwMywgMHg1ZTljLCAweDYwMTYsIDB4NjI3NiwgMHg2NTc3LCAweGZmZmQs Ci0gICAgMHg2NWE3LCAweDY2NmUsIDB4NmQ2ZSwgMHg3MjM2LCAweDdiMjYsIDB4ODE1MCwgMHg4 MTlhLCAweDgyOTksCi0gICAgMHg4YjVjLCAweDhjYTAsIDB4OGNlNiwgMHg4ZDc0LCAweDk2MWMs IDB4OTY0NCwgMHg0ZmFlLCAweDY0YWIsCi0gICAgMHg2YjY2LCAweDgyMWUsIDB4ODQ2MSwgMHg4 NTZhLCAweDkwZTgsIDB4NWMwMSwgMHg2OTUzLCAweDk4YTgsCi0gICAgMHg4NDdhLCAweDg1NTcs IDB4NGYwZiwgMHg1MjZmLCAweDVmYTksIDB4NWU0NSwgMHg2NzBkLCAweDc5OGYsCi0gICAgMHg4 MTc5LCAweDg5MDcsIDB4ODk4NiwgMHg2ZGY1LCAweDVmMTcsIDB4NjI1NSwgMHg2Y2I4LCAweDRl Y2YsCi0gICAgMHg3MjY5LCAweDliOTIsIDB4NTIwNiwgMHg1NDNiLCAweDU2NzQsIDB4NThiMywg MHg2MWE0LCAweDYyNmUsCi0gICAgMHg3MTFhLCAweDU5NmUsIDB4N2M4OSwgMHg3Y2RlLCAweDdk MWIsIDB4OTZmMCwgMHg2NTg3LCAweDgwNWUsCi0gICAgMHg0ZTE5LCAweDRmNzUsIDB4NTE3NSwg MHg1ODQwLCAweDVlNjMsIDB4NWU3MywgMHg1ZjBhLCAweDY3YzQsCi0gICAgMHg0ZTI2LCAweDg1 M2QsIDB4OTU4OSwgMHg5NjViLCAweDdjNzMsIDB4OTgwMSwgMHg1MGZiLCAweDU4YzEsCi0gICAg MHg3NjU2LCAweDc4YTcsIDB4NTIyNSwgMHg3N2E1LCAweDg1MTEsIDB4N2I4NiwgMHg1MDRmLCAw eDU5MDksCi0gICAgMHg3MjQ3LCAweDdiYzcsIDB4N2RlOCwgMHg4ZmJhLCAweDhmZDQsIDB4OTA0 ZCwgMHg0ZmJmLCAweDUyYzksCi0gICAgMHg1YTI5LCAweDVmMDEsIDB4OTdhZCwgMHg0ZmRkLCAw eDgyMTcsIDB4OTJlYSwgMHg1NzAzLCAweDYzNTUsCi0gICAgMHg2YjY5LCAweDc1MmIsIDB4ODhk YywgMHg4ZjE0LCAweDdhNDIsIDB4NTJkZiwgMHg1ODkzLCAweDYxNTUsCi0gICAgMHg2MjBhLCAw eDY2YWUsIDB4NmJjZCwgMHg3YzNmLCAweDgzZTksIDB4NTAyMywgMHg0ZmY4LCAweDUzMDUsCi0g ICAgMHg1NDQ2LCAweDU4MzEsIDB4NTk0OSwgMHg1YjlkLCAweDVjZjAsIDB4NWNlZiwgMHg1ZDI5 LCAweDVlOTYsCi0gICAgMHg2MmIxLCAweDYzNjcsIDB4NjUzZSwgMHg2NWI5LCAweDY3MGIsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHg2Y2Q1LCAweDZjZTEsIDB4NzBmOSwgMHg3ODMyLCAweDdlMmIsIDB4ODBkZSwg MHg4MmIzLCAweDg0MGMsCi0gICAgMHg4NGVjLCAweDg3MDIsIDB4ODkxMiwgMHg4YTJhLCAweDhj NGEsIDB4OTBhNiwgMHg5MmQyLCAweDk4ZmQsCi0gICAgMHg5Y2YzLCAweDlkNmMsIDB4NGU0Ziwg MHg0ZWExLCAweDUwOGQsIDB4NTI1NiwgMHg1NzRhLCAweDU5YTgsCi0gICAgMHg1ZTNkLCAweDVm ZDgsIDB4NWZkOSwgMHg2MjNmLCAweDY2YjQsIDB4NjcxYiwgMHg2N2QwLCAweDY4ZDIsCi0gICAg MHg1MTkyLCAweDdkMjEsIDB4ODBhYSwgMHg4MWE4LCAweDhiMDAsIDB4OGM4YywgMHg4Y2JmLCAw eDkyN2UsCi0gICAgMHg5NjMyLCAweDU0MjAsIDB4OTgyYywgMHg1MzE3LCAweDUwZDUsIDB4NTM1 YywgMHg1OGE4LCAweDY0YjIsCi0gICAgMHg2NzM0LCAweDcyNjcsIDB4Nzc2NiwgMHg3YTQ2LCAw eDkxZTYsIDB4NTJjMywgMHg2Y2ExLCAweDZiODYsCi0gICAgMHg1ODAwLCAweDVlNGMsIDB4NTk1 NCwgMHg2NzJjLCAweDdmZmIsIDB4NTFlMSwgMHg3NmM2LCAweGZmZmQsCi0gICAgMHg2NDY5LCAw eDc4ZTgsIDB4OWI1NCwgMHg5ZWJiLCAweDU3Y2IsIDB4NTliOSwgMHg2NjI3LCAweDY3OWEsCi0g ICAgMHg2YmNlLCAweDU0ZTksIDB4NjlkOSwgMHg1ZTU1LCAweDgxOWMsIDB4Njc5NSwgMHg5YmFh LCAweDY3ZmUsCi0gICAgMHg5YzUyLCAweDY4NWQsIDB4NGVhNiwgMHg0ZmUzLCAweDUzYzgsIDB4 NjJiOSwgMHg2NzJiLCAweDZjYWIsCi0gICAgMHg4ZmM0LCAweDRmYWQsIDB4N2U2ZCwgMHg5ZWJm LCAweDRlMDcsIDB4NjE2MiwgMHg2ZTgwLCAweDZmMmIsCi0gICAgMHg4NTEzLCAweDU0NzMsIDB4 NjcyYSwgMHg5YjQ1LCAweDVkZjMsIDB4N2I5NSwgMHg1Y2FjLCAweDViYzYsCi0gICAgMHg4NzFj LCAweDZlNGEsIDB4ODRkMSwgMHg3YTE0LCAweDgxMDgsIDB4NTk5OSwgMHg3YzhkLCAweDZjMTEs Ci0gICAgMHg3NzIwLCAweDUyZDksIDB4NTkyMiwgMHg3MTIxLCAweDcyNWYsIDB4NzdkYiwgMHg5 NzI3LCAweDlkNjEsCi0gICAgMHg2OTBiLCAweDVhN2YsIDB4NWExOCwgMHg1MWE1LCAweDU0MGQs IDB4NTQ3ZCwgMHg2NjBlLCAweDc2ZGYsCi0gICAgMHg4ZmY3LCAweDkyOTgsIDB4OWNmNCwgMHg1 OWVhLCAweDcyNWQsIDB4NmVjNSwgMHg1MTRkLCAweDY4YzksCi0gICAgMHg3ZGJmLCAweDdkZWMs IDB4OTc2MiwgMHg5ZWJhLCAweDY0NzgsIDB4NmEyMSwgMHg4MzAyLCAweDU5ODQsCi0gICAgMHg1 YjVmLCAweDZiZGIsIDB4NzMxYiwgMHg3NmYyLCAweDdkYjIsIDB4ODAxNywgMHg4NDk5LCAweDUx MzIsCi0gICAgMHg2NzI4LCAweDllZDksIDB4NzZlZSwgMHg2NzYyLCAweDUyZmYsIDB4OTkwNSwg MHg1YzI0LCAweDYyM2IsCi0gICAgMHg3YzdlLCAweDhjYjAsIDB4NTU0ZiwgMHg2MGI2LCAweDdk MGIsIDB4OTU4MCwgMHg1MzAxLCAweDRlNWYsCi0gICAgMHg1MWI2LCAweDU5MWMsIDB4NzIzYSwg MHg4MDM2LCAweDkxY2UsIDB4NWYyNSwgMHg3N2UyLCAweDUzODQsCi0gICAgMHg1Zjc5LCAweDdk MDQsIDB4ODVhYywgMHg4YTMzLCAweDhlOGQsIDB4OTc1NiwgMHg2N2YzLCAweDg1YWUsCi0gICAg MHg5NDUzLCAweDYxMDksIDB4NjEwOCwgMHg2Y2I5LCAweDc2NTIsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4YWVk LCAweDhmMzgsIDB4NTUyZiwgMHg0ZjUxLCAweDUxMmEsIDB4NTJjNywgMHg1M2NiLCAweDViYTUs Ci0gICAgMHg1ZTdkLCAweDYwYTAsIDB4NjE4MiwgMHg2M2Q2LCAweDY3MDksIDB4NjdkYSwgMHg2 ZTY3LCAweDZkOGMsCi0gICAgMHg3MzM2LCAweDczMzcsIDB4NzUzMSwgMHg3OTUwLCAweDg4ZDUs IDB4OGE5OCwgMHg5MDRhLCAweDkwOTEsCi0gICAgMHg5MGY1LCAweDk2YzQsIDB4ODc4ZCwgMHg1 OTE1LCAweDRlODgsIDB4NGY1OSwgMHg0ZTBlLCAweDhhODksCi0gICAgMHg4ZjNmLCAweDk4MTAs IDB4NTBhZCwgMHg1ZTdjLCAweDU5OTYsIDB4NWJiOSwgMHg1ZWI4LCAweDYzZGEsCi0gICAgMHg2 M2ZhLCAweDY0YzEsIDB4NjZkYywgMHg2OTRhLCAweDY5ZDgsIDB4NmQwYiwgMHg2ZWI2LCAweDcx OTQsCi0gICAgMHg3NTI4LCAweDdhYWYsIDB4N2Y4YSwgMHg4MDAwLCAweDg0NDksIDB4ODRjOSwg MHg4OTgxLCAweDhiMjEsCi0gICAgMHg4ZTBhLCAweDkwNjUsIDB4OTY3ZCwgMHg5OTBhLCAweDYx N2UsIDB4NjI5MSwgMHg2YjMyLCAweGZmZmQsCi0gICAgMHg2YzgzLCAweDZkNzQsIDB4N2ZjYywg MHg3ZmZjLCAweDZkYzAsIDB4N2Y4NSwgMHg4N2JhLCAweDg4ZjgsCi0gICAgMHg2NzY1LCAweDgz YjEsIDB4OTgzYywgMHg5NmY3LCAweDZkMWIsIDB4N2Q2MSwgMHg4NDNkLCAweDkxNmEsCi0gICAg MHg0ZTcxLCAweDUzNzUsIDB4NWQ1MCwgMHg2YjA0LCAweDZmZWIsIDB4ODVjZCwgMHg4NjJkLCAw eDg5YTcsCi0gICAgMHg1MjI5LCAweDU0MGYsIDB4NWM2NSwgMHg2NzRlLCAweDY4YTgsIDB4NzQw NiwgMHg3NDgzLCAweDc1ZTIsCi0gICAgMHg4OGNmLCAweDg4ZTEsIDB4OTFjYywgMHg5NmUyLCAw eDk2NzgsIDB4NWY4YiwgMHg3Mzg3LCAweDdhY2IsCi0gICAgMHg4NDRlLCAweDYzYTAsIDB4NzU2 NSwgMHg1Mjg5LCAweDZkNDEsIDB4NmU5YywgMHg3NDA5LCAweDc1NTksCi0gICAgMHg3ODZiLCAw eDdjOTIsIDB4OTY4NiwgMHg3YWRjLCAweDlmOGQsIDB4NGZiNiwgMHg2MTZlLCAweDY1YzUsCi0g ICAgMHg4NjVjLCAweDRlODYsIDB4NGVhZSwgMHg1MGRhLCAweDRlMjEsIDB4NTFjYywgMHg1YmVl LCAweDY1OTksCi0gICAgMHg2ODgxLCAweDZkYmMsIDB4NzMxZiwgMHg3NjQyLCAweDc3YWQsIDB4 N2ExYywgMHg3Y2U3LCAweDgyNmYsCi0gICAgMHg4YWQyLCAweDkwN2MsIDB4OTFjZiwgMHg5Njc1 LCAweDk4MTgsIDB4NTI5YiwgMHg3ZGQxLCAweDUwMmIsCi0gICAgMHg1Mzk4LCAweDY3OTcsIDB4 NmRjYiwgMHg3MWQwLCAweDc0MzMsIDB4ODFlOCwgMHg4ZjJhLCAweDk2YTMsCi0gICAgMHg5YzU3 LCAweDllOWYsIDB4NzQ2MCwgMHg1ODQxLCAweDZkOTksIDB4N2QyZiwgMHg5ODVlLCAweDRlZTQs Ci0gICAgMHg0ZjM2LCAweDRmOGIsIDB4NTFiNywgMHg1MmIxLCAweDVkYmEsIDB4NjAxYywgMHg3 M2IyLCAweDc5M2MsCi0gICAgMHg4MmQzLCAweDkyMzQsIDB4OTZiNywgMHg5NmY2LCAweDk3MGEs IDB4OWU5NywgMHg5ZjYyLCAweDY2YTYsCi0gICAgMHg2Yjc0LCAweDUyMTcsIDB4NTJhMywgMHg3 MGM4LCAweDg4YzIsIDB4NWVjOSwgMHg2MDRiLCAweDYxOTAsCi0gICAgMHg2ZjIzLCAweDcxNDks IDB4N2MzZSwgMHg3ZGY0LCAweDgwNmYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4NGVlLCAweDkwMjMsIDB4OTMy YywgMHg1NDQyLCAweDliNmYsIDB4NmFkMywgMHg3MDg5LCAweDhjYzIsCi0gICAgMHg4ZGVmLCAw eDk3MzIsIDB4NTJiNCwgMHg1YTQxLCAweDVlY2EsIDB4NWYwNCwgMHg2NzE3LCAweDY5N2MsCi0g ICAgMHg2OTk0LCAweDZkNmEsIDB4NmYwZiwgMHg3MjYyLCAweDcyZmMsIDB4N2JlZCwgMHg4MDAx LCAweDgwN2UsCi0gICAgMHg4NzRiLCAweDkwY2UsIDB4NTE2ZCwgMHg5ZTkzLCAweDc5ODQsIDB4 ODA4YiwgMHg5MzMyLCAweDhhZDYsCi0gICAgMHg1MDJkLCAweDU0OGMsIDB4OGE3MSwgMHg2YjZh LCAweDhjYzQsIDB4ODEwNywgMHg2MGQxLCAweDY3YTAsCi0gICAgMHg5ZGYyLCAweDRlOTksIDB4 NGU5OCwgMHg5YzEwLCAweDhhNmIsIDB4ODVjMSwgMHg4NTY4LCAweDY5MDAsCi0gICAgMHg2ZTdl LCAweDc4OTcsIDB4ODE1NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDVm MGMsCi0gICAgMHg0ZTEwLCAweDRlMTUsIDB4NGUyYSwgMHg0ZTMxLCAweDRlMzYsIDB4NGUzYywg MHg0ZTNmLCAweDRlNDIsCi0gICAgMHg0ZTU2LCAweDRlNTgsIDB4NGU4MiwgMHg0ZTg1LCAweDhj NmIsIDB4NGU4YSwgMHg4MjEyLCAweDVmMGQsCi0gICAgMHg0ZThlLCAweDRlOWUsIDB4NGU5Ziwg MHg0ZWEwLCAweDRlYTIsIDB4NGViMCwgMHg0ZWIzLCAweDRlYjYsCi0gICAgMHg0ZWNlLCAweDRl Y2QsIDB4NGVjNCwgMHg0ZWM2LCAweDRlYzIsIDB4NGVkNywgMHg0ZWRlLCAweDRlZWQsCi0gICAg MHg0ZWRmLCAweDRlZjcsIDB4NGYwOSwgMHg0ZjVhLCAweDRmMzAsIDB4NGY1YiwgMHg0ZjVkLCAw eDRmNTcsCi0gICAgMHg0ZjQ3LCAweDRmNzYsIDB4NGY4OCwgMHg0ZjhmLCAweDRmOTgsIDB4NGY3 YiwgMHg0ZjY5LCAweDRmNzAsCi0gICAgMHg0ZjkxLCAweDRmNmYsIDB4NGY4NiwgMHg0Zjk2LCAw eDUxMTgsIDB4NGZkNCwgMHg0ZmRmLCAweDRmY2UsCi0gICAgMHg0ZmQ4LCAweDRmZGIsIDB4NGZk MSwgMHg0ZmRhLCAweDRmZDAsIDB4NGZlNCwgMHg0ZmU1LCAweDUwMWEsCi0gICAgMHg1MDI4LCAw eDUwMTQsIDB4NTAyYSwgMHg1MDI1LCAweDUwMDUsIDB4NGYxYywgMHg0ZmY2LCAweDUwMjEsCi0g ICAgMHg1MDI5LCAweDUwMmMsIDB4NGZmZSwgMHg0ZmVmLCAweDUwMTEsIDB4NTAwNiwgMHg1MDQz LCAweDUwNDcsCi0gICAgMHg2NzAzLCAweDUwNTUsIDB4NTA1MCwgMHg1MDQ4LCAweDUwNWEsIDB4 NTA1NiwgMHg1MDZjLCAweDUwNzgsCi0gICAgMHg1MDgwLCAweDUwOWEsIDB4NTA4NSwgMHg1MGI0 LCAweDUwYjIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHg1MGM5LCAweDUwY2EsIDB4NTBiMywgMHg1MGMyLCAweDUw ZDYsIDB4NTBkZSwgMHg1MGU1LCAweDUwZWQsCi0gICAgMHg1MGUzLCAweDUwZWUsIDB4NTBmOSwg MHg1MGY1LCAweDUxMDksIDB4NTEwMSwgMHg1MTAyLCAweDUxMTYsCi0gICAgMHg1MTE1LCAweDUx MTQsIDB4NTExYSwgMHg1MTIxLCAweDUxM2EsIDB4NTEzNywgMHg1MTNjLCAweDUxM2IsCi0gICAg MHg1MTNmLCAweDUxNDAsIDB4NTE1MiwgMHg1MTRjLCAweDUxNTQsIDB4NTE2MiwgMHg3YWY4LCAw eDUxNjksCi0gICAgMHg1MTZhLCAweDUxNmUsIDB4NTE4MCwgMHg1MTgyLCAweDU2ZDgsIDB4NTE4 YywgMHg1MTg5LCAweDUxOGYsCi0gICAgMHg1MTkxLCAweDUxOTMsIDB4NTE5NSwgMHg1MTk2LCAw eDUxYTQsIDB4NTFhNiwgMHg1MWEyLCAweDUxYTksCi0gICAgMHg1MWFhLCAweDUxYWIsIDB4NTFi MywgMHg1MWIxLCAweDUxYjIsIDB4NTFiMCwgMHg1MWI1LCAweDUxYmQsCi0gICAgMHg1MWM1LCAw eDUxYzksIDB4NTFkYiwgMHg1MWUwLCAweDg2NTUsIDB4NTFlOSwgMHg1MWVkLCAweGZmZmQsCi0g ICAgMHg1MWYwLCAweDUxZjUsIDB4NTFmZSwgMHg1MjA0LCAweDUyMGIsIDB4NTIxNCwgMHg1MjBl LCAweDUyMjcsCi0gICAgMHg1MjJhLCAweDUyMmUsIDB4NTIzMywgMHg1MjM5LCAweDUyNGYsIDB4 NTI0NCwgMHg1MjRiLCAweDUyNGMsCi0gICAgMHg1MjVlLCAweDUyNTQsIDB4NTI2YSwgMHg1Mjc0 LCAweDUyNjksIDB4NTI3MywgMHg1MjdmLCAweDUyN2QsCi0gICAgMHg1MjhkLCAweDUyOTQsIDB4 NTI5MiwgMHg1MjcxLCAweDUyODgsIDB4NTI5MSwgMHg4ZmE4LCAweDhmYTcsCi0gICAgMHg1MmFj LCAweDUyYWQsIDB4NTJiYywgMHg1MmI1LCAweDUyYzEsIDB4NTJjZCwgMHg1MmQ3LCAweDUyZGUs Ci0gICAgMHg1MmUzLCAweDUyZTYsIDB4OThlZCwgMHg1MmUwLCAweDUyZjMsIDB4NTJmNSwgMHg1 MmY4LCAweDUyZjksCi0gICAgMHg1MzA2LCAweDUzMDgsIDB4NzUzOCwgMHg1MzBkLCAweDUzMTAs IDB4NTMwZiwgMHg1MzE1LCAweDUzMWEsCi0gICAgMHg1MzIzLCAweDUzMmYsIDB4NTMzMSwgMHg1 MzMzLCAweDUzMzgsIDB4NTM0MCwgMHg1MzQ2LCAweDUzNDUsCi0gICAgMHg0ZTE3LCAweDUzNDks IDB4NTM0ZCwgMHg1MWQ2LCAweDUzNWUsIDB4NTM2OSwgMHg1MzZlLCAweDU5MTgsCi0gICAgMHg1 MzdiLCAweDUzNzcsIDB4NTM4MiwgMHg1Mzk2LCAweDUzYTAsIDB4NTNhNiwgMHg1M2E1LCAweDUz YWUsCi0gICAgMHg1M2IwLCAweDUzYjYsIDB4NTNjMywgMHg3YzEyLCAweDk2ZDksIDB4NTNkZiwg MHg2NmZjLCAweDcxZWUsCi0gICAgMHg1M2VlLCAweDUzZTgsIDB4NTNlZCwgMHg1M2ZhLCAweDU0 MDEsIDB4NTQzZCwgMHg1NDQwLCAweDU0MmMsCi0gICAgMHg1NDJkLCAweDU0M2MsIDB4NTQyZSwg MHg1NDM2LCAweDU0MjksIDB4NTQxZCwgMHg1NDRlLCAweDU0OGYsCi0gICAgMHg1NDc1LCAweDU0 OGUsIDB4NTQ1ZiwgMHg1NDcxLCAweDU0NzcsIDB4NTQ3MCwgMHg1NDkyLCAweDU0N2IsCi0gICAg MHg1NDgwLCAweDU0NzYsIDB4NTQ4NCwgMHg1NDkwLCAweDU0ODYsIDB4NTRjNywgMHg1NGEyLCAw eDU0YjgsCi0gICAgMHg1NGE1LCAweDU0YWMsIDB4NTRjNCwgMHg1NGM4LCAweDU0YTgsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHg1NGFiLCAweDU0YzIsIDB4NTRhNCwgMHg1NGJlLCAweDU0YmMsIDB4NTRkOCwgMHg1 NGU1LCAweDU0ZTYsCi0gICAgMHg1NTBmLCAweDU1MTQsIDB4NTRmZCwgMHg1NGVlLCAweDU0ZWQs IDB4NTRmYSwgMHg1NGUyLCAweDU1MzksCi0gICAgMHg1NTQwLCAweDU1NjMsIDB4NTU0YywgMHg1 NTJlLCAweDU1NWMsIDB4NTU0NSwgMHg1NTU2LCAweDU1NTcsCi0gICAgMHg1NTM4LCAweDU1MzMs IDB4NTU1ZCwgMHg1NTk5LCAweDU1ODAsIDB4NTRhZiwgMHg1NThhLCAweDU1OWYsCi0gICAgMHg1 NTdiLCAweDU1N2UsIDB4NTU5OCwgMHg1NTllLCAweDU1YWUsIDB4NTU3YywgMHg1NTgzLCAweDU1 YTksCi0gICAgMHg1NTg3LCAweDU1YTgsIDB4NTVkYSwgMHg1NWM1LCAweDU1ZGYsIDB4NTVjNCwg MHg1NWRjLCAweDU1ZTQsCi0gICAgMHg1NWQ0LCAweDU2MTQsIDB4NTVmNywgMHg1NjE2LCAweDU1 ZmUsIDB4NTVmZCwgMHg1NjFiLCAweDU1ZjksCi0gICAgMHg1NjRlLCAweDU2NTAsIDB4NzFkZiwg MHg1NjM0LCAweDU2MzYsIDB4NTYzMiwgMHg1NjM4LCAweGZmZmQsCi0gICAgMHg1NjZiLCAweDU2 NjQsIDB4NTYyZiwgMHg1NjZjLCAweDU2NmEsIDB4NTY4NiwgMHg1NjgwLCAweDU2OGEsCi0gICAg MHg1NmEwLCAweDU2OTQsIDB4NTY4ZiwgMHg1NmE1LCAweDU2YWUsIDB4NTZiNiwgMHg1NmI0LCAw eDU2YzIsCi0gICAgMHg1NmJjLCAweDU2YzEsIDB4NTZjMywgMHg1NmMwLCAweDU2YzgsIDB4NTZj ZSwgMHg1NmQxLCAweDU2ZDMsCi0gICAgMHg1NmQ3LCAweDU2ZWUsIDB4NTZmOSwgMHg1NzAwLCAw eDU2ZmYsIDB4NTcwNCwgMHg1NzA5LCAweDU3MDgsCi0gICAgMHg1NzBiLCAweDU3MGQsIDB4NTcx MywgMHg1NzE4LCAweDU3MTYsIDB4NTVjNywgMHg1NzFjLCAweDU3MjYsCi0gICAgMHg1NzM3LCAw eDU3MzgsIDB4NTc0ZSwgMHg1NzNiLCAweDU3NDAsIDB4NTc0ZiwgMHg1NzY5LCAweDU3YzAsCi0g ICAgMHg1Nzg4LCAweDU3NjEsIDB4NTc3ZiwgMHg1Nzg5LCAweDU3OTMsIDB4NTdhMCwgMHg1N2Iz LCAweDU3YTQsCi0gICAgMHg1N2FhLCAweDU3YjAsIDB4NTdjMywgMHg1N2M2LCAweDU3ZDQsIDB4 NTdkMiwgMHg1N2QzLCAweDU4MGEsCi0gICAgMHg1N2Q2LCAweDU3ZTMsIDB4NTgwYiwgMHg1ODE5 LCAweDU4MWQsIDB4NTg3MiwgMHg1ODIxLCAweDU4NjIsCi0gICAgMHg1ODRiLCAweDU4NzAsIDB4 NmJjMCwgMHg1ODUyLCAweDU4M2QsIDB4NTg3OSwgMHg1ODg1LCAweDU4YjksCi0gICAgMHg1ODlm LCAweDU4YWIsIDB4NThiYSwgMHg1OGRlLCAweDU4YmIsIDB4NThiOCwgMHg1OGFlLCAweDU4YzUs Ci0gICAgMHg1OGQzLCAweDU4ZDEsIDB4NThkNywgMHg1OGQ5LCAweDU4ZDgsIDB4NThlNSwgMHg1 OGRjLCAweDU4ZTQsCi0gICAgMHg1OGRmLCAweDU4ZWYsIDB4NThmYSwgMHg1OGY5LCAweDU4ZmIs IDB4NThmYywgMHg1OGZkLCAweDU5MDIsCi0gICAgMHg1OTBhLCAweDU5MTAsIDB4NTkxYiwgMHg2 OGE2LCAweDU5MjUsIDB4NTkyYywgMHg1OTJkLCAweDU5MzIsCi0gICAgMHg1OTM4LCAweDU5M2Us IDB4N2FkMiwgMHg1OTU1LCAweDU5NTAsIDB4NTk0ZSwgMHg1OTVhLCAweDU5NTgsCi0gICAgMHg1 OTYyLCAweDU5NjAsIDB4NTk2NywgMHg1OTZjLCAweDU5NjksIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg1OTc4LCAw eDU5ODEsIDB4NTk5ZCwgMHg0ZjVlLCAweDRmYWIsIDB4NTlhMywgMHg1OWIyLCAweDU5YzYsCi0g ICAgMHg1OWU4LCAweDU5ZGMsIDB4NTk4ZCwgMHg1OWQ5LCAweDU5ZGEsIDB4NWEyNSwgMHg1YTFm LCAweDVhMTEsCi0gICAgMHg1YTFjLCAweDVhMDksIDB4NWExYSwgMHg1YTQwLCAweDVhNmMsIDB4 NWE0OSwgMHg1YTM1LCAweDVhMzYsCi0gICAgMHg1YTYyLCAweDVhNmEsIDB4NWE5YSwgMHg1YWJj LCAweDVhYmUsIDB4NWFjYiwgMHg1YWMyLCAweDVhYmQsCi0gICAgMHg1YWUzLCAweDVhZDcsIDB4 NWFlNiwgMHg1YWU5LCAweDVhZDYsIDB4NWFmYSwgMHg1YWZiLCAweDViMGMsCi0gICAgMHg1YjBi LCAweDViMTYsIDB4NWIzMiwgMHg1YWQwLCAweDViMmEsIDB4NWIzNiwgMHg1YjNlLCAweDViNDMs Ci0gICAgMHg1YjQ1LCAweDViNDAsIDB4NWI1MSwgMHg1YjU1LCAweDViNWEsIDB4NWI1YiwgMHg1 YjY1LCAweDViNjksCi0gICAgMHg1YjcwLCAweDViNzMsIDB4NWI3NSwgMHg1Yjc4LCAweDY1ODgs IDB4NWI3YSwgMHg1YjgwLCAweGZmZmQsCi0gICAgMHg1YjgzLCAweDViYTYsIDB4NWJiOCwgMHg1 YmMzLCAweDViYzcsIDB4NWJjOSwgMHg1YmQ0LCAweDViZDAsCi0gICAgMHg1YmU0LCAweDViZTYs IDB4NWJlMiwgMHg1YmRlLCAweDViZTUsIDB4NWJlYiwgMHg1YmYwLCAweDViZjYsCi0gICAgMHg1 YmYzLCAweDVjMDUsIDB4NWMwNywgMHg1YzA4LCAweDVjMGQsIDB4NWMxMywgMHg1YzIwLCAweDVj MjIsCi0gICAgMHg1YzI4LCAweDVjMzgsIDB4NWMzOSwgMHg1YzQxLCAweDVjNDYsIDB4NWM0ZSwg MHg1YzUzLCAweDVjNTAsCi0gICAgMHg1YzRmLCAweDViNzEsIDB4NWM2YywgMHg1YzZlLCAweDRl NjIsIDB4NWM3NiwgMHg1Yzc5LCAweDVjOGMsCi0gICAgMHg1YzkxLCAweDVjOTQsIDB4NTk5Yiwg MHg1Y2FiLCAweDVjYmIsIDB4NWNiNiwgMHg1Y2JjLCAweDVjYjcsCi0gICAgMHg1Y2M1LCAweDVj YmUsIDB4NWNjNywgMHg1Y2Q5LCAweDVjZTksIDB4NWNmZCwgMHg1Y2ZhLCAweDVjZWQsCi0gICAg MHg1ZDhjLCAweDVjZWEsIDB4NWQwYiwgMHg1ZDE1LCAweDVkMTcsIDB4NWQ1YywgMHg1ZDFmLCAw eDVkMWIsCi0gICAgMHg1ZDExLCAweDVkMTQsIDB4NWQyMiwgMHg1ZDFhLCAweDVkMTksIDB4NWQx OCwgMHg1ZDRjLCAweDVkNTIsCi0gICAgMHg1ZDRlLCAweDVkNGIsIDB4NWQ2YywgMHg1ZDczLCAw eDVkNzYsIDB4NWQ4NywgMHg1ZDg0LCAweDVkODIsCi0gICAgMHg1ZGEyLCAweDVkOWQsIDB4NWRh YywgMHg1ZGFlLCAweDVkYmQsIDB4NWQ5MCwgMHg1ZGI3LCAweDVkYmMsCi0gICAgMHg1ZGM5LCAw eDVkY2QsIDB4NWRkMywgMHg1ZGQyLCAweDVkZDYsIDB4NWRkYiwgMHg1ZGViLCAweDVkZjIsCi0g ICAgMHg1ZGY1LCAweDVlMGIsIDB4NWUxYSwgMHg1ZTE5LCAweDVlMTEsIDB4NWUxYiwgMHg1ZTM2 LCAweDVlMzcsCi0gICAgMHg1ZTQ0LCAweDVlNDMsIDB4NWU0MCwgMHg1ZTRlLCAweDVlNTcsIDB4 NWU1NCwgMHg1ZTVmLCAweDVlNjIsCi0gICAgMHg1ZTY0LCAweDVlNDcsIDB4NWU3NSwgMHg1ZTc2 LCAweDVlN2EsIDB4OWViYywgMHg1ZTdmLCAweDVlYTAsCi0gICAgMHg1ZWMxLCAweDVlYzIsIDB4 NWVjOCwgMHg1ZWQwLCAweDVlY2YsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg1ZWQ2LCAweDVlZTMsIDB4NWVkZCwg MHg1ZWRhLCAweDVlZGIsIDB4NWVlMiwgMHg1ZWUxLCAweDVlZTgsCi0gICAgMHg1ZWU5LCAweDVl ZWMsIDB4NWVmMSwgMHg1ZWYzLCAweDVlZjAsIDB4NWVmNCwgMHg1ZWY4LCAweDVlZmUsCi0gICAg MHg1ZjAzLCAweDVmMDksIDB4NWY1ZCwgMHg1ZjVjLCAweDVmMGIsIDB4NWYxMSwgMHg1ZjE2LCAw eDVmMjksCi0gICAgMHg1ZjJkLCAweDVmMzgsIDB4NWY0MSwgMHg1ZjQ4LCAweDVmNGMsIDB4NWY0 ZSwgMHg1ZjJmLCAweDVmNTEsCi0gICAgMHg1ZjU2LCAweDVmNTcsIDB4NWY1OSwgMHg1ZjYxLCAw eDVmNmQsIDB4NWY3MywgMHg1Zjc3LCAweDVmODMsCi0gICAgMHg1ZjgyLCAweDVmN2YsIDB4NWY4 YSwgMHg1Zjg4LCAweDVmOTEsIDB4NWY4NywgMHg1ZjllLCAweDVmOTksCi0gICAgMHg1Zjk4LCAw eDVmYTAsIDB4NWZhOCwgMHg1ZmFkLCAweDVmYmMsIDB4NWZkNiwgMHg1ZmZiLCAweDVmZTQsCi0g ICAgMHg1ZmY4LCAweDVmZjEsIDB4NWZkZCwgMHg2MGIzLCAweDVmZmYsIDB4NjAyMSwgMHg2MDYw LCAweGZmZmQsCi0gICAgMHg2MDE5LCAweDYwMTAsIDB4NjAyOSwgMHg2MDBlLCAweDYwMzEsIDB4 NjAxYiwgMHg2MDE1LCAweDYwMmIsCi0gICAgMHg2MDI2LCAweDYwMGYsIDB4NjAzYSwgMHg2MDVh LCAweDYwNDEsIDB4NjA2YSwgMHg2MDc3LCAweDYwNWYsCi0gICAgMHg2MDRhLCAweDYwNDYsIDB4 NjA0ZCwgMHg2MDYzLCAweDYwNDMsIDB4NjA2NCwgMHg2MDQyLCAweDYwNmMsCi0gICAgMHg2MDZi LCAweDYwNTksIDB4NjA4MSwgMHg2MDhkLCAweDYwZTcsIDB4NjA4MywgMHg2MDlhLCAweDYwODQs Ci0gICAgMHg2MDliLCAweDYwOTYsIDB4NjA5NywgMHg2MDkyLCAweDYwYTcsIDB4NjA4YiwgMHg2 MGUxLCAweDYwYjgsCi0gICAgMHg2MGUwLCAweDYwZDMsIDB4NjBiNCwgMHg1ZmYwLCAweDYwYmQs IDB4NjBjNiwgMHg2MGI1LCAweDYwZDgsCi0gICAgMHg2MTRkLCAweDYxMTUsIDB4NjEwNiwgMHg2 MGY2LCAweDYwZjcsIDB4NjEwMCwgMHg2MGY0LCAweDYwZmEsCi0gICAgMHg2MTAzLCAweDYxMjEs IDB4NjBmYiwgMHg2MGYxLCAweDYxMGQsIDB4NjEwZSwgMHg2MTQ3LCAweDYxM2UsCi0gICAgMHg2 MTI4LCAweDYxMjcsIDB4NjE0YSwgMHg2MTNmLCAweDYxM2MsIDB4NjEyYywgMHg2MTM0LCAweDYx M2QsCi0gICAgMHg2MTQyLCAweDYxNDQsIDB4NjE3MywgMHg2MTc3LCAweDYxNTgsIDB4NjE1OSwg MHg2MTVhLCAweDYxNmIsCi0gICAgMHg2MTc0LCAweDYxNmYsIDB4NjE2NSwgMHg2MTcxLCAweDYx NWYsIDB4NjE1ZCwgMHg2MTUzLCAweDYxNzUsCi0gICAgMHg2MTk5LCAweDYxOTYsIDB4NjE4Nywg MHg2MWFjLCAweDYxOTQsIDB4NjE5YSwgMHg2MThhLCAweDYxOTEsCi0gICAgMHg2MWFiLCAweDYx YWUsIDB4NjFjYywgMHg2MWNhLCAweDYxYzksIDB4NjFmNywgMHg2MWM4LCAweDYxYzMsCi0gICAg MHg2MWM2LCAweDYxYmEsIDB4NjFjYiwgMHg3Zjc5LCAweDYxY2QsIDB4NjFlNiwgMHg2MWUzLCAw eDYxZjYsCi0gICAgMHg2MWZhLCAweDYxZjQsIDB4NjFmZiwgMHg2MWZkLCAweDYxZmMsIDB4NjFm ZSwgMHg2MjAwLCAweDYyMDgsCi0gICAgMHg2MjA5LCAweDYyMGQsIDB4NjIwYywgMHg2MjE0LCAw eDYyMWIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHg2MjFlLCAweDYyMjEsIDB4NjIyYSwgMHg2MjJlLCAweDYyMzAs IDB4NjIzMiwgMHg2MjMzLCAweDYyNDEsCi0gICAgMHg2MjRlLCAweDYyNWUsIDB4NjI2MywgMHg2 MjViLCAweDYyNjAsIDB4NjI2OCwgMHg2MjdjLCAweDYyODIsCi0gICAgMHg2Mjg5LCAweDYyN2Us IDB4NjI5MiwgMHg2MjkzLCAweDYyOTYsIDB4NjJkNCwgMHg2MjgzLCAweDYyOTQsCi0gICAgMHg2 MmQ3LCAweDYyZDEsIDB4NjJiYiwgMHg2MmNmLCAweDYyZmYsIDB4NjJjNiwgMHg2NGQ0LCAweDYy YzgsCi0gICAgMHg2MmRjLCAweDYyY2MsIDB4NjJjYSwgMHg2MmMyLCAweDYyYzcsIDB4NjI5Yiwg MHg2MmM5LCAweDYzMGMsCi0gICAgMHg2MmVlLCAweDYyZjEsIDB4NjMyNywgMHg2MzAyLCAweDYz MDgsIDB4NjJlZiwgMHg2MmY1LCAweDYzNTAsCi0gICAgMHg2MzNlLCAweDYzNGQsIDB4NjQxYywg MHg2MzRmLCAweDYzOTYsIDB4NjM4ZSwgMHg2MzgwLCAweDYzYWIsCi0gICAgMHg2Mzc2LCAweDYz YTMsIDB4NjM4ZiwgMHg2Mzg5LCAweDYzOWYsIDB4NjNiNSwgMHg2MzZiLCAweGZmZmQsCi0gICAg MHg2MzY5LCAweDYzYmUsIDB4NjNlOSwgMHg2M2MwLCAweDYzYzYsIDB4NjNlMywgMHg2M2M5LCAw eDYzZDIsCi0gICAgMHg2M2Y2LCAweDYzYzQsIDB4NjQxNiwgMHg2NDM0LCAweDY0MDYsIDB4NjQx MywgMHg2NDI2LCAweDY0MzYsCi0gICAgMHg2NTFkLCAweDY0MTcsIDB4NjQyOCwgMHg2NDBmLCAw eDY0NjcsIDB4NjQ2ZiwgMHg2NDc2LCAweDY0NGUsCi0gICAgMHg2NTJhLCAweDY0OTUsIDB4NjQ5 MywgMHg2NGE1LCAweDY0YTksIDB4NjQ4OCwgMHg2NGJjLCAweDY0ZGEsCi0gICAgMHg2NGQyLCAw eDY0YzUsIDB4NjRjNywgMHg2NGJiLCAweDY0ZDgsIDB4NjRjMiwgMHg2NGYxLCAweDY0ZTcsCi0g ICAgMHg4MjA5LCAweDY0ZTAsIDB4NjRlMSwgMHg2MmFjLCAweDY0ZTMsIDB4NjRlZiwgMHg2NTJj LCAweDY0ZjYsCi0gICAgMHg2NGY0LCAweDY0ZjIsIDB4NjRmYSwgMHg2NTAwLCAweDY0ZmQsIDB4 NjUxOCwgMHg2NTFjLCAweDY1MDUsCi0gICAgMHg2NTI0LCAweDY1MjMsIDB4NjUyYiwgMHg2NTM0 LCAweDY1MzUsIDB4NjUzNywgMHg2NTM2LCAweDY1MzgsCi0gICAgMHg3NTRiLCAweDY1NDgsIDB4 NjU1NiwgMHg2NTU1LCAweDY1NGQsIDB4NjU1OCwgMHg2NTVlLCAweDY1NWQsCi0gICAgMHg2NTcy LCAweDY1NzgsIDB4NjU4MiwgMHg2NTgzLCAweDhiOGEsIDB4NjU5YiwgMHg2NTlmLCAweDY1YWIs Ci0gICAgMHg2NWI3LCAweDY1YzMsIDB4NjVjNiwgMHg2NWMxLCAweDY1YzQsIDB4NjVjYywgMHg2 NWQyLCAweDY1ZGIsCi0gICAgMHg2NWQ5LCAweDY1ZTAsIDB4NjVlMSwgMHg2NWYxLCAweDY3NzIs IDB4NjYwYSwgMHg2NjAzLCAweDY1ZmIsCi0gICAgMHg2NzczLCAweDY2MzUsIDB4NjYzNiwgMHg2 NjM0LCAweDY2MWMsIDB4NjY0ZiwgMHg2NjQ0LCAweDY2NDksCi0gICAgMHg2NjQxLCAweDY2NWUs IDB4NjY1ZCwgMHg2NjY0LCAweDY2NjcsIDB4NjY2OCwgMHg2NjVmLCAweDY2NjIsCi0gICAgMHg2 NjcwLCAweDY2ODMsIDB4NjY4OCwgMHg2NjhlLCAweDY2ODksIDB4NjY4NCwgMHg2Njk4LCAweDY2 OWQsCi0gICAgMHg2NmMxLCAweDY2YjksIDB4NjZjOSwgMHg2NmJlLCAweDY2YmMsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHg2NmM0LCAweDY2YjgsIDB4NjZkNiwgMHg2NmRhLCAweDY2ZTAsIDB4NjYzZiwgMHg2NmU2 LCAweDY2ZTksCi0gICAgMHg2NmYwLCAweDY2ZjUsIDB4NjZmNywgMHg2NzBmLCAweDY3MTYsIDB4 NjcxZSwgMHg2NzI2LCAweDY3MjcsCi0gICAgMHg5NzM4LCAweDY3MmUsIDB4NjczZiwgMHg2NzM2 LCAweDY3NDEsIDB4NjczOCwgMHg2NzM3LCAweDY3NDYsCi0gICAgMHg2NzVlLCAweDY3NjAsIDB4 Njc1OSwgMHg2NzYzLCAweDY3NjQsIDB4Njc4OSwgMHg2NzcwLCAweDY3YTksCi0gICAgMHg2Nzdj LCAweDY3NmEsIDB4Njc4YywgMHg2NzhiLCAweDY3YTYsIDB4NjdhMSwgMHg2Nzg1LCAweDY3Yjcs Ci0gICAgMHg2N2VmLCAweDY3YjQsIDB4NjdlYywgMHg2N2IzLCAweDY3ZTksIDB4NjdiOCwgMHg2 N2U0LCAweDY3ZGUsCi0gICAgMHg2N2RkLCAweDY3ZTIsIDB4NjdlZSwgMHg2N2I5LCAweDY3Y2Us IDB4NjdjNiwgMHg2N2U3LCAweDZhOWMsCi0gICAgMHg2ODFlLCAweDY4NDYsIDB4NjgyOSwgMHg2 ODQwLCAweDY4NGQsIDB4NjgzMiwgMHg2ODRlLCAweGZmZmQsCi0gICAgMHg2OGIzLCAweDY4MmIs IDB4Njg1OSwgMHg2ODYzLCAweDY4NzcsIDB4Njg3ZiwgMHg2ODlmLCAweDY4OGYsCi0gICAgMHg2 OGFkLCAweDY4OTQsIDB4Njg5ZCwgMHg2ODliLCAweDY4ODMsIDB4NmFhZSwgMHg2OGI5LCAweDY4 NzQsCi0gICAgMHg2OGI1LCAweDY4YTAsIDB4NjhiYSwgMHg2OTBmLCAweDY4OGQsIDB4Njg3ZSwg MHg2OTAxLCAweDY4Y2EsCi0gICAgMHg2OTA4LCAweDY4ZDgsIDB4NjkyMiwgMHg2OTI2LCAweDY4 ZTEsIDB4NjkwYywgMHg2OGNkLCAweDY4ZDQsCi0gICAgMHg2OGU3LCAweDY4ZDUsIDB4NjkzNiwg MHg2OTEyLCAweDY5MDQsIDB4NjhkNywgMHg2OGUzLCAweDY5MjUsCi0gICAgMHg2OGY5LCAweDY4 ZTAsIDB4NjhlZiwgMHg2OTI4LCAweDY5MmEsIDB4NjkxYSwgMHg2OTIzLCAweDY5MjEsCi0gICAg MHg2OGM2LCAweDY5NzksIDB4Njk3NywgMHg2OTVjLCAweDY5NzgsIDB4Njk2YiwgMHg2OTU0LCAw eDY5N2UsCi0gICAgMHg2OTZlLCAweDY5MzksIDB4Njk3NCwgMHg2OTNkLCAweDY5NTksIDB4Njkz MCwgMHg2OTYxLCAweDY5NWUsCi0gICAgMHg2OTVkLCAweDY5ODEsIDB4Njk2YSwgMHg2OWIyLCAw eDY5YWUsIDB4NjlkMCwgMHg2OWJmLCAweDY5YzEsCi0gICAgMHg2OWQzLCAweDY5YmUsIDB4Njlj ZSwgMHg1YmU4LCAweDY5Y2EsIDB4NjlkZCwgMHg2OWJiLCAweDY5YzMsCi0gICAgMHg2OWE3LCAw eDZhMmUsIDB4Njk5MSwgMHg2OWEwLCAweDY5OWMsIDB4Njk5NSwgMHg2OWI0LCAweDY5ZGUsCi0g ICAgMHg2OWU4LCAweDZhMDIsIDB4NmExYiwgMHg2OWZmLCAweDZiMGEsIDB4NjlmOSwgMHg2OWYy LCAweDY5ZTcsCi0gICAgMHg2YTA1LCAweDY5YjEsIDB4NmExZSwgMHg2OWVkLCAweDZhMTQsIDB4 NjllYiwgMHg2YTBhLCAweDZhMTIsCi0gICAgMHg2YWMxLCAweDZhMjMsIDB4NmExMywgMHg2YTQ0 LCAweDZhMGMsIDB4NmE3MiwgMHg2YTM2LCAweDZhNzgsCi0gICAgMHg2YTQ3LCAweDZhNjIsIDB4 NmE1OSwgMHg2YTY2LCAweDZhNDgsIDB4NmEzOCwgMHg2YTIyLCAweDZhOTAsCi0gICAgMHg2YThk LCAweDZhYTAsIDB4NmE4NCwgMHg2YWEyLCAweDZhYTMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg2YTk3LCAweDg2 MTcsIDB4NmFiYiwgMHg2YWMzLCAweDZhYzIsIDB4NmFiOCwgMHg2YWIzLCAweDZhYWMsCi0gICAg MHg2YWRlLCAweDZhZDEsIDB4NmFkZiwgMHg2YWFhLCAweDZhZGEsIDB4NmFlYSwgMHg2YWZiLCAw eDZiMDUsCi0gICAgMHg4NjE2LCAweDZhZmEsIDB4NmIxMiwgMHg2YjE2LCAweDliMzEsIDB4NmIx ZiwgMHg2YjM4LCAweDZiMzcsCi0gICAgMHg3NmRjLCAweDZiMzksIDB4OThlZSwgMHg2YjQ3LCAw eDZiNDMsIDB4NmI0OSwgMHg2YjUwLCAweDZiNTksCi0gICAgMHg2YjU0LCAweDZiNWIsIDB4NmI1 ZiwgMHg2YjYxLCAweDZiNzgsIDB4NmI3OSwgMHg2YjdmLCAweDZiODAsCi0gICAgMHg2Yjg0LCAw eDZiODMsIDB4NmI4ZCwgMHg2Yjk4LCAweDZiOTUsIDB4NmI5ZSwgMHg2YmE0LCAweDZiYWEsCi0g ICAgMHg2YmFiLCAweDZiYWYsIDB4NmJiMiwgMHg2YmIxLCAweDZiYjMsIDB4NmJiNywgMHg2YmJj LCAweDZiYzYsCi0gICAgMHg2YmNiLCAweDZiZDMsIDB4NmJkZiwgMHg2YmVjLCAweDZiZWIsIDB4 NmJmMywgMHg2YmVmLCAweGZmZmQsCi0gICAgMHg5ZWJlLCAweDZjMDgsIDB4NmMxMywgMHg2YzE0 LCAweDZjMWIsIDB4NmMyNCwgMHg2YzIzLCAweDZjNWUsCi0gICAgMHg2YzU1LCAweDZjNjIsIDB4 NmM2YSwgMHg2YzgyLCAweDZjOGQsIDB4NmM5YSwgMHg2YzgxLCAweDZjOWIsCi0gICAgMHg2Yzdl LCAweDZjNjgsIDB4NmM3MywgMHg2YzkyLCAweDZjOTAsIDB4NmNjNCwgMHg2Y2YxLCAweDZjZDMs Ci0gICAgMHg2Y2JkLCAweDZjZDcsIDB4NmNjNSwgMHg2Y2RkLCAweDZjYWUsIDB4NmNiMSwgMHg2 Y2JlLCAweDZjYmEsCi0gICAgMHg2Y2RiLCAweDZjZWYsIDB4NmNkOSwgMHg2Y2VhLCAweDZkMWYs IDB4ODg0ZCwgMHg2ZDM2LCAweDZkMmIsCi0gICAgMHg2ZDNkLCAweDZkMzgsIDB4NmQxOSwgMHg2 ZDM1LCAweDZkMzMsIDB4NmQxMiwgMHg2ZDBjLCAweDZkNjMsCi0gICAgMHg2ZDkzLCAweDZkNjQs IDB4NmQ1YSwgMHg2ZDc5LCAweDZkNTksIDB4NmQ4ZSwgMHg2ZDk1LCAweDZmZTQsCi0gICAgMHg2 ZDg1LCAweDZkZjksIDB4NmUxNSwgMHg2ZTBhLCAweDZkYjUsIDB4NmRjNywgMHg2ZGU2LCAweDZk YjgsCi0gICAgMHg2ZGM2LCAweDZkZWMsIDB4NmRkZSwgMHg2ZGNjLCAweDZkZTgsIDB4NmRkMiwg MHg2ZGM1LCAweDZkZmEsCi0gICAgMHg2ZGQ5LCAweDZkZTQsIDB4NmRkNSwgMHg2ZGVhLCAweDZk ZWUsIDB4NmUyZCwgMHg2ZTZlLCAweDZlMmUsCi0gICAgMHg2ZTE5LCAweDZlNzIsIDB4NmU1Ziwg MHg2ZTNlLCAweDZlMjMsIDB4NmU2YiwgMHg2ZTJiLCAweDZlNzYsCi0gICAgMHg2ZTRkLCAweDZl MWYsIDB4NmU0MywgMHg2ZTNhLCAweDZlNGUsIDB4NmUyNCwgMHg2ZWZmLCAweDZlMWQsCi0gICAg MHg2ZTM4LCAweDZlODIsIDB4NmVhYSwgMHg2ZTk4LCAweDZlYzksIDB4NmViNywgMHg2ZWQzLCAw eDZlYmQsCi0gICAgMHg2ZWFmLCAweDZlYzQsIDB4NmViMiwgMHg2ZWQ0LCAweDZlZDUsIDB4NmU4 ZiwgMHg2ZWE1LCAweDZlYzIsCi0gICAgMHg2ZTlmLCAweDZmNDEsIDB4NmYxMSwgMHg3MDRjLCAw eDZlZWMsIDB4NmVmOCwgMHg2ZWZlLCAweDZmM2YsCi0gICAgMHg2ZWYyLCAweDZmMzEsIDB4NmVl ZiwgMHg2ZjMyLCAweDZlY2MKLX07Ci0KLXN0YXRpYyBVU0hPUlQgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBTaGlmdC1KSVMgdG8gVW5pY29kZSAqLwotc2p1X2UwNDBbXSA9IHsgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIDB4ZTA0MCB0aHJ1IDB4ZWFhNCAqLwotICAgIDB4NmYzZSwg MHg2ZjEzLCAweDZlZjcsIDB4NmY4NiwgMHg2ZjdhLCAweDZmNzgsIDB4NmY4MSwgMHg2ZjgwLAot ICAgIDB4NmY2ZiwgMHg2ZjViLCAweDZmZjMsIDB4NmY2ZCwgMHg2ZjgyLCAweDZmN2MsIDB4NmY1 OCwgMHg2ZjhlLAotICAgIDB4NmY5MSwgMHg2ZmMyLCAweDZmNjYsIDB4NmZiMywgMHg2ZmEzLCAw eDZmYTEsIDB4NmZhNCwgMHg2ZmI5LAotICAgIDB4NmZjNiwgMHg2ZmFhLCAweDZmZGYsIDB4NmZk NSwgMHg2ZmVjLCAweDZmZDQsIDB4NmZkOCwgMHg2ZmYxLAotICAgIDB4NmZlZSwgMHg2ZmRiLCAw eDcwMDksIDB4NzAwYiwgMHg2ZmZhLCAweDcwMTEsIDB4NzAwMSwgMHg3MDBmLAotICAgIDB4NmZm ZSwgMHg3MDFiLCAweDcwMWEsIDB4NmY3NCwgMHg3MDFkLCAweDcwMTgsIDB4NzAxZiwgMHg3MDMw LAotICAgIDB4NzAzZSwgMHg3MDMyLCAweDcwNTEsIDB4NzA2MywgMHg3MDk5LCAweDcwOTIsIDB4 NzBhZiwgMHg3MGYxLAotICAgIDB4NzBhYywgMHg3MGI4LCAweDcwYjMsIDB4NzBhZSwgMHg3MGRm LCAweDcwY2IsIDB4NzBkZCwgMHhmZmZkLAotICAgIDB4NzBkOSwgMHg3MTA5LCAweDcwZmQsIDB4 NzExYywgMHg3MTE5LCAweDcxNjUsIDB4NzE1NSwgMHg3MTg4LAotICAgIDB4NzE2NiwgMHg3MTYy LCAweDcxNGMsIDB4NzE1NiwgMHg3MTZjLCAweDcxOGYsIDB4NzFmYiwgMHg3MTg0LAotICAgIDB4 NzE5NSwgMHg3MWE4LCAweDcxYWMsIDB4NzFkNywgMHg3MWI5LCAweDcxYmUsIDB4NzFkMiwgMHg3 MWM5LAotICAgIDB4NzFkNCwgMHg3MWNlLCAweDcxZTAsIDB4NzFlYywgMHg3MWU3LCAweDcxZjUs IDB4NzFmYywgMHg3MWY5LAotICAgIDB4NzFmZiwgMHg3MjBkLCAweDcyMTAsIDB4NzIxYiwgMHg3 MjI4LCAweDcyMmQsIDB4NzIyYywgMHg3MjMwLAotICAgIDB4NzIzMiwgMHg3MjNiLCAweDcyM2Ms IDB4NzIzZiwgMHg3MjQwLCAweDcyNDYsIDB4NzI0YiwgMHg3MjU4LAotICAgIDB4NzI3NCwgMHg3 MjdlLCAweDcyODIsIDB4NzI4MSwgMHg3Mjg3LCAweDcyOTIsIDB4NzI5NiwgMHg3MmEyLAotICAg IDB4NzJhNywgMHg3MmI5LCAweDcyYjIsIDB4NzJjMywgMHg3MmM2LCAweDcyYzQsIDB4NzJjZSwg MHg3MmQyLAotICAgIDB4NzJlMiwgMHg3MmUwLCAweDcyZTEsIDB4NzJmOSwgMHg3MmY3LCAweDUw MGYsIDB4NzMxNywgMHg3MzBhLAotICAgIDB4NzMxYywgMHg3MzE2LCAweDczMWQsIDB4NzMzNCwg MHg3MzJmLCAweDczMjksIDB4NzMyNSwgMHg3MzNlLAotICAgIDB4NzM0ZSwgMHg3MzRmLCAweDll ZDgsIDB4NzM1NywgMHg3MzZhLCAweDczNjgsIDB4NzM3MCwgMHg3Mzc4LAotICAgIDB4NzM3NSwg MHg3MzdiLCAweDczN2EsIDB4NzNjOCwgMHg3M2IzLCAweDczY2UsIDB4NzNiYiwgMHg3M2MwLAot ICAgIDB4NzNlNSwgMHg3M2VlLCAweDczZGUsIDB4NzRhMiwgMHg3NDA1LCAweDc0NmYsIDB4NzQy NSwgMHg3M2Y4LAotICAgIDB4NzQzMiwgMHg3NDNhLCAweDc0NTUsIDB4NzQzZiwgMHg3NDVmLCAw eDc0NTksIDB4NzQ0MSwgMHg3NDVjLAotICAgIDB4NzQ2OSwgMHg3NDcwLCAweDc0NjMsIDB4NzQ2 YSwgMHg3NDc2LCAweDc0N2UsIDB4NzQ4YiwgMHg3NDllLAotICAgIDB4NzRhNywgMHg3NGNhLCAw eDc0Y2YsIDB4NzRkNCwgMHg3M2YxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4NzRlMCwgMHg3NGUzLCAweDc0ZTcs IDB4NzRlOSwgMHg3NGVlLCAweDc0ZjIsIDB4NzRmMCwgMHg3NGYxLAotICAgIDB4NzRmOCwgMHg3 NGY3LCAweDc1MDQsIDB4NzUwMywgMHg3NTA1LCAweDc1MGMsIDB4NzUwZSwgMHg3NTBkLAotICAg IDB4NzUxNSwgMHg3NTEzLCAweDc1MWUsIDB4NzUyNiwgMHg3NTJjLCAweDc1M2MsIDB4NzU0NCwg MHg3NTRkLAotICAgIDB4NzU0YSwgMHg3NTQ5LCAweDc1NWIsIDB4NzU0NiwgMHg3NTVhLCAweDc1 NjksIDB4NzU2NCwgMHg3NTY3LAotICAgIDB4NzU2YiwgMHg3NTZkLCAweDc1NzgsIDB4NzU3Niwg MHg3NTg2LCAweDc1ODcsIDB4NzU3NCwgMHg3NThhLAotICAgIDB4NzU4OSwgMHg3NTgyLCAweDc1 OTQsIDB4NzU5YSwgMHg3NTlkLCAweDc1YTUsIDB4NzVhMywgMHg3NWMyLAotICAgIDB4NzViMywg MHg3NWMzLCAweDc1YjUsIDB4NzViZCwgMHg3NWI4LCAweDc1YmMsIDB4NzViMSwgMHg3NWNkLAot ICAgIDB4NzVjYSwgMHg3NWQyLCAweDc1ZDksIDB4NzVlMywgMHg3NWRlLCAweDc1ZmUsIDB4NzVm ZiwgMHhmZmZkLAotICAgIDB4NzVmYywgMHg3NjAxLCAweDc1ZjAsIDB4NzVmYSwgMHg3NWYyLCAw eDc1ZjMsIDB4NzYwYiwgMHg3NjBkLAotICAgIDB4NzYwOSwgMHg3NjFmLCAweDc2MjcsIDB4NzYy MCwgMHg3NjIxLCAweDc2MjIsIDB4NzYyNCwgMHg3NjM0LAotICAgIDB4NzYzMCwgMHg3NjNiLCAw eDc2NDcsIDB4NzY0OCwgMHg3NjQ2LCAweDc2NWMsIDB4NzY1OCwgMHg3NjYxLAotICAgIDB4NzY2 MiwgMHg3NjY4LCAweDc2NjksIDB4NzY2YSwgMHg3NjY3LCAweDc2NmMsIDB4NzY3MCwgMHg3Njcy LAotICAgIDB4NzY3NiwgMHg3Njc4LCAweDc2N2MsIDB4NzY4MCwgMHg3NjgzLCAweDc2ODgsIDB4 NzY4YiwgMHg3NjhlLAotICAgIDB4NzY5NiwgMHg3NjkzLCAweDc2OTksIDB4NzY5YSwgMHg3NmIw LCAweDc2YjQsIDB4NzZiOCwgMHg3NmI5LAotICAgIDB4NzZiYSwgMHg3NmMyLCAweDc2Y2QsIDB4 NzZkNiwgMHg3NmQyLCAweDc2ZGUsIDB4NzZlMSwgMHg3NmU1LAotICAgIDB4NzZlNywgMHg3NmVh LCAweDg2MmYsIDB4NzZmYiwgMHg3NzA4LCAweDc3MDcsIDB4NzcwNCwgMHg3NzI5LAotICAgIDB4 NzcyNCwgMHg3NzFlLCAweDc3MjUsIDB4NzcyNiwgMHg3NzFiLCAweDc3MzcsIDB4NzczOCwgMHg3 NzQ3LAotICAgIDB4Nzc1YSwgMHg3NzY4LCAweDc3NmIsIDB4Nzc1YiwgMHg3NzY1LCAweDc3N2Ys IDB4Nzc3ZSwgMHg3Nzc5LAotICAgIDB4Nzc4ZSwgMHg3NzhiLCAweDc3OTEsIDB4NzdhMCwgMHg3 NzllLCAweDc3YjAsIDB4NzdiNiwgMHg3N2I5LAotICAgIDB4NzdiZiwgMHg3N2JjLCAweDc3YmQs IDB4NzdiYiwgMHg3N2M3LCAweDc3Y2QsIDB4NzdkNywgMHg3N2RhLAotICAgIDB4NzdkYywgMHg3 N2UzLCAweDc3ZWUsIDB4NzdmYywgMHg3ODBjLCAweDc4MTIsIDB4NzkyNiwgMHg3ODIwLAotICAg IDB4NzkyYSwgMHg3ODQ1LCAweDc4OGUsIDB4Nzg3NCwgMHg3ODg2LCAweDc4N2MsIDB4Nzg5YSwg MHg3ODhjLAotICAgIDB4NzhhMywgMHg3OGI1LCAweDc4YWEsIDB4NzhhZiwgMHg3OGQxLCAweDc4 YzYsIDB4NzhjYiwgMHg3OGQ0LAotICAgIDB4NzhiZSwgMHg3OGJjLCAweDc4YzUsIDB4NzhjYSwg MHg3OGVjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4NzhlNywgMHg3OGRhLCAweDc4ZmQsIDB4NzhmNCwgMHg3OTA3 LCAweDc5MTIsIDB4NzkxMSwgMHg3OTE5LAotICAgIDB4NzkyYywgMHg3OTJiLCAweDc5NDAsIDB4 Nzk2MCwgMHg3OTU3LCAweDc5NWYsIDB4Nzk1YSwgMHg3OTU1LAotICAgIDB4Nzk1MywgMHg3OTdh LCAweDc5N2YsIDB4Nzk4YSwgMHg3OTlkLCAweDc5YTcsIDB4OWY0YiwgMHg3OWFhLAotICAgIDB4 NzlhZSwgMHg3OWIzLCAweDc5YjksIDB4NzliYSwgMHg3OWM5LCAweDc5ZDUsIDB4NzllNywgMHg3 OWVjLAotICAgIDB4NzllMSwgMHg3OWUzLCAweDdhMDgsIDB4N2EwZCwgMHg3YTE4LCAweDdhMTks IDB4N2EyMCwgMHg3YTFmLAotICAgIDB4Nzk4MCwgMHg3YTMxLCAweDdhM2IsIDB4N2EzZSwgMHg3 YTM3LCAweDdhNDMsIDB4N2E1NywgMHg3YTQ5LAotICAgIDB4N2E2MSwgMHg3YTYyLCAweDdhNjks IDB4OWY5ZCwgMHg3YTcwLCAweDdhNzksIDB4N2E3ZCwgMHg3YTg4LAotICAgIDB4N2E5NywgMHg3 YTk1LCAweDdhOTgsIDB4N2E5NiwgMHg3YWE5LCAweDdhYzgsIDB4N2FiMCwgMHhmZmZkLAotICAg IDB4N2FiNiwgMHg3YWM1LCAweDdhYzQsIDB4N2FiZiwgMHg5MDgzLCAweDdhYzcsIDB4N2FjYSwg MHg3YWNkLAotICAgIDB4N2FjZiwgMHg3YWQ1LCAweDdhZDMsIDB4N2FkOSwgMHg3YWRhLCAweDdh ZGQsIDB4N2FlMSwgMHg3YWUyLAotICAgIDB4N2FlNiwgMHg3YWVkLCAweDdhZjAsIDB4N2IwMiwg MHg3YjBmLCAweDdiMGEsIDB4N2IwNiwgMHg3YjMzLAotICAgIDB4N2IxOCwgMHg3YjE5LCAweDdi MWUsIDB4N2IzNSwgMHg3YjI4LCAweDdiMzYsIDB4N2I1MCwgMHg3YjdhLAotICAgIDB4N2IwNCwg MHg3YjRkLCAweDdiMGIsIDB4N2I0YywgMHg3YjQ1LCAweDdiNzUsIDB4N2I2NSwgMHg3Yjc0LAot ICAgIDB4N2I2NywgMHg3YjcwLCAweDdiNzEsIDB4N2I2YywgMHg3YjZlLCAweDdiOWQsIDB4N2I5 OCwgMHg3YjlmLAotICAgIDB4N2I4ZCwgMHg3YjljLCAweDdiOWEsIDB4N2I4YiwgMHg3YjkyLCAw eDdiOGYsIDB4N2I1ZCwgMHg3Yjk5LAotICAgIDB4N2JjYiwgMHg3YmMxLCAweDdiY2MsIDB4N2Jj ZiwgMHg3YmI0LCAweDdiYzYsIDB4N2JkZCwgMHg3YmU5LAotICAgIDB4N2MxMSwgMHg3YzE0LCAw eDdiZTYsIDB4N2JlNSwgMHg3YzYwLCAweDdjMDAsIDB4N2MwNywgMHg3YzEzLAotICAgIDB4N2Jm MywgMHg3YmY3LCAweDdjMTcsIDB4N2MwZCwgMHg3YmY2LCAweDdjMjMsIDB4N2MyNywgMHg3YzJh LAotICAgIDB4N2MxZiwgMHg3YzM3LCAweDdjMmIsIDB4N2MzZCwgMHg3YzRjLCAweDdjNDMsIDB4 N2M1NCwgMHg3YzRmLAotICAgIDB4N2M0MCwgMHg3YzUwLCAweDdjNTgsIDB4N2M1ZiwgMHg3YzY0 LCAweDdjNTYsIDB4N2M2NSwgMHg3YzZjLAotICAgIDB4N2M3NSwgMHg3YzgzLCAweDdjOTAsIDB4 N2NhNCwgMHg3Y2FkLCAweDdjYTIsIDB4N2NhYiwgMHg3Y2ExLAotICAgIDB4N2NhOCwgMHg3Y2Iz LCAweDdjYjIsIDB4N2NiMSwgMHg3Y2FlLCAweDdjYjksIDB4N2NiZCwgMHg3Y2MwLAotICAgIDB4 N2NjNSwgMHg3Y2MyLCAweDdjZDgsIDB4N2NkMiwgMHg3Y2RjLCAweDdjZTIsIDB4OWIzYiwgMHg3 Y2VmLAotICAgIDB4N2NmMiwgMHg3Y2Y0LCAweDdjZjYsIDB4N2NmYSwgMHg3ZDA2LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4N2QwMiwgMHg3ZDFjLCAweDdkMTUsIDB4N2QwYSwgMHg3ZDQ1LCAweDdkNGIsIDB4N2Qy ZSwgMHg3ZDMyLAotICAgIDB4N2QzZiwgMHg3ZDM1LCAweDdkNDYsIDB4N2Q3MywgMHg3ZDU2LCAw eDdkNGUsIDB4N2Q3MiwgMHg3ZDY4LAotICAgIDB4N2Q2ZSwgMHg3ZDRmLCAweDdkNjMsIDB4N2Q5 MywgMHg3ZDg5LCAweDdkNWIsIDB4N2Q4ZiwgMHg3ZDdkLAotICAgIDB4N2Q5YiwgMHg3ZGJhLCAw eDdkYWUsIDB4N2RhMywgMHg3ZGI1LCAweDdkYzcsIDB4N2RiZCwgMHg3ZGFiLAotICAgIDB4N2Uz ZCwgMHg3ZGEyLCAweDdkYWYsIDB4N2RkYywgMHg3ZGI4LCAweDdkOWYsIDB4N2RiMCwgMHg3ZGQ4 LAotICAgIDB4N2RkZCwgMHg3ZGU0LCAweDdkZGUsIDB4N2RmYiwgMHg3ZGYyLCAweDdkZTEsIDB4 N2UwNSwgMHg3ZTBhLAotICAgIDB4N2UyMywgMHg3ZTIxLCAweDdlMTIsIDB4N2UzMSwgMHg3ZTFm LCAweDdlMDksIDB4N2UwYiwgMHg3ZTIyLAotICAgIDB4N2U0NiwgMHg3ZTY2LCAweDdlM2IsIDB4 N2UzNSwgMHg3ZTM5LCAweDdlNDMsIDB4N2UzNywgMHhmZmZkLAotICAgIDB4N2UzMiwgMHg3ZTNh LCAweDdlNjcsIDB4N2U1ZCwgMHg3ZTU2LCAweDdlNWUsIDB4N2U1OSwgMHg3ZTVhLAotICAgIDB4 N2U3OSwgMHg3ZTZhLCAweDdlNjksIDB4N2U3YywgMHg3ZTdiLCAweDdlODMsIDB4N2RkNSwgMHg3 ZTdkLAotICAgIDB4OGZhZSwgMHg3ZTdmLCAweDdlODgsIDB4N2U4OSwgMHg3ZThjLCAweDdlOTIs IDB4N2U5MCwgMHg3ZTkzLAotICAgIDB4N2U5NCwgMHg3ZTk2LCAweDdlOGUsIDB4N2U5YiwgMHg3 ZTljLCAweDdmMzgsIDB4N2YzYSwgMHg3ZjQ1LAotICAgIDB4N2Y0YywgMHg3ZjRkLCAweDdmNGUs IDB4N2Y1MCwgMHg3ZjUxLCAweDdmNTUsIDB4N2Y1NCwgMHg3ZjU4LAotICAgIDB4N2Y1ZiwgMHg3 ZjYwLCAweDdmNjgsIDB4N2Y2OSwgMHg3ZjY3LCAweDdmNzgsIDB4N2Y4MiwgMHg3Zjg2LAotICAg IDB4N2Y4MywgMHg3Zjg4LCAweDdmODcsIDB4N2Y4YywgMHg3Zjk0LCAweDdmOWUsIDB4N2Y5ZCwg MHg3ZjlhLAotICAgIDB4N2ZhMywgMHg3ZmFmLCAweDdmYjIsIDB4N2ZiOSwgMHg3ZmFlLCAweDdm YjYsIDB4N2ZiOCwgMHg4YjcxLAotICAgIDB4N2ZjNSwgMHg3ZmM2LCAweDdmY2EsIDB4N2ZkNSwg MHg3ZmQ0LCAweDdmZTEsIDB4N2ZlNiwgMHg3ZmU5LAotICAgIDB4N2ZmMywgMHg3ZmY5LCAweDk4 ZGMsIDB4ODAwNiwgMHg4MDA0LCAweDgwMGIsIDB4ODAxMiwgMHg4MDE4LAotICAgIDB4ODAxOSwg MHg4MDFjLCAweDgwMjEsIDB4ODAyOCwgMHg4MDNmLCAweDgwM2IsIDB4ODA0YSwgMHg4MDQ2LAot ICAgIDB4ODA1MiwgMHg4MDU4LCAweDgwNWEsIDB4ODA1ZiwgMHg4MDYyLCAweDgwNjgsIDB4ODA3 MywgMHg4MDcyLAotICAgIDB4ODA3MCwgMHg4MDc2LCAweDgwNzksIDB4ODA3ZCwgMHg4MDdmLCAw eDgwODQsIDB4ODA4NiwgMHg4MDg1LAotICAgIDB4ODA5YiwgMHg4MDkzLCAweDgwOWEsIDB4ODBh ZCwgMHg1MTkwLCAweDgwYWMsIDB4ODBkYiwgMHg4MGU1LAotICAgIDB4ODBkOSwgMHg4MGRkLCAw eDgwYzQsIDB4ODBkYSwgMHg4MGQ2LCAweDgxMDksIDB4ODBlZiwgMHg4MGYxLAotICAgIDB4ODEx YiwgMHg4MTI5LCAweDgxMjMsIDB4ODEyZiwgMHg4MTRiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTY4YiwgMHg4 MTQ2LCAweDgxM2UsIDB4ODE1MywgMHg4MTUxLCAweDgwZmMsIDB4ODE3MSwgMHg4MTZlLAotICAg IDB4ODE2NSwgMHg4MTY2LCAweDgxNzQsIDB4ODE4MywgMHg4MTg4LCAweDgxOGEsIDB4ODE4MCwg MHg4MTgyLAotICAgIDB4ODFhMCwgMHg4MTk1LCAweDgxYTQsIDB4ODFhMywgMHg4MTVmLCAweDgx OTMsIDB4ODFhOSwgMHg4MWIwLAotICAgIDB4ODFiNSwgMHg4MWJlLCAweDgxYjgsIDB4ODFiZCwg MHg4MWMwLCAweDgxYzIsIDB4ODFiYSwgMHg4MWM5LAotICAgIDB4ODFjZCwgMHg4MWQxLCAweDgx ZDksIDB4ODFkOCwgMHg4MWM4LCAweDgxZGEsIDB4ODFkZiwgMHg4MWUwLAotICAgIDB4ODFlNywg MHg4MWZhLCAweDgxZmIsIDB4ODFmZSwgMHg4MjAxLCAweDgyMDIsIDB4ODIwNSwgMHg4MjA3LAot ICAgIDB4ODIwYSwgMHg4MjBkLCAweDgyMTAsIDB4ODIxNiwgMHg4MjI5LCAweDgyMmIsIDB4ODIz OCwgMHg4MjMzLAotICAgIDB4ODI0MCwgMHg4MjU5LCAweDgyNTgsIDB4ODI1ZCwgMHg4MjVhLCAw eDgyNWYsIDB4ODI2NCwgMHhmZmZkLAotICAgIDB4ODI2MiwgMHg4MjY4LCAweDgyNmEsIDB4ODI2 YiwgMHg4MjJlLCAweDgyNzEsIDB4ODI3NywgMHg4Mjc4LAotICAgIDB4ODI3ZSwgMHg4MjhkLCAw eDgyOTIsIDB4ODJhYiwgMHg4MjlmLCAweDgyYmIsIDB4ODJhYywgMHg4MmUxLAotICAgIDB4ODJl MywgMHg4MmRmLCAweDgyZDIsIDB4ODJmNCwgMHg4MmYzLCAweDgyZmEsIDB4ODM5MywgMHg4MzAz LAotICAgIDB4ODJmYiwgMHg4MmY5LCAweDgyZGUsIDB4ODMwNiwgMHg4MmRjLCAweDgzMDksIDB4 ODJkOSwgMHg4MzM1LAotICAgIDB4ODMzNCwgMHg4MzE2LCAweDgzMzIsIDB4ODMzMSwgMHg4MzQw LCAweDgzMzksIDB4ODM1MCwgMHg4MzQ1LAotICAgIDB4ODMyZiwgMHg4MzJiLCAweDgzMTcsIDB4 ODMxOCwgMHg4Mzg1LCAweDgzOWEsIDB4ODNhYSwgMHg4MzlmLAotICAgIDB4ODNhMiwgMHg4Mzk2 LCAweDgzMjMsIDB4ODM4ZSwgMHg4Mzg3LCAweDgzOGEsIDB4ODM3YywgMHg4M2I1LAotICAgIDB4 ODM3MywgMHg4Mzc1LCAweDgzYTAsIDB4ODM4OSwgMHg4M2E4LCAweDgzZjQsIDB4ODQxMywgMHg4 M2ViLAotICAgIDB4ODNjZSwgMHg4M2ZkLCAweDg0MDMsIDB4ODNkOCwgMHg4NDBiLCAweDgzYzEs IDB4ODNmNywgMHg4NDA3LAotICAgIDB4ODNlMCwgMHg4M2YyLCAweDg0MGQsIDB4ODQyMiwgMHg4 NDIwLCAweDgzYmQsIDB4ODQzOCwgMHg4NTA2LAotICAgIDB4ODNmYiwgMHg4NDZkLCAweDg0MmEs IDB4ODQzYywgMHg4NTVhLCAweDg0ODQsIDB4ODQ3NywgMHg4NDZiLAotICAgIDB4ODRhZCwgMHg4 NDZlLCAweDg0ODIsIDB4ODQ2OSwgMHg4NDQ2LCAweDg0MmMsIDB4ODQ2ZiwgMHg4NDc5LAotICAg IDB4ODQzNSwgMHg4NGNhLCAweDg0NjIsIDB4ODRiOSwgMHg4NGJmLCAweDg0OWYsIDB4ODRkOSwg MHg4NGNkLAotICAgIDB4ODRiYiwgMHg4NGRhLCAweDg0ZDAsIDB4ODRjMSwgMHg4NGM2LCAweDg0 ZDYsIDB4ODRhMSwgMHg4NTIxLAotICAgIDB4ODRmZiwgMHg4NGY0LCAweDg1MTcsIDB4ODUxOCwg MHg4NTJjLCAweDg1MWYsIDB4ODUxNSwgMHg4NTE0LAotICAgIDB4ODRmYywgMHg4NTQwLCAweDg1 NjMsIDB4ODU1OCwgMHg4NTQ4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ODU0MSwgMHg4NjAyLCAweDg1NGIsIDB4 ODU1NSwgMHg4NTgwLCAweDg1YTQsIDB4ODU4OCwgMHg4NTkxLAotICAgIDB4ODU4YSwgMHg4NWE4 LCAweDg1NmQsIDB4ODU5NCwgMHg4NTliLCAweDg1ZWEsIDB4ODU4NywgMHg4NTljLAotICAgIDB4 ODU3NywgMHg4NTdlLCAweDg1OTAsIDB4ODVjOSwgMHg4NWJhLCAweDg1Y2YsIDB4ODViOSwgMHg4 NWQwLAotICAgIDB4ODVkNSwgMHg4NWRkLCAweDg1ZTUsIDB4ODVkYywgMHg4NWY5LCAweDg2MGEs IDB4ODYxMywgMHg4NjBiLAotICAgIDB4ODVmZSwgMHg4NWZhLCAweDg2MDYsIDB4ODYyMiwgMHg4 NjFhLCAweDg2MzAsIDB4ODYzZiwgMHg4NjRkLAotICAgIDB4NGU1NSwgMHg4NjU0LCAweDg2NWYs IDB4ODY2NywgMHg4NjcxLCAweDg2OTMsIDB4ODZhMywgMHg4NmE5LAotICAgIDB4ODZhYSwgMHg4 NjhiLCAweDg2OGMsIDB4ODZiNiwgMHg4NmFmLCAweDg2YzQsIDB4ODZjNiwgMHg4NmIwLAotICAg IDB4ODZjOSwgMHg4ODIzLCAweDg2YWIsIDB4ODZkNCwgMHg4NmRlLCAweDg2ZTksIDB4ODZlYywg MHhmZmZkLAotICAgIDB4ODZkZiwgMHg4NmRiLCAweDg2ZWYsIDB4ODcxMiwgMHg4NzA2LCAweDg3 MDgsIDB4ODcwMCwgMHg4NzAzLAotICAgIDB4ODZmYiwgMHg4NzExLCAweDg3MDksIDB4ODcwZCwg MHg4NmY5LCAweDg3MGEsIDB4ODczNCwgMHg4NzNmLAotICAgIDB4ODczNywgMHg4NzNiLCAweDg3 MjUsIDB4ODcyOSwgMHg4NzFhLCAweDg3NjAsIDB4ODc1ZiwgMHg4Nzc4LAotICAgIDB4ODc0Yywg MHg4NzRlLCAweDg3NzQsIDB4ODc1NywgMHg4NzY4LCAweDg3NmUsIDB4ODc1OSwgMHg4NzUzLAot ICAgIDB4ODc2MywgMHg4NzZhLCAweDg4MDUsIDB4ODdhMiwgMHg4NzlmLCAweDg3ODIsIDB4ODdh ZiwgMHg4N2NiLAotICAgIDB4ODdiZCwgMHg4N2MwLCAweDg3ZDAsIDB4OTZkNiwgMHg4N2FiLCAw eDg3YzQsIDB4ODdiMywgMHg4N2M3LAotICAgIDB4ODdjNiwgMHg4N2JiLCAweDg3ZWYsIDB4ODdm MiwgMHg4N2UwLCAweDg4MGYsIDB4ODgwZCwgMHg4N2ZlLAotICAgIDB4ODdmNiwgMHg4N2Y3LCAw eDg4MGUsIDB4ODdkMiwgMHg4ODExLCAweDg4MTYsIDB4ODgxNSwgMHg4ODIyLAotICAgIDB4ODgy MSwgMHg4ODMxLCAweDg4MzYsIDB4ODgzOSwgMHg4ODI3LCAweDg4M2IsIDB4ODg0NCwgMHg4ODQy LAotICAgIDB4ODg1MiwgMHg4ODU5LCAweDg4NWUsIDB4ODg2MiwgMHg4ODZiLCAweDg4ODEsIDB4 ODg3ZSwgMHg4ODllLAotICAgIDB4ODg3NSwgMHg4ODdkLCAweDg4YjUsIDB4ODg3MiwgMHg4ODgy LCAweDg4OTcsIDB4ODg5MiwgMHg4OGFlLAotICAgIDB4ODg5OSwgMHg4OGEyLCAweDg4OGQsIDB4 ODhhNCwgMHg4OGIwLCAweDg4YmYsIDB4ODhiMSwgMHg4OGMzLAotICAgIDB4ODhjNCwgMHg4OGQ0 LCAweDg4ZDgsIDB4ODhkOSwgMHg4OGRkLCAweDg4ZjksIDB4ODkwMiwgMHg4OGZjLAotICAgIDB4 ODhmNCwgMHg4OGU4LCAweDg4ZjIsIDB4ODkwNCwgMHg4OTBjLCAweDg5MGEsIDB4ODkxMywgMHg4 OTQzLAotICAgIDB4ODkxZSwgMHg4OTI1LCAweDg5MmEsIDB4ODkyYiwgMHg4OTQxLCAweDg5NDQs IDB4ODkzYiwgMHg4OTM2LAotICAgIDB4ODkzOCwgMHg4OTRjLCAweDg5MWQsIDB4ODk2MCwgMHg4 OTVlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ODk2NiwgMHg4OTY0LCAweDg5NmQsIDB4ODk2YSwgMHg4OTZmLCAw eDg5NzQsIDB4ODk3NywgMHg4OTdlLAotICAgIDB4ODk4MywgMHg4OTg4LCAweDg5OGEsIDB4ODk5 MywgMHg4OTk4LCAweDg5YTEsIDB4ODlhOSwgMHg4OWE2LAotICAgIDB4ODlhYywgMHg4OWFmLCAw eDg5YjIsIDB4ODliYSwgMHg4OWJkLCAweDg5YmYsIDB4ODljMCwgMHg4OWRhLAotICAgIDB4ODlk YywgMHg4OWRkLCAweDg5ZTcsIDB4ODlmNCwgMHg4OWY4LCAweDhhMDMsIDB4OGExNiwgMHg4YTEw LAotICAgIDB4OGEwYywgMHg4YTFiLCAweDhhMWQsIDB4OGEyNSwgMHg4YTM2LCAweDhhNDEsIDB4 OGE1YiwgMHg4YTUyLAotICAgIDB4OGE0NiwgMHg4YTQ4LCAweDhhN2MsIDB4OGE2ZCwgMHg4YTZj LCAweDhhNjIsIDB4OGE4NSwgMHg4YTgyLAotICAgIDB4OGE4NCwgMHg4YWE4LCAweDhhYTEsIDB4 OGE5MSwgMHg4YWE1LCAweDhhYTYsIDB4OGE5YSwgMHg4YWEzLAotICAgIDB4OGFjNCwgMHg4YWNk LCAweDhhYzIsIDB4OGFkYSwgMHg4YWViLCAweDhhZjMsIDB4OGFlNywgMHhmZmZkLAotICAgIDB4 OGFlNCwgMHg4YWYxLCAweDhiMTQsIDB4OGFlMCwgMHg4YWUyLCAweDhhZjcsIDB4OGFkZSwgMHg4 YWRiLAotICAgIDB4OGIwYywgMHg4YjA3LCAweDhiMWEsIDB4OGFlMSwgMHg4YjE2LCAweDhiMTAs IDB4OGIxNywgMHg4YjIwLAotICAgIDB4OGIzMywgMHg5N2FiLCAweDhiMjYsIDB4OGIyYiwgMHg4 YjNlLCAweDhiMjgsIDB4OGI0MSwgMHg4YjRjLAotICAgIDB4OGI0ZiwgMHg4YjRlLCAweDhiNDks IDB4OGI1NiwgMHg4YjViLCAweDhiNWEsIDB4OGI2YiwgMHg4YjVmLAotICAgIDB4OGI2YywgMHg4 YjZmLCAweDhiNzQsIDB4OGI3ZCwgMHg4YjgwLCAweDhiOGMsIDB4OGI4ZSwgMHg4YjkyLAotICAg IDB4OGI5MywgMHg4Yjk2LCAweDhiOTksIDB4OGI5YSwgMHg4YzNhLCAweDhjNDEsIDB4OGMzZiwg MHg4YzQ4LAotICAgIDB4OGM0YywgMHg4YzRlLCAweDhjNTAsIDB4OGM1NSwgMHg4YzYyLCAweDhj NmMsIDB4OGM3OCwgMHg4YzdhLAotICAgIDB4OGM4MiwgMHg4Yzg5LCAweDhjODUsIDB4OGM4YSwg MHg4YzhkLCAweDhjOGUsIDB4OGM5NCwgMHg4YzdjLAotICAgIDB4OGM5OCwgMHg2MjFkLCAweDhj YWQsIDB4OGNhYSwgMHg4Y2JkLCAweDhjYjIsIDB4OGNiMywgMHg4Y2FlLAotICAgIDB4OGNiNiwg MHg4Y2M4LCAweDhjYzEsIDB4OGNlNCwgMHg4Y2UzLCAweDhjZGEsIDB4OGNmZCwgMHg4Y2ZhLAot ICAgIDB4OGNmYiwgMHg4ZDA0LCAweDhkMDUsIDB4OGQwYSwgMHg4ZDA3LCAweDhkMGYsIDB4OGQw ZCwgMHg4ZDEwLAotICAgIDB4OWY0ZSwgMHg4ZDEzLCAweDhjY2QsIDB4OGQxNCwgMHg4ZDE2LCAw eDhkNjcsIDB4OGQ2ZCwgMHg4ZDcxLAotICAgIDB4OGQ3MywgMHg4ZDgxLCAweDhkOTksIDB4OGRj MiwgMHg4ZGJlLCAweDhkYmEsIDB4OGRjZiwgMHg4ZGRhLAotICAgIDB4OGRkNiwgMHg4ZGNjLCAw eDhkZGIsIDB4OGRjYiwgMHg4ZGVhLCAweDhkZWIsIDB4OGRkZiwgMHg4ZGUzLAotICAgIDB4OGRm YywgMHg4ZTA4LCAweDhlMDksIDB4OGRmZiwgMHg4ZTFkLCAweDhlMWUsIDB4OGUxMCwgMHg4ZTFm LAotICAgIDB4OGU0MiwgMHg4ZTM1LCAweDhlMzAsIDB4OGUzNCwgMHg4ZTRhLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4OGU0NywgMHg4ZTQ5LCAweDhlNGMsIDB4OGU1MCwgMHg4ZTQ4LCAweDhlNTksIDB4OGU2NCwg MHg4ZTYwLAotICAgIDB4OGUyYSwgMHg4ZTYzLCAweDhlNTUsIDB4OGU3NiwgMHg4ZTcyLCAweDhl N2MsIDB4OGU4MSwgMHg4ZTg3LAotICAgIDB4OGU4NSwgMHg4ZTg0LCAweDhlOGIsIDB4OGU4YSwg MHg4ZTkzLCAweDhlOTEsIDB4OGU5NCwgMHg4ZTk5LAotICAgIDB4OGVhYSwgMHg4ZWExLCAweDhl YWMsIDB4OGViMCwgMHg4ZWM2LCAweDhlYjEsIDB4OGViZSwgMHg4ZWM1LAotICAgIDB4OGVjOCwg MHg4ZWNiLCAweDhlZGIsIDB4OGVlMywgMHg4ZWZjLCAweDhlZmIsIDB4OGVlYiwgMHg4ZWZlLAot ICAgIDB4OGYwYSwgMHg4ZjA1LCAweDhmMTUsIDB4OGYxMiwgMHg4ZjE5LCAweDhmMTMsIDB4OGYx YywgMHg4ZjFmLAotICAgIDB4OGYxYiwgMHg4ZjBjLCAweDhmMjYsIDB4OGYzMywgMHg4ZjNiLCAw eDhmMzksIDB4OGY0NSwgMHg4ZjQyLAotICAgIDB4OGYzZSwgMHg4ZjRjLCAweDhmNDksIDB4OGY0 NiwgMHg4ZjRlLCAweDhmNTcsIDB4OGY1YywgMHhmZmZkLAotICAgIDB4OGY2MiwgMHg4ZjYzLCAw eDhmNjQsIDB4OGY5YywgMHg4ZjlmLCAweDhmYTMsIDB4OGZhZCwgMHg4ZmFmLAotICAgIDB4OGZi NywgMHg4ZmRhLCAweDhmZTUsIDB4OGZlMiwgMHg4ZmVhLCAweDhmZWYsIDB4OTA4NywgMHg4ZmY0 LAotICAgIDB4OTAwNSwgMHg4ZmY5LCAweDhmZmEsIDB4OTAxMSwgMHg5MDE1LCAweDkwMjEsIDB4 OTAwZCwgMHg5MDFlLAotICAgIDB4OTAxNiwgMHg5MDBiLCAweDkwMjcsIDB4OTAzNiwgMHg5MDM1 LCAweDkwMzksIDB4OGZmOCwgMHg5MDRmLAotICAgIDB4OTA1MCwgMHg5MDUxLCAweDkwNTIsIDB4 OTAwZSwgMHg5MDQ5LCAweDkwM2UsIDB4OTA1NiwgMHg5MDU4LAotICAgIDB4OTA1ZSwgMHg5MDY4 LCAweDkwNmYsIDB4OTA3NiwgMHg5NmE4LCAweDkwNzIsIDB4OTA4MiwgMHg5MDdkLAotICAgIDB4 OTA4MSwgMHg5MDgwLCAweDkwOGEsIDB4OTA4OSwgMHg5MDhmLCAweDkwYTgsIDB4OTBhZiwgMHg5 MGIxLAotICAgIDB4OTBiNSwgMHg5MGUyLCAweDkwZTQsIDB4NjI0OCwgMHg5MGRiLCAweDkxMDIs IDB4OTExMiwgMHg5MTE5LAotICAgIDB4OTEzMiwgMHg5MTMwLCAweDkxNGEsIDB4OTE1NiwgMHg5 MTU4LCAweDkxNjMsIDB4OTE2NSwgMHg5MTY5LAotICAgIDB4OTE3MywgMHg5MTcyLCAweDkxOGIs IDB4OTE4OSwgMHg5MTgyLCAweDkxYTIsIDB4OTFhYiwgMHg5MWFmLAotICAgIDB4OTFhYSwgMHg5 MWI1LCAweDkxYjQsIDB4OTFiYSwgMHg5MWMwLCAweDkxYzEsIDB4OTFjOSwgMHg5MWNiLAotICAg IDB4OTFkMCwgMHg5MWQ2LCAweDkxZGYsIDB4OTFlMSwgMHg5MWRiLCAweDkxZmMsIDB4OTFmNSwg MHg5MWY2LAotICAgIDB4OTIxZSwgMHg5MWZmLCAweDkyMTQsIDB4OTIyYywgMHg5MjE1LCAweDky MTEsIDB4OTI1ZSwgMHg5MjU3LAotICAgIDB4OTI0NSwgMHg5MjQ5LCAweDkyNjQsIDB4OTI0OCwg MHg5Mjk1LCAweDkyM2YsIDB4OTI0YiwgMHg5MjUwLAotICAgIDB4OTI5YywgMHg5Mjk2LCAweDky OTMsIDB4OTI5YiwgMHg5MjVhLCAweDkyY2YsIDB4OTJiOSwgMHg5MmI3LAotICAgIDB4OTJlOSwg MHg5MzBmLCAweDkyZmEsIDB4OTM0NCwgMHg5MzJlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTMxOSwgMHg5MzIy LCAweDkzMWEsIDB4OTMyMywgMHg5MzNhLCAweDkzMzUsIDB4OTMzYiwgMHg5MzVjLAotICAgIDB4 OTM2MCwgMHg5MzdjLCAweDkzNmUsIDB4OTM1NiwgMHg5M2IwLCAweDkzYWMsIDB4OTNhZCwgMHg5 Mzk0LAotICAgIDB4OTNiOSwgMHg5M2Q2LCAweDkzZDcsIDB4OTNlOCwgMHg5M2U1LCAweDkzZDgs IDB4OTNjMywgMHg5M2RkLAotICAgIDB4OTNkMCwgMHg5M2M4LCAweDkzZTQsIDB4OTQxYSwgMHg5 NDE0LCAweDk0MTMsIDB4OTQwMywgMHg5NDA3LAotICAgIDB4OTQxMCwgMHg5NDM2LCAweDk0MmIs IDB4OTQzNSwgMHg5NDIxLCAweDk0M2EsIDB4OTQ0MSwgMHg5NDUyLAotICAgIDB4OTQ0NCwgMHg5 NDViLCAweDk0NjAsIDB4OTQ2MiwgMHg5NDVlLCAweDk0NmEsIDB4OTIyOSwgMHg5NDcwLAotICAg IDB4OTQ3NSwgMHg5NDc3LCAweDk0N2QsIDB4OTQ1YSwgMHg5NDdjLCAweDk0N2UsIDB4OTQ4MSwg MHg5NDdmLAotICAgIDB4OTU4MiwgMHg5NTg3LCAweDk1OGEsIDB4OTU5NCwgMHg5NTk2LCAweDk1 OTgsIDB4OTU5OSwgMHhmZmZkLAotICAgIDB4OTVhMCwgMHg5NWE4LCAweDk1YTcsIDB4OTVhZCwg MHg5NWJjLCAweDk1YmIsIDB4OTViOSwgMHg5NWJlLAotICAgIDB4OTVjYSwgMHg2ZmY2LCAweDk1 YzMsIDB4OTVjZCwgMHg5NWNjLCAweDk1ZDUsIDB4OTVkNCwgMHg5NWQ2LAotICAgIDB4OTVkYywg MHg5NWUxLCAweDk1ZTUsIDB4OTVlMiwgMHg5NjIxLCAweDk2MjgsIDB4OTYyZSwgMHg5NjJmLAot ICAgIDB4OTY0MiwgMHg5NjRjLCAweDk2NGYsIDB4OTY0YiwgMHg5Njc3LCAweDk2NWMsIDB4OTY1 ZSwgMHg5NjVkLAotICAgIDB4OTY1ZiwgMHg5NjY2LCAweDk2NzIsIDB4OTY2YywgMHg5NjhkLCAw eDk2OTgsIDB4OTY5NSwgMHg5Njk3LAotICAgIDB4OTZhYSwgMHg5NmE3LCAweDk2YjEsIDB4OTZi MiwgMHg5NmIwLCAweDk2YjQsIDB4OTZiNiwgMHg5NmI4LAotICAgIDB4OTZiOSwgMHg5NmNlLCAw eDk2Y2IsIDB4OTZjOSwgMHg5NmNkLCAweDg5NGQsIDB4OTZkYywgMHg5NzBkLAotICAgIDB4OTZk NSwgMHg5NmY5LCAweDk3MDQsIDB4OTcwNiwgMHg5NzA4LCAweDk3MTMsIDB4OTcwZSwgMHg5NzEx LAotICAgIDB4OTcwZiwgMHg5NzE2LCAweDk3MTksIDB4OTcyNCwgMHg5NzJhLCAweDk3MzAsIDB4 OTczOSwgMHg5NzNkLAotICAgIDB4OTczZSwgMHg5NzQ0LCAweDk3NDYsIDB4OTc0OCwgMHg5NzQy LCAweDk3NDksIDB4OTc1YywgMHg5NzYwLAotICAgIDB4OTc2NCwgMHg5NzY2LCAweDk3NjgsIDB4 NTJkMiwgMHg5NzZiLCAweDk3NzEsIDB4OTc3OSwgMHg5Nzg1LAotICAgIDB4OTc3YywgMHg5Nzgx LCAweDk3N2EsIDB4OTc4NiwgMHg5NzhiLCAweDk3OGYsIDB4OTc5MCwgMHg5NzljLAotICAgIDB4 OTdhOCwgMHg5N2E2LCAweDk3YTMsIDB4OTdiMywgMHg5N2I0LCAweDk3YzMsIDB4OTdjNiwgMHg5 N2M4LAotICAgIDB4OTdjYiwgMHg5N2RjLCAweDk3ZWQsIDB4OWY0ZiwgMHg5N2YyLCAweDdhZGYs IDB4OTdmNiwgMHg5N2Y1LAotICAgIDB4OTgwZiwgMHg5ODBjLCAweDk4MzgsIDB4OTgyNCwgMHg5 ODIxLCAweDk4MzcsIDB4OTgzZCwgMHg5ODQ2LAotICAgIDB4OTg0ZiwgMHg5ODRiLCAweDk4NmIs IDB4OTg2ZiwgMHg5ODcwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4OTg3MSwgMHg5ODc0LCAweDk4NzMsIDB4OThh YSwgMHg5OGFmLCAweDk4YjEsIDB4OThiNiwgMHg5OGM0LAotICAgIDB4OThjMywgMHg5OGM2LCAw eDk4ZTksIDB4OThlYiwgMHg5OTAzLCAweDk5MDksIDB4OTkxMiwgMHg5OTE0LAotICAgIDB4OTkx OCwgMHg5OTIxLCAweDk5MWQsIDB4OTkxZSwgMHg5OTI0LCAweDk5MjAsIDB4OTkyYywgMHg5OTJl LAotICAgIDB4OTkzZCwgMHg5OTNlLCAweDk5NDIsIDB4OTk0OSwgMHg5OTQ1LCAweDk5NTAsIDB4 OTk0YiwgMHg5OTUxLAotICAgIDB4OTk1MiwgMHg5OTRjLCAweDk5NTUsIDB4OTk5NywgMHg5OTk4 LCAweDk5YTUsIDB4OTlhZCwgMHg5OWFlLAotICAgIDB4OTliYywgMHg5OWRmLCAweDk5ZGIsIDB4 OTlkZCwgMHg5OWQ4LCAweDk5ZDEsIDB4OTllZCwgMHg5OWVlLAotICAgIDB4OTlmMSwgMHg5OWYy LCAweDk5ZmIsIDB4OTlmOCwgMHg5YTAxLCAweDlhMGYsIDB4OWEwNSwgMHg5OWUyLAotICAgIDB4 OWExOSwgMHg5YTJiLCAweDlhMzcsIDB4OWE0NSwgMHg5YTQyLCAweDlhNDAsIDB4OWE0MywgMHhm ZmZkLAotICAgIDB4OWEzZSwgMHg5YTU1LCAweDlhNGQsIDB4OWE1YiwgMHg5YTU3LCAweDlhNWYs IDB4OWE2MiwgMHg5YTY1LAotICAgIDB4OWE2NCwgMHg5YTY5LCAweDlhNmIsIDB4OWE2YSwgMHg5 YWFkLCAweDlhYjAsIDB4OWFiYywgMHg5YWMwLAotICAgIDB4OWFjZiwgMHg5YWQxLCAweDlhZDMs IDB4OWFkNCwgMHg5YWRlLCAweDlhZGYsIDB4OWFlMiwgMHg5YWUzLAotICAgIDB4OWFlNiwgMHg5 YWVmLCAweDlhZWIsIDB4OWFlZSwgMHg5YWY0LCAweDlhZjEsIDB4OWFmNywgMHg5YWZiLAotICAg IDB4OWIwNiwgMHg5YjE4LCAweDliMWEsIDB4OWIxZiwgMHg5YjIyLCAweDliMjMsIDB4OWIyNSwg MHg5YjI3LAotICAgIDB4OWIyOCwgMHg5YjI5LCAweDliMmEsIDB4OWIyZSwgMHg5YjJmLCAweDli MzIsIDB4OWI0NCwgMHg5YjQzLAotICAgIDB4OWI0ZiwgMHg5YjRkLCAweDliNGUsIDB4OWI1MSwg MHg5YjU4LCAweDliNzQsIDB4OWI5MywgMHg5YjgzLAotICAgIDB4OWI5MSwgMHg5Yjk2LCAweDli OTcsIDB4OWI5ZiwgMHg5YmEwLCAweDliYTgsIDB4OWJiNCwgMHg5YmMwLAotICAgIDB4OWJjYSwg MHg5YmI5LCAweDliYzYsIDB4OWJjZiwgMHg5YmQxLCAweDliZDIsIDB4OWJlMywgMHg5YmUyLAot ICAgIDB4OWJlNCwgMHg5YmQ0LCAweDliZTEsIDB4OWMzYSwgMHg5YmYyLCAweDliZjEsIDB4OWJm MCwgMHg5YzE1LAotICAgIDB4OWMxNCwgMHg5YzA5LCAweDljMTMsIDB4OWMwYywgMHg5YzA2LCAw eDljMDgsIDB4OWMxMiwgMHg5YzBhLAotICAgIDB4OWMwNCwgMHg5YzJlLCAweDljMWIsIDB4OWMy NSwgMHg5YzI0LCAweDljMjEsIDB4OWMzMCwgMHg5YzQ3LAotICAgIDB4OWMzMiwgMHg5YzQ2LCAw eDljM2UsIDB4OWM1YSwgMHg5YzYwLCAweDljNjcsIDB4OWM3NiwgMHg5Yzc4LAotICAgIDB4OWNl NywgMHg5Y2VjLCAweDljZjAsIDB4OWQwOSwgMHg5ZDA4LCAweDljZWIsIDB4OWQwMywgMHg5ZDA2 LAotICAgIDB4OWQyYSwgMHg5ZDI2LCAweDlkYWYsIDB4OWQyMywgMHg5ZDFmLCAweDlkNDQsIDB4 OWQxNSwgMHg5ZDEyLAotICAgIDB4OWQ0MSwgMHg5ZDNmLCAweDlkM2UsIDB4OWQ0NiwgMHg5ZDQ4 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAotICAgIDB4OWQ1ZCwgMHg5ZDVlLCAweDlkNjQsIDB4OWQ1MSwgMHg5ZDUwLCAweDlk NTksIDB4OWQ3MiwgMHg5ZDg5LAotICAgIDB4OWQ4NywgMHg5ZGFiLCAweDlkNmYsIDB4OWQ3YSwg MHg5ZDlhLCAweDlkYTQsIDB4OWRhOSwgMHg5ZGIyLAotICAgIDB4OWRjNCwgMHg5ZGMxLCAweDlk YmIsIDB4OWRiOCwgMHg5ZGJhLCAweDlkYzYsIDB4OWRjZiwgMHg5ZGMyLAotICAgIDB4OWRkOSwg MHg5ZGQzLCAweDlkZjgsIDB4OWRlNiwgMHg5ZGVkLCAweDlkZWYsIDB4OWRmZCwgMHg5ZTFhLAot ICAgIDB4OWUxYiwgMHg5ZTFlLCAweDllNzUsIDB4OWU3OSwgMHg5ZTdkLCAweDllODEsIDB4OWU4 OCwgMHg5ZThiLAotICAgIDB4OWU4YywgMHg5ZTkyLCAweDllOTUsIDB4OWU5MSwgMHg5ZTlkLCAw eDllYTUsIDB4OWVhOSwgMHg5ZWI4LAotICAgIDB4OWVhYSwgMHg5ZWFkLCAweDk3NjEsIDB4OWVj YywgMHg5ZWNlLCAweDllY2YsIDB4OWVkMCwgMHg5ZWQ0LAotICAgIDB4OWVkYywgMHg5ZWRlLCAw eDllZGQsIDB4OWVlMCwgMHg5ZWU1LCAweDllZTgsIDB4OWVlZiwgMHhmZmZkLAotICAgIDB4OWVm NCwgMHg5ZWY2LCAweDllZjcsIDB4OWVmOSwgMHg5ZWZiLCAweDllZmMsIDB4OWVmZCwgMHg5ZjA3 LAotICAgIDB4OWYwOCwgMHg3NmI3LCAweDlmMTUsIDB4OWYyMSwgMHg5ZjJjLCAweDlmM2UsIDB4 OWY0YSwgMHg5ZjUyLAotICAgIDB4OWY1NCwgMHg5ZjYzLCAweDlmNWYsIDB4OWY2MCwgMHg5ZjYx LCAweDlmNjYsIDB4OWY2NywgMHg5ZjZjLAotICAgIDB4OWY2YSwgMHg5Zjc3LCAweDlmNzIsIDB4 OWY3NiwgMHg5Zjk1LCAweDlmOWMsIDB4OWZhMCwgMHg1ODJmLAotICAgIDB4NjljNywgMHg5MDU5 LCAweDc0NjQsIDB4NTFkYywgMHg3MTk5Ci19OwotCi0vKiBVbmljb2RlLXRvLUthbmppIHRhYmxl cy4uLiAqLwotCi1zdGF0aWMgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5p Y29kZSB0byBTaGlmdC1KSVMgKi8KLXVzal8wMzkxW10gPSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiAweDAzOTEgdGhydSAweDAzOWMgKi8KLSAgICAweDgzOWYsIDB4ODNhMCwgMHg4M2Ex LCAweDgzYTIsIDB4ODNhMywgMHg4M2E0LCAweDgzYTUsIDB4ODNhNiwKLSAgICAweDgzYTcsIDB4 ODNhOCwgMHg4M2E5LCAweDgzYWEsIDB4ODNhYiwgMHg4M2FjLCAweDgzYWQsIDB4ODNhZSwKLSAg ICAweDgzYWYsIDB4ZmZmZCwgMHg4M2IwLCAweDgzYjEsIDB4ODNiMiwgMHg4M2IzLCAweDgzYjQs IDB4ODNiNSwKLSAgICAweDgzYjYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweDgzYmYsIDB4ODNjMCwgMHg4M2MxLCAweDgzYzIs IDB4ODNjMywgMHg4M2M0LCAweDgzYzUsIDB4ODNjNiwKLSAgICAweDgzYzcsIDB4ODNjOCwgMHg4 M2M5LCAweDgzY2EsIDB4ODNjYiwgMHg4M2NjLCAweDgzY2QsIDB4ODNjZSwKLSAgICAweDgzY2Ys IDB4ZmZmZCwgMHg4M2QwLCAweDgzZDEsIDB4ODNkMiwgMHg4M2QzLCAweDgzZDQsIDB4ODNkNSwg MHg4M2Q2Ci19OwotCi1zdGF0aWMgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog VW5pY29kZSB0byBTaGlmdC1KSVMgKi8KLXVzal8wNDAxW10gPSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiAweDA0MDEgdGhydSAweDA0NTEgKi8KLSAgICAweDg0NDYsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODQ0MCwK LSAgICAweDg0NDEsIDB4ODQ0MiwgMHg4NDQzLCAweDg0NDQsIDB4ODQ0NSwgMHg4NDQ3LCAweDg0 NDgsIDB4ODQ0OSwKLSAgICAweDg0NGEsIDB4ODQ0YiwgMHg4NDRjLCAweDg0NGQsIDB4ODQ0ZSwg MHg4NDRmLCAweDg0NTAsIDB4ODQ1MSwKLSAgICAweDg0NTIsIDB4ODQ1MywgMHg4NDU0LCAweDg0 NTUsIDB4ODQ1NiwgMHg4NDU3LCAweDg0NTgsIDB4ODQ1OSwKLSAgICAweDg0NWEsIDB4ODQ1Yiwg MHg4NDVjLCAweDg0NWQsIDB4ODQ1ZSwgMHg4NDVmLCAweDg0NjAsIDB4ODQ3MCwKLSAgICAweDg0 NzEsIDB4ODQ3MiwgMHg4NDczLCAweDg0NzQsIDB4ODQ3NSwgMHg4NDc3LCAweDg0NzgsIDB4ODQ3 OSwKLSAgICAweDg0N2EsIDB4ODQ3YiwgMHg4NDdjLCAweDg0N2QsIDB4ODQ3ZSwgMHg4NDgwLCAw eDg0ODEsIDB4ODQ4MiwKLSAgICAweDg0ODMsIDB4ODQ4NCwgMHg4NDg1LCAweDg0ODYsIDB4ODQ4 NywgMHg4NDg4LCAweDg0ODksIDB4ODQ4YSwKLSAgICAweDg0OGIsIDB4ODQ4YywgMHg4NDhkLCAw eDg0OGUsIDB4ODQ4ZiwgMHg4NDkwLCAweDg0OTEsIDB4ZmZmZCwgMHg4NDc2Ci19OwotCi1zdGF0 aWMgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5pY29kZSB0byBTaGlmdC1K SVMgKi8KLXVzal8zMDAwW10gPSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDMwMDAg dGhydSAweDMwZmYgKi8KLSAgICAweDgxNDAsIDB4ODE0MSwgMHg4MTQyLCAweDgxNTYsIDB4ZmZm ZCwgMHg4MTU4LCAweDgxNTksIDB4ODE1YSwKLSAgICAweDgxNzEsIDB4ODE3MiwgMHg4MTczLCAw eDgxNzQsIDB4ODE3NSwgMHg4MTc2LCAweDgxNzcsIDB4ODE3OCwKLSAgICAweDgxNzksIDB4ODE3 YSwgMHg4MWE3LCAweDgxYWMsIDB4ODE2YiwgMHg4MTZjLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODE2MCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAg ICAweGZmZmQsIDB4ODI5ZiwgMHg4MmEwLCAweDgyYTEsIDB4ODJhMiwgMHg4MmEzLCAweDgyYTQs IDB4ODJhNSwKLSAgICAweDgyYTYsIDB4ODJhNywgMHg4MmE4LCAweDgyYTksIDB4ODJhYSwgMHg4 MmFiLCAweDgyYWMsIDB4ODJhZCwKLSAgICAweDgyYWUsIDB4ODJhZiwgMHg4MmIwLCAweDgyYjEs IDB4ODJiMiwgMHg4MmIzLCAweDgyYjQsIDB4ODJiNSwKLSAgICAweDgyYjYsIDB4ODJiNywgMHg4 MmI4LCAweDgyYjksIDB4ODJiYSwgMHg4MmJiLCAweDgyYmMsIDB4ODJiZCwKLSAgICAweDgyYmUs IDB4ODJiZiwgMHg4MmMwLCAweDgyYzEsIDB4ODJjMiwgMHg4MmMzLCAweDgyYzQsIDB4ODJjNSwK LSAgICAweDgyYzYsIDB4ODJjNywgMHg4MmM4LCAweDgyYzksIDB4ODJjYSwgMHg4MmNiLCAweDgy Y2MsIDB4ODJjZCwKLSAgICAweDgyY2UsIDB4ODJjZiwgMHg4MmQwLCAweDgyZDEsIDB4ODJkMiwg MHg4MmQzLCAweDgyZDQsIDB4ODJkNSwKLSAgICAweDgyZDYsIDB4ODJkNywgMHg4MmQ4LCAweDgy ZDksIDB4ODJkYSwgMHg4MmRiLCAweDgyZGMsIDB4ODJkZCwKLSAgICAweDgyZGUsIDB4ODJkZiwg MHg4MmUwLCAweDgyZTEsIDB4ODJlMiwgMHg4MmUzLCAweDgyZTQsIDB4ODJlNSwKLSAgICAweDgy ZTYsIDB4ODJlNywgMHg4MmU4LCAweDgyZTksIDB4ODJlYSwgMHg4MmViLCAweDgyZWMsIDB4ODJl ZCwKLSAgICAweDgyZWUsIDB4ODJlZiwgMHg4MmYwLCAweDgyZjEsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDgxNGEsIDB4ODE0 YiwgMHg4MTU0LCAweDgxNTUsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ODM0MCwgMHg4MzQxLCAw eDgzNDIsIDB4ODM0MywgMHg4MzQ0LCAweDgzNDUsIDB4ODM0NiwKLSAgICAweDgzNDcsIDB4ODM0 OCwgMHg4MzQ5LCAweDgzNGEsIDB4ODM0YiwgMHg4MzRjLCAweDgzNGQsIDB4ODM0ZSwKLSAgICAw eDgzNGYsIDB4ODM1MCwgMHg4MzUxLCAweDgzNTIsIDB4ODM1MywgMHg4MzU0LCAweDgzNTUsIDB4 ODM1NiwKLSAgICAweDgzNTcsIDB4ODM1OCwgMHg4MzU5LCAweDgzNWEsIDB4ODM1YiwgMHg4MzVj LCAweDgzNWQsIDB4ODM1ZSwKLSAgICAweDgzNWYsIDB4ODM2MCwgMHg4MzYxLCAweDgzNjIsIDB4 ODM2MywgMHg4MzY0LCAweDgzNjUsIDB4ODM2NiwKLSAgICAweDgzNjcsIDB4ODM2OCwgMHg4MzY5 LCAweDgzNmEsIDB4ODM2YiwgMHg4MzZjLCAweDgzNmQsIDB4ODM2ZSwKLSAgICAweDgzNmYsIDB4 ODM3MCwgMHg4MzcxLCAweDgzNzIsIDB4ODM3MywgMHg4Mzc0LCAweDgzNzUsIDB4ODM3NiwKLSAg ICAweDgzNzcsIDB4ODM3OCwgMHg4Mzc5LCAweDgzN2EsIDB4ODM3YiwgMHg4MzdjLCAweDgzN2Qs IDB4ODM3ZSwKLSAgICAweDgzODAsIDB4ODM4MSwgMHg4MzgyLCAweDgzODMsIDB4ODM4NCwgMHg4 Mzg1LCAweDgzODYsIDB4ODM4NywKLSAgICAweDgzODgsIDB4ODM4OSwgMHg4MzhhLCAweDgzOGIs IDB4ODM4YywgMHg4MzhkLCAweDgzOGUsIDB4ODM4ZiwKLSAgICAweDgzOTAsIDB4ODM5MSwgMHg4 MzkyLCAweDgzOTMsIDB4ODM5NCwgMHg4Mzk1LCAweDgzOTYsIDB4ZmZmZCwKLSAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDgxNDUsIDB4ODE1YiwgMHg4MTUyLCAweDgxNTMsIDB4ZmZmZAot fTsKLQotc3RhdGljIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVuaWNvZGUg dG8gU2hpZnQtSklTICovCi11c2pfZmYwMFtdID0geyAgICAgICAgICAgICAgICAgICAgICAgICAg LyogMHhmZjAwIHRocnUgMHgwZmY5ZiAqLwotICAgIDB4ZmZmZCwgMHg4MTQ5LCAweGZmZmQsIDB4 ODE5NCwgMHg4MTkwLCAweDgxOTMsIDB4ODE5NSwgMHhmZmZkLAotICAgIDB4ODE2OSwgMHg4MTZh LCAweDgxOTYsIDB4ODE3YiwgMHg4MTQzLCAweGZmZmQsIDB4ODE0NCwgMHg4MTVlLAotICAgIDB4 ODI0ZiwgMHg4MjUwLCAweDgyNTEsIDB4ODI1MiwgMHg4MjUzLCAweDgyNTQsIDB4ODI1NSwgMHg4 MjU2LAotICAgIDB4ODI1NywgMHg4MjU4LCAweDgxNDYsIDB4ODE0NywgMHg4MTgzLCAweDgxODEs IDB4ODE4NCwgMHg4MTQ4LAotICAgIDB4ODE5NywgMHg4MjYwLCAweDgyNjEsIDB4ODI2MiwgMHg4 MjYzLCAweDgyNjQsIDB4ODI2NSwgMHg4MjY2LAotICAgIDB4ODI2NywgMHg4MjY4LCAweDgyNjks IDB4ODI2YSwgMHg4MjZiLCAweDgyNmMsIDB4ODI2ZCwgMHg4MjZlLAotICAgIDB4ODI2ZiwgMHg4 MjcwLCAweDgyNzEsIDB4ODI3MiwgMHg4MjczLCAweDgyNzQsIDB4ODI3NSwgMHg4Mjc2LAotICAg IDB4ODI3NywgMHg4Mjc4LCAweDgyNzksIDB4ODE2ZCwgMHhmZmZkLCAweDgxNmUsIDB4ODE0Ziwg MHg4MTUxLAotICAgIDB4ODE0ZCwgMHg4MjgxLCAweDgyODIsIDB4ODI4MywgMHg4Mjg0LCAweDgy ODUsIDB4ODI4NiwgMHg4Mjg3LAotICAgIDB4ODI4OCwgMHg4Mjg5LCAweDgyOGEsIDB4ODI4Yiwg MHg4MjhjLCAweDgyOGQsIDB4ODI4ZSwgMHg4MjhmLAotICAgIDB4ODI5MCwgMHg4MjkxLCAweDgy OTIsIDB4ODI5MywgMHg4Mjk0LCAweDgyOTUsIDB4ODI5NiwgMHg4Mjk3LAotICAgIDB4ODI5OCwg MHg4Mjk5LCAweDgyOWEsIDB4ODE2ZiwgMHg4MTYyLCAweDgxNzAsIDB4ZmZmZCwgMHhmZmZkLAot ICAgIDB4ZmZmZCwgMHgwMGExLCAweDAwYTIsIDB4MDBhMywgMHgwMGE0LCAweDAwYTUsIDB4MDBh NiwgMHgwMGE3LAotICAgIDB4MDBhOCwgMHgwMGE5LCAweDAwYWEsIDB4MDBhYiwgMHgwMGFjLCAw eDAwYWQsIDB4MDBhZSwgMHgwMGFmLAotICAgIDB4MDBiMCwgMHgwMGIxLCAweDAwYjIsIDB4MDBi MywgMHgwMGI0LCAweDAwYjUsIDB4MDBiNiwgMHgwMGI3LAotICAgIDB4MDBiOCwgMHgwMGI5LCAw eDAwYmEsIDB4MDBiYiwgMHgwMGJjLCAweDAwYmQsIDB4MDBiZSwgMHgwMGJmLAotICAgIDB4MDBj MCwgMHgwMGMxLCAweDAwYzIsIDB4MDBjMywgMHgwMGM0LCAweDAwYzUsIDB4MDBjNiwgMHgwMGM3 LAotICAgIDB4MDBjOCwgMHgwMGM5LCAweDAwY2EsIDB4MDBjYiwgMHgwMGNjLCAweDAwY2QsIDB4 MDBjZSwgMHgwMGNmLAotICAgIDB4MDBkMCwgMHgwMGQxLCAweDAwZDIsIDB4MDBkMywgMHgwMGQ0 LCAweDAwZDUsIDB4MDBkNiwgMHgwMGQ3LAotICAgIDB4MDBkOCwgMHgwMGQ5LCAweDAwZGEsIDB4 MDBkYiwgMHgwMGRjLCAweDAwZGQsIDB4MDBkZSwgMHgwMGRmCi19OwotCi0vKiBOb3cgb25lIGh1 bW9uZ291cyB0YWJsZSBmb3IgS2FuamkgKi8KLQotc3RhdGljIFVTSE9SVCAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFVuaWNvZGUgdG8gU2hpZnQtSklTICovCi11c2pfNGUwMFtdID0geyAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogMHg0ZTAwIHRocnUgMHg5ZmEwICovCi0gICAgMHg4 OGVhLCAweDkyOWEsIDB4ZmZmZCwgMHg4ZWI1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk2 OWMsCi0gICAgMHg4ZmU0LCAweDhlNGYsIDB4OGZlMywgMHg4OWJhLCAweGZmZmQsIDB4OTU3Mywg MHg5NzVlLCAweGZmZmQsCi0gICAgMHg5OGEwLCAweDg5NGUsIDB4ZmZmZCwgMHhmZmZkLCAweDhh OGUsIDB4OThhMSwgMHg5MGEyLCAweDk5YzAsCi0gICAgMHg4Yjc1LCAweDk1YjgsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZmU1LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk3 YmMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NWMwLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4OThhMiwgMHhmZmZkLCAweGZmZmQsIDB4OTI4NiwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweDk4YTMsIDB4OGJmOCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5OGE0LCAweGZmZmQsCi0gICAgMHg4YWRiLCAweDkyNGYsIDB4ZmZmZCwgMHg4ZWU1LCAw eDk4YTUsIDB4ZmZmZCwgMHhmZmZkLCAweDk4YTYsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OThh NywgMHg5NDU0LCAweGZmZmQsIDB4OGI3NiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5NDU2LCAweGZmZmQsIDB4OTNlMSwgMHg4Y2MxLCAweDk2NTIsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU2OCwgMHg5OGE4 LCAweDhmZTYsCi0gICAgMHg5OGE5LCAweDg5YjMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OGJlMywgMHg4Y2VlLCAweDk2ZTcsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWJhNCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweDk3OTAsIDB4ZmZmZCwgMHg5M2ZiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4 YWEzLCAweGZmZmQsCi0gICAgMHg4YjU0LCAweGZmZmQsIDB4OThhYSwgMHhmZmZkLCAweGZmZmQs IDB4OThhYiwgMHg5N2I5LCAweGZmZmQsCi0gICAgMHg5NzVjLCAweDkxODgsIDB4OThhZCwgMHg4 ZTk2LCAweDkzZjEsIDB4ZmZmZCwgMHg5OGIwLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDg5NWQs IDB4OGNkZCwgMHhmZmZkLCAweDhjZGMsIDB4ODhlNCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5 ODZhLCAweDk4NjksIDB4ZmZmZCwgMHg4ZGIxLCAweDg4OWYsIDB4ZmZmZCwgMHg5OGIxLCAweDk4 YjIsCi0gICAgMHg5OGIzLCAweDk2NTMsIDB4OThiNCwgMHhmZmZkLCAweDhjZjAsIDB4ODhlNSwg MHg5NjkyLCAweGZmZmQsCi0gICAgMHg4YjljLCAweGZmZmQsIDB4ZmZmZCwgMHg4YjlkLCAweDhi OWUsIDB4OTJlMCwgMHg5N2JhLCAweGZmZmQsCi0gICAgMHg5OGI1LCAweGZmZmQsIDB4ZmZmZCwg MHg5OGI2LCAweGZmZmQsIDB4ZmZmZCwgMHg5OGI3LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4OTA2YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHg4ZjU5LCAweDkwNmQsIDB4OThiYywgMHhmZmZkLCAweDk4YmEsIDB4ZmZmZCwgMHg5OGJiLCAw eDhiNzcsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGRhMSwgMHg4OWVlLCAweGZmZmQsIDB4OThi OSwgMHg5OGI4LCAweDk1YTcsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDhlNjUsIDB4OGU2NCwgMHg5MWJjLCAweDk4YmQsCi0gICAgMHg5NTc0LCAweDkwZTUsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ODE1NywgMHg5OGJlLCAweDk4YzAsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5MWUzLCAweDk3ZGYsIDB4ODhjOCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OThiZiwgMHg4OWJj LCAweGZmZmQsCi0gICAgMHg4YmMyLCAweGZmZmQsIDB4OTI4NywgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg4YzhmLCAweDk4YzEsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NDQz LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhhZTksIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweDk4YzIsIDB4ODhjOSwgMHhmZmZkLCAweGZmZmQsIDB4OGNkZSwgMHg4YWVhLCAweDk1OWEs Ci0gICAgMHg5NGIwLCAweDhiNzgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ODllZiwgMHhmZmZkLCAweDk4ZTUs IDB4OTM2MCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk0OGMsCi0gICAgMHg5 OGM0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk0YmEsIDB4ZmZmZCwgMHg5N2UwLCAweGZm ZmQsCi0gICAgMHg5MDRjLCAweGZmZmQsIDB4OGU2NiwgMHhmZmZkLCAweDhlOTcsIDB4ODliZSwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MmNmLCAweGZm ZmQsIDB4ZmZmZCwgMHg5MjQxLCAweDk4YzgsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ODhjYSwgMHg5MmUxLCAweDhmNWEsCi0gICAgMHg4ZGIyLCAweDk3 NDMsIDB4ZmZmZCwgMHg5MWNjLCAweGZmZmQsIDB4ODliZCwgMHhmZmZkLCAweDk4YzcsCi0gICAg MHhmZmZkLCAweDk3NWQsIDB4OThjMywgMHg5OGM1LCAweDhkZWMsIDB4OThjNiwgMHg5YjQzLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk4Y2UsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk4ZDEsCi0gICAgMHg5OGNmLCAweGZmZmQsIDB4ZmZm ZCwgMHg4OWMwLCAweGZmZmQsIDB4OTViOSwgMHg5OGM5LCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5OGNkLCAweDhjZjEsIDB4ZmZmZCwgMHhmZmZkLCAweDhlNjcsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YWE0LCAweGZmZmQsIDB4ZmZmZCwgMHg5OGQy LCAweGZmZmQsCi0gICAgMHg5OGNhLCAweGZmZmQsIDB4ZmZmZCwgMHg5N2UxLCAweGZmZmQsIDB4 OGU5OCwgMHhmZmZkLCAweDk4Y2IsCi0gICAgMHhmZmZkLCAweDk4ZDAsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg5OGQzLCAweGZmZmQsCi0gICAgMHg5OGNjLCAweGZmZmQsIDB4 ZmZmZCwgMHg4YjlmLCAweGZmZmQsIDB4ODhjYiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4YmEw LCAweDg5YmYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YjQ0LCAweGZmZmQsIDB4OTY5OSwgMHg5 NThlLCAweDhjZjIsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OTA0ZSwgMHg5N2I1LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk1ZDYsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4OGM1NywgMHg5MWEzLCAweDg5ZTIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4OGY3MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5OGQ3LCAweGZm ZmQsCi0gICAgMHg5OGRjLCAweDk4ZGEsIDB4ZmZmZCwgMHhmZmZkLCAweDk4ZDUsIDB4ZmZmZCwg MHhmZmZkLCAweDkxYWQsCi0gICAgMHg5OGQ4LCAweGZmZmQsIDB4OThkYiwgMHg5OGQ5LCAweGZm ZmQsIDB4OTVkYiwgMHhmZmZkLCAweDk4ZDYsCi0gICAgMHhmZmZkLCAweDkwNGQsIDB4ZmZmZCwg MHg5NjkzLCAweDk4ZGQsIDB4OThkZSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZjQzLCAweDk4ZWIsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NDZmLCAweGZmZmQsIDB4OTU1NSwgMHg5OGU2LCAw eGZmZmQsCi0gICAgMHg5NWVlLCAweGZmZmQsIDB4ODliNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5OGVhLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OThlNCwgMHg5OGVkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDkxNzEsIDB4ZmZm ZCwgMHg4Y2MyLCAweGZmZmQsIDB4OTQ3YiwgMHhmZmZkLCAweGUwYzUsCi0gICAgMHhmZmZkLCAw eDk4ZWMsIDB4OTM3YywgMHhmZmZkLCAweDk4ZTEsIDB4ZmZmZCwgMHg4Y2Y0LCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweDhjZjMsIDB4OThkZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDhlZDgsCi0gICAgMHhmZmZkLCAweDk4ZTcsIDB4ZmZmZCwgMHg5NWVkLCAweDkyNmMsIDB4 OThlMywgMHg4YzkxLCAweGZmZmQsCi0gICAgMHg5OGUwLCAweDk4ZTgsIDB4OThlMiwgMHg5N2Nm LCAweDk4ZTksIDB4OTg2MCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YmU0LCAweGZmZmQsCi0gICAgMHhmZmZk LCAweDhjOTAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5OGVlLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDk4ZWYsCi0gICAgMHg5OGYzLCAweDg4Y2MsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDk1Y2UsCi0gICAgMHg5OGYyLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OThmMSwgMHg5OGY1LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4OThmNCwgMHhmZmZkLCAweDkyZTIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGM5MiwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk4ZjYsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGVjMywgMHhmZmZkLCAweDkx YTQsIDB4OTJlMywgMHg4YmY0LCAweGZmZmQsCi0gICAgMHg5OGY3LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OGI1NSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5OGY4LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OThmYSwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTY1NCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweDhjODYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4ZTUwLCAweDk0ZjUsIDB4OThmOSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhkYzMsIDB4OTc2MiwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4OThmYywgMHg5OTQyLCAweDk4ZmIsIDB4OGRjMiwgMHhmZmZk LCAweDhmOWQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg4YzU4LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTk0MywgMHhmZmZk LCAweGZmZmQsIDB4OGJjZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk5NDAsIDB4 OTk0MSwgMHhmZmZkLCAweGZmZmQsIDB4OTNhZCwgMHhmZmZkLCAweDkxOWMsCi0gICAgMHhmZmZk LCAweDhiYTEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTY2YywgMHg5OTQ0LCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTdiYiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 OTQ1LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5OTQ4LCAweGZmZmQs IDB4OTk0NiwgMHhmZmZkLCAweDkxNmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OTk0NywgMHg5OTQ5LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTk0YiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweDk5NGEsIDB4ZmZmZCwgMHg5NWM2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHg4YjU2LCAweDk5NGQsIDB4OTk0ZSwgMHhmZmZkLCAweDg5YWQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk5NGMsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGVmMiwg MHhmZmZkLCAweDk5NTEsIDB4OTk1MCwgMHg5OTRmLCAweGZmZmQsCi0gICAgMHg5OGQ0LCAweGZm ZmQsIDB4OTk1MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhmOWUsCi0gICAg MHhmZmZkLCAweDk5NTMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTc0NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTZkNywgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk5NTUsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTk1 NCwgMHg5OTU3LCAweDk5NTYsIDB4ZmZmZCwgMHhmZmZkLCAweDk5NTgsCi0gICAgMHg5OTU5LCAw eDg4ZjIsIDB4ZmZmZCwgMHg4Y2IzLCAweDhjNWEsIDB4OGY1YiwgMHg5MjliLCAweDhiYTIsCi0g ICAgMHg5MGU2LCAweDhjZjUsIDB4ZmZmZCwgMHg4ZDhlLCAweDk5NWIsIDB4OTZjNiwgMHg5MzY1 LCAweGZmZmQsCi0gICAgMHg4ZTk5LCAweGZmZmQsIDB4OTk1YSwgMHhmZmZkLCAweDk5NWMsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTM3ZCwgMHhmZmZk LCAweDhhOTUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 OTk1ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTNmYywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5MTUz LCAweDk5NWYsIDB4OTk2MCwgMHg5NGFhLCAweDhjZjYsIDB4OTg1YSwgMHg5OTYxLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweDhiYTQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTViYSwgMHg5 MWI0LCAweDhiZWYsCi0gICAgMHg5MzU0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhjOTMs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5OTYyLCAweGZmZmQsIDB4OTk2MywgMHhm ZmZkLCAweGZmZmQsIDB4OTNlMCwgMHg4OTdlLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk5NjYs IDB4OGRmYiwgMHhmZmZkLCAweDk5NjUsIDB4OGRjNCwgMHhmZmZkLCAweDk5NjcsCi0gICAgMHhl M2VjLCAweDk5NjgsIDB4OTY2MCwgMHg5OTY5LCAweGZmZmQsIDB4OTk2YSwgMHg5OTZiLCAweDhm ZTcsCi0gICAgMHhmZmZkLCAweDhlY2EsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHg4YWE1LCAweGZmZmQsIDB4OTk2ZSwgMHhmZmZkLCAweDk5 NmMsIDB4OTZiYiwgMHg5OTZkLCAweGZmZmQsCi0gICAgMHg5NTc5LCAweDk5NmYsIDB4OTk3MCwg MHg5OTcxLCAweDkzN2UsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5OTc1LCAweDk5 NzMsIDB4OTk3NCwgMHg5OTcyLCAweDhkZTEsIDB4OTk3NiwgMHg5NmU4LCAweDk3ZTIsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTk3NywgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkwYTYsIDB4OTk3 OCwgMHg4Zjc5LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk5NzksIDB4ZmZmZCwgMHg5MjljLCAw eDk3YmQsIDB4OTM4MCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5OWMzLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5OTdhLCAweGVhYTMsIDB4OGJjMywgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHg5OTdiLCAweDk2N2QsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4Zjg4 LCAweDkxZmEsCi0gICAgMHhmZmZkLCAweDk5N2QsIDB4OTNlMiwgMHhmZmZkLCAweGZmZmQsIDB4 OTk3ZSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5OTgwLCAweDhhNGQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OTk4MSwgMHg4YmE1LCAweGZmZmQsCi0gICAgMHg5M2NhLCAweDg5OWEsIDB4 OGY2ZiwgMHhmZmZkLCAweGZmZmQsIDB4OTQ5ZiwgMHg5OTgyLCAweGZmZmQsCi0gICAgMHg5Mzgx LCAweGZmZmQsIDB4ZmZmZCwgMHg5MDZlLCAweDk5ODMsIDB4ZmZmZCwgMHg5NWFhLCAweDkwZDgs Ci0gICAgMHg4YWEwLCAweGZmZmQsIDB4OGFhNywgMHg5OTg0LCAweGZmZmQsIDB4ZmZmZCwgMHg5 OTg2LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhjNTksIDB4ZmZmZCwgMHhmZmZkLCAweDk5ODUs IDB4ZmZmZCwgMHhmZmZkLCAweDk3ZjEsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OGY4OSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDk0YmIsIDB4OTVjYSwgMHhmZmZkLCAweDk5ODcsCi0gICAgMHhm ZmZkLCAweDk3OTgsIDB4OTk4OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5OTg5LCAweGZm ZmQsCi0gICAgMHg5MzllLCAweGZmZmQsIDB4ZmZmZCwgMHg5OThhLCAweGZmZmQsIDB4ZmZmZCwg MHg5MGE3LCAweDhkZmMsCi0gICAgMHg4Yzk0LCAweDk5OGIsIDB4OGU2OCwgMHg4ZDhmLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5MmU0LCAweDk5OGQsIDB4ZmZmZCwgMHhmZmZkLCAweDkxYTUsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4OGRlZCwgMHg5OThlLCAweDk5OGYsIDB4OTE0ZiwgMHhmZmZkLCAweDk5OGMsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk5OTEsIDB4ZmZmZCwgMHg5NjU1LCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZDg0LCAweGZmZmQsIDB4ZmZm ZCwgMHg5OTkwLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4Yzk1LCAw eDhkZGMsIDB4OTQ4ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk5OTQsIDB4OTk5 MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk1OWIsCi0gICAgMHg4ZmU4LCAw eDk5OWIsIDB4OGE4NCwgMHg5OTk1LCAweDk5OTMsIDB4OTE2ZSwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTk5NywgMHhmZmZk LCAweDk5OTYsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YTYzLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDhjODAsCi0gICAgMHg5OTljLCAweDk3YWIsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OTk5OCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk5OWQsIDB4 OTk5YSwgMHhmZmZkLCAweDk5OTksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg5N2NkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhjZjcs Ci0gICAgMHg4OWMxLCAweGZmZmQsIDB4ZmZmZCwgMHg5N2YyLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhmOTUsIDB4OTM3NywgMHg4ZDg1LCAweDk5YTAs IDB4OTlhMSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk3ZTMsIDB4ZmZmZCwgMHhm ZmZkLCAweDk4NGEsIDB4OTlhMywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhjZjgs IDB4ZmZmZCwgMHhmZmZkLCAweDk5YTIsIDB4ZmZmZCwgMHg4YTRlLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweDk5YTQsIDB4ZmZmZCwgMHg5Njc1LCAweGZmZmQsIDB4OTJiYSwgMHhmZmZkLCAweDk3 NDUsCi0gICAgMHhmZmZkLCAweDk1ZDcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTlhNSwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZThkMywgMHhmZmZkLCAweGZm ZmQsIDB4OTNhZSwgMHhmZmZkLCAweDk5YTYsCi0gICAgMHg4YWE4LCAweDk2YjEsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OGY5ZiwgMHg5OWE3LCAweDk1ZTUsCi0gICAgMHg5OWFiLCAweGZm ZmQsIDB4OTBhOCwgMHg5OWE4LCAweDhiY2UsIDB4ZmZmZCwgMHg5OWE5LCAweDhhYTksCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGM0ZCwgMHg5OWFjLCAweGZmZmQsIDB4OTlh ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5OWFlLCAweDk5YWYsIDB4OGVkOSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg4Y2Y5LCAweDk2ZGMsCi0gICAgMHhmZmZkLCAweDk2ZTYsIDB4OTNm NSwgMHhmZmZkLCAweGZmZmQsIDB4OTVlZiwgMHg5OWIwLCAweGZmZmQsCi0gICAgMHg5OWIxLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTliMywgMHhmZmZkLCAweDk5YjUsCi0g ICAgMHg5OWI0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTliNiwgMHg4OWJi LCAweDk2NmIsCi0gICAgMHhmZmZkLCAweDhkZmEsIDB4OTliNywgMHhmZmZkLCAweGZmZmQsIDB4 OTE3OCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4ZmEwLCAweDhiYTcsIDB4ZmZmZCwgMHg5OWI4 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 OTRkOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk5YjksCi0gICAgMHhmZmZk LCAweDk5YmEsIDB4ZmZmZCwgMHg5OWJiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHg5OWJjLCAweDk1NDMsIDB4OGJlNiwgMHg4OGUzLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDkzYmQsCi0gICAgMHg5OWJkLCAweDhmNWMsIDB4ZmZmZCwgMHg5MGU3LCAweGZmZmQs IDB4OTliZiwgMHg5OWJlLCAweDhmYTEsCi0gICAgMHg4Y2RmLCAweDk5YzEsIDB4OTRiYywgMHhm ZmZkLCAweGZmZmQsIDB4OTljMiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk0ZGEs IDB4OTFiMiwgMHg5MWVjLCAweDhiYTYsIDB4ZmZmZCwgMHhmZmZkLCAweDkzZWMsCi0gICAgMHg5 MjUwLCAweGZmZmQsIDB4OTQ4ZSwgMHhmZmZkLCAweDk2NmQsIDB4ZmZmZCwgMHg5OWM0LCAweGZm ZmQsCi0gICAgMHg5MGU4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg4YzU0LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk5YzUsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg5OWM2LCAweDg5NGIsCi0gICAgMHg4OGYzLCAweDhhZWIsIDB4ZmZmZCwg MHg5MWE2LCAweDhiNzAsIDB4OTc5MSwgMHhmZmZkLCAweDk5YzksCi0gICAgMHg4OWI1LCAweGZm ZmQsIDB4ZmZmZCwgMHg5OWM4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhiYTgsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4OTljYSwgMHhmZmZkLCAweDk2ZWYsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5OWNiLCAweGZmZmQsCi0gICAgMHg5N2QwLCAweGZmZmQsIDB4OGNm YSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhjYjQsCi0gICAgMHg5OWNjLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTljZSwgMHg5OWNkLCAweGZmZmQsCi0g ICAgMHg5MDdlLCAweDg5NTgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODk3ZCwgMHg5OWNm LCAweGZmZmQsCi0gICAgMHg5OWQwLCAweGZmZmQsIDB4ZmZmZCwgMHg4Y2I1LCAweGZmZmQsIDB4 ZmZmZCwgMHg5OWQxLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4Yjhl LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 OGU1MSwgMHg5OWQyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5Njk0 LCAweDhkYjMsIDB4OGI3OSwgMHg5NzQ2LCAweDkxNmYsIDB4OTRiZCwgMHg4ZWZiLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhmNjYsIDB4ZmZmZCwgMHg4 ZWU2LCAweDhlZjMsCi0gICAgMHhmZmZkLCAweDhmOTYsIDB4ZmZmZCwgMHg5NGJlLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDk5ZDUsCi0gICAgMHhmZmZkLCAweDg5NjIsIDB4OTE3MCwgMHg4 Y2ZiLCAweDhjYzMsIDB4OGJlNSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5OWQ5LCAweDkyNDAs IDB4OTFmYywgMHg4YmE5LCAweDhmYTIsIDB4OTlkYSwgMHg5OWQ4LCAweDg5YzIsCi0gICAgMHg5 MWU0LCAweDhlYjYsIDB4OGU2YSwgMHg4OTQ1LCAweGZmZmQsIDB4ZmZmZCwgMHg4YTkwLCAweDhk ODYsCi0gICAgMHg4ZTY5LCAweGZmZmQsIDB4OTlkYiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk5ZGMsIDB4ZmZmZCwgMHg4YjY4LCAweDhh NjUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4ZDg3LCAweDhiNjcsIDB4OTJkZCwg MHg4OTQ0LCAweDkzYWYsIDB4OTZiYywgMHg4ZDQwLCAweDk3OTksCi0gICAgMHg5MzY2LCAweDhj ZmMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YzRlLCAweGZmZmQsIDB4OTllNSwgMHhmZmZkLCAw eDhiZTEsCi0gICAgMHg5NjY5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5NGRiLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk5ZTQsIDB4ZmZmZCwgMHg4YWRjLCAw eDk5ZGYsIDB4OTllMCwgMHg5OWUyLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5OWUzLCAweGZmZmQsCi0gICAgMHg4YjdhLCAw eDkwODEsIDB4ZmZmZCwgMHg5NWFiLCAweDk5ZTEsIDB4OTlkZCwgMHg4Y2UxLCAweGZmZmQsCi0g ICAgMHg5OWRlLCAweGZmZmQsIDB4OTg0MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NWYw LCAweGZmZmQsCi0gICAgMHg5MmU2LCAweDhjZTAsIDB4OGQ5MCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg5OWU2LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDkzZGIsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk5ZWEsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHg4ZWZjLCAweGZmZmQsIDB4OGVmNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHg5OWVkLCAweDk5ZWIsIDB4ZmZmZCwgMHg5NmExLCAweGZmZmQs IDB4OTllOCwgMHg5OWYxLCAweDk5ZWMsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 OWVmLCAweDhjYzQsIDB4OTZiZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5OWYwLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDk5ZjIsIDB4ZmZmZCwgMHg5OWY0LCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZGVlLCAweDk4NjEsIDB4ZmZmZCwgMHg5OWU5LCAweDk5 ZTcsCi0gICAgMHg5OWYzLCAweGZmZmQsIDB4OTllZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTlmNiwg MHhmZmZkLCAweDlhNDIsIDB4OTlmOCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5OWZjLCAweGZm ZmQsIDB4ZmZmZCwgMHg5YTQwLCAweDk5ZjksIDB4ZmZmZCwgMHhmZmZkLCAweDlhNWQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4OGRlNywgMHg4YTUwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHg5OWY3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlhNDQsIDB4ODhm NCwgMHg5YTQzLCAweGZmZmQsCi0gICAgMHg4OGEzLCAweDk1NjksIDB4OWE0MSwgMHhmZmZkLCAw eDk5ZmEsIDB4ZmZmZCwgMHhmZmZkLCAweDk5ZjUsCi0gICAgMHg5OWZiLCAweDhkYzYsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHg5YTQ1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDg4ZjUsIDB4OWE0ZSwgMHhmZmZkLCAweGZmZmQsIDB4 OWE0NiwgMHg5YTQ3LCAweGZmZmQsCi0gICAgMHg4ZmEzLCAweDk2ODksIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OWE0YywgMHg5YTRiLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 OTM0ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4OWE0ZCwgMHhmZmZkLCAweGZmZmQsIDB4OWE0YSwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg5NTMsIDB4ZmZmZCwgMHg4 ZGI0LCAweDkwNGYsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDlhNDgsCi0gICAgMHg5MzgyLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDlhNDksIDB4ZmZmZCwgMHg4OGEwLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5YTUzLCAweDk3NDIsCi0gICAgMHhmZmZkLCAweDhmYTUsIDB4ZmZmZCwgMHg5YTU5LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5YTU4LCAweDlhNGYsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MWMxLCAweGZmZmQsCi0gICAgMHg5YTUwLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkxZWQsIDB4OWE1NSwgMHg4ZmE0LCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlhNTIsIDB4ZmZmZCwgMHhmZmZkLCAw eDk2ZTIsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YzViLCAweGZmZmQsIDB4ZmZm ZCwgMHg5YTU2LCAweDlhNTcsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDlhNTQsIDB4OWE1YSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5YTUxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YTYwLCAweDlhNjUsIDB4 ZmZmZCwgMHg5YTYxLCAweGZmZmQsCi0gICAgMHg5YTVjLCAweGZmZmQsIDB4ZmZmZCwgMHg5YTY2 LCAweDkxNTAsIDB4ZmZmZCwgMHhmZmZkLCAweDlhNjgsCi0gICAgMHhmZmZkLCAweDhkNDEsIDB4 OWE1ZSwgMHg5MjlkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHg5YTYyLCAweDlhNWIsIDB4OGFhYiwgMHhmZmZkLCAweDhhZWMsIDB4OGE4NSwgMHg5 YTYzLCAweDlhNWYsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDhjOTYsCi0gICAgMHg5YTY5LCAweDlhNjcsIDB4OTE3MiwgMHg4 YjY5LCAweDhiYWEsIDB4ZmZmZCwgMHg5YTY0LCAweGZmZmQsCi0gICAgMHg4YmYyLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OTYzLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlhNmQsIDB4OWE2Yiwg MHhmZmZkLCAweDlhYTUsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDlhNzAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4OWE2YSwgMHhmZmZkLCAweDlhNmUsIDB4ZmZmZCwgMHhmZmZkLCAweDlhNmMsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZTZiLCAweDlhNmYsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlhNzIsCi0gICAgMHhmZmZkLCAweDlhNzcsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OWE3NSwgMHg5YTc0LCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MjUxLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweDg5YzMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlhNzEsIDB4 ZmZmZCwgMHg5YTczLCAweDhmYTYsCi0gICAgMHg4OTUyLCAweGZmZmQsIDB4ZmZmZCwgMHg5YTc2 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweDg5ZGMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlhODIs Ci0gICAgMHhmZmZkLCAweDhmZmEsIDB4OWE3ZCwgMHhmZmZkLCAweDlhN2IsIDB4ZmZmZCwgMHg5 YTdjLCAweGZmZmQsCi0gICAgMHg5YTdlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ODk1YywgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDkxNTgsIDB4ZmZmZCwgMHg5YTc4LCAweGZmZmQsCi0gICAgMHg5 YTc5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YTlhLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlh ODEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4YWVkLCAweGZmZmQsIDB4OWE4NCwg MHg5YTgwLCAweDlhODMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk1YWMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHg5M2QzLCAweGZmZmQsIDB4OTRiNiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHg5YTg2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5YTg1LCAweDhhNjQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWE4NywgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlhOGEsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDlhODksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHg5YTg4LCAweGZmZmQsIDB4OTQ1OCwgMHhmZmZkLCAweGZmZmQsIDB4OWE4YiwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg5YThjLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDlhOGUsIDB4ZmZmZCwgMHg5YThkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDlhOTAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5YTkz LCAweDlhOTEsIDB4OWE4ZiwgMHg5YTkyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHg5YTk0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 YTk1LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDlhOTYsIDB4ZmZmZCwgMHg5YTk3LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDlhOTgsCi0gICAgMHg5OTY0LCAweGZmZmQsIDB4OGVmYSwgMHg4 ZTZjLCAweGZmZmQsIDB4ZmZmZCwgMHg4OWYxLCAweGZmZmQsCi0gICAgMHg4OGY2LCAweGZmZmQs IDB4ZmZmZCwgMHg5MjYzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YTk5LCAweGZm ZmQsCi0gICAgMHg4ZGEyLCAweGZmZmQsIDB4ODhjZCwgMHg5MDdkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDlhOWEsIDB4OGNjNSwgMHhmZmZkLCAweGZm ZmQsIDB4OGQ5MSwgMHhmZmZkLCAweDlhOWMsCi0gICAgMHg5YTliLCAweGZmZmQsIDB4ZmZmZCwg MHg5NWRlLCAweDlhOWQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5YTlmLCAweDlh OWUsIDB4ZmZmZCwgMHg5YWEwLCAweGZmZmQsIDB4OWFhMSwgMHhmZmZkLCAweDhjOTcsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ODk4MCwgMHg5YWEyLCAweGZmZmQsIDB4ZmZmZCwgMHg5YWE0LCAw eGZmZmQsCi0gICAgMHg5YWEzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlhYTYsIDB4ZmZm ZCwgMHhmZmZkLCAweDkzNzksCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5YWE3LCAweDg4YjMsCi0gICAgMHg4ZGRkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OGM1YywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5MjZlLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlhYTgsCi0g ICAgMHg5YWE5LCAweGZmZmQsIDB4ZmZmZCwgMHg5YWFiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHg5YWFjLCAweGZmZmQsIDB4OGRlMiwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDhiY2YsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTY1NiwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg5YWFhLCAweDlhYWQsCi0gICAgMHg4ZGJmLCAweDhkNDIsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweDlhYjEsIDB4ZmZmZCwgMHhmZmZkLCAweDhkYTMsIDB4ZmZmZCwgMHg5 MjUyLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDlhYWUsIDB4OTJkOCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlhYjIsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4OTA4MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHg5YWIwLCAweDlhYjMsIDB4ZmZmZCwgMHg4YzVlLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YWI0LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5YWI1LCAweGZm ZmQsIDB4OGQ0MywgMHg4YTVmLCAweDlhYjcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4OWFiOCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHg5YWI5LCAweGZmZmQsIDB4ZmZmZCwgMHg5YWI2LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5YWFmLCAweGZmZmQsIDB4ZmZm ZCwgMHg5YWJhLCAweGZmZmQsIDB4ZmZmZCwgMHg5YWJiLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5Njg0LCAweGZmZmQsIDB4ZmZmZCwgMHg4ZmU5LCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4OWFiZCwgMHg5YWJlLCAweDlhYmMsIDB4ZmZmZCwgMHg5YWMw LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk0NTcsIDB4 ZmZmZCwgMHhmZmZkLCAweDg4ZTYsCi0gICAgMHg5NTc1LCAweGZmZmQsIDB4ZmZmZCwgMHg5YWMx LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhmZmIsIDB4ZmZmZCwgMHhmZmZkLCAweDhlYjcs Ci0gICAgMHhmZmZkLCAweDk0N2MsIDB4OGFlZSwgMHhmZmZkLCAweDhkZTksIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHg5Njc4LCAweGZmZmQsIDB4OTNiMCwgMHhmZmZkLCAweGZmZmQs IDB4OGM5OCwgMHg5MWNkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWFiZiwgMHg5 YWMyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTFjMiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweDlhYzMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWFjNCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweDlhYzYsIDB4ZmZmZCwgMHhmZmZkLCAweDkyZTcsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGFhYywgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGVhOWYsCi0gICAgMHg4OTgxLCAweDk1ZjEsIDB4ZmZmZCwg MHhmZmZkLCAweDhmZWEsIDB4OTM2NywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4OGRlNCwgMHhmZmZkLCAweGZmZmQsIDB4OWFjYywgMHhmZmZkLCAweGZmZmQsCi0gICAg MHg5NWJiLCAweDk3ZGIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ODlmMiwgMHg5YWM4LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDkxNTksIDB4OWFjYiwgMHhmZmZkLCAw eDkzODMsIDB4ZmZmZCwgMHhmZmZkLCAweDkzNjgsCi0gICAgMHg5Mzg0LCAweDk0YjcsIDB4OTJj YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZGM3LCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4OWFjNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweDg5OTYsIDB4ZmZmZCwgMHg5MzU1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHg5YWM5LCAweGZmZmQsIDB4OWFjNSwgMHhmZmZkLCAweGZmZmQsIDB4 OTA2ZiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDlhY2QsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg4ZjZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg4YmFiLCAweGZmZmQsIDB4OWFjZSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NWU2LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDkxOWQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkyYzQs IDB4ZmZmZCwgMHhmZmZkLCAweDlhZDAsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5NjZlLCAweGZmZmQs IDB4ZmZmZCwgMHg5YWQxLCAweGZmZmQsIDB4ZmZmZCwgMHg5YWQ2LCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NWFkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHg5YWQ1LCAweDlhY2YsIDB4OWFkMiwgMHg5YWQ0LCAweGZmZmQsIDB4ZmZmZCwg MHg4ZGE0LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk1YzcsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OWFkNywgMHhmZmZkLCAweDkyNjQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ODlmMywg MHhmZmZkLCAweDhmZWIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDlh ZDksIDB4ZmZmZCwgMHg5YWQ4LCAweGZmZmQsIDB4OGQ4OCwgMHhmZmZkLCAweDlhZGEsCi0gICAg MHg5YWRjLCAweDlhZGIsIDB4ZmZmZCwgMHhmZmZkLCAweDlhZGUsIDB4ZmZmZCwgMHg5YWQzLCAw eDlhZTAsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlhZGYsIDB4OWFk ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZTZkLCAw eDkwNzAsIDB4ZmZmZCwgMHg5MTczLCAweDlhZTEsCi0gICAgMHg5MGJhLCAweDg4ZWIsIDB4OTQ4 NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkyZDksCi0gICAgMHhmZmZkLCAw eDlhZTMsIDB4OWFlMiwgMHg5YWU0LCAweDlhZTUsIDB4OWFlNiwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4OWFlNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk1Y2YsIDB4OWFlOCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDg5YzQsCi0gICAgMHg5YWU5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OTc1YiwgMHg4YTRmLCAweGZmZmQsCi0gICAgMHg5OWM3LCAweDhmNjcsIDB4 OTFiZCwgMHg5YWVhLCAweDk2ZTksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4OTZiMiwgMHhmZmZkLCAweGZmZmQsIDB4OWFlYywgMHhmZmZkLCAweDkxZTUs Ci0gICAgMHhmZmZkLCAweDkzNTYsIDB4OTFiZSwgMHg5NTc2LCAweDlhZWQsIDB4OWFlZSwgMHg4 OTliLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhlYjgsIDB4OWFlZiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDg4Y2UsCi0gICAgMHg5YWYwLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YWYxLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDg5ODIsIDB4ZmZmZCwgMHhmZmZkLCAweDhhZWYsCi0gICAgMHg5 M2RlLCAweDk1ZjIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YWY1LCAweDkx NzQsCi0gICAgMHg5YWY0LCAweDhjNWYsIDB4ZmZmZCwgMHhmZmZkLCAweDk2N2EsIDB4OWFmMywg MHhmZmZkLCAweDkzODUsCi0gICAgMHg5YWY3LCAweGZmZmQsIDB4OWFmNiwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5YWY5LCAweGZmZmQsIDB4OWFmOCwg MHhmZmZkLCAweGZmZmQsIDB4ODk5YywgMHhmZmZkLCAweDlhZmEsCi0gICAgMHg4ZmE3LCAweDlh ZmMsIDB4OTI0NCwgMHhmZmZkLCAweDlhZmIsIDB4ZmZmZCwgMHg5NWIxLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4Zjk3LCAweDkzN2EsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHg5YjQwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGQ0 NCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDliNDEsIDB4OTQ0MCwgMHg5NGRjLCAw eDk2Y2YsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTQ0 NCwgMHhmZmZkLCAweGZmZmQsIDB4OWI0YSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg4YjU3LCAweGZmZmQsIDB4ZmZmZCwgMHg5NzY0LCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweDk2YWQsIDB4ZmZmZCwgMHg5YmFhLCAweGZmZmQsIDB4OWI0MiwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YjQ1LCAweGZmZmQsIDB4 OTFjMywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5NjU3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDkzNjksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 OWI0NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweDk2ODUsIDB4ZmZmZCwgMHg4ZGM4LCAweGZmZmQsIDB4ZmZmZCwgMHg4ZmE4LCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 YjQ3LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhlNmYsIDB4ZmZmZCwgMHg4ZTZlLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4OGI3LCAweDhjYzYsIDB4ZmZmZCwgMHg5 MGE5LCAweDg4Y2YsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDliNGIs IDB4OWI0YywgMHhmZmZkLCAweDliNDksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODk1NywgMHg4YWFkLCAweGZm ZmQsCi0gICAgMHg5YjQ4LCAweGZmZmQsIDB4OTZjMywgMHg5NTUwLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg4OGE2LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg4OGY3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhlNzAsCi0gICAgMHhmZmZkLCAweDg4 ZDAsIDB4ZmZmZCwgMHg4OGExLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweDliNTEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweDliNGYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5NmJhLCAweGZmZmQsIDB4OWI1MiwgMHhmZmZkLCAw eDliNTAsIDB4ZmZmZCwgMHhmZmZkLCAweDliNGUsCi0gICAgMHg5MDUwLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OWI0ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eDk1ZDgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhjZTIsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWI1NiwgMHg5YjU3 LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhmYTksIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5YjUzLCAweDk4NGIsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg5NDZiLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDliNTUsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGRhNSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWI1OCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5NTc3LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWI1OSwgMHhm ZmZkLCAweDliNTQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk2 YjksCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTQ3ZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4OWI1YSwgMHg5NTUxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDliNWIsIDB4OWI1ZiwgMHg5YjVjLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eDg5YzUsIDB4OWI1ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweDhlYjksIDB4ZmZmZCwgMHg5YjVkLCAweDhjOTksIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHg5YjZiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg5YjY0LCAweDliNjEsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDkyODQsIDB4 ZmZmZCwgMHg5YjYwLCAweGZmZmQsIDB4ZmZmZCwgMHg5YjYyLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweDliNjMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWI2NSwgMHg5YjY2LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhhZjAs IDB4ZmZmZCwgMHg5YjY4LCAweDliNjcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YjY5LCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGZlYywgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWI2Yywg MHhmZmZkLCAweDkyZGEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4OTY0LCAweGZm ZmQsIDB4OWI2YSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YjZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YjZlLCAw eGZmZmQsCi0gICAgMHg5YjcxLCAweGZmZmQsIDB4ZmZmZCwgMHg5YjZmLCAweGZmZmQsIDB4OWI3 MCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4ZTcxLCAweDliNzIsIDB4ZmZm ZCwgMHhmZmZkLCAweDhkNDUsIDB4OWI3MywgMHhmZmZkLCAweDhlOWEsCi0gICAgMHg5MWI2LCAw eGZmZmQsIDB4OWI3NCwgMHg5Yjc1LCAweDhlNzksIDB4OGQ0NiwgMHhmZmZkLCAweDk2ZDAsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YjQ3LCAweDhjYzcsIDB4OWI3NiwgMHg4YTc3 LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDliNzcsIDB4ZmZmZCwgMHg5MWI3LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5Yjc4LCAweDliYTEsIDB4ZmZmZCwgMHg5Yjc5 LCAweGZmZmQsIDB4OWI3YSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5YjdiLCAweGZmZmQsIDB4 OWI3ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5Yjdl LCAweGZmZmQsIDB4ZmZmZCwgMHg5YjgwLCAweGZmZmQsIDB4OTFlZSwgMHhmZmZkLCAweDg5NDYs Ci0gICAgMHg4ZWU3LCAweDg4YzAsIDB4ZmZmZCwgMHg5MTc2LCAweDhhYWUsIDB4OGViMywgMHhm ZmZkLCAweDhkNDcsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OTM4NiwgMHhmZmZkLCAweDhmNDAsCi0gICAgMHg4YWFmLCAweDkyODgsIDB4OTJlOCwgMHg4 OGI2LCAweDhiNTgsIDB4OTVmMywgMHhmZmZkLCAweDhlYzAsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4OGI3MSwgMHg5MGU5LCAweDhlYmEsIDB4OTc0NywgMHg5YjgxLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YjdiLCAweGZm ZmQsCi0gICAgMHg4ZGM5LCAweGZmZmQsIDB4ZmZmZCwgMHg4YTUxLCAweDg5ODMsIDB4OGZhYSwg MHg4OWM2LCAweGZmZmQsCi0gICAgMHg5YjgyLCAweDk3NjUsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhmNjgsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGVlMiwg MHg5YjgzLCAweDhhZjEsIDB4OTNkMCwgMHg5NmE3LCAweDliODQsCi0gICAgMHhmZmZkLCAweDli ODUsIDB4ZmZmZCwgMHhmZmZkLCAweDk1NzgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHg5Yjg3LCAweGZmZmQsIDB4OGFhNiwgMHg4YmY1LCAweDliODYsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YWIwLCAweGZmZmQsIDB4OTA1 MSwgMHg5YjhiLCAweDhlNDAsCi0gICAgMHhmZmZkLCAweDg5YzcsIDB4OWI4YSwgMHhmZmZkLCAw eDliODgsIDB4OWI4YywgMHg5Yjg5LCAweDk0NGEsCi0gICAgMHg5ZWNiLCAweDkwNTIsIDB4ZmZm ZCwgMHg5YjhkLCAweGZmZmQsIDB4ZmZmZCwgMHg5N2JlLCAweGZmZmQsCi0gICAgMHg5YjhlLCAw eGZmZmQsIDB4ZmZmZCwgMHg5YjkwLCAweGZmZmQsIDB4OTI5ZSwgMHg5YjhmLCAweGZmZmQsCi0g ICAgMHg5MGExLCAweGZmZmQsIDB4OGU5YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MWNl LCAweDhlZjUsCi0gICAgMHhmZmZkLCAweDk1OTUsIDB4OTBlYSwgMHhmZmZkLCAweDhlY2IsIDB4 OWI5MSwgMHg4ZmFiLCAweDliOTIsCi0gICAgMHg5YjkzLCAweDg4ZDEsIDB4OTFiOCwgMHg5MDcx LCAweGZmZmQsIDB4OWI5NCwgMHg5M2IxLCAweDhmYWMsCi0gICAgMHhmZmZkLCAweDhmYWQsIDB4 ZmZmZCwgMHg5Yjk1LCAweGZmZmQsIDB4ZmZmZCwgMHg5MGViLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4OGZhZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHg5Yjk2LCAweGZmZmQsIDB4OWI5NywgMHhmZmZkLCAweDk2ZGUsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHg5Yjk4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OGJjNCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhmNDEsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5Yjk5LCAweDliOWEs IDB4OGVkYSwgMHg5MDRiLCAweDkzZjIsIDB4OTA3MywgMHg5NGY2LCAweDk0NDEsCi0gICAgMHg4 YmM3LCAweDliOWIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGI4ZiwgMHg5YjljLCAweGZm ZmQsCi0gICAgMHg4YmZjLCAweGZmZmQsIDB4OTNjZCwgMHg4OWFlLCAweGZmZmQsIDB4OGU3Miwg MHg5YjlkLCAweDliYTAsCi0gICAgMHg5YjlmLCAweDhiZmIsIDB4ZmZmZCwgMHg5YjllLCAweGZm ZmQsIDB4OTM1NywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MWFlLCAweGZmZmQsCi0gICAgMHg5MzZhLCAweDhl YzYsIDB4ZmZmZCwgMHhmZmZkLCAweDkxNzcsIDB4OTc5YSwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDliYTIsIDB4ZmZmZCwgMHg5YmEzLCAw eDkzZDQsCi0gICAgMHhmZmZkLCAweDhlNTIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5YmE1LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDliYTYsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDliYTcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHg4YWYyLCAweDliYTgsIDB4ZmZmZCwgMHhmZmZkLCAweDliYTksIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDg5YWEsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5MTVhLCAweDhhZTIsIDB4 ZmZmZCwgMHg5YmFiLCAweDk2YTYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweDkxZDAsIDB4ZmZmZCwgMHg4YTc4LCAweGZmZmQsIDB4ZmZmZCwgMHg5YmFkLCAweDliYWYs Ci0gICAgMHg4YWRkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YmFjLCAweDliYWUsIDB4ZmZmZCwgMHg5 YmIxLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OWJiMCwgMHhmZmZkLCAweDliYjIsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweDliYjMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHg5M2JiLCAweDhiYWMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHg4OWUzLCAweDliYjQsIDB4OWJiOSwgMHhmZmZkLCAweGZm ZmQsIDB4OWJiNywgMHhmZmZkLCAweDk1ZjUsCi0gICAgMHg5NWY0LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Mzg3LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4OWJiNiwgMHg4ZjczLCAweGZmZmQsIDB4OWJiNSwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDkwOTIsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YmJhLCAweGZmZmQsIDB4ZmZm ZCwgMHg4ZGU4LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDliYzAsIDB4ZmZmZCwgMHhmZmZkLCAw eDliYzEsIDB4OWJiYiwgMHg4YTUyLCAweDliYmMsCi0gICAgMHg5YmM1LCAweDliYzQsIDB4OWJj MywgMHg5YmJmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDliYmUsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4OWJjMiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweDk1ZjYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg5YmM5LCAweDliYzYsIDB4ZmZmZCwgMHg5YmM4LCAweGZmZmQs Ci0gICAgMHg5NzkyLCAweGZmZmQsIDB4OWJjNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDliYmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDkwOTMs IDB4ZmZmZCwgMHhmZmZkLCAweDliY2EsIDB4ZmZmZCwgMHhmZmZkLCAweDhkYjUsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YmNiLCAweGZmZmQsIDB4ZmZmZCwgMHg5YmNjLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWJjZiwgMHhmZmZkLCAweDli Y2UsIDB4ZmZmZCwgMHhmZmZkLCAweDliY2QsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5Mzg4LCAweDliYjgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5YmQ1LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWJkMSwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWJkMCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDliZDIsIDB4ZmZmZCwgMHg5YmQzLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDliZDYsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4OTdlNCwgMHhmZmZkLCAweDliZDcsIDB4OWJkNCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDliZDgsIDB4ZmZmZCwgMHhmZmZkLCAweDhhZGUsIDB4 OWJkOSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWJkYiwgMHg5YmRh LCAweGZmZmQsIDB4ZmZmZCwgMHg5YmRjLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg5YmRkLCAweGZmZmQsIDB4OTBlYywgMHg4ZjQyLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweDhmODQsIDB4ZmZmZCwgMHg5MTgzLCAweGZmZmQsIDB4OGQ0OCwgMHg4ZGI2LCAweDhkNDks Ci0gICAgMHg4YjkwLCAweGZmZmQsIDB4ZmZmZCwgMHg5YmRlLCAweGZmZmQsIDB4ZmZmZCwgMHg4 ZGI3LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhjYzgsIDB4OWJkZiwgMHg5NmE0LCAweDk0NjIs IDB4OWJlMCwgMHhmZmZkLCAweDhkNGEsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4 YWFhLCAweGZmZmQsIDB4OTI0NiwgMHg4YmQwLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4OGU3MywgMHg5NTdhLCAweGZmZmQsIDB4ZmZmZCwgMHg5NGJmLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YmUxLCAweDhhZjMsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweDliZTQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5MjlmLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDliZTMsIDB4OWJlMiwgMHg5YmU1LCAweGZm ZmQsIDB4OTJlOSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OTA4MywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg4ZTc0LCAweGZmZmQsIDB4OTBjOCwgMHhmZmZkLCAweDkxZDEsCi0gICAg MHg4YjQxLCAweGZmZmQsIDB4ZmZmZCwgMHg5MmEwLCAweGZmZmQsIDB4ZmZmZCwgMHg5YmU2LCAw eDliZTcsCi0gICAgMHg4ZmVkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTY1 OCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5YmVhLCAweGZmZmQsIDB4ZmZmZCwgMHg5YmU5LCAw eDliZTgsIDB4OTU5ZCwgMHhmZmZkLCAweDliZjEsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDk2NzksIDB4ZmZmZCwgMHg5YmViLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDliZWQsIDB4OTY4YiwgMHhmZmZkLCAweDliZWMsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDliZWUsCi0gICAgMHhmZmZkLCAweDk0YTYsIDB4OWJlZiwgMHg5NWJjLCAweDliZjAsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 OGFiMSwgMHg5NWJkLCAweDk0NGUsIDB4OWJmMiwgMHg5YmYzLCAweGZmZmQsCi0gICAgMHg4ZDRi LCAweDhhYjIsIDB4OWJmNCwgMHg4Y2I2LCAweDk3NjMsIDB4OTc0OCwgMHg4YWY0LCAweDliZjYs Ci0gICAgMHhmZmZkLCAweDkyYTEsIDB4ZmZmZCwgMHg4ZDRjLCAweDhmYWYsIDB4ZmZmZCwgMHhm ZmZkLCAweDk0ZGQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGZiMCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDhmOTgsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OTJlYSwgMHg5NWY3LCAweDkzNTgsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4OGQ0ZCwgMHhmZmZkLCAweDk1N2IsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5 YmY3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Mzc4LCAweDhk YzAsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4Y2M5LCAweGZmZmQsIDB4OTJlYiwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ODhjMSwgMHg4ZjhlLCAweDhkNGUsCi0gICAgMHg5NzY2LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDli ZjgsIDB4OWJmOSwgMHg5NDcwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHg5YmZhLCAweDk3ZjUsIDB4OTg0YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDliZmMsCi0gICAgMHg5YmZiLCAweGZmZmQsIDB4ZmZmZCwgMHg4YTY2LCAweGZmZmQsIDB4ZmZm ZCwgMHg5YzQwLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWM0MywgMHg5YzQ0LCAw eGZmZmQsIDB4OWM0MiwgMHhmZmZkLCAweDk1NWYsCi0gICAgMHg4ZmIxLCAweDljNDYsIDB4OWM0 NSwgMHg5YzQxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5YzQ3LCAw eDljNDgsIDB4ZmZmZCwgMHhmZmZkLCAweDljNDksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHg5YzRjLCAweDljNGEsIDB4ZmZmZCwgMHg5YzRiLCAweDljNGQsIDB4ZmZmZCwgMHg4OTg0 LCAweDkyZWMsCi0gICAgMHg5YzRlLCAweGZmZmQsIDB4OGM5YSwgMHg4OWY0LCAweDk0NTUsIDB4 ZmZmZCwgMHg5YzRmLCAweDkzZjksCi0gICAgMHhmZmZkLCAweDk1ZDksIDB4ZmZmZCwgMHg5YzUw LCAweDk4NGQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDljNTEsIDB4 OTViZSwgMHg5YzU0LCAweDk4OWYsIDB4OThhZiwgMHhmZmZkLCAweDhlYWUsCi0gICAgMHg5M2Yz LCAweDljNTUsIDB4ZmZmZCwgMHg4YjdjLCAweDkyYTIsIDB4ODhmOCwgMHg5YzU2LCAweDk1YTQs Ci0gICAgMHg4ZDRmLCAweGZmZmQsIDB4ZmZmZCwgMHg5MjZmLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDkyZWQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OTZlZCwgMHg4Y2I3LCAweDhjY2EsCi0gICAgMHhmZmZkLCAweDljNTcsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OWM1OCwgMHhmZmZkLCAweDljNWUsCi0gICAgMHhmZmZkLCAweDhlZTMs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTJhMywgMHhmZmZkLCAweDhiYWQsCi0gICAgMHg5 YzU5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk1NGEsIDB4ZmZmZCwgMHg5MjY1LCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweDljNWEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHg5YzViLCAweGZmZmQsIDB4OGJhZSwgMHhmZmZkLCAweDlj NWMsIDB4ZmZmZCwgMHg5YzVkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDljNWYsIDB4ZmZmZCwg MHg5Mzk2LCAweGZmZmQsIDB4ZmZmZCwgMHg5YzYwLCAweDljNjEsCi0gICAgMHhmZmZkLCAweDlj NjIsIDB4ZmZmZCwgMHhmZmZkLCAweDljNTMsIDB4OWM1MiwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweDljNjMsIDB4OGM2MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NTQ2LCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweDhkY2EsIDB4OTU1NiwgMHg5MmE0LCAweDk1NmEsIDB4OWM2 NCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4ZmIyLCAweDg5NjUsIDB4ZmZmZCwgMHg5YzY1LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDljNjYsCi0gICAgMHhmZmZkLCAweDk2ZjAsIDB4ZmZm ZCwgMHhmZmZkLCAweDk0ZGUsIDB4ZmZmZCwgMHhmZmZkLCAweDljNjksCi0gICAgMHg4OTlkLCAw eDkwYWEsIDB4OWM2OCwgMHg5YzY3LCAweDhjNjEsIDB4OTFkMiwgMHhmZmZkLCAweDljNmQsCi0g ICAgMHg5YzZiLCAweGZmZmQsIDB4OWM2YSwgMHg5N2E1LCAweDhjZTMsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHg4Zjk5LCAweDljNmMsIDB4OTM2YiwgMHg4ZjVkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDkzYmUsCi0gICAgMHg5YzcwLCAweDljNmYsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg5YzZlLCAweGZmZmQsCi0gICAgMHg5YzcxLCAweDhjZTQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5Yzcy LCAweDk1OWMsIDB4OGY3YSwgMHhmZmZkLCAweGZmZmQsIDB4OWM3MywgMHg5NGY3LCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5M2JmLCAweDkyYTUsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDkzNGYsIDB4ZmZmZCwgMHhmZmZkLCAweDljNzQs IDB4OGI0YSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 MDUzLCAweGZmZmQsIDB4OTU0YiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDhhZjUsIDB4OTQ0NSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Yzc1LCAweDhl NzUsCi0gICAgMHg5NjU5LCAweDk2NWEsIDB4ZmZmZCwgMHhmZmZkLCAweDg5OWUsIDB4OWM3YSwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHg5Mjg5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlj NzcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg4OWY1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5Y2FiLCAweDlj NzksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTQ0ZiwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHg5Yzc4LCAweGZmZmQsIDB4ZmZmZCwgMHg5Yzc2LCAweGZmZmQsIDB4OGQ5YSwgMHhmZmZkLCAw eDljN2MsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5YzgzLCAweDljODksCi0gICAgMHg5YzgxLCAweGZmZmQsIDB4OTM3 YiwgMHhmZmZkLCAweGZmZmQsIDB4OWM4NiwgMHg5NTdjLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eDljODAsIDB4ZmZmZCwgMHg5Yzg1LCAweDk3ZTUsIDB4OGU3NiwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHg5MWQzLCAweDljN2QsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGI3ZCwgMHg5Yzg4 LCAweDkwYWIsCi0gICAgMHg4OTg1LCAweDljODIsIDB4ODlmNiwgMHg5Yzg3LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDhiYWYsCi0gICAgMHhmZmZkLCAweDljODQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 OWM4YSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweDljOGMsIDB4OWM5NiwgMHg5Yzk0LCAweGZmZmQsIDB4ZmZmZCwgMHg5YzkxLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWM5MCwgMHg5N2Y2LCAweGZmZmQsIDB4OWM5MiwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHg4YmIwLCAweGZmZmQsIDB4OGQ1MCwgMHhmZmZkLCAweGZmZmQs IDB4OGY5YSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDljOTksIDB4OWM4YiwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDljOGYsCi0gICAgMHg5YzdlLCAweGZmZmQs IDB4ODlmOCwgMHg5YzkzLCAweDljOTUsIDB4OTI3MCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4 ZGE2LCAweDg5YjYsIDB4OWM4ZCwgMHg5Yzk4LCAweDljOTcsIDB4OGJiMSwgMHhmZmZkLCAweDkx YTcsCi0gICAgMHg4YTg2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGM2Miwg MHhmZmZkLCAweDljOGUsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDljOWEsIDB4ZmZmZCwg MHg5YzlkLCAweDljOWYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhl YmIsIDB4ZmZmZCwgMHg5Y2E1LCAweDkyZWUsIDB4OWM5YiwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4OWNhMywgMHhmZmZkLCAweDg5ZjcsIDB4ZmZmZCwgMHg5Y2ExLCAw eDljYTIsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWM5ZSwgMHg5Y2EwLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDhjZTUsCi0gICAgMHg5NzQ5LCAweGZmZmQsIDB4ZmZmZCwgMHg4YWIzLCAw eGZmZmQsIDB4ZmZmZCwgMHg4OTc4LCAweDljYTQsCi0gICAgMHhmZmZkLCAweDk0NTksIDB4ODhh YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4OTRkZiwgMHg5YzdiLCAweDljYWEsIDB4OWNhZSwgMHg5NmUzLCAweGZmZmQsCi0g ICAgMHg5Y2E3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkzODksIDB4OWNhYywgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OGZlZSwgMHg5Y2FkLCAweDkzZDUsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk4NjYsIDB4 ZmZmZCwgMHg5Y2E5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5Y2Fm LCAweGZmZmQsIDB4OGQ5YiwgMHhmZmZkLCAweDkwYzksIDB4ZmZmZCwgMHhmZmZkLCAweDg4ZDIs Ci0gICAgMHg5Y2E4LCAweDljYTYsIDB4ZmZmZCwgMHg5MTc5LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDljOWMsCi0gICAgMHg4ZTUzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5MWM0LCAweDljYmIsIDB4ZmZmZCwgMHg5 MTdhLCAweDljYjYsIDB4ZmZmZCwgMHg5Y2IzLCAweDljYjQsCi0gICAgMHhmZmZkLCAweDhlZTQs IDB4OWNiNywgMHg5Y2JhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5 Y2I1LCAweDhmNDQsIDB4ZmZmZCwgMHg5Y2I4LCAweGZmZmQsIDB4ZmZmZCwgMHg5Y2IyLCAweGZm ZmQsCi0gICAgMHg5NmZhLCAweDk2ZjksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWNiYywg MHg5Y2JkLCAweDg4ZDMsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OWNiMSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGJmMCwg MHg4OGE0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhhYjQsCi0gICAgMHhmZmZkLCAweDlj YjksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDljYzEsCi0gICAg MHg5Y2MwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDljYzUsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDljYzYsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDljYzQsIDB4OWNjNywgMHg5Y2JmLCAweDljYzMsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWNj OCwgMHhmZmZkLCAweDljYzksIDB4ZmZmZCwgMHhmZmZkLCAweDljYmUsCi0gICAgMHg4ZTljLCAw eGZmZmQsIDB4OWNjMiwgMHg5MWQ0LCAweDhkNTEsIDB4OWNiMCwgMHg5MDU0LCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Y2Q2LCAweGZmZmQsIDB4OTVlNywgMHhmZmZk LCAweGZmZmQsCi0gICAgMHg5Y2NjLCAweDljY2QsIDB4OWNjZSwgMHhmZmZkLCAweGZmZmQsIDB4 OWNkNSwgMHhmZmZkLCAweDljZDQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTY5ZCwgMHg4YWI1 LCAweGZmZmQsIDB4OWNkMiwgMHhmZmZkLCAweDhjNjQsCi0gICAgMHg4YTUzLCAweGZmZmQsIDB4 ZmZmZCwgMHg5Y2NmLCAweGZmZmQsIDB4ZmZmZCwgMHg5N2I2LCAweDljZDEsCi0gICAgMHg4OGQ0 LCAweDljZDMsIDB4ZmZmZCwgMHg5Y2NhLCAweDljZDAsIDB4OWNkNywgMHg4YzYzLCAweDljY2Is Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 NzdjLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTc0YSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDljZGEsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWNkZSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MTllLCAweGZmZmQsCi0gICAgMHg5N2Y3LCAweDljZGYs IDB4ZmZmZCwgMHhmZmZkLCAweDljZGMsIDB4ZmZmZCwgMHg5Y2Q5LCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweDljZDgsIDB4OWNkZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk1YWUsIDB4ZmZmZCwg MHhmZmZkLCAweDkzYjIsCi0gICAgMHhmZmZkLCAweDhjNjUsIDB4ZmZmZCwgMHg5Y2UwLCAweDlj ZGIsIDB4ZmZmZCwgMHg5Y2UxLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGM5Yiwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OWFmLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4OWNlOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YWI2LCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Y2U3LCAweGZmZmQsIDB4ZmZmZCwgMHg5Y2U4LCAw eDhkYTcsCi0gICAgMHg5Y2U2LCAweDljZTQsIDB4OWNlMywgMHg5Y2VhLCAweDljZTIsIDB4OWNl YywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4OWY5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5Y2VlLCAweGZmZmQsIDB4ZmZmZCwgMHg5Y2VkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTJhNiwgMHhmZmZkLCAweDljZjEsIDB4 ZmZmZCwgMHg5Y2VmLCAweDljZTUsCi0gICAgMHg4YzljLCAweGZmZmQsIDB4OWNmMCwgMHhmZmZk LCAweDljZjQsIDB4OWNmMywgMHg5Y2Y1LCAweDljZjIsCi0gICAgMHg5Y2Y2LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5Y2Y3 LCAweDljZjgsIDB4OTVlOCwgMHhmZmZkLCAweDljZmEsIDB4OWNmOSwgMHg4ZjVlLCAweGZmZmQs Ci0gICAgMHg5MGFjLCAweDg5ZTQsIDB4ODlmYSwgMHhmZmZkLCAweDljZmIsIDB4ZmZmZCwgMHg4 OGJkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTBjYSwgMHg5Y2ZjLCAweGZmZmQs IDB4ZTZjMSwgMHg5ZDQwLCAweDhjODEsCi0gICAgMHhmZmZkLCAweDlkNDEsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MGVkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4OWQ0MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZDQzLCAweDhiNTksCi0gICAgMHg5 ZDQ0LCAweGZmZmQsIDB4OWQ0NSwgMHg5ZDQ2LCAweDkxZDUsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHg4Y2NiLCAweGZmZmQsIDB4ZmZmZCwgMHg5NmRmLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDk2NWIsCi0gICAgMHg4ZjhhLCAweDlkNDcsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkwZWUsCi0gICAgMHhlN2JiLCAweDk0ZTAsIDB4ZmZmZCwg MHg4ZWU4LCAweGZmZmQsIDB4OGRjYiwgMHg5ZDQ4LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg5MWM1LCAweGZmZmQsIDB4OTVhNSwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHg5MWVmLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZDRiLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZDQ5LCAw eGZmZmQsCi0gICAgMHg5ZDRjLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZDRhLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5ZDRkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5NWFmLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDg4YjUsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NTdkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eDk0ZTEsIDB4ZmZmZCwgMHhmZmZkLCAweDlkNGUsIDB4ZmZmZCwgMHg5ZDUxLCAweDhmYjMsCi0g ICAgMHg4YjVhLCAweGZmZmQsIDB4OWQ0ZiwgMHg5ZDU2LCAweDhmYjQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDlkNTAsIDB4OTQ2MywgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk3N2QsIDB4OWQ1MiwgMHg5ZDUz LCAweDlkNTcsIDB4OTM4YSwgMHg5ZDU0LCAweDhkNTIsCi0gICAgMHg5MGRjLCAweGZmZmQsIDB4 ZmZmZCwgMHg5ZDY1LCAweDk0YjIsIDB4ZmZmZCwgMHg5MWYwLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NGUyLCAweDlkYWIsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk1ZjgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OTJlZiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk2OTUsIDB4ZmZmZCwgMHg5 ZDVhLCAweDg5OWYsIDB4OTI4YSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4OWQ2MywgMHhmZmZkLCAweGZmZmQsIDB4OTI1MywgMHg5ZDVkLCAweDlkNjQsCi0gICAgMHg5 ZDVmLCAweDlkNjYsIDB4OWQ2MiwgMHhmZmZkLCAweDlkNjEsIDB4OTQ4ZiwgMHhmZmZkLCAweDlk NWIsCi0gICAgMHg4OWZiLCAweDlkNTksIDB4OGI5MSwgMHg5MWYxLCAweDlkNTUsIDB4ZmZmZCwg MHhmZmZkLCAweDlkNTgsCi0gICAgMHg4ZDUzLCAweDkwZDksIDB4ZmZmZCwgMHg4ZmI1LCAweDlk NjAsIDB4OTQ3MSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4YjkyLCAweDhhNjcsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhhODcsIDB4OTA0MCwgMHg5ZDY4LCAweDlkNmQsCi0gICAg MHhmZmZkLCAweDlkNjksIDB4ZmZmZCwgMHg4YzlkLCAweGZmZmQsIDB4OWQ2ZSwgMHg4ZTQxLCAw eDhkODksCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg4ZjQ1LCAweDlkNWMsCi0gICAgMHhmZmZkLCAweDhlOWQsIDB4OWQ2YiwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhlNzcsCi0gICAgMHg5ZDZjLCAweDg4YzIsIDB4ZmZm ZCwgMHhmZmZkLCAweDlkNjcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eDkyYTcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweDhiOTMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDhiYjIsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDlkNmEsCi0gICAgMHg4OGE1LCAweGZmZmQsIDB4ZmZmZCwgMHg4ZGMx LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkwNTUsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4OTJmMCwgMHhmZmZkLCAweGZmZmQsIDB4OTRkMiwgMHg5ZDcwLCAweDkxN2Qs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDkxYTgsIDB4ZmZmZCwgMHhmZmZkLCAweDhlNGEs IDB4OWQ3MSwgMHhmZmZkLCAweDlkNzMsCi0gICAgMHg5ZDZmLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OTVkZiwgMHhmZmZkLCAweDkyYmIsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDkxN2IsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk1 ZjksCi0gICAgMHg4ZWNjLCAweDlkODAsIDB4ZmZmZCwgMHg5ZDdlLCAweGZmZmQsIDB4ZmZmZCwg MHg5MDk4LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGM5ZSwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg5ZDc4LCAweDhmYjcsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTNlNiwg MHg5NDUwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5ZDc2LCAweGZm ZmQsIDB4ZmZmZCwgMHg5MTdjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHg4ZWY2LCAweDlkN2IsIDB4ZmZmZCwgMHhmZmZkLCAweDhmYjYsIDB4ZmZmZCwgMHg5ZDc1LCAw eDlkN2EsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTQ3MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5ZDc0LCAweGZmZmQsCi0gICAgMHg4YzQwLCAweGZmZmQsIDB4ZmZmZCwgMHg4YTdjLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlkN2MsCi0gICAgMHg5N2E5LCAweDhkY2MsIDB4OTI1 NCwgMHg5ZDc5LCAweGZmZmQsIDB4OTBkYSwgMHhmZmZkLCAweDhkNTQsCi0gICAgMHg5MDg0LCAw eDg5ODYsIDB4OTE1YiwgMHg5ZDc3LCAweDhiNjQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4OGM2NiwgMHhmZmZkLCAweDkyY2QsIDB4OWQ3ZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MTdlLCAweGZmZmQsIDB4 ZmZmZCwgMHg5ZDgxLCAweGZmZmQsCi0gICAgMHg5ZDgzLCAweGZmZmQsIDB4ZmZmZCwgMHg5MWI1 LCAweDlkODksIDB4ZmZmZCwgMHg5ZDg0LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDlkODYsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk1NjAsCi0gICAgMHg5MmYx LCAweGZmZmQsIDB4OWQ4NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NzRiLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTc2NywgMHg4YWI3LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDg4YWMsIDB4ZmZmZCwgMHg5ZDg1LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDlkODIsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YWY2LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDg5ODcsIDB4ZmZmZCwgMHg5ZDg4LCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4OTc2OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5ZDhjLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OTFiOSwgMHhmZmZkLCAweDlkOTMsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5ZDhkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZDhhLCAweDlkOTEsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlkNzIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZDhlLCAw eGZmZmQsCi0gICAgMHg5ZDkyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk0YzAsIDB4OTM4 YiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDlkOGIsIDB4ZmZmZCwgMHg5ZDhmLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGM2 NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZGVmLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4OTBkYiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZDk3 LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5MzQ1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlkOTQsCi0gICAgMHhmZmZk LCAweDk2ODAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlkOTUs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 ZDk2LCAweGZmZmQsCi0gICAgMHg5NmNjLCAweGZmZmQsIDB4OTBhMCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4 YzgyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5ZDlkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4OGU1NCwgMHg5ZDlhLCAweGZmZmQsIDB4OWQ5OSwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTQ1MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5M2IzLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkz NTAsIDB4OWQ5YiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDlkOWMsIDB4ZmZmZCwg MHg5NThmLCAweGZmZmQsIDB4OTQ2NCwgMHg4ZTQyLCAweGZmZmQsCi0gICAgMHg5MGVmLCAweGZm ZmQsIDB4OTY2ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweDhhNjgsIDB4ZmZmZCwgMHg5ZGEzLCAweDlkOWUsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweDk3NjksIDB4OWRhNSwgMHhmZmZkLCAweGZmZmQsIDB4OWRh MSwgMHhmZmZkLCAweDlkYTIsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OTE4MCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWRh MCwgMHhmZmZkLCAweDlkNWUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5ZGE0LCAw eGZmZmQsIDB4OWQ5ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHg5ZGE5LCAweDlkYWEsIDB4OTM0NiwgMHg5ZGFjLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZTQz LCAweDlkYTcsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhiNWIsIDB4 ZmZmZCwgMHhmZmZkLCAweDlkYWQsCi0gICAgMHhmZmZkLCAweDlkYTYsIDB4OWRiMSwgMHhmZmZk LCAweDlkYjAsIDB4ZmZmZCwgMHg5ZGFmLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 OWRiMiwgMHhmZmZkLCAweGZmZmQsIDB4OWRiNCwgMHg4ZmVmLCAweGZmZmQsCi0gICAgMHg5ZGIz LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWRiNywgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5ZGI1LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDlkYjYsIDB4OWQ5MCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5ZGI5LCAweDlkYjgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4OWQ5OCwgMHg5ZGJhLCAweDlkYWUsIDB4ZmZmZCwgMHhmZmZkLCAweDhl NzgsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlkYmIsIDB4OWRiYywg MHg5ZGJlLCAweDlkYmQsCi0gICAgMHg5ZGJmLCAweDg5ZmMsIDB4ZmZmZCwgMHg4ZDU1LCAweGZm ZmQsIDB4ZmZmZCwgMHg5NWZhLCAweDkwYWQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OGNjYywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5ZGMxLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWRjNCwgMHhmZmZkLCAweDk1NzEsCi0gICAg MHhmZmZkLCAweDhiN2UsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWRjMywgMHg5ZGMyLCAw eDk0NzMsCi0gICAgMHg5ZGM1LCAweDhiYjMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWRj NywgMHg5ZGM2LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGFiOCwgMHg4ZTU1LCAw eGZmZmQsIDB4ZmZmZCwgMHg5M2Q2LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDhjNjgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5MDk0LCAw eGZmZmQsIDB4OWRjOCwgMHhmZmZkLCAweDkwYWUsIDB4OTM0NywgMHhmZmZkLCAweDk1N2UsCi0g ICAgMHg5ZGM5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWRjYSwgMHg5ZGNiLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDk1YjYsCi0gICAgMHg5YjdjLCAweDkwYzQsIDB4ZmZmZCwgMHhmZmZk LCAweDk1NmIsIDB4ZmZmZCwgMHg4ZGQ2LCAweGZmZmQsCi0gICAgMHg5NGUzLCAweDk0YzEsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkzNmMsCi0gICAgMHhmZmZk LCAweDk3YmYsIDB4ZmZmZCwgMHg5ZGNkLCAweDhlY2UsIDB4ZmZmZCwgMHhmZmZkLCAweDlkY2Us Ci0gICAgMHhmZmZkLCAweDg4YjQsIDB4ZmZmZCwgMHhmZmZkLCAweDhiZDIsIDB4OTBjYiwgMHhm ZmZkLCAweDk1ODAsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZGNmLCAweDhlNjEs IDB4OTI2NiwgMHhmZmZkLCAweDhlN2EsCi0gICAgMHg5MDU2LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlkZDAsCi0gICAgMHhmZmZkLCAweDk1ZmIs IDB4ZmZmZCwgMHhmZmZkLCAweDg5OTcsIDB4OGU3YiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweDlkZDMsIDB4ZmZmZCwgMHg5ZGQxLCAweDlkZDQsIDB4OTdiNywgMHg5ZGQyLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MGY5LCAweDlkZDUsIDB4ZmZmZCwg MHhmZmZkLCAweDkxYjAsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWRkNiwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhhZjgsCi0gICAgMHhmZmZkLCAweDlkZDgsIDB4ZmZmZCwg MHg5ZGQ3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5ZGQ5LCAweDlk ZGEsIDB4OGFmOSwgMHhmZmZkLCAweGZmZmQsIDB4OTNmYSwgMHg5MjU1LCAweDhiOGMsCi0gICAg MHg4ZTdjLCAweDkxODEsIDB4ZmZmZCwgMHhmZmZkLCAweDhmN2IsIDB4ODhhZSwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweDlkZGIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ODlhMCwgMHg5ZGRmLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGQ1 NiwgMHg5ZGRlLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZGE5LCAweDhmYjgsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4OWRkZCwgMHhmZmZkLCAweDhmYjksIDB4ZmZmZCwgMHg5NmJlLCAweDhkYTgsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OGQ1LCAweDkwY2MsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlkZTQsIDB4 ZmZmZCwgMHhmZmZkLCAweDkwYWYsCi0gICAgMHg4OTY2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OGY3NCwgMHhmZmZkLCAweDk2ODYsCi0gICAgMHg4ZGYwLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGZiYSwgMHhmZmZkLCAweDkwYTUsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlkZTMsIDB4OWRlMSwgMHg5ZGUyLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkyOGIsIDB4ZmZmZCwgMHhm ZmZkLCAweDllNDUsCi0gICAgMHhmZmZkLCAweDlkZTgsIDB4OGU5ZSwgMHg4ZDU3LCAweDlkZTYs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDlkZTcsIDB4ZmZmZCwgMHg5 MDU3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlkZTUsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4OGU0ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWRlYSwgMHg5ZGU5LCAweDlk ZWUsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWRlZiwgMHhmZmZkLCAweDlkZWIsIDB4ZmZmZCwg MHg4YTQxLCAweDlkZWMsCi0gICAgMHg5ZGVkLCAweDk0ZDMsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg5NTgxLCAweDhjNjksCi0gICAgMHg5ZGYwLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDkwYjAsIDB4ZmZmZCwgMHg4ZmJiLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4OTI3MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweDhiYzUsIDB4ZmZmZCwgMHg5ZGYxLCAweDlkZjUsIDB4ZmZmZCwgMHhmZmZkLCAw eDg5YzksCi0gICAgMHg5ZGYyLCAweDlkZjQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5ZGYzLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhmOGIsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5MjY3LCAweDg4YzMsCi0gICAgMHg5ZGY2LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OWRmNywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4OTJhOCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5N2VmLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZTYyLCAweGZmZmQsIDB4ZmZmZCwgMHg5NWU5 LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk2NWMsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5ZTQxLCAweDlkZjksIDB4ZmZmZCwgMHhmZmZk LCAweDlkZmMsIDB4ZmZmZCwgMHg5ZGZiLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDlkZjgsIDB4 ZmZmZCwgMHhmZmZkLCAweDllNDAsIDB4ZmZmZCwgMHhmZmZkLCAweDkzZGMsCi0gICAgMHhmZmZk LCAweDlkZmEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 ZTQyLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhmOGMsIDB4OWU0MywgMHhmZmZkLCAweDk3NmEs IDB4OTQ5OCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5ZTQ0LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZTQ2LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDllNDcs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5 ZTQ4LCAweGZmZmQsIDB4OGJjOCwgMHg4OTY3LCAweDhkNTgsIDB4OWU0OSwgMHhmZmZkLCAweDll NGEsCi0gICAgMHg4ZjkxLCAweDkxODIsIDB4ZmZmZCwgMHhmZmZkLCAweDk5ZDYsIDB4OTE1ZCwg MHg5MTVjLCAweDkxZDYsCi0gICAgMHg4ZGM1LCAweGZmZmQsIDB4ZmZmZCwgMHg5OGYwLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4YzhlLCAweDk3NGMsIDB4ZmZmZCwg MHg5NWZjLCAweGZmZmQsIDB4OTU5ZSwgMHhmZmZkLCAweDllNGIsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhkZjEsIDB4OTJiZCwgMHg5ZTRjLCAweDk4NGUsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NjVkLCAweGZmZmQsIDB4OTJhOSwgMHg5ZTRkLCAw eDhhZmEsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5ZTRlLCAweDllNGYsCi0gICAgMHg5NmQ4LCAweGZmZmQsIDB4OTZhMiwgMHg5Njk2LCAw eDk2N2IsIDB4OGU0NCwgMHg5ZTUxLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhlZTksIDB4ZmZm ZCwgMHhmZmZkLCAweDk2NzAsIDB4ZmZmZCwgMHg5ZTUzLCAweDllNTYsCi0gICAgMHg5ZTU1LCAw eGZmZmQsIDB4OGFmNywgMHhmZmZkLCAweGZmZmQsIDB4OGI4MCwgMHhmZmZkLCAweDllNTIsCi0g ICAgMHhmZmZkLCAweDllNTQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZTU3 LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDkwOTksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg5NzliLCAweDg4YzcsCi0gICAgMHg4ZGRlLCAweDkxYmEsIDB4ZmZmZCwgMHg4ZWRi LCAweGZmZmQsIDB4ZmZmZCwgMHg4ZmYxLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDllNWEsIDB4 ZmZmZCwgMHhmZmZkLCAweDkzNmQsIDB4ZmZmZCwgMHg5ZTU4LCAweDkxYTksCi0gICAgMHg5ZTU5 LCAweDhmZjAsIDB4OTZkYiwgMHg5ZTViLCAweDllNWMsIDB4OTc4OCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWU2MSwgMHhmZmZkLCAweGZmZmQsIDB4OGQ1OSwgMHhm ZmZkLCAweDk0NzQsCi0gICAgMHg5ZTVlLCAweDkzOGMsIDB4OWRkYywgMHg5ZGUwLCAweGZmZmQs IDB4OGI2ZSwgMHhmZmZkLCAweDk0NjYsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDllNjAsIDB4ZmZmZCwgMHg4ZmJjLCAweDk0YzIsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWU2NiwgMHhmZmZkLCAweDk0ZjgsCi0gICAgMHhm ZmZkLCAweDllNWQsIDB4ZmZmZCwgMHg5ZTYzLCAweDllNjIsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHg5MGNkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTY4ZCwg MHhmZmZkLCAweDk3ZDEsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTY4NywgMHhmZmZkLCAweDg5 Y2EsIDB4OGU3ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5ODY3LCAweDllNjUsIDB4OTA5NSwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZTY0LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDll NWYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhjY2QsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZTZiLCAweDllNjksIDB4ZmZmZCwgMHg4OWNiLCAw eDllNjcsCi0gICAgMHg5ZTZkLCAweDllNzMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDkxYzYsIDB4ZmZmZCwgMHhmZmZkLCAw eDk1YmYsIDB4ZmZmZCwgMHg5ZTc1LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTU0 MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZTc0LCAweDk0OTAsCi0gICAgMHg5NjVlLCAw eDhhYjksIDB4ZmZmZCwgMHg5MGY1LCAweDhmNWYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHg5MmQxLCAweGZmZmQsIDB4OTc0ZCwgMHhmZmZkLCAweGZmZmQsIDB4OWU3MCwgMHg5ZTZm LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWU3MSwgMHhmZmZkLCAweDllNmUsIDB4 ZmZmZCwgMHhmZmZkLCAweDllNzYsCi0gICAgMHhmZmZkLCAweDllNmMsIDB4ZmZmZCwgMHhmZmZk LCAweDllNmEsIDB4ZmZmZCwgMHg5ZTcyLCAweDllNjgsCi0gICAgMHhmZmZkLCAweDkyOGMsIDB4 ZmZmZCwgMHg5NmY2LCAweDhlYzQsIDB4OGRmMiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg4ZGI4LCAweGZmZmQsIDB4ZmZmZCwgMHg5NjhmLCAweDhhNjAs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTJjYywgMHg5M2M4LCAweDg5NjgsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 MGYwLCAweGZmZmQsIDB4ZmZmZCwgMHg5MGIyLCAweDhjNDksCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZTc4LCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweDhkNWEsIDB4OGE5YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweDllN2EsIDB4OGE5NCwgMHg5ZTgxLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWU3ZCwgMHhmZmZkLCAweDkw ZjEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4YTZhLCAweDhkYWEsIDB4ZmZmZCwg MHhmZmZkLCAweDhhNjksIDB4OGRjZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5ZTdiLCAweDhj ODUsIDB4OGM2YSwgMHg5MzhkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZTc5LCAweGZmZmQsCi0gICAg MHg4OGM0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWU3YywgMHg5ZTdlLCAw eGZmZmQsCi0gICAgMHg4YmNiLCAweDhjNGIsIDB4ZmZmZCwgMHg4YWJhLCAweDhiNmEsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDllODIsIDB4ZmZmZCwgMHhmZmZkLCAw eDhkZjcsIDB4OTY5MSwgMHhmZmZkLCAweDhlNTYsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5ZTgzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk1NGYsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDllOGYsIDB4ZmZmZCwgMHg4OWIx LCAweDllODQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg5ZTk1LCAweDllODUsCi0gICAgMHhmZmZkLCAweDk3YzAsIDB4ZmZmZCwgMHg5ZThj LCAweGZmZmQsIDB4OTQ3ZSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWU5NCwgMHhmZmZkLCAweDllODcsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg4OGIyLCAweDllODksIDB4ZmZmZCwgMHhmZmZkLCAweDhkNWIs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZThiLCAweGZmZmQsIDB4OWU4YSwgMHhm ZmZkLCAweDllODYsCi0gICAgMHg5ZTkxLCAweGZmZmQsIDB4OGZiZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5YWViLCAweDhjZTYsCi0gICAgMHg5NzljLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OWU4OCwgMHhmZmZkLCAweDkyZjIsCi0gICAgMHg4YTQyLCAweDhkYWIs IDB4ZmZmZCwgMHg5ZTgwLCAweGZmZmQsIDB4OWU5MCwgMHg4YTgxLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweDllOGUsIDB4OWU5MiwgMHhmZmZkLCAweDkzOGUsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhhZmMsIDB4ZmZmZCwg MHg5ZWIwLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk2YzcsIDB4OWU5NywgMHg4YWZiLCAweGZm ZmQsIDB4OWU5ZSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTY1Ziwg MHhmZmZkLCAweDllOWYsIDB4OWVhMSwgMHhmZmZkLCAweDllYTUsCi0gICAgMHg5ZTk5LCAweGZm ZmQsIDB4OTI0OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkzOGYsCi0gICAg MHg5ZWE5LCAweDllOWMsIDB4ZmZmZCwgMHg5ZWE2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDllYTAsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5MDU4LCAweDllYWEsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTBiMSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDllYTgsIDB4OGFi YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5ODZmLCAw eDllOTYsIDB4ZmZmZCwgMHhmZmZkLCAweDllYTQsIDB4ODhkNiwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHg5ZTk4LCAweGZmZmQsIDB4ZmZmZCwgMHg5NmI4LCAweDllOWQsIDB4OTA0MSwgMHg5MmM1 LCAweDllOTMsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWVhMywgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDkwOWEsIDB4OWVhZCwgMHg4YTkx LCAweDhjOWYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDllYWYsIDB4 OWU5YSwgMHg5ZWFlLCAweGZmZmQsIDB4OWVhNywgMHg5ZTliLCAweGZmZmQsCi0gICAgMHg5ZWFi LCAweGZmZmQsIDB4OWVhYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHg5ZWJkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkzY2MsIDB4ZmZmZCwgMHg5 ZWEyLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDllYjksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OWViYiwgMHhmZmZkLCAweDkyZDYsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4OTc2YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NTk2LCAweDllYjYsIDB4OTFjOCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweDllYmMsIDB4OTE1ZSwgMHhmZmZkLCAweDllYjMsIDB4OWVjMCwg MHg5ZWJmLCAweGZmZmQsCi0gICAgMHg5M2VkLCAweDllYmUsIDB4OTNlOCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWVjMiwg MHg5ZWI1LCAweGZmZmQsIDB4OGJjNiwgMHg5ZWI4LCAweDhmN2MsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg5NDgwLCAweDllYmEsIDB4OGJjOSwgMHhmZmZkLCAweDllYjIsCi0gICAg MHg5ZWI0LCAweDllYjEsIDB4ZmZmZCwgMHhmZmZkLCAweDk4NGYsIDB4OGE3OSwgMHg5ZWI3LCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweDllYzEsIDB4OGE1NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGRlNSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg4OTdjLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDllZDIsIDB4ZmZm ZCwgMHhmZmZkLCAweDk4NTAsIDB4OWVkNSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5MDU5LCAweDllZDQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHg5ZWQzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDllZDAsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg5ZWM0LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDllZTEsIDB4OWVjMywgMHhmZmZk LCAweDllZDYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg5ZWNlLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZWM5LCAweDllYzYsCi0gICAgMHhmZmZk LCAweDllYzcsIDB4ZmZmZCwgMHg5ZWNmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGVhYTAs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWVjYywgMHg4ZDVjLCAweDkyYzYsIDB4OTE4NCwgMHg5 ZWNhLCAweGZmZmQsCi0gICAgMHg5ZWM1LCAweGZmZmQsIDB4ZmZmZCwgMHg5ZWM4LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5NzZjLCAweDk2OGEsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OWVjZCwgMHg5ZWQ3LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDllZGYsCi0gICAgMHg5 ZWQ4LCAweGZmZmQsIDB4ZmZmZCwgMHg5ZWU1LCAweGZmZmQsIDB4OWVlMywgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWVkZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDllZGQsIDB4ZmZmZCwgMHg5MmNlLCAweGZm ZmQsIDB4OTE4NSwgMHhmZmZkLCAweDllZGIsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWVkOSwg MHhmZmZkLCAweGZmZmQsIDB4OWVlMCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4OWVlNiwgMHg5NGYzLCAweDllZWMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4OWVlNywgMHg5ZWVhLCAweDllZTQsIDB4ZmZmZCwgMHhmZmZkLCAw eDkyOTQsCi0gICAgMHhmZmZkLCAweDk1NTcsIDB4ZmZmZCwgMHg5ZWRhLCAweGZmZmQsIDB4ZmZm ZCwgMHg5ZWUyLCAweDhmYmUsCi0gICAgMHhmZmZkLCAweDk2Y2QsIDB4OWVmNiwgMHg5ZWU5LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhjYTAsIDB4ODlh MSwgMHg4YTdlLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZWQxLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGZiZiwgMHg5ZWVlLCAweGZmZmQsCi0g ICAgMHg5ZWY1LCAweDhlZjcsIDB4OGE5MiwgMHhmZmZkLCAweGZmZmQsIDB4OTI0ZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDllZWIsIDB4 ZmZmZCwgMHhmZmZkLCAweDllZjAsCi0gICAgMHg5ZWY0LCAweGZmZmQsIDB4ZmZmZCwgMHg4YmI0 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4YjZi LCAweDllZjIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhiNDAs Ci0gICAgMHhmZmZkLCAweDkzYzksIDB4OWVmMSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 ZWYzLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWVlZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5ZWVmLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhhODAsCi0gICAgMHg5 MjY4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDllZmEsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWVmOCwg MHg4Y2U3LCAweGZmZmQsCi0gICAgMHg5ZWY3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlmNDAsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDllNzcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5ZWY5LCAweGZm ZmQsIDB4OWVmYiwgMHg5ZWZjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4OWY0YiwgMHhmZmZkLCAweDlmNDcsIDB4ZmZmZCwgMHg5ZThkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZjQ2LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5ZjQ1LCAweGZmZmQsIDB4ZmZmZCwgMHg5ZjQyLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDllZTgsIDB4OWY0 NCwgMHg5ZjQzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweDlmNDksIDB4ZmZmZCwgMHg5ODQ1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWY0YywgMHg4YmY5LCAweGZmZmQsIDB4 ZmZmZCwgMHg5ZjQ4LCAweDlmNGEsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5NGE1LCAweGZmZmQsIDB4 OWY0ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWY1MSwgMHg5ZjRlLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk3OTMs IDB4OWY0ZiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWVkYywgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4OWY1MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZjUzLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODk1NCwgMHhmZmZkLCAweDlm NTUsCi0gICAgMHg4Yzg3LCAweDhlOWYsIDB4ZmZmZCwgMHg4YmQzLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDg5YTIsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTc3ZSwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlmNTcsCi0gICAgMHg5ZjU2LCAweDlm NTksIDB4OGI1YywgMHhmZmZkLCAweGZmZmQsIDB4OGJkNCwgMHg4YWJjLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZjVjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDlmNWIsCi0gICAgMHhmZmZkLCAweDlmNWQsIDB4ZmZmZCwgMHhmZmZkLCAweDg5Y2MsIDB4ZmZm ZCwgMHg5MjU2LCAweGZmZmQsCi0gICAgMHg5ZjVlLCAweGZmZmQsIDB4ZmZmZCwgMHg4YWJkLCAw eDlmNjAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDlmNWYsIDB4ZmZm ZCwgMHg5ZjYxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlmNjIsCi0gICAgMHhmZmZkLCAw eDlmNjMsIDB4OGU3ZSwgMHg5MGIzLCAweDhkOWYsIDB4ZmZmZCwgMHg5NTkwLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweDk1ZTAsIDB4OTg2MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDhlOTUsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZGNlLCAweDk3ZjAsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5ZjY0LCAweDlmNjUsIDB4ZmZmZCwgMHg4ZTgw LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlmNjYsCi0gICAgMHg5ZjY3LCAweGZmZmQsIDB4 ZmZmZCwgMHg5ZjY5LCAweDlmNjgsIDB4ZmZmZCwgMHg5Njc3LCAweGZmZmQsCi0gICAgMHhmZmZk LCAweDhmN2QsIDB4OGVlYSwgMHg4ZTYzLCAweGZmZmQsIDB4OWY2YSwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWY2YywgMHg5 MDQyLCAweGZmZmQsCi0gICAgMHg5ZjZiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5ZjZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDlmNmUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4OWY2ZiwgMHg5ZjcwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlmNzEsCi0gICAgMHhm ZmZkLCAweDlmNzMsIDB4OWY3MiwgMHg5Zjc0LCAweDg5YTMsIDB4OTI2OSwgMHhmZmZkLCAweDlm NzUsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGU0NSwgMHg4YTZiLCAweDlmNzYsIDB4ZmZmZCwg MHhmZmZkLCAweDkzNjEsCi0gICAgMHg5YWNhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OGI0MiwgMHg5Zjc3LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5Zjc4LCAweGZmZmQsIDB4OTVlYSwgMHg5Njg4LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4OTNjNSwgMHg5Zjc5LCAweDk0ZTQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHg5NGY5LCAweGZmZmQsIDB4ZmZmZCwgMHg5NmQxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDlmN2EsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZjdjLCAw eDlmN2IsIDB4ZmZmZCwgMHhmZmZkLCAweDlmN2UsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5ZjdkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHg5ZjgxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDhlODEsCi0gICAgMHhmZmZkLCAweDk2YWYsIDB4ZmZmZCwgMHg5Zjgy LCAweDlmODMsIDB4ZmZmZCwgMHhmZmZkLCAweDhiNDMsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg5Zjg0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg5Zjg2LCAweDlmODUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkwODUs IDB4ZmZmZCwgMHhmZmZkLCAweDk1NTgsCi0gICAgMHg4OTY5LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NGMzLCAweGZmZmQsCi0gICAgMHg5MmYzLCAweDhmNjAs IDB4OGI4MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NGM0LCAweGZm ZmQsCi0gICAgMHg4ZWFjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWY4OCwg MHhmZmZkLCAweDhhYmUsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ODk5OCwgMHhmZmZkLCAweGZm ZmQsIDB4OTNmMCwgMHg5Zjg3LCAweDhkNWQsCi0gICAgMHg5MjcyLCAweGZmZmQsIDB4OWY4OSwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5ZjkxLCAweGZm ZmQsIDB4OWY4YSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHg5MWJmLCAweGZmZmQsIDB4OGI4MiwgMHg5ZjkyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGM4OCwgMHhmZmZkLCAweGZmZmQsIDB4OGI0 NCwgMHg5ZjkwLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDlmOGUsIDB4OWY4YiwgMHg5NzgwLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5MmJlLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDkzZDcsIDB4OWY4YywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5Zjk0LCAw eGZmZmQsIDB4OWY5MywgMHg4YzQyLCAweGZmZmQsIDB4ZmZmZCwgMHg4OWFiLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweDhkYjksIDB4OWY4ZCwgMHg5ZjhmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk2NzYsIDB4OTFmMiwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Njk3 LCAweGZmZmQsIDB4ZmZmZCwgMHg5ZjljLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDlmOWQsIDB4 ZmZmZCwgMHg4OWNkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5NWE2 LCAweDk2ZmIsIDB4OWY5ZiwgMHg4ZWExLCAweDhmYzAsIDB4OWY5OCwgMHg5ZjllLCAweDg5ODgs Ci0gICAgMHhmZmZkLCAweDhiYjUsIDB4ZmZmZCwgMHhmZmZkLCAweDlmOTUsIDB4OWY5YSwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDkwZjIsIDB4OTQ5MSwgMHhmZmZkLCAweDk0ZTUs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 Zjk3LCAweGZmZmQsIDB4OTY0MCwgMHhmZmZkLCAweDlmOTksCi0gICAgMHhmZmZkLCAweDlmYTIs IDB4ZmZmZCwgMHg5ZmEwLCAweGZmZmQsIDB4OWY5YiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweDk2NDEsIDB4OTQ2NywgMHg4YjgzLCAweGZmZmQsIDB4OTM0NCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHg5MjhkLCAweGZmZmQsIDB4OWZhMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDlmYTEsCi0gICAgMHg5MWQ3LCAweDlmOTYsIDB4ZmZmZCwgMHg4OTZhLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NzZkLCAweDlmYWUsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWZhZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDkwZjQsCi0gICAgMHhmZmZkLCAweDlmYWEsIDB4ZmZmZCwgMHg5NzhjLCAw eGZmZmQsIDB4ZmZmZCwgMHg5M2I0LCAweDlmYTQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTJjMywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eDg5NmIsIDB4OGQ1ZSwgMHg5ZmE3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4OGY0NiwgMHg5ZmFjLCAweGZmZmQsIDB4OWZhYiwgMHg5ZmE2 LCAweGZmZmQsCi0gICAgMHg5ZmE5LCAweGZmZmQsIDB4ZmZmZCwgMHg4YTg4LCAweGZmZmQsIDB4 OWZhOCwgMHg5NDY4LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk3YWMsIDB4ZmZmZCwgMHhmZmZk LCAweDhmZjIsIDB4OTBmMywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweDlmYjQsIDB4OWZiMiwgMHhmZmZkLCAweDk1NmMsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZmFmLCAweDlmYjEs IDB4ZmZmZCwgMHg4OTU5LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhkNWYsIDB4OTg1MSwgMHhm ZmZkLCAweDhhNWMsIDB4ZmZmZCwgMHg5NTgyLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDk3ODEsIDB4ZmZmZCwgMHhmZmZkLCAweDhhNDMsCi0gICAgMHg5 MDVhLCAweDlmYjMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWZiOCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHg4ZmMxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk3 NGYsIDB4ZmZmZCwgMHg5ZmI1LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5ZmIwLCAweGZmZmQsIDB4OWZiNiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk3 ZGMsIDB4ZmZmZCwgMHg5MzkzLCAweDkzYzAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDhhNTUsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ODk3NCwgMHhmZmZkLCAw eGZmZmQsIDB4OWZiYywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5ZmJmLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDk3YzEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5Nzg0LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWZjNiwgMHg5ZmMwLCAweDlmYmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5N2QyLCAweDlmYzMsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhmNjksIDB4OWZjNSwgMHhmZmZkLCAweGZmZmQsIDB4 OWZjYSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5MzkxLCAweDlmYzgsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg5ZmMyLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDkyNTcsIDB4 ZmZmZCwgMHhmZmZkLCAweDlmYzksIDB4ZmZmZCwgMHg5ZmJlLCAweGZmZmQsCi0gICAgMHg5ZmM0 LCAweGZmZmQsIDB4OWZjYiwgMHg4OGZhLCAweDlmYzEsIDB4ZmZmZCwgMHg5ZmNjLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweDkwNWIsIDB4ZmZmZCwgMHg4ZjdlLCAweGZmZmQsIDB4OTVhMywgMHhm ZmZkLCAweDhkYWMsCi0gICAgMHhmZmZkLCAweDlmYjksIDB4OWZjNywgMHg5MzU5LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OTBiNCwgMHhmZmZkLCAweDhhODksCi0gICAgMHg4ZGNmLCAweDhmYzIs IDB4OWZiYiwgMHg4ZjYxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YzZiLCAweGZmZmQsIDB4OWZiYSwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweDlmZDAsIDB4OGY4ZCwgMHg4Y2I4LCAweGZmZmQsIDB4OWZkZiwg MHhmZmZkLCAweDlmZDksCi0gICAgMHg4Yjk0LCAweDkzNmUsIDB4ZmZmZCwgMHg5ZmQ0LCAweDlm ZGQsIDB4ODhhZCwgMHg4OTUxLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDg5YjcsIDB4ZmZmZCwg MHg5ZmQ2LCAweDkxYWEsIDB4OWZjZCwgMHg5ZmNmLCAweDhkNjAsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHg5ZmUwLCAweGZmZmQsIDB4OWZkYiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZmQzLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZmRhLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTZhOSwgMHhmZmZkLCAw eGZmZmQsIDB4OWZkOCwgMHg5ZmRjLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4Y2NlLCAweGZmZmQsCi0gICAgMHg4ZmMzLCAw eGZmZmQsIDB4ZmZmZCwgMHg5MjU4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlmZDIsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDk3NGUsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZmQ1LCAweGZmZmQsIDB4 ZmZmZCwgMHg5ZmNlLCAweDkzOTIsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWZkMSwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg5ZmQ3LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ODcwLCAweDhlYmMsCi0gICAgMHg5Njll LCAweGZmZmQsIDB4OWZlMSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk0YWMsIDB4ZmZmZCwgMHhm ZmZkLCAweDlmZWQsCi0gICAgMHg4Y2I5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg4ZjgwLCAweGZmZmQsCi0gICAgMHg5ZmUzLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDk3YWQsIDB4OGQ2MSwgMHhmZmZkLCAweDlmZjAsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ODhlYywgMHhmZmZkLCAweGZmZmQsIDB4OWZlZSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4OWZlMiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlm ZTgsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWZlYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5NzZlLCAweDlmZTUsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTM0ZCwgMHhmZmZkLCAweGZm ZmQsIDB4OWZlNywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWZlZiwg MHhmZmZkLCAweDlmZTksIDB4OTZjNSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDlm ZTQsIDB4ZmZmZCwgMHg4ZWEwLCAweDlmZmMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweDhhOGEsIDB4ZmZmZCwgMHg5ZmU2LCAweDlmZWIsIDB4OWZlYywgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTFl YSwgMHg5MWQ4LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDlmZjQsIDB4ZmZmZCwgMHhmZmZkLCAweDlmZmEsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4OWZmOCwgMHhmZmZkLCAweDkzNDgsIDB4ZmZmZCwgMHhmZmZkLCAweGUwNDIsCi0g ICAgMHg5ZmY1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZmY2 LCAweDlmZGUsCi0gICAgMHhmZmZkLCAweDhiOTksIDB4OTU1OSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg4ZWJkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhkOTcsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk4NTIsCi0gICAgMHhmZmZkLCAweDlmZjIsIDB4 ZmZmZCwgMHhlMDQxLCAweDg5ODksIDB4OTE4NiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHg5NDk5LCAweGZmZmQsIDB4OGFiZiwgMHg5N2Y4LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NjlmLCAweDkyZDAs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDlmZjksIDB4OWZmYiwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5MTUxLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMDQwLCAweDlmZjcsCi0gICAgMHhm ZmZkLCAweDlmZjEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGFjMSwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhj ODksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlMDRlLCAweGZmZmQsIDB4ZmZmZCwg MHhlMDQ5LCAweDkwZjYsIDB4ZmZmZCwgMHhmZmZkLCAweDhhODMsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhmODEsIDB4ZmZmZCwgMHhlMDUyLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTA0YiwgMHg5MmFhLCAw eGUwNDgsCi0gICAgMHg5MmQ3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwNmIsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlMDQ1LCAweGZmZmQsIDB4ZTA0NCwgMHhmZmZkLCAw eGUwNGQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlMDQ3LCAweGUwNDYsIDB4ZTA0 YywgMHhmZmZkLCAweDkwOWYsIDB4ZmZmZCwgMHhlMDQzLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMDRmLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGUwNTAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDhhYzAsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUwNTUsIDB4ZmZmZCwgMHhlMDU0 LCAweGUwNTYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZTA1OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweDkzNjIsIDB4ZmZmZCwgMHhlMDUzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGUwNTcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHg4YzgzLCAweDkxZjcsIDB4ZTA1MSwgMHg5NDVhLCAweGZmZmQs IDB4ZmZmZCwgMHhlMDU4LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGUwNWQsIDB4ZTA1YiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhl MDVlLCAweGZmZmQsIDB4ZmZmZCwgMHhlMDYxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUw NWEsCi0gICAgMHg4ZDhhLCAweDk0NDcsIDB4ZmZmZCwgMHhmZmZkLCAweDlmYjcsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Nzk0LCAweGUw NWMsIDB4ZmZmZCwgMHhlMDYwLCAweDkxZjMsCi0gICAgMHhmZmZkLCAweGUwNWYsIDB4ZmZmZCwg MHhlMDRhLCAweGZmZmQsIDB4ZmZmZCwgMHhlODg5LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZTA2NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMDY4LCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGUwNjYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGUwNjIsIDB4ZmZmZCwgMHhlMDYzLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGUwNjcsCi0gICAgMHhmZmZkLCAweGUwNjUsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OTU2ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlMDZkLCAweGZmZmQsIDB4ZTA2 YSwgMHhlMDY5LCAweGZmZmQsIDB4ZTA2YywgMHg5M2QyLCAweGUwNmUsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Mjk1LCAweDkxZWIsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkwYTMsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhlMDZmLCAweGZmZmQsIDB4ZTA3MSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhlMDcwLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlmZjMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGUwNzIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHg5M2U1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl MDczLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg4OWNlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkzOTQsCi0gICAgMHg4 YTQ0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHg4Yjg0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhlZGMsIDB4OGRkMCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk4NDYsIDB4OTA4Niwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OThhLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZTA3NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGUwNzQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGUwNzgsIDB4OTI1OSwgMHhlMDdiLCAweGUwNzYsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhlMDdhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlMDc5LCAw eDkzNWYsIDB4ODhkNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHg5N2YzLCAweGZmZmQsIDB4ZmZmZCwgMHhlMDdkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDg5NDcsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUwODAsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTA3ZSwgMHhmZmZkLCAweGUwN2MsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUwNzcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk2NDIsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZTA4MiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGUwODEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg5OGIsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUwODQsIDB4OTViMCwgMHhmZmZkLCAweGUw ODMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk2YjMsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZmM1LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MTUyLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhmYzQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk3ZjksIDB4ZmZm ZCwgMHhmZmZkLCAweGUwOGEsIDB4ZmZmZCwgMHg5MGY3LCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTA4NiwgMHhlMDhiLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweDg5OGMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTA4OSwgMHhmZmZkLCAweDk0ODEsIDB4 ZTA4NSwgMHhlMDg4LCAweDhmYzYsCi0gICAgMHhmZmZkLCAweDk0Y2YsIDB4ZmZmZCwgMHhmZmZk LCAweGUwOGMsIDB4ZmZmZCwgMHg4ZWNmLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTBmOCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwOGYsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhlMDg3LCAweGZmZmQsIDB4OGM0NiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGUwOGQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDk3NmYsIDB4ZTA5MCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGVhYTQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhmNmUsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhlMDkxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwOTIsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk0NGQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUwOTQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMDk1LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg5NDUyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHg5Mzk1LCAweGUwOTcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMDk5LCAw eGZmZmQsCi0gICAgMHg5N2QzLCAweGZmZmQsIDB4ZTA5NiwgMHhmZmZkLCAweGUwOTgsIDB4ODk4 ZCwgMHhmZmZkLCAweGUwOTMsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlhN2EsCi0gICAgMHhlMDlhLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTE4NywgMHg4ZTU3LCAweGUwOWMsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwOWIsIDB4OTA0MywgMHg5OWQ3LCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTA5ZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUwOWYsIDB4ZmZmZCwgMHhlMDhlLCAweGUwOWUsIDB4 ZmZmZCwgMHhmZmZkLCAweGUwYTAsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg5NDlhLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTBhMSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlMGEy LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMGEzLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlMGE0LCAweGZmZmQsIDB4OTJkYywgMHhm ZmZkLCAweGUwYTYsIDB4ZTBhNSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlMGE3LCAweGZmZmQs IDB4ZTBhOCwgMHhmZmZkLCAweGZmZmQsIDB4OGVkZCwgMHg5NTgzLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4OTZlYSwgMHhlMGE5LCAweGUwYWEsIDB4OTE3NSwgMHg4ZWEyLCAweGUw YWIsCi0gICAgMHhlMGFjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlMGFkLCAweDk1ZDAsCi0gICAgMHg5NGM1LCAweGZmZmQsIDB4ZmZmZCwgMHhlMGFlLCAweDk0 NzYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTJhYiwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlMGFmLCAweDg5 ZTUsIDB4ZmZmZCwgMHg4YjhkLCAweGZmZmQsIDB4OTZjNCwgMHhmZmZkLCAweDk2YjQsCi0gICAg MHhmZmZkLCAweDg5YjIsIDB4OTg1MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDk2NzEsCi0gICAgMHhmZmZkLCAweDk1YTgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTBiNSwgMHhmZmZkLCAw eGUwYjAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDkzYzEsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OGNhMSwgMHhlMGIxLCAweGZmZmQsCi0gICAgMHg4ZGQyLCAw eGUwYjMsIDB4ZTBiMiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwYjQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTBiNSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhlMGI2LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4YjVkLCAweGZmZmQsIDB4 ZTBiNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwYjgsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhjYTIsIDB4ZmZmZCwgMHhmZmZkLCAweDk0YzYs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTBiYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4 ZmYzLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUwYjksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGJiNiwgMHhl MGJiLCAweGUwYmQsIDB4ZmZmZCwgMHhlMGJjLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMGJlLCAweGZmZmQsCi0gICAgMHg4 Y2NmLCAweGZmZmQsIDB4ZTBiZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhi ZTcsCi0gICAgMHhmZmZkLCAweDkxNWYsIDB4ZmZmZCwgMHg4ZDlkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhlMGMxLCAweGUwYzIsIDB4ZTBjMCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhlZWIsIDB4ZmZmZCwg MHhmZmZkLCAweDkzYzYsIDB4OGJiNywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwYzQsCi0gICAg MHg5MjRiLCAweGUwYzMsIDB4ZmZmZCwgMHhmZmZkLCAweDk4NTQsIDB4OTQ4MiwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTBjNywgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMGM5LCAweGUwYzYsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5NmQyLCAweGUwYzgsIDB4ZTBjYSwgMHhmZmZkLCAweDk3YzIsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTBjZSwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUwY2QsIDB4OTI5NiwgMHg5NDRjLCAweGZmZmQsIDB4 ZmZmZCwgMHg4Y2EzLCAweGUwY2MsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGUwY2IsIDB4ZmZmZCwgMHg5NzUwLCAweDk3NTEsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMGNmLCAweDg5OGUsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhkOTYsIDB4OGU4MiwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl MGQwLCAweGUwZDEsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGUwZDMsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg4ZjYyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhl MGQ1LCAweGZmZmQsIDB4ZTBkNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhlMGQ2LCAweGZmZmQsIDB4OGE2YywgMHhmZmZkLCAweGZmZmQsIDB4ZTBkOCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhlMGQ3LCAweGZmZmQsIDB4ZTBkYSwgMHhlMGQ5LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDhjYmEsIDB4ZmZmZCwgMHhmZmZkLCAweDk3YTYsCi0gICAgMHhmZmZkLCAweDhi Y2EsIDB4ZmZmZCwgMHg4OWE0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YmU4LCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhhZGYsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4OTdlNiwgMHhlMGRjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMGRlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhlMGRmLCAweGZmZmQsIDB4ODljZiwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlMGRiLCAweGZmZmQsIDB4OGU1OCwgMHhmZmZk LCAweGZmZmQsIDB4OTJiZiwgMHhlMGRkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMGUyLCAweGZmZmQs Ci0gICAgMHg4ZWVjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTBlMCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGM1ZCwgMHhmZmZkLCAweGZmZmQs IDB4OTRjNywgMHhlMGUxLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUwZmMsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlMGU3LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4Y2JiLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4Yjg1LCAweGZmZmQsIDB4ZTBlNCwgMHg5NzlkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweDk3YWUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4OTFmNCwgMHhmZmZkLCAweGZmZmQsIDB4ZTBlNiwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTBlOCwgMHg5N2Q0LCAweDhiZDUsIDB4OTRm YSwgMHg5NDY5LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTBlOSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwZWIsCi0gICAgMHhmZmZkLCAweGUwZWUsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTBlYSwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUwZWQsIDB4OGNlOCwgMHg4OTZjLCAweGUwZWYsIDB4 ZmZmZCwgMHg5MDkwLCAweGUwZWMsCi0gICAgMHg5N2RhLCAweGZmZmQsIDB4ZmZmZCwgMHhlMGYy LCAweGVhYTIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUwZjAsIDB4 ZTBmMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwZTUsCi0gICAgMHhlMGYx LCAweGZmZmQsIDB4ZmZmZCwgMHg4ZGJhLCAweGZmZmQsIDB4ZmZmZCwgMHhlMGY0LCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl MGY1LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NzllLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl MGY2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMGY3LCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTBlMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGUwZjgsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4YWMyLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGVhMywgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTBmOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGUwZmEsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGUwZmIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDg5NWEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlMTQwLCAw eGZmZmQsIDB4OTU1YSwgMHhlMTQxLCAweGZmZmQsIDB4ZmZmZCwgMHg4YWEyLCAweGUxNDIsCi0g ICAgMHhmZmZkLCAweGUxNDMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMTQ0 LCAweGZmZmQsCi0gICAgMHhlMTQ2LCAweGUxNDcsIDB4ZTE0NSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg5NTcyLCAweGUxNDksCi0gICAgMHhlMTQ4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhlMTRiLCAweGUxNGEsIDB4ZTE0YywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUxNGQsIDB4ZTE0ZiwgMHhlMTRlLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweDhkOTksIDB4ZmZmZCwgMHhlMTUxLCAweGZmZmQsIDB4ZTE1MCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHg4YWMzLCAweGZmZmQsIDB4OTA3MiwgMHhmZmZkLCAweDkzNWIs IDB4ZmZmZCwgMHhlMTUyLCAweDkwYjYsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4 ZTU5LCAweGZmZmQsIDB4ODk5OSwgMHhlMTUzLCAweGZmZmQsCi0gICAgMHg5NzcwLCAweGZmZmQs IDB4ZmZmZCwgMHg5NWUxLCAweGUxNTQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5 MzYzLCAweDk3NTIsIDB4OGQ2MiwgMHg5MDVjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDky NmEsCi0gICAgMHg5OWIyLCAweGZmZmQsIDB4OTJhYywgMHg4OWU2LCAweGUxNTUsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUx NTYsIDB4ZmZmZCwgMHhlMTViLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUxNTksIDB4ZTE1OCwg MHg5ZGMwLCAweDhhNDUsIDB4ZTE1NywgMHhmZmZkLCAweDg4ZDgsCi0gICAgMHhmZmZkLCAweDk0 YTgsIDB4ZmZmZCwgMHhmZmZkLCAweDk0YzgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweDk3YWYsIDB4ZTE1YywgMHhlMTVhLCAweDkyN2IsIDB4OTBhNCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHg5NGE5LCAweGZmZmQsIDB4OTU0YywgMHhmZmZkLCAweGUxNWUsIDB4OTdh YSwgMHg4YzZjLCAweGUxNWYsCi0gICAgMHhmZmZkLCAweGUxNWQsIDB4OTRkNCwgMHhlMTYwLCAw eGZmZmQsIDB4ZTE2MSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4OGQ5LCAweGZmZmQsIDB4ZmZm ZCwgMHg4ZmY0LCAweGUxNjYsIDB4ZmZmZCwgMHhlMTYzLCAweDkzZWIsCi0gICAgMHhlMTYyLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhiNDUsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZTE2OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMTY0 LCAweGUxNjUsCi0gICAgMHhmZmZkLCAweGUxNjgsIDB4ZTE2NywgMHg5NTQ0LCAweGZmZmQsIDB4 ZmZmZCwgMHg5MTYxLCAweDkxNjAsCi0gICAgMHhmZmZkLCAweDhiNWUsIDB4ZmZmZCwgMHhmZmZk LCAweGUxNmEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZTE2YiwgMHhmZmZkLCAweGZmZmQsIDB4ZTE2YywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhlMTZlLCAweGZmZmQsIDB4ZTE2ZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OTc1LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUxNzYsIDB4OTRlNiwgMHhlMTcwLCAweGZmZmQs IDB4ZTE3MiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlMTc0LCAweDkwNWQsIDB4ZmZmZCwgMHhm ZmZkLCAweGUxNzUsIDB4ZTE3MywgMHg4ZWJlLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZTE2ZiwgMHhlMTcxLCAweGZmZmQsIDB4OTU2MSwgMHhmZmZkLCAweDhmYzcsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZTE3OCwgMHhmZmZkLCAweGZmZmQsIDB4ZTE3NywgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTE3OSwgMHhmZmZkLCAweDhlYTQsIDB4OGRhZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHg5Mzk3LCAweGUxN2EsIDB4ZmZmZCwgMHg5MmM5LCAweGZm ZmQsIDB4ZmZmZCwgMHhlMTdjLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTc5Ziwg MHhlMTdiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDkx ODksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhlMTgyLCAweGZmZmQsIDB4ZTE4NCwgMHhlMTg1LCAweDkyNzMsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTE4MywgMHhmZmZkLCAweGUxODAsIDB4ZmZm ZCwgMHhlMTdkLCAweGUxN2UsCi0gICAgMHhmZmZkLCAweGUxODEsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUxODgsIDB4ZmZm ZCwgMHhlMTg2LCAweGZmZmQsIDB4ZTE4NywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGUxODksCi0gICAgMHhlMThiLCAweGUxOGMsIDB4ZTE4ZCwgMHhmZmZkLCAweGUxOGUsIDB4 ZmZmZCwgMHhmZmZkLCAweGUxOGEsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlMTkwLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGUxOGYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhlMTkxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTdjMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl MTk0LCAweGUxOTIsCi0gICAgMHhlMTkzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhhZTAs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTZmYywgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NWM4LCAweGZmZmQsCi0gICAgMHhlMTk2LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGUxOTUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGUxOTcsIDB4ZTE5OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUx OWMsCi0gICAgMHhlMTk5LCAweGUxOWEsIDB4ZTE5YiwgMHhmZmZkLCAweGUxOWQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhlMTllLCAweGZmZmQsIDB4ZTE5ZiwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhlMWEwLCAweGZmZmQsCi0gICAgMHhlMWExLCAweGZmZmQsIDB4OTRhZCwg MHg5MzZmLCAweGUxYTIsIDB4OTQ5MiwgMHg5NTUzLCAweGZmZmQsCi0gICAgMHhlMWEzLCAweGZm ZmQsIDB4ZmZmZCwgMHhlMWE0LCAweDkzNDksIDB4ZmZmZCwgMHg4YTQ2LCAweDhkNjMsCi0gICAg MHhlMWE1LCAweGZmZmQsIDB4ZmZmZCwgMHhlMWE2LCAweGZmZmQsIDB4ZmZmZCwgMHhlMWE3LCAw eGZmZmQsCi0gICAgMHg4ZTQ4LCAweGZmZmQsIDB4ZmZmZCwgMHhlMWE5LCAweGZmZmQsIDB4ZmZm ZCwgMHhlMWE4LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUxYWEsIDB4ZTFhYiwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NGU3LCAweGZmZmQsCi0g ICAgMHhlMWFjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUxYWQsIDB4ZmZmZCwgMHhmZmZk LCAweGVhODksCi0gICAgMHhlMWFlLCAweGUxYWYsIDB4ZTFiMCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDhlNGQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTFiMSwgMHg5NDc1 LCAweGZmZmQsIDB4ZmZmZCwgMHg5NjdlLCAweGZmZmQsCi0gICAgMHg4OTZkLCAweGZmZmQsIDB4 ODk3NiwgMHhmZmZkLCAweGZmZmQsIDB4ZTFiMiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZTFiNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMWIzLCAweDkzOTAs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MGI3LCAweDlmNTgsIDB4ZmZmZCwgMHhl MWI1LCAweDk2YmYsCi0gICAgMHhmZmZkLCAweGUxYjYsIDB4ZmZmZCwgMHg4YWM0LCAweDk0ZDUs IDB4ZTFiNywgMHhmZmZkLCAweGUxYjgsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTFiOSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NmRhLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4OTZkMywgMHhmZmZkLCAweDkyYmMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5 MThhLCAweGZmZmQsIDB4ZmZmZCwgMHhlMWJiLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZjgyLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweDhmYzgsIDB4ZmZmZCwgMHhmZmZkLCAweGUxYmUsIDB4ZmZmZCwg MHhmZmZkLCAweGUxYmQsCi0gICAgMHhlMWJjLCAweDk0ZmIsIDB4ZmZmZCwgMHg4YWM1LCAweDhj YTcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhlMWM0LCAweGZmZmQsIDB4ZmZmZCwgMHhlMWMxLCAweDkwNWUsCi0gICAg MHg5NmIwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUxYzAsIDB4ZTFjMiwgMHhlMWMzLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGUxYmYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUxYzUsCi0gICAgMHhlMWM2LCAweGZmZmQsIDB4OTJh ZCwgMHhmZmZkLCAweDhhZTEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5Mjg1LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUxYzcsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTFjOCwgMHhlMWNi LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDkwODcsIDB4 ZmZmZCwgMHg5M2MyLCAweGZmZmQsIDB4ZTFjYywgMHg5NjcyLCAweGZmZmQsCi0gICAgMHhlMWM5 LCAweGZmZmQsIDB4ZmZmZCwgMHhlMWNhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUxY2YsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhlMWNlLCAweGUxY2QsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhlMWQxLCAweGZmZmQsIDB4ZmZmZCwgMHhlMWQwLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGUxZDIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlMWQ0LCAweGZmZmQsCi0gICAgMHhlMWQzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OTVjYiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDhmNzUsIDB4OTdjNCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlMWQ1LCAweGZm ZmQsIDB4ZmZmZCwgMHg5M2I1LCAweGZmZmQsIDB4ZmZmZCwgMHhlMWQ2LCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGUxZDcsIDB4ZmZmZCwgMHhlMWRiLCAweGUxZDksIDB4ZTFkYSwgMHhmZmZkLCAw eGUxZDgsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGUxZGMsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZTFkZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUxZGUsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZTFkZiwgMHg5NmI1LCAweGUxZTAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4OTZlZSwgMHhlMWUxLCAweGZmZmQsIDB4OTI2ZCwgMHhmZmZk LCAweDk0OGEsCi0gICAgMHhmZmZkLCAweDhiZTksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OTI1YSwgMHhlMWUyLCAweDhiYjgsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MGNl LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGUxZTMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4OGRiYiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUxZTQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTFlNSwgMHhmZmZkLCAweDhjYTQs IDB4OGRkMywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlMWU3LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTM3NSwgMHg4ZGQ0LCAweDhiNmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTY0MywgMHhmZmZkLCAweDk0NmEsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTM3NiwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhkN2IsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZTFlOSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGZj OSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5N2IwLCAweDhkNjQsIDB4ZmZmZCwgMHhmZmZkLCAweDhjYTUsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4OTRhMSwgMHhmZmZkLCAweGUxZWIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUxZWQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhjZTksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhlMWVjLCAweDkyZjQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGUxZWYsIDB4OGE1NiwgMHhlMWVhLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk0ZTgsIDB4 ZmZmZCwgMHg4OTRmLCAweGZmZmQsIDB4OGRlYSwgMHhmZmZkLCAweDk4NzEsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZTFlZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMWYwLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDk1YzksCi0gICAgMHhmZmZkLCAweDkwZDcsIDB4ZTFmMiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGUxZjMsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZTFmMSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4OGE2ZCwgMHhmZmZkLCAweGUxZjksIDB4ZmZmZCwgMHhlMWY4LCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweDhlYTUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTFmYSwgMHhlMWY1LCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTFmYiwgMHhlMWY2LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHg5NGQ2LCAweGUxZjQsIDB4ZmZmZCwgMHhmZmZkLCAweGUx ZjcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTI0MSwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUyNDAsCi0gICAg MHg5NjgxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUxZmMsIDB4ZmZmZCwgMHhmZmZkLCAw eDg4ZTksCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUyNDMsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZTI0MiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhmY2EsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUyNDQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MTYyLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGUyNDYsIDB4ZTI0NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUyNDcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhlMWU2LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZTFlOCwgMHhlMjQ5LCAweGUyNDgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGVhNiwgMHhmZmZkLCAweDk3ZTcsIDB4ZmZmZCwgMHg4 ZWQwLCAweGZmZmQsCi0gICAgMHhlMjRhLCAweDhjNTYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDhiNWYsCi0gICAgMHg4YjQ2LCAweDhlODMsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5NzUzLCAweGZmZmQs IDB4ZmZmZCwgMHhlMjUwLCAweGZmZmQsIDB4ZTI0ZiwgMHg5MTYzLCAweGUyNGMsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZTI0ZSwgMHhmZmZkLCAweGZmZmQsIDB4OGY2YSwgMHg5MDVmLCAweGUy NGQsCi0gICAgMHhlMjRiLCAweGZmZmQsIDB4OTQ0OSwgMHhmZmZkLCAweGZmZmQsIDB4OGZjYiwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHg5NTViLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OGRkNSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkzOTgsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZTI1MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUyNTIsCi0gICAg MHhlMjY4LCAweDhiZDYsIDB4ZmZmZCwgMHhmZmZkLCAweDk4NWMsIDB4OTE1NCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTI1MywgMHhmZmZkLCAweGZmZmQsIDB4ODlk MCwgMHg5MmY1LCAweDk1OWYsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTI1NCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YjlhLCAweGUyNTUsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZTI1NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMjU4 LCAweGZmZmQsCi0gICAgMHg5NDQ4LCAweGZmZmQsIDB4ZmZmZCwgMHhlMjU5LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUyNWEsIDB4ZTI1YiwgMHhmZmZk LCAweGZmZmQsIDB4OGJkNywgMHg4OWQxLCAweDkzYzMsCi0gICAgMHg4ZjQ3LCAweDhlODQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGUyNWMsIDB4ZmZmZCwgMHg4ZjQ4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweDg5YzgsIDB4OTU2MiwgMHhmZmZkLCAweGZmZmQsIDB4ZTI1ZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHg5NGU5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDkxNjQsCi0gICAgMHhmZmZkLCAweGUyNjAsIDB4ZmZmZCwgMHhl MjYxLCAweDk0ODksIDB4ZmZmZCwgMHg5MDYwLCAweGUyNWUsCi0gICAgMHhmZmZkLCAweDkyODEs IDB4ZmZmZCwgMHhmZmZkLCAweGUyNWYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4 ZmNjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OGRhLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHg4YjQ4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlMjYyLCAweGZmZmQsIDB4ZmZmZCwg MHg5MmY2LCAweGZmZmQsIDB4ZTI2MywgMHg5MGM1LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk2YWIsIDB4ZmZmZCwgMHhmZmZkLCAweDk1NDIsCi0gICAg MHhlMjY0LCAweGUyNjUsIDB4OTI3NCwgMHhmZmZkLCAweDk3YzUsIDB4ZmZmZCwgMHhmZmZkLCAw eGUyNjcsCi0gICAgMHhlMjY2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg4ZWVkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUyNjksIDB4ODhl ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUyNmMsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlMjZhLCAweDg5ZDIsIDB4OGM2ZCwgMHhlMjZiLCAweDhkNjUsCi0g ICAgMHg4ZDkyLCAweGZmZmQsIDB4OTVlNCwgMHhlMjZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Njcz LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUyNmYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OTBjZiwgMHg4OTZlLCAweDg5YjgsCi0gICAgMHg4OGFhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUyNmUsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGUyNzAsIDB4ZTI3MSwgMHg4ZmY1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGUyNzIsIDB4ZmZmZCwgMHg4YTZlLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhlMjc0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhjOGEs IDB4ZmZmZCwgMHg4Yjg2LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUyNzUsIDB4OGJmMywgMHhm ZmZkLCAweGZmZmQsIDB4ZTI3NiwgMHhmZmZkLCAweDkwZmEsCi0gICAgMHhmZmZkLCAweDkzY2Is IDB4ZmZmZCwgMHg5MGRlLCAweDhkZjMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhl Mjc3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTI4MiwgMHg5MThiLCAweGZmZmQsIDB4ZTI3OSwg MHhlMjdiLCAweGUyNzgsCi0gICAgMHhlMjdhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhjNDEsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUy N2MsIDB4OGM0NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4Yjg3LCAweDk3NzEsCi0gICAg MHhlMjdlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMjgwLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ODk0ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGUyODMsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YTk2LCAw eGUyODIsIDB4ZTI4MSwgMHhmZmZkLCAweGUyODUsCi0gICAgMHhlMjdkLCAweGZmZmQsIDB4ZTI4 NiwgMHg5N2E3LCAweGZmZmQsIDB4ZTI4NywgMHhmZmZkLCAweGUyODgsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4OWFmMiwgMHhlMjhhLCAweGZmZmQsIDB4ZTI4OSwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGUyOGIsIDB4ZTI4YywgMHhmZmZkLCAweDk3YjMsIDB4ZTI4ZCwgMHhmZmZk LCAweGU4ZWQsCi0gICAgMHg4ZmNkLCAweGUyOGUsIDB4ZTI4ZiwgMHg4Zjc2LCAweGZmZmQsIDB4 OTNiNiwgMHhlMjkwLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTI0NywgMHhmZmZk LCAweGZmZmQsIDB4ZTI5MSwgMHhmZmZkLCAweDkyNWIsCi0gICAgMHhlMjkyLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YmEzLCAweGZmZmQsCi0gICAgMHg5OTVl LCAweDkyN2MsIDB4OGViMSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhhYzYs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTI5MywgMHhmZmZkLCAweGUyYTAsIDB4ZmZmZCwgMHhl Mjk2LCAweGZmZmQsCi0gICAgMHg4Yjg4LCAweGZmZmQsIDB4ZTI5NSwgMHhlMmEyLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGUyOTQsCi0gICAgMHhmZmZkLCAweDhmY2UsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlMjk4LCAweGUyOTks IDB4ZmZmZCwgMHg5MzRhLCAweGZmZmQsIDB4ZmZmZCwgMHhlMjlhLCAweGZmZmQsCi0gICAgMHg4 YTdkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTA3OSwgMHg5NTg0LCAweGZm ZmQsCi0gICAgMHhlMjljLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkxZTYsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMjk3LCAweGZm ZmQsIDB4ZTI5YiwgMHhlMjlkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhkZjksIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTJhNCwgMHg5NTRkLCAweGZmZmQsCi0gICAg MHg5NGE0LCAweDkzOTksIDB4ZmZmZCwgMHg4YmQ4LCAweGUyYTMsIDB4ZTJhMSwgMHhmZmZkLCAw eDk0YjMsCi0gICAgMHhlMjllLCAweDkyN2QsIDB4OTM5YiwgMHhmZmZkLCAweDkzOWEsIDB4ZmZm ZCwgMHg4ZGY0LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZTJiNiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTJhNiwgMHhmZmZkLCAweGUyYTgsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUyYWIsIDB4ZmZmZCwgMHhlMmFjLCAweGZmZmQsCi0g ICAgMHhlMmE5LCAweGUyYWEsIDB4ZmZmZCwgMHhmZmZkLCAweGUyYTcsIDB4ZTJhNSwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTI5ZiwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg5NWNkLCAweDg5ZDMsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhlMmIzLCAweGZmZmQsIDB4ZTJiMCwgMHhmZmZkLCAweGUyYjUsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZTJiNCwgMHhmZmZkLCAweDk0OTMsIDB4OTZhNSwgMHhmZmZkLCAweDhlNWEs Ci0gICAgMHhlMmFlLCAweGUyYjcsIDB4ZTJiMiwgMHhmZmZkLCAweGUyYjEsIDB4ZTJhZCwgMHhm ZmZkLCAweGUyYWYsCi0gICAgMHhmZmZkLCAweDhhYzcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTI1YywgMHhm ZmZkLCAweGZmZmQsIDB4OTBmYiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk0YTAs IDB4ZmZmZCwgMHhmZmZkLCAweGUyYmMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5 NGEyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHg5MGRmLCAweGUyYjksIDB4ZmZmZCwgMHhmZmZkLCAweDk0Y2QsIDB4ZmZmZCwg MHhlMmJkLCAweDk1ZDEsCi0gICAgMHhmZmZkLCAweDkyN2EsIDB4ZmZmZCwgMHhlMmI4LCAweGUy YmEsIDB4ZmZmZCwgMHhmZmZkLCAweGUyYmIsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTJiZSwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHg4ZWMyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkzYzQsIDB4ZTJjMywgMHhlMmMyLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGUyYmYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTg1 NSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMmM4LCAw eGZmZmQsIDB4ZmZmZCwgMHhlMmNjLCAweGUyYzksCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlMmM1LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUyYzYsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTJjYiwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUyYzAsIDB4OTlkMywgMHhlMmM3LCAweGUyYzEsIDB4 ZmZmZCwgMHhmZmZkLCAweGUyY2EsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUyZDAsCi0gICAgMHhmZmZkLCAweDhhYzgsIDB4 ZmZmZCwgMHhlMmNkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUyY2UsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZTJjZiwgMHhlMmQyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGUyZDEsCi0gICAgMHg5NGY0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZTJkMywgMHg5N2ZhLCAweDk1ZWIsCi0gICAgMHhlMmQ4LCAweGZmZmQsIDB4ZmZmZCwgMHhl MmQ1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGUyZDQsIDB4OTBkMCwgMHhmZmZkLCAweGUyZDcsCi0gICAgMHhl MmQ5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUyZDYsIDB4ZmZmZCwgMHhlMmRkLCAweGZm ZmQsCi0gICAgMHhlMmRhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGUyZGIsCi0gICAgMHhlMmM0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUy ZGMsIDB4ZTJkZSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGUyZGYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg5NWM0LCAweGZmZmQsIDB4ZTJlMCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NmUwLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweDhiY2MsIDB4OGM0OCwgMHhlMmUxLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk1YjIsIDB4ZmZmZCwgMHg5MDg4LCAw eGZmZmQsIDB4OTZhZSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlMmUyLCAweGZmZmQsIDB4OTdi MSwgMHhmZmZkLCAweGZmZmQsIDB4OTQ5NCwgMHhmZmZkLCAweDkxNjUsCi0gICAgMHg5NDUzLCAw eGZmZmQsIDB4ZmZmZCwgMHg4ZjZjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg4YmUsCi0g ICAgMHhmZmZkLCAweGUyZTcsIDB4ZTJlNSwgMHhmZmZkLCAweGUyZTMsIDB4OGE5ZiwgMHhmZmZk LCAweDhmY2YsCi0gICAgMHhlMmU4LCAweGZmZmQsIDB4ZmZmZCwgMHhlMmU2LCAweGZmZmQsIDB4 ZTJlNCwgMHhlMmVjLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUyZWIsIDB4ZTJlYSwgMHhlMmU5 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUyZWQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTJlZSwgMHg5MGI4LCAweGZmZmQsCi0gICAgMHhlMmVm LCAweGZmZmQsIDB4ZTJmMSwgMHhmZmZkLCAweGZmZmQsIDB4ZTJmMCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGNkMCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 MTU3LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTJmMywgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5MzljLCAweGZmZmQsCi0gICAgMHhlMmYyLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGUyZjQsIDB4ZmZmZCwgMHg5NWIzLCAweDkxOGMsCi0gICAgMHg4ZDY2LCAweGZmZmQs IDB4ZTJmNSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk3YzYsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUy ZjcsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTJmOCwgMHhmZmZkLCAweGUyZjksIDB4ZmZmZCwg MHhlMmZhLCAweGZmZmQsCi0gICAgMHg4ZTg1LCAweGZmZmQsIDB4ZTJmYiwgMHg4YzZlLCAweGZm ZmQsIDB4ZmZmZCwgMHg4YjhhLCAweGZmZmQsCi0gICAgMHg4YjQ5LCAweGZmZmQsIDB4ZTM0MCwg MHhmZmZkLCAweDk2ZjEsIDB4OGQ2NywgMHhlMmZjLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZTM0MywgMHg5NmU0LCAweGZmZmQsIDB4OTQ1YiwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHg5NTUyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhmODMsIDB4ZTM0MiwgMHhmZmZkLCAw eDhlZDEsCi0gICAgMHg4ZDY4LCAweDhlODYsIDB4OGI4OSwgMHg5NWI0LCAweGUzNDEsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5MTY2LCAweDk2NjEsIDB4OGRmNSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg4ZTg3LCAweDkyZGIsIDB4ZmZmZCwgMHhlMzQ2LCAweDk3ZGQsCi0gICAgMHg4ZGQ3LCAw eGZmZmQsIDB4ZTM0NywgMHg5MDYxLCAweGZmZmQsIDB4ZTM0OSwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweDhmZDAsIDB4OGRhZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGUzNDgsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGY0OSwgMHg4Y2JjLCAweDkxNjcsIDB4 ZTM0NCwgMHhlMzRhLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMzQ1 LCAweDhjNmYsIDB4ZmZmZCwgMHhlMzRkLCAweGUzNTEsCi0gICAgMHg4YzhiLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMzRjLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhlMzU1LCAweGZmZmQsIDB4ZmZmZCwgMHg4ZDY5LCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweDk3OGQsIDB4ODhiYSwgMHhlMzUyLCAweGZmZmQsIDB4ZmZmZCwgMHg4 YjhiLCAweGZmZmQsCi0gICAgMHhlMzRmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhlMzUwLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDkzOWQsIDB4ZTM0ZSwgMHhl MzRiLCAweGZmZmQsIDB4OGE0NywgMHg5MGUyLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhjYTYs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTM1NywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGUzNTQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGUzNTYsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMzUzLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhjNzAsIDB4OTFiMSwg MHhlMzU4LCAweDkxOGUsIDB4ZmZmZCwgMHhmZmZkLCAweGUzNjUsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZTM2MSwgMHhlMzViLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMzVmLCAweDhlZjgsIDB4ODhkYiwgMHhlMzVhLCAw eGUzNjIsCi0gICAgMHhlMzY2LCAweDhkNmEsIDB4OTZkNCwgMHhmZmZkLCAweDkyZDQsIDB4ZTM1 YywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlMzY0LCAweGZmZmQsIDB4ZTM1OSwgMHg5MjVkLCAw eGZmZmQsIDB4ZTM1ZSwgMHg4OGJiLCAweDk2YzgsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzNWQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4OGJkOSwgMHg5NGVhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkxOGQsCi0g ICAgMHhmZmZkLCAweDk3Y2UsIDB4OGY4ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZTM4ZSwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhlMzY3LCAweGZmZmQsIDB4OTBmYywgMHhmZmZkLCAweGUzNjMsIDB4 ZTM2OCwgMHhlMzZhLCAweGZmZmQsCi0gICAgMHg5MmY3LCAweGUzNmQsIDB4ZmZmZCwgMHhmZmZk LCAweGUzNjksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5NWQyLCAweDhhYzksIDB4 ZmZmZCwgMHhmZmZkLCAweDk2YzksIDB4ZmZmZCwgMHhmZmZkLCAweDg4ZGMsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZTM2YywgMHhmZmZkLCAweDk3ZmIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMzZiLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDg5OGYsIDB4ZmZmZCwgMHhmZmZkLCAweDkzZWEs IDB4ZTM2ZSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUzNzUsIDB4ZTM2ZiwgMHhl Mzc2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZTM3MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NDliLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZWM4LCAweGUz NzQsCi0gICAgMHhmZmZkLCAweGUzNzEsIDB4ZTM3NywgMHhlMzcwLCAweGZmZmQsIDB4ZmZmZCwg MHg4ZjYzLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NjQ0LCAweGZm ZmQsIDB4ZmZmZCwgMHg4ZjZiLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUzNzMsIDB4ZTM4MCwg MHhmZmZkLCAweGZmZmQsIDB4ZTM3YiwgMHhmZmZkLCAweGUzN2UsCi0gICAgMHhmZmZkLCAweGUz N2MsIDB4ZTM4MSwgMHhlMzdhLCAweGZmZmQsIDB4ZTM2MCwgMHg5MGQxLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweDk0YzksIDB4ZmZmZCwgMHhlMzdkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMzc4LCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTE0MCwgMHg4YzcxLCAweGZmZmQsIDB4OGY0 YSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDkwNDQsIDB4OTE1NSwgMHhlMzg0LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUzODYsIDB4ZTM4 NywgMHhmZmZkLCAweGZmZmQsIDB4ZTM4MywgMHhlMzg1LCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMzc5LCAweGUzODIsCi0g ICAgMHhmZmZkLCAweGUzOGEsIDB4ZTM4OSwgMHhmZmZkLCAweGZmZmQsIDB4OTY5YSwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHg4YzRhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUzODgsIDB4ZmZmZCwgMHhlMzhj LCAweGUzOGIsIDB4ZTM4ZiwgMHhmZmZkLCAweGUzOTEsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 OGU1YiwgMHhlMzhkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlMzky LCAweGUzOTMsIDB4ZmZmZCwgMHhmZmZkLCAweGUzOTQsIDB4ZmZmZCwgMHhlMzlhLCAweDkzNWEs Ci0gICAgMHhlMzk2LCAweGZmZmQsIDB4ZTM5NSwgMHhlMzk3LCAweGUzOTgsIDB4ZmZmZCwgMHhl Mzk5LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMzliLCAweGUzOWMs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg4YWNhLCAweGZmZmQsCi0gICAgMHhlMzlkLCAweGZmZmQsIDB4ZTM5ZSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTM5ZiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzYTAsIDB4ZTNhMSwgMHhlM2EyLCAweGZm ZmQsCi0gICAgMHhlM2EzLCAweGUzYTQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzYTYsIDB4ZTNhNSwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhlM2E3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzYTgsCi0gICAgMHhlM2E5LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzYWMsCi0gICAgMHhlM2FhLCAweGUz YWIsIDB4OGRkZiwgMHg4YzcyLCAweGZmZmQsIDB4ZmZmZCwgMHg5Mjc1LCAweGZmZmQsCi0gICAg MHg5NGIxLCAweGZmZmQsIDB4OGY5MCwgMHhmZmZkLCAweGZmZmQsIDB4OTQ2YywgMHhmZmZkLCAw eDk0ZWIsCi0gICAgMHhlM2FkLCAweDljZWIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTNhZSwgMHhlM2IwLCAw eGZmZmQsIDB4OTc4NSwgMHhlM2FmLCAweGUzYjIsCi0gICAgMHhlM2IxLCAweGZmZmQsIDB4OTc3 MiwgMHhmZmZkLCAweGUzYjMsIDB4ZmZmZCwgMHg5NGZjLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzYjQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZTNiNywgMHhmZmZkLCAweGZmZmQsIDB4ZTNiNiwgMHhlM2I1 LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlM2I4LCAweDhjNTEsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5MTQxLCAweDhiNjAsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhlM2JjLCAweGUzYjksCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZTNiYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlM2JkLCAweGZmZmQsCi0gICAgMHhlM2Jl LCAweGUzYmIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODk0OCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweDg5YTUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTNjMCwgMHhl M2MxLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTNjMiwgMHhmZmZkLCAweDk3ODIs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGY0YiwgMHhm ZmZkLCAweGUzYzQsIDB4ZTNjMywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5 MDg5LCAweGUzYzUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlM2M2LCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGUzYzcsIDB4ZmZmZCwgMHg4YWUzLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHg4YWNiLCAweGZmZmQsIDB4ZmZmZCwgMHhlM2M4LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUzYzksIDB4ZmZmZCwg MHg5NjdjLCAweDk3ODMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5NzczLCAweDk4 NTYsIDB4ZmZmZCwgMHg4ZDZjLCAweGUzY2MsIDB4OGVkMiwgMHhlM2NiLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlM2NkLCAweDhlYTcsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHg5MWNmLCAweGZmZmQsIDB4ZTNjZSwgMHhmZmZkLCAweGZmZmQsIDB4OGQ2 YiwgMHhmZmZkLCAweDk2ZDUsCi0gICAgMHhlM2NmLCAweGUzZDAsIDB4ZmZmZCwgMHhmZmZkLCAw eGUzZDEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUzZDIsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlM2QzLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZWE4LCAweGZmZmQsIDB4ZmZmZCwgMHg5NmVi LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlM2Q1LCAweGZmZmQsIDB4 OTI1ZSwgMHhmZmZkLCAweGUzZDQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhlM2Q3LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZTNkNiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZTNkOCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MGI5LCAweGZmZmQs Ci0gICAgMHhlM2Q5LCAweGZmZmQsIDB4ZTNkYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 NWI3LCAweGUzZGIsCi0gICAgMHhmZmZkLCAweDkxOGYsIDB4ZTNkYywgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlM2RkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk3ZmMsCi0gICAgMHhlM2UwLCAweGZmZmQs IDB4ZTNkZiwgMHhlM2RlLCAweDkyYWUsIDB4ZmZmZCwgMHhlM2UxLCAweDkwNDUsCi0gICAgMHhm ZmZkLCAweGUzZTIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTNlMywgMHg5ODU3LCAweGUz ZTQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzZTUsIDB4ZTNlNywg MHhlM2U2LCAweDk0YTMsCi0gICAgMHhmZmZkLCAweDkzZjcsIDB4ZmZmZCwgMHg5ODVkLCAweDk0 YTcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlM2U5LCAweGZmZmQsIDB4ZmZmZCwgMHg4ZmQxLCAweGZmZmQsCi0gICAgMHg5NTQ5LCAweGZm ZmQsIDB4ZTNlYSwgMHhlM2U4LCAweGZmZmQsIDB4OGFjYywgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweDhjZDIsIDB4OGU4OCwgMHhmZmZkLCAweGZmZmQsIDB4OTRlYywgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweDhjYTgsIDB4OTY2MiwgMHhmZmZkLCAweGUzZWQsIDB4ZTNl YiwgMHhmZmZkLCAweDhkNmQsCi0gICAgMHhmZmZkLCAweDhkNmUsIDB4ODhlNywgMHhmZmZkLCAw eDhkZTYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTQ3 OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg4OGRkLCAweGUzZjIsIDB4ZmZmZCwgMHg5MjVmLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk0NzcsIDB4ZmZmZCwgMHg5MWQ5 LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhlM2Y0LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUzZjAsIDB4ZTNmMywgMHhlM2Vl LCAweGZmZmQsIDB4ZTNmMSwgMHg5NjQ1LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhjZDMsIDB4 ZmZmZCwgMHhmZmZkLCAweDg4ZmIsIDB4ZTNlZiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzZjYs Ci0gICAgMHhmZmZkLCAweGUzZjcsIDB4ZmZmZCwgMHhmZmZkLCAweDkzYjcsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHg4YmI5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU0NDUs IDB4OTQ1YywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGU4OSwgMHhm ZmZkLCAweGZmZmQsIDB4OGJiYSwgMHg5MGM2LCAweDk4NjUsCi0gICAgMHg5NmFjLCAweGUzZjUs IDB4OTBkMiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGI3MiwgMHhlM2Y4LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlM2ZhLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGUzZjksIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzZmIsCi0gICAgMHhmZmZkLCAweDky NDUsIDB4ZmZmZCwgMHg5NDVkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweDkyYWYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNDQyLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhlNDQxLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlM2ZjLCAw eGZmZmQsIDB4ZmZmZCwgMHg5MDc0LCAweGZmZmQsCi0gICAgMHg5NTg1LCAweGU0NDQsIDB4ZmZm ZCwgMHhlNDQzLCAweDhkNmYsIDB4OTg3MiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU0NTQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTQ0OCwgMHhlNDQ5 LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZWVlLCAweGZmZmQsIDB4 ZmZmZCwgMHhlNDQ3LCAweGZmZmQsCi0gICAgMHg4ZDk4LCAweGU0NDYsIDB4ZmZmZCwgMHhmZmZk LCAweGU0NGEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5MmIwLCAweDk1YTAsIDB4 OTE0MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkxZGEsCi0gICAgMHhlNDRl LCAweGZmZmQsIDB4ZTQ0ZiwgMHhlNDRiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhlNDRjLCAweGZmZmQsIDB4ZTQ0ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDhkNzAsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNDU1LCAweGZmZmQs IDB4ZTQ1MSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTU4NiwgMHhm ZmZkLCAweDk2OGMsIDB4OTU0NywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlNDUwLCAweGZmZmQs IDB4ZmZmZCwgMHhlNDUzLCAweGU0NTIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5 NjYzLCAweGU0NTYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhlNDU3LCAweGZmZmQsIDB4ZmZmZCwgMHg5MTU2LCAweGZmZmQsIDB4ZTQ1OCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhlNDVhLCAweGZmZmQsIDB4ZTQ1ZSwgMHhmZmZkLCAweGZm ZmQsIDB4ZTQ1YiwgMHhlNDU5LCAweDk0NWUsCi0gICAgMHhlNDVjLCAweGZmZmQsIDB4ZTQ1ZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OWIwLCAweGZmZmQsCi0gICAgMHhlNDY0LCAweGU0 NWYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTQ2MCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGU0NjEsIDB4ZmZmZCwgMHg5MTlmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhlNDYzLCAweGU0NjIsIDB4ZTQ2NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGU0NjYsCi0gICAgMHhlNDY3LCAweGZmZmQsIDB4ZmZmZCwgMHg5MDYyLCAw eGZmZmQsIDB4ODllNywgMHhmZmZkLCAweGU0NjgsCi0gICAgMHg5N2Q1LCAweGZmZmQsIDB4OGVh OSwgMHhmZmZkLCAweGZmZmQsIDB4OGY0YywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg4ZThhLCAweDkyNzYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZTQ2OSwgMHhlNDZhLCAweDg5NTAsIDB4ZmZmZCwgMHhlNDZi LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU0NmMsIDB4ZTQ2ZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZTQ2ZSwgMHhmZmZkLCAweGU0NmYsCi0gICAgMHg4YmJiLCAweDlkYTgsIDB4ZTQ3MCwgMHhmZmZk LCAweDkwZTMsIDB4ZTQ3MSwgMHg4ZWM5LCAweGZmZmQsCi0gICAgMHhlNDcyLCAweGZmZmQsIDB4 OThhZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNDczLCAweDk1ZGMsCi0gICAgMHg4YWRh LCAweGZmZmQsIDB4ZmZmZCwgMHg5MTQzLCAweDhmNzcsIDB4ZmZmZCwgMHg5NTkxLCAweDhmNGQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU0NzQsIDB4OGQ3MSwgMHhlNDc1LCAweDk0Y2Es IDB4ZmZmZCwgMHhlNDg0LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl NDc3LCAweGZmZmQsIDB4OTFjNywgMHg5NDk1LCAweDhjYmQsCi0gICAgMHhlNDc2LCAweDkxNDQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhl NDc4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDky ZjgsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlNDdhLCAweGU0NzksIDB4ZTQ3Yywg MHhmZmZkLCAweGZmZmQsIDB4ZTQ3YiwgMHhmZmZkLCAweGU0N2QsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZTQ4MCwgMHhmZmZkLCAweGU0N2UsIDB4ZmZmZCwgMHg4YWNkLCAweGZmZmQsCi0gICAg MHhlNDgxLCAweGZmZmQsIDB4ZTQ4MiwgMHhlNDgzLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZGFmLCAw eDk3YzcsCi0gICAgMHhmZmZkLCAweGU0ODUsIDB4OTA0NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg4OTkwLCAweGU0ODYsCi0gICAgMHhlNDg3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlNDg4LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg4OGYwLCAweGZmZmQsIDB4ZTQ4OSwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZTQ4YSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk1ODcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OGVjNSwgMHhmZmZkLCAweGU0OGMsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OGE0OCwgMHg4OGIwLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhlNDhiLCAweGU0OGUsIDB4OTQ2ZCwgMHhmZmZkLCAweDkwNjMsCi0gICAgMHhmZmZk LCAweDg5ZDQsIDB4ZmZmZCwgMHg5NjQ2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHg4YzdjLCAweDhiZGEsIDB4ZmZmZCwgMHhlNDhkLCAweGZmZmQsIDB4ODllOCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OGFhMSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDg5OTEs IDB4ZTQ5MiwgMHg5N2U4LCAweDkxZGIsIDB4ZmZmZCwgMHhmZmZkLCAweDk1NjMsCi0gICAgMHhm ZmZkLCAweGU0OWUsIDB4ZmZmZCwgMHg4OWQ1LCAweGU0OWMsIDB4ZmZmZCwgMHhlNDlhLCAweGU0 OTEsCi0gICAgMHhmZmZkLCAweGU0OGYsIDB4ZmZmZCwgMHhlNDkwLCAweGZmZmQsIDB4OGVlMSwg MHg4YmVhLCAweDkyOTcsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5M2NmLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDg5NzAsIDB4ZmZmZCwg MHhlNDk0LCAweGU0OTMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU0 OTksIDB4ZTQ5NSwgMHhlNDk4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4OTZjZSwgMHhlNDk3LCAweDg5ZDYsIDB4OGE5ZCwgMHhlNDliLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGU0OWQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg4YzczLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlNGExLCAweGU0YWEsCi0gICAgMHhlNGFiLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDg4YTksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlNGIyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHg4OGVmLCAweGZmZmQsIDB4ZmZmZCwgMHhlNGE5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGU0YTgsCi0gICAgMHhmZmZkLCAweGU0YTMsIDB4ZTRhMiwgMHhmZmZkLCAweGU0YTAsIDB4 ZTQ5ZiwgMHg5MjgzLCAweGZmZmQsCi0gICAgMHg5MWY5LCAweGU0YTUsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlNGE0LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTRhNywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweDkxOTAsIDB4OGM3NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg5NjAs Ci0gICAgMHhlNGE2LCAweGZmZmQsIDB4OGQ3MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHg5MTkxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNGI4LCAweGZmZmQsIDB4ZTRiOSwgMHhmZmZkLCAweDg5 ZDcsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OWFjLCAweGU0YjYsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZTRhYywgMHhmZmZkLCAweGU0YjQsCi0gICAgMHhmZmZkLCAweGU0YmIsIDB4ZTRiNSwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNGIzLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhlNDk2LCAweGZmZmQsIDB4ZmZmZCwgMHhlNGIxLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZTRhZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YWNlLCAw eGU0YWYsCi0gICAgMHhlNGJhLCAweGZmZmQsIDB4ZTRiMCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlNGJjLCAweGZmZmQsIDB4ZTRhZSwgMHg5NDljLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk3ODksIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTRiNywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTRjZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGU0YzUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTA5YiwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGI2NSwgMHhmZmZkLCAweDhiZGIsIDB4 ZmZmZCwgMHhlNGMwLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OWQ5 LCAweGZmZmQsIDB4ZmZmZCwgMHg4ZmQyLCAweGZmZmQsCi0gICAgMHhlNGMzLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDhkZDgsIDB4ZmZmZCwgMHhmZmZkLCAweDkzNzAsCi0gICAgMHhlNGM4 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweDk1ZWMsIDB4ZmZmZCwgMHhlNGJmLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDg5ZDgsCi0gICAgMHg4Y2Q0LCAweDk1NDgsIDB4ZTRjOSwgMHhmZmZkLCAweGU0YmQs IDB4ZmZmZCwgMHhmZmZkLCAweGU0YzYsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl NGQwLCAweGZmZmQsIDB4ZTRjMSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhlNGMyLCAweDkzYjgsIDB4ZmZmZCwgMHhmZmZkLCAweGU0YzcsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNGM0LCAweDk2NDcsIDB4ZTRjYSwgMHg4OGRlLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNGJlLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlNGNjLCAweGZmZmQsIDB4ZTRjYiwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk0 OGIsIDB4ZTRkMiwgMHhmZmZkLCAweGU0ZGQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweDhhOWUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTRlMCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhlNGNlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU0ZDMsIDB4OTc4 ZSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlNGRjLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk3NzQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5N2E4LCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkyOTgsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YThiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk1OTIsIDB4ZTRlMiwgMHg5MzlmLCAweGZmZmQsIDB4 ZmZmZCwgMHg4OGFmLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU0ZGIsIDB4ZmZmZCwgMHhlNGQ3 LCAweDkxOTIsIDB4ZTRkMSwgMHhlNGQ5LCAweGU0ZGUsCi0gICAgMHhmZmZkLCAweDk0NGIsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODhhOCwgMHhmZmZkLCAweGU0ZDYsCi0gICAgMHhmZmZk LCAweGU0ZGYsIDB4OTU5OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTRkYSwgMHhmZmZkLCAweGU0ZDUsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZmQzLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4ZjRlLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDhlYWEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk2ZDYs IDB4ZmZmZCwgMHhmZmZkLCAweDk1NjYsIDB4ZmZmZCwgMHhmZmZkLCAweGU0ZTUsCi0gICAgMHhm ZmZkLCAweGU0ZWUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTRkOCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGE5NywgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4ZmY2LCAweGU0ZTMsIDB4ZmZmZCwg MHhlNGU4LCAweDkxOTMsIDB4ZmZmZCwgMHhmZmZkLCAweGU0ZTQsCi0gICAgMHhmZmZkLCAweGU0 ZWIsIDB4ZmZmZCwgMHhmZmZkLCAweDkyN2UsIDB4ZmZmZCwgMHhlNGVjLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweDk3NzUsIDB4ZTRlMSwgMHg4YTU3LCAweGZmZmQsIDB4ZTRlNywgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhlNGVhLCAweDk2YWEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhlNGVkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU0ZTYsIDB4ZTRlOSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk2NDgsIDB4ZmZmZCwgMHg5ODQwLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU0ZjEsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU0ZjgsIDB4 ZmZmZCwgMHhmZmZkLCAweGU0ZjAsCi0gICAgMHg4ZWMxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhlNGNmLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweDk1Y2MsIDB4ZmZmZCwgMHg5NmEwLCAweGU0ZjcsIDB4ZTRmNiwgMHhmZmZkLCAweGU0ZjIs Ci0gICAgMHhlNGYzLCAweGZmZmQsIDB4ODk1NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGU0ZjUsCi0gICAgMHhmZmZkLCAweGU0ZWYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5MmQzLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGU0ZjQsIDB4ODhmYywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTFhMCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTVjMSwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhlNGY5LCAweGU1NDAsIDB4ZmZmZCwgMHg5NGQ3LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhlNGZjLCAweDhmZDQsIDB4OGVjNywgMHhlNTQyLCAweGZm ZmQsIDB4ZmZmZCwgMHg4YmJjLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZTU0MywgMHhmZmZkLCAweDk1OTksCi0gICAgMHhlNGZiLCAweGZm ZmQsIDB4ZTRkNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNGZhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHg5ODZlLCAweDkzYTAsIDB4OTU5MywgMHhmZmZkLCAweGZmZmQsIDB4ZTU0 YSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1NTAsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNTUxLCAweGZmZmQsCi0gICAgMHhlNTQ0LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk0OTYsIDB4ZmZmZCwgMHhmZmZkLCAweGU1NGUsCi0g ICAgMHhlNTQ2LCAweGZmZmQsIDB4ZTU0OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhlNTUyLCAweGU1NDcsIDB4ZmZmZCwgMHhmZmZkLCAweGU1NGIsIDB4 ZmZmZCwgMHhmZmZkLCAweDg5OTIsCi0gICAgMHhmZmZkLCAweDkzZTMsIDB4ZmZmZCwgMHhlNTRj LCAweGU1NGYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGU1NDUsIDB4ZmZmZCwgMHg5MTQ1LCAweGZmZmQsCi0gICAgMHhlNTQ5 LCAweDhlNDYsIDB4OTA2NCwgMHg4YzRmLCAweDk2ZjIsIDB4ZmZmZCwgMHg5NmY3LCAweDhmOTIs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU1NTYsIDB4ZTU1NCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk4NmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU1NTMs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTc5NSwgMHhmZmZkLCAweGU1NTUsCi0gICAgMHhl NTU3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU1OCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1NWIsIDB4ZTU1OSwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkz YTEsIDB4ZTU1YSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk0Y2IsIDB4ZTU0ZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhmOTMsCi0gICAg MHhmZmZkLCAweGU1NWMsIDB4ZTU2MSwgMHg5MTk0LCAweGZmZmQsIDB4ZmZmZCwgMHhlNTYwLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTU0MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhlNTYyLCAweDkxNjgsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTU1ZCwgMHhlNTVmLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhlNTVlLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZjUwLCAweDlmNDEsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZTU2NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZTU2MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OTc5NiwgMHhmZmZkLCAweGUxYmEsCi0gICAgMHhlNTY1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1NjYsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU2NywgMHg4 Y2Q1LCAweGZmZmQsCi0gICAgMHg4YjczLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1Njks IDB4OTk3YywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGI5NSwgMHhm ZmZkLCAweDk3YjgsIDB4ZmZmZCwgMHg4YmYxLCAweGU1NmEsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1NmIsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MjhlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGU1NmMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDkzZjgsIDB4ZmZmZCwgMHg4OGI4LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ODllMSwgMHhlNTcxLCAweGU1NzIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNTZkLCAweGZmZmQsIDB4OGU1YywgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNTZlLCAw eDk0NjEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU1NmYsIDB4ZTU3 MCwgMHhlNTdhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1NzQsCi0gICAgMHhlNTc3LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNTczLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1NzUsIDB4 ZmZmZCwgMHhlNTc2LCAweDhlZDYsCi0gICAgMHhmZmZkLCAweGU1NzgsIDB4ZmZmZCwgMHg5MjYw LCAweGZmZmQsIDB4OGM3NSwgMHg4YTYxLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGU1N2IsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweDhhNWUsIDB4ZmZmZCwgMHhlNTgxLCAweGZmZmQsIDB4ZmZmZCwgMHhlNTdjLCAweGU1ODAs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk0YjgsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU1N2QsIDB4ZmZmZCwgMHhmZmZkLCAweGU1N2Us IDB4OTU2NywgMHg5NGQ4LCAweGU1ODIsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5MWZiLCAweGU1OGMs IDB4ZmZmZCwgMHhlNTg4LCAweGZmZmQsIDB4ZmZmZCwgMHg4OWU5LCAweGZmZmQsCi0gICAgMHhl NTg2LCAweGZmZmQsIDB4OTY0OSwgMHhlNTg3LCAweGZmZmQsIDB4ZmZmZCwgMHhlNTg0LCAweGZm ZmQsCi0gICAgMHhlNTg1LCAweGU1OGEsIDB4ZTU4ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU4Yiwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU1ODksIDB4ZTU4MywgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5Mjc3LCAweGZmZmQsIDB4ZTU5NCwg MHhmZmZkLCAweDk2YTgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU5MiwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGU1OTMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1OGUsIDB4ZmZm ZCwgMHhmZmZkLCAweGU1OTAsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNTkxLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1OGYsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eDkwZTQsIDB4ZmZmZCwgMHg5ODU4LCAweGU1OTgsIDB4ZmZmZCwgMHhlNTk5LCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNTlmLCAweGZmZmQsIDB4OTA0OSwgMHhmZmZk LCAweGU1OWIsCi0gICAgMHhmZmZkLCAweGU1OWUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGU1OTYsCi0gICAgMHhlNTk1LCAweGZmZmQsIDB4ZmZmZCwgMHhlNWEw LCAweGZmZmQsIDB4ZmZmZCwgMHg4OWRhLCAweGZmZmQsCi0gICAgMHhlNTljLCAweGZmZmQsIDB4 ZTVhMSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNTlkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1OWEsIDB4ZmZmZCwgMHg5MmIxLCAweGZmZmQs Ci0gICAgMHhlNTk3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDk0ODgsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTVhNSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OTc1YSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1 YTQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTVhMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNWFjLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1YTYsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlNWFlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4OTc4NiwgMHhlNWIxLCAweGZmZmQsIDB4ZTVhOCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhlNWE5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1YWQsIDB4ZmZmZCwgMHhlNWIwLCAw eGU1YWYsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNWE3LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlNWFhLCAweGZmZmQsIDB4ZTViYiwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlNWI0LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGU1YjIsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTViMywgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhlNWI4LCAweGU1YjksCi0gICAgMHhmZmZkLCAweDhhNDksIDB4ZmZmZCwgMHg4YjYx LCAweGZmZmQsIDB4ZmZmZCwgMHhlNWI3LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTVhMiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTViNiwgMHhlNWJhLCAweGU1YjUs Ci0gICAgMHhmZmZkLCAweGU1YmMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTViZSwgMHhl NWJkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU1YzAsIDB4ZTViZiwgMHhl NTc5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1YzQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGU1YzEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNWMyLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGU1YzMsIDB4ZmZmZCwgMHhlNWM1LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHg4YzhjLCAweGZmZmQsIDB4ZTVjNywgMHhmZmZkLCAweGU1 YzYsIDB4ZmZmZCwgMHg4ZjRmLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDhkNzMsIDB4OWZhNSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZTVjOCwgMHg4ZjcwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhhNTgsCi0gICAg MHhmZmZkLCAweGU1YzksIDB4ZmZmZCwgMHg4OTcxLCAweGZmZmQsIDB4OGZkNSwgMHhlNWNhLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweDhkNzQsIDB4ZTVjYiwgMHg4OGRmLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5NTVjLCAweGZmZmQsIDB4ZmZmZCwgMHhlNWNjLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5MDhhLCAweGZmZmQsIDB4ZTVk MywgMHhmZmZkLCAweGZmZmQsIDB4ZTVkMCwgMHhmZmZkLCAweDkyOGYsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTVkMSwgMHhlNWNlLCAweDhiZGMsCi0g ICAgMHhmZmZkLCAweGU1Y2QsIDB4ZTVkNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHg4YzU1LCAweGZmZmQsIDB4ZmZmZCwgMHg5MWRjLCAweGZmZmQsIDB4 ZTVkYSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTVkNiwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg5MWIzLCAweGU1ZDUsCi0gICAgMHhmZmZkLCAweGU1ZDgsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNWNmLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZTVkOSwgMHhmZmZkLCAweGU1ZGIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NGVkLCAweGZmZmQsIDB4ZmZmZCwgMHhl NWQ3LCAweGZmZmQsCi0gICAgMHhlNWRjLCAweGU1ZGUsIDB4ZmZmZCwgMHhmZmZkLCAweDhjZDEs IDB4ZTVkMiwgMHhmZmZkLCAweDg4YmYsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1ZGQsCi0gICAgMHhmZmZkLCAweDhkZDks IDB4OTdmNCwgMHhlNWRmLCAweGU1ZTAsIDB4OTE5NSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk3 YTAsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1ZTEsIDB4OTc1NCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhlNWUyLCAweGU1ZTMsIDB4ZmZmZCwgMHhmZmZkLCAweDk1 ZTIsIDB4ZTVlNCwgMHhmZmZkLCAweDhkYmUsCi0gICAgMHhmZmZkLCAweDk3YTEsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlNWU5LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZTVlYSwgMHg4ZmQ2LCAweGU1ZTgsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHg5Nzg3LCAweGU1ZTUsIDB4ZmZmZCwgMHhmZmZkLCAweGU1ZTcsIDB4OTBi YiwgMHg5MDllLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTVlNiwgMHhmZmZkLCAw eGU1ZWIsIDB4ZmZmZCwgMHhmZmZkLCAweDk1YTEsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTVl ZCwgMHhmZmZkLCAweGU1ZWMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4YThjLCAw eGZmZmQsIDB4OTY0YSwgMHhlNWVlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTVmYSwgMHhlNWYw LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZTVmMSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTVmMiwgMHhlNWYz LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNWY3LCAweGZmZmQsCi0gICAgMHhlNWY4 LCAweGZmZmQsIDB4ZmZmZCwgMHhlNWY2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGU1ZjQsIDB4ZmZmZCwgMHhlNWVmLCAweGU1ZjUsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1Zjks IDB4ZThiNSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OWE2LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNWZjLCAweDhiZGQsCi0gICAgMHhl NWZiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU2NDEsIDB4ZmZmZCwgMHhlNjQwLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTY0MywgMHhmZmZkLCAweGZmZmQsIDB4ZTY0Miwg MHhmZmZkLCAweGU2NDQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGY1MCwgMHhmZmZkLCAweGU2 NDUsIDB4ZmZmZCwgMHhmZmZkLCAweGU2NDYsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNjQ3LCAweDkwYmMsCi0gICAgMHhmZmZkLCAweDk3 NzYsIDB4ZmZmZCwgMHhlNjQ4LCAweGZmZmQsIDB4ZmZmZCwgMHg5NWEyLCAweDk0NjUsCi0gICAg MHhlNjQ5LCAweGZmZmQsIDB4ZTY0YSwgMHg4Y2E5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDhiNGIsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNjRiLCAweGZmZmQsIDB4ZmZm ZCwgMHg4ZThiLCAweDk0NjAsCi0gICAgMHhlNjRjLCAweGZmZmQsIDB4OGE2ZiwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU2NGQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNjRmLCAweDk3OTcsCi0gICAgMHhmZmZkLCAw eGU2NGUsIDB4OTA2NSwgMHhmZmZkLCAweGU2NTAsIDB4ZmZmZCwgMHhmZmZkLCAweGU2NTEsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZTY1MiwgMHg4YWNmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTY1MywgMHhmZmZkLCAweGZmZmQsIDB4 ZTY1NCwgMHhmZmZkLCAweGU2NTUsCi0gICAgMHhlNjU2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4OGE3MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTY1NywgMHhmZmZkLCAweGU2NTgsIDB4ZTY1OSwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OWYwLCAweGZmZmQs IDB4ZmZmZCwgMHg5MDQ3LCAweGU2NWEsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGU2NWIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhl NjVjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHg4Y2JlLCAweGZmZmQsIDB4OTJmOSwgMHhlNjVkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHg4Yzc2LCAweGZmZmQsIDB4OTA3NSwgMHhmZmZkLCAweGU2 NjAsIDB4ZmZmZCwgMHg5M2EyLCAweGZmZmQsCi0gICAgMHhlNjVmLCAweGZmZmQsIDB4ZmZmZCwg MHg4YzUwLCAweGZmZmQsIDB4ZmZmZCwgMHhlNjVlLCAweDkxZjUsCi0gICAgMHg4YjRjLCAweGZm ZmQsIDB4ZmZmZCwgMHhlNjYxLCAweGZmZmQsIDB4ZTY2MiwgMHhmZmZkLCAweDhmZDcsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YzhkLCAweGZmZmQsIDB4ZTY2MywgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTY0YiwgMHhmZmZkLCAweGZmZmQsIDB4OTBk ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhiOTYsIDB4ZmZmZCwgMHg5NmYzLCAw eDkxNjksIDB4ZmZmZCwgMHhlNjY0LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTA2 NiwgMHg5MjkwLCAweDhmZDgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGU2NjUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNjY4LCAweGZmZmQsCi0g ICAgMHhlNjY5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHg4ZGJjLCAweDkxYzAsIDB4ZTY2NywgMHhmZmZkLCAweDhmZDksIDB4 OTU1ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNjY2 LCAweGZmZmQsIDB4ZmZmZCwgMHg4ZThjLCAweGZmZmQsCi0gICAgMHg4OTcyLCAweGZmZmQsIDB4 ZTY2ZCwgMHg4Yzc3LCAweGZmZmQsIDB4ZmZmZCwgMHg4ZThlLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweDhlOGQsIDB4ZmZmZCwgMHg5ODZjLCAweGU2NmMsIDB4ZTY2YiwgMHg5MTQ2LCAweGZmZmQs Ci0gICAgMHg4YjZjLCAweDk4NjIsIDB4OGE1OSwgMHg4ZmRhLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU2NmEs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTY2ZiwgMHhm ZmZkLCAweGU2NzAsIDB4ZTY2ZSwgMHhmZmZkLCAweDhjZDYsCi0gICAgMHhmZmZkLCAweDk3NWYs IDB4ZmZmZCwgMHhmZmZkLCAweDhlOGYsIDB4OTQ0NiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGU2NzMsIDB4ZmZmZCwgMHg5MGJlLCAweGZmZmQsIDB4OTI2MSwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHg5NzU1LCAweGZmZmQsIDB4ZTY3NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg4Y2VhLCAweGZmZmQsCi0gICAgMHg5MGJkLCAweGU2NzIsIDB4ZmZmZCwgMHhlNjc3LCAweDhj ZWIsIDB4ZTY3NCwgMHhlNjc1LCAweGZmZmQsCi0gICAgMHhlNjcxLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDkwZTAsIDB4OTNjNywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5MjRlLCAweGZm ZmQsIDB4ODlkYiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweDk0ZWUsIDB4ZmZmZCwgMHhmZmZkLCAweDhiNjIsIDB4ZmZmZCwgMHhmZmZkLCAw eDkyYjIsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTY3YSwgMHhmZmZkLCAweGU2NzgsIDB4ZmZm ZCwgMHhmZmZkLCAweDkyNmIsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MGJmLCAw eDhhZDAsIDB4ZTY3OSwgMHhmZmZkLCAweDkwN2EsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTdj OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ODVmLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZTY3YiwgMHhlNjg3LCAweDkyYjMsIDB4ZmZmZCwgMHhlNjg2LCAweGZmZmQsCi0g ICAgMHhlNjgzLCAweGU2OGIsIDB4ZTY4NCwgMHhmZmZkLCAweGU2ODAsIDB4ZmZmZCwgMHg5MmZh LCAweGU2N2UsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNjdjLCAweGZmZmQsIDB4 OTc0MCwgMHg4ZTkwLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU2ODEsIDB4ZmZmZCwgMHhlNjdk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU2ODUsCi0gICAgMHg4Zjk0LCAweGZmZmQsIDB4 OGNiZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MWY4LCAweGZmZmQsCi0gICAgMHg5NjY0 LCAweDg5NzksIDB4ODhlMCwgMHhmZmZkLCAweDkzYTMsIDB4ZmZmZCwgMHhmZmZkLCAweGU2ODks Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU2ODgsIDB4ZmZmZCwgMHg5 M2U0LCAweGZmZmQsCi0gICAgMHhlNjhkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU2ODIs IDB4ZmZmZCwgMHhlNjhjLCAweGU2OGUsCi0gICAgMHhmZmZkLCAweDhjYWEsIDB4ZTY4YSwgMHg4 ZDc1LCAweGZmZmQsIDB4OGVkMywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlNjhmLCAweDk3Nzcs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNjkyLCAweGZmZmQsCi0gICAgMHhl Njk1LCAweGZmZmQsIDB4ZmZmZCwgMHhlNjkzLCAweDk1NTQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNjkwLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhiZGUsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhlNjk0LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU2OTYsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU2 OWEsIDB4ZmZmZCwgMHhmZmZkLCAweGU2OTcsIDB4ZmZmZCwgMHhlNjk5LCAweGU2OTgsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNjliLCAw eGZmZmQsCi0gICAgMHg4ZWFmLCAweGZmZmQsIDB4ZTY5ZCwgMHhlNjljLCAweDk1ODgsIDB4ZmZm ZCwgMHhmZmZkLCAweGU2OWYsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg4Yzc4LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhlNjllLCAweGU2YTAsIDB4ZmZmZCwgMHhmZmZkLCAweGU2YTEsCi0gICAgMHg4YjYzLCAw eGUzYmYsIDB4OGZmNywgMHhmZmZkLCAweGU2YTIsIDB4ZmZmZCwgMHhmZmZkLCAweDhjZWMsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTZhMywgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhlNmE0LCAweGZmZmQsIDB4ZmZmZCwgMHg4ZTVkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OWRjYywgMHhmZmZk LCAweGU2YTUsIDB4ZmZmZCwgMHhlNmE2LCAweGZmZmQsCi0gICAgMHg4ZjUxLCAweGZmZmQsIDB4 ZTZhNywgMHhlNmE4LCAweGZmZmQsIDB4ZmZmZCwgMHhlNmE5LCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGU2YWEsIDB4ZTZhYiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkyNGEs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTZhYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGU2YWUsCi0gICAgMHhmZmZkLCAweGU2YWQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5M2E0LCAweGZmZmQsCi0gICAgMHhlNmFmLCAweGZmZmQsIDB4OTY0YywgMHhm ZmZkLCAweGU2YjAsIDB4ZmZmZCwgMHhlNmIxLCAweGZmZmQsCi0gICAgMHhlNmIyLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTZiMywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4OTNkOCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweDhmZGIsIDB4ZTZiNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGQ4YiwgMHg5OGFjLCAweGU2 YjUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlNmI2LCAweDk1 NWUsIDB4ZTZiNywgMHhmZmZkLCAweGU2YmYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZTZiOCwgMHhmZmZkLCAweGZmZmQsIDB4ZTZiYSwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGU2YjksIDB4ZTZiYiwgMHhmZmZkLCAweDk2NjUsIDB4ZTZi YywgMHhlNmJkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGU2YmUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlNmMwLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OGE0YywgMHg5MmU1LCAweGZmZmQsCi0gICAgMHg5NTg5LCAw eDhkZTAsIDB4OGQ3NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk1NmUsCi0g ICAgMHg4OWRkLCAweDk0Y2MsIDB4ZTZjMywgMHg4YWQxLCAweDkwZDMsIDB4ZTZjMiwgMHhlNmM3 LCAweDkyOTksCi0gICAgMHg5NmUxLCAweGZmZmQsIDB4ZTZjNSwgMHhlNmM2LCAweDhiNGQsIDB4 ZmZmZCwgMHhlNmM4LCAweDk0ODMsCi0gICAgMHg5MWRkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NGVm LCAweDkzNWMsIDB4ZTZjNCwgMHhmZmZkLCAweDk2NjYsCi0gICAgMHg4OWVhLCAweGU2Y2EsIDB4 OTg0NywgMHg5MmMwLCAweDk4NjQsIDB4ZmZmZCwgMHhmZmZkLCAweDhlOTEsCi0gICAgMHhlNmM5 LCAweGZmZmQsIDB4OTFhZiwgMHhmZmZkLCAweGZmZmQsIDB4ZTZkYSwgMHg5MTQ3LCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweDkzZjYsIDB4ZmZmZCwgMHg5NTZmLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTZjZCwgMHg4ZTVlLCAweDhlOTIs IDB4ZmZmZCwgMHg4ZmRjLCAweGZmZmQsCi0gICAgMHg5NDg1LCAweGZmZmQsIDB4OGNhYiwgMHhl NmNjLCAweGU2Y2IsIDB4ZmZmZCwgMHg5NThhLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4OGViZiwgMHhmZmZkLCAweGZmZmQsIDB4OTM3MSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTZjZiwgMHhlNmQwLCAweDhkNzcsIDB4ZTZjZSwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU2 ZDEsIDB4ZTZkMiwgMHhmZmZkLCAweGU2ZDQsCi0gICAgMHg5MWExLCAweGZmZmQsIDB4ZTZkMywg MHg4YWU0LCAweGZmZmQsIDB4ZTZkNiwgMHhmZmZkLCAweGU2ZDUsCi0gICAgMHhlNmQ3LCAweGZm ZmQsIDB4ZmZmZCwgMHhlNmQ5LCAweGU2ZGIsIDB4ZmZmZCwgMHhlNmRjLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkwZDQsIDB4ZmZmZCwgMHg4ZWNkLCAweGU2ZGQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YTcxLCAweGZmZmQsIDB4ZTZkZSwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHg5MTk2LCAweGU2ZGYsIDB4ZmZmZCwgMHhlNmUwLCAweDk1OGIs IDB4ZmZmZCwgMHhmZmZkLCAweDhiNGUsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU2ZTEs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTJiNCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ODk3YSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU2ZTIsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg4ZWVmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5MDk2LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MWFiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTZlNSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhlNmU0LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTZlMywgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhlNmViLCAweGU2ZTksIDB4ZmZmZCwgMHhmZmZkLCAweGU2ZTYsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNmU4LCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZTZlNywgMHhlNmVhLCAweGZmZmQsIDB4OGI5NywgMHhmZmZk LCAweGU2ZWUsCi0gICAgMHhmZmZkLCAweDkwZDUsIDB4ZmZmZCwgMHhlNmVmLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4Y2Q3LCAweGZmZmQsIDB4ZTZlYywgMHhlNmVk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk4NDgsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg5MmI1LCAweGZmZmQsIDB4OTE0OCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU2ZjAsIDB4ZmZmZCwgMHhmZmZkLCAweGU2ZjMs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhlNmYxLCAweGU2ZjIsIDB4OTc3OCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDkzYTUsCi0gICAgMHhlNmY2LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTZmNCwgMHhlNmY1LCAweGU2ZjcsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTc0OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhlNmZhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU2 ZmIsIDB4ZTZmOSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZTZmOCwgMHhmZmZkLCAweDkyZmIsIDB4ZmZmZCwgMHhmZmZkLCAweGU3NDAsCi0gICAg MHhlNzQ0LCAweGU3NDEsIDB4ZTZmYywgMHhmZmZkLCAweGU3NDIsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhlNzQzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTc0 YSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU3NDUsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkwZDYsCi0gICAgMHhlNzQ3LCAweGZmZmQsIDB4ZmZm ZCwgMHhlNzQ5LCAweGU3NDYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZTc0YywgMHhmZmZkLCAweDhmNTIsIDB4ZmZmZCwgMHhlNzRi LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU3NGQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU3NGUsIDB4ZmZmZCwgMHhmZmZk LCAweGU3NTEsIDB4ZTc1MCwgMHhmZmZkLCAweGU3NGYsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZTc1MywgMHhlNzUyLCAweGZmZmQsIDB4OTZmNCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGU3NTUsIDB4ZmZmZCwgMHhlNzU0LCAweGU3NTYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGU3NTcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU3NTksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTc1OCwgMHg5 MDY3LCAweGU3NWEsIDB4ZmZmZCwgMHhmZmZkLCAweDhiZWIsCi0gICAgMHhlNzViLCAweGU3NWQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNzVlLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTc1Ziwg MHhlNzVjLCAweGZmZmQsCi0gICAgMHhlNzYwLCAweGZmZmQsIDB4OGVkNCwgMHhlNzYxLCAweDhi NGYsIDB4OGM1MiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGNhYywg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhlNzYyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkzZWUsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4OTM1ZCwgMHhlNzYzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNzY2LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4ZWIyLCAweGZmZmQsIDB4ZmZm ZCwgMHhlNzY1LCAweGU3NjQsIDB4OGM3OSwgMHhlNzY3LCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg4YTcyLCAweGZmZmQsIDB4ZTc2OSwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweDhkZGEsIDB4ZTc2OCwgMHhmZmZkLCAweGU3NzEsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTc2YiwgMHhlNzZkLCAweDk1ZTMsIDB4 ZTc2YSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU3NmMsIDB4ZmZmZCwgMHhlNzcw LCAweGU3NmUsIDB4OGI1MCwgMHhmZmZkLCAweGU3NmYsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNzcyLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweDk0NzksIDB4OTdkNiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhmNTMs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNzczLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHg5NzQxLCAweGU3NzUsIDB4ZmZmZCwgMHhlNzc0LCAweGZmZmQs IDB4ZmZmZCwgMHhlNzc4LCAweDk3NjAsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTc3NywgMHhm ZmZkLCAweDhhOGQsIDB4ZTc3NiwgMHhlNzdiLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU3N2Es IDB4ZmZmZCwgMHhmZmZkLCAweGU3NzksIDB4OTM1MSwgMHhlNzdjLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU3 N2QsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU3N2UsIDB4ZmZmZCwg MHhmZmZkLCAweDhkOGMsCi0gICAgMHhmZmZkLCAweDhjNDQsIDB4ZTc4MCwgMHhlNzgxLCAweGU3 ODIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5MDY4LCAweGU3ODMsIDB4ZmZmZCwgMHg4ZWFiLCAweGU3ODQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNzg1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDk5OWYsCi0gICAgMHg5OTllLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZTc4NiwgMHhlMzkwLCAweGU3ODcsCi0gICAgMHg5MjQzLCAweDkwNGEsIDB4OTQ1ZiwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU3ODgsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 OTVkMywgMHg5MmQyLCAweDhkOWUsIDB4ZmZmZCwgMHhmZmZkLCAweDkyNDgsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ODk0OSwgMHhmZmZkLCAweDk2OTgsIDB4OTA3NiwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4 YzdkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhiZGYsIDB4ZmZmZCwgMHhmZmZkLCAweDk1ZDQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTc4OSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZTc4YiwgMHhmZmZkLCAweGZmZmQsIDB4ZTc4YSwgMHg4OWRlLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweDkzZjQsIDB4ZTc4YywgMHg5NDk3LCAweGZmZmQsIDB4OTM1MiwgMHhmZmZkLCAweGU3 OGQsCi0gICAgMHg4ZjcxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU3OGYsIDB4ZmZmZCwg MHhmZmZkLCAweDk2YzAsCi0gICAgMHhlNzllLCAweGU3OTEsIDB4ZTc5MiwgMHhmZmZkLCAweGZm ZmQsIDB4OTJjNywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5MWRlLCAweDkxOTcsIDB4ZmZmZCwg MHg5M2E2LCAweGZmZmQsIDB4ZTc5MCwgMHg4Yjc0LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhlNzk5LCAweGZmZmQsIDB4ZTc5NiwgMHhlN2EzLCAweDkzYTcsCi0gICAg MHg5MjgwLCAweGU3OTMsIDB4ZmZmZCwgMHg5MmZjLCAweDkzNzIsIDB4ZTc5NCwgMHhlNzk4LCAw eDkwODAsCi0gICAgMHhmZmZkLCAweDk0ODcsIDB4OTJjYSwgMHhmZmZkLCAweGZmZmQsIDB4OTBj MCwgMHhlNzk3LCAweDkxYWMsCi0gICAgMHg5MWEyLCAweGU3OTUsIDB4ODhhNywgMHg5ODQxLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU3OWEsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MWRmLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eDhmNTQsIDB4OTA2OSwgMHhmZmZkLCAweGZmZmQsIDB4ZTc5YywgMHhlNzliLCAweGZmZmQsCi0g ICAgMHg4OGVkLCAweGU3OWQsIDB4ZmZmZCwgMHhmZmZkLCAweDk1NGUsIDB4ZmZmZCwgMHhlN2E1 LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDkzZDksIDB4OTA4YiwgMHhmZmZkLCAweGZmZmQsIDB4 OTI3OCwgMHhmZmZkLCAweDhiZjYsCi0gICAgMHhmZmZkLCAweGU3YTQsIDB4OTc1NiwgMHg4OTVl LCAweGZmZmQsIDB4OTVkNSwgMHg4OWRmLCAweGU3OWYsCi0gICAgMHhlN2EwLCAweGU3YTEsIDB4 ZTdhMiwgMHg5M2I5LCAweDkyNDIsIDB4ODhlMSwgMHhlN2E2LCAweGZmZmQsCi0gICAgMHhlN2E3 LCAweGVhYTEsIDB4ZmZmZCwgMHhmZmZkLCAweDkxYmIsIDB4ZmZmZCwgMHhlN2E4LCAweGZmZmQs Ci0gICAgMHg4OTkzLCAweDkxNmIsIDB4ZmZmZCwgMHg4Y2FkLCAweGZmZmQsIDB4OTc3OSwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhlN2E5LCAweDkzNGIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OTE5OCwgMHg4ZWQ1LCAweGU3YWEsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTdhZCwgMHhm ZmZkLCAweGZmZmQsIDB4OGY4NSwgMHhlN2FiLCAweDkxNGEsCi0gICAgMHg5MTQ5LCAweGZmZmQs IDB4ODhlMiwgMHhmZmZkLCAweDk3YzksIDB4ZTdhZiwgMHhmZmZkLCAweDk0ZjAsCi0gICAgMHhl N2IxLCAweGU3YjAsIDB4ZTdhZSwgMHhlMjg0LCAweDhhZDIsIDB4ZmZmZCwgMHhmZmZkLCAweGU3 OGUsCi0gICAgMHhmZmZkLCAweGU3YjMsIDB4ZTdiMiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGU3YjQsCi0gICAgMHhmZmZkLCAweDk3NTcsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg5M2RmLCAweGZmZmQsIDB4ZmZmZCwgMHg5NjRkLCAweGZmZmQsCi0gICAg MHhlN2I1LCAweGZmZmQsIDB4OGVkNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGU3YjYsCi0gICAgMHhmZmZkLCAweGU3YjcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTdi OCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5MzQwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDg4ZTgsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4OGQ3OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ODU5LCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlN2JjLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhjNTMsIDB4ZTdiOSwgMHhmZmZk LCAweGU3YmEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5NTk0LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGE3MywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTc1OCwgMHhmZmZkLCAweDhiYmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTM3MywgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTdiZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZTdiZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGU3YmYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OTM0MSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlN2MxLCAweGZmZmQsIDB4ZTdjMCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweDkzZDEsIDB4ZTdjMiwgMHg4ZjU1LCAweDhlZGUsIDB4OTQ3 YSwgMHg5MjkxLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGVmMCwgMHhmZmZkLCAw eDkwOGMsIDB4ZmZmZCwgMHhlN2MzLCAweGZmZmQsCi0gICAgMHhlN2M0LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4OTA3YywgMHhlN2M1LCAweGZmZmQsIDB4ZTdjNiwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGU3YzcsIDB4OTc4ZiwgMHhmZmZkLCAweDhmNTYsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTdjOSwgMHhlN2M4LCAweGZmZmQsIDB4 OGQ3OSwgMHhmZmZkLCAweDhkOTMsCi0gICAgMHg4ZTVmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZTdjYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhmODYsCi0gICAgMHhmZmZk LCAweGU3Y2IsIDB4ZmZmZCwgMHhlN2NhLCAweGZmZmQsIDB4OTFlNywgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHg4Y2VkLCAweGZmZmQsIDB4OTBjMSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDk0YWUsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhmNTgs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTdjZCwgMHhm ZmZkLCAweDhmZGQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZTdkMCwgMHhlN2NlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU3Y2YsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU3ZDIsIDB4ZTdkMSwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHg4ZmY4LCAweGZmZmQsIDB4ZTdkMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhlN2Q0LCAweGU3ZDUsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg5NGNlLCAweDhkZDEsCi0gICAgMHg4ZWRmLCAweGU3ZDYsIDB4ZmZmZCwg MHhlN2Q3LCAweDk3YTIsIDB4OGY2NCwgMHg5NmVjLCAweDk3Y2EsCi0gICAgMHhlN2Q4LCAweDhi ZTAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlN2Q5LCAweGZmZmQsCi0gICAg MHg5MzQyLCAweGZmZmQsIDB4ZmZmZCwgMHhlN2RjLCAweDhhOTgsIDB4OTA2YSwgMHhmZmZkLCAw eGU3ZGEsCi0gICAgMHhmZmZkLCAweGU3ZGIsIDB4ZmZmZCwgMHg5MmRlLCAweGZmZmQsIDB4ZmZm ZCwgMHg5Njc0LCAweDhiZmEsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTdkZSwgMHhlN2RmLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU3ZGQsIDB4ZmZmZCwgMHhmZmZkLCAweGU3ZTEsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OTNkZCwgMHg4YTYyLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU3ZTUsIDB4ZmZmZCwgMHhmZmZk LCAweGU3ZTIsIDB4ZTdlNCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlN2UwLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGU4NmUsIDB4ZmZmZCwgMHhmZmZkLCAweGU3ZTMsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk3ZTks IDB4ZmZmZCwgMHhmZmZkLCAweDhjZDgsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU3ZWQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDkzNTMsIDB4ZTdlOCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhl N2ViLCAweGU3ZTksIDB4ZmZmZCwgMHhlN2VlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhlN2VmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGU3ZTcsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTdmNCwgMHg4OTk0LCAweGZm ZmQsIDB4ZmZmZCwgMHhlN2U2LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTRhYiwg MHhmZmZkLCAweGU3ZWEsIDB4ZmZmZCwgMHg4ZmRlLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweDhkN2EsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5NjY3LCAweGZmZmQsCi0gICAgMHg4YmUyLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZjY1LCAw eGZmZmQsIDB4OTNiYSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eDkxNGMsIDB4ZmZmZCwgMHhlN2YyLCAweGZmZmQsIDB4ZTdlYywgMHhlN2YxLCAweGZmZmQsCi0g ICAgMHg5NmMxLCAweGZmZmQsIDB4OTJiNiwgMHhlN2YzLCAweGU3ZjAsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OTE0YiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU3ZjcsCi0gICAgMHhmZmZk LCAweGU3ZjYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGU3ZjUsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTY0ZSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhmOWIsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGU3ZjgsIDB4OTVkZCwgMHhmZmZkLCAweGZmZmQsIDB4ODk3Mywg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTU2NSwgMHg5MjkyLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4Yjk4LCAweGZmZmQsIDB4ZTdmYSwg MHhmZmZkLCAweDhkN2MsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZTRiLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGU3ZjksCi0gICAgMHg5MDhkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5MDhlLCAweGU4NDAsIDB4ZTg0MiwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4ZmY5LCAweGZmZmQsIDB4ZTg0 MSwgMHhlODQzLCAweGZmZmQsIDB4ZmZmZCwgMHg4YmQxLCAweGZmZmQsCi0gICAgMHg5NTY0LCAw eGZmZmQsIDB4ZmZmZCwgMHg4ZWUwLCAweDk4NDIsIDB4ZmZmZCwgMHhlN2ZjLCAweDhkZjYsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4OTg1ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZTg0NSwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTg0NCwgMHhlODQ2LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGU3ZmIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg5M2U3LCAweGZmZmQsIDB4OTM3NCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkyZDUsIDB4ZmZmZCwgMHhlODRiLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MjYyLCAweGU4NDcsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhlODQ4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDhjNGMsIDB4ZmZmZCwgMHhlODRhLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGNhZSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU4NDksIDB4ZmZmZCwgMHg4ZmRmLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhh OTksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGU4NGYsIDB4ZmZmZCwgMHg4ZGJkLCAweDkxOTksCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4OTJjOCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDhhNWEsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU4NGQsIDB4ZTg0 ZSwgMHg5MmMxLCAweGZmZmQsCi0gICAgMHhlODRjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU4NTAsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlODU2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhlODU5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhlODU4LCAweDkzNGMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhlODUxLCAweGU4NTIsCi0gICAgMHhlODU1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZTg1NywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhiYmUsIDB4 ZmZmZCwgMHhmZmZkLCAweGU4NWEsIDB4ZTg1NCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlODUz LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl ODVlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU4NWYsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhl ODYwLCAweGZmZmQsIDB4ZmZmZCwgMHhlODVkLCAweGU4NWMsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHg4ZmUwLCAweDkzYTgsIDB4ZTg1YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU4NjQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlODYyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTg2MywgMHhlODYxLCAweGZmZmQsCi0gICAg MHg5MWY2LCAweGZmZmQsIDB4ZTg2NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGU4NjYsIDB4ZmZmZCwgMHhmZmZkLCAweGU4NjgsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhhZDMsIDB4ZTg2 NywgMHg5NmY4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZTg3MywgMHhlODY5LCAweGZmZmQsIDB4ZmZmZCwgMHhlODZjLCAweGZmZmQsCi0g ICAgMHhlODZhLCAweGZmZmQsIDB4ZTg2YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTg2ZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlODZmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZTg3MCwgMHhmZmZkLCAweGU4NzEsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGU4NzQsIDB4ZTg3MiwgMHhlODc1LCAweGU4NzcsCi0gICAgMHhmZmZk LCAweGU4NzYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDkyYjcsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5NmU1LCAweGZmZmQsIDB4ZTg3 OCwgMHg5MTRkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU4NzksCi0gICAgMHhmZmZkLCAw eDk1YzIsIDB4ZTg3YSwgMHg4YTRhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg5NWIsCi0g ICAgMHhmZmZkLCAweDhhZDUsIDB4ZmZmZCwgMHg4YWQ0LCAweGU4N2IsIDB4ZmZmZCwgMHhlODdj LCAweGZmZmQsCi0gICAgMHhlODdkLCAweGU4N2UsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlODgwLCAweGZmZmQsIDB4OGFkNiwgMHg4YTc0 LCAweDhkN2QsIDB4OTRiNCwgMHhmZmZkLCAweGU4ODIsCi0gICAgMHhlODgxLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTg4MywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ODk3YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGU4ODYsIDB4ZmZmZCwgMHhlODg1LCAweGU4ODQsIDB4ZmZmZCwgMHhl ODg3LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlODhhLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDg4YzUsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTg4OCwgMHhm ZmZkLCAweGU4OGMsIDB4ZTg4YiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGU4OGUsIDB4ZTg4ZCwgMHhlODhmLCAweGZmZmQsCi0gICAgMHg5 M2FjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU4OTAsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGU4OTEsIDB4ZTg5MywgMHhmZmZkLCAweGZmZmQsIDB4ZTg5Miwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDk1OGMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGU4OTQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhlODk1LCAweGZmZmQsIDB4OGRlMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlODk2 LCAweGU4OTcsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTY2OCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MTZh LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg4YTIsCi0gICAgMHg5MWM5LCAweGZmZmQsIDB4 ZTg5OCwgMHhmZmZkLCAweDk1OGQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhlODliLCAweGU4OTksIDB4OGQ3ZSwgMHhmZmZkLCAweGU4OWEs Ci0gICAgMHg4Y2MwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NWMzLCAweGU4OWQs IDB4ZTg5ZiwgMHhlODllLCAweGU4YTAsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ODk0MCwgMHg5 MDc3LCAweDhmOWMsIDB4OGFkNywgMHhlOGExLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4OTQ4NiwgMHhmZmZkLCAweGU4YTMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4 OTQxLCAweGZmZmQsIDB4ZThhMiwgMHg5MmMyLCAweGZmZmQsIDB4OTdjYiwgMHg5M2E5LCAweGU4 OWMsCi0gICAgMHg5N2E0LCAweGZmZmQsIDB4OGNhZiwgMHhmZmZkLCAweGZmZmQsIDB4OTc3YSwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OGJmNywgMHg5N2IyLCAweGZmZmQsCi0gICAgMHg4YzQ3LCAweGZmZmQsIDB4OTFlMCwg MHhlNDQwLCAweGZmZmQsIDB4ZThhNCwgMHg4YTRiLCAweDkwOGYsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhhNzUsIDB4ZThhNiwgMHhmZmZkLCAweGU4YTcsCi0gICAg MHhlOGE1LCAweDhjODQsIDB4ZmZmZCwgMHg4ZGRiLCAweDhmZTEsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHg4OTQyLCAweGZmZmQsIDB4ZmZmZCwgMHg5N2Q3LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGU4YTksCi0gICAgMHhlN2FjLCAweGZmZmQsIDB4ZThhOCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlOGFjLCAweGU4YWEsIDB4ZThh YiwgMHhmZmZkLCAweGU4YWQsIDB4ZmZmZCwgMHhlOGFlLCAweDk3ZWEsCi0gICAgMHhlOGFmLCAw eGU4YjAsIDB4ZmZmZCwgMHg5MGM3LCAweDk0YjksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHg5MDlkLCAweDhhZTUsIDB4ZmZmZCwgMHhmZmZkLCAweDk3NTksIDB4ODllYiwgMHg4ZjU3 LCAweDhjZDksCi0gICAgMHhmZmZkLCAweGU4YjMsIDB4ZmZmZCwgMHhlOGIyLCAweDhlOTMsIDB4 ZThiNCwgMHhlOGIxLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhlNDcsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZThiOCwgMHhlNWFiLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk5ZDQsIDB4 ZmZmZCwgMHg5MDk3LCAweGU4YjYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4OTdhMywgMHg5M2VmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHg4OTRhLCAweGZmZmQsIDB4OTBlMSwgMHg4ZWI0LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHg5NWI1LCAweGZmZmQsIDB4ODk1ZiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5N2ViLCAweDk3OGIsCi0gICAgMHhmZmZkLCAweGU4YjksIDB4ZmZmZCwgMHg5 MzY0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4ZWY5LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGU4YmEsIDB4ZmZmZCwgMHhlOGJiLCAweDkwNmIsCi0gICAgMHhl OGJjLCAweGZmZmQsIDB4OTdlYywgMHhmZmZkLCAweGZmZmQsIDB4ZThiNywgMHhlOGJlLCAweGU4 YzAsCi0gICAgMHhmZmZkLCAweGU4YmYsIDB4ZmZmZCwgMHhlOGJkLCAweGZmZmQsIDB4ZmZmZCwg MHhlOGMxLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU4YzIsIDB4ZmZmZCwgMHhmZmZkLCAweDkx OWEsIDB4ZmZmZCwgMHg4OWUwLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGU4YzMsIDB4ZmZmZCwgMHhmZmZkLCAweDk2YjYsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZThjNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhlOGM1LCAweGZmZmQsIDB4OTg0OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHg5ZTUwLCAweGU4YzYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZThj NywgMHhlOGM4LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZThjYywgMHhmZmZkLCAw eGU4YzksIDB4ZmZmZCwgMHhlOGNhLCAweGZmZmQsCi0gICAgMHhlOGNiLCAweGU4Y2QsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4OTBjMiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NmY1LCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweDkwYzMsIDB4ZmZmZCwgMHhmZmZkLCAweGU4Y2UsIDB4ZmZmZCwgMHg5NGYx LCAweGZmZmQsCi0gICAgMHhlOGNmLCAweGVhNzIsIDB4OTZjYSwgMHhmZmZkLCAweGU4ZDAsIDB4 ZmZmZCwgMHhlOGQxLCAweGZmZmQsCi0gICAgMHhlOGQyLCAweDhhNzYsIDB4ZmZmZCwgMHhlOGQ0 LCAweGZmZmQsIDB4OTA3OCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU4ZDUsIDB4 ZmZmZCwgMHhmZmZkLCAweDhjNDMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGU4ZDYsIDB4ZThkYSwgMHhmZmZkLCAweGU4ZDgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGU4ZDksIDB4ZmZmZCwgMHhmZmZkLCAweDhhOTMsIDB4ZThkNywgMHhl OGRiLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOGRjLCAweGZmZmQs IDB4ODhjNiwgMHhmZmZkLCAweGU4ZGQsCi0gICAgMHhlOGRlLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4ZmUyLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGU4ZGYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4 YjY2LCAweGZmZmQsIDB4ZmZmZCwgMHhlOGUyLCAweGZmZmQsIDB4ZmZmZCwgMHhlOGUxLCAweGZm ZmQsCi0gICAgMHhlOGUwLCAweGZmZmQsIDB4ZmZmZCwgMHhlNjkxLCAweGZmZmQsIDB4OTVkYSwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOGUzLCAweGU4 ZTQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhlOGU1LCAweGZmZmQsIDB4ZmZmZCwgMHhlOGU2LCAweGZmZmQsCi0gICAg MHhlOGU3LCAweGZmZmQsIDB4ZmZmZCwgMHhlOGU4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YWQ4LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGU4ZTksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZThlYSwgMHg5NDQyLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZThlYywgMHg4OWI5LCAweGZmZmQsIDB4ZThlZiwgMHhlOGVl LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OTQzLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDhiYmYsCi0gICAgMHhmZmZkLCAweDk1YzUsIDB4OTJiOCwgMHg4ZGEw LCAweGZmZmQsIDB4OGQ4MCwgMHg4Zjg3LCAweGZmZmQsCi0gICAgMHg5MDdiLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGU4ZjEsIDB4ZmZmZCwgMHhmZmZkLCAweGU4ZjAsCi0gICAgMHg5NzYx LCAweDhhZTYsIDB4OTRkMCwgMHg5M2RhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkwOWMs Ci0gICAgMHg5N2NjLCAweGZmZmQsIDB4OGM3YSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU4ZjQsIDB4ZmZmZCwgMHhmZmZkLCAweGU4ZjMs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDk2NmEsIDB4OTNhYSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDg5NmYsIDB4ZmZmZCwgMHhmZmZkLCAweGU4ZjUsCi0gICAgMHhl OGYyLCAweGZmZmQsIDB4ZmZmZCwgMHg5NTcwLCAweDk3OGEsIDB4ZThmNiwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlOGY3LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOGY5LCAweDkx ZTgsIDB4OGE3YSwgMHg4YTdiLCAweGU4ZjgsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDhhZTcsIDB4OGNiMCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4YWU4LCAweGZm ZmQsIDB4ZmZmZCwgMHg5MzVlLCAweGZmZmQsIDB4ZmZmZCwgMHg5N2RlLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDhjZGEsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOGZhLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGU4ZmIsCi0gICAgMHhlOGZjLCAweGU5NDAsIDB4ZmZmZCwgMHhlOTQyLCAw eGU5NDEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5NTk3 LCAweGZmZmQsIDB4ZTk0MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5NDQs Ci0gICAgMHhmZmZkLCAweGU5NDUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl OTQ2LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl OTQ4LCAweGU5NDcsIDB4ZmZmZCwgMHhlOTQ5LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NGYyLCAweGUzY2EsIDB4ZmZmZCwg MHhmZmZkLCAweDkwNDgsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGI1MSwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU5NGEsIDB4ZmZmZCwg MHhlOTRiLCAweGZmZmQsIDB4OTlhYSwgMHg5ZjVhLCAweDk0ZDEsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ODhmOSwgMHhmZmZkLCAweDg4YjksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhlOTQsIDB4OTY0ZiwgMHg4ZmZjLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOTRjLCAweGZmZmQsIDB4OTZk ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU5NGQsIDB4OTc3YiwgMHhmZmZkLCAw eDg5NjEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4ZTYwLCAweGZmZmQsIDB4ZTk0 ZSwgMHg4OWVjLCAweGU5NGYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlOTUwLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTk1MiwgMHhlOTUzLCAweGZmZmQsCi0g ICAgMHhlOTU1LCAweGU5NTEsIDB4ZmZmZCwgMHhmZmZkLCAweGU5NTQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHg4YWQ5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5NTYsIDB4 ZmZmZCwgMHhlOTU3LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTk1OCwgMHhlOTU5LCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZTk1YSwgMHhmZmZkLCAweGZmZmQsIDB4ZTk1YywgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGU5NWIsIDB4ZmZmZCwgMHhlOTVlLCAweGU5NjEsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhlOTVkLCAweGU5NWYsIDB4ZTk2MCwgMHhmZmZkLCAweGZmZmQs IDB4ZTk2MiwgMHhmZmZkLCAweDhiYzAsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZWYxLCAw eGU5NjMsCi0gICAgMHhlOTY0LCAweDhkODEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZTk2NSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4YTVkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDk0NmUsIDB4ZTk2NiwgMHhlOTY3LCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5Mjc5LCAweDkzZTksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5NjgsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDk0OWQsIDB4ZmZmZCwgMHhmZmZkLCAweDkxY2EsIDB4 ODk3NywgMHg4YmVjLCAweGZmZmQsCi0gICAgMHg4YmVkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5MjkzLCAweGU5NmQsIDB4 OGJlZSwgMHhmZmZkLCAweGZmZmQsIDB4ODllZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlOTZj LCAweGZmZmQsIDB4ZmZmZCwgMHhlOTZhLCAweGZmZmQsIDB4ZTk2YiwgMHhmZmZkLCAweGU5Njks Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTk3NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZTk2ZSwgMHhlOTZmLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU5NzAsIDB4ZTk3MSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlOTczLCAweGZmZmQs IDB4ZmZmZCwgMHhlOTcyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhmNzgsCi0gICAgMHhm ZmZkLCAweGU5NzQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTk3NiwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg4YjUyLCAweGU5NzUsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTE5YiwgMHg4Y2IxLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU5NzgsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHg5MWNiLCAweGZmZmQsIDB4ZmZmZCwgMHhlOTc5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHg5M2FiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGU5N2EsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlOTgwLCAweGZmZmQsCi0gICAgMHhlOTdkLCAweGZmZmQsIDB4ZTk3 YywgMHhlOTdlLCAweGZmZmQsIDB4ZTk3YiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTk4MiwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTk4MSwgMHhmZmZk LCAweGU5ODQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OGJjMSwgMHhlOTgzLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGU5ODUsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTk4NiwgMHhmZmZk LCAweGU5ODgsIDB4ZTk4NywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU5ODksIDB4 ZTk4YiwgMHhlOThhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHg4ZDljLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZTk4YywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlOThkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4YTViLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5OGUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhlOThmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkwOTEsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGU5OTAsCi0gICAgMHhmZmZkLCAweGU5OTEsIDB4ZmZmZCwgMHhlOTkyLCAw eGU5OTMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4ZDgyLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOTk0LCAweGU5OTUsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZTk5NiwgMHhlOTk3LCAweGZmZmQsIDB4ZmZmZCwgMHhlOTk4LCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4OTRhZiwgMHhlOTlhLCAweGZmZmQsIDB4OTU0NSwgMHhlOTli LCAweGU5OTksCi0gICAgMHhmZmZkLCAweGU5OWQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5OWMsIDB4 ZmZmZCwgMHhmZmZkLCAweGU5OWUsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOTlm LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOWEwLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhlOWExLCAweGZmZmQsIDB4ZTlhMiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGU5YTMsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTlhNCwgMHhl OWE1LCAweGZmZmQsIDB4ZTlhNiwgMHhmZmZkLCAweGU5YTcsCi0gICAgMHhlOWE4LCAweGU5YTks IDB4ZTlhYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOWFiLCAweGU5YWMsCi0gICAgMHhm ZmZkLCAweDlmNTQsIDB4ZTlhZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMmY2LCAweDhiNTMsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDhhNDAsIDB4OGRiMCwgMHhlOWFmLCAweGU5 YWUsIDB4OTZhMywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZTliMSwgMHhlOWIyLCAweGU5YjAsCi0gICAgMHhmZmZkLCAweGU5 YjMsIDB4ZmZmZCwgMHhmZmZkLCAweDk2ODIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhlOWI0LCAweGZmZmQsIDB4OGI5YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk4NDQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGU5YjUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOWI3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg4OGJjLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU5YjgsIDB4OTVhOSwgMHhlOWI2 LCAweGZmZmQsIDB4ZmZmZCwgMHhlOWI5LCAweGU5YmEsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5YmIsCi0gICAgMHhlOWJj LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhlOWJkLCAweGZmZmQsIDB4OTY4ZSwgMHg4ZTRjLCAweGZmZmQsIDB4OGRmOCwgMHg5 MTRlLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5YmUs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU5YzEsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlOWJmLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOWMyLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweDhjZWYsIDB4ZTljMCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5 YzMsCi0gICAgMHhmZmZkLCAweGU5YzQsIDB4ZTljNSwgMHhmZmZkLCAweGU5YzksIDB4ZmZmZCwg MHg4ZTQ5LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MWUyLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU5Y2EsIDB4ZTljNywg MHhlOWM2LCAweGU5YzgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg4YzdlLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhlOWNlLCAweGU5Y2QsIDB4ZTljYywgMHhmZmZkLCAweGZmZmQsIDB4ODhiMSwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGU5ZDgsIDB4ZmZmZCwgMHhlOWQ0LCAweGZmZmQsCi0gICAgMHhlOWQ1LCAweGU5ZDEsIDB4ZTlk NywgMHhmZmZkLCAweGU5ZDMsIDB4OGE4MiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5ODZiLCAw eGZmZmQsIDB4ZTlkNiwgMHhlOWQyLCAweGU5ZDAsIDB4ZTljZiwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOWRhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGU5ZGQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5ZGMsIDB4 ZTlkYiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OTU2OCwgMHhlOWQ5LCAweDg4ZjEsCi0gICAgMHhlOWRlLCAweGZmZmQsIDB4 ZTllMCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweDhhOGYsIDB4ZTljYiwgMHg4OTU2LCAweGZmZmQsIDB4ZmZmZCwgMHhlOWUyLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl OWUxLCAweGU5ZGYsCi0gICAgMHg5MjRjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTY5MCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk3ZDgsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZTllMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhl OWU0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5 ZTUsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhlOWU2LCAweGZmZmQsCi0gICAgMHhlOWU3LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OTJiOSwgMHhmZmZkLCAweGU5ZTgsCi0gICAgMHhmZmZkLCAweDk0YjUsIDB4ZmZmZCwgMHhl OWVkLCAweGU5ZTksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlOWVhLCAweGZmZmQs IDB4ZmZmZCwgMHg5NjUwLCAweDk2YzIsIDB4ZmZmZCwgMHg5M2NlLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOWVlLCAweGZmZmQsIDB4ZmZmZCwg MHhlOWVmLCAweDkzYmMsCi0gICAgMHhlOWVjLCAweGU5ZWIsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg4OWE4LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZTlmNywg MHhmZmZkLCAweGZmZmQsIDB4ZTlmNiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg4OTk1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5ZjQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOWYzLCAweGZmZmQsIDB4ZmZmZCwgMHhlOWYxLCAw eGZmZmQsCi0gICAgMHg4YTliLCAweGZmZmQsIDB4ZTlmMCwgMHg4ZWIwLCAweDg5YTcsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg4ZDgzLCAweGZmZmQsIDB4ZmZmZCwgMHhlOWZhLCAweGU5ZjksCi0gICAgMHhmZmZkLCAw eGU5ZjgsIDB4ZmZmZCwgMHhmZmZkLCAweGU5ZjUsIDB4ZmZmZCwgMHhlOWZiLCAweGZmZmQsCi0g ICAgMHhlOWZjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhlYTQ0LCAweGVhNDMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGVhNDUsIDB4ZmZmZCwgMHhmZmZk LCAweDg5NGMsIDB4ZWE0MCwgMHhlYTQxLCAweGZmZmQsCi0gICAgMHg4ZDk0LCAweDk2YjcsIDB4 ZmZmZCwgMHhmZmZkLCAweGVhNDIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk2NTEsIDB4ZmZmZCwgMHhmZmZkLCAweGVhNGEs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZWE0NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZWE0YiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGVhNDgsCi0gICAgMHhmZmZkLCAweGVhNDcs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhjN2IsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZWE0YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGVh NGQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGVhNGUsIDB4ZmZmZCwg MHhlYTQ5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5ZjIsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZWE0ZiwgMHhmZmZkLCAweDkyZGYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhlYTUzLCAweGZmZmQsIDB4ZWE1NCwgMHhlYTUyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGVhNTEsIDB4ZWE1NywgMHhmZmZkLCAweGVhNTAsIDB4ZmZm ZCwgMHhlYTU1LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGVhNTYsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhlYTU5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGVhNTgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlYTVi LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZWE1YywgMHhmZmZkLCAweGVhNWQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4OTg2OCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlYTVhLCAweDkxZTksIDB4 OGRlYiwgMHhmZmZkLCAweGZmZmQsIDB4ZWE1ZSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZWE1ZiwgMHhl YTYwLCAweGZmZmQsIDB4ZmZmZCwgMHhlYTYxLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZWE2MiwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHg4Y2IyLCAweGVhNjMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZWE2NCwgMHhmZmZk LCAweDhlYWQsCi0gICAgMHhmZmZkLCAweGVhNjUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlYTY2LCAweGZmZmQsIDB4ZmZmZCwgMHhlYTY3 LCAweGVhNjgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGVhNmIsIDB4 ZWE2OSwgMHg5ODViLCAweGZmZmQsIDB4ZWE2YSwgMHhmZmZkLCAweDk3ZWQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZWE2YywgMHhmZmZkLCAweDk3ZDks Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZWE2ZCwgMHg5 NDllLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGVhNmUsIDB4ZWE3MCwgMHhmZmZkLCAweGZmZmQs IDB4ZWE3MSwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlYTZmLCAweDhkOGQs IDB4OTZjYiwgMHg5NjgzLCAweDliZjUsIDB4ZmZmZCwgMHg5ZjgwLCAweDk2OWIsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg5YTksIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGVhNzMsIDB4OGI2Ziwg MHhlYTc0LCAweGVhNzUsCi0gICAgMHhlYTc2LCAweGZmZmQsIDB4OGQ5NSwgMHhmZmZkLCAweGVh NzcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlMGQyLCAweDk2ZDksIDB4ZmZmZCwg MHg5MWUxLCAweGVhNzgsIDB4ZWE3YSwgMHhlYTc5LCAweGZmZmQsCi0gICAgMHhlYTdiLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZWE3YywgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhlYTdkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGVhN2UsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGVhODAsIDB4ZmZm ZCwgMHhlYTgxLCAweGVhODIsCi0gICAgMHhmZmZkLCAweGVhODMsIDB4ZmZmZCwgMHhlYTg0LCAw eGVhODUsIDB4ZWE4NiwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGVhODcsCi0gICAgMHhlYTg4LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MzQzLCAweGZmZmQsCi0g ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4Y2RiLCAweGZmZmQsIDB4ZWE4YSwgMHhmZmZk LCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHg5MTZjLCAweGVhOGIsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGVhOGMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NTQwLCAweGZmZmQsIDB4ZmZmZCwgMHhl YThkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZWE4ZSwgMHhl MjU2LCAweGZmZmQsIDB4ZmZmZCwgMHhlNmQ4LCAweGU4ZWIsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZWE4ZiwgMHhmZmZkLCAweGVhOTAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGVh OTIsCi0gICAgMHhlYTkzLCAweGVhOTQsIDB4OTdlZSwgMHhlYTkxLCAweGZmZmQsIDB4ZmZmZCwg MHhlYTk1LCAweGVhOTYsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZWE5OCwgMHhmZmZkLCAweGVh OTcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZWE5YSwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlYTliLCAweGVhOTksCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTdi NCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZWE5YywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGVhOWQsIDB4ZTI3MywgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhlYTllLCAw eDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAKLX07 Ci0KLSNlbmRpZiAvKiBLQU5KSSAqLwotCi0vKiBCbGFoLXRvLVVuaWNvZGUgdHJhbnNsYXRpb24g dGFibGVzICovCi0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV90cmFuc3BhcmVudCA9IHsKLSAgICAy NTYsIFgyVV9DWEcsIDAsIDAsICJUcmFuc3BhcmVudCIsICJ0cmFuc3BhcmVudCIsIDAsICIiLAot ICAgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0gICAg MHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKLSAgICAweDEw LCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAotICAgIDB4MTgsIDB4 MTksIDB4MUEsIDB4MUIsIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYsCi0gICAgMHgyMCwgMHgyMSwg MHgyMiwgMHgyMywgMHgyNCwgMHgyNSwgMHgyNiwgMHgyNywKLSAgICAweDI4LCAweDI5LCAweDJB LCAweDJCLCAweDJDLCAweDJELCAweDJFLCAweDJGLAotICAgIDB4MzAsIDB4MzEsIDB4MzIsIDB4 MzMsIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsCi0gICAgMHgzOCwgMHgzOSwgMHgzQSwgMHgzQiwg MHgzQywgMHgzRCwgMHgzRSwgMHgzRiwKLSAgICAweDQwLCAweDQxLCAweDQyLCAweDQzLCAweDQ0 LCAweDQ1LCAweDQ2LCAweDQ3LAotICAgIDB4NDgsIDB4NDksIDB4NEEsIDB4NEIsIDB4NEMsIDB4 NEQsIDB4NEUsIDB4NEYsCi0gICAgMHg1MCwgMHg1MSwgMHg1MiwgMHg1MywgMHg1NCwgMHg1NSwg MHg1NiwgMHg1NywKLSAgICAweDU4LCAweDU5LCAweDVBLCAweDVCLCAweDVDLCAweDVELCAweDVF LCAweDVGLAotICAgIDB4NjAsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4 NjcsCi0gICAgMHg2OCwgMHg2OSwgMHg2QSwgMHg2QiwgMHg2QywgMHg2RCwgMHg2RSwgMHg2RiwK LSAgICAweDcwLCAweDcxLCAweDcyLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LAotICAg IDB4NzgsIDB4NzksIDB4N0EsIDB4N0IsIDB4N0MsIDB4N0QsIDB4N0UsIDB4N0YsCi0gICAgMHg4 MCwgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKLSAgICAweDg4LCAw eDg5LCAweDhBLCAweDhCLCAweDhDLCAweDhELCAweDhFLCAweDhGLAotICAgIDB4OTAsIDB4OTEs IDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsCi0gICAgMHg5OCwgMHg5OSwgMHg5 QSwgMHg5QiwgMHg5QywgMHg5RCwgMHg5RSwgMHg5RiwKLSAgICAweEEwLCAweEExLCAweEEyLCAw eEEzLCAweEE0LCAweEE1LCAweEE2LCAweEE3LAotICAgIDB4QTgsIDB4QTksIDB4QUEsIDB4QUIs IDB4QUMsIDB4QUQsIDB4QUUsIDB4QUYsCi0gICAgMHhCMCwgMHhCMSwgMHhCMiwgMHhCMywgMHhC NCwgMHhCNSwgMHhCNiwgMHhCNywKLSAgICAweEI4LCAweEI5LCAweEJBLCAweEJCLCAweEJDLCAw eEJELCAweEJFLCAweEJGLAotICAgIDB4QzAsIDB4QzEsIDB4QzIsIDB4QzMsIDB4QzQsIDB4QzUs IDB4QzYsIDB4QzcsCi0gICAgMHhDOCwgMHhDOSwgMHhDQSwgMHhDQiwgMHhDQywgMHhDRCwgMHhD RSwgMHhDRiwKLSAgICAweEQwLCAweEQxLCAweEQyLCAweEQzLCAweEQ0LCAweEQ1LCAweEQ2LCAw eEQ3LAotICAgIDB4RDgsIDB4RDksIDB4REEsIDB4REIsIDB4REMsIDB4REQsIDB4REUsIDB4REYs Ci0gICAgMHhFMCwgMHhFMSwgMHhFMiwgMHhFMywgMHhFNCwgMHhFNSwgMHhFNiwgMHhFNywKLSAg ICAweEU4LCAweEU5LCAweEVBLCAweEVCLCAweEVDLCAweEVELCAweEVFLCAweEVGLAotICAgIDB4 RjAsIDB4RjEsIDB4RjIsIDB4RjMsIDB4RjQsIDB4RjUsIDB4RjYsIDB4RjcsCi0gICAgMHhGOCwg MHhGOSwgMHhGQSwgMHhGQiwgMHhGQywgMHhGRCwgMHhGRSwgMHhGRgotfTsKLQotLyogNy1iaXQg Y2hhcmFjdGVyIHNldHM6IElTTyA2NDYsIERFQyBOUkNzLCBTaG9ydCBLT0ksIGFuZCBIZWJyZXct NyAqLwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfYXNjaWkgPSB7Ci0gICAgOTQsIDMzLCBYMlVf SVNPfFgyVV9TVEQsIEFMX1JPTUFOLCAiVVMgQVNDSUkiLCAiYXNjaWkiLCA2LCAiQiIsCi0gICAg ICAgICAgICAweDAwMjEsIDB4MDAyMiwgMHgwMDIzLCAweDAwMjQsIDB4MDAyNSwgMHgwMDI2LCAw eDAwMjcsCi0gICAgMHgwMDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJiLCAweDAwMmMsIDB4MDAy ZCwgMHgwMDJlLCAweDAwMmYsCi0gICAgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAw eDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsCi0gICAgMHgwMDM4LCAweDAwMzksIDB4MDAz YSwgMHgwMDNiLCAweDAwM2MsIDB4MDAzZCwgMHgwMDNlLCAweDAwM2YsCi0gICAgMHgwMDQwLCAw eDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsCi0g ICAgMHgwMDQ4LCAweDAwNDksIDB4MDA0YSwgMHgwMDRiLCAweDAwNGMsIDB4MDA0ZCwgMHgwMDRl LCAweDAwNGYsCi0gICAgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4 MDA1NSwgMHgwMDU2LCAweDAwNTcsCi0gICAgMHgwMDU4LCAweDAwNTksIDB4MDA1YSwgMHgwMDVi LCAweDAwNWMsIDB4MDA1ZCwgMHgwMDVlLCAweDAwNWYsCi0gICAgMHgwMDYwLCAweDAwNjEsIDB4 MDA2MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcsCi0gICAgMHgwMDY4 LCAweDAwNjksIDB4MDA2YSwgMHgwMDZiLCAweDAwNmMsIDB4MDA2ZCwgMHgwMDZlLCAweDAwNmYs Ci0gICAgMHgwMDcwLCAweDAwNzEsIDB4MDA3MiwgMHgwMDczLCAweDAwNzQsIDB4MDA3NSwgMHgw MDc2LCAweDAwNzcsCi0gICAgMHgwMDc4LCAweDAwNzksIDB4MDA3YSwgMHgwMDdiLCAweDAwN2Ms IDB4MDA3ZCwgMHgwMDdlCi19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfYnJpdGlzaCA9IHsK LSAgICA5NCwgMzMsIFgyVV9JU098WDJVX1NURCwgQUxfUk9NQU4sICJCcml0aXNoIElTTyA2NDYi LCAiYnJpdGlzaCIsIDEsICJBIiwKLSAgICAgICAgICAgIDB4MDAyMSwgMHgwMDIyLCAweDAwYTMs IDB4MDAyNCwgMHgwMDI1LCAweDAwMjYsIDB4MDAyNywKLSAgICAweDAwMjgsIDB4MDAyOSwgMHgw MDJhLCAweDAwMmIsIDB4MDAyYywgMHgwMDJkLCAweDAwMmUsIDB4MDAyZiwKLSAgICAweDAwMzAs IDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywK LSAgICAweDAwMzgsIDB4MDAzOSwgMHgwMDNhLCAweDAwM2IsIDB4MDAzYywgMHgwMDNkLCAweDAw M2UsIDB4MDAzZiwKLSAgICAweDAwNDAsIDB4MDA0MSwgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwg MHgwMDQ1LCAweDAwNDYsIDB4MDA0NywKLSAgICAweDAwNDgsIDB4MDA0OSwgMHgwMDRhLCAweDAw NGIsIDB4MDA0YywgMHgwMDRkLCAweDAwNGUsIDB4MDA0ZiwKLSAgICAweDAwNTAsIDB4MDA1MSwg MHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywKLSAgICAweDAw NTgsIDB4MDA1OSwgMHgwMDVhLCAweDAwNWIsIDB4MDA1YywgMHgwMDVkLCAweDAwNWUsIDB4MDA1 ZiwKLSAgICAweDAwNjAsIDB4MDA2MSwgMHgwMDYyLCAweDAwNjMsIDB4MDA2NCwgMHgwMDY1LCAw eDAwNjYsIDB4MDA2NywKLSAgICAweDAwNjgsIDB4MDA2OSwgMHgwMDZhLCAweDAwNmIsIDB4MDA2 YywgMHgwMDZkLCAweDAwNmUsIDB4MDA2ZiwKLSAgICAweDAwNzAsIDB4MDA3MSwgMHgwMDcyLCAw eDAwNzMsIDB4MDA3NCwgMHgwMDc1LCAweDAwNzYsIDB4MDA3NywKLSAgICAweDAwNzgsIDB4MDA3 OSwgMHgwMDdhLCAweDAwN2IsIDB4MDA3YywgMHgwMDdkLCAweDAwN2UKLX07Ci0KLXN0cnVjdCB4 X3RvX3VuaWNvZGUgdV9kdXRjaCA9IHsKLSAgICA5NCwgMzMsIFgyVV9ERUN8WDJVX1NURCwgQUxf Uk9NQU4sICJEdXRjaCBOUkMiLCAiZHV0Y2giLCAwLCAiNCIsCi0gICAgICAgICAgICAweDAwMjEs IDB4MDAyMiwgMHgwMGEzLCAweDAwMjQsIDB4MDAyNSwgMHgwMDI2LCAweDAwMjcsCi0gICAgMHgw MDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJiLCAweDAwMmMsIDB4MDAyZCwgMHgwMDJlLCAweDAw MmYsCi0gICAgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwg MHgwMDM2LCAweDAwMzcsCi0gICAgMHgwMDM4LCAweDAwMzksIDB4MDAzYSwgMHgwMDNiLCAweDAw M2MsIDB4MDAzZCwgMHgwMDNlLCAweDAwM2YsCi0gICAgMHgwMGJlLCAweDAwNDEsIDB4MDA0Miwg MHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsCi0gICAgMHgwMDQ4LCAweDAw NDksIDB4MDA0YSwgMHgwMDRiLCAweDAwNGMsIDB4MDA0ZCwgMHgwMDRlLCAweDAwNGYsCi0gICAg MHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAw eDAwNTcsCi0gICAgMHgwMDU4LCAweDAwNTksIDB4MDA1YSwgMHgwMGZmLCAweDAwYmQsIDB4MDA3 YywgMHgwMDVlLCAweDAwNWYsCi0gICAgMHgwMDYwLCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAw eDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcsCi0gICAgMHgwMDY4LCAweDAwNjksIDB4MDA2 YSwgMHgwMDZiLCAweDAwNmMsIDB4MDA2ZCwgMHgwMDZlLCAweDAwNmYsCi0gICAgMHgwMDcwLCAw eDAwNzEsIDB4MDA3MiwgMHgwMDczLCAweDAwNzQsIDB4MDA3NSwgMHgwMDc2LCAweDAwNzcsCi0g ICAgMHgwMDc4LCAweDAwNzksIDB4MDA3YSwgMHgwMGE4LCAweDAwYTQsIDB4MDBiYywgMHgwMDI3 Ci19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfZmlubmlzaCA9IHsKLSAgICA5NCwgMzMsIFgy VV9ERUN8WDJVX1NURCwgQUxfUk9NQU4sICJGaW5uaXNoIE5SQyIsICJmaW5uaXNoIiwgMCwgIjVD IiwKLSAgICAgICAgICAgIDB4MDAyMSwgMHgwMDIyLCAweDAwMjMsIDB4MDAyNCwgMHgwMDI1LCAw eDAwMjYsIDB4MDAyNywKLSAgICAweDAwMjgsIDB4MDAyOSwgMHgwMDJhLCAweDAwMmIsIDB4MDAy YywgMHgwMDJkLCAweDAwMmUsIDB4MDAyZiwKLSAgICAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAw eDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywKLSAgICAweDAwMzgsIDB4MDAz OSwgMHgwMDNhLCAweDAwM2IsIDB4MDAzYywgMHgwMDNkLCAweDAwM2UsIDB4MDAzZiwKLSAgICAw eDAwNDAsIDB4MDA0MSwgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4 MDA0NywKLSAgICAweDAwNDgsIDB4MDA0OSwgMHgwMDRhLCAweDAwNGIsIDB4MDA0YywgMHgwMDRk LCAweDAwNGUsIDB4MDA0ZiwKLSAgICAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4 MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywKLSAgICAweDAwNTgsIDB4MDA1OSwgMHgwMDVh LCAweDAwYzQsIDB4MDBkNiwgMHgwMGM1LCAweDAwZGMsIDB4MDA1ZiwKLSAgICAweDAwZTksIDB4 MDA2MSwgMHgwMDYyLCAweDAwNjMsIDB4MDA2NCwgMHgwMDY1LCAweDAwNjYsIDB4MDA2NywKLSAg ICAweDAwNjgsIDB4MDA2OSwgMHgwMDZhLCAweDAwNmIsIDB4MDA2YywgMHgwMDZkLCAweDAwNmUs IDB4MDA2ZiwKLSAgICAweDAwNzAsIDB4MDA3MSwgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwgMHgw MDc1LCAweDAwNzYsIDB4MDA3NywKLSAgICAweDAwNzgsIDB4MDA3OSwgMHgwMDdhLCAweDAwZTQs IDB4MDBmNiwgMHgwMGU1LCAweDAwZmMKLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV9mcmVu Y2ggPSB7Ci0gICAgOTQsIDMzLCBYMlVfSVNPfFgyVV9TVEQsIEFMX1JPTUFOLCAiRnJlbmNoIElT TyA2NDYiLCAiZnJlbmNoIiwgMCwgImZSIiwKLSAgICAgICAgICAgIDB4MDAyMSwgMHgwMDIyLCAw eDAwYTMsIDB4MDAyNCwgMHgwMDI1LCAweDAwMjYsIDB4MDAyNywKLSAgICAweDAwMjgsIDB4MDAy OSwgMHgwMDJhLCAweDAwMmIsIDB4MDAyYywgMHgwMDJkLCAweDAwMmUsIDB4MDAyZiwKLSAgICAw eDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4 MDAzNywKLSAgICAweDAwMzgsIDB4MDAzOSwgMHgwMDNhLCAweDAwM2IsIDB4MDAzYywgMHgwMDNk LCAweDAwM2UsIDB4MDAzZiwKLSAgICAweDAwZTAsIDB4MDA0MSwgMHgwMDQyLCAweDAwNDMsIDB4 MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywKLSAgICAweDAwNDgsIDB4MDA0OSwgMHgwMDRh LCAweDAwNGIsIDB4MDA0YywgMHgwMDRkLCAweDAwNGUsIDB4MDA0ZiwKLSAgICAweDAwNTAsIDB4 MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywKLSAg ICAweDAwNTgsIDB4MDA1OSwgMHgwMDVhLCAweDAwYjAsIDB4MDBlNywgMHgwMGE3LCAweDAwNWUs IDB4MDA1ZiwKLSAgICAweDAwNjAsIDB4MDA2MSwgMHgwMDYyLCAweDAwNjMsIDB4MDA2NCwgMHgw MDY1LCAweDAwNjYsIDB4MDA2NywKLSAgICAweDAwNjgsIDB4MDA2OSwgMHgwMDZhLCAweDAwNmIs IDB4MDA2YywgMHgwMDZkLCAweDAwNmUsIDB4MDA2ZiwKLSAgICAweDAwNzAsIDB4MDA3MSwgMHgw MDcyLCAweDAwNzMsIDB4MDA3NCwgMHgwMDc1LCAweDAwNzYsIDB4MDA3NywKLSAgICAweDAwNzgs IDB4MDA3OSwgMHgwMDdhLCAweDAwZTksIDB4MDBmOSwgMHgwMGU4LCAweDAwYTgKLX07Ci0KLXN0 cnVjdCB4X3RvX3VuaWNvZGUgdV9mcl9jYW5hZGlhbiA9IHsKLSA5NCwzMyxYMlVfREVDfFgyVV9T VEQsQUxfUk9NQU4sIkZyZW5jaCBDYW5hZGlhbiBOUkMiLCJjYW5hZGlhbi1mcmVuY2giLDAsIjlR IiwKLSAgICAgICAgICAgIDB4MDAyMSwgMHgwMDIyLCAweDAwMjMsIDB4MDAyNCwgMHgwMDI1LCAw eDAwMjYsIDB4MDAyNywKLSAgICAweDAwMjgsIDB4MDAyOSwgMHgwMDJhLCAweDAwMmIsIDB4MDAy YywgMHgwMDJkLCAweDAwMmUsIDB4MDAyZiwKLSAgICAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAw eDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywKLSAgICAweDAwMzgsIDB4MDAz OSwgMHgwMDNhLCAweDAwM2IsIDB4MDAzYywgMHgwMDNkLCAweDAwM2UsIDB4MDAzZiwKLSAgICAw eDAwZTAsIDB4MDA0MSwgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4 MDA0NywKLSAgICAweDAwNDgsIDB4MDA0OSwgMHgwMDRhLCAweDAwNGIsIDB4MDA0YywgMHgwMDRk LCAweDAwNGUsIDB4MDA0ZiwKLSAgICAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4 MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywKLSAgICAweDAwNTgsIDB4MDA1OSwgMHgwMDVh LCAweDAwZTIsIDB4MDBlNywgMHgwMGVhLCAweDAwZWUsIDB4MDA1ZiwKLSAgICAweDAwZjQsIDB4 MDA2MSwgMHgwMDYyLCAweDAwNjMsIDB4MDA2NCwgMHgwMDY1LCAweDAwNjYsIDB4MDA2NywKLSAg ICAweDAwNjgsIDB4MDA2OSwgMHgwMDZhLCAweDAwNmIsIDB4MDA2YywgMHgwMDZkLCAweDAwNmUs IDB4MDA2ZiwKLSAgICAweDAwNzAsIDB4MDA3MSwgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwgMHgw MDc1LCAweDAwNzYsIDB4MDA3NywKLSAgICAweDAwNzgsIDB4MDA3OSwgMHgwMDdhLCAweDAwZTks IDB4MDBmOSwgMHgwMGU4LCAweDAwZmIKLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV9nZXJt YW4gPSB7Ci0gICAgOTQsIDMzLCBYMlVfSVNPfFgyVV9TVEQsIEFMX1JPTUFOLCAiR2VybWFuIElT TyA2NDYiLCAiZ2VybWFuIiwgMjEsICJLIiwKLSAgICAgICAgICAgIDB4MDAyMSwgMHgwMDIyLCAw eDAwMjMsIDB4MDAyNCwgMHgwMDI1LCAweDAwMjYsIDB4MDAyNywKLSAgICAweDAwMjgsIDB4MDAy OSwgMHgwMDJhLCAweDAwMmIsIDB4MDAyYywgMHgwMDJkLCAweDAwMmUsIDB4MDAyZiwKLSAgICAw eDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4 MDAzNywKLSAgICAweDAwMzgsIDB4MDAzOSwgMHgwMDNhLCAweDAwM2IsIDB4MDAzYywgMHgwMDNk LCAweDAwM2UsIDB4MDAzZiwKLSAgICAweDAwYTcsIDB4MDA0MSwgMHgwMDQyLCAweDAwNDMsIDB4 MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywKLSAgICAweDAwNDgsIDB4MDA0OSwgMHgwMDRh LCAweDAwNGIsIDB4MDA0YywgMHgwMDRkLCAweDAwNGUsIDB4MDA0ZiwKLSAgICAweDAwNTAsIDB4 MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywKLSAg ICAweDAwNTgsIDB4MDA1OSwgMHgwMDVhLCAweDAwYzQsIDB4MDBkNiwgMHgwMGRjLCAweDAwNWUs IDB4MDA1ZiwKLSAgICAweDAwNjAsIDB4MDA2MSwgMHgwMDYyLCAweDAwNjMsIDB4MDA2NCwgMHgw MDY1LCAweDAwNjYsIDB4MDA2NywKLSAgICAweDAwNjgsIDB4MDA2OSwgMHgwMDZhLCAweDAwNmIs IDB4MDA2YywgMHgwMDZkLCAweDAwNmUsIDB4MDA2ZiwKLSAgICAweDAwNzAsIDB4MDA3MSwgMHgw MDcyLCAweDAwNzMsIDB4MDA3NCwgMHgwMDc1LCAweDAwNzYsIDB4MDA3NywKLSAgICAweDAwNzgs IDB4MDA3OSwgMHgwMDdhLCAweDAwZTQsIDB4MDBmNiwgMHgwMGZjLCAweDAwZGYKLX07Ci0KLXN0 cnVjdCB4X3RvX3VuaWNvZGUgdV9odW5nYXJpYW4gPSB7Ci0gICAgOTQsIDMzLCBYMlVfSVNPfFgy VV9TVEQsIEFMX1JPTUFOLCAiSHVuZ2FyaWFuIElTTyA2NDYiLCJodW5nYXJpYW4iLDg2LCJpIiwK LSAgICAgICAgICAgIDB4MDAyMSwgMHgwMDIyLCAweDAwMjMsIDB4MDBhNCwgMHgwMDI1LCAweDAw MjYsIDB4MDAyNywKLSAgICAweDAwMjgsIDB4MDAyOSwgMHgwMDJhLCAweDAwMmIsIDB4MDAyYywg MHgwMDJkLCAweDAwMmUsIDB4MDAyZiwKLSAgICAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAweDAw MzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywKLSAgICAweDAwMzgsIDB4MDAzOSwg MHgwMDNhLCAweDAwM2IsIDB4MDAzYywgMHgwMDNkLCAweDAwM2UsIDB4MDAzZiwKLSAgICAweDAw YzEsIDB4MDA0MSwgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4MDA0 NywKLSAgICAweDAwNDgsIDB4MDA0OSwgMHgwMDRhLCAweDAwNGIsIDB4MDA0YywgMHgwMDRkLCAw eDAwNGUsIDB4MDA0ZiwKLSAgICAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1 NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywKLSAgICAweDAwNTgsIDB4MDA1OSwgMHgwMDVhLCAw eDAwYzksIDB4MDBkNiwgMHgwMGRjLCAweDAwNWUsIDB4MDA1ZiwKLSAgICAweDAwZTEsIDB4MDA2 MSwgMHgwMDYyLCAweDAwNjMsIDB4MDA2NCwgMHgwMDY1LCAweDAwNjYsIDB4MDA2NywKLSAgICAw eDAwNjgsIDB4MDA2OSwgMHgwMDZhLCAweDAwNmIsIDB4MDA2YywgMHgwMDZkLCAweDAwNmUsIDB4 MDA2ZiwKLSAgICAweDAwNzAsIDB4MDA3MSwgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwgMHgwMDc1 LCAweDAwNzYsIDB4MDA3NywKLSAgICAweDAwNzgsIDB4MDA3OSwgMHgwMDdhLCAweDAwZTksIDB4 MDBmNiwgMHgwMGZjLCAweDAwMjIsIDB4MDJkZAotfTsKLQotc3RydWN0IHhfdG9fdW5pY29kZSB1 X2l0YWxpYW4gPSB7Ci0gICAgOTQsIDMzLCBYMlVfSVNPfFgyVV9TVEQsIEFMX1JPTUFOLCAiSXRh bGlhbiBJU08gNjQ2IiwgIml0YWxpYW4iLCAxNSwgIlkiLAotICAgICAgICAgICAgMHgwMDIxLCAw eDAwMjIsIDB4MDBhMywgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwgMHgwMDI3LAotICAgIDB4MDAy OCwgMHgwMDI5LCAweDAwMmEsIDB4MDAyYiwgMHgwMDJjLCAweDAwMmQsIDB4MDAyZSwgMHgwMDJm LAotICAgIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4 MDAzNiwgMHgwMDM3LAotICAgIDB4MDAzOCwgMHgwMDM5LCAweDAwM2EsIDB4MDAzYiwgMHgwMDNj LCAweDAwM2QsIDB4MDAzZSwgMHgwMDNmLAotICAgIDB4MDBhNywgMHgwMDQxLCAweDAwNDIsIDB4 MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4MDA0NiwgMHgwMDQ3LAotICAgIDB4MDA0OCwgMHgwMDQ5 LCAweDAwNGEsIDB4MDA0YiwgMHgwMDRjLCAweDAwNGQsIDB4MDA0ZSwgMHgwMDRmLAotICAgIDB4 MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgw MDU3LAotICAgIDB4MDA1OCwgMHgwMDU5LCAweDAwNWEsIDB4MDBiMCwgMHgwMGU3LCAweDAwZTks IDB4MDA1ZSwgMHgwMDVmLAotICAgIDB4MDBmOSwgMHgwMDYxLCAweDAwNjIsIDB4MDA2MywgMHgw MDY0LCAweDAwNjUsIDB4MDA2NiwgMHgwMDY3LAotICAgIDB4MDA2OCwgMHgwMDY5LCAweDAwNmEs IDB4MDA2YiwgMHgwMDZjLCAweDAwNmQsIDB4MDA2ZSwgMHgwMDZmLAotICAgIDB4MDA3MCwgMHgw MDcxLCAweDAwNzIsIDB4MDA3MywgMHgwMDc0LCAweDAwNzUsIDB4MDA3NiwgMHgwMDc3LAotICAg IDB4MDA3OCwgMHgwMDc5LCAweDAwN2EsIDB4MDBlMCwgMHgwMGYyLCAweDAwZTgsIDB4MDBlYwot fTsKLQotc3RydWN0IHhfdG9fdW5pY29kZSB1X2ljZWxhbmRpYyA9IHsKLSAgICA5NCwgMzMsIFgy VV9ERUN8WDJVX1NURCwgQUxfUk9NQU4sICJJY2VsYW5kaWMgTlJDIiwgImljZWxhbmRpYyIsIDAs IE5VTEwsCi0gICAgICAgICAgICAweDAwMjEsIDB4MDAyMiwgMHgwMDIzLCAweDAwMjQsIDB4MDAy NSwgMHgwMDI2LCAweDAwMjcsCi0gICAgMHgwMDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJiLCAw eDAwMmMsIDB4MDAyZCwgMHgwMDJlLCAweDAwMmYsCi0gICAgMHgwMDMwLCAweDAwMzEsIDB4MDAz MiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsCi0gICAgMHgwMDM4LCAw eDAwMzksIDB4MDAzYSwgMHgwMDNiLCAweDAwM2MsIDB4MDAzZCwgMHgwMDNlLCAweDAwM2YsCi0g ICAgMHgwMGRlLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2 LCAweDAwNDcsCi0gICAgMHgwMDQ4LCAweDAwNDksIDB4MDA0YSwgMHgwMDRiLCAweDAwNGMsIDB4 MDA0ZCwgMHgwMDRlLCAweDAwNGYsCi0gICAgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUz LCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsCi0gICAgMHgwMDU4LCAweDAwNTksIDB4 MDA1YSwgMHgwMGYwLCAweDAwZDgsIDB4MDBjNiwgMHgwMGQ2LCAweDAwNWYsCi0gICAgMHgwMGZl LCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcs Ci0gICAgMHgwMDY4LCAweDAwNjksIDB4MDA2YSwgMHgwMDZiLCAweDAwNmMsIDB4MDA2ZCwgMHgw MDZlLCAweDAwNmYsCi0gICAgMHgwMDcwLCAweDAwNzEsIDB4MDA3MiwgMHgwMDczLCAweDAwNzQs IDB4MDA3NSwgMHgwMDc2LCAweDAwNzcsCi0gICAgMHgwMDc4LCAweDAwNzksIDB4MDA3YSwgMHgw MGYwLCAweDAwN2MsIDB4MDBlNiwgMHgwMGY2Ci19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVf amlzMDIwMXIgPSB7Ci0gICAgOTQsIDMzLCBYMlVfSVNPfFgyVV9TVEQsQUxfUk9NQU4sIkphcGFu ZXNlIFJvbWFuIiwiamFwYW5lc2Utcm9tYW4iLDE0LCJKIiwKLSAgICAgICAgICAgIDB4MDAyMSwg MHgwMDIyLCAweDAwMjMsIDB4MDAyNCwgMHgwMDI1LCAweDAwMjYsIDB4MDAyNywKLSAgICAweDAw MjgsIDB4MDAyOSwgMHgwMDJhLCAweDAwMmIsIDB4MDAyYywgMHgwMDJkLCAweDAwMmUsIDB4MDAy ZiwKLSAgICAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAw eDAwMzYsIDB4MDAzNywKLSAgICAweDAwMzgsIDB4MDAzOSwgMHgwMDNhLCAweDAwM2IsIDB4MDAz YywgMHgwMDNkLCAweDAwM2UsIDB4MDAzZiwKLSAgICAweDAwNDAsIDB4MDA0MSwgMHgwMDQyLCAw eDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywKLSAgICAweDAwNDgsIDB4MDA0 OSwgMHgwMDRhLCAweDAwNGIsIDB4MDA0YywgMHgwMDRkLCAweDAwNGUsIDB4MDA0ZiwKLSAgICAw eDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4 MDA1NywKLSAgICAweDAwNTgsIDB4MDA1OSwgMHgwMDVhLCAweDAwNWIsIDB4MDBhNSwgMHgwMDVk LCAweDAwNWUsIDB4MDA1ZiwKLSAgICAweDAwNjAsIDB4MDA2MSwgMHgwMDYyLCAweDAwNjMsIDB4 MDA2NCwgMHgwMDY1LCAweDAwNjYsIDB4MDA2NywKLSAgICAweDAwNjgsIDB4MDA2OSwgMHgwMDZh LCAweDAwNmIsIDB4MDA2YywgMHgwMDZkLCAweDAwNmUsIDB4MDA2ZiwKLSAgICAweDAwNzAsIDB4 MDA3MSwgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwgMHgwMDc1LCAweDAwNzYsIDB4MDA3NywKLSAg ICAweDAwNzgsIDB4MDA3OSwgMHgwMDdhLCAweDAwN2IsIDB4MDA3YywgMHgwMDdkLCAweDIwM2UK LX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV9qaXMwMjAxayA9IHsKLSAgICA5NCwgMzMsIFgy VV9JU098WDJVX1NURCxBTF9LQU5BLCJKYXBhbmVzZSBLYXRha2FuYSIsICJrYXRha2FuYSIsIDEz LCAiSSIsCi0gICAgICAgICAgICAweGZmNjEsIDB4ZmY2MiwgMHhmZjYzLCAweGZmNjQsIDB4ZmY2 NSwgMHhmZjY2LCAweGZmNjcsCi0gICAgMHhmZjY4LCAweGZmNjksIDB4ZmY2YSwgMHhmZjZiLCAw eGZmNmMsIDB4ZmY2ZCwgMHhmZjZlLCAweGZmNmYsCi0gICAgMHhmZjcwLCAweGZmNzEsIDB4ZmY3 MiwgMHhmZjczLCAweGZmNzQsIDB4ZmY3NSwgMHhmZjc2LCAweGZmNzcsCi0gICAgMHhmZjc4LCAw eGZmNzksIDB4ZmY3YSwgMHhmZjdiLCAweGZmN2MsIDB4ZmY3ZCwgMHhmZjdlLCAweGZmN2YsCi0g ICAgMHhmZjgwLCAweGZmODEsIDB4ZmY4MiwgMHhmZjgzLCAweGZmODQsIDB4ZmY4NSwgMHhmZjg2 LCAweGZmODcsCi0gICAgMHhmZjg4LCAweGZmODksIDB4ZmY4YSwgMHhmZjhiLCAweGZmOGMsIDB4 ZmY4ZCwgMHhmZjhlLCAweGZmOGYsCi0gICAgMHhmZjkwLCAweGZmOTEsIDB4ZmY5MiwgMHhmZjkz LCAweGZmOTQsIDB4ZmY5NSwgMHhmZjk2LCAweGZmOTcsCi0gICAgMHhmZjk4LCAweGZmOTksIDB4 ZmY5YSwgMHhmZjliLCAweGZmOWMsIDB4ZmY5ZCwgMHhmZjllLCAweGZmOWYsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkCi19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVf bm9yd2VnaWFuID0geyAgICAgLyogU2FtZSBhcyBEYW5pc2ggKi8KLSAgICA5NCwzMyxYMlVfSVNP fFgyVV9TVEQsQUxfUk9NQU4sIk5vcndlZ2lhbiBJU08gNjQ2IiwgIm5vcndlZ2lhbiIsIDYwLCAi YEU2IiwKLSAgICAgICAgICAgIDB4MDAyMSwgMHgwMDIyLCAweDAwMjMsIDB4MDAyNCwgMHgwMDI1 LCAweDAwMjYsIDB4MDAyNywKLSAgICAweDAwMjgsIDB4MDAyOSwgMHgwMDJhLCAweDAwMmIsIDB4 MDAyYywgMHgwMDJkLCAweDAwMmUsIDB4MDAyZiwKLSAgICAweDAwMzAsIDB4MDAzMSwgMHgwMDMy LCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywKLSAgICAweDAwMzgsIDB4 MDAzOSwgMHgwMDNhLCAweDAwM2IsIDB4MDAzYywgMHgwMDNkLCAweDAwM2UsIDB4MDAzZiwKLSAg ICAweDAwNDAsIDB4MDA0MSwgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYs IDB4MDA0NywKLSAgICAweDAwNDgsIDB4MDA0OSwgMHgwMDRhLCAweDAwNGIsIDB4MDA0YywgMHgw MDRkLCAweDAwNGUsIDB4MDA0ZiwKLSAgICAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMs IDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywKLSAgICAweDAwNTgsIDB4MDA1OSwgMHgw MDVhLCAweDAwYzYsIDB4MDBkOCwgMHgwMGM1LCAweDAwNWUsIDB4MDA1ZiwKLSAgICAweDAwNjAs IDB4MDA2MSwgMHgwMDYyLCAweDAwNjMsIDB4MDA2NCwgMHgwMDY1LCAweDAwNjYsIDB4MDA2NywK LSAgICAweDAwNjgsIDB4MDA2OSwgMHgwMDZhLCAweDAwNmIsIDB4MDA2YywgMHgwMDZkLCAweDAw NmUsIDB4MDA2ZiwKLSAgICAweDAwNzAsIDB4MDA3MSwgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwg MHgwMDc1LCAweDAwNzYsIDB4MDA3NywKLSAgICAweDAwNzgsIDB4MDA3OSwgMHgwMDdhLCAweDAw ZTYsIDB4MDBmOCwgMHgwMGU1LCAweDAwN2UKLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV9k YW5pc2ggPSB7ICAgICAgICAvKiBTYW1lIGFzIE5vcndlZ2lhbiAqLwotICAgIDk0LCAzMywgWDJV X0lTT3xYMlVfU1RELCBBTF9ST01BTiwgIkRhbmlzaCBJU08gNjQ2IiwgImRhbmlzaCIsIDYwLCAi YEU2IiwKLSAgICAgICAgICAgIDB4MDAyMSwgMHgwMDIyLCAweDAwMjMsIDB4MDAyNCwgMHgwMDI1 LCAweDAwMjYsIDB4MDAyNywKLSAgICAweDAwMjgsIDB4MDAyOSwgMHgwMDJhLCAweDAwMmIsIDB4 MDAyYywgMHgwMDJkLCAweDAwMmUsIDB4MDAyZiwKLSAgICAweDAwMzAsIDB4MDAzMSwgMHgwMDMy LCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywKLSAgICAweDAwMzgsIDB4 MDAzOSwgMHgwMDNhLCAweDAwM2IsIDB4MDAzYywgMHgwMDNkLCAweDAwM2UsIDB4MDAzZiwKLSAg ICAweDAwNDAsIDB4MDA0MSwgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYs IDB4MDA0NywKLSAgICAweDAwNDgsIDB4MDA0OSwgMHgwMDRhLCAweDAwNGIsIDB4MDA0YywgMHgw MDRkLCAweDAwNGUsIDB4MDA0ZiwKLSAgICAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMs IDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywKLSAgICAweDAwNTgsIDB4MDA1OSwgMHgw MDVhLCAweDAwYzYsIDB4MDBkOCwgMHgwMGM1LCAweDAwNWUsIDB4MDA1ZiwKLSAgICAweDAwNjAs IDB4MDA2MSwgMHgwMDYyLCAweDAwNjMsIDB4MDA2NCwgMHgwMDY1LCAweDAwNjYsIDB4MDA2NywK LSAgICAweDAwNjgsIDB4MDA2OSwgMHgwMDZhLCAweDAwNmIsIDB4MDA2YywgMHgwMDZkLCAweDAw NmUsIDB4MDA2ZiwKLSAgICAweDAwNzAsIDB4MDA3MSwgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwg MHgwMDc1LCAweDAwNzYsIDB4MDA3NywKLSAgICAweDAwNzgsIDB4MDA3OSwgMHgwMDdhLCAweDAw ZTYsIDB4MDBmOCwgMHgwMGU1LCAweDAwN2UKLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV9w b3J0dWd1ZXNlID0gewotICAgIDk0LDMzLFgyVV9JU098WDJVX1NURCxBTF9ST01BTiwiUG9ydHVn dWVzZSBJU08gNjQ2IiwicG9ydHVndWVzZSIsMTYsIkwlNiIsCi0gICAgICAgICAgICAweDAwMjEs IDB4MDAyMiwgMHgwMDIzLCAweDAwMjQsIDB4MDAyNSwgMHgwMDI2LCAweDAwMjcsCi0gICAgMHgw MDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJiLCAweDAwMmMsIDB4MDAyZCwgMHgwMDJlLCAweDAw MmYsCi0gICAgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwg MHgwMDM2LCAweDAwMzcsCi0gICAgMHgwMDM4LCAweDAwMzksIDB4MDAzYSwgMHgwMDNiLCAweDAw M2MsIDB4MDAzZCwgMHgwMDNlLCAweDAwM2YsCi0gICAgMHgwMDQwLCAweDAwNDEsIDB4MDA0Miwg MHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsCi0gICAgMHgwMDQ4LCAweDAw NDksIDB4MDA0YSwgMHgwMDRiLCAweDAwNGMsIDB4MDA0ZCwgMHgwMDRlLCAweDAwNGYsCi0gICAg MHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAw eDAwNTcsCi0gICAgMHgwMDU4LCAweDAwNTksIDB4MDA1YSwgMHgwMGM2LCAweDAwZDgsIDB4MDBj NSwgMHgwMDVlLCAweDAwNWYsCi0gICAgMHgwMDYwLCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAw eDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcsCi0gICAgMHgwMDY4LCAweDAwNjksIDB4MDA2 YSwgMHgwMDZiLCAweDAwNmMsIDB4MDA2ZCwgMHgwMDZlLCAweDAwNmYsCi0gICAgMHgwMDcwLCAw eDAwNzEsIDB4MDA3MiwgMHgwMDczLCAweDAwNzQsIDB4MDA3NSwgMHgwMDc2LCAweDAwNzcsCi0g ICAgMHgwMDc4LCAweDAwNzksIDB4MDA3YSwgMHgwMGU2LCAweDAwZjgsIDB4MDBlNSwgMHgwMDdl Ci19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfc3BhbmlzaCA9IHsKLSAgICA5NCwgMzMsIFgy VV9JU098WDJVX1NURCwgQUxfUk9NQU4sICJTcGFuaXNoIElTTyA2NDYiLCAic3BhbmlzaCIsIDE3 LCAiWiIsCi0gICAgICAgICAgICAweDAwMjEsIDB4MDAyMiwgMHgwMGEzLCAweDAwMjQsIDB4MDAy NSwgMHgwMDI2LCAweDAwMjcsCi0gICAgMHgwMDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJiLCAw eDAwMmMsIDB4MDAyZCwgMHgwMDJlLCAweDAwMmYsCi0gICAgMHgwMDMwLCAweDAwMzEsIDB4MDAz MiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsCi0gICAgMHgwMDM4LCAw eDAwMzksIDB4MDAzYSwgMHgwMDNiLCAweDAwM2MsIDB4MDAzZCwgMHgwMDNlLCAweDAwM2YsCi0g ICAgMHgwMGE3LCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2 LCAweDAwNDcsCi0gICAgMHgwMDQ4LCAweDAwNDksIDB4MDA0YSwgMHgwMDRiLCAweDAwNGMsIDB4 MDA0ZCwgMHgwMDRlLCAweDAwNGYsCi0gICAgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUz LCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsCi0gICAgMHgwMDU4LCAweDAwNTksIDB4 MDA1YSwgMHgwMGExLCAweDAwZDEsIDB4MDBiZiwgMHgwMDVlLCAweDAwNWYsCi0gICAgMHgwMDYw LCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcs Ci0gICAgMHgwMDY4LCAweDAwNjksIDB4MDA2YSwgMHgwMDZiLCAweDAwNmMsIDB4MDA2ZCwgMHgw MDZlLCAweDAwNmYsCi0gICAgMHgwMDcwLCAweDAwNzEsIDB4MDA3MiwgMHgwMDczLCAweDAwNzQs IDB4MDA3NSwgMHgwMDc2LCAweDAwNzcsCi0gICAgMHgwMDc4LCAweDAwNzksIDB4MDA3YSwgMHgw MGIwLCAweDAwZjEsIDB4MDBlNywgMHgwMDdlCi19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVf c3dlZGlzaCA9IHsKLSAgICA5NCwgMzMsIFgyVV9JU098WDJVX1NURCwgQUxfUk9NQU4sICJTd2Vk aXNoIElTTyA2NDYiLCAic3dlZGlzaCIsIDExLCAiSEciLAotICAgICAgICAgICAgMHgwMDIxLCAw eDAwMjIsIDB4MDAyMywgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwgMHgwMDI3LAotICAgIDB4MDAy OCwgMHgwMDI5LCAweDAwMmEsIDB4MDAyYiwgMHgwMDJjLCAweDAwMmQsIDB4MDAyZSwgMHgwMDJm LAotICAgIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4 MDAzNiwgMHgwMDM3LAotICAgIDB4MDAzOCwgMHgwMDM5LCAweDAwM2EsIDB4MDAzYiwgMHgwMDNj LCAweDAwM2QsIDB4MDAzZSwgMHgwMDNmLAotICAgIDB4MDBjOSwgMHgwMDQxLCAweDAwNDIsIDB4 MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4MDA0NiwgMHgwMDQ3LAotICAgIDB4MDA0OCwgMHgwMDQ5 LCAweDAwNGEsIDB4MDA0YiwgMHgwMDRjLCAweDAwNGQsIDB4MDA0ZSwgMHgwMDRmLAotICAgIDB4 MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgw MDU3LAotICAgIDB4MDA1OCwgMHgwMDU5LCAweDAwNWEsIDB4MDBjNCwgMHgwMGQ2LCAweDAwYzUs IDB4MDBkYywgMHgwMDVmLAotICAgIDB4MDBlOSwgMHgwMDYxLCAweDAwNjIsIDB4MDA2MywgMHgw MDY0LCAweDAwNjUsIDB4MDA2NiwgMHgwMDY3LAotICAgIDB4MDA2OCwgMHgwMDY5LCAweDAwNmEs IDB4MDA2YiwgMHgwMDZjLCAweDAwNmQsIDB4MDA2ZSwgMHgwMDZmLAotICAgIDB4MDA3MCwgMHgw MDcxLCAweDAwNzIsIDB4MDA3MywgMHgwMDc0LCAweDAwNzUsIDB4MDA3NiwgMHgwMDc3LAotICAg IDB4MDA3OCwgMHgwMDc5LCAweDAwN2EsIDB4MDBlNCwgMHgwMGY2LCAweDAwZTUsIDB4MDBmYwot fTsKLQotc3RydWN0IHhfdG9fdW5pY29kZSB1X3N3aXNzID0gewotICAgIDk0LCAzMywgWDJVX0RF Q3xYMlVfU1RELCBBTF9ST01BTiwgIlN3aXNzIE5SQyIsICJzd2lzcyIsIDAsICI9IiwKLSAgICAg ICAgICAgIDB4MDAyMSwgMHgwMDIyLCAweDAwZjksIDB4MDAyNCwgMHgwMDI1LCAweDAwMjYsIDB4 MDAyNywKLSAgICAweDAwMjgsIDB4MDAyOSwgMHgwMDJhLCAweDAwMmIsIDB4MDAyYywgMHgwMDJk LCAweDAwMmUsIDB4MDAyZiwKLSAgICAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4 MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywKLSAgICAweDAwMzgsIDB4MDAzOSwgMHgwMDNh LCAweDAwM2IsIDB4MDAzYywgMHgwMDNkLCAweDAwM2UsIDB4MDAzZiwKLSAgICAweDAwZTAsIDB4 MDA0MSwgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywKLSAg ICAweDAwNDgsIDB4MDA0OSwgMHgwMDRhLCAweDAwNGIsIDB4MDA0YywgMHgwMDRkLCAweDAwNGUs IDB4MDA0ZiwKLSAgICAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgw MDU1LCAweDAwNTYsIDB4MDA1NywKLSAgICAweDAwNTgsIDB4MDA1OSwgMHgwMDVhLCAweDAwZTks IDB4MDBlNywgMHgwMGVhLCAweDAwZWUsIDB4MDBlOCwKLSAgICAweDAwZjQsIDB4MDA2MSwgMHgw MDYyLCAweDAwNjMsIDB4MDA2NCwgMHgwMDY1LCAweDAwNjYsIDB4MDA2NywKLSAgICAweDAwNjgs IDB4MDA2OSwgMHgwMDZhLCAweDAwNmIsIDB4MDA2YywgMHgwMDZkLCAweDAwNmUsIDB4MDA2ZiwK LSAgICAweDAwNzAsIDB4MDA3MSwgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwgMHgwMDc1LCAweDAw NzYsIDB4MDA3NywKLSAgICAweDAwNzgsIDB4MDA3OSwgMHgwMDdhLCAweDAwZTQsIDB4MDBmNiwg MHgwMGZjLCAweDAwZmIKLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV9rb2k3ID0gewotICAg IDk0LCAzMywgWDJVX1NURCwgQUxfQ1lSSUwsICJTaG9ydCBLT0kiLCAic2hvcnQta29pIiwgMCwg TlVMTCwKLSAgICAgICAgICAgIDB4MDAyMSwgMHgwMDIyLCAweDAwMjMsIDB4MDAyNCwgMHgwMDI1 LCAweDAwMjYsIDB4MDAyNywKLSAgICAweDAwMjgsIDB4MDAyOSwgMHgwMDJhLCAweDAwMmIsIDB4 MDAyYywgMHgwMDJkLCAweDAwMmUsIDB4MDAyZiwKLSAgICAweDAwMzAsIDB4MDAzMSwgMHgwMDMy LCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywKLSAgICAweDAwMzgsIDB4 MDAzOSwgMHgwMDNhLCAweDAwM2IsIDB4MDAzYywgMHgwMDNkLCAweDAwM2UsIDB4MDAzZiwKLSAg ICAweDAwNDAsIDB4MDA0MSwgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYs IDB4MDA0NywKLSAgICAweDAwNDgsIDB4MDA0OSwgMHgwMDRhLCAweDAwNGIsIDB4MDA0YywgMHgw MDRkLCAweDAwNGUsIDB4MDA0ZiwKLSAgICAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMs IDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywKLSAgICAweDAwNTgsIDB4MDA1OSwgMHgw MDVhLCAweDAwNWIsIDB4MDA1YywgMHgwMDVkLCAweDAwNWUsIDB4MDA1ZiwKLSAgICAweDA0MmUs IDB4MDQxMCwgMHgwNDExLCAweDA0MjYsIDB4MDQxNCwgMHgwNDE1LCAweDA0MjQsIDB4MDQxMywK LSAgICAweDA0MjUsIDB4MDQxOCwgMHgwNDE5LCAweDA0MWEsIDB4MDQxYiwgMHgwNDFjLCAweDA0 MWQsIDB4MDQxZSwKLSAgICAweDA0MWYsIDB4MDQyZiwgMHgwNDIwLCAweDA0MjEsIDB4MDQyMiwg MHgwNDIzLCAweDA0MTYsIDB4MDQxMiwKLSAgICAweDA0MmMsIDB4MDQyYiwgMHgwNDE3LCAweDA0 MjgsIDB4MDQyZCwgMHgwNDI5LCAweDA0MjcKLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV9l bG90OTI3ID0gewotICAgIDk0LCAzMywgWDJVX1NURCwgQUxfR1JFRUssICJFTE9UIDkyNyIsICJl bG90OTI3LWdyZWVrIiwgMCwgTlVMTCwKLSAgICAgICAgICAgIDB4MDAyMSwgMHgwMDIyLCAweDAw MjMsIDB4MDAyNCwgMHgwMDI1LCAweDAwMjYsIDB4MDAyNywKLSAgICAweDAwMjgsIDB4MDAyOSwg MHgwMDJhLCAweDAwMmIsIDB4MDAyYywgMHgwMDJkLCAweDAwMmUsIDB4MDAyZiwKLSAgICAweDAw MzAsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAz NywKLSAgICAweDAwMzgsIDB4MDAzOSwgMHgwMDNhLCAweDAwM2IsIDB4MDAzYywgMHgwMDNkLCAw eDAwM2UsIDB4MDAzZiwKLSAgICAweDAwNDAsIDB4MDA0MSwgMHgwMDQyLCAweDAwNDMsIDB4MDA0 NCwgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywKLSAgICAweDAwNDgsIDB4MDA0OSwgMHgwMDRhLCAw eDAwNGIsIDB4MDA0YywgMHgwMDRkLCAweDAwNGUsIDB4MDA0ZiwKLSAgICAweDAwNTAsIDB4MDA1 MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywKLSAgICAw eDAwNTgsIDB4MDA1OSwgMHgwMDVhLCAweDAwNWIsIDB4MDA1YywgMHgwMDVkLCAweDAwNWUsIDB4 MDA1ZiwKLSAgICAweDAwNjAsIDB4MDM5MSwgMHgwMzkyLCAweDAzOTMsIDB4MDM5NCwgMHgwMzk1 LCAweDAzOTYsIDB4MDM5NywKLSAgICAweDAzOTgsIDB4MDM5OSwgMHgwMzlhLCAweDAzOWIsIDB4 MDM5YywgMHgwMzlkLCAweDAzOWUsIDB4MDM5ZiwKLSAgICAweDAzYTAsIDB4MDNhMSwgMHgwM2Ez LCAweDAzYTQsIDB4MDNhNSwgMHgwM2E2LCAweDAzYTcsIDB4MDNhOCwKLSAgICAweDAzYTksIDB4 MDAyMCwgMHgwMDIwLCAweDAwN2IsIDB4MDA3YywgMHgwMDdkLCAweDAwN2UKLX07Ci0KLQotc3Ry dWN0IHhfdG9fdW5pY29kZSB1X2hlYnJldzcgPSB7Ci0gICAgOTQsIDMzLCBYMlVfU1RELCBBTF9I RUJSRVcsICJIZWJyZXctNyIsICJoZWJyZXctNyIsIDAsIE5VTEwsCi0gICAgICAgICAgICAweDAw MjEsIDB4MDAyMiwgMHgwMDIzLCAweDAwMjQsIDB4MDAyNSwgMHgwMDI2LCAweDAwMjcsCi0gICAg MHgwMDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJiLCAweDAwMmMsIDB4MDAyZCwgMHgwMDJlLCAw eDAwMmYsCi0gICAgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAz NSwgMHgwMDM2LCAweDAwMzcsCi0gICAgMHgwMDM4LCAweDAwMzksIDB4MDAzYSwgMHgwMDNiLCAw eDAwM2MsIDB4MDAzZCwgMHgwMDNlLCAweDAwM2YsCi0gICAgMHgwMDQwLCAweDAwNDEsIDB4MDA0 MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsCi0gICAgMHgwMDQ4LCAw eDAwNDksIDB4MDA0YSwgMHgwMDRiLCAweDAwNGMsIDB4MDA0ZCwgMHgwMDRlLCAweDAwNGYsCi0g ICAgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2 LCAweDAwNTcsCi0gICAgMHgwMDU4LCAweDAwNTksIDB4MDA1YSwgMHgwMDViLCAweDAwNWMsIDB4 MDA1ZCwgMHgwMDVlLCAweDAwNWYsCi0gICAgMHgwNWQwLCAweDA1ZDEsIDB4MDVkMiwgMHgwNWQz LCAweDA1ZDQsIDB4MDVkNSwgMHgwNWQ2LCAweDA1ZDcsCi0gICAgMHgwNWQ4LCAweDA1ZDksIDB4 MDVkYSwgMHgwNWRiLCAweDA1ZGMsIDB4MDVkZCwgMHgwNWRlLCAweDA1ZGYsCi0gICAgMHgwNWUw LCAweDA1ZTEsIDB4MDVlMiwgMHgwNWUzLCAweDA1ZTQsIDB4MDVlNSwgMHgwNWU2LCAweDA1ZTcs Ci0gICAgMHgwNWU4LCAweDA1ZTksIDB4MDVlYSwgMHgwMDdiLCAweDAwN2MsIDB4MDA3ZCwgMHgw MDdlCi19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfYXBsMSA9IHsKLSAgICA5NCwgMzMsIFgy VV9JU098WDJVX1NURCwgQUxfUk9NQU4sICJBUEwgSVNPIiwgImFwbC1pc28iLCA2OCwgImUiLAot ICAgICAgICAgICAgMHgwMGE4LCAweDAwMjksIDB4MDAzYywgMHgyMjY0LCAweDAwM2QsIDB4MDAz ZSwgMHgwMDVkLAotICAgIDB4MjIyOCwgMHgyMjI3LCAweDIyNjAsIDB4MDBmNywgMHgwMDJjLCAw eDAwMmIsIDB4MDAyZSwgMHgwMDJmLAotICAgIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4MDAz MywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LAotICAgIDB4MDAzOCwgMHgwMDM5LCAw eDAwMjgsIDB4MDA1YiwgMHgwMDNiLCAweDAwZDcsIDB4MDAzYSwgMHgwMDVjLAotICAgIDB4MDBh ZiwgMHgyMzdhLCAweDIyYTUsIDB4MjJjMiwgMHgyMzBhLCAweDIyMGEsIDB4MDA1ZiwgMHgyMjA3 LAotICAgIDB4MjIwNiwgMHgyMzczLCAweDIyMTgsIDB4MDAyNywgMHgyNWFmLCAweDAwN2MsIDB4 MjJhNCwgMHgyNWNiLAotICAgIDB4MjJjNiwgMHgwMDNmLCAweDIzNzQsIDB4MjMwOCwgMHgyMjNj LCAweDIxOTMsIDB4MjIyYSwgMHgyMzc1LAotICAgIDB4MjI4MywgMHgyMTkxLCAweDIyODIsIDB4 MjE5MCwgMHgyMmEyLCAweDIxOTIsIDB4MjI2NSwgMHgwMDJkLAotICAgIDB4MjJjNCwgMHgwMDQx LCAweDAwNDIsIDB4MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4MDA0NiwgMHgwMDQ3LAotICAgIDB4 MDA0OCwgMHgwMDQ5LCAweDAwNGEsIDB4MDA0YiwgMHgwMDRjLCAweDAwNGQsIDB4MDA0ZSwgMHgw MDRmLAotICAgIDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUs IDB4MDA1NiwgMHgwMDU3LAotICAgIDB4MDA1OCwgMHgwMDU5LCAweDAwNWEsIDB4MDA3YiwgMHgy MmEzLCAweDAwN2QsIDB4MDAyNAotfTsKLQotLyogSVNPIDg4NTkgTGF0aW4gQWxwaGFiZXRzICov Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV84ODU5XzEgPSB7Ci0gICAgOTYsIDMyLCBYMlVfSVNP fFgyVV9TVEQsIEFMX1JPTUFOLCAiSVNPIExhdGluLTEiLCAibGF0aW4xIiwgMTAwLCAiQSIsCi0g ICAgMHgwMEEwLCAweDAwQTEsIDB4MDBBMiwgMHgwMEEzLCAweDAwQTQsIDB4MDBBNSwgMHgwMEE2 LCAweDAwQTcsCi0gICAgMHgwMEE4LCAweDAwQTksIDB4MDBBQSwgMHgwMEFCLCAweDAwQUMsIDB4 MDBBRCwgMHgwMEFFLCAweDAwQUYsCi0gICAgMHgwMEIwLCAweDAwQjEsIDB4MDBCMiwgMHgwMEIz LCAweDAwQjQsIDB4MDBCNSwgMHgwMEI2LCAweDAwQjcsCi0gICAgMHgwMEI4LCAweDAwQjksIDB4 MDBCQSwgMHgwMEJCLCAweDAwQkMsIDB4MDBCRCwgMHgwMEJFLCAweDAwQkYsCi0gICAgMHgwMEMw LCAweDAwQzEsIDB4MDBDMiwgMHgwMEMzLCAweDAwQzQsIDB4MDBDNSwgMHgwMEM2LCAweDAwQzcs Ci0gICAgMHgwMEM4LCAweDAwQzksIDB4MDBDQSwgMHgwMENCLCAweDAwQ0MsIDB4MDBDRCwgMHgw MENFLCAweDAwQ0YsCi0gICAgMHgwMEQwLCAweDAwRDEsIDB4MDBEMiwgMHgwMEQzLCAweDAwRDQs IDB4MDBENSwgMHgwMEQ2LCAweDAwRDcsCi0gICAgMHgwMEQ4LCAweDAwRDksIDB4MDBEQSwgMHgw MERCLCAweDAwREMsIDB4MDBERCwgMHgwMERFLCAweDAwREYsCi0gICAgMHgwMEUwLCAweDAwRTEs IDB4MDBFMiwgMHgwMEUzLCAweDAwRTQsIDB4MDBFNSwgMHgwMEU2LCAweDAwRTcsCi0gICAgMHgw MEU4LCAweDAwRTksIDB4MDBFQSwgMHgwMEVCLCAweDAwRUMsIDB4MDBFRCwgMHgwMEVFLCAweDAw RUYsCi0gICAgMHgwMEYwLCAweDAwRjEsIDB4MDBGMiwgMHgwMEYzLCAweDAwRjQsIDB4MDBGNSwg MHgwMEY2LCAweDAwRjcsCi0gICAgMHgwMEY4LCAweDAwRjksIDB4MDBGQSwgMHgwMEZCLCAweDAw RkMsIDB4MDBGRCwgMHgwMEZFLCAweDAwRkYKLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV84 ODU5XzIgPSB7Ci0gICAgOTYsIDMyLCBYMlVfSVNPfFgyVV9TVEQsIEFMX1JPTUFOLCAiSVNPIExh dGluLTIiLCAibGF0aW4yIiwgMTAxLCAiQiIsCi0gICAgMHgwMEEwLCAweDAxMDQsIDB4MDJEOCwg MHgwMTQxLCAweDAwQTQsIDB4MDEzRCwgMHgwMTVBLCAweDAwQTcsCi0gICAgMHgwMEE4LCAweDAx NjAsIDB4MDE1RSwgMHgwMTY0LCAweDAxNzksIDB4MDBBRCwgMHgwMTdELCAweDAxN0IsCi0gICAg MHgwMEIwLCAweDAxMDUsIDB4MDJEQiwgMHgwMTQyLCAweDAwQjQsIDB4MDEzRSwgMHgwMTVCLCAw eDAyQzcsCi0gICAgMHgwMEI4LCAweDAxNjEsIDB4MDE1RiwgMHgwMTY1LCAweDAxN0EsIDB4MDJE RCwgMHgwMTdFLCAweDAxN0MsCi0gICAgMHgwMTU0LCAweDAwQzEsIDB4MDBDMiwgMHgwMTAyLCAw eDAwQzQsIDB4MDEzOSwgMHgwMTA2LCAweDAwQzcsCi0gICAgMHgwMTBDLCAweDAwQzksIDB4MDEx OCwgMHgwMENCLCAweDAxMUEsIDB4MDBDRCwgMHgwMENFLCAweDAxMEUsCi0gICAgMHgwMTEwLCAw eDAxNDMsIDB4MDE0NywgMHgwMEQzLCAweDAwRDQsIDB4MDE1MCwgMHgwMEQ2LCAweDAwRDcsCi0g ICAgMHgwMTU4LCAweDAxNkUsIDB4MDBEQSwgMHgwMTcwLCAweDAwREMsIDB4MDBERCwgMHgwMTYy LCAweDAwREYsCi0gICAgMHgwMTU1LCAweDAwRTEsIDB4MDBFMiwgMHgwMTAzLCAweDAwRTQsIDB4 MDEzQSwgMHgwMTA3LCAweDAwRTcsCi0gICAgMHgwMTBELCAweDAwRTksIDB4MDExOSwgMHgwMEVC LCAweDAxMUIsIDB4MDBFRCwgMHgwMEVFLCAweDAxMEYsCi0gICAgMHgwMTExLCAweDAxNDQsIDB4 MDE0OCwgMHgwMEYzLCAweDAwRjQsIDB4MDE1MSwgMHgwMEY2LCAweDAwRjcsCi0gICAgMHgwMTU5 LCAweDAxNkYsIDB4MDBGQSwgMHgwMTcxLCAweDAwRkMsIDB4MDBGRCwgMHgwMTYzLCAweDAyRDkK LX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV84ODU5XzMgPSB7Ci0gICAgOTYsIDMyLCBYMlVf SVNPfFgyVV9TVEQsIEFMX1JPTUFOLCAiSVNPIExhdGluLTMiLCAibGF0aW4zIiwgMTA5LCAiQyIs Ci0gICAgMHgwMEEwLCAweDAxMjYsIDB4MDJEOCwgMHgwMEEzLCAweDAwQTQsIDB4ZmZmZCwgMHgw MTI0LCAweDAwQTcsCi0gICAgMHgwMEE4LCAweDAxMzAsIDB4MDE1RSwgMHgwMTFFLCAweDAxMzQs IDB4MDBBRCwgMHhmZmZkLCAweDAxN0IsCi0gICAgMHgwMEIwLCAweDAxMjcsIDB4MDBCMiwgMHgw MEIzLCAweDAwQjQsIDB4MDBCNSwgMHgwMTI1LCAweDAwQjcsCi0gICAgMHgwMEI4LCAweDAxMzEs IDB4MDE1RiwgMHgwMTFGLCAweDAxMzUsIDB4MDBCRCwgMHhmZmZkLCAweDAxN0MsCi0gICAgMHgw MEMwLCAweDAwQzEsIDB4MDBDMiwgMHhmZmZkLCAweDAwQzQsIDB4MDEwQSwgMHgwMTA4LCAweDAw QzcsCi0gICAgMHgwMEM4LCAweDAwQzksIDB4MDBDQSwgMHgwMENCLCAweDAwQ0MsIDB4MDBDRCwg MHgwMENFLCAweDAwQ0YsCi0gICAgMHhmZmZkLCAweDAwRDEsIDB4MDBEMiwgMHgwMEQzLCAweDAw RDQsIDB4MDEyMCwgMHgwMEQ2LCAweDAwRDcsCi0gICAgMHgwMTFDLCAweDAwRDksIDB4MDBEQSwg MHgwMERCLCAweDAwREMsIDB4MDE2QywgMHgwMTVDLCAweDAwREYsCi0gICAgMHgwMEUwLCAweDAw RTEsIDB4MDBFMiwgMHhmZmZkLCAweDAwRTQsIDB4MDEwQiwgMHgwMTA5LCAweDAwRTcsCi0gICAg MHgwMEU4LCAweDAwRTksIDB4MDBFQSwgMHgwMEVCLCAweDAwRUMsIDB4MDBFRCwgMHgwMEVFLCAw eDAwRUYsCi0gICAgMHhmZmZkLCAweDAwRjEsIDB4MDBGMiwgMHgwMEYzLCAweDAwRjQsIDB4MDEy MSwgMHgwMEY2LCAweDAwRjcsCi0gICAgMHgwMTFELCAweDAwRjksIDB4MDBGQSwgMHgwMEZCLCAw eDAwRkMsIDB4MDE2RCwgMHgwMTVELCAweDAyRDkKLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUg dV84ODU5XzQgPSB7Ci0gICAgOTYsIDMyLCBYMlVfSVNPfFgyVV9TVEQsIEFMX1JPTUFOLCAiSVNP IExhdGluLTQiLCAibGF0aW40IiwgMTEwLCAiRCIsCi0gICAgMHgwMEEwLCAweDAxMDQsIDB4MDEz OCwgMHgwMTU2LCAweDAwQTQsIDB4MDEyOCwgMHgwMTNCLCAweDAwQTcsCi0gICAgMHgwMEE4LCAw eDAxNjAsIDB4MDExMiwgMHgwMTIyLCAweDAxNjYsIDB4MDBBRCwgMHgwMTdELCAweDAwQUYsCi0g ICAgMHgwMEIwLCAweDAxMDUsIDB4MDJEQiwgMHgwMTU3LCAweDAwQjQsIDB4MDEyOSwgMHgwMTND LCAweDAyQzcsCi0gICAgMHgwMEI4LCAweDAxNjEsIDB4MDExMywgMHgwMTIzLCAweDAxNjcsIDB4 MDE0QSwgMHgwMTdFLCAweDAxNEIsCi0gICAgMHgwMTAwLCAweDAwQzEsIDB4MDBDMiwgMHgwMEMz LCAweDAwQzQsIDB4MDBDNSwgMHgwMEM2LCAweDAxMkUsCi0gICAgMHgwMTBDLCAweDAwQzksIDB4 MDExOCwgMHgwMENCLCAweDAxMTYsIDB4MDBDRCwgMHgwMENFLCAweDAxMkEsCi0gICAgMHgwMTEw LCAweDAxNDUsIDB4MDE0QywgMHgwMTM2LCAweDAwRDQsIDB4MDBENSwgMHgwMEQ2LCAweDAwRDcs Ci0gICAgMHgwMEQ4LCAweDAxNzIsIDB4MDBEQSwgMHgwMERCLCAweDAwREMsIDB4MDE2OCwgMHgw MTZBLCAweDAwREYsCi0gICAgMHgwMTAxLCAweDAwRTEsIDB4MDBFMiwgMHgwMEUzLCAweDAwRTQs IDB4MDBFNSwgMHgwMEU2LCAweDAxMkYsCi0gICAgMHgwMTBELCAweDAwRTksIDB4MDExOSwgMHgw MEVCLCAweDAxMTcsIDB4MDBFRCwgMHgwMEVFLCAweDAxMkIsCi0gICAgMHgwMTExLCAweDAxNDYs IDB4MDE0RCwgMHgwMTM3LCAweDAwRjQsIDB4MDBGNSwgMHgwMEY2LCAweDAwRjcsCi0gICAgMHgw MEY4LCAweDAxNzMsIDB4MDBGQSwgMHgwMEZCLCAweDAwRkMsIDB4MDE2OSwgMHgwMTZCLCAweDAy RDkKLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV84ODU5XzUgPSB7Ci0gICAgOTYsMzIsWDJV X0lTT3xYMlVfU1RELEFMX0NZUklMLCJJU08gTGF0aW4vQ3lyaWxsaWMiLCJjeXJpbGxpYy1pc28i LDE0NCwiTCIsCi0gICAgMHgwMEEwLCAweDA0MDEsIDB4MDQwMiwgMHgwNDAzLCAweDA0MDQsIDB4 MDQwNSwgMHgwNDA2LCAweDA0MDcsCi0gICAgMHgwNDA4LCAweDA0MDksIDB4MDQwQSwgMHgwNDBC LCAweDA0MEMsIDB4MDBBRCwgMHgwNDBFLCAweDA0MEYsCi0gICAgMHgwNDEwLCAweDA0MTEsIDB4 MDQxMiwgMHgwNDEzLCAweDA0MTQsIDB4MDQxNSwgMHgwNDE2LCAweDA0MTcsCi0gICAgMHgwNDE4 LCAweDA0MTksIDB4MDQxQSwgMHgwNDFCLCAweDA0MUMsIDB4MDQxRCwgMHgwNDFFLCAweDA0MUYs Ci0gICAgMHgwNDIwLCAweDA0MjEsIDB4MDQyMiwgMHgwNDIzLCAweDA0MjQsIDB4MDQyNSwgMHgw NDI2LCAweDA0MjcsCi0gICAgMHgwNDI4LCAweDA0MjksIDB4MDQyQSwgMHgwNDJCLCAweDA0MkMs IDB4MDQyRCwgMHgwNDJFLCAweDA0MkYsCi0gICAgMHgwNDMwLCAweDA0MzEsIDB4MDQzMiwgMHgw NDMzLCAweDA0MzQsIDB4MDQzNSwgMHgwNDM2LCAweDA0MzcsCi0gICAgMHgwNDM4LCAweDA0Mzks IDB4MDQzQSwgMHgwNDNCLCAweDA0M0MsIDB4MDQzRCwgMHgwNDNFLCAweDA0M0YsCi0gICAgMHgw NDQwLCAweDA0NDEsIDB4MDQ0MiwgMHgwNDQzLCAweDA0NDQsIDB4MDQ0NSwgMHgwNDQ2LCAweDA0 NDcsCi0gICAgMHgwNDQ4LCAweDA0NDksIDB4MDQ0QSwgMHgwNDRCLCAweDA0NEMsIDB4MDQ0RCwg MHgwNDRFLCAweDA0NEYsCi0gICAgMHgyMTE2LCAweDA0NTEsIDB4MDQ1MiwgMHgwNDUzLCAweDA0 NTQsIDB4MDQ1NSwgMHgwNDU2LCAweDA0NTcsCi0gICAgMHgwNDU4LCAweDA0NTksIDB4MDQ1QSwg MHgwNDVCLCAweDA0NUMsIDB4MDBBNywgMHgwNDVFLCAweDA0NUYKLX07Ci0KLXN0cnVjdCB4X3Rv X3VuaWNvZGUgdV84ODU5XzYgPSB7Ci0gICAgOTYsIDMyLCBYMlVfSVNPfFgyVV9TVEQsQUxfQVJB QklDLCJJU08gTGF0aW4vQXJhYmljIiwiYXJhYmljLWlzbyIsMTI3LCJHIiwKLSAgICAweDAwQTAs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4MDBBNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK LSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4MDYwQywgMHgwMEFELCAweGZm ZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDA2 MUIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4MDYxRiwKLSAgICAweGZmZmQsIDB4MDYyMSwg MHgwNjIyLCAweDA2MjMsIDB4MDYyNCwgMHgwNjI1LCAweDA2MjYsIDB4MDYyNywKLSAgICAweDA2 MjgsIDB4MDYyOSwgMHgwNjJBLCAweDA2MkIsIDB4MDYyQywgMHgwNjJELCAweDA2MkUsIDB4MDYy RiwKLSAgICAweDA2MzAsIDB4MDYzMSwgMHgwNjMyLCAweDA2MzMsIDB4MDYzNCwgMHgwNjM1LCAw eDA2MzYsIDB4MDYzNywKLSAgICAweDA2MzgsIDB4MDYzOSwgMHgwNjNBLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweDA2NDAsIDB4MDY0MSwgMHgwNjQyLCAw eDA2NDMsIDB4MDY0NCwgMHgwNjQ1LCAweDA2NDYsIDB4MDY0NywKLSAgICAweDA2NDgsIDB4MDY0 OSwgMHgwNjRBLCAweDA2NEIsIDB4MDY0QywgMHgwNjRELCAweDA2NEUsIDB4MDY0RiwKLSAgICAw eDA2NTAsIDB4MDY1MSwgMHgwNjUyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZAotfTsKLQotc3RydWN0IHhfdG9fdW5pY29kZSB1Xzg4NTlfNyA9IHsK LSAgICA5NiwgMzIsIFgyVV9JU098WDJVX1NURCxBTF9HUkVFSywiSVNPIExhdGluL0dyZWVrIiwg ImdyZWVrLWlzbyIsIDEyNiwgIkYiLAotICAgIDB4MDBBMCwgMHgyMDE4LCAweDIwMTksIDB4MDBB MywgMHhGRkZELCAweEZGRkQsIDB4MDBBNiwgMHgwMEE3LAotICAgIDB4MDBBOCwgMHgwMEE5LCAw eEZGRkQsIDB4MDBBQiwgMHgwMEFDLCAweDAwQUQsIDB4RkZGRCwgMHgyMDE1LAotICAgIDB4MDBC MCwgMHgwMEIxLCAweDAwQjIsIDB4MDBCMywgMHgwMzg0LCAweDAzODUsIDB4MDM4NiwgMHgwMEI3 LAotICAgIDB4MDM4OCwgMHgwMzg5LCAweDAzOEEsIDB4MDBCQiwgMHgwMzhDLCAweDAwQkQsIDB4 MDM4RSwgMHgwMzhGLAotICAgIDB4MDM5MCwgMHgwMzkxLCAweDAzOTIsIDB4MDM5MywgMHgwMzk0 LCAweDAzOTUsIDB4MDM5NiwgMHgwMzk3LAotICAgIDB4MDM5OCwgMHgwMzk5LCAweDAzOUEsIDB4 MDM5QiwgMHgwMzlDLCAweDAzOUQsIDB4MDM5RSwgMHgwMzlGLAotICAgIDB4MDNBMCwgMHgwM0Ex LCAweGZmZmQsIDB4MDNBMywgMHgwM0E0LCAweDAzQTUsIDB4MDNBNiwgMHgwM0E3LAotICAgIDB4 MDNBOCwgMHgwM0E5LCAweDAzQUEsIDB4MDNBQiwgMHgwM0FDLCAweDAzQUQsIDB4MDNBRSwgMHgw M0FGLAotICAgIDB4MDNCMCwgMHgwM0IxLCAweDAzQjIsIDB4MDNCMywgMHgwM0I0LCAweDAzQjUs IDB4MDNCNiwgMHgwM0I3LAotICAgIDB4MDNCOCwgMHgwM0I5LCAweDAzQkEsIDB4MDNCQiwgMHgw M0JDLCAweDAzQkQsIDB4MDNCRSwgMHgwM0JGLAotICAgIDB4MDNDMCwgMHgwM0MxLCAweDAzQzIs IDB4MDNDMywgMHgwM0M0LCAweDAzQzUsIDB4MDNDNiwgMHgwM0M3LAotICAgIDB4MDNDOCwgMHgw M0M5LCAweDAzQ0EsIDB4MDNDQiwgMHgwM0NDLCAweDAzQ0QsIDB4MDNDRSwgMHhmZmZkCi19Owot Ci1zdHJ1Y3QgeF90b191bmljb2RlIHVfODg1OV84ID0gewotICAgIDk2LCAzMiwgWDJVX0lTT3xY MlVfU1RELEFMX0hFQlJFVywiSVNPIExhdGluL0hlYnJldyIsImhlYnJldy1pc28iLDEyMSwiSCIs Ci0gICAgMHgwMEEwLCAweGZmZmQsIDB4MDBBMiwgMHgwMEEzLCAweDAwQTQsIDB4MDBBNSwgMHgw MEE2LCAweDAwQTcsCi0gICAgMHgwMEE4LCAweDAwQTksIDB4MDBENywgMHgwMEFCLCAweDAwQUMs IDB4MDBBRCwgMHgwMEFFLCAweDIwM0UsCi0gICAgMHgwMEIwLCAweDAwQjEsIDB4MDBCMiwgMHgw MEIzLCAweDAwQjQsIDB4MDBCNSwgMHgwMEI2LCAweDAwQjcsCi0gICAgMHgwMEI4LCAweDAwQjks IDB4MDBGNywgMHgwMEJCLCAweDAwQkMsIDB4MDBCRCwgMHgwMEJFLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDIwMTcsCi0gICAgMHgwNUQwLCAweDA1 RDEsIDB4MDVEMiwgMHgwNUQzLCAweDA1RDQsIDB4MDVENSwgMHgwNUQ2LCAweDA1RDcsCi0gICAg MHgwNUQ4LCAweDA1RDksIDB4MDVEQSwgMHgwNURCLCAweDA1REMsIDB4MDVERCwgMHgwNURFLCAw eDA1REYsCi0gICAgMHgwNUUwLCAweDA1RTEsIDB4MDVFMiwgMHgwNUUzLCAweDA1RTQsIDB4MDVF NSwgMHgwNUU2LCAweDA1RTcsCi0gICAgMHgwNUU4LCAweDA1RTksIDB4MDVFQSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQKLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUg dV84ODU5XzkgPSB7Ci0gICAgOTYsIDMyLCBYMlVfSVNPfFgyVV9TVEQsIEFMX1JPTUFOLCAiSVNP IExhdGluLTUiLCAibGF0aW41IiwgMTQ4LCAiTSIsCi0gICAgMHgwMEEwLCAweDAwQTEsIDB4MDBB MiwgMHgwMEEzLCAweDAwQTQsIDB4MDBBNSwgMHgwMEE2LCAweDAwQTcsCi0gICAgMHgwMEE4LCAw eDAwQTksIDB4MDBBQSwgMHgwMEFCLCAweDAwQUMsIDB4MDBBRCwgMHgwMEFFLCAweDAwQUYsCi0g ICAgMHgwMEIwLCAweDAwQjEsIDB4MDBCMiwgMHgwMEIzLCAweDAwQjQsIDB4MDBCNSwgMHgwMEI2 LCAweDAwQjcsCi0gICAgMHgwMEI4LCAweDAwQjksIDB4MDBCQSwgMHgwMEJCLCAweDAwQkMsIDB4 MDBCRCwgMHgwMEJFLCAweDAwQkYsCi0gICAgMHgwMEMwLCAweDAwQzEsIDB4MDBDMiwgMHgwMEMz LCAweDAwQzQsIDB4MDBDNSwgMHgwMEM2LCAweDAwQzcsCi0gICAgMHgwMEM4LCAweDAwQzksIDB4 MDBDQSwgMHgwMENCLCAweDAwQ0MsIDB4MDBDRCwgMHgwMENFLCAweDAwQ0YsCi0gICAgMHgwMTFF LCAweDAwRDEsIDB4MDBEMiwgMHgwMEQzLCAweDAwRDQsIDB4MDBENSwgMHgwMEQ2LCAweDAwRDcs Ci0gICAgMHgwMEQ4LCAweDAwRDksIDB4MDBEQSwgMHgwMERCLCAweDAwREMsIDB4MDEzMCwgMHgw MTVFLCAweDAwREYsCi0gICAgMHgwMEUwLCAweDAwRTEsIDB4MDBFMiwgMHgwMEUzLCAweDAwRTQs IDB4MDBFNSwgMHgwMEU2LCAweDAwRTcsCi0gICAgMHgwMEU4LCAweDAwRTksIDB4MDBFQSwgMHgw MEVCLCAweDAwRUMsIDB4MDBFRCwgMHgwMEVFLCAweDAwRUYsCi0gICAgMHgwMTFGLCAweDAwRjEs IDB4MDBGMiwgMHgwMEYzLCAweDAwRjQsIDB4MDBGNSwgMHgwMEY2LCAweDAwRjcsCi0gICAgMHgw MEY4LCAweDAwRjksIDB4MDBGQSwgMHgwMEZCLCAweDAwRkMsIDB4MDEzMSwgMHgwMTVGLCAweDAw RkYKLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV84ODU5XzEwID0gewotICAgIDk2LCAzMiwg WDJVX0lTT3xYMlVfU1RELCBBTF9ST01BTiwgIklTTyBMYXRpbi02IiwgImxhdGluNiIsIDE1Nywg IlYiLAotICAgIDB4MDBhMCwgMHgwMTA0LCAweDAxMTIsIDB4MDEyMiwgMHgwMTJhLCAweDAxMjgs IDB4MDEzNiwgMHgwMTNiLAotICAgIDB4MDE0MywgMHgwMTU2LCAweDAxNjAsIDB4MDE2NiwgMHgw MTdkLCAweDAwYWQsIDB4MDEzOCwgMHgwMTRhLAotICAgIDB4MDExMSwgMHgwMTA1LCAweDAxMTMs IDB4MDEyMywgMHgwMTJiLCAweDAxMjksIDB4MDEzNywgMHgwMTNjLAotICAgIDB4MDE0NCwgMHgw MTU3LCAweDAxNjEsIDB4MDE2NywgMHgwMTdlLCAweDAwYmQsIDB4MDBiZSwgMHgwMTRiLAotICAg IDB4MDEwMCwgMHgwMGMxLCAweDAwYzIsIDB4MDBjMywgMHgwMGM0LCAweDAwYzUsIDB4MDBjNiwg MHgwMTJlLAotICAgIDB4MDEwYywgMHgwMGM5LCAweDAxMTgsIDB4MDBjYiwgMHgwMTE2LCAweDAw Y2QsIDB4MDBjZSwgMHgwMGNmLAotICAgIDB4MDExMCwgMHgwMTQ1LCAweDAxNGMsIDB4MDBkZSwg MHgwMGQ0LCAweDAwZDUsIDB4MDBkNiwgMHgwMTY4LAotICAgIDB4MDBkOCwgMHgwMTcyLCAweDAw ZGEsIDB4MDBkYiwgMHgwMGRjLCAweDAwZGQsIDB4MDBkZSwgMHgwMTZhLAotICAgIDB4MDEwMSwg MHgwMGUxLCAweDAwZTIsIDB4MDBkMywgMHgwMGU0LCAweDAwZTUsIDB4MDBlNiwgMHgwMTJmLAot ICAgIDB4MDEwZCwgMHgwMGU5LCAweDAxMTksIDB4MDBlYiwgMHgwMTE3LCAweDAwZWQsIDB4MDBl ZSwgMHgwMGVmLAotICAgIDB4MDBmMCwgMHgwMGYxLCAweDAxNGQsIDB4MDBmMywgMHgwMGY0LCAw eDAwZjUsIDB4MDBmNiwgMHgwMTY5LAotICAgIDB4MDBmOCwgMHgwMTczLCAweDAwZmEsIDB4MDBm YiwgMHgwMGZjLCAweDAwZmQsIDB4MDBmZSwgMHgwMTZiCi19OwotCi0vKiBMYXRpbi05IChJU08g ODg1OS0xNSkgaXMgdGhlIHNhbWUgYXMgTGF0aW4tMSB3aXRoIHRoZSBmb2xsb3dpbmcgY2hhbmdl czoKLSAqICAgQTQgaXMgRXVybyBTeW1ib2wgICAgICAgICAgIDIwQUMKLSAqICAgQTYgaXMgQ2Fw aXRhbCBTIENhcm9uICAgICAgIDAxNjAKLSAqICAgQTggaXMgU21hbGwgcyBjYXJvbiAgICAgICAg IDAxNjEKLSAqICAgQjQgaXMgQ2FwaXRhbCBaIGNhcm9uICAgICAgIDAxN0QKLSAqICAgQjggaXMg U21hbGwgeiBjYXJvbiAgICAgICAgIDAxN0UKLSAqICAgQkMgaXMgQ2FwaXRhbCBPRSBsaWdhdHVy ZSAgIDAxNTIKLSAqICAgQkQgaXMgU21hbGwgb2UgbGlnYXR1cmUgICAgIDAxNTMKLSAqICAgQkUg aXMgQ2FwaXRhbCBZIGRpYWVyZXNpcyAgIDAxNzgKLSAqLwotCi1zdHJ1Y3QgeF90b191bmljb2Rl IHVfODg1OV8xNSA9IHsKLSAgICA5NiwgMzIsIFgyVV9JU098WDJVX1NURCwgQUxfUk9NQU4sICJJ U08gTGF0aW4tOSIsICJsYXRpbjkiLCAwLCBOVUxMLAotICAgIDB4MDBBMCwgMHgwMEExLCAweDAw QTIsIDB4MDBBMywgMHgyMEFDLCAweDAwQTUsIDB4MDE2MCwgMHgwMEE3LAotICAgIDB4MDE2MSwg MHgwMEE5LCAweDAwQUEsIDB4MDBBQiwgMHgwMEFDLCAweDAwQUQsIDB4MDBBRSwgMHgwMEFGLAot ICAgIDB4MDBCMCwgMHgwMEIxLCAweDAwQjIsIDB4MDBCMywgMHgwMTdELCAweDAwQjUsIDB4MDBC NiwgMHgwMEI3LAotICAgIDB4MDE3RSwgMHgwMEI5LCAweDAwQkEsIDB4MDBCQiwgMHgwMTUyLCAw eDAxNTMsIDB4MDE3OCwgMHgwMEJGLAotICAgIDB4MDBDMCwgMHgwMEMxLCAweDAwQzIsIDB4MDBD MywgMHgwMEM0LCAweDAwQzUsIDB4MDBDNiwgMHgwMEM3LAotICAgIDB4MDBDOCwgMHgwMEM5LCAw eDAwQ0EsIDB4MDBDQiwgMHgwMENDLCAweDAwQ0QsIDB4MDBDRSwgMHgwMENGLAotICAgIDB4MDBE MCwgMHgwMEQxLCAweDAwRDIsIDB4MDBEMywgMHgwMEQ0LCAweDAwRDUsIDB4MDBENiwgMHgwMEQ3 LAotICAgIDB4MDBEOCwgMHgwMEQ5LCAweDAwREEsIDB4MDBEQiwgMHgwMERDLCAweDAwREQsIDB4 MDBERSwgMHgwMERGLAotICAgIDB4MDBFMCwgMHgwMEUxLCAweDAwRTIsIDB4MDBFMywgMHgwMEU0 LCAweDAwRTUsIDB4MDBFNiwgMHgwMEU3LAotICAgIDB4MDBFOCwgMHgwMEU5LCAweDAwRUEsIDB4 MDBFQiwgMHgwMEVDLCAweDAwRUQsIDB4MDBFRSwgMHgwMEVGLAotICAgIDB4MDBGMCwgMHgwMEYx LCAweDAwRjIsIDB4MDBGMywgMHgwMEY0LCAweDAwRjUsIDB4MDBGNiwgMHgwMEY3LAotICAgIDB4 MDBGOCwgMHgwMEY5LCAweDAwRkEsIDB4MDBGQiwgMHgwMEZDLCAweDAwRkQsIDB4MDBGRSwgMHgw MEZGCi19OwotCi0vKiBEeWFkaWMgU3lzdGVtcyBEeWFsb2cvWCBBUEwsIGNvcnJlc3BvbmRzIHRv IEFQTFRFUk1JLlRURi4gKi8KLS8qIFVuaWNvZGUgbWFwcGluZ3MgYWNjb3JkaW5nIHRvIElTTy1J RUMgLyBKVEMgMSAvIFNDIDIyIE4gMzA2NywgMTk5OS0xMi0yOC4gKi8KLQotc3RydWN0IHhfdG9f dW5pY29kZSB1X2FwbDIgPSB7ICAgICAgICAgIC8qIER5YWRpYyBTeXN0ZW1zIEFQTCArIGJveCBk cmF3aW5ncyAqLwotICAgIDk2LCAzMiwgWDJVX1NURCwgQUxfUk9NQU4sICJEeWFkaWMgU3lzdGVt cyBBUEwiLCAiYXBsLWR5YWRpYyIsIDAsIE5VTEwsCi0gICAgMHgwMGEwLCAweDAwZDcsIDB4MjUw MiwgMHgyNTI0LCAweDAwYTIsIDB4MjUxMCwgMHgyNTE0LCAweDI1MzQsCi0gICAgMHgyNTJjLCAw eDI1MWMsIDB4MjUwMCwgMHgyNTNjLCAweDI1MTgsIDB4MjUwYywgMHgyMjA2LCAweDAwZjcsCi0g ICAgMHgyMjYwLCAweDIyYzQsIDB4MjM3NSwgMHgyMzc0LCAweDIzN2EsIDB4MjIwYSwgMHgyMjYx LCAweDIyNjUsCi0gICAgMHgyMjY0LCAweDIyYTUsIDB4MjJhNCwgMHgyMTkwLCAweDIyMTgsIDB4 MjM1ZCwgMHgyMzNmLCAweDIzNDAsCi0gICAgMHgyMzRlLCAweDIzNTUsIDB4MjM0YiwgMHgyMzUy LCAweDIzNzIsIDB4MjM3MSwgMHgyMzY4LCAweDIzNWYsCi0gICAgMHgyNWFmLCAweDIzNWUsIDB4 MjMzOSwgMHgyMzZiLCAweDIzNmEsIDB4MjI2MiwgMHgyMzBhLCAweDIzMDgsCi0gICAgMHgyMzQ5 LCAweDIyMjksIDB4MjIyYSwgMHgyMzZjLCAweDAwYTMsIDB4MjMzZCwgMHgyMjk2LCAweDIyYTIs Ci0gICAgMHgyMmEzLCAweDIzMzcsIDB4MDBhZiwgMHgyMzczLCAweDAwYTgsIDB4MjVjYiwgMHgy MTkyLCAweDIyMjgsCi0gICAgMHgyMjgyLCAweDIyODMsIDB4MjM1OSwgMHgwMDQxLCAweDAwNDIs IDB4MDA0MywgMHgwMDQ0LCAweDAwNDUsCi0gICAgMHgwMDQ2LCAweDAwNDcsIDB4MDA0OCwgMHgw MDQ5LCAweDAwNGEsIDB4MDA0YiwgMHgwMDRjLCAweDAwNGQsCi0gICAgMHgwMDRlLCAweDAwNGYs IDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsCi0gICAgMHgw MDU2LCAweDAwNTcsIDB4MDA1OCwgMHgwMDU5LCAweDAwNWEsIDB4MjIwNywgMHgyMTkxLCAweDIx OTMKLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV9hcGwzID0geyAgICAgICAgICAvKiBBUEwt UGx1cyA9IEFQTC0yMDAwICovCi0gICAgMTI4LCAwLCBYMlVfQ1hHLCBBTF9ST01BTiwgIkFQTC0y MDAwIiwgImFwbC0yMDAwIiwgMCwgTlVMTCwKLSAgICAweDIwYWMsIDB4MjJhMywgMHgyMmE0LCAw eDIyYTUsIDB4MjE5MCwgMHgyMTkyLCAweDIxOTEsIDB4MjE5MywKLSAgICAweDIyNjQsIDB4MjI2 NSwgMHgyMzcyLCAweDIzNzEsIDB4MjVhZiwgMHgyMzVlLCAweDIzMzksIDB4MjM1OSwKLSAgICAw eDIzNmIsIDB4MjIwNiwgMHgyMjA3LCAweDIzNGIsIDB4MjM1MiwgMHgyMzU1LCAweDIzNGUsIDB4 MjMwOCwKLSAgICAweDIzMGEsIDB4MjM0MCwgMHgyMzNmLCAweDIyODIsIDB4MjI4MywgMHgyMjI5 LCAweDIyMmEsIDB4MjIyOCwKLSAgICAweDAwYTAsIDB4MDBhMSwgMHgwMGEyLCAweDAwYTMsIDB4 MjJhMiwgMHgwMGE1LCAweDAwYTYsIDB4MDBhNywKLSAgICAweDAwYTgsIDB4MjM1ZCwgMHgyMmM0 LCAweDAwYWIsIDB4MjI2MCwgMHgyMjYxLCAweDIzNmEsIDB4MDBhZiwKLSAgICAweDIyMTgsIDB4 MjVjYiwgMHgyMzNkLCAweDIzNDksIDB4MjI5NiwgMHgyMzVmLCAweDAwYjYsIDB4MDBiNywKLSAg ICAweDIzN2EsIDB4MjIwYSwgMHgyMzc3LCAweDAwYmIsIDB4MjM3MywgMHgyMzc0LCAweDIzNzUs IDB4MDBiZiwKLSAgICAweDAwYzAsIDB4MDBjMSwgMHgwMGMyLCAweDAwYzMsIDB4MDBjNCwgMHgw MGM1LCAweDAwYzYsIDB4MDBjNywKLSAgICAweDAwYzgsIDB4MDBjOSwgMHgwMGNhLCAweDAwY2Is IDB4MDBjYywgMHgwMGNkLCAweDAwY2UsIDB4MDBjZiwKLSAgICAweDIzNmMsIDB4MDBkMSwgMHgw MGQyLCAweDAwZDMsIDB4MDBkNCwgMHgwMGQ1LCAweDAwZDYsIDB4MDBkNywKLSAgICAweDAwZDgs IDB4MDBkOSwgMHgwMGRhLCAweDAwZGIsIDB4MDBkYywgMHgwMGRkLCAweDIzMzcsIDB4MDBkZiwK LSAgICAweDAwZTAsIDB4MDBlMSwgMHgwMGUyLCAweDAwZTMsIDB4MDBlNCwgMHgwMGU1LCAweDAw ZTYsIDB4MDBlNywKLSAgICAweDAwZTgsIDB4MDBlOSwgMHgwMGVhLCAweDAwZWIsIDB4MDBlYywg MHgwMGVkLCAweDAwZWUsIDB4MDBlZiwKLSAgICAweDIzNjQsIDB4MDBmMSwgMHgwMGYyLCAweDAw ZjMsIDB4MDBmNCwgMHgwMGY1LCAweDAwZjYsIDB4MDBmNywKLSAgICAweDIyMDUsIDB4MDBmOSwg MHgwMGZhLCAweDAwZmIsIDB4MDBmYywgMHgwMGZkLCAweDIzNjgsIDB4MDBmZgotfTsKLQotc3Ry dWN0IHhfdG9fdW5pY29kZSB1X2FwbDQgPSB7ICAgICAgICAgIC8qIElCTSBBUEwyICovCi0gICAg MTI4LCAwLCBYMlVfQ1hHLCBBTF9ST01BTiwgIklCTSBBUEwyIiwgImFwbDItaWJtIiwgMCwgTlVM TCwKLSAgICAweDAwYzcsIDB4MDBmYywgMHgwMGU5LCAweDAwZTIsIDB4MDBlNCwgMHgwMGUwLCAw eDAwZTUsIDB4MDBlNywKLSAgICAweDAwZWEsIDB4MDBlYiwgMHgwMGU4LCAweDAwZWYsIDB4MDBl ZSwgMHgwMGVjLCAweDAwYzQsIDB4MDBjNSwKLSAgICAweDI1YWYsIDB4MjM1ZSwgMHgyMzM5LCAw eDAwZjQsIDB4MDBmNiwgMHgwMGYyLCAweDAwZmIsIDB4MDBmOSwKLSAgICAweDIyYTQsIDB4MDBk NiwgMHgwMGRjLCAweDAwZjgsIDB4MDBhMywgMHgyMmE1LCAweDIxOTAsIDB4MjMzNiwKLSAgICAw eDAwZTEsIDB4MDBlZCwgMHgwMGYzLCAweDAwZmEsIDB4MDBmMSwgMHgwMGQxLCAweDAwYWEsIDB4 MDBiYSwKLSAgICAweDAwYmYsIDB4MjMwOCwgMHgwMGFjLCAweDIxOTIsIDB4MjIyYSwgMHgwMGEx LCAweDIzNTUsIDB4MjM0ZSwKLSAgICAweDI1OTEsIDB4MjU5MiwgMHgyNTkzLCAweDI1MDIsIDB4 MjUyNCwgMHgyMzVmLCAweDIyMDYsIDB4MjIwNywKLSAgICAweDIxOTIsIDB4MjU2MywgMHgyNTUx LCAweDI1NTcsIDB4MjU1ZCwgMHgyMTkwLCAweDIzMGEsIDB4MjUxMCwKLSAgICAweDI1MTQsIDB4 MjUzNCwgMHgyNTJjLCAweDI1MWMsIDB4MjUwMCwgMHgyNTNjLCAweDIxOTEsIDB4MjE5MywKLSAg ICAweDI1NWEsIDB4MjU1NCwgMHgyNTY5LCAweDI1NjYsIDB4MjU2MCwgMHgyNTUwLCAweDI1NmMs IDB4MjI2MSwKLSAgICAweDIzNzgsIDB4MjM3NywgMHgyMjM1LCAweDIzMzcsIDB4MjM0MiwgMHgy MzNiLCAweDIyYTIsIDB4MjJhMywKLSAgICAweDIyYzQsIDB4MjUxOCwgMHgyNTBjLCAweDI1ODgs IDB4MjU4NCwgMHgwMGE2LCAweDAwY2MsIDB4MjU4MCwKLSAgICAweDIzN2EsIDB4MDBkZiwgMHgy MjgyLCAweDIyODMsIDB4MjM1ZCwgMHgyMzcyLCAweDIzNzQsIDB4MjM3MSwKLSAgICAweDIzM2Qs IDB4MjI5NiwgMHgyNWNiLCAweDIyMjgsIDB4MjM3MywgMHgyMzQ5LCAweDAwYzUsIDB4MjIyOSwK LSAgICAweDIzM2YsIDB4MjM0MCwgMHgyMjY1LCAweDIyNjQsIDB4MjI2MCwgMHgwMGQ3LCAweDAw ZjcsIDB4MjM1OSwKLSAgICAweDIyMTgsIDB4MjM3NSwgMHgyMzZiLCAweDIzNGIsIDB4MjM1Miwg MHgwMGFmLCAweDAwYTgsIDB4MDBhMAotfTsKLQotc3RydWN0IHhfdG9fdW5pY29kZSB1X2FwbDUg PSB7ICAgICAgICAgIC8qIEFQTC0yNzQxICovCi0gICAgMTI4LCAwLCBYMlVfQ1hHLCBBTF9ST01B TiwgIkFQTC0yNzQxIiwgImFwbC0yNzQxIiwgMCwgTlVMTCwKLSAgICAweDIwYWMsIDB4MjJhMywg MHgyMmE0LCAweDIyYTUsIDB4MjE5MCwgMHgyMTkyLCAweDIxOTEsIDB4MjE5MywKLSAgICAweDIy NjQsIDB4MjI2NSwgMHgyMzcyLCAweDIzNzEsIDB4MjVhZiwgMHgyMzVlLCAweDIzMzksIDB4MjM1 OSwKLSAgICAweDIzNmIsIDB4MjIwNiwgMHgyMjA3LCAweDIzNGIsIDB4MjM1MiwgMHgyMzU1LCAw eDIzNGUsIDB4MjMwOCwKLSAgICAweDIzMGEsIDB4MjM0MCwgMHgyMzNmLCAweDIyODIsIDB4MjI4 MywgMHgyMjI5LCAweDIyMmEsIDB4MjIyOCwKLSAgICAweDAwYTAsIDB4MDBhMSwgMHgwMGEyLCAw eDAwYTMsIDB4MjJhMiwgMHgyMzc4LCAweDIyNjEsIDB4MjMzNiwKLSAgICAweDAwYTgsIDB4MjM1 ZCwgMHgyMmM0LCAweDIzNmMsIDB4MjI2MCwgMHgyMjYxLCAweDIzNmEsIDB4MDBhZiwKLSAgICAw eDIyMTgsIDB4MjVjYiwgMHgyMzNkLCAweDIzNDksIDB4MjI5NiwgMHgyMzVmLCAweDAwYjYsIDB4 MDBiNywKLSAgICAweDIzN2EsIDB4MjIwYSwgMHgyMzc3LCAweDIyNjIsIDB4MjM3MywgMHgyMzc0 LCAweDIzNzUsIDB4MDBiZiwKLSAgICAweDI1MTQsIDB4MjUzNCwgMHgyNTJjLCAweDI1MWMsIDB4 MDBjNCwgMHgwMGM1LCAweDAwYzYsIDB4MDBjNywKLSAgICAweDAwYzgsIDB4MDBjOSwgMHgyMzQy LCAweDIzM2IsIDB4MjUxMCwgMHgwMGNkLCAweDI1MDAsIDB4MjUzYywKLSAgICAweDIzNmMsIDB4 MDBkMSwgMHgyMzUwLCAweDIzNTcsIDB4MjM0NywgMHgyMzQ4LCAweDAwZDYsIDB4MDBkNywKLSAg ICAweDAwZDgsIDB4MjUxOCwgMHgyNTBjLCAweDI1MDIsIDB4MDBkYywgMHgyNTI0LCAweDIzMzcs IDB4MDBkZiwKLSAgICAweDAwZTAsIDB4MDBlMSwgMHgwMGUyLCAweDAwZTMsIDB4MDBlNCwgMHgw MGU1LCAweDAwZTYsIDB4MDBlNywKLSAgICAweDAwZTgsIDB4MDBlOSwgMHgwMGVhLCAweDAwZWIs IDB4MDBlYywgMHgwMGVkLCAweDAwZWUsIDB4MDBlZiwKLSAgICAweDIzNjQsIDB4MDBmMSwgMHgw MGYyLCAweDAwZjMsIDB4MDBmNCwgMHgwMGY1LCAweDAwZjYsIDB4MDBmNywKLSAgICAweDIyMDUs IDB4MDBmOSwgMHgwMGZhLCAweDAwZmIsIDB4MDBmYywgMHgyMjM1LCAweDIzNjgsIDB4MjM2NQot fTsKLQotLyogOC1iaXQgR09TVCBzdGFuZGFyZCBzZXRzICovCi0KLXN0cnVjdCB4X3RvX3VuaWNv ZGUgdV9rb2k4ID0gewotICAgIDk2LCAzMiwgWDJVX1NURCwgQUxfQ1lSSUwsICJLT0ktOCIsICJr b2k4IiwgMCwgTlVMTCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKLSAgICAweDA0NEUsIDB4MDQzMCwgMHgwNDMxLCAweDA0NDYsIDB4MDQzNCwgMHgwNDM1 LCAweDA0NDQsIDB4MDQzMywKLSAgICAweDA0NDUsIDB4MDQzOCwgMHgwNDM5LCAweDA0M0EsIDB4 MDQzQiwgMHgwNDNDLCAweDA0M0QsIDB4MDQzRSwKLSAgICAweDA0M0YsIDB4MDQ0RiwgMHgwNDQw LCAweDA0NDEsIDB4MDQ0MiwgMHgwNDQzLCAweDA0MzYsIDB4MDQzMiwKLSAgICAweDA0NEMsIDB4 MDQ0QiwgMHgwNDM3LCAweDA0NDgsIDB4MDQ0RCwgMHgwNDQ5LCAweDA0NDcsIDB4MDQ0QSwKLSAg ICAweDA0MkUsIDB4MDQxMCwgMHgwNDExLCAweDA0MjYsIDB4MDQxNCwgMHgwNDE1LCAweDA0MjQs IDB4MDQxMywKLSAgICAweDA0MjUsIDB4MDQxOCwgMHgwNDE5LCAweDA0MUEsIDB4MDQxQiwgMHgw NDFDLCAweDA0MUQsIDB4MDQxRSwKLSAgICAweDA0MUYsIDB4MDQyRiwgMHgwNDIwLCAweDA0MjEs IDB4MDQyMiwgMHgwNDIzLCAweDA0MTYsIDB4MDQxMiwKLSAgICAweDA0MkMsIDB4MDQyQiwgMHgw NDE3LCAweDA0MjgsIDB4MDQyRCwgMHgwNDI5LCAweDA0MjcsIDB4ZmZmZAotfTsKLQotLyogT3Ro ZXIgS09JLTggYmFzZWQgc2V0cyAqLwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfa29pOHIgPSB7 ICAgICAgICAgLyogKFJ1c3NpYSkgVGFibGUgZnJvbSBSRkMxNDg5ICovCi0gICAgMTI4LCAwLCBY MlVfQ1AsIEFMX0NZUklMLCAiS09JOC1SIiwgImtvaThyIiwgMCwgTlVMTCwKLSAgICAweDI1MDAs IDB4MjUwMiwgMHgyNTBDLCAweDI1MTAsIDB4MjUxNCwgMHgyNTE4LCAweDI1MUMsIDB4MjUyNCwK LSAgICAweDI1MkMsIDB4MjUzNCwgMHgyNTNDLCAweDI1ODAsIDB4MjU4NCwgMHgyNTg4LCAweDI1 OEMsIDB4MjU5MCwKLSAgICAweDI1OTEsIDB4MjU5MiwgMHgyNTkzLCAweDIzMjAsIDB4MjVBMCwg MHgyMjE5LCAweDIyMUEsIDB4MjI0OCwKLSAgICAweDIyNjQsIDB4MjI2NSwgMHgwMEEwLCAweDIz MjEsIDB4MDBCMCwgMHgwMEIyLCAweDAwQjcsIDB4MDBGNywKLSAgICAweDI1NTAsIDB4MjU1MSwg MHgyNTUyLCAweDA0NTEsIDB4MjU1MywgMHgyNTU0LCAweDI1NTUsIDB4MjU1NiwKLSAgICAweDI1 NTcsIDB4MjU1OCwgMHgyNTU5LCAweDI1NUEsIDB4MjU1QiwgMHgyNTVDLCAweDI1NUQsIDB4MjU1 RSwKLSAgICAweDI1NUYsIDB4MjU2MCwgMHgyNTYxLCAweDA0MDEsIDB4MjU2MiwgMHgyNTYzLCAw eDI1NjQsIDB4MjU2NSwKLSAgICAweDI1NjYsIDB4MjU2NywgMHgyNTY4LCAweDI1NjksIDB4MjU2 QSwgMHgyNTZCLCAweDI1NkMsIDB4MDBBOSwKLSAgICAweDA0NEUsIDB4MDQzMCwgMHgwNDMxLCAw eDA0NDYsIDB4MDQzNCwgMHgwNDM1LCAweDA0NDQsIDB4MDQzMywKLSAgICAweDA0NDUsIDB4MDQz OCwgMHgwNDM5LCAweDA0M0EsIDB4MDQzQiwgMHgwNDNDLCAweDA0M0QsIDB4MDQzRSwKLSAgICAw eDA0M0YsIDB4MDQ0RiwgMHgwNDQwLCAweDA0NDEsIDB4MDQ0MiwgMHgwNDQzLCAweDA0MzYsIDB4 MDQzMiwKLSAgICAweDA0NEMsIDB4MDQ0QiwgMHgwNDM3LCAweDA0NDgsIDB4MDQ0RCwgMHgwNDQ5 LCAweDA0NDcsIDB4MDQ0QSwKLSAgICAweDA0MkUsIDB4MDQxMCwgMHgwNDExLCAweDA0MjYsIDB4 MDQxNCwgMHgwNDE1LCAweDA0MjQsIDB4MDQxMywKLSAgICAweDA0MjUsIDB4MDQxOCwgMHgwNDE5 LCAweDA0MUEsIDB4MDQxQiwgMHgwNDFDLCAweDA0MUQsIDB4MDQxRSwKLSAgICAweDA0MUYsIDB4 MDQyRiwgMHgwNDIwLCAweDA0MjEsIDB4MDQyMiwgMHgwNDIzLCAweDA0MTYsIDB4MDQxMiwKLSAg ICAweDA0MkMsIDB4MDQyQiwgMHgwNDE3LCAweDA0MjgsIDB4MDQyRCwgMHgwNDI5LCAweDA0Mjcs IDB4MDQyQQotfTsKLQotc3RydWN0IHhfdG9fdW5pY29kZSB1X2tvaTh1ID0geyAgICAgICAgIC8q IChVa3JhaW5lKSBGcm9tIFJGQzIzMTkgKi8KLSAgIDEyOCwgMCwgWDJVX0NQLCBBTF9DWVJJTCwg IktPSTgtVSIsICJrb2k4dSIsIDAsIE5VTEwsCi0gICAgMHgyNTAwLCAweDI1MDIsIDB4MjUwQywg MHgyNTEwLCAweDI1MTQsIDB4MjUxOCwgMHgyNTFDLCAweDI1MjQsCi0gICAgMHgyNTJDLCAweDI1 MzQsIDB4MjUzQywgMHgyNTgwLCAweDI1ODQsIDB4MjU4OCwgMHgyNThDLCAweDI1OTAsCi0gICAg MHgyNTkxLCAweDI1OTIsIDB4MjU5MywgMHgyMzIwLCAweDI1QTAsIDB4MjIxOSwgMHgyMjFBLCAw eDIyNDgsCi0gICAgMHgyMjY0LCAweDIyNjUsIDB4MDBBMCwgMHgyMzIxLCAweDAwQjAsIDB4MDBC MiwgMHgwMEI3LCAweDAwRjcsCi0gICAgMHgyNTUwLCAweDI1NTEsIDB4MjU1MiwgMHgwNDUxLCAw eDA0NTQsIDB4MjU1NCwgMHgwNDU2LCAweDA0NTcsCi0gICAgMHgyNTU3LCAweDI1NTgsIDB4MjU1 OSwgMHgyNTVBLCAweDI1NUIsIDB4MDQ5MSwgMHgyNTVELCAweDI1NUUsCi0gICAgMHgyNTVGLCAw eDI1NjAsIDB4MjU2MSwgMHgwNDAxLCAweDA0MDQsIDB4MjU2MywgMHgwNDA2LCAweDA0MDcsCi0g ICAgMHgyNTY2LCAweDI1NjcsIDB4MjU2OCwgMHgyNTY5LCAweDI1NkEsIDB4MDQ5MCwgMHgyNTZD LCAweDAwQTksCi0gICAgMHgwNDRFLCAweDA0MzAsIDB4MDQzMSwgMHgwNDQ2LCAweDA0MzQsIDB4 MDQzNSwgMHgwNDQ0LCAweDA0MzMsCi0gICAgMHgwNDQ1LCAweDA0MzgsIDB4MDQzOSwgMHgwNDNB LCAweDA0M0IsIDB4MDQzQywgMHgwNDNELCAweDA0M0UsCi0gICAgMHgwNDNGLCAweDA0NEYsIDB4 MDQ0MCwgMHgwNDQxLCAweDA0NDIsIDB4MDQ0MywgMHgwNDM2LCAweDA0MzIsCi0gICAgMHgwNDRD LCAweDA0NEIsIDB4MDQzNywgMHgwNDQ4LCAweDA0NEQsIDB4MDQ0OSwgMHgwNDQ3LCAweDA0NEEs Ci0gICAgMHgwNDJFLCAweDA0MTAsIDB4MDQxMSwgMHgwNDI2LCAweDA0MTQsIDB4MDQxNSwgMHgw NDI0LCAweDA0MTMsCi0gICAgMHgwNDI1LCAweDA0MTgsIDB4MDQxOSwgMHgwNDFBLCAweDA0MUIs IDB4MDQxQywgMHgwNDFELCAweDA0MUUsCi0gICAgMHgwNDFGLCAweDA0MkYsIDB4MDQyMCwgMHgw NDIxLCAweDA0MjIsIDB4MDQyMywgMHgwNDE2LCAweDA0MTIsCi0gICAgMHgwNDJDLCAweDA0MkIs IDB4MDQxNywgMHgwNDI4LCAweDA0MkQsIDB4MDQyOSwgMHgwNDI3LCAweDA0MkEKLX07Ci0KLS8q IFBDIENvZGUgUGFnZXMgKi8KLQotc3RydWN0IHhfdG9fdW5pY29kZSB1X2NwNDM3ID0gewotICAg IDEyOCwgMCwgWDJVX0NQLCBBTF9ST01BTiwiUEMgQ29kZSBQYWdlIDQzNyIsImNwNDM3IiwgMCwg TlVMTCwKLSAgICAweDAwYzcsIDB4MDBmYywgMHgwMGU5LCAweDAwZTIsIDB4MDBlNCwgMHgwMGUw LCAweDAwZTUsIDB4MDBlNywKLSAgICAweDAwZWEsIDB4MDBlYiwgMHgwMGU4LCAweDAwZWYsIDB4 MDBlZSwgMHgwMGVjLCAweDAwYzQsIDB4MDBjNSwKLSAgICAweDAwYzksIDB4MDBlNiwgMHgwMGM2 LCAweDAwZjQsIDB4MDBmNiwgMHgwMGYyLCAweDAwZmIsIDB4MDBmOSwKLSAgICAweDAwZmYsIDB4 MDBkNiwgMHgwMGRjLCAweDAwYTIsIDB4MDBhMywgMHgwMGE1LCAweDIwYTcsIDB4MDE5MiwKLSAg ICAweDAwZTEsIDB4MDBlZCwgMHgwMGYzLCAweDAwZmEsIDB4MDBmMSwgMHgwMGQxLCAweDAwYWEs IDB4MDBiYSwKLSAgICAweDAwYmYsIDB4MjMxMCwgMHgwMGFjLCAweDAwYmQsIDB4MDBiYywgMHgw MGExLCAweDAwYWIsIDB4MDBiYiwKLSAgICAweDI1OTEsIDB4MjU5MiwgMHgyNTkzLCAweDI1MDIs IDB4MjUyNCwgMHgyNTYxLCAweDI1NjIsIDB4MjU1NiwKLSAgICAweDI1NTUsIDB4MjU2MywgMHgy NTUxLCAweDI1NTcsIDB4MjU1ZCwgMHgyNTVjLCAweDI1NWIsIDB4MjUxMCwKLSAgICAweDI1MTQs IDB4MjUzNCwgMHgyNTJjLCAweDI1MWMsIDB4MjUwMCwgMHgyNTNjLCAweDI1NWUsIDB4MjU1ZiwK LSAgICAweDI1NWEsIDB4MjU1NCwgMHgyNTY5LCAweDI1NjYsIDB4MjU2MCwgMHgyNTUwLCAweDI1 NmMsIDB4MjU2NywKLSAgICAweDI1NjgsIDB4MjU2NCwgMHgyNTY1LCAweDI1NTksIDB4MjU1OCwg MHgyNTUyLCAweDI1NTMsIDB4MjU2YiwKLSAgICAweDI1NmEsIDB4MjUxOCwgMHgyNTBjLCAweDI1 ODgsIDB4MjU4NCwgMHgyNThjLCAweDI1OTAsIDB4MjU4MCwKLSAgICAweDAzYjEsIDB4MDBkZiwg MHgwMzkzLCAweDAzYzAsIDB4MDNhMywgMHgwM2MzLCAweDAwYjUsIDB4MDNjNCwKLSAgICAweDAz YTYsIDB4MDM5OCwgMHgwM2E5LCAweDAzYjQsIDB4MjIxZSwgMHgwM2M2LCAweDAzYjUsIDB4MjIy OSwKLSAgICAweDIyNjEsIDB4MDBiMSwgMHgyMjY1LCAweDIyNjQsIDB4MjMyMCwgMHgyMzIxLCAw eDAwZjcsIDB4MjI0OCwKLSAgICAweDAwYjAsIDB4MjIxOSwgMHgwMGI3LCAweDIyMWEsIDB4MjA3 ZiwgMHgwMGIyLCAvKiAweDI1YWUgKi8gMHgyNWEwLCAweDAwYTAKLX07Ci0KLXN0cnVjdCB4X3Rv X3VuaWNvZGUgdV9tYXpvdmlhID0gewotICAgIDEyOCwgMCwgWDJVX0NQLCBBTF9ST01BTiwiUG9s aXNoIE1hem92aWEgUEMgQ29kZSBQYWdlIiwibWF6b3ZpYSIsIDAsIE5VTEwsCi0gICAgMHgwMGM3 LCAweDAwZmMsIDB4MDBlOSwgMHgwMGUyLCAweDAwZTQsIDB4MDBlMCwgMHgwMTA1LCAweDAwZTcs IC8qIDgwICovCi0gICAgMHgwMGVhLCAweDAwZWIsIDB4MDBlOCwgMHgwMGVmLCAweDAwZWUsIDB4 MDEwNywgMHgwMGM0LCAweDAxMDQsIC8qIDg4ICovCi0gICAgMHgwMTE4LCAweDAxMTksIDB4MDE0 MiwgMHgwMGY0LCAweDAwZjYsIDB4MDEwNiwgMHgwMGZiLCAweDAwZjksIC8qIDkwICovCi0gICAg MHgwMTVhLCAweDAwZDYsIDB4MDBkYywgMHgwMGEyLCAweDAxNDEsIDB4MDBhNSwgMHgwMTViLCAw eDAxOTIsIC8qIDk4ICovCi0gICAgMHgwMTc5LCAweDAxN2IsIDB4MDBmMywgMHgwMGQzLCAweDAx NDQsIDB4MDE0MywgMHgwMTdhLCAweDAxN2MsIC8qIGEwICovCi0gICAgMHgwMGJmLCAweDIzMTAs IDB4MDBhYywgMHgwMGJkLCAweDAwYmMsIDB4MDBhMSwgMHgwMGFiLCAweDAwYmIsIC8qIGE4ICov Ci0gICAgMHgyNTkxLCAweDI1OTIsIDB4MjU5MywgMHgyNTAyLCAweDI1MjQsIDB4MjU2MSwgMHgy NTYyLCAweDI1NTYsIC8qIGIwICovCi0gICAgMHgyNTU1LCAweDI1NjMsIDB4MjU1MSwgMHgyNTU3 LCAweDI1NWQsIDB4MjU1YywgMHgyNTViLCAweDI1MTAsIC8qIGI4ICovCi0gICAgMHgyNTE0LCAw eDI1MzQsIDB4MjUyYywgMHgyNTFjLCAweDI1MDAsIDB4MjUzYywgMHgyNTVlLCAweDI1NWYsIC8q IGMwICovCi0gICAgMHgyNTVhLCAweDI1NTQsIDB4MjU2OSwgMHgyNTY2LCAweDI1NjAsIDB4MjU1 MCwgMHgyNTZjLCAweDI1NjcsIC8qIGM4ICovCi0gICAgMHgyNTY4LCAweDI1NjQsIDB4MjU2NSwg MHgyNTU5LCAweDI1NTgsIDB4MjU1MiwgMHgyNTUzLCAweDI1NmIsIC8qIGQwICovCi0gICAgMHgy NTZhLCAweDI1MTgsIDB4MjUwYywgMHgyNTg4LCAweDI1ODQsIDB4MjU4YywgMHgyNTkwLCAweDI1 ODAsIC8qIGQ4ICovCi0gICAgMHgwM2IxLCAweDAwZGYsIDB4MDM5MywgMHgwM2MwLCAweDAzYTMs IDB4MDNjMywgMHgwMGI1LCAweDAzYzQsIC8qIGUwICovCi0gICAgMHgwM2E2LCAweDAzOTgsIDB4 MDNhOSwgMHgwM2I0LCAweDIyMWUsIDB4MDNjNiwgMHgwM2I1LCAweDIyMjksIC8qIGU4ICovCi0g ICAgMHgyMjYxLCAweDAwYjEsIDB4MjI2NSwgMHgyMjY0LCAweDIzMjAsIDB4MjMyMSwgMHgwMGY3 LCAweDIyNDgsIC8qIGYwICovCi0gICAgMHgwMGIwLCAweDIyMTksIDB4MDBiNywgMHgyMjFhLCAw eDIwN2YsIDB4MDBiMiwgMHgyNWEwLCAweDAwYTAgIC8qIGY4ICovCi19OwotCi1zdHJ1Y3QgeF90 b191bmljb2RlIHVfY3A4NTAgPSB7Ci0gICAgMTI4LCAwLCBYMlVfQ1AsIEFMX1JPTUFOLCJQQyBD b2RlIFBhZ2UgODUwIiwiY3A4NTAiLCAwLCBOVUxMLAotICAgIDB4MDBjNywgMHgwMGZjLCAweDAw ZTksIDB4MDBlMiwgMHgwMGU0LCAweDAwZTAsIDB4MDBlNSwgMHgwMGU3LAotICAgIDB4MDBlYSwg MHgwMGViLCAweDAwZTgsIDB4MDBlZiwgMHgwMGVlLCAweDAwZWMsIDB4MDBjNCwgMHgwMGM1LAot ICAgIDB4MDBjOSwgMHgwMGU2LCAweDAwYzYsIDB4MDBmNCwgMHgwMGY2LCAweDAwZjIsIDB4MDBm YiwgMHgwMGY5LAotICAgIDB4MDBmZiwgMHgwMGQ2LCAweDAwZGMsIDB4MDBmOCwgMHgwMGEzLCAw eDAwZDgsIDB4MDBkNywgMHgwMTkyLAotICAgIDB4MDBlMSwgMHgwMGVkLCAweDAwZjMsIDB4MDBm YSwgMHgwMGYxLCAweDAwZDEsIDB4MDBhYSwgMHgwMGJhLAotICAgIDB4MDBiZiwgMHgwMGFlLCAw eDAwYWMsIDB4MDBiZCwgMHgwMGJjLCAweDAwYTEsIDB4MDBhYiwgMHgwMGJiLAotICAgIDB4MjU5 MSwgMHgyNTkyLCAweDI1OTMsIDB4MjUwMiwgMHgyNTI0LCAweDAwYzEsIDB4MDBjMiwgMHgwMGMw LAotICAgIDB4MDBhOSwgMHgyNTYzLCAweDI1NTEsIDB4MjU1NywgMHgyNTVkLCAweDAwYTIsIDB4 MDBhNSwgMHgyNTEwLAotICAgIDB4MjUxNCwgMHgyNTM0LCAweDI1MmMsIDB4MjUxYywgMHgyNTAw LCAweDI1M2MsIDB4MDBlMywgMHgwMGMzLAotICAgIDB4MjU1YSwgMHgyNTU0LCAweDI1NjksIDB4 MjU2NiwgMHgyNTYwLCAweDI1NTAsIDB4MjU2YywgMHgwMGE0LAotICAgIDB4MDBmMCwgMHgwMGQw LCAweDAwY2EsIDB4MDBjYiwgMHgwMGM4LCAweDAxMzEsIDB4MDBjZCwgMHgwMGNlLAotICAgIDB4 MDBjZiwgMHgyNTE4LCAweDI1MGMsIDB4MjU4OCwgMHgyNTg0LCAweDAwYTYsIDB4MDBjYywgMHgy NTgwLAotICAgIDB4MDBkMywgMHgwMGRmLCAweDAwZDQsIDB4MDBkMiwgMHgwMGY1LCAweDAwZDUs IDB4MDBiNSwgMHgwMGZlLAotICAgIDB4MDBkZSwgMHgwMGRhLCAweDAwZGIsIDB4MDBkOSwgMHgw MGZkLCAweDAwZGQsIDB4MDBhZiwgMHgwMGI0LAotICAgIDB4MDBhZCwgMHgwMGIxLCAweDIwMTcs IDB4MDBiZSwgMHgwMGI2LCAweDAwYTcsIDB4MDBmNywgMHgwMGI4LAotICAgIDB4MDBiMCwgMHgw MGE4LCAweDAwYjcsIDB4MDBiOSwgMHgwMGIzLCAweDAwYjIsIDB4MjVhMCwgMHgwMGEwCi19Owot Ci1zdHJ1Y3QgeF90b191bmljb2RlIHVfY3A4NTIgPSB7Ci0gICAgMTI4LCAwLCBYMlVfQ1AsIEFM X1JPTUFOLCJQQyBDb2RlIFBhZ2UgODUyIiwiY3A4NTIiLCAwLCBOVUxMLAotICAgIDB4MDBjNywg MHgwMGZjLCAweDAwZTksIDB4MDBlMiwgMHgwMGU0LCAweDAxNmYsIDB4MDEwNywgMHgwMGU3LAot ICAgIDB4MDE0MiwgMHgwMGViLCAweDAxNTAsIDB4MDE1MSwgMHgwMGVlLCAweDAxNzksIDB4MDBj NCwgMHgwMTA2LAotICAgIDB4MDBjOSwgMHgwMTM5LCAweDAxM2EsIDB4MDBmNCwgMHgwMGY2LCAw eDAxM2QsIDB4MDEzZSwgMHgwMTVhLAotICAgIDB4MDE1YiwgMHgwMGQ2LCAweDAwZGMsIDB4MDE2 NCwgMHgwMTY1LCAweDAxNDEsIDB4MDBkNywgMHgwMTBkLAotICAgIDB4MDBlMSwgMHgwMGVkLCAw eDAwZjMsIDB4MDBmYSwgMHgwMTA0LCAweDAxMDUsIDB4MDE3ZCwgMHgwMTdlLAotICAgIDB4MDEx OCwgMHgwMTE5LCAweDAwYWMsIDB4MDE3YSwgMHgwMTBjLCAweDAxNWYsIDB4MDBhYiwgMHgwMGJi LAotICAgIDB4MjU5MSwgMHgyNTkyLCAweDI1OTMsIDB4MjUwMiwgMHgyNTI0LCAweDAwYzEsIDB4 MDBjMiwgMHgwMTFhLAotICAgIDB4MDE1ZSwgMHgyNTYzLCAweDI1NTEsIDB4MjU1NywgMHgyNTVk LCAweDAxN2IsIDB4MDE3YywgMHgyNTEwLAotICAgIDB4MjUxNCwgMHgyNTM0LCAweDI1MmMsIDB4 MjUxYywgMHgyNTAwLCAweDI1M2MsIDB4MDEwMiwgMHgwMTAzLAotICAgIDB4MjU1YSwgMHgyNTU0 LCAweDI1NjksIDB4MjU2NiwgMHgyNTYwLCAweDI1NTAsIDB4MjU2YywgMHgwMGE0LAotICAgIDB4 MDExMSwgMHgwMTEwLCAweDAxMGUsIDB4MDBjYiwgMHgwMTBmLCAweDAxNDcsIDB4MDBjZCwgMHgw MGNlLAotICAgIDB4MDExYiwgMHgyNTE4LCAweDI1MGMsIDB4MjU4OCwgMHgyNTg0LCAweDAxNjIs IDB4MDE2ZSwgMHgyNTgwLAotICAgIDB4MDBkMywgMHgwMGRmLCAweDAwZDQsIDB4MDE0MywgMHgw MTQ0LCAweDAxNDgsIDB4MDE2MCwgMHgwMTYxLAotICAgIDB4MDE1NCwgMHgwMGRhLCAweDAxNTUs IDB4MDE3MCwgMHgwMGZkLCAweDAwZGQsIDB4MDE2MywgMHgwMGI0LAotICAgIDB4MDBhZCwgMHgw MmRkLCAweDAyZGIsIDB4MDJjNywgMHgwMmQ4LCAweDAwYTcsIDB4MDBmNywgMHgwMGI4LAotICAg IDB4MDBiMCwgMHgwMGE4LCAweDAyZDksIDB4MDE3MSwgMHgwMTU4LCAweDAxNTksIDB4MjVhMCwg MHgwMGEwCi19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfY3A4NTUgPSB7ICAgICAgICAgLyog Q1A4NTUgQ3lyaWxsaWMgdG8gVW5pY29kZSAqLwotICAgIDEyOCwgMCwgWDJVX0NQLCBBTF9DWVJJ TCwiUEMgQ29kZSBQYWdlIDg1NSIsImNwODU1IiwgMCwgTlVMTCwKLSAgICAweDA0NTIsIDB4MDQw MiwgMHgwNDUzLCAweDA0MDMsIDB4MDQ1MSwgMHgwNDAxLCAweDA0NTQsIDB4MDQwNCwKLSAgICAw eDA0NTUsIDB4MDQwNSwgMHgwNDU2LCAweDA0MDYsIDB4MDQ1NywgMHgwNDA3LCAweDA0NTgsIDB4 MDQwOCwKLSAgICAweDA0NTksIDB4MDQwOSwgMHgwNDVhLCAweDA0MGEsIDB4MDQ1YiwgMHgwNDBi LCAweDA0NWMsIDB4MDQwYywKLSAgICAweDA0NWUsIDB4MDQwZSwgMHgwNDVmLCAweDA0MGYsIDB4 MDQ0ZSwgMHgwNDJlLCAweDA0NGEsIDB4MDQyYSwKLSAgICAweDA0MzAsIDB4MDQxMCwgMHgwNDMx LCAweDA0MTEsIDB4MDQ0NiwgMHgwNDI2LCAweDA0MzQsIDB4MDQxNCwKLSAgICAweDA0MzUsIDB4 MDQxNSwgMHgwNDQ0LCAweDA0MjQsIDB4MDQzMywgMHgwNDEzLCAweDAwYWIsIDB4MDBiYiwKLSAg ICAweDI1OTEsIDB4MjU5MiwgMHgyNTkzLCAweDI1MDIsIDB4MjUyNCwgMHgwNDQ1LCAweDA0MjUs IDB4MDQzOCwKLSAgICAweDA0MTgsIDB4MjU2MywgMHgyNTUxLCAweDI1NTcsIDB4MjU1ZCwgMHgw NDM5LCAweDA0MTksIDB4MjUxMCwKLSAgICAweDI1MTQsIDB4MjUzNCwgMHgyNTJjLCAweDI1MWMs IDB4MjUwMCwgMHgyNTNjLCAweDA0M2EsIDB4MDQxYSwKLSAgICAweDI1NWEsIDB4MjU1NCwgMHgy NTY5LCAweDI1NjYsIDB4MjU2MCwgMHgyNTUwLCAweDI1NmMsIDB4MDBhNCwKLSAgICAweDA0M2Is IDB4MDQxYiwgMHgwNDNjLCAweDA0MWMsIDB4MDQzZCwgMHgwNDFkLCAweDA0M2UsIDB4MDQxZSwK LSAgICAweDA0M2YsIDB4MjUxOCwgMHgyNTBjLCAweDI1ODgsIDB4MjU4NCwgMHgwNDFmLCAweDA0 NGYsIDB4MjU4MCwKLSAgICAweDA0MmYsIDB4MDQ0MCwgMHgwNDIwLCAweDA0NDEsIDB4MDQyMSwg MHgwNDQyLCAweDA0MjIsIDB4MDQ0MywKLSAgICAweDA0MjMsIDB4MDQzNiwgMHgwNDE2LCAweDA0 MzIsIDB4MDQxMiwgMHgwNDRjLCAweDA0MmMsIDB4MjExNiwKLSAgICAweDAwMmQsIDB4MDQ0Yiwg MHgwNDJiLCAweDA0MzcsIDB4MDQxNywgMHgwNDQ4LCAweDA0MjgsIDB4MDQ0ZCwKLSAgICAweDA0 MmQsIDB4MDQ0OSwgMHgwNDI5LCAweDA0NDcsIDB4MDQyNywgMHgwMGE3LCAweDI1YTAsIDB4MDAy MAotfTsKLQotc3RydWN0IHhfdG9fdW5pY29kZSB1X2NwODU2ID0geyAgICAgICAgIC8qIENQODU2 IChCdWxnYXJpYSkgdG8gVW5pY29kZSAqLwotICAgIDEyOCwgMCwgWDJVX0NQLCBBTF9DWVJJTCwi UEMgQ29kZSBQYWdlIDg1NiIsImNwODU2IiwgMCwgTlVMTCwKLSAgICAweDA0MTAsIDB4MDQxMSwg MHgwNDEyLCAweDA0MTMsIDB4MDQxNCwgMHgwNDE1LCAweDA0MTYsIDB4MDQxNywKLSAgICAweDA0 MTgsIDB4MDQxOSwgMHgwNDFhLCAweDA0MWIsIDB4MDQxYywgMHgwNDFkLCAweDA0MWUsIDB4MDQx ZiwKLSAgICAweDA0MjAsIDB4MDQyMSwgMHgwNDIyLCAweDA0MjMsIDB4MDQyNCwgMHgwNDI1LCAw eDA0MjYsIDB4MDQyNywKLSAgICAweDA0MjgsIDB4MDQyOSwgMHgwNDJhLCAweDA0MmIsIDB4MDQy YywgMHgwNDJkLCAweDA0MmUsIDB4MDQyZiwKLSAgICAweDA0MzAsIDB4MDQzMSwgMHgwNDMyLCAw eDA0MzMsIDB4MDQzNCwgMHgwNDM1LCAweDA0MzYsIDB4MDQzNywKLSAgICAweDA0MzgsIDB4MDQz OSwgMHgwNDNhLCAweDA0M2IsIDB4MDQzYywgMHgwNDNkLCAweDA0M2UsIDB4MDQzZiwKLSAgICAw eDA0NDAsIDB4MDQ0MSwgMHgwNDQyLCAweDA0NDMsIDB4MDQ0NCwgMHgwNDQ1LCAweDA0NDYsIDB4 MDQ0NywKLSAgICAweDA0NDgsIDB4MDQ0OSwgMHgwNDRhLCAweDA0NGIsIDB4MDQ0YywgMHgwNDRk LCAweDA0NGUsIDB4MDQ0ZiwKLSAgICAweDI1MTQsIDB4MjUzNCwgMHgyNTJjLCAweDI1MWMsIDB4 MjUwMCwgMHgyNTNjLCAweDI1NjMsIDB4MjU1MSwKLSAgICAweDI1NWEsIDB4MjU1NCwgMHgyNTY5 LCAweDI1NjYsIDB4MjU2MCwgMHgyNTUwLCAweDI1NmMsIDB4MjUxMCwKLSAgICAweDI1OTEsIDB4 MjU5MiwgMHgyNTkzLCAweDI1MDIsIDB4MjUyNCwgMHgyMTE2LCAweDAwYTcsIDB4MjU1NywKLSAg ICAweDI1NWQsIDB4MjUxOCwgMHgyNTBjLCAweDI1ODgsIDB4MjU4NCwgMHgyNThjLCAweDI1OTAs IDB4MjU4MCwKLSAgICAweDAzYjEsIDB4MDBkZiwgMHgwMzkzLCAweDAzYzAsIDB4MDNhMywgMHgw M2MzLCAweDAwYjUsIDB4MDNjNCwKLSAgICAweDAzYTYsIDB4MDM5OCwgMHgwM2E5LCAweDAzYjQs IDB4MjIxZSwgMHgwM2M2LCAweDAzYjUsIDB4MjIyOSwKLSAgICAweDIyNjEsIDB4MDBiMSwgMHgy MjY1LCAweDIyNjQsIDB4MjMyMCwgMHgyMzIxLCAweDAwZjcsIDB4MjI0OCwKLSAgICAweDAwYjAs IDB4MjIxOSwgMHgwMGI3LCAweDIyMWEsIDB4MjA3ZiwgMHgwMGIyLCAweDI1YTAsIDB4MDBhMAot fTsKLQotc3RydWN0IHhfdG9fdW5pY29kZSB1X2NwODU3ID0gewotICAgIDEyOCwgMCwgWDJVX0NQ LCBBTF9ST01BTiwiUEMgQ29kZSBQYWdlIDg1NyIsImNwODU3IiwgMCwgTlVMTCwKLSAgICAweDAw YzcsIDB4MDBmYywgMHgwMGU5LCAweDAwZTIsIDB4MDBlNCwgMHgwMGUwLCAweDAwZTUsIDB4MDBl NywgLyogMHg4MCAqLwotICAgIDB4MDBlYSwgMHgwMGViLCAweDAwZTgsIDB4MDBlZiwgMHgwMGVl LCAweDAxMzEsIDB4MDBjNCwgMHgwMGM1LCAvKiAweDg4ICovCi0gICAgMHgwMGM5LCAweDAwZTYs IDB4MDBjNiwgMHgwMGY0LCAweDAwZjYsIDB4MDBmMiwgMHgwMGZiLCAweDAwZjksIC8qIDB4OTAg Ki8KLSAgICAweDAxMzAsIDB4MDBkNiwgMHgwMGRjLCAweDAwZjgsIDB4MDBhMywgMHgwMGQ4LCAw eDAxNWUsIDB4MDE1ZiwgLyogMHg5OCAqLwotICAgIDB4MDBlMSwgMHgwMGVkLCAweDAwZjMsIDB4 MDBmYSwgMHgwMGYxLCAweDAwZDEsIDB4MDExZSwgMHgwMTFmLCAvKiAweGEwICovCi0gICAgMHgw MGJmLCAweDAwYWUsIDB4MDBhYywgMHgwMGJkLCAweDAwYmMsIDB4MDBhMSwgMHgwMGFiLCAweDAw YmIsIC8qIDB4YTggKi8KLSAgICAweDI1OTEsIDB4MjU5MiwgMHgyNTkzLCAweDI1MDIsIDB4MjUy NCwgMHgwMGMxLCAweDAwYzIsIDB4MDBjMCwgLyogMHhiMCAqLwotICAgIDB4MDBhOSwgMHgyNTYz LCAweDI1NTEsIDB4MjU1NywgMHgyNTVkLCAweDAwYTIsIDB4MDBhNSwgMHgyNTEwLCAvKiAweGI4 ICovCi0gICAgMHgyNTE0LCAweDI1MzQsIDB4MjUyYywgMHgyNTFjLCAweDI1MDAsIDB4MjUzYywg MHgwMGUzLCAweDAwYzMsIC8qIDB4YzAgKi8KLSAgICAweDI1NWEsIDB4MjU1NCwgMHgyNTY5LCAw eDI1NjYsIDB4MjU2MCwgMHgyNTUwLCAweDI1NmMsIDB4MDBhNCwgLyogMHhjOCAqLwotICAgIDB4 MDBiYSwgMHgwMGFhLCAweDAwY2EsIDB4MDBjYiwgMHgwMGM4LCAweDIwYWMsIDB4MDBjZCwgMHgw MGNlLCAvKiAweGQwICovCi0gICAgMHgwMGNmLCAweDI1MTgsIDB4MjUwYywgMHgyNTg4LCAweDI1 ODQsIDB4MDBhNiwgMHgwMGNjLCAweDI1ODAsIC8qIDB4ZDggKi8KLSAgICAweDAwZDMsIDB4MDBk ZiwgMHgwMGQ0LCAweDAwZDIsIDB4MDBmNSwgMHgwMGQ1LCAweDAwYjUsIDB4ZmZmZCwgLyogMHhl MCAqLwotICAgIDB4MDBkNywgMHgwMGRhLCAweDAwZGIsIDB4MDBkOSwgMHgwMGVjLCAweDAwZmYs IDB4MDBhZiwgMHgwMGI0LCAvKiAweGU4ICovCi0gICAgMHgwMGFkLCAweDAwYjEsIDB4ZmZmZCwg MHgwMGJlLCAweDAwYjYsIDB4MDBhNywgMHgwMGY3LCAweDAwYjgsIC8qIDB4ZjAgKi8KLSAgICAw eDAwYjAsIDB4MDBhOCwgMHgwMGI3LCAweDAwYjksIDB4MDBiMywgMHgwMGIyLCAweDI1YTAsIDB4 MDBhMCAgLyogMHhmOCAqLwotfTsKLQotc3RydWN0IHhfdG9fdW5pY29kZSB1X2NwODU4ID0gewot ICAgIDEyOCwgMCwgWDJVX0NQLCBBTF9ST01BTiwiUEMgQ29kZSBQYWdlIDg1OCIsImNwODU4Iiwg MCwgTlVMTCwKLSAgICAweDAwYzcsIDB4MDBmYywgMHgwMGU5LCAweDAwZTIsIDB4MDBlNCwgMHgw MGUwLCAweDAwZTUsIDB4MDBlNywKLSAgICAweDAwZWEsIDB4MDBlYiwgMHgwMGU4LCAweDAwZWYs IDB4MDBlZSwgMHgwMGVjLCAweDAwYzQsIDB4MDBjNSwKLSAgICAweDAwYzksIDB4MDBlNiwgMHgw MGM2LCAweDAwZjQsIDB4MDBmNiwgMHgwMGYyLCAweDAwZmIsIDB4MDBmOSwKLSAgICAweDAwZmYs IDB4MDBkNiwgMHgwMGRjLCAweDAwZjgsIDB4MDBhMywgMHgwMGQ4LCAweDAwZDcsIDB4MDE5MiwK LSAgICAweDAwZTEsIDB4MDBlZCwgMHgwMGYzLCAweDAwZmEsIDB4MDBmMSwgMHgwMGQxLCAweDAw YWEsIDB4MDBiYSwKLSAgICAweDAwYmYsIDB4MDBhZSwgMHgwMGFjLCAweDAwYmQsIDB4MDBiYywg MHgwMGExLCAweDAwYWIsIDB4MDBiYiwKLSAgICAweDI1OTEsIDB4MjU5MiwgMHgyNTkzLCAweDI1 MDIsIDB4MjUyNCwgMHgwMGMxLCAweDAwYzIsIDB4MDBjMCwKLSAgICAweDAwYTksIDB4MjU2Mywg MHgyNTUxLCAweDI1NTcsIDB4MjU1ZCwgMHgwMGEyLCAweDAwYTUsIDB4MjUxMCwKLSAgICAweDI1 MTQsIDB4MjUzNCwgMHgyNTJjLCAweDI1MWMsIDB4MjUwMCwgMHgyNTNjLCAweDAwZTMsIDB4MDBj MywKLSAgICAweDI1NWEsIDB4MjU1NCwgMHgyNTY5LCAweDI1NjYsIDB4MjU2MCwgMHgyNTUwLCAw eDI1NmMsIDB4MDBhNCwKLSAgICAweDAwZjAsIDB4MDBkMCwgMHgwMGNhLCAweDAwY2IsIDB4MDBj OCwgMHgyMGFjLCAweDAwY2QsIDB4MDBjZSwKLSAgICAweDAwY2YsIDB4MjUxOCwgMHgyNTBjLCAw eDI1ODgsIDB4MjU4NCwgMHgwMGE2LCAweDAwY2MsIDB4MjU4MCwKLSAgICAweDAwZDMsIDB4MDBk ZiwgMHgwMGQ0LCAweDAwZDIsIDB4MDBmNSwgMHgwMGQ1LCAweDAwYjUsIDB4MDBmZSwKLSAgICAw eDAwZGUsIDB4MDBkYSwgMHgwMGRiLCAweDAwZDksIDB4MDBmZCwgMHgwMGRkLCAweDAwYWYsIDB4 MDBiNCwKLSAgICAweDAwYWQsIDB4MDBiMSwgMHgyMDE3LCAweDAwYmUsIDB4MDBiNiwgMHgwMGE3 LCAweDAwZjcsIDB4MDBiOCwKLSAgICAweDAwYjAsIDB4MDBhOCwgMHgwMGI3LCAweDAwYjksIDB4 MDBiMywgMHgwMGIyLCAweDI1YTAsIDB4MDBhMAotfTsKLQotc3RydWN0IHhfdG9fdW5pY29kZSB1 X2NwODYyID0gewotICAgIDEyOCwgMCwgWDJVX0NQLCBBTF9IRUJSRVcsIlBDIENvZGUgUGFnZSA4 NjIiLCJjcDg2MiIsIDAsIE5VTEwsCi0gICAgMHgwNWQwLCAweDA1ZDEsIDB4MDVkMiwgMHgwNWQz LCAweDA1ZDQsIDB4MDVkNSwgMHgwNWQ2LCAweDA1ZDcsCi0gICAgMHgwNWQ4LCAweDA1ZDksIDB4 MDVkYSwgMHgwNWRiLCAweDA1ZGMsIDB4MDVkZCwgMHgwNWRlLCAweDA1ZGYsCi0gICAgMHgwNWUw LCAweDA1ZTEsIDB4MDVlMiwgMHgwNWUzLCAweDA1ZTQsIDB4MDVlNSwgMHgwNWU2LCAweDA1ZTcs Ci0gICAgMHgwNWU4LCAweDA1ZTksIDB4MDVlYSwgMHgwMGEyLCAweDAwYTMsIDB4MDBhNSwgMHgy MGE3LCAweDAxOTIsCi0gICAgMHgwMGUxLCAweDAwZWQsIDB4MDBmMywgMHgwMGZhLCAweDAwZjEs IDB4MDBkMSwgMHgwMGFhLCAweDAwYmEsCi0gICAgMHgwMGJmLCAweDIzMTAsIDB4MDBhYywgMHgw MGJkLCAweDAwYmMsIDB4MDBhMSwgMHgwMGFiLCAweDAwYmIsCi0gICAgMHgyNTkxLCAweDI1OTIs IDB4MjU5MywgMHgyNTAyLCAweDI1MjQsIDB4MjU2MSwgMHgyNTYyLCAweDI1NTYsCi0gICAgMHgy NTU1LCAweDI1NjMsIDB4MjU1MSwgMHgyNTU3LCAweDI1NWQsIDB4MjU1YywgMHgyNTViLCAweDI1 MTAsCi0gICAgMHgyNTE0LCAweDI1MzQsIDB4MjUyYywgMHgyNTFjLCAweDI1MDAsIDB4MjUzYywg MHgyNTVlLCAweDI1NWYsCi0gICAgMHgyNTVhLCAweDI1NTQsIDB4MjU2OSwgMHgyNTY2LCAweDI1 NjAsIDB4MjU1MCwgMHgyNTZjLCAweDI1NjcsCi0gICAgMHgyNTY4LCAweDI1NjQsIDB4MjU2NSwg MHgyNTU5LCAweDI1NTgsIDB4MjU1MiwgMHgyNTUzLCAweDI1NmIsCi0gICAgMHgyNTZhLCAweDI1 MTgsIDB4MjUwYywgMHgyNTg4LCAweDI1ODQsIDB4MjU4YywgMHgyNTkwLCAweDI1ODAsCi0gICAg MHgwM2IxLCAweDAwZGYsIDB4MDM5MywgMHgwM2MwLCAweDAzYTMsIDB4MDNjMywgMHgwMGI1LCAw eDAzYzQsCi0gICAgMHgwM2E2LCAweDAzOTgsIDB4MDNhOSwgMHgwM2I0LCAweDIyMWUsIDB4MDNj NiwgMHgwM2I1LCAweDIyMjksCi0gICAgMHgyMjYxLCAweDAwYjEsIDB4MjI2NSwgMHgyMjY0LCAw eDIzMjAsIDB4MjMyMSwgMHgwMGY3LCAweDIyNDgsCi0gICAgMHgwMGIwLCAweDIyMTksIDB4MDBi NywgMHgyMjFhLCAweDIwN2YsIDB4MDBiMiwgMHgyNWEwLCAweDAwYTAKLX07Ci0KLXN0cnVjdCB4 X3RvX3VuaWNvZGUgdV9jcDg2NCA9IHsKLSAgICAxMjgsIDAsIFgyVV9DUCwgQUxfQVJBQklDLCJQ QyBDb2RlIFBhZ2UgODY0IiwiY3A4NjQiLCAwLCBOVUxMLAotICAgIDB4MDBiMCwgMHgwMGI3LCAw eDIyMTksIDB4MjIxYSwgMHgyNTkyLCAweDI1MDAsIDB4MjUwMiwgMHgyNTNjLAotICAgIDB4MjUy NCwgMHgyNTJjLCAweDI1MWMsIDB4MjUzNCwgMHgyNTEwLCAweDI1MGMsIDB4MjUxNCwgMHgyNTE4 LAotICAgIDB4MDNiMiwgMHgyMjFlLCAweDAzYzYsIDB4MDBiMSwgMHgwMGJkLCAweDAwYmMsIDB4 MjI0OCwgMHgwMGFiLAotICAgIDB4MDBiYiwgMHhmZWY3LCAweGZlZjgsIDB4ZmZmZCwgMHhmZmZk LCAweGZlZmIsIDB4ZmVmYywgMHhmZmZkLAotICAgIDB4MDBhMCwgMHgwMGFkLCAweGZlODIsIDB4 MDBhMywgMHgwMGE0LCAweGZlODQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmU4ZSwgMHhmZThm LCAweGZlOTUsIDB4ZmU5OSwgMHgwNjBjLCAweGZlOWQsIDB4ZmVhMSwgMHhmZWE1LAotICAgIDB4 MDY2MCwgMHgwNjYxLCAweDA2NjIsIDB4MDY2MywgMHgwNjY0LCAweDA2NjUsIDB4MDY2NiwgMHgw NjY3LAotICAgIDB4MDY2OCwgMHgwNjY5LCAweGZlZDEsIDB4MDYxYiwgMHhmZWIxLCAweGZlYjUs IDB4ZmViOSwgMHgwNjFmLAotICAgIDB4MDBhMiwgMHhmZTgwLCAweGZlODEsIDB4ZmU4MywgMHhm ZTg1LCAweGZlY2EsIDB4ZmU4YiwgMHhmZThkLAotICAgIDB4ZmU5MSwgMHhmZTkzLCAweGZlOTcs IDB4ZmU5YiwgMHhmZTlmLCAweGZlYTMsIDB4ZmVhNywgMHhmZWE5LAotICAgIDB4ZmVhYiwgMHhm ZWFkLCAweGZlYWYsIDB4ZmViMywgMHhmZWI3LCAweGZlYmIsIDB4ZmViZiwgMHhmZWMxLAotICAg IDB4ZmVjNSwgMHhmZWNiLCAweGZlY2YsIDB4MDBhNiwgMHgwMGFjLCAweDAwZjcsIDB4MDBkNywg MHhmZWM5LAotICAgIDB4MDY0MCwgMHhmZWQzLCAweGZlZDcsIDB4ZmVkYiwgMHhmZWRmLCAweGZl ZTMsIDB4ZmVlNywgMHhmZWViLAotICAgIDB4ZmVlZCwgMHhmZWVmLCAweGZlZjMsIDB4ZmViZCwg MHhmZWNjLCAweGZlY2UsIDB4ZmVjZCwgMHhmZWUxLAotICAgIDB4ZmU3ZCwgMHgwNjUxLCAweGZl ZTUsIDB4ZmVlOSwgMHhmZWVjLCAweGZlZjAsIDB4ZmVmMiwgMHhmZWQwLAotICAgIDB4ZmVkNSwg MHhmZWY1LCAweGZlZjYsIDB4ZmVkZCwgMHhmZWQ5LCAweGZlZjEsIDB4MjVhMCwgMHhmZmZkCi19 OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfY3A4NjYgPSB7Ci0gICAgMTI4LCAwLCBYMlVfQ1As IEFMX0NZUklMLCJQQyBDb2RlIFBhZ2UgODY2IiwiY3A4NjYiLCAwLCBOVUxMLAotICAgIDB4MDQx MCwgMHgwNDExLCAweDA0MTIsIDB4MDQxMywgMHgwNDE0LCAweDA0MTUsIDB4MDQxNiwgMHgwNDE3 LAotICAgIDB4MDQxOCwgMHgwNDE5LCAweDA0MWEsIDB4MDQxYiwgMHgwNDFjLCAweDA0MWQsIDB4 MDQxZSwgMHgwNDFmLAotICAgIDB4MDQyMCwgMHgwNDIxLCAweDA0MjIsIDB4MDQyMywgMHgwNDI0 LCAweDA0MjUsIDB4MDQyNiwgMHgwNDI3LAotICAgIDB4MDQyOCwgMHgwNDI5LCAweDA0MmEsIDB4 MDQyYiwgMHgwNDJjLCAweDA0MmQsIDB4MDQyZSwgMHgwNDJmLAotICAgIDB4MDQzMCwgMHgwNDMx LCAweDA0MzIsIDB4MDQzMywgMHgwNDM0LCAweDA0MzUsIDB4MDQzNiwgMHgwNDM3LAotICAgIDB4 MDQzOCwgMHgwNDM5LCAweDA0M2EsIDB4MDQzYiwgMHgwNDNjLCAweDA0M2QsIDB4MDQzZSwgMHgw NDNmLAotICAgIDB4MjU5MSwgMHgyNTkyLCAweDI1OTMsIDB4MjUwMiwgMHgyNTI0LCAweDI1NjEs IDB4MjU2MiwgMHgyNTU2LAotICAgIDB4MjU1NSwgMHgyNTYzLCAweDI1NTEsIDB4MjU1NywgMHgy NTVkLCAweDI1NWMsIDB4MjU1YiwgMHgyNTEwLAotICAgIDB4MjUxNCwgMHgyNTM0LCAweDI1MmMs IDB4MjUxYywgMHgyNTAwLCAweDI1M2MsIDB4MjU1ZSwgMHgyNTVmLAotICAgIDB4MjU1YSwgMHgy NTU0LCAweDI1NjksIDB4MjU2NiwgMHgyNTYwLCAweDI1NTAsIDB4MjU2YywgMHgyNTY3LAotICAg IDB4MjU2OCwgMHgyNTY0LCAweDI1NjUsIDB4MjU1OSwgMHgyNTU4LCAweDI1NTIsIDB4MjU1Mywg MHgyNTZiLAotICAgIDB4MjU2YSwgMHgyNTE4LCAweDI1MGMsIDB4MjU4OCwgMHgyNTg0LCAweDI1 OGMsIDB4MjU5MCwgMHgyNTgwLAotICAgIDB4MDQ0MCwgMHgwNDQxLCAweDA0NDIsIDB4MDQ0Mywg MHgwNDQ0LCAweDA0NDUsIDB4MDQ0NiwgMHgwNDQ3LAotICAgIDB4MDQ0OCwgMHgwNDQ5LCAweDA0 NGEsIDB4MDQ0YiwgMHgwNDRjLCAweDA0NGQsIDB4MDQ0ZSwgMHgwNDRmLAotICAgIDB4MDQwMSwg MHgwNDUxLCAweDA0MDQsIDB4MDQ1NCwgMHgwNDA3LCAweDA0NTcsIDB4MDQwZSwgMHgwNDVlLAot ICAgIDB4MDBiMCwgMHgyMjE5LCAweDAwYjcsIDB4MjIxYSwgMHgyMTE2LCAweDAwYTQsIDB4MjVh MCwgMHgwMGEwCi19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfY3A4NjkgPSB7Ci0gICAgMTI4 LCAwLCBYMlVfQ1AsIEFMX0dSRUVLLCJQQyBDb2RlIFBhZ2UgODY5IiwiY3A4NjkiLCAwLCBOVUxM LAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 MDM4NiwgMHhmZmZkLAotICAgIDB4MDBiNywgMHgwMGFjLCAweDAwYTYsIDB4MjAxOCwgMHgyMDE5 LCAweDAzODgsIDB4MjAxNSwgMHgwMzg5LAotICAgIDB4MDM4YSwgMHgwM2FhLCAweDAzOGMsIDB4 ZmZmZCwgMHhmZmZkLCAweDAzOGUsIDB4MDNhYiwgMHgwMGE5LAotICAgIDB4MDM4ZiwgMHgwMGIy LCAweDAwYjMsIDB4MDNhYywgMHgwMGEzLCAweDAzYWQsIDB4MDNhZSwgMHgwM2FmLAotICAgIDB4 MDNjYSwgMHgwMzkwLCAweDAzY2MsIDB4MDNjZCwgMHgwMzkxLCAweDAzOTIsIDB4MDM5MywgMHgw Mzk0LAotICAgIDB4MDM5NSwgMHgwMzk2LCAweDAzOTcsIDB4MDBiZCwgMHgwMzk4LCAweDAzOTks IDB4MDBhYiwgMHgwMGJiLAotICAgIDB4MjU5MSwgMHgyNTkyLCAweDI1OTMsIDB4MjUwMiwgMHgy NTI0LCAweDAzOWEsIDB4MDM5YiwgMHgwMzljLAotICAgIDB4MDM5ZCwgMHgyNTYzLCAweDI1NTEs IDB4MjU1NywgMHgyNTVkLCAweDAzOWUsIDB4MDM5ZiwgMHgyNTEwLAotICAgIDB4MjUxNCwgMHgy NTM0LCAweDI1MmMsIDB4MjUxYywgMHgyNTAwLCAweDI1M2MsIDB4MDNhMCwgMHgwM2ExLAotICAg IDB4MjU1YSwgMHgyNTU0LCAweDI1NjksIDB4MjU2NiwgMHgyNTYwLCAweDI1NTAsIDB4MjU2Yywg MHgwM2EzLAotICAgIDB4MDNhNCwgMHgwM2E1LCAweDAzYTYsIDB4MDNhNywgMHgwM2E4LCAweDAz YTksIDB4MDNiMSwgMHgwM2IyLAotICAgIDB4MDNiMywgMHgyNTE4LCAweDI1MGMsIDB4MjU4OCwg MHgyNTg0LCAweDAzYjQsIDB4MDNiNSwgMHgyNTgwLAotICAgIDB4MDNiNiwgMHgwM2I3LCAweDAz YjgsIDB4MDNiOSwgMHgwM2JhLCAweDAzYmIsIDB4MDNiYywgMHgwM2JkLAotICAgIDB4MDNiZSwg MHgwM2JmLCAweDAzYzAsIDB4MDNjMSwgMHgwM2MzLCAweDAzYzIsIDB4MDNjNCwgMHgwMzg0LAot ICAgIDB4MDBhZCwgMHgwMGIxLCAweDAzYzUsIDB4MDNjNiwgMHgwM2M3LCAweDAwYTcsIDB4MDNj OCwgMHgwMzg1LAotICAgIDB4MDBiMCwgMHgwMGE4LCAweDAzYzksIDB4MDNjYiwgMHgwM2IwLCAw eDAzY2UsIDB4MjVhMCwgMHgwMGEwCi19OwotCi0vKiBXaW5kb3dzIGNvZGUgcGFnZXMgKi8KLQot c3RydWN0IHhfdG9fdW5pY29kZSB1X2NwMTI1MCA9IHsgICAgICAgIC8qIFdpbmRvd3MgTGF0aW4t MiAqLwotICAgIDEyOCwgMCwgWDJVX0NQLCBBTF9ST01BTiwiV2luZG93cyBDb2RlIFBhZ2UgMTI1 MCIsImNwMTI1MCIsIDAsIE5VTEwsCi0gICAgMHgyMGFjLCAweGZmZmQsIDB4MjAxYSwgMHgwMTky LCAweDIwMWUsIDB4MjAyNiwgMHgyMDIwLCAweDIwMjEsIC8qIDgwICovCi0gICAgMHgwMDVlLCAw eDIwMzEsIDB4MDE2MCwgMHgwMDNjLCAweDAxNWEsIDB4MDE2NCwgMHgwMTdkLCAweDAxNzksIC8q IDg4ICovCi0gICAgMHhmZmZkLCAweDIwMTgsIDB4MjAxOSwgMHgyMDFjLCAweDIwMWQsIDB4MjAy MiwgMHgyMDEyLCAweDIwMTQsIC8qIDkwICovCi0gICAgMHhmZmZkLCAweDIxMjIsIDB4MDE2MSwg MHgwMDNlLCAweDAxNWIsIDB4MDE2NSwgMHgwMTdlLCAweDAxN2EsIC8qIDk4ICovCi0gICAgMHgw MEEwLCAweDAyYzcsIDB4MDJkOCwgMHgwMTQxLCAweDAwQTQsIDB4MDEwNCwgMHgwMEE2LCAweDAw QTcsIC8qIEEwICovCi0gICAgMHgwMEE4LCAweDAwYTksIDB4MDE1RSwgMHgwMGFiLCAweDAwYWMs IDB4MDAyRCwgMHgwMGFlLCAweDAxN0IsIC8qIEE4ICovCi0gICAgMHgwMEIwLCAweDAwYjEsIDB4 MDJEQiwgMHgwMTQyLCAweDAwQjQsIDB4MDBiNSwgMHgwMGI2LCAweDAwYjcsIC8qIEIwICovCi0g ICAgMHgwMEI4LCAweDAxMDUsIDB4MDE1RiwgMHgwMGJiLCAweDAxM2QsIDB4MDJERCwgMHgwMTNF LCAweDAxN0MsIC8qIEI4ICovCi0gICAgMHgwMTU0LCAweDAwQzEsIDB4MDBDMiwgMHgwMTAyLCAw eDAwQzQsIDB4MDEzOSwgMHgwMTA2LCAweDAwQzcsIC8qIEMwICovCi0gICAgMHgwMTBDLCAweDAw QzksIDB4MDExOCwgMHgwMENCLCAweDAxMUEsIDB4MDBDRCwgMHgwMENFLCAweDAxMEUsCi0gICAg MHgwMTEwLCAweDAxNDMsIDB4MDE0NywgMHgwMEQzLCAweDAwRDQsIDB4MDE1MCwgMHgwMEQ2LCAw eDAwRDcsCi0gICAgMHgwMTU4LCAweDAxNkUsIDB4MDBEQSwgMHgwMTcwLCAweDAwREMsIDB4MDBE RCwgMHgwMTYyLCAweDAwREYsCi0gICAgMHgwMTU1LCAweDAwRTEsIDB4MDBFMiwgMHgwMTAzLCAw eDAwRTQsIDB4MDEzQSwgMHgwMTA3LCAweDAwRTcsCi0gICAgMHgwMTBELCAweDAwRTksIDB4MDEx OSwgMHgwMEVCLCAweDAxMUIsIDB4MDBFRCwgMHgwMEVFLCAweDAxMEYsCi0gICAgMHgwMTExLCAw eDAxNDQsIDB4MDE0OCwgMHgwMEYzLCAweDAwRjQsIDB4MDE1MSwgMHgwMEY2LCAweDAwRjcsCi0g ICAgMHgwMTU5LCAweDAxNkYsIDB4MDBGQSwgMHgwMTcxLCAweDAwRkMsIDB4MDBGRCwgMHgwMTYz LCAweDAyRDkKLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV9jcDEyNTEgPSB7ICAgICAgICAv KiBXaW5kb3dzIEN5cmlsbGljICovCi0gICAgMTI4LCAwLCBYMlVfQ1AsIEFMX0NZUklMLCJXaW5k b3dzIENvZGUgUGFnZSAxMjUxIiwiY3AxMjUxIiwgMCwgTlVMTCwKLSAgICAweDA0MDIsIDB4MDQw MywgMHgyMDFhLCAweDA0NTMsIDB4MjAxZSwgMHgyMDI2LCAweDIwMjAsIDB4MjAyMSwgLyogODAg Ki8KLSAgICAweDIwYWMsIDB4MjAzMSwgMHgwNDA5LCAweDAwM2MsIDB4MDQwYSwgMHgwNDBjLCAw eDA0MGIsIDB4MDQwZiwgLyogODggKi8KLSAgICAweDA0NTIsIDB4MjAxOCwgMHgyMDE5LCAweDIw MWMsIDB4MjAxZCwgMHgyMDIyLCAweDIwMTIsIDB4MjAxNCwgLyogOTAgKi8KLSAgICAweDAwN2Us IDB4MjEyMiwgMHgwNDU5LCAweDAwM2UsIDB4MDQ1YSwgMHgwNDVjLCAweDA0NWIsIDB4MDQ1Ziwg LyogOTggKi8KLSAgICAweDAwQTAsIDB4MDQwZSwgMHgwNDVlLCAweDA0MDgsIDB4MDBBNCwgMHgw NDkwLCAweDAwQTYsIDB4MDBBNywgLyogYTAgKi8KLSAgICAweDA0MDEsIDB4MDBBOSwgMHgwNDA0 LCAweDAwQUIsIDB4MDBBQywgMHgwMEFELCAweDAwQUUsIDB4MDQwNywgLyogYTggKi8KLSAgICAw eDAwYjAsIDB4MDBiMSwgMHgwNDA2LCAweDA0NTYsIDB4MDQ5MSwgMHgwMEI1LCAweDAwQjYsIDB4 MDBCNywgLyogYjAgKi8KLSAgICAweDA0NTEsIDB4MjExNiwgMHgwNDU0LCAweDAwQkIsIDB4MDQ1 OCwgMHgwNDA1LCAweDA0NTUsIDB4MDQ1NywgLyogYjggKi8KLSAgICAweDA0MTAsIDB4MDQxMSwg MHgwNDEyLCAweDA0MTMsIDB4MDQxNCwgMHgwNDE1LCAweDA0MTYsIDB4MDQxNywgLyogYzAgKi8K LSAgICAweDA0MTgsIDB4MDQxOSwgMHgwNDFhLCAweDA0MWIsIDB4MDQxYywgMHgwNDFkLCAweDA0 MWUsIDB4MDQxZiwgLyogYzggKi8KLSAgICAweDA0MjAsIDB4MDQyMSwgMHgwNDIyLCAweDA0MjMs IDB4MDQyNCwgMHgwNDI1LCAweDA0MjYsIDB4MDQyNywgLyogZDAgKi8KLSAgICAweDA0MjgsIDB4 MDQyOSwgMHgwNDJhLCAweDA0MmIsIDB4MDQyYywgMHgwNDJkLCAweDA0MmUsIDB4MDQyZiwgLyog ZDggKi8KLSAgICAweDA0MzAsIDB4MDQzMSwgMHgwNDMyLCAweDA0MzMsIDB4MDQzNCwgMHgwNDM1 LCAweDA0MzYsIDB4MDQzNywgLyogZTAgKi8KLSAgICAweDA0MzgsIDB4MDQzOSwgMHgwNDNhLCAw eDA0M2IsIDB4MDQzYywgMHgwNDNkLCAweDA0M2UsIDB4MDQzZiwgLyogZTggKi8KLSAgICAweDA0 NDAsIDB4MDQ0MSwgMHgwNDQyLCAweDA0NDMsIDB4MDQ0NCwgMHgwNDQ1LCAweDA0NDYsIDB4MDQ0 NywgLyogZjAgKi8KLSAgICAweDA0NDgsIDB4MDQ0OSwgMHgwNDRhLCAweDA0NGIsIDB4MDQ0Yywg MHgwNDRkLCAweDA0NGUsIDB4MDQ0ZiAgLyogZjggKi8KLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNv ZGUgdV9jcDEyNTIgPSB7ICAgICAgICAvKiBXaW5kb3dzIExhdGluLTEgKi8KLS8qCi0gIFRoZSBm b2xsb3dpbmcgY29kZSBwb2ludHMgYWRkZWQgU2VwdGVtYmVyIDE5OTg6Ci0gIDB4ODA6IEV1cm8K LSAgMHg4RTogTGF0aW4gQ2FwaXRhbCBMZXR0ZXIgWiB3aXRoIENhcm9uCi0gIDB4OUU6IExhdGlu IFNtYWxsIExldHRlciBaIHdpdGggQ2Fyb24KLSAgQW5ub3VuY2VkIGJ5IE11cnJheSBTYXJnZW50 IDxtdXJyYXlzQG1pY3Jvc29mdC5jb20+IHRvIFVuaWNvZGUgY29uc29ydGl1bSwKLSAgZW1haWws IDMgU2VwdGVtYmVyIDE5OTguICBUaGUgY29kZSBwYWdlIHdhcyBjaGFuZ2VkIGluIEp1bmUgMTk5 OC4gIFRoZQotICBjaGFuZ2UgaXMgcmVmbGVjdGVkIGluIFdpbmRvd3MgOTggYW5kICJyZWNlbnQg c2VydmljZSBwYWNrcyIgZm9yIFdpbmRvdyA5NQotICBhbmQgV2luZG93cyBOVCA0LjAuCi0qLwot ICAgIDEyOCwgMCwgWDJVX0NQLCBBTF9ST01BTiwiV2luZG93cyBDb2RlIFBhZ2UgMTI1MiIsImNw MTI1MiIsIDAsIE5VTEwsCi0gICAgMHgyMGFjLCAweGZmZmQsIDB4MjAxYSwgMHgwMTkyLCAweDIw MWUsIDB4MjAyNiwgMHgyMDIwLCAweDIwMjEsCi0gICAgMHgwMDVlLCAweDIwMzEsIDB4MDE2MCwg MHgwMDNjLCAweDAxNTIsIDB4ZmZmZCwgMHgwMTdELCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDIw MTgsIDB4MjAxOSwgMHgyMDFjLCAweDIwMWQsIDB4MjAyMiwgMHgyMDEyLCAweDIwMTQsCi0gICAg MHgwMDdlLCAweDIxMjIsIDB4MDE2MSwgMHgwMDNlLCAweDAxNTMsIDB4ZmZmZCwgMHgwMTdFLCAw eDAxNzgsCi0gICAgMHgwMEEwLCAweDAwQTEsIDB4MDBBMiwgMHgwMEEzLCAweDAwQTQsIDB4MDBB NSwgMHgwMEE2LCAweDAwQTcsCi0gICAgMHgwMEE4LCAweDAwQTksIDB4MDBBQSwgMHgwMEFCLCAw eDAwQUMsIDB4MDBBRCwgMHgwMEFFLCAweDAwQUYsCi0gICAgMHgwMEIwLCAweDAwQjEsIDB4MDBC MiwgMHgwMEIzLCAweDAwQjQsIDB4MDBCNSwgMHgwMEI2LCAweDAwQjcsCi0gICAgMHgwMEI4LCAw eDAwQjksIDB4MDBCQSwgMHgwMEJCLCAweDAwQkMsIDB4MDBCRCwgMHgwMEJFLCAweDAwQkYsCi0g ICAgMHgwMEMwLCAweDAwQzEsIDB4MDBDMiwgMHgwMEMzLCAweDAwQzQsIDB4MDBDNSwgMHgwMEM2 LCAweDAwQzcsCi0gICAgMHgwMEM4LCAweDAwQzksIDB4MDBDQSwgMHgwMENCLCAweDAwQ0MsIDB4 MDBDRCwgMHgwMENFLCAweDAwQ0YsCi0gICAgMHgwMEQwLCAweDAwRDEsIDB4MDBEMiwgMHgwMEQz LCAweDAwRDQsIDB4MDBENSwgMHgwMEQ2LCAweDAwRDcsCi0gICAgMHgwMEQ4LCAweDAwRDksIDB4 MDBEQSwgMHgwMERCLCAweDAwREMsIDB4MDBERCwgMHgwMERFLCAweDAwREYsCi0gICAgMHgwMEUw LCAweDAwRTEsIDB4MDBFMiwgMHgwMEUzLCAweDAwRTQsIDB4MDBFNSwgMHgwMEU2LCAweDAwRTcs Ci0gICAgMHgwMEU4LCAweDAwRTksIDB4MDBFQSwgMHgwMEVCLCAweDAwRUMsIDB4MDBFRCwgMHgw MEVFLCAweDAwRUYsCi0gICAgMHgwMEYwLCAweDAwRjEsIDB4MDBGMiwgMHgwMEYzLCAweDAwRjQs IDB4MDBGNSwgMHgwMEY2LCAweDAwRjcsCi0gICAgMHgwMEY4LCAweDAwRjksIDB4MDBGQSwgMHgw MEZCLCAweDAwRkMsIDB4MDBGRCwgMHgwMEZFLCAweDAwRkYKLX07Ci0KLXN0cnVjdCB4X3RvX3Vu aWNvZGUgdV9jcDEyNTMgPSB7ICAgICAgICAvKiBXaW5kb3dzIEdyZWVjZSAqLwotICAgIDEyOCwg MCwgWDJVX0NQLCBBTF9HUkVFSywiV2luZG93cyBDb2RlIFBhZ2UgMTI1MyIsImNwMTI1MyIsIDAs IE5VTEwsCi0gICAgMHgyMGFjLCAweGZmZmQsIDB4MjAxYSwgMHgwMTkyLCAweDIwMWUsIDB4MjAy NiwgMHgyMDIwLCAweDIwMjEsIC8qIDgwICovCi0gICAgMHhmZmZkLCAweDIwMzEsIDB4ZmZmZCwg MHgwMDNjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIC8qIDg4ICovCi0gICAgMHhm ZmZkLCAweDIwMTgsIDB4MjAxOSwgMHgyMDFjLCAweDIwMWQsIDB4MjAyMiwgMHgyMDEyLCAweDIw MTQsIC8qIDkwICovCi0gICAgMHhmZmZkLCAweDIxMjIsIDB4ZmZmZCwgMHgwMDNlLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIC8qIDk4ICovCi0gICAgMHgwMEEwLCAweDAwYjcsIDB4 MDM4NiwgMHgwMEEzLCAweDAwQTQsIDB4MDBBNSwgMHgwMEE2LCAweDAwQTcsIC8qIGEwICovCi0g ICAgMHgwMEE4LCAweDAwQTksIDB4MDBBQSwgMHgwMEFCLCAweDAwQUMsIDB4MDBBRCwgMHgwMEFF LCAweDAwQUYsIC8qIGE4ICovCi0gICAgMHgwMEIwLCAweDAwQjEsIDB4MDBCMiwgMHgwMEIzLCAw eDAwQjcsIDB4MDBCNSwgMHgwMEI2LCAweDAwQjcsIC8qIGIwICovCi0gICAgMHgwMzg4LCAweDAz ODksIDB4MDM4QSwgMHgwMEJCLCAweDAzOEMsIDB4MDBCRCwgMHgwMzhFLCAweDAzOEYsIC8qIGI4 ICovCi0gICAgMHgwMzkwLCAweDAzOTEsIDB4MDM5MiwgMHgwMzkzLCAweDAzOTQsIDB4MDM5NSwg MHgwMzk2LCAweDAzOTcsIC8qIGMwICovCi0gICAgMHgwMzk4LCAweDAzOTksIDB4MDM5QSwgMHgw MzlCLCAweDAzOUMsIDB4MDM5RCwgMHgwMzlFLCAweDAzOUYsIC8qIGM4ICovCi0gICAgMHgwM2Ew LCAweDAzYTEsIDB4ZmZmZCwgMHgwM2EzLCAweDAzYTQsIDB4MDNhNSwgMHgwM2E2LCAweDAzYTcs IC8qIGQwICovCi0gICAgMHgwM2E4LCAweDAzYTksIDB4MDNhQSwgMHgwM2FCLCAweDAzYUMsIDB4 MDNhRCwgMHgwM2FFLCAweDAzYUYsIC8qIGQ4ICovCi0gICAgMHgwM2IwLCAweDAzYjEsIDB4MDNi MiwgMHgwM2IzLCAweDAzYjQsIDB4MDNiNSwgMHgwM2I2LCAweDAzYjcsIC8qIGUwICovCi0gICAg MHgwM2I4LCAweDAzYjksIDB4MDNiQSwgMHgwM2JCLCAweDAzYkMsIDB4MDNiRCwgMHgwM2JFLCAw eDAzYkYsIC8qIGU4ICovCi0gICAgMHgwM2MwLCAweDAzYzEsIDB4MDNjMiwgMHgwM2MzLCAweDAz YzQsIDB4MDNjNSwgMHgwM2M2LCAweDAzYzcsIC8qIGYwICovCi0gICAgMHgwM2M4LCAweDAzYzks IDB4MDNjQSwgMHgwM2NCLCAweDAzY0MsIDB4MDNjRCwgMHgwM2NFLCAweGZmZmQgIC8qIGY4ICov Ci19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfY3AxMjU0ID0geyAgICAgICAgLyogV2luZG93 cyBUdXJrZXkgKi8KLSAgICAxMjgsIDAsIFgyVV9DUCwgQUxfUk9NQU4sIldpbmRvd3MgQ29kZSBQ YWdlIDEyNTQiLCJjcDEyNTQiLCAwLCBOVUxMLAotICAgIDB4MjBhYywgMHhmZmZkLCAweDIwMWEs IDB4MDE5MiwgMHgyMDFlLCAweDIwMjYsIDB4MjAyMCwgMHgyMDIxLCAvKiA4MCAqLwotICAgIDB4 MDA1ZSwgMHgyMDMxLCAweDAxNjAsIDB4MDAzYywgMHgwMTUyLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAvKiA4OCAqLwotICAgIDB4ZmZmZCwgMHgyMDE4LCAweDIwMTksIDB4MjAxYywgMHgyMDFk LCAweDIwMjIsIDB4MjAxMiwgMHgyMDE0LCAvKiA5MCAqLwotICAgIDB4MDA3ZSwgMHgyMTIyLCAw eDAxNjEsIDB4MDAzZSwgMHgwMTUzLCAweGZmZmQsIDB4ZmZmZCwgMHgwMTc4LCAvKiA5OCAqLwot ICAgIDB4MDBBMCwgMHgwMEExLCAweDAwQTIsIDB4MDBBMywgMHgwMEE0LCAweDAwQTUsIDB4MDBB NiwgMHgwMEE3LAotICAgIDB4MDBBOCwgMHgwMEE5LCAweDAwQUEsIDB4MDBBQiwgMHgwMEFDLCAw eDAwQUQsIDB4MDBBRSwgMHgwMEFGLAotICAgIDB4MDBCMCwgMHgwMEIxLCAweDAwQjIsIDB4MDBC MywgMHgwMEI0LCAweDAwQjUsIDB4MDBCNiwgMHgwMEI3LAotICAgIDB4MDBCOCwgMHgwMEI5LCAw eDAwQkEsIDB4MDBCQiwgMHgwMEJDLCAweDAwQkQsIDB4MDBCRSwgMHgwMEJGLAotICAgIDB4MDBD MCwgMHgwMEMxLCAweDAwQzIsIDB4MDBDMywgMHgwMEM0LCAweDAwQzUsIDB4MDBDNiwgMHgwMEM3 LAotICAgIDB4MDBDOCwgMHgwMEM5LCAweDAwQ0EsIDB4MDBDQiwgMHgwMENDLCAweDAwQ0QsIDB4 MDBDRSwgMHgwMENGLAotICAgIDB4MDExZSwgMHgwMEQxLCAweDAwRDIsIDB4MDBEMywgMHgwMEQ0 LCAweDAwRDUsIDB4MDBENiwgMHgwMEQ3LAotICAgIDB4MDBEOCwgMHgwMEQ5LCAweDAwREEsIDB4 MDBEQiwgMHgwMERDLCAweDAxMzAsIDB4MDE1ZSwgMHgwMERGLAotICAgIDB4MDBFMCwgMHgwMEUx LCAweDAwRTIsIDB4MDBFMywgMHgwMEU0LCAweDAwRTUsIDB4MDBFNiwgMHgwMEU3LAotICAgIDB4 MDBFOCwgMHgwMEU5LCAweDAwRUEsIDB4MDBFQiwgMHgwMEVDLCAweDAwRUQsIDB4MDBFRSwgMHgw MEVGLAotICAgIDB4MDExZiwgMHgwMEYxLCAweDAwRjIsIDB4MDBGMywgMHgwMEY0LCAweDAwRjUs IDB4MDBGNiwgMHgwMEY3LAotICAgIDB4MDBGOCwgMHgwMEY5LCAweDAwRkEsIDB4MDBGQiwgMHgw MEZDLCAweDAxMzEsIDB4MDE1ZiwgMHgwMEZGCi19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVf Y3AxMjU1ID0geyAgICAgICAgLyogV2luZG93cyBIZWJyZXcgKi8KLSAgICAxMjgsIDAsIFgyVV9D UCwgQUxfUk9NQU4sIldpbmRvd3MgQ29kZSBQYWdlIDEyNTUgKEhlYnJldykiLCJjcDEyNTUiLAot ICAgIDAsIE5VTEwsCi0gICAgMHgyMEFDLCAweEZGRkQsIDB4MjAxYSwgMHgwMTkyLCAweDIwMWUs IDB4MjAyNiwgMHgyMDIwLCAweDIwMjEsCi0gICAgMHgwMmM2LCAweDIwMzAsIDB4ZmZmZCwgMHgy MDM5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweDIwMTgs IDB4MjAxOSwgMHgyMDFjLCAweDIwMWQsIDB4MjAyMiwgMHgyMDEzLCAweDIwMTQsCi0gICAgMHgw MmRjLCAweDIxMjIsIDB4ZmZmZCwgMHgyMDNhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHgwMGEwLCAweDAwYTEsIDB4MDBhMiwgMHgwMGEzLCAweDIwYWEsIDB4MDBhNSwg MHgwMGE2LCAweDAwYTcsCi0gICAgMHgwMGE4LCAweDAwYTksIDB4MDBkNywgMHgwMGFiLCAweDAw YWMsIDB4MDBhZCwgMHgwMGFlLCAweDAwYWYsCi0gICAgMHgwMGIwLCAweDAwYjEsIDB4MDBiMiwg MHgwMGIzLCAweDAwYjQsIDB4MDBiNSwgMHgwMGI2LCAweDAwYjcsCi0gICAgMHgwMGI4LCAweDAw YjksIDB4MDBmNywgMHgwMGJiLCAweDAwYmMsIDB4MDBiZCwgMHgwMGJlLCAweDAwYmYsCi0gICAg MHgwNWIwLCAweDA1YjEsIDB4MDViMiwgMHgwNWIzLCAweDA1YjQsIDB4MDViNSwgMHgwNWI2LCAw eDA1YjcsCi0gICAgMHgwNWI4LCAweDA1YjksIDB4ZmZmZCwgMHgwNWJiLCAweDA1YmMsIDB4MDVi ZCwgMHgwNWJlLCAweDA1YmYsCi0gICAgMHgwNWMwLCAweDA1YzEsIDB4MDVjMiwgMHgwNWMzLCAw eDA1ZjAsIDB4MDVmMSwgMHgwNWYyLCAweDA1ZjMsCi0gICAgMHgwNWY0LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHgwNWQwLCAw eDA1ZDEsIDB4MDVkMiwgMHgwNWQzLCAweDA1ZDQsIDB4MDVkNSwgMHgwNWQ2LCAweDA1ZDcsCi0g ICAgMHgwNWQ4LCAweDA1ZDksIDB4MDVkYSwgMHgwNWRiLCAweDA1ZGMsIDB4MDVkZCwgMHgwNWRl LCAweDA1ZGYsCi0gICAgMHgwNWUwLCAweDA1ZTEsIDB4MDVlMiwgMHgwNWUzLCAweDA1ZTQsIDB4 MDVlNSwgMHgwNWU2LCAweDA1ZTcsCi0gICAgMHgwNWU4LCAweDA1ZTksIDB4MDVlYSwgMHhmZmZk LCAweGZmZmQsIDB4MjAwZSwgMHgyMDBmLCAweGZmZmQKLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNv ZGUgdV9jcDEyNTYgPSB7ICAgICAgICAvKiBXaW5kb3dzIEFyYWJpYyAqLwotICAgIDEyOCwgMCwg WDJVX0NQLCBBTF9ST01BTiwiV2luZG93cyBDb2RlIFBhZ2UgMTI1NiAoQXJhYmljKSIsImNwMTI1 NiIsCi0gICAgMCwgTlVMTCwKLSAgICAweDIwYWMsIDB4MDY3ZSwgMHgyMDFhLCAweDAxOTIsIDB4 MjAxZSwgMHgyMDI2LCAweDIwMjAsIDB4MjAyMSwKLSAgICAweDAyYzYsIDB4MjAzMCwgMHhmZmZk LCAweDIwMzksIDB4MDE1MiwgMHgwNjg2LCAweDA2OTgsIDB4ZmZmZCwgLyogODggKi8KLSAgICAw eDA2YWYsIDB4MjAxOCwgMHgyMDE5LCAweDIwMWMsIDB4MjAxZCwgMHgyMDIyLCAweDIwMTMsIDB4 MjAxNCwgLyogOTAgKi8KLSAgICAweGZmZmQsIDB4MjEyMiwgMHhmZmZkLCAweDAwM2EsIDB4MDE1 MywgMHgyMDBjLCAweDIwMGQsIDB4ZmZmZCwgLyogOTggKi8KLSAgICAweDAwQTAsIDB4MDYwYywg MHgwMEEyLCAweDAwQTMsIDB4MDBBNCwgMHgwMGE1LCAweDAwQTYsIDB4MDBBNywgLyogYTAgKi8K LSAgICAweDAwYTgsIDB4MDBBOSwgMHhmZmZkLCAweDAwQUIsIDB4MDBBQywgMHgwMEFELCAweDAw QUUsIDB4MDBhZiwgLyogYTggKi8KLSAgICAweDAwQjAsIDB4MDBCMSwgMHgwMEIyLCAweDAwQjMs IDB4MDBiNCwgMHgwMEI1LCAweDAwQjYsIDB4MDBCNywgLyogYjAgKi8KLSAgICAweDAwYjgsIDB4 MDBCOSwgMHgwNjFiLCAweDAwQkIsIDB4MDBCQywgMHgwMEJELCAweDAwQkUsIDB4MDYxZiwgLyog YjggKi8KLSAgICAweGZmZmQsIDB4MDYyMSwgMHgwNjIyLCAweDA2MjMsIDB4MDYyNCwgMHgwNjI1 LCAweDA2MjYsIDB4MDYyNywgLyogYzAgKi8KLSAgICAweDA2MjgsIDB4MDYyOSwgMHgwNjJhLCAw eDA2MmIsIDB4MDYyYywgMHgwNjJkLCAweDA2MmUsIDB4MDYyZiwgLyogYzggKi8KLSAgICAweDA2 MzAsIDB4MDYzMSwgMHgwNjMyLCAweDA2MzMsIDB4MDYzNCwgMHgwNjM1LCAweDA2MzYsIDB4MDBE NywgLyogZDAgKi8KLSAgICAweDA2MzcsIDB4MDYzOCwgMHgwNjM5LCAweDA2M2EsIDB4MDY0MCwg MHgwNjQxLCAweDA2NDIsIDB4MDY0MywgLyogZDggKi8KLSAgICAweDAwZTAsIDB4MDY0NCwgMHgw MGUyLCAweDA2NDUsIDB4MDY0NiwgMHgwNjQ3LCAweDA2NDgsIDB4MDBlNywgLyogZTAgKi8KLSAg ICAweDAwZTgsIDB4MDBFOSwgMHgwMGVhLCAweDAwZWIsIDB4MDY0OSwgMHgwNjRhLCAweDAwZWUs IDB4MDBlZiwgLyogZTggKi8KLSAgICAweDA2NGIsIDB4MDY0YywgMHgwNjRkLCAweDA2NGUsIDB4 MDBmNCwgMHgwNjRmLCAweDA2NTAsIDB4MDBGNywgLyogZjAgKi8KLSAgICAweDA2NTEsIDB4MDBm OSwgMHgwNjUyLCAweDAwZmIsIDB4MDBmYywgMHgyMDBlLCAweDIwMGYsIDB4ZmZmZCAgLyogZjgg Ki8KLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV9jcDEyNTcgPSB7ICAgICAgICAvKiBXaW5k b3dzIExhdGluLTQgKi8KLSAgICAxMjgsIDAsIFgyVV9DUCwgQUxfUk9NQU4sIldpbmRvd3MgQ29k ZSBQYWdlIDEyNTciLCJjcDEyNTciLCAwLCBOVUxMLAotICAgIDB4MjBhYywgMHhmZmZkLCAweDIw MWEsIDB4ZmZmZCwgMHgyMDFlLCAweDIwMjYsIDB4MjAyMCwgMHgyMDIxLCAvKiA4MCAqLwotICAg IDB4ZmZmZCwgMHgyMDMxLCAweGZmZmQsIDB4MDAzYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAvKiA4OCAqLwotICAgIDB4ZmZmZCwgMHgyMDE4LCAweDIwMTksIDB4MjAxYywgMHgy MDFkLCAweDIwMjIsIDB4MjAxMiwgMHgyMDE0LCAvKiA5MCAqLwotICAgIDB4ZmZmZCwgMHgyMTIy LCAweGZmZmQsIDB4MDAzZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAvKiA5OCAq LwotICAgIDB4MDBBMCwgMHhmZmZkLCAweDAwQTIsIDB4MDBBMywgMHgwMEE0LCAweGZmZmQsIDB4 MDBBNiwgMHgwMEE3LCAvKiBhMCAqLwotICAgIDB4MDBkOCwgMHgwMEE5LCAweDAxNTYsIDB4MDBB QiwgMHgwMEFDLCAweDAwQUQsIDB4MDBBRSwgMHgwMGM2LCAvKiBhOCAqLwotICAgIDB4MDBCMCwg MHgwMEIxLCAweDAwQjIsIDB4MDBCMywgMHhmZmZkLCAweDAwQjUsIDB4MDBCNiwgMHgwMEI3LCAv KiBiMCAqLwotICAgIDB4MDBmOCwgMHgwMEI5LCAweDAxNTcsIDB4MDBCQiwgMHgwMEJDLCAweDAw QkQsIDB4MDBCRSwgMHgwMGU2LCAvKiBiOCAqLwotICAgIDB4MDEwNCwgMHgwMTJlLCAweDAxMDAs IDB4MDEwNiwgMHgwMEM0LCAweDAwQzUsIDB4MDExOCwgMHgwMTEyLCAvKiBjMCAqLwotICAgIDB4 MDEwQywgMHgwMEM5LCAweDAxNzksIDB4MDExNiwgMHgwMTIyLCAweDAxMzYsIDB4MDEyYSwgMHgw MGI3LCAvKiBjOCAqLwotICAgIDB4MDE2MCwgMHgwMTQzLCAweDAxNDUsIDB4MDBkMywgMHgwMTRj LCAweDAwRDUsIDB4MDBENiwgMHgwMEQ3LCAvKiBkMCAqLwotICAgIDB4MDE3MiwgMHgwMTQxLCAw eDAxNUEsIDB4MDE2YSwgMHgwMERDLCAweDAxN2IsIDB4MDE3ZCwgMHgwMERGLCAvKiBkOCAqLwot ICAgIDB4MDEwNSwgMHgwMTJmLCAweDAxMDEsIDB4MDEwNywgMHgwMEU0LCAweDAwRTUsIDB4MDEx OSwgMHgwMTEzLCAvKiBlMCAqLwotICAgIDB4MDEwRCwgMHgwMEU5LCAweDAxN2EsIDB4MDExNywg MHgwMTIzLCAweDAxMzcsIDB4MDEyYiwgMHgwMTNjLCAvKiBlOCAqLwotICAgIDB4MDE2MSwgMHgw MTQ0LCAweDAxNDYsIDB4MDBmMywgMHgwMTRkLCAweDAwRjUsIDB4MDBGNiwgMHgwMEY3LCAvKiBm MCAqLwotICAgIDB4MDE3MywgMHgwMTQyLCAweDAxNWIsIDB4MDE2YiwgMHgwMGZjLCAweDAxN2Ms IDB4MDE3ZSwgMHhmZmZkICAvKiBmOCAqLwotfTsKLQotc3RydWN0IHhfdG9fdW5pY29kZSB1X2Nw MTI1OCA9IHsgICAgICAgIC8qIFdpbmRvd3MgVmlldCBOYW0gKi8KLSAgICAxMjgsIDAsIFgyVV9D UCwgQUxfUk9NQU4sIldpbmRvd3MgQ29kZSBQYWdlIDEyNTggKFZpZXQgTmFtKSIsImNwMTI1OCIs Ci0gICAgMCwgTlVMTCwKLSAgICAweDIwYWMsIDB4ZmZmZCwgMHgyMDFhLCAweDAxOTIsIDB4MjAx ZSwgMHgyMDI2LCAweDIwMjAsIDB4MjAyMSwgLyogODAgKi8KLSAgICAweDAyYzYsIDB4MjAzMCwg MHhmZmZkLCAweDIwMzksIDB4MDE1MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgLyogODggKi8K LSAgICAweGZmZmQsIDB4MjAxOCwgMHgyMDE5LCAweDIwMWMsIDB4MjAxZCwgMHgyMDIyLCAweDIw MTMsIDB4MjAxNCwgLyogOTAgKi8KLSAgICAweDAyZGMsIDB4MjEyMiwgMHhmZmZkLCAweDIwM2Es IDB4MDE1MywgMHhmZmZkLCAweGZmZmQsIDB4MDE3OCwgLyogOTggKi8KLSAgICAweDAwQTAsIDB4 MDBhMSwgMHgwMEEyLCAweDAwQTMsIDB4MDBBNCwgMHgwMGE1LCAweDAwQTYsIDB4MDBBNywgLyog YTAgKi8KLSAgICAweDAwYTgsIDB4MDBBOSwgMHgwMGFhLCAweDAwQUIsIDB4MDBBQywgMHgwMEFE LCAweDAwQUUsIDB4MDBhZiwgLyogYTggKi8KLSAgICAweDAwQjAsIDB4MDBCMSwgMHgwMEIyLCAw eDAwQjMsIDB4MDBiNCwgMHgwMEI1LCAweDAwQjYsIDB4MDBCNywgLyogYjAgKi8KLSAgICAweDAw YjgsIDB4MDBCOSwgMHgwMGJhLCAweDAwQkIsIDB4MDBCQywgMHgwMEJELCAweDAwQkUsIDB4MDBi ZiwgLyogYjggKi8KLSAgICAweDAwYzAsIDB4MDBjMSwgMHgwMGMyLCAweDAxMDIsIDB4MDBDNCwg MHgwMEM1LCAweDAwYzYsIDB4MDBjNywgLyogYzAgKi8KLSAgICAweDAwYzgsIDB4MDBDOSwgMHgw MGNhLCAweDAwY2IsIDB4MDMwMCwgMHgwMGNkLCAweDAwY2UsIDB4MDBjZiwgLyogYzggKi8KLSAg ICAweDAxMTAsIDB4MDBkMSwgMHgwMzA5LCAweDAwZDMsIDB4MDBkNCwgMHgwMWEwLCAweDAwRDYs IDB4MDBENywgLyogZDAgKi8KLSAgICAweDAwZDgsIDB4MDBkOSwgMHgwMGRhLCAweDAwZGIsIDB4 MDBEQywgMHgwMWFmLCAweDAzMDMsIDB4MDBERiwgLyogZDggKi8KLSAgICAweDAwZTAsIDB4MDBl MSwgMHgwMGUyLCAweDAxMDMsIDB4MDBFNCwgMHgwMEU1LCAweDAwZTYsIDB4MDBkNywgLyogZTAg Ki8KLSAgICAweDAwZTgsIDB4MDBFOSwgMHgwMGVhLCAweDAwZWIsIDB4MDMwMSwgMHgwMGVkLCAw eDAwZWUsIDB4MDBlZiwgLyogZTggKi8KLSAgICAweDAxMTEsIDB4MDBmMSwgMHgwMzIzLCAweDAw ZjMsIDB4MDBmNCwgMHgwMWExLCAweDAwRjYsIDB4MDBGNywgLyogZjAgKi8KLSAgICAweDAwZjgs IDB4MDBmOSwgMHgwMGZhLCAweDAwZmIsIDB4MDBmYywgMHgwMWIwLCAweDIwYWIsIDB4MDBmZiAg LyogZjggKi8KLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV9jcDM3ID0geyAgLyogRUJDRElD IFUuUy4gKi8KLSAgICAyNTYsIDAsIFgyVV9DUCwgQUxfUk9NQU4sIkNvZGUgUGFnZSAwMzcgRUJD RElDIChVLlMuKSIsImNwMDM3IiwgMCwgTlVMTCwKLSAgICAweDAwMDAsIDB4MDAwMSwgMHgwMDAy LCAweDAwMDMsIDB4MDA5QywgMHgwMDA5LCAweDAwODYsIDB4MDA3RiwKLSAgICAweDAwOTcsIDB4 MDA4RCwgMHgwMDhFLCAweDAwMEIsIDB4MDAwQywgMHgwMDBELCAweDAwMEUsIDB4MDAwRiwKLSAg ICAweDAwMTAsIDB4MDAxMSwgMHgwMDEyLCAweDAwMTMsIDB4MDA5RCwgMHgwMDg1LCAweDAwMDgs IDB4MDA4NywKLSAgICAweDAwMTgsIDB4MDAxOSwgMHgwMDkyLCAweDAwOEYsIDB4MDAxQywgMHgw MDFELCAweDAwMUUsIDB4MDAxRiwKLSAgICAweDAwODAsIDB4MDA4MSwgMHgwMDgyLCAweDAwODMs IDB4MDA4NCwgMHgwMDBBLCAweDAwMTcsIDB4MDAxQiwKLSAgICAweDAwODgsIDB4MDA4OSwgMHgw MDhBLCAweDAwOEIsIDB4MDA4QywgMHgwMDA1LCAweDAwMDYsIDB4MDAwNywKLSAgICAweDAwOTAs IDB4MDA5MSwgMHgwMDE2LCAweDAwOTMsIDB4MDA5NCwgMHgwMDk1LCAweDAwOTYsIDB4MDAwNCwK LSAgICAweDAwOTgsIDB4MDA5OSwgMHgwMDlBLCAweDAwOUIsIDB4MDAxNCwgMHgwMDE1LCAweDAw OUUsIDB4MDAxQSwKLSAgICAweDAwMjAsIDB4MDBBMCwgMHgwMEUyLCAweDAwRTQsIDB4MDBFMCwg MHgwMEUxLCAweDAwRTMsIDB4MDBFNSwKLSAgICAweDAwRTcsIDB4MDBGMSwgMHgwMEEyLCAweDAw MkUsIDB4MDAzQywgMHgwMDI4LCAweDAwMkIsIDB4MDA3QywKLSAgICAweDAwMjYsIDB4MDBFOSwg MHgwMEVBLCAweDAwRUIsIDB4MDBFOCwgMHgwMEVELCAweDAwRUUsIDB4MDBFRiwKLSAgICAweDAw RUMsIDB4MDBERiwgMHgwMDIxLCAweDAwMjQsIDB4MDAyQSwgMHgwMDI5LCAweDAwM0IsIDB4MDBB QywKLSAgICAweDAwMkQsIDB4MDAyRiwgMHgwMEMyLCAweDAwQzQsIDB4MDBDMCwgMHgwMEMxLCAw eDAwQzMsIDB4MDBDNSwKLSAgICAweDAwQzcsIDB4MDBEMSwgMHgwMEE2LCAweDAwMkMsIDB4MDAy NSwgMHgwMDVGLCAweDAwM0UsIDB4MDAzRiwKLSAgICAweDAwRjgsIDB4MDBDOSwgMHgwMENBLCAw eDAwQ0IsIDB4MDBDOCwgMHgwMENELCAweDAwQ0UsIDB4MDBDRiwKLSAgICAweDAwQ0MsIDB4MDA2 MCwgMHgwMDNBLCAweDAwMjMsIDB4MDA0MCwgMHgwMDI3LCAweDAwM0QsIDB4MDAyMiwKLSAgICAw eDAwRDgsIDB4MDA2MSwgMHgwMDYyLCAweDAwNjMsIDB4MDA2NCwgMHgwMDY1LCAweDAwNjYsIDB4 MDA2NywKLSAgICAweDAwNjgsIDB4MDA2OSwgMHgwMEFCLCAweDAwQkIsIDB4MDBGMCwgMHgwMEZE LCAweDAwRkUsIDB4MDBCMSwKLSAgICAweDAwQjAsIDB4MDA2QSwgMHgwMDZCLCAweDAwNkMsIDB4 MDA2RCwgMHgwMDZFLCAweDAwNkYsIDB4MDA3MCwKLSAgICAweDAwNzEsIDB4MDA3MiwgMHgwMEFB LCAweDAwQkEsIDB4MDBFNiwgMHgwMEI4LCAweDAwQzYsIDB4MDBBNCwKLSAgICAweDAwQjUsIDB4 MDA3RSwgMHgwMDczLCAweDAwNzQsIDB4MDA3NSwgMHgwMDc2LCAweDAwNzcsIDB4MDA3OCwKLSAg ICAweDAwNzksIDB4MDA3QSwgMHgwMEExLCAweDAwQkYsIDB4MDBEMCwgMHgwMERELCAweDAwREUs IDB4MDBBRSwKLSAgICAweDAwNUUsIDB4MDBBMywgMHgwMEE1LCAweDAwQjcsIDB4MDBBOSwgMHgw MEE3LCAweDAwQjYsIDB4MDBCQywKLSAgICAweDAwQkQsIDB4MDBCRSwgMHgwMDVCLCAweDAwNUQs IDB4MDBBRiwgMHgwMEE4LCAweDAwQjQsIDB4MDBENywKLSAgICAweDAwN0IsIDB4MDA0MSwgMHgw MDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywKLSAgICAweDAwNDgs IDB4MDA0OSwgMHgwMEFELCAweDAwRjQsIDB4MDBGNiwgMHgwMEYyLCAweDAwRjMsIDB4MDBGNSwK LSAgICAweDAwN0QsIDB4MDA0QSwgMHgwMDRCLCAweDAwNEMsIDB4MDA0RCwgMHgwMDRFLCAweDAw NEYsIDB4MDA1MCwKLSAgICAweDAwNTEsIDB4MDA1MiwgMHgwMEI5LCAweDAwRkIsIDB4MDBGQywg MHgwMEY5LCAweDAwRkEsIDB4MDBGRiwKLSAgICAweDAwNUMsIDB4MDBGNywgMHgwMDUzLCAweDAw NTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsIDB4MDA1OCwKLSAgICAweDAwNTksIDB4MDA1QSwg MHgwMEIyLCAweDAwRDQsIDB4MDBENiwgMHgwMEQyLCAweDAwRDMsIDB4MDBENSwKLSAgICAweDAw MzAsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAz NywKLSAgICAweDAwMzgsIDB4MDAzOSwgMHgwMEIzLCAweDAwREIsIDB4MDBEQywgMHgwMEQ5LCAw eDAwREEsIDB4MDA5RgotfTsKLQotLyogT3RoZXIgcHJvcHJpZXRhcnkgOC1iaXQgc2V0cyAqLwot Ci1zdHJ1Y3QgeF90b191bmljb2RlIHVfZGVjbWNzID0gewotICAgIDk2LCAzMiwgWDJVX0RFQ3xY MlVfU1RELCBBTF9ST01BTiwgIkRFQyBNdWx0aW5hdGlvbmFsIiwgImRlYy1tY3MiLCAwLCAiJTUi LAotICAgIDB4MDBBMCwgMHgwMEExLCAweDAwQTIsIDB4MDBBMywgMHhmZmZkLCAweDAwQTUsIDB4 ZmZmZCwgMHgwMEE3LAotICAgIDB4MDBBNCwgMHgwMEE5LCAweDAwQUEsIDB4MDBBQiwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4MDBCMCwgMHgwMEIxLCAweDAwQjIsIDB4 MDBCMywgMHhmZmZkLCAweDAwQjUsIDB4MDBCNiwgMHgwMEI3LAotICAgIDB4ZmZmZCwgMHgwMEI5 LCAweDAwQkEsIDB4MDBCQiwgMHgwMEJDLCAweDAwQkQsIDB4ZmZmZCwgMHgwMEJGLAotICAgIDB4 MDBDMCwgMHgwMEMxLCAweDAwQzIsIDB4MDBDMywgMHgwMEM0LCAweDAwQzUsIDB4MDBDNiwgMHgw MEM3LAotICAgIDB4MDBDOCwgMHgwMEM5LCAweDAwQ0EsIDB4MDBDQiwgMHgwMENDLCAweDAwQ0Qs IDB4MDBDRSwgMHgwMENGLAotICAgIDB4ZmZmZCwgMHgwMEQxLCAweDAwRDIsIDB4MDBEMywgMHgw MEQ0LCAweDAwRDUsIDB4MDBENiwgMHgwMTUyLAotICAgIDB4MDBEOCwgMHgwMEQ5LCAweDAwREEs IDB4MDBEQiwgMHgwMERDLCAweDAwREQsIDB4ZmZmZCwgMHgwMERGLAotICAgIDB4MDBFMCwgMHgw MEUxLCAweDAwRTIsIDB4MDBFMywgMHgwMEU0LCAweDAwRTUsIDB4MDBFNiwgMHgwMEU3LAotICAg IDB4MDBFOCwgMHgwMEU5LCAweDAwRUEsIDB4MDBFQiwgMHgwMEVDLCAweDAwRUQsIDB4MDBFRSwg MHgwMEVGLAotICAgIDB4ZmZmZCwgMHgwMEYxLCAweDAwRjIsIDB4MDBGMywgMHgwMEY0LCAweDAw RjUsIDB4MDBGNiwgMHgwMTUzLAotICAgIDB4MDBGOCwgMHgwMEY5LCAweDAwRkEsIDB4MDBGQiwg MHgwMEZDLCAweDAwRkQsIDB4ZmZmZCwgMHgwMEZGCi19OwotCi1zdHJ1Y3QgeF90b191bmljb2Rl IHVfaHByb21hbjggPSB7Ci0gICAgOTYsIDMyLCBYMlVfU1RELCBBTF9ST01BTiwgIkhld2xldHQg UGFja2FyZCBSb21hbiA4IiwgImhwLXJvbWFuOCIsIDAsIE5VTEwsCi0gICAgMHgwMGEwLCAweDAw YzAsIDB4MDBjMiwgMHgwMGM4LCAweDAwY2EsIDB4MDBjYiwgMHgwMGNlLCAweDAwY2YsCi0gICAg MHgwMGI0LCAweDAwYTYsIDB4MDBhOSwgMHgwMGE4LCAweDAwYWMsIDB4MDBkOSwgMHgwMGRiLCAw eDIwYTQsCi0gICAgMHgwMGFmLCAweDAwZGQsIDB4MDBmZCwgMHgwMGIwLCAweDAwYzcsIDB4MDBl NywgMHgwMGQxLCAweDAwZjEsCi0gICAgMHgwMGExLCAweDAwYmYsIDB4MDBhNCwgMHgwMGEzLCAw eDAwYTUsIDB4MDBhNywgMHgwMTkyLCAweDAwYTIsCi0gICAgMHgwMGUyLCAweDAwZWEsIDB4MDBm NCwgMHgwMGZiLCAweDAwZTEsIDB4MDBlOSwgMHgwMGYzLCAweDAwZmEsCi0gICAgMHgwMGUwLCAw eDAwZTgsIDB4MDBmMiwgMHgwMGY5LCAweDAwZTQsIDB4MDBlYiwgMHgwMGY2LCAweDAwZmMsCi0g ICAgMHgwMGM1LCAweDAwZWUsIDB4MDBkOCwgMHgwMGM2LCAweDAwZTUsIDB4MDBlZCwgMHgwMGY4 LCAweDAwZTYsCi0gICAgMHgwMGM0LCAweDAwZWMsIDB4MDBkNiwgMHgwMGRjLCAweDAwYzksIDB4 MDBlZiwgMHgwMGRmLCAweDAwZDQsCi0gICAgMHgwMGMxLCAweDAwYzMsIDB4MDBlMywgMHgwMGQw LCAweDAwZjAsIDB4MDBjZCwgMHgwMGNjLCAweDAwZDMsCi0gICAgMHgwMGQyLCAweDAwZDUsIDB4 MDBmNSwgMHgwMTYwLCAweDAxNjEsIDB4MDBkYSwgMHgwMGI4LCAweDAwZmYsCi0gICAgMHgwMGRl LCAweDAwZmUsIDB4MDBiNywgMHgwMGI1LCAweDAwYjYsIDB4MDBiZSwgMHgyMDE1LCAweDAwYmMs Ci0gICAgMHgwMGJkLCAweDAwYWEsIDB4MDBiYSwgMHgwMGFiLCAweDI1ODgsIDB4MDBiYiwgMHgw MGIxLCAweGZmZmQKLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV9kZ2kgPSB7Ci0gOTYsMzIs WDJVX1NURCxBTF9ST01BTiwiRGF0YSBHZW5lcmFsIEludGVybmF0aW9uYWwiLCJkZy1pbnRlcm5h dGlvbmFsIiwwLE5VTEwsCi0gICAgMHgwMGEwLCAweDAwYWMsIDB4MDBiZCwgMHgwMGI1LCAweDAw YjIsIDB4MDBiMywgMHgwMGE0LCAweDAwYTIsCi0gICAgMHgwMGEzLCAweDAwYWEsIDB4MDBiYSwg MHgwMGExLCAweDAwYmYsIDB4MDBhOSwgMHgwMGFlLCAweDIwMjEsCi0gICAgMHgwMGJiLCAweDAw YWIsIDB4MDBiNiwgMHgyMTIyLCAweDAxOTIsIDB4MDBhNSwgMHgwMGIxLCAweDIyNjQsCi0gICAg MHgyMjY1LCAweDAwYjcsIDB4MDBiOCwgMHgwMGE3LCAweDAwYjAsIDB4MDBhOCwgMHgwMGI0LCAw eDIxOTEsCi0gICAgMHgwMGMxLCAweDAwYzAsIDB4MDBjMiwgMHgwMGM0LCAweDAwYzMsIDB4MDBj NSwgMHgwMGM2LCAweDAwYzcsCi0gICAgMHgwMGM5LCAweDAwYzgsIDB4MDBjYSwgMHgwMGNiLCAw eDAwY2QsIDB4MDBjYywgMHgwMGNlLCAweDAwY2YsCi0gICAgMHgwMGQxLCAweDAwZDMsIDB4MDBk MiwgMHgwMGQ0LCAweDAwZDYsIDB4MDBkNSwgMHgwMGQ4LCAweDAyNzYsCi0gICAgMHgwMGRhLCAw eDAwZDksIDB4MDBkYiwgMHgwMGRjLCAweGZmZmQsIDB4MDE3OCwgMHhmZmZkLCAweGZmZmQsCi0g ICAgMHgwMGUxLCAweDAwZTAsIDB4MDBlMiwgMHgwMGU0LCAweDAwZTMsIDB4MDBlNSwgMHgwMGU2 LCAweDAwZTcsCi0gICAgMHgwMGU5LCAweDAwZTgsIDB4MDBlYSwgMHgwMGViLCAweDAwZWQsIDB4 MDBlYywgMHgwMGVlLCAweDAwZWYsCi0gICAgMHgwMGYxLCAweDAwZjMsIDB4MDBmMiwgMHgwMGY0 LCAweDAwZjYsIDB4MDBmNSwgMHgwMGY4LCAweDAxNTMsCi0gICAgMHgwMGZhLCAweDAwZjksIDB4 MDBmYiwgMHgwMGZjLCAweDAwZGYsIDB4MDBmZiwgMHhmZmZkLCAweDI1ODgKLX07Ci0KLXN0cnVj dCB4X3RvX3VuaWNvZGUgdV9uZXh0c3RlcCA9IHsKLSAgICAxMjgsIDAsIDAsIEFMX1JPTUFOLCJO ZVhUU1RFUCBNdWx0aW5hdGlvbmFsIiwibmV4dC1tdWx0aW5hdGlvbmFsIiwwLE5VTEwsCi0gICAg MHgwMGEwLCAweDAwYzAsIDB4MDBjMSwgMHgwMGMyLCAweDAwYzMsIDB4MDBjNCwgMHgwMGM1LCAw eDAwYzcsCi0gICAgMHgwMGM4LCAweDAwYzksIDB4MDBjYSwgMHgwMGNiLCAweDAwY2MsIDB4MDBj ZCwgMHgwMGNlLCAweDAwY2YsCi0gICAgMHgwMGQwLCAweDAwZDEsIDB4MDBkMiwgMHgwMGQzLCAw eDAwZDQsIDB4MDBkNSwgMHgwMGQ2LCAweDAwZDksCi0gICAgMHgwMGRhLCAweDAwZGIsIDB4MDBk YywgMHgwMGRkLCAweDAwZGUsIDB4MDBiNSwgMHgwMGQ3LCAweDAwZjcsCi0gICAgMHgwMGE5LCAw eDAwYTEsIDB4MDBhMiwgMHgwMGEzLCAweDIwNDQsIDB4MDBhNSwgMHgwMTkyLCAweDAwYTcsCi0g ICAgMHgwMGE0LCAweDIwMTksIDB4MjAxYywgMHgwMGFiLCAweDIwMzksIDB4MjAzYSwgMHhmYjAx LCAweGZiMDIsCi0gICAgMHgwMGFlLCAweDIwMTMsIDB4MjAyMCwgMHgyMDIxLCAweDAwYjcsIDB4 MDBhNiwgMHgwMGI2LCAweDIwMjIsCi0gICAgMHgyMDFhLCAweDIwMWUsIDB4MjAxZCwgMHgwMGJi LCAweDIwMjYsIDB4MjAzMCwgMHgwMGFjLCAweDAwYmYsCi0gICAgMHgwMGI5LCAweDAyY2IsIDB4 MDBiNCwgMHgwMmM2LCAweDAyZGMsIDB4MDBhZiwgMHgwMmQ4LCAweDAyZDksCi0gICAgMHgwMGE4 LCAweDAwYjIsIDB4MDJkYSwgMHgwMGI4LCAweDAwYjMsIDB4MDJkZCwgMHgwMmRiLCAweDAyYzcs Ci0gICAgMHgyMDE0LCAweDAwYjEsIDB4MDBiYywgMHgwMGJkLCAweDAwYmUsIDB4MDBlMCwgMHgw MGUxLCAweDAwZTIsCi0gICAgMHgwMGUzLCAweDAwZTQsIDB4MDBlNSwgMHgwMGU3LCAweDAwZTgs IDB4MDBlOSwgMHgwMGVhLCAweDAwZWIsCi0gICAgMHgwMGVjLCAweDAwYzYsIDB4MDBlZCwgMHgw MGFhLCAweDAwZWUsIDB4MDBlZiwgMHgwMGYwLCAweDAwZjEsCi0gICAgMHgwMTQxLCAweDAwZDgs IDB4MDE1MiwgMHgwMGJhLCAweDAwZjIsIDB4MDBmMywgMHgwMGY0LCAweDAwZjUsCi0gICAgMHgw MGY2LCAweDAwZTYsIDB4MDBmOSwgMHgwMGZhLCAweDAwZmIsIDB4MDEzMSwgMHgwMGZjLCAweDAw ZmQsCi0gICAgMHgwMTQyLCAweDAwZjgsIDB4MDE1MywgMHgwMGRmLCAweDAwZmUsIDB4MDBmZiwg MHhmZmZkLCAweGZmZmQKLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV9tYWNsYXRpbiA9IHsK LSAgICAxMjgsIDAsIDAsIEFMX1JPTUFOLCJNYWNpbnRvc2ggTGF0aW4iLCJtYWNsYXRpbiIsIDAs IE5VTEwsCi0gICAgMHgwMEM0LCAweDAwQzUsIDB4MDBDNywgMHgwMEM5LCAweDAwRDEsIDB4MDBE NiwgMHgwMERDLCAweDAwRTEsCi0gICAgMHgwMEUwLCAweDAwRTIsIDB4MDBFNCwgMHgwMEUzLCAw eDAwRTUsIDB4MDBFNywgMHgwMEU5LCAweDAwRTgsCi0gICAgMHgwMEVBLCAweDAwRUIsIDB4MDBF RCwgMHgwMEVDLCAweDAwRUUsIDB4MDBFRiwgMHgwMEYxLCAweDAwRjMsCi0gICAgMHgwMEYyLCAw eDAwRjQsIDB4MDBGNiwgMHgwMEY1LCAweDAwRkEsIDB4MDBGOSwgMHgwMEZCLCAweDAwRkMsCi0g ICAgMHgwMERELCAweDAwQjAsIDB4MDBBMiwgMHgwMEEzLCAweDAwQTcsIDB4MjAyMiwgMHgwMEI2 LCAweDAwREYsCi0gICAgMHgwMEFFLCAweDAwQTksIDB4MjEyMiwgMHgwMEI0LCAweDAwQTgsIDB4 MjI2MCwgMHgwMEM2LCAweDAwRDgsCi0gICAgMHgyMjFFLCAweDAwQjEsIDB4MjI2NCwgMHgyMjY1 LCAweDAwQTUsIDB4MDBCNSwgMHgyMjAyLCAweDIyMTEsCi0gICAgMHgyMjBGLCAweDAzQzAsIDB4 MjIyQiwgMHgwMEFBLCAweDAwQkEsIDB4MjEyNiwgMHgwMEU2LCAweDAwRjgsCi0gICAgMHgwMEJG LCAweDAwQTEsIDB4MDBBQywgMHgyMjFBLCAweDAxOTIsIDB4MjI0OCwgMHgyMjA2LCAweDAwQUIs Ci0gICAgMHgwMEJCLCAweDIwMjYsIDB4MDBBMCwgMHgwMEMwLCAweDAwQzMsIDB4MDBENSwgMHgw MTUyLCAweDAxNTMsCi0gICAgMHgyMDEzLCAweDIwMTQsIDB4MjAxQywgMHgyMDFELCAweDIwMTgs IDB4MjAxOSwgMHgwMEY3LCAweDI1Q0EsCi0gICAgMHgwMEZGLCAweDAxNzgsIDB4MjA0NCwgMHgw MEE0LCAweDAwRDAsIDB4MDBGMCwgMHgwMERFLCAweDAwRkUsCi0gICAgMHgwMEZELCAweDAwQjcs IDB4MjAxQSwgMHgyMDFFLCAweDIwMzAsIDB4MDBDMiwgMHgwMENBLCAweDAwQzEsCi0gICAgMHgw MENCLCAweDAwQzgsIDB4MDBDRCwgMHgwMENFLCAweDAwQ0YsIDB4MDBDQywgMHgwMEQzLCAweDAw RDQsCi0gICAgMHhGOEZGLCAweDAwRDIsIDB4MDBEQSwgMHgwMERCLCAweDAwRDksIDB4MDEzMSwg MHgwMkM2LCAweDAyREMsCi0gICAgMHgwMEFGLCAweDAyRDgsIDB4MDJEOSwgMHgwMkRBLCAweDAw QjgsIDB4MDJERCwgMHgwMkRCLCAweDAyQzcKLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV9x dWlja2RyYXcgPSB7Ci0gICAgMTI4LCAwLCAwLCBBTF9ST01BTiwiUXVpY2tEcmF3IiwicXVpY2tk cmF3IiwgMCwgTlVMTCwKLSAgICAweDAwQzQsIDB4MDBDNSwgMHgwMEM3LCAweDAwQzksIDB4MDBE MSwgMHgwMEQ2LCAweDAwREMsIDB4MDBFMSwKLSAgICAweDAwRTAsIDB4MDBFMiwgMHgwMEU0LCAw eDAwRTMsIDB4MDBFNSwgMHgwMEU3LCAweDAwRTksIDB4MDBFOCwKLSAgICAweDAwRUEsIDB4MDBF QiwgMHgwMEVELCAweDAwRUMsIDB4MDBFRSwgMHgwMEVGLCAweDAwRjEsIDB4MDBGMywKLSAgICAw eDAwRjIsIDB4MDBGNCwgMHgwMEY2LCAweDAwRjUsIDB4MDBGQSwgMHgwMEY5LCAweDAwRkIsIDB4 MDBGQywKLSAgICAweDIwMjAsIDB4MDBCMCwgMHgwMEEyLCAweDAwQTMsIDB4MDBBNywgMHgyMDIy LCAweDAwQjYsIDB4MDBERiwKLSAgICAweDAwQUUsIDB4MDBBOSwgMHgyMTIyLCAweDAwQjQsIDB4 MDBBOCwgMHgyMjYwLCAweDAwQzYsIDB4MDBEOCwKLSAgICAweDIyMUUsIDB4MDBCMSwgMHgyMjY0 LCAweDIyNjUsIDB4MDBBNSwgMHgwMEI1LCAweDIyMDIsIDB4MjIxMSwKLSAgICAweDIyMEYsIDB4 MDNDMCwgMHgyMjJCLCAweDAwQUEsIDB4MDBCQSwgMHgwM0E5LCAweDAwRTYsIDB4MDBGOCwKLSAg ICAweDAwQkYsIDB4MDBBMSwgMHgwMEFDLCAweDIyMUEsIDB4MDE5MiwgMHgyMjQ4LCAweDIyMDYs IDB4MDBBQiwKLSAgICAweDAwQkIsIDB4MjAyNiwgMHgwMEEwLCAweDAwQzAsIDB4MDBDMywgMHgw MEQ1LCAweDAxNTIsIDB4MDE1MywKLSAgICAweDIwMTMsIDB4MjAxNCwgMHgyMDFDLCAweDIwMUQs IDB4MjAxOCwgMHgyMDE5LCAweDAwRjcsIDB4MjVDQSwKLSAgICAweDAwRkYsIDB4MDE3OCwgMHgy MDQ0LCAweDAwQTQsIDB4MjAzOSwgMHgyMDNBLCAweEZCMDEsIDB4RkIwMiwKLSAgICAweDIwMjEs IDB4MDBCNywgMHgyMDFBLCAweDIwMUUsIDB4MjAzMCwgMHgwMEMyLCAweDAwQ0EsIDB4MDBDMSwK LSAgICAweDAwQ0IsIDB4MDBDOCwgMHgwMENELCAweDAwQ0UsIDB4MDBDRiwgMHgwMENDLCAweDAw RDMsIDB4MDBENCwKLSAgICAweEY4RkYsIDB4MDBEMiwgMHgwMERBLCAweDAwREIsIDB4MDBEOSwg MHgwMTMxLCAweDAyQzYsIDB4MDJEQywKLSAgICAweDAwQUYsIDB4MDJEOCwgMHgwMkQ5LCAweDAy REEsIDB4MDBCOCwgMHgwMkRELCAweDAyREIsIDB4MDJDNwotfTsKLQotLyogREVDIHNwZWNpYWwg Z3JhcGhpY3MgLyB0ZWNobmljYWwgc2V0cyBmb3IgVlQgZW11bGF0aW9uICovCi0KLSNpZmRlZiBL RVJNSVRGT05UCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfZGVjdGVjaCA9IHsKLSAgICA5NCwgMzMs IFgyVV9ERUN8WDJVX1NURCxBTF9ST01BTiwiREVDIFRlY2huaWNhbCIsICJkZWMtdGVjaG5pY2Fs IiwgMCwgIj4iLAotICAgICAgICAgICAgMHhFNDAwLCAweDI1MGMsIDB4MjUwMCwgMHgyMzIwLCAw eDIzMjEsIDB4MjUwMiwgMHhFMjA0LAotICAgIDB4RTIwMywgMHhFMjA5LCAweEUyMDgsIDB4RTIw MiwgMHhFMjAxLCAweEUyMDcsIDB4RTIwNiwgMHhFMjAwLAotICAgIDB4RTIwNSwgMHhFMjBELCAw eEUyMEMsIDB4MjU3MiwgMHgyNTcxLCAweEUyMEUsIDB4RTIwRiwgMHgyMzJhLAotICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHgyMjY0LCAweDIyNjAsIDB4MjI2NSwgMHgyMjJi LAotICAgIDB4MjIzNCwgMHgyMjFkLCAweDIyMWUsIDB4MDBmNywgMHgyMjA2LCAweDIyMDcsIDB4 MDNhNiwgMHgwMzkzLAotICAgIDB4MjIzYywgMHgyMjQzLCAweDAzOTgsIDB4MDBkNywgMHgwMzli LCAweDIxZDQsIDB4MjFkMiwgMHgyMjYxLAotICAgIDB4MjIwZiwgMHgwM2E4LCAweEU0MDEsIDB4 MDNhMywgMHhGRkZELCAweGZmZmQsIDB4MjIxYSwgMHgwM2E5LAotICAgIDB4MDM5ZSwgMHgwM2Qy LCAweDIyODIsIDB4MjI4MywgMHgyMjI5LCAweDIyMmEsIDB4MjIyNywgMHgyMjI4LAotICAgIDB4 MDBhYywgMHgwM2IxLCAweDAzYjIsIDB4MDNjNywgMHgwM2I0LCAweDAzYjUsIDB4MDNjNiwgMHgw M2IzLAotICAgIDB4MDNiNywgMHgwM2I5LCAweDAzYjgsIDB4MDNiYSwgMHgwM2JiLCAweEZGRkQs IDB4MDNiZCwgMHgyMjAyLAotICAgIDB4MDNjMCwgMHgwM2M4LCAweDAzYzEsIDB4MDNjMywgMHgw M2M0LCAweEZGRkQsIDB4MDE5MiwgMHgwM2M5LAotICAgIDB4MDNiZSwgMHgwM2M1LCAweDAzYjYs IDB4MjE5MCwgMHgyMTkxLCAweDIxOTIsIDB4MjE5MwotfTsKLSNlbHNlCi1zdHJ1Y3QgeF90b191 bmljb2RlIHVfZGVjdGVjaCA9IHsKLSAgICA5NCwgMzMsIFgyVV9ERUN8WDJVX1NURCxBTF9ST01B TiwiREVDIFRlY2huaWNhbCIsICJkZWMtdGVjaG5pY2FsIiwgMCwgIj4iLAotICAgICAgICAgICAg MHgyMjFhLCAweDI1MGMsIDB4MjUwMCwgMHgyMzIwLCAweDIzMjEsIDB4MjUwMiwgMHgyMzA4LCAv KiAyMS0yNyAqLwotICAgIDB4MjMwYSwgMHgyMzA5LCAweDIzMGIsIDB4MjU2ZCwgMHgyNTcwLCAw eDI1NmUsIDB4MjU2ZiwgMHgyNTI1LCAvKiAyOC0yZiAqLwotICAgIDB4MjUxZCwgMHgyMjExLCAw eDIyMTEsIDB4MjU3MiwgMHgyNTcxLCAweDIzMWQsIDB4MjMxZiwgMHgyMzJhLCAvKiAzMC0zNyAq LwotICAgIDB4MDA1YiwgMHgyMDIyLCAweDAwNWQsIDB4MDBiMSwgMHgyMjY0LCAweDIyNjAsIDB4 MjI2NSwgMHgyMjJiLCAvKiAzOC0zZiAqLwotICAgIDB4MjIzNCwgMHgyMjFkLCAweDIyMWUsIDB4 MDBmNywgMHgyNWIzLCAweDI1YmQsIDB4MDNhNiwgMHgwMzkzLCAvKiA0MC00NyAqLwotICAgIDB4 MjIzYywgMHgyMjQzLCAweDAzOTgsIDB4MDBkNywgMHgwMzliLCAweDIxZDQsIDB4MjFkMiwgMHgy MjYxLCAvKiA0OC00ZiAqLwotICAgIDB4MjIwZiwgMHgwM2E4LCAweDIyMTgsIDB4MjIxMSwgMHgw MGE3LCAweDAwYjYsIDB4MjIxYSwgMHgwM2E5LCAvKiA1MC01NyAqLwotICAgIDB4MDM5ZSwgMHgw M2QyLCAweDIyODIsIDB4MjI4MywgMHgyMjI5LCAweDIyMmEsIDB4MjIyNywgMHgyMjI4LCAvKiA1 OC01ZiAqLwotICAgIDB4MDBhYywgMHgwM2IxLCAweDAzYjIsIDB4MDNjNywgMHgwM2I0LCAweDAz YjUsIDB4MDNjNiwgMHgwM2IzLCAvKiA2MC02NyAqLwotICAgIDB4MDNiNywgMHgwM2I5LCAweDAz YjgsIDB4MDNiYSwgMHgwM2JiLCAweDAzYmMsIDB4MDNiZCwgMHgyMjAyLCAvKiA2OC02ZiAqLwot ICAgIDB4MDNjMCwgMHgwM2M4LCAweDAzYzEsIDB4MDNjMywgMHgwM2M0LCAweDAwMjAsIDB4MDE5 MiwgMHgwM2M5LCAvKiA3MC03NyAqLwotICAgIDB4MDNiZSwgMHgwM2M1LCAweDAzYjYsIDB4MjE5 MCwgMHgyMTkxLCAweDIxOTIsIDB4MjE5MyAgICAgICAgICAvKiA3OC03ZSAqLwotfTsKLSNlbmRp ZiAvKiBLRVJNSVRGT05UICovCi0KLSNpZmRlZiBLRVJNSVRGT05UCi1zdHJ1Y3QgeF90b191bmlj b2RlIHVfZGVjc3BlYyA9IHsKLSAgICA5NCwzMyxYMlVfREVDfFgyVV9TVEQsQUxfUk9NQU4sIkRF QyBTcGVjaWFsIEdyYXBoaWNzIiwiZGVjLXNwZWNpYWwiLDAsIjAiLAotICAgICAgICAgICAgMHgw MDIxLCAweDAwMjIsIDB4MDAyMywgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwgMHgwMDI3LAotICAg IDB4MDAyOCwgMHgwMDI5LCAweDAwMmEsIDB4MDAyYiwgMHgwMDJjLCAweDAwMmQsIDB4MDAyZSwg MHgwMDJmLAotICAgIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAw MzUsIDB4MDAzNiwgMHgwMDM3LAotICAgIDB4MDAzOCwgMHgwMDM5LCAweDAwM2EsIDB4MDAzYiwg MHgwMDNjLCAweDAwM2QsIDB4MDAzZSwgMHgwMDNmLAotICAgIDB4MDA0MCwgMHgwMDQxLCAweDAw NDIsIDB4MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4MDA0NiwgMHgwMDQ3LAotICAgIDB4MDA0OCwg MHgwMDQ5LCAweDAwNGEsIDB4MDA0YiwgMHgwMDRjLCAweDAwNGQsIDB4MDA0ZSwgMHgwMDRmLAot ICAgIDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1 NiwgMHgwMDU3LAotICAgIDB4MDA1OCwgMHgwMDU5LCAweDAwNWEsIDB4MDA1YiwgMHgwMDVjLCAw eDAwNWQsIDB4MDA1ZSwgMHgwMDVmLAotICAgIDB4MjY2NiwgMHgyNTkxLCAweDI0MDksIDB4MjQw YywgMHgyNDBkLCAweDI0MGEsIDB4MDBiMCwgMHgwMGIxLAotICAgIDB4MjQyNCwgMHgyNDBiLCAw eDI1MTgsIDB4MjUxMCwgMHgyNTBjLCAweDI1MTQsIDB4MjUzYywgMHgyM0JBLAotICAgIDB4MjNC QiwgMHgyNTAwLCAweDIzQkMsIDB4MjNCRCwgMHgyNTFjLCAweDI1MjQsIDB4MjUzNCwgMHgyNTJj LAotICAgIDB4MjUwMiwgMHgyMjY0LCAweDIyNjUsIDB4MDNjMCwgMHgyMjYwLCAweDAwYTMsIDB4 MDBCNwotfTsKLSNlbHNlCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfZGVjc3BlYyA9IHsKLSAgICA5 NCwzMyxYMlVfREVDfFgyVV9TVEQsQUxfUk9NQU4sIkRFQyBTcGVjaWFsIEdyYXBoaWNzIiwiZGVj LXNwZWNpYWwiLDAsIjAiLAotICAgICAgICAgICAgMHgwMDIxLCAweDAwMjIsIDB4MDAyMywgMHgw MDI0LCAweDAwMjUsIDB4MDAyNiwgMHgwMDI3LAotICAgIDB4MDAyOCwgMHgwMDI5LCAweDAwMmEs IDB4MDAyYiwgMHgwMDJjLCAweDAwMmQsIDB4MDAyZSwgMHgwMDJmLAotICAgIDB4MDAzMCwgMHgw MDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LAotICAg IDB4MDAzOCwgMHgwMDM5LCAweDAwM2EsIDB4MDAzYiwgMHgwMDNjLCAweDAwM2QsIDB4MDAzZSwg MHgwMDNmLAotICAgIDB4MDA0MCwgMHgwMDQxLCAweDAwNDIsIDB4MDA0MywgMHgwMDQ0LCAweDAw NDUsIDB4MDA0NiwgMHgwMDQ3LAotICAgIDB4MDA0OCwgMHgwMDQ5LCAweDAwNGEsIDB4MDA0Yiwg MHgwMDRjLCAweDAwNGQsIDB4MDA0ZSwgMHgwMDRmLAotICAgIDB4MDA1MCwgMHgwMDUxLCAweDAw NTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LAotICAgIDB4MDA1OCwg MHgwMDU5LCAweDAwNWEsIDB4MDA1YiwgMHgwMDVjLCAweDAwNWQsIDB4MDA1ZSwgMHgwMDVmLAot ICAgIDB4MjY2NiwgMHgyNTkxLCAweDI0MDksIDB4MjQwYywgMHgyNDBkLCAweDI0MGEsIDB4MDBi MCwgMHgwMGIxLAotICAgIDB4MjQyNCwgMHgyNDBiLCAweDI1MTgsIDB4MjUxMCwgMHgyNTBjLCAw eDI1MTQsIDB4MjUzYywgMHgyNTk0LAotICAgIDB4MjUwMCwgMHgyNTAwLCAweDI1MDAsIDB4MjUw MCwgMHgyNTFjLCAweDI1MjQsIDB4MjUzNCwgMHgyNTJjLAotICAgIDB4MjUwMiwgMHgyMjY0LCAw eDIyNjUsIDB4MDNhMCwgMHgyMjYwLCAweDAwYTMsIDB4MDBCNwotfTsKLSNlbmRpZiAvKiBLRVJN SVRGT05UICovCi0KLS8qCi0gIEhhemVsdGluZSAxNTAwLzE1MjAgZ3JhcGhpYyBzZXQuICBJbmNs dWRlcyBzZXZlcmFsIGFwcHJveGltYXRpb25zOgotICAgLiAoMCw5KSBzaG91bGQgYmUgaGVhdnkg YmxhY2sgcmlnaHQgYXJyb3cuICBVbmljb2RlIGhhcyBvbmUgb2YgdGhlc2UKLSAgICAgYXQgVSsy N0ExIGJ1dC4uLgotICAgLiAoMyw5KSBzaG91bGQgYmUgaGVhdnkgYmxhY2sgZG93biBhcnJvdzsg VW5pY29kZSBkb2Vzbid0IGhhdmUgb25lLgotICAgICBTbyB3ZSB1c2UgdGhlIHdoaXRlIHZlcnNp b25zIG9mIHRoZSBoZWF2eSBhcnJvd3MgaW5zdGVhZC4KLSAgIC4gKDEsOSkgdGhlIGxldHRlcnMg IlBlIiBpbiBvbmUgY2VsbCwgZG9lc24ndCBleGlzdCBpbiBVbmljb2RlLgotICAgICBTdWJzdGl0 dXRpb24gaXMganVzdCAiUCIuCi0qLwotc3RydWN0IHhfdG9fdW5pY29kZSB1X2h6MTUwMCA9IHsK LSAgICA5NCwzMyxYMlVfU1RELEFMX1JPTUFOLCJIYXplbHRpbWUgR3JhcGhpY3MiLCJoejE1MDAt Z3JhcGhpY3MiLDAsIjAiLAotLyogICAgIDAgICAgICAgMSAgICAgICAyICAgICAgIDMgICAgICAg NCAgICAgICA1ICAgICAgIDYgICAgICAgNyAgICAgICAgICovCi0gICAgICAgICAgICAweDAwMjEs IDB4MDAyMiwgMHgwMDIzLCAweDAwMjQsIDB4MDAyNSwgMHgwMDI2LCAweDAwMjcsIC8qIDAgKi8K LSAgICAweDAwMjgsIDB4MDAyOSwgMHgwMDJhLCAweDAwMmIsIDB4MDAyYywgMHgwMDJkLCAweDAw MmUsIDB4MDAyZiwgLyogMSAqLwotICAgIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywg MHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LCAvKiAyICovCi0gICAgMHgwMDM4LCAweDAw MzksIDB4MDAzYSwgMHgwMDNiLCAweDAwM2MsIDB4MDAzZCwgMHgwMDNlLCAweDAwM2YsIC8qIDMg Ki8KLSAgICAweDAwNDAsIDB4MDA0MSwgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAw eDAwNDYsIDB4MDA0NywgLyogNCAqLwotICAgIDB4MDA0OCwgMHgwMDQ5LCAweDAwNGEsIDB4MDA0 YiwgMHgwMDRjLCAweDAwNGQsIDB4MDA0ZSwgMHgwMDRmLCAvKiA1ICovCi0gICAgMHgwMDUwLCAw eDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsIC8q IDYgKi8KLSAgICAweDAwNTgsIDB4MDA1OSwgMHgwMDVhLCAweDAwNWIsIDB4MDA1YywgMHgwMDVk LCAweDAwNWUsIDB4MDA1ZiwgLyogNyAqLwotICAgIDB4MjUwMCwgMHgyNTAyLCAweDI1M2MsIDB4 MjUzNCwgMHgyNTJjLCAweDI1MTQsIDB4MjUwYywgMHgwMGIxLCAvKiA4ICovCi0gICAgMHgyMWU4 LCAweDAwNTAsIDB4MDBmNywgMHgyMWU5LCAweDI1MTAsIDB4MjUxOCwgMHgyNTFjLCAweDI1MjQs IC8qIDkgKi8KLSAgICAweDAwNzAsIDB4MDA3MSwgMHgwMDcyLCAweDI1MGMsIDB4MDA3NCwgMHgw MDc1LCAweDAwNzYsIDB4MDA3NywgLyogYSAqLwotICAgIDB4MDA3OCwgMHgwMDc5LCAweDAwN2Es IDB4MDA3YiwgMHgwMDdjLCAweDAwN2QsIDB4MDA3ZSAgICAgICAgICAvKiBiICovCi0KLX07Ci0K LSNpZmRlZiBLRVJNSVRGT05UCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfaGVhdGgxOWcgPSB7Ci0g ICAgOTQsMzMsWDJVX1NURCxBTF9ST01BTiwiSGVhdGgtMTkgU3BlY2lhbCBHcmFwaGljcyIsImgx OS1zcGVjaWFsIiwwLE5VTEwsCi0gICAgICAgICAgICAweDAwMjEsIDB4MDAyMiwgMHgwMDIzLCAw eDAwMjQsIDB4MDAyNSwgMHgwMDI2LCAweDAwMjcsCi0gICAgMHgwMDI4LCAweDAwMjksIDB4MDAy YSwgMHgwMDJiLCAweDAwMmMsIDB4MDAyZCwgMHgwMDJlLCAweDAwMmYsCi0gICAgMHgwMDMwLCAw eDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsCi0g ICAgMHgwMDM4LCAweDAwMzksIDB4MDAzYSwgMHgwMDNiLCAweDAwM2MsIDB4MDAzZCwgMHgwMDNl LCAweDAwM2YsCi0gICAgMHgwMDQwLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4 MDA0NSwgMHgwMDQ2LCAweDAwNDcsCi0gICAgMHgwMDQ4LCAweDAwNDksIDB4MDA0YSwgMHgwMDRi LCAweDAwNGMsIDB4MDA0ZCwgMHgwMDRlLCAweDAwNGYsCi0gICAgMHgwMDUwLCAweDAwNTEsIDB4 MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsCi0gICAgMHgwMDU4 LCAweDAwNTksIDB4MDA1YSwgMHgwMDViLCAweDAwNWMsIDB4MDA1ZCwgMHgyNWNmLCAweGUzMGIs Ci0gICAgMHgyNTAyLCAweDI1MDAsIDB4MjUzYywgMHgyNTEwLCAweDI1MTgsIDB4MjUxNCwgMHgy NTBjLCAweDAwYjEsCi0gICAgMHgyMTkyLCAweDI1OTIsIDB4MDBmNywgMHgyMTkzLCAweGUzMjEs IDB4ZTMyMCwgMHhlMzIyLCAweGUzMjgsCi0gICAgMHgyNTgwLCAweGUzMjUsIDB4ZTMwYSwgMHgy NTJjLCAweDI1MjQsIDB4MjUzNCwgMHgyNTFjLCAweDI1NzMsCi0gICAgMHgyNTcxLCAweDI1NzIs IDB4ZTMxMSwgMHhlMzE5LCAweGUzMDAsIDB4ZTMwOSwgMHgwMGI2Ci19OwotI2Vsc2UKLXN0cnVj dCB4X3RvX3VuaWNvZGUgdV9oZWF0aDE5ZyA9IHsKLSAgICA5NCwzMyxYMlVfU1RELEFMX1JPTUFO LCJIZWF0aC0xOSBTcGVjaWFsIEdyYXBoaWNzIiwiaDE5LXNwZWNpYWwiLDAsTlVMTCwKLSAgICAg ICAgICAgIDB4MDAyMSwgMHgwMDIyLCAweDAwMjMsIDB4MDAyNCwgMHgwMDI1LCAweDAwMjYsIDB4 MDAyNywKLSAgICAweDAwMjgsIDB4MDAyOSwgMHgwMDJhLCAweDAwMmIsIDB4MDAyYywgMHgwMDJk LCAweDAwMmUsIDB4MDAyZiwKLSAgICAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4 MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywKLSAgICAweDAwMzgsIDB4MDAzOSwgMHgwMDNh LCAweDAwM2IsIDB4MDAzYywgMHgwMDNkLCAweDAwM2UsIDB4MDAzZiwKLSAgICAweDAwNDAsIDB4 MDA0MSwgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywKLSAg ICAweDAwNDgsIDB4MDA0OSwgMHgwMDRhLCAweDAwNGIsIDB4MDA0YywgMHgwMDRkLCAweDAwNGUs IDB4MDA0ZiwKLSAgICAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgw MDU1LCAweDAwNTYsIDB4MDA1NywKLSAgICAweDAwNTgsIDB4MDA1OSwgMHgwMDVhLCAweDAwNWIs IDB4MDA1YywgMHgwMDVkLCAweDI1Y2YsIDB4MjVlNSwKLSAgICAweDI1MDIsIDB4MjUwMCwgMHgy NTNjLCAweDI1MTAsIDB4MjUxOCwgMHgyNTE0LCAweDI1MGMsIDB4MDBiMSwKLSAgICAweDIxOTIs IDB4MjU5MiwgMHgwMGY3LCAweDIxOTMsIDB4MjU5MCwgMHgyNThjLCAweDI1OGMsIDB4MjU5MCwK LSAgICAweDI1ODAsIDB4MjU5MCwgMHgyNWU0LCAweDI1MmMsIDB4MjUyNCwgMHgyNTM0LCAweDI1 MWMsIDB4MjU3MywKLSAgICAweDI1NzEsIDB4MjU3MiwgMHgyNTAwLCAweDI1MDAsIDB4MjUwMiwg MHgyNTAyLCAweDAwYjYKLX07Ci0jZW5kaWYgLyogS0VSTUlURk9OVCAqLwotCi0vKiBERyBHcmFw aGljIHNldHMgLSAiS0VSTUlURk9OVCIgdGhlc2UgbGF0ZXIuLi4gKi8KLQotLyogTWlzc2luZywg ICAgYmFja3dhcmRzIHF1ZXN0aW9uIG1hcmsKLSAgIGVpZ2h0aCBub3RlCi0gICAiRFQiIGNvbnRy b2wgcGljCi0gICBob3Jpem9udGFsIHNjYW4gbGluZXMKLSovCi1zdHJ1Y3QgeF90b191bmljb2Rl IHVfZGdzcGVjID0geyAgICAgICAgLyogTmVlZHMgdG8gYmUgY2hlY2tlZCAqLwotICAgIDk0LCAz MywgWDJVX1NURCxBTF9ST01BTiwiREcgU3BlY2lhbCBHcmFwaGljcyIsImRnLXNwZWNpYWxncmFw aGljcyIsMCxOVUxMLAotICAgICAgICAgICAgMHhmZmZkLCAweGZmZmQsIDB4MjQyNCwgMHgyNTk0 LCAweDI1OTQsIDB4MjU4MSwgMHgyNTgxLAotICAgIDB4MjVhMSwgMHgyNjNhLCAweDI2M2IsIDB4 MjY2NSwgMHgyNjYzLCAweDI2NjAsIDB4MjVjZiwgMHgyNWQ4LAotICAgIDB4MjVjYiwgMHgyNWQ5 LCAweDI2NDIsIDB4MjY0MCwgMHgyNjZhLCAweDI2NmMsIDB4MjYzYywgMHgyMTk1LAotICAgIDB4 MjU4MywgMHgyMWE4LCAweDIzMWUsIDB4MjE5NCwgMHgyMjA3LCAweDAwZmYsIDB4MjBhNywgMHgw MGFhLAotICAgIDB4MDBiYSwgMHgyMzFjLCAweDIzMWQsIDB4MjU5MSwgMHgyNTkxLCAweDI1OTMs IDB4MjU2MSwgMHgyNTYyLAotICAgIDB4MjU1NiwgMHgyNTU1LCAweDI1NjMsIDB4MjU1MSwgMHgy NTU3LCAweDI1NWQsIDB4MjU1YywgMHgyNTViLAotICAgIDB4MjU1ZSwgMHgyNTVmLCAweDI1NWEs IDB4MjU1NCwgMHgyNTY5LCAweDI1NjYsIDB4MjU2MCwgMHgyNTUwLAotICAgIDB4MjU2YywgMHgy NTY3LCAweDI1NjgsIDB4MjU2NCwgMHgyNTY1LCAweDI1NTksIDB4MjU1OCwgMHgyNTUyLAotICAg IDB4MjU1MywgMHgyNTZiLCAweDI1NmEsIDB4MjU4OCwgMHgyNTg0LCAweDI1OGMsIDB4MjU5MCwg MHgyNTgwLAotICAgIDB4MDM5MywgMHgwM2MwLCAweDAzYTMsIDB4MDNhNiwgMHgwMzk4LCAweDAz ZDUsIDB4MDNiNSwgMHgwM2EwLAotICAgIDB4MDM5ZSwgMHgwMGI3LCAweDAzYjcsIDB4MjVhMCwg MHgwMTc4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZAotfTsKLQotLyogTWlzc2luZzogYXJy b3ctdG8tbGluZSwgdmFyaW91cyBvcmllbnRhdGlvbnMgKi8KLQotc3RydWN0IHhfdG9fdW5pY29k ZSB1X2RnbGluZSA9IHsKLSAgICA5NCwgMzMsIFgyVV9TVEQsQUxfUk9NQU4sIkRHIExpbmUgRHJh d2luZyIsImRnLWxpbmVkcmF3aW5nIiwwLE5VTEwsCi0gICAgICAgICAgICAweDI1MGMsIDB4MjUx MCwgMHgyNTE0LCAweDI1MTgsIDB4MjUyYywgMHgyNTI0LCAweDI1MWMsCi0gICAgMHgyNTM0LCAw eDI1M2MsIDB4MjUwMiwgMHgyNTAwLCAweDIxOWYsIDB4MjFlNSwgMHgyMWU0LCAweDIxYTEsCi0g ICAgMHgyNTA2LCAweDI1MGYsIDB4MjUxMywgMHgyNTE3LCAweDI1MWIsIDB4MjUzMywgMHgyNTJi LCAweDI1MjMsCi0gICAgMHgyNTNiLCAweDI1NGIsIDB4MjUwMywgMHgyNTAxLCAweDI1MDQsIDB4 MDBmNywgMHgwMGEyLCAweDIxMjIsCi0gICAgMHgwMGFlLCAweDAwYTksIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs Ci0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkCi19Owot Ci1zdHJ1Y3QgeF90b191bmljb2RlIHVfZGd3b3JkID0gewotICAgIDk0LCAzMywgWDJVX1NURCxB TF9ST01BTiwiREcgV29yZCBQcm9jZXNzaW5nIiwiZGctd29yZHByb2Nlc3NpbmciLDAsTlVMTCwK LSAgICAgICAgICAgIDB4MjMwOCwgMHgyMzBhLCAweDIzMDksIDB4MjMwYiwgMHgwMTkyLCAweDIy M2MsIDB4MjIwMiwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHgyMzIwLCAweDIzMjEsIDB4MjIxYSwg MHhmZmZkLCAweDIyMWUsIDB4MjIxZCwKLSAgICAweDIwNzAsIDB4MDBiOSwgMHgwMGIyLCAweDAw YjMsIDB4MjA3NCwgMHgyMDc1LCAweDIwNzYsIDB4MjA3NywKLSAgICAweDIwNzgsIDB4MjA3OSwg MHgyMjYwLCAweGZmZmQsIDB4MjFlZiwgMHhmZmZkLCAweDIxZTUsIDB4MDBiNywKLSAgICAweDIw M2MsIDB4MDNiMSwgMHgwM2IyLCAweDAzYjMsIDB4MDNiNCwgMHgwM2I1LCAweDAzYjYsIDB4MDNi NywKLSAgICAweDAzYjgsIDB4MDNiOSwgMHgwM2JhLCAweDAzYmIsIDB4MDNiYywgMHgwM2JkLCAw eDAzYmUsIDB4MDNiZiwKLSAgICAweDAzYzAsIDB4MDNjMSwgMHgwM2MzLCAweDAzYzQsIDB4MDNj NSwgMHgwM2M2LCAweDAzYzcsIDB4MDNjOCwKLSAgICAweDAzYzksIDB4MDNhOSwgMHgwMzk0LCAw eDAwYjYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKLSAgICAweDIyYTYsIDB4MjVj NiwgMHgyNWI2LCAweDI1YjcsIDB4MjVjMCwgMHgyNWIyLCAweDI1YmMsIDB4MjMyNywKLSAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDI1ZTMsIDB4 MjVlMiwKLSAgICAweDIwODAsIDB4MjA4MSwgMHgyMDgyLCAweDIwODMsIDB4MjA4NCwgMHgyMDg1 LCAweDIwODYsIDB4MjA4NywKLSAgICAweDIwODgsIDB4MjA4OSwgMHhmZmZkLCAweDIxOTEsIDB4 MjE5MiwgMHgyMTkwLCAweDIxOTMKLX07Ci0KLS8qIEhQIEdyYXBoaWMgc2V0cyAtICJLRVJNSVRG T05UIiB0aGVzZSBsYXRlci4uLiAqLwotCi0vKgotICBNYW55IGFyZSBtaXNzaW5nIGZyb20gVW5p Y29kZSwKLSAgU2luZ2xlLXRvLXRyaXBsZS1saW5lIGJveC1kcmF3aW5nIGNoYXJhY3RlcnMuCi0g IERvdWJsZS9kb3VibGUgY3Jvc3MgJiBzb21lIG90aGVycy4KLSovCi1zdHJ1Y3QgeF90b191bmlj b2RlIHVfaHBsaW5lID0geyAgICAgICAgLyogTmVlZHMgdG8gYmUgY2hlY2tlZCAqLwotICAgIDk0 LCAzMywgWDJVX1NURCxBTF9ST01BTiwiSFAgTGluZSBEcmF3aW5nIEdyYXBoaWNzIiwKLSAgICAi aHAtbGluZS1kcmF3aW5nIiwwLE5VTEwsCi0gICAgICAgICAgICAweDI1MjAsIDB4MjUyOCwgMHgy NTJmLCAweDI1MzcsIDB4MjU1ZiwgMHgyNTYyLCAweDI1NjQsCi0gICAgMHgyNTY3LCAweDI1NTEs IDB4MjU0MiwgMHgyNTNmLCAweDI1NTAsIDB4MjMwYSwgMHgyNTAyLCAweDI1M2MsCi0gICAgMHgy NTRiLCAweDI1MjMsIDB4MjUyYiwgMHgyNTMzLCAweDI1M2IsIDB4MjUxYywgMHgyNTI0LCAweDI1 MmMsCi0gICAgMHgyNTM0LCAweDI1NTAsIDB4MjUwMywgMHgyNTAxLCAweDI1NmIsIDB4MjMwOCwg MHgyNTZhLCAweDI1NmMsCi0gICAgMHgyNTVlLCAweDI1MTcsIDB4MjU0OSwgMHgyNTg4LCAweDI1 OGMsIDB4MjU4ZSwgMHgyNTE0LCAweDI1MTgsCi0gICAgMHgyNTEwLCAweDI1NTUsIDB4MjUyYywg MHgyNTU2LCAweDI1NTYsIDB4MjU0NywgMHgyNTQ4LCAweDI1NTUsCi0gICAgMHgyMzBiLCAweDI1 MGYsIDB4MjUwYywgMHgyNTFiLCAweDI1MTAsIDB4MjUyNCwgMHgyNTRhLCAweDI1MTMsCi0gICAg MHgyNTg0LCAweDIzMDksIDB4MjU4MiwgMHgyNTYxLCAweDI1MDQsIDB4MjU1OSwgMHgyNTc2LCAw eDI1NjUsCi0gICAgMHgyNTVlLCAweDI1MTcsIDB4MjU0OSwgMHgyNTg4LCAweDI1OGMsIDB4MjU4 ZSwgMHgyNTE0LCAweDI1MTgsCi0gICAgMHgyNTEwLCAweDI1NTUsIDB4MjUyYywgMHgyNTU2LCAw eDI1NTYsIDB4MjU0NywgMHgyNTQ4LCAweDI1NTUsCi0gICAgMHgyMzBiLCAweDI1MGYsIDB4MjUw YywgMHgyNTFiLCAweDI1MTAsIDB4MjUyNCwgMHgyNTRhLCAweDI1MTMsCi0gICAgMHgyNTg0LCAw eDIzMDksIDB4MjU4MiwgMHgyNTYxLCAweDI1MDQsIDB4MjU1OSwgMHgyNTc2Ci19OwotCi1zdHJ1 Y3QgeF90b191bmljb2RlIHVfaHBtYXRoID0gewotICAgIDk0LCAzMywgWDJVX1NURCxBTF9ST01B TiwiSFAgTWF0aC9UZWNobmljYWwiLCJocC1tYXRoL3RlY2huaWNhbCIsMCxOVUxMLAotICAgICAg ICAgICAgMHgyMjFhLCAweDIyMjMsIDB4MDBhNywgMHgyMjA3LCAweDAwYjEsIDB4MDNiMSwgMHgy MzIwLAotICAgIDB4MDBmNywgMHgyMjQzLCAweDAzYTAsIDB4MDM5MywgMHgwM2M4LCAweDIyNjEs IDB4MDNhNiwgMHgwMzllLAotICAgIDB4MjA3MCwgMHgwMGI5LCAweDAwYjIsIDB4MDBiMywgMHgy MDc0LCAweDIwNzUsIDB4MjA3NiwgMHgyMDc3LAotICAgIDB4MjA3OCwgMHgyMDc5LCAweDAzYTks IDB4MDM5YiwgMHgyMjFlLCAweDIzMjEsIDB4MjAyMCwgMHgwM2EzLAotICAgIDB4MDBiNiwgMHgw M2IxLCAweDAzYjIsIDB4MDNjOCwgMHgwM2Q1LCAweDAzYjUsIDB4MjIwMiwgMHgwM2JiLAotICAg IDB4MDNiNywgMHgwM2I5LCAweDAzOTgsIDB4MDNiYSwgMHgwM2M5LCAweDAzYmMsIDB4MDNiZCwg MHgwM2MxLAotICAgIDB4MDNjMCwgMHgwM2IzLCAweDAzYjgsIDB4MDNjMywgMHgwM2M0LCAweDAz YmUsIDB4MDM5NCwgMHgwM2I0LAotICAgIDB4MDBkNywgMHgwM2M1LCAweDAzYjYsIDB4MjE5MSwg MHgyMTkyLCAweDAzZDIsIDB4MjE5MCwgMHgyMTkzLAotICAgIDB4MDBiNiwgMHgwM2IxLCAweDAz YjIsIDB4MDNjOCwgMHgwM2Q1LCAweDAzYjUsIDB4MjIwMiwgMHgwM2JiLAotICAgIDB4MDNiNywg MHgwM2I5LCAweDAzOTgsIDB4MDNiYSwgMHgwM2M5LCAweDAzYmMsIDB4MDNiZCwgMHgwM2MxLAot ICAgIDB4MDNjMCwgMHgwM2IzLCAweDAzYjgsIDB4MDNjMywgMHgwM2M0LCAweDAzYmUsIDB4MDM5 NCwgMHgwM2I0LAotICAgIDB4MDBkNywgMHgwM2M1LCAweDAzYjYsIDB4MjE5MSwgMHgyMTkyLCAw eDAzZDIsIDB4MjE5MAotfTsKLQotc3RydWN0IHhfdG9fdW5pY29kZSB1X3R2aWcgPSB7Ci0gICAg MTUsNjUsMCwwLCJUZWxldmlkZW8gU3BlY2lhbCBHcmFwaGljcyIsInR2aS1zcGVjaWFsIiwwLE5V TEwsCi0gICAgICAgICAgICAweDI1NzAsIDB4MjU2RCwgMHgyNTZFLCAweDI1NkYsIDB4MjUxNCwg MHgyNTBDLCAweDI1MTAsCi0gICAgMHgyNTE4LCAweDI1M0MsIDB4MjUwMiwgMHgyNTAwLCAweDI1 MjQsIDB4MjUxQywgMHgyNTJDLCAweDI1MzQKLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV93 eXNlX2duID0gewotI2lmZGVmIENPTU1FTlQKLSAgICAxNiwxNiwwLDAsIld5c2UgTm9ybWFsLU1v ZGUgR3JhcGhpY3MiLCJ3eS1ncmFwaGljcy1ub3JtYWwiLDAsTlVMTCwKLSAgICAweDI1MkMsIDB4 MjUxNCwgMHgyNTBDLCAweDI1MTAsIDB4MjUxQywgMHgyNTE4LCAweDI1MDIsIDB4MjU4OCwKLSAg ICAweDI1M0MsIDB4MjUyNCwgMHgyNTAwLCAweDI1OTIsIDB4MjU1MCwgMHgyNTM0LCAweDI1NTEs IDB4MjU5MQotI2Vsc2UKLSAgICA4MCw0OCwwLDAsIld5c2UgTm9ybWFsLU1vZGUgR3JhcGhpY3Mi LCJ3eS1ncmFwaGljcy1ub3JtYWwiLDAsTlVMTCwKLSAgICAweDI1MkMsIDB4MjUxNCwgMHgyNTBD LCAweDI1MTAsIDB4MjUxQywgMHgyNTE4LCAweDI1MDIsIDB4MjU4OCwKLSAgICAweDI1M0MsIDB4 MjUyNCwgMHgyNTAwLCAweDI1OTIsIDB4MjU1MCwgMHgyNTM0LCAweDI1NTEsIDB4MjU5MSwKLSAg ICAweDI1MkMsIDB4MjUxNCwgMHgyNTBDLCAweDI1MTAsIDB4MjUxQywgMHgyNTE4LCAweDI1MDIs IDB4MjU4OCwKLSAgICAweDI1M0MsIDB4MjUyNCwgMHgyNTAwLCAweDI1OTIsIDB4MjU1MCwgMHgy NTM0LCAweDI1NTEsIDB4MjU5MSwKLSAgICAweDI1MkMsIDB4MjUxNCwgMHgyNTBDLCAweDI1MTAs IDB4MjUxQywgMHgyNTE4LCAweDI1MDIsIDB4MjU4OCwKLSAgICAweDI1M0MsIDB4MjUyNCwgMHgy NTAwLCAweDI1OTIsIDB4MjU1MCwgMHgyNTM0LCAweDI1NTEsIDB4MjU5MSwKLSAgICAweDI1MkMs IDB4MjUxNCwgMHgyNTBDLCAweDI1MTAsIDB4MjUxQywgMHgyNTE4LCAweDI1MDIsIDB4MjU4OCwK LSAgICAweDI1M0MsIDB4MjUyNCwgMHgyNTAwLCAweDI1OTIsIDB4MjU1MCwgMHgyNTM0LCAweDI1 NTEsIDB4MjU5MSwKLSAgICAweDI1MkMsIDB4MjUxNCwgMHgyNTBDLCAweDI1MTAsIDB4MjUxQywg MHgyNTE4LCAweDI1MDIsIDB4MjU4OCwKLSAgICAweDI1M0MsIDB4MjUyNCwgMHgyNTAwLCAweDI1 OTIsIDB4MjU1MCwgMHgyNTM0LCAweDI1NTEsIDB4MjU5MQotI2VuZGlmIC8qIENPTU1FTlQgKi8K LX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV93eXNlX2cxID0gewotICAgIDc5LDQ4LDAsMCwi V3lzZSBHcmFwaGljcyAxIiwid3ktZ3JhcGhpY3MtMSIsMCxOVUxMLAotICAgIDB4MjA3MCwgMHgw MEI5LCAweDAwQjIsIDB4MDBCMywgMHgyMDc0LCAweDIwNzUsIDB4MjA3NSwgMHgyMDc3LAotICAg IDB4MjA3OCwgMHgyMDc5LCAweEZGRkQsIDB4RkZGRCwgMHgyNUJBLCAweDI1QzQsIDB4MjVCMiwg MHgyNUJDLAotICAgIDB4RkZGRCwgMHhGRkZELCAweEZGRkQsIDB4RkZGRCwgMHhGRkZELCAweEZG RkQsIDB4RkZGRCwgMHhGRkZELAotICAgIDB4RkZGRCwgMHhGRkZELCAweEZGRkQsIDB4RkZGRCwg MHhGRkZELCAweEZGRkQsIDB4RkZGRCwgMHhGRkZELAotICAgIDB4RkZGRCwgMHhGRkZELCAweEZG RkQsIDB4RkZGRCwgMHhGRkZELCAweEZGRkQsIDB4RkZGRCwgMHhGRkZELAotICAgIDB4RkZGRCwg MHhGRkZELCAweEZGRkQsIDB4RkZGRCwgMHhGRkZELCAweEZGRkQsIDB4RkZGRCwgMHhGRkZELAot ICAgIDB4MjA4MCwgMHgyMDgxLCAweDIwODIsIDB4MjA4MywgMHgyMDg0LCAweDIwODUsIDB4MjA4 NiwgMHgyMDg3LAotICAgIDB4MjA4OCwgMHgyMDg5LCAweDI1MTgsIDB4MjUxMCwgMHgyNTBDLCAw eDI1MTQsIDB4MjUzQywgMHgyNThDLAotICAgIDB4MjU5MCwgMHgyNTAwLCAweDI1ODQsIDB4MjU4 MCwgMHgyNTFDLCAweDI1MjQsIDB4MjUzNCwgMHgyNTJDLAotICAgIDB4MjUwMiwgMHhGRkZELCAw eDI1NkUsIDB4MjU2RiwgMHgyNTcwLCAweDI1NkQsIDB4MjU4QwotfTsKLQotc3RydWN0IHhfdG9f dW5pY29kZSB1X3d5c2VfZzIgPSB7Ci0gICAgNDEsNjQsMCwwLCJXeXNlIEdyYXBoaWNzIDIiLCJ3 eS1ncmFwaGljcy0yIiwwLE5VTEwsCi0gICAgMHgyNTBDLCAweEZGRkQsIDB4RkZGRCwgMHhGRkZE LCAweDI1MTAsIDB4RkZGRCwgMHhGRkZELCAweEZGRkQsCi0gICAgMHgyNTE0LCAweEZGRkQsIDB4 RkZGRCwgMHhGRkZELCAweDI1MTgsIDB4RkZGRCwgMHhGRkZELCAweEZGRkQsCi0gICAgMHgyNTJD LCAweEZGRkQsIDB4RkZGRCwgMHhGRkZELCAweDI1MjQsIDB4RkZGRCwgMHhGRkZELCAweEZGRkQs Ci0gICAgMHgyNTFDLCAweEZGRkQsIDB4RkZGRCwgMHhGRkZELCAweDI1MzQsIDB4RkZGRCwgMHhG RkZELCAweEZGRkQsCi0gICAgMHgyNTAwLCAweEZGRkQsIDB4RkZGRCwgMHhGRkZELCAweDI1MDIs IDB4RkZGRCwgMHhGRkZELCAweEZGRkQsCi0gICAgMHgyNTNDCi19OwotCi0jaWZkZWYgS0VSTUlU Rk9OVAotc3RydWN0IHhfdG9fdW5pY29kZSB1X3d5c2VfZzMgPSB7Ci0gICAgMzEsNjUsMCwwLCJX eXNlIEdyYXBoaWNzIDMiLCJ3eS1ncmFwaGljcy0zIiwwLE5VTEwsCi0gICAgICAgICAgICAweDI1 NzAsIDB4MjU2RCwgMHgyNTZFLCAweDI1NkYsIDB4MjUxNCwgMHgyNTBDLCAweDI1MTAsCi0gICAg MHgyNTE4LCAweDI1M0MsIDB4MjUwMiwgMHgyNTAwLCAweDI1MjQsIDB4MjUxQywgMHgyNTJDLCAw eDI1MzQsCi0gICAgMHgyM0JBLCAweDIzQkQsIDB4MjY2NiwgMHhFMzI4LCAweEUzMjEsIDB4RTMy MCwgMHhFMzIyLCAweDI1OTAsCi0gICAgMHgyNTg0LCAweDI1OEMsIDB4MjU4MCwgMHhFMzIzLCAw eEUzMjYsIDB4RTMyNywgMHhFMzI5LCAweDI1OEMKLX07Ci0jZWxzZQotc3RydWN0IHhfdG9fdW5p Y29kZSB1X3d5c2VfZzMgPSB7Ci0gICAgMzEsNjUsMCwwLCJXeXNlIEdyYXBoaWNzIDMiLCJ3eS1n cmFwaGljcy0zIiwwLE5VTEwsCi0gICAgICAgICAgICAweDI1NzAsIDB4MjU2RCwgMHgyNTZFLCAw eDI1NkYsIDB4MjUxNCwgMHgyNTBDLCAweDI1MTAsCi0gICAgMHgyNTE4LCAweDI1M0MsIDB4MjUw MiwgMHgyNTAwLCAweDI1MjQsIDB4MjUxQywgMHgyNTJDLCAweDI1MzQsCi0gICAgMHgyNTAwLCAw eDI1MDAsIDB4MjY2NiwgMHgyNTkwLCAweDI1OTAsIDB4MjU4YywgMHgyNThjLCAweDI1OTAsCi0g ICAgMHgyNTg0LCAweDI1OEMsIDB4MjU4MCwgMHgyNTg4LCAweDI1ODgsIDB4MjU4OCwgMHgyNTg4 LCAweDI1OEMKLX07Ci0jZW5kaWYgLyogS0VSTUlURk9OVCAqLwotLyoKLSAgUU5YIENvbnNvbGUg IC0tICBUaGlzIGlzIGV4YWN0bHkgdGhlIHNhbWUgYXMgQ1A0MzcgZXhjZXB0IGZvciB0aGUgY29k ZQotICBwb2ludCBhdCAweEVFIChlcHNpbG9uIHZzIGVsZW1lbnQtb2YpLCB3aGljaCBJIHRoaW5r IHdhcyBqdXN0IGEgbWlzdGFrZQotICBpbiByZWFkaW5nIGdseXBocyBieSB0aGUgUU5YIHBlb3Bs ZSwgYnV0IHdobyBrbm93cy4gIEFsc28gdGhlIGdseXBoIGF0Ci0gIDB4RUQgbWlnaHQgYmUgYSBm aSAoYXMgaXQgaXMgaW4gQ1A0MzcsIGFuZCBhcyBJIGhhdmUgaXQgaGVyZSkgb3IgaXQgbWlnaHQK LSAgYmUgYSBudWxsLXNldCBzeW1ib2wuCi0qLwotc3RydWN0IHhfdG9fdW5pY29kZSB1X3FueGdy cGggPSB7Ci0gICAgMTI4LDAsMCwwLCJRTlggQ29uc29sZSIsInFueC1jb25zb2xlIiwwLE5VTEws Ci0gICAgMHgwMGM3LCAweDAwZmMsIDB4MDBlOSwgMHgwMGUyLCAweDAwZTQsIDB4MDBlMCwgMHgw MGU1LCAweDAwZTcsIC8qIDEyOCAqLwotICAgIDB4MDBlYSwgMHgwMGViLCAweDAwZTgsIDB4MDBl ZiwgMHgwMGVlLCAweDAwZWMsIDB4MDBjNCwgMHgwMGM1LCAvKiAxMzYgKi8KLSAgICAweDAwYzks IDB4MDBlNiwgMHgwMGM2LCAweDAwZjQsIDB4MDBmNiwgMHgwMGYyLCAweDAwZmIsIDB4MDBmOSwg LyogMTQ0ICovCi0gICAgMHgwMGZmLCAweDAwZDYsIDB4MDBkYywgMHgwMGEyLCAweDAwYTMsIDB4 MDBhNSwgMHgyMGE3LCAweDAxOTIsIC8qIDE1MiAqLwotICAgIDB4MDBlMSwgMHgwMGVkLCAweDAw ZjMsIDB4MDBmYSwgMHgwMGYxLCAweDAwZDEsIDB4MDBhYSwgMHgwMGJhLCAvKiAxNjAgKi8KLSAg ICAweDAwYmYsIDB4MjMxMCwgMHgwMGFjLCAweDAwYmQsIDB4MDBiYywgMHgwMGExLCAweDAwYWIs IDB4MDBiYiwgLyogMTY4ICovCi0gICAgMHgyNTkxLCAweDI1OTIsIDB4MjU5MywgMHgyNTAyLCAw eDI1MjQsIDB4MjU2MSwgMHgyNTYyLCAweDI1NTYsIC8qIDE3NiAqLwotICAgIDB4MjU1NSwgMHgy NTYzLCAweDI1NTEsIDB4MjU1NywgMHgyNTVkLCAweDI1NWMsIDB4MjU1YiwgMHgyNTEwLCAvKiAx ODQgKi8KLSAgICAweDI1MTQsIDB4MjUzNCwgMHgyNTJjLCAweDI1MWMsIDB4MjUwMCwgMHgyNTNj LCAweDI1NWUsIDB4MjU1ZiwgLyogMTkyICovCi0gICAgMHgyNTVhLCAweDI1NTQsIDB4MjU2OSwg MHgyNTY2LCAweDI1NjAsIDB4MjU1MCwgMHgyNTZjLCAweDI1NjcsIC8qIDIwMCAqLwotICAgIDB4 MjU2OCwgMHgyNTY0LCAweDI1NjUsIDB4MjU1OSwgMHgyNTU4LCAweDI1NTIsIDB4MjU1MywgMHgy NTZiLCAvKiAyMDggKi8KLSAgICAweDI1NmEsIDB4MjUxOCwgMHgyNTBjLCAweDI1ODgsIDB4MjU4 NCwgMHgyNThjLCAweDI1OTAsIDB4MjU4MCwgLyogMjE2ICovCi0gICAgMHgyMjFkLCAweDAwZGYs IDB4MDM5MywgMHgwM2MwLCAweDAzYTMsIDB4MDNjMywgMHgwMGI1LCAweDAzYzQsIC8qIDIyNCAq LwotICAgIDB4MDNhNiwgMHgwMzk4LCAweDAzYTksIDB4MDNiNCwgMHgyMjFlLCAweDAzYzYsIDB4 MjIwOCwgMHgyMjI5LCAvKiAyMzIgKi8KLSAgICAweDIyNjEsIDB4MDBiMSwgMHgyMjY1LCAweDIy NjQsIDB4MjMyMCwgMHgyMzIxLCAweDAwZjcsIDB4MjI0OCwgLyogMjQwICovCi0gICAgMHgwMGIw LCAweDIyMTksIDB4MDBiNywgMHgyMjFhLCAweDIwN2YsIDB4MDBiMiwgMHgyNWFlLCAweDAwYTAg IC8qIDI0OCAqLwotfTsKLQotc3RydWN0IHhfdG9fdW5pY29kZSB1X3NuaWJyYWNrID0gewotICAg IDk0LCAzMywgMCwgMCwiU2llbWVucyBOaXhkb3JmIDk3ODAxIEJyYWNrZXRzIiwic25pLWJyYWNr ZXRzIiwwLCJ3IiwKLSAgICAgICAgICAgIDB4MjU5MCwgMHgyNThjLCAweDI1ODQsIDB4MjU4MCwg MHgyNTkwLCAweDI1OGMsIDB4MjU4NCwgLyogYTAtNyAqLwotICAgIDB4MjU4MCwgMHgyMzI5LCAw eDIzMjcsIDB4MjVhZiwgMHgwMGI3LCAweDI1YjksIDB4MjVjMSwgMHgwMDNjLCAvKiBhOC1mICov Ci0gICAgMHgyNTNiLCAweDI1MzMsIDB4MjUyMywgMHgyNTJiLCAweDIzMjksIDB4MjMyYSwgMHgy MzA0LCAweDIzMDMsIC8qIGIwLTcgKi8KLSAgICAweDI1ZTQsIDB4MjVlNSwgMHgyNWUzLCAweDI1 ZTIsIDB4MjUzZiwgMHgyMzFiLCAweDI1Y2YsIDB4MjVjYiwgLyogYjgtZiAqLwotICAgIDB4MjUw MiwgMHgyNTAwLCAweDI1MGMsIDB4MjUxMCwgMHgyNTE0LCAweDI1MTgsIDB4MjUxYywgMHgyNTI0 LCAvKiBjMC03ICovCi0gICAgMHgyNTJjLCAweDI1MzQsIDB4MjUzYywgMHgyMTkyLCAweDIxOTAs IDB4MjE5MSwgMHgyMTkzLCAweDI1NzUsIC8qIGM4LWYgKi8KLSAgICAweDI1NzcsIDB4MjVkNCwg MHgyNTZkLCAweDI1NmUsIDB4MjU3MCwgMHgyNTZmLCAweDI1MWMsIDB4MjUyNCwgLyogZDAtNyAq LwotICAgIDB4MjUyYywgMHgyNTM0LCAweDI1M2MsIDB4MjUzYywgMHgyNTkyLCAweDI1OTEsIDB4 MjU5MiwgMHgyNTkzLCAvKiBkOC1mICovCi0gICAgMHgyNTAzLCAweDI1MDEsIDB4MjUwZiwgMHgy NTEzLCAweDI1MTcsIDB4MjUxYiwgMHgyNTIzLCAweDI1MmIsIC8qIGUwLTcgKi8KLSAgICAweDI1 MzMsIDB4MjUzYiwgMHgyNTRiLCAweDI3OWUsIDB4MjE5MCwgMHgyMTkxLCAweDIxOTMsIDB4MjU3 OSwgLyogZTgtZiAqLwotICAgIDB4MjU3YiwgMHgyMjYxLCAweDI1NTQsIDB4MjU1NywgMHgyNTVh LCAweDI1NWQsIDB4MjUyMywgMHgyNTJiLCAvKiBmMC03ICovCi0gICAgMHgyNTMzLCAweDI1M2Is IDB4MjU0YiwgMHgyNTRiLCAweDAzOTMsIDB4MDNjMywgMHgwM2M0ICAgICAgICAgIC8qIGY4LWYg Ki8KLX07Ci0KLXN0cnVjdCB4X3RvX3VuaWNvZGUgdV9zbmlibGFua3MgPSB7Ci0gICAgOTQsIDMz LCAwLCAwLCJTaWVtZW5zIE5peGRvcmYgOTc4MDEgQmxhbmtzIiwic25pLWJsYW5rcyIsMCwieSIs Ci0gICAgICAgICAgICAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgw MDIwLCAweDAwMjAsIC8qIGEwLTcgKi8KLSAgICAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAw MjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgLyogYTgtZiAqLwotICAgIDB4MDAy MCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIw LCAvKiBiMC03ICovCi0gICAgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAs IDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIC8qIGI4LWYgKi8KLSAgICAweDAwMjAsIDB4MDAyMCwg MHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgLyogYzAtNyAq LwotICAgIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4 MDAyMCwgMHgwMDIwLCAvKiBjOC1mICovCi0gICAgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgw MDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIC8qIGQwLTcgKi8KLSAgICAweDAw MjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAy MCwgLyogZDgtZiAqLwotICAgIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIw LCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAvKiBlMC03ICovCi0gICAgMHgwMDIwLCAweDAwMjAs IDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIC8qIGU4LWYg Ki8KLSAgICAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAw eDAwMjAsIDB4MDAyMCwgLyogZjAtNyAqLwotICAgIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4 MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCAgICAgICAgICAvKiBmOC1mICovCi19OwotCi1z dHJ1Y3QgeF90b191bmljb2RlIHVfc25pZmFjZXQgPSB7Ci0gICAgOTQsIDMzLCAwLCAwLCJTaWVt ZW5zIE5peGRvcmYgOTc4MDEgRmFjZXQiLCJzbmktZmFjZXQiLDAsImMiLAotICAgICAgICAgICAg MHgwMDIwLCAweDI1ODEsIDB4MjU4MiwgMHgyNTgzLCAweDI1ODQsIDB4MjU4NSwgMHgyNTg3LCAv KiBhMS1hNyAqLwotICAgIDB4MDA1ZiwgMHgyNTgxLCAweDI1ODIsIDB4MjU4MywgMHgyNTg0LCAw eDI1ODUsIDB4MjU4NiwgMHgyNTg3LCAvKiBhOC1hZiAqLwotICAgIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAvKiBiMC1iNyAq LwotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAvKiBiOC1iZiAqLwotICAgIDB4MjUwMywgMHgyNTAxLCAweDI1MGYsIDB4 MjUxMywgMHgyNTE3LCAweDI1MWIsIDB4MjUyMywgMHgyNTJiLCAvKiBjMC1jNyAqLwotICAgIDB4 MjUzMywgMHgyNTNiLCAweDI1NGIsIDB4MjU4ZiwgMHgyNTk1LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAvKiBjOC1jZiAqLwotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAvKiBkMC1kNyAqLwotICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDI1OTEsIDB4MjU5MSwgMHgyNTg4LCAvKiBk OC1kZiAqLwotICAgIDB4MjUwMywgMHgyNTAxLCAweDI1MGYsIDB4MjUxMywgMHgyNTE3LCAweDI1 MWIsIDB4MjUyMywgMHgyNTJiLCAvKiBlMC1lNyAqLwotICAgIDB4MjUzMywgMHgyNTNiLCAweDI1 NGIsIDB4ZmZmZCwgMHhmZmZkLCAweDI1OTMsIDB4MjU5MywgMHgwMDIwLCAvKiBlOC1lZiAqLwot ICAgIDB4MjU4NSwgMHgyNTg2LCAweDI1ODcsIDB4MjU4OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAvKiBmMC1mNyAqLwotICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHgyNTk0LCAweDI1OTQsIDB4ZmZmZCAgICAgICAgICAvKiBmOC1mZSAqLwotfTsKLQotc3Ry dWN0IHhfdG9fdW5pY29kZSB1X3NuaWlibSA9IHsKLSAgICA5NCwgMzMsIDAsIDAsIlNpZW1lbnMg Tml4ZG9yZiA5NzgwMSBJQk0iLCJzbmktaWJtIiwwLCJ2IiwKLSAgICAgICAgICAgIDB4MjYzYSwg MHgyNjNiLCAweDI2NjUsIDB4MjY2NiwgMHgyNjYzLCAweDI2NjAsIDB4MjVjZiwKLSAgICAweDI1 ZDgsIDB4MjVjYiwgMHgyNWQ5LCAweDI2NDIsIDB4MjY0MCwgMHgyNjZhLCAweDI2NmIsIDB4MjYz YywKLSAgICAweDI1YmEsIDB4MjVjNCwgMHgyMTk1LCAweDIwM2MsIDB4MDBiNiwgMHgyNWMxLCAw eDI1ODIsIDB4MjFhOCwKLSAgICAweDIxOTEsIDB4MjE5MywgMHgyMTkyLCAweDIxOTAsIDB4MjMx OSwgMHgyMTk0LCAweDI1YjQsIDB4MjViZSwKLSAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgLyogSGV4ICovCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIC8qIGJ5dGVzICovCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHgyMDcwLCAweDAw YjksIDB4MDBiMiwgMHgwMGIzLCAweDIwNzQsIDB4MjA3NSwgMHgyMDc2LCAweDIwNzcsCi0gICAg MHgyMDc4LCAweDIwNzksIDB4MjA3YiwgMHgyMDdhLCAweGZmZmQsIDB4ZmZmZCwgMHgyMzIwLCAw eDIzMjEsCi0gICAgMHgyMDgwLCAweDIwODEsIDB4MjA4MiwgMHgyMDgzLCAweDIwODQsIDB4MjA4 NSwgMHgyMDg2LCAweDIwODcsCi0gICAgMHgyMDg4LCAweDIwODksIDB4MjA4YiwgMHgyMDhhLCAw eDIyMWUsIDB4MDNiMSwgMHgwM2E2Ci19OwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHVfc25pZXVy byA9IHsKLSAgICA5NCwgMzMsIDAsIDAsIlNpZW1lbnMgTml4ZG9yZiA5NzgwMSBFdXJvIiwic25p LWV1cm8iLDAsInUiLAotICAgICAgICAgICAgMHgwMGUwLCAweDAwZTEsIDB4MDBlMiwgMHgwMGU0 LCAweDAwZTUsIDB4MDEwNSwgMHgwMGUzLAotICAgIDB4MDEwMywgMHgwMGU2LCAweDAwZTcsIDB4 MDEwZCwgMHgwMTA3LCAweDAwZjAsIDB4MDExMSwgMHgwMTBmLAotICAgIDB4MDBlOCwgMHgwMGU5 LCAweDAwZWEsIDB4MDBlYiwgMHgwMTFiLCAweDAxMTksIDB4MDExZiwgMHgwMTMxLAotICAgIDB4 MDBlZSwgMHgwMGVjLCAweDAxZDAsIDB4MDBlZiwgMHgwMTMzLCAweDAxM2EsIDB4MDE0MiwgMHgw MTNlLAotICAgIDB4MDE0OCwgMHgwMTQ0LCAweDAwZjEsIDB4MDBmMiwgMHgwMGYzLCAweDAwZjQs IDB4MDBmNiwgMHgwMGY1LAotICAgIDB4MDBmOCwgMHgwMTUxLCAweDAxNTMsIDB4MDBmZSwgMHgw MTU5LCAweDAxNTUsIDB4MDE2MSwgMHgwMTViLAotICAgIDB4MDE1ZiwgMHgwMGRmLCAweDAxNjMs IDB4MDE2NSwgMHgwMGY5LCAweDAwZmEsIDB4MDBmYiwgMHgwMGZjLAotICAgIDB4MDE2ZiwgMHgw MTcxLCAweDAwZmQsIDB4MDBmZiwgMHgwMTdlLCAweDAxN2EsIDB4MDE3YywgMHgwMGM5LAotICAg IDB4MDBjNSwgMHgwMGM2LCAweDAwZDAsIDB4MDEzMCwgMHgwMTMyLCAweDAxNjcsIDB4MDBkOCwg MHgwMTUyLAotICAgIDB4MDBkZSwgMHgwMGM0LCAweDAwZDYsIDB4MDBkYywgMHgwMGE3LCAweDAw MjQsIDB4MDBhMywgMHgwMGFlLAotICAgIDB4MDBhOSwgMHgwM2E5LCAweDAwYjUsIDB4MDBiMCwg MHgwMGM3LCAweDIwYTcsIDB4MDNjMCwgMHgwMmQ4LAotICAgIDB4MDBiNCwgMHgwMmRkLCAweDAw ZDEsIDB4MjUxNCwgMHgyNTE4LCAweDAwN2UsIDB4MDJjNwotfTsKLQotc3RydWN0IHhfdG9fdW5p Y29kZSB1X3NtaWxleSA9IHsKLSAgICAzMiwwLFgyVV9DWEcsMCwiUEMgQzAgR3JhcGhpY3MiLCJz bWlsZXktZmFjZXMiLDAsTlVMTCwKLSAgICAweDAwYTAsIDB4MjYzYSwgMHgyNjNiLCAweDI2NjUs IDB4MjY2NiwgMHgyNjYzLCAweDI2NjAsIDB4MjAyMiwKLSAgICAweDI1ZDgsIDB4MjVlZiwgMHgy NWQ5LCAweDI2NDIsIDB4MjY0MCwgMHgyNjZhLCAweDI2NmMsIDB4MjYzYywKLSAgICAweDI1YmEs IDB4MjVjNCwgMHgyMTk1LCAweDIwM2MsIDB4MDBiNiwgMHgwMGE3LCAweDI1YWMsIDB4MjFhOCwK LSAgICAweDIxOTEsIDB4MjE5MywgMHgyMTkyLCAweDIxOTAsIDB4MjMxOSwgMHgyMTk0LCAweDI1 YjIsIDB4MjViYwotfTsKLQotc3RydWN0IHhfdG9fdW5pY29kZSB1X2MwcGljcyA9IHsKLSAgICAx MjgsMCxYMlVfQ1hHLDAsIkMwL0MxIERpc3BsYXkgQ29udHJvbHMiLCJkaXNwbGF5LWNvbnRyb2xz IiwwLE5VTEwsCi0gICAgMHgyNDAwLCAweDI0MDEsIDB4MjQwMiwgMHgyNDAzLCAweDI0MDQsIDB4 MjQwNSwgMHgyNDA2LCAweDI0MDcsCi0gICAgMHgyNDA4LCAweDI0MDksIDB4MjQwYSwgMHgyNDBi LCAweDI0MGMsIDB4MjQwZCwgMHgyNDBlLCAweDI0MGYsCi0gICAgMHgyNDEwLCAweDI0MTEsIDB4 MjQxMiwgMHgyNDEzLCAweDI0MTQsIDB4MjQxNSwgMHgyNDE2LCAweDI0MTcsCi0gICAgMHgyNDE4 LCAweDI0MTksIDB4MjQxYSwgMHgyNDFiLCAweDI0MWMsIDB4MjQxZCwgMHgyNDFlLCAweDI0MWYs Ci0gICAgMHgyNDIwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDI0MjEKLX07Ci0KLSNpZmRlZiBLRVJNSVRGT05UCi1z dHJ1Y3QgeF90b191bmljb2RlIHVfYzFwaWNzID0gewotICAgIDMyLDAsWDJVX0NYRywwLCJDMSBE aXNwbGF5IENvbnRyb2xzIiwiYzEtZGlzcGxheS1jb250cm9scyIsMCxOVUxMLAotICAgIDB4ZTA4 MCwgMHhlMDgxLCAweGUwODIsIDB4ZTA4MywgMHhlMDg0LCAweGUwODUsIDB4ZTA4NiwgMHhlMDg3 LAotICAgIDB4ZTA4OCwgMHhlMDg5LCAweGUwOGEsIDB4ZTA4YiwgMHhlMDhjLCAweGUwOGQsIDB4 ZTA4ZSwgMHhlMDhmLAotICAgIDB4ZTA5MCwgMHhlMDkxLCAweGUwOTIsIDB4ZTA5MywgMHhlMDk0 LCAweGUwOTUsIDB4ZTA5NiwgMHhlMDk3LAotICAgIDB4ZTA5OCwgMHhlMDk5LCAweGUwOWEsIDB4 ZTA5YiwgMHhlMDljLCAweGUwOWQsIDB4ZTA5ZSwgMHhlMDlmCi19OwotI2Vsc2UKLXN0cnVjdCB4 X3RvX3VuaWNvZGUgdV9jMXBpY3MgPSB7Ci0gICAgMzIsMCxYMlVfQ1hHLDAsIkMxIERpc3BsYXkg Q29udHJvbHMiLCJjMS1kaXNwbGF5LWNvbnRyb2xzIiwwLE5VTEwsCi0gICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCi0gICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCi0gICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQKLX07Ci0jZW5kaWYgLyogS0VSTUlURk9OVCAq LwotCi0KLS8qIEJsYWgtdG8tVW5pY29kZSBmdW5jdGlvbnMgKi8KLQotVVNIT1JUCi0jaWZkZWYg Q0tfQU5TSUMKLWFzY2lpX3UoQ0hBUiBjKQotI2Vsc2UKLWFzY2lpX3UoYykgQ0hBUiBjOwotI2Vu ZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgJiAweDgwKQotICAgICAgcmV0dXJuKFVO Syk7Ci0vKgotICBOT1RFOiBTdHJpY3QgQU5TSSBjb21waWxlcnMgY29tcGxhaW4gYWJvdXQgIjwi IGFuZCBzaW1pbGFyIGNvbXBhcmlzb25zCi0gIGJldHdlZW4gdW5zaWduZWQgYW5kIHNpZ25lZCBx dWFudGl0aWVzLCBhcyBmb3VuZCBpbiBhbGwgdGhlIHJvdXRpbmVzIG9mCi0gIHRoZSAiYmxhaF91 KCkiIGNsYXNzIC0tIGNhc3RzIG11c3QgYmUgYWRkZWQgdG8gc3F1ZWxjaCB0aGUgd2FybmluZ3Mu Ci0qLwotICAgIGlmIChjIDwgdV9hc2NpaS5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAg ZWxzZSBpZiAoYyA+PSB1X2FzY2lpLm9mZnNldCArIHVfYXNjaWkuc2l6ZSkKLSAgICAgIHJldHVy bihjKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4odV9hc2NpaS5tYXBbYyAtIHVfYXNjaWkub2Zm c2V0XSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi1icml0aXNoX3UoQ0hBUiBjKQot I2Vsc2UKLWJyaXRpc2hfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAg ICBpZiAoYyAmIDB4ODApCi0gICAgICByZXR1cm4oVU5LKTsKLSAgICBpZiAoYyA8IHVfYnJpdGlz aC5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZSBpZiAoYyA+PSB1X2JyaXRpc2gu b2Zmc2V0ICsgdV9icml0aXNoLnNpemUpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZQotICAg ICAgcmV0dXJuKHVfYnJpdGlzaC5tYXBbYyAtIHVfYnJpdGlzaC5vZmZzZXRdKTsKLX0KLQotVVNI T1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWR1dGNoX3UoQ0hBUiBjKQotI2Vsc2UKLWR1dGNoX3UoYykg Q0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgJiAweDgwKQotICAg ICAgcmV0dXJuKFVOSyk7Ci0gICAgaWYgKGMgPCB1X2R1dGNoLm9mZnNldCkKLSAgICAgIHJldHVy bihjKTsKLSAgICBlbHNlIGlmIChjID49IHVfZHV0Y2gub2Zmc2V0ICsgdV9kdXRjaC5zaXplKQot ICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UKLSAgICAgIHJldHVybih1X2R1dGNoLm1hcFtjIC0g dV9kdXRjaC5vZmZzZXRdKTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWZpbm5pc2hf dShDSEFSIGMpCi0jZWxzZQotZmlubmlzaF91KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJ QyAqLwotewotICAgIGlmIChjICYgMHg4MCkKLSAgICAgIHJldHVybihVTkspOwotICAgIGlmIChj IDwgdV9maW5uaXNoLm9mZnNldCkKLSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlIGlmIChjID49 IHVfZmlubmlzaC5vZmZzZXQgKyB1X2Zpbm5pc2guc2l6ZSkKLSAgICAgIHJldHVybihjKTsKLSAg ICBlbHNlCi0gICAgICByZXR1cm4odV9maW5uaXNoLm1hcFtjIC0gdV9maW5uaXNoLm9mZnNldF0p OwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotZnJlbmNoX3UoQ0hBUiBjKQotI2Vsc2UK LWZyZW5jaF91KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChj ICYgMHg4MCkKLSAgICAgIHJldHVybihVTkspOwotICAgIGlmIChjIDwgdV9mcmVuY2gub2Zmc2V0 KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UgaWYgKGMgPj0gdV9mcmVuY2gub2Zmc2V0ICsg dV9mcmVuY2guc2l6ZSkKLSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4o dV9mcmVuY2gubWFwW2MgLSB1X2ZyZW5jaC5vZmZzZXRdKTsKLX0KLQotVVNIT1JUCi0jaWZkZWYg Q0tfQU5TSUMKLWZyX2NhbmFkaWFuX3UoQ0hBUiBjKQotI2Vsc2UKLWZyX2NhbmFkaWFuX3UoYykg Q0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgJiAweDgwKQotICAg ICAgcmV0dXJuKFVOSyk7Ci0gICAgaWYgKGMgPCB1X2ZyX2NhbmFkaWFuLm9mZnNldCkKLSAgICAg IHJldHVybihjKTsKLSAgICBlbHNlIGlmIChjID49IHVfZnJfY2FuYWRpYW4ub2Zmc2V0ICsgdV9m cl9jYW5hZGlhbi5zaXplKQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UKLSAgICAgIHJldHVy bih1X2ZyX2NhbmFkaWFuLm1hcFtjIC0gdV9mcl9jYW5hZGlhbi5vZmZzZXRdKTsKLX0KLQotVVNI T1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWdlcm1hbl91KENIQVIgYykKLSNlbHNlCi1nZXJtYW5fdShj KSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyAmIDB4ODApCi0g ICAgICByZXR1cm4oVU5LKTsKLSAgICBpZiAoYyA8IHVfZ2VybWFuLm9mZnNldCkKLSAgICAgIHJl dHVybihjKTsKLSAgICBlbHNlIGlmIChjID49IHVfZ2VybWFuLm9mZnNldCArIHVfZ2VybWFuLnNp emUpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHVfZ2VybWFuLm1h cFtjIC0gdV9nZXJtYW4ub2Zmc2V0XSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi1o dW5nYXJpYW5fdShDSEFSIGMpCi0jZWxzZQotaHVuZ2FyaWFuX3UoYykgQ0hBUiBjOwotI2VuZGlm IC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgJiAweDgwKQotICAgICAgcmV0dXJuKFVOSyk7 Ci0gICAgaWYgKGMgPCB1X2h1bmdhcmlhbi5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAg ZWxzZSBpZiAoYyA+PSB1X2h1bmdhcmlhbi5vZmZzZXQgKyB1X2h1bmdhcmlhbi5zaXplKQotICAg ICAgcmV0dXJuKGMpOwotICAgIGVsc2UKLSAgICAgIHJldHVybih1X2h1bmdhcmlhbi5tYXBbYyAt IHVfaHVuZ2FyaWFuLm9mZnNldF0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotaXRh bGlhbl91KENIQVIgYykKLSNlbHNlCi1pdGFsaWFuX3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENL X0FOU0lDICovCi17Ci0gICAgaWYgKGMgJiAweDgwKQotICAgICAgcmV0dXJuKFVOSyk7Ci0gICAg aWYgKGMgPCB1X2l0YWxpYW4ub2Zmc2V0KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UgaWYg KGMgPj0gdV9pdGFsaWFuLm9mZnNldCArIHVfaXRhbGlhbi5zaXplKQotICAgICAgcmV0dXJuKGMp OwotICAgIGVsc2UKLSAgICAgIHJldHVybih1X2l0YWxpYW4ubWFwW2MgLSB1X2l0YWxpYW4ub2Zm c2V0XSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi1pY2VsYW5kaWNfdShDSEFSIGMp Ci0jZWxzZQotaWNlbGFuZGljX3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17 Ci0gICAgaWYgKGMgJiAweDgwKQotICAgICAgcmV0dXJuKFVOSyk7Ci0gICAgaWYgKGMgPCB1X2lj ZWxhbmRpYy5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZSBpZiAoYyA+PSB1X2lj ZWxhbmRpYy5vZmZzZXQgKyB1X2ljZWxhbmRpYy5zaXplKQotICAgICAgcmV0dXJuKGMpOwotICAg IGVsc2UKLSAgICAgIHJldHVybih1X2ljZWxhbmRpYy5tYXBbYyAtIHVfaWNlbGFuZGljLm9mZnNl dF0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotamlzMDIwMXJfdShDSEFSIGMpCi0j ZWxzZQotamlzMDIwMXJfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAg ICBpZiAoYyAmIDB4ODApCi0gICAgICByZXR1cm4oVU5LKTsKLSAgICBpZiAoYyA8IHVfamlzMDIw MXIub2Zmc2V0KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UgaWYgKGMgPj0gdV9qaXMwMjAx ci5vZmZzZXQgKyB1X2ppczAyMDFyLnNpemUpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZQot ICAgICAgcmV0dXJuKHVfamlzMDIwMXIubWFwW2MgLSB1X2ppczAyMDFyLm9mZnNldF0pOwotfQot Ci1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotamlzMDIwMWtfdShDSEFSIGMpCi0jZWxzZQotamlz MDIwMWtfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyAm IDB4ODApCi0gICAgICByZXR1cm4oVU5LKTsKLSAgICBpZiAoYyA8IHVfamlzMDIwMWsub2Zmc2V0 KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UgaWYgKGMgPj0gdV9qaXMwMjAxay5vZmZzZXQg KyB1X2ppczAyMDFrLnNpemUpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZQotICAgICAgcmV0 dXJuKHVfamlzMDIwMWsubWFwW2MgLSB1X2ppczAyMDFrLm9mZnNldF0pOwotfQotCi1VU0hPUlQK LSNpZmRlZiBDS19BTlNJQwotbm9yd2VnaWFuX3UoQ0hBUiBjKQotI2Vsc2UKLW5vcndlZ2lhbl91 KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjICYgMHg4MCkK LSAgICAgIHJldHVybihVTkspOwotICAgIGlmIChjIDwgdV9ub3J3ZWdpYW4ub2Zmc2V0KQotICAg ICAgcmV0dXJuKGMpOwotICAgIGVsc2UgaWYgKGMgPj0gdV9ub3J3ZWdpYW4ub2Zmc2V0ICsgdV9u b3J3ZWdpYW4uc2l6ZSkKLSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4o dV9ub3J3ZWdpYW4ubWFwW2MgLSB1X25vcndlZ2lhbi5vZmZzZXRdKTsKLX0KLQotVVNIT1JUCi0j aWZkZWYgQ0tfQU5TSUMKLWRhbmlzaF91KENIQVIgYykKLSNlbHNlCi1kYW5pc2hfdShjKSBDSEFS IGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyAmIDB4ODApCi0gICAgICBy ZXR1cm4oVU5LKTsKLSAgICBpZiAoYyA8IHVfZGFuaXNoLm9mZnNldCkKLSAgICAgIHJldHVybihj KTsKLSAgICBlbHNlIGlmIChjID49IHVfZGFuaXNoLm9mZnNldCArIHVfZGFuaXNoLnNpemUpCi0g ICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHVfZGFuaXNoLm1hcFtjIC0g dV9kYW5pc2gub2Zmc2V0XSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi1wb3J0dWd1 ZXNlX3UoQ0hBUiBjKQotI2Vsc2UKLXBvcnR1Z3Vlc2VfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyog Q0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyAmIDB4ODApCi0gICAgICByZXR1cm4oVU5LKTsKLSAg ICBpZiAoYyA8IHVfcG9ydHVndWVzZS5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxz ZSBpZiAoYyA+PSB1X3BvcnR1Z3Vlc2Uub2Zmc2V0ICsgdV9wb3J0dWd1ZXNlLnNpemUpCi0gICAg ICByZXR1cm4oYyk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHVfcG9ydHVndWVzZS5tYXBbYyAt IHVfcG9ydHVndWVzZS5vZmZzZXRdKTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLXNw YW5pc2hfdShDSEFSIGMpCi0jZWxzZQotc3BhbmlzaF91KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBD S19BTlNJQyAqLwotewotICAgIGlmIChjICYgMHg4MCkKLSAgICAgIHJldHVybihVTkspOwotICAg IGlmIChjIDwgdV9zcGFuaXNoLm9mZnNldCkKLSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlIGlm IChjID49IHVfc3BhbmlzaC5vZmZzZXQgKyB1X3NwYW5pc2guc2l6ZSkKLSAgICAgIHJldHVybihj KTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4odV9zcGFuaXNoLm1hcFtjIC0gdV9zcGFuaXNoLm9m ZnNldF0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotc3dlZGlzaF91KENIQVIgYykK LSNlbHNlCi1zd2VkaXNoX3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0g ICAgaWYgKGMgJiAweDgwKQotICAgICAgcmV0dXJuKFVOSyk7Ci0gICAgaWYgKGMgPCB1X3N3ZWRp c2gub2Zmc2V0KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UgaWYgKGMgPj0gdV9zd2VkaXNo Lm9mZnNldCArIHVfc3dlZGlzaC5zaXplKQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UKLSAg ICAgIHJldHVybih1X3N3ZWRpc2gubWFwW2MgLSB1X3N3ZWRpc2gub2Zmc2V0XSk7Ci19Ci0KLVVT SE9SVAotI2lmZGVmIENLX0FOU0lDCi1zd2lzc191KENIQVIgYykKLSNlbHNlCi1zd2lzc191KGMp IENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjICYgMHg4MCkKLSAg ICAgIHJldHVybihVTkspOwotICAgIGlmIChjIDwgdV9zd2lzcy5vZmZzZXQpCi0gICAgICByZXR1 cm4oYyk7Ci0gICAgZWxzZSBpZiAoYyA+PSB1X3N3aXNzLm9mZnNldCArIHVfc3dpc3Muc2l6ZSkK LSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4odV9zd2lzcy5tYXBbYyAt IHVfc3dpc3Mub2Zmc2V0XSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi1hcGwxX3Uo Q0hBUiBjKQotI2Vsc2UKLWFwbDFfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8K LXsKLSAgICBpZiAoYyAmIDB4ODApCi0gICAgICByZXR1cm4oVU5LKTsKLSAgICBpZiAoYyA8IHVf YXBsMS5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZSBpZiAoYyA+PSB1X2FwbDEu b2Zmc2V0ICsgdV9hcGwxLnNpemUpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZQotICAgICAg cmV0dXJuKHVfYXBsMS5tYXBbYyAtIHVfYXBsMS5vZmZzZXRdKTsKLX0KLQotVVNIT1JUCi0jaWZk ZWYgQ0tfQU5TSUMKLWlkZW50X3UoQ0hBUiBjKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLWlkZW50 X3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgcmV0dXJuKChVU0hP UlQpYyk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi1pc29fODg1OV8xX3UoQ0hBUiBj KQotI2Vsc2UKLWlzb184ODU5XzFfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8K LXsKLSAgICBpZiAoYyA+PSAweDgwICYmIGMgPCAweGEwKQotICAgICAgcmV0dXJuKGMpOwotICAg IGMgJj0gMHg3ZjsKLSAgICBpZiAoYyA8IHVfODg1OV8xLm9mZnNldCkKLSAgICAgIHJldHVybihj KTsKLSAgICBlbHNlIGlmIChjID49IHVfODg1OV8xLm9mZnNldCArIHVfODg1OV8xLnNpemUpCi0g ICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHVfODg1OV8xLm1hcFtjIC0g dV84ODU5XzEub2Zmc2V0XSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi1pc29fODg1 OV8yX3UoQ0hBUiBjKQotI2Vsc2UKLWlzb184ODU5XzJfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyog Q0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA+PSAweDgwICYmIGMgPCAweGEwKQotICAgICAgcmV0 dXJuKGMpOwotICAgIGMgJj0gMHg3ZjsKLSAgICBpZiAoYyA8IHVfODg1OV8yLm9mZnNldCkKLSAg ICAgIHJldHVybihjKTsKLSAgICBlbHNlIGlmIChjID49IHVfODg1OV8yLm9mZnNldCArIHVfODg1 OV8yLnNpemUpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHVfODg1 OV8yLm1hcFtjIC0gdV84ODU5XzIub2Zmc2V0XSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FO U0lDCi1pc29fODg1OV8zX3UoQ0hBUiBjKQotI2Vsc2UKLWlzb184ODU5XzNfdShjKSBDSEFSIGM7 Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA+PSAweDgwICYmIGMgPCAweGEw KQotICAgICAgcmV0dXJuKGMpOwotICAgIGMgJj0gMHg3ZjsKLSAgICBpZiAoYyA8IHVfODg1OV8z Lm9mZnNldCkKLSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlIGlmIChjID49IHVfODg1OV8zLm9m ZnNldCArIHVfODg1OV8zLnNpemUpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZQotICAgICAg cmV0dXJuKHVfODg1OV8zLm1hcFtjIC0gdV84ODU5XzMub2Zmc2V0XSk7Ci19Ci0KLVVTSE9SVAot I2lmZGVmIENLX0FOU0lDCi1pc29fODg1OV80X3UoQ0hBUiBjKQotI2Vsc2UKLWlzb184ODU5XzRf dShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA+PSAweDgw ICYmIGMgPCAweGEwKQotICAgICAgcmV0dXJuKGMpOwotICAgIGMgJj0gMHg3ZjsKLSAgICBpZiAo YyA8IHVfODg1OV80Lm9mZnNldCkKLSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlIGlmIChjID49 IHVfODg1OV80Lm9mZnNldCArIHVfODg1OV80LnNpemUpCi0gICAgICByZXR1cm4oYyk7Ci0gICAg ZWxzZQotICAgICAgcmV0dXJuKHVfODg1OV80Lm1hcFtjIC0gdV84ODU5XzQub2Zmc2V0XSk7Ci19 Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi1pc29fODg1OV81X3UoQ0hBUiBjKQotI2Vsc2UK LWlzb184ODU5XzVfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBp ZiAoYyA+PSAweDgwICYmIGMgPCAweGEwKQotICAgICAgcmV0dXJuKGMpOwotICAgIGMgJj0gMHg3 ZjsKLSAgICBpZiAoYyA8IHVfODg1OV81Lm9mZnNldCkKLSAgICAgIHJldHVybihjKTsKLSAgICBl bHNlIGlmIChjID49IHVfODg1OV81Lm9mZnNldCArIHVfODg1OV81LnNpemUpCi0gICAgICByZXR1 cm4oYyk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHVfODg1OV81Lm1hcFtjIC0gdV84ODU5XzUu b2Zmc2V0XSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi1rb2k4X3UoQ0hBUiBjKQot I2Vsc2UKLWtvaThfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBp ZiAoYyA+PSAweDgwICYmIGMgPCAweGEwKQotICAgICAgcmV0dXJuKGMpOwotICAgIGMgJj0gMHg3 ZjsKLSAgICBpZiAoYyA8IHVfa29pOC5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxz ZSBpZiAoYyA+PSB1X2tvaTgub2Zmc2V0ICsgdV9rb2k4LnNpemUpCi0gICAgICByZXR1cm4oYyk7 Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHVfa29pOC5tYXBbYyAtIHVfa29pOC5vZmZzZXRdKTsK LX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWtvaThyX3UoQ0hBUiBjKSAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBLT0k4LVIgdG8gVW5pY29kZSAqLwotI2Vsc2UKLWtvaThyX3UoYykg Q0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgYyAmPSAweDdmOwotICAgIGlm IChjIDwgdV9rb2k4ci5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZSBpZiAoYyA+ PSB1X2tvaThyLm9mZnNldCArIHVfa29pOHIuc2l6ZSkKLSAgICAgIHJldHVybihjKTsKLSAgICBl bHNlCi0gICAgICByZXR1cm4odV9rb2k4ci5tYXBbYyAtIHVfa29pOHIub2Zmc2V0XSk7Ci19Ci0K LVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi1rb2k4dV91KENIQVIgYykKLSNlbHNlCi1rb2k4dV91 KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGMgJj0gMHg3ZjsKLSAg ICBpZiAoYyA8IHVfa29pOHUub2Zmc2V0KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UgaWYg KGMgPj0gdV9rb2k4dS5vZmZzZXQgKyB1X2tvaTh1LnNpemUpCi0gICAgICByZXR1cm4oYyk7Ci0g ICAgZWxzZQotICAgICAgcmV0dXJuKHVfa29pOHUubWFwW2MgLSB1X2tvaTh1Lm9mZnNldF0pOwot fQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotaXNvXzg4NTlfNl91KENIQVIgYykKLSNlbHNl Ci1pc29fODg1OV82X3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAg aWYgKGMgPj0gMHg4MCAmJiBjIDwgMHhhMCkKLSAgICAgIHJldHVybihjKTsKLSAgICBjICY9IDB4 N2Y7Ci0gICAgaWYgKGMgPCB1Xzg4NTlfNi5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAg ZWxzZSBpZiAoYyA+PSB1Xzg4NTlfNi5vZmZzZXQgKyB1Xzg4NTlfNi5zaXplKQotICAgICAgcmV0 dXJuKGMpOwotICAgIGVsc2UKLSAgICAgIHJldHVybih1Xzg4NTlfNi5tYXBbYyAtIHVfODg1OV82 Lm9mZnNldF0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotaXNvXzg4NTlfN191KENI QVIgYykKLSNlbHNlCi1pc29fODg1OV83X3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lD ICovCi17Ci0gICAgaWYgKGMgPj0gMHg4MCAmJiBjIDwgMHhhMCkKLSAgICAgIHJldHVybihjKTsK LSAgICBjICY9IDB4N2Y7Ci0gICAgaWYgKGMgPCB1Xzg4NTlfNy5vZmZzZXQpCi0gICAgICByZXR1 cm4oYyk7Ci0gICAgZWxzZSBpZiAoYyA+PSB1Xzg4NTlfNy5vZmZzZXQgKyB1Xzg4NTlfNy5zaXpl KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UKLSAgICAgIHJldHVybih1Xzg4NTlfNy5tYXBb YyAtIHVfODg1OV83Lm9mZnNldF0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotaXNv Xzg4NTlfOF91KENIQVIgYykKLSNlbHNlCi1pc29fODg1OV84X3UoYykgQ0hBUiBjOwotI2VuZGlm IC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgPj0gMHg4MCAmJiBjIDwgMHhhMCkKLSAgICAg IHJldHVybihjKTsKLSAgICBjICY9IDB4N2Y7Ci0gICAgaWYgKGMgPCB1Xzg4NTlfOC5vZmZzZXQp Ci0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZSBpZiAoYyA+PSB1Xzg4NTlfOC5vZmZzZXQgKyB1 Xzg4NTlfOC5zaXplKQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UKLSAgICAgIHJldHVybih1 Xzg4NTlfOC5tYXBbYyAtIHVfODg1OV84Lm9mZnNldF0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBD S19BTlNJQwotaGVicmV3N191KENIQVIgYykKLSNlbHNlCi1oZWJyZXc3X3UoYykgQ0hBUiBjOwot I2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgYyAmPSAweDdmOwotICAgIGlmIChjIDwgdV9o ZWJyZXc3Lm9mZnNldCkKLSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlIGlmIChjID49IHVfaGVi cmV3Ny5vZmZzZXQgKyB1X2hlYnJldzcuc2l6ZSkKLSAgICAgIHJldHVybihjKTsKLSAgICBlbHNl Ci0gICAgICByZXR1cm4odV9oZWJyZXc3Lm1hcFtjIC0gdV9oZWJyZXc3Lm9mZnNldF0pOwotfQot Ci1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotZWxvdDkyN191KENIQVIgYykKLSNlbHNlCi1lbG90 OTI3X3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgYyAmPSAweDdm OwotICAgIGlmIChjIDwgdV9lbG90OTI3Lm9mZnNldCkKLSAgICAgIHJldHVybihjKTsKLSAgICBl bHNlIGlmIChjID49IHVfZWxvdDkyNy5vZmZzZXQgKyB1X2Vsb3Q5Mjcuc2l6ZSkKLSAgICAgIHJl dHVybihjKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4odV9lbG90OTI3Lm1hcFtjIC0gdV9lbG90 OTI3Lm9mZnNldF0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotaXNvXzg4NTlfOV91 KENIQVIgYykKLSNlbHNlCi1pc29fODg1OV85X3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FO U0lDICovCi17Ci0gICAgaWYgKGMgPj0gMHg4MCAmJiBjIDwgMHhhMCkKLSAgICAgIHJldHVybihj KTsKLSAgICBjICY9IDB4N2Y7Ci0gICAgaWYgKGMgPCB1Xzg4NTlfOS5vZmZzZXQpCi0gICAgICBy ZXR1cm4oYyk7Ci0gICAgZWxzZSBpZiAoYyA+PSB1Xzg4NTlfOS5vZmZzZXQgKyB1Xzg4NTlfOS5z aXplKQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UKLSAgICAgIHJldHVybih1Xzg4NTlfOS5t YXBbYyAtIHVfODg1OV85Lm9mZnNldF0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwot aXNvXzg4NTlfMTBfdShDSEFSIGMpCi0jZWxzZQotaXNvXzg4NTlfMTBfdShjKSBDSEFSIGM7Ci0j ZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA+PSAweDgwICYmIGMgPCAweGEwKQot ICAgICAgcmV0dXJuKGMpOwotICAgIGMgJj0gMHg3ZjsKLSAgICBpZiAoYyA8IHVfODg1OV8xMC5v ZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZSBpZiAoYyA+PSB1Xzg4NTlfMTAub2Zm c2V0ICsgdV84ODU5XzEwLnNpemUpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZQotICAgICAg cmV0dXJuKHVfODg1OV8xMC5tYXBbYyAtIHVfODg1OV8xMC5vZmZzZXRdKTsKLX0KLQotVVNIT1JU Ci0jaWZkZWYgQ0tfQU5TSUMKLWlzb184ODU5XzE1X3UoQ0hBUiBjKQotI2Vsc2UKLWlzb184ODU5 XzE1X3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgPj0g MHg4MCAmJiBjIDwgMHhhMCkKLSAgICAgIHJldHVybihjKTsKLSAgICBjICY9IDB4N2Y7Ci0gICAg aWYgKGMgPCB1Xzg4NTlfMTUub2Zmc2V0KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UgaWYg KGMgPj0gdV84ODU5XzE1Lm9mZnNldCArIHVfODg1OV8xNS5zaXplKQotICAgICAgcmV0dXJuKGMp OwotICAgIGVsc2UKLSAgICAgIHJldHVybih1Xzg4NTlfMTUubWFwW2MgLSB1Xzg4NTlfMTUub2Zm c2V0XSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi1hcGwyX3UoQ0hBUiBjKQotI2Vs c2UKLWFwbDJfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAo YyA+PSAweDgwICYmIGMgPCAweGEwKQotICAgICAgcmV0dXJuKGMpOwotICAgIGMgJj0gMHg3ZjsK LSAgICBpZiAoYyA8IHVfYXBsMi5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZSBp ZiAoYyA+PSB1X2FwbDIub2Zmc2V0ICsgdV9hcGwyLnNpemUpCi0gICAgICByZXR1cm4oYyk7Ci0g ICAgZWxzZQotICAgICAgcmV0dXJuKHVfYXBsMi5tYXBbYyAtIHVfYXBsMi5vZmZzZXRdKTsKLX0K LQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWFwbDNfdShDSEFSIGMpCi0jZWxzZQotYXBsM191 KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGMgJj0gMHg3ZjsKLSAg ICBpZiAoYyA8IHVfYXBsMy5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZSBpZiAo YyA+PSB1X2FwbDMub2Zmc2V0ICsgdV9hcGwzLnNpemUpCi0gICAgICByZXR1cm4oYyk7Ci0gICAg ZWxzZQotICAgICAgcmV0dXJuKHVfYXBsMy5tYXBbYyAtIHVfYXBsMy5vZmZzZXRdKTsKLX0KLQot VVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWFwbDRfdShDSEFSIGMpCi0jZWxzZQotYXBsNF91KGMp IENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGMgJj0gMHg3ZjsKLSAgICBp ZiAoYyA8IHVfYXBsNC5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZSBpZiAoYyA+ PSB1X2FwbDQub2Zmc2V0ICsgdV9hcGw0LnNpemUpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxz ZQotICAgICAgcmV0dXJuKHVfYXBsNC5tYXBbYyAtIHVfYXBsNC5vZmZzZXRdKTsKLX0KLQotVVNI T1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWFwbDVfdShDSEFSIGMpCi0jZWxzZQotYXBsNV91KGMpIENI QVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGMgJj0gMHg3ZjsKLSAgICBpZiAo YyA8IHVfYXBsNS5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZSBpZiAoYyA+PSB1 X2FwbDUub2Zmc2V0ICsgdV9hcGw1LnNpemUpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZQot ICAgICAgcmV0dXJuKHVfYXBsNS5tYXBbYyAtIHVfYXBsNS5vZmZzZXRdKTsKLX0KLQotVVNIT1JU Ci0jaWZkZWYgQ0tfQU5TSUMKLWtvaTdfdShDSEFSIGMpCi0jZWxzZQota29pN191KGMpIENIQVIg YzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjICYgMHg4MCkKLSAgICAgIHJl dHVybihVTkspOwotICAgIGlmIChjIDwgdV9rb2k3Lm9mZnNldCkKLSAgICAgIHJldHVybihjKTsK LSAgICBlbHNlIGlmIChjID49IHVfa29pNy5vZmZzZXQgKyB1X2tvaTcuc2l6ZSkKLSAgICAgIHJl dHVybihjKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4odV9rb2k3Lm1hcFtjIC0gdV9rb2k3Lm9m ZnNldF0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotZGVjbWNzX3UoQ0hBUiBjKQot I2Vsc2UKLWRlY21jc191KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAg IGlmIChjID49IDB4ODAgJiYgYyA8IDB4YTApCi0gICAgICByZXR1cm4oYyk7Ci0gICAgYyAmPSAw eDdmOwotICAgIGlmIChjIDwgdV9kZWNtY3Mub2Zmc2V0KQotICAgICAgcmV0dXJuKGMpOwotICAg IGVsc2UgaWYgKGMgPj0gdV9kZWNtY3Mub2Zmc2V0ICsgdV9kZWNtY3Muc2l6ZSkKLSAgICAgIHJl dHVybihjKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4odV9kZWNtY3MubWFwW2MgLSB1X2RlY21j cy5vZmZzZXRdKTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLW5leHRzdGVwX3UoQ0hB UiBjKQotI2Vsc2UKLW5leHRzdGVwX3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICov Ci17Ci0gICAgcmV0dXJuKHVfbmV4dHN0ZXAubWFwWyhjICYgMHg3ZikgLSB1X25leHRzdGVwLm9m ZnNldF0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotZGdpX3UoQ0hBUiBjKQotI2Vs c2UKLWRnaV91KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChj ID49IDB4ODAgJiYgYyA8IDB4YTApCi0gICAgICByZXR1cm4oYyk7Ci0gICAgcmV0dXJuKHVfZGdp Lm1hcFsoYyAmIDB4N2YpIC0gdV9kZ2kub2Zmc2V0XSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENL X0FOU0lDCi1ocHJvbWFuOF91KENIQVIgYykKLSNlbHNlCi1ocHJvbWFuOF91KGMpIENIQVIgYzsK LSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjID49IDB4ODAgJiYgYyA8IDB4YTAp Ci0gICAgICByZXR1cm4oYyk7Ci0gICAgcmV0dXJuKHVfaHByb21hbjgubWFwWyhjICYgMHg3Zikg LSB1X2hwcm9tYW44Lm9mZnNldF0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotY3Az N191KENIQVIgYykKLSNlbHNlCi1jcDM3X3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lD ICovCi17Ci0gICAgcmV0dXJuKHVfY3AzNy5tYXBbYyAmIDB4N2ZdKTsKLX0KLQotVVNIT1JUCi0j aWZkZWYgQ0tfQU5TSUMKLWNwNDM3X3UoQ0hBUiBjKQotI2Vsc2UKLWNwNDM3X3UoYykgQ0hBUiBj OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgcmV0dXJuKHVfY3A0MzcubWFwW2MgJiAw eDdmXSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi1tYXpvdmlhX3UoQ0hBUiBjKSAv KiBNYXpvdmlhID0gQ1A0Mzcgd2l0aCBzdWJzdGl0dXRpb25zICovCi0jZWxzZQotbWF6b3ZpYV91 KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIHJldHVybih1X21hem92 aWEubWFwW2MgJiAweDdmXSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi1jcDg1MF91 KENIQVIgYykKLSNlbHNlCi1jcDg1MF91KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAq LwotewotICAgIHJldHVybih1X2NwODUwLm1hcFtjICYgMHg3Zl0pOwotfQotCi1VU0hPUlQKLSNp ZmRlZiBDS19BTlNJQwotY3A4NThfdShDSEFSIGMpCi0jZWxzZQotY3A4NThfdShjKSBDSEFSIGM7 Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICByZXR1cm4odV9jcDg1OC5tYXBbYyAmIDB4 N2ZdKTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWNwMTI1MF91KENIQVIgYykKLSNl bHNlCi1jcDEyNTBfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBy ZXR1cm4odV9jcDEyNTAubWFwW2MgJiAweDdmXSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FO U0lDCi1jcDEyNTFfdShDSEFSIGMpCi0jZWxzZQotY3AxMjUxX3UoYykgQ0hBUiBjOwotI2VuZGlm IC8qIENLX0FOU0lDICovCi17Ci0gICAgcmV0dXJuKHVfY3AxMjUxLm1hcFtjICYgMHg3Zl0pOwot fQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotY3AxMjUyX3UoQ0hBUiBjKQotI2Vsc2UKLWNw MTI1Ml91KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIHJldHVybih1 X2NwMTI1Mi5tYXBbYyAmIDB4N2ZdKTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWNw MTI1M191KENIQVIgYykKLSNlbHNlCi1jcDEyNTNfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tf QU5TSUMgKi8KLXsKLSAgICByZXR1cm4odV9jcDEyNTMubWFwW2MgJiAweDdmXSk7Ci19Ci0KLVVT SE9SVAotI2lmZGVmIENLX0FOU0lDCi1jcDEyNTRfdShDSEFSIGMpCi0jZWxzZQotY3AxMjU0X3Uo YykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgcmV0dXJuKHVfY3AxMjU0 Lm1hcFtjICYgMHg3Zl0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotY3AxMjU1X3Uo Q0hBUiBjKQotI2Vsc2UKLWNwMTI1NV91KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAq LwotewotICAgIHJldHVybih1X2NwMTI1NS5tYXBbYyAmIDB4N2ZdKTsKLX0KLQotVVNIT1JUCi0j aWZkZWYgQ0tfQU5TSUMKLWNwMTI1Nl91KENIQVIgYykKLSNlbHNlCi1jcDEyNTZfdShjKSBDSEFS IGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICByZXR1cm4odV9jcDEyNTYubWFwW2Mg JiAweDdmXSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi1jcDEyNTdfdShDSEFSIGMp Ci0jZWxzZQotY3AxMjU3X3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0g ICAgcmV0dXJuKHVfY3AxMjU3Lm1hcFtjICYgMHg3Zl0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBD S19BTlNJQwotY3AxMjU4X3UoQ0hBUiBjKQotI2Vsc2UKLWNwMTI1OF91KGMpIENIQVIgYzsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIHJldHVybih1X2NwMTI1OC5tYXBbYyAmIDB4N2Zd KTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWNwODUyX3UoQ0hBUiBjKQotI2Vsc2UK LWNwODUyX3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgcmV0dXJu KHVfY3A4NTIubWFwW2MgJiAweDdmXSk7Ci19Ci0KLVVTSE9SVCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBDeXJpbGxpYyAqLwotI2lmZGVmIENLX0FOU0lDCi1jcDg1NV91KENI QVIgYykKLSNlbHNlCi1jcDg1NV91KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot ewotICAgIHJldHVybih1X2NwODU1Lm1hcFtjICYgMHg3Zl0pOwotfQotCi1VU0hPUlQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQnVsZ2FyaWEgKi8KLSNpZmRlZiBDS19BTlNJ QwotY3A4NTZfdShDSEFSIGMpCi0jZWxzZQotY3A4NTZfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyog Q0tfQU5TSUMgKi8KLXsKLSAgICByZXR1cm4odV9jcDg1Ni5tYXBbYyAmIDB4N2ZdKTsKLX0KLQot VVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWNwODU3X3UoQ0hBUiBjKQotI2Vsc2UKLWNwODU3X3Uo YykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgcmV0dXJuKHVfY3A4NTcu bWFwW2MgJiAweDdmXSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi1jcDg2Ml91KENI QVIgYykKLSNlbHNlCi1jcDg2Ml91KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot ewotICAgIHJldHVybih1X2NwODYyLm1hcFtjICYgMHg3Zl0pOwotfQotCi1VU0hPUlQKLSNpZmRl ZiBDS19BTlNJQwotY3A4NjRfdShDSEFSIGMpCi0jZWxzZQotY3A4NjRfdShjKSBDSEFSIGM7Ci0j ZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICByZXR1cm4odV9jcDg2NC5tYXBbYyAmIDB4N2Zd KTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWNwODY2X3UoQ0hBUiBjKQotI2Vsc2UK LWNwODY2X3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgcmV0dXJu KHVfY3A4NjYubWFwW2MgJiAweDdmXSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi1j cDg2OV91KENIQVIgYykKLSNlbHNlCi1jcDg2OV91KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19B TlNJQyAqLwotewotICAgIHJldHVybih1X2NwODY5Lm1hcFtjICYgMHg3Zl0pOwotfQotCi1VU0hP UlQKLSNpZmRlZiBDS19BTlNJQwotbWFjbGF0aW5fdShDSEFSIGMpCi0jZWxzZQotbWFjbGF0aW5f dShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICByZXR1cm4odV9tYWNs YXRpbi5tYXBbYyAmIDB4N2ZdKTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLXF1aWNr ZHJhd191KENIQVIgYykKLSNlbHNlCi1xdWlja2RyYXdfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyog Q0tfQU5TSUMgKi8KLXsKLSAgICByZXR1cm4odV9xdWlja2RyYXcubWFwW2MgJiAweDdmXSk7Ci19 Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi1kZWNzcGVjX3UoQ0hBUiBjKQotI2Vsc2UKLWRl Y3NwZWNfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBjICY9IDB4 N2Y7Ci0gICAgaWYgKGMgPCB1X2RlY3NwZWMub2Zmc2V0KQotICAgICAgcmV0dXJuKGMpOwotICAg IGVsc2UgaWYgKGMgPj0gdV9kZWNzcGVjLm9mZnNldCArIHVfZGVjc3BlYy5zaXplKQotICAgICAg cmV0dXJuKGMpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiAodV9kZWNzcGVjLm1hcFtjIC0gdV9k ZWNzcGVjLm9mZnNldF0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotZGVjdGVjaF91 KENIQVIgYykKLSNlbHNlCi1kZWN0ZWNoX3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lD ICovCi17Ci0gICAgYyAmPSAweDdmOwotICAgIGlmIChjIDwgdV9kZWN0ZWNoLm9mZnNldCkKLSAg ICAgIHJldHVybihjKTsKLSAgICBlbHNlIGlmIChjID49IHVfZGVjdGVjaC5vZmZzZXQgKyB1X2Rl Y3RlY2guc2l6ZSkKLSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4odV9k ZWN0ZWNoLm1hcFtjIC0gdV9kZWN0ZWNoLm9mZnNldF0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBD S19BTlNJQwotZGdzcGVjX3UoQ0hBUiBjKQotI2Vsc2UKLWRnc3BlY191KGMpIENIQVIgYzsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGMgJj0gMHg3ZjsKLSAgICBpZiAoYyA8IHVfZGdz cGVjLm9mZnNldCkKLSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlIGlmIChjID49IHVfZGdzcGVj Lm9mZnNldCArIHVfZGdzcGVjLnNpemUpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZQotICAg ICAgcmV0dXJuKHVfZGdzcGVjLm1hcFtjIC0gdV9kZ3NwZWMub2Zmc2V0XSk7Ci19Ci0KLVVTSE9S VAotI2lmZGVmIENLX0FOU0lDCi1kZ2xpbmVfdShDSEFSIGMpCi0jZWxzZQotZGdsaW5lX3UoYykg Q0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgYyAmPSAweDdmOwotICAgIGlm IChjIDwgdV9kZ2xpbmUub2Zmc2V0KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UgaWYgKGMg Pj0gdV9kZ2xpbmUub2Zmc2V0ICsgdV9kZ2xpbmUuc2l6ZSkKLSAgICAgIHJldHVybihjKTsKLSAg ICBlbHNlCi0gICAgICByZXR1cm4odV9kZ2xpbmUubWFwW2MgLSB1X2RnbGluZS5vZmZzZXRdKTsK LX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWRnd29yZF91KENIQVIgYykKLSNlbHNlCi1k Z3dvcmRfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBjICY9IDB4 N2Y7Ci0gICAgaWYgKGMgPCB1X2Rnd29yZC5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAg ZWxzZSBpZiAoYyA+PSB1X2Rnd29yZC5vZmZzZXQgKyB1X2Rnd29yZC5zaXplKQotICAgICAgcmV0 dXJuKGMpOwotICAgIGVsc2UKLSAgICAgIHJldHVybih1X2Rnd29yZC5tYXBbYyAtIHVfZGd3b3Jk Lm9mZnNldF0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotaHBsaW5lX3UoQ0hBUiBj KQotI2Vsc2UKLWhwbGluZV91KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewot ICAgIGMgJj0gMHg3ZjsKLSAgICBpZiAoYyA8IHVfaHBsaW5lLm9mZnNldCkKLSAgICAgIHJldHVy bihjKTsKLSAgICBlbHNlIGlmIChjID49IHVfaHBsaW5lLm9mZnNldCArIHVfaHBsaW5lLnNpemUp Ci0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHVfaHBsaW5lLm1hcFtj IC0gdV9ocGxpbmUub2Zmc2V0XSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi1ocG1h dGhfdShDSEFSIGMpCi0jZWxzZQotaHBtYXRoX3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FO U0lDICovCi17Ci0gICAgYyAmPSAweDdmOwotICAgIGlmIChjIDwgdV9ocG1hdGgub2Zmc2V0KQot ICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UgaWYgKGMgPj0gdV9ocG1hdGgub2Zmc2V0ICsgdV9o cG1hdGguc2l6ZSkKLSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4odV9o cG1hdGgubWFwW2MgLSB1X2hwbWF0aC5vZmZzZXRdKTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tf QU5TSUMKLXFueGdycGhfdShDSEFSIGMpCi0jZWxzZQotcW54Z3JwaF91KGMpIENIQVIgYzsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGMgJj0gMHg3ZjsKLSAgICBpZiAoYyA8IHVfcW54 Z3JwaC5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZSBpZiAoYyA+PSB1X3FueGdy cGgub2Zmc2V0ICsgdV9xbnhncnBoLnNpemUpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZQot ICAgICAgcmV0dXJuKHVfcW54Z3JwaC5tYXBbYyAtIHVfcW54Z3JwaC5vZmZzZXRdKTsKLX0KLQot VVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLWh6MTUwMF91KENIQVIgYykKLSNlbHNlCi1oejE1MDBf dShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBjICY9IDB4N2Y7Ci0g ICAgaWYgKGMgPCB1X2h6MTUwMC5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZSBp ZiAoYyA+PSB1X2h6MTUwMC5vZmZzZXQgKyB1X2h6MTUwMC5zaXplKQotICAgICAgcmV0dXJuKGMp OwotICAgIGVsc2UKLSAgICAgIHJldHVybih1X2h6MTUwMC5tYXBbYyAtIHVfaHoxNTAwLm9mZnNl dF0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotc25pYmxhbmtzX3UoQ0hBUiBjKQot I2Vsc2UKLXNuaWJsYW5rc191KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewot ICAgIGMgJj0gMHg3ZjsKLSAgICBpZiAoYyA8IHVfc25pYmxhbmtzLm9mZnNldCkKLSAgICAgIHJl dHVybihjKTsKLSAgICBlbHNlIGlmIChjID49IHVfc25pYmxhbmtzLm9mZnNldCArIHVfc25pYmxh bmtzLnNpemUpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHVfc25p YmxhbmtzLm1hcFtjIC0gdV9zbmlibGFua3Mub2Zmc2V0XSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVm IENLX0FOU0lDCi1zbmlicmFja191KENIQVIgYykKLSNlbHNlCi1zbmlicmFja191KGMpIENIQVIg YzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGMgJj0gMHg3ZjsKLSAgICBpZiAoYyA8 IHVfc25pYnJhY2sub2Zmc2V0KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UgaWYgKGMgPj0g dV9zbmlicmFjay5vZmZzZXQgKyB1X3NuaWJyYWNrLnNpemUpCi0gICAgICByZXR1cm4oYyk7Ci0g ICAgZWxzZQotICAgICAgcmV0dXJuKHVfc25pYnJhY2subWFwW2MgLSB1X3NuaWJyYWNrLm9mZnNl dF0pOwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotc25pZmFjZXRfdShDSEFSIGMpCi0j ZWxzZQotc25pZmFjZXRfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAg ICBjICY9IDB4N2Y7Ci0gICAgaWYgKGMgPCB1X3NuaWZhY2V0Lm9mZnNldCkKLSAgICAgIHJldHVy bihjKTsKLSAgICBlbHNlIGlmIChjID49IHVfc25pZmFjZXQub2Zmc2V0ICsgdV9zbmlmYWNldC5z aXplKQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UKLSAgICAgIHJldHVybih1X3NuaWZhY2V0 Lm1hcFtjIC0gdV9zbmlmYWNldC5vZmZzZXRdKTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5T SUMKLXNuaWlibV91KENIQVIgYykKLSNlbHNlCi1zbmlpYm1fdShjKSBDSEFSIGM7Ci0jZW5kaWYg LyogQ0tfQU5TSUMgKi8KLXsKLSAgICBjICY9IDB4N2Y7Ci0gICAgaWYgKGMgPCB1X3NuaWlibS5v ZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZSBpZiAoYyA+PSB1X3NuaWlibS5vZmZz ZXQgKyB1X3NuaWlibS5zaXplKQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UKLSAgICAgIHJl dHVybih1X3NuaWlibS5tYXBbYyAtIHVfc25paWJtLm9mZnNldF0pOwotfQotCi1VU0hPUlQKLSNp ZmRlZiBDS19BTlNJQwotc25pZXVyb191KENIQVIgYykKLSNlbHNlCi1zbmlldXJvX3UoYykgQ0hB UiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgYyAmPSAweDdmOwotICAgIGlmIChj IDwgdV9zbmlldXJvLm9mZnNldCkKLSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlIGlmIChjID49 IHVfc25pZXVyby5vZmZzZXQgKyB1X3NuaWV1cm8uc2l6ZSkKLSAgICAgIHJldHVybihjKTsKLSAg ICBlbHNlCi0gICAgICByZXR1cm4odV9zbmlldXJvLm1hcFtjIC0gdV9zbmlldXJvLm9mZnNldF0p OwotfQotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotaGVhdGgxOWdfdShDSEFSIGMpCi0jZWxz ZQotaGVhdGgxOWdfdShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBj ICY9IDB4N2Y7Ci0gICAgaWYgKGMgPCB1X2hlYXRoMTlnLm9mZnNldCkKLSAgICAgIHJldHVybihj KTsKLSAgICBlbHNlIGlmIChjID49IHVfaGVhdGgxOWcub2Zmc2V0ICsgdV9oZWF0aDE5Zy5zaXpl KQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UKLSAgICAgIHJldHVybih1X2hlYXRoMTlnLm1h cFtjIC0gdV9oZWF0aDE5Zy5vZmZzZXRdKTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMK LXR2aWdfdShDSEFSIGMpCi0jZWxzZQotdHZpZ191KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19B TlNJQyAqLwotewotICAgIGMgJj0gMHg3ZjsKLSAgICBpZiAoYyA8IHVfdHZpZy5vZmZzZXQpCi0g ICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZSBpZiAoYyA+PSB1X3R2aWcub2Zmc2V0ICsgdV90dmln LnNpemUpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHVfdHZpZy5t YXBbYyAtIHVfdHZpZy5vZmZzZXRdKTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLXd5 c2VfZ25fdShDSEFSIGMpCi0jZWxzZQotd3lzZV9nbl91KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBD S19BTlNJQyAqLwotewotICAgIGMgJj0gMHg3ZjsKLSAgICBpZiAoYyA8IHVfd3lzZV9nbi5vZmZz ZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZSBpZiAoYyA+PSB1X3d5c2VfZ24ub2Zmc2V0 ICsgdV93eXNlX2duLnNpemUpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZQotICAgICAgcmV0 dXJuKHVfd3lzZV9nbi5tYXBbYyAtIHVfd3lzZV9nbi5vZmZzZXRdKTsKLX0KLQotVVNIT1JUCi0j aWZkZWYgQ0tfQU5TSUMKLXd5c2VfZzFfdShDSEFSIGMpCi0jZWxzZQotd3lzZV9nMV91KGMpIENI QVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGMgJj0gMHg3ZjsKLSAgICBpZiAo YyA8IHVfd3lzZV9nMS5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZSBpZiAoYyA+ PSB1X3d5c2VfZzEub2Zmc2V0ICsgdV93eXNlX2cxLnNpemUpCi0gICAgICByZXR1cm4oYyk7Ci0g ICAgZWxzZQotICAgICAgcmV0dXJuKHVfd3lzZV9nMS5tYXBbYyAtIHVfd3lzZV9nMS5vZmZzZXRd KTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLXd5c2VfZzJfdShDSEFSIGMpCi0jZWxz ZQotd3lzZV9nMl91KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGMg Jj0gMHg3ZjsKLSAgICBpZiAoYyA8IHVfd3lzZV9nMi5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7 Ci0gICAgZWxzZSBpZiAoYyA+PSB1X3d5c2VfZzIub2Zmc2V0ICsgdV93eXNlX2cyLnNpemUpCi0g ICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHVfd3lzZV9nMi5tYXBbYyAt IHVfd3lzZV9nMi5vZmZzZXRdKTsKLX0KLQotVVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLXd5c2Vf ZzNfdShDSEFSIGMpCi0jZWxzZQotd3lzZV9nM191KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19B TlNJQyAqLwotewotICAgIGMgJj0gMHg3ZjsKLSAgICBpZiAoYyA8IHVfd3lzZV9nMy5vZmZzZXQp Ci0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZSBpZiAoYyA+PSB1X3d5c2VfZzMub2Zmc2V0ICsg dV93eXNlX2czLnNpemUpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJu KHVfd3lzZV9nMy5tYXBbYyAtIHVfd3lzZV9nMy5vZmZzZXRdKTsKLX0KLQotVVNIT1JUCi0jaWZk ZWYgQ0tfQU5TSUMKLXNtaWxleV91KENIQVIgYykKLSNlbHNlCi1zbWlsZXlfdShjKSBDSEFSIGM7 Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBjICY9IDB4N2Y7Ci0gICAgaWYgKGMgPCB1 X3NtaWxleS5vZmZzZXQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZSBpZiAoYyA+PSB1X3Nt aWxleS5vZmZzZXQgKyB1X3NtaWxleS5zaXplKQotICAgICAgcmV0dXJuKGMpOwotICAgIGVsc2UK LSAgICAgIHJldHVybih1X3NtaWxleS5tYXBbYyAtIHVfc21pbGV5Lm9mZnNldF0pOwotfQotCi1V U0hPUlQKLSNpZmRlZiBDS19BTlNJQwotYzBwaWNzX3UoQ0hBUiBjKQotI2Vsc2UKLWMwcGljc191 KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGMgJj0gMHg3ZjsKLSAg ICBpZiAoYyA8IHVfYzBwaWNzLm9mZnNldCkKLSAgICAgIHJldHVybihjKTsKLSAgICBlbHNlIGlm IChjID49IHVfYzBwaWNzLm9mZnNldCArIHVfYzBwaWNzLnNpemUpCi0gICAgICByZXR1cm4oYyk7 Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHVfYzBwaWNzLm1hcFtjIC0gdV9jMHBpY3Mub2Zmc2V0 XSk7Ci19Ci0KLVVTSE9SVAotI2lmZGVmIENLX0FOU0lDCi1jMXBpY3NfdShDSEFSIGMpCi0jZWxz ZQotYzFwaWNzX3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgYyAm PSAweDdmOwotICAgIGlmIChjIDwgdV9jMXBpY3Mub2Zmc2V0KQotICAgICAgcmV0dXJuKGMpOwot ICAgIGVsc2UgaWYgKGMgPj0gdV9jMXBpY3Mub2Zmc2V0ICsgdV9jMXBpY3Muc2l6ZSkKLSAgICAg IHJldHVybihjKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4odV9jMXBpY3MubWFwW2MgLSB1X2Mx cGljcy5vZmZzZXRdKTsKLX0KLQotI2lmZGVmIEtBTkpJICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEthbmppL1VuaWNvZGUgZnVuY3Rpb25zICovCi0KLXN0YXRpYyBsb25nICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBTdGF0aXN0aWNzIGNvdW50ZXJzICovCi0gIGJhZCA9IDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUkVNT1ZFIFRIRVNFIExBVEVSLi4uICov Ci0gIGthbmppID0gMCwKLSAga2FuYSA9IDAsCi0gIGdyZWVrID0gMCwKLSAgY3lyaWxsaWMgPSAw LAotICBzcGVjaWFsID0gMCwKLSAgcm9tYW4gPSAwOwotCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJ Qwotc2pfdG9fdW4oVVNIT1JUIHNqKSAgICAgICAgICAgICAgICAgICAgIC8qIFNoaWZ0LUpJUyB0 byBVbmljb2RlICovCi0jZWxzZQotc2pfdG9fdW4oc2opIFVTSE9SVCBzajsKLSNlbmRpZiAvKiBD S19BTlNJQyAqLwotewotCi0vKiBLYW5qaSBibG9ja3MgKi8KLQotICAgIGlmIChzaiA+PSAweDgx NDApIHsgICAgICAgICAgICAgICAgIC8qIEFsbCBwb3NzaWJsZSBLYW5qaXMgKi8KLSAgICAgICAg a2FuamkrKzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBPcHRpbWlzdGljYWxseSBjb3VudCBh IEthbmppICovCi0gICAgICAgIGlmIChzaiA8PSAweDlmZmMpIHsgICAgICAgICAgICAgLyogNzg2 OS1lbGVtZW50IHRhYmxlICovCi0gICAgICAgICAgICByZXR1cm4oc2p1XzgxNDBbc2ogLSAweDgx NDBdKTsKLSAgICAgICAgfSBlbHNlIGlmIChzaiA+PSAweGUwNDAgJiYgc2ogPD0gMHhlYWE0KSB7 IC8qIDI2NjAtZWxlbWVudCB0YWJsZSAqLwotICAgICAgICAgICAgcmV0dXJuKHNqdV9lMDQwW3Nq IC0gMHhlMDQwXSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc2ogPj0gMHhmMDQwKSB7ICAgICAgLyog VXNlci1kZWZpbmVkIGFyZWFzICovCi0gICAgICAgICAgICBpZiAoc2ogPD0gMHhmMGZjKSB7ICAg ICAgICAgLyogdGVuIDE4OS1jaGFyIGNodW5rcyAqLwotICAgICAgICAgICAgICAgIHJldHVybigw eGUwMDAgKyAoc2ogLSAweGYwNDApKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc2ogPj0gMHhm MTQwICYmIHNqIDw9IDB4ZjFmYykgewotICAgICAgICAgICAgICAgIHJldHVybigweGUwYmMgKyAo c2ogLSAweGYxNDApKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc2ogPj0gMHhmMjQwICYmIHNq IDw9IDB4ZjJmYykgewotICAgICAgICAgICAgICAgIHJldHVybigweGUxNzggKyAoc2ogLSAweGYy NDApKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc2ogPj0gMHhmMzQwICYmIHNqIDw9IDB4ZjNm YykgewotICAgICAgICAgICAgICAgIHJldHVybigweGUyMzQgKyAoc2ogLSAweGYzNDApKTsKLSAg ICAgICAgICAgIH0gZWxzZSBpZiAoc2ogPj0gMHhmNDQwICYmIHNqIDw9IDB4ZjRmYykgewotICAg ICAgICAgICAgICAgIHJldHVybigweGUyZjAgKyAoc2ogLSAweGY0NDApKTsKLSAgICAgICAgICAg IH0gZWxzZSBpZiAoc2ogPj0gMHhmNTQwICYmIHNqIDw9IDB4ZjVmYykgewotICAgICAgICAgICAg ICAgIHJldHVybigweGUzYWMgKyAoc2ogLSAweGY1NDApKTsKLSAgICAgICAgICAgIH0gZWxzZSBp ZiAoc2ogPj0gMHhmNjQwICYmIHNqIDw9IDB4ZjZmYykgewotICAgICAgICAgICAgICAgIHJldHVy bigweGU0NjggKyAoc2ogLSAweGY2NDApKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc2ogPj0g MHhmNzQwICYmIHNqIDw9IDB4ZjdmYykgewotICAgICAgICAgICAgICAgIHJldHVybigweGU1MjQg KyAoc2ogLSAweGY3NDApKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc2ogPj0gMHhmODQwICYm IHNqIDw9IDB4ZjhmYykgewotICAgICAgICAgICAgICAgIHJldHVybigweGU1ZTAgKyAoc2ogLSAw eGY4NDApKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc2ogPj0gMHhmOTQwICYmIHNqIDw9IDB4 ZjlmYykgewotICAgICAgICAgICAgICAgIHJldHVybigweGU2OWMgKyAoc2ogLSAweGY5NDApKTsK LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBrYW5qaS0tOyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIE5vbmUgb2YgdGhlIGFib3ZlLCB1bmNvdW50ICovCi0gICAgfQotCi0vKiBD MCAvIEhhbGZ3aWR0aC1Sb21hbiAvIEMxIGJsb2NrICgweDAwLTB4OWYsIG5vIGhvbGVzKSAqLwot Ci0gICAgZWxzZSBpZiAoc2ogPCAweDAwYTApIHsKLSAgICAgICAgcm9tYW4rKzsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBDb3VudCBhIFJvbWFuICovCi0gICAgICAgIGlmIChzaiA9PSAweDVj KSB7ICAgICAgICAgICAgICAgLyogWWVuIHNpZ24gKi8KLSAgICAgICAgICAgIHJldHVybigweDAw YTUpOwotICAgICAgICB9IGVsc2UgaWYgKHNqID09IDB4N2UpIHsgICAgICAgIC8qIE92ZXJsaW5l IChtYWNyb24pICovCi0gICAgICAgICAgICByZXR1cm4oMHgyMDNlKTsKLSAgICAgICAgfSBlbHNl IHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sIG9yIEhhbGZ3aWR0aCBSb21hbiAq LwotICAgICAgICAgICAgcmV0dXJuKHNqKTsKLSAgICAgICAgfQotICAgIH0KLQotLyogSGFsZndp ZHRoIEthdGFrYW5hIGJsb2NrICgweGEwLTB4ZGYsIG5vIGhvbGVzKSAqLwotCi0gICAgZWxzZSBp ZiAoc2ogPj0gMHhhMSAmJiBzaiA8PSAweGRmKSB7Ci0gICAgICAgIGthbmErKzsKLSAgICAgICAg cmV0dXJuKHNqICsgMHhmZWMwKTsKLSAgICB9Ci0KLS8qIENhdGNoLWFsbCBtdXN0IGJlIGZpbmFs ICovCi0KLSAgICBiYWQrKzsKLSAgICByZXR1cm4oMHhmZmZkKTsKLX0KLQotVVNIT1JUCi0jaWZk ZWYgQ0tfQU5TSUMKLXVuX3RvX3NqKFVTSE9SVCB1bikgICAgICAgICAgICAgICAgICAgICAvKiBV bmljb2RlIHRvIFNoaWZ0LUpJUyAqLwotI2Vsc2UKLXVuX3RvX3NqKHVuKSBVU0hPUlQgdW47Ci0j ZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLQotICAgIGlmICh1biA8IDB4MDBhMCkgewotICAgICAg ICBzd2l0Y2ggKHVuKSB7Ci0gICAgICAgICAgY2FzZSAweDAwNWM6IHJvbWFuKys7IHJldHVybigw eDgxNWYpOyAvKiBCYWNrc2xhc2ggKi8KLSAgICAgICAgICBjYXNlIDB4MDA3ZTogYmFkKys7ICAg cmV0dXJuKDB4ZmZmZCk7IC8qIE5vIHRpbGRlIGluIFNoaWZ0LUpJUyAqLwotICAgICAgICAgIGRl ZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQVNDSUkgb3IgQzAvQzEgY29u dHJvbCAqLwotICAgICAgICAgICAgcm9tYW4rKzsKLSAgICAgICAgICAgIHJldHVybih1bik7Ci0g ICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHVuID49IDB4MDBhMCAmJiB1biA8IDB4MDM5MSkgeyAv KiBMYXRpbi0xIHN5bWJvbHMgKi8KLSAgICAgICAgcm9tYW4rKzsKLSAgICAgICAgc3dpdGNoKHVu KSB7Ci0gICAgICAgICAgY2FzZSAweDAwQTI6IHJldHVybigweDgxOTEpOwotICAgICAgICAgIGNh c2UgMHgwMEEzOiByZXR1cm4oMHg4MTkyKTsKLSAgICAgICAgICBjYXNlIDB4MDBBNTogcmV0dXJu KDB4MDA1Qyk7ICAvKiBZZW4gKi8KLSAgICAgICAgICBjYXNlIDB4MDBBNzogcmV0dXJuKDB4ODE5 OCk7Ci0gICAgICAgICAgY2FzZSAweDAwQTg6IHJldHVybigweDgxNEUpOwotICAgICAgICAgIGNh c2UgMHgwMEFDOiByZXR1cm4oMHg4MUNBKTsKLSAgICAgICAgICBjYXNlIDB4MDBCMDogcmV0dXJu KDB4ODE4Qik7Ci0gICAgICAgICAgY2FzZSAweDAwQjE6IHJldHVybigweDgxN0QpOwotICAgICAg ICAgIGNhc2UgMHgwMEI0OiByZXR1cm4oMHg4MTRDKTsKLSAgICAgICAgICBjYXNlIDB4MDBCNjog cmV0dXJuKDB4ODFGNyk7Ci0gICAgICAgICAgY2FzZSAweDAwRDc6IHJldHVybigweDgxN0UpOwot ICAgICAgICAgIGNhc2UgMHgwMEY3OiByZXR1cm4oMHg4MTgwKTsKLSAgICAgICAgICBkZWZhdWx0 OgotICAgICAgICAgICAgcm9tYW4tLTsKLSAgICAgICAgICAgIGJhZCsrOwotICAgICAgICAgICAg cmV0dXJuKDB4ZmZmZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHVuID49IDB4MDM5MSAm JiB1biA8IDB4MDQwMSkgeyAgLyogR3JlZWsgKi8KLSAgICAgICAgZ3JlZWsrKzsKLSAgICAgICAg aWYgKHVuIDw9IDB4MDM5YykKLSAgICAgICAgICByZXR1cm4odXNqXzAzOTFbdW4tMHgwMzkxXSk7 Ci0gICAgICAgIGdyZWVrLS07Ci0gICAgICAgIGJhZCsrOwotICAgICAgICByZXR1cm4oMHhmZmZk KTsKLSAgICB9Ci0gICAgaWYgKHVuID49IDB4MDQwMSAmJiB1biA8IDB4MjAxMCkgeyAgLyogQ3ly aWxsaWMgKi8KLSAgICAgICAgY3lyaWxsaWMrKzsKLSAgICAgICAgaWYgKHVuIDw9IDB4MDQ1MSkK LSAgICAgICAgICByZXR1cm4odXNqXzA0MDFbdW4tMHgwNDAxXSk7Ci0gICAgICAgIGN5cmlsbGlj LS07Ci0gICAgICAgIGJhZCsrOwotICAgICAgICByZXR1cm4oMHhmZmZkKTsKLSAgICB9Ci0gICAg aWYgKHVuID49IDB4MjAxMCAmJiB1biA8IDB4MjUwMCkgeyAgLyogR2VuZXJhbCBwdW5jdHVhdGlv biAqLwotICAgICAgICBzcGVjaWFsKys7Ci0gICAgICAgIHN3aXRjaCh1bikgewotICAgICAgICAg IGNhc2UgMHgyMDEwOiByZXR1cm4oMHg4MTVEKTsKLSAgICAgICAgICBjYXNlIDB4MjAxNTogcmV0 dXJuKDB4ODE1Qyk7Ci0gICAgICAgICAgY2FzZSAweDIwMTY6IHJldHVybigweDgxNjEpOwotICAg ICAgICAgIGNhc2UgMHgyMDE4OiByZXR1cm4oMHg4MTY1KTsKLSAgICAgICAgICBjYXNlIDB4MjAx OTogcmV0dXJuKDB4ODE2Nik7Ci0gICAgICAgICAgY2FzZSAweDIwMUM6IHJldHVybigweDgxNjcp OwotICAgICAgICAgIGNhc2UgMHgyMDFEOiByZXR1cm4oMHg4MTY4KTsKLSAgICAgICAgICBjYXNl IDB4MjAyMDogcmV0dXJuKDB4ODFGNSk7Ci0gICAgICAgICAgY2FzZSAweDIwMjE6IHJldHVybigw eDgxRjYpOwotICAgICAgICAgIGNhc2UgMHgyMDI1OiByZXR1cm4oMHg4MTY0KTsKLSAgICAgICAg ICBjYXNlIDB4MjAyNjogcmV0dXJuKDB4ODE2Myk7Ci0gICAgICAgICAgY2FzZSAweDIwMzA6IHJl dHVybigweDgxRjEpOwotICAgICAgICAgIGNhc2UgMHgyMDMyOiByZXR1cm4oMHg4MThDKTsKLSAg ICAgICAgICBjYXNlIDB4MjAzMzogcmV0dXJuKDB4ODE4RCk7Ci0gICAgICAgICAgY2FzZSAweDIw M0I6IHJldHVybigweDgxQTYpOwotICAgICAgICAgIGNhc2UgMHgyMDNFOiByZXR1cm4oMHgwMDdF KTsKLSAgICAgICAgICBjYXNlIDB4MjEwMzogcmV0dXJuKDB4ODE4RSk7ICAvKiBMZXR0ZXJsaWtl IHN5bWJvbHMgKi8KLSAgICAgICAgICBjYXNlIDB4MjEyQjogcmV0dXJuKDB4ODFGMCk7Ci0gICAg ICAgICAgY2FzZSAweDIxOTA6IHJldHVybigweDgxQTkpOyAgLyogQXJyb3dzICovCi0gICAgICAg ICAgY2FzZSAweDIxOTE6IHJldHVybigweDgxQUEpOwotICAgICAgICAgIGNhc2UgMHgyMTkyOiBy ZXR1cm4oMHg4MUE4KTsKLSAgICAgICAgICBjYXNlIDB4MjE5MzogcmV0dXJuKDB4ODFBQik7Ci0g ICAgICAgICAgY2FzZSAweDIxRDI6IHJldHVybigweDgxQ0IpOwotICAgICAgICAgIGNhc2UgMHgy MUQ0OiByZXR1cm4oMHg4MUNDKTsKLSAgICAgICAgICBjYXNlIDB4MjIwMDogcmV0dXJuKDB4ODFD RCk7ICAvKiBNYXRoICovCi0gICAgICAgICAgY2FzZSAweDIyMDI6IHJldHVybigweDgxREQpOwot ICAgICAgICAgIGNhc2UgMHgyMjAzOiByZXR1cm4oMHg4MUNFKTsKLSAgICAgICAgICBjYXNlIDB4 MjIwNzogcmV0dXJuKDB4ODFERSk7Ci0gICAgICAgICAgY2FzZSAweDIyMDg6IHJldHVybigweDgx QjgpOwotICAgICAgICAgIGNhc2UgMHgyMjBCOiByZXR1cm4oMHg4MUI5KTsKLSAgICAgICAgICBj YXNlIDB4MjIxMjogcmV0dXJuKDB4ODE3Qyk7Ci0gICAgICAgICAgY2FzZSAweDIyMUE6IHJldHVy bigweDgxRTMpOwotICAgICAgICAgIGNhc2UgMHgyMjFEOiByZXR1cm4oMHg4MUU1KTsKLSAgICAg ICAgICBjYXNlIDB4MjIxRTogcmV0dXJuKDB4ODE4Nyk7Ci0gICAgICAgICAgY2FzZSAweDIyMjA6 IHJldHVybigweDgxREEpOwotICAgICAgICAgIGNhc2UgMHgyMjI3OiByZXR1cm4oMHg4MUM4KTsK LSAgICAgICAgICBjYXNlIDB4MjIyODogcmV0dXJuKDB4ODFDOSk7Ci0gICAgICAgICAgY2FzZSAw eDIyMjk6IHJldHVybigweDgxQkYpOwotICAgICAgICAgIGNhc2UgMHgyMjJBOiByZXR1cm4oMHg4 MUJFKTsKLSAgICAgICAgICBjYXNlIDB4MjIyQjogcmV0dXJuKDB4ODFFNyk7Ci0gICAgICAgICAg Y2FzZSAweDIyMkM6IHJldHVybigweDgxRTgpOwotICAgICAgICAgIGNhc2UgMHgyMjM0OiByZXR1 cm4oMHg4MTg4KTsKLSAgICAgICAgICBjYXNlIDB4MjIzNTogcmV0dXJuKDB4ODFFNik7Ci0gICAg ICAgICAgY2FzZSAweDIyM0Q6IHJldHVybigweDgxRTQpOwotICAgICAgICAgIGNhc2UgMHgyMjUy OiByZXR1cm4oMHg4MUUwKTsKLSAgICAgICAgICBjYXNlIDB4MjI2MDogcmV0dXJuKDB4ODE4Mik7 Ci0gICAgICAgICAgY2FzZSAweDIyNjE6IHJldHVybigweDgxREYpOwotICAgICAgICAgIGNhc2Ug MHgyMjY2OiByZXR1cm4oMHg4MTg1KTsKLSAgICAgICAgICBjYXNlIDB4MjI2NzogcmV0dXJuKDB4 ODE4Nik7Ci0gICAgICAgICAgY2FzZSAweDIyNkE6IHJldHVybigweDgxRTEpOwotICAgICAgICAg IGNhc2UgMHgyMjZCOiByZXR1cm4oMHg4MUUyKTsKLSAgICAgICAgICBjYXNlIDB4MjI4MjogcmV0 dXJuKDB4ODFCQyk7Ci0gICAgICAgICAgY2FzZSAweDIyODM6IHJldHVybigweDgxQkQpOwotICAg ICAgICAgIGNhc2UgMHgyMjg2OiByZXR1cm4oMHg4MUJBKTsKLSAgICAgICAgICBjYXNlIDB4MjI4 NzogcmV0dXJuKDB4ODFCQik7Ci0gICAgICAgICAgY2FzZSAweDIyQTU6IHJldHVybigweDgxREIp OwotICAgICAgICAgIGNhc2UgMHgyMzEyOiByZXR1cm4oMHg4MURDKTsgIC8qIEFyYyAqLwotICAg ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzcGVjaWFsLS07Ci0gICAgICAgICAgICBiYWQr KzsKLSAgICAgICAgICAgIHJldHVybigweGZmZmQpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlm ICh1biA+PSAweDI1MDAgJiYgdW4gPCAweDMwMDApIHsgIC8qIEJveCBkcmF3aW5nICovCi0gICAg ICAgIHNwZWNpYWwrKzsKLSAgICAgICAgc3dpdGNoKHVuKSB7Ci0gICAgICAgICAgY2FzZSAweDI1 MDA6IHJldHVybigweDg0OUYpOwotICAgICAgICAgIGNhc2UgMHgyNTAxOiByZXR1cm4oMHg4NEFB KTsKLSAgICAgICAgICBjYXNlIDB4MjUwMjogcmV0dXJuKDB4ODRBMCk7Ci0gICAgICAgICAgY2Fz ZSAweDI1MDM6IHJldHVybigweDg0QUIpOwotICAgICAgICAgIGNhc2UgMHgyNTBDOiByZXR1cm4o MHg4NEExKTsKLSAgICAgICAgICBjYXNlIDB4MjUwRjogcmV0dXJuKDB4ODRBQyk7Ci0gICAgICAg ICAgY2FzZSAweDI1MTA6IHJldHVybigweDg0QTIpOwotICAgICAgICAgIGNhc2UgMHgyNTEzOiBy ZXR1cm4oMHg4NEFEKTsKLSAgICAgICAgICBjYXNlIDB4MjUxNDogcmV0dXJuKDB4ODRBNCk7Ci0g ICAgICAgICAgY2FzZSAweDI1MTc6IHJldHVybigweDg0QUYpOwotICAgICAgICAgIGNhc2UgMHgy NTE4OiByZXR1cm4oMHg4NEEzKTsKLSAgICAgICAgICBjYXNlIDB4MjUxQjogcmV0dXJuKDB4ODRB RSk7Ci0gICAgICAgICAgY2FzZSAweDI1MUM6IHJldHVybigweDg0QTUpOwotICAgICAgICAgIGNh c2UgMHgyNTFEOiByZXR1cm4oMHg4NEJBKTsKLSAgICAgICAgICBjYXNlIDB4MjUyMDogcmV0dXJu KDB4ODRCNSk7Ci0gICAgICAgICAgY2FzZSAweDI1MjM6IHJldHVybigweDg0QjApOwotICAgICAg ICAgIGNhc2UgMHgyNTI0OiByZXR1cm4oMHg4NEE3KTsKLSAgICAgICAgICBjYXNlIDB4MjUyNTog cmV0dXJuKDB4ODRCQyk7Ci0gICAgICAgICAgY2FzZSAweDI1Mjg6IHJldHVybigweDg0QjcpOwot ICAgICAgICAgIGNhc2UgMHgyNTJCOiByZXR1cm4oMHg4NEIyKTsKLSAgICAgICAgICBjYXNlIDB4 MjUyQzogcmV0dXJuKDB4ODRBNik7Ci0gICAgICAgICAgY2FzZSAweDI1MkY6IHJldHVybigweDg0 QjYpOwotICAgICAgICAgIGNhc2UgMHgyNTMwOiByZXR1cm4oMHg4NEJCKTsKLSAgICAgICAgICBj YXNlIDB4MjUzMzogcmV0dXJuKDB4ODRCMSk7Ci0gICAgICAgICAgY2FzZSAweDI1MzQ6IHJldHVy bigweDg0QTgpOwotICAgICAgICAgIGNhc2UgMHgyNTM3OiByZXR1cm4oMHg4NEI4KTsKLSAgICAg ICAgICBjYXNlIDB4MjUzODogcmV0dXJuKDB4ODRCRCk7Ci0gICAgICAgICAgY2FzZSAweDI1M0I6 IHJldHVybigweDg0QjMpOwotICAgICAgICAgIGNhc2UgMHgyNTNDOiByZXR1cm4oMHg4NEE5KTsK LSAgICAgICAgICBjYXNlIDB4MjUzRjogcmV0dXJuKDB4ODRCOSk7Ci0gICAgICAgICAgY2FzZSAw eDI1NDI6IHJldHVybigweDg0QkUpOwotICAgICAgICAgIGNhc2UgMHgyNTRCOiByZXR1cm4oMHg4 NEI0KTsKLSAgICAgICAgICBjYXNlIDB4MjVBMDogcmV0dXJuKDB4ODFBMSk7ICAvKiBHZW9tZXRy aWMgc2hhcGVzICovCi0gICAgICAgICAgY2FzZSAweDI1QTE6IHJldHVybigweDgxQTApOwotICAg ICAgICAgIGNhc2UgMHgyNUIyOiByZXR1cm4oMHg4MUEzKTsKLSAgICAgICAgICBjYXNlIDB4MjVC MzogcmV0dXJuKDB4ODFBMik7Ci0gICAgICAgICAgY2FzZSAweDI1QkM6IHJldHVybigweDgxQTUp OwotICAgICAgICAgIGNhc2UgMHgyNUJEOiByZXR1cm4oMHg4MUE0KTsKLSAgICAgICAgICBjYXNl IDB4MjVDNjogcmV0dXJuKDB4ODE5Rik7Ci0gICAgICAgICAgY2FzZSAweDI1Qzc6IHJldHVybigw eDgxOUUpOwotICAgICAgICAgIGNhc2UgMHgyNUNCOiByZXR1cm4oMHg4MTlCKTsKLSAgICAgICAg ICBjYXNlIDB4MjVDRTogcmV0dXJuKDB4ODE5RCk7Ci0gICAgICAgICAgY2FzZSAweDI1Q0Y6IHJl dHVybigweDgxOUMpOwotICAgICAgICAgIGNhc2UgMHgyNUVGOiByZXR1cm4oMHg4MUZDKTsKLSAg ICAgICAgICBjYXNlIDB4MjYwNTogcmV0dXJuKDB4ODE5QSk7ICAvKiBNaXNjIHN5bWJvbHMgKi8K LSAgICAgICAgICBjYXNlIDB4MjYwNjogcmV0dXJuKDB4ODE5OSk7Ci0gICAgICAgICAgY2FzZSAw eDI2NDA6IHJldHVybigweDgxOEEpOwotICAgICAgICAgIGNhc2UgMHgyNjQyOiByZXR1cm4oMHg4 MTg5KTsKLSAgICAgICAgICBjYXNlIDB4MjY2QTogcmV0dXJuKDB4ODFGNCk7Ci0gICAgICAgICAg Y2FzZSAweDI2NkQ6IHJldHVybigweDgxRjMpOwotICAgICAgICAgIGNhc2UgMHgyNjZGOiByZXR1 cm4oMHg4MUYyKTsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgc3BlY2lhbC0tOwot ICAgICAgICAgICAgYmFkKys7Ci0gICAgICAgICAgICByZXR1cm4oMHhmZmZkKTsKLSAgICAgICAg fQotICAgIH0KLSAgICBpZiAodW4gPj0gMHgzMDAwICYmIHVuIDwgMHg0ZTAwKSB7ICAvKiBDSksg c3ltYm9scyAmIHB1bmMgKi8KLSAgICAgICAga2FuamkrKzsKLSAgICAgICAgaWYgKHVuIDw9IDB4 MzBmZikKLSAgICAgICAgICByZXR1cm4odXNqXzMwMDBbdW4tMHgzMDAwXSk7Ci0gICAgICAgIGth bmppLS07Ci0gICAgICAgIGJhZCsrOwotICAgICAgICByZXR1cm4oMHhmZmZkKTsKLSAgICB9Ci0g ICAgaWYgKHVuID49IDB4ZmYwMCAmJiB1biA8IDB4ZmZmZikgeyAgLyogSGFsZi9mdWxsLXdpZHRo IFJvbWFuICYgS2F0YWthbmEgKi8KLSAgICAgICAgaWYgKHVuIDw9IDB4ZmY5ZikgewotICAgICAg ICAgICAgaWYgKHVuID4gMHhmZjYwKQotICAgICAgICAgICAgICBrYW5hKys7Ci0gICAgICAgICAg ICByZXR1cm4odXNqX2ZmMDBbdW4tMHhmZjAwXSk7Ci0gICAgICAgIH0KLSAgICAgICAgYmFkKys7 Ci0gICAgICAgIHJldHVybigweGZmZmQpOwotICAgIH0KLSAgICBpZiAodW4gPj0gMHg0ZTAwICYm IHVuIDwgMHhlMDAwKSB7ICAvKiBLYW5qaSAqLwotICAgICAgICBrYW5qaSsrOwotICAgICAgICBp ZiAodW4gPD0gMHg5ZmEwKQotICAgICAgICAgIHJldHVybih1c2pfNGUwMFt1bi0weDRlMDBdKTsK LSAgICAgICAga2FuamktLTsKLSAgICAgICAgYmFkKys7Ci0gICAgICAgIHJldHVybigweGZmZmQp OwotICAgIH0KLSAgICBpZiAodW4gPj0gMHhlMDAwICYmIHVuIDwgMHhmZjAwKSB7ICAvKiBVc2Vy LWRlZmluZWQgKEdhaWppKSAqLwotICAgICAgICBrYW5qaSsrOwotICAgICAgICBpZiAodW4gPD0g MHhlMGJiKSB7ICAgICAgICAgICAgIC8qIHRlbiAxODktY2hhciBjaHVua3MgKi8KLSAgICAgICAg ICAgIHJldHVybigweGYwNDAgKyAodW4gLSAweGUwMDApKTsKLSAgICAgICAgfSBlbHNlIGlmICh1 biA+PSAweGUwYmMgJiYgdW4gPD0gMHhlMTc3KSB7Ci0gICAgICAgICAgICByZXR1cm4oMHhmMTQw ICsgKHVuIC0gMHhlMGJjKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAodW4gPj0gMHhlMTc4ICYmIHVu IDw9IDB4ZTIzMykgewotICAgICAgICAgICAgcmV0dXJuKDB4ZjI0MCArICh1biAtIDB4ZTE3OCkp OwotICAgICAgICB9IGVsc2UgaWYgKHVuID49IDB4ZTIzNCAmJiB1biA8PSAweGUyZWYpIHsKLSAg ICAgICAgICAgIHJldHVybigweGYzNDAgKyAodW4gLSAweGUyMzQpKTsKLSAgICAgICAgfSBlbHNl IGlmICh1biA+PSAweGUyZjAgJiYgdW4gPD0gMHhlM2FiKSB7Ci0gICAgICAgICAgICByZXR1cm4o MHhmNDQwICsgKHVuIC0gMHhlMmYwKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAodW4gPj0gMHhlM2Fj ICYmIHVuIDw9IDB4ZTQ2NykgewotICAgICAgICAgICAgcmV0dXJuKDB4ZjU0MCArICh1biAtIDB4 ZTNhYykpOwotICAgICAgICB9IGVsc2UgaWYgKHVuID49IDB4ZTQ2OCAmJiB1biA8PSAweGU1MjMp IHsKLSAgICAgICAgICAgIHJldHVybigweGY2NDAgKyAodW4gLSAweGU0NjgpKTsKLSAgICAgICAg fSBlbHNlIGlmICh1biA+PSAweGU1MjQgJiYgdW4gPD0gMHhlNWRmKSB7Ci0gICAgICAgICAgICBy ZXR1cm4oMHhmNzQwICsgKHVuIC0gMHhlNTI0KSk7Ci0gICAgICAgIH0gZWxzZSBpZiAodW4gPj0g MHhlNWUwICYmIHVuIDw9IDB4ZTY5YikgewotICAgICAgICAgICAgcmV0dXJuKDB4Zjg0MCArICh1 biAtIDB4ZTVlMCkpOwotICAgICAgICB9IGVsc2UgaWYgKHVuID49IDB4ZTY5YyAmJiB1biA8PSAw eGU3NTcpIHsKLSAgICAgICAgICAgIHJldHVybigweGY5NDAgKyAodW4gLSAweGU2OWMpKTsKLSAg ICAgICAgfQotICAgICAgICBiYWQrKzsKLSAgICAgICAgcmV0dXJuKDB4ZmZmZCk7Ci0gICAgfQot ICAgIC8qIE5PVFJFQUNIRUQgKi8KLSAgICAvKiBTb21lIGNvbXBpbGVycyAoY29ycmVjdGx5KSB3 YXJuIG9mICJzdGF0ZW1lbnQgbm90IHJlYWNoZWQiIGhlcmUuICovCi0gICAgLyogQnV0IG90aGVy cyBnaXZlIHVwIHRoZSBnaG9zdCB3aXRoICJubyByZXR1cm4gdmFsdWUiLiAgVGhlIGZvcm1lciAq LwotICAgIC8qIGlzIHRoZSBsZXNzZXIgb2YgdHdvIGV2aWxzLiAqLwotICAgIGJhZCsrOwotICAg IHJldHVybigweGZmZmQpOwotfQotI2VuZGlmIC8qIEtBTkpJICovCi0KLS8qIFVuaWNvZGUtdG8t YmxhaCBmdW5jdGlvbnMsIHR4X2JsYWgoKS4gKi8KLQotc3RhdGljIGludAotI2lmZGVmIENLX0FO U0lDCi10eF9wdW5jKFVTSE9SVCBjKQotI2Vsc2UKLXR4X3B1bmMoYykgVVNIT1JUIGM7Ci0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA+PSAweDIwMDAgJiYgYyA8PSAweDIwMGEp ICAgICAvKiBWYXJpb3VzLXdpZHRoIHNwYWNlcyAqLwotICAgICAgcmV0dXJuKChDSEFSKSgweDIw KSk7Ci0gICAgZWxzZSBpZiAoYyA+PSAweDIwMTAgJiYgYyA8PSAweDIwMTUpIC8qIFZhcmlvdXMt d2lkdGggZGFzaGVzICovCi0gICAgICByZXR1cm4oKENIQVIpJy0nKTsKLSAgICBlbHNlIGlmIChj ID49IDB4MjAxOCAmJiBjIDw9IDB4MjAxYikgLyogQXNzb3J0ZWQgc2luZ2xlIHF1b3RlcyAqLwot ICAgICAgcmV0dXJuKChDSEFSKTB4MjcpOwotICAgIGVsc2UgaWYgKGMgPj0gMHgyMDFjICYmIGMg PD0gMHgyMDFmKSAvKiBBc3NvcnRlZCBkb3VibGUgcXVvdGVzICovCi0gICAgICByZXR1cm4oKENI QVIpMHgyMik7Ci0gICAgZWxzZSBpZiAoKGMgPj0gMHgyMDIyICYmIGMgPD0gMHgyMDI0KSB8fCBj ID09IDB4MjA0MykgLyogQnVsbGV0cyAqLwotICAgICAgcmV0dXJuKChDSEFSKTB4YjcpOwotICAg IHN3aXRjaCAoYykgewotICAgICAgY2FzZSAweDIwMzk6ICAgICAgICAgICAgICAgICAgICAgIC8q IExlc3MtdGhhbiBzaWduICovCi0gICAgICAgIHJldHVybigoQ0hBUikweDNjKTsKLSAgICAgIGNh c2UgMHgyMDNhOiAgICAgICAgICAgICAgICAgICAgICAvKiBHcmVhdGVyLXRoYW4gc2lnbiAqLwot ICAgICAgICByZXR1cm4oKENIQVIpMHgzZSk7Ci0gICAgICBjYXNlIDB4MjA0NDogICAgICAgICAg ICAgICAgICAgICAgLyogU29saWR1cyAtPiBTbGFzaCAqLwotICAgICAgICByZXR1cm4oKENIQVIp MHgyZik7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLX0KLQot Ci1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIExhdGluLTEg Ki8KLSNpZmRlZiBDS19BTlNJQwotdHhfaWRlbnQoVVNIT1JUIGMpCi0jZWxzZQotdHhfaWRlbnQo YykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA9PSAweDIw M2UpICAgICAgICAgICAgICAgICAgICAvKiBPdmVybGluZSAtPiBNYWNyb24gKi8KLSAgICAgIHJl dHVybigoQ0hBUikweGFmKTsKLSAgICBlbHNlIGlmIChjIDwgMHgxMDApICAgICAgICAgICAgICAg ICAvKiBMYXRpbi0xIHJhbmdlICovCi0gICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7Ci0g ICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3IgbWF5YmUgZnJvbSBw dW5jdHVhdGlvbiBibG9jayAqLwotICAgICAgcmV0dXJuKHR4X3B1bmMoYykpOwotfQotCi1pbnQK LSNpZmRlZiBDS19BTlNJQwotdHhfdXNhc2NpaShVU0hPUlQgYykKLSNlbHNlCi10eF91c2FzY2lp KGMpIFVTSE9SVCBjOyAgICAgICAgICAgICAgICAgLyogVVMgQVNDSUkgKi8KLSNlbmRpZiAvKiBD S19BTlNJQyAqLwotewotICAgIGlmIChjIDwgMHg4MCkKLSAgICAgIHJldHVybigoQ0hBUikoYyAm IDB4ZmYpKTsKLSAgICBlbHNlIGlmIChjID49IDB4MjAwMCAmJiBjIDw9IDB4MjAwYSkgLyogVmFy aW91cy13aWR0aCBzcGFjZXMgKi8KLSAgICAgIHJldHVybigoQ0hBUikoMHgyMCkpOwotICAgIGVs c2UgaWYgKGMgPj0gMHgyMDEwICYmIGMgPD0gMHgyMDE1KSAvKiBWYXJpb3VzLXdpZHRoIGRhc2hl cyAqLwotICAgICAgcmV0dXJuKChDSEFSKSctJyk7Ci0gICAgZWxzZSBpZiAoYyA+PSAweDIwMTgg JiYgYyA8PSAweDIwMWIpIC8qIEFzc29ydGVkIHNpbmdsZSBxdW90ZXMgKi8KLSAgICAgIHJldHVy bigoQ0hBUikweDI3KTsKLSAgICBlbHNlIGlmIChjID49IDB4MjAxYyAmJiBjIDw9IDB4MjAxZikg LyogQXNzb3J0ZWQgZG91YmxlIHF1b3RlcyAqLwotICAgICAgcmV0dXJuKChDSEFSKTB4MjIpOwot ICAgIGVsc2UgaWYgKChjID49IDB4MjAyMiAmJiBjIDw9IDB4MjAyNCkgfHwgYyA9PSAweDIwNDMp IC8qIEJ1bGxldHMgKi8KLSAgICAgIHJldHVybigoQ0hBUikweGI3KTsKLSAgICBzd2l0Y2ggKGMp IHsKLSAgICAgIGNhc2UgMHgyMDM5OiAgICAgICAgICAgICAgICAgICAgICAvKiBMZXNzLXRoYW4g c2lnbiAqLwotICAgICAgICByZXR1cm4oKENIQVIpMHgzYyk7Ci0gICAgICBjYXNlIDB4MjAzYTog ICAgICAgICAgICAgICAgICAgICAgLyogR3JlYXRlci10aGFuIHNpZ24gKi8KLSAgICAgICAgcmV0 dXJuKChDSEFSKTB4M2UpOwotICAgICAgY2FzZSAweDIwNDQ6ICAgICAgICAgICAgICAgICAgICAg IC8qIFNvbGlkdXMgLT4gU2xhc2ggKi8KLSAgICAgICAgcmV0dXJuKChDSEFSKTB4MmYpOwotICAg IH0KLSAgICAvKgotICAgICAgSGVyZSB3ZSBtaWdodCBhbHNvIChhKSBtYXAgYWNjZW50ZWQgUm9t YW4gbGV0dGVycyB0byB1bmFjY2VudGVkIG9uZXM7Ci0gICAgICAoYikgbWFwIEdyZWVrL0N5cmls bGljIEEgKGV0YykgdG8gUm9tYW4sIGFuZCBzbyBvbi4KLSAgICAqLwotICAgIHJldHVybigoYyAm IDB4ZmY4MCkgPyAtMSA6IChDSEFSKShjICYgMHg3ZikpOwotfQotCi1pbnQKLSNpZmRlZiBDS19B TlNJQwotdHhfYnJpdGlzaChVU0hPUlQgYykKLSNlbHNlCi10eF9icml0aXNoKGMpIFVTSE9SVCBj OyAgICAgICAgICAgICAgICAgLyogQnJpdGlzaCAqLwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17 Ci0gICAgaWYgKGMgJiAweGZmMDApCi0gICAgICByZXR1cm4oLTEpOwotICAgIGVsc2UgaWYgKGMg PT0gKFVTSE9SVCkgMHgwMGEzKSAgICAgIC8qIFBvdW5kIHNpZ24gKi8KLSAgICAgIHJldHVybigw eDJiKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4odHhfdXNhc2NpaShjKSk7Ci19Ci0KLWludAot I2lmZGVmIENLX0FOU0lDCi10eF9hcGwxKFVTSE9SVCBjKQotI2Vsc2UKLXR4X2FwbDEoYykgVVNI T1JUIGM7ICAgICAgICAgICAgICAgICAgICAvKiBBcGwxICovCi0jZW5kaWYgLyogQ0tfQU5TSUMg Ki8KLXsKLSAgICBpZiAoYyA+PSAweDAwNDEgJiYgYyA8PSAweDAwNWEpICAgICAvKiBMZXR0ZXJz ICovCi0gICAgICByZXR1cm4oYyArIDB4MjApOwotICAgIHN3aXRjaCAoYykgeyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIE90aGVycyAqLwotICAgICAgY2FzZSAweDAwMjQ6IHJldHVybigoQ0hB UikweDdlKTsKLSAgICAgIGNhc2UgMHgwMDI3OiByZXR1cm4oKENIQVIpMHg0Yik7Ci0gICAgICBj YXNlIDB4MDAyODogcmV0dXJuKChDSEFSKTB4M2EpOwotICAgICAgY2FzZSAweDAwMjk6IHJldHVy bigoQ0hBUikweDIyKTsKLSAgICAgIGNhc2UgMHgwMDJiOiByZXR1cm4oKENIQVIpMHgyZCk7Ci0g ICAgICBjYXNlIDB4MDAyYzogcmV0dXJuKChDSEFSKTB4MmMpOwotICAgICAgY2FzZSAweDAwMmQ6 IHJldHVybigoQ0hBUikweDVmKTsKLSAgICAgIGNhc2UgMHgwMDJlOiByZXR1cm4oKENIQVIpMHgy ZSk7Ci0gICAgICBjYXNlIDB4MDAyZjogcmV0dXJuKChDSEFSKTB4MmYpOwotICAgICAgY2FzZSAw eDAwMzA6IHJldHVybigoQ0hBUikweDMwKTsKLSAgICAgIGNhc2UgMHgwMDMxOiByZXR1cm4oKENI QVIpMHgzMSk7Ci0gICAgICBjYXNlIDB4MDAzMjogcmV0dXJuKChDSEFSKTB4MzIpOwotICAgICAg Y2FzZSAweDAwMzM6IHJldHVybigoQ0hBUikweDMzKTsKLSAgICAgIGNhc2UgMHgwMDM0OiByZXR1 cm4oKENIQVIpMHgzNCk7Ci0gICAgICBjYXNlIDB4MDAzNTogcmV0dXJuKChDSEFSKTB4MzUpOwot ICAgICAgY2FzZSAweDAwMzY6IHJldHVybigoQ0hBUikweDM2KTsKLSAgICAgIGNhc2UgMHgwMDM3 OiByZXR1cm4oKENIQVIpMHgzNyk7Ci0gICAgICBjYXNlIDB4MDAzODogcmV0dXJuKChDSEFSKTB4 MzgpOwotICAgICAgY2FzZSAweDAwMzk6IHJldHVybigoQ0hBUikweDM5KTsKLSAgICAgIGNhc2Ug MHgwMDNhOiByZXR1cm4oKENIQVIpMHgzZSk7Ci0gICAgICBjYXNlIDB4MDAzYjogcmV0dXJuKChD SEFSKTB4M2MpOwotICAgICAgY2FzZSAweDAwM2M6IHJldHVybigoQ0hBUikweDIzKTsKLSAgICAg IGNhc2UgMHgwMDNkOiByZXR1cm4oKENIQVIpMHgyNSk7Ci0gICAgICBjYXNlIDB4MDAzZTogcmV0 dXJuKChDSEFSKTB4MjYpOwotICAgICAgY2FzZSAweDAwM2Y6IHJldHVybigoQ0hBUikweDUxKTsK LSAgICAgIGNhc2UgMHgwMDViOiByZXR1cm4oKENIQVIpMHgzYik7Ci0gICAgICBjYXNlIDB4MDA1 YzogcmV0dXJuKChDSEFSKTB4M2YpOwotICAgICAgY2FzZSAweDAwNWQ6IHJldHVybigoQ0hBUikw eDI3KTsKLSAgICAgIGNhc2UgMHgwMDVmOiByZXR1cm4oKENIQVIpMHg0Nik7Ci0gICAgICBjYXNl IDB4MDA3YjogcmV0dXJuKChDSEFSKTB4N2IpOwotICAgICAgY2FzZSAweDAwN2M6IHJldHVybigo Q0hBUikweDRkKTsKLSAgICAgIGNhc2UgMHgwMDdkOiByZXR1cm4oKENIQVIpMHg3ZCk7Ci0gICAg ICBjYXNlIDB4MDBhODogcmV0dXJuKChDSEFSKTB4MjEpOwotICAgICAgY2FzZSAweDAwYWY6IHJl dHVybigoQ0hBUikweDQwKTsKLSAgICAgIGNhc2UgMHgwMGQ3OiByZXR1cm4oKENIQVIpMHgzZCk7 Ci0gICAgICBjYXNlIDB4MDBmNzogcmV0dXJuKChDSEFSKTB4MmIpOwotICAgICAgY2FzZSAweDIx OTA6IHJldHVybigoQ0hBUikweDViKTsKLSAgICAgIGNhc2UgMHgyMTkxOiByZXR1cm4oKENIQVIp MHg1OSk7Ci0gICAgICBjYXNlIDB4MjE5MjogcmV0dXJuKChDSEFSKTB4NWQpOwotICAgICAgY2Fz ZSAweDIxOTM6IHJldHVybigoQ0hBUikweDU1KTsKLSAgICAgIGNhc2UgMHgyMjA2OiByZXR1cm4o KENIQVIpMHg0OCk7Ci0gICAgICBjYXNlIDB4MjIwNzogcmV0dXJuKChDSEFSKTB4NDcpOwotICAg ICAgY2FzZSAweDIyMGE6IHJldHVybigoQ0hBUikweDQ1KTsKLSAgICAgIGNhc2UgMHgyMjE4OiBy ZXR1cm4oKENIQVIpMHg0YSk7Ci0gICAgICBjYXNlIDB4MjIyNzogcmV0dXJuKChDSEFSKTB4Mjkp OwotICAgICAgY2FzZSAweDIyMjg6IHJldHVybigoQ0hBUikweDI4KTsKLSAgICAgIGNhc2UgMHgy MjJhOiByZXR1cm4oKENIQVIpMHg1Nik7Ci0gICAgICBjYXNlIDB4MjIzYzogcmV0dXJuKChDSEFS KTB4NTQpOwotICAgICAgY2FzZSAweDIyNjA6IHJldHVybigoQ0hBUikweDJhKTsKLSAgICAgIGNh c2UgMHgyMjY0OiByZXR1cm4oKENIQVIpMHgyNCk7Ci0gICAgICBjYXNlIDB4MjI2NTogcmV0dXJu KChDSEFSKTB4NWUpOwotICAgICAgY2FzZSAweDIyODI6IHJldHVybigoQ0hBUikweDVhKTsKLSAg ICAgIGNhc2UgMHgyMjgzOiByZXR1cm4oKENIQVIpMHg1OCk7Ci0gICAgICBjYXNlIDB4MjJhMjog cmV0dXJuKChDSEFSKTB4NWMpOwotICAgICAgY2FzZSAweDIyYTM6IHJldHVybigoQ0hBUikweDdj KTsKLSAgICAgIGNhc2UgMHgyMmE0OiByZXR1cm4oKENIQVIpMHg0ZSk7Ci0gICAgICBjYXNlIDB4 MjJhNTogcmV0dXJuKChDSEFSKTB4NDIpOwotICAgICAgY2FzZSAweDIyYzI6IHJldHVybigoQ0hB UikweDQzKTsKLSAgICAgIGNhc2UgMHgyMmM0OiByZXR1cm4oKENIQVIpMHg2MCk7Ci0gICAgICBj YXNlIDB4MjJjNjogcmV0dXJuKChDSEFSKTB4NTApOwotICAgICAgY2FzZSAweDIzMDg6IHJldHVy bigoQ0hBUikweDUzKTsKLSAgICAgIGNhc2UgMHgyMzBhOiByZXR1cm4oKENIQVIpMHg0NCk7Ci0g ICAgICBjYXNlIDB4MjM3MzogcmV0dXJuKChDSEFSKTB4NDkpOwotICAgICAgY2FzZSAweDIzNzQ6 IHJldHVybigoQ0hBUikweDUyKTsKLSAgICAgIGNhc2UgMHgyMzc1OiByZXR1cm4oKENIQVIpMHg1 Nyk7Ci0gICAgICBjYXNlIDB4MjM3YTogcmV0dXJuKChDSEFSKTB4NDEpOwotICAgICAgY2FzZSAw eDI1YWY6IHJldHVybigoQ0hBUikweDRjKTsKLSAgICAgIGNhc2UgMHgyNWNiOiByZXR1cm4oKENI QVIpMHg0Zik7Ci0gICAgICBkZWZhdWx0OiAgIHJldHVybih0eF91c2FzY2lpKGMpKTsKLSAgICB9 Ci19Ci0KLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDYW5hZGlh biBGcmVuY2ggKi8KLSNpZmRlZiBDS19BTlNJQwotdHhfZnJfY2FuYWRpYW4oVVNIT1JUIGMpCi0j ZWxzZQotdHhfZnJfY2FuYWRpYW4oYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8K LXsKLSAgICBpZiAoYyAmIDB4ZmYwMCkgICAgICAgICAgICAgICAgICAgICAvKiBPdXQgb2YgcmFu Z2UgKi8KLSAgICAgIHJldHVybigtMSk7Ci0gICAgc3dpdGNoKGMpIHsKLSAgICAgIGNhc2UgMHhl MDogcmV0dXJuKDB4NDApOyAgICAgICAgICAvKiBhIGdyYXZlICovCi0gICAgICBjYXNlIDB4ZTI6 IHJldHVybigweDViKTsgICAgICAgICAgLyogYSBjaXJjdW1mbGV4ICovCi0gICAgICBjYXNlIDB4 ZTc6IHJldHVybigweDVjKTsgICAgICAgICAgLyogYyBjZWRpbGxhICovCi0gICAgICBjYXNlIDB4 ZTg6IHJldHVybigweDdkKTsgICAgICAgICAgLyogZSBncmF2ZSAqLwotICAgICAgY2FzZSAweGU5 OiByZXR1cm4oMHg3Yik7ICAgICAgICAgIC8qIGUgYWN1dGUgKi8KLSAgICAgIGNhc2UgMHhlYTog cmV0dXJuKDB4NWQpOyAgICAgICAgICAvKiBlIGNpcmN1bWZsZXggKi8KLSAgICAgIGNhc2UgMHhl ZTogcmV0dXJuKDB4NWUpOyAgICAgICAgICAvKiBpIGNpcmN1bWZsZXggKi8KLSAgICAgIGNhc2Ug MHhmNDogcmV0dXJuKDB4NjApOyAgICAgICAgICAvKiBvIGNpcmN1bWZsZXggKi8KLSAgICAgIGNh c2UgMHhmOTogcmV0dXJuKDB4N2MpOyAgICAgICAgICAvKiB1IGdyYXZlICovCi0gICAgICBjYXNl IDB4ZmI6IHJldHVybigweDZlKTsgICAgICAgICAgLyogdSBjaXJjdW1mbGV4ICovCi0gICAgICBk ZWZhdWx0OiAgIHJldHVybih0eF91c2FzY2lpKGMpKTsKLSAgICB9Ci19Ci0KLWludCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEYW5pc2gvTm9yd2VnaWFuICovCi0jaWZk ZWYgQ0tfQU5TSUMKLXR4X2RhbmlzaChVU0hPUlQgYykKLSNlbHNlCi10eF9kYW5pc2goYykgVVNI T1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyAmIDB4ZmYwMCkgICAg ICAgICAgICAgICAgICAgICAvKiBPdXQgb2YgcmFuZ2UgKi8KLSAgICAgIHJldHVybigtMSk7Ci0g ICAgc3dpdGNoKGMpIHsKLSAgICAgIGNhc2UgMHhjNjogcmV0dXJuKDB4NWIpOyAgICAgICAgICAv KiBBRSAqLwotICAgICAgY2FzZSAweGQ4OiByZXR1cm4oMHg1Yyk7ICAgICAgICAgIC8qIE8gc3Ry b2tlICovCi0gICAgICBjYXNlIDB4ZTY6IHJldHVybigweDdiKTsgICAgICAgICAgLyogYWUgKi8K LSAgICAgIGNhc2UgMHhmODogcmV0dXJuKDB4N2MpOyAgICAgICAgICAvKiBvIHN0cm9rZSAqLwot ICAgICAgY2FzZSAweGU1OiByZXR1cm4oMHg3ZCk7ICAgICAgICAgIC8qIGEgcmluZyAqLwotICAg ICAgY2FzZSAweGFmOiByZXR1cm4oMHg3ZSk7ICAgICAgICAgIC8qIG1hY3JvbiAqLwotICAgICAg ZGVmYXVsdDogICByZXR1cm4odHhfdXNhc2NpaShjKSk7Ci0gICAgfQotfQotCi1pbnQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRHV0Y2ggKi8KLSNpZmRlZiBDS19BTlNJ QwotdHhfZHV0Y2goVVNIT1JUIGMpCi0jZWxzZQotdHhfZHV0Y2goYykgVVNIT1JUIGM7Ci0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyAmIDB4ZmUwMCkgICAgICAgICAgICAgICAg ICAgICAvKiBPdXQgb2YgcmFuZ2UgKi8KLSAgICAgIHJldHVybigtMSk7Ci0gICAgc3dpdGNoKGMp IHsKLSAgICAgIGNhc2UgMHgwMDdjOiByZXR1cm4oMHg1ZCk7ICAgICAgICAvKiB2ZXJ0aWNhbCBi YXIgKi8KLSAgICAgIGNhc2UgMHgwMGEzOiByZXR1cm4oMHgyMyk7ICAgICAgICAvKiBwb3VuZCBz aWduICovCi0gICAgICBjYXNlIDB4MDBhYjogcmV0dXJuKDB4N2IpOyAgICAgICAgLyogZGlhZXJl c2lzICovCi0gICAgICBjYXNlIDB4MDBiNDogcmV0dXJuKDB4N2UpOyAgICAgICAgLyogYWN1dGUg YWNjZW50ICovCi0gICAgICBjYXNlIDB4MDBiYzogcmV0dXJuKDB4N2QpOyAgICAgICAgLyogMS80 ICovCi0gICAgICBjYXNlIDB4MDBiZTogcmV0dXJuKDB4NDApOyAgICAgICAgLyogMy80ICovCi0g ICAgICBjYXNlIDB4MDBiZDogcmV0dXJuKDB4NWMpOyAgICAgICAgLyogMS8yICovCi0gICAgICBj YXNlIDB4MDBmZjogcmV0dXJuKDB4NWIpOyAgICAgICAgLyogeSBkaWFlcmVzaXMgKGlqKSAqLwot ICAgICAgY2FzZSAweDAxOTI6IHJldHVybigweDdjKTsgICAgICAgIC8qIEZsb3JpbiAqLwotICAg ICAgZGVmYXVsdDogICByZXR1cm4oKGMgJiAweDgwKSA/IC0xIDogKENIQVIpKGMgJiAweDdmKSk7 Ci0gICAgfQotfQotCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog RmlubmlzaCAqLwotI2lmZGVmIENLX0FOU0lDCi10eF9maW5uaXNoKFVTSE9SVCBjKQotI2Vsc2UK LXR4X2Zpbm5pc2goYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBp ZiAoYyAmIDB4ZmYwMCkgICAgICAgICAgICAgICAgICAgICAvKiBPdXQgb2YgcmFuZ2UgKi8KLSAg ICAgIHJldHVybigtMSk7Ci0gICAgc3dpdGNoKGMpIHsKLSAgICAgIGNhc2UgMHhjNDogcmV0dXJu KDB4NWIpOyAgICAgICAgICAvKiBBIGRpYWVyZXNpcyAqLwotICAgICAgY2FzZSAweGQ2OiByZXR1 cm4oMHg1Yyk7ICAgICAgICAgIC8qIE8gZGlhZXJlc2lzICovCi0gICAgICBjYXNlIDB4YzU6IHJl dHVybigweDVkKTsgICAgICAgICAgLyogQSByaW5nICovCi0gICAgICBjYXNlIDB4ZGM6IHJldHVy bigweDVlKTsgICAgICAgICAgLyogVSBkaWFlcmVzaXMgKi8KLSAgICAgIGNhc2UgMHhlOTogcmV0 dXJuKDB4NjApOyAgICAgICAgICAvKiBlIGFjdXRlICovCi0gICAgICBjYXNlIDB4ZTQ6IHJldHVy bigweDdiKTsgICAgICAgICAgLyogYSBkaWFlcmVzaXMgKi8KLSAgICAgIGNhc2UgMHhmNjogcmV0 dXJuKDB4N2MpOyAgICAgICAgICAvKiBvIGRpYWVyZXNpcyAqLwotICAgICAgY2FzZSAweGU1OiBy ZXR1cm4oMHg3ZCk7ICAgICAgICAgIC8qIGEgcmluZyAqLwotICAgICAgY2FzZSAweGZjOiByZXR1 cm4oMHg3ZSk7ICAgICAgICAgIC8qIHUgZGlhZXJlc2lzICovCi0gICAgICBkZWZhdWx0OiAgIHJl dHVybih0eF91c2FzY2lpKGMpKTsKLSAgICB9Ci19Ci0KLWludCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBGcmVuY2ggKi8KLSNpZmRlZiBDS19BTlNJQwotdHhfZnJlbmNo KFVTSE9SVCBjKQotI2Vsc2UKLXR4X2ZyZW5jaChjKSBVU0hPUlQgYzsKLSNlbmRpZiAvKiBDS19B TlNJQyAqLwotewotICAgIGlmIChjICYgMHhmZjAwKSAgICAgICAgICAgICAgICAgICAgIC8qIE91 dCBvZiByYW5nZSAqLwotICAgICAgcmV0dXJuKC0xKTsKLSAgICBzd2l0Y2goYykgewotICAgICAg Y2FzZSAweGEzOiByZXR1cm4oMHgyMyk7ICAgICAgICAgIC8qIHBvdW5kIHNpZ24gKi8KLSAgICAg IGNhc2UgMHhhNzogcmV0dXJuKDB4NWQpOyAgICAgICAgICAvKiBzZWN0aW9uIHNpZ24gKi8KLSAg ICAgIGNhc2UgMHhhODogcmV0dXJuKDB4N2UpOyAgICAgICAgICAvKiBkaWFlcmVzaXMgKi8KLSAg ICAgIGNhc2UgMHhiMDogcmV0dXJuKDB4NWIpOyAgICAgICAgICAvKiByaW5nICovCi0gICAgICBj YXNlIDB4YjU6IHJldHVybigweDYwKTsgICAgICAgICAgLyogbWljcm9uIHNpZ24gKG11KSAqLwot ICAgICAgY2FzZSAweGUwOiByZXR1cm4oMHg0MCk7ICAgICAgICAgIC8qIGEgZ3JhdmUgKi8KLSAg ICAgIGNhc2UgMHhlNzogcmV0dXJuKDB4NWMpOyAgICAgICAgICAvKiBjIGNlZGlsbGEgKi8KLSAg ICAgIGNhc2UgMHhlODogcmV0dXJuKDB4N2QpOyAgICAgICAgICAvKiBlIGdyYXZlICovCi0gICAg ICBjYXNlIDB4ZTk6IHJldHVybigweDdiKTsgICAgICAgICAgLyogZSBhY3V0ZSAqLwotICAgICAg Y2FzZSAweGY5OiByZXR1cm4oMHg3Yyk7ICAgICAgICAgIC8qIHUgZ3JhdmUgKi8KLSAgICAgIGRl ZmF1bHQ6ICAgcmV0dXJuKHR4X3VzYXNjaWkoYykpOwotICAgIH0KLX0KLQotaW50ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdlcm1hbiAqLwotI2lmZGVmIENLX0FOU0lD Ci10eF9nZXJtYW4oVVNIT1JUIGMpCi0jZWxzZQotdHhfZ2VybWFuKGMpIFVTSE9SVCBjOwotI2Vu ZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgJiAweGZmMDApICAgICAgICAgICAgICAg ICAgICAgLyogT3V0IG9mIHJhbmdlICovCi0gICAgICByZXR1cm4oLTEpOwotICAgIHN3aXRjaChj KSB7Ci0gICAgICBjYXNlIDB4YTc6IHJldHVybigweDQwKTsgICAgICAgICAgLyogc2VjdGlvbiBz aWduICovCi0gICAgICBjYXNlIDB4YzQ6IHJldHVybigweDViKTsgICAgICAgICAgLyogQSB1bWxh dXQgKi8KLSAgICAgIGNhc2UgMHhkNjogcmV0dXJuKDB4NWMpOyAgICAgICAgICAvKiBPIHVtbGF1 dCAqLwotICAgICAgY2FzZSAweGRjOiByZXR1cm4oMHg1ZCk7ICAgICAgICAgIC8qIFUgdW1sYXV0 ICovCi0gICAgICBjYXNlIDB4ZGY6IHJldHVybigweDdlKTsgICAgICAgICAgLyogZXNzLXpldCAq LwotICAgICAgY2FzZSAweGU0OiByZXR1cm4oMHg3Yik7ICAgICAgICAgIC8qIGEgdW1sYXV0ICov Ci0gICAgICBjYXNlIDB4ZjY6IHJldHVybigweDdjKTsgICAgICAgICAgLyogbyB1bWxhdXQgKi8K LSAgICAgIGNhc2UgMHhmYzogcmV0dXJuKDB4N2QpOyAgICAgICAgICAvKiB1IHVtbGF1dCovCi0g ICAgICBkZWZhdWx0OiAgIHJldHVybih0eF91c2FzY2lpKGMpKTsKLSAgICB9Ci19Ci0KLWludCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIZWJyZXctNyAqLwotI2lmZGVm IENLX0FOU0lDCi10eF9oZWJyZXc3KFVTSE9SVCBjKQotI2Vsc2UKLXR4X2hlYnJldzcoYykgVVNI T1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA8IDB4NjApICAgICAg ICAgICAgICAgICAgICAgICAvKiBBU0NJSSAqLwotICAgICAgcmV0dXJuKChDSEFSKShjICYgMHg3 ZikpOwotICAgIGVsc2UgaWYgKGMgPj0gMTIzICYmIGMgPCAxMjgpICAgICAgIC8qIEFTQ0lJICov Ci0gICAgICByZXR1cm4oKENIQVIpKGMgJiAweDdmKSk7Ci0gICAgZWxzZSBpZiAoYyA+PSAweDA1 ZDAgJiYgYyA8PSAweDA1ZWEpIC8qIEhlYnJldyAyNyBjb250aWd1b3VzIGNoYXJhY3RlcnMgKi8K LSAgICAgIHJldHVybigoQ0hBUikoKGludCljIC0gMHg1ZDAgKyA5NikpOwotICAgIGVsc2UgcmV0 dXJuKC0xKTsKLX0KLQotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IEdyZWVrIEVMT1QgOTI3ICovCi0jaWZkZWYgQ0tfQU5TSUMKLXR4X2Vsb3Q5MjcoVVNIT1JUIGMp Ci0jZWxzZQotdHhfZWxvdDkyNyhjKSBVU0hPUlQgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot ewotICAgIGlmIChjIDw9IDB4ODApIHsgICAgICAgICAgICAgICAgICAgIC8qIEFTQ0lJICovCi0g ICAgICAgIGlmIChpc2xvd2VyKGMpKSBjID0gdG91cHBlcihjKTsgLyogU2VuZCBhbGwgbGV0dGVy cyBpbiB1cHBlcmNhc2UgKi8KLSAgICAgICAgcmV0dXJuKChDSEFSKShjICYgMHg3ZikpOwotICAg IH0KLQotLyogR3JlZWsgLS0gbWFwIGFsbCBHcmVlayBjaGFyYWN0ZXJzIHRvIHVuYWNjZW50ZWQg dXBwZXJjYXNlICovCi0KLSAgICBpZiAoYyA+PSAweDAzOTEgJiYgYyA8PSAweDAzYTEpIC8qIEFs cGhhIHRocnUgUmhvIC0gdXBwZXJjYXNlICovCi0gICAgICByZXR1cm4oKENIQVIpKChpbnQpYyAt IDB4MDM5MSArIDk3KSk7Ci0gICAgZWxzZSBpZiAoYyA+PSAweDAzYTMgJiYgYyA8PSAweDAzYTkp IC8qIFNpZ21hIHRocnUgT21lZ2EgLSB1cHBlcmNhc2UgKi8KLSAgICAgIHJldHVybigoQ0hBUiko KGludCljIC0gMHgwMzkxICsgOTYpKTsKLSAgICBlbHNlIGlmIChjID49IDB4MDNiMSAmJiBjIDw9 IDB4MDNjMSkgLyogQWxwaGEgdGhydSBSaG8gLSBsb3dlcmNhc2UgKi8KLSAgICAgIHJldHVybigo Q0hBUikoKGludCljIC0gMHgwMzkxICsgOTcpKTsKLSAgICBlbHNlIGlmIChjID49IDB4MDNjMyAm JiBjIDw9IDB4MDNjOSkgLyogU2lnbWEgdGhydSBPbWVnYSAtIHVwcGVyY2FzZSAqLwotICAgICAg cmV0dXJuKChDSEFSKSgoaW50KWMgLSAweDAzOTEgKyA5NikpOwotICAgIHN3aXRjaCAoYykgewot ICAgICAgY2FzZSAweDAzYzI6IHJldHVybigoQ0hBUikxMTQpOyAgIC8qIFRlcm1pbmFsIHNpZ21h ICovCi0gICAgICBjYXNlIDB4MDM4NjogcmV0dXJuKChDSEFSKTk3KTsgICAgLyogQWxwaGEgVG9u b3MgKi8KLSAgICAgIGNhc2UgMHgwM2FjOiByZXR1cm4oKENIQVIpOTcpOyAgICAvKiBhbHBoYSBU b25vcyAqLwotICAgICAgY2FzZSAweDAzODg6IHJldHVybigoQ0hBUikxMDEpOyAgIC8qIEVwc2ls b24gVG9ub3MgKi8KLSAgICAgIGNhc2UgMHgwM2FkOiByZXR1cm4oKENIQVIpMTAxKTsgICAvKiBl cHNpbG9uIFRvbm9zICovCi0gICAgICBjYXNlIDB4MDM4OTogcmV0dXJuKChDSEFSKTEwMyk7ICAg LyogRXRhIFRvbm9zICovCi0gICAgICBjYXNlIDB4MDNhZTogcmV0dXJuKChDSEFSKTEwMyk7ICAg LyogZXRhIFRvbm9zICovCi0gICAgICBjYXNlIDB4MDM4YTogcmV0dXJuKChDSEFSKTEwNSk7ICAg LyogSW90YSBUb25vcyAqLwotICAgICAgY2FzZSAweDAzYWY6IHJldHVybigoQ0hBUikxMDUpOyAg IC8qIGlvdGEgVG9ub3MgKi8KLSAgICAgIGNhc2UgMHgwM2NhOiByZXR1cm4oKENIQVIpMTA1KTsg ICAvKiBpb3RhIERpYWx5dGlrYSAqLwotICAgICAgY2FzZSAweDAzOGM6IHJldHVybigoQ0hBUikx MTEpOyAgIC8qIE9taWNyb24gVG9ub3MgKi8KLSAgICAgIGNhc2UgMHgwM2NjOiByZXR1cm4oKENI QVIpMTExKTsgICAvKiBvbWljcm9uIFRvbm9zICovCi0gICAgICBjYXNlIDB4MDM4ZTogcmV0dXJu KChDSEFSKTExNik7ICAgLyogVXBzaWxvbiBUb25vcyAqLwotICAgICAgY2FzZSAweDAzZDM6IHJl dHVybigoQ0hBUikxMTYpOyAgIC8qIFVwc2lsb24gVG9ub3MgKi8KLSAgICAgIGNhc2UgMHgwM2Nk OiByZXR1cm4oKENIQVIpMTE2KTsgICAvKiB1cHNpbG9uIFRvbm9zICovCi0gICAgICBjYXNlIDB4 MDNjYjogcmV0dXJuKChDSEFSKTExNik7ICAgLyogdXBzaWxvbiBEaWFseXRpa2EgKi8KLSAgICAg IGNhc2UgMHgwM2IwOiByZXR1cm4oKENIQVIpMTE2KTsgICAvKiB1cHNpbG9uIERpYWx5dGlrYStU b25vcyAqLwotICAgICAgY2FzZSAweDAzOGY6IHJldHVybigoQ0hBUikxMjApOyAgIC8qIE9tZWdh IFRvbm9zICovCi0gICAgICBjYXNlIDB4MDNjZTogcmV0dXJuKChDSEFSKTEyMCk7ICAgLyogb21l Z2EgVG9ub3MgKi8KLSAgICAgIGNhc2UgMHgwMzkwOiByZXR1cm4oKENIQVIpMTA1KTsgICAvKiBp b3RhIERpYWx5dGlrYStUb25vcyAqLwotICAgICAgY2FzZSAweDAzYWE6IHJldHVybigoQ0hBUikx MDUpOyAgIC8qIElvdGEgRGlhbHl0aWthICovCi0gICAgICBjYXNlIDB4MDNhYjogcmV0dXJuKChD SEFSKTExNik7ICAgLyogVXBzaWxvbiBEaWFseXRpa2EgKi8KLSAgICAgIGNhc2UgMHgwM2Q0OiBy ZXR1cm4oKENIQVIpMTE2KTsgICAvKiBVcHNpbG9uIERpYWx5dGlrYSAqLwotICAgICAgY2FzZSAw eDAzZDA6IHJldHVybigoQ0hBUik5OCk7ICAgIC8qIEFsdGVybmF0aXZlIGJldGEgKi8KLSAgICAg IGNhc2UgMHgwM2QxOiByZXR1cm4oKENIQVIpMTA0KTsgICAvKiBPcGVuIHRoZXRhICovCi0gICAg ICBjYXNlIDB4MDNkNTogcmV0dXJuKChDSEFSKTExNyk7ICAgLyogT3BlbiBwaGkgKi8KLSAgICAg IGNhc2UgMHgwM2Q2OiByZXR1cm4oKENIQVIpMTEyKTsgICAvKiBBbHRlcm5hdGl2ZSBQaSAqLwot ICAgICAgZGVmYXVsdDogcmV0dXJuKC0xKTsKLSAgICB9Ci19Ci0KLWludCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBIdW5nYXJpYW4gKi8KLSNpZmRlZiBDS19BTlNJQwot dHhfaHVuZ2FyaWFuKFVTSE9SVCBjKQotI2Vsc2UKLXR4X2h1bmdhcmlhbihjKSBVU0hPUlQgYzsK LSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjID09IDB4MDJkZCB8fCBjID09IDB4 MjAzMykKLSAgICAgIHJldHVybigweDdlKTsgICAgICAgICAgICAgICAgICAgICAvKiBkb3VibGUg YWN1dGUgYWNjZW50ICovCi0gICAgZWxzZSBpZiAoYyAmIDB4ZmYwMCkgICAgICAgICAgICAgICAg LyogT3V0IG9mIHJhbmdlICovCi0gICAgICByZXR1cm4oLTEpOwotICAgIHN3aXRjaChjKSB7Ci0g ICAgICBjYXNlIDB4YzE6IHJldHVybigweDQwKTsgICAgICAgICAgLyogQSBhY3V0ZSAqLwotICAg ICAgY2FzZSAweGM5OiByZXR1cm4oMHg1Yik7ICAgICAgICAgIC8qIEUgYWN1dGUgKi8KLSAgICAg IGNhc2UgMHhkNjogcmV0dXJuKDB4NWMpOyAgICAgICAgICAvKiBPIHVtbGF1dCAqLwotICAgICAg Y2FzZSAweGRjOiByZXR1cm4oMHg1ZCk7ICAgICAgICAgIC8qIFUgdW1sYXV0ICovCi0gICAgICBj YXNlIDB4ZTk6IHJldHVybigweDdiKTsgICAgICAgICAgLyogZSBhY3V0ZSAqLwotICAgICAgY2Fz ZSAweGY2OiByZXR1cm4oMHg3Yyk7ICAgICAgICAgIC8qIG8gdW1sYXV0ICovCi0gICAgICBjYXNl IDB4ZmE6IHJldHVybigweDYwKTsgICAgICAgICAgLyogdSBhY3V0ZSAqLwotICAgICAgY2FzZSAw eGZjOiByZXR1cm4oMHg3ZCk7ICAgICAgICAgIC8qIHUgdW1sYXV0ICovCi0gICAgICBkZWZhdWx0 OiAgIHJldHVybih0eF91c2FzY2lpKGMpKTsKLSAgICB9Ci19Ci0KLWludCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBJY2VsYW5kaWMgKi8KLSNpZmRlZiBDS19BTlNJQwot dHhfaWNlbGFuZGljKFVTSE9SVCBjKQotI2Vsc2UKLXR4X2ljZWxhbmRpYyhjKSBVU0hPUlQgYzsK LSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjICYgMHhmZjAwKSAgICAgICAgICAg ICAgICAgICAgIC8qIE91dCBvZiByYW5nZSAqLwotICAgICAgcmV0dXJuKC0xKTsKLSAgICBzd2l0 Y2goYykgewotICAgICAgY2FzZSAweGRlOiByZXR1cm4oMHg0MCk7ICAgICAgICAgIC8qIFRob3Ju ICovCi0gICAgICBjYXNlIDB4ZDA6IHJldHVybigweDViKTsgICAgICAgICAgLyogRXRoICovCi0g ICAgICBjYXNlIDB4YzY6IHJldHVybigweDVkKTsgICAgICAgICAgLyogQUUgKi8KLSAgICAgIGNh c2UgMHhkNjogcmV0dXJuKDB4NWUpOyAgICAgICAgICAvKiBPIHVtbGF1dCAqLwotICAgICAgY2Fz ZSAweGZlOiByZXR1cm4oMHg2MCk7ICAgICAgICAgIC8qIHRob3JuICovCi0gICAgICBjYXNlIDB4 ZjA6IHJldHVybigweDdiKTsgICAgICAgICAgLyogZXRoICovCi0gICAgICBjYXNlIDB4ZTY6IHJl dHVybigweDdkKTsgICAgICAgICAgLyogYWUgKi8KLSAgICAgIGNhc2UgMHhmNjogcmV0dXJuKDB4 N2UpOyAgICAgICAgICAvKiBvIHVtbGF1dCAqLwotICAgICAgZGVmYXVsdDogICByZXR1cm4odHhf dXNhc2NpaShjKSk7Ci0gICAgfQotfQotCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogSXRhbGlhbiAqLwotI2lmZGVmIENLX0FOU0lDCi10eF9pdGFsaWFuKFVTSE9S VCBjKQotI2Vsc2UKLXR4X2l0YWxpYW4oYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMg Ki8KLXsKLSAgICBpZiAoYyAmIDB4ZmYwMCkgICAgICAgICAgICAgICAgICAgICAvKiBPdXQgb2Yg cmFuZ2UgKi8KLSAgICAgIHJldHVybigtMSk7Ci0gICAgc3dpdGNoKGMpIHsKLSAgICAgIGNhc2Ug MHhhMzogcmV0dXJuKDB4MjMpOyAgICAgICAgICAvKiBwb3VuZCBzaWduICovCi0gICAgICBjYXNl IDB4YTc6IHJldHVybigweDQwKTsgICAgICAgICAgLyogc2VjdGlvbiBzaWduICovCi0gICAgICBj YXNlIDB4YjA6IHJldHVybigweDViKTsgICAgICAgICAgLyogcmluZyAqLwotICAgICAgY2FzZSAw eGU3OiByZXR1cm4oMHg1Yyk7ICAgICAgICAgIC8qIGMgY2VkaWxsYSAqLwotICAgICAgY2FzZSAw eGU5OiByZXR1cm4oMHg1ZCk7ICAgICAgICAgIC8qIGUgYWN1dGUgKi8KLSAgICAgIGNhc2UgMHhm OTogcmV0dXJuKDB4NjApOyAgICAgICAgICAvKiB1IGdyYXZlICovCi0gICAgICBjYXNlIDB4ZTA6 IHJldHVybigweDdiKTsgICAgICAgICAgLyogYSBncmF2ZSAqLwotICAgICAgY2FzZSAweGYyOiBy ZXR1cm4oMHg3Yyk7ICAgICAgICAgIC8qIG8gZ3JhdmUgKi8KLSAgICAgIGNhc2UgMHhlODogcmV0 dXJuKDB4N2QpOyAgICAgICAgICAvKiBlIGdyYXZlICovCi0gICAgICBjYXNlIDB4ZWM6IHJldHVy bigweDdlKTsgICAgICAgICAgLyogaSBncmF2ZSAqLwotICAgICAgZGVmYXVsdDogICByZXR1cm4o dHhfdXNhc2NpaShjKSk7Ci0gICAgfQotfQotCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogSklTIDAyMDEgUm9tYW4gKi8KLSNpZmRlZiBDS19BTlNJQwotdHhfamlz MDIwMXIoVVNIT1JUIGMpCi0jZWxzZQotdHhfamlzMDIwMXIoYykgVVNIT1JUIGM7Ci0jZW5kaWYg LyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyAmJiAweGZmODApICAgICAgICAgICAgICAgICAg ICAvKiA3IGJpdHMgKi8KLSAgICAgIHJldHVybigtMSk7Ci0gICAgc3dpdGNoIChjKSB7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogTGlrZSBBU0NJSSB3aXRoICovCi0gICAgICBjYXNlIDB4MDBh NTogcmV0dXJuKDkyKTsgICAgICAgICAgLyogdHdvIGV4Y2VwdGlvbnMgKi8KLSAgICAgIGNhc2Ug MHgwMGFmOiByZXR1cm4oMTI2KTsKLSAgICAgIGNhc2UgMHgyMDNlOiByZXR1cm4oMTI2KTsKLSAg ICAgIGRlZmF1bHQ6ICAgcmV0dXJuKHR4X3VzYXNjaWkoYykpOwotICAgIH0KLX0KLQotaW50ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEpJUyAwMjAxIEthdGFrYW5hICov Ci0jaWZkZWYgQ0tfQU5TSUMKLXR4X2ppczAyMDFrKFVTSE9SVCBjKQotI2Vsc2UKLXR4X2ppczAy MDFrKGMpIFVTSE9SVCBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgPCAw eGZmNjEgfHwgYyA+IDB4ZmY5ZikKLSAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAgICAg ICAgICAvKiBPdXQgb2YgcmFuZ2UgKi8KLSAgICBlbHNlCi0gICAgICByZXR1cm4oKGludCljIC0g MHhmZWMwKTsgICAgICAgICAgLyogMHhmZjYxIC0gYTAgPSAweGZlYzAgKi8KLX0KLQotaW50ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNob3J0IEtPSSAqLwotI2lmZGVm IENLX0FOU0lDCi10eF9rb2k3KFVTSE9SVCBjKQotI2Vsc2UKLXR4X2tvaTcoYykgVVNIT1JUIGM7 Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA8IDB4NTApCi0gICAgICByZXR1 cm4oKENIQVIpKGMgJiAweDdmKSk7Ci0gICAgZWxzZSBpZiAoYyA+IDB4N2YpCi0gICAgICByZXR1 cm4oLTEpOyAgICAgICAgICAgICAgICAgICAgICAgLyogT3V0IG9mIHJhbmdlICovCi0gICAgc3dp dGNoKGMpIHsKLSAgICAgIGNhc2UgMHgwNDEwOiByZXR1cm4oKENIQVIpOTcpOwotICAgICAgY2Fz ZSAweDA0MTE6IHJldHVybigoQ0hBUik5OCk7Ci0gICAgICBjYXNlIDB4MDQxMjogcmV0dXJuKChD SEFSKTExOSk7Ci0gICAgICBjYXNlIDB4MDQxMzogcmV0dXJuKChDSEFSKTEwMyk7Ci0gICAgICBj YXNlIDB4MDQxNDogcmV0dXJuKChDSEFSKTEwMCk7Ci0gICAgICBjYXNlIDB4MDQxNTogcmV0dXJu KChDSEFSKTEwMSk7Ci0gICAgICBjYXNlIDB4MDQxNjogcmV0dXJuKChDSEFSKTExOCk7Ci0gICAg ICBjYXNlIDB4MDQxNzogcmV0dXJuKChDSEFSKTEyMik7Ci0gICAgICBjYXNlIDB4MDQxODogcmV0 dXJuKChDSEFSKTEwNSk7Ci0gICAgICBjYXNlIDB4MDQxOTogcmV0dXJuKChDSEFSKTEwNik7Ci0g ICAgICBjYXNlIDB4MDQxYTogcmV0dXJuKChDSEFSKTEwNyk7Ci0gICAgICBjYXNlIDB4MDQxYjog cmV0dXJuKChDSEFSKTEwOCk7Ci0gICAgICBjYXNlIDB4MDQxYzogcmV0dXJuKChDSEFSKTEwOSk7 Ci0gICAgICBjYXNlIDB4MDQxZDogcmV0dXJuKChDSEFSKTExMCk7Ci0gICAgICBjYXNlIDB4MDQx ZTogcmV0dXJuKChDSEFSKTExMSk7Ci0gICAgICBjYXNlIDB4MDQxZjogcmV0dXJuKChDSEFSKTEx Mik7Ci0gICAgICBjYXNlIDB4MDQyMDogcmV0dXJuKChDSEFSKTExNCk7Ci0gICAgICBjYXNlIDB4 MDQyMTogcmV0dXJuKChDSEFSKTExNSk7Ci0gICAgICBjYXNlIDB4MDQyMjogcmV0dXJuKChDSEFS KTExNik7Ci0gICAgICBjYXNlIDB4MDQyMzogcmV0dXJuKChDSEFSKTExNyk7Ci0gICAgICBjYXNl IDB4MDQyNDogcmV0dXJuKChDSEFSKTEwMik7Ci0gICAgICBjYXNlIDB4MDQyNTogcmV0dXJuKChD SEFSKTEwNCk7Ci0gICAgICBjYXNlIDB4MDQyNjogcmV0dXJuKChDSEFSKTk5KTsKLSAgICAgIGNh c2UgMHgwNDI3OiByZXR1cm4oKENIQVIpMTI2KTsKLSAgICAgIGNhc2UgMHgwNDI4OiByZXR1cm4o KENIQVIpMTIzKTsKLSAgICAgIGNhc2UgMHgwNDI5OiByZXR1cm4oKENIQVIpMTI1KTsKLSAgICAg IGNhc2UgMHgwNDJiOiByZXR1cm4oKENIQVIpMTIxKTsKLSAgICAgIGNhc2UgMHgwNDJjOiByZXR1 cm4oKENIQVIpMTIwKTsKLSAgICAgIGNhc2UgMHgwNDJkOiByZXR1cm4oKENIQVIpMTI0KTsKLSAg ICAgIGNhc2UgMHgwNDJlOiByZXR1cm4oKENIQVIpOTYpOwotICAgICAgY2FzZSAweDA0MmY6IHJl dHVybigoQ0hBUikxMTMpOwotICAgICAgZGVmYXVsdDogcmV0dXJuKC0xKTsKLSAgICB9Ci19Ci0K LWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb3J0dWd1ZXNlICov Ci0jaWZkZWYgQ0tfQU5TSUMKLXR4X3BvcnR1Z3Vlc2UoVVNIT1JUIGMpCi0jZWxzZQotdHhfcG9y dHVndWVzZShjKSBVU0hPUlQgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChj ICYgMHhmZjAwKSAgICAgICAgICAgICAgICAgICAgIC8qIE91dCBvZiByYW5nZSAqLwotICAgICAg cmV0dXJuKC0xKTsKLSAgICBzd2l0Y2goYykgewotICAgICAgY2FzZSAweGUwOiByZXR1cm4oMHhh Nyk7ICAgICAgICAgIC8qIHNlY3Rpb24gc2lnbiAqLwotICAgICAgY2FzZSAweGIwOiByZXR1cm4o MHhjMyk7ICAgICAgICAgIC8qIEEgdGlsZGUgKi8KLSAgICAgIGNhc2UgMHhlNzogcmV0dXJuKDB4 YzcpOyAgICAgICAgICAvKiBDIGNlZGlsbGEgKi8KLSAgICAgIGNhc2UgMHhhNzogcmV0dXJuKDB4 ZDUpOyAgICAgICAgICAvKiBPIHRpbGRlICovCi0gICAgICBjYXNlIDB4ZTk6IHJldHVybigweGUz KTsgICAgICAgICAgLyogYSB0aWxkZSAqLwotICAgICAgY2FzZSAweGY5OiByZXR1cm4oMHhlNyk7 ICAgICAgICAgIC8qIGMgY2VkaWxsYSAqLwotICAgICAgY2FzZSAweGU4OiByZXR1cm4oMHhmNSk7 ICAgICAgICAgIC8qIG8gdGlsZGUgKi8KLSAgICAgIGNhc2UgMHhhODogcmV0dXJuKDB4YjApOyAg ICAgICAgICAvKiByaW5nICovCi0gICAgICBkZWZhdWx0OiAgIHJldHVybih0eF91c2FzY2lpKGMp KTsKLSAgICB9Ci19Ci0KLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBTcGFuaXNoICovCi0jaWZkZWYgQ0tfQU5TSUMKLXR4X3NwYW5pc2goVVNIT1JUIGMpCi0jZWxz ZQotdHhfc3BhbmlzaChjKSBVU0hPUlQgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAg IGlmIChjICYgMHhmZjAwKSAgICAgICAgICAgICAgICAgICAgIC8qIE91dCBvZiByYW5nZSAqLwot ICAgICAgcmV0dXJuKC0xKTsKLSAgICBzd2l0Y2goYykgewotICAgICAgY2FzZSAweGEzOiByZXR1 cm4oMHgyMyk7ICAgICAgICAgIC8qIHBvdW5kIHNpZ24gKi8KLSAgICAgIGNhc2UgMHhhNzogcmV0 dXJuKDB4NDApOyAgICAgICAgICAvKiBzZWN0aW9uICovCi0gICAgICBjYXNlIDB4YTE6IHJldHVy bigweDViKTsgICAgICAgICAgLyogaW52ZXJ0ZWQgZXhjbGFtYXRpb24gKi8KLSAgICAgIGNhc2Ug MHhkMTogcmV0dXJuKDB4NWMpOyAgICAgICAgICAvKiBOIHRpbGRlICovCi0gICAgICBjYXNlIDB4 YmY6IHJldHVybigweDVkKTsgICAgICAgICAgLyogaW52ZXJ0ZWQgcXVlc3Rpb24gbWFyayAqLwot ICAgICAgY2FzZSAweGIwOiByZXR1cm4oMHg3Yik7ICAgICAgICAgIC8qIHJpbmcgKi8KLSAgICAg IGNhc2UgMHhmMTogcmV0dXJuKDB4N2MpOyAgICAgICAgICAvKiBuIHRpbGRlICovCi0gICAgICBj YXNlIDB4ZTc6IHJldHVybigweDdkKTsgICAgICAgICAgLyogYyBjZWRpbGxhICovCi0gICAgICBk ZWZhdWx0OiAgIHJldHVybih0eF91c2FzY2lpKGMpKTsKLSAgICB9Ci19Ci0KLWludCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTd2VkaXNoICovCi0jaWZkZWYgQ0tfQU5T SUMKLXR4X3N3ZWRpc2goVVNIT1JUIGMpCi0jZWxzZQotdHhfc3dlZGlzaChjKSBVU0hPUlQgYzsK LSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjICYgMHhmZjAwKSAgICAgICAgICAg ICAgICAgICAgIC8qIE91dCBvZiByYW5nZSAqLwotICAgICAgcmV0dXJuKC0xKTsKLSAgICBzd2l0 Y2goYykgewotICAgICAgY2FzZSAweGM5OiByZXR1cm4oMHg0MCk7ICAgICAgICAgIC8qIEUgYWN1 dGUgKi8KLSAgICAgIGNhc2UgMHhjNDogcmV0dXJuKDB4NWIpOyAgICAgICAgICAvKiBBIHVtbGF1 dCovCi0gICAgICBjYXNlIDB4ZDY6IHJldHVybigweDVjKTsgICAgICAgICAgLyogTyB1bWxhdXQg Ki8KLSAgICAgIGNhc2UgMHhjNTogcmV0dXJuKDB4NWQpOyAgICAgICAgICAvKiBBIHJpbmcgKi8K LSAgICAgIGNhc2UgMHhkYzogcmV0dXJuKDB4NWUpOyAgICAgICAgICAvKiBVIHVtbGF1dCAqLwot ICAgICAgY2FzZSAweGU5OiByZXR1cm4oMHg2MCk7ICAgICAgICAgIC8qIGUgYWN1dGUgKi8KLSAg ICAgIGNhc2UgMHhlNDogcmV0dXJuKDB4N2IpOyAgICAgICAgICAvKiBhIHVtbGF1dCAqLwotICAg ICAgY2FzZSAweGY2OiByZXR1cm4oMHg3Yyk7ICAgICAgICAgIC8qIG8gdW1sYXV0ICovCi0gICAg ICBjYXNlIDB4ZTU6IHJldHVybigweDdkKTsgICAgICAgICAgLyogYSByaW5nICovCi0gICAgICBj YXNlIDB4ZmM6IHJldHVybigweDdlKTsgICAgICAgICAgLyogdSB1bWxhdXQgKi8KLSAgICAgIGRl ZmF1bHQ6ICAgcmV0dXJuKHR4X3VzYXNjaWkoYykpOwotICAgIH0KLX0KLQotCi1pbnQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3dpc3MgTlJDICovCi0jaWZkZWYgQ0tf QU5TSUMKLXR4X3N3aXNzKFVTSE9SVCBjKQotI2Vsc2UKLXR4X3N3aXNzKGMpIFVTSE9SVCBjOwot I2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgJiAweGZmMDApICAgICAgICAgICAg ICAgICAgICAgLyogT3V0IG9mIHJhbmdlICovCi0gICAgICByZXR1cm4oLTEpOwotICAgIHN3aXRj aChjKSB7Ci0gICAgICBjYXNlIDB4Zjk6IHJldHVybigweDIzKTsgICAgICAgICAgLyogdSBncmF2 ZSAqLwotICAgICAgY2FzZSAweGUwOiByZXR1cm4oMHg0MCk7ICAgICAgICAgIC8qIGEgZ3JhdmUg Ki8KLSAgICAgIGNhc2UgMHhlOTogcmV0dXJuKDB4NWIpOyAgICAgICAgICAvKiBlIGFjdXRlICov Ci0gICAgICBjYXNlIDB4ZTc6IHJldHVybigweDVjKTsgICAgICAgICAgLyogYyBjZWRpbGxhICov Ci0gICAgICBjYXNlIDB4ZWE6IHJldHVybigweDVkKTsgICAgICAgICAgLyogZSBjaXJjdW1mbGV4 ICovCi0gICAgICBjYXNlIDB4ZWU6IHJldHVybigweDVlKTsgICAgICAgICAgLyogaSBjaXJjdW1m bGV4ICovCi0gICAgICBjYXNlIDB4ZTg6IHJldHVybigweDVmKTsgICAgICAgICAgLyogZSBncmF2 ZSAqLwotICAgICAgY2FzZSAweGY0OiByZXR1cm4oMHg2MCk7ICAgICAgICAgIC8qIG8gY2lyY3Vt ZmxleCAqLwotICAgICAgY2FzZSAweGU0OiByZXR1cm4oMHg3Yik7ICAgICAgICAgIC8qIGEgdW1s YXV0ICovCi0gICAgICBjYXNlIDB4ZjY6IHJldHVybigweDdjKTsgICAgICAgICAgLyogbyB1bWxh dXQgKi8KLSAgICAgIGNhc2UgMHhmYzogcmV0dXJuKDB4N2QpOyAgICAgICAgICAvKiB1IHVtbGF1 dCAqLwotICAgICAgY2FzZSAweGZiOiByZXR1cm4oMHg3ZSk7ICAgICAgICAgIC8qIHUgY2lyY3Vt ZmxleCAqLwotICAgICAgZGVmYXVsdDogICByZXR1cm4odHhfdXNhc2NpaShjKSk7Ci0gICAgfQot fQotCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRHlhZGljIEFQ TCAqLwotI2lmZGVmIENLX0FOU0lDCi10eF9hcGwyKFVTSE9SVCBjKQotI2Vsc2UKLXR4X2FwbDIo YykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA+PSAweDAw NDEgJiYgYyA8PSAweDAwNWEpICAgICAvKiBMZXR0ZXJzICovCi0gICAgICByZXR1cm4oYyAtIDB4 YTIpOwotICAgIHN3aXRjaCAoYykgewotICAgICAgY2FzZSAweDAwYTA6IHJldHVybigoQ0hBUikw eGEwKTsKLSAgICAgIGNhc2UgMHgwMGEyOiByZXR1cm4oKENIQVIpMHhhNCk7Ci0gICAgICBjYXNl IDB4MDBhMzogcmV0dXJuKChDSEFSKTB4ZDQpOwotICAgICAgY2FzZSAweDAwYTg6IHJldHVybigo Q0hBUikweGRjKTsKLSAgICAgIGNhc2UgMHgwMGFmOiByZXR1cm4oKENIQVIpMHhkYSk7Ci0gICAg ICBjYXNlIDB4MDBkNzogcmV0dXJuKChDSEFSKTB4YTEpOwotICAgICAgY2FzZSAweDAwZjc6IHJl dHVybigoQ0hBUikweGFmKTsKLSAgICAgIGNhc2UgMHgyMTkwOiByZXR1cm4oKENIQVIpMHhiYik7 Ci0gICAgICBjYXNlIDB4MjE5MTogcmV0dXJuKChDSEFSKTB4ZmUpOwotICAgICAgY2FzZSAweDIx OTI6IHJldHVybigoQ0hBUikweGRlKTsKLSAgICAgIGNhc2UgMHgyMTkzOiByZXR1cm4oKENIQVIp MHhmZik7Ci0gICAgICBjYXNlIDB4MjIwNjogcmV0dXJuKChDSEFSKTB4YWUpOwotICAgICAgY2Fz ZSAweDIyMDc6IHJldHVybigoQ0hBUikweGZkKTsKLSAgICAgIGNhc2UgMHgyMjBhOiByZXR1cm4o KENIQVIpMHhiNSk7Ci0gICAgICBjYXNlIDB4MjIxODogcmV0dXJuKChDSEFSKTB4YmMpOwotICAg ICAgY2FzZSAweDIyMjg6IHJldHVybigoQ0hBUikweGRmKTsKLSAgICAgIGNhc2UgMHgyMjI5OiBy ZXR1cm4oKENIQVIpMHhkMSk7Ci0gICAgICBjYXNlIDB4MjIyYTogcmV0dXJuKChDSEFSKTB4ZDIp OwotICAgICAgY2FzZSAweDIyNjA6IHJldHVybigoQ0hBUikweGIwKTsKLSAgICAgIGNhc2UgMHgy MjYxOiByZXR1cm4oKENIQVIpMHhiNik7Ci0gICAgICBjYXNlIDB4MjI2MjogcmV0dXJuKChDSEFS KTB4Y2QpOwotICAgICAgY2FzZSAweDIyNjQ6IHJldHVybigoQ0hBUikweGI4KTsKLSAgICAgIGNh c2UgMHgyMjY1OiByZXR1cm4oKENIQVIpMHhiNyk7Ci0gICAgICBjYXNlIDB4MjI4MjogcmV0dXJu KChDSEFSKTB4ZTApOwotICAgICAgY2FzZSAweDIyODM6IHJldHVybigoQ0hBUikweGUxKTsKLSAg ICAgIGNhc2UgMHgyMjk2OiByZXR1cm4oKENIQVIpMHhkNik7Ci0gICAgICBjYXNlIDB4MjJhMjog cmV0dXJuKChDSEFSKTB4ZDcpOwotICAgICAgY2FzZSAweDIyYTM6IHJldHVybigoQ0hBUikweGQ4 KTsKLSAgICAgIGNhc2UgMHgyMmE0OiByZXR1cm4oKENIQVIpMHhiYSk7Ci0gICAgICBjYXNlIDB4 MjJhNTogcmV0dXJuKChDSEFSKTB4YjkpOwotICAgICAgY2FzZSAweDIyYzQ6IHJldHVybigoQ0hB UikweGIxKTsKLSAgICAgIGNhc2UgMHgyMzA4OiByZXR1cm4oKENIQVIpMHhjZik7Ci0gICAgICBj YXNlIDB4MjMwYTogcmV0dXJuKChDSEFSKTB4Y2UpOwotICAgICAgY2FzZSAweDIzMzc6IHJldHVy bigoQ0hBUikweGQ5KTsKLSAgICAgIGNhc2UgMHgyMzM5OiByZXR1cm4oKENIQVIpMHhjYSk7Ci0g ICAgICBjYXNlIDB4MjMzZDogcmV0dXJuKChDSEFSKTB4ZDUpOwotICAgICAgY2FzZSAweDIzM2Y6 IHJldHVybigoQ0hBUikweGJlKTsKLSAgICAgIGNhc2UgMHgyMzQwOiByZXR1cm4oKENIQVIpMHhi Zik7Ci0gICAgICBjYXNlIDB4MjM0OTogcmV0dXJuKChDSEFSKTB4ZDApOwotICAgICAgY2FzZSAw eDIzNGI6IHJldHVybigoQ0hBUikweGMyKTsKLSAgICAgIGNhc2UgMHgyMzRlOiByZXR1cm4oKENI QVIpMHhjMCk7Ci0gICAgICBjYXNlIDB4MjM1MjogcmV0dXJuKChDSEFSKTB4YzMpOwotICAgICAg Y2FzZSAweDIzNTU6IHJldHVybigoQ0hBUikweGMxKTsKLSAgICAgIGNhc2UgMHgyMzU5OiByZXR1 cm4oKENIQVIpMHhlMik7Ci0gICAgICBjYXNlIDB4MjM1ZDogcmV0dXJuKChDSEFSKTB4YmQpOwot ICAgICAgY2FzZSAweDIzNWU6IHJldHVybigoQ0hBUikweGM5KTsKLSAgICAgIGNhc2UgMHgyMzVm OiByZXR1cm4oKENIQVIpMHhjNyk7Ci0gICAgICBjYXNlIDB4MjM2ODogcmV0dXJuKChDSEFSKTB4 YzYpOwotICAgICAgY2FzZSAweDIzNmE6IHJldHVybigoQ0hBUikweGNjKTsKLSAgICAgIGNhc2Ug MHgyMzZiOiByZXR1cm4oKENIQVIpMHhjYik7Ci0gICAgICBjYXNlIDB4MjM2YzogcmV0dXJuKChD SEFSKTB4ZDMpOwotICAgICAgY2FzZSAweDIzNzE6IHJldHVybigoQ0hBUikweGM1KTsKLSAgICAg IGNhc2UgMHgyMzcyOiByZXR1cm4oKENIQVIpMHhjNCk7Ci0gICAgICBjYXNlIDB4MjM3MzogcmV0 dXJuKChDSEFSKTB4ZGIpOwotICAgICAgY2FzZSAweDIzNzQ6IHJldHVybigoQ0hBUikweGIzKTsK LSAgICAgIGNhc2UgMHgyMzc1OiByZXR1cm4oKENIQVIpMHhiMik7Ci0gICAgICBjYXNlIDB4MjM3 YTogcmV0dXJuKChDSEFSKTB4YjQpOwotICAgICAgY2FzZSAweDI1MDA6IHJldHVybigoQ0hBUikw eGFhKTsKLSAgICAgIGNhc2UgMHgyNTAyOiByZXR1cm4oKENIQVIpMHhhMik7Ci0gICAgICBjYXNl IDB4MjUwYzogcmV0dXJuKChDSEFSKTB4YWQpOwotICAgICAgY2FzZSAweDI1MTA6IHJldHVybigo Q0hBUikweGE1KTsKLSAgICAgIGNhc2UgMHgyNTE0OiByZXR1cm4oKENIQVIpMHhhNik7Ci0gICAg ICBjYXNlIDB4MjUxODogcmV0dXJuKChDSEFSKTB4YWMpOwotICAgICAgY2FzZSAweDI1MWM6IHJl dHVybigoQ0hBUikweGE5KTsKLSAgICAgIGNhc2UgMHgyNTI0OiByZXR1cm4oKENIQVIpMHhhMyk7 Ci0gICAgICBjYXNlIDB4MjUyYzogcmV0dXJuKChDSEFSKTB4YTgpOwotICAgICAgY2FzZSAweDI1 MzQ6IHJldHVybigoQ0hBUikweGE3KTsKLSAgICAgIGNhc2UgMHgyNTNjOiByZXR1cm4oKENIQVIp MHhhYik7Ci0gICAgICBjYXNlIDB4MjVhZjogcmV0dXJuKChDSEFSKTB4YzgpOwotICAgICAgY2Fz ZSAweDI1Y2I6IHJldHVybigoQ0hBUikweGRkKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlm IChjIDwgMHhhMCkKLSAgICAgICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7Ci0gICAgICAg IHJldHVybih0eF9wdW5jKGMpKTsKLSAgICB9Ci19Ci0KLWludCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBBUEwtUGx1cyAqLwotI2lmZGVmIENLX0FOU0lDCi10eF9hcGwz KFVTSE9SVCBjKQotI2Vsc2UKLXR4X2FwbDMoYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5T SUMgKi8KLXsKLSAgICBzd2l0Y2ggKGMpIHsKLSAgICAgIGNhc2UgMHgwMGEwOiByZXR1cm4oKENI QVIpMHhhMCk7Ci0gICAgICBjYXNlIDB4MDBhMTogcmV0dXJuKChDSEFSKTB4YTEpOwotICAgICAg Y2FzZSAweDAwYTI6IHJldHVybigoQ0hBUikweGEyKTsKLSAgICAgIGNhc2UgMHgwMGEzOiByZXR1 cm4oKENIQVIpMHhhMyk7Ci0gICAgICBjYXNlIDB4MDBhNTogcmV0dXJuKChDSEFSKTB4YTUpOwot ICAgICAgY2FzZSAweDAwYTY6IHJldHVybigoQ0hBUikweGE2KTsKLSAgICAgIGNhc2UgMHgwMGE3 OiByZXR1cm4oKENIQVIpMHhhNyk7Ci0gICAgICBjYXNlIDB4MDBhODogcmV0dXJuKChDSEFSKTB4 YTgpOwotICAgICAgY2FzZSAweDAwYWI6IHJldHVybigoQ0hBUikweGFiKTsKLSAgICAgIGNhc2Ug MHgwMGFmOiByZXR1cm4oKENIQVIpMHhhZik7Ci0gICAgICBjYXNlIDB4MDBiNjogcmV0dXJuKChD SEFSKTB4YjYpOwotICAgICAgY2FzZSAweDAwYjc6IHJldHVybigoQ0hBUikweGI3KTsKLSAgICAg IGNhc2UgMHgwMGJiOiByZXR1cm4oKENIQVIpMHhiYik7Ci0gICAgICBjYXNlIDB4MDBiZjogcmV0 dXJuKChDSEFSKTB4YmYpOwotICAgICAgY2FzZSAweDAwYzA6IHJldHVybigoQ0hBUikweGMwKTsK LSAgICAgIGNhc2UgMHgwMGMxOiByZXR1cm4oKENIQVIpMHhjMSk7Ci0gICAgICBjYXNlIDB4MDBj MjogcmV0dXJuKChDSEFSKTB4YzIpOwotICAgICAgY2FzZSAweDAwYzM6IHJldHVybigoQ0hBUikw eGMzKTsKLSAgICAgIGNhc2UgMHgwMGM0OiByZXR1cm4oKENIQVIpMHhjNCk7Ci0gICAgICBjYXNl IDB4MDBjNTogcmV0dXJuKChDSEFSKTB4YzUpOwotICAgICAgY2FzZSAweDAwYzY6IHJldHVybigo Q0hBUikweGM2KTsKLSAgICAgIGNhc2UgMHgwMGM3OiByZXR1cm4oKENIQVIpMHhjNyk7Ci0gICAg ICBjYXNlIDB4MDBjODogcmV0dXJuKChDSEFSKTB4YzgpOwotICAgICAgY2FzZSAweDAwYzk6IHJl dHVybigoQ0hBUikweGM5KTsKLSAgICAgIGNhc2UgMHgwMGNhOiByZXR1cm4oKENIQVIpMHhjYSk7 Ci0gICAgICBjYXNlIDB4MDBjYjogcmV0dXJuKChDSEFSKTB4Y2IpOwotICAgICAgY2FzZSAweDAw Y2M6IHJldHVybigoQ0hBUikweGNjKTsKLSAgICAgIGNhc2UgMHgwMGNkOiByZXR1cm4oKENIQVIp MHhjZCk7Ci0gICAgICBjYXNlIDB4MDBjZTogcmV0dXJuKChDSEFSKTB4Y2UpOwotICAgICAgY2Fz ZSAweDAwY2Y6IHJldHVybigoQ0hBUikweGNmKTsKLSAgICAgIGNhc2UgMHgwMGQxOiByZXR1cm4o KENIQVIpMHhkMSk7Ci0gICAgICBjYXNlIDB4MDBkMjogcmV0dXJuKChDSEFSKTB4ZDIpOwotICAg ICAgY2FzZSAweDAwZDM6IHJldHVybigoQ0hBUikweGQzKTsKLSAgICAgIGNhc2UgMHgwMGQ0OiBy ZXR1cm4oKENIQVIpMHhkNCk7Ci0gICAgICBjYXNlIDB4MDBkNTogcmV0dXJuKChDSEFSKTB4ZDUp OwotICAgICAgY2FzZSAweDAwZDY6IHJldHVybigoQ0hBUikweGQ2KTsKLSAgICAgIGNhc2UgMHgw MGQ3OiByZXR1cm4oKENIQVIpMHhkNyk7Ci0gICAgICBjYXNlIDB4MDBkODogcmV0dXJuKChDSEFS KTB4ZDgpOwotICAgICAgY2FzZSAweDAwZDk6IHJldHVybigoQ0hBUikweGQ5KTsKLSAgICAgIGNh c2UgMHgwMGRhOiByZXR1cm4oKENIQVIpMHhkYSk7Ci0gICAgICBjYXNlIDB4MDBkYjogcmV0dXJu KChDSEFSKTB4ZGIpOwotICAgICAgY2FzZSAweDAwZGM6IHJldHVybigoQ0hBUikweGRjKTsKLSAg ICAgIGNhc2UgMHgwMGRkOiByZXR1cm4oKENIQVIpMHhkZCk7Ci0gICAgICBjYXNlIDB4MDBkZjog cmV0dXJuKChDSEFSKTB4ZGYpOwotICAgICAgY2FzZSAweDAwZTA6IHJldHVybigoQ0hBUikweGUw KTsKLSAgICAgIGNhc2UgMHgwMGUxOiByZXR1cm4oKENIQVIpMHhlMSk7Ci0gICAgICBjYXNlIDB4 MDBlMjogcmV0dXJuKChDSEFSKTB4ZTIpOwotICAgICAgY2FzZSAweDAwZTM6IHJldHVybigoQ0hB UikweGUzKTsKLSAgICAgIGNhc2UgMHgwMGU0OiByZXR1cm4oKENIQVIpMHhlNCk7Ci0gICAgICBj YXNlIDB4MDBlNTogcmV0dXJuKChDSEFSKTB4ZTUpOwotICAgICAgY2FzZSAweDAwZTY6IHJldHVy bigoQ0hBUikweGU2KTsKLSAgICAgIGNhc2UgMHgwMGU3OiByZXR1cm4oKENIQVIpMHhlNyk7Ci0g ICAgICBjYXNlIDB4MDBlODogcmV0dXJuKChDSEFSKTB4ZTgpOwotICAgICAgY2FzZSAweDAwZTk6 IHJldHVybigoQ0hBUikweGU5KTsKLSAgICAgIGNhc2UgMHgwMGVhOiByZXR1cm4oKENIQVIpMHhl YSk7Ci0gICAgICBjYXNlIDB4MDBlYjogcmV0dXJuKChDSEFSKTB4ZWIpOwotICAgICAgY2FzZSAw eDAwZWM6IHJldHVybigoQ0hBUikweGVjKTsKLSAgICAgIGNhc2UgMHgwMGVkOiByZXR1cm4oKENI QVIpMHhlZCk7Ci0gICAgICBjYXNlIDB4MDBlZTogcmV0dXJuKChDSEFSKTB4ZWUpOwotICAgICAg Y2FzZSAweDAwZWY6IHJldHVybigoQ0hBUikweGVmKTsKLSAgICAgIGNhc2UgMHgwMGYxOiByZXR1 cm4oKENIQVIpMHhmMSk7Ci0gICAgICBjYXNlIDB4MDBmMjogcmV0dXJuKChDSEFSKTB4ZjIpOwot ICAgICAgY2FzZSAweDAwZjM6IHJldHVybigoQ0hBUikweGYzKTsKLSAgICAgIGNhc2UgMHgwMGY0 OiByZXR1cm4oKENIQVIpMHhmNCk7Ci0gICAgICBjYXNlIDB4MDBmNTogcmV0dXJuKChDSEFSKTB4 ZjUpOwotICAgICAgY2FzZSAweDAwZjY6IHJldHVybigoQ0hBUikweGY2KTsKLSAgICAgIGNhc2Ug MHgwMGY3OiByZXR1cm4oKENIQVIpMHhmNyk7Ci0gICAgICBjYXNlIDB4MDBmOTogcmV0dXJuKChD SEFSKTB4ZjkpOwotICAgICAgY2FzZSAweDAwZmE6IHJldHVybigoQ0hBUikweGZhKTsKLSAgICAg IGNhc2UgMHgwMGZiOiByZXR1cm4oKENIQVIpMHhmYik7Ci0gICAgICBjYXNlIDB4MDBmYzogcmV0 dXJuKChDSEFSKTB4ZmMpOwotICAgICAgY2FzZSAweDAwZmQ6IHJldHVybigoQ0hBUikweGZkKTsK LSAgICAgIGNhc2UgMHgwMGZmOiByZXR1cm4oKENIQVIpMHhmZik7Ci0gICAgICBjYXNlIDB4MjBh YzogcmV0dXJuKChDSEFSKTB4ODApOwotICAgICAgY2FzZSAweDIxOTA6IHJldHVybigoQ0hBUikw eDg0KTsKLSAgICAgIGNhc2UgMHgyMTkxOiByZXR1cm4oKENIQVIpMHg4Nik7Ci0gICAgICBjYXNl IDB4MjE5MjogcmV0dXJuKChDSEFSKTB4ODUpOwotICAgICAgY2FzZSAweDIxOTM6IHJldHVybigo Q0hBUikweDg3KTsKLSAgICAgIGNhc2UgMHgyMjA1OiByZXR1cm4oKENIQVIpMHhmOCk7Ci0gICAg ICBjYXNlIDB4MjIwNjogcmV0dXJuKChDSEFSKTB4OTEpOwotICAgICAgY2FzZSAweDIyMDc6IHJl dHVybigoQ0hBUikweDkyKTsKLSAgICAgIGNhc2UgMHgyMjBhOiByZXR1cm4oKENIQVIpMHhiOSk7 Ci0gICAgICBjYXNlIDB4MjIxODogcmV0dXJuKChDSEFSKTB4YjApOwotICAgICAgY2FzZSAweDIy Mjg6IHJldHVybigoQ0hBUikweDlmKTsKLSAgICAgIGNhc2UgMHgyMjI5OiByZXR1cm4oKENIQVIp MHg5ZCk7Ci0gICAgICBjYXNlIDB4MjIyYTogcmV0dXJuKChDSEFSKTB4OWUpOwotICAgICAgY2Fz ZSAweDIyNjA6IHJldHVybigoQ0hBUikweGFjKTsKLSAgICAgIGNhc2UgMHgyMjYxOiByZXR1cm4o KENIQVIpMHhhZCk7Ci0gICAgICBjYXNlIDB4MjI2NDogcmV0dXJuKChDSEFSKTB4ODgpOwotICAg ICAgY2FzZSAweDIyNjU6IHJldHVybigoQ0hBUikweDg5KTsKLSAgICAgIGNhc2UgMHgyMjgyOiBy ZXR1cm4oKENIQVIpMHg5Yik7Ci0gICAgICBjYXNlIDB4MjI4MzogcmV0dXJuKChDSEFSKTB4OWMp OwotICAgICAgY2FzZSAweDIyOTY6IHJldHVybigoQ0hBUikweGI0KTsKLSAgICAgIGNhc2UgMHgy MmEyOiByZXR1cm4oKENIQVIpMHhhNCk7Ci0gICAgICBjYXNlIDB4MjJhMzogcmV0dXJuKChDSEFS KTB4ODEpOwotICAgICAgY2FzZSAweDIyYTQ6IHJldHVybigoQ0hBUikweDgyKTsKLSAgICAgIGNh c2UgMHgyMmE1OiByZXR1cm4oKENIQVIpMHg4Myk7Ci0gICAgICBjYXNlIDB4MjJjNDogcmV0dXJu KChDSEFSKTB4YWEpOwotICAgICAgY2FzZSAweDIzMDg6IHJldHVybigoQ0hBUikweDk3KTsKLSAg ICAgIGNhc2UgMHgyMzBhOiByZXR1cm4oKENIQVIpMHg5OCk7Ci0gICAgICBjYXNlIDB4MjMzNzog cmV0dXJuKChDSEFSKTB4ZGUpOwotICAgICAgY2FzZSAweDIzMzk6IHJldHVybigoQ0hBUikweDhl KTsKLSAgICAgIGNhc2UgMHgyMzNkOiByZXR1cm4oKENIQVIpMHhiMik7Ci0gICAgICBjYXNlIDB4 MjMzZjogcmV0dXJuKChDSEFSKTB4OWEpOwotICAgICAgY2FzZSAweDIzNDA6IHJldHVybigoQ0hB UikweDk5KTsKLSAgICAgIGNhc2UgMHgyMzQ5OiByZXR1cm4oKENIQVIpMHhiMyk7Ci0gICAgICBj YXNlIDB4MjM0YjogcmV0dXJuKChDSEFSKTB4OTMpOwotICAgICAgY2FzZSAweDIzNGU6IHJldHVy bigoQ0hBUikweDk2KTsKLSAgICAgIGNhc2UgMHgyMzUyOiByZXR1cm4oKENIQVIpMHg5NCk7Ci0g ICAgICBjYXNlIDB4MjM1NTogcmV0dXJuKChDSEFSKTB4OTUpOwotICAgICAgY2FzZSAweDIzNTk6 IHJldHVybigoQ0hBUikweDhmKTsKLSAgICAgIGNhc2UgMHgyMzVkOiByZXR1cm4oKENIQVIpMHhh OSk7Ci0gICAgICBjYXNlIDB4MjM1ZTogcmV0dXJuKChDSEFSKTB4OGQpOwotICAgICAgY2FzZSAw eDIzNWY6IHJldHVybigoQ0hBUikweGI1KTsKLSAgICAgIGNhc2UgMHgyMzY0OiByZXR1cm4oKENI QVIpMHhmMCk7Ci0gICAgICBjYXNlIDB4MjM2ODogcmV0dXJuKChDSEFSKTB4ZmUpOwotICAgICAg Y2FzZSAweDIzNmE6IHJldHVybigoQ0hBUikweGFlKTsKLSAgICAgIGNhc2UgMHgyMzZiOiByZXR1 cm4oKENIQVIpMHg5MCk7Ci0gICAgICBjYXNlIDB4MjM2YzogcmV0dXJuKChDSEFSKTB4ZDApOwot ICAgICAgY2FzZSAweDIzNzE6IHJldHVybigoQ0hBUikweDhiKTsKLSAgICAgIGNhc2UgMHgyMzcy OiByZXR1cm4oKENIQVIpMHg4YSk7Ci0gICAgICBjYXNlIDB4MjM3MzogcmV0dXJuKChDSEFSKTB4 YmMpOwotICAgICAgY2FzZSAweDIzNzQ6IHJldHVybigoQ0hBUikweGJkKTsKLSAgICAgIGNhc2Ug MHgyMzc1OiByZXR1cm4oKENIQVIpMHhiZSk7Ci0gICAgICBjYXNlIDB4MjM3NzogcmV0dXJuKChD SEFSKTB4YmEpOwotICAgICAgY2FzZSAweDIzN2E6IHJldHVybigoQ0hBUikweGI4KTsKLSAgICAg IGNhc2UgMHgyNWFmOiByZXR1cm4oKENIQVIpMHg4Yyk7Ci0gICAgICBjYXNlIDB4MjVjYjogcmV0 dXJuKChDSEFSKTB4YjEpOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuKHR4X3B1bmMo YykpOwotICAgIH0KLX0KLQotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIElCTSBBUEwyICovCi0jaWZkZWYgQ0tfQU5TSUMKLXR4X2FwbDQoVVNIT1JUIGMpCi0jZWxz ZQotdHhfYXBsNChjKSBVU0hPUlQgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIHN3 aXRjaCAoYykgewotICAgICAgY2FzZSAweDAwYTA6IHJldHVybigoQ0hBUikweGZmKTsKLSAgICAg IGNhc2UgMHgwMGExOiByZXR1cm4oKENIQVIpMHhhZCk7Ci0gICAgICBjYXNlIDB4MDBhMzogcmV0 dXJuKChDSEFSKTB4OWMpOwotICAgICAgY2FzZSAweDAwYTY6IHJldHVybigoQ0hBUikweGRkKTsK LSAgICAgIGNhc2UgMHgwMGE4OiByZXR1cm4oKENIQVIpMHhmZSk7Ci0gICAgICBjYXNlIDB4MDBh YTogcmV0dXJuKChDSEFSKTB4YTYpOwotICAgICAgY2FzZSAweDAwYWM6IHJldHVybigoQ0hBUikw eGFhKTsKLSAgICAgIGNhc2UgMHgwMGFmOiByZXR1cm4oKENIQVIpMHhmZCk7Ci0gICAgICBjYXNl IDB4MDBiYTogcmV0dXJuKChDSEFSKTB4YTcpOwotICAgICAgY2FzZSAweDAwYmY6IHJldHVybigo Q0hBUikweGE4KTsKLSAgICAgIGNhc2UgMHgwMGM0OiByZXR1cm4oKENIQVIpMHg4ZSk7Ci0gICAg ICBjYXNlIDB4MDBjNTogcmV0dXJuKChDSEFSKTB4ZWUpOyAgLyogYW5kIDB4OGYgKi8KLSAgICAg IGNhc2UgMHgwMGM3OiByZXR1cm4oKENIQVIpMHg4MCk7Ci0gICAgICBjYXNlIDB4MDBjYzogcmV0 dXJuKChDSEFSKTB4ZGUpOwotICAgICAgY2FzZSAweDAwZDE6IHJldHVybigoQ0hBUikweGE1KTsK LSAgICAgIGNhc2UgMHgwMGQ2OiByZXR1cm4oKENIQVIpMHg5OSk7Ci0gICAgICBjYXNlIDB4MDBk NzogcmV0dXJuKChDSEFSKTB4ZjUpOwotICAgICAgY2FzZSAweDAwZGM6IHJldHVybigoQ0hBUikw eDlhKTsKLSAgICAgIGNhc2UgMHgwMGRmOiByZXR1cm4oKENIQVIpMHhlMSk7Ci0gICAgICBjYXNl IDB4MDBlMDogcmV0dXJuKChDSEFSKTB4ODUpOwotICAgICAgY2FzZSAweDAwZTE6IHJldHVybigo Q0hBUikweGEwKTsKLSAgICAgIGNhc2UgMHgwMGUyOiByZXR1cm4oKENIQVIpMHg4Myk7Ci0gICAg ICBjYXNlIDB4MDBlNDogcmV0dXJuKChDSEFSKTB4ODQpOwotICAgICAgY2FzZSAweDAwZTU6IHJl dHVybigoQ0hBUikweDg2KTsKLSAgICAgIGNhc2UgMHgwMGU3OiByZXR1cm4oKENIQVIpMHg4Nyk7 Ci0gICAgICBjYXNlIDB4MDBlODogcmV0dXJuKChDSEFSKTB4OGEpOwotICAgICAgY2FzZSAweDAw ZTk6IHJldHVybigoQ0hBUikweDgyKTsKLSAgICAgIGNhc2UgMHgwMGVhOiByZXR1cm4oKENIQVIp MHg4OCk7Ci0gICAgICBjYXNlIDB4MDBlYjogcmV0dXJuKChDSEFSKTB4ODkpOwotICAgICAgY2Fz ZSAweDAwZWM6IHJldHVybigoQ0hBUikweDhkKTsKLSAgICAgIGNhc2UgMHgwMGVkOiByZXR1cm4o KENIQVIpMHhhMSk7Ci0gICAgICBjYXNlIDB4MDBlZTogcmV0dXJuKChDSEFSKTB4OGMpOwotICAg ICAgY2FzZSAweDAwZWY6IHJldHVybigoQ0hBUikweDhiKTsKLSAgICAgIGNhc2UgMHgwMGYxOiBy ZXR1cm4oKENIQVIpMHhhNCk7Ci0gICAgICBjYXNlIDB4MDBmMjogcmV0dXJuKChDSEFSKTB4OTUp OwotICAgICAgY2FzZSAweDAwZjM6IHJldHVybigoQ0hBUikweGEyKTsKLSAgICAgIGNhc2UgMHgw MGY0OiByZXR1cm4oKENIQVIpMHg5Myk7Ci0gICAgICBjYXNlIDB4MDBmNjogcmV0dXJuKChDSEFS KTB4OTQpOwotICAgICAgY2FzZSAweDAwZjc6IHJldHVybigoQ0hBUikweGY2KTsKLSAgICAgIGNh c2UgMHgwMGY4OiByZXR1cm4oKENIQVIpMHg5Yik7Ci0gICAgICBjYXNlIDB4MDBmOTogcmV0dXJu KChDSEFSKTB4OTcpOwotICAgICAgY2FzZSAweDAwZmE6IHJldHVybigoQ0hBUikweGEzKTsKLSAg ICAgIGNhc2UgMHgwMGZiOiByZXR1cm4oKENIQVIpMHg5Nik7Ci0gICAgICBjYXNlIDB4MDBmYzog cmV0dXJuKChDSEFSKTB4ODEpOwotICAgICAgY2FzZSAweDIxOTA6IHJldHVybigoQ0hBUikweDll KTsKLSAgICAgIGNhc2UgMHgyMTkxOiByZXR1cm4oKENIQVIpMHhjNik7Ci0gICAgICBjYXNlIDB4 MjE5MjogcmV0dXJuKChDSEFSKTB4YWIpOwotICAgICAgY2FzZSAweDIxOTM6IHJldHVybigoQ0hB UikweGM3KTsKLSAgICAgIGNhc2UgMHgyMjA2OiByZXR1cm4oKENIQVIpMHhiNik7Ci0gICAgICBj YXNlIDB4MjIwNzogcmV0dXJuKChDSEFSKTB4YjcpOwotICAgICAgY2FzZSAweDIyMTg6IHJldHVy bigoQ0hBUikweGY4KTsKLSAgICAgIGNhc2UgMHgyMjI4OiByZXR1cm4oKENIQVIpMHhlYik7Ci0g ICAgICBjYXNlIDB4MjIyOTogcmV0dXJuKChDSEFSKTB4ZWYpOwotICAgICAgY2FzZSAweDIyMmE6 IHJldHVybigoQ0hBUikweGFjKTsKLSAgICAgIGNhc2UgMHgyMjM1OiByZXR1cm4oKENIQVIpMHhk Mik7Ci0gICAgICBjYXNlIDB4MjI2MDogcmV0dXJuKChDSEFSKTB4ZjQpOwotICAgICAgY2FzZSAw eDIyNjE6IHJldHVybigoQ0hBUikweGNmKTsKLSAgICAgIGNhc2UgMHgyMjY0OiByZXR1cm4oKENI QVIpMHhmMyk7Ci0gICAgICBjYXNlIDB4MjI2NTogcmV0dXJuKChDSEFSKTB4ZjIpOwotICAgICAg Y2FzZSAweDIyODI6IHJldHVybigoQ0hBUikweGUyKTsKLSAgICAgIGNhc2UgMHgyMjgzOiByZXR1 cm4oKENIQVIpMHhlMyk7Ci0gICAgICBjYXNlIDB4MjI5NjogcmV0dXJuKChDSEFSKTB4ZTkpOwot ICAgICAgY2FzZSAweDIyYTI6IHJldHVybigoQ0hBUikweGQ2KTsKLSAgICAgIGNhc2UgMHgyMmEz OiByZXR1cm4oKENIQVIpMHhkNyk7Ci0gICAgICBjYXNlIDB4MjJhNDogcmV0dXJuKChDSEFSKTB4 OTgpOwotICAgICAgY2FzZSAweDIyYTU6IHJldHVybigoQ0hBUikweDlkKTsKLSAgICAgIGNhc2Ug MHgyMmM0OiByZXR1cm4oKENIQVIpMHhkOCk7Ci0gICAgICBjYXNlIDB4MjMwODogcmV0dXJuKChD SEFSKTB4YTkpOwotICAgICAgY2FzZSAweDIzMGE6IHJldHVybigoQ0hBUikweGJlKTsKLSAgICAg IGNhc2UgMHgyMzM2OiByZXR1cm4oKENIQVIpMHg5Zik7Ci0gICAgICBjYXNlIDB4MjMzNzogcmV0 dXJuKChDSEFSKTB4ZDMpOwotICAgICAgY2FzZSAweDIzMzk6IHJldHVybigoQ0hBUikweDkyKTsK LSAgICAgIGNhc2UgMHgyMzNiOiByZXR1cm4oKENIQVIpMHhkNSk7Ci0gICAgICBjYXNlIDB4MjMz ZDogcmV0dXJuKChDSEFSKTB4ZTgpOwotICAgICAgY2FzZSAweDIzM2Y6IHJldHVybigoQ0hBUikw eGYwKTsKLSAgICAgIGNhc2UgMHgyMzQwOiByZXR1cm4oKENIQVIpMHhmMSk7Ci0gICAgICBjYXNl IDB4MjM0MjogcmV0dXJuKChDSEFSKTB4ZDQpOwotICAgICAgY2FzZSAweDIzNDk6IHJldHVybigo Q0hBUikweGVkKTsKLSAgICAgIGNhc2UgMHgyMzRiOiByZXR1cm4oKENIQVIpMHhmYik7Ci0gICAg ICBjYXNlIDB4MjM0ZTogcmV0dXJuKChDSEFSKTB4YWYpOwotICAgICAgY2FzZSAweDIzNTI6IHJl dHVybigoQ0hBUikweGZjKTsKLSAgICAgIGNhc2UgMHgyMzU1OiByZXR1cm4oKENIQVIpMHhhZSk7 Ci0gICAgICBjYXNlIDB4MjM1OTogcmV0dXJuKChDSEFSKTB4ZjcpOwotICAgICAgY2FzZSAweDIz NWQ6IHJldHVybigoQ0hBUikweGU0KTsKLSAgICAgIGNhc2UgMHgyMzVlOiByZXR1cm4oKENIQVIp MHg5MSk7Ci0gICAgICBjYXNlIDB4MjM1ZjogcmV0dXJuKChDSEFSKTB4YjUpOwotICAgICAgY2Fz ZSAweDIzNmI6IHJldHVybigoQ0hBUikweGZhKTsKLSAgICAgIGNhc2UgMHgyMzcxOiByZXR1cm4o KENIQVIpMHhlNyk7Ci0gICAgICBjYXNlIDB4MjM3MjogcmV0dXJuKChDSEFSKTB4ZTUpOwotICAg ICAgY2FzZSAweDIzNzM6IHJldHVybigoQ0hBUikweGVjKTsKLSAgICAgIGNhc2UgMHgyMzc0OiBy ZXR1cm4oKENIQVIpMHhlNik7Ci0gICAgICBjYXNlIDB4MjM3NTogcmV0dXJuKChDSEFSKTB4Zjkp OwotICAgICAgY2FzZSAweDIzNzc6IHJldHVybigoQ0hBUikweGQxKTsKLSAgICAgIGNhc2UgMHgy Mzc4OiByZXR1cm4oKENIQVIpMHhkMCk7Ci0gICAgICBjYXNlIDB4MjM3YTogcmV0dXJuKChDSEFS KTB4ZTApOwotICAgICAgY2FzZSAweDI1MDA6IHJldHVybigoQ0hBUikweGM0KTsKLSAgICAgIGNh c2UgMHgyNTAyOiByZXR1cm4oKENIQVIpMHhiMyk7Ci0gICAgICBjYXNlIDB4MjUwYzogcmV0dXJu KChDSEFSKTB4ZGEpOwotICAgICAgY2FzZSAweDI1MTA6IHJldHVybigoQ0hBUikweGJmKTsKLSAg ICAgIGNhc2UgMHgyNTE0OiByZXR1cm4oKENIQVIpMHhjMCk7Ci0gICAgICBjYXNlIDB4MjUxODog cmV0dXJuKChDSEFSKTB4ZDkpOwotICAgICAgY2FzZSAweDI1MWM6IHJldHVybigoQ0hBUikweGMz KTsKLSAgICAgIGNhc2UgMHgyNTI0OiByZXR1cm4oKENIQVIpMHhiNCk7Ci0gICAgICBjYXNlIDB4 MjUyYzogcmV0dXJuKChDSEFSKTB4YzIpOwotICAgICAgY2FzZSAweDI1MzQ6IHJldHVybigoQ0hB UikweGMxKTsKLSAgICAgIGNhc2UgMHgyNTNjOiByZXR1cm4oKENIQVIpMHhjNSk7Ci0gICAgICBj YXNlIDB4MjU1MDogcmV0dXJuKChDSEFSKTB4Y2QpOwotICAgICAgY2FzZSAweDI1NTE6IHJldHVy bigoQ0hBUikweGJhKTsKLSAgICAgIGNhc2UgMHgyNTU0OiByZXR1cm4oKENIQVIpMHhjOSk7Ci0g ICAgICBjYXNlIDB4MjU1NzogcmV0dXJuKChDSEFSKTB4YmIpOwotICAgICAgY2FzZSAweDI1NWE6 IHJldHVybigoQ0hBUikweGM4KTsKLSAgICAgIGNhc2UgMHgyNTVkOiByZXR1cm4oKENIQVIpMHhi Yyk7Ci0gICAgICBjYXNlIDB4MjU2MDogcmV0dXJuKChDSEFSKTB4Y2MpOwotICAgICAgY2FzZSAw eDI1NjM6IHJldHVybigoQ0hBUikweGI5KTsKLSAgICAgIGNhc2UgMHgyNTY2OiByZXR1cm4oKENI QVIpMHhjYik7Ci0gICAgICBjYXNlIDB4MjU2OTogcmV0dXJuKChDSEFSKTB4Y2EpOwotICAgICAg Y2FzZSAweDI1NmM6IHJldHVybigoQ0hBUikweGNlKTsKLSAgICAgIGNhc2UgMHgyNTgwOiByZXR1 cm4oKENIQVIpMHhkZik7Ci0gICAgICBjYXNlIDB4MjU4NDogcmV0dXJuKChDSEFSKTB4ZGMpOwot ICAgICAgY2FzZSAweDI1ODg6IHJldHVybigoQ0hBUikweGRiKTsKLSAgICAgIGNhc2UgMHgyNTkx OiByZXR1cm4oKENIQVIpMHhiMCk7Ci0gICAgICBjYXNlIDB4MjU5MjogcmV0dXJuKChDSEFSKTB4 YjEpOwotICAgICAgY2FzZSAweDI1OTM6IHJldHVybigoQ0hBUikweGIyKTsKLSAgICAgIGNhc2Ug MHgyNWFmOiByZXR1cm4oKENIQVIpMHg5MCk7Ci0gICAgICBjYXNlIDB4MjVjYjogcmV0dXJuKChD SEFSKTB4ZWEpOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuKHR4X3B1bmMoYykpOwot ICAgIH0KLX0KLQotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFQ TC0yNzQxICovCi0jaWZkZWYgQ0tfQU5TSUMKLXR4X2FwbDUoVVNIT1JUIGMpCi0jZWxzZQotdHhf YXBsNShjKSBVU0hPUlQgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIHN3aXRjaCAo YykgewotICAgICAgY2FzZSAweDAwYTA6IHJldHVybigoQ0hBUikweGEwKTsKLSAgICAgIGNhc2Ug MHgwMGExOiByZXR1cm4oKENIQVIpMHhhMSk7Ci0gICAgICBjYXNlIDB4MDBhMjogcmV0dXJuKChD SEFSKTB4YTIpOwotICAgICAgY2FzZSAweDAwYTM6IHJldHVybigoQ0hBUikweGEzKTsKLSAgICAg IGNhc2UgMHgwMGE4OiByZXR1cm4oKENIQVIpMHhhOCk7Ci0gICAgICBjYXNlIDB4MDBhZjogcmV0 dXJuKChDSEFSKTB4YWYpOwotICAgICAgY2FzZSAweDAwYjY6IHJldHVybigoQ0hBUikweGI2KTsK LSAgICAgIGNhc2UgMHgwMGI3OiByZXR1cm4oKENIQVIpMHhiNyk7Ci0gICAgICBjYXNlIDB4MDBi ZjogcmV0dXJuKChDSEFSKTB4YmYpOwotICAgICAgY2FzZSAweDAwYzQ6IHJldHVybigoQ0hBUikw eGM0KTsKLSAgICAgIGNhc2UgMHgwMGM1OiByZXR1cm4oKENIQVIpMHhjNSk7Ci0gICAgICBjYXNl IDB4MDBjNjogcmV0dXJuKChDSEFSKTB4YzYpOwotICAgICAgY2FzZSAweDAwYzc6IHJldHVybigo Q0hBUikweGM3KTsKLSAgICAgIGNhc2UgMHgwMGM4OiByZXR1cm4oKENIQVIpMHhjOCk7Ci0gICAg ICBjYXNlIDB4MDBjOTogcmV0dXJuKChDSEFSKTB4YzkpOwotICAgICAgY2FzZSAweDAwY2Q6IHJl dHVybigoQ0hBUikweGNkKTsKLSAgICAgIGNhc2UgMHgwMGQxOiByZXR1cm4oKENIQVIpMHhkMSk7 Ci0gICAgICBjYXNlIDB4MDBkNjogcmV0dXJuKChDSEFSKTB4ZDYpOwotICAgICAgY2FzZSAweDAw ZDc6IHJldHVybigoQ0hBUikweGQ3KTsKLSAgICAgIGNhc2UgMHgwMGQ4OiByZXR1cm4oKENIQVIp MHhkOCk7Ci0gICAgICBjYXNlIDB4MDBkYzogcmV0dXJuKChDSEFSKTB4ZGMpOwotICAgICAgY2Fz ZSAweDAwZGY6IHJldHVybigoQ0hBUikweGRmKTsKLSAgICAgIGNhc2UgMHgwMGUwOiByZXR1cm4o KENIQVIpMHhlMCk7Ci0gICAgICBjYXNlIDB4MDBlMTogcmV0dXJuKChDSEFSKTB4ZTEpOwotICAg ICAgY2FzZSAweDAwZTI6IHJldHVybigoQ0hBUikweGUyKTsKLSAgICAgIGNhc2UgMHgwMGUzOiBy ZXR1cm4oKENIQVIpMHhlMyk7Ci0gICAgICBjYXNlIDB4MDBlNDogcmV0dXJuKChDSEFSKTB4ZTQp OwotICAgICAgY2FzZSAweDAwZTU6IHJldHVybigoQ0hBUikweGU1KTsKLSAgICAgIGNhc2UgMHgw MGU2OiByZXR1cm4oKENIQVIpMHhlNik7Ci0gICAgICBjYXNlIDB4MDBlNzogcmV0dXJuKChDSEFS KTB4ZTcpOwotICAgICAgY2FzZSAweDAwZTg6IHJldHVybigoQ0hBUikweGU4KTsKLSAgICAgIGNh c2UgMHgwMGU5OiByZXR1cm4oKENIQVIpMHhlOSk7Ci0gICAgICBjYXNlIDB4MDBlYTogcmV0dXJu KChDSEFSKTB4ZWEpOwotICAgICAgY2FzZSAweDAwZWI6IHJldHVybigoQ0hBUikweGViKTsKLSAg ICAgIGNhc2UgMHgwMGVjOiByZXR1cm4oKENIQVIpMHhlYyk7Ci0gICAgICBjYXNlIDB4MDBlZDog cmV0dXJuKChDSEFSKTB4ZWQpOwotICAgICAgY2FzZSAweDAwZWU6IHJldHVybigoQ0hBUikweGVl KTsKLSAgICAgIGNhc2UgMHgwMGVmOiByZXR1cm4oKENIQVIpMHhlZik7Ci0gICAgICBjYXNlIDB4 MDBmMTogcmV0dXJuKChDSEFSKTB4ZjEpOwotICAgICAgY2FzZSAweDAwZjI6IHJldHVybigoQ0hB UikweGYyKTsKLSAgICAgIGNhc2UgMHgwMGYzOiByZXR1cm4oKENIQVIpMHhmMyk7Ci0gICAgICBj YXNlIDB4MDBmNDogcmV0dXJuKChDSEFSKTB4ZjQpOwotICAgICAgY2FzZSAweDAwZjU6IHJldHVy bigoQ0hBUikweGY1KTsKLSAgICAgIGNhc2UgMHgwMGY2OiByZXR1cm4oKENIQVIpMHhmNik7Ci0g ICAgICBjYXNlIDB4MDBmNzogcmV0dXJuKChDSEFSKTB4ZjcpOwotICAgICAgY2FzZSAweDAwZjk6 IHJldHVybigoQ0hBUikweGY5KTsKLSAgICAgIGNhc2UgMHgwMGZhOiByZXR1cm4oKENIQVIpMHhm YSk7Ci0gICAgICBjYXNlIDB4MDBmYjogcmV0dXJuKChDSEFSKTB4ZmIpOwotICAgICAgY2FzZSAw eDAwZmM6IHJldHVybigoQ0hBUikweGZjKTsKLSAgICAgIGNhc2UgMHgyMGFjOiByZXR1cm4oKENI QVIpMHg4MCk7Ci0gICAgICBjYXNlIDB4MjE5MDogcmV0dXJuKChDSEFSKTB4ODQpOwotICAgICAg Y2FzZSAweDIxOTE6IHJldHVybigoQ0hBUikweDg2KTsKLSAgICAgIGNhc2UgMHgyMTkyOiByZXR1 cm4oKENIQVIpMHg4NSk7Ci0gICAgICBjYXNlIDB4MjE5MzogcmV0dXJuKChDSEFSKTB4ODcpOwot ICAgICAgY2FzZSAweDIyMDU6IHJldHVybigoQ0hBUikweGY4KTsKLSAgICAgIGNhc2UgMHgyMjA2 OiByZXR1cm4oKENIQVIpMHg5MSk7Ci0gICAgICBjYXNlIDB4MjIwNzogcmV0dXJuKChDSEFSKTB4 OTIpOwotICAgICAgY2FzZSAweDIyMGE6IHJldHVybigoQ0hBUikweGI5KTsKLSAgICAgIGNhc2Ug MHgyMjE4OiByZXR1cm4oKENIQVIpMHhiMCk7Ci0gICAgICBjYXNlIDB4MjIyODogcmV0dXJuKChD SEFSKTB4OWYpOwotICAgICAgY2FzZSAweDIyMjk6IHJldHVybigoQ0hBUikweDlkKTsKLSAgICAg IGNhc2UgMHgyMjJhOiByZXR1cm4oKENIQVIpMHg5ZSk7Ci0gICAgICBjYXNlIDB4MjIzNTogcmV0 dXJuKChDSEFSKTB4ZmQpOwotICAgICAgY2FzZSAweDIyNjA6IHJldHVybigoQ0hBUikweGFjKTsK LSAgICAgIGNhc2UgMHgyMjYxOiByZXR1cm4oKENIQVIpMHhhNik7Ci0gICAgICBjYXNlIDB4MjI2 MjogcmV0dXJuKChDSEFSKTB4YmIpOwotICAgICAgY2FzZSAweDIyNjQ6IHJldHVybigoQ0hBUikw eDg4KTsKLSAgICAgIGNhc2UgMHgyMjY1OiByZXR1cm4oKENIQVIpMHg4OSk7Ci0gICAgICBjYXNl IDB4MjI4MjogcmV0dXJuKChDSEFSKTB4OWIpOwotICAgICAgY2FzZSAweDIyODM6IHJldHVybigo Q0hBUikweDljKTsKLSAgICAgIGNhc2UgMHgyMjk2OiByZXR1cm4oKENIQVIpMHhiNCk7Ci0gICAg ICBjYXNlIDB4MjJhMjogcmV0dXJuKChDSEFSKTB4YTQpOwotICAgICAgY2FzZSAweDIyYTM6IHJl dHVybigoQ0hBUikweDgxKTsKLSAgICAgIGNhc2UgMHgyMmE0OiByZXR1cm4oKENIQVIpMHg4Mik7 Ci0gICAgICBjYXNlIDB4MjJhNTogcmV0dXJuKChDSEFSKTB4ODMpOwotICAgICAgY2FzZSAweDIy YzQ6IHJldHVybigoQ0hBUikweGFhKTsKLSAgICAgIGNhc2UgMHgyMzA4OiByZXR1cm4oKENIQVIp MHg5Nyk7Ci0gICAgICBjYXNlIDB4MjMwYTogcmV0dXJuKChDSEFSKTB4OTgpOwotICAgICAgY2Fz ZSAweDIzMzY6IHJldHVybigoQ0hBUikweGE3KTsKLSAgICAgIGNhc2UgMHgyMzM3OiByZXR1cm4o KENIQVIpMHhkZSk7Ci0gICAgICBjYXNlIDB4MjMzOTogcmV0dXJuKChDSEFSKTB4OGUpOwotICAg ICAgY2FzZSAweDIzM2I6IHJldHVybigoQ0hBUikweGNiKTsKLSAgICAgIGNhc2UgMHgyMzNkOiBy ZXR1cm4oKENIQVIpMHhiMik7Ci0gICAgICBjYXNlIDB4MjMzZjogcmV0dXJuKChDSEFSKTB4OWEp OwotICAgICAgY2FzZSAweDIzNDA6IHJldHVybigoQ0hBUikweDk5KTsKLSAgICAgIGNhc2UgMHgy MzQyOiByZXR1cm4oKENIQVIpMHhjYSk7Ci0gICAgICBjYXNlIDB4MjM0NzogcmV0dXJuKChDSEFS KTB4ZDQpOwotICAgICAgY2FzZSAweDIzNDg6IHJldHVybigoQ0hBUikweGQ1KTsKLSAgICAgIGNh c2UgMHgyMzQ5OiByZXR1cm4oKENIQVIpMHhiMyk7Ci0gICAgICBjYXNlIDB4MjM0YjogcmV0dXJu KChDSEFSKTB4OTMpOwotICAgICAgY2FzZSAweDIzNGU6IHJldHVybigoQ0hBUikweDk2KTsKLSAg ICAgIGNhc2UgMHgyMzUwOiByZXR1cm4oKENIQVIpMHhkMik7Ci0gICAgICBjYXNlIDB4MjM1Mjog cmV0dXJuKChDSEFSKTB4OTQpOwotICAgICAgY2FzZSAweDIzNTU6IHJldHVybigoQ0hBUikweDk1 KTsKLSAgICAgIGNhc2UgMHgyMzU3OiByZXR1cm4oKENIQVIpMHhkMyk7Ci0gICAgICBjYXNlIDB4 MjM1OTogcmV0dXJuKChDSEFSKTB4OGYpOwotICAgICAgY2FzZSAweDIzNWQ6IHJldHVybigoQ0hB UikweGE5KTsKLSAgICAgIGNhc2UgMHgyMzVlOiByZXR1cm4oKENIQVIpMHg4ZCk7Ci0gICAgICBj YXNlIDB4MjM1ZjogcmV0dXJuKChDSEFSKTB4YjUpOwotICAgICAgY2FzZSAweDIzNjQ6IHJldHVy bigoQ0hBUikweGYwKTsKLSAgICAgIGNhc2UgMHgyMzY1OiByZXR1cm4oKENIQVIpMHhmZik7Ci0g ICAgICBjYXNlIDB4MjM2ODogcmV0dXJuKChDSEFSKTB4ZmUpOwotICAgICAgY2FzZSAweDIzNmE6 IHJldHVybigoQ0hBUikweGFlKTsKLSAgICAgIGNhc2UgMHgyMzZiOiByZXR1cm4oKENIQVIpMHg5 MCk7Ci0gICAgICBjYXNlIDB4MjM2YzogcmV0dXJuKChDSEFSKTB4YWIpOwotICAgICAgY2FzZSAw eDIzNzE6IHJldHVybigoQ0hBUikweDhiKTsKLSAgICAgIGNhc2UgMHgyMzcyOiByZXR1cm4oKENI QVIpMHg4YSk7Ci0gICAgICBjYXNlIDB4MjM3MzogcmV0dXJuKChDSEFSKTB4YmMpOwotICAgICAg Y2FzZSAweDIzNzQ6IHJldHVybigoQ0hBUikweGJkKTsKLSAgICAgIGNhc2UgMHgyMzc1OiByZXR1 cm4oKENIQVIpMHhiZSk7Ci0gICAgICBjYXNlIDB4MjM3NzogcmV0dXJuKChDSEFSKTB4YmEpOwot ICAgICAgY2FzZSAweDIzNzg6IHJldHVybigoQ0hBUikweGE1KTsKLSAgICAgIGNhc2UgMHgyMzdh OiByZXR1cm4oKENIQVIpMHhiOCk7Ci0gICAgICBjYXNlIDB4MjUwMDogcmV0dXJuKChDSEFSKTB4 Y2UpOwotICAgICAgY2FzZSAweDI1MDI6IHJldHVybigoQ0hBUikweGRiKTsKLSAgICAgIGNhc2Ug MHgyNTBjOiByZXR1cm4oKENIQVIpMHhkYSk7Ci0gICAgICBjYXNlIDB4MjUxMDogcmV0dXJuKChD SEFSKTB4Y2MpOwotICAgICAgY2FzZSAweDI1MTQ6IHJldHVybigoQ0hBUikweGMwKTsKLSAgICAg IGNhc2UgMHgyNTE4OiByZXR1cm4oKENIQVIpMHhkOSk7Ci0gICAgICBjYXNlIDB4MjUxYzogcmV0 dXJuKChDSEFSKTB4YzMpOwotICAgICAgY2FzZSAweDI1MjQ6IHJldHVybigoQ0hBUikweGRkKTsK LSAgICAgIGNhc2UgMHgyNTJjOiByZXR1cm4oKENIQVIpMHhjMik7Ci0gICAgICBjYXNlIDB4MjUz NDogcmV0dXJuKChDSEFSKTB4YzEpOwotICAgICAgY2FzZSAweDI1M2M6IHJldHVybigoQ0hBUikw eGNmKTsKLSAgICAgIGNhc2UgMHgyNWFmOiByZXR1cm4oKENIQVIpMHg4Yyk7Ci0gICAgICBjYXNl IDB4MjVjYjogcmV0dXJuKChDSEFSKTB4YjEpOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0 dXJuKHR4X3B1bmMoYykpOwotICAgIH0KLX0KLQotLyogRm9yIExhdGluLTEsIHVzZSB0eF9pZGVu dCgpICovCi0KLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMYXRp bi0yICovCi0jaWZkZWYgQ0tfQU5TSUMKLXR4Xzg4NTlfMihVU0hPUlQgYykKLSNlbHNlCi10eF84 ODU5XzIoYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA8 IDB4YTApCi0gICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7Ci0gICAgc3dpdGNoKGMpIHsK LSAgICAgIGNhc2UgMHgwMEEwOiByZXR1cm4oKENIQVIpMTYwKTsKLSAgICAgIGNhc2UgMHgwMEE0 OiByZXR1cm4oKENIQVIpMTY0KTsKLSAgICAgIGNhc2UgMHgwMEE3OiByZXR1cm4oKENIQVIpMTY3 KTsKLSAgICAgIGNhc2UgMHgwMEE4OiByZXR1cm4oKENIQVIpMTY4KTsKLSAgICAgIGNhc2UgMHgw MEFEOiByZXR1cm4oKENIQVIpMTczKTsKLSAgICAgIGNhc2UgMHgwMEIwOiByZXR1cm4oKENIQVIp MTc2KTsKLSAgICAgIGNhc2UgMHgwMEI0OiByZXR1cm4oKENIQVIpMTgwKTsKLSAgICAgIGNhc2Ug MHgwMEI4OiByZXR1cm4oKENIQVIpMTg0KTsKLSAgICAgIGNhc2UgMHgwMEMxOiByZXR1cm4oKENI QVIpMTkzKTsKLSAgICAgIGNhc2UgMHgwMEMyOiByZXR1cm4oKENIQVIpMTk0KTsKLSAgICAgIGNh c2UgMHgwMEM0OiByZXR1cm4oKENIQVIpMTk2KTsKLSAgICAgIGNhc2UgMHgwMEM3OiByZXR1cm4o KENIQVIpMTk5KTsKLSAgICAgIGNhc2UgMHgwMEM5OiByZXR1cm4oKENIQVIpMjAxKTsKLSAgICAg IGNhc2UgMHgwMENCOiByZXR1cm4oKENIQVIpMjAzKTsKLSAgICAgIGNhc2UgMHgwMENEOiByZXR1 cm4oKENIQVIpMjA1KTsKLSAgICAgIGNhc2UgMHgwMENFOiByZXR1cm4oKENIQVIpMjA2KTsKLSAg ICAgIGNhc2UgMHgwMEQzOiByZXR1cm4oKENIQVIpMjExKTsKLSAgICAgIGNhc2UgMHgwMEQ0OiBy ZXR1cm4oKENIQVIpMjEyKTsKLSAgICAgIGNhc2UgMHgwMEQ2OiByZXR1cm4oKENIQVIpMjE0KTsK LSAgICAgIGNhc2UgMHgwMEQ3OiByZXR1cm4oKENIQVIpMjE1KTsKLSAgICAgIGNhc2UgMHgwMERB OiByZXR1cm4oKENIQVIpMjE4KTsKLSAgICAgIGNhc2UgMHgwMERDOiByZXR1cm4oKENIQVIpMjIw KTsKLSAgICAgIGNhc2UgMHgwMEREOiByZXR1cm4oKENIQVIpMjIxKTsKLSAgICAgIGNhc2UgMHgw MERGOiByZXR1cm4oKENIQVIpMjIzKTsKLSAgICAgIGNhc2UgMHgwMEUxOiByZXR1cm4oKENIQVIp MjI1KTsKLSAgICAgIGNhc2UgMHgwMEUyOiByZXR1cm4oKENIQVIpMjI2KTsKLSAgICAgIGNhc2Ug MHgwMEU0OiByZXR1cm4oKENIQVIpMjI4KTsKLSAgICAgIGNhc2UgMHgwMEU3OiByZXR1cm4oKENI QVIpMjMxKTsKLSAgICAgIGNhc2UgMHgwMEU5OiByZXR1cm4oKENIQVIpMjMzKTsKLSAgICAgIGNh c2UgMHgwMEVCOiByZXR1cm4oKENIQVIpMjM1KTsKLSAgICAgIGNhc2UgMHgwMEVEOiByZXR1cm4o KENIQVIpMjM3KTsKLSAgICAgIGNhc2UgMHgwMEVFOiByZXR1cm4oKENIQVIpMjM4KTsKLSAgICAg IGNhc2UgMHgwMEYzOiByZXR1cm4oKENIQVIpMjQzKTsKLSAgICAgIGNhc2UgMHgwMEY0OiByZXR1 cm4oKENIQVIpMjQ0KTsKLSAgICAgIGNhc2UgMHgwMEY2OiByZXR1cm4oKENIQVIpMjQ2KTsKLSAg ICAgIGNhc2UgMHgwMEY3OiByZXR1cm4oKENIQVIpMjQ3KTsKLSAgICAgIGNhc2UgMHgwMEZBOiBy ZXR1cm4oKENIQVIpMjUwKTsKLSAgICAgIGNhc2UgMHgwMEZDOiByZXR1cm4oKENIQVIpMjUyKTsK LSAgICAgIGNhc2UgMHgwMEZEOiByZXR1cm4oKENIQVIpMjUzKTsKLSAgICAgIGNhc2UgMHgwMTAy OiByZXR1cm4oKENIQVIpMTk1KTsKLSAgICAgIGNhc2UgMHgwMTAzOiByZXR1cm4oKENIQVIpMjI3 KTsKLSAgICAgIGNhc2UgMHgwMTA0OiByZXR1cm4oKENIQVIpMTYxKTsKLSAgICAgIGNhc2UgMHgw MTA1OiByZXR1cm4oKENIQVIpMTc3KTsKLSAgICAgIGNhc2UgMHgwMTA2OiByZXR1cm4oKENIQVIp MTk4KTsKLSAgICAgIGNhc2UgMHgwMTA3OiByZXR1cm4oKENIQVIpMjMwKTsKLSAgICAgIGNhc2Ug MHgwMTBDOiByZXR1cm4oKENIQVIpMjAwKTsKLSAgICAgIGNhc2UgMHgwMTBEOiByZXR1cm4oKENI QVIpMjMyKTsKLSAgICAgIGNhc2UgMHgwMTBFOiByZXR1cm4oKENIQVIpMjA3KTsKLSAgICAgIGNh c2UgMHgwMTBGOiByZXR1cm4oKENIQVIpMjM5KTsKLSAgICAgIGNhc2UgMHgwMTEwOiByZXR1cm4o KENIQVIpMjA4KTsKLSAgICAgIGNhc2UgMHgwMTExOiByZXR1cm4oKENIQVIpMjQwKTsKLSAgICAg IGNhc2UgMHgwMTE4OiByZXR1cm4oKENIQVIpMjAyKTsKLSAgICAgIGNhc2UgMHgwMTE5OiByZXR1 cm4oKENIQVIpMjM0KTsKLSAgICAgIGNhc2UgMHgwMTFBOiByZXR1cm4oKENIQVIpMjA0KTsKLSAg ICAgIGNhc2UgMHgwMTFCOiByZXR1cm4oKENIQVIpMjM2KTsKLSAgICAgIGNhc2UgMHgwMTM5OiBy ZXR1cm4oKENIQVIpMTk3KTsKLSAgICAgIGNhc2UgMHgwMTNBOiByZXR1cm4oKENIQVIpMjI5KTsK LSAgICAgIGNhc2UgMHgwMTNEOiByZXR1cm4oKENIQVIpMTY1KTsKLSAgICAgIGNhc2UgMHgwMTNF OiByZXR1cm4oKENIQVIpMTgxKTsKLSAgICAgIGNhc2UgMHgwMTQxOiByZXR1cm4oKENIQVIpMTYz KTsKLSAgICAgIGNhc2UgMHgwMTQyOiByZXR1cm4oKENIQVIpMTc5KTsKLSAgICAgIGNhc2UgMHgw MTQzOiByZXR1cm4oKENIQVIpMjA5KTsKLSAgICAgIGNhc2UgMHgwMTQ0OiByZXR1cm4oKENIQVIp MjQxKTsKLSAgICAgIGNhc2UgMHgwMTQ3OiByZXR1cm4oKENIQVIpMjEwKTsKLSAgICAgIGNhc2Ug MHgwMTQ4OiByZXR1cm4oKENIQVIpMjQyKTsKLSAgICAgIGNhc2UgMHgwMTUwOiByZXR1cm4oKENI QVIpMjEzKTsKLSAgICAgIGNhc2UgMHgwMTUxOiByZXR1cm4oKENIQVIpMjQ1KTsKLSAgICAgIGNh c2UgMHgwMTU0OiByZXR1cm4oKENIQVIpMTkyKTsKLSAgICAgIGNhc2UgMHgwMTU1OiByZXR1cm4o KENIQVIpMjI0KTsKLSAgICAgIGNhc2UgMHgwMTU4OiByZXR1cm4oKENIQVIpMjE2KTsKLSAgICAg IGNhc2UgMHgwMTU5OiByZXR1cm4oKENIQVIpMjQ4KTsKLSAgICAgIGNhc2UgMHgwMTVBOiByZXR1 cm4oKENIQVIpMTY2KTsKLSAgICAgIGNhc2UgMHgwMTVCOiByZXR1cm4oKENIQVIpMTgyKTsKLSAg ICAgIGNhc2UgMHgwMTVFOiByZXR1cm4oKENIQVIpMTcwKTsKLSAgICAgIGNhc2UgMHgwMTVGOiBy ZXR1cm4oKENIQVIpMTg2KTsKLSAgICAgIGNhc2UgMHgwMTYwOiByZXR1cm4oKENIQVIpMTY5KTsK LSAgICAgIGNhc2UgMHgwMTYxOiByZXR1cm4oKENIQVIpMTg1KTsKLSAgICAgIGNhc2UgMHgwMTYy OiByZXR1cm4oKENIQVIpMjIyKTsKLSAgICAgIGNhc2UgMHgwMTYzOiByZXR1cm4oKENIQVIpMjU0 KTsKLSAgICAgIGNhc2UgMHgwMTY0OiByZXR1cm4oKENIQVIpMTcxKTsKLSAgICAgIGNhc2UgMHgw MTY1OiByZXR1cm4oKENIQVIpMTg3KTsKLSAgICAgIGNhc2UgMHgwMTZFOiByZXR1cm4oKENIQVIp MjE3KTsKLSAgICAgIGNhc2UgMHgwMTZGOiByZXR1cm4oKENIQVIpMjQ5KTsKLSAgICAgIGNhc2Ug MHgwMTcwOiByZXR1cm4oKENIQVIpMjE5KTsKLSAgICAgIGNhc2UgMHgwMTcxOiByZXR1cm4oKENI QVIpMjUxKTsKLSAgICAgIGNhc2UgMHgwMTc5OiByZXR1cm4oKENIQVIpMTcyKTsKLSAgICAgIGNh c2UgMHgwMTdBOiByZXR1cm4oKENIQVIpMTg4KTsKLSAgICAgIGNhc2UgMHgwMTdCOiByZXR1cm4o KENIQVIpMTc1KTsKLSAgICAgIGNhc2UgMHgwMTdDOiByZXR1cm4oKENIQVIpMTkxKTsKLSAgICAg IGNhc2UgMHgwMTdEOiByZXR1cm4oKENIQVIpMTc0KTsKLSAgICAgIGNhc2UgMHgwMTdFOiByZXR1 cm4oKENIQVIpMTkwKTsKLSAgICAgIGNhc2UgMHgwMkM3OiByZXR1cm4oKENIQVIpMTgzKTsKLSAg ICAgIGNhc2UgMHgwMkQ4OiByZXR1cm4oKENIQVIpMTYyKTsKLSAgICAgIGNhc2UgMHgwMkQ5OiBy ZXR1cm4oKENIQVIpMjU1KTsKLSAgICAgIGNhc2UgMHgwMkRCOiByZXR1cm4oKENIQVIpMTc4KTsK LSAgICAgIGNhc2UgMHgwMkREOiByZXR1cm4oKENIQVIpMTg5KTsKLSAgICAgIGRlZmF1bHQ6IHJl dHVybih0eF9wdW5jKGMpKTsKLSAgICB9Ci19Ci0KLWludCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBMYXRpbi0zICovCi0jaWZkZWYgQ0tfQU5TSUMKLXR4Xzg4NTlfMyhV U0hPUlQgYykKLSNlbHNlCi10eF84ODU5XzMoYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5T SUMgKi8KLXsKLSAgICBpZiAoYyA8IDB4YTApCi0gICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZm KSk7Ci0gICAgc3dpdGNoKGMpIHsKLSAgICAgIGNhc2UgMHgwMEEwOiByZXR1cm4oKENIQVIpMTYw KTsKLSAgICAgIGNhc2UgMHgwMEEzOiByZXR1cm4oKENIQVIpMTYzKTsKLSAgICAgIGNhc2UgMHgw MEE0OiByZXR1cm4oKENIQVIpMTY0KTsKLSAgICAgIGNhc2UgMHgwMEE3OiByZXR1cm4oKENIQVIp MTY3KTsKLSAgICAgIGNhc2UgMHgwMEE4OiByZXR1cm4oKENIQVIpMTY4KTsKLSAgICAgIGNhc2Ug MHgwMEFEOiByZXR1cm4oKENIQVIpMTczKTsKLSAgICAgIGNhc2UgMHgwMEIwOiByZXR1cm4oKENI QVIpMTc2KTsKLSAgICAgIGNhc2UgMHgwMEIyOiByZXR1cm4oKENIQVIpMTc4KTsKLSAgICAgIGNh c2UgMHgwMEIzOiByZXR1cm4oKENIQVIpMTc5KTsKLSAgICAgIGNhc2UgMHgwMEI0OiByZXR1cm4o KENIQVIpMTgwKTsKLSAgICAgIGNhc2UgMHgwMEI1OiByZXR1cm4oKENIQVIpMTgxKTsKLSAgICAg IGNhc2UgMHgwMEI3OiByZXR1cm4oKENIQVIpMTgzKTsKLSAgICAgIGNhc2UgMHgwMEI4OiByZXR1 cm4oKENIQVIpMTg0KTsKLSAgICAgIGNhc2UgMHgwMEJEOiByZXR1cm4oKENIQVIpMTg5KTsKLSAg ICAgIGNhc2UgMHgwMEMwOiByZXR1cm4oKENIQVIpMTkyKTsKLSAgICAgIGNhc2UgMHgwMEMxOiBy ZXR1cm4oKENIQVIpMTkzKTsKLSAgICAgIGNhc2UgMHgwMEMyOiByZXR1cm4oKENIQVIpMTk0KTsK LSAgICAgIGNhc2UgMHgwMEM0OiByZXR1cm4oKENIQVIpMTk2KTsKLSAgICAgIGNhc2UgMHgwMEM3 OiByZXR1cm4oKENIQVIpMTk5KTsKLSAgICAgIGNhc2UgMHgwMEM4OiByZXR1cm4oKENIQVIpMjAw KTsKLSAgICAgIGNhc2UgMHgwMEM5OiByZXR1cm4oKENIQVIpMjAxKTsKLSAgICAgIGNhc2UgMHgw MENBOiByZXR1cm4oKENIQVIpMjAyKTsKLSAgICAgIGNhc2UgMHgwMENCOiByZXR1cm4oKENIQVIp MjAzKTsKLSAgICAgIGNhc2UgMHgwMENDOiByZXR1cm4oKENIQVIpMjA0KTsKLSAgICAgIGNhc2Ug MHgwMENEOiByZXR1cm4oKENIQVIpMjA1KTsKLSAgICAgIGNhc2UgMHgwMENFOiByZXR1cm4oKENI QVIpMjA2KTsKLSAgICAgIGNhc2UgMHgwMENGOiByZXR1cm4oKENIQVIpMjA3KTsKLSAgICAgIGNh c2UgMHgwMEQxOiByZXR1cm4oKENIQVIpMjA5KTsKLSAgICAgIGNhc2UgMHgwMEQyOiByZXR1cm4o KENIQVIpMjEwKTsKLSAgICAgIGNhc2UgMHgwMEQzOiByZXR1cm4oKENIQVIpMjExKTsKLSAgICAg IGNhc2UgMHgwMEQ0OiByZXR1cm4oKENIQVIpMjEyKTsKLSAgICAgIGNhc2UgMHgwMEQ2OiByZXR1 cm4oKENIQVIpMjE0KTsKLSAgICAgIGNhc2UgMHgwMEQ3OiByZXR1cm4oKENIQVIpMjE1KTsKLSAg ICAgIGNhc2UgMHgwMEQ5OiByZXR1cm4oKENIQVIpMjE3KTsKLSAgICAgIGNhc2UgMHgwMERBOiBy ZXR1cm4oKENIQVIpMjE4KTsKLSAgICAgIGNhc2UgMHgwMERCOiByZXR1cm4oKENIQVIpMjE5KTsK LSAgICAgIGNhc2UgMHgwMERDOiByZXR1cm4oKENIQVIpMjIwKTsKLSAgICAgIGNhc2UgMHgwMERG OiByZXR1cm4oKENIQVIpMjIzKTsKLSAgICAgIGNhc2UgMHgwMEUwOiByZXR1cm4oKENIQVIpMjI0 KTsKLSAgICAgIGNhc2UgMHgwMEUxOiByZXR1cm4oKENIQVIpMjI1KTsKLSAgICAgIGNhc2UgMHgw MEUyOiByZXR1cm4oKENIQVIpMjI2KTsKLSAgICAgIGNhc2UgMHgwMEU0OiByZXR1cm4oKENIQVIp MjI4KTsKLSAgICAgIGNhc2UgMHgwMEU3OiByZXR1cm4oKENIQVIpMjMxKTsKLSAgICAgIGNhc2Ug MHgwMEU4OiByZXR1cm4oKENIQVIpMjMyKTsKLSAgICAgIGNhc2UgMHgwMEU5OiByZXR1cm4oKENI QVIpMjMzKTsKLSAgICAgIGNhc2UgMHgwMEVBOiByZXR1cm4oKENIQVIpMjM0KTsKLSAgICAgIGNh c2UgMHgwMEVCOiByZXR1cm4oKENIQVIpMjM1KTsKLSAgICAgIGNhc2UgMHgwMEVDOiByZXR1cm4o KENIQVIpMjM2KTsKLSAgICAgIGNhc2UgMHgwMEVEOiByZXR1cm4oKENIQVIpMjM3KTsKLSAgICAg IGNhc2UgMHgwMEVFOiByZXR1cm4oKENIQVIpMjM4KTsKLSAgICAgIGNhc2UgMHgwMEVGOiByZXR1 cm4oKENIQVIpMjM5KTsKLSAgICAgIGNhc2UgMHgwMEYxOiByZXR1cm4oKENIQVIpMjQxKTsKLSAg ICAgIGNhc2UgMHgwMEYyOiByZXR1cm4oKENIQVIpMjQyKTsKLSAgICAgIGNhc2UgMHgwMEYzOiBy ZXR1cm4oKENIQVIpMjQzKTsKLSAgICAgIGNhc2UgMHgwMEY0OiByZXR1cm4oKENIQVIpMjQ0KTsK LSAgICAgIGNhc2UgMHgwMEY2OiByZXR1cm4oKENIQVIpMjQ2KTsKLSAgICAgIGNhc2UgMHgwMEY3 OiByZXR1cm4oKENIQVIpMjQ3KTsKLSAgICAgIGNhc2UgMHgwMEY5OiByZXR1cm4oKENIQVIpMjQ5 KTsKLSAgICAgIGNhc2UgMHgwMEZBOiByZXR1cm4oKENIQVIpMjUwKTsKLSAgICAgIGNhc2UgMHgw MEZCOiByZXR1cm4oKENIQVIpMjUxKTsKLSAgICAgIGNhc2UgMHgwMEZDOiByZXR1cm4oKENIQVIp MjUyKTsKLSAgICAgIGNhc2UgMHgwMTA4OiByZXR1cm4oKENIQVIpMTk4KTsKLSAgICAgIGNhc2Ug MHgwMTA5OiByZXR1cm4oKENIQVIpMjMwKTsKLSAgICAgIGNhc2UgMHgwMTBBOiByZXR1cm4oKENI QVIpMTk3KTsKLSAgICAgIGNhc2UgMHgwMTBCOiByZXR1cm4oKENIQVIpMjI5KTsKLSAgICAgIGNh c2UgMHgwMTFDOiByZXR1cm4oKENIQVIpMjE2KTsKLSAgICAgIGNhc2UgMHgwMTFEOiByZXR1cm4o KENIQVIpMjQ4KTsKLSAgICAgIGNhc2UgMHgwMTFFOiByZXR1cm4oKENIQVIpMTcxKTsKLSAgICAg IGNhc2UgMHgwMTFGOiByZXR1cm4oKENIQVIpMTg3KTsKLSAgICAgIGNhc2UgMHgwMTIwOiByZXR1 cm4oKENIQVIpMjEzKTsKLSAgICAgIGNhc2UgMHgwMTIxOiByZXR1cm4oKENIQVIpMjQ1KTsKLSAg ICAgIGNhc2UgMHgwMTI0OiByZXR1cm4oKENIQVIpMTY2KTsKLSAgICAgIGNhc2UgMHgwMTI1OiBy ZXR1cm4oKENIQVIpMTgyKTsKLSAgICAgIGNhc2UgMHgwMTI2OiByZXR1cm4oKENIQVIpMTYxKTsK LSAgICAgIGNhc2UgMHgwMTI3OiByZXR1cm4oKENIQVIpMTc3KTsKLSAgICAgIGNhc2UgMHgwMTMw OiByZXR1cm4oKENIQVIpMTY5KTsKLSAgICAgIGNhc2UgMHgwMTMxOiByZXR1cm4oKENIQVIpMTg1 KTsKLSAgICAgIGNhc2UgMHgwMTM0OiByZXR1cm4oKENIQVIpMTcyKTsKLSAgICAgIGNhc2UgMHgw MTM1OiByZXR1cm4oKENIQVIpMTg4KTsKLSAgICAgIGNhc2UgMHgwMTVDOiByZXR1cm4oKENIQVIp MjIyKTsKLSAgICAgIGNhc2UgMHgwMTVEOiByZXR1cm4oKENIQVIpMjU0KTsKLSAgICAgIGNhc2Ug MHgwMTVFOiByZXR1cm4oKENIQVIpMTcwKTsKLSAgICAgIGNhc2UgMHgwMTVGOiByZXR1cm4oKENI QVIpMTg2KTsKLSAgICAgIGNhc2UgMHgwMTZDOiByZXR1cm4oKENIQVIpMjIxKTsKLSAgICAgIGNh c2UgMHgwMTZEOiByZXR1cm4oKENIQVIpMjUzKTsKLSAgICAgIGNhc2UgMHgwMTdCOiByZXR1cm4o KENIQVIpMTc1KTsKLSAgICAgIGNhc2UgMHgwMTdDOiByZXR1cm4oKENIQVIpMTkxKTsKLSAgICAg IGNhc2UgMHgwMkQ4OiByZXR1cm4oKENIQVIpMTYyKTsKLSAgICAgIGNhc2UgMHgwMkQ5OiByZXR1 cm4oKENIQVIpMjU1KTsKLSAgICAgIGRlZmF1bHQ6IHJldHVybih0eF9wdW5jKGMpKTsKLSAgICB9 Ci19Ci0KLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMYXRpbi00 ICovCi0jaWZkZWYgQ0tfQU5TSUMKLXR4Xzg4NTlfNChVU0hPUlQgYykKLSNlbHNlCi10eF84ODU5 XzQoYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA8IDB4 YTApCi0gICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7Ci0gICAgc3dpdGNoKGMpIHsKLSAg ICAgIGNhc2UgMHgwMEEwOiByZXR1cm4oKENIQVIpMTYwKTsKLSAgICAgIGNhc2UgMHgwMEE0OiBy ZXR1cm4oKENIQVIpMTY0KTsKLSAgICAgIGNhc2UgMHgwMEE3OiByZXR1cm4oKENIQVIpMTY3KTsK LSAgICAgIGNhc2UgMHgwMEE4OiByZXR1cm4oKENIQVIpMTY4KTsKLSAgICAgIGNhc2UgMHgwMEFE OiByZXR1cm4oKENIQVIpMTczKTsKLSAgICAgIGNhc2UgMHgwMEFGOiByZXR1cm4oKENIQVIpMTc1 KTsKLSAgICAgIGNhc2UgMHgwMEIwOiByZXR1cm4oKENIQVIpMTc2KTsKLSAgICAgIGNhc2UgMHgw MEI0OiByZXR1cm4oKENIQVIpMTgwKTsKLSAgICAgIGNhc2UgMHgwMEI4OiByZXR1cm4oKENIQVIp MTg0KTsKLSAgICAgIGNhc2UgMHgwMEMxOiByZXR1cm4oKENIQVIpMTkzKTsKLSAgICAgIGNhc2Ug MHgwMEMyOiByZXR1cm4oKENIQVIpMTk0KTsKLSAgICAgIGNhc2UgMHgwMEMzOiByZXR1cm4oKENI QVIpMTk1KTsKLSAgICAgIGNhc2UgMHgwMEM0OiByZXR1cm4oKENIQVIpMTk2KTsKLSAgICAgIGNh c2UgMHgwMEM1OiByZXR1cm4oKENIQVIpMTk3KTsKLSAgICAgIGNhc2UgMHgwMEM2OiByZXR1cm4o KENIQVIpMTk4KTsKLSAgICAgIGNhc2UgMHgwMEM5OiByZXR1cm4oKENIQVIpMjAxKTsKLSAgICAg IGNhc2UgMHgwMENCOiByZXR1cm4oKENIQVIpMjAzKTsKLSAgICAgIGNhc2UgMHgwMENEOiByZXR1 cm4oKENIQVIpMjA1KTsKLSAgICAgIGNhc2UgMHgwMENFOiByZXR1cm4oKENIQVIpMjA2KTsKLSAg ICAgIGNhc2UgMHgwMEQ0OiByZXR1cm4oKENIQVIpMjEyKTsKLSAgICAgIGNhc2UgMHgwMEQ1OiBy ZXR1cm4oKENIQVIpMjEzKTsKLSAgICAgIGNhc2UgMHgwMEQ2OiByZXR1cm4oKENIQVIpMjE0KTsK LSAgICAgIGNhc2UgMHgwMEQ3OiByZXR1cm4oKENIQVIpMjE1KTsKLSAgICAgIGNhc2UgMHgwMEQ4 OiByZXR1cm4oKENIQVIpMjE2KTsKLSAgICAgIGNhc2UgMHgwMERBOiByZXR1cm4oKENIQVIpMjE4 KTsKLSAgICAgIGNhc2UgMHgwMERCOiByZXR1cm4oKENIQVIpMjE5KTsKLSAgICAgIGNhc2UgMHgw MERDOiByZXR1cm4oKENIQVIpMjIwKTsKLSAgICAgIGNhc2UgMHgwMERGOiByZXR1cm4oKENIQVIp MjIzKTsKLSAgICAgIGNhc2UgMHgwMEUxOiByZXR1cm4oKENIQVIpMjI1KTsKLSAgICAgIGNhc2Ug MHgwMEUyOiByZXR1cm4oKENIQVIpMjI2KTsKLSAgICAgIGNhc2UgMHgwMEUzOiByZXR1cm4oKENI QVIpMjI3KTsKLSAgICAgIGNhc2UgMHgwMEU0OiByZXR1cm4oKENIQVIpMjI4KTsKLSAgICAgIGNh c2UgMHgwMEU1OiByZXR1cm4oKENIQVIpMjI5KTsKLSAgICAgIGNhc2UgMHgwMEU2OiByZXR1cm4o KENIQVIpMjMwKTsKLSAgICAgIGNhc2UgMHgwMEU5OiByZXR1cm4oKENIQVIpMjMzKTsKLSAgICAg IGNhc2UgMHgwMEVCOiByZXR1cm4oKENIQVIpMjM1KTsKLSAgICAgIGNhc2UgMHgwMEVEOiByZXR1 cm4oKENIQVIpMjM3KTsKLSAgICAgIGNhc2UgMHgwMEVFOiByZXR1cm4oKENIQVIpMjM4KTsKLSAg ICAgIGNhc2UgMHgwMEY0OiByZXR1cm4oKENIQVIpMjQ0KTsKLSAgICAgIGNhc2UgMHgwMEY1OiBy ZXR1cm4oKENIQVIpMjQ1KTsKLSAgICAgIGNhc2UgMHgwMEY2OiByZXR1cm4oKENIQVIpMjQ2KTsK LSAgICAgIGNhc2UgMHgwMEY3OiByZXR1cm4oKENIQVIpMjQ3KTsKLSAgICAgIGNhc2UgMHgwMEY4 OiByZXR1cm4oKENIQVIpMjQ4KTsKLSAgICAgIGNhc2UgMHgwMEZBOiByZXR1cm4oKENIQVIpMjUw KTsKLSAgICAgIGNhc2UgMHgwMEZCOiByZXR1cm4oKENIQVIpMjUxKTsKLSAgICAgIGNhc2UgMHgw MEZDOiByZXR1cm4oKENIQVIpMjUyKTsKLSAgICAgIGNhc2UgMHgwMTAwOiByZXR1cm4oKENIQVIp MTkyKTsKLSAgICAgIGNhc2UgMHgwMTAxOiByZXR1cm4oKENIQVIpMjI0KTsKLSAgICAgIGNhc2Ug MHgwMTA0OiByZXR1cm4oKENIQVIpMTYxKTsKLSAgICAgIGNhc2UgMHgwMTA1OiByZXR1cm4oKENI QVIpMTc3KTsKLSAgICAgIGNhc2UgMHgwMTBDOiByZXR1cm4oKENIQVIpMjAwKTsKLSAgICAgIGNh c2UgMHgwMTBEOiByZXR1cm4oKENIQVIpMjMyKTsKLSAgICAgIGNhc2UgMHgwMTEwOiByZXR1cm4o KENIQVIpMjA4KTsKLSAgICAgIGNhc2UgMHgwMTExOiByZXR1cm4oKENIQVIpMjQwKTsKLSAgICAg IGNhc2UgMHgwMTEyOiByZXR1cm4oKENIQVIpMTcwKTsKLSAgICAgIGNhc2UgMHgwMTEzOiByZXR1 cm4oKENIQVIpMTg2KTsKLSAgICAgIGNhc2UgMHgwMTE2OiByZXR1cm4oKENIQVIpMjA0KTsKLSAg ICAgIGNhc2UgMHgwMTE3OiByZXR1cm4oKENIQVIpMjM2KTsKLSAgICAgIGNhc2UgMHgwMTE4OiBy ZXR1cm4oKENIQVIpMjAyKTsKLSAgICAgIGNhc2UgMHgwMTE5OiByZXR1cm4oKENIQVIpMjM0KTsK LSAgICAgIGNhc2UgMHgwMTIyOiByZXR1cm4oKENIQVIpMTcxKTsKLSAgICAgIGNhc2UgMHgwMTIz OiByZXR1cm4oKENIQVIpMTg3KTsKLSAgICAgIGNhc2UgMHgwMTI4OiByZXR1cm4oKENIQVIpMTY1 KTsKLSAgICAgIGNhc2UgMHgwMTI5OiByZXR1cm4oKENIQVIpMTgxKTsKLSAgICAgIGNhc2UgMHgw MTJBOiByZXR1cm4oKENIQVIpMjA3KTsKLSAgICAgIGNhc2UgMHgwMTJCOiByZXR1cm4oKENIQVIp MjM5KTsKLSAgICAgIGNhc2UgMHgwMTJFOiByZXR1cm4oKENIQVIpMTk5KTsKLSAgICAgIGNhc2Ug MHgwMTJGOiByZXR1cm4oKENIQVIpMjMxKTsKLSAgICAgIGNhc2UgMHgwMTM2OiByZXR1cm4oKENI QVIpMjExKTsKLSAgICAgIGNhc2UgMHgwMTM3OiByZXR1cm4oKENIQVIpMjQzKTsKLSAgICAgIGNh c2UgMHgwMTM4OiByZXR1cm4oKENIQVIpMTYyKTsKLSAgICAgIGNhc2UgMHgwMTNCOiByZXR1cm4o KENIQVIpMTY2KTsKLSAgICAgIGNhc2UgMHgwMTNDOiByZXR1cm4oKENIQVIpMTgyKTsKLSAgICAg IGNhc2UgMHgwMTQ1OiByZXR1cm4oKENIQVIpMjA5KTsKLSAgICAgIGNhc2UgMHgwMTQ2OiByZXR1 cm4oKENIQVIpMjQxKTsKLSAgICAgIGNhc2UgMHgwMTRBOiByZXR1cm4oKENIQVIpMTg5KTsKLSAg ICAgIGNhc2UgMHgwMTRCOiByZXR1cm4oKENIQVIpMTkxKTsKLSAgICAgIGNhc2UgMHgwMTRDOiBy ZXR1cm4oKENIQVIpMjEwKTsKLSAgICAgIGNhc2UgMHgwMTREOiByZXR1cm4oKENIQVIpMjQyKTsK LSAgICAgIGNhc2UgMHgwMTU2OiByZXR1cm4oKENIQVIpMTYzKTsKLSAgICAgIGNhc2UgMHgwMTU3 OiByZXR1cm4oKENIQVIpMTc5KTsKLSAgICAgIGNhc2UgMHgwMTYwOiByZXR1cm4oKENIQVIpMTY5 KTsKLSAgICAgIGNhc2UgMHgwMTYxOiByZXR1cm4oKENIQVIpMTg1KTsKLSAgICAgIGNhc2UgMHgw MTY2OiByZXR1cm4oKENIQVIpMTcyKTsKLSAgICAgIGNhc2UgMHgwMTY3OiByZXR1cm4oKENIQVIp MTg4KTsKLSAgICAgIGNhc2UgMHgwMTY4OiByZXR1cm4oKENIQVIpMjIxKTsKLSAgICAgIGNhc2Ug MHgwMTY5OiByZXR1cm4oKENIQVIpMjUzKTsKLSAgICAgIGNhc2UgMHgwMTZBOiByZXR1cm4oKENI QVIpMjIyKTsKLSAgICAgIGNhc2UgMHgwMTZCOiByZXR1cm4oKENIQVIpMjU0KTsKLSAgICAgIGNh c2UgMHgwMTcyOiByZXR1cm4oKENIQVIpMjE3KTsKLSAgICAgIGNhc2UgMHgwMTczOiByZXR1cm4o KENIQVIpMjQ5KTsKLSAgICAgIGNhc2UgMHgwMTdEOiByZXR1cm4oKENIQVIpMTc0KTsKLSAgICAg IGNhc2UgMHgwMTdFOiByZXR1cm4oKENIQVIpMTkwKTsKLSAgICAgIGNhc2UgMHgwMkM3OiByZXR1 cm4oKENIQVIpMTgzKTsKLSAgICAgIGNhc2UgMHgwMkQ5OiByZXR1cm4oKENIQVIpMjU1KTsKLSAg ICAgIGNhc2UgMHgwMkRCOiByZXR1cm4oKENIQVIpMTc4KTsKLSAgICAgIGRlZmF1bHQ6IHJldHVy bih0eF9wdW5jKGMpKTsKLSAgICB9Ci19Ci0KLWludCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBJU08gODg1OS01IChMYXRpbi9DeXJpbGxpYykgKi8KLSNpZmRlZiBDS19B TlNJQwotdHhfODg1OV81KFVTSE9SVCBjKQotI2Vsc2UKLXR4Xzg4NTlfNShjKSBVU0hPUlQgYzsK LSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjIDwgMHhhMCkgICAgICAgICAgICAg ICAgICAgICAgIC8qICg4ODU5LTUgaXMgbm90IExhdGluLTUhKSAqLwotICAgICAgcmV0dXJuKChD SEFSKShjICYgMHhmZikpOwotICAgIHN3aXRjaChjKSB7Ci0gICAgICBjYXNlIDB4MDBBMDogcmV0 dXJuKChDSEFSKTE2MCk7Ci0gICAgICBjYXNlIDB4MDBBNzogcmV0dXJuKChDSEFSKTI1Myk7Ci0g ICAgICBjYXNlIDB4MDBBRDogcmV0dXJuKChDSEFSKTE3Myk7Ci0gICAgICBjYXNlIDB4MDQwMTog cmV0dXJuKChDSEFSKTE2MSk7Ci0gICAgICBjYXNlIDB4MDQwMjogcmV0dXJuKChDSEFSKTE2Mik7 Ci0gICAgICBjYXNlIDB4MDQwMzogcmV0dXJuKChDSEFSKTE2Myk7Ci0gICAgICBjYXNlIDB4MDQw NDogcmV0dXJuKChDSEFSKTE2NCk7Ci0gICAgICBjYXNlIDB4MDQwNTogcmV0dXJuKChDSEFSKTE2 NSk7Ci0gICAgICBjYXNlIDB4MDQwNjogcmV0dXJuKChDSEFSKTE2Nik7Ci0gICAgICBjYXNlIDB4 MDQwNzogcmV0dXJuKChDSEFSKTE2Nyk7Ci0gICAgICBjYXNlIDB4MDQwODogcmV0dXJuKChDSEFS KTE2OCk7Ci0gICAgICBjYXNlIDB4MDQwOTogcmV0dXJuKChDSEFSKTE2OSk7Ci0gICAgICBjYXNl IDB4MDQwQTogcmV0dXJuKChDSEFSKTE3MCk7Ci0gICAgICBjYXNlIDB4MDQwQjogcmV0dXJuKChD SEFSKTE3MSk7Ci0gICAgICBjYXNlIDB4MDQwQzogcmV0dXJuKChDSEFSKTE3Mik7Ci0gICAgICBj YXNlIDB4MDQwRTogcmV0dXJuKChDSEFSKTE3NCk7Ci0gICAgICBjYXNlIDB4MDQwRjogcmV0dXJu KChDSEFSKTE3NSk7Ci0gICAgICBjYXNlIDB4MDQxMDogcmV0dXJuKChDSEFSKTE3Nik7Ci0gICAg ICBjYXNlIDB4MDQxMTogcmV0dXJuKChDSEFSKTE3Nyk7Ci0gICAgICBjYXNlIDB4MDQxMjogcmV0 dXJuKChDSEFSKTE3OCk7Ci0gICAgICBjYXNlIDB4MDQxMzogcmV0dXJuKChDSEFSKTE3OSk7Ci0g ICAgICBjYXNlIDB4MDQxNDogcmV0dXJuKChDSEFSKTE4MCk7Ci0gICAgICBjYXNlIDB4MDQxNTog cmV0dXJuKChDSEFSKTE4MSk7Ci0gICAgICBjYXNlIDB4MDQxNjogcmV0dXJuKChDSEFSKTE4Mik7 Ci0gICAgICBjYXNlIDB4MDQxNzogcmV0dXJuKChDSEFSKTE4Myk7Ci0gICAgICBjYXNlIDB4MDQx ODogcmV0dXJuKChDSEFSKTE4NCk7Ci0gICAgICBjYXNlIDB4MDQxOTogcmV0dXJuKChDSEFSKTE4 NSk7Ci0gICAgICBjYXNlIDB4MDQxQTogcmV0dXJuKChDSEFSKTE4Nik7Ci0gICAgICBjYXNlIDB4 MDQxQjogcmV0dXJuKChDSEFSKTE4Nyk7Ci0gICAgICBjYXNlIDB4MDQxQzogcmV0dXJuKChDSEFS KTE4OCk7Ci0gICAgICBjYXNlIDB4MDQxRDogcmV0dXJuKChDSEFSKTE4OSk7Ci0gICAgICBjYXNl IDB4MDQxRTogcmV0dXJuKChDSEFSKTE5MCk7Ci0gICAgICBjYXNlIDB4MDQxRjogcmV0dXJuKChD SEFSKTE5MSk7Ci0gICAgICBjYXNlIDB4MDQyMDogcmV0dXJuKChDSEFSKTE5Mik7Ci0gICAgICBj YXNlIDB4MDQyMTogcmV0dXJuKChDSEFSKTE5Myk7Ci0gICAgICBjYXNlIDB4MDQyMjogcmV0dXJu KChDSEFSKTE5NCk7Ci0gICAgICBjYXNlIDB4MDQyMzogcmV0dXJuKChDSEFSKTE5NSk7Ci0gICAg ICBjYXNlIDB4MDQyNDogcmV0dXJuKChDSEFSKTE5Nik7Ci0gICAgICBjYXNlIDB4MDQyNTogcmV0 dXJuKChDSEFSKTE5Nyk7Ci0gICAgICBjYXNlIDB4MDQyNjogcmV0dXJuKChDSEFSKTE5OCk7Ci0g ICAgICBjYXNlIDB4MDQyNzogcmV0dXJuKChDSEFSKTE5OSk7Ci0gICAgICBjYXNlIDB4MDQyODog cmV0dXJuKChDSEFSKTIwMCk7Ci0gICAgICBjYXNlIDB4MDQyOTogcmV0dXJuKChDSEFSKTIwMSk7 Ci0gICAgICBjYXNlIDB4MDQyQTogcmV0dXJuKChDSEFSKTIwMik7Ci0gICAgICBjYXNlIDB4MDQy QjogcmV0dXJuKChDSEFSKTIwMyk7Ci0gICAgICBjYXNlIDB4MDQyQzogcmV0dXJuKChDSEFSKTIw NCk7Ci0gICAgICBjYXNlIDB4MDQyRDogcmV0dXJuKChDSEFSKTIwNSk7Ci0gICAgICBjYXNlIDB4 MDQyRTogcmV0dXJuKChDSEFSKTIwNik7Ci0gICAgICBjYXNlIDB4MDQyRjogcmV0dXJuKChDSEFS KTIwNyk7Ci0gICAgICBjYXNlIDB4MDQzMDogcmV0dXJuKChDSEFSKTIwOCk7Ci0gICAgICBjYXNl IDB4MDQzMTogcmV0dXJuKChDSEFSKTIwOSk7Ci0gICAgICBjYXNlIDB4MDQzMjogcmV0dXJuKChD SEFSKTIxMCk7Ci0gICAgICBjYXNlIDB4MDQzMzogcmV0dXJuKChDSEFSKTIxMSk7Ci0gICAgICBj YXNlIDB4MDQzNDogcmV0dXJuKChDSEFSKTIxMik7Ci0gICAgICBjYXNlIDB4MDQzNTogcmV0dXJu KChDSEFSKTIxMyk7Ci0gICAgICBjYXNlIDB4MDQzNjogcmV0dXJuKChDSEFSKTIxNCk7Ci0gICAg ICBjYXNlIDB4MDQzNzogcmV0dXJuKChDSEFSKTIxNSk7Ci0gICAgICBjYXNlIDB4MDQzODogcmV0 dXJuKChDSEFSKTIxNik7Ci0gICAgICBjYXNlIDB4MDQzOTogcmV0dXJuKChDSEFSKTIxNyk7Ci0g ICAgICBjYXNlIDB4MDQzQTogcmV0dXJuKChDSEFSKTIxOCk7Ci0gICAgICBjYXNlIDB4MDQzQjog cmV0dXJuKChDSEFSKTIxOSk7Ci0gICAgICBjYXNlIDB4MDQzQzogcmV0dXJuKChDSEFSKTIyMCk7 Ci0gICAgICBjYXNlIDB4MDQzRDogcmV0dXJuKChDSEFSKTIyMSk7Ci0gICAgICBjYXNlIDB4MDQz RTogcmV0dXJuKChDSEFSKTIyMik7Ci0gICAgICBjYXNlIDB4MDQzRjogcmV0dXJuKChDSEFSKTIy Myk7Ci0gICAgICBjYXNlIDB4MDQ0MDogcmV0dXJuKChDSEFSKTIyNCk7Ci0gICAgICBjYXNlIDB4 MDQ0MTogcmV0dXJuKChDSEFSKTIyNSk7Ci0gICAgICBjYXNlIDB4MDQ0MjogcmV0dXJuKChDSEFS KTIyNik7Ci0gICAgICBjYXNlIDB4MDQ0MzogcmV0dXJuKChDSEFSKTIyNyk7Ci0gICAgICBjYXNl IDB4MDQ0NDogcmV0dXJuKChDSEFSKTIyOCk7Ci0gICAgICBjYXNlIDB4MDQ0NTogcmV0dXJuKChD SEFSKTIyOSk7Ci0gICAgICBjYXNlIDB4MDQ0NjogcmV0dXJuKChDSEFSKTIzMCk7Ci0gICAgICBj YXNlIDB4MDQ0NzogcmV0dXJuKChDSEFSKTIzMSk7Ci0gICAgICBjYXNlIDB4MDQ0ODogcmV0dXJu KChDSEFSKTIzMik7Ci0gICAgICBjYXNlIDB4MDQ0OTogcmV0dXJuKChDSEFSKTIzMyk7Ci0gICAg ICBjYXNlIDB4MDQ0QTogcmV0dXJuKChDSEFSKTIzNCk7Ci0gICAgICBjYXNlIDB4MDQ0QjogcmV0 dXJuKChDSEFSKTIzNSk7Ci0gICAgICBjYXNlIDB4MDQ0QzogcmV0dXJuKChDSEFSKTIzNik7Ci0g ICAgICBjYXNlIDB4MDQ0RDogcmV0dXJuKChDSEFSKTIzNyk7Ci0gICAgICBjYXNlIDB4MDQ0RTog cmV0dXJuKChDSEFSKTIzOCk7Ci0gICAgICBjYXNlIDB4MDQ0RjogcmV0dXJuKChDSEFSKTIzOSk7 Ci0gICAgICBjYXNlIDB4MDQ1MTogcmV0dXJuKChDSEFSKTI0MSk7Ci0gICAgICBjYXNlIDB4MDQ1 MjogcmV0dXJuKChDSEFSKTI0Mik7Ci0gICAgICBjYXNlIDB4MDQ1MzogcmV0dXJuKChDSEFSKTI0 Myk7Ci0gICAgICBjYXNlIDB4MDQ1NDogcmV0dXJuKChDSEFSKTI0NCk7Ci0gICAgICBjYXNlIDB4 MDQ1NTogcmV0dXJuKChDSEFSKTI0NSk7Ci0gICAgICBjYXNlIDB4MDQ1NjogcmV0dXJuKChDSEFS KTI0Nik7Ci0gICAgICBjYXNlIDB4MDQ1NzogcmV0dXJuKChDSEFSKTI0Nyk7Ci0gICAgICBjYXNl IDB4MDQ1ODogcmV0dXJuKChDSEFSKTI0OCk7Ci0gICAgICBjYXNlIDB4MDQ1OTogcmV0dXJuKChD SEFSKTI0OSk7Ci0gICAgICBjYXNlIDB4MDQ1QTogcmV0dXJuKChDSEFSKTI1MCk7Ci0gICAgICBj YXNlIDB4MDQ1QjogcmV0dXJuKChDSEFSKTI1MSk7Ci0gICAgICBjYXNlIDB4MDQ1QzogcmV0dXJu KChDSEFSKTI1Mik7Ci0gICAgICBjYXNlIDB4MDQ1RTogcmV0dXJuKChDSEFSKTI1NCk7Ci0gICAg ICBjYXNlIDB4MDQ1RjogcmV0dXJuKChDSEFSKTI1NSk7Ci0gICAgICBjYXNlIDB4MjExNjogcmV0 dXJuKChDSEFSKTI0MCk7Ci0gICAgICBkZWZhdWx0OiByZXR1cm4odHhfcHVuYyhjKSk7Ci0gICAg fQotfQotCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVNPIDg4 NTktNiAoTGF0aW4vQXJhYmljKSAqLwotI2lmZGVmIENLX0FOU0lDCi10eF84ODU5XzYoVVNIT1JU IGMpCi0jZWxzZQotdHhfODg1OV82KGMpIFVTSE9SVCBjOwotI2VuZGlmIC8qIENLX0FOU0lDICov Ci17Ci0gICAgaWYgKGMgPCAweGEwKSAgICAgICAgICAgICAgICAgICAgICAgLyogKDg4NTktNiAh PSBMYXRpbi02KSAqLwotICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOwotICAgIHN3aXRj aChjKSB7Ci0gICAgICBjYXNlIDB4MDBBMDogcmV0dXJuKChDSEFSKTE2MCk7Ci0gICAgICBjYXNl IDB4MDBBNDogcmV0dXJuKChDSEFSKTE2NCk7Ci0gICAgICBjYXNlIDB4MDBBRDogcmV0dXJuKChD SEFSKTE3Myk7Ci0gICAgICBjYXNlIDB4MDYwQzogcmV0dXJuKChDSEFSKTE3Mik7Ci0gICAgICBj YXNlIDB4MDYxQjogcmV0dXJuKChDSEFSKTE4Nyk7Ci0gICAgICBjYXNlIDB4MDYxRjogcmV0dXJu KChDSEFSKTE5MSk7Ci0gICAgICBjYXNlIDB4MDYyMTogcmV0dXJuKChDSEFSKTE5Myk7Ci0gICAg ICBjYXNlIDB4MDYyMjogcmV0dXJuKChDSEFSKTE5NCk7Ci0gICAgICBjYXNlIDB4MDYyMzogcmV0 dXJuKChDSEFSKTE5NSk7Ci0gICAgICBjYXNlIDB4MDYyNDogcmV0dXJuKChDSEFSKTE5Nik7Ci0g ICAgICBjYXNlIDB4MDYyNTogcmV0dXJuKChDSEFSKTE5Nyk7Ci0gICAgICBjYXNlIDB4MDYyNjog cmV0dXJuKChDSEFSKTE5OCk7Ci0gICAgICBjYXNlIDB4MDYyNzogcmV0dXJuKChDSEFSKTE5OSk7 Ci0gICAgICBjYXNlIDB4MDYyODogcmV0dXJuKChDSEFSKTIwMCk7Ci0gICAgICBjYXNlIDB4MDYy OTogcmV0dXJuKChDSEFSKTIwMSk7Ci0gICAgICBjYXNlIDB4MDYyQTogcmV0dXJuKChDSEFSKTIw Mik7Ci0gICAgICBjYXNlIDB4MDYyQjogcmV0dXJuKChDSEFSKTIwMyk7Ci0gICAgICBjYXNlIDB4 MDYyQzogcmV0dXJuKChDSEFSKTIwNCk7Ci0gICAgICBjYXNlIDB4MDYyRDogcmV0dXJuKChDSEFS KTIwNSk7Ci0gICAgICBjYXNlIDB4MDYyRTogcmV0dXJuKChDSEFSKTIwNik7Ci0gICAgICBjYXNl IDB4MDYyRjogcmV0dXJuKChDSEFSKTIwNyk7Ci0gICAgICBjYXNlIDB4MDYzMDogcmV0dXJuKChD SEFSKTIwOCk7Ci0gICAgICBjYXNlIDB4MDYzMTogcmV0dXJuKChDSEFSKTIwOSk7Ci0gICAgICBj YXNlIDB4MDYzMjogcmV0dXJuKChDSEFSKTIxMCk7Ci0gICAgICBjYXNlIDB4MDYzMzogcmV0dXJu KChDSEFSKTIxMSk7Ci0gICAgICBjYXNlIDB4MDYzNDogcmV0dXJuKChDSEFSKTIxMik7Ci0gICAg ICBjYXNlIDB4MDYzNTogcmV0dXJuKChDSEFSKTIxMyk7Ci0gICAgICBjYXNlIDB4MDYzNjogcmV0 dXJuKChDSEFSKTIxNCk7Ci0gICAgICBjYXNlIDB4MDYzNzogcmV0dXJuKChDSEFSKTIxNSk7Ci0g ICAgICBjYXNlIDB4MDYzODogcmV0dXJuKChDSEFSKTIxNik7Ci0gICAgICBjYXNlIDB4MDYzOTog cmV0dXJuKChDSEFSKTIxNyk7Ci0gICAgICBjYXNlIDB4MDYzQTogcmV0dXJuKChDSEFSKTIxOCk7 Ci0gICAgICBjYXNlIDB4MDY0MDogcmV0dXJuKChDSEFSKTIyNCk7Ci0gICAgICBjYXNlIDB4MDY0 MTogcmV0dXJuKChDSEFSKTIyNSk7Ci0gICAgICBjYXNlIDB4MDY0MjogcmV0dXJuKChDSEFSKTIy Nik7Ci0gICAgICBjYXNlIDB4MDY0MzogcmV0dXJuKChDSEFSKTIyNyk7Ci0gICAgICBjYXNlIDB4 MDY0NDogcmV0dXJuKChDSEFSKTIyOCk7Ci0gICAgICBjYXNlIDB4MDY0NTogcmV0dXJuKChDSEFS KTIyOSk7Ci0gICAgICBjYXNlIDB4MDY0NjogcmV0dXJuKChDSEFSKTIzMCk7Ci0gICAgICBjYXNl IDB4MDY0NzogcmV0dXJuKChDSEFSKTIzMSk7Ci0gICAgICBjYXNlIDB4MDY0ODogcmV0dXJuKChD SEFSKTIzMik7Ci0gICAgICBjYXNlIDB4MDY0OTogcmV0dXJuKChDSEFSKTIzMyk7Ci0gICAgICBj YXNlIDB4MDY0QTogcmV0dXJuKChDSEFSKTIzNCk7Ci0gICAgICBjYXNlIDB4MDY0QjogcmV0dXJu KChDSEFSKTIzNSk7Ci0gICAgICBjYXNlIDB4MDY0QzogcmV0dXJuKChDSEFSKTIzNik7Ci0gICAg ICBjYXNlIDB4MDY0RDogcmV0dXJuKChDSEFSKTIzNyk7Ci0gICAgICBjYXNlIDB4MDY0RTogcmV0 dXJuKChDSEFSKTIzOCk7Ci0gICAgICBjYXNlIDB4MDY0RjogcmV0dXJuKChDSEFSKTIzOSk7Ci0g ICAgICBjYXNlIDB4MDY1MDogcmV0dXJuKChDSEFSKTI0MCk7Ci0gICAgICBjYXNlIDB4MDY1MTog cmV0dXJuKChDSEFSKTI0MSk7Ci0gICAgICBjYXNlIDB4MDY1MjogcmV0dXJuKChDSEFSKTI0Mik7 Ci0gICAgICBkZWZhdWx0OiByZXR1cm4odHhfcHVuYyhjKSk7Ci0gICAgfQotfQotCi1pbnQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVNPIDg4NTktNyAoTGF0aW4vR3Jl ZWspICovCi0jaWZkZWYgQ0tfQU5TSUMKLXR4Xzg4NTlfNyhVU0hPUlQgYykKLSNlbHNlCi10eF84 ODU5XzcoYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA8 IDB4YTApCi0gICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7Ci0gICAgc3dpdGNoKGMpIHsK LSAgICAgICAgY2FzZSAweDAwYTA6IHJldHVybigoQ0hBUikxNjApOwotICAgICAgICBjYXNlIDB4 MDBhMzogcmV0dXJuKChDSEFSKTE2Myk7Ci0gICAgICAgIGNhc2UgMHgwMGE2OiByZXR1cm4oKENI QVIpMTY2KTsKLSAgICAgICAgY2FzZSAweDAwYTc6IHJldHVybigoQ0hBUikxNjcpOwotICAgICAg ICBjYXNlIDB4MDBhODogcmV0dXJuKChDSEFSKTE2OCk7Ci0gICAgICAgIGNhc2UgMHgwMGE5OiBy ZXR1cm4oKENIQVIpMTY5KTsKLSAgICAgICAgY2FzZSAweDAwYWI6IHJldHVybigoQ0hBUikxNzEp OwotICAgICAgICBjYXNlIDB4MDBhYzogcmV0dXJuKChDSEFSKTE3Mik7Ci0gICAgICAgIGNhc2Ug MHgwMGFkOiByZXR1cm4oKENIQVIpMTczKTsKLSAgICAgICAgY2FzZSAweDAwYjA6IHJldHVybigo Q0hBUikxNzYpOwotICAgICAgICBjYXNlIDB4MDBiMTogcmV0dXJuKChDSEFSKTE3Nyk7Ci0gICAg ICAgIGNhc2UgMHgwMGIyOiByZXR1cm4oKENIQVIpMTc4KTsKLSAgICAgICAgY2FzZSAweDAwYjM6 IHJldHVybigoQ0hBUikxNzkpOwotICAgICAgICBjYXNlIDB4MDBiNzogcmV0dXJuKChDSEFSKTE4 Myk7Ci0gICAgICAgIGNhc2UgMHgwMGJiOiByZXR1cm4oKENIQVIpMTg3KTsKLSAgICAgICAgY2Fz ZSAweDAwYmQ6IHJldHVybigoQ0hBUikxODkpOwotICAgICAgICBjYXNlIDB4MDJiYzogcmV0dXJu KChDSEFSKTE2Mik7Ci0gICAgICAgIGNhc2UgMHgwMmJkOiByZXR1cm4oKENIQVIpMTYxKTsKLSAg ICAgICAgY2FzZSAweDAzODQ6IHJldHVybigoQ0hBUikxODApOwotICAgICAgICBjYXNlIDB4MDM4 NTogcmV0dXJuKChDSEFSKTE4MSk7Ci0gICAgICAgIGNhc2UgMHgwMzg2OiByZXR1cm4oKENIQVIp MTgyKTsKLSAgICAgICAgY2FzZSAweDAzODg6IHJldHVybigoQ0hBUikxODQpOwotICAgICAgICBj YXNlIDB4MDM4OTogcmV0dXJuKChDSEFSKTE4NSk7Ci0gICAgICAgIGNhc2UgMHgwMzhhOiByZXR1 cm4oKENIQVIpMTg2KTsKLSAgICAgICAgY2FzZSAweDAzOGM6IHJldHVybigoQ0hBUikxODgpOwot ICAgICAgICBjYXNlIDB4MDM4ZTogcmV0dXJuKChDSEFSKTE5MCk7Ci0gICAgICAgIGNhc2UgMHgw MzhmOiByZXR1cm4oKENIQVIpMTkxKTsKLSAgICAgICAgY2FzZSAweDAzOTA6IHJldHVybigoQ0hB UikxOTIpOwotICAgICAgICBjYXNlIDB4MDM5MTogcmV0dXJuKChDSEFSKTE5Myk7Ci0gICAgICAg IGNhc2UgMHgwMzkyOiByZXR1cm4oKENIQVIpMTk0KTsKLSAgICAgICAgY2FzZSAweDAzOTM6IHJl dHVybigoQ0hBUikxOTUpOwotICAgICAgICBjYXNlIDB4MDM5NDogcmV0dXJuKChDSEFSKTE5Nik7 Ci0gICAgICAgIGNhc2UgMHgwMzk1OiByZXR1cm4oKENIQVIpMTk3KTsKLSAgICAgICAgY2FzZSAw eDAzOTY6IHJldHVybigoQ0hBUikxOTgpOwotICAgICAgICBjYXNlIDB4MDM5NzogcmV0dXJuKChD SEFSKTE5OSk7Ci0gICAgICAgIGNhc2UgMHgwMzk4OiByZXR1cm4oKENIQVIpMjAwKTsKLSAgICAg ICAgY2FzZSAweDAzOTk6IHJldHVybigoQ0hBUikyMDEpOwotICAgICAgICBjYXNlIDB4MDM5YTog cmV0dXJuKChDSEFSKTIwMik7Ci0gICAgICAgIGNhc2UgMHgwMzliOiByZXR1cm4oKENIQVIpMjAz KTsKLSAgICAgICAgY2FzZSAweDAzOWM6IHJldHVybigoQ0hBUikyMDQpOwotICAgICAgICBjYXNl IDB4MDM5ZDogcmV0dXJuKChDSEFSKTIwNSk7Ci0gICAgICAgIGNhc2UgMHgwMzllOiByZXR1cm4o KENIQVIpMjA2KTsKLSAgICAgICAgY2FzZSAweDAzOWY6IHJldHVybigoQ0hBUikyMDcpOwotICAg ICAgICBjYXNlIDB4MDNhMDogcmV0dXJuKChDSEFSKTIwOCk7Ci0gICAgICAgIGNhc2UgMHgwM2Ex OiByZXR1cm4oKENIQVIpMjA5KTsKLSAgICAgICAgY2FzZSAweDAzYTM6IHJldHVybigoQ0hBUiky MTEpOwotICAgICAgICBjYXNlIDB4MDNhNDogcmV0dXJuKChDSEFSKTIxMik7Ci0gICAgICAgIGNh c2UgMHgwM2E1OiByZXR1cm4oKENIQVIpMjEzKTsKLSAgICAgICAgY2FzZSAweDAzYTY6IHJldHVy bigoQ0hBUikyMTQpOwotICAgICAgICBjYXNlIDB4MDNhNzogcmV0dXJuKChDSEFSKTIxNSk7Ci0g ICAgICAgIGNhc2UgMHgwM2E4OiByZXR1cm4oKENIQVIpMjE2KTsKLSAgICAgICAgY2FzZSAweDAz YTk6IHJldHVybigoQ0hBUikyMTcpOwotICAgICAgICBjYXNlIDB4MDNhYTogcmV0dXJuKChDSEFS KTIxOCk7Ci0gICAgICAgIGNhc2UgMHgwM2FiOiByZXR1cm4oKENIQVIpMjE5KTsKLSAgICAgICAg Y2FzZSAweDAzYWM6IHJldHVybigoQ0hBUikyMjApOwotICAgICAgICBjYXNlIDB4MDNhZDogcmV0 dXJuKChDSEFSKTIyMSk7Ci0gICAgICAgIGNhc2UgMHgwM2FlOiByZXR1cm4oKENIQVIpMjIyKTsK LSAgICAgICAgY2FzZSAweDAzYWY6IHJldHVybigoQ0hBUikyMjMpOwotICAgICAgICBjYXNlIDB4 MDNiMDogcmV0dXJuKChDSEFSKTIyNCk7Ci0gICAgICAgIGNhc2UgMHgwM2IxOiByZXR1cm4oKENI QVIpMjI1KTsKLSAgICAgICAgY2FzZSAweDAzYjI6IHJldHVybigoQ0hBUikyMjYpOwotICAgICAg ICBjYXNlIDB4MDNiMzogcmV0dXJuKChDSEFSKTIyNyk7Ci0gICAgICAgIGNhc2UgMHgwM2I0OiBy ZXR1cm4oKENIQVIpMjI4KTsKLSAgICAgICAgY2FzZSAweDAzYjU6IHJldHVybigoQ0hBUikyMjkp OwotICAgICAgICBjYXNlIDB4MDNiNjogcmV0dXJuKChDSEFSKTIzMCk7Ci0gICAgICAgIGNhc2Ug MHgwM2I3OiByZXR1cm4oKENIQVIpMjMxKTsKLSAgICAgICAgY2FzZSAweDAzYjg6IHJldHVybigo Q0hBUikyMzIpOwotICAgICAgICBjYXNlIDB4MDNiOTogcmV0dXJuKChDSEFSKTIzMyk7Ci0gICAg ICAgIGNhc2UgMHgwM2JhOiByZXR1cm4oKENIQVIpMjM0KTsKLSAgICAgICAgY2FzZSAweDAzYmI6 IHJldHVybigoQ0hBUikyMzUpOwotICAgICAgICBjYXNlIDB4MDNiYzogcmV0dXJuKChDSEFSKTIz Nik7Ci0gICAgICAgIGNhc2UgMHgwM2JkOiByZXR1cm4oKENIQVIpMjM3KTsKLSAgICAgICAgY2Fz ZSAweDAzYmU6IHJldHVybigoQ0hBUikyMzgpOwotICAgICAgICBjYXNlIDB4MDNiZjogcmV0dXJu KChDSEFSKTIzOSk7Ci0gICAgICAgIGNhc2UgMHgwM2MwOiByZXR1cm4oKENIQVIpMjQwKTsKLSAg ICAgICAgY2FzZSAweDAzYzE6IHJldHVybigoQ0hBUikyNDEpOwotICAgICAgICBjYXNlIDB4MDNj MjogcmV0dXJuKChDSEFSKTI0Mik7Ci0gICAgICAgIGNhc2UgMHgwM2MzOiByZXR1cm4oKENIQVIp MjQzKTsKLSAgICAgICAgY2FzZSAweDAzYzQ6IHJldHVybigoQ0hBUikyNDQpOwotICAgICAgICBj YXNlIDB4MDNjNTogcmV0dXJuKChDSEFSKTI0NSk7Ci0gICAgICAgIGNhc2UgMHgwM2M2OiByZXR1 cm4oKENIQVIpMjQ2KTsKLSAgICAgICAgY2FzZSAweDAzYzc6IHJldHVybigoQ0hBUikyNDcpOwot ICAgICAgICBjYXNlIDB4MDNjODogcmV0dXJuKChDSEFSKTI0OCk7Ci0gICAgICAgIGNhc2UgMHgw M2M5OiByZXR1cm4oKENIQVIpMjQ5KTsKLSAgICAgICAgY2FzZSAweDAzY2E6IHJldHVybigoQ0hB UikyNTApOwotICAgICAgICBjYXNlIDB4MDNjYjogcmV0dXJuKChDSEFSKTI1MSk7Ci0gICAgICAg IGNhc2UgMHgwM2NjOiByZXR1cm4oKENIQVIpMjUyKTsKLSAgICAgICAgY2FzZSAweDAzY2Q6IHJl dHVybigoQ0hBUikyNTMpOwotICAgICAgICBjYXNlIDB4MDNjZTogcmV0dXJuKChDSEFSKTI1NCk7 Ci0gICAgICAgIGNhc2UgMHgyMDE1OiByZXR1cm4oKENIQVIpMTc1KTsKLSAgICAgICAgY2FzZSAw eDIwMTg6IHJldHVybigoQ0hBUikxNjEpOwotICAgICAgICBjYXNlIDB4MjAxOTogcmV0dXJuKChD SEFSKTE2Mik7Ci0gICAgICAgIGRlZmF1bHQ6IHJldHVybih0eF9wdW5jKGMpKTsKLSAgICB9Ci19 Ci0KLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJU08gODg1OS04 IChMYXRpbi9IZWJyZXcpICovCi0jaWZkZWYgQ0tfQU5TSUMKLXR4Xzg4NTlfOChVU0hPUlQgYykK LSNlbHNlCi10eF84ODU5XzgoYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsK LSAgICBpZiAoYyA8IDB4YTApCi0gICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7Ci0gICAg c3dpdGNoKGMpIHsKLSAgICAgIGNhc2UgMHgwMGEwOiByZXR1cm4oKENIQVIpMTYwKTsKLSAgICAg IGNhc2UgMHgwMGEyOiByZXR1cm4oKENIQVIpMTYyKTsKLSAgICAgIGNhc2UgMHgwMGEzOiByZXR1 cm4oKENIQVIpMTYzKTsKLSAgICAgIGNhc2UgMHgwMGE0OiByZXR1cm4oKENIQVIpMTY0KTsKLSAg ICAgIGNhc2UgMHgwMGE1OiByZXR1cm4oKENIQVIpMTY1KTsKLSAgICAgIGNhc2UgMHgwMGE2OiBy ZXR1cm4oKENIQVIpMTY2KTsKLSAgICAgIGNhc2UgMHgwMGE3OiByZXR1cm4oKENIQVIpMTY3KTsK LSAgICAgIGNhc2UgMHgwMGE4OiByZXR1cm4oKENIQVIpMTY4KTsKLSAgICAgIGNhc2UgMHgwMGE5 OiByZXR1cm4oKENIQVIpMTY5KTsKLSAgICAgIGNhc2UgMHgwMGQ3OiByZXR1cm4oKENIQVIpMTcw KTsKLSAgICAgIGNhc2UgMHgwMGFiOiByZXR1cm4oKENIQVIpMTcxKTsKLSAgICAgIGNhc2UgMHgw MGFjOiByZXR1cm4oKENIQVIpMTcyKTsKLSAgICAgIGNhc2UgMHgwMGFkOiByZXR1cm4oKENIQVIp MTczKTsKLSAgICAgIGNhc2UgMHgwMGFlOiByZXR1cm4oKENIQVIpMTc0KTsKLSAgICAgIGNhc2Ug MHgyMDNlOiByZXR1cm4oKENIQVIpMTc1KTsKLSAgICAgIGNhc2UgMHgwMGIwOiByZXR1cm4oKENI QVIpMTc2KTsKLSAgICAgIGNhc2UgMHgwMGIxOiByZXR1cm4oKENIQVIpMTc3KTsKLSAgICAgIGNh c2UgMHgwMGIyOiByZXR1cm4oKENIQVIpMTc4KTsKLSAgICAgIGNhc2UgMHgwMGIzOiByZXR1cm4o KENIQVIpMTc5KTsKLSAgICAgIGNhc2UgMHgwMGI0OiByZXR1cm4oKENIQVIpMTgwKTsKLSAgICAg IGNhc2UgMHgwMGI1OiByZXR1cm4oKENIQVIpMTgxKTsKLSAgICAgIGNhc2UgMHgwMGI2OiByZXR1 cm4oKENIQVIpMTgyKTsKLSAgICAgIGNhc2UgMHgwMGI3OiByZXR1cm4oKENIQVIpMTgzKTsKLSAg ICAgIGNhc2UgMHgwMGI4OiByZXR1cm4oKENIQVIpMTg0KTsKLSAgICAgIGNhc2UgMHgwMGI5OiBy ZXR1cm4oKENIQVIpMTg1KTsKLSAgICAgIGNhc2UgMHgwMGY3OiByZXR1cm4oKENIQVIpMTg2KTsK LSAgICAgIGNhc2UgMHgwMGJiOiByZXR1cm4oKENIQVIpMTg3KTsKLSAgICAgIGNhc2UgMHgwMGJj OiByZXR1cm4oKENIQVIpMTg4KTsKLSAgICAgIGNhc2UgMHgwMGJkOiByZXR1cm4oKENIQVIpMTg5 KTsKLSAgICAgIGNhc2UgMHgwMGJlOiByZXR1cm4oKENIQVIpMTkwKTsKLSAgICAgIGNhc2UgMHgy MDE3OiByZXR1cm4oKENIQVIpMjIzKTsKLSAgICAgIGNhc2UgMHgwNWQwOiByZXR1cm4oKENIQVIp MjI0KTsKLSAgICAgIGNhc2UgMHgwNWQxOiByZXR1cm4oKENIQVIpMjI1KTsKLSAgICAgIGNhc2Ug MHgwNWQyOiByZXR1cm4oKENIQVIpMjI2KTsKLSAgICAgIGNhc2UgMHgwNWQzOiByZXR1cm4oKENI QVIpMjI3KTsKLSAgICAgIGNhc2UgMHgwNWQ0OiByZXR1cm4oKENIQVIpMjI4KTsKLSAgICAgIGNh c2UgMHgwNWQ1OiByZXR1cm4oKENIQVIpMjI5KTsKLSAgICAgIGNhc2UgMHgwNWQ2OiByZXR1cm4o KENIQVIpMjMwKTsKLSAgICAgIGNhc2UgMHgwNWQ3OiByZXR1cm4oKENIQVIpMjMxKTsKLSAgICAg IGNhc2UgMHgwNWQ4OiByZXR1cm4oKENIQVIpMjMyKTsKLSAgICAgIGNhc2UgMHgwNWQ5OiByZXR1 cm4oKENIQVIpMjMzKTsKLSAgICAgIGNhc2UgMHgwNWRhOiByZXR1cm4oKENIQVIpMjM0KTsKLSAg ICAgIGNhc2UgMHgwNWRiOiByZXR1cm4oKENIQVIpMjM1KTsKLSAgICAgIGNhc2UgMHgwNWRjOiBy ZXR1cm4oKENIQVIpMjM2KTsKLSAgICAgIGNhc2UgMHgwNWRkOiByZXR1cm4oKENIQVIpMjM3KTsK LSAgICAgIGNhc2UgMHgwNWRlOiByZXR1cm4oKENIQVIpMjM4KTsKLSAgICAgIGNhc2UgMHgwNWRm OiByZXR1cm4oKENIQVIpMjM5KTsKLSAgICAgIGNhc2UgMHgwNWUwOiByZXR1cm4oKENIQVIpMjQw KTsKLSAgICAgIGNhc2UgMHgwNWUxOiByZXR1cm4oKENIQVIpMjQxKTsKLSAgICAgIGNhc2UgMHgw NWUyOiByZXR1cm4oKENIQVIpMjQyKTsKLSAgICAgIGNhc2UgMHgwNWUzOiByZXR1cm4oKENIQVIp MjQzKTsKLSAgICAgIGNhc2UgMHgwNWU0OiByZXR1cm4oKENIQVIpMjQ0KTsKLSAgICAgIGNhc2Ug MHgwNWU1OiByZXR1cm4oKENIQVIpMjQ1KTsKLSAgICAgIGNhc2UgMHgwNWU2OiByZXR1cm4oKENI QVIpMjQ2KTsKLSAgICAgIGNhc2UgMHgwNWU3OiByZXR1cm4oKENIQVIpMjQ3KTsKLSAgICAgIGNh c2UgMHgwNWU4OiByZXR1cm4oKENIQVIpMjQ4KTsKLSAgICAgIGNhc2UgMHgwNWU5OiByZXR1cm4o KENIQVIpMjQ5KTsKLSAgICAgIGNhc2UgMHgwNWVhOiByZXR1cm4oKENIQVIpMjUwKTsKLSAgICAg IGRlZmF1bHQ6IHJldHVybih0eF9wdW5jKGMpKTsKLSAgICB9Ci19Ci0KLWludCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJU08gODg1OS05IChMYXRpbi00KSAqLwotI2lm ZGVmIENLX0FOU0lDCi10eF84ODU5XzkoVVNIT1JUIGMpCi0jZWxzZQotdHhfODg1OV85KGMpIFVT SE9SVCBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgPCAweGEwKQotICAg ICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOwotICAgIHN3aXRjaChjKSB7Ci0gICAgICBjYXNl IDB4MDExRTogcmV0dXJuKChDSEFSKTIwOCk7ICAgLyogRGlmZmVycyBmcm9tIExhdGluLTEgaW4g Ki8KLSAgICAgIGNhc2UgMHgwMTFGOiByZXR1cm4oKENIQVIpMjQwKTsgICAvKiBvbmx5IHNpeCBw bGFjZXMgKi8KLSAgICAgIGNhc2UgMHgwMTMwOiByZXR1cm4oKENIQVIpMjIxKTsKLSAgICAgIGNh c2UgMHgwMTMxOiByZXR1cm4oKENIQVIpMjUzKTsKLSAgICAgIGNhc2UgMHgwMTVFOiByZXR1cm4o KENIQVIpMjIyKTsKLSAgICAgIGNhc2UgMHgwMTVGOiByZXR1cm4oKENIQVIpMjU0KTsKLSAgICAg IGRlZmF1bHQ6IHJldHVybih0eF9pZGVudChjKSk7Ci0gICAgfQotfQotCi1pbnQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGF0aW4tNiAqLwotI2lmZGVmIENLX0FOU0lD Ci10eF84ODU5XzEwKFVTSE9SVCBjKQotI2Vsc2UKLXR4Xzg4NTlfMTAoYykgVVNIT1JUIGM7Ci0j ZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA8IDB4YTApCi0gICAgICByZXR1cm4o KENIQVIpKGMgJiAweGZmKSk7Ci0gICAgc3dpdGNoKGMpIHsKLSAgICAgIGNhc2UgMHgwMGEwOiBy ZXR1cm4oKENIQVIpMTYwKTsKLSAgICAgIGNhc2UgMHgwMGFkOiByZXR1cm4oKENIQVIpMTczKTsK LSAgICAgIGNhc2UgMHgwMGJkOiByZXR1cm4oKENIQVIpMTg5KTsKLSAgICAgIGNhc2UgMHgwMGJl OiByZXR1cm4oKENIQVIpMTkwKTsKLSAgICAgIGNhc2UgMHgwMGMxOiByZXR1cm4oKENIQVIpMTkz KTsKLSAgICAgIGNhc2UgMHgwMGMyOiByZXR1cm4oKENIQVIpMTk0KTsKLSAgICAgIGNhc2UgMHgw MGMzOiByZXR1cm4oKENIQVIpMTk1KTsKLSAgICAgIGNhc2UgMHgwMGM0OiByZXR1cm4oKENIQVIp MTk2KTsKLSAgICAgIGNhc2UgMHgwMGM1OiByZXR1cm4oKENIQVIpMTk3KTsKLSAgICAgIGNhc2Ug MHgwMGM2OiByZXR1cm4oKENIQVIpMTk4KTsKLSAgICAgIGNhc2UgMHgwMGM5OiByZXR1cm4oKENI QVIpMjAxKTsKLSAgICAgIGNhc2UgMHgwMGNiOiByZXR1cm4oKENIQVIpMjAzKTsKLSAgICAgIGNh c2UgMHgwMGNkOiByZXR1cm4oKENIQVIpMjA1KTsKLSAgICAgIGNhc2UgMHgwMGNlOiByZXR1cm4o KENIQVIpMjA2KTsKLSAgICAgIGNhc2UgMHgwMGNmOiByZXR1cm4oKENIQVIpMjA3KTsKLSAgICAg IGNhc2UgMHgwMGQzOiByZXR1cm4oKENIQVIpMjExKTsKLSAgICAgIGNhc2UgMHgwMGQ0OiByZXR1 cm4oKENIQVIpMjEyKTsKLSAgICAgIGNhc2UgMHgwMGQ1OiByZXR1cm4oKENIQVIpMjEzKTsKLSAg ICAgIGNhc2UgMHgwMGQ2OiByZXR1cm4oKENIQVIpMjE0KTsKLSAgICAgIGNhc2UgMHgwMGQ4OiBy ZXR1cm4oKENIQVIpMjE2KTsKLSAgICAgIGNhc2UgMHgwMGRhOiByZXR1cm4oKENIQVIpMjE4KTsK LSAgICAgIGNhc2UgMHgwMGRiOiByZXR1cm4oKENIQVIpMjE5KTsKLSAgICAgIGNhc2UgMHgwMGRj OiByZXR1cm4oKENIQVIpMjIwKTsKLSAgICAgIGNhc2UgMHgwMGRkOiByZXR1cm4oKENIQVIpMjIx KTsKLSAgICAgIGNhc2UgMHgwMGRlOiByZXR1cm4oKENIQVIpMjIyKTsKLSAgICAgIGNhc2UgMHgw MGUxOiByZXR1cm4oKENIQVIpMjI1KTsKLSAgICAgIGNhc2UgMHgwMGUyOiByZXR1cm4oKENIQVIp MjI2KTsKLSAgICAgIGNhc2UgMHgwMGUzOiByZXR1cm4oKENIQVIpMjI3KTsKLSAgICAgIGNhc2Ug MHgwMGU0OiByZXR1cm4oKENIQVIpMjI4KTsKLSAgICAgIGNhc2UgMHgwMGU1OiByZXR1cm4oKENI QVIpMjI5KTsKLSAgICAgIGNhc2UgMHgwMGU2OiByZXR1cm4oKENIQVIpMjMwKTsKLSAgICAgIGNh c2UgMHgwMGU5OiByZXR1cm4oKENIQVIpMjMzKTsKLSAgICAgIGNhc2UgMHgwMGViOiByZXR1cm4o KENIQVIpMjM1KTsKLSAgICAgIGNhc2UgMHgwMGVkOiByZXR1cm4oKENIQVIpMjM3KTsKLSAgICAg IGNhc2UgMHgwMGVlOiByZXR1cm4oKENIQVIpMjM4KTsKLSAgICAgIGNhc2UgMHgwMGVmOiByZXR1 cm4oKENIQVIpMjM5KTsKLSAgICAgIGNhc2UgMHgwMGYwOiByZXR1cm4oKENIQVIpMjQwKTsKLSAg ICAgIGNhc2UgMHgwMGYxOiByZXR1cm4oKENIQVIpMjQxKTsKLSAgICAgIGNhc2UgMHgwMGYzOiBy ZXR1cm4oKENIQVIpMjQzKTsKLSAgICAgIGNhc2UgMHgwMGY0OiByZXR1cm4oKENIQVIpMjQ0KTsK LSAgICAgIGNhc2UgMHgwMGY1OiByZXR1cm4oKENIQVIpMjQ1KTsKLSAgICAgIGNhc2UgMHgwMGY2 OiByZXR1cm4oKENIQVIpMjQ2KTsKLSAgICAgIGNhc2UgMHgwMGY4OiByZXR1cm4oKENIQVIpMjQ4 KTsKLSAgICAgIGNhc2UgMHgwMGZhOiByZXR1cm4oKENIQVIpMjUwKTsKLSAgICAgIGNhc2UgMHgw MGZiOiByZXR1cm4oKENIQVIpMjUxKTsKLSAgICAgIGNhc2UgMHgwMGZjOiByZXR1cm4oKENIQVIp MjUyKTsKLSAgICAgIGNhc2UgMHgwMGZkOiByZXR1cm4oKENIQVIpMjUzKTsKLSAgICAgIGNhc2Ug MHgwMGZlOiByZXR1cm4oKENIQVIpMjU0KTsKLSAgICAgIGNhc2UgMHgwMTAwOiByZXR1cm4oKENI QVIpMTkyKTsKLSAgICAgIGNhc2UgMHgwMTAxOiByZXR1cm4oKENIQVIpMjI0KTsKLSAgICAgIGNh c2UgMHgwMTA0OiByZXR1cm4oKENIQVIpMTYxKTsKLSAgICAgIGNhc2UgMHgwMTA1OiByZXR1cm4o KENIQVIpMTc3KTsKLSAgICAgIGNhc2UgMHgwMTBjOiByZXR1cm4oKENIQVIpMjAwKTsKLSAgICAg IGNhc2UgMHgwMTBkOiByZXR1cm4oKENIQVIpMjMyKTsKLSAgICAgIGNhc2UgMHgwMTEwOiByZXR1 cm4oKENIQVIpMjA4KTsKLSAgICAgIGNhc2UgMHgwMTExOiByZXR1cm4oKENIQVIpMTc2KTsKLSAg ICAgIGNhc2UgMHgwMTEyOiByZXR1cm4oKENIQVIpMTYyKTsKLSAgICAgIGNhc2UgMHgwMTEzOiBy ZXR1cm4oKENIQVIpMTc4KTsKLSAgICAgIGNhc2UgMHgwMTE2OiByZXR1cm4oKENIQVIpMjA0KTsK LSAgICAgIGNhc2UgMHgwMTE3OiByZXR1cm4oKENIQVIpMjM2KTsKLSAgICAgIGNhc2UgMHgwMTE4 OiByZXR1cm4oKENIQVIpMjAyKTsKLSAgICAgIGNhc2UgMHgwMTE5OiByZXR1cm4oKENIQVIpMjM0 KTsKLSAgICAgIGNhc2UgMHgwMTIyOiByZXR1cm4oKENIQVIpMTYzKTsKLSAgICAgIGNhc2UgMHgw MTIzOiByZXR1cm4oKENIQVIpMTc5KTsKLSAgICAgIGNhc2UgMHgwMTI4OiByZXR1cm4oKENIQVIp MTY1KTsKLSAgICAgIGNhc2UgMHgwMTI5OiByZXR1cm4oKENIQVIpMTgxKTsKLSAgICAgIGNhc2Ug MHgwMTJhOiByZXR1cm4oKENIQVIpMTY0KTsKLSAgICAgIGNhc2UgMHgwMTJiOiByZXR1cm4oKENI QVIpMTgwKTsKLSAgICAgIGNhc2UgMHgwMTJlOiByZXR1cm4oKENIQVIpMTk5KTsKLSAgICAgIGNh c2UgMHgwMTJmOiByZXR1cm4oKENIQVIpMjMxKTsKLSAgICAgIGNhc2UgMHgwMTM2OiByZXR1cm4o KENIQVIpMTY2KTsKLSAgICAgIGNhc2UgMHgwMTM3OiByZXR1cm4oKENIQVIpMTgyKTsKLSAgICAg IGNhc2UgMHgwMTM4OiByZXR1cm4oKENIQVIpMTc0KTsKLSAgICAgIGNhc2UgMHgwMTNiOiByZXR1 cm4oKENIQVIpMTY3KTsKLSAgICAgIGNhc2UgMHgwMTNjOiByZXR1cm4oKENIQVIpMTgzKTsKLSAg ICAgIGNhc2UgMHgwMTQzOiByZXR1cm4oKENIQVIpMTY4KTsKLSAgICAgIGNhc2UgMHgwMTQ0OiBy ZXR1cm4oKENIQVIpMTg0KTsKLSAgICAgIGNhc2UgMHgwMTQ1OiByZXR1cm4oKENIQVIpMjA5KTsK LSAgICAgIGNhc2UgMHgwMTRhOiByZXR1cm4oKENIQVIpMTc1KTsKLSAgICAgIGNhc2UgMHgwMTRi OiByZXR1cm4oKENIQVIpMTkxKTsKLSAgICAgIGNhc2UgMHgwMTRjOiByZXR1cm4oKENIQVIpMjEw KTsKLSAgICAgIGNhc2UgMHgwMTRkOiByZXR1cm4oKENIQVIpMjQyKTsKLSAgICAgIGNhc2UgMHgw MTU2OiByZXR1cm4oKENIQVIpMTY5KTsKLSAgICAgIGNhc2UgMHgwMTU3OiByZXR1cm4oKENIQVIp MTg1KTsKLSAgICAgIGNhc2UgMHgwMTYwOiByZXR1cm4oKENIQVIpMTcwKTsKLSAgICAgIGNhc2Ug MHgwMTYxOiByZXR1cm4oKENIQVIpMTg2KTsKLSAgICAgIGNhc2UgMHgwMTY2OiByZXR1cm4oKENI QVIpMTcxKTsKLSAgICAgIGNhc2UgMHgwMTY3OiByZXR1cm4oKENIQVIpMTg3KTsKLSAgICAgIGNh c2UgMHgwMTY4OiByZXR1cm4oKENIQVIpMjE1KTsKLSAgICAgIGNhc2UgMHgwMTY5OiByZXR1cm4o KENIQVIpMjQ3KTsKLSAgICAgIGNhc2UgMHgwMTZhOiByZXR1cm4oKENIQVIpMjIzKTsKLSAgICAg IGNhc2UgMHgwMTZiOiByZXR1cm4oKENIQVIpMjU1KTsKLSAgICAgIGNhc2UgMHgwMTcyOiByZXR1 cm4oKENIQVIpMjE3KTsKLSAgICAgIGNhc2UgMHgwMTczOiByZXR1cm4oKENIQVIpMjQ5KTsKLSAg ICAgIGNhc2UgMHgwMTdkOiByZXR1cm4oKENIQVIpMTcyKTsKLSAgICAgIGNhc2UgMHgwMTdlOiBy ZXR1cm4oKENIQVIpMTg4KTsKLSAgICAgIGRlZmF1bHQ6IHJldHVybih0eF9pZGVudChjKSk7Ci0g ICAgfQotfQotCi0KLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJ U08gODg1OS0xNSBMYXRpbi05ICovCi0jaWZkZWYgQ0tfQU5TSUMKLXR4Xzg4NTlfMTUoVVNIT1JU IGMpCi0jZWxzZQotdHhfODg1OV8xNShjKSBVU0hPUlQgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAq LwotewotICAgIGlmIChjIDwgMHhhMCkKLSAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsK LSAgICBzd2l0Y2goYykgewotICAgICAgY2FzZSAweDIwQUM6IHJldHVybigoQ0hBUikweEE0KTsg IC8qIERpZmZlcnMgZnJvbSBMYXRpbi0xIGluICovCi0gICAgICBjYXNlIDB4MDE2MDogcmV0dXJu KChDSEFSKTB4QUMpOyAgLyogb25seSBlaWdodCBwbGFjZXMgKi8KLSAgICAgIGNhc2UgMHgwMTYx OiByZXR1cm4oKENIQVIpMHhBOCk7Ci0gICAgICBjYXNlIDB4MDE3RDogcmV0dXJuKChDSEFSKTB4 QjQpOwotICAgICAgY2FzZSAweDAxN0U6IHJldHVybigoQ0hBUikweEI4KTsKLSAgICAgIGNhc2Ug MHgwMTUyOiByZXR1cm4oKENIQVIpMHhCQyk7Ci0gICAgICBjYXNlIDB4MDE1MzogcmV0dXJuKChD SEFSKTB4QkQpOwotICAgICAgY2FzZSAweDAxNzg6IHJldHVybigoQ0hBUikweEJFKTsKLSAgICAg IGRlZmF1bHQ6IHJldHVybih0eF9pZGVudChjKSk7Ci0gICAgfQotfQotCi1pbnQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT2xkIEtPSS04IChFQ01BIDExMyBGaXJzdCBF ZC4pICovCi0jaWZkZWYgQ0tfQU5TSUMKLXR4X2tvaTgoVVNIT1JUIGMpCi0jZWxzZQotdHhfa29p OChjKSBVU0hPUlQgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjIDwgMHhh MCkKLSAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKLSAgICBzd2l0Y2goYykgewotICAg ICAgY2FzZSAweDA0MTA6IHJldHVybigoQ0hBUikoMjI1ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDA0MTE6IHJldHVybigoQ0hBUikoMjI2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MTI6IHJl dHVybigoQ0hBUikoMjQ3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MTM6IHJldHVybigoQ0hB UikoMjMxICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MTQ6IHJldHVybigoQ0hBUikoMjI4ICYg MHhmZikpOwotICAgICAgY2FzZSAweDA0MTU6IHJldHVybigoQ0hBUikoMjI5ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDA0MTY6IHJldHVybigoQ0hBUikoMjQ2ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDA0MTc6IHJldHVybigoQ0hBUikoMjUwICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MTg6 IHJldHVybigoQ0hBUikoMjMzICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MTk6IHJldHVybigo Q0hBUikoMjM0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MWE6IHJldHVybigoQ0hBUikoMjM1 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MWI6IHJldHVybigoQ0hBUikoMjM2ICYgMHhmZikp OwotICAgICAgY2FzZSAweDA0MWM6IHJldHVybigoQ0hBUikoMjM3ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDA0MWQ6IHJldHVybigoQ0hBUikoMjM4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0 MWU6IHJldHVybigoQ0hBUikoMjM5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MWY6IHJldHVy bigoQ0hBUikoMjQwICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MjA6IHJldHVybigoQ0hBUiko MjQyICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MjE6IHJldHVybigoQ0hBUikoMjQzICYgMHhm ZikpOwotICAgICAgY2FzZSAweDA0MjI6IHJldHVybigoQ0hBUikoMjQ0ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDA0MjM6IHJldHVybigoQ0hBUikoMjQ1ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDA0MjQ6IHJldHVybigoQ0hBUikoMjMwICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MjU6IHJl dHVybigoQ0hBUikoMjMyICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MjY6IHJldHVybigoQ0hB UikoMjI3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0Mjc6IHJldHVybigoQ0hBUikoMjU0ICYg MHhmZikpOwotICAgICAgY2FzZSAweDA0Mjg6IHJldHVybigoQ0hBUikoMjUxICYgMHhmZikpOwot ICAgICAgY2FzZSAweDA0Mjk6IHJldHVybigoQ0hBUikoMjUzICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDA0MmI6IHJldHVybigoQ0hBUikoMjQ5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MmM6 IHJldHVybigoQ0hBUikoMjQ4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MmQ6IHJldHVybigo Q0hBUikoMjUyICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MmU6IHJldHVybigoQ0hBUikoMjI0 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MmY6IHJldHVybigoQ0hBUikoMjQxICYgMHhmZikp OwotICAgICAgY2FzZSAweDA0MzA6IHJldHVybigoQ0hBUikoMTkzICYgMHhmZikpOwotICAgICAg Y2FzZSAweDA0MzE6IHJldHVybigoQ0hBUikoMTk0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0 MzI6IHJldHVybigoQ0hBUikoMjE1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MzM6IHJldHVy bigoQ0hBUikoMTk5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MzQ6IHJldHVybigoQ0hBUiko MTk2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MzU6IHJldHVybigoQ0hBUikoMTk3ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDA0MzY6IHJldHVybigoQ0hBUikoMjE0ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDA0Mzc6IHJldHVybigoQ0hBUikoMjE4ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDA0Mzg6IHJldHVybigoQ0hBUikoMjAxICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0Mzk6IHJl dHVybigoQ0hBUikoMjAyICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0M2E6IHJldHVybigoQ0hB UikoMjAzICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0M2I6IHJldHVybigoQ0hBUikoMjA0ICYg MHhmZikpOwotICAgICAgY2FzZSAweDA0M2M6IHJldHVybigoQ0hBUikoMjA1ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDA0M2Q6IHJldHVybigoQ0hBUikoMjA2ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDA0M2U6IHJldHVybigoQ0hBUikoMjA3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0M2Y6 IHJldHVybigoQ0hBUikoMjA4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NDA6IHJldHVybigo Q0hBUikoMjEwICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NDE6IHJldHVybigoQ0hBUikoMjEx ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NDI6IHJldHVybigoQ0hBUikoMjEyICYgMHhmZikp OwotICAgICAgY2FzZSAweDA0NDM6IHJldHVybigoQ0hBUikoMjEzICYgMHhmZikpOwotICAgICAg Y2FzZSAweDA0NDQ6IHJldHVybigoQ0hBUikoMTk4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0 NDU6IHJldHVybigoQ0hBUikoMjAwICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NDY6IHJldHVy bigoQ0hBUikoMTk1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NDc6IHJldHVybigoQ0hBUiko MjIyICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NDg6IHJldHVybigoQ0hBUikoMjE5ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDA0NDk6IHJldHVybigoQ0hBUikoMjIxICYgMHhmZikpOwotICAg ICAgY2FzZSAweDA0NGE6IHJldHVybigoQ0hBUikoMjIzICYgMHhmZikpOwotICAgICAgY2FzZSAw eDA0NGI6IHJldHVybigoQ0hBUikoMjE3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NGM6IHJl dHVybigoQ0hBUikoMjE2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NGQ6IHJldHVybigoQ0hB UikoMjIwICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NGU6IHJldHVybigoQ0hBUikoMTkyICYg MHhmZikpOwotICAgICAgY2FzZSAweDA0NGY6IHJldHVybigoQ0hBUikoMjA5ICYgMHhmZikpOwot ICAgICAgZGVmYXVsdDogcmV0dXJuKHR4X2lkZW50KGMpKTsKLSAgICB9Ci19Ci0KLWludCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVQ1MtMiB0byBLT0k4LVIgKFJ1c3Np YSkgKi8KLSNpZmRlZiBDS19BTlNJQwotdHhfa29pOHIoVVNIT1JUIGMpCi0jZWxzZQotdHhfa29p OHIoYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA8IDB4 MDBBMCkKLSAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKLSAgICBzd2l0Y2goYykgewot ICAgICAgY2FzZSAweDAwQTA6IHJldHVybigoQ0hBUikoMTU0ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwQTk6IHJldHVybigoQ0hBUikoMTkxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQjA6 IHJldHVybigoQ0hBUikoMTU2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQjI6IHJldHVybigo Q0hBUikoMTU3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQjc6IHJldHVybigoQ0hBUikoMTU4 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwRjc6IHJldHVybigoQ0hBUikoMTU5ICYgMHhmZikp OwotICAgICAgY2FzZSAweDA0MDE6IHJldHVybigoQ0hBUikoMTc5ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDA0MTA6IHJldHVybigoQ0hBUikoMjI1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0 MTE6IHJldHVybigoQ0hBUikoMjI2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MTI6IHJldHVy bigoQ0hBUikoMjQ3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MTM6IHJldHVybigoQ0hBUiko MjMxICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MTQ6IHJldHVybigoQ0hBUikoMjI4ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDA0MTU6IHJldHVybigoQ0hBUikoMjI5ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDA0MTY6IHJldHVybigoQ0hBUikoMjQ2ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDA0MTc6IHJldHVybigoQ0hBUikoMjUwICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MTg6IHJl dHVybigoQ0hBUikoMjMzICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MTk6IHJldHVybigoQ0hB UikoMjM0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MUE6IHJldHVybigoQ0hBUikoMjM1ICYg MHhmZikpOwotICAgICAgY2FzZSAweDA0MUI6IHJldHVybigoQ0hBUikoMjM2ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDA0MUM6IHJldHVybigoQ0hBUikoMjM3ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDA0MUQ6IHJldHVybigoQ0hBUikoMjM4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MUU6 IHJldHVybigoQ0hBUikoMjM5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MUY6IHJldHVybigo Q0hBUikoMjQwICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MjA6IHJldHVybigoQ0hBUikoMjQy ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MjE6IHJldHVybigoQ0hBUikoMjQzICYgMHhmZikp OwotICAgICAgY2FzZSAweDA0MjI6IHJldHVybigoQ0hBUikoMjQ0ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDA0MjM6IHJldHVybigoQ0hBUikoMjQ1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0 MjQ6IHJldHVybigoQ0hBUikoMjMwICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MjU6IHJldHVy bigoQ0hBUikoMjMyICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MjY6IHJldHVybigoQ0hBUiko MjI3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0Mjc6IHJldHVybigoQ0hBUikoMjU0ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDA0Mjg6IHJldHVybigoQ0hBUikoMjUxICYgMHhmZikpOwotICAg ICAgY2FzZSAweDA0Mjk6IHJldHVybigoQ0hBUikoMjUzICYgMHhmZikpOwotICAgICAgY2FzZSAw eDA0MkE6IHJldHVybigoQ0hBUikoMjU1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MkI6IHJl dHVybigoQ0hBUikoMjQ5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MkM6IHJldHVybigoQ0hB UikoMjQ4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MkQ6IHJldHVybigoQ0hBUikoMjUyICYg MHhmZikpOwotICAgICAgY2FzZSAweDA0MkU6IHJldHVybigoQ0hBUikoMjI0ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDA0MkY6IHJldHVybigoQ0hBUikoMjQxICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDA0MzA6IHJldHVybigoQ0hBUikoMTkzICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MzE6 IHJldHVybigoQ0hBUikoMTk0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MzI6IHJldHVybigo Q0hBUikoMjE1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MzM6IHJldHVybigoQ0hBUikoMTk5 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MzQ6IHJldHVybigoQ0hBUikoMTk2ICYgMHhmZikp OwotICAgICAgY2FzZSAweDA0MzU6IHJldHVybigoQ0hBUikoMTk3ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDA0MzY6IHJldHVybigoQ0hBUikoMjE0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0 Mzc6IHJldHVybigoQ0hBUikoMjE4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0Mzg6IHJldHVy bigoQ0hBUikoMjAxICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0Mzk6IHJldHVybigoQ0hBUiko MjAyICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0M0E6IHJldHVybigoQ0hBUikoMjAzICYgMHhm ZikpOwotICAgICAgY2FzZSAweDA0M0I6IHJldHVybigoQ0hBUikoMjA0ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDA0M0M6IHJldHVybigoQ0hBUikoMjA1ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDA0M0Q6IHJldHVybigoQ0hBUikoMjA2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0M0U6IHJl dHVybigoQ0hBUikoMjA3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0M0Y6IHJldHVybigoQ0hB UikoMjA4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NDA6IHJldHVybigoQ0hBUikoMjEwICYg MHhmZikpOwotICAgICAgY2FzZSAweDA0NDE6IHJldHVybigoQ0hBUikoMjExICYgMHhmZikpOwot ICAgICAgY2FzZSAweDA0NDI6IHJldHVybigoQ0hBUikoMjEyICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDA0NDM6IHJldHVybigoQ0hBUikoMjEzICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NDQ6 IHJldHVybigoQ0hBUikoMTk4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NDU6IHJldHVybigo Q0hBUikoMjAwICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NDY6IHJldHVybigoQ0hBUikoMTk1 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NDc6IHJldHVybigoQ0hBUikoMjIyICYgMHhmZikp OwotICAgICAgY2FzZSAweDA0NDg6IHJldHVybigoQ0hBUikoMjE5ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDA0NDk6IHJldHVybigoQ0hBUikoMjIxICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0 NEE6IHJldHVybigoQ0hBUikoMjIzICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NEI6IHJldHVy bigoQ0hBUikoMjE3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NEM6IHJldHVybigoQ0hBUiko MjE2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NEQ6IHJldHVybigoQ0hBUikoMjIwICYgMHhm ZikpOwotICAgICAgY2FzZSAweDA0NEU6IHJldHVybigoQ0hBUikoMTkyICYgMHhmZikpOwotICAg ICAgY2FzZSAweDA0NEY6IHJldHVybigoQ0hBUikoMjA5ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDA0NTE6IHJldHVybigoQ0hBUikoMTYzICYgMHhmZikpOwotICAgICAgY2FzZSAweDIyMTk6IHJl dHVybigoQ0hBUikoMTQ5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIyMUE6IHJldHVybigoQ0hB UikoMTUwICYgMHhmZikpOwotICAgICAgY2FzZSAweDIyNDg6IHJldHVybigoQ0hBUikoMTUxICYg MHhmZikpOwotICAgICAgY2FzZSAweDIyNjQ6IHJldHVybigoQ0hBUikoMTUyICYgMHhmZikpOwot ICAgICAgY2FzZSAweDIyNjU6IHJldHVybigoQ0hBUikoMTUzICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDIzMjA6IHJldHVybigoQ0hBUikoMTQ3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIzMjE6 IHJldHVybigoQ0hBUikoMTU1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MDA6IHJldHVybigo Q0hBUikoMTI4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MDI6IHJldHVybigoQ0hBUikoMTI5 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MEM6IHJldHVybigoQ0hBUikoMTMwICYgMHhmZikp OwotICAgICAgY2FzZSAweDI1MTA6IHJldHVybigoQ0hBUikoMTMxICYgMHhmZikpOwotICAgICAg Y2FzZSAweDI1MTQ6IHJldHVybigoQ0hBUikoMTMyICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1 MTg6IHJldHVybigoQ0hBUikoMTMzICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MUM6IHJldHVy bigoQ0hBUikoMTM0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MjQ6IHJldHVybigoQ0hBUiko MTM1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MkM6IHJldHVybigoQ0hBUikoMTM2ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDI1MzQ6IHJldHVybigoQ0hBUikoMTM3ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDI1M0M6IHJldHVybigoQ0hBUikoMTM4ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDI1NTA6IHJldHVybigoQ0hBUikoMTYwICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NTE6IHJl dHVybigoQ0hBUikoMTYxICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NTI6IHJldHVybigoQ0hB UikoMTYyICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NTM6IHJldHVybigoQ0hBUikoMTY0ICYg MHhmZikpOwotICAgICAgY2FzZSAweDI1NTQ6IHJldHVybigoQ0hBUikoMTY1ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDI1NTU6IHJldHVybigoQ0hBUikoMTY2ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDI1NTY6IHJldHVybigoQ0hBUikoMTY3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NTc6 IHJldHVybigoQ0hBUikoMTY4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NTg6IHJldHVybigo Q0hBUikoMTY5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NTk6IHJldHVybigoQ0hBUikoMTcw ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NUE6IHJldHVybigoQ0hBUikoMTcxICYgMHhmZikp OwotICAgICAgY2FzZSAweDI1NUI6IHJldHVybigoQ0hBUikoMTcyICYgMHhmZikpOwotICAgICAg Y2FzZSAweDI1NUM6IHJldHVybigoQ0hBUikoMTczICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1 NUQ6IHJldHVybigoQ0hBUikoMTc0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NUU6IHJldHVy bigoQ0hBUikoMTc1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NUY6IHJldHVybigoQ0hBUiko MTc2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NjA6IHJldHVybigoQ0hBUikoMTc3ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDI1NjE6IHJldHVybigoQ0hBUikoMTc4ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDI1NjI6IHJldHVybigoQ0hBUikoMTgwICYgMHhmZikpOwotICAgICAgY2FzZSAw eDI1NjM6IHJldHVybigoQ0hBUikoMTgxICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NjQ6IHJl dHVybigoQ0hBUikoMTgyICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NjU6IHJldHVybigoQ0hB UikoMTgzICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NjY6IHJldHVybigoQ0hBUikoMTg0ICYg MHhmZikpOwotICAgICAgY2FzZSAweDI1Njc6IHJldHVybigoQ0hBUikoMTg1ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDI1Njg6IHJldHVybigoQ0hBUikoMTg2ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDI1Njk6IHJldHVybigoQ0hBUikoMTg3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NkE6 IHJldHVybigoQ0hBUikoMTg4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NkI6IHJldHVybigo Q0hBUikoMTg5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NkM6IHJldHVybigoQ0hBUikoMTkw ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1ODA6IHJldHVybigoQ0hBUikoMTM5ICYgMHhmZikp OwotICAgICAgY2FzZSAweDI1ODQ6IHJldHVybigoQ0hBUikoMTQwICYgMHhmZikpOwotICAgICAg Y2FzZSAweDI1ODg6IHJldHVybigoQ0hBUikoMTQxICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1 OEM6IHJldHVybigoQ0hBUikoMTQyICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1OTA6IHJldHVy bigoQ0hBUikoMTQzICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1OTE6IHJldHVybigoQ0hBUiko MTQ0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1OTI6IHJldHVybigoQ0hBUikoMTQ1ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDI1OTM6IHJldHVybigoQ0hBUikoMTQ2ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDI1QTA6IHJldHVybigoQ0hBUikoMTQ4ICYgMHhmZikpOwotICAgICAgZGVmYXVs dDogcmV0dXJuKHR4X2lkZW50KGMpKTsKLSAgICB9Ci19Ci0KLWludCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBLT0k4LVUgKFVrcmFpbmUpICovCi0jaWZkZWYgQ0tfQU5T SUMKLXR4X2tvaTh1KFVTSE9SVCBjKQotI2Vsc2UKLXR4X2tvaTh1KGMpIFVTSE9SVCBjOwotI2Vu ZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgPCAweGEwKQotICAgICAgcmV0dXJuKChD SEFSKShjICYgMHhmZikpOwotICAgIHN3aXRjaChjKSB7Ci0gICAgICBjYXNlIDB4MDBBMDogcmV0 dXJuKChDSEFSKSgxNTQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBBOTogcmV0dXJuKChDSEFS KSgxOTEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBCMDogcmV0dXJuKChDSEFSKSgxNTYgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDBCMjogcmV0dXJuKChDSEFSKSgxNTcgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDBCNzogcmV0dXJuKChDSEFSKSgxNTggJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDBGNzogcmV0dXJuKChDSEFSKSgxNTkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQwMTog cmV0dXJuKChDSEFSKSgxNzkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQwNDogcmV0dXJuKChD SEFSKSgxODAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQwNjogcmV0dXJuKChDSEFSKSgxODIg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQwNzogcmV0dXJuKChDSEFSKSgxODMgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDQxMDogcmV0dXJuKChDSEFSKSgyMjUgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDQxMTogcmV0dXJuKChDSEFSKSgyMjYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQx MjogcmV0dXJuKChDSEFSKSgyNDcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxMzogcmV0dXJu KChDSEFSKSgyMzEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxNDogcmV0dXJuKChDSEFSKSgy MjggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxNTogcmV0dXJuKChDSEFSKSgyMjkgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDQxNjogcmV0dXJuKChDSEFSKSgyNDYgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDQxNzogcmV0dXJuKChDSEFSKSgyNTAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDQxODogcmV0dXJuKChDSEFSKSgyMzMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxOTogcmV0 dXJuKChDSEFSKSgyMzQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxQTogcmV0dXJuKChDSEFS KSgyMzUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxQjogcmV0dXJuKChDSEFSKSgyMzYgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxQzogcmV0dXJuKChDSEFSKSgyMzcgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDQxRDogcmV0dXJuKChDSEFSKSgyMzggJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDQxRTogcmV0dXJuKChDSEFSKSgyMzkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxRjog cmV0dXJuKChDSEFSKSgyNDAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyMDogcmV0dXJuKChD SEFSKSgyNDIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyMTogcmV0dXJuKChDSEFSKSgyNDMg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyMjogcmV0dXJuKChDSEFSKSgyNDQgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDQyMzogcmV0dXJuKChDSEFSKSgyNDUgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDQyNDogcmV0dXJuKChDSEFSKSgyMzAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQy NTogcmV0dXJuKChDSEFSKSgyMzIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyNjogcmV0dXJu KChDSEFSKSgyMjcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyNzogcmV0dXJuKChDSEFSKSgy NTQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyODogcmV0dXJuKChDSEFSKSgyNTEgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDQyOTogcmV0dXJuKChDSEFSKSgyNTMgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDQyQTogcmV0dXJuKChDSEFSKSgyNTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDQyQjogcmV0dXJuKChDSEFSKSgyNDkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyQzogcmV0 dXJuKChDSEFSKSgyNDggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyRDogcmV0dXJuKChDSEFS KSgyNTIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyRTogcmV0dXJuKChDSEFSKSgyMjQgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyRjogcmV0dXJuKChDSEFSKSgyNDEgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDQzMDogcmV0dXJuKChDSEFSKSgxOTMgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDQzMTogcmV0dXJuKChDSEFSKSgxOTQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzMjog cmV0dXJuKChDSEFSKSgyMTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzMzogcmV0dXJuKChD SEFSKSgxOTkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzNDogcmV0dXJuKChDSEFSKSgxOTYg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzNTogcmV0dXJuKChDSEFSKSgxOTcgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDQzNjogcmV0dXJuKChDSEFSKSgyMTQgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDQzNzogcmV0dXJuKChDSEFSKSgyMTggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQz ODogcmV0dXJuKChDSEFSKSgyMDEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzOTogcmV0dXJu KChDSEFSKSgyMDIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzQTogcmV0dXJuKChDSEFSKSgy MDMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzQjogcmV0dXJuKChDSEFSKSgyMDQgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDQzQzogcmV0dXJuKChDSEFSKSgyMDUgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDQzRDogcmV0dXJuKChDSEFSKSgyMDYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDQzRTogcmV0dXJuKChDSEFSKSgyMDcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzRjogcmV0 dXJuKChDSEFSKSgyMDggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0MDogcmV0dXJuKChDSEFS KSgyMTAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0MTogcmV0dXJuKChDSEFSKSgyMTEgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0MjogcmV0dXJuKChDSEFSKSgyMTIgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDQ0MzogcmV0dXJuKChDSEFSKSgyMTMgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDQ0NDogcmV0dXJuKChDSEFSKSgxOTggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0NTog cmV0dXJuKChDSEFSKSgyMDAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0NjogcmV0dXJuKChD SEFSKSgxOTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0NzogcmV0dXJuKChDSEFSKSgyMjIg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0ODogcmV0dXJuKChDSEFSKSgyMTkgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDQ0OTogcmV0dXJuKChDSEFSKSgyMjEgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDQ0QTogcmV0dXJuKChDSEFSKSgyMjMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0 QjogcmV0dXJuKChDSEFSKSgyMTcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0QzogcmV0dXJu KChDSEFSKSgyMTYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0RDogcmV0dXJuKChDSEFSKSgy MjAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0RTogcmV0dXJuKChDSEFSKSgxOTIgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDQ0RjogcmV0dXJuKChDSEFSKSgyMDkgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDQ1MTogcmV0dXJuKChDSEFSKSgxNjMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDQ1NDogcmV0dXJuKChDSEFSKSgxNjQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ1NjogcmV0 dXJuKChDSEFSKSgxNjYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ1NzogcmV0dXJuKChDSEFS KSgxNjcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ5MDogcmV0dXJuKChDSEFSKSgxODkgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ5MTogcmV0dXJuKChDSEFSKSgxNzMgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MjIxOTogcmV0dXJuKChDSEFSKSgxNDkgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MjIxQTogcmV0dXJuKChDSEFSKSgxNTAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjI0ODog cmV0dXJuKChDSEFSKSgxNTEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjI2NDogcmV0dXJuKChD SEFSKSgxNTIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjI2NTogcmV0dXJuKChDSEFSKSgxNTMg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjMyMDogcmV0dXJuKChDSEFSKSgxNDcgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MjMyMTogcmV0dXJuKChDSEFSKSgxNTUgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MjUwMDogcmV0dXJuKChDSEFSKSgxMjggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUw MjogcmV0dXJuKChDSEFSKSgxMjkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUwQzogcmV0dXJu KChDSEFSKSgxMzAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUxMDogcmV0dXJuKChDSEFSKSgx MzEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUxNDogcmV0dXJuKChDSEFSKSgxMzIgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MjUxODogcmV0dXJuKChDSEFSKSgxMzMgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MjUxQzogcmV0dXJuKChDSEFSKSgxMzQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MjUyNDogcmV0dXJuKChDSEFSKSgxMzUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUyQzogcmV0 dXJuKChDSEFSKSgxMzYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUzNDogcmV0dXJuKChDSEFS KSgxMzcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUzQzogcmV0dXJuKChDSEFSKSgxMzggJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1MDogcmV0dXJuKChDSEFSKSgxNjAgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MjU1MTogcmV0dXJuKChDSEFSKSgxNjEgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MjU1MjogcmV0dXJuKChDSEFSKSgxNjIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1NDog cmV0dXJuKChDSEFSKSgxNjUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1NzogcmV0dXJuKChD SEFSKSgxNjggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1ODogcmV0dXJuKChDSEFSKSgxNjkg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1OTogcmV0dXJuKChDSEFSKSgxNzAgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MjU1QTogcmV0dXJuKChDSEFSKSgxNzEgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MjU1QjogcmV0dXJuKChDSEFSKSgxNzIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1 RDogcmV0dXJuKChDSEFSKSgxNzQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1RTogcmV0dXJu KChDSEFSKSgxNzUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1RjogcmV0dXJuKChDSEFSKSgx NzYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2MDogcmV0dXJuKChDSEFSKSgxNzcgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MjU2MTogcmV0dXJuKChDSEFSKSgxNzggJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MjU2MzogcmV0dXJuKChDSEFSKSgxODEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MjU2NjogcmV0dXJuKChDSEFSKSgxODQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2NzogcmV0 dXJuKChDSEFSKSgxODUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2ODogcmV0dXJuKChDSEFS KSgxODYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2OTogcmV0dXJuKChDSEFSKSgxODcgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2QTogcmV0dXJuKChDSEFSKSgxODggJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MjU2QzogcmV0dXJuKChDSEFSKSgxOTAgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MjU4MDogcmV0dXJuKChDSEFSKSgxMzkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU4NDog cmV0dXJuKChDSEFSKSgxNDAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU4ODogcmV0dXJuKChD SEFSKSgxNDEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU4QzogcmV0dXJuKChDSEFSKSgxNDIg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU5MDogcmV0dXJuKChDSEFSKSgxNDMgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MjU5MTogcmV0dXJuKChDSEFSKSgxNDQgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MjU5MjogcmV0dXJuKChDSEFSKSgxNDUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU5 MzogcmV0dXJuKChDSEFSKSgxNDYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjVBMDogcmV0dXJu KChDSEFSKSgxNDggJiAweGZmKSk7Ci0gICAgICBkZWZhdWx0OiByZXR1cm4odHhfaWRlbnQoYykp OwotICAgIH0KLX0KLQotCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogREVDIE1DUyAqLwotI2lmZGVmIENLX0FOU0lDCi10eF9kZWNtY3MoVVNIT1JUIGMpCi0jZWxz ZQotdHhfZGVjbWNzKGMpIFVTSE9SVCBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAg aWYgKGMgPCAweGEwKQotICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOwotICAgIHN3aXRj aChjKSB7Ci0gICAgICBjYXNlIDB4MDBhNjoKLSAgICAgIGNhc2UgMHgwMGE4OgotICAgICAgY2Fz ZSAweDAwYWM6Ci0gICAgICBjYXNlIDB4MDBhZToKLSAgICAgIGNhc2UgMHgwMGFmOgotICAgICAg Y2FzZSAweDAwYjQ6Ci0gICAgICBjYXNlIDB4MDBiODoKLSAgICAgIGNhc2UgMHgwMGJlOgotICAg ICAgY2FzZSAweDAwZDA6Ci0gICAgICBjYXNlIDB4MDBkZToKLSAgICAgIGNhc2UgMHgwMGYwOgot ICAgICAgY2FzZSAweDAwZmU6Ci0gICAgICBjYXNlIDB4MDBmZjoKLSAgICAgICAgcmV0dXJuKC0x KTsgICAgICAgICAgICAgICAgICAgICAvKiBUaGVzZSBhcmUgYWxsIHVuZGVmaW5lZCBpbiBERUNN Q1MgKi8KLSAgICAgIGNhc2UgMHgwMGE0OiAgICAgICAgICAgICAgICAgICAgICAvKiBDdXJyZW5j eSBzaWduICovCi0gICAgICAgIHJldHVybigoQ0hBUikweGE4KTsKLSAgICAgIGNhc2UgMHgwMTUy OiAgICAgICAgICAgICAgICAgICAgICAvKiBPRSAqLwotICAgICAgICByZXR1cm4oKENIQVIpMHhk Nyk7Ci0gICAgICBjYXNlIDB4MDE1MzogICAgICAgICAgICAgICAgICAgICAgLyogb2UgKi8KLSAg ICAgICAgcmV0dXJuKChDSEFSKTB4ZjcpOwotICAgICAgZGVmYXVsdDogcmV0dXJuKHR4X2lkZW50 KGMpKTsKLSAgICB9Ci19Ci0KLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBOZVhUU1RFUCAqLwotI2lmZGVmIENLX0FOU0lDCi10eF9uZXh0c3RlcChVU0hPUlQgYykK LSNlbHNlCi10eF9uZXh0c3RlcChjKSBVU0hPUlQgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot ewotICAgIGlmIChjIDwgMHg4MCkgICAgICAgICAgICAgICAgICAgICAgIC8qIEhhcyBDMSBncmFw aGljcyAqLwotICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOwotICAgIHN3aXRjaCAoYykg ewotICAgICAgY2FzZSAweDAwYTA6IHJldHVybigoQ0hBUikoMTI4ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwYTE6IHJldHVybigoQ0hBUikoMTYxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw YTI6IHJldHVybigoQ0hBUikoMTYyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYTM6IHJldHVy bigoQ0hBUikoMTYzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYTQ6IHJldHVybigoQ0hBUiko MTY4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYTU6IHJldHVybigoQ0hBUikoMTY1ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwYTY6IHJldHVybigoQ0hBUikoMTgxICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwYTc6IHJldHVybigoQ0hBUikoMTY3ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwYTg6IHJldHVybigoQ0hBUikoMjAwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYTk6IHJl dHVybigoQ0hBUikoMTYwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYWE6IHJldHVybigoQ0hB UikoMjI3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYWI6IHJldHVybigoQ0hBUikoMTcxICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwYWM6IHJldHVybigoQ0hBUikoMTkwICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwYWU6IHJldHVybigoQ0hBUikoMTc2ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwYWY6IHJldHVybigoQ0hBUikoMTk3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjE6 IHJldHVybigoQ0hBUikoMjA5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjI6IHJldHVybigo Q0hBUikoMjAxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjM6IHJldHVybigoQ0hBUikoMjA0 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjQ6IHJldHVybigoQ0hBUikoMTk0ICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwYjU6IHJldHVybigoQ0hBUikoMTU3ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwYjY6IHJldHVybigoQ0hBUikoMTgyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw Yjc6IHJldHVybigoQ0hBUikoMTgwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjg6IHJldHVy bigoQ0hBUikoMjAzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjk6IHJldHVybigoQ0hBUiko MTkyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYmE6IHJldHVybigoQ0hBUikoMjM1ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwYmI6IHJldHVybigoQ0hBUikoMTg3ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwYmM6IHJldHVybigoQ0hBUikoMjEwICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwYmQ6IHJldHVybigoQ0hBUikoMjExICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYmU6IHJl dHVybigoQ0hBUikoMjEyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYmY6IHJldHVybigoQ0hB UikoMTkxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzA6IHJldHVybigoQ0hBUikoMTI5ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwYzE6IHJldHVybigoQ0hBUikoMTMwICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwYzI6IHJldHVybigoQ0hBUikoMTMxICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwYzM6IHJldHVybigoQ0hBUikoMTMyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzQ6 IHJldHVybigoQ0hBUikoMTMzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzU6IHJldHVybigo Q0hBUikoMTM0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzY6IHJldHVybigoQ0hBUikoMjI1 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzc6IHJldHVybigoQ0hBUikoMTM1ICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwYzg6IHJldHVybigoQ0hBUikoMTM2ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwYzk6IHJldHVybigoQ0hBUikoMTM3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw Y2E6IHJldHVybigoQ0hBUikoMTM4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwY2I6IHJldHVy bigoQ0hBUikoMTM5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwY2M6IHJldHVybigoQ0hBUiko MTQwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwY2Q6IHJldHVybigoQ0hBUikoMTQxICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwY2U6IHJldHVybigoQ0hBUikoMTQyICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwY2Y6IHJldHVybigoQ0hBUikoMTQzICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwZDA6IHJldHVybigoQ0hBUikoMTQ0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDE6IHJl dHVybigoQ0hBUikoMTQ1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDI6IHJldHVybigoQ0hB UikoMTQ2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDM6IHJldHVybigoQ0hBUikoMTQ3ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwZDQ6IHJldHVybigoQ0hBUikoMTQ4ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwZDU6IHJldHVybigoQ0hBUikoMTQ5ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwZDY6IHJldHVybigoQ0hBUikoMTUwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDc6 IHJldHVybigoQ0hBUikoMTU4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDg6IHJldHVybigo Q0hBUikoMjMzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDk6IHJldHVybigoQ0hBUikoMTUx ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZGE6IHJldHVybigoQ0hBUikoMTUyICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwZGI6IHJldHVybigoQ0hBUikoMTUzICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwZGM6IHJldHVybigoQ0hBUikoMTU0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw ZGQ6IHJldHVybigoQ0hBUikoMTU1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZGU6IHJldHVy bigoQ0hBUikoMTU2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZGY6IHJldHVybigoQ0hBUiko MjUxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZTA6IHJldHVybigoQ0hBUikoMjEzICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwZTE6IHJldHVybigoQ0hBUikoMjE0ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwZTI6IHJldHVybigoQ0hBUikoMjE1ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwZTM6IHJldHVybigoQ0hBUikoMjE2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZTQ6IHJl dHVybigoQ0hBUikoMjE3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZTU6IHJldHVybigoQ0hB UikoMjE4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZTY6IHJldHVybigoQ0hBUikoMjQxICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwZTc6IHJldHVybigoQ0hBUikoMjE5ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwZTg6IHJldHVybigoQ0hBUikoMjIwICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwZTk6IHJldHVybigoQ0hBUikoMjIxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZWE6 IHJldHVybigoQ0hBUikoMjIyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZWI6IHJldHVybigo Q0hBUikoMjIzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZWM6IHJldHVybigoQ0hBUikoMjI0 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZWQ6IHJldHVybigoQ0hBUikoMjI2ICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwZWU6IHJldHVybigoQ0hBUikoMjI4ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwZWY6IHJldHVybigoQ0hBUikoMjI5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw ZjA6IHJldHVybigoQ0hBUikoMjMwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjE6IHJldHVy bigoQ0hBUikoMjMxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjI6IHJldHVybigoQ0hBUiko MjM2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjM6IHJldHVybigoQ0hBUikoMjM3ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwZjQ6IHJldHVybigoQ0hBUikoMjM4ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwZjU6IHJldHVybigoQ0hBUikoMjM5ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwZjY6IHJldHVybigoQ0hBUikoMjQwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjc6IHJl dHVybigoQ0hBUikoMTU5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjg6IHJldHVybigoQ0hB UikoMjQ5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjk6IHJldHVybigoQ0hBUikoMjQyICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwZmE6IHJldHVybigoQ0hBUikoMjQzICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwZmI6IHJldHVybigoQ0hBUikoMjQ0ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwZmM6IHJldHVybigoQ0hBUikoMjQ2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZmQ6 IHJldHVybigoQ0hBUikoMjQ3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZmU6IHJldHVybigo Q0hBUikoMjUyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZmY6IHJldHVybigoQ0hBUikoMjUz ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxMzE6IHJldHVybigoQ0hBUikoMjQ1ICYgMHhmZikp OwotICAgICAgY2FzZSAweDAxNDE6IHJldHVybigoQ0hBUikoMjMyICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAxNDI6IHJldHVybigoQ0hBUikoMjQ4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAx NTI6IHJldHVybigoQ0hBUikoMjM0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxNTM6IHJldHVy bigoQ0hBUikoMjUwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxOTI6IHJldHVybigoQ0hBUiko MTY2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAyYzY6IHJldHVybigoQ0hBUikoMTk1ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAyYzc6IHJldHVybigoQ0hBUikoMjA3ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAyY2I6IHJldHVybigoQ0hBUikoMTkzICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAyZDg6IHJldHVybigoQ0hBUikoMTk4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAyZDk6IHJl dHVybigoQ0hBUikoMTk5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAyZGE6IHJldHVybigoQ0hB UikoMjAyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAyZGI6IHJldHVybigoQ0hBUikoMjA2ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAyZGM6IHJldHVybigoQ0hBUikoMTk2ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAyZGQ6IHJldHVybigoQ0hBUikoMjA1ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDIwMTM6IHJldHVybigoQ0hBUikoMTc3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMTQ6 IHJldHVybigoQ0hBUikoMjA4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMTk6IHJldHVybigo Q0hBUikoMTY5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMWE6IHJldHVybigoQ0hBUikoMTg0 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMWM6IHJldHVybigoQ0hBUikoMTcwICYgMHhmZikp OwotICAgICAgY2FzZSAweDIwMWQ6IHJldHVybigoQ0hBUikoMTg2ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDIwMWU6IHJldHVybigoQ0hBUikoMTg1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIw MjA6IHJldHVybigoQ0hBUikoMTc4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMjE6IHJldHVy bigoQ0hBUikoMTc5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMjI6IHJldHVybigoQ0hBUiko MTgzICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMjY6IHJldHVybigoQ0hBUikoMTg4ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDIwMzA6IHJldHVybigoQ0hBUikoMTg5ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDIwMzk6IHJldHVybigoQ0hBUikoMTcyICYgMHhmZikpOwotICAgICAgY2FzZSAw eDIwM2E6IHJldHVybigoQ0hBUikoMTczICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwNDQ6IHJl dHVybigoQ0hBUikoMTY0ICYgMHhmZikpOwotICAgICAgY2FzZSAweGZiMDE6IHJldHVybigoQ0hB UikoMTc0ICYgMHhmZikpOwotICAgICAgY2FzZSAweGZiMDI6IHJldHVybigoQ0hBUikoMTc1ICYg MHhmZikpOwotICAgICAgZGVmYXVsdDogcmV0dXJuKHR4X3B1bmMoYykpOwotICAgIH0KLX0KLQot aW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERHIEludGVybmF0aW9u YWwgKi8KLSNpZmRlZiBDS19BTlNJQwotdHhfZGdpKFVTSE9SVCBjKQotI2Vsc2UKLXR4X2RnaShj KSBVU0hPUlQgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjIDwgMHhhMCkK LSAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKLSAgICBzd2l0Y2goYykgewotICAgICAg Y2FzZSAweDAwYTA6IHJldHVybigoQ0hBUikoMTYwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw YTE6IHJldHVybigoQ0hBUikoMTcxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYTI6IHJldHVy bigoQ0hBUikoMTY3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYTM6IHJldHVybigoQ0hBUiko MTY4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYTQ6IHJldHVybigoQ0hBUikoMTY2ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwYTU6IHJldHVybigoQ0hBUikoMTgxICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwYTc6IHJldHVybigoQ0hBUikoMTg3ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwYTg6IHJldHVybigoQ0hBUikoMTg5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYTk6IHJl dHVybigoQ0hBUikoMTczICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYWE6IHJldHVybigoQ0hB UikoMTY5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYWI6IHJldHVybigoQ0hBUikoMTc3ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwYWM6IHJldHVybigoQ0hBUikoMTYxICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwYWU6IHJldHVybigoQ0hBUikoMTc0ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwYjA6IHJldHVybigoQ0hBUikoMTg4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjE6 IHJldHVybigoQ0hBUikoMTgyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjI6IHJldHVybigo Q0hBUikoMTY0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjM6IHJldHVybigoQ0hBUikoMTY1 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjQ6IHJldHVybigoQ0hBUikoMTkwICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwYjU6IHJldHVybigoQ0hBUikoMTYzICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwYjY6IHJldHVybigoQ0hBUikoMTc4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw Yjc6IHJldHVybigoQ0hBUikoMTg1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjg6IHJldHVy bigoQ0hBUikoMTg2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYmE6IHJldHVybigoQ0hBUiko MTcwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYmI6IHJldHVybigoQ0hBUikoMTc2ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwYmQ6IHJldHVybigoQ0hBUikoMTYyICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwYmY6IHJldHVybigoQ0hBUikoMTcyICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwYzA6IHJldHVybigoQ0hBUikoMTkzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzE6IHJl dHVybigoQ0hBUikoMTkyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzI6IHJldHVybigoQ0hB UikoMTk0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzM6IHJldHVybigoQ0hBUikoMTk2ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwYzQ6IHJldHVybigoQ0hBUikoMTk1ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwYzU6IHJldHVybigoQ0hBUikoMTk3ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwYzY6IHJldHVybigoQ0hBUikoMTk4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzc6 IHJldHVybigoQ0hBUikoMTk5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzg6IHJldHVybigo Q0hBUikoMjAxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzk6IHJldHVybigoQ0hBUikoMjAw ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwY2E6IHJldHVybigoQ0hBUikoMjAyICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwY2I6IHJldHVybigoQ0hBUikoMjAzICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwY2M6IHJldHVybigoQ0hBUikoMjA1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw Y2Q6IHJldHVybigoQ0hBUikoMjA0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwY2U6IHJldHVy bigoQ0hBUikoMjA2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwY2Y6IHJldHVybigoQ0hBUiko MjA3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDE6IHJldHVybigoQ0hBUikoMjA4ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwZDI6IHJldHVybigoQ0hBUikoMjEwICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwZDM6IHJldHVybigoQ0hBUikoMjA5ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwZDQ6IHJldHVybigoQ0hBUikoMjExICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDU6IHJl dHVybigoQ0hBUikoMjEzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDY6IHJldHVybigoQ0hB UikoMjEyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDg6IHJldHVybigoQ0hBUikoMjE0ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwZDk6IHJldHVybigoQ0hBUikoMjE3ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwZGE6IHJldHVybigoQ0hBUikoMjE2ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwZGI6IHJldHVybigoQ0hBUikoMjE4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZGM6 IHJldHVybigoQ0hBUikoMjE5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZGY6IHJldHVybigo Q0hBUikoMjUyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZTA6IHJldHVybigoQ0hBUikoMjI1 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZTE6IHJldHVybigoQ0hBUikoMjI0ICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwZTI6IHJldHVybigoQ0hBUikoMjI2ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwZTM6IHJldHVybigoQ0hBUikoMjI4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw ZTQ6IHJldHVybigoQ0hBUikoMjI3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZTU6IHJldHVy bigoQ0hBUikoMjI5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZTY6IHJldHVybigoQ0hBUiko MjMwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZTc6IHJldHVybigoQ0hBUikoMjMxICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwZTg6IHJldHVybigoQ0hBUikoMjMzICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwZTk6IHJldHVybigoQ0hBUikoMjMyICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwZWE6IHJldHVybigoQ0hBUikoMjM0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZWI6IHJl dHVybigoQ0hBUikoMjM1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZWM6IHJldHVybigoQ0hB UikoMjM3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZWQ6IHJldHVybigoQ0hBUikoMjM2ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwZWU6IHJldHVybigoQ0hBUikoMjM4ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwZWY6IHJldHVybigoQ0hBUikoMjM5ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwZjE6IHJldHVybigoQ0hBUikoMjQwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjI6 IHJldHVybigoQ0hBUikoMjQyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjM6IHJldHVybigo Q0hBUikoMjQxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjQ6IHJldHVybigoQ0hBUikoMjQz ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjU6IHJldHVybigoQ0hBUikoMjQ1ICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwZjY6IHJldHVybigoQ0hBUikoMjQ0ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwZjg6IHJldHVybigoQ0hBUikoMjQ2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw Zjk6IHJldHVybigoQ0hBUikoMjQ5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZmE6IHJldHVy bigoQ0hBUikoMjQ4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZmI6IHJldHVybigoQ0hBUiko MjUwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZmM6IHJldHVybigoQ0hBUikoMjUxICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwZmY6IHJldHVybigoQ0hBUikoMjUzICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAxNTM6IHJldHVybigoQ0hBUikoMjQ3ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAxNzg6IHJldHVybigoQ0hBUikoMjIxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxOTI6IHJl dHVybigoQ0hBUikoMTgwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAyNzY6IHJldHVybigoQ0hB UikoMjE1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMjE6IHJldHVybigoQ0hBUikoMTc1ICYg MHhmZikpOwotICAgICAgY2FzZSAweDIxMjI6IHJldHVybigoQ0hBUikoMTc5ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDIxOTE6IHJldHVybigoQ0hBUikoMTkxICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDIyNjQ6IHJldHVybigoQ0hBUikoMTgzICYgMHhmZikpOwotICAgICAgY2FzZSAweDIyNjU6 IHJldHVybigoQ0hBUikoMTg0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1ODg6IHJldHVybigo Q0hBUikoMjU1ICYgMHhmZikpOwotICAgICAgZGVmYXVsdDogcmV0dXJuKHR4X3B1bmMoYykpOwot ICAgIH0KLX0KLQotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1h Y2ludG9zaCBMYXRpbiAqLwotI2lmZGVmIENLX0FOU0lDCi10eF9tYWNsYXRpbihVU0hPUlQgYykK LSNlbHNlCi10eF9tYWNsYXRpbihjKSBVU0hPUlQgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot ewotICAgIGlmIChjIDwgMHg4MCkgICAgICAgICAgICAgICAgICAgICAgIC8qIEhhcyBDMSBncmFw aGljcyAqLwotICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOwotICAgIHN3aXRjaCAoYykg ewotICAgICAgY2FzZSAweDAwYTA6IHJldHVybigoQ0hBUikoMjAyICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwYTE6IHJldHVybigoQ0hBUikoMTkzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw YTI6IHJldHVybigoQ0hBUikoMTYyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYTM6IHJldHVy bigoQ0hBUikoMTYzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYTQ6IHJldHVybigoQ0hBUiko MjE5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYTU6IHJldHVybigoQ0hBUikoMTgwICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwYTc6IHJldHVybigoQ0hBUikoMTY0ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwYTg6IHJldHVybigoQ0hBUikoMTcyICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwYTk6IHJldHVybigoQ0hBUikoMTY5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYWE6IHJl dHVybigoQ0hBUikoMTg3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYWI6IHJldHVybigoQ0hB UikoMTk5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYWM6IHJldHVybigoQ0hBUikoMTk0ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwYWU6IHJldHVybigoQ0hBUikoMTY4ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwYWY6IHJldHVybigoQ0hBUikoMjQ4ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwYjA6IHJldHVybigoQ0hBUikoMTYxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjE6 IHJldHVybigoQ0hBUikoMTc3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjQ6IHJldHVybigo Q0hBUikoMTcxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjU6IHJldHVybigoQ0hBUikoMTgx ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjY6IHJldHVybigoQ0hBUikoMTY2ICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwYjc6IHJldHVybigoQ0hBUikoMjI1ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwYjg6IHJldHVybigoQ0hBUikoMjUyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw YmE6IHJldHVybigoQ0hBUikoMTg4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYmI6IHJldHVy bigoQ0hBUikoMjAwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYmY6IHJldHVybigoQ0hBUiko MTkyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzA6IHJldHVybigoQ0hBUikoMjAzICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwYzE6IHJldHVybigoQ0hBUikoMjMxICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwYzI6IHJldHVybigoQ0hBUikoMjI5ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwYzM6IHJldHVybigoQ0hBUikoMjA0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzQ6IHJl dHVybigoQ0hBUikoMTI4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzU6IHJldHVybigoQ0hB UikoMTI5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzY6IHJldHVybigoQ0hBUikoMTc0ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwYzc6IHJldHVybigoQ0hBUikoMTMwICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwYzg6IHJldHVybigoQ0hBUikoMjMzICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwYzk6IHJldHVybigoQ0hBUikoMTMxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwY2E6 IHJldHVybigoQ0hBUikoMjMwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwY2I6IHJldHVybigo Q0hBUikoMjMyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwY2M6IHJldHVybigoQ0hBUikoMjM3 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwY2Q6IHJldHVybigoQ0hBUikoMjM0ICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwY2U6IHJldHVybigoQ0hBUikoMjM1ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwY2Y6IHJldHVybigoQ0hBUikoMjM2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw ZDA6IHJldHVybigoQ0hBUikoMjIwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDE6IHJldHVy bigoQ0hBUikoMTMyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDI6IHJldHVybigoQ0hBUiko MjQxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDM6IHJldHVybigoQ0hBUikoMjM4ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwZDQ6IHJldHVybigoQ0hBUikoMjM5ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwZDU6IHJldHVybigoQ0hBUikoMjA1ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwZDY6IHJldHVybigoQ0hBUikoMTMzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDg6IHJl dHVybigoQ0hBUikoMTc1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDk6IHJldHVybigoQ0hB UikoMjQ0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZGE6IHJldHVybigoQ0hBUikoMjQyICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwZGI6IHJldHVybigoQ0hBUikoMjQzICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwZGM6IHJldHVybigoQ0hBUikoMTM0ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwZGQ6IHJldHVybigoQ0hBUikoMTYwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZGU6 IHJldHVybigoQ0hBUikoMjIyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZGY6IHJldHVybigo Q0hBUikoMTY3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZTA6IHJldHVybigoQ0hBUikoMTM2 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZTE6IHJldHVybigoQ0hBUikoMTM1ICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwZTI6IHJldHVybigoQ0hBUikoMTM3ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwZTM6IHJldHVybigoQ0hBUikoMTM5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw ZTQ6IHJldHVybigoQ0hBUikoMTM4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZTU6IHJldHVy bigoQ0hBUikoMTQwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZTY6IHJldHVybigoQ0hBUiko MTkwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZTc6IHJldHVybigoQ0hBUikoMTQxICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwZTg6IHJldHVybigoQ0hBUikoMTQzICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwZTk6IHJldHVybigoQ0hBUikoMTQyICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwZWE6IHJldHVybigoQ0hBUikoMTQ0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZWI6IHJl dHVybigoQ0hBUikoMTQ1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZWM6IHJldHVybigoQ0hB UikoMTQ3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZWQ6IHJldHVybigoQ0hBUikoMTQ2ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwZWU6IHJldHVybigoQ0hBUikoMTQ4ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwZWY6IHJldHVybigoQ0hBUikoMTQ5ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwZjA6IHJldHVybigoQ0hBUikoMjIxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjE6 IHJldHVybigoQ0hBUikoMTUwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjI6IHJldHVybigo Q0hBUikoMTUyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjM6IHJldHVybigoQ0hBUikoMTUx ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjQ6IHJldHVybigoQ0hBUikoMTUzICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwZjU6IHJldHVybigoQ0hBUikoMTU1ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwZjY6IHJldHVybigoQ0hBUikoMTU0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw Zjc6IHJldHVybigoQ0hBUikoMjE0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjg6IHJldHVy bigoQ0hBUikoMTkxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjk6IHJldHVybigoQ0hBUiko MTU3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZmE6IHJldHVybigoQ0hBUikoMTU2ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwZmI6IHJldHVybigoQ0hBUikoMTU4ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwZmM6IHJldHVybigoQ0hBUikoMTU5ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwZmQ6IHJldHVybigoQ0hBUikoMjI0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZmU6IHJl dHVybigoQ0hBUikoMjIzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZmY6IHJldHVybigoQ0hB UikoMjE2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxMzE6IHJldHVybigoQ0hBUikoMjQ1ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAxNTI6IHJldHVybigoQ0hBUikoMjA2ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAxNTM6IHJldHVybigoQ0hBUikoMjA3ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAxNzg6IHJldHVybigoQ0hBUikoMjE3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxOTI6 IHJldHVybigoQ0hBUikoMTk2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAyYzY6IHJldHVybigo Q0hBUikoMjQ2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAyYzc6IHJldHVybigoQ0hBUikoMjU1 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAyZDg6IHJldHVybigoQ0hBUikoMjQ5ICYgMHhmZikp OwotICAgICAgY2FzZSAweDAyZDk6IHJldHVybigoQ0hBUikoMjUwICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAyZGE6IHJldHVybigoQ0hBUikoMjUxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAy ZGI6IHJldHVybigoQ0hBUikoMjU0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAyZGM6IHJldHVy bigoQ0hBUikoMjQ3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAyZGQ6IHJldHVybigoQ0hBUiko MjUzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYzA6IHJldHVybigoQ0hBUikoMTg1ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDIwMTM6IHJldHVybigoQ0hBUikoMjA4ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDIwMTQ6IHJldHVybigoQ0hBUikoMjA5ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDIwMTg6IHJldHVybigoQ0hBUikoMjEyICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMTk6IHJl dHVybigoQ0hBUikoMjEzICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMWE6IHJldHVybigoQ0hB UikoMjI2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMWM6IHJldHVybigoQ0hBUikoMjEwICYg MHhmZikpOwotICAgICAgY2FzZSAweDIwMWQ6IHJldHVybigoQ0hBUikoMjExICYgMHhmZikpOwot ICAgICAgY2FzZSAweDIwMWU6IHJldHVybigoQ0hBUikoMjI3ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDIwMjI6IHJldHVybigoQ0hBUikoMTY1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMjY6 IHJldHVybigoQ0hBUikoMjAxICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMzA6IHJldHVybigo Q0hBUikoMjI4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwNDQ6IHJldHVybigoQ0hBUikoMjE4 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIxMjI6IHJldHVybigoQ0hBUikoMTcwICYgMHhmZikp OwotICAgICAgY2FzZSAweDIxMjY6IHJldHVybigoQ0hBUikoMTg5ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDIyMDI6IHJldHVybigoQ0hBUikoMTgyICYgMHhmZikpOwotICAgICAgY2FzZSAweDIy MDY6IHJldHVybigoQ0hBUikoMTk4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIyMGY6IHJldHVy bigoQ0hBUikoMTg0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIyMTE6IHJldHVybigoQ0hBUiko MTgzICYgMHhmZikpOwotICAgICAgY2FzZSAweDIyMWE6IHJldHVybigoQ0hBUikoMTk1ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDIyMWU6IHJldHVybigoQ0hBUikoMTc2ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDIyMmI6IHJldHVybigoQ0hBUikoMTg2ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDIyNDg6IHJldHVybigoQ0hBUikoMTk3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIyNjA6IHJl dHVybigoQ0hBUikoMTczICYgMHhmZikpOwotICAgICAgY2FzZSAweDIyNjQ6IHJldHVybigoQ0hB UikoMTc4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIyNjU6IHJldHVybigoQ0hBUikoMTc5ICYg MHhmZikpOwotICAgICAgY2FzZSAweDI1Y2E6IHJldHVybigoQ0hBUikoMjE1ICYgMHhmZikpOwot ICAgICAgY2FzZSAweGY4ZmY6IHJldHVybigoQ0hBUikoMjQwICYgMHhmZikpOwotICAgICAgZGVm YXVsdDogcmV0dXJuKHR4X3B1bmMoYykpOwotICAgIH0KLX0KLQotaW50ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEFwcGxlIFF1aWNrRHJhdyAvIENQMTAwMDAgKi8KLSNp ZmRlZiBDS19BTlNJQwotdHhfcXVpY2tkcmF3KFVTSE9SVCBjKQotI2Vsc2UKLXR4X3F1aWNrZHJh dyhjKSBVU0hPUlQgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjIDwgMHg4 MCkgICAgICAgICAgICAgICAgICAgICAgIC8qIEhhcyBDMSBncmFwaGljcyAqLwotICAgICAgcmV0 dXJuKChDSEFSKShjICYgMHhmZikpOwotICAgIHN3aXRjaCAoYykgewotICAgICAgY2FzZSAweDAw YTA6IHJldHVybigoQ0hBUikoMjAyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYTE6IHJldHVy bigoQ0hBUikoMTkzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYTI6IHJldHVybigoQ0hBUiko MTYyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYTM6IHJldHVybigoQ0hBUikoMTYzICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwYTQ6IHJldHVybigoQ0hBUikoMjE5ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwYTU6IHJldHVybigoQ0hBUikoMTgwICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwYTc6IHJldHVybigoQ0hBUikoMTY0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYTg6IHJl dHVybigoQ0hBUikoMTcyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYTk6IHJldHVybigoQ0hB UikoMTY5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYWE6IHJldHVybigoQ0hBUikoMTg3ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwYWI6IHJldHVybigoQ0hBUikoMTk5ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwYWM6IHJldHVybigoQ0hBUikoMTk0ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwYWU6IHJldHVybigoQ0hBUikoMTY4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYWY6 IHJldHVybigoQ0hBUikoMjQ4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjA6IHJldHVybigo Q0hBUikoMTYxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjE6IHJldHVybigoQ0hBUikoMTc3 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjQ6IHJldHVybigoQ0hBUikoMTcxICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwYjU6IHJldHVybigoQ0hBUikoMTgxICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwYjY6IHJldHVybigoQ0hBUikoMTY2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw Yjc6IHJldHVybigoQ0hBUikoMjI1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjg6IHJldHVy bigoQ0hBUikoMjUyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYmE6IHJldHVybigoQ0hBUiko MTg4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYmI6IHJldHVybigoQ0hBUikoMjAwICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwYmY6IHJldHVybigoQ0hBUikoMTkyICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwYzA6IHJldHVybigoQ0hBUikoMjAzICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwYzE6IHJldHVybigoQ0hBUikoMjMxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzI6IHJl dHVybigoQ0hBUikoMjI5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzM6IHJldHVybigoQ0hB UikoMjA0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzQ6IHJldHVybigoQ0hBUikoMTI4ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwYzU6IHJldHVybigoQ0hBUikoMTI5ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwYzY6IHJldHVybigoQ0hBUikoMTc0ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwYzc6IHJldHVybigoQ0hBUikoMTMwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzg6 IHJldHVybigoQ0hBUikoMjMzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzk6IHJldHVybigo Q0hBUikoMTMxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwY2E6IHJldHVybigoQ0hBUikoMjMw ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwY2I6IHJldHVybigoQ0hBUikoMjMyICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwY2M6IHJldHVybigoQ0hBUikoMjM3ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwY2Q6IHJldHVybigoQ0hBUikoMjM0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw Y2U6IHJldHVybigoQ0hBUikoMjM1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwY2Y6IHJldHVy bigoQ0hBUikoMjM2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMzk6IHJldHVybigoQ0hBUiko MjIwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDE6IHJldHVybigoQ0hBUikoMTMyICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwZDI6IHJldHVybigoQ0hBUikoMjQxICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwZDM6IHJldHVybigoQ0hBUikoMjM4ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwZDQ6IHJldHVybigoQ0hBUikoMjM5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDU6IHJl dHVybigoQ0hBUikoMjA1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDY6IHJldHVybigoQ0hB UikoMTMzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDg6IHJldHVybigoQ0hBUikoMTc1ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwZDk6IHJldHVybigoQ0hBUikoMjQ0ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwZGE6IHJldHVybigoQ0hBUikoMjQyICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwZGI6IHJldHVybigoQ0hBUikoMjQzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZGM6 IHJldHVybigoQ0hBUikoMTM0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMjA6IHJldHVybigo Q0hBUikoMTYwICYgMHhmZikpOwotICAgICAgY2FzZSAweGZiMDE6IHJldHVybigoQ0hBUikoMjIy ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZGY6IHJldHVybigoQ0hBUikoMTY3ICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwZTA6IHJldHVybigoQ0hBUikoMTM2ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwZTE6IHJldHVybigoQ0hBUikoMTM1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw ZTI6IHJldHVybigoQ0hBUikoMTM3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZTM6IHJldHVy bigoQ0hBUikoMTM5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZTQ6IHJldHVybigoQ0hBUiko MTM4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZTU6IHJldHVybigoQ0hBUikoMTQwICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwZTY6IHJldHVybigoQ0hBUikoMTkwICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwZTc6IHJldHVybigoQ0hBUikoMTQxICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwZTg6IHJldHVybigoQ0hBUikoMTQzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZTk6IHJl dHVybigoQ0hBUikoMTQyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZWE6IHJldHVybigoQ0hB UikoMTQ0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZWI6IHJldHVybigoQ0hBUikoMTQ1ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwZWM6IHJldHVybigoQ0hBUikoMTQ3ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwZWQ6IHJldHVybigoQ0hBUikoMTQ2ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwZWU6IHJldHVybigoQ0hBUikoMTQ4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZWY6 IHJldHVybigoQ0hBUikoMTQ5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwM2E6IHJldHVybigo Q0hBUikoMjIxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjE6IHJldHVybigoQ0hBUikoMTUw ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjI6IHJldHVybigoQ0hBUikoMTUyICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwZjM6IHJldHVybigoQ0hBUikoMTUxICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwZjQ6IHJldHVybigoQ0hBUikoMTUzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw ZjU6IHJldHVybigoQ0hBUikoMTU1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjY6IHJldHVy bigoQ0hBUikoMTU0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjc6IHJldHVybigoQ0hBUiko MjE0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjg6IHJldHVybigoQ0hBUikoMTkxICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwZjk6IHJldHVybigoQ0hBUikoMTU3ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwZmE6IHJldHVybigoQ0hBUikoMTU2ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwZmI6IHJldHVybigoQ0hBUikoMTU4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZmM6IHJl dHVybigoQ0hBUikoMTU5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMjE6IHJldHVybigoQ0hB UikoMjI0ICYgMHhmZikpOwotICAgICAgY2FzZSAweGZiMDI6IHJldHVybigoQ0hBUikoMjIzICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwZmY6IHJldHVybigoQ0hBUikoMjE2ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAxMzE6IHJldHVybigoQ0hBUikoMjQ1ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAxNTI6IHJldHVybigoQ0hBUikoMjA2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxNTM6 IHJldHVybigoQ0hBUikoMjA3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxNzg6IHJldHVybigo Q0hBUikoMjE3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxOTI6IHJldHVybigoQ0hBUikoMTk2 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAyYzY6IHJldHVybigoQ0hBUikoMjQ2ICYgMHhmZikp OwotICAgICAgY2FzZSAweDAyYzc6IHJldHVybigoQ0hBUikoMjU1ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAyZDg6IHJldHVybigoQ0hBUikoMjQ5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAy ZDk6IHJldHVybigoQ0hBUikoMjUwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAyZGE6IHJldHVy bigoQ0hBUikoMjUxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAyZGI6IHJldHVybigoQ0hBUiko MjU0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAyZGM6IHJldHVybigoQ0hBUikoMjQ3ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAyZGQ6IHJldHVybigoQ0hBUikoMjUzICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAzYzA6IHJldHVybigoQ0hBUikoMTg1ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDIwMTM6IHJldHVybigoQ0hBUikoMjA4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMTQ6IHJl dHVybigoQ0hBUikoMjA5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMTg6IHJldHVybigoQ0hB UikoMjEyICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMTk6IHJldHVybigoQ0hBUikoMjEzICYg MHhmZikpOwotICAgICAgY2FzZSAweDIwMWE6IHJldHVybigoQ0hBUikoMjI2ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDIwMWM6IHJldHVybigoQ0hBUikoMjEwICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDIwMWQ6IHJldHVybigoQ0hBUikoMjExICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMWU6 IHJldHVybigoQ0hBUikoMjI3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMjI6IHJldHVybigo Q0hBUikoMTY1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMjY6IHJldHVybigoQ0hBUikoMjAx ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMzA6IHJldHVybigoQ0hBUikoMjI4ICYgMHhmZikp OwotICAgICAgY2FzZSAweDIwNDQ6IHJldHVybigoQ0hBUikoMjE4ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDIxMjI6IHJldHVybigoQ0hBUikoMTcwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAz YTk6IHJldHVybigoQ0hBUikoMTg5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIyMDI6IHJldHVy bigoQ0hBUikoMTgyICYgMHhmZikpOwotICAgICAgY2FzZSAweDIyMDY6IHJldHVybigoQ0hBUiko MTk4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIyMGY6IHJldHVybigoQ0hBUikoMTg0ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDIyMTE6IHJldHVybigoQ0hBUikoMTgzICYgMHhmZikpOwotICAg ICAgY2FzZSAweDIyMWE6IHJldHVybigoQ0hBUikoMTk1ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDIyMWU6IHJldHVybigoQ0hBUikoMTc2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIyMmI6IHJl dHVybigoQ0hBUikoMTg2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIyNDg6IHJldHVybigoQ0hB UikoMTk3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIyNjA6IHJldHVybigoQ0hBUikoMTczICYg MHhmZikpOwotICAgICAgY2FzZSAweDIyNjQ6IHJldHVybigoQ0hBUikoMTc4ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDIyNjU6IHJldHVybigoQ0hBUikoMTc5ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDI1Y2E6IHJldHVybigoQ0hBUikoMjE1ICYgMHhmZikpOwotICAgICAgY2FzZSAweGY4ZmY6 IHJldHVybigoQ0hBUikoMjQwICYgMHhmZikpOwotICAgICAgZGVmYXVsdDogcmV0dXJuKHR4X3B1 bmMoYykpOwotICAgIH0KLX0KLQotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEhQIFJvbWFuLTggKi8KLSNpZmRlZiBDS19BTlNJQwotdHhfaHByb21hbjgoVVNIT1JU IGMpCi0jZWxzZQotdHhfaHByb21hbjgoYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMg Ki8KLXsKLSAgICBpZiAoYyA8IDB4YTApCi0gICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7 Ci0gICAgc3dpdGNoKGMpIHsKLSAgICAgIGNhc2UgMHgwMGEwOiByZXR1cm4oKENIQVIpKDE2MCAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGExOiByZXR1cm4oKENIQVIpKDE3MSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGEyOiByZXR1cm4oKENIQVIpKDE2NyAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGEzOiByZXR1cm4oKENIQVIpKDE2OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE0 OiByZXR1cm4oKENIQVIpKDE2NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE1OiByZXR1cm4o KENIQVIpKDE4MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE3OiByZXR1cm4oKENIQVIpKDE4 NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE4OiByZXR1cm4oKENIQVIpKDE4OSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGE5OiByZXR1cm4oKENIQVIpKDE3MyAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGFhOiByZXR1cm4oKENIQVIpKDE2OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGFiOiByZXR1cm4oKENIQVIpKDE3NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGFjOiByZXR1 cm4oKENIQVIpKDE2MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGFlOiByZXR1cm4oKENIQVIp KDE3NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGIwOiByZXR1cm4oKENIQVIpKDE4OCAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGIxOiByZXR1cm4oKENIQVIpKDE4MiAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGIyOiByZXR1cm4oKENIQVIpKDE2NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGIzOiByZXR1cm4oKENIQVIpKDE2NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGI0OiBy ZXR1cm4oKENIQVIpKDE5MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGI1OiByZXR1cm4oKENI QVIpKDE2MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGI2OiByZXR1cm4oKENIQVIpKDE3OCAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGI3OiByZXR1cm4oKENIQVIpKDE4NSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGI4OiByZXR1cm4oKENIQVIpKDE4NiAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGJhOiByZXR1cm4oKENIQVIpKDE3MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGJi OiByZXR1cm4oKENIQVIpKDE3NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGJkOiByZXR1cm4o KENIQVIpKDE2MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGJmOiByZXR1cm4oKENIQVIpKDE3 MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGMwOiByZXR1cm4oKENIQVIpKDE5MyAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGMxOiByZXR1cm4oKENIQVIpKDE5MiAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGMyOiByZXR1cm4oKENIQVIpKDE5NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGMzOiByZXR1cm4oKENIQVIpKDE5NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM0OiByZXR1 cm4oKENIQVIpKDE5NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM1OiByZXR1cm4oKENIQVIp KDE5NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM2OiByZXR1cm4oKENIQVIpKDE5OCAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM3OiByZXR1cm4oKENIQVIpKDE5OSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGM4OiByZXR1cm4oKENIQVIpKDIwMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGM5OiByZXR1cm4oKENIQVIpKDIwMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNhOiBy ZXR1cm4oKENIQVIpKDIwMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNiOiByZXR1cm4oKENI QVIpKDIwMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNjOiByZXR1cm4oKENIQVIpKDIwNSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNkOiByZXR1cm4oKENIQVIpKDIwNCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGNlOiByZXR1cm4oKENIQVIpKDIwNiAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGNmOiByZXR1cm4oKENIQVIpKDIwNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQx OiByZXR1cm4oKENIQVIpKDIwOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQyOiByZXR1cm4o KENIQVIpKDIxMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQzOiByZXR1cm4oKENIQVIpKDIw OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ0OiByZXR1cm4oKENIQVIpKDIxMSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGQ1OiByZXR1cm4oKENIQVIpKDIxMyAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGQ2OiByZXR1cm4oKENIQVIpKDIxMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGQ4OiByZXR1cm4oKENIQVIpKDIxNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ5OiByZXR1 cm4oKENIQVIpKDIxNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGRhOiByZXR1cm4oKENIQVIp KDIxNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGRiOiByZXR1cm4oKENIQVIpKDIxOCAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGRjOiByZXR1cm4oKENIQVIpKDIxOSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGRmOiByZXR1cm4oKENIQVIpKDI1MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGUwOiByZXR1cm4oKENIQVIpKDIyNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGUxOiBy ZXR1cm4oKENIQVIpKDIyNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGUyOiByZXR1cm4oKENI QVIpKDIyNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGUzOiByZXR1cm4oKENIQVIpKDIyOCAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGU0OiByZXR1cm4oKENIQVIpKDIyNyAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGU1OiByZXR1cm4oKENIQVIpKDIyOSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGU2OiByZXR1cm4oKENIQVIpKDIzMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGU3 OiByZXR1cm4oKENIQVIpKDIzMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGU4OiByZXR1cm4o KENIQVIpKDIzMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGU5OiByZXR1cm4oKENIQVIpKDIz MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGVhOiByZXR1cm4oKENIQVIpKDIzNCAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGViOiByZXR1cm4oKENIQVIpKDIzNSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGVjOiByZXR1cm4oKENIQVIpKDIzNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGVkOiByZXR1cm4oKENIQVIpKDIzNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGVlOiByZXR1 cm4oKENIQVIpKDIzOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGVmOiByZXR1cm4oKENIQVIp KDIzOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGYxOiByZXR1cm4oKENIQVIpKDI0MCAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGYyOiByZXR1cm4oKENIQVIpKDI0MiAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGYzOiByZXR1cm4oKENIQVIpKDI0MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGY0OiByZXR1cm4oKENIQVIpKDI0MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGY1OiBy ZXR1cm4oKENIQVIpKDI0NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGY2OiByZXR1cm4oKENI QVIpKDI0NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGY4OiByZXR1cm4oKENIQVIpKDI0NiAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGY5OiByZXR1cm4oKENIQVIpKDI0OSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGZhOiByZXR1cm4oKENIQVIpKDI0OCAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGZiOiByZXR1cm4oKENIQVIpKDI1MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGZj OiByZXR1cm4oKENIQVIpKDI1MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGZmOiByZXR1cm4o KENIQVIpKDI1MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTUzOiByZXR1cm4oKENIQVIpKDI0 NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTc4OiByZXR1cm4oKENIQVIpKDIyMSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMTkyOiByZXR1cm4oKENIQVIpKDE4MCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMjc2OiByZXR1cm4oKENIQVIpKDIxNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy MDIxOiByZXR1cm4oKENIQVIpKDE3NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMTIyOiByZXR1 cm4oKENIQVIpKDE3OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMTkxOiByZXR1cm4oKENIQVIp KDE5MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjY0OiByZXR1cm4oKENIQVIpKDE4MyAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjY1OiByZXR1cm4oKENIQVIpKDE4NCAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgyNTg4OiByZXR1cm4oKENIQVIpKDI1NSAmIDB4ZmYpKTsKLSAgICAgIGRlZmF1 bHQ6IHJldHVybih0eF9wdW5jKGMpKTsKLSAgICB9Ci19Ci0KLWludCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBQQyBDb2RlIFBhZ2UgNDM3ICovCi0jaWZkZWYgQ0tfQU5T SUMKLXR4X2NwNDM3KFVTSE9SVCBjKQotI2Vsc2UKLXR4X2NwNDM3KGMpIFVTSE9SVCBjOwotI2Vu ZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgPCAweDgwKSAgICAgICAgICAgICAgICAg ICAgICAgLyogSGFzIEMxIGdyYXBoaWNzICovCi0gICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZm KSk7Ci0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBjYXNlIDB4MDBhMDogcmV0dXJuKChDSEFSKSgy NTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhMTogcmV0dXJuKChDSEFSKSgxNzMgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDBhMjogcmV0dXJuKChDSEFSKSgxNTUgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDBhMzogcmV0dXJuKChDSEFSKSgxNTYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDBhNDogcmV0dXJuKChDSEFSKSgxNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE1OiByZXR1 cm4oKENIQVIpKDE1NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE2OiByZXR1cm4oKENIQVIp KDEyNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE3OiByZXR1cm4oKENIQVIpKDIxICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwYTg6IHJldHVybigoQ0hBUikoMzQgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDBhOTogcmV0dXJuKChDSEFSKSg2NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGFhOiByZXR1cm4oKENIQVIpKDE2NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGFiOiByZXR1 cm4oKENIQVIpKDE3NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGFjOiByZXR1cm4oKENIQVIp KDE3MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGFkOiByZXR1cm4oKENIQVIpKDQ1ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwYWU6IHJldHVybigoQ0hBUikoODQgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDBhZjogcmV0dXJuKChDSEFSKSgyMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGIwOiByZXR1cm4oKENIQVIpKDI0OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGIxOiByZXR1 cm4oKENIQVIpKDI0MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGIyOiByZXR1cm4oKENIQVIp KDI1MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGIzOiByZXR1cm4oKENIQVIpKDUxICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwYjQ6IHJldHVybigoQ0hBUikoMzkgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDBiNTogcmV0dXJuKChDSEFSKSgyMzAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDBiNjogcmV0dXJuKChDSEFSKSgyMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGI3OiByZXR1 cm4oKENIQVIpKDI1MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGI4OiByZXR1cm4oKENIQVIp KDQ0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjk6IHJldHVybigoQ0hBUikoNDkgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDBiYTogcmV0dXJuKChDSEFSKSgxNjcgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDBiYjogcmV0dXJuKChDSEFSKSgxNzUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDBiYzogcmV0dXJuKChDSEFSKSgxNzIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiZDogcmV0 dXJuKChDSEFSKSgxNzEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiZTogcmV0dXJuKChDSEFS KSgxOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGJmOiByZXR1cm4oKENIQVIpKDE2OCAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGMwOiByZXR1cm4oKENIQVIpKDY1ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwYzE6IHJldHVybigoQ0hBUikoNjUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDBjMjogcmV0dXJuKChDSEFSKSg2NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGMzOiByZXR1 cm4oKENIQVIpKDY1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzQ6IHJldHVybigoQ0hBUiko MTQyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzU6IHJldHVybigoQ0hBUikoMTQzICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwYzY6IHJldHVybigoQ0hBUikoMTQ2ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwYzc6IHJldHVybigoQ0hBUikoMTI4ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwYzg6IHJldHVybigoQ0hBUikoNjkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjOTogcmV0 dXJuKChDSEFSKSgxNDQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjYTogcmV0dXJuKChDSEFS KSg2OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNiOiByZXR1cm4oKENIQVIpKDY5ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwY2M6IHJldHVybigoQ0hBUikoNzMgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDBjZDogcmV0dXJuKChDSEFSKSg3MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGNlOiByZXR1cm4oKENIQVIpKDczICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwY2Y6IHJldHVy bigoQ0hBUikoNzMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkMDogcmV0dXJuKChDSEFSKSgx OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQxOiByZXR1cm4oKENIQVIpKDE2NSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGQyOiByZXR1cm4oKENIQVIpKDc5ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwZDM6IHJldHVybigoQ0hBUikoNzkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBk NDogcmV0dXJuKChDSEFSKSg3OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ1OiByZXR1cm4o KENIQVIpKDc5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDY6IHJldHVybigoQ0hBUikoMTUz ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDc6IHJldHVybigoQ0hBUikoMTIwICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwZDg6IHJldHVybigoQ0hBUikoNzkgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDBkOTogcmV0dXJuKChDSEFSKSg4NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGRh OiByZXR1cm4oKENIQVIpKDg1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZGI6IHJldHVybigo Q0hBUikoODUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkYzogcmV0dXJuKChDSEFSKSgxNTQg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkZDogcmV0dXJuKChDSEFSKSg4OSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGRlOiByZXR1cm4oKENIQVIpKDE5ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwZGY6IHJldHVybigoQ0hBUikoMjI1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZTA6 IHJldHVybigoQ0hBUikoMTMzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZTE6IHJldHVybigo Q0hBUikoMTYwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZTI6IHJldHVybigoQ0hBUikoMTMx ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZTM6IHJldHVybigoQ0hBUikoOTcgJiAweGZmKSk7 IC8qIGEtdGlsZGUgLT4gYSAobm90IDEwMSA9IGUpICovCi0gICAgICBjYXNlIDB4MDBlNDogcmV0 dXJuKChDSEFSKSgxMzIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlNTogcmV0dXJuKChDSEFS KSgxMzQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlNjogcmV0dXJuKChDSEFSKSgxNDUgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlNzogcmV0dXJuKChDSEFSKSgxMzUgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDBlODogcmV0dXJuKChDSEFSKSgxMzggJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDBlOTogcmV0dXJuKChDSEFSKSgxMzAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlYTog cmV0dXJuKChDSEFSKSgxMzYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlYjogcmV0dXJuKChD SEFSKSgxMzcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlYzogcmV0dXJuKChDSEFSKSgxNDEg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlZDogcmV0dXJuKChDSEFSKSgxNjEgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDBlZTogcmV0dXJuKChDSEFSKSgxNDAgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDBlZjogcmV0dXJuKChDSEFSKSgxMzkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBm MDogcmV0dXJuKChDSEFSKSgxOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGYxOiByZXR1cm4o KENIQVIpKDE2NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGYyOiByZXR1cm4oKENIQVIpKDE0 OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGYzOiByZXR1cm4oKENIQVIpKDE2MiAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGY0OiByZXR1cm4oKENIQVIpKDE0NyAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGY1OiByZXR1cm4oKENIQVIpKDExMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGY2OiByZXR1cm4oKENIQVIpKDE0OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGY3OiByZXR1 cm4oKENIQVIpKDI0NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGY4OiByZXR1cm4oKENIQVIp KDExMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGY5OiByZXR1cm4oKENIQVIpKDE1MSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGZhOiByZXR1cm4oKENIQVIpKDE2MyAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGZiOiByZXR1cm4oKENIQVIpKDE1MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGZjOiByZXR1cm4oKENIQVIpKDEyOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGZkOiBy ZXR1cm4oKENIQVIpKDEyMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGZlOiByZXR1cm4oKENI QVIpKDE5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZmY6IHJldHVybigoQ0hBUikoMTUyICYg MHhmZikpOwotICAgICAgY2FzZSAweDAxOTI6IHJldHVybigoQ0hBUikoMTU5ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAzOTM6IHJldHVybigoQ0hBUikoMjI2ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAzOTg6IHJldHVybigoQ0hBUikoMjMzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYTM6 IHJldHVybigoQ0hBUikoMjI4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYTY6IHJldHVybigo Q0hBUikoMjMyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYTk6IHJldHVybigoQ0hBUikoMjM0 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYjE6IHJldHVybigoQ0hBUikoMjI0ICYgMHhmZikp OwotICAgICAgY2FzZSAweDAzYjQ6IHJldHVybigoQ0hBUikoMjM1ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAzYjU6IHJldHVybigoQ0hBUikoMjM4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAz YzA6IHJldHVybigoQ0hBUikoMjI3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYzM6IHJldHVy bigoQ0hBUikoMjI5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYzQ6IHJldHVybigoQ0hBUiko MjMxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYzY6IHJldHVybigoQ0hBUikoMjM3ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDIwN2Y6IHJldHVybigoQ0hBUikoMjUyICYgMHhmZikpOwotICAg ICAgY2FzZSAweDIwYTc6IHJldHVybigoQ0hBUikoMTU4ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDIyMTk6IHJldHVybigoQ0hBUikoMjQ5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIyMWE6IHJl dHVybigoQ0hBUikoMjUxICYgMHhmZikpOwotICAgICAgY2FzZSAweDIyMWU6IHJldHVybigoQ0hB UikoMjM2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIyMjk6IHJldHVybigoQ0hBUikoMjM5ICYg MHhmZikpOwotICAgICAgY2FzZSAweDIyNDg6IHJldHVybigoQ0hBUikoMjQ3ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDIyNjE6IHJldHVybigoQ0hBUikoMjQwICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDIyNjQ6IHJldHVybigoQ0hBUikoMjQzICYgMHhmZikpOwotICAgICAgY2FzZSAweDIyNjU6 IHJldHVybigoQ0hBUikoMjQyICYgMHhmZikpOwotICAgICAgY2FzZSAweDIzMTA6IHJldHVybigo Q0hBUikoMTY5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIzMjA6IHJldHVybigoQ0hBUikoMjQ0 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIzMjE6IHJldHVybigoQ0hBUikoMjQ1ICYgMHhmZikp OwotICAgICAgY2FzZSAweDI1MDA6IHJldHVybigoQ0hBUikoMTk2ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDI1MDI6IHJldHVybigoQ0hBUikoMTc5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1 MGM6IHJldHVybigoQ0hBUikoMjE4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MTA6IHJldHVy bigoQ0hBUikoMTkxICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MTQ6IHJldHVybigoQ0hBUiko MTkyICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MTg6IHJldHVybigoQ0hBUikoMjE3ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDI1MWM6IHJldHVybigoQ0hBUikoMTk1ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDI1MjQ6IHJldHVybigoQ0hBUikoMTgwICYgMHhmZikpOwotICAgICAgY2FzZSAw eDI1MmM6IHJldHVybigoQ0hBUikoMTk0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MzQ6IHJl dHVybigoQ0hBUikoMTkzICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1M2M6IHJldHVybigoQ0hB UikoMTk3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NTA6IHJldHVybigoQ0hBUikoMjA1ICYg MHhmZikpOwotICAgICAgY2FzZSAweDI1NTE6IHJldHVybigoQ0hBUikoMTg2ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDI1NTI6IHJldHVybigoQ0hBUikoMjEzICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDI1NTM6IHJldHVybigoQ0hBUikoMjE0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NTQ6 IHJldHVybigoQ0hBUikoMjAxICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NTU6IHJldHVybigo Q0hBUikoMTg0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NTY6IHJldHVybigoQ0hBUikoMTgz ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NTc6IHJldHVybigoQ0hBUikoMTg3ICYgMHhmZikp OwotICAgICAgY2FzZSAweDI1NTg6IHJldHVybigoQ0hBUikoMjEyICYgMHhmZikpOwotICAgICAg Y2FzZSAweDI1NTk6IHJldHVybigoQ0hBUikoMjExICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1 NWE6IHJldHVybigoQ0hBUikoMjAwICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NWI6IHJldHVy bigoQ0hBUikoMTkwICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NWM6IHJldHVybigoQ0hBUiko MTg5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NWQ6IHJldHVybigoQ0hBUikoMTg4ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDI1NWU6IHJldHVybigoQ0hBUikoMTk4ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDI1NWY6IHJldHVybigoQ0hBUikoMTk5ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDI1NjA6IHJldHVybigoQ0hBUikoMjA0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NjE6IHJl dHVybigoQ0hBUikoMTgxICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NjI6IHJldHVybigoQ0hB UikoMTgyICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NjM6IHJldHVybigoQ0hBUikoMTg1ICYg MHhmZikpOwotICAgICAgY2FzZSAweDI1NjQ6IHJldHVybigoQ0hBUikoMjA5ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDI1NjU6IHJldHVybigoQ0hBUikoMjEwICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDI1NjY6IHJldHVybigoQ0hBUikoMjAzICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1Njc6 IHJldHVybigoQ0hBUikoMjA3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1Njg6IHJldHVybigo Q0hBUikoMjA4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1Njk6IHJldHVybigoQ0hBUikoMjAy ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NmE6IHJldHVybigoQ0hBUikoMjE2ICYgMHhmZikp OwotICAgICAgY2FzZSAweDI1NmI6IHJldHVybigoQ0hBUikoMjE1ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDI1NmM6IHJldHVybigoQ0hBUikoMjA2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1 ODA6IHJldHVybigoQ0hBUikoMjIzICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1ODQ6IHJldHVy bigoQ0hBUikoMjIwICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1ODg6IHJldHVybigoQ0hBUiko MjE5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1OGM6IHJldHVybigoQ0hBUikoMjIxICYgMHhm ZikpOwotICAgICAgY2FzZSAweDI1OTA6IHJldHVybigoQ0hBUikoMjIyICYgMHhmZikpOwotICAg ICAgY2FzZSAweDI1OTE6IHJldHVybigoQ0hBUikoMTc2ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDI1OTI6IHJldHVybigoQ0hBUikoMTc3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1OTM6IHJl dHVybigoQ0hBUikoMTc4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1YTA6IHJldHVybigoQ0hB UikoMjU0ICYgMHhmZikpOyAvKiBCbGFjayBzcXVhcmUgKi8KLSAgICAgIGRlZmF1bHQ6IHJldHVy bih0eF9jcHN1YihjKSk7ICAgICAvKiBGb3IgYm94IGNoYXJhY3RlcnMgZXRjICovCi0gICAgfQot fQotCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWF6b3ZpYSAq LwotI2lmZGVmIENLX0FOU0lDCi10eF9tYXpvdmlhKFVTSE9SVCBjKQotI2Vsc2UKLXR4X21hem92 aWEoYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA8IDB4 ODApICAgICAgICAgICAgICAgICAgICAgICAvKiBIYXMgQzEgZ3JhcGhpY3MgKi8KLSAgICAgIHJl dHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKLSAgICBzd2l0Y2ggKGMpIHsKLSAgICAgIGNhc2UgMHgw MGQzOiByZXR1cm4oKENIQVIpMHhhMyAmIDB4ZmYpOyAgIC8qIE8gYWN1dGUgKi8KLSAgICAgIGNh c2UgMHgwMGYzOiByZXR1cm4oKENIQVIpMHhhMiAmIDB4ZmYpOyAgIC8qIE8gYWN1dGUgKi8KLSAg ICAgIGNhc2UgMHgwMTA0OiByZXR1cm4oKENIQVIpMHg4ZiAmIDB4ZmYpOyAgIC8qIEEgT2dvbmVr ICovCi0gICAgICBjYXNlIDB4MDEwNTogcmV0dXJuKChDSEFSKTB4ODYgJiAweGZmKTsgICAvKiBh IE9nb25layAqLwotICAgICAgY2FzZSAweDAxMDY6IHJldHVybigoQ0hBUikweDk1ICYgMHhmZik7 ICAgLyogQyBhY3V0ZSAqLwotICAgICAgY2FzZSAweDAxMDc6IHJldHVybigoQ0hBUikweDhkICYg MHhmZik7ICAgLyogYyBhY3V0ZSAqLwotICAgICAgY2FzZSAweDAxMTg6IHJldHVybigoQ0hBUikw eDkwICYgMHhmZik7ICAgLyogRSBPZ29uZWsgKi8KLSAgICAgIGNhc2UgMHgwMTE5OiByZXR1cm4o KENIQVIpMHg5MSAmIDB4ZmYpOyAgIC8qIEUgT2dvbmVrICovCi0gICAgICBjYXNlIDB4MDE0MTog cmV0dXJuKChDSEFSKTB4OWMgJiAweGZmKTsgICAvKiBMIHN0cm9rZSAqLwotICAgICAgY2FzZSAw eDAxNDI6IHJldHVybigoQ0hBUikweDkyICYgMHhmZik7ICAgLyogTCBzdHJva2UgKi8KLSAgICAg IGNhc2UgMHgwMTQzOiByZXR1cm4oKENIQVIpMHhhNSAmIDB4ZmYpOyAgIC8qIE4gYWN1dGUgKi8K LSAgICAgIGNhc2UgMHgwMTQ0OiByZXR1cm4oKENIQVIpMHhhNCAmIDB4ZmYpOyAgIC8qIE4gYWN1 dGUgKi8KLSAgICAgIGNhc2UgMHgwMTVhOiByZXR1cm4oKENIQVIpMHg5OCAmIDB4ZmYpOyAgIC8q IFMgYWN1dGUgKi8KLSAgICAgIGNhc2UgMHgwMTViOiByZXR1cm4oKENIQVIpMHg5ZSAmIDB4ZmYp OyAgIC8qIFMgYWN1dGUgKi8KLSAgICAgIGNhc2UgMHgwMTc5OiByZXR1cm4oKENIQVIpMHhhMCAm IDB4ZmYpOyAgIC8qIFogYWN1dGUgKi8KLSAgICAgIGNhc2UgMHgwMTdhOiByZXR1cm4oKENIQVIp MHhhNiAmIDB4ZmYpOyAgIC8qIFogYWN1dGUgKi8KLSAgICAgIGNhc2UgMHgwMTdiOiByZXR1cm4o KENIQVIpMHhhMSAmIDB4ZmYpOyAgIC8qIFogZG90IGFib3ZlICovCi0gICAgICBjYXNlIDB4MDE3 YzogcmV0dXJuKChDSEFSKTB4YTcgJiAweGZmKTsgICAvKiBaIGRvdCBhYm92ZSAqLwotICAgICAg ZGVmYXVsdDogcmV0dXJuKHR4X2NwNDM3KGMpKTsKLSAgICB9Ci19Ci0KLWludCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQQyBDb2RlIFBhZ2UgODUwICovCi0jaWZkZWYg Q0tfQU5TSUMKLXR4X2NwODUwKFVTSE9SVCBjKQotI2Vsc2UKLXR4X2NwODUwKGMpIFVTSE9SVCBj OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgPCAweDgwKSAgICAgICAgICAg ICAgICAgICAgICAgLyogSGFzIEMxIGdyYXBoaWNzICovCi0gICAgICByZXR1cm4oKENIQVIpKGMg JiAweGZmKSk7Ci0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBjYXNlIDB4MDBhMDogcmV0dXJuKChD SEFSKSgyNTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhMTogcmV0dXJuKChDSEFSKSgxNzMg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhMjogcmV0dXJuKChDSEFSKSgxODkgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDBhMzogcmV0dXJuKChDSEFSKSgxNTYgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDBhNDogcmV0dXJuKChDSEFSKSgyMDcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBh NTogcmV0dXJuKChDSEFSKSgxOTAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhNjogcmV0dXJu KChDSEFSKSgyMjEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhNzogcmV0dXJuKChDSEFSKSgy NDUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhODogcmV0dXJuKChDSEFSKSgyNDkgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDBhOTogcmV0dXJuKChDSEFSKSgxODQgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDBhYTogcmV0dXJuKChDSEFSKSgxNjYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDBhYjogcmV0dXJuKChDSEFSKSgxNzQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhYzogcmV0 dXJuKChDSEFSKSgxNzAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhZDogcmV0dXJuKChDSEFS KSgyNDAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhZTogcmV0dXJuKChDSEFSKSgxNjkgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhZjogcmV0dXJuKChDSEFSKSgyMzggJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDBiMDogcmV0dXJuKChDSEFSKSgyNDggJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDBiMTogcmV0dXJuKChDSEFSKSgyNDEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiMjog cmV0dXJuKChDSEFSKSgyNTMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiMzogcmV0dXJuKChD SEFSKSgyNTIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiNDogcmV0dXJuKChDSEFSKSgyMzkg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiNTogcmV0dXJuKChDSEFSKSgyMzAgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDBiNjogcmV0dXJuKChDSEFSKSgyNDQgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDBiNzogcmV0dXJuKChDSEFSKSgyNTAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBi ODogcmV0dXJuKChDSEFSKSgyNDcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiOTogcmV0dXJu KChDSEFSKSgyNTEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiYTogcmV0dXJuKChDSEFSKSgx NjcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiYjogcmV0dXJuKChDSEFSKSgxNzUgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDBiYzogcmV0dXJuKChDSEFSKSgxNzIgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDBiZDogcmV0dXJuKChDSEFSKSgxNzEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDBiZTogcmV0dXJuKChDSEFSKSgyNDMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiZjogcmV0 dXJuKChDSEFSKSgxNjggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjMDogcmV0dXJuKChDSEFS KSgxODMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjMTogcmV0dXJuKChDSEFSKSgxODEgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjMjogcmV0dXJuKChDSEFSKSgxODIgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDBjMzogcmV0dXJuKChDSEFSKSgxOTkgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDBjNDogcmV0dXJuKChDSEFSKSgxNDIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjNTog cmV0dXJuKChDSEFSKSgxNDMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjNjogcmV0dXJuKChD SEFSKSgxNDYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjNzogcmV0dXJuKChDSEFSKSgxMjgg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjODogcmV0dXJuKChDSEFSKSgyMTIgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDBjOTogcmV0dXJuKChDSEFSKSgxNDQgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDBjYTogcmV0dXJuKChDSEFSKSgyMTAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBj YjogcmV0dXJuKChDSEFSKSgyMTEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjYzogcmV0dXJu KChDSEFSKSgyMjIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjZDogcmV0dXJuKChDSEFSKSgy MTQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBjZTogcmV0dXJuKChDSEFSKSgyMTUgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDBjZjogcmV0dXJuKChDSEFSKSgyMTYgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDBkMDogcmV0dXJuKChDSEFSKSgyMDkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDBkMTogcmV0dXJuKChDSEFSKSgxNjUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkMjogcmV0 dXJuKChDSEFSKSgyMjcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkMzogcmV0dXJuKChDSEFS KSgyMjQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkNDogcmV0dXJuKChDSEFSKSgyMjYgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkNTogcmV0dXJuKChDSEFSKSgyMjkgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDBkNjogcmV0dXJuKChDSEFSKSgxNTMgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDBkNzogcmV0dXJuKChDSEFSKSgxNTggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkODog cmV0dXJuKChDSEFSKSgxNTcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkOTogcmV0dXJuKChD SEFSKSgyMzUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkYTogcmV0dXJuKChDSEFSKSgyMzMg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkYjogcmV0dXJuKChDSEFSKSgyMzQgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDBkYzogcmV0dXJuKChDSEFSKSgxNTQgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDBkZDogcmV0dXJuKChDSEFSKSgyMzcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBk ZTogcmV0dXJuKChDSEFSKSgyMzIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkZjogcmV0dXJu KChDSEFSKSgyMjUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlMDogcmV0dXJuKChDSEFSKSgx MzMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlMTogcmV0dXJuKChDSEFSKSgxNjAgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDBlMjogcmV0dXJuKChDSEFSKSgxMzEgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDBlMzogcmV0dXJuKChDSEFSKSgxOTggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDBlNDogcmV0dXJuKChDSEFSKSgxMzIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlNTogcmV0 dXJuKChDSEFSKSgxMzQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlNjogcmV0dXJuKChDSEFS KSgxNDUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlNzogcmV0dXJuKChDSEFSKSgxMzUgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlODogcmV0dXJuKChDSEFSKSgxMzggJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDBlOTogcmV0dXJuKChDSEFSKSgxMzAgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDBlYTogcmV0dXJuKChDSEFSKSgxMzYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlYjog cmV0dXJuKChDSEFSKSgxMzcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlYzogcmV0dXJuKChD SEFSKSgxNDEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlZDogcmV0dXJuKChDSEFSKSgxNjEg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlZTogcmV0dXJuKChDSEFSKSgxNDAgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDBlZjogcmV0dXJuKChDSEFSKSgxMzkgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDBmMDogcmV0dXJuKChDSEFSKSgyMDggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBm MTogcmV0dXJuKChDSEFSKSgxNjQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmMjogcmV0dXJu KChDSEFSKSgxNDkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmMzogcmV0dXJuKChDSEFSKSgx NjIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmNDogcmV0dXJuKChDSEFSKSgxNDcgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDBmNTogcmV0dXJuKChDSEFSKSgyMjggJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDBmNjogcmV0dXJuKChDSEFSKSgxNDggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDBmNzogcmV0dXJuKChDSEFSKSgyNDYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmODogcmV0 dXJuKChDSEFSKSgxNTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmOTogcmV0dXJuKChDSEFS KSgxNTEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmYTogcmV0dXJuKChDSEFSKSgxNjMgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmYjogcmV0dXJuKChDSEFSKSgxNTAgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDBmYzogcmV0dXJuKChDSEFSKSgxMjkgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDBmZDogcmV0dXJuKChDSEFSKSgyMzYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmZTog cmV0dXJuKChDSEFSKSgyMzEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmZjogcmV0dXJuKChD SEFSKSgxNTIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDEzMTogcmV0dXJuKChDSEFSKSgyMTMg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE5MjogcmV0dXJuKChDSEFSKSgxNTkgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MjAxNzogcmV0dXJuKChDSEFSKSgyNDIgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MjUwMDogcmV0dXJuKChDSEFSKSgxOTYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUw MjogcmV0dXJuKChDSEFSKSgxNzkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUwYzogcmV0dXJu KChDSEFSKSgyMTggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUxMDogcmV0dXJuKChDSEFSKSgx OTEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUxNDogcmV0dXJuKChDSEFSKSgxOTIgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MjUxODogcmV0dXJuKChDSEFSKSgyMTcgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MjUxYzogcmV0dXJuKChDSEFSKSgxOTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MjUyNDogcmV0dXJuKChDSEFSKSgxODAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUyYzogcmV0 dXJuKChDSEFSKSgxOTQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUzNDogcmV0dXJuKChDSEFS KSgxOTMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUzYzogcmV0dXJuKChDSEFSKSgxOTcgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1MDogcmV0dXJuKChDSEFSKSgyMDUgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MjU1MTogcmV0dXJuKChDSEFSKSgxODYgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MjU1NDogcmV0dXJuKChDSEFSKSgyMDEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1Nzog cmV0dXJuKChDSEFSKSgxODcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1YTogcmV0dXJuKChD SEFSKSgyMDAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1ZDogcmV0dXJuKChDSEFSKSgxODgg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2MDogcmV0dXJuKChDSEFSKSgyMDQgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MjU2MzogcmV0dXJuKChDSEFSKSgxODUgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MjU2NjogcmV0dXJuKChDSEFSKSgyMDMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2 OTogcmV0dXJuKChDSEFSKSgyMDIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2YzogcmV0dXJu KChDSEFSKSgyMDYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU4MDogcmV0dXJuKChDSEFSKSgy MjMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU4NDogcmV0dXJuKChDSEFSKSgyMjAgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MjU4ODogcmV0dXJuKChDSEFSKSgyMTkgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MjU5MTogcmV0dXJuKChDSEFSKSgxNzYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MjU5MjogcmV0dXJuKChDSEFSKSgxNzcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU5MzogcmV0 dXJuKChDSEFSKSgxNzggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjVhMDogcmV0dXJuKChDSEFS KSgyNTQgJiAweGZmKSk7Ci0gICAgICBkZWZhdWx0OiByZXR1cm4odHhfY3BzdWIoYykpOyAgICAg LyogRm9yIGJveCBjaGFyYWN0ZXJzIGV0YyAqLwotICAgIH0KLX0KLQotaW50ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBDIENvZGUgUGFnZSA4NTggKi8KLSNpZmRlZiBD S19BTlNJQwotdHhfY3A4NTgoVVNIT1JUIGMpCi0jZWxzZQotdHhfY3A4NTgoYykgVVNIT1JUIGM7 Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA8IDB4ODApICAgICAgICAgICAg ICAgICAgICAgICAvKiBIYXMgQzEgZ3JhcGhpY3MgKi8KLSAgICAgIHJldHVybigoQ0hBUikoYyAm IDB4ZmYpKTsKLSAgICBzd2l0Y2ggKGMpIHsKLSAgICAgIGNhc2UgMHgwMGEwOiByZXR1cm4oKENI QVIpKDI1NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGExOiByZXR1cm4oKENIQVIpKDE3MyAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGEyOiByZXR1cm4oKENIQVIpKDE4OSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGEzOiByZXR1cm4oKENIQVIpKDE1NiAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGE0OiByZXR1cm4oKENIQVIpKDIwNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE1 OiByZXR1cm4oKENIQVIpKDE5MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE2OiByZXR1cm4o KENIQVIpKDIyMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE3OiByZXR1cm4oKENIQVIpKDI0 NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE4OiByZXR1cm4oKENIQVIpKDI0OSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGE5OiByZXR1cm4oKENIQVIpKDE4NCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGFhOiByZXR1cm4oKENIQVIpKDE2NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGFiOiByZXR1cm4oKENIQVIpKDE3NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGFjOiByZXR1 cm4oKENIQVIpKDE3MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGFkOiByZXR1cm4oKENIQVIp KDI0MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGFlOiByZXR1cm4oKENIQVIpKDE2OSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGFmOiByZXR1cm4oKENIQVIpKDIzOCAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGIwOiByZXR1cm4oKENIQVIpKDI0OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGIxOiByZXR1cm4oKENIQVIpKDI0MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGIyOiBy ZXR1cm4oKENIQVIpKDI1MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGIzOiByZXR1cm4oKENI QVIpKDI1MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGI0OiByZXR1cm4oKENIQVIpKDIzOSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGI1OiByZXR1cm4oKENIQVIpKDIzMCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGI2OiByZXR1cm4oKENIQVIpKDI0NCAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGI3OiByZXR1cm4oKENIQVIpKDI1MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGI4 OiByZXR1cm4oKENIQVIpKDI0NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGI5OiByZXR1cm4o KENIQVIpKDI1MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGJhOiByZXR1cm4oKENIQVIpKDE2 NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGJiOiByZXR1cm4oKENIQVIpKDE3NSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGJjOiByZXR1cm4oKENIQVIpKDE3MiAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGJkOiByZXR1cm4oKENIQVIpKDE3MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGJlOiByZXR1cm4oKENIQVIpKDI0MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGJmOiByZXR1 cm4oKENIQVIpKDE2OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGMwOiByZXR1cm4oKENIQVIp KDE4MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGMxOiByZXR1cm4oKENIQVIpKDE4MSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGMyOiByZXR1cm4oKENIQVIpKDE4MiAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGMzOiByZXR1cm4oKENIQVIpKDE5OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGM0OiByZXR1cm4oKENIQVIpKDE0MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM1OiBy ZXR1cm4oKENIQVIpKDE0MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM2OiByZXR1cm4oKENI QVIpKDE0NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM3OiByZXR1cm4oKENIQVIpKDEyOCAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM4OiByZXR1cm4oKENIQVIpKDIxMiAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGM5OiByZXR1cm4oKENIQVIpKDE0NCAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGNhOiByZXR1cm4oKENIQVIpKDIxMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNi OiByZXR1cm4oKENIQVIpKDIxMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNjOiByZXR1cm4o KENIQVIpKDIyMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNkOiByZXR1cm4oKENIQVIpKDIx NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNlOiByZXR1cm4oKENIQVIpKDIxNSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGNmOiByZXR1cm4oKENIQVIpKDIxNiAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGQwOiByZXR1cm4oKENIQVIpKDIwOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGQxOiByZXR1cm4oKENIQVIpKDE2NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQyOiByZXR1 cm4oKENIQVIpKDIyNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQzOiByZXR1cm4oKENIQVIp KDIyNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ0OiByZXR1cm4oKENIQVIpKDIyNiAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ1OiByZXR1cm4oKENIQVIpKDIyOSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGQ2OiByZXR1cm4oKENIQVIpKDE1MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGQ3OiByZXR1cm4oKENIQVIpKDE1OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ4OiBy ZXR1cm4oKENIQVIpKDE1NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ5OiByZXR1cm4oKENI QVIpKDIzNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGRhOiByZXR1cm4oKENIQVIpKDIzMyAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGRiOiByZXR1cm4oKENIQVIpKDIzNCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGRjOiByZXR1cm4oKENIQVIpKDE1NCAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGRkOiByZXR1cm4oKENIQVIpKDIzNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGRl OiByZXR1cm4oKENIQVIpKDIzMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGRmOiByZXR1cm4o KENIQVIpKDIyNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGUwOiByZXR1cm4oKENIQVIpKDEz MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGUxOiByZXR1cm4oKENIQVIpKDE2MCAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGUyOiByZXR1cm4oKENIQVIpKDEzMSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGUzOiByZXR1cm4oKENIQVIpKDE5OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGU0OiByZXR1cm4oKENIQVIpKDEzMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGU1OiByZXR1 cm4oKENIQVIpKDEzNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGU2OiByZXR1cm4oKENIQVIp KDE0NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGU3OiByZXR1cm4oKENIQVIpKDEzNSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGU4OiByZXR1cm4oKENIQVIpKDEzOCAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGU5OiByZXR1cm4oKENIQVIpKDEzMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGVhOiByZXR1cm4oKENIQVIpKDEzNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGViOiBy ZXR1cm4oKENIQVIpKDEzNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGVjOiByZXR1cm4oKENI QVIpKDE0MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGVkOiByZXR1cm4oKENIQVIpKDE2MSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGVlOiByZXR1cm4oKENIQVIpKDE0MCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGVmOiByZXR1cm4oKENIQVIpKDEzOSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGYwOiByZXR1cm4oKENIQVIpKDIwOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGYx OiByZXR1cm4oKENIQVIpKDE2NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGYyOiByZXR1cm4o KENIQVIpKDE0OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGYzOiByZXR1cm4oKENIQVIpKDE2 MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGY0OiByZXR1cm4oKENIQVIpKDE0NyAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGY1OiByZXR1cm4oKENIQVIpKDIyOCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGY2OiByZXR1cm4oKENIQVIpKDE0OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGY3OiByZXR1cm4oKENIQVIpKDI0NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGY4OiByZXR1 cm4oKENIQVIpKDE1NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGY5OiByZXR1cm4oKENIQVIp KDE1MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGZhOiByZXR1cm4oKENIQVIpKDE2MyAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGZiOiByZXR1cm4oKENIQVIpKDE1MCAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGZjOiByZXR1cm4oKENIQVIpKDEyOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGZkOiByZXR1cm4oKENIQVIpKDIzNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGZlOiBy ZXR1cm4oKENIQVIpKDIzMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGZmOiByZXR1cm4oKENI QVIpKDE1MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMGFjOiByZXR1cm4oKENIQVIpKDIxMyAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTkyOiByZXR1cm4oKENIQVIpKDE1OSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgyMDE3OiByZXR1cm4oKENIQVIpKDI0MiAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgyNTAwOiByZXR1cm4oKENIQVIpKDE5NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTAy OiByZXR1cm4oKENIQVIpKDE3OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTBjOiByZXR1cm4o KENIQVIpKDIxOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTEwOiByZXR1cm4oKENIQVIpKDE5 MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTE0OiByZXR1cm4oKENIQVIpKDE5MiAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgyNTE4OiByZXR1cm4oKENIQVIpKDIxNyAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgyNTFjOiByZXR1cm4oKENIQVIpKDE5NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy NTI0OiByZXR1cm4oKENIQVIpKDE4MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTJjOiByZXR1 cm4oKENIQVIpKDE5NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTM0OiByZXR1cm4oKENIQVIp KDE5MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTNjOiByZXR1cm4oKENIQVIpKDE5NyAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTUwOiByZXR1cm4oKENIQVIpKDIwNSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgyNTUxOiByZXR1cm4oKENIQVIpKDE4NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgyNTU0OiByZXR1cm4oKENIQVIpKDIwMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTU3OiBy ZXR1cm4oKENIQVIpKDE4NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTVhOiByZXR1cm4oKENI QVIpKDIwMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTVkOiByZXR1cm4oKENIQVIpKDE4OCAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTYwOiByZXR1cm4oKENIQVIpKDIwNCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgyNTYzOiByZXR1cm4oKENIQVIpKDE4NSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgyNTY2OiByZXR1cm4oKENIQVIpKDIwMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTY5 OiByZXR1cm4oKENIQVIpKDIwMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTZjOiByZXR1cm4o KENIQVIpKDIwNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTgwOiByZXR1cm4oKENIQVIpKDIy MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTg0OiByZXR1cm4oKENIQVIpKDIyMCAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgyNTg4OiByZXR1cm4oKENIQVIpKDIxOSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgyNTkxOiByZXR1cm4oKENIQVIpKDE3NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy NTkyOiByZXR1cm4oKENIQVIpKDE3NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTkzOiByZXR1 cm4oKENIQVIpKDE3OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNWEwOiByZXR1cm4oKENIQVIp KDI1NCAmIDB4ZmYpKTsKLSAgICAgIGRlZmF1bHQ6IHJldHVybih0eF9jcHN1YihjKSk7ICAgICAv KiBGb3IgYm94IGNoYXJhY3RlcnMgZXRjICovCi0gICAgfQotfQotCi1pbnQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogV2luZG93cyBDb2RlIFBhZ2UgMTI1MCAoTGF0aW4t MikgKi8KLSNpZmRlZiBDS19BTlNJQwotdHhfY3AxMjUwKFVTSE9SVCBjKQotI2Vsc2UKLXR4X2Nw MTI1MChjKSBVU0hPUlQgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjIDwg MHg4MCB8fCAoYyA+IDB4YmYgJiYgYyA8PSAweGZmKSkgLyogSGFzIEMxIGdyYXBoaWNzICovCi0g ICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7Ci0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBj YXNlIDB4MDAyRDogcmV0dXJuKChDSEFSKSgweGFkICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw QTA6IHJldHVybigoQ0hBUikoMHhhMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEE0OiByZXR1 cm4oKENIQVIpKDB4YTQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBBNjogcmV0dXJuKChDSEFS KSgweGE2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQTc6IHJldHVybigoQ0hBUikoMHhhNyAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEE4OiByZXR1cm4oKENIQVIpKDB4YTggJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDBBOTogcmV0dXJuKChDSEFSKSgweGE5ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwQUI6IHJldHVybigoQ0hBUikoMHhhYiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MEFDOiByZXR1cm4oKENIQVIpKDB4YWMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBBRTogcmV0 dXJuKChDSEFSKSgweGFlICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQjA6IHJldHVybigoQ0hB UikoMHhiMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEIxOiByZXR1cm4oKENIQVIpKDB4YjEg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBCNDogcmV0dXJuKChDSEFSKSgweGI0ICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwQjU6IHJldHVybigoQ0hBUikoMHhiNSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMEI2OiByZXR1cm4oKENIQVIpKDB4YjYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDBCNzogcmV0dXJuKChDSEFSKSgweGI3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQjg6IHJl dHVybigoQ0hBUikoMHhiOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEJCOiByZXR1cm4oKENI QVIpKDB4YmIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDEwNDogcmV0dXJuKChDSEFSKSgweGE1 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxMDU6IHJldHVybigoQ0hBUikoMHhiOSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMTNEOiByZXR1cm4oKENIQVIpKDB4YmMgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDEzRTogcmV0dXJuKChDSEFSKSgweGJlICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAxNDE6IHJldHVybigoQ0hBUikoMHhhMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTQyOiBy ZXR1cm4oKENIQVIpKDB4YjMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE1QTogcmV0dXJuKChD SEFSKSgweDhjICYgMHhmZikpOyAvKiBTIGFjdXRlICovCi0gICAgICBjYXNlIDB4MDE1RTogcmV0 dXJuKChDSEFSKSgweGFhICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxNUY6IHJldHVybigoQ0hB UikoMHhiYSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTViOiByZXR1cm4oKENIQVIpKDB4OWMg JiAweGZmKSk7IC8qIHMgYWN1dGUgKi8KLSAgICAgIGNhc2UgMHgwMTY0OiByZXR1cm4oKENIQVIp KDB4OGQgJiAweGZmKSk7IC8qIFQgY2Fyb24gKi8KLSAgICAgIGNhc2UgMHgwMTY1OiByZXR1cm4o KENIQVIpKDB4OWQgJiAweGZmKSk7IC8qIHQgY2Fyb24gKi8KLSAgICAgIGNhc2UgMHgwMTczOiBy ZXR1cm4oKENIQVIpKDB4OWUgJiAweGZmKSk7IC8qIHogY2Fyb24gKi8KLSAgICAgIGNhc2UgMHgw MTc5OiByZXR1cm4oKENIQVIpKDB4OGYgJiAweGZmKSk7IC8qIFogYWN1dGUgKi8KLSAgICAgIGNh c2UgMHgwMTdBOiByZXR1cm4oKENIQVIpKDB4OWYgJiAweGZmKSk7IC8qIHogYWN1dGUgKi8KLSAg ICAgIGNhc2UgMHgwMTdCOiByZXR1cm4oKENIQVIpKDB4YWYgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDE3QzogcmV0dXJuKChDSEFSKSgweGJmICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxN0Q6 IHJldHVybigoQ0hBUikoMHg4ZSAmIDB4ZmYpKTsgLyogWiBjYXJvbiAqLwotICAgICAgY2FzZSAw eDAyQzc6IHJldHVybigoQ0hBUikoMHhhMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMkQ4OiBy ZXR1cm4oKENIQVIpKDB4YTIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDJEQjogcmV0dXJuKChD SEFSKSgweGIyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAyREQ6IHJldHVybigoQ0hBUikoMHhi ZCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDEwOiBjYXNlIDB4MjAxMTogICAgICAgICAvKiBI eXBoZW5zICovCi0gICAgICAgIHJldHVybigoQ0hBUikoMHgyZCAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgyMDEyOiBjYXNlIDB4MjAxMzogICAgICAgICAvKiBlbi1kYXNoZXMgKi8KLSAgICAgICAg cmV0dXJuKChDSEFSKSgweDk2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMTQ6IGNhc2UgMHgy MDE1OiAgICAgICAgIC8qIGVtLWRhc2hlcyAqLwotICAgICAgICByZXR1cm4oKENIQVIpKDB4OTcg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjAxODogICAgICAgICAgICAgICAgICAgICAgLyogVmFy aW91cyBxdW90YXRpb24gbWFya3MuLi4gKi8KLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDkxICYg MHhmZikpOwotICAgICAgY2FzZSAweDIwMTk6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg5MiAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDFjOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4OTMg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjAxZDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDk0 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMWU6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg4 NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDIwOiAgICAgICAgICAgICAgICAgICAgICAvKiBE YWdnZXIgKi8KLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDg2ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDIwMjE6ICAgICAgICAgICAgICAgICAgICAgIC8qIERvdWJsZSBEYWdnZXIgKi8KLSAgICAg ICAgcmV0dXJuKChDSEFSKSgweDg3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMjI6ICAgICAg ICAgICAgICAgICAgICAgIC8qIEJ1bGxldCAqLwotICAgICAgICByZXR1cm4oKENIQVIpKDB4OTUg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjAyNjogICAgICAgICAgICAgICAgICAgICAgLyogRWxs aXBzaXMgKi8KLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDg1ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDIwMzA6ICAgICAgICAgICAgICAgICAgICAgIC8qIFBlciBtaWwgKi8KLSAgICAgICAgcmV0 dXJuKChDSEFSKSgweDg5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwQUM6ICAgICAgICAgICAg ICAgICAgICAgIC8qIEV1cm8gKi8KLSAgICAgICAgICByZXR1cm4oKENIQVIpKDB4ODAgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MjEyMjogICAgICAgICAgICAgICAgICAgICAgLyogVHJhZGUgTWFy ayAqLwotICAgICAgICByZXR1cm4oKENIQVIpKDB4OTkgJiAweGZmKSk7Ci0gICAgICBkZWZhdWx0 OiByZXR1cm4oMHgwMDNmKTsKLSAgICB9Ci19Ci0KLWludCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBXaW5kb3dzIENvZGUgUGFnZSAxMjUxIChDeXJpbGxpYykgKi8KLSNp ZmRlZiBDS19BTlNJQwotdHhfY3AxMjUxKFVTSE9SVCBjKQotI2Vsc2UKLXR4X2NwMTI1MShjKSBV U0hPUlQgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjIDwgMHg4MCkgICAg ICAgICAgICAgICAgICAgICAgIC8qIEhhcyBDMSBncmFwaGljcyAqLwotICAgICAgcmV0dXJuKChD SEFSKShjICYgMHhmZikpOwotICAgIC8qIFRoaXMgaXMgc2ltcGx5IHRoZSBpbnZlcnNlIG9mIHVf Y3AxMjUxLm1hcCAqLwotICAgIHN3aXRjaCAoYykgewotICAgICAgY2FzZSAweDAwM2M6IHJldHVy bigoQ0hBUikoMHg4YiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMDNlOiByZXR1cm4oKENIQVIp KDB4OWIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDA3ZTogcmV0dXJuKChDSEFSKSgweDk4ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwQTA6IHJldHVybigoQ0hBUikoMHhhMCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMEE0OiByZXR1cm4oKENIQVIpKDB4YTQgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDBBNjogcmV0dXJuKChDSEFSKSgweGE2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw QTc6IHJldHVybigoQ0hBUikoMHhhNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEE5OiByZXR1 cm4oKENIQVIpKDB4YTkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBBQjogcmV0dXJuKChDSEFS KSgweGFiICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQUM6IHJldHVybigoQ0hBUikoMHhhYyAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEFEOiByZXR1cm4oKENIQVIpKDB4YWQgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDBBRTogcmV0dXJuKChDSEFSKSgweGFlICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwYjA6IHJldHVybigoQ0hBUikoMHhiMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGIxOiByZXR1cm4oKENIQVIpKDB4YjEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBCNTogcmV0 dXJuKChDSEFSKSgweGI1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQjY6IHJldHVybigoQ0hB UikoMHhiNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEI3OiByZXR1cm4oKENIQVIpKDB4Yjcg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBCQjogcmV0dXJuKChDSEFSKSgweGJiICYgMHhmZikp OwotICAgICAgY2FzZSAweDA0MDE6IHJldHVybigoQ0hBUikoMHhhOCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwNDAyOiByZXR1cm4oKENIQVIpKDB4ODAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDQwMzogcmV0dXJuKChDSEFSKSgweDgxICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MDQ6IHJl dHVybigoQ0hBUikoMHhhYSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDA1OiByZXR1cm4oKENI QVIpKDB4YmQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQwNjogcmV0dXJuKChDSEFSKSgweGIy ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MDc6IHJldHVybigoQ0hBUikoMHhhZiAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwNDA4OiByZXR1cm4oKENIQVIpKDB4YTMgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDQwOTogcmV0dXJuKChDSEFSKSgweDhhICYgMHhmZikpOwotICAgICAgY2FzZSAw eDA0MGE6IHJldHVybigoQ0hBUikoMHg4YyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDBiOiBy ZXR1cm4oKENIQVIpKDB4OGUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQwYzogcmV0dXJuKChD SEFSKSgweDhkICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MGU6IHJldHVybigoQ0hBUikoMHhh MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDBmOiByZXR1cm4oKENIQVIpKDB4OGYgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDQxMDogcmV0dXJuKChDSEFSKSgweGMwICYgMHhmZikpOwotICAg ICAgY2FzZSAweDA0MTE6IHJldHVybigoQ0hBUikoMHhjMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwNDEyOiByZXR1cm4oKENIQVIpKDB4YzIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxMzog cmV0dXJuKChDSEFSKSgweGMzICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MTQ6IHJldHVybigo Q0hBUikoMHhjNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDE1OiByZXR1cm4oKENIQVIpKDB4 YzUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxNjogcmV0dXJuKChDSEFSKSgweGM2ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDA0MTc6IHJldHVybigoQ0hBUikoMHhjNyAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwNDE4OiByZXR1cm4oKENIQVIpKDB4YzggJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDQxOTogcmV0dXJuKChDSEFSKSgweGM5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MWE6 IHJldHVybigoQ0hBUikoMHhjYSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDFiOiByZXR1cm4o KENIQVIpKDB4Y2IgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxYzogcmV0dXJuKChDSEFSKSgw eGNjICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MWQ6IHJldHVybigoQ0hBUikoMHhjZCAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDFlOiByZXR1cm4oKENIQVIpKDB4Y2UgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDQxZjogcmV0dXJuKChDSEFSKSgweGNmICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDA0MjA6IHJldHVybigoQ0hBUikoMHhkMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDIx OiByZXR1cm4oKENIQVIpKDB4ZDEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyMjogcmV0dXJu KChDSEFSKSgweGQyICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MjM6IHJldHVybigoQ0hBUiko MHhkMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDI0OiByZXR1cm4oKENIQVIpKDB4ZDQgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyNTogcmV0dXJuKChDSEFSKSgweGQ1ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDA0MjY6IHJldHVybigoQ0hBUikoMHhkNiAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwNDI3OiByZXR1cm4oKENIQVIpKDB4ZDcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQy ODogcmV0dXJuKChDSEFSKSgweGQ4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0Mjk6IHJldHVy bigoQ0hBUikoMHhkOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDJhOiByZXR1cm4oKENIQVIp KDB4ZGEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyYjogcmV0dXJuKChDSEFSKSgweGRiICYg MHhmZikpOwotICAgICAgY2FzZSAweDA0MmM6IHJldHVybigoQ0hBUikoMHhkYyAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwNDJkOiByZXR1cm4oKENIQVIpKDB4ZGQgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDQyZTogcmV0dXJuKChDSEFSKSgweGRlICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0 MmY6IHJldHVybigoQ0hBUikoMHhkZiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDMwOiByZXR1 cm4oKENIQVIpKDB4ZTAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzMTogcmV0dXJuKChDSEFS KSgweGUxICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MzI6IHJldHVybigoQ0hBUikoMHhlMiAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDMzOiByZXR1cm4oKENIQVIpKDB4ZTMgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDQzNDogcmV0dXJuKChDSEFSKSgweGU0ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDA0MzU6IHJldHVybigoQ0hBUikoMHhlNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw NDM2OiByZXR1cm4oKENIQVIpKDB4ZTYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzNzogcmV0 dXJuKChDSEFSKSgweGU3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0Mzg6IHJldHVybigoQ0hB UikoMHhlOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDM5OiByZXR1cm4oKENIQVIpKDB4ZTkg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzYTogcmV0dXJuKChDSEFSKSgweGVhICYgMHhmZikp OwotICAgICAgY2FzZSAweDA0M2I6IHJldHVybigoQ0hBUikoMHhlYiAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwNDNjOiByZXR1cm4oKENIQVIpKDB4ZWMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDQzZDogcmV0dXJuKChDSEFSKSgweGVkICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0M2U6IHJl dHVybigoQ0hBUikoMHhlZSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDNmOiByZXR1cm4oKENI QVIpKDB4ZWYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0MDogcmV0dXJuKChDSEFSKSgweGYw ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NDE6IHJldHVybigoQ0hBUikoMHhmMSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwNDQyOiByZXR1cm4oKENIQVIpKDB4ZjIgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDQ0MzogcmV0dXJuKChDSEFSKSgweGYzICYgMHhmZikpOwotICAgICAgY2FzZSAw eDA0NDQ6IHJldHVybigoQ0hBUikoMHhmNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQ1OiBy ZXR1cm4oKENIQVIpKDB4ZjUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0NjogcmV0dXJuKChD SEFSKSgweGY2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NDc6IHJldHVybigoQ0hBUikoMHhm NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQ4OiByZXR1cm4oKENIQVIpKDB4ZjggJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDQ0OTogcmV0dXJuKChDSEFSKSgweGY5ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDA0NGE6IHJldHVybigoQ0hBUikoMHhmYSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwNDRiOiByZXR1cm4oKENIQVIpKDB4ZmIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0Yzog cmV0dXJuKChDSEFSKSgweGZjICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NGQ6IHJldHVybigo Q0hBUikoMHhmZCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDRlOiByZXR1cm4oKENIQVIpKDB4 ZmUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0ZjogcmV0dXJuKChDSEFSKSgweGZmICYgMHhm ZikpOwotICAgICAgY2FzZSAweDA0NTE6IHJldHVybigoQ0hBUikoMHhiOCAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwNDUyOiByZXR1cm4oKENIQVIpKDB4OTAgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDQ1MzogcmV0dXJuKChDSEFSKSgweDgzICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NTQ6 IHJldHVybigoQ0hBUikoMHhiYSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDU1OiByZXR1cm4o KENIQVIpKDB4YmUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ1NjogcmV0dXJuKChDSEFSKSgw eGIzICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NTc6IHJldHVybigoQ0hBUikoMHhiZiAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDU4OiByZXR1cm4oKENIQVIpKDB4YmMgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDQ1OTogcmV0dXJuKChDSEFSKSgweDlhICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDA0NWE6IHJldHVybigoQ0hBUikoMHg5YyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDVi OiByZXR1cm4oKENIQVIpKDB4OWUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ1YzogcmV0dXJu KChDSEFSKSgweDlkICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NWU6IHJldHVybigoQ0hBUiko MHhhMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDVmOiByZXR1cm4oKENIQVIpKDB4OWYgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ5MDogcmV0dXJuKChDSEFSKSgweGE1ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDA0OTE6IHJldHVybigoQ0hBUikoMHhiNCAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgyMDEyOiByZXR1cm4oKENIQVIpKDB4OTYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjAx NDogcmV0dXJuKChDSEFSKSgweDk3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMTg6IHJldHVy bigoQ0hBUikoMHg5MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDE5OiByZXR1cm4oKENIQVIp KDB4OTIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjAxYTogcmV0dXJuKChDSEFSKSgweDgyICYg MHhmZikpOwotICAgICAgY2FzZSAweDIwMWM6IHJldHVybigoQ0hBUikoMHg5MyAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgyMDFkOiByZXR1cm4oKENIQVIpKDB4OTQgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MjAxZTogcmV0dXJuKChDSEFSKSgweDg0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIw MjA6IHJldHVybigoQ0hBUikoMHg4NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDIxOiByZXR1 cm4oKENIQVIpKDB4ODcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjAyMjogcmV0dXJuKChDSEFS KSgweDk1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMjY6IHJldHVybigoQ0hBUikoMHg4NSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDMxOiByZXR1cm4oKENIQVIpKDB4ODkgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MjBBQzogICAgICAgICAgICAgICAgICAgICAgLyogRXVybyAqLwotICAg ICAgICAgIHJldHVybigoQ0hBUikoMHg4OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMTE2OiBy ZXR1cm4oKENIQVIpKDB4YjkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjEyMjogcmV0dXJuKChD SEFSKSgweDk5ICYgMHhmZikpOwotICAgICAgZGVmYXVsdDogcmV0dXJuKDB4MDAzZik7Ci0gICAg fQotfQotCi1pbnQgLyogVW5pY29kZSB0byBXaW5kb3dzIENvZGUgUGFnZSAxMjUyIChMYXRpbi0x KSAqLwotI2lmZGVmIENLX0FOU0lDCi10eF9jcDEyNTIoVVNIT1JUIGMpCi0jZWxzZQotdHhfY3Ax MjUyKGMpIFVTSE9SVCBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgPCAw eDgwIHx8IChjID4gMHg5ZiAmJiBjIDw9IDB4ZmYpKSAvKiBIYXMgQzEgZ3JhcGhpY3MgKi8KLSAg ICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKLSAgICBzd2l0Y2ggKGMpIHsKLSAgICAgIGNh c2UgMHgwMTUyOiAgICAgICAgICAgICAgICAgICAgICAvKiBPRSAqLwotICAgICAgICByZXR1cm4o KENIQVIpKDB4OGMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE1MzogICAgICAgICAgICAgICAg ICAgICAgLyogb2UgKi8KLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDljICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAxNjA6ICAgICAgICAgICAgICAgICAgICAgIC8qIFMgY2Fyb24gKi8KLSAgICAg ICAgcmV0dXJuKChDSEFSKSgweDhhICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxNjE6ICAgICAg ICAgICAgICAgICAgICAgIC8qIHMgY2Fyb24gKi8KLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDlh ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxNzg6ICAgICAgICAgICAgICAgICAgICAgIC8qIFkg ZGlhZXJlc2lzICovCi0gICAgICAgIHJldHVybigoQ0hBUikoMHg5ZiAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMTdEOiAgICAgICAgICAgICAgICAgICAgICAvKiBaIGNhcm9uICovCi0gICAgICAg IHJldHVybigoQ0hBUikoMHg4ZSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTdFOiAgICAgICAg ICAgICAgICAgICAgICAvKiB6IGNhcm9uICovCi0gICAgICAgIHJldHVybigoQ0hBUikoMHg5ZSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTkyOiAgICAgICAgICAgICAgICAgICAgICAvKiBGbG9y aW4gKi8KLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDgzICYgMHhmZikpOwotICAgICAgY2FzZSAw eDIwMTA6IGNhc2UgMHgyMDExOiAgICAgICAgIC8qIEh5cGhlbnMgKi8KLSAgICAgICAgcmV0dXJu KChDSEFSKSgweDJkICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMTI6IGNhc2UgMHgyMDEzOiAg ICAgICAgIC8qIGVuLWRhc2hlcyAqLwotICAgICAgICByZXR1cm4oKENIQVIpKDB4OTYgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MjAxNDogY2FzZSAweDIwMTU6ICAgICAgICAgLyogZW0tZGFzaGVz ICovCi0gICAgICAgIHJldHVybigoQ0hBUikoMHg5NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy MDE4OiAgICAgICAgICAgICAgICAgICAgICAvKiBWYXJpb3VzIHF1b3RhdGlvbiBtYXJrcy4uLiAq LwotICAgICAgICByZXR1cm4oKENIQVIpKDB4OTEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjAx OToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDkyICYgMHhmZikpOwotICAgICAgY2FzZSAweDIw MWM6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg5MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy MDFkOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4OTQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MjAxZToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDg0ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDIwMjA6ICAgICAgICAgICAgICAgICAgICAgIC8qIERhZ2dlciAqLwotICAgICAgICByZXR1cm4o KENIQVIpKDB4ODYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjAyMTogICAgICAgICAgICAgICAg ICAgICAgLyogRG91YmxlIERhZ2dlciAqLwotICAgICAgICByZXR1cm4oKENIQVIpKDB4ODcgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MjAyMjogICAgICAgICAgICAgICAgICAgICAgLyogQnVsbGV0 ICovCi0gICAgICAgIHJldHVybigoQ0hBUikoMHg5NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy MDI2OiAgICAgICAgICAgICAgICAgICAgICAvKiBFbGxpcHNpcyAqLwotICAgICAgICByZXR1cm4o KENIQVIpKDB4ODUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjAzMDogICAgICAgICAgICAgICAg ICAgICAgLyogUGVyIG1pbCAqLwotICAgICAgICByZXR1cm4oKENIQVIpKDB4ODkgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MjBBQzogICAgICAgICAgICAgICAgICAgICAgLyogRXVybyAqLwotICAg ICAgICAgIHJldHVybigoQ0hBUikoMHg4MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMTIyOiAg ICAgICAgICAgICAgICAgICAgICAvKiBUcmFkZSBNYXJrICovCi0gICAgICAgIHJldHVybigoQ0hB UikoMHg5OSAmIDB4ZmYpKTsKLSAgICAgIGRlZmF1bHQ6IHJldHVybigweDAwM2YpOwotICAgIH0K LX0KLQotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBDIENvZGUg UGFnZSA4NTIgKi8KLSNpZmRlZiBDS19BTlNJQwotdHhfY3A4NTIoVVNIT1JUIGMpCi0jZWxzZQot dHhfY3A4NTIoYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAo YyA8IDB4ODApICAgICAgICAgICAgICAgICAgICAgICAvKiBIYXMgQzEgZ3JhcGhpY3MgKi8KLSAg ICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKLSAgICBzd2l0Y2ggKGMpIHsKLSAgICAgIGNh c2UgMHgwMGEwOiByZXR1cm4oKENIQVIpKDI1NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE0 OiByZXR1cm4oKENIQVIpKDIwNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE3OiByZXR1cm4o KENIQVIpKDI0NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE4OiByZXR1cm4oKENIQVIpKDI0 OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGFiOiByZXR1cm4oKENIQVIpKDE3NCAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGFjOiByZXR1cm4oKENIQVIpKDE3MCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGFkOiByZXR1cm4oKENIQVIpKDI0MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGIwOiByZXR1cm4oKENIQVIpKDI0OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGI0OiByZXR1 cm4oKENIQVIpKDIzOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGI4OiByZXR1cm4oKENIQVIp KDI0NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGJiOiByZXR1cm4oKENIQVIpKDE3NSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGMxOiByZXR1cm4oKENIQVIpKDE4MSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGMyOiByZXR1cm4oKENIQVIpKDE4MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGM0OiByZXR1cm4oKENIQVIpKDE0MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM3OiBy ZXR1cm4oKENIQVIpKDEyOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM5OiByZXR1cm4oKENI QVIpKDE0NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNiOiByZXR1cm4oKENIQVIpKDIxMSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGNkOiByZXR1cm4oKENIQVIpKDIxNCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGNlOiByZXR1cm4oKENIQVIpKDIxNSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGQzOiByZXR1cm4oKENIQVIpKDIyNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ0 OiByZXR1cm4oKENIQVIpKDIyNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ2OiByZXR1cm4o KENIQVIpKDE1MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ3OiByZXR1cm4oKENIQVIpKDE1 OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGRhOiByZXR1cm4oKENIQVIpKDIzMyAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGRjOiByZXR1cm4oKENIQVIpKDE1NCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGRkOiByZXR1cm4oKENIQVIpKDIzNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGRmOiByZXR1cm4oKENIQVIpKDIyNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGUxOiByZXR1 cm4oKENIQVIpKDE2MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGUyOiByZXR1cm4oKENIQVIp KDEzMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGU0OiByZXR1cm4oKENIQVIpKDEzMiAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGU3OiByZXR1cm4oKENIQVIpKDEzNSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGU5OiByZXR1cm4oKENIQVIpKDEzMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGViOiByZXR1cm4oKENIQVIpKDEzNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGVkOiBy ZXR1cm4oKENIQVIpKDE2MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGVlOiByZXR1cm4oKENI QVIpKDE0MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGYzOiByZXR1cm4oKENIQVIpKDE2MiAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGY0OiByZXR1cm4oKENIQVIpKDE0NyAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGY2OiByZXR1cm4oKENIQVIpKDE0OCAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGY3OiByZXR1cm4oKENIQVIpKDI0NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGZh OiByZXR1cm4oKENIQVIpKDE2MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGZjOiByZXR1cm4o KENIQVIpKDEyOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGZkOiByZXR1cm4oKENIQVIpKDIz NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTAyOiByZXR1cm4oKENIQVIpKDE5OCAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMTAzOiByZXR1cm4oKENIQVIpKDE5OSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMTA0OiByZXR1cm4oKENIQVIpKDE2NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MTA1OiByZXR1cm4oKENIQVIpKDE2NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTA2OiByZXR1 cm4oKENIQVIpKDE0MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTA3OiByZXR1cm4oKENIQVIp KDEzNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTBjOiByZXR1cm4oKENIQVIpKDE3MiAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTBkOiByZXR1cm4oKENIQVIpKDE1OSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMTBlOiByZXR1cm4oKENIQVIpKDIxMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMTBmOiByZXR1cm4oKENIQVIpKDIxMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTEwOiBy ZXR1cm4oKENIQVIpKDIwOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTExOiByZXR1cm4oKENI QVIpKDIwOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTE4OiByZXR1cm4oKENIQVIpKDE2OCAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTE5OiByZXR1cm4oKENIQVIpKDE2OSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMTFhOiByZXR1cm4oKENIQVIpKDE4MyAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMTFiOiByZXR1cm4oKENIQVIpKDIxNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTM5 OiByZXR1cm4oKENIQVIpKDE0NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTNhOiByZXR1cm4o KENIQVIpKDE0NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTNkOiByZXR1cm4oKENIQVIpKDE0 OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTNlOiByZXR1cm4oKENIQVIpKDE1MCAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMTQxOiByZXR1cm4oKENIQVIpKDE1NyAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMTQyOiByZXR1cm4oKENIQVIpKDEzNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MTQzOiByZXR1cm4oKENIQVIpKDIyNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTQ0OiByZXR1 cm4oKENIQVIpKDIyOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTQ3OiByZXR1cm4oKENIQVIp KDIxMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTQ4OiByZXR1cm4oKENIQVIpKDIyOSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTUwOiByZXR1cm4oKENIQVIpKDEzOCAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMTUxOiByZXR1cm4oKENIQVIpKDEzOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMTU0OiByZXR1cm4oKENIQVIpKDIzMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTU1OiBy ZXR1cm4oKENIQVIpKDIzNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTU4OiByZXR1cm4oKENI QVIpKDI1MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTU5OiByZXR1cm4oKENIQVIpKDI1MyAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTVhOiByZXR1cm4oKENIQVIpKDE1MSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMTViOiByZXR1cm4oKENIQVIpKDE1MiAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMTVlOiByZXR1cm4oKENIQVIpKDE4NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTVm OiByZXR1cm4oKENIQVIpKDE3MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTYwOiByZXR1cm4o KENIQVIpKDIzMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTYxOiByZXR1cm4oKENIQVIpKDIz MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTYyOiByZXR1cm4oKENIQVIpKDIyMSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMTYzOiByZXR1cm4oKENIQVIpKDIzOCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMTY0OiByZXR1cm4oKENIQVIpKDE1NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MTY1OiByZXR1cm4oKENIQVIpKDE1NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTZlOiByZXR1 cm4oKENIQVIpKDIyMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTZmOiByZXR1cm4oKENIQVIp KDEzMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTcwOiByZXR1cm4oKENIQVIpKDIzNSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTcxOiByZXR1cm4oKENIQVIpKDI1MSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMTc5OiByZXR1cm4oKENIQVIpKDE0MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMTdhOiByZXR1cm4oKENIQVIpKDE3MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTdiOiBy ZXR1cm4oKENIQVIpKDE4OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTdjOiByZXR1cm4oKENI QVIpKDE5MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTdkOiByZXR1cm4oKENIQVIpKDE2NiAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTdlOiByZXR1cm4oKENIQVIpKDE2NyAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMmM3OiByZXR1cm4oKENIQVIpKDI0MyAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMmQ4OiByZXR1cm4oKENIQVIpKDI0NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMmQ5 OiByZXR1cm4oKENIQVIpKDI1MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMmRiOiByZXR1cm4o KENIQVIpKDI0MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMmRkOiByZXR1cm4oKENIQVIpKDI0 MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTAwOiByZXR1cm4oKENIQVIpKDE5NiAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgyNTAyOiByZXR1cm4oKENIQVIpKDE3OSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgyNTBjOiByZXR1cm4oKENIQVIpKDIxOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy NTEwOiByZXR1cm4oKENIQVIpKDE5MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTE0OiByZXR1 cm4oKENIQVIpKDE5MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTE4OiByZXR1cm4oKENIQVIp KDIxNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTFjOiByZXR1cm4oKENIQVIpKDE5NSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTI0OiByZXR1cm4oKENIQVIpKDE4MCAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgyNTJjOiByZXR1cm4oKENIQVIpKDE5NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgyNTM0OiByZXR1cm4oKENIQVIpKDE5MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTNjOiBy ZXR1cm4oKENIQVIpKDE5NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTUwOiByZXR1cm4oKENI QVIpKDIwNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTUxOiByZXR1cm4oKENIQVIpKDE4NiAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTU0OiByZXR1cm4oKENIQVIpKDIwMSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgyNTU3OiByZXR1cm4oKENIQVIpKDE4NyAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgyNTVhOiByZXR1cm4oKENIQVIpKDIwMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTVk OiByZXR1cm4oKENIQVIpKDE4OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTYwOiByZXR1cm4o KENIQVIpKDIwNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTYzOiByZXR1cm4oKENIQVIpKDE4 NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTY2OiByZXR1cm4oKENIQVIpKDIwMyAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgyNTY5OiByZXR1cm4oKENIQVIpKDIwMiAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgyNTZjOiByZXR1cm4oKENIQVIpKDIwNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy NTgwOiByZXR1cm4oKENIQVIpKDIyMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTg0OiByZXR1 cm4oKENIQVIpKDIyMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTg4OiByZXR1cm4oKENIQVIp KDIxOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTkxOiByZXR1cm4oKENIQVIpKDE3NiAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTkyOiByZXR1cm4oKENIQVIpKDE3NyAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgyNTkzOiByZXR1cm4oKENIQVIpKDE3OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgyNWEwOiByZXR1cm4oKENIQVIpKDI1NCAmIDB4ZmYpKTsKLSAgICAgIGRlZmF1bHQ6IHJldHVy bih0eF9jcHN1YihjKSk7ICAgICAvKiBGb3IgYm94IGNoYXJhY3RlcnMgZXRjICovCi0gICAgfQot fQotCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2luZG93cyBD b2RlIFBhZ2UgMTI1MyAoR3JlZWspICovCi0jaWZkZWYgQ0tfQU5TSUMKLXR4X2NwMTI1MyhVU0hP UlQgYykKLSNlbHNlCi10eF9jcDEyNTMoYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMg Ki8KLXsKLSAgICBpZiAoYyA8IDB4ODApICAgICAgICAgICAgICAgICAgICAgICAvKiBIYXMgQzEg Z3JhcGhpY3MgKi8KLSAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKLSAgICBzd2l0Y2gg KGMpIHsKLSAgICAgIGNhc2UgMHgwMDNjOiByZXR1cm4oKENIQVIpKDB4OGIgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDAzZTogcmV0dXJuKChDSEFSKSgweDliICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwQTA6IHJldHVybigoQ0hBUikoMHhhMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEEz OiByZXR1cm4oKENIQVIpKDB4YTMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBBNDogcmV0dXJu KChDSEFSKSgweGE0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQTU6IHJldHVybigoQ0hBUiko MHhhNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEE2OiByZXR1cm4oKENIQVIpKDB4YTYgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDBBNzogcmV0dXJuKChDSEFSKSgweGE3ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwQTg6IHJldHVybigoQ0hBUikoMHhhOCAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMEE5OiByZXR1cm4oKENIQVIpKDB4YTkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBB QTogcmV0dXJuKChDSEFSKSgweGFhICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQUI6IHJldHVy bigoQ0hBUikoMHhhYiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEFDOiByZXR1cm4oKENIQVIp KDB4YWMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBBRDogcmV0dXJuKChDSEFSKSgweGFkICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwQUU6IHJldHVybigoQ0hBUikoMHhhZSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMEFGOiByZXR1cm4oKENIQVIpKDB4YWYgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDBCMDogcmV0dXJuKChDSEFSKSgweGIwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw QjE6IHJldHVybigoQ0hBUikoMHhiMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEIyOiByZXR1 cm4oKENIQVIpKDB4YjIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBCMzogcmV0dXJuKChDSEFS KSgweGIzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQjU6IHJldHVybigoQ0hBUikoMHhiNSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEI2OiByZXR1cm4oKENIQVIpKDB4YjYgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDBiNzogcmV0dXJuKChDSEFSKSgweGExICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwQkI6IHJldHVybigoQ0hBUikoMHhiYiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MEJEOiByZXR1cm4oKENIQVIpKDB4YmQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE5MjogcmV0 dXJuKChDSEFSKSgweDgzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzODY6IHJldHVybigoQ0hB UikoMHhhMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMzg4OiByZXR1cm4oKENIQVIpKDB4Yjgg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDM4OTogcmV0dXJuKChDSEFSKSgweGI5ICYgMHhmZikp OwotICAgICAgY2FzZSAweDAzOEE6IHJldHVybigoQ0hBUikoMHhiYSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMzhDOiByZXR1cm4oKENIQVIpKDB4YmMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDM4RTogcmV0dXJuKChDSEFSKSgweGJlICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzOEY6IHJl dHVybigoQ0hBUikoMHhiZiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMzkwOiByZXR1cm4oKENI QVIpKDB4YzAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDM5MTogcmV0dXJuKChDSEFSKSgweGMx ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzOTI6IHJldHVybigoQ0hBUikoMHhjMiAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMzkzOiByZXR1cm4oKENIQVIpKDB4YzMgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDM5NDogcmV0dXJuKChDSEFSKSgweGM0ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAzOTU6IHJldHVybigoQ0hBUikoMHhjNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMzk2OiBy ZXR1cm4oKENIQVIpKDB4YzYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDM5NzogcmV0dXJuKChD SEFSKSgweGM3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzOTg6IHJldHVybigoQ0hBUikoMHhj OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMzk5OiByZXR1cm4oKENIQVIpKDB4YzkgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDM5QTogcmV0dXJuKChDSEFSKSgweGNhICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAzOUI6IHJldHVybigoQ0hBUikoMHhjYiAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMzlDOiByZXR1cm4oKENIQVIpKDB4Y2MgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDM5RDog cmV0dXJuKChDSEFSKSgweGNkICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzOUU6IHJldHVybigo Q0hBUikoMHhjZSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMzlGOiByZXR1cm4oKENIQVIpKDB4 Y2YgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDNhMDogcmV0dXJuKChDSEFSKSgweGQwICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAzYTE6IHJldHVybigoQ0hBUikoMHhkMSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwM2EzOiByZXR1cm4oKENIQVIpKDB4ZDMgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDNhNDogcmV0dXJuKChDSEFSKSgweGQ0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYTU6 IHJldHVybigoQ0hBUikoMHhkNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2E2OiByZXR1cm4o KENIQVIpKDB4ZDYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDNhNzogcmV0dXJuKChDSEFSKSgw eGQ3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYTg6IHJldHVybigoQ0hBUikoMHhkOCAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2E5OiByZXR1cm4oKENIQVIpKDB4ZDkgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDNhQTogcmV0dXJuKChDSEFSKSgweGRhICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAzYUI6IHJldHVybigoQ0hBUikoMHhkYiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2FD OiByZXR1cm4oKENIQVIpKDB4ZGMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDNhRDogcmV0dXJu KChDSEFSKSgweGRkICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYUU6IHJldHVybigoQ0hBUiko MHhkZSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2FGOiByZXR1cm4oKENIQVIpKDB4ZGYgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDNiMDogcmV0dXJuKChDSEFSKSgweGUwICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAzYjE6IHJldHVybigoQ0hBUikoMHhlMSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwM2IyOiByZXR1cm4oKENIQVIpKDB4ZTIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDNi MzogcmV0dXJuKChDSEFSKSgweGUzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYjQ6IHJldHVy bigoQ0hBUikoMHhlNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2I1OiByZXR1cm4oKENIQVIp KDB4ZTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDNiNjogcmV0dXJuKChDSEFSKSgweGU2ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAzYjc6IHJldHVybigoQ0hBUikoMHhlNyAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwM2I4OiByZXR1cm4oKENIQVIpKDB4ZTggJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDNiOTogcmV0dXJuKChDSEFSKSgweGU5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAz YkE6IHJldHVybigoQ0hBUikoMHhlYSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2JCOiByZXR1 cm4oKENIQVIpKDB4ZWIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDNiQzogcmV0dXJuKChDSEFS KSgweGVjICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYkQ6IHJldHVybigoQ0hBUikoMHhlZCAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2JFOiByZXR1cm4oKENIQVIpKDB4ZWUgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDNiRjogcmV0dXJuKChDSEFSKSgweGVmICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAzYzA6IHJldHVybigoQ0hBUikoMHhmMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw M2MxOiByZXR1cm4oKENIQVIpKDB4ZjEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDNjMjogcmV0 dXJuKChDSEFSKSgweGYyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYzM6IHJldHVybigoQ0hB UikoMHhmMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2M0OiByZXR1cm4oKENIQVIpKDB4ZjQg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDNjNTogcmV0dXJuKChDSEFSKSgweGY1ICYgMHhmZikp OwotICAgICAgY2FzZSAweDAzYzY6IHJldHVybigoQ0hBUikoMHhmNiAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwM2M3OiByZXR1cm4oKENIQVIpKDB4ZjcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDNjODogcmV0dXJuKChDSEFSKSgweGY4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYzk6IHJl dHVybigoQ0hBUikoMHhmOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2NBOiByZXR1cm4oKENI QVIpKDB4ZmEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDNjQjogcmV0dXJuKChDSEFSKSgweGZi ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzY0M6IHJldHVybigoQ0hBUikoMHhmYyAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwM2NEOiByZXR1cm4oKENIQVIpKDB4ZmQgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDNjRTogcmV0dXJuKChDSEFSKSgweGZlICYgMHhmZikpOwotICAgICAgY2FzZSAw eDIwMTI6IHJldHVybigoQ0hBUikoMHg5NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDE0OiBy ZXR1cm4oKENIQVIpKDB4OTcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjAxODogcmV0dXJuKChD SEFSKSgweDkxICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMTk6IHJldHVybigoQ0hBUikoMHg5 MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDFhOiByZXR1cm4oKENIQVIpKDB4ODIgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MjAxYzogcmV0dXJuKChDSEFSKSgweDkzICYgMHhmZikpOwotICAg ICAgY2FzZSAweDIwMWQ6IHJldHVybigoQ0hBUikoMHg5NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgyMDFlOiByZXR1cm4oKENIQVIpKDB4ODQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjAyMDog cmV0dXJuKChDSEFSKSgweDg2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMjE6IHJldHVybigo Q0hBUikoMHg4NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDIyOiByZXR1cm4oKENIQVIpKDB4 OTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjAyNjogcmV0dXJuKChDSEFSKSgweDg1ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDIwMzE6IHJldHVybigoQ0hBUikoMHg4OSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgyMEFDOiAgICAgICAgICAgICAgICAgICAgICAvKiBFdXJvICovCi0gICAgICAg ICAgcmV0dXJuKChDSEFSKSgweDgwICYgMHhmZikpOwotICAgICAgY2FzZSAweDIxMjI6IHJldHVy bigoQ0hBUikoMHg5OSAmIDB4ZmYpKTsKLSAgICAgIGRlZmF1bHQ6IHJldHVybigweDAwM2YpOwot ICAgIH0KLX0KLQotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdp bmRvd3MgQ29kZSBQYWdlIDEyNTQgKFR1cmtpc2gpICovCi0jaWZkZWYgQ0tfQU5TSUMKLXR4X2Nw MTI1NChVU0hPUlQgYykKLSNlbHNlCi10eF9jcDEyNTQoYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyog Q0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA8IDB4ODApCi0gICAgICByZXR1cm4oKENIQVIpKGMg JiAweGZmKSk7Ci0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBjYXNlIDB4MDExZTogcmV0dXJuKChD SEFSKSgweGQwICYgMHhmZikpOyAvKiBHIGJyZXZlICAgICovCi0gICAgICBjYXNlIDB4MDEzMDog cmV0dXJuKChDSEFSKSgweGRkICYgMHhmZikpOyAvKiBJIHdpdGggZG90ICovCi0gICAgICBjYXNl IDB4MDE1ZTogcmV0dXJuKChDSEFSKSgweGRlICYgMHhmZikpOyAvKiBTIGNlZGlsbGEgICovCi0g ICAgICBjYXNlIDB4MDExZjogcmV0dXJuKChDSEFSKSgweGYwICYgMHhmZikpOyAvKiBnIGJyZXZl ICAgICovCi0gICAgICBjYXNlIDB4MDEzMTogcmV0dXJuKChDSEFSKSgweGZkICYgMHhmZikpOyAv KiBpIGRvdGxlc3MgKi8KLSAgICAgIGNhc2UgMHgwMTVmOiByZXR1cm4oKENIQVIpKDB4ZmUgJiAw eGZmKSk7IC8qIHMgY2VkaWxsYSAqLwotICAgICAgZGVmYXVsdDogcmV0dXJuKHR4X2NwMTI1Mihj KSk7ICAgIC8qIFRoZSByZXN0IGlzIGxpa2UgV2luZG93cyBMYXRpbi0xICovCi0gICAgfQotfQot Ci1pbnQKLSNpZmRlZiBDS19BTlNJQwotdHhfY3AxMjU1KFVTSE9SVCBjKQotI2Vsc2UKLXR4X2Nw MTI1NShjKSBVU0hPUlQgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjIDwg MHgwODApCi0gICAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKLSAgICBzd2l0Y2ggKGMp IHsKLSAgICAgIGNhc2UgMHgyMEFDOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4ODAgJiAweGZm KSk7ICAgIC8qIEVVUk8gU0lHTiAqLwotICAgICAgY2FzZSAweDIwMUE6Ci0gICAgICAgIHJldHVy bigoQ0hBUikoMHg4MiAmIDB4ZmYpKTsgICAgLyogU0lOR0xFIExPVy05IFFVT1RBVElPTiBNQVJL ICovCi0gICAgICBjYXNlIDB4MDE5MjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDgzICYgMHhm ZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgRiBXSVRIIEhPT0sgKi8KLSAgICAgIGNhc2Ug MHgyMDFFOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4ODQgJiAweGZmKSk7ICAgIC8qIERPVUJM RSBMT1ctOSBRVU9UQVRJT04gTUFSSyAqLwotICAgICAgY2FzZSAweDIwMjY6Ci0gICAgICAgIHJl dHVybigoQ0hBUikoMHg4NSAmIDB4ZmYpKTsgICAgLyogSE9SSVpPTlRBTCBFTExJUFNJUyAqLwot ICAgICAgY2FzZSAweDIwMjA6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg4NiAmIDB4ZmYpKTsg ICAgLyogREFHR0VSICovCi0gICAgICBjYXNlIDB4MjAyMToKLSAgICAgICAgcmV0dXJuKChDSEFS KSgweDg3ICYgMHhmZikpOyAgICAvKiBET1VCTEUgREFHR0VSICovCi0gICAgICBjYXNlIDB4MDJD NjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDg4ICYgMHhmZikpOyAgICAvKiBNT0RJRklFUiBM RVRURVIgQ0lSQ1VNRkxFWCBBQ0NFTlQgKi8KLSAgICAgIGNhc2UgMHgyMDMwOgotICAgICAgICBy ZXR1cm4oKENIQVIpKDB4ODkgJiAweGZmKSk7ICAgIC8qIFBFUiBNSUxMRSBTSUdOICovCi0gICAg ICBjYXNlIDB4MjAzOToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDhCICYgMHhmZikpOyAgICAv KiBTSU5HTEUgTEVGVC1QT0lOVElORyBBTkdMRSBRVU9URSAqLwotICAgICAgY2FzZSAweDIwMTg6 Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg5MSAmIDB4ZmYpKTsgICAgLyogTEVGVCBTSU5HTEUg UVVPVEFUSU9OIE1BUksgKi8KLSAgICAgIGNhc2UgMHgyMDE5OgotICAgICAgICByZXR1cm4oKENI QVIpKDB4OTIgJiAweGZmKSk7ICAgIC8qIFJJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSSyAqLwot ICAgICAgY2FzZSAweDIwMUM6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg5MyAmIDB4ZmYpKTsg ICAgLyogTEVGVCBET1VCTEUgUVVPVEFUSU9OIE1BUksgKi8KLSAgICAgIGNhc2UgMHgyMDFEOgot ICAgICAgICByZXR1cm4oKENIQVIpKDB4OTQgJiAweGZmKSk7ICAgIC8qIFJJR0hUIERPVUJMRSBR VU9UQVRJT04gTUFSSyAqLwotICAgICAgY2FzZSAweDIwMjI6Ci0gICAgICAgIHJldHVybigoQ0hB UikoMHg5NSAmIDB4ZmYpKTsgICAgLyogQlVMTEVUICovCi0gICAgICBjYXNlIDB4MjAxMzoKLSAg ICAgICAgcmV0dXJuKChDSEFSKSgweDk2ICYgMHhmZikpOyAgICAvKiBFTiBEQVNIICovCi0gICAg ICBjYXNlIDB4MjAxNDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDk3ICYgMHhmZikpOyAgICAv KiBFTSBEQVNIICovCi0gICAgICBjYXNlIDB4MDJEQzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgw eDk4ICYgMHhmZikpOyAgICAvKiBTTUFMTCBUSUxERSAqLwotICAgICAgY2FzZSAweDIxMjI6Ci0g ICAgICAgIHJldHVybigoQ0hBUikoMHg5OSAmIDB4ZmYpKTsgICAgLyogVFJBREUgTUFSSyBTSUdO ICovCi0gICAgICBjYXNlIDB4MjAzQToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDlCICYgMHhm ZikpOyAgICAvKiBTSU5HTEUgUklHSFQtUE9JTlRJTkcgQU5HTEUgUVVPVEUgKi8KLSAgICAgIGNh c2UgMHgwMEEwOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QTAgJiAweGZmKSk7ICAgIC8qIE5P LUJSRUFLIFNQQUNFICovCi0gICAgICBjYXNlIDB4MDBBMToKLSAgICAgICAgcmV0dXJuKChDSEFS KSgweEExICYgMHhmZikpOyAgICAvKiBJTlZFUlRFRCBFWENMQU1BVElPTiBNQVJLICovCi0gICAg ICBjYXNlIDB4MDBBMjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEEyICYgMHhmZikpOyAgICAv KiBDRU5UIFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMEEzOgotICAgICAgICByZXR1cm4oKENIQVIp KDB4QTMgJiAweGZmKSk7ICAgIC8qIFBPVU5EIFNJR04gKi8KLSAgICAgIGNhc2UgMHgyMEFBOgot ICAgICAgICByZXR1cm4oKENIQVIpKDB4QTQgJiAweGZmKSk7ICAgIC8qIE5FVyBTSEVRRUwgU0lH TiAqLwotICAgICAgY2FzZSAweDAwQTU6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhBNSAmIDB4 ZmYpKTsgICAgLyogWUVOIFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMEE2OgotICAgICAgICByZXR1 cm4oKENIQVIpKDB4QTYgJiAweGZmKSk7ICAgIC8qIEJST0tFTiBCQVIgKi8KLSAgICAgIGNhc2Ug MHgwMEE3OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QTcgJiAweGZmKSk7ICAgIC8qIFNFQ1RJ T04gU0lHTiAqLwotICAgICAgY2FzZSAweDAwQTg6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhB OCAmIDB4ZmYpKTsgICAgLyogRElBRVJFU0lTICovCi0gICAgICBjYXNlIDB4MDBBOToKLSAgICAg ICAgcmV0dXJuKChDSEFSKSgweEE5ICYgMHhmZikpOyAgICAvKiBDT1BZUklHSFQgU0lHTiAqLwot ICAgICAgY2FzZSAweDAwRDc6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhBQSAmIDB4ZmYpKTsg ICAgLyogTVVMVElQTElDQVRJT04gU0lHTiAqLwotICAgICAgY2FzZSAweDAwQUI6Ci0gICAgICAg IHJldHVybigoQ0hBUikoMHhBQiAmIDB4ZmYpKTsgICAgLyogTEVGVC1QT0lOVElORyBET1VCTEUg QU5HTEUgUVVPVEUgKi8KLSAgICAgIGNhc2UgMHgwMEFDOgotICAgICAgICByZXR1cm4oKENIQVIp KDB4QUMgJiAweGZmKSk7ICAgIC8qIE5PVCBTSUdOICovCi0gICAgICBjYXNlIDB4MDBBRDoKLSAg ICAgICAgcmV0dXJuKChDSEFSKSgweEFEICYgMHhmZikpOyAgICAvKiBTT0ZUIEhZUEhFTiAqLwot ICAgICAgY2FzZSAweDAwQUU6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhBRSAmIDB4ZmYpKTsg ICAgLyogUkVHSVNURVJFRCBTSUdOICovCi0gICAgICBjYXNlIDB4MDBBRjoKLSAgICAgICAgcmV0 dXJuKChDSEFSKSgweEFGICYgMHhmZikpOyAgICAvKiBNQUNST04gKi8KLSAgICAgIGNhc2UgMHgw MEIwOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QjAgJiAweGZmKSk7ICAgIC8qIERFR1JFRSBT SUdOICovCi0gICAgICBjYXNlIDB4MDBCMToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEIxICYg MHhmZikpOyAgICAvKiBQTFVTLU1JTlVTIFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMEIyOgotICAg ICAgICByZXR1cm4oKENIQVIpKDB4QjIgJiAweGZmKSk7ICAgIC8qIFNVUEVSU0NSSVBUIFRXTyAq LwotICAgICAgY2FzZSAweDAwQjM6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhCMyAmIDB4ZmYp KTsgICAgLyogU1VQRVJTQ1JJUFQgVEhSRUUgKi8KLSAgICAgIGNhc2UgMHgwMEI0OgotICAgICAg ICByZXR1cm4oKENIQVIpKDB4QjQgJiAweGZmKSk7ICAgIC8qIEFDVVRFIEFDQ0VOVCAqLwotICAg ICAgY2FzZSAweDAwQjU6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhCNSAmIDB4ZmYpKTsgICAg LyogTUlDUk8gU0lHTiAqLwotICAgICAgY2FzZSAweDAwQjY6Ci0gICAgICAgIHJldHVybigoQ0hB UikoMHhCNiAmIDB4ZmYpKTsgICAgLyogUElMQ1JPVyBTSUdOICovCi0gICAgICBjYXNlIDB4MDBC NzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEI3ICYgMHhmZikpOyAgICAvKiBNSURETEUgRE9U ICovCi0gICAgICBjYXNlIDB4MDBCODoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEI4ICYgMHhm ZikpOyAgICAvKiBDRURJTExBICovCi0gICAgICBjYXNlIDB4MDBCOToKLSAgICAgICAgcmV0dXJu KChDSEFSKSgweEI5ICYgMHhmZikpOyAgICAvKiBTVVBFUlNDUklQVCBPTkUgKi8KLSAgICAgIGNh c2UgMHgwMEY3OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QkEgJiAweGZmKSk7ICAgIC8qIERJ VklTSU9OIFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMEJCOgotICAgICAgICByZXR1cm4oKENIQVIp KDB4QkIgJiAweGZmKSk7ICAgIC8qIFJJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9URSAq LwotICAgICAgY2FzZSAweDAwQkM6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhCQyAmIDB4ZmYp KTsgICAgLyogVlVMR0FSIEZSQUNUSU9OIE9ORSBRVUFSVEVSICovCi0gICAgICBjYXNlIDB4MDBC RDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEJEICYgMHhmZikpOyAgICAvKiBWVUxHQVIgRlJB Q1RJT04gT05FIEhBTEYgKi8KLSAgICAgIGNhc2UgMHgwMEJFOgotICAgICAgICByZXR1cm4oKENI QVIpKDB4QkUgJiAweGZmKSk7ICAgIC8qIFZVTEdBUiBGUkFDVElPTiBUSFJFRSBRVUFSVEVSUyAq LwotICAgICAgY2FzZSAweDAwQkY6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhCRiAmIDB4ZmYp KTsgICAgLyogSU5WRVJURUQgUVVFU1RJT04gTUFSSyAqLwotICAgICAgY2FzZSAweDA1QjA6Ci0g ICAgICAgIHJldHVybigoQ0hBUikoMHhDMCAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIFBPSU5UIFNI RVZBICovCi0gICAgICBjYXNlIDB4MDVCMToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEMxICYg MHhmZikpOyAgICAvKiBIRUJSRVcgUE9JTlQgSEFUQUYgU0VHT0wgKi8KLSAgICAgIGNhc2UgMHgw NUIyOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QzIgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBQ T0lOVCBIQVRBRiBQQVRBSCAqLwotICAgICAgY2FzZSAweDA1QjM6Ci0gICAgICAgIHJldHVybigo Q0hBUikoMHhDMyAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIFBPSU5UIEhBVEFGIFFBTUFUUyAqLwot ICAgICAgY2FzZSAweDA1QjQ6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhDNCAmIDB4ZmYpKTsg ICAgLyogSEVCUkVXIFBPSU5UIEhJUklRICovCi0gICAgICBjYXNlIDB4MDVCNToKLSAgICAgICAg cmV0dXJuKChDSEFSKSgweEM1ICYgMHhmZikpOyAgICAvKiBIRUJSRVcgUE9JTlQgVFNFUkUgKi8K LSAgICAgIGNhc2UgMHgwNUI2OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QzYgJiAweGZmKSk7 ICAgIC8qIEhFQlJFVyBQT0lOVCBTRUdPTCAqLwotICAgICAgY2FzZSAweDA1Qjc6Ci0gICAgICAg IHJldHVybigoQ0hBUikoMHhDNyAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIFBPSU5UIFBBVEFIICov Ci0gICAgICBjYXNlIDB4MDVCODoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEM4ICYgMHhmZikp OyAgICAvKiBIRUJSRVcgUE9JTlQgUUFNQVRTICovCi0gICAgICBjYXNlIDB4MDVCOToKLSAgICAg ICAgcmV0dXJuKChDSEFSKSgweEM5ICYgMHhmZikpOyAgICAvKiBIRUJSRVcgUE9JTlQgSE9MQU0g Ki8KLSAgICAgIGNhc2UgMHgwNUJCOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4Q0IgJiAweGZm KSk7ICAgIC8qIEhFQlJFVyBQT0lOVCBRVUJVVFMgKi8KLSAgICAgIGNhc2UgMHgwNUJDOgotICAg ICAgICByZXR1cm4oKENIQVIpKDB4Q0MgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBQT0lOVCBEQUdF U0ggT1IgTUFQSVEgKi8KLSAgICAgIGNhc2UgMHgwNUJEOgotICAgICAgICByZXR1cm4oKENIQVIp KDB4Q0QgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBQT0lOVCBNRVRFRyAqLwotICAgICAgY2FzZSAw eDA1QkU6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhDRSAmIDB4ZmYpKTsgICAgLyogSEVCUkVX IFBVTkNUVUFUSU9OIE1BUUFGICovCi0gICAgICBjYXNlIDB4MDVCRjoKLSAgICAgICAgcmV0dXJu KChDSEFSKSgweENGICYgMHhmZikpOyAgICAvKiBIRUJSRVcgUE9JTlQgUkFGRSAqLwotICAgICAg Y2FzZSAweDA1QzA6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhEMCAmIDB4ZmYpKTsgICAgLyog SEVCUkVXIFBVTkNUVUFUSU9OIFBBU0VRICovCi0gICAgICBjYXNlIDB4MDVDMToKLSAgICAgICAg cmV0dXJuKChDSEFSKSgweEQxICYgMHhmZikpOyAgICAvKiBIRUJSRVcgUE9JTlQgU0hJTiBET1Qg Ki8KLSAgICAgIGNhc2UgMHgwNUMyOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RDIgJiAweGZm KSk7ICAgIC8qIEhFQlJFVyBQT0lOVCBTSU4gRE9UICovCi0gICAgICBjYXNlIDB4MDVDMzoKLSAg ICAgICAgcmV0dXJuKChDSEFSKSgweEQzICYgMHhmZikpOyAgICAvKiBIRUJSRVcgUFVOQ1RVQVRJ T04gU09GIFBBU1VRICovCi0gICAgICBjYXNlIDB4MDVGMDoKLSAgICAgICAgcmV0dXJuKChDSEFS KSgweEQ0ICYgMHhmZikpOyAgICAvKiBIRUJSRVcgTElHLiBZSURESVNIIERPVUJMRSBWQVYgKi8K LSAgICAgIGNhc2UgMHgwNUYxOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RDUgJiAweGZmKSk7 ICAgIC8qIEhFQlJFVyBMSUdBVFVSRSBZSURESVNIIFZBViBZT0QgKi8KLSAgICAgIGNhc2UgMHgw NUYyOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RDYgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBM SUcuIFlJRERJU0ggRE9VQkxFIFlPRCAqLwotICAgICAgY2FzZSAweDA1RjM6Ci0gICAgICAgIHJl dHVybigoQ0hBUikoMHhENyAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIFBVTkNUVUFUSU9OIEdFUkVT SCAqLwotICAgICAgY2FzZSAweDA1RjQ6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhEOCAmIDB4 ZmYpKTsgICAgLyogSEVCUkVXIFBVTkNUVUFUSU9OIEdFUlNIQVlJTSAqLwotICAgICAgY2FzZSAw eDA1RDA6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhFMCAmIDB4ZmYpKTsgICAgLyogSEVCUkVX IExFVFRFUiBBTEVGICovCi0gICAgICBjYXNlIDB4MDVEMToKLSAgICAgICAgcmV0dXJuKChDSEFS KSgweEUxICYgMHhmZikpOyAgICAvKiBIRUJSRVcgTEVUVEVSIEJFVCAqLwotICAgICAgY2FzZSAw eDA1RDI6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhFMiAmIDB4ZmYpKTsgICAgLyogSEVCUkVX IExFVFRFUiBHSU1FTCAqLwotICAgICAgY2FzZSAweDA1RDM6Ci0gICAgICAgIHJldHVybigoQ0hB UikoMHhFMyAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIExFVFRFUiBEQUxFVCAqLwotICAgICAgY2Fz ZSAweDA1RDQ6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhFNCAmIDB4ZmYpKTsgICAgLyogSEVC UkVXIExFVFRFUiBIRSAqLwotICAgICAgY2FzZSAweDA1RDU6Ci0gICAgICAgIHJldHVybigoQ0hB UikoMHhFNSAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIExFVFRFUiBWQVYgKi8KLSAgICAgIGNhc2Ug MHgwNUQ2OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RTYgJiAweGZmKSk7ICAgIC8qIEhFQlJF VyBMRVRURVIgWkFZSU4gKi8KLSAgICAgIGNhc2UgMHgwNUQ3OgotICAgICAgICByZXR1cm4oKENI QVIpKDB4RTcgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBMRVRURVIgSEVUICovCi0gICAgICBjYXNl IDB4MDVEODoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEU4ICYgMHhmZikpOyAgICAvKiBIRUJS RVcgTEVUVEVSIFRFVCAqLwotICAgICAgY2FzZSAweDA1RDk6Ci0gICAgICAgIHJldHVybigoQ0hB UikoMHhFOSAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIExFVFRFUiBZT0QgKi8KLSAgICAgIGNhc2Ug MHgwNURBOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RUEgJiAweGZmKSk7ICAgIC8qIEhFQlJF VyBMRVRURVIgRklOQUwgS0FGICovCi0gICAgICBjYXNlIDB4MDVEQjoKLSAgICAgICAgcmV0dXJu KChDSEFSKSgweEVCICYgMHhmZikpOyAgICAvKiBIRUJSRVcgTEVUVEVSIEtBRiAqLwotICAgICAg Y2FzZSAweDA1REM6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhFQyAmIDB4ZmYpKTsgICAgLyog SEVCUkVXIExFVFRFUiBMQU1FRCAqLwotICAgICAgY2FzZSAweDA1REQ6Ci0gICAgICAgIHJldHVy bigoQ0hBUikoMHhFRCAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIExFVFRFUiBGSU5BTCBNRU0gKi8K LSAgICAgIGNhc2UgMHgwNURFOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RUUgJiAweGZmKSk7 ICAgIC8qIEhFQlJFVyBMRVRURVIgTUVNICovCi0gICAgICBjYXNlIDB4MDVERjoKLSAgICAgICAg cmV0dXJuKChDSEFSKSgweEVGICYgMHhmZikpOyAgICAvKiBIRUJSRVcgTEVUVEVSIEZJTkFMIE5V TiAqLwotICAgICAgY2FzZSAweDA1RTA6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhGMCAmIDB4 ZmYpKTsgICAgLyogSEVCUkVXIExFVFRFUiBOVU4gKi8KLSAgICAgIGNhc2UgMHgwNUUxOgotICAg ICAgICByZXR1cm4oKENIQVIpKDB4RjEgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBMRVRURVIgU0FN RUtIICovCi0gICAgICBjYXNlIDB4MDVFMjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEYyICYg MHhmZikpOyAgICAvKiBIRUJSRVcgTEVUVEVSIEFZSU4gKi8KLSAgICAgIGNhc2UgMHgwNUUzOgot ICAgICAgICByZXR1cm4oKENIQVIpKDB4RjMgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBMRVRURVIg RklOQUwgUEUgKi8KLSAgICAgIGNhc2UgMHgwNUU0OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4 RjQgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBMRVRURVIgUEUgKi8KLSAgICAgIGNhc2UgMHgwNUU1 OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RjUgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBMRVRU RVIgRklOQUwgVFNBREkgKi8KLSAgICAgIGNhc2UgMHgwNUU2OgotICAgICAgICByZXR1cm4oKENI QVIpKDB4RjYgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBMRVRURVIgVFNBREkgKi8KLSAgICAgIGNh c2UgMHgwNUU3OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RjcgJiAweGZmKSk7ICAgIC8qIEhF QlJFVyBMRVRURVIgUU9GICovCi0gICAgICBjYXNlIDB4MDVFODoKLSAgICAgICAgcmV0dXJuKChD SEFSKSgweEY4ICYgMHhmZikpOyAgICAvKiBIRUJSRVcgTEVUVEVSIFJFU0ggKi8KLSAgICAgIGNh c2UgMHgwNUU5OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RjkgJiAweGZmKSk7ICAgIC8qIEhF QlJFVyBMRVRURVIgU0hJTiAqLwotICAgICAgY2FzZSAweDA1RUE6Ci0gICAgICAgIHJldHVybigo Q0hBUikoMHhGQSAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIExFVFRFUiBUQVYgKi8KLSAgICAgIGNh c2UgMHgyMDBFOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RkQgJiAweGZmKSk7ICAgIC8qIExF RlQtVE8tUklHSFQgTUFSSyAqLwotICAgICAgY2FzZSAweDIwMEY6Ci0gICAgICAgIHJldHVybigo Q0hBUikoMHhGRSAmIDB4ZmYpKTsgICAgLyogUklHSFQtVE8tTEVGVCBNQVJLICovCi0gICAgICBk ZWZhdWx0OiByZXR1cm4oMHgwMDNmKTsKLSAgICB9Ci19Ci0KLWludCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBXaW5kb3dzIEFyYWJpYyAqLwotI2lmZGVmIENLX0FOU0lD Ci10eF9jcDEyNTYoVVNIT1JUIGMpCi0jZWxzZQotdHhfY3AxMjU2KGMpIFVTSE9SVCBjOwotI2Vu ZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgPCAweDgwKQotICAgICAgcmV0dXJuKChD SEFSKShjICYgMHhmZikpOwotICAgIHN3aXRjaCAoYykgewotICAgICAgY2FzZSAweDIwQUM6Ci0g ICAgICAgIHJldHVybigoQ0hBUikoMHg4MCAmIDB4ZmYpKTsgICAgLyogRVVSTyBTSUdOICovCi0g ICAgICBjYXNlIDB4MDY3RToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDgxICYgMHhmZikpOyAg ICAvKiBBUkFCSUMgTEVUVEVSIFBFSCAqLwotICAgICAgY2FzZSAweDIwMUE6Ci0gICAgICAgIHJl dHVybigoQ0hBUikoMHg4MiAmIDB4ZmYpKTsgICAgLyogU0lOR0xFIExPVy05IFFVT1RBVElPTiBN QVJLICovCi0gICAgICBjYXNlIDB4MDE5MjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDgzICYg MHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgRiBXSVRIIEhPT0sgKi8KLSAgICAgIGNh c2UgMHgyMDFFOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4ODQgJiAweGZmKSk7ICAgIC8qIERP VUJMRSBMT1ctOSBRVU9UQVRJT04gTUFSSyAqLwotICAgICAgY2FzZSAweDIwMjY6Ci0gICAgICAg IHJldHVybigoQ0hBUikoMHg4NSAmIDB4ZmYpKTsgICAgLyogSE9SSVpPTlRBTCBFTExJUFNJUyAq LwotICAgICAgY2FzZSAweDIwMjA6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg4NiAmIDB4ZmYp KTsgICAgLyogREFHR0VSICovCi0gICAgICBjYXNlIDB4MjAyMToKLSAgICAgICAgcmV0dXJuKChD SEFSKSgweDg3ICYgMHhmZikpOyAgICAvKiBET1VCTEUgREFHR0VSICovCi0gICAgICBjYXNlIDB4 MDJDNjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDg4ICYgMHhmZikpOyAgICAvKiBNT0RJRklF UiBMRVRURVIgQ0lSQ1VNRkxFWCBBQ0NFTlQgKi8KLSAgICAgIGNhc2UgMHgyMDMwOgotICAgICAg ICByZXR1cm4oKENIQVIpKDB4ODkgJiAweGZmKSk7ICAgIC8qIFBFUiBNSUxMRSBTSUdOICovCi0g ICAgICBjYXNlIDB4MjAzOToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDhCICYgMHhmZikpOyAg ICAvKiBTSU5HTEUgTEVGVC1QT0lOVElORyBBTkdMRSBRVU9URSAqLwotICAgICAgY2FzZSAweDAx NTI6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg4QyAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQ SVRBTCBMSUdBVFVSRSBPRSAqLwotICAgICAgY2FzZSAweDA2ODY6Ci0gICAgICAgIHJldHVybigo Q0hBUikoMHg4RCAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExFVFRFUiBUQ0hFSCAqLwotICAgICAg Y2FzZSAweDA2OTg6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg4RSAmIDB4ZmYpKTsgICAgLyog QVJBQklDIExFVFRFUiBKRUggKi8KLSAgICAgIGNhc2UgMHgwNkFGOgotICAgICAgICByZXR1cm4o KENIQVIpKDB4OTAgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMRVRURVIgR0FGICovCi0gICAgICBj YXNlIDB4MjAxODoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDkxICYgMHhmZikpOyAgICAvKiBM RUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSSyAqLwotICAgICAgY2FzZSAweDIwMTk6Ci0gICAgICAg IHJldHVybigoQ0hBUikoMHg5MiAmIDB4ZmYpKTsgICAgLyogUklHSFQgU0lOR0xFIFFVT1RBVElP TiBNQVJLICovCi0gICAgICBjYXNlIDB4MjAxQzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDkz ICYgMHhmZikpOyAgICAvKiBMRUZUIERPVUJMRSBRVU9UQVRJT04gTUFSSyAqLwotICAgICAgY2Fz ZSAweDIwMUQ6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg5NCAmIDB4ZmYpKTsgICAgLyogUklH SFQgRE9VQkxFIFFVT1RBVElPTiBNQVJLICovCi0gICAgICBjYXNlIDB4MjAyMjoKLSAgICAgICAg cmV0dXJuKChDSEFSKSgweDk1ICYgMHhmZikpOyAgICAvKiBCVUxMRVQgKi8KLSAgICAgIGNhc2Ug MHgyMDEzOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4OTYgJiAweGZmKSk7ICAgIC8qIEVOIERB U0ggKi8KLSAgICAgIGNhc2UgMHgyMDE0OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4OTcgJiAw eGZmKSk7ICAgIC8qIEVNIERBU0ggKi8KLSAgICAgIGNhc2UgMHgyMTIyOgotICAgICAgICByZXR1 cm4oKENIQVIpKDB4OTkgJiAweGZmKSk7ICAgIC8qIFRSQURFIE1BUksgU0lHTiAqLwotICAgICAg Y2FzZSAweDIwM0E6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg5QiAmIDB4ZmYpKTsgICAgLyog U0lOR0xFIFJJR0hULVBPSU5USU5HIEFOR0xFIFFVT1RFICovCi0gICAgICBjYXNlIDB4MDE1MzoK LSAgICAgICAgcmV0dXJuKChDSEFSKSgweDlDICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBM SUdBVFVSRSBPRSAqLwotICAgICAgY2FzZSAweDIwMEM6Ci0gICAgICAgIHJldHVybigoQ0hBUiko MHg5RCAmIDB4ZmYpKTsgICAgLyogWkVSTyBXSURUSCBOT04tSk9JTkVSICovCi0gICAgICBjYXNl IDB4MjAwRDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDlFICYgMHhmZikpOyAgICAvKiBaRVJP IFdJRFRIIEpPSU5FUiAqLwotICAgICAgY2FzZSAweDAwQTA6Ci0gICAgICAgIHJldHVybigoQ0hB UikoMHhBMCAmIDB4ZmYpKTsgICAgLyogTk8tQlJFQUsgU1BBQ0UgKi8KLSAgICAgIGNhc2UgMHgw NjBDOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QTEgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBD T01NQSAqLwotICAgICAgY2FzZSAweDAwQTI6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhBMiAm IDB4ZmYpKTsgICAgLyogQ0VOVCBTSUdOICovCi0gICAgICBjYXNlIDB4MDBBMzoKLSAgICAgICAg cmV0dXJuKChDSEFSKSgweEEzICYgMHhmZikpOyAgICAvKiBQT1VORCBTSUdOICovCi0gICAgICBj YXNlIDB4MDBBNDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEE0ICYgMHhmZikpOyAgICAvKiBD VVJSRU5DWSBTSUdOICovCi0gICAgICBjYXNlIDB4MDBBNToKLSAgICAgICAgcmV0dXJuKChDSEFS KSgweEE1ICYgMHhmZikpOyAgICAvKiBZRU4gU0lHTiAqLwotICAgICAgY2FzZSAweDAwQTY6Ci0g ICAgICAgIHJldHVybigoQ0hBUikoMHhBNiAmIDB4ZmYpKTsgICAgLyogQlJPS0VOIEJBUiAqLwot ICAgICAgY2FzZSAweDAwQTc6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhBNyAmIDB4ZmYpKTsg ICAgLyogU0VDVElPTiBTSUdOICovCi0gICAgICBjYXNlIDB4MDBBODoKLSAgICAgICAgcmV0dXJu KChDSEFSKSgweEE4ICYgMHhmZikpOyAgICAvKiBESUFFUkVTSVMgKi8KLSAgICAgIGNhc2UgMHgw MEE5OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QTkgJiAweGZmKSk7ICAgIC8qIENPUFlSSUdI VCBTSUdOICovCi0gICAgICBjYXNlIDB4MDBBQjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEFC ICYgMHhmZikpOyAgICAvKiBMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9URSAqLwotICAg ICAgY2FzZSAweDAwQUM6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhBQyAmIDB4ZmYpKTsgICAg LyogTk9UIFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMEFEOgotICAgICAgICByZXR1cm4oKENIQVIp KDB4QUQgJiAweGZmKSk7ICAgIC8qIFNPRlQgSFlQSEVOICovCi0gICAgICBjYXNlIDB4MDBBRToK LSAgICAgICAgcmV0dXJuKChDSEFSKSgweEFFICYgMHhmZikpOyAgICAvKiBSRUdJU1RFUkVEIFNJ R04gKi8KLSAgICAgIGNhc2UgMHgwMEFGOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QUYgJiAw eGZmKSk7ICAgIC8qIE1BQ1JPTiAqLwotICAgICAgY2FzZSAweDAwQjA6Ci0gICAgICAgIHJldHVy bigoQ0hBUikoMHhCMCAmIDB4ZmYpKTsgICAgLyogREVHUkVFIFNJR04gKi8KLSAgICAgIGNhc2Ug MHgwMEIxOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QjEgJiAweGZmKSk7ICAgIC8qIFBMVVMt TUlOVVMgU0lHTiAqLwotICAgICAgY2FzZSAweDAwQjI6Ci0gICAgICAgIHJldHVybigoQ0hBUiko MHhCMiAmIDB4ZmYpKTsgICAgLyogU1VQRVJTQ1JJUFQgVFdPICovCi0gICAgICBjYXNlIDB4MDBC MzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEIzICYgMHhmZikpOyAgICAvKiBTVVBFUlNDUklQ VCBUSFJFRSAqLwotICAgICAgY2FzZSAweDAwQjQ6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhC NCAmIDB4ZmYpKTsgICAgLyogQUNVVEUgQUNDRU5UICovCi0gICAgICBjYXNlIDB4MDBCNToKLSAg ICAgICAgcmV0dXJuKChDSEFSKSgweEI1ICYgMHhmZikpOyAgICAvKiBNSUNSTyBTSUdOICovCi0g ICAgICBjYXNlIDB4MDBCNjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEI2ICYgMHhmZikpOyAg ICAvKiBQSUxDUk9XIFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMEI3OgotICAgICAgICByZXR1cm4o KENIQVIpKDB4QjcgJiAweGZmKSk7ICAgIC8qIE1JRERMRSBET1QgKi8KLSAgICAgIGNhc2UgMHgw MEI4OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QjggJiAweGZmKSk7ICAgIC8qIENFRElMTEEg Ki8KLSAgICAgIGNhc2UgMHgwMEI5OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QjkgJiAweGZm KSk7ICAgIC8qIFNVUEVSU0NSSVBUIE9ORSAqLwotICAgICAgY2FzZSAweDA2MUI6Ci0gICAgICAg IHJldHVybigoQ0hBUikoMHhCQSAmIDB4ZmYpKTsgICAgLyogQVJBQklDIFNFTUlDT0xPTiAqLwot ICAgICAgY2FzZSAweDAwQkI6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhCQiAmIDB4ZmYpKTsg ICAgLyogUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RFICovCi0gICAgICBjYXNlIDB4 MDBCQzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEJDICYgMHhmZikpOyAgICAvKiBWVUxHQVIg RlJBQ1RJT04gT05FIFFVQVJURVIgKi8KLSAgICAgIGNhc2UgMHgwMEJEOgotICAgICAgICByZXR1 cm4oKENIQVIpKDB4QkQgJiAweGZmKSk7ICAgIC8qIFZVTEdBUiBGUkFDVElPTiBPTkUgSEFMRiAq LwotICAgICAgY2FzZSAweDAwQkU6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhCRSAmIDB4ZmYp KTsgICAgLyogVlVMR0FSIEZSQUNUSU9OIFRIUkVFIFFVQVJURVJTICovCi0gICAgICBjYXNlIDB4 MDYxRjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEJGICYgMHhmZikpOyAgICAvKiBBUkFCSUMg UVVFU1RJT04gTUFSSyAqLwotICAgICAgY2FzZSAweDA2MjE6Ci0gICAgICAgIHJldHVybigoQ0hB UikoMHhDMSAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExFVFRFUiBIQU1aQSAqLwotICAgICAgY2Fz ZSAweDA2MjI6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhDMiAmIDB4ZmYpKTsgICAgLyogQVJB QklDIExUUi4gQUxFRiBXSVRIIE1BRERBIEFCT1ZFICovCi0gICAgICBjYXNlIDB4MDYyMzoKLSAg ICAgICAgcmV0dXJuKChDSEFSKSgweEMzICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTFRSLiBBTEVG IFdJVEggSEFNWkEgQUJPVkUgKi8KLSAgICAgIGNhc2UgMHgwNjI0OgotICAgICAgICByZXR1cm4o KENIQVIpKDB4QzQgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMVFIuIFdBVyBXSVRIIEhBTVpBIEFC T1ZFICovCi0gICAgICBjYXNlIDB4MDYyNToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEM1ICYg MHhmZikpOyAgICAvKiBBUkFCSUMgTFRSLiBBTEVGIFdJVEggSEFNWkEgQkVMT1cgKi8KLSAgICAg IGNhc2UgMHgwNjI2OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QzYgJiAweGZmKSk7ICAgIC8q IEFSQUJJQyBMVFIuIFlFSCBXSVRIIEhBTVpBIEFCT1ZFICovCi0gICAgICBjYXNlIDB4MDYyNzoK LSAgICAgICAgcmV0dXJuKChDSEFSKSgweEM3ICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTFRSLiBB TEVGICovCi0gICAgICBjYXNlIDB4MDYyODoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEM4ICYg MHhmZikpOyAgICAvKiBBUkFCSUMgTFRSLiBCRUggKi8KLSAgICAgIGNhc2UgMHgwNjI5OgotICAg ICAgICByZXR1cm4oKENIQVIpKDB4QzkgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMRVRURVIgVEVI IE1BUkJVVEEgKi8KLSAgICAgIGNhc2UgMHgwNjJBOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4 Q0EgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMRVRURVIgVEVIICovCi0gICAgICBjYXNlIDB4MDYy QjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweENCICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVU VEVSIFRIRUggKi8KLSAgICAgIGNhc2UgMHgwNjJDOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4 Q0MgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMRVRURVIgSkVFTSAqLwotICAgICAgY2FzZSAweDA2 MkQ6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhDRCAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExF VFRFUiBIQUggKi8KLSAgICAgIGNhc2UgMHgwNjJFOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4 Q0UgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMRVRURVIgS0hBSCAqLwotICAgICAgY2FzZSAweDA2 MkY6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhDRiAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExF VFRFUiBEQUwgKi8KLSAgICAgIGNhc2UgMHgwNjMwOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4 RDAgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMRVRURVIgVEhBTCAqLwotICAgICAgY2FzZSAweDA2 MzE6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhEMSAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExF VFRFUiBSRUggKi8KLSAgICAgIGNhc2UgMHgwNjMyOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4 RDIgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMRVRURVIgWkFJTiAqLwotICAgICAgY2FzZSAweDA2 MzM6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhEMyAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExF VFRFUiBTRUVOICovCi0gICAgICBjYXNlIDB4MDYzNDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgw eEQ0ICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVUVEVSIFNIRUVOICovCi0gICAgICBjYXNlIDB4 MDYzNToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEQ1ICYgMHhmZikpOyAgICAvKiBBUkFCSUMg TEVUVEVSIFNBRCAqLwotICAgICAgY2FzZSAweDA2MzY6Ci0gICAgICAgIHJldHVybigoQ0hBUiko MHhENiAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExFVFRFUiBEQUQgKi8KLSAgICAgIGNhc2UgMHgw MEQ3OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RDcgJiAweGZmKSk7ICAgIC8qIE1VTFRJUExJ Q0FUSU9OIFNJR04gKi8KLSAgICAgIGNhc2UgMHgwNjM3OgotICAgICAgICByZXR1cm4oKENIQVIp KDB4RDggJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMRVRURVIgVEFIICovCi0gICAgICBjYXNlIDB4 MDYzODoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEQ5ICYgMHhmZikpOyAgICAvKiBBUkFCSUMg TEVUVEVSIFpBSCAqLwotICAgICAgY2FzZSAweDA2Mzk6Ci0gICAgICAgIHJldHVybigoQ0hBUiko MHhEQSAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExFVFRFUiBBSU4gKi8KLSAgICAgIGNhc2UgMHgw NjNBOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4REIgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBM RVRURVIgR0hBSU4gKi8KLSAgICAgIGNhc2UgMHgwNjQwOgotICAgICAgICByZXR1cm4oKENIQVIp KDB4REMgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBUQVRXRUVMICovCi0gICAgICBjYXNlIDB4MDY0 MToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEREICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVU VEVSIEZFSCAqLwotICAgICAgY2FzZSAweDA2NDI6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhE RSAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExFVFRFUiBRQUYgKi8KLSAgICAgIGNhc2UgMHgwNjQz OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4REYgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMRVRU RVIgS0FGICovCi0gICAgICBjYXNlIDB4MDBFMDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEUw ICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEdSQVZFICovCi0gICAg ICBjYXNlIDB4MDY0NDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEUxICYgMHhmZikpOyAgICAv KiBBUkFCSUMgTEVUVEVSIExBTSAqLwotICAgICAgY2FzZSAweDAwRTI6Ci0gICAgICAgIHJldHVy bigoQ0hBUikoMHhFMiAmIDB4ZmYpKTsgICAgLyogU01BTEwgTEVUVEVSIEEgV0lUSCBDSVJDVU1G TEVYICovCi0gICAgICBjYXNlIDB4MDY0NToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEUzICYg MHhmZikpOyAgICAvKiBBUkFCSUMgTEVUVEVSIE1FRU0gKi8KLSAgICAgIGNhc2UgMHgwNjQ2Ogot ICAgICAgICByZXR1cm4oKENIQVIpKDB4RTQgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMRVRURVIg Tk9PTiAqLwotICAgICAgY2FzZSAweDA2NDc6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhFNSAm IDB4ZmYpKTsgICAgLyogQVJBQklDIExFVFRFUiBIRUggKi8KLSAgICAgIGNhc2UgMHgwNjQ4Ogot ICAgICAgICByZXR1cm4oKENIQVIpKDB4RTYgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMRVRURVIg V0FXICovCi0gICAgICBjYXNlIDB4MDBFNzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEU3ICYg MHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIENFRElMTEEgKi8KLSAgICAg IGNhc2UgMHgwMEU4OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RTggJiAweGZmKSk7ICAgIC8q IExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggR1JBVkUgKi8KLSAgICAgIGNhc2UgMHgwMEU5Ogot ICAgICAgICByZXR1cm4oKENIQVIpKDB4RTkgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExF VFRFUiBFIFdJVEggQUNVVEUgKi8KLSAgICAgIGNhc2UgMHgwMEVBOgotICAgICAgICByZXR1cm4o KENIQVIpKDB4RUEgJiAweGZmKSk7ICAgIC8qIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxF WCAqLwotICAgICAgY2FzZSAweDAwRUI6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhFQiAmIDB4 ZmYpKTsgICAgLyogU01BTEwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVMgKi8KLSAgICAgIGNhc2Ug MHgwNjQ5OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RUMgJiAweGZmKSk7ICAgIC8qIEFSQUJJ QyBMRVRURVIgQUxFRiBNQUtTVVJBICovCi0gICAgICBjYXNlIDB4MDY0QToKLSAgICAgICAgcmV0 dXJuKChDSEFSKSgweEVEICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVUVEVSIFlFSCAqLwotICAg ICAgY2FzZSAweDAwRUU6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhFRSAmIDB4ZmYpKTsgICAg LyogU01BTEwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYICovCi0gICAgICBjYXNlIDB4MDBFRjoK LSAgICAgICAgcmV0dXJuKChDSEFSKSgweEVGICYgMHhmZikpOyAgICAvKiBTTUFMTCBMRVRURVIg SSBXSVRIIERJQUVSRVNJUyAqLwotICAgICAgY2FzZSAweDA2NEI6Ci0gICAgICAgIHJldHVybigo Q0hBUikoMHhGMCAmIDB4ZmYpKTsgICAgLyogQVJBQklDIEZBVEhBVEFOICovCi0gICAgICBjYXNl IDB4MDY0QzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEYxICYgMHhmZikpOyAgICAvKiBBUkFC SUMgREFNTUFUQU4gKi8KLSAgICAgIGNhc2UgMHgwNjREOgotICAgICAgICByZXR1cm4oKENIQVIp KDB4RjIgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBLQVNSQVRBTiAqLwotICAgICAgY2FzZSAweDA2 NEU6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhGMyAmIDB4ZmYpKTsgICAgLyogQVJBQklDIEZB VEhBICovCi0gICAgICBjYXNlIDB4MDBGNDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEY0ICYg MHhmZikpOyAgICAvKiBTTUFMTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVggKi8KLSAgICAgIGNh c2UgMHgwNjRGOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RjUgJiAweGZmKSk7ICAgIC8qIEFS QUJJQyBEQU1NQSAqLwotICAgICAgY2FzZSAweDA2NTA6Ci0gICAgICAgIHJldHVybigoQ0hBUiko MHhGNiAmIDB4ZmYpKTsgICAgLyogQVJBQklDIEtBU1JBICovCi0gICAgICBjYXNlIDB4MDBGNzoK LSAgICAgICAgcmV0dXJuKChDSEFSKSgweEY3ICYgMHhmZikpOyAgICAvKiBESVZJU0lPTiBTSUdO ICovCi0gICAgICBjYXNlIDB4MDY1MToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEY4ICYgMHhm ZikpOyAgICAvKiBBUkFCSUMgU0hBRERBICovCi0gICAgICBjYXNlIDB4MDBGOToKLSAgICAgICAg cmV0dXJuKChDSEFSKSgweEY5ICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgVSBX SVRIIEdSQVZFICovCi0gICAgICBjYXNlIDB4MDY1MjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgw eEZBICYgMHhmZikpOyAgICAvKiBBUkFCSUMgU1VLVU4gKi8KLSAgICAgIGNhc2UgMHgwMEZCOgot ICAgICAgICByZXR1cm4oKENIQVIpKDB4RkIgJiAweGZmKSk7ICAgIC8qIFNNQUxMIExFVFRFUiBV IFdJVEggQ0lSQ1VNRkxFWCAqLwotICAgICAgY2FzZSAweDAwRkM6Ci0gICAgICAgIHJldHVybigo Q0hBUikoMHhGQyAmIDB4ZmYpKTsgICAgLyogU01BTEwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVMg Ki8KLSAgICAgIGNhc2UgMHgyMDBFOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RkQgJiAweGZm KSk7ICAgIC8qIExFRlQtVE8tUklHSFQgTUFSSyAqLwotICAgICAgY2FzZSAweDIwMEY6Ci0gICAg ICAgIHJldHVybigoQ0hBUikoMHhGRSAmIDB4ZmYpKTsgICAgLyogUklHSFQtVE8tTEVGVCBNQVJL ICovCi0gICAgICBkZWZhdWx0OiByZXR1cm4oMHgwMDNmKTsKLSAgICB9Ci19Ci0KLWludCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXaW5kb3dzIENvZGUgUGFnZSAxMjU3 IChMYXRpbi00KSAqLwotI2lmZGVmIENLX0FOU0lDCi10eF9jcDEyNTcoVVNIT1JUIGMpCi0jZWxz ZQotdHhfY3AxMjU3KGMpIFVTSE9SVCBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAg aWYgKGMgPCAweDgwKQotICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOwotICAgIHN3aXRj aCAoYykgewotICAgICAgY2FzZSAweDAwM2M6IHJldHVybigoQ0hBUikoMHg4YiAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMDNlOiByZXR1cm4oKENIQVIpKDB4OWIgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDBBMDogcmV0dXJuKChDSEFSKSgweGEwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw QTI6IHJldHVybigoQ0hBUikoMHhhMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEEzOiByZXR1 cm4oKENIQVIpKDB4YTMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBBNDogcmV0dXJuKChDSEFS KSgweGE0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQTY6IHJldHVybigoQ0hBUikoMHhhNiAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEE3OiByZXR1cm4oKENIQVIpKDB4YTcgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDBBOTogcmV0dXJuKChDSEFSKSgweGE5ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwQUI6IHJldHVybigoQ0hBUikoMHhhYiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MEFDOiByZXR1cm4oKENIQVIpKDB4YWMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBBRDogcmV0 dXJuKChDSEFSKSgweGFkICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQUU6IHJldHVybigoQ0hB UikoMHhhZSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEIwOiByZXR1cm4oKENIQVIpKDB4YjAg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBCMTogcmV0dXJuKChDSEFSKSgweGIxICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwQjI6IHJldHVybigoQ0hBUikoMHhiMiAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMEIzOiByZXR1cm4oKENIQVIpKDB4YjMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDBCNTogcmV0dXJuKChDSEFSKSgweGI1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQjY6IHJl dHVybigoQ0hBUikoMHhiNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEI3OiByZXR1cm4oKENI QVIpKDB4YjcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBCOTogcmV0dXJuKChDSEFSKSgweGI5 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQkI6IHJldHVybigoQ0hBUikoMHhiYiAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMEJDOiByZXR1cm4oKENIQVIpKDB4YmMgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDBCRDogcmV0dXJuKChDSEFSKSgweGJkICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwQkU6IHJldHVybigoQ0hBUikoMHhiZSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEM0OiBy ZXR1cm4oKENIQVIpKDB4YzQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBDNTogcmV0dXJuKChD SEFSKSgweGM1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzY6IHJldHVybigoQ0hBUikoMHhh ZiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEM5OiByZXR1cm4oKENIQVIpKDB4YzkgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDBkMzogcmV0dXJuKChDSEFSKSgweGQzICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwRDU6IHJldHVybigoQ0hBUikoMHhkNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMEQ2OiByZXR1cm4oKENIQVIpKDB4ZDYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBENzog cmV0dXJuKChDSEFSKSgweGQ3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDg6IHJldHVybigo Q0hBUikoMHhhOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMERDOiByZXR1cm4oKENIQVIpKDB4 ZGMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBERjogcmV0dXJuKChDSEFSKSgweGRmICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwRTQ6IHJldHVybigoQ0hBUikoMHhlNCAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMEU1OiByZXR1cm4oKENIQVIpKDB4ZTUgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDBlNjogcmV0dXJuKChDSEFSKSgweGJmICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwRTk6 IHJldHVybigoQ0hBUikoMHhlOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGYzOiByZXR1cm4o KENIQVIpKDB4ZjMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBGNTogcmV0dXJuKChDSEFSKSgw eGY1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwRjY6IHJldHVybigoQ0hBUikoMHhmNiAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEY3OiByZXR1cm4oKENIQVIpKDB4ZjcgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDBmODogcmV0dXJuKChDSEFSKSgweGI4ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwZmM6IHJldHVybigoQ0hBUikoMHhmYyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTAw OiByZXR1cm4oKENIQVIpKDB4YzIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDEwMTogcmV0dXJu KChDSEFSKSgweGUyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxMDQ6IHJldHVybigoQ0hBUiko MHhjMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTA1OiByZXR1cm4oKENIQVIpKDB4ZTAgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDEwNjogcmV0dXJuKChDSEFSKSgweGMzICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAxMDc6IHJldHVybigoQ0hBUikoMHhlMyAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMTBDOiByZXR1cm4oKENIQVIpKDB4YzggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDEw RDogcmV0dXJuKChDSEFSKSgweGU4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxMTI6IHJldHVy bigoQ0hBUikoMHhjNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTEzOiByZXR1cm4oKENIQVIp KDB4ZTcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDExNjogcmV0dXJuKChDSEFSKSgweGNiICYg MHhmZikpOwotICAgICAgY2FzZSAweDAxMTc6IHJldHVybigoQ0hBUikoMHhlYiAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMTE4OiByZXR1cm4oKENIQVIpKDB4YzYgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDExOTogcmV0dXJuKChDSEFSKSgweGU2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAx MjI6IHJldHVybigoQ0hBUikoMHhjYyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTIzOiByZXR1 cm4oKENIQVIpKDB4ZWMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDEyYTogcmV0dXJuKChDSEFS KSgweGNlICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxMmI6IHJldHVybigoQ0hBUikoMHhlZSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTJlOiByZXR1cm4oKENIQVIpKDB4YzEgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDEyZjogcmV0dXJuKChDSEFSKSgweGUxICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAxMzY6IHJldHVybigoQ0hBUikoMHhjZCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MTM3OiByZXR1cm4oKENIQVIpKDB4ZWQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDEzYzogcmV0 dXJuKChDSEFSKSgweGVmICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxNDE6IHJldHVybigoQ0hB UikoMHhkOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTQyOiByZXR1cm4oKENIQVIpKDB4Zjkg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE0MzogcmV0dXJuKChDSEFSKSgweGQxICYgMHhmZikp OwotICAgICAgY2FzZSAweDAxNDQ6IHJldHVybigoQ0hBUikoMHhmMSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMTQ1OiByZXR1cm4oKENIQVIpKDB4ZDIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDE0NjogcmV0dXJuKChDSEFSKSgweGYyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxNGM6IHJl dHVybigoQ0hBUikoMHhkNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTRkOiByZXR1cm4oKENI QVIpKDB4ZjQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE1NjogcmV0dXJuKChDSEFSKSgweGFh ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxNTc6IHJldHVybigoQ0hBUikoMHhiYSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMTVBOiByZXR1cm4oKENIQVIpKDB4ZGEgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDE1YjogcmV0dXJuKChDSEFSKSgweGZhICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAxNjA6IHJldHVybigoQ0hBUikoMHhkMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTYxOiBy ZXR1cm4oKENIQVIpKDB4ZjAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE2YTogcmV0dXJuKChD SEFSKSgweGRiICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxNmI6IHJldHVybigoQ0hBUikoMHhm YiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTcyOiByZXR1cm4oKENIQVIpKDB4ZDggJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDE3MzogcmV0dXJuKChDSEFSKSgweGY4ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAxNzk6IHJldHVybigoQ0hBUikoMHhjYSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMTdhOiByZXR1cm4oKENIQVIpKDB4ZWEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE3Yjog cmV0dXJuKChDSEFSKSgweGRkICYgMHhmZikpOwotICAgICAgY2FzZSAweDAxN2M6IHJldHVybigo Q0hBUikoMHhmZCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTdkOiByZXR1cm4oKENIQVIpKDB4 ZGUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE3ZTogcmV0dXJuKChDSEFSKSgweGZlICYgMHhm ZikpOwotICAgICAgY2FzZSAweDIwMTI6IHJldHVybigoQ0hBUikoMHg5NiAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgyMDE0OiByZXR1cm4oKENIQVIpKDB4OTcgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MjAxODogcmV0dXJuKChDSEFSKSgweDkxICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMTk6 IHJldHVybigoQ0hBUikoMHg5MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDFhOiByZXR1cm4o KENIQVIpKDB4ODIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjAxYzogcmV0dXJuKChDSEFSKSgw eDkzICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMWQ6IHJldHVybigoQ0hBUikoMHg5NCAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDFlOiByZXR1cm4oKENIQVIpKDB4ODQgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MjAyMDogcmV0dXJuKChDSEFSKSgweDg2ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDIwMjE6IHJldHVybigoQ0hBUikoMHg4NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDIy OiByZXR1cm4oKENIQVIpKDB4OTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjAyNjogcmV0dXJu KChDSEFSKSgweDg1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMzE6IHJldHVybigoQ0hBUiko MHg4OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMEFDOiAgICAgICAgICAgICAgICAgICAgICAv KiBFdXJvICovCi0gICAgICAgICAgcmV0dXJuKChDSEFSKSgweDgwICYgMHhmZikpOwotICAgICAg Y2FzZSAweDIxMjI6IHJldHVybigoQ0hBUikoMHg5OSAmIDB4ZmYpKTsKLSAgICAgIGRlZmF1bHQ6 IHJldHVybigweDAwM2YpOwotICAgIH0KLX0KLQotaW50ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFdpbmRvd3MgQ29kZSBQYWdlIDEyNTggKFZpZXQgTmFtKSAqLwotI2lm ZGVmIENLX0FOU0lDCi10eF9jcDEyNTgoVVNIT1JUIGMpCi0jZWxzZQotdHhfY3AxMjU4KGMpIFVT SE9SVCBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgaWYgKGMgPCAweDgwKSAgICAg ICAgICAgICAgICAgICAgICAgLyogSGFzIEMxIGdyYXBoaWNzICovCi0gICAgICByZXR1cm4oKENI QVIpKGMgJiAweGZmKSk7Ci0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBjYXNlIDB4MjBBQzoKLSAg ICAgICAgcmV0dXJuKChDSEFSKSgweDgwICYgMHhmZikpOyAgICAvKiBFVVJPIFNJR04gKi8KLSAg ICAgIGNhc2UgMHgyMDFBOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4ODIgJiAweGZmKSk7ICAg IC8qIFNJTkdMRSBMT1ctOSBRVU9UQVRJT04gTUFSSyAqLwotICAgICAgY2FzZSAweDAxOTI6Ci0g ICAgICAgIHJldHVybigoQ0hBUikoMHg4MyAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVU VEVSIEYgV0lUSCBIT09LICovCi0gICAgICBjYXNlIDB4MjAxRToKLSAgICAgICAgcmV0dXJuKChD SEFSKSgweDg0ICYgMHhmZikpOyAgICAvKiBET1VCTEUgTE9XLTkgUVVPVEFUSU9OIE1BUksgKi8K LSAgICAgIGNhc2UgMHgyMDI2OiByZXR1cm4oKENIQVIpKDB4ODUgJiAweGZmKSk7IC8qIEhPUkla T05UQUwgRUxMSVBTSVMgKi8KLSAgICAgIGNhc2UgMHgyMDIwOiByZXR1cm4oKENIQVIpKDB4ODYg JiAweGZmKSk7IC8qIERBR0dFUiAqLwotICAgICAgY2FzZSAweDIwMjE6IHJldHVybigoQ0hBUiko MHg4NyAmIDB4ZmYpKTsgLyogRE9VQkxFIERBR0dFUiAqLwotICAgICAgY2FzZSAweDAyQzY6Ci0g ICAgICAgIHJldHVybigoQ0hBUikoMHg4OCAmIDB4ZmYpKTsgICAgLyogTU9ESUZJRVIgTEVUVEVS IENJUkNVTUZMRVggQUNDRU5UICovCi0gICAgICBjYXNlIDB4MjAzMDogcmV0dXJuKChDSEFSKSgw eDg5ICYgMHhmZikpOyAvKiBQRVIgTUlMTEUgU0lHTiAqLwotICAgICAgY2FzZSAweDIwMzk6Ci0g ICAgICAgIHJldHVybigoQ0hBUikoMHg4QiAmIDB4ZmYpKTsgICAgLyogU0lOR0xFIExFRlQgQU5H TEUgUVVPVEFUSU9OIE1BUksgKi8KLSAgICAgIGNhc2UgMHgwMTUyOiByZXR1cm4oKENIQVIpKDB4 OEMgJiAweGZmKSk7IC8qIExBVElOIENBUElUQUwgTElHQVRVUkUgT0UgKi8KLSAgICAgIGNhc2Ug MHgyMDE4OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4OTEgJiAweGZmKSk7ICAgIC8qIExFRlQg U0lOR0xFIFFVT1RBVElPTiBNQVJLICovCi0gICAgICBjYXNlIDB4MjAxOToKLSAgICAgICAgcmV0 dXJuKChDSEFSKSgweDkyICYgMHhmZikpOyAgICAvKiBSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1B UksgKi8KLSAgICAgIGNhc2UgMHgyMDFDOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4OTMgJiAw eGZmKSk7ICAgIC8qIExFRlQgRE9VQkxFIFFVT1RBVElPTiBNQVJLICovCi0gICAgICBjYXNlIDB4 MjAxRDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDk0ICYgMHhmZikpOyAgICAvKiBSSUdIVCBE T1VCTEUgUVVPVEFUSU9OIE1BUksgKi8KLSAgICAgIGNhc2UgMHgyMDIyOgotICAgICAgICByZXR1 cm4oKENIQVIpKDB4OTUgJiAweGZmKSk7ICAgIC8qIEJVTExFVCAqLwotICAgICAgY2FzZSAweDIw MTM6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg5NiAmIDB4ZmYpKTsgICAgLyogRU4gREFTSCAq LwotICAgICAgY2FzZSAweDIwMTQ6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg5NyAmIDB4ZmYp KTsgICAgLyogRU0gREFTSCAqLwotICAgICAgY2FzZSAweDAyREM6Ci0gICAgICAgIHJldHVybigo Q0hBUikoMHg5OCAmIDB4ZmYpKTsgICAgLyogU01BTEwgVElMREUgKi8KLSAgICAgIGNhc2UgMHgy MTIyOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4OTkgJiAweGZmKSk7ICAgIC8qIFRSQURFIE1B UksgU0lHTiAqLwotICAgICAgY2FzZSAweDIwM0E6Ci0gICAgICAgIC8qIFNJTkdMRSBSSUdIVC1Q T0lOVElORyBBTkdMRSBRVU9UQVRJT04gTUFSIEsqLwotICAgICAgICByZXR1cm4oKENIQVIpKDB4 OUIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE1MzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgw eDlDICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMSUdBVFVSRSBPRSAqLwotICAgICAgY2Fz ZSAweDAxNzg6Ci0gICAgICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIFkgV0lUSCBESUFFUkVT SVMgKi8KLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDlGICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwQTA6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhBMCAmIDB4ZmYpKTsgICAgLyogTk8tQlJF QUsgU1BBQ0UgKi8KLSAgICAgIGNhc2UgMHgwMEExOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4 QTEgJiAweGZmKSk7ICAgIC8qIElOVkVSVEVEIEVYQ0xBTUFUSU9OIE1BUksgKi8KLSAgICAgIGNh c2UgMHgwMEEyOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QTIgJiAweGZmKSk7ICAgIC8qIENF TlQgU0lHTiAqLwotICAgICAgY2FzZSAweDAwQTM6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhB MyAmIDB4ZmYpKTsgICAgLyogUE9VTkQgU0lHTiAqLwotICAgICAgY2FzZSAweDAwQTQ6Ci0gICAg ICAgIHJldHVybigoQ0hBUikoMHhBNCAmIDB4ZmYpKTsgICAgLyogQ1VSUkVOQ1kgU0lHTiAqLwot ICAgICAgY2FzZSAweDAwQTU6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhBNSAmIDB4ZmYpKTsg ICAgLyogWUVOIFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMEE2OgotICAgICAgICByZXR1cm4oKENI QVIpKDB4QTYgJiAweGZmKSk7ICAgIC8qIEJST0tFTiBCQVIgKi8KLSAgICAgIGNhc2UgMHgwMEE3 OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QTcgJiAweGZmKSk7ICAgIC8qIFNFQ1RJT04gU0lH TiAqLwotICAgICAgY2FzZSAweDAwQTg6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhBOCAmIDB4 ZmYpKTsgICAgLyogRElBRVJFU0lTICovCi0gICAgICBjYXNlIDB4MDBBOToKLSAgICAgICAgcmV0 dXJuKChDSEFSKSgweEE5ICYgMHhmZikpOyAgICAvKiBDT1BZUklHSFQgU0lHTiAqLwotICAgICAg Y2FzZSAweDAwQUE6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhBQSAmIDB4ZmYpKTsgICAgLyog RkVNSU5JTkUgT1JESU5BTCBJTkRJQ0FUT1IgKi8KLSAgICAgIGNhc2UgMHgwMEFCOgotICAgICAg ICAvKiBMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSSyAqLwotICAgICAg ICByZXR1cm4oKENIQVIpKDB4QUIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBBQzoKLSAgICAg ICAgcmV0dXJuKChDSEFSKSgweEFDICYgMHhmZikpOyAgICAvKiBOT1QgU0lHTiAqLwotICAgICAg Y2FzZSAweDAwQUQ6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhBRCAmIDB4ZmYpKTsgICAgLyog U09GVCBIWVBIRU4gKi8KLSAgICAgIGNhc2UgMHgwMEFFOgotICAgICAgICByZXR1cm4oKENIQVIp KDB4QUUgJiAweGZmKSk7ICAgIC8qIFJFR0lTVEVSRUQgU0lHTiAqLwotICAgICAgY2FzZSAweDAw QUY6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhBRiAmIDB4ZmYpKTsgICAgLyogTUFDUk9OICov Ci0gICAgICBjYXNlIDB4MDBCMDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEIwICYgMHhmZikp OyAgICAvKiBERUdSRUUgU0lHTiAqLwotICAgICAgY2FzZSAweDAwQjE6Ci0gICAgICAgIHJldHVy bigoQ0hBUikoMHhCMSAmIDB4ZmYpKTsgICAgLyogUExVUy1NSU5VUyBTSUdOICovCi0gICAgICBj YXNlIDB4MDBCMjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEIyICYgMHhmZikpOyAgICAvKiBT VVBFUlNDUklQVCBUV08gKi8KLSAgICAgIGNhc2UgMHgwMEIzOgotICAgICAgICByZXR1cm4oKENI QVIpKDB4QjMgJiAweGZmKSk7ICAgIC8qIFNVUEVSU0NSSVBUIFRIUkVFICovCi0gICAgICBjYXNl IDB4MDBCNDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEI0ICYgMHhmZikpOyAgICAvKiBBQ1VU RSBBQ0NFTlQgKi8KLSAgICAgIGNhc2UgMHgwMEI1OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4 QjUgJiAweGZmKSk7ICAgIC8qIE1JQ1JPIFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMEI2OgotICAg ICAgICByZXR1cm4oKENIQVIpKDB4QjYgJiAweGZmKSk7ICAgIC8qIFBJTENST1cgU0lHTiAqLwot ICAgICAgY2FzZSAweDAwQjc6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhCNyAmIDB4ZmYpKTsg ICAgLyogTUlERExFIERPVCAqLwotICAgICAgY2FzZSAweDAwQjg6Ci0gICAgICAgIHJldHVybigo Q0hBUikoMHhCOCAmIDB4ZmYpKTsgICAgLyogQ0VESUxMQSAqLwotICAgICAgY2FzZSAweDAwQjk6 Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhCOSAmIDB4ZmYpKTsgICAgLyogU1VQRVJTQ1JJUFQg T05FICovCi0gICAgICBjYXNlIDB4MDBCQToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEJBICYg MHhmZikpOyAgICAvKiBNQVNDVUxJTkUgT1JESU5BTCBJTkRJQ0FUT1IgKi8KLSAgICAgIGNhc2Ug MHgwMEJCOgotICAgICAgICAvKiBSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9O IE1BUiBLKi8KLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEJCICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwQkM6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhCQyAmIDB4ZmYpKTsgICAgLyogVlVM R0FSIEZSQUNUSU9OIE9ORSBRVUFSVEVSICovCi0gICAgICBjYXNlIDB4MDBCRDoKLSAgICAgICAg cmV0dXJuKChDSEFSKSgweEJEICYgMHhmZikpOyAgICAvKiBWVUxHQVIgRlJBQ1RJT04gT05FIEhB TEYgKi8KLSAgICAgIGNhc2UgMHgwMEJFOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QkUgJiAw eGZmKSk7ICAgIC8qIFZVTEdBUiBGUkFDVElPTiBUSFJFRSBRVUFSVEVSUyAqLwotICAgICAgY2Fz ZSAweDAwQkY6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhCRiAmIDB4ZmYpKTsgICAgLyogSU5W RVJURUQgUVVFU1RJT04gTUFSSyAqLwotICAgICAgY2FzZSAweDAwQzA6Ci0gICAgICAgIHJldHVy bigoQ0hBUikoMHhDMCAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRI IEdSQVZFICovCi0gICAgICBjYXNlIDB4MDBDMToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEMx ICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQUNVVEUgKi8KLSAg ICAgIGNhc2UgMHgwMEMyOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QzIgJiAweGZmKSk7ICAg IC8qIEEgQ0lSQ1VNRkxFWCAqLwotICAgICAgY2FzZSAweDAxMDI6Ci0gICAgICAgIHJldHVybigo Q0hBUikoMHhDMyAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEJS RVZFICovCi0gICAgICBjYXNlIDB4MDBDNDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEM0ICYg MHhmZikpOyAgICAvKiBBIERJQUVSRVNJUyAqLwotICAgICAgY2FzZSAweDAwQzU6Ci0gICAgICAg IHJldHVybigoQ0hBUikoMHhDNSAmIDB4ZmYpKTsgICAgLyogQSBSSU5HICovCi0gICAgICBjYXNl IDB4MDBDNjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEM2ICYgMHhmZikpOyAgICAvKiBMQVRJ TiBDQVBJVEFMIExFVFRFUiBBRSAqLwotICAgICAgY2FzZSAweDAwQzc6Ci0gICAgICAgIHJldHVy bigoQ0hBUikoMHhDNyAmIDB4ZmYpKTsgICAgLyogQyBDRURJTExBICovCi0gICAgICBjYXNlIDB4 MDBDODoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEM4ICYgMHhmZikpOyAgICAvKiBFIEdSQVZF ICovCi0gICAgICBjYXNlIDB4MDBDOToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEM5ICYgMHhm ZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQUNVVEUgKi8KLSAgICAgIGNh c2UgMHgwMENBOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4Q0EgJiAweGZmKSk7ICAgIC8qIEUg V0lUSCBDSVJDVU1GTEVYICovCi0gICAgICBjYXNlIDB4MDBDQjoKLSAgICAgICAgcmV0dXJuKChD SEFSKSgweENCICYgMHhmZikpOyAgICAvKiBFIFdJVEggRElBRVJFU0lTICovCi0gICAgICBjYXNl IDB4MDMwMDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweENDICYgMHhmZikpOyAgICAvKiBDT01C SU5JTkcgR1JBVkUgQUNDRU5UICovCi0gICAgICBjYXNlIDB4MDBDRDoKLSAgICAgICAgcmV0dXJu KChDSEFSKSgweENEICYgMHhmZikpOyAgICAvKiBJIFdJVEggQUNVVEUgKi8KLSAgICAgIGNhc2Ug MHgwMENFOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4Q0UgJiAweGZmKSk7ICAgIC8qIEkgV0lU SCBDSVJDVU1GTEVYICovCi0gICAgICBjYXNlIDB4MDBDRjoKLSAgICAgICAgcmV0dXJuKChDSEFS KSgweENGICYgMHhmZikpOyAgICAvKiBJIFdJVEggRElBRVJFU0lTICovCi0gICAgICBjYXNlIDB4 MDExMDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEQwICYgMHhmZikpOyAgICAvKiBEIFdJVEgg U1RST0tFICovCi0gICAgICBjYXNlIDB4MDBEMToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEQx ICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBOIFdJVEggVElMREUgKi8KLSAg ICAgIGNhc2UgMHgwMzA5OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RDIgJiAweGZmKSk7ICAg IC8qIENPTUJJTklORyBIT09LIEFCT1ZFICovCi0gICAgICBjYXNlIDB4MDBEMzoKLSAgICAgICAg cmV0dXJuKChDSEFSKSgweEQzICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBP IFdJVEggQUNVVEUgKi8KLSAgICAgIGNhc2UgMHgwMEQ0OgotICAgICAgICByZXR1cm4oKENIQVIp KDB4RDQgJiAweGZmKSk7ICAgIC8qIE8gV0lUSCBDSVJDVU1GTEVYICovCi0gICAgICBjYXNlIDB4 MDFBMDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEQ1ICYgMHhmZikpOyAgICAvKiBMQVRJTiBD QVBJVEFMIExFVFRFUiBPIFdJVEggSE9STiAqLwotICAgICAgY2FzZSAweDAwRDY6Ci0gICAgICAg IHJldHVybigoQ0hBUikoMHhENiAmIDB4ZmYpKTsgICAgLyogTyBXSVRIIERJQUVSRVNJUyAqLwot ICAgICAgY2FzZSAweDAwRDc6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhENyAmIDB4ZmYpKTsg ICAgLyogTVVMVElQTElDQVRJT04gU0lHTiAqLwotICAgICAgY2FzZSAweDAwRDg6Ci0gICAgICAg IHJldHVybigoQ0hBUikoMHhEOCAmIDB4ZmYpKTsgICAgLyogTyBXSVRIIFNUUk9LRSAqLwotICAg ICAgY2FzZSAweDAwRDk6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhEOSAmIDB4ZmYpKTsgICAg LyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEdSQVZFICovCi0gICAgICBjYXNlIDB4MDBE QToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweERBICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJ VEFMIExFVFRFUiBVIFdJVEggQUNVVEUgKi8KLSAgICAgIGNhc2UgMHgwMERCOgotICAgICAgICBy ZXR1cm4oKENIQVIpKDB4REIgJiAweGZmKSk7ICAgIC8qIFUgV0lUSCBDSVJDVU1GTEVYICovCi0g ICAgICBjYXNlIDB4MDBEQzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweERDICYgMHhmZikpOyAg ICAvKiBVIFdJVEggRElBRVJFU0lTICovCi0gICAgICBjYXNlIDB4MDFBRjoKLSAgICAgICAgcmV0 dXJuKChDSEFSKSgweEREICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJ VEggSE9STiAqLwotICAgICAgY2FzZSAweDAzMDM6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhE RSAmIDB4ZmYpKTsgICAgLyogQ09NQklOSU5HIFRJTERFICovCi0gICAgICBjYXNlIDB4MDBERjoK LSAgICAgICAgcmV0dXJuKChDSEFSKSgweERGICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBM RVRURVIgU0hBUlAgUyAqLwotICAgICAgY2FzZSAweDAwRTA6Ci0gICAgICAgIHJldHVybigoQ0hB UikoMHhFMCAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBHUkFWRSAq LwotICAgICAgY2FzZSAweDAwRTE6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhFMSAmIDB4ZmYp KTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBBQ1VURSAqLwotICAgICAgY2FzZSAw eDAwRTI6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhFMiAmIDB4ZmYpKTsgICAgLyogU01BTEwg QSBXSVRIIENJUkNVTUZMRVggKi8KLSAgICAgIGNhc2UgMHgwMTAzOgotICAgICAgICByZXR1cm4o KENIQVIpKDB4RTMgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQlJF VkUgKi8KLSAgICAgIGNhc2UgMHgwMEU0OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RTQgJiAw eGZmKSk7ICAgIC8qIFNNQUxMIEEgV0lUSCBESUFFUkVTSVMgKi8KLSAgICAgIGNhc2UgMHgwMEU1 OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RTUgJiAweGZmKSk7ICAgIC8qIFNNQUxMIEEgV0lU SCBSSU5HIEFCT1ZFICovCi0gICAgICBjYXNlIDB4MDBFNjoKLSAgICAgICAgcmV0dXJuKChDSEFS KSgweEU2ICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgQUUgKi8KLSAgICAgIGNh c2UgMHgwMEU3OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RTcgJiAweGZmKSk7ICAgIC8qIExB VElOIFNNQUxMIExFVFRFUiBDIFdJVEggQ0VESUxMQSAqLwotICAgICAgY2FzZSAweDAwRTg6Ci0g ICAgICAgIHJldHVybigoQ0hBUikoMHhFOCAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVU VEVSIEUgV0lUSCBHUkFWRSAqLwotICAgICAgY2FzZSAweDAwRTk6Ci0gICAgICAgIHJldHVybigo Q0hBUikoMHhFOSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VU RSAqLwotICAgICAgY2FzZSAweDAwRUE6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhFQSAmIDB4 ZmYpKTsgICAgLyogU01BTEwgRSBXSVRIIENJUkNVTUZMRVggKi8KLSAgICAgIGNhc2UgMHgwMEVC OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RUIgJiAweGZmKSk7ICAgIC8qIFNNQUxMIEUgV0lU SCBESUFFUkVTSVMgKi8KLSAgICAgIGNhc2UgMHgwMzAxOgotICAgICAgICByZXR1cm4oKENIQVIp KDB4RUMgJiAweGZmKSk7ICAgIC8qIENPTUJJTklORyBBQ1VURSBBQ0NFTlQgKi8KLSAgICAgIGNh c2UgMHgwMEVEOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RUQgJiAweGZmKSk7ICAgIC8qIExB VElOIFNNQUxMIExFVFRFUiBJIFdJVEggQUNVVEUgKi8KLSAgICAgIGNhc2UgMHgwMEVFOgotICAg ICAgICByZXR1cm4oKENIQVIpKDB4RUUgJiAweGZmKSk7ICAgIC8qIFNNQUxMIEkgV0lUSCBDSVJD VU1GTEVYICovCi0gICAgICBjYXNlIDB4MDBFRjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEVG ICYgMHhmZikpOyAgICAvKiBTTUFMTCBJIFdJVEggRElBRVJFU0lTICovCi0gICAgICBjYXNlIDB4 MDExMToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEYwICYgMHhmZikpOyAgICAvKiBMQVRJTiBT TUFMTCBMRVRURVIgRCBXSVRIIFNUUk9LRSAqLwotICAgICAgY2FzZSAweDAwRjE6Ci0gICAgICAg IHJldHVybigoQ0hBUikoMHhGMSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIE4g V0lUSCBUSUxERSAqLwotICAgICAgY2FzZSAweDAzMjM6Ci0gICAgICAgIHJldHVybigoQ0hBUiko MHhGMiAmIDB4ZmYpKTsgICAgLyogQ09NQklOSU5HIERPVCBCRUxPVyAqLwotICAgICAgY2FzZSAw eDAwRjM6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhGMyAmIDB4ZmYpKTsgICAgLyogTEFUSU4g U01BTEwgTEVUVEVSIE8gV0lUSCBBQ1VURSAqLwotICAgICAgY2FzZSAweDAwRjQ6Ci0gICAgICAg IHJldHVybigoQ0hBUikoMHhGNCAmIDB4ZmYpKTsgICAgLyogU01BTEwgTyBXSVRIIENJUkNVTUZM RVggKi8KLSAgICAgIGNhc2UgMHgwMUExOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RjUgJiAw eGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggSE9STiAqLwotICAgICAgY2Fz ZSAweDAwRjY6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhGNiAmIDB4ZmYpKTsgICAgLyogU01B TEwgTyBXSVRIIERJQUVSRVNJUyAqLwotICAgICAgY2FzZSAweDAwRjc6Ci0gICAgICAgIHJldHVy bigoQ0hBUikoMHhGNyAmIDB4ZmYpKTsgICAgLyogRElWSVNJT04gU0lHTiAqLwotICAgICAgY2Fz ZSAweDAwRjg6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhGOCAmIDB4ZmYpKTsgICAgLyogTEFU SU4gU01BTEwgTEVUVEVSIE8gV0lUSCBTVFJPS0UgKi8KLSAgICAgIGNhc2UgMHgwMEY5OgotICAg ICAgICByZXR1cm4oKENIQVIpKDB4RjkgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRF UiBVIFdJVEggR1JBVkUgKi8KLSAgICAgIGNhc2UgMHgwMEZBOgotICAgICAgICByZXR1cm4oKENI QVIpKDB4RkEgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQUNVVEUg Ki8KLSAgICAgIGNhc2UgMHgwMEZCOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RkIgJiAweGZm KSk7ICAgIC8qIFNNQUxMIFUgV0lUSCBDSVJDVU1GTEVYICovCi0gICAgICBjYXNlIDB4MDBGQzoK LSAgICAgICAgcmV0dXJuKChDSEFSKSgweEZDICYgMHhmZikpOyAgICAvKiBTTUFMTCBVIFdJVEgg RElBRVJFU0lTICovCi0gICAgICBjYXNlIDB4MDFCMDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgw eEZEICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEhPUk4gKi8KLSAg ICAgIGNhc2UgMHgyMEFCOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RkUgJiAweGZmKSk7ICAg IC8qIERPTkcgU0lHTiAqLwotICAgICAgY2FzZSAweDAwRkY6Ci0gICAgICAgIHJldHVybigoQ0hB UikoMHhGRiAmIDB4ZmYpKTsgICAgLyogU01BTEwgWSBXSVRIIERJQUVSRVNJUyAqLwotICAgIGRl ZmF1bHQ6IHJldHVybigweDAwM2YpOwotICB9Ci19Ci0KLWludCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBDb2RlIFBhZ2UgMDM3IC0gRUJDRElDIChVLlMuKSAqLwotI2lm ZGVmIENLX0FOU0lDCi10eF9jcDM3KFVTSE9SVCBjKQotI2Vsc2UKLXR4X2NwMzcoYykgVVNIT1JU IGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBzd2l0Y2ggKGMpIHsKLSAgICAgIGNh c2UgMHgwMDAwOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4MDAgJiAweGZmKSk7ICAgIC8qIE5V TEwgKi8KLSAgICAgIGNhc2UgMHgwMDAxOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4MDEgJiAw eGZmKSk7ICAgIC8qIFNUQVJUIE9GIEhFQURJTkcgKi8KLSAgICAgIGNhc2UgMHgwMDAyOgotICAg ICAgICByZXR1cm4oKENIQVIpKDB4MDIgJiAweGZmKSk7ICAgIC8qIFNUQVJUIE9GIFRFWFQgKi8K LSAgICAgIGNhc2UgMHgwMDAzOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4MDMgJiAweGZmKSk7 ICAgIC8qIEVORCBPRiBURVhUICovCi0gICAgICBjYXNlIDB4MDA5QzoKLSAgICAgICAgcmV0dXJu KChDSEFSKSgweDA0ICYgMHhmZikpOyAgICAvKiBDT05UUk9MICovCi0gICAgICBjYXNlIDB4MDAw OToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDA1ICYgMHhmZikpOyAgICAvKiBIT1JJWk9OVEFM IFRBQlVMQVRJT04gKi8KLSAgICAgIGNhc2UgMHgwMDg2OgotICAgICAgICByZXR1cm4oKENIQVIp KDB4MDYgJiAweGZmKSk7ICAgIC8qIENPTlRST0wgKi8KLSAgICAgIGNhc2UgMHgwMDdGOgotICAg ICAgICByZXR1cm4oKENIQVIpKDB4MDcgJiAweGZmKSk7ICAgIC8qIERFTEVURSAqLwotICAgICAg Y2FzZSAweDAwOTc6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHgwOCAmIDB4ZmYpKTsgICAgLyog Q09OVFJPTCAqLwotICAgICAgY2FzZSAweDAwOEQ6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHgw OSAmIDB4ZmYpKTsgICAgLyogQ09OVFJPTCAqLwotICAgICAgY2FzZSAweDAwOEU6Ci0gICAgICAg IHJldHVybigoQ0hBUikoMHgwQSAmIDB4ZmYpKTsgICAgLyogQ09OVFJPTCAqLwotICAgICAgY2Fz ZSAweDAwMEI6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHgwQiAmIDB4ZmYpKTsgICAgLyogVkVS VElDQUwgVEFCVUxBVElPTiAqLwotICAgICAgY2FzZSAweDAwMEM6Ci0gICAgICAgIHJldHVybigo Q0hBUikoMHgwQyAmIDB4ZmYpKTsgICAgLyogRk9STSBGRUVEICovCi0gICAgICBjYXNlIDB4MDAw RDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDBEICYgMHhmZikpOyAgICAvKiBDQVJSSUFHRSBS RVRVUk4gKi8KLSAgICAgIGNhc2UgMHgwMDBFOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4MEUg JiAweGZmKSk7ICAgIC8qIFNISUZUIE9VVCAqLwotICAgICAgY2FzZSAweDAwMEY6Ci0gICAgICAg IHJldHVybigoQ0hBUikoMHgwRiAmIDB4ZmYpKTsgICAgLyogU0hJRlQgSU4gKi8KLSAgICAgIGNh c2UgMHgwMDEwOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4MTAgJiAweGZmKSk7ICAgIC8qIERB VEEgTElOSyBFU0NBUEUgKi8KLSAgICAgIGNhc2UgMHgwMDExOgotICAgICAgICByZXR1cm4oKENI QVIpKDB4MTEgJiAweGZmKSk7ICAgIC8qIERFVklDRSBDT05UUk9MIE9ORSAqLwotICAgICAgY2Fz ZSAweDAwMTI6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHgxMiAmIDB4ZmYpKTsgICAgLyogREVW SUNFIENPTlRST0wgVFdPICovCi0gICAgICBjYXNlIDB4MDAxMzoKLSAgICAgICAgcmV0dXJuKChD SEFSKSgweDEzICYgMHhmZikpOyAgICAvKiBERVZJQ0UgQ09OVFJPTCBUSFJFRSAqLwotICAgICAg Y2FzZSAweDAwOUQ6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHgxNCAmIDB4ZmYpKTsgICAgLyog Q09OVFJPTCAqLwotICAgICAgY2FzZSAweDAwODU6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHgx NSAmIDB4ZmYpKTsgICAgLyogQ09OVFJPTCAqLwotICAgICAgY2FzZSAweDAwMDg6Ci0gICAgICAg IHJldHVybigoQ0hBUikoMHgxNiAmIDB4ZmYpKTsgICAgLyogQkFDS1NQQUNFICovCi0gICAgICBj YXNlIDB4MDA4NzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDE3ICYgMHhmZikpOyAgICAvKiBD T05UUk9MICovCi0gICAgICBjYXNlIDB4MDAxODoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDE4 ICYgMHhmZikpOyAgICAvKiBDQU5DRUwgKi8KLSAgICAgIGNhc2UgMHgwMDE5OgotICAgICAgICBy ZXR1cm4oKENIQVIpKDB4MTkgJiAweGZmKSk7ICAgIC8qIEVORCBPRiBNRURJVU0gKi8KLSAgICAg IGNhc2UgMHgwMDkyOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4MUEgJiAweGZmKSk7ICAgIC8q IENPTlRST0wgKi8KLSAgICAgIGNhc2UgMHgwMDhGOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4 MUIgJiAweGZmKSk7ICAgIC8qIENPTlRST0wgKi8KLSAgICAgIGNhc2UgMHgwMDFDOgotICAgICAg ICByZXR1cm4oKENIQVIpKDB4MUMgJiAweGZmKSk7ICAgIC8qIEZJTEUgU0VQQVJBVE9SICovCi0g ICAgICBjYXNlIDB4MDAxRDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDFEICYgMHhmZikpOyAg ICAvKiBHUk9VUCBTRVBBUkFUT1IgKi8KLSAgICAgIGNhc2UgMHgwMDFFOgotICAgICAgICByZXR1 cm4oKENIQVIpKDB4MUUgJiAweGZmKSk7ICAgIC8qIFJFQ09SRCBTRVBBUkFUT1IgKi8KLSAgICAg IGNhc2UgMHgwMDFGOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4MUYgJiAweGZmKSk7ICAgIC8q IFVOSVQgU0VQQVJBVE9SICovCi0gICAgICBjYXNlIDB4MDA4MDoKLSAgICAgICAgcmV0dXJuKChD SEFSKSgweDIwICYgMHhmZikpOyAgICAvKiBDT05UUk9MICovCi0gICAgICBjYXNlIDB4MDA4MToK LSAgICAgICAgcmV0dXJuKChDSEFSKSgweDIxICYgMHhmZikpOyAgICAvKiBDT05UUk9MICovCi0g ICAgICBjYXNlIDB4MDA4MjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDIyICYgMHhmZikpOyAg ICAvKiBDT05UUk9MICovCi0gICAgICBjYXNlIDB4MDA4MzoKLSAgICAgICAgcmV0dXJuKChDSEFS KSgweDIzICYgMHhmZikpOyAgICAvKiBDT05UUk9MICovCi0gICAgICBjYXNlIDB4MDA4NDoKLSAg ICAgICAgcmV0dXJuKChDSEFSKSgweDI0ICYgMHhmZikpOyAgICAvKiBDT05UUk9MICovCi0gICAg ICBjYXNlIDB4MDAwQToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDI1ICYgMHhmZikpOyAgICAv KiBMSU5FIEZFRUQgKi8KLSAgICAgIGNhc2UgMHgwMDE3OgotICAgICAgICByZXR1cm4oKENIQVIp KDB4MjYgJiAweGZmKSk7ICAgIC8qIEVORCBPRiBUUkFOU01JU1NJT04gQkxPQ0sgKi8KLSAgICAg IGNhc2UgMHgwMDFCOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4MjcgJiAweGZmKSk7ICAgIC8q IEVTQ0FQRSAqLwotICAgICAgY2FzZSAweDAwODg6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHgy OCAmIDB4ZmYpKTsgICAgLyogQ09OVFJPTCAqLwotICAgICAgY2FzZSAweDAwODk6Ci0gICAgICAg IHJldHVybigoQ0hBUikoMHgyOSAmIDB4ZmYpKTsgICAgLyogQ09OVFJPTCAqLwotICAgICAgY2Fz ZSAweDAwOEE6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHgyQSAmIDB4ZmYpKTsgICAgLyogQ09O VFJPTCAqLwotICAgICAgY2FzZSAweDAwOEI6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHgyQiAm IDB4ZmYpKTsgICAgLyogQ09OVFJPTCAqLwotICAgICAgY2FzZSAweDAwOEM6Ci0gICAgICAgIHJl dHVybigoQ0hBUikoMHgyQyAmIDB4ZmYpKTsgICAgLyogQ09OVFJPTCAqLwotICAgICAgY2FzZSAw eDAwMDU6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHgyRCAmIDB4ZmYpKTsgICAgLyogRU5RVUlS WSAqLwotICAgICAgY2FzZSAweDAwMDY6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHgyRSAmIDB4 ZmYpKTsgICAgLyogQUNLTk9XTEVER0UgKi8KLSAgICAgIGNhc2UgMHgwMDA3OgotICAgICAgICBy ZXR1cm4oKENIQVIpKDB4MkYgJiAweGZmKSk7ICAgIC8qIEJFTEwgKi8KLSAgICAgIGNhc2UgMHgw MDkwOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4MzAgJiAweGZmKSk7ICAgIC8qIENPTlRST0wg Ki8KLSAgICAgIGNhc2UgMHgwMDkxOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4MzEgJiAweGZm KSk7ICAgIC8qIENPTlRST0wgKi8KLSAgICAgIGNhc2UgMHgwMDE2OgotICAgICAgICByZXR1cm4o KENIQVIpKDB4MzIgJiAweGZmKSk7ICAgIC8qIFNZTkNIUk9OT1VTIElETEUgKi8KLSAgICAgIGNh c2UgMHgwMDkzOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4MzMgJiAweGZmKSk7ICAgIC8qIENP TlRST0wgKi8KLSAgICAgIGNhc2UgMHgwMDk0OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4MzQg JiAweGZmKSk7ICAgIC8qIENPTlRST0wgKi8KLSAgICAgIGNhc2UgMHgwMDk1OgotICAgICAgICBy ZXR1cm4oKENIQVIpKDB4MzUgJiAweGZmKSk7ICAgIC8qIENPTlRST0wgKi8KLSAgICAgIGNhc2Ug MHgwMDk2OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4MzYgJiAweGZmKSk7ICAgIC8qIENPTlRS T0wgKi8KLSAgICAgIGNhc2UgMHgwMDA0OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4MzcgJiAw eGZmKSk7ICAgIC8qIEVORCBPRiBUUkFOU01JU1NJT04gKi8KLSAgICAgIGNhc2UgMHgwMDk4Ogot ICAgICAgICByZXR1cm4oKENIQVIpKDB4MzggJiAweGZmKSk7ICAgIC8qIENPTlRST0wgKi8KLSAg ICAgIGNhc2UgMHgwMDk5OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4MzkgJiAweGZmKSk7ICAg IC8qIENPTlRST0wgKi8KLSAgICAgIGNhc2UgMHgwMDlBOgotICAgICAgICByZXR1cm4oKENIQVIp KDB4M0EgJiAweGZmKSk7ICAgIC8qIENPTlRST0wgKi8KLSAgICAgIGNhc2UgMHgwMDlCOgotICAg ICAgICByZXR1cm4oKENIQVIpKDB4M0IgJiAweGZmKSk7ICAgIC8qIENPTlRST0wgKi8KLSAgICAg IGNhc2UgMHgwMDE0OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4M0MgJiAweGZmKSk7ICAgIC8q IERFVklDRSBDT05UUk9MIEZPVVIgKi8KLSAgICAgIGNhc2UgMHgwMDE1OgotICAgICAgICByZXR1 cm4oKENIQVIpKDB4M0QgJiAweGZmKSk7ICAgIC8qIE5FR0FUSVZFIEFDS05PV0xFREdFICovCi0g ICAgICBjYXNlIDB4MDA5RToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDNFICYgMHhmZikpOyAg ICAvKiBDT05UUk9MICovCi0gICAgICBjYXNlIDB4MDAxQToKLSAgICAgICAgcmV0dXJuKChDSEFS KSgweDNGICYgMHhmZikpOyAgICAvKiBTVUJTVElUVVRFICovCi0gICAgICBjYXNlIDB4MDAyMDoK LSAgICAgICAgcmV0dXJuKChDSEFSKSgweDQwICYgMHhmZikpOyAgICAvKiBTUEFDRSAqLwotICAg ICAgY2FzZSAweDAwQTA6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg0MSAmIDB4ZmYpKTsgICAg LyogTk8tQlJFQUsgU1BBQ0UgKi8KLSAgICAgIGNhc2UgMHgwMEUyOgotICAgICAgICByZXR1cm4o KENIQVIpKDB4NDIgJiAweGZmKSk7ICAgIC8qIFNNQUxMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxF WCAqLwotICAgICAgY2FzZSAweDAwRTQ6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg0MyAmIDB4 ZmYpKTsgICAgLyogU01BTEwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVMgKi8KLSAgICAgIGNhc2Ug MHgwMEUwOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4NDQgJiAweGZmKSk7ICAgIC8qIExBVElO IFNNQUxMIExFVFRFUiBBIFdJVEggR1JBVkUgKi8KLSAgICAgIGNhc2UgMHgwMEUxOgotICAgICAg ICByZXR1cm4oKENIQVIpKDB4NDUgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBB IFdJVEggQUNVVEUgKi8KLSAgICAgIGNhc2UgMHgwMEUzOgotICAgICAgICByZXR1cm4oKENIQVIp KDB4NDYgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggVElMREUgKi8K LSAgICAgIGNhc2UgMHgwMEU1OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4NDcgJiAweGZmKSk7 ICAgIC8qIFNNQUxMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRSAqLwotICAgICAgY2FzZSAweDAw RTc6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg0OCAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01B TEwgTEVUVEVSIEMgV0lUSCBDRURJTExBICovCi0gICAgICBjYXNlIDB4MDBGMToKLSAgICAgICAg cmV0dXJuKChDSEFSKSgweDQ5ICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgTiBX SVRIIFRJTERFICovCi0gICAgICBjYXNlIDB4MDBBMjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgw eDRBICYgMHhmZikpOyAgICAvKiBDRU5UIFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMDJFOgotICAg ICAgICByZXR1cm4oKENIQVIpKDB4NEIgJiAweGZmKSk7ICAgIC8qIEZVTEwgU1RPUCAqLwotICAg ICAgY2FzZSAweDAwM0M6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg0QyAmIDB4ZmYpKTsgICAg LyogTEVTUy1USEFOIFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMDI4OgotICAgICAgICByZXR1cm4o KENIQVIpKDB4NEQgJiAweGZmKSk7ICAgIC8qIExFRlQgUEFSRU5USEVTSVMgKi8KLSAgICAgIGNh c2UgMHgwMDJCOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4NEUgJiAweGZmKSk7ICAgIC8qIFBM VVMgU0lHTiAqLwotICAgICAgY2FzZSAweDAwN0M6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg0 RiAmIDB4ZmYpKTsgICAgLyogVkVSVElDQUwgTElORSAqLwotICAgICAgY2FzZSAweDAwMjY6Ci0g ICAgICAgIHJldHVybigoQ0hBUikoMHg1MCAmIDB4ZmYpKTsgICAgLyogQU1QRVJTQU5EICovCi0g ICAgICBjYXNlIDB4MDBFOToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDUxICYgMHhmZikpOyAg ICAvKiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFICovCi0gICAgICBjYXNlIDB4MDBFQToKLSAg ICAgICAgcmV0dXJuKChDSEFSKSgweDUyICYgMHhmZikpOyAgICAvKiBTTUFMTCBMRVRURVIgRSBX SVRIIENJUkNVTUZMRVggKi8KLSAgICAgIGNhc2UgMHgwMEVCOgotICAgICAgICByZXR1cm4oKENI QVIpKDB4NTMgJiAweGZmKSk7ICAgIC8qIFNNQUxMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTICov Ci0gICAgICBjYXNlIDB4MDBFODoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDU0ICYgMHhmZikp OyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEdSQVZFICovCi0gICAgICBjYXNlIDB4 MDBFRDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDU1ICYgMHhmZikpOyAgICAvKiBMQVRJTiBT TUFMTCBMRVRURVIgSSBXSVRIIEFDVVRFICovCi0gICAgICBjYXNlIDB4MDBFRToKLSAgICAgICAg cmV0dXJuKChDSEFSKSgweDU2ICYgMHhmZikpOyAgICAvKiBTTUFMTCBMRVRURVIgSSBXSVRIIENJ UkNVTUZMRVggKi8KLSAgICAgIGNhc2UgMHgwMEVGOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4 NTcgJiAweGZmKSk7ICAgIC8qIFNNQUxMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTICovCi0gICAg ICBjYXNlIDB4MDBFQzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDU4ICYgMHhmZikpOyAgICAv KiBMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEdSQVZFICovCi0gICAgICBjYXNlIDB4MDBERjoK LSAgICAgICAgcmV0dXJuKChDSEFSKSgweDU5ICYgMHhmZikpOyAgICAvKiBTTUFMTCBMRVRURVIg U0hBUlAgUyAoR0VSTUFOKSAqLwotICAgICAgY2FzZSAweDAwMjE6Ci0gICAgICAgIHJldHVybigo Q0hBUikoMHg1QSAmIDB4ZmYpKTsgICAgLyogRVhDTEFNQVRJT04gTUFSSyAqLwotICAgICAgY2Fz ZSAweDAwMjQ6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg1QiAmIDB4ZmYpKTsgICAgLyogRE9M TEFSIFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMDJBOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4 NUMgJiAweGZmKSk7ICAgIC8qIEFTVEVSSVNLICovCi0gICAgICBjYXNlIDB4MDAyOToKLSAgICAg ICAgcmV0dXJuKChDSEFSKSgweDVEICYgMHhmZikpOyAgICAvKiBSSUdIVCBQQVJFTlRIRVNJUyAq LwotICAgICAgY2FzZSAweDAwM0I6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg1RSAmIDB4ZmYp KTsgICAgLyogU0VNSUNPTE9OICovCi0gICAgICBjYXNlIDB4MDBBQzoKLSAgICAgICAgcmV0dXJu KChDSEFSKSgweDVGICYgMHhmZikpOyAgICAvKiBOT1QgU0lHTiAqLwotICAgICAgY2FzZSAweDAw MkQ6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg2MCAmIDB4ZmYpKTsgICAgLyogSFlQSEVOLU1J TlVTICovCi0gICAgICBjYXNlIDB4MDAyRjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDYxICYg MHhmZikpOyAgICAvKiBTT0xJRFVTICovCi0gICAgICBjYXNlIDB4MDBDMjoKLSAgICAgICAgcmV0 dXJuKChDSEFSKSgweDYyICYgMHhmZikpOyAgICAvKiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQ0lS Q1VNRkxFWCAqLwotICAgICAgY2FzZSAweDAwQzQ6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg2 MyAmIDB4ZmYpKTsgICAgLyogQ0FQSVRBTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJUyAqLwotICAg ICAgY2FzZSAweDAwQzA6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg2NCAmIDB4ZmYpKTsgICAg LyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEdSQVZFICovCi0gICAgICBjYXNlIDB4MDBD MToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDY1ICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJ VEFMIExFVFRFUiBBIFdJVEggQUNVVEUgKi8KLSAgICAgIGNhc2UgMHgwMEMzOgotICAgICAgICBy ZXR1cm4oKENIQVIpKDB4NjYgJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIEEg V0lUSCBUSUxERSAqLwotICAgICAgY2FzZSAweDAwQzU6Ci0gICAgICAgIHJldHVybigoQ0hBUiko MHg2NyAmIDB4ZmYpKTsgICAgLyogQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkUgKi8K LSAgICAgIGNhc2UgMHgwMEM3OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4NjggJiAweGZmKSk7 ICAgIC8qIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBICovCi0gICAgICBjYXNlIDB4MDBE MToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDY5ICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJ VEFMIExFVFRFUiBOIFdJVEggVElMREUgKi8KLSAgICAgIGNhc2UgMHgwMEE2OgotICAgICAgICBy ZXR1cm4oKENIQVIpKDB4NkEgJiAweGZmKSk7ICAgIC8qIEJST0tFTiBCQVIgKi8KLSAgICAgIGNh c2UgMHgwMDJDOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4NkIgJiAweGZmKSk7ICAgIC8qIENP TU1BICovCi0gICAgICBjYXNlIDB4MDAyNToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDZDICYg MHhmZikpOyAgICAvKiBQRVJDRU5UIFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMDVGOgotICAgICAg ICByZXR1cm4oKENIQVIpKDB4NkQgJiAweGZmKSk7ICAgIC8qIExPVyBMSU5FICovCi0gICAgICBj YXNlIDB4MDAzRToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDZFICYgMHhmZikpOyAgICAvKiBH UkVBVEVSLVRIQU4gU0lHTiAqLwotICAgICAgY2FzZSAweDAwM0Y6Ci0gICAgICAgIHJldHVybigo Q0hBUikoMHg2RiAmIDB4ZmYpKTsgICAgLyogUVVFU1RJT04gTUFSSyAqLwotICAgICAgY2FzZSAw eDAwRjg6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg3MCAmIDB4ZmYpKTsgICAgLyogTEFUSU4g U01BTEwgTEVUVEVSIE8gV0lUSCBTVFJPS0UgKi8KLSAgICAgIGNhc2UgMHgwMEM5OgotICAgICAg ICByZXR1cm4oKENIQVIpKDB4NzEgJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVS IEUgV0lUSCBBQ1VURSAqLwotICAgICAgY2FzZSAweDAwQ0E6Ci0gICAgICAgIC8qIExBVElOIENB UElUQUwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYICovCi0gICAgICAgIHJldHVybigoQ0hBUiko MHg3MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMENCOgotICAgICAgICAvKiBMQVRJTiBDQVBJ VEFMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTICovCi0gICAgICAgIHJldHVybigoQ0hBUikoMHg3 MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEM4OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4 NzQgJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBHUkFWRSAqLwot ICAgICAgY2FzZSAweDAwQ0Q6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg3NSAmIDB4ZmYpKTsg ICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEFDVVRFICovCi0gICAgICBjYXNlIDB4 MDBDRToKLSAgICAgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVgg Ki8KLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDc2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw Q0Y6Ci0gICAgICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVMgKi8K LSAgICAgICAgcmV0dXJuKChDSEFSKSgweDc3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwQ0M6 Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg3OCAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRB TCBMRVRURVIgSSBXSVRIIEdSQVZFICovCi0gICAgICBjYXNlIDB4MDA2MDoKLSAgICAgICAgcmV0 dXJuKChDSEFSKSgweDc5ICYgMHhmZikpOyAgICAvKiBHUkFWRSBBQ0NFTlQgKi8KLSAgICAgIGNh c2UgMHgwMDNBOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4N0EgJiAweGZmKSk7ICAgIC8qIENP TE9OICovCi0gICAgICBjYXNlIDB4MDAyMzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDdCICYg MHhmZikpOyAgICAvKiBOVU1CRVIgU0lHTiAqLwotICAgICAgY2FzZSAweDAwNDA6Ci0gICAgICAg IHJldHVybigoQ0hBUikoMHg3QyAmIDB4ZmYpKTsgICAgLyogQ09NTUVSQ0lBTCBBVCAqLwotICAg ICAgY2FzZSAweDAwMjc6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg3RCAmIDB4ZmYpKTsgICAg LyogQVBPU1RST1BIRSAqLwotICAgICAgY2FzZSAweDAwM0Q6Ci0gICAgICAgIHJldHVybigoQ0hB UikoMHg3RSAmIDB4ZmYpKTsgICAgLyogRVFVQUxTIFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMDIy OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4N0YgJiAweGZmKSk7ICAgIC8qIFFVT1RBVElPTiBN QVJLICovCi0gICAgICBjYXNlIDB4MDBEODoKLSAgICAgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRU RVIgTyBXSVRIIFNUUk9LRSAqLwotICAgICAgICByZXR1cm4oKENIQVIpKDB4ODAgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDA2MToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDgxICYgMHhmZikp OyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgQSAqLwotICAgICAgY2FzZSAweDAwNjI6Ci0gICAg ICAgIHJldHVybigoQ0hBUikoMHg4MiAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVS IEIgKi8KLSAgICAgIGNhc2UgMHgwMDYzOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4ODMgJiAw eGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBDICovCi0gICAgICBjYXNlIDB4MDA2NDoK LSAgICAgICAgcmV0dXJuKChDSEFSKSgweDg0ICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBM RVRURVIgRCAqLwotICAgICAgY2FzZSAweDAwNjU6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg4 NSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIEUgKi8KLSAgICAgIGNhc2UgMHgw MDY2OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4ODYgJiAweGZmKSk7ICAgIC8qIExBVElOIFNN QUxMIExFVFRFUiBGICovCi0gICAgICBjYXNlIDB4MDA2NzoKLSAgICAgICAgcmV0dXJuKChDSEFS KSgweDg3ICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgRyAqLwotICAgICAgY2Fz ZSAweDAwNjg6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg4OCAmIDB4ZmYpKTsgICAgLyogTEFU SU4gU01BTEwgTEVUVEVSIEggKi8KLSAgICAgIGNhc2UgMHgwMDY5OgotICAgICAgICByZXR1cm4o KENIQVIpKDB4ODkgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBJICovCi0gICAg ICBjYXNlIDB4MDBBQjoKLSAgICAgICAgLyogTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVP VEFUSU9OIE1BUksgKi8KLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDhBICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwQkI6Ci0gICAgICAgIC8qIFJJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRSBR VU9UQVRJT04gTUFSIEsqLwotICAgICAgICByZXR1cm4oKENIQVIpKDB4OEIgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDBGMDoKLSAgICAgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIEVUSCAoSUNF TEFORElDKSAqLwotICAgICAgICByZXR1cm4oKENIQVIpKDB4OEMgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDBGRDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDhEICYgMHhmZikpOyAgICAvKiBM QVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIEFDVVRFICovCi0gICAgICBjYXNlIDB4MDBGRToKLSAg ICAgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIFRIT1JOIChJQ0VMQU5ESUMpICovCi0gICAgICAg IHJldHVybigoQ0hBUikoMHg4RSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEIxOgotICAgICAg ICByZXR1cm4oKENIQVIpKDB4OEYgJiAweGZmKSk7ICAgIC8qIFBMVVMtTUlOVVMgU0lHTiAqLwot ICAgICAgY2FzZSAweDAwQjA6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg5MCAmIDB4ZmYpKTsg ICAgLyogREVHUkVFIFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMDZBOgotICAgICAgICByZXR1cm4o KENIQVIpKDB4OTEgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBKICovCi0gICAg ICBjYXNlIDB4MDA2QjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDkyICYgMHhmZikpOyAgICAv KiBMQVRJTiBTTUFMTCBMRVRURVIgSyAqLwotICAgICAgY2FzZSAweDAwNkM6Ci0gICAgICAgIHJl dHVybigoQ0hBUikoMHg5MyAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIEwgKi8K LSAgICAgIGNhc2UgMHgwMDZEOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4OTQgJiAweGZmKSk7 ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBNICovCi0gICAgICBjYXNlIDB4MDA2RToKLSAgICAg ICAgcmV0dXJuKChDSEFSKSgweDk1ICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIg TiAqLwotICAgICAgY2FzZSAweDAwNkY6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg5NiAmIDB4 ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIE8gKi8KLSAgICAgIGNhc2UgMHgwMDcwOgot ICAgICAgICByZXR1cm4oKENIQVIpKDB4OTcgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExF VFRFUiBQICovCi0gICAgICBjYXNlIDB4MDA3MToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDk4 ICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgUSAqLwotICAgICAgY2FzZSAweDAw NzI6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHg5OSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01B TEwgTEVUVEVSIFIgKi8KLSAgICAgIGNhc2UgMHgwMEFBOgotICAgICAgICByZXR1cm4oKENIQVIp KDB4OUEgJiAweGZmKSk7ICAgIC8qIEZFTUlOSU5FIE9SRElOQUwgSU5ESUNBVE9SICovCi0gICAg ICBjYXNlIDB4MDBCQToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDlCICYgMHhmZikpOyAgICAv KiBNQVNDVUxJTkUgT1JESU5BTCBJTkRJQ0FUT1IgKi8KLSAgICAgIGNhc2UgMHgwMEU2OgotICAg ICAgICByZXR1cm4oKENIQVIpKDB4OUMgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExJR0FU VVJFIEFFICovCi0gICAgICBjYXNlIDB4MDBCODoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDlE ICYgMHhmZikpOyAgICAvKiBDRURJTExBICovCi0gICAgICBjYXNlIDB4MDBDNjoKLSAgICAgICAg cmV0dXJuKChDSEFSKSgweDlFICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExJR0FUVVJF IEFFICovCi0gICAgICBjYXNlIDB4MDBBNDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweDlGICYg MHhmZikpOyAgICAvKiBDVVJSRU5DWSBTSUdOICovCi0gICAgICBjYXNlIDB4MDBCNToKLSAgICAg ICAgcmV0dXJuKChDSEFSKSgweEEwICYgMHhmZikpOyAgICAvKiBNSUNSTyBTSUdOICovCi0gICAg ICBjYXNlIDB4MDA3RToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEExICYgMHhmZikpOyAgICAv KiBUSUxERSAqLwotICAgICAgY2FzZSAweDAwNzM6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhB MiAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIFMgKi8KLSAgICAgIGNhc2UgMHgw MDc0OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QTMgJiAweGZmKSk7ICAgIC8qIExBVElOIFNN QUxMIExFVFRFUiBUICovCi0gICAgICBjYXNlIDB4MDA3NToKLSAgICAgICAgcmV0dXJuKChDSEFS KSgweEE0ICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgVSAqLwotICAgICAgY2Fz ZSAweDAwNzY6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhBNSAmIDB4ZmYpKTsgICAgLyogTEFU SU4gU01BTEwgTEVUVEVSIFYgKi8KLSAgICAgIGNhc2UgMHgwMDc3OgotICAgICAgICByZXR1cm4o KENIQVIpKDB4QTYgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBXICovCi0gICAg ICBjYXNlIDB4MDA3ODoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEE3ICYgMHhmZikpOyAgICAv KiBMQVRJTiBTTUFMTCBMRVRURVIgWCAqLwotICAgICAgY2FzZSAweDAwNzk6Ci0gICAgICAgIHJl dHVybigoQ0hBUikoMHhBOCAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIFkgKi8K LSAgICAgIGNhc2UgMHgwMDdBOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QTkgJiAweGZmKSk7 ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBaICovCi0gICAgICBjYXNlIDB4MDBBMToKLSAgICAg ICAgcmV0dXJuKChDSEFSKSgweEFBICYgMHhmZikpOyAgICAvKiBJTlZFUlRFRCBFWENMQU1BVElP TiBNQVJLICovCi0gICAgICBjYXNlIDB4MDBCRjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEFC ICYgMHhmZikpOyAgICAvKiBJTlZFUlRFRCBRVUVTVElPTiBNQVJLICovCi0gICAgICBjYXNlIDB4 MDBEMDoKLSAgICAgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgRVRIIChJQ0VMQU5ESUMpICov Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhBQyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMERE OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QUQgJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElU QUwgTEVUVEVSIFkgV0lUSCBBQ1VURSAqLwotICAgICAgY2FzZSAweDAwREU6Ci0gICAgICAgIC8q IExBVElOIENBUElUQUwgTEVUVEVSIFRIT1JOIChJQ0VMQU5ESUMpICovCi0gICAgICAgIHJldHVy bigoQ0hBUikoMHhBRSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMEFFOgotICAgICAgICByZXR1 cm4oKENIQVIpKDB4QUYgJiAweGZmKSk7ICAgIC8qIFJFR0lTVEVSRUQgU0lHTiAqLwotICAgICAg Y2FzZSAweDAwNUU6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhCMCAmIDB4ZmYpKTsgICAgLyog Q0lSQ1VNRkxFWCBBQ0NFTlQgKi8KLSAgICAgIGNhc2UgMHgwMEEzOgotICAgICAgICByZXR1cm4o KENIQVIpKDB4QjEgJiAweGZmKSk7ICAgIC8qIFBPVU5EIFNJR04gKi8KLSAgICAgIGNhc2UgMHgw MEE1OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QjIgJiAweGZmKSk7ICAgIC8qIFlFTiBTSUdO ICovCi0gICAgICBjYXNlIDB4MDBCNzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEIzICYgMHhm ZikpOyAgICAvKiBNSURETEUgRE9UICovCi0gICAgICBjYXNlIDB4MDBBOToKLSAgICAgICAgcmV0 dXJuKChDSEFSKSgweEI0ICYgMHhmZikpOyAgICAvKiBDT1BZUklHSFQgU0lHTiAqLwotICAgICAg Y2FzZSAweDAwQTc6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhCNSAmIDB4ZmYpKTsgICAgLyog U0VDVElPTiBTSUdOICovCi0gICAgICBjYXNlIDB4MDBCNjoKLSAgICAgICAgcmV0dXJuKChDSEFS KSgweEI2ICYgMHhmZikpOyAgICAvKiBQSUxDUk9XIFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMEJD OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QjcgJiAweGZmKSk7ICAgIC8qIFZVTEdBUiBGUkFD VElPTiBPTkUgUVVBUlRFUiAqLwotICAgICAgY2FzZSAweDAwQkQ6Ci0gICAgICAgIHJldHVybigo Q0hBUikoMHhCOCAmIDB4ZmYpKTsgICAgLyogVlVMR0FSIEZSQUNUSU9OIE9ORSBIQUxGICovCi0g ICAgICBjYXNlIDB4MDBCRToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEI5ICYgMHhmZikpOyAg ICAvKiBWVUxHQVIgRlJBQ1RJT04gVEhSRUUgUVVBUlRFUlMgKi8KLSAgICAgIGNhc2UgMHgwMDVC OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QkEgJiAweGZmKSk7ICAgIC8qIExFRlQgU1FVQVJF IEJSQUNLRVQgKi8KLSAgICAgIGNhc2UgMHgwMDVEOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4 QkIgJiAweGZmKSk7ICAgIC8qIFJJR0hUIFNRVUFSRSBCUkFDS0VUICovCi0gICAgICBjYXNlIDB4 MDBBRjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEJDICYgMHhmZikpOyAgICAvKiBNQUNST04g Ki8KLSAgICAgIGNhc2UgMHgwMEE4OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QkQgJiAweGZm KSk7ICAgIC8qIERJQUVSRVNJUyAqLwotICAgICAgY2FzZSAweDAwQjQ6Ci0gICAgICAgIHJldHVy bigoQ0hBUikoMHhCRSAmIDB4ZmYpKTsgICAgLyogQUNVVEUgQUNDRU5UICovCi0gICAgICBjYXNl IDB4MDBENzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEJGICYgMHhmZikpOyAgICAvKiBNVUxU SVBMSUNBVElPTiBTSUdOICovCi0gICAgICBjYXNlIDB4MDA3QjoKLSAgICAgICAgcmV0dXJuKChD SEFSKSgweEMwICYgMHhmZikpOyAgICAvKiBMRUZUIENVUkxZIEJSQUNLRVQgKi8KLSAgICAgIGNh c2UgMHgwMDQxOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QzEgJiAweGZmKSk7ICAgIC8qIExB VElOIENBUElUQUwgTEVUVEVSIEEgKi8KLSAgICAgIGNhc2UgMHgwMDQyOgotICAgICAgICByZXR1 cm4oKENIQVIpKDB4QzIgJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIEIgKi8K LSAgICAgIGNhc2UgMHgwMDQzOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QzMgJiAweGZmKSk7 ICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIEMgKi8KLSAgICAgIGNhc2UgMHgwMDQ0OgotICAg ICAgICByZXR1cm4oKENIQVIpKDB4QzQgJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwgTEVU VEVSIEQgKi8KLSAgICAgIGNhc2UgMHgwMDQ1OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QzUg JiAweGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIEUgKi8KLSAgICAgIGNhc2UgMHgw MDQ2OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QzYgJiAweGZmKSk7ICAgIC8qIExBVElOIENB UElUQUwgTEVUVEVSIEYgKi8KLSAgICAgIGNhc2UgMHgwMDQ3OgotICAgICAgICByZXR1cm4oKENI QVIpKDB4QzcgJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIEcgKi8KLSAgICAg IGNhc2UgMHgwMDQ4OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4QzggJiAweGZmKSk7ICAgIC8q IExBVElOIENBUElUQUwgTEVUVEVSIEggKi8KLSAgICAgIGNhc2UgMHgwMDQ5OgotICAgICAgICBy ZXR1cm4oKENIQVIpKDB4QzkgJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIEkg Ki8KLSAgICAgIGNhc2UgMHgwMEFEOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4Q0EgJiAweGZm KSk7ICAgIC8qIFNPRlQgSFlQSEVOICovCi0gICAgICBjYXNlIDB4MDBGNDoKLSAgICAgICAgcmV0 dXJuKChDSEFSKSgweENCICYgMHhmZikpOyAgICAvKiBTTUFMTCBMRVRURVIgTyBXSVRIIENJUkNV TUZMRVggKi8KLSAgICAgIGNhc2UgMHgwMEY2OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4Q0Mg JiAweGZmKSk7ICAgIC8qIFNNQUxMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTICovCi0gICAgICBj YXNlIDB4MDBGMjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweENEICYgMHhmZikpOyAgICAvKiBM QVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEdSQVZFICovCi0gICAgICBjYXNlIDB4MDBGMzoKLSAg ICAgICAgcmV0dXJuKChDSEFSKSgweENFICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRU RVIgTyBXSVRIIEFDVVRFICovCi0gICAgICBjYXNlIDB4MDBGNToKLSAgICAgICAgcmV0dXJuKChD SEFSKSgweENGICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFRJTERF ICovCi0gICAgICBjYXNlIDB4MDA3RDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEQwICYgMHhm ZikpOyAgICAvKiBSSUdIVCBDVVJMWSBCUkFDS0VUICovCi0gICAgICBjYXNlIDB4MDA0QToKLSAg ICAgICAgcmV0dXJuKChDSEFSKSgweEQxICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExF VFRFUiBKICovCi0gICAgICBjYXNlIDB4MDA0QjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEQy ICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBLICovCi0gICAgICBjYXNlIDB4 MDA0QzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEQzICYgMHhmZikpOyAgICAvKiBMQVRJTiBD QVBJVEFMIExFVFRFUiBMICovCi0gICAgICBjYXNlIDB4MDA0RDoKLSAgICAgICAgcmV0dXJuKChD SEFSKSgweEQ0ICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBNICovCi0gICAg ICBjYXNlIDB4MDA0RToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEQ1ICYgMHhmZikpOyAgICAv KiBMQVRJTiBDQVBJVEFMIExFVFRFUiBOICovCi0gICAgICBjYXNlIDB4MDA0RjoKLSAgICAgICAg cmV0dXJuKChDSEFSKSgweEQ2ICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBP ICovCi0gICAgICBjYXNlIDB4MDA1MDoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEQ3ICYgMHhm ZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBQICovCi0gICAgICBjYXNlIDB4MDA1MToK LSAgICAgICAgcmV0dXJuKChDSEFSKSgweEQ4ICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFM IExFVFRFUiBRICovCi0gICAgICBjYXNlIDB4MDA1MjoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgw eEQ5ICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBSICovCi0gICAgICBjYXNl IDB4MDBCOToKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweERBICYgMHhmZikpOyAgICAvKiBTVVBF UlNDUklQVCBPTkUgKi8KLSAgICAgIGNhc2UgMHgwMEZCOgotICAgICAgICByZXR1cm4oKENIQVIp KDB4REIgJiAweGZmKSk7ICAgIC8qIFNNQUxMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWCAqLwot ICAgICAgY2FzZSAweDAwRkM6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhEQyAmIDB4ZmYpKTsg ICAgLyogU01BTEwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVMgKi8KLSAgICAgIGNhc2UgMHgwMEY5 OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4REQgJiAweGZmKSk7ICAgIC8qIFNNQUxMIExFVFRF UiBVIFdJVEggR1JBVkUgKi8KLSAgICAgIGNhc2UgMHgwMEZBOgotICAgICAgICByZXR1cm4oKENI QVIpKDB4REUgJiAweGZmKSk7ICAgIC8qIFNNQUxMIExFVFRFUiBVIFdJVEggQUNVVEUgKi8KLSAg ICAgIGNhc2UgMHgwMEZGOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4REYgJiAweGZmKSk7ICAg IC8qIFNNQUxMIExFVFRFUiBZIFdJVEggRElBRVJFU0lTICovCi0gICAgICBjYXNlIDB4MDA1QzoK LSAgICAgICAgcmV0dXJuKChDSEFSKSgweEUwICYgMHhmZikpOyAgICAvKiBSRVZFUlNFIFNPTElE VVMgKi8KLSAgICAgIGNhc2UgMHgwMEY3OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RTEgJiAw eGZmKSk7ICAgIC8qIERJVklTSU9OIFNJR04gKi8KLSAgICAgIGNhc2UgMHgwMDUzOgotICAgICAg ICByZXR1cm4oKENIQVIpKDB4RTIgJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVS IFMgKi8KLSAgICAgIGNhc2UgMHgwMDU0OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RTMgJiAw eGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIFQgKi8KLSAgICAgIGNhc2UgMHgwMDU1 OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RTQgJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElU QUwgTEVUVEVSIFUgKi8KLSAgICAgIGNhc2UgMHgwMDU2OgotICAgICAgICByZXR1cm4oKENIQVIp KDB4RTUgJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIFYgKi8KLSAgICAgIGNh c2UgMHgwMDU3OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RTYgJiAweGZmKSk7ICAgIC8qIExB VElOIENBUElUQUwgTEVUVEVSIFcgKi8KLSAgICAgIGNhc2UgMHgwMDU4OgotICAgICAgICByZXR1 cm4oKENIQVIpKDB4RTcgJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIFggKi8K LSAgICAgIGNhc2UgMHgwMDU5OgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RTggJiAweGZmKSk7 ICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIFkgKi8KLSAgICAgIGNhc2UgMHgwMDVBOgotICAg ICAgICByZXR1cm4oKENIQVIpKDB4RTkgJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwgTEVU VEVSIFogKi8KLSAgICAgIGNhc2UgMHgwMEIyOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RUEg JiAweGZmKSk7ICAgIC8qIFNVUEVSU0NSSVBUIFRXTyAqLwotICAgICAgY2FzZSAweDAwRDQ6Ci0g ICAgICAgIHJldHVybigoQ0hBUikoMHhFQiAmIDB4ZmYpKTsgICAgLyogQ0FQSVRBTCBMRVRURVIg TyBXSVRIIENJUkNVTUZMRVggKi8KLSAgICAgIGNhc2UgMHgwMEQ2OgotICAgICAgICByZXR1cm4o KENIQVIpKDB4RUMgJiAweGZmKSk7ICAgIC8qIENBUElUQUwgTEVUVEVSIE8gV0lUSCBESUFFUkVT SVMgKi8KLSAgICAgIGNhc2UgMHgwMEQyOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RUQgJiAw eGZmKSk7ICAgIC8qIENBUElUQUwgTEVUVEVSIE8gV0lUSCBHUkFWRSAqLwotICAgICAgY2FzZSAw eDAwRDM6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhFRSAmIDB4ZmYpKTsgICAgLyogQ0FQSVRB TCBMRVRURVIgTyBXSVRIIEFDVVRFICovCi0gICAgICBjYXNlIDB4MDBENToKLSAgICAgICAgcmV0 dXJuKChDSEFSKSgweEVGICYgMHhmZikpOyAgICAvKiBDQVBJVEFMIExFVFRFUiBPIFdJVEggVElM REUgKi8KLSAgICAgIGNhc2UgMHgwMDMwOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RjAgJiAw eGZmKSk7ICAgIC8qIERJR0lUIFpFUk8gKi8KLSAgICAgIGNhc2UgMHgwMDMxOgotICAgICAgICBy ZXR1cm4oKENIQVIpKDB4RjEgJiAweGZmKSk7ICAgIC8qIERJR0lUIE9ORSAqLwotICAgICAgY2Fz ZSAweDAwMzI6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhGMiAmIDB4ZmYpKTsgICAgLyogRElH SVQgVFdPICovCi0gICAgICBjYXNlIDB4MDAzMzoKLSAgICAgICAgcmV0dXJuKChDSEFSKSgweEYz ICYgMHhmZikpOyAgICAvKiBESUdJVCBUSFJFRSAqLwotICAgICAgY2FzZSAweDAwMzQ6Ci0gICAg ICAgIHJldHVybigoQ0hBUikoMHhGNCAmIDB4ZmYpKTsgICAgLyogRElHSVQgRk9VUiAqLwotICAg ICAgY2FzZSAweDAwMzU6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhGNSAmIDB4ZmYpKTsgICAg LyogRElHSVQgRklWRSAqLwotICAgICAgY2FzZSAweDAwMzY6Ci0gICAgICAgIHJldHVybigoQ0hB UikoMHhGNiAmIDB4ZmYpKTsgICAgLyogRElHSVQgU0lYICovCi0gICAgICBjYXNlIDB4MDAzNzoK LSAgICAgICAgcmV0dXJuKChDSEFSKSgweEY3ICYgMHhmZikpOyAgICAvKiBESUdJVCBTRVZFTiAq LwotICAgICAgY2FzZSAweDAwMzg6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhGOCAmIDB4ZmYp KTsgICAgLyogRElHSVQgRUlHSFQgKi8KLSAgICAgIGNhc2UgMHgwMDM5OgotICAgICAgICByZXR1 cm4oKENIQVIpKDB4RjkgJiAweGZmKSk7ICAgIC8qIERJR0lUIE5JTkUgKi8KLSAgICAgIGNhc2Ug MHgwMEIzOgotICAgICAgICByZXR1cm4oKENIQVIpKDB4RkEgJiAweGZmKSk7ICAgIC8qIFNVUEVS U0NSSVBUIFRIUkVFICovCi0gICAgICBjYXNlIDB4MDBEQjoKLSAgICAgICAgcmV0dXJuKChDSEFS KSgweEZCICYgMHhmZikpOyAgICAvKiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWCAq LwotICAgICAgY2FzZSAweDAwREM6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhGQyAmIDB4ZmYp KTsgICAgLyogQ0FQSVRBTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJUyAqLwotICAgICAgY2FzZSAw eDAwRDk6Ci0gICAgICAgIHJldHVybigoQ0hBUikoMHhGRCAmIDB4ZmYpKTsgICAgLyogTEFUSU4g Q0FQSVRBTCBMRVRURVIgVSBXSVRIIEdSQVZFICovCi0gICAgICBjYXNlIDB4MDBEQToKLSAgICAg ICAgcmV0dXJuKChDSEFSKSgweEZFICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRF UiBVIFdJVEggQUNVVEUgKi8KLSAgICAgIGNhc2UgMHgwMDlGOgotICAgICAgICByZXR1cm4oKENI QVIpKDB4RkYgJiAweGZmKSk7ICAgIC8qIENPTlRST0wgKi8KLSAgICBkZWZhdWx0OiByZXR1cm4o MHgwMDNmKTsKLSAgICB9Ci19Ci0KLQotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFBDIENvZGUgUGFnZSA4NTUgKi8KLSNpZmRlZiBDS19BTlNJQwotdHhfY3A4NTUo VVNIT1JUIGMpCi0jZWxzZQotdHhfY3A4NTUoYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5T SUMgKi8KLXsKLSAgICBpZiAoYyA8IDB4ODApICAgICAgICAgICAgICAgICAgICAgICAvKiBIYXMg QzEgZ3JhcGhpY3MgKi8KLSAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKLSAgICBzd2l0 Y2ggKGMpIHsKLSAgICAgIGNhc2UgMHgwMGE0OiByZXR1cm4oKENIQVIpKDIwNyAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGE3OiByZXR1cm4oKENIQVIpKDI1MyAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGFiOiByZXR1cm4oKENIQVIpKDE3NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGJi OiByZXR1cm4oKENIQVIpKDE3NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDAxOiByZXR1cm4o KENIQVIpKDEzMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDAyOiByZXR1cm4oKENIQVIpKDEy OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDAzOiByZXR1cm4oKENIQVIpKDEzMSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwNDA0OiByZXR1cm4oKENIQVIpKDEzNSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwNDA1OiByZXR1cm4oKENIQVIpKDEzNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw NDA2OiByZXR1cm4oKENIQVIpKDEzOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDA3OiByZXR1 cm4oKENIQVIpKDE0MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDA4OiByZXR1cm4oKENIQVIp KDE0MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDA5OiByZXR1cm4oKENIQVIpKDE0NSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDBhOiByZXR1cm4oKENIQVIpKDE0NyAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwNDBiOiByZXR1cm4oKENIQVIpKDE0OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwNDBjOiByZXR1cm4oKENIQVIpKDE1MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDBlOiBy ZXR1cm4oKENIQVIpKDE1MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDBmOiByZXR1cm4oKENI QVIpKDE1NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDEwOiByZXR1cm4oKENIQVIpKDE2MSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDExOiByZXR1cm4oKENIQVIpKDE2MyAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwNDEyOiByZXR1cm4oKENIQVIpKDIzNiAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwNDEzOiByZXR1cm4oKENIQVIpKDE3MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDE0 OiByZXR1cm4oKENIQVIpKDE2NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDE1OiByZXR1cm4o KENIQVIpKDE2OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDE2OiByZXR1cm4oKENIQVIpKDIz NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDE3OiByZXR1cm4oKENIQVIpKDI0NCAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwNDE4OiByZXR1cm4oKENIQVIpKDE4NCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwNDE5OiByZXR1cm4oKENIQVIpKDE5MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw NDFhOiByZXR1cm4oKENIQVIpKDE5OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDFiOiByZXR1 cm4oKENIQVIpKDIwOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDFjOiByZXR1cm4oKENIQVIp KDIxMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDFkOiByZXR1cm4oKENIQVIpKDIxMyAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDFlOiByZXR1cm4oKENIQVIpKDIxNSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwNDFmOiByZXR1cm4oKENIQVIpKDIyMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwNDIwOiByZXR1cm4oKENIQVIpKDIyNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDIxOiBy ZXR1cm4oKENIQVIpKDIyOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDIyOiByZXR1cm4oKENI QVIpKDIzMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDIzOiByZXR1cm4oKENIQVIpKDIzMiAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDI0OiByZXR1cm4oKENIQVIpKDE3MSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwNDI1OiByZXR1cm4oKENIQVIpKDE4MiAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwNDI2OiByZXR1cm4oKENIQVIpKDE2NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDI3 OiByZXR1cm4oKENIQVIpKDI1MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDI4OiByZXR1cm4o KENIQVIpKDI0NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDI5OiByZXR1cm4oKENIQVIpKDI1 MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDJhOiByZXR1cm4oKENIQVIpKDE1OSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwNDJiOiByZXR1cm4oKENIQVIpKDI0MiAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwNDJjOiByZXR1cm4oKENIQVIpKDIzOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw NDJkOiByZXR1cm4oKENIQVIpKDI0OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDJlOiByZXR1 cm4oKENIQVIpKDE1NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDJmOiByZXR1cm4oKENIQVIp KDIyNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDMwOiByZXR1cm4oKENIQVIpKDE2MCAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDMxOiByZXR1cm4oKENIQVIpKDE2MiAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwNDMyOiByZXR1cm4oKENIQVIpKDIzNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwNDMzOiByZXR1cm4oKENIQVIpKDE3MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDM0OiBy ZXR1cm4oKENIQVIpKDE2NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDM1OiByZXR1cm4oKENI QVIpKDE2OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDM2OiByZXR1cm4oKENIQVIpKDIzMyAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDM3OiByZXR1cm4oKENIQVIpKDI0MyAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwNDM4OiByZXR1cm4oKENIQVIpKDE4MyAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwNDM5OiByZXR1cm4oKENIQVIpKDE4OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDNh OiByZXR1cm4oKENIQVIpKDE5OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDNiOiByZXR1cm4o KENIQVIpKDIwOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDNjOiByZXR1cm4oKENIQVIpKDIx MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDNkOiByZXR1cm4oKENIQVIpKDIxMiAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwNDNlOiByZXR1cm4oKENIQVIpKDIxNCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwNDNmOiByZXR1cm4oKENIQVIpKDIxNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw NDQwOiByZXR1cm4oKENIQVIpKDIyNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQxOiByZXR1 cm4oKENIQVIpKDIyNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQyOiByZXR1cm4oKENIQVIp KDIyOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQzOiByZXR1cm4oKENIQVIpKDIzMSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQ0OiByZXR1cm4oKENIQVIpKDE3MCAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwNDQ1OiByZXR1cm4oKENIQVIpKDE4MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwNDQ2OiByZXR1cm4oKENIQVIpKDE2NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQ3OiBy ZXR1cm4oKENIQVIpKDI1MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQ4OiByZXR1cm4oKENI QVIpKDI0NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQ5OiByZXR1cm4oKENIQVIpKDI0OSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDRhOiByZXR1cm4oKENIQVIpKDE1OCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwNDRiOiByZXR1cm4oKENIQVIpKDI0MSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwNDRjOiByZXR1cm4oKENIQVIpKDIzNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDRk OiByZXR1cm4oKENIQVIpKDI0NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDRlOiByZXR1cm4o KENIQVIpKDE1NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDRmOiByZXR1cm4oKENIQVIpKDIy MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDUxOiByZXR1cm4oKENIQVIpKDEzMiAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwNDUyOiByZXR1cm4oKENIQVIpKDEyOCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwNDUzOiByZXR1cm4oKENIQVIpKDEzMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw NDU0OiByZXR1cm4oKENIQVIpKDEzNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDU1OiByZXR1 cm4oKENIQVIpKDEzNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDU2OiByZXR1cm4oKENIQVIp KDEzOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDU3OiByZXR1cm4oKENIQVIpKDE0MCAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDU4OiByZXR1cm4oKENIQVIpKDE0MiAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwNDU5OiByZXR1cm4oKENIQVIpKDE0NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwNDVhOiByZXR1cm4oKENIQVIpKDE0NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDViOiBy ZXR1cm4oKENIQVIpKDE0OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDVjOiByZXR1cm4oKENI QVIpKDE1MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDVlOiByZXR1cm4oKENIQVIpKDE1MiAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDVmOiByZXR1cm4oKENIQVIpKDE1NCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgyMTE2OiByZXR1cm4oKENIQVIpKDIzOSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgyNTAwOiByZXR1cm4oKENIQVIpKDE5NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTAy OiByZXR1cm4oKENIQVIpKDE3OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTBjOiByZXR1cm4o KENIQVIpKDIxOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTEwOiByZXR1cm4oKENIQVIpKDE5 MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTE0OiByZXR1cm4oKENIQVIpKDE5MiAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgyNTE4OiByZXR1cm4oKENIQVIpKDIxNyAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgyNTFjOiByZXR1cm4oKENIQVIpKDE5NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy NTI0OiByZXR1cm4oKENIQVIpKDE4MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTJjOiByZXR1 cm4oKENIQVIpKDE5NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTM0OiByZXR1cm4oKENIQVIp KDE5MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTNjOiByZXR1cm4oKENIQVIpKDE5NyAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTUwOiByZXR1cm4oKENIQVIpKDIwNSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgyNTUxOiByZXR1cm4oKENIQVIpKDE4NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgyNTU0OiByZXR1cm4oKENIQVIpKDIwMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTU3OiBy ZXR1cm4oKENIQVIpKDE4NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTVhOiByZXR1cm4oKENI QVIpKDIwMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTVkOiByZXR1cm4oKENIQVIpKDE4OCAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTYwOiByZXR1cm4oKENIQVIpKDIwNCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgyNTYzOiByZXR1cm4oKENIQVIpKDE4NSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgyNTY2OiByZXR1cm4oKENIQVIpKDIwMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTY5 OiByZXR1cm4oKENIQVIpKDIwMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTZjOiByZXR1cm4o KENIQVIpKDIwNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTgwOiByZXR1cm4oKENIQVIpKDIy MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTg0OiByZXR1cm4oKENIQVIpKDIyMCAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgyNTg4OiByZXR1cm4oKENIQVIpKDIxOSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgyNTkxOiByZXR1cm4oKENIQVIpKDE3NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy NTkyOiByZXR1cm4oKENIQVIpKDE3NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTkzOiByZXR1 cm4oKENIQVIpKDE3OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNWEwOiByZXR1cm4oKENIQVIp KDI1NCAmIDB4ZmYpKTsKLSAgICAgIGRlZmF1bHQ6IHJldHVybih0eF9jcHN1YihjKSk7ICAgICAv KiBGb3IgYm94IGNoYXJhY3RlcnMgZXRjICovCi0gICAgfQotfQotCi1pbnQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogUEMgQ29kZSBQYWdlIDg1NiAqLwotI2lmZGVmIENL X0FOU0lDCi10eF9jcDg1NihVU0hPUlQgYykKLSNlbHNlCi10eF9jcDg1NihjKSBVU0hPUlQgYzsK LSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjIDwgMHg4MCkgICAgICAgICAgICAg ICAgICAgICAgIC8qIEhhcyBDMSBncmFwaGljcyAqLwotICAgICAgcmV0dXJuKChDSEFSKShjICYg MHhmZikpOwotICAgIHN3aXRjaCAoYykgewotICAgICAgY2FzZSAweDAwYTA6IHJldHVybigoQ0hB UikoMHhmZiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGE3OiByZXR1cm4oKENIQVIpKDB4ZDYg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiMDogcmV0dXJuKChDSEFSKSgweGY4ICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwYjE6IHJldHVybigoQ0hBUikoMHhmMSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGIyOiByZXR1cm4oKENIQVIpKDB4ZmQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDBiNTogcmV0dXJuKChDSEFSKSgweGU2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjc6IHJl dHVybigoQ0hBUikoMHhmYSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGRmOiByZXR1cm4oKENI QVIpKDB4ZTEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmNzogcmV0dXJuKChDSEFSKSgweGY2 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzOTM6IHJldHVybigoQ0hBUikoMHhlMiAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMzk4OiByZXR1cm4oKENIQVIpKDB4ZTkgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDNhMzogcmV0dXJuKChDSEFSKSgweGU0ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAzYTY6IHJldHVybigoQ0hBUikoMHhlOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2E5OiBy ZXR1cm4oKENIQVIpKDB4ZWEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDNiMTogcmV0dXJuKChD SEFSKSgweGUwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYjQ6IHJldHVybigoQ0hBUikoMHhl YiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwM2I1OiByZXR1cm4oKENIQVIpKDB4ZWUgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDNjMDogcmV0dXJuKChDSEFSKSgweGUzICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAzYzM6IHJldHVybigoQ0hBUikoMHhlNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwM2M0OiByZXR1cm4oKENIQVIpKDB4ZTcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDNjNjog cmV0dXJuKChDSEFSKSgweGVkICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MTA6IHJldHVybigo Q0hBUikoMHg4MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDExOiByZXR1cm4oKENIQVIpKDB4 ODEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxMjogcmV0dXJuKChDSEFSKSgweDgyICYgMHhm ZikpOwotICAgICAgY2FzZSAweDA0MTM6IHJldHVybigoQ0hBUikoMHg4MyAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwNDE0OiByZXR1cm4oKENIQVIpKDB4ODQgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDQxNTogcmV0dXJuKChDSEFSKSgweDg1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MTY6 IHJldHVybigoQ0hBUikoMHg4NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDE3OiByZXR1cm4o KENIQVIpKDB4ODcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxODogcmV0dXJuKChDSEFSKSgw eDg4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MTk6IHJldHVybigoQ0hBUikoMHg4OSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDFhOiByZXR1cm4oKENIQVIpKDB4OGEgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDQxYjogcmV0dXJuKChDSEFSKSgweDhiICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDA0MWM6IHJldHVybigoQ0hBUikoMHg4YyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDFk OiByZXR1cm4oKENIQVIpKDB4OGQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQxZTogcmV0dXJu KChDSEFSKSgweDhlICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MWY6IHJldHVybigoQ0hBUiko MHg4ZiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDIwOiByZXR1cm4oKENIQVIpKDB4OTAgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyMTogcmV0dXJuKChDSEFSKSgweDkxICYgMHhmZikpOwot ICAgICAgY2FzZSAweDA0MjI6IHJldHVybigoQ0hBUikoMHg5MiAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwNDIzOiByZXR1cm4oKENIQVIpKDB4OTMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQy NDogcmV0dXJuKChDSEFSKSgweDk0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MjU6IHJldHVy bigoQ0hBUikoMHg5NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDI2OiByZXR1cm4oKENIQVIp KDB4OTYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyNzogcmV0dXJuKChDSEFSKSgweDk3ICYg MHhmZikpOwotICAgICAgY2FzZSAweDA0Mjg6IHJldHVybigoQ0hBUikoMHg5OCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwNDI5OiByZXR1cm4oKENIQVIpKDB4OTkgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDQyYTogcmV0dXJuKChDSEFSKSgweDlhICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0 MmI6IHJldHVybigoQ0hBUikoMHg5YiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDJjOiByZXR1 cm4oKENIQVIpKDB4OWMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQyZDogcmV0dXJuKChDSEFS KSgweDlkICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MmU6IHJldHVybigoQ0hBUikoMHg5ZSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDJmOiByZXR1cm4oKENIQVIpKDB4OWYgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDQzMDogcmV0dXJuKChDSEFSKSgweGEwICYgMHhmZikpOwotICAgICAg Y2FzZSAweDA0MzE6IHJldHVybigoQ0hBUikoMHhhMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw NDMyOiByZXR1cm4oKENIQVIpKDB4YTIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzMzogcmV0 dXJuKChDSEFSKSgweGEzICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0MzQ6IHJldHVybigoQ0hB UikoMHhhNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDM1OiByZXR1cm4oKENIQVIpKDB4YTUg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzNjogcmV0dXJuKChDSEFSKSgweGE2ICYgMHhmZikp OwotICAgICAgY2FzZSAweDA0Mzc6IHJldHVybigoQ0hBUikoMHhhNyAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwNDM4OiByZXR1cm4oKENIQVIpKDB4YTggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDQzOTogcmV0dXJuKChDSEFSKSgweGE5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0M2E6IHJl dHVybigoQ0hBUikoMHhhYSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDNiOiByZXR1cm4oKENI QVIpKDB4YWIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQzYzogcmV0dXJuKChDSEFSKSgweGFj ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0M2Q6IHJldHVybigoQ0hBUikoMHhhZCAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwNDNlOiByZXR1cm4oKENIQVIpKDB4YWUgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDQzZjogcmV0dXJuKChDSEFSKSgweGFmICYgMHhmZikpOwotICAgICAgY2FzZSAw eDA0NDA6IHJldHVybigoQ0hBUikoMHhiMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQxOiBy ZXR1cm4oKENIQVIpKDB4YjEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0MjogcmV0dXJuKChD SEFSKSgweGIyICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NDM6IHJldHVybigoQ0hBUikoMHhi MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQ0OiByZXR1cm4oKENIQVIpKDB4YjQgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDQ0NTogcmV0dXJuKChDSEFSKSgweGI1ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDA0NDY6IHJldHVybigoQ0hBUikoMHhiNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwNDQ3OiByZXR1cm4oKENIQVIpKDB4YjcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0ODog cmV0dXJuKChDSEFSKSgweGI4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NDk6IHJldHVybigo Q0hBUikoMHhiOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDRhOiByZXR1cm4oKENIQVIpKDB4 YmEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDQ0YjogcmV0dXJuKChDSEFSKSgweGJiICYgMHhm ZikpOwotICAgICAgY2FzZSAweDA0NGM6IHJldHVybigoQ0hBUikoMHhiYyAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwNDRkOiByZXR1cm4oKENIQVIpKDB4YmQgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDQ0ZTogcmV0dXJuKChDSEFSKSgweGJlICYgMHhmZikpOwotICAgICAgY2FzZSAweDA0NGY6 IHJldHVybigoQ0hBUikoMHhiZiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMDdmOiByZXR1cm4o KENIQVIpKDB4ZmMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjExNjogcmV0dXJuKChDSEFSKSgw eGQ1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIyMTk6IHJldHVybigoQ0hBUikoMHhmOSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjFhOiByZXR1cm4oKENIQVIpKDB4ZmIgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MjIxZTogcmV0dXJuKChDSEFSKSgweGVjICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDIyMjk6IHJldHVybigoQ0hBUikoMHhlZiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjQ4 OiByZXR1cm4oKENIQVIpKDB4ZjcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjI2MTogcmV0dXJu KChDSEFSKSgweGYwICYgMHhmZikpOwotICAgICAgY2FzZSAweDIyNjQ6IHJldHVybigoQ0hBUiko MHhmMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjY1OiByZXR1cm4oKENIQVIpKDB4ZjIgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MjMyMDogcmV0dXJuKChDSEFSKSgweGY0ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDIzMjE6IHJldHVybigoQ0hBUikoMHhmNSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgyNTAwOiByZXR1cm4oKENIQVIpKDB4YzQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUw MjogcmV0dXJuKChDSEFSKSgweGQzICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MGM6IHJldHVy bigoQ0hBUikoMHhkYSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTEwOiByZXR1cm4oKENIQVIp KDB4Y2YgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUxNDogcmV0dXJuKChDSEFSKSgweGMwICYg MHhmZikpOwotICAgICAgY2FzZSAweDI1MTg6IHJldHVybigoQ0hBUikoMHhkOSAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgyNTFjOiByZXR1cm4oKENIQVIpKDB4YzMgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MjUyNDogcmV0dXJuKChDSEFSKSgweGQ0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1 MmM6IHJldHVybigoQ0hBUikoMHhjMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTM0OiByZXR1 cm4oKENIQVIpKDB4YzEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUzYzogcmV0dXJuKChDSEFS KSgweGM1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NTA6IHJldHVybigoQ0hBUikoMHhjZCAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTUxOiByZXR1cm4oKENIQVIpKDB4YzcgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MjU1NDogcmV0dXJuKChDSEFSKSgweGM5ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDI1NTc6IHJldHVybigoQ0hBUikoMHhkNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy NTVhOiByZXR1cm4oKENIQVIpKDB4YzggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1ZDogcmV0 dXJuKChDSEFSKSgweGQ4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NjA6IHJldHVybigoQ0hB UikoMHhjYyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTYzOiByZXR1cm4oKENIQVIpKDB4YzYg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2NjogcmV0dXJuKChDSEFSKSgweGNiICYgMHhmZikp OwotICAgICAgY2FzZSAweDI1Njk6IHJldHVybigoQ0hBUikoMHhjYSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgyNTZjOiByZXR1cm4oKENIQVIpKDB4Y2UgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MjU4MDogcmV0dXJuKChDSEFSKSgweGRmICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1ODQ6IHJl dHVybigoQ0hBUikoMHhkYyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTg4OiByZXR1cm4oKENI QVIpKDB4ZGIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU4YzogcmV0dXJuKChDSEFSKSgweGRk ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1OTA6IHJldHVybigoQ0hBUikoMHhkZSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgyNTkxOiByZXR1cm4oKENIQVIpKDB4ZDAgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MjU5MjogcmV0dXJuKChDSEFSKSgweGQxICYgMHhmZikpOwotICAgICAgY2FzZSAw eDI1OTM6IHJldHVybigoQ0hBUikoMHhkMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNWEwOiBy ZXR1cm4oKENIQVIpKDB4ZmUgJiAweGZmKSk7Ci0gICAgICBkZWZhdWx0OiByZXR1cm4odHhfY3Bz dWIoYykpOyAgICAgLyogRm9yIGJveCBjaGFyYWN0ZXJzIGV0YyAqLwotICAgIH0KLX0KLQotaW50 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBDIENvZGUgUGFnZSA4NTcg Ki8KLSNpZmRlZiBDS19BTlNJQwotdHhfY3A4NTcoVVNIT1JUIGMpCi0jZWxzZQotdHhfY3A4NTco YykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAoYyA8IDB4ODAp ICAgICAgICAgICAgICAgICAgICAgICAvKiBIYXMgQzEgZ3JhcGhpY3MgKi8KLSAgICAgIHJldHVy bigoQ0hBUikoYyAmIDB4ZmYpKTsKLSAgICBzd2l0Y2ggKGMpIHsKLSAgICAgIGNhc2UgMHgwMGM3 OiByZXR1cm4oKENIQVIpKDEyOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGZjOiByZXR1cm4o KENIQVIpKDEyOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGU5OiByZXR1cm4oKENIQVIpKDEz MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGUyOiByZXR1cm4oKENIQVIpKDEzMSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGU0OiByZXR1cm4oKENIQVIpKDEzMiAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGUwOiByZXR1cm4oKENIQVIpKDEzMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGU1OiByZXR1cm4oKENIQVIpKDEzNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGU3OiByZXR1 cm4oKENIQVIpKDEzNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGVhOiByZXR1cm4oKENIQVIp KDEzNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGViOiByZXR1cm4oKENIQVIpKDEzNyAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGU4OiByZXR1cm4oKENIQVIpKDEzOCAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMGVmOiByZXR1cm4oKENIQVIpKDEzOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGVlOiByZXR1cm4oKENIQVIpKDE0MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTMxOiBy ZXR1cm4oKENIQVIpKDE0MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM0OiByZXR1cm4oKENI QVIpKDE0MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM1OiByZXR1cm4oKENIQVIpKDE0MyAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGM5OiByZXR1cm4oKENIQVIpKDE0NCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGU2OiByZXR1cm4oKENIQVIpKDE0NSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGM2OiByZXR1cm4oKENIQVIpKDE0NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGY0 OiByZXR1cm4oKENIQVIpKDE0NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGY2OiByZXR1cm4o KENIQVIpKDE0OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGYyOiByZXR1cm4oKENIQVIpKDE0 OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGZiOiByZXR1cm4oKENIQVIpKDE1MCAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGY5OiByZXR1cm4oKENIQVIpKDE1MSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMTMwOiByZXR1cm4oKENIQVIpKDE1MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGQ2OiByZXR1cm4oKENIQVIpKDE1MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGRjOiByZXR1 cm4oKENIQVIpKDE1NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGY4OiByZXR1cm4oKENIQVIp KDE1NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGEzOiByZXR1cm4oKENIQVIpKDE1NiAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGQ4OiByZXR1cm4oKENIQVIpKDE1NyAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwMTVlOiByZXR1cm4oKENIQVIpKDE1OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMTVmOiByZXR1cm4oKENIQVIpKDE1OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGUxOiBy ZXR1cm4oKENIQVIpKDE2MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGVkOiByZXR1cm4oKENI QVIpKDE2MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGYzOiByZXR1cm4oKENIQVIpKDE2MiAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGZhOiByZXR1cm4oKENIQVIpKDE2MyAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwMGYxOiByZXR1cm4oKENIQVIpKDE2NCAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwMGQxOiByZXR1cm4oKENIQVIpKDE2NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTFl OiByZXR1cm4oKENIQVIpKDE2NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMTFmOiByZXR1cm4o KENIQVIpKDE2NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGJmOiByZXR1cm4oKENIQVIpKDE2 OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGFlOiByZXR1cm4oKENIQVIpKDE2OSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwMGFjOiByZXR1cm4oKENIQVIpKDE3MCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwMGJkOiByZXR1cm4oKENIQVIpKDE3MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw MGJjOiByZXR1cm4oKENIQVIpKDE3MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGExOiByZXR1 cm4oKENIQVIpKDE3MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGFiOiByZXR1cm4oKENIQVIp KDE3NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGJiOiByZXR1cm4oKENIQVIpKDE3NSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgyMGFjOiByZXR1cm4oKENIQVIpKDIxMyAmIDB4ZmYpKTsgLyog RXVybyAqLwotICAgICAgY2FzZSAweDI1OTE6IHJldHVybigoQ0hBUikoMTc2ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDI1OTI6IHJldHVybigoQ0hBUikoMTc3ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDI1OTM6IHJldHVybigoQ0hBUikoMTc4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MDI6 IHJldHVybigoQ0hBUikoMTc5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MjQ6IHJldHVybigo Q0hBUikoMTgwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzE6IHJldHVybigoQ0hBUikoMTgx ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzI6IHJldHVybigoQ0hBUikoMTgyICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwYzA6IHJldHVybigoQ0hBUikoMTgzICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwYTk6IHJldHVybigoQ0hBUikoMTg0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1 NjM6IHJldHVybigoQ0hBUikoMTg1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NTE6IHJldHVy bigoQ0hBUikoMTg2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NTc6IHJldHVybigoQ0hBUiko MTg3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NWQ6IHJldHVybigoQ0hBUikoMTg4ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwYTI6IHJldHVybigoQ0hBUikoMTg5ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwYTU6IHJldHVybigoQ0hBUikoMTkwICYgMHhmZikpOwotICAgICAgY2FzZSAw eDI1MTA6IHJldHVybigoQ0hBUikoMTkxICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MTQ6IHJl dHVybigoQ0hBUikoMTkyICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MzQ6IHJldHVybigoQ0hB UikoMTkzICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MmM6IHJldHVybigoQ0hBUikoMTk0ICYg MHhmZikpOwotICAgICAgY2FzZSAweDI1MWM6IHJldHVybigoQ0hBUikoMTk1ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDI1MDA6IHJldHVybigoQ0hBUikoMTk2ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDI1M2M6IHJldHVybigoQ0hBUikoMTk3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZTM6 IHJldHVybigoQ0hBUikoMTk4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzM6IHJldHVybigo Q0hBUikoMTk5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NWE6IHJldHVybigoQ0hBUikoMjAw ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NTQ6IHJldHVybigoQ0hBUikoMjAxICYgMHhmZikp OwotICAgICAgY2FzZSAweDI1Njk6IHJldHVybigoQ0hBUikoMjAyICYgMHhmZikpOwotICAgICAg Y2FzZSAweDI1NjY6IHJldHVybigoQ0hBUikoMjAzICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1 NjA6IHJldHVybigoQ0hBUikoMjA0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NTA6IHJldHVy bigoQ0hBUikoMjA1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NmM6IHJldHVybigoQ0hBUiko MjA2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYTQ6IHJldHVybigoQ0hBUikoMjA3ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwYmE6IHJldHVybigoQ0hBUikoMjA4ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwYWE6IHJldHVybigoQ0hBUikoMjA5ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwY2E6IHJldHVybigoQ0hBUikoMjEwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwY2I6IHJl dHVybigoQ0hBUikoMjExICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYzg6IHJldHVybigoQ0hB UikoMjEyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwY2Q6IHJldHVybigoQ0hBUikoMjE0ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwY2U6IHJldHVybigoQ0hBUikoMjE1ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwY2Y6IHJldHVybigoQ0hBUikoMjE2ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDI1MTg6IHJldHVybigoQ0hBUikoMjE3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MGM6 IHJldHVybigoQ0hBUikoMjE4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1ODg6IHJldHVybigo Q0hBUikoMjE5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1ODQ6IHJldHVybigoQ0hBUikoMjIw ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYTY6IHJldHVybigoQ0hBUikoMjIxICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwY2M6IHJldHVybigoQ0hBUikoMjIyICYgMHhmZikpOwotICAgICAg Y2FzZSAweDI1ODA6IHJldHVybigoQ0hBUikoMjIzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw ZDM6IHJldHVybigoQ0hBUikoMjI0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZGY6IHJldHVy bigoQ0hBUikoMjI1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDQ6IHJldHVybigoQ0hBUiko MjI2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDI6IHJldHVybigoQ0hBUikoMjI3ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwZjU6IHJldHVybigoQ0hBUikoMjI4ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwZDU6IHJldHVybigoQ0hBUikoMjI5ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwYjU6IHJldHVybigoQ0hBUikoMjMwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZDc6IHJl dHVybigoQ0hBUikoMjMyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZGE6IHJldHVybigoQ0hB UikoMjMzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZGI6IHJldHVybigoQ0hBUikoMjM0ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwZDk6IHJldHVybigoQ0hBUikoMjM1ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwZWM6IHJldHVybigoQ0hBUikoMjM2ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwZmY6IHJldHVybigoQ0hBUikoMjM3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYWY6 IHJldHVybigoQ0hBUikoMjM4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjQ6IHJldHVybigo Q0hBUikoMjM5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYWQ6IHJldHVybigoQ0hBUikoMjQw ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjE6IHJldHVybigoQ0hBUikoMjQxICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwYmU6IHJldHVybigoQ0hBUikoMjQzICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwYjY6IHJldHVybigoQ0hBUikoMjQ0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw YTc6IHJldHVybigoQ0hBUikoMjQ1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwZjc6IHJldHVy bigoQ0hBUikoMjQ2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjg6IHJldHVybigoQ0hBUiko MjQ3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjA6IHJldHVybigoQ0hBUikoMjQ4ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAwYTg6IHJldHVybigoQ0hBUikoMjQ5ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAwYjc6IHJldHVybigoQ0hBUikoMjUwICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwYjk6IHJldHVybigoQ0hBUikoMjUxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjM6IHJl dHVybigoQ0hBUikoMjUyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjI6IHJldHVybigoQ0hB UikoMjUzICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1YTA6IHJldHVybigoQ0hBUikoMjU0ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwYTA6IHJldHVybigoQ0hBUikoMjU1ICYgMHhmZikpOwot ICAgICAgZGVmYXVsdDogcmV0dXJuKHR4X2Nwc3ViKGMpKTsgICAgIC8qIEZvciBib3ggY2hhcmFj dGVycyBldGMgKi8KLSAgICB9Ci19Ci0KLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBQQyBDb2RlIFBhZ2UgODYyICovCi0jaWZkZWYgQ0tfQU5TSUMKLXR4X2NwODYy KFVTSE9SVCBjKQotI2Vsc2UKLXR4X2NwODYyKGMpIFVTSE9SVCBjOwotI2VuZGlmIC8qIENLX0FO U0lDICovCi17Ci0gICAgaWYgKGMgPCAweDgwKSAgICAgICAgICAgICAgICAgICAgICAgLyogSGFz IEMxIGdyYXBoaWNzICovCi0gICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7Ci0gICAgc3dp dGNoIChjKSB7Ci0gICAgICBjYXNlIDB4MDVkMDogcmV0dXJuKChDSEFSKSgxMjggJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDVkMTogcmV0dXJuKChDSEFSKSgxMjkgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDVkMjogcmV0dXJuKChDSEFSKSgxMzAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDVk MzogcmV0dXJuKChDSEFSKSgxMzEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDVkNDogcmV0dXJu KChDSEFSKSgxMzIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDVkNTogcmV0dXJuKChDSEFSKSgx MzMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDVkNjogcmV0dXJuKChDSEFSKSgxMzQgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDVkNzogcmV0dXJuKChDSEFSKSgxMzUgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDVkODogcmV0dXJuKChDSEFSKSgxMzYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDVkOTogcmV0dXJuKChDSEFSKSgxMzcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDVkYTogcmV0 dXJuKChDSEFSKSgxMzggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDVkYjogcmV0dXJuKChDSEFS KSgxMzkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDVkYzogcmV0dXJuKChDSEFSKSgxNDAgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDVkZDogcmV0dXJuKChDSEFSKSgxNDEgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDVkZTogcmV0dXJuKChDSEFSKSgxNDIgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDVkZjogcmV0dXJuKChDSEFSKSgxNDMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDVlMDog cmV0dXJuKChDSEFSKSgxNDQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDVlMTogcmV0dXJuKChD SEFSKSgxNDUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDVlMjogcmV0dXJuKChDSEFSKSgxNDYg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDVlMzogcmV0dXJuKChDSEFSKSgxNDcgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDVlNDogcmV0dXJuKChDSEFSKSgxNDggJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDVlNTogcmV0dXJuKChDSEFSKSgxNDkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDVl NjogcmV0dXJuKChDSEFSKSgxNTAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDVlNzogcmV0dXJu KChDSEFSKSgxNTEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDVlODogcmV0dXJuKChDSEFSKSgx NTIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDVlOTogcmV0dXJuKChDSEFSKSgxNTMgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDVlYTogcmV0dXJuKChDSEFSKSgxNTQgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDBhMjogcmV0dXJuKChDSEFSKSgxNTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDBhMzogcmV0dXJuKChDSEFSKSgxNTYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhNTogcmV0 dXJuKChDSEFSKSgxNTcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjBhNzogcmV0dXJuKChDSEFS KSgxNTggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDE5MjogcmV0dXJuKChDSEFSKSgxNTkgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDBlMTogcmV0dXJuKChDSEFSKSgxNjAgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDBlZDogcmV0dXJuKChDSEFSKSgxNjEgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDBmMzogcmV0dXJuKChDSEFSKSgxNjIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmYTog cmV0dXJuKChDSEFSKSgxNjMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmMTogcmV0dXJuKChD SEFSKSgxNjQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBkMTogcmV0dXJuKChDSEFSKSgxNjUg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhYTogcmV0dXJuKChDSEFSKSgxNjYgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDBiYTogcmV0dXJuKChDSEFSKSgxNjcgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDBiZjogcmV0dXJuKChDSEFSKSgxNjggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjMx MDogcmV0dXJuKChDSEFSKSgxNjkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhYzogcmV0dXJu KChDSEFSKSgxNzAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiZDogcmV0dXJuKChDSEFSKSgx NzEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiYzogcmV0dXJuKChDSEFSKSgxNzIgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDBhMTogcmV0dXJuKChDSEFSKSgxNzMgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDBhYjogcmV0dXJuKChDSEFSKSgxNzQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDBiYjogcmV0dXJuKChDSEFSKSgxNzUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU5MTogcmV0 dXJuKChDSEFSKSgxNzYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU5MjogcmV0dXJuKChDSEFS KSgxNzcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU5MzogcmV0dXJuKChDSEFSKSgxNzggJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MjUwMjogcmV0dXJuKChDSEFSKSgxNzkgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MjUyNDogcmV0dXJuKChDSEFSKSgxODAgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MjU2MTogcmV0dXJuKChDSEFSKSgxODEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2Mjog cmV0dXJuKChDSEFSKSgxODIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1NjogcmV0dXJuKChD SEFSKSgxODMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1NTogcmV0dXJuKChDSEFSKSgxODQg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2MzogcmV0dXJuKChDSEFSKSgxODUgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MjU1MTogcmV0dXJuKChDSEFSKSgxODYgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MjU1NzogcmV0dXJuKChDSEFSKSgxODcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1 ZDogcmV0dXJuKChDSEFSKSgxODggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1YzogcmV0dXJu KChDSEFSKSgxODkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1YjogcmV0dXJuKChDSEFSKSgx OTAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUxMDogcmV0dXJuKChDSEFSKSgxOTEgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MjUxNDogcmV0dXJuKChDSEFSKSgxOTIgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MjUzNDogcmV0dXJuKChDSEFSKSgxOTMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MjUyYzogcmV0dXJuKChDSEFSKSgxOTQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUxYzogcmV0 dXJuKChDSEFSKSgxOTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUwMDogcmV0dXJuKChDSEFS KSgxOTYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjUzYzogcmV0dXJuKChDSEFSKSgxOTcgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1ZTogcmV0dXJuKChDSEFSKSgxOTggJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MjU1ZjogcmV0dXJuKChDSEFSKSgxOTkgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MjU1YTogcmV0dXJuKChDSEFSKSgyMDAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1NDog cmV0dXJuKChDSEFSKSgyMDEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2OTogcmV0dXJuKChD SEFSKSgyMDIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2NjogcmV0dXJuKChDSEFSKSgyMDMg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2MDogcmV0dXJuKChDSEFSKSgyMDQgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MjU1MDogcmV0dXJuKChDSEFSKSgyMDUgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MjU2YzogcmV0dXJuKChDSEFSKSgyMDYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2 NzogcmV0dXJuKChDSEFSKSgyMDcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2ODogcmV0dXJu KChDSEFSKSgyMDggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2NDogcmV0dXJuKChDSEFSKSgy MDkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2NTogcmV0dXJuKChDSEFSKSgyMTAgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MjU1OTogcmV0dXJuKChDSEFSKSgyMTEgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MjU1ODogcmV0dXJuKChDSEFSKSgyMTIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MjU1MjogcmV0dXJuKChDSEFSKSgyMTMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU1MzogcmV0 dXJuKChDSEFSKSgyMTQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2YjogcmV0dXJuKChDSEFS KSgyMTUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU2YTogcmV0dXJuKChDSEFSKSgyMTYgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MjUxODogcmV0dXJuKChDSEFSKSgyMTcgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MjUwYzogcmV0dXJuKChDSEFSKSgyMTggJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MjU4ODogcmV0dXJuKChDSEFSKSgyMTkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU4NDog cmV0dXJuKChDSEFSKSgyMjAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU4YzogcmV0dXJuKChD SEFSKSgyMjEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU5MDogcmV0dXJuKChDSEFSKSgyMjIg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjU4MDogcmV0dXJuKChDSEFSKSgyMjMgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MDNiMTogcmV0dXJuKChDSEFSKSgyMjQgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MDBkZjogcmV0dXJuKChDSEFSKSgyMjUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDM5 MzogcmV0dXJuKChDSEFSKSgyMjYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDNjMDogcmV0dXJu KChDSEFSKSgyMjcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDNhMzogcmV0dXJuKChDSEFSKSgy MjggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDNjMzogcmV0dXJuKChDSEFSKSgyMjkgJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MDBiNTogcmV0dXJuKChDSEFSKSgyMzAgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDNjNDogcmV0dXJuKChDSEFSKSgyMzEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MDNhNjogcmV0dXJuKChDSEFSKSgyMzIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDM5ODogcmV0 dXJuKChDSEFSKSgyMzMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDNhOTogcmV0dXJuKChDSEFS KSgyMzQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDNiNDogcmV0dXJuKChDSEFSKSgyMzUgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MjIxZTogcmV0dXJuKChDSEFSKSgyMzYgJiAweGZmKSk7Ci0g ICAgICBjYXNlIDB4MDNjNjogcmV0dXJuKChDSEFSKSgyMzcgJiAweGZmKSk7Ci0gICAgICBjYXNl IDB4MDNiNTogcmV0dXJuKChDSEFSKSgyMzggJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjIyOTog cmV0dXJuKChDSEFSKSgyMzkgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjI2MTogcmV0dXJuKChD SEFSKSgyNDAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiMTogcmV0dXJuKChDSEFSKSgyNDEg JiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjI2NTogcmV0dXJuKChDSEFSKSgyNDIgJiAweGZmKSk7 Ci0gICAgICBjYXNlIDB4MjI2NDogcmV0dXJuKChDSEFSKSgyNDMgJiAweGZmKSk7Ci0gICAgICBj YXNlIDB4MjMyMDogcmV0dXJuKChDSEFSKSgyNDQgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjMy MTogcmV0dXJuKChDSEFSKSgyNDUgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBmNzogcmV0dXJu KChDSEFSKSgyNDYgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjI0ODogcmV0dXJuKChDSEFSKSgy NDcgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiMDogcmV0dXJuKChDSEFSKSgyNDggJiAweGZm KSk7Ci0gICAgICBjYXNlIDB4MjIxOTogcmV0dXJuKChDSEFSKSgyNDkgJiAweGZmKSk7Ci0gICAg ICBjYXNlIDB4MDBiNzogcmV0dXJuKChDSEFSKSgyNTAgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4 MjIxYTogcmV0dXJuKChDSEFSKSgyNTEgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjA3ZjogcmV0 dXJuKChDSEFSKSgyNTIgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MDBiMjogcmV0dXJuKChDSEFS KSgyNTMgJiAweGZmKSk7Ci0gICAgICBjYXNlIDB4MjVhMDogcmV0dXJuKChDSEFSKSgyNTQgJiAw eGZmKSk7Ci0gICAgICBjYXNlIDB4MDBhMDogcmV0dXJuKChDSEFSKSgyNTUgJiAweGZmKSk7Ci0g ICAgICBkZWZhdWx0OiByZXR1cm4odHhfY3BzdWIoYykpOyAgICAgLyogRm9yIGJveCBjaGFyYWN0 ZXJzIGV0YyAqLwotICAgIH0KLX0KLQotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFBDIENvZGUgUGFnZSA4NjQgKi8KLSNpZmRlZiBDS19BTlNJQwotdHhfY3A4NjQo VVNIT1JUIGMpCi0jZWxzZQotdHhfY3A4NjQoYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5T SUMgKi8KLXsKLSAgICBpZiAoYyA8IDB4ODApICAgICAgICAgICAgICAgICAgICAgICAvKiBIYXMg QzEgZ3JhcGhpY3MgKi8KLSAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKLSAgICBzd2l0 Y2ggKGMpIHsKLSAgICAgIGNhc2UgMHgwMGIwOiByZXR1cm4oKENIQVIpMHg4MCAmIDB4ZmYpOwot ICAgICAgY2FzZSAweDAwYjc6IHJldHVybigoQ0hBUikweDgxICYgMHhmZik7Ci0gICAgICBjYXNl IDB4MjIxOTogcmV0dXJuKChDSEFSKTB4ODIgJiAweGZmKTsKLSAgICAgIGNhc2UgMHgyMjFhOiBy ZXR1cm4oKENIQVIpMHg4MyAmIDB4ZmYpOwotICAgICAgY2FzZSAweDI1OTI6IHJldHVybigoQ0hB UikweDg0ICYgMHhmZik7Ci0gICAgICBjYXNlIDB4MjUwMDogcmV0dXJuKChDSEFSKTB4ODUgJiAw eGZmKTsKLSAgICAgIGNhc2UgMHgyNTAyOiByZXR1cm4oKENIQVIpMHg4NiAmIDB4ZmYpOwotICAg ICAgY2FzZSAweDI1M2M6IHJldHVybigoQ0hBUikweDg3ICYgMHhmZik7Ci0gICAgICBjYXNlIDB4 MjUyNDogcmV0dXJuKChDSEFSKTB4ODggJiAweGZmKTsKLSAgICAgIGNhc2UgMHgyNTJjOiByZXR1 cm4oKENIQVIpMHg4OSAmIDB4ZmYpOwotICAgICAgY2FzZSAweDI1MWM6IHJldHVybigoQ0hBUikw eDhhICYgMHhmZik7Ci0gICAgICBjYXNlIDB4MjUzNDogcmV0dXJuKChDSEFSKTB4OGIgJiAweGZm KTsKLSAgICAgIGNhc2UgMHgyNTEwOiByZXR1cm4oKENIQVIpMHg4YyAmIDB4ZmYpOwotICAgICAg Y2FzZSAweDI1MGM6IHJldHVybigoQ0hBUikweDhkICYgMHhmZik7Ci0gICAgICBjYXNlIDB4MjUx NDogcmV0dXJuKChDSEFSKTB4OGUgJiAweGZmKTsKLSAgICAgIGNhc2UgMHgyNTE4OiByZXR1cm4o KENIQVIpMHg4ZiAmIDB4ZmYpOwotICAgICAgY2FzZSAweDAzYjI6IHJldHVybigoQ0hBUikweDkw ICYgMHhmZik7Ci0gICAgICBjYXNlIDB4MjIxZTogcmV0dXJuKChDSEFSKTB4OTEgJiAweGZmKTsK LSAgICAgIGNhc2UgMHgwM2M2OiByZXR1cm4oKENIQVIpMHg5MiAmIDB4ZmYpOwotICAgICAgY2Fz ZSAweDAwYjE6IHJldHVybigoQ0hBUikweDkzICYgMHhmZik7Ci0gICAgICBjYXNlIDB4MDBiZDog cmV0dXJuKChDSEFSKTB4OTQgJiAweGZmKTsKLSAgICAgIGNhc2UgMHgwMGJjOiByZXR1cm4oKENI QVIpMHg5NSAmIDB4ZmYpOwotICAgICAgY2FzZSAweDIyNDg6IHJldHVybigoQ0hBUikweDk2ICYg MHhmZik7Ci0gICAgICBjYXNlIDB4MDBhYjogcmV0dXJuKChDSEFSKTB4OTcgJiAweGZmKTsKLSAg ICAgIGNhc2UgMHgwMGJiOiByZXR1cm4oKENIQVIpMHg5OCAmIDB4ZmYpOwotICAgICAgY2FzZSAw eGZlZjc6IHJldHVybigoQ0hBUikweDk5ICYgMHhmZik7Ci0gICAgICBjYXNlIDB4ZmVmODogcmV0 dXJuKChDSEFSKTB4OWEgJiAweGZmKTsKLSAgICAgIGNhc2UgMHhmZWZiOiByZXR1cm4oKENIQVIp MHg5ZCAmIDB4ZmYpOwotICAgICAgY2FzZSAweGZlZmM6IHJldHVybigoQ0hBUikweDllICYgMHhm Zik7Ci0gICAgICBjYXNlIDB4MDBhMDogcmV0dXJuKChDSEFSKTB4YTAgJiAweGZmKTsKLSAgICAg IGNhc2UgMHgwMGFkOiByZXR1cm4oKENIQVIpMHhhMSAmIDB4ZmYpOwotICAgICAgY2FzZSAweGZl ODI6IHJldHVybigoQ0hBUikweGEyICYgMHhmZik7Ci0gICAgICBjYXNlIDB4MDBhMzogcmV0dXJu KChDSEFSKTB4YTMgJiAweGZmKTsKLSAgICAgIGNhc2UgMHgwMGE0OiByZXR1cm4oKENIQVIpMHhh NCAmIDB4ZmYpOwotICAgICAgY2FzZSAweGZlODQ6IHJldHVybigoQ0hBUikweGE1ICYgMHhmZik7 Ci0gICAgICBjYXNlIDB4ZmU4ZTogcmV0dXJuKChDSEFSKTB4YTggJiAweGZmKTsKLSAgICAgIGNh c2UgMHhmZThmOiByZXR1cm4oKENIQVIpMHhhOSAmIDB4ZmYpOwotICAgICAgY2FzZSAweGZlOTU6 IHJldHVybigoQ0hBUikweGFhICYgMHhmZik7Ci0gICAgICBjYXNlIDB4ZmU5OTogcmV0dXJuKChD SEFSKTB4YWIgJiAweGZmKTsKLSAgICAgIGNhc2UgMHgwNjBjOiByZXR1cm4oKENIQVIpMHhhYyAm IDB4ZmYpOwotICAgICAgY2FzZSAweGZlOWQ6IHJldHVybigoQ0hBUikweGFkICYgMHhmZik7Ci0g ICAgICBjYXNlIDB4ZmVhMTogcmV0dXJuKChDSEFSKTB4YWUgJiAweGZmKTsKLSAgICAgIGNhc2Ug MHhmZWE1OiByZXR1cm4oKENIQVIpMHhhZiAmIDB4ZmYpOwotICAgICAgY2FzZSAweDA2NjA6IHJl dHVybigoQ0hBUikweGIwICYgMHhmZik7Ci0gICAgICBjYXNlIDB4MDY2MTogcmV0dXJuKChDSEFS KTB4YjEgJiAweGZmKTsKLSAgICAgIGNhc2UgMHgwNjYyOiByZXR1cm4oKENIQVIpMHhiMiAmIDB4 ZmYpOwotICAgICAgY2FzZSAweDA2NjM6IHJldHVybigoQ0hBUikweGIzICYgMHhmZik7Ci0gICAg ICBjYXNlIDB4MDY2NDogcmV0dXJuKChDSEFSKTB4YjQgJiAweGZmKTsKLSAgICAgIGNhc2UgMHgw NjY1OiByZXR1cm4oKENIQVIpMHhiNSAmIDB4ZmYpOwotICAgICAgY2FzZSAweDA2NjY6IHJldHVy bigoQ0hBUikweGI2ICYgMHhmZik7Ci0gICAgICBjYXNlIDB4MDY2NzogcmV0dXJuKChDSEFSKTB4 YjcgJiAweGZmKTsKLSAgICAgIGNhc2UgMHgwNjY4OiByZXR1cm4oKENIQVIpMHhiOCAmIDB4ZmYp OwotICAgICAgY2FzZSAweDA2Njk6IHJldHVybigoQ0hBUikweGI5ICYgMHhmZik7Ci0gICAgICBj YXNlIDB4ZmVkMTogcmV0dXJuKChDSEFSKTB4YmEgJiAweGZmKTsKLSAgICAgIGNhc2UgMHgwNjFi OiByZXR1cm4oKENIQVIpMHhiYiAmIDB4ZmYpOwotICAgICAgY2FzZSAweGZlYjE6IHJldHVybigo Q0hBUikweGJjICYgMHhmZik7Ci0gICAgICBjYXNlIDB4ZmViNTogcmV0dXJuKChDSEFSKTB4YmQg JiAweGZmKTsKLSAgICAgIGNhc2UgMHhmZWI5OiByZXR1cm4oKENIQVIpMHhiZSAmIDB4ZmYpOwot ICAgICAgY2FzZSAweDA2MWY6IHJldHVybigoQ0hBUikweGJmICYgMHhmZik7Ci0gICAgICBjYXNl IDB4MDBhMjogcmV0dXJuKChDSEFSKTB4YzAgJiAweGZmKTsKLSAgICAgIGNhc2UgMHhmZTgwOiBy ZXR1cm4oKENIQVIpMHhjMSAmIDB4ZmYpOwotICAgICAgY2FzZSAweGZlODE6IHJldHVybigoQ0hB UikweGMyICYgMHhmZik7Ci0gICAgICBjYXNlIDB4ZmU4MzogcmV0dXJuKChDSEFSKTB4YzMgJiAw eGZmKTsKLSAgICAgIGNhc2UgMHhmZTg1OiByZXR1cm4oKENIQVIpMHhjNCAmIDB4ZmYpOwotICAg ICAgY2FzZSAweGZlY2E6IHJldHVybigoQ0hBUikweGM1ICYgMHhmZik7Ci0gICAgICBjYXNlIDB4 ZmU4YjogcmV0dXJuKChDSEFSKTB4YzYgJiAweGZmKTsKLSAgICAgIGNhc2UgMHhmZThkOiByZXR1 cm4oKENIQVIpMHhjNyAmIDB4ZmYpOwotICAgICAgY2FzZSAweGZlOTE6IHJldHVybigoQ0hBUikw eGM4ICYgMHhmZik7Ci0gICAgICBjYXNlIDB4ZmU5MzogcmV0dXJuKChDSEFSKTB4YzkgJiAweGZm KTsKLSAgICAgIGNhc2UgMHhmZTk3OiByZXR1cm4oKENIQVIpMHhjYSAmIDB4ZmYpOwotICAgICAg Y2FzZSAweGZlOWI6IHJldHVybigoQ0hBUikweGNiICYgMHhmZik7Ci0gICAgICBjYXNlIDB4ZmU5 ZjogcmV0dXJuKChDSEFSKTB4Y2MgJiAweGZmKTsKLSAgICAgIGNhc2UgMHhmZWEzOiByZXR1cm4o KENIQVIpMHhjZCAmIDB4ZmYpOwotICAgICAgY2FzZSAweGZlYTc6IHJldHVybigoQ0hBUikweGNl ICYgMHhmZik7Ci0gICAgICBjYXNlIDB4ZmVhOTogcmV0dXJuKChDSEFSKTB4Y2YgJiAweGZmKTsK LSAgICAgIGNhc2UgMHhmZWFiOiByZXR1cm4oKENIQVIpMHhkMCAmIDB4ZmYpOwotICAgICAgY2Fz ZSAweGZlYWQ6IHJldHVybigoQ0hBUikweGQxICYgMHhmZik7Ci0gICAgICBjYXNlIDB4ZmVhZjog cmV0dXJuKChDSEFSKTB4ZDIgJiAweGZmKTsKLSAgICAgIGNhc2UgMHhmZWIzOiByZXR1cm4oKENI QVIpMHhkMyAmIDB4ZmYpOwotICAgICAgY2FzZSAweGZlYjc6IHJldHVybigoQ0hBUikweGQ0ICYg MHhmZik7Ci0gICAgICBjYXNlIDB4ZmViYjogcmV0dXJuKChDSEFSKTB4ZDUgJiAweGZmKTsKLSAg ICAgIGNhc2UgMHhmZWJmOiByZXR1cm4oKENIQVIpMHhkNiAmIDB4ZmYpOwotICAgICAgY2FzZSAw eGZlYzE6IHJldHVybigoQ0hBUikweGQ3ICYgMHhmZik7Ci0gICAgICBjYXNlIDB4ZmVjNTogcmV0 dXJuKChDSEFSKTB4ZDggJiAweGZmKTsKLSAgICAgIGNhc2UgMHhmZWNiOiByZXR1cm4oKENIQVIp MHhkOSAmIDB4ZmYpOwotICAgICAgY2FzZSAweGZlY2Y6IHJldHVybigoQ0hBUikweGRhICYgMHhm Zik7Ci0gICAgICBjYXNlIDB4MDBhNjogcmV0dXJuKChDSEFSKTB4ZGIgJiAweGZmKTsKLSAgICAg IGNhc2UgMHgwMGFjOiByZXR1cm4oKENIQVIpMHhkYyAmIDB4ZmYpOwotICAgICAgY2FzZSAweDAw Zjc6IHJldHVybigoQ0hBUikweGRkICYgMHhmZik7Ci0gICAgICBjYXNlIDB4MDBkNzogcmV0dXJu KChDSEFSKTB4ZGUgJiAweGZmKTsKLSAgICAgIGNhc2UgMHhmZWM5OiByZXR1cm4oKENIQVIpMHhk ZiAmIDB4ZmYpOwotICAgICAgY2FzZSAweDA2NDA6IHJldHVybigoQ0hBUikweGUwICYgMHhmZik7 Ci0gICAgICBjYXNlIDB4ZmVkMzogcmV0dXJuKChDSEFSKTB4ZTEgJiAweGZmKTsKLSAgICAgIGNh c2UgMHhmZWQ3OiByZXR1cm4oKENIQVIpMHhlMiAmIDB4ZmYpOwotICAgICAgY2FzZSAweGZlZGI6 IHJldHVybigoQ0hBUikweGUzICYgMHhmZik7Ci0gICAgICBjYXNlIDB4ZmVkZjogcmV0dXJuKChD SEFSKTB4ZTQgJiAweGZmKTsKLSAgICAgIGNhc2UgMHhmZWUzOiByZXR1cm4oKENIQVIpMHhlNSAm IDB4ZmYpOwotICAgICAgY2FzZSAweGZlZTc6IHJldHVybigoQ0hBUikweGU2ICYgMHhmZik7Ci0g ICAgICBjYXNlIDB4ZmVlYjogcmV0dXJuKChDSEFSKTB4ZTcgJiAweGZmKTsKLSAgICAgIGNhc2Ug MHhmZWVkOiByZXR1cm4oKENIQVIpMHhlOCAmIDB4ZmYpOwotICAgICAgY2FzZSAweGZlZWY6IHJl dHVybigoQ0hBUikweGU5ICYgMHhmZik7Ci0gICAgICBjYXNlIDB4ZmVmMzogcmV0dXJuKChDSEFS KTB4ZWEgJiAweGZmKTsKLSAgICAgIGNhc2UgMHhmZWJkOiByZXR1cm4oKENIQVIpMHhlYiAmIDB4 ZmYpOwotICAgICAgY2FzZSAweGZlY2M6IHJldHVybigoQ0hBUikweGVjICYgMHhmZik7Ci0gICAg ICBjYXNlIDB4ZmVjZTogcmV0dXJuKChDSEFSKTB4ZWQgJiAweGZmKTsKLSAgICAgIGNhc2UgMHhm ZWNkOiByZXR1cm4oKENIQVIpMHhlZSAmIDB4ZmYpOwotICAgICAgY2FzZSAweGZlZTE6IHJldHVy bigoQ0hBUikweGVmICYgMHhmZik7Ci0gICAgICBjYXNlIDB4ZmU3ZDogcmV0dXJuKChDSEFSKTB4 ZjAgJiAweGZmKTsKLSAgICAgIGNhc2UgMHgwNjUxOiByZXR1cm4oKENIQVIpMHhmMSAmIDB4ZmYp OwotICAgICAgY2FzZSAweGZlZTU6IHJldHVybigoQ0hBUikweGYyICYgMHhmZik7Ci0gICAgICBj YXNlIDB4ZmVlOTogcmV0dXJuKChDSEFSKTB4ZjMgJiAweGZmKTsKLSAgICAgIGNhc2UgMHhmZWVj OiByZXR1cm4oKENIQVIpMHhmNCAmIDB4ZmYpOwotICAgICAgY2FzZSAweGZlZjA6IHJldHVybigo Q0hBUikweGY1ICYgMHhmZik7Ci0gICAgICBjYXNlIDB4ZmVmMjogcmV0dXJuKChDSEFSKTB4ZjYg JiAweGZmKTsKLSAgICAgIGNhc2UgMHhmZWQwOiByZXR1cm4oKENIQVIpMHhmNyAmIDB4ZmYpOwot ICAgICAgY2FzZSAweGZlZDU6IHJldHVybigoQ0hBUikweGY4ICYgMHhmZik7Ci0gICAgICBjYXNl IDB4ZmVmNTogcmV0dXJuKChDSEFSKTB4ZjkgJiAweGZmKTsKLSAgICAgIGNhc2UgMHhmZWY2OiBy ZXR1cm4oKENIQVIpMHhmYSAmIDB4ZmYpOwotICAgICAgY2FzZSAweGZlZGQ6IHJldHVybigoQ0hB UikweGZiICYgMHhmZik7Ci0gICAgICBjYXNlIDB4ZmVkOTogcmV0dXJuKChDSEFSKTB4ZmMgJiAw eGZmKTsKLSAgICAgIGNhc2UgMHhmZWYxOiByZXR1cm4oKENIQVIpMHhmZCAmIDB4ZmYpOwotICAg ICAgY2FzZSAweDI1YTA6IHJldHVybigoQ0hBUikweGZlICYgMHhmZik7Ci0gICAgICBkZWZhdWx0 OiByZXR1cm4odHhfY3BzdWIoYykpOyAgICAgLyogRm9yIGJveCBjaGFyYWN0ZXJzIGV0YyAqLwot ICAgIH0KLX0KLQotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBD IENvZGUgUGFnZSA4NjYgKi8KLSNpZmRlZiBDS19BTlNJQwotdHhfY3A4NjYoVVNIT1JUIGMpCi0j ZWxzZQotdHhfY3A4NjYoYykgVVNIT1JUIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAg ICBpZiAoYyA8IDB4ODApICAgICAgICAgICAgICAgICAgICAgICAvKiBIYXMgQzEgZ3JhcGhpY3Mg Ki8KLSAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKLSAgICBzd2l0Y2ggKGMpIHsKLSAg ICAgIGNhc2UgMHgwMGEwOiByZXR1cm4oKENIQVIpKDI1NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwMGE0OiByZXR1cm4oKENIQVIpKDI1MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGIwOiBy ZXR1cm4oKENIQVIpKDI0OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwMGI3OiByZXR1cm4oKENI QVIpKDI1MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDAxOiByZXR1cm4oKENIQVIpKDI0MCAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDA0OiByZXR1cm4oKENIQVIpKDI0MiAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwNDA3OiByZXR1cm4oKENIQVIpKDI0NCAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwNDBlOiByZXR1cm4oKENIQVIpKDI0NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDEw OiByZXR1cm4oKENIQVIpKDEyOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDExOiByZXR1cm4o KENIQVIpKDEyOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDEyOiByZXR1cm4oKENIQVIpKDEz MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDEzOiByZXR1cm4oKENIQVIpKDEzMSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwNDE0OiByZXR1cm4oKENIQVIpKDEzMiAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwNDE1OiByZXR1cm4oKENIQVIpKDEzMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw NDE2OiByZXR1cm4oKENIQVIpKDEzNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDE3OiByZXR1 cm4oKENIQVIpKDEzNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDE4OiByZXR1cm4oKENIQVIp KDEzNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDE5OiByZXR1cm4oKENIQVIpKDEzNyAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDFhOiByZXR1cm4oKENIQVIpKDEzOCAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwNDFiOiByZXR1cm4oKENIQVIpKDEzOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwNDFjOiByZXR1cm4oKENIQVIpKDE0MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDFkOiBy ZXR1cm4oKENIQVIpKDE0MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDFlOiByZXR1cm4oKENI QVIpKDE0MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDFmOiByZXR1cm4oKENIQVIpKDE0MyAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDIwOiByZXR1cm4oKENIQVIpKDE0NCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwNDIxOiByZXR1cm4oKENIQVIpKDE0NSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwNDIyOiByZXR1cm4oKENIQVIpKDE0NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDIz OiByZXR1cm4oKENIQVIpKDE0NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDI0OiByZXR1cm4o KENIQVIpKDE0OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDI1OiByZXR1cm4oKENIQVIpKDE0 OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDI2OiByZXR1cm4oKENIQVIpKDE1MCAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwNDI3OiByZXR1cm4oKENIQVIpKDE1MSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwNDI4OiByZXR1cm4oKENIQVIpKDE1MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw NDI5OiByZXR1cm4oKENIQVIpKDE1MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDJhOiByZXR1 cm4oKENIQVIpKDE1NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDJiOiByZXR1cm4oKENIQVIp KDE1NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDJjOiByZXR1cm4oKENIQVIpKDE1NiAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDJkOiByZXR1cm4oKENIQVIpKDE1NyAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwNDJlOiByZXR1cm4oKENIQVIpKDE1OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwNDJmOiByZXR1cm4oKENIQVIpKDE1OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDMwOiBy ZXR1cm4oKENIQVIpKDE2MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDMxOiByZXR1cm4oKENI QVIpKDE2MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDMyOiByZXR1cm4oKENIQVIpKDE2MiAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDMzOiByZXR1cm4oKENIQVIpKDE2MyAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwNDM0OiByZXR1cm4oKENIQVIpKDE2NCAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwNDM1OiByZXR1cm4oKENIQVIpKDE2NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDM2 OiByZXR1cm4oKENIQVIpKDE2NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDM3OiByZXR1cm4o KENIQVIpKDE2NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDM4OiByZXR1cm4oKENIQVIpKDE2 OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDM5OiByZXR1cm4oKENIQVIpKDE2OSAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwNDNhOiByZXR1cm4oKENIQVIpKDE3MCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwNDNiOiByZXR1cm4oKENIQVIpKDE3MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw NDNjOiByZXR1cm4oKENIQVIpKDE3MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDNkOiByZXR1 cm4oKENIQVIpKDE3MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDNlOiByZXR1cm4oKENIQVIp KDE3NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDNmOiByZXR1cm4oKENIQVIpKDE3NSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQwOiByZXR1cm4oKENIQVIpKDIyNCAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgwNDQxOiByZXR1cm4oKENIQVIpKDIyNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgwNDQyOiByZXR1cm4oKENIQVIpKDIyNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQzOiBy ZXR1cm4oKENIQVIpKDIyNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQ0OiByZXR1cm4oKENI QVIpKDIyOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQ1OiByZXR1cm4oKENIQVIpKDIyOSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQ2OiByZXR1cm4oKENIQVIpKDIzMCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgwNDQ3OiByZXR1cm4oKENIQVIpKDIzMSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgwNDQ4OiByZXR1cm4oKENIQVIpKDIzMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDQ5 OiByZXR1cm4oKENIQVIpKDIzMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDRhOiByZXR1cm4o KENIQVIpKDIzNCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDRiOiByZXR1cm4oKENIQVIpKDIz NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDRjOiByZXR1cm4oKENIQVIpKDIzNiAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgwNDRkOiByZXR1cm4oKENIQVIpKDIzNyAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgwNDRlOiByZXR1cm4oKENIQVIpKDIzOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgw NDRmOiByZXR1cm4oKENIQVIpKDIzOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDUxOiByZXR1 cm4oKENIQVIpKDI0MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDU0OiByZXR1cm4oKENIQVIp KDI0MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDU3OiByZXR1cm4oKENIQVIpKDI0NSAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgwNDVlOiByZXR1cm4oKENIQVIpKDI0NyAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgyMTE2OiByZXR1cm4oKENIQVIpKDI1MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgyMjE5OiByZXR1cm4oKENIQVIpKDI0OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyMjFhOiBy ZXR1cm4oKENIQVIpKDI1MSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTAwOiByZXR1cm4oKENI QVIpKDE5NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTAyOiByZXR1cm4oKENIQVIpKDE3OSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTBjOiByZXR1cm4oKENIQVIpKDIxOCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgyNTEwOiByZXR1cm4oKENIQVIpKDE5MSAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgyNTE0OiByZXR1cm4oKENIQVIpKDE5MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTE4 OiByZXR1cm4oKENIQVIpKDIxNyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTFjOiByZXR1cm4o KENIQVIpKDE5NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTI0OiByZXR1cm4oKENIQVIpKDE4 MCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTJjOiByZXR1cm4oKENIQVIpKDE5NCAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgyNTM0OiByZXR1cm4oKENIQVIpKDE5MyAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgyNTNjOiByZXR1cm4oKENIQVIpKDE5NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy NTUwOiByZXR1cm4oKENIQVIpKDIwNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTUxOiByZXR1 cm4oKENIQVIpKDE4NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTUyOiByZXR1cm4oKENIQVIp KDIxMyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTUzOiByZXR1cm4oKENIQVIpKDIxNCAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTU0OiByZXR1cm4oKENIQVIpKDIwMSAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgyNTU1OiByZXR1cm4oKENIQVIpKDE4NCAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgyNTU2OiByZXR1cm4oKENIQVIpKDE4MyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTU3OiBy ZXR1cm4oKENIQVIpKDE4NyAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTU4OiByZXR1cm4oKENI QVIpKDIxMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTU5OiByZXR1cm4oKENIQVIpKDIxMSAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTVhOiByZXR1cm4oKENIQVIpKDIwMCAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgyNTViOiByZXR1cm4oKENIQVIpKDE5MCAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgyNTVjOiByZXR1cm4oKENIQVIpKDE4OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTVk OiByZXR1cm4oKENIQVIpKDE4OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTVlOiByZXR1cm4o KENIQVIpKDE5OCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTVmOiByZXR1cm4oKENIQVIpKDE5 OSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTYwOiByZXR1cm4oKENIQVIpKDIwNCAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgyNTYxOiByZXR1cm4oKENIQVIpKDE4MSAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgyNTYyOiByZXR1cm4oKENIQVIpKDE4MiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgy NTYzOiByZXR1cm4oKENIQVIpKDE4NSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTY0OiByZXR1 cm4oKENIQVIpKDIwOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTY1OiByZXR1cm4oKENIQVIp KDIxMCAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTY2OiByZXR1cm4oKENIQVIpKDIwMyAmIDB4 ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTY3OiByZXR1cm4oKENIQVIpKDIwNyAmIDB4ZmYpKTsKLSAg ICAgIGNhc2UgMHgyNTY4OiByZXR1cm4oKENIQVIpKDIwOCAmIDB4ZmYpKTsKLSAgICAgIGNhc2Ug MHgyNTY5OiByZXR1cm4oKENIQVIpKDIwMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTZhOiBy ZXR1cm4oKENIQVIpKDIxNiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTZiOiByZXR1cm4oKENI QVIpKDIxNSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTZjOiByZXR1cm4oKENIQVIpKDIwNiAm IDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTgwOiByZXR1cm4oKENIQVIpKDIyMyAmIDB4ZmYpKTsK LSAgICAgIGNhc2UgMHgyNTg0OiByZXR1cm4oKENIQVIpKDIyMCAmIDB4ZmYpKTsKLSAgICAgIGNh c2UgMHgyNTg4OiByZXR1cm4oKENIQVIpKDIxOSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNThj OiByZXR1cm4oKENIQVIpKDIyMSAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTkwOiByZXR1cm4o KENIQVIpKDIyMiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTkxOiByZXR1cm4oKENIQVIpKDE3 NiAmIDB4ZmYpKTsKLSAgICAgIGNhc2UgMHgyNTkyOiByZXR1cm4oKENIQVIpKDE3NyAmIDB4ZmYp KTsKLSAgICAgIGNhc2UgMHgyNTkzOiByZXR1cm4oKENIQVIpKDE3OCAmIDB4ZmYpKTsKLSAgICAg IGNhc2UgMHgyNWEwOiByZXR1cm4oKENIQVIpKDI1NCAmIDB4ZmYpKTsKLSAgICAgIGRlZmF1bHQ6 IHJldHVybih0eF9jcHN1YihjKSk7ICAgICAvKiBGb3IgYm94IGNoYXJhY3RlcnMgZXRjICovCi0g ICAgfQotfQotCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUEMg Q29kZSBQYWdlIDg2OSAqLwotI2lmZGVmIENLX0FOU0lDCi10eF9jcDg2OShVU0hPUlQgYykKLSNl bHNlCi10eF9jcDg2OShjKSBVU0hPUlQgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAg IGlmIChjIDwgMHg4MCkgICAgICAgICAgICAgICAgICAgICAgIC8qIEhhcyBDMSBncmFwaGljcyAq LwotICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOwotICAgIHN3aXRjaCAoYykgewotICAg ICAgY2FzZSAweDAwYTA6IHJldHVybigoQ0hBUikoMjU1ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAwYTM6IHJldHVybigoQ0hBUikoMTU2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYTY6IHJl dHVybigoQ0hBUikoMTM4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYTc6IHJldHVybigoQ0hB UikoMjQ1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYTg6IHJldHVybigoQ0hBUikoMjQ5ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAwYTk6IHJldHVybigoQ0hBUikoMTUxICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAwYWI6IHJldHVybigoQ0hBUikoMTc0ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAwYWM6IHJldHVybigoQ0hBUikoMTM3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYWQ6 IHJldHVybigoQ0hBUikoMjQwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjA6IHJldHVybigo Q0hBUikoMjQ4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjE6IHJldHVybigoQ0hBUikoMjQx ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYjI6IHJldHVybigoQ0hBUikoMTUzICYgMHhmZikp OwotICAgICAgY2FzZSAweDAwYjM6IHJldHVybigoQ0hBUikoMTU0ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAwYjc6IHJldHVybigoQ0hBUikoMTM2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAw YmI6IHJldHVybigoQ0hBUikoMTc1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAwYmQ6IHJldHVy bigoQ0hBUikoMTcxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzODQ6IHJldHVybigoQ0hBUiko MjM5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzODU6IHJldHVybigoQ0hBUikoMjQ3ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAzODY6IHJldHVybigoQ0hBUikoMTM0ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAzODg6IHJldHVybigoQ0hBUikoMTQxICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAzODk6IHJldHVybigoQ0hBUikoMTQzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzOGE6IHJl dHVybigoQ0hBUikoMTQ0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzOGM6IHJldHVybigoQ0hB UikoMTQ2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzOGU6IHJldHVybigoQ0hBUikoMTQ5ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAzOGY6IHJldHVybigoQ0hBUikoMTUyICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAzOTA6IHJldHVybigoQ0hBUikoMTYxICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAzOTE6IHJldHVybigoQ0hBUikoMTY0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzOTI6 IHJldHVybigoQ0hBUikoMTY1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzOTM6IHJldHVybigo Q0hBUikoMTY2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzOTQ6IHJldHVybigoQ0hBUikoMTY3 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzOTU6IHJldHVybigoQ0hBUikoMTY4ICYgMHhmZikp OwotICAgICAgY2FzZSAweDAzOTY6IHJldHVybigoQ0hBUikoMTY5ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAzOTc6IHJldHVybigoQ0hBUikoMTcwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAz OTg6IHJldHVybigoQ0hBUikoMTcyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzOTk6IHJldHVy bigoQ0hBUikoMTczICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzOWE6IHJldHVybigoQ0hBUiko MTgxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzOWI6IHJldHVybigoQ0hBUikoMTgyICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAzOWM6IHJldHVybigoQ0hBUikoMTgzICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAzOWQ6IHJldHVybigoQ0hBUikoMTg0ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAzOWU6IHJldHVybigoQ0hBUikoMTg5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzOWY6IHJl dHVybigoQ0hBUikoMTkwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYTA6IHJldHVybigoQ0hB UikoMTk4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYTE6IHJldHVybigoQ0hBUikoMTk5ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAzYTM6IHJldHVybigoQ0hBUikoMjA3ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAzYTQ6IHJldHVybigoQ0hBUikoMjA4ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAzYTU6IHJldHVybigoQ0hBUikoMjA5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYTY6 IHJldHVybigoQ0hBUikoMjEwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYTc6IHJldHVybigo Q0hBUikoMjExICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYTg6IHJldHVybigoQ0hBUikoMjEy ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYTk6IHJldHVybigoQ0hBUikoMjEzICYgMHhmZikp OwotICAgICAgY2FzZSAweDAzYWE6IHJldHVybigoQ0hBUikoMTQ1ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAzYWI6IHJldHVybigoQ0hBUikoMTUwICYgMHhmZikpOwotICAgICAgY2FzZSAweDAz YWM6IHJldHVybigoQ0hBUikoMTU1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYWQ6IHJldHVy bigoQ0hBUikoMTU3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYWU6IHJldHVybigoQ0hBUiko MTU4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYWY6IHJldHVybigoQ0hBUikoMTU5ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAzYjA6IHJldHVybigoQ0hBUikoMjUyICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAzYjE6IHJldHVybigoQ0hBUikoMjE0ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAzYjI6IHJldHVybigoQ0hBUikoMjE1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYjM6IHJl dHVybigoQ0hBUikoMjE2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYjQ6IHJldHVybigoQ0hB UikoMjIxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYjU6IHJldHVybigoQ0hBUikoMjIyICYg MHhmZikpOwotICAgICAgY2FzZSAweDAzYjY6IHJldHVybigoQ0hBUikoMjI0ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAzYjc6IHJldHVybigoQ0hBUikoMjI1ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAzYjg6IHJldHVybigoQ0hBUikoMjI2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYjk6 IHJldHVybigoQ0hBUikoMjI3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYmE6IHJldHVybigo Q0hBUikoMjI4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYmI6IHJldHVybigoQ0hBUikoMjI5 ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYmM6IHJldHVybigoQ0hBUikoMjMwICYgMHhmZikp OwotICAgICAgY2FzZSAweDAzYmQ6IHJldHVybigoQ0hBUikoMjMxICYgMHhmZikpOwotICAgICAg Y2FzZSAweDAzYmU6IHJldHVybigoQ0hBUikoMjMyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAz YmY6IHJldHVybigoQ0hBUikoMjMzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYzA6IHJldHVy bigoQ0hBUikoMjM0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYzE6IHJldHVybigoQ0hBUiko MjM1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYzI6IHJldHVybigoQ0hBUikoMjM3ICYgMHhm ZikpOwotICAgICAgY2FzZSAweDAzYzM6IHJldHVybigoQ0hBUikoMjM2ICYgMHhmZikpOwotICAg ICAgY2FzZSAweDAzYzQ6IHJldHVybigoQ0hBUikoMjM4ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDAzYzU6IHJldHVybigoQ0hBUikoMjQyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYzY6IHJl dHVybigoQ0hBUikoMjQzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYzc6IHJldHVybigoQ0hB UikoMjQ0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzYzg6IHJldHVybigoQ0hBUikoMjQ2ICYg MHhmZikpOwotICAgICAgY2FzZSAweDAzYzk6IHJldHVybigoQ0hBUikoMjUwICYgMHhmZikpOwot ICAgICAgY2FzZSAweDAzY2E6IHJldHVybigoQ0hBUikoMTYwICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDAzY2I6IHJldHVybigoQ0hBUikoMjUxICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzY2M6 IHJldHVybigoQ0hBUikoMTYyICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzY2Q6IHJldHVybigo Q0hBUikoMTYzICYgMHhmZikpOwotICAgICAgY2FzZSAweDAzY2U6IHJldHVybigoQ0hBUikoMjUz ICYgMHhmZikpOwotICAgICAgY2FzZSAweDIwMTU6IHJldHVybigoQ0hBUikoMTQyICYgMHhmZikp OwotICAgICAgY2FzZSAweDIwMTg6IHJldHVybigoQ0hBUikoMTM5ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDIwMTk6IHJldHVybigoQ0hBUikoMTQwICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1 MDA6IHJldHVybigoQ0hBUikoMTk2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MDI6IHJldHVy bigoQ0hBUikoMTc5ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MGM6IHJldHVybigoQ0hBUiko MjE4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MTA6IHJldHVybigoQ0hBUikoMTkxICYgMHhm ZikpOwotICAgICAgY2FzZSAweDI1MTQ6IHJldHVybigoQ0hBUikoMTkyICYgMHhmZikpOwotICAg ICAgY2FzZSAweDI1MTg6IHJldHVybigoQ0hBUikoMjE3ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDI1MWM6IHJldHVybigoQ0hBUikoMTk1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MjQ6IHJl dHVybigoQ0hBUikoMTgwICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MmM6IHJldHVybigoQ0hB UikoMTk0ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1MzQ6IHJldHVybigoQ0hBUikoMTkzICYg MHhmZikpOwotICAgICAgY2FzZSAweDI1M2M6IHJldHVybigoQ0hBUikoMTk3ICYgMHhmZikpOwot ICAgICAgY2FzZSAweDI1NTA6IHJldHVybigoQ0hBUikoMjA1ICYgMHhmZikpOwotICAgICAgY2Fz ZSAweDI1NTE6IHJldHVybigoQ0hBUikoMTg2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NTQ6 IHJldHVybigoQ0hBUikoMjAxICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NTc6IHJldHVybigo Q0hBUikoMTg3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NWE6IHJldHVybigoQ0hBUikoMjAw ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NWQ6IHJldHVybigoQ0hBUikoMTg4ICYgMHhmZikp OwotICAgICAgY2FzZSAweDI1NjA6IHJldHVybigoQ0hBUikoMjA0ICYgMHhmZikpOwotICAgICAg Y2FzZSAweDI1NjM6IHJldHVybigoQ0hBUikoMTg1ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1 NjY6IHJldHVybigoQ0hBUikoMjAzICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1Njk6IHJldHVy bigoQ0hBUikoMjAyICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1NmM6IHJldHVybigoQ0hBUiko MjA2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1ODA6IHJldHVybigoQ0hBUikoMjIzICYgMHhm ZikpOwotICAgICAgY2FzZSAweDI1ODQ6IHJldHVybigoQ0hBUikoMjIwICYgMHhmZikpOwotICAg ICAgY2FzZSAweDI1ODg6IHJldHVybigoQ0hBUikoMjE5ICYgMHhmZikpOwotICAgICAgY2FzZSAw eDI1OTE6IHJldHVybigoQ0hBUikoMTc2ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1OTI6IHJl dHVybigoQ0hBUikoMTc3ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1OTM6IHJldHVybigoQ0hB UikoMTc4ICYgMHhmZikpOwotICAgICAgY2FzZSAweDI1YTA6IHJldHVybigoQ0hBUikoMjU0ICYg MHhmZikpOwotICAgICAgZGVmYXVsdDogcmV0dXJuKHR4X2Nwc3ViKGMpKTsgICAgIC8qIEZvciBi b3ggY2hhcmFjdGVycyBldGMgKi8KLSAgICB9Ci19Ci0KLWludCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBQQyBDb2RlIFBhZ2UgQzAgZ3JhcGhpY3MgKi8KLSNpZmRlZiBD S19BTlNJQwotdHhfc21pbGV5KFVTSE9SVCBjKQotI2Vsc2UKLXR4X3NtaWxleShjKSBVU0hPUlQg YzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjID4gMHgxZikKLSAgICAgIHJl dHVybigtMSk7Ci0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBjYXNlIDB4MDBhMDogcmV0dXJuKChD SEFSKTAgJiAweDdmKTsKLSAgICAgIGNhc2UgMHgwMGE3OiByZXR1cm4oKENIQVIpMjEgJiAweDdm KTsKLSAgICAgIGNhc2UgMHgwMGI2OiByZXR1cm4oKENIQVIpMjAgJiAweDdmKTsKLSAgICAgIGNh c2UgMHgyMDIyOiByZXR1cm4oKENIQVIpNyAmIDB4N2YpOwotICAgICAgY2FzZSAweDIwM2M6IHJl dHVybigoQ0hBUikxOSAmIDB4N2YpOwotICAgICAgY2FzZSAweDIxOTA6IHJldHVybigoQ0hBUiky NyAmIDB4N2YpOwotICAgICAgY2FzZSAweDIxOTE6IHJldHVybigoQ0hBUikyNCAmIDB4N2YpOwot ICAgICAgY2FzZSAweDIxOTI6IHJldHVybigoQ0hBUikyNiAmIDB4N2YpOwotICAgICAgY2FzZSAw eDIxOTM6IHJldHVybigoQ0hBUikyNSAmIDB4N2YpOwotICAgICAgY2FzZSAweDIxOTQ6IHJldHVy bigoQ0hBUikyOSAmIDB4N2YpOwotICAgICAgY2FzZSAweDIxOTU6IHJldHVybigoQ0hBUikxOCAm IDB4N2YpOwotICAgICAgY2FzZSAweDIxYTg6IHJldHVybigoQ0hBUikyMyAmIDB4N2YpOwotICAg ICAgY2FzZSAweDIzMTk6IHJldHVybigoQ0hBUikyOCAmIDB4N2YpOwotICAgICAgY2FzZSAweDI1 YWM6IHJldHVybigoQ0hBUikyMiAmIDB4N2YpOwotICAgICAgY2FzZSAweDI1YjI6IHJldHVybigo Q0hBUikzMCAmIDB4N2YpOwotICAgICAgY2FzZSAweDI1YmE6IHJldHVybigoQ0hBUikxNiAmIDB4 N2YpOwotICAgICAgY2FzZSAweDI1YmM6IHJldHVybigoQ0hBUikzMSAmIDB4N2YpOwotICAgICAg Y2FzZSAweDI1YzQ6IHJldHVybigoQ0hBUikxNyAmIDB4N2YpOwotICAgICAgY2FzZSAweDI1ZDg6 IHJldHVybigoQ0hBUik4ICYgMHg3Zik7Ci0gICAgICBjYXNlIDB4MjVkOTogcmV0dXJuKChDSEFS KTEwICYgMHg3Zik7Ci0gICAgICBjYXNlIDB4MjVlZjogcmV0dXJuKChDSEFSKTkgJiAweDdmKTsK LSAgICAgIGNhc2UgMHgyNjNhOiByZXR1cm4oKENIQVIpMSAmIDB4N2YpOwotICAgICAgY2FzZSAw eDI2M2I6IHJldHVybigoQ0hBUikyICYgMHg3Zik7Ci0gICAgICBjYXNlIDB4MjYzYzogcmV0dXJu KChDSEFSKTE1ICYgMHg3Zik7Ci0gICAgICBjYXNlIDB4MjY0MDogcmV0dXJuKChDSEFSKTEyICYg MHg3Zik7Ci0gICAgICBjYXNlIDB4MjY0MjogcmV0dXJuKChDSEFSKTExICYgMHg3Zik7Ci0gICAg ICBjYXNlIDB4MjY2MDogcmV0dXJuKChDSEFSKTYgJiAweDdmKTsKLSAgICAgIGNhc2UgMHgyNjYz OiByZXR1cm4oKENIQVIpNSAmIDB4N2YpOwotICAgICAgY2FzZSAweDI2NjU6IHJldHVybigoQ0hB UikzICYgMHg3Zik7Ci0gICAgICBjYXNlIDB4MjY2NjogcmV0dXJuKChDSEFSKTQgJiAweDdmKTsK LSAgICAgIGNhc2UgMHgyNjZhOiByZXR1cm4oKENIQVIpMTMgJiAweDdmKTsKLSAgICAgIGNhc2Ug MHgyNjZjOiByZXR1cm4oKENIQVIpMTQgJiAweDdmKTsKLSAgICAgIGRlZmF1bHQ6IHJldHVybigt MSk7Ci0gICAgfQotfQotCi1VU0hPUlQgIC8qIEhvcml6b250YWwgU2NhbiBMaW5lcyBVbmljb2Rl IHN1YnN0aXR1dGlvbnMgKi8KLSNpZmRlZiBDS19BTlNJQwotdHhfaHNsc3ViKFVTSE9SVCBjKQot I2Vsc2UKLXR4X2hzbHN1YihjKSBVU0hPUlQgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewot ICAgIGlmIChjID49IDB4MjNCQSAmJiBjIDw9IDB4MjNCRCApCi0gICAgc3dpdGNoIChjKSB7Ci0g ICAgICBjYXNlIDB4MjNCQTogcmV0dXJuKDB4MjUwMCk7ICAgICAgLyogSCBsaW5lIC0gU2NhbiAx ICovCi0gICAgICBjYXNlIDB4MjNCQjogcmV0dXJuKDB4MjUwMCk7ICAgICAgLyogSCBsaW5lIC0g U2NhbiAzICovCi0gICAgICBjYXNlIDB4MjNCQzogcmV0dXJuKDB4MjUwMCk7ICAgICAgLyogSCBs aW5lIC0gU2NhbiA3ICovCi0gICAgICBjYXNlIDB4MjNCRDogcmV0dXJuKDB4MjUwMCk7ICAgICAg LyogSCBsaW5lIC0gU2NhbiA5ICovCi0gICAgfQotICAgIHJldHVybihjKTsKLX0KLQotVVNIT1JU ICAvKiBLZXJtaXQgZm9udCAweEU/Pz8gVW5pY29kZSBzdWJzdGl0dXRpb25zICovCi0jaWZkZWYg Q0tfQU5TSUMKLXR4X3VzdWIoVVNIT1JUIGMpCi0jZWxzZQotdHhfdXN1YihjKSBVU0hPUlQgYzsK LSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChjIDwgMHhFMDAwIHx8IGMgPiAweEVG RkYpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBjYXNlIDB4RTIw MDogcmV0dXJuKDB4MjUyNCk7ICAgICAgLyogRXh0ZW5zaWJsZSBMZWZ0IEJyYWNlIE1pZGRsZSAq LwotICAgICAgY2FzZSAweEUyMDE6IHJldHVybigweDI1NzApOyAgICAgIC8qIEV4dGVuc2libGUg TGVmdCBQYXJlbnRoZXNpcyBib3QgKi8KLSAgICAgIGNhc2UgMHhFMjAyOiByZXR1cm4oMHgyNTZk KTsgICAgICAvKiBFeHRlbnNpYmxlIGxlZnQgcGFyZW50aGVzaXMgdG9wICovCi0gICAgICBjYXNl IDB4RTIwMzogcmV0dXJuKDB4MjUxNCk7ICAgICAgLyogRXh0ZW5zaWJsZSBsZWZ0IFNCIGJvdCAq LwotICAgICAgY2FzZSAweEUyMDQ6IHJldHVybigweDI1MGMpOyAgICAgIC8qIEV4dGVuc2libGUg bGVmdCBTQiB0b3AgKi8KLSAgICAgIGNhc2UgMHhFMjA1OiByZXR1cm4oMHgyNTFjKTsgICAgICAv KiBFeHRlbnNpYmxlIHJpZ2h0IGJyYWNlIG1pZGRsZSAqLwotICAgICAgY2FzZSAweEUyMDY6IHJl dHVybigweDI1NmYpOyAgICAgIC8qIEV4dGVuc2libGUgcmlnaHQgcGFyZW50aGVzaXMgYm90ICov Ci0gICAgICBjYXNlIDB4RTIwNzogcmV0dXJuKDB4MjU2ZSk7ICAgICAgLyogRXh0ZW5zaWJsZSBy aWdodCBwYXJlbnRoZXNpcyB0b3AgKi8KLSAgICAgIGNhc2UgMHhFMjA4OiByZXR1cm4oMHgyNTE4 KTsgICAgICAvKiBFeHRlbnNpYmxlIHJpZ2h0IFNCIGJvdCAqLwotICAgICAgY2FzZSAweEUyMDk6 IHJldHVybigweDI1MTApOyAgICAgIC8qIEV4dGVuc2libGUgcmlnaHQgU0IgdG9wICovCi0gICAg ICBjYXNlIDB4RTIwQzogcmV0dXJuKDB4MDNhMyk7ICAgICAgLyogU3VtbWF0aW9uIHN5bWJvbCBi b3QgKi8KLSAgICAgIGNhc2UgMHhFMjBEOiByZXR1cm4oMHgwM2EzKTsgICAgICAvKiBTdW1tYXRp b24gc3ltYm9sIHRvcCAqLwotICAgICAgY2FzZSAweEUyMEU6IHJldHVybigweDI1MTApOyAgICAg IC8qIFJpZ2h0IGNlaWxpbmcgY29ybmVyICovCi0gICAgICBjYXNlIDB4RTIwRjogcmV0dXJuKDB4 MjUxOCk7ICAgICAgLyogUmlnaHQgZmxvb3IgY29ybmVyICovCi0gICAgICBjYXNlIDB4RTMwMDog cmV0dXJuKDB4MjUwMik7ICAgICAgLyogViBib3ggbGluZSwgZXh0ZW5zaWJsZSwgbGVmdCAqLwot ICAgICAgY2FzZSAweEUzMDk6IHJldHVybigweDI1MDIpOyAgICAgIC8qIFYgYm94IGxpbmUsIGV4 dGVuc2libGUsIHJpZ2h0ICovCi0gICAgICBjYXNlIDB4RTMwQTogcmV0dXJuKDB4MjU4Yyk7ICAg ICAgLyogRGlhZ29uYWwgZmlsbCwgZGFyaywgVUwgKi8KLSAgICAgIGNhc2UgMHhFMzBCOiByZXR1 cm4oMHgyNTkwKTsgICAgICAvKiBEaWFnb25hbCBmaWxsLCBkYXJrLCBVUiAqLwotICAgICAgY2Fz ZSAweEUzMjA6IHJldHVybigweDI1ODMpOyAgICAgIC8qIFF1YWRyYW50IExMICovCi0gICAgICBj YXNlIDB4RTMyMTogcmV0dXJuKDB4MjQ5MCk7ICAgICAgLyogUXVhZHJhbnQgTFIgKi8KLSAgICAg IGNhc2UgMHhFMzIyOiByZXR1cm4oMHgyNThjKTsgICAgICAvKiBRdWFkcmFudCBVTCAqLwotICAg ICAgY2FzZSAweEUzMjM6IHJldHVybigweDI1ODgpOyAgICAgIC8qIFF1YWRyYW50IFVMIGFuZCBM TCBhbmQgTFIgKi8KLSAgICAgIGNhc2UgMHhFMzI0OiByZXR1cm4oMHgyNTg4KTsgICAgICAvKiBR dWFkcmFudCBVTCBhbmQgTFIgKi8KLSAgICAgIGNhc2UgMHhFMzI1OiByZXR1cm4oMHgyNTg4KTsg ICAgICAvKiBRdWFkcmFudCBVTCBhbmQgTFIgKi8KLSAgICAgIGNhc2UgMHhFMzI2OiByZXR1cm4o MHgyNTg4KTsgICAgICAvKiBRdWFkcmFudCBVTCBhbmQgVVIgYW5kIExMICovCi0gICAgICBjYXNl IDB4RTMyNzogcmV0dXJuKDB4MjU4OCk7ICAgICAgLyogUXVhZHJhbnQgVUwgYW5kIFVSIGFuZCBM UiAqLwotICAgICAgY2FzZSAweEUzMjg6IHJldHVybigweDI1OTApOyAgICAgIC8qIFF1YWRyYW50 IFVSICovCi0gICAgICBjYXNlIDB4RTMyOTogcmV0dXJuKDB4MjU4OCk7ICAgICAgLyogUXVhZHJh bnQgVVIgYW5kIExMIGFuZCBMUiAqLwotICAgICAgY2FzZSAweEU0MDA6IHJldHVybigweDIyMWEp OyAgICAgIC8qIFJhZGljYWwgc3ltYm9sLCBzbWFsbCAqLwotICAgICAgY2FzZSAweEU0MDE6IHJl dHVybigweDAwYmYpOyAgICAgIC8qIFJldmVyc2UgcXVlc3Rpb24gbWFyayAqLwotICAgICAgZGVm YXVsdDogcmV0dXJuKCh1bnNpZ25lZCkweGZmZmQpOwotICAgIH0KLX0KLQotaW50ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVuaWNvZGUgdG8gQ1A0Mzcgc3Vic3RpdHV0 aW9ucyAqLwotI2lmZGVmIENLX0FOU0lDCi10eF9jcHN1YihVU0hPUlQgYykKLSNlbHNlCi10eF9j cHN1YihjKSBVU0hPUlQgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGludCB4Owot ICAgIGlmIChjIDwgMHgwMDgwKSAgICAgICAgICAgICAgICAgICAgIC8qIEFTQ0lJICovCi0gICAg ICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7Ci0KLSAgICBpZiAoYyA+PSAweDAwODAgJiYgYyA8 PSAweDAxMDApIHsKLSAgICAgICAgc3dpdGNoIChjKSB7ICAgICAgICAgICAgICAgICAgICAvKiBM YXRpbi0xICovCi0gICAgICAgICAgY2FzZSAweDAwQTI6IHJldHVybigweDliKTsgICAgLyogQ2Vu dCBzaWduICovCi0gICAgICAgICAgY2FzZSAweDAwQTM6IHJldHVybigxNTYpOyAgICAgLyogUG91 bmQgc2lnbiAqLwotICAgICAgICAgIGNhc2UgMHgwMEFDOiByZXR1cm4oMTcwKTsgICAgIC8qIE5v dCBzeW1ib2wgKi8KLSAgICAgICAgICBjYXNlIDB4MDBCMDogcmV0dXJuKDI0OCk7ICAgICAvKiBE ZWdyZWUgc3ltYm9sICovCi0gICAgICAgICAgY2FzZSAweDAwQjE6IHJldHVybigyNDEpOyAgICAg LyogUGx1cyBvciBtaW51cyBzeW1ib2wgKi8KLSAgICAgICAgICBjYXNlIDB4MDBCMjogcmV0dXJu KDI1Myk7ICAgICAvKiBTdXBlcnNjcmlwdCAyICovCi0gICAgICAgICAgY2FzZSAweDAwQjM6IHJl dHVybig1MSk7ICAgICAgLyogU3VwZXJzY3JpcHQgMyAqLwotICAgICAgICAgIGNhc2UgMHgwMEI2 OiByZXR1cm4oMTQpOyAgICAgIC8qIFBpbGNyb3cgc3ltYm9sICovCi0gICAgICAgICAgY2FzZSAw eDAwQjc6IHJldHVybigyNTApOyAgICAgLyogQ2VudGVyIGRvdCwgc21hbGwgKi8KLSAgICAgICAg ICBjYXNlIDB4MDBCOTogcmV0dXJuKDQ5KTsgICAgICAvKiBTdXBlcnNjcmlwdCAxICovCi0gICAg ICAgICAgY2FzZSAweDAwRDA6IHJldHVybig2OCk7ICAgICAgLyogRXRoIC0+IEQgKi8KLSAgICAg ICAgICBjYXNlIDB4MDBENzogcmV0dXJuKDEyMCk7ICAgICAvKiBNdWx0aXBsaWNhdGlvbiBzeW1i b2wgKi8KLSAgICAgICAgICBjYXNlIDB4MDBERTogcmV0dXJuKDg0KTsgICAgICAvKiBUaG9ybiAt PiBUICovCi0gICAgICAgICAgY2FzZSAweDAwRjA6IHJldHVybigxMDApOyAgICAgLyogZXRoIC0+ IGV0aCAqLwotICAgICAgICAgIGNhc2UgMHgwMEY3OiByZXR1cm4oMjQ2KTsgICAgIC8qIERpdmlz aW9uIHN5bWJvbCAqLwotICAgICAgICAgIGNhc2UgMHgwMEZFOiByZXR1cm4oMTE2KTsgICAgIC8q IHRob3JuIC0+IHQgKi8KLSAgICAgICAgICBkZWZhdWx0OiByZXR1cm4oMHgxMyk7Ci0gICAgICAg IH0KLSAgICB9IGVsc2UgaWYgKGMgPj0gMHgwMTAwICYmIGMgPD0gMHgwMmZmKSB7IC8qIExhdGlu LTIgZXRjICovCi0gICAgICAgIHN3aXRjaCAoYykgewotICAgICAgICAgIGNhc2UgMHgwMTAzOiBy ZXR1cm4oOTcpOyAgICAgIC8qIGEgYnJldmUgKi8KLSAgICAgICAgICBjYXNlIDB4MDEwNTogcmV0 dXJuKDk3KTsgICAgICAvKiBhIG9nb25layAqLwotICAgICAgICAgIGNhc2UgMHgwMTA3OiAgICAg ICAgICAgICAgICAgIC8qIGMgYWN1dGUgKi8KLSAgICAgICAgICBjYXNlIDB4MDEwZDogcmV0dXJu KDk5KTsgICAgICAvKiBjIGNhcm9uICovCi0gICAgICAgICAgY2FzZSAweDAxMGY6ICAgICAgICAg ICAgICAgICAgLyogZCBjYXJvbiAqLwotICAgICAgICAgIGNhc2UgMHgwMTExOiByZXR1cm4oMTAw KTsgICAgIC8qIGQgd2l0aCBzdHJva2UgKi8KLSAgICAgICAgICBjYXNlIDB4MDExOTogICAgICAg ICAgICAgICAgICAvKiBlIG9nb25layAqLwotICAgICAgICAgIGNhc2UgMHgwMTFiOiByZXR1cm4o MTAxKTsgICAgIC8qIGUgY2Fyb24gKi8KLSAgICAgICAgICBjYXNlIDB4MDExZjogcmV0dXJuKDEw Myk7ICAgICAvKiBnIGJyZXZlICovCi0gICAgICAgICAgY2FzZSAweDAxMzA6IHJldHVybig3Myk7 ICAgICAgLyogQ2FwaXRhbCBJIHdpdGggRG90ICovCi0gICAgICAgICAgY2FzZSAweDAxMzE6IHJl dHVybigxMDUpOyAgICAgLyogRG90bGVzcyBpICovCi0gICAgICAgICAgY2FzZSAweDAxMzI6IHJl dHVybig4OSk7ICAgICAgLyogSUogPT4gWSAqLwotICAgICAgICAgIGNhc2UgMHgwMTMzOiByZXR1 cm4oMTUyKTsgICAgIC8qIGlqIC0+IHkgZGlhZXJlc2lzICovCi0gICAgICAgICAgY2FzZSAweDAx M2E6ICAgICAgICAgICAgICAgICAgLyogbCBhY3V0ZSAqLwotICAgICAgICAgIGNhc2UgMHgwMTNl OiAgICAgICAgICAgICAgICAgIC8qIGwgY2Fyb24gKi8KLSAgICAgICAgICBjYXNlIDB4MDE0Mjog cmV0dXJuKDEwOCk7ICAgICAvKiBsIHdpdGggc3Ryb2tlICovCi0gICAgICAgICAgY2FzZSAweDAx NDQ6ICAgICAgICAgICAgICAgICAgLyogbiBhY3V0ZSAqLwotICAgICAgICAgIGNhc2UgMHgwMTQ4 OiByZXR1cm4oMTEwKTsgICAgIC8qIG4gY2Fyb24gKi8KLSAgICAgICAgICBjYXNlIDB4MDE1MTog cmV0dXJuKDExMSk7ICAgICAvKiBvIGRvdWJsZSBhY3V0ZSAqLwotICAgICAgICAgIGNhc2UgMHgw MTUyOiByZXR1cm4oNzkpOyAgICAgIC8qIE9FICovCi0gICAgICAgICAgY2FzZSAweDAxNTM6IHJl dHVybigxMTEpOyAgICAgLyogb2UgKi8KLSAgICAgICAgICBjYXNlIDB4MDE1NTogICAgICAgICAg ICAgICAgICAvKiByIGFjdXRlICovCi0gICAgICAgICAgY2FzZSAweDAxNTk6IHJldHVybigxMTQp OyAgICAgLyogciBjYXJvbiAqLwotICAgICAgICAgIGNhc2UgMHgwMTViOiAgICAgICAgICAgICAg ICAgIC8qIHMgYWN1dGUgKi8KLSAgICAgICAgICBjYXNlIDB4MDE1ZjogICAgICAgICAgICAgICAg ICAvKiBzIG9nb25layAqLwotICAgICAgICAgIGNhc2UgMHgwMTYxOiByZXR1cm4oMTE1KTsgICAg IC8qIHMgY2Fyb24gKi8KLSAgICAgICAgICBjYXNlIDB4MDE2MzogICAgICAgICAgICAgICAgICAv KiB0IG9nb25layAqLwotICAgICAgICAgIGNhc2UgMHgwMTY1OiAgICAgICAgICAgICAgICAgIC8q IHQgY2Fyb24gKi8KLSAgICAgICAgICBjYXNlIDB4MDE2NzogcmV0dXJuKDExNik7ICAgICAvKiB0 IHdpdGggc3Ryb2tlICovCi0gICAgICAgICAgY2FzZSAweDAxNmY6ICAgICAgICAgICAgICAgICAg LyogdSByaW5nICovCi0gICAgICAgICAgY2FzZSAweDAxNzE6IHJldHVybigxMTcpOyAgICAgLyog dSBkb3VibGUgYWN1dGUgKi8KLSAgICAgICAgICBjYXNlIDB4MDE3YTogICAgICAgICAgICAgICAg ICAvKiB6IGFjdXRlICovCi0gICAgICAgICAgY2FzZSAweDAxN2M6ICAgICAgICAgICAgICAgICAg LyogeiBkb3QgYWJvdmUgKi8KLSAgICAgICAgICBjYXNlIDB4MDE3ZTogcmV0dXJuKDEyMik7ICAg ICAvKiB6IGNhcm9uICovCi0gICAgICAgICAgY2FzZSAweDAxOTI6IHJldHVybigxNTkpOyAgICAg LyogRnVuY3Rpb24tb2Ygc3ltYm9sLCBTY3JpcHQgZiAqLwotICAgICAgICAgIGNhc2UgMHgwMWQw OiByZXR1cm4oMTA1KTsgICAgIC8qIGkgY2Fyb24gKi8KLSAgICAgICAgICBjYXNlIDB4MDJjNzog ICAgICAgICAgICAgICAgICAvKiBjYXJvbiAtPiBVTksgKi8KLSAgICAgICAgICBjYXNlIDB4MDJk ODogcmV0dXJuKDB4MTMpOyAgICAvKiBicmV2ZSAtPiBVTksgKi8KLSAgICAgICAgICBjYXNlIDB4 MDJkZDogcmV0dXJuKDM0KTsgICAgICAvKiBEb3VibGUgYWN1dGUgLT4gRG91YmxlcXVvdGUgKi8K LSAgICAgICAgICBkZWZhdWx0OiByZXR1cm4oMHgxMyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug aWYgKGMgPj0gMHgwMzAwICYmIGMgPD0gMHgwM2ZmKSB7IC8qIEdyZWVrICovCi0gICAgICAgIHN3 aXRjaCAoYykgewotICAgICAgICAgIGNhc2UgMHgwMzkzOiByZXR1cm4oMjI2KTsgICAgIC8qIFVw cGVyY2FzZSBHcmVlayBHYW1tYSAqLwotICAgICAgICAgIGNhc2UgMHgwMzk4OiByZXR1cm4oMjMz KTsgICAgIC8qIFVwcGVyY2FzZSBHcmVlayBUaGV0YSAqLwotICAgICAgICAgIGNhc2UgMHgwMzlC OiByZXR1cm4oMjM1KTsgICAgIC8qIFVwcGVyY2FzZSBHcmVlayBMYW1iZGEgKi8KLSAgICAgICAg ICBjYXNlIDB4MDNBMDogcmV0dXJuKDIyNyk7ICAgICAvKiBVcHBlcmNhc2UgR3JlZWsgUGkgKi8K LSAgICAgICAgICBjYXNlIDB4MDNBMzogcmV0dXJuKDIyOCk7ICAgICAvKiBVcHBlcmNhc2UgR3Jl ZWsgU2lnbWEgKi8KLSAgICAgICAgICBjYXNlIDB4MDNBNDogcmV0dXJuKDB4RUEpOyAgICAvKiBP bWVnYSAqLwotICAgICAgICAgIGNhc2UgMHgwM0E2OiByZXR1cm4oMjMyKTsgICAgIC8qIFVwcGVy Y2FzZSBHcmVlayBQaGkgKi8KLSAgICAgICAgICBjYXNlIDB4MDNBOTogcmV0dXJuKDIzNCk7ICAg ICAvKiBVcHBlcmNhc2UgR3JlZWsgT21lZ2EgKi8KLSAgICAgICAgICBjYXNlIDB4MDNCMTogcmV0 dXJuKDB4RTApOyAgICAvKiBhbHBoYSAqLwotICAgICAgICAgIGNhc2UgMHgwM0IyOiByZXR1cm4o MHhFMSk7ICAgIC8qIGJldGEgKi8KLSAgICAgICAgICBjYXNlIDB4MDNCMzogcmV0dXJuKDIyNik7 ICAgICAvKiBMb3dlcmNhc2UgR3JlZWsgZ2FtbWEgKi8KLSAgICAgICAgICBjYXNlIDB4MDNCNDog cmV0dXJuKDB4RUIpOyAgICAvKiBkZWx0YSAqLwotICAgICAgICAgIGNhc2UgMHgwM0I1OiByZXR1 cm4oMjM4KTsgICAgIC8qIExvd2VyY2FzZSBHcmVlayBlcHNpbG9uICovCi0gICAgICAgICAgY2Fz ZSAweDAzQjc6IHJldHVybigyMzgpOyAgICAgLyogTG93ZXJjYXNlIEdyZWVrIGV0YSAqLwotICAg ICAgICAgIGNhc2UgMHgwM0I4OiByZXR1cm4oMjMzKTsgICAgIC8qIExvd2VyY2FzZSBHcmVlayB0 aGV0YSAqLwotICAgICAgICAgIGNhc2UgMHgwM0I5OiByZXR1cm4oMTA1KTsgICAgIC8qIExvd2Vy Y2FzZSBHcmVlayBpb3RhICovCi0gICAgICAgICAgY2FzZSAweDAzQkE6IHJldHVybigxMDcpOyAg ICAgLyogTG93ZXJjYXNlIEdyZWVrIGthcHBhICovCi0gICAgICAgICAgY2FzZSAweDAzQkI6IHJl dHVybigyMzUpOyAgICAgLyogTG93ZXJjYXNlIEdyZWVrIGxhbWJkYSAqLwotICAgICAgICAgIGNh c2UgMHgwM0JDOiByZXR1cm4oMjMwKTsgICAgIC8qIExvd2VyY2FzZSBHcmVlayBtdSAqLwotICAg ICAgICAgIGNhc2UgMHgwM0MwOiByZXR1cm4oMjI3KTsgICAgIC8qIExvd2VyY2FzZSBHcmVlayBw aSAqLwotICAgICAgICAgIGNhc2UgMHgwM0MzOiByZXR1cm4oMjI5KTsgICAgIC8qIExvd2VyY2Fz ZSBHcmVlayBzaWdtYSAqLwotICAgICAgICAgIGNhc2UgMHgwM0M0OiByZXR1cm4oMjMxKTsgICAg IC8qIExvd2VyY2FzZSBHcmVlayB0YXUgKi8KLSAgICAgICAgICBjYXNlIDB4MDNDNjogcmV0dXJu KDIzNyk7ICAgICAvKiBMb3dlcmNhc2UgR3JlZWsgcGhpICovCi0gICAgICAgICAgY2FzZSAweDAz Qzc6IHJldHVybigxMjApOyAgICAgLyogTG93ZXJjYXNlIEdyZWVrIGNoaSAqLwotICAgICAgICAg IGNhc2UgMHgwM0M5OiByZXR1cm4oMjM0KTsgICAgIC8qIExvd2VyY2FzZSBHcmVlayBvbWVnYSAq LwotICAgICAgICAgIGRlZmF1bHQ6IHJldHVybigweDEzKTsKLSAgICAgICAgfQotICAgIH0gZWxz ZSBpZiAoYyA+PSAweDIwMDAgJiYgYyA8PSAweDIwZmYpIHsgLyogU3ViK1N1cGVyc2NyaXB0cyAm IEN1cnJlbmN5ICovCi0gICAgICAgIHN3aXRjaCAoYykgewotICAgICAgICAgIGNhc2UgMHgyMDND OiByZXR1cm4oMHgxMyk7ICAgIC8qICEhICovCi0gICAgICAgICAgY2FzZSAweDIwNzA6IHJldHVy big0OCk7ICAgICAgLyogU3VwZXJzY3JpcHQgMCAqLwotICAgICAgICAgIGNhc2UgMHgyMDc0OiBy ZXR1cm4oNTIpOyAgICAgIC8qIFN1cGVyc2NyaXB0IDQgKi8KLSAgICAgICAgICBjYXNlIDB4MjA3 NTogcmV0dXJuKDUzKTsgICAgICAvKiBTdXBlcnNjcmlwdCA1ICovCi0gICAgICAgICAgY2FzZSAw eDIwNzY6IHJldHVybig1NCk7ICAgICAgLyogU3VwZXJzY3JpcHQgNiAqLwotICAgICAgICAgIGNh c2UgMHgyMDc3OiByZXR1cm4oNTUpOyAgICAgIC8qIFN1cGVyc2NyaXB0IDcgKi8KLSAgICAgICAg ICBjYXNlIDB4MjA3ODogcmV0dXJuKDU2KTsgICAgICAvKiBTdXBlcnNjcmlwdCA4ICovCi0gICAg ICAgICAgY2FzZSAweDIwNzk6IHJldHVybig1Nyk7ICAgICAgLyogU3VwZXJzY3JpcHQgOSAqLwot ICAgICAgICAgIGNhc2UgMHgyMDdhOiByZXR1cm4oNDMpOyAgICAgIC8qIFN1cGVyc2NyaXB0ICsg Ki8KLSAgICAgICAgICBjYXNlIDB4MjA3YjogcmV0dXJuKDQ1KTsgICAgICAvKiBTdXBlcnNjcmlw dCAtICovCi0gICAgICAgICAgY2FzZSAweDIwN0Y6IHJldHVybigyNTIpOyAgICAgLyogU3VwZXJz Y3JpcHQgbiAqLwotICAgICAgICAgIGNhc2UgMHgyMDgwOiByZXR1cm4oNDgpOyAgICAgIC8qIFN1 YnNjcmlwdCAwICovCi0gICAgICAgICAgY2FzZSAweDIwODE6IHJldHVybig0OSk7ICAgICAgLyog U3Vic2NyaXB0IDEgKi8KLSAgICAgICAgICBjYXNlIDB4MjA4MjogcmV0dXJuKDUwKTsgICAgICAv KiBTdWJzY3JpcHQgMiAqLwotICAgICAgICAgIGNhc2UgMHgyMDgzOiByZXR1cm4oNTEpOyAgICAg IC8qIFN1YnNjcmlwdCAzICovCi0gICAgICAgICAgY2FzZSAweDIwODQ6IHJldHVybig1Mik7ICAg ICAgLyogU3Vic2NyaXB0IDQgKi8KLSAgICAgICAgICBjYXNlIDB4MjA4NTogcmV0dXJuKDUzKTsg ICAgICAvKiBTdWJzY3JpcHQgNSAqLwotICAgICAgICAgIGNhc2UgMHgyMDg2OiByZXR1cm4oNTQp OyAgICAgIC8qIFN1YnNjcmlwdCA2ICovCi0gICAgICAgICAgY2FzZSAweDIwODc6IHJldHVybig1 NSk7ICAgICAgLyogU3Vic2NyaXB0IDcgKi8KLSAgICAgICAgICBjYXNlIDB4MjA4ODogcmV0dXJu KDU2KTsgICAgICAvKiBTdWJzY3JpcHQgOCAqLwotICAgICAgICAgIGNhc2UgMHgyMDg5OiByZXR1 cm4oNTcpOyAgICAgIC8qIFN1YnNjcmlwdCA5ICovCi0gICAgICAgICAgY2FzZSAweDIwOGE6IHJl dHVybig0Myk7ICAgICAgLyogU3Vic2NyaXB0ICsgKi8KLSAgICAgICAgICBjYXNlIDB4MjA4Yjog cmV0dXJuKDQ1KTsgICAgICAvKiBTdWJzY3JpcHQgLSAqLwotICAgICAgICAgIGNhc2UgMHgyMGE3 OiByZXR1cm4oMHg5Myk7ICAgIC8qIFBlc2V0YSAqLwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg ICAgICAgICB4ID0gdHhfcHVuYyhjKTsgICAgICAgICAgICAgLyogVmFyaW91cyBzcGFjZXMsIGRh c2hlcywgZXRjICovCi0gICAgICAgICAgICByZXR1cm4oKHggPCAwKSA/IDB4MTMgOiB4KTsKLSAg ICAgICAgfQotICAgIH0gZWxzZSBpZiAoYyA+PSAweDIxMDAgJiYgYyA8PSAweDIxZmYpIHsgLyog QXJyb3dzICovCi0gICAgICAgIHN3aXRjaCAoYykgewotICAgICAgICAgIGNhc2UgMHgyMTkwOiBy ZXR1cm4oMjcpOyAgICAgIC8qIEFycm93LCBsZWZ0LXBvaW50aW5nICovCi0gICAgICAgICAgY2Fz ZSAweDIxOTE6IHJldHVybigyNCk7ICAgICAgLyogQXJyb3csIHVwLXBvaW50aW5nICovCi0gICAg ICAgICAgY2FzZSAweDIxOTI6IHJldHVybigyNik7ICAgICAgLyogQXJyb3csIHJpZ2h0LXBvaW50 aW5nICovCi0gICAgICAgICAgY2FzZSAweDIxOTM6IHJldHVybigyNSk7ICAgICAgLyogQXJyb3cs IGRvd24tcG9pbnRpbmcgKi8KLSAgICAgICAgICBjYXNlIDB4MjE5NDogcmV0dXJuKDB4MWQpOyAg ICAvKiBBcnJvdywgbGVmdC1yaWdodCAqLwotICAgICAgICAgIGNhc2UgMHgyMTk1OiByZXR1cm4o MHgxMik7ICAgIC8qIEFycm93LCB1cC1kb3duICovCi0gICAgICAgICAgY2FzZSAweDIxOUY6IHJl dHVybigweDE4KTsgICAgLyogQXJyb3csIHVwLCBkb3VibGVoZWFkICovCi0gICAgICAgICAgY2Fz ZSAweDIxQTE6IHJldHVybigweDE5KTsgICAgLyogQXJyb3csIGRvd24sIGRvdWJsZWhlYWQgKi8K LSAgICAgICAgICBjYXNlIDB4MjFBODogcmV0dXJuKDB4MTcpOyAgICAvKiBBcnJvdywgdXAtZG93 biB3aXRoIGJhc2UgKi8KLSAgICAgICAgICBjYXNlIDB4MjFEMjogcmV0dXJuKDI2KTsgICAgICAv KiBJbXBsaWVzIHN5bWJvbCAqLwotICAgICAgICAgIGNhc2UgMHgyMUQ0OiByZXR1cm4oMjkpOyAg ICAgIC8qIElmIGFuZCBvbmx5IGlmIHN5bWJvbCAqLwotICAgICAgICAgIGNhc2UgMHgyMUU0OiBy ZXR1cm4oMHgxQik7ICAgIC8qIEFycm93LCBsZWZ0LCB0byBiYXIgKi8KLSAgICAgICAgICBjYXNl IDB4MjFFNTogcmV0dXJuKDB4MUEpOyAgICAvKiBBcnJvdywgcmlnaHQsIHRvIGJhciAqLwotICAg ICAgICAgIGNhc2UgMHgyMUU4OiByZXR1cm4oMHgxMCk7ICAgIC8qIE91dGxpbmUgd2hpdGUgcmln aHQgYXJyb3cgKi8KLSAgICAgICAgICBjYXNlIDB4MjFFOTogcmV0dXJuKDB4MGYpOyAgICAvKiBP dXRsaW5lIHdoaXRlIGRvd24gYXJyb3cgKi8KLSAgICAgICAgICBkZWZhdWx0OiByZXR1cm4oMHgx Myk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGMgPj0gMHgyMjAwICYmIGMgPD0gMHgyMmZm KSB7IC8qIE1hdGggKi8KLSAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgY2FzZSAweDIy MDI6IHJldHVybigyMzUpOyAgICAgLyogUGFydGlhbCBkaWZmZXJlbnRpYWwgc3ltYm9sICovCi0g ICAgICAgICAgY2FzZSAweDIyMDc6IHJldHVybigzMSk7ICAgICAgLyogTmFibGEsIExhcGxhY2Ug b3BlcmF0b3IgKi8KLSAgICAgICAgICBjYXNlIDB4MjIwODogcmV0dXJuKDB4MzMpOyAgICAvKiAo YmVjYXVzZSBvZiBRTlggbWlzdW5kZXJzdGFuZGluZykgKi8KLSAgICAgICAgICBjYXNlIDB4MjIx QTogcmV0dXJuKDI1MSk7ICAgICAvKiBSYWRpY2FsIHN5bWJvbCAqLwotICAgICAgICAgIGNhc2Ug MHgyMjFEOiByZXR1cm4oMjM2KTsgICAgIC8qIFByb3BvcnRpb25hbC10byAqLwotICAgICAgICAg IGNhc2UgMHgyMjFFOiByZXR1cm4oMjM2KTsgICAgIC8qIEluZmluaXR5IHN5bWJvbCAqLwotICAg ICAgICAgIGNhc2UgMHgyMjI3OiByZXR1cm4oMzApOyAgICAgIC8qIExvZ2ljYWwgQU5EICovCi0g ICAgICAgICAgY2FzZSAweDIyMjg6IHJldHVybigzMSk7ICAgICAgLyogTG9naWNhbCBPUiAqLwot ICAgICAgICAgIGNhc2UgMHgyMjI5OiByZXR1cm4oMjM5KTsgICAgIC8qIEludGVyc2VjdGlvbiBz eW1ib2wgKi8KLSAgICAgICAgICBjYXNlIDB4MjIyQTogcmV0dXJuKDg1KTsgICAgICAvKiBVbmlv biBzeW1ib2wgKi8KLSAgICAgICAgICBjYXNlIDB4MjIyQjogcmV0dXJuKDI0NCk7ICAgICAvKiBJ bnRlZ3JhbCBzeW1ib2wgKi8KLSAgICAgICAgICBjYXNlIDB4MjIzNDogcmV0dXJuKDI1NCk7ICAg ICAvKiBUaGVyZWZvcmUgc3ltYm9sICovCi0gICAgICAgICAgY2FzZSAweDIyM0M6IHJldHVybigx MjYpOyAgICAgLyogQ2VudGVyZWQgdGlsZGUgb3BlcmF0b3IgKi8KLSAgICAgICAgICBjYXNlIDB4 MjI0MzogcmV0dXJuKDI0Nyk7ICAgICAvKiBBc3ltcHRvdGljYWxseSBlcXVhbHMgKi8KLSAgICAg ICAgICBjYXNlIDB4MjI0ODogcmV0dXJuKDI0Nyk7ICAgICAvKiBBbG1vc3QgZXF1YWwgdG8gc3lt Ym9sICovCi0gICAgICAgICAgY2FzZSAweDIyNjA6IHJldHVybig4OCk7ICAgICAgLyogTm90IGVx dWFsIHN5bWJvbCAqLwotICAgICAgICAgIGNhc2UgMHgyMjYxOiByZXR1cm4oMjQwKTsgICAgIC8q IElkZW50aXR5IHN5bWJvbCAqLwotICAgICAgICAgIGNhc2UgMHgyMjY0OiByZXR1cm4oMjQzKTsg ICAgIC8qIExlc3MgdGhhbiBvciBlcXVhbCBzeW1ib2wgKi8KLSAgICAgICAgICBjYXNlIDB4MjI2 NTogcmV0dXJuKDI0Mik7ICAgICAvKiBHcmVhdGVyIHRoYW4gb3IgZXF1YWwgc3ltYm9sICovCi0g ICAgICAgICAgY2FzZSAweDIyODI6IHJldHVybig0MCk7ICAgICAgLyogU3Vic2V0IHN5bWJvbCAq LwotICAgICAgICAgIGNhc2UgMHgyMjgzOiByZXR1cm4oNDEpOyAgICAgIC8qIFN1cGVyc2V0IHN5 bWJvbCAqLwotICAgICAgICAgIGNhc2UgMHgyMkE2OiByZXR1cm4oMHhDMyk7ICAgIC8qIEFzc2Vy dGlvbiBzeW1ib2wgKi8KLSAgICAgICAgICBkZWZhdWx0OiByZXR1cm4oMHgxMyk7Ci0gICAgICAg IH0KLSAgICB9IGVsc2UgaWYgKGMgPj0gMHgyM0JBICYmIGMgPD0gMHgyM0JEICkgewotICAgICAg ICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgY2FzZSAweDIzQkE6IHJldHVybigweDI1MDApOyAgICAg IC8qIEggbGluZSAtIFNjYW4gMSAqLwotICAgICAgICBjYXNlIDB4MjNCQjogcmV0dXJuKDB4MjUw MCk7ICAgICAgLyogSCBsaW5lIC0gU2NhbiAzICovCi0gICAgICAgIGNhc2UgMHgyM0JDOiByZXR1 cm4oMHgyNTAwKTsgICAgICAvKiBIIGxpbmUgLSBTY2FuIDcgKi8KLSAgICAgICAgY2FzZSAweDIz QkQ6IHJldHVybigweDI1MDApOyAgICAgIC8qIEggbGluZSAtIFNjYW4gOSAqLwotICAgICAgICB9 Ci0gICAgfSBlbHNlIGlmIChjID49IDB4MjMwMCAmJiBjIDw9IDB4MjRmZikgeyAvKiBUZWNoICov Ci0gICAgICAgIHN3aXRjaCAoYykgewotICAgICAgICAgIGNhc2UgMHgyMzA4OiByZXR1cm4oMHhE QSk7ICAgIC8qIExlZnQgY2VpbGluZyAqLwotICAgICAgICAgIGNhc2UgMHgyMzA5OiByZXR1cm4o MHhCRik7ICAgIC8qIFJpZ2h0IGNlaWxpbmcgKi8KLSAgICAgICAgICBjYXNlIDB4MjMwQTogcmV0 dXJuKDB4QzApOyAgICAvKiBMZWZ0IGZsb29yICovCi0gICAgICAgICAgY2FzZSAweDIzMEI6IHJl dHVybigweEQ5KTsgICAgLyogUmlnaHQgZmxvb3IgKi8KLSAgICAgICAgICBjYXNlIDB4MjMxOTog cmV0dXJuKDB4MUMpOyAgICAvKiBUdXJuZWQgTm90IHNpZ24gKi8KLSAgICAgICAgICBjYXNlIDB4 MjMyMDogcmV0dXJuKDI0NCk7ICAgICAvKiBJbnRlZ3JhbCBzeW1ib2wgdG9wICovCi0gICAgICAg ICAgY2FzZSAweDIzMjE6IHJldHVybigyNDUpOyAgICAgLyogSW50ZWdyYWwgc3ltYm9sIGJvdCAq LwotICAgICAgICAgIGNhc2UgMHgyMzI5OiByZXR1cm4oNjApOyAgICAgIC8qIEJSQSwgbGFyZ2Ug bGVmdCBhbmdsZSBicmFja2V0ICovCi0gICAgICAgICAgY2FzZSAweDIzMkE6IHJldHVybig2Mik7 ICAgICAgLyogS0VULCBsYXJnZSByaWdodCBhbmdsZSBicmFja2V0ICovCi0gICAgICAgICAgY2Fz ZSAweDI0MDk6IHJldHVybigyNik7ICAgICAgLyogIkhUIiBiZWNvbWVzIHJpZ2h0IGFycm93ICov Ci0gICAgICAgICAgY2FzZSAweDI0MEE6IHJldHVybigyNSk7ICAgICAgLyogIkxGIiBiZWNvbWVz IGRvd24gYXJyb3cgKi8KLSAgICAgICAgICBjYXNlIDB4MjQwQjogcmV0dXJuKDIzKTsgICAgICAv KiAiVlQiIGJlY29tZXMgdXAtZG93biBhcnJvdyAqLwotICAgICAgICAgIGNhc2UgMHgyNDBDOiBy ZXR1cm4oMjQpOyAgICAgIC8qICJGRiIgYmVjb21lcyB1cCBhcnJvdyAqLwotICAgICAgICAgIGNh c2UgMHgyNDBEOiByZXR1cm4oMjcpOyAgICAgIC8qICJDUiIgYmVjb21lcyBsZWZ0IGFycm93ICov Ci0gICAgICAgICAgY2FzZSAweDI0MjQ6IHJldHVybigzMSk7ICAgICAgLyogIk5MIiBiZWNvbWVz IGRvd24gdHJpYW5nbGUgKi8KLSAgICAgICAgICBkZWZhdWx0OiByZXR1cm4oMHgxMyk7Ci0gICAg ICAgIH0KLSAgICB9IGVsc2UgaWYgKGMgPj0gMHgyNTAwICYmIGMgPD0gMHgyNTUyKSB7IC8qIEJv eCBkcmF3aW5nICovCi0gICAgICAgIHN3aXRjaCAoYykgewotICAgICAgICAgIGNhc2UgMHgyNTAw OiByZXR1cm4oMTk2KTsgICAgIC8qIENlbnRlciBib3ggYmFyIGhvcml6b250YWwgKi8KLSAgICAg ICAgICBjYXNlIDB4MjUwMTogcmV0dXJuKDB4Q0QpOyAgICAvKiBCb2xkIC0+IERvdWJsZSAqLwot ICAgICAgICAgIGNhc2UgMHgyNTAyOiByZXR1cm4oMTc5KTsgICAgIC8qIENlbnRlciBib3ggYmFy IHZlcnRpY2FsICovCi0gICAgICAgICAgY2FzZSAweDI1MDM6IHJldHVybigweEJBKTsgICAgLyog Qm9sZCAqLwotICAgICAgICAgIGNhc2UgMHgyNTA0OiByZXR1cm4oNDUpOyAgICAgIC8qIERhc2hl ZCBsaW5lICovCi0gICAgICAgICAgY2FzZSAweDI1MDY6IHJldHVybigxMjQpOyAgICAgLyogQnJv a2VuIHZlcnRpY2FsIGJhciAqLwotICAgICAgICAgIGNhc2UgMHgyNTBDOiByZXR1cm4oMjE4KTsg ICAgIC8qIFVMIGJveCBjb3JuZXIgKi8KLSAgICAgICAgICBjYXNlIDB4MjUwRjogcmV0dXJuKDB4 QzkpOyAgICAvKiBCb2xkICovCi0gICAgICAgICAgY2FzZSAweDI1MTA6IHJldHVybigxOTEpOyAg ICAgLyogVVIgQm94IENvcm5lciAqLwotICAgICAgICAgIGNhc2UgMHgyNTEzOiByZXR1cm4oMHhC Qik7ICAgIC8qIEJvbGQgKi8KLSAgICAgICAgICBjYXNlIDB4MjUxNDogcmV0dXJuKDE5Mik7ICAg ICAvKiBMTCBib3ggY29ybmVyICovCi0gICAgICAgICAgY2FzZSAweDI1MTc6IHJldHVybigweEM4 KTsgICAgLyogQm9sZCAqLwotICAgICAgICAgIGNhc2UgMHgyNTE4OiByZXR1cm4oMjE3KTsgICAg IC8qIExSIGJveCBjb3JuZXIgKi8KLSAgICAgICAgICBjYXNlIDB4MjUxQjogcmV0dXJuKDB4QkMp OyAgICAvKiBCb2xkICovCi0gICAgICAgICAgY2FzZSAweDI1MUM6IHJldHVybigxOTUpOyAgICAg LyogTGVmdCBtaWRkbGUgYm94IHNpZGUgKi8KLSAgICAgICAgICBjYXNlIDB4MjUyMDogcmV0dXJu KDB4QzMpOwotICAgICAgICAgIGNhc2UgMHgyNTIzOiByZXR1cm4oMHhDQyk7ICAgIC8qIEJvbGQg Ki8KLSAgICAgICAgICBjYXNlIDB4MjUyNDogcmV0dXJuKDE4MCk7ICAgICAvKiBSaWdodCBtaWRk bGUgYm94IHNpZGUgKi8KLSAgICAgICAgICBjYXNlIDB4MjUyODogcmV0dXJuKDE4MCk7Ci0gICAg ICAgICAgY2FzZSAweDI1MkI6IHJldHVybigweEI5KTsgICAgLyogQm9sZCAqLwotICAgICAgICAg IGNhc2UgMHgyNTJDOiByZXR1cm4oMTk0KTsgICAgIC8qIE1pZGRsZSBib3ggdG9wICovCi0gICAg ICAgICAgY2FzZSAweDI1MkY6IHJldHVybigxOTQpOwotICAgICAgICAgIGNhc2UgMHgyNTMzOiBy ZXR1cm4oMHhDQik7ICAgIC8qIEJvbGQgKi8KLSAgICAgICAgICBjYXNlIDB4MjUzNDogcmV0dXJu KDE5Myk7ICAgICAvKiBNaWRkbGUgYm94IGJvdCAqLwotICAgICAgICAgIGNhc2UgMHgyNTM3OiBy ZXR1cm4oMTkzKTsKLSAgICAgICAgICBjYXNlIDB4MjUzQjogcmV0dXJuKDB4Q0EpOyAgICAvKiBC b2xkICovCi0gICAgICAgICAgY2FzZSAweDI1M0M6IHJldHVybigxOTcpOyAgICAgLyogQm94IGlu dGVyc2VjdGlvbiAqLwotICAgICAgICAgIGNhc2UgMHgyNTNGOiByZXR1cm4oMTk3KTsKLSAgICAg ICAgICBjYXNlIDB4MjU0MjogcmV0dXJuKDE5Nyk7Ci0gICAgICAgICAgY2FzZSAweDI1NDc6IHJl dHVybigxOTcpOwotICAgICAgICAgIGNhc2UgMHgyNTQ4OiByZXR1cm4oMTk3KTsKLSAgICAgICAg ICBjYXNlIDB4MjU0OTogcmV0dXJuKDE5Nyk7Ci0gICAgICAgICAgY2FzZSAweDI1NEE6IHJldHVy bigxOTcpOwotICAgICAgICAgIGNhc2UgMHgyNTRCOiByZXR1cm4oMHhDRSk7ICAgIC8qIEJvbGQg Ki8KLSAgICAgICAgICBjYXNlIDB4MjU1MDogcmV0dXJuKDIwNSk7ICAgICAvKiBDZW50ZXIgYm94 IGJhciBob3Jpem9udGFsIGRvdWJsZSAqLwotICAgICAgICAgIGNhc2UgMHgyNTUxOiByZXR1cm4o MTg2KTsgICAgIC8qIENlbnRlciBib3ggYmFyIHZlcnRpY2FsIGRvdWJsZSAqLwotICAgICAgICAg IGNhc2UgMHgyNTUyOiByZXR1cm4oMjEzKTsgICAgIC8qIFVMIGJveCBjb3JuZXIgc2luZ2xlIHRv IGRvdWJsZSAqLwotICAgICAgICAgIGRlZmF1bHQ6IHJldHVybigweDEzKTsKLSAgICAgICAgfQot ICAgIH0gZWxzZSBpZiAoYyA+PSAweDI1NTMgJiYgYyA8PSAweDI1NzkpIHsgLyogTW9yZSBib3gg ZHJhd2luZyAqLwotICAgICAgICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgICBjYXNlIDB4MjU1Mzog cmV0dXJuKDIxNCk7ICAgICAvKiBVTCBib3ggY29ybmVyIGRvdWJsZSB0byBzaW5nbGUgKi8KLSAg ICAgICAgICBjYXNlIDB4MjU1NDogcmV0dXJuKDIwMSk7ICAgICAvKiBVTCBib3ggY29ybmVyIGRv dWJsZSAqLwotICAgICAgICAgIGNhc2UgMHgyNTU1OiByZXR1cm4oMTg0KTsgICAgIC8qIFVSIGJv eCBjb3JuZXIgZG91YmxlIHRvIHNpbmdsZSAqLwotICAgICAgICAgIGNhc2UgMHgyNTU2OiByZXR1 cm4oMTgzKTsgICAgIC8qIFVSIGJveCBjb3JuZXIgc2luZ2xlIHRvIGRvdWJsZSAqLwotICAgICAg ICAgIGNhc2UgMHgyNTU3OiByZXR1cm4oMTg3KTsgICAgIC8qIFVSIGJveCBjb3JuZXIgZG91Ymxl ICovCi0gICAgICAgICAgY2FzZSAweDI1NTg6IHJldHVybigyMTIpOyAgICAgLyogTEwgYm94IGNv cm5lciBzaW5nbGUgdG8gZG91YmxlICovCi0gICAgICAgICAgY2FzZSAweDI1NTk6IHJldHVybigy MTEpOyAgICAgLyogTEwgYm94IGNvcm5lciBkb3VibGUgdG8gc2luZ2xlICovCi0gICAgICAgICAg Y2FzZSAweDI1NUE6IHJldHVybigyMDApOyAgICAgLyogTEwgYm94IGNvcm5lciBkb3VibGUgKi8K LSAgICAgICAgICBjYXNlIDB4MjU1QjogcmV0dXJuKDE5MCk7ICAgICAvKiBMUiBib3ggY29ybmVy IGRvdWJsZSB0byBzaW5nbGUgKi8KLSAgICAgICAgICBjYXNlIDB4MjU1QzogcmV0dXJuKDE4OSk7 ICAgICAvKiBMUiBib3ggY29ybmVyIHNpbmdsZSB0byBkb3VibGUgKi8KLSAgICAgICAgICBjYXNl IDB4MjU1RDogcmV0dXJuKDE4OCk7ICAgICAvKiBMUiBib3ggY29ybmVyIGRvdWJsZSAqLwotICAg ICAgICAgIGNhc2UgMHgyNTVFOiByZXR1cm4oMTk4KTsgICAgIC8qIExlZnQgbWlkIGJveCBzaWRl IHNpbmdsZSB0byBkb3VibCAqLwotICAgICAgICAgIGNhc2UgMHgyNTVGOiByZXR1cm4oMTk5KTsg ICAgIC8qIExlZnQgbWlkIGJveCBzaWRlIGRvdWJsZSB0byBzaW5nbCAqLwotICAgICAgICAgIGNh c2UgMHgyNTYwOiByZXR1cm4oMjA0KTsgICAgIC8qIExlZnQgbWlkZGxlIGJveCBzaWRlIGRvdWJs ZSAqLwotICAgICAgICAgIGNhc2UgMHgyNTYxOiByZXR1cm4oMTgxKTsgICAgIC8qIFJpZ2h0IGJv eCBzaWRlIGRvdWJsZSB0byBzaW5nbGUgKi8KLSAgICAgICAgICBjYXNlIDB4MjU2MjogcmV0dXJu KDE4Mik7ICAgICAvKiBSaWdodCBib3ggc2lkZSBzaW5nbGUgdG8gZG91YmxlICovCi0gICAgICAg ICAgY2FzZSAweDI1NjM6IHJldHVybigxODUpOyAgICAgLyogUmlnaHQgbWlkZGxlIGJveCBzaWRl IGRvdWJsZSAqLwotICAgICAgICAgIGNhc2UgMHgyNTY0OiByZXR1cm4oMjA5KTsgICAgIC8qIE1p ZGRsZSBib3ggdG9wIGRvdWJsZSB0byBzaW5nbGUgKi8KLSAgICAgICAgICBjYXNlIDB4MjU2NTog cmV0dXJuKDIxMCk7ICAgICAvKiBNaWRkbGUgYm94IHRvcCBzaW5nbGUgdG8gZG91YmxlICovCi0g ICAgICAgICAgY2FzZSAweDI1NjY6IHJldHVybigyMDMpOyAgICAgLyogTWlkZGxlIGJveCB0b3Ag ZG91YmxlICovCi0gICAgICAgICAgY2FzZSAweDI1Njc6IHJldHVybigyMDcpOyAgICAgLyogTWlk ZGxlIGJveCBib3Qgc2luZ2xlIHRvIGRvdWJsZSAqLwotICAgICAgICAgIGNhc2UgMHgyNTY4OiBy ZXR1cm4oMjA4KTsgICAgIC8qIE1pZGRsZSBib3ggYm90IGRvdWJsZSB0byBzaW5nbGUgKi8KLSAg ICAgICAgICBjYXNlIDB4MjU2OTogcmV0dXJuKDIwMik7ICAgICAvKiBNaWRkbGUgYm94IGJvdCBk b3VibGUgKi8KLSAgICAgICAgICBjYXNlIDB4MjU2QTogcmV0dXJuKDIxNik7ICAgICAvKiBCb3gg aW50ZXJzZWN0aW9uIGRvdWJsZSB0byBzaW5nbGUgKi8KLSAgICAgICAgICBjYXNlIDB4MjU2Qjog cmV0dXJuKDIxNSk7ICAgICAvKiBCb3ggaW50ZXJzZWN0aW9uIHNpbmdsZSB0byBkb3VibGUgKi8K LSAgICAgICAgICBjYXNlIDB4MjU2QzogcmV0dXJuKDIwNik7ICAgICAvKiBCb3ggaW50ZXJzZWN0 aW9uIGRvdWJsZSAqLwotICAgICAgICAgIGNhc2UgMHgyNTZEOiByZXR1cm4oMjE4KTsgICAgIC8q IFVMIGFyYyAqLwotICAgICAgICAgIGNhc2UgMHgyNTZFOiByZXR1cm4oMTkxKTsgICAgIC8qIFVS IGFyYyAqLwotICAgICAgICAgIGNhc2UgMHgyNTZGOiByZXR1cm4oMjE3KTsgICAgIC8qIExSIGFy YyAqLwotICAgICAgICAgIGNhc2UgMHgyNTcwOiByZXR1cm4oMTkyKTsgICAgIC8qIExMIGFyYyAq LwotICAgICAgICAgIGNhc2UgMHgyNTcxOiByZXR1cm4oMTc5KTsgICAgIC8qIERpYWdvbmFsIGxp bmUgTEwgdG8gVVIgKi8KLSAgICAgICAgICBjYXNlIDB4MjU3MjogcmV0dXJuKDE5Nik7ICAgICAv KiBEaWFnb25hbCBsaW5lIFVMIHRvIExSICovCi0gICAgICAgICAgY2FzZSAweDI1NzM6IHJldHVy big4OCk7ICAgICAgLyogRGlhZ29uYWwgbGluZXMgY3Jvc3NlZCAqLwotICAgICAgICAgIGNhc2Ug MHgyNTc1OiByZXR1cm4oMHhiMyk7ICAgIC8qIEhpZ2ggdmVydGljYWwgbGluZSAqLwotICAgICAg ICAgIGNhc2UgMHgyNTc2OiByZXR1cm4oNDUpOyAgICAgIC8qIFNob3J0IGhvcml6b250YWwgbGlu ZSAqLwotICAgICAgICAgIGNhc2UgMHgyNTc3OiByZXR1cm4oMHhiMyk7ICAgIC8qIExvdyB2ZXJ0 aWNhbCBsaW5lICovCi0gICAgICAgICAgY2FzZSAweDI1Nzk6IHJldHVybigweGIzKTsgICAgLyog SGlnaCB2ZXJ0aWNhbCBsaW5lIGJvbGQgKi8KLSAgICAgICAgICBkZWZhdWx0OiByZXR1cm4oMHgx Myk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGMgPj0gMHgyNTdhICYmIGMgPD0gMHgyNWZm KSB7IC8qIFN0aWxsIG1vcmUgYm94IGRyYXdpbmcgKi8KLSAgICAgICAgc3dpdGNoIChjKSB7Ci0g ICAgICAgICAgY2FzZSAweDI1N2I6IHJldHVybigweGIzKTsgICAgLyogTG93IHZlcnRpY2FsIGxp bmUgYm9sZCAqLwotICAgICAgICAgIGNhc2UgMHgyNTgwOiByZXR1cm4oMjIzKTsgICAgIC8qIFF1 YWRyYW50IFVMIGFuZCBVUiAodG9wIGhhbGYpICovCi0gICAgICAgICAgY2FzZSAweDI1ODE6IHJl dHVybigweGM0KTsgICAgLyogU2NhbiBsaW5lIDkgKi8KLSAgICAgICAgICBjYXNlIDB4MjU4Mjog cmV0dXJuKDB4REMpOyAgICAvKiBCbGFjayBibG9iIGxvd2VyIGhhbGYgKi8KLSAgICAgICAgICBj YXNlIDB4MjU4NDogcmV0dXJuKDIyMCk7ICAgICAvKiBRdWFkcmFudCBMTCBhbmQgTFIgKGxvd2Vy IGhhbGYpICovCi0gICAgICAgICAgY2FzZSAweDI1ODg6IHJldHVybigyMTkpOyAgICAgLyogRmls bCBjaGFyYWN0ZXIgZGFyayAqLwotICAgICAgICAgIGNhc2UgMHgyNThDOiByZXR1cm4oMjIxKTsg ICAgIC8qIFF1YWRyYW50IFVMIGFuZCBMTCAobGVmdCBoYWxmKSAqLwotICAgICAgICAgIGNhc2Ug MHgyNThFOiByZXR1cm4oMHhERCk7Ci0gICAgICAgICAgY2FzZSAweDI1OTA6IHJldHVybigyMjIp OyAgICAgLyogUXVhZHJhbnQgVVIgYW5kIExSIChyaWdodCBoYWxmKSAqLwotICAgICAgICAgIGNh c2UgMHgyNTkxOiByZXR1cm4oMTc2KTsgICAgIC8qIEZpbGwgY2hhcmFjdGVyIGxpZ2h0ICovCi0g ICAgICAgICAgY2FzZSAweDI1OTI6IHJldHVybigxNzcpOyAgICAgLyogRmlsbCBjaGFyYWN0ZXIg bWVkaXVtICovCi0gICAgICAgICAgY2FzZSAweDI1OTM6IHJldHVybigxNzgpOyAgICAgLyogRmls bCBjaGFyYWN0ZXIgaGVhdnkgKi8KLSAgICAgICAgICBjYXNlIDB4MjU5NDogcmV0dXJuKDB4YzQp OyAgICAvKiBTY2FuIGxpbmUgMSAqLwotICAgICAgICAgIGNhc2UgMHgyNUEwOiByZXR1cm4oMjU0 KTsgICAgIC8qIFNvbGlkIHNxdWFyZSwgY2VudGVyICovCi0gICAgICAgICAgY2FzZSAweDI1QTY6 IHJldHVybigxNzcpOyAgICAgLyogQmxvdGNoICovCi0gICAgICAgICAgY2FzZSAweDI1QUM6ICAg ICAgICAgICAgICAgICAgLyogQmxhY2sgcmVjdGFuZ2xlICovCi0gICAgICAgICAgY2FzZSAweDI1 QUY6IHJldHVybigweDE2KTsgICAgLyogV2hpdGUgcmVjdGFuZ2xlICovCi0gICAgICAgICAgY2Fz ZSAweDI1QjI6ICAgICAgICAgICAgICAgICAgLyogVHJpYW5nbGUsIHVwLXBvaW50aW5nICovCi0g ICAgICAgICAgY2FzZSAweDI1QjQ6IHJldHVybigweDFlKTsgICAgLyogVHJpYW5nbGUsIHVwLXBv aW50aW5nICovCi0gICAgICAgICAgY2FzZSAweDI1QjY6ICAgICAgICAgICAgICAgICAgLyogVHJp YW5nbGUsIHJpZ2h0LXBvaW50aW5nLCBkYXJrICovCi0gICAgICAgICAgY2FzZSAweDI1Qjc6ICAg ICAgICAgICAgICAgICAgLyogVHJpYW5nbGUsIHJpZ2h0LXBvaW50aW5nLCBsaWdodCAqLwotICAg ICAgICAgIGNhc2UgMHgyNUI5OiAgICAgICAgICAgICAgICAgIC8qIFRyaWFuZ2xlLCByaWdodC1w b2ludGluZywgbGlnaHQgKi8KLSAgICAgICAgICBjYXNlIDB4MjVCQTogcmV0dXJuKDB4MTApOyAg ICAvKiBUcmlhbmdsZSwgcmlnaHQtcG9pbnRpbmcsIG5hcnJvdyAqLwotICAgICAgICAgIGNhc2Ug MHgyNUJDOiAgICAgICAgICAgICAgICAgIC8qIFRyaWFuZ2xlLCBkb3duLXBvaW50aW5nICovCi0g ICAgICAgICAgY2FzZSAweDI1QkU6IHJldHVybigweDFmKTsgICAgLyogVHJpYW5nbGUsIGRvd24t cG9pbnRpbmcgKi8KLSAgICAgICAgICBjYXNlIDB4MjVDMDogICAgICAgICAgICAgICAgICAvKiBU cmlhbmdsZSwgbGVmdC1wb2ludGluZywgZGFyayAqLwotICAgICAgICAgIGNhc2UgMHgyNUMxOiAg ICAgICAgICAgICAgICAgIC8qIFRyaWFuZ2xlLCBsZWZ0LXBvaW50aW5nLCBkYXJrICovCi0gICAg ICAgICAgY2FzZSAweDI1QzQ6IHJldHVybigweDExKTsgICAgLyogVHJpYW5nbGUsIGxlZnQtcG9p bnRpbmcsIG5hcnJvdyAqLwotICAgICAgICAgIGNhc2UgMHgyNUM2OiByZXR1cm4oNCk7ICAgICAg IC8qIERpYW1vbmQsIGNlbnRlciwgc29saWQgKi8KLSAgICAgICAgICBjYXNlIDB4MjVDQjogcmV0 dXJuKDB4MDkpOyAgICAvKiBDaXJjbGUgKi8KLSAgICAgICAgICBjYXNlIDB4MjVDRjogcmV0dXJu KDI0OSk7ICAgICAvKiBDZW50ZXIgZG90LCBsYXJnZSAqLwotICAgICAgICAgIGNhc2UgMHgyNWQ4 OiByZXR1cm4oMHgwOCk7ICAgIC8qIEludmVyc2UgYnVsbGV0ICovCi0gICAgICAgICAgY2FzZSAw eDI1ZDk6IHJldHVybigweDBhKTsgICAgLyogSW52ZXJzZSB3aGl0ZSBjaXJjbGUgKi8KLSAgICAg ICAgICBjYXNlIDB4MjVFMjogcmV0dXJuKDB4RDkpOyAgICAvKiBMb3dlciByaWdodCB0cmlhbmds ZSAqLwotICAgICAgICAgIGNhc2UgMHgyNUUzOiByZXR1cm4oMHhDMCk7ICAgIC8qIExvd2VyIGxl ZnQgdHJpYW5nbGUgKi8KLSAgICAgICAgICBjYXNlIDB4MjVFNDogcmV0dXJuKDB4REEpOyAgICAv KiBVcHBlciBsZWZ0IHRyaWFuZ2xlICovCi0gICAgICAgICAgY2FzZSAweDI1RTU6IHJldHVybigw eEJmKTsgICAgLyogVXBwZXIgcmlnaHQgdHJpYW5nbGUgKi8KLSAgICAgICAgICBkZWZhdWx0OiBy ZXR1cm4oMHgxMyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGMgPj0gMHgyNjAwKSB7ICAg ICAgICAgICAvKiBBbGwgdGhlIHJlc3QgKi8KLSAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAg ICAgY2FzZSAweDI2M2E6IHJldHVybigweDAxKTsgICAgLyogU21pbGV5ICovCi0gICAgICAgICAg Y2FzZSAweDI2M2I6IHJldHVybigweDAyKTsgICAgLyogSW52ZXJzZSBTbWlsZXkgKi8KLSAgICAg ICAgICBjYXNlIDB4MjYzYzogcmV0dXJuKDB4MGYpOyAgICAvKiBXaGl0ZSBTdW4gd2l0aCBSYXlz ICovCi0gICAgICAgICAgY2FzZSAweDI2NDA6IHJldHVybigweDBjKTsgICAgLyogTWFsZSBzaWdu ICovCi0gICAgICAgICAgY2FzZSAweDI2NDI6IHJldHVybigweDBiKTsgICAgLyogRmVtYWxlIHNp Z24gKi8KLSAgICAgICAgICBjYXNlIDB4MjY2MDogcmV0dXJuKDB4MDYpOyAgICAvKiBTcGFkZSAq LwotICAgICAgICAgIGNhc2UgMHgyNjYzOiByZXR1cm4oMHgwNSk7ICAgIC8qIENsdWIgKi8KLSAg ICAgICAgICBjYXNlIDB4MjY2NTogcmV0dXJuKDB4MDMpOyAgICAvKiBIZWFydCAqLwotICAgICAg ICAgIGNhc2UgMHgyNjY2OiByZXR1cm4oMHgwNCk7ICAgIC8qIERpYW1vbmQsIGNlbnRlciwgc29s aWQgKi8KLSAgICAgICAgICBjYXNlIDB4MjY2YTogcmV0dXJuKDB4MGQpOyAgICAvKiBRdWFydGVy IG5vdGUgKi8KLSAgICAgICAgICBjYXNlIDB4MjY2YjogICAgICAgICAgICAgICAgICAvKiBCZWFt ZWQgcXVhcnRlciBub3RlcyAqLwotICAgICAgICAgIGNhc2UgMHgyNjZjOiByZXR1cm4oMHgwZSk7 ICAgIC8qIEJlYW1lZCA4dGggbm90ZXMgKi8KLSAgICAgICAgICBjYXNlIDB4Mjc5ZTogcmV0dXJu KDB4MWEpOyAgICAvKiBCb2xkIHJpZ2h0IGFycm93ICovCi0gICAgICAgICAgY2FzZSAweDI3YTE6 IHJldHVybigweDFhKTsgICAgLyogSGVhdnkgYmxhY2sgcmlnaHQgYXJyb3cuICovCi0gICAgICAg ICAgY2FzZSAweEUyMDA6IHJldHVybigxODApOyAgICAgLyogRXh0ZW5zaWJsZSBsZWZ0IGJyYWNl IG1pZGRsZSAqLwotICAgICAgICAgIGNhc2UgMHhFMjAxOiByZXR1cm4oMTkyKTsgICAgIC8qIEV4 dGVuc2libGUgTGVmdCBwYXJlbnRoZXNpcyBib3QgKi8KLSAgICAgICAgICBjYXNlIDB4RTIwMjog cmV0dXJuKDIxOCk7ICAgICAvKiBFeHRlbnNpYmxlIGxlZnQgcGFyZW50aGVzaXMgdG9wICovCi0g ICAgICAgICAgY2FzZSAweEUyMDM6IHJldHVybigxOTIpOyAgICAgLyogRXh0ZW5zaWJsZSBsZWZ0 IFNCIGJvdCAqLwotICAgICAgICAgIGNhc2UgMHhFMjA0OiByZXR1cm4oMjE4KTsgICAgIC8qIEV4 dGVuc2libGUgbGVmdCBTQiB0b3AgKi8KLSAgICAgICAgICBjYXNlIDB4RTIwNTogcmV0dXJuKDE5 NSk7ICAgICAvKiBFeHRlbnNpYmxlIHJpZ2h0IGJyYWNlIG1pZGRsZSAqLwotICAgICAgICAgIGNh c2UgMHhFMjA2OiByZXR1cm4oMjE3KTsgICAgIC8qIEV4dGVuc2libGUgcmlnaHQgcGFyZW50aGVz aXMgYm90ICovCi0gICAgICAgICAgY2FzZSAweEUyMDc6IHJldHVybigxOTEpOyAgICAgLyogRXh0 ZW5zaWJsZSByaWdodCBwYXJlbnRoZXNpcyB0b3AgKi8KLSAgICAgICAgICBjYXNlIDB4RTIwODog cmV0dXJuKDIxNyk7ICAgICAvKiBFeHRlbnNpYmxlIHJpZ2h0IFNCIGJvdCAqLwotICAgICAgICAg IGNhc2UgMHhFMjA5OiByZXR1cm4oMTkxKTsgICAgIC8qIEV4dGVuc2libGUgcmlnaHQgU0IgdG9w ICovCi0gICAgICAgICAgY2FzZSAweEUyMEM6IHJldHVybigyMjgpOyAgICAgLyogU3VtbWF0aW9u IHN5bWJvbCBib3QgKi8KLSAgICAgICAgICBjYXNlIDB4RTIwRDogcmV0dXJuKDIyOCk7ICAgICAv KiBTdW1tYXRpb24gc3ltYm9sIHRvcCAqLwotICAgICAgICAgIGNhc2UgMHhFMjBFOiByZXR1cm4o MTkxKTsgICAgIC8qIFJpZ2h0IGNlaWxpbmcgY29ybmVyICovCi0gICAgICAgICAgY2FzZSAweEUy MEY6IHJldHVybigyMTcpOyAgICAgLyogUmlnaHQgZmxvb3IgY29ybmVyICovCi0gICAgICAgICAg Y2FzZSAweEUzMDA6IHJldHVybigxNzkpOyAgICAgLyogViBib3ggbGluZSwgZXh0ZW5zaWJsZSwg bGVmdCAqLwotICAgICAgICAgIGNhc2UgMHhFMzA5OiByZXR1cm4oMTc5KTsgICAgIC8qIFYgYm94 IGxpbmUsIGV4dGVuc2libGUsIHJpZ2h0ICovCi0gICAgICAgICAgY2FzZSAweEUzMEE6IHJldHVy bigyMjEpOyAgICAgLyogRGlhZ29uYWwgZmlsbCwgZGFyaywgVUwgKi8KLSAgICAgICAgICBjYXNl IDB4RTMwQjogcmV0dXJuKDIyMik7ICAgICAvKiBEaWFnb25hbCBmaWxsLCBkYXJrLCBVUiAqLwot ICAgICAgICAgIGNhc2UgMHhFMzIwOiByZXR1cm4oMjIxKTsgICAgIC8qIFF1YWRyYW50IExMICov Ci0gICAgICAgICAgY2FzZSAweEUzMjE6IHJldHVybigyMjIpOyAgICAgLyogUXVhZHJhbnQgTFIg Ki8KLSAgICAgICAgICBjYXNlIDB4RTMyMjogcmV0dXJuKDIyMSk7ICAgICAvKiBRdWFkcmFudCBV TCAqLwotICAgICAgICAgIGNhc2UgMHhFMzIzOiByZXR1cm4oMjE5KTsgICAgIC8qIFF1YWRyYW50 IFVMIGFuZCBMTCBhbmQgTFIgKi8KLSAgICAgICAgICBjYXNlIDB4RTMyNDogcmV0dXJuKDIxOSk7 ICAgICAvKiBRdWFkcmFudCBVTCBhbmQgTFIgKi8KLSAgICAgICAgICBjYXNlIDB4RTMyNTogcmV0 dXJuKDIxOSk7ICAgICAvKiBRdWFkcmFudCBVTCBhbmQgTFIgKi8KLSAgICAgICAgICBjYXNlIDB4 RTMyNjogcmV0dXJuKDIxOSk7ICAgICAvKiBRdWFkcmFudCBVTCBhbmQgVVIgYW5kIExMICovCi0g ICAgICAgICAgY2FzZSAweEUzMjc6IHJldHVybigyMTkpOyAgICAgLyogUXVhZHJhbnQgVUwgYW5k IFVSIGFuZCBMUiAqLwotICAgICAgICAgIGNhc2UgMHhFMzI4OiByZXR1cm4oMjIyKTsgICAgIC8q IFF1YWRyYW50IFVSICovCi0gICAgICAgICAgY2FzZSAweEUzMjk6IHJldHVybigyMTkpOyAgICAg LyogUXVhZHJhbnQgVVIgYW5kIExMIGFuZCBMUiAqLwotICAgICAgICAgIGNhc2UgMHhFNDAwOiBy ZXR1cm4oMjUxKTsgICAgIC8qIFJhZGljYWwgc3ltYm9sLCBzbWFsbCAqLwotICAgICAgICAgIGNh c2UgMHhFNDAxOiByZXR1cm4oMTY4KTsgICAgIC8qIFJldmVyc2UgcXVlc3Rpb24gbWFyayAqLwot ICAgICAgICAgIGNhc2UgMHhGRkZEOiByZXR1cm4oMHgxMyk7ICAgIC8qICEhIGZvciB1bmtub3du ICovCi0gICAgICAgICAgZGVmYXVsdDogcmV0dXJuKDB4MTMpOwotICAgICAgICB9Ci0gICAgfQot ICAgIHJldHVybigweDEzKTsKLX0KLQotI2lmZGVmIE9TMgotLyoKLSAgTHVjaWRhIENvbnNvbGUg aXMgYSBVbmljb2RlIGZvbnQsIGJ1dCBpdCBpcyB2ZXJ5IHNwYXJzZWx5IHBvcHVsYXRlZC4KLSAg U2luY2UgaXQgaXMgdGhlIG9ubHkgbW9ub3NwYWNlIFVuaWNvZGUgZm9udCBtb3N0IHBlb3BsZSBo YXZlLCB3ZSBoYXZlCi0gIHRvIG1ha2UgcmVhc29uYWJsZSBzdWJzdGl0dXRpb25zIG9yIGVsc2Ug My80IG9mIHRoZSBnbHlwaHMgd2lsbCBzaG93Ci0gIHVwIGFzIGJsb2JzIG9uIHRoZSBzY3JlZW4u Ci0qLwotVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVuaWNvZGUg dG8gTHVjaWRhIENvbnNvbGUgKi8KLSNpZmRlZiBDS19BTlNJQwotdHhfbHVjaWRhc3ViKFVTSE9S VCBjKQotI2Vsc2UKLXR4X2x1Y2lkYXN1YihjKSBVU0hPUlQgYzsKLSNlbmRpZiAvKiBDS19BTlNJ QyAqLwotewotICAgIGlmIChjIDwgMHgwMTgwKSAgICAgICAgICAgICAgICAgICAgIC8qIExhdGlu LTEgYW5kIEV4dGVuZGVkIEEgKi8KLSAgICAgIHJldHVybihjKTsKLQotLyogRm9yIGVmZmljaWVu Y3kgd2UgdHJ5IHRvIGFycmFuZ2UgdGhlIHNlY3Rpb25zIGJ5IGZyZXF1ZW5jeSBvZiB1c2UuICov Ci0gICAgaWYgKGMgPj0gMHgyM0JBICYmIGMgPD0gMHgyM0JEKSB7Ci0gICAgICAgIHN3aXRjaChj KSB7Ci0gICAgICAgICAgY2FzZSAweDIzQkE6ICAgICAgICAgICAgICAgICAgICAvKiBIIGxpbmUg LSBTY2FuIDEgKi8KLSAgICAgICAgICBjYXNlIDB4MjNCQjogICAgICAgICAgICAgICAgICAgIC8q IEggbGluZSAtIFNjYW4gMyAqLwotICAgICAgICAgIGNhc2UgMHgyM0JDOiAgICAgICAgICAgICAg ICAgICAgLyogSCBsaW5lIC0gU2NhbiA3ICovCi0gICAgICAgICAgY2FzZSAweDIzQkQ6ICAgICAg ICAgICAgICAgICAgICAvKiBIIGxpbmUgLSBTY2FuIDkgKi8KLSAgICAgICAgICAgIHJldHVybigw eDI1MDApOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChjID49IDB4MjUwMCAmJiBjIDw9IDB4 MjU3ZikgeyAgIC8qIEJveCBkcmF3aW5nICovCi0gICAgICAgIGlmIChjID49IDB4MjU1MCAmJiBj IDw9IDB4MjU2YykKLSAgICAgICAgICByZXR1cm4oYyk7Ci0gICAgICAgIHN3aXRjaCAoYykgewot ICAgICAgICAgIC8qIFRoZW1zZWx2ZXMgKi8KLSAgICAgICAgY2FzZSAweDI1MDA6Ci0gICAgICAg IGNhc2UgMHgyNTAyOgotICAgICAgICBjYXNlIDB4MjUwYzoKLSAgICAgICAgY2FzZSAweDI1MTA6 Ci0gICAgICAgIGNhc2UgMHgyNTE0OgotICAgICAgICBjYXNlIDB4MjUxODoKLSAgICAgICAgY2Fz ZSAweDI1MWM6Ci0gICAgICAgIGNhc2UgMHgyNTI0OgotICAgICAgICBjYXNlIDB4MjUyYzoKLSAg ICAgICAgY2FzZSAweDI1MzQ6Ci0gICAgICAgIGNhc2UgMHgyNTNjOgotICAgICAgICAgICAgcmV0 dXJuKGMpOwotICAgICAgICAgIC8qIEhvcml6b250YWwgbGluZXMgKi8KLSAgICAgICAgY2FzZSAw eDI1MDE6ICAgICAgICAgICAgICAgICAgICAvKiBCb2xkICovCi0gICAgICAgICAgICByZXR1cm4o MHgyNTUwKTsgICAgICAgICAgICAgLyogVXNlIGRvdWJsZSAqLwotICAgICAgICBjYXNlIDB4MjUw NDoKLSAgICAgICAgY2FzZSAweDI1MDU6Ci0gICAgICAgIGNhc2UgMHgyNTA4OgotICAgICAgICBj YXNlIDB4MjUwOToKLSAgICAgICAgY2FzZSAweDI1NGM6Ci0gICAgICAgIGNhc2UgMHgyNTRkOgot ICAgICAgICBjYXNlIDB4MjU3YzoKLSAgICAgICAgY2FzZSAweDI1N2U6Ci0gICAgICAgICAgICBy ZXR1cm4oMHgyNTAwKTsKLSAgICAgICAgICAvKiBWZXJ0aWNhbCBsaW5lcyAqLwotICAgICAgICBj YXNlIDB4MjUwMzogICAgICAgICAgICAgICAgICAgIC8qIEJvbGQgKi8KLSAgICAgICAgICAgIHJl dHVybigweDI1NTEpOyAgICAgICAgICAgICAvKiBVc2UgZG91YmxlICovCi0gICAgICAgIGNhc2Ug MHgyNTA2OgotICAgICAgICBjYXNlIDB4MjUwNzoKLSAgICAgICAgY2FzZSAweDI1MGE6Ci0gICAg ICAgIGNhc2UgMHgyNTBiOiAvKiBPdGhlciAqLwotICAgICAgICBjYXNlIDB4MjU0ZToKLSAgICAg ICAgY2FzZSAweDI1NGY6Ci0gICAgICAgIGNhc2UgMHgyNTdkOgotICAgICAgICBjYXNlIDB4MjU3 ZjoKLSAgICAgICAgY2FzZSAweDI1NzU6Ci0gICAgICAgIGNhc2UgMHgyNTc3OgotICAgICAgICBj YXNlIDB4MjU3OToKLSAgICAgICAgY2FzZSAweDI1N2I6Ci0gICAgICAgICAgICByZXR1cm4oMHgy NTAyKTsKLSAgICAgICAgICAgIC8qIFVwcGVyIGxlZnQgYm94IGNvcm5lciAqLwotICAgICAgICBj YXNlIDB4MjUwZjogICAgICAgICAgICAgICAgICAgIC8qIEJvbGQgKi8KLSAgICAgICAgICAgIHJl dHVybigweDI1NTQpOyAgICAgICAgICAgICAvKiBVc2UgZG91YmxlICovCi0gICAgICAgIGNhc2Ug MHgyNTBkOiBjYXNlIDB4MjUwZTogICAgICAgLyogT3RoZXIgKi8KLSAgICAgICAgICAgIHJldHVy bigweDI1MGMpOwotICAgICAgICAgIC8qIFVwcGVyIHJpZ2h0IGJveCBjb3JuZXIgKi8KLSAgICAg ICAgY2FzZSAweDI1MTM6ICAgICAgICAgICAgICAgICAgICAvKiBCb2xkICovCi0gICAgICAgICAg ICByZXR1cm4oMHgyNTU3KTsKLSAgICAgICAgY2FzZSAweDI1MTE6Ci0gICAgICAgIGNhc2UgMHgy NTEyOiAgICAvKiBPdGhlciAqLwotICAgICAgICAgICAgcmV0dXJuKDB4MjUxMCk7Ci0gICAgICAg ICAgLyogTG93ZXIgbGVmdCBib3ggY29ybmVyICovCi0gICAgICAgIGNhc2UgMHgyNTE3OiAgICAg ICAgICAgICAgICAgICAgLyogQm9sZCAqLwotICAgICAgICAgICAgcmV0dXJuKDB4MjU1YSk7Ci0g ICAgICAgIGNhc2UgMHgyNTE1OgotICAgICAgICBjYXNlIDB4MjUxNjogICAgLyogT3RoZXIgKi8K LSAgICAgICAgICAgIHJldHVybigweDI1MTQpOwotICAgICAgICAgIC8qIExvd2VyIHJpZ2h0IGJv eCBjb3JuZXIgKi8KLSAgICAgICAgY2FzZSAweDI1MWI6ICAgICAgICAgICAgICAgICAgICAvKiBC b2xkICovCi0gICAgICAgICAgICByZXR1cm4oMHgyNTVkKTsKLSAgICAgICAgY2FzZSAweDI1MTk6 Ci0gICAgICAgIGNhc2UgMHgyNTFhOiAgICAvKiBPdGhlciAqLwotICAgICAgICAgICAgcmV0dXJu KDB4MjUxOCk7Ci0gICAgICAgICAgLyogVmVydGljYWwgYW5kIHJpZ2h0ICovCi0gICAgICAgIGNh c2UgMHgyNTIzOiAgICAgICAgICAgICAgICAgICAgLyogQm9sZCAqLwotICAgICAgICAgICAgcmV0 dXJuKDB4MjU2MCk7Ci0gICAgICAgIGNhc2UgMHgyNTFkOgotICAgICAgICBjYXNlIDB4MjUxZToK LSAgICAgICAgY2FzZSAweDI1MWY6Ci0gICAgICAgIGNhc2UgMHgyNTIwOgotICAgICAgICBjYXNl IDB4MjUyMToKLSAgICAgICAgY2FzZSAweDI1MjI6Ci0gICAgICAgICAgICByZXR1cm4oMHgyNTFj KTsKLSAgICAgICAgICAvKiBWZXJ0aWNhbCBhbmQgbGVmdCAqLwotICAgICAgICBjYXNlIDB4MjUy YjogICAgICAgICAgICAgICAgICAgIC8qIEJvbGQgKi8KLSAgICAgICAgICAgIHJldHVybigweDI1 NjMpOwotICAgICAgICBjYXNlIDB4MjUyNToKLSAgICAgICAgY2FzZSAweDI1MjY6Ci0gICAgICAg IGNhc2UgMHgyNTI3OgotICAgICAgICBjYXNlIDB4MjUyODoKLSAgICAgICAgY2FzZSAweDI1Mjk6 Ci0gICAgICAgIGNhc2UgMHgyNTJhOgotICAgICAgICAgICAgcmV0dXJuKDB4MjUyNCk7Ci0gICAg ICAgICAgLyogSG9yaXpvbnRhbCBhbmQgZG93biAqLwotICAgICAgICAgIGNhc2UgMHgyNTMzOiAg ICAgICAgICAgICAgICAgIC8qIEJvbGQgKi8KLSAgICAgICAgICAgIHJldHVybigweDI1NjYpOwot ICAgICAgICBjYXNlIDB4MjUyZDoKLSAgICAgICAgY2FzZSAweDI1MmU6Ci0gICAgICAgIGNhc2Ug MHgyNTJmOgotICAgICAgICBjYXNlIDB4MjUzMDoKLSAgICAgICAgY2FzZSAweDI1MzE6Ci0gICAg ICAgIGNhc2UgMHgyNTMyOgotICAgICAgICAgICAgcmV0dXJuKDB4MjUyYyk7Ci0gICAgICAgICAg ICAvKiBIb3Jpem9udGFsIGFuZCB1cCAqLwotICAgICAgICBjYXNlIDB4MjUzYjogICAgICAgICAg ICAgICAgICAgIC8qIEJvbGQgKi8KLSAgICAgICAgICAgIHJldHVybigweDI1NjkpOwotICAgICAg ICBjYXNlIDB4MjUzNTogY2FzZSAweDI1MzY6IGNhc2UgMHgyNTM3OgotICAgICAgICBjYXNlIDB4 MjUzODogY2FzZSAweDI1Mzk6IGNhc2UgMHgyNTNhOgotICAgICAgICAgICAgcmV0dXJuKDB4MjUz NCk7Ci0gICAgICAgICAgLyogSG9yaXpvbnRhbCBhbmQgVmVydGljYWwgKi8KLSAgICAgICAgICBj YXNlIDB4MjU0YjogICAgICAgICAgICAgICAgICAvKiBCb2xkICovCi0gICAgICAgICAgICByZXR1 cm4oMHgyNTZjKTsKLSAgICAgICAgICBjYXNlIDB4MjUzZDogY2FzZSAweDI1M2U6IGNhc2UgMHgy NTNmOgotICAgICAgICBjYXNlIDB4MjU0MDogY2FzZSAweDI1NDE6IGNhc2UgMHgyNTQyOiBjYXNl IDB4MjU0MzoKLSAgICAgICAgY2FzZSAweDI1NDQ6IGNhc2UgMHgyNTQ1OiBjYXNlIDB4MjU0Njog Y2FzZSAweDI1NDc6Ci0gICAgICAgIGNhc2UgMHgyNTQ4OiBjYXNlIDB4MjU0OTogY2FzZSAweDI1 NGE6Ci0gICAgICAgICAgICByZXR1cm4oMHgyNTNjKTsKLSAgICAgICAgICAvKiBDdXJ2ZWQgY29y bmVycyAqLwotICAgICAgICAgIGNhc2UgMHgyNTZkOiAgICAgICAgICAgICAgICAgIC8qIFVMICov Ci0gICAgICAgICAgICByZXR1cm4oMHgyNTBjKTsKLSAgICAgICAgICBjYXNlIDB4MjU2ZTogICAg ICAgICAgICAgICAgICAvKiBVUiAqLwotICAgICAgICAgICAgcmV0dXJuKDB4MjUxMCk7Ci0gICAg ICAgICAgY2FzZSAweDI1NmY6ICAgICAgICAgICAgICAgICAgLyogTEwgKi8KLSAgICAgICAgICAg IHJldHVybigweDI1MTgpOwotICAgICAgICAgIGNhc2UgMHgyNTcwOiAgICAgICAgICAgICAgICAg IC8qIExSICovCi0gICAgICAgICAgICByZXR1cm4oMHgyNTE0KTsKLSAgICAgICAgICBjYXNlIDB4 MjU3MTogICAgICAgICAgICAgICAgICAvKiBEaWFnb25hbCAqLwotICAgICAgICAgICAgcmV0dXJu KDB4MDAyZik7Ci0gICAgICAgICAgY2FzZSAweDI1NzI6ICAgICAgICAgICAgICAgICAgLyogT3Ro ZXIgZGlhZ29uYWwgKi8KLSAgICAgICAgICAgIHJldHVybigweDAwNWMpOwotICAgICAgICAgIGNh c2UgMHgyNTczOiAgICAgICAgICAgICAgICAgIC8qIERpYWdvbmFsIGNyb3NzICovCi0gICAgICAg ICAgICByZXR1cm4oMHgwMGQ3KTsKLSAgICAgICAgICAvKiBQYXJ0aWFsIGhvcml6b250YWwgbGlu ZXMgKi8KLSAgICAgICAgY2FzZSAweDI1NzQ6IGNhc2UgMHgyNTc2OiBjYXNlIDB4MjU3ODogY2Fz ZSAweDI1N2E6Ci0gICAgICAgICAgICByZXR1cm4oMHgwMDJkKTsKLSAgICAgICAgZGVmYXVsdDoK LSAgICAgICAgICAgIHJldHVybigweGZmZmQpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChj ID49IDB4MjE5MCAmJiBjIDw9IDB4MjFmZikgeyAgIC8qIEFycm93cyAqLwotICAgICAgICBpZiAo YyA+PSAweDIxOTAgJiYgYyA8PSAweDIxOTUgfHwgYyA9PSAweDIxYTgpCi0gICAgICAgICAgcmV0 dXJuKGMpOwotICAgICAgICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgICAvKiBMZWZ0LWFycm93IGZv cm1zICovCi0gICAgICAgIGNhc2UgMHgyMTllOiBjYXNlIDB4MjFhMjogY2FzZSAweDIxYTQ6IGNh c2UgMHgyMWE5OgotICAgICAgICBjYXNlIDB4MjFiYzogY2FzZSAweDIxZDA6IGNhc2UgMHgyMWRh OiBjYXNlIDB4MjFkYzoKLSAgICAgICAgY2FzZSAweDIxZTA6IGNhc2UgMHgyMWU0OiBjYXNlIDB4 MjFlNjogY2FzZSAweDIxYzc6Ci0gICAgICAgICAgICByZXR1cm4oMHgyMTkwKTsKLSAgICAgICAg ICAvKiBSaWdodC1hcnJvdyBmb3JtcyAqLwotICAgICAgICBjYXNlIDB4MjFhMDogY2FzZSAweDIx YTM6IGNhc2UgMHgyMWE2OiBjYXNlIDB4MjFhYToKLSAgICAgICAgY2FzZSAweDIxYzA6IGNhc2Ug MHgyMWMxOiBjYXNlIDB4MjFjOTogY2FzZSAweDIxZDI6Ci0gICAgICAgIGNhc2UgMHgyMWRiOiBj YXNlIDB4MjFkZDogY2FzZSAweDIxZTI6IGNhc2UgMHgyMWU1OgotICAgICAgICBjYXNlIDB4MjFl ODoKLSAgICAgICAgICAgIHJldHVybigweDIxOTIpOwotICAgICAgICAgIC8qIFVwLWFycm93IGZv cm1zICovCi0gICAgICAgIGNhc2UgMHgyMTlmOiBjYXNlIDB4MjFhNTogY2FzZSAweDIxYmU6IGNh c2UgMHgyMWJmOgotICAgICAgICBjYXNlIDB4MjFjODogY2FzZSAweDIxZDE6IGNhc2UgMHgyMWRl OiBjYXNlIDB4MjFlMToKLSAgICAgICAgY2FzZSAweDIxZTc6IGNhc2UgMHgyMWVhOgotICAgICAg ICAgICAgcmV0dXJuKDB4MjE5MSk7Ci0gICAgICAgICAgLyogRG93bi1hcnJvdyBmb3JtcyAqLwot ICAgICAgICBjYXNlIDB4MjFhMTogY2FzZSAweDIxYTc6IGNhc2UgMHgyMWFmOiBjYXNlIDB4MjFj MjoKLSAgICAgICAgY2FzZSAweDIxY2U6IGNhc2UgMHgyMWNhOiBjYXNlIDB4MjFkMzogY2FzZSAw eDIxZGY6Ci0gICAgICAgIGNhc2UgMHgyMWUzOiBjYXNlIDB4MjFlOToKLSAgICAgICAgICAgIHJl dHVybigweDIxOTMpOwotICAgICAgICAgIC8qIFVwLWRvd24tYXJyb3cgZm9ybXMgKi8KLSAgICAg ICAgY2FzZSAweDIxYzU6IGNhc2UgMHgyMWQ1OgotICAgICAgICAgICAgcmV0dXJuKDB4MjE5NSk7 Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4oMHhmZmZkKTsKLSAgICAgICAg fQotICAgIH0KLSAgICBpZiAoYyA+PSAweDI1ODAgJiYgYyA8PSAweDI1OWYpIHsgICAvKiBCbG9j ayBlbGVtZW50cyAqLwotICAgICAgICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgY2FzZSAweDI1ODA6 IGNhc2UgMHgyNTg0OiBjYXNlIDB4MjU4ODogY2FzZSAweDI1OGM6Ci0gICAgICAgIGNhc2UgMHgy NTkwOiBjYXNlIDB4MjU5MTogY2FzZSAweDI1OTI6IGNhc2UgMHgyNTkzOgotICAgICAgICAgICAg cmV0dXJuKGMpOwotICAgICAgICBjYXNlIDB4MjU4MTogY2FzZSAweDI1ODI6IGNhc2UgMHgyNTgz OgotICAgICAgICBjYXNlIDB4MjU4NTogY2FzZSAweDI1ODY6IGNhc2UgMHgyNTg3OgotICAgICAg ICAgICAgcmV0dXJuKDB4MjU4NCk7Ci0gICAgICAgIGNhc2UgMHgyNTg5OiBjYXNlIDB4MjU4YTog Y2FzZSAweDI1OGI6Ci0gICAgICAgIGNhc2UgMHgyNThkOiBjYXNlIDB4MjU4ZTogY2FzZSAweDI1 OGY6Ci0gICAgICAgICAgICByZXR1cm4oMHgyNThjKTsKLSAgICAgICAgY2FzZSAweDI1OTU6Ci0g ICAgICAgICAgICByZXR1cm4oMHgyNTAyKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg IHJldHVybigweGZmZmQpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChjID49IDB4MjIwMCAm JiBjIDw9IDB4MjJmZikgeyAgIC8qIE1hdGhlbWF0aWNhbCBvcGVyYXRvcnMgKi8KLSAgICAgICAg c3dpdGNoIChjKSB7Ci0gICAgICAgIGNhc2UgMHgyMjAyOiBjYXNlIDB4MjIwNjogY2FzZSAweDIy MGY6IGNhc2UgMHgyMjExOiBjYXNlIDB4MjIxMjoKLSAgICAgICAgY2FzZSAweDIyMTk6IGNhc2Ug MHgyMjIwOiBjYXNlIDB4MjIxZTogY2FzZSAweDIyMWY6IGNhc2UgMHgyMjI5OgotICAgICAgICBj YXNlIDB4MjIyYjogY2FzZSAweDIyNDg6IGNhc2UgMHgyMjYwOiBjYXNlIDB4MjI2MTogY2FzZSAw eDIyNjQ6Ci0gICAgICAgIGNhc2UgMHgyMjY1OgotICAgICAgICAgICAgcmV0dXJuKGMpOwotICAg ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuKDB4ZmZmZCk7Ci0gICAgICAgIH0KLSAg ICB9Ci0gICAgaWYgKGMgPj0gMHgyMzAwICYmIGMgPD0gMHgyMzdmKSB7ICAgLyogTWlzY2VsbGFu ZW91cyBUZWNobmljYWwgKi8KLSAgICAgICAgaWYgKGMgPT0gMHgyMzAyIHx8IGMgPT0gMHgyMzEw IHx8IGMgPT0gMHgyMzIwIHx8IGMgPT0gMHgyMzIxKQotICAgICAgICAgIHJldHVybihjKTsKLSAg ICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgY2FzZSAweDIzMjk6ICAgICAgICAgICAgICAg ICAgLyogQlJBICovCi0gICAgICAgICAgICByZXR1cm4oMHgwMDNjKTsKLSAgICAgICAgICBjYXNl IDB4MjMyYTogICAgICAgICAgICAgICAgICAvKiBLRVQgKi8KLSAgICAgICAgICAgIHJldHVybigw eDAwM2UpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICByZXR1cm4oMHhmZmZkKTsK LSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoYyA+PSAweDI1YTAgJiYgYyA8PSAweDI1ZmYpIHsg ICAvKiBHZW9tZXRyaWMgc2hhcGVzICovCi0gICAgICAgIHN3aXRjaCAoYykgewotICAgICAgICAg IC8qIFRoZW1zZWx2ZXMgKi8KLSAgICAgICAgY2FzZSAweDI1YTA6IGNhc2UgMHgyNWFjOiBjYXNl IDB4MjViMjogY2FzZSAweDI1YmE6Ci0gICAgICAgIGNhc2UgMHgyNWJjOiBjYXNlIDB4MjVjNDog Y2FzZSAweDI1Y2E6IGNhc2UgMHgyNWNiOgotICAgICAgICBjYXNlIDB4MjVkODogY2FzZSAweDI1 ZDk6Ci0gICAgICAgICAgICByZXR1cm4oYyk7Ci0gICAgICAgICAgLyogU3F1YXJlcyAqLwotICAg ICAgICAgIGNhc2UgMHgyNWExOiBjYXNlIDB4MjVhMjogY2FzZSAweDI1YTM6IGNhc2UgMHgyNWE0 OgotICAgICAgICAgIGNhc2UgMHgyNWE1OiBjYXNlIDB4MjVhNjogY2FzZSAweDI1YTc6IGNhc2Ug MHgyNWE4OgotICAgICAgICBjYXNlIDB4MjVhOTogY2FzZSAweDI1YWE6IGNhc2UgMHgyNWFiOgot ICAgICAgICBjYXNlIDB4MjVlNzogY2FzZSAweDI1ZTg6IGNhc2UgMHgyNWU5OiBjYXNlIDB4MjVl YTogY2FzZSAweDI1ZWI6Ci0gICAgICAgICAgICByZXR1cm4oMHgyNWEwKTsKLSAgICAgICAgICBj YXNlIDB4MjVhZDogY2FzZSAweDI1YWU6IGNhc2UgMHgyNWFmOiAvKiBSZWN0YW5nbGVzICovCi0g ICAgICAgIGNhc2UgMHgyNWIwOiBjYXNlIDB4MjViMToKLSAgICAgICAgICAgIHJldHVybigweDI1 YWMpOwotICAgICAgICAgIGNhc2UgMHgyNWIzOiBjYXNlIDB4MjViNDogY2FzZSAweDI1YjU6IC8q IFVwcmlnaHQgdHJpYW5nbGVzICovCi0gICAgICAgIGNhc2UgMHgyNWVjOiBjYXNlIDB4MjVlZDog Y2FzZSAweDI1ZWU6Ci0gICAgICAgICAgICByZXR1cm4oMHgyNWIyKTsKLSAgICAgICAgY2FzZSAw eDI1YjY6IGNhc2UgMHgyNWI3OiBjYXNlIDB4MjViODogY2FzZSAweDI1Yjk6IGNhc2UgMHgyNWJi OgotICAgICAgICAgICAgcmV0dXJuKDB4MjViYSk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFJp Z2h0LXBvaW50aW5nIHRyaWFuZ2xlcyAqLwotICAgICAgICAgIGNhc2UgMHgyNWJkOiBjYXNlIDB4 MjViZTogY2FzZSAweDI1YmY6IC8qIERvd24tcG9pbnRpbmcgdHJpYW5nbGVzICovCi0gICAgICAg ICAgICByZXR1cm4oMHgyNWJjKTsKLSAgICAgICAgY2FzZSAweDI1YzA6IGNhc2UgMHgyNWMxOiBj YXNlIDB4MjVjMjogY2FzZSAweDI1YzM6IGNhc2UgMHgyNWM1OgotICAgICAgICAgICAgcmV0dXJu KDB4MjVjNCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIExlZnQtcG9pbnRpbmcgdHJpYW5nbGVz ICovCi0gICAgICAgICAgY2FzZSAweDI1YzY6IGNhc2UgMHgyNWM3OiBjYXNlIDB4MjVjODogLyog RGlhbW9uZHMgKi8KLSAgICAgICAgICAgIHJldHVybigweDI2NjYpOwotICAgICAgICAgIC8qIENp cmNsZXMgKi8KLSAgICAgICAgY2FzZSAweDI1Yzk6IGNhc2UgMHgyNWNjOiBjYXNlIDB4MjVjZDog Y2FzZSAweDI1Y2U6IGNhc2UgMHgyNWNmOgotICAgICAgICBjYXNlIDB4MjVkMDogY2FzZSAweDI1 ZDE6IGNhc2UgMHgyNWQyOiBjYXNlIDB4MjVkMzogY2FzZSAweDI1ZDQ6Ci0gICAgICAgIGNhc2Ug MHgyNWQ1OiBjYXNlIDB4MjVlNjogY2FzZSAweDI1ZWY6Ci0gICAgICAgICAgICByZXR1cm4oMHgy NWNiKTsKLSAgICAgICAgICAvKiBDdXJ2ZXMgYW5kIGNvcm5lciB0cmlhbmdsZXMgKi8KLSAgICAg ICAgICBjYXNlIDB4MjVkYzogY2FzZSAweDI1ZTQ6ICAgICAvKiBVTCAqLwotICAgICAgICAgICAg cmV0dXJuKDB4MjUwYyk7Ci0gICAgICAgICAgY2FzZSAweDI1ZGQ6IGNhc2UgMHgyNWU1OiAgICAg LyogVVIgKi8KLSAgICAgICAgICAgIHJldHVybigweDI1MTApOwotICAgICAgICAgIGNhc2UgMHgy NWRmOiBjYXNlIDB4MjVlMzogICAgIC8qIExMICovCi0gICAgICAgICAgICByZXR1cm4oMHgyNTE0 KTsKLSAgICAgICAgICBjYXNlIDB4MjVkZTogY2FzZSAweDI1ZTI6ICAgICAvKiBMUiAqLwotICAg ICAgICAgICAgcmV0dXJuKDB4MjUxOCk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBy ZXR1cm4oMHhmZmZkKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoYyA+PSAweDI2MDAgJiYg YyA8PSAweDI2ZmYpIHsgICAvKiBNaXNjIHN5bWJvbHMgKi8KLSAgICAgICAgc3dpdGNoIChjKSB7 Ci0gICAgICAgICAgLyogVGhlbXNlbHZlcyAqLwotICAgICAgICBjYXNlIDB4MjYzYTogY2FzZSAw eDI2M2I6IGNhc2UgMHgyNjNjOiBjYXNlIDB4MjY0MDoKLSAgICAgICAgY2FzZSAweDI2NDI6IGNh c2UgMHgyNjYwOiBjYXNlIDB4MjY2MzogY2FzZSAweDI2NjU6Ci0gICAgICAgIGNhc2UgMHgyNjY2 OiBjYXNlIDB4MjY2YTogY2FzZSAweDI2NmI6Ci0gICAgICAgICAgICByZXR1cm4oYyk7Ci0gICAg ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4oMHhmZmZkKTsKLSAgICAgICAgfQotICAg IH0KLSAgICBpZiAoYyA+PSAweDI3OTQgJiYgYyA8PSAweDI3YmUpICAgICAvKiBSaWdodC1hcnJv dyBEaW5nYmF0cyAqLwotICAgICAgcmV0dXJuKDB4MjE5Mik7Ci0gICAgaWYgKGMgPj0gMHgyMDcw ICYmIGMgPD0gMHgyMDlmKSB7ICAgLyogU3VwZXIgJiBzdWJzY3JpcHRzICovCi0gICAgICAgIGlm IChjID09IDB4MjA3ZikgICAgICAgICAgICAgICAgLyogbiAqLwotICAgICAgICAgIHJldHVybihj KTsKLSAgICAgICAgZWxzZSBpZiAoYyA9PSAweDIwNzApICAgICAgICAgICAvKiAwICovCi0gICAg ICAgICAgcmV0dXJuKDB4MDAzMCk7Ci0gICAgICAgIGVsc2UgaWYgKGMgPj0gMHgyMDc0ICYmIGMg PD0gMHgyMDc5KQotICAgICAgICAgIHJldHVybihjIC0gMHgyMDQwKTsKLSAgICAgICAgZWxzZSBp ZiAoYyA+PSAweDIwODAgJiYgYyA8PSAweDIwODkpCi0gICAgICAgICAgcmV0dXJuKGMgLSAweDIw NTApOwotICAgICAgICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgY2FzZSAweDIwN2E6IGNhc2UgMHgy MDhhOgotICAgICAgICAgICAgcmV0dXJuKDB4MDAyYik7Ci0gICAgICAgIGNhc2UgMHgyMDdiOiBj YXNlIDB4MjA4YjoKLSAgICAgICAgICAgIHJldHVybigweDAwMmQpOwotICAgICAgICBjYXNlIDB4 MjA3YzogY2FzZSAweDIwOGM6Ci0gICAgICAgICAgICByZXR1cm4oMHgwMDNkKTsKLSAgICAgICAg Y2FzZSAweDIwN2Q6IGNhc2UgMHgyMDhkOgotICAgICAgICAgICAgcmV0dXJuKDB4MDAyOCk7Ci0g ICAgICAgIGNhc2UgMHgyMDdlOiBjYXNlIDB4MjA4ZToKLSAgICAgICAgICAgIHJldHVybigweDAw MjkpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuKDB4ZmZmZCk7Ci0gICAg ICAgIH0KLSAgICB9Ci0gICAgaWYgKGMgPj0gMHgwMTgwICYmIGMgPD0gMHgwMjRmKSB7ICAgLyog TGF0aW4gRXh0ZW5kZWQgQiwgUGFydCBJICovCi0gICAgICAgIGlmIChjID09IDB4MDE5MiB8fCBj ID49IDB4MDFmYSAmJiBjIDw9IDB4MDFmZikKLSAgICAgICAgICByZXR1cm4oYyk7ICAgICAgICAg ICAgICAgICAgICAvKiBMYXRpbiBFeHRlbmRlZCBCICovCi0gICAgICAgIHN3aXRjaCAoYykgewot ICAgICAgICBjYXNlIDB4MDE4MDogY2FzZSAweDAxODM6IGNhc2UgMHgwMTg0OiBjYXNlIDB4MDE4 NToKLSAgICAgICAgICAgIHJldHVybigweDAwNjIpOyAgICAgICAgICAgICAvKiBMb3dlcmNhc2Ug YiB2YXJpYW50cyAqLwotICAgICAgICBjYXNlIDB4MDE4MTogY2FzZSAweDAxODI6Ci0gICAgICAg ICAgICByZXR1cm4oMHgwMDQyKTsgICAgICAgICAgICAgLyogVXBwZXJjYXNlIEIgdmFyaWFudHMg Ki8KLSAgICAgICAgY2FzZSAweDAxODY6IGNhc2UgMHgwMTg3OgotICAgICAgICAgICAgcmV0dXJu KDB4MDA0Myk7ICAgICAgICAgICAgIC8qIFVwcGVyY2FzZSBDIHZhcmlhbnRzICovCi0gICAgICAg ICAgY2FzZSAweDAxODk6ICAgICAgICAgICAgICAgICAgLyogRCB3aXRoIHN0cm9rZSAqLwotICAg ICAgICAgICAgcmV0dXJuKDB4MDBEMCk7ICAgICAgICAgICAgIC8qIExvb2tzIGp1c3QgbGlrZSBF dGggKi8KLSAgICAgICAgICBjYXNlIDB4MDE4YTogICAgICAgICAgICAgICAgICAvKiBEIHdpdGgg aG9vayAqLwotICAgICAgICAgICAgcmV0dXJuKDB4MDA0NCk7Ci0gICAgICAgICAgY2FzZSAweDAx OGU6IGNhc2UgMHgwMTkwOiAgICAgLyogRS1saWtlIGxldHRlcnMgKi8KLSAgICAgICAgICAgIHJl dHVybigweDAwNDUpOwotICAgICAgICAgIGNhc2UgMHgwMThmOiAgICAgICAgICAgICAgICAgIC8q IGUtbGlrZSBsZXR0ZXJzICovCi0gICAgICAgICAgICByZXR1cm4oMHgwMDY1KTsKLSAgICAgICAg ICBjYXNlIDB4MDE5MTogICAgICAgICAgICAgICAgICAvKiBGLWxpa2UgKi8KLSAgICAgICAgICAg IHJldHVybigweDAwNDYpOwotICAgICAgICAgIGNhc2UgMHgwMTkzOiAgICAgICAgICAgICAgICAg IC8qIEctbGlrZSAqLwotICAgICAgICAgICAgcmV0dXJuKDB4MDA0Nyk7Ci0gICAgICAgICAgY2Fz ZSAweDAxOTQ6ICAgICAgICAgICAgICAgICAgLyogTGF0aW4gQ2FwaXRhbCBHYW1tYSAqLwotICAg ICAgICAgICAgcmV0dXJuKDB4MDM5Myk7ICAgICAgICAgICAgIC8qIFVzZSBHcmVlayAqLwotICAg ICAgICAgIGNhc2UgMHgwMTk1OiAgICAgICAgICAgICAgICAgIC8qIEdvdGhpYyBodiAqLwotICAg ICAgICAgICAgcmV0dXJuKDB4MDA2OCk7ICAgICAgICAgICAgIC8qIFVzZSBoICovCi0gICAgICAg ICAgY2FzZSAweDAxOTY6ICAgICAgICAgICAgICAgICAgLyogTGF0aW4gQ2FwaXRhbCBJb3RhICov Ci0gICAgICAgICAgICByZXR1cm4oMHgwMzk5KTsgICAgICAgICAgICAgLyogVXNlIEdyZWVrICov Ci0gICAgICAgICAgY2FzZSAweDAxOTc6ICAgICAgICAgICAgICAgICAgLyogSSB3aXRoIGJhciAq LwotICAgICAgICAgICAgcmV0dXJuKDB4MDA2OSk7Ci0gICAgICAgICAgY2FzZSAweDAxOTg6ICAg ICAgICAgICAgICAgICAgLyogSyB3aXRoIGhvb2sgKi8KLSAgICAgICAgICAgIHJldHVybigweDAw NEIpOwotICAgICAgICAgIGNhc2UgMHgwMTk5OiAgICAgICAgICAgICAgICAgIC8qIGsgd2l0aCBo b29rICovCi0gICAgICAgICAgICByZXR1cm4oMHgwMDZCKTsKLSAgICAgICAgICBjYXNlIDB4MDE5 QTogICAgICAgICAgICAgICAgICAvKiBsIHdpdGggYmFyICovCi0gICAgICAgICAgICByZXR1cm4o MHgwMDZDKTsKLSAgICAgICAgICBjYXNlIDB4MDE5QjogICAgICAgICAgICAgICAgICAvKiBsYW1i ZGEgd2l0aCBiYXIgKi8KLSAgICAgICAgICAgIHJldHVybigweDAzYmIpOyAgICAgICAgICAgICAv KiBVc2UgR3JlZWsgKi8KLSAgICAgICAgICBjYXNlIDB4MDE5QzogICAgICAgICAgICAgICAgICAv KiBVcHNpZGUgZG93biBtICovCi0gICAgICAgICAgICByZXR1cm4oMHgwMDZkKTsKLSAgICAgICAg ICBjYXNlIDB4MDE5RDogICAgICAgICAgICAgICAgICAvKiBOIHdpdGggbGVmdCBob29rICovCi0g ICAgICAgICAgICByZXR1cm4oMHgwMDRlKTsKLSAgICAgICAgICBjYXNlIDB4MDE5RTogICAgICAg ICAgICAgICAgICAvKiBuIHdpdGggbG9uZyByaWdodCBsZWcgKi8KLSAgICAgICAgICAgIHJldHVy bigweDAwNmUpOwotICAgICAgICAgIGNhc2UgMHgwMTlGOiBjYXNlIDB4MDFhMDogY2FzZSAweDAx YTI6IC8qIE8tbGlrZSBsZXR0ZXJzICovCi0gICAgICAgICAgICByZXR1cm4oMHgwMDRmKTsKLSAg ICAgICAgICBjYXNlIDB4MDFhMTogY2FzZSAweDAxYTM6ICAgICAvKiBvLWxpa2UgKi8KLSAgICAg ICAgICAgIHJldHVybigweDAwNmYpOwotICAgICAgICAgIGNhc2UgMHgwMUE0OiAgICAgICAgICAg ICAgICAgIC8qIFAgd2l0aCBob29rICovCi0gICAgICAgICAgICByZXR1cm4oMHgwMDUwKTsKLSAg ICAgICAgICBjYXNlIDB4MDFBNTogICAgICAgICAgICAgICAgICAvKiBwIHdpdGggaG9vayAqLwot ICAgICAgICAgICAgcmV0dXJuKDB4MDA3MCk7Ci0gICAgICAgICAgY2FzZSAweDAxQTY6ICAgICAg ICAgICAgICAgICAgLyogT2xkIE5vcnNlIFlSICovCi0gICAgICAgICAgICByZXR1cm4oMHgwMDUy KTsKLSAgICAgICAgICBjYXNlIDB4MDFBNzogICAgICAgICAgICAgICAgICAvKiBCYWNrd2FyZHMg UyAqLwotICAgICAgICAgICAgcmV0dXJuKDB4MDA1Myk7Ci0gICAgICAgICAgY2FzZSAweDAxQTg6 IGNhc2UgMHgwMUFBOiAgICAgLyogcy1saWtlIGxldHRlcnMgKi8KLSAgICAgICAgICAgIHJldHVy bigweDAwNzMpOwotICAgICAgICAgIGNhc2UgMHgwMUE5OiAgICAgICAgICAgICAgICAgIC8qIEVz aCAqLwotICAgICAgICAgICAgcmV0dXJuKDB4MDNhMyk7ICAgICAgICAgICAgIC8qIExvb2tzIGp1 c3QgbGlrZSBTaWdtYSAqLwotICAgICAgICAgIGNhc2UgMHgwMUFCOiBjYXNlIDB4MDFBRDogICAg IC8qIHQtbGlrZSAqLwotICAgICAgICAgICAgcmV0dXJuKDB4MDA3NCk7Ci0gICAgICAgICAgY2Fz ZSAweDAxQUM6IGNhc2UgMHgwMUFFOiAgICAgLyogVC1saWtlICovCi0gICAgICAgICAgICByZXR1 cm4oMHgwMDU0KTsKLSAgICAgICAgICBjYXNlIDB4MDFBRjogY2FzZSAweDAxQjE6ICAgICAvKiBV LWxpa2UgKi8KLSAgICAgICAgICAgIHJldHVybigweDAwNTUpOwotICAgICAgICAgIGNhc2UgMHgw MUIwOiAgICAgICAgICAgICAgICAgIC8qIHUtbGlrZSAqLwotICAgICAgICAgICAgcmV0dXJuKDB4 MDA3NSk7Ci0gICAgICAgICAgY2FzZSAweDAxQjI6ICAgICAgICAgICAgICAgICAgLyogVi1saWtl ICovCi0gICAgICAgICAgICByZXR1cm4oMHgwMDU2KTsKLSAgICAgICAgICBjYXNlIDB4MDFCMzog ICAgICAgICAgICAgICAgICAvKiBZLWxpa2UgKi8KLSAgICAgICAgICAgIHJldHVybigweDAwNTkp OwotICAgICAgICAgIGNhc2UgMHgwMUI0OiAgICAgICAgICAgICAgICAgIC8qIHktbGlrZSAqLwot ICAgICAgICAgICAgcmV0dXJuKDB4MDA3OSk7Ci0gICAgICAgICAgY2FzZSAweDAxQjU6ICAgICAg ICAgICAgICAgICAgLyogWi1saWtlICovCi0gICAgICAgICAgICByZXR1cm4oMHgwMDVhKTsKLSAg ICAgICAgICBjYXNlIDB4MDFCNjogICAgICAgICAgICAgICAgICAvKiB6LWxpa2UgKi8KLSAgICAg ICAgICAgIHJldHVybigweDAwN2EpOwotICAgICAgICAgIGNhc2UgMHgwMUI3OiAgICAgICAgICAg ICAgICAgIC8qIFlvZ2ggKi8KLSAgICAgICAgICAgIHJldHVybigweDAwMzMpOyAgICAgICAgICAg ICAvKiBVc2UgIjMiICovCi0gICAgICAgICAgY2FzZSAweDAxQkY6ICAgICAgICAgICAgICAgICAg LyogV3lubiAqLwotICAgICAgICAgICAgcmV0dXJuKDB4MDA3Nyk7ICAgICAgICAgICAgIC8qIFVz ZSAidyIgKi8KLSAgICAgICAgICBjYXNlIDB4MDFDRDogICAgICAgICAgICAgICAgICAvKiBBIGNh cm9uICovCi0gICAgICAgICAgICByZXR1cm4oMHgwMDQxKTsKLSAgICAgICAgICBjYXNlIDB4MDFD RTogICAgICAgICAgICAgICAgICAvKiBhIGNhcm9uICovCi0gICAgICAgICAgICByZXR1cm4oMHgw MDYxKTsKLSAgICAgICAgICBjYXNlIDB4MDFDRjogICAgICAgICAgICAgICAgICAvKiBJIGNhcm9u ICovCi0gICAgICAgICAgICByZXR1cm4oMHgwMDQ5KTsKLSAgICAgICAgICBjYXNlIDB4MDFEMDog ICAgICAgICAgICAgICAgICAvKiBpIGNhcm9uICovCi0gICAgICAgICAgICByZXR1cm4oMHgwMDY5 KTsKLSAgICAgICAgICBjYXNlIDB4MDFEMTogICAgICAgICAgICAgICAgICAvKiBPIGNhcm9uICov Ci0gICAgICAgICAgICByZXR1cm4oMHgwMDRmKTsKLSAgICAgICAgICBjYXNlIDB4MDFEMjogICAg ICAgICAgICAgICAgICAvKiBvIGNhcm9uICovCi0gICAgICAgICAgICByZXR1cm4oMHgwMDZmKTsK LSAgICAgICAgICBjYXNlIDB4MDFEMzogICAgICAgICAgICAgICAgICAvKiBVIGNhcm9uICovCi0g ICAgICAgICAgICByZXR1cm4oMHgwMDU1KTsKLSAgICAgICAgICBjYXNlIDB4MDFENDogICAgICAg ICAgICAgICAgICAvKiB1IGNhcm9uICovCi0gICAgICAgICAgICByZXR1cm4oMHgwMDc1KTsKLSAg ICAgICAgICAvKiBVIGRpYWVyZXNpcyArIG90aGVyIHRoaW5ncyAqLwotICAgICAgICBjYXNlIDB4 MDFENTogY2FzZSAweDAxRDc6IGNhc2UgMHgwMUQ5OiBjYXNlIDB4MDFEQjoKLSAgICAgICAgICAg IHJldHVybigweDAwZGMpOwotICAgICAgICAgIC8qIHUgZGlhZXJlc2lzICsgb3RoZXIgdGhpbmdz ICovCi0gICAgICAgIGNhc2UgMHgwMUQ2OiBjYXNlIDB4MDFEYTogY2FzZSAweDAxRGM6Ci0gICAg ICAgICAgICByZXR1cm4oMHgwMGZjKTsKLQotICAgICAgICAgIC8qIEZpbGwgaW4gbW9yZSBoZXJl IGlmIGFueWJvZHkgYXNrcyAqLwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1 cm4oMHhmZmZkKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoYyA+PSAweDFlMDAgJiYgYyA8 PSAweDFlZmYpIHsgICAvKiBMYXRpbiBFeHRlbmRlZCBBZGRpdGlvbmFsICovCi0gICAgICAgIGlm IChjID49IDB4MWU4MCAmJiBjIDw9IDB4MWU4NSkKLSAgICAgICAgICByZXR1cm4oYyk7Ci0gICAg ICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4oMHhmZmZkKTsKLSAgICB9Ci0gICAgaWYgKGMgPj0g MHgwNDAwICYmIGMgPD0gMHgwNGZmKSB7ICAgLyogQ3lyaWxsaWMgKi8KLSAgICAgICAgaWYgKGMg Pj0gMHgwNDAwICYmIGMgPD0gMHgwNDVmIHx8IGMgPT0gMHgwNDkwICB8fCBjID09IDB4MDQ5MSkK LSAgICAgICAgICByZXR1cm4oYyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4oMHhm ZmZkKTsKLSAgICB9Ci0gICAgaWYgKGMgPj0gMHgwMzcwICYmIGMgPD0gMHgwM2ZmKSB7ICAgLyog R3JlZWsgKi8KLSAgICAgICAgaWYgKGMgPT0gMHgwMzdlIHx8IGMgPj0gMHgwMzg0ICYmIGMgPD0g MHgwM2NlKQotICAgICAgICAgIHJldHVybihjKTsKLSAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAg ICAgIGNhc2UgMHgwMzc0OiBjYXNlIDB4MDM3NToKLSAgICAgICAgICAgIHJldHVybigweDAwMjcp OwotICAgICAgICBjYXNlIDB4MDM3YToKLSAgICAgICAgICAgIHJldHVybigweDAwMmMpOwotICAg ICAgICAgIC8qIEZpbGwgaW4gbW9yZSBoZXJlIGlmIG5lZWRlZCAqLwotICAgICAgICBkZWZhdWx0 OgotICAgICAgICAgICAgcmV0dXJuKDB4ZmZmZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYg KGMgPj0gMHgxZjAwICYmIGMgPD0gMHgxZmZmKSB7ICAgLyogR3JlZWsgRXh0ZW5kZWQgKi8KLSAg ICAgICAgLyogRmlsbCBpbiBpZiBhc2tlZCAqLwotICAgICAgICByZXR1cm4oMHhmZmZkKTsKLSAg ICB9Ci0gICAgaWYgKGMgPj0gMHgyMGEwICYmIGMgPD0gMHgyMGNmKSB7ICAgLyogQ3VycmVuY3kg c3ltYm9scyAqLwotICAgICAgICBpZiAoYyA9PSAweDIwYTMgfHwgYyA9PSAweDIwYTQgfHwgYyA9 PSAweDIwYTcgfHwgYyA9PSAweDIwYWMpCi0gICAgICAgICAgcmV0dXJuKGMpOwotICAgICAgICBl bHNlCi0gICAgICAgICAgcmV0dXJuKDB4ZmZmZCk7Ci0gICAgfQotICAgIGlmIChjID49IDB4MjEw MCAmJiBjIDw9IDB4MjE0ZikgeyAgIC8qIExldHRlcmxpa2Ugc3ltYm9scyAqLwotICAgICAgICBp ZiAoYyA9PSAweDIxMTYgfHwgYyA9PSAweDIxMjIgfHwgYyA9PSAweDIxMjYpCi0gICAgICAgICAg cmV0dXJuKGMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuKDB4ZmZmZCk7Ci0gICAg fQotICAgIGlmIChjID49IDB4MjE1MCAmJiBjIDw9IDB4MjE4ZikgeyAgIC8qIE51bWJlciBmb3Jt cyAqLwotICAgICAgICBpZiAoYyA+PSAweDIxNWIgJiYgYyA8PSAweDIxNWUpIC8qIFJvbWFuIG51 bWVyYWxzIGV0YyAqLwotICAgICAgICAgIHJldHVybihjKTsKLSAgICAgICAgZWxzZQotICAgICAg ICAgIHJldHVybigweGZmZmQpOwotICAgIH0KLSAgICBpZiAoYyA+PSAweDAyYjAgJiYgYyA8PSAw eDAyZmYpIHsgICAvKiBTcGFjaW5nIG1vZGlmaWVyIGxldHRlcnMgKi8KLSAgICAgICAgaWYgKGMg PT0gMHgwMmM2IHx8IGMgPT0gMHgwMmM3IHx8IGMgPT0gMHgwMmM5IHx8Ci0gICAgICAgICAgICBj ID49IDB4MDJkOCAmJiBjIDw9IDB4MDJkZCkKLSAgICAgICAgICByZXR1cm4oYyk7Ci0gICAgICAg IHN3aXRjaCAoYykgewotICAgICAgICBjYXNlIDB4MDJiMDogY2FzZSAweDAyYjE6Ci0gICAgICAg ICAgICByZXR1cm4oMHgwMDY4KTsKLSAgICAgICAgY2FzZSAweDAyYjI6Ci0gICAgICAgICAgICAg IHJldHVybigweDAwNmEpOwotICAgICAgICBjYXNlIDB4MDJiMzogY2FzZSAweDAyYjQ6IGNhc2Ug MHgwMmI1OgotICAgICAgICAgICAgcmV0dXJuKDB4MDA3Mik7Ci0gICAgICAgIGNhc2UgMHgwMmI3 OgotICAgICAgICAgICAgcmV0dXJuKDB4MDA3Nyk7Ci0gICAgICAgIGNhc2UgMHgwMmI4OgotICAg ICAgICAgICAgcmV0dXJuKDB4MDA3OSk7Ci0gICAgICAgIGNhc2UgMHgwMmI5OgotICAgICAgICAg ICAgcmV0dXJuKDB4MDBiNCk7Ci0gICAgICAgIGNhc2UgMHgwMmJhOgotICAgICAgICAgICAgcmV0 dXJuKDB4MDAyMik7Ci0gICAgICAgIGNhc2UgMHgwMmJiOiBjYXNlIDB4MDJiYzogY2FzZSAweDAy YmQ6IGNhc2UgMHgwMmJlOiBjYXNlIDB4MDJiZjoKLSAgICAgICAgICAgIHJldHVybigweDAwMjcp OwotICAgICAgICAgIGNhc2UgMHgwMmMyOiAgICAgIHJldHVybigweDAwM2MpOwotICAgICAgICAg IGNhc2UgMHgwMmMzOiAgICAgIHJldHVybigweDAwM2UpOwotICAgICAgICAgIGNhc2UgMHgwMmRh OiAgICAgIHJldHVybigweDAwYjApOwotICAgICAgICAgIGNhc2UgMHgwMmRjOiAgICAgIHJldHVy bigweDAwN2UpOwotICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgIHJldHVybigweGZmZmQpOwot ICAgICAgICB9Ci0gICAgfQotICAgIGlmIChjID49IDB4MjAwMCAmJiBjIDw9IDB4MjA2ZikgeyAg IC8qIEdlbmVyYWwgUHVuY3R1YXRpb24gKi8KLSAgICAgICAgaWYgKGMgPj0gMHgyMDEzICYmIGMg PD0gMHgyMDE1IHx8Ci0gICAgICAgICAgICBjID49IDB4MjAxNyAmJiBjIDw9IDB4MjAxYSB8fAot ICAgICAgICAgICAgYyA+PSAweDIwMWMgJiYgYyA8PSAweDIwMWUgfHwKLSAgICAgICAgICAgIGMg Pj0gMHgyMDIwICYmIGMgPD0gMHgyMDIyIHx8IGMgPT0gMHgyMDI2IHx8IGMgPT0gMHgyMDMwIHx8 Ci0gICAgICAgICAgICBjID49IDB4MjAzOSAmJiBjIDw9IDB4MjAzYSB8fCBjID09IDB4MjAzYyB8 fCBjID09IDB4MjAzZSB8fAotICAgICAgICAgICAgYyA9PSAweDIwNDQpCi0gICAgICAgICAgcmV0 dXJuKGMpOwotICAgICAgICBlbHNlIGlmIChjID09IDB4MjAxNikKLSAgICAgICAgICByZXR1cm4o MHgyNTUxKTsKLSAgICAgICAgZWxzZSBpZiAoYyA9PSAweDIwMTcpCi0gICAgICAgICAgcmV0dXJu KDB4MjU1MCk7Ci0gICAgICAgIGVsc2UgaWYgKGMgPT0gMHgyMDQ0KQotICAgICAgICAgIHJldHVy bigweDAwMmYpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuKDB4ZmZmZCk7Ci0gICAg fQotICAgIGlmIChjID09IDB4ZmIwMSB8fCBjID09IDB4ZmIwMikgICAgIC8qIEFscGhhYmV0aWMg UHJlc2VudGF0aW9uIEZvcm1zICovCi0gICAgICByZXR1cm4oYyk7Ci0gICAgcmV0dXJuKDB4ZmZm ZCk7ICAgICAgICAgICAgICAgICAgICAgLyogQ2F0Y2gtYWxsICovCi19Ci0jZW5kaWYgLyogT1My ICovCi0KLQotLyoKLSAgVGFibGUgb2YgQmxhaC10by1Vbmljb2RlIGluZm9ybWF0aW9uIHN0cnVj dHVyZXMuCi0gIEtFRVAgVEhJUyBJTiBTWU5DIFdJVEggVEhFIFRYX2JsYWggREVGSU5JVElPTlMg aW4gY2tjdW5pLmguCi0qLwotc3RydWN0IHhfdG9fdW5pY29kZSAqCi10eHJpbmZvW01BWFRYU0VU UysxXSA9IHsKLSAgICAmdV9hc2NpaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMCBV UyBJU08gNjQ2IChBU0NJSSkgKi8KLSAgICAmdV9icml0aXNoLCAgICAgICAgICAgICAgICAgICAg ICAgICAvKiAgMSBVSyBJU08gNjQ2ICovCi0gICAgJnVfZnJfY2FuYWRpYW4sICAgICAgICAgICAg ICAgICAgICAgLyogIDIgQ2FuYWRpYW4gRnJlbmNoIE5SQyAqLwotICAgIE5VTEwsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qICAzIEN1YmEgKi8KLSAgICBOVUxMLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiAgNCBDemVjaG8gKi8KLSAgICAmdV9kYW5pc2gsICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiAgNSBEYW5pc2gvTm9yd2VnaWFuIElTTyA2NDYgKi8KLSAg ICAmdV9kdXRjaCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgNiBEdXRjaCBOUkMgKi8K LSAgICAmdV9maW5uaXNoLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgNyBGaW5uaXNoIE5S QyAgKi8KLSAgICAmdV9mcmVuY2gsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgOCBGcmVu Y2ggSVNPIDY0NiAqLwotICAgICZ1X2dlcm1hbiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q ICA5IEdlcm1hbiBJU08gNjQ2ICovCi0gICAgJnVfaGVicmV3NywgICAgICAgICAgICAgICAgICAg ICAgICAgLyogMTAgSGVicmV3LTcgKERFQykgKi8KLSAgICAmdV9odW5nYXJpYW4sICAgICAgICAg ICAgICAgICAgICAgICAvKiAxMSBIdW5nYXJpYW4gSVNPIDY0NiAqLwotICAgICZ1X2ljZWxhbmRp YywgICAgICAgICAgICAgICAgICAgICAgIC8qIDEyIEljZWxhbmRpYyBOUkMgKi8KLSAgICAmdV9p dGFsaWFuLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMyBJdGFsaWFuIElTTyA2NDYgKi8K LSAgICAmdV9qaXMwMjAxciwgICAgICAgICAgICAgICAgICAgICAgICAvKiAxNCBKYXBhbmVzZSBS b21hbiBJU08gNjQ2ICovCi0gICAgJnVfamlzMDIwMWssICAgICAgICAgICAgICAgICAgICAgICAg LyogMTUgSmFwYW5lc2UgS2F0YWthbmEgKi8KLSAgICAmdV9rb2k3LCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiAxNiBTaG9ydCBLT0kgKi8KLSAgICAmdV9kYW5pc2gsICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiAxNyBOb3J3ZWdpYW4vRGFuaXNoIElTTyA2NDYgKi8KLSAgICAmdV9w b3J0dWd1ZXNlLCAgICAgICAgICAgICAgICAgICAgICAvKiAxOCBQb3J0dWd1ZXNlIElTTyA2NDYg Ki8KLSAgICAmdV9zcGFuaXNoLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxOSBzcGFuaXNo IElTTyA2NDYgKi8KLSAgICAmdV9zd2VkaXNoLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAy MCBTd2VkaXNoIElTTyA2NDYgKi8KLSAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiAyMSBTd2VkaXNoIElTTyA2NDYgZm9yIG5hbWVzICovCi0gICAgJnVfc3dpc3MsICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogMjIgU3dpc3MgTlJDICAgKi8KLSAgICAmdV84ODU5 XzEsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyMyBJU08gODg1OS0xICAqLwotICAgICZ1 Xzg4NTlfMiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDI0IElTTyA4ODU5LTIgICovCi0g ICAgJnVfODg1OV8zLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMjUgSVNPIDg4NTktMyAg Ki8KLSAgICAmdV84ODU5XzQsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyNiBJU08gODg1 OS00ICAqLwotICAgICZ1Xzg4NTlfNSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDI3IElT TyA4ODU5LTUgICovIC8qIEN5cmlsbGljICovCi0gICAgJnVfODg1OV82LCAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogMjggSVNPIDg4NTktNiAgKi8gLyogQXJhYmljICovCi0gICAgJnVfODg1 OV83LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMjkgSVNPIDg4NTktNyAgKi8gLyogR3Jl ZWsgKi8KLSAgICAmdV84ODU5XzgsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzMCBJU08g ODg1OS04ICAqLyAvKiBIZWJyZXcgKi8KLSAgICAmdV84ODU5XzksICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiAzMSBJU08gODg1OS05ICAqLwotICAgICZ1Xzg4NTlfMTAsICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDMyIElTTyA4ODU5LTEwICovCi0gICAgJnVfa29pOCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogMzMgS09JLTggICAgICAgKi8KLSAgICBOVUxMLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiAzNCBKSVMtNyAgICAgICAqLwotICAgIE5VTEwsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDM1IFNoaWZ0IEpJUyAgICovCi0gICAgTlVM TCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzYgSmFwYW5lc2UgRVVDIChKQUUp ICovCi0gICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzcgSmFwYW5l c2UgREVDIEthbmppICovCi0gICAgJnVfZGVjbWNzLCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogMzggREVDIE1DUyAqLwotICAgICZ1X25leHRzdGVwLCAgICAgICAgICAgICAgICAgICAgICAg IC8qIDM5IE5lWFQgICAgKi8KLSAgICAmdV9kZ2ksICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiA0MCBER0kgICAgICovCi0gICAgJnVfbWFjbGF0aW4sICAgICAgICAgICAgICAgICAgICAg ICAgLyogNDEgTWFjaW50b3NoIExhdGluICAqLwotICAgICZ1X2hwcm9tYW44LCAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDQyIEhQIFJvbWFuIDggICAgICAgKi8KLSAgICAmdV9jcDQzNywgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiA0MyBDUDQzNyAtIE9yaWdpbmFsICovCi0gICAgJnVf Y3A4NTAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNDQgQ1A4NTAgLSBXIEV1cm9wZSAq LwotICAgICZ1X2NwODUyLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQ1IENQODUyIC0g RSBFdXJvcGUgKi8KLSAgICAmdV9jcDg1NywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA0 NiBDUDg1NyAtIFR1cmtpc2ggICovCi0gICAgJnVfY3A4NjIsICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogNDcgQ1A4NjIgLSBIZWJyZXcgICAqLwotICAgICZ1X2NwODY0LCAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDQ4IENQODY0IC0gQXJhYmljICAgKi8KLSAgICAmdV9jcDg2Niwg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA0OSBDUDg2NiAtIEN5cmlsbGljICovCi0gICAg JnVfY3A4NjksICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNTAgQ1A4NjkgLSBHcmVlayAg ICAqLwotICAgICZ1X2RlY3NwZWMsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDUxIERFQyBT cGVjaWFsIEdyYXBoaWNzICovCi0gICAgJnVfZGVjdGVjaCwgICAgICAgICAgICAgICAgICAgICAg ICAgLyogNTIgREVDIFRlY2huaWNhbCAqLwotICAgICZ1X2MwcGljcywgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDUzIEMwIFBpY3R1cmVzICovCi0gICAgJnVfYzFwaWNzLCAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogNTQgQzEgUGljdHVyZXMgKi8KLSAgICAmdV9zbWlsZXksICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiA1NSBJQk0gQzAgR3JhcGhpY3MgKi8KLSAgICAmdV9oZWF0 aDE5ZywgICAgICAgICAgICAgICAgICAgICAgICAvKiA1NiBIZWF0aCAxOSBHcmFwaGljcyAqLwot ICAgICZ1X3R2aWcsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDU3IFRWSSBHcmFwaGlj cyAqLwotICAgICZ1X3d5c2VfZ24sICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDU4IFd5c2Ug NjAgR3JhcGhpY3MgTm9ybWFsICovCi0gICAgJnVfd3lzZV9nMSwgICAgICAgICAgICAgICAgICAg ICAgICAgLyogNTkgV3lzZSA2MCBHcmFwaGljcyAxICovCi0gICAgJnVfd3lzZV9nMiwgICAgICAg ICAgICAgICAgICAgICAgICAgLyogNjAgV3lzZSA2MCBHcmFwaGljcyAyICovCi0gICAgJnVfd3lz ZV9nMywgICAgICAgICAgICAgICAgICAgICAgICAgLyogNjEgV3lzZSA2MCBHcmFwaGljcyAzICov Ci0gICAgJnVfZWxvdDkyNywgICAgICAgICAgICAgICAgICAgICAgICAgLyogNjIgR3JlZWsgRUxP VCA5MjcgKi8KLSAgICAmdV9kZ3NwZWMsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA2MyBE RyBTcGVjaWFsIGdyYXBoaWNzICovCi0gICAgJnVfZGdsaW5lLCAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogNjQgREcgTGluZSBkcmF3aW5nICovCi0gICAgJnVfZGd3b3JkLCAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogNjUgREcgV29yZCBwcm9jZXNzaW5nICovCi0gICAgJnVfaHBsaW5l LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNjYgSFAgTGluZSBkcmF3aW5nICovCi0gICAg JnVfaHBtYXRoLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNjcgSFAgTWF0aC9UZWNobmlj YWwgKi8KLSAgICAmdV9xbnhncnBoLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiA2OCBRTlgg R3JhcGhpY3MgKi8KLSAgICAmdV9zbmlicmFjaywgICAgICAgICAgICAgICAgICAgICAgICAvKiA2 OSBTTkkgQnJhY2tldHMgKi8KLSAgICAmdV9zbmlldXJvLCAgICAgICAgICAgICAgICAgICAgICAg ICAvKiA3MCBTTkkgRXVybyAqLwotICAgICZ1X3NuaWZhY2V0LCAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDcxIFNOSSBGYWNldCAqLwotICAgICZ1X3NuaWlibSwgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIDcyIFNOSSBJQk0gKi8KLSAgICAmdV9zbmlibGFua3MsICAgICAgICAgICAgICAg ICAgICAgICAvKiA3MyBTTkkgQmxhbmtzICovCi0gICAgJnVfY3AxMjUyLCAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogNzQgV2luZG93cyBMYXRpbi0xICovCi0gICAgJnVfY3AxMjUwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogNzUgV2luZG93cyBMYXRpbi0yICovCi0gICAgJnVfY3Ax MjUxLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNzYgV2luZG93cyBDeXJpbGxpYyAqLwot ICAgICZ1X2NwMTI1MywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDc3IFdpbmRvd3MgR3Jl ZWsgKi8KLSAgICAmdV9jcDEyNTQsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA3OCBXaW5k b3dzIFR1cmtpc2ggKi8KLSAgICAmdV9jcDEyNTcsICAgICAgICAgICAgICAgICAgICAgICAgICAv KiA3OSBXaW5kb3dzIExhdGluLTQgKi8KLSAgICAmdV9jcDg1NiwgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiA4MCBDeXJpbGxpYyBQQyBDb2RlIFBhZ2UgODU2ICovCi0gICAgJnVfY3A4NTUs ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogODEgQ3lyaWxsaWMgUEMgQ29kZSBQYWdlIDg1 NSAqLwotICAgICZ1Xzg4NTlfMSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDgyIENQODE5 IC0gU2FtZSBhcyA4ODU5LTEgKi8KLSAgICAmdV84ODU5XzIsICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiA4MyBDUDkxMiAtIFNhbWUgYXMgODg1OS0yICovCi0gICAgJnVfODg1OV8zLCAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogODQgQ1A5MTMgLSBTYW1lIGFzIDg4NTktMyAqLwotICAg ICZ1Xzg4NTlfNCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDg1IENQOTE0IC0gU2FtZSBh cyA4ODU5LTQgKi8KLSAgICAmdV84ODU5XzUsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA4 NiBDUDkxNSAtIFNhbWUgYXMgODg1OS01ICovCi0gICAgJnVfODg1OV82LCAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogODcgQ1AxMDg5IC0gU2FtZSBhcyA4ODU5LTYgKi8KLSAgICAmdV84ODU5 XzcsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA4OCBDUDgxMyAtIFNhbWUgYXMgODg1OS03 ICovCi0gICAgJnVfODg1OV84LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogODkgQ1A5MTYg LSBTYW1lIGFzIDg4NTktOCAqLwotICAgICZ1Xzg4NTlfOSwgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDkwIENQOTIwIC0gU2FtZSBhcyA4ODU5LTkgKi8KLSAgICAmdV9ocHJvbWFuOCwgICAg ICAgICAgICAgICAgICAgICAgICAvKiA5MSBDUDEwNTEgLSBTYW1lIGFzIEhQIFJvbWFuIDggKi8K LSAgICAmdV9jcDg1OCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA5MiBDUDg1OCAtIFcg RXVyb3BlIHcvRXVybyAqLwotICAgICZ1Xzg4NTlfMTUsICAgICAgICAgICAgICAgICAgICAgICAg IC8qIDkzIElTTyA4ODU5LTE1IExhdGluLTE1ICovCi0gICAgJnVfODg1OV8xNSwgICAgICAgICAg ICAgICAgICAgICAgICAgLyogOTQgQ1A5MjMgLSBTYW1lIGFzIDg4NTktMTUgICovCi0gICAgJnVf ODg1OV83LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogOTUgRUxPVDkyOCAtIFNhbWUgYXMg ODg1OS03ICovCi0gICAgJnVfcXVpY2tkcmF3LCAgICAgICAgICAgICAgICAgICAgICAgLyogOTYg Q1AxMDAwMCAtIEFwcGxlIFF1aWNrZHJhdyAqLwotICAgICZ1X2NwMzcsICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDk3IENQMzcgLSBVLlMuIEVCQ0RJQyAqLwotICAgICZ1X2NwMTI1NSwg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDk4IENQMTI1NSAtIFdpbmRvd3MgSGVicmV3ICov Ci0gICAgJnVfY3AxMjU2LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogOTkgQ1AxMjU2IC0g V2luZG93cyBBcmFiaWMgKi8KLSAgICAmdV9jcDEyNTgsICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiAxMDAgQ1AxMjU4IC0gV2luZG93cyBWaWV0IE5hbSAqLwotICAgICZ1X21hem92aWEsICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMSBNYXpvdmlhIFBvbGlzaCBjb2RlIHBhZ2UgKi8K LSAgICAmdV90cmFuc3BhcmVudCwgICAgICAgICAgICAgICAgICAgICAvKiAxMDIgVHJhbnNwYXJl bnQgKi8KLSAgICAmdV9oejE1MDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDMgSGF6 ZWx0aW5lIDE1MDAvMTUyMCBncmFwaGljcyAqLwotICAgICZ1X2tvaThyLCAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDEwNCBLT0k4LVIgKi8KLSAgICAmdV9rb2k4dSwgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiAxMDUgS09JOC1VICovCi0gICAgJnVfYXBsMSwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogMTA2IEFQTCAxIChJU08pICovCi0gICAgJnVfYXBsMiwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogMTA3IEFQTCAyIChEeWFkaWMpICovCi0gICAgJnVfYXBs MywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTA4IEFQTCAzIChQbHVzKSAqLwotICAg ICZ1X2FwbDQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwOCBBUEwgNCAoSUJNKSAq LwotICAgICZ1X2FwbDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDExMCBBUEwgNSAo Mjc0MSkgKi8KLX07Ci0KLS8qCi0gIFRhYmxlIG9mIEJsYWgtdG8tVW5pY29kZSB0cmFuc2xhdGlv biBmdW5jdGlvbnMuCi0gIEtFRVAgVEhJUyBJTiBTWU5DIFdJVEggVEhFIFRYX2JsYWggREVGSU5J VElUSU9OUyBpbiBja2N1bmkuaC4KLSovCi1VU0hPUlQKLSNpZmRlZiBDS19BTlNJQwotKCp4bF91 W01BWFRYU0VUUysxXSkoQ0hBUikKLSNlbHNlCi0oKnhsX3VbTUFYVFhTRVRTKzFdKSgpCi0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLT0gewotICAgIGFzY2lpX3UsICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qICAwIFVTIElTTyA2NDYgKEFTQ0lJKSAqLwotICAgIGJyaXRpc2hfdSwgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qICAxIFVLIElTTyA2NDYgKi8KLSAgICBmcl9jYW5hZGlhbl91 LCAgICAgICAgICAgICAgICAgICAgICAvKiAgMiBDYW5hZGlhbiBGcmVuY2ggTlJDICovCi0gICAg TlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDMgQ3ViYSAqLwotICAgIE5V TEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICA0IEN6ZWNobyAqLwotICAgIGRh bmlzaF91LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICA1IERhbmlzaC9Ob3J3ZWdpYW4g SVNPIDY0NiAqLwotICAgIGR1dGNoX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICA2 IER1dGNoIE5SQyAqLwotICAgIGZpbm5pc2hfdSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q ICA3IEZpbm5pc2ggTlJDICAqLwotICAgIGZyZW5jaF91LCAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qICA4IEZyZW5jaCBJU08gNjQ2ICovCi0gICAgZ2VybWFuX3UsICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogIDkgR2VybWFuIElTTyA2NDYgKi8KLSAgICBoZWJyZXc3X3UsICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiAxMCBIZWJyZXctNyAoREVDKSAqLwotICAgIGh1bmdhcmlh bl91LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDExIEh1bmdhcmlhbiBJU08gNjQ2ICovCi0g ICAgaWNlbGFuZGljX3UsICAgICAgICAgICAgICAgICAgICAgICAgLyogMTIgSWNlbGFuZGljICov Ci0gICAgaXRhbGlhbl91LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTMgSXRhbGlhbiBJ U08gNjQ2ICovCi0gICAgamlzMDIwMXJfdSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTQg SmFwYW5lc2UgUm9tYW4gSVNPIDY0NiAqLwotICAgIGppczAyMDFrX3UsICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDE1IEphcGFuZXNlIEthdGFrYW5hICovCi0gICAga29pN191LCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogMTYgU2hvcnQgS09JICovCi0gICAgZGFuaXNoX3UsICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogMTcgTm9yd2VnaWFuL0RhbmlzaCBJU08gNjQ2ICov Ci0gICAgcG9ydHVndWVzZV91LCAgICAgICAgICAgICAgICAgICAgICAgLyogMTggUG9ydHVndWVz ZSBJU08gNjQ2ICovCi0gICAgc3BhbmlzaF91LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyog MTkgc3BhbmlzaCBJU08gNjQ2ICovCi0gICAgc3dlZGlzaF91LCAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogMjAgU3dlZGlzaCBJU08gNjQ2ICovCi0gICAgTlVMTCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogMjEgU3dlZGlzaCBJU08gNjQ2IGZvciBuYW1lcyAqLwotICAgIHN3 aXNzX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDIyIFN3aXNzIE5SQyAgICovCi0g ICAgaXNvXzg4NTlfMV91LCAgICAgICAgICAgICAgICAgICAgICAgLyogMjMgSVNPIDg4NTktMSAg Ki8KLSAgICBpc29fODg1OV8yX3UsICAgICAgICAgICAgICAgICAgICAgICAvKiAyNCBJU08gODg1 OS0yICAqLwotICAgIGlzb184ODU5XzNfdSwgICAgICAgICAgICAgICAgICAgICAgIC8qIDI1IElT TyA4ODU5LTMgICovCi0gICAgaXNvXzg4NTlfNF91LCAgICAgICAgICAgICAgICAgICAgICAgLyog MjYgSVNPIDg4NTktNCAgKi8KLSAgICBpc29fODg1OV81X3UsICAgICAgICAgICAgICAgICAgICAg ICAvKiAyNyBJU08gODg1OS01ICAqLyAvKiBDeXJpbGxpYyAqLwotICAgIGlzb184ODU5XzZfdSwg ICAgICAgICAgICAgICAgICAgICAgIC8qIDI4IElTTyA4ODU5LTYgICovIC8qIEFyYWJpYyAqLwot ICAgIGlzb184ODU5XzdfdSwgICAgICAgICAgICAgICAgICAgICAgIC8qIDI5IElTTyA4ODU5LTcg ICovIC8qIEdyZWVrICovCi0gICAgaXNvXzg4NTlfOF91LCAgICAgICAgICAgICAgICAgICAgICAg LyogMzAgSVNPIDg4NTktOCAgKi8gLyogSGVicmV3ICovCi0gICAgaXNvXzg4NTlfOV91LCAgICAg ICAgICAgICAgICAgICAgICAgLyogMzEgSVNPIDg4NTktOSAgKi8gLyogTGF0aW4tNSAqLwotICAg IGlzb184ODU5XzEwX3UsICAgICAgICAgICAgICAgICAgICAgIC8qIDMyIElTTyA4ODU5LTEwICov Ci0gICAga29pOF91LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzMgS09JLTggICAg ICAgKi8KLSAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzNCBKSVMt NyAgICAgICAqLwotICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDM1 IFNoaWZ0IEpJUyAgICovCi0gICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogMzYgSmFwYW5lc2UgRVVDIChKQUUpICovCi0gICAgTlVMTCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogMzcgSmFwYW5lc2UgREVDIEthbmppICovCi0gICAgZGVjbWNzX3UsICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogMzggREVDIE1DUyAqLwotICAgIG5leHRzdGVwX3Us ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDM5IE5lWFQgICAgKi8KLSAgICBkZ2lfdSwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA0MCBER0kgICAgICovCi0gICAgbWFjbGF0aW5f dSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogNDEgTWFjaW50b3NoIExhdGluICAqLwotICAg IGhwcm9tYW44X3UsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQyIEhQIFJvbWFuIDggICAg ICAgKi8KLSAgICBjcDQzN191LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA0MyBDUDQz NyAtIE9yaWdpbmFsICovCi0gICAgY3A4NTBfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogNDQgQ1A4NTAgLSBXIEV1cm9wZSAqLwotICAgIGNwODUyX3UsICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDQ1IENQODUyIC0gRSBFdXJvcGUgKi8KLSAgICBjcDg1N191LCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiA0NiBDUDg1NyAtIFR1cmtpc2ggICovCi0gICAgY3A4NjJf dSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNDcgQ1A4NjIgLSBIZWJyZXcgICAqLwot ICAgIGNwODY0X3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQ4IENQODY0IC0gQXJh YmljICAgKi8KLSAgICBjcDg2Nl91LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA0OSBD UDg2NiAtIEN5cmlsbGljICovCi0gICAgY3A4NjlfdSwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogNTAgQ1A4NjkgLSBHcmVlayAgICAqLwotICAgIGRlY3NwZWNfdSwgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDUxIERFQyBTcGVjaWFsIEdyYXBoaWNzICovCi0gICAgZGVjdGVjaF91 LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNTIgREVDIFRlY2huaWNhbCAqLwotICAgIGMw cGljc191LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDUzIEMwIFBpY3R1cmVzICovCi0g ICAgYzFwaWNzX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNTQgQzEgUGljdHVyZXMg Ki8KLSAgICBzbWlsZXlfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA1NSBJQk0gQzAg R3JhcGhpY3MgKi8KLSAgICBoZWF0aDE5Z191LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiA1 NiBIZWF0aCAxOSBncmFwaGljcyAqLwotICAgIHR2aWdfdSwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIDU3IFRWSSBncmFwaGljcyAqLwotICAgIHd5c2VfZ25fdSwgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDU4IFd5c2UgNjAgbm9ybWFsLW1vZGUgZ3JhcGhpY3MgKi8KLSAgICB3 eXNlX2cxX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA1OSBXeXNlIDYwIGdyYXBoaWNz IDEgKi8KLSAgICB3eXNlX2cyX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA2MCBXeXNl IDYwIGdyYXBoaWNzIDIgKi8KLSAgICB3eXNlX2czX3UsICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiA2MSBXeXNlIDYwIGdyYXBoaWNzIDMgKi8KLSAgICBlbG90OTI3X3UsICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiA2MiBHcmVlayBFTE9UIDkyNyAqLwotICAgIGRnc3BlY191LCAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDYzIERHIFNwZWNpYWwgZ3JhcGhpY3MgKi8KLSAgICBk Z2xpbmVfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA2NCBERyBMaW5lIGRyYXdpbmcg Ki8KLSAgICBkZ3dvcmRfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA2NSBERyBXb3Jk IHByb2Nlc3NpbmcgKi8KLSAgICBocGxpbmVfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiA2NiBIUCBMaW5lIGRyYXdpbmcgKi8KLSAgICBocG1hdGhfdSwgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiA2NyBIUCBNYXRoL1RlY2huaWNhbCAqLwotICAgIHFueGdycGhfdSwgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIDY4IFFOWCBHcmFwaGljcyAqLwotICAgIHNuaWJyYWNrX3Us ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDY5IFNOSSBCcmFja2V0cyAqLwotICAgIHNuaWV1 cm9fdSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDcwIFNOSSBFdXJvICovCi0gICAgc25p ZmFjZXRfdSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogNzEgU05JIEZhY2V0ICovCi0gICAg c25paWJtX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNzIgU05JIElCTSAqLwotICAg IHNuaWJsYW5rc191LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDczIFNOSSBCbGFua3MgKi8K LSAgICBjcDEyNTJfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA3NCBXaW5kb3dzIExh dGluLTEgKi8KLSAgICBjcDEyNTBfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA3NSBX aW5kb3dzIExhdGluLTIgKi8KLSAgICBjcDEyNTFfdSwgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiA3NiBXaW5kb3dzIEN5cmlsbGljICovCi0gICAgY3AxMjUzX3UsICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogNzcgV2luZG93cyBHcmVlayAqLwotICAgIGNwMTI1NF91LCAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIDc4IFdpbmRvd3MgVHVya2lzaCAqLwotICAgIGNwMTI1N191 LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDc5IFdpbmRvd3MgTGF0aW4tNCAqLwotICAg IGNwODU2X3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDgwIEN5cmlsbGljIFBDIENv ZGUgUGFnZSA4NTYgKi8KLSAgICBjcDg1NV91LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiA4MSBDeXJpbGxpYyBQQyBDb2RlIFBhZ2UgODU2ICovCi0gICAgaXNvXzg4NTlfMV91LCAgICAg ICAgICAgICAgICAgICAgICAgLyogODIgQ1A4MTkgLSBTYW1lIGFzIDg4NTktMSAqLwotICAgIGlz b184ODU5XzJfdSwgICAgICAgICAgICAgICAgICAgICAgIC8qIDgzIENQOTEyIC0gU2FtZSBhcyA4 ODU5LTIgKi8KLSAgICBpc29fODg1OV8zX3UsICAgICAgICAgICAgICAgICAgICAgICAvKiA4NCBD UDkxMyAtIFNhbWUgYXMgODg1OS0zICovCi0gICAgaXNvXzg4NTlfNF91LCAgICAgICAgICAgICAg ICAgICAgICAgLyogODUgQ1A5MTQgLSBTYW1lIGFzIDg4NTktNCAqLwotICAgIGlzb184ODU5XzVf dSwgICAgICAgICAgICAgICAgICAgICAgIC8qIDg2IENQOTE1IC0gU2FtZSBhcyA4ODU5LTUgKi8K LSAgICBpc29fODg1OV82X3UsICAgICAgICAgICAgICAgICAgICAgICAvKiA4NyBDUDEwODkgLSBT YW1lIGFzIDg4NTktNiAqLwotICAgIGlzb184ODU5XzdfdSwgICAgICAgICAgICAgICAgICAgICAg IC8qIDg4IENQODEzIC0gU2FtZSBhcyA4ODU5LTcgKi8KLSAgICBpc29fODg1OV84X3UsICAgICAg ICAgICAgICAgICAgICAgICAvKiA4OSBDUDkxNiAtIFNhbWUgYXMgODg1OS04ICovCi0gICAgaXNv Xzg4NTlfOV91LCAgICAgICAgICAgICAgICAgICAgICAgLyogOTAgQ1A5MjAgLSBTYW1lIGFzIDg4 NTktOSAqLwotICAgIGhwcm9tYW44X3UsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDkxIENQ MTA1MSAtU2FtZSBhcyBIUCBSb21hbiA4ICovCi0gICAgY3A4NThfdSwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogOTIgQ1A4NTggLSBXIEV1cm9wZSB3L0V1cm8gKi8KLSAgICBpc29fODg1 OV8xNV91LCAgICAgICAgICAgICAgICAgICAgICAvKiA5MyBJU08gODg1OS0xNSBMYXRpbiAxNSAq LwotICAgIGlzb184ODU5XzE1X3UsICAgICAgICAgICAgICAgICAgICAgIC8qIDk0IENQOTIzIC0g U2FtZSBhcyA4ODU5LTE1ICovCi0gICAgaXNvXzg4NTlfN191LCAgICAgICAgICAgICAgICAgICAg ICAgLyogOTUgRUxPVDkyOCAtIFNhbWUgYXMgODg1OS03ICovCi0gICAgcXVpY2tkcmF3X3UsICAg ICAgICAgICAgICAgICAgICAgICAgLyogOTYgQ1AxMDAwMCAtIEFwcGxlIFF1aWNrZHJhdyAqLwot ICAgIGNwMzdfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDk3IENQMzcgLSBVLlMu IEVCQ0RJQyAqLwotICAgIGNwMTI1NV91LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDk4 IENQMTI1NSAtIFdpbmRvd3MgSGVicmV3ICovCi0gICAgY3AxMjU2X3UsICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogOTkgQ1AxMjU2IC0gV2luZG93cyBBcmFiaWMgKi8KLSAgICBjcDEyNThf dSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDAgQ1AxMjU4IC0gV2luZG93cyBWaWV0 IE5hbSAqLwotICAgIG1hem92aWFfdSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMSBN YXpvdmlhIFBDIGNvZGUgcGFnZSAqLwotICAgIGlkZW50X3UsICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIDEwMiBUcmFuc3BhcmVudCAtIG5vIHRyYW5zbGF0aW9uICAqLwotICAgIGh6MTUw MF91LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMyBIYXplbHRpbmUgMTUwMC8xNTIw IGdyYXBoaWNzICovCi0gICAga29pOHJfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog MTA0IEtPSTgtUiAqLwotICAgIGtvaTh1X3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IDEwNSBLT0k4LVUgKi8KLSAgICBhcGwxX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiAxMDYgQVBMIDEgKElTTykgKi8KLSAgICBhcGwyX3UsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiAxMDcgQVBMIDIgKEFJWCkgKi8KLSAgICBhcGwzX3UsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiAxMDggQVBMIDMgKFBsdXMpICovCi0gICAgYXBsNF91LCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogMTA5IEFQTCA0IChJQk0pICovCi0gICAgYXBsNV91ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogMTEwIEFQTCA1ICgyNzQxKSAqLwotfTsKLS8qCi0g IFRhYmxlIG9mIFVuaWNvZGUtdG8tQmxhaCB0cmFuc2xhdGlvbiBmdW5jdGlvbnMuCi0gIEtFRVAg VEhJUyBJTiBTWU5DIFdJVEggVEhFIFRYX2JsYWggREVGSU5JVElUSU9OUyBpbiBja2N1bmkuaCwg YW5kIGFsc28KLSAgd2l0aCB0aGUgdGFibGVzIGFib3ZlLgotKi8KLWludAotI2lmZGVmIENLX0FO U0lDCi0oKnhsX3R4W01BWFRYU0VUUysxXSkoVVNIT1JUKQotI2Vsc2UKLSgqeGxfdHhbTUFYVFhT RVRTKzFdKSgpCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSA9IHsKLSAgICB0eF91c2FzY2lpLCAg ICAgICAgICAgICAgICAgICAgICAgICAvKiAgMCBVUyBJU08gNjQ2IChBU0NJSSkgKi8KLSAgICB0 eF9icml0aXNoLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMSBVSyBJU08gNjQ2ICovCi0g ICAgdHhfZnJfY2FuYWRpYW4sICAgICAgICAgICAgICAgICAgICAgLyogIDIgQ2FuYWRpYW4gRnJl bmNoIE5SQyAqLwotICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAz IEN1YmEgKi8KLSAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgNCBD emVjaG8gKi8KLSAgICB0eF9kYW5pc2gsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgNSBE YW5pc2gvTm9yd2VnaWFuIElTTyA2NDYgKi8KLSAgICB0eF9kdXRjaCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiAgNiBEdXRjaCBOUkMgKi8KLSAgICB0eF9maW5uaXNoLCAgICAgICAgICAg ICAgICAgICAgICAgICAvKiAgNyBGaW5uaXNoIE5SQyAgKi8KLSAgICB0eF9mcmVuY2gsICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiAgOCBGcmVuY2ggSVNPIDY0NiAqLwotICAgIHR4X2dlcm1h biwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICA5IEdlcm1hbiBJU08gNjQ2ICovCi0gICAg dHhfaGVicmV3NywgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAgSGVicmV3LTcgKERFQykg Ki8KLSAgICB0eF9odW5nYXJpYW4sICAgICAgICAgICAgICAgICAgICAgICAvKiAxMSBIdW5nYXJp YW4gSVNPIDY0NiAqLwotICAgIHR4X2ljZWxhbmRpYywgICAgICAgICAgICAgICAgICAgICAgIC8q IDEyIEljZWxhbmRpYyAqLwotICAgIHR4X2l0YWxpYW4sICAgICAgICAgICAgICAgICAgICAgICAg IC8qIDEzIEl0YWxpYW4gSVNPIDY0NiAqLwotICAgIHR4X2ppczAyMDFyLCAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDE0IEphcGFuZXNlIFJvbWFuIElTTyA2NDYgKi8KLSAgICB0eF9qaXMwMjAx aywgICAgICAgICAgICAgICAgICAgICAgICAvKiAxNSBKYXBhbmVzZSBLYXRha2FuYSAqLwotICAg IHR4X2tvaTcsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDE2IFNob3J0IEtPSSAqLwot ICAgIHR4X2RhbmlzaCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDE3IE5vcndlZ2lhbi9E YW5pc2ggSVNPIDY0NiAqLwotICAgIHR4X3BvcnR1Z3Vlc2UsICAgICAgICAgICAgICAgICAgICAg IC8qIDE4IFBvcnR1Z3Vlc2UgSVNPIDY0NiAqLwotICAgIHR4X3NwYW5pc2gsICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDE5IHNwYW5pc2ggSVNPIDY0NiAqLwotICAgIHR4X3N3ZWRpc2gsICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDIwIFN3ZWRpc2ggSVNPIDY0NiAqLwotICAgIE5VTEws ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDIxIFN3ZWRpc2ggSVNPIDY0NiBmb3Ig bmFtZXMgKi8KLSAgICB0eF9zd2lzcywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyMiBT d2lzcyBOUkMgICAqLwotICAgIHR4X2lkZW50LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IDIzIElTTyA4ODU5LTEgICovCi0gICAgdHhfODg1OV8yLCAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogMjQgSVNPIDg4NTktMiAgKi8KLSAgICB0eF84ODU5XzMsICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiAyNSBJU08gODg1OS0zICAqLwotICAgIHR4Xzg4NTlfNCwgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDI2IElTTyA4ODU5LTQgICovCi0gICAgdHhfODg1OV81LCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogMjcgSVNPIDg4NTktNSAgKi8gLyogQ3lyaWxsaWMgKi8KLSAg ICB0eF84ODU5XzYsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyOCBJU08gODg1OS02ICAq LyAvKiBBcmFiaWMgKi8KLSAgICB0eF84ODU5XzcsICAgICAgICAgICAgICAgICAgICAgICAgICAv KiAyOSBJU08gODg1OS03ICAqLyAvKiBHcmVlayAqLwotICAgIHR4Xzg4NTlfOCwgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDMwIElTTyA4ODU5LTggICovIC8qIEhlYnJldyAqLwotICAgIHR4 Xzg4NTlfOSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDMxIElTTyA4ODU5LTkgICovIC8q IExhdGluLTUgKi8KLSAgICB0eF84ODU5XzEwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAz MiBJU08gODg1OS0xMCAqLyAvKiBMYXRpbi02ICovCi0gICAgdHhfa29pOCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogMzMgS09JLTggICAgICAgKi8KLSAgICBOVUxMLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiAzNCBKSVMtNyAgICAgICAqLwotICAgIE5VTEwsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDM1IFNoaWZ0IEpJUyAgICovCi0gICAgTlVMTCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzYgSmFwYW5lc2UgRVVDIChKQUUpICov Ci0gICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzcgSmFwYW5lc2Ug REVDIEthbmppICovCi0gICAgdHhfZGVjbWNzLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyog MzggREVDIE1DUyAqLwotICAgIHR4X25leHRzdGVwLCAgICAgICAgICAgICAgICAgICAgICAgIC8q IDM5IE5lWFQgICAgKi8KLSAgICB0eF9kZ2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiA0MCBER0kgICAgICovCi0gICAgdHhfbWFjbGF0aW4sICAgICAgICAgICAgICAgICAgICAgICAg LyogNDEgTWFjaW50b3NoIExhdGluICAqLwotICAgIHR4X2hwcm9tYW44LCAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDQyIEhQIFJvbWFuIDggICAgICAgKi8KLSAgICB0eF9jcDQzNywgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiA0MyBDUDQzNyAtIE9yaWdpbmFsICovCi0gICAgdHhfY3A4 NTAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNDQgQ1A4NTAgLSBXIEV1cm9wZSAqLwot ICAgIHR4X2NwODUyLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQ1IENQODUyIC0gRSBF dXJvcGUgKi8KLSAgICB0eF9jcDg1NywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA0NiBD UDg1NyAtIFR1cmtpc2ggICovCi0gICAgdHhfY3A4NjIsICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogNDcgQ1A4NjIgLSBIZWJyZXcgICAqLwotICAgIHR4X2NwODY2LCAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDQ4IENQODY0IC0gQXJhYmljICAgKi8KLSAgICB0eF9jcDg2NiwgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiA0OSBDUDg2NiAtIEN5cmlsbGljICovCi0gICAgdHhf Y3A4NjksICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNTAgQ1A4NjkgLSBHcmVlayAgICAq LwotICAgIE5VTEwsICAgICAgIC8qIERpc3BsYXkgb25seSAqLyAgICAgIC8qIDUxIERFQyBTcGVj aWFsIEdyYXBoaWNzICovCi0gICAgTlVMTCwgICAgICAgLyogRGlzcGxheSBvbmx5ICovICAgICAg LyogNTIgREVDIFRlY2huaWNhbCAqLwotICAgIE5VTEwsICAgICAgIC8qIERpc3BsYXkgb25seSAq LyAgICAgIC8qIDUzIEMwIFBpY3R1cmVzICovCi0gICAgTlVMTCwgICAgICAgLyogRGlzcGxheSBv bmx5ICovICAgICAgLyogNTQgQzEgUGljdHVyZXMgKi8KLSAgICBOVUxMLCAgICAgICAvKiBEaXNw bGF5IG9ubHkgKi8gICAgICAvKiA1NSBJQk0gQzAgR3JhcGhpY3MgKi8KLSAgICBOVUxMLCAgICAg ICAvKiBEaXNwbGF5IG9ubHkgKi8gICAgICAvKiA1NiBIZWF0aCAxOSBncmFwaGljcyAqLwotICAg IE5VTEwsICAgICAgIC8qIERpc3BsYXkgb25seSAqLyAgICAgIC8qIDU3IFRWSSBncmFwaGljcyAq LwotICAgIE5VTEwsICAgICAgIC8qIERpc3BsYXkgb25seSAqLyAgICAgIC8qIDU4IFd5c2UgNjAg bm9ybWFsLW1vZGUgZ3JhcGhpY3MgKi8KLSAgICBOVUxMLCAgICAgICAvKiBEaXNwbGF5IG9ubHkg Ki8gICAgICAvKiA1OSBXeXNlIDYwIGdyYXBoaWNzIDEgKi8KLSAgICBOVUxMLCAgICAgICAvKiBE aXNwbGF5IG9ubHkgKi8gICAgICAvKiA2MCBXeXNlIDYwIGdyYXBoaWNzIDIgKi8KLSAgICBOVUxM LCAgICAgICAvKiBEaXNwbGF5IG9ubHkgKi8gICAgICAvKiA2MSBXeXNlIDYwIGdyYXBoaWNzIDMg Ki8KLSAgICB0eF9lbG90OTI3LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiA2MiBHcmVlayBF TE9UIDkyNyAqLwotICAgIE5VTEwsICAgICAgIC8qIERpc3BsYXkgb25seSAqLyAgICAgIC8qIDYz IERHIHNwZWNpYWwgZ3JhcGhpY3MgKi8KLSAgICBOVUxMLCAgICAgICAvKiBEaXNwbGF5IG9ubHkg Ki8gICAgICAvKiA2NCBERyBsaW5lLWRyYXdpbmcgKi8KLSAgICBOVUxMLCAgICAgICAvKiBEaXNw bGF5IG9ubHkgKi8gICAgICAvKiA2NSBERyB3b3JkLXByb2Nlc3NpbmcgKi8KLSAgICBOVUxMLCAg ICAgICAvKiBEaXNwbGF5IG9ubHkgKi8gICAgICAvKiA2NiBIUCBsaW5lLWRyYXdpbmcgKi8KLSAg ICBOVUxMLCAgICAgICAvKiBEaXNwbGF5IG9ubHkgKi8gICAgICAvKiA2NyBIUCBtYXRoL3RlY2hp Y2FsICovCi0gICAgTlVMTCwgICAgICAgLyogRGlzcGxheSBvbmx5ICovICAgICAgLyogNjggUU5Y IEdyYXBoaWNzICovCi0gICAgTlVMTCwgICAgICAgLyogRGlzcGxheSBvbmx5ICovICAgICAgLyog NjkgU05JIEJyYWNrZXRzICovCi0gICAgTlVMTCwgICAgICAgLyogRGlzcGxheSBvbmx5ICovICAg ICAgLyogNzAgU05JIEV1cm8gKi8KLSAgICBOVUxMLCAgICAgICAvKiBEaXNwbGF5IG9ubHkgKi8g ICAgICAvKiA3MSBTTkkgRmFjZXQgKi8KLSAgICBOVUxMLCAgICAgICAvKiBEaXNwbGF5IG9ubHkg Ki8gICAgICAvKiA3MiBTTkkgSUJNICovCi0gICAgTlVMTCwgICAgICAgLyogRGlzcGxheSBvbmx5 ICovICAgICAgLyogNzMgU05JIEJsYW5rcyAqLwotICAgIHR4X2NwMTI1MiwgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDc0IFdpbmRvd3MgTGF0aW4tMSAqLwotICAgIHR4X2NwMTI1MCwgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDc1IFdpbmRvd3MgTGF0aW4tMiAqLwotICAgIHR4X2Nw MTI1MSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDc2IFdpbmRvd3MgQ3lyaWxsaWMgKi8K LSAgICB0eF9jcDEyNTMsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA3NyBXaW5kb3dzIEdy ZWVrICovCi0gICAgdHhfY3AxMjU0LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNzggV2lu ZG93cyBUdXJraXNoICovCi0gICAgdHhfY3AxMjU3LCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogNzkgV2luZG93cyBMYXRpbi00ICovCi0gICAgdHhfY3A4NTYsICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogODAgQ3lyaWxsaWMgUEMgQ29kZSBQYWdlIDg1NiAqLwotICAgIHR4X2NwODU1 LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDgxIEN5cmlsbGljIFBDIENvZGUgUGFnZSA4 NTUgKi8KLSAgICB0eF9pZGVudCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA4MiBDUDgx OSAtIFNhbWUgYXMgODg1OS0xICovCi0gICAgdHhfODg1OV8yLCAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogODMgQ1A5MTIgLSBTYW1lIGFzIDg4NTktMiAqLwotICAgIHR4Xzg4NTlfMywgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDg0IENQOTEzIC0gU2FtZSBhcyA4ODU5LTMgKi8KLSAg ICB0eF84ODU5XzQsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA4NSBDUDkxNCAtIFNhbWUg YXMgODg1OS00ICovCi0gICAgdHhfODg1OV81LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyog ODYgQ1A5MTUgLSBTYW1lIGFzIDg4NTktNSAqLwotICAgIHR4Xzg4NTlfNiwgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDg3IENQMTA4OSAtIFNhbWUgYXMgODg1OS02ICovCi0gICAgdHhfODg1 OV83LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogODggQ1A4MTMgLSBTYW1lIGFzIDg4NTkt NyAqLwotICAgIHR4Xzg4NTlfOCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDg5IENQOTE2 IC0gU2FtZSBhcyA4ODU5LTggKi8KLSAgICB0eF84ODU5XzksICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiA5MCBDUDkyMCAtIFNhbWUgYXMgODg1OS05ICovCi0gICAgdHhfaHByb21hbjgsICAg ICAgICAgICAgICAgICAgICAgICAgLyogOTEgQ1AxMDUxIC1TYW1lIGFzIEhQIFJvbWFuIDggKi8K LSAgICB0eF9jcDg1OCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA5MiBDUDg1OCAtIFcg RXVyb3BlIHcvRXVybyAqLwotICAgIHR4Xzg4NTlfMTUsICAgICAgICAgICAgICAgICAgICAgICAg IC8qIDkzIElTTyA4ODU5LTE1IExhdGluIDE1ICovCi0gICAgdHhfODg1OV8xNSwgICAgICAgICAg ICAgICAgICAgICAgICAgLyogOTQgQ1A5MjMgLSBTYW1lIGFzIExhdGluIDE1ICovCi0gICAgdHhf ODg1OV83LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogOTUgRUxPVDkyOCAtIFNhbWUgYXMg ODg1OS03ICovCi0gICAgdHhfcXVpY2tkcmF3LCAgICAgICAgICAgICAgICAgICAgICAgLyogOTYg Q1AxMDAwMCAtIEFwcGxlIFF1aWNrZHJhdyAqLwotICAgIHR4X2NwMzcsICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDk3IENQMzcgLSBVLlMuIEVCQ0RJQyAqLwotICAgIHR4X2NwMTI1NSwg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDk4IENQMTI1NSAtIFdpbmRvd3MgSGVicmV3ICov Ci0gICAgdHhfY3AxMjU2LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogOTkgQ1AxMjU2IC0g V2luZG93cyBBcmFiaWMgKi8KLSAgICB0eF9jcDEyNTgsICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiAxMDAgQ1AxMjU4IC0gV2luZG93cyBWaWV0IE5hbSAqLwotICAgIHR4X21hem92aWEsICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMSBNYXpvdmlhICBQQyBjb2RlIHBhZ2UgKi8KLSAg ICB0eF9pZGVudCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDIgVHJhbnNwYXJlbnQg LSBubyB0cmFuc2xhdGlvbiAqLwotICAgIE5VTEwsICAgICAgIC8qIERpc3BsYXkgb25seSAqLyAg ICAgIC8qIDEwMyBIYXplbHRpbmUgMTUwMC8xNTIwIGdyYXBoaWNzICovCi0gICAgdHhfa29pOHIs ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTA0IEtPSTgtUiAqLwotICAgIHR4X2tvaTh1 LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwNSBLT0k4LVUgKi8KLSAgICB0eF9hcGwx LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDYgQVBMIDEgKElTTykgKi8KLSAgICB0 eF9hcGwyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDcgQVBMIDIgKEFJWCkgKi8K LSAgICB0eF9hcGwzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDggQVBMIDMgKFBs dXMpICovCi0gICAgdHhfYXBsNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTA4IEFQ TCA0IChJQk0pICovCi0gICAgdHhfYXBsNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog MTEwIEFQTCA1ICgyNzQxKSAqLwotfTsKLQotLyoKLSAgVGFibGUgb2YgRkNTLXRvLVVuaWNvZGUg dHJhbnNsYXRpb24gZnVuY3Rpb25zLgotICBLRUVQIFRISVMgSU4gU1lOQyBXSVRIIFRIRSBGQ19i bGFoIERFRklOSVRJVElPTlMgaW4gY2t1eGxhLmguCi0qLwotVVNIT1JUCi0jaWZkZWYgQ0tfQU5T SUMKLSgqeGxfZmN1W01BWEZDU0VUUysxXSkoQ0hBUikKLSNlbHNlCi0oKnhsX2ZjdVtNQVhGQ1NF VFMrMV0pKCkKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotPSB7Ci0gICAgYXNjaWlfdSwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogIDAgVVMgSVNPIDY0NiAoQVNDSUkpICovCi0gICAgYnJp dGlzaF91LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDEgVUsgSVNPIDY0NiAqLwotICAg IGR1dGNoX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAyIER1dGNoIE5SQyAqLwot ICAgIGZpbm5pc2hfdSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAzIEZpbm5pc2ggTlJD ICAqLwotICAgIGZyZW5jaF91LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICA0IEZyZW5j aCBJU08gNjQ2ICovCi0gICAgZnJfY2FuYWRpYW5fdSwgICAgICAgICAgICAgICAgICAgICAgLyog IDUgQ2FuYWRpYW4gRnJlbmNoIE5SQyAqLwotICAgIGdlcm1hbl91LCAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qICA2IEdlcm1hbiBJU08gNjQ2ICovCi0gICAgaHVuZ2FyaWFuX3UsICAgICAg ICAgICAgICAgICAgICAgICAgLyogIDcgSHVuZ2FyaWFuIElTTyA2NDYgKi8KLSAgICBpdGFsaWFu X3UsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgOCBJdGFsaWFuIElTTyA2NDYgKi8KLSAg ICBkYW5pc2hfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgOSBEYW5pc2gvTm9yd2Vn aWFuIElTTyA2NDYgKi8KLSAgICBwb3J0dWd1ZXNlX3UsICAgICAgICAgICAgICAgICAgICAgICAv KiAxMCBQb3J0dWd1ZXNlIElTTyA2NDYgKi8KLSAgICBzcGFuaXNoX3UsICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiAxMSBzcGFuaXNoIElTTyA2NDYgKi8KLSAgICBzd2VkaXNoX3UsICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiAxMiBTd2VkaXNoIElTTyA2NDYgKi8KLSAgICBzd2lzc191 LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMyBTd2lzcyBOUkMgICAqLwotICAgIGlz b184ODU5XzFfdSwgICAgICAgICAgICAgICAgICAgICAgIC8qIDE0IElTTyA4ODU5LTEgTGF0aW4t MSAqLwotICAgIGlzb184ODU5XzJfdSwgICAgICAgICAgICAgICAgICAgICAgIC8qIDE1IElTTyA4 ODU5LTIgTGF0aW4tMiAqLwotICAgIGRlY21jc191LCAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIDE2IERFQyBNQ1MgKi8KLSAgICBuZXh0c3RlcF91LCAgICAgICAgICAgICAgICAgICAgICAg ICAvKiAxNyBOZVhUICovCi0gICAgY3A0MzdfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogMTggQ1A0MzcgLSBPcmlnaW5hbCAqLwotICAgIGNwODUwX3UsICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDE5IENQODUwIC0gVyBFdXJvcGUgKi8KLSAgICBjcDg1Ml91LCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiAyMCBDUDg1MiAtIEUgRXVyb3BlICovCi0gICAgcXVpY2tk cmF3X3UsICAgICAgICAgICAgICAgICAgICAgICAgLyogMjEgQ1AxMDAwMCAtIEFwcGxlIFF1aWNr ZHJhdyAqLwotICAgIGRnaV91LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDIyIERH SSAqLwotICAgIGhwcm9tYW44X3UsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDIzIEhQIFJv bWFuIDggKi8KLSAgICBpc29fODg1OV81X3UsICAgICAgICAgICAgICAgICAgICAgICAvKiAyNCBJ U08gODg1OS01IEN5cmlsbGljICovCi0gICAgY3A4NjZfdSwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogMjUgQ1A4NjYgLSBDeXJpbGxpYyAqLwotICAgIGtvaTdfdSwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDI2IFNob3J0IEtPSSAqLwotICAgIGtvaThfdSwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIDI3IEtPSS04ICAgICAgICovCi0gICAgTlVMTCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogMjggSklTLTcgKi8KLSAgICBOVUxMLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiAyOSBTaGlmdC1KSVMgKi8KLSAgICBOVUxMLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzMCBKYXBhbmVzZSBFVUMgKi8KLSAgICBOVUxM LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzMSBERUMgS2FuamkgKi8KLSAgICBo ZWJyZXc3X3UsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzMiBIZWJyZXctNyAoREVDKSAq LwotICAgIGlzb184ODU5XzhfdSwgICAgICAgICAgICAgICAgICAgICAgIC8qIDMzIElTTyA4ODU5 LTggSGVicmV3ICovCi0gICAgY3A4NjJfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog MzQgQ1A4NjIgSGVicmV3ICovCi0gICAgZWxvdDkyN191LCAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogMzUgR3JlZWsgRUxPVCA5MjcgKi8KLSAgICBpc29fODg1OV83X3UsICAgICAgICAgICAg ICAgICAgICAgICAvKiAzNiBJU08gODg1OS03IEdyZWVrICovCi0gICAgY3A4NjlfdSwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogMzcgQ1A4NjkgR3JlZWsgKi8KLSAgICBpc29fODg1OV8x NV91LCAgICAgICAgICAgICAgICAgICAgICAvKiAzOCBJU08gODg1OS0xNSBMYXRpbi05ICovCi0g ICAgY3A4NThfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzkgQ1A4NTggLSBXIEV1 cm9wZSB3L0V1cm8gKi8KLSAgICBjcDg1NV91LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiA0MCBDeXJpbGxpYyBQQyBDb2RlIFBhZ2UgODU2ICovCi0gICAgY3AxMjUxX3UsICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogNDEgV2luZG93cyBDeXJpbGxpYyAqLwotICAgIGNwODU2X3Us ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQyIEJ1bGdhcmlhbiBQQyBDb2RlIFBhZ2Ug ODU2ICovCi0gICAgY3AxMjUwX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNDMgV2lu ZG93cyBMYXRpbi0yICovCi0gICAgbWF6b3ZpYV91LCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogNDQgTWF6b3ZpYSBQQyBjb2RlIHBhZ2UgKi8KLSAgICBOVUxMLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiA0NSBVQ1MtMiAqLwotICAgIE5VTEwsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDQ2IFVURi04ICovCi0gICAga29pOHJfdSwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogNDcgS09JOC1SICovCi0gICAga29pOHVfdSwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogNDggS09JOC1VICovCi0gICAgY3AxMjUyX3UgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogNDkgQ1AxMjUyICovCi19OwotCi0vKgotICBUYWJsZSBvZiBVbmljb2Rl LXRvLUZDUyB0cmFuc2xhdGlvbiBmdW5jdGlvbnMuCi0gIEtFRVAgVEhJUyBJTiBTWU5DIFdJVEgg VEhFIEZDX2JsYWggREVGSU5JVElUSU9OUyBpbiBja3V4bGEuaC4KLSovCi1pbnQKLSNpZmRlZiBD S19BTlNJQwotKCp4bF91ZmNbTUFYRkNTRVRTKzFdKShVU0hPUlQpCi0jZWxzZQotKCp4bF91ZmNb TUFYRkNTRVRTKzFdKSgpCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLT0gewotICAgIHR4X3VzYXNj aWksICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAwIFVTIElTTyA2NDYgKEFTQ0lJKSAqLwot ICAgIHR4X2JyaXRpc2gsICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAxIFVLIElTTyA2NDYg Ki8KLSAgICB0eF9kdXRjaCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMiBEdXRjaCBO UkMgKi8KLSAgICB0eF9maW5uaXNoLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMyBGaW5u aXNoIE5SQyAgKi8KLSAgICB0eF9mcmVuY2gsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAg NCBGcmVuY2ggSVNPIDY0NiAqLwotICAgIHR4X2ZyX2NhbmFkaWFuLCAgICAgICAgICAgICAgICAg ICAgIC8qICA1IENhbmFkaWFuIEZyZW5jaCBOUkMgKi8KLSAgICB0eF9nZXJtYW4sICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiAgNiBHZXJtYW4gSVNPIDY0NiAqLwotICAgIHR4X2h1bmdhcmlh biwgICAgICAgICAgICAgICAgICAgICAgIC8qICA3IEh1bmdhcmlhbiBJU08gNjQ2ICovCi0gICAg dHhfaXRhbGlhbiwgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDggSXRhbGlhbiBJU08gNjQ2 ICovCi0gICAgdHhfZGFuaXNoLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDkgRGFuaXNo L05vcndlZ2lhbiBJU08gNjQ2ICovCi0gICAgdHhfcG9ydHVndWVzZSwgICAgICAgICAgICAgICAg ICAgICAgLyogMTAgUG9ydHVndWVzZSBJU08gNjQ2ICovCi0gICAgdHhfc3BhbmlzaCwgICAgICAg ICAgICAgICAgICAgICAgICAgLyogMTEgc3BhbmlzaCBJU08gNjQ2ICovCi0gICAgdHhfc3dlZGlz aCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTIgU3dlZGlzaCBJU08gNjQ2ICovCi0gICAg dHhfc3dpc3MsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTMgU3dpc3MgTlJDICAgKi8K LSAgICB0eF9pZGVudCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxNCBJU08gODg1OS0x IExhdGluLTEgKi8KLSAgICB0eF84ODU5XzIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAx NSBJU08gODg1OS0yIExhdGluLTIgKi8KLSAgICB0eF9kZWNtY3MsICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiAxNiBERUMgTUNTICovCi0gICAgdHhfbmV4dHN0ZXAsICAgICAgICAgICAgICAg ICAgICAgICAgLyogMTcgTmVYVCAqLwotICAgIHR4X2NwNDM3LCAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIDE4IENQNDM3IC0gT3JpZ2luYWwgKi8KLSAgICB0eF9jcDg1MCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiAxOSBDUDg1MCAtIFcgRXVyb3BlICovCi0gICAgdHhfY3A4NTIs ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMjAgQ1A4NTIgLSBFIEV1cm9wZSAqLwotICAg IHR4X3F1aWNrZHJhdywgICAgICAgICAgICAgICAgICAgICAgIC8qIDIxIENQMTAwMDAgLSBBcHBs ZSBRdWlja2RyYXcgKi8KLSAgICB0eF9kZ2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiAyMiBER0kgKi8KLSAgICB0eF9ocHJvbWFuOCwgICAgICAgICAgICAgICAgICAgICAgICAvKiAy MyBIUCBSb21hbiA4ICovCi0gICAgdHhfODg1OV81LCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogMjQgSVNPIDg4NTktNSBDeXJpbGxpYyAqLwotICAgIHR4X2NwODY2LCAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDI1IENQODY2IC0gQ3lyaWxsaWMgKi8KLSAgICB0eF9rb2k3LCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiAyNiBTaG9ydCBLT0kgKi8KLSAgICB0eF9rb2k4LCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyNyBLT0ktOCAgICAgICAqLwotICAgIE5VTEws ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDI4IEpJUy03ICovCi0gICAgTlVMTCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMjkgU2hpZnQtSklTICovCi0gICAgTlVM TCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzAgSmFwYW5lc2UgRVVDICovCi0g ICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzEgREVDIEthbmppICov Ci0gICAgdHhfaGVicmV3NywgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzIgSGVicmV3LTcg KERFQykgKi8KLSAgICB0eF84ODU5XzgsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzMyBJ U08gODg1OS04IEhlYnJldyAqLwotICAgIHR4X2NwODYyLCAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDM0IENQODYyIEhlYnJldyAqLwotICAgIHR4X2Vsb3Q5MjcsICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDM1IEdyZWVrIEVMT1QgOTI3ICovCi0gICAgdHhfODg1OV83LCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogMzYgSVNPIDg4NTktNyBHcmVlayAqLwotICAgIHR4X2NwODY5 LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDM3IENQODY5IEdyZWVrICovCi0gICAgdHhf ODg1OV8xNSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzggSVNPIDg4NTktMTUgTGF0aW4t OSAqLwotICAgIHR4X2NwODU4LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDM5IENQODU4 IC0gVyBFdXJvcGUgdy9FdXJvICovCi0gICAgdHhfY3A4NTUsICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogNDAgQ3lyaWxsaWMgUEMgQ29kZSBQYWdlIDg1NiAqLwotICAgIHR4X2NwMTI1MSwg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQxIFdpbmRvd3MgQ3lyaWxsaWMgKi8KLSAgICB0 eF9jcDg1NiwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA0MiBCdWxnYXJpYW4gUEMgQ29k ZSBQYWdlIDg1NiAqLwotICAgIHR4X2NwMTI1MCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IDQzIFdpbmRvd3MgTGF0aW4tMiAqLwotICAgIHR4X21hem92aWEsICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIDQ0IE1hem92aWEgUEMgY29kZSBwYWdlICovCi0gICAgTlVMTCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogNDUgVUNTLTIgKi8KLSAgICBOVUxMLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiA0NiBVVEYtOCAqLwotICAgIHR4X2tvaThyLCAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIDQ3IEtPSTgtUiAqLwotICAgIHR4X2tvaTh1LCAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIDQ4IEtPSTgtVSAqLwotICAgIHR4X2NwMTI1MiAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIDQ5IENQMTI1MiAqLwotfTsKLQotLyoKLSAgVGFibGUgb2Yg VENTLXRvLVVuaWNvZGUgdHJhbnNsYXRpb24gZnVuY3Rpb25zLgotICBLRUVQIFRISVMgSU4gU1lO QyBXSVRIIFRIRSBUQ19ibGFoIERFRklOSVRJT05TIGluIGNrdXhsYS5oLgotKi8KLVVTSE9SVAot I2lmZGVmIENLX0FOU0lDCi0oKnhsX3RjdVtNQVhUQ1NFVFMrMV0pKENIQVIpCi0jZWxzZQotKCp4 bF90Y3VbTUFYVENTRVRTKzFdKSgpCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLT0gewotICAgIE5V TEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAwID0gVHJhbnNwYXJlbnQgKi8K LSAgICBhc2NpaV91LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMSA9IEFTQ0lJICov Ci0gICAgaXNvXzg4NTlfMV91LCAgICAgICAgICAgICAgICAgICAgICAgLyogIDIgSVNPIDg4NTkt MSBMYXRpbi0xICovCi0gICAgaXNvXzg4NTlfMl91LCAgICAgICAgICAgICAgICAgICAgICAgLyog IDMgSVNPIDg4NTktMiBMYXRpbi0yICovCi0gICAgaXNvXzg4NTlfNV91LCAgICAgICAgICAgICAg ICAgICAgICAgLyogIDQgSVNPIDg4NTktNSBDeXJpbGxpYyAqLwotICAgIE5VTEwsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qICA1IEphcGFuZXNlIEVVQyAqLwotICAgIGlzb184ODU5 XzhfdSwgICAgICAgICAgICAgICAgICAgICAgIC8qICA2IElTTyA4ODU5LTggSGVicmV3ICovCi0g ICAgaXNvXzg4NTlfN191LCAgICAgICAgICAgICAgICAgICAgICAgLyogIDcgSVNPIDg4NTktNyBH cmVlayAqLwotICAgIGlzb184ODU5XzE1X3UsICAgICAgICAgICAgICAgICAgICAgIC8qICA4IElT TyA4ODU5LTE1IExhdGluLTkgKi8KLSAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiAgOSBVQ1MtMiAqLwotICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDEwIFVURi04ICovCi19OwotCi0KLS8qCi0gIFRhYmxlIG9mIFVuaWNvZGUtdG8tVENT IHRyYW5zbGF0aW9uIGZ1bmN0aW9ucy4KLSAgS0VFUCBUSElTIElOIFNZTkMgV0lUSCBUSEUgVENf YmxhaCBERUZJTklUSU9OUyBpbiBja3V4bGEuaC4KLSovCi1pbnQKLSNpZmRlZiBDS19BTlNJQwot KCp4bF91dGNbTUFYVENTRVRTKzFdKShVU0hPUlQpCi0jZWxzZQotKCp4bF91dGNbTUFYVENTRVRT KzFdKSgpCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLT0gewotICAgIE5VTEwsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qICAwID0gVHJhbnNwYXJlbnQgKi8KLSAgICB0eF91c2FzY2lp LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMSA9IEFTQ0lJICovCi0gICAgdHhfaWRlbnQs ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDIgSVNPIDg4NTktMSBMYXRpbi0xICovCi0g ICAgdHhfODg1OV8yLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDMgSVNPIDg4NTktMiBM YXRpbi0yICovCi0gICAgdHhfODg1OV81LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDQg SVNPIDg4NTktNSBDeXJpbGxpYyAqLwotICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qICA1IEphcGFuZXNlIEVVQyAqLwotICAgIHR4Xzg4NTlfOCwgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qICA2IElTTyA4ODU5LTggSGVicmV3ICovCi0gICAgdHhfODg1OV83LCAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogIDcgSVNPIDg4NTktNyBHcmVlayAqLwotICAgIHR4 Xzg4NTlfMTUsICAgICAgICAgICAgICAgICAgICAgICAgIC8qICA4IElTTyA4ODU5LTE1IExhdGlu LTkgKi8KLSAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgOSBVQ1Mt MiAqLwotICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwIFVURi04 ICovCi19OwotCi0jaWZkZWYgQ09NTUVOVAotLyoKLSAgVGhlIFVURjggY29udmVyc2lvbnMgYXJl IGJhc2VkIG9uIHRoZSBDb252ZXJ0VVRGIGZ1bmN0aW9ucyB3cml0dGVuCi0gIGJ5IE1hcmsgRS4g RGF2aXMsIGNvcHlyaWdodCAxOTk0IFRhbGlnZW50LCBJbmMuCi0KLSAgVGFibGVzIGZvciB1c2Ug aW4gY2FsY3VsYXRpbmcgVVRGOCBjb252ZXJzaW9ucy4gIFRoZXNlIGNvbnRhaW4KLSAgc3VwcG9y dCBmb3IgSVNPLTEwNjQ2IHdoaWNoIHN1cHBvcnRzIGEgMzEtYml0IGNoYXIgc2l6ZS4KLQotICBO T1RFOiAweG5ublVMIGlzIE5PVCBwb3J0YWJsZSEKLSovCi1VTE9ORwotb2Zmc2V0c0Zyb21VVEY4 WzddID0gewotI2lmZGVmIENLX0FOU0lDCi0gICAgMHgwMDAwMDAwMFVMLCAvKiBJZ25vcmVkICov Ci0gICAgMHgwMDAwMDAwMFVMLCAweDAwMDAzMDgwVUwsIDB4MDAwRTIwODBVTCwKLSAgICAweDAz QzgyMDgwVUwsIDB4RkEwODIwODBVTCwgMHg4MjA4MjA4MFVMCi0jZWxzZQotICAgIDB4MDAwMDAw MDBMLCAvKiBJZ25vcmVkICovCi0gICAgMHgwMDAwMDAwMEwsIDB4MDAwMDMwODBMLCAweDAwMEUy MDgwTCwKLSAgICAweDAzQzgyMDgwTCwgKHVuc2lnbmVkKSAweEZBMDgyMDgwTCwgKHVuc2lnbmVk KSAweDgyMDgyMDgwTAotI2VuZGlmIC8qIENLX0FOU0lDICovCi19OwotCi1DSEFSIGJ5dGVzSW5V VEY4WzI1Nl0gPSB7Ci0gICAgMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwgMSwxLDEs MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwKLSAgICAxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwx LDEsMSwxLCAxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLAotICAgIDEsMSwxLDEsMSwx LDEsMSwxLDEsMSwxLDEsMSwxLDEsIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsCi0g ICAgMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwgMSwxLDEsMSwxLDEsMSwxLDEsMSwx LDEsMSwxLDEsMSwKLSAgICAxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLCAxLDEsMSwx LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLAotICAgIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEs MSwxLDEsIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsCi0gICAgMiwyLDIsMiwyLDIs MiwyLDIsMiwyLDIsMiwyLDIsMiwgMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwKLSAg ICAzLDMsMywzLDMsMywzLDMsMywzLDMsMywzLDMsMywzLCA0LDQsNCw0LDQsNCw0LDQsNSw1LDUs NSw2LDYsNiw2Ci19OwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotQ0hBUiBmaXJzdEJ5dGVNYXJr WzddID0gezB4MDAsIDB4MDAsIDB4QzAsIDB4RTAsIDB4RjAsIDB4RjgsIDB4RkN9OwotCi0vKgot ICB1dGY4X3RvX3VjczIoKSB0YWtlcyBvbmUgVVRGLTggYnl0ZSBhdCBhIHRpbWUuICBJdCByZXR1 cm5zIGEgcG9pbnRlciB0aGUKLSAgVUNTLTIgY2hhcmFjdGVyIGlmIGFuZCBvbmx5IGlmIHRoZSBl bnRpcmUgVVRGLTggc3RyaW5nIGhhcyBiZWVuIHJlY2VpdmVkLgotICBSZXR1cm4gdmFsdWVzOgot ICAgMDogQ29tcGxldGUgVVRGLTggc2VxdWVuY2UgcmVjZWl2ZWQ7IHVjczIgcG9pbnRzIHRvIHZh bGlkIHVjczIgY2hhcmFjdGVyLgotICA+MDogVVRGLTggc2VxdWVuY2UgaW5jb21wbGV0ZSwgaWdu b3JlIHVjczIgdmFsdWUuCi0gIDwwOiBVVEYtOCBlcnJvciwgMHhmZmZkIHNob3VsZCBiZSBpbnNl cnRlZCBCRUZPUkUgdGhlIHVjczIgdmFsdWUuCi0KLSAgTk9URTogQSBuZWdhdGl2ZSB2YWx1ZSBp cyByZXR1cm5lZCBvbmx5IHdoZW4gdHdvIHJldHVybiB2YWx1ZXMgYXJlIGluZGljYXRlZCwKLSAg ZS5nLiB3aGVuIGEgVVRGLTggc2VxdWVuY2UgaXMgaW50ZXJydXB0ZWQgYnkgYW4gQVNDSUkgY2hh ci4gIEluIHRoaXMgY2FzZQotICB0aGUgaW5jb21wbGV0ZSBVVEYtOCBzZXF1ZW5jZSBtdXN0IGJl IHJlcGxhY2VkIGJ5IDB4ZmZmZCwgYW5kIHRoZW4gdGhlIEFTQ0lJCi0gIGNoYXJhY3RlciBpcyBr ZXB0IGFzLWlzLiAgSW4gb3RoZXIgZXJyb3IgY2FzZXMsIHVjczIgaXMgc2V0IHRvIDB4ZmZmZCBh bmQKLSAgdGhlIHJldHVybiB2YWx1ZSBpcyAwLgotKi8KLSNkZWZpbmUgVVRGQlVGU0laIDE2Ci0K LWludAotI2lmZGVmIENLX0FOU0lDCi11dGY4X3RvX3VjczIoQ0hBUiBjaCwgVVNIT1JUICoqIHVj czIpCi0jZWxzZQotdXRmOF90b191Y3MyKGNoLCB1Y3MyKSBDSEFSIGNoOyBVU0hPUlQgKiogdWNz MjsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIHN0YXRpYyBVU0hPUlQgdWNzMnJldHVy biA9IDA7Ci0KLSNpZmRlZiBDT01NRU5UCi0gICAgLyogVW5pY29kZSBDb25zb3J0aXVtIHNhbXBs ZSBjb2RlIHdvcmtzIG9ubHkgd2l0aCB3ZWxsLWZvcm1lZCBVVEY4ICovCi0KLSAgICBpbnQgaSA9 IDA7Ci0gICAgc3RhdGljIGludCBsZW4gPSAwOwotICAgIHN0YXRpYyBDSEFSIHV0ZjhbVVRGQlVG U0laXSA9IHsgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCB9OwotICAgIFVMT05HIHVj czQgPSAwOwotCi0gICAgdXRmOFtsZW4rK10gPSBjaDsgICAgICAgICAgICAgICAgICAgLyogQWRk IGNoYXIgdG8gc3RyaW5nIHRvIHByb2Nlc3MgKi8KLQotICAgIGlmIChsZW4gPCBieXRlc0luVVRG OFt1dGY4WzBdXSkgICAgIC8qIE5lZWQgbW9yZSBieXRlcyAqLwotICAgICAgcmV0dXJuKGJ5dGVz SW5VVEY4W3V0ZjhbMF1dIC0gbGVuKTsKLQotICAgIHN3aXRjaCAobGVuKSB7ICAgICAgICAgICAg ICAgICAgICAgIC8qIEhhdmUgY29tcGxldGUgc2VxdWVuY2UuLi4gKi8KLSAgICAgIGNhc2UgNjog dWNzNCArPSB1dGY4W2krK107IHVjczQgPDw9IDY7IC8qIChmYWxsLXRocnUgaXMgaW50ZW50aW9u YWwpICovCi0gICAgICBjYXNlIDU6IHVjczQgKz0gdXRmOFtpKytdOyB1Y3M0IDw8PSA2OwotICAg ICAgY2FzZSA0OiB1Y3M0ICs9IHV0ZjhbaSsrXTsgdWNzNCA8PD0gNjsKLSAgICAgIGNhc2UgMzog dWNzNCArPSB1dGY4W2krK107IHVjczQgPDw9IDY7Ci0gICAgICBjYXNlIDI6IHVjczQgKz0gdXRm OFtpKytdOyB1Y3M0IDw8PSA2OwotICAgICAgY2FzZSAxOiB1Y3M0ICs9IHV0ZjhbaSsrXTsKLSAg ICB9Ci0gICAgdWNzNCAtPSBvZmZzZXRzRnJvbVVURjhbbGVuXTsKLSAgICB1Y3MycmV0dXJuID0g KFVTSE9SVCkodWNzNCAmIDB4RkZGRik7Ci0jaWZkZWYgREVCVUcKLSAgICAvKiBUaGlzIHNob3dz IHRoYXQgb3VyIHJldHVybiB2YWx1ZSBpcyBpbiB0aGUgcHJldmFpbGluZyBieXRlIG9yZGVyOiAq LwotICAgIC8qIGUuZy4gTEUgb24gUEMsIEJFIG9uIFNwYXJjLiAqLwotICAgIGlmIChkZWJsb2cp IHsKLSAgICAgICAgY2hhciBidWZbMTZdOwotICAgICAgICB1bmlvbiBja19zaG9ydCB4eDsKLSAg ICAgICAgeHgueF9zaG9ydCA9IHVjczJyZXR1cm47Ci0gICAgICAgIHNwcmludGYoYnVmLCIlMDRY Iix1Y3MycmV0dXJuKTsKLSAgICAgICAgZGVidWcoRjExMSwidXRmOF90b191Y3MyIHNob3J0Iixi dWYsdWNzMnJldHVybik7Ci0gICAgICAgIGRlYnVnKEYxMDEsInV0ZjhfdG9fdWNzMiBjaGFyWzBd IiwiIix4eC54X2NoYXJbMF0pOwotICAgICAgICBkZWJ1ZyhGMTAxLCJ1dGY4X3RvX3VjczIgY2hh clsxXSIsIiIseHgueF9jaGFyWzFdKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICAq dWNzMiA9ICZ1Y3MycmV0dXJuOwotICAgIGxlbiA9IDA7Ci0gICAgcmV0dXJuKDApOwotI2Vsc2UK LSAgICAvKgotICAgICAgIFJvYnVzdGVyIGNvZGUgYWRhcHRlZCBmcm9tIFRob21hcyBEaWNrZXks IFhmcmVlODYsCi0gICAgICAgcmVjb21tZW5kZWQgYnkgTWFya3VzIEt1aG4uCi0gICAgKi8KLSAg ICBzdGF0aWMgaW50IHV0ZmNvdW50ID0gMDsgICAgICAgICAgICAvKiBQb3NpdGlvbiBpbiBVVEYg c2VxdWVuY2UgKi8KLSAgICBpbnQgdXRmZXJyb3IgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBG bGFnIGZvciBtYWxmb3JtZWQgVVRGICovCi0gICAgdW5zaWduZWQgYyA9IGNoOyAgICAgICAgICAg ICAgICAgICAgLyogSW5wdXQgYnl0ZSAqLwotICAgIGludCBoYXZldWNzMiA9IDA7Ci0KLSAgICBp ZiAoY2ggPCAweDgwKSB7ICAgICAgICAgICAgICAgICAgICAvKiBBU0NJSSBjaGFyLi4uICovCi0g ICAgICAgIGlmICh1dGZjb3VudCA+IDApICAgICAgICAgICAgICAgLyogTm90IGxlZ2FsIGluIFVU Ri04IHNlcXVlbmNlICovCi0gICAgICAgICAgdXRmZXJyb3IgPSAxOyAgICAgICAgICAgICAgICAg Lyogc28gZmxhZyAqLwotICAgICAgICBoYXZldWNzMiA9IDE7Ci0gICAgICAgIHVjczJyZXR1cm4g PSBjaDsgICAgICAgICAgICAgICAgLyogYnV0IGFsc28gcmV0dXJuIGl0ICovCi0gICAgICAgIHV0 ZmNvdW50ID0gMDsgICAgICAgICAgICAgICAgICAgLyogcmVzZXQgVVRGLTggY291bnQgKi8KLSAg ICB9IGVsc2UgaWYgKGNoIDwgMHhjMCkgeyAgICAgICAgICAgICAvKiAweDgwIDw9IGMgPCAweGMw Li4uICovCi0gICAgICAgIGlmICh1dGZjb3VudCA8IDEpIHsgICAgICAgICAgICAgLyogTm90IHZh bGlkIGluIGZpcnN0IHBvc2l0aW9uLi4uICovCi0gICAgICAgICAgICB1dGZlcnJvciA9IDE7Ci0g ICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTWF5YmUgdmFsaWQgKi8K LSAgICAgICAgICAgIGlmICh1Y3MycmV0dXJuID4gMHgwM2ZmKSB7ICAvKiBWYWx1ZSB3b3VsZCBi ZSA+IDB4ZmZmZiAqLwotICAgICAgICAgICAgICAgIHV0ZmVycm9yID0gMTsgICAgICAgICAgIC8q IHNvIG5vdCB2YWxpZCAqLwotICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAg IC8qIE9LLi4uICovCi0gICAgICAgICAgICAgICAgdWNzMnJldHVybiA8PD0gNjsgICAgICAgLyog U2hpZnQgcmVzdWx0ICovCi0gICAgICAgICAgICAgICAgdWNzMnJldHVybiB8PSAoY2ggJiAweDNm KTsgLyogYW5kIE9SIGluIHRoaXMgYnl0ZSAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAg aWYgKC0tdXRmY291bnQgPT0gMCkKLSAgICAgICAgICAgICAgaGF2ZXVjczIgPSAxOwotICAgICAg ICB9Ci0gICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYyA+PSAweGMw Li4uICovCi0gICAgICAgIGlmICh1dGZjb3VudCA+IDApCi0gICAgICAgICAgdXRmZXJyb3IgPSAx OwotICAgICAgICBpZiAoYyA8IDB4ZTApIHsKLSAgICAgICAgICAgIHV0ZmNvdW50ID0gMTsKLSAg ICAgICAgICAgIHVjczJyZXR1cm4gPSAoYyAmIDB4MWYpOwotICAgICAgICAgICAgaGF2ZXVjczIg PSAxOwotICAgICAgICB9IGVsc2UgaWYgKGMgPCAweGYwKSB7Ci0gICAgICAgICAgICB1dGZjb3Vu dCA9IDI7Ci0gICAgICAgICAgICB1Y3MycmV0dXJuID0gKGMgJiAweDBmKTsKLSAgICAgICAgICAg IGhhdmV1Y3MyID0gMTsKLSAgICAgICAgfSBlbHNlIGlmIChjIDwgMHhmOCkgewotICAgICAgICAg ICAgdXRmY291bnQgPSAzOwotICAgICAgICAgICAgdWNzMnJldHVybiA9IChjICYgMHgwNyk7Ci0g ICAgICAgICAgICBoYXZldWNzMiA9IDE7Ci0gICAgICAgIH0gZWxzZSBpZiAoYyA8IDB4ZmMpIHsK LSAgICAgICAgICAgIHV0ZmNvdW50ID0gNDsKLSAgICAgICAgICAgIHVjczJyZXR1cm4gPSAoYyAm IDB4MDMpOwotICAgICAgICAgICAgaGF2ZXVjczIgPSAxOwotICAgICAgICB9IGVsc2UgaWYgKGMg PCAweGZlKSB7Ci0gICAgICAgICAgICB1dGZjb3VudCA9IDU7Ci0gICAgICAgICAgICB1Y3MycmV0 dXJuID0gKGMgJiAweDAxKTsKLSAgICAgICAgICAgIGhhdmV1Y3MyID0gMTsKLSAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgIHV0ZmVycm9yID0gMTsKLSAgICAgICAgICAgIHV0ZmNvdW50ID0g MDsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoaGF2ZXVjczIgPT0gMCAmJiB1dGZlcnJvciAh PSAwKSB7Ci0gICAgICAgIGhhdmV1Y3MyID0gMTsKLSAgICAgICAgdWNzMnJldHVybiA9IDB4ZmZm ZDsKLSAgICAgICAgdXRmZXJyb3IgPSAwOwotICAgIH0KLSAgICBpZiAoaGF2ZXVjczIpIHsKLSAg ICAgICAgKnVjczIgPSAmdWNzMnJldHVybjsKLSAgICAgICAgaWYgKHV0ZmVycm9yKQotICAgICAg ICAgIHV0ZmNvdW50ID0gMCAtIHV0ZmNvdW50OwotICAgICAgICByZXR1cm4odXRmY291bnQpOwot ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICh1dGZjb3VudCA9PSAwKQotICAgICAgICAgIHV0ZmNv dW50Kys7Ci0gICAgICAgIHJldHVybih1dGZjb3VudCk7Ci0gICAgfQotI2VuZGlmIC8qIENPTU1F TlQgKi8KLX0KLQotLyoKLSAgdWNzMl90b191dGY4KCkgdGFrZXMgb25lIHVjczIgY2hhcmFjdGVy IGFuZCByZXR1cm5zIHRoZSBsZW5ndGggYW5kCi0gIGFuZCBhIHBvaW50ZXIgdG8gYW4gYXJyYXkg Y29udGFpbmluZyB0aGUgZXF1aXZhbGVudCB1dGY4IHN0cmluZy4KLSAgVGhpcyBjb2RlIGNhbiBl YXNpbHkgYmUgYWx0ZXJlZCB0byBzdXBwb3J0IFVDUzQgc2ltcGx5IGJ5IGNoYW5naW5nCi0gIHRo ZSBpbnB1dCBmcm9tIFVTSE9SVCB0byBVTE9ORy4gIFJldHVybnM6Ci0gICA+MDogTnVtYmVyIG9m IGJ5dGVzIGluIHRoZSB1dGY4IHN0cmluZy4KLSAgICAwOiAob3IgbGVzcykgRXJyb3IuCi0qLwot Ci1pbnQKLSNpZmRlZiBDS19BTlNJQwotdWNzMl90b191dGY4KFVTSE9SVCB1Y3MyLCBDSEFSICoq IHV0ZjgpCi0jZWxzZQotdWNzMl90b191dGY4KHVjczIsIHV0ZjgpIFVTSE9SVCB1Y3MyOyBDSEFS ICoqIHV0Zjg7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBzdGF0aWMgQ0hBUiB1dGY4 cmV0dXJuWzhdPXswLDAsMCwwLDAsMCwwLDB9OwotICAgIHJlZ2lzdGVyIENPTlNUIFVMT05HIGJ5 dGVNYXNrID0gMHhCRjsKLSAgICByZWdpc3RlciBDT05TVCBVTE9ORyBieXRlTWFyayA9IDB4ODA7 Ci0gICAgaW50IHV0ZjhsZW4gPSAwOwotICAgIGludCBpID0gMDsKLQotICAgIGlmICh1Y3MyIDwg MHg4MCkgewotICAgICAgICB1dGY4bGVuID0gMTsKLSAgICAgICAgZGVidWcoRjEwMSwidWNzMl90 b191dGY4IFgxIiwiIix1dGY4bGVuKTsKLSAgICB9IGVsc2UgaWYgKHVjczIgPCAweDgwMCkgewot ICAgICAgICB1dGY4bGVuID0gMjsKLSAgICAgICAgZGVidWcoRjEwMSwidWNzMl90b191dGY4IFgy IiwiIix1dGY4bGVuKTsKLSAgICB9IGVsc2UKLSNpZmRlZiBET19VQ1M0Ci0gICAgICAvKiBUaGlz IGlzIGFsd2F5cyB0cnVlIGZvciBVQ1MtMiBidXQgd291bGQgYmUgbmVlZGVkIGZvciBVQ1MtNCov Ci0gICAgICAvKiBXaGVuIHVjczIgaXMgVVNIT1JUIHRoaXMgZ2l2ZXMgY29tcGlsZXIgd2Fybmlu Z3MuICovCi0gICAgICBpZiAodWNzMiA8PSAweGZmZmYpCi0jZW5kaWYgLyogRE9fVUNTNCAqLwot ICAgIHsKLSAgICAgICAgdXRmOGxlbiA9IDM7Ci0gICAgICAgIGRlYnVnKEYxMDEsInVjczJfdG9f dXRmOCBYMyIsIiIsdXRmOGxlbik7Ci0gICAgfQotI2lmZGVmIERPX1VDUzQKLS8qIFRoZSBmb2xs b3dpbmcgd291bGQgYmUgZm9yIFVDUy00ICovCi0gICAgZWxzZSBpZiAodWNzMiA8IDB4MjAwMDAw KSB7Ci0gICAgICAgIHV0ZjhsZW4gPSA0OwotICAgIH0gZWxzZSBpZiAodWNzMiA8IDB4NDAwMDAw MCkgewotICAgICAgICB1dGY4bGVuID0gNTsKLSAgICB9IGVsc2UgaWYgKHVjczIgPD0KLSNpZmRl ZiBDS19BTlNJQwotICAgICAgICAgICAgICAgMHg3RkZGRkZGRlVMICAgICAgICAgICAgIC8qIChk b2Vzbid0IHJlYWxseSBuZWVkIHRoZSAiVSIpICovCi0jZWxzZQotICAgICAgICAgICAgICAgMHg3 RkZGRkZGRkwKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotICAgICAgICAgICAgICAgKSB7ICAgICAg ICAgICAgICAgICAgICAgIC8qIDMxIGJpdHMgPSBtYXggZm9yIFVDUzQgKi8KLSAgICAgICAgdXRm OGxlbiA9IDY7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdXRmOGxlbiA9IDI7Ci0gICAgICAgIHVj czIgPSAweEZGRkQ7ICAgICAgICAgICAgICAgICAgLyogUmVwbGFjZW1lbnQgZm9yIGludmFsaWQg Y2hhciAqLwotICAgIH0KLSNlbmRpZiAvKiBET19VQ1M0ICovCi0gICAgaSA9IHV0ZjhsZW47ICAg ICAgICAgICAgICAgICAgICAgICAgLyogaW5kZXggaW50byB1dGY4cmV0dXJuICovCi0gICAgdXRm OHJldHVybltpLS1dID0gMDsgICAgICAgICAgICAgICAgLyogTnVsbCB0ZXJtaW5hdGUgdGhlIHN0 cmluZyAqLwotCi0gICAgc3dpdGNoICh1dGY4bGVuKSB7ICAgICAgICAgICAgICAgICAgLyogY29k ZSBmYWxscyB0aHJvdWdoIGNhc2VzISAqLwotICAgICAgY2FzZSA2OiB1dGY4cmV0dXJuW2ktLV0g PSAodWNzMiB8IGJ5dGVNYXJrKSAmIGJ5dGVNYXNrOyB1Y3MyID4+PSA2OwotICAgICAgY2FzZSA1 OiB1dGY4cmV0dXJuW2ktLV0gPSAodWNzMiB8IGJ5dGVNYXJrKSAmIGJ5dGVNYXNrOyB1Y3MyID4+ PSA2OwotICAgICAgY2FzZSA0OiB1dGY4cmV0dXJuW2ktLV0gPSAodWNzMiB8IGJ5dGVNYXJrKSAm IGJ5dGVNYXNrOyB1Y3MyID4+PSA2OwotICAgICAgY2FzZSAzOiB1dGY4cmV0dXJuW2ktLV0gPSAo dWNzMiB8IGJ5dGVNYXJrKSAmIGJ5dGVNYXNrOyB1Y3MyID4+PSA2OwotICAgICAgY2FzZSAyOiB1 dGY4cmV0dXJuW2ktLV0gPSAodWNzMiB8IGJ5dGVNYXJrKSAmIGJ5dGVNYXNrOyB1Y3MyID4+PSA2 OwotICAgICAgY2FzZSAxOiB1dGY4cmV0dXJuW2ktLV0gPSAgdWNzMiB8IGZpcnN0Qnl0ZU1hcmtb dXRmOGxlbl07Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsInVjczJfdG9fdXRmOCIsdXRmOHJldHVy bix1dGY4bGVuKTsKLSAgICAqdXRmOCA9IHV0ZjhyZXR1cm47Ci0gICAgcmV0dXJuKHV0ZjhsZW4p OwotfQotCi0vKiAgVVRGLTggZnVuY3Rpb25zLi4uICAqLwotCi0jaWZkZWYgQ0tfQU5TSUMKLWV4 dGVybiBpbnQgKCp4dWYpKFVTSE9SVCk7ICAgICAgICAgICAgICAvKiBUcmFuc2xhdGlvbiBmdW5j dGlvbiBVQ1MgdG8gRkNTICovCi1leHRlcm4gVVNIT1JUICgqeGZ1KShDSEFSKTsgICAgICAgICAg ICAgLyogVHJhbnNsYXRpb24gZnVuY3Rpb24gRkNTIHRvIFVDUyAqLwotI2Vsc2UKLWV4dGVybiBp bnQgKCp4dWYpKCk7Ci1leHRlcm4gVVNIT1JUICgqeGZ1KSgpOwotI2VuZGlmIC8qIENLX0FOU0lD ICovCi0KLS8qICB1IF8gdCBvIF8gYiAgLS0gIFVURi04IHRvIEJ5dGUgICovCi0vKgotICAgIENv bnZlcnRzIGZyb20gVVRGLTggdG8gdGhlIGN1cnJlbnQgdGVybWluYWwgb3IgZmlsZSBjaGFyYWN0 ZXIgc2V0LgotICAgIENhbGwgd2l0aDoKLSAgICAgIGM6IGEgc2luZ2xlIGJ5dGUsIHdoaWNoIGlz IHBhcnQgb2YgYSBVVEYtOCBzdHJlYW0uCi0gICAgUmV0dXJuczoKLSAgICAgLTk6IEVycm9yLCB3 aXRoIHNlY29uZCBjaGFyIHRvIGZvbGxvdyAoY2FsbCB1X3RvX2IyKCkgdG8gZ2V0IGl0KS4KLSAg ICAgLTI6IFVDUyBsaW5lL3BhcmFncmFwaCBlbmQgKExTIG9yIFBTKS4KLSAgICAgLTE6IFVURi04 IHN0cmVhbSBpcyBpbmNvbXBsZXRlIGFuZCBtb3JlIGlucHV0IGlzIHJlcXVpcmVkLgotICAgICA+ PTA6IEJ5dGUgdmFsdWUgb2YgcmVzdWx0LCBwb3NzaWJseSB0aGUgImVycm9yIiBieXRlIChlLmcu ICc/JykuCi0gICAgUmVxdWlyZXM6Ci0gICAgICBHbG9iYWwgKCp4dWYpKCkgdG8gcG9pbnQgdG8g YSBmdW5jdGlvbiB0aGF0IHRyYW5zbGF0ZXMgZnJvbSBVQ1MtMiB0bwotICAgICAgdGhlIGFwcHJv cHJpYXRlIHRlcm0vZmlsZSBjaGFyYWN0ZXIgc2V0LgotKi8KLXN0YXRpYyBpbnQgc2F2ZWRieXRl ID0gMDsKLQotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENhbGwg aWYgdV90b19iKCkgcmV0dXJucyAtOSAqLwotdV90b19iMigpIHsKLSAgICByZXR1cm4oKHVuc2ln bmVkKShzYXZlZGJ5dGUgJiAweGZmKSk7Ci19Ci0KLWludCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBVVEYtOCB0byBieXRlICovCi0jaWZkZWYgQ0tfQU5TSUMKLXVfdG9f YihDSEFSIGMpCi0jZWxzZQotdV90b19iKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAq LwotewotICAgIGludCB4OwotICAgIFVTSE9SVCAqIHVjczIsIHVjOwotICAgIGlmICgheHVmKSAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIG5vIGNvbnZlcnNpb24gZnVuY3Rpb24gKi8K LSAgICAgIHJldHVybihjKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb24ndCBjb252ZXJ0 IChzaG91bGRuJ3QgaGFwcGVuKS4gKi8KLSAgICB4ID0gdXRmOF90b191Y3MyKGMsJnVjczIpOyAg ICAgICAgICAvKiBTZW5kIGZvciBjb252ZXJzaW9uIHRvIFVDUy0yICovCi0gICAgaWYgKHggPiAw KSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IGRvbmUgeWV0Li4uICovCi0gICAgICBy ZXR1cm4oLTEpOwotICAgIHVjID0gKHggPCAwKSA/IDB4ZmZmZCA6ICp1Y3MyOyAgICAgIC8qIERv bmUsIGNoZWNrIHJlc3VsdCAqLwotICAgIGlmICh1YyA9PSAweDIwMjggfHwgdWMgPT0gMHgyMDI5 KSAgIC8qIExTIG9yIFBTICovCi0gICAgICByZXR1cm4oLTIpOwotICAgIHJldHVybigodW5zaWdu ZWQpKCgoKnh1ZikodWMpKSAmIDB4ZmYpKTsgLyogQ29udmVydCBVQ1MtMiB0byBieXRlICovCi19 Ci0KLS8qICBiIF8gdCBvIF8gdSAgLS0gIEJ5dGUgdG8gVVRGLTggICovCi0vKgotICBDb252ZXJ0 cyBhIGJ5dGUgZnJvbSB0aGUgY3VycmVudCB0ZXJtaW5hbCBvciBmaWxlIGNoYXJhY3RlciBzZXQg dG8gVVRGLTguCi0gIENhbGwgd2l0aDoKLSAgICBjLi4uLi4uLi4gVGhlIGJ5dGUgdG8gYmUgY29u dmVydGVkLgotICAgIGJ1Zi4uLi4uLiBQb2ludGVyIHRvIGJ1ZmZlciBpbiB3aGljaCB0byBwbGFj ZSB0aGUgcmVzdWx0LgotICAgIGJ1Zmxlbi4uLiBMZW5ndGggb2YgdGhlIHJlc3VsdCBidWZmZXIu Ci0gICAgc2V0c2l6ZS4uIFRoZSBzaXplIG9mIHRoZSBzb3VyY2UgY2hhcmFjdGVyIHNldCAoMTI4 IG9yIDI1NikuCi0gIFJlcXVpcmVzOgotICAgIEdsb2JhbCAoKnhmdSkoKSB0byBwb2ludCB0byB0 aGUgZnVuY3Rpb24gdG8gY29udmVydCB0aGUgYnl0ZSB0byBVQ1MtMi4KLSAgUmV0dXJuczoKLSAg ICAtMSBpZiB0aGUgeGZ1IGlzIE5VTEw7IG90aGVyd2lzZToKLSAgICA+MCBpbmRpY2F0aW5nIHRo ZSBsZW5ndGggKGluIGJ5dGVzKSBvZiB0aGUgVVRGLTggc3RyaW5nLgotICBJZiB0aGUgdHJhbnNs YXRpb24gZmFpbHMsIHRoZSBVbmljb2RlICJSZXBsYWNlbWVudCBDaGFyYWN0ZXIiIGlzIHJldHVy bmVkCi0gICgweEZGRkQgdHJhbnNsYXRlZCB0byBVVEYtOCA9PSAweEZGQkQpLgotKi8KLWludCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCeXRlIHRvIFVURi04ICovCi0j aWZkZWYgQ0tfQU5TSUMKLWJfdG9fdShDSEFSIGMsIENIQVIgKiBidWYsIGludCBidWZsZW4sIGlu dCBzZXRzaXplKQotI2Vsc2UKLWJfdG9fdShjLCBidWYsIGJ1Zmxlbiwgc2V0c2l6ZSkgQ0hBUiBj LCAqIGJ1ZjsgaW50IGJ1Zmxlbiwgc2V0c2l6ZTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewot ICAgIENIQVIgKiB0bXAgPSBOVUxMOwotICAgIGludCBpLCBjb3VudCA9IDA7Ci0gICAgVVNIT1JU IHVjOwotICAgIGlmICgheGZ1KSB7Ci0gICAgICAgIGRlYnVnKEYxMDAsImJfdG9fdSBubyB4ZnUi LCIiLDApOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICB1YyA9IGM7Ci0gICAgaWYg KCgoc2V0c2l6ZSA+IDEyOCkgJiYgKGMgJiAweDgwKSkgfHwgc2V0c2l6ZSA8PSAxMjgpIHsKLSAg ICAgICAgaWYgKHhmdSkgICAgICAgICAgICAgICAgICAgICAgICAvKiBGQ1MtdG8tVUNTIGZ1bmN0 aW9uICovCi0gICAgICAgICAgdWMgPSAoKnhmdSkoYyk7Ci0gICAgfQotICAgIGNvdW50ID0gdWNz Ml90b191dGY4KHVjLCZ0bXApOwotICAgIGlmIChjb3VudCA8IDApIHsKLSAgICAgICAgYnVmWzBd ID0gMHhlZjsgICAgICAgICAgICAgICAgICAvKiA9PSAweEZGRkQgaW4gVVRGLTggKi8KLSAgICAg ICAgYnVmWzFdID0gMHhiZjsKLSAgICAgICAgYnVmWzJdID0gMHhiZDsKLSAgICAgICAgYnVmWzNd ID0gJ1wwJzsKLSAgICAgICAgcmV0dXJuKDIpOwotICAgIH0KLSAgICBpZiAoY291bnQgPj0gYnVm bGVuKSB7Ci0gICAgICAgIGRlYnVnKEYxMDEsIldBUk5JTkc6IFVURjggYnVmZmVyIG92ZXJmbG93 IiwiIixjb3VudCk7Ci0gICAgICAgIGNvdW50ID0gYnVmbGVuIC0gMTsKLSAgICB9Ci0gICAgZm9y IChpID0gMDsgaSA8IGNvdW50OyBpKyspICAgICAgICAgLyogQ29weSB0byByZXN1bHQgYnVmZmVy ICovCi0gICAgICBidWZbaV0gPSB0bXBbaV07Ci0gICAgYnVmW2ldID0gJ1wwJzsKLSAgICByZXR1 cm4oY291bnQpOwotfQotCi0jaWZuZGVmIE9TMgotaW50Ci1pc3VuaWNvZGUoICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogVGVsbHMgd2hldGhlciB0aGUgaG9zdCB3ZSBhcmUgKi8KLSNp ZmRlZiBDS19BTlNJQyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBydW5uaW5nIG9uIHN1cHBv cnRzIFVuaWNvZGUgKi8KLSAgICAgICAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBkaXNwbGF5ICovCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSAgICAgICAgICApIHsKLSNpZmRl ZiBOVAotICAgIGV4dGVybiBpbnQgdHRfdW5pY29kZTsKLSNpZmRlZiBLVUkKLSAgICByZXR1cm4o dHRfdW5pY29kZSk7Ci0jZWxzZSAvKiBLVUkgKi8KLSAgICBpZiAodHRfdW5pY29kZSAmJiAhaXNX aW45NSgpKQotICAgICAgcmV0dXJuKDEpOwotICAgIGVsc2UKLSAgICAgIHJldHVybigwKTsKLSNl bmRpZiAvKiBLVUkgKi8KLSNlbHNlIC8qIE5UICovCi0gICAgcmV0dXJuKDApOwotI2VuZGlmIC8q IE5UICovCi19Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogVU5JQ09ERSAqLwoKZGlmZiAt LWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjdW5pLmggYi9j a2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3VuaS5oCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwNmRmZjliLi4wMDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4wLjMw Mi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjdW5pLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNjgg KzAsMCBAQAotLyogIEMgSyBDIFUgTiBJIC4gSCAgLS0gIFVuaWNvZGUvVGVybWluYWwgY2hhcmFj dGVyLXNldCB0cmFuc2xhdGlvbnMgICovCi0KLS8qCi0gIENvcHlyaWdodCAoQykgMTk5OSwgMjAw OSwKLSAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5l dyBZb3JrLgotICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJ TkcuVFhUIGZpbGUgb3IgdGhlCi0gICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1v ZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCi0KLSAgQXV0aG9yczoKLSAgICBG cmFuayBkYSBDcnV6IDxmZGNAY29sdW1iaWEuZWR1PgotICAgICAgVGhlIEtlcm1pdCBQcm9qZWN0 LCBDb2x1bWJpYSBVbml2ZXJzaXR5LCBOZXcgWW9yayBDaXR5LgotICAgIEplZmZyZXkgRSBBbHRt YW4gPGphbHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20+Ci0gICAgICBTZWN1cmUgRW5kcG9pbnRz IEluYy4sIE5ldyBZb3JrIENpdHkKLQotKi8KLQotLyogVGVybWluYWwgY2hhcmFjdGVyIHNldHMg Ki8KLQotI2lmbmRlZiBDS09VTklfSAotI2RlZmluZSBDS09VTklfSAotI2lmZGVmIE9TMgotI2lm bmRlZiBDS09VTkkKLSNkZWZpbmUgQ0tPVU5JICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBV c2UgVU5JQ09ERSBmb3IgT1MvMiBmdW5jdGlvbnMgKi8KLSNlbmRpZiAvKiBDS09VTkkgKi8KLSNp ZmRlZiBLVUkKLSNkZWZpbmUgWF9DS09VTklfSU4gICAgICAgICAgICAgICAgICAgICAvKiBVc2Ug VW5pY29kZSBJbnB1dCAqLwotI2RlZmluZSBDS09VTklfT1VUCi0jZW5kaWYgLyogS1VJICovCi0j ZW5kaWYgLyogT1MyICovCi0KLS8qIFRlcm1pbmFsIENoYXJhY3RlciBTZXRzICovCi0KLSNkZWZp bmUgVFhfQVNDSUkgICAgICAgIDAgICAgICAgICAgICAgICAvKiBVUyBBU0NJSSAqLwotI2RlZmlu ZSBUWF9CUklUSVNIICAgICAgMSAgICAgICAgICAgICAgIC8qIEJyaXRpc2ggSVNPIDY0NiAqLwot I2RlZmluZSBUWF9DTl9GUkVOQ0ggICAgMiAgICAgICAgICAgICAgIC8qIENhbmFkaWFuIEZyZW5j aCBOUkMgKi8KLSNkZWZpbmUgVFhfQ1VCQU4gICAgICAgIDMgICAgICAgICAgICAgICAvKiBDdWJh ICovCi0jZGVmaW5lIFRYX0NaRUNIICAgICAgICA0ICAgICAgICAgICAgICAgLyogQ3plY2ggUmVw dWJsaWMgKi8KLSNkZWZpbmUgVFhfREFOSVNIICAgICAgIDUgICAgICAgICAgICAgICAvKiBEZW5t YXJrIC8gTm9yd2F5IElTTyA2NDYgKi8KLSNkZWZpbmUgVFhfRFVUQ0ggICAgICAgIDYgICAgICAg ICAgICAgICAvKiBEdXRjaCBOUkMgKi8KLSNkZWZpbmUgVFhfRklOTklTSCAgICAgIDcgICAgICAg ICAgICAgICAvKiBGaW5uaXNoIE5SQyAqLwotI2RlZmluZSBUWF9GUkVOQ0ggICAgICAgOCAgICAg ICAgICAgICAgIC8qIEZyZW5jaCBJU08gNjQ2ICovCi0jZGVmaW5lIFRYX0dFUk1BTiAgICAgICA5 ICAgICAgICAgICAgICAgLyogR2VybWFuIElTTyA2NDYgKi8KLSNkZWZpbmUgVFhfSEU3ICAgICAg ICAgMTAgICAgICAgICAgICAgICAvKiBIZWJyZXcgNyAoREVDKSAqLwotI2RlZmluZSBUWF9IVU5H QVJJQU4gICAxMSAgICAgICAgICAgICAgIC8qIEh1bmdhcmlhbiBJU08gNjQ2ICovCi0jZGVmaW5l IFRYX0lDRUxBTkRJQyAgIDEyICAgICAgICAgICAgICAgLyogSWNlbGFuZGljIE5SQyAqLwotI2Rl ZmluZSBUWF9JVEFMSUFOICAgICAxMyAgICAgICAgICAgICAgIC8qIEl0YWxpYW4gSVNPIDY0NiAq LwotI2RlZmluZSBUWF9KMjAxUiAgICAgICAxNCAgICAgICAgICAgICAgIC8qIEpJUyAwMjAxIEph cGFuZXNlIFJvbWFuICovCi0jZGVmaW5lIFRYX0oyMDFLICAgICAgIDE1ICAgICAgICAgICAgICAg LyogSklTIDAyMDEgS2F0YWthbmEgKi8KLSNkZWZpbmUgVFhfS09JNyAgICAgICAgMTYgICAgICAg ICAgICAgICAvKiBTaG9ydCBLT0kgKi8KLSNkZWZpbmUgVFhfTk9SV0VHSUFOICAgMTcgICAgICAg ICAgICAgICAvKiBEZW5tYXJrIC8gTm9yd2F5IElTTyA2NDYgKi8KLSNkZWZpbmUgVFhfUE9SVFVH VUVTRSAgMTggICAgICAgICAgICAgICAvKiBQb3J0dWd1ZXNlIElTTyA2NDYgKi8KLSNkZWZpbmUg VFhfU1BBTklTSCAgICAgMTkgICAgICAgICAgICAgICAvKiBTcGFuaXNoIElTTyA2NDYgKi8KLSNk ZWZpbmUgVFhfU1dFRElTSCAgICAgMjAgICAgICAgICAgICAgICAvKiBTd2VkaXNoIElTTyA2NDYg Ki8KLSNkZWZpbmUgVFhfU1dFXzIgICAgICAgMjEgICAgICAgICAgICAgICAvKiBTd2VkaXNoIGZv ciBuYW1lcyBJU08gNjQ2ICovCi0jZGVmaW5lIFRYX1NXSVNTICAgICAgIDIyICAgICAgICAgICAg ICAgLyogU3dpc3MgTlJDICovCi0jZGVmaW5lIFRYXzg4NTlfMSAgICAgIDIzICAgICAgICAgICAg ICAgLyogTGF0aW4tMSAqLwotI2RlZmluZSBUWF84ODU5XzIgICAgICAyNCAgICAgICAgICAgICAg IC8qIExhdGluLTIgKi8KLSNkZWZpbmUgVFhfODg1OV8zICAgICAgMjUgICAgICAgICAgICAgICAv KiBMYXRpbi0zICovCi0jZGVmaW5lIFRYXzg4NTlfNCAgICAgIDI2ICAgICAgICAgICAgICAgLyog TGF0aW4tNCAqLwotI2RlZmluZSBUWF84ODU5XzUgICAgICAyNyAgICAgICAgICAgICAgIC8qIExh dGluL0N5cmlsbGljICovCi0jZGVmaW5lIFRYXzg4NTlfNiAgICAgIDI4ICAgICAgICAgICAgICAg LyogTGF0aW4vQXJhYmljICovCi0jZGVmaW5lIFRYXzg4NTlfNyAgICAgIDI5ICAgICAgICAgICAg ICAgLyogTGF0aW4vR3JlZWsgKi8KLSNkZWZpbmUgVFhfODg1OV84ICAgICAgMzAgICAgICAgICAg ICAgICAvKiBMYXRpbi9IZWJyZXcgKi8KLSNkZWZpbmUgVFhfODg1OV85ICAgICAgMzEgICAgICAg ICAgICAgICAvKiBMYXRpbi01ICovCi0jZGVmaW5lIFRYXzg4NTlfMTAgICAgIDMyICAgICAgICAg ICAgICAgLyogTGF0aW4tNiAqLwotCi0jZGVmaW5lIFRYX0tPSTggICAgICAgIDMzICAgICAgICAg ICAgICAgLyogR09TVCAxOTc2OC03NCBLT0ktOCAqLwotCi0jZGVmaW5lIFRYX0pJUzcgICAgICAg IDM0ICAgICAgICAgICAgICAgLyogSklTLTcgKi8KLSNkZWZpbmUgVFhfU0hKSVMgICAgICAgMzUg ICAgICAgICAgICAgICAvKiBTaGlmdCBKSVMgKi8KLSNkZWZpbmUgVFhfSkVVQyAgICAgICAgMzYg ICAgICAgICAgICAgICAvKiBKYXBhbmVzZSBFVUMgKi8KLSNkZWZpbmUgVFhfSkRFQyAgICAgICAg MzcgICAgICAgICAgICAgICAvKiBKYXBhbmVzZSBERUMgS2FuamkgKi8KLQotI2RlZmluZSBUWF9E RUNNQ1MgICAgICAzOCAgICAgICAgICAgICAgIC8qIERFQyBNQ1MgKi8KLSNkZWZpbmUgVFhfTkVY VCAgICAgICAgMzkgICAgICAgICAgICAgICAvKiBOZVhUICovCi0jZGVmaW5lIFRYX0RHSSAgICAg ICAgIDQwICAgICAgICAgICAgICAgLyogRGF0YSBHZW5lcmFsIEludGVybmF0aW9uYWwgKi8KLSNk ZWZpbmUgVFhfTUFDTDEgICAgICAgNDEgICAgICAgICAgICAgICAvKiBNYWNpbnRvc2ggTGF0aW4t MSAqLwotI2RlZmluZSBUWF9IUFI4ICAgICAgICA0MiAgICAgICAgICAgICAgIC8qIEhQIFJvbWFu IDggKi8KLQotLyogQ29kZSBwYWdlcyAqLwotCi0jZGVmaW5lIFRYX0NQNDM3ICAgICAgIDQzICAg ICAgICAgICAgICAgLyogT3JpZ2luYWwgKi8KLSNkZWZpbmUgVFhfQ1A4NTAgICAgICAgNDQgICAg ICAgICAgICAgICAvKiBNdWx0aW5hdGlvbmFsIChXZXN0ZXJuIEV1cm9wZSkgKi8KLSNkZWZpbmUg VFhfQ1A4NTIgICAgICAgNDUgICAgICAgICAgICAgICAvKiBFYXN0ZXJuIEV1cm9wZSAqLwotI2Rl ZmluZSBUWF9DUDg1NyAgICAgICA0NiAgICAgICAgICAgICAgIC8qIFR1cmtleSAqLwotI2RlZmlu ZSBUWF9DUDg2MiAgICAgICA0NyAgICAgICAgICAgICAgIC8qIEhlYnJldyAqLwotI2RlZmluZSBU WF9DUDg2NCAgICAgICA0OCAgICAgICAgICAgICAgIC8qIEFyYWJpYyAqLwotI2RlZmluZSBUWF9D UDg2NiAgICAgICA0OSAgICAgICAgICAgICAgIC8qIEN5cmlsbGljICovCi0jZGVmaW5lIFRYX0NQ ODY5ICAgICAgIDUwICAgICAgICAgICAgICAgLyogR3JlZWsgKi8KLQotI2RlZmluZSBUWF9ERUNT UEVDICAgICA1MSAgICAgICAgICAgICAgIC8qIERFQyBTcGVjaWFsIEdyYXBoaWNzICovCi0jZGVm aW5lIFRYX0RFQ1RFQ0ggICAgIDUyICAgICAgICAgICAgICAgLyogREVDIFRlY2huaWNhbCAqLwot I2RlZmluZSBUWF9DMFBJQ1QgICAgICA1MyAgICAgICAgICAgICAgIC8qIEMwIERpc3BsYXkgQ29u dHJvbHMgKi8KLSNkZWZpbmUgVFhfQzFQSUNUICAgICAgNTQgICAgICAgICAgICAgICAvKiBDMSBE aXNwbGF5IENvbnRyb2xzICovCi0jZGVmaW5lIFRYX0lCTUMwR1JQSCAgIDU1ICAgICAgICAgICAg ICAgLyogSUJNIEMwIEdyYXBoaWNzIChzbWlsZXlzKSAqLwotI2RlZmluZSBUWF9IMTlHUkFQSCAg ICA1NiAgICAgICAgICAgICAgIC8qIEhlYXRoL1plbml0aCAxOSBHcmFwaGljcyAqLwotI2RlZmlu ZSBUWF9UVklHUkFQSCAgICA1NyAgICAgICAgICAgICAgIC8qIFRlbGV2aWRlbyBHcmFwaGljcyAq LwotI2RlZmluZSBUWF9XWVNFNjBHX04gICA1OCAgICAgICAgICAgICAgIC8qIFd5c2UgNjAgTmF0 aXZlIE1vZGUgR3JhcGhpY3MgKi8KLSNkZWZpbmUgVFhfV1lTRTYwR18xICAgNTkgICAgICAgICAg ICAgICAvKiBXeXNlIDYwIEdyYXBoaWNzIDEgKi8KLSNkZWZpbmUgVFhfV1lTRTYwR18yICAgNjAg ICAgICAgICAgICAgICAvKiBXeXNlIDYwIEdyYXBoaWNzIDIgKi8KLSNkZWZpbmUgVFhfV1lTRTYw R18zICAgNjEgICAgICAgICAgICAgICAvKiBXeXNlIDYwIEdyYXBoaWNzIDMgKi8KLQotLyogTmV3 IG9uZXMgdGhhdCBjYW1lIHRvbyBsYXRlIGZvciB0aGUgbmljZSBncm91cGluZy4uLiAqLwotCi0j ZGVmaW5lIFRYX0VMT1Q5MjcgICAgIDYyICAgICAgICAgICAgICAgLyogR3JlZWsgRUxPVCA5Mjcg Ki8KLSNkZWZpbmUgVFhfREdQQ0dSUEggICAgNjMgICAgICAgICAgICAgICAvKiBERyBQQyBHcmFw aGljcyAqLwotI2RlZmluZSBUWF9ER0xER1JQSCAgICA2NCAgICAgICAgICAgICAgIC8qIERHIExp bmUgRHJhd2luZyBHcmFwaGljcyAqLwotI2RlZmluZSBUWF9ER1dQR1JQSCAgICA2NSAgICAgICAg ICAgICAgIC8qIERHIFdvcmQgUHJvY2Vzc2luZyAoZXRjKSBHcmFwaGljcyAqLwotI2RlZmluZSBU WF9IUExJTkUgICAgICA2NiAgICAgICAgICAgICAgIC8qIEhQIExpbmUgRHJhd2luZyAqLwotI2Rl ZmluZSBUWF9IUE1BVEggICAgICA2NyAgICAgICAgICAgICAgIC8qIEhQIE1hdGgvVGVjaG5pY2Fs ICovCi0jZGVmaW5lIFRYX1FOWEdSUEggICAgIDY4ICAgICAgICAgICAgICAgLyogUU5YIEdyYXBo aWNzICovCi0KLS8qIFNpZW1lbnMgTml4ZG9yZiBjaGFyYWN0ZXIgc2V0cyAqLwotCi0jZGVmaW5l IFRYX1NOSUJSQUNLICAgIDY5ICAgICAgICAgICAgICAgLyogU05JIDk3ODAxIEJyYWNrZXRzICov Ci0jZGVmaW5lIFRYX1NOSUVVUk8gICAgIDcwICAgICAgICAgICAgICAgLyogU05JIDk3ODAxIEV1 cm8gICovCi0jZGVmaW5lIFRYX1NOSUZBQ0VUICAgIDcxICAgICAgICAgICAgICAgLyogU05JIDk3 ODAxIEZhY2V0ICovCi0jZGVmaW5lIFRYX1NOSUlCTSAgICAgIDcyICAgICAgICAgICAgICAgLyog U05JIDk3ODAxICJJQk0iICovCi0jZGVmaW5lIFRYX1NOSUJMQU5LICAgIDczICAgICAgICAgICAg ICAgLyogU05JIDk3ODAxIEJsYW5rcyAqLwotCi0vKiBXaW5kb3dzIENvZGUgcGFnZXMgKi8KLQot I2RlZmluZSBUWF9DUDEyNTIgICAgICA3NCAgICAgICAgICAgICAgIC8qIExhdGluLTEgV2luZG93 cyAqLwotI2RlZmluZSBUWF9DUDEyNTAgICAgICA3NSAgICAgICAgICAgICAgIC8qIExhdGluLTIg V2luZG93cyAqLwotI2RlZmluZSBUWF9DUDEyNTEgICAgICA3NiAgICAgICAgICAgICAgIC8qIEN5 cmlsbGljIFdpbmRvd3MgKi8KLSNkZWZpbmUgVFhfQ1AxMjUzICAgICAgNzcgICAgICAgICAgICAg ICAvKiBHcmVlY2UgV2luZG93cyAqLwotI2RlZmluZSBUWF9DUDEyNTQgICAgICA3OCAgICAgICAg ICAgICAgIC8qIFR1cmtleSBXaW5kb3dzICovCi0jZGVmaW5lIFRYX0NQMTI1NyAgICAgIDc5ICAg ICAgICAgICAgICAgLyogTGF0aW4tNCBXaW5kb3dzICovCi0KLSNkZWZpbmUgVFhfQ1A4NTYgICAg ICAgODAgICAgICAgICAgICAgICAvKiBCdWxnYXJpYSBDUDg1NiAoREFURUNTIEx0ZCkgKi8KLSNk ZWZpbmUgVFhfQ1A4NTUgICAgICAgODEKLSNkZWZpbmUgVFhfQ1A4MTkgICAgICAgODIgICAgICAg ICAgICAgICAvKiBTYW1lIGFzIElTTyA4ODU5LTEgKi8KLSNkZWZpbmUgVFhfQ1A5MTIgICAgICAg ODMgICAgICAgICAgICAgICAvKiBTYW1lIGFzIElTTyA4ODU5LTIgKi8KLSNkZWZpbmUgVFhfQ1A5 MTMgICAgICAgODQgICAgICAgICAgICAgICAvKiBTYW1lIGFzIElTTyA4ODU5LTMgKi8KLSNkZWZp bmUgVFhfQ1A5MTQgICAgICAgODUgICAgICAgICAgICAgICAvKiBTYW1lIGFzIElTTyA4ODU5LTQg Ki8KLSNkZWZpbmUgVFhfQ1A5MTUgICAgICAgODYgICAgICAgICAgICAgICAvKiBTYW1lIGFzIElT TyA4ODU5LTUgKi8KLSNkZWZpbmUgVFhfQ1AxMDg5ICAgICAgODcgICAgICAgICAgICAgICAvKiBT YW1lIGFzIElTTyA4ODU5LTYgKi8KLSNkZWZpbmUgVFhfQ1A4MTMgICAgICAgODggICAgICAgICAg ICAgICAvKiBTYW1lIGFzIElTTyA4ODU5LTcgKi8KLSNkZWZpbmUgVFhfQ1A5MTYgICAgICAgODkg ICAgICAgICAgICAgICAvKiBTYW1lIGFzIElTTyA4ODU5LTggKi8KLSNkZWZpbmUgVFhfQ1A5MjAg ICAgICAgOTAgICAgICAgICAgICAgICAvKiBTYW1lIGFzIElTTyA4ODU5LTkgKi8KLSNkZWZpbmUg VFhfQ1AxMDUxICAgICAgOTEgICAgICAgICAgICAgICAvKiBTYW1lIGFzIEhQIFJvbWFuIDggKi8K LSNkZWZpbmUgVFhfQ1A4NTggICAgICAgOTIgICAgICAgICAgICAgICAvKiBNdWx0aW5hdGlvbmFs IChXLiBFdXJvcGUpIHcvRXVybyAqLwotI2RlZmluZSBUWF84ODU5XzE1ICAgICA5MyAgICAgICAg ICAgICAgIC8qIExhdGluLTkgKi8KLSNkZWZpbmUgVFhfQ1A5MjMgICAgICAgOTQgICAgICAgICAg ICAgICAvKiBTYW1lIGFzIElTTyA4ODU5LTE1ICovCi0KLSNkZWZpbmUgVFhfRUxPVDkyOCAgICAg OTUgICAgICAgICAgICAgICAvKiBTYW1lIGFzIElTTyA4ODU5LTcgKi8KLSNkZWZpbmUgVFhfQ1Ax MDAwMCAgICAgOTYgICAgICAgICAgICAgICAvKiBTYW1lIGFzIG9yaWdpbmFsIEFwcGxlIFF1aWNr ZHJhdyAqLwotI2RlZmluZSBUWF9DUDM3ICAgICAgICA5NyAgICAgICAgICAgICAgIC8qIEVCQ0RJ QyAqLwotI2RlZmluZSBUWF9DUDEyNTUgICAgICA5OCAgICAgICAgICAgICAgIC8qIElzcmFlbCBX aW5kb3dzICovCi0jZGVmaW5lIFRYX0NQMTI1NiAgICAgIDk5ICAgICAgICAgICAgICAgLyogQXJh YmljIFdpbmRvd3MgKi8KLSNkZWZpbmUgVFhfQ1AxMjU4ICAgICAxMDAgICAgICAgICAgICAgICAv KiBWaWV0IE5hbSBXaW5kb3dzICovCi0jZGVmaW5lIFRYX01BWk9WSUEgICAgMTAxCi0jZGVmaW5l IFRYX1RSQU5TUCAgICAgMTAyICAgICAgICAgICAgICAgLyogVHJhbnNwYXJlbnQgLSBubyB0cmFu c2xhdGlvbiAqLwotI2RlZmluZSBUWF9IWjE1MDAgICAgIDEwMyAgICAgICAgICAgICAgIC8qIEhh emVsdGluZSAxNTAwIGdyYXBoaWNzIHNldCAqLwotI2RlZmluZSBUWF9LT0k4UiAgICAgIDEwNCAg ICAgICAgICAgICAgIC8qIEtPSThSIC0gUnVzc2lhbiAqLwotI2RlZmluZSBUWF9LT0k4VSAgICAg IDEwNSAgICAgICAgICAgICAgIC8qIEtPSThVIC0gVWtyYWluaWFuICovCi0jZGVmaW5lIFRYX0FQ TDEgICAgICAgMTA2ICAgICAgICAgICAgICAgLyogQVBMIElTTyBJUiA2OCAqLwotI2RlZmluZSBU WF9BUEwyICAgICAgIDEwNyAgICAgICAgICAgICAgIC8qIER5YWRpYyBTeXN0ZW1zIEluYyBBUEwg Ki8KLSNkZWZpbmUgVFhfQVBMMyAgICAgICAxMDggICAgICAgICAgICAgICAvKiBBUEwtUGx1cyAo QVBMLTIwMDApICovCi0jZGVmaW5lIFRYX0FQTDQgICAgICAgMTA5ICAgICAgICAgICAgICAgLyog SUJNIEFQTC8yICovCi0jZGVmaW5lIFRYX0FQTDUgICAgICAgMTEwICAgICAgICAgICAgICAgLyog QVBMLTI3NDEgKi8KLQotI2RlZmluZSBNQVhUWFNFVFMgICAgIDExMSAgICAgICAgICAgICAgIC8q IE51bWJlciBvZiB0ZXJtaW5hbCBjaGFyYWN0ZXIgc2V0cyAqLwotCi0vKiBUaGUgZm9sbG93aW5n IGFyZSBub3QgaW1wbGVtZW50ZWQgeWV0ICovCi0vKiBVVEYtOCBpcyBzdXBwb3J0ZWQgYXMgYSBz cGVjaWFsIG1vZGUgaW4gS2VybWl0IDk1IChzZWUgdXRmOCBmbGFnKSAqLwotCi0jZGVmaW5lIFRY X1VURjcgICAgICAgMTI4Ci0jZGVmaW5lIFRYX1VURjggICAgICAgMTI5Ci0KLSNkZWZpbmUgVFhf SEVYQllURVMgICAyNDIgICAgICAgICAgICAgICAvKiBIZXggYnl0ZXMgKi8KLSNkZWZpbmUgVFhf REVCVUcgICAgICAyNDMgICAgICAgICAgICAgICAvKiBEZWJ1Z2dpbmcgYnV0IG5vdCBoZXggYnl0 ZXMgKi8KLQotLyogVGhlc2UgYXJlIGFjdHVhbGx5IHVzZWQgKi8KLQotI2RlZmluZSBUWF9VTkRF RiAgICAgIDI1NSAgICAgICAgICAgICAgIC8qIFVua25vd24gY2hhcmFjdGVyLXNldCAqLwotCi0v KiBGbGFnIGJpdCB2YWx1ZXMgKi8KLQotI2RlZmluZSBYMlVfU1REICAgMSAgICAgICAgICAgICAg ICAgICAgIC8qIEhhcyBzdGFuZGFyZCBJU08gNDg3MyBsYXlvdXQgKi8KLSNkZWZpbmUgWDJVX0lT TyAgIDIgICAgICAgICAgICAgICAgICAgICAvKiBJU08gc3RhbmRhcmQgY2hhcmFjdGVyIHNldCAq LwotI2RlZmluZSBYMlVfSklTICAgNCAgICAgICAgICAgICAgICAgICAgIC8qIEphcGFuIEluZHVz dHJpYWwgU3RhbmRhcmQgKi8KLSNkZWZpbmUgWDJVX0NQICAgIDggICAgICAgICAgICAgICAgICAg ICAvKiBQQyBDb2RlIFBhZ2UgKi8KLSNkZWZpbmUgWDJVX0RFQyAgMTYgICAgICAgICAgICAgICAg ICAgICAvKiBERUMgUHJpdmF0ZSBjaGFyYWN0ZXIgc2V0ICovCi0jZGVmaW5lIFgyVV9DWEcgIDMy ICAgICAgICAgICAgICAgICAgICAgLyogQ29udHJvbCBjb2RlcyB1c2VkIGZvciBncmFwaGljcyAq LwotCi1zdHJ1Y3QgeF90b191bmljb2RlIHsKLSAgICBpbnQgc2l6ZTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiA5NCwgOTYsIDEyOCwgb3Igb3RoZXIgKi8KLSAgICBpbnQgb2Zmc2V0OyAg ICAgICAgICAgICAgICAgICAgICAgICAvKiAwLCAzMiwgMzMsIDEyOCwgMTYwLCAuLi4gKi8KLSAg ICBpbnQgZmxhZ3M7Ci0gICAgaW50IGZhbWlseTsgICAgICAgICAgICAgICAgICAgICAgICAgLyog TGFuZ3VhZ2UgZmFtaWx5LCB3cml0aW5nIHN5c3RlbSAqLwotICAgIGNoYXIgKiBrZXl3ZDsgICAg ICAgICAgICAgICAgICAgICAgIC8qIEtleXdvcmQgbmFtZSAqLwotICAgIGNoYXIgKiBuYW1lOyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIERlc2NyaXB0aXZlIG5hbWUgKi8KLSAgICBpbnQgY29k ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJU08gcmVnIG51bWJlciBpZiBTdGFuZGFy ZCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENQIG51bWJl ciBpZiBDb2RlLXBhZ2UsIGV0Yy4gKi8KLSAgICBjaGFyICogZmluYWw7ICAgICAgICAgICAgICAg ICAgICAgICAvKiBFc2Mgc2VxIGZpbmFsIGNoYXIocykgKElTTywgREVDKSAqLwotICAgIHVuc2ln bmVkIHNob3J0IG1hcFsyNTZdOyAgICAgICAgICAgIC8qIE1hcHBpbmcgdGFibGUgKi8KLX07Ci0K LWV4dGVybiBzdHJ1Y3Qga2V5dGFiIHR4cnRhYltdOwotZXh0ZXJuIGludCBudHhydGFiOwotCi0j aWZuZGVmIE5VTEwKLSNkZWZpbmUgTlVMTCAoY2hhciAqKTAKLSNlbmRpZiAvKiBOVUxMICovCi0K LSNpZm5kZWYgVVNIT1JUCi0jZGVmaW5lIFVTSE9SVCB1bnNpZ25lZCBzaG9ydAotI2VuZGlmIC8q IFVTSE9SVCAqLwotCi0jaWZuZGVmIFVMT05HCi0jZGVmaW5lIFVMT05HIHVuc2lnbmVkIGxvbmcK LSNlbmRpZiAvKiBVTE9ORyAqLwotCi0jaWZuZGVmIENIQVIKLSNkZWZpbmUgQ0hBUiB1bnNpZ25l ZCBjaGFyCi0jZW5kaWYgLyogQ0hBUiAqLwotCi0jaWZkZWYgQ0tfQU5TSUMKLWV4dGVybiBVU0hP UlQgKCp4bF91W01BWFRYU0VUUysxXSkoQ0hBUik7IC8qIEJsYWgtdG8tVW5pY29kZSBmdW5jdGlv bnMgKi8KLWV4dGVybiBpbnQgKCp4bF90eFtNQVhUWFNFVFMrMV0pKFVTSE9SVCk7IC8qIFVuaWNv ZGUtdG8tQmxhaCBmdW5jdGlvbnMgKi8KLSNlbHNlCi1leHRlcm4gVVNIT1JUICgqeGxfdVtNQVhU WFNFVFMrMV0pKCk7Ci1leHRlcm4gaW50ICgqeGxfdHhbTUFYVFhTRVRTKzFdKSgpOwotI2VuZGlm IC8qIENLX0FOU0lDICovCi1leHRlcm4gc3RydWN0IHhfdG9fdW5pY29kZSAqIHR4cmluZm9bTUFY VFhTRVRTKzFdOwotCi1fUFJPVE9UWVAoaW50IGlzdW5pY29kZSwgKHZvaWQpKTsKLV9QUk9UT1RZ UChpbnQgdXRmOF90b191Y3MyLCAoQ0hBUiwgVVNIT1JUICoqKSk7Ci1fUFJPVE9UWVAoaW50IHVj czJfdG9fdXRmOCwgKFVTSE9SVCwgQ0hBUiAqKikpOwotX1BST1RPVFlQKGludCB0eF9jcHN1Yiwg KFVTSE9SVCkpOwotX1BST1RPVFlQKGludCB1X3RvX2IsIChDSEFSKSApOwotX1BST1RPVFlQKGlu dCB1X3RvX2IyLCAodm9pZCkgKTsKLV9QUk9UT1RZUChpbnQgYl90b191LCAoQ0hBUiwgQ0hBUiAq LCBpbnQsIGludCkgKTsKLQotI2lmZGVmIEtBTkpJCi1fUFJPVE9UWVAoVVNIT1JUIHNqX3RvX3Vu LCAoVVNIT1JUKSApOyAgLyogU2hpZnQtSklTIHRvIFVuaWNvZGUgKi8KLV9QUk9UT1RZUChVU0hP UlQgdW5fdG9fc2osIChVU0hPUlQpICk7ICAvKiBVbmljb2RlIHRvIFNoaWZ0LUpJUyAqLwotI2Vu ZGlmIC8qIEtBTkpJICovCi0KLSNpZmRlZiBPUzIKLSNpZmRlZiBOVAotX2lubGluZQotI2Vsc2UK LV9JbmxpbmUKLSNlbmRpZiAvKiBOVCAqLwotaW50Ci1pc3VuaWNvZGUoCi0jaWZkZWYgQ0tfQU5T SUMKLSAgICAgICAgICB2b2lkCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSAgICAgICAgICApIHsK LSAgICBleHRlcm4gaW50IHR0X3VuaWNvZGU7Ci0jaWZkZWYgTlQKLSNpZmRlZiBLVUkKLSAgICBy ZXR1cm4odHRfdW5pY29kZSk7Ci0jZWxzZSAvKiBLVUkgKi8KLSAgICBpZiAodHRfdW5pY29kZSAm JiAhaXNXaW45NSgpKQotICAgICAgcmV0dXJuKDEpOwotICAgIGVsc2UKLSAgICAgIHJldHVybigw KTsKLSNlbmRpZiAvKiBLVUkgKi8KLSNlbHNlIC8qIE5UICovCi0gICAgcmV0dXJuKDApOwotI2Vu ZGlmIC8qIE5UICovCi19Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogQ0tPVU5JX0ggKi8K CmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3hs YS5oIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2N4bGEuaApkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQwM2M4MS4uMDAwMDAwMAotLS0gYS9ja2VybWl0 LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3hsYS5oCisrKyAvZGV2L251bGwKQEAg LTEsMzM3ICswLDAgQEAKLS8qCi0gIEZpbGUgQ0tDWExBLkgKLQotICBTeXN0ZW0taW5kZXBlbmRl bnQgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiBoZWFkZXIgZmlsZSBmb3IgQy1LZXJtaXQuCi0q LwotCi0vKgotICBBdXRob3I6IEZyYW5rIGRhIENydXogPGZkY0Bjb2x1bWJpYS5lZHU+LAotICBU aGUgS2VybWl0IFByb2plY3QgLSBDb2x1bWJpYSBVbml2ZXJzaXR5LCBOZXcgWW9yayBDaXR5Lgot Ci0gIENvcHlyaWdodCAoQykgMTk4NSwgMjAwOSwKLSAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBV bml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgotICAgIEFsbCByaWdodHMgcmVzZXJ2 ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCi0gICAgY29weXJp Z2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlz c2lvbnMuCi0qLwotLyoKLSAgTk9URToKLSAgSVNPIDIwNCBpcyBMYXRpbi0xICsgRXVyby4KLSAg SVNPIDIwNSBpcyBMYXRpbi00ICsgRXVyby4KLSAgSVNPIDIwNiBpcyBMYXRpbi03ICsgRXVyby4K LSovCi0jaWZuZGVmIENLQ1hMQV9IICAgICAgICAgICAgICAgICAgICAgICAgLyogR3VhcmQgYWdh aW5zdCBtdWx0aXBsZSBpbmNsdXNpb24gKi8KLSNkZWZpbmUgQ0tDWExBX0gKLQotI2lmbmRlZiBL QU5KSSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN5c3RlbXMgc3VwcG9ydGluZyBLYW5q aSAqLwotI2lmZGVmIE9TMgotI2RlZmluZSBLQU5KSQotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlm IC8qIEtBTkpJICovCi0KLSNpZmRlZiBOT0tBTkpJICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBFeGNlcHQgaWYgTk9LQU5KSSBpcyBkZWZpbmVkLiAqLwotI2lmZGVmIEtBTkpJCi0jdW5kZWYg S0FOSkkKLSNlbmRpZiAvKiBLQU5KSSAqLwotI2VuZGlmIC8qIE5PS0FOSkkgKi8KLQotI2lmbmRl ZiBOT1VOSUNPREUKLSNpZm5kZWYgVU5JQ09ERSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBV bmljb2RlIHN1cHBvcnQgKi8KLSNpZmRlZiBPUzJPUlVOSVggICAgICAgICAgICAgICAgICAgICAg ICAvKiBPbmx5IGZvciBLOTUsIFVOSVgsIFZNUywuLi4gKi8KLSNkZWZpbmUgVU5JQ09ERQotI2Vs c2UKLSNpZmRlZiBWTVMKLSNkZWZpbmUgVU5JQ09ERQotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlm IC8qIE9TMk9SVU5JWCAqLwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSNlbmRpZiAvKiBOT1VOSUNP REUgKi8KLQotI2RlZmluZSBYTEFfTk9ORSAgICAwICAgICAgICAgICAgICAgICAgIC8qIFRyYW5z bGF0aW9uIHR5cGVzIC0gbm9uZSAqLwotI2RlZmluZSBYTEFfQllURSAgICAxICAgICAgICAgICAg ICAgICAgIC8qIEJ5dGUtZm9yLWJ5dGUgKi8KLSNkZWZpbmUgWExBX0pBUEFOICAgMiAgICAgICAg ICAgICAgICAgICAvKiBKYXBhbmVzZSAqLwotI2RlZmluZSBYTEFfVU5JQ09ERSAzICAgICAgICAg ICAgICAgICAgIC8qIFVuaWNvZGUgKi8KLQotI2lmbmRlZiBVTklPUktBTkpJICAgICAgICAgICAg ICAgICAgICAgIC8qIFVuaWNvZGUgT1IgS2FuamkgKi8KLSNpZmRlZiBVTklDT0RFICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBpLmUuIHNvbWUgc3VwcG9ydCBmb3IgKi8KLSNkZWZpbmUgVU5J T1JLQU5KSSAgICAgICAgICAgICAgICAgICAgICAvKiBtdWx0aWJ5dGUgY2hhcmFjdGVyIHNldHMg Ki8KLSNlbmRpZiAvKiBVTklDT0RFICovCi0jaWZkZWYgS0FOSkkKLSNkZWZpbmUgVU5JT1JLQU5K SQotI2VuZGlmIC8qIEtBTkpJICovCi0jZW5kaWYgLyogVU5JT1JLQU5KSSAqLwotLyoKLSAgIERp c2FibGUgYWxsIHN1cHBvcnQgZm9yIGFsbCBjbGFzc2VzIG9mIGNoYXJhY3RlciBzZXRzCi0gICBp ZiBOT0NTRVRTIGlzIGRlZmluZWQuCi0qLwotI2lmZGVmIE5PQ1NFVFMKLQotI2lmZGVmIENLT1VO SQotI3VuZGVmIENLT1VOSQotI2VuZGlmIC8qIENLT1VOSSAqLwotI2lmZGVmIEtBTkpJCi0jdW5k ZWYgS0FOSkkKLSNlbmRpZiAvKiBLQU5KSSAqLwotI2lmZGVmIENZUklMTElDCi0jdW5kZWYgQ1lS SUxMSUMKLSNlbmRpZiAvKiBDWVJJTExJQyAqLwotI2lmZGVmIExBVElOMgotI3VuZGVmIExBVElO MgotI2VuZGlmIC8qIExBVElOMiAqLwotI2lmZGVmIEhFQlJFVwotI3VuZGVmIEhFQlJFVwotI2Vu ZGlmIC8qIEhFQlJFVyAqLwotI2lmZGVmIFVOSUNPREUKLSN1bmRlZiBVTklDT0RFCi0jZW5kaWYg LyogVU5JQ09ERSAqLwotI2lmbmRlZiBOT1VOSUNPREUKLSNkZWZpbmUgTk9VTklDT0RFCi0jZW5k aWYJLyogTk9VTklDT0RFICovCi0KLSNlbHNlIC8qIE5vdCBOT0NTRVRTIC0gUmVzdCBvZiB0aGlz IGZpbGUuLi4gKi8KLQotI2lmZGVmIE5PVU5JQ09ERSAgICAgICAgICAgICAgICAgICAgICAgIC8q IFVuaWNvZGUgKi8KLSNpZmRlZiBVTklDT0RFCi0jdW5kZWYgVU5JQ09ERQotI2VuZGlmIC8qIFVO SUNPREUgKi8KLSNlbmRpZiAvKiBOT1VOSUNPREUgKi8KLQotI2lmZGVmIFVOSUNPREUKLSNpZmRl ZiBPUzIKLSNpZm5kZWYgQ0tPVU5JCi0jZGVmaW5lIENLT1VOSSAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogU3BlY2lhbCBVbmljb2RlIGZlYXR1cmVzIGZvciBLOTUgKi8KLSNlbmRpZiAvKiBD S09VTkkgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBVTklDT0RFICovCi0KLSNpZm5k ZWYgT1MyCi0jaWZkZWYgQ0tPVU5JCi0jdW5kZWYgQ0tPVU5JCi0jZW5kaWYgLyogQ0tPVU5JICov Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZm5kZWYgTk9MQVRJTjIgICAgICAgICAgICAgICAgICAg ICAgICAvKiBJZiB0aGV5IGRpZG4ndCBzYXkgIm5vIExhdGluLTIiICovCi0jaWZuZGVmIExBVElO MiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlbiBpZiBMQVRJTjIgaXNuJ3QgYWxyZWFk eSAqLwotI2RlZmluZSBMQVRJTjIgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmluZWQs IGRlZmluZSBpdC4gKi8KLSNlbmRpZiAvKiBMQVRJTjIgKi8KLSNlbmRpZiAvKiBOT0xBVElOMiAq LwotCi0jaWZkZWYgTk9DWVJJTExJQyAgICAgICAgICAgICAgICAgICAgICAgLyogKHNwZWxsaW5n IHZhcmlhbnQuLi4pICovCi0jaWZuZGVmIE5PQ1lSSUwKLSNkZWZpbmUgTk9DWVJJTAotI2VuZGlm IC8qIE5PQ1lSSUwgKi8KLSNlbmRpZiAvKiBOT0NZUklMTElDICovCi0KLSNpZm5kZWYgTk9DWVJJ TCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiB0aGV5IGRpZG4ndCBzYXkgIm5vIEN5cmls bGljIiAqLwotI2lmbmRlZiBDWVJJTExJQyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZW4g aWYgQ1lSSUxMSUMgaXNuJ3QgYWxyZWFkeSAqLwotI2RlZmluZSBDWVJJTExJQyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIGRlZmluZWQsIGRlZmluZSBpdC4gKi8KLSNlbmRpZiAvKiBDWVJJTExJ QyAqLwotI2VuZGlmIC8qIE5PQ1lSSUwgKi8KLQotI2lmbmRlZiBOT0hFQlJFVyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIElmIHRoZXkgZGlkbid0IHNheSAibm8gSGVicmV3IiAqLwotI2lmbmRl ZiBIRUJSRVcgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZW4gaWYgSEVCUkVXIGlzbid0 IGFscmVhZHkgKi8KLSNkZWZpbmUgSEVCUkVXICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBk ZWZpbmVkLCBkZWZpbmUgaXQuICovCi0jZW5kaWYgLyogSEVCUkVXICovCi0jZW5kaWYgLyogTk9I RUJSRVcgKi8KLQotI2lmbmRlZiBOT0dSRUVLICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElm IG5vdCBubyBHcmVlayAqLwotI2lmbmRlZiBHUkVFSyAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIHRoZW4gaWYgR1JFRUsgaXNuJ3QgYWxyZWFkeSAqLwotI2RlZmluZSBHUkVFSyAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIGRlZmluZWQsIGRlZmluZSBpdC4gKi8KLSNlbmRpZiAvKiBH UkVFSyAqLwotI2VuZGlmIC8qIE5PR1JFRUsgKi8KLQotI2lmbmRlZiBOT0tBTkpJICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIElmIG5vdCBubyBLYW5qaSAqLwotI2lmbmRlZiBLQU5KSSAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHRoZW4gaWYgS0FOSkkgaXNuJ3QgYWxyZWFkeSAqLwot I2RlZmluZSBLQU5KSSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmluZWQsIGRlZmlu ZSBpdC4gKi8KLSNlbmRpZiAvKiBLQU5KSSAqLwotI2VuZGlmIC8qIE5PS0FOSkkgKi8KLQotLyog RmlsZSBja2N4bGEuaCAtLSBDaGFyYWN0ZXItc2V0LXJlbGF0ZWQgZGVmaW5pdGlvbnMsIHN5c3Rl bSBpbmRlcGVuZGVudCAqLwotCi0vKiBDb2RlcyBmb3IgS2VybWl0IFRyYW5zZmVyIFN5bnRheCBM ZXZlbCAob2Jzb2xldGUpICovCi0KLSNkZWZpbmUgVFNfTDAgMCAgICAgICAgICAvKiBMZXZlbCAw IChUcmFuc3BhcmVudCkgKi8KLSNkZWZpbmUgVFNfTDEgMSAgICAgICAgICAvKiBMZXZlbCAxIChv bmUgc3RhbmRhcmQgY2hhcmFjdGVyIHNldCkgKi8KLSNkZWZpbmUgVFNfTDIgMiAgICAgICAgICAv KiBMZXZlbCAyIChtdWx0aXBsZSBjaGFyYWN0ZXIgc2V0cyBpbiBzYW1lIGZpbGUpICovCi0KLSNk ZWZpbmUgVU5LIDYzICAgICAgICAgICAvKiBTeW1ib2wgdG8gdXNlIGZvciB1bmtub3duIGNoYXJh Y3RlciAoNjMgPSA/KSAqLwotCi0vKgotICBDb2RlcyBmb3IgdGhlIGJhc2UgYWxwaGFiZXQgb2Yg YSBnaXZlbiBjaGFyYWN0ZXIgc2V0LgotICBUaGVzZSBhcmUgYXNzaWduZWQgaW4gcm91Z2hseSBJ U08gODg1OSBvcmRlci4KLSAgKEVhY2ggaXMgYXNzdW1lZCB0byBpbmNsdWRlIEFTQ0lJL1JvbWFu LikKLSovCi0jZGVmaW5lIEFMX1VOSVYgICAgMCAgICAgICAgICAgICAgICAgICAgLyogVW5pdmVy c2FsIChsaWtlIElTTyAxMDY0NikgKi8KLSNkZWZpbmUgQUxfUk9NQU4gICAxICAgICAgICAgICAg ICAgICAgICAvKiBSb21hbiAoTGF0aW4pIGFscGhhYmV0ICovCi0jZGVmaW5lIEFMX0NZUklMICAg MiAgICAgICAgICAgICAgICAgICAgLyogQ3lyaWxsaWMgYWxwaGFiZXQgKi8KLSNkZWZpbmUgQUxf QVJBQklDICAzICAgICAgICAgICAgICAgICAgICAvKiBBcmFiaWMgKi8KLSNkZWZpbmUgQUxfR1JF RUsgICA0ICAgICAgICAgICAgICAgICAgICAvKiBHcmVlayAqLwotI2RlZmluZSBBTF9IRUJSRVcg IDUgICAgICAgICAgICAgICAgICAgIC8qIEhlYnJldyAqLwotI2RlZmluZSBBTF9LQU5BICAgIDYg ICAgICAgICAgICAgICAgICAgIC8qIEphcGFuZXNlIEthdGFrYW5hICovCi0jZGVmaW5lIEFMX0pB UEFOICAgNyAgICAgICAgICAgICAgICAgICAgLyogSmFwYW5lc2UgS2F0YWthbmErS2FuamkgaWRl b2dyYW1zICovCi0jZGVmaW5lIEFMX0hBTiAgICAgOCAgICAgICAgICAgICAgICAgICAgLyogQ2hp bmVzZS9KYXBhbmVzZS9Lb3JlYW4gaWRlb2dyYW1zICovCi0jZGVmaW5lIEFMX0lORElBICAgOSAg ICAgICAgICAgICAgICAgICAgLyogSW5kaWFuIHNjcmlwdHMgKElTQ0lJKSAqLwotI2RlZmluZSBB TF9WSUVUICAgMTAgICAgICAgICAgICAgICAgICAgIC8qIFZpZXRuYW1lc2UgKFZJU0NJSSkgKi8K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBZGQgbW9yZSBoZXJl Li4uICovCi0jZGVmaW5lIEFMX1VOSyAgIDk5OSAgICAgICAgICAgICAgICAgICAgLyogVW5rbm93 biAodHJhbnNwYXJlbnQpICovCi0KLS8qIENvZGVzIGZvciBsYW5ndWFnZXMgKi8KLS8qCi0gIE5P VEU6IEl0IHdvdWxkIHBlcmhhcHMgYmUgYmV0dGVyIHRvIHVzZSBJU08gNjM5LTE5ODggMi1sZXR0 ZXIgIkNvZGVzIGZvcgotICBSZXByZXNlbnRhdGlvbiBvZiBOYW1lcyBvZiBMYW5ndWFnZXMiIGhl cmUsIHNob3duIGluIHRoZSBjb21tZW50cyBiZWxvdy4KLSovCi0jZGVmaW5lIExfQVNDSUkgICAg ICAgMCAgLyogRU4gQVNDSUksIEVuZ2xpc2ggKi8KLSNkZWZpbmUgTF9VU0FTQ0lJICAgICAwICAv KiBFTiBBU0NJSSwgRW5nbGlzaCAqLwotI2RlZmluZSBMX0RVVENIICAgICAgIDEgIC8qIE5MIER1 dGNoICovCi0jZGVmaW5lIExfRklOTklTSCAgICAgMiAgLyogRkkgRmlubmlzaCAqLwotI2RlZmlu ZSBMX0ZSRU5DSCAgICAgIDMgIC8qIEZSIEZyZW5jaCAqLwotI2RlZmluZSBMX0dFUk1BTiAgICAg IDQgIC8qIERFIEdlcm1hbiAqLwotI2RlZmluZSBMX0hVTkdBUklBTiAgIDUgIC8qIEhVIEh1bmdh cmlhbiAqLwotI2RlZmluZSBMX0lUQUxJQU4gICAgIDYgIC8qIElUIEl0YWxpYW4gKi8KLSNkZWZp bmUgTF9OT1JXRUdJQU4gICA3ICAvKiBOTyBOb3J3ZWdpYW4gKi8KLSNkZWZpbmUgTF9QT1JUVUdV RVNFICA4ICAvKiBQVCBQb3J0dWd1ZXNlICovCi0jZGVmaW5lIExfU1BBTklTSCAgICAgOSAgLyog RVMgU3BhbmlzaCAqLwotI2RlZmluZSBMX1NXRURJU0ggICAgMTAgIC8qIFNWIFN3ZWRpc2ggKi8K LSNkZWZpbmUgTF9TV0lTUyAgICAgIDExICAvKiBSTSBTd2lzcyAoUmhhZXRvLVJvbWFuY2UpICov Ci0jZGVmaW5lIExfREFOSVNIICAgICAxMiAgLyogREEgRGFuaXNoICovCi0jZGVmaW5lIExfSUNF TEFORElDICAxMyAgLyogSVMgSWNlbGFuZGljICovCi0jZGVmaW5lIExfUlVTU0lBTiAgICAxNCAg LyogUlUgUnVzc2lhbiAqLwotI2RlZmluZSBMX0pBUEFORVNFICAgMTUgIC8qIEpBIEphcGFuZXNl ICovCi0jZGVmaW5lIExfSEVCUkVXICAgICAxNiAgLyogSVcgSGVicmV3ICovCi0jZGVmaW5lIExf R1JFRUsgICAgICAxNyAgLyogICAgR3JlZWsgKi8KLQotI2RlZmluZSBNQVhMQU5HICAgICAgMTcg IC8qIE51bWJlciBvZiBsYW5ndWFnZXMgKi8KLQotLyoKLSAgRmlsZSBjaGFyYWN0ZXItc2V0cyBh cmUgZGVmaW5lZCBpbiB0aGUgc3lzdGVtLXNwZWNpZmljIGNrP3hsYS5oIGZpbGUsCi0gIGV4Y2Vw dCBmb3IgdGhlIGZvbGxvd2luZyBvbmVzLCB3aGljaCBtdXN0IGJlIGF2YWlsYWJsZSB0byBhbGwg dmVyc2lvbnM6Ci0qLwotI2RlZmluZSBGQ19UUkFOU1AgIDI1NCAgICAgICAgICAgICAgICAgIC8q IFRyYW5zcGFyZW50ICovCi0jZGVmaW5lIEZDX1VOREVGICAgMjU1ICAgICAgICAgICAgICAgICAg LyogVW5kZWZpbmVkICAgKi8KLS8qCi0gIERlc2lnbmF0b3JzIGZvciBLZXJtaXQncyB0cmFuc2Zl ciBjaGFyYWN0ZXIgc2V0cy4gIFRoZXNlIGFyZSBhbGwgc3RhbmRhcmQKLSAgc2V0cywgb3IgYmFz ZWQgb24gdGhlbS4gIFN5bWJvbHMgbXVzdCBiZSB1bmlxdWUgaW4gdGhlIGZpcnN0IDggY2hhcmFj dGVycywKLSAgYmVjYXVzZSBzb21lIEMgcHJlcHJvY2Vzc29ycyBoYXZlIHRoaXMgbGltaXQuCi0q LwotLyogTElTVDEgKi8KLSNkZWZpbmUgVENfVFJBTlNQICAwICAgLyogVHJhbnNwYXJlbnQsIG5v IGNoYXJhY3RlciB0cmFuc2xhdGlvbiAqLwotI2RlZmluZSBUQ19VU0FTQ0lJIDEgICAvKiBJU08g NjQ2IElSViAvIFVTIDctYml0IEFTQ0lJICovCi0jZGVmaW5lIFRDXzFMQVRJTiAgMiAgIC8qIElT TyA4ODU5LTEsIExhdGluIEFscGhhYmV0IDEgKi8KLSNkZWZpbmUgVENfMkxBVElOICAzICAgLyog SVNPIDg4NTktMiwgTGF0aW4gQWxwaGFiZXQgMiAqLwotI2RlZmluZSBUQ19DWVJJTEwgIDQgICAv KiBJU08gODg1OS01LCBMYXRpbi9DeXJpbGxpYyAqLwotI2RlZmluZSBUQ19KRVVDICAgIDUgICAv KiBKYXBhbmVzZSBFVUMgPSBKSVMgMDIwMSswMjAyKzAyMDggKi8KLSNkZWZpbmUgVENfSEVCUkVX ICA2ICAgLyogSVNPIDg4NTktOCwgTGF0aW4vSGVicmV3ICovCi0jZGVmaW5lIFRDX0dSRUVLICAg NyAgIC8qIElTTyA4ODU5LTcsIExhdGluL0dyZWVrICovCi0jZGVmaW5lIFRDXzlMQVRJTiAgOCAg IC8qIElTTyA4ODU5LTE1IExhdGluIEFscGhhYmV0IDkgKHdpdGggRXVybykgKi8KLSNkZWZpbmUg VENfVUNTMiAgICA5ICAgLyogSVNPIDEwNjQ2IC8gVW5pY29kZSBVQ1MtMiAqLwotI2RlZmluZSBU Q19VVEY4ICAgMTAgICAvKiBJU08gMTA2NDYgLyBVbmljb2RlIFVURi04ICovCi0KLSNkZWZpbmUg TUFYVENTRVRTIDEwICAgLyogSGlnaGVzdCBUcmFuc2ZlciBDaGFyYWN0ZXIgU2V0IE51bWJlciAq LwotCi0jaWZkZWYgQ09NTUVOVAotLyoKLSAgTm90IHVzZWQgYW5kIHByb2JhYmx5IHdvbid0IGJl IGR1ZSB0byBJU08tMTA2NDYgLyBVbmljb2RlLgotKi8KLSNkZWZpbmUgVENfM0xBVElOIDExICAv KiBJU08gODg1OS0zLCBMYXRpbi0zICovCi0jZGVmaW5lIFRDXzRMQVRJTiAxMiAgIC8qIElTTyA4 ODU5LTQsIExhdGluLTQgKi8KLSNkZWZpbmUgVENfNUxBVElOIDEzICAvKiBJU08gODg1OS05LCBM YXRpbi01ICovCi0jZGVmaW5lIFRDX0FSQUJJQyAxNCAgLyogSVNPLTg4NTktNiwgTGF0aW4vQXJh YmljICovCi0jZGVmaW5lIFRDX0pJUzIwOCAxNSAgLyogSmFwYW5lc2UgSklTIFggMDIwOCBtdWx0 aWJ5dGUgc2V0ICovCi0jZGVmaW5lIFRDX0NISU5FUyAxNiAgLyogQ2hpbmVzZSBTdGFuZGFyZCBH QiAyMzEyLTgwICovCi0jZGVmaW5lIFRDX0tPUkVBTiAxNyAgLyogS29yZWFuIEtTIEMgNTYwMS0x OTg3ICovCi0jZGVmaW5lIFRDX0lTQ0lJICAxOCAgLyogSW5kaWFuIHN0YW5kYXJkIGNvZGUgZm9y IGlpLi4uICovCi0jZGVmaW5lIFRDX1ZTQ0lJICAxOSAgLyogVmlldG5hbSBzdGFuZGFyZCBjb2Rl IGZvciBpaS4uLiAqLwotLyogZXRjLi4uICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0vKiBT dHJ1Y3R1cmUgZm9yIGNoYXJhY3Rlci1zZXQgaW5mb3JtYXRpb24gKi8KLQotc3RydWN0IGNzaW5m byB7Ci0gICAgY2hhciAqbmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVzY3JpcHRp dmUgbmFtZSBvZiBjaGFyYWN0ZXIgc2V0ICovCi0gICAgaW50IHNpemU7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogU2l6ZSAoZS5nLiAxMjgsIDI1NiwgMTYzODQpICovCi0gICAgaW50IGNv ZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGlrZSBUQ18xTEFUSU4sIGV0Yy4gICov Ci0gICAgY2hhciAqZGVzaWduYXRvcjsgICAgICAgICAgICAgICAgICAgLyogRGVzaWduYXRvciwg bGlrZSBJMi8xMDAgPSBMYXRpbi0xICovCi0gICAgaW50IGFscGhhYmV0OyAgICAgICAgICAgICAg ICAgICAgICAgLyogQmFzZSBhbHBoYWJldCAqLwotICAgIGNoYXIgKmtleXdvcmQ7ICAgICAgICAg ICAgICAgICAgICAgIC8qIEtleXdvcmQgZm9yIHRoaXMgY2hhcmFjdGVyLXNldCAqLwotfTsKLQot LyogU3RydWN0dXJlIGZvciBsYW5ndWFnZSBpbmZvcm1hdGlvbiAqLwotCi1zdHJ1Y3QgbGFuZ2lu Zm8gewotICAgIGludCBpZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExhbmd1YWdl IElEIGNvZGUgKExfd2hhdGV2ZXIpICovCi0gICAgaW50IGZjOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogRmlsZSBjaGFyYWN0ZXIgc2V0IHRvIHVzZSAqLwotICAgIGludCB0YzsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIGNoYXJhY3RlciBzZXQgdG8gdXNl ICovCi0gICAgY2hhciAqZGVzY3JpcHRpb247ICAgICAgICAgICAgICAgICAgLyogRGVzY3JpcHRp b24gb2YgbGFuZ3VhZ2UgKi8KLX07Ci0KLS8qIE5vdyB0YWtlIGluIHRoZSBzeXN0ZW0tc3BlY2lm aWMgZGVmaW5pdGlvbnMgKi8KLQotI2lmZGVmIFVOSVgKLSNpbmNsdWRlICJja3V4bGEuaCIKLSNl bmRpZiAvKiBVTklYICovCi0KLSNpZmRlZiBPU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBPUy05ICovCi0jaW5jbHVkZSAiY2t1eGxhLmgiCi0jZW5kaWYgLyogT1MtOSAqLwotCi0j aWZkZWYgVk1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVkFYL1ZNUyAqLwotI2lu Y2x1ZGUgImNrdXhsYS5oIgotI2VuZGlmIC8qIFZNUyAqLwotCi0jaWZkZWYgR0VNRE9TICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogQXRhcmkgU1QgKi8KLSNpbmNsdWRlICJja3V4bGEuaCIK LSNlbmRpZiAvKiBHRU1ET1MgKi8KLQotI2lmZGVmIE1BQyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIE1hY2ludG9zaCAqLwotI2luY2x1ZGUgImNrbXhsYS5oIgotI2VuZGlmIC8qIE1B QyAqLwotCi0jaWZkZWYgT1MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT1MvMiAq LwotI2luY2x1ZGUgImNrdXhsYS5oIiAgICAgICAgICAgICAgICAgICAgIC8qIFVzZXMgYmlnIFVO SVggdmVyc2lvbiAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgQU1JR0EgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogQ29tbW9kb3JlIEFtaWdhICovCi0jaW5jbHVkZSAiY2t1eGxh LmgiCi0jZW5kaWYgLyogQU1JR0EgKi8KLQotI2lmZGVmIGRhdGFnZW5lcmFsICAgICAgICAgICAg ICAgICAgICAgIC8qIERhdGEgR2VuZXJhbCBNViBBT1MvVlMgKi8KLSNpbmNsdWRlICJja3V4bGEu aCIKLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotCi0jaWZkZWYgU1RSQVRVUyAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogU3RyYXR1cyBDb21wdXRlciwgSW5jLiBWT1MgKi8KLSNpbmNsdWRl ICJja3V4bGEuaCIKLSNlbmRpZiAvKiBTVFJBVFVTICovCi0KLSNpZmRlZiBVTklDT0RFCi0jaW5j bHVkZSAiY2tjdW5pLmgiICAgICAgICAgICAgICAgICAgICAgLyogVW5pY29kZSAqLwotI2VuZGlm IC8qIFVOSUNPREUgKi8KLQotI2lmZGVmIEtBTkpJCi0jZGVmaW5lIFVOS1NKSVMgMHg4MTdmCi1f UFJPVE9UWVAoVVNIT1JUIGV1X3RvX3NqLCAoVVNIT1JUKSApOyAgLyogRVVDLUpQIHRvIFNoaWZ0 LUpJUyAgKi8KLV9QUk9UT1RZUChVU0hPUlQgc2pfdG9fZXUsIChVU0hPUlQpICk7ICAvKiBTaGlm dC1KSVMgdG8gRVVDLUpQICAqLwotX1BST1RPVFlQKCBpbnQgeGthbmpmLCAodm9pZCkgKTsKLV9Q Uk9UT1RZUCggaW50IHhrYW5qaSwgKGludCwgaW50ICgqKShjaGFyKSkgKTsKLV9QUk9UT1RZUCgg aW50IHhrYW5qeiwgKGludCAoKikoY2hhcikgKSApOwotX1BST1RPVFlQKCBpbnQgemthbmpmLCAo dm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IHprYW5qaSwgKGludCAoKikodm9pZCkpICk7IC8qIEth bmppIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLV9QUk9UT1RZUCggaW50IHprYW5qeiwgKHZvaWQp ICk7Ci1fUFJPVE9UWVAoVk9JRCBqN2luaXQsICggdm9pZCApICk7ICAgICAgLyogSW5pdGlhbGl6 ZSBKSVMtNyBwYXJzZXIgKi8KLV9QUk9UT1RZUChpbnQgZ2V0ajcsICggdm9pZCApICk7ICAgICAg ICAvKiBHZXQgbmV4dCBKSVMtNyBjaGFyYWN0ZXIgKi8KLSNlbmRpZiAvKiBLQU5KSSAqLwotCi0j aWZuZGVmIE1BQwotI2lmbmRlZiBOT0xPQ0FMCi1fUFJPVE9UWVAoIGludCBjc19zaXplLCAoaW50 KSApOwotX1BST1RPVFlQKCBpbnQgY3NfaXNfc3RkLCAoaW50KSApOwotX1BST1RPVFlQKCBpbnQg Y3NfaXNfbnJjLCAoaW50KSApOwotX1BST1RPVFlQKCBWT0lEIHNldHJlbWNoYXJzZXQsIChpbnQs IGludCkgKTsKLV9QUk9UT1RZUCggVk9JRCBzZXRsY2xjaGFyc2V0LCAoaW50KSApOwotI2VuZGlm IC8qIE5PTE9DQUwgKi8KLSNlbmRpZiAvKiBNQUMgKi8KLQotX1BST1RPVFlQKFZPSUQgc2V0eGxh dHlwZSwgKGludCwgaW50KSk7Ci0KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0jZW5kaWYgLyogQ0tD WExBX0ggKi8KLQotLyogRW5kIG9mIGNrY3hsYS5oICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05 LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2VybWl0LmluaSBiL2NrZXJtaXQtOS4wLjMw Mi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tlcm1pdC5pbmkKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IGIzMGYzODkuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2Nr ZXJtaXQtOS4wLjMwMi9ja2VybWl0LmluaQorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAot Q09NTUVOVCAtIFN0YW5kYXJkIEMtS2VybWl0IGluaXRpYWxpemF0aW9uIGZpbGUKLTsKLWVjaG8K LWVjaG8gVGhlIHZlcnkgbG9uZyBzdGFuZGFyZCBpbml0aWFsaXphdGlvbiBmaWxlIHRoYXQgd2Fz IGRpc3RyaWJ1dGVkCi1lY2hvIHdpdGggQy1LZXJtaXQgNiwgNywgYW5kIDggaXMgbm8gbG9uZ2Vy IHJlY29tbWVuZGVkIGFzICJzdGFuZGFyZCIsCi1lY2hvIHNpbmNlIGl0cyBmZWF0dXJlcyB3ZXJl IGxpdHRsZSB1c2VkLiAgSXQgaXMgc3RpbGwgYXZhaWxhYmxlIGluCi1lY2hvIHRoZSBDLUtlcm1p dCBkaXN0cmlidXRpb24gYXMgb2NrZXJtaXQuaW5pLgotZWNobwoKZGlmZiAtLWdpdCBhL2NrZXJt aXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tlcm1pdDcwLnR4dCBiL2NrZXJtaXQt OS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tlcm1pdDcwLnR4dApkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggYTc5NmNmZC4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDIt YnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrZXJtaXQ3MC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwx NzY5MCArMCwwIEBACi0KLSAgIFsxXVRoZSBDb2x1bWJpYSBDcm93biBUaGUgS2VybWl0IFByb2pl Y3QgfCBDb2x1bWJpYSBVbml2ZXJzaXR5Ci0gICA2MTIgV2VzdCAxMTV0aCBTdHJlZXQsIE5ldyBZ b3JrIE5ZIDEwMDI1IFVTQSBvIFsyXWtlcm1pdEBjb2x1bWJpYS5lZHUKLSAgIC4uLnNpbmNlIDE5 ODEKLSAgIFszXUhvbWUgWzRdS2VybWl0IDk1IFs1XUMtS2VybWl0IFs2XVNjcmlwdHMgWzddQ3Vy cmVudCBbOF1OZXcgWzldRkFRCi0gICBbMTBdU3VwcG9ydAotCi1TdXBwbGVtZW50IHRvIFsxMV1V c2luZyBDLUtlcm1pdCAsIDJuZCBFZGl0aW9uCi0KLUZvciBDLUtlcm1pdCA3LjAKLQotQXMgb2Yg Qy1LZXJtaXQgdmVyc2lvbjogIDcuMC4xOTYKLVRoaXMgZmlsZSBjcmVhdGVkOiAgOCBGZWJydWFy eSAyMDAwCi1UaGlzIGZpbGUgbGFzdCB1cGRhdGVkOgotTW9uIEF1ZyAgOCAxMDozOToxOCAyMDEx Ci0KLQotQXV0aG9yczogRnJhbmsgZGEgQ3J1eiBhbmQgQ2hyaXN0aW5lIE0uIEdpYW5vbmUKLUFk ZHJlc3M6IFRoZSBLZXJtaXQgUHJvamVjdAotICAgICAgICAgQ29sdW1iaWEgVW5pdmVyc2l0eQot ICAgICAgICAgNjEyIFdlc3QgMTE1dGggU3RyZWV0Ci0gICAgICAgICBOZXcgWW9yayBOWSAxMDAy NS03Nzk5Ci0gICAgICAgICBVU0EKLUZheDogICAgICsxICgyMTIpIDY2Mi02NDQyCi1FLU1haWw6 ICBbMTJda2VybWl0LXN1cHBvcnRAY29sdW1iaWEuZWR1Ci1XZWI6ICAgICBbMTNdaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0LwotT3I6ICAgICAgWzE0XWh0dHA6Ly93d3cua2VybWl0LXBy b2plY3Qub3JnLwotT3I6ICAgICAgWzE1XWh0dHA6Ly93d3cuY29sdW1iaWEubnljLm55LnVzL2tl cm1pdC8KLQotTk9USUNFUwotCi0gICBUaGlzIGRvY3VtZW50OgotICAgICAgICAgIENvcHlyaWdo dCDvv70gMTk5NywgMjAwMCwgRnJhbmsgZGEgQ3J1eiBhbmQgQ2hyaXN0aW5lIE0uIEdpYW5vbmUu Ci0gICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgS2VybWl0IDk1OgotICAgICAg ICAgIENvcHlyaWdodCDvv70gMTk5NSwgMjAwMCwgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVy c2l0eSBpbiB0aGUKLSAgICAgICAgICBDaXR5IG9mIE5ldyBZb3JrLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgotCi0gICBDLUtlcm1pdDoKLSAgICAgICAgICBDb3B5cmlnaHQg77+9IDE5ODUsIDIwMDAs Ci0gICAgICAgICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBv ZiBOZXcgWW9yay4gQWxsCi0gICAgICAgICAgcmlnaHRzIHJlc2VydmVkLiBTZWUgdGhlIEMtS2Vy bWl0IFsxNl1DT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQotICAgICAgICAgIGNvcHlyaWdodCB0ZXh0 IGluIHRoZSBbMTddY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZAotICAgICAgICAg IHBlcm1pc3Npb25zLgotCi0gICBXaGVuIEtlcmJlcm9zKFRNKSBhbmQvb3IgU1JQKFRNKSAoU2Vj dXJlIFJlbW90ZSBQYXNzd29yZCkgYW5kL29yIFNTTAotICAgICAgICAgIHByb3RvY29sIGFyZSBp bmNsdWRlZDoKLSAgICAgICAgICBQb3J0aW9ucyBDb3B5cmlnaHQg77+9IDE5OTAsIE1hc3NhY2h1 c2V0dHMgSW5zdGl0dXRlIG9mCi0gICAgICAgICAgVGVjaG5vbG9neS4KLSAgICAgICAgICBQb3J0 aW9ucyBDb3B5cmlnaHQg77+9IDE5OTEsIDE5OTMgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBv ZgotICAgICAgICAgIENhbGlmb3JuaWEuCi0gICAgICAgICAgUG9ydGlvbnMgQ29weXJpZ2h0IO+/ vSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1IGJ5IEFUJlQuCi0gICAgICAgICAgUG9ydGlv bnMgQ29weXJpZ2h0IO+/vSAxOTk3LCBTdGFuZm9yZCBVbml2ZXJzaXR5LgotICAgICAgICAgIFBv cnRpb25zIENvcHlyaWdodCDvv70gMTk5NS0xOTk3LCBFcmljIFlvdW5nIDxlYXlAY3J5cHRvc29m dC5jb20+LgotCi0gICBGb3IgdGhlIGZ1bGwgdGV4dCBvZiB0aGUgdGhpcmQtcGFydHkgY29weXJp Z2h0IG5vdGljZXMsIHNlZQotICAgWzE4XUFwcGVuZGl4IFYuCi0KLVdIQVQgSVMgSU4gVEhJUyBG SUxFCi0KLSAgIFRoaXMgZmlsZSBsaXN0cyBjaGFuZ2VzIG1hZGUgdG8gQy1LZXJtaXQgc2luY2Ug dGhlIHNlY29uZCBlZGl0aW9uIG9mCi0gICB0aGUgYm9vayBbMTldVXNpbmcgQy1LZXJtaXQgd2Fz IHB1Ymxpc2hlZCBhbmQgQy1LZXJtaXQgNi4wIHdhcyByZWxlYXNlZAotICAgaW4gTm92ZW1iZXIg MTk5Ni4gVXNlIHRoaXMgZmlsZSBhcyBhIHN1cHBsZW1lbnQgdG8gdGhlIHNlY29uZCBlZGl0aW9u Ci0gICBvZiBVc2luZyBDLUtlcm1pdCB1bnRpbCB0aGUgdGhpcmQgZWRpdGlvbiBpcyBwdWJsaXNo ZWQgc29tZSB0aW1lIGluCi0gICAyMDAwLiBJZiB0aGUgIm1vc3QgcmVjZW50IHVwZGF0ZSIgc2hv d24gYWJvdmUgaXMgbG9uZyBhZ28sIGNvbnRhY3QKLSAgIENvbHVtYmlhIFVuaXZlcnNpdHkgdG8g c2VlIGlmIHRoZXJlIGlzIGEgbmV3ZXIgcmVsZWFzZS4KLQotICAgRm9yIGZ1cnRoZXIgaW5mb3Jt YXRpb24sIGFsc28gc2VlIHRoZSBbMjBdQ0tDQldSLlRYVCAoIkMtS2VybWl0Ci0gICBiZXdhcmUi KSBmaWxlIGZvciBoaW50cywgdGlwcywgdHJpY2tzLCByZXN0cmljdGlvbnMsIGZyZXF1ZW50bHkg YXNrZWQKLSAgIHF1ZXN0aW9ucywgZXRjLCBwbHVzIHRoZSBzeXN0ZW0tc3BlY2lmaWMgImJld2Fy ZSBmaWxlIiwgZS5nLgotICAgWzIxXUNLVUJXUi5UWFQgZm9yIFVOSVgsIFsyMl1DS1ZCV1IuVFhU IGZvciBWTVMsIGV0YywgYW5kIGFsc28gYW55Ci0gICBzeXN0ZW0tc3BlY2lmaWMgdXBkYXRlIGZp bGVzIHN1Y2ggYXMgS0VSTUlUOTUuSFRNIGZvciBLZXJtaXQgOTUgKGluIHRoZQotICAgRE9DU1xN QU5VQUxcIHN1YmRpcmVjdG9yeSBvZiB5b3VyIEs5NSBkaXJlY3RvcnkpLgotCi0gICAgIFRoaXMg V2ViLWJhc2VkIGNvcHkgb2YgdGhlIEMtS2VybWl0IDcuMCB1cGRhdGUgbm90ZXMgc3VwZXJzZWRl cyB0aGUKLSAgICAgcGxhaW4tdGV4dCBDS0VSTUlUMi5UWFQgZmlsZS4gQWxsIGNoYW5nZXMgYWZ0 ZXIgMTkgSmFudWFyeSAyMDAwCi0gICAgIGFwcGVhciBvbmx5IGhlcmUgaW4gdGhlIFdlYiB2ZXJz aW9uLiBJZiB5b3UgbmVlZCBhbiB1cC10by1kYXRlCi0gICAgIHBsYWluLXRleHQgY29weSwgdXNl IHlvdXIgV2ViIGJyb3dzZXIgdG8gc2F2ZSB0aGlzIHBhZ2UgYXMgcGxhaW4KLSAgICAgdGV4dC4K LQotQUJPVVQgRklMRU5BTUVTCi0KLSAgIEluIHRoaXMgZG9jdW1lbnQsIGZpbGVuYW1lcyBhcmUg Z2VuZXJhbGx5IHNob3duIGluIHVwcGVyY2FzZSwgYnV0IG9uCi0gICBmaWxlIHN5c3RlbXMgd2l0 aCBjYXNlLXNlbnNpdGl2ZSBuYW1lcyBzdWNoIGFzIFVOSVgsIE9TLTksIGFuZCBBT1MvVlMsCi0g ICBsb3dlcmNhc2UgbmFtZXMgYXJlIHVzZWQ6IFsyM11ja3Vid3IudHh0LCBbMjRdY2tlcm1pdDcw LnR4dCwgZXRjLgotCi1BRERJVElPTkFMIEZJTEVTCi0KLSAgIFNldmVyYWwgb3RoZXIgZmlsZXMg YWNjb21wYW55IHRoaXMgbmV3IEtlcm1pdCByZWxlYXNlOgotCi0gICBTRUNVUklUWS5UWFQKLSAg ICAgICAgICBEaXNjdXNzaW9uIG9mIEtlcm1pdCdzIG5ldyBhdXRoZW50aWNhdGlvbiBhbmQgZW5j cnlwdGlvbgotICAgICAgICAgIGZlYXR1cmVzOgotCi0gICAgICAgICAgKyBbMjVdUGxhaW4tdGV4 dCB2ZXJzaW9uCi0gICAgICAgICAgKyBbMjZdSFRNTCAoaHlwZXJ0ZXh0KSB2ZXJzaW9uCi0KLSAg IElLU0QuVFhUCi0gICAgICAgICAgSG93IHRvIGluc3RhbGwgYW5kIG1hbmFnZSBhbiBJbnRlcm5l dCBLZXJtaXQgU2VydmljZSBEYWVtb24uCi0KLSAgICAgICAgICArIFsyN11QbGFpbi10ZXh0IHZl cnNpb24KLSAgICAgICAgICArIFsyOF1IVE1MIChoeXBlcnRleHQpIHZlcnNpb24KLQotICAgICAg ICAgIEFsc28gc2VlIFsyOV1jdWlrc2QuaHRtIGZvciBpbnN0cnVjdGlvbnMgZm9yIHVzZS4KLQot ICAgVEVMTkVULlRYVAotICAgICAgICAgIEEgdGhvcm91Z2ggcHJlc2VudGF0aW9uIG9mIEtlcm1p dCdzIG5ldyBhZHZhbmNlZCBUZWxuZXQgZmVhdHVyZXMKLSAgICAgICAgICBhbmQgY29udHJvbHMu Ci0KLSAgICAgICAgICArIFszMF1QbGFpbi10ZXh0IHZlcnNpb24KLSAgICAgICAgICArIFszMV1I VE1MIChoeXBlcnRleHQpIHZlcnNpb24KLQotVEhFIE5FVyBDLUtFUk1JVCBMSUNFTlNFCi0KLSAg IFRoZSBDLUtlcm1pdCBsaWNlbnNlIHdhcyByZXdyaXR0ZW4gZm9yIHZlcnNpb24gNy4wIHRvIGdy YW50IGF1dG9tYXRpYwotICAgcGVybWlzc2lvbiB0byBwYWNrYWdlcnMgb2YgZnJlZSBvcGVyYXRp bmctc3lzdGVtIGRpc3RyaWJ1dGlvbnMgdG8KLSAgIGluY2x1ZGUgQy1LZXJtaXQgNy4wLiBFeGFt cGxlcyBpbmNsdWRlIExpbnV4IChHTlUvTGludXgpLCBGcmVlQlNELAotICAgTmV0QlNELCBldGMu IFRoZSBuZXcgbGljZW5zZSBpcyBpbiB0aGUgWzMyXUNPUFlJTkcuVFhUIGZpbGUsIGFuZCBpcwot ICAgYWxzbyBkaXNwbGF5ZWQgYnkgQy1LZXJtaXQgaXRzZWxmIHdoZW4geW91IGdpdmUgdGhlIFZF UlNJT04gb3IKLSAgIENPUFlSSUdIVCBjb21tYW5kLiBUaGUgbmV3IEMtS2VybWl0IGxpY2Vuc2Ug ZG9lcyBub3QgYXBwbHkgdG8KLSAgIFszM11LZXJtaXQgOTUuCi0KLUFDS05PV0xFREdNRU5UUwot Ci0gICBUaGFua3MgdG8gSmVmZiBBbHRtYW4sIHdobyBqb2luZWQgdGhlIEtlcm1pdCBQcm9qZWN0 IGluIDE5OTUsIGZvciBtdWNoCi0gICBvZiB3aGF0IHlvdSBzZWUgaW4gQy1LZXJtaXQgNy4wLCBl c3BlY2lhbGx5IGluIHRoZSBuZXR3b3JraW5nIGFuZAotICAgc2VjdXJpdHkgYXJlYXMsIGFuZCBo aXMga2V5IHJvbGUgaW4gZGVzaWduaW5nIGFuZCBpbXBsZW1lbnRpbmcgdGhlCi0gICBJbnRlcm5l dCBLZXJtaXQgU2VydmljZSBEYWVtb24uIEFuZCBzcGVjaWFsIHRoYW5rcyB0byBMdWNhcyBIYXJ0 IGZvcgotICAgbG90cyBvZiBoZWxwIHdpdGggdGhlIFZNUyB2ZXJzaW9uOyB0byBQZXRlciBFaWNo aG9ybiBmb3IgY29udGludW91cwotICAgdGVzdGluZyBvbiB0aGUgZnVsbCByYW5nZSBvZiBIUC1V WCB2ZXJzaW9ucyBhbmQgZm9yIGEgY29uc29saWRhdGVkIHNldAotICAgb2YgSFAtVVggbWFrZWZp bGUgdGFyZ2V0czsgYW5kIHRvIENvbGluIEFsbGVuLCBNYXJrIEFsbGVuLCBSb2dlciBBbGxlbiwK LSAgIFJpYyBBbmRlcnNvbiwgV2lsbGlhbSBCYWRlciwgTWl0Y2ggQmFrZXIsIE1pdGNoZWxsIEJh c3MsIE5lbHNvbiBCZWViZSwKLSAgIEdlcnJ5IEJlbGFuZ2VyLCBKZWZmIEJlcm5zdGVuLCBNYXJr IEJlcnJ5bWFuLCBKb2huIEJpZ2csIFZvbGtlcgotICAgQm9yY2hlcnQsIEpvbmF0aGFuIEJvc3dl bGwsIFRpbSBCb3llciwgRnJlZGVyaWNrIEJydWNrbWFuLCBLZW5uZXRoCi0gICBDb2NocmFuLCBK YXJlZCBDcmFwbywgQmlsbCBEZWxhbmV5LCBJZ29yIFNvYnJhZG8gRGVsZ2FkbywgQ2xhcmVuY2UK LSAgIERvbGQsIEpvZSBEb3VwbmlrLCBKb2huIER1bmxhcCwgTWF4IEV2YXJ0cywgUGF0cmljayBG cmVuY2gsIENhcmwKLSAgIEZyaWVkYmVyZywgQ2FybCBGcmllbmQsIEhpcm9mdW1pIEZ1amlpLCBB bmRyZXcgR2FicmllbCwgR2FiZSBHYXJ6YSwKLSAgIEJveWQgR2VyYmVyLCBEYXZpZCBHZXJiZXIs IEdlb3JnZSBHaWxtZXIsIEh1bnRlciBHb2F0bGV5LCBESiBIYWdiZXJnLAotICAgS2V2aW4gSGFu ZHksIEFuZHkgSGFycGVyLCBSYW5kb2xwaCBIZXJiZXIsIFN2ZW4gSG9sc3Ry77+9bSwgTWljaGFs Ci0gICBKYWVnZXJtYW5uLCBHcmFoYW0gSmVua2lucywgRGljayBKb25lcywgVGVycnkgS2VubmVk eSwgUm9iZXJ0IEQgS2V5cywKLSAgIE5pY2sgS2lzc2ViZXJ0aCwgSWdvciBLb3ZhbGVua28sIERh dmlkIExhbmUsIEFkYW0gTGF1cmllLCBKZWZmCi0gICBMaWViZXJtYW5uLCBFcmljIExvbnZpY2ss IEhvaSBXYW4gTG91aXMsIEFydGh1ciBNYXJzaCwgR3JlZ29yaWUgTWFydGluLAotICAgUGV0ZXIg TWF1emV5LCBEcmFnYW4gTWlsaWNpYywgVG9kZCBNaWxsZXIsIENocmlzdGlhbiBNb25kcnVwLCBE YW5pZWwKLSAgIE1vcmF0bywgRGF0IE5ndXllbiwgSGVyYiBQZXllcmwsIEplYW4tUGllcnJlIFJh ZGxleSwgU3RldmUgUmFuY2UsCi0gICBTdGVwaGVuIFJpZWhtLCBOaWdlbCBSb2xlcywgTGFycnkg Um9zZW5tYW4sIEpheSBTIFJvdW1hbiwgRGF2aWQKLSAgIFNhbmRlcnNvbiwgSm9obiBTYW50b3Ms IE1pY2hhZWwgU2NobWl0eiwgU3RldmVuIFNjaHVsdHosIEJvYiBTaGFpciwKLSAgIFJpY2hhcmQg U2h1Zm9yZCwgRnJlZCBTbWl0aCwgTWljaGFlbCBTb2tvbG92LCBKaW0gU3BhdGgsIFBldGVyIFN6 ZWxsLAotICAgVGVkIFQnc28sIEJyaWFuIFRpbGxtYW4sIExpbnVzIFRvcnZhbGRzLCBQYXRyaWNr IFZvbGtlcmRpbmcsIE1hcnRpbgotICAgVm9ybO+/vW5kZXIsIFN0ZXZlIFdhbHRvbiwgS2VuIFdl YXZlcmxpbmcsIEpvaG4gV2Vla2xleSwgTWFydGluIFdoaXRha2VyLAotICAgSmltIFdoaXRieSwg TWF0dCBXaWxsbWFuLCBKb2VsbGVuIFdpbmRzb3IsIEZhcnJlbGwgV29vZHMsIGFuZCBtYW55Ci0g ICBvdGhlcnMgZm9yIGJpbmFyaWVzLCBob3N0aW5nLCByZXZpZXdzLCBzdWdnZXN0aW9ucywgYWR2 aWNlLCBidWcKLSAgIHJlcG9ydHMsIGFuZCBhbGwgdGhlIHJlc3Qgb3ZlciB0aGUgMysgeWVhciBD LUtlcm1pdCA3LjAgZGV2ZWxvcG1lbnQKLSAgIGN5Y2xlLiBUaGFua3MgdG8gUnVzcyBOZWxzb24g YW5kIHRoZSBib2FyZCBvZiB0aGUgT3BlbiBTb2Z0d2FyZQotICAgSW5pdGlhdGl2ZSAoWzM0XWh0 dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcpIGZvciB0aGVpciBjb29wZXJhdGlvbiBpbgotICAgZGV2 ZWxvcGluZyB0aGUgbmV3IEMtS2VybWl0IGxpY2Vuc2UgYW5kIHRvIHRoZSBwcm9wcmlldG9ycyBv ZiB0aG9zZQotICAgZnJlZSBVTklYIGRpc3RyaWJ1dGlvbnMgdGhhdCBoYXZlIGluY29ycG9yYXRl ZCBDLUtlcm1pdCA3LjAgZm9yIHRoZWlyCi0gICBjb29wZXJhdGlvbiBhbmQgc3VwcG9ydCwgZXNw ZWNpYWxseSBGcmVlQlNEJ3MgSu+/vXJnIFd1bnNjaC4KLQotTk9URSBUTyBLRVJNSVQgOTUgVVNF UlMKLQotICAgS2VybWl0IDk1IGFuZCBDLUtlcm1pdCBzaGFyZSB0aGUgc2FtZSBjb21tYW5kIGFu ZCBzY3JpcHRpbmcgbGFuZ3VhZ2UsCi0gICB0aGUgc2FtZSBLZXJtaXQgZmlsZS10cmFuc2ZlciBw cm90b2NvbCBpbXBsZW1lbnRhdGlvbiwgYW5kIG11Y2ggZWxzZQotICAgYmVzaWRlcy4KLQotICAg TGlrZSB0aGUgYm9vayBbMzVdVXNpbmcgQy1LZXJtaXQsIHRoaXMgZmlsZSBjb25jZW50cmF0ZXMg b24gdGhlIGFzcGVjdHMKLSAgIG9mIEMtS2VybWl0IHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgdmVy c2lvbnM6IFVOSVgsIFZNUywgV2luZG93cywgT1MvMiwKLSAgIFZPUywgQU9TL1ZTLCBldGMuIFBs ZWFzZSByZWZlciB0byB5b3VyIEtlcm1pdCA5NSBkb2N1bWVudGF0aW9uIGZvcgotICAgaW5mb3Jt YXRpb24gdGhhdCBpcyBzcGVjaWZpYyB0byBLZXJtaXQgOTUuCi0KLSAgIEMtS2VybWl0IDcuMCBj b3JyZXNwb25kcyB0byBLZXJtaXQgOTUgMS4xLjE5LgotCi1DLUtFUk1JVCBWRVJTSU9OUyBBTkQg VkVSU0lPTiBOVU1CRVJTCi0KLSAgICJDLUtlcm1pdCIgcmVmZXJzIHRvIGFsbCB0aGUgbWFueSBw cm9ncmFtcyB0aGF0IGFyZSBjb21waWxlZCBpbiB3aG9sZQotICAgb3IgaW4gcGFydCBmcm9tIGNv bW1vbiBDLWxhbmd1YWdlIHNvdXJjZSBjb2RlLCBjb21wcmlzaW5nOgotCi0gICAgICogQSBLZXJt aXQgZmlsZSB0cmFuc2ZlciBwcm90b2NvbCBtb2R1bGUKLSAgICAgKiBBIGNvbW1hbmQgcGFyc2Vy IGFuZCBzY3JpcHQgZXhlY3V0aW9uIG1vZHVsZQotICAgICAqIEEgbW9kZW0tZGlhbGluZyBtb2R1 bGUKLSAgICAgKiBBIG5ldHdvcmsgc3VwcG9ydCBtb2R1bGUKLSAgICAgKiBBIGNoYXJhY3Rlci1z ZXQgdHJhbnNsYXRpb24gbW9kdWxlLgotCi0gICBhbmQgc2V2ZXJhbCBvdGhlcnMuIFRoZXNlICJz eXN0ZW0taW5kZXBlbmRlbnQiIG1vZHVsZXMgYXJlIGNvbWJpbmVkCi0gICB3aXRoIHN5c3RlbS1k ZXBlbmRlbnQgbW9kdWxlcyBmb3IgZWFjaCBwbGF0Zm9ybSB0byBwcm92aWRlIHRoZSByZXF1aXJl ZAotICAgaW5wdXQvb3V0cHV0IGZ1bmN0aW9ucywgYW5kIGFsc28gaW4gc29tZSBjYXNlcyBvdmVy bGFpZCB3aXRoIGFuCi0gICBhbHRlcm5hdGl2ZSB1c2VyIGludGVyZmFjZSwgc3VjaCBhcyBNYWNp bnRvc2ggS2VybWl0J3MgcG9pbnQtYW5kLWNsaWNrCi0gICBpbnRlcmZhY2UsIGFuZCBpbiBzb21l IGNhc2VzIGFsc28gYSB0ZXJtaW5hbCBlbXVsYXRvciwgYXMgS2VybWl0IDk1LgotCi0gICBUaGUg Qy1LZXJtaXQgdmVyc2lvbiBudW1iZXIgc3RhcnRlZCBhcyAxLjAsIC4uLiAzLjAsIDQuMCwgNC4x IGFuZCB0aGVuCi0gICAoYmVjYXVzZSBvZiBjb25mdXNpb24gYXQgdGhlIHRpbWUgd2l0aCBCZXJr ZWxleSBVTklYIDQuMiksIDRCLCA0QywgYW5kCi0gICBzbyBvbiwgd2l0aCB0aGUgc3BlY2lmaWMg ZWRpdCBudW1iZXIgaW4gcGFyZW50aGVzZXMsIGZvciBleGFtcGxlCi0gICA0RSgwNzIpIG9yIDVB KDE4OCkuIFRoaXMgc2NoZW1lIHdhcyB1c2VkIHRocm91Z2ggNUEoMTkxKSwgYnV0IG5vdyB3ZQot ICAgaGF2ZSBnb25lIGJhY2sgdG8gdGhlIHRyYWRpdGlvbmFsIG51bWJlcmluZyBzY2hlbWUgd2l0 aCBkZWNpbWFsIHBvaW50czoKLSAgIG1ham9yLm1pbm9yLmVkaXQ7IGZvciBleGFtcGxlIDcuMC4x OTYuIEludGVybmFsIHZlcnNpb24gbnVtYmVycyAodGhlCi0gICBcdih2ZXJzaW9uKSB2YXJpYWJs ZSksIGhvd2V2ZXIsIGFyZSBjb21wYXRpYmxlIGluIEMtS2VybWl0IDVBIHVwd2FyZHMuCi0KLSAg IE1lYW53aGlsZSwgQy1LZXJtaXQgZGVyaXZhdGl2ZXMgZm9yIHNvbWUgcGxhdGZvcm1zIChXaW5k b3dzLCBNYWNpbnRvc2gpCi0gICBtaWdodCBnbyB0aHJvdWdoIHNldmVyYWwgcmVsZWFzZXMgd2hp bGUgQy1LZXJtaXQgaXRzZWxmIHJlbWFpbnMgdGhlCi0gICBzYW1lLiBUaGVzZSB2ZXJzaW9ucyBo YXZlIHRoZWlyIG93biBwbGF0Zm9ybS1zcGVjaWZpYyB2ZXJzaW9uIG51bWJlcnMsCi0gICBzdWNo IGFzIEtlcm1pdCA5NSAxLjEuMSwgMS4xLjIsIGFuZCBzbyBvbi4KLQotICAgQy1LZXJtaXQgVmVy c2lvbiBIaXN0b3J5OgotCi0gIDEuMCAgICAgICAxOTgxLTE5ODIgICAgICAgICBDb21tYW5kLWxp bmUgb25seSwgNC4yIEJTRCBVTklYIG9ubHkKLSAgMi4wICAgICAgICgqKSAgICAgICAgICAgICAg ICh3aG8gcmVtZW1iZXJzLi4uKQotICAzLjAgICAgICAgTWF5IDE5ODQgICAgICAgICAgQ29tbWFu ZC1saW5lIG9ubHksIHN1cHBvcnRzIHNldmVyYWwgcGxhdGZvcm1zCi0gIDQuMC00LjEgICBGZWIt QXByIDE5ODUgKCopICBGaXJzdCBpbnRlcmFjdGl2ZSBhbmQgbW9kdWxhciB2ZXJzaW9uCi0gIDRD KDA1MCkgICBNYXkgMTk4NQotICA0RCgwNjApICAgQXByaWwgMTk4NgotICA0RSgwNjYpICAgQXVn dXN0IDE5ODcgICAgICAgTG9uZyBwYWNrZXRzCi0gIDRFKDA2OCkgICBKYW51YXJ5IDE5ODgKLSAg NEUoMDcyKSAgIEphbnVhcnkgMTk4OQotICA0RigwOTUpICAgQXVndXN0IDE5ODkgKCopICAgQXR0 cmlidXRlIHBhY2tldHMKLSAgNUEoMTg4KSAgIE5vdmVtYmVyIDE5OTIgICAgIFNjcmlwdGluZywg VENQL0lQLCBzbGlkaW5nIHdpbmRvd3MgKDEpCi0gIDVBKDE4OSkgICBTZXB0ZW1iZXIgMTk5MyAg ICBDb250cm9sLWNoYXIgdW5wcmVmaXhpbmcKLSAgNUEoMTkwKSAgIE9jdG9iZXIgMTk5NCAgICAg IFJlY292ZXJ5Ci0gIDVBKDE5MSkgICBBcHJpbCAxOTk1ICAgICAgICBPUy8yIG9ubHkKLSAgNi4w LjE5MiAgIFNlcHRlbWJlciAxOTk2ICAgIEludGVsbGlnZW50IGRpYWxpbmcsIGF1dG9kb3dubG9h ZCwgbG90cyBtb3JlICgyKQotICA2LjEuMTkzICAgMTk5Ny05OCAoKikgICAgICAgRGV2ZWxvcG1l bnQgb25seQotICA2LjEuMTk0ICAgSnVuZSAxOTk4ICAgICAgICAgSzk1IG9ubHkgLSBzd2l0Y2hl cywgZGlyZWN0b3J5IHJlY3Vyc2lvbiwgbW9yZQotICA3LjAuMTk1ICAgQXVndXN0IDE5OTkgICAg ICAgSUtTRCArIG1vcmUgKENVIG9ubHkgYXMgSzk1IDEuMS4xOC1DVSkKLSAgNy4wLjE5NiAgIDEg SmFudWFyeSAyMDAwICAgIFVuaWNvZGUsIGxvdHMgbW9yZQotCi0gICAoKikgTmV2ZXIgZm9ybWFs bHkgcmVsZWFzZWQgKDQuMCB3YXMgYSB0b3RhbCByZXdyaXRlKQotICAgKDEpIFVzaW5nIEMtS2Vy bWl0LCAxc3QgRWRpdGlvbgotICAgKDIpIFVzaW5nIEMtS2VybWl0LCAybmQgRWRpdGlvbgotCi1D T05URU5UUwotCi0gSS4gIFszNl1DLUtFUk1JVCBET0NVTUVOVEFUSU9OCi0KLSBJSS4gWzM3XU5F VyBGRUFUVVJFUwotCi0gICAgICgwKSBbMzhdSU5DT01QQVRJQklMSVRJRVMgV0lUSCBQUkVWSU9V UyBSRUxFQVNFUwotICAgICAoMSkgWzM5XVBST0dSQU0gQU5EIEZJTEUgTUFOQUdFTUVOVCBBTkQg Q09NTUFORFMKLSAgICAgICAgIDEuMC4gIFs0MF1CdWcgZml4ZXMKLSAgICAgICAgIDEuMS4gIFs0 MV1Db21tYW5kIENvbnRpbnVhdGlvbgotICAgICAgICAgMS4yLiAgWzQyXUVkaXRvciBJbnRlcmZh Y2UKLSAgICAgICAgIDEuMy4gIFs0M11XZWIgQnJvd3NlciBhbmQgRlRQIEludGVyZmFjZQotICAg ICAgICAgMS40LiAgWzQ0XUNvbW1hbmQgRWRpdGluZwotICAgICAgICAgMS41LiAgWzQ1XUNvbW1h bmQgU3dpdGNoZXMKLSAgICAgICAgICAgICAgIDEuNS4xLiBbNDZdR2VuZXJhbCBTd2l0Y2ggU3lu dGF4Ci0gICAgICAgICAgICAgICAxLjUuMi4gWzQ3XU9yZGVyIGFuZCBFZmZlY3Qgb2YgU3dpdGNo ZXMKLSAgICAgICAgICAgICAgIDEuNS4zLiBbNDhdRGlzdGluZ3Vpc2hpbmcgU3dpdGNoZXMgZnJv bSBPdGhlciBGaWVsZHMKLSAgICAgICAgICAgICAgIDEuNS40LiBbNDldU3RhbmRhcmQgRmlsZSBT ZWxlY3Rpb24gU3dpdGNoZXMKLSAgICAgICAgICAgICAgIDEuNS41LiBbNTBdU2V0dGluZyBQcmVm ZXJlbmNlcyBmb3IgRGlmZmVyZW50IENvbW1hbmRzCi0gICAgICAgICAxLjYuICBbNTFdRGF0ZXMg YW5kIFRpbWVzCi0gICAgICAgICAxLjcuICBbNTJdUGFydGlhbCBDb21wbGV0aW9uIG9mIEtleXdv cmRzCi0gICAgICAgICAxLjguICBbNTNdQ29tbWFuZCBSZWNhbGwKLSAgICAgICAgIDEuOS4gIFs1 NF1FWElUIE1lc3NhZ2VzCi0gICAgICAgICAxLjEwLiBbNTVdTWFuYWdpbmcgS2V5Ym9hcmQgSW50 ZXJydXB0aW9ucwotICAgICAgICAgMS4xMS4gWzU2XVRhbWluZyB0aGUgV2lsZCBCYWNrc2xhc2gg LS0gUGFydCBEZXV4Ci0gICAgICAgICAgICAgICAxLjExLjEuIFs1N11CYWNrZ3JvdW5kCi0gICAg ICAgICAgICAgICAxLjExLjIuIFs1OF1LZXJtaXQncyBRdW90aW5nIFJ1bGVzCi0gICAgICAgICAg ICAgICAxLjExLjMuIFs1OV1QYXNzaW5nIERPUyBGaWxlbmFtZXMgZnJvbSBLZXJtaXQgdG8gU2hl bGwgQ29tbWFuZHMKLSAgICAgICAgICAgICAgIDEuMTEuNC4gWzYwXVVzaW5nIFZhcmlhYmxlcyB0 byBIb2xkIERPUyBGaWxlbmFtZXMKLSAgICAgICAgICAgICAgIDEuMTEuNS4gWzYxXVBhc3Npbmcg RE9TIEZpbGVuYW1lcyBhcyBQYXJhbWV0ZXJzIHRvIE1hY3JvcwotICAgICAgICAgICAgICAgMS4x MS42LiBbNjJdUGFzc2luZyBET1MgRmlsZSBOYW1lcyBmcm9tIE1hY3JvIFBhcmFtZXRlcnMgdG8g dGhlIEQKLU9TIFNoZWxsCi0gICAgICAgICAgICAgICAxLjExLjcuIFs2M11QYXNzaW5nIERPUyBG aWxlbmFtZXMgdG8gS2VybWl0IGZyb20gdGhlIFNoZWxsCi0gICAgICAgICAxLjEyLiBbNjRdRGVi dWdnaW5nCi0gICAgICAgICAxLjEzLiBbNjVdTG9ncwotICAgICAgICAgMS4xNC4gWzY2XUF1dG9t YXRpYyBGaWxlLVRyYW5zZmVyIFBhY2tldCBSZWNvZ25pdGlvbiBhdCB0aGUgQ29tbWFuZCBQcm8K LW1wdAotICAgICAgICAgMS4xNS4gWzY3XVRoZSBUWVBFIENvbW1hbmQKLSAgICAgICAgIDEuMTYu IFs2OF1UaGUgUkVTRVQgQ29tbWFuZAotICAgICAgICAgMS4xNy4gWzY5XVRoZSBDT1BZIGFuZCBS RU5BTUUgQ29tbWFuZHMKLSAgICAgICAgIDEuMTguIFs3MF1UaGUgTUFOVUFMIENvbW1hbmQKLSAg ICAgICAgIDEuMTkuIFs3MV1TdHJpbmcgYW5kIEZpbGVuYW1lIE1hdGNoaW5nIFBhdHRlcm5zCi0g ICAgICAgICAxLjIwLiBbNzJdTXVsdGlwbGUgQ29tbWFuZHMgb24gT25lIExpbmUKLSAgICAgICAg IDEuMjEuIFs3M11XaGF0IERvIEkgSGF2ZT8KLSAgICAgICAgIDEuMjIuIFs3NF1HZW5lcmFsaXpl ZCBGaWxlIElucHV0IGFuZCBPdXRwdXQKLSAgICAgICAgICAgICAgIDEuMjIuMS4gWzc1XVdoeSBB bm90aGVyIEkvTyBTeXN0ZW0/Ci0gICAgICAgICAgICAgICAxLjIyLjIuIFs3Nl1UaGUgRklMRSBD b21tYW5kCi0gICAgICAgICAgICAgICAxLjIyLjMuIFs3N11GSUxFIENvbW1hbmQgRXhhbXBsZXMK LSAgICAgICAgICAgICAgIDEuMjIuNC4gWzc4XUNoYW5uZWwgTnVtYmVycwotICAgICAgICAgICAg ICAgMS4yMi41LiBbNzldRklMRSBDb21tYW5kIEVycm9yIENvZGVzCi0gICAgICAgICAgICAgICAx LjIyLjYuIFs4MF1GaWxlIEkvTyBWYXJpYWJsZXMKLSAgICAgICAgICAgICAgIDEuMjIuNy4gWzgx XUZpbGUgSS9PIEZ1bmN0aW9ucwotICAgICAgICAgICAgICAgMS4yMi44LiBbODJdRmlsZSBJL08g RnVuY3Rpb24gRXhhbXBsZXMKLSAgICAgICAgIDEuMjMuIFs4M11UaGUgRVhFQyBDb21tYW5kCi0g ICAgICAgICAxLjI0LiBbODRdR2V0dGluZyBLZXl3b3JkIExpc3RzIHdpdGggJz8nCi0gICAgICgy KSBbODVdTUFLSU5HIEFORCBVU0lORyBDT05ORUNUSU9OUwotICAgICAgICAgMi4wLiBbODZdU0VU IExJTkUgYW5kIFNFVCBIT1NUIENvbW1hbmQgU3dpdGNoZXMKLSAgICAgICAgIDIuMS4gWzg3XURp YWxpbmcKLSAgICAgICAgICAgICAgMi4xLjEuIFs4OF1UaGUgRGlhbCBSZXN1bHQgTWVzc2FnZQot ICAgICAgICAgICAgICAyLjEuMi4gWzg5XUxvbmctRGlzdGFuY2UgRGlhbGluZyBDaGFuZ2VzCi0g ICAgICAgICAgICAgIDIuMS4zLiBbOTBdRm9yY2luZyBMb25nLURpc3RhbmNlIERpYWxpbmcKLSAg ICAgICAgICAgICAgMi4xLjQuIFs5MV1FeGNoYW5nZS1TcGVjaWZpYyBEaWFsaW5nIERlY2lzaW9u cwotICAgICAgICAgICAgICAyLjEuNS4gWzkyXUNhdXRpb25zIGFib3V0IENoZWFwZXN0LUZpcnN0 IERpYWxpbmcKLSAgICAgICAgICAgICAgMi4xLjYuIFs5M11CbGluZCBEaWFsaW5nIChEaWFsaW5n IHdpdGggTm8gRGlhbHRvbmUpCi0gICAgICAgICAgICAgIDIuMS43LiBbOTRdVHJpbW1pbmcgdGhl IERpYWxpbmcgRGlhbG9nCi0gICAgICAgICAgICAgIDIuMS44LiBbOTVdQ29udHJvbGxpbmcgdGhl IERpYWxpbmcgU3BlZWQKLSAgICAgICAgICAgICAgMi4xLjkuIFs5Nl1QcmV0ZXN0aW5nIFBob25l IE51bWJlciBDb252ZXJzaW9ucwotICAgICAgICAgICAgICAyLjEuMTAuIFs5N11HcmVhdGVyIENv bnRyb2wgb3ZlciBQYXJ0aWFsIERpYWxpbmcKLSAgICAgICAgICAgICAgMi4xLjExLiBbOThdTmV3 IERJQUwtcmVsYXRlZCBWYXJpYWJsZXMgYW5kIEZ1bmN0aW9ucwotICAgICAgICAgICAgICAyLjEu MTIuIFs5OV1JbmNyZWFzZWQgRmxleGliaWxpdHkgb2YgUEJYIERpYWxpbmcKLSAgICAgICAgICAg ICAgMi4xLjEzLiBbMTAwXVRoZSBESUFMIG1hY3JvIC0gTGFzdC1NaW51dGUgUGhvbmUgTnVtYmVy IENvbnZlcnNpb25zCi0gICAgICAgICAgICAgIDIuMS4xNC4gWzEwMV1BdXRvbWF0aWMgVG9uZS9Q dWxzZSBEaWFsaW5nIFNlbGVjdGlvbgotICAgICAgICAgICAgICAyLjEuMTUuIFsxMDJdRGlhbC1N b2RpZmllciBWYXJpYWJsZXMKLSAgICAgICAgICAgICAgMi4xLjE2LiBbMTAzXUdpdmluZyBNdWx0 aXBsZSBOdW1iZXJzIHRvIHRoZSBESUFMIENvbW1hbmQKLSAgICAgICAgIDIuMi4gWzEwNF1Nb2Rl bXMKLSAgICAgICAgICAgICAgMi4yLjEuIFsxMDVdTmV3IE1vZGVtIFR5cGVzCi0gICAgICAgICAg ICAgIDIuMi4yLiBbMTA2XU5ldyBNb2RlbSBDb250cm9scwotICAgICAgICAgMi4zLiBbMTA3XVRF TE5FVCBhbmQgUkxPR0lOCi0gICAgICAgICAgICAgIDIuMy4wLiBbMTA4XUJ1ZyBGaXhlcwotICAg ICAgICAgICAgICAyLjMuMS4gWzEwOV1UZWxuZXQgQmluYXJ5IE1vZGUgQnVnIEFkanVzdG1lbnRz Ci0gICAgICAgICAgICAgIDIuMy4yLiBbMTEwXVZNUyBVQ1ggVGVsbmV0IFBvcnQgQnVnIEFkanVz dG1lbnQKLSAgICAgICAgICAgICAgMi4zLjMuIFsxMTFdVGVsbmV0IE5ldyBFbnZpcm9ubWVudCBP cHRpb24KLSAgICAgICAgICAgICAgMi4zLjQuIFsxMTJdVGVsbmV0IExvY2F0aW9uIE9wdGlvbgot ICAgICAgICAgICAgICAyLjMuNS4gWzExM11Db25uZWN0aW5nIHRvIFJhdyBUQ1AgU29ja2V0cwot ICAgICAgICAgICAgICAyLjMuNi4gWzExNF1JbmNvbWluZyBUQ1AgQ29ubmVjdGlvbnMKLSAgICAg ICAgIDIuNC4gWzExNV1UaGUgRUlHSFRCSVQgQ29tbWFuZAotICAgICAgICAgMi41LiBbMTE2XVRo ZSBTZXJ2aWNlcyBEaXJlY3RvcnkKLSAgICAgICAgIDIuNi4gWzExN11DbG9zaW5nIENvbm5lY3Rp b25zCi0gICAgICAgICAyLjcuIFsxMThdVXNpbmcgQy1LZXJtaXQgd2l0aCBFeHRlcm5hbCBDb21t dW5pY2F0aW9uIFByb2dyYW1zCi0gICAgICAgICAgICAgIDIuNy4wLiBbMTE5XUMtS2VybWl0IG92 ZXIgdG4zMjcwIGFuZCB0bjUyNTAKLSAgICAgICAgICAgICAgMi43LjEuIFsxMjBdQy1LZXJtaXQg b3ZlciBUZWxuZXQKLSAgICAgICAgICAgICAgMi43LjIuIFsxMjFdQy1LZXJtaXQgb3ZlciBSbG9n aW4KLSAgICAgICAgICAgICAgMi43LjMuIFsxMjJdQy1LZXJtaXQgb3ZlciBTZXJpYWwgQ29tbXVu aWNhdGlvbiBQcm9ncmFtcwotICAgICAgICAgICAgICAyLjcuNC4gWzEyM11DLUtlcm1pdCBvdmVy IFNlY3VyZSBOZXR3b3JrIENsaWVudHMKLSAgICAgICAgICAgICAgMi43LjQuMS4gWzEyNF1TU0gK LSAgICAgICAgICAgICAgMi43LjQuMi4gWzEyNV1TU0wKLSAgICAgICAgICAgICAgMi43LjQuMy4g WzEyNl1TUlAKLSAgICAgICAgICAgICAgMi43LjQuNC4gWzEyN11TT0NLUwotICAgICAgICAgICAg ICAyLjcuNC41LiBbMTI4XUtlcmJlcm9zIGFuZCBTUlAKLSAgICAgICAgIDIuOC4gWzEyOV1TY3Jp cHRpbmcgTG9jYWwgUHJvZ3JhbXMKLSAgICAgICAgIDIuOS4gWzEzMF1YLjI1IE5ldHdvcmtpbmcK LSAgICAgICAgICAgICAgMi45LjEuIFsxMzFdSUJNIEFJWExpbmsvWC4yNSBOZXR3b3JrIFByb3Zp ZGVyIEludGVyZmFjZSBmb3IgQUlYCi0gICAgICAgICAgICAgIDIuOS4yLiBbMTMyXUhQLVVYIFgu MjUKLSAgICAgICAgIDIuMTAuIFsxMzNdQWRkaXRpb25hbCBTZXJpYWwgUG9ydCBDb250cm9scwot ICAgICAgICAgMi4xMS4gWzEzNF1HZXR0aW5nIEFjY2VzcyB0byB0aGUgRGlhbG91dCBEZXZpY2UK LSAgICAgICAgIDIuMTIuIFsxMzVdVGhlIENvbm5lY3Rpb24gTG9nCi0gICAgICAgICAyLjEzLiBb MTM2XUF1dG9tYXRpYyBDb25uZWN0aW9uLVNwZWNpZmljIEZsb3cgQ29udHJvbCBTZWxlY3Rpb24K LSAgICAgICAgIDIuMTQuIFsxMzddVHJhcHBpbmcgQ29ubmVjdGlvbiBFc3RhYmxpc2htZW50IGFu ZCBMb3NzCi0gICAgICAgICAyLjE1LiBbMTM4XUNvbnRhY3RpbmcgV2ViIFNlcnZlcnMgd2l0aCB0 aGUgSFRUUCBDb21tYW5kCi0gICAgICgzKSBbMTM5XVRFUk1JTkFMIENPTk5FQ1RJT04KLSAgICAg ICAgIDMuMS4gWzE0MF1DT05ORUNUIENvbW1hbmQgU3dpdGNoZXMKLSAgICAgICAgIDMuMi4gWzE0 MV1UcmlnZ2VycwotICAgICAgICAgMy4zLiBbMTQyXVRyYW5zcGFyZW50IFByaW50aW5nCi0gICAg ICAgICAzLjQuIFsxNDNdQmluYXJ5IGFuZCBUZXh0IFNlc3Npb24gTG9ncwotICAgICAoNCkgWzE0 NF1GSUxFIFRSQU5TRkVSIEFORCBNQU5BR0VNRU5UCi0gICAgICAgICA0LjAuIFsxNDVdQnVnIEZp eGVzLCBNaW5vciBDaGFuZ2VzLCBhbmQgQ2xhcmlmaWNhdGlvbnMKLSAgICAgICAgIDQuMS4gWzE0 Nl1GaWxlLVRyYW5zZmVyIEZpbGVuYW1lIFRlbXBsYXRlcwotICAgICAgICAgNC4xLjEuIFsxNDdd VGVtcGxhdGVzIGluIHRoZSBBcy1OYW1lCi0gICAgICAgICA0LjEuMi4gWzE0OF1UZW1wbGF0ZXMg b24gdGhlIENvbW1hbmQgTGluZQotICAgICAgICAgNC4xLjMuIFsxNDldUG9zdC1UcmFuc2ZlciBS ZW5hbWluZwotICAgICAgICAgNC4yLiBbMTUwXUZpbGUtVHJhbnNmZXIgUGlwZXMgYW5kIEZpbHRl cnMKLSAgICAgICAgIDQuMi4xLiBbMTUxXUludHJvZHVjdGlvbgotICAgICAgICAgNC4yLjEuMS4g WzE1Ml1UZXJtaW5vbG9neQotICAgICAgICAgNC4yLjEuMi4gWzE1M11Ob3RhdGlvbgotICAgICAg ICAgNC4yLjEuMy4gWzE1NF1TZWN1cml0eQotICAgICAgICAgNC4yLjIuIFsxNTVdQ29tbWFuZHMg Zm9yIFRyYW5zZmVycmluZyBmcm9tIGFuZCB0byBQaXBlcwotICAgICAgICAgNC4yLjIuMS4gWzE1 Nl1TZW5kaW5nIGZyb20gYSBDb21tYW5kCi0gICAgICAgICA0LjIuMi4yLiBbMTU3XVJlY2Vpdmlu ZyB0byBhIENvbW1hbmQKLSAgICAgICAgIDQuMi4zLiBbMTU4XVVzaW5nIEZpbGUtVHJhbnNmZXIg RmlsdGVycwotICAgICAgICAgNC4yLjMuMS4gWzE1OV1UaGUgU0VORCBGaWx0ZXIKLSAgICAgICAg IDQuMi4zLjIuIFsxNjBdVGhlIFJFQ0VJVkUgRmlsdGVyCi0gICAgICAgICA0LjIuNC4gWzE2MV1J bXBsaWNpdCBVc2Ugb2YgUGlwZXMKLSAgICAgICAgIDQuMi41LiBbMTYyXVN1Y2Nlc3MgYW5kIEZh aWx1cmUgb2YgUGlwZWQgQ29tbWFuZHMKLSAgICAgICAgIDQuMi42LiBbMTYzXUNhdXRpb25zIGFi b3V0IFVzaW5nIFBpcGVzIHRvIFRyYW5zZmVyIERpcmVjdG9yeSBUcmVlcwotICAgICAgICAgNC4y LjcuIFsxNjRdUGlwZXMgYW5kIEVuY3J5cHRpb24KLSAgICAgICAgIDQuMi44LiBbMTY1XUNvbW1h bmRzIGFuZCBGdW5jdGlvbnMgUmVsYXRlZCB0byBQaXBlcwotICAgICAgICAgNC4yLjguMS4gWzE2 Nl1UaGUgT1BFTiAhUkVBRCBhbmQgT1BFTiAhV1JJVEUgQ29tbWFuZHMKLSAgICAgICAgIDQuMi44 LjIuIFsxNjddVGhlIFJFRElSRUNUIENvbW1hbmQKLSAgICAgICAgIDQuMi44LjMuIFsxNjhdUmVj ZWl2aW5nIE1haWwgYW5kIFByaW50IEpvYnMKLSAgICAgICAgIDQuMi44LjQuIFsxNjldUGlwZS1S ZWxhdGVkIEZ1bmN0aW9ucwotICAgICAgICAgNC4zLiBbMTcwXUF1dG9tYXRpYyBQZXItRmlsZSBU ZXh0L0JpbmFyeSBNb2RlIFN3aXRjaGluZwotICAgICAgICAgNC4zLjEuIFsxNzFdRXhjZXB0aW9u cwotICAgICAgICAgNC4zLjIuIFsxNzJdT3ZlcnZpZXcKLSAgICAgICAgIDQuMy4zLiBbMTczXUNv bW1hbmRzCi0gICAgICAgICA0LjMuNC4gWzE3NF1FeGFtcGxlcwotICAgICAgICAgNC40LiBbMTc1 XUZpbGUgUGVybWlzc2lvbnMKLSAgICAgICAgIDQuNC4xLiBbMTc2XVdoZW4gQVRUUklCVVRFUyBQ Uk9URUNUSU9OIGlzIE9GRgotICAgICAgICAgNC40LjEuMS4gWzE3N11Vbml4Ci0gICAgICAgICA0 LjQuMS4yLiBbMTc4XVZNUwotICAgICAgICAgNC40LjIuIFsxNzldV2hlbiBBVFRSSUJVVEVTIFBS T1RFQ1RJT04gaXMgT04KLSAgICAgICAgIDQuNC4yLjEuIFsxODBdU3lzdGVtLVNwZWNpZmljIFBl cm1pc3Npb25zCi0gICAgICAgICA0LjQuMi4xLjEuIFsxODFdVU5JWAotICAgICAgICAgNC40LjIu MS4yLiBbMTgyXVZNUwotICAgICAgICAgNC40LjIuMi4gWzE4M11TeXN0ZW0tSW5kZXBlbmRlbnQg UGVybWlzc2lvbnMKLSAgICAgICAgIDQuNS4gWzE4NF1GaWxlIE1hbmFnZW1lbnQgQ29tbWFuZHMK LSAgICAgICAgIDQuNS4xLiBbMTg1XVRoZSBESVJFQ1RPUlkgQ29tbWFuZAotICAgICAgICAgNC41 LjIuIFsxODZdVGhlIENEIGFuZCBCQUNLIENvbW1hbmRzCi0gICAgICAgICA0LjUuMi4xLiBbMTg3 XVBhcnNpbmcgSW1wcm92ZW1lbnRzCi0gICAgICAgICA0LjUuMi4yLiBbMTg4XVRoZSBDRFBBVEgK LSAgICAgICAgIDQuNS4zLiBbMTg5XUNyZWF0aW5nIGFuZCBSZW1vdmluZyBEaXJlY3Rvcmllcwot ICAgICAgICAgNC41LjQuIFsxOTBdVGhlIERFTEVURSBhbmQgUFVSR0UgQ29tbWFuZHMKLSAgICAg ICAgIDQuNi4gWzE5MV1TdGFydGluZyB0aGUgUmVtb3RlIEtlcm1pdCBTZXJ2ZXIgQXV0b21hdGlj YWxseQotICAgICAgICAgNC43LiBbMTkyXUZpbGUtVHJhbnNmZXIgQ29tbWFuZCBTd2l0Y2hlcwot ICAgICAgICAgNC43LjEuIFsxOTNdU0VORCBDb21tYW5kIFN3aXRjaGVzCi0gICAgICAgICA0Ljcu Mi4gWzE5NF1HRVQgQ29tbWFuZCBTd2l0Y2hlcwotICAgICAgICAgNC43LjMuIFsxOTVdUkVDRUlW RSBDb21tYW5kIFN3aXRjaGVzCi0gICAgICAgICA0LjguIFsxOTZdTWlub3IgS2VybWl0IFByb3Rv Y29sIEltcHJvdmVtZW50cwotICAgICAgICAgNC44LjEuIFsxOTddTXVsdGlwbGUgQXR0cmlidXRl IFBhY2tldHMKLSAgICAgICAgIDQuOC4yLiBbMTk4XVZlcnkgU2hvcnQgUGFja2V0cwotICAgICAg ICAgNC45LiBbMTk5XVdpbGRjYXJkIC8gRmlsZSBHcm91cCBFeHBhbnNpb24KLSAgICAgICAgIDQu OS4xLiBbMjAwXUluIFVOSVggQy1LZXJtaXQKLSAgICAgICAgIDQuOS4yLiBbMjAxXUluIEtlcm1p dCA5NQotICAgICAgICAgNC45LjMuIFsyMDJdSW4gVk1TLCBBT1MvVlMsIE9TLTksIFZPUywgZXRj LgotICAgICAgICAgNC4xMC4gWzIwM11BZGRpdGlvbmFsIFBhdGhuYW1lIENvbnRyb2xzCi0gICAg ICAgICA0LjExLiBbMjA0XVJlY3Vyc2l2ZSBTRU5EIGFuZCBHRVQ6IFRyYW5zZmVycmluZyBEaXJl Y3RvcnkgVHJlZXMKLSAgICAgICAgIDQuMTEuMS4gWzIwNV1Db21tYW5kLUxpbmUgT3B0aW9ucwot ICAgICAgICAgNC4xMS4yLiBbMjA2XVRoZSBTRU5EIC9SRUNVUlNJVkUgQ29tbWFuZAotICAgICAg ICAgNC4xMS4zLiBbMjA3XVRoZSBHRVQgL1JFQ1VSU0lWRSBDb21tYW5kCi0gICAgICAgICA0LjEx LjQuIFsyMDhdTmV3IGFuZCBDaGFuZ2VkIEZpbGUgRnVuY3Rpb25zCi0gICAgICAgICA0LjExLjUu IFsyMDldTW92aW5nIERpcmVjdG9yeSBUcmVlcyBCZXR3ZWVuIExpa2UgU3lzdGVtcwotICAgICAg ICAgNC4xMS42LiBbMjEwXU1vdmluZyBEaXJlY3RvcnkgVHJlZXMgQmV0d2VlbiBVbmxpa2UgU3lz dGVtcwotICAgICAgICAgNC4xMi4gWzIxMV1XaGVyZSBEaWQgTXkgRmlsZSBHbz8KLSAgICAgICAg IDQuMTMuIFsyMTJdRmlsZSBPdXRwdXQgQnVmZmVyIENvbnRyb2wKLSAgICAgICAgIDQuMTQuIFsy MTNdSW1wcm92ZWQgUmVzcG9uc2l2ZW5lc3MKLSAgICAgICAgIDQuMTUuIFsyMTRdRG91Ymxpbmcg YW5kIElnbm9yaW5nIENoYXJhY3RlcnMgZm9yIFRyYW5zcGFyZW5jeQotICAgICAgICAgNC4xNi4g WzIxNV1OZXcgRmlsZS1UcmFuc2ZlciBEaXNwbGF5IEZvcm1hdHMKLSAgICAgICAgIDQuMTcuIFsy MTZdTmV3IFRyYW5zYWN0aW9uIExvZyBGb3JtYXRzCi0gICAgICAgICA0LjE3LjEuIFsyMTddVGhl IEJSSUVGIEZvcm1hdAotICAgICAgICAgNC4xNy4yLiBbMjE4XVRoZSBGVFAgRm9ybWF0Ci0gICAg ICAgICA0LjE4LiBbMjE5XVVucHJlZml4aW5nIE5VTAotICAgICAgICAgNC4xOS4gWzIyMF1DbGVh ci1DaGFubmVsIFByb3RvY29sCi0gICAgICAgICA0LjIwLiBbMjIxXVN0cmVhbWluZyBQcm90b2Nv bAotICAgICAgICAgNC4yMC4xLiBbMjIyXUNvbW1hbmRzIGZvciBTdHJlYW1pbmcKLSAgICAgICAg IDQuMjAuMi4gWzIyM11FeGFtcGxlcyBvZiBTdHJlYW1pbmcKLSAgICAgICAgIDQuMjAuMi4xLiBb MjI0XVN0cmVhbWluZyBvbiBTb2NrZXQtdG8tU29ja2V0IENvbm5lY3Rpb25zCi0gICAgICAgICA0 LjIwLjIuMi4gWzIyNV1TdHJlYW1pbmcgb24gVGVsbmV0IENvbm5lY3Rpb25zCi0gICAgICAgICA0 LjIwLjIuMy4gWzIyNl1TdHJlYW1pbmcgd2l0aCBMaW1pdGVkIFBhY2tldCBMZW5ndGgKLSAgICAg ICAgIDQuMjAuMi40LiBbMjI3XVN0cmVhbWluZyBvbiBEaWFsdXAgQ29ubmVjdGlvbnMKLSAgICAg ICAgIDQuMjAuMi41LiBbMjI4XVN0cmVhbWluZyBvbiBYLjI1IENvbm5lY3Rpb25zCi0gICAgICAg ICA0LjIwLjMuIFsyMjldU3RyZWFtaW5nIC0gUHJlbGltaW5hcnkgQ29uY2x1c2lvbnMKLSAgICAg ICAgIDQuMjEuIFsyMzBdVGhlIFRSQU5TTUlUIENvbW1hbmQKLSAgICAgICAgIDQuMjIuIFsyMzFd Q29waW5nIHdpdGggRmF1bHR5IEtlcm1pdCBJbXBsZW1lbnRhdGlvbnMKLSAgICAgICAgIDQuMjIu MS4gWzIzMl1GYWlsdXJlIHRvIEFjY2VwdCBNb2Rlcm4gTmVnb3RpYXRpb24gU3RyaW5ncwotICAg ICAgICAgNC4yMi4yLiBbMjMzXUZhaWx1cmUgdG8gTmVnb3RpYXRlIDh0aC1iaXQgUHJlZml4aW5n Ci0gICAgICAgICA0LjIyLjMuIFsyMzRdQ29ycnVwdCBGaWxlcwotICAgICAgICAgNC4yMi40LiBb MjM1XVNwdXJpb3VzIENhbmNlbGxhdGlvbnMKLSAgICAgICAgIDQuMjIuNS4gWzIzNl1TcHVyaW91 cyBSZWZ1c2FscwotICAgICAgICAgNC4yMi42LiBbMjM3XUZhaWx1cmVzIGR1cmluZyB0aGUgRGF0 YSBUcmFuc2ZlciBQaGFzZQotICAgICAgICAgNC4yMi43LiBbMjM4XUZyYWN0dXJlZCBGaWxlbmFt ZXMKLSAgICAgICAgIDQuMjIuOC4gWzIzOV1CYWQgRmlsZSBEYXRlcwotICAgICAgICAgNC4yMy4g WzI0MF1GaWxlIFRyYW5zZmVyIFJlY292ZXJ5Ci0gICAgICAgICA0LjI0LiBbMjQxXUZJTEUgQ09M TElTSU9OIFVQREFURSBDbGFyaWZpY2F0aW9uCi0gICAgICAgICA0LjI1LiBbMjQyXUF1dG9kb3du bG9hZCBJbXByb3ZlbWVudHMKLSAgICAgKDUpIFsyNDNdQ0xJRU5UL1NFUlZFUgotICAgICAgICAg NS4wLiBbMjQ0XUhpbnRzCi0gICAgICAgICA1LjEuIFsyNDVdTmV3IENvbW1hbmQtTGluZSBPcHRp b25zCi0gICAgICAgICA1LjIuIFsyNDZdTmV3IENsaWVudCBDb21tYW5kcwotICAgICAgICAgNS4z LiBbMjQ3XU5ldyBTZXJ2ZXIgQ2FwYWJpbGl0aWVzCi0gICAgICAgICA1LjMuMS4gWzI0OF1DcmVh dGluZyBhbmQgUmVtb3ZpbmcgRGlyZWN0b3JpZXMKLSAgICAgICAgIDUuMy4yLiBbMjQ5XURpcmVj dG9yeSBMaXN0aW5ncwotICAgICAgICAgNS40LiBbMjUwXVN5bnRheCBmb3IgUmVtb3RlIEZpbGVu YW1lcyB3aXRoIEVtYmVkZGVkIFNwYWNlcwotICAgICAgICAgNS41LiBbMjUxXUF1dG9tYXRpYyBP cmllbnRhdGlvbiBNZXNzYWdlcyB1cG9uIERpcmVjdG9yeSBDaGFuZ2UKLSAgICAgICAgIDUuNi4g WzI1Ml1OZXcgU2VydmVyIENvbnRyb2xzCi0gICAgICAgICA1LjcuIFsyNTNdVGltZW91dHMgZHVy aW5nIFJFTU9URSBIT1NUIENvbW1hbmQgRXhlY3V0aW9uCi0gICAgICg2KSBbMjU0XUlOVEVSTkFU SU9OQUwgQ0hBUkFDVEVSIFNFVFMKLSAgICAgICAgIDYuMC4gWzI1NV1JU08gODg1OS0xNSBMYXRp biBBbHBoYWJldCA5Ci0gICAgICAgICA2LjEuIFsyNTZdVGhlIEhQLVJvbWFuOCBDaGFyYWN0ZXIg U2V0Ci0gICAgICAgICA2LjIuIFsyNTddR3JlZWsgQ2hhcmFjdGVyIFNldHMKLSAgICAgICAgIDYu My4gWzI1OF1BZGRpdGlvbmFsIExhdGluLTIgQ2hhcmFjdGVyIFNldHMKLSAgICAgICAgIDYuNC4g WzI1OV1BZGRpdGlvbmFsIEN5cmlsbGljIENoYXJhY3RlciBTZXRzCi0gICAgICAgICA2LjUuIFsy NjBdQXV0b21hdGljIENoYXJhY3Rlci1TZXQgU3dpdGNoaW5nCi0gICAgICAgICA2LjYuIFsyNjFd VW5pY29kZQotICAgICAgICAgNi42LjEuIFsyNjJdT3ZlcnZpZXcgb2YgVW5pY29kZQotICAgICAg ICAgNi42LjIuIFsyNjNdVUNTIEJ5dGUgT3JkZXIKLSAgICAgICAgIDYuNi4yLiBbMjY0XVVDUyBU cmFuc2Zvcm1hdGlvbiBGb3JtYXRzCi0gICAgICAgICA2LjYuMy4gWzI2NV1Db25mb3JtYW5jZSBM ZXZlbHMKLSAgICAgICAgIDYuNi40LiBbMjY2XVJlbGF0aW9uc2hpcCBvZiBVbmljb2RlIHdpdGgg S2VybWl0J3MgT3RoZXIgQ2hhcmFjdGVyIFNldHMKLSAgICAgICAgIDYuNi41LiBbMjY3XUtlcm1p dCdzIFVuaWNvZGUgRmVhdHVyZXMKLSAgICAgICAgIDYuNi41LjEuIFsyNjhdRmlsZSBUcmFuc2Zl cgotICAgICAgICAgNi42LjUuMi4gWzI2OV1UaGUgVFJBTlNMQVRFIENvbW1hbmQKLSAgICAgICAg IDYuNi41LjMuIFsyNzBdVGVybWluYWwgQ29ubmVjdGlvbgotICAgICAgICAgNi42LjUuNC4gWzI3 MV1UaGUgVFJBTlNNSVQgQ29tbWFuZAotICAgICAgICAgNi42LjUuNS4gWzI3Ml1TdW1tYXJ5IG9m IEtlcm1pdCBVbmljb2RlIENvbW1hbmRzCi0gICAgICAgICA2LjcuIFsyNzNdQ2xpZW50L1NlcnZl ciBDaGFyYWN0ZXItU2V0IFN3aXRjaGluZwotICAgICAoNykgWzI3NF1TQ1JJUFQgUFJPR1JBTU1J TkcKLSAgICAgICAgIDcuMC4gWzI3NV1CdWcgRml4ZXMKLSAgICAgICAgIDcuMS4gWzI3Nl1UaGUg SU5QVVQgQ29tbWFuZAotICAgICAgICAgNy4xLjEuIFsyNzddSU5QVVQgVGltZW91dHMKLSAgICAg ICAgIDcuMS4yLiBbMjc4XU5ldyBJTlBVVCBDb250cm9scwotICAgICAgICAgNy4xLjMuIFsyNzld SU5QVVQgd2l0aCBQYXR0ZXJuIE1hdGNoaW5nCi0gICAgICAgICA3LjEuNC4gWzI4MF1UaGUgSU5Q VVQgTWF0Y2ggUmVzdWx0Ci0gICAgICAgICA3LjIuIFsyODFdTmV3IG9yIEltcHJvdmVkIEJ1aWx0 LUluIFZhcmlhYmxlcwotICAgICAgICAgNy4zLiBbMjgyXU5ldyBvciBJbXByb3ZlZCBCdWlsdC1J biBGdW5jdGlvbnMKLSAgICAgICAgIDcuNC4gWzI4M11OZXcgSUYgQ29uZGl0aW9ucwotICAgICAg ICAgNy41LiBbMjg0XVVzaW5nIE1vcmUgdGhhbiBUZW4gTWFjcm8gQXJndW1lbnRzCi0gICAgICAg ICA3LjYuIFsyODVdQ2xhcmlmaWNhdGlvbiBvZiBGdW5jdGlvbiBDYWxsIFN5bnRheAotICAgICAg ICAgNy43LiBbMjg2XUF1dG9kb3dubG9hZCBkdXJpbmcgSU5QVVQgQ29tbWFuZCBFeGVjdXRpb24K LSAgICAgICAgIDcuOC4gWzI4N11CdWlsdC1pbiBIZWxwIGZvciBGdW5jdGlvbnMuCi0gICAgICAg ICA3LjkuIFsyODhdVmFyaWFibGUgQXNzaWdubWVudHMKLSAgICAgICAgIDcuOS4xLiBbMjg5XUFz c2lnbm1lbnQgT3BlcmF0b3JzCi0gICAgICAgICA3LjkuMi4gWzI5MF1OZXcgQXNzaWdubWVudCBD b21tYW5kcwotICAgICAgICAgNy4xMC4gWzI5MV1BcnJheXMKLSAgICAgICAgIDcuMTAuMS4gWzI5 Ml1BcnJheSBJbml0aWFsaXplcnMKLSAgICAgICAgIDcuMTAuMi4gWzI5M11UdXJuaW5nIGEgU3Ry aW5nIGludG8gYW4gQXJyYXkgb2YgV29yZHMKLSAgICAgICAgIDcuMTAuMy4gWzI5NF1BcnJheXMg b2YgRmlsZW5hbWVzCi0gICAgICAgICA3LjEwLjQuIFsyOTVdQXV0b21hdGljIEFycmF5cwotICAg ICAgICAgNy4xMC41LiBbMjk2XVNvcnRpbmcgQXJyYXlzCi0gICAgICAgICA3LjEwLjYuIFsyOTdd RGlzcGxheWluZyBBcnJheXMKLSAgICAgICAgIDcuMTAuNy4gWzI5OF1PdGhlciBBcnJheSBPcGVy YXRpb25zCi0gICAgICAgICA3LjEwLjguIFsyOTldSGludHMgZm9yIFVzaW5nIEFycmF5cwotICAg ICAgICAgNy4xMC45LiBbMzAwXURvLUl0LVlvdXJzZWxmIEFycmF5cwotICAgICAgICAgNy4xMC4x MC4gWzMwMV1Bc3NvY2lhdGl2ZSBBcnJheXMKLSAgICAgICAgIDcuMTEuIFszMDJdT1VUUFVUIENv bW1hbmQgSW1wcm92ZW1lbnRzCi0gICAgICAgICA3LjEyLiBbMzAzXUZ1bmN0aW9uIGFuZCBWYXJp YWJsZSBEaWFnbm9zdGljcwotICAgICAgICAgNy4xMy4gWzMwNF1SZXR1cm4gVmFsdWUgb2YgTWFj cm9zCi0gICAgICAgICA3LjE0LiBbMzA1XVRoZSBBU1NFUlQsIEZBSUwsIGFuZCBTVUNDRUVEIENv bW1hbmRzLgotICAgICAgICAgNy4xNS4gWzMwNl1Vc2luZyBBbGFybXMKLSAgICAgICAgIDcuMTYu IFszMDddUGFzc2luZyBBcmd1bWVudHMgdG8gQ29tbWFuZCBGaWxlcwotICAgICAgICAgNy4xNy4g WzMwOF1EaWFsb2dzIHdpdGggVGltZWQgUmVzcG9uc2VzCi0gICAgICAgICA3LjE4LiBbMzA5XUlu Y3JlYXNlZCBGbGV4aWJpbGl0eSBvZiBTV0lUQ0ggQ2FzZSBMYWJlbHMKLSAgICAgICAgIDcuMTku ICJbMzEwXUtlcmJhbmciIFNjcmlwdHMKLSAgICAgICAgIDcuMjAuIFszMTFdSUYgYW5kIFhJRiBT dGF0ZW1lbnQgU3ludGF4Ci0gICAgICAgICA3LjIwLjEuIFszMTJdVGhlIElGL1hJRiBEaXN0aW5j dGlvbgotICAgICAgICAgNy4yMC4yLiBbMzEzXUJvb2xlYW4gRXhwcmVzc2lvbnMgKFRoZSBJRi9X SElMRSBDb25kaXRpb24pCi0gICAgICAgICA3LjIxLiBbMzE0XVNjcmVlbiBGb3JtYXR0aW5nIGFu ZCBDdXJzb3IgQ29udHJvbAotICAgICAgICAgNy4yMi4gWzMxNV1FdmFsdWF0aW5nIEFyaXRobWV0 aWMgRXhwcmVzc2lvbnMKLSAgICAgICAgIDcuMjMuIFszMTZdRmxvYXRpbmctUG9pbnQgQXJpdGht ZXRpYwotICAgICAgICAgNy4yNC4gWzMxN11UcmFjaW5nIFNjcmlwdCBFeGVjdXRpb24KLSAgICAg ICAgIDcuMjUuIFszMThdQ29tcGFjdCBTdWJzdHJpbmcgTm90YXRpb24KLSAgICAgICAgIDcuMjYu IFszMTldTmV3IFdBSVQgQ29tbWFuZCBPcHRpb25zCi0gICAgICAgICA3LjI2LjEuIFszMjBdV2Fp dGluZyBmb3IgTW9kZW0gU2lnbmFscwotICAgICAgICAgNy4yNi4yLiBbMzIxXVdhaXRpbmcgZm9y IEZpbGUgRXZlbnRzCi0gICAgICAgICA3LjI3LiBbMzIyXVJlbGF4ZWQgRk9SIGFuZCBTV0lUQ0gg U3ludGF4Ci0gICAgICg4KSBbMzIzXVVTSU5HIE9USEVSIEZJTEUgVFJBTlNGRVIgUFJPVE9DT0xT Ci0gICAgICg5KSBbMzI0XUNPTU1BTkQtTElORSBPUFRJT05TCi0gICAgICAgICA5LjAuIFszMjVd RXh0ZW5kZWQtRm9ybWF0IENvbW1hbmQtTGluZSBPcHRpb25zCi0gICAgICAgICA5LjEuIFszMjZd Q29tbWFuZCBMaW5lIFBlcnNvbmFsaXRpZXMKLSAgICAgICAgIDkuMi4gWzMyN11CdWlsdC1pbiBI ZWxwIGZvciBDb21tYW5kIExpbmUgT3B0aW9ucwotICAgICAgICAgOS4zLiBbMzI4XU5ldyBDb21t YW5kLUxpbmUgT3B0aW9ucwotICAgICgxMCkgWzMyOV1DLUtFUk1JVCBBTkQgRy1LRVJNSVQKLQot SUlJLiBbMzMwXUFQUEVORElDRVMKLQotSUlJLjEuIFszMzFdQ2hhcmFjdGVyIFNldCBUYWJsZXMK LUlJSS4xLjEuIFszMzJdVGhlIEhld2xldHQgUGFja2FyZCBSb21hbjggQ2hhcmFjdGVyIFNldAot SUlJLjEuMi4gWzMzM11HcmVlayBDaGFyYWN0ZXIgU2V0cwotSUlJLjEuMi4xLiBbMzM0XVRoZSBJ U08gODg1OS03IExhdGluIC8gR3JlZWsgQWxwaGFiZXQKLUlJSS4xLjIuMi4gWzMzNV1UaGUgRUxP VCA5MjcgQ2hhcmFjdGVyIFNldAotSUlJLjEuMi4zLiBbMzM2XVBDIENvZGUgUGFnZSA4NjkKLUlJ SS4yLiBbMzM3XVVwZGF0ZWQgQ291bnRyeSBDb2RlcwotCi1JVi4gWzMzOF1FUlJBVEEgJiBDT1JS SUdFTkRBOiBDb3JyZWN0aW9ucyB0byAiVXNpbmcgQy1LZXJtaXQiIDJuZCBFZGl0aW9uLgotVi4g WzMzOV1BRERJVElPTkFMIENPUFlSSUdIVCBOT1RJQ0VTCi0KLUkuIEMtS0VSTUlUIERPQ1VNRU5U QVRJT04KLQotICAgVGhlIHVzZXIgbWFudWFsIGZvciBDLUtlcm1pdCBpczoKLQotICAgICBGcmFu ayBkYSBDcnV6IGFuZCBDaHJpc3RpbmUgTS4gR2lhbm9uZSwgWzM0MF1Vc2luZyBDLUtlcm1pdCwg U2Vjb25kCi0gICAgIEVkaXRpb24sIERpZ2l0YWwgUHJlc3MgLyBCdXR0ZXJ3b3J0aC1IZWluZW1h bm4sIFdvYnVybiwgTUEsIDE5OTcsCi0gICAgIDYyMiBwYWdlcywgSVNCTiAxLTU1NTU4LTE2NC0x LgotCi0gICBbMzQxXUNMSUNLIEhFUkUgZm9yIHJldmlld3MuCi0KLSAgIFRoZSBwcmVzZW50IGRv Y3VtZW50IGlzIGEgc3VwcGxlbWVudCB0byBVc2luZyBDLUtlcm1pdCAybmQgRWQsIG5vdCBhCi0g ICByZXBsYWNlbWVudCBmb3IgaXQuCi0KLSAgIFVTIHNpbmdsZS1jb3B5IHByaWNlOiAkNTIuOTU7 IHF1YW50aXR5IGRpc2NvdW50cyBhdmFpbGFibGUuIEF2YWlsYWJsZQotICAgaW4gYm9va3N0b3Jl cyBvciBkaXJlY3RseSBmcm9tIENvbHVtYmlhIFVuaXZlcnNpdHk6Ci0KLSAgVGhlIEtlcm1pdCBQ cm9qZWN0Ci0gIENvbHVtYmlhIFVuaXZlcnNpdHkKLSAgNjEyIFdlc3QgMTE1dGggU3RyZWV0Ci0g IE5ldyBZb3JrIE5ZICAxMDAyNS03Nzk5Ci0gIFVTQQotICBUZWxlcGhvbmU6ICsxICgyMTIpIDg1 NC0zNzAzCi0gIEZheDogICAgICAgKzEgKDIxMikgNjYyLTY0NDIKLQotICAgRG9tZXN0aWMgYW5k IG92ZXJzZWFzIG9yZGVycyBhY2NlcHRlZC4gUHJpY2U6IFVTICQ0NC45NSAoVVMsIENhbmFkYSwK LSAgIGFuZCBNZXhpY28pLiBTaGlwcGluZzogJDQuMDAgd2l0aGluIHRoZSBVU0E7ICQxNS4wMCB0 byBhbGwgb3RoZXIKLSAgIGNvdW50cmllcy4gT3JkZXJzIG1heSBiZSBwYWlkIGJ5IE1hc3RlckNh cmQgb3IgVmlzYSwgb3IgcHJlcGFpZCBieQotICAgY2hlY2sgaW4gVVMgZG9sbGFycy4gQWRkICQ2 NSBiYW5rIGZlZSBmb3IgY2hlY2tzIG5vdCBkcmF3biBvbiBhIFVTCi0gICBiYW5rLiBEbyBub3Qg aW5jbHVkZSBzYWxlcyB0YXguIElucXVpcmUgYWJvdXQgcXVhbnRpdHkgZGlzY291bnRzLgotCi0g ICBZb3UgY2FuIGFsc28gb3JkZXIgYnkgcGhvbmUgZnJvbSB0aGUgcHVibGlzaGVyLCBEaWdpdGFs IFByZXNzIC8KLSAgIFszNDJdQnV0dGVyd29ydGgtSGVpbmVtYW5uLCB3aXRoIE1hc3RlckNhcmQs IFZpc2EsIG9yIEFtZXJpY2FuIEV4cHJlc3M6Ci0KLSAgKzEgODAwIDM2Ni0yNjY1ICAgKFdvYnVy biwgTWFzc2FjaHVzZXR0cyBvZmZpY2UgZm9yIFVTQSAmIENhbmFkYSkKLSAgKzQ0IDE4NjUgMzE0 NjI3ICAgKE94Zm9yZCwgRW5nbGFuZCBkaXN0cmlidXRpb24gY2VudHJlIGZvciBVSyAmIEV1cm9w ZSkKLSAgKzYxIDAzIDkyNDUgNzExMSAgKE1lbGJvdXJuZSwgVmljLCBvZmZpY2UgZm9yIEF1c3Ry YWxpYSAmIE5aKQotICArNjUgMzU2LTE5NjggICAgICAoU2luZ2Fwb3JlIG9mZmljZSBmb3IgQXNp YSkKLSAgKzI3ICgzMSkgMjY4MzExMSAgKER1cmJhbiBvZmZpY2UgZm9yIFNvdXRoIEFmcmljYSkK LQotICAgQSBbMzQzXUdlcm1hbi1sYW5ndWFnZSBlZGl0aW9uIG9mIHRoZSBGaXJzdCBFZGl0aW9u IGlzIGFsc28gYXZhaWxhYmxlOgotCi0gICAgIEZyYW5rIGRhIENydXogYW5kIENocmlzdGluZSBN LiBHaWFub25lLCBDLUtlcm1pdCAtIEVpbmbvv71ocnVuZyB1bmQKLSAgICAgUmVmZXJlbnosIFZl cmxhZyBIZWlueiBIZWlzZSwgSGFubm92ZXIsIEdlcm1hbnkgKDE5OTQpLiBJU0JOCi0gICAgIDMt ODgyMjktMDIzLTQuIERldXRzY2ggdm9uIEdpc2JlcnQgVy4gU2Vsa2UuIFByaWNlOiBETSA4OCww MC4gVmVybGFnCi0gICAgIEhlaW56IEhlaXNlIEdtYkggJiBDby4gS0csIEhlbHN0b3JmZXIgU3Ry YXNzZSA3LCBELTMwNjI1IEhhbm5vdmVyLgotICAgICBUZWwuICs0OSAoMDUgMTEpIDUzIDUyLTAs IEZheC4gKzQ5ICgwNSAxMSkgNTMgNTItMSAyOS4KLQotICAgVGhlIFszNDRdS2VybWl0IGZpbGUg dHJhbnNmZXIgcHJvdG9jb2wgaXMgc3BlY2lmaWVkIGluOgotCi0gICAgIEZyYW5rIGRhIENydXos IEtlcm1pdCwgQSBGaWxlIFRyYW5zZmVyIFByb3RvY29sLCBEaWdpdGFsIFByZXNzLAotICAgICBC ZWRmb3JkLCBNQSwgMTk4NywgMzc5IHBhZ2VzLCBJU0JOIDAtOTMyMzc2LTg4LTYuIFVTIHNpbmds ZS1jb3B5Ci0gICAgIHByaWNlOiAkMzkuOTUuIEF2YWlsYWJpbGl0eSBhcyBhYm92ZS4KLQotICAg TmV3cyBhbmQgYXJ0aWNsZXMgYWJvdXQgS2VybWl0IHNvZnR3YXJlIGFuZCBwcm90b2NvbCBhcmUg cHVibGlzaGVkCi0gICBwZXJpb2RpY2FsbHkgaW4gdGhlIGpvdXJuYWwsIFszNDVdS2VybWl0IE5l d3MuIFN1YnNjcmlwdGlvbnMgYXJlIGZyZWU7Ci0gICBjb250YWN0IENvbHVtYmlhIFVuaXZlcnNp dHkgYXQgdGhlIGFkZHJlc3MgYWJvdmUuCi0KLSAgIE9ubGluZSBuZXdzIGFib3V0IEtlcm1pdCBp cyBwdWJsaXNoZWQgaW4gdGhlCi0gICBbMzQ2XWNvbXAucHJvdG9jb2xzLmtlcm1pdC5hbm5vdW5j ZSBhbmQgWzM0N11jb21wLnByb3RvY29scy5rZXJtaXQubWlzYwotICAgbmV3c2dyb3Vwcy4KLQot SUkuIE5FVyBGRUFUVVJFUwotCi0gICBTdXBwb3J0IGZvciB0aGUgQmVsbCBMYWJzIFBsYW4gOSBv cGVyYXRpbmcgc3lzdGVtIHdhcyBhZGRlZCB0byB2ZXJzaW9uCi0gICA2LjAgdG9vIGxhdGUgdG8g YmUgbWVudGlvbmVkIGluIHRoZSBib29rIChhbHRob3VnaCBpdCBkb2VzIGFwcGVhciBvbgotICAg dGhlIGNvdmVyKS4KLQotICAgU3BlY2lmaWMgY2hhbmdlcyBhbmQgYWRkaXRpb25zIGFyZSBncm91 cGVkIHRvZ2V0aGVyIGJ5IG1ham9yIHRvcGljLAotICAgcm91Z2hseSBjb3JyZXNwb25kaW5nIHRv IHRoZSBjaGFwdGVycyBvZiBbMzQ4XVVzaW5nIEMtS2VybWl0LgotCi0wLiBJTkNPTVBBVElCSUxJ VElFUyBXSVRIIFBSRVZJT1VTIFJFTEVBU0VTCi0KLSAgICAxLiBDLUtlcm1pdCA3LjAgdXNlcyBG QVNUIEtlcm1pdCBwcm90b2NvbCBzZXR0aW5ncyBieSBkZWZhdWx0LiBUaGlzCi0gICAgICAgaW5j bHVkZXMgInVucHJlZml4aW5nIiBvZiBjZXJ0YWluIGNvbnRyb2wgY2hhcmFjdGVycy4gQmVjYXVz ZSBvZgotICAgICAgIHRoaXMsIGZpbGUgdHJhbnNmZXJzIHRoYXQgd29ya2VkIHdpdGggcHJldmlv dXMgcmVsZWFzZXMgbWlnaHQgbm90Ci0gICAgICAgd29yayBpbiB0aGUgbmV3IHJlbGVhc2UgKGJ1 dCBpdCBpcyBtb3JlIGxpa2VseSB0aGF0IHRoZXkgd2lsbCB3b3JrLAotICAgICAgIGFuZCBtdWNo IGZhc3RlcikuIElmIGEgdHJhbnNmZXIgZmFpbHMsIHlvdSdsbCBnZXQgYQotICAgICAgIGNvbnRl eHQtc2Vuc2l0aXZlIGhpbnQgc3VnZ2VzdGluZyBwb3NzaWJsZSBjYXVzZXMgYW5kIGN1cmVzLgot ICAgICAgIFVzdWFsbHkgU0VUIFBSRUZJWElORyBBTEwgZG9lcyB0aGUgdHJpY2suCi0gICAgMi4g Qy1LZXJtaXQgNy4wIHRyYW5zZmVycyBmaWxlcyBpbiBCSU5BUlkgbW9kZSBieSBkZWZhdWx0LiBU byByZXN0b3JlCi0gICAgICAgdGhlIHByZXZpb3VzIGJlaGF2aW9yLCBwdXQgU0VUIEZJTEUgVFlQ RSBURVhUIGluIHlvdXIgQy1LZXJtaXQKLSAgICAgICBpbml0aWFsaXphdGlvbiBmaWxlLgotICAg IDMuIE5vIG1hdHRlciB3aGV0aGVyIEZJTEUgVFlQRSBpcyBCSU5BUlkgb3IgVEVYVCBieSBkZWZh dWx0LCBDLUtlcm1pdAotICAgICAgIDcuMCBub3cgc3dpdGNoZXMgYmV0d2VlbiB0ZXh0IGFuZCBi aW5hcnkgbW9kZSBhdXRvbWF0aWNhbGx5IG9uIGEKLSAgICAgICBwZXItZmlsZSBiYXNpcyBhY2Nv cmRpbmcgdG8gdmFyaW91cyBjcml0ZXJpYSwgaW5jbHVkaW5nIChhKSB3aGljaAotICAgICAgIGtp bmQgb2YgcGxhdGZvcm0gaXMgb24gdGhlIG90aGVyIGVuZCBvZiB0aGUgY29ubmVjdGlvbiAoaWYg a25vd24pLAotICAgICAgIChiKSB0aGUgdmVyc2lvbiBvZiBLZXJtaXQgb24gdGhlIG90aGVyIGVu ZCwgYW5kIChjKSB0aGUgZmlsZSdzIG5hbWUKLSAgICAgICAoc2VlIFszNDldU2VjdGlvbiA0LCBl c3BlY2lhbGx5IFszNTBdNC4zKS4gVG8gZGlzYWJsZSB0aGlzCi0gICAgICAgYXV0b21hdGljIHN3 aXRjaGluZyBhbmQgcmVzdG9yZSB0aGUgZWFybGllciBiZWhhdmlvciwgcHV0IFNFVAotICAgICAg IFRSQU5TRkVSIE1PREUgTUFOVUFMIGluIHlvdXIgQy1LZXJtaXQgaW5pdGlhbGl6YXRpb24gZmls ZS4gVG8KLSAgICAgICBkaXNhYmxlIGF1dG9tYXRpYyBzd2l0Y2hpbmcgZm9yIGEgcGFydGljdWxh ciB0cmFuc2ZlciwgaW5jbHVkZSBhCi0gICAgICAgL1RFWFQgb3IgL0JJTkFSWSBzd2l0Y2ggd2l0 aCB5b3VyIFNFTkQgb3IgR0VUIGNvbW1hbmQuCi0gICAgNC4gVGhlIFJFU0VORCBhbmQgUkVHRVQg Y29tbWFuZHMgYXV0b21hdGljYWxseSBzd2l0Y2ggdG8gYmluYXJ5IG1vZGU7Ci0gICAgICAgcHJl dmlvdXNseSBpZiBSRVNFTkQgb3IgUkVHRVQgd2VyZSBhdHRlbXB0ZWQgd2hlbiBGSUxFIFRZUEUg d2FzCi0gICAgICAgVEVYVCwgdGhlc2UgY29tbWFuZHMgd291bGQgZmFpbCBpbW1lZGlhdGVseSwg d2l0aCBhIG1lc3NhZ2UgdGVsbGluZwotICAgICAgIHlvdSB0aGV5IHdvcmsgb25seSB3aGVuIHRo ZSBGSUxFIFRZUEUgaXMgQklOQVJZLiBOb3cgdGhleSBzaW1wbHkgZG8KLSAgICAgICB0aGlzIGZv ciB5b3UuIFNlZSBbMzUxXVNlY3Rpb24gNC4yMyBmb3IgYWRkaXRpb25hbCAoaW1wb3J0YW50KQot ICAgICAgIGluZm9ybWF0aW9uLgotICAgIDUuIFNFVCBQUkVGSVhJTkcgQ0FVVElPVVMgYW5kIE1J TklNQUwgbm93IGJvdGggcHJlZml4IGxpbmVmZWVkICgxMCBhbmQKLSAgICAgICAxMzgpIGluIGNh c2UgcmxvZ2luLCBzc2gsIG9yIGN1IGFyZSAiaW4gdGhlIG1pZGRsZSIsIHNpbmNlCi0gICAgICAg b3RoZXJ3aXNlIDxMRj5+IG1pZ2h0IGFwcGVhciBpbiBLZXJtaXQgcGFja2V0cywgYW5kIHRoaXMg d291bGQKLSAgICAgICBjYXVzZSBybG9naW4sIHNzaCwgb3IgY3UgdG8gZGlzY29ubmVjdCwgc3Vz cGVuZCwgZXNjYXBlIGJhY2ssIG9yCi0gICAgICAgb3RoZXJ3aXNlIHdyZWNrIHRoZSBmaWxlIHRy YW5zZmVyLiBYb24gYW5kIFhvZmYgYXJlIG5vdyBhbHdheXMKLSAgICAgICBwcmVmaXhlZCB0b28s IGV2ZW4gd2hlbiBYb24vWG9mZiBmbG93IGNvbnRyb2wgaXMgbm90IGluIGVmZmVjdCwKLSAgICAg ICBzaW5jZSB1bnByZWZpeGluZyB0aGVtIGhhcyBwcm92ZW4gZGFuZ2Vyb3VzIG9uIFRDUC9JUCBj b25uZWN0aW9ucy4KLSAgICA2LiBJbiBVTklYLCBWTVMsIFdpbmRvd3MsIGFuZCBPUy8yLCB0aGUg RElSRUNUT1JZIGNvbW1hbmQgaXMgYnVpbHQKLSAgICAgICBpbnRvIEMtS2VybWl0IGl0c2VsZiBy YXRoZXIgdGhhbiBpbXBsZW1lbnRlZCBieSBydW5uaW5nIGFuIGV4dGVybmFsCi0gICAgICAgY29t bWFuZCBvciBwcm9ncmFtLiBUaGUgYnVpbHQtaW4gY29tbWFuZCBtaWdodCBub3QgYmVoYXZlIHRo ZSB3YXkKLSAgICAgICB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgZXh0ZXJuYWwgb25lIGRpZCwgYnV0 IG1hbnkgb3B0aW9ucyBhcmUKLSAgICAgICBhdmFpbGFibGUgZm9yIGN1c3RvbWl6YXRpb24uIE9m IGNvdXJzZSB0aGUgdW5kZXJseWluZwotICAgICAgIHBsYXRmb3JtLXNwZWNpZmljIGNvbW1hbmQg Y2FuIHN0aWxsIGJlIGFjY2Vzc2VkIHdpdGggIiEiLCAiQCIsIG9yCi0gICAgICAgIlJVTiIgd2hl cmV2ZXIgdGhlIGluc3RhbGxhdGlvbiBkb2VzIG5vdCBmb3JiaWQuIEluIFVOSVgsIHRoZSAibHMi Ci0gICAgICAgY29tbWFuZCBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgYXMgImxzIiBpbiBDLUtl cm1pdC4gU2VlCi0gICAgICAgWzM1Ml1TZWN0aW9uIDQuNS4xIGZvciBkZXRhaWxzLgotICAgIDcu IFNFTkQgPyBwcmludHMgYSBsaXN0IG9mIHN3aXRjaGVzIHJhdGhlciB0aGFuIGEgbGlzdCBvZiBm aWxlbmFtZXMuCi0gICAgICAgSWYgeW91IHdhbnQgdG8gc2VlIGEgbGlzdCBvZiBmaWxlbmFtZXMs IHVzZSBhIChzeXN0ZW0tZGVwZW5kZW50KQotICAgICAgIGNvbnN0cnVjdGlvbiBzdWNoIGFzIFNF TkQgLi8/IChmb3IgVU5JWCwgV2luZG93cywgb3IgT1MvMiksIFNFTkQKLSAgICAgICBbXT8gKFZN UyksIGV0Yy4gU2VlIFszNTNdU2VjdGlvbnMgMS41IGFuZCBbMzU0XTQuNy4xLgotICAgIDguIElu IFVOSVgsIE9TLTksIGFuZCBLZXJtaXQgOTUsIHRoZSB3aWxkY2FyZCBjaGFyYWN0ZXJzIGluIHBy ZXZpb3VzCi0gICAgICAgdmVyc2lvbnMgd2VyZSAqIGFuZCA/LiBJbiBDLUtlcm1pdCA3LjAgdGhl eSBhcmUgKiwgPywgWywgXSwgeywgYW5kCi0gICAgICAgfSwgd2l0aCBkYXNoIHVzZWQgaW5zaWRl IFtdJ3MgdG8gZGVub3RlIHJhbmdlcyBhbmQgY29tbWEgdXNlZAotICAgICAgIGluc2lkZSB7fSB0 byBzZXBhcmF0ZSBsaXN0IGVsZW1lbnRzLiBJZiB5b3UgbmVlZCB0byBpbmNsdWRlIGFueSBvZgot ICAgICAgIHRoZXNlIGNoYXJhY3RlcnMgbGl0ZXJhbGx5IGluIGEgZmlsZW5hbWUsIHByZWNlZGUg ZWFjaCBvbmUgd2l0aAotICAgICAgIGJhY2tzbGFzaCAoXCkuIFNlZSBbMzU1XVNlY3Rpb24gNC45 LgotICAgIDkuIFNFVCBRVUlFVCB7IE9OLCBPRkYgfSBpcyBub3cgb24gdGhlIGNvbW1hbmQgc3Rh Y2ssIGp1c3QgbGlrZSBTRVQKLSAgICAgICBJTlBVVCBDQVNFLCBTRVQgQ09VTlQsIFNFVCBNQUNS TyBFUlJPUiwgZXRjLCBhcyBkZXNjcmliZWQgb24gcC40NTgKLSAgICAgICBvZiBbMzU2XVVzaW5n IEMtS2VybWl0LCAybmQgRWRpdGlvbi4gVGhpcyBhbGxvd3MgYW55IG1hY3JvIG9yCi0gICAgICAg Y29tbWFuZCBmaWxlIHRvIFNFVCBRVUlFVCBPTiBvciBPRkYgd2l0aG91dCB3b3JyeWluZyBhYm91 dCBzYXZpbmcKLSAgICAgICBhbmQgcmVzdG9yaW5nIHRoZSBnbG9iYWwgUVVJRVQgdmFsdWUuIEZv ciBleGFtcGxlLCB0aGlzIGxldHMgeW91Ci0gICAgICAgd3JpdGUgYSBzY3JpcHQgdGhhdCB0cmll cyBTRVQgTElORSBvbiBsb3RzIG9mIGRldmljZXMgdW50aWwgaXQKLSAgICAgICBmaW5kcyBvbmUg ZnJlZSB3aXRob3V0IHNwZXdpbmcgb3V0IGxvYWRzIG9mIGVycm9yIG1lc3NhZ2VzLCBhbmQKLSAg ICAgICBhbHNvIHdpdGhvdXQgZGlzdHVyYmluZyB0aGUgZ2xvYmFsIFFVSUVUIHNldHRpbmcsIHdo YXRldmVyIGl0IHdhcy4KLSAgIDEwLiBCZWNhdXNlIG9mIHRoZSBuZXcgIi4iIG9wZXJhdG9yICh3 aGljaCBpbnRyb2R1Y2VzIGFzc2lnbm1lbnRzKSwKLSAgICAgICBtYWNyb3Mgd2hvc2UgbmFtZXMg YmVnaW4gd2l0aCAiLiIgY2FuIG5vdCBiZSBpbnZva2VkICJieSBuYW1lIi4KLSAgICAgICBIb3dl dmVyLCB0aGV5IHN0aWxsIGNhbiBiZSBpbnZva2VkIHdpdGggRE8uCi0gICAxMS4gVGhlIHN5bnRh eCBvZiB0aGUgRVZBTFVBVEUgY29tbWFuZCBoYXMgY2hhbmdlZC4gU2VlIFszNTddU2VjdGlvbgot ICAgICAgIDcuOS4yLiBUbyByZXN0b3JlIHRoZSBwcmV2aW91cyBzeW50YXgsIHVzZSBTRVQgRVZB TFVBVEUgT0xELgotICAgMTIuIFRoZSBcdihkaXJlY3RvcnkpIHZhcmlhYmxlIG5vdyBpbmNsdWRl cyB0aGUgdHJhaWxpbmcgZGlyZWN0b3J5Ci0gICAgICAgc2VwYXJhdG9yOyBpbiBwcmV2aW91cyBy ZWxlYXNlcyBpdCBkaWQgbm90LiBUaGlzIGlzIHRvIGFsbG93Ci0gICAgICAgY29uc3RydWN0aW9u cyBzdWNoIGFzOgotICBjZCBcdihkaXIpZGF0YS50bXAKLQotICAgICAgIHRvIHdvcmsgYWNyb3Nz IHBsYXRmb3JtcyB0aGF0IG1pZ2h0IGhhdmUgZGlmZmVyZW50IGRpcmVjdG9yeQotICAgICAgIG5v dGF0aW9uLCBzdWNoIGFzIFVOSVgsIFdpbmRvd3MsIGFuZCBWTVMuCi0gICAxMy4gUHJpb3IgdG8g Qy1LZXJtaXQgNy4wLCB0aGUgRkxPVy1DT05UUk9MIHNldHRpbmcgd2FzIGdsb2JhbCBhbmQKLSAg ICAgICBzdGlja3kuIEluIEMtS2VybWl0IDcuMCwgdGhlcmUgaXMgYW4gYXJyYXkgb2YgZGVmYXVs dCBmbG93LWNvbnRyb2wKLSAgICAgICB2YWx1ZXMgZm9yIGVhY2gga2luZCBvZiBjb25uZWN0aW9u LCB0aGF0IGFyZSBhcHBsaWVkIGF1dG9tYXRpY2FsbHkKLSAgICAgICBhdCBTRVQgTElORS9QT1JU L0hPU1QgdGltZS4gVGh1cyBhIFNFVCBGTE9XIGNvbW1hbmQgZ2l2ZW4gYmVmb3JlCi0gICAgICAg U0VUIExJTkUvUE9SVC9IT1NUIGlzIGxpa2VseSB0byBiZSB1bmRvbmUuIFRoZXJlZm9yZSBTRVQg RkxPVyBjYW4KLSAgICAgICBiZSBndWFyYW50ZWVkIHRvIGhhdmUgdGhlIGRlc2lyZWQgZWZmZWN0 IG9ubHkgaWYgZ2l2ZW4gYWZ0ZXIgdGhlCi0gICAgICAgU0VUIExJTkUvUE9SVC9IT1NUIGNvbW1h bmQuCi0gICAxNC4gQ2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiB3b3JrcyBkaWZmZXJlbnRseSBp biB0aGUgVFJBTlNNSVQgY29tbWFuZAotICAgICAgIHdoZW4gKGEpIHRoZSBmaWxlIGNoYXJhY3Rl ci1zZXQgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBsb2NhbCBlbmQgb2YKLSAgICAgICB0aGUgdGVy bWluYWwgY2hhcmFjdGVyLXNldCwgb3IgKGIpIHdoZW4gdGhlIHRlcm1pbmFsIGNoYXJhY3Rlci1z ZXQKLSAgICAgICBpcyBUUkFOU1BBUkVOVC4KLQotMS4gUFJPR1JBTSBBTkQgRklMRSBNQU5BR0VN RU5UIEFORCBDT01NQU5EUwotCi0xLjAuIEJ1ZyBGaXhlcwotCi0gICBUaGUgZm9sbG93aW5nIHBh dGNoZXMgd2VyZSBpc3N1ZWQgdG8gY29ycmVjdCBidWdzIGluIEMtS2VybWl0IDYuMC4KLSAgIFRo ZXNlIGFyZSBkZXNjcmliZWQgaW4gZGV0YWlsIGluIHRoZSA2LjAgUEFUQ0hFUyBmaWxlLiBBbGwg b2YgdGhlc2UKLSAgIGZpeGVzIGhhdmUgYmVlbiBpbmNvcnBvcmF0ZWQgaW4gQy1LZXJtaXQgNi4x IChuZXZlciByZWxlYXNlZCBleGNlcHQgYXMKLSAgIEs5NSAxLjEuMTYtMTcpIGFuZCA3LjAuCi0K LSAwMDAxICAgQWxsIFVOSVggICAgICAgICBDLUtlcm1pdCBtaXNoYW5kbGVzIHRpbWVzdGFtcHMg b24gZmlsZXMgYmVmb3JlIDE5NzAKLSAwMDAyICAgU29sYXJpcyAyLjUrKyAgICBDb21waWxhdGlv biBlcnJvciBvbiBTb2xhcmlzIDIuNSB3aXRoIFBybyBDCi0gMDAwMyAgIEFsbCBWTVMgICAgICAg ICAgQ0tFUk1JVC5JTkkgRml4IGZvciBWTVMKLSAwMDA0ICAgVk1TL1ZBWC9VQ1ggMi4wICBDLUtl cm1pdCA2LjAgY2FuJ3QgVEVMTkVUIG9uIFZBWC9WTVMgd2l0aCBVQ1ggMi4wCi0gMDAwNSAgIEFs bCAgICAgICAgICAgICAgQy1LZXJtaXQgTWlnaHQgU2VuZCBQYWNrZXRzIE91dHNpZGUgV2luZG93 Ci0gMDAwNiAgIEFsbCAgICAgICAgICAgICAgTU9WRSBmcm9tIFNFTkQtTElTVCBkb2VzIG5vdCBk ZWxldGUgb3JpZ2luYWwgZmlsZXMKLSAwMDA3ICAgU29sYXJpcyAyLjUrKyAgICBIaWdoZXIgc2Vy aWFsIHNwZWVkcyBvbiBTb2xhcmlzIDIuNQotIDAwMDggICBBbGwgICAgICAgICAgICAgIEMtS2Vy bWl0IGFwcGxpY2F0aW9uIGZpbGUgbmFtZSBjYW4ndCBjb250YWluIHNwYWNlcwotIDAwMDkgICBB VCZUIDczMDAgVU5JWFBDIHNldHVpZCBhbmQgaGFyZHdhcmUgZmxvdy1jb250cm9sIHByb2JsZW1z Ci0gMDAxMCAgIExpbnV4IG9uIEFscGhhICAgUGF0Y2ggdG8gbWFrZSBja3V0aW8uYyBjb21waWxl IG9uIExpbnV4L0FscGhhCi0gMDAxMSAgIE9TLTkvNjgwMDAgMi40ICAgUGF0Y2ggdG8gbWFrZSBj azljb24uYyBjb21waWxlIG9uIE9TLTkvNjgwMDAgMi40Ci0gMDAxMiAgIE1XIENvaGVyZW50IDQu MiAgUGF0Y2hlcyBmb3Igc3VjY2Vzc2Z1bCBidWlsZCBvbiBDb2hlcmVudCA0LjIKLSAwMDEzICAg U0lOSVgtWSA1LjQzICAgICAiZGVsYXkiIHZhcmlhYmxlIGNvbmZsaWN0cyB3aXRoIDxzeXMvY2xv Y2suaD4KLSAwMDE0ICAgVk1TL1ZBWC9DTVUtSVAgICBTdWJqZWN0OiBQYXRjaGVzIGZvciBWQVgv Vk1TIDUueCArIENNVS1JUAotIDAwMTUgICBBbGwgICAgICAgICAgICAgIFhFQ0hPIGRvZXNuJ3Qg Zmx1c2ggaXRzIG91dHB1dAotIDAwMTYgICBWTVMgICAgICAgICAgICAgIENEIGFuZCBvdGhlciBk aXJlY3Rvcnkgb3BlcmF0aW9ucyBtaWdodCBub3Qgd29yawotIDAwMTcgICBMaW51eCAxLjIueCsr ICAgIFVzZSBzdGFuZGFyZCBQT1NJWCBpbnRlcmZhY2UgZm9yIGhpZ2ggc2VyaWFsIHNwZWVkcwot IDAwMTggICBVTklYICAgICAgICAgICAgIFNFVCBXSUxEQ0FSRC1FWFBBTlNJT04gU0hFTEwgZHVt cHMgY29yZQotIDAwMTkgICBBbGwgICAgICAgICAgICAgIEhheWVzIFYuMzQgbW9kZW0gaW5pdCBz dHJpbmcgcHJvYmxlbQotIDAwMjAgICBBbGwgICAgICAgICAgICAgIFJFQUQgY29tbWFuZCBkb2Vz IG5vdCBmYWlsIGlmIGZpbGUgbm90IG9wZW4KLSAwMDIxICAgQWxsICAgICAgICAgICAgICBQcm9i bGVtcyB3aXRoIGxvbmcgZnVuY3Rpb24gYXJndW1lbnRzCi0gMDAyMiAgIEFsbCAgICAgICAgICAg ICAgQ2VydGFpbiBcZnVuY3Rpb24oKXMgY2FuIG1pc2JlaGF2ZQotIDAwMjMgICBBbGwgICAgICAg ICAgICAgIFggTU9EIDAgY3Jhc2hlcyBwcm9ncmFtCi0gMDAyNCAgIEFsbCAgICAgICAgICAgICAg SW50ZXJuYWwgYnVsbGV0cHJvb2ZpbmcgZm9yIGxvd2VyKCkgZnVuY3Rpb24KLSAwMDI1ICAgT3Bl bkJTRCAgICAgICAgICBSZWFsIE9wZW5CU0Qgc3VwcG9ydCBmb3IgQy1LZXJtaXQgNi4wCi0gMDAy NiAgIEFsbCAgICAgICAgICAgICAgSW5jb3JyZWN0IGNoZWNrcyBmb3IgbWFjcm8vY29tbWFuZC1m aWxlIG5lc3RpbmcgZGVwdGgKLSAwMDI3ICAgQWxsICAgICAgICAgICAgICBBTlNXRVIgZG9lc24n dCBhdXRvbWF0aWNhbGx5IENPTk5FQ1QKLSAwMDI4ICAgQWxsICAgICAgICAgICAgICBPdmVyemVh bG91cyBFWElUIHdhcm5pbmcKLSAwMDI5ICAgQWxsICAgICAgICAgICAgICBPVVRQVVQgZG9lc24n dCBlY2hvIHdoZW4gRFVQTEVYIGlzIEhBTEYKLSAwMDMwICAgQWxsICAgICAgICAgICAgICBNaW5v ciBwcm9ibGVtcyB3aXRoIFJFTU9URSBESVJFQ1RPUlkvREVMRVRFL2V0YwotIDAwMzEgICBBbGwg ICAgICAgICAgICAgIENIRUNLIGNvbW1hbmQgYnJva2VuCi0gMDAzMiAgIEFsbCAgICAgICAgICAg ICAgUHJvYmxlbSB3aXRoIFNFVCBUUkFOU01JVCBFQ0hPCi0gMDAzMyAgIFVOSVgsIFZNUywgZXRj ICAgSEVMUCBTRVQgU0VSVkVSIHNheXMgdG9vIG11Y2gKLSAwMDM0ICAgQWxsICAgICAgICAgICAg ICBSRUFEIGFuZCAhUkVBRCB0b28gcGlja3kgYWJvdXQgbGluZSB0ZXJtaW5hdG9ycwotIDAwMzUg ICBBbGwgICAgICAgICAgICAgIEVORCBmcm9tIGluc2lkZSBTV0lUQ0ggZG9lc24ndCB3b3JrCi0g MDAzNiAgIEFsbCAgICAgICAgICAgICAgUHJvYmxlbSB0ZWxuZXR0aW5nIHRvIG11bHRpaG9tZWQg aG9zdHMKLSAwMDM3ICAgQWxsICAgICAgICAgICAgICBSZWRpcmVjdGlvbiBmYWlsdXJlcyBpbiBS RU1PVEUgeHh4ID4gZmlsZQotCi0gICBSRURJUkVDVCB3YXMgbWlzc2luZyBpbiBtYW55IFVOSVgg Qy1LZXJtaXQgaW1wbGVtZW50YXRpb25zOyBpbiB2ZXJzaW9uCi0gICA3LjAsIGl0IHNob3VsZCBi ZSBhdmFpbGFibGUgaW4gYWxsIG9mIHRoZW0uCi0KLTEuMS4gQ29tbWFuZCBDb250aW51YXRpb24K LQotICAgQ29tbWVudHMgdGhhdCBzdGFydCB3aXRoICI7IiBvciAiIyIgY2FuIG5vIGxvbmdlciBi ZSBjb250aW51ZWQuIEluOgotCi0gIDsgdGhpcyBpcyBhIGNvbW1lbnQgLQotICBlY2hvIGJsYWgK LQotICAgdGhlIEVDSE8gY29tbWFuZCB3aWxsIGV4ZWN1dGUsIHJhdGhlciB0aGFuIGJlaW5nIHRh a2VuIGFzIGEKLSAgIGNvbnRpbnVhdGlvbiBvZiB0aGUgcHJlY2VkaW5nIGNvbW1lbnQgbGluZS4g VGhpcyBhbGxvd3MgZWFzeQotICAgImNvbW1lbnRpbmcgb3V0IiBvZiBjb21tYW5kcyBmcm9tIG1h Y3JvIGRlZmluaXRpb25zLgotCi0gICBIb3dldmVyLCB0aGUgdGV4dCBvZiB0aGUgQ09NTUVOVCBj b21tYW5kIGNhbiBzdGlsbCBiZSBjb250aW51ZWQgb250bwotICAgc3Vic2VxdWVudCBsaW5lczoK LQotICBjb21tZW50IHRoaXMgaXMgYSBjb21tZW50IC0KLSAgZWNobyBibGFoCi0KLSAgIEFzIG9m IHZlcnNpb24gNi4wLCBiYWNrc2xhc2ggaXMgbm8gbG9uZ2VyIGEgdmFsaWQgY29udGludWF0aW9u Ci0gICBjaGFyYWN0ZXIuIE9ubHkgaHlwaGVuIHNob3VsZCBiZSB1c2VkIGZvciBjb21tYW5kIGNv bnRpbnVhdGlvbi4gVGhpcyBpcwotICAgdG8gbWFrZSBpdCBwb3NzaWJsZSB0byBpc3N1ZSBjb21t YW5kcyBsaWtlICJjZCBhOlwiIG9uIERPUy1saWtlCi0gICBzeXN0ZW1zLgotCi0gICBBcyBvZiB2 ZXJzaW9uIDcuMDoKLQotICAgICAqIFlvdSBjYW4gcXVvdGUgYSBmaW5hbCBkYXNoIHRvIHByZXZl bnQgaXQgZnJvbSBiZWluZyBhIGNvbnRpbnVhdGlvbgotICAgICAgIGNoYXJhY3RlcjoKLSAgZWNo byBmb29cLQotCi0gICAgICAgVGhpcyBwcmludHMgImZvby0iLiBUaGUgY29tbWFuZCBpcyBub3Qg Y29udGludWVkLgotICAgICAqIFlvdSBjYW4gZW50ZXIgY29tbWFuZHMgc3VjaCBhczoKLSAgZWNo byBmb28gLSA7IHRoaXMgaXMgYSBjb21tZW50Ci0KLSAgICAgICBpbnRlcmFjdGl2ZWx5IGFuZCB0 aGV5IGFyZSBwcm9wZXJseSB0cmVhdGVkIGFzIGNvbnRpbnVlZCBjb21tYW5kcy4KLSAgICAgICBQ cmV2aW91c2x5IHRoaXMgd29ya2VkIG9ubHkgaW4gY29tbWFuZCBmaWxlcy4KLQotMS4yLiBFZGl0 b3IgSW50ZXJmYWNlCi0KLSAgIFNFVCBFRElUT1IgbmFtZSBbIG9wdGlvbnMgXQotICAgICAgICAg IExldHMgeW91IHNwZWNpZnkgYSB0ZXh0LWVkaXRpbmcgcHJvZ3JhbS4gVGhlIG5hbWUgY2FuIGJl IGEgZnVsbHkKLSAgICAgICAgICBzcGVjaWZpZWQgcGF0aG5hbWUgbGlrZSAvdXNyL2xvY2FsL2Jp bi9lbWFjczE5L2VtYWNzLCBvciBpdCBjYW4KLSAgICAgICAgICBiZSB0aGUgbmFtZSBvZiBhbnkg cHJvZ3JhbSBpbiB5b3VyIFBBVEgsIGUuZy4gInNldCBlZGl0b3IKLSAgICAgICAgICBlbWFjcyIu IEluIFZNUywgaXQgbXVzdCBiZSBhIERDTCBjb21tYW5kIGxpa2UgImVkaXQiLAotICAgICAgICAg ICJlZGl0L3RwdSIsICJlbWFjcyIsIGV0Yy4gSWYgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgRURJ VE9SIGlzCi0gICAgICAgICAgZGVmaW5lZCB3aGVuIEtlcm1pdCBzdGFydHMsIGl0cyB2YWx1ZSBp cyB0aGUgZGVmYXVsdCBlZGl0b3IuIFlvdQotICAgICAgICAgIGNhbiBhbHNvIHNwZWNpZnkgb3B0 aW9ucyB0byBiZSBpbmNsdWRlZCBvbiB0aGUgZWRpdG9yIGNvbW1hbmQKLSAgICAgICAgICBsaW5l LiBSZXR1cm5zIHRvIEtlcm1pdCB3aGVuIHRoZSBlZGl0b3IgZXhpdHMuCi0KLSAgIEVESVQgWyBm aWxlbmFtZSBdCi0gICAgICAgICAgSWYgdGhlIEVESVQgY29tbWFuZCBpcyBnaXZlbiB3aXRob3V0 IGEgZmlsZW5hbWUsIHRoZW4gaWYgYQotICAgICAgICAgIHByZXZpb3VzIGZpbGVuYW1lIGhhZCBi ZWVuIGdpdmVuIHRvIGFuIEVESVQgY29tbWFuZCwgaXQgaXMgdXNlZDsKLSAgICAgICAgICBpZiBu b3QsIHRoZSBlZGl0b3IgaXMgc3RhcnRlZCB3aXRob3V0IGEgZmlsZS4gSWYgYSBmaWxlbmFtZSBp cwotICAgICAgICAgIGdpdmVuLCB0aGUgZWRpdG9yIGlzIHN0YXJ0ZWQgb24gdGhhdCBmaWxlLCBh bmQgdGhlIGZpbGVuYW1lIGlzCi0gICAgICAgICAgcmVtZW1iZXJlZCBmb3Igc3Vic2VxdWVudCBF RElUIGNvbW1hbmRzLgotCi0gICBTSE9XIEVESVRPUgotICAgICAgICAgIERpc3BsYXlzIHRoZSBm dWxsIHBhdGhuYW1lIG9mIHlvdXIgdGV4dCBlZGl0b3IsIGlmIGFueSwgYWxvbmcKLSAgICAgICAg ICB3aXRoIGFueSBjb21tYW5kIGxpbmUgb3B0aW9ucywgYW5kIHRoZSBmaWxlIG1vc3QgcmVjZW50 bHkgZWRpdGVkCi0gICAgICAgICAgKGFuZCB0aGVyZWZvcmUgdGhlIGRlZmF1bHQgZmlsZW5hbWUg Zm9yIHlvdXIgbmV4dCBFRElUIGNvbW1hbmQpLgotCi0gICBSZWxhdGVkIHZhcmlhYmxlczogXHYo ZWRpdG9yKSwgXHYoZWRpdG9wdHMpLCBcdihlZGl0ZmlsZSkuCi0KLTEuMy4gV2ViIEJyb3dzZXIg YW5kIEZUUCBJbnRlcmZhY2UKLQotICAgQy1LZXJtaXQgaW5jbHVkZXMgYW4gRlRQIGNvbW1hbmQs IHdoaWNoIHNpbXBseSBydW5zIHRoZSBGVFAgcHJvZ3JhbTsKLSAgIEMtS2VybWl0IGRvZXMgbm90 IGluY2x1ZGUgYW55IGJ1aWx0LWluIHN1cHBvcnQgZm9yIEludGVybmV0IEZpbGUKLSAgIFRyYW5z ZmVyIFByb3RvY29sLCBub3IgYW55IG1ldGhvZCBmb3IgaW50ZXJhY3RpbmcgZGlyZWN0bHkgd2l0 aCBhbiBGVFAKLSAgIHNlcnZlci4gSW4gdmVyc2lvbiA3LjAsIGhvd2V2ZXIsIEMtS2VybWl0IGxl dHMgeW91IHNwZWNpZnkgeW91ciBGVFAKLSAgIGNsaWVudDoKLQotICAgU0VUIEZUUC1DTElFTlQg WyBuYW1lIFsgb3B0aW9ucyBdIF0KLSAgICAgICAgICBUaGUgbmFtZSBpcyB0aGUgbmFtZSBvZiB0 aGUgRlRQIGV4ZWN1dGFibGUuIEluIFVOSVgsIFdpbmRvd3MsIG9yCi0gICAgICAgICAgT1MvMiwg aXQgY2FuIGJlIHRoZSBmaWxlbmFtZSBvZiBhbnkgZXhlY3V0YWJsZSBwcm9ncmFtIGluIHlvdXIK LSAgICAgICAgICBQQVRIIChlLmcuICJmdHAuZXhlIiBpbiBXaW5kb3dzLCAiZnRwIiBpbiBVTklY KTsgZWxzZXdoZXJlIChvcgotICAgICAgICAgIGlmIHlvdSBkbyBub3QgaGF2ZSBhIFBBVEggZGVm aW5pdGlvbiksIGl0IG11c3QgYmUgdGhlIGZ1bGx5Ci0gICAgICAgICAgc3BlY2lmaWVkIHBhdGhu YW1lIG9mIHRoZSBGVFAgcHJvZ3JhbS4gSWYgdGhlIG5hbWUgY29udGFpbnMgYW55Ci0gICAgICAg ICAgc3BhY2VzLCBlbmNsb3NlIGl0IGJyYWNlcy4gSW5jbHVkZSBhbnkgb3B0aW9ucyBhZnRlciB0 aGUKLSAgICAgICAgICBmaWxlbmFtZTsgdGhlc2UgZGVwZW5kIHRoZSBwYXJ0aWN1bGFyIGZ0cCBj bGllbnQuCi0KLSAgIFRoZSBXZWIgYnJvd3NlciBpbnRlcmZhY2UgaXMgY292ZXJlZCBpbiB0aGUg Zm9sbG93aW5nIHN1YnNlY3Rpb25zLgotCi0xLjMuMS4gSW52b2tpbmcgeW91ciBCcm93c2VyIGZy b20gQy1LZXJtaXQKLQotICAgQlJPV1NFIFsgdXJsIF0KLSAgICAgICAgICBTdGFydHMgeW91ciBw cmVmZXJyZWQgV2ViIGJyb3dzZXIgb24gdGhlIFVSTCwgaWYgb25lIGlzIGdpdmVuLAotICAgICAg ICAgIG90aGVyd2lzZSBvbiB0aGUgbW9zdCByZWNlbnRseSBnaXZlbiBVUkwsIGlmIGFueS4gUmV0 dXJucyB0bwotICAgICAgICAgIEtlcm1pdCB3aGVuIHRoZSBicm93c2VyIGV4aXRzLgotCi0gICBT RVQgQlJPV1NFUiBbIG5hbWUgWyBvcHRpb25zIF0gXQotICAgICAgICAgIFVzZSB0aGlzIGNvbW1h bmQgdG8gc3BlY2lmeSB0aGUgbmFtZSBvZiB5b3VyIFdlYiBicm93c2VyCi0gICAgICAgICAgcHJv Z3JhbSwgZm9yIGV4YW1wbGU6ICJzZXQgYnJvd3NlciBseW54Ii4gVGhlIG5hbWUgbXVzdCBiZSBp bgotICAgICAgICAgIHlvdXIgUEFUSCwgb3IgZWxzZSBpdCBtdXN0IGJlIGEgZnVsbHkgc3BlY2lm aWVkIGZpbGVuYW1lOyBpbiBWTVMKLSAgICAgICAgICBpdCBtdXN0IGJlIGEgRENMIGNvbW1hbmQu Ci0KLSAgIFNIT1cgQlJPV1NFUgotICAgICAgICAgIERpc3BsYXlzIHRoZSBjdXJyZW50IGJyb3dz ZXIsIG9wdGlvbnMsIGFuZCBtb3N0IHJlY2VudCBVUkwuCi0KLSAgIFJlbGF0ZWQgdmFyaWFibGVz OiBcdihicm93c2VyKSwgXHYoYnJvd3NvcHRzKSwgXHYoYnJvd3N1cmwpLgotCi0gICBBbHNvIHNl ZSBbMzU4XVNlY3Rpb24gMi4xNTogQ29udGFjdGluZyBXZWIgU2VydmVycyB3aXRoIHRoZSBIVFRQ Ci0gICBDb21tYW5kLgotCi0xLjMuMi4gSW52b2tpbmcgQy1LZXJtaXQgZnJvbSB5b3VyIEJyb3dz ZXIKLQotICAgVGhlIG1ldGhvZCBmb3IgZG9pbmcgdGhpcyBkZXBlbmRzLCBvZiBjb3Vyc2UsIG9u IHlvdXIgYnJvd3Nlci4gSGVyZSBhcmUKLSAgIHNvbWUgZXhhbXBsZXM6Ci0KLSAgIE5ldHNjYXBl IG9uIFVOSVggKFgtYmFzZWQpCi0gICAgICAgICAgSW4gdGhlIE9wdGlvbnMtPkFwcGxpY2F0aW9u cyBzZWN0aW9uLCBzZXQgeW91ciBUZWxuZXQKLSAgICAgICAgICBhcHBsaWNhdGlvbiB0bzoKLQot ICB4dGVybSAtZSAvdXNyL2xvY2FsL2Jpbi9rZXJtaXQva2VybWl0IC1KICVoICVwCi0KLSAgICAg ICAgICAocmVwbGFjZSAiL3Vzci9sb2NhbC9iaW4va2VybWl0L2tlcm1pdCIgYnkgQy1LZXJtaXQn cyBhY3R1YWwKLSAgICAgICAgICBwYXRobmFtZSkuIC1KIGlzIEMtS2VybWl0J3MgY29tbWFuZC1s aW5lIG9wdGlvbiB0byAiYmUgbGlrZQotICAgICAgICAgIFRlbG5ldCI7ICVoIGFuZCAlcCBhcmUg TmV0c2NhcGUgcGxhY2Vob2xkZXJzIGZvciBob3N0bmFtZSBhbmQKLSAgICAgICAgICBwb3J0Lgot Ci0gICBMeW54IG9uIFVOSVgKLSAgICAgICAgICBBcyBmYXIgYXMgd2Uga25vdywgdGhpcyBjYW4g YmUgZG9uZSBvbmx5IGF0IGNvbXBpbGUgdGltZS4gQWRkCi0gICAgICAgICAgdGhlIGZvbGxvd2lu ZyBsaW5lIHRvIHRoZSBMeW54IHVzZXJkZWZzLmggZmlsZSBiZWZvcmUgYnVpbGRpbmcKLSAgICAg ICAgICB0aGUgTHlueCBiaW5hcnk6Ci0KLSAgI2RlZmluZSBURUxORVRfQ09NTUFORCAiL29wdC9i aW4va2VybWl0IC1KIgotCi0gICAgICAgICAgQW5kIHRoZW4gYWRkIGxpbmVzIGxpa2UgdGhlIGZv bGxvd2luZyB0byB0aGUgTHlueC5jZmcgZmlsZToKLQotICBET1dOTE9BREVSOktlcm1pdCBiaW5h cnkgZG93bmxvYWQ6L29wdC9iaW4va2VybWl0IC1pIC1WIC1zICVzIC1hICVzOlRSVUUKLSAgRE9X TkxPQURFUjpLZXJtaXQgdGV4dCBkb3dubG9hZDovb3B0L2Jpbi9rZXJtaXQgLXMgJXMgLWEgJXM6 VFJVRQotCi0gIFVQTE9BREVSOktlcm1pdCBiaW5hcnkgdXBsb2FkOi9vcHQvYmluL2tlcm1pdCAt aSAtciAtYSAlczpUUlVFCi0gIFVQTE9BREVSOktlcm1pdCB0ZXh0IHVwbG9hZDovb3B0L2Jpbi9r ZXJtaXQgLXIgLWEgJXM6VFJVRQotICBVUExPQURFUjpLZXJtaXQgdGV4dCBnZXQ6L29wdC9iaW4v a2VybWl0IC1nICVzOlRSVUUKLSAgVVBMT0FERVI6S2VybWl0IGJpbmFyeSBnZXQ6L29wdC9iaW4v a2VybWl0IC1pZyAlczpUUlVFCi0KLSAgIEJ1dCBub25lIG9mIHRoZSBhYm92ZSBpcyBuZWNlc3Nh cnkgaWYgeW91IG1ha2UgQy1LZXJtaXQgeW91ciBkZWZhdWx0Ci0gICBUZWxuZXQgY2xpZW50LCB3 aGljaCB5b3UgY2FuIGRvIGJ5IG1ha2luZyBhIHN5bWxpbmsgY2FsbGVkICd0ZWxuZXQnIHRvCi0g ICB0aGUgQy1LZXJtaXQgNy4wIGJpbmFyeS4gU2VlIFszNTldU2VjdGlvbiA5LjEgZm9yIGRldGFp bHMuCi0KLTEuNC4gQ29tbWFuZCBFZGl0aW5nCi0KLSAgIEN0cmwtVyAoIldvcmQgZGVsZXRlIikg d2FzIGNoYW5nZWQgaW4gNy4wIHRvIGRlbGV0ZSBiYWNrIHRvIHRoZQotICAgcHJldmlvdXMgbm9u LWFscGhhbnVtZXJpYywgcmF0aGVyIHRoYW4gYWxsIHRoZSB3YXkgYmFjayB0byB0aGUgcHJldmlv dXMKLSAgIHNwYWNlLgotCi0xLjUuIENvbW1hbmQgU3dpdGNoZXMKLQotICAgQXMgb2YgdmVyc2lv biA3LjAsIEMtS2VybWl0J3MgY29tbWFuZCBwYXJzZXIgc3VwcG9ydHMgYSBuZXcgdHlwZSBvZgot ICAgZmllbGQsIGNhbGxlZCBhICJzd2l0Y2giLiBUaGlzIGlzIGFuIG9wdGlvbmFsIGNvbW1hbmQg bW9kaWZpZXIuCi0KLTEuNS4xLiBHZW5lcmFsIFN3aXRjaCBTeW50YXgKLQotICAgQSBzd2l0Y2gg aXMgYSBrZXl3b3JkIGJlZ2lubmluZyB3aXRoIGEgc2xhc2ggKC8pLiBJZiBpdCB0YWtlcyBhIHZh bHVlLAotICAgdGhlbiB0aGUgdmFsdWUgaXMgYXBwZW5kZWQgdG8gaXQgKHdpdGggbm8gaW50ZXJ2 ZW5pbmcgc3BhY2VzKSwKLSAgIHNlcGFyYXRlZCBieSBhIGNvbG9uICg6KSBvciBlcXVhbCBzaWdu ICg9KS4gRGVwZW5kaW5nIG9uIHRoZSBzd2l0Y2gsCi0gICB0aGUgdmFsdWUgbWF5IGJlIGEgbnVt YmVyLCBhIGtleXdvcmQsIGEgZmlsZW5hbWUsIGEgZGF0ZS90aW1lLCBldGMuCi0gICBFeGFtcGxl czoKLQotICBzZW5kIG9vZmEudHh0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBObyBz d2l0Y2hlcwotICBzZW5kIC9iaW5hcnkgb29mYS56aXAgICAgICAgICAgICAgICAgICAgICAgOyBB IHN3aXRjaCB3aXRob3V0IGEgdmFsdWUKLSAgc2VuZCAvcHJvdG9jb2w6em1vZGVtIG9vZmEuemlw ICAgICAgICAgICAgIDsgQSBzd2l0Y2ggd2l0aCBhIHZhbHVlICg6KQotICBzZW5kIC9wcm90b2Nv bD16bW9kZW0gb29mYS56aXAgICAgICAgICAgICAgOyBBIHN3aXRjaCB3aXRoIGEgdmFsdWUgKD0p Ci0gIHNlbmQgL3RleHQgL2RlbGV0ZSAvYXMtbmFtZTp4Lnggb29mYS50eHQgICA7IFNldmVyYWwg c3dpdGNoZXMKLQotICAgTGlrZSBvdGhlciBjb21tYW5kIGZpZWxkcywgc3dpdGNoZXMgYXJlIHNl cGFyYXRlZCBmcm9tIG90aGVyIGZpZWxkcywKLSAgIGFuZCBmcm9tIGVhY2ggb3RoZXIsIGJ5IHdo aXRlc3BhY2UsIGFzIHNob3duIGluIHRoZSBleGFtcGxlcyBqdXN0Ci0gICBhYm92ZS4gWW91IGNh biBub3QgcHV0IHRoZW0gdG9nZXRoZXIgbGlrZSBzbzoKLQotICBzZW5kL3RleHQvZGVsZXRlL2Fz LW5hbWU6eC54IG9vZmEudHh0Ci0KLSAgIChhcyB5b3UgbWlnaHQgZG8gaW4gVk1TIG9yIERPUywg b3IgYXMgd2UgbWlnaHQgb25jZSBoYXZlIGRvbmUgaW4KLSAgIFRPUFMtMTAgb3IgVE9QUzAtMjAs IG9yIFBJUCkuIFRoaXMgaXMgcHJpbWFyaWx5IGR1ZSB0byBhbWJpZ3VpdHkKLSAgIGJldHdlZW4g Ii8iIGFzIHN3aXRjaCBpbnRyb2R1Y2VyIHZlcnN1cyAiLyIgYXMgVU5JWCBkaXJlY3RvcnkKLSAg IHNlcGFyYXRvcjsgZS5nLiBpbjoKLQotICBzZW5kIC9kZWxldGUvYXMtbmFtZTpmb28vdGV4dCBv b2ZhLnR4dAotCi0gICBEb2VzICJmb28vdGV4dCIgbWVhbiB0aGUgZmlsZW5hbWUgaXMgImZvbyIg YW5kIHRoZSB0cmFuc2ZlciBpcyB0byBiZSBpbgotICAgdGV4dCBtb2RlLCBvciBkb2VzIGl0IG1l YW4gdGhlIGZpbGVuYW1lIGlzICJmb28vdGV4dCI/IFRoZXJlZm9yZSB3ZQotICAgcmVxdWlyZSB3 aGl0ZXNwYWNlIGJldHdlZW4gc3dpdGNoZXMgdG8gcmVzb2x2ZSB0aGUgYW1iaWd1aXR5LiAoVGhh dCdzCi0gICBvbmx5IG9uZSBvZiBzZXZlcmFsIHBvc3NpYmxlIGFtYmlndWl0aWVzIC0tIGl0IGlz IGFsc28gY29uY2VpdmFibGUgdGhhdAotICAgYSBmaWxlIGNhbGxlZCAidGV4dCIgZXhpc3RzIGlu IHRoZSBwYXRoICIvZGVsZXRlL2FzLW5hbWU6Zm9vLyIpLgotCi0gICBJbiBnZW5lcmFsLCBpZiBh IHN3aXRjaCBjYW4gdGFrZSBhIHZhbHVlLCBidXQgeW91IG9taXQgaXQsIHRoZW4gZWl0aGVyCi0g ICBhIHJlYXNvbmFibGUgZGVmYXVsdCB2YWx1ZSBpcyBzdXBwbGllZCwgb3IgYW4gZXJyb3IgbWVz c2FnZSBpcyBwcmludGVkOgotCi0gIHNlbmQgL3ByaW50Oi1QbGFzZXJ3cml0ZXIgb29mYS50eHQg ICAgICAgICA7IFZhbHVlIGluY2x1ZGVkID0gcHJpbnQgb3B0aW9ucwotICBzZW5kIC9wcmludCBv b2ZhLnR4dCAgICAgICAgICAgICAgICAgICAgICAgOyBWYWx1ZSBvbWl0dGVkLCBPSwotICBzZW5k IC9tYWlsOmtlcm1pdEBjb2x1bWJpYS5lZHUgb29mYS50eHQgICAgOyBWYWx1ZSBpbmNsdWRlZCA9 IGFkZHJlc3MKLSAgc2VuZCAvbWFpbCBvb2ZhLnR4dCAgICAgICAgICAgICAgICAgICAgICAgIDsg Tm90IE9LIC0gYWRkcmVzcyByZXF1aXJlZAotICA/QWRkcmVzcyByZXF1aXJlZAotCi0gICBDb250 ZXh0LXNlbnNpdGl2ZSBoZWxwICg/KSBhbmQgY29tcGxldGlvbiAoRXNjIG9yIFRhYikgYXJlIGF2 YWlsYWJsZSBpbgotICAgdGhlIG5vcm1hbCBtYW5uZXI6Ci0KLSAgQy1LZXJtaXQ+IHNlbmQgL3By PyBTd2l0Y2gsIG9uZSBvZiB0aGUgZm9sbG93aW5nOgotICAgIC9wcmludCAvcHJvdG9jb2wKLSAg Qy1LZXJtaXQ+IHNlbmQgL3BybzxFU0M+dG9jb2w6PyAgRmlsZS10cmFuc2ZlciBwcm90b2NvbCwK LSAgIG9uZSBvZiB0aGUgZm9sbG93aW5nOgotICAgIGtlcm1pdCAgIHhtb2RlbSAgIHltb2RlbSAg IHltb2RlbS1nICAgem1vZGVtCi0gIEMtS2VybWl0PiBzZW5kIC9wcm90b2NvbDprPFRBQj5lcm1p dAotCi0gICBJZiBhIHN3aXRjaCB0YWtlcyBhIHZhbHVlIGFuZCB5b3UgdXNlIGNvbXBsZXRpb24g b24gaXQsIGEgY29sb24gKDopIGlzCi0gICBwcmludGVkIGF0IHRoZSBlbmQgb2YgaXRzIG5hbWUg dG8gaW5kaWNhdGUgdGhpcy4gSWYgaXQgZG9lcyBub3QgdGFrZSBhCi0gICB2YWx1ZSwgYSBzcGFj ZSBpcyBwcmludGVkLgotCi0gICBBbHNvLCBpZiB5b3UgdHlwZSA/IGluIGEgc3dpdGNoIGZpZWxk LCBzd2l0Y2hlcyB0aGF0IHRha2UgdmFsdWVzIGFyZQotICAgc2hvd24gd2l0aCBhIHRyYWlsaW5n IGNvbG9uOyB0aG9zZSB0aGF0IGRvbid0IHRha2UgdmFsdWVzIGFyZSBzaG93bgotICAgd2l0aG91 dCBvbmUuCi0KLTEuNS4yLiBPcmRlciBhbmQgRWZmZWN0IG9mIFN3aXRjaGVzCi0KLSAgIFRoZSBv cmRlciBvZiBzd2l0Y2hlcyBzaG91bGQgbm90IG1hdHRlciwgZXhjZXB0IHRoYXQgdGhleSBhcmUg ZXZhbHVhdGVkCi0gICBmcm9tIGxlZnQgdG8gcmlnaHQsIHNvIGlmIHlvdSBnaXZlIHR3byBzd2l0 Y2hlcyB3aXRoIG9wcG9zaXRlIGVmZmVjdHMsCi0gICB0aGUgcmlnaHRtb3N0IG9uZSBpcyB1c2Vk OgotCi0gIHNlbmQgL3RleHQgL2JpbmFyeSBvb2ZhLnppcCAgICAgICAgICAgICAgICA7IFNlbmRz IG9vZmEuemlwIGluIGJpbmFyeSBtb2RlLgotCi0gICBMaWtlIG90aGVyIGNvbW1hbmQgZmllbGRz LCBzd2l0Y2hlcyBoYXZlIG5vIGVmZmVjdCB3aGF0c29ldmVyIHVudGlsIHRoZQotICAgY29tbWFu ZCBpcyBlbnRlcmVkIChieSBwcmVzc2luZyB0aGUgUmV0dXJuIG9yIEVudGVyIGtleSkuIEV2ZW4g dGhlbiwKLSAgIHN3aXRjaGVzIGFmZmVjdCBvbmx5IHRoZSBjb21tYW5kIHdpdGggd2hpY2ggdGhl eSBhcmUgaW5jbHVkZWQ7IHRoZXkgZG8KLSAgIG5vdCBoYXZlIGdsb2JhbCBlZmZlY3Qgb3Igc2lk ZSBlZmZlY3RzLgotCi0xLjUuMy4gRGlzdGluZ3Vpc2hpbmcgU3dpdGNoZXMgZnJvbSBPdGhlciBG aWVsZHMKLQotICAgQWxsIHN3aXRjaGVzIGFyZSBvcHRpb25hbC4gQSBjb21tYW5kIHRoYXQgdXNl cyBzd2l0Y2hlcyBsZXRzIHlvdSBnaXZlCi0gICBhbnkgbnVtYmVyIG9mIHRoZW0sIGluY2x1ZGlu ZyBub25lIGF0IGFsbC4gRXhhbXBsZToKLQotICBzZW5kIC9iaW5hcnkgb29mYS56aXAKLSAgc2Vu ZCAvYmluIC9kZWxldGUgb29mYS56aXAKLSAgc2VuZCAvYmluIC9hcy1uYW1lOm11cGVlbi56aXAg b29mYS56aXAKLSAgc2VuZCBvb2ZhLnppcAotCi0gICBCdXQgaG93IGRvZXMgS2VybWl0IGtub3cg d2hlbiB0aGUgZmlyc3QgIm5vbi1zd2l0Y2giIGlzIGdpdmVuPyBJdCBoYXMKLSAgIGJlZW4gdG9s ZCB0byBsb29rIGZvciBib3RoIGEgc3dpdGNoIGFuZCBmb3Igc29tZXRoaW5nIGVsc2UsIHRoZSBk YXRhCi0gICB0eXBlIG9mIHRoZSBuZXh0IGZpZWxkIChmaWxlbmFtZSwgbnVtYmVyLCBldGMpLiBJ biBtb3N0IGNhc2VzLCB0aGlzCi0gICB3b3JrcyB3ZWxsLiBCdXQgY29uZmxpY3RzIGFyZSBub3Qg aW1wb3NzaWJsZS4gU3VwcG9zZSwgZm9yIGV4YW1wbGUsIGluCi0gICBVTklYIHRoZXJlIHdhcyBh IGZpbGUgbmFtZWQgInRleHQiIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5LiBUaGUKLSAgIGNv bW1hbmQgdG8gc2VuZCBpdCB3b3VsZCBiZToKLQotICBzZW5kIC90ZXh0Ci0KLSAgIEJ1dCBDLUtl cm1pdCB3b3VsZCB0aGluayB0aGlzIHdhcyB0aGUgIi90ZXh0IiBzd2l0Y2guIFRvIHJlc29sdmUg dGhlCi0gICBjb25mbGljdCwgdXNlIGJyYWNlczoKLQotICBzZW5kIHsvdGV4dH0KLQotICAgb3Ig b3RoZXIgY2lyY3VtbG9jdXRpb25zIHN1Y2ggYXMgInNlbmQgLy90ZXh0IiwgInNlbmQgLy4vdGV4 dCIsIGV0Yy4KLQotICAgVGhlIG9wcG9zaXRlIHByb2JsZW0gY2FuIG9jY3VyIGlmIHlvdSBnaXZl IGFuIGlsbGVnYWwgc3dpdGNoIHRoYXQKLSAgIGhhcHBlbnMgdG8gbWF0Y2ggYSBkaXJlY3Rvcnkg bmFtZS4gRm9yIGV4YW1wbGU6Ci0KLSAgc2VuZCAvZiBvb2ZhLnR4dAotCi0gICBUaGVyZSBpcyBu byAiL2YiIHN3aXRjaCAodGhlcmUgYXJlIHNldmVyYWwgc3dpdGNoZXMgdGhhdCBiZWdpbiB3aXRo Ci0gICAiL2YiLCBzbyAiL2YiIGlzIGFtYmlndW91cykuIE5vdyBzdXBwb3NlIHRoZXJlIGlzIGFu ICJmIiBkaXJlY3RvcnkgaW4KLSAgIHRoZSByb290IGRpcmVjdG9yeTsgdGhlbiB0aGlzIGNvbW1h bmQgd291bGQgYmUgaW50ZXJwcmV0ZWQgYXM6Ci0KLSAgICAgU2VuZCBhbGwgdGhlIGZpbGVzIGlu IHRoZSAiL2YiIGRpcmVjdG9yeSwgZ2l2aW5nIGVhY2ggb25lIGFuIGFzLW5hbWUKLSAgICAgb2Yg Im9vZmEudHh0Ii4KLQotICAgVGhpcyBjb3VsZCBiZSBhIG1pc3Rha2UsIG9yIGl0IGNvdWxkIGJl IGV4YWN0bHkgd2hhdCB5b3UgaW50ZW5kZWQ7Ci0gICBDLUtlcm1pdCBoYXMgbm8gd2F5IG9mIHRl bGxpbmcgdGhlIGRpZmZlcmVuY2UuIFRvIGF2b2lkIHNpdHVhdGlvbnMgbGlrZQotICAgdGhpcywg c3BlbGwgc3dpdGNoZXMgb3V0IGluIGZ1bGwgdW50aWwgeW91IGFyZSBjb21mb3J0YWJsZSBlbm91 Z2ggd2l0aAotICAgdGhlbSB0byBrbm93IHRoZSBtaW5pbXVtIGFiYnJldmlhdGlvbiBmb3IgZWFj aCBvbmUuIEhpbnQ6IHVzZSA/IGFuZAotICAgY29tcGxldGlvbiB3aGlsZSB0eXBpbmcgc3dpdGNo ZXMgdG8gb2J0YWluIHRoZSBuZWNlc3NhcnkgZmVlZGJhY2suCi0KLTEuNS40LiBTdGFuZGFyZCBG aWxlIFNlbGVjdGlvbiBTd2l0Y2hlcwotCi0gICBUaGUgZm9sbG93aW5nIHN3aXRjaGVzIGFyZSB1 c2VkIG9uIGRpZmZlcmVudCBmaWxlLW9yaWVudGVkIGNvbW1hbmRzCi0gICAoc3VjaCBhcyBTRU5E LCBESVJFQ1RPUlksIERFTEVURSwgUFVSR0UpIHRvIHJlZmluZSB0aGUgc2VsZWN0aW9uIG9mCi0g ICBmaWxlcyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBzcGVjaWZpY2F0aW9uLgotCi0gICAvQUZURVI6 ZGF0ZS10aW1lCi0gICAgICAgICAgU2VsZWN0IG9ubHkgdGhvc2UgZmlsZXMgaGF2aW5nIGEgZGF0 ZS10aW1lIGxhdGVyIHRoYW4gdGhlIG9uZQotICAgICAgICAgIGdpdmVuLiBTZWUgWzM2MF1TZWN0 aW9uIDEuNiBmb3IgZGF0ZS10aW1lIGZvcm1hdHMuIFN5bm9ueW06Ci0gICAgICAgICAgL1NJTkNF LgotCi0gICAvTk9ULUFGVEVSOmRhdGUtdGltZQotICAgICAgICAgIFNlbGVjdCBvbmx5IHRob3Nl IGZpbGVzIGhhdmluZyBhIGRhdGUtdGltZSBub3QgbGF0ZXIgdGhhbiAoaS5lLgotICAgICAgICAg IGVhcmxpZXIgb3IgZXF1YWwgdG8pIHRoZSBvbmUgZ2l2ZW4uIFN5bm9ueW06IC9OT1QtU0lOQ0Uu Ci0KLSAgIC9CRUZPUkU6ZGF0ZS10aW1lCi0gICAgICAgICAgU2VsZWN0IG9ubHkgdGhvc2UgZmls ZXMgaGF2aW5nIGEgZGF0ZS10aW1lIGVhcmxpZXIgdGhhbiB0aGUgb25lCi0gICAgICAgICAgZ2l2 ZW4uCi0KLSAgIC9OT1QtQkVGT1JFOmRhdGUtdGltZQotICAgICAgICAgIFNlbGVjdCBvbmx5IHRo b3NlIGZpbGVzIGhhdmluZyBhIGRhdGUtdGltZSBub3QgZWFybGllciB0aGFuCi0gICAgICAgICAg KGkuZS4gbGF0ZXIgb3IgZXF1YWwgdG8pIHRoZSBvbmUgZ2l2ZW4uCi0KLSAgIC9ET1RGSUxFUwot ICAgICAgICAgIFVOSVggYW5kIE9TLTkgb25seTogVGhlIGZpbGVzcGVjIGlzIGFsbG93ZWQgdG8g bWF0Y2ggZmlsZXMgd2hvc2UKLSAgICAgICAgICBuYW1lcyBzdGFydCB3aXRoIChkb3QpIHBlcmlv ZC4gTm9ybWFsbHkgdGhlc2UgZmlsZXMgYXJlIG5vdAotICAgICAgICAgIHNob3duLgotCi0gICAv Tk9ET1RGSUxFUwotICAgICAgICAgIChVTklYIGFuZCBPUy05IG9ubHkpIERvbid0IHNob3cgZmls ZXMgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCBkb3QKLSAgICAgICAgICAocGVyaW9kKS4gVGhpcyBp cyB0aGUgb3Bwb3NpdGUgb2YgL0RPVEZJTEVTLCBhbmQgaXMgdGhlIGRlZmF1bHQuCi0gICAgICAg ICAgTm90ZSB0aGF0IHdoZW4gYSBkaXJlY3RvcnkgbmFtZSBzdGFydHMgd2l0aCBhIHBlcmlvZCwg dGhlCi0gICAgICAgICAgZGlyZWN0b3J5IGFuZCAoaW4gcmVjdXJzaXZlIG9wZXJhdGlvbnMpIGFs bCBpdHMgc3ViZGlyZWN0b3JpZXMKLSAgICAgICAgICBhcmUgc2tpcHBlZC4KLQotICAgL0xBUkdF Ui1USEFOOm51bWJlcgotICAgICAgICAgIE9ubHkgc2VsZWN0IGZpbGVzIGxhcmdlciB0aGFuIHRo ZSBnaXZlbiBudW1iZXIgb2YgYnl0ZXMuCi0KLSAgIC9TTUFMTEVSLVRIQU46bnVtYmVyCi0gICAg ICAgICAgT25seSBzZWxlY3QgZmlsZXMgc21hbGxlciB0aGFuIHRoZSBnaXZlbiBudW1iZXIgb2Yg Ynl0ZXMuCi0KLSAgIC9FWENFUFQ6cGF0dGVybgotICAgICAgICAgIFNwZWNpZmllcyB0aGF0IGFu eSBmaWxlcyB3aG9zZSBuYW1lcyBtYXRjaCB0aGUgcGF0dGVybiwgd2hpY2gKLSAgICAgICAgICBj YW4gYmUgYSByZWd1bGFyIGZpbGVuYW1lLCBvciBtYXkgY29udGFpbiAiKiIgYW5kL29yICI/Igot ICAgICAgICAgIG1ldGFjaGFyYWN0ZXJzICh3aWxkY2FyZHMpLCBhcmUgbm90IHRvIGJlIHNlbGVj dGVkLiBFeGFtcGxlOgotCi0gIHNlbmQgL2V4Y2VwdDoqLmxvZyAqLioKLQotICAgICAgICAgIHNl bmRzIGFsbCBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgZXhjZXB0IHRob3NlIHdpdGgg YQotICAgICAgICAgIGZpbGV0eXBlIG9mICIubG9nIi4gQW5vdGhlcjoKLQotICBzZW5kIC9leGNl cHQ6Ki5+Kn4gKi4qCi0KLSAgICAgICAgICBzZW5kcyBhbGwgZmlsZXMgZXhjZXB0IHRoZSBvbmVz IHRoYXQgbG9vayBsaWtlIEtlcm1pdCBvciBFTUFDUwotICAgICAgICAgIGJhY2t1cCBmaWxlcyAo c3VjaCBhcyAib29mYS50eHQufjE3fiIpIChvZiBjb3Vyc2UgeW91IGNhbiBhbHNvCi0gICAgICAg ICAgdXNlIHRoZSAvTk9CQUNLVVAgc3dpdGNoIGZvciB0aGlzKS4KLQotICAgICAgICAgIFRoZSBw YXR0ZXJuIG1hdGNoZXIgaXMgdGhlIHNhbWUgb25lIHVzZWQgYnkgSUYgTUFUQ0ggc3RyaW5nCi0g ICAgICAgICAgcGF0dGVybiAoWzM2MV1TZWN0aW9uIDcuNCksIHNvIHlvdSBjYW4gdGVzdCB5b3Vy IHBhdHRlcm5zIHVzaW5nCi0gICAgICAgICAgSUYgTUFUQ0guIElmIHlvdSBuZWVkIHRvIG1hdGNo IGEgbGl0ZXJhbCAqIG9yID8gKGV0YyksIHByZWNlZGUKLSAgICAgICAgICBpdCBieSBhIGJhY2tz bGFzaCAoXCkuIElmIHRoZSBwYXR0ZXJuIGNvbnRhaW5zIGFueSBzcGFjZXMsIGl0Ci0gICAgICAg ICAgbXVzdCBiZSBlbmNsb3NlZCBpbiBicmFjZXM6Ci0KLSAgc2VuZCAvZXhjZXB0OntGb28gYmFy fSAqLioKLQotICAgICAgICAgIFRoZSBwYXR0ZXJuIGNhbiBhbHNvIGJlIGEgbGlzdCBvZiB1cCB0 byA4IHBhdHRlcm5zLiBJbiB0aGlzCi0gICAgICAgICAgY2FzZSwgdGhlIGVudGlyZSBwYXR0ZXJu IG11c3QgYmUgZW5jbG9zZWQgaW4gYnJhY2VzLCBhbmQgZWFjaAotICAgICAgICAgIHN1Yi1wYXR0 ZXJuIG11c3QgYWxzbyBiZSBlbmNsb3NlZCBpbiBicmFjZXM7IHRoaXMgZWxpbWluYXRlcyB0aGUK LSAgICAgICAgICBuZWVkIGZvciBkZXNpZ25hdGluZyBhIHNlcGFyYXRvciBjaGFyYWN0ZXIsIHdo aWNoIGlzIGxpa2VseSB0bwotICAgICAgICAgIGFsc28gYmUgYSBsZWdhbCBmaWxlbmFtZSBjaGFy YWN0ZXIgb24gc29tZSBwbGF0Zm9ybSBvciBvdGhlciwKLSAgICAgICAgICBhbmQgdGhlcmVmb3Jl IGEgc291cmNlIG9mIGNvbmZ1c2lvbi4gWW91IG1heSBpbmNsdWRlIHNwYWNlcwotICAgICAgICAg IGJldHdlZW4gdGhlIHN1YnBhdHRlcm5zIGJ1dCB0aGV5IGFyZSBub3QgbmVjZXNzYXJ5LiBUaGUK LSAgICAgICAgICBmb2xsb3dpbmcgdHdvIGNvbW1hbmRzIGFyZSBlcXVpdmFsZW50OgotCi0gIHNl bmQgL2V4Y2VwdDp7e2NrKi5vfSB7Y2sqLmN9fSBjayouPwotICBzZW5kIC9leGNlcHQ6e3tjayou b317Y2sqLmN9fSBjayouPwotCi0gICAgICAgICAgSWYgYSBwYXR0ZXJuIGlzIHRvIGluY2x1ZGUg YSBsaXRlcmFsIGJyYWNlIGNoYXJhY3RlciwgcHJlY2VkZSBpdAotICAgICAgICAgIHdpdGggIlwi LiBBbHNvIG5vdGUgdGhlIGFwcGFyZW50IGNvbmZsaWN0IG9mIHRoaXMgbGlzdCBmb3JtYXQKLSAg ICAgICAgICBhbmQgdGhlIHN0cmluZy1saXN0IGZvcm1hdCBkZXNjcmliZWQgaW4gWzM2Ml1TZWN0 aW9uIDQuOS4xLiBJbgotICAgICAgICAgIGNhc2UgeW91IHdhbnQgdG8gaW5jbHVkZSBhIHdpbGRj YXJkIHN0cmluZy1saXN0IHdpdGggYnJhY2VzIG9uCi0gICAgICAgICAgaXRzIG91dGVyIGVuZHMg YXMgYW4gL0VYQ0VQVDogYXJndW1lbnQsIGRvIGl0IGxpa2UgdGhpczoKLQotICBzZW5kIC9leGNl cHQ6e3t7Y2t1dXNyLmMsY2t1dXMyLmMsY2t1dXM2LmN9fX0gY2t1dXMqLmMKLQotMS41LjUuIFNl dHRpbmcgUHJlZmVyZW5jZXMgZm9yIERpZmZlcmVudCBDb21tYW5kcwotCi0gICBDZXJ0YWluIG9m dC11c2VkIGNvbW1hbmRzIG9mZmVyIGxvdHMgb2Ygc3dpdGNoZXMgYmVjYXVzZSBkaWZmZXJlbnQK LSAgIHBlb3BsZSBoYXZlIGRpZmZlcmVudCByZXF1aXJlbWVudHMgb3IgcHJlZmVyZW5jZXMuIEZv ciBleGFtcGxlLCBzb21lCi0gICBwZW9wbGUgd2FudCB0byBiZSBhYmxlIHRvIGRlbGV0ZSBmaWxl cyB3aXRob3V0IGhhdmluZyB0byB3YXRjaCBhIGxpc3QKLSAgIG9mIHRoZSBkZWxldGVkIGZpbGVz IHNjcm9sbCBwYXN0LCB3aGlsZSBvdGhlcnMgd2FudCB0byBiZSBwcm9tcHRlZCBmb3IKLSAgIHBl cm1pc3Npb24gdG8gZGVsZXRlIGVhY2ggZmlsZS4gRGlmZmVyZW50IHBlb3BsZSBwcmVmZXIgZGlm ZmVyZW50Ci0gICBkaXJlY3RvcnktbGlzdGluZyBzdHlsZXMuIEFuZCBzbyBvbi4gU3VjaCBjb21t YW5kcyBjYW4gYmUgdGFpbG9yZWQgd2l0aAotICAgdGhlIFNFVCBPUFRJT05TIGNvbW1hbmQ6Ci0K LSAgIFNFVCBPUFRJT05TIGNvbW1hbmQgWyBzd2l0Y2ggWyBzd2l0Y2ggWyAuLi4gXSBdIF0KLSAg ICAgICAgICBTZXRzIGVhY2ggc3dpdGNoIGFzIHRoZSBkZWZhdWx0IGZvciB0aGUgZ2l2ZW4gY29t bWFuZCwgcmVwbGFjaW5nCi0gICAgICAgICAgdGhlICJmYWN0b3J5IGRlZmF1bHQiLiBPZiBjb3Vy c2UgeW91IGNhbiBhbHNvIG92ZXJyaWRlIGFueQotICAgICAgICAgIGRlZmF1bHRzIGVzdGFibGlz aGVkIGJ5IHRoZSBTRVQgT1BUSU9OUyBjb21tYW5kIGJ5IGluY2x1ZGluZyB0aGUKLSAgICAgICAg ICByZWxldmFudCBzd2l0Y2hlcyBpbiB0aGUgYWZmZWN0ZWQgY29tbWFuZCBhbnkgdGltZSB5b3Ug aXNzdWUgaXQuCi0KLSAgIFNIT1cgT1BUSU9OUwotICAgICAgICAgIExpc3RzIHRoZSBjb21tYW5k cyB0aGF0IGFsbG93cyBvcHRpb24tc2V0dGluZywgYW5kIHRoZSBvcHRpb25zCi0gICAgICAgICAg Y3VycmVudGx5IGluIGVmZmVjdCwgaWYgYW55LCBmb3IgZWFjaC4gU3dpdGNoZXMgdGhhdCBoYXZl Ci0gICAgICAgICAgc3lub255bXMgYXJlIHNob3duIHVuZGVyIHRoZWlyIHByaW1hcnkgbmFtZTsg Zm9yIGV4YW1wbGUuIC9MT0cKLSAgICAgICAgICBhbmQgL1ZFUkJPU0UgYXJlIHNob3duIGFzIC9M SVNULgotCi0gICBDb21tYW5kcyBmb3Igd2hpY2ggb3B0aW9ucyBtYXkgYmUgc2V0IGluY2x1ZGUg RElSRUNUT1JZLCBERUxFVEUsIFBVUkdFLAotICAgYW5kIFRZUEUuIEV4YW1wbGVzOgotCi0gIFNF VCBPUFRJT05TIERJUkVDVE9SWSAvUEFHRSAvTk9CQUNLVVAgL0hFQURJTkcgL1NPUlQ6REFURSAv UkVWRVJTRQotICBTRVQgT1BUSU9OUyBERUxFVEUgL0xJU1QgL05PSEVBRElORyAvTk9QQUdFIC9O T0FTSyAvTk9ET1RGSUxFUwotICBTRVQgT1BUSU9OUyBUWVBFIC9QQUdFCi0KLSAgIE5vdCBuZWNl c3NhcmlseSBhbGwgb2YgYSBjb21tYW5kJ3Mgc3dpdGNoZXMgY2FuIGJlIHNldCBhcyBvcHRpb25z LiBGb3IKLSAgIGV4YW1wbGUsIGZpbGUgc2VsZWN0aW9uIHN3aXRjaGVzLCBzaW5jZSB0aGVzZSB3 b3VsZCBub3JtYWxseSBiZQotICAgZGlmZmVyZW50IGZvciBlYWNoIGNvbW1hbmQuCi0KLSAgIFB1 dCB0aGUgZGVzaXJlZCBTRVQgT1BUSU9OUyBjb21tYW5kcyBpbiB5b3VyIEMtS2VybWl0IGN1c3Rv bWl6YXRpb24KLSAgIGZpbGUgZm9yIGVhY2ggY29tbWFuZCB3aG9zZSBkZWZhdWx0IHN3aXRjaGVz IHlvdSB3YW50IHRvIGNoYW5nZSBldmVyeQotICAgdGltZSB5b3UgcnVuIEMtS2VybWl0LgotCi0x LjYuIERhdGVzIGFuZCBUaW1lcwotCi0gICBTb21lIGNvbW1hbmRzIGFuZCBzd2l0Y2hlcyB0YWtl IGRhdGUtdGltZSB2YWx1ZXMsIHN1Y2ggYXM6Ci0KLSAgc2VuZCAvYWZ0ZXI6ezgtRmViLTIwMDAg MTA6Mjg6MDF9Ci0KLSAgIFZhcmlvdXMgZGF0ZS10aW1lIGZvcm1hdHMgYXJlIGFjY2VwdGFibGUu IFRoZSBydWxlcyBmb3IgdGhlIGRhdGUgYXJlOgotCi0gICAgICogVGhlIHllYXIgbXVzdCBoYXZl IDQgZGlnaXRzLgotICAgICAqIElmIHRoZSB5ZWFyIGNvbWVzIGZpcnN0LCB0aGUgc2Vjb25kIGZp ZWxkIGlzIHRoZSBtb250aC4KLSAgICAgKiBUaGUgZGF5LCBtb250aCwgYW5kIHllYXIgbWF5IGJl IHNlcGFyYXRlZCBieSBzcGFjZXMsIC8sIC0sIG9yCi0gICAgICAgdW5kZXJzY29yZS4KLSAgICAg KiBUaGUgbW9udGggbWF5IGJlIG51bWVyaWMgKDEgPSBKYW51YXJ5KSBvciBzcGVsbGVkIG91dCBv cgotICAgICAgIGFiYnJldmlhdGVkIGluIEVuZ2xpc2guCi0KLSAgIElmIHRoZSBkYXRlLXRpbWUg c3RyaW5nIGNvbnRhaW5zIGFueSBzcGFjZXMsIGl0IG11c3QgYmUgZW5jbG9zZWQgaW4KLSAgIGJy YWNlcy4gRXhhbXBsZXMgb2YgbGVnYWwgZGF0ZXM6Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg ICAgIEludGVycHJldGF0aW9uOgotICAyMDAwLUZlYi04ICAgICAgICAgICAgICAgIDggRmVicnVh cnkgMjAwMAotICB7MjAwMCBGZWIgOH0gICAgICAgICAgICAgIDggRmVicnVhcnkgMjAwMAotICAy MDAwL0ZlYi84ICAgICAgICAgICAgICAgIDggRmVicnVhcnkgMjAwMAotICAyMDAwX0ZlYl84ICAg ICAgICAgICAgICAgIDggRmVicnVhcnkgMjAwMAotICAyMDAwLTItOCAgICAgICAgICAgICAgICAg IDggRmVicnVhcnkgMjAwMAotICAyMDAwLTAyLTA4ICAgICAgICAgICAgICAgIDggRmVicnVhcnkg MjAwMAotICA4LUZlYi0yMDAwICAgICAgICAgICAgICAgIDggRmVicnVhcnkgMjAwMAotICAwOC1G ZWItMjAwMCAgICAgICAgICAgICAgIDggRmVicnVhcnkgMjAwMAotICAxMi8yNS8yMDAwICAgICAg ICAgICAgICAgIDI1IERlY2VtYmVyIDIwMDAKLSAgMjUvMTIvMjAwMCAgICAgICAgICAgICAgICAy NSBEZWNlbWJlciAyMDAwCi0KLSAgIFRoZSBsYXN0IHR3byBleGFtcGxlcyBzaG93IHRoYXQgd2hl biB0aGUgeWVhciBjb21lcyBsYXN0LCBhbmQgdGhlIG1vbnRoCi0gICBpcyBnaXZlbiBudW1lcmlj YWxseSwgdGhlIG9yZGVyIG9mIHRoZSBkYXkgYW5kIG1vbnRoIGRvZXNuJ3QgbWF0dGVyIGFzCi0g ICBsb25nIGFzIHRoZSBkYXkgaXMgMTMgb3IgZ3JlYXRlciAobW0vZGQveXl5eSBpcyBjb21tb25s eSB1c2VkIGluIHRoZQotICAgVVNBLCB3aGVyZWFzIGRkL21tL3l5eXkgaXMgdGhlIG5vcm0gaW4g RXVyb3BlKS4gSG93ZXZlcjoKLQotICAwOC8wMi8yMDAwICAgICAgICAgICAgICAgIElzIGFtYmln dW91cyBhbmQgdGhlcmVmb3JlIG5vdCBhY2NlcHRlZC4KLQotICAgSWYgYSBkYXRlIGlzIGdpdmVu LCB0aGUgdGltZSBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gMDA6MDA6MDAuIElmCi0gICB0 aGUgdGltZSBpcyBnaXZlbiB3aXRoIGEgZGF0ZSwgaXQgbXVzdCBmb2xsb3cgdGhlIGRhdGUsIHNl cGFyYXRlZCBieQotICAgc3BhY2UsIC8sIC0sIG9yIHVuZGVyc2NvcmUsIGFuZCB3aXRoIGhvdXJz LCBtaW51dGVzLCBhbmQgc2Vjb25kcwotICAgc2VwYXJhdGVkIGJ5IGNvbG9uICg6KS4gRXhhbXBs ZToKLQotICAyMDAwLUZlYi04IDEwOjI4OjAxICAgICAgIFJlcHJlc2VudHMgOCBGZWJydWFyeSAy MDAwLCAxMDoyODowMWFtCi0KLSAgIElmIGEgZGF0ZSBpcyBub3QgZ2l2ZW4sIHRoZSBjdXJyZW50 IGRhdGUgaXMgdXNlZCBhbmQgYSB0aW1lIGlzCi0gICByZXF1aXJlZC4KLQotICAgVGltZSBmb3Jt YXQgaXMgaGg6bW06c3Mgb3IgaGg6bW0gb3IgaGggaW4gMjQtaG91ciBmb3JtYXQsIG9yIGZvbGxv d2VkCi0gICBieSAiYW0iIG9yICJwbSIgKG9yICJBTSIgb3IgIlBNIikgdG8gaW5kaWNhdGUgbW9y bmluZyBvciBhZnRlcm5vb24uCi0gICBFeGFtcGxlcyBvZiB0aW1lcyB0aGF0IGFyZSBhY2NlcHRh YmxlOgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcnByZXRhdGlvbjoKLSAgMzoy Mzo1NiAgICAgICAgICAgICAgICAgICAgMzoyMzo1NmFtCi0gIDM6MjM6NTZhbSAgICAgICAgICAg ICAgICAgIDM6MjM6NTZhbQotICAzOjIzOjU2cG0gICAgICAgICAgICAgICAgICAzOjIzOjU2cG0g PSAxNToyMzo1NgotIDE1OjIzOjU2ICAgICAgICAgICAgICAgICAgICAzOjIzOjU2cG0gPSAxNToy Mzo1NgotICAzOjIzcG0gICAgICAgICAgICAgICAgICAgICAzOjIzOjAwcG0gPSAxNToyMzowMAot ICAzOjIzUE0gICAgICAgICAgICAgICAgICAgICAzOjIzOjAwcG0gPSAxNToyMzowMAotICAzcG0g ICAgICAgICAgICAgICAgICAgICAgICAzOjAwOjAwcG0gPSAxNTowMDowMAotCi0gICBFeGFtcGxl cyBvZiBsZWdhbCBkYXRlLXRpbWVzOgotCi0gIHNlbmQgL2FmdGVyOns4IEZlYiAyMDAwIDEwOjI4 OjAxfQotICBzZW5kIC9hZnRlcjo4X0ZlYl8yMDAwXzEwOjI4OjAxCi0gIHNlbmQgL2FmdGVyOjgt RmViLTIwMDAvMTA6Mjg6MDEKLSAgc2VuZCAvYWZ0ZXI6MjAwMC8wMi8wOC8xMDoyODowMQotICBz ZW5kIC9hZnRlcjoyMDAwLzAyLzA4XzEwOjI4OjAxCi0gIHNlbmQgL2FmdGVyOjIwMDAvMDIvMDhf MTA6Mjg6MDFhbQotICBzZW5kIC9hZnRlcjoyMDAwLzAyLzA4XzEwOjI4OjAxcG0KLSAgc2VuZCAv YWZ0ZXI6MjAwMC8wMi8wOF8xMDoyOHBtCi0gIHNlbmQgL2FmdGVyOjIwMDAvMDIvMDhfMTBwbQot ICBzZW5kIC9hZnRlcjoxMDowMDowMHBtCi0gIHNlbmQgL2FmdGVyOjEwOjAwcG0KLSAgc2VuZCAv YWZ0ZXI6MTBwbQotICBzZW5kIC9hZnRlcjoyMgotCi0gICBGaW5hbGx5LCB0aGVyZSBpcyBhIHNw ZWNpYWwgYWxsLW51bWVyaWMgZm9ybWF0IHlvdSBjYW4gdXNlOgotCi0gIHl5eXltbWRkIGhoOm1t OnNzCi0KLSAgIEZvciBleGFtcGxlOgotCi0gIDIwMDAwMjA4IDEwOjI4OjAxCi0KLSAgIFRoaXMg aXMgS2VybWl0J3Mgc3RhbmRhcmQgZGF0ZS10aW1lIGZvcm1hdCAoYmFzZWQgb24gSVNPIDg2MDEp LCBhbmQgaXMKLSAgIGFjY2VwdGVkIChhbW9uZyBvdGhlciBmb3JtYXRzKSBieSBhbnkgY29tbWFu ZCBvciBzd2l0Y2ggdGhhdCByZXF1aXJlcyBhCi0gICBkYXRlLXRpbWUsIGFuZCBpcyBvdXRwdXQg YnkgYW55IGZ1bmN0aW9uIHdob3NlIHJlc3VsdCBpcyBhIGNhbGVuZGFyCi0gICBkYXRlLXRpbWUu Ci0KLSAgIFRoZXJlIGFyZSBubyBvcHRpb25hbCBwYXJ0cyB0byB0aGlzIGZvcm1hdCBhbmQgaXQg bXVzdCBiZSBleGFjdGx5IDE3Ci0gICBjaGFyYWN0ZXJzIGxvbmcsIHB1bmN0dWF0ZWQgYXMgc2hv d24gKGV4Y2VwdCB5b3UgY2FuIHN1YnN0aXR1dGUKLSAgIHVuZGVyc2NvcmUgZm9yIHNwYWNlIGlu IGNvbnRleHRzIHdoZXJlIGEgc2luZ2xlICJ3b3JkIiBpcyByZXF1aXJlZCkuCi0gICBUaGUgdGlt ZSBpcyBpbiAyNC1ob3VyIGZvcm1hdCAoMjM6MDA6MDAgaXMgMTE6MDBwbSkuIFRoaXMgaXMgdGhl IGZvcm1hdAotICAgcmV0dXJuZWQgYnkgXGZkYXRlKGZpbGVuYW1lKSwgc28geW91IGNhbiBhbHNv IHVzZSBjb25zdHJ1Y3Rpb25zIGxpa2UKLSAgIHRoaXM6Ci0KLSAgc2VuZCAvYWZ0ZXI6XGZkYXRl KG9vZmEudHh0KQotCi0gICB3aGljaCBtZWFucyAiYWxsIGZpbGVzIG5ld2VyIHRoYW4gb29mYS50 eHQiLgotCi0gICBCZXNpZGVzIGV4cGxpY2l0IGRhdGVzLCB5b3UgY2FuIGFsc28gdXNlIHRoZSBh bnkgb2YgdGhlIGZvbGxvd2luZwotICAgc2hvcnRjdXRzOgotCi0gICBUT0RBWQotICAgICAgICAg IFN0YW5kcyBmb3IgdGhlIGN1cnJlbnQgZGF0ZSBhdCAwMDowMDowMC4KLQotICAgVE9EQVkgMTI6 MzQ6NTYKLSAgICAgICAgICBTdGFuZHMgZm9yIHRoZSBjdXJyZW50IGRhdGUgYXQgdGhlIGdpdmVu IHRpbWUuCi0KLSAgIFlFU1RFUkRBWQotICAgICAgICAgIFN0YW5kcyBmb3IgeWVzdGVyZGF5J3Mg ZGF0ZSBhdCAwMDowMDowMC4gQSB0aW1lIG1heSBhbHNvIGJlCi0gICAgICAgICAgZ2l2ZW4uCi0K LSAgIFRPTU9SUk9XCi0gICAgICAgICAgU3RhbmRzIGZvciB0b21vcnJvdydzIGRhdGUgYXQgMDA6 MDA6MDAuIEEgdGltZSBtYXkgYWxzbyBiZQotICAgICAgICAgIGdpdmVuLgotCi0gICArIG51bWJl ciB7IERBWVMsIFdFRUtTLCBNT05USFMsIFlFQVJTIH0gWyB0aW1lIF0KLSAgICAgICAgICBJcyBy ZXBsYWNlZCBieSB0aGUgZnV0dXJlIGRhdGUgaW5kaWNhdGVkLCByZWxhdGl2ZSB0byB0aGUKLSAg ICAgICAgICBjdXJyZW50IGRhdGUuIElmIHRoZSB0aW1lIGlzIG9taXR0ZWQsIDAwOjAwOjAwIGlz IHVzZWQuCi0gICAgICAgICAgRXhhbXBsZXM6ICszZGF5cywgKzJ3ZWVrcywgKzF5ZWFyLCArMzdt b250aHMuCi0KLSAgIC0gbnVtYmVyIHsgREFZUywgV0VFS1MsIE1PTlRIUywgWUVBUlMgfSBbIHRp bWUgXQotCi0gICAgICAgICAgSXMgcmVwbGFjZWQgYnkgdGhlIHBhc3QgZGF0ZSBpbmRpY2F0ZWQs IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50Ci0gICAgICAgICAgZGF0ZS4gSWYgdGhlIHRpbWUgaXMg b21pdHRlZCwgMDA6MDA6MDAgaXMgdXNlZC4KLQotICAgVGhlIHRpbWUgY2FuIGJlIHNlcGFyYXRl ZCBmcm9tIHRoZSBkYXRlIHNob3J0Y3V0IGJ5IGFueSBvZiB0aGUgc2FtZQotICAgc2VwYXJhdG9y cyB0aGF0IGFyZSBhbGxvd2VkIGZvciBleHBsaWNpdCBkYXRlLXRpbWVzOiBzcGFjZSwgaHlwaGVu LAotICAgc2xhc2gsIHBlcmlvZCwgb3IgdW5kZXJzY29yZS4gSW4gc3dpdGNoZXMgYW5kIG90aGVy IHNwYWNlLWRlbGltaXRlZAotICAgZmllbGRzLCB1c2Ugbm9uLXNwYWNlcyB0byBzZXBhcmF0ZSBk YXRlL3RpbWUgZmllbGRzLCBvciBlbmNsb3NlIHRoZQotICAgZGF0ZS10aW1lIGluIGJyYWNlcywg ZS5nLjoKLQotICBwdXJnZSAvYmVmb3JlOi00ZGF5c18xMjowMDowMAotICBwdXJnZSAvYmVmb3Jl OnstIDQgZGF5cyAxMjowMDowMH0KLQotICAgT2YgY291cnNlIHlvdSBjYW4gYWxzbyB1c2UgdmFy aWFibGVzOgotCi0gIGRlZmluZSBcJW4gNDMKLSAgcHVyZ2UgL2JlZm9yZTotXCVuZGF5c18xMjow MDowMAotCi0gICBTaG9ydGN1dCBuYW1lcyBjYW4gYmUgYWJicmV2aWF0ZWQgdG8gYW55IGxlbmd0 aCB0aGF0IHN0aWxsCi0gICBkaXN0aW5ndWlzaGVzIHRoZW0gZnJvbSBhbnkgb3RoZXIgbmFtZSB0 aGF0IGNhbiBhcHBlYXIgaW4gdGhlIHNhbWUKLSAgIGNvbnRleHQsIGUuZy4gIlRPRCIgZm9yIHRv ZGF5LCAiWSIgZm9yIHllc3RlcmRheS4gQWxzbywgdGhlIHNwZWNpYWwKLSAgIGFiYnJldmlhdGlv biAid2tzIiBpcyBhY2NlcHRlZCBmb3IgV0VFS1MsIGFuZCAieXJzIiBmb3IgIllFQVJTIi4KLQot ICAgKFRvIHNlZSBob3cgdG8gc3BlY2lmeSBkYXRlcyByZWxhdGl2ZSB0byBhIHNwZWNpZmljIGRh dGUsIHJhdGhlciB0aGFuCi0gICB0aGUgY3VycmVudCBvbmUsIHNlZSB0aGUgWzM2M11cZm1qZCgp IGZ1bmN0aW9uIGRlc2NyaXB0aW9uIGJlbG93LikKLQotICAgWW91IGNhbiBjaGVjayBkYXRlIGZv cm1hdHMgd2l0aCB0aGUgREFURSBjb21tYW5kLiBEQVRFIGJ5IGl0c2VsZiBwcmludHMKLSAgIHRo ZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUgaW4gc3RhbmRhcmQgZm9ybWF0OiB5eXl5bW1kZCBoaDpt bTpzcy4gREFURQotICAgZm9sbG93ZWQgYnkgYSBkYXRlIGFuZC9vciB0aW1lIChpbmNsdWRpbmcg c2hvcnRjdXRzKSBjb252ZXJ0cyBpdCB0bwotICAgc3RhbmRhcmQgZm9ybWF0IGlmIGl0IGNhbiB1 bmRlcnN0YW5kIGl0LCBvdGhlcndpc2UgaXQgcHJpbnRzIGFuIGVycm9yCi0gICBtZXNzYWdlLgot Ci0gICBUaGUgZm9sbG93aW5nIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zIGRlYWwgd2l0aCBkYXRl cyBhbmQgdGltZXM7IGFueQotICAgZnVuY3Rpb24gYXJndW1lbnQgZGVzaWduYXRlZCBhcyAiZGF0 ZS10aW1lIiBjYW4gYmUgaW4gYW55IG9mIHRoZQotICAgZm9ybWF0cyBkZXNjcmliZWQgYWJvdmUu Ci0KLSAgIFx2KGRheSkKLSAgICAgICAgICBUaGUgZmlyc3QgdGhyZWUgbGV0dGVycyBvZiB0aGUg RW5nbGlzaCB3b3JkIGZvciB0aGUgY3VycmVudCBkYXkKLSAgICAgICAgICBvZiB0aGUgd2Vlaywg ZS5nLiAiV2VkIi4KLQotICAgXGZkYXkoZGF0ZS10aW1lKQotICAgICAgICAgIFRoZSBmaXJzdCB0 aHJlZSBsZXR0ZXJzIG9mIHRoZSBFbmdsaXNoIHdvcmQgZm9yIGRheSBvZiB0aGUgd2VlawotICAg ICAgICAgIG9mIHRoZSBnaXZlbiBkYXRlLiBJZiBhIHRpbWUgaXMgaW5jbHVkZWQsIGl0IGlzIGln bm9yZWQuCi0gICAgICAgICAgRXhhbXBsZTogXGZkYXkoOCBGZWIgMTk4OCkgPSAiTW9uIi4KLQot ICAgXHYobmRheSkKLSAgICAgICAgICBUaGUgbnVtZXJpYyBkYXkgb2YgdGhlIHdlZWs6IDAgPSBT dW5kYXksIDEgPSBNb25kYXksIC4uLiwgNiA9Ci0gICAgICAgICAgU2F0dXJkYXkuCi0KLSAgIFxm bmRheShkYXRlLXRpbWUpCi0gICAgICAgICAgVGhlIG51bWVyaWMgZGF5IG9mIHRoZSB3ZWVrIGZv ciB0aGUgZ2l2ZW4gZGF0ZS4gSWYgYSB0aW1lIGlzCi0gICAgICAgICAgaW5jbHVkZWQsIGl0IGlz IGlnbm9yZWQuIEV4YW1wbGU6IFxmbmRheSg4IEZlYiAxOTg4KSA9ICIxIi4KLQotICAgXHYoZGF0 ZSkKLSAgICAgICAgICBUaGUgY3VycmVudCBkYXRlIGFzIGRkIG1tbSB5eXl5LCBlLmcuICIwOCBG ZWIgMjAwMCIgKGFzIGluIHRoaXMKLSAgICAgICAgICBleGFtcGxlLCBhIGxlYWRpbmcgemVybyBp cyBzdXBwbGllZCBmb3IgZGF5LW9mLW1vbnRoIGxlc3MgdGhhbgotICAgICAgICAgIDEwKS4KLQot ICAgXHYobmRhdGUpCi0gICAgICAgICAgVGhlIGN1cnJlbnQgZGF0ZSBpbiBudW1lcmljIGZvcm1h dDogeXl5eW1tZGQsIGUuZy4gIjIwMDAwMjA4Ii4KLQotICAgXHYodGltZSkKLSAgICAgICAgICBU aGUgY3VycmVudCB0aW1lIGFzIGhoOm1tOnNzLCBlLmcuICIxNToyNzoxNCIuCi0KLSAgIFxmdGlt ZSh0aW1lKQotICAgICAgICAgIFRoZSBnaXZlbiBmcmVlLWZvcm1hdCBkYXRlIGFuZC9vciB0aW1l IChlLmcuICIzcG0iKSByZXR1cm5zIHRoZQotICAgICAgICAgIHRpbWUgKHdpdGhvdXQgdGhlIGRh dGUpIGNvbnZlcnRlZCB0byBoaDptbTpzcyAyNC1ob3VyIGZvcm1hdCwKLSAgICAgICAgICBlLmcu ICIxNTowMDowMCIgKHRoZSBkYXRlLCBpZiBnaXZlbiwgaXMgaWdub3JlZCkuCi0KLSAgIFx2KG50 aW1lKQotICAgICAgICAgIFRoZSBjdXJyZW50IHRpbWUgYXMgc2Vjb25kcyBzaW5jZSBtaWRuaWdo dCwgZS5nLiAiNTU2MzQiLgotCi0gICBcdih0ZnRpbWUpCi0gICAgICAgICAgVGhlIGVsYXBzZWQg dGltZSBvZiB0aGUgbW9zdCByZWNlbnQgZmlsZS10cmFuc2ZlciBvcGVyYXRpb24gaW4KLSAgICAg ICAgICBzZWNvbmRzLgotCi0gICBcdihpbnRpbWUpCi0gICAgICAgICAgVGhlIGVsYXBzZWQgdGlt ZSBmb3IgdGhlIG1vc3QgcmVjZW50IElOUFVUIGNvbW1hbmQgdG8gY29tcGxldGUsCi0gICAgICAg ICAgaW4gbWlsbGlzZWNvbmRzLgotCi0gICBcZm50aW1lKHRpbWUpCi0gICAgICAgICAgVGhlIGdp dmVuIGZyZWUtZm9ybWF0IGRhdGUgYW5kL29yIHRpbWUgaXMgY29udmVydGVkIHRvIHNlY29uZHMK LSAgICAgICAgICBzaW5jZSBtaWRuaWdodCAodGhlIGRhdGUsIGlmIGdpdmVuLCBpcyBpZ25vcmVk KS4gVGhpcyBmdW5jdGlvbgotICAgICAgICAgIHJlcGxhY2VzIFxmdG9kMnNlY3MoKSwgd2hpY2gg aXMgbm93IGEgc3lub255bSBmb3IgXGZudGltZSgpLgotICAgICAgICAgIFVubGlrZSBcZnRvZDJz ZWNzKCksIFxmbnRpbWUoKSBhbGxvd3MgYSBkYXRlIHRvIGJlIGluY2x1ZGVkLCBhbmQKLSAgICAg ICAgICBpdCBhbGxvd3MgdGhlIHRpbWUgdG8gYmUgaW4gZnJlZSBmb3JtYXQgKGxpa2UgM3BtKSwg YW5kIGl0Ci0gICAgICAgICAgYWxsb3dzIHRoZSBhbW91bnQgb2YgdGltZSB0byBiZSBtb3JlIHRo YW4gMjQgaG91cnMuIEUuZy4KLSAgICAgICAgICBcZm50aW1lKDQ4OjAwOjAwKSA9IDE3MjgwMC4g RXhhbXBsZSBvZiB1c2U6Ci0KLSAgc2V0IGFsYXJtIFxmbnRpbWUoNDg6MDA6MDApIDsgc2V0IGFs YXJtIDQ4IGhvdXJzIGZyb20gbm93LgotCi0gICBcZm4ydGltZShzZWNvbmRzKQotICAgICAgICAg IFRoZSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcyBpcyBjb252ZXJ0ZWQgdG8gaGg6bW06c3MgZm9y bWF0LgotCi0gICBcZmRhdGUoZmlsZW5hbWUpCi0gICAgICAgICAgUmV0dXJucyB0aGUgbW9kaWZp Y2F0aW9uIGRhdGUtdGltZSBvZiB0aGUgZ2l2ZW4gZmlsZSBpbiBzdGFuZGFyZAotICAgICAgICAg IGZvcm1hdDogeXl5eW1tZGQgaGg6bW06c3MuCi0KLSAgIFxmY3Z0ZGF0ZShkYXRlLXRpbWUpCi0g ICAgICAgICAgQ29udmVydHMgYSBmcmVlLWZvcm1hdCBkYXRlIGFuZC9vciB0aW1lIHRvIEtlcm1p dCBzdGFuZGFyZAotICAgICAgICAgIGZvcm1hdDogeXl5eW1tZGQgaGg6bW06c3MuIElmIG5vIGFy Z3VtZW50IGlzIGdpdmVuLCByZXR1cm5zIHRoZQotICAgICAgICAgIGN1cnJlbnQgZGF0ZS10aW1l IGluIHN0YW5kYXJkIGZvcm1hdC4gSWYgYSBkYXRlIGlzIGdpdmVuIGJ1dCBubwotICAgICAgICAg IHRpbWUsIHRoZSBjb252ZXJ0ZWQgZGF0ZSBpcyByZXR1cm5lZCB3aXRob3V0IGEgdGltZS4gSWYg YSB0aW1lCi0gICAgICAgICAgaXMgZ2l2ZW4gd2l0aCBubyBkYXRlLCB0aGUgY3VycmVudCBkYXRl IGlzIHN1cHBsaWVkLiBFeGFtcGxlczoKLQotICBcZmN2dGRhdGUoNCBKdWwgMjAwMCAyOjIxOjE3 cG0pID0gMjAwMDA3MDQgMTQ6MjE6MTcKLSAgXGZjdnRkYXRlKCkgPSAyMDAwMDcwNCAxNDoyMTox NyAob24gNCBKdWwgMjAwMCBhdCAyOjIxOjE3cG0pLgotICBcZmN2dGQoNCBKdWwgMjAwMCkgPSAy MDAwMDcwNAotICBcZmN2dGQoNnBtKSA9IDIwMDAwNzA0IDE4OjAwOjAwIChvbiA0IEp1bCAyMDAw IGF0IDY6MDBwbSkuCi0KLSAgIFxmZGF5b2Z5ZWFyKGRhdGUtdGltZSkKLSAgIFxmZG95KGRhdGUt dGltZSkKLSAgICAgICAgICBDb252ZXJ0cyBhIGZyZWUtZm9ybWF0IGRhdGUgYW5kL29yIHRpbWUg dG8geXl5eWRkZCwgd2hlcmUgZGRkIGlzCi0gICAgICAgICAgdGhlIDMtZGlnaXQgZGF5IG9mIHRo ZSB5ZWFyLCBhbmQgMSBKYW51YXJ5IGlzIERheSAxLiBJZiBhIHRpbWUKLSAgICAgICAgICBpcyBp bmNsdWRlZCB3aXRoIHRoZSBkYXRlLCBpdCBpcyByZXR1cm5lZCBpbiBzdGFuZGFyZCBmb3JtYXQu IElmCi0gICAgICAgICAgYSBkYXRlIGlzIGluY2x1ZGVkIGJ1dCBubyB0aW1lLCB0aGUgZGF0ZSBp cyByZXR1cm5lZCB3aXRob3V0IGEKLSAgICAgICAgICB0aW1lLiBJZiBhIHRpbWUgaXMgZ2l2ZW4g d2l0aCBubyBkYXRlLCB0aGUgdGltZSBpcyBjb252ZXJ0ZWQgYW5kCi0gICAgICAgICAgdGhlIGN1 cnJlbnQgZGF0ZSBpcyBzdXBwbGllZC4gSWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4sIHRoZQotICAg ICAgICAgIGN1cnJlbnQgZGF0ZS10aW1lIGlzIHJldHVybmVkLiBTeW5vbnltOiBcZmRveSgpLiBF eGFtcGxlczoKLQotICBcZmRkYXlvZnllYXIoNCBKdWwgMjAwMCAyOjIxOjE3cG0pID0gMjAwMDE4 NSAxNDoyMToxNwotICBcZmRveSgpID0gMjAwMDE4NSAxNDoyMToxNyAob24gNCBKdWwgMjAwMCBh dCAyOjIxOjE3cG0pLgotICBcZmRveSg0IEp1bCAyMDAwKSA9IDIwMDAxODUKLSAgXGZkb3koNnBt KSA9IDIwMDAxODUgMTg6MDA6MDAgKG9uIDQgSnVsIDIwMDAgYXQgNjowMHBtKS4KLQotICAgTm90 ZTogVGhlIHl5eXlkZGQgZGF5LW9mLXllYXIgZm9ybWF0IGlzIG9mdGVuIGVycm9uZW91c2x5IHJl ZmVycmVkIHRvCi0gICBhcyBhIEp1bGlhbiBkYXRlLiBIb3dldmVyLCBhIHRydWUgSnVsaWFuIGRh dGUgaXMgYSBzaW1wbGUgY291bnRpbmcKLSAgIG51bWJlciwgdGhlIG51bWJlciBvZiBkYXlzIHNp bmNlIGEgY2VydGFpbiBmaXhlZCBkYXkgaW4gdGhlIHBhc3QuCi0gICBbMzY0XVNlZSBcZm1qZCgp IGJlbG93LgotCi0gICBcZmRveTJkYXRlKGRhdGUtdGltZSkKLSAgICAgICAgICBDb252ZXJ0cyBh IGRhdGUgb3IgZGF0ZS10aW1lIGluIGRheS1vZi15ZWFyIGZvcm1hdCB0byBhIHN0YW5kYXJkCi0g ICAgICAgICAgZm9ybWF0IGRhdGUuIEEgeXl5eWRkZC1mb3JtYXQgZGF0ZSBtdXN0IGJlIHN1cHBs aWVkOyB0aW1lIGlzCi0gICAgICAgICAgb3B0aW9uYWwuIFRoZSBnaXZlbiBkYXRlIGlzIGNvbnZl cnRlZCB0byB5eXl5bW1kZCBmb3JtYXQuIElmIGEKLSAgICAgICAgICB0aW1lIGlzIGdpdmVuLCBp dCBpcyBjb252ZXJ0ZWQgdG8gMjQtaG91ciBmb3JtYXQuIEV4YW1wbGVzOgotCi0gIFxmZG95MmRh dGUoMjAwMDE4NSkgPSAyMDAwMDcwNAotICBcZmRveTIoMjAwMDE4NSAzcG0pID0gMjAwMDA3MDQg MTU6MDA6MDAKLQotICAgXGZtamQoZGF0ZS10aW1lKQotICAgICAgICAgIENvbnZlcnRzIGZyZWUt Zm9ybWF0IGRhdGUgYW5kL29yIHRpbWUgdG8gYSBNb2RpZmllZCBKdWxpYW4gRGF0ZQotICAgICAg ICAgIChNSkQpLCB0aGUgbnVtYmVyIG9mIGRheXMgc2luY2UgMTcgTm92IDE4NTggMDA6MDA6MDAu IElmIGEgdGltZQotICAgICAgICAgIGlzIGdpdmVuLCBpdCBpcyBpZ25vcmVkLiBFeGFtcGxlczoK LQotICBcZm1qZCg0IEp1bCAyMDAwKSA9IDUwOTk4Ci0gIFxmbWpkKDE3IE5vdiAxODU4KSA9IDAK LSAgXGZtamQoMTYgTm92IDE4NTgpID0gLTEKLQotICAgXGZtamQyZGF0ZShtamQpCi0gICAgICAg ICAgQ29udmVydHMgYW4gTUpEIChpbnRlZ2VyKSB0byBzdGFuZGFyZCBkYXRlIGZvcm1hdCwgeXl5 eW1tZGQ6Ci0KLSAgXGZtamQyKDUwOTk4KSA9IDQgSnVsIDE5OTgKLSAgXGZtamQyKDApID0gMTcg Tm92IDE4NTgKLSAgXGZtamQyKC0xKSA9IDE2IE5vdiAxODU4Ci0gIFxmbWpkMigtMzY1KSA9IDE3 IE5vdiAxODU3Ci0KLSAgIE1KRHMgYXJlIG5vcm1hbCBpbnRlZ2VycyBhbmQsIHVubGlrZSBET1lz LCBtYXkgYmUgYWRkZWQsIHN1YnRyYWN0ZWQsCi0gICBldGMsIHdpdGggZWFjaCBvdGhlciBvciB3 aXRoIG90aGVyIGludGVnZXJzLCB0byBvYnRhaW4gbWVhbmluZ2Z1bAotICAgcmVzdWx0cy4gRm9y IGV4YW1wbGUsIHRvIGZpbmQgb3V0IHRoZSBkYXRlIDIxMiBkYXlzIGFnbzoKLQotICBlY2hvIFxm bWpkMmRhdGUoXGZtamQoKS0yMTIpCi0KLSAgIENvbnN0cnVjdGlvbnMgc3VjaCBhcyB0aGlzIGNh biBiZSB1c2VkIGluIGFueSBjb21tYW5kIHdoZXJlIGEgZGF0ZS10aW1lCi0gICBpcyByZXF1aXJl ZCwgZS5nLjoKLQotICBzZW5kIC9hZnRlcjpcZm1qZDJkYXRlKFxmbWpkKCktMjEyKQotCi0gICB0 byBzZW5kIGFsbCBmaWxlcyB0aGF0IGFyZSBub3Qgb2xkZXIgdGhhbiAyMTIgZGF5cyAodGhpcyBp cyBlcXVpdmFsZW50Ci0gICB0byAic2VuZCAvYWZ0ZXI6LTIxMmRheXMiKS4KLQotICAgTUpEcyBh bHNvIGhhdmUgb3RoZXIgcmVndWxhcml0aWVzIG5vdCBleGhpYml0ZWQgYnkgb3RoZXIgZGF0ZSBm b3JtYXRzLgotICAgRm9yIGV4YW1wbGUsIFxmbW9kdWx1cyhcZm1qZChhbnktZGF0ZSksNykgZ2l2 ZXMgdGhlIGRheSBvZiB0aGUgd2VlayBmb3IKLSAgIGFueSBkYXRlICh3aGVyZSA0PVN1biwgNT1N b24sIC4uLiwgMz1TYXQpLiAoSG93ZXZlciwgaXQgaXMgZWFzaWVyIHRvCi0gICB1c2UgXGZuZGF5 KCkgZm9yIHRoaXMgcHVycG9zZSwgYW5kIGl0IGdpdmVzIHRoZSBtb3JlIGNvbnZlbnRpb25hbAot ICAgcmVzdWx0IG9mIDA9U3VuLCAxPU1vbiwgLi4uLCA2PVNhdCkuCi0KLSAgIE5vdGUgdGhhdCBp ZiBNSkRzIGFyZSB0byBiZSBjb21wYXJlZCwgdGhleSBtdXN0IGJlIGNvbXBhcmVkIG51bWVyaWNh bGx5Ci0gICAoSUYgPCwgPSwgPikgYW5kIG5vdCBsZXhpY2FsbHkgKElGIExMVCwgRVFVQUwsIExH VCksIHdoZXJlYXMgRE9ZcyBtdXN0Ci0gICBiZSBjb21wYXJlZCBsZXhpY2FsbHkgaWYgdGhleSBp bmNsdWRlIGEgdGltZSAod2hpY2ggY29udGFpbnMgIjoiCi0gICBjaGFyYWN0ZXJzKTsgaG93ZXZl ciwgaWYgRE9ZcyBkbyBub3QgaW5jbHVkZSBhIHRpbWUsIHRoZXkgbWF5IGFsc28gYmUKLSAgIGNv bXBhcmVkIG51bWVyaWNhbGx5LgotCi0gICBJbiBhbnkgY2FzZSwgbGV4aWNhbCBjb21wYXJpc29u IG9mIERPWXMgYWx3YXlzIHByb2R1Y2VzIHRoZSBhcHByb3ByaWF0ZQotICAgcmVzdWx0LCBhcyBk b2VzIG51bWVyaWMgY29tcGFyaXNvbiBvZiBNSkRzLgotCi0gICBUaGUgc2FtZSBjb21tZW50cyBh cHBseSB0byBzb3J0aW5nLiBBbHNvIG5vdGUgdGhhdCBET1lzIGFyZSBmaXhlZAotICAgbGVuZ3Ro LCBidXQgTUpEcyBjYW4gdmFyeSBpbiBsZW5ndGguIEhvd2V2ZXIsIGFsbCBNSkRzIGJldHdlZW4g MyBBcHJpbAotICAgMTg4NiBhbmQgMzAgQXVnIDIxMzIgYXJlIDUgZGVjaW1hbCBkaWdpdHMgbG9u Zy4gKE1KRHMgYmVjb21lIDYgZGlnaXRzCi0gICBsb25nIG9uIDMxIEF1ZyAyMTMyLCBhbmQgNyBk aWdpdHMgbG9uZyBvbiAxMyBPY3QgNDU5NikuCi0KLTEuNy4gUGFydGlhbCBDb21wbGV0aW9uIG9m IEtleXdvcmRzCi0KLSAgIFBhcnRpYWwgY29tcGxldGlvbiBvZiBrZXl3b3JkcyB3YXMgYWRkZWQg aW4gQy1LZXJtaXQgNy4wLiBJbiBwcmlvcgotICAgdmVyc2lvbnMsIGlmIGNvbXBsZXRpb24gd2Fz IGF0dGVtcHRlZCAoYnkgcHJlc3NpbmcgdGhlIEVzYyBvciBUYWIga2V5KQotICAgb24gYSBzdHJp bmcgdGhhdCBtYXRjaGVkIGRpZmZlcmVudCBrZXl3b3JkcywgeW91J2QganVzdCBnZXQgYSBiZWVw LiBOb3cKLSAgIEtlcm1pdCBjb21wbGV0ZXMgdXAgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciB3aGVy ZSB0aGUgcG9zc2libHkgbWF0Y2hpbmcKLSAgIGtleXdvcmRzIGRpZmZlciBhbmQgdGhlbiBiZWVw cy4gRm9yIGV4YW1wbGU6Ci0KLSAgQy1LZXJtaXQ+IHNlbmQgL248VGFiPgotCi0gICB3aGljaCBt YXRjaGVzIC9OT1QtQkVGT1JFIGFuZCAvTk9ULUFGVEVSLCBub3cgY29tcGxldGVzIHVwIHRvIHRo ZSBkYXNoOgotCi0gIEMtS2VybWl0PiBzZW5kIC9uPFRhYj5vdC08QmVlcD4KLQotICAgUGFydGlh bCBjb21wbGV0aW9uIHdvcmtzIGZvciBmaWxlbmFtZXMgdG9vIChhcyBpdCBoYXMgZm9yIHNvbWUg eWVhcnMpLgotCi0xLjguIENvbW1hbmQgUmVjYWxsCi0KLSAgIEMtS2VybWl0IGhhcyBoYWQgYSBj b21tYW5kIGhpc3RvcnkgYnVmZmVyIGZvciBzb21lIHRpbWUsIHdoaWNoIGNvdWxkIGJlCi0gICBz Y3JvbGxlZCBpbnRlcmFjdGl2ZWx5IHVzaW5nIGNvbnRyb2wgY2hhcmFjdGVycyBvciAoaW4gS2Vy bWl0IDk1IG9ubHkpCi0gICBhcnJvdyBrZXlzLiBWZXJzaW9uIDcuMCBhZGRzIGEgUkVETyBjb21t YW5kIHRoYXQgYWxsb3dzIHRoZSBtb3N0IHJlY2VudAotICAgY29tbWFuZCBtYXRjaGluZyBhIGdp dmVuIHBhdHRlcm4gdG8gYmUgcmUtZXhlY3V0ZWQ6Ci0KLSAgIHsgUkVETywgUlIsIF4gfSBbIHBh dHRlcm4gXQotICAgICAgICAgIFNlYXJjaCB0aGUgY29tbWFuZCBoaXN0b3J5IGxpc3QgZm9yIHRo ZSBtb3N0IHJlY2VudCBjb21tYW5kIHRoYXQKLSAgICAgICAgICBtYXRjaGVzIHRoZSBnaXZlbiBw YXR0ZXJuLCBhbmQgaWYgb25lIGlzIGZvdW5kLCBleGVjdXRlIGl0Ci0gICAgICAgICAgYWdhaW4u Ci0KLSAgIFRoZSBwYXR0ZXJuIGNhbiBiZSBhIHNpbXBsZSBzdHJpbmcgKGxpa2UgInNlbmQiKSwg aW4gd2hpY2ggY2FzZSB0aGUKLSAgIGxhc3QgU0VORCBjb21tYW5kIGlzIHJlLWV4ZWN1dGVkLiBP ciBpdCBjYW4gY29udGFpbiB3aWxkY2FyZCBjaGFyYWN0ZXJzCi0gICAiKiIgYW5kL29yICI/Iiwg d2hpY2ggbWF0Y2ggYW55IHN0cmluZyBhbmQgYW55IHNpbmdsZSBjaGFyYWN0ZXIsCi0gICByZXNw ZWN0aXZlbHkgKG5vdGUgdGhhdCAiPyIgbXVzdCBiZSBwcmVjZWRlZCBieSBiYWNrc2xhc2ggdG8g b3ZlcnJpZGUKLSAgIGl0cyBub3JtYWwgZnVuY3Rpb24gb2YgZ2l2aW5nIGhlbHApLCBhbmQgaW4g bW9zdCBDLUtlcm1pdCB2ZXJzaW9ucyBtYXkKLSAgIGFsc28gaW5jbHVkZSBbXSBjaGFyYWN0ZXIg bGlzdHMgYW5kIHt9IHN0cmluZyBsaXN0cyAoc2VlIFszNjVdU2VjdGlvbgotICAgNC45KS4KLQot ICAgVGhlIG1hdGNoIHdvcmtzIGJ5IGFwcGVuZGluZyAiKiIgdG8gdGhlIGVuZCBvZiB0aGUgZ2l2 ZW4gcGF0dGVybiAoaWYKLSAgIHlvdSBkaWRuJ3QgcHV0IG9uZSB0aGVyZSB5b3Vyc2VsZikuIFRo dXMgInJlZG8gKm9vZmEiIGJlY29tZXMgInJlZG8KLSAgICpvb2ZhKiIgYW5kIHRoZXJlZm9yZSBt YXRjaGVzIHRoZSBtb3N0IHJlY2VudCBjb21tYW5kIHRoYXQgY29udGFpbnMKLSAgICJvb2ZhIiBh bnl3aGVyZSB3aXRoaW4gdGhlIGNvbW1hbmQuIElmIHlvdSB3YW50IHRvIGluaGliaXQgdGhlCi0g ICBhcHBsaWNhdGlvbiBvZiB0aGUgdHJhaWxpbmcgIioiLCBlLmcuIHRvIGZvcmNlIG1hdGNoaW5n IGEgc3RyaW5nIGF0IHRoZQotICAgZW5kIG9mIGEgY29tbWFuZCwgZW5jbG9zZSB0aGUgcGF0dGVy biBpbiBicmFjZXM6Ci0KLSAgcmVkbyB7Km9vZmF9Ci0KLSAgIG1hdGNoZXMgdGhlIG1vc3QgcmVj ZW50IGNvbW1hbmQgdGhhdCBlbmRzIHdpdGggIm9vZmEiLgotCi0gICBSRURPIGNvbW1hbmRzIHRo ZW1zZWx2ZXMgYXJlIG5vdCBlbnRlcmVkIGludG8gdGhlIGNvbW1hbmQgaGlzdG9yeSBsaXN0Lgot ICAgSWYgbm8gcGF0dGVybiBpcyBnaXZlbiwgdGhlIHByZXZpb3VzIChub24tUkVETykgY29tbWFu ZCBpcyByZS1leGVjdXRlZC4KLSAgIFRoZSBSRURPbmUgY29tbWFuZCBpcyByZWluc2VydGVkIGF0 IHRoZSBlbmQgb2YgdGhlIGNvbW1hbmQgaGlzdG9yeQotICAgYnVmZmVyLCBzbyB0aGUgY29tbWFu ZCBzY3JvbGxiYWNrIGNoYXJhY3RlciAoQ3RybC1QLCBDdHJsLUIsIG9yCi0gICBVcGFycm93KSBj YW4gcmV0cmlldmUgaXQuCi0KLSAgIEV4YW1wbGVzOgotCi0gIEMtS2VybWl0PiBlY2hvIGZvbwot ICBmb28KLSAgQy1LZXJtaXQ+IHNob3cgYWxhcm0KLSAgKG5vIGFsYXJtIHNldCkKLSAgQy1LZXJt aXQ+IGVjaG8gYmxhaAotICBibGFoCi0gIEMtS2VybWl0PiByZWRvICAgICAgICAgIDsgTW9zdCBy ZWNlbnQgY29tbWFuZAotICBibGFoCi0gIEMtS2VybWl0PiByZWRvIHMgICAgICAgIDsgTW9zdCBy ZWNlbnQgY29tbWFuZCBzdGFydGluZyB3aXRoICJzIgotICAobm8gYWxhcm0gc2V0KQotICBDLUtl cm1pdD4gcmVkbyBlY2hvIGYgICA7IE1vc3QgcmVjZW50IGNvbW1hbmQgc3RhcnRpbmcgd2l0aCAi ZWNobyBmIgotICBmb28KLSAgQy1LZXJtaXQ+IHJlZG8gKmZvbyAgICAgOyBNb3N0IHJlY2VudCBj b21tYW5kIHRoYXQgaGFzICJmb28iIGluIGl0Ci0gIGZvbwotICBDLUtlcm1pdD4gPEN0cmwtUD4g ICAgICA7IFNjcm9sbCBiYWNrCi0gIEMtS2VybWl0PiBlY2hvIGZvbyAgICAgIDsgVGhlIFJFRE9u ZSBjb21tYW5kIGlzIHRoZXJlCi0gIEMtS2VybWl0PiByZWRvIHsqZm9vfSAgIDsgTW9zdCByZWNl bnQgY29tbWFuZCB0aGF0IGVuZHMgd2l0aCAiZm9vIgotICBmb28KLSAgQy1LZXJtaXQ+Ci0KLSAg IFNpbmNlIFJFRE8sIFJFRElBTCwgYW5kIFJFRElSRUNUIGFsbCBzdGFydCB0aGUgc2FtZSB3YXks IGFuZCBSRUQgaXMgdGhlCi0gICBkZXNpZ25hdGVkIG5vbi11bmlxdWUgYWJicmV2aWF0aW9uIGZv ciBSRURJQUwsIFJFRE8gbXVzdCBiZSBzcGVsbGVkIG91dAotICAgaW4gZnVsbC4gRm9yIGNvbnZl bmllbmNlLCBSUiBpcyBpbmNsdWRlZCBhcyBhbiBpbnZpc2libGUgZWFzeS10by10eXBlCi0gICBz eW5vbnltIGZvciBSRURPLiBZb3UgY2FuIGFsc28gdXNlIHRoZSAiXiIgY2hhcmFjdGVyIGZvciB0 aGlzOgotCi0gIEMtS2VybWl0PiBeICAgICAgICAgICAgIDsgTW9zdCByZWNlbnQgY29tbWFuZAot ICBDLUtlcm1pdD4gXiBzICAgICAgICAgICA7IE1vc3QgcmVjZW50IGNvbW1hbmQgc3RhcnRpbmcg d2l0aCAicyIKLSAgQy1LZXJtaXQ+IF5zICAgICAgICAgICAgOyBEaXR0byAoc3BhY2Ugbm90IHJl cXVpcmVkIGFmdGVyICJeIikuCi0gIEMtS2VybWl0PiBeKmZvbyAgICAgICAgIDsgTW9zdCByZWNl bnQgY29tbWFuZCB0aGF0IGhhcyAiZm9vIiBpbiBpdC4KLSAgQy1LZXJtaXQ+IF57KmZvb30gICAg ICAgOyBNb3N0IHJlY2VudCBjb21tYW5kIGVuZHMgd2l0aCAiZm9vIi4KLQotICAgVW5saWtlIHRo ZSBtYW51YWwgY29tbWFuZC1oaXN0b3J5LXNjcm9sbGluZyBrZXlzLCB0aGUgUkVETyBjb21tYW5k IGNhbgotICAgYmUgdXNlZCBpbiBhIHNjcmlwdCwgYnV0IGl0J3Mgbm90IHJlY29tbWVuZGVkIChz aW5jZSB0aGUgY29tbWFuZCB0byBiZQotICAgUkVET25lIG1pZ2h0IG5vdCBiZSBmb3VuZCwgc28g aWYgdGhlIFJFRE8gY29tbWFuZCBmYWlscywgeW91IGNhbid0IHRlbGwKLSAgIHdoZXRoZXIgaXQg d2FzIGJlY2F1c2UgUkVETyBmYWlsZWQgdG8gZmluZCB0aGUgcmVxdWVzdGVkIGNvbW1hbmQsIG9y Ci0gICBiZWNhdXNlIHRoZSBjb21tYW5kIHdhcyBmb3VuZCBidXQgaXQgZmFpbGVkKS4KLQotMS45 LiBFWElUIE1lc3NhZ2VzCi0KLSAgIFRoZSBFWElUIGFuZCBRVUlUIGNvbW1hbmRzIG5vdyBhY2Nl cHQgYW4gb3B0aW9uYWwgbWVzc2FnZSB0byBiZQotICAgcHJpbnRlZC4gVGhpcyBtYWtlcyB0aGUg c3ludGF4IG9mIEVYSVQgYW5kIFFVSVQganVzdCBsaWtlIEVORCBhbmQgU1RPUDoKLQotICAgeyBF WElULCBRVUlULCBFTkQsIFNUT1AgfSBbIHN0YXR1cy1jb2RlIFsgbWVzc2FnZSBdIF0KLQotICAg d2hlcmUgc3RhdHVzLWNvZGUgaXMgYSBudW1iZXIgKDAgaW5kaWNhdGluZyBzdWNjZXNzLCBub256 ZXJvIGluZGljYXRpbmcKLSAgIGZhaWx1cmUpLiBUaGlzIGlzIGhhbmR5IGluIHNjcmlwdHMgdGhh dCBhcmUgbmV2ZXIgc3VwcG9zZWQgdG8gZW50ZXIKLSAgIGludGVyYWN0aXZlIG1vZGU6Ci0KLSAg ZGlhbCA3NjU0MzIxCi0gIGlmIGZhaWwgZXhpdCAxIENhbid0IG1ha2UgY29ubmVjdGlvbiAtIHRy eSBhZ2FpbiBsYXRlci4KLQotICAgUHJldmlvdXNseSB0aGlzIGNvdWxkIG9ubHkgYmUgZG9uZSBp biB0d28gc3RlcHM6Ci0KLSAgZGlhbCA3NjU0MzIxCi0gIHhpZiBmYWlsIHsgZWNobyBDYW4ndCBt YWtlIGNvbm5lY3Rpb24gLSB0cnkgYWdhaW4gbGF0ZXIsIGV4aXQgMSB9Ci0KLSAgIEEgc3RhdHVz IGNvZGUgbXVzdCBiZSBpbmNsdWRlZCBpbiBvcmRlciB0byBzcGVjaWZ5IGEgbWVzc2FnZS4gSW4g dGhlCi0gICBjYXNlIG9mIEVYSVQgYW5kIFFVSVQsIHRoZSBkZWZhdWx0IHN0YXR1cyBjb2RlIGlz IGNvbnRhaW5lZCBpbiB0aGUKLSAgIHZhcmlhYmxlIFx2KGV4aXRzdGF0dXMpLCBhbmQgaXMgc2V0 IGF1dG9tYXRpY2FsbHkgYnkgdmFyaW91cyBldmVudHMKLSAgIChmaWxlIHRyYW5zZmVyIGZhaWx1 cmVzLCBldGM7IGl0IGNhbiBhbHNvIGJlIHNldCBleHBsaWNpdGx5IHdpdGggdGhlCi0gICBTRVQg RVhJVCBTVEFUVVMgY29tbWFuZCkuIElmIHlvdSB3YW50IHRvIGdpdmUgYW4gRVhJVCBvciBRVUlU IGNvbW1hbmQKLSAgIHdpdGggYSBtZXNzYWdlLCBidXQgd2l0aG91dCBjaGFuZ2luZyB0aGUgZXhp dCBzdGF0dXMgZnJvbSB3aGF0IGl0Ci0gICBub3JtYWxseSB3b3VsZCBoYXZlIGJlZW4sIHVzZSB0 aGUgXHYoZXhpdHN0YXR1cykgdmFyaWFibGUsIGUuZy46Ci0KLSAgIGV4aXQgXHYoZXhpdHN0YXR1 cykgR29vZGJ5ZSBmcm9tIFx2KGNtZGZpbGUpLgotCi0gICBUaGUgRVhJVCBzdGF0dXMgaXMgcmV0 dXJuZWQgdG8gdGhlIHN5c3RlbSBzaGVsbCBvciB3aGF0ZXZlciBvdGhlcgotICAgcHJvY2VzcyBp bnZva2VkIEMtS2VybWl0LCBlLmcuIGluIFVOSVg6Ci0KLSAgQy1LZXJtaXQ+IGV4aXQgOTcgYnll IGJ5ZQotICBieWUgYnllCi0gICQgZWNobyAkPwotICA5NwotICAkCi0KLTEuMTAuIE1hbmFnaW5n IEtleWJvYXJkIEludGVycnVwdGlvbnMKLQotICAgV2hlbiBDLUtlcm1pdCBpcyBpbiBjb21tYW5k IG9yIGZpbGUtdHJhbnNmZXIgbW9kZSAoYXMgb3Bwb3NlZCB0bwotICAgQ09OTkVDVCBtb2RlKSwg aXQgY2FuIGJlIGludGVycnVwdGVkIHdpdGggQ3RybC1DLiBWZXJzaW9uIDcuMCBhZGRzIHRoZQot ICAgYWJpbGl0eSB0byBkaXNhcm0gdGhlIEN0cmwtQyBpbnRlcnJ1cHQ6Ci0KLSAgIFNFVCBDT01N QU5EIElOVEVSUlVQVCB7IE9OLCBPRkYgfQotICAgICAgICAgIENPTU1BTkQgSU5URVJSVVBUIGlz IE9OIGJ5IGRlZmF1bHQsIG1lYW5pbmcgdGhlIEN0cmwtQyBjYW4gYmUKLSAgICAgICAgICB1c2Vk IHRvIGludGVycnVwdCBhIGNvbW1hbmQgb3IgYSBmaWxlIHRyYW5zZmVyIGluIHByb2dyZXNzLiBV c2UKLSAgICAgICAgICBPRkYgdG8gZGlzYWJsZSB0aGVzZSBpbnRlcnJ1cHRpb25zLCBhbmQgdXNl IGl0IHdpdGggZ3JlYXQKLSAgICAgICAgICBjYXV0aW9uIGZvciBvYnZpb3VzIHJlYXNvbnMuCi0K LSAgIFNFVCBUUkFOU0ZFUiBJTlRFUlJVUFQgeyBPTiwgT0ZGIH0KLSAgICAgICAgICBUaGlzIGNh biBiZSB1c2VkIHRvIGRpc2FibGUga2V5Ym9hcmQgaW50ZXJydXB0aW9uIG9mIGZpbGUKLSAgICAg ICAgICB0cmFuc2ZlciB3aGVuIEMtS2VybWl0IGlzIGluIGxvY2FsIG1vZGUsIG9yIHRvIHJlLWVu YWJsZSBpdAotICAgICAgICAgIGFmdGVyIGl0IGhhcyBiZWVuIGRpc2FibGVkLiBUaGlzIGFwcGxp ZXMgdG8gdGhlIFgsIFosIEUsIGFuZAotICAgICAgICAgIHNpbWlsYXIga2V5cyBhcyB3ZWxsIGFz IHRvIHRoZSBzeXN0ZW0gaW50ZXJydXB0IGNoYXJhY3RlciwKLSAgICAgICAgICB1c3VhbGx5IEN0 cmwtQy4gVGhpcyBpcyBkaXN0aW5jdCBmcm9tIFNFVCBUUkFOU0ZFUiBDQU5DRUxMQVRJT04sCi0g ICAgICAgICAgd2hpY2ggdGVsbHMgd2hldGhlciBwYWNrZXQgbW9kZSBjYW4gYmUgZXhpdGVkIGJ5 IHNlbmRpbmcgYQotICAgICAgICAgIHNwZWNpYWwgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycy4KLQot ICAgU2V2ZXJhbCBvdGhlciBjb21tYW5kcyBjYW4gYmUgaW50ZXJydXB0ZWQgYnkgcHJlc3Npbmcg YW55IGtleSB3aGlsZQotICAgdGhleSBhcmUgYWN0aXZlLiBWZXJzaW9uIDcuMCBhZGRzIHRoZSBh YmlsaXR5IHRvIGRpc2FibGUgdGhpcyBmb3JtIG9mCi0gICBpbnRlcnJ1cHRpb24gYWxzbzoKLQot ICAgU0VUIElOUFVUIENBTkNFTExBVElPTiB7IE9OLCBPRkYgfQotICAgICAgICAgIFdoZXRoZXIg YW4gSU5QVVQgY29tbWFuZCBpbiBwcm9ncmVzcyBjYW4gYmUgaW50ZXJydXB0ZWQgYnkKLSAgICAg ICAgICBwcmVzc2luZyBhIGtleS4gTm9ybWFsbHkgT04uIFNldHRpbmcgSU5QVVQgQ0FOQ0VMTEFU SU9OIE9GRgotICAgICAgICAgIG1ha2VzIElOUFVUIGNvbW1hbmRzIHVuaW50ZXJydXB0aWJsZSBl eGNlcHQgYnkgQ3RybC1DICh1bmxlc3MKLSAgICAgICAgICBDT01NQU5EIElOVEVSUlVQVElPTiBp cyBhbHNvIE9GRikuCi0KLSAgIFNFVCBTTEVFUCBDQU5DRUxMQVRJT04geyBPTiwgT0ZGIH0KLSAg ICAgICAgICBXaGV0aGVyIGEgU0xFRVAsIFBBVVNFLCBvciBXQUlUIGNvbW1hbmQgaW4gcHJvZ3Jl c3MgY2FuIGJlCi0gICAgICAgICAgaW50ZXJydXB0ZWQgYnkgcHJlc3NpbmcgYSBrZXkuIE5vcm1h bGx5IE9OLiBTZXR0aW5nIFNMRUVQCi0gICAgICAgICAgQ0FOQ0VMTEFUSU9OIE9GRiBtYWtlcyB0 aGVzZSBjb21tYW5kcyB1bmludGVycnVwdGlibGUgZXhjZXB0IGJ5Ci0gICAgICAgICAgQ3RybC1D ICh1bmxlc3MgQ09NTUFORCBJTlRFUlJVUFRJT04gaXMgYWxzbyBPRkYpLiBTeW5vbnltczogU0VU Ci0gICAgICAgICAgUEFVU0UgQ0FOQ0VMTEFUSU9OLCBTRVQgV0FJVCBDQU5DRUxMQVRJT04uCi0K LSAgIFNvIHRvIG1ha2UgY2VydGFpbiBhIHNjcmlwdCBpcyBub3QgaW50ZXJydXB0aWJsZSBieSB0 aGUgdXNlciwgaW5jbHVkZQotICAgdGhlc2UgY29tbWFuZHM6Ci0KLSAgU0VUIFRSQU5TRkVSIElO VEVSUlVQVCBPRkYKLSAgU0VUIFNMRUVQIENBTkNFTExBVElPTiBPRkYKLSAgU0VUIElOUFVUIENB TkNFTExBVElPTiBPRkYKLSAgU0VUIENPTU1BTkQgSU5URVJSVVBUSU9OIE9GRgotCi0gICBNYWtl IHN1cmUgdG8gdHVybiB0aGVtIGJhY2sgb24gYWZ0ZXJ3YXJkcyBpZiBpbnRlcnJ1cHRpb24gaXMg dG8gYmUKLSAgIHJlLWVuYWJsZWQuCi0KLSAgIFdoZW4gYSBQQVVTRSwgU0xFRVAsIFdBSVQsIG9y IElOUFVUIGNvbW1hbmQgaXMgaW50ZXJydXB0ZWQgZnJvbSB0aGUKLSAgIGtleWJvYXJkLCB0aGUg bmV3IHZhcmlhYmxlIFx2KGtiY2hhcikgY29udGFpbnMgYSBjb3B5IG9mIHRoZSAoZmlyc3QpCi0g ICBjaGFyYWN0ZXIgdGhhdCB3YXMgdHlwZWQgYW5kIGNhdXNlZCB0aGUgaW50ZXJydXB0aW9uLCBw cm92aWRlZCBpdCB3YXMKLSAgIG5vdCB0aGUgY29tbWFuZCBpbnRlcnJ1cHQgY2hhcmFjdGVyICh1 c3VhbGx5IEN0cmwtQykuIElmIHRoZXNlIGNvbW1hbmRzCi0gICBjb21wbGV0ZSBzdWNjZXNzZnVs bHkgb3IgdGltZSBvdXQgd2l0aG91dCBhIGtleWJvYXJkIGludGVycnVwdGlvbiwgdGhlCi0gICBc dihrYmNoYXIpIHZhcmlhYmxlIGlzIGVtcHR5LgotCi0gICBUaGUgXHYoa2JjaGFyKSB2YXJpYWJs ZSAobGlrZSBhbnkgb3RoZXIgdmFyaWFibGUpIGNhbiBiZSB0ZXN0ZWQgd2l0aDoKLQotICBpZiBk ZWZpbmVkIFx2KGtiY2hhcikgY29tbWFuZAotCi0gICBUaGUgY29tbWFuZCBpcyBleGVjdXRlZCBp ZiB0aGUgdmFyaWFibGUgaXMgbm90IGVtcHR5LgotCi0gICBUaGUgXHYoa2JjaGFyKSB2YXJpYWJs ZSBjYW4gYmUgcmVzZXQgd2l0aCBXQUlUIDAgKFBBVVNFIDAsIFNMRUVQIDAsCi0gICBldGMpLgot Ci0xLjExLiBUYW1pbmcgVGhlIFdpbGQgQmFja3NsYXNoIC0tIFBhcnQgRGV1eAotCi0gICBbMzY2 XVVzaW5nIEMtS2VybWl0LCAybmQgRWRpdGlvbiwgY29udGFpbnMgYSBicmllZiBzZWN0aW9uLCAi VGFtaW5nIHRoZQotICAgV2lsZCBCYWNrc2xhc2giLCBvbiBwYWdlIDQ4LCB3aGljaCBzdWJzZXF1 ZW50IGV4cGVyaWVuY2UgaGFzIHNob3duIHRvCi0gICBiZSBpbmFkZXF1YXRlIGZvciBLZXJtaXQg dXNlcnMgaW50ZW50IG9uIHdyaXRpbmcgc2NyaXB0cyB0aGF0IGRlYWwgd2l0aAotICAgV2luZG93 cywgRE9TLCBhbmQgT1MvMiBmaWxlbmFtZXMsIGluIHdoaWNoIGJhY2tzbGFzaCAoXCkgaXMgdXNl ZCBhcyB0aGUKLSAgIGRpcmVjdG9yeSBzZXBhcmF0b3IuIFRoaXMgc2VjdGlvbiBmaWxscyBpbiB0 aGUgYmxhbmtzLgotCi0xLjExLjEuIEJhY2tncm91bmQKLQotICAgVGhlIEtlcm1pdCBjb21tYW5k IGxhbmd1YWdlIHNoYXJlcyBhIGNlcnRhaW4gdW5hdm9pZGFibGUgYnV0IGFubm95aW5nCi0gICBj aGFyYWN0ZXJpc3RpYyB3aXRoIG1vc3Qgb3RoZXIgY29tbWFuZCBsYW5ndWFnZXMgdGhhdCBhcmUg Y2FwYWJsZSBvZgotICAgc3RyaW5nIHJlcGxhY2VtZW50LCBuYW1lbHkgdGhlIG5lY2Vzc2l0eSB0 byAicXVvdGUiIGNlcnRhaW4gY2hhcmFjdGVycwotICAgd2hlbiB5b3Ugd2FudCB0aGVtIHRvIGJl IHRha2VuIGxpdGVyYWxseS4gVGhpcyBpcyBhIGNvbnNlcXVlbmNlIG9mIHRoZQotICAgZmFjdHMg dGhhdDoKLQotICAgIDEuIE9uZSBvciBtb3JlIGNoYXJhY3RlcnMgbXVzdCBiZSBzZXQgYXNpZGUg dG8gZGVub3RlIHJlcGxhY2VtZW50LAotICAgICAgIHJhdGhlciB0aGFuIGFjdGluZyBhcyBsaXRl cmFsIHRleHQuCi0gICAgMi4gV2UgaGF2ZSBvbmx5IDk2IHByaW50YWJsZSBjaGFyYWN0ZXJzIHRv IHdvcmsgd2l0aCBpbiBBU0NJSSwgd2hpY2gKLSAgICAgICBpcyBzdGlsbCB0aGUgb25seSB1bml2 ZXJzYWxseSBwb3J0YWJsZSBjaGFyYWN0ZXIgc2V0LgotICAgIDMuIFRoZXJlIGlzIG5vIHNpbmds ZSBwcmludGFibGUgY2hhcmFjdGVyIHRoYXQgaXMgdW51c2VkIGV2ZXJ5d2hlcmUuCi0gICAgNC4g VmFyaWFibGVzIGFyZSBub3QgcmVzdHJpY3RlZCB0byBjZXJ0YWluIGNvbnRleHRzLCBhcyB0aGV5 IGFyZSBpbgotICAgICAgIGZvcm1hbCBwcm9ncmFtbWluZyBsYW5ndWFnZXMgbGlrZSBDIGFuZCBG b3J0cmFuLCBidXQgY2FuIGFwcGVhcgotICAgICAgIGFueXdoZXJlIGF0IGFsbCB3aXRoaW4gYSBj b21tYW5kLCBhbmQgdGhlcmVmb3JlIHJlcXVpcmUgc3BlY2lhbAotICAgICAgIHN5bnRheC4KLQot ICAgVGh1cyB0aGVyZSBjYW4gYmUgY29uZmxpY3RzLiBUbyBpbGx1c3RyYXRlLCB0aGUgc3RhbmRh cmQgVU5JWCBzaGVsbAotICAgdXNlcyBkb2xsYXIgc2lnbiAoJCkgdG8gaW50cm9kdWNlIHZhcmlh Ymxlcy4gU28gdGhlIHNoZWxsIGNvbW1hbmQ6Ci0KLSAgZWNobyAkVEVSTQotCi0gICBkaXNwbGF5 cyB0aGUgdmFsdWUgb2YgdGhlIFRFUk0gdmFyaWFibGUsIGUuZy4gdnQzMjAuIEJ1dCBzdXBwb3Nl IHlvdQotICAgd2FudCB0byBkaXNwbGF5IGEgcmVhbCBkb2xsYXIgc2lnbjoKLQotICBlY2hvIFRo ZSBwcmljZSBpcyAkMTAuMjAKLQotICAgVGhpcyBjYXVzZXMgdGhlIHNoZWxsIHRvIGV2YWx1YXRl IHRoZSB2YXJpYWJsZSAiJDEiLCB3aGljaCBtaWdodCBvcgotICAgbWlnaHQgbm90IGV4aXN0LCBh bmQgc3Vic3RpdHV0ZSBpdHMgdmFsdWUsIGUuZy46Ci0KLSAgVGhlIHByaWNlIGlzIDAuMjAKLQot ICAgKGluIHRoaXMgY2FzZSB0aGUgJDEgdmFyaWFibGUgaGFkIG5vIHZhbHVlLikgVGhpcyBpcyBw cm9iYWJseSBub3Qgd2hhdAotICAgeW91IHdhbnRlZC4gVG8gZm9yY2UgdGhlIGRvbGxhciBzaWdu IHRvIGJlIHRha2VuIGxpdGVyYWxseSwgeW91IG11c3QKLSAgIGFwcGx5IGEgInF1b3RpbmcgcnVs ZSIsIHN1Y2ggYXMgInByZWNlZGUgYSBjaGFyYWN0ZXIgYnkgYmFja3NsYXNoIChcKQotICAgdG8g Zm9yY2UgdGhlIHNoZWxsIHRvIHRha2UgdGhlIGNoYXJhY3RlciBsaXRlcmFsbHkiOgotCi0gIGVj aG8gVGhlIHByaWNlIGlzIFwkMTAuMjAKLSAgVGhlIHByaWNlIGlzICQxMC4yMAotCi0gICBCdXQg bm93IHN1cHBvc2UgeW91IHdhbnQgdGhlIGJhY2tzbGFzaCBBTkQgdGhlIGRvbGxhciBzaWduIHRv IGJlIHRha2VuCi0gICBsaXRlcmFsbHk6Ci0KLSAgZWNobyBUaGUgcHJpY2UgaXMgXFwkMTAuMjAK LQotICAgVGhpcyBkb2Vzbid0IHdvcmssIHNpbmNlIHRoZSBmaXJzdCBiYWNrc2xhc2ggcXVvdGVz IHRoZSBzZWNvbmQgb25lLAotICAgdGhlcmVieSBsZWF2aW5nIHRoZSBkb2xsYXIgc2lnbiB1bnF1 b3RlZCBhZ2FpbjoKLQotICBUaGUgcHJpY2UgaXMgXDAuMjAKLQotICAgUXVvdGluZyB0aGUgZG9s bGFyIHNpZ24gcmVxdWlyZXMgYWRkaXRpb24gb2YgYSB0aGlyZCBiYWNrc2xhc2g6Ci0KLSAgZWNo byBUaGUgcHJpY2UgaXMgXFxcJDEwLjIwCi0gIFRoZSBwcmljZSBpcyBcJDEwLjIwCi0KLSAgIFRo ZSBmaXJzdCBiYWNrc2xhc2ggcXVvdGVzIHRoZSBzZWNvbmQgb25lLCBhbmQgdGhlIHRoaXJkIGJh Y2tzbGFzaAotICAgcXVvdGVzIHRoZSBkb2xsYXIgc2lnbi4KLQotICAgRXZlcnkgY29tbWFuZCBs YW5ndWFnZSAtLSBhbGwgVU5JWCBzaGVsbHMsIFZNUyBEQ0wsIERPUyBCYXRjaCwgQU9TL1ZTCi0g ICBDTEksIGV0YyBldGMgLS0gaGFzIHNpbWlsYXIgcnVsZXMuIFVOSVggc2hlbGwgcnVsZXMgYXJl IHByb2JhYmx5IHRoZQotICAgbW9zdCBjb21wbGljYXRlZCwgc2luY2UgbWFueSBwcmludGFibGUg Y2hhcmFjdGVycyAtLSBub3QganVzdCBvbmUgLS0KLSAgIGFyZSBzcGVjaWFsIHRoZXJlOiBkb2xs YXIgc2lnbiwgc2luZ2xlIHF1b3RlLCBkb3VibGUgcXVvdGUsIGJhY2tzbGFzaCwKLSAgIGFzdGVy aXNrLCBhY2NlbnQgZ3JhdmUsIG51bWJlciBzaWduLCBhbXBlcnNhbmQsIHF1ZXN0aW9uIG1hcmss Ci0gICBwYXJlbnRoZXNlcywgYnJhY2tldHMsIGJyYWNlcywgZXRjIC0tIHByYWN0aWNhbGx5IGV2 ZXJ5Ci0gICBub24tYWxwaGFudW1lcmljIGNoYXJhY3RlciBuZWVkcyBzb21lIGZvcm0gb2YgcXVv dGluZyBpZiBpdCBpcyB0byBiZQotICAgdGFrZW4gbGl0ZXJhbGx5LiBBbmQgdG8gYWRkIHRvIHRo ZSBjb25mdXNpb24sIHRoZSBVTklYIHNoZWxsIG9mZmVycwotICAgbWFueSBmb3JtcyBvZiBxdW90 aW5nLCBhbmQgbWFueSBhbHRlcm5hdGl2ZSBVTklYIHNoZWxscyBhcmUgYXZhaWxhYmxlLAotICAg ZWFjaCB1c2luZyBzbGlnaHRseSBkaWZmZXJlbnQgc3ludGF4LgotCi0xLjExLjIuIEtlcm1pdCdz IFF1b3RpbmcgUnVsZXMKLQotICAgS2VybWl0J3MgYmFzaWMgcXVvdGluZyBydWxlcyBhcmUgc2lt cGxlIGJ5IGNvbXBhcmlzb24gKHRoZXJlIGFyZSwgb2YKLSAgIGNvdXJzZSwgYWRkaXRpb25hbCBz eW50YXggcmVxdWlyZW1lbnRzIGZvciBtYWNybyBkZWZpbml0aW9ucywgY29tbWFuZAotICAgYmxv Y2tzLCBmdW5jdGlvbiBjYWxscywgZXRjLCBidXQgdGhleSBhcmUgbm90IHJlbGV2YW50IGhlcmUp LgotCi0gICBUaGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgYXJlIHNwZWNpYWwgaW4gS2VybWl0IGNv bW1hbmRzOgotCi0gICBCYWNrc2xhc2ggKFwpCi0gICAgICAgICAgSW50cm9kdWNlcyBhIHZhcmlh YmxlLCBvciB0aGUgbnVtZXJpYyByZXByZXNlbnRhdGlvbiBvZiBhCi0gICAgICAgICAgc3BlY2lh bCBjaGFyYWN0ZXIsIG9yIGEgZnVuY3Rpb24sIG9yIG90aGVyIGl0ZW0gZm9yCi0gICAgICAgICAg c3Vic3RpdHV0aW9uLiBJZiB0aGUgYmFja3NsYXNoIGlzIGZvbGxvd2VkIGJ5IGEgZGlnaXQgb3Ig YnkgYW55Ci0gICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzOgotCi0gIHgsIG8s IGQsIG0sIHMsIGYsIHYsICQsICUsICYsIDosIHsKLQotICAgICAgICAgIHRoaXMgaW5kaWNhdGVz IGEgc3BlY2lhbCBzdWJzdGl0dXRpb24gaXRlbTsgb3RoZXJ3aXNlIHRoZQotICAgICAgICAgIGZv bGxvd2luZyBjaGFyYWN0ZXIgaXMgdG8gYmUgdGFrZW4gbGl0ZXJhbGx5IChleGNlcHRpb25zOiBc IGF0Ci0gICAgICAgICAgZW5kIG9mIGxpbmUgaXMgdGFrZW4gbGl0ZXJhbGx5OyBcbiwgXGIsIGFu ZCBcbiBhcmUgc3BlY2lhbCBpdGVtcwotICAgICAgICAgIGluIHRoZSBPVVRQVVQgY29tbWFuZCBv bmx5KS4KLQotICAgU2VtaWNvbG9uICg7KQotICAgICAgICAgIChPbmx5IHdoZW4gYXQgdGhlIGJl Z2lubmluZyBvZiBhIGxpbmUgb3IgcHJlY2VkZWQgYnkgYXQgbGVhc3QKLSAgICAgICAgICBvbmUg c3BhY2Ugb3IgdGFiKSBJbnRyb2R1Y2VzIGEgY29tbWVudC4KLQotICAgTnVtYmVyIHNpZ24gKCMp Ci0gICAgICAgICAgKE9ubHkgd2hlbiBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSBvciBwcmVj ZWRlZCBieSBhdCBsZWFzdAotICAgICAgICAgIG9uZSBzcGFjZSBvciB0YWIpIEp1c3QgbGlrZSBz ZW1pY29sb247IGludHJvZHVjZXMgYSBjb21tZW50LgotCi0gICBRdWVzdGlvbiBtYXJrICg/KQot ICAgICAgICAgIChPbmx5IGF0IHRoZSBjb21tYW5kIHByb21wdCAtIG5vdCBpbiBjb21tYW5kIGZp bGVzIG9yIG1hY3JvcykKLSAgICAgICAgICBSZXF1ZXN0cyBjb250ZXh0LXNlbnNpdGl2ZSBoZWxw LgotCi0gICBUbyBmb3JjZSBLZXJtaXQgdG8gdGFrZSBhbnkgb2YgdGhlc2UgY2hhcmFjdGVycyBs aXRlcmFsbHksIHNpbXBseQotICAgcHJlY2VkZSBpdCBieSBhIGJhY2tzbGFzaCAoXCkuCi0KLSAg IFNvdW5kcyBlYXN5ISBBbmQgaXQgaXMsIGV4Y2VwdCB3aGVuIGJhY2tzbGFzaCBhbHNvIGhhcyBh IHNwZWNpYWwKLSAgIG1lYW5pbmcgdG8gdGhlIHVuZGVybHlpbmcgb3BlcmF0aW5nIHN5c3RlbSwg YXMgaXQgZG9lcyBpbiBET1MsIFdpbmRvd3MsCi0gICBhbmQgT1MvMiwgd2hlcmUgaXQgc2VydmVz IGFzIHRoZSBkaXJlY3Rvcnkgc2VwYXJhdG9yIGluIGZpbGVuYW1lcyBzdWNoCi0gICBhczoKLQot ICBEOlxLOTVcS0VZTUFQU1xSRUFELk1FCi0KLSAgIFVzaW5nIG91ciBydWxlLCB3ZSB3b3VsZCBu ZWVkIHRvIHJlZmVyIHRvIHRoaXMgZmlsZSBpbiBLZXJtaXQgY29tbWFuZHMKLSAgIGFzIGZvbGxv d3M6Ci0KLSAgRDpcXEs5NVxcS0VZTUFQU1xcUkVBRC5NRQotCi0gICBCdXQgdGhpcyB3b3VsZCBu b3QgYmUgb2J2aW91cyB0byBuZXcgdXNlcnMgb2YgS2VybWl0IHNvZnR3YXJlIG9uIERPUywKLSAg IFdpbmRvd3MsIG9yIE9TLzIsIGFuZCBpdCB3b3VsZCBiZSBhbm5veWluZyB0byBzZWFzb25lZCBv bmVzLiBUaHVzCi0gICBNUy1ET1MgS2VybWl0IGFuZCBLZXJtaXQgOTUgZ28gdG8gcmF0aGVyIGV4 dHJlbWUgbGVuZ3RocyB0byBhbGxvdyB0aGUKLSAgIG1vcmUgbmF0dXJhbCBub3RhdGlvbiwgYXMg aW46Ci0KLSAgc2VuZCBkOlxrOTVca2V5bWFwc1xyZWFkLm1lCi0KLSAgIFRoZSByZWFzb24gdGhp cyBpcyB0cmlja3kgaXMgdGhhdCB3ZSBhbHNvIG5lZWQgdG8gYWxsb3cgZm9yIHZhcmlhYmxlcwot ICAgYW5kIG90aGVyIGV4cHJlc3Npb25zIGludHJvZHVjZWQgYnkgYmFja3NsYXNoIGluIHRoZSBz YW1lIGNvbW1hbmQuIEZvcgotICAgZXhhbXBsZSwgc3VwcG9zZSBcJWEgaXMgYSB2YXJpYWJsZSB3 aG9zZSB2YWx1ZSBpcyAib29mYSIgKHdpdGhvdXQgdGhlCi0gICBxdW90ZXMpLiBXaGF0IGRvZXMg dGhlIGZvbGxvd2luZyBjb21tYW5kIGRvPwotCi0gIHNlbmQgZDpcJWEKLQotICAgRG9lcyBpdCBz ZW5kIHRoZSBmaWxlIG5hbWVkICJvb2ZhIiBpbiB0aGUgY3VycmVudCBkaXJlY3Rvcnkgb2YgdGhl IEQ6Ci0gICBkaXNrLCBvciBkb2VzIGl0IHNlbmQgYSBmaWxlIG5hbWVkICIlYSIgaW4gdGhlIHJv b3QgZGlyZWN0b3J5IG9mIHRoZSBEOgotICAgZGlzaz8gVGhpcyBpcyB0aGUga2luZCBvZiB0cm91 YmxlIHdlIGdldCBpbnRvIHdoZW4gd2UgYXR0ZW1wdCB0byBiZW5kCi0gICB0aGUgcnVsZXMgaW4g dGhlIGludGVyZXN0IG9mIHVzZXIgZnJpZW5kbGluZXNzLiAoVGhlIGFuc3dlciBpczogaWYgdGhl Ci0gICB2YXJpYWJsZSBcJWEgaGFzIGRlZmluaXRpb24gdGhhdCBpcyB0aGUgbmFtZSBvZiBhbiBl eGlzdGluZyBmaWxlLCB0aGF0Ci0gICBmaWxlIGlzIHNlbnQ7IGlmIGEgZmlsZSBkOlwlYSBleGlz dHMsIGl0IGlzIHNlbnQ7IG90aGVyd2lzZSBpZiBib3RoCi0gICBjb25kaXRpb25zIGFyZSB0cnVl LCB0aGUgdmFyaWFibGUgdGFrZXMgcHJlY2VkZW5jZSwgYW5kIHRoZSBsaXRlcmFsCi0gICBmaWxl bmFtZSBjYW4gYmUgZm9yY2VkIGJ5IHF1b3Rpbmc6IFxcJWEuKQotCi0gICBJbiBLZXJtaXQgOTUg KGJ1dCBub3QgTVMtRE9TIEtlcm1pdCksIHdlIGFsc28gYmVuZCB0aGUgcnVsZXMgYW5vdGhlcgot ICAgd2F5IGJ5IGFsbG93aW5nIHlvdSB0byB1c2UgZm9yd2FyZCBzbGFzaCAoLykgcmF0aGVyIHRo YW4gYmFja3NsYXNoIChcKQotICAgYXMgdGhlIGRpcmVjdG9yeSBzZXBhcmF0b3I6Ci0KLSAgc2Vu ZCBkOi9rOTUva2V5bWFwcy9yZWFkLm1lCi0KLSAgIFRoaXMgbG9va3MgbW9yZSBuYXR1cmFsIHRv IFVOSVggdXNlcnMsIGFuZCBpbiBmYWN0IGlzIHBlcmZlY3RseQotICAgYWNjZXB0YWJsZSB0byB0 aGUgV2luZG93cyA5NS85OC9OVCBhbmQgT1MvMiBvcGVyYXRpbmcgc3lzdGVtcyBvbiB0aGUKLSAg IEFQSSBsZXZlbC4gQlVUICh0aGVyZSBpcyBhbHdheXMgYSAiYnV0IikgdGhlIE1pY3Jvc29mdCBz aGVsbCwKLSAgIENPTU1BTkQuQ09NLCBmb3IgV2luZG93cyA5NS85OCBhbmQgTlQgZG9lcyBub3Qg YWxsb3cgdGhpcyBub3RhdGlvbiwgYW5kCi0gICB0aGVyZWZvcmUgaXQgY2FuIG5vdCBiZSB1c2Vk IGluIGFueSBLZXJtaXQgY29tbWFuZCAtLSBzdWNoIGFzIFJVTiAtLQotICAgdGhhdCBpbnZva2Vz IHRoZSBXaW5kb3dzIGNvbW1hbmQgc2hlbGwgQU5EIHlvdXIgY29tbWFuZCBzaGVsbCBpcwotICAg Q09NTUFORC5DT00gb3IgYW55IG90aGVyIHNoZWxsIHRoYXQgZG9lcyBub3QgYWxsb3cgZm9yd2Fy ZCBzbGFzaCBhcwotICAgZGlyZWN0b3J5IHNlcGFyYXRvciAoc29tZSBhbHRlcm5hdGl2ZSBzaGVs bHMgZG8gYWxsb3cgdGhpcykuCi0KLSAgICAgTk9URTogVGhlcmUgZXhpc3RzIGEgd2lkZSB2YXJp ZXR5IG9mIGFsdGVybmF0aXZlIHNoZWxscyBmcm9tIHRoaXJkCi0gICAgIHBhcnRpZXMgdGhhdCBk byBub3QgaGF2ZSB0aGlzIHJlc3RyaWN0aW9uLiBJZiB5b3UgYXJlIHVzaW5nIGEgc2hlbGwKLSAg ICAgdGhhdCBhY2NlcHRzIGZvcndhcmQgc2xhc2ggYXMgYSBkaXJlY3Rvcnkgc2VwYXJhdG9yLCB5 b3UgY2FuIHN0b3AKLSAgICAgcmVhZGluZyByaWdodCBub3cgLS0gVU5MRVNTICh0aGVyZSBpcyBh bHdheXMgYW4gInVubGVzcyIpIHlvdSB3YW50Ci0gICAgIHlvdXIgc2NyaXB0cyB0byBiZSBwb3J0 YWJsZSB0byBzeXN0ZW1zIHRoYXQgaGF2ZSBvdGhlciBzaGVsbHMuIEFsc28KLSAgICAgbm90ZSB0 aGF0IHNvbWUgV2luZG93cyBzaGVsbHMgbWlnaHQgYWN0dWFsbHkgUkVRVUlSRSBmb3J3YXJkIHNs YXNoZXMKLSAgICAgKGluc3RlYWQgb2YgYmFja3NsYXNoZXMpIGFzIGRpcmVjdG9yeSBzZXBhcmF0 b3JzOyB3ZSBkbyBub3QgdHJlYXQKLSAgICAgdGhpcyBzaXR1YXRpb24gYmVsb3csIGJ1dCB0aGUg dHJlYXRtZW50IGlzIG9idmlvdXMgLS0gdXNlIHNsYXNoCi0gICAgIHJhdGhlciBiYWNrc2xhc2gg YXMgdGhlIGRpcmVjdG9yeSBzZXBhcmF0b3IuCi0KLTEuMTEuMy4gUGFzc2luZyBET1MgRmlsZW5h bWVzIGZyb20gS2VybWl0IHRvIFNoZWxsIENvbW1hbmRzCi0KLSAgIFRoZSBmb2xsb3dpbmcgS2Vy bWl0IGNvbW1hbmRzIGludm9rZSB0aGUgc3lzdGVtIGNvbW1hbmQgc2hlbGw6Ci0KLSAgUlVOIChh bmQgaXRzIHN5bm9ueW1zICEgYW5kIEApCi0gIFJFRElSRUNUCi0gIFBJUEUKLQotICAgRWFjaCBv ZiB0aGVzZSBjb21tYW5kcyB0YWtlcyBhIHNoZWxsIGNvbW1hbmQgYXMgYW4gb3BlcmFuZC4gVGhl c2Ugc2hlbGwKLSAgIGNvbW1hbmRzIGFyZSBub3QsIGFuZCBjYW4gbm90IGJlLCBwYXJzZWQgYnkg S2VybWl0IHNpbmNlIEtlcm1pdCBkb2VzCi0gICBub3Qga25vdyB0aGUgc3ludGF4IG9mIHNoZWxs IGNvbW1hbmRzLCBhbmQgc28gY2FuJ3QgdGVsbCB0aGUgZGlmZmVyZW5jZQotICAgYmV0d2VlbiBh IGtleXdvcmQsIGEgZmlsZW5hbWUsIGEgdmFyaWFibGUsIGEgc3dpdGNoLCBvciBvdGhlciBpdGVt LgotICAgVGhlcmVmb3JlIHRoZSBydWxlcyBjYW4gbm90IGJlIGJlbnQgc2luY2UgS2VybWl0IGRv ZXNuJ3Qga25vdyB3aGVyZSBvcgotICAgaG93IHRvIGJlbmQgdGhlbS4gVG8gaWxsdXN0cmF0ZSAo dXNpbmcgdGhlIHJlZ3VsYXIgV2luZG93cyBzaGVsbCk6Ci0KLSAgcnVuIGM6XFx3aW5kb3dzXFxj b21tYW5kXFxjaGtkc2suZXhlCi0KLSAgIHdvcmtzIE9LLCBidXQ6Ci0KLSAgcnVuIGM6L3dpbmRv d3MvY29tbWFuZC9jaGtkc2suZXhlCi0KLSAgIGlzIG5vdCBhY2NlcHRlZCBieSBDT01NQU5ELkNP TS4gQnV0OgotCi0gIHJ1biBjOlx3aW5kb3dzXGNvbW1hbmRcY2hrZHNrLmV4ZQotCi0gICByZXN1 bHRzIGluIEtlcm1pdCBhcHBseWluZyBpdHMgcXVvdGluZyBydWxlcyBiZWZvcmUgc2VuZGluZyB0 aGUgdGV4dCB0bwotICAgdGhlIHNoZWxsLiBTaW5jZSAidyIgYW5kICJjIiBhcmUgbm90IGluIHRo ZSBsaXN0IG9mIGJhY2tzbGFzaC1pdGVtCi0gICBjb2RlcywgdGhlIGJhY2tzbGFzaCBtZWFucyAi dGFrZSB0aGUgZm9sbG93aW5nIGNoYXJhY3RlciBsaXRlcmFsbHkiLgotICAgVGh1cywgYnkgdGhl IHRpbWUgdGhpcyBmaWxlbmFtZSBnZXRzIHRvIHRoZSBXaW5kb3dzIHNoZWxsLCBpdCBoYXMKLSAg IGJlY29tZToKLQotICBjOndpbmRvd3Njb21tYW5kY2hrZHNrLmV4ZQotCi0gICB3aGljaCBpcyBw cm9iYWJseSBub3Qgd2hhdCB5b3Ugd2FudGVkLiAoSWYgInciIGFuZCAiYyIgd2VyZSBpbiB0aGUK LSAgIGxpc3QsIHRoZSByZXN1bHRzIGNvdWxkIGJlIGV2ZW4gc3RyYW5nZXIuKSBFdmVuIG1vcmUg Y29uZnVzaW5nIGlzIHRoZQotICAgY2FzZSB3aGVyZSBhIGRpcmVjdG9yeSBvciBmaWxlbmFtZSBz dGFydHMgd2l0aCBvbmUgb3IgbW9yZSBkaWdpdHM6Ci0KLSAgcnVuIGM6XDEyM1xsb3R1cy5leGUK LQotICAgaW4gd2hpY2ggIlwxMjMiIGlzIHRoZSBLZXJtaXQgbm90YXRpb24gZm9yIEFTQ0lJIGNo YXJhY3RlciAxMjMsIHdoaWNoCi0gICBoYXBwZW5zIHRvIGJlIGxlZnQgYnJhY2UgKHspLCByZXN1 bHRpbmcgaW4gImM6e2xvdHVzLmV4ZSIuCi0KLSAgIFNvIHdoZW4gcGFzc2luZyBmaWxlbmFtZXMg dG8gYSBXaW5kb3dzIHNoZWxsLCBhbHdheXMgdXNlIGRvdWJsZQotICAgYmFja3NsYXNoZXMgYXMg ZGlyZWN0b3J5IHNlcGFyYXRvcnMsIHRvIGVuc3VyZSB0aGF0IHRoZSBzaGVsbCBnZXRzCi0gICBz aW5nbGUgYmFja3NsYXNoZXM6Ci0KLSAgcnVuIGM6XFx3aW5kb3dzXFxjb21tYW5kXFxjaGtkc2su ZXhlCi0gIHJ1biBjOlxcMTIzXFxsb3R1cy5leGUKLQotICAgU2ltaWxhciBwcm9ibGVtcyBtaWdo dCBvY2N1ciB3aXRoIHRoZSBidWlsdC1pbiBFRElULCBCUk9XU0UsIGFuZCBGVFAKLSAgIGNvbW1h bmRzLiBUaGVzZSBjb21tYW5kcyByZXN1bHQgaW4gS2VybWl0IGJ1aWxkaW5nIGEgc2hlbGwgY29t bWFuZAotICAgaW50ZXJuYWxseSB0byBpbnZva2UgdGhlIGFzc29jaWF0ZWQgaGVscGVyIHByb2dy YW07IHRoZSBmb3JtIG9mIHRoaXMKLSAgIGNvbW1hbmQgbWlnaHQgY29uZmxpY3Qgd2l0aCB0aGUg Zm9ybSBkZW1hbmRlZCBieSBjZXJ0YWluIGFsdGVybmF0aXZlCi0gICBzaGVsbHMuCi0KLTEuMTEu NC4gVXNpbmcgVmFyaWFibGVzIHRvIEhvbGQgRE9TIEZpbGVuYW1lcwotCi0gICBOb3cgdG8gdGhl IG5leHQgbGV2ZWwuIFN1cHBvc2UgeW91IHdhbnQgdG8gd3JpdGUgYSBzY3JpcHQgaW4gd2hpY2gK LSAgIGZpbGVuYW1lcyBhcmUgcGFyYW1ldGVycywgYW5kIHRoZXJlZm9yZSBhcmUgc3RvcmVkIGlu IHZhcmlhYmxlcy4KLSAgIEV4YW1wbGU6Ci0KLSAgZGVmaW5lIFwlZiBjOlx3aW5kb3dzXGNvbW1h bmRcY2hrZHNrLmV4ZQotICAuLi4KLSAgcnVuIFwlZgotCi0gICBPYnZpb3VzbHkgdGhpcyB3b24n dCB3b3JrIGZvciB0aGUgcmVhc29ucyBqdXN0IG5vdGVkOyB0aGUgUlVOIGNvbW1hbmQKLSAgIHJl cXVpcmVzIGRpcmVjdG9yeSBzZXBhcmF0b3JzIGJlIGNvZGVkIGFzIGRvdWJsZSBiYWNrc2xhc2hl czoKLQotICBkZWZpbmUgXCVmIGM6XFx3aW5kb3dzXFxjb21tYW5kXFxjaGtkc2suZXhlCi0gIC4u LgotICBydW4gXCVmCi0KLSAgIFRoaXMgd2lsbCB3b3JrOyBubyBzdXJwcmlzZXMgaGVyZS4gSG93 ZXZlciwgaWYgeW91IGhhZCB1c2VkIEFTU0lHTgotICAgcmF0aGVyIHRoYW4gREVGSU5FLCB5b3Ug bWlnaHQgaGF2ZSBiZWVuIHN1cnByaXNlZCBhZnRlciBhbGw7IHJldmlldwotICAgcGFnZXMgMzQ4 LTM0OSBvZiBbMzY3XVVzaW5nIEMtS2VybWl0ICgybmQgRWQpIGZvciB0aGUgZGlmZmVyZW5jZQot ICAgYmV0d2VlbiBERUZJTkUgYW5kIEFTU0lHTi4KLQotICAgV2UgaGF2ZSBzYWlkIHRoYXQgYW55 IEtlcm1pdCA5NSBvciBNUy1ET1MgS2VybWl0IGNvbW1hbmQgdGhhdCBwYXJzZXMKLSAgIGZpbGVu YW1lcyBpdHNlbGYgLS0gU0VORCwgZm9yIGV4YW1wbGUgLS0gZG9lcyBub3QgcmVxdWlyZSBkb3Vi bGUKLSAgIGJhY2tzbGFzaGVzIHNpbmNlIGl0IGtub3dzIGl0IGlzIHBhcnNpbmcgYSBmaWxlbmFt ZS4gU28gc2luY2UgdGhlCi0gICBmb2xsb3dpbmcgd29ya3M6Ci0KLSAgc2VuZCBjOlx3aW5kb3dz XGNvbW1hbmRcY2hrZHNrLmV4ZQotCi0gICBTaG91bGQgdGhlIGZvbGxvd2luZyBhbHNvIHdvcms/ Ci0KLSAgZGVmaW5lIFwlZiBjOlx3aW5kb3dzXGNvbW1hbmRcY2hrZHNrLmV4ZQotICAuLi4KLSAg c2VuZCBcJWYKLQotICAgQW5zd2VyOiBOby4gV2h5PyBCZWNhdXNlIFwlZiBpcyBldmFsdWF0ZWQg InJlY3Vyc2l2ZWx5IiwgdG8gYWxsb3cgZm9yCi0gICB0aGUgcG9zc2liaWxpdHkgdGhhdCBpdHMg ZGVmaW5pdGlvbiBjb250YWlucyBmdXJ0aGVyIHZhcmlhYmxlCi0gICByZWZlcmVuY2VzLiBUaGlz IGlzIHRydWUgb2YgYWxsICJiYWNrc2xhc2gtcGVyY2VudC1sZXR0ZXIiIChvciAtZGlnaXQpCi0g ICB2YXJpYWJsZXMsIGFuZCBhbHNvIGZvciBhcnJheSByZWZlcmVuY2VzLiBTbyBcJWYgYmVjb21l cwotICAgYzpcd2luZG93c1xjb21tYW5kXGNoa2Rzay5leGUsIHdoaWNoIGJlY29tZXMKLSAgIGM6 d2luZG93c2NvbW1hbmRjaGtkc2suZXhlLgotCi0gICBUaGUgdHJpY2sgaGVyZSBpcyB0byB1c2Ug dGhlICJvdGhlciIga2luZCBvZiB2YXJpYWJsZSwgdGhhdCBpcwotICAgZXZhbHVhdGVkIG9ubHkg Im9uZSBsZXZlbCBkZWVwIiByYXRoZXIgdGhhbiByZWN1cnNpdmVseToKLQotICBkZWZpbmUgZmls ZW5hbWUgYzpcd2luZG93c1xjb21tYW5kXGNoa2Rzay5leGUKLSAgLi4uCi0gIHNlbmQgXG0oZmls ZW5hbWUpCi0KLSAgIFNpbWlsYXJseSBpZiB5b3Ugd2FudCB0byBwcm9tcHQgdGhlIHVzZXIgZm9y IGEgZmlsZW5hbWU6Ci0KLSAgYXNrIGZpbGVuYW1lIHsgUGxlYXNlIHR5cGUgYSBmaWxlbmFtZTog fQotICAgUGxlYXNlIHR5cGUgYSBmaWxlbmFtZTogYzpcd2luZG93c1xjb21tYW5kXGNoa2Rzay5l eGUKLSAgc2VuZCBcbShmaWxlbmFtZSkKLQotMS4xMS41LiBQYXNzaW5nIERPUyBGaWxlbmFtZXMg YXMgUGFyYW1ldGVycyB0byBNYWNyb3MKLQotICAgU3VwcG9zZSB5b3Ugd2FudCB0byBwYXNzIGEg RE9TIGZpbGVuYW1lIGNvbnRhaW5pbmcgYmFja3NsYXNoZXMgYXMgYQotICAgcGFyYW1ldGVyIHRv IGEgS2VybWl0IG1hY3JvLiBUaGlzIHJhaXNlcyB0d28gaXNzdWVzOgotCi0gICAgMS4gUGFyYW1l dGVycyB0byBtYWNyb3MgYXJlICJqdXN0IHRleHQiIGFuZCBzbyBhcmUgZnVsbHkgZXZhbHVhdGVk Ci0gICAgICAgYmVmb3JlIHRoZXkgYXJlIHBhc3NlZCB0byB0aGUgbWFjcm8uCi0gICAgMi4gT25j ZSBpbnNpZGUgdGhlIG1hY3JvLCB0aGUgZm9ybWFsIHBhcmFtZXRlcnMgXCUxLCBcJTIsIC4uLiBc JTkgYXJlCi0gICAgICAgdGhlIHR5cGUgb2YgdmFyaWFibGUgdGhhdCBpcyBldmFsdWF0ZWQgcmVj dXJzaXZlbHkuCi0KLSAgIFRodXMgYSBET1MgZmlsZW5hbWUgaXMgcnVpbmVkIG9uY2UgaW4gdGhl IGFjdCBvZiBwYXJzaW5nIHRoZSBtYWNybwotICAgaW52b2NhdGlvbiwgYW5kIGFnYWluIHdoZW4g cmVmZXJyaW5nIHRvIGl0IGZyb20gd2l0aGluIHRoZSBtYWNyby4gVG8KLSAgIGlsbHVzdHJhdGUs IHN1cHBvc2UgInRlc3QiIGlzIGEgbWFjcm8uIFRoZW4gaW4gdGhlIGludm9jYXRpb246Ci0KLSAg dGVzdCBjOlxteWRpclxibGFoLnR4dAotCi0gICAiYzpteWRpcmJsYWgudHh0IiBpcyBhc3NpZ25l ZCB0byBcJTEuIEhvd2V2ZXIsIGlmIHdlIGRvdWJsZSB0aGUKLSAgIGJhY2tzbGFzaGVzOgotCi0g IHRlc3QgYzpcXG15ZGlyXFxibGFoLnR4dAotCi0gICAiYzpcbXlkaXJcYmxhaC50eHQiIGlzIGFz c2lnbmVkIHRvIFwlMS4gQnV0IHRoZW4gd2hlbiB5b3UgcmVmZXIgdG8gXCUxCi0gICBpbiB0aGUg bWFjcm8sIGl0IGlzIGV2YWx1YXRlZCByZWN1cnNpdmVseSwgcmVzdWx0aW5nIGluCi0gICAiYzpt eWRpcmJsYWgudHh0Ii4gVG8gaWxsdXN0cmF0ZToKLQotICBkZWZpbmUgdGVzdCBlY2hvIFwlMQot ICB0ZXN0IGM6XG15ZGlyXGJsYWgudHh0Ci0gIGM6bXlkaXJibGFoLnR4dAotICB0ZXN0IGM6XFxt eWRpclxcYmxhaC50eHQKLSAgYzpteWRpcmJsYWgudHh0Ci0gIHRlc3QgYzpcXFxcbXlkaXJcXFxc YmxhaC50eHQKLSAgYzpcbXlkaXJcYmxhaC50eHQKLQotICAgTGV0J3MgYWRkcmVzcyBlYWNoIHBh cnQgb2YgdGhlIHByb2JsZW0gc2VwYXJhdGVseS4gRmlyc3QsIGluc2lkZSB0aGUKLSAgIG1hY3Jv LiBZb3UgY2FuIHVzZSB0aGUgXGZjb250ZW50cygpIGZ1bmN0aW9uIHRvIGZvcmNlIGEKLSAgIGJh Y2tzbGFzaC1wZXJjZW50IHZhcmlhYmxlIChzdWNoIGFzIGEgbWFjcm8gYXJndW1lbnQpIHRvIGJl IGV2YWx1YXRlZAotICAgb25lIGxldmVsIGRlZXAgaW5zdGVhZCBvZiByZWN1cnNpdmVseSwgZm9y IGV4YW1wbGU6Ci0KLSAgZGVmaW5lIHRlc3QgZWNobyB7IFRoZSBmaWxlbmFtZSBpcyAiXGZjb250 ZW50cyhcJTEpIn0KLQotICB0ZXN0IGM6XG15ZGlyXGJsYWgudHh0ICAgICAgICAgICAgICAgOyBX ZSBkb24ndCBleHBlY3QgdGhpcyB0byB3b3JrCi0gICBUaGUgZmlsZW5hbWUgaXMgImM6bXlkaXJi bGFoLnR4dCIgICA7IGFuZCBpdCBkb2Vzbid0LgotICB0ZXN0IGM6XFxteWRpclxcYmxhaC50eHQg ICAgICAgICAgICAgOyBCdXQgdGhpcyBkb2VzLi4uCi0gICBUaGUgZmlsZW5hbWUgaXMgImM6XG15 ZGlyXGJsYWgudHh0IgotCi0gICBUaHVzIGlmIHRoZSBmaWxlbmFtZSBhcnJpdmVzIGluc2lkZSB0 aGUgbWFjcm8gd2l0aCBzaW5nbGUgYmFja3NsYXNoZXMsCi0gICB0aGUgYmFja3NsYXNoZXMgYXJl IHByZXNlcnZlZCBpZiB5b3UgYWx3YXlzIHJlZmVyIHRvIHRoZSBwYXJhbWV0ZXIKLSAgIHRocm91 Z2ggdGhlIFxmY29udGVudHMoKSBmdW5jdGlvbi4KLQotICAgTm93IGhvdyB0byBlbnN1cmUgdGhh dCBiYWNrc2xhc2hlcyBhcmUgbm90IHN0cmlwcGVkIG9yIG1pc2ludGVycHJldGVkCi0gICB3aGVu IHBhc3NpbmcgYSBmaWxlbmFtZSB0byBhIG1hY3JvPyBUaGlzIGJyaW5ncyB1cyBiYWNrIHRvIHdo YXQgd2UKLSAgIGxlYXJuZWQgaW4gZWFybGllciBzZWN0aW9uczoKLQotICAgIDEuIElmIGl0IGlz IGEgbGl0ZXJhbCBmaWxlbmFtZSwgZWl0aGVyIGRvdWJsZSB0aGUgYmFja3NsYXNoZXMsIG9yIChp ZgotICAgICAgIHRoZSBmaWxlbmFtZSBpcyB0byBiZSB1c2VkIG9ubHkgd2l0aGluIEtlcm1pdCBp dHNlbGYgYW5kIG5vdCBwYXNzZWQKLSAgICAgICB0byBhIERPUyBzaGVsbCwgb3IgaXQgaXMgdG8g YmUgcGFzc2VkIHRvIGFuIGFsdGVybmF0aXZlIHNoZWxsIHRoYXQKLSAgICAgICBhY2NlcHRzIGZv cndhcmQgc2xhc2ggYXMgYSBkaXJlY3Rvcnkgc2VwYXJhdG9yKSwgdXNlIGZvcndhcmQgc2xhc2gK LSAgICAgICBpbnN0ZWFkIG9mIGJhY2tzbGFzaCBhcyB0aGUgZGlyZWN0b3J5IHNlcGFyYXRvci4K LSAgICAyLiBJZiBpdCBpcyBhIHZhcmlhYmxlIHRoYXQgY29udGFpbnMgYSBmaWxlbmFtZSwgbWFr ZSBzdXJlIHlvdSB1c2UgYQotICAgICAgIG1hY3JvLXN0eWxlIHZhcmlhYmxlIG5hbWUsIHJhdGhl ciB0aGFuIGEKLSAgICAgICBiYWNrc2xhc2gtcGVyY2VudC1jaGFyYWN0ZXIgbmFtZS4KLQotICAg RXhhbXBsZXM6Ci0KLSAgZGVmaW5lIHRlc3QgZWNobyBcZmNvbnRlbnRzKFwlMSkKLSAgZGVmaW5l IGZpbGVuYW1lIGM6XG15ZGlyXGJsYWgudHh0Ci0KLSAgdGVzdCBjOlxcbXlkaXJcXGJsYWgudHh0 ICA7IExpdGVyYWwgZmlsZW5hbWUgd2l0aCBkb3VibGUgYmFja3NsYXNoZXMKLSAgYzpcbXlkaXJc YmxhaC50eHQKLQotICB0ZXN0IGM6L215ZGlyL2JsYWgudHh0ICAgIDsgTGl0ZXJhbCBmaWxlbmFt ZSB3aXRoIGZvcndhcmQgc2xhc2hlcwotICBjOi9teWRpci9ibGFoLnR4dAotCi0gIHRlc3QgXG0o ZmlsZW5hbWUpICAgICAgICAgOyBWYXJpYWJsZQotICBjOlxteWRpclxibGFoLnR4dAotCi0gICBC dXQgd2hhdCBpZiB5b3UgZG9uJ3QgbGlrZSB0aGVzZSBydWxlcyBhbmQgeW91IHN0aWxsIHdhbnQg dG8gcGFzcyBhCi0gICBsaXRlcmFsIGZpbGVuYW1lIGNvbnRhaW5pbmcgc2luZ2xlIGJhY2tzbGFz aGVzIHRvIGEgbWFjcm8/IFRoaXMgaXMKLSAgIHBvc3NpYmxlIHRvbywgYnV0IGEgYml0IHRyaWNr eTogdHVybiBjb21tYW5kIHF1b3Rpbmcgb2ZmIGJlZm9yZQotICAgaW52b2tpbmcgdGhlIG1hY3Jv LCBhbmQgdGhlbiB0dXJuIGl0IGJhY2sgb24gaW5zaWRlIHRoZSBtYWNyby4gRXhhbXBsZToKLQot ICBkZWZpbmUgdGVzdCBzZXQgY29tbWFuZCBxdW90aW5nIG9uLCBlY2hvIFxmY29udGVudHMoXCUx KQotCi0gIHNldCBjb21tYW5kIHF1b3Rpbmcgb2ZmCi0gIHRlc3QgYzpcbXlkaXJcYmxhaC50eHQK LSAgYzpcbXlkaXJcYmxhaC50eHQKLQotICAgVXBvbiByZXR1cm4gZnJvbSB0aGUgbWFjcm8sIGNv bW1hbmQgcXVvdGluZyBpcyBiYWNrIG9uIChzaW5jZSB0aGUgbWFjcm8KLSAgIHR1cm5lZCBpdCBv bikuCi0KLSAgIE9idmlvdXNseSB0aGlzIHRyaWNrIGNhbiBub3QgYmUgdXNlZCBpZiB0aGUgZmls ZW5hbWUgaXMgc3RvcmVkIGluIGEKLSAgIHZhcmlhYmxlLCBzaW5jZSBpdCBwcmV2ZW50cyB0aGUg dmFyaWFibGUgZnJvbSBiZWluZyBldmFsdWF0ZWQuCi0KLTEuMTEuNi4gUGFzc2luZyBET1MgRmls ZSBOYW1lcyBmcm9tIE1hY3JvIFBhcmFtZXRlcnMgdG8gdGhlIERPUyBTaGVsbAotCi0gICBOb3cg c3VwcG9zZSB5b3UgbmVlZCB0byBwYXNzIGEgRE9TIGZpbGVuYW1lIHRvIGEgbWFjcm8sIGFuZCB0 aGUgbWFjcm8KLSAgIG5lZWRzIHRvIHBhc3MgaXQsIGluIHR1cm4sIHRvIHRoZSBXaW5kb3dzIHNo ZWxsIHZpYSAoc2F5KSBLZXJtaXQncyBSVU4KLSAgIGNvbW1hbmQuIFRoaXMgd29ya3MgdG9vOgot Ci0gIGRlZmluZSB4cnVuIHJ1biBcZmNvbnRlbnRzKFwlMSkKLSAgeHJ1biBjOlxcd2luZG93c1xc Y29tbWFuZFxcY2hrZHNrLmV4ZQotCi0gICAob3IgeW91IGNhbiB1c2UgdGhlIFNFVCBDT01NQU5E IFFVT1RJTkcgT0ZGIC8gT04gdGVjaG5pcXVlIGRlc2NyaWJlZAotICAgYWJvdmUgdG8gYXZvaWQg dGhlIGRvdWJsZSBiYWNrc2xhc2hlcy4pIEJ1dC4uCi0KLSAgeHJ1biBjOi93aW5kb3dzL2NvbW1h bmQvY2hrZHNrLmV4ZQotCi0gICBkb2VzIG5vdCB3b3JrIGlmIHRoZSBXaW5kb3dzIHNoZWxsIGRv ZXMgbm90IHJlY29nbml6ZSAiLyIgYXMgYQotICAgZGlyZWN0b3J5IHNlcGFyYXRvci4gSWYgdGhl cmUgaXMgYSBjaGFuY2UgdGhhdCBhIGZpbGVuYW1lIG1pZ2h0IGJlCi0gICBwYXNzZWQgdG8gdGhl IG1hY3JvIGluIHRoaXMgZm9ybSwgdGhlIG1hY3JvIHdpbGwgbmVlZCB0byBjb252ZXJ0IGl0IHRv Ci0gICBhIGZvcm0gYWNjZXB0YWJsZSB0byB0aGUgc2hlbGw6Ci0KLSAgZGVmaW5lIHhydW4gcnVu IFxmcmVwbGFjZShcZmNvbnRlbnRzKFwlMSksLyxcXCkKLQotICAgSGVyZSB3ZSByZXBsYWNlIGFs bCBvY2N1cnJlbmNlcyAoaWYgYW55KSBvZiAiLyIgaW4gdGhlIGFyZ3VtZW50IHdpdGgKLSAgICJc IiBwcmlvciB0byBpc3N1aW5nIHRoZSBSVU4gY29tbWFuZC4gT2YgY291cnNlLCBpbiBvcmRlciB0 byBzcGVjaWZ5Ci0gICAiXCIgYXMgYSBsaXRlcmFsIGNoYXJhY3RlciBpbiB0aGUgXGZyZXBsYWNl KCkgYXJndW1lbnQgbGlzdCwgd2UgaGF2ZSB0bwotICAgZG91YmxlIGl0LgotCi0xLjExLjcuIFBh c3NpbmcgRE9TIEZpbGVuYW1lcyB0byBLZXJtaXQgZnJvbSB0aGUgU2hlbGwKLQotICAgQXMgbm90 ZWQgaW4gdGhlIG1hbnVhbCwgdGhlIFwmQFtdIGFycmF5IGNvbnRhaW5zIEtlcm1pdCdzIGNvbW1h bmQtbGluZQotICAgYXJndW1lbnRzLiBTdXBwb3NlIG9uZSBvZiB0aGVzZSBhcmd1bWVudHMsIHNh eSBcJkBbM10sIGlzIGEgRE9TCi0gICBmaWxlbmFtZSBzdWNoIGFzIEM6XEZPT1xCQVJcQkFaXE9P RkEuVFhULiAoTm90ZTogSW4gQy1LZXJtaXQgNy4wIGFuZAotICAgSzk1IDEuMS4xOCBhbmQgbGF0 ZXIsIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgYWZ0ZXIgIj0iIG9yICItLSIgYXJlIGFsc28KLSAg IGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIFwlMS4uOSB2YXJpYWJsZXM7IHNlZSBbMzY4XVNl Y3Rpb24gNy41LikKLQotICAgT2YgY291cnNlIHlvdSBjYW4gZWxpbWluYXRlIGFueSBwcm9ibGVt cyBieSB1c2luZyBmb3J3YXJkIHNsYXNoZXMKLSAgIHJhdGhlciB0aGFuIGJhY2tzbGFzaGVzIGlu IHRoZSBmaWxlbmFtZSwgYnV0IHNvbWV0aW1lcyB0aGlzIGlzIG5vdAotICAgcG9zc2libGUsIGFz IHdoZW4gdGhlIEtlcm1pdCBjb21tYW5kIGxpbmUgaXMgYmVpbmcgZ2VuZXJhdGVkIGJ5IGFub3Ro ZXIKLSAgIHByb2dyYW0gdGhhbiBjYW4gb25seSBnZW5lcmF0ZSAibmF0aXZlIiBmb3JtYXQgRE9T IGZpbGVuYW1lcy4KLQotICAgQXMgbm90ZWQgaW4gdGhlIG1hbnVhbCwgIlwleCIgdmFyaWFibGVz IGFuZCBcJnhbXSBhcnJheXMgYXJlIGFsd2F5cwotICAgZXZhbHVhdGVkICJhbGwgdGhlIHdheSIg KHJlY3Vyc2l2ZWx5KS4gSWYgdGhlIGNvbnRlbnRzIG9mIG9uZSBvZiB0aGVzZQotICAgdmFyaWFi bGVzIGNvbnRhaW5zIGJhY2tzbGFzaGVzLCB0aGlzIGNhdXNlcyBhbm90aGVyIGxldmVsIG9mCi0g ICBldmFsdWF0aW9uLgotCi0gICBUaGVyZSBpcyBhbm90aGVyIGtpbmQgb2YgdmFyaWFibGUsIHdo aWNoIGlzIGV2YWx1YXRlZCBvbmx5ICJvbmUgbGV2ZWwKLSAgIGRlZXAiLiBZb3UgY2FuIHVzZSB0 aGlzIHRvIHByZXZlbnQgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGJhY2tzbGFzaGVzIGluCi0gICB0 aGUgZmlsZW5hbWVzLiBFeGFtcGxlOgotCi0gIGFzc2lnbiBmaWxlbmFtZSBcZmNvbnRlbnRzKFwm QFszXSkgIDsgVHJhbnNmZXIgY29udGVudHMKLSAgLi4uCi0gIHNlbmQgXG0oZmlsZW5hbWUpCi0K LSAgIE9yLCBtb3JlIHNpbXBseToKLQotICBzZW5kIFxmY29udGVudHMoXCZAWzNdKQotCi0xLjEy LiBEZWJ1Z2dpbmcKLQotICAgVGhlIGRlYnVnIGxvZyBpcyBwcm9kdWNlZCB3aGVuIHlvdSBnaXZl IGEgImxvZyBkZWJ1ZyIgY29tbWFuZC4gVGhpcyBpcwotICAgbm9ybWFsbHkgZG9uZSBhdCB0aGUg cmVxdWVzdCBvZiB0aGUgS2VybWl0IGhlbHAgZGVzaywgZm9yIGZvcndhcmRpbmcgdG8KLSAgIHRo ZSBLZXJtaXQgZGV2ZWxvcGVycyBmb3IgYW5hbHlzaXMgYXMgYSBsYXN0IHJlc29ydCBpbiB0cm91 Ymxlc2hvb3RpbmcKLSAgIHByb2JsZW1zLiAoTGFzdCByZXNvcnQgYmVjYXVzZSBpdCBjYW4gZ3Jv dyBxdWl0ZSBodWdlIGluIGEgdmVyeSBzaG9ydAotICAgdGltZS4pIEluIGNhc2VzIHdoZXJlIHRp bWluZyBpbmZvcm1hdGlvbiBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIGEKLSAgIHByb2Js ZW0sIHlvdSBjYW4gdGVsbCBDLUtlcm1pdCB0byBwdXQgYSB0aW1lc3RhbXAgb24gZWFjaCBkZWJ1 ZyBsb2cKLSAgIGxpbmUgYnkgZ2l2aW5nIHRoZSBjb21tYW5kOgotCi0gIFNFVCBERUJVRyBUSU1F U1RBTVAgT04KLQotICAgQXQgYW55IHRpbWUgYmVmb3JlIG9yIGFmdGVyIGFjdGl2YXRpbmcgdGhl IGRlYnVnIGxvZyAoU0VUIERFQlVHCi0gICBUSU1FU1RBTVAgT0ZGIHR1cm5zIG9mZiB0aW1lc3Rh bXBpbmcpLiBUaW1lc3RhbXBzIGNhbiBiZSB0dXJuZWQgb2ZmIGFuZAotICAgb24gYXMgZGVzaXJl ZCB3aGlsZSBsb2dnaW5nLiBPYnZpb3VzbHksIHRoZXkgaW5jcmVhc2UgdGhlIHNpemUgYW5kCi0g ICBncm93dGggcmF0ZSBvZiB0aGUgbG9nIHNpZ25pZmljYW50bHksIGFuZCBzbyBzaG91bGQgYmUg dXNlZCBzcGFyaW5nbHkuCi0gICBUaW1lc3RhbXBzIGFyZSBvZiB0aGUgZm9ybSBoaDptbTpzcy54 eHgsIHdoZXJlIC54eHggaXMgdGhvdXNhbmRzIG9mIGEKLSAgIHNlY29uZCAoYnV0IGlzIGluY2x1 ZGVkIG9ubHkgb24gcGxhdGZvcm1zIHRoYXQgaW5jbHVkZSB0aGlzIGZlYXR1cmUpLgotCi0xLjEz LiBMb2dzCi0KLSAgIEluIFVOSVggQy1LZXJtaXQgYW5kIGluIEstOTUsIHlvdSBjYW4gbm93IGRp cmVjdCBhbnkgbG9nIHRvIGEgcGlwZS4KLSAgIFRoaXMgbm90IG9ubHkgbGV0cyB5b3Ugc2VuZCB5 b3VyIGxvZ3MgdG8gcGxhY2VzIG90aGVyIHRoYW4gZGlzayBmaWxlcywKLSAgIGJ1dCBhbHNvIGxl dHMgeW91IGN1c3RvbWl6ZSB0aGVtIHRvIGFueSBkZXNpcmVkIGRlZ3JlZS4KLQotICAgTE9HIHsg REVCVUcsIFBBQ0tFVFMsIFNFU1NJT04sIFRSQU5TQUNUSU9OLCBDT05ORUNUSU9OIH0geyBmaWxl LCBwaXBlIH0KLSAgICAgICAgICAuLi4KLSAgICAgICAgICBBICJwaXBlIiBpcyB0aGUgbmFtZSBv ZiBhIGNvbW1hbmQsIHByZWNlZGVkIGJ5IGEgdmVydGljYWwgYmFyLgotICAgICAgICAgIElmIHRo ZSBwaXBlIGNvbnRhaW5zIGFueSBzcGFjZXMsIGl0IG11c3QgYmUgZW5jbG9zZWQgaW4gYnJhY2Vz LgotCi0gICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzIGZvciBVTklYIChhbHdheXMgcmVtZW1iZXIg dGhlIGltcG9ydGFuY2Ugb2YKLSAgIGdldHRpbmcgdGhlIFVOSVggc2hlbGwgcXVvdGluZyBydWxl cyByaWdodCk6Ci0KLSAgIExPRyBUUkFOU0FDVElPTlMgfGxwcgotICAgICAgICAgIFRoaXMgc2Vu ZHMgdGhlIHRyYW5zYWN0aW9uIGxvZyB0byB0aGUgZGVmYXVsdCBVTklYIHByaW50ZXIsCi0gICAg ICAgICAgcmF0aGVyIHRoYW4gdG8gYSBmaWxlICh1c2UgImxwIiByYXRoZXIgdGhhbiAibHByIiBp ZiBuZWNlc3NhcnkpLgotCi0gICBMT0cgVFJBTlNBQ1RJT05TIHt8IG15ZmlsdGVyID4gdC5sb2d9 Ci0gICAgICAgICAgRm9yIHRob3NlIHdobyBkb24ndCBsaWtlIHRoZSBmb3JtYXQgb2YgdGhlIHRy YW5zYWN0aW9uIGxvZywgb3IKLSAgICAgICAgICB3YW50IHRvIGV4dHJhY3QgY2VydGFpbiBpbmZv cm1hdGlvbiBmcm9tIGl0OyB3cml0ZSB5b3VyIG93bgotICAgICAgICAgIG91dHB1dCBmaWx0ZXIu Ci0KLSAgIExPRyBTRVNTSU9OIHt8IGxwciAtUGxhc2Vyd3JpdGVyfQotICAgICAgICAgIFRoaXMg c2VuZHMgdGhlIHNlc3Npb24gbG9nIHRvIGEgc3BlY2lmaWMgVU5JWCBwcmludGVyLCByYXRoZXIK LSAgICAgICAgICB0aGFuIHRvIGEgZmlsZS4gTm90ZSB0aGUgYnJhY2VzIGFyb3VuZCB0aGUgcGlw ZWxpbmUuIFRoZXNlIGFyZQotICAgICAgICAgIHJlcXVpcmVkIGJlY2F1c2UgaXQgY29udGFpbnMg c3BhY2VzLgotCi0gICBMT0cgREVCVUcge3wgdGFpbCAtMTAwID4gZGVidWcubG9nfQotICAgICAg ICAgIFRoaXMgY2F1c2VzIHRoZSBkZWJ1ZyBsb2cgZmlsZSB0byBjb250YWluIG9ubHkgdGhlIGZp bmFsIDEwMAotICAgICAgICAgIGxpbmVzLiBTdXBwb3NlIEMtS2VybWl0IGNyYXNoZXMgdW5kZXIg c29tZSB1bnByZWRpY3RhYmxlCi0gICAgICAgICAgY2lyY3Vtc3RhbmNlcywgYW5kIHlvdSBuZWVk IGEgZGVidWcgbG9nIHRvIGNhdGNoIGl0IGluIHRoZSBhY3QuCi0gICAgICAgICAgQnV0IHRoZSBk ZWJ1ZyBsb2cgY2FuIGdyb3cgdG8gaHVnZSBwcm9wb3J0aW9ucyB2ZXJ5IHF1aWNrbHksCi0gICAg ICAgICAgcG9zc2libHkgZmlsbGluZyB1cCB0aGUgZGlzay4gUGlwaW5nIHRoZSBkZWJ1ZyBsb2cg dGhyb3VnaAotICAgICAgICAgICJ0YWlsIiByZXN1bHRzIGluIGtlZXBpbmcgb25seSB0aGUgbGFz dCAxMDAgbGluZXMgKG9yIG90aGVyCi0gICAgICAgICAgbnVtYmVyIG9mIHlvdXIgY2hvaWNlKS4K LQotICAgTE9HIERFQlVHIHt8IGdyZXAgIl5URUxORVQiID4gZGVidWcubG9nfQotICAgICAgICAg IFRoaXMgb25lIHNob3dzIGhvdyB0byBsb2cgb25seSBUZWxuZXQgbmVnb3RpYXRpb25zLiBQaXBp bmcgdGhlCi0gICAgICAgICAgZGVidWcgbG9nIHRocm91Z2ggZ3JlcCBvciBlZ3JlcCBsZXRzIHlv dSBsb2cgb25seSBzcGVjaWZpYwotICAgICAgICAgIGluZm9ybWF0aW9uLCByYXRoZXIgdGhhbiBl dmVyeXRoaW5nLiAibWFuIGdyZXAiIGZvciBmdXJ0aGVyCi0gICAgICAgICAgaW5mby4KLQotICAg TE9HIERFQlVHIHt8IGd6aXAgLWMgPiBkZWJ1Zy5sb2cuZ3p9Ci0gICAgICAgICAgQ3JlYXRlcyBh IGZ1bGwgZGVidWcgbG9nLCBidXQgY29tcHJlc3NlZCBieSBnemlwIHRvIHNhdmUgc3BhY2UuCi0K LSAgIExPRyBQQUNLRVRTIHt8IHRyICJcXDAxIiAiWCIgfCBjdXQgLWM5LSA+IHBhY2tldC5sb2d9 Ci0gICAgICAgICAgVGhpcyBvbmUgd3JpdGVzIHRoZSByZWd1bGFyIHBhY2tldCBsb2csIGJ1dCB0 cmFuc2xhdGVzIHRoZQotICAgICAgICAgIEN0cmwtQSB0aGF0IHN0YXJ0cyBlYWNoIHBhY2tldCB0 byB0aGUgbGV0dGVyICJYIiBhbmQgcmVtb3ZlcyB0aGUKLSAgICAgICAgICBzLW5uLW5uLSBub3Rh dGlvbiBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBsaW5lLiBOb3RlIHRoZQotICAgICAgICAg IGRvdWJsZSBiYWNrc2xhc2ggKG5vcm1hbCBLZXJtaXQgcXVvdGluZyBydWxlcykuICJtYW4gdHIi IGFuZAotICAgICAgICAgICJtYW4gY3V0IiBmb3IgZnVydGhlciBpbmZvLgotCi0gICBTZWUgWzM2 OV1TZWN0aW9uIDIuMTIgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBuZXcgY29ubmVjdGlvbiBs b2cuCi0KLTEuMTQuIEF1dG9tYXRpYyBGaWxlLVRyYW5zZmVyIFBhY2tldCBSZWNvZ25pdGlvbiBh dCB0aGUgQ29tbWFuZCBQcm9tcHQKLQotICAgQmVnaW5uaW5nIGluIHZlcnNpb24gNy4wLCBDLUtl cm1pdCBjYW4gcmVjb2duaXplIEtlcm1pdCAoYW5kIGluIHNvbWUKLSAgIGNhc2VzIGFsc28gWm1v ZGVtKSBmaWxlLXRyYW5zZmVyIHBhY2tldHMgd2hpbGUgYXQgaXRzIGNvbW1hbmQgcHJvbXB0Lgot ICAgVGhpcyBpcyBjb252ZW5pZW50IChmb3IgZXhhbXBsZSksIGlmIHlvdSBlc2NhcGVkIGJhY2sg ZnJvbSBhIHJlbW90ZQotICAgS2VybWl0IHByb2dyYW0gYW5kIHRvbGQgdGhlIGxvY2FsIEtlcm1p dCBwcm9ncmFtIHRvIHNlbmQgYSBmaWxlLCBidXQKLSAgIGZvcmdvdCB0byB0ZWxsIHRoZSByZW1v dGUgS2VybWl0IHByb2dyYW0gdG8gcmVjZWl2ZSBpdCAoYW5kIHRoZSBsb2NhbAotICAgS2VybWl0 IGRpZCBub3QgaGF2ZSB0aGUgInNlbmQgYSBLZXJtaXQgcmVjZWl2ZSBjb21tYW5kIiBmZWF0dXJl Ci0gICBhdmFpbGFibGUpLiBUaGlzIGZlYXR1cmUgaXMgY29udHJvbGxlZCBieSB0aGUgZm9sbG93 aW5nIGNvbW1hbmQ6Ci0KLSAgIFNFVCBDT01NQU5EIEFVVE9ET1dOTE9BRCB7IE9OLCBPRkYgfQot ICAgICAgICAgIFdoZW4gT04sIHdoaWNoIGlzIHRoZSBkZWZhdWx0LCB0aGUgY29tbWFuZCBwYXJz ZXIgcmVjb2duaXplcwotICAgICAgICAgIEtlcm1pdCBwYWNrZXRzIHdoZW4gS2VybWl0IGlzIGlu IHJlbW90ZSBtb2RlLiBBbiBTIHBhY2tldCBtYWtlcwotICAgICAgICAgIGl0IGdvIGludG8gcmVj ZWl2ZSBtb2RlLCBhbiBJIHBhY2tldCBtYWtlcyBpdCBnbyBpbnRvIHNlcnZlcgotICAgICAgICAg IG1vZGUuIFdoZW4gT0ZGLCBwYWNrZXQgcmVjb2duaXRpb24gaXMgZGlzYWJsZWQgYW5kIHRoZSBi ZWhhdmlvcgotICAgICAgICAgIHdoZW4gYSBwYWNrZXQgaXMgcmVjZWl2ZWQgYXQgdGhlIGNvbW1h bmQgcHJvbXB0IGlzIGFzIGl0IHdhcyBpbgotICAgICAgICAgIEMtS2VybWl0IDYuMSBhbmQgZWFy bGllciAobmFtZWx5IHRvIHByaW50IGFuIGVycm9yIG1lc3NhZ2UpLgotCi0gICBDT01NQU5EIEFV VE9ET1dOTE9BRCBpcyB0aGUgY29tbWFuZC1tb2RlIGVxdWl2YWxlbnQgb2YgVEVSTUlOQUwKLSAg IEFVVE9ET1dOTE9BRCwgd2hpY2ggaXMgZWZmZWN0aXZlIGR1cmluZyBDT05ORUNUIG1vZGUuCi0K LTEuMTUuIFRoZSBUWVBFIENvbW1hbmQKLQotICAgVGhlIFRZUEUgY29tbWFuZCBub3cgYWNjZXB0 cyBhIHNlbGVjdGlvbiBvZiBvcHRpb25hbCBzd2l0Y2hlcwotICAgKFszNzBdU2VjdGlvbiAxLjUp LCBhbmQgYWxzbyBzZXRzIHNldmVyYWwgdmFyaWFibGVzLgotCi0gICBTeW50YXg6IFRZUEUgWyBz d2l0Y2hlcy4uLiBdIGZpbGVuYW1lCi0KLSAgIFZhcmlhYmxlczoKLQotICAgXHYodHlfbG4pCi0g ICAgICAgICAgTGluZSBudW1iZXIgb2YgY3VycmVudCBsaW5lIChkdXJpbmcgVFlQRSBjb21tYW5k OyBzZWUgL1BSRUZJWCkKLQotICAgXHYodHlfbGMpCi0gICAgICAgICAgTGluZSBjb3VudCBvZiBm aWxlIG1vc3QgcmVjZW50bHkgVFlQRWQuCi0KLSAgIFx2KHR5X21jKQotICAgICAgICAgIE1hdGNo IGNvdW50IG9mIGZpbGUgbW9zdCByZWNlbnRseSBUWVBFZCAoc2VlIC9NQVRDSCkuCi0KLSAgIFN3 aXRjaGVzOgotCi0gICAvUEFHRQotICAgICAgICAgIElmIC9QQUdFIGlzIGluY2x1ZGVkLCBLZXJt aXQgcGF1c2VzIGF0IHRoZSBlbmQgb2YgZWFjaCBzY3JlZW5mdWwKLSAgICAgICAgICBhbmQgaXNz dWVzIGEgIm1vcmU/IiBwcm9tcHQuIFlvdSBtYXkgcHJlc3MgdGhlIHNwYWNlIGJhciB0byB2aWV3 Ci0gICAgICAgICAgdGhlIG5leHQgcGFnZSAoc2NyZWVuZnVsKSwgb3IgcHJlc3MgInEiIG9yICJu IiB0byByZXR1cm4gdG8gdGhlCi0gICAgICAgICAgQy1LZXJtaXQgcHJvbXB0LiBJZiB0aGlzIHN3 aXRjaCBpcyBnaXZlbiwgaXQgb3ZlcnJpZGVzIHRoZQotICAgICAgICAgIENPTU1BTkQgTU9SRS1Q Uk9NUFRJTkcgc2V0dGluZyBmb3IgdGhpcyBjb21tYW5kIG9ubHkuIElmIGl0IGlzCi0gICAgICAg ICAgbm90IGdpdmVuLCBwYWdpbmcgaXMgYWNjb3JkaW5nIHRvIENPTU1BTkQgTU9SRS1QUk9NUFRJ TkcuCi0KLSAgIC9OT1BBR0UKLSAgICAgICAgICBEbyBub3QgcGF1c2UgYXQgdGhlIGVuZCBvZiBl YWNoIHNjcmVlbmZ1bDsgc2hvdyB0aGUgd2hvbGUgZmlsZQotICAgICAgICAgIChvciBhbGwgc2Vs ZWN0ZWQgbGluZXMpIGF0IG9uY2UuIElmIHRoaXMgc3dpdGNoIGlzIGdpdmVuLCBpdAotICAgICAg ICAgIG92ZXJyaWRlcyB0aGUgQ09NTUFORCBNT1JFLVBST01QVElORyBzZXR0aW5nIGZvciB0aGlz IGNvbW1hbmQKLSAgICAgICAgICBvbmx5LiBJZiBpdCBpcyBub3QgZ2l2ZW4sIHBhZ2luZyBpcyBh Y2NvcmRpbmcgdG8gQ09NTUFORAotICAgICAgICAgIE1PUkUtUFJPTVBUSU5HLgotCi0gICAvSEVB RFs6bl0KLSAgICAgICAgICBPbmx5IHNob3cgdGhlIGZpcnN0IG4gbGluZXMgb2YgdGhlIGZpbGUg KHdoZXJlIG4gaXMgYSBudW1iZXIpLgotICAgICAgICAgIElmIG4gaXMgb21pdHRlZCwgMTAgaXMg dXNlZC4KLQotICAgL1RBSUxbOm5dCi0gICAgICAgICAgT25seSBzaG93IHRoZSBsYXN0IG4gbGlu ZXMgb2YgdGhlIGZpbGUgKHdoZXJlIG4gaXMgYSBudW1iZXIpLiBJZgotICAgICAgICAgIG5pcyBv bWl0dGVkLCAxMCBpcyB1c2VkLiBOb3RlOiAvSEVBRCBhbmQgL1RBSUwgY2FuJ3QgYmUKLSAgICAg ICAgICBjb21iaW5lZDsgaWYgeW91IGdpdmUgYm90aCBzd2l0Y2hlcywgb25seSB0aGUgbW9zdCBy ZWNlbnQgb25lIGlzCi0gICAgICAgICAgdXNlZC4KLQotICAgL01BVENIOnBhdHRlcm4KLSAgICAg ICAgICBPbmx5IHR5cGUgbGluZXMgZnJvbSB0aGUgZmlsZSB0aGF0IG1hdGNoIHRoZSBnaXZlbiBw YXR0ZXJuIChzZWUKLSAgICAgICAgICBbMzcxXVNlY3Rpb24gNC45LjEgZm9yIHBhdHRlcm4gbm90 YXRpb24pLiBVTklYIHVzZXJzIGZhbWlsaWFyCi0gICAgICAgICAgd2l0aCBncmVwIHNob3VsZCBu b3RlIGEgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZTogdGhlcmUgaXMgbm8KLSAgICAgICAgICBpbXBs aWVkICIqIiBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIHBhdHRlcm4uIFRodXM6Ci0K LSAgVFlQRSAvTUFUQ0g6Zm9vICAgIExpc3RzIGxpbmVzIHdob3NlIGVudGlyZSBjb250ZW50cyBh cmUgImZvbyIuCi0gIFRZUEUgL01BVENIOmZvbyogICBMaXN0cyBsaW5lcyB0aGF0IHN0YXJ0IHdp dGggImZvbyIuCi0gIFRZUEUgL01BVENIOipmb28gICBMaXN0cyBsaW5lcyB0aGF0IGVuZCB3aXRo ICJmb28iLgotICBUWVBFIC9NQVRDSDoqZm9vKiAgTGlzdHMgbGluZXMgdGhhdCBoYXZlICJmb28i IGFueXdoZXJlIGluIHRoZW0uCi0KLSAgICAgICAgICAvSEVBRCBhbmQgL1RBSUwgYXBwbHkgYWZ0 ZXIgL01BVENILCBzbyAidHlwZSAvdGFpbDoyMCAvbWF0Y2g6eCoiCi0gICAgICAgICAgc2hvd3Mg dGhlIGxhc3QgMjAgbGluZXMgaW4gdGhlIGZpbGUgdGhhdCBzdGFydCB3aXRoICJ4Ii4KLQotICAg L1BSRUZJWDpzdHJpbmcKLSAgICAgICAgICBQcmludCB0aGUgZ2l2ZW4gc3RyaW5nIGF0IHRoZSBi ZWdpbm5pbmcgb2YgZWFjaCBsaW5lLiBUaGUgc3RyaW5nCi0gICAgICAgICAgbWF5IGJlIGEgY29u c3RhbnQsIGEgdmFyaWFibGUsIG9yIGEgcXVvdGVkIHZhcmlhYmxlLiBJZiBpdCdzIGFuCi0gICAg ICAgICAgdW5xdW90ZWQgdmFyaWFibGUsIGl0cyB2YWx1ZSBhdCB0aGUgdGltZSB0aGUgVFlQRSBj b21tYW5kIHdhcwotICAgICAgICAgIGdpdmVuIGlzIHVzZWQgYXMgYSBjb25zdGFudC4gSWYgaXQg aXMgYSBxdW90ZWQgdmFyaWFibGUsIGl0IGlzCi0gICAgICAgICAgcmUtZXZhbHVhdGVkIGZvciBl YWNoIGxpbmU7IGEgdXNlZnVsIHZhcmlhYmxlIGZvciB0aGlzIGNvbnRleHQKLSAgICAgICAgICBp cyBcdih0eV9sbikgKHRoZSBsaW5lIG51bWJlciBvZiB0aGUgY3VycmVudCBsaW5lIGJlaW5nIHR5 cGVkKS4KLSAgICAgICAgICBJZiB0aGUgcHJlZml4IGlzIHRvIGluY2x1ZGUgc3BhY2VzLCBpdCBt dXN0IGJlIGVuY2xvc2VkIGluCi0gICAgICAgICAgYnJhY2VzLiBFeGFtcGxlczoKLQotICAgICAg ICB0eXBlIC9wcmVmaXg6e29vZmEudHh0OiB9IC9tYXRjaDoqdGhpbmcqIG9vZmEudHh0Ci0gICAg ICAgICAgICAgICAgUHJpbnRzIGFsbCBsaW5lcyBpbiBvb2ZhLnR4dCB0aGF0IGNvbnRhaW4gInRo aW5nIiB3aXRoIHRoZQotICAgICAgICAgICAgICAgIGZpbGVuYW1lIGl0c2VsZiBhcyB0aGUgcHJl Zml4IChzaW1pbGFyIHRvIFVOSVggZ3JlcCkuCi0KLSAgICAgICAgdHlwZSAvcHJlZml4Ontcdih0 aW1lKS4gfSBvb2ZhLnR4dAotICAgICAgICAgICAgICAgIFByZWZpeGVzIGVhY2ggbGluZSBvZiBv b2ZhLnR4dCB3aXRoIHRoZSB0aW1lIGF0IHdoaWNoIHRoZQotICAgICAgICAgICAgICAgIFRZUEUg Y29tbWFuZCB3YXMgZ2l2ZW4gKG9uZSBiYWNrc2xhc2gpCi0KLSAgICAgICAgdHlwZSAvcHJlZml4 OntcXHYodGltZSkuIH0gb29mYS50eHQKLSAgICAgICAgICAgICAgICBQcmVmaXhlcyBlYWNoIGxp bmUgb2Ygb29mYS50eHQgd2l0aCB0aGUgdGltZSBhdCB3aGljaCB0aGF0Ci0gICAgICAgICAgICAg ICAgbGluZSBpcyBiZWluZyB0eXBlZCAodHdvIGJhY2tzbGFzaGVzKS4KLQotICAgICAgICB0eXBl IC9wcmVmaXg6e1xcdih0eV9sbikuIH0gb29mYS50eHQKLSAgICAgICAgICAgICAgICBQcmVmaXhl cyBlYWNoIGxpbmUgb2Ygb29mYS50eHQgd2l0aCBpdHMgbGluZSBudW1iZXIuCi0KLSAgICAgICAg dHlwZSAvcHJlZml4OntcXGZscGFkKFxcdih0eV9sbiksNCkuIH0gb29mYS50eHQKLSAgICAgICAg ICAgICAgICBTYW1lIGFzIHRoZSBwcmV2aW91cyBleGFtcGxlLCBleGNlcHQgdGhlIGxpbmUgbnVt YmVyIGlzCi0gICAgICAgICAgICAgICAgcmlnaHQtYWRqdXN0ZWQgaW4gYSA0LWNvbHVtbiBmaWVs ZC4KLQotICAgL1dJRFRIWzpuXQotICAgICAgICAgIFRydW5jYXRlcyBlYWNoIGxpbmUgYXQgY29s dW1uIG4gKHdoaWNoIG11c3QgYmUgYSBudW1iZXIpIHByaW9yCi0gICAgICAgICAgdG8gcHJpbnRp bmcgaXQuIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIGZvciBsb25nIGxpbmVzIHdoZW4geW91Ci0g ICAgICAgICAgZG9uJ3Qgd2FudCB0aGVtIHRvIHdyYXAuIElmIG5pcyBvbWl0dGVkLCB5b3VyIGN1 cnJlbnQgc2NyZWVuCi0gICAgICAgICAgd2lkdGggaXMgdXNlZC4KLQotICAgL0NPVU5UCi0gICAg ICAgICAgQ291bnRzIGxpbmVzIGFuZCAtLSBpZiAvTUFUQ0ggd2FzIGluY2x1ZGVkLCBtYXRjaGVz IC0tIGJ1dCBkb2VzCi0gICAgICAgICAgbm90IHByaW50IGFueSBsaW5lcyBmcm9tIHRoZSBmaWxl LiBUaGUgbGluZSBhbmQgbWF0Y2ggY291bnQgaXMKLSAgICAgICAgICBzaG93biBhdCB0aGUgZW5k LCBhbmQgdGhlIHZhcmlhYmxlcyBcdih0eV9sYykgYW5kIFx2KHR5X2xtKSBhcmUKLSAgICAgICAg ICBzZXQgYWNjb3JkaW5nbHkuCi0KLSAgIFNFVCBPUFRJT05TIFRZUEUgeyAvUEFHRSwgL05PUEFH RSwgL1dJRFRIOm4gfQotICAgICAgICAgIFNldHMgdGhlIHBhZ2luZyBkZWZhdWx0IGZvciBUWVBF IGNvbW1hbmRzLCB3aGljaCBjYW4gYmUKLSAgICAgICAgICBvdmVycmlkZGVuIGluIGFueSBwYXJ0 aWN1bGFyIFRZUEUgY29tbWFuZCBieSBpbmNsdWRpbmcgdGhlCi0gICAgICAgICAgZGVzaXJlZCBz d2l0Y2guCi0KLSAgIElmIGEgVFlQRSBjb21tYW5kIGlzIGdpdmVuIHdpdGggbm8gc3dpdGNoLCBh bmQgbm8gU0VUIE9QVElPTlMgVFlQRQotICAgc2VsZWN0aW9uIGlzIGluIGVmZmVjdCwgcGFnaW5n IGlzIGFjY29yZGluZyB0byB5b3VyIENPTU1BTkQKLSAgIE1PUkUtUFJPTVBUSU5HIHNldHRpbmcg KFNIT1cgQ09NTUFORCkuCi0KLTEuMTYuIFRoZSBSRVNFVCBDb21tYW5kCi0KLSAgIFRoZSBSRVNF VCBjb21tYW5kLCBhZGRlZCBpbiA3LjAsIGNsb3NlcyBhbGwgb3BlbiBmaWxlcyBhbmQgbG9ncywg YnV0Ci0gICBkb2VzIG5vdCBhZmZlY3QgdGhlIG9wZW4gY29ubmVjdGlvbiAoaWYgYW55KS4KLQot MS4xNy4gVGhlIENPUFkgYW5kIFJFTkFNRSBDb21tYW5kcwotCi0gICBBcyBvZiBDLUtlcm1pdCA3 LjAsIGluIHRoZSBVTklYIHZlcnNpb24gb25seSwgdGhlIENPUFkgYW5kIFJFTkFNRQotICAgY29t bWFuZHMgYXJlIGJ1aWx0IGluIGFuZCBkbyBub3QgY2FsbCB0aGUgdW5kZXJseWluZyBwbGF0Zm9y bSdzIENPUFkgb3IKLSAgIFJFTkFNRSBjb21tYW5kLiBUaGlzIGFsbG93cyB0aGVtIHRvIHdvcmsg aW4gIk5PUFVTSCIgdmVyc2lvbnMgYW5kIG90aGVyCi0gICBjaXJjdW1zdGFuY2VzIHdoZXJlIGl0 IGNhbid0IGFjY2VzcyBzeXN0ZW0gY29tbWFuZHMsIGFuZCBpdCBhbGxvd3MgZmlsZQotICAgY29w eWluZyBhbmQgcmVuYW1pbmcgdG8gYmUgZG9uZSBwb3J0YWJseSBpbiBzY3JpcHRzLiBUaGUKLSAg IGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgYnVpbHQtaW4gQ09QWSBvciBSRU5BTUUgaW5jbHVkZToK LSAgICAgKiBJdCBmYWlscyBpZiB0aGUgc291cmNlIGZpbGUgaXMgYSBkaXJlY3Rvcnkgb3IgaXMg d2lsZCBvciBsYWNrcyByZWFkCi0gICAgICAgYWNjZXNzLgotICAgICAqIEl0IGZhaWxzIGlmIHRo ZSBzb3VyY2UgZmlsZSBpcyB0aGUgZGVzdGluYXRpb24gZmlsZS4KLSAgICAgKiBJdCBhbGxvd3Mg dGhlIGRlc3RpbmF0aW9uIGZpbGUgdG8gYmUgYSBkaXJlY3RvcnksIGluIHdoaWNoIGNhc2UgdGhl Ci0gICAgICAgc291cmNlIGZpbGUgaXMgY29waWVkIChvciByZW5hbWVkKSBpbnRvIGl0IHdpdGgg dGhlIHNhbWUgbmFtZS4KLSAgICAgKiBJdCBvdmVyd3JpdGVzIGFuIGV4aXN0aW5nIGRlc3RpbmF0 aW9uIGZpbGUgaWYgaXRzIHBlcm1pc3Npb24KLSAgICAgICBhbGxvd3MuCi0gICAgICogSXQgc2V0 cyB0aGUgbmV3IGZpbGUncyBwZXJtaXNzaW9uIGFjY29yZGluZyB0byB1bWFzayBidXQgYWxzbwot ICAgICAgIGNhcnJpZXMgZm9yd2FyZCB0aGUgc291cmNlIGZpbGUncyBleGVjdXRlIHBlcm1pc3Np b24gYml0cyBpZiB0aGUKLSAgICAgICBkZXN0aW5hdGlvbiBmaWxlIGRpZCBub3QgYWxyZWFkeSBl eGlzdC4KLSAgICAgKiBJdCBmYWlscyBpZiBpbnRlcnJ1cHRlZCBieSBDdHJsLUMuCi0gICAgICog VXBvbiBlcnJvciwgaXQgcHJpbnRzIGFuIGFwcHJvcHJpYXRlIG1lc3NhZ2UuCi0gICAgICogSXQg cmV0dXJucyBzdGFuZGFyZGl6ZWQgZXJyb3IgY29kZXMgdGhhdCBjYW4gYmUgdGVzdGVkIGJ5IElG Ci0gICAgICAgU1VDQ0VTUyAvIEZBSUwuCi0KLSAgIFRoZXNlIGNvbW1hbmRzIG5vdyBhbHNvIGFj Y2VwdCB0aGUgZm9sbG93aW5nIHN3aXRjaGVzOgotCi0gIC9MSVNUICgvTE9HLCAvVkVSQk9TRSkg ICAgPSBQcmludCAiZmlsZTEgPT4gZmlsZTIgKE9LKSIgKG9yIGVycm9yIG1lc3NhZ2UpLgotICAv Tk9MSVNUICgvTk9MT0csIC9RVUlFVCkgID0gRG9uJ3QgcHJpbnQgYW55dGhpbmcgKGV4Y2VwdCBl cnJvciBtZXNzYWdlcykuCi0KLSAgIC9OT0xJU1QgaXMgdGhlIGRlZmF1bHQuCi0KLSAgIFRoZSBz YW1lIGJ1aWx0LWluIGNvZGUgaXMgdXNlZCBieSB0aGUgVU5JWCBDLUtlcm1pdCBzZXJ2ZXIgdG8g ZXhlY3V0ZQotICAgUkVNT1RFIENPUFkgY29tbWFuZHMgKGV4Y2VwdCBpbiB0aGlzIGNhc2Ugbm8g c3dpdGNoZXMgYXJlIGF2YWlsYWJsZSkuCi0KLSAgIFRoZSBDT1BZIGNvbW1hbmQgYWxzbyBhY2Nl cHRzIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBzd2l0Y2hlcy4gV2hlbgotICAgYW55IG9mIHRo ZXNlIGFyZSBnaXZlbiAoYW5kIHRoZXkgY2FuIGJlIHVzZWQgaW4gYW55IGNvbWJpbmF0aW9uIGV4 Y2VwdAotICAgL1NXQVAgYW5kIC9BUFBFTkQpLCBzb21lIG9mIHRoZSBjaGVja3MgbGlzdGVkIGFi b3ZlIGFyZSByZWxheGVkLCBhbmQKLSAgIHRodXMgaXQgbWlnaHQgYmUgcG9zc2libGUgdG8gZ2V0 IGludG8gdHJvdWJsZSBpbiBjZXJ0YWluIGNhc2VzLCBlLmcuCi0gICB3aGVuIHRoZSBzb3VyY2Ug YW5kIHRhcmdldCBmaWxlcyBhcmUgdGhlIHNhbWUgZmlsZToKLQotICAvQVBQRU5EICAgICAgICAg ICAgICAgICAgID0gQXBwZW5kIHNvdXJjZSBmaWxlIHRvIGRlc3RpbmF0aW9uIGZpbGUuCi0gIC9T V0FQLUJZVEVTICAgICAgICAgICAgICAgPSBTd2FwIGJ5dGVzIChzZWUgWzM3Ml1TZWN0aW9uIDYu Ni41KS4KLSAgL0ZST01CNjQgICAgICAgICAgICAgICAgICA9IERlY29kZSB0aGUgc291cmNlIGZp bGUgZnJvbSBCYXNlNjQgZW5jb2RpbmcuCi0gIC9UT0I2NCAgICAgICAgICAgICAgICAgICAgPSBF bmNvZGUgdGhlIHRhcmdldCBmaWxlIGluIEJhc2U2NC4KLQotICAgQmFzZTY0IGlzIHRoZSBlbmNv ZGluZyBjb21tb25seSB1c2VkIGZvciBlbmNsb3N1cmVzIGluIEludGVybmV0IGVtYWlsLgotCi0x LjE4LiBUaGUgTUFOVUFMIENvbW1hbmQKLQotICAgVGhlIE1BTlVBTCBjb21tYW5kIGNhbiBiZSB1 c2VkIHRvIGFjY2VzcyB0aGUgYXBwcm9wcmlhdGUgS2VybWl0IG1hbnVhbAotICAgb3Igb3RoZXIg bWFudWFsLiBUaGUgZ2VuZXJhbCBzeW50YXggaXM6Ci0KLSAgIE1BTlVBTCBbIHN0cmluZyBdCi0g ICAgICAgICAgSWYgdGhlIHN0cmluZyBpcyBvbWl0dGVkLCBDLUtlcm1pdCBhc2tzIHRoZSB1bmRl cmx5aW5nIHN5c3RlbSB0bwotICAgICAgICAgIGFjY2VzcyB0aGUgQy1LZXJtaXQgbWFudWFsIHVz aW5nIHdoYXRldmVyIG1ldGhvZCBpcyBhcHByb3ByaWF0ZQotICAgICAgICAgIGZvciB0aGUgc3lz dGVtLgotCi0gICBUaGUgc3BlY2lmaWMgYWN0aW9uIGRlcGVuZHMgb24gdGhlIHN5c3RlbS4gSW4g VU5JWCwgYSAibWFuIiBjb21tYW5kIGlzCi0gICBpc3N1ZWQ7ICJrZXJtaXQiIGlzIHRoZSBkZWZh dWx0IGFyZ3VtZW50IGJ1dCBvdGhlciBtYW51YWwgdG9waWNzIG1heSBiZQotICAgc3BlY2lmaWVk LiBJZiB0aGUgIm1hbiIgY29tbWFuZCBhbGxvd3MgaW5kZXggb3Igc3RyaW5nIHNlYXJjaGluZywg dGhlCi0gICBhcHByb3ByaWF0ZSBzeW50YXggbWF5IGJlIGluY2x1ZGVkLgotCi0gICBJbiBLZXJt aXQgOTUsIHRoZSBNQU5VQUwgY29tbWFuZCBicmluZ3MgdXAgdGhlIEhUTUwgb25saW5lIEs5NSBt YW51YWwuCi0KLSAgIEluIFZNUyBhbmQgZWxzZXdoZXJlLCAibWFuIiBpcyBzaW1wbHkgdHJhbnNs YXRlZCB0byAiaGVscCIsIHdpdGggYQotICAgZGVmYXVsdCBhcmd1bWVudCBvZiAia2VybWl0Ijsg b3RoZXIgYW5kL29yIGFkZGl0aW9uYWwgYXJndW1lbnRzIG1heSBiZQotICAgaW5jbHVkZWQgYWNj b3JkaW5nIHRvIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBzeXN0ZW0ncyAiaGVscCIgY29tbWFuZC4K LQotICAgQ29ycmVjdCBvcGVyYXRpb24gb2YgdGhlICJtYW4iIGNvbW1hbmQgaW4gQy1LZXJtaXQg ZGVwZW5kcyBvbiB0aGUKLSAgIGFwcHJvcHJpYXRlIG1hbiBwYWdlIG9yIGhlbHAgdG9waWMgaGF2 aW5nIGJlZW4gaW5zdGFsbGVkIGluIHRoZSByaWdodAotICAgcGxhY2Ugd2l0aCB0aGUgcmlnaHQg cGVybWlzc2lvbnMgYW5kIGZvcm1hdC4KLQotMS4xOS4gU3RyaW5nIGFuZCBGaWxlbmFtZSBNYXRj aGluZyBQYXR0ZXJucwotCi0gICBBIHBhdHRlcm4gaXMgYSBzdHJpbmcgdGhhdCBpbmNsdWRlcyBz cGVjaWFsIG5vdGF0aW9uIGZvciBtYXRjaGluZwotICAgY2xhc3NlcyBvciBzZXF1ZW5jZXMgb2Yg Y2hhcmFjdGVycy4gQy1LZXJtaXQgNy4wIC8gSzk1IDEuMS4xOSBzdXBwb3J0cwotICAgcGF0dGVy bnMgaW4gc2V2ZXJhbCBwbGFjZXM6Ci0KLSAgICAgKiBGaWxlbmFtZXMgKFszNzNdU2VjdGlvbiA0 LjkpCi0gICAgICogU1dJVENIIGNhc2UgbGFiZWxzIChbMzc0XVNlY3Rpb24gNy4xOCkKLSAgICAg KiBUaGUgbmV3IElGIE1BVENIIHN0YXRlbWVudCAoWzM3NV1TZWN0aW9uIDcuNCkKLSAgICAgKiBU WVBFIC9NQVRDSCAoWzM3Nl1TZWN0aW9uIDEuMTUpCi0gICAgICogU0VUIEZJTEUgVEVYVC1QQVRU RVJOUyBhbmQgQklOQVJZLVBBVFRFUk5TIChbMzc3XVNlY3Rpb24gNC4zKQotICAgICAqIFRoZSBc ZnNlYXJjaCgpIGFuZCBcZmFycmF5bG9vaygpIGZ1bmN0aW9ucyAoWzM3OF1TZWN0aW9ucyA3LjMg YW5kCi0gICAgICAgWzM3OV03LjEwLjcpCi0gICAgICogVGhlIFxmcGF0dGVybigpIGZ1bmN0aW9u IHVzZWQgd2l0aCBbTSxSRV1JTlBVVCAoWzM4MF1TZWN0aW9uIDcuMSkKLQotICAgUGF0dGVybnMg YXJlIGFsc28gY2FsbGVkIHdpbGRjYXJkcywgZXNwZWNpYWxseSB3aGVuIHVzZWQgZm9yIGZpbGVu YW1lCi0gICBtYXRjaGluZy4gQy1LZXJtaXQncyBwYXR0ZXJuIHN5bnRheCBpcyBleHBsYWluZWQg aW4gWzM4MV1TZWN0aW9uIDQuOS4xLAotICAgYW5kIGFsc28gYnkgdGhlIEhFTFAgV0lMRENBUkRT IGNvbW1hbmQuCi0KLTEuMjAuIE11bHRpcGxlIENvbW1hbmRzIG9uIE9uZSBMaW5lCi0KLSAgIEFz IG9mIEMtS2VybWl0IDcuMCwgY29tbWFuZHMgY2FuIGJlIGdyb3VwZWQgdG9nZXRoZXIgb24gb25l IGxpbmUgYnkKLSAgIHNlcGFyYXRpbmcgdGhlIGNvbW1hbmRzIHdpdGggY29tbWFzIGFuZCBlbmNs b3NpbmcgdGhlIGxpc3QgaW4gYnJhY2VzLgotICAgRm9yIGV4YW1wbGU6Ci0KLSAgQy1LZXJtaXQ+ IHsgZWNobyBPbmUsIGVjaG8gVHdvLCBlY2hvIFRocmVlIH0KLSAgQy1LZXJtaXQ+IGRvIHsgZWNo byBPbmUsIGVjaG8gVHdvLCBlY2hvIFRocmVlIH0KLQotICAgQ29tbWFuZCBsaXN0cyBjYW4gYmUg bmVzdGVkOgotCi0gIFsgZG8gXSB7IGVjaG8gT25lLCBlY2hvIFR3bywgaWYgdHJ1ZSB7IGVjaG8g QSwgZWNobyBCfSwgZWNobyBUaHJlZSB9Ci0KLSAgIGFuZCB0aGUgRU5EIGNvbW1hbmQgd29ya3Mg YXMgaXQgZG9lcyBpbiBtYWNyb3M6Ci0KLSAgWyBkbyBdIHsgZWNobyBPbmUsIGVjaG8gVHdvLCBp ZiB0cnVlIGVuZCwgZWNobyBUaHJlZSB9Ci0KLSAgIFRoZSAib25lIGxpbmUiIHN0cmljdHVyZSBp cywgb2YgY291cnNlLCBwbGlhbnQgdG8gbGluZS1jb250aW51YXRpb24KLSAgIGNvbnZlbnRpb25z LCBuYW1lbHkgdGhhdCBsaW5lcyBlbmRpbmcgaW4gaHlwaGVuICgtKSBvciBsZWZ0IGJyYWNlICh7 KQotICAgYXJlIHRvIGJlIGNvbnRpbnVlZC4gVGh1cyB0aGUgZmlyc3QgZXhhbXBsZSBjYW4gYWxz byBiZSByZW5kZXJlZDoKLQotICBbIGRvIF0gewotICAgICAgZWNobyBPbmUKLSAgICAgIGVjaG8g VHdvCi0gICAgICBlY2hvIFRocmVlCi0gIH0KLQotICAgKHRoZSAiZG8iIGlzIG9wdGlvbmFsKS4K LQotMS4yMS4gV2hhdCBEbyBJIEhhdmU/Ci0KLSAgIEMtS2VybWl0IGNhbiBiZSBidWlsdCBmb3Ig aHVuZHJlZHMgb2YgZGlmZmVyZW50IHBsYXRmb3JtcyB3aXRoCi0gICBwcmFjdGljYWxseSBjb3Vu dGxlc3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBDZXJ0YWluIGNvbW1hbmRzIG1pZ2h0IG5vdAot ICAgYmUgYXZhaWxhYmxlIGluIGNlcnRhaW4gY29uZmlndXJhdGlvbnMsIGV0Yy4gRXZlbiBvbiB0 aGUgc2FtZSBwbGF0Zm9ybSwKLSAgIGRpZmZlcmVudCBidWlsZHMgYXJlIHBvc3NpYmxlOiAibWF4 aW11bSBmdW5jdGlvbmFsaXR5IiwgIm1pbmltdW0gc2l6ZSIsCi0gICAibWF4aW11bSBwZXJmb3Jt YW5jZSIsIGFuZCBzbyBvbi4gWW91IGNhbiBmaW5kIG91dCBhIGxvdCBhYm91dCB0aGUKLSAgIGNv bmZpZ3VyYXRpb24gb2YgeW91ciBDLUtlcm1pdCBwcm9ncmFtIHdpdGggdGhlIFNIT1cgRkVBVFVS RVMgY29tbWFuZC4KLSAgIE9mIGNvdXJzZSwgYSBsb3Qgb2Ygd2hhdCBpdCBzYXlzLCBlc3BlY2lh bGx5IGluIHRoZSBib3R0b20gcGFydCwgbWlnaHQKLSAgIHNlZW0gbGlrZSBnaWJiZXJpc2gsIGJ1 dCBjYW4gYmUgZGVjaXBoZXJlZCB3aXRoIGEgUm9zZXR0YSBTdG9uZSAoc3VjaAotICAgYXMgdGhl IEMtS2VybWl0IHNvdXJjZSBvciB0aGUgWzM4Ml1ja2NjZmcudHh0IGZpbGUpLiBJbiBhbnkgY2Fz ZSwgdGhlCi0gICBvdXRwdXQgZnJvbSBTSE9XIEZFQVRVUkVTIG1pZ2h0IGVhc2lseSBleHBsYWlu IHdoeSBzb21lIGV4cGVjdGVkCi0gICBmZWF0dXJlIGlzIG1pc3NpbmcsIG9yIHNvbWUgYnVmZmVy IGlzIHNtYWxsZXIgdGhhbiBleHBlY3RlZC4gSGVyZSdzIGEKLSAgIHNhbXBsZSBvZiB0aGUgYm90 dG9tIHNlY3Rpb24gZm9yIHRoZSBTdW5PUyB2ZXJzaW9uOgotCi1DLUtlcm1pdCA3LjAuMTk2LCAx IEphbiAyMDAwCi0KLU1ham9yIG9wdGlvbmFsIGZlYXR1cmVzIGluY2x1ZGVkOgotIE5ldHdvcmsg c3VwcG9ydCAodHlwZSBTSE9XIE5FVCBmb3IgZnVydGhlciBpbmZvKQotIFRlbG5ldCBLZXJtaXQg T3B0aW9uCi0gSGFyZHdhcmUgZmxvdyBjb250cm9sCi0gRXh0ZXJuYWwgWFlaTU9ERU0gcHJvdG9j b2wgc3VwcG9ydAotIExhdGluLTEgKFdlc3QgRXVyb3BlYW4pIGNoYXJhY3Rlci1zZXQgdHJhbnNs YXRpb24KLSBMYXRpbi0yIChFYXN0IEV1cm9wZWFuKSBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9u Ci0gQ3lyaWxsaWMgKFJ1c3NpYW4sIFVrcmFpbmlhbiwgZXRjKSBjaGFyYWN0ZXItc2V0IHRyYW5z bGF0aW9uCi0gR3JlZWsgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbgotIEhlYnJldyBjaGFyYWN0 ZXItc2V0IHRyYW5zbGF0aW9uCi0gSmFwYW5lc2UgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbgot IFVuaWNvZGUgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbgotIFBzZXVkb3Rlcm1pbmFsIGNvbnRy b2wKLSBSRURJUkVDVCBjb21tYW5kCi0gUkVTRU5EIGNvbW1hbmQKLSBGdWxsc2NyZWVuIGZpbGUg dHJhbnNmZXIgZGlzcGxheQotIENvbnRyb2wtY2hhcmFjdGVyIHVucHJlZml4aW5nCi0gU3RyZWFt aW5nCi0gQXV0b2Rvd25sb2FkCi0KLU1ham9yIG9wdGlvbmFsIGZlYXR1cmVzIG5vdCBpbmNsdWRl ZDoKLSBObyBLZXJiZXJvcyhUTSkgYXV0aGVudGljYXRpb24KLSBObyBTUlAoVE0pIChTZWN1cmUg UmVtb3RlIFBhc3N3b3JkKSBwcm90b2NvbAotIE5vIFNlY3VyZSBTb2NrZXRzIExheWVyIChTU0wp IHByb3RvY29sCi0gTm8gVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpIHByb3RvY29sCi0g Tm8gZW5jcnlwdGlvbgotIE5vIFggV2luZG93cyBmb3J3YXJkaW5nCi0KLUhvc3QgaW5mbzoKLSBN YWNoaW5lOiAgICBzdW40bQotIE1vZGVsOiAgICAgICh1bmtub3duKQotIE9TOiAgICAgICAgIFN1 bk9TCi0gT1MgUmVsZWFzZTogNC4xLjNfVTEKLSBPUyBWZXJzaW9uOiA0Ci0KLVRhcmdldDogc3Vu b3M0MWdzYwotR0NDIHZlcnNpb246IDIuNy4yCi1Db21waWxlZCBEZWMgMzEgMTk5OSAxMDozODo1 NCwgb3B0aW9uczoKLSBfX0dOVUNfXyBfX1NURENfXyBfUE9TSVhfSk9CX0NPTlRST0wgX1NDX0pP Ql9DT05UUk9MIEFSUkFZUkVGTEVOPTEwMjQgQklHQlVGT0sKLSBCUk9XU0VSIEJTRDQgQ0tfQU5T SUMgQ0tfQVBDIENLX0FVVE9ETCBDS19DVVJTRVMgQ0tfRE5TX1NSViBDS19FTlZJUk9OTUVOVAot IENLX0ZBU1QgQ0tfTE9HSU4gQ0tfTUtESVIgQ0tfTkFXUyBDS19QQ1RfQkFSIENLX1BFUk1TIENL X1JFQ0FMTCBDS19SVFNDVFMKLSBDS19TUEVFRCBDS19USU1FUlMgQ0tfVE1QRElSIENLX1RUR1dT SVogQ0tfVFRZRkQgQ0tfV1JFRlJFU0ggQ0tFWEVDCi0gQ0tGTE9BVD1kb3VibGUgQ0tHSE5MSE9T VCBja21heGZpbGVzPTY0IENLTUFYT1BFTj02NCBDS01BWFBBVEg9MTAyMyBDS1JFQUxQQVRICi0g Q0tSRUdFWCBDS1NZU0xPRyBDS1RVTklORyBDTURCTD0zMjc2MyBDTURERVA9NjQgQ09OR1NQRCBE Q01EQlVGIERJUkVOVCBEWU5BTUlDCi0gRk5GTE9BVCBGT1JERVBUSD0zMiBHRlRJTUVSIEhBRERS TElTVCBIREJVVUNQIElGREVCVUcgSUtTX09QVElPTiBJS1NEQgotIElLU0RDT05GIElOQlVGU0la RT0zMjc2OCBJTlBCVUZTSVo9NDA5NiBNQUNfTUFYPTE2Mzg0IE1BQ0xFVkVMPTEyOCBNQVhERElS PTMyCi0gTUFYRE5VTVM9NDA5NSBNQVhHRVRQQVRIPTEyOCBNQVhUQUtFPTU0IE1BWFdMRD0xMDI0 MDAgTVNFTkRNQVg9MTAyNCBORVRDTUQKLSBORVRDT05OIE5FVFBUWSBOT0tWRVJCUyBOT1NFVEJV RiBPQlVGU0laRT0zMjc2OCBQQVJTRU5TRSBQQVRURVJOUyBQSVBFU0VORAotIFJFTkFNRSBSTE9H Q09ERSBTQVZFRFVJRCBTRUxFQ1QgU0lHX1YgU09MX1NPQ0tFVCBzcGFyYyBTVFJFQU1JTkcgc3Vu IFNVTk9TNAotIFNZU1RJTUVIIFRDUFNPQ0tFVCBUSU1FSCBUTE9HIFROQ09ERSBUVExFQlVGIFRU U1BETElTVCBVSURCVUZMRU49MjU2IFVOSVgKLSBVTlBSRUZJWFpFUk8gVVNFX0xTVEFUIFVTRV9N RU1DUFkgVk5BTUw9NDA5NiBXSEFUQU1JIFhGUkNBTiBaX01BWENIQU49NDYKLSB6X21heGNoYW49 NDYgWlhSRVdJTkQKLQotIGJ5dGUgb3JkZXI6IGJpZyBlbmRpYW4KLQotIHNpemVvZnM6IGludD00 IGxvbmc9NCBzaG9ydD0yIGNoYXI9MSBjaGFyKj00IGZsb2F0PTQgZG91YmxlPTgKLQotIGZsb2F0 aW5nLXBvaW50OiBwcmVjaXNpb249MTYgcm91bmRpbmc9MQotCi0gICBXaXRob3V0IGdvaW5nIGlu dG8gZGV0YWlsIGFib3V0IHdoYXQgYWxsIHRoZSBub3RhdGlvbiBtZWFucywgbm90aWNlIGEKLSAg IGNvdXBsZSB0aGluZ3M6Ci0KLSAgICAgKiBUaGUgT3B0aW9ucyBzZWN0aW9uIHNob3dzIHN5bWJv bHMgKCJtYWNyb3MiKSBpbiBlZmZlY3QgZHVyaW5nCi0gICAgICAgY29tcGlsYXRpb24sIHRvZ2V0 aGVyIHdpdGggdGhlaXIgdmFsdWVzIChmb3IgdGhvc2UgdGhhdCBoYXZlCi0gICAgICAgdmFsdWVz KS4gVGhlIG9wdGlvbnMgYXJlIGxpc3RlZCBpbiBhbHBoYWJldGljYWwgb3JkZXIgdG8gbWFrZSBh bnkKLSAgICAgICBwYXJ0aWN1bGFyIG9wdGlvbiBlYXNpZXIgdG8gZmluZC4KLSAgICAgKiBNQVhX TEQgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGZpbGVzIHRoYXQgYSB3aWxkY2FyZCBjYW4gZXhw YW5kCi0gICAgICAgdG8uCi0gICAgICogQW55dGhpbmcgc3RhcnRpbmcgd2l0aCAiTk8iIGlzIGEg ZmVhdHVyZSAob3Igc29tZXRoaW5nIG90aGVyIHRoYW4gYQotICAgICAgIGZlYXR1cmUpIHRoYXQg aGFzIGJlZW4gZGVsaWJlcmF0ZWx5ICJjb21waWxlZCBvdXQiLCBvciBvbWl0dGVkLgotICAgICAq IEltcG9ydGFudCBpdGVtcyBmb3Igc2NyaXB0IHdyaXRlcnMgaW5jbHVkZTogQ01EQkw9MzI3NjMg KHRoZSBzaXplCi0gICAgICAgb2YgdGhlIGNvbW1hbmQgYnVmZmVyIGFuZCB0aGVyZWZvcmUgdGhl IG1heGltdW0gbGVuZ3RoIGZvciBhIG1hY3JvCi0gICAgICAgb3IgdmFyaWFibGUgZGVmaW5pdGlv bjsgQ01EREVQPTY0ICh0aGUgbGltaXQgb24gcmVjdXJzaW9uIGRlcHRoKTsKLSAgICAgICBGT1JE RVBUSD0zMiAodGhlIG5lc3RpbmcgbGltaXQgb24gRk9SIGxvb3BzKTsgSU5CVUZTSVpFPTMyNzY4 ICh0aGUKLSAgICAgICBzaXplIG9mIHRoZSBJTlBVVCBjb21tYW5kIGNpcmN1bGFyIGJ1ZmZlcik7 IE1BQ19NQVg9MTYzODQgKHRoZQotICAgICAgIG1heGltdW0gbnVtYmVyIG9mIG1hY3JvcyksIGV0 Yy4KLQotICAgU2VlIHRoZSBbMzgzXWNrY2NmZy50eHQgZmlsZSBmb3IgZGV0YWlscy4KLQotMS4y Mi4gR2VuZXJhbGl6ZWQgRmlsZSBJbnB1dCBhbmQgT3V0cHV0Ci0KLSAgIEMtS2VybWl0IDcuMCBh ZGRzIGEgbmV3IGdlbmVyYWxpemVkIEkvTyBzeXN0ZW0gZm9yIHN0cmVhbSBmaWxlcywKLSAgIGF1 Z21lbnRpbmcgKGFuZCB0byBzb21lIGV4dGVudCwgb3ZlcmxhcHBpbmcgd2l0aCkgdGhlIG9sZGVy IE9QRU4sIFJFQUQsCi0gICBXUklURSwgYW5kIENMT1NFIGNvbW1hbmRzLiBJbiB0aGUgbmV3IGZp bGUgaS9vIHN5c3RlbSwgd2hpY2ggY2FuIGJlCi0gICB1c2VkIHNpbXVsdGFuZW91c2x5IHdpdGgg dGhlIG9sZCBvbmUsIGFsbCBjb21tYW5kcyBhcmUgZ3JvdXBlZCB0b2dldGhlcgotICAgdW5kZXIg dGhlIG5ldyBGSUxFIGtleXdvcmQsIGFuZCBzb21lIHJlbGF0ZWQgZnVuY3Rpb25zIGFuZCB2YXJp YWJsZXMKLSAgIGFyZSBhZGRlZC4KLQotMS4yMi4xLiBXaHkgQW5vdGhlciBJL08gU3lzdGVtPwot Ci0gICBUaGUgd2VsbC1rbm93biBMT0csIE9QRU4sIFJFQUQsIFdSSVRFLCBhbmQgQ0xPU0UgY29t bWFuZHMgaGF2ZSB0aGUKLSAgIGZvbGxvd2luZyByZXN0cmljdGlvbnM6Ci0KLSAgICAxLiBPbmx5 IG9uZSBSRUFEIGZpbGUgYW5kIG9uZSBXUklURSBmaWxlIGNhbiBiZSBvcGVuIGF0IGEgdGltZS4K LSAgICAyLiBUaGUgUkVBRCBhbmQgV1JJVEUgY29tbWFuZHMgYXJlIHN0cmljdGx5IGxpbmUgb3Jp ZW50ZWQuCi0gICAgMy4gVGhlc2UgY29tbWFuZHMgY2FuIG5vdCBiZSB1c2VkIHdpdGggYmluYXJ5 IGZpbGVzLgotICAgIDQuIFRoZXkgZG8gbm90IHN1cHBvcnQgcmVhZC93cml0ZSBhY2Nlc3Mgb3Ig cmFuZG9tIGFjY2Vzcy4KLSAgICA1LiBUaGUgc3ludGF4IGlzIGEgYml0IGNvdW50ZXJpbnR1aXRp dmUgZm9yIHByb2dyYW1tZXJzLgotCi0gICBUaGUgbmV3IGZpbGUgaS9vIHN5c3RlbSBhbGxvd3Mg bXVsdGlwbGUgZmlsZXMgdG8gYmUgb3BlbiBhdCBvbmNlLCBpbgotICAgYW55IGRlc2lyZWQgY29t YmluYXRpb24gb2YgbW9kZXMgKHJlYWQvd3JpdGUvYXBwZW5kKSBzdXBwb3J0ZWQgYnkgdGhlCi0g ICBvcGVyYXRpbmcgc3lzdGVtLCBmb3IgbGluZSwgYmxvY2sgKHJlY29yZCksIG9yIGNoYXJhY3Rl ciBpL28sIGZvcgotICAgc2VxdWVudGlhbCBvciByYW5kb20gYWNjZXNzLCB1c2luZyBjb25zaXN0 ZW50IHN5bnRheCBhbmQgY29udmVudGlvbnMuCi0KLSAgIFRoZSBuZXcgc3lzdGVtLCBob3dldmVy LCBkb2VzIG5vdCByZXBsYWNlIHRoZSBvbGQgb25lLCBzaW5jZSB0aGUgb2xkCi0gICBzeXN0ZW0g c3RpbGwgbXVzdCBiZSB1c2VkIGZvcjoKLQotICAgIDEuIFRoZSBzZXNzaW9uLCBwYWNrZXQsIGRl YnVnLCB0cmFuc2FjdGlvbiwgYW5kIGNvbm5lY3Rpb24gbG9ncy4KLSAgICAyLiBSZWFkaW5nIGFu ZCB3cml0aW5nIGNvbW1hbmRzIHJhdGhlciB0aGFuIGZpbGVzLgotICAgIDMuIEV4aXN0aW5nIHNj cmlwdHMuCi0KLSAgIFRoZSBuZXcgc3lzdGVtIHdvcmtzIG9ubHkgd2l0aCByZWd1bGFyIGZpbGVz LCBub3Qgd2l0aCBjb21tYW5kcyBvcgotICAgcGlwZXMgb3IgbWFpbGJveGVzIG9yIHBzZXVkb3Rl cm1pbmFscy4gTm8gc3BlY2lhbCBwcm92aXNpb25zIGFyZSBtYWRlCi0gICBpbiB0aGUgRklMRSBj b21tYW5kcyBmb3IgaGFuZGxpbmcgZGV2aWNlcyBvciBuZXR3b3JrIGNvbm5lY3Rpb25zLCBub3IK LSAgIGZvciBwcmV2ZW50aW5nIHlvdSBmcm9tIHRyeWluZyB0byBvcGVuIHRoZW07IGlmIHRoZSB1 bmRlcmx5aW5nCi0gICBvcGVyYXRpbmcgc3lzdGVtIHRyZWF0cyB0aGVtIGxpa2UgcmVndWxhciBz dHJlYW0gZGlzayBmaWxlcywgdGhlIEZJTEUKLSAgIGNvbW1hbmRzIChleGNlcHQsIG9mIGNvdXJz ZSBTRUVLLCBSRVdJTkQsIGFuZCBDT1VOVCkgbWlnaHQgd29yayB3aXRoCi0gICB0aGVtLiAoSW4g QyBwcm9ncmFtbWluZyB0ZXJtcywgdGhlIEZJTEUgY29tbWFuZHMgYXJlLCBhdCBwcmVzZW50LAot ICAgbm90aGluZyBtb3JlIHRoYW4gYSBmcm9udCBlbmQgdG8gZm9wZW4oKSAvIGZyZWFkKCkgLyBm d3JpdGUoKSAvCi0gICBmY2xvc2UoKSBhbmQgZnJpZW5kcywgd2hpY2ggYXJlIGEgcG9ydGFibGUg QVBJIHRvIHNlcXVlbnRpYWwgZmlsZXMsIGJ1dAotICAgdGhpcyBtaWdodCBjaGFuZ2UgaW4gdGhl IGZ1dHVyZSBmb3IgcGxhdGZvcm1zIGxpa2UgVk1TIGFuZCBWT1MgdGhhdAotICAgaGF2ZSBtb3Jl IGNvbXBsaWNhdGVkIGZpbGUgc3lzdGVtcy4pCi0KLSAgIERlZmluaXRpb25zOgotCi0gICBDaGFu bmVsCi0gICAgICAgICAgQSBudW1iZXIgYXNzaWduZWQgdG8gYSBmaWxlIHdoZW4gaXQgaXMgb3Bl bmVkLCBieSB3aGljaCBpdCBtdXN0Ci0gICAgICAgICAgYmUgcmVmZXJyZWQgdG8gaW4gYWxsIGlu cHV0L291dHB1dCBvcGVyYXRpb25zLgotCi0gICBSZWFkL1dyaXRlIFBvaW50ZXIKLSAgICAgICAg ICBUaGUgY3VycmVudCBwb3NpdGlvbiBpbiBhbiBvcGVuIGZpbGUsIGV4cHJlc3NlZCBhcyB0aGUg MC1iYXNlZAotICAgICAgICAgIGJ5dGUgY291bnQgZnJvbSB0aGUgYmVnaW5uaW5nLgotCi0xLjIy LjIuIFRoZSBGSUxFIENvbW1hbmQKLQotICAgRklMRSBrZXl3b3JkIFsgc3dpdGNoZXMgXSBjaGFu bmVsIFsgZGF0YSBdCi0gICAgICAgICAgVGhlIGtleXdvcmQgc3BlY2lmaWVzIHRoZSBmdW5jdGlv bjogRklMRSBPUEVOLCBGSUxFIFJFQUQsIEZJTEUKLSAgICAgICAgICBXUklURSwgRklMRSBDTE9T RSwgZXRjLiBGb3IgY29udmVuaWVuY2UgKGFuZCBmb3IgZmFtaWxpYXJpdHkgdG8KLSAgICAgICAg ICBDIHByb2dyYW1tZXJzKSwgdGhlIHR3by13b3JkIEZJTEUgY29tbWFuZHMgY2FuIGJlIHNob3J0 ZW5lZCB0bwotICAgICAgICAgIHRoZSBzaW5nbGUgd29yZHMgRk9QRU4sIEZSRUFELCBGV1JJVEUs IEZDTE9TRSwgYW5kIHNvIG9uLgotICAgICAgICAgIFN3aXRjaGVzIGFyZSBvcHRpb25hbCwgYW5k IG1vZGlmeSBvciBhbXBsaWZ5IHRoZSByZXF1ZXN0ZWQgZmlsZQotICAgICAgICAgIGZ1bmN0aW9u LgotCi0gICBBcyBpbiBDLCBGb3J0cmFuLCBhbmQgb3RoZXIgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2Vz LCBvcGVuIGZpbGVzIGFyZQotICAgcmVmZXJyZWQgdG8gYnkgImNoYW5uZWxzIiwgaW50ZWdlcnMg c3VjaCBhcyAwLCAxLCAyLCAzLCBhbmQgc28gb24uIEEKLSAgIGNoYW5uZWwgbnVtYmVyIGlzIGFz c2lnbmVkIHdoZW4geW91IG9wZW4gYSBmaWxlLiBUaGUgbnVtYmVyIG9mCi0gICBhdmFpbGFibGUg Y2hhbm5lbHMgZGVwZW5kcyBvbiB0aGUgdW5kZXJseWluZyBvcGVyYXRpbmcgc3lzdGVtLCBhbmQg Y2FuCi0gICBiZSBzZWVuIGluIHRoZSB2YXJpYWJsZToKLQotICBcdihmX21heCkKLQotICAgb3Ig YnkgZ2l2aW5nIHRoZSBGSUxFIExJU1QgKEZMSVNUKSBjb21tYW5kLiBDaGFubmVscyBhcmUgZGlz Y3Vzc2VkIGluCi0gICBncmVhdGVyIGRldGFpbCBpbiBbMzg0XVNlY3Rpb24gMS4yMi40LgotCi0g ICBGSUxFIGNvbW1hbmQgZXJyb3JzIGNhbiBiZSBjYXVnaHQgd2l0aCBJRiBGQUlMIGFmdGVyIHRo ZSBGSUxFIGNvbW1hbmQuCi0gICBJbiBhZGRpdGlvbiwgdGhlIFx2KGZfZXJyb3IpIHZhcmlhYmxl IGlzIHNldCB0byB0aGUgY29tcGxldGlvbiBjb2RlIG9mCi0gICB0aGUgY29tbWFuZDogMCBpZiBu byBlcnJvciwgb3IgYSBuZWdhdGl2ZSBudW1iZXIgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgotICAg VGhlIGVycm9yIGNvZGVzIGFyZSBsaXN0ZWQgaW4gWzM4NV1TZWN0aW9uIDEuMjIuNS4KLQotICAg VGhlIGNvbW1hbmQgdG8gb3BlbiBhIGZpbGUgaXM6Ci0KLSAgIEZJTEUgT1BFTiBbIHN3aXRjaGVz IF0gdmFyaWFibGUgZmlsZW5hbWUKLSAgICAgICAgICBPcGVucyBhIGZpbGUgZm9yIHRoZSB0eXBl IG9mIGFjY2VzcyBzcGVjaWZpZWQgYnkgdGhlIHN3aXRjaGVzLAotICAgICAgICAgIG9yIGZvciBy ZWFkLW9ubHkgYWNjZXNzIGlmIG5vIHN3aXRjaGVzIGFyZSBnaXZlbi4gVXBvbiBzdWNjZXNzLAot ICAgICAgICAgIGEgY2hhbm5lbCBudW1iZXIgaXMgYXNzaWduZWQgdG8gdGhpcyBmaWxlIGFuZCBz dG9yZWQgaW4gdGhlCi0gICAgICAgICAgZ2l2ZW4gdmFyaWFibGUgc28geW91IGNhbiByZWZlciB0 byB0aGUgb3BlbiBmaWxlIGluIHN1YnNlcXVlbnQKLSAgICAgICAgICBpL28gY29tbWFuZHMuIElm IHRoZSBmaWxlIGNhbiBub3QgYmUgb3BlbmVkLCB0aGUgRklMRSBPUEVOCi0gICAgICAgICAgY29t bWFuZCBmYWlscy4gU3lub255bTogRk9QRU4uCi0KLSAgIFRoZSBGSUxFIE9QRU4gc3dpdGNoZXMg YXJlOgotCi0gICAvUkVBRAotICAgICAgICAgIE9wZW4gdGhlIGZpbGUgZm9yIHJlYWQgYWNjZXNz LiBJZiBubyBzd2l0Y2hlcyBhcmUgZ2l2ZW4sIC9SRUFECi0gICAgICAgICAgaXMgYXNzdW1lZC4g SWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3Qgb3IgY2FuJ3QgYmUgb3BlbmVkIGZvcgotICAgICAg ICAgIHJlYWQgYWNjZXNzLCB0aGUgRklMRSBPUEVOIGNvbW1hbmQgZmFpbHMuCi0KLSAgIC9XUklU RQotICAgICAgICAgIEFsbG93IHdyaXRpbmcuIElmIGEgZmlsZSBvZiB0aGUgc2FtZSBuYW1lIGFs cmVhZHkgZXhpc3RzLCBpdCBpcwotICAgICAgICAgIG92ZXJ3cml0dGVuIHVubGVzcyAvUkVBRCBv ciAvQVBQRU5EIGlzIGFsc28gaW5jbHVkZWQuIElmIGEgZmlsZQotICAgICAgICAgIG9mIHRoZSBn aXZlbiBuYW1lIGRvZXMgbm90IGV4aXN0LCBpdCBpcyBjcmVhdGVkLgotCi0gICAvQVBQRU5ECi0g ICAgICAgICAgRXF1aXZhbGVudCB0byAvV1JJVEUsIGV4Y2VwdCB0aGF0IGlmIHRoZSBmaWxlIGV4 aXN0cywgaXQgaXMgbm90Ci0gICAgICAgICAgZGVzdHJveWVkLiBUaGUgcmVhZC93cml0ZSBwb2lu dGVyIGlzIHNldCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlLAotICAgICAgICAgIHNvIHVubGVzcyB5 b3UgY2hhbmdlIGl0IHdpdGggRklMRSBTRUVLIG9yIFJFV0lORCAoc2VlIGJlbG93KSwKLSAgICAg ICAgICB0aGUgZmlyc3QgRklMRSBXUklURSBjb21tYW5kIGFkZHMgdG8gdGhlIGVuZCBvZiB0aGUg ZmlsZSwKLSAgICAgICAgICBwcmVzZXJ2aW5nIHdoYXQgd2FzIHRoZXJlIGFscmVhZHkuIElmIC9X UklURSBpcyBhbHNvIGdpdmVuLCBpdAotICAgICAgICAgIGlzIGlnbm9yZWQuCi0KLSAgIC9CSU5B UlkKLSAgICAgICAgICBPcGVuIHRoZSBmaWxlIGluICJiaW5hcnkiIG1vZGUsIHJhdGhlciB0aGFu IHRleHQgbW9kZS4gVGhpcwotICAgICAgICAgIHN3aXRjaCBpcyBtZWFuaW5nbGVzcyAoYnV0IHN0 aWxsIGNhbiBiZSB1c2VkKSBpbiBVTklYLiBJbiBWTVMsCi0gICAgICAgICAgV2luZG93cywgYW5k IE9TLzIsIGl0IGluaGliaXRzIGVuZC1vZi1saW5lIHByb2Nlc3NpbmcgYW5kCi0gICAgICAgICAg Y29udmVyc2lvbiwgYW5kIHNvIHNob3VsZCBiZSB1c2VkIGZvciBiaW5hcnkgZmlsZXMgYW5kL29y IGZpbGVzCi0gICAgICAgICAgdGhhdCBhcmUgdG8gYmUgYWNjZXNzZWQgaW4gcmVjb3JkIG9yIGNo YXJhY3RlciBtb2RlIHJhdGhlciB0aGFuCi0gICAgICAgICAgbGluZSBieSBsaW5lLgotCi0gICBU aGUgdmFyaWFibGUgZm9yIHRoZSBjaGFubmVsIG51bWJlciBjYW4gYmUgYW55IGtpbmQgb2YgdmFy aWFibGU6IHRoZQotICAgXCV4IGtpbmQsIGEgbWFjcm8gbmFtZSwgb3IgYW4gYXJyYXkgZWxlbWVu dC4gQnV0IGl0IG11c3QgYmUgYSB2YXJpYWJsZSwKLSAgIG5vdCBhIG51bWJlciAtLSBDLUtlcm1p dCBhc3NpZ25zIHRoZSBjaGFubmVsIG51bWJlcjsgeW91IGNhbid0IHRlbGwgaXQKLSAgIHdoYXQg bnVtYmVyIHRvIHVzZS4KLQotICAgRXhhbXBsZToKLQotICBGSUxFIE9QRU4gXCVjIG9vZmEudHh0 ICAgICAgICAgICAgICAgICAgOyBPcGVuIG9vZmEudHh0IGZvciByZWFkaW5nLgotICBJRiBGQUlM IGV4aXQgMSBDYW4ndCBvcGVuIG9vZmEudHh0ICAgICAgOyBBbHdheXMgY2hlY2sgdG8gc2VlIGlm IGl0IHdvcmtlZC4KLSAgRUNITyBvb2ZhLnR4dDogY2hhbm5lbCA9IFwlYwotCi0gICBJZiB0aGUg ZmlsZSBvb2ZhLnR4dCBpcyBvcGVuZWQgc3VjY2Vzc2Z1bGx5LCBhIGNoYW5uZWwgbnVtYmVyIGlz Ci0gICBhc3NpZ25lZCB0byB0aGUgdmFyaWFibGUgXCVjLiBIZXJlJ3MgYW5vdGhlciBleGFtcGxl IHVzaW5nIGEgbWFjcm8gbmFtZQotICAgZm9yIHRoZSBjaGFubmVsIG51bWJlcjoKLQotICBGSUxF IE9QRU4gY2hhbm5lbCBvb2ZhLnR4dCAgICAgICAgICAgICAgOyBPcGVuIG9vZmEudHh0IGZvciBy ZWFkaW5nLgotICBJRiBTVUNDRVNTIEVDSE8gb29mYS50eHQ6IGNoYW5uZWwgPSBcbShjaGFubmVs KQotCi0gICBTd2l0Y2hlcyBjYW4gYmUgY29tYmluZWQgd2hlbiBpdCBtYWtlcyBzZW5zZSBhbmQg dGhlIHVuZGVybHlpbmcKLSAgIG9wZXJhdGluZyBzeXN0ZW0gYWxsb3dzIGl0LiBGb3IgZXhhbXBs ZSwgdG8gb3BlbiBhIGZpbGUgaW4gYmluYXJ5IG1vZGUKLSAgIGZvciByZWFkaW5nIGFuZCB3cml0 aW5nIChzb21ldGltZXMgY2FsbGVkICJ1cGRhdGUiKToKLQotICBGSUxFIE9QRU4gL1JFQUQgL1dS SVRFIC9CSU5BUlkgXCVjIGJ1ZGdldC5kYgotCi0gICBTb21lIGNvbWJpbmF0aW9ucyBtaWdodCBi ZSBhbGxvd2VkLCBvdGhlcnMgbm90LiBGb3IgZXhhbXBsZSAvUkVBRAotICAgL0FQUEVORCB3aWxs IHVzdWFsbHkgbm90IGJlIGFsbG93ZWQuIC9XUklURSAvQVBQRU5EIGlzIHRyZWF0ZWQgYXMKLSAg IC9BUFBFTkQuCi0KLSAgIEEgbWFqb3IgYWR2YW50YWdlIG9mIHRoZSBuZXcgc3lzdGVtIG92ZXIg dGhlIG9sZGVyIG9uZSBpcyB0aGF0IHlvdSBjYW4KLSAgIGhhdmUgbXVsdGlwbGUgZmlsZXMgb3Bl biBhdCBvbmNlLiBTdXBwb3NlLCBmb3IgZXhhbXBsZSwgdGhhdCB5b3Ugd2FudAotICAgdG8gb3Bl biBhbGwgdGhlIGZpbGVzIGluIGEgY2VydGFpbiBkaXJlY3RvcnkgYXQgb25jZToKLQotICAuXCVu IDo9IFxmZmlsZXMoL3Vzci9vbGdhKiwmZikgICAgICAgICAgOyBHZXQgZmlsZSBsaXN0IGludG8g YXJyYXkuCi0gIGlmICggPiBcJW4gXHYoZl9tYXgpICkgeyAgICAgICAgICAgICAgICA7IE1ha2Ug c3VyZSB0aGVyZSBhcmVuJ3QgdG9vIG1hbnkuCi0gICAgICBleGl0IDEge1x2KGRpcik6IFwlbiA9 IFRvbyBtYW55IGZpbGVzfQotICB9Ci0gIGRlY2xhcmUgXCZjW1wlbl0gICAgICAgICAgICAgICAg ICAgICAgICA7IE1ha2UgYXJyYXkgZm9yIGNoYW5uZWwgbnVtYmVycy4KLSAgZm9yIFwlaSAxIFwl biAxIHsgICAgICAgICAgICAgICAgICAgICAgIDsgTG9vcCB0byBvcGVuIGV2ZXJ5IGZpbGUuLi4K LSAgICAgIGZpbGUgb3BlbiBcJmNbXCVpXSBcJmZbXCVpXSAgICAgICAgIDsgVHJ5IHRvIG9wZW4g dGhpcyBvbmUKLSAgICAgIGlmIGZhaWwgZXhpdCAxIE9wZW4gZXJyb3I6IFwmZltcJWldIDsgQ2hl Y2sgZm9yIGZhaWx1cmUKLSAgfQotCi0gICBJZiB0aGlzIGxvb3AgY29tcGxldGVzIHN1Y2Nlc3Nm dWxseSwgdGhlIFwmY1tdIGFycmF5IHdpbGwgY29udGFpbiBcJW4KLSAgIGNoYW5uZWwgbnVtYmVy cyBvZiBvcGVuIGZpbGVzIGluIGVsZW1lbnRzIDEgdGhyb3VnaCBcJW4uCi0KLSAgIEFueSBmaWxl IHRoYXQgeW91IG9wZW4gd2l0aCBGSUxFIE9QRU4gc3RheXMgb3BlbiB1bnRpbCBLZXJtaXQgZXhp dHMsIG9yCi0gICB5b3UgY2xvc2UgaXQgZXhwbGljaXRseS4gVGhlIGNvbW1hbmQgdG8gY2xvc2Ug YSBmaWxlIGlzOgotCi0gICBGSUxFIENMT1NFIHsgQUxMLCBjaGFubmVsIH0KLSAgICAgICAgICBJ ZiBhIGNoYW5uZWwgbnVtYmVyIGlzIGdpdmVuIGFuZCB0aGUgY2hhbm5lbCByZWZlcnMgdG8gYW4g b3BlbgotICAgICAgICAgIGZpbGUsIHRoZSBmaWxlIGlzIGNsb3NlZCBhbmQgdGhlIGNoYW5uZWwg aXMgZnJlZWQgZm9yIHJldXNlOyBpZgotICAgICAgICAgIHRoZSBjaGFubmVsIGRvZXMgbm90IHJl ZmVyIHRvIGFuIG9wZW4gZmlsZSwgYW4gZXJyb3IgbWVzc2FnZSBpcwotICAgICAgICAgIHByaW50 ZWQgYW5kIHRoZSBjb21tYW5kIGZhaWxzLiBJZiBBTEwgaXMgc3BlY2lmaWVkIGluc3RlYWQgb2Yg YQotICAgICAgICAgIHNwZWNpZmljIGNoYW5uZWwsIGFsbCBmaWxlcyBvcGVuZWQgd2l0aCBGSUxF IE9QRU4gYXJlIGNsb3NlZCBhbmQKLSAgICAgICAgICBpZiBhbGwgb3BlbiBmaWxlcyB3ZXJlIGNs b3NlZCBzdWNjZXNzZnVsbHkgKGV2ZW4gaWYgbm8gZmlsZXMKLSAgICAgICAgICB3ZXJlIG9wZW4p LCB0aGUgY29tbWFuZCBzdWNjZWVkczsgaWYgYW55IG9wZW4gZmlsZSBjb3VsZCBub3QgYmUKLSAg ICAgICAgICBjbG9zZWQsIHRoZSBjb21tYW5kIGZhaWxzOyBob3dldmVyLCBhbGwgb3BlbiBmaWxl cyB0aGF0IGNvdWxkIGJlCi0gICAgICAgICAgY2xvc2VkIGFyZSBzdGlsbCBjbG9zZWQuIFN5bm9u eW06IEZDTE9TRS4KLQotICAgRklMRSBDTE9TRSBtaWdodCBmYWlsIGJlY2F1c2UsIGZvciBleGFt cGxlLCB0aGUgZGlzayBmaWxsZWQgdXAgb3IgYQotICAgcXVvdGEgd2FzIGV4Y2VlZGVkLiBFeGFt cGxlOgotCi0gIGZvcGVuIC93cml0ZSBcJWMgbmV3LnR4dCAgICAgICAgICAgICAgICA7IE9wZW4g bmV3LnR4dCBmb3Igd3JpdGluZy4KLSAgaWYgZmFpbCBleGl0IDEgICAgICAgICAgICAgICAgICAg ICAgICAgIDsgQ2hlY2sgZm9yIGVycm9yLgotICBmY2xvc2UgXCVjICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOyBDbG9zZSB0aGUgZmlsZSB3ZSBqdXN0IG9wZW5lZC4KLQotICAgVGhpcyBj cmVhdGVzIGEgMC1sZW5ndGggZmlsZSBjYWxsZWQgbmV3LnR4dC4KLQotICAgTm90ZSB0aGF0IEZJ TEUgT1BFTiAvV1JJVEUgKHdpdGhvdXQgL1JFQUQgb3IgL0FQUEVORCkgYWx3YXlzIGNyZWF0ZXMg YQotICAgbmV3IGZpbGUsIGFuZCB0aGVyZWZvcmUgZGVzdHJveXMgYW55IGZpbGUgd2l0aCB0aGUg c2FtZSBuYW1lIHRoYXQgbWlnaHQKLSAgIGFscmVhZHkgZXhpc3QgKGFzc3VtaW5nIHlvdSBoYXZl IHBlcm1pc3Npb24gdG8gZGVsZXRlIGl0KS4gVG8gYXZvaWQKLSAgIG92ZXJ3cml0aW5nIGV4aXN0 aW5nIGZpbGVzLCBzaW1wbHkgY2hlY2sgZmlyc3Q6Ci0KLSAgaWYgZXhpc3QgbmV3LnR4dCBleGl0 IDEge0ZhdGFsIC0gbmV3LnR4dCBhbHJlYWR5IGV4aXN0c30KLSAgZm9wZW4gL3dyaXRlIFwlYyBu ZXcudHh0Ci0gIGlmIGZhaWwgLi4uCi0KLSAgIFRoZSBuZXh0IHR3byBjb21tYW5kcyBnaXZlIGlu Zm9ybWF0aW9uIGFib3V0IG9wZW4gZmlsZXM6Ci0KLSAgIEZJTEUgU1RBVFVTIGNoYW5uZWwKLSAg ICAgICAgICBUZWxscyB0aGUgbmFtZSBvZiB0aGUgZmlsZSwgaWYgYW55LCBvcGVuIG9uIHRoZSBn aXZlbiBjaGFubmVsCi0gICAgICAgICAgYW5kIHRoZSBzd2l0Y2hlcyBpdCB3YXMgb3BlbmVkIHdp dGguIFRoZSByZWFkL3dyaXRlIHBvaW50ZXIgaXMKLSAgICAgICAgICBhbHNvIHNob3duOyB0aGlz IGlzIHdoZXJlIHRoZSBuZXh0IHJlYWQgb3Igd3JpdGUgd2lsbCBvY2N1cjsKLSAgICAgICAgICAi W0VPRl0iIGlzIHNob3duIGlmIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBvcGVuIGZpbGUg aXMgdGhlCi0gICAgICAgICAgZW5kIC0tIGkuZS4gdGhlIG5leHQgcmVhZCB3aWxsIGZhaWwgaWYg dGhlIGZpbGUgd2FzIG9wZW5lZCBpbgotICAgICAgICAgIC9SRUFEIG1vZGU7IHRoZSBuZXh0IHdy aXRlIHdpbGwgYWRkIG1hdGVyaWFsIHRvIHRoZSBlbmQuIFRoZQotICAgICAgICAgIGN1cnJlbnQg bGluZSBudW1iZXIgKDAtYmFzZWQpIGlzIGFsc28gc2hvd24gaWYga25vd24uIFRoZSBGSUxFCi0g ICAgICAgICAgU1RBVFVTIGNvbW1hbmQgc3VjY2VlZHMgaWYgdGhlIGNoYW5uZWwgaXMgb3Blbiwg YW5kIGZhaWxzIGlmCi0gICAgICAgICAgdGhlcmUgaXMgbm8gb3BlbiBmaWxlIG9uIHRoZSBnaXZl biBjaGFubmVsLCBvciBpZiB0aGUgY2hhbm5lbAotICAgICAgICAgIG51bWJlciBpcyBpbnZhbGlk IG9yIG91dCBvZiByYW5nZS4gU3lub255bTogRlNUQVRVUy4KLQotICAgRklMRSBMSVNUCi0gICAg ICAgICAgTGlzdHMgdGhlIGNoYW5uZWwgbnVtYmVyIGFuZCBuYW1lIG9mIGVhY2ggb3BlbiBmaWxl LCBhbG9uZyB3aXRoCi0gICAgICAgICAgaXRzIE9QRU4gbW9kZXMgKFIsIFcsIEEsIEIsIFJXLCBl dGMpIGFuZCBpdHMgY3VycmVudCByZWFkL3dyaXRlCi0gICAgICAgICAgcG9pbnRlciBvciAiW0VP Rl0iIGlmIGl0IGlzIGF0IHRoZSBlbmQuIEFsc28gdGVsbHMgdGhlIG51bWJlciBvZgotICAgICAg ICAgIGZpbGVzIGN1cnJlbnRseSBvcGVuZWQgd2l0aCBGSUxFIE9QRU4sIHBsdXMgdGhlIG1heGlt dW0gbnVtYmVyCi0gICAgICAgICAgb2Ygb3BlbiBmaWxlcyBhbGxvd2VkIGJ5IHRoZSBzeXN0ZW0g YW5kIHRoZSBtYXhpbXVtIG51bWJlcgotICAgICAgICAgIGFsbG93ZWQgZm9yIEZJTEUgT1BFTi4g U3lub255bTogRkxJU1QuCi0KLSAgIE5leHQgY29tZSB0aGUgY29tbWFuZHMgZm9yIHJlYWRpbmcg YW5kIHdyaXRpbmcgZmlsZXM6Ci0KLSAgIEZJTEUgUkVBRCBbIHN3aXRjaGVzIF0gY2hhbm5lbCBb IHZhcmlhYmxlIF0KLSAgICAgICAgICBSZWFkcyBkYXRhIGZyb20gdGhlIGZpbGUgb24gdGhlIGdp dmVuIGNoYW5uZWwgbnVtYmVyIGludG8gdGhlCi0gICAgICAgICAgdmFyaWFibGUsIGlmIG9uZSB3 YXMgZ2l2ZW47IGlmIG5vIHZhcmlhYmxlIHdhcyBnaXZlbiwgdGhlIHJlc3VsdAotICAgICAgICAg IGlzIHByaW50ZWQgb24gdGhlIHNjcmVlbi4gSU1QT1JUQU5UOiBUaGUgdmFyaWFibGUgc2hvdWxk Ci0gICAgICAgICAgbm9ybWFsbHkgYmUgYSBtYWNybyBuYW1lIHJhdGhlciB0aGFuIGEgXCV4IG9y IFwmeFtdIHZhcmlhYmxlIGlmCi0gICAgICAgICAgeW91IHdhbnQgYmFja3NsYXNoIGNoYXJhY3Rl cnMgaW4gdGhlIGZpbGUgdG8gYmUgdGFrZW4gbGl0ZXJhbGx5Ci0gICAgICAgICAgKHNlZSBwcC40 MDgtNDEyIG9mIFszODZdVXNpbmcgQy1LZXJtaXQgZm9yIGFuIGV4cGxhbmF0aW9uOyB5b3UKLSAg ICAgICAgICBjYW4gYWxzbyByZWFkIGludG8gYSBcJXggb3IgXCZ4W10gdmFyaWFibGUsIGJ1dCB0 aGVuIHlvdSBtdXN0Ci0gICAgICAgICAgcmVtZW1iZXIgdG8gcHJvdGVjdCBmdXR1cmUgcmVmZXJl bmNlcyB0byBieSBcZmNvbnRlbnRzKCkgaWYgeW91Ci0gICAgICAgICAgZG9uJ3Qgd2FudCBDLUtl cm1pdCB0byBwcm9jZXNzIGFueSBiYWNrc2xhc2hlcyBpdCBtaWdodAotICAgICAgICAgIGNvbnRh aW4pLiBUaGUgZGVzaXJlZCBhbW91bnQgb2YgZGF0YSAoYWNjb3JkaW5nIHRvIHRoZSBzd2l0Y2hl cykKLSAgICAgICAgICBpcyByZWFkIGZyb20gdGhlIGZpbGUgYXQgdGhlIGN1cnJlbnQgcmVhZC93 cml0ZSBwb2ludGVyLCBhbmQKLSAgICAgICAgICB1cG9uIGNvbXBsZXRpb24gdGhlIHJlYWQvd3Jp dGUgcG9zaXRpb24gaXMgdXBkYXRlZCB0byBmaXJzdCBieXRlCi0gICAgICAgICAgYWZ0ZXIgdGhl IGRhdGEgdGhhdCB3YXMgcmVhZCwgbm8gbWF0dGVyIHdoYXQgc3dpdGNoZXMgd2VyZQotICAgICAg ICAgIGdpdmVuLiBTeW5vbnltOiBGUkVBRC4KLQotICAgRklMRSBXUklURSBbIHN3aXRjaGVzIF0g Y2hhbm5lbCB0ZXh0Ci0gICAgICAgICAgV3JpdGVzIHRoZSBnaXZlbiB0ZXh0IHRvIHRoZSBmaWxl IG9uIHRoZSBnaXZlbiBjaGFubmVsIG51bWJlci4KLSAgICAgICAgICBUaGUgdGV4dCwgb2YgY291 cnNlLCBjYW4gYmUgbGl0ZXJhbCB0ZXh0IG9yIGEgdmFyaWFibGUsIG9yIGFueQotICAgICAgICAg IGNvbWJpbmF0aW9uLiBJZiB0aGUgdGV4dCBtaWdodCBjb250YWluIGxlYWRpbmcgb3IgdHJhaWxp bmcKLSAgICAgICAgICBzcGFjZXMsIGl0IG11c3QgYmUgZW5jbG9zZWQgaW4gYnJhY2VzIGlmIHlv dSB3YW50IHRvIHByZXNlcnZlCi0gICAgICAgICAgdGhlbS4gU3lub255bTogRldSSVRFLgotCi0g ICBCZWZvcmUgcHJvY2VlZGluZywgYSBjYXV0aW9uIGFib3V0IHRoZSBOVUwgY2hhcmFjdGVyLiBD LUtlcm1pdCBpcyBzbwotICAgbmFtZWQgYmVjYXVzZSBpdCBpcyBhIEtlcm1pdCBwcm9ncmFtIHdy aXR0ZW4gaW4gdGhlIEMgbGFuZ3VhZ2UuIEluIEMsCi0gICBjaGFyYWN0ZXIgc3RyaW5ncyBhcmUg cmVwcmVzZW50ZWQgYXMgYSBzZXF1ZW5jZSBvZiBub24tTlVMIGJ5dGVzCi0gICB0ZXJtaW5hdGVk IGJ5IGEgTlVMIGJ5dGUgKGEgYnl0ZSBpbiB3aGljaCBhbGwgYml0cyBhcmUgMCkuIFRodXMgYSBD Ci0gICBzdHJpbmcgY2FuIG5vdCBjb250YWluIE5VTCBieXRlczsgaXQgYWx3YXlzIGVuZHMgd2l0 aCB0aGUgZmlyc3QgTlVMCi0gICBieXRlLiBDLUtlcm1pdCB2YXJpYWJsZXMgYXJlIGltcGxlbWVu dGVkIGFzIEMgc3RyaW5ncyBhbmQgdGhlcmVmb3JlCi0gICBjYW4ndCBjb250YWluIE5VTCBieXRl cyBlaXRoZXIsIHNvIHRoZSBGSUxFIFJFQUQgYW5kIEZJTEUgV1JJVEUKLSAgIGNvbW1hbmRzIGRv IG5vdCBoYW5kbGUgZmlsZXMgb3Igc3RyaW5ncyB0aGF0IGNvbnRhaW4gTlVMIGJ5dGVzLCBleGNl cHQKLSAgIHdoZW4gdGhlIC9DSEFSQUNURVIgc3dpdGNoIGlzIGluY2x1ZGVkIHdpdGggdGhlIEZJ TEUgUkVBRCBvciBXUklURQotICAgY29tbWFuZCwgb3Igd2hlbiAvTFBBRDowIG9yIC9SUEFEOjAg aXMgZ2l2ZW4gd2l0aCB0aGUgRklMRSBXUklURQotICAgY29tbWFuZDsgdGhlc2Ugc3dpdGNoZXMg YXJlIGV4cGxhaW5lZCBiZWxvdy4KLQotICAgQWxzbyBub3RlIHRoYXQgS2VybWl0IGNhbiBub3Qg YmUgdXNlZCByZWFkIG9yIHdyaXRlIGJpbmFyeSBudW1iZXJzIGluCi0gICB0aGUgbWFjaGluZSdz IGludGVybmFsIGZvcm1hdCAoaW50ZWdlciBvciBmbG9hdGluZy1wb2ludCk7IGluIGdlbmVyYWws Ci0gICBudW1iZXJzIGNhbiBiZSBwcm9jZXNzZWQgb25seSB3aGVuIHJlcHJlc2VudGVkIGFzIG51 bWVyaWMgb3IKLSAgIGZsb2F0aW5nLXBvaW50IHN0cmluZ3MuCi0KLSAgIEZJTEUgUkVBRCBzd2l0 Y2hlcyBhcmU6Ci0KLSAgIC9MSU5FCi0gICAgICAgICAgU3BlY2lmaWVzIHRoYXQgYSBsaW5lIG9m IHRleHQgaXMgdG8gYmUgcmVhZC4gQSBsaW5lIGlzIGRlZmluZWQKLSAgICAgICAgICBhY2NvcmRp bmcgdG8gdGhlIHVuZGVybHlpbmcgb3BlcmF0aW5nIHN5c3RlbSdzIHRleHQtZmlsZSBmb3JtYXQu Ci0gICAgICAgICAgRm9yIGV4YW1wbGUsIGluIFVOSVggYSBsaW5lIGlzIGEgc2VxdWVuY2Ugb2Yg Y2hhcmFjdGVycyB1cCB0bwotICAgICAgICAgIGFuZCBpbmNsdWRpbmcgYSBsaW5lZmVlZCwgb3Ig dGhlIGVuZCBvZiB0aGUgZmlsZSwgd2hpY2ggZXZlcgotICAgICAgICAgIGNvbWVzIGZpcnN0LiBU aGUgbGluZSB0ZXJtaW5hdG9yIChpZiBhbnkpIGlzIHJlbW92ZWQgYmVmb3JlCi0gICAgICAgICAg YXNzaWduaW5nIHRoZSB0ZXh0IHRvIHRoZSB2YXJpYWJsZS4gSWYgbm8gc3dpdGNoZXMgYXJlIGlu Y2x1ZGVkCi0gICAgICAgICAgd2l0aCB0aGUgRklMRSBSRUFEIGNvbW1hbmQsIC9MSU5FIGlzIGFz c3VtZWQuIE5vcm1hbGx5IHRoaXMKLSAgICAgICAgICBzd2l0Y2ggc2hvdWxkIG5vdCBiZSB1c2Vk IHdpdGggZmlsZXMgb3BlbmVkIGluIC9CSU5BUlkgbW9kZSAoYnV0Ci0gICAgICAgICAgbm90aGlu ZyBwcmV2ZW50cyBpdCBlaXRoZXIpLgotCi0gICAvU0laRTpudW1iZXIKLSAgICAgICAgICBTcGVj aWZpZXMgdGhhdCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGJ5dGVzIChjaGFyYWN0ZXJzKSBpcyB0byBi ZQotICAgICAgICAgIHJlYWQuIFRoZSBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzIHJldHVybmVkIHdp bGwgYmUgbGVzcyBpZiB0aGUKLSAgICAgICAgICBlbmQgb2YgZmlsZSBpcyByZWFjaGVkIChvciBh IE5VTCBieXRlIGlzIGVuY291bnRlcmVkKS4gRm9yCi0gICAgICAgICAgZXhhbXBsZSwgaWYgYSBm aWxlIGlzIDUxNCBieXRlcyBsb25nLCBGSUxFIFJFQUQgL1NJWkU6NTEyCi0gICAgICAgICAgcmV0 dXJucyA1MTIgYnl0ZXMgdGhlIGZpcnN0IHRpbWUgYW5kIDIgYnl0ZXMgdGhlIHNlY29uZCB0aW1l LgotICAgICAgICAgIEZJTEUgUkVBRCAvU0laRSBwcm92aWRlcyBhIGtpbmQgb2YgInJlY29yZCBp L28iIGZvciBmaWxlcyB0aGF0Ci0gICAgICAgICAgZG8gbm90IG5lY2Vzc2FyaWx5IGNvbnRhaW4g bGluZXMuIFRoZSByZXN1bHRpbmcgYmxvY2sgb2YKLSAgICAgICAgICBjaGFyYWN0ZXJzIGlzIGFz c2lnbmVkIHRvIHRoZSB2YXJpYWJsZSB3aXRob3V0IGFueSBlZGl0aW5nLgotICAgICAgICAgIFN5 bm9ueW06IC9CTE9DSy4KLQotICAgL0NIQVJBQ1RFUgotICAgICAgICAgIEVxdWl2YWxlbnQgdG8g L1NJWkU6MS4gSWYgRklMRSBSRUFEIC9DSEFSIHN1Y2NlZWRzIGJ1dCB0aGUKLSAgICAgICAgICB2 YXJpYWJsZSBpcyBlbXB0eSwgdGhpcyBpbmRpY2F0ZXMgYSBOVUwgYnl0ZSB3YXMgcmVhZC4gU3lu b255bToKLSAgICAgICAgICBCWVRFLgotCi0gICBGSUxFIFdSSVRFIHN3aXRjaGVzIGFyZToKLQot ICAgL0xJTkUKLSAgICAgICAgICBTcGVjaWZpZXMgdGhhdCBhbiBhcHByb3ByaWF0ZSBsaW5lIHRl cm1pbmF0b3IgaXMgdG8gYmUgYWRkZWQgdG8KLSAgICAgICAgICB0aGUgZW5kIG9mIHRoZSB0ZXh0 LiBJZiBubyBzd2l0Y2hlcyBhcmUgaW5jbHVkZWQsIC9MSU5FIGlzCi0gICAgICAgICAgYXNzdW1l ZC4KLQotICAgL1NJWkU6bnVtYmVyCi0gICAgICAgICAgU3BlY2lmaWVzIHRoYXQgdGhlIGdpdmVu IG51bWJlciBvZiBieXRlcyAoY2hhcmFjdGVycykgaXMgdG8gYmUKLSAgICAgICAgICB3cml0dGVu LiBJZiB0aGUgZ2l2ZW4gdGV4dCBpcyBsb25nZXIgdGhhbiB0aGUgcmVxdWVzdGVkIHNpemUsIGl0 Ci0gICAgICAgICAgaXMgdHJ1bmNhdGVkOyBpZiBpcyBzaG9ydGVyLCBpdCBpcyBwYWRkZWQgYWNj b3JkaW5nIC9MUEFEIGFuZAotICAgICAgICAgIC9SUEFEIHN3aXRjaGVzLiBTeW5vbnltOiAvQkxP Q0suCi0KLSAgIC9MUEFEWzp2YWx1ZV0KLSAgICAgICAgICBJZiAvU0laRSB3YXMgZ2l2ZW4sIGJ1 dCB0aGUgdGV4dCBpcyBzaG9ydGVyIHRoYW4gdGhlIHJlcXVlc3RlZAotICAgICAgICAgIHNpemUs IHRoZSB0ZXh0IGlzIHBhZGRlZCBvbiB0aGUgbGVmdCB3aXRoIHN1ZmZpY2llbnQgY29waWVzIG9m Ci0gICAgICAgICAgdGhlIGNoYXJhY3RlciB3aG9zZSBBU0NJSSB2YWx1ZSBpcyBnaXZlbiB0byB3 cml0ZSB0aGUgZ2l2ZW4KLSAgICAgICAgICBsZW5ndGguIElmIG5vIHZhbHVlIGlzIHNwZWNpZmll ZCwgMzIgKHRoZSBjb2RlIGZvciBTcGFjZSkgaXMKLSAgICAgICAgICB1c2VkLiBUaGUgdmFsdWUg Y2FuIGFsc28gYmUgMCB0byB3cml0ZSB0aGUgaW5kaWNhdGVkIG51bWJlciBvZgotICAgICAgICAg IE5VTCBieXRlcy4gSWYgL1NJWkUgd2FzIG5vdCBnaXZlbiwgdGhpcyBzd2l0Y2ggaXMgaWdub3Jl ZC4KLQotICAgL1JQQURbOnZhbHVlXQotICAgICAgICAgIExpa2UgTFBBRCwgYnV0IHBhZHMgb24g dGhlIHJpZ2h0LgotCi0gICAvQ0hBUkFDVEVSCi0gICAgICAgICAgU3BlY2lmaWVzIHRoYXQgb25l IGNoYXJhY3RlciBzaG91bGQgYmUgd3JpdHRlbi4gSWYgdGhlIHRleHQgaXMKLSAgICAgICAgICBl bXB0eSBvciBub3QgZ2l2ZW4sIGEgTlVMIGNoYXJhY3RlciBpcyB3cml0dGVuOyBvdGhlcndpc2Ug dGhlCi0gICAgICAgICAgZmlyc3QgY2hhcmFjdGVyIG9mIHRleHQgaXMgZ2l2ZW4uIFN5bm9ueW06 IC9CWVRFLgotCi0gICAvU1RSSU5HCi0gICAgICAgICAgU3BlY2lmaWVzIHRoYXQgdGhlIHRleHQg aXMgdG8gYmUgd3JpdHRlbiBhcy1pcywgd2l0aCBubwotICAgICAgICAgIHRlcm1pbmF0b3IgYWRk ZWQuCi0KLSAgIEhlcmUncyBhbiBleGFtcGxlIGluIHdoaWNoIHdlIGNvcHkgYSB0ZXh0IGZpbGUg bGluZSBieSBsaW5lOgotCi0gIGZpbGUgb3BlbiAvcmVhZCBcJWMgb29mYS50eHQgICAgICAgICAg ICA7IE9wZW4gaW5wdXQgZmlsZQotICBpZiBmYWlsIGV4aXQgMSBDYW4ndCBvcGVuIGlucHV0IGZp bGUgICAgOyBDaGVjayB0aGF0IGl0J3Mgb3BlbgotICBmaWxlIG9wZW4gL3dyaXRlIFwlZCBuZXcu dHh0ICAgICAgICAgICAgOyBPcGVuIG91dHB1dCBmaWxlCi0gIGlmIGZhaWwgZXhpdCAxIENhbid0 IG9wZW4gb3V0cHV0IGZpbGUgICA7IENoZWNrCi0gIHdoaWxlIHRydWUgeyAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7IExvb3AgdG8gY29weSBsaW5lcwotICAgICAgZmlsZSByZWFkIC9saW5l IFwlYyBsaW5lICAgICAgICAgICAgOyBSZWFkIGEgbGluZQotICAgICAgaWYgZmFpbCBicmVhayAg ICAgICAgICAgICAgICAgICAgICAgOyBBc3N1bWUgZmFpbHVyZSA9IGVuZCBvZiBmaWxlCi0gICAg ICBmaWxlIHdyaXRlIC9saW5lIFwlZCB7XG0obGluZSl9ICAgICA7IFdyaXRlIHRoZSBsaW5lIHRv IG91dHB1dCBmaWxlCi0gICAgICBpZiBmYWlsIGV4aXQgMSBXcml0ZSBmYWlsdXJlICAgICAgICA7 IEZhaWx1cmUgaGVyZSBpcyBmYXRhbAotICB9Ci0gIGZpbGUgY2xvc2UgXCVjICAgICAgICAgICAg ICAgICAgICAgICAgICA7IENsb3NlIHRoZSB0d28gZmlsZXMKLSAgZmlsZSBjbG9zZSBcJWQKLQot ICAgTm90ZSB0aGF0IHNpbmNlIC9MSU5FIGlzIHRoZSBkZWZhdWx0IGZvciBib3RoIEZJTEUgUkVB RCBhbmQgRklMRSBXUklURSwKLSAgIGl0IGNhbiBiZSBvbWl0dGVkIGFzIGluIHRoZSBmb2xsb3dp bmcgZXhhbXBsZSwgd2hlcmUgd2UgYWxzbyB1c2UgdGhlCi0gICBzaG9ydCBuYW1lcyBmb3IgdGhl IEZJTEUgY29tbWFuZHMuCi0KLSAgZm9wZW4gL3JlYWQgXCVjIG9vZmEudHh0ICAgICAgICAgICAg ICAgIDsgT3BlbiBpbnB1dCBmaWxlCi0gIGlmIGZhaWwgZXhpdCAxIENhbid0IG9wZW4gaW5wdXQg ZmlsZSAgICA7IENoZWNrIHRoYXQgaXQncyBvcGVuCi0gIGZvcGVuIC93cml0ZSBcJWQgbmV3LnR4 dCAgICAgICAgICAgICAgICA7IE9wZW4gb3V0cHV0IGZpbGUKLSAgaWYgZmFpbCBleGl0IDEgQ2Fu J3Qgb3BlbiBvdXRwdXQgZmlsZSAgIDsgQ2hlY2sKLSAgd2hpbGUgdHJ1ZSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsgTG9vcCB0byBjb3B5IGxpbmVzCi0gICAgICBmcmVhZCBcJWMgbGlu ZSAgICAgICAgICAgICAgICAgICAgICA7IFJlYWQgYSBsaW5lCi0gICAgICBpZiBmYWlsIGJyZWFr ICAgICAgICAgICAgICAgICAgICAgICA7IEFzc3VtZSBmYWlsdXJlID0gZW5kIG9mIGZpbGUKLSAg ICAgIGZ3cml0ZSBcJWQge1xtKGxpbmUpfSAgICAgICAgICAgICAgIDsgV3JpdGUgdGhlIGxpbmUg dG8gb3V0cHV0IGZpbGUKLSAgICAgIGlmIGZhaWwgZXhpdCAxIFdyaXRlIGZhaWx1cmUgICAgICAg IDsgRmFpbHVyZSBoZXJlIGlzIGZhdGFsCi0gIH0KLSAgZmNsb3NlIFwlYyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsgQ2xvc2UgdGhlIHR3byBmaWxlcwotICBmY2xvc2UgXCVkCi0KLSAg IEhlcmUncyB0aGUgc2FtZSBleGFtcGxlIHVzaW5nICJyZWNvcmQgaS9vIiAodGhlIG9wZW4gYW5k IGNsb3NlCi0gICBzZXF1ZW5jZXMgYXJlIGFyZSBvbWl0dGVkIHNpbmNlIHRoZXkgYXJlIHRoZSBz YW1lIGFzIGFib3ZlKS4gVGhlIHJlc3VsdAotICAgaXMgdGhlIHNhbWUsIGJ1dCBleGVjdXRpb24g aXMgbXVjaCBmYXN0ZXI6Ci0KLSAgd2hpbGUgdHJ1ZSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsgTG9vcCB0byBjb3B5IGJsb2NrcwotICAgICAgZnJlYWQgL3NpemU6NTEyIFwlYyBibG9j ayAgICAgICAgICAgOyBSZWFkIGEgYmxvY2sgaW50byBcJWEKLSAgICAgIGlmIGZhaWwgYnJlYWsg ICAgICAgICAgICAgICAgICAgICAgIDsgQXNzdW1lIGZhaWx1cmUgPSBlbmQgb2YgZmlsZQotICAg ICAgZndyaXRlIC9zdHJpbmcgXCVkIHtcbShibG9jayl9ICAgICAgOyBXcml0ZSB0aGUgYmxvY2sg dG8gb3V0cHV0IGZpbGUKLSAgICAgIGlmIGZhaWwgZXhpdCAxIFdyaXRlIGZhaWx1cmUgICAgICAg IDsgRmFpbHVyZSBoZXJlIGlzIGZhdGFsCi0gIH0KLQotICAgQWx0aG91Z2ggcmVjb3JkIGkvbyBp cyBmYXN0ZXIsIGl0IHNob3VsZCBub3QgYmUgdXNlZCBpbiBsaW5lLW9yaWVudGVkCi0gICBhcHBs aWNhdGlvbnMsIHNpbmNlIGl0IHJldHVybnMgYXJiaXRyYXJ5IGNodW5rcyBvZiB0aGUgZmlsZSB0 byB5b3VyCi0gICBzY3JpcHQsIHJhdGhlciB0aGFuIGxpbmVzLiBJbiB0aGlzIGV4YW1wbGUsIEZX UklURSAvU1RSSU5HIGlzIHVzZWQKLSAgIHJhdGhlciB0aGFuIEZXUklURSAvU0laRTo1MTIgdG8g YXZvaWQgdGhlIGxhc3Qgb3V0cHV0IGJsb2NrIGJlaW5nCi0gICBwYWRkZWQgYmV5b25kIHRoZSBv cmlnaW5hbCBmaWxlJ3MgbGVuZ3RoLgotCi0gICBBIGZpbGUgY2FuIGFsc28gYmUgY29waWVkIGNo YXJhY3RlciBieSBjaGFyYWN0ZXIsIGJ1dCB0aGlzIGlzIG11Y2gKLSAgIHNsb3dlciB0aGFuIGxp bmUgaS9vIGFuZCBWRVJZIG11Y2ggc2xvd2VyIHRoYW4gYmxvY2sgaS9vOgotCi0gIHdoaWxlIHRy dWUgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IExvb3AgdG8gY29weSBibG9ja3MKLSAg ICAgIGZyZWFkIC9jaGFyIFwlYyBjICAgICAgICAgICAgICAgICAgIDsgUmVhZCBhIGNoYXJhY3Rl ciBpbnRvIGMKLSAgICAgIGlmIGZhaWwgYnJlYWsgICAgICAgICAgICAgICAgICAgICAgIDsgQXNz dW1lIGZhaWx1cmUgPSBlbmQgb2YgZmlsZQotICAgICAgZndyaXRlIC9jaGFyIFwlZCB7XG0oYyl9 ICAgICAgICAgICAgOyBXcml0ZSBjaGFyYWN0ZXIgdG8gb3V0cHV0IGZpbGUKLSAgICAgIGlmIGZh aWwgZXhpdCAxIFdyaXRlIGZhaWx1cmUgICAgICAgIDsgRmFpbHVyZSBpcyBmYXRhbAotICB9Ci0K LSAgIEFsdGhvdWdoIGNoYXJhY3RlciBpL28gaXMgc2xvdywgaXQgaXMgdGhlIG9ubHkgd2F5IHRv IHByb2Nlc3MgZmlsZXMKLSAgIHRoYXQgY29udGFpbiBOVUwgY2hhcmFjdGVycyAoaS5lLiBieXRl cyBjb21wb3NlZCBvZiBvbmx5IHplcm8gYml0cykuIEluCi0gICB0aGUgZXhhbXBsZSBhYm92ZSwg d2hlbiAiZnJlYWQgL2NoYXIgXCVjIGMiIHJldHVybnMgYSBOVUwsIHRoZSBjCi0gICB2YXJpYWJs ZSBpcyBlbXB0eS4gQnV0IHNpbmNlIHRoZSBGUkVBRCAvQ0hBUiBjb21tYW5kIGRpZCBub3QgZmFp bCwgd2UKLSAgIGtub3cgdGhlIHJlc3VsdCB3YXMgcmVhbGx5IGEgTlVMLiBGV1JJVEUgL0NIQVIs IHdoZW4gZ2l2ZW4gYW4gZW1wdHkKLSAgIHZhcmlhYmxlIChvciBubyB2YXJpYWJsZSBhdCBhbGwp IHdyaXRlcyBhIE5VTC4gVGh1cyB0aGUgbG9vcCBhYm92ZSB3aWxsCi0gICBjb3B5IGFueSBmaWxl IGF0IGFsbCAodmVyeSBzbG93bHkpLiBJbiBub24tY29weWluZyBhcHBsaWNhdGlvbnMsIE5VTHMK LSAgIGFyZSBkZXRlY3RlZCBsaWtlIHRoaXM6Ci0KLSAgZnJlYWQgL2NoYXIgXCVjIGMKLSAgaWYg ZmFpbCAoZG8gc29tZXRoaW5nKQotICBpZiBub3QgZGVmIGMgKGEgTlVMIGJ5dGUgd2FzIHJlYWQp Ci0KLSAgIEZpbmFsbHkgc29tZSBhZHZhbmNlZCBmaWxlIG9wZXJhdGlvbnM6Ci0KLSAgIEZJTEUg RkxVU0ggY2hhbm5lbAotICAgICAgICAgIEZvciBvdXRwdXQgZmlsZXMgb25seTogY29tbWl0cyBh bGwgcHJldmlvdXMgd3JpdGVzIHRvIGRpc2ssIGluCi0gICAgICAgICAgY2FzZSB0aGUgY29tcHV0 ZXIgd2FzIGJ1ZmZlcmluZyB0aGVtLiBTeW5vbnltOiBGRkxVU0guCi0KLSAgIEZJTEUgQ09VTlQg WyB7IC9CWVRFUywgL0xJTkVTLCAvTElTVCwgL05PTElTVCB9IF0gY2hhbm5lbAotICAgICAgICAg IEJ5IGRlZmF1bHQsIG9yIGlmIHRoZSAvQllURVMgc3dpdGNoIGlzIGdpdmVuLCBjb3VudHMgdGhl IGJ5dGVzCi0gICAgICAgICAgaW4gdGhlIGZpbGUsIGlmIGFueSwgb3BlbiBvbiB0aGUgZ2l2ZW4g Y2hhbm5lbC4gSWYgdGhlIC9MSU5FUwotICAgICAgICAgIHN3aXRjaCBpcyBnaXZlbiwgY291bnRz IGxpbmVzIGluIHRoZSBmaWxlLiBJZiB0aGUgL0xJU1Qgc3dpdGNoCi0gICAgICAgICAgaXMgZ2l2 ZW4sIHRoZSByZXN1bHQgaXMgcHJpbnRlZC4gSWYgdGhlIC9OT0xJU1Qgc3dpdGNoIGlzIGdpdmVu LAotICAgICAgICAgIHRoZSByZXN1bHQgaXMgbm90IHByaW50ZWQuIC9RVUlFVCBpcyBhIHN5bm9u eW0gZm9yIC9OT0xJU1QuIElmCi0gICAgICAgICAgbmVpdGhlciAvTElTVCBub3IgL05PTElTVCBp cyBnaXZlbiwgdGhlIHJlc3VsdCBpcyBwcmludGVkIGlmIHRoZQotICAgICAgICAgIGNvbW1hbmQg aXMgZ2l2ZW4gYXQgdG9wIGxldmVsLCBpLmUuIG5vdCBmcm9tIGEgY29tbWFuZCBmaWxlIG9yCi0g ICAgICAgICAgbWFjcm8uIEluIGFsbCBjYXNlcywgdGhlIHJlc3VsdCBvZiB0aGUgbW9zdCByZWNl bnQgRklMRSBDT1VOVAotICAgICAgICAgIGNvbW1hbmQgaXMgc3RvcmVkIGluIHRoZSB2YXJpYWJs ZSBcdihmX2NvdW50KS4gTm90ZSB0aGF0IEZJTEUKLSAgICAgICAgICBDT1VOVCAvTElORSB3b3Jr cyAoYW5kIGNhbiBvbmx5IHdvcmspIGJ5IHJlYWRpbmcgdGhlIGVudGlyZQotICAgICAgICAgIGZp bGU7IGV4cGVjdCBpdCB0byB0YWtlIHNvbWUgdGltZSBpZiB0aGUgZmlsZSBpcyBsYXJnZS4gU3lu b255bToKLSAgICAgICAgICBGQ09VTlQuCi0KLSAgIEZJTEUgUkVXSU5EIGNoYW5uZWwKLSAgICAg ICAgICBNb3ZlcyB0aGUgcmVhZC93cml0ZSBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhl IGZpbGUuCi0gICAgICAgICAgRXF1aXZhbGVudCB0byBGSUxFIFNFRUsgY2hhbm5lbCAwLiBTeW5v bnltOiBGUkVXSU5ELgotCi0gICBGSUxFIFNFRUsgWyBzd2l0Y2hlcyBdIGNoYW5uZWwgeyBbeyss LX1dbnVtYmVyLCBMQVNULCBFT0YgfQotICAgICAgICAgIE1vdmVzIHRoZSByZWFkL3dyaXRlIHBv aW50ZXIgZm9yIHRoZSBmaWxlIG9uIHRoaXMgY2hhbm5lbCB0byB0aGUKLSAgICAgICAgICBnaXZl biBwb3NpdGlvbiwgd2hpY2ggbWF5IGJlIGEgYnl0ZSAoY2hhcmFjdGVyKSBudW1iZXIgb3IgYSBs aW5lCi0gICAgICAgICAgbnVtYmVyLCBleHByZXNzZWQgaW4gZWl0aGVyIGFic29sdXRlIG9yIHJl bGF0aXZlIHRlcm1zLgotICAgICAgICAgIFN3aXRjaGVzOgotCi0gICAgICAgIC9CWVRFCi0gICAg ICAgICAgICAgICAgVGhlIG51bWJlciBnaXZlbiBpcyBhIGJ5dGUgbnVtYmVyLiBTeW5vbnltOiAv Q0hBUkFDVEVSLgotCi0gICAgICAgIC9MSU5FCi0gICAgICAgICAgICAgICAgVGhlIG51bWJlciBn aXZlbiBpcyBhIGxpbmUgbnVtYmVyLgotCi0gICAgICAgIC9BQlNPTFVURQotICAgICAgICAgICAg ICAgIFRoZSBudW1iZXIgZ2l2ZW4gaXMgYWJzb2x1dGUuCi0KLSAgICAgICAgL1JFTEFUSVZFCi0g ICAgICAgICAgICAgICAgVGhlIG51bWJlciBnaXZlbiBpcyByZWxhdGl2ZSB0byB0aGUgY3VycmVu dCBwb3NpdGlvbi4KLQotICAgICAgICAgIEJ5IGRlZmF1bHQsIG9yIGlmIHRoZSAvQllURSBzd2l0 Y2ggaXMgZ2l2ZW4sIHRoZSBudW1iZXIgaXMgYQotICAgICAgICAgIGJ5dGUgbnVtYmVyICgwID0g Zmlyc3QgYnl0ZSkuIElmIC9MSU5FIGlzIGdpdmVuLCB0aGUgbnVtYmVyIGlzIGEKLSAgICAgICAg ICBsaW5lIG51bWJlciAoMCA9IGZpcnN0IGxpbmUpLiBFT0YgbWVhbnMgdG8gbW92ZSB0byB0aGUg ZW5kIG9mCi0gICAgICAgICAgdGhlIGZpbGUuIExBU1QgbWVhbnMgdG8gbW92ZSB0byB0aGUgbGFz dCBsaW5lIG9yIGNoYXJhY3RlciBvZgotICAgICAgICAgIHRoZSBmaWxlLCBkZXBlbmRpbmcgb24g d2hldGhlciBpdCdzIGEgbGluZSBvciBjaGFyYWN0ZXIgc2Vlay4KLQotICAgICAgICAgIElmIG5l aXRoZXIgdGhlIC9SRUxBVElWRSBub3IgdGhlIC9BQlNPTFVURSBzd2l0Y2ggaXMgZ2l2ZW4sIHRo ZW4KLSAgICAgICAgICBpZiBhIHNpZ25lZCBudW1iZXIgaXMgZ2l2ZW4sIHRoZSBtb3Rpb24gaXMg cmVsYXRpdmUgdG8gdGhlCi0gICAgICAgICAgY3VycmVudCBwb3NpdGlvbi4gQW4gZXhwcmVzc2lv biB0aGF0IGV2YWx1YXRlcyB0byBhIG5lZ2F0aXZlCi0gICAgICAgICAgbnVtYmVyIGlzIG5vdCBj b25zaWRlcmVkIHNpZ25lZCBmb3IgdGhpcyBwdXJwb3NlOyB0aGF0IGlzLCBhCi0gICAgICAgICAg c2lnbiAoKyBvciAtKSBtdXN0IGJlIGluY2x1ZGVkIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2Yg dGhlCi0gICAgICAgICAgbnVtYmVyIGluIHRoZSBjb21tYW5kIGl0c2VsZiB0byBmb3JjZSBhIHJl bGF0aXZlIHNlZWsgKGluIHRoZQotICAgICAgICAgIGFic2VuY2Ugb2YgL1JFTEFUSVZFIG9yIC9B QlNPTFVURSkuCi0KLSAgICAgICAgICBJZiB0aGUgbnVtYmVyIGhhcyBubyBzaWduLCBvciBpZiB0 aGUgL0FCU09MVVRFIHN3aXRjaCBpcyBnaXZlbiwKLSAgICAgICAgICB0aGUgbnVtYmVyIHJlcHJl c2VudHMgYW4gYWJzb2x1dGUgcG9zaXRpb24gKHJlbGF0aXZlIHRvIHRoZQotICAgICAgICAgIGJl Z2lubmluZyBvZiB0aGUgZmlsZSkuIFN1YnNlcXVlbnQgRklMRSBSRUFEcyBvciBXUklURXMgd2ls bAotICAgICAgICAgIHRha2UgcGxhY2UgYXQgdGhlIG5ldyBwb3NpdGlvbi4KLQotICAgICAgICAg IElmIHRoZSByZWFkL3dyaXRlIHBvaW50ZXIgaXMgcGxhY2VkIGFmdGVyIHRoZSBlbmQgb2YgdGhl IGZpbGUsIGEKLSAgICAgICAgICBzdWJzZXF1ZW50IEZJTEUgUkVBRCB3aWxsIGZhaWwsIGJ1dCBh IEZJTEUgV1JJVEUgd2lsbCBzdWNjZWVkCi0gICAgICAgICAgKHBvc3NpYmx5IGNyZWF0aW5nIGEg ZmlsZSB3aXRoICJob2xlcyIpLiBJZiBhIEZJTEUgU0VFSyAvQllURQotICAgICAgICAgIGNvbW1h bmQgaXMgZ2l2ZW4sIHRoZSBjdXJyZW50IGxpbmUgYmVjb21lcyB1bmtub3duICh1bmxlc3MgdGhl Ci0gICAgICAgICAgcG9zaXRpb24gaXMgMCkgYW5kIHN1YnNlcXVlbnQgRklMRSBTRUVLIC9SRUxB VElWRSAvTElORSBjb21tYW5kcwotICAgICAgICAgIHdpbGwgZmFpbCB1bnRpbCB0aGUgbmV4dCBu b24tcmVsYXRpdmUgRklMRSBTRUVLIC9MSU5FIGNvbW1hbmQgaXMKLSAgICAgICAgICBnaXZlbi4g U3lub255bTogRlNFRUsuCi0KLSAgIEFuIGFic29sdXRlIEZJTEUgU0VFSyB0byBhIG5lZ2F0aXZl IHBvc2l0aW9uIGZhaWxzIHNpbGVudGx5LCBhcyBkb2VzIGEKLSAgIHJlbGF0aXZlIHNlZWsgdG8g YSBwb3NpdGlvbiBiZWZvcmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4KLQotICAgQSBjYXV0 aW9uIGFib3V0IHJlbGF0aXZlIFNFRUtzOiByZW1lbWJlciB0aGF0IHRoZSBudW1iZXIgaXMgcmVs YXRpdmUgdG8KLSAgIHRoZSBjdXJyZW50IHBvc2l0aW9uLiBXaGVuZXZlciB5b3UgcmVhZCBvciB3 cml0ZSwgdGhpcyBjaGFuZ2VzIHRoZQotICAgcG9zaXRpb24uIEluIGVhY2ggb2YgdGhlIGZvbGxv d2luZyBleGFtcGxlcywgYXNzdW1lIHRoZSBmaWxlIG9wZW4gb24KLSAgIGNoYW5uZWwgXCVjIGlz IHBvc2l0aW9uZWQgYXQgbGluZSBuICh0aGUgRlJFQUQgdGFyZ2V0IHZhcmlhYmxlIGlzCi0gICBv bWl0dGVkIGZvciBsYWNrIG9mIHNwYWNlKToKLQotICB7IEZSRUFEIFwlYywgRlNFRUsgL0xJTkUg XCVjIC0xLCBGUkVBRCBcJWMgfSAgPC0tIFJlYWRzIGxpbmUgbiB0d2ljZQotICB7IEZSRUFEIFwl YywgRlNFRUsgL0xJTkUgXCVjICswLCBGUkVBRCBcJWMgfSAgPC0tIFJlYWRzIGxpbmVzIG4gYW5k IG4rMQotICB7IEZSRUFEIFwlYywgRlNFRUsgL0xJTkUgXCVjICsxLCBGUkVBRCBcJWMgfSAgPC0t IFJlYWRzIGxpbmVzIG4gYW5kIG4rMgotICB7IEZSRUFEIFwlYywgRlNFRUsgL0xJTkUgXCVjIC0y LCBGUkVBRCBcJWMgfSAgPC0tIFJlYWRzIGxpbmVzIG4gYW5kIG4tMQotICB7IEZSRUFEIFwlYywg RlNFRUsgL0xJTkUgXCVjIC0zLCBGUkVBRCBcJWMgfSAgPC0tIFJlYWRzIGxpbmVzIG4gYW5kIG4t MgotCi0gICBBbm90aGVyIGNhdXRpb246IFVzaW5nIEZTRUVLIGFuZCBGUkVBRCAvU0laRSB0byBy ZXBlYXRlZGx5IHJlYWQgdGhlCi0gICBzYW1lIGRpc2sgYmxvY2sgKGUuZy4gd2hlbiBzYW1wbGlu ZyBhIGRhdGFiYXNlIHJlY29yZCB0aGF0IGlzCi0gICBmcmVxdWVudGx5IHVwZGF0ZWQpIG1pZ2h0 IG5vdCBnaXZlIHlvdSB1cGRhdGVkIGRpc2sgYmxvY2tzIGR1ZSB0byB0aGUKLSAgIGludGVybmFs IGJ1ZmZlcmluZyBhbmQgY2FjaGluZyBvZiB0aGUgQyBsaWJyYXJ5ICh0aGlzIHByb2JhYmx5IHZh cmllcwotICAgZnJvbSBvbmUgcGxhdGZvcm0vY29tcGlsZXIgY29tYmluYXRpb24gdG8gYW5vdGhl cikuIElmIG5lY2Vzc2FyeSB5b3UKLSAgIGNhbiBmb3JjZSBhIGZyZXNoIGRpc2sgcmVhZCB3aXRo IGEgY2xvc2Uvb3BlbiBzZXF1ZW5jZToKLQotICBGQ0xPUyBcJWMKLSAgRk9QRU4gXCVjIHNhbWVm aWxlbmFtZQotICBGU0VFSyBcJWMgc2FtZXNwb3QKLSAgRlJFQUQgL1NJWkU6aG93bWFueWJ5dGVz IFwlYyB2YXJpYWJsZQotCi0xLjIyLjMuIEZJTEUgQ29tbWFuZCBFeGFtcGxlcwotCi0gICBUbyBy ZWFkIHRoZSBsYXN0IDEwIGxpbmVzIG9mIGEgdGV4dCBmaWxlIGludG8gYW4gYXJyYXk6Ci0KLSAg Zm9wZW4gL3JlYWQgXCVjIG9vZmEudHh0ICAgICAgICAgICAgICAgIDsgT3BlbiB0aGUgZmlsZQot ICBpZiBmYWlsIGV4aXQgMSBDYW4ndCBvcGVuIG9vZmEudHh0ICAgICAgOyBBbHdheXMgY2hlY2sg Zm9yIGZhaWx1cmUKLSAgZGNsIFwmYVsxMF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsg RGVjbGFyZSBhIDEwLWVsZW1lbnQgYXJyYXkKLSAgZmNvdW50IC9saW5lIFwlYyAgICAgICAgICAg ICAgICAgICAgICAgIDsgQ291bnQgbGluZXMgaW4gdGhlIGZpbGUKLSAgZnNlZWsgL2xpbmUgXCVj IFx2KGZfY291bnQpLTEwICAgICAgICAgIDsgU2VlayB0byAxMCBsaW5lcyBmcm9tIHRoZSBlbmQK LSAgaWYgZmFpbCBleGl0IDEgQ2FuJ3Qgc2VlayAgICAgICAgICAgICAgIDsgQ2hlY2sgZm9yIGZh aWx1cmUKLSAgZm9yIFwlaSAxIDEwIDEgeyBmcmVhZCBcJWMgXCZhW1wlaV0gfSAgIDsgUmVhZCB0 aGUgbGFzdCAxMCBsaW5lcwotICBmY2xvc2UgXCVjICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOyBDbG9zZSB0aGUgZmlsZQotCi0gICBOb3RlIHRoYXQgYmxhbmsgbGluZXMgc2hvdyB1cCBh cyBlbXB0eSAodW5kZWZpbmVkKSBhcnJheSBlbGVtZW50cywgZm9yCi0gICBleGFtcGxlIGlmIHlv dSBnaXZlIGEgInNob3cgYXJyYXkgYSIgY29tbWFuZCBhdCB0aGlzIHBvaW50LiBUaGlzIGlzCi0g ICBub3JtYWwuIFlvdSBjYW4gc3RpbGwgdXNlIHRoZXNlIGVsZW1lbnRzOyBlLmcuOgotCi0gIGZv ciBcJWkgMSAxMCAxIHsgZWNobyBcJWkuIFwmYVtcJWldIH0gICA7IERpc3BsYXkgdGhlIDEwIGxp bmVzCi0KLSAgIEhlcmUgaXMgaG93IHRvIHJlYWQgdGhlIGxhc3QgbGluZSBvZiBhIGZpbGUgKGFs cmVhZHkgb3BlbiBvbiBjaGFubmVsCi0gICBcJWMpOgotCi0gIGZzZWVrIC9saW5lIFwlYyBsYXN0 ICAgICAgICAgICAgICAgICAgICA7IFNlZWsgZGlyZWN0bHkgdG8gbGFzdCBsaW5lCi0KLSAgIEFs dGVybmF0aXZlbHk6Ci0KLSAgZnNlZWsgL2xpbmUgXCVjIGVvZiAgICAgICAgICAgICAgICAgICAg IDsgU2VlayB0byBlbmQgb2YgZmlsZQotICBmc2VlayAvbGluZSBcJWMgLTEgICAgICAgICAgICAg ICAgICAgICAgOyBTZWVrIHRvIGJlZ2lubmluZyBvZiBsYXN0IGxpbmUKLQotICAgQWx0ZXJuYXRp dmVseToKLQotICBmY291bnQgL2xpbmUgXCVjICAgICAgICAgICAgICAgICAgICAgICAgOyBDb3Vu dCB0aGUgZmlsZSdzIGxpbmVzCi0gIGZzZWVrIC9saW5lIFwlYyBcdihmX2NvdW50KS0xICAgICAg ICAgICA7IFNlZWsgdG8gbGFzdCBsaW5lCi0gIGZyZWFkIFwlYyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7IFJlYWQgaXQKLQotICAgVG8gcmVhZCBldmVyeSBvdGhlciBsaW5lIGZyb20g dGhlIGZpbGUgKHVzaW5nIHJlbGF0aXZlIFNFRUspLCBza2lwcGluZwotICAgdGhlIGZpcnN0IGxp bmU6Ci0KLSAgZm9wZW4gL3JlYWQgXCVjIG9vZmEudHh0ICAgICAgICAgICAgICAgIDsgT3BlbiB0 aGUgZmlsZQotICB3aGlsZSAoIHN1Y2Nlc3MgKSB7ICAgICAgICAgICAgICAgICAgICAgOyBMb29w IHRocm91Z2ggbGluZXMKLSAgICAgIGZzZWVrIC9saW5lIFwlYyArMSAgICAgICAgICAgICAgICAg IDsgU2tpcCBhIGxpbmUKLSAgICAgIGlmIHN1Y2Nlc3MgZnJlYWQgXCVjICAgICAgICAgICAgICAg IDsgUmVhZCAmIGRpc3BsYXkgYSBsaW5lCi0gIH0KLSAgZmNsb3NlIFwlYyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsgQ2xvc2UgdGhlIGZpbGUKLQotICAgSGVyZSBpcyBob3cgdG8gcmVh ZCB0aGUgbGluZXMgb2YgYSBmaWxlIGluIHJldmVyc2Ugb3JkZXI6Ci0KLSAgZm9wZW4gL3JlYWQg XCVjIG9vZmEudHh0ICAgICAgICAgICAgICAgIDsgT3BlbgotICBpZiBmYWlsIGV4aXQgMSAgICAg ICAgICAgICAgICAgICAgICAgICAgOyBDaGVjawotICBmc2VlayAvbGluZSBcJWMgbGFzdCAgICAg ICAgICAgICAgICAgICAgOyBTZWVrIHRvIGxhc3QgbGluZQotICB3aGlsZSBzdWNjZXNzIHsgICAg ICAgICAgICAgICAgICAgICAgICAgOyBMb29wCi0gICAgICBmcmVhZCBcJWMgICAgICAgICAgICAg ICAgICAgICAgICAgICA7IFJlYWQgbGluZQotICAgICAgZnNlZWsgL2xpbmUgXCVjIC0yICAgICAg ICAgICAgICAgICAgOyBTZWVrIGJhY2t3YXJkcyB0d28gbGluZXMKLSAgfQotICBmY2xvc2UgXCVj ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBDbG9zZSB0aGUgZmlsZQotCi0gICBUaGUg bG9vcCB3b3JrcyBiZWNhdXNlIGEgcmVsYXRpdmUgU0VFSyBvdXRzaWRlIHRoZSBmaWxlIGZhaWxz LgotCi0gICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBibG9jayBpL28gdG8gbWFuYWdlIHJh bmRvbS1hY2Nlc3MgZmlsZXMgd2l0aAotICAgZml4ZWQtbGVuZ3RoIHJlY29yZHMgKGFzIGxvbmcg YXMgdGhleSBkb24ndCBjb250YWluIE5VTCBjaGFyYWN0ZXJzKS4KLSAgIFN1cHBvc2UsIGZvciBl eGFtcGxlLCB5b3UgaGF2ZSBhIGZpbGUgb2YgImNhcmQgaW1hZ2UiIHJlY29yZHMgd2l0aAotICAg Zml4ZWQtZmllbGQgaW5mb3JtYXRpb24gYWJvdXQgY3VzdG9tZXJzLCBzdWNoIGFzOgotCi0gIE5h bWU6ICAgICBDb2x1bW5zICAxLTMyICAoY29sdW1uIG51bWJlcnMgYXJlIDEtYmFzZWQpCi0gIEFk ZHJlc3M6ICBDb2x1bW5zIDMzLTcyCi0gIEJhbGFuY2U6ICBDb2x1bW5zIDczLTgwCi0KLSAgIFRo ZSByZWNvcmRzIGFyZSBpbmRleGVkIGJ5IGN1c3RvbWVyIG51bWJlciwgc3RhcnRpbmcgd2l0aCAw LiBUaGVyZSBhcmUKLSAgIG5vIGxpbmUgdGVybWluYXRvcnMgc2VwYXJhdGluZyB0aGVtLiBUaGVy ZWZvcmUgdGhlIHJlY29yZCBmb3IgY3VzdG9tZXIKLSAgIG51bWJlciBuIHN0YXJ0cyBhdCBwb3Np dGlvbiBueCA4MCAoXCVuKjgwKS4KLQotICAgTm93IHN1cHBvc2Ugd2UgcmVjZWl2ZWQgYSBwYXlt ZW50IGZyb20gY3VzdG9tZXIgbnVtYmVyIDE3MyBhbmQgd2FudCB0bwotICAgdXBkYXRlIHRoZSBi YWxhbmNlOgotCi0gIC5cJW4gPSAxNzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBD dXN0b21lciAocmVjb3JkKSBudW1iZXIKLSAgLlwlYSA9IDEyLjcyICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7IEFtb3VudAotICBmb3BlbiAvcmVhZCAvd3JpdGUgXCVjIGN1c3RvbWVyLmRi ICAgICAgIDsgT3BlbiB0aGUgZmlsZQotICBpZiBmYWlsIHN0b3AgMSBPUEVOIEZBSUxFRDogXGZf ZXJybXNnKCkgIDsgQ2hlY2sKLSAgZnNlZWsgL2J5dGUgXCVjIDgwKlwlbiAgICAgICAgICAgICAg ICAgICA7IFNlZWsgdG8gcmVjb3JkCi0gIGZyZWFkIC9zaXplOjgwIFwlYyByICAgICAgICAgICAg ICAgICAgICAgOyBSZWFkIHRoZSByZWNvcmQKLSAgaWYgZmFpbCBzdG9wIDEgUkVBRCBGQUlMRUQ6 IFxmX2Vycm1zZygpICA7IENoZWNrIChJTVBPUlRBTlQpCi0gIC5cJWIgOj0gXGZyaWdodChcbShy KSw4KSAgICAgICAgICAgICAgICAgOyBFeHRyYWN0IHRoZSBiYWxhbmNlCi0gIC5cJWIgOj0gXGZm cGFkZChcJWIsXCVhLDIpICAgICAgICAgICAgICAgOyBBZGQgdGhlIG5ldyBwYXltZW50Ci0gIGlm IGZhaWwgc3RvcCAxIEFSSVRITUVUSUMgRVJST1I6IFwlYi9cJWEgOyBDYXRjaCBiYWQgcmVjb3Jk cwotICAuciA6PSB7XGZsZWZ0KFxtKHIpLDcyKVxmbHBhZChcJWIsOCl9ICAgIDsgVXBkYXRlIHRo ZSByZWNvcmQKLSAgZnNlZWsgL2J5dGUgXCVjIDgwKlwlbiAgICAgICAgICAgICAgICAgICA7IFJl cG9zaXRpb24gdG8gc2FtZSBzcG90Ci0gIGZ3cml0ZSAvc2l6ZTo4MCBcJWMge1xtKHIpfSAgICAg ICAgICAgICAgOyBSZXBsYWNlIHRoZSByZWNvcmQKLSAgaWYgZmFpbCBzdG9wIDEgV1JJVEUgRkFJ TEVEOiBcZl9lcnJtc2coKSA7IENoZWNrCi0gIGZjbG9zZSBcJWMgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOyBDbG9zZSB0aGUgZmlsZQotCi0gICBSRU1FTUJFUjogVXNpbmcgRklMRSBT RUVLIHRvIG1vdmUgYmV5b25kIHRoZSBlbmQgb2YgZmlsZSBjYW4gcmVzdWx0IGluCi0gICBhIGZp bGUgd2l0aCBob2xlcyB3aGVuIHdyaXRpbmc7IHdoZW4gcmVhZGluZywgYW4gZW5kLW9mLWZpbGUg ZXJyb3Igd2lsbAotICAgb2NjdXIgLS0gYmUgc3VyZSB0byBjaGVjayBmb3IgaXQuCi0KLTEuMjIu NC4gQ2hhbm5lbCBOdW1iZXJzCi0KLSAgIEMtS2VybWl0J3MgY2hhbm5lbCBudW1iZXJzIGFyZSBp bnRlZ2VycyBmcm9tIDAgdG8gc29tZQotICAgcGxhdGZvcm0tZGVwZW5kZW50IGxpbWl0LCBzdWNo IGFzIDQ2IG9yIDE5ODUgKHRoZSB2YWx1ZSBvZiBcdihmX21heCkpLgotICAgVGhpcyBpcyB0aGUg bGltaXQgcGxhY2VkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uIHRoZSBudW1iZXIgb2YgZmls ZXMKLSAgIHRoYXQgbWF5IGJlIG9wZW5lZCBieSBvbmUgcHJvY2VzcyBvciB1c2VyIG9yIGpvYiwg bWludXMgdGhlIHN0YW5kYXJkCi0gICBpbnB1dCwgb3V0cHV0LCBhbmQgZXJyb3IgZmlsZXMsIGFu ZCBtaW51cyB0aGUgbnVtYmVyIG9mIGZpbGVzIHJlc2VydmVkCi0gICBieSBDLUtlcm1pdCBmb3Ig bG9ncywgT1BFTiBSRUFEIGFuZCBXUklURSwgYW5kIGZpbGUgdHJhbnNmZXIgKGFuZCBtYXliZQot ICAgc29tZSBjb21tYW5kIGZpbGVzIC0tIHRoZSBcdihmX21heCkgbnVtYmVyIGNhbid0IGJlIGV4 YWN0KS4KLQotICAgQWx0aG91Z2ggeW91IG11c3QgaW5jbHVkZSBhIHZhcmlhYmxlIGluIHRoZSBG SUxFIE9QRU4gY29tbWFuZCwgdG8gd2hpY2gKLSAgIHRoZSBjaGFubmVsIG51bWJlciBpcyBhc3Np Z25lZCwgeW91IGRvbid0IGhhdmUgdG8gdXNlIGEgdmFyaWFibGUgaW4gdGhlCi0gICBvdGhlciBG SUxFIGNvbW1hbmRzIGlmIHlvdSBrbm93IHdoYXQgdGhlIG51bWJlciBpcyAtLSB5b3UgY2FuIGp1 c3QgcHV0Ci0gICB0aGUgbnVtYmVyLiBUaGlzIHNhdmVzIHlvdSBhIGZldyBrZXlzdHJva2VzIHdo ZW4gdHlwaW5nIGNvbW1hbmRzIGF0IHRoZQotICAgcHJvbXB0OgotCi0gIGZvcGVuIFwlYyBvb2Zh LnR4dAotICBmbGlzdAotICAwLiAvdXNyL29sZ2Eub29mYS50eHQgKFIpIDAKLQotICAgVGhpcyB0 ZWxscyB0aGUgY2hhbm5lbCBudW1iZXIgaXMgMCAodGhlIG51bWJlciBvbiB0aGUgbGVmdCBpcyB0 aGUKLSAgIGNoYW5uZWwgZmlsZSdzIGNoYW5uZWwgbnVtYmVyKS4gT2YgY291cnNlIHlvdSBjYW4g YWxzbyBmaW5kIGl0IGJ5Ci0gICBlY2hvaW5nIHRoZSB2YXJpYWJsZToKLQotICBlY2hvIFwlYwot ICAwCi0KLSAgIE9yIHdpdGggImZzdGF0dXMgXCVjIi4gTm93IHlvdSBjYW4gdHlwZSBjb21tYW5k cyBsaWtlOgotCi0gIGZyZWFkIDAKLQotICAgdG8gcmVhZCBhIGxpbmUgZnJvbSB0aGUgZmlsZS4g T2J2aW91c2x5LCBob3dldmVyLCB1c2luZyBkaWdpdHMgcmF0aGVyCi0gICB0aGFuIGEgdmFyaWFi bGUgZm9yIHRoZSBjaGFubmVsIG51bWJlciB3b3VsZCBiZSBwb29yIHByYWN0aWNlIGluIGEKLSAg IHNjcmlwdC4KLQotICAgSWYgaW4gY29tbWFuZHMgbGlrZToKLQotICBmcmVhZCBcJWMgXCVhCi0K LSAgIHlvdSBoYXZlIHRyb3VibGUgcmVtZW1iZXJpbmcgd2hpY2ggdmFyaWFibGUgaXMgd2hpY2gs IG5vdGUgdGhhdCB0aGUKLSAgIGNoYW5uZWwgbnVtYmVyIGlzLCBpbmRlZWQsIGEgbnVtYmVyLiBB bnl3aGVyZSBDLUtlcm1pdCBhY2NlcHRzIGEgbnVtYmVyCi0gICBpdCBjYW4gYWxzbyBhY2NlcHQg YW4gZXhwcmVzc2lvbiwgc28geW91IGNhbiBwdXQgcGFyZW50aGVzZXMgYXJvdW5kIHRoZQotICAg Y2hhbm5lbCBudW1iZXIgdG8gcmVtaW5kIHlvdSBpdCdzIHRoZSBjaGFubmVsIG51bWJlciBhbmQg bm90IHRoZQotICAgdmFyaWFibGUgaW50byB3aGljaCBkYXRhIGlzIHRvIGJlIHJlYWQ6Ci0KLSAg ZnJlYWQgKFwlYykgXCVhCi0KLSAgIE5vcm1hbGx5IGNoYW5uZWwgbnVtYmVycyBhcmUgYXNzaWdu ZWQgc2VxdWVudGlhbGx5IGFzIDAsIDEsIDIsIC4uLiB1cAotICAgdG8gdGhlIGxpbWl0LiBIb3dl dmVyLCBvbmNlIHlvdSBzdGFydCBjbG9zaW5nIGZpbGVzLCB0aGVyZSBjYW4gYmUgaG9sZXMKLSAg IGluIHRoZSBzZXF1ZW5jZS4gTmV3IGNoYW5uZWxzIGFyZSBhc3NpZ25lZCB0byBmaWxsIGluIHRo ZSBob2xlcy4gVGh1cwotICAgeW91IGNhbid0IGRlcGVuZCBvbiBjaGFubmVsIG51bWJlcnMgYmVp bmcgaW4gYW55IHBhcnRpY3VsYXIgc2VxdWVuY2UuCi0KLTEuMjIuNS4gRklMRSBDb21tYW5kIEVy cm9ycwotCi0gICBFYWNoIEZJTEUgY29tbWFuZCBzZXRzIHRoZSB2YXJpYWJsZSBcdihmX2Vycm9y KSB0byBvbmUgb2YgdGhlIGZvbGxvd2luZwotICAgdmFsdWVzOgotCi0gICAgMCA9IE5vIGVycm9y Ci0gICAtMSA9IFN5c3RlbSBlcnJvcgotICAgLTIgPSBBdHRlbXB0IHRvIHJlYWQgYWZ0ZXIgZW5k IG9mIGZpbGUKLSAgIC0zID0gQ2hhbm5lbCBub3Qgb3BlbgotICAgLTQgPSBDaGFubmVsIG51bWJl ciBvdXQgb2YgcmFuZ2UgKG5lZ2F0aXZlIG9yIHRvbyBsYXJnZSkKLSAgIC01ID0gTnVtZXJpYyBh cmd1bWVudCAoc2l6ZSwgLi4uKSBvdXQgb2YgcmFuZ2UKLSAgIC02ID0gRmlsZSBub3QgZm91bmQK LSAgIC03ID0gQmFkIG9yIG1pc3NpbmcgZmlsZW5hbWUKLSAgIC04ID0gVG9vIG1hbnkgZmlsZXMg YXJlIGFscmVhZHkgb3BlbiAoRklMRSBPUEVOIG9ubHkpCi0gICAtOSA9IEZvcmJpZGRlbiBvcGVy YXRpb24gKGUuZy4gd3JpdGUgdG8gYSByZWFkLW9ubHkgZmlsZSkKLSAgLTEwID0gQWNjZXNzIGRl bmllZAotICAtMTEgPSBJbGxlZ2FsIGNvbWJpbmF0aW9uIG9mIE9QRU4gbW9kZXMgKEZJTEUgT1BF TiBvbmx5KQotICAtMTIgPSBCdWZmZXIgb3ZlcmZsb3cKLSAgLTEzID0gQ3VycmVudCBsaW5lIG51 bWJlciB1bmtub3duIChmb3IgcmVsYXRpdmUgbGluZSBzZWVrcykKLSAgLTE0IHRocm91Z2ggLTk4 OiBSZXNlcnZlZC4KLSAgLTk5ID0gUmVxdWVzdGVkIG9wZXJhdGlvbiBub3QgaW1wbGVtZW50ZWQg aW4gdGhpcyB2ZXJzaW9uIG9mIEMtS2VybWl0Ci0gLTk5OSA9IFVua25vd24gZXJyb3IKLQotICAg V2hlbiBcdihmX2Vycm9yKSBpcyAtMSwgdGhpcyBtZWFucyB0aGUgRklMRSBjb21tYW5kIGZhaWxl ZCBiZWNhdXNlCi0gICBiZWNhdXNlIG9mIGEgc3lzdGVtIGVycm9yLCBpbiB3aGljaCBjYXNlIHlv dSBjYW4gZXhhbWluZSB0aGUgZm9sbG93aW5nCi0gICB2YXJpYWJsZXM6Ci0KLSAgXHYoZXJybm8p ICAgICA9IFN5c3RlbSBlcnJvciBudW1iZXIuCi0gIFx2KGVycnN0cmluZykgPSBFcnJvciBtZXNz YWdlIGNvcnJlc3BvbmRpbmcgdG8gXHYoZXJybm8pLgotCi0gICBBIHNwZWNpYWwgZnVuY3Rpb24g aXMgYXZhaWxhYmxlIGZvciB0cmFuc2xhdGluZyB0aGUgXHYoZl9lcnJvcikgY29kZSB0bwotICAg YW4gZXJyb3IgbWVzc2FnZSBzdHJpbmc6Ci0KLVxmX2Vycm1zZyhbY29kZV0pCi0gIElmIHRoZSBj b2RlIGlzIC0xLCByZXR1cm5zIGVycm9yIG1lc3NhZ2Ugb2YgdGhlIG1vc3QgcmVjZW50IHN5c3Rl bQotICBlcnJvcjsgb3RoZXJ3aXNlIGlmIHRoZSBjb2RlIGlzIGEgdmFsaWQgXHYoZl9lcnJvcikg dmFsdWUsIHRoZSBhc3NvY2lhdGVkCi0gIG1lc3NhZ2UgaXMgcmV0dXJuZWQuICBJZiB0aGUgY29k ZSBpcyBvbWl0dGVkLCB0aGUgc3RhdHVzIG1lc3NhZ2UKLSAgY29ycmVzcG9uZGluZyB0byB0aGUg Y3VycmVudCBcdihmX2Vycm9yKSB2YWx1ZSBpcyByZXR1cm5lZC4KLQotICAgQSBGSUxFIGNvbW1h bmQgdGhhdCBmYWlscyBwcmludHMgdGhlIGFwcHJvcHJpYXRlIGVycm9yIG1lc3NhZ2UKLSAgIGF1 dG9tYXRpY2FsbHksIGV4Y2VwdCB3aGVuIHRoZSBjb21tYW5kIGlzIFJFQUQgb3IgU0VFSyBhbmQg dGhlIGVycm9yIGlzCi0gICAtMiAoZW5kIG9mIGZpbGUpOyBpbiB0aGF0IGNhc2UsIHRoZSBjb21t YW5kIHN0aWxsIGZhaWxzLCBidXQgZG9lcyBub3QKLSAgIHByaW50IGEgbWVzc2FnZS4gVGhpcyBh bGxvd3MgY29uc3RydWN0aW9ucyBzdWNoIGFzOgotCi0gIGZvcGVuIFwlYyBvb2ZhLnR4dAotICB3 aGlsZSBzdWNjZXNzIHsgZnJlYWQgXCVjIH0KLSAgZmNsb3NlIFwlYwotCi0gICB0byB3b3JrIGFz IGV4cGVjdGVkLCBpLmUuIHdpdGhvdXQgYW4gYW5ub3lpbmcgbWVzc2FnZSB3aGVuIHRoZSBlbmQg b2YKLSAgIGZpbGUgaXMgcmVhY2hlZC4KLQotMS4yMi42LiBGaWxlIEkvTyBWYXJpYWJsZXMKLQot ICAgVGhlIHZhcmlhYmxlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUgaS9vIHBhY2thZ2UgYXJl OgotCi0gICBcdihmX2NvdW50KQotICAgICAgICAgIFJlc3VsdCBvZiB0aGUgbW9zdCByZWNlbnQg RklMRSBDT1VOVCAoRkNPVU5UKSBjb21tYW5kLgotCi0gICBcdihmX2Vycm9yKQotICAgICAgICAg IE51bWVyaWMgZXJyb3IgY29kZSBvZiBtb3N0IHJlY2VudCBGSUxFIGNvbW1hbmQgKDAgPSBubyBl cnJvcikuCi0KLSAgIFx2KGZfbWF4KQotICAgICAgICAgIE1heGltdW0gbnVtYmVyIG9mIGZpbGVz IG9wZW4gc2ltdWx0YW5lb3VzbHkuCi0KLTEuMjIuNy4gRmlsZSBJL08gRnVuY3Rpb25zCi0KLSAg IFNvbWUgb2YgdGhlIEZJTEUgY29tbWFuZHMgY2FuIGFsc28gYmUgaXNzdWVkIGFzIGZ1bmN0aW9u IGNhbGxzLCB3aGljaAotICAgbWFrZXMgc2NyaXB0IHdyaXRpbmcgYSBiaXQgbW9yZSBjb252ZW5p ZW50LCBlc3BlY2lhbGx5IGZvciBDCi0gICBwcm9ncmFtbWVycy4gQWxzbywgc2V2ZXJhbCBmdW5j dGlvbnMgYXJlIHByb3ZpZGVkIHRoYXQgZG8gbm90IGhhdmUKLSAgIGNvbW1hbmQgZXF1aXZhbGVu dHMuIEVhY2ggb2YgdGhlc2UgZnVuY3Rpb25zIHRha2VzIGEgY2hhbm5lbCBudW1iZXIgYXMKLSAg IHRoZSBmaXJzdCBhcmd1bWVudC4gVGhlc2UgZnVuY3Rpb25zIGRvIG5vdCB3b3JrIGZvciBPUEVO IHsgUkVBRCwgIVJFQUQsCi0gICBXUklURSwgIVdSSVRFLCBhbmQgQVBQRU5EIH0gZmlsZXMuCi0K LSAgIFxmX3N0YXR1cyhjaGFubmVsKQotICAgICAgICAgIFJldHVybnMgMCBpZiB0aGUgY2hhbm5l bCBpcyBub3Qgb3Blbiwgb3RoZXJ3aXNlIGEgbnVtYmVyIGJldHdlZW4KLSAgICAgICAgICAxIGFu ZCAxNSB3aGljaCBpcyB0aGUgc3VtIG9mIHRoZSBPUEVOIG1vZGVzOgotCi0gIDEgPSAvUkVBRAot ICAyID0gL1dSSVRFCi0gIDQgPSAvQVBQRU5ECi0gIDggPSAvQklOQVJZCi0KLSAgIFRoZSByZW1h aW5pbmcgZnVuY3Rpb25zIHdvcmsgb25seSBmb3Igb3BlbiBjaGFubmVscy4gRWFjaCBvZiB0aGVz ZQotICAgZnVuY3Rpb25zIGNhbiBmYWlsIGZvciB0aGUgYXBwbGljYWJsZSByZWFzb25zIGxpc3Rl ZCBpbiBbMzg3XVNlY3Rpb24KLSAgIDEuMjIuNS4gRm9yIGluc3RydWN0aW9ucyBvbiBoYW5kbGlu ZyBmdW5jdGlvbiBlcnJvcnMsIHNlZSBbMzg4XVNlY3Rpb24KLSAgIDcuMTIuCi0KLSAgIFxmX3Bv cyhjaGFubmVsKQotICAgICAgICAgIFJldHVybnMgdGhlIGZpbGUncyBjdXJyZW50IHJlYWQvd3Jp dGUgcG9pbnRlciAoMC1iYXNlZCkuIFRoZXJlCi0gICAgICAgICAgaXMgbm8gRklMRSBjb21tYW5k IGVxdWl2YWxlbnQuCi0KLSAgIFxmX2xpbmUoY2hhbm5lbCkKLSAgICAgICAgICBSZXR1cm5zIHRo ZSBmaWxlJ3MgY3VycmVudCBsaW5lIG51bWJlciAoMC1iYXNlZCksIGlmIGtub3duLAotICAgICAg ICAgIG90aGVyd2lzZSAtMS4gVGhlcmUgaXMgbm8gRklMRSBjb21tYW5kIGVxdWl2YWxlbnQuIFRo ZSBsaW5lCi0gICAgICAgICAgbnVtYmVyIGlzIGtub3duIGFzIGxvbmcgYXMgbm8gY2hhcmFjdGVy IG9yIGJsb2NrIGkvbyBoYXMgYmVlbgotICAgICAgICAgIGRvbmUgb24gdGhlIGNoYW5uZWwuCi0K LSAgIFxmX2hhbmRsZShjaGFubmVsKQotICAgICAgICAgIFJldHVybnMgdGhlICJmaWxlIGhhbmRs ZSIgb2YgdGhlIGZpbGUuIFRoYXQgaXMsIGl0IHRyYW5zbGF0ZXMKLSAgICAgICAgICB0aGUgcG9y dGFibGUgQy1LZXJtaXQgY2hhbm5lbCBudW1iZXIgaW50byBhIHN5c3RlbS1zcGVjaWZpYyBmaWxl Ci0gICAgICAgICAgaGFuZGxlIG9yIG51bWJlciB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gb3RoZXIg cHJvZ3JhbXMgb24gdGhlCi0gICAgICAgICAgc2FtZSBwbGF0Zm9ybS4gSW4gVU5JWCB0aGlzIGlz IGEgZmlsZSBkZXNjcmlwdG9yLiBUaGVyZSBpcyBubwotICAgICAgICAgIEZJTEUgY29tbWFuZCBl cXVpdmFsZW50LgotCi0gICBcZl9lb2YoY2hhbm5lbCkKLSAgICAgICAgICBSZXR1cm5zIDEgaWYg dGhlIHJlYWQvd3JpdGUgcG9pbnRlciBvZiB0aGUgZmlsZSBvbiB0aGUgZ2l2ZW4KLSAgICAgICAg ICBjaGFubmVsIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUsIDAgb3RoZXJ3aXNlLiBDb252ZW5p ZW50IGluCi0gICAgICAgICAgV0hJTEUgc3RhdGVtZW50cywgZS5nLjoKLQotICAgIHdoaWxlIG5v dCBcZl9lb2YoXCVjKSB7IGZyZWFkIFwlYyB9Ci0KLSAgIFxmX2dldGNoYXIoY2hhbm5lbCkKLSAg ICAgICAgICBFcXVpdmFsZW50IHRvIEZSRUFEIC9DSEFSLiBSZXR1cm5zIHRoZSBjaGFyYWN0ZXIg YWN0dWFsbHkgcmVhZC4KLSAgICAgICAgICBJZiBcZl9nZXRjaGFyKCkgZG9lcyBub3QgZmFpbCBi dXQgdGhlIHJldHVybiB2YWx1ZSBpcyBlbXB0eSwKLSAgICAgICAgICB0aGlzIG1lYW5zIGEgTlVM TCBjaGFyYWN0ZXIgd2FzIHJlYWQuCi0KLSAgIFxmX2dldGxpbmUoY2hhbm5lbCkKLSAgICAgICAg ICBFcXVpdmFsZW50IHRvIEZSRUFEIC9MSU5FLiBSZXR1cm5zIHRoZSBsaW5lIGFjdHVhbGx5IHJl YWQsIGJ1dAotICAgICAgICAgIHdpdGggdGhlIGxpbmUgdGVybWluYXRvciBzdHJpcHBlZC4gSWYg XGZfZ2V0bGluZSgpIGRvZXMgbm90IGZhaWwKLSAgICAgICAgICBidXQgdGhlIHJldHVybiB2YWx1 ZSBpcyBlbXB0eSwgdGhpcyBub3JtYWxseSBtZWFucyBhbiBlbXB0eSBsaW5lCi0gICAgICAgICAg d2FzIHJlYWQuCi0KLSAgIFxmX2dldGJsb2NrKGNoYW5uZWwsbikKLSAgICAgICAgICBFcXVpdmFs ZW50IHRvIEZSRUFEIC9TSVpFOm4uIFJldHVybnMgdGhlIGJsb2NrIG9mIGNoYXJhY3RlcnMKLSAg ICAgICAgICBhY3R1YWxseSByZWFkLiBJZiB0aGUgcmV0dXJuZWQgYmxvY2sgaXMgc21hbGxlciB0 aGFuIG4sIGl0Ci0gICAgICAgICAgaW5kaWNhdGVzIGVpdGhlciB0aGF0IHRoZSBlbmQgb2YgZmls ZSB3YXMgcmVhY2hlZCBvciBhIE5VTAotICAgICAgICAgIGNoYXJhY3RlciBpcyBpbiB0aGUgYmxv Y2suCi0KLSAgIFxmX3B1dGNoYXIoY2hhbm5lbCxjKQotICAgICAgICAgIEVxdWl2YWxlbnQgdG8g RldSSVRFIC9DSEFSQUNURVIuIFdyaXRlcyB0aGUgY2hhcmFjdGVyIGMuIElmIGMKLSAgICAgICAg ICBjb250YWlucyBtb3JlIHRoYW4gb25lIGNoYXJhY3Rlciwgb25seSB0aGUgZmlyc3QgaXMgd3Jp dHRlbi4gSWYKLSAgICAgICAgICBjIGlzIGVtcHR5IGEgTlVMIGlzIHdyaXR0ZW4uIFJldHVybnMg dGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzCi0gICAgICAgICAgd3JpdHRlbiBvbiBzdWNjZXNzLCBv ciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgdXBvbiBmYWlsdXJlLgotCi0gICBcZl9wdXRsaW5lKGNo YW5uZWwsc3RyaW5nKQotICAgICAgICAgIEVxdWl2YWxlbnQgdG8gRldSSVRFIC9MSU5FLiBXcml0 ZXMgdGhlIHN0cmluZyBhbmQgYWRkcyB0aGUKLSAgICAgICAgICBhcHByb3ByaWF0ZSBsaW5lIHRl cm1pbmF0aW9uIGNoYXJhY3RlciBvciBzZXF1ZW5jZS4gSWYgdGhlCi0gICAgICAgICAgc3RyaW5n IGlzIGVtcHR5IG9yIG9taXR0ZWQsIGFuIGVtcHR5IGxpbmUgaXMgd3JpdHRlbi4gUmV0dXJucwot ICAgICAgICAgIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuIG9uIHN1Y2Nlc3MsIG9y IGEgbmVnYXRpdmUgZXJyb3IKLSAgICAgICAgICBjb2RlIHVwb24gZmFpbHVyZS4KLQotICAgXGZf cHV0YmxvY2soY2hhbm5lbCxzdHJpbmcpCi0gICAgICAgICAgRXF1aXZhbGVudCB0byBGV1JJVEUg L1NUUklORy4gV3JpdGVzIHRoZSBzdHJpbmcgYXMgZ2l2ZW4uIElmIHRoZQotICAgICAgICAgIHN0 cmluZyBpcyBlbXB0eSBvciBvbWl0dGVkLCBub3RoaW5nIGlzIHdyaXR0ZW4uIFJldHVybnMgdGhl Ci0gICAgICAgICAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbiBvbiBzdWNjZXNzLCBvciBh IG5lZ2F0aXZlIGVycm9yCi0gICAgICAgICAgY29kZSB1cG9uIGZhaWx1cmUuCi0KLTEuMjIuOC4g RmlsZSBJL08gRnVuY3Rpb24gRXhhbXBsZXMKLQotICBmb3BlbiAvcmVhZCBcJWMgb29mYS50eHQg ICAgICAgICAgICA7IE9wZW4gb3VyIGZhdm9yaXRlIGZpbGUgZm9yIHJlYWRpbmcKLSAgaWYgZmFp bHVyZSBleGl0IDEgICAgICAgICAgICAgICAgICAgOyBDaGVjayB0aGF0IGl0J3Mgb3BlbgotICB3 aGlsZSBub3QgXGZfZW9mKFwlYykgeyAgICAgICAgICAgICA7IExvb3AgdW50aWwgRU9GCi0gICAg ICAubGluZSA6PSBcZl9nZXRsaW5lKFwlYykgICAgICAgIDsgR2V0IGEgbGluZQotICAgICAgaWYg c3VjY2VzcyBlY2hvIHtcbShsaW5lKX0gICAgICA7IEVjaG8gaXQKLSAgfQotICBpZiBub3QgXGZf ZW9mKFwlYykgeyAgICAgICAgICAgICAgICA7IENoZWNrIHJlYXNvbiBmb3IgbG9vcCBleGl0Ci0g ICAgICBleGl0IDEgRmlsZSBFcnJvcjogXGZfZXJybXNnKCkgIDsgSWYgbm90IEVPRiBzYXkgc28u Ci0gIH0KLQotICBmcmV3aW5kIFwlYyAgICAgICAgICAgICAgICAgICAgICAgICA7IFJld2luZCB0 aGUgZmlsZQotICB3aGlsZSBub3QgXGZfZW9mKFwlYykgeyAgICAgICAgICAgICA7IFNhbWUgdGhp bmcgYnV0IHdpdGggYmxvY2sgaS9vCi0gICAgICAuYmxvY2sgOj0gXGZfZ2V0YmxvY2soXCVjLDI1 NikgIDsgKG11Y2ggZmFzdGVyIHRoYW4gbGluZSBpL28pCi0gICAgICBpZiBzdWNjZXNzIHhlY2hv IHtcbShibG9jayl9Ci0gIH0KLQotICBmcmV3aW5kIFwlYyAgICAgICAgICAgICAgICAgICAgICAg ICA7IFJld2luZCBhZ2FpbgotICB3aGlsZSBub3QgXGZfZW9mKFwlYykgeyAgICAgICAgICAgICA7 IFNhbWUgZGVhbCBidXQgd2l0aCBjaGFyYWN0ZXIgaS9vCi0gICAgICAuYyA6PSBcZl9nZXRjaGFy KFwlYykgICAgICAgICAgIDsgKG11Y2ggc2xvd2VyIHRoYW4gbGluZSBpL28pCi0gICAgICBpZiBz dWNjZXNzIHhlY2hvIHtcbShjKX0KLSAgfQotICBjbG9zZSBcJWMKLQotICAgVG8gY2xvc2UgYWxs IG9wZW4gZmlsZXMgKGVxdWl2YWxlbnQgdG8gRkNMT1NFIEFMTCk6Ci0KLSAgZm9yIFwlaSAwIFx2 KGZfbWF4KS0xIDEgewotICAgICAgaWYgXGZfc3RhdHVzKFwlaSkgZmNsb3NlIFwlaQotICB9Ci0K LTEuMjMuIFRoZSBFWEVDIENvbW1hbmQKLQotICAgVGhlIEVYRUMgY29tbWFuZCBpcyBhdmFpbGFi bGUgb25seSBpbiBVTklYLgotCi0gICBFWEVDIFsgL1JFRElSRUNUIF0gY29tbWFuZCBbIGFyZzEg WyBhcmcyIFsgLi4uIF0gXQotICAgICAgICAgIFJ1bnMgdGhlIGdpdmVuIGNvbW1hbmQgd2l0aCB0 aGUgYXJndW1lbnRzIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGUKLSAgICAgICAgICBjb21tYW5kIHJl cGxhY2VzIEMtS2VybWl0IGluIG1lbW9yeSwgYW5kIEMtS2VybWl0IGNlYXNlcyB0bwotICAgICAg ICAgIGV4ZWN1dGUuIEVYRUMgaXMgbGlrZSBSVU4sIGV4Y2VwdCBpbnN0ZWFkIG9mIHJldHVybmlu ZyB0bwotICAgICAgICAgIEMtS2VybWl0IHdoZW4gZmluaXNoZWQsIHRoZSBjb21tYW5kIHJldHVy bnMgdG8gd2hhdGV2ZXIgcHJvY2VzcwotICAgICAgICAgIGludm9rZWQgS2VybWl0LgotCi0gICBJ biB0aGUgbm9ybWFsIGNhc2UsIG5vIGZpbGVzIGFyZSBjbG9zZWQsIHNvIHRoZSBFWEVDJ2QgY29t bWFuZCBpbmhlcml0cwotICAgdGhlIG9wZW4gZmlsZXMsIHJlYWQvd3JpdGUgcG9pbnRlcnMsIHdv cmtpbmcgZGlyZWN0b3J5LCBwcm9jZXNzIElELAotICAgdXNlciBJRCAodW5sZXNzIGNvbW1hbmQg aXMgU1VJRCksIGdyb3VwIElEICh1bmxlc3MgY29tbWFuZCBpcyBTR0lEKSwKLSAgIGdyb3Vwcywg ZXRjLiAoSW4gVU5JWCwgdGhlIEVYRUMgY29tbWFuZCBpcyBzaW1wbHkgYSBmcm9udCBlbmQgZm9y Ci0gICBleGVjdnAoKS4pCi0KLSAgIElmIHRoZSAvUkVESVJFQ1Qgc3dpdGNoIGlzIGluY2x1ZGVk LCB0aGVuIGlmIGEgY29ubmVjdGlvbiBpcyBvcGVuIChTRVQKLSAgIExJTkUgb3IgU0VUIEhPU1Qp LCBpdCBiZWNvbWVzIHRoZSBzdGFuZGFyZCBpbnB1dCBhbmQgb3V0cHV0IG9mIHRoZQotICAgRVhF QydkIHByb2dyYW0uIElmIG5vIGNvbm5lY3Rpb24gaXMgb3BlbiwgdGhlIC9SRURJUkVDVCBzd2l0 Y2ggaGFzIG5vCi0gICBlZmZlY3QuIEZvciBleGFtcGxlIHRvIHVzZSBDLUtlcm1pdCBmb3IgUFBQ IGRpYWxpbmcgaW4gTGludXg6Ci0KLSAgc2V0IG1vZGVtIHR5cGUgdXNyICAgICAgICAgIDsgU3Bl Y2lmeSB0aGUga2luZCBvZiBtb2RlbSB5b3UgaGF2ZQotICBzZXQgbGluZSAvZGV2L3R0eVMxICAg ICAgICAgOyBTcGVjaWZ5IHRoZSBkZXZpY2UgaXQncyBjb25uZWN0ZWQgdG8KLSAgc2V0IHNwZWVk IDU3NjAwICAgICAgICAgICAgIDsgYW5kIHRoZSBzcGVlZAotICBzZXQgZmxvdyBydHMvY3RzICAg ICAgICAgICAgOyBhbmQgZmxvdyBjb250cm9sLgotICBzZXQgZGlhbCByZXRyaWVzIDEwMCAgICAg ICAgOyBUcnkgdGhlIGRpYWwgc2VxdWVuY2UgdXAgdG8gMTAwIHRpbWVzLgotICBkaWFsIHt7OS0y MTItNTU1LTEyMTJ9ezktMjEyLTU1NS0xMjEzfXs5LTIxMi01NTUtMTIxNH17OS0yMTItNTU1LTEy MTV9fQotICBpZiBmYWlsIGV4aXQgMQotICBmb3IgXCVpIDEgMTYgMSB7ICAgICAgICAgICAgOyBU cnkgdXAgdG8gMTYgdGltZXMgdG8gZ2V0IGxvZ2luIHByb21wdAotICAgICAgaW5wdXQgMTAgTG9n aW46ICAgICAgICAgOyBXYWl0IDEwIHNlYyBmb3IgaXQgdG8gYXBwZWFyCi0gICAgICBpZiBzdWNj ZXNzIGJyZWFrICAgICAgICA7IEdvdCBpdCAtIHByb2NlZWQuLi4KLSAgICAgIG91dHB1dCBcMTMg ICAgICAgICAgICAgIDsgU2VuZCBhIGNhcnJpYWdlIHJldHVybiBhbmQgdHJ5IGFnYWluCi0gIH0K LSAgaWYgKCA+IFwlaSAxNiApIHN0b3AgMSBOTyBMT0dJTiBQUk9NUFQKLSAgbGluZW91dCBcKG15 dXNlcmlkKSAgICAgICAgIDsgU2VuZCB1c2VyIElECi0gIGlucHV0IDMwIGFzc3dvcmQ6ICAgICAg ICAgICA7IFdhaXQgZm9yIFBhc3N3b3JkIHByb21wdAotICBpZiBmYWlsIHN0b3AgMSBOTyBQQVNT V09SRCBQUk9NUFQKLSAgbGluZW91dCBcbShteXBhc3N3b3JkKSAgICAgIDsgU2VuZCB0aGUgcGFz c3dvcmQuCi0gIGV4ZWMgL3JlZGlyZWN0IHBwcGQgICAgICAgICA7IFJlcGxhY2Ugb3Vyc2VsdmVz IHdpdGggcHBwZC4KLQotICAgSW4gdGhpcyBleGFtcGxlIHdlIGFzc3VtZSB0aGF0IHRoZSBzY3Jp cHQgaGFzIGFscmVhZHkgc2V0IHVwIHRoZQotICAgbXl1c2VyaWQgYW5kIG15cGFzc3dvcmQgdmFy aWFibGVzIC0tIG5vcm1hbGx5IHRoZSBwYXNzd29yZCBzaG91bGQgYmUKLSAgIHByb21wdGVkIGZv ciwgcmF0aGVyIHRoYW4gc3RvcmVkIG9uIGRpc2suIE5vdGljZSB0aGUgYWR2YW50YWdlcyBvdmVy Ci0gICB0aGUgd2VsbC1rbm93biAiY2hhdCBzY3JpcHQiOgotICAgICAqIFlvdSBkb24ndCBoYXZl IHRvIGNvbnRyb2wgdGhlIG1vZGVtIGl0c2VsZiB3aXRoIEFUIGNvbW1hbmRzOwotICAgICAgIEtl cm1pdCdzIERJQUwgY29tbWFuZCBkb2VzIHRoaXMgZm9yIHlvdS4KLSAgICAgKiBZb3UgY2FuIGhh dmUgS2VybWl0IGF1dG9tYXRpY2FsbHkgcmVkaWFsIGFzIG1hbnkgdGltZXMgYXMgeW91IHdhbnQK LSAgICAgICB1bnRpbCBpdCBnZXRzIGEgY29ubmVjdGlvbiAoaWYgdGhpcyBpcyBsZWdhbCBpbiB5 b3VyIGNvdW50cnkpLgotICAgICAqIFlvdSBjYW4gaGF2ZSBLZXJtaXQgZmV0Y2ggdGhlIG51bWJl ciBvciBudW1iZXJzIGZyb20gYSBkaWFsaW5nCi0gICAgICAgZGlyZWN0b3J5LgotICAgICAqIFlv dSBjYW4gaGF2ZSBLZXJtaXQgY3ljbGUgdGhyb3VnaCBhIGxpc3Qgb2YgcGhvbmUgbnVtYmVycyAo dGhpcyBpcwotICAgICAgIG5ldyBpbiBDLUtlcm1pdCA3LjA7IHNlZSBbMzg5XVNlY3Rpb24gMi4x LjE2KSB3aXRob3V0IGhhdmluZyB0bwotICAgICAgIGVudGVyIHRoZSBudW1iZXJzIGluIGEgZGlh bGluZyBkaXJlY3RvcnkuCi0gICAgICogRGlhbGluZyBpcyBsb2NhdGlvbi1pbmRlcGVuZGVudDsg eW91IGNhbiB1c2UgdGhlIHNhbWUgc2NyaXB0IHRvCi0gICAgICAgZGlhbCBmcm9tIGRpZmZlcmVu dCBhcmVhcyBvciBjb3VudHJpZXMuCi0gICAgICogT25jZSB0aGUgY29ubmVjdGlvbiBpcyBtYWRl LCB0aGUgZnVsbCBwb3dlciBvZiBLZXJtaXQncyBzY3JpcHQKLSAgICAgICBsYW5ndWFnZSBpcyBh dmFpbGFibGUgdG8gbWFuYWdlIHRoZSBkaWFsb2cgd2l0aCB0aGUgdGVybWluYWwgc2VydmVyCi0g ICAgICAgb3Igb3RoZXIgZGV2aWNlIHRoYXQgYW5zd2VycyB0aGUgcGhvbmUgY2FsbC4KLQotICAg Tk9URTogUFBQIGFuZCBTTElQIGRpYWxpbmcgYXJlIG5vdCBhdmFpbGFibGUgaW4gV2luZG93cyA5 NS85OC9OVC8yMDAwLAotICAgd2hvc2UgQVBJcyBkbyBub3QgcHJvdmlkZSBhIG1ldGhvZCBmb3Ig YW4gYXBwbGljYXRpb24gdG8gaGFuZCBvdmVyIGEKLSAgIGNvbm5lY3Rpb24gdG8gdGhlIFBQUCBv ciBTTElQIGRyaXZlci4KLQotMS4yNC4gR2V0dGluZyBLZXl3b3JkIExpc3RzIHdpdGggJz8nCi0K LSAgIFN1cHBvc2UgeW91IHR5cGUgInRlIiBhdCB0aGUgQy1LZXJtaXQ+IDYuMCBwcm9tcHQgYW5k IHRoZW4gRXNjIG9yIFRhYgotICAgdG8gcmVxdWVzdCBrZXl3b3JkIGNvbXBsZXRpb24uIEtlcm1p dCBiZWVwcywgaW5kaWNhdGluZyB0aGF0IG1vcmUgdGhhbgotICAgb25lIGNvbW1hbmQgc3RhcnRz IHdpdGggInRlIi4gQnV0IGlmIHlvdSB0eXBlICc/JyB0byBzZWUgd2hhdCB0aGV5IGFyZSwKLSAg IEtlcm1pdCBzaG93cyBvbmx5ICJ0ZWxuZXQiLiBTbyB3aHkgdGhlIGJlZXA/IEJlY2F1c2Ugb2Yg aW52aXNpYmxlCi0gICBrZXl3b3JkcyBsaWtlICJ0ZWxvcHQiLCAidGVybWluYWwiLCBhbmQgInRl eHQiLiBMb3RzIG9mIGtleXdvcmRzIGFyZQotICAgaW52aXNpYmxlIGJlY2F1c2UgdGhleSBhcmUg ZWl0aGVyIHN5bm9ueW1zIGZvciBvdGhlciBrZXl3b3JkcyBvciBlbHNlCi0gICBlc290ZXJpYyBv cHRpb25zIHRvIGJlIHVzZWQgb25seSBpbiBzcGVjaWFsIGNpcmN1bXN0YW5jZXMsIHNvIHdlIGRv bid0Ci0gICB3YW50IHRoZW0gY2x1dHRlcmluZyB1cCB0aGUgbWVudXMuCi0KLSAgIEJ1dCB0aGVu IHRoZXJlIGlzIG5vIHdheSBmb3IgeW91IHRvIGRpc2NvdmVyIHRoZW0uIFNvIGluIEMtS2VybWl0 IDcuMCwKLSAgIGlmIHlvdSB0eXBlICc/JyBBRlRFUiB0aGUgYmVnaW5uaW5nIG9mIGEga2V5d29y ZCBmaWVsZCwgdGhlbiBpbnZpc2libGUKLSAgIGtleXdvcmRzIGFyZSBzaG93biB0b286Ci0KLSAg Qy1LZXJtaXQ+IHRlPEVzYz48QkVFUD4KLSAgQy1LZXJtaXQ+IHRlPyBDb21tYW5kLCBvbmUgb2Yg dGhlIGZvbGxvd2luZzoKLSAgIHRlbG5ldCAgICB0ZWxvcHQgICAgdGVybWluYWwgIHRleHQKLSAg Qy1LZXJtaXQ+dGUKLQotICAgQnV0IGlmICc/JyBpcyB0eXBlZCBhdCB0aGUgYmVnaW5uaW5nIG9m IGEgZmllbGQsIG9ubHkgdmlzaWJsZSBrZXl3b3JkcwotICAgYXJlIHNob3duLCBhcyBiZWZvcmUg KHNvLCBpbiB0aGlzIGV4YW1wbGUsIGlmICc/JyBpcyB0eXBlZCBhdCB0aGUKLSAgIEMtS2VybWl0 PiBwcm9tcHQsICJ0ZWxuZXQiIGlzIHRoZSBvbmx5IGNvbW1hbmQgc2hvd24gdGhhdCBzdGFydHMg d2l0aAotICAgInRlIikuCi0KLTIuIE1BS0lORyBBTkQgVVNJTkcgQ09OTkVDVElPTlMgVGhlIFNF VCBMSU5FLCBTRVQgSE9TVCwgYW5kIFNFVCBQT1JUIChhCi1zeW5vbnltIGZvciBTRVQgTElORSkg Y29tbWFuZHMgaGF2ZSBuZXcgc3lub255bXMsIGluIHdoaWNoIHRoZSB3b3JkIFNFVCBpcwotcmVw bGFjZWQgYnkgdGhlIHdvcmQgT1BFTjogT1BFTiBMSU5FLCBldGMuIFRoZXJlIGlzIG5vIG5ldyBm dW5jdGlvbmFsaXR5Ci1oZXJlLCBidXQgT1BFTiBpcyBhIGJldHRlciB2ZXJiLCBzaW5jZSBTRVQg Z2VuZXJhbGx5IHRha2VzIG5vIGFjdGlvbiwgd2hlcmVhcwotdGhlc2UgY29tbWFuZHMgYWN0dWFs bHkgdHJ5IHRvIG9wZW4gYSBjb25uZWN0aW9uLiBGdXJ0aGVybW9yZSwgdGhlcmUgaXMgdGhlCi1z eW1tZXRyeSB3aXRoIENMT1NFLiAyLjAuIFNFVCBMSU5FIGFuZCBTRVQgSE9TVCBDb21tYW5kIFN3 aXRjaGVzVGhlIFNFVCBMSU5FCi0oU0VUIFBPUlQpIGFuZCBTRVQgSE9TVCBjb21tYW5kcyBub3cg YWxsb3cgc3dpdGNoZXMgYmVmb3JlIHRoZSBkZXZpY2Ugb3IgaG9zdAotbmFtZSwgaW4gbW9zdCBj YXNlcywgYW5kIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcywgYWxzbyBhdCB0aGUgZW5kLiBU aGUKLW5ldyBzeW50YXggaXMgYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aCB0aGUgcHJldmlvdXMg c3ludGF4OyB0aHVzIFNFVCBMSU5FLAotU0VUIFBPUlQsIGFuZCBTRVQgSE9TVCBjb21tYW5kcyBp biBjb21tYW5kIGZpbGVzIHdyaXR0ZW4gZm9yIEMtS2VybWl0IDYuMCBvcgotZWFybGllciBzdGls bCB3b3JrLiBUaGUgZXhwYW5kZWQgc3ludGF4IGlzOgotCi17IE9QRU4sIFNFVCB9IHsgTElORSwg UE9SVCwgSE9TVCB9IFsgc3dpdGNoZXMgXSBkZXZpY2Utb3ItYWRkcmVzcyBbIHN3aXRjaGVzCi1d Ci0KLVRoZSBmaXJzdCBncm91cCBvZiBzd2l0Y2hlcyBpczoKLQotICAgL05FVFdPUkstVFlQRTp7 VENQL0lQLFguMjUsUElQRSxQVFkuLi59Ci0gICAgICAgICAgV2hlbiBtb3JlIHRoYW4gb25lIG5l dHdvcmsgdHlwZSBpcyBhdmFpbGFibGUsIHRoaXMgbGV0cyB5b3UKLSAgICAgICAgICBzcGVjaWZ5 IHRoZSB0eXBlIG9mIG5ldHdvcmsgdG8gdXNlIGZvciB0aGlzIGNvbm5lY3Rpb24gd2l0aG91dAot ICAgICAgICAgIGFmZmVjdGluZyB5b3VyIGdsb2JhbCBTRVQgTkVUV09SSyBUWVBFLiBTZWUgWzM5 MF1TZWN0aW9uIDIuNwotICAgICAgICAgIGFib3V0IHBpcGVzIGFuZCBwdHlzLgotCi0gICAvVVNF UklEOltzdHJpbmddCi0gICAgICAgICAgVGhpcyBzd2l0Y2ggaXMgZXF1aXZhbGVudCB0byBTRVQg TE9HSU4gVVNFUklELiBJZiBhIHN0cmluZyBpcwotICAgICAgICAgIGdpdmVuLCBpdCBzZW50IHRv IGhvc3QgZHVyaW5nIFRlbG5ldCBuZWdvdGlhdGlvbnM7IGlmIHRoaXMKLSAgICAgICAgICBzd2l0 Y2ggaXMgZ2l2ZW4gYnV0IHRoZSBzdHJpbmcgaXMgb21pdHRlZCwgbm8gdXNlciBJRCBpcyBzZW50 IHRvCi0gICAgICAgICAgdGhlIGhvc3QuIElmIHRoaXMgc3dpdGNoIGlzIG5vdCBnaXZlbiwgeW91 ciBjdXJyZW50IExPR0lOIFVTRVJJRAotICAgICAgICAgIChcdih1c2VyaWQpIHZhbHVlKSwgaWYg YW55LCBpcyBzZW50LiBVbmxpa2UgbW9zdCBvdGhlciBzd2l0Y2hlcywKLSAgICAgICAgICB0aGlz IG9uZSBpcyAic3RpY2t5Iiwgc2luY2UgdGhlIHZhbHVlIG11c3QgcGVyc2lzdCB0aHJvdWdob3V0 Ci0gICAgICAgICAgdGhlIHNlc3Npb24gaW4gY2FzZSB0aGUgc2VydmVyIHJlcXVlc3RzIHRoZSBJ RCBzdHJpbmcgYXQgYSBsYXRlcgotICAgICAgICAgIHRpbWUuCi0KLSAgIC9DT05ORUNUCi0gICAg ICAgICAgRW50ZXIgQ09OTkVDVCBtb2RlIGltbWVkaWF0ZWx5IGFuZCBhdXRvbWF0aWNhbGx5IGFm dGVyIHRoZQotICAgICAgICAgIGRldmljZSBvciBjb25uZWN0aW9uIGlzIG9wZW4uIE9uIHNlcmlh bCBkZXZpY2VzLCBob3dldmVyLCB3aGVuCi0gICAgICAgICAgQ0FSUklFUi1XQVRDSCBpcyBub3Qg T0ZGLCB3YWl0IHVwIHRvIDEgc2Vjb25kIGZvciB0aGUgQ2FycmllcgotICAgICAgICAgIERldGVj dCBzaWduYWwgdG8gYXBwZWFyIGJlZm9yZSB0cnlpbmcgdG8gY29ubmVjdCwgdG8gZ2l2ZSB0aGUK LSAgICAgICAgICBkZXZpY2UgdGltZSB0byByZWFjdCBEVFIsIHdoaWNoIG1pZ2h0IGhhdmUgYmVl biBvZmYgcHJpb3IgdG8KLSAgICAgICAgICBvcGVuaW5nIHRoZSBkZXZpY2UuCi0KLSAgIC9TRVJW RVIKLSAgICAgICAgICBFbnRlciBzZXJ2ZXIgbW9kZSBpbW1lZGlhdGVseSBhbmQgYXV0b21hdGlj YWxseSBhZnRlciB0aGUgZGV2aWNlCi0gICAgICAgICAgb3IgY29ubmVjdGlvbiBpcyBvcGVuLiBU cmVhdG1lbnQgb2YgY2FycmllciBpcyB0aGUgc2FtZSBhcyBmb3IKLSAgICAgICAgICAvQ09OTkVD VC4KLQotICAgL1dBSVQKLSAgIC9OT1dBSVQKLSAgICAgICAgICBGb3IgVGVsbmV0IGNvbm5lY3Rp b25zIG9ubHk6IExpa2UgU0VUIFRFTE5FVCBXQUlUIHsgT04sIE9GRiB9LAotICAgICAgICAgIGJ1 dCBhcHBsaWVzIG9ubHkgdG8gdGhpcyBjb25uZWN0aW9uLCBhbmQgaW4gZmFjdCBhcHBsaWVzIG9u bHkKLSAgICAgICAgICB3aGVuIE9QRU5pbmcgdGhpcyBjb25uZWN0aW9uICh3aGljaCBpcyB1c3Vh bGx5IHRoZSBvbmx5IHBsYWNlIGl0Ci0gICAgICAgICAgbWF0dGVycykuIFR5cGljYWxseSB5b3Ug d291bGQgdXNlIFRFTE5FVCAvTk9XQUlUIHRvIG1ha2UgYQotICAgICAgICAgIGNvbm5lY3Rpb24g dG8gYSBtaXNiZWhhdmluZyBUZWxuZXQgc2VydmVyIHRoYXQgZG9lcyBub3QgcmVwbHkgdG8KLSAg ICAgICAgICBuZWdvdGlhdGlvbnMgYXMgcmVxdWlyZWQgYnkgdGhlIFRlbG5ldCBwcm90b2NvbCBk ZWZpbml0aW9uLgotCi0gICBOb3RlOiAvQ09OTkVDVCBhbmQgL1NFUlZFUiBzd2l0Y2hlcyBhcmUg bm90IGF2YWlsYWJsZSBpbiB0aGUgUkxPR0lOIGFuZAotICAgVEVMTkVUIGNvbW1hbmRzLCBzaW5j ZSB0aGVzZSBjb21tYW5kcyBhbHJlYWR5IGluY2x1ZGUgYW4gaW1wbGljaXQKLSAgIC9DT05ORUNU IGFuZCBwcmVjbHVkZSBhdXRvbWF0aWMgZW50cnkgaW50byBzZXJ2ZXIgbW9kZS4KLQotICAgVGhl IC9DT05ORUNUIGFuZCAvU0VSVkVSIHN3aXRjaGVzIGFyZSBlc3BlY2lhbGx5IHVzZWZ1bCB3aXRo ICJzZXQgaG9zdAotICAgKiIgY29ubmVjdGlvbnMuIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSB3 YW50IHRvIHN0YXJ0IGEgS2VybWl0IHNlcnZlcgotICAgb24gc29ja2V0IDMwMDAgb2YgeW91ciBU Q1AgaG9zdC4gTm9ybWFsbHkgeW91IHdvdWxkIGhhdmUgdG8gZ2l2ZSB0aGUKLSAgIGNvbW1hbmQ6 Ci0KLSAgc2V0IGhvc3QgKiAzMDAwCi0KLSAgIGFuZCB0aGVuIHdhaXQgZm9yIGEgY29ubmVjdGlv biB0byBjb21lIGluLCBhbmQgb25seSB0aGVuIGNvdWxkIHlvdSBnaXZlCi0gICB0aGUgU0VSVkVS IGNvbW1hbmQgKG9yIGVsc2UgZGVmaW5lIGEgbWFjcm8gdG8gZG8gdGhpcywgYW5kIHRoZW4gZXhl Y3V0ZQotICAgdGhlIG1hY3JvKS4gTm93IHlvdSBjYW4gZG8gaXQgaW4gb25lIHN0ZXA6Ci0KLSAg c2V0IGhvc3QgL3NlcnZlciAqIDMwMDAKLQotICAgVGhpcyB0ZWxscyBDLUtlcm1pdCB0byB3YWl0 IGZvciB0aGUgY29ubmVjdGlvbiBhbmQgdGhlbiBlbnRlciBzZXJ2ZXIKLSAgIG1vZGUgb25jZSBp dCBjb21lcyBpbiwgbm8gbWF0dGVyIGhvdyBsb25nIGl0IHRha2VzLiBTaW1pbGFybHksICJzZXQK LSAgIGhvc3QgL2Nvbm4gKiIgY2FuIGJlIHVzZWQgdG8gd2FpdCBmb3IgYSAiY2hhdCIgY29ubmVj dGlvbiB0byBjb21lIGluLgotCi0gICBBbm90aGVyIHNldCBvZiBzd2l0Y2hlcyBpcyBhdmFpbGFi bGUgaW4gVk1TIG9ubHksIGZvciB1c2Ugb25seSB3aXRoIFNFVAotICAgTElORToKLQotICAgL1NI QVJFCi0gICAgICAgICAgQWxsb3dzIHRoZSBTRVQgTElORSBkZXZpY2UgdG8gYmUgb3BlbmVkIGlu IHNoYXJlZCBtb2RlLiBOb3JtYWxseQotICAgICAgICAgIGl0IG1ha2VzIG5vIHNlbnNlIHRvIG9w ZW4gYSBzZXJpYWwgZGV2aWNlIGluIHNoYXJlZCBtb2RlLCBidXQKLSAgICAgICAgICBpdCdzIG5l Y2Vzc2FyeSB3aGVuIEMtS2VybWl0IGlzIHJ1bm5pbmcgaW4gYW4gZW52aXJvbm1lbnQgc3VjaAot ICAgICAgICAgIGFzIERFQ0ludGFjdCwgdGhhdCBvcGVucyB5b3VyIGpvYidzIGNvbnRyb2xsaW5n IHRlcm1pbmFsIGluIHN1Y2gKLSAgICAgICAgICBhIHdheSB0aGF0IEMtS2VybWl0IGNhbid0IG9w ZW4gaXQgdG9vLCB1bmxlc3MgaXQgZW5hYmxlcyBTSEFSRQotICAgICAgICAgIHByaXZpbGVnZS4g Tm90ZTogU0hBUkUgcHJpdmlsZWdlIGlzIHJlcXVpcmVkLgotCi0gICAvTk9TSEFSRQotICAgICAg ICAgIFJlcXVpcmVzIHRoYXQgdGhlIFNFVCBMSU5FIGRldmljZSBub3QgYmUgaW4gdXNlIGJ5IGFu eSBvdGhlcgotICAgICAgICAgIHByb2Nlc3MgaW4gb3JkZXIgZm9yIGl0IHRvIGJlIHN1Y2Nlc3Nm dWxseSBvcGVuZWQgYnkgQy1LZXJtaXQuCi0gICAgICAgICAgSWYgbmVpdGhlciAvU0hBUkUgbm9y IC9OT1NIQVJFIGlzIHNwZWNpZmllZCwgL05PU0hBUkUgaXMgdXNlZC4KLQotICAgVGhlIHNlY29u ZCBncm91cCBvZiBzd2l0Y2hlcyBpczoKLQotICAgL05PLVRFTE5FVC1JTklUCi0gICAgICAgICAg RG8gbm90IHNlbmQgaW5pdGlhbCBUZWxuZXQgbmVnb3RpYXRpb25zIGV2ZW4gaWYgdGhpcyBpcyBh IFRlbG5ldAotICAgICAgICAgIHBvcnQuCi0KLSAgIC9SQVctU09DS0VUCi0gICAgICAgICAgVGhp cyBpcyBhIGNvbm5lY3Rpb24gdG8gYSByYXcgVENQIHNvY2tldCAoWzM5MV1TZWN0aW9uIDIuMy41 KS4KLQotICAgL1JMT0dJTgotICAgICAgICAgIFVzZSBSbG9naW4gcHJvdG9jb2wgZXZlbiBpZiB0 aGlzIGlzIG5vdCBhbiBSbG9naW4gcG9ydC4KLQotICAgL1RFTE5FVAotICAgICAgICAgIFNlbmQg aW5pdGlhbCBUZWxuZXQgbmVnb3RpYXRpb25zIGV2ZW4gaWYgdGhpcyBpcyBub3QgYSBUZWxuZXQK LSAgICAgICAgICBwb3J0LgotCi0gICBBcyBvZiBDLUtlcm1pdCA3LjAgYW5kIEs5NSAxLjEuMTks IHRoZSBURUxORVQgY29tbWFuZCBpbmNsdWRlcyBhbgotICAgaW1wbGljaXQgL1RFTE5FVCBzd2l0 Y2guIFNvIGlmIHlvdSBURUxORVQgdG8gYSBub24tVEVMTkVUIHBvcnQsIEtlcm1pdAotICAgc2Vu ZHMgaW5pdGlhbCBUZWxuZXQgbmVnb3RpYXRpb25zLiBUaGlzIG1ha2VzIHNlbnNlLCBzaW5jZSB0 aGF0J3Mgd2hhdAotICAgInRlbG5ldCIgbWVhbnMuCi0KLSAgIElmIHlvdSB3YW50IHRvIG1ha2Ug YSBjb25uZWN0aW9uIHRvIGEgbm9uLVRlbG5ldCBwb3J0IHdpdGhvdXQgc2VuZGluZwotICAgaW5p dGlhbCBUZWxuZXQgbmVnb3RpYXRpb25zLCB1c2U6Ci0KLSAgc2V0IGhvc3QgWyAvY29ubmVjdCBd IG5hbWUtb3ItYWRkcmVzcyBwb3J0Ci0KLSAgIG9yOgotCi0gIHRlbG5ldCBuYW1lLW9yLWFkZHJl c3MgcG9ydCAvbm8tdGVsbmV0LWluaXQKLQotICAgQWRkaXRpb25hbCBzd2l0Y2hlcyBtaWdodCBi ZSBhZGRlZCBpbiB0aGUgZnV0dXJlOyB0eXBlICJzZXQgaG9zdCA/IiBvcgotICAgInNldCBsaW5l ID8iIHRvIHNlZSBhIGN1cnJlbnQgbGlzdC4KLQotMi4xLiBEaWFsaW5nCi0KLSAgIEF1dG9tYXRp YyByZWRpYWxpbmcgaXMgaWxsZWdhbCBvciByZXN0cmljdGVkIGluIG1hbnkgY291bnRyaWVzLCBz bwotICAgdW50aWwgQy1LZXJtaXQgNy4wLCBpdCB3YXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgaS5l LiB1bnRpbCBhIFNFVCBESUFMCi0gICBSRVRSSUVTIGNvbW1hbmQgd2FzIGdpdmVuLiBJbiBDLUtl cm1pdCA3LjAsIGlmIG5vIFNFVCBESUFMIFJFVFJJRVMKLSAgIGNvbW1hbmQgaGFzIGJlZW4gZ2l2 ZW4sIGEgZGVmYXVsdCBpcyBwaWNrZWQgZHluYW1pY2FsbHkgYXQgRElBTCB0aW1lCi0gICBiYXNl ZCBvbiB0aGUgY2FsbGluZyBjb3VudHJ5IGNvZGUsIGlmIGtub3duLiBBdCB0aGlzIHdyaXRpbmcs IHRoZSBvbmx5Ci0gICBjb3VudHJ5IGNvZGUga25vd24gdG8gaGF2ZSBubyByZXN0cmljdGlvbnMg b24gYXV0b21hdGljIHJlZGlhbGluZyBpcyAxLgotICAgU28gaW4gdGhpcyBjYXNlIGEgbGltaXQg b2YgMTAgaXMgY2hvc2VuOyBvdGhlcndpc2UgMS4gSWYgeW91IGhhdmUgbm90Ci0gICBnaXZlbiBh biBleHBsaWNpdCBTRVQgRElBTCBSRVRSSUVTIGNvbW1hbmQsIFNIT1cgRElBTCBzaG93cyB0aGUg dmFsdWUKLSAgIGFzICIoYXV0bykiLCBhbmQgdGhlbiB0aGUgdmFsdWUgYWN0dWFsbHkgdXNlZCBp cyBzaG93biB3aGVuIHlvdSBnaXZlCi0gICB0aGUgRElBTCBjb21tYW5kLgotCi0gICBBcyBvZiBD LUtlcm1pdCA3LjAsIGF1dG9tYXRpYyByZWRpYWxpbmcgaXMgYXV0b21hdGljYWxseSBjYW5jZWxl ZCBpZgotICAgdGhlIGNhbGwgY291bGQgbm90IGJlIHBsYWNlZCBiZWNhdXNlIG5vIGRpYWx0b25l IHdhcyBkZXRlY3RlZC4KLQotMi4xLjEuIFRoZSBEaWFsIFJlc3VsdCBNZXNzYWdlCi0KLSAgIElm IERJQUwgRElTUExBWSBpcyBub3QgT04sIHRoZSAiQ2FsbCBjb21wbGV0ZSIgbWVzc2FnZSBub3cg c2hvd3MgdGhlCi0gICBtb2RlbSdzIGNhbGwgcmVzdWx0IG1lc3NhZ2UsIGZvciBleGFtcGxlOgot Ci0gIERpYWxpbmc6IC4uLgotICBDYWxsIGNvbXBsZXRlOiAiQ09OTkVDVCAzMTIwMC9BUlEvVjMy L0xBUE0vVjQyQklTIgotCi0gICBUaGUgZXhhY3QgZm9ybWF0IGFuZCBjb250ZW50cyBvZiB0aGlz IG1lc3NhZ2UsIG9mIGNvdXJzZSwgZGVwZW5kcyBvbgotICAgdGhlIG1ha2UsIG1vZGVsLCBhbmQg Y29uZmlndXJhdGlvbiBvZiB5b3VyIG1vZGVtLCBzbyB1c2UgeW91ciBtb2RlbQotICAgbWFudWFs IHRvIGludGVycHJldCBpdC4gVGhlIGNhbGwgcmVzdWx0IG1lc3NhZ2UgaXMgYWxzbyBhdmFpbGFi bGUgaW4KLSAgIEMtS2VybWl0J3MgXHYoZGlhbHJlc3VsdCkgdmFyaWFibGUuCi0KLSAgQy1LZXJt aXQ+IGVjaG8gXHYoZGlhbHJlc3VsdCkKLSAgQ09OTkVDVCAzMTIwMC9BUlEvVjMyL0xBUE0vVjQy QklTCi0gIEMtS2VybWl0PiBlY2hvIFNwZWVkID0gXGZ3b3JkKFx2KGRpYWxyZXN1bHQpLDIpCi0g IFNwZWVkID0gMzEyMDAKLSAgQy1LZXJtaXQ+Ci0KLSAgIFN1cHBvc2UgeW91ciBtb2RlbSByZXBv cnRzIHRoZSBtb2R1bGF0aW9uIHNwZWVkIGFzIHNob3duIGFib3ZlIGFuZCB5b3UKLSAgIHdhbnQg dG8gZW5zdXJlIHlvdXIgY2FsbCBpcyBjb21wbGV0ZWQgYXQgKHNheSkgMjQwMDAgYnBzIG9yIG1v cmUuIFlvdQotICAgY2FuIHVzZSBhIGxpdHRsZSBtYWNybyB0byBkbyB0aGUgam9iOgotCi1kZWZp bmUgSFNESUFMIHsgICAgICAgICAgICAgICAgOyBIaWdoIFNwZWVkIERJQUwKLSAgICBsb2NhbCBc JXMKLSAgICBpZiA8IFx2KGFyZ2MpIDEgaWYgbm90IGRlZiBcdihkaWFsbnVtYmVyKSBlbmQgMSBV c2FnZTogXCUwIG51bWJlcgotICAgIHNldCBkaWFsIHJldHJpZXMgMTAwCi0gICAgc2V0IGRpYWwg aW50ZXJ2YWwgMQotICAgIHdoaWxlIHRydWUgewotICAgICAgICBkaWFsIFwlKgotICAgICAgICBp ZiBmYWlsIGVuZCAxIERJQUwgZmFpbGVkLgotICAgICAgICBhc2cgXCVzIFxmd29yZChcdihkaWFs cmVzdWx0KSwyKQotICAgICAgICBpZiBkZWYgXCVzIGlmIG51bWVyaWMgXCVzIGlmIG5vdCA8IFwl cyAyNDAwMCBicmVhawotICAgIH0KLX0KLQotICAgKFNlZSBbMzkyXVNlY3Rpb24gNy41IGFib3V0 IHRoZSBcJSogdmFyaWFibGUuKQotCi0yLjEuMi4gTG9uZy1EaXN0YW5jZSBEaWFsaW5nIENoYW5n ZXMKLQotICAgRHVlIHRvIHRoZSBnbHV0IG9mIGNlbGwgcGhvbmVzLCBwYWdlcnMsIGZheCBtYWNo aW5lcywgSVNQcywgZXRjLCBhcmVhCi0gICBjb2RlcyBhbmQgZGlhbGluZyBydWxlcyBhcmUgY2hh bmdpbmcgYWxsIHRoZSB0aW1lLiBJbiB0aGUgTm9ydGgKLSAgIEFtZXJpY2FuIE51bWJlcmluZyBQ bGFuIChOQU5QKSBjb3VudHJpZXMgKFVTQSwgQ2FuYWRhLCBldGMpLCBhcmVhIGNvZGVzCi0gICBh cmUgc3BsaXQgb3Igb3ZlcmxheWVkIHdpdGggaW5jcmVhc2luZyBmcmVxdWVuY3ksIGFuZCAxMC0g YW5kIDExLWRpZ2l0Ci0gICBkaWFsaW5nIGlzIGdyYWR1YWxseSBiZWNvbWluZyB0aGUgbm9ybSBm b3IgbG9jYWwgY2FsbHMuIENoYW5nZXMgYXJlCi0gICBvY2N1cnJpbmcgSW4gRXVyb3BlLCB0b28s IHBhcnRseSBmb3IgdGhlc2UgcmVhc29ucyBhbmQgcGFydGx5IGJlY2F1c2UKLSAgIG9mIHNvbWUg bmV3IEVDIHJ1bGVzLgotCi0gICBJbiBGcmFuY2UsIGVmZmVjdGl2ZSAxOCBPY3RvYmVyIDE5OTYs IGFsbCBjYWxscywgZXZlbiBsb2NhbCBvbmVzLCBtdXN0Ci0gICBiZSBkaWFsZWQgd2l0aCBhbiBh cmVhIGNvZGUuIEZyZW5jaCBhcmVhIGNvZGVzIGFyZSBwcmVzZW50bHkgMS1kaWdpdAotICAgbnVt YmVycywgMS02LCBhbmQgdGhlIGxvbmctZGlzdGFuY2UgZGlhbGluZyBwcmVmaXggaXMgMC4gQWxs IGNhbGxzCi0gICB3aXRoaW4gRnJhbmNlIGFyZSBjb25zaWRlcmVkIGxvbmcgZGlzdGFuY2UgYW5k IGJlZ2luIHdpdGggMDEsIDAyLCAuLi4sCi0gICAwNi4KLQotICAgRWZmZWN0aXZlIDEgTWF5IDE5 OTcsIGFsbCBjYWxscyB3aXRoaW4gdGhlIFVTIHN0YXRlIG9mIE1hcnlsYW5kLCBldmVuCi0gICBs b2NhbCBvbmVzLCBtdXN0IGJlIGRpYWxlZCB3aXRoIGFuIGFyZWEgY29kZSBidXQgd2l0aG91dCB0 aGUKLSAgIGxvbmctZGlzdGFuY2UgcHJlZml4IC0tIHRoaXMgaXMgdGhlIG5vdyB3aWRlbHkta25v d24gTm9ydGggQW1lcmljYW4KLSAgIHBoZW5vbWVub24gb2YgInRlbiBkaWdpdCBkaWFsaW5nIi4g VGhlIHNhbWUgaXMgaGFwcGVuaW5nIGVsc2V3aGVyZSAtLQotICAgbWFueSBjaXRpZXMgaW4gRmxv cmlkYSBhZG9wdGVkIDEwLWRpZ2l0IGRpYWxpbmcgaW4gMTk5OC4KLQotICAgSW4gSXRhbHkgYmVn aW5uaW5nIDE5IEp1bmUgMTk5OCwgYWxsIGNhbGxzIHRvIGZpeGVkIChhcyBvcHBvc2VkIHRvCi0g ICBtb2JpbGUpIG51bWJlcnMgbXVzdCBiZSBwcmVmaXhlZCBieSAwLiBXaGVuIGNhbGxpbmcgaW50 byBJdGFseSBmcm9tCi0gICBvdXRzaWRlLCB0aGUgMCBtdXN0IGZvbGxvdyB0aGUgY291bnRyeSBj b2RlICgzOSkuIENhbGxzIHRvIGNlbGwgcGhvbmVzLAotICAgaG93ZXZlciwgbXVzdCBiZSBwbGFj ZWQgd2l0aG91dCB0aGUgMC4gVGhlbiBvbiAyOSBEZWNlbWJlciAyMDAwLCB0aGUgMAotICAgd2ls bCBiZWNvbWUgYSA0IChmb3IgY2FsbGluZyBmaXhlZCBudW1iZXJzKSBhbmQgYSBwcmVmaXggb2Yg MyBtdXN0IHVzZWQKLSAgIGZvciBjYWxsaW5nIG1vYmlsZSBwaG9uZXMuIE1vcmUgaW5mbyBhdDoK LSAgIGh0dHA6Ly93d3cudGVsZWNvbWl0YWxpYS5pdC9ucG5uLy4KLQotICAgSW4gU3BhaW4sIGVm ZmVjdGl2ZSA0IEFwcmlsIDE5OTgsIHdpdGggaGFyZCBjdXRvdmVyIG9uIDE4IEp1bHkgMTk5OCwK LSAgIGFsbCBjYWxscyB3aXRoaW4gdGhlIGNvdW50cnkgbXVzdCBiZSBkaWFsZWQgd2l0aCA5IGRp Z2l0cywgYW5kIGFsbAotICAgY2FsbHMgZnJvbSBvdXRzaWRlIFNwYWluIG11c3QgYWxzbyBiZSBk aWFsZWQgd2l0aCA5IGRpZ2l0cyAoYWZ0ZXIgdGhlCi0gICBjb3VudHJ5IGNvZGUsIDM0KS4gVGhl IG5ldyA5LWRpZ2l0IG51bWJlcnMgYWxsIGJlZ2luIHdpdGggIjkiLiBNb3JlCi0gICBpbmZvIGF0 OiBbMzkzXWh0dHA6Ly93d3cudGVsZWZvbmljYS5lcy9jYW1iaW9kZW51bWVyYWNpb24vCi0KLSAg IFNldmVyYWwgbmV3IGRpYWxpbmcgZmVhdHVyZXMgYW5kIGNvbW1hbmRzIGhhdmUgYmVlbiBhZGRl ZCBpbiB2ZXJzaW9uCi0gICA2LjEgYW5kIDcuMCB0byBhZGRyZXNzIHRoZXNlIGNoYW5nZXMuCi0K LSAgIEMtS2VybWl0IDYuMCBhbmQgS2VybWl0IDk1IDEuMS4xMSBhbmQgZWFybGllciBoYW5kbGUg dGhlIEZyZW5jaAotICAgc2l0dWF0aW9uIHZpYSBhIHJlYXNvbmFibGUgc3VidGVyZnVnZSAoc2V0 dGluZyB0aGUgbG9jYWwgYXJlYSBjb2RlIHRvIGEKLSAgIG5vbmV4aXN0ZW50IG9uZSksIGJ1dCBk aWQgbm90IGhhbmRsZSAidGVuLWRpZ2l0IGRpYWxpbmciIHdlbGwgYXQgYWxsOwotICAgdGhlIHJl Y29tbWVuZGVkIHRlY2huaXF1ZSB3YXMgdG8gY2hhbmdlIHRoZSBsb25nLWRpc3RhbmNlIGRpYWxp bmcKLSAgIHByZWZpeCB0byBub3RoaW5nLCBidXQgdGhpcyBkZWZlYXRlZCBLZXJtaXQncyAibGlz dCBudW1iZXJzIGZvciBvbmUKLSAgIG5hbWUiIGZlYXR1cmUgd2hlbiB0aGUgbnVtYmVycyB3ZXJl IGluIGRpZmZlcmVudCBsb2NhdGlvbnMuIEZvcgotICAgZXhhbXBsZToKLQotICBzZXQgZGlhbCBs ZC1wcmVmaXgKLSAgZGlhbCBvbmxpbmVzZXJ2aWNlCi0KLSAgIHdoZXJlICJvbmxpbmVzZXJ2aWNl IiBpcyBhIGRpYWxpbmcgZGlyZWN0b3J5IGVudHJ5IG5hbWUgY29ycmVzcG9uZGluZwotICAgdG8g ZW50cmllcyB0aGF0IGFyZSBpbiAoc2F5KSBNYXJ5bGFuZCBhcyB3ZWxsIGFzIG90aGVyIHN0YXRl cywgd291bGQKLSAgIG5vdCBjb3JyZWN0bHkgZGlhbCB0aGUgbnVtYmVycyBub3QgaW4gTWFyeWxh bmQuCi0KLSAgIEEgbmV3IGNvbW1hbmQgbGV0cyB5b3Ugc3BlY2lmeSBhIGxpc3Qgb2YgYXJlYSBj b2RlcyB0byBiZSBjb25zaWRlcmVkCi0gICBsb2NhbCwgZXhjZXB0IHRoYXQgdGhlIGFyZWEgY29k ZSBtdXN0IGJlIGRpYWxlZDoKLQotICAgU0VUIERJQUwgTEMtQVJFQS1DT0RFUyBbIGFyZWFjb2Rl IFsgYXJlYWNvZGUgWyBhcmVhY29kZSBbIC4uLiBdIF0gXSBdCi0gICAgICAgICAgVGhlIGxpc3Qg bWF5IGluY2x1ZGUgdXAgdG8gMzIgYXJlYSBjb2Rlcy4gSWYgYSBudW1iZXIgaXMgY2FsbGVkCi0g ICAgICAgICAgd2hvc2UgYXJlYSBjb2RlIGlzIGluIHRoaXMgbGlzdCwgaXQgaXMgZGlhbGVkIFdJ VEhPVVQgdGhlCi0gICAgICAgICAgbG9uZy1kaXN0YW5jZSBwcmVmaXgsIGJ1dCBXSVRIIHRoZSBh cmVhIGNvZGUuCi0KLSAgIFNvIGluIE1hcnlsYW5kLCB3aGljaCAobGFzdCB0aW1lIHdlIGxvb2tl ZCkgaGFzIHR3byBhcmVhIGNvZGVzLCA0MTAgYW5kCi0gICAzMDEsIHRoZSBzZXR1cCB3b3VsZCBi ZToKLQotICBTRVQgRElBTCBMQy1BUkVBLUNPREVTIDQxMCAzMDEKLQotICAgRXhhbXBsZToKLQot ICBTRVQgRElBTCBMRC1QUkVGSVggMQotICBTRVQgRElBTCBBUkVBLUNPREUgMzAxCi0gIFNFVCBE SUFMIExDLUFSRUEtQ09ERVMgNDEwIDMwMSA8LS0gQXJlYSBjb2RlcyBpbiAxMC1kaWdpdCBkaWFs aW5nIHJlZ2lvbgotICBESUFMICsxICgzMDEpIDc2NS00MzIxICAgICAgICAgPC0tIERpYWxzIDMw MTc2NTQzMjEgIChsb2NhbCB3aXRoIGFyZWEgY29kZSkKLSAgRElBTCArMSAoNDEwKSA3NjUtNDMy MSAgICAgICAgIDwtLSBEaWFscyA0MTA3NjU0MzIxICAobG9jYWwgd2l0aCBhcmVhIGNvZGUpCi0g IERJQUwgKzEgKDIxMikgNzY1LTQzMjEgICAgICAgICA8LS0gRGlhbHMgMTIxMjc2NTQzMjEgKGxv bmcgZGlzdGFuY2UpCi0KLSAgIFRoZSBTRVQgRElBTCBMQy1BUkVBLUNPREVTIGNvbW1hbmQgZG9l cyBub3QgcmVwbGFjZSB0aGUgU0VUIERJQUwKLSAgIEFSRUEtQ09ERSBjb21tYW5kLiBUaGUgbGF0 dGVyIHNwZWNpZmllcyB0aGUgYXJlYSBjb2RlIHlvdSBhcmUgZGlhbGluZwotICAgZnJvbS4gSWYg dGhlIGNhbGxlZCBudW1iZXIgaXMgaW4gdGhlIHNhbWUgYXJlYSBjb2RlLCB0aGVuIHRoZSBhcmVh IGNvZGUKLSAgIGlzIGRpYWxlZCBpZiBpdCBpcyBhbHNvIGluIHRoZSBMQy1BUkVBLUNPREVTIGxp c3QsIGFuZCBpdCBpcyBub3QgZGlhbGVkCi0gICBvdGhlcndpc2UuIFNvIGlmICIzMDEiIGhhZCBu b3QgYXBwZWFyZWQgaW4gdGhlIExDLUFSRUEtQ09ERVMgbGlzdCBpbgotICAgdGhlIHByZXZpb3Vz IGV4YW1wbGU6Ci0KLSAgU0VUIERJQUwgTEQtUFJFRklYIDEKLSAgU0VUIERJQUwgQVJFQS1DT0RF IDMwMQotICBTRVQgRElBTCBMQy1BUkVBLUNPREVTIDQxMCAgICAgPC0tIEFyZWEgY29kZXMgaW4g MTAtZGlnaXQgZGlhbGluZyByZWdpb24KLSAgRElBTCArMSAoMzAxKSA3NjUtNDMyMSAgICAgICAg IDwtLSBEaWFscyA3NjU0MzIxICAgICAobG9jYWwpCi0gIERJQUwgKzEgKDQxMCkgNzY1LTQzMjEg ICAgICAgICA8LS0gRGlhbHMgNDEwNzY1NDMyMSAgKGxvY2FsIHdpdGggYXJlYSBjb2RlKQotICBE SUFMICsxICgyMTIpIDc2NS00MzIxICAgICAgICAgPC0tIERpYWxzIDEyMTI3NjU0MzIxIChsb25n IGRpc3RhbmNlKQotCi0gICBUaGUgbmV3IEtlcm1pdCB2ZXJzaW9ucyBhbHNvIGFkZCBhIExvY2Fs IENhbGwgUHJlZml4IGFuZCBMb2NhbCBDYWxsCi0gICBTdWZmaXgsIGluIGNhc2UgeW91IGhhdmUg YW55IG5lZWQgZm9yIGl0LiBUaGVzZSBhcmUgYWRkZWQgdG8gdGhlCi0gICBiZWdpbm5pbmcgYW5k IG9mIGxvY2FsIHBob25lIG51bWJlcnMgKGkuZS4gbnVtYmVycyB0aGF0IGFyZSBub3QKLSAgIGxv bmctZGlzdGFuY2Ugb3IgaW50ZXJuYXRpb25hbCkuIEV4YW1wbGVzOgotCi0gIFNFVCBESUFMIExE LVBSRUZJWCAxCi0gIFNFVCBESUFMIExDLVBSRUZJWCA5Ci0gIFNFVCBESUFMIExDLVNVRkZJWCAq Ci0gIFNFVCBESUFMIExDLUFSRUEtQ09ERVMgNDEwICAgICA8LS0gQXJlYSBjb2RlcyBpbiAxMC1k aWdpdCBkaWFsaW5nIHJlZ2lvbgotICBTRVQgRElBTCBBUkVBLUNPREUgMzAxCi0gIERJQUwgKzEg KDMwMSkgNzY1LTQzMjEgICAgICAgICA8LS0gRGlhbHMgOTc2NTQzMjEqICAgICAobG9jYWwpCi0g IERJQUwgKzEgKDQxMCkgNzY1LTQzMjEgICAgICAgICA8LS0gRGlhbHMgOTQxMDc2NTQzMjEqICAo bG9jYWwgd2l0aCBhcmVhIGNvZGUpCi0gIERJQUwgKzEgKDIxMikgNzY1LTQzMjEgICAgICAgICA8 LS0gRGlhbHMgMTIxMjc2NTQzMjEgICAobG9uZyBkaXN0YW5jZSkKLQotMi4xLjMuIEZvcmNpbmcg TG9uZy1EaXN0YW5jZSBEaWFsaW5nCi0KLSAgIFN1cHBvc2UgYSBudW1iZXIgaXMgaW4geW91ciBj b3VudHJ5IGFuZCBhcmVhLCBidXQgZm9yIHNvbWUgcmVhc29uIHlvdQotICAgbmVlZCB0byBkaWFs IGl0IGxvbmctZGlzdGFuY2UgYW55d2F5IChhcyBpcyBhbHdheXMgdGhlIGNhc2UgaW4gRnJhbmNl KS4KLSAgIFRoZXJlIGhhdmUgYWx3YXlzIGJlZW4gdmFyaW91cyB3YXlzIHRvIGhhbmRsZSB0aGlz OgotCi0gICAgMS4gVGVtcG9yYXJpbHkgc2V0IHlvdXIgYXJlYSBjb2RlIHRvIGEgZGlmZmVyZW50 IChvciBub25leGlzdGVudCBvcgotICAgICAgIGltcG9zc2libGUpIG9uZSAoYnV0IHRoaXMgcmVx dWlyZWQga25vd2xlZGdlIG9mIHdoaWNoIGFyZWEgY29kZXMKLSAgICAgICB3ZXJlIG5vbmV4aXN0 ZW50IG9yIGltcG9zc2libGUgaW4gZWFjaCBjb3VudHJ5KS4KLSAgICAyLiBEaWFsIHRoZSBudW1i ZXIgbGl0ZXJhbGx5IGluc3RlYWQgb2YgdXNpbmcgdGhlIHBvcnRhYmxlIGZvcm1hdCwgYnV0Ci0g ICAgICAgdGhpcyBkZWZlYXRzIHRoZSBwdXJwb3NlIG9mIHRoZSBwb3J0YWJsZSBkaWFsaW5nIGRp cmVjdG9yeS4KLQotICAgTm93IHRoZXJlIGlzIGFsc28gYSBuZXcgY29tbWFuZCB0aGF0LCB2ZXJ5 IHNpbXBseSwgY2FuIGZvcmNlCi0gICBsb25nLWRpc3RhbmNlIGRpYWxpbmc6Ci0KLSAgIFNFVCBE SUFMIEZPUkNFLUxPTkctRElTVEFOQ0UgeyBPTiwgT0ZGIH0KLSAgICAgICAgICBJZiBhIGNhbGwg aXMgcGxhY2VkIHRvIGEgcG9ydGFibGUgcGhvbmUgbnVtYmVyIHdpdGhpbiB0aGUgc2FtZQotICAg ICAgICAgIGNvdW50cnkgY29kZSBhcyB0aGUgY2FsbGluZyBudW1iZXIsIGl0IGlzIGRpYWxlZCB3 aXRoIHRoZQotICAgICAgICAgIGxvbmctZGlzdGFuY2UgcHJlZml4IGFuZCB0aGUgYXJlYSBjb2Rl IGlmIEZPUkNFLUxPTkctRElTVEFOQ0UgaXMKLSAgICAgICAgICBPTi4gSWYgT0ZGLCB0aGUgcmVn dWxhciBydWxlcyBhbmQgcHJvY2VkdXJlcyBhcHBseS4KLQotICAgRXhhbXBsZSAoRnJhbmNlKToK LQotICBTRVQgRElBTCBDT1VOVFJZLUNPREUgMzMKLSAgU0VUIERJQUwgQVJFQS1DT0RFIDYKLSAg U0VUIERJQUwgRk9SQ0UtTE9ORy1ESVNUQU5DRSBPTgotCi0gICAoSW4gZmFjdCwgU0VUIERJQUwg Q09VTlRSWS1DT0RFIDMzIGF1dG9tYXRpY2FsbHkgc2V0cyBESUFMCi0gICBGT1JDRS1MT05HLURJ U1RBTkNFIE9OLi4uKQotCi0gICBFeGFtcGxlIChVU0EsIGZvciBhIGNlcnRhaW4gdHlwZSBvZiBy ZXZlcnNlLWNoYXJnZSBjYWxsaW5nIGluIHdoaWNoIHRoZQotICAgY2FsbGVkIG51bWJlciBtdXN0 IGFsd2F5cyBiZSBmdWxseSBzcGVjaWZpZWQpOgotCi0gIFNFVCBESUFMIFBSRUZJWCAxODAwMjY2 NjMyOCQgICAgIDsgMS04MDAtQ09MTEVDVAotICBTRVQgRElBTCBDT1VOVFJZLUNPREUgMQotICBT RVQgRElBTCBBUkVBLUNPREUgMjEyCi0gIFNFVCBESUFMIEZPUkNFLUxPTkctRElTVEFOQ0UgT04K LQotICAgRXhhbXBsZSAoVG9yb250bywgd2hlcmUgY2FsbHMgdG8gZXhjaGFuZ2UgOTc2IHdpdGhp biBhcmVhIGNvZGUgNDE2IG11c3QKLSAgIGJlIGRpYWxlZCBhcyBsb25nIGRpc3RhbmNlLCBldmVu IHdoZW4geW91IGFyZSBkaWFsaW5nIGZyb20gYXJlYSBjb2RlCi0gICA0MTYpOgotCi0gIFNFVCBE SUFMIENPVU5UUlktQ09ERSAxCi0gIFNFVCBESUFMIEFSRUEtQ09ERSA0MTYKLSAgU0VUIERJQUwg Rk9SQ0UtTE9ORy1ESVNUQU5DRSBPTgotICBESUFMICsxICg0MTYpIDk3Ni14eHh4Ci0KLSAgIElm IGRpYWxpbmcgbWV0aG9kcyB3ZXJlIGNvbnNpc3RlbnQgYW5kIHNlbnNpYmxlLCBvZiBjb3Vyc2Ug aXQgd291bGQgYmUKLSAgIHBvc3NpYmxlIHRvIGFsd2F5cyBkaWFsIGV2ZXJ5IGRvbWVzdGljIGNh bGwgYXMgaWYgaXQgd2VyZSBsb25nCi0gICBkaXN0YW5jZS4gQnV0IGluIG1hbnkgbG9jYXRpb25z IHRoaXMgZG9lc24ndCB3b3JrIG9yIGlmIGl0IGRvZXMsIGl0Ci0gICBjb3N0cyBleHRyYS4gVGhl IGZvbGxvd2luZyBtYWNybyBjYW4gYmUgdXNlZCBmb3IgZGlhbGluZyBhbnkgZ2l2ZW4KLSAgIG51 bWJlciB3aXRoIGZvcmNlZCBsb25nLWRpc3RhbmNlIGZvcm1hdDoKLQotICBkZWZpbmUgTERJQUwg ewotICAgICAgbG9jYWwgXCV4Ci0gICAgICBzZXQgZGlhbCBmb3JjZS1sb25nLWRpc3RhbmNlIG9u Ci0gICAgICBkaWFsIFwlKgotICAgICAgYXNnIFwleCBcdihzdWNjZXNzKQotICAgICAgc2V0IGRp YWwgZm9yY2UtbG9uZy1kaXN0YW5jZSBvZmYKLSAgICAgIGVuZCBcJXgKLSAgfQotCi0gICAoU2Vl IFszOTRdU2VjdGlvbiA3LjUgYWJvdXQgdGhlIFwlKiB2YXJpYWJsZS4pCi0KLTIuMS40LiBFeGNo YW5nZS1TcGVjaWZpYyBEaWFsaW5nIERlY2lzaW9ucwotCi0gICBUaGlzIGFwcGxpZXMgbWFpbmx5 IHRvIHRoZSBOb3J0aCBBbWVyaWNhbiBOdW1iZXJpbmcgUGxhbiAoTkFOUCkuIFJlZmVyCi0gICB0 byB0aGUgc2VjdGlvbiAiQWx0ZXJuYXRpdmUgbm90YXRpb25zIiBpbiBbMzk1XVVzaW5nIEMtS2Vy bWl0IDJuZAotICAgRWRpdGlvbiwgcGFnZXMgMTA2LTEwNywgYW5kIHRoZSBzdG9yeSBhYm91dCBU b3JvbnRvIG9uIHBhZ2UgMTEwLiBVc2luZwotICAgdGhlIG5ldyBMQy1BUkVBLUNPREVTIGxpc3Qs IHdlIGNhbiBhZGRyZXNzIHRoZSBwcm9ibGVtIGJ5IHRyZWF0aW5nIHRoZQotICAgZXhjaGFuZ2Ug YXMgcGFydCBvZiB0aGUgYXJlYSBjb2RlOgotCi0gIFNFVCBESUFMIExELVBSRUZJWCAxCi0gIFNF VCBESUFMIEFSRUEtQ09ERSA0MTYKLSAgU0VUIERJQUwgTEMtQVJFQS1DT0RFUyA5MDUyNzYKLSAg RElBTCArMSA0MTYgNzY1IDQzMjEgICAgICAgICAgICAgICA8LS0gNzY1NDMyMSAgICAgIChsb2Nh bCkKLSAgRElBTCArMSA5MDUgMjc2IDQzMjEgICAgICAgICAgICAgICA8LS0gOTA1Mjc2NDMyMSAg IChsb2NhbCB3aXRoIGFyZWEgY29kZSkKLSAgRElBTCArMSA5MDUgNTI4IDQzMjEgICAgICAgICAg ICAgICA8LS0gMTkwNTUyODQzMjEgIChsb25nIGRpc3RhbmNlKQotCi0gICBUaGUgc2FtZSB0ZWNo bmlxdWUgY2FuIGJlIHVzZWQgaW4gTWFzc2FjaHVzZXR0cyAoc3RvcnkgYXQgdG9wIG9mIHBhZ2UK LSAgIDExMSkgYW5kIGluIGFueSBvdGhlciBwbGFjZSB3aGVyZSBkaWFsaW5nIHRvIHNvbWUgZXhj aGFuZ2VzIHdpdGhpbiBhCi0gICBwYXJ0aWN1bGFyIGFyZWEgY29kZSBpcyBsb2NhbCwgYnV0IHRv IG90aGVycyBpbiB0aGUgc2FtZSBhcmVhIGNvZGUgaXMKLSAgIGxvbmcgZGlzdGFuY2UuCi0KLTIu MS41LiBDYXV0aW9ucyBhYm91dCBDaGVhcGVzdC1GaXJzdCBEaWFsaW5nCi0KLSAgIEtlcm1pdCBk b2VzIG5vdCBtYWludGFpbiBhIGtub3dsZWRnZSBiYXNlIG9mIHRlbGVwaG9ueSBpbmZvcm1hdGlv bjsgaXQKLSAgIG9ubHkgcHJvdmlkZXMgdGhlIHRvb2xzIHRvIGxldCB5b3UgZW50ZXIgYSBwaG9u ZSBudW1iZXIgaW4gYSBzdGFuZGFyZAotICAgZm9ybWF0IGFuZCBkaWFsIGl0IGNvcnJlY3RseSBm cm9tIGFueSBsb2NhdGlvbiBpbiBtb3N0IGNhc2VzLgotCi0gICBJbiBwYXJ0aWN1bGFyLCBLZXJt aXQgZG9lcyBub3QgZGlmZmVyZW50aWF0ZSB0aGUgY2hhcmdpbmcgbWV0aG9kIGZyb20KLSAgIHRo ZSBkaWFsaW5nIG1ldGhvZC4gSWYgYSBjYWxsIHRoYXQgaXMgRElBTEVEIGFzIGxvbmctZGlzdGFu Y2UgKGUuZy4KLSAgIGZyb20gMjEyIHRvIDcxOCBpbiBjb3VudHJ5IGNvZGUgMSkgaXMgbm90IENI QVJHRUQgYXMgbG9uZyBkaXN0YW5jZSwgd2UKLSAgIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgdGhh dCB3aXRob3V0IGtlZXBpbmcgYSBtYXRyaXggb2YgY2hhcmdpbmcKLSAgIGluZm9ybWF0aW9uIGZv ciBldmVyeSBhcmVhLWNvZGUgY29tYmluYXRpb24gd2l0aGluIGV2ZXJ5IGNvdW50cnksIGFuZAot ICAgYW55IHN1Y2ggbWF0cml4IHdvdWxkIGJlIG9ic29sZXRlIGZpdmUgbWludXRlcyBhZnRlciBp dCB3YXMKLSAgIGNvbnN0cnVjdGVkLiBUaHVzLCAiY2hlYXBlc3QtZmlyc3QiIHNvcnRpbmcgaXMg b25seSBhcyByZWxpYWJsZSBhcyBvdXIKLSAgIGFzc3VtcHRpb24gdGhhdCB0aGUgY2hhcmdpbmcg bWV0aG9kIGZvbGxvd3MgdGhlIGRpYWxpbmcgbWV0aG9kLiBBIGdvb2QKLSAgIGlsbHVzdHJhdGlv biB3b3VsZCBiZSBjZXJ0YWluIG9ubGluZSBzZXJ2aWNlcyB0aGF0IGhhdmUgdG9sbC1mcmVlCi0g ICBkaWFsdXAgbnVtYmVycyB3aGljaCB0aGV5IGNoYXJnZSB5b3UgYSBwcmVtaXVtIChpbiB5b3Vy IG9ubGluZSBzZXJ2aWNlCi0gICBiaWxsKSBmb3IgdXNpbmcuCi0KLTIuMS42LiBCbGluZCBEaWFs aW5nIChEaWFsaW5nIHdpdGggTm8gRGlhbHRvbmUpCi0KLSAgIEMtS2VybWl0J3MgaW5pdCBzdHJp bmcgZm9yIEhheWVzLWxpa2UgbW9kZW1zIGdlbmVyYWxseSBpbmNsdWRlcyBhbiBYNAotICAgY29t bWFuZCB0byBlbmFibGUgYXMgbWFueSByZXN1bHQgY29kZXMgYXMgcG9zc2libGUsIHNvIHRoYXQg S2VybWl0IGNhbgotICAgcmVhY3QgYXBwcm9wcmlhdGVseSB0byBkaWZmZXJlbnQgZmFpbHVyZSBy ZWFzb25zLiBPbmUgb2YgdGhlIHJlc3VsdAotICAgY29kZXMgdGhhdCBYNCBlbmFibGVzIGlzICJO TyBESUFMVE9ORSIuIEEgcGVyaGFwcyBub3Qgb2J2aW91cyBzaWRlCi0gICBlZmZlY3Qgb2YgZW5h YmxpbmcgdGhpcyByZXN1bHQgY29kZSB0aGF0IHRoZSBtb2RlbSBtdXN0IGhlYXIgZGlhbHRvbmUK LSAgIGJlZm9yZSBpdCB3aWxsIGRpYWwuCi0KLSAgIEl0IGlzIGJlY29taW5nIGluY3JlYXNpbmds eSBuZWNlc3NhcnkgdG8gZm9yY2UgYSBtb2RlbSB0byBkaWFsIGV2ZW4KLSAgIHRob3VnaCBpdCBk b2VzIG5vdCBoZWFyIGEgZGlhbHRvbmUgb24gdGhlIHBob25lIGxpbmU7IGZvciBleGFtcGxlLCB3 aXRoCi0gICBQQlhzIHRoYXQgaGF2ZSBzdHJhbmdlIGRpYWx0b25lcywgb3Igd2l0aCBwaG9uZSBz eXN0ZW1zIGluIGRpZmZlcmVudAotICAgY291bnRyaWVzLCBvciB3aXRoIElTRE4gcGhvbmVzLCBl dGMuIFRoaXMgaXMgY2FsbGVkICJibGluZCBkaWFsaW5nIi4KLQotICAgQy1LZXJtaXQgNy4wIGhh cyB0d28gbmV3IGNvbW1hbmRzIHRvIGNvcGUgd2l0aCB0aGlzIHNpdHVhdGlvbjoKLQotICAgU0VU IERJQUwgSUdOT1JFLURJQUxUT05FIHsgT04sIE9GRiB9Ci0gICAgICAgICAgT0ZGICh0aGUgZGVm YXVsdCkgbWVhbnMgdG8gdGVsbCB0aGUgbW9kZW0gdG8gd2FpdCBmb3IgZGlhbHRvbmUKLSAgICAg ICAgICBiZWZvcmUgZGlhbGluZy4gT04gbWVhbnMgdG8gZW5hYmxlICJibGluZCBkaWFsaW5nIiwg aS5lLiB0ZWxsCi0gICAgICAgICAgdGhlIG1vZGVtIE5PVCB0byB3YWl0IGZvciBkaWFsdG9uZSBi ZWZvcmUgZGlhbGluZy4gR2VuZXJhbGx5Ci0gICAgICAgICAgdGhpcyBpcyBhY2NvbXBsaXNoZWQg Ynkgc2VuZGluZyBBVFgzIHRvIHRoZSBtb2RlbSBqdXN0IHByaW9yIHRvCi0gICAgICAgICAgZGlh bGluZy4gU0VUIE1PREVNIFRZUEUgeHh4IGFuZCB0aGVuIFNIT1cgTU9ERU0gZGlzcGxheXMKLSAg ICAgICAgICBLZXJtaXQncyBidWlsdC1pbiAiaWdub3JlIGRpYWx0b25lIiBjb21tYW5kLgotCi0g ICBTRVQgRElBTCBDT01NQU5EIElHTk9SRS1ESUFMVE9ORSB0ZXh0Ci0gICAgICAgICAgVGhpcyBs ZXRzIHlvdSBjaGFuZ2UgdGhlIGJ1aWx0LWluIGlnbm9yZS1kaWFsdG9uZSBjb21tYW5kIChzdWNo Ci0gICAgICAgICAgYXMgQVRYMykgdG8gd2hhdGV2ZXIgeW91IGNob29zZSwgaW4gY2FzZSB0aGUg YnVpbHQtaW4gb25lIGRvZXMKLSAgICAgICAgICBub3Qgd29yaywgb3IgYW5vdGhlciBjb21tYW5k IHdvcmtzIGJldHRlci4KLQotICAgTm90ZXM6Ci0gICAgMS4gVGhlIGlnbm9yZS1kaWFsdG9uZSBj b21tYW5kIGlzIG5vdCBzZW50IHVubGVzcyBTRVQgRElBTAotICAgICAgIElHTk9SRS1ESUFMVE9O RSBpcyBPTi4KLSAgICAyLiBUaGUgQVRYMyBjb21tYW5kIGdlbmVyYWxseSBkaXNhYmxlcyBub3Qg b25seSBOTyBESUFMVE9ORSwgYnV0IGFsc28KLSAgICAgICBCVVNZLiBTbyB0aGlzIHdpbGwgcHJl dmVudCBLZXJtaXQgZnJvbSBkZXRlY3Rpbmcgd2hlbiB0aGUgbGluZSBpcwotICAgICAgIGJ1c3ku IFRoaXMgaXMgYSBwcm9wZXJ0eSBvZiB0aGUgbW9kZW0sIG5vdCBvZiBLZXJtaXQuCi0KLTIuMS43 LiBUcmltbWluZyB0aGUgRGlhbGluZyBEaWFsb2cKLQotICAgVGhlIGNvbW1hbmQ6Ci0KLSAgU0VU IE1PREVNIENPTU1BTkQgYWN0aW9uIFsgY29tbWFuZCBdCi0KLSAgIGlzIHVzZWQgdG8gb3ZlcnJp ZGUgS2VybWl0J3MgYnVpbHQtaW4gbW9kZW0gY29tbWFuZHMgZm9yIGVhY2ggYWN0aW9uLAotICAg Zm9yIGVhY2gga2luZCBvZiBtb2RlbSBpbiBpdHMgaW50ZXJuYWwgZGF0YWJhc2UuIElmIHlvdSBp bmNsdWRlIGEKLSAgIGNvbW1hbmQsIHRoaXMgaXMgdXNlZCBpbnN0ZWFkIG9mIHRoZSBidWlsdC1p biBvbmUuIElmIHlvdSBvbWl0IHRoZQotICAgY29tbWFuZCwgdGhpcyByZXN0b3JlcyB0aGUgb3Jp Z2luYWwgYnVpbHQtaW4gY29tbWFuZC4KLQotICAgSWYgeW91IHdhbnQgdG8gb21pdCB0aGUgY29t bWFuZCBhbHRvZ2V0aGVyLCBzbyBLZXJtaXQgZG9lc24ndCBzZW5kIHRoZQotICAgY29tbWFuZCBh dCBhbGwsIG9yIHdhaXQgZm9yIGEgcmVzcG9uc2UsIHVzZToKLQotICBTRVQgTU9ERU0gQ09NTUFO RCBhY3Rpb24ge30KLQotICAgVGhhdCBpcywgc3BlY2lmeSBhIHBhaXIgb2YgZW1wdHkgYnJhY2Vz IGFzIHRoZSBjb21tYW5kLCBmb3IgZXhhbXBsZToKLQotICBTRVQgTU9ERU0gQ09NTUFORCBFUlJP Ui1DT1JSRUNUSU9OIE9OIHt9Ci0KLTIuMS44LiBDb250cm9sbGluZyB0aGUgRGlhbGluZyBTcGVl ZAotCi0gICBUaGUgcmF0ZSBhdCB3aGljaCBjaGFyYWN0ZXJzIGFyZSBzZW50IHRvIHRoZSBtb2Rl bSBkdXJpbmcgZGlhbGluZyBpcwotICAgbm9ybWFsbHkgY29udHJvbGxlZCBieSB0aGUgYnVpbHQt aW4gbW9kZW0gZGF0YWJhc2UuIFlvdSBtaWdodCB3YW50IHRvCi0gICBvdmVycmlkZSB0aGlzIGlm IEtlcm1pdCBzZWVtcyB0byBiZSBkaWFsaW5nIHRvbyBzbG93bHksIG9yIGl0IGlzCi0gICBzZW5k aW5nIGNoYXJhY3RlcnMgdG8gdGhlIG1vZGVtIGZhc3RlciB0aGFuIHRoZSBtb2RlbSBoYW5kbGUg dGhlbS4gQQotICAgbmV3IGNvbW1hbmQgd2FzIGFkZGVkIGZvciB0aGlzIGluIEMtS2VybWl0IDcu MDoKLQotICAgU0VUIERJQUwgUEFDSU5HIG51bWJlcgotICAgICAgICAgIFNwZWNpZmllcyB0aGUg bnVtYmVyIG9mIG1pbGxpc2Vjb25kcyAodGhvdXNhbmR0aHMgb2Ygc2Vjb25kcykgdG8KLSAgICAg ICAgICBwYXVzZSBiZXR3ZWVuIGVhY2ggY2hhcmFjdGVyIHdoZW4gc2VuZGluZyBjb21tYW5kcyB0 byB0aGUgbW9kZW0KLSAgICAgICAgICBkdXJpbmcgRElBTCBvciBBTlNXRVIgY29tbWFuZCBleGVj dXRpb24uIDAgbWVhbnMgbm8gcGF1c2UgYXQKLSAgICAgICAgICBhbGwsIC0xICh0aGUgZGVmYXVs dCkgb3IgYW55IG90aGVyIG5lZ2F0aXZlIG51bWJlciBtZWFucyB0byB1c2UKLSAgICAgICAgICB0 aGUgdmFsdWUgZnJvbSB0aGUgZGF0YWJhc2UuIEFueSBudW1iZXIgZ3JlYXRlciB0aGFuIDAgaXMg dGhlCi0gICAgICAgICAgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBwYXVzZS4KLQotICAgSElO VDogWW91IG1pZ2h0IGFsc28gbmVlZCB0byBjb250cm9sIHRoZSByYXRlIGF0IHdoaWNoIHRoZSBt b2RlbQotICAgZ2VuZXJhdGVzIFRvdWNoIFRvbmVzIGR1cmluZyBkaWFsaW5nLCBmb3IgZXhhbXBs ZSB3aGVuIHNlbmRpbmcgYQotICAgbnVtZXJpYyBwYWdlLiBUaGVyZSBhcmUgdHdvIHdheXMgdG8g ZG8gdGhpcy4gT25lIHdheSBpcyB0byBpbnNlcnQgcGF1c2UKLSAgIGNoYXJhY3RlcnMgaW50byB0 aGUgZGlhbGluZyBzdHJpbmcuIEZvciBtb2RlbXMgdGhhdCB1c2UgdGhlIEFUIGNvbW1hbmQKLSAg IHNldCwgdGhlIHBhdXNlIGNoYXJhY3RlciBpcyBjb21tYSAoLCkgYW5kIGNhdXNlcyBhIDItc2Vj b25kIHBhdXNlLiBPbgotICAgbW9zdCBtb2RlbXMsIHlvdSBjYW4gdXNlIHRoZSBTOCByZWdpc3Rl ciB0byBjaGFuZ2UgdGhlIHBhdXNlIGludGVydmFsCi0gICBjYXVzZWQgYnkgY29tbWEgaW4gdGhl IGRpYWxpbmcgc3RyaW5nLiBUaGUgb3RoZXIgd2F5IGlzIHRvIHNldCB5b3VyCi0gICBtb2RlbSdz IHRvbmUgZ2VuZXJhdGlvbiBpbnRlcnZhbCwgaWYgaXQgaGFzIGEgY29tbWFuZCBmb3IgdGhhdC4g TW9zdAotICAgQVQtY29tbWFuZC1zZXQgbW9kZW1zIHVzZSBTMTEgZm9yIHRoaXM7IHRoZSB2YWx1 ZSBpcyBpbiBtaWxsaXNlY29uZHMuCi0gICBGb3IgZXhhbXBsZSBvbiBVU1IgbW9kZW1zOgotCi0g IEFUUzExPTIwMAotCi0gICBzZWxlY3RzIGFuIGludGVydmFsIG9mIDIwMCBtaWxsaXNlY29uZHMg dG8gc2VwYXJhdGUgZWFjaCBkaWFsaW5nIHRvbmUuCi0KLSAgIEhpbnQ6IFRvIGFkZCBTLVJlZ2lz dGVyIHNldHRpbmdzIG9yIG90aGVyIGNvbW1hbmRzIHRvIHlvdXIgZGlhbGluZwotICAgcHJvY2Vk dXJlLCB1c2UgdGhlIG5ldyBTRVQgTU9ERU0gQ09NTUFORCBQUkVESUFMLUlOSVQgY29tbWFuZAot ICAgKFszOTZdU2VjdGlvbiAyLjIuMikuCi0KLTIuMS45LiBQcmV0ZXN0aW5nIFBob25lIE51bWJl ciBDb252ZXJzaW9ucwotCi0gICBUaGUgTE9PS1VQIGNvbW1hbmQgbm93IGFjY2VwdHMgdGVsZXBo b25lIG51bWJlcnMgYXMgd2VsbCBhcwotICAgZGlyZWN0b3J5LWVudHJ5IG5hbWVzLCBmb3IgZXhh bXBsZToKLQotICBMT09LVVAgKzEgKDIxMikgNzY1NDMyMQotCi0gICBXaGVuIGdpdmVuIGEgcGhv bmUgbnVtYmVyLCBMT09LVVAgcHJpbnRzIHRoZSByZXN1bHQgb2YgY29udmVydGluZyB0aGUKLSAg IHBob25lIG51bWJlciBmb3IgZGlhbGluZyB1bmRlciB0aGUgY3VycmVudCBkaWFsaW5nIHJ1bGVz LiBGb3IgZXhhbXBsZSwKLSAgIGlmIG15IGNvdW50cnkgY29kZSBpcyAxIGFuZCBteSBhcmVhIGNv ZGUgaXMgMjEyLCBhbmQgSSBhbSBkaWFsaW5nIG91dAotICAgZnJvbSBhIFBCWCB3aG9zZSBvdXRz aWRlLWxpbmUgcHJlZml4IGlzICI5MywiOgotCi0gIEMtS2VybWl0PiBsb29rdXAgKzEgKDIxMikg NzY1NDMyMQotICArMSAoMjEyKSA3NjU0MzIxID0+IDkzLDc2NTQzMjEKLSAgQy1LZXJtaXQ+Ci0K LSAgIFlvdSBjYW4gYWxzbyB1c2UgdGhlIFxmZGlhbGNvbnZlcnQocGhvbmUtbnVtYmVyKSBmdW5j dGlvbiAoWzM5N11TZWN0aW9uCi0gICAyLjEuMTEpIHRvIGRvIHRoaXMgcHJvZ3JhbW1hdGljYWxs eToKLQotICBDLUtlcm1pdD4gZWNobyAiXGZkaWFsY29udmVydCgrMSAoMjEyKSA3NjU0MzIxKSIK LSAgIjkzLDc2NTQzMjEiCi0gIEMtS2VybWl0PgotCi0gICBTbyB0aGUgbmV3IExPT0tVUCBiZWhh dmVzIGFzIGZvbGxvd3M6Ci0KLSAgIExPT0tVUCBwb3J0YWJsZS1mb3JtYXQtcGhvbmUtbnVtYmVy Ci0gICAgICAgICAgRGlzcGxheXMgaG93IHRoZSBudW1iZXIgd291bGQgYWN0dWFsbHkgYmUgZGlh bGVkIFNldHMgRkFJTFVSRSBpZgotICAgICAgICAgIHRoZXJlIHdhcyBhIGNvbnZlcnNpb24gZXJy b3IsIG90aGVyd2lzZSBTVUNDRVNTLgotCi0gICBMT09LVVAgbGl0ZXJhbC1mb3JtYXQtcGhvbmUt bnVtYmVyCi0gICAgICAgICAgRGlzcGxheXMgdGhlIHNhbWUgbGl0ZXJhbC1mb3JtYXQtcGhvbmUt bnVtYmVyIEFsd2F5cyBzZXRzCi0gICAgICAgICAgU1VDQ0VTUy4KLQotICAgTE9PS1VQIGRpYWxp bmctZGlyZWN0b3J5LW5hbWUKLSAgICAgICAgICBEaXNwbGF5cyBhbGwgbWF0Y2hpbmcgZW50cmll cyBhbmQgY29udmVydHMgcG9ydGFibGUgcGhvbmUKLSAgICAgICAgICBudW1iZXJzLiBTZXRzIFNV Q0NFU1MgaWYgYXQgbGVhc3Qgb25lIGVudHJ5IHdhcyBmb3VuZCwgb3RoZXJ3aXNlCi0gICAgICAg ICAgRkFJTFVSRS4KLQotICAgTE9PS1VQID1hbnl0aGluZwotICAgICAgICAgIERpc3BsYXlzICI9 YW55dGhpbmciIGFuZCBzZXRzIFNVQ0NFU1MuCi0KLSAgIFRoZXJlIGlzLCBhdCBwcmVzZW50LCBu byBwcm9ncmFtbWF0aWMgd2F5IHRvIGZldGNoIG51bWJlcnMgZnJvbSB0aGUKLSAgIGRpYWxpbmcg ZGlyZWN0b3J5LiBUaGlzIHdpbGwgYmUgY29uc2lkZXJlZCBmb3IgYSBmdXR1cmUgcmVsZWFzZS4K LQotMi4xLjEwLiBHcmVhdGVyIENvbnRyb2wgb3ZlciBQYXJ0aWFsIERpYWxpbmcKLQotICAgVGhl IGZvbGxvd2luZyBydWxlcyBub3cgYXBwbHkgdG8gcGFydGlhbCBkaWFsaW5nOgotCi0gICAgICog UGhvbmUgbnVtYmVyIHRyYW5zZm9ybWF0aW9ucyBiYXNlZCBvbiBjb3VudHJ5IGFuZCBhcmVhIGNv ZGUsCi0gICAgICAgYXBwbGljYXRpb24gb2YgcHJlZml4ZXMsIGV0YywgYXJlIHBlcmZvcm1lZCBv bmx5IG9uIHRoZSBmaXJzdAotICAgICAgIFBESUFMLgotICAgICAqIEVhY2ggUERJQUwgYXJndW1l bnQgaXMgbG9va2VkIHVwIGluIHRoZSBkaWFsaW5nIGRpcmVjdG9yeSwgc28gaXQgaXMKLSAgICAg ICBwb3NzaWJsZSBoYXZlIGRpcmVjdG9yeSBlbnRyaWVzIGZvciBwaWVjZXMgb2YgcGhvbmUgbnVt YmVycyBvcgotICAgICAgIG90aGVyIGluZm9ybWF0aW9uLgotICAgICAqIFN1ZmZpeGVzIGFyZSBu b3QgYXBwbGllZCBhdXRvbWF0aWNhbGx5LCBzaW5jZSB0aGVyZSBpcyBubyB3YXkgZm9yCi0gICAg ICAgQy1LZXJtaXQgdG8ga25vdyBpbiB3aGljaCBQRElBTCBzZWdtZW50IHlvdSB3YW50IHRoZW0g dG8gYmUKLSAgICAgICBhcHBsaWVkLgotCi0gICBIb3dldmVyLCB0aGUgc3VmZml4IHRoYXQgKndv dWxkKiBoYXZlIGJlZW4gYXBwbGllZCwgYmFzZWQgb24gdGhlCi0gICBkaWFsaW5nIHJ1bGVzIHRo YXQgd2VyZSBpbnZva2VkIHdoZW4gcHJvY2Vzc2luZyB0aGUgZmlyc3QgUERJQUwKLSAgIGNvbW1h bmQsIGlzIHN0b3JlZCBpbiB0aGUgdmFyaWFibGU6Ci0KLSAgXHYoZGlhbHN1ZmZpeCkKLQotICAg d2hpY2ggeW91IGNhbiBpbmNsdWRlIGluIGFueSBzdWJzZXF1ZW50IFBESUFMIG9yIERJQUwgY29t bWFuZHMuCi0KLSAgIEV4YW1wbGU6Ci0KLSAgcGRpYWwge1xtKG15X2xvbmdfZGlzdGFuY2VfcGFn ZXJfbnVtYmVyX3BhcnRfMSl9Ci0gIHBkaWFsIHtcbShteV9sb25nX2Rpc3RhbmNlX3BhZ2VyX251 bWJlcl9wYXJ0XzIpfQotICBwZGlhbCB7XHYoZGlhbHN1ZmZpeCl9Ci0gIHBkaWFsIHtcbShteV9s b25nX2Rpc3RhbmNlX3BhZ2VyX251bWJlcl9wYXJ0XzMpfQotICBwZGlhbCB7QFxtKG51bWVyaWNf cGFnZXJfY29kZSkjfQotCi0yLjEuMTEuIE5ldyBESUFMLXJlbGF0ZWQgVmFyaWFibGVzIGFuZCBG dW5jdGlvbnMKLQotICAgXGZkaWFsY29udmVydChzKQotICAgICAgICAgIHMgaXMgYSBwaG9uZSBu dW1iZXIgaW4gZWl0aGVyIGxpdGVyYWwgb3IgcG9ydGFibGUgZm9ybWF0IChub3QgYQotICAgICAg ICAgIGRpYWxpbmcgZGlyZWN0b3J5IGVudHJ5IG5hbWUpLiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0 aGUgZGlhbAotICAgICAgICAgIHN0cmluZyB0aGF0IHdvdWxkIGFjdHVhbGx5IGJlIHVzZWQgYnkg dGhlIERJQUwgY29tbWFuZCB3aGVuCi0gICAgICAgICAgZGlhbGluZyBmcm9tIHRoZSBjdXJyZW50 IGxvY2F0aW9uLCBhZnRlciBwcm9jZXNzaW5nIGNvdW50cnkKLSAgICAgICAgICBjb2RlLCBhcmVh IGNvZGUsIGFuZCBvdGhlciBTRVQgRElBTCB2YWx1ZXMsIGFuZCBzaG91bGQgYmUgdGhlCi0gICAg ICAgICAgc2FtZSBhcyB0aGUgcmVzdWx0IG9mIExPT0tVUCB3aGVuIGdpdmVuIGEgdGVsZXBob25l IG51bWJlci4KLQotICAgXHYoZGlhbHN1ZmZpeCkKLSAgICAgICAgICBDb250YWlucyB0aGUgc3Vm Zml4LCBpZiBhbnksIHRoYXQgd2FzIGFwcGxpZWQgaW4gdGhlIG1vc3QgcmVjZW50Ci0gICAgICAg ICAgRElBTCBjb21tYW5kLCBvciB0aGUgc3VmZml4IHRoYXQgd291bGQgaGF2ZSBiZWVuIGFwcGxp ZWQgaW4gdGhlCi0gICAgICAgICAgbW9zdCByZWNlbnQgUERJQUwgY29tbWFuZC4gVXNlIHRoaXMg dmFyaWFibGUgdG8gc2VuZCB0aGUgZGlhbAotICAgICAgICAgIHN1ZmZpeCBhdCBhbnkgZGVzaXJl ZCBwb2ludCBpbiBhIFBESUFMIHNlcXVlbmNlLgotCi0gICBcdihkaWFsdHlwZSkKLSAgICAgICAg ICBBIG51bWJlciBpbmRpY2F0aW5nIHRoZSB0eXBlIG9mIGNhbGwgdGhhdCB3YXMgbW9zdCByZWNl bnRseQotICAgICAgICAgIHBsYWNlZC4gQ2FuIGJlIHVzZWQgYWZ0ZXIgYSBub3JtYWwgRElBTCBj b21tYW5kLCBvciBhZnRlciB0aGUKLSAgICAgICAgICBmaXJzdCBQRElBTCBjb21tYW5kIGluIGEg UERJQUwgc2VxdWVuY2UuIFZhbHVlcyBhcmU6Ci0KLSAgLTI6IFVua25vd24gYmVjYXVzZSBUQVBJ IGhhbmRsZWQgdGhlIHBob25lIG51bWJlciB0cmFuc2xhdGlvbi4KLSAgLTE6IFVua25vd24gYmVj YXVzZSBzb21lIGtpbmQgb2YgZXJyb3Igb2NjdXJyZWQuCi0gICAwOiBJbnRlcm5hbCB3aXRoaW4g UEJYLgotICAgMTogVG9sbC1mcmVlLgotICAgMjogTG9jYWwgd2l0aGluIGNhbGxpbmcgYXJlYS4K LSAgIDM6IFVua25vd24gKGUuZy4gYmVjYXVzZSBhIGxpdGVyYWwtZm9ybWF0IHBob25lIG51bWJl ciB3YXMgZ2l2ZW4pLgotICAgNDogTG9uZyBkaXN0YW5jZSB3aXRoaW4gY291bnRyeS4KLSAgIDU6 IEludGVybmF0aW9uYWwKLQotICAgXHYoZGlhbGNvdW50KQotICAgICAgICAgIFRoZSBjdXJyZW50 IHZhbHVlIG9mIHRoZSBESUFMIHJldHJ5IGNvdW50ZXIsIGZvciB1c2UgaW4gYSBESUFMCi0gICAg ICAgICAgbWFjcm8gKFszOThdU2VjdGlvbiAyLjEuMTMpLgotCi0gICBcdihkJHB4KQotICAgICAg ICAgIFBCWCBFeGNoYW5nZSAoc2VlIFszOTldU2VjdGlvbiAyLjEuMTIpLgotCi0gICBPdGhlciBk aWFsLXJlbGF0ZWQgdmFyaWFibGVzLCBhbHJlYWR5IGRvY3VtZW50ZWQgaW4gWzQwMF1Vc2luZyBD LUtlcm1pdAotICAgKG9yIG90aGVyIHNlY3Rpb25zIG9mIHRoaXMgZG9jdW1lbnQsIGUuZy4gWzQw MV1TZWN0aW9uIDIuMS4xKSwgaW5jbHVkZQotICAgXHYoZGlhbG51bWJlciksIFx2KGRpYWxzdGF0 dXMpLCBldGMuIEEgY29udmVuaWVudCB3YXkgdG8gZGlzcGxheSBhbGwgb2YKLSAgIHRoZW0gaXM6 Ci0KLSAgc2hvdyB2YXJpYWJsZSBkaWFsICA7IGhpbnQ6IGFiYnJldmlhdGUgInNobyB2YXIgZGlh bCIKLQotICAgVGhpcyBzaG93cyB0aGUgdmFsdWVzIG9mIGFsbCB0aGUgdmFyaWFibGVzIHdob3Nl IG5hbWVzIHN0YXJ0IHdpdGgKLSAgICJkaWFsIi4gQWxzbyAic2hvdyB2YXJpYWJsZSBkJCIgKHRv IHNob3cgdGhlIFx2KGQkLi4uKSB2YXJpYWJsZXMpLgotCi0yLjEuMTIuIEluY3JlYXNlZCBGbGV4 aWJpbGl0eSBvZiBQQlggRGlhbGluZwotCi0gICBSZWZlciB0byBbNDAyXVVzaW5nIEMtS2VybWl0 LCAybmQgRWRpdGlvbiwgcGFnZXMgMTA3LTEwOC4gUmVjYWxsIHRoYXQKLSAgIHRocmVlIGNvbW1h bmRzIGFyZSBuZWVkZWQgdG8gY29uZmlndXJlIEMtS2VybWl0IGZvciBkaWFsaW5nIGZyb20gYSBQ Qlg6Ci0KLSAgU0VUIERJQUwgUEJYLUVYQ0hBTkdFIG51bWJlcgotICBTRVQgRElBTCBQQlgtSU5T SURFLVBSRUZJWCBudW1iZXIKLSAgU0VUIERJQUwgUEJYLU9VVFNJREUtUFJFRklYIG51bWJlcgot Ci0gICBVbmZvcnR1bmF0ZWx5LCB0aGlzIG1vZGVsIGRvZXMgbm90IGFjY29tbW9kYXRlIFBCWHMg dGhhdCBoYXZlIG1vcmUgdGhhbgotICAgb25lIGV4Y2hhbmdlLiBGb3IgZXhhbXBsZSBvdXIgUEJY IGF0IENvbHVtYmlhIFVuaXZlcnNpdHkgKHdoaWNoIG11c3QKLSAgIGhhbmRsZSBtb3JlIHRoYW4g MTAsMDAwIHBob25lcykgaGFzIDg1My14eHh4IGFuZCA4NTQteHh4eCBleGNoYW5nZXMuCi0KLSAg IEJlZ2lubmluZyBpbiBDLUtlcm1pdCA3LjAsIHRoZSBTRVQgRElBTCBQQlgtRVhDSEFOR0UgY29t bWFuZCBhY2NlcHRzIGEKLSAgIGxpc3Qgb2YgZXhjaGFuZ2VzLCBlLmcuOgotCi0gIFNFVCBESUFM IFBCWC1FWENIQU5HRSA4NTMgODU0Ci0KLSAgIChtdWx0aXBsZSBleGNoYW5nZXMgYXJlIHNlcGFy YXRlZCBieSBzcGFjZXMsIG5vdCBjb21tYXMpLgotCi0gICBTbyBub3cgd2hlbiBkaWFsaW5nIGEg cG9ydGFibGUtZm9ybWF0IG51bWJlciB0aGF0IGhhcyB0aGUgc2FtZSBjb3VudHJ5Ci0gICBhbmQg YXJlYSBjb2RlcyBhcyB0aG9zZSBvZiB5b3VyIGRpYWxpbmcgbG9jYXRpb24sIEMtS2VybWl0IGNv bXBhcmVzIHRoZQotICAgZXhjaGFuZ2Ugb2YgdGhlIGRpYWxlZCBudW1iZXIgd2l0aCBlYWNoIG51 bWJlciBpbiB0aGUgUEJYIEV4Y2hhbmdlIGxpc3QKLSAgIChyYXRoZXIgdGhhbiB3aXRoIGEgc2lu Z2xlIFBCWCBFeGNoYW5nZSBudW1iZXIsIGFzIGl0IGRpZCBmb3JtZXJseSkgdG8KLSAgIGRldGVy bWluZSB3aGV0aGVyIHRoaXMgaXMgYW4gaW50ZXJuYWwgUEJYIG51bWJlciBvciBhbiBleHRlcm5h bCBjYWxsLgotICAgSWYgaXQgaXMgYW4gZXh0ZXJuYWwgY2FsbCwgdGhlbiB0aGUgUEJYIE91dHNp ZGUgUHJlZml4IGlzIGFwcGxpZWQsIGFuZAotICAgdGhlbiB0aGUgbm9ybWFsIGRpYWxpbmcgcnVs ZXMgZm9yIGxvY2FsIG9yIGxvbmctZGlzdGFuY2UgY2FsbHMuCi0KLSAgIElmIGl0IGlzIGFuIGlu c2lkZSBjYWxsLCB0aGUgZXhjaGFuZ2UgaXMgcmVwbGFjZWQgYnkgdGhlIFBCWCBJbnNpZGUKLSAg IFByZWZpeC4gQnV0IGlmIHRoZSBQQlggaGFzIG1vcmUgdGhhbiBvbmUgZXhjaGFuZ2UsIGEgc2lu Z2xlIGZpeGVkIFBCWAotICAgSW5zaWRlIFByZWZpeCBpcyBwcm9iYWJseSBub3Qgc3VmZmljaWVu dC4gRm9yIGV4YW1wbGUsIGF0IENvbHVtYmlhCi0gICBVbml2ZXJzaXR5LCB3ZSBtdXN0IGRpYWwg My14eHh4IGZvciBhbiBpbnRlcm5hbCBjYWxsIHRvIDg1My14eHh4LCBidXQKLSAgIDQteHh4eCBm b3IgYSBjYWxsIHRvIDg1NC14eHh4LiBUaGF0IGlzLCB0aGUgaW5zaWRlIHByZWZpeCBpcyB0aGUg ZmluYWwKLSAgIGRpZ2l0IG9mIHRoZSBleGNoYW5nZSB3ZSBhcmUgZGlhbGluZy4gRm9yIHRoaXMg cmVhc29uLCBDLUtlcm1pdCA3LjAKLSAgIHByb3ZpZGVzIGEgbWV0aG9kIHRvIGRldGVybWluZSB0 aGUgaW5zaWRlIHByZWZpeCBkeW5hbWljYWxseSBhdCBkaWFsaW5nCi0gICB0aW1lLCBjb25zaXN0 aW5nIG9mIGEgbmV3IHZhcmlhYmxlIGFuZCBuZXcgc3ludGF4IGZvciB0aGUgU0VUIERJQUwKLSAg IFBCWC1JTlNJREUtUFJFRklYIGNvbW1hbmQ6Ci0KLSAgIFx2KGQkcHgpCi0gICAgICAgICAgVGhp cyB2YXJpYWJsZSBjb250YWlucyB0aGUgZXhjaGFuZ2UgdGhhdCB3YXMgbWF0Y2hlZCB3aGVuIGEg UEJYCi0gICAgICAgICAgaW50ZXJuYWwgY2FsbCB3YXMgZGV0ZWN0ZWQuIEZvciBleGFtcGxlLCBp ZiB0aGUgUEJYIGV4Y2hhbmdlCi0gICAgICAgICAgbGlzdCBpcyAiODUzIDg1NCIgYW5kIGEgY2Fs bCBpcyBwbGFjZWQgdG8gKzEgKDIxMikgODU0LTk5OTksCi0gICAgICAgICAgXHYoZCRweCkgaXMg c2V0IHRvIDg1NC4KLQotICAgU0VUIERJQUwgUEJYLUlOU0lERS1QUkVGSVggXGZ4eHgoLi4uKQot ICAgICAgICAgIElmIHRoZSBQQlggSW5zaWRlIFByZWZpeCBpcyBkZWZpbmVkIHRvIGJlIGEgZnVu Y3Rpb24sIGl0cwotICAgICAgICAgIGV2YWx1YXRpb24gaXMgZGVmZXJyZWQgdW50aWwgZGlhbGlu ZyB0aW1lLiBOb3JtYWxseSwgdGhpcyB3b3VsZAotICAgICAgICAgIGJlIGEgc3RyaW5nIGZ1bmN0 aW9uIGhhdmluZyBcdihkJHB4KSBhcyBhbiBvcGVyYW5kLiBPZiBjb3Vyc2UsCi0gICAgICAgICAg eW91IGNhbiBzdGlsbCBzcGVjaWZ5IGEgY29uc3RhbnQgc3RyaW5nLCBhcyBiZWZvcmUuCi0KLSAg IFNvIGdpdmVuIHRoZSBmb2xsb3dpbmcgc2V0dXA6Ci0KLSAgU0VUIERJQUwgQ09VTlRSWS1DT0RF IDEKLSAgU0VUIERJQUwgQVJFQS1DT0RFIDIxMgotICBTRVQgRElBTCBQQlgtT1VUU0lERS1QUkVG SVggOTMsCi0gIFNFVCBESUFMIFBCWC1FWENIQU5HRSA4NTMgODU0Ci0gIFNFVCBESUFMIFBCWC1J TlNJREUtUFJFRklYIFxmcmlnaHQoXHYoZCRweCksMSkKLQotICAgVGhlIGZvbGxvd2luZyBudW1i ZXJzIGdpdmUgdGhlIHJlc3VsdHMgaW5kaWNhdGVkOgotCi0gTnVtYmVyICAgICAgICAgICAgICAg ICAgIFJlc3VsdAotICArMSAoMjEyKSA4NTQtOTg3NiAgICAgICAgNC05ODc2Ci0gICsxICgyMTIp IDg1My0xMjM0ICAgICAgICAzLTEyMzQKLSAgKzEgKDIxMikgNzY1LTQzMjEgICAgICAgIDkzLDc2 NS00MzIxCi0gICsxICgzMzMpIDc2NS00MzIxICAgICAgICA5MywxMzMzNzY1LTQzMjEKLQotICAg RnVydGhlcm1vcmUsIHRoZSBLX1BCWF9YQ0ggZW52aXJvbm1lbnQgdmFyaWFibGUgbWF5IG5vdyBi ZSBzZXQgdG8gYQotICAgbGlzdCBvZiBleGNoYW5nZXMgdG8gYXV0b21hdGljYWxseSBpbml0aWFs aXplIEMtS2VybWl0J3MgUEJYIGV4Y2hhbmdlCi0gICBsaXN0LCBmb3IgZXhhbXBsZSAoaW4gVU5J WCBrc2ggb3IgYmFzaCk6Ci0KLSAgZXhwb3J0IEtfUEJYX1hDSD0iODUzIDg1NCIKLQotICAgKFF1 b3RlcyByZXF1aXJlZCBiZWNhdXNlIG9mIHRoZSBzcGFjZS4pIE9mIGNvdXJzZSwgdGhpcyB2YXJp YWJsZSBjYW4KLSAgIGFsc28gYmUgc2V0IHRvIGEgc2luZ2xlIGV4Y2hhbmdlLCBhcyBiZWZvcmU6 Ci0KLSAgZXhwb3J0IEtfUEJYX1hDSD04NTMKLQotMi4xLjEzLiBUaGUgRElBTCBtYWNybyAtIExh c3QtTWludXRlIFBob25lIE51bWJlciBDb252ZXJzaW9ucwotCi0gICBBZnRlciBhIERJQUwgb3Ig TE9PS1VQIGNvbW1hbmQgaXMgZ2l2ZW4sIGEgbGlzdCBvZiBwaG9uZSBudW1iZXJzIGlzCi0gICBh c3NlbWJsZWQgZnJvbSB0aGUgZGlhbGluZyBkaXJlY3RvcnkgKGlmIGFueSksIHdpdGggYWxsCi0g ICBsb2NhdGlvbi1kZXBlbmRlbnQgY29udmVyc2lvbiBydWxlcyBhcHBsaWVkIGFzIGRlc2NyaWJl ZCBpbiBDaGFwdGVyIDUKLSAgIG9mIFs0MDNdVXNpbmcgQy1LZXJtaXQuCi0KLSAgIEhvd2V2ZXIs IGFkZGl0aW9uYWwgY29udmVyc2lvbnMgbWlnaHQgc3RpbGwgYmUgcmVxdWlyZWQgYXQgdGhlIGxh c3QKLSAgIG1pbnV0ZSBiYXNlZCBvbiBsb2NhbCBvciBlcGhlbWVyYWwgY29uZGl0aW9ucy4gU28g dGhhdCB5b3UgY2FuIGhhdmUgdGhlCi0gICBmaW5hbCB3b3JkIG9uIHRoZSBleGFjdCBmb3JtYXQg b2YgdGhlIGRpYWwgc3RyaW5nLCBDLUtlcm1pdCA3LjAgbGV0cwotICAgeW91IHBhc3MgdGhlIGNv bnZlcnRlZCBzdHJpbmcgdGhyb3VnaCBhIG1hY3JvIG9mIHlvdXIgb3duIGRlc2lnbiBmb3IKLSAg IGZpbmFsIHByb2Nlc3NpbmcgYmVmb3JlIGRpYWxpbmcuIFRoZSByZWxldmFudCBjb21tYW5kIGlz OgotCi0gICBTRVQgRElBTCBNQUNSTyBbIG5hbWUgXQotICAgICAgICAgIFNwZWNpZmllcyB0aGUg bmFtZSBvZiBhIG1hY3JvIHRvIGJlIHJ1biBvbiBlYWNoIHBob25lIG51bWJlcgotICAgICAgICAg IGFmdGVyIGFsbCBidWlsdC1pbiBjb252ZXJzaW9ucyBoYXZlIGJlZW4gYXBwbGllZCwganVzdCBi ZWZvcmUKLSAgICAgICAgICB0aGUgbnVtYmVyIGlzIGRpYWxlZC4gSWYgbm8gbmFtZSBpcyBnaXZl biwgbm8gbWFjcm8gaXMgcnVuLiBUaGUKLSAgICAgICAgICBwaG9uZSBudW1iZXIsIGFzIGl0IHdv dWxkIGhhdmUgYmVlbiBkaWFsZWQgaWYgdGhlcmUgd2VyZSBubyBkaWFsCi0gICAgICAgICAgbWFj cm8sIGlzIHBhc3NlZCB0byB0aGUgbWFjcm8uCi0KLSAgIFRoZSBkaWFsIG1hY3JvIGNhbiBkbyBh bnl0aGluZyBhdCBhbGwgKGV4Y2VwdCBzdGFydCBhIGZpbGUgdHJhbnNmZXIpLgotICAgSG93ZXZl ciwgdGhlIG5vcm1hbCB1c2UgZm9yIHRoZSBtYWNybyB3b3VsZCBiZSB0byBtb2RpZnkgdGhlIHBo b25lCi0gICBudW1iZXIuIEZvciB0aGlzIHJlYXNvbiB0aGUgcGhvbmUgbnVtYmVyIGlzIHBhc3Nl ZCB0byB0aGUgbWFjcm8gYXMKLSAgIGFyZ3VtZW50IG51bWJlciAxIChcJTEpLiBUbyBjYXVzZSBh IG1vZGlmaWVkIG51bWJlciB0byBiZSBkaWFsZWQsIHRoZQotICAgbWFjcm8gc2hvdWxkIHRlcm1p bmF0ZSB3aXRoIGEgUkVUVVJOIHN0YXRlbWVudCBzcGVjaWZ5aW5nIGEgcmV0dXJuCi0gICB2YWx1 ZS4gVG8gbGVhdmUgdGhlIG51bWJlciBhbG9uZSwgdGhlIG1hY3JvIHNob3VsZCBzaW1wbHkgZW5k LiBFeGFtcGxlOgotCi0gIGRlZmluZSB4eHggcmV0dXJuIDEwMTA4ODg5OTk5JFwlMQotICBzZXQg ZGlhbCBtYWNybyB4eHgKLSAgZGlhbCB4eXpjb3JwCi0KLSAgIFRoaXMgZGVmaW5lcyBhIERJQUwg TUFDUk8gY2FsbGVkIHh4eCwgd2hpY2ggcHV0cyBhbiBhY2Nlc3MgY29kZSBvbiB0aGUKLSAgIGZy b250IG9mIHRoZSBudW1iZXIuIEFub3RoZXIgZXhhbXBsZSBtaWdodCBiZToKLQotICBkZWYgeHh4 IGlmIGVxdWFsICJcdihtb2RlbSkiICJoYXllcy0xMjAwIiByZXR1cm4gXGZyZXBsYWNlKFwlMSwk LHssLCwsLH0pCi0gIHNldCBkaWFsIG1hY3JvIHh4eAotICBkaWFsIHh5emNvcnAKLQotICAgd2hp Y2ggcmVwbGFjZXMgYW55IGRvbGxhci1zaWduIGluIHRoZSBkaWFsIHN0cmluZyBieSBhIHNlcmll cyBvZiBmaXZlCi0gICBjb21tYXMsIGUuZy4gYmVjYXVzZSB0aGlzIHBhcnRpY3VsYXIgbW9kZW0g ZG9lcyBub3Qgc3VwcG9ydCB0aGUgIndhaXQKLSAgIGZvciBib25nIiBmZWF0dXJlIChyZW1lbWJl ciB0aGF0IGNvbW1hcyB0aGF0IGFyZSB0byBiZSBpbmNsdWRlZAotICAgbGl0ZXJhbGx5IGluIGZ1 bmN0aW9uIGFyZ3VtZW50cyBtdXN0IGJlIGVuY2xvc2VkIGluIGJyYWNlcyB0bwotICAgZGlzdGlu Z3Vpc2ggdGhlbSBmcm9tIHRoZSBjb21tYXMgdGhhdCBzZXBhcmF0ZSB0aGUgYXJndW1lbnRzKSBh bmQgd2hlbgotICAgdGhlIElGIGNvbmRpdGlvbiBpcyBub3Qgc2F0aXNmaWVkLCB0aGUgbWFjcm8g ZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUsCi0gICBhbmQgc28gdGhlIG51bWJlciBpcyBub3QgbW9k aWZpZWQuIFRoZW4gd2hlbiBhIERJQUwgY29tbWFuZCBpcyBnaXZlbgotICAgcmVmZXJlbmNpbmcg YSBkaWFsaW5nIGRpcmVjdG9yeSBlbnRyeSwgInh5emNvcnAiLiBUaGUgbWFjcm8gaXMKLSAgIGF1 dG9tYXRpY2FsbHkgYXBwbGllZCB0byBlYWNoIG1hdGNoaW5nIG51bWJlci4KLQotICAgTnVtZXJv dXMgZGlhbC0sIG1vZGVtLSwgY29tbXVuaWNhdGlvbnMtLCBhbmQgdGltZS1yZWxhdGVkIHZhcmlh YmxlcyBhcmUKLSAgIGF2YWlsYWJsZSBmb3IgZGVjaXNpb24gbWFraW5nIHlvdXIgZGlhbCBtYWNy by4gVHlwZSBTSE9XIFZBUklBQkxFUyBmb3IKLSAgIGEgbGlzdC4gT2YgcGFydGljdWxhciBpbnRl cmVzdCBpcyB0aGUgXHYoZGlhbGNvdW50KSB2YXJpYWJsZSwgd2hpY2gKLSAgIHRlbGxzIGhvdyBt YW55IHRpbWVzIHRoZSBESUFMIGNvbW1hbmQgZ29uZSB0aHJvdWdoIGl0cyByZXRyeSBsb29wOiAx IG9uCi0gICB0aGUgZmlyc3QgdHJ5LCAyIG9uIHRoZSBzZWNvbmQsIDMgb24gdGhlIHRoaXJkLCBh bmQgc28gb24sIGFuZCB0aGUKLSAgIFx2KGRpYWxyZXN1bHQpIGFuZCBcdihkaWFsc3RhdHVzKSB2 YXJpYWJsZXMuCi0KLSAgIEhlcmUgYXJlIHNvbWUgb3RoZXIgYXBwbGljYXRpb25zIGZvciB0aGUg RElBTCBNQUNSTyAoZnJvbSB1c2Vycyk6Ci0KLSAgICAgKiBQaG9uZSBudW1iZXJzIGluIHRoZSBk aWFsaW5nIGRpcmVjdG9yeSBhcmUgZm9ybWF0dGVkIHdpdGggJy0nIGZvcgotICAgICAgIHJlYWRh YmlsaXR5LCBidXQgc29tZSBtb2RlbXMgZG9uJ3QgbGlrZSB0aGUgaHlwaGVucywgc28gdGhlIERJ QUwKLSAgICAgICBtYWNybyBpcyB1c2VkIHRvIHJlbW92ZSB0aGVtIGJlZm9yZSBkaWFsaW5nOyBl LmcgMDA5MC0xMjMtNDU2LTc4LTk5Ci0gICAgICAgYmVjb21lcyAwMDkwMTIzNDU2Nzg5OTogImRl ZiB4eHggcmV0dXJuIFxmcmVwbGFjZShcJTEsLSkiLgotICAgICAqIFRvIHNldCBzb21lIHNwZWNp ZmljIG1vZGVtIChvciBvdGhlcikgb3B0aW9ucyBkZXBlbmRpbmcgb24gdGhlCi0gICAgICAgY2Fs bGVkIGN1c3RvbWVyIG9yIHRlbGVwaG9uZSBudW1iZXIuCi0gICAgICogQ2hvb3NpbmcgdGhlIG1v c3QgYXBwcm9wcmlhdGUgcHJvdmlkZXIgYmFzZWQgb24gKGUuZy4pIHRpbWUgb2YgZGF5LAotICAg ICAgIG9yIGN5Y2xpbmcgdGhyb3VnaCBhIGxpc3Qgb2YgcHJvdmlkZXJzIGluIGNhc2Ugc29tZSBw cm92aWRlcnMgbWlnaHQKLSAgICAgICBiZSBidXN5LgotCi0gICBUbyBpbGx1c3RyYXRlIHRoZSBm aW5hbCBpdGVtLCBzdXBwb3NlIHlvdSBoYXZlIGEgY2hvaWNlIGFtb25nIG1hbnkKLSAgIHBob25l IHNlcnZpY2UgcHJvdmlkZXJzOyB0aGUgcHJvdmlkZXIgaXMgY2hvc2VuIGJ5IGRpYWxpbmcgYW4g YWNjZXNzCi0gICBjb2RlIGJlZm9yZSB0aGUgbnVtYmVyLiBEaWZmZXJlbnQgcHJvdmlkZXJzIG1p Z2h0IGJlIGJldHRlciAoZS5nLgotICAgY2hlYXBlcikgZm9yIGNlcnRhaW4gdGltZXMgb2YgZGF5 IG9yIGRheXMgb2YgdGhlIHdlZWssIG9yIGZvciBkaWFsaW5nCi0gICBjZXJ0YWluIGxvY2F0aW9u czsgeW91IGNhbiB1c2UgdGhlIERJQUwgbWFjcm8gdG8gYWRkIHRoZSBhY2Nlc3MgZm9yIHRoZQot ICAgbW9zdCBkZXNpcmFibGUgcHJvdmlkZXIuCi0KLSAgIFNpbWlsYXJseSwgd2hlbiB0aGUgc2Ft ZSBudW1iZXIgbWlnaHQgYmUgcmVhY2hlZCB0aHJvdWdoIG11bHRpcGxlCi0gICBwcm92aWRlcnMs IGl0J3MgcG9zc2libGUgdGhhdCBvbmUgcHJvdmlkZXIgbWlnaHQgbm90IGJlIGFibGUgdG8KLSAg IGNvbXBsZXRlIHRoZSBjYWxsLCBidXQgYW5vdGhlciBvbmUgY2FuLiBJbiB0aGF0IGNhc2UsIHlv dSBjYW4gdXNlIHRoZQotICAgRElBTCBtYWNybyB0byBzd2l0Y2ggcHJvdmlkZXJzIGVhY2ggdGlt ZSB0aHJvdWdoIHRoZSBESUFMIGxvb3AgLS0KLSAgIHRoYXQncyB3aGVyZSB0aGUgXHYoZGlhbGNv dW50KSB2YXJpYWJsZSBjb21lcyBpbiBoYW5keS4KLQotICAgVGhlIGZvbGxvd2luZyBjb21tYW5k IGNhbiBiZSB1c2VkIHRvIGRlYnVnIHRoZSBESUFMIG1hY3JvOgotCi0gICBTRVQgRElBTCBURVNU IHsgT04sIE9GRiB9Ci0gICAgICAgICAgTm9ybWFsbHkgT0ZGLCBzbyB0aGUgRElBTCBjb21tYW5k IGFjdHVhbGx5IGRpYWxzLiBXaGVuIE9OLCB0aGUKLSAgICAgICAgICBESUFMIGNvbW1hbmQgcGVy Zm9ybXMgYWxsIGxvb2t1cHMgYW5kIG51bWJlciBjb252ZXJzaW9ucywgYW5kCi0gICAgICAgICAg dGhlbiBnb2VzIHRocm91Z2ggdGhlIG51bWJlciBsaXN0IGFuZCByZXRyeSBsb29wLCBidXQgaW5z dGVhZCBvZgotICAgICAgICAgIGFjdHVhbGx5IGRpYWxpbmcsIGxpc3RzIHRoZSBudW1iZXJzIGl0 IHdvdWxkIGhhdmUgY2FsbGVkIGlmIG5vbmUKLSAgICAgICAgICBvZiB0aGUgRElBTCBhdHRlbXB0 cyBzdWNjZWVkZWQgKG9yIG1vcmUgcHJlY2lzZWx5LCBldmVyeSBudW1iZXIKLSAgICAgICAgICB3 YXMgYWx3YXlzIGJ1c3kpLgotCi0yLjEuMTQuIEF1dG9tYXRpYyBUb25lL1B1bHNlIERpYWxpbmcg U2VsZWN0aW9uCi0KLSAgIFNFVCBESUFMIE1FVEhPRCB7IEFVVE8sIERFRkFVTFQsIFBVTFNFLCBU T05FIH0KLSAgICAgICAgICBDaG9vc2VzIHRoZSBkaWFsaW5nIG1ldGhvZCBmb3Igc3Vic2VxdWVu dCBjYWxscy4KLQotICAgUHJpb3IgdG8gdmVyc2lvbiA3LjAsIEMtS2VybWl0J3MgRElBTCBNRVRI T0Qgd2FzIERFRkFVTFQgYnkgZGVmYXVsdCwKLSAgIG1lYW5pbmcgaXQgZG9lcyBub3Qgc3BlY2lm eSBhIGRpYWxpbmcgbWV0aG9kIHRvIHRoZSBtb2RlbSwgYnV0IHJlbGllcwotICAgb24gdGhlIG1v ZGVtIHRvIGhhdmUgYW4gYXBwcm9wcmlhdGUgZGVmYXVsdCBkaWFsaW5nIG1ldGhvZCBzZXQuIFNv LCBmb3IKLSAgIGV4YW1wbGUsIHdoZW4gdXNpbmcgSGF5ZXMgY29tcGF0aWJsZSBtb2RlbXMsIHRo ZSBkaWFsIHN0cmluZyB3b3VsZCBiZQotICAgc29tZXRoaW5nIGxpa2UgQVRENzY1NDMyMSwgcmF0 aGVyIHRoYW4gQVREVDc2NTQzMjEgb3IgQVREUDc2NTQzMjEuCi0KLSAgIEluIEMtS2VybWl0IDcu MCBhbmQgSzk1IDEuMS4xOSwgdGhlIGRpYWwgbWV0aG9kIGNhbiBiZSBzZXQgZnJvbSB0aGUKLSAg IGVudmlyb25tZW50IHZhcmlhYmxlOgotCi0gIEtfRElBTF9NRVRIT0QKLQotICAgd2hlbiBLZXJt aXQgc3RhcnRzLiBUaGUgdmFsdWVzIGNhbiBiZSBUT05FLCBQVUxTRSwgb3IgREVGQVVMVCwgZS5n LgotICAgKFVOSVgpOgotCi0gIHNldCBLX0RJQUxfTUVUSE9EPVRPTkU7IGV4cG9ydCBLX0RJQUxf TUVUSE9ECi0KLSAgIEluIHRoZSBhYnNlbmNlIG9mIGEgS19ESUFMX01FVEhPRCBkZWZpbml0aW9u LCB0aGUgbmV3IGRlZmF1bHQgU0VUIERJQUwKLSAgIE1FVEhPRCBpcyBBVVRPIHJhdGhlciB0aGFu IERFRkFVTFQuIFdoZW4gRElBTCBNRVRIT0QgaXMgQVVUTyBhbmQgdGhlCi0gICBsb2NhbCBjb3Vu dHJ5IGNvZGUgaXMga25vd24sIHRoZW4gaWYgdG9uZSBkaWFsaW5nIGlzIHVuaXZlcnNhbGx5Ci0g ICBhdmFpbGFibGUgaW4gdGhlIGNvcnJlc3BvbmRpbmcgYXJlYSwgdG9uZSBkaWFsaW5nIGlzIHVz ZWQ7IGlmIGRpYWxpbmcKLSAgIGZyb20gYSBsb2NhdGlvbiB3aGVyZSBwdWxzZSBkaWFsaW5nIGlz IG1hbmRhdG9yeSwgcHVsc2UgZGlhbGluZyBpcwotICAgdXNlZC4KLQotICAgVGhlICJ0b25lIGNv dW50cnkiIGFuZCAicHVsc2UgY291bnRyeSIgbGlzdHMgYXJlIHByZWxvYWRlZCBhY2NvcmRpbmcg dG8KLSAgIG91ciBrbm93bGVkZ2UgYXQgdGhlIHRpbWUgb2YgcmVsZWFzZS4gWW91IGNhbiBzZWUg dGhlaXIgY29udGVudHMgaW4gdGhlCi0gICBTSE9XIERJQUwgbGlzdGluZy4gWW91IGNhbiBjaGFu Z2UgdGhlIGxpc3RzIHdpdGg6Ci0KLSAgIFNFVCBESUFMIFRPTkUtQ09VTlRSSUVTIFsgY2MgWyBj YyBbIC4uLiBdIF0gXQotICAgICAgICAgIFJlcGxhY2VzIHRoZSBjdXJyZW50IFRPTkUtQ09VTlRS SUVTIGxpc3Qgd2l0aCB0aGUgb25lIGdpdmVuLgotICAgICAgICAgIEVhY2ggY2MgaXMgYSBjb3Vu dHJ5IGNvZGU7IHNlcGFyYXRlIHRoZW0gd2l0aCBzcGFjZXMgKG5vdAotICAgICAgICAgIGNvbW1h cykuIEV4YW1wbGU6Ci0KLSAgc2V0IGRpYWwgdG9uZS1jb3VudHJpZXMgMSAzNTggNDQgNDYgNDkK LQotICAgICAgICAgIElmIG5vIGNvdW50cnkgY29kZXMgYXJlIGdpdmVuLCB0aGUgY3VycmVudCBs aXN0LCBpZiBhbnksIGlzCi0gICAgICAgICAgcmVtb3ZlZCwgaW4gd2hpY2ggY2FzZSBTRVQgRElB TCBNRVRIT0QgQVVUTyBpcyBlcXVpdmFsZW50IHRvIFNFVAotICAgICAgICAgIERJQUwgTUVUSE9E IERFRkFVTFQuCi0KLSAgIFNFVCBESUFMIFBVTFNFLUNPVU5UUklFUyBbIGNjIFsgY2MgWyAuLi4g XSBdIF0KLSAgICAgICAgICBSZXBsYWNlcyB0aGUgY3VycmVudCBQVUxTRS1DT1VOVFJJRVMgbGlz dCB3aXRoIHRoZSBvbmUgZ2l2ZS4KLSAgICAgICAgICBTeW50YXggYW5kIG9wZXJhdGlvbiBpcyBs aWtlIFNFVCBESUFMIFRPTkUtQ09VTlRSSUVTLgotCi0gICBJZiB0aGUgc2FtZSBjb3VudHJ5IGNv ZGUgYXBwZWFycyBpbiBib3RoIGxpc3RzLCBQdWxzZSB0YWtlcyBwcmVjZWRlbmNlLgotCi0gICBU aGUgU0VUIERJQUwgVE9ORS0gYW5kIFBVTFNFLUNPVU5UUklFUyBjb21tYW5kcyBwZXJmb3JtIG5v IHZlcmlmaWNhdGlvbgotICAgd2hhdHNvZXZlciBvbiB0aGUgY2Mncywgc2luY2UgYWxtb3N0IGFu eSBzeW50YXggbWlnaHQgYmUgbGVnYWwgaW4gc29tZQotICAgc2V0dGluZ3MuIEZ1cnRoZXJtb3Jl LCB0aGVyZSBpcyBubyBmYWNpbGl0eSB0byBlZGl0IHRoZSBsaXN0czsgeW91IGNhbgotICAgb25s eSByZXBsYWNlIHRoZSB3aG9sZSBsaXN0LiBIb3dldmVyLCBzaW5jZSB0aGUgb25seSBwdXJwb3Nl IG9mIHRoZXNlCi0gICBsaXN0cyBpcyB0byBlc3RhYmxpc2ggYSBiYXNpcyBmb3IgcGlja2luZyB0 b25lIG9yIHB1bHNlIGRpYWxpbmcKLSAgIGF1dG9tYXRpY2FsbHksIGFsbCB5b3UgbmVlZCB0byBv dmVycmlkZSB0aGUgZWZmZWN0IG9mIHRoZSBsaXN0IGlzIHRvCi0gICBzZXQgYSBzcGVjaWZpYyBk aWFsaW5nIG1ldGhvZCB3aXRoIFNFVCBESUFMIE1FVEhPRCBUT05FIG9yIFNFVCBESUFMCi0gICBN RVRIT0QgUFVMU0UuCi0KLTIuMS4xNS4gRGlhbC1Nb2RpZmllciBWYXJpYWJsZXMKLQotICAgQXMg b2YgQy1LZXJtaXQgNy4wLCBkaWFsIG1vZGlmaWVycyBhcmUgYXZhaWxhYmxlIGluIHRoZSBmb2xs b3dpbmcKLSAgIHZhcmlhYmxlczoKLQotIFx2KGRtX2xwKSBMb25nIHBhdXNlCi0gXHYoZG1fc3Ap IFNob3J0IHBhdXNlCi0gXHYoZG1fcGQpIFB1bHNlIGRpYWwKLSBcdihkbV90ZCkgVG9uZSBkaWFs Ci0gXHYoZG1fd2EpIFdhaXQgZm9yIGFuc3dlcgotIFx2KGRtX3dkKSBXYWl0IGZvciBkaWFsdG9u ZQotIFx2KGRtX3JjKSBSZXR1cm4gdG8gY29tbWFuZCBtb2RlCi0KLSAgIFlvdSBjYW4gdXNlIHRo ZXNlIGluIHlvdXIgZGlhbCBzdHJpbmdzIGluIHBsYWNlIG9mIGhhcmR3aXJlZCBtb2RpZmllcnMK LSAgIGxpa2UgIkAiLCAiLCIsIGV0YywgZm9yIGluY3JlYXNlZCBwb3J0YWJpbGl0eSBvZiBzY3Jp cHRzLiBFeGFtcGxlOgotCi0gIEMtS2VybWl0PnNldCBtb2RlbSB0eXBlIHVzcm9ib3RpY3MKLSAg Qy1LZXJtaXQ+c2hvIHZhcmlhYmxlcyBkbQotICAgXHYoZG1fbHApID0gLAotICAgXHYoZG1fc3Ap ID0gLwotICAgXHYoZG1fcGQpID0gUAotICAgXHYoZG1fdGQpID0gVAotICAgXHYoZG1fd2EpID0g QAotICAgXHYoZG1fd2QpID0gVwotICAgXHYoZG1fcmMpID0gOwotICBDLUtlcm1pdD5leGl0Ci0K LTIuMS4xNi4gR2l2aW5nIE11bHRpcGxlIE51bWJlcnMgdG8gdGhlIERJQUwgQ29tbWFuZAotCi0g ICBQcmlvciB0byBDLUtlcm1pdCA3LjAsIHRoZSBvbmx5IHdheSB0byBnaXZlIGEgRElBTCBjb21t YW5kIGEgbGlzdCBvZgotICAgcGhvbmUgbnVtYmVycyB0byB0cnkgdW50aWwgb25lIGFuc3dlcnMg d2FzIHRvIGNyZWF0ZSBhIGRpYWxpbmcKLSAgIGRpcmVjdG9yeSB0aGF0IGhhZCBtdWx0aXBsZSBl bnRyaWVzIHVuZGVyIHRoZSBzYW1lIG5hbWUsIGFuZCB0aGVuIHVzZQotICAgdGhhdCBlbnRyeSBu YW1lIGluIHRoZSBESUFMIGNvbW1hbmQuIE5vdyBhIGxpc3Qgb2YgbnVtYmVycyBjYW4gYmUgZ2l2 ZW4KLSAgIHRvIHRoZSBESUFMIGNvbW1hbmQgZGlyZWN0bHkgaW4gdGhlIGZvbGxvd2luZyBmb3Jt YXQ6Ci0KLSAgZGlhbCB7e251bWJlcjF9e251bWJlcjJ9e251bWJlcjN9Li4ufQotCi0gICBUaGlz IGlzIHRoZSBzYW1lIGxpc3QgZm9ybWF0IHVzZWQgYnkgU0VORCAvRVhDRVBUOiBhbmQgb3RoZXIg Y29tbWFuZHMKLSAgIHRoYXQgYWxsb3cgYSBsaXN0IHdoZXJlIG5vcm1hbGx5IGEgc2luZ2xlIGl0 ZW0gaXMgZ2l2ZW4uIFJlc3RyaWN0aW9ucwotICAgb24gdGhpcyBmb3JtIG9mIHRoZSBESUFMIGNv bW1hbmQgYXJlOgotCi0gICAgICogVGhlIGZpcnN0IHR3byBicmFjZXMgbXVzdCBiZSBhZGphY2Vu dDsgc3BhY2luZyBpcyBvcHRpb25hbAotICAgICAgIHRoZXJlYWZ0ZXIuCi0gICAgICogRWFjaCBu dW1iZXIgbXVzdCBiZSBhbiBhY3R1YWwgbnVtYmVyIHRvIGRpYWwsIG5vdCBhIGRpYWxpbmcKLSAg ICAgICBkaXJlY3RvcnkgZW50cnkuCi0gICAgICogRGlhbGluZyBkaXJlY3RvcnkgZW50cmllcyBt YXkgbm90IGNvbnRhaW4gbnVtYmVyIGxpc3RzIGluIHRoaXMKLSAgICAgICBmb3JtYXQuCi0KLSAg IEluIGFsbCBvdGhlciByZXNwZWN0cywgdGhlIG51bWJlcnMgYXJlIHRyZWF0ZWQgYXMgaWYgdGhl eSBoYWQgYmVlbgotICAgZmV0Y2hlZCBmcm9tIHRoZSBkaWFsaW5nIGRpcmVjdG9yeTsgdGhleSBj YW4gYmUgaW4gbGl0ZXJhbCBvciBwb3J0YWJsZQotICAgZm9ybWF0LCBldGMuIEV4YW1wbGU6Ci0K LSAgZGlhbCB7ezc2NTQzMjF9IHsrMSAoMjEyKSA1NTUxMjEyfSB7IDEtMjEyLTU1NTY3ODkgfX0K LQotICAgVGhlIGxpc3QgY2FuIGJlIGFueSBsZW5ndGggYXQgYWxsLCB3aXRoaW4gcmVhc29uLgot Ci0gICBUaGlzIGZlYXR1cmUgaXMgZXNwZWNpYWxseSBoYW5keSBmb3IgdXNlIHdpdGggdGhlIEs5 NSBEaWFsZXIsIGFsbG93aW5nCi0gICBhIGxpc3Qgb2YgcGhvbmUgbnVtYmVycyB0byBiZSBzcGVj aWZpZWQgaW4gdGhlIFRlbGVwaG9uZSBOdW1iZXIgYm94Ci0gICB3aXRob3V0IGhhdmluZyB0byBz ZXQgdXAgb3IgcmVmZXJlbmNlIGEgc2VwYXJhdGUgZGlhbGluZyBkaXJlY3RvcnkuCi0KLSAgIFlv dSBjYW4gYWxzbyB1c2UgaXQgdG8gYWRkIGNvbW1vbmx5LWRpYWxlZCBzZXF1ZW5jZXMgYXMgdmFy aWFibGVzIGluCi0gICB5b3VyIEMtS2VybWl0IGN1c3RvbWl6YXRpb24gZmlsZSwgZS5nLjoKLQot ICBkZWZpbmUgd29yayB7ezc2NTQzMjF9ezc2NTQzMjJ9ezc2NTQzMjN9fQotCi0gICBhbmQgdGhl bjoKLQotICBkaWFsIHtcbSh3b3JrKX0KLQotICAgKHRoZSB2YXJpYWJsZSBuYW1lIG11c3QgYmUg ZW5jbG9zZWQgaW4gYnJhY2VzKS4KLQotICAgT3IgbW9yZSBzaW1wbHk6Ci0KLSAgZGVmaW5lIHdv cmsgZGlhbCB7ezc2NTQzMjF9ezc2NTQzMjJ9ezc2NTQzMjN9fQotCi0gICBhbmQgdGhlbjoKLQot ICB3b3JrCi0KLTIuMi4gTW9kZW1zCi0KLTIuMi4xLiBOZXcgTW9kZW0gVHlwZXMKLQotICAgU2lu Y2UgQy1LZXJtaXQgNi4wOgotCi0gIGF0bGFzLW5ld2NvbS0zMzYwMGlmeEMgQXRsYXMvTmV3Y29t IDMzNjAwCi0gIGF0dC1rZWVwaW50b3VjaCAgICAgICAgQVQmVCBLZWVwaW5Ub3VjaCBQQ01DSUEg Vi4zMmJpcyBDYXJkIE1vZGVtCi0gIGF0dC0xOTAwLXN0dS1paWkgICAgICAgQVQmVCBTZWN1cmUg RGF0YSBTVFUtSUlJIE1vZGVsIDE5MDAKLSAgYXR0LTE5MTAtc3R1LWlpaSAgICAgICBBVCZUIFNl Y3VyZSBEYXRhIFNUVS1JSUkgTW9kZWwgMTkxMAotICBiZXN0ZGF0YSAgICAgICAgICAgICAgIEJl c3QgRGF0YQotICBjYXJkaW5hbCAgICAgICAgICAgICAgIENhcmRpbmFsIFYuMzQgTVZQMjg4WCBz ZXJpZXMuCi0gIGNvbXBhcSAgICAgICAgICAgICAgICAgQ29tcGFxIERhdGErRmF4IChlLmcuIGlu IFByZXNhcmlvKQotICBmdWppdHN1ICAgICAgICAgICAgICAgIEZ1aml0c3UgRmF4L01vZGVtIEFk YXB0ZXIKLSAgZ2VuZXJpYy1oaWdoLXNwZWVkICAgICBBbnkgbW9kZXJuIGVycm9yLWNvcnJlY3Rp bmcgZGF0YS1jb21wcmVzc2luZyBtb2RlbQotICBpdHUtdC12MjV0ZXIvdjI1MCAgICAgIElUVS1U IChDQ0lUVCkgVi4yNXRlciAoVi4yNTApIHN0YW5kYXJkIGNvbW1hbmQgc2V0Ci0gIG1lZ2FoZXJ0 ei1hdHQtdjM0ICAgICAgTWVnYWhlcnR6IEFUJlQgVi4zNAotICBtZWdhaGVydHoteGphY2sgICAg ICAgIE1lZ2FoZXJ0eiBYLUphY2sKLSAgbW90b3JvbGEtY29kZXggICAgICAgICBNb3Rvcm9sYSBD b2RleCAzMjZYIFNlcmllcwotICBtb3Rvcm9sYS1tb250YW5hICAgICAgIE1vdG9yb2xhIE1vbnRh bmEKLSAgbXQ1NjM0enB4ICAgICAgICAgICAgICBNdWx0aXRlY2ggTVQ1NjM0WlBYCi0gIHJvY2t3 ZWxsLXY5MCAgICAgICAgICAgUm9ja3dlbGwgVi45MCA1NksKLSAgcm9sbS0yNDRwYyAgICAgICAg ICAgICBTaWVtZW5zL1JvbG0gMjQ0UEMgKEFUIGNvbW1hbmQgc2V0KQotICByb2xtLTYwMC1zZXJp ZXMgICAgICAgIFNpZW1lbnMvUm9sbSA2MDAgU2VyaWVzIChBVCBjb21tYW5kIHNldCkKLSAgc3Bp cml0LWlpICAgICAgICAgICAgICBRdWlja0NvbW0gU3Bpcml0IElJCi0gIHN1cHJhc29uaWMgICAg ICAgICAgICAgU3VwcmFTb25pYyBWMjg4KwotICBzdXByYS1leHByZXNzLXY5MCAgICAgIFN1cHJh IEV4cHJlc3MgVi45MAotCi0gICBPbmUgb2YgdGhlIG5ldyB0eXBlcywgImdlbmVyaWMtaGlnaC1z cGVlZCIgbmVlZHMgYSBiaXQgb2YgZXhwbGFuYXRpb24uCi0gICBUaGlzIHR5cGUgd2FzIGFkZGVk IHRvIGVhc2lseSBoYW5kbGUgb3RoZXIgdHlwZXMgdGhhdCBhcmUgbm90Ci0gICBleHBsaWNpdGx5 IGNvdmVyZWQsIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGUgYm90aGVyIG9mIGFkZGluZyBhCi0g ICBjb21wbGV0ZSB1c2VyLWRlZmluZWQgbW9kZW0gdHlwZS4gVGhpcyBvbmUgd29ya3MgZm9yIG1v ZGVybiBtb2RlbXMgdGhhdAotICAgdXNlIHRoZSBBVCBjb21tYW5kIHNldCwgb24gdGhlIGFzc3Vt cHRpb24gdGhhdCBhbGwgdGhlIGRlZmF1bHQKLSAgICgiZmFjdG9yeSIpIHNldHRpbmdzIG9mIHRo ZSBtb2RlbSAoYSkgYXJlIGFwcHJvcHJpYXRlIGZvciBLZXJtaXQsIChiKQotICAgaW5jbHVkZSBl cnJvciBjb3JyZWN0aW9uLCBkYXRhIGNvbXByZXNzaW9uLCBhbmQgc3BlZWQgYnVmZmVyaW5nOyBh bmQKLSAgIChjKSBhcmUgcmVjYWxsYWJsZSB3aXRoIHRoZSBjb21tYW5kIEFUJkYuCi0KLSAgIElm IHRoZSBjb21tYW5kIHRvIHJlY2FsbCB5b3VyIG1vZGVtJ3MgcHJvZmlsZSBpcyBub3QgQVQmRiwg dXNlIHRoZSBTRVQKLSAgIE1PREVNIENPTU1BTkQgSU5JVC1TVFJJTkcgY29tbWFuZCB0byBzcGVj aWZ5IHRoZSBhcHByb3ByaWF0ZSBtb2RlbQotICAgY29tbWFuZC4gVGhlIGRlZmF1bHQgaW5pdC1z dHJpbmcgaXMgQVQmRlwxMyAodGhhdCBpcywgQVQsIGFtcGVyc2FuZCwgRiwKLSAgIGFuZCB0aGVu IGNhcnJpYWdlIHJldHVybik7IGEgc3VydmV5IG9mIGFib3V0IDIwIG1vZGVybiBtb2RlbSB0eXBl cwotICAgc2hvd3MgdGhleSBhbGwgc3VwcG9ydCB0aGlzLCBidXQgdGhleSBtaWdodCBtZWFuIGRp ZmZlcmVudCB0aGluZ3MgYnkKLSAgIGl0LiBGb3IgZXhhbXBsZSwgdGhlIFVTUiBTcG9ydHN0ZXIg b3IgQ291cmllciBuZWVkcyBBVCZGMSAobm90IEFUJkYsCi0gICB3aGljaCBpcyBlcXVpdmFsZW50 IHRvIEFUJkYwLCB3aGljaCByZWNhbGxzIGFuIGluYXBwcm9wcmlhdGUgcHJvZmlsZSksCi0gICBz byBmb3IgVVNSIG1vZGVtczoKLQotICBzZXQgbW9kZW0gdHlwZSBnZW5lcmljLWhpZ2gtc3BlZWQK LSAgc2V0IG1vZGVtIGNvbW1hbmQgaW5pdCBBVCZGMVwxMwotCi0gICBPZiBjb3Vyc2UsIFVTUiBt b2RlbXMgYWxyZWFkeSBoYXZlIHRoZWlyIG93biBidWlsdC1pbiBtb2RlbSB0eXBlLiBCdXQKLSAg IGlmIHlvdSB1c2UgdGhpcyBvbmUgaW5zdGVhZCwgaXQgd2lsbCBkaWFsIGZhc3RlciBiZWNhdXNl IGl0IGhhcyBmZXdlcgotICAgY29tbWFuZHMgdG8gZ2l2ZSB0byB0aGUgbW9kZW07IGluIHRoYXQg c2Vuc2UgIiZGMSIgaXMgbGlrZSBhIG1hY3JvIHRoYXQKLSAgIGJ1bmRsZXMgbnVtZXJvdXMgY29t bWFuZHMgaW50byBhIHNpbmdsZSBvbmUuIFNlZSB5b3VyIG1vZGVtIG1hbnVhbCBmb3IKLSAgIGRl dGFpbHMgYWJvdXQgZmFjdG9yeSBwcm9maWxlcyBhbmQgY29tbWFuZHMgdG8gcmVjYWxsIHRoZW0u Ci0KLSAgIFdBUk5JTkc6IERvIG5vdCB1c2UgdGhlIGdlbmVyaWMtaGlnaC1zcGVlZCBtb2RlbSB0 eXBlIGluIG9wZXJhdGluZwotICAgc3lzdGVtcyBsaWtlIFZNUyB3aGVyZSBoYXJkd2FyZSBmbG93 IGNvbnRyb2wgaXMgbm90IGF2YWlsYWJsZSwgYXQgbGVhc3QKLSAgIG5vdCB1bmxlc3MgeW91IGNo YW5nZSB0aGUgaW5pdCBzdHJpbmcgZnJvbSBBVCZGXDEzIHRvIHNvbWV0aGluZyBlbHNlCi0gICB0 aGF0IGVuYWJsZXMgbG9jYWwgWG9uL1hvZmYgb3Igb3RoZXIgYXBwcm9wcmlhdGUgdHlwZSBvZiBm bG93IGNvbnRyb2wuCi0KLSAgIEFsc28gc2VlIFs0MDRdU2VjdGlvbiAyLjEuNyBmb3IgYWRkaXRp b25hbCBoaW50cyBhYm91dCBtYWtpbmcgZGlhbGluZwotICAgZ28gZmFzdGVyLgotCi0yLjIuMi4g TmV3IE1vZGVtIENvbnRyb2xzCi0KLSAgIFNFVCBNT0RFTSBDQVBBQklMSVRJRVMgbGlzdAotICAg ICAgICAgIEluIEMtS2VybWl0IDcuMCwgdGhpcyBjb21tYW5kIGF1dG9tYXRpY2FsbHkgdHVybnMg TU9ERU0KLSAgICAgICAgICBTUEVFRC1NQVRDSElORyBPRkYgaWYgU0IgKFNwZWVkIEJ1ZmZlcmlu ZykgaXMgaW4gdGhlIGxpc3QsIGFuZAotICAgICAgICAgIHR1cm5zIGl0IE9OIGlmIFNCIGlzIGFi c2VudC4KLQotICAgU0VUIE1PREVNIENPTU1BTkQgUFJFRElBTC1JTklUIFsgdGV4dCBdCi0gICAg ICAgICAgQ29tbWFuZHMgdG8gYmUgc2VudCB0byB0aGUgbW9kZW0ganVzdCBwcmlvciB0byBkaWFs aW5nLiBOb3JtYWxseQotICAgICAgICAgIG5vbmUuCi0KLSAgIFNFVCBNT0RFTSBTUEVBS0VSIHsg T04sIE9GRiB9Ci0gICAgICAgICAgRGV0ZXJtaW5lcyB3aGV0aGVyIG1vZGVtIHNwZWFrZXIgaXMg b24gb3Igb2ZmIHdoaWxlIGNhbGwgaXMKLSAgICAgICAgICBiZWluZyBwbGFjZWQuIE9OIGJ5IGRl ZmF1bHQuIE5vdGU6IFRoaXMgY29tbWFuZCBkb2VzIG5vdCBwcm92aWRlCi0gICAgICAgICAgZmlu ZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciB3aGVuIHRoZSBzcGVha2VyIGlzIG9uIG9yIG9mZi4KLSAg ICAgICAgICBOb3JtYWxseSwgT04gbWVhbnMgd2hpbGUgdGhlIGNhbGwgaXMgYmVpbmcgcGxhY2Vk LCB1bnRpbCB0aGUKLSAgICAgICAgICBwb2ludCBhdCB3aGljaCBjYXJyaWVyIGlzIHN1Y2Nlc3Nm dWxseSBlc3RhYmxpc2hlZC4gSWYgeW91cgotICAgICAgICAgIG1vZGVtIGhhcyBhIGRpZmZlcmVu dCBzcGVha2VyIG9wdGlvbiB0aGF0IHlvdSB3YW50IHRvIGNob29zZSwKLSAgICAgICAgICB0aGVu IHVzZSB0aGUgU0VUIE1PREVNIENPTU1BTkQgU1BFQUtFUiBPTiB0ZXh0IGNvbW1hbmQgdG8KLSAg ICAgICAgICBzcGVjaWZ5IHRoaXMgb3B0aW9uLgotCi0gICBTRVQgTU9ERU0gQ09NTUFORCBTUEVB S0VSIHsgT04sIE9GRiB9IFsgdGV4dCBdCi0gICAgICAgICAgU3BlY2lmeSBvciBvdmVycmlkZSB0 aGUgY29tbWFuZHMgdG8gdHVybiB5b3VyIG1vZGVtJ3Mgc3BlYWtlciBvbgotICAgICAgICAgIGFu ZCBvZmYuCi0KLSAgIFNFVCBNT0RFTSBWT0xVTUUgeyBMT1csIE1FRElVTSwgSElHSCB9Ci0gICAg ICAgICAgV2hlbiBNT0RFTSBTUEVBS0VSIGlzIG9uLCBzZWxlY3Qgdm9sdW1lLiBOb3RlOiBJbiBz b21lIG1vZGVtcywKLSAgICAgICAgICBlc3BlY2lhbGx5IGludGVybmFsIG9uZXMsIHRoZXNlIGNv bW1hbmRzIGhhdmUgbm8gZWZmZWN0OyB0aGlzIGlzCi0gICAgICAgICAgYSBsaW1pdGF0aW9uIG9m IHRoZSBwYXJ0aWN1bGFyIG1vZGVtLCBub3Qgb2YgS2VybWl0LgotCi0gICBTRVQgTU9ERU0gQ09N TUFORCBWT0xVTUUgeyBMT1csIE1FRElVTSwgSElHSCB9IFsgdGV4dCBdCi0gICAgICAgICAgU3Bl Y2lmeSBvciBvdmVycmlkZSB0aGUgY29tbWFuZHMgdG8gc2V0IHlvdXIgbW9kZW0ncyBzcGVha2Vy Ci0gICAgICAgICAgdm9sdW1lLgotCi0gICBTRVQgTU9ERU0gQ09NTUFORCBJR05PUkUtRElBTFRP TkUgWyB0ZXh0IF0KLSAgICAgICAgICBUaGUgY29tbWFuZCB0byBlbmFibGUgYmxpbmQgZGlhbGlu ZyAoWzQwNV1TZWN0aW9uIDIuMS42KS4KLQotICAgU0VUIE1PREVNIEVTQ0FQRS1DSEFSQUNURVIg Y29kZQotICAgICAgICAgIEhhcyBiZWVuIGF1Z21lbnRlZCB0byBhbGxvdyBjb2RlcyBvZiAwIG9y IGxlc3M6IDwgMCBtZWFucyB0aGUKLSAgICAgICAgICBlc2NhcGUgbWVjaGFuaXNtIGlzIGRpc2Fi bGVkLiA9IDAgbWVhbnMgdG8gdXNlIChyZXN0b3JlKSB0aGUKLSAgICAgICAgICBkZWZhdWx0IHZh bHVlIGZyb20gdGhlIG1vZGVtIGRhdGFiYXNlLiA+IDAgYW5kIDwgMTI4IGlzIGEKLSAgICAgICAg ICBsaXRlcmFsIHZhbHVlIHRvIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBvbmUuID4g MTI3IG1lYW5zCi0gICAgICAgICAgdGhlIGVzY2FwZSBtZWNoYW5pc20gaXMgZGlzYWJsZWQuIFRo aXMgYWZmZWN0cyAibW9kZW0gaGFuZ3VwIi4KLSAgICAgICAgICBXaGVuIHRoZSBlc2NhcGUgbWVj aGFuaXNtIGlzIGRpc2FibGVkLCBidXQgU0VUIE1PREVNCi0gICAgICAgICAgSEFOR1VQLU1FVEhP RCBpcyBNT0RFTS1DT01NQU5ELCBpdCBzZW5kcyB0aGUgaGFuZ3VwIGNvbW1hbmQKLSAgICAgICAg ICBpbW1lZGlhdGVseSwgd2l0aG91dCB0aGUgPHBhdXNlPisrKzxwYXVzZT4gYnVzaW5lc3MgZmly c3QuIFRoaXMKLSAgICAgICAgICBpcyB1c2VmdWwgKGZvciBleGFtcGxlKSB3aGVuIHNlbmRpbmcg bG90cyBvZiBudW1lcmljIHBhZ2VzLCBhCi0gICAgICAgICAgcHJvY2VzcyBpbiB3aGljaCBuZXZl ciB3ZSBnbyBvbmxpbmUsIGFuZCBzbyBuZXZlciBuZWVkIHRvIGVzY2FwZQotICAgICAgICAgIGJh Y2suIEVsaW1pbmF0aW5nIHRoZSB1bm5lY2Vzc2FyeSBwYXVzZXMgYW5kIGVzY2FwZSBzZXF1ZW5j ZQotICAgICAgICAgIGFsbG93cyBhIGxvdCBtb3JlIHBhZ2VzIHRvIGJlIHNlbnQgcGVyIHVuaXQg dGltZS4KLQotICAgUmVjYWxsIHRoYXQgQy1LZXJtaXQgY2FuIGRpYWwgbW9kZW1zIHRvIHdoaWNo IGl0IGlzIGNvbm5lY3RlZCB2aWEKLSAgIFRDUC9JUCAoVGVsbmV0IG9yIFJsb2dpbikgYXMgZGVz Y3JpYmVkIG9uIHBhZ2UgMTI2IG9mIFs0MDZdVXNpbmcKLSAgIEMtS2VybWl0LCAybmQgRWQuIElu IHRoaXMgY2FzZSB0aGUgTU9ERU0gSEFOR1VQLU1FVEhPRCBzaG91bGQgYmUKLSAgIE1PREVNLUNP TU1BTkQsIHNpbmNlIFJTLTIzMiBzaWduYWxzIGRvbid0IHdvcmsgb3ZlciBUQ1AvSVAgY29ubmVj dGlvbnMuCi0gICBBcyBub3RlZCBpbiB0aGUgbWFudWFsLCBzdWNoIGNvbm5lY3Rpb25zIGFyZSBz ZXQgdXAgYnkgdGhlIGZvbGxvd2luZwotICAgc2VxdWVuY2U6Ci0KLSAgc2V0IGhvc3QgaG9zdCBb IHBvcnQgXQotICBzZXQgbW9kZW0gdHlwZSBuYW1lCi0gIGRpYWwgbnVtYmVyCi0KLSAgIEJ1dCB0 aGlzIGNhbiBjYXVzZSBjb21wbGljYXRpb25zIHdoZW4geW91IHVzZSBLZXJtaXQgdG8gc3dpdGNo IGJldHdlZW4KLSAgIHNlcmlhbCBhbmQgVENQL0lQIGNvbm5lY3Rpb25zLiBJbiB0aGUgZm9sbG93 aW5nIHNlcXVlbmNlOgotCi0gIHNldCBob3N0IG5hbWUKLSAgc2V0IG1vZGVtIHR5cGUgbmFtZQot ICBzZXQgcG9ydCBuYW1lCi0KLSAgIHRoZSBmaXJzdCB0d28gY29tbWFuZHMgb2JleSB0aGUgcnVs ZXMgZm9yIGRpYWxpbmcgb3V0IG92ZXIgVGVsbmV0LgotICAgSG93ZXZlciwgdGhlIFNFVCBQT1JU IGNvbW1hbmQgcmVxdWlyZXMgdGhhdCBLZXJtaXQgY2xvc2UgaXRzIGN1cnJlbnQKLSAgIChUZWxu ZXQpIGNvbm5lY3Rpb24gYmVmb3JlIGl0IGNhbiBvcGVuIHRoZSBzZXJpYWwgcG9ydCAoc2luY2Ug S2VybWl0Ci0gICBjYW4gb25seSBoYXZlIG9uZSBjb25uZWN0aW9uIG9wZW4gYXQgYSB0aW1lKS4g QnV0IHNpbmNlIGEgbW9kZW0gdHlwZQotICAgd2FzIHNldCBhZnRlciB0aGUgInNldCBob3N0IiBj b21tYW5kIHdhcyBnaXZlbiwgS2VybWl0IGFzc3VtZXMgaXQgaXMgYQotICAgVGVsbmV0IGRpYWxv dXQgY29ubmVjdGlvbiBhbmQgc28gc2VuZHMgdGhlIG1vZGVtJ3MgaGFuZ3VwIHNlcXVlbmNlIGlz Ci0gICBzZW50IHRvIHRoZSBUZWxuZXQgaG9zdC4gVG8gYXZvaWQgdGhpcywgY2xvc2UgdGhlIG5l dHdvcmsgY29ubmVjdGlvbgotICAgZXhwbGljaXRseSBiZWZvcmUgb3BlbmluZyB0aGUgc2VyaWFs IG9uZToKLQotICBzZXQgaG9zdCBuYW1lCi0gIGNsb3NlCi0gIHNldCBtb2RlbSB0eXBlIG5hbWUK LSAgc2V0IHBvcnQgbmFtZQotCi0yLjMuIFRFTE5FVCBhbmQgUkxPR0lOCi0KLSAgIEZvciBhZGRp dGlvbmFsIGJhY2tncm91bmQsIHBsZWFzZSBhbHNvIHJlYWQgdGhlIFs0MDddVEVMTkVULlRYVCBm aWxlLAotICAgYWxzbyBhdmFpbGFibGUgb24gdGhlIFdlYiBpbiBbNDA4XUhUTUwgZm9ybWF0Lgot Ci0gICBDYXV0aW9uczoKLQotICAgICAqIElmIG1ha2luZyBhIFRlbG5ldCBjb25uZWN0aW9uIHdp dGggQy1LZXJtaXQgdGFrZXMgYSB2ZXJ5IGxvbmcgdGltZSwKLSAgICAgICBsaWtlIG92ZXIgYSBt aW51dGUsIHdoZXJlYXMgdGhlIHN5c3RlbSBUZWxuZXQgcHJvZ3JhbSBtYWtlcyB0aGUKLSAgICAg ICBzYW1lIGNvbm5lY3Rpb24gaW1tZWRpYXRlbHksIHRyeSBpbmNsdWRpbmcgdGhlIC9OT1dBSVQg c3dpdGNoOgotICBDLUtlcm1pdD4gdGVsbmV0IC9ub3dhaXQgaG9zdG5hbWUKLQotICAgICAgIFNl ZSBbNDA5XVRFTE5FVC5UWFQgb3IgWzQxMF1URUxORVQuSFRNIGZvciBkZXRhaWxzLiBJZiBpdCBh bHNvCi0gICAgICAgdGFrZXMgYSB2ZXJ5IGxvbmcgdGltZSB0byBtYWtlIGEgVGVsbmV0IGNvbm5l Y3Rpb24gd2l0aCBzeXN0ZW0KLSAgICAgICBUZWxuZXQsIHRoZW4gdGhlIGRlbGF5IGlzIG1vc3Qg bGlrZWx5IGNhdXNlZCBieSByZXZlcnNlIEROUyBsb29rdXBzCi0gICAgICAgd2hlbiB5b3VyIGhv c3QgaXMgbm90IHByb3Blcmx5IHJlZ2lzdGVyZWQgaW4gRE5TLgotICAgICAqIFdoZW4gc3VwcGx5 aW5nIG51bWVyaWMgSVAgYWRkcmVzc2VzIHRvIEMtS2VybWl0IG9yIHRvIGFueSBvdGhlcgotICAg ICAgIGFwcGxpY2F0aW9uIChyZWd1bGFyIFRlbG5ldCwgUmxvZ2luLCBldGMpLCBkbyBub3QgaW5j bHVkZSBsZWFkaW5nCi0gICAgICAgMCdzIGluIGFueSBmaWVsZHMgdW5sZXNzIHlvdSBpbnRlbmQg Zm9yIHRob3NlIGZpZWxkcyB0byBiZQotICAgICAgIGludGVycHJldGVkIGFzIG9jdGFsIChvciBo ZXgpIG51bWJlcnMuIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUKLSAgICAgICBJbnRlcm5ldCBhZGRy ZXNzIGludGVycHJldGVyICh0aGUgc29ja2V0cyBsaWJyYXJ5IGluZXRfYWRkcigpCi0gICAgICAg cm91dGluZSkgaW5jbHVkZXMgdGhlc2Ugd29yZHM6Ci0KLSAgICAgQWxsIG51bWJlcnMgc3VwcGxp ZWQgYXMgInBhcnRzIiBpbiBhICIuIiBub3RhdGlvbiBtYXkgYmUgZGVjaW1hbCwKLSAgICAgb2N0 YWwsIG9yIGhleGFkZWNpbWFsLCBhcyBzcGVjaWZpZWQgaW4gdGhlIEMgbGFuZ3VhZ2UgKHRoYXQg aXMsIGEKLSAgICAgbGVhZGluZyAweCBvciAwWCBpbXBsaWVzIGhleGFkZWNpbWFsOyBvdGhlcndp c2UsIGEgbGVhZGluZyAwIGltcGxpZXMKLSAgICAgb2N0YWw7IG90aGVyd2lzZSwgdGhlIG51bWJl ciBpcyBpbnRlcnByZXRlZCBhcyBkZWNpbWFsKS4KLSAgICAgICBUbyBpbGx1c3RyYXRlLCAxMjgu NTkuMzkuMiBhbmQgMTI4LjA1OS4wMzkuMDAyIGFyZSBub3QgdGhlIHNhbWUKLSAgICAgICBob3N0 ISBFdmVuIHRob3VnaCBtb3N0IG9mIHRoZSBmaWVsZHMgY29udGFpbiBub24tb2N0YWwgZGlnaXRz LgotICAgICAgIFVzaW5nIHN5c3RlbSBUZWxuZXQgKG5vdCBLZXJtaXQpOgotICAkIHRlbG5ldCAx MjguMDU5LjAzOS4wMDIKLSAgVHJ5aW5nIDEyOC40OS4zMy4yIC4uLgotCi0gICAgICAgT2YgY291 cnNlIHRoZSBzYW1lIHRoaW5nIGhhcHBlbnMgd2l0aCBLZXJtaXQgYmVjYXVzZSBpdCB1c2VzIChh cyBpdAotICAgICAgIG11c3QpIHRoZSBzYW1lIHN5c3RlbSBzZXJ2aWNlIGZvciByZXNvbHZpbmcg bmV0d29yayBhZGRyZXNzZXMgdGhhdAotICAgICAgIFRlbG5ldCwgRlRQLCBhbmQgYWxsIG90aGVy IFRDUC9JUCBhcHBsaWNhdGlvbnMgdXNlLgotICAgICAqIFRoZSBSTE9HSU4gc2VjdGlvbiBvbiBw YWdlIDEyMyBkb2VzIG5vdCBtYWtlIGl0IGNsZWFyIHRoYXQgeW91IGNhbgotICAgICAgIHVzZSB0 aGUgU0VUIFRFTE5FVCBURVJNSU5BTC1UWVBFIGNvbW1hbmQgdG8gZ292ZXJuIHRoZSB0ZXJtaW5h bAotICAgICAgIHR5cGUgdGhhdCBpcyByZXBvcnRlZCBieSBDLUtlcm1pdCB0byB0aGUgUkxPR0lO IHNlcnZlci4KLSAgICAgKiBOb3RlIHRoYXQgdGhlIFNFVCBUQ1AgY29tbWFuZHMgZGVzY3JpYmVk IG9uIHBhZ2VzIDEyMi0xMjMgbWlnaHQgYmUKLSAgICAgICBhYnNlbnQ7IHNvbWUgcGxhdGZvcm1z IHRoYXQgc3VwcG9ydCBUQ1AvSVAgZG8gbm90IHN1cHBvcnQgdGhlc2UKLSAgICAgICBwYXJ0aWN1 bGFyIGNvbnRyb2xzLgotCi0gICBOZXcgY29tbWFuZHM6Ci0KLSAgIFRFTE9QVCB7IEFPLCBBWVQs IEJSRUFLLCBDQU5DRUwsIEVDLCBFTCwgRU9GLCBFT1IsIEdBLCBJUCwgRE1BUkssCi0gICAgICAg ICAgRE8sIERPTlQsIE5PUCwgU0IsIFNFLCBTVVNQLCBXSUxMLCBXT05UIH0KLSAgICAgICAgICBU aGlzIGNvbW1hbmQgd2FzIGF2YWlsYWJsZSBwcmV2aW91c2x5LCBidXQgc3VwcG9ydGVkIG9ubHkg RE8sCi0gICAgICAgICAgRE9OVCwgV0lMTCwgYW5kIFdPTlQuIE5vdyBpdCBsZXRzIHlvdSBzZW5k IGFsbCB0aGUgVGVsbmV0Ci0gICAgICAgICAgcHJvdG9jb2wgY29tbWFuZHMuIE5vdGUgdGhhdCBj ZXJ0YWluIGNvbW1hbmRzIGRvIG5vdCByZXF1aXJlIGEKLSAgICAgICAgICByZXNwb25zZSwgYW5k IHRoZXJlZm9yZSBjYW4gYmUgdXNlZCBhcyBub25kZXN0cnVjdGl2ZSAicHJvYmVzIgotICAgICAg ICAgIHRvIHNlZSBpZiB0aGUgVGVsbmV0IHNlc3Npb24gaXMgc3RpbGwgb3BlbjsgZS5nLjoKLQot ICBzZXQgaG9zdCB4eXpjb3JwLmNvbQotICAuLi4KLSAgdGVsb3B0IG5vcAotICBpZiBmYWlsIHN0 b3AgMSBDb25uZWN0aW9uIGxvc3QKLQotICAgU0VUIFRDUCBBRERSRVNTIFsgaXAtYWRkcmVzcyBd Ci0gICAgICAgICAgU3BlY2lmaWVzIHRoZSBJUCBhZGRyZXNzIG9mIHRoZSBjb21wdXRlciB0aGF0 IEMtS2VybWl0IGlzCi0gICAgICAgICAgcnVubmluZyBvbi4gTm9ybWFsbHkgdGhpcyBpcyBub3Qg bmVjZXNzYXJ5LiBUaGUgZXhjZXB0aW9uIHdvdWxkCi0gICAgICAgICAgYmUgaWYgeW91ciBtYWNo aW5lIGhhcyBtdWx0aXBsZSBuZXR3b3JrIGFkYXB0ZXJzIChwaHlzaWNhbCBvcgotICAgICAgICAg IHZpcnR1YWwpIHdpdGggYSBkaWZmZXJlbnQgYWRkcmVzcyBmb3IgZWFjaCBhZGFwdGVyIEFORCB5 b3Ugd2FudAotICAgICAgICAgIEMtS2VybWl0IHRvIHVzZSBhIHNwZWNpZmljIGFkZHJlc3Mgd2hl biBtYWtpbmcgb3V0Z29pbmcKLSAgICAgICAgICBjb25uZWN0aW9ucyBvciBhY2NlcHRpbmcgaW5j b21pbmcgY29ubmVjdGlvbnMuCi0KLSAgIFNFVCBUQ1AgRE5TLVNFUlZJQ0UtUkVDT1JEUyB7IE9O LCBPRkYgfQotICAgICAgICAgIFRlbGxzIEMtS2VybWl0IHdoZXRoZXIgdG8gdHJ5IHRvIHVzZSBE TlMgU1JWIHJlY29yZHMgdG8KLSAgICAgICAgICBkZXRlcm1pbmUgdGhlIGhvc3QgYW5kIHBvcnQg bnVtYmVyIHVwb24gd2hpY2ggdG8gZmluZCBhbgotICAgICAgICAgIGFkdmVydGlzZWQgc2Vydmlj ZS4gRm9yIGV4YW1wbGUsIGlmIGEgaG9zdCB3YW50cyByZWd1bGFyIFRlbG5ldAotICAgICAgICAg IGNvbm5lY3Rpb25zIHJlZGlyZWN0ZWQgdG8gc29tZSBwb3J0IG90aGVyIHRoYW4gMjMsIHRoaXMg ZmVhdHVyZQotICAgICAgICAgIGFsbG93cyBDLUtlcm1pdCB0byBhc2sgdGhlIGhvc3Qgd2hpY2gg cG9ydCBpdCBzaG91bGQgdXNlLiBTaW5jZQotICAgICAgICAgIG5vdCBhbGwgZG9tYWluIHNlcnZl cnMgYXJlIHNldCB1cCB0byBhbnN3ZXIgc3VjaCByZXF1ZXN0cywgdGhpcwotICAgICAgICAgIGZl YXR1cmUgaXMgT0ZGIGJ5IGRlZmF1bHQuCi0KLSAgIFNFVCBUQ1AgUkVWRVJTRS1ETlMtTE9PS1VQ IHsgT04sIE9GRiwgQVVUTyB9Ci0gICAgICAgICAgVGVsbHMgS2VybWl0IHdoZXRoZXIgdG8gcGVy Zm9ybSBhIHJldmVyc2UgRE5TIGxvb2t1cCBvbiBUQ1AvSVAKLSAgICAgICAgICBjb25uZWN0aW9u cy4gVGhpcyBhbGxvd3MgS2VybWl0IHRvIGRldGVybWluZSB0aGUgYWN0dWFsIGhvc3RuYW1lCi0g ICAgICAgICAgb2YgdGhlIGhvc3QgaXQgaXMgY29ubmVjdGVkIHRvLCB3aGljaCBpcyB1c2VmdWwg Zm9yIGNvbm5lY3Rpb25zCi0gICAgICAgICAgdG8gaG9zdCBwb29scywgYW5kIGlzIHJlcXVpcmVk IGZvciBLZXJiZXJvcyBjb25uZWN0aW9ucyB0byBob3N0Ci0gICAgICAgICAgcG9vbHMgYW5kIGZv ciBpbmNvbWluZyBjb25uZWN0aW9ucy4gSWYgdGhlIG90aGVyIGhvc3QgZG9lcyBub3QKLSAgICAg ICAgICBoYXZlIGEgRE5TIGVudHJ5LCB0aGUgcmV2ZXJzZSBsb29rdXAgY291bGQgdGFrZSBhIGxv bmcgdGltZQotICAgICAgICAgIChtaW51dGVzKSB0byBmYWlsLCBidXQgdGhlIGNvbm5lY3Rpb24g d2lsbCBzdGlsbCBiZSBtYWRlLiBUdXJuCi0gICAgICAgICAgdGhpcyBvcHRpb24gT0ZGIGZvciBz cGVlZGllciBjb25uZWN0aW9ucyBpZiB5b3UgZG8gbm90IG5lZWQgdG8KLSAgICAgICAgICBrbm93 IGV4YWN0bHkgd2hpY2ggaG9zdCB5b3UgYXJlIGNvbm5lY3RlZCB0byBhbmQgeW91IGFyZSBub3QK LSAgICAgICAgICB1c2luZyBLZXJiZXJvcy4gQVVUTywgdGhlIGRlZmF1bHQsIG1lYW5zIHRoZSBs b29rdXAgaXMgZG9uZSBvbgotICAgICAgICAgIGhvc3RuYW1lcywgYnV0IG5vdCBvbiBudW1lcmlj IElQIGFkZHJlc3Nlcy4KLQotICAgU0VUIFRFTE5FVCBXQUlULUZPUi1ORUdPVElBVElPTlMgeyBP TiwgT0ZGIH0KLSAgICAgICAgICBFYWNoIFRlbG5ldCBvcHRpb24gbXVzdCBiZSBmdWxseSBuZWdv dGlhdGVkIGVpdGhlciBPbiBvciBPZmYKLSAgICAgICAgICBiZWZvcmUgdGhlIHNlc3Npb24gY2Fu IGNvbnRpbnVlLiBUaGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSB3aXRoCi0gICAgICAgICAgb3B0aW9u cyB0aGF0IHJlcXVpcmUgc3ViLW5lZ290aWF0aW9ucyBzdWNoIGFzIEF1dGhlbnRpY2F0aW9uLAot ICAgICAgICAgIEVuY3J5cHRpb24sIGFuZCBLZXJtaXQ7IGZvciBwcm9wZXIgc3VwcG9ydCBvZiB0 aGVzZSBvcHRpb25zCi0gICAgICAgICAgS2VybWl0IG11c3Qgd2FpdCBmb3IgdGhlIG5lZ290aWF0 aW9ucyB0byBjb21wbGV0ZS4gT2YgY291cnNlLAotICAgICAgICAgIEtlcm1pdCBoYXMgbm8gd2F5 IG9mIGtub3dpbmcgd2hldGhlciBhIHJlcGx5IGlzIGRlbGF5ZWQgb3Igbm90Ci0gICAgICAgICAg Y29taW5nIGF0IGFsbCwgYW5kIHNvIHdpbGwgd2FpdCBhIG1pbnV0ZSBvciBtb3JlIGZvciByZXF1 aXJlZAotICAgICAgICAgIHJlcGxpZXMgYmVmb3JlIGNvbnRpbnVpbmcgdGhlIHNlc3Npb24uIElm IHlvdSBrbm93IHRoYXQgS2VybWl0J3MKLSAgICAgICAgICBUZWxuZXQgcGFydG5lciB3aWxsIG5v dCBiZSBzZW5kaW5nIHRoZSByZXF1aXJlZCByZXBsaWVzLCB5b3UgY2FuCi0gICAgICAgICAgc2V0 IHRoaXMgb3B0aW9uIG9mIE9GRiB0byBhdm9pZCB0aGUgbG9uZyB0aW1lb3V0cy4gT3IgeW91IGNh bgotICAgICAgICAgIGluc3RydWN0IEtlcm1pdCB0byBSRUZVU0Ugc3BlY2lmaWMgb3B0aW9ucyB3 aXRoIHRoZSBTRVQgVEVMT1BUCi0gICAgICAgICAgY29tbWFuZC4KLQotICAgU0VUIFRFTE9QVCBb IHsgL0NMSUVOVCwgL1NFUlZFUiB9IF0gb3B0aW9uCi0gICAgICAgICAgeyBBQ0NFUFRFRCwgUkVG VVNFRCwgUkVRVUVTVEVELCBSRVFVSVJFRCB9Ci0gICAgICAgICAgWyB7IEFDQ0VQVEVELCBSRUZV U0VELCBSRVFVRVNURUQsIFJFUVVJUkVEIH0gXQotICAgICAgICAgIFNFVCBURUxPUFQgbGV0cyB5 b3Ugc3BlY2lmeSBwb2xpY3kgcmVxdWlyZW1lbnRzIGZvciBLZXJtaXQncwotICAgICAgICAgIGhh bmRsaW5nIG9mIFRlbG5ldCBvcHRpb24gbmVnb3RpYXRpb25zLiBTZXR0aW5nIGFuIG9wdGlvbiBp cwotICAgICAgICAgIFJFUVVJUkVEIGNhdXNlcyBLZXJtaXQgdG8gb2ZmZXIgdGhlIG9wdGlvbiB0 byB0aGUgcGVlciBhbmQKLSAgICAgICAgICBkaXNjb25uZWN0IGlmIHRoZSBvcHRpb24gaXMgcmVm dXNlZC4gUkVRVUVTVEVEIGNhdXNlcyBLZXJtaXQgdG8KLSAgICAgICAgICBvZmZlciBhbiBvcHRp b24gdG8gdGhlIHBlZXIuIEFDQ0VQVEVEIHJlc3VsdHMgaW4gbm8gb2ZmZXIgYnV0Ci0gICAgICAg ICAgS2VybWl0IHdpbGwgYXR0ZW1wdCB0byBuZWdvdGlhdGUgdGhlIG9wdGlvbiBpZiBpdCBpcyBy ZXF1ZXN0ZWQuCi0gICAgICAgICAgUkVGVVNFRCBpbnN0cnVjdHMgS2VybWl0IHRvIHJlZnVzZSB0 aGUgb3B0aW9uIGlmIGl0IGlzIHJlcXVlc3RlZAotICAgICAgICAgIGJ5IHRoZSBwZWVyLgotCi0g ICAgICAgICAgU29tZSBvcHRpb25zIGFyZSBuZWdvdGlhdGVkIGluIHR3byBkaXJlY3Rpb25zIGFu ZCBhY2NlcHQKLSAgICAgICAgICBzZXBhcmF0ZSBwb2xpY2llcyBmb3IgZWFjaCBkaXJlY3Rpb247 IHRoZSBmaXJzdCBrZXl3b3JkIGFwcGxpZXMKLSAgICAgICAgICB0byBLZXJtaXQgaXRzZWxmLCB0 aGUgc2Vjb25kIGFwcGxpZXMgdG8gS2VybWl0J3MgVGVsbmV0IHBhcnRuZXI7Ci0gICAgICAgICAg aWYgdGhlIHNlY29uZCBrZXl3b3JkIGlzIG9taXR0ZWQsIGFuIGFwcHJvcHJpYXRlCi0gICAgICAg ICAgKG9wdGlvbi1zcGVjaWZpYykgZGVmYXVsdCBpcyBhcHBsaWVkLiBZb3UgY2FuIGFsc28gaW5j bHVkZSBhCi0gICAgICAgICAgL0NMSUVOVCBvciAvU0VSVkVSIHN3aXRjaCB0byBpbmRpY2F0ZSB3 aGV0aGVyIHRoZSBnaXZlbiBwb2xpY2llcwotICAgICAgICAgIGFwcGx5IHdoZW4gS2VybWl0IGlz IHRoZSBUZWxuZXQgY2xpZW50IG9yIHRoZSBUZWxuZXQgc2VydmVyOyBpZgotICAgICAgICAgIG5v IHN3aXRjaCBpcyBnaXZlbiwgdGhlIGNvbW1hbmQgYXBwbGllcyB0byB0aGUgY2xpZW50LgotCi0g ICAgICAgICAgTm90ZSB0aGF0IHNvbWUgb2YgS2VybWl0J3MgVGVsbmV0IHBhcnRuZXJzIGZhaWwg dG8gcmVmdXNlCi0gICAgICAgICAgb3B0aW9ucyB0aGF0IHRoZXkgZG8gbm90IHJlY29nbml6ZSBh bmQgaW5zdGVhZCBkbyBub3QgcmVzcG9uZCBhdAotICAgICAgICAgIGFsbC4gSW4gdGhpcyBjYXNl IGl0IGlzIHBvc3NpYmxlIHRvIHVzZSBTRVQgVEVMT1BUIHRvIGluc3RydWN0Ci0gICAgICAgICAg S2VybWl0IHRvIFJFRlVTRSB0aGUgb3B0aW9uIGJlZm9yZSBjb25uZWN0aW5nIHRvIHRoZSBwcm9i bGVtCi0gICAgICAgICAgaG9zdCwgdGh1cyBza2lwcGluZyB0aGUgcHJvYmxlbWF0aWMgbmVnb3Rp YXRpb24uCi0KLSAgICAgICAgICBVc2UgU0hPVyBURUxPUFQgdG8gdmlldyBjdXJyZW50IFRlbG5l dCBPcHRpb24gbmVnb3RpYXRpb24KLSAgICAgICAgICBzZXR0aW5ncy4gU0hPVyBURUxORVQgZGlz cGxheXMgY3VycmVudCBUZWxuZXQgc2V0dGluZ3MuCi0KLTIuMy4wLiBCdWcgRml4ZXMKLQotICAg SWYgInNldCBob3N0IG5vbmV4aXN0ZW50LWhvc3QiIHdhcyBnaXZlbiAoYW5kIGl0IHByb3Blcmx5 IGZhaWxlZCksCi0gICBmb2xsb3dlZCBieSBjZXJ0YWluIGNvbW1hbmRzIGxpa2UgU0VORCwgdGhl IG9yaWdpbmFsIGxpbmUgYW5kIG1vZGVtCi0gICB0eXBlIHdlcmUgbm90IHJlc3RvcmVkIGFuZCBD LUtlcm1pdCB0aG91Z2h0IHRoYXQgaXQgc3RpbGwgaGFkIGEgbmV0d29yawotICAgaG9zdG5hbWU7 IGZpeGVkIGluIDcuMC4KLQotMi4zLjEuIFRlbG5ldCBCaW5hcnkgTW9kZSBCdWcgQWRqdXN0bWVu dHMKLQotICAgU0VUIFRFTE5FVCBCVUcgQklOQVJZLU1FLU1FQU5TLVUtVE9PIHsgT04sIE9GRiB9 IHdhcyBhZGRlZCB0byBlZGl0IDE5MgotICAgYWZ0ZXIgdGhlIGJvb2sgd2FzIHByaW50ZWQuIEFs c28gU0VUIFRFTE5FVCBCVUcgQklOQVJZLVUtTUVBTlMtTUUtVE9PLgotICAgVGhlIGRlZmF1bHQg Zm9yIGJvdGggaXMgT0ZGLiBPTiBzaG91bGQgYmUgdXNlZCB3aGVuIGNvbW11bmljYXRpbmcgd2l0 aAotICAgYSBUZWxuZXQgcGFydG5lciAoY2xpZW50IG9yIHNlcnZlcikgdGhhdCBtaXN0YWtlbmx5 IGJlbGlldmVzIHRoYXQKLSAgIHRlbGxpbmcgQy1LZXJtaXQgdG8gZW50ZXIgVGVsbmV0IGJpbmFy eSBtb2RlIGFsc28gbWVhbnMgdGhhdCBpdCwgdG9vLAotICAgaXMgaW4gYmluYXJ5IG1vZGUsIGNv bnRyYXJ5IHRvIHRoZSBUZWxuZXQgc3BlY2lmaWNhdGlvbiwgd2hpY2ggc2F5cwotICAgdGhhdCBi aW5hcnkgbW9kZSBtdXN0IGJlIG5lZ290aWF0ZWQgaW4gZWFjaCBkaXJlY3Rpb24gc2VwYXJhdGVs eS4KLQotMi4zLjIuIFZNUyBVQ1ggVGVsbmV0IFBvcnQgQnVnIEFkanVzdG1lbnQKLQotICAgQSBu ZXcgY29tbWFuZCwgU0VUIFRDUCBVQ1gtUE9SVC1CVUcsIHdhcyBhZGRlZCBmb3IgVk1TIHZlcnNp b25zIHdpdGgKLSAgIFVDWCAoREVDIFRDUC9JUCksIGFwcGx5aW5nIG9ubHkgdG8gZWFybHkgdmVy c2lvbnMgb2YgVUNYLCBsaWtlIDIuMiBvcgotICAgZWFybGllci4gSWYgeW91IHRyeSB0byB1c2Ug Vk1TIEMtS2VybWl0IHRvIG1ha2UgYSBUZWxuZXQgY29ubmVjdGlvbgotICAgdXNpbmcgYSBwb3J0 IG5hbWUgKGxpa2UgInRlbG5ldCIsIHdoaWNoIGlzIHVzZWQgYnkgZGVmYXVsdCksIHRoZQotICAg dW5kZXJseWluZyBVQ1ggZ2V0c2VydmJ5bmFtZSgpIGZ1bmN0aW9uIG1pZ2h0IHJldHVybiB0aGUg c2VydmljZSBudW1iZXIKLSAgIHdpdGggaXRzIGJ5dGVzIHN3YXBwZWQgYW5kIHRoZSBjb25uZWN0 aW9uIHdpbGwgZmFpbC4gSWYgInRlbG5ldAotICAgaG9zdG5hbWUgMjMiIHdvcmtzLCB0aGVuIHlv dXIgdmVyc2lvbiBvZiBVQ1ggaGFzIHRoaXMgYnVnIGFuZCB5b3UgY2FuCi0gICBwdXQgInNldCB0 Y3AgdWN4LXBvcnQtYnVnIG9uIiBpbiB5b3VyIENLRVJNSVQuSU5JIGZpbGUgdG8gZ2V0IGFyb3Vu ZAotICAgaXQuCi0KLTIuMy4zLiBUZWxuZXQgTmV3IEVudmlyb25tZW50IE9wdGlvbgotCi0gICBU aGUgVEVMTkVUIE5FVy1FTlZJUk9OTUVOVCBvcHRpb24gKFs0MTFdUkZDIDE1NzIpIGlzIHN1cHBv cnRlZCBhcyA3LjAuCi0gICBUaGlzIG9wdGlvbiBhbGxvd3MgdGhlIEMtS2VybWl0IFRlbG5ldCBj bGllbnQgdG8gc2VuZCBjZXJ0YWluCi0gICB3ZWxsLWtub3duIHZhcmlhYmxlcyB0byB0aGUgVGVs bmV0IHNlcnZlciwgaW5jbHVkaW5nIFVTRVIsIFBSSU5URVIsCi0gICBESVNQTEFZLCBhbmQgc2V2 ZXJhbCBvdGhlcnMuIFRoaXMgZmVhdHVyZSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4KLSAgIFdp bmRvd3MgYW5kIE9TLzIsIGRpc2FibGVkIGJ5IGRlZmF1bHQgZWxzZXdoZXJlLiBUaGUgY29tbWFu ZCB0byBlbmFibGUKLSAgIGFuZCBkaXNhYmxlIGl0IGlzOgotCi0gIFNFVCBURUxORVQgRU5WSVJP Tk1FTlQgeyBPTiwgT0ZGIH0KLQotICAgV2hlbiBPTiwgYW5kIHlvdSBUZWxuZXQgdG8gYW5vdGhl ciBjb21wdXRlciwgeW91IG1pZ2h0IChvciBtaWdodCBub3QpCi0gICBub3RpY2UgdGhhdCB0aGUg ImxvZ2luOiIgb3IgIlVzZXJuYW1lOiIgcHJvbXB0IGRvZXMgbm90IGFwcGVhciAtLQotICAgdGhh dCdzIGJlY2F1c2UgeW91ciB1c2VybmFtZSB3YXMgc2VudCBhaGVhZCwgaW4gd2hpY2ggY2FzZSB0 aGUgcmVtb3RlCi0gICBzeXN0ZW0gbWlnaHQgcHJvbXB0IHlvdSBvbmx5IGZvciB5b3VyIHBhc3N3 b3JkIChzaW1pbGFyIHRvIFJsb2dpbikuIFVzZQotICAgInNldCB0ZWxuZXQgZW52aXJvbm1lbnQg b2ZmIiB0byBkZWZlYXQgdGhpcyBmZWF0dXJlLCBwYXJ0aWN1bGFybHkgaW4KLSAgIHNjcmlwdHMg d2hlcmUgdGhlIGRpYWxvZyBtdXN0IGJlIHByZWRpY3RhYmxlLiBZb3UgY2FuIGFsc28gdXNlIHRo aXMKLSAgIGNvbW1hbmQgdG8gc3BlY2lmeSBvciBvdmVycmlkZSBzcGVjaWZpYyB3ZWxsLWtub3du IGVudmlyb25tZW50IHZhcmlhYmxlCi0gICB2YWx1ZXM6Ci0KLSBTRVQgVEVMTkVUIEVOVklST05N RU5UIHsgQUNDVCxESVNQTEFZLEpPQixQUklOVEVSLFNZU1RFTVRZUEUsVVNFUiB9IFsgdGV4dCBd Ci0KLTIuMy40LiBUZWxuZXQgTG9jYXRpb24gT3B0aW9uCi0KLSAgIFRoZSBURUxORVQgTE9DQVRJ T04gb3B0aW9uIChbNDEyXVJGQyA3NzkpIGlzIHN1cHBvcnRlZCBpbiA3LjAuIFRoaXMKLSAgIG9w dGlvbiBhbGxvd3MgdGhlIEMtS2VybWl0IFRlbG5ldCBjbGllbnQgdG8gc2VuZCBhIGxvY2F0aW9u IHN0cmluZyB0bwotICAgdGhlIHNlcnZlciBpZiB0aGUgc2VydmVyIGluZGljYXRlcyBpdHMgd2ls bGluZ25lc3MgdG8gYWNjZXB0IG9uZS4gSWYgYW4KLSAgIGVudmlyb25tZW50IHZhcmlhYmxlIG5h bWVkIExPQ0FUSU9OIGV4aXN0cyBhdCB0aGUgdGltZSBDLUtlcm1pdCBzdGFydHMsCi0gICBpdHMg dmFsdWUgaXMgdXNlZCBhcyB0aGUgbG9jYXRpb24gc3RyaW5nLiBJZiB5b3Ugd2FudCB0byBjaGFu Z2UgaXQsCi0gICB1c2U6Ci0KLSAgU0VUIFRFTE5FVCBMT0NBVElPTiB0ZXh0Ci0KLSAgIElmIHlv dSBvbWl0IHRoZSB0ZXh0IGZyb20gdGhpcyBjb21tYW5kLCB0aGUgVGVsbmV0IGxvY2F0aW9uIGZl YXR1cmUgaXMKLSAgIGRpc2FibGVkLgotCi0gICBTRVQgVEVMTkVUIEVOVklST05NRU5UIERJU1BM QVkgaXMgdXNlZCB0byBzZXQgdGhlIERJU1BMQVkgdmFyaWFibGUgdGhhdAotICAgaXMgc2VudCB0 byB0aGUgaG9zdCwgYXMgd2VsbCBhcyB0aGUgWERJU1BMQVkgbG9jYXRpb24uCi0KLTIuMy41LiBD b25uZWN0aW5nIHRvIFJhdyBUQ1AgU29ja2V0cwotCi0gICBUaGUgU0VUIEhPU1QgYW5kIFRFTE5F VCBjb21tYW5kcyBub3cgYWNjZXB0IGFuIG9wdGlvbmFsIHN3aXRjaCwKLSAgIC9SQVctU09DS0VU LCBhdCB0aGUgZW5kLCBvbmx5IGlmIHlvdSBmaXJzdCBnaXZlIGEgaG9zdCBhbmQgYSBwb3J0Lgot ICAgRXhhbXBsZToKLQotICBzZXQgaG9zdCB4eXpjb3JwLmNvbSAyMyAvcmF3LXNvY2tldAotICBz ZXQgaG9zdCAxMjguNDkuMzkuMjoyMDAwIC9yYXctc29ja2V0Ci0gIHRlbG5ldCB4eXpjb3JwLmNv bSAzMDAwIC9yYXcKLQotICAgV2l0aG91dCB0aGlzIHN3aXRjaCwgQy1LZXJtaXQgYmVoYXZlcyBh cyBhIFRlbG5ldCBjbGllbnQgd2hlbiAoYSkgdGhlCi0gICBwb3J0IGlzIDIzIG9yIDE2NDksIG9y IChiKSB0aGUgcG9ydCBpcyBub3QgNTEzIGFuZCB0aGUgc2VydmVyIHNlbnQgd2hhdAotICAgYXBw ZWFyZWQgdG8gYmUgVGVsbmV0IG5lZ290aWF0aW9ucyAtLSB0aGF0IGlzLCBtZXNzYWdlcyBzdGFy dGluZyB3aXRoCi0gICAweEZGIChJQUMpLiBXaXRoIHRoaXMgc3dpdGNoLCBLZXJtaXQgc2hvdWxk IHRyZWF0IGFsbCBpbmNvbWluZyBieXRlcyBhcwotICAgcmF3IGRhdGEsIGFuZCB3aWxsIG5vdCBl bmdhZ2UgaW4gYW55IFRlbG5ldCBuZWdvdGlhdGlvbnMgb3IgTlZUIENSTEYKLSAgIG1hbmlwdWxh dGlvbnMuIFRoaXMgYWxsb3dzIHRyYW5zcGFyZW50IG9wZXJhdGlvbiB0aHJvdWdoIChlLmcuKSBy YXcgVENQCi0gICBwb3J0cyBvbiBDaXNjbyB0ZXJtaW5hbCBzZXJ2ZXJzLCB0aHJvdWdoIHRoZSAn bW9kZW1kJyBtb2RlbSBzZXJ2ZXIsCi0gICBldGMuCi0KLTIuMy42LiBJbmNvbWluZyBUQ1AgQ29u bmVjdGlvbnMKLQotICAgQWNjb21wbGlzaGVkIHZpYSBTRVQgSE9TVCAqIHBvcnQsIHdlcmUgaW50 cm9kdWNlZCBpbiBDLUtlcm1pdCA2LjAsIGJ1dAotICAgZm9yIFVOSVggb25seS4gSW4gVmVyc2lv biA3LjAsIHRoZXkgYXJlIGFsc28gYXZhaWxhYmxlIGZvciBWTVMuCi0KLTIuNC4gVGhlIEVJR0hU QklUIENvbW1hbmQKLQotICAgRUlHSFRCSVQgaXMgc2ltcGx5IGEgc2hvcnRoYW5kIGZvcjogU0VU IFBBUklUWSBOT05FLCBTRVQgVEVSTUlOQUwKLSAgIEJZVEVTSVpFIDgsIFNFVCBDT01NQU5EIEJZ VEVTSVpFIDg7IHRoYXQgaXMsIGEgd2F5IHRvIHNldCB1cCBhbiA4LWJpdAotICAgY2xlYW4gY29u bmVjdGlvbiBpbiBhIHNpbmdsZSBjb21tYW5kLgotCi0yLjUuIFRoZSBTZXJ2aWNlcyBEaXJlY3Rv cnkKLQotICAgQ2hhcHRlciA3IG9mIFs0MTNdVXNpbmcgQy1LZXJtaXQgZG9lcyBub3QgbWVudGlv biB0aGUgVUxPR0lOIG1hY3JvLAotICAgd2hpY2ggaXMgdXNlZCBieSBvdXIgc2FtcGxlIHNlcnZp Y2VzIGRpcmVjdG9yeSwgQ0tFUk1JVC5LTkQuIFVubGlrZQotICAgVU5JWExPR0lOLCBWTVNMT0dJ TiwgZXRjLCB0aGlzIG9uZSBpcyBmb3IgdXNlIHdpdGggc3lzdGVtcyB0aGF0IHJlcXVpcmUKLSAg IGEgdXNlciBJRCBidXQgbm8gcGFzc3dvcmQuIFRoZXJlZm9yZSBpdCBkb2Vzbid0IHByb21wdCBm b3IgYSBwYXNzd29yZAotICAgb3Igd2FpdCBmb3IgYSBwYXNzd29yZCBwcm9tcHQgZnJvbSB0aGUg cmVtb3RlIHNlcnZpY2UuCi0KLSAgIEluIHZlcnNpb24gNy4wLCB0aGUgQ0FMTCBtYWNybyB3YXMg Y2hhbmdlZCB0byBub3QgZXhlY3V0ZSBhIFNFVCBNT0RFTQotICAgVFlQRSBjb21tYW5kIGlmIHRo ZSBnaXZlbiBtb2RlbSB0eXBlIHdhcyB0aGUgc2FtZSBhcyB0aGUgY3VycmVudCBvbmU7Ci0gICBv dGhlcndpc2UgdGhlIG5ldyBTRVQgTU9ERU0gVFlQRSBjb21tYW5kIHdvdWxkIG92ZXJ3cml0ZSBh bnkKLSAgIGN1c3RvbWl6YXRpb25zIHRoYXQgdGhlIHVzZXIgaGFkIG1hZGUgdG8gdGhlIG1vZGVt IHNldHRpbmdzLiBEaXR0byBmb3IKLSAgIFNFVCBMSU5FIC8gU0VUIFBPUlQgYW5kIFNFVCBTUEVF RC4KLQotMi42LiBDbG9zaW5nIENvbm5lY3Rpb25zCi0KLSAgIFVudGlsIHZlcnNpb24gNy4wLCB0 aGVyZSB3YXMgbmV2ZXIgYW4gb2J2aW91cyBhbmQgZ2VuZXJhbCB3YXkgdG8gY2xvc2UKLSAgIGEg Y29ubmVjdGlvbi4gSWYgYSBzZXJpYWwgY29ubmVjdGlvbiB3YXMgb3BlbiwgaXQgY291bGQgYmUg Y2xvc2VkIGJ5Ci0gICAic2V0IGxpbmUiIG9yICJzZXQgcG9ydCIgKGdpdmluZyBubyBkZXZpY2Ug bmFtZSk7IGlmIGEgbmV0d29yawotICAgY29ubmVjdGlvbiB3YXMgb3BlbiwgaXQgY291bGQgYmUg Y2xvc2VkIGJ5ICJzZXQgaG9zdCIgKG5vIGhvc3QgbmFtZSkuCi0KLSAgIEluIHZlcnNpb24gNy4w LCBhIG5ldyBjb21tYW5kIGNsb3NlcyB0aGUgY29ubmVjdGlvbiBpbiBhbiBvYnZpb3VzIGFuZAot ICAgc3RyYWlnaHRmb3J3YXJkIHdheSwgbm8gbWF0dGVyIHdoYXQgdGhlIGNvbm5lY3Rpb24gdHlw ZToKLQotICBDTE9TRSBbIENPTk5FQ1RJT04gXQotCi0gICBUaGUgQ0xPU0UgY29tbWFuZCB3YXMg YWxyZWFkeSBwcmVzZW50LCBhbmQgcmVxdWlyZWQgYW4gb3BlcmFuZCBzdWNoIGFzCi0gICBERUJV Ry1MT0csIFdSSVRFLUZJTEUsIGV0YywgYW5kIHNvIGNvdWxkIG5ldmVyIGJlIGdpdmVuIGJ5IGl0 c2VsZi4gVGhlCi0gICBuZXcgQ09OTkVDVElPTiBvcGVyYW5kIGlzIG5vdyB0aGUgZGVmYXVsdCBv cGVyYW5kIGZvciBDTE9TRSwgc28gQ0xPU0UKLSAgIGJ5IGl0c2VsZiBjbG9zZXMgdGhlIGNvbm5l Y3Rpb24sIGlmIG9uZSBpcyBvcGVuLCBqdXN0IGFzIHlvdSB3b3VsZAotICAgZXhwZWN0LCBlc3Bl Y2lhbGx5IGlmIHlvdSBhcmUgYSBUZWxuZXQgb3IgRnRwIHVzZXIuCi0KLSAgIEFsc28gc2VlIHRo ZSBkZXNjcmlwdGlvbiBvZiB0aGUgbmV3IFNFVCBDTE9TRS1PTi1ESVNDT05ORUNUIGNvbW1hbmQg aW4KLSAgIFs0MTRdU2VjdGlvbiAyLjEwLgotCi0yLjcuIFVzaW5nIEMtS2VybWl0IHdpdGggRXh0 ZXJuYWwgQ29tbXVuaWNhdGlvbiBQcm9ncmFtcwotCi0gICBDLUtlcm1pdCA3LjAgaW5jbHVkZXMg YSBuZXcgYWJpbGl0eSB0byBjcmVhdGUgYW5kIGNvbmR1Y3Qgc2Vzc2lvbnMKLSAgIHRocm91Z2gg b3RoZXIgY29tbXVuaWNhdGlvbnMgcHJvZ3JhbXMuIFR3byBtZXRob2RzIGFyZSBhdmFpbGFibGU6 Ci0KLSAgICAxLiBQdHkgKHBzZXVkb3Rlcm1pbmFsKTogVGhlIGV4dGVybmFsIHByb2dyYW0gaXMg cnVuIG9uIGEKLSAgICAgICAicHNldWRvdGVybWluYWwiLCB3aGljaCBpcyBjb250cm9sbGVkIGJ5 IEtlcm1pdC4gVGhpcyBtZXRob2Qgd29ya3MKLSAgICAgICB3aXRoIHByYWN0aWNhbGx5IGFueSBl eHRlcm5hbCBwcm9ncmFtLCBidXQgaXQgaXMgbm90IHBvcnRhYmxlLiBBdAotICAgICAgIHRoaXMg d3JpdGluZywgaXQgd29ya3Mgb25seSBvbiBzb21lIChub3QgYWxsKSBVTklYIHZlcnNpb25zLCBh bmQKLSAgICAgICBub3Qgb24gYW55IG5vbi1VTklYIHBsYXRmb3Jtcy4KLSAgICAyLiBQaXBlOiBU aGUgZXh0ZXJuYWwgcHJvZ3JhbSdzIHN0YW5kYXJkIGlucHV0IGFuZCBvdXRwdXQgYXJlCi0gICAg ICAgcmVkaXJlY3RlZCB0aHJvdWdoIGEgInBpcGUiIGNvbnRyb2xsZWQgYnkgS2VybWl0LiBUaGlz IG1ldGhvZCBpcwotICAgICAgIHJlbGF0aXZlbHkgcG9ydGFibGUgLS0gaXQgc2hvdWxkIHdvcmsg YWNyb3NzIGFsbCBVTklYIHZlcnNpb25zLCBhbmQKLSAgICAgICBpdCBhbHNvIHdvcmtzIGluIFdp bmRvd3MgYW5kIE9TLzIgLS0gYnV0IGl0IGlzIGVmZmVjdGl2ZSBvbmx5IHdoZW4KLSAgICAgICB0 aGUgZXh0ZXJuYWwgcHJvZ3JhbSBhY3R1YWxseSB1c2VzIHN0YW5kYXJkIGkvbyAoYW5kIG1hbnkg ZG9uJ3QpLgotCi0gICBUaGUgdHdvIG1ldGhvZHMgYXJlIHN0YXJ0ZWQgZGlmZmVyZW50bHkgYnV0 IGFyZSB1c2VkIHRoZSBzYW1lIHdheQotICAgdGhlcmVhZnRlci4KLQotICAgVGhlIHB1cnBvc2Ug b2YgdGhpcyBmZWF0dXJlIGlzIHRvIGxldCB5b3UgdXNlIEMtS2VybWl0IHNlcnZpY2VzIGxpa2UK LSAgIGZpbGUgdHJhbnNmZXIsIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24sIHNjcmlwdGluZywg YXV0b21hdGljIGRpYWxpbmcsCi0gICBldGMsIG9uIGNvbm5lY3Rpb25zIHRoYXQgS2VybWl0IGNh bid0IG90aGVyd2lzZSBtYWtlIGl0c2VsZi4KLQotICAgVGhpcyBmZWF0dXJlIGlzIHRoZSBvcHBv c2l0ZSBvZiB0aGUgUkVESVJFQ1QgZmVhdHVyZSwgaW4gd2hpY2ggQy1LZXJtaXQKLSAgIG1ha2Vz IHRoZSBjb25uZWN0aW9uLCBhbmQgcmVkaXJlY3RzIGFuIGV4dGVybmFsIChsb2NhbCkgY29tbWFu ZCBvcgotICAgcHJvZ3JhbSBvdmVyIHRoaXMgY29ubmVjdGlvbi4gSW4gYSBwdHkgb3IgcGlwZSBj b25uZWN0aW9uLCBDLUtlcm1pdAotICAgcnVucyBhbmQgY29udHJvbHMgYSBsb2NhbCBjb21tYW5k IG9yIHByb2dyYW0sIHdoaWNoIG1ha2VzIHRoZQotICAgY29ubmVjdGlvbi4gKFRoZSBzYW1lIG1l dGhvZCBjYW4gYmUgdXNlZCB0byBzaW1wbHkgdG8gY29udHJvbCBhIGxvY2FsCi0gICBwcm9ncmFt IHdpdGhvdXQgbWFraW5nIGEgY29ubmVjdGlvbjsgc2VlIFs0MTVdU2VjdGlvbiAyLjguKQotCi0g ICBUbyBmaW5kIG91dCBpZiB5b3VyIHZlcnNpb24gb2YgS2VybWl0IGluY2x1ZGVzIFBUWSBzdXBw b3J0LCB0eXBlICJzaG93Ci0gICBmZWF0dXJlcyIgYW5kIGxvb2sgZm9yIE5FVFBUWSBpbiB0aGUg YWxwaGFiZXRpY2FsIGxpc3Qgb2Ygb3B0aW9ucy4gRm9yCi0gICBwaXBlcywgbG9vayBmb3IgTkVU Q01ELgotCi0gICBUaGUgY29tbWFuZHMgYXJlOgotCi0gICBTRVQgTkVUV09SSyBUWVBFIFBUWSBv ciBTRVQgTkVUV09SSyBUWVBFIFBJUEUKLSAgIFNFVCBIT1NUIGNvbW1hbmQKLSAgICAgICAgICB3 aGVyZSBjb21tYW5kIGlzIGFueSBpbnRlcmFjdGl2ZSBjb21tYW5kLiBJZiB0aGUgY29tbWFuZCBk b2VzCi0gICAgICAgICAgbm90IHVzZSBzdGFuZGFyZCBpL28sIHlvdSBtdXN0IHVzZSBTRVQgTkVU V09SSyBUWVBFIFBUWS4KLQotICAgTm90ZXM6Ci0KLSAgICAgKiBDT01NQU5EIGlzIGFuIGludmlz aWJsZSBzeW5vbnltIGZvciBQSVBFLgotICAgICAqIFRoZSBjb21tYW5kIGFuZCBpdHMgYXJndW1l bnRzIGFyZSBjYXNlLXNlbnNpdGl2ZSBpbiBVTklYLgotCi0gICBUaGUgU0VUIE5FVFdPUksgVFlQ RSwgU0VUIEhPU1Qgc2VxdWVuY2Ugc2V0cyB0aGUgZ2l2ZW4gbmV0d29yayB0eXBlIGZvcgotICAg YWxsIHN1YnNlcXVlbnQgU0VUIEhPU1QgY29tbWFuZHMgdW50aWwgYW5vdGhlciBTRVQgTkVUV09S SyBUWVBFIGNvbW1hbmQKLSAgIGlzIGdpdmVuIHRvIGNoYW5nZSBpdC4KLQotICAgWW91IGNhbiBh bHNvIHVzZSB0aGUgbmV3IC9ORVRXT1JLLVRZUEU6UFRZIG9yIC9ORVRXT1JLLVRZUEU6UElQRSAo b3IKLSAgIHNpbXBseSAvUElQRSBvciAvUFRZKSBzd2l0Y2hlcyBvbiB0aGUgU0VUIEhPU1QgY29t bWFuZCBpdHNlbGY6Ci0KLSAgU0VUIEhPU1QgL05FVFdPUkstVFlQRTpQSVBFIGNvbW1hbmQgIDsg VGhlc2UgdHdvIGFyZSB0aGUgc2FtZQotICBTRVQgSE9TVCAvUElQRSBjb21tYW5kCi0KLSAgU0VU IEhPU1QgL05FVFdPUkstVFlQRTpQVFkgY29tbWFuZCAgIDsgRGl0dG8KLSAgU0VUIEhPU1QgL1BU WSBjb21tYW5kCi0KLSAgIFRoZXNlIGFyZSBsaWtlIFNFVCBORVRXT1JLIFRZUEUgZm9sbG93ZWQg YnkgU0VUIEhPU1QsIGV4Y2VwdCB0aGV5IGFwcGx5Ci0gICBvbmx5IHRvIHRoZSBjb25uZWN0aW9u IGJlaW5nIG1hZGUgYW5kIGRvIG5vdCBjaGFuZ2UgdGhlIGdsb2JhbCBuZXR3b3JrCi0gICB0eXBl IHNldHRpbmcgKHNlZSBbNDE2XVNlY3Rpb24gMS41IGFib3V0IHRoZSBkaWZmZXJlbmNlIGJldHdl ZW4KLSAgIHN3aXRjaGVzIGFuZCBTRVQgY29tbWFuZHMpLgotCi0gICBJbmNsdWRlIGFueSBjb21t YW5kLWxpbmUgb3B0aW9ucyB3aXRoIHRoZSBjb21tYW5kIHRoYXQgbWlnaHQgYmUgbmVlZGVkLAot ICAgYXMgaW4gdGhpcyBleGFtcGxlIHdoZXJlIEMtS2VybWl0IHVzZXMgYW5vdGhlciBjb3B5IG9m IGl0c2VsZiBhcyB0aGUKLSAgIGNvbW11bmljYXRpb25zIHByb2dyYW06Ci0KLSAgU0VUIEhPU1Qg L1BJUEUgL0NPTk5FQ1Qga2VybWl0IC1ZUUogeHl6Y29ycC5jb20KLQotICAgICBJTVBPUlRBTlQ6 IEluIFVuaXgsIHdpbGRjYXJkcyBhbmQgcmVkaXJlY3RvcnMgYXJlIGludGVycHJldGVkIGJ5IHRo ZQotICAgICBzaGVsbC4gSWYgeW91IHdhbnQgdG8gcnVuIGEgcHJvZ3JhbSB3aXRoIChzYXkpIFNF VCBIT1NUIC9QVFkgd2l0aAotICAgICBpdHMgaS9vIHJlZGlyZWN0ZWQgb3Igd2l0aCB3aWxkY2Fy ZCBmaWxlIGFyZ3VtZW50cywgeW91IHdpbGwgbmVlZCB0bwotICAgICBpbnZva2UgdGhlIHNoZWxs IHRvby4gRXhhbXBsZToKLQotU0VUIEhPU1QgL1BUWSB7c2ggLWMgImNyeXB0IDwgZm9vLngifQot U0VUIEhPU1QgL1BUWSB7c2ggLWMgImdyZXAgc29tZXN0cmluZyAqLnR4dCJ9Ci0KLSAgIEFzIHVz dWFsLCBpZiB5b3UgaW5jbHVkZSB0aGUgL0NPTk5FQ1Qgc3dpdGNoLCBTRVQgSE9TVCBlbnRlcnMg Q09OTkVDVAotICAgbW9kZSBpbW1lZGlhdGVseSB1cG9uIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uIG9m IHRoZSBnaXZlbiBjb21tYW5kLgotICAgVGhlcmVmb3JlIG5ldyBjb21tYW5kcyBhcmUgYXZhaWxh YmxlIGFzIGEgc2hvcnRoYW5kIGZvciBTRVQgSE9TVAotICAgL0NPTk5FQ1QgL1BUWSBhbmQgL1BJ UEU6Ci0KLSAgIFBUWSBbIGNvbW1hbmQgXQotICAgUElQRSBbIGNvbW1hbmQgXQotICAgICAgICAg IFRoZSBQVFkgYW5kIFBJUEUgY29tbWFuZHMgd29yayBsaWtlIHRoZSBURUxORVQgYW5kIFJMT0dJ TgotICAgICAgICAgIGNvbW1hbmRzOiB0aGV5IHNldCB1cCB0aGUgY29ubmVjdGlvbiAoaW4gdGhp cyBjYXNlLCB1c2luZyB0aGUKLSAgICAgICAgICBnaXZlbiBjb21tYW5kKSBhbmQgdGhlbiBlbnRl ciBDT05ORUNUIG1vZGUgYXV0b21hdGljYWxseSAoaWYgdGhlCi0gICAgICAgICAgUElQRSBvciBQ VFkgY29tbWFuZCBpcyBnaXZlbiB3aXRob3V0IGEgY29tbWFuZCwgaXQgY29udGludWVzIHRoZQot ICAgICAgICAgIGN1cnJlbnQgc2Vzc2lvbiBpZiBvbmUgaXMgYWN0aXZlOyBvdGhlcndpc2UgaXQg Z2l2ZXMgYW4gZXJyb3IKLSAgICAgICAgICBtZXNzYWdlKS4KLQotICAgVGhlIFBJUEUgY29tbWFu ZCBpcyBuYW1lZCBhZnRlciB0aGUgbWVjaGFuaXNtIGJ5IHdoaWNoIEMtS2VybWl0Ci0gICBjb21t dW5pY2F0ZXMgd2l0aCB0aGUgY29tbWFuZDogVU5JWCBwaXBlcy4gQy1LZXJtaXQncyBpL28gaXMg InBpcGVkIgotICAgdGhyb3VnaCB0aGUgZ2l2ZW4gY29tbWFuZC4gSGVyZSBpcyBhIHR5cGljYWwg ZXhhbXBsZToKLQotICBQSVBFIHJsb2dpbiAtOCB4eXpjb3JwLmNvbQotCi0gICBUaGlzIGlzIGVx dWl2YWxlbnQgdG86Ci0KLSAgU0VUIEhPU1QgL1BJUEUgcmxvZ2luIC04IHh5emNvcnAuY29tCi0g IENPTk5FQ1QKLQotICAgYW5kIHRvOgotCi0gIFNFVCBIT1NUIC9QSVBFIC9DT05ORUNUIHJsb2dp biAtOCB4eXpjb3JwLmNvbQotCi0gICBJTVBPUlRBTlQ6Ci0gICAgICAgICAgSWYgeW91IGFyZSB3 cml0aW5nIGEgc2NyaXB0LCBkbyBub3QgdXNlIHRoZSBQSVBFLCBQVFksIFRFTE5FVCwKLSAgICAg ICAgICBvciBSTE9HSU4gY29tbWFuZCB1bmxlc3MgeW91IHJlYWxseSB3YW50IEMtS2VybWl0IHRv IGVudGVyCi0gICAgICAgICAgQ09OTkVDVCBtb2RlIGF0IHRoYXQgcG9pbnQuIE5vcm1hbGx5IFNF VCBIT1NUIGlzIHVzZWQgaW4gc2NyaXB0cwotICAgICAgICAgIHRvIGFsbG93IHRoZSBsb2dpbiBh bmQgb3RoZXIgZGlhbG9ncyB0byBiZSBjb250cm9sbGVkIGJ5IHRoZQotICAgICAgICAgIHNjcmlw dCBpdHNlbGYsIHJhdGhlciB0aGFuIGJ5IGFuIGFjdGl2ZWx5IHBhcnRpY2lwYXRpbmcgaHVtYW4g YXQKLSAgICAgICAgICB0aGUga2V5Ym9hcmQuCi0KLSAgIFRocm91Z2hwdXQgb2YgcHR5IGFuZCBw aXBlIGNvbm5lY3Rpb25zIGlzIGxpbWl0ZWQgYnkgdGhlIHBlcmZvcm1hbmNlIG9mCi0gICB0aGUg Y2hvc2VuIGNvbW1hbmQgb3IgcHJvZ3JhbSBhbmQgYnkgdGhlIGludGVycHJvY2VzcyBjb21tdW5p Y2F0aW9uCi0gICAoSVBDKSBtZXRob2QgdXNlZCBhbmQvb3IgYnVmZmVyaW5nIGNhcGFjaXR5IG9m IHRoZSBwaXBlIG9yIHB0eSwgd2hpY2gKLSAgIGluIHR1cm4gZGVwZW5kcyBvbiB0aGUgdW5kZXJs eWluZyBvcGVyYXRpbmcgc3lzdGVtLgotCi0gICBJbiBvbmUgdHJpYWwgKG9uIFN1bk9TIDQuMS4z KSwgd2Ugb2JzZXJ2ZWQgZmlsZSB0cmFuc2ZlciByYXRlcyBvdmVyIGFuCi0gICBybG9naW4gY29u bmVjdGlvbiBwcm9jZWVkaW5nIGF0IDIwMEtjcHMgZm9yIGRvd25sb2FkcywgYnV0IG9ubHkgMTBL Y3BzCi0gICBmb3IgdXBsb2FkcyBvbiB0aGUgc2FtZSBjb25uZWN0aW9uIHdpdGggdGhlIHNhbWUg c2V0dGluZ3MgKHNpbWlsYXIKLSAgIGRpc3Bhcml0aWVzIHdlcmUgbm90ZWQgaW4gSFAtVVgpLiBF eGFtaW5hdGlvbiBvZiB0aGUgbG9ncyByZXZlYWxlZCB0aGF0Ci0gICBhIHdyaXRlIHRvIHRoZSBw aXBlIGNvdWxkIHRha2UgYXMgbG9uZyBhcyA1IHNlY29uZHMsIHdoZXJlYXMgcmVhZHMgd2VyZQot ICAgcHJhY3RpY2FsbHkgaW5zdGFudGFuZW91cy4gT24gdGhlIG90aGVyIGhhbmQsIHVzaW5nIFRl bG5ldCBhcyB0aGUKLSAgIGV4dGVybmFsIHByb2dyYW0gcmF0aGVyIHRoYW4gcmxvZ2luLCBkb3du bG9hZHMgYW5kIHVwbG9hZHMgd2VyZSBiZXR0ZXIKLSAgIG1hdGNoZWQgYXQgYWJvdXQgMTc3SyBl YWNoLgotCi0gICBNb3N0IGV4dGVybmFsIGNvbW11bmljYXRpb24gcHJvZ3JhbXMsIGxpa2UgQy1L ZXJtaXQgaXRzZWxmLCBoYXZlIGVzY2FwZQotICAgY2hhcmFjdGVycyBvciBzZXF1ZW5jZXMuIE5v cm1hbGx5IHRoZXNlIGJlZ2luIHdpdGggKG9yIGNvbnNpc3QgZW50aXJlbHkKLSAgIG9mKSBhIGNv bnRyb2wgY2hhcmFjdGVyLiBZb3UgbXVzdCBiZSBzdXJlIHRoYXQgdGhpcyBjb250cm9sIGNoYXJh Y3RlcgotICAgaXMgbm90ICJ1bnByZWZpeGVkIiB3aGVuIHVwbG9hZGluZyBmaWxlcywgb3RoZXJ3 aXNlIHRoZSBleHRlcm5hbAotICAgcHJvZ3JhbSB3aWxsICJlc2NhcGUgYmFjayIgdG8gaXRzIHBy b21wdCwgb3IgY2xvc2UgdGhlIGNvbm5lY3Rpb24sIG9yCi0gICB0YWtlIHNvbWUgb3RoZXIgdW53 YW50ZWQgYWN0aW9uLiBXaGVuIGluIENPTk5FQ1QgbW9kZSwgb2JzZXJ2ZSB0aGUKLSAgIHByb2dy YW0ncyBub3JtYWwgaW50ZXJhY3Rpb24gcnVsZXMuIE9mIGNvdXJzZSBDLUtlcm1pdCdzIG93biBl c2NhcGUKLSAgIGNoYXJhY3RlciAobm9ybWFsbHkgQ3RybC1cKSBpcyBhY3RpdmUgdG9vLCB1bmxl c3MgeW91IGhhdmUgdGFrZW4gc29tZQotICAgYWN0aW9uIHRvIGRpc2FibGUgaXQuCi0KLSAgIE9u IFBUWSBjb25uZWN0aW9ucywgdGhlIHVuZGVybHlpbmcgUFRZIGRyaXZlciBpcyBub3QgZ3VhcmFu dGVlZCB0byBiZQotICAgdHJhbnNwYXJlbnQgdG8gY29udHJvbCBjaGFyYWN0ZXJzIC0tIGZvciBl eGFtcGxlLCBpdCBtaWdodCBleHBhbmQgdGFicywKLSAgIHRyYW5zbGF0ZSBjYXJyaWFnZSByZXR1 cm5zLCBnZW5lcmF0ZSBzaWduYWxzIGlmIGl0IHNlZXMgYW4gaW50ZXJydXB0Ci0gICBjaGFyYWN0 ZXIsIGFuZCBzbyBvbi4gU2ltaWxhciB0aGluZ3MgbWlnaHQgaGFwcGVuIG9uIGEgUElQRSBjb25u ZWN0aW9uLgotICAgRm9yIHRoaXMgcmVhc29uLCBpZiB5b3UgcGxhbiB0byB0cmFuc2ZlciBmaWxl cyBvdmVyIGEgUFRZIG9yIFBJUEUKLSAgIGNvbm5lY3Rpb24sIHRlbGwgdGhlIGZpbGUgc2VuZGVy IHRvOgotCi0gICBTRVQgUFJFRklYSU5HIEFMTAotICAgICAgICAgIFRoaXMgY2F1c2VzIGFsbCBj b250cm9sIGNoYXJhY3RlcnMgdG8gYmUgcHJlZml4ZWQgYW5kCi0gICAgICAgICAgdHJhbnNtaXR0 ZWQgYXMgcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlcnMuCi0KLSAgIElmIHRoZSBleHRlcm5hbCBj b25uZWN0aW9uIHByb2dyYW0gaXMgbm90IDgtYml0IGNsZWFuLCB5b3Ugc2hvdWxkIGFsc286Ci0K LSAgIFNFVCBQQVJJVFkgU1BBQ0UKLSAgICAgICAgICBUaGlzIGNhdXNlcyA4LWJpdCBkYXRhIHRv IGJlIGVuY29kZWQgaW4gNyBiaXRzIHVzaW5nIHNpbmdsZQotICAgICAgICAgIGFuZC9vciBsb2Nr aW5nIHNoaWZ0cy4KLQotICAgQW5kIGlmIGl0IGRvZXMgbm90IG1ha2UgYSByZWxpYWJsZSBjb25u ZWN0aW9uIChzdWNoIGFzIHRob3NlIG1hZGUgYnkKLSAgIFRlbG5ldCwgUmxvZ2luLCBTc2gsIGV0 YyksIHlvdSBzaG91bGQ6Ci0KLSAgIFNFVCBTVFJFQU1JTkcgT0ZGCi0gICAgICAgICAgVGhpcyBm b3JjZXMgQy1LZXJtaXQgdG8gdHJlYXQgdGhlIGNvbm5lY3Rpb24gYXMgdW5yZWxpYWJsZSBhbmQK LSAgICAgICAgICB0byBlbmdhZ2UgaW4gaXRzIG5vcm1hbCBBQ0svTkFLIHByb3RvY29sIGZvciBl cnJvciBkZXRlY3Rpb24gYW5kCi0gICAgICAgICAgY29ycmVjdGlvbiwgcmF0aGVyIHRoYW4gInN0 cmVhbWluZyIgaXRzIHBhY2tldHMsIGFzIGl0IG5vcm1hbGx5Ci0gICAgICAgICAgZG9lcyBvbiBh IG5ldHdvcmsgY29ubmVjdGlvbiAoWzQxN11TZWN0aW9uIDQuMjApLgotCi0gICBJbiBzb21lIGNh c2VzLCBidWZmZXIgc2l6ZXMgbWlnaHQgYmUgcmVzdHJpY3RlZCwgc28geW91IG1pZ2h0IGFsc28g bmVlZAotICAgdG8gcmVkdWNlIHRoZSBLZXJtaXQgcGFja2V0IGxlbmd0aCB0byBmaXQ7IHRoaXMg aXMgYSB0cmlhbC1hbmQtZXJyb3IKLSAgIGFmZmFpci4gRm9yIGV4YW1wbGUsIGlmIHRyYW5zZmVy cyBhbHdheXMgZmFpbCB3aXRoIDQwMDAtYnl0ZSBwYWNrZXRzLAotICAgdHJ5IDIwMDAuIElmIHRo YXQgZmFpbHMgdG9vLCB0cnkgMTAwMCwgYW5kIHNvIG9uLiBUaGUgY29tbWFuZHMgYXJlOgotCi0g ICBTRVQgUkVDRUlWRSBQQUNLRVQtTEVOR1RIIG51bWJlcgotICAgICAgICAgIFRoaXMgdGVsbHMg dGhlIGZpbGUgcmVjZWl2ZXIgdG8gdGVsbCB0aGUgZmlsZSBzZW5kZXIgdGhlIGxvbmdlc3QKLSAg ICAgICAgICBwYWNrZXQgbGVuZ3RoIGl0IGNhbiBhY2NlcHQuCi0KLSAgIFNFVCBTRU5EIFBBQ0tF VC1MRU5HVEggbnVtYmVyCi0gICAgICAgICAgVGhpcyB0ZWxscyB0aGUgZmlsZSBzZW5kZXIgbm90 IHRvIHNlbmQgcGFja2V0cyBsb25nZXIgdGhhbiB0aGUKLSAgICAgICAgICBnaXZlbiBsZW5ndGgs IGV2ZW4gaWYgdGhlIHJlY2VpdmVyIHNheXMgbG9uZ2VyIG9uZXMgYXJlIE9LLiBPZgotICAgICAg ICAgIGNvdXJzZSwgaWYgdGhlIHJlY2VpdmVyJ3MgbGVuZ3RoIGlzIHNob3J0ZXIsIHRoZSBzaG9y dGVyIGxlbmd0aAotICAgICAgICAgIGlzIHVzZWQuCi0KLSAgIElmIG5vbmUgb2YgdGhpcyBzZWVt cyB0byBoZWxwLCB0cnkgZmFsbGluZyBiYWNrIHRvIHRoZSBiYXJlIG1pbmltdW0sCi0gICBsb3dl c3QtY29tbW9uLWRlbm9taW5hdG9yIHByb3RvY29sIHNldHRpbmdzOgotCi0gICBST0JVU1QKLSAg ICAgICAgICBObyBzbGlkaW5nIHdpbmRvd3MsIG5vIHN0cmVhbWluZywgbm8gY29udHJvbC1jaGFy YWN0ZXIKLSAgICAgICAgICB1bnByZWZpeGluZywgcGFja2V0IGxlbmd0aCA5MC4KLQotICAgQW5k IHRoZW4gd29yayB5b3VyIHdheSBiYWNrIHVwIGJ5IHRyaWFsIGFuZCBlcnJvciB0byBnZXQgZ3Jl YXRlcgotICAgdGhyb3VnaHB1dC4KLQotICAgTm90ZSB0aGF0IHdoZW4gc3RhcnRpbmcgYSBQSVBF IGNvbm5lY3Rpb24sIGFuZCB0aGUgY29ubmVjdGlvbiBwcm9ncmFtCi0gICAoc3VjaCBhcyB0ZWxu ZXQgb3IgcmxvZ2luKSBwcmludHMgc29tZSBncmVldGluZyBvciBpbmZvcm1hdGlvbiBtZXNzYWdl cwotICAgYmVmb3JlIHN0YXJ0aW5nIHRoZSBjb25uZWN0aW9uLCB0aGVzZSBhcmUgcXVpdGUgbGlr ZWx5IHRvIGJlIHByaW50ZWQKLSAgIHdpdGggYSBzdGFpcnN0ZXAgZWZmZWN0IChsaW5lZmVlZCB3 aXRob3V0IGNhcnJpYWdlIHJldHVybikuIFRoaXMgaXMKLSAgIGJlY2F1c2UgdGhlIHByb2dyYW0g aXMgbm90IGNvbm5lY3RlZCB3aXRoIHRoZSBVTklYIHRlcm1pbmFsIGRyaXZlcjsKLSAgIHRoZXJl J3Mgbm90IG11Y2ggS2VybWl0IGNhbiBkbyBhYm91dCBpdC4gT25jZSB0aGUgY29ubmVjdGlvbiBp cyBtYWRlLAotICAgZXZlcnl0aGluZyBzaG91bGQgZ28gYmFjayB0byBub3JtYWwuIFRoaXMgc2hv dWxkbid0IGhhcHBlbiBvbiBhIFBUWQotICAgY29ubmVjdGlvbiBiZWNhdXNlIGEgUFRZIGlzLCBp bmRlZWQsIGEgdGVybWluYWwuCi0KLSAgIE9uIGEgc2ltaWxhciBub3RlLCBzb21lIGNvbm5lY3Rp b24gcHJvZ3JhbXMgKGxpa2UgU29sYXJpcyAyLjUgcmxvZ2luKQotICAgbWlnaHQgcHJpbnQgbG90 cyBvZiBlcnJvciBtZXNzYWdlcyBsaWtlICJpb2N0bCBUSU9DR0VUUDogaW52YWxpZAotICAgYXJn dW1lbnQiIHdoZW4gdXNlZCB0aHJvdWdoIGEgcGlwZS4gVGhleSBhcmUgYW5ub3lpbmcgYnV0IHVz dWFsbHkKLSAgIGhhcm1sZXNzLiBJZiB5b3Ugd2FudCB0byBhdm9pZCB0aGVzZSBtZXNzYWdlcywg YW5kIHlvdXIgc2hlbGwgYWxsb3dzCi0gICByZWRpcmVjdGlvbiBvZiBzdGRlcnIsIHlvdSBjYW4g cmVkaXJlY3Qgc3RkZXJyIGluIHlvdXIgcGlwZSBjb21tYW5kLCBhcwotICAgaW4gdGhpcyBleGFt cGxlIHdoZXJlIHRoZSB1c2VyJ3Mgc2hlbGwgaXMgYmFzaDoKLQotICBQSVBFIHJsb2dpbiB4eXpj b3JwLmNvbSAyPiAvZGV2L251bGwKLQotICAgT3IgdXNlIFBUWSByYXRoZXIgdGhhbiBQSVBFLCBz aW5jZSBQVFkgaXMgYXZhaWxhYmxlIG9uIFNvbGFyaXMuCi0KLTIuNy4wLiBDLUtlcm1pdCBvdmVy IHRuMzI3MCBhbmQgdG41MjUwCi0KLSAgIE5vdyB5b3UgY2FuIG1ha2UgYSBjb25uZWN0aW9uIGZy b20gQy1LZXJtaXQgImRpcmVjdGx5IiB0byBhbiBJQk0KLSAgIG1haW5mcmFtZSBhbmQgdHJhbnNm ZXIgZmlsZXMgd2l0aCBpdCwgYXNzdW1pbmcgaXQgaGFzIEtlcm1pdC0zNzAKLSAgIGluc3RhbGxl ZC4gQmVjYXVzZSB0bjMyNzAgaXMgbmVpdGhlciA4LWJpdCBjbGVhbiBub3IgdHJhbnNwYXJlbnQg dG8KLSAgIGNvbnRyb2wgY2hhcmFjdGVycywgeW91IG11c3QgZ2l2ZSB0aGVzZSBjb21tYW5kczoK LQotICBTRVQgUFJFRklYSU5HIEFMTCAgIDsgUHJlZml4IGFsbCBjb250cm9sIGNoYXJhY3RlcnMK LSAgU0VUIFBBUklUWSBTUEFDRSAgICA7IFRlbG5ldCBjb25uZWN0aW9ucyBhcmUgdXN1YWxseSBu b3QgOC1iaXQgY2xlYW4KLQotICAgYW5kIHRoZW46Ci0KLSAgU0VUIEhPU1QgL1BUWSAvQ09OTkVD VCB0bjMyNzAgYWJjY29ycC5jb20KLQotICAgb3Igc2ltcGx5OgotCi0gIHB0eSB0bjMyNzAgYWJj Y29ycC5jb20KLQotICAgU0VUIEhPU1QgL1BJUEUgZG9lcyBub3Qgd29yayBpbiB0aGlzIGNhc2Us IGF0IGxlYXN0IG5vdCBmb3IgZmlsZQotICAgdHJhbnNmZXIuIEZpbGUgdHJhbnNmZXIgZG9lcyB3 b3JrLCBob3dldmVyLCB3aXRoIFNFVCBIT1NUIC9QVFksCi0gICBwcm92aWRlZCB5b3UgdXNlIHRo ZSBkZWZhdWx0IHBhY2tldCBsZW5ndGggb2YgOTAgYnl0ZXM7IGFueXRoaW5nIGxvbmdlcgotICAg c2VlbXMgdG8ga2lsbCB0aGUgc2Vzc2lvbi4KLQotICAgWW91IGNhbiBhbHNvIG1ha2UgY29ubmVj dGlvbnMgdG8gSUJNIEFTLzQwMCBjb21wdXRlcnMgaWYgeW91IGhhdmUgYQotICAgdG41MjUwIHBy b2dyYW0gaW5zdGFsbGVkOgotCi0gIHB0eSB0bjUyNTAgaG9zdG5hbWUKLQotICAgSW4gdGhpcyBj YXNlLCBob3dldmVyLCBmaWxlIHRyYW5zZmVyIGlzIHByb2JhYmx5IG5vdCBpbiB0aGUgY2FyZHMg c2luY2UKLSAgIG5vYm9keSBoYXMgZXZlciBzdWNjZWVkZWQgaW4gd3JpdGluZyBhIEtlcm1pdCBw cm9ncmFtIGZvciB0aGUgQVMvNDAwLgotICAgSGludDoKLQotICBkZWZpbmUgdG4zMjcwIHsKLSAg ICAgIGNoZWNrIHB0eQotICAgICAgaWYgZmFpbCBlbmQgMSBTb3JyeSAtIG5vIFBUWSBzdXBwb3J0 Li4uCi0gICAgICBwdHkgdG4zMjcwIFwlKgotICB9Ci0KLSAgIFNpbWlsYXJseSBmb3IgdG41MjUw LiBOb3RlIHRoYXQgQ0hFQ0sgUFRZIGFuZCBDSEVDSyBQSVBFIGNhbiBiZSB1c2VkIGluCi0gICBt YWNyb3MgYW5kIHNjcmlwdHMgdG8gdGVzdCB3aGV0aGVyIFBUWSBvciBQSVBFIHN1cHBvcnQgaXMg YXZhaWxhYmxlLgotCi0yLjcuMS4gQy1LZXJtaXQgb3ZlciBUZWxuZXQKLQotICAgQWx0aG91Z2gg Qy1LZXJtaXQgaW5jbHVkZXMgaXRzIG93biBUZWxuZXQgaW1wbGVtZW50YXRpb24sIHlvdSBtaWdo dAotICAgbmVlZCB0byB1c2UgYW4gZXh0ZXJuYWwgVGVsbmV0IHByb2dyYW0gdG8gbWFrZSBjZXJ0 YWluIGNvbm5lY3Rpb25zOwotICAgcGVyaGFwcyBiZWNhdXNlIGl0IGhhcyBhY2Nlc3Mgb3Igc2Vj dXJpdHkgZmVhdHVyZXMgbm90IGF2YWlsYWJsZSBpbgotICAgQy1LZXJtaXQgaXRzZWxmLiBBcyBu b3RlZCBhYm92ZSwgdGhlIG9ubHkgcHJlY2F1dGlvbnMgbmVjZXNzYXJ5IGFyZQotICAgdXN1YWxs eToKLQotICBTRVQgUFJFRklYSU5HIEFMTCAgIDsgUHJlZml4IGFsbCBjb250cm9sIGNoYXJhY3Rl cnMKLSAgU0VUIFBBUklUWSBTUEFDRSAgICA7IFRlbG5ldCBjb25uZWN0aW9ucyBtaWdodCBub3Qg YmUgOC1iaXQgY2xlYW4KLQotICAgYW5kIHRoZW46Ci0KLSAgU0VUIEhPU1QgL1BUWSAob3IgL1BJ UEUpIC9DT05ORUNUIHRlbG5ldCBhYmNjb3JwLmNvbQotCi0gICBvciwgZXF1aXZhbGVudGx5Ogot Ci0gIFBUWSAob3IgUElQRSkgdGVsbmV0IGFiY2NvcnAuY29tCi0KLTIuNy4yLiBDLUtlcm1pdCBv dmVyIFJsb2dpbgotCi0gICBDLUtlcm1pdCBpbmNsdWRlcyBpdHMgb3duIFJsb2dpbiBjbGllbnQs IGJ1dCB0aGlzIGNhbiBub3JtYWxseSBiZSB1c2VkCi0gICBvbmx5IGlmIHlvdSBhcmUgcm9vdCwg c2luY2UgdGhlIHJsb2dpbiBUQ1AgcG9ydCBpcyBwcml2aWxlZ2VkLiBCdXQgcHR5cwotICAgYW5k IHBpcGVzIGxldCB5b3UgbWFrZSBybG9naW4gY29ubmVjdGlvbnMgd2l0aCBDLUtlcm1pdCB0aHJv dWdoIHlvdXIKLSAgIGNvbXB1dGVyJ3MgZXh0ZXJuYWwgcmxvZ2luIHByb2dyYW0sIHdoaWNoIGlz IG5vcm1hbGx5IGluc3RhbGxlZCBhcyBhCi0gICBwcml2aWxlZ2VkIHByb2dyYW06Ci0KLSAgU0VU IFBSRUZJWElORyBBTEwKLQotICAgYW5kIHRoZW46Ci0KLSAgU0VUIEhPU1QgL1BUWSAob3IgL1BJ UEUpIC9DT05ORUNUIHJsb2dpbiAtOCBhYmNjb3JwLmNvbQotCi0gICBvciwgZXF1aXZhbGVudGx5 OgotCi0gIFBUWSAob3IgUElQRSkgcmxvZ2luIC04IGFiY2NvcnAuY29tCi0KLSAgIFRoZSAiLTgi IG9wdGlvbiB0byBybG9naW4gZW5hYmxlcyB0cmFuc21pc3Npb24gb2YgOC1iaXQgZGF0YS4gSWYg dGhpcwotICAgaXMgbm90IGF2YWlsYWJsZSwgdGhlbiBpbmNsdWRlIFNFVCBQQVJJVFkgU1BBQ0Ug aWYgeW91IGludGVuZCB0bwotICAgdHJhbnNmZXIgZmlsZXMuCi0KLSAgIE5vdGUgdGhhdCB0aGUg bm9ybWFsIGVzY2FwZSBzZXF1ZW5jZSBmb3IgcmxvZ2luIGlzIENhcnJpYWdlIFJldHVybgotICAg Zm9sbG93ZWQgYnkgVGlsZGUgKH4pLCBidXQgb25seSB3aGVuIHRoZSB0aWxkZSBpcyBmb2xsb3dl ZCBieSBjZXJ0YWluCi0gICBvdGhlciBjaGFyYWN0ZXJzOyB0aGUgZXhhY3QgYmVoYXZpb3IgZGVw ZW5kcyBvbiB5b3VyIHJsb2dpbiBjbGllbnQsIHNvCi0gICByZWFkIGl0cyBkb2N1bWVudGF0aW9u LgotCi0yLjcuMy4gQy1LZXJtaXQgb3ZlciBTZXJpYWwgQ29tbXVuaWNhdGlvbiBQcm9ncmFtcwot Ci0gICBQdHlzIGFuZCBwaXBlcyBhbHNvIGxldCB5b3UgdXNlIHByb2dyYW1zIHRoYXQgbWFrZSBz ZXJpYWwgY29ubmVjdGlvbnMsCi0gICBzdWNoIGFzIGN1IG9yIHRpcC4gRm9yIGV4YW1wbGUsIEMt S2VybWl0IGNhbiBiZSB1c2VkIHRocm91Z2ggY3UgdG8gbWFrZQotICAgY29ubmVjdGlvbnMgdGhh dCBvdGhlcndpc2UgbWlnaHQgbm90IGJlIGFsbG93ZWQsIGUuZy4gYmVjYXVzZSBDLUtlcm1pdAot ICAgaXMgbm90IGluc3RhbGxlZCB3aXRoIHRoZSByZXF1aXJlZCB3cml0ZSBwZXJtaXNzaW9ucyB0 byB0aGUgZGlhbG91dAotICAgZGV2aWNlIGFuZCB0aGUgVVVDUCBsb2NrZmlsZSBkaXJlY3Rvcnku Ci0KLSAgIFN1cHBvc2UgeW91ciBVVUNQIERldmljZXMgZmlsZSBjb250YWlucyBhbiBlbnRyeSBm b3IgYSBzZXJpYWwgZGV2aWNlCi0gICB0dHkwNCB0byBiZSB1c2VkIGZvciBkaXJlY3QgY29ubmVj dGlvbnMsIGJ1dCB0aGlzIGRldmljZSBpcyBwcm90ZWN0ZWQKLSAgIGFnYWluc3QgeW91IChhbmQg S2VybWl0IHdoZW4geW91IHJ1biBpdCkuIEluIHRoaXMgY2FzZSB5b3UgY2FuOgotCi0gIFNFVCBD T05UUk9MIFBSRUZJWCBBTEwKLSAgUFRZIChvciBQSVBFKSBjdSAtbCB0dHkwNAotCi0gICAoU2lt aWxhcmx5IGZvciBkaWFsb3V0IGRldmljZXMsIGV4Y2VwdCB0aGVuIHlvdSBhbHNvIG5lZWQgdG8g aW5jbHVkZQotICAgdGhlIHBob25lIG51bWJlciBpbiB0aGUgImN1IiBjb21tYW5kLikKLQotICAg QXMgd2l0aCBvdGhlciBjb21tdW5pY2F0aW9uIHByb2dyYW1zLCB3YXRjaCBvdXQgZm9yIGN1J3Mg ZXNjYXBlCi0gICBzZXF1ZW5jZSwgd2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlIHJsb2dpbiBwcm9n cmFtJ3M6IENhcnJpYWdlIFJldHVybgotICAgZm9sbG93ZWQgYnkgVGlsZGUgKGZvbGxvd2VkIGJ5 IGFub3RoZXIgY2hhcmFjdGVyIHRvIHNwZWNpZnkgYW4gYWN0aW9uLAotICAgbGlrZSAiLiIgZm9y IGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24gYW5kIGV4aXRpbmcgZnJvbSBjdSkuCi0KLTIuNy40LiBD LUtlcm1pdCBvdmVyIFNlY3VyZSBOZXR3b3JrIENsaWVudHMKLQotICAgICBESVNDTEFJTUVSOiBU aGVyZSBhcmUgbGF3cyBpbiB0aGUgVVNBIGFuZCBvdGhlciBjb3VudHJpZXMgcmVnYXJkaW5nCi0g ICAgIHVzZSwgaW1wb3J0LCBhbmQvb3IgZXhwb3J0IG9mIGVuY3J5cHRpb24gYW5kL29yIGRlY3J5 cHRpb24gb3Igb3RoZXIKLSAgICAgZm9ybXMgb2Ygc2VjdXJpdHkgc29mdHdhcmUsIGFsZ29yaXRo bXMsIHRlY2hub2xvZ3ksIGFuZCBpbnRlbGxlY3R1YWwKLSAgICAgcHJvcGVydHkuIFRoZSBLZXJt aXQgUHJvamVjdCBhdHRlbXB0cyB0byBmb2xsb3cgYWxsIGtub3duIHN0YXR1dGVzLAotICAgICBh bmQgbmVpdGhlciBpbnRlbmRzIG5vciBzdWdnZXN0cyB0aGF0IEtlcm1pdCBzb2Z0d2FyZSBjYW4g b3Igc2hvdWxkCi0gICAgIGJlIHVzZWQgaW4gYW55IHdheSwgaW4gYW55IGxvY2F0aW9uLCB0aGF0 IGNpcmN1bXZlbnRzIGFueQotICAgICByZWd1bGF0aW9ucywgbGF3cywgdHJlYXRpZXMsIGNvdmVu YW50cywgb3Igb3RoZXIgbGVnaXRpbWF0ZSBjYW5vbnMKLSAgICAgb3IgaW5zdHJ1bWVudHMgb2Yg bGF3LCBpbnRlcm5hdGlvbmFsIHJlbGF0aW9ucywgdHJhZGUsIGV0aGljcywgb3IKLSAgICAgcHJv cHJpZXR5LgotCi0gICBGb3Igc2VjdXJlIGNvbm5lY3Rpb25zIG9yIGNvbm5lY3Rpb25zIHRocm91 Z2ggZmlyZXdhbGxzLCBDLUtlcm1pdCA3LjAKLSAgIGNhbiBiZSBhIEtlcmJlcm9zLCBTUlAsIGFu ZC9vciBTT0NLUyBjbGllbnQgd2hlbiBidWlsdCB3aXRoIHRoZQotICAgYXBwcm9wcmlhdGUgb3B0 aW9ucyBhbmQgbGlicmFyaWVzLiBCdXQgb3RoZXIgYXBwbGljYXRpb24tbGV2ZWwgc2VjdXJpdHkK LSAgIGFjcm9ueW1zIGFuZCBtZXRob2RzIC0tIFNTSCwgU1NMLCBTUlAsIFRMUyAtLSBwb3AgdXAg YXQgYW4gYWxhcm1pbmcKLSAgIHJhdGUgYW5kIGFyZSAoYSkgaW1wb3NzaWJsZSB0byBrZWVwIHVw IHdpdGgsIChiKSB1c3VhbGx5IG11dHVhbGx5Ci0gICBpbmNvbXBhdGlibGUsIGFuZCAoYykgaGF2 ZSByZXN0cmljdGlvbnMgb24gZXhwb3J0IG9yIHJlZGlzdHJpYnV0aW9uIGFuZAotICAgc28gY2Fu bm90IGJlIGluY2x1ZGVkIGluIEMtS2VybWl0IGl0c2VsZi4KLQotICAgSG93ZXZlciwgaWYgeW91 IGhhdmUgYSBzZWN1cmUgdGV4dC1iYXNlZCBUZWxuZXQgKG9yIG90aGVyKSBjbGllbnQgdGhhdAot ICAgZW1wbG95cyBvbmUgb2YgdGhlc2Ugc2VjdXJpdHkgbWV0aG9kcywgeW91IGNhbiB1c2UgQy1L ZXJtaXQgInRocm91Z2giCi0gICBpdCB2aWEgYSBwdHkgb3IgcGlwZS4KLQotMi43LjQuMS4gU1NI Ci0KLSAgIEMtS2VybWl0IGRvZXMgbm90IGFuZCBjYW4gbm90IGluY29ycG9yYXRlIFNTSCBkdWUg dG8gbGljZW5zaW5nLCBwYXRlbnQsCi0gICBhbmQgVVNBIGV4cG9ydCBsYXcgcmVzdHJpY3Rpb25z LgotCi0gICBUaGUgVU5JWCBTU0ggY2xpZW50IGRvZXMgbm90IHVzZSBzdGFuZGFyZCBpbnB1dC9v dXRwdXQsIGFuZCB0aGVyZWZvcmUKLSAgIGNhbiBiZSB1c2VkIG9ubHkgYnkgS2VybWl0J3MgUFRZ IGludGVyZmFjZSwgaWYgb25lIGlzIHByZXNlbnQuIFRoZQotICAgY2F1dGlvbnMgYWJvdXQgZmls ZSB0cmFuc2ZlciwgZXRjLCBhcmUgdGhlIHNhbWUgYXMgZm9yIFJsb2dpbi4gRXhhbXBsZToKLQot ICBTRVQgUFJFRklYSU5HIEFMTAotICBQVFkgc3NoIFhZWkNPUlAuQ09NCi0KLSAgIE9yLCBmb3Ig YSBzY3JpcHRlZCBzZXNzaW9uOgotCi0gIFNFVCBQUkVGSVhJTkcgQUxMCi0gIFNFVCBIT1NUIC9Q VFkgc3NoIFhZWkNPUlAuQ09NCi0KLSAgIEhpbnQ6Ci0KLSAgZGVmaW5lIHNzaCB7Ci0gICAgICBj aGVjayBwdHkKLSAgICAgIGlmIGZhaWwgZW5kIDEgU29ycnkgLSBubyBQVFkgc3VwcG9ydC4uLgot ICAgICAgcHR5IHNzaCBcJSoKLSAgfQotCi0yLjcuNC4yLiBTU0wKLQotICAgU2VjdXJlIFNvY2tl dHMgTGF5ZXIgKFNTTCkgaXMgYW5vdGhlciBUQ1AvSVAgc2VjdXJpdHkgb3ZlcmxheSwgdGhpcyBv bmUKLSAgIGRlc2lnbmVkIGJ5IGFuZCBmb3IgTmV0c2NhcGUuIEFuIFNTTCBUZWxuZXQgY2xpZW50 IGlzIGF2YWlsYWJsZSBmb3IKLSAgIFVOSVggZnJvbSB0aGUgVW5pdmVyc2l0eSBvZiBRdWVlbnNs YW5kLiBNb3JlIGluZm8gYXQ6Ci0KLSAgWzQxOF1odHRwOi8vd3d3LnBzeS51cS5vei5hdS9+ZnRw L0NyeXB0by8KLQotICAgSW50ZXJvcGVyYWJpbGl0eSB3aXRoIEMtS2VybWl0IGlzIHVua25vd24u IEMtS2VybWl0IGFsc28gaW5jbHVkZXMgaXRzCi0gICBvd24gYnVpbHQtaW4gU1NML1RMUyBzdXBw b3J0LCBidXQgaXQgaXMgbm90IGV4cG9ydGFibGU7IFs0MTldQ0xJQ0sgSEVSRQotICAgZmlsZSBm b3IgZGV0YWlscy4KLQotMi43LjQuMy4gU1JQCi0KLSAgIFNSUChUTSkgaXMgU3RhbmZvcmQgVW5p dmVyc2l0eSdzIFNlY3VyZSBSZW1vdGUgUGFzc3dvcmQgcHJvdG9jb2wuIEFuCi0gICBTUlAgVGVs bmV0IGNsaWVudCBpcyBhdmFpbGFibGUgZnJvbSBTdGFuZm9yZDoKLQotICBbNDIwXWh0dHA6Ly9z cnAuc3RhbmZvcmQuZWR1L3NycC8KLQotICAgU3RhbmZvcmQncyBTUlAgVGVsbmV0IGNsaWVudCBm b3IgVU5JWCBoYXMgYmVlbiB0ZXN0ZWQgb24gU3VuT1MgYW5kCi0gICB3b3JrcyBmaW5lIHdpdGgg Qy1LZXJtaXQsIGFzIGRlc2NyaWJlZCBpbiBbNDIxXVNlY3Rpb24gMi43LjEsIGUuZy4KLQotICBT RVQgUFJFRklYIEFMTAotICBQVFkgKG9yIFBJUEUpIHNycC10ZWxuZXQgeGVub24uc3RhbmZvcmQu ZWR1Ci0KLSAgIEMtS2VybWl0IGl0c2VsZiBjYW4gYmUgYnVpbHQgYXMgYW4gU1JQIFRlbG5ldCBj bGllbnQgb24gc3lzdGVtcyB0aGF0Ci0gICBoYXZlIGxpYnNycC5hIGluc3RhbGxlZDsgdGhlIEMt S2VybWl0IHN1cHBvcnQgY29kZSwgaG93ZXZlciwgbWF5IG5vdCBiZQotICAgZXhwb3J0ZWQgb3V0 c2lkZSB0aGUgVVNBIG9yIENhbmFkYS4KLQotMi43LjQuNC4gU09DS1MKLQotICAgQy1LZXJtaXQg Y2FuIGJlIGJ1aWx0IGFzIGEgU09DS1MtYXdhcmUgY2xpZW50IG9uIHN5c3RlbXMgdGhhdCBoYXZl IGEKLSAgIFNPQ0tTIGxpYnJhcnkuIFNlZSBzZWN0aW9uIDguMS4xIG9mIHRoZSBbNDIyXWNrY2Nm Zy50eHQgZmlsZS4KLQotICAgQy1LZXJtaXQgNy4wIGNhbiBhbHNvIGJlIHJ1biBvdmVyIFNPQ0tT aWZpZWQgVGVsbmV0IG9yIHJsb2dpbiBjbGllbnRzCi0gICB3aXRoIFNFVCBORVRXT1JLIFRZUEUg Q09NTUFORC4gU3VwcG9zZSB0aGUgVGVsbmV0IHByb2dyYW0gb24geW91cgotICAgc3lzdGVtIGlz IFNPQ0tTIGVuYWJsZWQgYnV0IEMtS2VybWl0IGlzIG5vdC4gTWFrZSBLZXJtaXQgY29ubmVjdGlv bnMKLSAgIGxpa2UgdGhpczoKLQotICBTRVQgUFJFRklYIEFMTAotICBQVFkgKG9yIFBJUEUpIHRl bG5ldCB6enouY29tCi0KLTIuNy40LjUuIEtlcmJlcm9zCi0KLSAgIFVOSVggQy1LZXJtaXQgY2Fu IGJlIGJ1aWx0IHdpdGggTUlUIEtlcmJlcm9zIElWIG9yIFYgYXV0aGVudGljYXRpb24gYW5kCi0g ICBlbmNyeXB0aW9uLiBJbnN0cnVjdGlvbnMgYXJlIGF2YWlsYWJsZSBpbiBhIFs0MjNdc2VwYXJh dGUgZG9jdW1lbnQuCi0gICBBZGRpdGlvbmFsIG1vZHVsZXMgYXJlIHJlcXVpcmVkIHRoYXQgY2Fu IG5vdCBiZSBleHBvcnRlZCBmcm9tIHRoZSBVU0EKLSAgIHRvIGFueSBjb3VudHJ5IGV4Y2VwdCBD YW5hZGEsIGJ5IFVTIGxhdy4KLQotICAgSWYgeW91IGhhdmUgS2VyYmVyb3MgaW5zdGFsbGVkIGJ1 dCB5b3UgZG9uJ3QgaGF2ZSBhIEtlcmJlcml6ZWQgdmVyc2lvbgotICAgb2YgQy1LZXJtaXQsIHlv dSBjYW4gdXNlIGt0ZWxuZXQgYXMgQy1LZXJtaXQncyBleHRlcm5hbCBjb21tdW5pY2F0aW9ucwot ICAgcHJvZ3JhbSB0byBtYWtlIHNlY3VyZSBjb25uZWN0aW9ucyB3aXRob3V0IGdpdmluZyB1cCBD LUtlcm1pdCdzCi0gICBzZXJ2aWNlczoKLQotICBTRVQgUFJFRklYIEFMTAotICBQVFkgKG9yIFBJ UEUpIGt0ZWxuZXQgY2lhLmdvdgotCi0yLjguIFNjcmlwdGluZyBMb2NhbCBQcm9ncmFtcwotCi0g ICBJZiB5b3VyIHZlcnNpb24gb2YgS2VybWl0IGhhcyBQVFkgc3VwcG9ydCBidWlsdCBpbiwgdGhl biBhbnkgdGV4dC1iYXNlZAotICAgcHJvZ3JhbSBjYW4gYmUgaW52b2tlZCB3aXRoIFNFVCBIT1NU IC9QVFkgb3IgZXF1aXZhbGVudCBjb21tYW5kIGFuZAotICAgY29udHJvbGxlZCB1c2luZyB0aGUg bm9ybWFsIHNlcXVlbmNlIG9mIE9VVFBVVCwgSU5QVVQsIElGIFNVQ0NFU1MKLSAgIGNvbW1hbmRz ICh0aGlzIGlzIHRoZSBzYW1lIHNlcnZpY2UgdGhhdCBpcyBwcm92aWRlZCBieSB0aGUgJ2V4cGVj dCcKLSAgIHByb2dyYW0sIGJ1dCBjb250cm9sbGVkIGJ5IHRoZSBLZXJtaXQgc2NyaXB0IGxhbmd1 YWdlIHJhdGhlciB0aGFuIFRjbCkuCi0KLSAgIFdoZW4gUFRZIHNlcnZpY2UgaXMgbm90IGF2YWls YWJsZSwgdGhlbiBhbnkgcHJvZ3JhbSB0aGF0IHVzZXMgc3RhbmRhcmQKLSAgIGlucHV0IGFuZCBv dXRwdXQgY2FuIGJlIGludm9rZWQgd2l0aCBTRVQgSE9TVCAvUElQRS4KLQotICAgSGVyZSdzIGFu IGV4YW1wbGUgaW4gd2hpY2ggd2Ugc3RhcnQgYW4gZXh0ZXJuYWwgS2VybWl0IHByb2dyYW0sIHdh aXQKLSAgIGZvciBpdHMgcHJvbXB0LCBnaXZlIGl0IGEgVkVSU0lPTiBjb21tYW5kLCBhbmQgdGhl biBleHRyYWN0IHRoZSBudW1lcmljCi0gICB2ZXJzaW9uIG51bWJlciBmcm9tIGl0cyByZXNwb25z ZToKLQotICBzZXQgaG9zdCAvcHR5IGtlcm1pdCAtWQotICBpZiBmYWlsIHN0b3AgMSB7Q2FuJ3Qg c3RhcnQgZXh0ZXJuYWwgY29tbWFuZH0KLSAgaW5wdXQgMTAgQy1LZXJtaXQ+Ci0gIGlmIGZhaWwg c3RvcCAxIHtObyBDLUtlcm1pdD4gcHJvbXB0fQotICBvdXRwdXQgdmVyc2lvblwxMwotICBpbnB1 dCAxMCB7TnVtZXJpYzogfQotICBpZiBmYWlsIHN0b3AgMSB7Tm8gbWF0Y2ggZm9yICJOdW1lcmlj OiJ9Ci0gIGNsZWFyIGlucHV0Ci0gIGlucHV0IDEwIFwxMAotICBlY2hvIFZFUlNJT04gPSAiXGZz dWJzdHIoXHYoaW5wdXQpLDEsNikiCi0gIG91dHB1dCBleGl0XDEzCi0KLSAgIFRoaXMgdGVjaG5p cXVlIGNvdWxkIGJlIHVzZWQgdG8gY29udHJvbCBhbnkgb3RoZXIgaW50ZXJhY3RpdmUgcHJvZ3Jh bSwKLSAgIGV2ZW4gdGhvc2UgdGhhdCBkbyBzY3JlZW4gZm9ybWF0dGluZyAobGlrZSBFbWFjcyBv ciBWaSksIGlmIHlvdSBjYW4KLSAgIGZpZ3VyZSBvdXQgdGhlIHNlcXVlbmNlIG9mIGV2ZW50cy4g SWYgeW91ciBLZXJtaXQgcHJvZ3JhbSBkb2Vzbid0IGhhdmUKLSAgIFBUWSBzdXBwb3J0LCB0aGVu IHRoZSBjb21tYW5kcyBhcmUgcmVzdHJpY3RlZCB0byB0aG9zZSB1c2luZyBzdGFuZGFyZAotICAg aS9vLCBpbmNsdWRpbmcgY2VydGFpbiBzaGVsbHMsIGludGVyYWN0aXZlIHRleHQtbW9kZSAiaGFy ZGNvcHkiIGVkaXRvcnMKLSAgIGxpa2UgZXgsIGFuZCBzbyBvbi4KLQotICAgSWYgeW91IGFyZSB1 c2luZyB0aGUgUFRZIGludGVyZmFjZSwgeW91IHNob3VsZCBiZSBhd2FyZSB0aGF0IGl0IHJ1bnMK LSAgIHRoZSBnaXZlbiBwcm9ncmFtIG9yIGNvbW1hbmQgZGlyZWN0bHkgb24gdGhlIHB0eSwgd2l0 aG91dCBhbnkKLSAgIGludGVydmVuaW5nIHNoZWxsIHRvIGludGVycHJldCBtZXRhY2hhcmFjdGVy cywgcmVkaXJlY3RvcnMsIGV0Yy4gSWYgeW91Ci0gICBuZWVkIHRoaXMgc29ydCBvZiB0aGluZywg aW5jbHVkZSB0aGUgYXBwcm9wcmlhdGUgc2hlbGwgaW52b2NhdGlvbiBhcwotICAgcGFydCBvZiB5 b3VyIGNvbW1hbmQ7IGZvciBleGFtcGxlOgotCi0gIHB0eSBlY2hvICoKLQotICAganVzdCBlY2hv ZXMgIioiOyB3aGVyZWFzOgotCi0gIHB0eSBrc2ggLWMgImVjaG8gKiIKLQotICAgZWNob2VzIGFs bCB0aGUgZmlsZW5hbWVzIHRoYXQga3NoIGZpbmRzIG1hdGNoaW5nICIqIi4KLQotICAgU2ltaWxh cmx5IGZvciByZWRpcmVjdGlvbjoKLQotICBzZXQgaG9zdCAvcHR5IGtzaCAtYyAiY2F0ID4gZm9v IiAgOyBOb3RlOiB1c2Ugc2hlbGwgcXVvdGluZyBydWxlcyBoZXJlCi0gIHNldCB0cmFuc21pdCBl b2YgXDQKLSAgdHJhbnNtaXQgYmFyCi0KLSAgIEFuZCBmb3IgdGhhdCBtYXR0ZXIsIGZvciBidWls dC1pbiBzaGVsbCBjb21tYW5kczoKLQotICBzZXQgaG9zdCAvcHR5IGtzaCAtYyAiZm9yIGkgaW4g KjsgZG8gZWNobyAkaTsgZG9uZSIKLQotICAgVGhlIFBJUEUgaW50ZXJmYWNlLCBvbiB0aGUgb3Ro ZXIgaGFuZCwgaW52b2tlcyB0aGUgc2hlbGwgYXV0b21hdGljYWxseSwKLSAgIHNvOgotCi0gIHBp cGUgZWNobyAqCi0KLSAgIHByaW50cyBmaWxlbmFtZXMsIG5vdCAiKiIuCi0KLTIuOS4gWC4yNSBO ZXR3b3JraW5nCi0KLSAgIFguMjUgbmV0d29ya2luZyBpcyBkb2N1bWVudGVkIGluIFs0MjRdVXNp bmcgQy1LZXJtaXQsIDJuZCBFZGl0aW9uLiBXaGVuCi0gICB0aGUgYm9vayB3YXMgcHVibGlzaGVk LCBYLjI1IHdhcyBhdmFpbGFibGUgb25seSBpbiBTdW5PUywgU29sYXJpcywgYW5kCi0gICBTdHJh dHVzIFZPUy4gVW5saWtlIFRDUC9JUCwgWC4yNSBBUElzIGFyZSBub3Qgc3RhbmRhcmRpemVkOyBl YWNoCi0gICB2ZW5kb3IncyBYLjI1IGxpYnJhcmllcyBhbmQgc2VydmljZXMgKGlmIHRoZXkgaGF2 ZSB0aGVtIGF0IGFsbCkgYXJlCi0gICB1bmlxdWUuCi0KLSAgIFRoaXMgc2VjdGlvbiBkZXNjcmli ZXMgbmV3IGFkZGl0aW9ucy4KLQotMi45LjEuIElCTSBBSVhMaW5rL1guMjUgTmV0d29yayBQcm92 aWRlciBJbnRlcmZhY2UgZm9yIEFJWAotCi0gICBTdXBwb3J0IGZvciBYLjI1IHdhcyBhZGRlZCB2 aWEgSUJNJ3MgTmV0d29yayBQcm92aWRlciBJbnRlcmZhY2UgKE5QSSksCi0gICBBSVhMaW5rL1gu MjUgMS4xLCB0byB0aGUgQUlYIDQueCB2ZXJzaW9uIG9mIEMtS2VybWl0IDcuMC4KLSAgIFVuZm9y dHVuYXRlbHksIEFJWExpbmsvWC4yNSBpcyBhIHJhdGhlciBiYXJlLWJvbmVzIGZhY2lsaXR5LCBs YWNraW5nIGluCi0gICBwYXJ0aWN1bGFyIGFueSBmb3JtIG9mIFBBRCBzdXBwb3J0IChYLjMsIFgu MjgsIFguMjkpLiBUaHVzLCB0aGUgQUlYCi0gICB2ZXJzaW9uIG9mIEMtS2VybWl0LCB3aGVuIGJ1 aWx0IHRvIGluY2x1ZGUgWC4yNSBuZXR3b3JraW5nLCBoYXMgbmVpdGhlcgotICAgYSBQQUQgY29t bWFuZCwgbm9yIGEgU0VUIFBBRCBjb21tYW5kLiBUaGUgc2FtZSBpcyB0cnVlIGZvciB0aGUKLSAg IHVuZGVybHlpbmcgQUlYIHN5c3RlbTogbm8gUEFEIHN1cHBvcnQuIFRodXMgaXQgaXMgbm90IHBv c3NpYmxlIHRvIGhhdmUKLSAgIGFuIGludGVyYWN0aXZlIHNoZWxsIHNlc3Npb24gb3ZlciBhbiBY LjI1IGNvbm5lY3Rpb24gaW50byBhbiBBSVggc3lzdGVtCi0gICAoYXMgZmFyIGFzIHdlIGtub3cp LCBldmVuIGZyb20gWC4yNS1jYXBhYmxlIEtlcm1pdCB2ZXJzaW9ucyAoc3VjaCBhcwotICAgU29s YXJpcyBvciBWT1MpIHRoYXQgZG8gaW5jbHVkZSBQQUQgc3VwcG9ydC4KLQotICAgVGh1cyB0aGUg WC4yNSBjYXBhYmlsaXRpZXMgaW4gQUlYIEMtS2VybWl0IGFyZSBsaW1pdGVkIHRvIHBlZXItdG8t cGVlcgotICAgY29ubmVjdGlvbnMsIGUuZy4gZnJvbSBhIEMtS2VybWl0IGNsaWVudCB0byBhIEMt S2VybWl0IHNlcnZlci4gVW5saWtlCi0gICB0aGUgU29sYXJpcywgU3VuT1MsIGFuZCBWT1MgdmVy c2lvbnMsIHRoZSBBSVggdmVyc2lvbiBjYW4gYWNjZXB0Ci0gICBpbmNvbWluZyBYLjI1IGNvbm5l Y3Rpb25zOgotCi0gIHNldCBuZXR3b3JrIHR5cGUgeC4yNQotICBpZiBmYWlsIHN0b3AgMSBTb3Jy eSAtIG5vIFguMjUgc3VwcG9ydAotICA7IFB1dCBhbnkgZGVzaXJlZCBESVNBQkxFIG9yIEVOQUJM RSBvciBTRVQgY29tbWFuZHMgaGVyZS4KLSAgc2V0IGhvc3QgL3NlcnZlciAqCi0gIGlmIGZhaWwg c3RvcCAxIFguMjUgInNldCBob3N0ICoiIGZhaWxlZAotCi0gICBBbmQgdGhlbiBhY2Nlc3MgaXQg ZnJvbSB0aGUgY2xpZW50IGFzIGZvbGxvd3M6Ci0KLSAgc2V0IG5ldHdvcmsgdHlwZSB4LjI1Ci0g IGlmIGZhaWwgc3RvcCAxIFNvcnJ5IC0gbm8gWC4yNSBzdXBwb3J0Ci0gIHNldCBob3N0IHh4eHh4 eHggOyBTcGVjaWZ5IHRoZSBYLjI1L1guMTIxIGFkZHJlc3MKLSAgaWYgZmFpbCBzdG9wIDEgQ2Fu J3Qgb3BlbiBjb25uZWN0aW9uCi0KLSAgIEFuZCBhdCB0aGlzIHBvaW50IHRoZSBjbGllbnQgY2Fu IHVzZSB0aGUgZnVsbCByYW5nZSBvZiBjbGllbnQgY29tbWFuZHM6Ci0gICBTRU5ELCBHRVQsIFJF TU9URSB4eHgsIEZJTklTSCwgQllFLgotCi0gICBUaGUgQUlYIHZlcnNpb24gYWxzbyBhZGRzIHR3 byBuZXcgdmFyaWFibGVzOgotCi0gICBcdih4MjVsb2NhbF9udWEpCi0gICAgICAgICAgVGhlIGxv Y2FsIFguMjUgYWRkcmVzcy4KLQotICAgXHYoeDI1cmVtb3RlX251YSkKLSAgICAgICAgICBUaGUg WC4yNSBhZGRyZXNzIG9mIHRoZSBob3N0IG9uIHRoZSBvdGhlciBlbmQgb2YgdGhlIGNvbm5lY3Rp b24uCi0KLSAgIEMtS2VybWl0J3MgQUlYIFguMjUgY2xpZW50IGhhcyBub3QgYmVlbiB0ZXN0ZWQg YWdhaW5zdCBhbnl0aGluZyBvdGhlcgotICAgdGhhbiBhIEMtS2VybWl0IFguMjUgc2VydmVyIG9u IEFJWC4gSXQgaXMgbm90IGtub3duIGlmIGl0IHdpbGwKLSAgIGludGVyb3BlcmF0ZSB3aXRoIEMt S2VybWl0IHNlcnZlcnMgb24gU29sYXJpcywgU3VuT1MsIG9yIFZPUy4KLQotICAgVG8gbWFrZSBh biBYLjI1IGNvbm5lY3Rpb24gZnJvbSBBSVggQy1LZXJtaXQsIHlvdSBtdXN0OgotCi0gIHNldCB4 MjUgY2FsbC11c2VyLWRhdGEgeHh4eAotCi0gICB3aGVyZSB4eHh4IGNhbiBiZSBhbnkgZXZlbi1s ZW5ndGggc3RyaW5nIG9mIGhleGFkZWNpbWFsIGRpZ2l0cywgZS5nLgotICAgMTIzQUJDLgotCi0y LjkuMi4gSFAtVVggWC4yNQotCi0gICBBbHRob3VnaCBDLUtlcm1pdCBwcmVzZW50bHkgZG9lcyBu b3QgaW5jbHVkZSBidWlsdC1pbiBzdXBwb3J0IGZvciBIUC1VWAotICAgWC4yNSwgaXQgY2FuIHN0 aWxsIGJlIHVzZWQgdG8gbWFrZSBYLjI1IGNvbm5lY3Rpb25zIGFzIGZvbGxvd3M6IHN0YXJ0Ci0g ICBLZXJtaXQgYW5kIHRlbGwgaXQgdG86Ci0KLSAgc2V0IHByZWZpeGluZyBhbGwKLSAgc2V0IHBh cml0eSBzcGFjZQotICBwdHkgcGFkZW0gYWRkcmVzcwotCi0gICBUaGlzIHNob3VsZCB3b3JrIGlu IEhQLVVYIDkuMDAgYW5kIGxhdGVyIChzZWUgWzQyNV1TZWN0aW9uIDIuNykuIElmIHlvdQotICAg aGF2ZSBhbiBlYXJsaWVyIEhQLVVYIHZlcnNpb24sIG9yIHRoZSBQVFkgaW50ZXJmYWNlIGRvZXNu J3Qgd29yayBvcgotICAgaXNuJ3QgYXZhaWxhYmxlLCB0cnk6Ci0KLSAgc2V0IHByZWZpeGluZyBh bGwKLSAgc2V0IHBhcml0eSBzcGFjZQotICBwaXBlIHBhZGVtIGFkZHJlc3MKLQotICAgRmFpbGlu ZyB0aGF0LCB1c2UgS2VybWl0IHRvIHRlbG5ldCB0byBsb2NhbGhvc3QgYW5kIHRoZW4gYWZ0ZXIg bG9nZ2luZwotICAgYmFjayBpbiwgc3RhcnQgcGFkZW0gYXMgeW91IHdvdWxkIG5vcm1hbGx5IGRv IHRvIGNvbm5lY3Qgb3ZlciBYLjI1LgotCi0yLjEwLiBBZGRpdGlvbmFsIFNlcmlhbCBQb3J0IENv bnRyb2xzCi0KLSAgIEMtS2VybWl0IDcuMCBhZGRzIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgZm9y IGdyZWF0ZXIgY29udHJvbCBvdmVyCi0gICBzZXJpYWwgcG9ydHMuIFRoZXNlIGNvbW1hbmRzIGFy ZSBhdmFpbGFibGUgb25seSBpbiBDLUtlcm1pdCB2ZXJzaW9ucwotICAgd2hvc2UgdW5kZXJseWlu ZyBvcGVyYXRpbmcgc3lzdGVtcyBwcm92aWRlIHRoZSBjb3JyZXNwb25kaW5nIHNlcnZpY2VzCi0g ICAoc3VjaCBhcyBQT1NJWCBhbmQgVU5JWCBTeXN0ZW0gViksIGFuZCBldmVuIHRoZW4gdGhlaXIg c3VjY2Vzc2Z1bAotICAgb3BlcmF0aW9uIGRlcGVuZHMgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0 aGUgc3BlY2lmaWMgZGV2aWNlIGFuZAotICAgZHJpdmVyLgotCi0gICBTRVQgRElTQ09OTkVDVCB7 IE9OLCBPRkYgfQotICAgICAgICAgIE9uIGEgU0VUIExJTkUgb3IgU0VUIFBPUlQgY29ubmVjdGlv biB3aXRoIFNFVCBDQVJSSUVSIE9OIG9yCi0gICAgICAgICAgQVVUTywgaWYgdGhlIGNhcnJpZXIg c2lnbmFsIGRyb3BzIGR1cmluZyB0aGUgY29ubmVjdGlvbiwKLSAgICAgICAgICBpbmRpY2F0aW5n IHRoYXQgdGhlIGNvbm5lY3Rpb24gaGFzIGJlZW4gbG9zdCwgYW5kIEMtS2VybWl0Ci0gICAgICAg ICAgbm90aWNlcyBpdCwgdGhpcyBzZXR0aW5nIGdvdmVybnMgd2hhdCBoYXBwZW5zIG5leHQuIFdp dGggU0VUCi0gICAgICAgICAgRElTQ09OTkVDVCBPRkYsIHdoaWNoIGlzIGNvbnNpc3RlbnQgd2l0 aCBwcmV2aW91cyBiZWhhdmlvciwgYW5kCi0gICAgICAgICAgdGhlcmVmb3JlIHRoZSBkZWZhdWx0 LCBDLUtlcm1pdCBjb250aW51ZXMgdG8ga2VlcCB0aGUgZGV2aWNlCi0gICAgICAgICAgb3BlbiBh bmQgYWxsb2NhdGVkLiBXaXRoIFNFVCBESVNDT05ORUNUIE9OLCBDLUtlcm1pdAotICAgICAgICAg IGF1dG9tYXRpY2FsbHkgY2xvc2VzIGFuZCByZWxlYXNlcyB0aGUgZGV2aWNlIHdoZW4gaXQgc2Vu c2VzIGEKLSAgICAgICAgICBjYXJyaWVyIG9uLXRvLW9mZiB0cmFuc2l0aW9uLCB0aHVzIGFsbG93 aW5nIG90aGVycyB0byB1c2UgaXQuCi0gICAgICAgICAgSG93ZXZlciwgaXQgcmVtYWlucyB0aGUg ZGVmYXVsdCBkZXZpY2UgZm9yIGkvbyAoRElBTCwgUkVESUFMLAotICAgICAgICAgIElOUFVULCBT RU5ELCBDT05ORUNULCBldGMpLCBzbyBpZiBhIHN1YnNlcXVlbnQgaS9vIGNvbW1hbmQgaXMKLSAg ICAgICAgICBnaXZlbiwgdGhlIGRldmljZSBpcyByZW9wZW5lZCBpZiBpdCBpcyBzdGlsbCBhdmFp bGFibGUuIFdoZW4gaXQKLSAgICAgICAgICBoYXMgYmVlbiBhdXRvbWF0aWNhbGx5IGNsb3NlZCBp biB0aGlzIG1hbm5lciwgU0hPVwotICAgICAgICAgIENPTU1VTklDQVRJT05TIHB1dHMgIihjbG9z ZWQpIiBhZnRlciBpdHMgbmFtZSwgYW5kIGluIFVOSVgsIHRoZQotICAgICAgICAgIGxvY2tmaWxl IGRpc2FwcGVhcnMgLS0gYm90aCBmcm9tIFNIT1cgQ09NTSBhbmQgZnJvbSB0aGUgbG9ja2ZpbGUK LSAgICAgICAgICBkaXJlY3RvcnkgaXRzZWxmLiBTeW5vbnltOiBTRVQgQ0xPU0UtT04tRElTQ09O TkVDVC4KLQotICAgU0VUIEVYSVQgT04tRElTQ09OTkVDVCB7IE9OLCBPRkYgfQotICAgICAgICAg IExpa2UgRElTQ09OTkVDVCwgYnV0IG1ha2VzIHRoZSBwcm9ncmFtIGV4aXQgaWYgYSBjb25uZWN0 aW9uCi0gICAgICAgICAgZHJvcHMuCi0KLSAgIE5vdGUgdGhhdCBTRVQgQ0xPU0UtT04tRElTQ09O TkVDVCBhbmQgU0VUIEVYSVQgT04tRElTQ09OTkVDVCBhcHBseSBvbmx5Ci0gICB0byBjb25uZWN0 aW9ucyB0aGF0IGRyb3A7IHRoZXkgZG8gbm90IGFwcGx5IHRvIGNvbm5lY3Rpb25zIHRoYXQgY2Fu J3QKLSAgIGJlIG1hZGUgaW4gdGhlIGZpcnN0IHBsYWNlLiBGb3IgZXhhbXBsZSwgdGhleSBoYXZl IG5vIGVmZmVjdCB3aGVuIGEgU0VUCi0gICBMSU5FLCBTRVQgSE9TVCwgVEVMTkVULCBvciBESUFM IGNvbW1hbmQgZmFpbHMuCi0KLSAgIEhBTkdVUAotICAgICAgICAgIElmIFtDTE9TRS1PTi1dRElT Q09OTkVDVCBpcyBPTiwgYW5kIHRoZSBIQU5HVVAgY29tbWFuZCBpcyBnaXZlbgotICAgICAgICAg IG9uIGEgc2VyaWFsIGRldmljZSwgYW5kIHRoZSBjYXJyaWVyIHNpZ25hbCBpcyBubyBsb25nZXIg cHJlc2VudAotICAgICAgICAgIGFmdGVyIHRoZSBIQU5HVVAgY29tbWFuZCwgdGhlIGRldmljZSBp cyBjbG9zZWQgYW5kIHJlbGVhc2VkLgotCi0gICBTRVQgUEFSSVRZIEhBUkRXQVJFIHsgRVZFTiwg T0REIH0KLSAgICAgICAgICBVbmxpa2UgU0VUIFBBUklUWSB7IEVWRU4sIE9ERCwgTUFSSywgU1BB Q0UgfSwgd2hpY2ggc2VsZWN0cyA3Ci0gICAgICAgICAgZGF0YSBiaXRzIHBsdXMgdGhlIGluZGlj YXRlZCBraW5kIG9mIHBhcml0eSAodG8gYmUgZG9uZSBpbgotICAgICAgICAgIHNvZnR3YXJlIGJ5 IEtlcm1pdCBpdHNlbGYpLCBTRVQgUEFSSVRZIEhBUkRXQVJFIHNlbGVjdHMgOCBkYXRhCi0gICAg ICAgICAgYml0cyBwbHVzIGV2ZW4gb3Igb2RkIHBhcml0eSwgdG8gYmUgZG9uZSBieSB0aGUgdW5k ZXJseWluZwotICAgICAgICAgIGhhcmR3YXJlLCBvcGVyYXRpbmcgc3lzdGVtLCBvciBkZXZpY2Ug ZHJpdmVyLiBUaGlzIGNvbW1hbmQgaXMKLSAgICAgICAgICBlZmZlY3RpdmUgb25seSB3aXRoIGEg U0VUIExJTkUgb3IgU0VUIFBPUlQgZGV2aWNlLiBUaGF0IGlzLCBpdAotICAgICAgICAgIGhhcyBu byBlZmZlY3QgaW4gcmVtb3RlIG1vZGUsIG5vciBvbiBuZXR3b3JrIGNvbm5lY3Rpb25zLiBUaGVy ZQotICAgICAgICAgIGlzIHByZXNlbnRseSBubyBtZXRob2QgZm9yIHNlbGVjdGluZyA4IGRhdGEg Yml0cyBwbHVzIG1hcmsgb3IKLSAgICAgICAgICBzcGFjZSBwYXJpdHkuIElmIGhhcmR3YXJlIHBh cml0eSBpcyBpbiBlZmZlY3QsIHRoZSB2YXJpYWJsZQotICAgICAgICAgIFx2KGh3cGFyaXR5KSBp cyBzZXQgdG8gImV2ZW4iIG9yICJvZGQiLiBOb3RlOiBzb21lIHBsYXRmb3JtcwotICAgICAgICAg IG1pZ2h0IGFsc28gc3VwcG9ydCBzZXR0aW5ncyBvZiBTUEFDRSwgTUFSSywgb3IgTk9ORS4KLQot ICAgU0VUIFNUT1AtQklUUyB7IDEsIDIgfQotICAgICAgICAgIFRoaXMgdGVsbHMgdGhlIG51bWJl ciBvZiAxLWJpdHMgdG8gaW5zZXJ0IGFmdGVyIGFuIG91dGJvdW5kCi0gICAgICAgICAgY2hhcmFj dGVyJ3MgZGF0YSBhbmQgcGFyaXR5IGJpdHMsIHRvIHNlcGFyYXRlIGl0IGZyb20gdGhlIG5leHQK LSAgICAgICAgICBjaGFyYWN0ZXIuIE5vcm1hbGx5IDEuIENob29zaW5nIDIgc3RvcCBiaXRzIHNo b3VsZCBkbyBubyBoYXJtLAotICAgICAgICAgIGJ1dCB3aWxsIHNsb3cgZG93biBzZXJpYWwgdHJh bnNtaXNzaW9uIGJ5IGFwcHJveGltYXRlbHkgMTAKLSAgICAgICAgICBwZXJjZW50LiBIaXN0b3Jp Y2FsbHksIDIgc3RvcCBiaXRzIHdlcmUgdXNlZCB3aXRoIFRlbGV0eXBlcyAoYXQKLSAgICAgICAg ICAxMTAgYnBzIG9yIGJlbG93KSBmb3IgcHJpbnQtaGVhZCByZWNvdmVyeSB0aW1lLiBUaGVyZSBp cwotICAgICAgICAgIHByZXNlbnRseSBubyBtZXRob2QgZm9yIGNob29zaW5nIGFueSBudW1iZXIg b2Ygc3RvcCBiaXRzIGJlc2lkZXMKLSAgICAgICAgICAxIGFuZCAyLgotCi0gICBTRVQgU0VSSUFM IFsgZHBzIF0KLSAgICAgICAgICBkcHMgc3RhbmRzIGZvciBEYXRhLWJpdHMsIFBhcml0eSwgU3Rv cC1iaXRzLiBUaGlzIGlzIHRoZQotICAgICAgICAgIG5vdGF0aW9uIGZhbWlsaWFyIHRvIG1hbnkg cGVvcGxlIGZvciBzZXJpYWwgcG9ydCBjb25maWd1cmF0aW9uOgotICAgICAgICAgIDdFMSwgOE4x LCA3TzIsIGV0Yy4gVGhlIGRhdGEgYml0cyBudW1iZXIgYWxzbyBiZWNvbWVzIHRoZQotICAgICAg ICAgIFRFUk1JTkFMIEJZVEVTSVpFIHNldHRpbmcuIFRoZSBzZWNvbmQgY2hhcmFjdGVyIGlzIEUg Zm9yIEV2ZW4sIE8KLSAgICAgICAgICBmb3IgT2RkLCBNIGZvciBNYXJrLCBTIGZvciBTcGFjZSwg b3IgTiBmb3IgTm9uZS4gVGhlIGxpc3Qgb2YKLSAgICAgICAgICBhdmFpbGFibGUgb3B0aW9ucyBk ZXBlbmRzIG9uIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIHNwZWNpZmljCi0gICAgICAgICAgcGxh dGZvcm0uIElmIGRwcyBpcyBvbWl0dGVkLCA4TjEgaXMgdXNlZC4gVHlwZSAic2V0IHNlcmlhbCA/ IgotICAgICAgICAgIGZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIGNob2ljZXMuIEV4YW1wbGVzOgot Ci0gICAgICAgIFNFVCBTRVJJQUwgN0UxCi0gICAgICAgICAgICAgICAgRXF1aXZhbGVudCB0byBT RVQgUEFSSVRZIEVWRU4sIFNFVCBTVE9QLUJJVFMgMSwgU0VUIFRFUk0KLSAgICAgICAgICAgICAg ICBCWVRFIDcuCi0KLSAgICAgICAgU0VUIFNFUklBTCA4TjEKLSAgICAgICAgICAgICAgICBFcXVp dmFsZW50IHRvIFNFVCBQQVJJVFkgTk9ORSwgU0VUIFNUT1AtQklUUyAxLCBTRVQgVEVSTQotICAg ICAgICAgICAgICAgIEJZVEUgOC4KLQotICAgICAgICBTRVQgU0VSSUFMIDdFMgotICAgICAgICAg ICAgICAgIEVxdWl2YWxlbnQgdG8gU0VUIFBBUklUWSBFVkVOIGFuZCBTRVQgU1RPUC1CSVRTIDIs IFNFVAotICAgICAgICAgICAgICAgIFRFUk0gQllURSA3LgotCi0gICAgICAgIFNFVCBTRVJJQUwg OEUyCi0gICAgICAgICAgICAgICAgU2FtZSBhcyBTRVQgUEFSSVRZIEhBUkRXQVJFIEVWRU4sIFNF VCBTVE9QLUJJVFMgMiwgU0VUCi0gICAgICAgICAgICAgICAgVEVSTSBCWVRFIDguCi0KLSAgICAg ICAgU0VUIFNFUklBTAotICAgICAgICAgICAgICAgIFNhbWUgYXMgU0VUIFBBUklUWSBOT05FIGFu ZCBTRVQgU1RPUC1CSVRTIDEsIFNFVCBURVJNIEJZVEUKLSAgICAgICAgICAgICAgICA4LgotCi0g ICBOb3RlczoKLQotICAgICAqIFRoZSBTRVQgU0VSSUFMIHh4MiBvcHRpb25zIGFyZSBhdmFpbGFi bGUgb25seSBpbiBLZXJtaXQgdmVyc2lvbnMKLSAgICAgICB3aGVyZSB0aGUgU0VUIFBBUklUWSBI QVJEV0FSRSBjb21tYW5kIGlzIGFsc28gYXZhaWxhYmxlLiAoU0hPVwotICAgICAgIEZFQVRVUkVT IGluY2x1ZGVzICJIV1BBUklUWSIgaW4gaXRzIG9wdGlvbnMgbGlzdC4pCi0gICAgICogVGhlIFNF VCBTRVJJQUwgN3h4IGFuZCA4TjEgb3B0aW9ucyBhZmZlY3QgdGhlIHNvZnR3YXJlIHBhcml0eQot ICAgICAgIHNldHRpbmcsIGV2ZW4gZm9yIG5ldHdvcmsgY29ubmVjdGlvbnMuCi0gICAgICogQXMg bm90ZWQgaW4gdGhlIG1hbnVhbCwgc2VsZWN0aW5nIDggZGF0YSBiaXRzIGRvZXMgbm90IGdpdmUg eW91Ci0gICAgICAgOC1iaXQgdGVybWluYWwgc2Vzc2lvbnMgaW4gQ09OTkVDVCBtb2RlIHVubGVz cyB5b3UgYWxzbyBTRVQKLSAgICAgICBURVJNSU5BTCBCWVRFU0laRSA4LiBUaGUgZGVmYXVsdCB0 ZXJtaW5hbCBieXRlc2l6ZSByZW1haW5zIDcsIHRvCi0gICAgICAgcHJvdGVjdCBhZ2FpbnN0IHRo ZSBzaXR1YXRpb24gd2hlcmUgdGhlIHJlbW90ZSBob3N0IGlzIGdlbmVyYXRpbmcKLSAgICAgICBw YXJpdHkgYnV0IHlvdSBkb24ndCBrbm93IGFib3V0IGl0LiBJZiB0aGUgdGVybWluYWwgYnl0ZXNp emUgd2FzIDgKLSAgICAgICBieSBkZWZhdWx0IGFuZCB5b3UgQ09OTkVDVGVkIHRvIHN1Y2ggYSBo b3N0LCB5b3Ugd291bGQgc2VlIG9ubHkKLSAgICAgICBnYXJiYWdlIG9uIHlvdXIgc2NyZWVuLgot ICAgICAqIElmIHlvdSBkbyBub3QgZ2l2ZSBhIFNFVCBTVE9QLUJJVFMgb3IgU0VUIFNFVCBTRVJJ QUwgY29tbWFuZCwKLSAgICAgICBDLUtlcm1pdCBkb2VzIG5vdCBhdHRlbXB0IHRvIHNldCB0aGUg ZGV2aWNlJ3Mgc3RvcCBiaXRzOyBpbnN0ZWFkLAotICAgICAgIGl0IHVzZXMgd2hhdGV2ZXIgc2V0 dGluZyB0aGUgZGV2aWNlIHVzZXMgd2hlbiBub3QgZ2l2ZW4gZXhwbGljaXQKLSAgICAgICBpbnN0 cnVjdGlvbnMgYWJvdXQgc3RvcCBiaXRzLgotCi0gICBTSE9XIENPTU1VTklDQVRJT05TIGRpc3Bs YXlzIHRoZSBjdXJyZW50IHNldHRpbmdzLiBTdG9wIGJpdHMgYW5kCi0gICBoYXJkd2FyZSBwYXJp dHkgYXJlIHNob3duIG9ubHkgZm9yIFNFVCBQT1JUIC8gU0VUIExJTkUgKHNlcmlhbCkKLSAgIGRl dmljZXMsIHNpbmNlIHRoZXkgZG8gbm90IGFwcGx5IHRvIG5ldHdvcmsgY29ubmVjdGlvbnMgb3Ig dG8gcmVtb3RlCi0gICBtb2RlLiBTVE9QLUJJVFMgaXMgc2hvd24gYXMgIihkZWZhdWx0KSIgaWYg eW91IGhhdmUgbm90IGdpdmVuIGFuCi0gICBleHBsaWNpdCBTRVQgU1RPUC1CSVRTIG9yIFNFVCBT RVJJQUwgY29tbWFuZC4KLQotICAgVGhlIFx2KHNlcmlhbCkgdmFyaWFibGUgc2hvd3MgdGhlIFNF VCBTRVJJQUwgc2V0dGluZyAoOE4xLCA3RTEsIGV0YykuCi0KLTIuMTEuIEdldHRpbmcgQWNjZXNz IHRvIHRoZSBEaWFsb3V0IERldmljZQotCi0gICAgIFRoaXMgc2VjdGlvbiBpcyBmb3IgVU5JWCBv bmx5OyBub3RlIHRoZSBzcGVjaWFsIHdvcmRzIGFib3V0IFFOWCBhdAotICAgICB0aGUgZW5kLiBB bHNvIHNlZSBbNDI2XVNlY3Rpb24gMi4wIGZvciBTRVQgTElORSBzd2l0Y2hlcywKLSAgICAgcGFy dGljdWxhcmx5IHRoZSAvU0hBUkUgc3dpdGNoIGZvciBWTVMgb25seS4KLQotICAgQy1LZXJtaXQg ZG9lcyBpdHMgYmVzdCB0byBvYmV5IHRoZSBVVUNQIGxvY2tmaWxlIGNvbnZlbnRpb25zIG9mIGVh Y2gKLSAgIHBsYXRmb3JtIChtYWNoaW5lLCBvcGVyYXRpbmcgc3lzdGVtLCBPUyB2ZXJzaW9uKSB3 aGVyZSBpdCBydW5zLCBpZiB0aGF0Ci0gICBwbGF0Zm9ybSB1c2VzIFVVQ1AuCi0KLSAgIEJ1dCBz aW1wbHkgb2JleWluZyB0aGUgY29udmVudGlvbnMgaXMgb2Z0ZW4gbm90IGdvb2QgZW5vdWdoLCBk dWUgdG8gdGhlCi0gICBpbmNyZWFzaW5nIGxpa2VsaWhvb2QgdGhhdCBhIHBhcnRpY3VsYXIgc2Vy aWFsIGRldmljZSBtaWdodCBoYXZlIG1vcmUKLSAgIHRoYW4gb25lIG5hbWUgKGUuZy4gL2Rldi90 dHkwMCBhbmQgL2Rldi90ZXJtLzAwIGFyZSB0aGUgc2FtZSBkZXZpY2UgaW4KLSAgIFVuaXh3YXJl IDc7IC9kZXYvY3VhIGFuZCAvZGV2L2N1ZmEgYXJlIHRoZSBzYW1lIGRldmljZSBpbiBOZVhUU1RF UCksCi0gICBwbHVzIHRoZSBpbmNyZWFzaW5nbHkgd2lkZXNwcmVhZCB1c2Ugb2Ygc3ltbGlua3Mg Zm9yIGRldmljZSBuYW1lcywgc3VjaAotICAgYXMgL2Rldi9tb2RlbS4KLQotICAgQy1LZXJtaXQg Ny4wIGdvZXMgdG8gZ3JlYXRlciBsZW5ndGhzIHRoYW4gcHJldmlvdXMgdmVyc2lvbnMgdG8KLSAg IHN1Y2Nlc3NmdWxseSBpbnRlcmxvY2sgd2l0aCBvdGhlciBjb21tdW5pY2F0aW9ucyBwcm9ncmFt IChhbmQgb3RoZXIKLSAgIGluc3RhbmNlcyBvZiBLZXJtaXQgaXRzZWxmKTsgZm9yIGV4YW1wbGUs IGJ5OgotCi0gICAgICogQ3JlYXRpb24gb2YgZHVhbCBsb2NrZmlsZXMgd2hlbmV2ZXIgYSBzeW1s aW5rIGlzIHVzZWQ7IG9uZSBmb3IgdGhlCi0gICAgICAgbGluayBuYW1lIGFuZCBvbmUgZm9yIHRo ZSByZWFsIG5hbWUuCi0gICAgICogQ3JlYXRpb24gb2YgZHVhbCBsb2NrZmlsZXMgaW4gSFAtVVgg YWNjb3JkaW5nIHRvIEhQIHJ1bGVzLgotICAgICAqIENyZWF0aW9uIG9mIGR1YWwgdXBwZXJjYXNl L2xvd2VyY2FzZSBsb2NrZmlsZSBuYW1lcyBpbiBTQ08KLSAgICAgICBVTklYL09EVC9PU1I1Lgot ICAgICAqIFRoZSB1c2Ugb2YgdHR5bG9jaygpIGluIHZlcnNpb25zIG9mIEFJWCB3aGVyZSBpdCB3 b3Jrcy4KLSAgICAgKiBUaGUgdXNlLCB3aGVyZXZlciBwb3NzaWJsZSwgb2YgbG9ja2ZpbGUgbmFt ZXMgYmFzZWQgb24KLSAgICAgICBpbm9kZS9tYWpvci9taW5vciBkZXZpY2UgbnVtYmVyIHJhdGhl ciB0aGFuIGRldmljZSBuYW1lLgotCi0gICBTZWUgdGhlIFs0MjddY2t1aW5zLnR4dCBhbmQgWzQy OF1ja3Vid3IudHh0IGZpbGVzIGZvciBkZXRhaWxzLgotCi0gICBRTlggaXMgYWxtb3N0IHVuaXF1 ZSBhbW9uZyBVTklYIHZhcmlldGllcyBpbiBoYXZpbmcgbm8gVVVDUCBwcm9ncmFtcwotICAgbm9y IFVVQ1Atb3JpZW50ZWQgZGlhbG91dC1kZXZpY2UgbG9ja2luZyBjb252ZW50aW9ucy4gUU5YIGRv ZXMsCi0gICBob3dldmVyLCBhbGxvdyBhIHByb2dyYW0gdG8gZ2V0IHRoZSBkZXZpY2Ugb3BlbiBj b3VudC4gVGhpcyBjYW4gbm90IGJlCi0gICBhIHJlbGlhYmxlIGZvcm0gb2YgbG9ja2luZyB1bmxl c3MgYWxsIGFwcGxpY2F0aW9ucyBkbyBpdCAoYW5kIHRoZXkKLSAgIGRvbid0KSwgc28gYnkgZGVm YXVsdCwgS2VybWl0IHVzZXMgdGhpcyBpbmZvcm1hdGlvbiBvbmx5IGZvciBwcmludGluZyBhCi0g ICB3YXJuaW5nIG1lc3NhZ2Ugc3VjaCBhczoKLQotICBDLUtlcm1pdD5zZXQgbGluZSAvZGV2L3Nl cjEKLSAgV0FSTklORyAtICIvZGV2L3NlcjEiIGxvb2tzIGJ1c3kuLi4KLQotICAgSG93ZXZlciwg aWYgeW91IHdhbnQgdG8gdXNlIGl0IGFzIGEgbG9jaywgeW91IGNhbiBkbyBzbyB3aXRoOgotCi0g IFNFVCBRTlgtUE9SVC1MT0NLIHsgT04sIE9GRiB9Ci0KLSAgIFFOWC1QT1JULUxPQ0sgaXMgT0ZG IGJ5IGRlZmF1bHQ7IGlmIHlvdSBzZXQgaW4gT04sIEMtS2VybWl0IGZhaWxzIHRvCi0gICBvcGVu IGFueSBkaWFsb3V0IGRldmljZSB3aGVuIGl0cyBvcGVuIGNvdW50IGluZGljYXRlcyB0aGF0IGFu b3RoZXIKLSAgIHByb2Nlc3MgaGFzIGl0IG9wZW4uIFNIT1cgQ09NTSAoaW4gUU5YIG9ubHkpIGRp c3BsYXlzIHRoZSBzZXR0aW5nLCBhbmQKLSAgIGlmIHlvdSBoYXZlIGEgcG9ydCBvcGVuLCBpdCBh bHNvIHNob3dzIHRoZSBjdXJyZW50IG9wZW4gY291bnQgKHdpdGgKLSAgIEMtS2VybWl0J3Mgb3du IGFjY2VzcyBhbHdheXMgY291bnRpbmcgYXMgMSkuCi0KLTIuMTIuIFRoZSBDb25uZWN0aW9uIExv ZwotCi0gICBDLUtlcm1pdCA3LjAgYWRkcyB0aGUgYWJpbGl0eSB0byBsb2cgY29ubmVjdGlvbnMs IHNvIHlvdSBjYW4gc2VlIHdoZXJlCi0gICB5b3UndmUgYmVlbiBhbmQgaGF2ZSBhIHJlY29yZCBv ZiBjYWxscyB5b3UndmUgbWFkZS4gQSBjb25uZWN0aW9uIGlzCi0gICBkZWZpbmVkIGFzIGFueSBj b21tdW5pY2F0aW9ucyBzZXNzaW9uIHRoYXQgaXMgYmVndW4gYnkgU0VUIExJTkUsIFNFVAotICAg UE9SVCwgRElBTCwgU0VUIEhPU1QsIFRFTE5FVCwgb3IgUkxPR0lOLiBDb25uZWN0aW9ucyBhcmUg bm90IGxvZ2dlZAotICAgdW5sZXNzIHlvdSByZXF1ZXN0IGl0OyB0aGUgY29tbWFuZCBpczoKLQot ICAgTE9HIENYIFsgZmlsZW5hbWUgWyB7IE5FVywgQVBQRU5EIH0gXSBdCi0gICAgICAgICAgRW5h YmxlcyBsb2dnaW5nIG9mIGNvbm5lY3Rpb25zIGluIHRoZSBnaXZlbiBmaWxlLiBJZiB0aGUKLSAg ICAgICAgICB0cmFpbGluZyB7IE5FVywgQVBQRU5EIH0ga2V5d29yZCBpcyBvbWl0dGVkLCB0aGUg ZmlsZSBpcyBvcGVuZWQKLSAgICAgICAgICBmb3IgYXBwZW5kaW5nOyBpLmUuIG5ldyByZWNvcmRz IGFyZSB3cml0dGVuIHRvIHRoZSBlbmQuIElmIE5FVwotICAgICAgICAgIGlzIHNwZWNpZmllZCwg YSBuZXcgZmlsZSBpcyBjcmVhdGVkOyBpZiBhIGZpbGUgb2YgdGhlIHNhbWUgbmFtZQotICAgICAg ICAgIGFscmVhZHkgZXhpc3RlZCwgaXQgaXMgb3ZlcndyaXR0ZW4uIElmIHRoZSBmaWxlbmFtZSBp cyBvbWl0dGVkLAotICAgICAgICAgIENYLkxPRyBpbiB5b3VyIGhvbWUgKGxvZ2luKSBkaXJlY3Rv cnkgaXMgdXNlZCAobm90ZTogdXBwZXJjYXNlKS4KLSAgICAgICAgICBUbyBhY2NlcHQgYWxsIGRl ZmF1bHRzLCBqdXN0IHVzZSAibG9nIGNvbm5lY3Rpb25zIiAob3IgImwgYyIgZm9yCi0gICAgICAg ICAgc2hvcnQpLiBTeW5vbnltOiBMT0cgQ09OTkVDVElPTlMuCi0KLSAgIENMT1NFIENYLUxPRwot ICAgICAgICAgIFRoaXMgY2xvc2VzIHRoZSBjb25uZWN0aW9uIGxvZyBpZiBpdCB3YXMgb3Blbi4g KE5vdGUsIHRoZSBDTE9TRQotICAgICAgICAgIENPTk5FQ1RJT04gY29tbWFuZCBjbG9zZXMgdGhl IGNvbm5lY3Rpb24gaXRzZWxmKS4KLQotICAgU0hPVyBDWAotICAgICAgICAgIFRoaXMgc2hvd3Mg eW91ciBjdXJyZW50IGNvbm5lY3Rpb24sIGlmIGFueSwgaW5jbHVkaW5nIHRoZQotICAgICAgICAg IGVsYXBzZWQgdGltZSAoc2luY2UgeW91IG9wZW5lZCBpdCkuIFN5bm9ueW06IFNIT1cgQ09OTkVD VElPTi4KLQotICAgXHYoY3hfdGltZSkKLSAgICAgICAgICBUaGlzIHZhcmlhYmxlIHNob3dzIHRo ZSBlbGFwc2VkIHRpbWUgb2YgeW91ciBjdXJyZW50IGNvbm5lY3Rpb24sCi0gICAgICAgICAgb3Ig aWYgdGhlcmUgaXMgbm8gY3VycmVudCBjb25uZWN0aW9uLCBvZiB5b3VyIG1vc3QgcmVjZW50Ci0g ICAgICAgICAgY29ubmVjdGlvbiwgb2YgaWYgdGhlcmUgaGF2ZSBiZWVuIG5vIGNvbm5lY3Rpb25z LCAwLgotCi0gICBUaGUgY29ubmVjdGlvbiBjb250YWlucyBvbmUgbGluZSBwZXIgY29ubmVjdGlv biwgb2YgdGhlIGZvcm06Ci0KLSAgeXl5eW1tZGQgaGg6bW06c3MgdXNlcm5hbWUgcGlkIHA9diBb IHA9diBbIC4uLiBdIF0KLQotICAgd2hlcmUgdGhlIHRpbWVzdGFtcCAoaW4gY29sdW1ucyAxLTE4 KSBzaG93cyB3aGVuIHRoZSBjb25uZWN0aW9uIHdhcwotICAgbWFkZTsgdXNlcm5hbWUgaXMgdGhl IGxvZ2luIGlkZW50aXR5IG9mIHRoZSBwZXJzb24gd2hvIG1hZGUgdGhlCi0gICBjb25uZWN0aW9u OyBwaWQgaXMgS2VybWl0J3MgcHJvY2VzcyBJRCB3aGVuIGl0IG1hZGUgdGhlIGNvbm5lY3Rpb24u IFRoZQotICAgcCdzIGFyZSBwYXJhbWV0ZXJzIHRoYXQgZGVwZW5kIG9uIHRoZSB0eXBlIG9mIGNv bm5lY3Rpb24sIGFuZCB0aGUgdidzCi0gICBhcmUgdGhlaXIgdmFsdWVzOgotCi0gIFQgPSBDb25u ZWN0aW9uIFR5cGUgKFRDUCwgU0VSSUFMLCBESUFMLCBERUNORVQsIGV0YykuCi0gIEggPSBUaGUg bmFtZSBvZiB0aGUgSG9zdCBmcm9tIHdoaWNoIHRoZSBjb25uZWN0aW9uIHdhcyBtYWRlLgotICBO ID0gRGVzdGluYXRpb24gcGhvbmUgTnVtYmVyIG9yIE5ldHdvcmsgaG9zdCBuYW1lIG9yIGFkZHJl c3MuCi0gIEQgPSBTZXJpYWwgY29ubmVjdGlvbnMgb25seTogRGV2aWNlIG5hbWUuCi0gIE8gPSBE aWFsZWQgY2FsbHMgb25seTogT3JpZ2luYXRpbmcgY291bnRyeSBjb2RlICYgYXJlYSBjb2RlIGlm IGtub3duLgotICBFID0gRWxhcHNlZCB0aW1lIGluIGhoOm1tOnNzIGZvcm1hdCAob3IgaGhoOm1t OnNzLCBldGMpLgotCi0gICBJZiB5b3UgYWx3YXlzIHdhbnQgdG8ga2VlcCBhIGNvbm5lY3Rpb24g bG9nLCBzaW1wbHkgYWRkOgotCi0gIGxvZyBjb25uZWN0aW9ucwotCi0gICB0byB5b3VyIEMtS2Vy bWl0IGN1c3RvbWl6YXRpb24gZmlsZS4gTm90ZSwgaG93ZXZlciwgdGhhdCBpZiB5b3UgbWFrZSBh Ci0gICBsb3Qgb2YgY29ubmVjdGlvbnMsIHlvdXIgQ1guTE9HIHdpbGwgZ3JvdyBhbmQgZ3Jvdy4g WW91IGNhbiBoYW5kbGUgdGhpcwotICAgYnkgYWRkaW5nIGEgImxvZ3JvdGF0ZSIgcHJvY2VkdXJl IGxpa2UgdGhlIGZvbGxvd2luZyB0byB5b3VyCi0gICBjdXN0b21pemF0aW9uIGZpbGUsIGJlZm9y ZSB0aGUgImxvZyBjb25uZWN0aW9ucyIgY29tbWFuZDoKLQotICBkZWZpbmUgTE9HUk9UQVRFIHsg ICAgICAgICAgICAgICAgICAgIDsgRGVmaW5lIExPR1JPVEFURSBtYWNybwotICAgICAgbG9jYWwg XCVpIFwlbSBcJWQgXCVuIFwlZiBNQVgKLSAgICAgIGRlZiBNQVggNCAgICAgICAgICAgICAgICAg ICAgICAgICA7IEhvdyBtYW55IG1vbnRocyB0byBrZWVwCi0gICAgICBpZiBub3QgZGVmIFwlMSAt ICAgICAgICAgICAgICAgICAgOyBObyBhcmd1bWVudCBnaXZlbgotICAgICAgICBlbmQgMSBcJTA6 IE5vIGZpbGVuYW1lIGdpdmVuCi0gICAgICBpZiBub3QgPSAxIFxmZmlsZXMoXCUxKSAtICAgICAg ICAgOyBFeGFjdGx5IDEgZmlsZSBtdXN0IG1hdGNoCi0gICAgICAgIGVuZCAxIFwlMDogXCUxIC0g RmlsZSBub3QgZm91bmQKLSAgICAgIC5cJWQgOj0gXGZzdWJzdHIoXGZkYXRlKFwlMSksMSw2KSA7 IEFyZyBPSyAtIGdldCBmaWxlIHllYXIgJiBtb250aAotICAgICAgaWYgPSBcJWQgLSAgICAgICAg ICAgICAgICAgICAgICAgIDsgQ29tcGFyZSBmaWxlIHllYXIgJiBtb250aAotICAgICAgICBcZnN1 YnN0cihcdihuZGF0ZSksMSw2KSAtICAgICAgIDsgd2l0aCBjdXJyZW50IHllYXIgJiBtb250aAot ICAgICAgICAgIGVuZCAwICAgICAgICAgICAgICAgICAgICAgICAgIDsgU2FtZSB5ZWFyICYgbW9u dGggLSBkb25lCi0gICAgICByZW5hbWUgXCUxIFwlMS5cJWQgICAgICAgICAgICAgICAgOyBEaWZm ZXJlbnQgLSByZW5hbWUgZmlsZQotICAgICAgLlwlbiA6PSBcZmZpbGVzKFwlMS4qKSAgICAgICAg ICAgIDsgSG93IG1hbnkgb2xkIGZpbGVzCi0gICAgICBpZiA8IFwlbiBcbShNQVgpIGVuZCAwICAg ICAgICAgICAgOyBOb3QgZW5vdWdoIHRvIHJvdGF0ZQotICAgICAgLlwlbSA6PSBcJTEuOTk5OTk5 ICAgICAgICAgICAgICAgIDsgSW5pdGlhbCBjb21wYXJlIHN0cmluZwotICAgICAgZm9yIFwlaSAx IFwlbiAxIHsgICAgICAgICAgICAgICAgIDsgTG9vcCB0aHJ1IG9sZCBsb2dzCi0gICAgICAgICAu XCVmIDo9IFxmbmV4dGZpbGUoKSAgICAgICAgICAgOyBHZXQgbmV4dCBmaWxlIG5hbWUKLSAgICAg ICAgIGlmIGxsdCBcJWYgXCVtIC5cJW0gOj0gXCVmICAgICA7IElmIHRoaXMgb25lIG9sZGVyIHJl bWVtYmVyIGl0Ci0gICAgICB9Ci0gICAgICBkZWxldGUgXCVtICAgICAgICAgICAgICAgICAgICAg ICAgOyBEZWxldGUgdGhlIG9sZGVzdCBvbmUKLSAgfQotICBsb2cgY29ubmVjdGlvbnMgICAgICAg ICAgICAgICAgICAgICAgIDsgTm93IG9wZW4gdGhlIChwb3NzaWJseSBuZXcpIGxvZwotICBsb2dy b3RhdGUgXHYoaG9tZSlDWC5MT0cgICAgICAgICAgICAgIDsgUnVuIHRoZSBMT0dST1RBVEUgbWFj cm8KLQotICAgQXMgeW91IGNhbiBzZWUsIHRoaXMgY29tcGFyZXMgdGhlIHl5eXltbSBwb3J0aW9u IG9mIHRoZSBtb2RpZmljYXRpb24KLSAgIGRhdGUgKFxmZGF0ZSgpKSBvZiB0aGUgZ2l2ZW4gZmls ZSAoXCUxKSB3aXRoIHRoZSBjdXJyZW50IHl5eXltbS4gSWYKLSAgIHRoZXkgZGlmZmVyLCB0aGUg Y3VycmVudCBmaWxlIGhhcyB0aGUgeXl5eW1tIHN1ZmZpeCAoZnJvbSBpdHMgbW9zdAotICAgcmVj ZW50IG1vZGlmaWNhdGlvbiBkYXRlKSBhcHBlbmRlZCB0byBpdHMgbmFtZS4gVGhlbiB3ZSBzZWFy Y2ggdGhyb3VnaAotICAgYWxsIG90aGVyIHN1Y2ggZmlsZXMsIGZpbmQgdGhlIG9sZGVzdCBvbmUs IGFuZCBkZWxldGUgaXQuIFRodXMgdGhlCi0gICBjdXJyZW50IGxvZywgcGx1cyB0aGUgbG9ncyBm cm9tIHRoZSBtb3N0IHJlY2VudCBmb3VyIG1vbnRocywgYXJlIGtlcHQuCi0gICBUaGlzIGlzIGFs bCBkb25lIGF1dG9tYXRpY2FsbHkgZXZlcnkgdGltZSB5b3Ugc3RhcnQgQy1LZXJtaXQuCi0KLSAg IE9uIG11bHRpdXNlciBzeXN0ZW1zLCBpdCBpcyBwb3NzaWJsZSB0byBrZWVwIGEgc2luZ2xlLCBz aGFyZWQsCi0gICBzeXN0ZW0td2lkZSBjb25uZWN0aW9uIGxvZywgYnV0IHRoaXMgaXMgbm90IHJl Y29tbWVuZGVkIHNpbmNlIChhKSBpdAotICAgcmVxdWlyZXMgeW91IGtlZXAgYSBwdWJsaWNseSB3 cml0ZS1hY2Nlc3NpYmxlIGxvZ2ZpbGUgKGEgZ2xhcmluZyB0YXJnZXQKLSAgIGZvciBtaXNjaGll ZiksIGFuZCAoYikgaXQgd291bGQgcmVxdWlyZSBlYWNoIHVzZXIgdG8gbG9nIHRvIHRoYXQgZmls ZQotICAgYW5kIG5vdCBkaXNhYmxlIGxvZ2dpbmcuIEEgYmV0dGVyIG1ldGhvZCBmb3IgbG9nZ2lu ZyBjb25uZWN0aW9ucywgaW4KLSAgIFVOSVggYXQgbGVhc3QsIGlzIHN5c2xvZ2dpbmcgKHNlZSBb NDI5XWNrdWlucy50eHQgU2VjdGlvbiAxNSBhbmQKLSAgIFs0MzBdU2VjdGlvbiA0LjIgb2YgdGhl IFs0MzFdSUtTRCBBZG1pbmlzdHJhdGlvbiBHdWlkZSBmb3IgZGV0YWlscykuCi0KLTIuMTMuIEF1 dG9tYXRpYyBDb25uZWN0aW9uLVNwZWNpZmljIEZsb3cgQ29udHJvbCBTZWxlY3Rpb24KLQotICAg QmVnaW5uaW5nIGluIEMtS2VybWl0IDcuMCwgdGhlIGFwcHJvcHJpYXRlIGZsb3ctY29udHJvbCBt ZXRob2QgZm9yIGVhY2gKLSAgIGNvbm5lY3Rpb24gdHlwZSBpcyBrZXB0IGluIGEgdGFibGUsIGZv ciBleGFtcGxlOgotCi0gIFJlbW90ZTogICAgICAgICAgIE5PTkUKLSAgTW9kZW06ICAgICAgICAg ICAgUlRTL0NUUwotICBEaXJlY3QtU2VyaWFsOiAgICBOT05FCi0gIFRDUElQOiAgICAgICAgICAg IE5PTkUKLQotICAgVGhlIHNpemUgb2YgdGhlIHRhYmxlIGFuZCB2YWx1ZXMgZm9yIGVhY2ggY29u bmVjdGlvbiB0eXBlIGNhbiB2YXJ5IGZyb20KLSAgIHBsYXRmb3JtIHRvIHBsYXRmb3JtLiBUeXBl ICJzZXQgZmxvdyA/IiBmb3IgYSBsaXN0IG9mIGF2YWlsYWJsZQotICAgZmxvdy1jb250cm9sIHR5 cGVzLgotCi0gICBUaGUgdGFibGUgaXMgdXNlZCB0byBhdXRvbWF0aWNhbGx5IHNlbGVjdCB0aGUg YXBwcm9wcmlhdGUga2luZCBvZiBmbG93Ci0gICBjb250cm9sIHdoZW5ldmVyIHlvdSBtYWtlIGEg Y29ubmVjdGlvbi4gWW91IGNhbiBkaXNwbGF5IHRoZSB0YWJsZSB3aXRoOgotCi0gIFNIT1cgRkxP Vy1DT05UUk9MCi0KLSAgIFRoZSBkZWZhdWx0cyBhcmUgYXMgZm9sbG93czoKLQotICAgUmVtb3Rl OgotICAgICAgICAgIE5PTkUgb3IgWE9OL1hPRkYuIFRoaXMgaXMgYmVjYXVzZSBDLUtlcm1pdCBp cyBub3QgYWxsb3dlZCB0bwotICAgICAgICAgIGZpbmQgb3V0IHdoYXQgdHlwZSBvZiBjb25uZWN0 aW9uIHRoZSBpbmNvbWluZyB1c2VyIGhhcyAoKikuIE5vCi0gICAgICAgICAga2luZCBvZiBmbG93 IGNvbnRyb2wgd2lsbCB3b3JrIG9uIGV2ZXJ5IGtpbmQgb2YgY29ubmVjdGlvbiwKLSAgICAgICAg ICBpbmNsdWRpbmcgKHVuZXhwZWN0ZWRseSkgS0VFUCwgd2hpY2ggd2Ugd291bGQgaGF2ZSBsaWtl ZCB0byB1c2UsCi0gICAgICAgICAgYnV0IG5vdCB0dXJuaW5nIG9mZiBmbG93IGNvbnRyb2wgYXQg dGhlIHJlbW90ZSBlbmQgZHVyaW5nIGZpbGUKLSAgICAgICAgICB0cmFuc2ZlciBvbiBUQ1AvSVAg Y29ubmVjdGlvbnMgaXMgZmF0YWwgdG8gdGhlIHRyYW5zZmVyIChleGNlcHQKLSAgICAgICAgICBp biBWTVMgYW5kIEhQLVVYLCB3aGVyZSBpdCBtdXN0IGJlIHNldCB0byBYb24vWG9mZiEpIFRoZXJl Zm9yZQotICAgICAgICAgIGlmIHlvdSBhcmUgZGlhbGluZyBpbiB0byBhIHNlcmlhbCBwb3J0IG9u IGEgc2VydmVyIChVTklYIG9yIFZNUykKLSAgICAgICAgICB3aGVyZSBDLUtlcm1pdCBpcyBydW5u aW5nLCB5b3Ugd2lsbCBuZWVkIHRvIHRlbGwgQy1LZXJtaXQgdG8KLSAgICAgICAgICAic2V0IGZs b3cga2VlcCIgYmVmb3JlIHRyYW5zZmVycmluZyBmaWxlcyAoYXNzdW1pbmcgdGhlIG1vZGVtCi0g ICAgICAgICAgYW5kIHBvcnQgYXJlIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGJ5IHRoZSBzeXN0ZW0g YWRtaW5pc3RyYXRvcjsKLSAgICAgICAgICBvdGhlcndpc2UgeW91J2xsIG5lZWQgdG8gZ2l2ZSBh IHNwZWNpZmljIGtpbmQgb2YgZmxvdyBjb250cm9sLAotICAgICAgICAgIGUuZy4gInNldCBmbG93 IHhvbi94b2ZmIiksIHNvIGluIHRoaXMgY2FzZSBDLUtlcm1pdCB3aWxsIG5vdAotICAgICAgICAg IGRpc2FibGUgZmxvdyBjb250cm9sLCBhcyBpdCBtdXN0IGRvIHdoZW4geW91IGFyZSBjb21pbmcg dmlhCi0gICAgICAgICAgVGVsbmV0IChkaXJlY3RseSBvciB0aHJvdWdoIGEgdGVybWluYWwgc2Vy dmVyLCBleGNlcHQgb24gVk1TIGFuZAotICAgICAgICAgIEhQLVVYKS4KLQotICAgTW9kZW06Ci0g ICAgICAgICAgVGhpcyBhcHBsaWVzIHdoZW4geW91IGRpYWwgb3V0IHdpdGggYSBtb2RlbS4gSW4g dGhpcyBjYXNlLCB0aGUKLSAgICAgICAgICBNT0RFTSBGTE9XLUNPTlRST0wgc2V0dGluZyB0YWtl cyBhZmZlY3QgYWZ0ZXIgdGhlIFNFVCBGTE9XCi0gICAgICAgICAgc2V0dGluZywgc28gaXQgY2Fu IHBpY2sgdGhlIG1vc3QgYXBwcm9wcmlhdGUgZmxvdyBjb250cm9sIGZvcgotICAgICAgICAgIHRo ZSBjb21iaW5hdGlvbiBvZiB0aGUgcGFydGljdWxhciBtb2RlbSBhbmQgdGhlCi0gICAgICAgICAg Y29tcHV0ZXIvcG9ydC9kcml2ZXIgdGhhdCBpcyBkaWFsaW5nLgotCi0gICBEaXJlY3QtU2VyaWFs OgotICAgICAgICAgIFRoZSBkZWZhdWx0IGhlcmUgaXMgTk9ORSBiZWNhdXNlIEMtS2VybWl0IGhh cyBubyB3YXkgb2Yga25vd2luZwotICAgICAgICAgIHdoYXQga2luZCBvZiBmbG93IGNvbnRyb2ws IGlmIGFueSwgaXMgb3IgY2FuIGJlIGRvbmUgYnkgdGhlCi0gICAgICAgICAgZGV2aWNlIGF0IHRo ZSBvdGhlciBlbmQgb2YgdGhlIGNvbm5lY3Rpb24uIFJUUy9DVFMgd291bGQgYmUgYQotICAgICAg ICAgIGJhZCBjaG9pY2UgaGVyZSwgYmVjYXVzZSBpZiB0aGUgQ1RTIHNpZ25hbCBpcyBub3QgYXNz ZXJ0ZWQsIHRoZQotICAgICAgICAgIGNvbm5lY3Rpb24gd2lsbCBoYW5nLiBBbmQgc2luY2UgZGly ZWN0IGNvbm5lY3Rpb25zIGFyZSBvZnRlbgotICAgICAgICAgIG1hZGUgd2l0aCAzLXdpcmUgY2Fi bGVzLCB0aGVyZSBpcyBhIGdvb2QgY2hhbmNlIHRoZSBDVFMgc2lnbmFsCi0gICAgICAgICAgd2ls bCBub3QgYmUgcmVjZWl2ZWQuCi0KLSAgIFRDUElQOgotICAgICAgICAgIE5PTkUsIHNpbmNlIFRD UCBhbmQgSVAgcHJvdmlkZSB0aGVpciBvd24gZmxvdyBjb250cm9sCi0gICAgICAgICAgdHJhbnNw YXJlbnRseSB0byB0aGUgYXBwbGljYXRpb24sIGV4Y2VwdCBpbiBWTVMsIHdoZXJlIFhvbi9Yb2Zm Ci0gICAgICAgICAgaXMgdGhlIGRlZmF1bHQgZHVlIHRvIHRoZSByZXF1aXJlbWVudHMgb2YgdGhl IFZNUyBUQ1AvSVAKLSAgICAgICAgICBwcm9kdWN0cy4KLQotICAgT3RoZXIgbmV0d29ya3M6Ci0g ICAgICAgICAgTk9ORSwgc2luY2UgbmV0d29ya3Mgc2hvdWxkIHByb3ZpZGUgdGhlaXIgZmxvdyBj b250cm9sCi0gICAgICAgICAgdHJhbnNwYXJlbnRseSB0byB0aGUgYXBwbGljYXRpb24uCi0KLSAg ICgqKSBUaGlzIGlzIHBvc3NpYmx5IHRoZSB3b3JzdCBmZWF0dXJlIG9mIFVOSVgsIFZNUywgYW5k IG90aGVyCi0gICBwbGF0Zm9ybXMgd2hlcmUgQy1LZXJtaXQgcnVucy4gSWYgQy1LZXJtaXQgd2Fz IGFibGUgdG8gYXNrIHRoZQotICAgb3BlcmF0aW5nIHN5c3RlbSB3aGF0IGtpbmQgb2YgY29ubmVj dGlvbiBpdCBoYWQgdG8gdGhlIHVzZXIsIGl0IGNvdWxkCi0gICBzZXQgdXAgbWFueSB0aGluZ3Mg Zm9yIHlvdSBhdXRvbWF0aWNhbGx5LgotCi0gICBZb3UgY2FuIG1vZGlmeSB0aGUgZGVmYXVsdC1m bG93LWNvbnRyb2wgdGFibGUgd2l0aDoKLQotICBTRVQgRkxPVy1DT05UUk9MIC94eHggeyBOT05F LCBLRUVQLCBSVFMvQ1RTLCBYT04vWE9GRiwgLi4uIH0KLQotICAgd2hlcmUgInh4eCIgaXMgdGhl IGNvbm5lY3Rpb24gdHlwZSwgZS5nLgotCi0gIFNFVCBGTE9XIC9SRU1PVEUgTk9ORQotICBTRVQg RkxPVyAvRElSRUNUIFJUUy9DVFMKLQotICAgSWYgeW91IGxlYXZlIG91dCB0aGUgc3dpdGNoLCBT RVQgRkxPVyB3b3JrcyBhcyBiZWZvcmUsIGNob29zaW5nIHRoZQotICAgZmxvdyBjb250cm9sIG1l dGhvZCB0byBiZSB1c2VkIG9uIHRoZSBjdXJyZW50IGNvbm5lY3Rpb246Ci0KLSAgU0VUIEZMT1cg WE9OL1hPRkYKLQotICAgVGh1cywgd2hlbmV2ZXIgeW91IG1ha2UgYSBjb25uZWN0aW9uIHdpdGgg U0VUIFBPUlQsIFNFVCBMSU5FLCBESUFMLCBTRVQKLSAgIEhPU1QsIFRFTE5FVCwgUkxPR0lOLCBl dGMsIGFuIGFwcHJvcHJpYXRlIGZvcm0gb2YgZmxvdyBjb250cm9sIGlzCi0gICBzZWxlY3RlZCBh dXRvbWF0aWNhbGx5LiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBhdXRvbWF0aWMgc2VsZWN0aW9uIHdp dGggYQotICAgc3Vic2VxdWVudCBTRVQgRkxPVyBjb21tYW5kLCBzdWNoIGFzIFNFVCBGTE9XIE5P TkUgKG5vIHN3aXRjaAotICAgaW5jbHVkZWQpLgotCi0gICBUaGUgZmxvdyBjb250cm9sIGlzIGNo YW5nZWQgYXV0b21hdGljYWxseSB0b28gd2hlbiB5b3UgZ2l2ZSBhIFNFVCBNT0RFTQotICAgVFlQ RSBjb21tYW5kLiBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3VyIG9wZXJhdGluZyBzeXN0ZW0gKHNh eSBMaW51eCkKLSAgIHN1cHBvcnRzIGhhcmR3YXJlIGZsb3cgY29udHJvbCAoUlRTL0NUUykuIE5v dyBzdXBwb3NlIHlvdSBnaXZlIHRoZQotICAgZm9sbG93aW5nIGNvbW1hbmRzOgotCi0gIHNldCBs aW5lIC9kZXYvdHR5UzIgICAgOyBBdXRvbWF0aWNhbGx5IHNldHMgZmxvdyB0byBOT05FCi0gIHNl dCBtb2RlbSB0eXBlIHVzciAgICAgOyBBdXRvbWF0aWNhbGx5IHNldHMgZmxvdyB0byBSVFMvQ1RT Ci0gIHNldCBtb2RlbSB0eXBlIHJvbG0gICAgOyBEb2Vzbid0IHN1cHBvcnQgUlRTL0NUUyBzbyBu b3cgZmxvdyBpcyBYT04vWE9GRgotCi0gICBJTVBPUlRBTlQ6IFRoaXMgbmV3IGZlYXR1cmUgdGVu ZHMgdG8gbWFrZSB0aGUgb3JkZXIgb2YgU0VUIExJTkUvSE9TVAotICAgYW5kIFNFVCBGTE9XIGNv bW1hbmRzIG1hdHRlciwgd2hlcmUgaXQgZGlkbid0IGJlZm9yZS4gRm9yIGV4YW1wbGUsIGluCi0g ICBWTVM6Ci0KLSAgU0VUIEZMT1cgS0VFUAotICBTRVQgTElORSBUVEEwOgotCi0gICB0aGUgU0VU IExJTkUgdW5kb2VzIHRoZSBTRVQgRkxPVyBLRUVQIGNvbW1hbmQ7IHRoZSBzZXF1ZW5jZSBub3cg bXVzdAotICAgYmU6Ci0KLSAgU0VUIEZMT1cgL0RJUkVDVCBLRUVQCi0gIFNFVCBMSU5FIFRUQTA6 Ci0KLSAgIG9yOgotCi0gIFNFVCBMSU5FIFRUQTA6Ci0gIFNFVCBGTE9XIEtFRVAKLQotMi4xNC4g VHJhcHBpbmcgQ29ubmVjdGlvbiBFc3RhYmxpc2htZW50IGFuZCBMb3NzCi0KLSAgIElmIHlvdSBk ZWZpbmUgYSBtYWNybyBjYWxsZWQgT05fT1BFTiwgaXQgaXMgZXhlY3V0ZWQgYW55IHRpbWUgdGhh dCBhCi0gICBTRVQgTElORSwgU0VUIFBPUlQsIFNFVCBIT1NULCBURUxORVQsIFJMT0dJTiBvciBz aW1pbGFyIGNvbW1hbmQKLSAgIHN1Y2NlZWRzIGluIG9wZW5pbmcgYSBjb25uZWN0aW9uLiBUaGUg YXJndW1lbnQgaXMgdGhlIGhvc3Qgb3IgZGV2aWNlCi0gICBuYW1lIChhcyBzaG93biBieSBTSE9X IENPTU1VTklDQVRJT05TLCBhbmQgdGhlIHNhbWUgYXMgXHYobGluZSkpLiBUaGlzCi0gICBtYWNy byBjYW4gYmUgdXNlZCBmb3IgYWxsIHNvcnRzIG9mIHRoaW5ncywgbGlrZSBhdXRvbWF0aWNhbGx5 IHNldHRpbmcKLSAgIGNvbm5lY3Rpb24tIG9yIGhvc3Qtc3BlY2lmaWMgcGFyYW1ldGVycyB3aGVu IHRoZSBjb25uZWN0aW9uIGlzIG9wZW5lZC4KLSAgIEV4YW1wbGU6Ci0KLSAgZGVmIE9OX09QRU4g ewotICAgICAgc3dpdGNoIFwlMSB7Ci0gICAgICAgIDphYmNjb3JwLmNvbSwgc2V0IHJlbGlhYmxl IG9mZiwgYnJlYWsKLSAgICAgICAgOnh5emNvcnAuY29tLCBzZXQgcmVjZWl2ZSBwYWNrZXQtbGVu Z3RoIDEwMDAsIGJyZWFrCi0gICAgICAgIGV0YyBldGMuLi4KLSAgICAgIH0KLSAgfQotCi0gICBJ ZiB5b3UgZGVmaW5lIGEgbWFjcm8gY2FsbGVkIE9OX0NMT1NFLCBpdCB3aWxsIGJlIGV4ZWN1dGVk IGFueSB0aW1lCi0gICB0aGF0IGEgU0VUIExJTkUsIFNFVCBQT1JULCBTRVQgSE9TVCwgVEVMTkVU LCBSTE9HSU4gb3IgYW55IG90aGVyIGtpbmQKLSAgIG9mIGNvbm5lY3Rpb24gdGhhdCBDLUtlcm1p dCBoYXMgbWFkZSBpcyBjbG9zZWQsIGVpdGhlciBieSB0aGUgcmVtb3RlIG9yCi0gICBieSBhIGxv Y2FsIENMT1NFLCBIQU5HVVAsIG9yIEVYSVQgY29tbWFuZCBvciBvdGhlciBsb2NhbCBhY3Rpb24s IHN1Y2gKLSAgIGFzIHdoZW4gYSBuZXcgY29ubmVjdGlvbiBpcyBvcGVuZWQgYmVmb3JlIGFuIG9s ZCBvbmUgd2FzIGV4cGxpY2l0bHkKLSAgIGNsb3NlZC4KLQotICAgQXMgc29vbiBhcyBDLUtlcm1p dCBub3RpY2VzIHRoZSBjb25uZWN0aW9uIGhhcyBiZWVuIGNsb3NlZCwgdGhlCi0gICBPTl9DTE9T RSBtYWNybyBpcyBpbnZva2VkIGF0IChhKSB0aGUgdG9wIG9mIHRoZSBjb21tYW5kIHBhcnNpbmcg bG9vcCwKLSAgIG9yIChiKSB3aGVuIGEgY29ubmVjdGlvbiBpcyBjbG9zZWQgaW1wbGljaXRseSBi eSBhIGNvbW1hbmQgc3VjaCBhcyBTRVQKLSAgIExJTkUgdGhhdCBjbG9zZXMgYW55IG9wZW4gY29u bmVjdGlvbiBwcmlvciB0byBtYWtpbmcgYSBuZXcgY29ubmVjdGlvbiwKLSAgIG9yIChjKSB3aGVu IEMtS2VybWl0IGNsb3NlcyBhbiBvcGVuIGNvbm5lY3Rpb24gaW4gdGhlIGFjdCBvZiBleGl0aW5n LgotCi0gICBUaGUgT05fQ0xPU0UgbWFjcm8gd2FzIGluc3BpcmVkIGJ5IHRoZSBuZXZlcmVuZGlu ZyBxdWVzdCB0byB1bml0ZQotICAgS2VybWl0IGFuZCBTU0guIEluIHRoaXMgY2FzZSB1c2luZyB0 aGUgInR1bm5lbCIgbWVjaGFuaXNtOgotCi0gIGRlZiBUVU5ORUwgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOyBcJTEgPSBob3N0IHRvIHR1bm5lbCB0bwotICAgICAgbG9jYWwgXCVw Ci0gICAgICBpZiBub3QgZGVmIFwlMSBzdG9wIDEKLSAgICAgIGFzc2lnbiB0dW5uZWxob3N0IFwl MSAgICAgICAgICAgICAgICAgICA7IE1ha2UgZ2xvYmFsIGNvcHkKLSAgICAgIHVuZGVmIG9uX2Ns b3NlCi0gICAgICBzZXQgbWFjcm8gZXJyb3Igb2ZmCi0gICAgICBjbG9zZSBjb25uZWN0aW9uICAg ICAgICAgICAgICAgICAgICAgICAgOyBJZ25vcmUgYW55IGVycm9yCi0gICAgICBvcGVuICFyZWFk IHR1bm5lbCBzdGFydCBcJTEKLSAgICAgIHJlYWQgXCVwICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7IEdldCBwb3J0IG51bWJlcgotICAgICAgaWYgZmFpbCBzdG9wIDEgVHVubmVsIGZh aWx1cmU6IFwlMQotICAgICAgY2xvc2UgcmVhZAotICAgICAgaWYgZmFpbCBzdG9wIDEgVHVubmVs IGZhaWx1cmU6IFwlMSAgICAgIDsgU2VlIFs0MzJdU2VjdGlvbiA0LjIuOC4xCi0gICAgICBhc3Np Z24gb25fY2xvc2UgeyAgICAgICAgICAgICAgICAgICAgICAgOyBTZXQgdXAgY2xvc2UgaGFuZGxl cgotICAgICAgICAgIGVjaG8gQ2xvc2luZyB0dW5uZWw6IFxtKHR1bm5lbGhvc3QpCi0gICAgICAg ICAgIXR1bm5lbCBzdG9wIFxtKHR1bm5lbGhvc3QpCi0gICAgICAgICAgdW5kZWYgb25fY2xvc2UK LSAgICAgIH0KLSAgICAgIHNldCBob3N0IGxvY2FsaG9zdDpcJXAgL3RlbG5ldAotICAgICAgaWYg c3VjY2VzcyBlbmQgMAotICAgICAgdW5kZWYgb25fY2xvc2UKLSAgICAgIHN0b3AgMSBDb25uZWN0 aW9uIGZhaWx1cmU6IFwlMQotICB9Ci0KLSAgIEluIHRoaXMgY2FzZSwgd2hlbiB0aGUgY29ubmVj dGlvbiBzdG9wcywgd2UgYWxzbyBuZWVkIHRvIHNodXQgZG93biB0aGUKLSAgIHR1bm5lbCwgZXZl biBpZiBpdCBpcyBhdCBhIGxhdGVyIHRpbWUgYWZ0ZXIgVFVOTkVMIGhhcyBmaW5pc2hlZAotICAg ZXhlY3V0aW5nLiBUaGlzIHdheSB3ZSBjYW4gZXNjYXBlIGJhY2ssIHJlY29ubmVjdCwgdHJhbnNm ZXIgZmlsZXMsIGFuZAotICAgc28gb24gdW50aWwgdGhlIGNvbm5lY3Rpb24gaXMgYnJva2VuIGJ5 IGxvZ2dpbmcgb3V0IGZyb20gdGhlIHJlbW90ZSwgb3IKLSAgIGJ5IGV4cGxpY2l0bHkgY2xvc2lu ZyBpdCwgb3IgYnkgRVhJVGluZyBmcm9tIEMtS2VybWl0LCBhdCB3aGljaCB0aW1lCi0gICB0aGUg dHVubmVsIGlzIHNodXQgZG93bi4KLQotICAgV2hlbiB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQs IG5vIG1hdHRlciBob3csIHRoZSBPTl9DTE9TRSBtYWNybwotICAgZXhlY3V0ZXMgYW5kIHRoZW4g dW5kZWZpbmVzIChkZXN0cm95cykgaXRzZWxmLCBzaW5jZSB3ZSBkb24ndCB3YW50IHRvCi0gICBi ZSBjbG9zaW5nIHR1bm5lbHMgaW4gdGhlIGZ1dHVyZSB3aGVuIHdlIGNsb3NlIHN1YnNlcXVlbnQg Y29ubmVjdGlvbnMuCi0KLSAgIE90aGVyIHN1Y2ggdHJpY2tzIGNhbiBiZSBpbWFnaW5lZCwgaW5j bHVkaW5nIGVuZGluZyBPTl9DTE9TRSB3aXRoIGEKLSAgIFNUT1AgY29tbWFuZCB0byBmb3JjZSB0 aGUgY29tbWFuZCBzdGFjayB0byBiZSBwZWVsZWQgYWxsIHRoZSB3YXkgYmFjawotICAgdG8gdGhl IHRvcCwgZm9yIGV4YW1wbGUgaW4gYSBkZWVwbHkgbmVzdGVkIHNjcmlwdCB0aGF0IGRlcGVuZHMg b24gdGhlCi0gICBjb25uZWN0aW9uIGJlaW5nIG9wZW46Ci0KLSAgZGVmIG9uX2Nsb3NlIHsgc3Rv cCAxIENPTk5FQ1RJT04gTE9TVCB9Ci0KLSAgIFdoZW4gQy1LZXJtaXQgaW52b2tlcyB0aGUgT05f Q0xPU0UgbWFjcm8sIGl0IHN1cHBsaWVzIG9uZSBhcmd1bWVudAotICAgKFwlMSk6IHRoZSByZWFz b24gdGhlIGNvbm5lY3Rpb24gd2FzIGNsb3NlZCBhcyBhIG51bWJlciwgb25lIG9mIHRoZQotICAg Zm9sbG93aW5nOgotCi0gIDIgLSBGYXRhbCBmYWlsdXJlIHRvIG5lZ290aWF0ZSBhIHJlcXVpcmVk IGl0ZW0gb24gYSBuZXR3b3JrIGNvbm5lY3Rpb24uCi0gIDEgLSBDbG9zZWQgYnkgQy1LZXJtaXQg Y29tbWFuZC4KLSAgMCAtIEFsbCBvdGhlcnMgKG5vcm1hbGx5IGNsb3NlZCBieSByZW1vdGUpLgot Ci0gICB3aGljaCBtYXkgYmUgdXNlZCBmb3IgYW55IHB1cnBvc2U7IGZvciBleGFtcGxlLCB0byBh ZGQgYSBjb21tZW50IHRvIHRoZQotICAgY29ubmVjdGlvbiBsb2c6Ci0KLSAgZGVmIG9uX2Nsb3Nl IHsKLSAgICAgIGxvY2FsIFwlbQotICAgICAgaWYgbm90IG9wZW4gY3ggZW5kIDAKLSAgICAgIHN3 aXRjaCBcJTEgewotICAgICAgICA6MCwgLlwlbSA9IENsb3NlZCBieSByZW1vdGUsIGJyZWFrCi0g ICAgICAgIDoxLCAuXCVtID0gQ2xvc2VkIGJ5IG1lLCBicmVhawotICAgICAgICA6MiwgLlwlbSA9 IE5ldHdvcmsgcHJvdG9jb2wgbmVnb3RpYXRpb24gZmFpbHVyZSwgYnJlYWsKLSAgICAgIH0KLSAg ICAgIGlmIGRlZiBcJW0gd3JpdGVsbiBjeCB7IyBcJW19Ci0gIH0KLQotMi4xNS4gQ29udGFjdGlu ZyBXZWIgU2VydmVycyB3aXRoIHRoZSBIVFRQIENvbW1hbmQKLQotICAgQy1LZXJtaXQgNy4wIChh dCB0aGlzIHdyaXRpbmcsIHRoZSBVTklYIHZlcnNpb24gb25seSkgc3VwcG9ydHMgZGlyZWN0Ci0g ICBjb250YWN0IGFuZCBpbnRlcmFjdGlvbiB3aXRoIFdlYiBzZXJ2ZXJzIHZpYSBIVFRQIDEuMCBw cm90b2NvbC4gVG8gbWFrZQotICAgYSBjb25uZWN0aW9uLCB1c2UgS2VybWl0J3Mgbm9ybWFsIG1l dGhvZCBmb3IgbWFraW5nIGEgVENQL0lQCi0gICBjb25uZWN0aW9uLCBidXQgc3BlY2lmeSB0aGUg SFRUUCBwb3J0OgotCi0gIFNFVCBIT1NUIGhvc3QgaHR0cCBbIHN3aXRjaGVzIF0KLQotICAgd2hl cmUgaG9zdCBpcyB0aGUgSVAgaG9zdG5hbWUgb3IgYWRkcmVzcywgYW5kIGh0dHAgaXMgdGhlIG5h bWUgb2YgdGhlCi0gICBUQ1AgcG9ydCBmb3IgdGhlIFdlYiBzZXJ2ZXIuIFJlbGV2YW50IHN3aXRj aGVzIGluY2x1ZGU6Ci0KLSAgIC9SQVcKLSAgICAgICAgICBUcmVhdCB0aGUgY29ubmVjdGlvbiBh cyBhIHRyYW5zcGFyZW50IGJpbmFyeSBwaXBlLiBUaGlzIHN3aXRjaAotICAgICAgICAgIG1heSBi ZSByZXF1aXJlZCBpZiBhIHBvcnQgb3RoZXIgdGhhbiAnaHR0cCcgaXMgdXNlZC4KLQotICAgL1NT TAotICAgICAgICAgIE1ha2UgYW4gc2VjdXJlIHByaXZhdGUgY29ubmVjdGlvbiB3aXRoIFNTTCAo b25seSBpZiBTU0wgc3VwcG9ydAotICAgICAgICAgIGlzIGluY2x1ZGVkIGluIHlvdXIgdmVyc2lv biBvZiBLZXJtaXQpLiBJbiB0aGlzIGNhc2UgdGhlIHBvcnQKLSAgICAgICAgICBuYW1lIG1pZ2h0 IG5lZWQgdG8gYmUgaHR0cHMgcmF0aGVyIHRoYW4gaHR0cCwgZS5nLiAic2V0IGhvc3QKLSAgICAg ICAgICBzZWN1cmVzZXJ2ZXIueHl6Y29ycC5jb20gaHR0cHMgL3NzbCIuCi0KLSAgIC9UTFMKLSAg ICAgICAgICBNYWtlIGFuIHNlY3VyZSBwcml2YXRlIGNvbm5lY3Rpb24gd2l0aCBUTFMgKG9ubHkg aWYgVExTIHN1cHBvcnQKLSAgICAgICAgICBpcyBpbmNsdWRlZCBpbiB5b3VyIHZlcnNpb24gb2Yg S2VybWl0KS4gSW4gdGhpcyBjYXNlIHRoZSBwb3J0Ci0gICAgICAgICAgbmFtZSB3b3VsZCBiZSBo dHRwcyByYXRoZXIgdGhhbiBodHRwLgotCi0gICBUaGVuIHlvdSBjYW4gaXNzdWUgYW4gSFRUUCBj b21tYW5kLiBJbiBtb3N0IGNhc2VzLCB0aGUgc2VydmVyIGNsb3NlcwotICAgdGhlIGNvbm5lY3Rp b24gd2hlbiB0aGUgY29tbWFuZCBpcyBjb21wbGV0ZS4gRXhhbXBsZToKLQotICBTRVQgSE9TVCB3 d3cuY29sdW1iaWEuZWR1IGh0dHAKLSAgSUYgRkFJTCBFWElUIDEgQ2FuJ3QgY29udGFjdCBzZXJ2 ZXIKLSAgSFRUUCBHRVQga2VybWl0L2luZGV4Lmh0bWwKLQotICAgQXQgdGhpcyBwb2ludCB0aGUg Y29ubmVjdGlvbiBpcyBjbG9zZWQsIHNpbmNlIHRoYXQncyBob3cgSFRUUCAxLjAKLSAgIHdvcmtz LiBJZiB5b3Ugd2FudCB0byBwZXJmb3JtIGFkZGl0aW9uYWwgb3BlcmF0aW9ucywgeW91IG11c3Qg ZXN0YWJsaXNoCi0gICBhIG5ldyBjb25uZWN0aW9uIHdpdGggYW5vdGhlciBTRVQgSE9TVCBjb21t YW5kLgotCi0gICBUaGUgSFRUUCBjb21tYW5kIGFjdHMgYXMgYSBjbGllbnQgdG8gdGhlIFdlYiBz ZXJ2ZXIsIGV4Y2VwdCBpbnN0ZWFkIG9mCi0gICBkaXNwbGF5aW5nIHRoZSByZXN1bHRzIGxpa2Ug YSBXZWIgYnJvd3NlciB3b3VsZCwgaXQgc3RvcmVzIHRoZW0uIEFueQotICAgSFRUUCBjb21tYW5k IGNhbiAoYnV0IG5lZWQgbm90KSBpbmNsdWRlIGFueSBvciBhbGwgb2YgdGhlIGZvbGxvd2luZwot ICAgc3dpdGNoZXM6Ci0KLSAgIC9BR0VOVDp1c2VyLWFnZW50Ci0gICAgICAgICAgSWRlbnRpZmll cyB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXI7ICJDLUtlcm1pdCIgb3IgIktlcm1pdC05NSIKLSAg ICAgICAgICBieSBkZWZhdWx0LgotCi0gICAvSEVBREVSOmhlYWRlci1saW5lCi0gICAgICAgICAg VXNlZCBmb3Igc3BlY2lmeWluZyBhbnkgb3B0aW9uYWwgaGVhZGVycy4gQSBsaXN0IG9mIGhlYWRl cnMgaXMKLSAgICAgICAgICBwcm92aWRlZCB1c2luZyBicmFjZXMgZm9yIGdyb3VwaW5nOgotCi0g IC9IRUFERVI6e3t0YWc6dmFsdWV9e3RhZzp2YWx1ZX0uLi59Ci0KLSAgICAgICAgICBGb3IgYSBs aXN0aW5nIG9mIHZhbGlkIHRhZyB2YWx1ZSBhbmQgdmFsdWUgZm9ybWF0cyBzZWUgWzQzM11SRkMK LSAgICAgICAgICAxOTQ1OiBIeXBlcnRleHQgVHJhbnNmZXIgUHJvdG9jb2wgLS0gSFRUUC8xLjAu IEEgbWF4aW11bSBvZgotICAgICAgICAgIGVpZ2h0IGhlYWRlcnMgbWF5IGJlIHNwZWNpZmllZC4K LQotICAgL1VTRVI6bmFtZQotICAgICAgICAgIEluIGNhc2UgYSBwYWdlIHJlcXVpcmVzIGEgdXNl cm5hbWUgZm9yIGFjY2Vzcy4KLQotICAgL1BBU1NXT1JEOnBhc3N3b3JkCi0gICAgICAgICAgSW4g Y2FzZSBhIHBhZ2UgcmVxdWlyZXMgYSBwYXNzd29yZCBmb3IgYWNjZXNzLgotCi0gICAvQVJSQVk6 YXJyYXluYW1lCi0gICAgICAgICAgVGVsbHMgS2VybWl0IHRvIHN0b3JlIHRoZSByZXNwb25zZSBo ZWFkZXJzIGluIHRoZSBnaXZlbiBhcnJheSwKLSAgICAgICAgICBvbmUgbGluZSBwZXIgZWxlbWVu dC4gVGhlIGFycmF5IG5lZWQgbm90IGJlIGRlY2xhcmVkIGluIGFkdmFuY2UuCi0gICAgICAgICAg RXhhbXBsZToKLQotICBDLUtlcm1pdD8gaHR0cCAvYXJyYXk6YyBnZXQga2VybWl0L2luZGV4Lmh0 bWwKLSAgQy1LZXJtaXQ/IHNob3cgYXJyYXkgYwotICBEaW1lbnNpb24gPSA5Ci0gIDEuIERhdGU6 IEZyaSwgMjYgTm92IDE5OTkgMjM6MTI6MjIgR01UCi0gIDIuIFNlcnZlcjogQXBhY2hlLzEuMy40 IChVbml4KQotICAzLiBMYXN0LU1vZGlmaWVkOiBNb24sIDA2IFNlcCAxOTk5IDIyOjM1OjU4IEdN VAotICA0LiBFVGFnOiAiYmMwNDktZjcyLTM3ZDQ0MWNlIgotICA1LiBBY2NlcHQtUmFuZ2VzOiBi eXRlcwotICA2LiBDb250ZW50LUxlbmd0aDogMzk1NAotICA3LiBDb25uZWN0aW9uOiBjbG9zZQot ICA4LiBDb250ZW50LVR5cGU6IHRleHQvaHRtbAotCi0gICBBcyB5b3UgY2FuIHNlZSwgdGhlIGhl YWRlciBsaW5lcyBhcmUgbGlrZSBNSU1FIGUtbWFpbCBoZWFkZXIgbGluZXM6Ci0gICBpZGVudGlm aWVyLCBjb2xvbiwgdmFsdWUuIFRoZSAvQVJSQVkgc3dpdGNoIGlzIHRoZSBvbmx5IG1ldGhvZAot ICAgYXZhaWxhYmxlIHRvIGEgc2NyaXB0IHRvIHByb2Nlc3MgdGhlIHNlcnZlciByZXNwb25zZXMg Zm9yIGEgUE9TVCBvciBQVVQKLSAgIGNvbW1hbmQuCi0KLSAgIFRoZSBIVFRQIGNvbW1hbmRzIGFy ZToKLQotICAgSFRUUCBbIHN3aXRjaGVzIF0gR0VUIHJlbW90ZS1maWxlbmFtZSBbIGxvY2FsLWZp bGVuYW1lIF0KLSAgICAgICAgICBSZXRyaWV2ZXMgdGhlIG5hbWVkIGZpbGUuIElmIGEgbG9jYWwt ZmlsZW5hbWUgaXMgZ2l2ZW4sIHRoZSBmaWxlCi0gICAgICAgICAgaXMgc3RvcmVkIGxvY2FsbHkg dW5kZXIgdGhhdCBuYW1lOyBvdGhlcndpc2UgaXQgaXMgc3RvcmVkIHdpdGgKLSAgICAgICAgICBp dHMgb3duIG5hbWUuCi0KLSAgIEhUVFAgWyBzd2l0Y2hlcyBdIEhFQUQgcmVtb3RlLWZpbGVuYW1l IGxvY2FsLWZpbGVuYW1lCi0gICAgICAgICAgTGlrZSBHRVQgZXhjZXB0IHdpdGhvdXQgYWN0dWFs bHkgZ2V0dGluZyB0aGUgZmlsZTsgaW5zdGVhZCBpdAotICAgICAgICAgIGdldHMgb25seSB0aGUg aGVhZGVycywgc3RvcmluZyB0aGVtIGludG8gdGhlIGdpdmVuIGZpbGUsIHdob3NlCi0gICAgICAg ICAgbmFtZSBtdXN0IGJlIGdpdmVuLCBvbmUgbGluZSBwZXIgaGVhZGVyIGl0ZW0sIGFzIHNob3du IGFib3ZlIGluCi0gICAgICAgICAgdGhlIC9BUlJBWTogc3dpdGNoIGRlc2NyaXB0aW9uLgotCi0g ICBIVFRQIFsgc3dpdGNoZXMgXSBJTkRFWCByZW1vdGUtZGlyZWN0b3J5IFsgbG9jYWwtZmlsZW5h bWUgXQotICAgICAgICAgIFJldHJpZXZlcyB0aGUgZmlsZSBsaXN0aW5nIGZvciB0aGUgZ2l2ZW4g c2VydmVyIGRpcmVjdG9yeS4gTk9URToKLSAgICAgICAgICBUaGlzIGNvbW1hbmQgaXMgbm90IHN1 cHBvcnRlZCBieSBtb3N0IFdlYiBzZXJ2ZXJzLgotCi0gICBIVFRQIFsgc3dpdGNoZXMgXSBQT1NU IFsgL01JTUUtVFlQRTp0eXBlIF0gbG9jYWwtZmlsZSByZW1vdGUtZmlsZQotICAgICAgICAgIFVz ZWQgdG8gc2VuZCBhIHJlc3BvbnNlIGFzIGlmIGl0IHdlcmUgc2VudCBmcm9tIGEgZm9ybS4gVGhl IGRhdGEKLSAgICAgICAgICB0byBiZSBwb3N0ZWQgbXVzdCBiZSByZWFkIGZyb20gYSBmaWxlLgot Ci0gICBIVFRQIFsgc3dpdGNoZXMgXSBQVVQgWyAvTUlNRS1UWVBFOnR5cGUgXSBsb2NhbC1maWxl IHJlbW90ZS1maWxlCi0gICAgICAgICAgVXBsb2FkcyBhIGxvY2FsIGZpbGUgdG8gYSBzZXJ2ZXIg ZmlsZS4KLQotICAgSFRUUCBbIHN3aXRjaGVzIF0gREVMRVRFIHJlbW90ZS1maWxlbmFtZQotICAg ICAgICAgIEluc3RydWN0cyB0aGUgc2VydmVyIHRvIGRlbGV0ZSB0aGUgc3BlY2lmaWVkIGZpbGVu YW1lLgotCi0zLiBURVJNSU5BTCBDT05ORUNUSU9OCi0KLTMuMS4gQ09OTkVDVCBDb21tYW5kIFN3 aXRjaGVzCi0KLSAgIFRoZSBmb2xsb3dpbmcgc3dpdGNoZXMgKHNlZSBbNDM0XVNlY3Rpb24gMS41 KSB3ZXJlIGFkZGVkIHRvIHRoZSBDT05ORUNUCi0gICBjb21tYW5kIGluIDcuMDoKLQotICAgL1FV SUVUTFkKLSAgICAgICAgICBEb24ndCBwcmludCB0aGUgIkNvbm5lY3RpbmcgdG8uLi4iIG9yICJC YWNrIGF0Li4uIiBtZXNzYWdlcy4gQ1EKLSAgICAgICAgICBpcyBhbiBpbnZpc2libGUgY29tbWFu ZCBzeW5vbnltIGZvciBDT05ORUNUIC9RVUlFVExZLgotCi0gICAvVFJJR0dFUjpzdHJpbmcKLSAg ICAgICAgICBTcGVjaWZ5IGEgdHJpZ2dlciBvciB0cmlnZ2VycyAoWzQzNV1TZWN0aW9uIDMuMikg ZWZmZWN0aXZlIGZvcgotICAgICAgICAgIHRoaXMgQ09OTkVDVCBjb21tYW5kIG9ubHksIHRlbXBv cmFyaWx5IG92ZXJyaWRpbmcgYW55IGN1cnJlbnQKLSAgICAgICAgICBTRVQgVEVSTUlOQUwgVFJJ R0dFUiB2YWx1ZXMgKFs0MzZdU2VjdGlvbiAzLjIpLgotCi0gICBOb3RlOiBPdGhlciBzd2l0Y2hl cyBtaWdodCBhbHNvIGJlIGF2YWlsYWJsZTsgdHlwZSAiY29ubmVjdCA/IiBmb3IgYQotICAgbGlz dCwgImhlbHAgY29ubmVjdCIgZm9yIGEgZGVzY3JpcHRpb24gb2YgZWFjaC4KLQotMy4yLiBUcmln Z2VycwotCi0gICBUcmlnZ2VycyB3ZXJlIGFkZGVkIGZvciBVTklYLCBWTVMsIEFPUy9WUywgYW5k IEs5NSBpbiBDLUtlcm1pdCA3LjAuCi0KLSAgIFNFVCBURVJNSU5BTCBUUklHR0VSIHN0cmluZwot ICAgICAgICAgIFRlbGxzIEMtS2VybWl0IHRvIGxvb2sgZm9yIHRoZSBnaXZlbiBzdHJpbmcgZHVy aW5nIGFsbAotICAgICAgICAgIHN1YnNlcXVlbnQgQ09OTkVDVCBzZXNzaW9ucywgYW5kIGlmIHNl ZW4sIHRvIHJldHVybiB0byBjb21tYW5kCi0gICAgICAgICAgbW9kZSBhdXRvbWF0aWNhbGx5LCBh cyBpZiB5b3UgaGFkIGVzY2FwZWQgYmFjayBtYW51YWxseS4gSWYgdGhlCi0gICAgICAgICAgc3Ry aW5nIGluY2x1ZGVzIGFueSBzcGFjZXMsIHlvdSBtdXN0IGVuY2xvc2UgaXQgaW4gYnJhY2VzLgot ICAgICAgICAgIEV4YW1wbGU6Ci0KLSAgc2V0IHRlcm1pbmFsIHRyaWdnZXIge05PIENBUlJJRVJ9 Ci0KLSAgIENvbXBhcmlzb25zIGFyZSBtYWRlIGFmdGVyIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRp b24uCi0KLSAgIElmIGEgc3RyaW5nIGlzIHRvIGluY2x1ZGUgYSBsaXRlcmFsIGJyYWNlIGNoYXJh Y3RlciwgcHJlY2VkZSBpdCB3aXRoIGEKLSAgIGJhY2tzbGFzaDoKLQotICA7IE15IG1vZGVtIGFs d2F5cyBtYWtlcyB0aGlzIG5vaXNlIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgbG9zdDoKLSAgc2V0 IHRlcm1pbmFsIHRyaWdnZXIgfHx8cHBwXHtce1x7XHtVVVVVVVVVCi0KLSAgIElmIHlvdSB3YW50 IEtlcm1pdCB0byBsb29rIGZvciBtb3JlIHRoYW4gb25lIHN0cmluZyBzaW11bHRhbmVvdXNseSwg dXNlCi0gICB0aGUgZm9sbG93aW5nIHN5bnRheDoKLQotICBzZXQgdGVybWluYWwgdHJpZ2dlciB7 e3N0cmluZzF9e3N0cmluZzJ9Li4ue3N0cmluZ259fQotCi0gICBJbiB0aGlzIGNhc2UsIEMtS2Vy bWl0IHdpbGwgcmV0dXJuIHRvIGNvbW1hbmQgbW9kZSBhdXRvbWF0aWNhbGx5IGlmIGFueQotICAg b2YgdGhlIGdpdmVuIHN0cmluZ3MgaXMgZW5jb3VudGVyZWQuIFVwIHRvIDggc3RyaW5ncyBtYXkg YmUgc3BlY2lmaWVkLgotCi0gICBJZiB0aGUgbW9zdCByZWNlbnQgcmV0dXJuIHRvIGNvbW1hbmQg bW9kZSB3YXMgY2F1c2VkIGJ5IGEgdHJpZ2dlciwgdGhlCi0gICBuZXcgdmFyaWFibGUsIFx2KHRy aWdnZXIpLCBzaG93cyB0aGUgdHJpZ2dlciB2YWx1ZTsgb3RoZXJ3aXNlCi0gICBcdih0cmlnZ2Vy KSBpcyBlbXB0eS4KLQotICAgVGhlIFNIT1cgVFJJR0dFUiBjb21tYW5kIGRpc3BsYXlzIHRoZSBT RVQgVEVSTUlOQUwgVFJJR0dFUiB2YWx1ZXMgYXMKLSAgIHdlbGwgYXMgdGhlIFx2KHRyaWdnZXIp IHZhbHVlLgotCi0zLjMuIFRyYW5zcGFyZW50IFByaW50aW5nCi0KLSAgIEFzIG5vdGVkIGluIHRo ZSBtYW51YWwsIEMtS2VybWl0J3MgQ09OTkVDVCBjb21tYW5kIG9uIFVOSVggaXMgbm90IGEKLSAg IHRlcm1pbmFsIGVtdWxhdG9yLCBidXQgcmF0aGVyIGEgInNlbWl0cmFuc3BhcmVudCBwaXBlIiBi ZXR3ZWVuIHRoZQotICAgdGVybWluYWwgb3IgZW11bGF0b3IgeW91IGFyZSB1c2luZyB0byBhY2Nl c3MgQy1LZXJtaXQsIGFuZCB0aGUgcmVtb3RlCi0gICBob3N0IHRvIHdoaWNoIEMtS2VybWl0IGlz IGNvbm5lY3RlZC4gVGhlICJzZW1pdHJhbnNwYXJlbnQiIHF1YWxpZmllciBpcwotICAgYmVjYXVz ZSBvZiBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uIGFzIHdlbGwgYXMgc2V2ZXJhbCBhY3Rpb25z IHRha2VuCi0gICBieSB0aGUgZW11bGF0b3IgaW4gcmVzcG9uc2UgdG8gdGhlIGNoYXJhY3RlcnMg b3Igc3RyaW5ncyB0aGF0IHBhc3MKLSAgIHRocm91Z2ggaXQsIHN1Y2ggYXMgQVBDcywgS2VybWl0 IHBhY2tldHMgKGF1dG9kb3dubG9hZCksIHRyaWdnZXJzLCBldGMuCi0KLSAgIFRoZSBVTklYIHZl cnNpb24gb2YgQy1LZXJtaXQgNy4wIGFkZHMgYW5vdGhlciBzdWNoIGFjdGlvbjogVHJhbnNwYXJl bnQKLSAgIHByaW50aW5nLCBhbHNvIGNhbGxlZCBDb250cm9sbGVyIHByaW50aW5nIChhcyBkaXN0 aW5jdCBmcm9tIEF1dG9wcmludAotICAgb3IgbGluZSBvciBzY3JlZW4gcHJpbnQpLiBJdCBpcyBp bnRlbmRlZCBtYWlubHkgZm9yIHVzZSBvbiBVTklYCi0gICB3b3Jrc3RhdGlvbiBjb25zb2xlcyAo YXMgb3Bwb3NlZCB0byByZW1vdGUgbG9naW5zKSwgYnV0IHdpdGggc29tZSBjYXJlCi0gICBjYW4g YWxzbyBiZSB1c2VkIHdoZW4gYWNjZXNzaW5nIEMtS2VybWl0IHJlbW90ZWx5LgotCi0gICBUcmFu c3BhcmVudCBwcmludGluZyBpcyByZWxhdGVkIHRvIEFQQyBieSBzaGFyaW5nIEMtS2VybWl0J3Mg YnVpbHQtaW4KLSAgIEFOU0kgZXNjYXBlLXNlcXVlbmNlIHBhcnNlciB0byBkZXRlY3QgInByaW50 ZXIgb24iIGFuZCAicHJpbnRlciBvZmYiCi0gICBzZXF1ZW5jZXMgZnJvbSB0aGUgaG9zdC4gV2hl biB0aGUgcHJpbnRlci1vbiBzZXF1ZW5jZSBpcyByZWNlaXZlZCwgYWxsCi0gICBzdWJzZXF1ZW50 IGFycml2aW5nIGNoYXJhY3RlcnMgLS0gaW5jbHVkaW5nIE5VTCwgY29udHJvbCBjaGFyYWN0ZXJz LAotICAgYW5kIGVzY2FwZSBzZXF1ZW5jZXMgLS0gYXJlIHNlbnQgdG8gdGhlIFNFVCBQUklOVEVS IGRldmljZSBpbnN0ZWFkIG9mCi0gICB0byB5b3VyIHNjcmVlbiB1bnRpbCB0aGUgcHJpbnRlci1v ZmYgc2VxdWVuY2UgaXMgcmVjZWl2ZWQsIG9yIHlvdQotICAgZXNjYXBlIGJhY2ssIHdoaWNoZXZl ciBoYXBwZW5zIGZpcnN0LiBUaGVzZSBieXRlcyBhcmUgbm90IHRyYW5zbGF0ZWQgb3IKLSAgIG1v ZGlmaWVkIG9yIGZpbHRlcmVkIGluIGFueSB3YXkgYnkgS2VybWl0IChleGNlcHQgZm9yIHBvc3Np Ymx5Ci0gICBzdHJpcHBpbmcgb2YgdGhlIDh0aCBiaXQsIGFzIG5vdGVkIGJlbG93KSwgYnV0IGlm IGZpbHRlcmluZyBvcgotICAgdHJhbnNsYXRpb24gaXMgZGVzaXJlZCwgdGhpcyBjYW4gYmUgYWNj b21wbGlzaGVkIGJ5IHlvdXIgU0VUIFBSSU5URVIKLSAgIHNlbGVjdGlvbiAoZS5nLiBieSBjaG9v c2luZyBhIHBpcGVsaW5lIG9mIGZpbHRlcnMpLgotCi0gICBCeSBkZWZhdWx0LCB5b3VyIFNFVCBQ UklOVEVSIGRldmljZSBpcyB5b3VyIGRlZmF1bHQgVU5JWCBwcmludGVyLCBidXQKLSAgIGl0IGNh biBhbHNvIGJlIGEgZmlsZSwgYSBjb21tYW5kLCBvciB0aGUgbnVsbCBkZXZpY2UgKHdoaWNoIGNh dXNlcyBhbGwKLSAgIHByaW50ZXIgbWF0ZXJpYWwgdG8gYmUgZGlzY2FyZGVkKS4gU2VlIFs0Mzdd VXNpbmcgQy1LZXJtaXQsIDJuZCBFZC4sCi0gICBwLjQxIGZvciBkZXRhaWxzLgotCi0gICBUcmFu c3BhcmVudCBwcmludGluZyBpcyBjb250cm9sbGVkIGJ5IHRoZSBjb21tYW5kOgotCi0gICBTRVQg VEVSTUlOQUwgUFJJTlQgeyBPTiwgT0ZGIH0KLSAgICAgICAgICBXaGVuIE9OLCB0cmFuc3BhcmVu dC1wcmludCBzZXF1ZW5jZXMgYXJlIG9iZXllZCwgYW5kIHByaW50aW5nCi0gICAgICAgICAgb2Nj dXJzIG9uIHRoZSBzeXN0ZW0gd2hlcmUgQy1LZXJtaXQgaXMgcnVubmluZy4gV2hlbiBPRkYsCi0g ICAgICAgICAgdHJhbnNwYXJlbnQgcHJpbnQgc2VxdWVuY2VzIGFyZSBpZ25vcmVkIGFuZCBwYXNz ZWQgdGhyb3VnaCB0bwotICAgICAgICAgIHlvdXIgYWN0dWFsIHRlcm1pbmFsIG9yIGVtdWxhdG9y LCBhbG9uZyB3aXRoIHRoZSBkYXRhIHRoZXkKLSAgICAgICAgICBlbmNsb3NlLiBPRkYgaXMgdGhl IGRlZmF1bHQsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggZWFybGllcgotICAgICAgICAgIEMtS2Vy bWl0IHJlbGVhc2VzLiBBcyBub3RlZCBpbiB0aGUgbWFudWFsLCB3aGVuIHRoZSBjdXJyZW50IFNF VAotICAgICAgICAgIFBSSU5URVIgZGV2aWNlIGlzIGEgZmlsZSwgdHJhbnNwYXJlbnQtcHJpbnQg bWF0ZXJpYWwgaXMgYXBwZW5kZWQKLSAgICAgICAgICB0byBpdDsgdGhlIGZpbGUgaXMgbm90IG92 ZXJ3cml0dGVuLgotCi0gICBTRVQgVEVSTUlOQUwgQllURVNJWkUgeyA3LCA4IH0KLSAgIFNFVCBQ QVJJVFkgeyBFVkVOLCBPREQsIE1BUkssIFNQQUNFLCBOT05FIH0KLSAgICAgICAgICBJZiB0aGUg dGVybWluYWwgYnl0ZXNpemUgaXMgNywgb3IgUEFSSVRZIGlzIG5vdCBOT05FLCB0aGUgOHRoCi0g ICAgICAgICAgYml0IG9mIGVhY2ggYnl0ZSBpcyBzdHJpcHBlZCBwcmlvciB0byBwcmludGluZy4K LQotICAgVGhlIHRyYW5zcGFyZW50LXByaW50IGVzY2FwZSBzZXF1ZW5jZXMgYXJlOgotCi0gICA8 RVNDPls1aQotICAgICAgICAgIFByaW50ZXIgT24uIFNlbmQgYWxsIHN1YnNlcXVlbnQgaW5jb21p bmcgYnl0ZXMgdG8gdGhlIHByaW50ZXIKLSAgICAgICAgICB3aXRob3V0IGFueSBraW5kIG9mIGZp bHRlcmluZywgdHJhbnNsYXRpb24sIG9yIGFsdGVyYXRpb24uIE5vdGU6Ci0gICAgICAgICAgPEVT Qz4gc3RhbmRzIGZvciBBU0NJSSBjaGFyYWN0ZXIgbnVtYmVyIDI3IChkZWNpbWFsKSwgRXNjYXBl LgotCi0gICA8RVNDPls0aQotICAgICAgICAgIFByaW50ZXIgT2ZmLiBSZXN1bWUgZGlzcGxheWlu ZyBpbmNvbWluZyBieXRlcyBvbiB0aGUgc2NyZWVuLgotCi0gICBUaGVzZSBhcmUgdGhlIHNhbWUg c2VxdWVuY2VzIHVzZWQgYnkgREVDIFZUMTAwIGFuZCBoaWdoZXIgdGVybWluYWxzIGFuZAotICAg b3RoZXIgQU5TSSBYMy42NCBhbmQgSVNPIDY0MjkgY29tcGF0aWJsZSB0ZXJtaW5hbHMuIFRoZXJl IGlzIG5vCi0gICBwcm92aXNpb24gZm9yIHNlbGVjdGluZyBvdGhlciBwcmludGVyLWNvbnRyb2wg c2VxdWVuY2VzLgotCi0gICBSZXN0cmljdGlvbnM6Ci0KLSAgICAxLiBZb3UgbXVzdCBTRVQgVEVS TSBUUkFOU1BBUkVOVC1QUklOVCBPTiBiZWZvcmUgeW91IGNhbiB1c2UgdGhpcwotICAgICAgIGZl YXR1cmUuCi0gICAgMi4gT25seSB0aGUgNy1iaXQgZm9ybXMgb2YgdGhlIGVzY2FwZSBzZXF1ZW5j ZXMgYXJlIHN1cHBvcnRlZC4gVGhlCi0gICAgICAgOC1iaXQgQ1NJIEMxIGNvbnRyb2wgaXMgbm90 IHJlY29nbml6ZWQuCi0gICAgMy4gQXV0b3ByaW50IGlzIG5vdCBzdXBwb3J0ZWQsIHNpbmNlIHRo aXMgcmVxdWlyZXMgYSBmdWxsLWZsZWRnZWQKLSAgICAgICB0ZXJtaW5hbCBlbXVsYXRvciB3aXRo IGRpcmVjdCBhY2Nlc3MgdG8gdGhlIHNjcmVlbi4KLSAgICA0LiBUaGUgc3RhcnQtcHJpbnQgYW5k IHN0b3AtcHJpbnQgc2VxdWVuY2VzIHBhc3MgdGhyb3VnaCB0byB0aGUgc2NyZWVuCi0gICAgICAg KHRoZXJlIGlzIG5vIHdheSB0byBhdm9pZCB0aGlzIHdpdGhvdXQgY2F1c2luZyB1bmFjY2VwdGFi bGUgZGVsYXlzCi0gICAgICAgb3IgZGVhZGxvY2tzIGluIENPTk5FQ1QgbW9kZSkuIFRodXMgaWYg eW91ciB0ZXJtaW5hbCBvciBlbXVsYXRvcgotICAgICAgIGFsc28gc3VwcG9ydHMgdHJhbnNwYXJl bnQgcHJpbnRpbmcgdmlhIHRoZXNlIHNhbWUgc2VxdWVuY2VzLCBhbgotICAgICAgIGVtcHR5IGZp bGUgd2lsbCBiZSBzZW50IHRvIGl0cyBwcmludGVyLiBOb3JtYWxseSB0aGlzIGhhcyBubwotICAg ICAgIGVmZmVjdC4KLQotICAgUG9pbnQgKDQpIGlzIHNpbWlsYXIgdG8gdGhlIHNpdHVhdGlvbiB3 aXRoIGF1dG9kb3dubG9hZCBhbmQgQVBDIC0tIHdoZW4KLSAgIHlvdSBoYXZlIHNldmVyYWwgS2Vy bWl0IGNsaWVudHMgaW4gYSBjaGFpbiwgeW91IHNob3VsZCB0YWtlIGNhcmUgdGhhdAotICAgdGhl c2UgZmVhdHVyZXMgYXJlIGVuYWJsZWQgaW4gb25seSBvbmUgb2YgdGhlbS4KLQotICAgRXhhbXBs ZSAxOgotCi0gIHNldCBwcmludGVyIHt8bHByIC1QbGFzZXJ9ICA7IFNwZWNpZnkgdGhlIHByaW50 ZXIgKGlmIG5vdCBkZWZhdWx0KS4KLSAgc2V0IHRlcm0gcHJpbnQgb24gICAgICAgICAgIDsgRW5h YmxlIHRyYW5zcGFyZW50IHByaW50aW5nLgotICBzZXQgdGVybSBieXRlIDggICAgICAgICAgICAg OyBFbmFibGUgOC1iaXQgY2hhcmFjdGVycy4KLSAgY29ubmVjdCAgICAgICAgICAgICAgICAgICAg IDsgRW50ZXIgQ09OTkVDVCBtb2RlLgotCi0gICBFeGFtcGxlIDI6Ci0KLSAgc2V0IHByaW50ZXIg L2hvbWUvdXNlcnMvb2xnYS9wcmludGVyLmxvZyAgOyBTZW5kIHByaW50ZXIgbWF0ZXJpYWwgdG8g YSBmaWxlLgotCi0gICBFeGFtcGxlIDM6Ci0KLSAgc2V0IHByaW50ZXIge3wgZ3JlcCAtdiBeUmVj ZWl2ZWQgfCBscHJ9ICAgOyBGaWx0ZXIgb3V0IHNvbWUgbGluZXMKLQotICAgVGhlbiB1c2UgInBj cHJpbnQiIG9yICJ2dHByaW50IiBjb21tYW5kcyBvbiB0aGUgaG9zdCB0byBpbml0aWF0ZQotICAg dHJhbnNwYXJlbnQgcHJpbnQgb3BlcmF0aW9ucy4gU2VlIFs0MzhdVXNpbmcgQy1LZXJtaXQsIDJu ZCBFZC4sIHAuNDA2Ci0gICBmb3IgZGV0YWlscy4KLQotICAgSGVyZSBpcyBhIHNhbXBsZSAicGNw cmludCIgc2hlbGwgc2NyaXB0IGZvciBVTklYOgotCi0gICMhL2Jpbi9zaAotICBlY2hvIC1uICc8 RVNDPls1aScKLSAgaWYgWyAkIyAtZXEgMCBdOyB0aGVuCi0gICAgY2F0Ci0gIGVsc2UKLSAgICBj YXQgJCoKLSAgZmkKLSAgZWNobyAtbiAnPEZGPjxFU0M+WzRpJwotICAjIChlbmQpCi0KLSAgIChS ZXBsYWNlICI8RVNDPiIgYnkgdGhlIGFjdHVhbCBBU0NJSSBFc2NhcGUgY2hhcmFjdGVyIGFuZCAi PEZGPiIgYnkgdGhlCi0gICBBU0NJSSBGb3JtZmVlZCBjaGFyYWN0ZXIpLgotCi0gICBJZiB5b3Ug YWx3YXlzIHdhbnQgdHJhbnNwYXJlbnQgcHJpbnRpbmcgZW5hYmxlZCwgcHV0ICJzZXQgdGVybSBw cmludAotICAgb24iIGluIHlvdXIgQy1LZXJtaXQgY3VzdG9taXphdGlvbiBmaWxlICh+Ly5teWtl cm1yYyBpbiBVTklYKS4gVGhlICJzZXQKLSAgIHRlcm0gYnl0ZXNpemUiIHNlbGVjdGlvbiwgaG93 ZXZlciwgaXMgYSBwcm9wZXJ0eSBvZiBlYWNoIHNlcGFyYXRlCi0gICBjb25uZWN0aW9uLgotCi0z LjQuIEJpbmFyeSBhbmQgVGV4dCBTZXNzaW9uIExvZ3MKLQotICAgQy1LZXJtaXQgNy4wIGNvcnJl Y3RzIGFuIG92ZXJzaWdodCBpbiBlYXJsaWVyIHJlbGVhc2VzLCBpbiB3aGljaCBiaW5hcnkKLSAg IHNlc3Npb24gbG9ncyAoU0VUIFNFU1NJT04tTE9HIEJJTkFSWSkgdHJhbnNsYXRlZCBjaGFyYWN0 ZXIgc2V0cyBhbmQKLSAgIHBlcmZvcm1lZCB2YXJpb3VzIGZvcm1hdHRpbmcgdHJhbnNmb3JtYXRp b25zIChlLmcuICJuZXdsaW5lIG1vZGUiKQotICAgYmVmb3JlIHdyaXRpbmcgY2hhcmFjdGVycyB0 byB0aGUgc2Vzc2lvbiBsb2cuIEluIEMtS2VybWl0IDcuMCwKLSAgIGJpbmFyeS1tb2RlIHNlc3Np b24gbG9nZ2luZyB3cml0ZXMgY2hhcmFjdGVycyBhcyB0aGV5IGNvbWUgaW4sIGJlZm9yZQotICAg YW55dGhpbmcgKG90aGVyIHRoYXQgcGFyaXR5LWJpdCBzdHJpcHBpbmcpIGlzIGRvbmUgdG8gdGhl bS4gVGV4dC1tb2RlCi0gICBzZXNzaW9uIGxvZ2dpbmcgcmVjb3JkcyB0aGUgY2hhcmFjdGVycyBh ZnRlciBwcm9jZXNzaW5nLgotCi00LiBGSUxFIFRSQU5TRkVSCi0KLSAgIEV2ZXJ5IGZpbGUgaXMg dHJhbnNmZXJyZWQgZWl0aGVyIGluIHRleHQgbW9kZSAod2hpY2ggaW1wbGllcwotICAgcmVjb3Jk LWZvcm1hdCBhbmQgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbikgb3IgYmluYXJ5IG1vZGUgKGlu IHdoaWNoCi0gICBlYWNoIGJ5dGUgaXMgc2VudCBsaXRlcmFsbHkgd2l0aG91dCBhbnkga2luZCBv ZiBjb252ZXJzaW9uKS4gVGhlIG1vZGUKLSAgIGluIHdoaWNoIGEgZmlsZSBpcyB0cmFuc2ZlcnJl ZCBpcyBjb250cm9sbGVkIGJ5IChhKSB0aGUgZGVmYXVsdCBtb2RlLAotICAgaW4gdGhlIGFic2Vu Y2Ugb2YgYW55IG90aGVyIGluZGljYXRpb25zOyAoYikgdGhlIFNFVCBGSUxFIFRZUEUgY29tbWFu ZDsKLSAgIChjKSB2YXJpb3VzIGF1dG9tYXRpYyBtZWNoYW5pc21zIGJhc2VkIG9uIGNsaWVudC9z ZXJ2ZXIgbmVnb3RpYXRpb25zLAotICAgZGlyZWN0b3J5IGluZm9ybWF0aW9uIG9yIGZpbGVuYW1l IHBhdHRlcm5zLCBldGMuCi0KLSAgIFRoZSBkZWZhdWx0IEZJTEUgVFlQRSB3YXMgY2hhbmdlZCBm cm9tIFRFWFQgdG8gQklOQVJZIGluIEMtS2VybWl0IDcuMAotICAgYmVjYXVzZToKLQotICAgICAq IFRyYW5zZmVycmluZyBhIHRleHQgZmlsZSBpbiBiaW5hcnkgbW9kZSBkb2VzIGxlc3MgZGFtYWdl IHRoYW4KLSAgICAgICB0cmFuc2ZlcnJpbmcgYSBiaW5hcnkgZmlsZSBpbiB0ZXh0IG1vZGUuCi0g ICAgICogT25seSBiaW5hcnktbW9kZSB0cmFuc2ZlcnMgY2FuIGJlIHJlY292ZXJlZCBmcm9tIHRo ZSBwb2ludCBvZgotICAgICAgIGZhaWx1cmUuCi0gICAgICogVGhlIGF1dG9tYXRpYyB0cmFuc2Zl ci1tb2RlIG1lY2hhbmlzbXMgc3dpdGNoIHRvIHRleHQgbW9kZSBvbiBhCi0gICAgICAgcGVyLWZp bGUgYmFzaXMgYW55d2F5LCBzbyBvbmx5IHRob3NlIGZpbGVzIHRoYXQgYXJlIG5vdCBjb3ZlcmVk IGJ5Ci0gICAgICAgdGhlIGF1dG9tYXRpYyBtZWNoYW5pc21zIGFyZSBhZmZlY3RlZC4KLSAgICAg KiBBbGwgZmlsZSB0cmFuc2ZlcnMgb24gdGhlIFdlYiBhcmUgZG9uZSBpbiBiaW5hcnkgbW9kZSwg c28gcGVvcGxlCi0gICAgICAgYXJlIGFjY3VzdG9tZWQgdG8gaXQgYW5kIGV4cGVjdCBpdC4KLQot NC4wLiBCVUcgRklYRVMsIE1JTk9SIENIQU5HRVMsIEFORCBDTEFSSUZJQ0FUSU9OUwotCi00LjAu MC4gRmlsZW5hbWVzIHdpdGggU3BhY2VzCi0KLSAgIEZpbGVuYW1lcyB0aGF0IGNvbnRhaW4gc3Bh Y2VzIGFyZSBhIG1ham9yIG51aXNhbmNlIHRvIGEgcHJvZ3JhbSBsaWtlCi0gICBLZXJtaXQsIHdo b3NlIGNvbW1hbmQgbGFuZ3VhZ2UgaXMgbGluZS0gYW5kIHdvcmQtb3JpZW50ZWQsIGluIHdoaWNo Ci0gICB3b3JkcyBhcmUgc2VwYXJhdGVkIGJ5IHNwYWNlcyBhbmQgYSBmaWxlbmFtZSBpcyBhc3N1 bWVkIHRvIGJlIGEgIndvcmQiLgotICAgSW4gZ2VuZXJhbCAodW5sZXNzIG5vdGVkIG90aGVyd2lz ZSBpbiB0aGUgZGVzY3JpcHRpb24gb2YgYSBwYXJ0aWN1bGFyCi0gICBjb21tYW5kKSwgdGhlcmUg aXMgb25seSBvbmUgd2F5IHRvIHJlZmVyIHRvIHN1Y2ggZmlsZXMgaW4gS2VybWl0Ci0gICBjb21t YW5kcywgYW5kIHRoYXQgaXMgdG8gZW5jbG9zZSB0aGUgbmFtZSBpbiBicmFjZXM6Ci0KLSAgc2Vu ZCB7dGhpcyBmaWxlfQotCi0gICBUZWxscyBLZXJtaXQgdG8gc2VuZCB0aGUgZmlsZSB3aG9zZSBu YW1lIGlzICJ0aGlzIGZpbGUiICh0d28gd29yZHMsIG5vCi0gICBxdW90ZXMpLiBPZiBjb3Vyc2Us IHZhcmlvdXMgY2lyY3VtbG9jdXRpb25zIGFyZSBhbHNvIHBvc3NpYmxlLCBzdWNoIGFzOgotCi0g IGRlZmluZSBcJWEgdGhpcyBmaWxlCi0gIHNlbmQgXCVhCi0KLSAgIEJVVCwgcGVyaGFwcyBjb250 cmFyeSB0byBleHBlY3RhdGlvbiwgeW91IGNhbid0IHVzZSAiXDMyIiB0byByZXByZXNlbnQKLSAg IHRoZSBzcGFjZToKLQotICBzZW5kIHRoaXNcMzJmaWxlCi0KLSAgIGRvZXMgbm90IHdvcmsuIFdo eT8gQmVjYXVzZSB0aGUgS2VybWl0IHBhcnNlciwgd2hpY2ggbXVzdCB3b3JrIG9uIG1hbnkKLSAg IG9wZXJhdGluZyBzeXN0ZW1zIGluY2x1ZGluZyBXaW5kb3dzLCBoYXMgbm8gd2F5IG9mIGtub3dp bmcgd2hhdCB5b3UKLSAgIG1lYW4gYnkgInRoaXNcMzJmaWxlIi4gRG8geW91IG1lYW4gYSBmaWxl IHdob3NlIG5hbWUgaXMgInRoaXMgZmlsZSIgaW4KLSAgIHRoZSBjdXJyZW50IGRpcmVjdG9yeT8g T3IgZG8geW91IG1lYW4gYSBmaWxlIHdob3NlIG5hbWUgaXMgIjMyZmlsZSIgaW4KLSAgIHRoZSAi dGhpcyIgc3ViZGlyZWN0b3J5IG9mIHRoZSBjdXJyZW50IGRpcmVjdG9yeT8gR3Vlc3Npbmcgd29u J3QgZG8KLSAgIGhlcmU7IEtlcm1pdCBtdXN0IGJlaGF2ZSBjb25zaXN0ZW50bHkgYW5kIGRldGVy bWluaXN0aWNhbGx5IGluIGFsbAotICAgY2FzZXMgb24gYWxsIHBsYXRmb3Jtcy4KLQotICAgTm90 ZSB0aGF0IHlvdSBjYW4ndCB1c2UgRXNjIG9yIFRhYiB3aXRoaW4gey4uLn0gZm9yIGZpbGVuYW1l Ci0gICBjb21wbGV0aW9uLCBvciBxdWVzdGlvbiBtYXJrIHRvIGdldCBhIGZpbGVuYW1lIGxpc3Qu IEhvd2V2ZXIsIHlvdSBjYW4KLSAgIGluY2x1ZGUgd2lsZGNhcmRzOyBmb3IgZXhhbXBsZToKLQot ICBzZW5kIHsqICp9Ci0KLSAgIHNlbmRzIGFsbCBmaWxlcyB3aG9zZSBuYW1lIGNvbnRhaW5zIGEg c3BhY2UuCi0KLSAgIEFsbCB0aGluZ3MgY29uc2lkZXJlZCwgaXQgaXMgYmVzdCB0byBhdm9pZCBz cGFjZXMgaW4gZmlsZSBhbmQgZGlyZWN0b3J5Ci0gICBuYW1lcyBpZiB5b3UgY2FuLiBBbHNvIHNl ZSBbNDM5XVNlY3Rpb24gNS40IG9uIHRoaXMgdG9waWMuCi0KLTQuMC4xLiBQYWNrZXQgb3V0IG9m IFdpbmRvdwotCi0gICBDLUtlcm1pdCA2LjAgY291bGQgc2VuZCBwYWNrZXRzICJvdXQgb2Ygd2lu ZG93IiBpZiB0aGUgd2luZG93IHNpemUgd2FzCi0gICBncmVhdGVyIHRoYW4gMSBhbmQgQUNLcyBo YWQgYXJyaXZlZCBvdXQgb2Ygb3JkZXIuIEZpeGVkIGluIDYuMS4KLQotNC4wLjIuIE1PVkUgYWZ0 ZXIgQUREIFNFTkQtTElTVAotCi0gICBBREQgU0VORC1MSVNUIGZvbGxvd2VkIGJ5IE1PVkUgZGlk IG5vdCBkZWxldGUgb3JpZ2luYWwgZmlsZXM7IGZpeGVkIGluCi0gICA2LjEuIENhcnJpZXIgbG9z cyB3YXMgbm90IGRldGVjdGVkIGR1cmluZyB0cmFuc2ZlcjsgaW4gNy4wIEMtS2VybWl0Ci0gICBj aGVja3MgZm9yIHRoaXMgKGJ1dCByZXN1bHRzIGNhbiBub3QgYmUgZ3VhcmFudGVlZCkuIEluIGFu eSBjYXNlLCB0aGUKLSAgIHByb3RvY29sIHdpbGwgZXZlbnR1YWxseSB0aW1lIG91dCBpZiB0aGUg Y29ubmVjdGlvbiBpcyBsb3N0LgotCi00LjAuMy4gR0VUIGFuZCBSRUNFSVZFIEFzLU5hbWVzCi0K LSAgIEluIDVBKDE5MCkgdGhyb3VnaCA2LjAuMTkyLCB0aGUgR0VUIGFuZCBSRUNFSVZFIGFzLW5h bWUgZGlkIG5vdAotICAgcHJvcGVybHkgb3ZlcnJpZGUgdGhlIFJFQ0VJVkUgUEFUSE5BTUVTIHNl dHRpbmcuIEluIDcuMCBpdCBkb2VzLgotCi00LjAuNC4gTmV3IEJyaWVmIFN0YXRpc3RpY3MgTGlz dGluZwotCi0gICBWZXJzaW9uIDcuMCBhZGRzIGEgL0JSSUVGIHN3aXRjaCB0byB0aGUgU1RBVElT VElDUyBjb21tYW5kLCB0byBkaXNwbGF5Ci0gICBhIHNob3J0IGZpbGUtdHJhbnNmZXIgc3RhdGlz dGljcyByZXBvcnQuIC9CUklFRiBpcyBub3cgdGhlIGRlZmF1bHQuIFVzZQotICAgL1ZFUkJPU0Ug dG8gc2VlIHRoZSBmdWxsIGRpc3BsYXksIHdoaWNoIGlzIGFib3V0IDI1IGxpbmVzIGxvbmcuCi0K LTQuMC41LiBJbXByb3ZlZCBGQVNUIENvbW1hbmQKLQotICAgVGhlIHByZWluc3RhbGxlZCBkZWZp bml0aW9uIG9mIHRoZSBGQVNUIG1hY3JvIGRpZCBub3QgdGFrZSBlbm91Z2gKLSAgIGZhY3RvcnMg aW50byBhY2NvdW50LiBOb3cgaXQgc2V0cyBwYWNrZXQgbGVuZ3RocyBhbmQgd2luZG93IHNpemVz Ci0gICBhcHByb3ByaWF0ZSB0byB0aGUgY29uZmlndXJhdGlvbi4gRnVydGhlcm1vcmUsIGluIElS SVggb25seSwgaXQgbWlnaHQKLSAgIHJlc3RyaWN0IHRoZSBTRU5EIHBhY2tldCBsZW5ndGggdG8g NDAwMCwgdG8gd29yayBhcm91bmQgYSBidWcgaW4gdGhlCi0gICBJUklYIFRlbG5ldCBzZXJ2ZXIs IGRlcGVuZGluZyBvbiB0aGUgSVJJWCB2ZXJzaW9uIChzZWUgWzQ0MF1ja3Vid3IudHh0LAotICAg SVJJWCBzZWN0aW9uKS4gVG8gc2VlIHRoZSBidWlsdC1pbiBkZWZpbml0aW9uIG9mIHRoZSBGQVNU IG1hY3JvLCB0eXBlCi0gICAic2hvdyBtYWNybyBmYXN0Ii4gVG8gY2hhbmdlIGl0LCBzaW1wbHkg ZGVmaW5lIGl0IHRvIGJlIHdoYXRldmVyIHlvdQotICAgd2FudCAtLSBpdCdzIGp1c3QgYSBtYWNy bywgbGlrZSBhbnkgb3RoZXIuCi0KLTQuMC42LiBUaGUgU0VUIFNFTkQgQkFDS1VQIENvbW1hbmQK LQotICAgVmVyc2lvbiA3LjAgYWRkcyBTRVQgU0VORCBCQUNLVVAgeyBPTiwgT0ZGIH0uIFRoaXMg dGVsbHMgd2hldGhlciBiYWNrdXAKLSAgIGZpbGVzIHNob3VsZCBiZSBzZW50LiBCYWNrdXAgZmls ZXMgYXJlIHRoZSBvbmVzIGNyZWF0ZWQgYnkgS2VybWl0IChhbmQKLSAgIEVNQUNTLCBhbmQgcG9z c2libHkgb3RoZXIgYXBwbGljYXRpb25zKSB0byBwcmVzZXJ2ZSBvbGQgY29waWVzIG9mIGZpbGVz Ci0gICB3aGVuIGNyZWF0aW5nIG5ldyBvbmVzIHdpdGggdGhlIHNhbWUgbmFtZS4gS2VybWl0IGRv ZXMgdGhpcyB3aGVuCi0gICByZWNlaXZpbmcgYSBmaWxlIGFuZCBpdHMgRklMRSBDT0xMSVNJT04g c2V0dGluZyBpcyBCQUNLVVAgKG9yIFJFTkFNRSwKLSAgIGluIHdoaWNoIGNhc2UgaXQgdGhlIG5l dyBmaWxlIGdldHMgdGhlIGJhY2t1cCBuYW1lKS4gT24gbW9zdCBwbGF0Zm9ybXMsCi0gICB0aGUg YmFja3VwIG5hbWUgaXMgZm9ybWVkIGJ5IGFkZGluZzoKLQotICAufm5+Ci0KLSAgIHRvIHRoZSBl bmQgb2YgdGhlIGZpbGVuYW1lLCB3aGVyZSAibiIgaXMgYSBudW1iZXIuIEZvciBleGFtcGxlLCBp ZiB0aGUKLSAgIG9yaWdpbmFsIGZpbGUgaXMgb29mYS50eHQsIGEgYmFja3VwIGZpbGUgbWlnaHQg YmUgY2FsbGVkOgotCi0gIG9vZmEudHh0Ln4xfgotCi0gICAob3Igb29mYS50eHQufjJ+LCBldGMp LiBJZiB5b3UgU0VUIFNFTkQgQkFDS1VQIE9GRiwgdGhpcyB0ZWxscyBLZXJtaXQKLSAgIG5vdCB0 byBzZW5kIGZpbGVzIHRoYXQgaGF2ZSBiYWNrdXAgbmFtZXMuIE5vcm1hbGx5LCBTRVQgU0VORCBC QUNLVVAgaXMKLSAgIE9OIChhcyBzaG93biBieSBTSE9XIFBST1RPQ09MKSwgYW5kIGJhY2t1cCBm aWxlcyBhcmUgc2VudCBpZiB0aGVpcgotICAgbmFtZXMgbWF0Y2ggdGhlIFNFTkQgZmlsZSBzcGVj aWZpY2F0aW9uLgotCi0gICBBbHNvIHNlZSBQVVJHRSwgU0VUIEZJTEUgQ09MTElTSU9OLCBTRU5E IC9OT0JBQ0tVUCwgRElSRUNUT1JZCi0gICAvW05PXUJBQ0tVUC4KLQotNC4wLjcuIFRoZSBTRVQg eyBTRU5ELCBSRUNFSVZFIH0gVkVSU0lPTi1OVU1CRVJTIENvbW1hbmQKLQotICAgVk1TIE9ubHku IE5vcm1hbGx5IHdoZW4gc2VuZGluZyBmaWxlcywgVk1TIEMtS2VybWl0IHN0cmlwcyB0aGUgdmVy c2lvbgotICAgbnVtYmVyLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGZpbGUgaXMgRk9PLkJBUjszNCwg dGhlIG5hbWUgaXMgc2VudCBhcwotICAgRk9PLkJBUiAod2l0aG91dCB0aGUgIjszNCIpLiBJZiB5 b3Ugd2FudCB0byBrZWVwIHZlcnNpb24gbnVtYmVycyBvbgotICAgd2hlbiBzZW5kaW5nIGZpbGVz LCB1c2UgU0VUIFNFTkQgVkVSU0lPTi1OVU1CRVJTIE9OLiBUaGUgZWZmZWN0IGRlcGVuZHMKLSAg IG9uIHRoZSByZWNlaXZlci4KLQotICAgTm9ybWFsbHkgd2hlbiByZWNlaXZpbmcgZmlsZXMsIGFu ZCBhbiBpbmNvbWluZyBmaWxlbmFtZSBpbmNsdWRlcyBhCi0gICBWTVMtc3R5bGUgdmVyc2lvbiBu dW1iZXIgKHN1Y2ggYXMgRk9PLkJBUjszNCkgVk1TIEMtS2VybWl0IHN0cmlwcyBpdAotICAgYmVm b3JlIHRyeWluZyB0byBjcmVhdGUgdGhlIG5ldyBmaWxlOyB0aGlzIHdheSB0aGUgbmV3IGZpbGUg cmVjZWl2ZXMKLSAgIHRoZSBuZXh0IGhpZ2hlc3QgdmVyc2lvbiBudW1iZXIgaW4gdGhlIGN1c3Rv bWFyeSBtYW5uZXIgZm9yIFZNUy4gSWYgeW91Ci0gICB3YW50IHZlcnNpb24gbnVtYmVycyBvbiBp bmNvbWluZyBmaWxlbmFtZXMgdG8gYmUgdXNlZCBpbiBjcmVhdGluZyB0aGUKLSAgIG5ldyBmaWxl cywgdXNlIFNFVCBSRUNFSVZFIFZFUlNJT04tTlVNQkVSUyBPTi4KLQotICAgTm9ybWFsbHkgdGhl c2UgY29tbWFuZHMgd291bGQgYmUgZWZmZWN0aXZlIG9ubHkgd2hlbiBWTVMgQy1LZXJtaXQgaXMK LSAgIGV4Y2hhbmdpbmcgZmlsZXMgd2l0aCBhIG5vbi1WTVMgS2VybWl0IHByb2dyYW0sIHNpbmNl IFZNUy10by1WTVMKLSAgIHRyYW5zZmVycyB1c2UgbGFiZWxlZCBtb2RlIHVubGVzcyB5b3UgaGF2 ZSBnb25lIG91dCBvZiB5b3VyIHdheSB0bwotICAgZGVmZWF0IGl0LgotCi0gICBFeGFtcGxlOiBZ b3Ugd2FudCB0byBzZW5kIGFsbCB2ZXJzaW9ucyBvZiBhbGwgZmlsZXMgaW4gdGhlIGN1cnJlbnQK LSAgIGRpcmVjdG9yeSBmcm9tIGEgVk1TIEMtS2VybWl0IGNsaWVudCB0byBhIFVOSVggQy1LZXJt aXQgc2VydmVyLiBVc2U6Ci0KLSAgc2V0IHNlbmQgdmVyc2lvbi1udW1iZXJzIG9uCi0gIHNlbmQg Ki4qOyoKLQotICAgVGhlIHJlc3VsdGluZyBVbml4IGZpbGVzIHdpbGwgaGF2ZSBWTVMtc3R5bGUg dmVyc2lvbiBudW1iZXJzIGFzIHBhcnQgb2YKLSAgIHRoZWlyIG5hbWUsIGZvciBleGFtcGxlICJm b28uYmFyOzEiLCAiZm9vLmJhcjsyIiwgZXRjLgotCi0gICBOb3cgc3VwcG9zZSB5b3Ugd2FudCB0 byBzZW5kIHRoZXNlIGZpbGVzIGZyb20gVW5peCB0byBhbm90aGVyIFZNUwotICAgc3lzdGVtIGFu ZCBwcmVzZXJ2ZSB0aGUgdmVyc2lvbiBudW1iZXJzLiBBZ2FpbiB3ZSBoYXZlIGEgVW5peCBDLUtl cm1pdAotICAgc2VydmVyIGFuZCBWTVMgQy1LZXJtaXQgY2xpZW50LiBHaXZlIHRoZXNlIGNvbW1h bmRzIHRvIHRoZSBjbGllbnQ6Ci0KLSAgc2V0IHJlY2VpdmUgdmVyc2lvbi1udW1iZXJzIG9uCi0g IGdldCAqCi0KLTQuMC44LiBUaGUgU0VUIHsgU0VORCwgUkVDRUlWRSB9IHsgTU9WRS1UTywgUkVO QU1FLVRPIH0gQ29tbWFuZHMKLQotICAgVGhlc2UgY29tbWFuZHMgYXJlIHBlcnNpc3RlbnQgZ2xv YmFsIHZlcnNpb25zIG9mIHRoZSAvTU9WRS1UTzogYW5kCi0gICAvUkVOQU1FLVRPOiBzd2l0Y2hl cyBvZiB0aGUgU0VORCwgR0VULCBhbmQgUkVDRUlWRSBjb21tYW5kcy4gVGhleQotICAgc2hvdWxk IG5vcm1hbGx5IGJlIHVzZWQgb25seSB3aGVuIHNldHRpbmcgdXAgYSBkZWRpY2F0ZWQKLSAgIHRy YW5zYWN0aW9uLXByb2Nlc3NpbmcgYXBwbGljYXRpb24sIGluIHdoaWNoIGVhY2ggZmlsZSBpcyB0 byBiZSBtb3ZlZAotICAgb3IgcmVuYW1lZCBpbW1lZGlhdGVseSBhZnRlciwgYW5kIG9ubHkgaWYs IGl0IGlzIHRyYW5zZmVycmVkCi0gICBzdWNjZXNzZnVsbHksIHNvIHRoYXQgKGZvciBleGFtcGxl KSBhbiBpbmRlcGVuZGVudCwgY29uY3VycmVudCBwcm9jZXNzCi0gICBjYW4gbm90aWNlIHdoZW4g bmV3IGZpbGVzIGFwcGVhciBhbmQgcHJvY2VzcyB0aGVtIGltbWVkaWF0ZWx5IHdpdGhvdXQKLSAg IGhhdmluZyB0byBndWVzcyB3aGV0aGVyIHRoZXkgYXJlIGNvbXBsZXRlLgotCi00LjAuOS4gU0VU IEZJTEUgSU5DT01QTEVURSBBVVRPCi0KLSAgIFNFVCBGSUxFIElOQ09NUExFVEUgeyBLRUVQLCBE SVNDQVJEIH0sIHdoaWNoIHRlbGxzIHdoZXRoZXIgdG8ga2VlcCBvcgotICAgZGlzY2FyZCBpbmNv bXBsZXRlbHkgcmVjZWl2ZWQgZmlsZXMsIGhhcyBhIG5ldyBvcHRpb24sIEFVVE8sIHdoaWNoIGlz Ci0gICBhbHNvIHRoZSBkZWZhdWx0LiBJdCBtZWFucyBLRUVQIHRoZSBpbmNvbXBsZXRlIGZpbGUg aWYgdGhlIHRyYW5zZmVyIGlzCi0gICBpbiBiaW5hcnkgbW9kZSwgb3RoZXJ3aXNlIERJU0NBUkQg aXQuIFRoaXMgcmVkdWNlcyB0aGUgY2hhbmNlcyB0aGF0IGEKLSAgIHN1YnNlcXVlbnQgcmVjb3Zl cnkgb3BlcmF0aW9uIChSRVNFTkQsIFJFR0VULCBldGMpIGNvdWxkIHByb2R1Y2UgYQotICAgY29y cnVwdCBmaWxlLCBzaW5jZSByZWNvdmVyeSB3b3JrcyBvbmx5IGZvciBiaW5hcnktbW9kZSB0cmFu c2ZlcnMuCi0KLTQuMS4gRklMRS1UUkFOU0ZFUiBGSUxFTkFNRSBURU1QTEFURVMKLQotICAgRmls ZS10cmFuc2ZlciBmaWxlbmFtZSB0ZW1wbGF0ZXMgYWxsb3cgZmlsZXMgdG8gYmUgcmVuYW1lZAot ICAgYXV0b21hdGljYWxseSBieSB0aGUgZmlsZSBzZW5kZXIsIHRoZSByZWNlaXZlciwgb3IgYm90 aCwgZHVyaW5nCi0gICB0cmFuc2ZlciBvZiBncm91cHMgb2YgZmlsZXMuCi0KLTQuMS4xLiBUZW1w bGF0ZXMgaW4gdGhlIEFzLU5hbWUKLQotICAgUHJpb3IgdG8gQy1LZXJtaXQgNi4xIGFuZCBLZXJt aXQgOTUgMS4xLjEyIHRoZSBvbmx5IG9wdGlvbnMgdGhhdCBjb3VsZAotICAgYmUgdXNlZCB0byBh ZmZlY3QgdGhlIG5hbWVzIG9mIGZpbGVzIGJlaW5nIHRyYW5zZmVycmVkIHdlcmUgU0VUCi0gICBG SUxFTkFNRVMgeyBMSVRFUkFMLCBDT05WRVJURUQgfSBhbmQgU0VUIHsgU0VORCwgUkVDRUlWRSB9 IFBBVEhOQU1FUyB7Ci0gICBPTiwgT0ZGIH0sIHBsdXMgdGhlICJhcy1uYW1lIiBmZWF0dXJlIG9m IHRoZSBTRU5EIChNT1ZFLCBldGMpIGFuZAotICAgUkVDRUlWRSBjb21tYW5kcy4KLQotICAgUHJl dmlvdXNseSwgdGhlIGFzLW5hbWUgY291bGQgYmUgdXNlZCBvbmx5IGZvciBhIHNpbmdsZSBmaWxl LiBGb3IKLSAgIGV4YW1wbGU6Ci0KLSAgU0VORCBGT08gQkFSCi0KLSAgIHdvdWxkIHNlbmQgdGhl IGZpbGUgRk9PIHVuZGVyIHRoZSBuYW1lIEJBUiwgYnV0OgotCi0gIFNFTkQgKi5UWFQgYW55dGhp bmcKLQotICAgd2FzIG5vdCBhbGxvd2VkLCBzaW5jZSBpdCB3b3VsZCBnaXZlIHRoZSBzYW1lIG5h bWUgdG8gZWFjaCBmaWxlIHRoYXQKLSAgIHdhcyBzZW50LiBXaGVuIHJlY2VpdmluZzoKLQotICBS RUNFSVZFIEZPTwotCi0gICB3b3VsZCByZW5hbWUgdGhlIGZpcnN0IGluY29taW5nIGZpbGUgdG8g Rk9PIGJlZm9yZSBzdG9yaW5nIGl0IG9uIHRoZQotICAgZGlzaywgYnV0IHN1YnNlcXVlbnQgZmls ZXMgd291bGQgbm90IGJlIHJlbmFtZWQgdG8gRk9PLCBzaW5jZSB0aGlzCi0gICB3b3VsZCByZXN1 bHQgaW4gb3ZlcndyaXRpbmcgdGhlIHNhbWUgZmlsZSByZXBlYXRlZGx5LiBJbnN0ZWFkLCB0aGV5 Ci0gICB3ZXJlIHN0b3JlZCB1bmRlciB0aGUgbmFtZXMgdGhleSBhcnJpdmVkIHdpdGguCi0KLSAg IEJlZ2lubmluZyBpbiBDLUtlcm1pdCA2LjEgYW5kIEtlcm1pdCA5NSAxLjEuMTIsIGl0IGlzIHBv c3NpYmxlIHRvCi0gICBzcGVjaWZ5IGFzLW5hbWVzIGluIFNFTkQsIFJFQ0VJVkUsIGFuZCByZWxh dGVkIGNvbW1hbmRzIGV2ZW4gZm9yIGZpbGUKLSAgIGdyb3Vwcy4gVGhpcyBpcyBhY2NvbXBsaXNo ZWQgYnkgdXNpbmcgcmVwbGFjZW1lbnQgdmFyaWFibGVzIGluIHRoZQotICAgYXMtbmFtZSwgYWxv bmcgd2l0aCBvcHRpb25hbCBtYXRlcmlhbCBzdWNoIGNoYXJhY3Rlci1zdHJpbmcgZnVuY3Rpb25z Ci0gICBhbmQvb3IgY29uc3RhbnQgc3RyaW5ncy4gQW4gYXMtbmFtZSBjb250YWluaW5nIHJlcGxh Y2VtZW50IHZhcmlhYmxlcyBpcwotICAgY2FsbGVkIGEgZmlsZW5hbWUgdGVtcGxhdGUuCi0KLSAg IFRoZSBrZXkgdG8gZmlsZW5hbWUgdGVtcGxhdGVzIGlzIHRoZSBuZXcgdmFyaWFibGU6Ci0KLSAg XHYoZmlsZW5hbWUpCi0KLSAgIER1cmluZyBmaWxlIHRyYW5zZmVyIGl0IGlzIHJlcGxhY2VkIGJ5 IHRoZSBuYW1lIG9mIGVhY2ggZmlsZSBjdXJyZW50bHkKLSAgIGJlaW5nIHRyYW5zZmVycmVkIChh ZnRlciB0cmFuc2ZlciwgaXQgaXMgdGhlIG5hbWUgb2YgdGhlIGxhc3QgZmlsZQotICAgdHJhbnNm ZXJyZWQpLgotCi0gICBTbywgZm9yIGV4YW1wbGU6Ci0KLSAgc2VuZCAqLnR4dCBcdihmaWxlbmFt ZSkubmV3Ci0KLSAgIHNlbmRzIGVhY2ggZmlsZSB3aXRoIGl0cyBvd24gbmFtZSwgYnV0IHdpdGgg Ii5uZXciIGFwcGVuZGVkIHRvIGl0LiBPZgotICAgY291cnNlIGlmIHRoZSBuYW1lIGFscmVhZHkg Y29udGFpbnMgcGVyaW9kcywgdGhpcyBjb3VsZCBjb25mdXNlIHRoZQotICAgZmlsZSByZWNlaXZl ciwgc28geW91IGNhbiBhbHNvIGFjaGlldmUgZmFuY2llciBlZmZlY3RzIHdpdGgKLSAgIGNvbnN0 cnVjdGlvbnMgbGlrZToKLQotICBzZW5kICoudHh0IFxmcmVwbGFjZShcdihmaWxlbmFtZSksLixf KS5uZXcKLQotICAgd2hpY2ggcmVwbGFjZXMgYWxsIHBlcmlvZHMgaW4gdGhlIG9yaWdpbmFsIGZp bGVuYW1lIGJ5IHVuZGVyc2NvcmVzLCBhbmQKLSAgIHRoZW4gYXBwZW5kcyAiLm5ldyIgdG8gdGhl IHJlc3VsdC4gU28sIGZvciBleGFtcGxlLCBvb2ZhLnR4dCB3b3VsZCBiZQotICAgc2VudCBhcyBv b2ZhX3R4dC5uZXcuCi0KLSAgIEFub3RoZXIgbmV3IHZhcmlhYmxlIHRoYXQgaXMgdXNlZnVsIGlu IHRoaXMgcmVnYXJkIGlzIFx2KGZpbGVudW1iZXIpLAotICAgd2hpY2ggaXMgdGhlIG9yZGluYWwg bnVtYmVyIG9mIHRoZSBjdXJyZW50IGZpbGUgaW4gdGhlIGZpbGUgZ3JvdXAsIHNvCi0gICB5b3Ug Y2FuIGFsc286Ci0KLSAgc2VuZCAqLnR4dCBGSUxFXGZscGFkKFx2KGZpbGVudW0pLDIsMCkKLQot ICAgcmVzdWx0aW5nIGluIGEgc2VyaWVzIG9mIGZpbGVzIGNhbGxlZCBGSUxFMDAsIEZJTEUwMSwg RklMRTAyLCBldGMuIChBdAotICAgdGhlIGVuZCBvZiB0aGUgdHJhbnNmZXIsIFx2KGZpbGVudW0p IHRlbGxzIHRoZSBudW1iZXIgb2YgZmlsZXMgdGhhdAotICAgd2VyZSB0cmFuc2ZlcnJlZCkuCi0K LSAgIElmIHlvdSBzcGVjaWZ5IGEgY29uc3RhbnQgYXMtbmFtZSB3aGVuIHNlbmRpbmcgYSBmaWxl IGdyb3VwOgotCi0gIHNlbmQgKi50eHQgdGhpc25hbWVvbmx5Ci0KLSAgIEtlcm1pdCBjb21wbGFp bnMgYW5kIGFza3MgeW91IHRvIGluY2x1ZGUgcmVwbGFjZW1lbnQgdmFyaWFibGVzIGluIHRoZQot ICAgYXMtbmFtZS4gWW91IHNob3VsZCBnZW5lcmFsbHkgdXNlIFx2KGZpbGVuYW1lKSBvciBcdihm aWxlbnVtYmVyKSBmb3IKLSAgIHRoaXMgcHVycG9zZSwgc2luY2Ugb3RoZXIgdmFyaWFibGVzICh3 aXRoIHRoZSBwb3NzaWJsZSBleGNlcHRpb24gb2YKLSAgIGRhdGUvdGltZSByZWxhdGVkIHZhcmlh YmxlcykgZG8gbm90IGNoYW5nZSBmcm9tIG9uZSBmaWxlIHRvIHRoZSBuZXh0LgotICAgQnV0IEtl cm1pdCBhY2NlcHRzIGFueSBhcy1uYW1lIGF0IGFsbCB0aGF0IGNvbnRhaW5zIGFueSBraW5kIG9m Ci0gICB2YXJpYWJsZXMgZm9yIGZpbGUgZ3JvdXAsIGV2ZW4gaWYgdGhlIHZhcmlhYmxlIHdpbGwg bm90IGNoYW5nZS4gU286Ci0KLSAgc2VuZCAqLnR4dCBcJWEKLQotICAgaXMgYWNjZXB0ZWQsIGJ1 dCBhbGwgZmlsZXMgYXJlIHNlbnQgd2l0aCB0aGUgc2FtZSBuYW1lICh0aGUgdmFsdWUgb2YKLSAg IFwlYSwgaWYgaXQgaGFzIG9uZSBhbmQgaXQgaXMgY29uc3RhbnQpLiBJZiB0aGUgdmFyaWFibGUg aGFzIG5vIHZhbHVlIGF0Ci0gICBhbGwsIHRoZSBmaWxlcyBhcmUgc2VudCB1bmRlciB0aGVpciBv d24gbmFtZXMuCi0KLSAgIE9mIGNvdXJzZSwgdGhlIHZhbHVlIG9mIFwlYSBpbiB0aGUgcHJldmlv dXMgZXhhbXBsZSBuZWVkIG5vdCBiZQotICAgY29uc3RhbnQ6Ci0KLSAgZGVmaW5lIFwlYSBGSUxF XGZscGFkKFx2KGZpbGVudW0pLDIsMClfYXRfXHYodGltZSkKLSAgc2VuZCAqLnR4dCBcJWEKLQot ICAgVGhlIFJFQ0VJVkUgY29tbWFuZCwgd2hlbiBnaXZlbiB3aXRob3V0IGFuIGFzLW5hbWUsIGJl aGF2ZXMgYXMgYWx3YXlzLAotICAgc3RvcmluZyBhbGwgaW5jb21pbmcgZmlsZXMgdW5kZXIgdGhl IG5hbWVzIHRoZXkgYXJyaXZlIHdpdGgsIHN1YmplY3QgdG8KLSAgIFNFVCBGSUxFIE5BTUUgYW5k IFNFVCBSRUNFSVZFIFBBVEhOQU1FUyBtb2RpZmljYXRpb25zIChbNDQxXVNlY3Rpb24KLSAgIDQu MTApLgotCi0gICBIb3dldmVyLCB3aGVuIGFuIGFzLW5hbWUgaXMgZ2l2ZW4gaW4gdGhlIFJFQ0VJ VkUgY29tbWFuZCwgaXQgaXMgYXBwbGllZAotICAgdG8gYWxsIGluY29taW5nIGZpbGVzIHJhdGhl ciB0aGFuIHRvIGp1c3QgdGhlIGZpcnN0LiBJZiBpdCBkb2VzIG5vdAotICAgY29udGFpbiByZXBs YWNlbWVudCB2YXJpYWJsZXMsIHRoZW4gdGhlIGN1cnJlbnQgRklMRSBDT0xMSVNJT04gc2V0dGlu ZwotICAgZ292ZXJucyB0aGUgcmVzdWx0LiBGb3IgZXhhbXBsZToKLQotICByZWNlaXZlIGZvbwot Ci0gICB3aWxsIHJlc3VsdCBpbiBpbmNvbWluZyBmaWxlcyBuYW1lZCBmb28sIGZvby5+MX4sIGZv by5+Mn4sIGFuZCBzbyBvbiwKLSAgIHdpdGggdGhlIGRlZmF1bHQgRklMRSBDT0xMSVNJT04gc2V0 dGluZyBvZiBCQUNLVVAuIElmIGl0IGRvZXMgY29udGFpbgotICAgcmVwbGFjZW1lbnQgdmFyaWFi bGVzLCBvZiBjb3Vyc2UgdGhleSBhcmUgdXNlZC4KLQotICAgV2hlbiByZWNlaXZpbmcgZmlsZXMs IHRoZSBcdihmaWxlbmFtZSkgdmFyaWFibGUgcmVmZXJzIHRvIHRoZSBuYW1lIHRoYXQKLSAgIHdh cyByZWNlaXZlZCBpbiB0aGUgaW5jb21pbmcgZmlsZS1oZWFkZXIgcGFja2V0LCBCRUZPUkUgYW55 IHByb2Nlc3NpbmcKLSAgIGJ5IFNFVCBGSUxFIE5BTUVTIG9yIFNFVCBSRUNFSVZFIFBBVEhOQU1F Uy4gU2luY2UgdGhlIGZpbGVuYW1lcyBpbgotICAgZmlsZS1oZWFkZXIgcGFja2V0cyBhcmUgdXN1 YWxseSBpbiB1cHBlcmNhc2UsIHlvdSB3b3VsZCBuZWVkIHRvIGNvbnZlcnQKLSAgIHRoZW0gZXhw bGljaXRseSBpZiB5b3Ugd2FudCB0aGVtIGluIGxvd2VyY2FzZSwgZS5nLjoKLQotICByZWNlaXZl IFxmbG93ZXIoXHYoZmlsZW5hbWUpKS5uZXcKLQotNC4xLjIuIFRlbXBsYXRlcyBvbiB0aGUgQ29t bWFuZCBMaW5lCi0KLSAgIE9uIHRoZSBjb21tYW5kLWxpbmUsIHVzZSB0ZW1wbGF0ZXMgYXMgc2hv d24gYWJvdmUgYXMgdGhlIC1hIG9wdGlvbgotICAgYXJndW1lbnQsIGJlYXJpbmcgaW4gbWluZCB0 aGUgcHJvcGVuc2l0eSBvZiBVTklYIGFuZCBwZXJoYXBzIG90aGVyCi0gICBzaGVsbHMgdG8gdHJl YXQgYmFja3NsYXNoIGFzIGEgc2hlbGwgZXNjYXBlIGNoYXJhY3Rlci4gU28gaW4gVU5JWCAoZm9y Ci0gICBleGFtcGxlKToKLQotICBrZXJtaXQgLXMgb29mYS4qIC1hIHguXFx2KGZpbGVudW0pCi0K LSAgIEJ5IHRoZSB3YXksIHRoaXMgcmVwcmVzZW50cyBhIGNoYW5nZSBmcm9tIDYuMCBhbmQgZWFy bGllciByZWxlYXNlcyBpbgotICAgd2hpY2ggdGhlIGFzLW5hbWUgKC1hIGFyZ3VtZW50IG9yIG90 aGVyd2lzZSkgd2FzIG5vdCBldmFsdWF0ZWQgYnkgdGhlCi0gICBjb21tYW5kIHBhcnNlci4gVGh1 cywgZm9yIGV4YW1wbGUsIGluIFZNUyAod2hlcmUgdGhlIHNoZWxsIGRvZXMgbm90Ci0gICBjYXJl IGFib3V0IGJhY2tzbGFzaGVzKSwgaXQgd2FzIHBvc3NpYmxlIHRvOgotCi0gIGtlcm1pdCAtcyBv b2ZhLnR4dCAtYSBjOlx0bXBcb29mYS50eHQKLQotICAgTm93IGJhY2tzbGFzaGVzIGluIHRoZSBh cy1uYW1lIG11c3QgYmUgcXVvdGVkIG5vdCBvbmx5IGZvciB0aGUgc2hlbGwKLSAgIChpZiBuZWNl c3NhcnkpIGJ1dCBhbHNvIGZvciBLZXJtaXQgaXRzZWxmOgotCi0gIGtlcm1pdCAtcyBvb2ZhLnR4 dCAtYSBjOlxcdG1wXFxvb2ZhLnR4dCAgICAgIDsgS2VybWl0IG9ubHkKLSAga2VybWl0IC1zIG9v ZmEudHh0IC1hIGM6XFxcXHRtcFxcXFxvb2ZhLnR4dCAgOyBTaGVsbCBhbmQgS2VybWl0Ci0KLSAg IFlvdSBjYW4gYWxzbyB1c2UgdGhlIFxmbGl0ZXJhbCgpIGZ1bmN0aW9uIGZvciB0aGlzOgotCi0g IGtlcm1pdCAtcyBvb2ZhLnR4dCAtYSBcZmxpdGVyYWwoYzpcdG1wXG9vZmEudHh0KSAgICAgIDsg S2VybWl0IG9ubHkKLSAga2VybWl0IC1zIG9vZmEudHh0IC1hIFxcZmxpdGVyYWwoYzpcXHRtcFxc b29mYS50eHQpICAgOyBTaGVsbCBhbmQgS2VybWl0Ci0KLTQuMS4zLiBQb3N0LVRyYW5zZmVyIFJl bmFtaW5nCi0KLSAgIEZpbGVuYW1lIHRlbXBsYXRlcyBhcmUgbm93IGFsc28gdXNlZnVsIGluIFNF VCB7IFNFTkQsIFJFQ0VJVkUgfQotICAgUkVOQU1FLVRPIGFuZCBpbiB0aGUgL1JFTkFNRS1UTzog c3dpdGNoLCB0aGF0IGNhbiBiZSBnaXZlbiB0byB0aGUgU0VORCwKLSAgIEdFVCwgb3IgUkVDRUlW RSBjb21tYW5kczsgdGhpcyBpcyBzaW1pbGFyIHRvIGFuIGFzLW5hbWUsIGJ1dCBpcwotICAgZWZm ZWN0aXZlIG9uIGEgcGVyLWZpbGUgYmFzaXMgaWYgYW5kIG9ubHkgaWYgdGhlIGZpbGUgd2FzIHRy YW5zZmVycmVkCi0gICBzdWNjZXNzZnVsbHkuCi0KLSAgIE1PVkUtVE8gYW5kIFJFTkFNRS1UTyBh ZGRyZXNzIGEgcmVxdWlyZW1lbnQgY29tbW9ubHkgc3RhdGVkIGZvcgotICAgdHJhbnNhY3Rpb24g cHJvY2Vzc2luZyBhbmQgc2ltaWxhciBzeXN0ZW1zLiBTdXBwb3NlLCBmb3IgZXhhbXBsZSwgYQot ICAgY2VudHJhbCBzeXN0ZW0gIlgiIGFjY2VwdHMgY29ubmVjdGlvbnMgZnJvbSBtdWx0aXBsZSBj bGllbnRzCi0gICBzaW11bHRhbmVvdXNseTsgYSBwcm9jZXNzIG9uIFggd2FpdHMgZm9yIGEgZmls ZSB0byBhcHBlYXIgYW5kIHRoZW4KLSAgIHByb2Nlc3NlcyB0aGUgZmlsZS4gVGhpcyBwcm9jZXNz IG11c3QgaGF2ZSBhIHdheSBvZiBrbm93aW5nIHdoZW4gdGhlCi0gICBmaWxlIGhhcyBiZWVuIGNv bXBsZXRlbHkgYW5kIHN1Y2Nlc3NmdWxseSB0cmFuc2ZlcnJlZCBiZWZvcmUgaXQgc3RhcnRzCi0g ICB0byBwcm9jZXNzIGl0LiBUaGlzIGNhbiBiZSBhY2NvbXBsaXNoZWQgZWFzaWx5IHVzaW5nIEMt S2VybWl0J3MgU0VUIHsKLSAgIFNFTkQsIFJFQ0VJVkUgfSB7IE1PVkUtVE8sIFJFTkFNRS1UTyB9 IGNvbW1hbmQgb3IgL01PVkUtVE86IG9yCi0gICAvUkVOQU1FLVRPOiBzd2l0Y2hlcywgZGVzY3Jp YmVkIGluIFs0NDJdU2VjdGlvbnMgNC43LjEgdGhyb3VnaAotICAgWzQ0M100LjcuMy4KLQotICAg SGVyZSdzIGFuIGV4YW1wbGUgZm9yIHRoZSBjbGllbnQgc2lkZSwgaW4gd2hpY2ggZmlsZXMgdG8g YmUgc2VudCBhcmUKLSAgIHBsYWNlZCBpbiBhIGNlcnRhaW4gZGlyZWN0b3J5ICgvdXNyL29sZ2Ev dG9zZW5kIGluIHRoaXMgZXhhbXBsZSkgYnkKLSAgIGFub3RoZXIgcHJvY2VzcyB3aGVuIHRoZXkg YXJlIHJlYWR5IHRvIGdvLiBUaGlzIG1pZ2h0IGJlIGluIGEgaG9zcGl0YWwKLSAgIG9yIGJpZyBk b2N0b3IncyBvZmZpY2UsIHdoZXJlIG1lZGljYWwgaW5zdXJhbmNlIGNsYWltcyBhcmUgZW50ZXJl ZCBhdCBhCi0gICBudW1iZXIgb2Ygd29ya3N0YXRpb25zLCBhbmQgdGhlbiBkZXBvc2l0ZWQgaW4g dGhlICJ0b3NlbmQiIGRpcmVjdG9yeSwKLSAgIGZyb20gd2hpY2ggdGhleSBhcmUgc2VudCB0byBh IGNsYWltcyBjbGVhcmluZ2hvdXNlLiBXZSBhc3N1bWUgdGhlCi0gICBjb25uZWN0aW9uIGlzIGFs cmVhZHkgbWFkZSBhbmQgYSBLZXJtaXQgc2VydmVyIGlzIG9uIHRoZSBvdGhlciBlbmQuCi0KLSAg bG9jYWwgc3JjZGlyIGZpbmRpciAgICAgICAgICAgICAgOyBEZWNsYXJlIGxvY2FsIChhdXRvbWF0 aWMpIHZhcmlhYmxlcwotICBhc3NpZ24gc3JjZGlyIC91c3Ivb2xnYS90b3NlbmQgICA7IExvY2Fs IHNvdXJjZSBkaXJlY3RvcnkgKGZpbGVzIHRvIHNlbmQpCi0gIGFzc2lnbiBmaW5kaXIgL3Vzci9v bGdhL3NlbnQgICAgIDsgV2hlcmUgdG8gbW92ZSBmaWxlcyBhZnRlciB0aGV5IGFyZSBzZW50Ci0g IGxvZyB0cmFuc2FjdGlvbnMgICAgICAgICAgICAgICAgIDsgS2VlcCBhIGxvZyBvZiB0cmFuc2Zl cnMKLSAgY2QgXG0oc3JjZGlyKSAgICAgICAgICAgICAgICAgICAgOyBDaGFuZ2UgdG8gdGhlIHNv dXJjZSBkaXJlY3RvcnkKLSAgd2hpbGUgdHJ1ZSB7ICAgICAgICAgICAgICAgICAgICAgOyBMb29w IGZvcmV2ZXIuLi4KLSAgICAgIHNlbmQgL21vdmUtdG86XG0oZmluZGlyKSAqICAgOyBTZW5kIGFs bCBmaWxlcwotICAgICAgc2xlZXAgNjAgICAgICAgICAgICAgICAgICAgICA7IFNsZWVwIGEgbWlu dXRlCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgR28gYmFjayBhbmQgZG8g aXQgYWdhaW4KLQotICAgTm90ZSBob3cgc2ltcGxlIHRoaXMgaXMuIE9uY2UgZWFjaCBmaWxlIGlz IHNlbnQsIGl0IGlzIG1vdmVkIHNvIGl0Ci0gICB3b24ndCBiZSBzZW50IGFnYWluICh5b3UgY291 bGQgYWxzbyB1c2UgU0VORCAvUkVOQU1FLVRPOiBvciBldmVuIFNFTkQKLSAgIC9ERUxFVEUpLiBJ ZiBhIHRyYW5zZmVyIGZhaWxzLCB0aGUgZmlsZSBpcyBub3QgbW92ZWQgYW5kIHNvIHdlIHRyeQot ICAgYWdhaW4gdG8gc2VuZCBpdCBuZXh0IHRpbWUgYXJvdW5kLiBJZiB0aGVyZSBhcmUgbm8gZmls ZXMgdG8gc2VuZCwgdGhlCi0gICBTRU5EIGNvbW1hbmQgZG9lcyBub3RoaW5nIGJ1dCBhIG1lc3Nh Z2UgaXMgcHJpbnRlZDsgeW91IGNhbiBhdm9pZCB0aGUKLSAgIG1lc3NhZ2UgYnkgY2hlY2tpbmcg Zmlyc3QgdG8gc2VlIGlmIGFueSBmaWxlcyBhcmUgaW4gdGhlIGRpcmVjdG9yeToKLQotICB3aGls ZSB0cnVlIHsgICAgICAgICAgICAgICAgICAgICA7IExvb3AgZm9yZXZlci4uLgotICAgICAgaWYg PiBcZmZpbGVzKCopIDAgLSAgICAgICAgICA7IElmIHRoZXJlIGFyZSBhbnkgZmlsZXMKLSAgICAg ICAgc2VuZCAvbW92ZS10bzpcbShmaW5kaXIpICogOyBzZW5kIHRoZW0uCi0gICAgICBzbGVlcCA2 MCAgICAgICAgICAgICAgICAgICAgIDsgU2xlZXAgYSBtaW51dGUuCi0gIH0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsgR28gYmFjayBhbmQgZG8gaXQgYWdhaW4uCi0KLSAgIEl0J3Mg ZXZlbiBzaW1wbGVyIG9uIHRoZSBzZXJ2ZXIgc2lkZSAoaGVyZSBhZ2FpbiB3ZSBhc3N1bWUgdGhl Ci0gICBjb25uZWN0aW9uIGlzIGFscmVhZHkgaW4gcGxhY2UpOgotCi0gIGxvY2FsIHJjdmRpciBm aW5kaXIgICAgICAgICAgICAgIDsgRGVjbGFyZSBsb2NhbCAoYXV0b21hdGljKSB2YXJpYWJsZXMK LSAgYXNzaWduIHJjdmRpciAvdXNyL2l2YW4vdG1wICAgICAgOyBUZW1wb3JhcnkgcmVjZWl2aW5n IGRpcmVjdG9yeQotICBhc3NpZ24gZmluZGlyIC91c3IvaXZhbi9uZXcgICAgICA7IFdoZXJlIHRv IG1vdmUgZmlsZXMgYWZ0ZXIgcmVjZXB0aW9uCi0gIGxvZyB0cmFuc2FjdGlvbnMgICAgICAgICAg ICAgICAgIDsgS2VlcCBhIGxvZyBvZiB0cmFuc2ZlcnMKLSAgY2QgXG0ocmN2ZGlyKSAgICAgICAg ICAgICAgICAgICAgOyBDaGFuZ2UgdG8gdGhlIHNvdXJjZSBkaXJlY3RvcnkKLSAgc2V0IHJlY2Vp dmUgbW92ZS10byBcbShmaW5kaXIpICAgOyBEZWNsYXJlIG1vdmUtdG8gZGlyZWN0b3J5LgotICBz ZXJ2ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICA7IEVudGVyIHNlcnZlciBtb2RlLgotCi0g ICBBIHNlcGFyYXRlIHByb2Nlc3MgKGUuZy4gdGhlIG1lZGljYWwgY2xhaW0tZm9ybSBkZWNvZGVy KSBjYW4gbG9vayBmb3IKLSAgIGZpbGVzIGFwcGVhcmluZyBpbiB0aGUgL3Vzci9pdmFuL25ldyBk aXJlY3RvcnkgYW5kIHByb2Nlc3MgdGhlbSB3aXRoCi0gICBldmVyeSBjb25maWRlbmNlIHRoYXQg dGhleSBoYXZlIGJlZW4gY29tcGxldGVseSByZWNlaXZlZC4KLQotICAgTm90ZSB0aGF0IHRoZSB1 c2Ugb2YgTU9WRS1UTyBjYW4gcmVzdWx0IGluIG1vdmVkIGZpbGVzIG92ZXJ3cml0aW5nIG9uZQot ICAgYW5vdGhlciAodGhlIGFwcGxpY2F0aW9uIHdvdWxkIG5vcm1hbGx5IGF2b2lkIHRoaXMgYnkg YXNzaWduaW5nIGVhY2gKLSAgIHRyYW5zYWN0aW9uIGEgdW5pcXVlLCBlLmcuIGJhc2VkIG9uIGN1 c3RvbWVyIG51bWJlciBhbmQgY2xhaW0gbnVtYmVyKS4KLSAgIEJ1dCBpZiBmaWxlbmFtZSBjb2xs aXNpb25zIGFyZSBhIHBvc3NpYmlsaXR5IGluIHlvdXIgYXBwbGljYXRpb24sCi0gICBSRU5BTUUt VE8gbWlnaHQgYmUgYSBiZXR0ZXIgY2hvaWNlOyB5b3UgY2FuIHVzZSBhbnkgdmFyaWFibGVzIHlv dSBsaWtlCi0gICBpbiB0aGUgdGVtcGxhdGUgdG8gZW5zdXJlIHVuaXF1ZW5lc3Mgb2YgdGhlIFJF TkFNRS1UTyBmaWxlbmFtZTsgZm9yCi0gICBleGFtcGxlOgotCi0gIFNFVCBSRUNFSVZFIFJFTkFN RS1UTyBcdihmaWxlbmFtZSlfXHYobmRhdGUpX1x2KG50aW1lKV9cdih1c2VyaWQpX1x2KHBpZCkK LQotNC4yLiBGSUxFLVRSQU5TRkVSIFBJUEVTIEFORCBGSUxURVJTCi0KLTQuMi4xLiBJTlRST0RV Q1RJT04KLQotICAgQmVnaW5uaW5nIGluIEMtS2VybWl0IDYuMSBhbmQgS2VybWl0IDk1IDEuMS4x MiwgaXQgaXMgcG9zc2libGUgdG8gc2VuZAotICAgZnJvbSBhIGNvbW1hbmQsIG9yICJwaXBlIiwg YXMgd2VsbCBhcyBmcm9tIGEgZmlsZSwgYW5kIHRvIHJlY2VpdmUgdG8gYQotICAgcGlwZSBvciBj b21tYW5kLiBJbiBhIHR5cGljYWwgZXhhbXBsZSwgd2UgbWlnaHQgd2FudCB0byB0cmFuc2ZlciBh bgotICAgZW50aXJlIGRpcmVjdG9yeSB0cmVlIGZyb20gb25lIFVOSVggc3lzdGVtIHRvIGFub3Ro ZXIgKGJ1dCB3aXRob3V0Ci0gICB1c2luZyB0aGUgbWV0aG9kcyBkZXNjcmliZWQgaW4gWzQ0NF1T ZWN0aW9ucyA0LjMgLCBbNDQ1XTQuMTAsCi0gICBbNDQ2XTQuMTEsIGFuZCBbNDQ3XTQuMTUpLiBX ZSBjb3VsZCBkbyB0aGlzIGluIG11bHRpcGxlIHN0ZXBzIGFzCi0gICBmb2xsb3dzOgotCi0gIDEu IENyZWF0ZSBhIHRhciBhcmNoaXZlIG9mIHRoZSBkZXNpcmVkIGRpcmVjdG9yeSB0cmVlCi0gIDIu IENvbXByZXNzIHRoZSB0YXIgYXJjaGl2ZQotICAzLiBUcmFuc2ZlciBpdCBpbiBiaW5hcnkgbW9k ZSB0byB0aGUgb3RoZXIgY29tcHV0ZXIKLSAgNC4gRGVjb21wcmVzcyBpdAotICA1LiBFeHRyYWN0 IHRoZSBkaXJlY3RvcnkgdHJlZSBmcm9tIHRoZSB0YXIgYXJjaGl2ZQotCi0gICBCdXQgdGhpcyBp cyBpbmNvbnZlbmllbnQgYW5kIGl0IHJlcXVpcmVzIGEgdGVtcG9yYXJ5IGZpbGUsIHdoaWNoIG1p Z2h0Ci0gICBiZSBsYXJnZXIgdGhhbiB3ZSBoYXZlIHJvb20gZm9yLgotCi0gICBUaGUgbmV3IHBp cGUtdHJhbnNmZXIgZmVhdHVyZSBsZXRzIHlvdSBkbyBzdWNoIHRoaW5ncyBpbiBhIHNpbmdsZSBz dGVwLAotICAgYW5kIHdpdGhvdXQgaW50ZXJtZWRpYXRlIGZpbGVzLgotCi0gICBBZGRpdGlvbmFs IG5ldyBmZWF0dXJlcywgYWxzbyBkaXNjdXNzZWQgaGVyZSwgbGV0IHlvdSBzcGVjaWZ5IHByZS0g YW5kCi0gICBwb3N0LSBwcm9jZXNzaW5nIGZpbHRlcnMgZm9yIG91dGJvdW5kIGFuZCBpbmNvbWlu ZyBmaWxlcywgYW5kIGdpdmUgeW91Ci0gICBhIHdheSB0byBpbnNlcnQgdGhlIG91dHB1dCBmcm9t IHNoZWxsIG9yIHN5c3RlbSBjb21tYW5kcyBpbnRvIEMtS2VybWl0Ci0gICBjb21tYW5kcy4KLQot ICAgVGhlIGZpbGUtdHJhbnNmZXIgcmVsYXRlZCBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlIG9ubHkg d2l0aCBLZXJtaXQKLSAgIHByb3RvY29sLCBub3Qgd2l0aCBhbnkgZXh0ZXJuYWwgcHJvdG9jb2xz LCBub3Igd2l0aCBLOTUncyBidWlsdC1pbgotICAgWFlaTU9ERU0gcHJvdG9jb2xzIChiZWNhdXNl IFhZWk1PREVNIHJlY292ZXJzIGZyb20gdHJhbnNtaXNzaW9uIGVycm9ycwotICAgYnkgcmV3aW5k aW5nIHRoZSBzb3VyY2UgZmlsZSwgYW5kIHlvdSBjYW4ndCByZXdpbmQgYSBwaXBlKS4KLQotICAg VGhpcyBzZWN0aW9uIGJlZ2lucyBieSBkaXNjdXNzaW5nIHRoZSBzaW1wbGUgYW5kIHN0cmFpZ2h0 Zm9yd2FyZCB1c2Ugb2YKLSAgIHRoZXNlIGZlYXR1cmVzIGluIFVOSVgsIGluIHdoaWNoIHBpcGVz IGFuZCBpbnB1dC9vdXRwdXQgcmVkaXJlY3Rpb24gYXJlCi0gICBhIGZ1bmRhbWVudGFsIGNvbXBv bmVudCBhbmQgdGhlcmVmb3JlICJqdXN0IHdvcmsiLCBhbmQgdGhlbiBnb2VzIG9uIHRvCi0gICBk aXNjdXNzIHRoZWlyIG9wZXJhdGlvbiBpbiBXaW5kb3dzIGFuZCBPUy8yLCB3aGVyZSBtYXR0ZXJz IGFyZSBtdWNoCi0gICBtb3JlIGNvbXBsaWNhdGVkLgotCi00LjIuMS4xLiBURVJNSU5PTE9HWQot Ci0gICBTdGFuZGFyZCBJbnB1dAotICAgICAgICAgIFRoaXMgaXMgYSBwcmVjaXNlIHRlY2huaWNh bCB0ZXJtIGRlbm90aW5nIHRoZSBub3JtYWwgc291cmNlIG9mCi0gICAgICAgICAgaW5wdXQgZm9y IGEgY29tbWFuZCBvciBwcm9ncmFtLCB3aGljaCBpcyB0aGUga2V5Ym9hcmQgb2YgeW91cgotICAg ICAgICAgIHRlcm1pbmFsIGJ5IGRlZmF1bHQsIGJ1dCB3aGljaCBjYW4gYmUgcmVkaXJlY3RlZCB0 byBhIGZpbGUgb3IKLSAgICAgICAgICBwaXBlLgotCi0gICBTdGRpbgotICAgICAgICAgIEFiYnJl dmlhdGlvbiBmb3IgU3RhbmRhcmQgSW5wdXQuCi0KLSAgIFN0YW5kYXJkIE91dHB1dAotICAgICAg ICAgIEEgcHJlY2lzZSB0ZWNobmljYWwgdGVybSBkZW5vdGluZyB0aGUgbm9ybWFsIGRlc3RpbmF0 aW9uIGZvcgotICAgICAgICAgIG91dHB1dCBmcm9tIGEgY29tbWFuZCBvciBwcm9ncmFtLCB3aGlj aCBpcyB5b3VyIHRlcm1pbmFsIHNjcmVlbgotICAgICAgICAgIGJ5IGRlZmF1bHQsIGJ1dCB3aGlj aCBjYW4gYmUgcmVkaXJlY3RlZCB0byBhIGZpbGUuCi0KLSAgIFN0ZG91dAotICAgICAgICAgIEFi YnJldmlhdGlvbiBmb3IgU3RhbmRhcmQgT3V0cHV0LgotCi0gICBTdGRpbwotICAgICAgICAgIEFi YnJldmlhdGlvbiBmb3IgU3RhbmRhcmQgSW5wdXQgLyBTdGFuZGFyZCBPdXRwdXQuCi0KLSAgIEkv TwotICAgICAgICAgIEFiYnJldmlhdGlvbiBmb3IgSW5wdXQgLyBPdXRwdXQuCi0KLSAgIFNoZWxs Ci0gICAgICAgICAgVGV4dC1iYXNlZCBzeXN0ZW0gY29tbWFuZCBwcm9jZXNzb3IsIHN1Y2ggYXMg dGhlIFVOSVggc2hlbGwsIERPUwotICAgICAgICAgIENPTU1BTkQuQ09NLCBldGMuCi0KLSAgIFBp cGUKLSAgICAgICAgICBBIG1lY2hhbmlzbSBieSB3aGljaCB0aGUgc3RhbmRhcmQgb3V0cHV0IG9m IG9uZSBwcm9ncmFtIGlzIHNlbnQKLSAgICAgICAgICB0byB0aGUgc3RhbmRhcmQgaW5wdXQgb2Yg YW5vdGhlci4KLQotICAgUGlwZWxpbmUKLSAgICAgICAgICBBIHNlcmllcyBvZiBwcm9ncmFtcyBj b25uZWN0ZWQgYnkgcGlwZXMuCi0KLTQuMi4xLjIuIE5PVEFUSU9OCi0KLSAgIEluIGNvbW1hbmQg ZGVzY3JpcHRpb25zLCAiY29tbWFuZCIgaXMgcmVwbGFjZWQgYnkgYSBzaGVsbCBvciBzeXN0ZW0K LSAgIGNvbW1hbmQgb3IgcGlwZWxpbmUuIFRoZSBjb21tYW5kIG5hbWVzIHNwZWNpZmllZCBpbiB0 aGVzZSBjb21tYW5kcyBhcmUKLSAgIGludGVycHJldGVkIGJ5IHlvdXIgc2hlbGwsIGp1c3QgYXMg aWYgeW91IHdlcmUgdHlwaW5nIHRoZW0gYXQgdGhlIHNoZWxsCi0gICBwcm9tcHQsIGFuZCBzbyBp ZiB0aGV5IGFyZSBpbiB5b3VyIFBBVEgsIHRoZXkgd2lsbCBiZSBmb3VuZCBpbiB0aGUKLSAgIGV4 cGVjdGVkIG1hbm5lci4gVGhlcmVmb3JlIHlvdSBkb24ndCBoYXZlIHRvIHNwZWNpZnkgY29tcGxl dGUgcGF0aG5hbWVzCi0gICBmb3IgY29tbWFuZHMgdGhhdCBhcmUgcHJvZ3JhbXMgKGJ1dCBpdCBz aG91bGRuJ3QgaHVydCBpZiB5b3UgZG8pLgotCi0gICBUaGUgbm9ybWFsIG5vdGF0aW9uIGZvciBJ L08gcmVkaXJlY3Rpb24gaXMgYXMgZm9sbG93czoKLQotICA8ICBSZWFkIFN0ZGluIGZyb20gdGhl IGdpdmVuIGZpbGUuCi0gID4gIFNlbmQgU3Rkb3V0IHRvIHRoZSBnaXZlbiBmaWxlLgotICB8ICBT ZW5kIFN0ZG91dCBmcm9tIHRoZSBjb21tYW5kIG9uIHRoZSBsZWZ0IHRvIHRoZSBjb21tYW5kIG9u IHRoZSByaWdodC4KLQotICAgRXhhbXBsZXM6Ci0KLSAgIHNvcnQgPCBmb28gPiBiYXIKLSAgICAg ICAgICBTb3J0cyB0aGUgbGluZXMgaW4gZmlsZSAiZm9vIiBhbmQgd3JpdGVzIHRoZSByZXN1bHRz IHRvIGZpbGUKLSAgICAgICAgICAiYmFyIgotCi0gICBncmVwIC1jICJzb21lIHRleHQiICoudHh0 IHwgZ3JlcCAtdiAiOjAiIHwgc29ydCB8IHByIC0zIHwgbHByCi0gICAgICAgICAgVGhpcyBpcyBh IGNvbW1hbmQgcGlwZWxpbmUgY29tcG9zZWQgb2YgNSBjb21tYW5kczoKLQotICAgZ3JlcCAtYyAi c29tZSB0ZXh0IiAqLnR4dAotICAgICAgICAgIExvb2tzIGluIGFsbCBmaWxlcyB3aG9zZSBuYW1l cyBlbmQgd2l0aCAiLnR4dCIgZm9yIHRoZSBzdHJpbmcKLSAgICAgICAgICAic29tZSB0ZXh0IiBh bmQgd3JpdGVzIHRvIFN0ZG91dCB0aGUgbmFtZXMgb2YgZWFjaCBmaWxlIGZvbGxvd2VkCi0gICAg ICAgICAgYnkgYSBjb2xvbiBhbmQgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBpbiBlYWNoLgot Ci0gICBncmVwIC12ICI6MCIKLSAgICAgICAgICBQcmludHMgdG8gU3Rkb3V0IHRoZSBsaW5lcyBm cm9tIFN0ZGluIHRoYXQgZG8gTk9UIGNvbnRhaW4gdGhlCi0gICAgICAgICAgc3RyaW5nICI6MCIs IGluIHRoaXMgY2FzZSwgaXQgcmVtb3ZlcyB0aGUgbmFtZXMgb2YgZmlsZXMgdGhhdCBkbwotICAg ICAgICAgIG5vdCBjb250YWluICJzb21lIHRleHQiLgotCi0gICBzb3J0Ci0gICAgICAgICAgU29y dHMgdGhlIGxpbmVzIGZyb20gU3RkaW4gYWxwaGFiZXRpY2FsbHkgdG8gU3Rkb3V0LgotCi0gICBw ciAtMwotICAgICAgICAgIEFycmFuZ2VzIHRoZSBsaW5lcyBmcm9tIFN0ZGluIGluIHRocmVlIGNv bHVtbnMuCi0KLSAgIGxwcgotICAgICAgICAgIFByaW50cyBpdHMgU3RkaW4gb24gdGhlIGRlZmF1 bHQgcHJpbnRlci4KLQotICAgTm90ZSB0aGF0IHRoZSBLZXJtaXQgZmVhdHVyZXMgZGVzY3JpYmVk IGhlcmUgd29yayBvbmx5IHdpdGggY29tbWFuZHMKLSAgIHRoYXQgdXNlIFN0ZGlvLiBJZiB5b3Ug YXR0ZW1wdCB0byB1c2UgdGhlbSB3aXRoIGNvbW1hbmRzIHdob3NlIGlucHV0Ci0gICBhbmQgb3V0 cHV0IGNhbiBub3QgYmUgcmVkaXJlY3RlZCwgS2VybWl0IHdpbGwgbW9zdCBsaWtlbHkgZ2V0IHN0 dWNrLgotICAgS2VybWl0IGhhcyBubyB3YXkgb2YgdGVsbGluZyBob3cgYW4gZXh0ZXJuYWwgY29t bWFuZCB3b3Jrcywgbm9yIHdoYXQKLSAgIHRoZSBzeW50YXggb2YgdGhlIHNoZWxsIGlzLCBzbyBp dCdzIHVwIHRvIHlvdSB0byBtYWtlIHN1cmUgeW91IHVzZQotICAgdGhlc2UgZmVhdHVyZXMgb25s eSB3aXRoIHJlZGlyZWN0YWJsZSBjb21tYW5kcy4KLQotICAgVGhlIHF1b3RpbmcgcnVsZXMgb2Yg eW91ciBzaGVsbCBhcHBseSB0byB0aGUgY29tbWFuZC4gVGh1cyBpbiBVTklYLAotICAgd2hlcmUg Qy1LZXJtaXQgdHJpZXMgdG8gdXNlIHlvdXIgcHJlZmVycmVkIHNoZWxsIGZvciBydW5uaW5nIGNv bW1hbmRzLAotICAgc2hlbGwgIm1ldGFjaGFyYWN0ZXJzIiB3aXRoaW4gY29tbWFuZHMgbXVzdCBi ZSBlc2NhcGVkIGlmIHRoZXkgYXJlIHRvCi0gICBiZSB0YWtlbiBsaXRlcmFsbHksIHVzaW5nIHRo ZSBtZXRob2RzIG5vcm1hbCBmb3IgeW91ciBzaGVsbC4gRm9yCi0gICBleGFtcGxlLCB0aGUgVU5J WCB0ciAodHJhbnNsYXRlKSBjb21tYW5kIG11c3QgaGF2ZSBpdHMgYXJndW1lbnRzIGluCi0gICBx dW90ZXM6Ci0KLSAgdHIgIlthLXpdIiAiW0EtWl0iCi0KLSAgIG90aGVyd2lzZSB0aGUgc2hlbGwg aXMgbGlrZWx5IHRvIHJlcGxhY2UgdGhlbSBieSBhbGwgZmlsZW5hbWVzIHRoYXQKLSAgIG1hdGNo LCB3aGljaCBpcyBwcm9iYWJseSBub3Qgd2hhdCB5b3Ugd2FudC4gVGhpcyBpcyBhbHNvIHRydWUg d2hlbgotICAgdXNpbmcgeW91ciBzaGVsbCBkaXJlY3RseSwgYW5kIGhhcyBub3RoaW5nIHRvIGRv IHdpdGggS2VybWl0LgotCi00LjIuMS4zLiBTRUNVUklUWQotCi0gICBTb21lIHNpdGVzIG1pZ2h0 IG5vdCB3aXNoIHRvIGFsbG93IGFjY2VzcyB0byBzeXN0ZW0gY29tbWFuZHMgb3IKLSAgIGV4dGVy bmFsIHByb2dyYW1zIGZyb20gd2l0aGluIEtlcm1pdC4gU3VjaCBhY2Nlc3MsIGluY2x1ZGluZyBh bGwgdGhlCi0gICBmZWF0dXJlcyBkZXNjcmliZWQgaGVyZSwgY2FuIGJlIGRpc2FibGVkIGluIHZh cmlvdXMgd2F5czoKLQotICAgIDEuIFdoZW4gYnVpbGRpbmcgZnJvbSBzb3VyY2UgY29kZSwgaW5j bHVkZSAtRE5PUFVTSCBhbW9uZyB0aGUgQ0ZMQUdTLgotICAgIDIuIEF0IHJ1bnRpbWUsIGdpdmUg dGhlIE5PUFVTSCBjb21tYW5kLgotICAgIDMuIEZvciBzZXJ2ZXIgbW9kZSwgZ2l2ZSB0aGUgRElT QUJMRSBIT1NUIGNvbW1hbmQuCi0gICAgNC4gSW1wbGljaXQgdXNlIG9mIHBpcGVzIGNhbiBiZSBk aXNhYmxlZCBhcyBkZXNjcmliZWQgaW4gWzQ0OF1TZWN0aW9uCi0gICAgICAgNC4yLjQuCi0KLSAg IE5vdGU6IDMgYW5kIDQgYXJlIG5vdCBuZWNlc3NhcnkgaWYgeW91IGhhdmUgZG9uZSAxIG9yIDIu Ci0KLTQuMi4yLiBDb21tYW5kcyBmb3IgVHJhbnNmZXJyaW5nIGZyb20gYW5kIHRvIFBpcGVzCi0K LSAgIFNFTkQgL0NPTU1BTkQgc2VuZHMgZGF0YSBmcm9tIGEgY29tbWFuZCBvciBjb21tYW5kIHBp cGVsaW5lLCBhbmQKLSAgIFJFQ0VJVkUgL0NPTU1FTlQgd3JpdGVzIGRhdGEgdG8gYSBjb21tYW5k IG9yIHBpcGVsaW5lLiBUaGUgR0VUIC9DT01NQU5ECi0gICBjb21tYW5kIGFza3MgYSBzZXJ2ZXIg dG8gc2VuZCBtYXRlcmlhbCwgYW5kIHRoZW4gd3JpdGVzIHRoZSBpbmNvbWluZwotICAgbWF0ZXJp YWwgdG8gYSBjb21tYW5kIG9yIHBpcGVsaW5lLiBUaGVzZSBmZWF0dXJlcywgYWxvbmcgd2l0aCBz d2l0Y2hlcwotICAgKGxpa2UgIi9DT01NQU5EIiwgZGVzY3JpYmVkIGluIFs0NDldU2VjdGlvbiA0 LjcpIGFyZSBuZXcgdG8gQy1LZXJtaXQKLSAgIDYuMS4gVGhlIGZvbGxvd2luZyBzeW5vbnltcyBh cmUgYWxzbyBwcm92aWRlZDoKLQotICBDU0VORCAgICA9IFNFTkQgL0NPTU1BTkQKLSAgQ1JFQ0VJ VkUgPSBSRUNFSVZFIC9DT01NQU5ECi0gIENHRVQgICAgID0gR0VUIC9DT01NQU5ECi0KLSAgIE5v bmUgb2YgdGhlc2UgY29tbWFuZHMgY2FuIGJlIHVzZWQgaWYgYSBTRU5EIG9yIFJFQ0VJVkUgRklM VEVSCi0gICAocmVzcGVjdGl2ZWx5LCBbNDUwXVNlY3Rpb24gNC4yLjMpIGlzIGluIGVmZmVjdCwg b3IgaWYgYSBOT1BVU0ggY29tbWFuZAotICAgKFs0NTFdU2VjdGlvbiA0LjIuMS4zKSBoYXMgYmVl biBnaXZlbiwgb3IgaWYgdGhlIGN1cnJlbnQgcHJvdG9jb2wgaXMKLSAgIG5vdCBLZXJtaXQuCi0K LTQuMi4yLjEuIFNlbmRpbmcgZnJvbSBhIENvbW1hbmQKLQotICAgU0VORCAvQ09NTUFORCBjb21t YW5kIFsgYXMtbmFtZSBdCi0gICBTRU5EIC9BUy1OQU1FOmFzLW5hbWUgL0NPTU1BTkQgY29tbWFu ZAotICAgQ1NFTkQgY29tbWFuZCBbIGFzLW5hbWUgXQotICAgICAgICAgIFRoZXNlIHRocmVlIGZv cm1zIGFyZSB0aGUgc2FtZS4gVGhleSB3b3JrIGxpa2UgdGhlIFNFTkQgY29tbWFuZCwKLSAgICAg ICAgICBidXQgaW5zdGVhZCBvZiBzZW5kaW5nIGEgZmlsZSwgaXQgc2VuZHMgdGhlIHN0YW5kYXJk IG91dHB1dCBvZgotICAgICAgICAgIHRoZSBnaXZlbiBjb21tYW5kLCBlaXRoZXIgdW5kZXIgdGhl IGNvbW1hbmQncyBvd24gbmFtZSwgb3IgZWxzZQotICAgICAgICAgIHdpdGggdGhlIGdpdmVuIGFz LW5hbWUuIElmIHRoZSBjb21tYW5kIGNvbnRhaW5zIHNwYWNlcywgaXQgbXVzdAotICAgICAgICAg IGJlIGVuY2xvc2VkIGluIGJyYWNlcy4gQnJhY2VzIHNob3VsZCBhbHNvIGJlIHVzZWQgZm9yIHRo ZQotICAgICAgICAgIGFzLW5hbWUgaWYgaXQgY29udGFpbnMgc3BhY2VzLiBJZiBicmFjZXMgYXJl IGluY2x1ZGVkIGFyb3VuZAotICAgICAgICAgIGVpdGhlciB0aGUgY29tbWFuZCBvciB0aGUgYXMt bmFtZSwgdGhleSBhcmUgcmVtb3ZlZCBhZnRlcgotICAgICAgICAgIHBhcnNpbmcgYnV0IGJlZm9y ZSB1c2UuIEFzIHdpdGggU0VORCwgdGhlIHRyYW5zZmVyIGlzIGluIHRleHQgb3IKLSAgICAgICAg ICBiaW5hcnkgbW9kZSBhY2NvcmRpbmcgdGhlIGN1cnJlbnQgRklMRSBUWVBFIHNldHRpbmcsIHVu bGVzcyB5b3UKLSAgICAgICAgICBvdmVycmlkZSB0aGUgZ2xvYmFsIHRyYW5zZmVyIG1vZGUgYnkg aW5jbHVkaW5nIGEgL1RFWFQgb3IKLSAgICAgICAgICAvQklOQVJZIHN3aXRjaC4gVGhlIGNvbW1h bmQgbXVzdCByZXF1aXJlIG5vIGlucHV0LgotCi0gICBXaGVuIHNlbmRpbmcgZnJvbSBhIGNvbW1h bmQgb3IgcGlwZWxpbmUsIEMtS2VybWl0IGhhcyBubyB3YXkgb2Yga25vd2luZwotICAgaW4gYWR2 YW5jZSBob3cgbXVjaCBkYXRhIHdpbGwgYmUgc2VudCwgYW5kIHNvIGl0IGNhbiBub3Qgc2VuZCB0 aGUgc2l6ZQotICAgdG8gdGhlIG90aGVyIEtlcm1pdCBpbiB0aGUgQXR0cmlidXRlIHBhY2tldCwg YW5kIHNvIHRoZSByZWNlaXZpbmcKLSAgIEtlcm1pdCBoYXMgbm8gd2F5IG9mIGRpc3BsYXlpbmcg InBlcmNlbnQgZG9uZSIgb3IgYSBwcm9ncmVzcyBiYXIKLSAgICh0aGVybW9tZXRlcikuCi0KLSAg IEV4YW1wbGVzIHRoYXQgbWFrZSBzZW5zZSBpbiB0ZXh0IG1vZGUgKGlsbHVzdHJhdGVkIGJ5IGNv bW1vbiBVTklYCi0gICBjb21tYW5kcyk6Ci0KLSAgIFNFTkQgL0NPTU1BTkQgZmluZ2VyCi0gICBD U0VORCBmaW5nZXIKLSAgICAgICAgICBzZW5kcyB0aGUgY3VycmVudCAiZmluZ2VyIiBsaXN0aW5n ICh3aG8ncyBsb2dnZWQgaW4pIHVuZGVyIHRoZQotICAgICAgICAgIG5hbWUgImZpbmdlciIuIFRo ZSB0d28gZm9ybXMgInNlbmQgL2NvbW1hbmQiIGFuZCAiY3NlbmQiIGFyZQotICAgICAgICAgIGVx dWl2YWxlbnQ7IHdlIHdvbid0IGJvdGhlciBzaG93aW5nIHRoZW0gYm90aCBpbiB0aGUgcmVzdCBv ZiB0aGUKLSAgICAgICAgICBleGFtcGxlcy4KLQotICAgU0VORCAvQ09NTUFORDp7ZmluZ2VyfQot ICAgQ1NFTkQge2Zpbmdlcn0KLSAgICAgICAgICBTYW1lIGFzIHByZXZpb3VzIGV4YW1wbGUgKGJy YWNlcyBhcmUgcmVtb3ZlZCBmcm9tICJ7ZmluZ2VyfSIpLgotCi0gICBTRU5EIC9DT01NQU5EOnsg ZmluZ2VyIH0KLSAgIENTRU5EIHsgZmluZ2VyIH0KLSAgICAgICAgICBTYW1lIGFzIHByZXZpb3Vz IGV4YW1wbGUsIGJ1dCBub3RlIHRoYXQgdGhlIHNwYWNlcyBhcmUga2VwdC4KLSAgICAgICAgICBU aGlzIGRvZXMgbm90IHByZXZlbnQgdGhlIHNoZWxsIGZyb20gcnVubmluZyB0aGUgImZpbmdlciIK LSAgICAgICAgICBwcm9ncmFtLCBidXQgaXRzIG91dHB1dCBpcyBzZW50IHVuZGVyIHRoZSBuYW1l ICIgZmluZ2VyICIgKHdpdGgKLSAgICAgICAgICBhIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNl KS4KLQotICAgU0VORCAvQ09NTUFORDpmaW5nZXIgL0FTLU5BTUU6dXNlcmxpc3QKLSAgIENTRU5E IGZpbmdlciB1c2VybGlzdAotICAgICAgICAgIHNlbmRzIHRoZSBjdXJyZW50IGZpbmdlciBsaXN0 aW5nIHVuZGVyIHRoZSBuYW1lICJ1c2VybGlzdCIuCi0KLSAgIFNFTkQgL0NPTU1BTkQ6e2Zpbmdl ciB8IHNvcnQgLXJ9IC9BUy1OQU1FOnVzZXJsaXN0Ci0gICBDU0VORCB7ZmluZ2VyIHwgc29ydCAt cn0gdXNlcmxpc3QKLSAgICAgICAgICBzZW5kcyB0aGUgY3VycmVudCBmaW5nZXIgbGlzdGluZywg c29ydGVkIGluIHJldmVyc2Ugb3JkZXIsIHVuZGVyCi0gICAgICAgICAgdGhlIG5hbWUgInVzZXJs aXN0Ii4gVGhlIGJyYWNlcyBhcmUgbmVlZGVkIHRvIGRpc3Rpbmd1aXNoIHRoZQotICAgICAgICAg IGNvbW1hbmQgZnJvbSB0aGUgYXMtbmFtZS4KLQotICAgU0VORCAvQ09NTUFORDp7ZmluZ2VyIHwg c29ydCAtcn0gL0FTLU5BTUU6e3VzZXJsaXN0fQotICAgQ1NFTkQge2ZpbmdlciB8IHNvcnQgLXJ9 IHt1c2VybGlzdH0KLSAgICAgICAgICBTYW1lIGFzIHByZXZpb3VzIGV4YW1wbGUgKGJyYWNlcyBh cmUgcmVtb3ZlZCBmcm9tICJ7dXNlcmxpc3R9IikuCi0KLSAgIFNFTkQgL0NPTU1BTkQ6e2Zpbmdl ciB8IHNvcnQgLXJ9Ci0gICAgICAgICAgL0FTLU5BTUU6e1xmcmVwbGFjZShcdihmaWxlbmFtZSks XDMyLF8pfQotCi0gICBDU0VORCB7ZmluZ2VyIHwgc29ydCAtcn0ge1xmcmVwbGFjZShcdihmaWxl bmFtZSksXDMyLF8pfQotICAgICAgICAgIExpa2UgdGhlIHByZXZpb3VzIGV4YW1wbGUsIGJ1dCBz ZW5kcyB0aGUgb3V0cHV0IG9mIHRoZSBjb21tYW5kCi0gICAgICAgICAgdW5kZXIgdGhlIG5hbWUg b2YgdGhlIGNvbW1hbmQsIGJ1dCB3aXRoIGFsbCBzcGFjZXMgKFwzMikKLSAgICAgICAgICByZXBs YWNlZCBieSB1bmRlcnNjb3Jlcywgc28gdGhlIGFzLW5hbWUgaXMgImZpbmdlcl98X3NvcnRfLXIi LgotCi0gICBFeGFtcGxlcyB0aGF0IG1ha2Ugc2Vuc2UgaW4gYmluYXJ5IG1vZGUgKHRocmVlIGVx dWl2YWxlbnQgZm9ybXMgYXJlCi0gICBzaG93bik6Ci0KLSAgIFNFTkQgL0NPTU1BTkQgL0JJTkFS WSB7dGFyIGNmIC0gLiB8IGd6aXAgLWN9IG15ZGlyLnRhci5negotICAgU0VORCAvQ09NTUFORCAv QklOQVJZIC9BUy1OQU1FOm15ZGlyLnRhci5neiB7dGFyIGNmIC0gLiB8IGd6aXAgLWN9Ci0gICBD U0VORCAvQklOQVJZIHt0YXIgY2YgLSAuIHwgZ3ppcCAtY30gbXlkaXIudGFyLmd6Ci0gICAgICAg ICAgTWFrZXMgYSB0YXIgYXJjaGl2ZSBvZiB0aGUgY3VycmVudCBkaXJlY3RvcnksIGNvbXByZXNz ZXMgaXQgd2l0aAotICAgICAgICAgIHRoZSBHTlUgZ3ppcCBwcm9ncmFtLCBhbmQgc2VuZHMgaXQg YXMgIm15ZGlyLnRhci5neiIuIFRoZSBvdGhlcgotICAgICAgICAgIEtlcm1pdCBjYW4sIG9mIGNv dXJzZSwganVzdCBzdG9yZSBpdCBhcyBhIGZpbGUsIG9yIGl0IGNhbiB1c2UKLSAgICAgICAgICBD UkVDRUlWRSB0byB1bmNvbXByZXNzIGFuZCBkZWFyY2hpdmUgaXQgYXMgcGFydCBvZiB0aGUgdHJh bnNmZXIKLSAgICAgICAgICBwcm9jZXNzLgotCi0gICBXaGVuIHVzaW5nIGEgInBpcGVsaW5lIiBv ZiBjb21tYW5kcyBpbiB0aGUgY29tbWFuZCBmaWVsZCwgb2J2aW91c2x5LAotICAgdGhlIGZpcnN0 IGNvbW1hbmQgbXVzdCBub3QgcmVxdWlyZSBhbnkgaW5wdXQsIGFuZCB0aGUgbGFzdCBjb21tYW5k Ci0gICBzaG91bGQgcHJvZHVjZSBzb21lIG91dHB1dCwgYW5kIGFsbCBpbnRlcm1lZGlhdGUgY29t bWFuZHMgc2hvdWxkIGdldAotICAgc29tZSBpbnB1dCBhbmQgcHJvZHVjZSBzb21lIG91dHB1dC4K LQotNC4yLjIuMi4gUmVjZWl2aW5nIHRvIGEgQ29tbWFuZAotCi0gICBSRUNFSVZFIC9DT01NQU5E IGNvbW1hbmQKLSAgIENSRUNFSVZFIGNvbW1hbmQKLSAgICAgICAgICBUaGlzIGlzIGxpa2UgUkVD RUlWRSwgZXhjZXB0IGluY29taW5nIG1hdGVyaWFsIGlzIHdyaXR0ZW4gdG8gdGhlCi0gICAgICAg ICAgc3RhbmRhcmQgaW5wdXQgb2YgdGhlIGdpdmVuIGNvbW1hbmQsIGluIHRleHQgb3IgYmluYXJ5 IG1vZGUKLSAgICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIG5vcm1hbCBydWxlcyBmb3IgZmlsZSBy ZWNlcHRpb24uIEJlIHN1cmUgdG8KLSAgICAgICAgICBpbmNsdWRlIGEgcmVkaXJlY3RvciB0byBh IGZpbGUgKGlmIHRoZSBjb21tYW5kIG5vcm1hbGx5IHdyaXRlcwotICAgICAgICAgIHRvIHN0YW5k YXJkIG91dHB1dCksIG9yIHRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQgd29uJ3QgZ28KLSAgICAg ICAgICBhbnl3aGVyZS4gVGhlIGNvbW1hbmQgbWF5IGNvbnRhaW4gc3BhY2VzOyBicmFjZXMgYXJl IG5vdCBuZWVkZWQsCi0gICAgICAgICAgYnV0IHRoZXkgYXJlIHJlbW92ZWQgaWYgdXNlZC4KLQot ICAgV0FSTklORzogQy1LZXJtaXQgaGFzIG5vIHdheSBvZiBrbm93aW5nIGFueXRoaW5nIGFib3V0 IHRoZSBjb21tYW5kLCBvcgotICAgZXZlbiB3aGV0aGVyIGl0IGlzIGEgY29tbWFuZC4gVGh1cyB0 aGlzIGNvbW1hbmQgd2lsbCBhbHdheXMgY2F1c2UKLSAgIEMtS2VybWl0IHRvIGVudGVyIHByb3Rv Y29sIG1vZGUsIGFzIGxvbmcgYXMgc29tZSB0ZXh0IGlzIHNwZWNpZmllZCBpbgotICAgdGhlIGNv bW1hbmQgZmllbGQuIEhvd2V2ZXIsIGlmIHRoZSB0ZXh0IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8g YQotICAgY29tbWFuZCwgdGhlIHRyYW5zZmVyIHdpbGwgZXZlbnR1YWxseSBmYWlsIHdpdGggYSBt ZXNzYWdlIHN1Y2ggYXMKLSAgICJFcnJvciB3cml0aW5nIGRhdGEiIG9yICJGYWlsdXJlIHRvIGNs b3NlIGZpbGUiLgotCi0gICBFeGFtcGxlcyBmb3IgdGV4dCBtb2RlIChpbiBVTklYKToKLQotICAg UkVDRUlWRSAvQ09NTUFORCBzb3J0IC1yID4gcmV2ZXJzZS50eHQKLSAgIENSRUNFSVZFIHNvcnQg LXIgPiByZXZlcnNlLnR4dAotICAgICAgICAgIFRoZSB0ZXh0IHRoYXQgaXMgcmVjZWl2ZWQgaXMg c29ydGVkIGluIHJldmVyc2Ugb3JkZXIgYW5kIHN0b3JlZAotICAgICAgICAgIGluIHRoZSBmaWxl ICJyZXZlcnNlLnR4dCIuIFRoZSB0d28gZm9ybXMgc2hvd24gYXJlIGVxdWl2YWxlbnQuCi0KLSAg IFJFQ0VJVkUgL0NPTU1BTkQge3NvcnQgLXIgPiByZXZlcnNlLnR4dH0KLSAgIENSRUNFSVZFIHtz b3J0IC1yID4gcmV2ZXJzZS50eHR9Ci0gICAgICAgICAgVGhlIHNhbWUgYXMgdGhlIHByZXZpb3Vz IGV4YW1wbGU7IGlmIGJyYWNlcyBhcmUgaW5jbHVkZWQsIHRoZXkKLSAgICAgICAgICBhcmUgc2lt cGx5IHJlbW92ZWQuCi0KLSAgIFJFQ0VJVkUgL0NPTU1BTkQge3NvcnQgLXIgPiBcZmxvd2VyKFx2 KGZpbGVuYW1lKSkucmV2ZXJzZX0KLSAgIENSRUNFSVZFIHtzb3J0IC1yID4gXGZsb3dlcihcdihm aWxlbmFtZSkpLnJldmVyc2V9Ci0gICAgICAgICAgU2FtZSBidXQgc3RvcmVzIHJlc3VsdCB1bmRl ciB0aGUgaW5jb21pbmcgZmlsZW5hbWUsIGxvd2VyY2FzZWQsCi0gICAgICAgICAgYW5kIHdpdGgg Ii5yZXZlcnNlIiBhcHBlbmRlZCB0byBpdC4KLQotICAgUkVDRUlWRSAvQ09NTUFORCBzb3J0Ci0g ICBDUkVDRUlWRSBzb3J0Ci0gICAgICAgICAgRG9lcyBub3RoaW5nIHVzZWZ1bCwgc2luY2UgdGhl IG91dHB1dCBvZiBzb3J0IGhhcyBub3doZXJlIHRvIGdvLgotCi0gICBSRUNFSVZFIC9DT01NQU5E IHNvcnQgLXIgfCBwciAtMyB8IGxwciAtUGxhc2VyamV0Ci0gICBDUkVDRUlWRSBzb3J0IC1yIHwg cHIgLTMgfCBscHIgLVBsYXNlcmpldAotICAgICAgICAgIFRoZSB0ZXh0IHRoYXQgaXMgcmVjZWl2 ZWQgaXMgc29ydGVkIGluIHJldmVyc2Ugb3JkZXIsIGFycmFuZ2VkCi0gICAgICAgICAgaW50byB0 aHJlZSBjb2x1bW5zLCBhbmQgc2VudCB0byB0aGUgImxhc2VyamV0IiBwcmludGVyLgotCi0gICBF eGFtcGxlcyBmb3IgYmluYXJ5IG1vZGU6Ci0KLSAgIFJFQ0VJVkUgL0NPTU1BTkQ6e2d1bnppcCAt YyB8IHRhciB4ZiAtfQotICAgQ1JFQ0VJVkUge2d1bnppcCAtYyB8IHRhciB4ZiAtfQotICAgICAg ICAgIEFzc3VtaW5nIHRoZSBkYXRhIHRoYXQgaXMgcmVjZWl2ZWQgaXMgYSBjb21wcmVzc2VkIHRh ciBhcmNoaXZlLAotICAgICAgICAgIHVuY29tcHJlc3NlcyB0aGUgYXJjaGl2ZSBhbmQgcGFzc2Vz IGl0IHRvIHRhciBmb3IgZXh0cmFjdGlvbi4gSW4KLSAgICAgICAgICB0aGlzIGNhc2UgdGhlIGJy YWNlcyBhcmUgbmVlZGVkIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBmaW5hbCAiLSIKLSAgICAgICAg ICB3b3VsZCBiZSB0YWtlbiBhcyBhIGNvbW1hbmQgY29udGludWF0aW9uIGNoYXJhY3RlciAoc2Vl Ci0gICAgICAgICAgWzQ1Ml1Vc2luZyBDLUtlcm1pdCwgMm5kIEVkaXRpb24sIHAuMzMpLgotCi0g ICBHRVQgL0NPTU1BTkQgcmVtb3RlLWZpbGUgY29tbWFuZAotICAgR0VUIC9DT01NQU5EIC9BUy1O QU1FOmNvbW1hbmQgcmVtb3RlLWZpbGUKLSAgIENHRVQgcmVtb3RlLWZpbGUgY29tbWFuZAotICAg ICAgICAgIFRoaXMgY29tbWFuZCB0ZWxscyB0aGUgS2VybWl0IGNsaWVudCB0byBzZW5kIGEgR0VU IHJlcXVlc3QgZm9yCi0gICAgICAgICAgdGhlIGdpdmVuIHJlbW90ZSBmaWxlIHRvIGEgS2VybWl0 IHNlcnZlci4gVW5saWtlIEdFVCwgaG93ZXZlciwKLSAgICAgICAgICB0aGUgaW5jb21pbmcgbWF0 ZXJpYWwgaXMgd3JpdHRlbiB0byBhIGNvbW1hbmQsIHJhdGhlciB0aGFuIHRvIGEKLSAgICAgICAg ICBmaWxlLiBJZiB0aGUgcmVtb3RlLWZpbGUgb3IgdGhlIGNvbW1hbmQgY29udGFpbiBzcGFjZXMs IHRoZXkKLSAgICAgICAgICBtdXN0IGJlIGVuY2xvc2VkIGluIGJyYWNlcy4gVGhlIHNhbWUgY2F1 dGlvbnMgYWJvdXQgdGhlIGNvbW1hbmQKLSAgICAgICAgICBhcHBseSBhcyBmb3IgQ1JFQ0VJVkUu Ci0KLSAgIEV4YW1wbGVzIChmb3IgVU5JWCk6Ci0KLSAgIEdFVCAvQ09NTUFORCBvb2ZhLnR4dCBz b3J0IC1yID4gb29mYS5uZXcKLSAgIEdFVCAvQ09NTUFORCB7b29mYS50eHR9IHtzb3J0IC1yID4g b29mYS5uZXd9Ci0gICBDR0VUIG9vZmEudHh0IHNvcnQgLXIgPiBvb2ZhLm5ldwotICAgQ0dFVCB7 b29mYS50eHR9IHtzb3J0IC1yID4gb29mYS5uZXd9Ci0gICAgICAgICAgVGhlc2UgZm91ciBhcmUg ZXF1aXZhbGVudC4gRWFjaCBvZiB0aGVtIHJlcXVlc3RzIHRoZSBzZXJ2ZXIgdG8KLSAgICAgICAg ICBzZW5kIGl0cyAib29mYS50eHQiIGZpbGUsIGFuZCBhcyBpdCBhcnJpdmVzLCBpdCBpcyBzb3J0 ZWQgaW4KLSAgICAgICAgICByZXZlcnNlIG9yZGVyIGFuZCB3cml0dGVuIHRvICJvb2ZhLm5ldyIu Ci0KLSAgIEdFVCAvQ09NTUFORCB7cHJvZmlsZSBleGVjIGF9IGxwcgotICAgR0VUIC9DT01NQU5E IHtwcm9maWxlIGV4ZWMgYX0ge2xwcn0KLSAgIEdFVCAvQ09NTUFORCAvQVMtTkFNRTpscHIge3By b2ZpbGUgZXhlYyBhfQotICAgR0VUIC9DT01NQU5EIC9BUy1OQU1FOntscHJ9IHtwcm9maWxlIGV4 ZWMgYX0KLSAgIEdFVCAvQ09NTUFORCAvQVM6bHByIHtwcm9maWxlIGV4ZWMgYX0KLSAgIENHRVQg e3Byb2ZpbGUgZXhlYyBhfSBscHIKLSAgIENHRVQge3Byb2ZpbGUgZXhlYyBhfSB7bHByfQotICAg ICAgICAgIEhlcmUgdGhlIHJlbW90ZSBmaWxlbmFtZSBjb250YWlucyBzcGFjZXMgc28gaXQgTVVT VCBiZSBlbmNsb3NlZAotICAgICAgICAgIGluIGJyYWNlcy4gQXMgaXQgYXJyaXZlcyBpdCBpcyBz ZW50IHRvIHRoZSBscHIgcHJvZ3JhbSBmb3IKLSAgICAgICAgICBwcmludGluZy4gQnJhY2VzIGFy ZSBvcHRpb25hbCBhcm91bmQgImxwciIgc2luY2UgaXQgY29udGFpbnMgbm8KLSAgICAgICAgICBz cGFjZXMuCi0KLSAgIEdFVCAvQ09NTUFORCAqLnR4dCB7Y2F0ID4+IG5ldy50eHR9Ci0gICBHRVQg L0FTLU5BTUU6e2NhdCA+PiBuZXcudHh0fSAvQ09NTUFORCAqLnR4dAotICAgQ0dFVCAqLnR4dCB7 Y2F0ID4+IG5ldy50eHR9Ci0gICAgICAgICAgVGhpcyBnZXRzIGFsbCB0aGUgIi50eHQiIGZpbGVz IGZyb20gdGhlIHNlcnZlciBhbmQgY29uY2F0ZW5hdGVzCi0gICAgICAgICAgdGhlbSBhbGwgaW50 byBhIHNpbmdsZSAibmV3LnR4dCIgZmlsZSBvbiB0aGUgY2xpZW50LgotCi0gICBHRVQgL0NPTU1B TkQgKi50eHQge2VjaG8gXHYoZmlsZW5hbWUpPj5uZXcudHh0O2NhdD4+bmV3LnR4dH0KLSAgIENH RVQgKi50eHQge2VjaG8gXHYoZmlsZW5hbWUpPj5uZXcudHh0O2NhdD4+bmV3LnR4dH0KLSAgICAg ICAgICBBcyBhYm92ZSwgYnV0IGluc2VydHMgZWFjaCBmaWxlJ3MgbmFtZSBiZWZvcmUgaXRzIGNv bnRlbnRzLgotCi00LjIuMy4gVXNpbmcgRmlsZS1UcmFuc2ZlciBGaWx0ZXJzCi0KLSAgIFRoZSBj b21tYW5kcyBkZXNjcmliZWQgaW4gWzQ1M11TZWN0aW9uIDQuMi4yIGxldCB5b3Ugc2VuZCB0aGUg b3V0cHV0IG9mCi0gICBhIGNvbW1hbmQsIG9yIHJlY2VpdmUgZGF0YSBpbnRvIGEgY29tbWFuZC4g QnV0IHdoYXQgaWYgeW91IHdhbnQgdG8KLSAgIHNwZWNpZnkgcHJlcHJvY2Vzc2luZyBmb3IgZmls ZXMgdGhhdCB5b3Ugc2VuZCwgb3IgcG9zdHByb2Nlc3Npbmcgb2YKLSAgIGZpbGVzIHRoYXQgeW91 IHJlY2VpdmUsIGV2ZW4gd2hlbiBtdWx0aXBsZSBmaWxlcyBhcmUgaW52b2x2ZWQ/IEZvciB0aGlz Ci0gICB5b3UgbmVlZCBhIHdheSB0byBzcGVjaWZ5IHNlbmQgYW5kIHJlY2VpdmUgZmlsdGVycy4g VGhlIGNvbW1hbmRzIGFyZQotICAgU0VUIFNFTkQgRklMVEVSIGFuZCBTRVQgUkVDRUlWRSBGSUxU RVI7IFNIT1cgUFJPVE9DT0wgZGlzcGxheXMgdGhlCi0gICBjdXJyZW50IHNldHRpbmdzLgotCi00 LjIuMy4xLiBUaGUgU0VORCBGaWx0ZXIKLQotICAgU0VUIFNFTkQgRklMVEVSIFsgY29tbWFuZCBd Ci0gICAgICAgICAgVGhpcyBjb21tYW5kIHNwZWNpZmllcyBhIGNvbW1hbmQgdG8gYmUgcnVuIG9u IGFueSBmaWxlIHRoYXQgeW91Ci0gICAgICAgICAgU0VORCAob3IgTU9WRSwgTVNFTkQsIGV0Yyku IEl0IGFsc28gYXBwbGllcyB0byBmaWxlcyBzZW50IHdoZW4KLSAgICAgICAgICBpbiBzZXJ2ZXIg bW9kZSwgaW4gcmVzcG9uc2UgdG8gR0VUIGNvbW1hbmRzLCBidXQgbm90IHRvIHRoZQotICAgICAg ICAgIHJlc3VsdHMgb2YgUkVNT1RFIGNvbW1hbmRzIGxpa2UgUkVNT1RFIERJUkVDVE9SWSwgUkVN T1RFIFRZUEUsCi0gICAgICAgICAgUkVNT1RFIEhPU1QsIGV0Yy4gVGhlIGNvbW1hbmQgbWF5IGJl LCBidXQgbmVlZCBub3QgYmUsIGVuY2xvc2VkCi0gICAgICAgICAgaW4gYnJhY2VzOyBpZiBpdCBp cywgdGhlIGJyYWNlcyBhcmUgc3RyaXBwZWQgYmVmb3JlIHVzZS4gVGhlCi0gICAgICAgICAgb3V0 cHV0IG9mIHRoaXMgY29tbWFuZCBpcyBzZW50LCByYXRoZXIgdGhhbiB0aGUgZmlsZSBpdHNlbGYu IFRoZQotICAgICAgICAgIGN1cnJlbnQgRklMRSBUWVBFIHNldHRpbmcgKFRFWFQgb3IgQklOQVJZ KSBhcHBsaWVzIHRvIHRoZSBvdXRwdXQKLSAgICAgICAgICBvZiB0aGUgY29tbWFuZC4gVGhlIGNv bW1hbmQgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBpbnN0YW5jZQotICAgICAgICAgIG9mIFx2 KGZpbGVuYW1lKSwgZm9yIHdoaWNoIHRoZSBuYW1lIG9mIHRoZSBhY3R1YWwgZmlsZSBpcwotICAg ICAgICAgIHN1YnN0aXR1dGVkLiBJZiB0aGUgY29tbWFuZCBpcyBvbWl0dGVkLCB0aGUgc2VuZCBm aWx0ZXIgaXMKLSAgICAgICAgICByZW1vdmVkIGFuZCBmaWxlcyBhcmUgc2VudCBpbiB0aGUgbm9y bWFsIG1hbm5lci4KLQotICAgVGhlIFNFVCBTRU5EIEZJTFRFUiBzZXRzIHVwIGEgImdsb2JhbCIg ZmlsdGVyIC0tIHRoYXQgaXMsIG9uZSB0aGF0Ci0gICBhcHBsaWVzIHRvIGFsbCBzdWJzZXF1ZW50 IGZpbGUtc2VuZGluZyBjb21tYW5kcyB1bnRpbCB5b3UgY2hhbmdlIG9yCi0gICByZW1vdmUgaXQu IFlvdSBjYW4gYWxzbyBzcGVjaWZ5IGEgImxvY2FsIiBmaWx0ZXIgdG8gYmUgdXNlZCBpbiBhCi0g ICBzcGVjaWZpYyBmaWxlLXNlbmRpbmcgY29tbWFuZCBieSB1c2luZyB0aGUgL0ZJTFRFUiBzd2l0 Y2ggKHNlZQotICAgWzQ1NF1TZWN0aW9uIDEuNSk7IGZvciBleGFtcGxlOgotCi0gIFNFTkQgL0ZJ TFRFUjpjb21tYW5kIFsgb3RoZXItc3dpdGNoZXMgXSBmaWxlbmFtZQotCi0gICBCZXNpZGVzIFx2 KGZpbGVuYW1lKSwgeW91IGNhbiBpbmNsdWRlIGFueSBvdGhlciBzY3JpcHQgcHJvZ3JhbW1pbmcK LSAgIG5vdGF0aW9uIGluIHRoZSBzZW5kIGZpbHRlcjogdmFyaWFibGUgbmFtZXMsIGFycmF5IHJl ZmVyZW5jZXMsIGNhbGxzIHRvCi0gICBidWlsdC1pbiBzdHJpbmcgb3Igb3RoZXIgZnVuY3Rpb25z LCBhbmQgc28gb24uIFRoZXNlIGFyZSBldmFsdWF0ZWQKLSAgIGR1cmluZyBmaWxlIHRyYW5zZmVy LCBOT1QgZHVyaW5nIHBhcnNpbmcsIGFuZCB0aGV5IGFyZSBldmFsdWF0ZWQKLSAgIHNlcGFyYXRl bHkgZm9yIGVhY2ggZmlsZS4KLQotICAgV2hlbiB0aGUgU0VORCBvciBNT1ZFIChTRU5EIC9ERUxF VEUpIGNvbW1hbmQgaXMgdXNlZCB3aXRoIGEgc2VuZAotICAgZmlsdGVyLCB0aGUgb3V0cHV0IGZy b20gdGhlIGZpbHRlciBpcyBzZW50IHVuZGVyIHRoZSBmaWxlJ3Mgb3JpZ2luYWwKLSAgIG5hbWUg dW5sZXNzIHlvdSBzcGVjaWZ5IGFuICJhcy1uYW1lIiBvciB0ZW1wbGF0ZS4gVGhlIEF0dHJpYnV0 ZSBwYWNrZXQKLSAgIChpZiBhbnkpIGNvbnRhaW5zIHRoZSBvcmlnaW5hbCBmaWxlJ3MgYXR0cmli dXRlcyAoc2l6ZSwgY3JlYXRpb24gZGF0ZSwKLSAgIGV0YykuIFNvIChmb3IgZXhhbXBsZSkgaWYg dGhlIGZpbHRlciBjaGFuZ2VzIHRoZSBmaWxlJ3Mgc2l6ZSwgdGhlCi0gICBwcm9ncmVzcyB0aGVy bW9tZXRlciBtaWdodCBiZSB3cm9uZy4gKFdlIGNhbid0IHNlbmQgdGhlIHNpemUgb2YgdGhlCi0g ICBvdXRwdXQgZnJvbSB0aGUgZmlsdGVyLCBiZWNhdXNlIGl0IGlzIG5vdCBrbm93biB1bnRpbCB0 aGUgdHJhbnNmZXIgaXMKLSAgIGZpbmlzaGVkLikgSWYgeW91IHByZWZlciB0aGF0IHRoZSBzaXpl IG5vdCBiZSBzZW50LCB1c2UgInNldCBhdHRyaWJ1dGVzCi0gICBzaXplIG9mZiIuCi0KLSAgIFlv dSBjYW4gbm90IHVzZSBzZW5kIGZpbHRlcnMgd2l0aCBSRVNFTkQgKFNFTkQgL1JFQ09WRVIpIG9y IFBTRU5EIChTRU5ECi0gICAvU1RBUlQpLgotCi0gICBFeGFtcGxlcyBmb3IgdGV4dCBtb2RlOgot Ci0gICBTRVQgU0VORCBGSUxURVIgc29ydCAtciBcdihmaWxlbmFtZSkgOyBCcmFjZXMgbWF5IGJl IG9taXR0ZWQKLSAgIFNFVCBTRU5EIEZJTFRFUiB7c29ydCAtciBcdihmaWxlbmFtZSl9IDsgQnJh Y2VzIG1heSBiZSBpbmNsdWRlZAotICAgU0VORCAqLnR4dAotICAgICAgICAgIFRoaXMgc2VuZHMg ZXZlcnkgZmlsZSBpbiB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hvc2UgbmFtZSBlbmRzCi0gICAg ICAgICAgd2l0aCAiLnR4dCIgdW5kZXIgaXRzIG93biBuYW1lLCBidXQgd2l0aCBpdHMgbGluZXMg c29ydGVkIGluCi0gICAgICAgICAgcmV2ZXJzZSBvcmRlci4KLQotICAgU0VORCAvRklMVEVSOntz b3J0IC1yIFx2KGZpbGVuYW1lKX0gKi50eHQKLSAgICAgICAgICBTYW1lIGFzIGFib3ZlLCBidXQg dGhlIGZpbHRlciBhcHBsaWVzIG9ubHkgdG8gdGhpcyBTRU5EIGNvbW1hbmQuCi0gICAgICAgICAg QnJhY2VzIGFyZSByZXF1aXJlZCBpbiB0aGlzIGNhc2UuCi0KLSAgIFNFVCBTRU5EIEZJTFRFUiB7 c29ydCAtciBcdihmaWxlbmFtZSl9Ci0gICBTRU5EIG9vZmEudHh0IHJldmVyc2UudHh0Ci0gICAg ICAgICAgU2VuZHMgdGhlIG9vZmEudHh0IGZpbGUgd2l0aCBpdHMgbGluZXMgc29ydGVkIGluIHJl dmVyc2Ugb3JkZXIKLSAgICAgICAgICB1bmRlciB0aGUgbmFtZSAicmV2ZXJzZS50eHQiLgotCi0g ICBTRVQgU0VORCBGSUxURVIge3NvcnQgLXIgXHYoZmlsZW5hbWUpfQotICAgU0VORCBvb2ZhLiog XHYoZmlsZW5hbWUpLnJldmVyc2UKLSAgICAgICAgICBTZW5kcyBhbGwgdGhlIG9vZmEuKiBmaWxl cyB3aXRoIHRoZWlyIGxpbmVzIHNvcnRlZCBpbiByZXZlcnNlCi0gICAgICAgICAgb3JkZXI7IGVh Y2ggZmlsZSBpcyBzZW50IHVuZGVyIGl0cyBvd24gbmFtZSBidXQgd2l0aCAiLnJldmVyc2UiCi0g ICAgICAgICAgYXBwZW5kZWQgdG8gaXQuCi0KLSAgIFNFVCBTRU5EIEZJTFRFUiB7dHIgIlthLXpd IiAiW0EtWl0iIDwgXHYoZmlsZW5hbWUpfQotICAgU0VORCAqLnR4dAotICAgICAgICAgIFNlbmRz IGFsbCAiLnR4dCIgZmlsZXMgdW5kZXIgdGhlaXIgb3duIG5hbWVzLCBidXQgdXBwZXJjYXNpbmcK LSAgICAgICAgICB0aGVpciBjb250ZW50cy4KLQotICAgTm90ZSB0aGF0IHRoZSBTRU5EIEZJTFRF UiBhcHBsaWVzIG5vdCBvbmx5IHRvIGZpbGVzIHRoYXQgYXJlIHNlbnQgd2l0aAotICAgU0VORCwg TU9WRSwgTVNFTkQsIGV0YywgYnV0IGFsc28gdG8gZmlsZXMgc2VudCBieSB0aGUgQy1LZXJtaXQg c2VydmVyCi0gICBpbiByZXNwb25zZSB0byBHRVQgcmVxdWVzdHMuCi0KLSAgIEV4YW1wbGVzIGZv ciBiaW5hcnkgbW9kZToKLQotICAgU0VUIFNFTkQgRklMVEVSIHtnemlwIC1jIFx2KGZpbGVuYW1l KX0KLSAgIFNFTkQgL0JJTkFSWSBvb2ZhLnR4dCBvb2ZhLnR4dC5negotICAgICAgICAgIFNlbmRz IHRoZSBvb2ZhLnR4dCBmaWxlLCBjb21wcmVzc2VkIGJ5IGd6aXAsIGFzIG9vZmEudHh0Lmd6Lgot Ci0gICBTRU5EIC9CSU5BUlkgL0ZJTFRFUjp7Z3ppcCAtYyBcdihmaWxlbmFtZSl9IG9vZmEudHh0 IG9vZmEudHh0Lmd6Ci0gICAgICAgICAgQXMgYWJvdmUsIGJ1dCB0aGUgZmlsdGVyIGFwcGxpZXMg b25seSB0byB0aGlzIFNFTkQgY29tbWFuZC4KLQotICAgU0VUIFNFTkQgRklMVEVSIHtnemlwIC1j IFx2KGZpbGVuYW1lKX0KLSAgIFNFTkQgL0JJTkFSWSBvb2ZhLiogXGZ1cHBlcihccmVwbGFjZShc dihmaWxlbmFtZSksLixfKSkuR1oKLSAgICAgICAgICBTZW5kcyBhbGwgdGhlIG9vZmEuKiBmaWxl cywgY29tcHJlc3NlZCBieSBnemlwLCBlYWNoIHVuZGVyIGl0cwotICAgICAgICAgIG93biBuYW1l LCBidXQgd2l0aCB0aGUgbmFtZSB1cHBlcmNhc2VkLCBhbGwgcGVyaW9kcyB3aXRoaW4gdGhlCi0g ICAgICAgICAgbmFtZSBjb252ZXJ0ZWQgdG8gdW5kZXJzY29yZXMsIGFuZCAiLkdaIiBhcHBlbmRl ZCB0byBpdC4gU28sIGZvcgotICAgICAgICAgIGV4YW1wbGUsICJvb2ZhLnR4dCIgaXMgc2VudCBh cyAiT09GQV9UWFQuR1oiLgotCi0gICBJbiB0aGUgZ3ppcCBleGFtcGxlcywgbm90ZSB0aGF0IHRo ZSBhbW91bnQgb2YgZGF0YSB0aGF0IGlzIHNlbnQgaXMKLSAgIG5vcm1hbGx5IGxlc3MgdGhhbiB0 aGUgb3JpZ2luYWwgZmlsZSBzaXplIGJlY2F1c2UgZ3ppcCBjb21wcmVzc2VzIHRoZQotICAgZmls ZS4gQnV0IEtlcm1pdCBzZW5kcyB0aGUgb3JpZ2luYWwgZmlsZSBzaXplIGFoZWFkIGluIHRoZSBh dHRyaWJ1dGUKLSAgIHBhY2tldCBhbnl3YXkgKHVubGVzcyB5b3UgdGVsbCBpdCBub3QgdG9vKS4g VGh1cyB0aGUgdHJhbnNmZXIgd2lsbAotICAgcHJvYmFibHkgYXBwZWFyIHRvIHRlcm1pbmF0ZSBl YXJseSwgZS5nLiB3aGVuIHRoZSByZWNlaXZlcidzCi0gICBmaWxlLXRyYW5zZmVyIGRpc3BsYXkg dGhlcm1vbWV0ZXIgaXMgb25seSBhdCA0MCUuIElmIHRoaXMgYW5ub3lzIHlvdSwKLSAgIHRlbGwg S2VybWl0IHRvICJzZXQgYXR0cmlidXRlIGxlbmd0aCBvZmYiLiBPbiB0aGUgb3RoZXIgaGFuZCwg eW91IGNhbgotICAgdXNlIHRoZSBmaW5hbCBwb3NpdGlvbiBvZiB0aGUgdGhlcm1vbWV0ZXIgYXMg YSBtZWFzdXJlIG9mIHRoZQotICAgZWZmZWN0aXZlbmVzcyBvZiBjb21wcmVzc2lvbi4KLQotNC4y LjMuMi4gVGhlIFJFQ0VJVkUgRmlsdGVyCi0KLSAgIFNFVCBSRUNFSVZFIEZJTFRFUiBbIGNvbW1h bmQgXQotICAgICAgICAgIFRoaXMgY29tbWFuZCBzcGVjaWZpZXMgdGhhdCB0aGUgZ2l2ZW4gY29t bWFuZCB3aWxsIGJlIHJ1biBvbiBhbnkKLSAgICAgICAgICBmaWxlIHRoYXQgaXMgcmVjZWl2ZWQg YmVmb3JlIGl0IGlzIHdyaXR0ZW4gdG8gZGlzay4gVGhlIGNvbW1hbmQKLSAgICAgICAgICBtYXkg YmUsIGJ1dCBuZWVkIG5vdCBiZSwgZW5jbG9zZWQgaW4gYnJhY2VzOyBpZiBpdCBpcyB0aGUgYnJh Y2VzCi0gICAgICAgICAgYXJlIHN0cmlwcGVkIGJlZm9yZSB1c2UuIFRoZSBmb2xsb3dpbmcgdHdv IGNvbW1hbmRzIGFyZQotICAgICAgICAgIGVxdWl2YWxlbnQ6Ci0KLSAgU0VUIFJFQ0VJVkUgRklM VEVSIHNvcnQgLXIgPiBcdihmaWxlbmFtZSkKLSAgU0VUIFJFQ0VJVkUgRklMVEVSIHtzb3J0IC1y ID4gXHYoZmlsZW5hbWUpfQotCi0gICBUaGUgUkVDRUlWRSBmaWx0ZXIgY29tbWFuZCBtYXkgY29u dGFpbiBhICJcdihmaWxlbmFtZSkiIHNlcXVlbmNlIHRvIGJlCi0gICByZXBsYWNlZCBieSB0aGUg aW5jb21pbmcgZmlsZW5hbWUgZnJvbSB0aGUgZmlsZSBoZWFkZXIgcGFja2V0LCBidXQgaXQKLSAg IGlzIG5vdCByZXF1aXJlZC4gSG93ZXZlciB5b3UgbXVzdCB1c2UgaXQgd2hlbmV2ZXIgeW91ciBm aWx0ZXIgd291bGQKLSAgIG5vcm1hbGx5IHdyaXRlIHRvIFN0ZG91dCwgb3RoZXJ3aXNlIGl0cyBv dXRwdXQgd2lsbCBiZSBsb3N0LgotCi0gICBUaGUgUkVDRUlWRSBmaWx0ZXIgY29tbWFuZCBtYXkg Y29udGFpbiBvbmUgb3IgbW9yZSAiXHYoZmlsZW5hbWUpIgotICAgc2VxdWVuY2UgdG8gYmUgcmVw bGFjZWQgYnkgdGhlIGluY29taW5nIGZpbGVuYW1lIGZyb20gdGhlIGZpbGUgaGVhZGVyCi0gICBw YWNrZXQsIGJ1dCBpdCBpcyBub3QgcmVxdWlyZWQuIEhvd2V2ZXIgeW91IG11c3QgdXNlIGl0IHdo ZW5ldmVyIHlvdXIKLSAgIGZpbHRlciB3b3VsZCBub3JtYWxseSB3cml0ZSB0byBTdGRvdXQsIG90 aGVyd2lzZSBpdHMgb3V0cHV0IHdpbGwgYmUKLSAgIGxvc3QuCi0KLSAgIFJFQ0VJVkUgL0ZJTFRF Ujpjb21tYW5kIGFuZCBHRVQgL0ZJTFRFUjpjb21tYW5kIGNhbiBhbHNvIGJlIHVzZWQgdG8KLSAg IHNwZWNpZnkgYSBmaWx0ZXIgdG8gYmUgdXNlZCBmb3Igb25seSBvbmUgZmlsZS10cmFuc2ZlciBv cGVyYXRpb24uCi0KLSAgIFVOSVggZXhhbXBsZXMgZm9yIHRleHQgbW9kZToKLQotICAgU0VUIFJF Q0VJVkUgRklMVEVSIGxwcgotICAgUkVDRUlWRQotICAgICAgICAgIEFsbCB0aGUgZmlsZXMgdGhh dCBhcmUgcmVjZWl2ZWQgYXJlIHNlbnQgdG8gdGhlIGRlZmF1bHQgVU5JWAotICAgICAgICAgIHBy aW50IHNwb29sZXIuCi0KLSAgIFJFQ0VJVkUgL0ZJTFRFUjpscHIKLSAgICAgICAgICBTYW1lIGFz IGFib3ZlLCBleGNlcHQgdGhlIGxwciBmaWx0ZXIgaXMgdXNlZCBvbmx5IHdpdGggdGhpcwotICAg ICAgICAgIFJFQ0VJVkUgY29tbWFuZC4KLQotICAgUkVDRUlWRSBscHIKLSAgICAgICAgICBUaGlz IGlzIHByb2JhYmx5IG5vdCB3aGF0IHlvdSB3YW50OyBpdCBjcmVhdGVzIGEgZmlsZSBjYWxsZWQK LSAgICAgICAgICBscHIuCi0KLSAgIFNFVCBSRUNFSVZFIEZJTFRFUiB7c29ydCAtciA+IFx2KGZp bGVuYW1lKX0KLSAgIFJFQ0VJVkUKLSAgICAgICAgICBTdG9yZXMgZWFjaCBpbmNvbWluZyBmaWxl IHdpdGggaXRzIGxpbmVzIHNvcnRlZCBpbiByZXZlcnNlCi0gICAgICAgICAgb3JkZXIsIHVuZGVy IGl0cyBvd24gbmFtZS4KLQotICAgUkVDRUlWRSAvRklMVEVSOntzb3J0IC1yID4gXHYoZmlsZW5h bWUpfQotICAgICAgICAgIEFzIGFib3ZlLCBidXQgdGhlIGZpbHRlciBpcyB1c2VkIG9ubHkgZm9y IHRoaXMgUkVDRUlWRSBjb21tYW5kLgotCi0gICBTRVQgUkVDRUlWRSBGSUxURVIgc29ydCAtciA+ IFx2KGZpbGVuYW1lKQotICAgUkVDRUlWRSByZXZlcnNlLnR4dAotICAgICAgICAgIFN0b3JlcyBl YWNoIGluY29taW5nIGZpbGUgd2l0aCBpdHMgbGluZXMgc29ydGVkIGluIHJldmVyc2UKLSAgICAg ICAgICBvcmRlciwgdW5kZXIgdGhlIG5hbWUgInJldmVyc2UudHh0Ii4gVGhlIGFjdHVhbCByZXN1 bHQgZGVwZW5kcwotICAgICAgICAgIG9uIHRoZSBGSUxFIENPTExJU0lPTiBzZXR0aW5nLiBJZiBp dCBpcyBPVkVSV1JJVEUgYW5kIG11bHRpcGxlCi0gICAgICAgICAgZmlsZXMgYXJyaXZlLCB0aGVu IGVhY2ggaW5jb21pbmcgZmlsZSBkZXN0cm95cyB0aGUgcHJldmlvdXMgb25lLgotICAgICAgICAg IElmIGl0IGlzIEJBQ0tVUCAodGhlIGRlZmF1bHQpLCBmaWxlbmFtZSBjb25mbGljdHMgYXJlIHJl c29sdmUgYnkKLSAgICAgICAgICBhZGRpbmcgInZlcnNpb24gbnVtYmVycyIgdG8gdGhlIGZpbGVu YW1lczogcmV2ZXJzZS50eHQsCi0gICAgICAgICAgcmV2ZXJzZS50eHQufjF+LCByZXZlcnNlLnR4 dC5+Mn4sIGV0Yy4KLQotICAgU0VUIFJFQ0VJVkUgRklMVEVSIHNvcnQgLXIgPiBcdihmaWxlbmFt ZSkKLSAgIFJFQ0VJVkUgXHYoZmlsZW5hbWUpLnJldmVyc2UKLSAgICAgICAgICBTdG9yZXMgZWFj aCBpbmNvbWluZyBmaWxlIHdpdGggaXRzIGxpbmVzIHNvcnRlZCBpbiByZXZlcnNlCi0gICAgICAg ICAgb3JkZXIsIHVuZGVyIHRoZSBuYW1lIGl0IGFycml2ZWQgd2l0aCwgYnV0IHdpdGggIi5yZXZl cnNlIgotICAgICAgICAgIGFwcGVuZGVkIHRvIGl0LgotCi0gICBTRVQgUkVDRUlWRSBGSUxURVIg c29ydCAtciA+IFx2KGZpbGVuYW1lKQotICAgUkVDRUlWRSBcZmxvd2VyKFx2KGZpbGVuYW1lKSku cmV2ZXJzZQotICAgICAgICAgIExpa2UgdGhlIHByZXZpb3VzIGV4YW1wbGUsIGJ1dCBlbnN1cmVz IHRoYXQgdGhlIGZpbGVuYW1lIGlzCi0gICAgICAgICAgbG93ZXJjYXNlLgotCi0gICAgICAgICAg RXhhbXBsZXMgZm9yIGJpbmFyeSBtb2RlOgotCi0gICBTRVQgUkVDRUlWRSBGSUxURVIgZ3Vuemlw IC1jID4gXHYoZmlsZW5hbWUpCi0gICBSRUNFSVZFCi0gICAgICAgICAgVGhpcyByZWNlaXZlcyBv bmUgb3IgbW9yZSBwcmVzdW1hYmx5IGNvbXByZXNzZWQgZmlsZSBhbmQKLSAgICAgICAgICB1bmNv bXByZXNzZXMgZWFjaCBvbmUgaW50byBhIGZpbGUgaGF2aW5nIHRoZSBzYW1lIG5hbWUgaXQgd2Fz Ci0gICAgICAgICAgc2VudCB3aXRoLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGZpbGUgaXMgc2VudCB3 aXRoIHRoZSBuYW1lCi0gICAgICAgICAgT09GQS5UWFQuR1osIGl0IGlzIHN0b3JlZCB3aXRoIHRo YXQgbmFtZSwgZXZlbiBhZnRlcgotICAgICAgICAgIGRlY29tcHJlc3Npb24uCi0KLSAgIFNFVCBS RUNFSVZFIEZJTFRFUiBndW56aXAgLWMgPiBcdihmaWxlbmFtZSkKLSAgIFJFQ0VJVkUgXGZsb3dl cihcZnN1YnN0cmluZyhcdihmaWxlbmFtZSksMSxcZmxlbmd0aChcdihmaWxlbmFtZSkpLTMpKQot ICAgICAgICAgIExpa2UgdGhlIHByZXZpb3VzIGV4YW1wbGUsIGJ1dCB0aGUgcmVzdWx0aW5nIGZp bGVuYW1lIGhhcyBpdHMKLSAgICAgICAgICByaWdodG1vc3QgdGhyZWUgY2hhcmFjdGVycyByZW1v dmVkIGZyb20gaXQgYW5kIHRoZSByZW1haW5kZXIgaXMKLSAgICAgICAgICBsb3dlcmNhc2VkLiBT byBpZiB0aGUgaW5jb21pbmcgZmlsZW5hbWUgaXMgT09GQS5UWFQuR1osIGl0IGlzCi0gICAgICAg ICAgc3RvcmVkIGFzIG9vZmEudHh0IGFmdGVyIGRlY29tcHJlc3Npb24uCi0KLSAgIE9mIGNvdXJz ZSB5b3UgZG9uJ3Qgd2FudCB0byB0eXBlIHN1Y2ggbG9uZyBoaWRlb3VzIGNvbW1hbmRzLCBzbyB3 ZSBoYXZlCi0gICBhbHNvIGludHJvZHVjZWQgc2V2ZXJhbCBuZXcgZnVuY3Rpb25zOgotCi0gICBc ZnN0cmlweChzdHJpbmdbLGNoYXJhY3Rlcl0pCi0gICAgICAgICAgVGhpcyBmdW5jdGlvbiByZW1v dmVzIHRoZSByaWdodG1vc3Qgc2VnbWVudCBvZiB0aGUgc3RyaW5nIHRoYXQKLSAgICAgICAgICBz dGFydHMgd2l0aCB0aGUgZ2l2ZW4gY2hhcmFjdGVyLiBJZiBubyBjaGFyYWN0ZXIgaXMgZ2l2ZW4s Ci0gICAgICAgICAgcGVyaW9kICguKSBpcyB1c2VkLiBUaHVzIGl0IGlzIG1vc3QgY29udmVuaWVu dGx5IHVzZWQgZm9yCi0gICAgICAgICAgc3RyaXBwaW5nIHRoZSBleHRlbnNpb24gZnJvbSBhIGZp bGVuYW1lIChvciB0aGUgZGVjaW1hbCBwb3J0aW9uCi0gICAgICAgICAgZnJvbSBhIGZsb2F0aW5n LXBvaW50IG51bWJlciB3cml0dGVuIGluIFVTL1VLIHN0eWxlKS4gRXhhbXBsZXM6Ci0KLSAgIFxm c3RyaXB4KE9PRkEuVFhULkdaKSAgICAgICAgICAgICA9PiBPT0ZBLlRYVAotICAgXGZzdHJpcHgo T09GQS5UWFQuR1osLikgICAgICAgICAgID0+IE9PRkEuVFhUCi0gICBcZnN0cmlweChPT0ZBLlRY VC5HWixYKSAgICAgICAgICAgPT4gT09GQS5UCi0gICBcZnN0cmlweChcZnN0cmlweChPT0ZBLlRY VC5HWikpICAgPT4gT09GQQotICAgXGZzdHJpcHgoJDEwMC4wMCkgICAgICAgICAgICAgICAgID0+ ICQxMDAKLQotICAgXGZzdHJpcG4oc3RyaW5nLG51bWJlcikKLSAgICAgICAgICBSZW1vdmVzIHRo ZSByaWdodG1vc3QgbnVtYmVyIGNoYXJhY3RlcnMgZnJvbSB0aGUgc3RyaW5nLgotICAgICAgICAg IEV4YW1wbGVzOgotCi0gICBcZnN0cmlwbihPT0ZBLlRYVC5HWikgICAgICAgICAgICAgPT4gT09G QS5UWFQuR1oKLSAgIFxmc3RyaXBuKE9PRkEuVFhULkdaLDMpICAgICAgICAgICA9PiBPT0ZBLlRY VAotICAgXGZzdHJpcG4oT09GQS5UWFQuR1osNykgICAgICAgICAgID0+IE9PRkEKLQotICAgXGZz dHJpcGIoc3RyaW5nWyxjMVssYzJdXSkKLSAgICAgICAgICBTdHJpcHMgZW5jbG9zaW5nIG1hdGNo aW5nIGJyYWNlcywgYnJhY2tldHMsIHBhcmVudGhlc2VzLCBvcgotICAgICAgICAgIHF1b3RlcyBm cm9tIHRoZSBzdHJpbmcuIFRoZSBzZWNvbmQgYXJndW1lbnQsIGMxLCBzcGVjaWZpZXMgd2hpY2gK LSAgICAgICAgICBraW5kIG9mIGVuY2xvc3VyZSB0byBsb29rIGZvcjsgaWYgbm90IHNwZWNpZmll ZCwgYW55IGVuY2xvc2luZwotICAgICAgICAgICgpLCBbXSwgPD4sIHt9LCAiIiwgJycsIG9yIGAn IGFyZSByZW1vdmVkLiBJZiBjMSBpcyBzcGVjaWZpZWQKLSAgICAgICAgICBhbmQgYzIgaXMgbm90 LCB0aGVuIGlmIGMxIGlzIGFuIG9wZW5pbmcgYnJhY2UsIGJyYWNrZXQsIG9yCi0gICAgICAgICAg cGFyZW50aGVzaXMsIHRoZSBtYXRjaGluZyBjbG9zaW5nIG9uZSBpcyBzdXBwbGllZCBhdXRvbWF0 aWNhbGx5Ci0gICAgICAgICAgYXMgYzIuIElmIGJvdGggYzEgYW5kIGMyIGFyZSBzcGVjaWZpZWQs IHRoZW4gdG8gYmUgc3RyaXBwZWQgdGhlCi0gICAgICAgICAgc3RyaW5nIG11c3QgYmVnaW4gd2l0 aCBjMSBhbmQgZW5kIHdpdGggYzIuIElmIHRoZSBzdHJpbmcgaXMgbm90Ci0gICAgICAgICAgZW5j bG9zZWQgaW4gdGhlIGluZGljYXRlZCBtYW5uZXIsIHRoZSByZXN1bHQgaXMgdGhlIG9yaWdpbmFs Ci0gICAgICAgICAgc3RyaW5nLiBFeGFtcGxlczoKLQotICAgXGZzdHJpcGIoImFiYyIpICAgICAg ICAgICAgICAgICAgID0+IGFiYwotICAgXGZzdHJpcGIoW2FiY10pICAgICAgICAgICAgICAgICAg ID0+IGFiYwotICAgXGZzdHJpcGIoW2FiYykgICAgICAgICAgICAgICAgICAgID0+IFthYmMKLSAg IFxmc3RyaXBiKDxhYmM+KSAgICAgICAgICAgICAgICAgICA9PiBhYmMKLSAgIFxmc3RyaXBiKDxh YmM+LFspICAgICAgICAgICAgICAgICA9PiA8YWJjPgotICAgXGZzdHJpcGIoKGFiYykpICAgICAg ICAgICAgICAgICAgID0+IGFiYwotICAgXGZzdHJpcGIoKGFiYyksWykgICAgICAgICAgICAgICAg ID0+IChhYmMpCi0gICBcZnN0cmlwYigoYWJjKSx7KH0pICAgICAgICAgICAgICAgPT4gYWJjCi0g ICBcZnN0cmlwYigrYWJjKykgICAgICAgICAgICAgICAgICAgPT4gK2FiYysKLSAgIFxmc3RyaXBi KCthYmMrLCspICAgICAgICAgICAgICAgICA9PiBhYmMKLSAgIFxmc3RyaXBiKCthYmMrLCssXikg ICAgICAgICAgICAgICA9PiArYWJjKwotICAgXGZzdHJpcGIoK2FiY14sKyxeKSAgICAgICAgICAg ICAgID0+IGFiYwotICAgXGZzdHJpcGIoJ2FiYycpICAgICAgICAgICAgICAgICAgID0+IGFiYwot ICAgXGZzdHJpcGIoYGFiYycpICAgICAgICAgICAgICAgICAgID0+IGFiYwotICAgXGZzdHJpcGIo YGBhYmMnJykgICAgICAgICAgICAgICAgID0+IGBhYmMnCi0gICBcZnN0cmlwYihcZnN0cmlwYihg YGFiYycnKSkgICAgICAgPT4gYWJjCi0KLSAgICAgICAgICBOb3RpY2UgdGhlIHNwZWNpYWwgc3lu dGF4IHJlcXVpcmVkIGZvciBpbmNsdWRpbmcgYSBsaXRlcmFsCi0gICAgICAgICAgcGFyZW50aGVz aXMgaW4gdGhlIGFyZ3VtZW50IGxpc3QuIEFzIHRoZSBsYXN0IHR3byBleGFtcGxlcwotICAgICAg ICAgIGlsbHVzdHJhdGUsIFxmc3RyaXBiKCkgc3RyaXBzIG9ubHkgb25lIGxldmVsIGF0IGF0IGEg dGltZTsKLSAgICAgICAgICBuZXN0aW5nIGNhbiBiZSB1c2VkIHRvIHN0cmlwIGEgc21hbGwgZml4 ZWQgbnVtYmVyIG9mIGxldmVsczsKLSAgICAgICAgICBsb29wcyBjYW4gYmUgdXNlZCB0byBzdHJp cCBsYXJnZXIgb3IgaW5kZXRlcm1pbmF0ZSBudW1iZXJzIG9mCi0gICAgICAgICAgbGV2ZWxzLgot Ci0gICBcZmxvcChzdHJpbmdbLGNoYXJdKQotICAgICAgICAgIFJlbW92ZXMgdGhlIGxlZnRtb3N0 IHNlZ21lbnQgb2YgdGhlIHN0cmluZyB0aGF0IGVuZHMgd2l0aCB0aGUKLSAgICAgICAgICBnaXZl biBjaGFyYWN0ZXIuIElmIG5vIGNoYXJhY3RlciBpcyBnaXZlbiwgcGVyaW9kICguKSBpcyB1c2Vk LgotICAgICAgICAgIEV4YW1wbGVzOgotCi0gIFxmbG9wKE9PRkEuVFhULkdaKSAgICAgICAgICAg ICAgID0+IFRYVC5HWgotICBcZmxvcChPT0ZBLlRYVC5HWiwuKSAgICAgICAgICAgICA9PiBUWFQu R1oKLSAgXGZsb3AoT09GQS5UWFQuR1osWCkgICAgICAgICAgICAgPT4gVC5HWgotCi0gICAgICAg ICAgVG8gcmVtb3ZlIHRoZSBsZWZ0bW9zdCBudW1iZXIgY2hhcmFjdGVycywganVzdCB1c2UKLSAg ICAgICAgICBcZnN1YnN0cmluZyhzLG51bWJlcisxKS4gVG8gcmV0dXJuIHRoZSByaWdodG1vc3Qg bnVtYmVyCi0gICAgICAgICAgY2hhcmFjdGVycywgdXNlIFxmcmlnaHQocyxudW1iZXIpLgotCi0g ICBTbyB0aGUgaGlkZW91cyBleGFtcGxlOgotCi0gIHJlY2VpdmUgXGZsb3dlcihcZnN1YnN0cmlu ZyhcdihmaWxlbmFtZSksMSxcZmxlbmd0aChcdihmaWxlbmFtZSkpLTMpKQotCi0gICBjYW4gbm93 IGJlIHdyaXR0ZW4gYXM6Ci0KLSAgcmVjZWl2ZSBcZmxvd2VyKFxmc3RyaXB4KFx2KGZpbGVuYW1l KSkpCi0KLSAgIFRoYXQgaXMsIHRoZSBmaWxlbmFtZSBzdHJpcHBlZCBvZiBpdHMgZXh0ZW5zaW9u IGFuZCB0aGVuIGxvd2VyY2FzZWQuCi0gICBUaGlzIGlzIG5vdCBvbmx5IHNob3J0ZXIgYW5kIGxl c3MgaGlkZW91cywgYnV0IGFsc28gZG9lcyBub3QgZGVwZW5kIG9uCi0gICB0aGUgbGVuZ3RoIG9m IHRoZSBleHRlbnNpb24gYmVpbmcgMy4KLQotICAgTm90ZSB0aGF0IHdoZW4gYSByZWNlaXZlIGZp bHRlciBpcyBpbiBlZmZlY3QsIHRoaXMgb3ZlcnJpZGVzIHlvdXIgRklMRQotICAgQ09MTElTSU9O IHNldHRpbmcsIHNpbmNlIEtlcm1pdCBoYXMgbm8gd2F5IG9mIGtub3dpbmcgd2hhdCB0aGUgZmlu YWwKLSAgIGRlc3RpbmF0aW9uIGZpbGVuYW1lIHdpbGwgYmUgKGJlY2F1c2UgaXQgZG9lcyBub3Qg a25vdywgYW5kIGNhbiBub3QgYmUKLSAgIGV4cGVjdGVkIHRvIGtub3csIHRoZSBzeW50YXggb2Yg ZXZlcnkgdmVyc2lvbiBvZiBldmVyeSBjb21tYW5kIHNoZWxsIG9uCi0gICBldmVyeSBwbGF0Zm9y bSBvbiB0aGUgcGxhbmV0KS4KLQotNC4yLjQuIEltcGxpY2l0IFVzZSBvZiBQaXBlcwotCi0gICBJ ZiB5b3Ugd2lzaCwgQy1LZXJtaXQgY2FuIGFsc28gZXhhbWluZSBpbmNvbWluZyBmaWxlbmFtZXMg dG8gc2VlIGlmCi0gICB0aGV5IHN0YXJ0IHdpdGggIiEiLCBhbmQgaWYgc28sIHRoZSBzdWJzZXF1 ZW50IHRleHQgaXMgdHJlYXRlZCBhcyBhCi0gICBjb21tYW5kIHRvIHJlYWQgZnJvbSBvciB3cml0 ZSB0by4gRm9yIGV4YW1wbGUsIGlmIGEgS2VybWl0IGNsaWVudCBpcwotICAgZ2l2ZW4gdGhlIGZv bGxvd2luZyBjb21tYW5kOgotCi0gIGdldCB7IWZpbmdlciB8IHNvcnR9Ci0KLSAgIHRoZSBzZXJ2 ZXIgb24gdGhlIG90aGVyIGVuZCwgaWYgaXQgc3VwcG9ydHMgdGhpcyBmZWF0dXJlLCB3aWxsIHJ1 biB0aGUKLSAgICJmaW5nZXIiIHByb2dyYW0sIHBpcGUgaXRzIHN0YW5kYXJkIG91dHB1dCB0byB0 aGUgInNvcnQiIHByb2dyYW0sIGFuZAotICAgc2VuZCBzb3J0J3Mgc3RhbmRhcmQgb3V0cHV0IGJh Y2sgdG8geW91LiBTaW1pbGFybHksIGlmIHlvdToKLQotICBzZW5kIG9vZmEudHh0ICFzb3J0IC1y ID4gb29mYS5uZXcKLQotICAgb3IsIGVxdWl2YWxlbnRseToKLQotICBzZW5kIG9vZmEudHh0IHsh c29ydCAtciA+IG9vZmEubmV3fQotCi0gICBvcjoKLQotICBzZW5kIC9hcy1uYW1lOnshc29ydCAt ciA+IG9vZmEubmV3fSBvb2ZhLnR4dAotCi0gICB0aGlzIGhhcyB0aGUgcmVjZWl2ZXIgc2VuZCB0 aGUgY29udGVudHMgb2YgdGhlIGluY29taW5nIG9vZmEudHh0IGZpbGUKLSAgIHRvIHRoZSBzb3J0 IHByb2dyYW0sIHdoaWNoIHNvcnRzIHRoZSB0ZXh0IGluIHJldmVyc2Ugb3JkZXIgYW5kIHN0b3Jl cwotICAgdGhlIHJlc3VsdCBpbiBvb2ZhLm5ldy4KLQotICAgVGhpcyB1c2Ugb2YgdGhlIGV4Y2xh bWF0aW9uIG1hcmsgc2hvdWxkIGJlIGZhbWlsaWFyIHRvIFVOSVggdXNlcnMgYXMKLSAgIHRoZSAi YmFuZyIgZmVhdHVyZSB0aGF0IGxldHMgeW91IHJ1biBhbiBleHRlcm5hbCBhcHBsaWNhdGlvbiBv ciBjb21tYW5kCi0gICBmcm9tIHdpdGhpbiBhbm90aGVyIGFwcGxpY2F0aW9uLgotCi0gICBLZXJt aXQncyAiYmFuZyIgZmVhdHVyZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LCBzaW5jZSBpdCBpcyBu b3QgdW5oZWFyZAotICAgZm9yIGZpbGVuYW1lcyB0byBhY3R1YWxseSBiZWdpbiB3aXRoICIhIi4g U28gaWYgeW91IHdhbnQgdG8gdXNlIHRoaXMKLSAgIGZlYXR1cmUsIHlvdSBtdXN0IGVuYWJsZSBp dCB3aXRoIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKLQotICAgU0VUIFRSQU5TRkVSIFBJUEVTIHsg T04sIE9GRiB9Ci0gICAgICAgICAgT04gZW5hYmxlcyB0aGUgcmVjb2duaXRpb24gb2YgIiEiIG5v dGF0aW9uIGluIGluY29taW5nIGZpbGVuYW1lcwotICAgICAgICAgIGR1cmluZyBmaWxlIHRyYW5z ZmVyIGFzIGFuIGluZGljYXRvciB0aGF0IHRoZSByZW1haW5pbmcgdGV4dCBpcwotICAgICAgICAg IHRoZSBuYW1lIG9mIGEgY29tbWFuZC4gT0ZGLCB0aGUgZGVmYXVsdCwgZGlzYWJsZXMgdGhpcyBm ZWF0dXJlCi0gICAgICAgICAgYW5kIHVzZXMgdGhlIHRleHQgYXMgYSBmaWxlbmFtZSBpbiB0aGUg bm9ybWFsIGZhc2hpb24uIFRoaXMKLSAgICAgICAgICBjb21tYW5kIGRvZXMgTk9UIGFmZmVjdCBT RU5EIC9DT01NQU5ELCBHRVQgL0NPTU1BTkQsIENTRU5ELCBldGMuCi0KLSAgIFNvIHVzaW5nIGEg Y29tYmluYXRpb24gb2YgQ1NFTkQgKFNFTkQgL0NPTU1BTkQpIGFuZCB0aGUgImJhbmciIGZlYXR1 cmUsCi0gICB5b3UgY2FuIHRyYW5zZmVyIGEgZGlyZWN0b3J5IHRyZWUgYWxsIGluIG9uZSBjb21t YW5kIChhc3N1bWluZyB0aGUKLSAgIHJlbW90ZSBLZXJtaXQgc3VwcG9ydHMgcGlwZSB0cmFuc2Zl cnMgYW5kIGhhcyB0aGVtIGVuYWJsZWQpOgotCi0gIENTRU5EIHt0YXIgY2YgLSAuIHwgZ3ppcCAt Y30geyFndW56aXAgLWMgfCB0YXIgeGYgLX0KLQotICAgb3I6Ci0KLSAgU0VORCAvQ09NTUFORDp7 dGFyIGNmIC0gLiB8IGd6aXAgLWN9IC9hczp7IWd1bnppcCAtYyB8IHRhciB4ZiAtfQotCi0gICBQ YXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBzeW50YXguIEJyYWNlcyBhcmUgbmVlZGVkIGFyb3Vu ZCB0aGUgY29tbWFuZAotICAgYmVjYXVzZSBpdCBjb250YWlucyBzcGFjZXM7IGJyYWNlcyBhcmUg bmVlZGVkIGFyb3VuZCB0aGUgYXMtbmFtZQotICAgYmVjYXVzZSBpdCBlbmRzIHdpdGggIi0iLiBU aGUgYXMtbmFtZSBtdXN0IGJlZ2luIHdpdGggIiEiIG9yIHJlY2VpdmluZwotICAgS2VybWl0IHdp bGwgbm90IHJlY29nbml6ZSBpdCBhcyBhIGNvbW1hbmQuIFRoZSBDU0VORCBjb21tYW5kIG11c3Qg Tk9UCi0gICBiZWdpbiB3aXRoICIhIiB1bmxlc3MgeW91IGFyZSBydW5uaW5nIGEgY29tbWFuZCB3 aG9zZSBuYW1lIHJlYWxseSBkb2VzCi0gICBzdGFydCB0aGF0IGNoYXJhY3Rlci4KLQotICAgU2lt aWxhcmx5LCB5b3UgaGF2ZSBhIEtlcm1pdCBzZXJ2ZXIgc2VuZCBhIGRpcmVjdG9yeSB0cmVlIHRv IGJlCi0gICB1bnBhY2tlZCBvbiB0aGUgY2xpZW50IGVuZDoKLQotICBDR0VUIHshdGFyIGNmIC0g LiB8IGd6aXAgLWN9IHtndW56aXAgLWMgfCB0YXIgeGYgLX0KLQotICAgb3I6Ci0KLSAgR0VUIC9D T01NQU5EIHshdGFyIGNmIC0gLiB8IGd6aXAgLWN9IC9hczp7Z3VuemlwIC1jIHwgdGFyIHhmIC19 Ci0KLSAgIE5vdGljZSBob3csIGluIHRoaXMgY2FzZSwgdGhlIGJhbmcgaXMgcmVxdWlyZWQgaW4g dGhlIHJlbW90ZSBjb21tYW5kLAotICAgdG8gZGlzdGluZ3Vpc2ggaXQgZnJvbSBhIGZpbGVuYW1l LCBidXQgbm90IGluIHRoZSBsb2NhbCBjb21tYW5kLCBzaW5jZQotICAgYnkgZGVmaW5pdGlvbiBv ZiBDR0VUIChvciBHRVQgL0NPTU1BTkQpLCBpdCBpcyBrbm93biB0byBiZSBhIGNvbW1hbmQuCi0K LSAgIFNFTkQgYW5kIFJFQ0VJVkUgRklMVEVScyBzdXBlcnNlZGUgdGhlIGJhbmcgZmVhdHVyZS4g Rm9yIGV4YW1wbGUsIGlmIGEKLSAgIGZpbGUgYXJyaXZlcyB1bmRlciB0aGUgbmFtZSAiIWd1bnpp cCAtYyB8IHRhciB4ZiAtIiwgYnV0IHRoZSByZWNlaXZpbmcKLSAgIEtlcm1pdCBhbHNvIGhhcyBi ZWVuIGdpdmVuIGEgY29tbWFuZCBsaWtlOgotCi0gIHNldCByZWNlaXZlIGZpbHRlciBzb3J0IC1y ID4gXHYoZmlsZW5hbWUpCi0KLSAgIHRoZW4gdGhlIGluY29taW5nIGRhdGEgd2lsbCBiZSBzb3J0 ZWQgcmF0aGVyIHRoYW4gZ3VuemlwcGVkLgotCi0gICBGaW5hbGx5LCBpZiBTRVQgVFJBTlNGRVIg UElQRVMgaXMgT04gKGFuZCBpbiB0aGlzIGNhc2UsIHRoaXMgbXVzdCBiZQotICAgZG9uZSBpbiB5 b3VyIEMtS2VybWl0IGluaXRpYWxpemF0aW9uIGZpbGUpLCB5b3UgY2FuIHNlbmQgZnJvbSBhIHBp cGUgb24KLSAgIHRoZSBDLUtlcm1pdCBjb21tYW5kIGxpbmU6Ci0KLSAga2VybWl0IC1zICIhZmlu Z2VyIHwgc29ydCAtciIgLWEgdXNlcmxpc3QKLQotICAgSW4gdGhpcyBjYXNlIHRoZSAiZmlsZW5h bWUiIGNvbnRhaW5zIHNwYWNlcyBhbmQgc28gbXVzdCBiZSBxdW90aW5nCi0gICB1c2luZyB5b3Vy IHNoZWxsJ3MgcXVvdGluZyBydWxlcy4KLQotNC4yLjUuIFN1Y2Nlc3MgYW5kIEZhaWx1cmUgb2Yg UGlwZWQgQ29tbWFuZHMKLQotICAgQ29tbWFuZHMgb3IgcHJvZ3JhbXMgc3RhcnRlZCBieSBLZXJt aXQgYXMgYSByZXN1bHQgb2YgQ1NFTkQgb3IgQ1JFQ0VJVkUKLSAgIGNvbW1hbmRzLCBDR0VULCBT RU5EIC9DT01NQU5ELCBSRURJUkVDVCBjb21tYW5kcyAoc2VlIFs0NTVdU2VjdGlvbgotICAgNC4y LjguMiksIGltcGxpY2l0IHVzZSBvZiBwaXBlcywgUlVOIGNvbW1hbmRzLCBhbmQgc28gZm9ydGgs IHNob3VsZAotICAgcmV0dXJuIHRoZWlyIGV4aXQgc3RhdHVzIGNvZGVzIHRvIHRoZSBLZXJtaXQg Y29tbWFuZCB0aGF0IGNhdXNlZCB0aGVtCi0gICB0byBiZSBydW4sIGFuZCB0aGVyZWZvcmUgSUYg U1VDQ0VTUyBhbmQgSUYgRkFJTFVSRSB0ZXN0cyBhZnRlciB0aGVzZQotICAgY29tbWFuZHMgc2hv dWxkIHdvcmsgYXMgZXhwZWN0ZWQuIEZvciBleGFtcGxlOgotCi0gIENTRU5EIGJsYWggPCBmaWxl bmFtZQotCi0gICBzaG91bGQgZmFpbCBpZiB0aGVyZSBpcyBubyBjb21tYW5kIGNhbGxlZCAiYmxh aCIgb3IgaWYgdGhlcmUgaXMgbm8gZmlsZQotICAgY2FsbGVkICJmaWxlbmFtZSIuIEhvd2V2ZXIs IHRoaXMgaXMgbm90IGZvb2xwcm9vZiBhbmQgc29tZXRpbWVzCi0gICBDLUtlcm1pdCBtaWdodCB0 aGluayBhIGNvbW1hbmQgc3VjY2VlZGVkIHdoZW4gaXQgZmFpbGVkLCBvciB2aWNlIHZlcnNhLgot ICAgVGhpcyBpcyBtb3N0IGxpa2VseSB0byBoYXBwZW4gd2hlbiB0aGUgaGlnaGx5IHN5c3RlbS1k ZXBlbmRlbnQgbWV0aG9kcwotICAgdGhhdCBLZXJtaXQgbXVzdCB1c2UgdG8gZGV0ZXJtaW5lIGEg Y29tbWFuZCdzIGV4aXQgc3RhdHVzIGNvZGUgZG8gbm90Ci0gICBzdXBwbHkgdGhlIHJpZ2h0IGlu Zm9ybWF0aW9uLgotCi0gICBJdCBjYW4gYWxzbyBoYXBwZW4gYmVjYXVzZSBzb21lIGNvbW1hbmRz IG1pZ2h0IGRlZmluZSBzdWNjZXNzIGFuZAotICAgZmFpbHVyZSBkaWZmZXJlbnRseSBmcm9tIHdo YXQgeW91IGV4cGVjdCwgb3IgYmVjYXVzZSB5b3UgYXJlIHVzaW5nIGEKLSAgIHBpcGVsaW5lIGNv bXBvc2VkIG9mIG1hbnkgY29tbWFuZHMsIGFuZCBvbmUgb2YgdGhlbSBmYWlscyB0byBwYXNzCi0g ICBmYWlsaW5nIGV4aXQgc3RhdHVzIGNvZGVzIHVwIHRoZSBjaGFpbi4gVGhlIG1vc3QgbGlrZWx5 IGN1bHByaXQgaXMgdGhlCi0gICBzaGVsbCBpdHNlbGYsIHdoaWNoIGluIG1vc3QgY2FzZXMgbXVz dCBiZSBpbnRlcnBvc2VkIGJldHdlZW4gS2VybWl0IGFuZAotICAgYW55IGV4dGVybmFsIHByb2dy YW0gdG8gYmUgcnVuLgotCi0gICBJbiBhbnkgY2FzZSwgeW91IGNhbiBleGFtaW5lIHRoZSBmb2xs b3dpbmcgdmFyaWFibGUgdG8gZmluZCBvdXQgdGhlCi0gICBleGl0IHN0YXR1cyBjb2RlIHJldHVy bmVkIHRvIEtlcm1pdCBieSB0aGUgcHJvY2VzcyBtb3N0IHJlY2VudGx5IHJ1biBieQotICAgYW55 IGNvbW1hbmQgdGhhdCBydW5zIGV4dGVybmFsIGNvbW1hbmRzIG9yIHByb2dyYW1zLCBpbmNsdWRp bmcgQ1NFTkQsCi0gICBDUkVDRUlWRSwgUkVESVJFQ1QsIFJVTiwgZXRjOgotCi0gIFx2KHBleGl0 c3RhdCkKLQotICAgSW4gVU5JWCwgV2luZG93cyBhbmQgT1MvMiwgdGhlIHZhbHVlIHNob3VsZCBi ZSAtMiBpZiBubyBjb21tYW5kIGhhcwotICAgYmVlbiBydW4geWV0LCAwIGlmIHRoZSBtb3N0IHJl Y2VudCBjb21tYW5kIHN1Y2NlZWRlZCwgLTEsIC0zLCBvciAtNCBpZgotICAgdGhlcmUgd2FzIGFu IGludGVybmFsIGVycm9yLCBhbmQgYSBwb3NpdGl2ZSBudW1iZXIgcmV0dXJuZWQgYnkgdGhlCi0g ICBjb21tYW5kIGl0c2VsZiBpZiB0aGUgY29tbWFuZCBmYWlsZWQuIElmIHRoZSBudW1iZXIgaXMg aW4gdGhlIHJhbmdlCi0gICAxLTEyNywgdGhpcyBpcyB0aGUgcHJvZ3JhbSdzIGV4aXQgc3RhdHVz IGNvZGUuIElmIGl0IGlzIDEyOCBvciBncmVhdGVyLAotICAgdGhpcyBpcyBzdXBwb3NlZCB0byBp bmRpY2F0ZSB0aGF0IHRoZSBjb21tYW5kIG9yIHByb2dyYW0gd2FzCi0gICBpbnRlcnJ1cHRlZCBv ciB0ZXJtaW5hdGVkIGZyb20gb3V0c2lkZSBpdHNlbGYuCi0KLSAgIEluIFdpbmRvd3MgOTUgYW5k IDk4LCB0aGUgcmV0dXJuIHZhbHVlcyBvZiB0aGUgZGVmYXVsdCBzaGVsbCBhcmUKLSAgIHVucmVs aWFibGU7IHZhcmlvdXMgdGhpcmQtcGFydHkgc2hlbGxzIGNhbiBiZSB1c2VkIHRvIHdvcmsgYXJv dW5kIHRoaXMKLSAgIGRlZmljaWVuY3kuCi0KLSAgIEluIFZNUywgaXQgaXMgdGhlIGFjdHVhbCBl eGl0IHN0YXR1cyBjb2RlIG9mIHRoZSBjb21tYW5kIHRoYXQgd2FzIHJ1bi4KLSAgIFRoaXMgaXMg YW4gb2RkIG51bWJlciBpZiB0aGUgY29tbWFuZCBzdWNjZWVkZWQsIGFuZCBhbiBldmVuIG51bWJl ciBpZgotICAgaXQgZmFpbGVkLiBZb3UgY2FuIHNlZSB0aGUgYXNzb2NpYXRlZCBtZXNzYWdlIGFz IGZvbGxvd3M6Ci0KLSAgcnVuIHdyaXRlIHN5cyRvdXRwdXQgZiRtZXNzYWdlKFx2KHBleGl0c3Rh dCkpCi0KLSAgIE9yLCBtb3JlIGNvbnZlbmllbnRseSwgdXNlIHRoZSBuZXcgS2VybWl0IGZ1bmN0 aW9uOgotCi0gIGVjaG8gXGZlcnJzdHJpbmcoXHYocGV4aXRzdGF0KSkKLQotICAgd2hpY2ggY29u dmVydHMgYSBzeXN0ZW0gZXJyb3IgY29kZSAobnVtYmVyKSB0byB0aGUgY29ycmVzcG9uZGluZwot ICAgbWVzc2FnZS4KLQotNC4yLjYuIENhdXRpb25zIGFib3V0IFVzaW5nIFBpcGVzIHRvIFRyYW5z ZmVyIERpcmVjdG9yeSBUcmVlcwotCi0gICBBbHRob3VnaCB1dGlsaXRpZXMgc3VjaCBhcyB0YXIg YW5kIHppcC91bnppcCBtaWdodCBiZSBhdmFpbGFibGUgb24KLSAgIGRpZmZlcmVudCBwbGF0Zm9y bXMgKHN1Y2ggYXMgVU5JWCBhbmQgV2luZG93cyksIHRoaXMgZG9lcyBub3QKLSAgIG5lY2Vzc2Fy aWx5IG1lYW4geW91IGNhbiB1c2UgdGhlbSBzdWNjZXNzZnVsbHkgdG8gdHJhbnNmZXIgZGlyZWN0 b3J5Ci0gICB0cmVlcyBiZXR3ZWVuIHVubGlrZSBwbGF0Zm9ybXMuIEZvciBleGFtcGxlOgotCi0g IENTRU5EIHt0YXIgY2YgLSAuIHwgZ3ppcCAtY30geyFndW56aXAgLWMgfCB0YXIgeGYgLX0KLQot ICAgd2hlbiB1c2VkIGZyb20gVU5JWCB0byBXaW5kb3dzIHdpbGwgaGF2ZSBzYXRpc2ZhY3Rvcnkg cmVzdWx0cyBmb3IKLSAgIGJpbmFyeSBmaWxlcywgYnV0IG5vdCBmb3IgdGV4dCBmaWxlcy4gVU5J WCB0ZXh0IGZpbGVzIGhhdmUgbGluZXMgZW5kaW5nCi0gICB3aXRoIExpbmVmZWVkIChMRikgb25s eSwgd2hlcmVhcyBXaW5kb3dzIHRleHQgZmlsZXMgaGF2ZSBsaW5lcyBlbmRpbmcKLSAgIGluIENh cnJpYWdlIFJldHVybiBhbmQgTGluZWZlZWQgKENSTEYpLiBUaHVzIGFueSB0ZXh0IGZpbGVzIHRo YXQgd2VyZQotICAgaW4gdGhlIGFyY2hpdmUgZm9ybWVkIGJ5IHRoZSBmaXJzdCB0YXIgY29tbWFu ZCB3aWxsIGJlIHVucGFja2VkIGJ5IHRoZQotICAgc2Vjb25kIHRhciBjb21tYW5kIGluIHRoZWly IG9yaWdpbmFsIGZvcm0sIGFuZCB3aWxsIGRpc3BsYXkgYW5kIHByaW50Ci0gICBpbmNvcnJlY3Rs eSBpbiBXaW5kb3dzIChleGNlcHQgaW4gYXBwbGljYXRpb25zIHRoYXQgaGF2ZSBiZWVuCi0gICBl eHBsaWNpdGx5IGNvZGVkIHRvIGhhbmRsZSBVTklYLWZvcm1hdCB0ZXh0IGZpbGVzKS4gT24gdGhl IG90aGVyIGhhbmQKLSAgIGlmIHlvdSB0b2xkIGd6aXAgdG8gdXNlICJ0ZXh0IG1vZGUiIHRvIGRv IHJlY29yZCBmb3JtYXQgY29udmVyc2lvbgotICAgKGFzc3VtaW5nIHRoZXJlIHdhcyBhIHdheSB0 byB0ZWxsIGl0LCBhcyB0aGVyZSBpcyB3aXRoIG1vc3QgInppcCIKLSAgIHByb2dyYW1zKSwgdGhp cyB3b3VsZCBkZXN0cm95IGFueSBiaW5hcnkgZmlsZXMgaW4gdGhlIGFyY2hpdmUuCi0KLSAgIEZ1 cnRoZXJtb3JlLCBpZiB0aGUgYXJjaGl2ZSBjb250YWlucyB0ZXh0IGZpbGVzIHRoYXQgYXJlIHdy aXR0ZW4gaW4KLSAgIGxhbmd1YWdlcyBvdGhlciB0aGFuIEVuZ2xpc2gsIHRoZSAic3BlY2lhbCIg KGFjY2VudGVkIGFuZC9vciBub24tUm9tYW4pCi0gICBjaGFyYWN0ZXJzIGFyZSBOT1QgdHJhbnNs YXRlZCwgYW5kIGFyZSB0aGVyZWZvcmUgbGlrZWx5IHNob3cgdXAgYXMKLSAgIGdpYmJlcmlzaCBv biB0aGUgdGFyZ2V0IHN5c3RlbS4gRm9yIGV4YW1wbGUsIFdlc3QgRXVyb3BlYW4gbGFuZ3VhZ2Vz Ci0gICBhcmUgdXN1YWxseSBlbmNvZGVkIGluIElTTyBMYXRpbiBBbHBoYWJldCAxIGluIFVOSVgs IGJ1dCBpbiBQQyBjb2RlCi0gICBwYWdlIDg1MCBvbiB0aGUgUEMuIENhcGl0YWwgQSB3aXRoIGFj dXRlIGFjY2VudCBpcyBjb2RlIHBvaW50IDE5MwotICAgKGRlY2ltYWwpIExhdGluLTEsIGJ1dCAx ODEgaW4gQ1A4NTAuIFNvIEEtYWN1dGUgaW4gdGhlIFVOSVggZmlsZQotICAgYmVjb21lcyBNaWRk bGUgQm94IEJvdHRvbSBvbiB0aGUgUEMsIGFuZCBzaW1pbGFybHkgZm9yIGFsbCB0aGUgb3RoZXIK LSAgIHNwZWNpYWwgY2hhcmFjdGVycywgYW5kIGZvciBhbGwgb3RoZXIgbGFuZ3VhZ2VzIC0tIEdy ZWVrLCBSdXNzaWFuLAotICAgSGVicmV3LCBKYXBhbmVzZSwgZXRjLgotCi0gICBTbyB3aGVuIHRy YW5zZmVycmluZyB0ZXh0IGZpbGVzIGJldHdlZW4gdW5saWtlIHBsYXRmb3JtcywgeW91IHNob3Vs ZAotICAgdXNlIGRpcmVjdCBLZXJtaXQgZmlsZSB0cmFuc2ZlcnMgc28gS2VybWl0IGNhbiBhcHBs eSB0aGUgbmVlZGVkCi0gICByZWNvcmQtZm9ybWF0IGFuZCBjaGFyYWN0ZXItc2V0IHRyYW5zZm9y bWF0aW9ucy4gVXNlIHBpcGVsaW5lcwotICAgY29udGFpbmluZyBhcmNoaXZlcnMgbGlrZSB0YXIg b3IgemlwIG9ubHkgaWYgYWxsIHRoZSBmaWxlcyBhcmUgYmluYXJ5Ci0gICBvciB0aGUgdHdvIHN5 c3RlbXMgdXNlIHRoZSBzYW1lIHJlY29yZCBmb3JtYXQgYW5kIGNoYXJhY3RlciBzZXQgZm9yCi0g ICB0ZXh0IGZpbGVzLgotCi0gICBBbHNvIHNlZSBbNDU2XVNlY3Rpb25zIDQuMywgWzQ1N100LjEw LCBbNDU4XTQuMTEsIGFuZCBbNDU5XTQuMTUgZm9yIGhvdwotICAgdG8gdHJhbnNmZXIgZGlyZWN0 b3J5IHRyZWVzIGJldHdlZW4gYm90aCBsaWtlIGFuZCB1bmxpa2Ugc3lzdGVtcwotICAgZGlyZWN0 bHkgd2l0aCBLZXJtaXQuCi0KLTQuMi43LiBQaXBlcyBhbmQgRW5jcnlwdGlvbgotCi0gICBPZiBj b3Vyc2UgcGlwZWxpbmVzIGNvdWxkIGJlIHVzZWQgZm9yIGVuY3J5cHRlZCBmaWxlIHRyYW5zZmVy cywKLSAgIGFzc3VtaW5nIHByb3BlciBwcmVjYXV0aW9ucyBjb3VsZCBiZSB0YWtlbiBjb25jZXJu aW5nIHRoZSB0cmFuc21pc3Npb24KLSAgIG9mIHRoZSBrZXkuIEJ1dCB0aGVyZSBpcyByYXJlbHkg YSBnb29kIHdheSB0byBkbyB0aGlzLiBUbyBpbGx1c3RyYXRlCi0gICB1c2luZyBVTklYIGNyeXB0 OgotCi0gIGNzZW5kIHtjcnlwdCBrZXkgPCBmaWxlbmFtZX0geyFjcnlwdCBrZXkgPiBmaWxlbmFt ZX0KLQotICAgT3IsIG1vcmUgYW1iaXRpb3VzbHk6Ci0KLSAgY3NlbmQge3RhciBjZiAtIC4gfCBn emlwIC1jIHwgY3J5cHQga2V5fSB7IWNyeXB0IGtleSB8IGd1bnppcCAtYyB8IHRhciB4ZiAtfQot Ci0gICB0cmFuc21pdHMgdGhlIGtleSBpbiB0aGUgZmlsZSBoZWFkZXIgcGFja2V0IGFzIHBhcnQg b2YgdGhlIChjbGVhci10ZXh0KQotICAgcmVtb3RlIGNvbW1hbmQsIGRlZmVhdGluZyB0aGUgZW50 aXJlIHB1cnBvc2Ugb2YgZW5jcnlwdGluZyB0aGUgZmlsZQotICAgZGF0YS4KLQotICAgQnV0IGlm IHlvdSBhcmUgY29ubmVjdGVkIGluIHRlcm1pbmFsIG1vZGUgdG8gdGhlIHJlbW90ZSBjb21wdXRl ciBhbmQKLSAgIHR5cGU6Ci0KLSAgY3JlY2VpdmUge2NyeXB0IGtleSA+IGZpbGVuYW1lfQotCi0g ICBhdCB0aGUgcmVtb3RlIEtlcm1pdCBwcm9tcHQsIHlvdSBoYXZlIGFsc28gdHJhbnNtaXR0ZWQg dGhlIGtleSBpbiBjbGVhcgotICAgdGV4dCBvdmVyIHRoZSBjb21tdW5pY2F0aW9ucyBsaW5rLgot Ci0gICBBdCBwcmVzZW50LCB0aGUgb25seSBzZWN1cmUgd2F5IHRvIHVzZSBDU0VORCBhbmQgQ1JF Q0VJVkUgd2l0aCBhbgotICAgZW5jcnlwdGlvbiBmaWx0ZXIgaXMgdG8gaGF2ZSBhIGh1bWFuIG9w ZXJhdG9yIGF0IGJvdGggZW5kcywgc28gdGhlIGtleQotICAgZG9lcyBub3QgaGF2ZSB0byBiZSB0 cmFuc21pdHRlZC4KLQotICAgVGhlb3JldGljYWxseSBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0byB1 c2UgUEdQIHNvZnR3YXJlIChQcmV0dHkgR29vZAotICAgUHJpdmFjeSwgYnkgUGhpbCBaaW1tZXJt YW4sIFBoaWwncyBQcmV0dHkgR29vZCBTb2Z0d2FyZSkgdG8gYXZvaWQga2V5Ci0gICB0cmFuc21p c3Npb24gKHNpbmNlIFBHUCB1c2VzIHNlcGFyYXRlIHB1YmxpYyBhbmQgcHJpdmF0ZSBrZXkgYW5k ICJsZXRzCi0gICB5b3UgY29tbXVuaWNhdGUgc2VjdXJlbHkgd2l0aCBwZW9wbGUgeW91J3ZlIG5l dmVyIG1ldCwgd2l0aCBubyBzZWN1cmUKLSAgIGNoYW5uZWxzIG5lZWRlZCBmb3IgcHJpb3IgZXhj aGFuZ2Ugb2Yga2V5cyIpLCBidXQgdGhlIHNwZWNpZmljIG1ldGhvZAotICAgaGFzIHlldCB0byBi ZSB3b3JrZWQgb3V0LgotCi0gICAgIEhJTlQ6IFNlZSB0aGUgUEdQIFVzZXIncyBHdWlkZSwgZS5n LiBhdDoKLSAgICAgWzQ2MF1odHRwOi8vd3d3LnRlbHN0cmEuY29tLmF1L2RvY3MvUEdQLwotICAg ICBFc3BlY2lhbGx5IHRoZSB0b3BpYyAiVXNpbmcgUEdQIGFzIGEgVU5JWC1TdHlsZSBGaWx0ZXIi OgotICAgICBbNDYxXWh0dHA6Ly93d3cudGVsc3RyYS5jb20uYXUvZG9jcy9QR1AvcGdwZG9jMi9w Z3Bkb2MyXzE3Lmh0bWwKLQotICAgSW4gYW55IGNhc2UsIGJldHRlciBhbmQgbW9yZSBjb252ZW5p ZW50IHNlY3VyaXR5IG9wdGlvbnMgYXJlIG5vdwotICAgYXZhaWxhYmxlOiBLZXJiZXJvcyBhdXRo ZW50aWNhdGlvbiBhbmQgZW5jcnlwdGlvbiAoWzQ2Ml1DTElDSyBIRVJFIGZvcgotICAgZGV0YWls cykgYW5kIHRoZSBuZXcgYWJpbGl0eSB0byBydW4gQy1LZXJtaXQgInRob3VnaCIgb3RoZXIKLSAg IGNvbW11bmljYXRpb24gcHJvZ3JhbXMsIGRlc2NyaWJlZCBpbiBbNDYzXVNlY3Rpb24gMi43Lgot Ci00LjIuOC4gQ29tbWFuZHMgYW5kIEZ1bmN0aW9ucyBSZWxhdGVkIHRvIFBpcGVzCi0KLTQuMi44 LjEuIFRoZSBPUEVOICFSRUFEIGFuZCBPUEVOICFXUklURSBDb21tYW5kcwotCi0gICBUaGVzZSBh cmUgZGVzY3JpYmVkIGluIFs0NjRdVXNpbmcgQy1LZXJtaXQsIGFuZCBhcmUgZ2VuZXJhbGx5IHVz ZWZ1bAotICAgd2l0aCByZWFkaW5nIG91dHB1dCBmcm9tIGNvbW1hbmRzIHRoYXQgcHJvZHVjZSBt b3JlIHRoYW4gb25lIGxpbmUgb24KLSAgIHRoZWlyIHN0YW5kYXJkIG91dHB1dCwgb3Igd3JpdGlu ZyBtdWx0aXBsZSBsaW5lcyBpbnRvIGNvbW1hbmRzIHRoYXQKLSAgIGFjY2VwdCB0aGVtIG9uIHRo ZWlyIHN0YW5kYXJkIGlucHV0LgotCi0gICBJbiBDLUtlcm1pdCA3LjAgQ0xPU0UgIVJFQUQgaXMg YWNjZXB0ZWQgYXMgYSBzeW5vbnltIGZvciBDTE9TRSBSRUFELAotICAgYW5kIENMT1NFICFXUklU RSBmb3IgQ0xPU0UgV1JJVEUuCi0KLSAgIFRlc3RpbmcgdGhlIHN1Y2Nlc3MgYW5kIGZhaWx1cmUg b2YgdGhlc2UgY29tbWFuZHMsIGhvd2V2ZXIsIGNhbiBiZSBhCi0gICBiaXQgdHJpY2t5LiBDb25z aWRlcjoKLQotICBvcGVuICFyZWFkIGxhbGFza2pmc2xka2Zqc2xka2ZqCi0KLSAgICh3aGVyZSAi bGFsYXNramZzbGRrZmpzbGRrZmoiIGlzIG5laXRoZXIgYSB2YWxpZCBjb21tYW5kIG5vciB0aGUg bmFtZQotICAgb2YgYSBwcm9ncmFtIG9yIHNjcmlwdCB0aGF0IGNhbiBiZSBydW4pLiBPUEVOICFS RUFELCBpbiBVTklYIGF0IGxlYXN0LAotICAgdHJhbnNsYXRlcyB0aGlzIGludG8gZXhlY2woc2hl bGxwYXRoLHNoZWxsbmFtZSwiLWMiLGNvbW1hbmQpLiBUaGlzCi0gICBtZWFucyBpdCBzdGFydHMg eW91ciBwcmVmZXJyZWQgc2hlbGwgKGUuZy4gZnJvbSB0aGUgU0hFTEwgZW52aXJvbm1lbnQKLSAg IHZhcmlhYmxlKSBhbmQgYXNrcyBpdCB0byBleGVjdXRlIHRoZSBnaXZlbiBjb21tYW5kLiBJdCBt dXN0IGJlIHRoaXMKLSAgIHdheSwgYmVjYXVzZSB5b3VyIGNvbW1hbmQgY2FuIGJlIGEgZWl0aGVy IGFuIGludGVybmFsIHNoZWxsIGNvbW1hbmQKLSAgICh3aGljaCBvbmx5IHlvdXIgc2hlbGwgY2Fu IGV4ZWN1dGUpIG9yIGFuIGV4dGVybmFsIGNvbW1hbmQsIHdoaWNoIG9ubHkKLSAgIHlvdXIgc2hl bGwga25vd3MgaG93IHRvIGZpbmQgKGl0IGtub3dzIHlvdXIgUEFUSCBhbmQgaW50ZXJwcmV0cywg ZXRjKS4KLSAgIFRoZXJlZm9yZSB1bmxlc3MgT1BFTiAhUkVBRCBjYW4ndCBzdGFydCB5b3VyIHNo ZWxsLCBpdCBhbHdheXMgc3VjY2VlZHMuCi0KLSAgIENvbnRpbnVpbmcgd2l0aCB0aGUgbm9uZXhp c3RlbnQtY29tbWFuZCBleGFtcGxlOgotCi0gIEMtS2VybWl0PiBvcGVuICFyZWFkIGxhbGFza2pm c2xka2Zqc2xka2ZqCi0gIEMtS2VybWl0PiBzdGF0dXMKLSAgIFNVQ0NFU1MKLSAgQy1LZXJtaXQ+ IHJlYWQgbGluZQotICBDLUtlcm1pdD4gc3RhdHVzCi0gICBTVUNDRVNTCi0gIEMtS2VybWl0PiBl Y2hvICJcbShsaW5lKSIKLSAgImJhc2g6IGxhbGFza2pmc2xka2Zqc2xka2ZqOiBjb21tYW5kIG5v dCBmb3VuZCIKLSAgQy1LZXJtaXQ+IGNsb3NlIHJlYWQKLSAgQy1LZXJtaXQ+IHN0YXR1cwotICAg RkFJTFVSRQotICBDLUtlcm1pdD4KLQotICAgSW4gb3RoZXIgd29yZHMsIHRoZSBmYWlsdXJlIGNh biBub3QgYmUgZGV0ZWN0ZWQgb24gT1BFTiwgc2luY2UgdGhlIE9QRU4KLSAgIGNvbW1hbmQgc3Vj Y2VlZHMgaWYgaXQgY2FuIHN0YXJ0IHlvdXIgc2hlbGwuIEl0IGNhbid0IGJlIGRldGVjdGVkIG9u Ci0gICBSRUFELCBzaW5jZSBhbGwgdGhpcyBkb2VzIGlzIHJlYWQgb3V0cHV0IGZyb20gdGhlIHNo ZWxsLCB3aGljaCBpbiB0aGlzCi0gICBjYXNlIGhhcHBlbnMgdG8gYmUgYW4gZXJyb3IgbWVzc2Fn ZS4gSG93ZXZlciwgZmFpbHVyZSBJUyBkZXRlY3RlZCB1cG9uCi0gICBjbG9zZSwgc2luY2UgdGhp cyBpcyB0aGUgb2NjYXNpb24gdXBvbiB3aGljaCB0aGUgc2hlbGwgZ2l2ZXMgS2VybWl0IGl0cwot ICAgZXhpdCBzdGF0dXMgY29kZS4KLQotICAgRm9yIGFuIGlsbHVzdHJhdGlvbiBvZiB0aGlzIHNp dHVhdGlvbiwgc2VlIFs0NjVdU2VjdGlvbiAyLjE0LgotCi00LjIuOC4yLiBUaGUgUkVESVJFQ1Qg Q29tbWFuZAotCi0gICBBIHNlY29uZCBtZXRob2Qgb2YgSS9PIHJlZGlyZWN0aW9uIGlzIG9mZmVy ZWQgYnkgdGhlIFJFRElSRUNUIGNvbW1hbmQuCi0gICBUaGlzIGlzIGEgcmF0aGVyIGFkdmFuY2Vk IGFuZCB0cmlja3kgZmVhdHVyZSB0aGF0IGlzIHByZXNlbnRseQotICAgc3VwcG9ydGVkIG9ubHkg aW4gVU5JWCBDLUtlcm1pdCwgaW4gT1MtOSBDLUtlcm1pdCwgYW5kIGluIEtlcm1pdCA5NS4KLSAg IFN5bnRheDoKLQotICAgUkVESVJFQ1QgY29tbWFuZAotICAgICAgICAgIFJ1bnMgdGhlIGdpdmVu IGNvbW1hbmQsIHNlbmRpbmcgaXRzIHN0YW5kYXJkIG91dHB1dCB0byB0aGUKLSAgICAgICAgICBj dXJyZW50IGNvbW11bmljYXRpb25zIGNoYW5uZWwgKFNFVCBMSU5FLCBTRVQgUE9SVCwgb3IgU0VU IEhPU1QKLSAgICAgICAgICBjb25uZWN0aW9uKSwgYW5kIHJlYWRpbmcgaXRzIHN0YW5kYXJkIGlu cHV0IGZyb20gdGhlIHNhbWUKLSAgICAgICAgICBjb25uZWN0aW9uLiBXb3JrcyBvbmx5IGluIGxv Y2FsIG1vZGUgLS0gaS5lLiBhIGNvbm5lY3Rpb24gaXMKLSAgICAgICAgICByZXF1aXJlZCAtLSBh bmQgdGhlbiBvbmx5IGlmIHRoZSBnaXZlbiBjb21tYW5kIHVzZXMgU3RhbmRhcmQKLSAgICAgICAg ICBJL08uCi0KLSAgIEV4YW1wbGU6Ci0KLSAgcmVkaXJlY3QgZmluZ2VyCi0KLSAgIHJ1bnMgdGhl IGxvY2FsICJmaW5nZXIiIGNvbW1hbmQgYW5kIHNlbmRzIGl0cyBvdXRwdXQgb3ZlciB0aGUKLSAg IGNvbm5lY3Rpb24gYXMgcGxhaW4gdGV4dCwgd2hlcmUgcHJlc3VtYWJseSB0aGVyZSBpcyBhIHBy b2Nlc3Mgc2V0IHVwIHRvCi0gICByZWFkIGl0LiBBbm90aGVyIGV4YW1wbGU6Ci0KLSAgcmVkaXJl Y3QgZmluZ2VyIHwgc29ydCAtcgotCi0gICBzaG93cyB0aGUgdXNlIG9mIGEgcGlwZWxpbmUuCi0K LSAgIE5vdGU6IFJFRElSRUNUIGRpZmZlcnMgZnJvbSBDU0VORC9DUkVDRUlWRSBpbiB0d28gaW1w b3J0YW50IHdheXM6ICgxKQotICAgaXQgZG9lcyBub3QgdXNlIHRoZSBLZXJtaXQgcHJvdG9jb2ws IGFuZCAoMikgaXQgdXNlcyBhIGJpZGlyZWN0aW9uYWwKLSAgIHBpcGUgcmF0aGVyIHRoYW4gYSBv bmUtd2F5IHBpcGUuCi0KLSAgIFRoZSBwcmltYXJ5IHVzZSBvZiB0aGUgUkVESVJFQ1QgY29tbWFu ZCBpcyB0byBydW4gZXh0ZXJuYWwgcHJvdG9jb2xzLAotICAgc3VjaCBhcyBzei9yeiBpbiBVTklY IGZvciBaTU9ERU0sIHdoZW4gdGhleSB3b3JrIG92ZXIgU3RhbmRhcmQgSS9PKCopLgotICAgRXhh bXBsZToKLQotICBzZXQgaG9zdCB4eXpjb3JwLmNvbQotICAobG9naW4sIGV0YykKLSAgcmVkaXJl Y3Qgc3ogb29mYS56aXAKLQotICAgbGV0cyB5b3UgbWFrZSBhIFRlbG5ldCBjb25uZWN0aW9uIHdp dGggQy1LZXJtaXQgYW5kIHRoZW4gZG8gYSBaTU9ERU0KLSAgIHRyYW5zZmVyIG92ZXIgaXQuIFpN T0RFTSBwcm90b2NvbCBtZXNzYWdlcyBnbyBib3RoIHdheXMgb3ZlciB0aGUgc2FtZQotICAgY29u bmVjdGlvbiBzaW11bHRhbmVvdXNseS4KLQotICAgSXQgaXMgcG9zc2libGUgdG8gdXNlIEMtS2Vy bWl0IG9uIFVOSVggYXMgeW91ciBQUFAgZGlhbGVyIGFuZCB0aGVuIHRvCi0gICBSRURJUkVDVCB0 aGUgY29ubmVjdGlvbiB0byB0aGUgUFBQIHNvZnR3YXJlLCBidXQgQy1LZXJtaXQgNy4wIG9mZmVy cyBhCi0gICBiZXR0ZXIgYXBwcm9hY2ggdG8gUFBQIGRpYWxpbmcgaW4gaXRzIG5ldyBFWEVDIGNv bW1hbmQgKFs0NjZdU2VjdGlvbgotICAgMS4yMykuCi0KLSAgIEluIHRoZW9yeSwgeW91IGNhbiBh bHNvIHJlZGlyZWN0IGFuIGludGVyYWN0aXZlIHByb2Nlc3MuIEZvciBleGFtcGxlLAotICAgc3Vw cG9zZSB5b3UgdGVsbCBLZXJtaXQgOTUgdG8gd2FpdCBmb3IgYW4gaW5jb21pbmcgVENQL0lQIGNv bm5lY3Rpb246Ci0KLSAgc2V0IGhvc3QgKiAzMDAwCi0KLSAgIGFuZCB0aGVuIHRlbGwgQy1LZXJt aXQgb24gVU5JWCB0bzoKLQotICBzZXQgaG9zdCBrZXJtaXQ5NWhvc3RuYW1lIDMwMDAKLSAgcmVk aXJlY3Qga3NoCi0KLSAgIGFuZCB0aGVuIHRlbGwgS2VybWl0IDk1IHRvIENPTk5FQ1Q6IG5vdyB5 b3UgYXJlIHRhbGtpbmcgdG8gdGhlIFVOSVgKLSAgIEstc2hlbGw7IHlvdSBjYW4gZ2l2ZSBjb21t YW5kcyAocHdkLCBscywgZXRjKSBhbmQgc2VlIHRoZSByZXN1bHRzLiBJbgotICAgcHJhY3RpY2Us IHRoZSBLLXNoZWxsJ3MgdGVybWluYWwgbW9kZXMgYXJlIG1lc3NlZCB1cCBiZWNhdXNlIChhKSBp dCBpcwotICAgbm90IGdvaW5nIHRocm91Z2ggdGhlIFVuaXggdGVybWluYWwgZHJpdmVyLCBhbmQg KGIpIGl0IGlzICJzbWFydCIgYW5kCi0gICBrbm93cyBpdCBpcyBiZWluZyByZWRpcmVjdGVkLCBh bmQgc28gYWN0cyBpbiBhIGRlY2lkZWRseSBpbmhvc3BpdGFibGUKLSAgIG1hbm5lciAob3RoZXIg YXBwbGljYXRpb25zIGxpa2UgRU1BQ1MsIHZpLCBldGMsIHNpbXBseSByZWZ1c2UgdG8gcnVuIGlm Ci0gICB0aGVpciBzdGFuZGFyZCBpL28gaGFzIGJlZW4gcmVkaXJlY3RlZCkuCi0KLSAgICAgKCop IFRoZSBwdWJsaWNseS1kaXN0cmlidXRlZCBzei9yeiBwcm9ncmFtcyBkbyBub3Qgd29yayBhcyBj bGllbnRzLgotICAgICBIb3dldmVyLCBPbWVuIFRlY2hub2xvZ3kgZG9lcyBvZmZlciBhbiB1cC10 by1kYXRlIHJlZGlyZWN0YWJsZQotICAgICBjbGllbnQgWFlaTU9ERU0gcHJvZ3JhbSBjYWxsZWQg Y3J6c3ouCi0KLTQuMi44LjMuIFJlY2VpdmluZyBNYWlsIGFuZCBQcmludCBKb2JzCi0KLSAgIEFz IG9mIDcuMCwgYW5kIGluIFVOSVggb25seSwgZmlsZXMgdGhhdCBhcmUgc2VudCB0byBDLUtlcm1p dCBhcyBtYWlsCi0gICAod2hlbiB0aGUgb3RoZXIgS2VybWl0IHVzZXMgYSBNQUlMIG9yIFNFTkQg L01BSUwgY29tbWFuZCkgb3IgdG8gYmUKLSAgIHByaW50ZWQgKHZpYSBSRU1PVEUgUFJJTlQgb3Ig U0VORCAvUFJJTlQpIGFyZSBub3cgcGlwZWQgZGlyZWN0bHkgdG8gdGhlCi0gICBtYWlsIG9yIHBy aW50IHByb2dyYW0sIHJhdGhlciB0aGFuIHdyaXR0ZW4gdG8gdGVtcG9yYXJ5IGZpbGVzIGFuZCB0 aGVuCi0gICBtYWlsZWQgb3IgcHJpbnRlZCBhbmQgdGhlbiBkZWxldGVkLiBUaGlzIGhhcyB0aGUg YWR2YW50YWdlcyBvZiAoYSkgbm90Ci0gICByZXF1aXJpbmcgYSB0ZW1wb3JhcnkgZmlsZSwgYW5k IChiKSBhbGxvd2luZyBtYWlsIHRvIGhhdmUgYSBwcm9wZXIKLSAgIHN1YmplY3QgaW4gcGxhY2Ug b2YgdGhlIGZpbGVuYW1lLiBUZW1wb3JhcnkgZmlsZXMgd2VyZSBiYWQgbm90IG9ubHkKLSAgIGJl Y2F1c2UgdGhleSByZXF1aXJlZCAoYSkgc3BhY2UsIGFuZCAoYikgd3JpdGFiaWxpdHkgb2YgdGhl IGN1cnJlbnQKLSAgIGRpcmVjdG9yeSwgYnV0IGFsc28gYmVjYXVzZSB1c2luZyB0aGVtIGNvdWxk IHJlc3VsdCBpbiB3aXBpbmcgb3V0IGFuCi0gICBleGlzdGluZyBmaWxlLiBTZWUgWzQ2N11TZWN0 aW9uIDQuNyBmb3IgbW9yZSBhYm91dCBTRU5EIC9NQUlMIGFuZCBTRU5ECi0gICAvUFJJTlQuCi0K LTQuMi44LjQuIFBpcGUtUmVsYXRlZCBGdW5jdGlvbnMKLQotICAgVGhlIFxmY29tbWFuZChjb21t YW5kKSBmdW5jdGlvbiBydW5zIHRoZSBnaXZlbiBzaGVsbCBvciBzeXN0ZW0gY29tbWFuZAotICAg YW5kIHJldHVybnMgdGhlIGNvbW1hbmQncyBzdGFuZGFyZCBvdXRwdXQgYXMgaXRzIHZhbHVlICh3 aXRoIGFueQotICAgbmV3bGluZSBjaGFyYWN0ZXJzIHN0cmlwcGVkIGZyb20gdGhlIGVuZCksIHVu bGVzcyB0aGUgcmVzdWx0IGlzIHRvbwotICAgbG9uZywgaW4gd2hpY2ggY2FzZSBpdCByZXR1cm5z IHRoZSBlbXB0eSBzdHJpbmcuIFRoZSBtYXhpbXVtIGxlbmd0aCBmb3IKLSAgIHRoZSByZXN1bHQg aXMgYXQgbGVhc3QgMTAyMiBieXRlcywgYW5kIGl0IG1pZ2h0IGJlIGxvbmdlciBvbiBzb21lCi0g ICBwbGF0Zm9ybXMuIEV4YW1wbGVzIChVTklYKToKLQotICBDLUtlcm1pdD4gZWNobyAiXGZjb21t YW5kKGRhdGUpIgotICAiRnJpIEFwciAxOCAxMzozMTo0MiAxOTk3IgotICBDLUtlcm1pdD4gZWNo byAiXGZjb21tYW5kKGZpbmdlciB8IHdjIC1sKSIgOyBob3cgbWFueSB1c2VycyBsb2dnZWQgaW4/ Ci0gICIgICAgICA4MyIKLSAgQy1LZXJtaXQ+IGV2YWx1YXRlIFxmY29tbWFuZChmaW5nZXIgfCB3 YyAtbCkgKiAyCi0gIDE2NgotICBDLUtlcm1pdD4gZWNobyBXZWxjb21lIHRvIFxmY29tbWFuZCh0 dHkpIG9uIFxmY29tbWFuZChkYXRlKQotICBXZWxjb21lIHRvIC9kZXYvdHR5cmUgb24gRnJpIEFw ciAxOCAxMzozMTo0MiAxOTk3Ci0gIEMtS2VybWl0PiBlY2hvICJcZmNvbW1hbmQobHMgb29mYS4q KSIKLSAgIm9vZmEuYwotICBvb2ZhLmgKLSAgb29mYS5vIgotICBDLUtlcm1pdD4gY2QgL2RpcmVj dG9yeS13aXRoLXRob3VzYW5kcy1vZi1maWxlcwotICBDLUtlcm1pdD4gZWNobyAiXGZjb21tYW5k KGxzIC1sKSIgOyBUaGlzIHdvdWxkIGJlIHRvbyBsb25nCi0gICIiCi0gIEMtS2VybWl0PgotCi0g ICBJZiBhIGNvbW1hbmQncyBvdXRwdXQgd291bGQgYmUgdG9vIGxvbmcsIHlvdSBjYW4gdXNlIHRo ZSBvdGhlciwgbW9yZQotICAgbGFib3Jpb3VzIG1ldGhvZCBvZiByZWFkaW5nIGZyb20gYSBjb21t YW5kOiBPUEVOICFSRUFEIGNvbW1hbmQsIFJFQUQKLSAgIGVhY2ggbGluZSwgQ0xPU0UgIVJFQUQu Ci0KLSAgIFRoZSBcZnJhd2NvbW1hbmQoY29tbWFuZCkgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRv IFxmY29tbWFuZChjb21tYW5kKSwKLSAgIGV4Y2VwdCBpdCBkb2VzIG5vdCByZW1vdmUgdHJhaWxp bmcgbmV3bGluZSBjaGFyYWN0ZXJzOgotCi0gIEMtS2VybWl0PiBlY2hvICJcZnJhd2NvbW1hbmQo ZGF0ZSkiCi0gICJGcmkgQXByIDE4IDEzOjMxOjQyIDE5OTcKLSAgIgotICBDLUtlcm1pdD4gZWNo byAiXGZyYXdjb21tYW5kKGxzIG9vZmEuKikiCi0gICJvb2ZhLmMKLSAgb29mYS5oCi0gIG9vZmEu bwotICAiCi0gIEMtS2VybWl0PgotCi0gICBVc2UgXGZyYXdjb21tYW5kKCkgaWYgeW91IHdhbnQg dG8gcmV0YWluIHRoZSBmaW5hbCBsaW5lIHRlcm1pbmF0b3JzLCBvcgotICAgaWYgdGhlIGNvbW1h bmQncyBvdXRwdXQgaXMgImJpbmFyeSIuIEJ1dCByZW1lbWJlciB0aGF0IGlmIHRoZSByZXN1bHQg b2YKLSAgIHRoaXMgKG9yIGFueSBvdGhlcikgZnVuY3Rpb24gY29udGFpbnMgYW55IE5VTCAoQVND SUkgY29kZSAwKQotICAgY2hhcmFjdGVycywgdGhlIGZpcnN0IE5VTCB3aWxsIHRlcm1pbmF0ZSB0 aGUgcmVzdWx0IHN0cmluZyBiZWNhdXNlIHRoaXMKLSAgIGlzIGhvdyBDIHN0cmluZ3Mgd29yayAo aXQncyAiQy1LZXJtaXQiLCByZW1lbWJlcj8pLgotCi0gICBUaGVzZSBmdW5jdGlvbnMgYXJlIHVz ZWZ1bCBub3Qgb25seSBsb2NhbGx5LCBidXQgYWxzbyBpbiB0aGUKLSAgIGNsaWVudC9zZXJ2ZXIg YXJlbmEuIElmIHlvdSBuZWVkIHRvIGdldCB0aGUgcmVzdWx0cyBmcm9tIGEgc3lzdGVtCi0gICBj b21tYW5kIG9uIHRoZSBzZXJ2ZXIgZW5kIGludG8gYSB2YXJpYWJsZSBvbiB0aGUgY2xpZW50IGVu ZCwganVzdCBkbzoKLQotICBbIHJlbW90ZSBdIHF1ZXJ5IGtlcm1pdCBjb21tYW5kKGRhdGUpCi0K LSAgIFRoZSByZXN1bHQgaXMgaW4gdGhlIGxvY2FsIFx2KHF1ZXJ5KSB2YXJpYWJsZTsgc2VlIFs0 NjhdVXNpbmcgQy1LZXJtaXQsCi0gICAybmQgRWQuLCBwcC4zNTktMzYwIGZvciBkZXRhaWxzLgot Ci00LjMuIEF1dG9tYXRpYyBQZXItRmlsZSBUZXh0L0JpbmFyeSBNb2RlIFN3aXRjaGluZwotCi0g ICBXaGVuIHRyYW5zZmVycmluZyBmaWxlcyBiZXR3ZWVuIGxpa2Ugc3lzdGVtcyAoZS5nLiBVTklY LXRvLVVOSVgpLAotICAgYmluYXJ5IG1vZGUgY2FuIGJlIHVzZWQgZm9yIGFsbCBmaWxlcyB1bmxl c3MgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbgotICAgaXMgbmVlZGVkLCBhbmQgaW4gZmFjdCBL ZXJtaXQgcHJvZ3JhbXMgb2YgcmVjZW50IHZpbnRhZ2UgcmVjb2duaXplIGVhY2gKLSAgIG90aGVy cycgcGxhdGZvcm1zIGFuZCBzd2l0Y2ggdG8gYmluYXJ5IG1vZGUgYXV0b21hdGljYWxseSB3aGVu IGl0IGlzCi0gICBhcHByb3ByaWF0ZSAoZS5nLiBET1MgdG8gT1MvMiwgb3IgVU5JWCB0byBVTklY KS4gKEV4Y2VwdGlvbjogTEFCRUxFRAotICAgbW9kZSBpcyBjaG9zZW4gZm9yIFZNUy10by1WTVMg YW5kIE9TLzItdG8tT1MvMiB0cmFuc2ZlcnMgc28gY29tcGxleAotICAgZmlsZSBmb3JtYXRzIGNh biBiZSBwcmVzZXJ2ZWQuKQotCi0gICBPbiBhIGNsaWVudC9zZXJ2ZXIgY29ubmVjdGlvbiBiZXR3 ZWVuIGxpa2Ugc3lzdGVtcywgdGhlIHRyYW5zZmVyIG1vZGUKLSAgIGlzIGN1cnJlbnRseSBkZXRl cm1pbmVkIGJ5IHRoZSBmaWxlIHNlbmRlciwgcmF0aGVyIHRoYW4gYWx3YXlzIGJ5IHRoZQotICAg Y2xpZW50LiBJZiB0aGUgY2xpZW50IGlzIHNlbmRpbmcsIGl0IGNvbnRyb2xzIHRoZSB0cmFuc2Zl ciBtb2RlLiBJZiBhCi0gICBHRVQgY29tbWFuZCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIsIHRoZSBz ZXJ2ZXIgc2VuZHMgYWxsIGZpbGVzIGluIGJpbmFyeQotICAgbW9kZSBpZiBpdHMgVFJBTlNGRVIg Q0hBUkFDVEVSLVNFVCBpcyBUUkFOU1BBUkVOVDsgb3RoZXJ3aXNlIGl0IHVzZXMKLSAgIHRleHQg bW9kZSBmb3IgdGV4dCBmaWxlcyAoYWNjb3JkaW5nIHRvIGl0cyB0ZXh0LXBhdHRlcm4gbGlzdCkg YW5kCi0gICBiaW5hcnkgbW9kZSBmb3IgYmluYXJ5IGZpbGVzLiBPZiBjb3Vyc2UsIHRoZSBjbGll bnQgY2FuIGNvbnRyb2wgdGhlCi0gICBzZXJ2ZXIncyB0cmFuc2ZlciBjaGFyYWN0ZXItc2V0IHdp dGggdGhlIFJFTU9URSBTRVQgVFJBTlNGRVIKLSAgIENIQVJBQ1RFUi1TRVQgY29tbWFuZC4KLQot ICAgV2hlbiB0cmFuc2ZlcnJpbmcgZmlsZXMgYmV0d2VlbiB1bmxpa2Ugc3lzdGVtcywgaG93ZXZl ciwgKGUuZy4KLSAgIFVOSVgtdG8tRE9TKSwgc29tZSBmaWxlcyAoc3VjaCBhcyBleGVjdXRhYmxl IHByb2dyYW0gaW1hZ2VzKSBtdXN0IGJlCi0gICB0cmFuc2ZlcnJlZCBpbiBiaW5hcnkgbW9kZSBi dXQgb3RoZXJzIChzdWNoIGFzIHBsYWluLXRleHQgZmlsZXMpIG11c3QKLSAgIGJlIHRyYW5zZmVy cmVkIGluIHRleHQgbW9kZSBzbyB0aGVpciByZWNvcmQgZm9ybWF0IGFuZCBjaGFyYWN0ZXIgc2V0 cwotICAgY2FuIGJlIGFwcHJvcHJpYXRlbHkgY29udmVydGVkLiBJZiBhIGJpbmFyeSBmaWxlIGlz IHRyYW5zZmVycmVkIGluIHRleHQKLSAgIG1vZGUsIGl0IGlzIHJ1aW5lZC4gSWYgYSB0ZXh0IGZp bGUgaXMgdHJhbnNmZXJyZWQgaW4gYmluYXJ5IG1vZGUsIHRoZW4KLSAgIGF0IHRoZSB2ZXJ5IGxl YXN0LCBpdHMgZm9ybWF0IGNhbiBiZSBpbmNvcnJlY3Q7IGF0IHdvcnN0IGl0IGlzIGFsc28KLSAg IGNvcnJ1cHRlZCBiZWNhdXNlIGl0cyBjaGFyYWN0ZXIgc2V0IHdhcyBub3QgY29udmVydGVkIChp biBleHRyZW1lIGNhc2VzCi0gICB0aGUgY29ycnVwdGlvbiBpcyB0b3RhbCwgZS5nLiBiZWNhdXNl IG9uZSBzeXN0ZW0gaXMgQVNDSUktYmFzZWQgYW5kIHRoZQotICAgb3RoZXIgRUJDRElDKS4KLQot NC4zLjEuIEV4Y2VwdGlvbnMKLQotICAgVk1TIEMtS2VybWl0LCB3aGVuIHNlbmRpbmcgZmlsZXMg dG8gYSBub24tVk1TIHN5c3RlbSwgc3dpdGNoZXMgdG8gdGV4dAotICAgb3IgYmluYXJ5IG1vZGUg YXV0b21hdGljYWxseSBmb3IgZWFjaCBmaWxlLCBiYXNlZCBvbiB0aGUgcmVjb3JkIGZvcm1hdAot ICAgaW4gdGhlIGZpbGUncyBkaXJlY3RvcnkgZW50cnk7IHRodXMgdGhlIG1lY2hhbmlzbXMgZGVz Y3JpYmVkIGluIHRoaXMKLSAgIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIFZNUyBDLUtlcm1pdCwg eWV0IHRoZSBlZmZlY3QgaXMgdGhlIHNhbWU6Ci0gICBhdXRvbWF0aWMgdGV4dC9iaW5hcnkgbW9k ZSBzd2l0Y2hpbmcgd2hlbiBWTVMgQy1LZXJtaXQgaXMgc2VuZGluZwotICAgZmlsZXMuIFNlZSB0 aGUgVk1TIEFwcGVuZGl4IG9mIFs0NjldVXNpbmcgQy1LZXJtaXQgZm9yIGRldGFpbHMuCi0KLSAg IEtlcm1pdCB2ZXJzaW9ucyB0aGF0IHN1cHBvcnQgTEFCRUxFRCBvciBJTUFHRSB0cmFuc2ZlciBt b2RlIGFyZQotICAgbGlrZXdpc2Ugbm90IGFmZmVjdGVkIGJ5IHRoaXMgZmVhdHVyZSB3aGVuIG9u ZSBvZiB0aG9zZSBtb2RlcyBpcwotICAgc2VsZWN0ZWQgKG5vcm1hbGx5IHVzZWQgb25seSB3aGVu IHRyYW5zZmVycmluZyBiZXR3ZWVuIGxpa2Ugc3lzdGVtcykuCi0KLSAgIEtlcm1pdCB2ZXJzaW9u cyB0aGF0IHN1cHBvcnQgZmlsZS10cmFuc2ZlciBwaXBlcyBhbmQgZmlsdGVycyBhcmUgbm90Ci0g ICBhZmZlY3RlZCBieSB0aGlzIGZlYXR1cmUgd2hlbiBwaXBlcyBvciBmaWx0ZXJzIGFyZSB1c2Vk LCBzaW5jZSB0aGUKLSAgIG91dHB1dCBvZiBhIHBpcGUgb3IgZmlsdGVyIChzdWNoIGFzIGd6aXAp IGlzIGxpa2VseSB0byByZXF1aXJlIHRyYW5zZmVyCi0gICBpbiBhIGRpZmZlcmVudCBtb2RlIHRo YW4gdGhlIG9yaWdpbmFsIGZpbGUuCi0KLSAgIEZpbmFsbHksIFNFTkQgL1RFWFQgb3IgU0VORCAv QklOQVJZIHdpbGwgZm9yY2UgZmlsZXMgdG8gYmUgc2VudCBpbiB0aGUKLSAgIGluZGljYXRlZCBt b2RlLCBvdmVycmlkaW5nIGFsbCBhdXRvbWF0aWMgdHJhbnNmZXItbW9kZS1jaG9vc2luZwotICAg bWVjaGFuaXNtcy4KLQotNC4zLjIuIE92ZXJ2aWV3Ci0KLSAgIFN1cHBvc2UgeW91IGdpdmUgQy1L ZXJtaXQgYSBjb21tYW5kIGxpa2U6Ci0KLSAgU0VORCAqLioKLQotICAgQW5kIHN1cHBvc2UgdGhl IHBhdHRlcm4gKi4qIG1hdGNoZXMgYSBtaXh0dXJlIG9mIHRleHQgZmlsZXMgKHN1Y2ggYXMKLSAg IHByb2dyYW0gc291cmNlIGNvZGUpIGFuZCBiaW5hcnkgZmlsZXMgKHN1Y2ggb3Mgb2JqZWN0IG1v ZHVsZXMgb3IKLSAgIGV4ZWN1dGFibGUgcHJvZ3JhbXMpLgotCi0gICBDLUtlcm1pdCA2LjAgYW5k IGVhcmxpZXIgKGV4Y2VwdCBvbiBWTVMpIHNlbmQgYWxsIGZpbGVzIGluIHRoZSBzYW1lCi0gICBt b2RlOiB3aGF0ZXZlciB5b3Ugc2FpZCBpbiB5b3VyIG1vc3QgcmVjZW50IFNFVCBGSUxFIFRZUEUg Y29tbWFuZCwgb3IKLSAgIGVsc2Ugd2hhdGV2ZXIgbW9kZSB3YXMgY2hvc2VuIGF1dG9tYXRpY2Fs bHkgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvbgotICAgcGFnZSAyMzYgb2YgVXNpbmcgQy1LZXJt aXQsIDJuZCBFZC4KLQotICAgQnV0IHdoZW4gdGV4dCBhbmQgYmluYXJ5IGZpbGVzIGFyZSBtaXhl ZCBpbiB0aGUgc2FtZSBncm91cCwgYW5kIHRoZQotICAgZmlsZXMgYXJlIGJlaW5nIHRyYW5zZmVy cmVkIHRvIGFuIHVubGlrZSBzeXN0ZW0gKGUuZy4gVU5JWCB0byBJQk0KLSAgIE1haW5mcmFtZSks IHRoaXMgcmVzdWx0cyBpbiBjb3JydXB0aW9uIG9mIGVpdGhlciBhbGwgdGhlIHRleHQgZmlsZXMg b3IKLSAgIGFsbCB0aGUgYmluYXJ5IGZpbGVzLgotCi0gICBTdHJlYW0tb3JpZW50ZWQgZmlsZSBz eXN0ZW1zIHN1Y2ggYXMgaW4gVU5JWCBhbmQgRE9TIGRvIG5vdCByZWNvcmQgYW55Ci0gICBpbmZv cm1hdGlvbiBhYm91dCB0aGUgZmlsZSB0byB0ZWxsIHVzIHdoZXRoZXIgdGhlIGZpbGUgc2hvdWxk IGJlCi0gICB0cmFuc2ZlcnJlZCBpbiBiaW5hcnkgb3IgdGV4dCBtb2RlLCBtYWtpbmcgaXQgaW1w b3NzaWJsZSB0byBzZWxlY3QgdGhlCi0gICB0cmFuc2ZlciBtb2RlIGZvciBlYWNoIGZpbGUgaW4g YSBncm91cCBhdXRvbWF0aWNhbGx5IHdpdGggYW55Ci0gICBjZXJ0YWludHkuCi0KLSAgIEhvd2V2 ZXIsIHdlIGNhbiB1c2Ugc29tZSBmYWlybHktd2VsbCBlc3RhYmxpc2hlZCBmaWxlIG5hbWluZwot ICAgY29udmVudGlvbnMgZm9yIHRoaXMgcHVycG9zZS4gQy1LZXJtaXQgNy4wIGxldHMgeW91IHBy b3ZpZGUgbGlzdHMgb2YKLSAgIGZpbGVuYW1lIHBhdHRlcm5zIHRoYXQgYXJlIHVzZWQgdG8gc2Vw YXJhdGVseSBkZXRlcm1pbmUgdGhlIGZpbGUgdHlwZQotICAgZm9yIGVhY2ggaW5kaXZpZHVhbCBm aWxlIGJlaW5nIHRyYW5zZmVycmVkLiBBIHBhdHRlcm4gaXMgYSBzdHJpbmcsCi0gICBwb3NzaWJs eSBjb250YWluaW5nIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMgIioiIChhc3Rlcmlzaywgd2hpY2gg bWF0Y2hlcwotICAgYW55IHN0cmluZyBvZiB6ZXJvIG9mIG1vcmUgY2hhcmFjdGVycykgYW5kL29y ICI/IiAocXVlc3Rpb24gbWFyaywgd2hpY2gKLSAgIG1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0 ZXIpLiBGb3IgZXhhbXBsZSAiYSpiIiBtYXRjaGVzIGFsbCBmaWxlcwotICAgd2hvc2UgbmFtZXMg c3RhcnQgd2l0aCAiYSIgYW5kIGVuZCB3aXRoICJiIiwgc3VjaCBhcyAiYWIiLCAiYXJiIiwKLSAg ICJhYmFiYWJhYmFiIiwgZXRjLCBidXQgbm90ICJhYmJhIi4gQW5kICJhP2IiIG1hdGNoZXMgYW55 IGZpbGUgd2hvc2UKLSAgIG5hbWUgc3RhcnRzIHdpdGggImEiLCBlbmRzIHdpdGggImIiLCBhbmQg aXMgZXhhY3RseSAzIGNoYXJhY3RlcnMgbG9uZy4KLQotICAgICBOT1RFOiBXaGVuIHR5cGluZyBj b21tYW5kcyBhdCB0aGUgQy1LZXJtaXQgcHJvbXB0LCB5b3UgbXVzdCBwcmVmaXgKLSAgICAgIj8i IHdpdGggXCB0byBvdmVycmlkZSBpdHMgbm9ybWFsIGZ1bmN0aW9uIG9mIGdpdmluZyBoZWxwLgot Ci0gICAoQWxzbyBzZWUgWzQ3MF1TZWN0aW9uIDQuOSBmb3IgYWRkaXRpb25hbCBwYXR0ZXJuLW1h dGNoaW5nIG5vdGF0aW9ucwotICAgdGhhdCBtaWdodCBiZSBhdmFpbGFibGUgaW4geW91ciB2ZXJz aW9uIG9mIEMtS2VybWl0LikKLQotICAgV2hlbiB5b3UgaGF2ZSBzcGVjaWZpZWQgZmlsZW5hbWUg cmVjb2duaXRpb24gcGF0dGVybnMsIEMtS2VybWl0IGNhbgotICAgdHJhbnNmZXIgdGhlIG9uZXMg d2hvc2UgbmFtZXMgbWF0Y2ggYW55IG9mIHRoZSBiaW5hcnktbW9kZSBwYXR0ZXJucyBpbgotICAg YmluYXJ5IG1vZGUsIGFuZCB0aG9zZSB3aXRoIG5hbWVzIHRoYXQgbWF0Y2ggYW55IG9mIHRoZSB0 ZXh0LW1vZGUKLSAgIHBhdHRlcm5zIGluIHRleHQgbW9kZSwgYW5kIHRob3NlIHdob3NlIG5hbWVz IG1hdGNoIG5laXRoZXIgaW4gdGhlCi0gICBwcmV2YWlsaW5nIG1vZGUgeW91IGhhdmUgY2hvc2Vu LCBvciB0aGF0IHdhcyBjaG9zZW4gYXV0b21hdGljYWxseSB2aWEKLSAgIHBlZXIgcmVjb2duaXRp b24uCi0KLTQuMy4zLiBDb21tYW5kcwotCi0gICBTRVQgRklMRSBQQVRURVJOUyB7IE9OLCBPRkYs IEFVVE8gfQotICAgICAgICAgIFRoaXMgdGVsbHMgS2VybWl0IHdoZXRoZXIgdG8gZG8gcGVyLWZp bGUgZmlsZW5hbWUKLSAgICAgICAgICBwYXR0ZXJuLW1hdGNoaW5nIHRvIGRldGVybWluZSB0ZXh0 IG9yIGJpbmFyeSBtb2RlLiBUaGUgbm9ybWFsCi0gICAgICAgICAgYW5kIGRlZmF1bHQgc2V0dGlu ZyBpcyBBVVRPLCB3aGljaCBtZWFucyB0byB1c2UgcGF0dGVybiBsaXN0cyB0bwotICAgICAgICAg IHN3aXRjaCB0cmFuc2ZlciBtb2RlIG9ubHkgd2hlbiBpdCBpcyBjZXJ0YWluIHRoYXQgdGhlIG90 aGVyCi0gICAgICAgICAgS2VybWl0IHByb2dyYW0gc3VwcG9ydHMgYXV0b21hdGljIG5vdGlmaWNh dGlvbiBvZiB0cmFuc2ZlciBtb2RlCi0gICAgICAgICAgKHZpYSBBdHRyaWJ1dGUgcGFja2V0cykg b24gYSBwZXItZmlsZSBiYXNpcyAodGhpcyBpbmZvcm1hdGlvbiBpcwotICAgICAgICAgIG9idGFp bmVkIGF1dG9tYXRpY2FsbHkgZHVyaW5nIHByb3RvY29sIHN0YXJ0dXAgbmVnb3RpYXRpb24pLiBP TgotICAgICAgICAgIG1lYW5zIHRvIGFsd2F5cyBkZXRlcm1pbmUgdGhlIHRyYW5zZmVyIG1vZGUg ZnJvbSB0aGUgZmlsZW5hbWUKLSAgICAgICAgICBhbmQgcGF0dGVybiBsaXN0IHdoZW4gc2VuZGlu ZyBmaWxlcy4gVXNlIE9GRiB0byBkaXNhYmxlIHRoaXMKLSAgICAgICAgICBmZWF0dXJlICh3aXRo b3V0IHJlc2V0dGluZyB5b3VyIHBhdHRlcm4gbGlzdHMpLiBBbHNvIG5vdGUgdGhhdAotICAgICAg ICAgIGlmIHlvdSBoYXZlIHNlbGVjdGVkIExBQkVMRUQgZmlsZSB0cmFuc2ZlciAoU0VUIEZJTEUg VFlQRQotICAgICAgICAgIExBQkVMRUQpLCB0aGlzIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBmaWxl bmFtZS1tYXRjaGluZyBwYXR0ZXJucwotICAgICAgICAgIGFuZCBhbGwgZmlsZXMgYXJlIHNlbnQg aW4gbGFiZWxlZCBtb2RlLgotCi0gICBTRVQgVFJBTlNGRVIgTU9ERSBNQU5VQUwKLSAgICAgICAg ICBEaXNhYmxlcyB0aGUgdXNlIG9mIGZpbGVuYW1lIHBhdHRlcm5zLCBubyBtYXR0ZXIgd2hhdCB0 aGUgRklMRQotICAgICAgICAgIFBBVFRFUk5TIHNldHRpbmcuCi0KLSAgIFJFTU9URSBTRVQgVFJB TlNGRVIgTU9ERSBNQU5VQUwKLSAgICAgICAgICBDbGllbnQgY29tbWFuZCB0byBkaXNhYmxlIGF1 dG9tYXRpYyB0cmFuc2ZlciBtb2RlLCBhbmQgdGhlcmVmb3JlCi0gICAgICAgICAgYWxzbyBmaWxl bmFtZSBwYXR0ZXJucywgaW4gdGhlIHNlcnZlci4gU3lub255bTogUkVNT1RFIFNFVCBYRkVSCi0g ICAgICAgICAgTU9ERSBNQU5VQUwuCi0KLSAgIHsgR0VULCBTRU5ELCBldGMgfSB7IC9CSU5BUlks IC9URVhUIH0KLSAgICAgICAgICBJbmNsdWRpbmcgYSAvQklOQVJZIG9yIC9URVhUIChvciwgd2hl cmUgc3VwcG9ydGVkLCAvSU1BR0Ugb3IKLSAgICAgICAgICAvTEFCRUxFRCkgc3dpdGNoIHdpdGgg YSBmaWxlLXRyYW5zZmVyIGNvbW1hbmQgY2hhbmdlcyB0aGUKLSAgICAgICAgICB0cmFuc2ZlciBt b2RlIHRvIG1hbnVhbCBmb3IgdGhhdCBjb21tYW5kIG9ubHksIGFuZCB0aGVyZWZvcmUKLSAgICAg ICAgICBkaXNhYmxlcyBwYXR0ZXJucyB0aGF0IHRoYXQgY29tbWFuZC4KLQotICAgU0VUIEZJTEUg QklOQVJZLVBBVFRFUk5TIFsgcGF0dGVybiBbIHBhdHRlcm4gWyBwYXR0ZXJuIC4uLiBdIF0gXQot ICAgICAgICAgIEEgbGlzdCBvZiB6ZXJvIG9yIG1vcmUgcGF0dGVybnMsIHNlcGFyYXRlZCBieSBz cGFjZXMgKG5vdAotICAgICAgICAgIGNvbW1hcykuIExldHRlcnMgaW4gYSBwYXR0ZXJuIGFyZSBj YXNlLXNlbnNpdGl2ZSBpZiB0aGUKLSAgICAgICAgICB1bmRlcmx5aW5nIGZpbGVuYW1lcyBhcmUg Y2FzZSBzZW5zaXRpdmUgKGFzIGluIFVOSVgpLCBhbmQKLSAgICAgICAgICBjYXNlLWluc2Vuc2l0 aXZlIG90aGVyd2lzZSAoYXMgaW4gV2luZG93cykuIElmIGEgZmlsZSdzIG5hbWUgaXMKLSAgICAg ICAgICBtYXRjaGVkIGJ5IGFueSBwYXR0ZXJuIGluIHRoZSBsaXN0IGFuZCBTRVQgRklMRSBQQVRU RVJOUyBpcyBPTiwKLSAgICAgICAgICB0aGUgZmlsZSBpcyBzZW50IGluIGJpbmFyeSBtb2RlLiBF eGFtcGxlczoKLQotICBTRVQgRklMRSBCSU5BUlktUEFUVEVSTlMgKi5neiAqLlogKi50YXIgKi56 aXAgKi5vICouc28gKi5hICoub3V0IDsgVU5JWAotICBTRVQgRklMRSBCSU5BUlktUEFUVEVSTlMg Ki5FWEUgKi5aSVAgKi5PQkogKi5DT00gOyBET1Mgb3IgT1MvMiBvciBXaW5kb3dzCi0KLSAgICAg ICAgICBJZiBhIHBhdHRlcm4gY29udGFpbnMgc3BhY2VzLCBlbmNsb3NlIGl0IGluIGJyYWNlcy4K LQotICAgU0VUIEZJTEUgVEVYVC1QQVRURVJOUyBbIHBhdHRlcm4gWyBwYXR0ZXJuIFsgcGF0dGVy biAuLi4gXSBdIF0KLSAgICAgICAgICBMaWtlIFNFVCBGSUxFIEJJTkFSWS1QQVRURVJOUywgYnV0 IHRoZSBwYXR0ZXJucyBjaG9vc2UgdGV4dAotICAgICAgICAgIGZpbGVzIHJhdGhlciB0aGFuIGJp bmFyeSBvbmVzLiBFeGFtcGxlczoKLQotICBTRVQgRklMRSBURVhULVBBVFRFUk5TICouVFhUICou S1NDICouSFRNKiAqLkJBVCA7IERPUywgV2luZG93cywgT1MvMgotCi0gICBBREQgQklOQVJZLVBB VFRFUk5TIFsgcGF0dGVybiBbIHBhdHRlcm4gWyBwYXR0ZXJuIC4uLiBdIF0gXQotICAgICAgICAg IEFkZHMgb25lIG9yIG1vcmUgcGF0dGVybnMgdG8gdGhlIEJJTkFSWS1QQVRURVJOIGxpc3QuCi0K LSAgIEFERCBURVhULVBBVFRFUk5TIFsgcGF0dGVybiBbIHBhdHRlcm4gWyBwYXR0ZXJuIC4uLiBd IF0gXQotICAgICAgICAgIEFkZHMgb25lIG9yIG1vcmUgcGF0dGVybnMgdG8gdGhlIFRFWFQtUEFU VEVSTiBsaXN0LgotCi0gICBSRU1PVkUgQklOQVJZLVBBVFRFUk5TIFsgcGF0dGVybiBbIHBhdHRl cm4gWyBwYXR0ZXJuIC4uLiBdIF0gXQotICAgICAgICAgIFJlbW92ZXMgb25lIG9yIG1vcmUgcGF0 dGVybnMgZnJvbSB0aGUgQklOQVJZLVBBVFRFUk4gbGlzdC4gVGhlCi0gICAgICAgICAgZ2l2ZW4g cGF0dGVybnMgYXJlIG1hdGNoZWQgd2l0aCB0aGUgb25lcyBpbiB0aGUgQklOQVJZLVBBVFRFUk5T Ci0gICAgICAgICAgbGlzdCB3aXRoIGNhc2Ugc2Vuc2l0aXZpdHkgaWYgdGhlIHVuZGVybHlpbmcg ZmlsZSBzeXN0ZW0gaGFzCi0gICAgICAgICAgY2FzZS1zZW5zaXRpdmUgbmFtZXMgKGFzIGRvIFVO SVggYW5kIE9TLTkpLCBvdGhlcndpc2Ugd2l0aCBjYXNlCi0gICAgICAgICAgaW5kZXBlbmRlbmNl LgotCi0gICBSRU1PVkUgVEVYVC1QQVRURVJOUyBbIHBhdHRlcm4gWyBwYXR0ZXJuIFsgcGF0dGVy biAuLi4gXSBdIF0KLSAgICAgICAgICBSZW1vdmVzIG9uZSBvciBtb3JlIHBhdHRlcm5zIGZyb20g dGhlIFRFWFQtUEFUVEVSTiBsaXN0LgotCi0gICBTSE9XIFBBVFRFUk5TCi0gICAgICAgICAgRGlz cGxheXMgdGhlIGN1cnJlbnQgcGF0dGVybiBzZWxlY3Rpb25zLgotCi0gICBXaGVuZXZlciB5b3Ug Z2l2ZSBhIFNFVCBGSUxFIEJJTkFSWS1QQVRURVJOUyBvciBTRVQgRklMRSBURVhULVBBVFRFUk5T Ci0gICBjb21tYW5kLCB0aGUgcHJldmlvdXMgbGlzdCBpcyByZXBsYWNlZC4gSWYgeW91IGdpdmUg b25lIG9mIHRoZXNlCi0gICBjb21tYW5kcyB3aXRob3V0IGEgcGF0dGVybiBsaXN0LCB0aGUgcHJl dmlvdXMgbGlzdCBpcyByZW1vdmVkLgotCi0gICBXaGVuIHBhdHRlcm5zIGFyZSBhY3RpdmUgYW5k IGZpbGVzIGFyZSBiZWluZyBzZW50LCB0ZXh0IHBhdHRlcm5zIChpZgotICAgYW55KSBhcmUgYXBw bGllZCBmaXJzdCAoYnV0IG9ubHkgaWYgbm90IFJFU0VORGluZyBhbmQgbm90IHNlbmRpbmcgaW4K LSAgIExBQkVMRUQgbW9kZSksIHRoZW4gYmluYXJ5IHBhdHRlcm5zLCBzbyBpZiB0aGUgc2FtZSBw YXR0ZXJuIGFwcGVhcnMgaW4KLSAgIGJvdGggbGlzdHMsIGJpbmFyeSBtb2RlIGlzIGNob3Nlbi4K LQotNC4zLjQuIEV4YW1wbGVzCi0KLSAgIEhlcmUncyBhbiBleGFtcGxlIHRoYXQgbWlnaHQgYmUg dXNlZCB3aGVuIHNlbmRpbmcgZmlsZXMgZnJvbSBVTklYOgotCi0gIHNldCBmaWxlIHR5cGUgYmlu YXJ5Ci0gIHNldCBmaWxlIHRleHQtcGF0dGVybnMgKi5jICouaCAqLncgKi50eHQgbWFrZWZpbGUK LSAgc2V0IGZpbGUgYmluYXJ5LXBhdHRlcm5zICoubwotICBtc2VuZCBtYWtlZmlsZSB3ZXJtaXQg d2FydCBjayouW2N3aG9dIGNrKi50eHQKLQotICAgTm90ZSB0aGF0ICJ3ZXJtaXQiIGFuZCAid2Fy dCIgZG8gbm90IG1hdGNoIGFueSBwYXR0ZXJucyBzbyB0aGV5IGFyZQotICAgc2VudCBpbiB0aGUg cHJldmFpbGluZyBtb2RlLCB3aGljaCBpcyBiaW5hcnkuIEFsc28gbm90ZSB0aGUgdXNlIG9mCi0g ICAibWFrZWZpbGUiIGFzIGEgcGF0dGVybiB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYW55IHdpbGRj YXJkIGNoYXJhY3RlcnMKLSAgICh0aGVyZSBpcyBubyBvdGhlciBjb252ZW50aW9uIHRvIGRpc3Rp bmd1aXNoIGFtb25nICJ3ZXJtaXQiIGFuZCAid2FydCIsCi0gICB3aGljaCBhcmUgYmluYXJ5IGV4 ZWN1dGFibGVzLCBhbmQgIm1ha2VmaWxlIiwgd2hpY2ggaXMgYSB0ZXh0IGZpbGUsCi0gICBwdXJl bHkgYnkgdGhlaXIgbmFtZXMpLgotCi0gICBNb3N0IEMtS2VybWl0IGltcGxlbWVudGF0aW9ucyBo YXZlIGEgZGVmYXVsdCBwYXR0ZXJuIGxpc3QgYnVpbHQgaW4sCi0gICB3aGljaCBpbmNsdWRlcyBw YXR0ZXJucyB0aGF0IGFyZSBhbG1vc3QgY2VydGFpbiB0byBzdWNjZWVkIGluIHBpY2tpbmcKLSAg IHRoZSByaWdodCB0cmFuc2ZlciBtb2RlLiBPdGhlcnMgYXJlIG9taXR0ZWQgZHVlIHRvIGFtYmln dWl0eS4gRm9yCi0gICBleGFtcGxlICIuaGxwIiwgYW5kICIuaW5pIiBhcmUgZ2VuZXJhbGx5IGJp bmFyeSB0eXBlcyBpbiBXaW5kb3dzIGJ1dAotICAgdGV4dCB0eXBlcyBldmVyeXdoZXJlIGVsc2Uu Ci0KLSAgICAgTk9URTogIi5kb2MiLCB1c2VkIGZvciBkZWNhZGVzIHRvIGRlbm90ZSBwbGFpbi10 ZXh0IGRvY3VtZW50YXRpb24KLSAgICAgZmlsZXMsIG5vdyBtb3JlIG9mdGVuIHRoYW4gbm90IGRl bm90ZXMgYSBNaWNyb3NvZnQgV29yZCBEb2N1bWVudCwgc28KLSAgICAgIi5kb2MiIGlzIG5vdyBj b25zaWRlcmVkIGEgYmluYXJ5IHR5cGUgc2luY2UgaXQgZG9lcyBsZXNzIGhhcm0gdG8KLSAgICAg dHJhbnNmZXIgYSBwbGFpbi10ZXh0IGRvY3VtZW50IGluIGJpbmFyeSBtb2RlIHRoYW4gaXQgZG9l cyB0bwotICAgICB0cmFuc2ZlciBhbiBNUyBXb3JkIGZpbGUgaW4gdGV4dCBtb2RlIChleGNlcHQg d2hlbiBJQk0gbWFpbmZyYW1lcwotICAgICBhcmUgaW52b2x2ZWQhKQotCi0gICAgIEFOT1RIRVIg Tk9URTogIi5jb20iIGZpbGVzIGFyZSBiaW5hcnkgaW4gRE9TLWxpa2Ugb3BlcmF0aW5nIHN5c3Rl bXMsCi0gICAgIGJ1dCB0aGV5IGFyZSB0ZXh0IChEQ0wgY29tbWFuZCBwcm9jZWR1cmVzKSBpbiBW TVMuIFZNUyBDLUtlcm1pdAotICAgICBzZW5kcyAuQ09NIGZpbGVzIGluIHRleHQgbW9kZTsgSzk1 IHNlbmRzIHRoZW0gaW4gYmluYXJ5IG1vZGUuIElmIHlvdQotICAgICBkb3dubG9hZCBhIC5DT00g ZmlsZSBmcm9tIFZNUyB0byBET1Mgb3IgV2luZG93cywgYW5kIHRoZW4gdXBsb2FkIGl0Ci0gICAg IHRvIGFub3RoZXIgVk1TIHN5c3RlbSwgYmUgc3VyZSB0byB1c2UgU0VORCAvVEVYVCB0byBwcmVz ZXJ2ZSBpdHMKLSAgICAgdGV4dG5lc3MuCi0KLSAgIFlvdSBjYW4gc2VlIHRoZSBkZWZhdWx0IHBh dHRlcm4gbGlzdCBieSBzdGFydGluZyBDLUtlcm1pdCB3aXRob3V0IGl0cwotICAgaW5pdGlhbGl6 YXRpb24gZmlsZSAoZS5nLiAia2VybWl0IC1ZIikgYW5kIHVzaW5nIHRoZSBTSE9XIFBBVFRFUk5T Ci0gICBjb21tYW5kLiBJZiB5b3Ugd2lsbCBiZSBkZXBlbmRpbmcgb24gdGhpcyBmZWF0dXJlLCBi ZSBzdXJlIHRvIGV4YW1pbmUKLSAgIHRoZSBsaXN0IGNhcmVmdWxseSBpbiBjb25qdW5jdGlvbiB3 aXRoIHRoZSBhcHBsaWNhdGlvbnMgdGhhdCB5b3UgdXNlLgotCi0gICBUaGUgZGVmYXVsdCBwYXR0 ZXJuIGxpc3QgZG9lcyBub3QgdGFrZSAiYmFja3VwIGZpbGVzIiBpbnRvIGFjY291bnQKLSAgIGJl Y2F1c2UgKGEpIHBlb3BsZSB1c3VhbGx5IGRvbid0IHdhbnQgdG8gdHJhbnNmZXIgdGhlbTsgYW5k IChiKSBpdAotICAgd291bGQgbWFrZSB0aGUgcGF0dGVybiBsaXN0cyBtb3JlIHRoYW4gdHdpY2Ug YXMgbG9uZy4gRm9yIGV4YW1wbGUsIHdlCi0gICB3b3VsZCBuZWVkIHRvIGluY2x1ZGUgYm90aCAq LnR4dCBhbmQgKi50eHQuflswLTldKn4gZm9yICIudHh0IiBmaWxlcywKLSAgIGFuZCBzaW1pbGFy bHkgZm9yIGFsbCB0aGUgb3RoZXJzLiBJbnN0ZWFkLCB5b3UgY2FuIHVzZSBTRU5EIC9OT0JBQ0tV UAotICAgKG9yIFNFVCBTRU5EIEJBQ0tVUCBPRkYpIHRvIHNraXAgb3ZlciBhbGwgYmFja3VwIGZp bGVzLgotCi0gICBQdXQgeW91ciBtb3N0IGNvbW1vbmx5LXVzZWQgc2FmZSBwYXR0ZXJuIGRlY2xh cmF0aW9ucyBpbiB5b3VyIEMtS2VybWl0Ci0gICBjdXN0b21pemF0aW9uIGZpbGUgKGNrZXJtb2Qu aW5pLCAubXlrZXJtcmMsIGs5NWN1c3RvbS5pbmksIGV0YykuCi0KLSAgIEFzIG5vdGVkLCBTRVQg RklMRSBQQVRURVJOUyBpcyBPTiBieSBkZWZhdWx0LiBTb21ldGltZXMsIGhvd2V2ZXIsIGl0IGlz Ci0gICBkZXNpcmFibGUsIG9yIG5lY2Vzc2FyeSwgdG8gZm9yY2UgZmlsZXMgdG8gYmUgc2VudCBp biBhIHBhcnRpY3VsYXIKLSAgIG1vZGUsIGFuZCBvZnRlbiB0aGlzIG11c3QgYmUgZG9uZSBmcm9t IHRoZSBjb21tYW5kIGxpbmUgKGUuZy4gd2hlbgotICAgdXNpbmcgS2VybWl0IGFzIGEgZG93bmxv YWQgaGVscGVyIGluIGEgV2ViIGJyb3dzZXIgbGlrZSBMeW54KS4gVGhlIC1WCi0gICBjb21tYW5k LWxpbmUgb3B0aW9ucyBpcyBlcXVpdmFsZW50IHRvIFNFVCBGSUxFIFBBVFRFUk5TIE9GRiBhbmQg U0VUCi0gICBUUkFOU0ZFUiBNT0RFIE1BTlVBTC4gRXhhbXBsZToKLQotICBrZXJtaXQgLVZpcyBv b2ZhLnR4dAotCi0gICBmb3JjZXMgb29mYS50eHQgdG8gYmUgc2VudCBpbiBiaW5hcnkgbW9kZSwg ZXZlbiB0aG91Z2ggIi50eHQiIG1pZ2h0Ci0gICBtYXRjaCBhIHRleHQgcGF0dGVybi4KLQotNC40 LiBGaWxlIFBlcm1pc3Npb25zCi0KLSAgICJQZXJtaXNzaW9ucyIgcmVmZXJzIHRvIGEgY29kZSBh c3NvY2lhdGVkIHdpdGggYSBmaWxlIHRoYXQgc3BlY2lmaWVzCi0gICB3aG8gaXMgYWxsb3dlZCB0 byBhY2Nlc3MgaXQsIGFuZCBpbiB3aGF0IG1hbm5lci4gRm9yIGV4YW1wbGUsIHRoZQotICAgb3du ZXIsIHRoZSBtZW1iZXJzIG9mIG9uZSBvciBtb3JlIGdyb3VwcywgdGhlIHN5c3RlbSBhZG1pbmlz dHJhdG9yLCBhbmQKLSAgIGV2ZXJ5Ym9keSBlbHNlLCBtaWdodCBiZSBhbGxvd2VkIHZhcmlvdXMg Y29tYmluYXRpb25zIG9mIFJlYWQsIFdyaXRlLAotICAgQXBwZW5kLCBFeGVjdXRlLCBvciBMaXN0 aW5nIGFjY2Vzcy4KLQotICAgVGhlIHBlcm1pc3Npb24gY29kZSBnb2VzIGJ5IGRpZmZlcmVudCBu YW1lcyBvbiBkaWZmZXJlbnQgcGxhdGZvcm1zLiBJbgotICAgVU5JWCwgaXQgbWlnaHQgYmUgY2Fs bGVkIHRoZSBmaWxlbW9kZS4gSW4gVk1TLCBpdCBpcyBjYWxsZWQgdGhlIGZpbGUKLSAgIHByb3Rl Y3Rpb24gKG9yIHByb3RlY3Rpb24gbWFzaykuCi0KLSAgIFRoZSBjb21tZW50cyBpbiB0aGlzIHNl Y3Rpb24gcHJlc2VudGx5IGFwcGx5IG9ubHkgdG8gdGhlIFVOSVggYW5kIFZNUwotICAgdmVyc2lv bnMgb2YgQy1LZXJtaXQsIHRvIHdoaWNoIHRoZXNlIGZlYXR1cmVzIHdlcmUgYWRkZWQgaW4gdmVy c2lvbgotICAgNy4wOyB0aGUgRE9TLCBXaW5kb3dzLCBhbmQgT1MvMiBmaWxlIHN5c3RlbXMgZW1i b2R5IG5vIG5vdGlvbnMgb2YKLSAgIHByb3RlY3Rpb24sIGFuZCBzbyBNUy1ET1MgS2VybWl0IGFu ZCBLZXJtaXQgOTUgZG8gbm90IHNlbmQgZmlsZQotICAgcGVybWlzc2lvbnMsIGFuZCBpZ25vcmUg dGhlbSB3aGVuIHJlY2VpdmVkLgotCi0gICBUaGUgcGVybWlzc2lvbnMgZm9yIGEgcmVjZWl2ZWQg ZmlsZSBhcmUgZGV0ZXJtaW5lZCBieSBhIGNvbWJpbmF0aW9uIG9mCi0gICB0aGUgZmlsZSB0cmFu c2ZlciBtb2RlIChWTVMtdG8tVk1TIHRyYW5zZmVycyBvbmx5KSwgd2hldGhlciBhIGZpbGUgb2YK LSAgIHRoZSBzYW1lIG5hbWUgZXhpc3RzIGFscmVhZHksIHdoZXRoZXIgcGVybWlzc2lvbnMgb2Yg dGhlIGZpbGUgYXJlCi0gICByZWNlaXZlZCBpbiB0aGUgZmlsZSBhdHRyaWJ1dGUgcGFja2V0LCBh bmQgdGhlIHNldHRpbmcgb2YgQVRUUklCVVRFUwotICAgUFJPVEVDVElPTi4KLQotICAgVGhlIGRl ZmF1bHQgZm9yIEFUVFJJQlVURVMgUFJPVEVDVElPTiBpcyBPTi4gSWYgbm8gYXR0cmlidXRlcyBh cmUKLSAgIHJlY2VpdmVkLCB0aGUgZWZmZWN0IGlzIHRoZSBzYW1lIGFzIGlmIGF0dHJpYnV0ZXMg UFJPVEVDVElPTiB3ZXJlIE9GRi4KLQotICAgRm9yIFZNUy10by1WTVMgdHJhbnNmZXJzLCB0aGUg ZGVmYXVsdCBMQUJFTEVEIG1vZGUgc2ltcGx5IGNvcGllcyB0aGUKLSAgIHByb3RlY3Rpb24gY29k ZSBmcm9tIHNvdXJjZSB0byBkZXN0aW5hdGlvbi4KLQotNC40LjEuIFdoZW4gQVRUUklCVVRFUyBQ Uk9URUNUSU9OIGlzIE9GRgotCi0gICBJZiBubyBmaWxlIG9mIHRoZSBzYW1lIG5hbWUgZXhpc3Rz LCBzeXN0ZW0gZGVmYXVsdHMgZGV0ZXJtaW5lIHRoZQotICAgcGVybWlzc2lvbnMgb2YgdGhlIG5l dyBmaWxlLiBPdGhlcndpc2UsIHRoZSBhY3Rpb25zIHRha2VuIGRlcGVuZCBvbiB0aGUKLSAgIGN1 cnJlbnQgRklMRSBDT0xMSVNJT04gc2V0dGluZzogQkFDS1VQLCBPVkVSV1JJVEUsIFJFTkFNRSwg ZXRjLCBhcwotICAgZG9jdW1lbnRlZCBpbiBbNDcxXVVzaW5nIEMtS2VybWl0LiBCdXQgbm93IHRo ZSBuZXcgZmlsZSAoaWYgaXQgaXMKLSAgIGNyZWF0ZWQgYXQgYWxsKSBhdXRvbWF0aWNhbGx5IGlu aGVyaXRzIHRoZSBwZXJtaXNzaW9ucyAobW9kZSBiaXRzKSBvZgotICAgdGhlIGV4aXN0aW5nIGZp bGUgaW4gYSB3YXkgdGhhdCBpcyBhcHByb3ByaWF0ZSBmb3IgdGhlIHBsYXRmb3JtLgotCi00LjQu MS4xLiBVbml4Ci0KLSAgIEFsbCBtb2RlIGJpdHMgYXJlIGluaGVyaXRlZCBleGNlcHQgdGhlIGRp cmVjdG9yeSBiaXQsIHNpbmNlIHRoZQotICAgaW5jb21pbmcgZmlsZSBjYW4gbm90IHBvc3NpYmx5 IGJlIGEgZGlyZWN0b3J5LiAoSW4gYW55IGNhc2UsIGl0IGlzIG5vdAotICAgcG9zc2libGUgdG8g cmVjZWl2ZSBhIGZpbGUgdGhhdCBoYXMgdGhlIHNhbWUgbmFtZSBhcyBhbiBleGlzdGluZwotICAg ZGlyZWN0b3J5IHVubGVzcyBGSUxFIENPTExJU0lPTiBpcyBzZXQgdG8gUkVOQU1FKS4KLQotNC40 LjEuMi4gVk1TCi0KLSAgIEZpbGVzIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhbiBleGlzdGluZyBm aWxlLCB0cmFuc2ZlcnJlZCBpbiBtb2RlcwotICAgb3RoZXIgdGhhbiBMQUJFTEVEIGJldHdlZW4g Vk1TIHN5c3RlbXMsIGluaGVyaXQgdGhlIHByb3RlY3Rpb24gb2YgdGhlCi0gICBwcmlvciB2ZXJz aW9uLgotCi00LjQuMiBXaGVuIEFUVFJJQlVURVMgUFJPVEVDVElPTiBpcyBPTgotCi0gICBGaWxl IHBlcm1pc3Npb25zIGNhbiBiZSBjb252ZXllZCBhcyBwYXJ0IG9mIHRoZSBmaWxlIHRyYW5zZmVy IHByb2Nlc3MsCi0gICBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIEtlcm1pdCBwcm90b2NvbCBkZWZp bml0aW9uLiBJZiB0aGUgZmlsZSBzZW5kZXIKLSAgIHB1dHMgc3lzdGVtLWRlcGVuZGVudCBhbmQv b3Igc3lzdGVtLWluZGVwZW5kZW50IHZlcnNpb25zIG9mIHRoZSBmaWxlCi0gICBwcm90ZWN0aW9u IChwZXJtaXNzaW9ucykgaW50byB0aGUgQXR0cmlidXRlIChBKSBwYWNrZXQsIHRoZSBmaWxlCi0g ICByZWNlaXZlciBjYW4gc2V0IHRoZSBuZXcgZmlsZSdzIHBlcm1pc3Npb25zIGZyb20gdGhlbS4g T3RoZXJ3aXNlLCB0aGUKLSAgIHBlcm1pc3Npb25zIGFyZSBzZXQgdGhlIHNhbWUgYXMgZm9yIEFU VFJJQlVURVMgUFJPVEVDVElPTiBPRkYuCi0KLSAgIFdoZW4gdGhlIGluY29taW5nIEEgcGFja2V0 IGNvbnRhaW5zIHN5c3RlbS1kZXBlbmRlbnQgcGVybWlzc2lvbnMsIHRoZQotICAgZmlsZSByZWNl aXZlciBjaGVja3MgdG8gc2VlIGlmIHRoZSBzZW5kZXIgaGFzIHRoZSBzYW1lIHN5c3RlbSBJRCAo ZS5nLgotICAgYm90aCB0aGUgc2VuZGluZyBhbmQgcmVjZWl2aW5nIHN5c3RlbXMgYXJlIFVOSVgs IG9yIGJvdGggYXJlIFZNUyk7IGlmCi0gICBzbywgaXQgZGVjb2RlcyBhbmQgdXNlcyB0aGUgc3lz dGVtLWRlcGVuZGVudCBwZXJtaXNzaW9uczsgb3RoZXJ3aXNlIGl0Ci0gICB1c2VzIHRoZSBnZW5l cmljIG9uZXMgKGlmIGFueSkgYW5kIGFwcGxpZXMgdGhlbSB0byB0aGUgb3duZXIgZmllbGQsCi0g ICBzZXR0aW5nIHRoZSBvdGhlciBmaWVsZHMgYXBwcm9wcmlhdGVseSBhcyBkZXNjcmliZWQgaW4g dGhlIGZvbGxvd2luZwotICAgc2VjdGlvbnMuCi0KLSAgIFNldHRpbmcgdGhlIGluY29taW5nIGZp bGUncyBwcm90ZWN0aW9uIGZyb20gdGhlIEEgcGFja2V0IGlzIGNvbnRyb2xsZWQKLSAgIGJ5IFNF VCBBVFRSSUJVVEVTIFBST1RFQ1RJT04gKG9yIFBFUk1JU1NJT04pLCB3aGljaCBpcyBPTiBieSBk ZWZhdWx0LAotICAgYW5kIGl0cyBzdGF0dXMgaXMgZGlzcGxheWVkIGJ5IFNIT1cgQVRUUklCVVRF Uy4KLQotICAgVGhlIG1haW4gYmVuZWZpdCBvZiB0aGlzIGZlYXR1cmUgaXMgdG8gbm90IGhhdmUg dG8gImNobW9kICt4IiBhbgotICAgZXhlY3V0YWJsZSBmaWxlIGFmdGVyIHRyYW5zZmVyIGZyb20g VU5JWCB0byBVTklYLiBJdHMgY3Jvc3MtcGxhdGZvcm0KLSAgIGJlbmVmaXRzIGFyZSBsZXNzIGV2 aWRlbnQsIHBlcmhhcHMgdG8gcmV0YWluIHRoZSBzdGF0dXMgb2YgdGhlIFVuaXggJ3gnCi0gICBi aXQgb24gYSBWTVMgc3lzdGVtLCBmb3Igc3Vic2VxdWVudCB0cmFuc2ZlciBiYWNrIHRvIGEgVW5p eCBzeXN0ZW0uCi0KLTQuNC4yLjEuIFN5c3RlbS1TcGVjaWZpYyBQZXJtaXNzaW9ucwotCi0gICBT eXN0ZW0tc3BlY2lmaWMgZmlsZSBwZXJtaXNzaW9ucyBhcmUgdXNlZCB3aGVuIHRoZSB0d28gS2Vy bWl0IHByb2dyYW1zCi0gICByZWNvZ25pemUgZWFjaCBvdGhlciBhcyBydW5uaW5nIG9uIHRoZSBz YW1lIHR5cGUgb2Ygc3lzdGVtLiBGb3IKLSAgIGV4YW1wbGUsIGJvdGggYXJlIHJ1bm5pbmcgdW5k ZXIgc29tZSBmb3JtIG9mIFVOSVggKGl0IGRvZXNuJ3QgbWF0dGVyCi0gICB3aGljaCBVTklYIHZh cmlhdGlvbiAtLSBIUC1VWCwgU29sYXJpcywgQUlYLCBldGMgLS0gYWxsIHVzZSB0aGUgc2FtZQot ICAgc2NoZW1lIGZvciBmaWxlIHBlcm1pc3Npb25zKTsgb3IgYm90aCBhcmUgcnVubmluZyB1bmRl ciBWTVMgKGV2ZW4gaWYKLSAgIG9uZSBpcyBvbiBhbiBBbHBoYSBhbmQgdGhlIG90aGVyIG9uIGEg VkFYLCBhbmQvb3Igb25lIGlzIG9sZCBhbmQgdGhlCi0gICBvdGhlciBpcyBuZXcpLgotCi00LjQu Mi4xLjEuIFVOSVgKLQotICAgVU5JWCBzdXBwb3J0cyB0aHJlZSBjYXRlZ29yaWVzIG9mIHVzZXJz LCBGaWxlIE93bmVyLCBHcm91cCwgYW5kIFdvcmxkLAotICAgYW5kIHRocmVlIHR5cGVzIG9mIGZp bGUgYWNjZXNzIHBlcm1pc3Npb246IFJlYWQsIFdyaXRlLCBhbmQgRXhlY3V0ZS4KLSAgIFRodXMs IGEgVU5JWCBmaWxlJ3MgcGVybWlzc2lvbnMgYXJlIGV4cHJlc3NlZCBpbiA5IGJpdHMuCi0KLSAg IFRoZSBzeXN0ZW0tZGVwZW5kZW50IHBlcm1pc3Npb24gc3RyaW5nIGZvciBVTklYIGlzIGEgMy1k aWdpdCBvY3RhbAotICAgc3RyaW5nLCB0aGUgbG93LW9yZGVyIDkgYml0cyBvZiB0aGUgc3RfbW9k ZSBtZW1iZXIgb2YgdGhlIHN0YXQgc3RydWN0OwotICAgd2UgZGVsaWJlcmF0ZWx5IGNob3Agb2Zm IHRoZSAiZmlsZSBmb3JtYXQiIGJpdHMgYmVjYXVzZSB0aGV5IGFyZSBub3QKLSAgIHBlcm1pc3Np b25zLCBub3IgZG8gd2UgY29udmV5IHRoZSBzZXR1aWQvc2V0Z2lkIGJpdHMsIGxvY2sgYml0LCBz dGlja3kKLSAgIGJpdCwgZXRjLgotCi00LjQuMi4xLjIuIFZNUwotCi0gICBWTVMgc3VwcG9ydHMg Zm91ciBjYXRlZ29yaWVzIG9mIHVzZXJzLCBTeXN0ZW0sIEZpbGUgT3duZXIsIEdyb3VwLCBhbmQK LSAgIFdvcmxkLCBhbmQgZm91ciB0eXBlcyBvZiBmaWxlIGFjY2VzcyBwZXJtaXNzaW9uOiBSZWFk LCBXcml0ZSwgRXhlY3V0ZSwKLSAgIGFuZCBEZWxldGUuIFRodXMsIGEgVk1TIGZpbGUncyBwZXJt aXNzaW9ucyBhcmUgZXhwcmVzc2VkIGluIDE2IGJpdHMuCi0KLSAgIFRoZSBzeXN0ZW0tZGVwZW5k ZW50IHByb3RlY3Rpb24gc3RyaW5nIGZvciBWTVMgaXMgYSA0LWRpZ2l0IGhleGFkZWNpbWFsCi0g ICBzdHJpbmcsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGludGVybmFsLWZvcm1hdCBwcm90ZWN0aW9u IHdvcmQgb2YgdGhlCi0gICBmaWxlIChSV0VEIGZvciBlYWNoIG9mIFdvcmxkLEdyb3VwLE93bmVy LFN5c3RlbSkuIEEgbmV3IGZpbGUgbm9ybWFsbHkKLSAgIGdldHMgYWxsIDE2IHByb3RlY3Rpb24g Yml0cyBmcm9tIHRoZSBvcmlnaW5hbCBmaWxlIG9mIHRoZSBzYW1lIG5hbWUuCi0KLSAgIE5vdGU6 IFZNUy10by1WTVMgdHJhbnNmZXJzIHRha2UgcGxhY2UgaW4gTEFCRUxFRCBtb2RlIHdoZW4gdGhl IHR3bwotICAgQy1LZXJtaXRzIHJlY29nbml6ZSBlYWNoIG90aGVyJ3MgcGxhdGZvcm0gYXMgVk1T ICh1bmxlc3MgeW91IGhhdmUKLSAgIGRpc2FibGVkIExBQkVMRUQtbW9kZSB0cmFuc2ZlcnMpLiBJ biB0aGlzIGNhc2UsIGFsbCBvZiBhIGZpbGUncwotICAgYXR0cmlidXRlcyBhcmUgcHJlc2VydmVk IGluIHRoZSB0cmFuc2ZlciBhbmQgdGhlIHByb3RlY3Rpb24gbWFzayAoYW5kCi0gICBvdGhlciBp bmZvcm1hdGlvbikgaXMgdGFrZW4gZnJvbSB0aGUgZmlsZSdzIGludGVybmFsIGluZm9ybWF0aW9u LCBhbmQKLSAgIHRoaXMgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGFueSBpbmZvcm1hdGlvbiBpbiB0 aGUgQXR0cmlidXRlIHBhY2tldHMuCi0gICBZb3UgY2FuIGRlZmVhdCB0aGUgYXV0b21hdGljIHN3 aXRjaGluZyBpbnRvIExBQkVMRUQgbW9kZSAoaWYgeW91IHdhbnQKLSAgIHRvKSB3aXRoIFNFVCBU UkFOU0ZFUiBNT0RFIE1BTlVBTC4KLQotNC40LjIuMi4gU3lzdGVtLUluZGVwZW5kZW50IFBlcm1p c3Npb25zCi0KLSAgIFRoZSBzeXN0ZW0taW5kZXBlbmRlbnQgKCJnZW5lcmljIikgcHJvdGVjdGlv biBpcyB1c2VkIHdoZW4gdGhlIHN5c3RlbQotICAgSURzIG9mIHRoZSB0d28gS2VybWl0IHByb2dy YW1zIGRvIG5vdCBhZ3JlZSAoZS5nLiBvbmUgaXMgVU5JWCwgdGhlCi0gICBvdGhlciBpcyBWTVMp LiBUaGUgZ2VuZXJpYyBwcm90ZWN0aW9uIGF0dHJpYnV0ZSBpbmNsdWRlcyB0aGUgZm9sbG93aW5n Ci0gICBwZXJtaXNzaW9ucyAobm90IGFsbCBhcmUgYXBwbGljYWJsZSB0byBldmVyeSBmaWxlIHN5 c3RlbSk6IFJlYWQsIFdyaXRlLAotICAgQXBwZW5kLCBFeGVjdXRlLCBEZWxldGUsIFNlYXJjaC4g VGhlIGdlbmVyaWMgcGVybWlzc2lvbnMgYXJlIGRlcml2ZWQKLSAgIGZyb20gdGhlIG93bmVyIHBl cm1pc3Npb25zIG9mIHRoZSBzb3VyY2UgZmlsZSwgdGh1cywgYSBVbml4ICd3JwotICAgcGVybWlz c2lvbiBiZWNvbWVzIFZNUyBXcml0ZSxEZWxldGUuCi0KLSAgIFRoZSBPd25lciBmaWVsZCBvZiB0 aGUgbmV3IGZpbGUncyBwZXJtaXNzaW9ucyBpcyBzZXQgZnJvbSB0aGUgaW5jb21pbmcKLSAgIGdl bmVyaWMgcHJvdGVjdGlvbiBhdHRyaWJ1dGUuCi0KLSAgIEluIFVOSVgsIHRoZSBHcm91cCBhbmQg V29ybGQgcGVybWlzc2lvbnMgYXJlIHNldCBhY2NvcmRpbmcgdG8geW91cgotICAgdW1hc2ssIGV4 Y2VwdCB0aGF0IGV4ZWN1dGUgcGVybWlzc2lvbiBpcyBOT1Qgc2V0IGluIHRoZXNlIGZpZWxkcyBp ZiBpdAotICAgd2FzIG5vdCBhbHNvIHNldCBpbiB0aGUgZ2VuZXJpYyBwcm90ZWN0aW9uIChhbmQg Y29uc2VxdWVudGx5LCBpcyBzZXQgaW4KLSAgIHRoZSBPd25lciBmaWVsZCkuCi0KLSAgIEluIFZN UywgdGhlIFN5c3RlbSwgR3JvdXAsIGFuZCBXb3JsZCBwZXJtaXNzaW9ucyBhcmUgc2V0IGFjY29y ZGluZyB0bwotICAgdGhlIHByb2Nlc3MgZGVmYXVsdCBmaWxlIHBlcm1pc3Npb24gKGFzIHNob3du IGluIFZNUyBieSBTSE9XCi0gICBQUk9URUNUSU9OKSwgZXhjZXB0IHRoYXQgbm8gcGVybWlzc2lv bnMgYXJlIGFsbG93ZWQgaW4gdGhlc2UgZmllbGRzCi0gICB0aGF0IGFyZSBub3QgaW5jbHVkZWQg aW4gdGhlIGdlbmVyaWMgcGVybWlzc2lvbnMuCi0KLSAgIE5vdGUgdGhhdCB0aGUgVk1TIGFuZCBV TklYIGludGVycHJldGF0aW9ucyBvZiBFeGVjdXRlIHBlcm1pc3Npb24gYXJlCi0gICBub3QgaWRl bnRpY2FsLiBJbiBVTklYLCBhIGZpbGUgKGJpbmFyeSBleGVjdXRhYmxlLCBzaGVsbCBzY3JpcHQs IGV0YykKLSAgIG1heSBub3QgYmUgZXhlY3V0ZWQgdW5sZXNzIGl0IGhhcyBFeGVjdXRlIHBlcm1p c3Npb24sIGFuZCBub3JtYWxseQotICAgZmlsZXMgdGhhdCBhcmUgbm90IGludGVuZGVkIGZvciBl eGVjdXRpb24gZG8gbm90IGhhdmUgRXhlY3V0ZQotICAgcGVybWlzc2lvbi4gSW4gVk1TLCBSZWFk IHBlcm1pc3Npb24gaW1wbGljaXRseSBzdXBwbGllcyBFeGVjdXRlCi0gICBjYXBhYmlsaXR5LiBH ZW5lcmFsbHkgZmlsZXMgdGhhdCBoYXZlIFJlYWQgcGVybWlzc2lvbiBhbHNvIGhhdmUKLSAgIGV4 cGxpY2l0IEV4ZWN1dGUgcGVybWlzc2lvbiwgYnV0IGZpbGVzIChiaW5hcnkgZXhlY3V0YWJsZXMs IERDTCBjb21tYW5kCi0gICBwcm9jZWR1cmVzKSB0aGF0IGhhdmUgUmVhZCBwZXJtaXNzaW9uIGFu ZCBub3QgRXhlY3V0ZSBwZXJtaXNzaW9uIGNhbgotICAgc3RpbGwgYmUgZXhlY3V0ZWQuCi0KLTQu NS4gRmlsZSBNYW5hZ2VtZW50IENvbW1hbmRzCi0KLTQuNS4xLiBUaGUgRElSRUNUT1JZIENvbW1h bmQKLQotICAgUHJpb3IgdG8gQy1LZXJtaXQgNy4wLCB0aGUgRElSRUNUT1JZIGNvbW1hbmQgYWx3 YXlzIHJhbiBhbiBleHRlcm5hbAotICAgc3lzdGVtIGNvbW1hbmQgKHN1Y2ggYXMgImxzIiBvbiBV TklYKSBvciBwcm9ncmFtIHRvIHByb2R1Y3QgdGhlCi0gICBkaXJlY3RvcnkgbGlzdGluZy4gVGhp cyBoYWQgY2VydGFpbiBhZHZhbnRhZ2VzLCBtb3N0bHkgdGhhdCB5b3UgY291bGQKLSAgIGluY2x1 ZGUgc3lzdGVtLWRlcGVuZGVudCBvcHRpb25zIGZvciBjdXN0b21pemVkIGxpc3RpbmdzLCBlLmcu IG9uIFVOSVg6Ci0KLSAgZGlyIC1sdCBjKiB8IG1vcmUKLQotICAgb3IgaW4gVk1TOgotCi0gIGRp cmVjdG9yeSAvc2l6ZS9kYXRlL3Byb3RlY3Rpb24vZXhjZXB0PSoub2JqIG9vZmEuKjswCi0KLSAg IFRoaXMgYXBwcm9hY2gsIGhvd2V2ZXIsIGNhcnJpZXMgc29tZSBkaXNhZHZhbnRhZ2VzOiBDLUtl cm1pdCBjYW4ndAotICAgcmV0dXJuIFNVQ0NFU1Mgb3IgRkFJTFVSRSBzdGF0dXMgZm9yIChlLmcu KSAiZGlyIGZvbyIgYWNjb3JkaW5nIHRvCi0gICB3aGV0aGVyIHRoZSBmaWxlICJmb28iIGV4aXN0 czsgYW5kIGl0IHJ1bnMgYW4gaW5mZXJpb3IgcHJvY2Vzcywgd2hpY2gKLSAgIG1pZ2h0IGJlIGEg cHJvYmxlbSBpbiBzb21lIGVudmlyb25tZW50cyBmb3IgcmVzb3VyY2UgYW5kL29yIHNlY3VyaXR5 Ci0gICByZWFzb25zLCBhbmQgd29uJ3Qgd29yayBhdCBhbGwgaW4gYSAibm9wdXNoIiBlbnZpcm9u bWVudCAoZS5nLiBvbmUgaW4KLSAgIHdoaWNoIEMtS2VybWl0IGlzIGNvbmZpZ3VyZWQgdG8gZm9y YmlkIGFjY2VzcyB0byBleHRlcmlvciBjb21tYW5kcyBhbmQKLSAgIHByb2dyYW1zLCBlLmcuIGlu IGEgVk1TICJjYXB0aXZlIGFjY291bnQiKS4KLQotICAgSW4gQy1LZXJtaXQgNy4wIG9uIFZNUyBh bmQgVU5JWCwgYW5kIGluIEs5NSAxLjEuMTkgYW5kIGxhdGVyLCB0aGUKLSAgIERJUkVDVE9SWSBj b21tYW5kIGlzIGludGVybmFsIHRvIEtlcm1pdC4gSXQgY2FuIGJlIHJ1biBpbiBhICJub3B1c2gi Ci0gICBlbnZpcm9ubWVudCBhbmQgcmV0dXJucyBTVUNDRVNTIG9yIEZBSUxVUkUgc3RhdHVzIGFw cHJvcHJpYXRlbHkuIEluCi0gICBVTklYIGl0IHByaW50cyBhbGwgZGF0ZXMgYW5kIHRpbWVzIGlu IGEgY29uc2lzdGVudCB3YXkgKHVubGlrZSBscykuIEluCi0gICBWTVMgaXQgcHJpbnRzIHByZWNp c2UgZmlsZSBzaXplcywgcmF0aGVyIHRoYW4gImJsb2NrcyIuIEl0IG9mZmVycwotICAgc2V2ZXJh bCBmb3JtYXR0aW5nIGFuZCBvdGhlciBvcHRpb25zLCBidXQgaXQgaXMgbm90IG5lY2Vzc2FyaWx5 IG1vcmUKLSAgIGZsZXhpYmxlIHRoYW4gdGhlIGNvcnJlc3BvbmRpbmcgZXh0ZXJuYWwgY29tbWFu ZHMgb3IgcHJvZ3JhbXMgKHRoZSBVTklYCi0gICAibHMiIHByb2dyYW0sIHRoZSBWTVMgImRpcmVj dG9yeSIgY29tbWFuZCkuIFRoZSBzeW50YXggaXM6Ci0KLSAgIERJUkVDVE9SWSBbIHN3aXRjaCBb IHN3aXRjaCBbIC4uLiBdIF0gXSBbIGZpbGVzcGVjIF0KLQotICAgSWYgbm8gZmlsZXNwZWMgaXMg Z2l2ZW4sIGFsbCBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgYXJlIGxpc3RlZC4KLQot ICAgT3B0aW9uYWwgc3dpdGNoZXMgaW5jbHVkZSBhbGwgdGhlIHN0YW5kYXJkIGZpbGUtc2VsZWN0 aW9uIHN3aXRjaGVzCi0gICBwcmVzZW50ZWQgaW4gWzQ3Ml1TZWN0aW9uIDEuNS40LCBwbHVzOgot Ci0gICAvQUxMCi0gICAgICAgICAgU2hvdyBib3RoIHJlZ3VsYXIgZmlsZXMgYW5kIGRpcmVjdG9y aWVzOyB0aGlzIGlzIHRoZSBkZWZhdWx0LgotCi0gICAvQVJSQVk6eAotICAgICAgICAgIEluc3Rl YWQgb2YgZGlzcGxheWluZyBhIGRpcmVjdG9yeSBsaXN0aW5nLCBwdXQgdGhlIGZpbGVzIHRoYXQK LSAgICAgICAgICB3b3VsZCBoYXZlIGJlZW4gc2hvd24gKGJhc2VkIG9uIHRoZSBmaWxlc3BlYyBh bmQgb3RoZXIgc2VsZWN0aW9uCi0gICAgICAgICAgc3dpdGNoZXMpIGluIHRoZSBnaXZlbiBhcnJh eS4gVGhlIGFycmF5IG5lZWQgbm90IChhbmQgc2hvdWxkCi0gICAgICAgICAgbm90KSBiZSBwcmVk ZWNsYXJlZDsgaWYgdGhlIGFycmF5IGFscmVhZHkgZXhpc3RzLCBpdCBpcwotICAgICAgICAgIGRl c3Ryb3llZCBhbmQgcmV1c2VkLiBUaGUgYXJyYXkgbmFtZSBjYW4gYmUgYSBzaW5nbGUgbGV0dGVy LAotICAgICAgICAgIGxpa2UgImEiLCBvciBhbnkgZnVsbGVyIGZvcm0sIHN1Y2ggYXMgIiZhIiwg IlwmYSIsICJcJmFbXSIsIGV0Yy4KLSAgICAgICAgICBJZiB0aGUgL0FSUkFZIHN3aXRjaCBpcyBp bmNsdWRlZCwgdGhlIGZvbGxvd2luZyBvdGhlciBzd2l0Y2hlcwotICAgICAgICAgIGFyZSBpZ25v cmVkOiAvQlJJRUYsIC9WRVJCT1NFLCAvSEVBRElORywgL1BBR0UsIC9FTkdMSVNIREFURSwKLSAg ICAgICAgICAvSVNPREFURSwgL1hGRVJNT0RFLCAvTUVTU0FHRSwgL1NPUlQsIC9SRVZFUlNFLCAv QVNDRU5ESU5HLiBJbgotICAgICAgICAgIG90aGVyIHdvcmRzLCBvbmx5IGZpbGUgc2VsZWN0aW9u IHN3aXRjaGVzIGFyZSBtZWFuaW5nZnVsIHdpdGgKLSAgICAgICAgICAvQVJSQVk6IC9GSUxFUywg L0RJUkVDVE9SSUVTLCAvQUxMLCAvRE9URklMRVMsIC9OT0JBQ0tVUCwKLSAgICAgICAgICAvUkVD VVJTSVZFLCAvU01BTExFUiwgL0xBUkdFUiwgL0FGVEVSLCAvQkVGT1JFLCAvRVhDRVBULCBldGMu Ci0gICAgICAgICAgVGhlIHJlc3VsdGluZyBhcnJheSBoYXMgdGhlIG51bWJlciBvZiBmaWxlcyAo bikgYXMgaXRzIDB0aAotICAgICAgICAgIGVsZW1lbnQsIGFuZCB0aGUgZmlsZW5hbWVzIGluIGVs ZW1lbnRzIDEgdGhyb3VnaCBuIEV4YW1wbGU6Ci0KLSAgZGlyIC9hcnJheTomYSAvZmlsZXMgL25v YmFja3VwIC9hZnRlcjoxOTk5MDEwMSAvbGFyZ2VyOjEwMDAwIFthYl0qCi0gIHNob3cgYXJyYXkg JmEKLQotICAgL0ZJTEVTCi0gICAgICAgICAgT25seSBzaG93IHJlZ3VsYXIgZmlsZXMuCi0KLSAg IC9ESVJFQ1RPUklFUwotICAgICAgICAgIE9ubHkgc2hvdyBkaXJlY3Rvcmllcy4KLQotICAgL0JB Q0tVUAotICAgICAgICAgIEluIFVOSVgsIE9TLTksIEstOTUsIGFuZCBvdGhlciB2ZXJzaW9ucyB0 aGF0IHN1cHBvcnQgU0VUIEZJTEUKLSAgICAgICAgICBDT0xMSVNJT04gQkFDS1VQIGFuZCBjcmVh dGUgYmFja3VwIGZpbGVzIGJ5IGFwcGVuZGluZyAufm5+IHRvCi0gICAgICAgICAgdGhlIGZpbGVu YW1lICh3aGVyZSAibiIgaXMgYSBudW1iZXIpLCAvQkFDS1VQIG1lYW5zIHRvIGluY2x1ZGUKLSAg ICAgICAgICB0aGVzZSBmaWxlcyBpbiBkaXJlY3RvcnkgbGlzdGluZ3MuIFRoaXMgaXMgdGhlIGRl ZmF1bHQuCi0KLSAgIC9OT0JBQ0tVUAotICAgICAgICAgIFRoaXMgaXMgdGhlIG9wcG9zaXRlIG9m IC9CQUNLVVA6IHRoYXQgaXMsIGRvIG5vdCBpbmNsdWRlIGJhY2t1cAotICAgICAgICAgIGZpbGVz IGluIHRoZSBsaXN0aW5nLgotCi0gICAvQlJJRUYKLSAgICAgICAgICBMaXN0IGZpbGVuYW1lcyBv bmx5OyB1c2UgYSBjb21wYWN0IGZvcm1hdCwgYXMgbWFueSBmaWxlbmFtZXMgYXMKLSAgICAgICAg ICB3aWxsIGZpdCBhY3Jvc3MgdGhlIHNjcmVlbiAoYmFzZWQgb24gdGhlIGxvbmdlc3QgbmFtZSku IEEgYnJpZWYKLSAgICAgICAgICBsaXN0aW5nIGlzIGFsd2F5cyBzb3J0ZWQgYWxwaGFiZXRpY2Fs bHkuCi0KLSAgIC9WRVJCT1NFCi0gICAgICAgICAgTGlzdCBvbmUgZmlsZSBwZXIgbGluZSwgYW5k IGluY2x1ZGUgZGF0ZSwgc2l6ZSwgYW5kIChpbiBVTklYCi0gICAgICAgICAgb25seSkgcGVybWlz c2lvbnMgb2YgZWFjaCBmaWxlLiBUaGlzIGlzIHRoZSBvcHBvc2l0ZSBvZiAvQlJJRUYsCi0gICAg ICAgICAgYW5kIGlzIHRoZSBkZWZhdWx0LgotCi0gICAvUEFHRQotICAgICAgICAgIFBhdXNlIGF0 IHRoZSBlbmQgb2YgZWFjaCBzY3JlZW5mdWwgYW5kIGdpdmUgYSAibW9yZT8iIHByb21wdCwKLSAg ICAgICAgICBldmVuIGlmIFNFVCBDT01NQU5EIE1PUkUtUFJPTVBUSU5HIGlzIE9GRi4KLQotICAg L05PUEFHRQotICAgICAgICAgIERvbid0IHBhdXNlIGF0IHRoZSBlbmQgb2YgZWFjaCBzY3JlZW5m dWwgYW5kIGdpdmUgYSAibW9yZT8iCi0gICAgICAgICAgcHJvbXB0LCBldmVuIGlmIFNFVCBDT01N QU5EIE1PUkUtUFJPTVBUSU5HIGlzIE9OLiBJZiBuZWl0aGVyCi0gICAgICAgICAgL1BBR0Ugb3Ig L05PUEFHRSBpcyBnaXZlbiwgcGFnaW5nIGlzIGFjY29yZGluZyB0byB0aGUgcHJldmFpbGluZwot ICAgICAgICAgIENPTU1BTkQgTU9SRS1QUk9NUFRJTkcgc2V0dGluZyAod2hpY2ggY2FuIGJlIGRp c3BsYXllZCB3aXRoIFNIT1cKLSAgICAgICAgICBDT01NQU5EKS4KLQotICAgL0VOR0xJU0hEQVRF Ci0gICAgICAgICAgU2hvdyBkYXRlcyBpbiBkZC1tbW0teXl5eSBmb3JtYXQ7IG1tbSBpcyB0aGUg Zmlyc3QgdGhyZWUgbGV0dGVycwotICAgICAgICAgIG9mIHRoZSBFbmdsaXNoIG1vbnRoIG5hbWUu Ci0KLSAgIC9JU09EQVRFCi0gICAgICAgICAgU2hvdyBkYXRlcyBpbiB5eXl5LW1tLWRkIGZvcm1h dDsgbW0gaXMgdGhlIG1vbnRoIG51bWJlciwgMS0xMi4KLSAgICAgICAgICBUaGlzIGlzIHRoZSBv cHBvc2l0ZSBvZiAvRU5HTElTSERBVEUsIGFuZCBpcyB0aGUgZGVmYXVsdC4KLQotICAgL0hFQURJ TkdTCi0gICAgICAgICAgUHJpbnQgYSBoZWFkaW5nIGJlZm9yZSB0aGUgbGlzdGluZyBhbmQgYSBz dW1tYXJ5IGF0IHRoZSBlbmQuCi0KLSAgIC9OT0hFQURJTkdTCi0gICAgICAgICAgRG9uJ3QgcHJp bnQgYSBoZWFkaW5nIGJlZm9yZSB0aGUgbGlzdGluZyBvciBhIHN1bW1hcnkgYXQgdGhlCi0gICAg ICAgICAgZW5kLiBUaGlzIGlzIHRoZSBvcHBvc2l0ZSBvZiAvSEVBRElOR1MsIGFuZCBpcyB0aGUg ZGVmYXVsdC4KLQotICAgL1hGRVJNT0RFCi0gICAgICAgICAgT25seSBpbiBLZXJtaXQgcHJvZ3Jh bXMgdGhhdCBzdXBwb3J0IFNFVCBGSUxFIFBBVFRFUk5TLiBJZiB0aGlzCi0gICAgICAgICAgc3dp dGNoIGlzIGluY2x1ZGVkLCBhbmQgdGhlIGZpbGVuYW1lIG1hdGNoZXMgYW55IEZJTEUKLSAgICAg ICAgICBCSU5BUlktUEFUVEVSTiAoWzQ3M11TZWN0aW9uIDQuMyksICIoQikiIGlzIHByaW50ZWQg YWZ0ZXIgdGhlCi0gICAgICAgICAgZmlsZW5hbWU7IG90aGVyd2lzZSwgaWYgaXQgbWF0Y2hlcyBh IEZJTEUgVEVYVC1QQVRURVJOLCAiKFQpIiBpcwotICAgICAgICAgIHByaW50ZWQuCi0KLSAgIC9O T1hGRVJNT0RFCi0gICAgICAgICAgRG9uJ3QgZGlzcGxheSB0cmFuc2Zlci1tb2RlIGluZGljYXRv cnMuIFRoaXMgaXMgdGhlIG9wcG9zaXRlIG9mCi0gICAgICAgICAgL1hGRVJNT0RFIGFuZCBpcyB0 aGUgZGVmYXVsdC4KLQotICAgL1JFQ1VSU0lWRQotICAgICAgICAgIFNob3cgZmlsZXMgbm90IG9u bHkgaW4gdGhlIGdpdmVuIGRpcmVjdG9yeSwgYnV0IGFsc28gaW4gaXRzCi0gICAgICAgICAgc3Vi ZGlyZWN0b3JpZXMgKGlmIGFueSksIHRoZWlyIHN1YmRpcmVjdG9yaWVzLCBldGMuCi0KLSAgIC9O T1JFQ1VSU0lWRQotICAgICAgICAgIERvbid0IHNob3cgZmlsZXMgaW4gc3ViZGlyZWN0b3JpZXMu IFRoaXMgaXMgdGhlIG9wcG9zaXRlIG9mCi0gICAgICAgICAgL1JFQ1VSU0lWRSwgYW5kIGlzIHRo ZSBkZWZhdWx0LgotCi0gICAvTUVTU0FHRTp0ZXh0Ci0gICAgICAgICAgVGhpcyBsZXRzIHlvdSBz cGVjaWZ5IGEgc2hvcnQgdGV4dCBzdHJpbmcgdG8gYmUgYXBwZW5kZWQgdG8gdGhlCi0gICAgICAg ICAgZW5kIG9mIGVhY2ggZGlyZWN0b3J5IGxpc3RpbmcgbGluZSAoYSBzcGFjZSBpcyBzdXBwbGll ZAotICAgICAgICAgIGF1dG9tYXRpY2FsbHkpLiBJZiB0aGUgdGV4dCBjb250YWlucyBhbnkgc3Bh Y2VzLCBlbmNsb3NlIGl0IGluCi0gICAgICAgICAgYnJhY2VzLCBlLmcuIC9NRVNTQUdFOnt0d28g d29yZHN9LgotCi0gICAvTk9NRVNTQUdFCi0gICAgICAgICAgRG9uJ3QgYXBwZW5kIGFueSBtZXNz YWdlIHRvIHRoZSBlbmQgb2YgZWFjaCBkaXJlY3RvcnkgbGlzdGluZwotICAgICAgICAgIGxpbmUg KGRlZmF1bHQpLgotCi0gICAvU09SVDpbe05BTUUsU0laRSxEQVRFfV0KLSAgICAgICAgICBTb3J0 IHRoZSBsaXN0aW5nIGJ5IG5hbWUsIHNpemUsIG9yIGRhdGUuIElmIHRoZSAvU09SVCBzd2l0Y2gg aXMKLSAgICAgICAgICBnaXZlbiBidXQgdGhlICJzb3J0LWJ5IiBrZXl3b3JkIGlzIG9taXR0ZWQs IHRoZSBsaXN0aW5nIGlzCi0gICAgICAgICAgc29ydGVkIGJ5IG5hbWUuIC9TT1JUOk5BTUUgL0FT Q0VORElORyAoYWxwaGFiZXRpYyBzb3J0IGJ5IG5hbWUpCi0gICAgICAgICAgaXMgdGhlIGRlZmF1 bHQuCi0KLSAgIC9OT1NPUlQKLSAgICAgICAgICBEb24ndCBzb3J0IHRoZSBsaXN0aW5nLiBGaWxl cyBhcmUgbGlzdGVkIGluIHdoYXRldmVyIG9yZGVyIHRoZXkKLSAgICAgICAgICBhcmUgc3VwcGxp ZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0sIGUuZy4gaW5vZGUgb3JkZXIgaW4gVU5JWC4KLQot ICAgL1JFVkVSU0UKLSAgICAgICAgICBJZiB0aGUgL1NPUlQgc3dpdGNoIGlzIGdpdmVuLCByZXZl cnNlIHRoZSBvcmRlciBvZiB0aGUgc29ydC4KLSAgICAgICAgICBTeW5vbnltOiAvREVTQ0VORElO Ry4KLQotICAgL0FTQ0VORElORwotICAgICAgICAgIElmIHRoZSAvU09SVCBzd2l0Y2ggaXMgZ2l2 ZW4sIHNvcnQgdGhlIGxpc3RpbmcgaW4gbm9ybWFsIG9yZGVyLgotICAgICAgICAgIFRoaXMgaXMg dGhlIG9wcG9zaXRlIG9mIC9SRVZFUlNFIGFuZCBpcyB0aGUgZGVmYXVsdC4KLQotICAgTm90ZSB0 aGF0IG1vc3Qgb2YgdGhlIERJUkVDVE9SWS1zcGVjaWZpYyBzd2l0Y2hlcyBjb21lIGluIHBhaXJz LCBpbgotICAgd2hpY2ggb25lIG1lbWJlciBvZiBhIHBhaXIgKGUuZy4gL05PSEVBRElOR1MpIGlz IHRoZSBvcHBvc2l0ZSBvZiB0aGUKLSAgIG90aGVyIChlLmcuIC9IRUFESU5HUykuCi0KLSAgIElm IHlvdSBhbHdheXMgd2FudCB0byB1c2UgY2VydGFpbiBvcHRpb25zLCB5b3UgY2FuIHNldCB0aGVt IHdpdGggdGhlCi0gICBTRVQgT1BUSU9OUyBESVJFQ1RPUlkgY29tbWFuZCAoWzQ3NF1TZWN0aW9u IDEuNS41KS4gVXNlIFNIT1cgT1BUSU9OUyB0bwotICAgbGlzdCB0aGUgb3B0aW9ucyBjdXJyZW50 bHkgaW4gZWZmZWN0LiBUbyBtYWtlIHRoZSBkZXNpcmVkIG9wdGlvbnMgYXBwbHkKLSAgIGV2ZXJ5 IHRpbWUgeW91IHJ1biBDLUtlcm1pdCwgcHV0IGEgU0VUIE9QVElPTlMgRElSRUNUT1JZIGNvbW1h bmQgaW4KLSAgIHlvdXIgQy1LZXJtaXQgY3VzdG9taXphdGlvbiBmaWxlLCBzcGVjaWZ5aW5nIHRo ZSBkZXNpcmVkIG9wdGlvbnMuCi0gICBPcHRpb25zIHNldCBpbiB0aGlzIG1hbm5lciBhcHBseSB0 byBldmVyeSBzdWJzZXF1ZW50IERJUkVDVE9SWSBjb21tYW5kLgotICAgT2YgY291cnNlLCBpZiB5 b3UgaW5jbHVkZSBzd2l0Y2hlcyBpbiBhIERJUkVDVE9SWSBjb21tYW5kLCB0aGVzZQotICAgb3Zl cnJpZGUgYW55IGRlZmF1bHRzLCBidWlsdC1pbiBvciBjdXN0b20uIEV4YW1wbGU6Ci0KLSAgRElS RUNUT1JZICAgICAgICAgICAgOyBVc2UgImZhY3RvcnkgZGVmYXVsdHMiCi0gIFNFVCBPUFRJT05T IERJUkVDVE9SWSAvU09SVDpTSVpFIC9SRVZFUlNFIC9IRUFESU5HUyAgOyBDdXN0b21pemUgZGVm YXVsdHMKLSAgRElSRUNUT1JZICAgICAgICAgICAgOyBVc2UgY3VzdG9taXplZCBkZWZhdWx0cwot ICBESVIgL1NPUlQ6TkFNRSAgICAgICA7IE92ZXJyaWRlIGN1c3RvbWl6ZWQgZGVmYXVsdCBTT1JU IGtleQotICBTRVQgT1BUIERJUiAvUkVDVVJTICA7IEFkZCAvUkVDVVJTSVZFIHRvIGN1c3RvbWl6 ZWQgZGVmYXVsdHMKLSAgRElSIC9BU0NFTkQgICAgICAgICAgOyBPdmVycmlkZSBjdXN0b21pemVk IGRlZmF1bHQgU09SVCBvcmRlcgotCi0gICBOb3RlczoKLQotICAgICAqIE9ubHkgYSBzaW5nbGUg c29ydCBrZXkgaXMgc3VwcG9ydGVkOyB0aGVyZSBpcyBwcmVzZW50bHkgbm8gd2F5IHRvCi0gICAg ICAgaGF2ZSBtdWx0aXBsZSBzb3J0IGtleXMuCi0gICAgICogSWYgdGhlIC9CUklFRiBzd2l0Y2gg aXMgZ2l2ZW4sIGFsbCBvdGhlciBzd2l0Y2hlcyAoZXhjZXB0Ci0gICAgICAgL1tOT11SRUNVUlNJ VkUsIC9bTk9dRE9URklMRVMsIC9ESVJFQ1RPUklFUywgL0ZJTEVTLCBhbmQgL0FMTCkgYXJlCi0g ICAgICAgaWdub3JlZC4KLSAgICAgKiAvU09SVDphbnl0aGluZyBnaXZlcyBpbmNvcnJlY3QgcmVz dWx0cyBpZiBhbnkgZmlsZXMgaGF2ZSBsZW5ndGhzCi0gICAgICAgZ3JlYXRlciB0aGFuIDEwIGRp Z2l0cyAoaS5lLiB0aGF0IGFyZSBtb3JlIHRoYW4gOTk5OTk5OTk5OSBieXRlcwotICAgICAgIGxv bmcsIGkuZS4gaWYgdGhleSBhcmUgMTBHQiBvciBtb3JlIGluIHNpemUpIGJlY2F1c2UgdGhlIG92 ZXJsb25nCi0gICAgICAgbGVuZ3RoIGZpZWxkIGNhdXNlcyB0aGUgZGF0ZSBhbmQgbmFtZSBmaWVs ZHMgdG8gYmUgbWlzYWxpZ25lZC4KLSAgICAgKiAvU09SVDpOQU1FIGlzIHJlZHVuZGFudCBpbiBW TVMgc2luY2UgVk1TIHJldHVybnMgZmlsZW5hbWVzIGluCi0gICAgICAgYWxwaGFiZXRpYyBvcmRl ciBhbnl3YXkuCi0gICAgICogL1NPUlQ6TkFNRSBpZ25vcmVzIGFscGhhYmV0aWMgY2FzZSBvbiBw bGF0Zm9ybXMgd2hlcmUgY2FzZSBkb2VzIG5vdAotICAgICAgIG1hdHRlciBpbiBmaWxlbmFtZXMs IGJ1dCB0aGlzIHdvcmtzIG9ubHkgZm9yIHVuYWNjZW50ZWQgUm9tYW4KLSAgICAgICBsZXR0ZXJz IEEtWi4KLSAgICAgKiAvU09SVDpOQU1FIGlzIGN1cnJlbnRseSBiYXNlZCBvbiBjb2RlIHZhbHVl cywgYW5kIHNvIHdvcmtzIGZpbmUgZm9yCi0gICAgICAgQVNDSUksIGJ1dCB3aWxsIHByb2JhYmx5 IHByb2R1Y2UgdW5leHBlY3RlZCByZXN1bHRzIGZvciBmaWxlcyB3aXRoCi0gICAgICAgbm9uLUFT Q0lJIG9yIDgtYml0IGNoYXJhY3RlcnMgaW4gdGhlaXIgbmFtZXMuIChMb2NhbGUtYmFzZWQgc29y dGluZwotICAgICAgIHJhaXNlcyByYXRoZXIgc2lnbmlmaWNhbnQgaXNzdWVzIG9mIHBvcnRhYmls aXR5LCBzaXplLCBwZXJmb3JtYW5jZSwKLSAgICAgICBldGMuKQotICAgICAqIC9TT1JUOkRBVEUg d29ya3MgcmlnaHQgb25seSBmb3IgSVNPLWZvcm1hdCBkYXRlcywgbm90IEVuZ2xpc2ggb25lcy4K LSAgICAgKiAvU09SVDpTSVpFIHNvcnRzIHRoZSBzaXplIGZpZWxkIGxleGljYWxseS4gT24gc29t ZSBwbGF0Zm9ybXMgKGUuZy4KLSAgICAgICBXaW5kb3dzKSwgdGhlIHNpemUgb2YgYSBkaXJlY3Rv cnkgZmlsZSBpcyBsaXN0ZWQgYXMgIjxESVI+IiByYXRoZXIKLSAgICAgICB0aGFuIGFzIGEgbnVt YmVyOyBpbiB0aGlzIGNhc2UsIHRoZSAiPERJUj4iIGZpbGVzIGFyZSBnYXRoZXJlZCBhdAotICAg ICAgIHRoZSBlbmQgKG9yIGJlZ2lubmluZywgZGVwZW5kaW5nIG9uIHRoZSBzb3J0IG9yZGVyKSBv ZiB0aGUgbGlzdGluZy4KLSAgICAgKiAvUkVDVVJTSVZFIGlzIGFjY2VwdGVkIGJ1dCBpZ25vcmVk IGluIEFPUy9WUy4gVXNlIHRoZSBub3JtYWwKLSAgICAgICBzeXN0ZW0tc3BlY2lmaWMgZmlsZXNw ZWMgbm90YXRpb24sIGUuZy4gImRpciAjLnR4dCIuCi0gICAgICogL1JFQ1VSU0lWRSBoYXMgbm8g YWZmZWN0IHdoZW4gYSBmdWxsLCBhYnNvbHV0ZSBwYXRobmFtZSBpcyBnaXZlbjsKLSAgICAgICBl LmcuICJkaXIgL3JlY3Vyc2l2ZSAvdG1wL2ZvbyIgKHdoZXJlICJmb28iIGlzIGEgcmVndWxhciBm aWxlKSBvbmx5Ci0gICAgICAgc2hvd3MgdGhlICIvdG1wL2ZvbyIgZmlsZS4gSWYgeW91IHdhbnQg dG8gc2VlIGFsbCAiZm9vIiBmaWxlcyBpbgotICAgICAgIHRoZSAvdG1wIHRyZWUsIGRvICJjZCAv dG1wIiBhbmQgdGhlbiAiZGlyIC9yZWN1cnNpdmUgZm9vIi4KLSAgICAgKiBJZiBhIGZpbGUgc2l6 ZSBvZiAtMSBpcyBzaG93biwgb3IgZGF0ZS10aW1lIG9mIDAwMDAtMDAtMDAgMDA6MDA6MDAsCi0g ICAgICAgdGhpcyBtZWFucyB0aGUgZmlsZSB3YXMgbG9jYXRlZCwgYnV0IGFjY2VzcyB0byBpbmZv cm1hdGlvbiBhYm91dAotICAgICAgIHRoZSBmaWxlIHdhcyBkZW5pZWQgdG8gQy1LZXJtaXQuCi0g ICAgICogSW4gVk1TLCBpZiBGT08uRElSOzEgaXMgYSBkaXJlY3Rvcnkgd2l0aGluIHlvdXIgY3Vy cmVudCBkaXJlY3RvcnksCi0gICAgICAgImRpcmVjdG9yeSBmb28iIGFuZCAiZGlyZWN0b3J5IFsu Zm9vXSIgbGlzdCB0aGUgZmlsZXMgaW4gdGhlIFsuRk9PXQotICAgICAgIHN1YmRpcmVjdG9yeSwg YnV0ICJkaXJlY3RvcnkgZm9vLmRpciIgbGlzdHMgdGhlIGRpcmVjdG9yeSBmaWxlCi0gICAgICAg aXRzZWxmOyBzaW1pbGFybHkgZm9yICIqLmRpciIgdmVyc3VzICJbLipdIiwgZXRjLgotICAgICAq IEluIFVOSVgsIGlmICJmb28iIGlzIGEgZGlyZWN0b3J5IHdpdGhpbiB5b3VyIGN1cnJlbnQgZGly ZWN0b3J5LAotICAgICAgICJkaXJlY3RvcnkgZm9vIiBsaXN0cyB0aGUgZmlsZXMgaW4gdGhlIGZv byBkaXJlY3RvcnkuIElmIHlvdSB3YW50Ci0gICAgICAgdG8gbGlzdCB0aGUgZm9vIGRpcmVjdG9y eSBmaWxlIGl0c2VsZiwgcHV0IGFuIGFzdGVyaXNrIGF0IHRoZSBlbmQ6Ci0gICAgICAgImRpciBm b28qIi4KLQotICAgSGludDogSG93IHRvIGZpbmQgdGhlIGJpZ2dlc3QgZmlsZXMgaW4gYSBkaXJl Y3RvcnkgdHJlZToKLQotICBjZCB4eHggOyAocm9vdCBvZiB0cmVlKQotICBkaXJlY3RvcnkgL3Nv cnQ6c2l6ZSAvcmVjdXJzaXZlIC9yZXZlcnNlIC9kb3RmaWxlcyAvcGFnZQotCi0gICBBbm90aGVy IGhpbnQ6IElmIHlvdSBvZnRlbiB1c2Ugc2V2ZXJhbCBkaWZmZXJlbnQgZGlyZWN0b3J5LWxpc3Rp bmcKLSAgIGZvcm1hdHMsIGRlZmluZSBtYWNybyBzaG9ydGN1dHMgZm9yIHRoZW06Ci0KLSAgREVG SU5FIFdEIERJUkVDVE9SWSAvU09SVDpEQVRFIC9SRVZFUlNFIFwlKiAgOyBSZXZlcnNlIGNocm9u b2xvZ2ljYWwgb3JkZXIKLSAgREVGSU5FIFNEIERJUkVDVE9SWSAvU09SVDpTSVpFIC9SRVZFUlNF IFwlKiAgOyBSZXZlcnNlIG9yZGVyIG9mIHNpemUKLSAgREVGSU5FIE5EIERJUkVDVE9SWSAvU09S VDpOQU1FIC9BU0NFTkQgXCUqICAgOyBBbHBoYWJldGljYWwgYnkgbmFtZQotICBERUZJTkUgREwg RElSIC9ESVIgL1NPUlQ6TkFNRSAvQVNDRU5EIFwlKiAgICA7IEFscGhhYmV0aWNhbCBkaXJlY3Rv cnkgbGlzdAotCi0gICBQdXQgdGhlc2UgZGVmaW5pdGlvbnMgaW4geW91ciBDLUtlcm1pdCBjdXN0 b21pemF0aW9uIGZpbGUuIE5vdGUgdGhhdAotICAgIlwlKiIgKFs0NzVdU2VjdGlvbiA3LjUpIGlu IHRoZXNlIGRlZmluaXRpb25zIGxldHMgeW91IGluY2x1ZGUgb3RoZXIKLSAgIHN3aXRjaGVzIGlu IHlvdXIgbWFjcm8gaW52b2NhdGlvbnMsIGUuZy46Ci0KLSAgd2QgL2hlYWRpbmdzICoudHh0Ci0K LSAgIE9mIGNvdXJzZSB5b3UgY2FuIHN0aWxsIGFjY2VzcyB5b3VyIGV4dGVybmFsIGRpcmVjdG9y eSBsaXN0aW5nIHByb2dyYW0KLSAgIGJ5IHVzaW5nIFJVTiBvciAiISIsIGUuZy4gaW4gVk1TOgot Ci0gIHJ1biBkaXJlY3RvcnkgL3NpemUvZGF0ZS9wcm90ZWN0aW9uL2V4Y2VwdD0qLm9iaiBvb2Zh Lio7MAotCi0gICBvcjoKLQotICAhZGlyIC9zaXplL2RhdGUvcHJvdC9leGM9Ki5vYmogb29mYS4q OzAKLQotICAgSW4gVU5JWCwgdXNlICIhbHMiIG9yIGp1c3QgImxzIiAod2hpY2ggaXMgYSBzcGVj aWFsIHN5bm9ueW0gZm9yICIhbHMiKS4KLQotNC41LjIuIFRoZSBDRCBhbmQgQkFDSyBDb21tYW5k cwotCi0gICBJbiBDLUtlcm1pdCA3LjAsIHRoZSBDRCBjb21tYW5kIGhhcyBhIG5ldyBmcmllbmQs IHRoZSBCQUNLIGNvbW1hbmQuCi0gICBCQUNLIG1lYW5zICJDRCB0byBteSBwcmV2aW91cyBjdXJy ZW50IGRpcmVjdG9yeSIuIEEgc2Vjb25kIEJBQ0sgYnJpbmdzCi0gICB5b3UgYmFjayB0byB3aGVy ZSB5b3Ugd2VyZSBiZWZvcmUgdGhlIGZpcnN0IG9uZTsgdGh1cyBzdWNjZXNzaXZlIEJBQ0sKLSAg IGNvbW1hbmRzIHN3aXRjaCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHR3byBkaXJlY3Rvcmllcy4K LQotNC41LjIuMS4gUGFyc2luZyBJbXByb3ZlbWVudHMKLQotICAgVGhlIENEIGNvbW1hbmQsIGFz IHdlbGwgYXMgb3RoZXIgY29tbWFuZHMgdGhhdCBwYXJzZSBhIGRpcmVjdG9yeSBuYW1lLAotICAg d2VyZSBjaGFuZ2VkIGluIDcuMCB0byBwcm92aWRlIGFsbCB0aGUgZXhwZWN0ZWQgZnVuY3Rpb25z OiBjb21wbGV0aW9uCi0gICBvbiBUYWIgb3IgRXNjLCBkaXJlY3RvcnktbmFtZSBsaXN0cyBvbiA/ LCBldGMuIE90aGVyIGFmZmVjdGVkIGNvbW1hbmRzCi0gICBpbmNsdWRlIFNFVCBTRVJWRVIgR0VU LVBBVEgsIFNFVCBURU1QLURJUkVDVE9SWSwgU0VUIEZJTEUKLSAgIERPV05MT0FELURJUkVDVE9S WSwgYW5kIFNQQUNFLiBDRCBhbmQgUkVNT1RFIENEIGFsc28gbm93IHdvcmsgd2l0aAotICAgbG9n aWNhbCBuYW1lcy4KLQotICAgSW4gVk1TLCB0aGUgc2l0dWF0aW9uIGlzIGEgYml0IGNvbXBsaWNh dGVkIHNpbmNlIGEgZGlyZWN0b3J5IG5hbWUgY2FuCi0gICBsb29rIGxpa2UgIkRFVjoiLCAiW0ZP Ty5CQVJdIiwgIkRFVjpbRk9PLkJBUl0iLCAiW0ZPT11CQVIuRElSOzEiLCBldGMuCi0gICBDb21w bGV0aW9uIGFuZCA/LWhlbHAgbWlnaHQgbm90IGFsd2F5cyB3b3JrLCBidXQgdGhleSBkbyBpbiBt YW55IGNhc2VzLgotICAgRXhhbXBsZXM6Ci0KLSAgY2QgPyAgICAgICAgICAgTGlzdHMgYWxsIHN1 YmRpcmVjdG9yaWVzIG9mIHRoZSBjdXJyZW50IGRpcmVjdG9yeQotICBjZCBbXT8gICAgICAgICBE aXR0bwotICBjZCBrPyAgICAgICAgICBEaXR0bywgYnV0IG9ubHkgdGhvc2Ugc3RhcnRpbmcgd2l0 aCBLCi0gIGNkIFtmb29dPyAgICAgIExpc3RzIGFsbCBzdWJkaXJlY3RvcmllcyBvZiB0aGUgW0ZP T10gZGlyZWN0b3J5Ci0gIGNkIFstXT8gICAgICAgIExpc3RzIGFsbCBzdWJkaXJlY3RvcmllcyBv ZiB0aGUgc3VwZXJpb3IgZGlyZWN0b3J5Ci0gIGNkIFstLV0/ICAgICAgIExpc3RzIGFsbCBzdWJk aXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IDIgbGV2ZWxzIHVwCi0gIGNkIFsuLi5dPyAgICAg IExpc3RzIGFsbCBkaXJlY3RvcmllcyBiZWxvdyB0aGUgY3VycmVudCBvbmUKLSAgY2QgW2Zvby4/ ICAgICAgRG9lcyBub3Qgd29yay4KLQotICAgQy1LZXJtaXQgYWxsb3dzIGFsbCBvZiB0aGUgZm9s bG93aW5nIGluIFZNUzoKLQotICBjZCBiYXIgICAgICAgICBDRCB0byBzdWJkaXJlY3RvcnkgQkFS IG9mIHRoZSBjdXJyZW50IGRpcmVjdG9yeQotICBjZCAuYmFyICAgICAgICBEaXR0bwotICBjZCBb LmJhcl0gICAgICBEaXR0bwotICBjZCBiYXIuZGlyICAgICBldGMuLi4KLSAgY2QgYmFyLmRpcjsK LSAgY2QgYmFyLmRpcjsxCi0gIGNkIFtmb28uYmFyXQotICBjZCA8Zm9vLmJhcj4KLSAgY2QgYmFy LmJheiAgICAgVGhpcyBjYW4gZ28gbW9yZSB0aGFuIDEgbGV2ZWwgZGVlcC4uLgotICBjZCBkaXI6 ICAgICAgICAod2hlcmUgbG9naWNhbCBuYW1lIERJUiBpcyBkZWZpbmVkIGFzIFtGT08uQkFSXSkK LQotICAgQXMgd2VsbCBhcyB0aGUgZm9sbG93aW5nOgotCi0gIGNkIC4uICAgICAgICAgIEdvIHVw IG9uZSBsZXZlbCBhcyBpbiBVTklYCi0gIGNkIC4gICAgICAgICAgIFRoZSBjdXJyZW50IGRpcmVj dG9yeQotICBjZCAgICAgICAgICAgICBNeSBsb2dpbiBkaXJlY3RvcnkKLQotICAgTm90ZSB0aGF0 ICJjZCAtIiAoZ28gdXAgb25lIGxldmVsKSBkb2VzIG5vdCB3b3JrIGFzIGV4cGVjdGVkLCBiZWNh dXNlCi0gICAiLSIgaXMgS2VybWl0J3MgY29tbWFuZCBjb250aW51YXRpb24gY2hhcmFjdGVyLiBI b3dldmVyLCAiY2QgWy1dIiwgYW5kCi0gICAiCi0gICBjZCB7LX0iIGhhdmUgdGhlIGRlc2lyZWQg ZWZmZWN0IChhbmQgc28gZG9lcyAiY2QgLi4iLCB3aGljaCBpcyBlYXNpZXIKLSAgIHRvIHR5cGUp LgotCi00LjUuMi4yLiBUaGUgQ0RQQVRICi0KLSAgIFRoZSBDRCBjb21tYW5kIGluIHRoZSBVTklY LCBXaW5kb3dzLCBPUy8yLCBhbmQgVk1TIHZlcnNpb25zIG9mCi0gICBDLUtlcm1pdCwgYXMgb2Yg dmVyc2lvbiA2LjEgLyAxLjEuMTIsIHNlYXJjaGVzIHRoZSBDRFBBVEggZm9yIHRoZSBnaXZlbgot ICAgZGlyZWN0b3J5LCBpZiBpdCBpcyBub3QgYWJzb2x1dGUgYW5kIGlmIGEgQ0RQQVRIIGVudmly b25tZW50IHZhcmlhYmxlCi0gICBpcyBkZWZpbmVkLiBFeGFtcGxlIChpbiBVTklYIGtzaCBvciBi YXNoKToKLQotICAkIGV4cG9ydCBDRFBBVEg9JEhPTUU6JEhPTUUva2VybWl0Oi90bXAKLQotICAg Tm93IGlmIHlvdSBnaXZlIGEgImNkIHh4eCIgY29tbWFuZCwgbm8gbWF0dGVyIHdoYXQgeW91ciBj dXJyZW50Ci0gICBkaXJlY3RvcnkgaXMsIGlmIHRoZSAieHh4IiBkaXJlY3RvcnkgaXMgbm90IGEg c3ViZGlyZWN0b3J5IG9mIHlvdXIKLSAgIGN1cnJlbnQgZGlyZWN0b3J5LCB0aGVuIHRoZSB4eHgg c3ViZGlyZWN0b3J5IG9mIHlvdXIgaG9tZSBkaXJlY3RvcnkgaXMKLSAgIHVzZWQgb3IgaWYgdGhh dCBkb2VzIG5vdCBleGlzdCwgdGhlbiB0aGUgeHh4IHN1YmRpcmVjdG9yeSBvZiB0aGUga2VybWl0 Ci0gICBzdWJkaXJlY3Rvcnkgb2YgeW91ciBob21lIGRpcmVjdG9yeSBpcyB1c2VkIG9yIGlmIHRo YXQgZG9lcyBub3QgZXhpc3QsCi0gICB0aGVuIC90bXAveHh4IGlzIHVzZWQuIFRoaXMgaXMgaG93 IHRoZSBrc2ggImNkIiBjb21tYW5kIHdvcmtzLCBhbmQgbm93Ci0gICB0aGUgQy1LZXJtaXQgQ0Qg Y29tbWFuZCB3b3JrcyB0aGUgc2FtZSB3YXkuCi0KLSAgIEluIFZNUywgeW91IGNhbiBkZWZpbmUg Q0RQQVRIIHRvIGJlIGEgbGlzdCBvZiBkaXJlY3RvcmllcyB0aGF0IGNvbnRhaW4KLSAgIGFjdHVh bCBkaXJlY3RvcnkgZGVsaW1pdGVycywgYW5kL29yIGxvZ2ljYWwgbmFtZXMgcmVwcmVzZW50aW5n Ci0gICBkaXJlY3RvcmllcywgdXNpbmcgY29tbWFzIHRvIHNlcGFyYXRlIHRoZW0sIGUuZy46Ci0K LSAgJCBkZWZpbmUgY2RwYXRoIFtIT01FXSxbU09NRU9USEVSRElSXSxbSE9NRS5NSVNDXQotICAk IGRlZmluZSBjZHBhdGggU1lTJExPR0lOOixESVNLMTpbSE9NRV0sRElTSzI6W1NDUkFUQ0guSVZB Tl0KLQotICAgRXhhbXBsZToKLQotICAkIGRlZmluZSBjZHBhdGggU1lTJExPR0lOOixbSVZBTl0s W09MQUZdLFtPTEdBLk1JU0NdCi0gICQga2VybWl0Ci0gIERJU0sxOltPTEdBXSBDLUtlcm1pdD4g Y2QgYmxhaAotCi0gICB0cmllcyB0aGUgQkxBSCBzdWJkaXJlY3Rvcnkgb2YgdGhlIHVzZXIncyBs b2dpbiBkaXJlY3RvcnksIHRoZW4KLSAgIFtPTEdBLkJMQUhdLCBbSVZBTi5CTEFIXSwgW09MQUYu QkxBSF0sIGFuZCBbT0xHQS5NSVNDLkJMQUhdLCBpbiB0aGF0Ci0gICBvcmRlciwgdXNpbmcgdGhl IGZpcnN0IG9uZSBpdCBmaW5kcywgZmFpbGluZyBpZiBpdCBmaW5kcyBub25lLgotCi0gICBJbiBD LUtlcm1pdCA3LjAsIHlvdSBtYXkgYWxzbyBzZXQgdGhlIENEUEFUSCBmcm9tIHRoZSBLZXJtaXQg cHJvbXB0OgotCi0gICBTRVQgQ0QgUEFUSCBwYXRoCi0gICAgICAgICAgQWxsb3dzIHRoZSBDRCBQ QVRIIHRvIGJlIHNldCBmcm9tIHdpdGhpbiBDLUtlcm1pdC4KLQotICAgU0hPVyBDRCBzaG93cyB0 aGUgQ0QgcGF0aCBhbmQgYWxsIG90aGVyIGluZm9ybWF0aW9uIHJlbGV2YW50IHRvIHRoZSBDRAot ICAgY29tbWFuZC4KLQotNC41LjIuMy4gQ0QgTWVzc2FnZXMKLQotICAgV2hlbmV2ZXIgeW91IGNo YW5nZSBkaXJlY3RvcnksIHlvdSBjYW4gaGF2ZSBDLUtlcm1pdCBkaXNwbGF5IGEgIlJlYWQKLSAg IE1lIiBmaWxlIGZyb20gdGhlIG5ldyBkaXJlY3RvcnkgYXV0b21hdGljYWxseS4gVGhlIGNvbW1h bmRzIGFyZToKLQotICAgU0VUIENEIE1FU1NBR0UgeyBPTiwgT0ZGLCBGSUxFIGxpc3QgfQotICAg ICAgICAgIE9OIGVuYWJsZXMgdGhpcyBmZWF0dXJlOyBPRkYgKHRoZSBkZWZhdWx0KSBkaXNhYmxl cyBpdC4gRmlsZQotICAgICAgICAgIGxldHMgeW91IHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlICJS ZWFkIE1lIiBmaWxlLiBBIGxpc3Qgb2YgbmFtZXMKLSAgICAgICAgICB0byBsb29rIGZvciBjYW4g YmUgZ2l2ZW4gaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6Ci0KLSAge3tuYW1lMX17bmFtZTJ9e25h bWUzfXsuLi59fQotCi0gICAgICAgICAgZS5nLjoKLQotICBTRVQgU0VSVkVSIENELU1FU1NBR0Ug RklMRSB7ey4vLnJlYWRtZX17UkVBRE1FLlRYVH17UkVBRC5NRX19Ci0KLSAgICAgICAgICBUaGUg ZGVmYXVsdCBsaXN0IG9mIENELW1lc3NhZ2UgZmlsZXMgaXMgc3lzdGVtIGRlcGVuZGVudC4KLQot ICAgU0hPVyBDRCBzaG93cyB5b3VyIGN1cnJlbnQgZGlyZWN0b3J5LCBwcmV2aW91cyBkaXJlY3Rv cnksIENEIHBhdGgsIGFuZAotICAgQ0QgbWVzc2FnZSBpbmZvLgotCi00LjUuMy4gQ3JlYXRpbmcg YW5kIFJlbW92aW5nIERpcmVjdG9yaWVzCi0KLSAgIFRoZSBNS0RJUiBjb21tYW5kIG5vdyBhbGxv d3MgeW91IHRvIGNyZWF0ZSBtdWx0aXBsZSBkaXJlY3RvcmllcyBhdAotICAgb25jZToKLQotICBD LUtlcm1pdD4gbWtkaXIgYS9iL2MvZAotCi0gICBjcmVhdGVzIHRoZSBkaXJlY3RvcnkgYSBpbiB0 aGUgY3VycmVudCBkaXJlY3RvcnkgKGlmIGl0IGRvZXNuJ3QgZXhpc3QKLSAgIGFscmVhZHkpLCBh bmQgdGhlbiBjcmVhdGVzIHN1YmRpcmVjdG9yeSBiIGluIHRoZSBhIGRpcmVjdG9yeSAoaWYgaXQK LSAgIGRpZG4ndCBleGlzdCBhbHJlYWR5KSwgYW5kIHNvIG9uLgotCi0gICBJZiB5b3UgdXNlIE1L RElSIHRvIHRyeSB0byBjcmVhdGUgYSBkaXJlY3RvcnkgdGhhdCBhbHJlYWR5IGV4aXN0cywKLSAg IEMtS2VybWl0IHdpbGwgcHJpbnQgYSB3YXJuaW5nICgiP0RpcmVjdG9yeSBhbHJlYWR5IGV4aXN0 cyIpLCBidXQgdGhlCi0gICBNS0RJUiBjb21tYW5kIHdpbGwgc3RpbGwgc3VjY2VlZC4gSWYgeW91 IHdhbnQgdG8gYXZvaWQgdGhlIHdhcm5pbmcKLSAgIG1lc3NhZ2UsIHVzZSBJRiBESVJFQ1RPUlkg Zmlyc3QgdG8gY2hlY2sgaWYgdGhlIGRpcmVjdG9yeSBhbHJlYWR5Ci0gICBleGlzdHMuCi0KLSAg IFRoZSBSTURJUiBjb21tYW5kLCBob3dldmVyLCB3aWxsIG5vdCByZW1vdmUgbW9yZSB0aGFuIG9u ZSBkaXJlY3RvcnksCi0gICBub3Igd2lsbCBpdCByZW1vdmUgYSBkaXJlY3RvcnkgdGhhdCBjb250 YWlucyBhbnkgZmlsZXMuIChUaGVyZSBpcywgYXMKLSAgIHlldCwgbm8gUk1ESVIgL1JFQ1VSU0lW RSBjb21tYW5kLCBhbHRob3VnaCBvbmUgbWlnaHQgYmUgYWRkZWQgbGF0ZXIuKQotCi0gICBJbiBW TVMsIHRoZXNlIGNvbW1hbmRzIChsaWtlIENEKSBhcmUgbW9yZSBmb3JnaXZpbmcgb2YgeW91ciBz eW50YXggdGhhbgotICAgaXMgdGhlIERDTCBjb21tYW5kIHNoZWxsOyAibWtkaXIgb29mYSIgaXMg ZXF1aXZhbGVudCB0byAibWtkaXIgWy5vb2ZhXSIKLSAgIGFuZCBzbyBvbi4gQWxzbyBpbiBWTVMs IHlvdSdsbCBmaW5kIHRoYXQgQy1LZXJtaXQncyBSTURJUiBjb21tYW5kIGlzCi0gICBlYXNpZXIg dGhhbiBkZWxldGluZyBhIGRpcmVjdG9yeSBpbiBEQ0wsIHNpbmNlIGl0IGF1dG9tYXRpY2FsbHkg Zmlyc3QKLSAgIGdpdmVzIGl0IG93bmVyIGRlbGV0ZSBwZXJtaXNzaW9uIGlmIHlvdSBhcmUgdGhl IG93bmVyLgotCi00LjUuNC4gVGhlIERFTEVURSBhbmQgUFVSR0UgQ29tbWFuZHMKLQotICAgVGhl IERFTEVURSBjb21tYW5kIG5vdyBvZmZlcnMgYSBzZWxlY3Rpb24gb2Ygc3dpdGNoZXMsIGFuZCBo YXMgYSBuZXcKLSAgIGNvbXBhbmlvbiwgdGhlIFBVUkdFIGNvbW1hbmQuIEZpcnN0LCBERUxFVEU6 Ci0KLSAgIERFTEVURSBbIHN3aXRjaGVzLi4uIF0gZmlsZXNwZWMKLSAgICAgICAgICBEZWxldGVz IHRoZSBmaWxlIG9yIGZpbGVzIHRoYXQgbWF0Y2ggdGhlIGZpbGVzcGVjLCB3aGljaCBtYXkKLSAg ICAgICAgICBjb250YWluIHdpbGRjYXJkcyAoWzQ3Nl1TZWN0aW9uIDQuOSkuCi0KLSAgIE9wdGlv bmFsIHN3aXRjaGVzIGluY2x1ZGUgdGhlIHN0YW5kYXJkIGZpbGUtc2VsZWN0aW9uIHN3aXRjaGVz Ci0gICBwcmVzZW50ZWQgaW4gWzQ3N11TZWN0aW9uIDEuNS40LCBwbHVzOgotCi0gICAvQVNLCi0g ICAgICAgICAgQmVmb3JlIGRlbGV0aW5nIGVhY2ggZmlsZSwgYXNrIHBlcm1pc3Npb24gaW50ZXJh Y3RpdmVseS4gQW5zd2VycwotICAgICAgICAgIGFyZSBZZXMgb3IgT0sgKGRlbGV0ZSB0aGUgZmls ZSksIE5vIChkb24ndCBkZWxldGUgaXQpLCBvciBRdWl0Ci0gICAgICAgICAgKHN0b3AgZXhlY3V0 aW5nIHRoZSBERUxFVEUgY29tbWFuZCkuCi0KLSAgIC9OT0FTSwotICAgICAgICAgIERvbid0IGFz ayBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBlYWNoIGZpbGUuCi0KLSAgIC9MSVNUCi0gICAgICAgICAg TGlzdCBlYWNoIGZpbGUgYW5kIHNob3cgd2hldGhlciBpdCB3YXMgZGVsZXRlZC4gU3lub255bXM6 IC9MT0csCi0gICAgICAgICAgL1ZFUkJPU0UuCi0KLSAgIC9OT0xJU1QKLSAgICAgICAgICBEb24n dCBsaXN0IGZpbGVzIHdoaWxlIGRlbGV0aW5nIHRoZW0uIFN5bm9ueW1zOiAvTk9MT0csIC9RVUlF VC4KLQotICAgL0hFQURJTkcKLSAgICAgICAgICBQcmludCBhIGhlYWRpbmcgYW5kIHN1bW1hcnkg bGluZS4KLQotICAgL05PSEVBRElORwotICAgICAgICAgIERvbid0IHByaW50IGEgaGVhZGluZyBh bmQgc3VtbWFyeSBsaW5lLgotCi0gICAvUEFHRQotICAgICAgICAgIFdoZW4gbGlzdGluZywgcGF1 c2UgYXQgdGhlIGVuZCBvZiBlYWNoIHNjcmVlbmZ1bCBhbmQgZ2l2ZSB0aGUKLSAgICAgICAgICAi TW9yZT8iIHByb21wdC4gSWYgeW91IHJlcGx5ICJuIiAobm8pLCB0aGUgREVMRVRFIGNvbW1hbmQK LSAgICAgICAgICB0ZXJtaW5hdGVzLgotCi0gICAvU0lNVUxBVEUKLSAgICAgICAgICBEbyBldmVy eXRoaW5nIGltcGxpZWQgYnkgdGhlIGdpdmVuIHN3aXRjaGVzIGFuZCBmaWxlc3BlYywgZXhjZXB0 Ci0gICAgICAgICAgZG8gbm90IGFjdHVhbGx5IGRlbGV0ZSBhbnkgZmlsZXMuIFRoaXMgbGV0cyB5 b3UgcHJldmlldyB3aGljaAotICAgICAgICAgIGZpbGVzIHdvdWxkIGJlIGRlbGV0ZWQ7IGltcGxp ZXMgL0xJU1QuCi0KLSAgIE5vdyB0aGUgUFVSR0UgY29tbWFuZDoKLQotICAgUFVSR0UgWyBzd2l0 Y2hlcy4uLiBdIFsgZmlsZXNwZWMgXQotICAgICAgICAgIChWTVMgb25seSkgUnVucyB0aGUgRENM IFBVUkdFIGNvbW1hbmQuIFN3aXRjaGVzIGFuZCBmaWxlc3BlYywgaWYKLSAgICAgICAgICBhbnks IGFyZSBwYXNzZWQgZGlyZWN0bHkgdG8gRENMIHdpdGhvdXQgcGFyc2luZyBvciB2ZXJpZmljYXRp b24uCi0gICAgICAgICAgRGVsZXRlcyBleGNlc3MgdmVyc2lvbnMgb2YgdGhlIGdpdmVuIChvciBh bGwpIGZpbGVzLiBUaGUgcmVzdCBvZgotICAgICAgICAgIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCBh cHBseSB0byBWTVMuCi0KLSAgIFBVUkdFIFsgc3dpdGNoZXMuLi4gXSBbIGZpbGVzcGVjIF0KLSAg ICAgICAgICAoVU5JWCBvbmx5KSBEZWxldGVzICJiYWNrdXAgZmlsZXMiIHRoYXQgbWF0Y2ggdGhl IGZpbGVzcGVjLAotICAgICAgICAgIHdoaWNoIG1heSBjb250YWluIHdpbGRjYXJkcyAoWzQ3OF1T ZWN0aW9uIDQuOSkuIElmIG5vIGZpbGVzcGVjCi0gICAgICAgICAgaXMgZ2l2ZW4sIGFsbCBiYWNr dXAgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFyZSBzZWxlY3RlZAotICAgICAgICAg IChzdWJqZWN0IHRvIG1vZGlmaWNhdGlvbiBieSBhbnkgc3dpdGNoZXMpLiBEbyBub3QgaW5jbHVk ZSBiYWNrdXAKLSAgICAgICAgICBub3RhdGlvbiBpbiB0aGUgZmlsZXNwZWMuCi0KLSAgIEV4cGxh bmF0aW9uOgotCi0gICBUbyBhdm9pZCBkZXN0cm95aW5nIHByZWV4aXN0aW5nIGZpbGVzIHdoZW4g YSBuZXcgZmlsZSBhcnJpdmVzIHRoYXQgaGFzCi0gICB0aGUgc2FtZSBuYW1lLCBDLUtlcm1pdCBi YWNrcyB1cCB0aGUgb2xkIGZpbGUgYnkgYXBwZW5kaW5nIGEgImJhY2t1cAotICAgbnVtYmVyIiB0 byBpdHMgbmFtZS4gSW4gVU5JWCwgdGhlIGJhY2t1cCBzdWZmaXggY29uc2lzdHMgb2YgYSBwZXJp b2QsIGEKLSAgIHRpbGRlLCBhIG51bWJlciwgYW5kIGFub3RoZXIgdGlsZGUuIEZvciBleGFtcGxl LCBpZiBhIGZpbGUgY2FsbGVkCi0gICBvb2ZhLnR4dCBleGlzdHMgYW5kIGEgbmV3IG9vZmEudHh0 IGZpbGUgYXJyaXZlcywgdGhlIG9yaWdpbmFsIGlzCi0gICByZW5hbWVkIHRvIG9vZmEudHh0Ln4x fi4gSWYgYW5vdGhlciBvb2ZhLnR4dCBmaWxlIGFycml2ZXMsIHRoZSBleGlzdGluZwotICAgb25l IGlzIHJlbmFtZWQgdG8gb29mYS50eHQufjJ+LiBBbmQgc28gb24uIFRoaXMgc3lzdGVtIGlzIGNv bXBhdGlibGUKLSAgIHdpdGggdGhlIG9uZSB1c2VkIGJ5IEVNQUNTLiBUaHVzIG92ZXIgdGltZSwg aWYgeW91IHJlY2VpdmUgYSBsb3Qgb2YKLSAgIGZpbGVzIHdpdGggQy1LZXJtaXQgb3IgZWRpdCB0 aGVtIHdpdGggRU1BQ1MsIGJhY2t1cCBmaWxlcyBjYW4gYnVpbGQgdXAuCi0gICBUaGUgbmV3IFBV UkdFIGNvbW1hbmQgbGV0cyB5b3UgY2xlYW4gb3V0IGFjY3VtdWxhdGVkIGJhY2t1cCBmaWxlczoK LQotICAgT3B0aW9uYWwgc3dpdGNoZXMgaW5jbHVkZSB0aGUgc3RhbmRhcmQgZmlsZS1zZWxlY3Rp b24gc3dpdGNoZXMKLSAgIHByZXNlbnRlZCBpbiBbNDc5XVNlY3Rpb24gMS41LjQsIHBsdXMgYWxs IHRoZSBzd2l0Y2hlcyBsaXN0ZWQgYWJvdmUgZm9yCi0gICB0aGUgREVMRVRFIGNvbW1hbmQsIHBs dXM6Ci0KLSAgIC9LRUVQOm4KLSAgICAgICAgICBSZXRhaW5zIHRoZSBuIG1vc3QgcmVjZW50ICho aWdoZXN0LW51bWJlcmVkKSBiYWNrdXAgZmlsZXMgZm9yCi0gICAgICAgICAgZWFjaCBmaWxlLiBG b3IgZXhhbXBsZSwgaWYgb29mYS50eHQsIG9vZmEudHh0Ln4xfiwgb29mYS50eHQufjJ+LAotICAg ICAgICAgIG9vZmEudHh0Ln4xMH4sIG9vZmEudHh0Ln4xMn4sIGFuZCBvb2ZhLnR4dC5+MTAwfiBl eGlzdCwgInB1cmdlCi0gICAgICAgICAgL2tlZXA6MiBvb2ZhLnR4dCIgZGVsZXRlcyBvb2ZhLnR4 dC5+MX4sIG9vZmEudHh0Ln4yfiwgYW5kCi0gICAgICAgICAgb29mYS50eHQufjEwfiwgYW5kIGtl ZXBzIG9vZmEudHh0LCBvb2ZhLnR4dC5+MTJ+LCBhbmQKLSAgICAgICAgICBvb2ZhLnR4dC5+MTAw fi4gSWYgL0tFRVAgaXMgZ2l2ZW4gd2l0aG91dCBhIG51bWJlciwgb25lICh0aGUKLSAgICAgICAg ICBoaWdoZXN0IG51bWJlcmVkKSBiYWNrdXAgZmlsZSBpcyBrZXB0LgotCi0gICBDQVVUSU9OOiBU aGUgUFVSR0UgY29tbWFuZCBzaG91bGQgYmUgdXNlZCBvbmx5IHdoZW4gKi5+Kn4gZmlsZXMgdHJ1 bHkKLSAgIGFyZSBiYWNrdXAgZmlsZXMuIFRoaXMgaXMgdGhlIGNhc2UgZm9yIEVNQUNTLCBhbmQg aXQgaXMgdGhlIERFRkFVTFQgZm9yCi0gICBDLUtlcm1pdC4gSG93ZXZlciwgaWYgQy1LZXJtaXQn cyBGSUxFIENPTExJU0lPTiBoYXMgYmVlbiBzZXQgdG8gUkVOQU1FLAotICAgbmV3bHkgcmVjZWl2 ZWQgZmlsZXMgd2lsbCBsb29rIGxpa2UgYmFja3VwIGZpbGVzLiBJbiB0aGF0IGNhc2UsIGRvbid0 Ci0gICB1c2UgdGhlIFBVUkdFIGNvbW1hbmQgb3IgeW91J2xsIGJlIHJlbW92aW5nIG5ldyBmaWxl cyByYXRoZXIgdGhhbiBvbGQKLSAgIG9uZXMuIChVc2UgU0hPVyBGSUxFIHRvIGZpbmQgdGhlIEZJ TEUgQ09MTElTSU9OIHNldHRpbmcuKQotCi0gICBUaGUgUFVSR0UgY29tbWFuZCBpcyBwcmVzZW50 bHkgYXZhaWxhYmxlIG9ubHkgaW4gVU5JWC4gVGhlIGNvbW1hbmQKLSAgIHN1Y2NlZWRzIGlmIGl0 IGRlbGV0ZWQgYW55IGZpbGVzLCBvciBpZiBpdCBkZWxldGVkIG5vIGZpbGVzIGJ1dCB0aGVyZQot ICAgd2VyZSBubyBlcnJvcnMuIEl0IGZhaWxzIGlmIGl0IGRlbGV0ZWQgbm8gZmlsZXMgYW5kIHRo ZXJlIHdlcmUgZXJyb3JzCi0gICAoaS5lLiBkZWxldGlvbiB3YXMgYXR0ZW1wdGVkIGJ1dCBmYWls ZWQpLiBJbiBWTVMsIGJhY2t1cCBmaWxlIHZlcnNpb25zCi0gICBhcmUgaGFuZGxlZCBhdXRvbWF0 aWNhbGx5IGJ5IHRoZSBPUywgYW5kIGEgUFVSR0UgY29tbWFuZCBjYW4gYmUgdXNlZCBhdAotICAg dGhlIFZNUyBwcm9tcHQgdG8gY2xlYW4gdGhlbSB1cC4KLQotICAgSWYgeW91IHdhbnQgY2VydGFp biBzd2l0Y2hlcyB0byBiZSBzdXBwbGllZCBhdXRvbWF0aWNhbGx5IHdpdGggZWFjaAotICAgREVM RVRFIG9yIFBVUkdFIGNvbW1hbmQsIHlvdSBjYW4gc2V0IHRoZW0gd2l0aCBTRVQgT1BUSU9OUwot ICAgKFs0ODBdU2VjdGlvbiAxLjUuNSkgYW5kIHlvdSBjYW4gZGlzcGxheSBhbnkgc3VjaCBzZXR0 aW5ncyB3aXRoIFNIT1cKLSAgIE9QVElPTlMuIE9mIGNvdXJzZSB5b3UgY2FuIG92ZXJyaWRlIHRo ZW0gb24gYSBwZXItY29tbWFuZCBiYXNpcyBieQotICAgaW5jbHVkaW5nIHN3aXRjaGVzIGluIHlv dXIgUFVSR0Ugb3IgREVMRVRFIGNvbW1hbmQuCi0KLSAgIEFsc28gc2VlIFNFVCBGSUxFIENPTExJ U0lPTiwgU0hPVyBGSUxFLCBTRU5EIC9OT0JBQ0tVUCwgU0VUIFNFTkQKLSAgIEJBQ0tVUCwgYW5k IERJUkVDVE9SWSAvW05PXUJBQ0tVUC4KLQotNC42LiBTdGFydGluZyB0aGUgUmVtb3RlIEtlcm1p dCBTZXJ2ZXIgQXV0b21hdGljYWxseQotCi0gICBBcyBub3RlZCBvbiBwYWdlcyAyNzUtMjc2IG9m IFs0ODFdVXNpbmcgQy1LZXJtaXQgMm5kIGVkaXRpb24sIHlvdSBjYW4KLSAgIGhhdmUgS2VybWl0 IHNlbmQgImtlcm1pdCByZWNlaXZlIiBjb21tYW5kcyBhdXRvbWF0aWNhbGx5IHdoZW4gaXQgaXMg aW4KLSAgIGxvY2FsIG1vZGUgYW5kIHlvdSBnaXZlIGEgU0VORCBvciBzaW1pbGFyIGNvbW1hbmQs IHRvIHN0YXJ0IHRoZSByZW1vdGUKLSAgIEtlcm1pdCByZWNlaXZlciBpbiBjYXNlIGl0IGlzIG5v dCBhbHJlYWR5IHN0YXJ0ZWQuIFRoZSAia2VybWl0IHJlY2VpdmUiCi0gICBjb21tYW5kcyBhcmUg c3BlY2lmaWVkIGJ5OgotCi0gIFNFVCBQUk9UT0NPTCBLRVJNSVQgYmluYXJ5LXJlY2VpdmUtY29t bWFuZCB0ZXh0LXJlY2VpdmUtY29tbWFuZAotCi0gICBBcyBvZiB2ZXJzaW9uIDcuMCwgYSBLZXJt aXQgcHJvdG9jb2wgb3B0aW9uIGhhcyBiZWVuIGFkZGVkIHRvIHNlbmQgYQotICAgc3RyaW5nIHRv IHRoZSBob3N0IGluIGFkdmFuY2Ugb2YgYW55IEtlcm1pdCBwYWNrZXRzIHdoZW4geW91IGdpdmUg YQotICAgR0VULWNsYXNzIG9yIFJFTU9URSBjb21tYW5kLiBUaGlzIHdpbGwgc3dpdGNoIHRoZSBy ZW1vdGUgQy1LZXJtaXQgaW50bwotICAgdGhlIGFwcHJvcHJpYXRlIG1vZGUgb3IsIGlmIHRoZSBy ZW1vdGUgc3lzdGVtIGlzIGF0IGEgc3lzdGVtIGNvbW1hbmQKLSAgIChzaGVsbCkgcHJvbXB0LCBl eGVjdXRlIHRoZSBzdHJpbmcgb24gdGhlIHJlbW90ZSBzeXN0ZW0uIFRoZSBuZXcgc3ludGF4Ci0g ICBvZiB0aGUgU0VUIFBST1RPQ09MIEtFUk1JVCBjb21tYW5kIGlzOgotCi0gIFNFVCBQUk9UT0NP TCBLRVJNSVQgWyBzMSBbIHMyIFsgczMgXSBdIF0KLQotICAgd2hlcmU6Ci0KLSAgICAgICBEZWZh dWx0ICAgICAgICAgTWVhbmluZwotICBzMSAge2tlcm1pdCAtaXJ9ICAgICBSZW1vdGUgImtlcm1p dCByZWNlaXZlIGluIGJpbmFyeSBtb2RlIiBjb21tYW5kLgotICBzMiAge2tlcm1pdCAtcn0gICAg ICBSZW1vdGUgImtlcm1pdCByZWNlaXZlIGluIHRleHQgbW9kZSIgY29tbWFuZC4KLSAgczMgIHtr ZXJtaXQgLXh9ICAgICAgUmVtb3RlICJzdGFydCBrZXJtaXQgc2VydmVyIiBjb21tYW5kLgotCi0g ICBOT1RFOiBJZiB0aGUgcmVtb3RlIEtlcm1pdCBpcyA2LjAsIHRoZSBmb2xsb3dpbmcgYXJlIHJl Y29tbWVuZGVkIGZvcgotICAgZmFzdCBzdGFydHVwIGFuZCBoaWdoLXBlcmZvcm1hbmNlIGZpbGUg dHJhbnNmZXIgKHNlZSBBcHBlbmRpeCBJIGluCi0gICBbNDgyXVVzaW5nIEMtS2VybWl0LCBzZWNv bmQgRWRpdGlvbiwgZm9yIGNvbW1hbmQtbGluZSBvcHRpb25zKToKLQotICBzMSAgIGtlcm1pdCAt WVFpciAgIChLZXJtaXQgcmVjZWl2ZSBiaW5hcnksIHNraXAgaW5pdCBmaWxlLCBmYXN0LikKLSAg czIgICBrZXJtaXQgLVlRVHIgICAoS2VybWl0IHJlY2VpdmUgdGV4dCwgc2tpcCBpbml0IGZpbGUs IGZhc3QuKQotICBzMyAgIGtlcm1pdCAtWVF4ICAgIChLZXJtaXQgc2VydmVyLCBza2lwIGluaXQg ZmlsZSwgZmFzdC4pCi0KLSAgIElmIHRoZSByZW1vdGUgaXMgQy1LZXJtaXQgNy4wIG9yIGxhdGVy LCBjaGFuZ2UgdGhlIC14IG9wdGlvbiAoZW50ZXIKLSAgIHNlcnZlciBtb2RlKSB0byAtTyAodXBw ZXJjYXNlIGxldHRlciBPKSwgd2hpY2ggbWVhbnMgImVudGVyIHNlcnZlciBtb2RlCi0gICBmb3Ig T25lIHRyYW5zYWN0aW9uIG9ubHkpOyB0aGlzIHdheSwgaXQgaXMgbm90IHN0dWNrIGluIHNlcnZl ciBhZnRlcgotICAgdGhlIHRyYW5zZmVyLiBBbHNvIG5vdGUgdGhhdCB0aGUgUSBpcyByZWR1bmRh bnQgaW4gdmVyc2lvbiA3LjAsIHNpbmNlCi0gICBmYXN0IEtlcm1pdCBwcm90b2NvbCBzZXR0aW5n cyBhcmUgbm93IHRoZSBkZWZhdWx0LgotCi0gICBOb3RlIHRoYXQgaW4gY2FzZSB0aGUgQy1LZXJt aXQgZXhlY3V0YWJsZSBpcyBjYWxsZWQgIndlcm1pdCIgb3IKLSAgICJja2VybWl0IiB5b3UgY2Fu IGNoYW5nZSAia2VybWl0IiBpbiB0aGUgc3RyaW5ncyBhYm92ZSB0byAid2VybWl0IiBvcgotICAg ImNrZXJtaXQiIGFuZCBDLUtlcm1pdCA3LjAgb3IgbGF0ZXIgd2lsbCByZWNvZ25pemUgdGhlc2Ug YXMgc3lub255bXMKLSAgIGZvciAia2VybWl0IiwgaW4gY2FzZSBpdCBpcyBhdCBpdHMgY29tbWFu ZCBwcm9tcHQgd2hlbiBvbmUgb2YgdGhlc2UKLSAgIHN0cmluZ3MgaXMgc2VudCB0byBpdC4KLQot NC43LiBGaWxlLVRyYW5zZmVyIENvbW1hbmQgU3dpdGNoZXMKLQotICAgT3ZlciB0aGUgeWVhcnMs IHZhcmlvdXMgbmV3IG1ldGhvZHMgb2YgdHJhbnNmZXJyaW5nIGEgZmlsZSBoYXZlCi0gICBhY2N1 bXVsYXRlZCwgdW50aWwgd2UgaGFkLCBpbiBhZGRpdGlvbiB0byB0aGUgU0VORCBjb21tYW5kLCBh bHNvIE1PVkUKLSAgIChzZW5kIGFuZCB0aGVuIGRlbGV0ZSksIE1BSUwgKHNlbmQgYXMgZW1haWwp LCBSRU1PVEUgUFJJTlQgKHNlbmQgdG8gYmUKLSAgIHByaW50ZWQpLCBDU0VORCAoc2VuZCB0aGUg b3V0cHV0IG9mIGEgY29tbWFuZCksIFBTRU5EIChzZW5kIGEgcGFydCBvZiBhCi0gICBmaWxlKSwg QlNFTkQgKHNlbmQgaW4gYmluYXJ5IG1vZGUpLCBSRVNFTkQgKHJlc3VtZSBhbiBpbnRlcnJ1cHRl ZAotICAgU0VORCksIGV0YyBldGMuIFNpbWlsYXJseTogR0VULCBSRUdFVCwgQ0dFVCwgUkVUUklF VkUsIGFuZCBzbyBvbi4KLQotICAgTm90IG9ubHkgaXMgaXQgY29uZnVzaW5nIHRvIGhhdmUgZGlm ZmVyZW50IG5hbWVzIGZvciB0aGVzZSBjb21tYW5kcywKLSAgIG1hbnkgb2Ygd2hpY2ggYXJlIG5v dCByZWFsIHdvcmRzLCBidXQgdGhpcyBhbHNvIGRvZXMgbm90IGFsbG93IGFsbAotICAgY29tYmlu YXRpb25zLCBsaWtlICJzZW5kIGEgZmlsZSBhcyBtYWlsLCB0aGVuIGRlbGV0ZSBpdCIuCi0KLSAg IEluIEMtS2VybWl0IDcuMCwgdGhlIFNFTkQsIEdFVCwgYW5kIFJFQ0VJVkUgY29tbWFuZHMgd2Vy ZSByZXN0cnVjdHVyZWQKLSAgIHRvIGFjY2VwdCBtb2RpZmllciBzd2l0Y2hlcyAoc3dpdGNoZXMg YXJlIGV4cGxhaW5lZCBpbiBbNDgzXVNlY3Rpb24KLSAgIDEuNSkuCi0KLTQuNy4xLiBTRU5EIENv bW1hbmQgU3dpdGNoZXMKLQotICAgV2l0aG91dCBzd2l0Y2hlcywgdGhlIFNFTkQgY29tbWFuZCBz dGlsbCB3b3JrcyBleGFjdGx5IGFzIGJlZm9yZToKLQotICBzZW5kIG9vZmEudHh0ICAgICAgOyBz ZW5kIGEgc2luZ2xlIGZpbGUKLSAgc2VuZCBvb2ZhLiogICAgICAgIDsgc2VuZCBtdWx0aXBsZSBm aWxlcwotICBzZW5kIG9vZmEudHh0IHgueCAgOyBzZW5kIG9vZmEudHh0IGFzIHgueCAodGVsbCBy ZWNlaXZlciBpdHMgbmFtZSBpcyB4LngpCi0gIHNlbmQgICAgICAgICAgICAgICA7IHNlbmQgZnJv bSBTRU5ELUxJU1QKLQotICAgQnV0IG5vdyB0aGUgZm9sbG93aW5nIG1vZGlmaWVyIHN3aXRjaGVz IG1heSBiZSBpbmNsdWRlZCBiZXR3ZWVuICJzZW5kIgotICAgYW5kIHRoZSBmaWxlbmFtZS4gWmVy bywgb25lLCB0d28sIG9yIG1vcmUgc3dpdGNoZXMgbWF5IGJlIGluY2x1ZGVkIGluCi0gICBhbnkg Y29tYmluYXRpb24gdGhhdCBtYWtlcyBzZW5zZS4gU3dpdGNoIG5hbWVzIChzdWNoIGFzIC9CSU5B UlkpIGNhbiBiZQotICAgYWJicmV2aWF0ZWQsIGp1c3QgbGlrZSBhbnkgb3RoZXIga2V5d29yZHMu IE1vc3Qgb2YgdGhlc2Ugc3dpdGNoZXMgd29yawotICAgb25seSB3aGVuIHVzaW5nIEtlcm1pdCBw cm90b2NvbCAoL1RFWFQgYW5kIC9CSU5BUlkgYXJlIHRoZSBleGNlcHRpb25zKS4KLQotICAgL0FG VEVSOmRhdGUtdGltZQotICAgICAgICAgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMg bW9kaWZpZWQgKG9yLCBpbiBWTVMsIGNyZWF0ZWQpCi0gICAgICAgICAgYWZ0ZXIgdGhlIGdpdmVu IGRhdGUtdGltZSAoc2VlIFs0ODRdU2VjdGlvbiAxLjYpIGFyZSB0byBiZSBzZW50LgotICAgICAg ICAgIEV4YW1wbGVzOgotCi0gIHNlbmQgL3RleHQgL2FmdGVyOnsyLUZlYi0xOTk3IDEwOjI4OjMw fSAqLnR4dAotICBzZW5kIC90ZXh0IC9hZnRlcjpcZmRhdGUob29mYS50eHQpICoudHh0Ci0KLSAg ICAgICAgICBTeW5vbnltOiAvU0lOQ0UuCi0KLSAgIC9BUlJBWTphcnJheW5hbWUKLSAgICAgICAg ICBTcGVjaWZpZXMgdGhhdCBpbnN0ZWFkIG9mIHNlbmRpbmcgYSBmaWxlLCBDLUtlcm1pdCBpcyB0 byBzZW5kCi0gICAgICAgICAgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBhcnJheS4gU2luY2Ug YW4gYXJyYXkgZG9lcyBub3QgaGF2ZSBhCi0gICAgICAgICAgZmlsZW5hbWUsIHlvdSBzaG91bGQg aW5jbHVkZSBhbiAvQVMtTkFNRSBzd2l0Y2ggdG8gc3BlY2lmeSB0aGUKLSAgICAgICAgICBuYW1l IHVuZGVyIHdoaWNoIHRoZSBhcnJheSBpcyB0byBiZSBzZW50IChpZiB5b3UgZG8gbm90LCB0aGUK LSAgICAgICAgICBuYW1lICJfYXJyYXlfeF8iIGlzIHVzZWQsIHdoZXJlICd4JyBpcyByZXBsYWNl ZCBieSB0aGUgYXJyYXkKLSAgICAgICAgICBkZXNpZ25hdG9yKS4gU2VlIFs0ODVdc2VjdGlvbiA3 LjEwIGZvciBhcnJheS1uYW1lIHN5bnRheC4gQXMKLSAgICAgICAgICBub3RlZCBpbiB0aGF0IHNl Y3Rpb24sIHlvdSBjYW4gYWxzbyBpbmNsdWRlIGEgcmFuZ2UgdG8gaGF2ZSBhCi0gICAgICAgICAg c2VnbWVudCBvZiB0aGUgYXJyYXkgc2VudCwgcmF0aGVyIHRoYW4gdGhlIHdob2xlIHRoaW5nOyBm b3IKLSAgICAgICAgICBleGFtcGxlOiAic2VuZCAvYXJyYXk6JmFbMTAwOjE5OV0iLiBJdCBpcyBz dHJvbmdseSByZWNvbW1lbmRlZAotICAgICAgICAgIHRoYXQgeW91IGFjY29tcGFueSB0aGUgL0FS UkFZIHN3aXRjaCB3aXRoIGEgL1RFWFQgb3IgL0JJTkFSWQotICAgICAgICAgIHN3aXRjaCB0byBm b3JjZSB0aGUgZGVzaXJlZCB0cmFuc2ZlciBtb2RlLCBzaW5jZSBvdGhlcndpc2UgdGhlCi0gICAg ICAgICAgdmFyaW91cyBhdXRvbWF0aWMgbWVjaGFuaXNtcyBtaWdodCBzd2l0Y2ggdG8gYmluYXJ5 IG1vZGUgd2hlbgotICAgICAgICAgIHlvdSByZWFsbHkgd2FudGVkIHRleHQsIG9yIHZpY2UgdmVy c2EuIEluIHRleHQgbW9kZSBhIGxpbmUKLSAgICAgICAgICB0ZXJtaW5hdG9yIGlzIGFkZGVkIHRv IHRoZSBlbmQgb2YgZWFjaCBhcnJheSBlbGVtZW50LCBidXQgbm90IGluCi0gICAgICAgICAgYmlu YXJ5IG1vZGUuIEZvciBkZXRhaWxzIGFuZCBleGFtcGxlcyBzZWUgWzQ4Nl1TZWN0aW9uIDcuMTAu MTEuCi0KLSAgIC9BUy1OQU1FOnRleHQKLSAgICAgICAgICBTcGVjaWZpZXMgInRleHQiIGFzIHRo ZSBuYW1lIHRvIHNlbmQgdGhlIGZpbGUgdW5kZXIuIFlvdSBjYW4KLSAgICAgICAgICBhbHNvIHN0 aWxsIHNwZWNpZnkgdGhlIGFzLW5hbWUgYXMgdGhlIHNlY29uZCBmaWxlbmFtZSBvbiB0aGUKLSAg ICAgICAgICBTRU5EIGNvbW1hbmQgbGluZS4gVGhlIGZvbGxvd2luZyB0d28gY29tbWFuZHMgYXJl IGVxdWl2YWxlbnQ6Ci0KLSAgc2VuZCBvb2ZhLnR4dCBvb2ZhLm5ldwotICBzZW5kIC9hczpvb2Zh Lm5ldyBvb2ZhLnR4dAotCi0gICAvQkVGT1JFOmRhdGUtdGltZQotICAgICAgICAgIFNwZWNpZmll cyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMgbW9kaWZpZWQgKG9yLCBpbiBWTVMsIGNyZWF0ZWQpCi0g ICAgICAgICAgYmVmb3JlIHRoZSBnaXZlbiBkYXRlLXRpbWUgKFs0ODddU2VjdGlvbiAxLjYpIGFy ZSB0byBiZSBzZW50LgotCi0gICAvQklOQVJZCi0gICAgICAgICAgUGVyZm9ybXMgdGhpcyB0cmFu c2ZlciBpbiBiaW5hcnkgbW9kZSB3aXRob3V0IGFmZmVjdGluZyB0aGUKLSAgICAgICAgICBnbG9i YWwgdHJhbnNmZXIgbW9kZSwgb3ZlcnJpZGluZyBub3Qgb25seSB0aGUgRklMRSBUWVBFIGFuZAot ICAgICAgICAgIFRSQU5TRkVSIE1PREUgc2V0dGluZ3MsIGJ1dCBhbHNvIHRoZSBGSUxFIFBBVFRF Uk4gc2V0dGluZywgYnV0Ci0gICAgICAgICAgZm9yIHRoaXMgU0VORCBjb21tYW5kIG9ubHkuIElu IG90aGVyIHdvcmRzLCBTRU5EIC9CSU5BUlkgbWVhbnMKLSAgICAgICAgICB3aGF0IGl0IHNheXM6 IHNlbmQgdGhlIGZpbGUgaW4gYmluYXJ5IG1vZGUsIHJlZ2FyZGxlc3Mgb2YgYW55Ci0gICAgICAg ICAgb3RoZXIgc2V0dGluZ3MuIEV4YW1wbGU6Ci0KLSAgc2V0IGZpbGUgdHlwZSB0ZXh0ICAgICAg OyBTZXQgZ2xvYmFsIHRyYW5zZmVyIG1vZGUgdG8gdGV4dAotICBzZW5kIC9iaW5hcnkgb29mYS56 aXAgICA7IFNlbmQgYSBmaWxlIGluIGJpbmFyeQotICBzZW5kIG9vZmEudHh0ICAgICAgICAgICA7 IFRoaXMgb25lIGlzIHNlbnQgaW4gdGV4dCBtb2RlCi0KLSAgIC9DT01NQU5ECi0gICAgICAgICAg U0VORCAvQ09NTUFORCBpcyBlcXVpdmFsZW50IHRvIENTRU5EIChbNDg4XVNlY3Rpb24gNC4yLjIp IC0tIGl0Ci0gICAgICAgICAgc2F5cyB0byBzZW5kIHRoZSBvdXRwdXQgZnJvbSBhIGNvbW1hbmQs IHJhdGhlciB0aGFuIHRoZSBjb250ZW50cwotICAgICAgICAgIG9mIGEgZmlsZS4gVGhlIGZpcnN0 ICJmaWxlbmFtZSIgb24gdGhlIFNFTkQgY29tbWFuZCBsaW5lIGlzCi0gICAgICAgICAgaW50ZXJw cmV0ZWQgYXMgdGhlIG5hbWUgb2YgYSBjb21tYW5kOyB0aGUgc2Vjb25kIChpZiBhbnkpIGlzIHRo ZQotICAgICAgICAgIGFzLW5hbWUuIEV4YW1wbGVzOgotCi0gIHNlbmQgL2NvbW1hbmQge2dyZXAg U3VuZGF5IG9vZmEudHh0fSBzdW5kYXkudHh0Ci0gIHNlbmQgL2FzLW5hbWU6c3VuZGF5LnR4dCAv Y29tbWFuZCB7Z3JlcCBTdW5kYXkgb29mYS50eHR9Ci0gIHNlbmQgL2JpbiAvY29tbWFuZCB7dGFy IGNmIC0gLiB8IGd6aXAgLWN9IHshZ3VuemlwIC1jIHwgdGFyIHhmIC19Ci0KLSAgIC9ERUxFVEUK LSAgICAgICAgICBEZWxldGVzIHRoZSBmaWxlIChvciBlYWNoIGZpbGUgaW4gdGhlIGdyb3VwKSBh ZnRlciBpdCBoYXMgYmVlbgotICAgICAgICAgIHNlbnQgc3VjY2Vzc2Z1bGx5IChidXQgZG9lcyBu b3QgZGVsZXRlIGl0IGlmIGl0IHdhcyBub3Qgc2VudAotICAgICAgICAgIHN1Y2Nlc3NmdWxseSku IFNFTkQgL0RFTEVURSBpcyBlcXVpdmFsZW50IHRvIE1PVkUuIEhhcyBubyBlZmZlY3QKLSAgICAg ICAgICB3aGVuIHVzZWQgd2l0aCAvQ09NTUFORC4gRXhhbXBsZToKLQotICBzZW5kIC9kZWxldGUg Ki5sb2cKLQotICAgL0RPVEZJTEVTCi0gICAgICAgICAgKFVOSVggYW5kIE9TLTkgb25seSkgTm9y bWFsbHkgZmlsZXMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCAiLiIKLSAgICAgICAgICBhcmUgc2tp cHBlZCB3aGVuIG1hdGNoaW5nIHdpbGRjYXJkcyB0aGF0IGRvIG5vdCBhbHNvIGJlZ2luIHdpdGgK LSAgICAgICAgICAiLiIuIEluY2x1ZGUgL0RPVEZJTEVTIHRvIGZvcmNlIHRoZXNlIGZpbGVzIHRv IGJlIGluY2x1ZGVkIHRvby4KLQotICAgL1JFQ1VSU0lWRQotICAgICAgICAgIERlc2NlbmQgdGhl IHRocm91Z2ggdGhlIGRpcmVjdG9yeSB0cmVlIHdoZW4gbG9jYXRpbmcgZmlsZXMgdG8KLSAgICAg ICAgICBzZW5kLiBBdXRvbWF0aWNhbGx5IHNldHMgL1BBVEhOQU1FUzpSRUxBVElWRS4gRXhwbGFp bmVkIGluCi0gICAgICAgICAgWzQ4OV1TZWN0aW9uIDQuMTEgLgotCi0gICAvRVhDRVBUOnBhdHRl cm4KLSAgICAgICAgICBTZWUgWzQ5MF1TZWN0aW9uIDEuNS40LgotCi0gICAvTk9CQUNLVVAKLSAg ICAgICAgICBUaGlzIG1lYW5zIHRvIHNraXAgYmFja3VwIGZpbGVzIHdoZW4gc2VuZGluZywgZXZl biBpZiB0aGV5IG1hdGNoCi0gICAgICAgICAgdGhlIFNFTkQgZmlsZSBzcGVjaWZpY2F0aW9uLiBU aGlzIGlzIGVxdWl2YWxlbnQgdG8gdXNpbmcgU0VORAotICAgICAgICAgIC9FWENFUFQgYW5kIGlu Y2x1ZGluZyAqLn5bMC05XSp+IGluIHRoZSBleGNlcHRpb24gbGlzdCAob3IgKi5+Kn4KLSAgICAg ICAgICBpZiBLZXJtaXQgd2FzIGJ1aWx0IHdpdGhvdXQgcGF0dGVybi1tYXRjaGluZyBzdXBwb3J0 OyBzZWUKLSAgICAgICAgICBbNDkxXVNlY3Rpb24gNC45LjEpLiBJbmNsdWRpbmcgdGhpcyBzd2l0 Y2ggaXMgZXF1aXZhbGVudCB0bwotICAgICAgICAgIGdpdmluZyBTRVQgU0VORCBCQUNLVVAgT0ZG IChbNDkyXVNlY3Rpb24gNC4wLjYpIHByaW9yIHRvIFNFTkQsCi0gICAgICAgICAgZXhjZXB0IGl0 cyBlZmZlY3QgaXMgbG9jYWwgdG8gdGhlIFNFTkQgY29tbWFuZCB3aXRoIHdoaWNoIGl0IHdhcwot ICAgICAgICAgIGdpdmVuLgotCi0gICAvTk9ET1RGSUxFUwotICAgICAgICAgIFRoZSBvcHBvc2l0 ZSBvZiAvRE9URklMRVMgKHEudi4pCi0KLSAgIC9GSUxFTkFNRVM6e0NPTlZFUlRFRCxMSVRFUkFM fQotICAgICAgICAgIFVzZSB0aGlzIHN3aXRjaCB0byBvdmVycmlkZSB0aGUgY3VycmVudCBnbG9i YWwgU0VUIEZJTEUgTkFNRVMKLSAgICAgICAgICBzZXR0aW5nIGZvciB0aGlzIHRyYW5zZmVyIG9u bHkuCi0KLSAgIC9GSUxURVI6Y29tbWFuZAotICAgICAgICAgIFRoaXMgc3BlY2lmaWVzIGEgZmls dGVyIHRvIHBhc3MgdGhlIGZpbGUgdGhyb3VnaCBiZWZvcmUgc2VuZGluZwotICAgICAgICAgIGl0 LiBTZWUgdGhlIFs0OTNdc2VjdGlvbiBvbiBmaWxlLXRyYW5zZmVyIHBpcGVzIGFuZCBmaWx0ZXJz LiBUaGUKLSAgICAgICAgICAvRklMVEVSIHN3aXRjaCBhcHBsaWVzIG9ubHkgdG8gdGhlIGZpbGUt dHJhbnNmZXIgY29tbWFuZCBpdCBpcwotICAgICAgICAgIGdpdmVuIHdpdGg7IGl0IGRvZXMgbm90 IGFmZmVjdCB0aGUgZ2xvYmFsIFNFTkQgRklMVEVSIHNldHRpbmcsCi0gICAgICAgICAgaWYgYW55 LgotCi0gICAvSU1BR0UKLSAgICAgICAgICBWTVM6IFNlbmRzIGluIGltYWdlIG1vZGUuIE5vbi1W TVM6IHNhbWUgYXMgL0JJTkFSWS4KLQotICAgL0xBQkVMRUQKLSAgICAgICAgICBWTVMgYW5kIE9T LzIgb25seTogU2VuZHMgaW4gbGFiZWxlZCBtb2RlLgotCi0gICAvTEFSR0VSLVRIQU46bnVtYmVy Ci0gICAgICAgICAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBmaWxlcyB0aGF0IGFyZSBsb25n ZXIgdGhhbiB0aGUgZ2l2ZW4KLSAgICAgICAgICBudW1iZXIgb2YgYnl0ZXMgYXJlIHRvIGJlIHNl bnQuCi0KLSAgIC9MSVNURklMRTpmaWxlbmFtZQotICAgICAgICAgIFNwZWNpZmllcyB0aGF0IHRo ZSBmaWxlcyB0byBiZSBzZW50IGFyZSBsaXN0ZWQgaW4gYSBmaWxlIHdpdGgKLSAgICAgICAgICB0 aGUgZ2l2ZW4gZmlsZW5hbWUuIFRoZSBmaWxlIGNvbnRhaW5zIG9uZSBmaWxlbmFtZSBwZXIgbGlu ZS4KLSAgICAgICAgICBUaGVzZSBmaWxlbmFtZXMgYXJlIG5vdCBjaGVja2VkIGluIGFueSB3YXk7 IGVhY2ggZmlsZW5hbWUgaXMKLSAgICAgICAgICB0YWtlbiBhbmQgZG9lcyBub3QgdXNlIG9yIGRl cGVuZCBvbiBhbnkgS2VybWl0LXNwZWNpZmljIHN5bnRheC4KLSAgICAgICAgICBJbiBwYXJ0aWN1 bGFyLCBiYWNrc2xhc2hlcyBhcmUgbm90IHRyZWF0ZWQgc3BlY2lhbGx5LCBsZWFkaW5nCi0gICAg ICAgICAgYW5kIHRyYWlsaW5nIHNwYWNlcyBhcmUgbm90IHN0cmlwcGVkLCBldGMuIEhvd2V2ZXIs IGlmIGEKLSAgICAgICAgICBmaWxlbmFtZSBjb250YWlucyB3aWxkY2FyZHMsIHRoZXkgYXJlIGV4 cGFuZGVkLiBFeGFtcGxlOiBJZiBhCi0gICAgICAgICAgZmlsZSBuYW1lZCBmaWxlcy50eHQgY29u dGFpbnMgdGhlIGZvbGxvd2luZyBsaW5lczoKLQotICBibGFoLnR4dAotICBvb2ZhKgotICB4LngK LQotICAgICAgICAgIChidXQgd2l0aG91dCBsZWFkaW5nIG9yIHRyYWlsaW5nIHNwYWNlcyksIHRo ZW4gdGhlIEMtS2VybWl0Ci0gICAgICAgICAgY29tbWFuZCAic2VuZCAvbGlzdGZpbGU6ZmlsZXMu dHh0IiB3aWxsIHNlbmQgdGhlIGZpbGVzIGJsYWgudHh0LAotICAgICAgICAgIHgueCwgYW5kIGFs bCBmaWxlcyB3aG9zZSBuYW1lcyBzdGFydCB3aXRoICJvb2ZhIiwgYXNzdW1pbmcgdGhlCi0gICAg ICAgICAgZmlsZXMgZXhpc3QgYW5kIGFyZSByZWFkYWJsZS4gVGhlIC9MSVNURklMRSBzd2l0Y2gs IGNhbiwgb2YKLSAgICAgICAgICBjb3Vyc2UsIGJlIHVzZWQgd2l0aCBvdGhlciBzd2l0Y2hlcyB3 aGVuIGl0IG1ha2VzIHNlbnNlLCBmb3IKLSAgICAgICAgICBleGFtcGxlLCAvRVhDRVBULCAvQklO QVJZLCAvQUZURVIsIC9TTUFMTEVSLCAvTU9WRS1UTywgL0RFTEVURSwKLSAgICAgICAgICAvQVMt TkFNRSB3aXRoIGEgdGVtcGxhdGUsIGV0Yy4KLQotICAgL01BSUw6YWRkcmVzcwotICAgICAgICAg IFNlbmRzIHRoZSBmaWxlIGFzIGUtbWFpbCB0byB0aGUgZ2l2ZW4gYWRkcmVzcyBvciBhZGRyZXNz ZXMuCi0gICAgICAgICAgInNlbmQgL21haWw6YWRkcmVzcyBmaWxlbmFtZSIgaXMgZXF1aXZhbGVu dCB0byAibWFpbCBmaWxlbmFtZQotICAgICAgICAgIGFkZHJlc3MiLiBZb3UgY2FuIGluY2x1ZGUg bXVsdGlwbGUgYWRkcmVzc2VzIHNlcGFyYXRlZCBieQotICAgICAgICAgIGNvbW1hcy4gRXhhbXBs ZXM6Ci0KLSAgc2VuZCAvbWFpbDprZXJtaXQtc3VwcG9ydEBjb2x1bWJpYS5lZHUgcGFja2V0Lmxv ZwotICBzZW5kIC9tYWlsOmNtZyxmZGMsanJkIG9vZmEudHh0Ci0KLSAgICAgICAgICBBcyB3aXRo IGFueSBzd2l0Y2ggYXJndW1lbnQsIGlmIHRoZSBhZGRyZXNzIG9yIGFkZHJlc3MgbGlzdAotICAg ICAgICAgIGNvbnRhaW5zIGFueSBzcGFjZXMsIHlvdSBtdXN0IGVuY2xvc2UgaXQgaW4gYnJhY2Vz LiBUaGUgZm9ybWF0Ci0gICAgICAgICAgb2YgdGhlIGFkZHJlc3NlcyBtdXN0IGFncmVlIHdpdGgg dGhhdCB1bmRlcnN0b29kIGJ5IHRoZQotICAgICAgICAgIG1haWwtc2VuZGluZyBwcm9ncmFtIG9u IHRoZSByZWNlaXZlcidzIGNvbXB1dGVyLgotCi0gICAvTU9WRS1UTzpkaXJlY3RvcnktbmFtZQot ICAgICAgICAgIFNwZWNpZmllcyB0aGF0IGFmdGVyIGVhY2ggKG9yIHRoZSBvbmx5KSBzb3VyY2Ug ZmlsZSBpcyBzZW50Ci0gICAgICAgICAgc3VjY2Vzc2Z1bGx5LCBhbmQgT05MWSBpZiBpdCBpcyBz ZW50IHN1Y2Nlc3NmdWxseSwgaXQgc2hvdWxkIGJlCi0gICAgICAgICAgbW92ZWQgdG8gdGhlIG5h bWVkIGRpcmVjdG9yeS4gSWYgdGhlIGRpcmVjdG9yeSBuYW1lIGNvbnRhaW5zCi0gICAgICAgICAg c3BhY2VzLCBlbmNsb3NlIGl0IGluIGJyYWNlcy4gSWYgdGhlIGRpcmVjdG9yeSBkb2VzIG5vdCBl eGlzdCwKLSAgICAgICAgICBpdCBpcyBjcmVhdGVkIGlmIHBvc3NpYmxlOyBpZiBpdCBjYW4ndCBi ZSBjcmVhdGVkLCB0aGUgY29tbWFuZAotICAgICAgICAgIGZhaWxzIGFuZCBhbiBlcnJvciBtZXNz YWdlIGlzIHByaW50ZWQuIEV4YW1wbGU6Ci0KLSAgc2VuZCAvdGV4dCAvbW92ZS10bzovdXNlcnMv b2xnYS9iYWNrdXAvICoudHh0Ci0KLSAgIC9OT1QtQUZURVI6ZGF0ZS10aW1lCi0gICAgICAgICAg U3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBmaWxlcyBtb2RpZmllZCBhdCBvciBiZWZvcmUgdGhl IGdpdmVuCi0gICAgICAgICAgZGF0ZSBhbmQgdGltZSBhcmUgdG8gYmUgc2VudC4KLQotICAgL05P VC1CRUZPUkU6ZGF0ZS10aW1lCi0gICAgICAgICAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBm aWxlcyBtb2RpZmllZCBhdCBvciBhZnRlciB0aGUgZ2l2ZW4KLSAgICAgICAgICBkYXRlIGFuZCB0 aW1lIGFyZSB0byBiZSBzZW50LgotCi0gICAvUEFUSE5BTUVTOntPRkYsQUJTT0xVVEUsUkVMQVRJ VkV9Ci0gICAgICAgICAgVXNlIHRoaXMgc3dpdGNoIHRvIG92ZXJyaWRlIHRoZSBjdXJyZW50IGds b2JhbCBTRVQgU0VORAotICAgICAgICAgIFBBVEhOQU1FUyBzZXR0aW5nIGZvciB0aGlzIHRyYW5z ZmVyIG9ubHkuIC9QQVRITkFNRVM6QUJTT0xVVEUgb3IKLSAgICAgICAgICBSRUxBVElWRSBhbHNv IHNldHMgL0ZJTEVOQU1FUzpMSVRFUkFMIChhbHNvIGZvciB0aGlzIHRyYW5zZmVyCi0gICAgICAg ICAgb25seSkgc2luY2UgcGF0aG5hbWVzIGFyZSBub3Qgc2VudCBvdGhlcndpc2UuCi0KLSAgIC9S RU5BTUUtVE86dGV4dAotICAgICAgICAgIFNwZWNpZmllcyB0aGF0IGFmdGVyIHRoZSAob3IgZWFj aCkgc291cmNlIGZpbGUgaXMgc2VudAotICAgICAgICAgIHN1Y2Nlc3NmdWxseSwgYW5kIE9OTFkg aWYgaXQgaXMgc2VudCBzdWNjZXNzZnVsbHksIGl0IHNob3VsZCBiZQotICAgICAgICAgIHJlbmFt ZWQgdG8gdGhlIG5hbWUgZ2l2ZW4uIElmIHRoZSBuYW1lIGNvbnRhaW5zIHNwYWNlcywgZW5jbG9z ZQotICAgICAgICAgIGl0IGluIGJyYWNlcy4gSWYgYSBmaWxlIGdyb3VwIGlzIGJlaW5nIHNlbnQs IHRoZW4gdGhlICJ0ZXh0IgotICAgICAgICAgIG11c3QgY29udGFpbiBhIHZhcmlhYmxlIHJlZmVy ZW5jZSBzdWNoIGFzIFx2KGZpbGVuYW1lKSAoc2VlCi0gICAgICAgICAgWzQ5NF1TZWN0aW9uIDQu MSkuIEV4YW1wbGU6Ci0KLSAgc2VuZCAvcmVuYW1lLXRvOm9rX1x2KGZpbGVuYW1lKSAqLioKLQot ICAgICAgICAgIFRoaXMgc2VuZHMgZWFjaCBmaWxlIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBh bmQgaWYgaXQgd2FzIHNlbnQKLSAgICAgICAgICBzdWNjZXNzZnVsbHksIGNoYW5nZXMgaXRzIG5h bWUgdG8gYmVnaW4gd2l0aCAib2tfIi4KLQotICAgL1NNQUxMRVItVEhBTjpudW1iZXIKLSAgICAg ICAgICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3NlIGZpbGVzIHRoYXQgYXJlIHNtYWxsZXIgdGhh biB0aGUgZ2l2ZW4KLSAgICAgICAgICBudW1iZXIgb2YgYnl0ZXMgYXJlIHRvIGJlIHNlbnQuCi0K LSAgIC9TVUJKRUNUOnRleHQKLSAgICAgICAgICBTdWJqZWN0IGZvciBlbWFpbC4gQWN0dWFsbHks IHRoaXMgaXMganVzdCBhIHN5bm9ueW0gZm9yCi0gICAgICAgICAgL0FTLU5BTUUuIElmIHRoZSB0 ZXh0IGluY2x1ZGVzIHNwYWNlcywgeW91IG11c3QgZW5jbG9zZSBpdCBpbgotICAgICAgICAgIGJy YWNlcy4gSWYgeW91IGRvbid0IHNwZWNpZnkgYSBzdWJqZWN0IChvciBhcy1uYW1lKSwgdGhlIG5h bWUgb2YKLSAgICAgICAgICB0aGUgZmlsZSBpcyB1c2VkIGFzIHRoZSBzdWJqZWN0LiBFeGFtcGxl OgotCi0gIHNlbmQgL21haWw6a2VybWl0LXN1cHBvcnRAY29sdW1iaWEuZWR1IC9zdWJqOntBcyBy ZXF1ZXN0ZWR9IHBhY2tldC5sb2cKLQotICAgL1BSSU5UOm9wdGlvbnMKLSAgICAgICAgICBTZW5k cyB0aGUgZmlsZSB0byBiZSBwcmludGVkLCBvcHRpb25hbGx5IHNwZWNpZnlpbmcgb3B0aW9ucyBm b3IKLSAgICAgICAgICB0aGUgcHJpbnRlci4gRXF1aXZhbGVudCB0byBSRU1PVEUgUFJJTlQgZmls ZW5hbWUgb3B0aW9ucy4KLSAgICAgICAgICBFeGFtcGxlczoKLQotICBzZW5kIC9wcmludCBvb2Zh LnR4dCAgICAgICAgICAgICAgOyBObyBvcHRpb25zLgotICBzZW5kIC9wcmludDovY29waWVzPTMg b29mYS50eHQgICAgOyAiL2NvcGllcz0zIiBpcyBhIFZNUyBQUklOVCBzd2l0Y2guCi0gIHNlbmQg L3ByaW50Oi0jMyBvb2ZhLnR4dCAgICAgICAgICA7ICItIzMiIGlzIGEgVU5JWCBscHIgc3dpdGNo LgotCi0gICAvUFJPVE9DT0w6bmFtZQotICAgICAgICAgIFVzZXMgdGhlIGdpdmVuIHByb3RvY29s IHRvIHNlbmQgdGhlIGZpbGUgKEtlcm1pdCwgWm1vZGVtLCBldGMpCi0gICAgICAgICAgZm9yIHRo aXMgdHJhbnNmZXIgd2l0aG91dCBjaGFuZ2luZyBnbG9iYWwgcHJvdG9jb2wuIE9ubHkKLSAgICAg ICAgICBhdmFpbGFibGUgaW4gS2VybWl0IDk1LCBVTklYLCBhbmQgT1MtOS4gRXhhbXBsZToKLQot ICBzZXQgcHJvdG9jb2wga2VybWl0ICAgICAgICAgICAgICAgOyBTZXQgZ2xvYmFsIHByb3RvY29s Ci0gIHNlbmQgL3Byb3RvOnptb2RlbSAvYmluIG9vZmEuemlwICA7IFNlbmQganVzdCB0aGlzIGZp bGUgd2l0aCBabW9kZW0KLSAgc2VuZCBvb2ZhLnR4dCAgICAgICAgICAgICAgICAgICAgIDsgVGhp cyBmaWxlIGlzIHNlbnQgd2l0aCBLZXJtaXQKLQotICAgL1FVSUVUCi0gICAgICAgICAgV2hlbiBz ZW5kaW5nIGluIGxvY2FsIG1vZGUsIHRoaXMgc3VwcHJlc3NlcyB0aGUgZmlsZS10cmFuc2Zlcgot ICAgICAgICAgIGRpc3BsYXkuCi0KLSAgIC9SRUNPVkVSCi0gICAgICAgICAgVXNlZCB0byByZWNv dmVyIGZyb20gYSBwcmV2aW91c2x5IGludGVycnVwdGVkIHRyYW5zZmVyOyBTRU5ECi0gICAgICAg ICAgL1JFQ09WRVIgaXMgZXF1aXZhbGVudCB0byBSRVNFTkQuIFJlY292ZXJ5IG9ubHkgd29ya3Mg aW4gYmluYXJ5Ci0gICAgICAgICAgbW9kZTsgU0VORCAvUkVDT1ZFUiBhbmQgUkVTRU5EIGluY2x1 ZGUgYW4gaW1wbGllZCAvQklOQVJZCi0gICAgICAgICAgc3dpdGNoLiBFdmVuIHRoZW4sIHJlY292 ZXJ5IHdpbGwgc3VjY2Vzc2Z1bCBvbmx5IGlmIChhKSB0aGUKLSAgICAgICAgICBvcmlnaW5hbCAo aW50ZXJydXB0ZWQpIHRyYW5zZmVyIHdhcyBhbHNvIGluIGJpbmFyeSBtb2RlLCBvciAoYikKLSAg ICAgICAgICBpZiBpdCB3YXMgaW4gdGV4dCBtb2RlLCB0aGUgdHdvIEtlcm1pdCBwcm9ncmFtcyBy dW4gb24gcGxhdGZvcm1zCi0gICAgICAgICAgd2hlcmUgdGV4dC1tb2RlIHRyYW5zZmVycyBhcmUg bm90IGxlbmd0aC1jaGFuZ2luZy4KLQotICAgL1NUQVJUSU5HOm51bWJlcgotICAgICAgICAgIFN0 YXJ0cyBzZW5kaW5nIHRoZSBmaWxlIGZyb20gdGhlIGdpdmVuIGJ5dGUgcG9zaXRpb24uIFNFTkQK LSAgICAgICAgICAvU1RBUlRJTkc6biBmaWxlbmFtZSBpcyBlcXVpdmFsZW50IHRvIFBTRU5EIGZp bGVuYW1lIG4uCi0KLSAgIC9URVhUCi0gICAgICAgICAgUGVyZm9ybXMgdGhpcyB0cmFuc2ZlciBp biB0ZXh0IG1vZGUgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGdsb2JhbAotICAgICAgICAgIHRyYW5z ZmVyIG1vZGUsIG92ZXJyaWRpbmcgbm90IG9ubHkgdGhlIEZJTEUgVFlQRSBhbmQgVFJBTlNGRVIK LSAgICAgICAgICBNT0RFIHNldHRpbmdzLCBidXQgYWxzbyB0aGUgRklMRSBQQVRURVJOIHNldHRp bmcsIGZvciB0aGlzIFNFTkQKLSAgICAgICAgICBjb21tYW5kIG9ubHkuIEluIG90aGVyIHdvcmRz LCBTRU5EIC9URVhUIHJlYWxseSBzZW5kIHRoZSBmaWxlIGluCi0gICAgICAgICAgdGV4dCBtb2Rl LCByZWdhcmRsZXNzIG9mIGFueSBvdGhlciBzZXR0aW5ncyBvciBuZWdvdGlhdGlvbnMuCi0KLSAg IEFib3V0IG1haWwuLi4gUmVmZXIgdG8gWzQ5NV1TZWN0aW9uIDQuNy4xLiBUaGUgc2FtZSBydWxl cyBhcHBseSBhcyBmb3IKLSAgIGZpbGUgdHJhbnNmZXIuIElmIHlvdSBhcmUgbWFpbGluZyBtdWx0 aXBsZSBmaWxlcywgeW91IGNhbid0IHVzZSBhbgotICAgYXMtbmFtZSAoaW4gdGhpcyBjYXNlLCBh IHN1YmplY3QpIHVubGVzcyBpdCBjb250YWlucyByZXBsYWNlbWVudAotICAgdmFyaWFibGVzIGxp a2UgXHYoZmlsZW51bSkuIEZvciBleGFtcGxlLCBpZiB5b3U6Ci0KLSAgc2VuZCAvbWFpbDpzb21l Ym9keUB4eXouY29tICoudHh0Ci0KLSAgIFRoZW4gZWFjaCBmaWxlIHdpbGwgYXJyaXZlIGFzIGEg c2VwYXJhdGUgZW1haWwgbWVzc2FnZSB3aXRoIGl0cyBuYW1lIGFzCi0gICB0aGUgc3ViamVjdC4g QnV0IGlmIHlvdToKLQotICBzZW5kIC9tYWlsOnNvbWVib2R5QHh5ei5jb20gL3N1YmplY3Q6e0hl cmUgaXMgYSBmaWxlfSAqLnR4dAotCi0gICBUaGVuIGVhY2ggZmlsZSBtZXNzYWdlIHdpbGwgaGF2 ZSB0aGUgc2FtZSBzdWJqZWN0LCB3aGljaCBpcyBwcm9iYWJseQotICAgbm90IHdoYXQgeW91IHdh bnQuIFlvdSBjYW4gZ2V0IGFyb3VuZCB0aGlzIHdpdGggY29uc3RydWN0aW9ucyBsaWtlOgotCi0g IHNlbmQgL21haWw6c29tZWJvZHlAeHl6LmNvbSAvc3ViamVjdDp7SGVyZSBpcyBcdihmaWxlbmFt ZSl9ICoudHh0Ci0KLSAgIHdoaWNoIGVtYmVkIHRoZSBmaWxlbmFtZSBpbiB0aGUgc3ViamVjdC4K LQotICAgVGhlIE1PVkUsIENTRU5ELCBNQUlMLCBhbmQgUkVTRU5EIGNvbW1hbmRzIG5vdyBhbHNv IGFjY2VwdCB0aGUgc2FtZQotICAgc3dpdGNoZXMuIEFuZCB0aGUgc3dpdGNoZXMgYXJlIGFsc28g b3BlcmF0aXZlIHdoZW4gc2VuZGluZyBmcm9tIGEKLSAgIFNFTkQtTElTVCAoc2VlIFs0OTZdVXNp bmcgQy1LZXJtaXQsIDJuZCBFZCwgcHAuMTkxLTE5MiksIHNvLCBmb3IKLSAgIGV4YW1wbGUsIGl0 IGlzIG5vdyBwb3NzaWJsZSB0byBTRU5EIC9QUklOVCBvciBTRU5EIC9NQUlMIGZyb20gYQotICAg U0VORC1MSVNULgotCi0gICBUaGUgTVNFTkQgYW5kIE1NT1ZFIGNvbW1hbmRzIGFsc28gdGFrZSBz d2l0Y2hlcywgYnV0IG5vdCBhbGwgb2YgdGhlbS4KLSAgIFdpdGggdGhlc2UgY29tbWFuZHMsIHdo aWNoIHRha2UgYW4gYXJiaXRyYXJ5IGxpc3Qgb2YgZmlsZXNwZWNzLCB5b3UgY2FuCi0gICB1c2Ug L0JJTkFSWSwgL0RFTEVURSwgL01BSUwsIC9QUklOVCwgL1BST1RPQ09MLCAvUVVJRVQsIC9SRUNP VkVSLCBhbmQKLSAgIC9URVhUIChhbmQgL0lNQUdFIG9yIC9MQUJFTEVELCBkZXBlbmRpbmcgb24g dGhlIHBsYXRmb3JtKS4gTU1PVkUgaXMKLSAgIGVxdWl2YWxlbnQgdG8gTVNFTkQgL0RFTEVURS4g KElmIHlvdSB3YW50IHRvIHNlbmQgYSBncm91cCBvZiBmaWxlcywgYnV0Ci0gICBpbiBtaXhlZCB0 cmFuc2ZlciBtb2RlcyB3aXRoIHBlci1maWxlIGFzLW5hbWVzLCB1c2UgQUREIFNFTkQtTElTVCBh bmQKLSAgIHRoZW4gU0VORC4pCi0KLSAgIFRoZSBNU0VORC9NTU9WRSBzd2l0Y2hlcyBjb21lIGJl Zm9yZSB0aGUgZmlsZW5hbWVzLCBhbmQgYXBwbHkgdG8gYWxsIG9mCi0gICB0aGVtOgotCi0gIG1z ZW5kIC9wcmludCAvdGV4dCAqLmxvZyBvb2ZhLnR4dCAvZXRjL21vdGQKLQotICAgSWYgeW91IHR5 cGUgYW55IG9mIHRoZXNlIGNvbW1hbmRzIChTRU5ELCBDU0VORCwgTVNFTkQsIGV0YykgZm9sbG93 ZWQgYnkKLSAgIGEgcXVlc3Rpb24gbWFyayAoPyksIHlvdSB3aWxsIHNlZSBhIGxpc3Qgb2YgdGhl IHN3aXRjaGVzIHlvdSBjYW4gdXNlLgotICAgSWYgeW91IHdhbnQgdG8gc2VlIGEgbGlzdCBvZiBm aWxlbmFtZXMsIHlvdSdsbCBuZWVkIHRvIHR5cGUgc29tZXRoaW5nCi0gICBsaWtlICJzZW5kIC4v PyIgKFVOSVgsIE9TLzIsIFdpbmRvd3MsIGV0YyksIG9yICJzZW5kIFtdPyIgKFZNUyksIGV0Yy4K LSAgIE9mIGNvdXJzZSwgeW91IGNhbiBhbHNvIHR5cGUgcGllY2VzIG9mIGEgZmlsZW5hbWUgKGFu eXRoaW5nIHRoYXQgZG9lcwotICAgbm90IHN0YXJ0IHdpdGggIi8iKSBhbmQgdGhlbiAiPyIgdG8g Z2V0IGEgbGlzdCBvZiBmaWxlbmFtZXMgdGhhdCBzdGFydAotICAgdGhhdCB3YXk7IGUuZy4gInNl bmQgeC4/IiBzdGlsbCB3b3JrcyBhcyBiZWZvcmUuCi0KLSAgIEluIFVOSVgsIHdoZXJlICIvIiBp cyBhbHNvIHRoZSBkaXJlY3Rvcnkgc2VwYXJhdG9yLCB0aGVyZSBpcyB1c3VhbGx5IG5vCi0gICBh bWJpZ3VpdHkgYmV0d2VlbiBhIGZ1bGx5LXNwZWNpZmllZCBwYXRobmFtZSBhbmQgYSBzd2l0Y2gs IGV4Y2VwdCB3aGVuCi0gICBhIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IGhhcyB0aGUgc2Ft ZSBuYW1lIGFzIGEgc3dpdGNoIChhcyBub3RlZCBpbgotICAgWzQ5N11TZWN0aW9uIDEuNSk6Ci0K LSAgc2VuZCAvZXRjL21vdGQgICAgICAgICAgICAgICAgICAgICAgICA7IFdvcmtzIGFzIGV4cGVj dGVkCi0gIHNlbmQgL2NvbW1hbmQgICAgICAgICAgICAgICAgICAgICAgICAgOyA/Pz8KLQotICAg VGhlIHNlY29uZCBleGFtcGxlIGludGVycHJldHMgIi9jb21tYW5kIiBhcyBhIHN3aXRjaCwgbm90 IGEgZmlsZW5hbWUuCi0gICBUbyBzZW5kIGEgZmlsZSBhY3R1YWxseSBjYWxsZWQgImNvbW1hbmQi IGluIHRoZSByb290IGRpcmVjdG9yeSwgdXNlOgotCi0gIHNlbmQgey9jb21tYW5kfQotCi0gICBv ciBvdGhlciBzeXN0ZW0tZGVwZW5kZW50IGZvcm1zIHN1Y2ggYXMgLy9jb21tYW5kLCAvLi9jb21t YW5kLAotICAgYzovY29tbWFuZCwgZXRjLCBvciBjZCB0byAvIGFuZCB0aGVuICJzZW5kIGNvbW1h bmQiLgotCi00LjcuMi4gR0VUIENvbW1hbmQgU3dpdGNoZXMKLQotICAgV2l0aG91dCBzd2l0Y2hl cywgdGhlIEdFVCBjb21tYW5kIHN0aWxsIHdvcmtzIGFib3V0IHRoZSBzYW1lIGFzIGJlZm9yZToK LQotICBnZXQgb29mYS50eHQgICAgICAgICAgICAgICAgICAgICAgICAgIDsgR0VUIGEgc2luZ2xl IGZpbGUKLSAgZ2V0IG9vZmEuKiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IEdFVCBtdWx0 aXBsZSBmaWxlcwotCi0gICBIb3dldmVyLCB0aGUgbWVjaGFuaXNtIGZvciBpbmNsdWRpbmcgYW4g ImFzLW5hbWUiIGhhcyBjaGFuZ2VkLgotICAgUHJldmlvdXNseSwgaW4gb3JkZXIgdG8gaW5jbHVk ZSBhbiBhcy1uYW1lLCB5b3Ugd2VyZSByZXF1aXJlZCB0byB1c2UKLSAgIHRoZSAibXVsdGlsaW5l IiBmb3JtIG9mIEdFVDoKLQotICBnZXQKLSAgcmVtb3RlLWZpbGVzcGVjCi0gIGxvY2FsLW5hbWUK LQotICAgVGhpcyB3YXMgYmVjYXVzZSB0aGUgcmVtb3RlIGZpbGVzcGVjIG1pZ2h0IGNvbnRhaW4g c3BhY2VzLCBhbmQgc28gdGhlcmUKLSAgIHdvdWxkIGJlIG5vIGdvb2Qgd2F5IG9mIHRlbGxpbmcg d2hlcmUgaXQgZW5kZWQgYW5kIHdoZXJlIHRoZSBsb2NhbCBuYW1lCi0gICBiZWdhbiwgZS5nOgot Ci0gIGdldCBwcm9maWxlIGV4ZWMgYSBmb28KLQotICAgQnV0IG5vdyBzaW5jZSB3ZSBjYW4gdXNl IHticmFjZXN9IGZvciBncm91cGluZywgd2UgZG9uJ3QgbmVlZCB0aGUKLSAgIG11bHRpbGluZSBH RVQgZm9ybSBhbnkgbW9yZSwgYW5kIGluIGZhY3QsIHN1cHBvcnQgZm9yIGl0IGhhcyBiZWVuCi0g ICByZW1vdmVkLiBJZiB5b3UgZ2l2ZSBhIEdFVCBjb21tYW5kIGJ5IGl0c2VsZiBvbiBhIGxpbmUs IGl0IGZhaWxzIGFuZCBhbgotICAgZXJyb3IgbWVzc2FnZSBpcyBwcmludGVkLiBUaGUgbmV3IGZv cm0gaXM6Ci0KLSAgIEdFVCBbIHN3aXRjaGVzLi4uIF0gcmVtb3RlLW5hbWUgWyBsb2NhbC1uYW1l IF0KLSAgICAgICAgICBBc2sgdGhlIHNlcnZlciB0byBzZW5kIHRoZSBmaWxlIHdob3NlIG5hbWUg aXMgcmVtb3RlLW5hbWUuIElmCi0gICAgICAgICAgdGhlIG9wdGlvbmFsIGxvY2FsLW5hbWUgaXMg Z2l2ZW4sIHN0b3JlIGl0IGxvY2FsbHkgdW5kZXIgdGhpcwotICAgICAgICAgIG5hbWUuIElmIHRo ZSByZW1vdGUtbmFtZSBvciBsb2NhbC1uYW1lIGNvbnRhaW5zIHNwYWNlcywgdGhleQotICAgICAg ICAgIG11c3QgYmUgZW5jbG9zZWQgaW4gYnJhY2VzOgotCi0gIGdldCB7cHJvZmlsZSBleGVjIGF9 IGZvbwotICBnZXQgb29mYS50eHQge34vTXkgRmlsZXMvT29mYSB0ZXh0fQotCi0gICBJZiB5b3Ug d2FudCB0byBnaXZlIGEgbGlzdCBvZiByZW1vdGUgZmlsZSBzcGVjaWZpY2F0aW9ucywgdXNlIHRo ZSBNR0VUCi0gICBjb21tYW5kOgotCi0gICBNR0VUIFsgc3dpdGNoZXMuLi4gXSByZW1vdGUtbmFt ZSBbIHJlbW90ZS1uYW1lIFsgcmVtb3RlLW5hbWUgLi4uIF0gXQotICAgICAgICAgIEFzayB0aGUg c2VydmVyIHRvIHNlbmQgdGhlIGZpbGVzIHdob3NlIG5hbWVzIGFyZSBnaXZlbi4KLQotICAgTm93 IHlvdSBjYW4gYWxzbyBpbmNsdWRlIG1vZGlmaWVyIHN3aXRjaGVzIGJldHdlZW4gR0VUIG9yIE1H RVQgYW5kIHRoZQotICAgcmVtb3RlLW5hbWU7IG1vc3Qgb2YgdGhlIHNhbWUgc3dpdGNoZXMgYXMg U0VORDoKLQotICAgL0FTLU5BTUU6dGV4dAotICAgICAgICAgIFNwZWNpZmllcyAidGV4dCIgYXMg dGhlIG5hbWUgdG8gc3RvcmUgdGhlIGluY29taW5nIGZpbGUgdW5kZXIuCi0gICAgICAgICAgKFRo aXMgc3dpdGNoIGlzIG5vdCBhdmFpbGFibGUgZm9yIE1HRVQuKSBZb3UgY2FuIGFsc28gc3RpbGwK LSAgICAgICAgICBzcGVjaWZ5IHRoZSBhcy1uYW1lIGFzIHRoZSBzZWNvbmQgZmlsZW5hbWUgb24g dGhlIEdFVCBjb21tYW5kCi0gICAgICAgICAgbGluZS4gVGhlIGZvbGxvd2luZyB0d28gY29tbWFu ZHMgYXJlIGVxdWl2YWxlbnQ6Ci0KLSAgZ2V0IG9vZmEudHh0IG9vZmEubmV3Ci0gIGdldCAvYXM6 b29mYS5uZXcgb29mYS50eHQKLQotICAgL0JJTkFSWQotICAgICAgICAgIFRlbGxzIHRoZSBzZXJ2 ZXIgdG8gc2VuZCB0aGUgZ2l2ZW4gZmlsZShzKSBpbiBiaW5hcnkgbW9kZQotICAgICAgICAgIHdp dGhvdXQgYWZmZWN0aW5nIHRoZSBnbG9iYWwgdHJhbnNmZXIgbW9kZS4gRXhhbXBsZToKLQotICBz ZXQgZmlsZSB0eXBlIHRleHQgICAgICA7IFNldCBnbG9iYWwgdHJhbnNmZXIgbW9kZSB0byB0ZXh0 Ci0gIGdldCAvYmluYXJ5IG9vZmEuemlwICAgIDsgZ2V0IGEgZmlsZSBpbiBiaW5hcnkgbW9kZQot ICBnZXQgb29mYS50eHQgICAgICAgICAgICA7IFRoaXMgb25lIGlzIHRyYW5zZmVycmVkIGluIHRl eHQgbW9kZQotCi0gICAgICAgICAgT3IsIHBlcmhhcHMgbW9yZSB0byB0aGUgcG9pbnQ6Ci0KLSAg Z2V0IC9iaW5hcnkgZm9vLnR4dCAgICAgOyB3aGVyZSAiKi50eHQiIGlzIGEgdGV4dC1wYXR0ZXJu Ci0KLSAgICAgICAgICBUaGlzIGhhcyB0aGUgZXhwZWN0ZWQgZWZmZWN0IG9ubHkgaWYgdGhlIHNl cnZlciBpcyBDLUtlcm1pdCA3LjAKLSAgICAgICAgICBvciBsYXRlciBvciBLOTUgMS4xLjE5IG9y IGxhdGVyLgotCi0gICAvQ09NTUFORAotICAgICAgICAgIEdFVCAvQ09NTUFORCBpcyBlcXVpdmFs ZW50IHRvIENHRVQgKFs0OThdU2VjdGlvbiA0LjIuMikgLS0gaXQKLSAgICAgICAgICBzYXlzIHRv IHJlY2VpdmUgdGhlIGZpbGUgaW50byB0aGUgc3RhbmRhcmQgaW5wdXQgb2YgYSBjb21tYW5kLAot ICAgICAgICAgIHJhdGhlciB0aGFuIHNhdmluZyBpdCBvbiBkaXNrLiBUaGUgL0FTLU5BTUUgb3Ig dGhlIHNlY29uZAotICAgICAgICAgICJmaWxlbmFtZSIgb24gdGhlIEdFVCBjb21tYW5kIGxpbmUg aXMgaW50ZXJwcmV0ZWQgYXMgdGhlIG5hbWUgb2YKLSAgICAgICAgICBhIGNvbW1hbmQuIEV4YW1w bGVzOgotCi0gIGdldCAvY29tbWFuZCBzdW5kYXkudHh0IHtncmVwIFN1bmRheSBvb2ZhLnR4dH0K LSAgZ2V0IC9jb21tYW5kIC9hcy1uYW1lOntncmVwIFN1bmRheSBvb2ZhLnR4dH0gc3VuZGF5LnR4 dAotICBnZXQgL2JpbiAvY29tbWFuZCB7IWd1bnppcCAtYyB8IHRhciB4ZiAtfSB7dGFyIGNmIC0g LiB8IGd6aXAgLWN9Ci0KLSAgIC9ERUxFVEUKLSAgICAgICAgICBBc2tzIHRoZSBLZXJtaXQgc2Vy dmVyIHRvIGRlbGV0ZSB0aGUgZmlsZSAob3IgZWFjaCBmaWxlIGluIHRoZQotICAgICAgICAgIGdy b3VwKSBhZnRlciBpdCBoYXMgYmVlbiB0cmFuc2ZlcnJlZCBzdWNjZXNzZnVsbHkgKGJ1dCBub3Qg dG8KLSAgICAgICAgICBkZWxldGUgaXQgaWYgaXQgd2FzIG5vdCBzZW50IHN1Y2Nlc3NmdWxseSku IEdFVCAvREVMRVRFIGlzCi0gICAgICAgICAgZXF1aXZhbGVudCB0byBSRVRSSUVWRS4gRXhhbXBs ZToKLQotICBnZXQgL2RlbGV0ZSAqLmxvZwotCi0gICAvRVhDRVBUOnBhdHRlcm4KLSAgICAgICAg ICBTcGVjaWZpZXMgdGhhdCBhbnkgZmlsZXMgd2hvc2UgbmFtZXMgbWF0Y2ggdGhlIHBhdHRlcm4s IHdoaWNoCi0gICAgICAgICAgY2FuIGJlIGEgcmVndWxhciBmaWxlbmFtZSwgb3IgbWF5IGNvbnRh aW4gIioiIGFuZC9vciAiPyIKLSAgICAgICAgICBtZXRhY2hhcmFjdGVycywgYXJlIHRvIGJlIHJl ZnVzZWQgdXBvbiBhcnJpdmFsLiBUbyBzcGVjaWZ5Ci0gICAgICAgICAgbXVsdGlwbGUgcGF0dGVy bnMgKHVwIHRvIDgpLCB1c2Ugb3V0ZXIgYnJhY2VzIGFyb3VuZCB0aGUgZ3JvdXAsCi0gICAgICAg ICAgYW5kIGlubmVyIGJyYWNlcyBhcm91bmQgZWFjaCBwYXR0ZXJuOgotCi0gIC9FWENFUFQ6e3tw YXR0ZXJuMX17cGF0dGVybjJ9Li4ufQotCi0gICAgICAgICAgU2VlIHRoZSBkZXNjcmlwdGlvbiBv ZiBTRU5EIC9FWENFUFQgaW4gWzQ5OV1TZWN0aW9uIDQuNy4xIGZvcgotICAgICAgICAgIGV4YW1w bGVzLCBldGMuIFJlZnVzYWwgaXMgYWNjb21wbGlzaGVkIHVzaW5nIHRoZSBBdHRyaWJ1dGUKLSAg ICAgICAgICBSZWplY3Rpb24gbWVjaGFuaXNtIChyZWFzb24gIm5hbWUiKSwgd2hpY2ggd29ya3Mg b25seSB3aGVuCi0gICAgICAgICAgQXR0cmlidXRlIHBhY2tldHMgaGF2ZSBiZWVuIHN1Y2Nlc3Nm dWxseSBuZWdvdGlhdGVkLgotCi0gICAvRklMRU5BTUVTOntDT05WRVJURUQsTElURVJBTH0KLSAg ICAgICAgICBVc2UgdGhpcyBzd2l0Y2ggdG8gb3ZlcnJpZGUgdGhlIGN1cnJlbnQgZ2xvYmFsIFNF VCBGSUxFIE5BTUVTCi0gICAgICAgICAgc2V0dGluZyBmb3IgdGhpcyB0cmFuc2ZlciBvbmx5Lgot Ci0gICAvRklMVEVSOmNvbW1hbmQKLSAgICAgICAgICBUaGlzIHNwZWNpZmllcyBhIGZpbHRlciB0 byBwYXNzIHRoZSBpbmNvbWluZyBmaWxlIHRocm91Z2ggYmVmb3JlCi0gICAgICAgICAgd3JpdGlu ZyB0byBkaXNrLiBTZWUgdGhlIFs1MDBdc2VjdGlvbiBvbiBmaWxlLXRyYW5zZmVyIHBpcGVzIGFu ZAotICAgICAgICAgIGZpbHRlcnMuIFRoZSAvRklMVEVSIHN3aXRjaCBhcHBsaWVzIG9ubHkgdG8g dGhlIGZpbGUtdHJhbnNmZXIKLSAgICAgICAgICBjb21tYW5kIGl0IGlzIGdpdmVuIHdpdGg7IGl0 IGRvZXMgbm90IGFmZmVjdCB0aGUgZ2xvYmFsIFJFQ0VJVkUKLSAgICAgICAgICBGSUxURVIgc2V0 dGluZywgaWYgYW55LgotCi0gICAvSU1BR0UKLSAgICAgICAgICBWTVM6IFRyYW5zZmVyIGluIGlt YWdlIG1vZGUuIE5vbi1WTVM6IHNhbWUgYXMgL0JJTkFSWS4KLQotICAgL0xBQkVMRUQKLSAgICAg ICAgICBWTVMgYW5kIE9TLzIgb25seTogU3BlY2lmaWVzIGxhYmVsZWQgdHJhbnNmZXIgbW9kZS4K LQotICAgL01PVkUtVE86ZGlyZWN0b3J5Ci0gICAgICAgICAgVGhpcyB0ZWxscyBDLUtlcm1pdCB0 byBtb3ZlIGVhY2ggZmlsZSB0aGF0IGlzIHN1Y2Nlc3NmdWxseQotICAgICAgICAgIHJlY2VpdmVk IHRvIHRoZSBnaXZlbiBkaXJlY3RvcnkuIEZpbGVzIHRoYXQgYXJlIG5vdCBzdWNjZXNzZnVsbHkK LSAgICAgICAgICByZWNlaXZlZCBhcmUgbm90IG1vdmVkLiBCeSBkZWZhdWx0LCBmaWxlcyBhcmUg bm90IG1vdmVkLgotCi0gICAvUEFUSE5BTUVTOntPRkYsQUJTT0xVVEUsUkVMQVRJVkUsQVVUT30K LSAgICAgICAgICBVc2UgdGhpcyBzd2l0Y2ggdG8gb3ZlcnJpZGUgdGhlIGN1cnJlbnQgZ2xvYmFs IFNFVCBSRUNFSVZFCi0gICAgICAgICAgUEFUSE5BTUVTIHNldHRpbmcgZm9yIHRoaXMgdHJhbnNm ZXIgb25seS4gL1BBVEhOQU1FUzpBQlNPTFVURSBvcgotICAgICAgICAgIFJFTEFUSVZFIGFsc28g c2V0cyAvRklMRU5BTUVTOkxJVEVSQUwgKGFsc28gZm9yIHRoaXMgdHJhbnNmZXIKLSAgICAgICAg ICBvbmx5KSBzaW5jZSBpbmNvbWluZyBwYXRobmFtZXMgd291bGQgbm90IGJlIHRyZWF0ZWQgYXMg cGF0aG5hbWVzCi0gICAgICAgICAgb3RoZXJ3aXNlLiBTZWUgWzUwMV1TZWN0aW9uIDQuMTAuCi0K LSAgIC9RVUlFVAotICAgICAgICAgIFdoZW4gc2VuZGluZyBpbiBsb2NhbCBtb2RlLCB0aGlzIHN1 cHByZXNzZXMgdGhlIGZpbGUtdHJhbnNmZXIKLSAgICAgICAgICBkaXNwbGF5LgotCi0gICAvUkVD T1ZFUgotICAgICAgICAgIFVzZWQgdG8gcmVjb3ZlciBmcm9tIGEgcHJldmlvdXNseSBpbnRlcnJ1 cHRlZCB0cmFuc2ZlcjsgR0VUCi0gICAgICAgICAgL1JFQ09WRVIgaXMgZXF1aXZhbGVudCB0byBS RUdFVC4gUmVjb3Zlcnkgb25seSB3b3JrcyBpbiBiaW5hcnkKLSAgICAgICAgICBtb2RlOyBTRU5E IC9SRUNPVkVSIGFuZCBSRVNFTkQgaW5jbHVkZSBhbiBpbXBsaWVkIC9CSU5BUlkKLSAgICAgICAg ICBzd2l0Y2guIEV2ZW4gdGhlbiwgcmVjb3Zlcnkgd2lsbCBzdWNjZXNzZnVsIG9ubHkgaWYgKGEp IHRoZQotICAgICAgICAgIG9yaWdpbmFsIChpbnRlcnJ1cHRlZCkgdHJhbnNmZXIgd2FzIGFsc28g aW4gYmluYXJ5IG1vZGUsIG9yIChiKQotICAgICAgICAgIGlmIGl0IHdhcyBpbiB0ZXh0IG1vZGUs IHRoZSB0d28gS2VybWl0IHByb2dyYW1zIHJ1biBvbiBwbGF0Zm9ybXMKLSAgICAgICAgICB3aGVy ZSB0ZXh0LW1vZGUgdHJhbnNmZXJzIGFyZSBub3QgbGVuZ3RoLWNoYW5naW5nLgotCi0gICAvUkVD VVJTSVZFCi0gICAgICAgICAgVGVsbHMgdGhlIHNlcnZlciB0aGF0IHRoZSBHRVQgZmlsZSBzcGVj aWZpY2F0aW9uIGFwcGxpZXMKLSAgICAgICAgICByZWN1cnNpdmVseS4gVGhpcyBzd2l0Y2ggYWxz byBhdXRvbWF0aWNhbGx5IHNldHMKLSAgICAgICAgICAvUEFUSE5BTUVTOlJFTEFUSVZFIGluIGJv dGggdGhlIHNlcnZlciBBTkQgdGhlIGNsaWVudC4gV2hlbiB1c2VkCi0gICAgICAgICAgaW4gY29u anVuY3Rpb24gd2l0aCAvREVMRVRFLCB0aGlzICJtb3ZlcyIgYSBkaXJlY3RvcnkgdHJlZSBmcm9t Ci0gICAgICAgICAgdGhlIHNlcnZlcidzIGNvbXB1dGVyIHRvIHRoZSBjbGllbnQncyBjb21wdXRl ciAoZXhjZXB0IHRoYXQgb25seQotICAgICAgICAgIHJlZ3VsYXIgZmlsZXMgYXJlIGRlbGV0ZWQg ZnJvbSB0aGUgc2VydmVyJ3MgY29tcHV0ZXIsIG5vdAotICAgICAgICAgIGRpcmVjdG9yaWVzOyB0 aHVzIHRoZSBvcmlnaW5hbCBkaXJlY3RvcmllcyB3aWxsIGJlIGxlZnQsIGJ1dAotICAgICAgICAg IHdpbGwgY29udGFpbiBubyBmaWxlcykuIE5vdGUgdGhhdCBhbGwgc2VydmVycyB0aGF0IHN1cHBv cnQKLSAgICAgICAgICAvUkVDVVJTSVZFIGRvIG5vdCBuZWNlc3NhcmlseSBkbyBzbyBpbiBjb21i aW5hdGlvbiB3aXRoIG90aGVyCi0gICAgICAgICAgc3dpdGNoZXMsIHN1Y2ggYXMgL1JFQ09WRVIu IChTZXJ2ZXJzIHRoYXQgZG8gaW5jbHVkZSBDLUtlcm1pdAotICAgICAgICAgIDcuMCBhbmQgbGF0 ZXIsIEs5NSAxLjEuMTkgYW5kIGxhdGVyLikKLQotICAgL1JFTkFNRS1UTzpzdHJpbmcKLSAgICAg ICAgICBUaGlzIHRlbGxzIEMtS2VybWl0IHRvIHJlbmFtZSBlYWNoIGZpbGUgdGhhdCBpcyBzdWNj ZXNzZnVsbHkKLSAgICAgICAgICByZWNlaXZlZCB0byB0aGUgZ2l2ZW4gc3RyaW5nLiBGaWxlcyB0 aGF0IGFyZSBub3Qgc3VjY2Vzc2Z1bGx5Ci0gICAgICAgICAgcmVjZWl2ZWQgYXJlIG5vdCByZW5h bWVkLiBCeSBkZWZhdWx0LCBmaWxlcyBhcmUgbm90IHJlbmFtZWQuIFRoZQotICAgICAgICAgIHN0 cmluZyBjYW4gYmUgYSBsaXRlcmFsIHN0cmluZywgd2hpY2ggaXMgYXBwcm9wcmlhdGUgd2hlbiBv bmx5Ci0gICAgICAgICAgb25lIGZpbGUgaXMgYmVpbmcgcmVjZWl2ZWQsIG9yIGl0IGNhbiBjb250 YWluIG9uZSBvciBtb3JlCi0gICAgICAgICAgdmFyaWFibGVzIHRoYXQgYXJlIHRvIGJlIGV2YWx1 YXRlZCBhdCB0aGUgdGltZSBlYWNoIGZpbGUgaXMKLSAgICAgICAgICByZWNlaXZlZCwgc3VjaCBh cyBcdihmaWxlbmFtZSksIFx2KGZpbGVudW1iZXIpLCBcdihudGltZSksCi0gICAgICAgICAgXHYo cGlkKSwgXHYodXNlciksIGV0Yy4gV0FSTklORzogaWYgeW91IGdpdmUgYSBsaXRlcmFsIHN0cmlu ZwotICAgICAgICAgIGFuZCBtb3JlIHRoYW4gb25lIGZpbGUgYXJyaXZlcywgZWFjaCBpbmNvbWlu ZyBmaWxlIHdpbGwgYmUgZ2l2ZW4KLSAgICAgICAgICB0aGUgc2FtZSBuYW1lIChidXQgU0VUIEZJ TEUgQ09MTElTSU9OIEJBQ0tVUCBvciBSRU5BTUUgY2FuIGJlCi0gICAgICAgICAgdXNlZCB0byBr ZWVwIHRoZSBpbmNvbWluZyBmaWxlcyBmcm9tIG92ZXJ3cml0aW5nIGVhY2ggb3RoZXIpLgotCi0g ICAvVEVYVAotICAgICAgICAgIFRlbGxzIHRoZSBzZXJ2ZXIgdG8gcGVyZm9ybSB0aGlzIHRyYW5z ZmVyIGluIHRleHQgbW9kZSB3aXRob3V0Ci0gICAgICAgICAgYWZmZWN0aW5nIGl0cyBnbG9iYWwg dHJhbnNmZXIgbW9kZS4gU2VlIC9CSU5BUlkgZm9yIGFkZGl0aW9uYWwKLSAgICAgICAgICBpbmZv LgotCi0gICBUaGUgL01BSUwgYW5kIC9QUklOVCBvcHRpb25zIGFyZSBub3QgYXZhaWxhYmxlIChh cyB0aGV5IGFyZSBmb3IgU0VORCksCi0gICBidXQgeW91IGNhbiB1c2UgL0NPTU1BTkQgdG8gYWNo aWV2ZSB0aGUgc2FtZSBlZmZlY3QsIGFzIGluIHRoZXNlIFVOSVgKLSAgIGV4YW1wbGVzOgotCi0g IGdldCAvY29tbWFuZCBvb2ZhLnR4dCB7bWFpbCBrZXJtaXRAY29sdW1iaWEuZWR1fQotICBnZXQg L2NvbW1hbmQgb29mYS50eHQgbHByCi0KLSAgIEluIE9TLzIgb3IgV2luZG93cywgeW91IGNhbiBH RVQgYW5kIHByaW50IGxpa2UgdGhpczoKLQotICBnZXQgb29mYS50eHQgcHJuCi0KLSAgIFRoZSBD R0VULCBSRUdFVCwgUkVUUklFVkUgY29tbWFuZHMgYWxzbyBhY2NlcHQgdGhlIHNhbWUgc3dpdGNo ZXMgYXMKLSAgIEdFVC4gQ0dFVCBhdXRvbWF0aWNhbGx5IHNldHMgL0NPTU1BTkQ7IFJFR0VUIGF1 dG9tYXRpY2FsbHkgc2V0cwotICAgL1JFQ09WRVIgYW5kIC9CSU5BUlksIGFuZCBSRVRSSUVWRSBh dXRvbWF0aWNhbGx5IHNldHMgL0RFTEVURS4KLQotNC43LjMuIFJFQ0VJVkUgQ29tbWFuZCBTd2l0 Y2hlcwotCi0gICBXaXRob3V0IHN3aXRjaGVzLCB0aGUgUkVDRUlWRSBjb21tYW5kIHN0aWxsIHdv cmtzIGFzIGJlZm9yZToKLQotICByZWNlaXZlICAgICAgICAgICAgOyBSZWNlaXZlcyBmaWxlcyB1 bmRlciB0aGVpciBvd24gbmFtZXMKLSAgcmVjZWl2ZSAvdG1wICAgICAgIDsgRGl0dG8sIGJ1dCBp bnRvIHRoZSAvdG1wIGRpcmVjdG9yeQotICByICAgICAgICAgICAgICAgICAgOyBTYW1lIGFzICJy ZWNlaXZlIgotICByZWNlaXZlIGZvby50eHQgICAgOyBSZWNlaXZlcyBhIGZpbGUgYW5kIHJlbmFt ZXMgdG8gZm9vLnR4dAotCi0gICBOb3cgeW91IGNhbiBhbHNvIGluY2x1ZGUgbW9kaWZpZXIgc3dp dGNoZXMgbWF5IGJlIGluY2x1ZGVkIGJldHdlZW4KLSAgICJyZWNlaXZlIiBhbmQgdGhlIGFzLW5h bWU7IG1vc3Qgb2YgdGhlIHNhbWUgc3dpdGNoZXMgYXMgR0VUOgotCi0gICAvQVMtTkFNRTp0ZXh0 Ci0gICAgICAgICAgU3BlY2lmaWVzICJ0ZXh0IiBhcyB0aGUgbmFtZSB0byBzdG9yZSB0aGUgaW5j b21pbmcgZmlsZSB1bmRlci4KLSAgICAgICAgICBZb3UgY2FuIGFsc28gc3RpbGwgc3BlY2lmeSB0 aGUgYXMtbmFtZSBhcyBhIGZpbGVuYW1lIG9uIHRoZQotICAgICAgICAgIGNvbW1hbmQgbGluZS4g VGhlIGZvbGxvd2luZyB0d28gY29tbWFuZHMgYXJlIGVxdWl2YWxlbnQ6Ci0KLSAgciBvb2ZhLm5l dwotICByIC9hczpvb2ZhLm5ldwotCi0gICAvQklOQVJZCi0gICAgICAgICAgUGVyZm9ybXMgdGhp cyB0cmFuc2ZlciBpbiBiaW5hcnkgbW9kZSB3aXRob3V0IGFmZmVjdGluZyB0aGUKLSAgICAgICAg ICBnbG9iYWwgdHJhbnNmZXIgbW9kZS4gTk9URTogVGhpcyBkb2VzIG5vdCBvdmVycmlkZSB0aGUg aW5jb21pbmcKLSAgICAgICAgICBmaWxldHlwZSAoYXMgaXQgZG9lcyB3aXRoIEdFVCksIHNvIHRo aXMgc3dpdGNoIGlzIHVzZWZ1bCBvbmx5IGlmCi0gICAgICAgICAgQVRUUklCVVRFIFRZUEUgaXMg T0ZGLCBvciBpZiB0aGUgb3RoZXIgS2VybWl0IGRvZXMgbm90IHNlbmQgYQotICAgICAgICAgIFRZ UEUgKHRleHQgb3IgYmluYXJ5KSBhdHRyaWJ1dGUuIEluIGFueSBjYXNlLCBpdCBoYXMgbm8gYWZm ZWN0Ci0gICAgICAgICAgd2hhdHNvZXZlciBvbiB0aGUgZmlsZSBzZW5kZXIuCi0KLSAgIC9DT01N QU5ECi0gICAgICAgICAgUkVDRUlWRSAvQ09NTUFORCBpcyBlcXVpdmFsZW50IHRvIENSRUNFSVZF IChbNTAyXVNlY3Rpb24gNC4yLjIpCi0gICAgICAgICAgLS0gaXQgc2F5cyB0byByZWNlaXZlIHRo ZSBmaWxlIGludG8gdGhlIHN0YW5kYXJkIGlucHV0IG9mIGEKLSAgICAgICAgICBjb21tYW5kLCBy YXRoZXIgdGhhbiBzYXZpbmcgaXQgb24gZGlzay4gVGhlIC9BUy1OQU1FIG9yIHRoZQotICAgICAg ICAgICJmaWxlbmFtZSIgb24gdGhlIFJFQ0VJVkUgY29tbWFuZCBsaW5lIGlzIGludGVycHJldGVk IGFzIHRoZQotICAgICAgICAgIG5hbWUgb2YgYSBjb21tYW5kLgotCi0gIHIgL2NvbW1hbmQge2dy ZXAgU3VuZGF5IG9vZmEudHh0fQotICByIC9jb21tYW5kIC9hcy1uYW1lOntncmVwIFN1bmRheSBv b2ZhLnR4dH0KLSAgciAvYmluIC9jb21tYW5kIHt0YXIgY2YgLSAuIHwgZ3ppcCAtY30KLQotICAg L0VYQ0VQVDpwYXR0ZXJuCi0gICAgICAgICAgU3BlY2lmaWVzIHRoYXQgYW55IGZpbGVzIHdob3Nl IG5hbWVzIG1hdGNoIHRoZSBwYXR0ZXJuLCB3aGljaAotICAgICAgICAgIGNhbiBiZSBhIHJlZ3Vs YXIgZmlsZW5hbWUsIG9yIG1heSBjb250YWluICIqIiBhbmQvb3IgIj8iCi0gICAgICAgICAgbWV0 YWNoYXJhY3RlcnMsIGFyZSB0byBiZSByZWZ1c2VkIHVwb24gYXJyaXZhbC4gVG8gc3BlY2lmeQot ICAgICAgICAgIG11bHRpcGxlIHBhdHRlcm5zICh1cCB0byA4KSwgdXNlIG91dGVyIGJyYWNlcyBh cm91bmQgdGhlIGdyb3VwLAotICAgICAgICAgIGFuZCBpbm5lciBicmFjZXMgYXJvdW5kIGVhY2gg cGF0dGVybjoKLQotICAvRVhDRVBUOnt7cGF0dGVybjF9e3BhdHRlcm4yfS4uLn0KLQotICAgICAg ICAgIFNlZSB0aGUgZGVzY3JpcHRpb24gb2YgU0VORCAvRVhDRVBUIGluIFs1MDNdU2VjdGlvbiA0 LjcuMSBmb3IKLSAgICAgICAgICBleGFtcGxlcywgZXRjLiBSZWZ1c2FsIGlzIGFjY29tcGxpc2hl ZCB1c2luZyB0aGUgQXR0cmlidXRlCi0gICAgICAgICAgUmVqZWN0aW9uIG1lY2hhbmlzbSAocmVh c29uICJuYW1lIiksIHdoaWNoIHdvcmtzIG9ubHkgd2hlbgotICAgICAgICAgIEF0dHJpYnV0ZSBw YWNrZXRzIGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgbmVnb3RpYXRlZC4KLQotICAgL0ZJTEVOQU1F Uzp7Q09OVkVSVEVELExJVEVSQUx9Ci0gICAgICAgICAgVXNlIHRoaXMgc3dpdGNoIHRvIG92ZXJy aWRlIHRoZSBjdXJyZW50IGdsb2JhbCBTRVQgRklMRSBOQU1FUwotICAgICAgICAgIHNldHRpbmcg Zm9yIHRoaXMgdHJhbnNmZXIgb25seS4KLQotICAgL0ZJTFRFUjpjb21tYW5kCi0gICAgICAgICAg VGhpcyBzcGVjaWZpZXMgYSBmaWx0ZXIgdG8gcGFzcyB0aGUgaW5jb21pbmcgZmlsZSB0aHJvdWdo IGJlZm9yZQotICAgICAgICAgIHdyaXRpbmcgdG8gZGlzay4gU2VlIHRoZSBbNTA0XXNlY3Rpb24g b24gZmlsZS10cmFuc2ZlciBwaXBlcyBhbmQKLSAgICAgICAgICBmaWx0ZXJzLiBUaGUgL0ZJTFRF UiBzd2l0Y2ggYXBwbGllcyBvbmx5IHRvIHRoZSBmaWxlLXRyYW5zZmVyCi0gICAgICAgICAgY29t bWFuZCBpdCBpcyBnaXZlbiB3aXRoOyBpdCBkb2VzIG5vdCBhZmZlY3QgdGhlIGdsb2JhbCBSRUNF SVZFCi0gICAgICAgICAgRklMVEVSIHNldHRpbmcsIGlmIGFueS4KLQotICAgL0lNQUdFCi0gICAg ICAgICAgVk1TOiBUcmFuc2ZlciBpbiBpbWFnZSBtb2RlLiBOb24tVk1TOiBzYW1lIGFzIC9CSU5B UlkuIFNlZQotICAgICAgICAgIGNvbW1lbnRzIHVuZGVyIFJFQ0VJVkUgL0JJTkFSWS4KLQotICAg L0xBQkVMRUQKLSAgICAgICAgICBWTVMgYW5kIE9TLzIgb25seTogU3BlY2lmaWVzIGxhYmVsZWQg dHJhbnNmZXIgbW9kZS4gU2VlIGNvbW1lbnRzCi0gICAgICAgICAgdW5kZXIgUkVDRUlWRSAvQklO QVJZLgotCi0gICAvTU9WRS1UTzpkaXJlY3RvcnkKLSAgICAgICAgICBUaGlzIHRlbGxzIEMtS2Vy bWl0IHRvIG1vdmUgZWFjaCBmaWxlIHRoYXQgaXMgc3VjY2Vzc2Z1bGx5Ci0gICAgICAgICAgcmVj ZWl2ZWQgdG8gdGhlIGdpdmVuIGRpcmVjdG9yeS4gRmlsZXMgdGhhdCBhcmUgbm90IHN1Y2Nlc3Nm dWxseQotICAgICAgICAgIHJlY2VpdmVkIGFyZSBub3QgbW92ZWQuIEJ5IGRlZmF1bHQsIGZpbGVz IGFyZSBub3QgbW92ZWQuCi0KLSAgIC9QQVRITkFNRVM6e0FCU09MVVRFLFJFTEFUSVZFLE9GRixB VVRPfQotICAgICAgICAgIFVzZSB0aGlzIHN3aXRjaCB0byBvdmVycmlkZSB0aGUgY3VycmVudCBn bG9iYWwgU0VUIFJFQ0VJVkUKLSAgICAgICAgICBQQVRITkFNRVMgc2V0dGluZyBmb3IgdGhpcyB0 cmFuc2ZlciBvbmx5LiBTZWUgWzUwNV1TZWN0aW9uIDQuMTAuCi0KLSAgIC9SRUNVUlNJVkUKLSAg ICAgICAgICBXaGVuIHVzZWQgd2l0aCB0aGUgUkVDRUlWRSBjb21tYW5kLCAvUkVDVVJTSVZFIGlz IHNpbXBseSBhCi0gICAgICAgICAgc3lub255bSBmb3IgL1BBVEhOQU1FUzpSRUxBVElWRS4KLQot ICAgL1JFTkFNRS1UTzpzdHJpbmcKLSAgICAgICAgICBUaGlzIHRlbGxzIEMtS2VybWl0IHRvIHJl bmFtZSBlYWNoIGZpbGUgdGhhdCBpcyBzdWNjZXNzZnVsbHkKLSAgICAgICAgICByZWNlaXZlZCB0 byB0aGUgZ2l2ZW4gc3RyaW5nLiBGaWxlcyB0aGF0IGFyZSBub3Qgc3VjY2Vzc2Z1bGx5Ci0gICAg ICAgICAgcmVjZWl2ZWQgYXJlIG5vdCByZW5hbWVkLiBCeSBkZWZhdWx0LCBmaWxlcyBhcmUgbm90 IHJlbmFtZWQuIFRoZQotICAgICAgICAgIHN0cmluZyBjYW4gYmUgYSBsaXRlcmFsIHN0cmluZywg d2hpY2ggaXMgYXBwcm9wcmlhdGUgd2hlbiBvbmx5Ci0gICAgICAgICAgb25lIGZpbGUgaXMgYmVp bmcgcmVjZWl2ZWQsIG9yIGl0IGNhbiBjb250YWluIG9uZSBvciBtb3JlCi0gICAgICAgICAgdmFy aWFibGVzIHRoYXQgYXJlIHRvIGJlIGV2YWx1YXRlZCBhdCB0aGUgdGltZSBlYWNoIGZpbGUgaXMK LSAgICAgICAgICByZWNlaXZlZCwgc3VjaCBhcyBcdihmaWxlbmFtZSksIFx2KGZpbGVudW1iZXIp LCBcdihudGltZSksCi0gICAgICAgICAgXHYocGlkKSwgXHYodXNlciksIGV0Yy4gV0FSTklORzog aWYgeW91IGdpdmUgYSBsaXRlcmFsIHN0cmluZwotICAgICAgICAgIGFuZCBtb3JlIHRoYW4gb25l IGZpbGUgYXJyaXZlcywgZWFjaCBpbmNvbWluZyBmaWxlIHdpbGwgYmUgZ2l2ZW4KLSAgICAgICAg ICB0aGUgc2FtZSBuYW1lIChidXQgU0VUIEZJTEUgQ09MTElTSU9OIEJBQ0tVUCBvciBSRU5BTUUg Y2FuIGJlCi0gICAgICAgICAgdXNlZCB0byBrZWVwIHRoZSBpbmNvbWluZyBmaWxlcyBmcm9tIG92 ZXJ3cml0aW5nIGVhY2ggb3RoZXIpLgotCi0gICAvUVVJRVQKLSAgICAgICAgICBXaGVuIHJlY2Vp dmluZyBpbiBsb2NhbCBtb2RlLCB0aGlzIHN1cHByZXNzZXMgdGhlIGZpbGUtdHJhbnNmZXIKLSAg ICAgICAgICBkaXNwbGF5LgotCi0gICAvVEVYVAotICAgICAgICAgIFJlY2VpdmVzIGluIHRleHQg bW9kZSB3aXRob3V0IGFmZmVjdGluZyB0aGUgZ2xvYmFsIHRyYW5zZmVyCi0gICAgICAgICAgbW9k ZS4gU2VlIGNvbW1lbnRzIHVuZGVyIFJFQ0VJVkUgL0JJTkFSWS4KLQotICAgVGhlIC9NQUlMIGFu ZCAvUFJJTlQgb3B0aW9ucyBhcmUgbm90IGF2YWlsYWJsZSwgYnV0IHlvdSBjYW4gdXNlCi0gICAv Q09NTUFORCB0byBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCwgYXMgaW4gdGhlc2UgVU5JWCBleGFt cGxlczoKLQotICByIC9jb21tYW5kIHttYWlsIGtlcm1pdEBjb2x1bWJpYS5lZHV9Ci0gIHIgL2Nv bW1hbmQgbHByCi0KLSAgIEluIE9TLzIgb3IgV2luZG93cywgeW91IGNhbiBSRUNFSVZFIGFuZCBw cmludCBsaWtlIHRoaXM6Ci0KLSAgcmVjZWl2ZSBwcm4KLQotICAgVGhlIENSRUNFSVZFIGNvbW1h bmQgbm93IGFsc28gYWNjZXB0cyB0aGUgc2FtZSBzd2l0Y2hlcy4KLQotNC44LiBNaW5vciBLZXJt aXQgUHJvdG9jb2wgSW1wcm92ZW1lbnRzCi0KLTQuOC4xLiBNdWx0aXBsZSBBdHRyaWJ1dGUgUGFj a2V0cwotCi0gICBDLUtlcm1pdCA3LjAgbm93IHNlbmRzIG1vcmUgdGhhbiBvbmUgQXR0cmlidXRl IHBhY2tldCBpZiBhIGZpbGUncwotICAgYXR0cmlidXRlcyBkbyBub3QgZml0IGludG8gYSBzaW5n bGUgcGFja2V0IG9mIHRoZSBuZWdvdGlhdGVkIGxlbmd0aC4gSWYKLSAgIGEgcGFydGljdWxhciBh dHRyaWJ1dGUgKHN1Y2ggYXMgZmlsZSBjcmVhdGlvbiBkYXRlLXRpbWUpIGRvZXMgbm90IGZpdAot ICAgd2l0aGluIHRoZSBuZWdvdGlhdGVkIGxlbmd0aCAod2hpY2ggd2lsbCBvbmx5IGhhcHBlbiB3 aGVuIHRoZQotICAgbmVnb3RpYXRlZCBsZW5ndGggaXMgYXJvdW5kIDIwIG9yIGxlc3MpLCB0aGF0 IGF0dHJpYnV0ZSBpcyBub3Qgc2VudCBhdAotICAgYWxsLgotCi00LjguMi4gVmVyeSBTaG9ydCBQ YWNrZXRzCi0KLSAgIFRoZXJlIGFyZSBjZXJ0YWluIHNpdHVhdGlvbnMgd2hlcmUgZXh0cmVtZWx5 IHNob3J0IHBhY2tldHMgbXVzdCBiZQotICAgdXNlZDsgMjAgb3IgMzAgYnl0ZXMgYXQgbW9zdC4g VGhpcyBjYW4gaGFwcGVuIHdoZW4gb25lIG9yIG1vcmUgZGV2aWNlcwotICAgYWxvbmcgdGhlIGNv bW11bmljYXRpb24gcGF0aCBoYXZlIHZlcnkgc21hbGwgYnVmZmVycyBhbmQgbGFjayBhbgotICAg ZWZmZWN0aXZlIG1lYW5zIG9mIGZsb3cgY29udHJvbC4gRXhhbXBsZXMgYXJlIHNvbWV0aW1lcyBj aXRlZCBpbnZvbHZpbmcKLSAgIHJhZGlvIG1vZGVtcy4KLQotICAgV2hlbiB0aGUgbWF4aW11bSBw YWNrZXQgbGVuZ3RoIGlzIHNob3J0ZXIgdGhhbiBjZXJ0YWluIHBhY2tldHMgdGhhdAotICAgd291 bGQgYmUgc2VudCwgdGhvc2UgcGFja2V0cyBhcmUgZWl0aGVyIHRydW5jYXRlZCBvciBlbHNlIGJy b2tlbiB1cAotICAgaW50byBtdWx0aXBsZSBwYWNrZXRzLiBTcGVjaWZpY2FsbHk6Ci0KLSAgICAx LiBQYXJhbWV0ZXIgbmVnb3RpYXRpb24gcGFja2V0cyAoSSwgUywgYW5kIHRoZWlyIEFDS3MpIGFy ZSB0cnVuY2F0ZWQKLSAgICAgICB0byB0aGUgbmVnb3RpYXRlZCBsZW5ndGguIEFueSBwYXJhbWV0 ZXJzIHRoYXQgZG8gbm90IGZpdCBhcmUgcmVzZXQKLSAgICAgICB0byB0aGVpciBkZWZhdWx0IHZh bHVlcy4gVGhlcmUgaXMgbm8gcHJvdmlzaW9uIGluIHRoZSBLZXJtaXQKLSAgICAgICBwcm90b2Nv bCBmb3IgZnJhZ21lbnRhdGlvbiBhbmQgcmVhc3NlbWJseSBvZiBwYXJhbWV0ZXIgc3RyaW5ncy4K LSAgICAyLiBGaWxlIGhlYWRlciBwYWNrZXRzIChjb250YWluaW5nIHRoZSBmaWxlbmFtZSkgYXJl IHNpbXBseSB0cnVuY2F0ZWQuCi0gICAgICAgVGhlcmUgaXMgbm8gcHJvdmlzaW9uIGluIHRoZSBL ZXJtaXQgcHJvdG9jb2wgZm9yIGZyYWdtZW50YXRpb24gYW5kCi0gICAgICAgcmVhc3NlbWJseSBv ZiBmaWxlbmFtZXMuCi0gICAgMy4gQXR0cmlidXRlIHBhY2tldHMgYXJlIGZyYWdtZW50ZWQgYW5k IHJlYXNzZW1ibGVkIGFzIGRlc2NyaWJlZCBpbgotICAgICAgIDQuOC4xIHdpdGhvdXQgbG9zcyBv ZiBkYXRhLCBleGNlcHQgaW4gY2FzZSBhIGZpZWxkIHdpbGwgbm90IGZpdCBhdAotICAgICAgIGFs bCBpbiB0aGUgbmVnb3RpYXRlZCBsZW5ndGggKHRoZSBsb25nZXN0IGF0dHJpYnV0ZSBpcyB1c3Vh bGx5IHRoZQotICAgICAgIGRhdGUgYW5kIHRpbWUgb2YgZmlsZSBjcmVhdGlvbi9tb2RpZmljYXRp b24pIGJlY2F1c2Ugb2YgdGhlIHJ1bGUKLSAgICAgICB0aGF0IGF0dHJpYnV0ZXMgbWF5IG5vdCBi ZSBicm9rZW4gYWNyb3NzIHBhY2tldHMuCi0gICAgNC4gRGF0YSBwYWNrZXRzIGFuZCBvdGhlciBw YWNrZXRzIGFyZSB1bmFmZmVjdGVkIC0tIHRoZXkgY2FuIGJlIGFzCi0gICAgICAgc2hvcnQgYXMg dGhleSBuZWVkIHRvIGJlLCB3aXRoaW4gcmVhc29uLgotCi00LjkuIFdpbGRjYXJkIC8gRmlsZSBH cm91cCBFeHBhbnNpb24KLQotICAgIldpbGRjYXJkIiByZWZlcnMgdG8gdGhlIG5vdGF0aW9uIHVz ZWQgaW4gZmlsZW5hbWVzIHRvIHNwZWNpZnkgYSBncm91cAotICAgb2YgZmlsZXMgYnkgcGF0dGVy biBtYXRjaGluZy4KLQotNC45LjEuIEluIFVOSVggQy1LZXJtaXQKLQotICAgUHJpb3IgdG8gQy1L ZXJtaXQgNy4wLCBDLUtlcm1pdCB3YXMgY2FwYWJsZSBvZiBleHBhbmRpbmcgd2lsZGNhcmQKLSAg IHN0cmluZ3MgY29udGFpbmluZyBvbmx5IHRoZSAibWV0YWNoYXJhY3RlcnMiICcqJyBhbmQgJz8n OgotCi0gICAqCi0gICAgICAgICAgTWF0Y2hlcyBhbnkgc2VxdWVuY2Ugb2YgemVybyBvciBtb3Jl IGNoYXJhY3RlcnMuIEZvciBleGFtcGxlOgotICAgICAgICAgICJjayouYyIgbWF0Y2hlcyBhbGwg ZmlsZXMgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCAiY2siIGFuZCBlbmQKLSAgICAgICAgICB3aXRo ICIuYyIsIGluY2x1ZGluZyAiY2suYyIuCi0KLSAgID8KLSAgICAgICAgICBNYXRjaGVzIGFueSBz aW5nbGUgY2hhcmFjdGVyLiBGb3IgZXhhbXBsZSwgImNrPy5jIiBtYXRjaGVzIGFsbAotICAgICAg ICAgIGZpbGVzIHdob3NlIG5hbWVzIGFyZSBleGFjdGx5IDUgY2hhcmFjdGVycyBsb25nIGFuZCBz dGFydCB3aXRoCi0gICAgICAgICAgImNrIiBhbmQgZW5kIHdpdGggIi5jIi4gV2hlbiB0eXBpbmcg Y29tbWFuZHMgYXQgdGhlIHByb21wdCwgeW91Ci0gICAgICAgICAgbXVzdCBwcmVjZWRlIGFueSBx dWVzdGlvbiBtYXJrIHRvIGJlIHVzZWQgZm9yIG1hdGNoaW5nIGJ5IGEKLSAgICAgICAgICBiYWNr c2xhc2ggKFwpIHRvIG92ZXJyaWRlIHRoZSBub3JtYWwgZnVuY3Rpb24gb2YgcXVlc3Rpb24gbWFy aywKLSAgICAgICAgICB3aGljaCBpcyBwcm92aWRpbmcgbWVudXMgYW5kIGZpbGUgbGlzdHMuCi0K LSAgIEMtS2VybWl0IDcuMCBhZGRzIHRoZSBhZGRpdGlvbmFsIGZlYXR1cmVzIHRoYXQgdXNlcnMg b2Yga3NoLCBjc2gsIGFuZAotICAgYmFzaCBhcmUgYWNjdXN0b21lZCB0bzoKLQotICAgW2FiY10K LSAgICAgICAgICBTcXVhcmUgYnJhY2tldHMgZW5jbG9zaW5nIGEgbGlzdCBvZiBjaGFyYWN0ZXJz IG1hdGNoZXMgYW55Ci0gICAgICAgICAgc2luZ2xlIGNoYXJhY3RlciBpbiB0aGUgbGlzdC4gRXhh bXBsZTogY2t1dXNyLltjaF0gbWF0Y2hlcwotICAgICAgICAgIGNrdXVzci5jIGFuZCBja3V1c3Iu aC4KLQotICAgW2Etel0KLSAgICAgICAgICBTcXVhcmUgYnJhY2tldHMgZW5jbG9zaW5nIGEgcmFu Z2Ugb2YgY2hhcmFjdGVyczsgdGhlIGh5cGhlbgotICAgICAgICAgIHNlcGFyYXRlcyB0aGUgbG93 IGFuZCBoaWdoIGVsZW1lbnRzIG9mIHRoZSByYW5nZS4gRm9yIGV4YW1wbGUsCi0gICAgICAgICAg W2Etel0gbWF0Y2hlcyBhbnkgY2hhcmFjdGVyIGZyb20gYSB0byB6LgotCi0gICBbYWNkbS16XQot ICAgICAgICAgIExpc3RzIGFuZCByYW5nZXMgbWF5IGJlIGNvbWJpbmVkLiBUaGlzIGV4YW1wbGUg bWF0Y2hlcyBhLCBjLCBkLAotICAgICAgICAgIG9yIG0gdGhyb3VnaCB6LgotCi0gICB7c3RyaW5n MSxzdHJpbmcyLC4uLn0KLSAgICAgICAgICBCcmFjZXMgZW5jbG9zZSBhIGxpc3Qgb2Ygc3RyaW5n cyB0byBiZSBtYXRjaGVkLiBGb3IgZXhhbXBsZToKLSAgICAgICAgICBja3t1ZmlvLHZjb24sY21h aX0uYyBtYXRjaGVzIGNrdWZpby5jLCBja3Zjb24uYywgb3IgY2tjbWFpLmMuCi0gICAgICAgICAg VGhlIHN0cmluZ3MgbWF5IHRoZW1zZWx2ZXMgY29udGFpbiBtZXRhY2hhcmFjdGVycywgYnJhY2tl dAotICAgICAgICAgIGxpc3RzLCBvciBpbmRlZWQsIG90aGVyIGxpc3RzIG9mIHN0cmluZ3MsIGJ1 dCAod2hlbiBtYXRjaGluZwotICAgICAgICAgIGZpbGVuYW1lcykgdGhleSBtYXkgbm90IGNvbnRh aW4gZGlyZWN0b3J5IHNlcGFyYXRvcnMuCi0KLSAgICAgICAgICBUaHVzLCB0aGUgbWV0YWNoYXJh Y3RlcnMgaW4gZmlsZW5hbWVzIChhbmQgaW4gYW55IG90aGVyIGZpZWxkCi0gICAgICAgICAgdGhh dCBjYW4gYmUgYSBwYXR0ZXJuLCBzdWNoIGFzIHRoZSBJRiBNQVRDSCBwYXR0ZXJuLCBTRU5EIG9y IEdFVAotICAgICAgICAgIGV4Y2VwdGlvbiBsaXN0cywgZXRjKSBhcmU6Ci0KLSAqID8gWyB7Ci0K LSAgICAgICAgICBBbmQgd2l0aGluIGJyYWNlcyBvbmx5LCBjb21tYSAoLCkgaXMgYSBtZXRhY2hh cmFjdGVyLgotCi0gICBUbyBpbmNsdWRlIGEgbWV0YWNoYXJhY3RlciBpbiBhIHBhdHRlcm4gbGl0 ZXJhbGx5LCBwcmVjZWRlIGl0IHdpdGggYQotICAgYmFja3NsYXNoICdcJyAob3IgdHdvIGlmIHlv dSBhcmUgcGFzc2luZyB0aGUgcGF0dGVybiB0byBhIG1hY3JvKS4KLSAgIEV4YW1wbGVzOgotCi0g IHNlbmQgYSpiICAgICAgOyBTZW5kIGFsbCBmaWxlcyB3aG9zZSBuYW1lcyBzdGFydCB3aXRoICdh JyBhbmQgZW5kIHdpdGggJ2InLgotICBzZW5kIGE/YiAgICAgIDsgRGl0dG8sIGJ1dCB0aGUgbmFt ZSBtdXN0IGJlIGV4YWN0bHkgdGhyZWUgY2hhcmFjdGVycyBsb25nLgotICBzZW5kIGFbYS16XWIg IDsgRGl0dG8sIGJ1dCB0aGUgc2Vjb25kIGNoYXJhY3RlciBtdXN0IGJlIGEgbG93ZXJjYXNlIGxl dHRlci4KLSAgc2VuZCBhW3hcLXpdYiA7IERpdHRvLCBleGNlcHQgdGhlIHNlY29uZCBjaGFyYWN0 ZXIgbXVzdCBiZSAneCcsICctJywgb3IgJ3knLgotICBzZW5kIGFbZ2hpXWIgIDsgRGl0dG8sIGV4 Y2VwdCB0aGUgc2Vjb25kIGNoYXJhY3RlciBtdXN0IGJlICdnJywgJ2gnLCBvciAnaScuCi0gIHNl bmQgYVs/Kl1iICAgOyBEaXR0bywgZXhjZXB0IHRoZSBzZWNvbmQgY2hhcmFjdGVyIG11c3QgYmUg Jz8nIG9yICcqJy4KLSAgc2VuZCBhW1w/XCpdYiA7IFNhbWUgYXMgcHJldmlvdXMuCi0gIHNlbmQg Kj9bYS16XSogOyBBbGwgZmlsZXMgd2l0aCBuYW1lcyBjb250YWluaW5nIGF0IGxlYXN0IG9uZSBj aGFyYWN0ZXIKLSAgICAgICAgICAgICAgICA7IHRoYXQgaXMgZm9sbG93ZWQgYnkgYSBsb3dlcmNh c2UgbGV0dGVyLgotCi0gICBPciwgbW9yZSBwcmFjdGljYWxseToKLQotICBzZW5kIGNrW2N1d10q Lltjd2hdICA7IFNlbmQgdGhlIFVOSVggQy1LZXJtaXQgc291cmNlIGZpbGVzLgotCi0gICBUbyBy ZWZlciB0byB0aGUgQy1LZXJtaXQgc291cmNlcyBmaWxlcyBhbmQgbWFrZWZpbGUgYWxsIGluIG9u ZQotICAgZmlsZXNwZWM6Ci0KLSAge3ttYWtlZmlsZSxja1tjdXddKi5bY3doXX19Ci0KLSAgIChO T1RFOiBpZiB0aGUgZW50aXJlIHBhdHRlcm4gaXMgYSB7c3RyaW5nbGlzdH0sIHlvdSBtdXN0IGVu Y2xvc2UgaXQgaXQKLSAgIFRXTyBwYWlycyBvZiBicmFjZXMsIHNpbmNlIHRoZSBTRU5EIGNvbW1h bmQgc3RyaXBzIHRoZSBvdXRlciBicmFjZQotICAgcGFpciwgYmVjYXVzZSBvZiB0aGUgImVuY2xv c2UgaW4gYnJhY2VzIGlmIHRoZSBmaWxlbmFtZSBjb250YWlucwotICAgc3BhY2VzIiBydWxlKS4K LQotICAgSWYgdGhlIG1ha2VmaWxlIGlzIGNhbGxlZCBja3VrZXIubWFrOgotCi0gIGNrW2N1d10q LntbY3doXSxtYWt9Ci0KLSAgIChOT1RFOiBkb3VibGUgYnJhY2VzIGFyZSBub3QgbmVlZGVkIGhl cmUgc2luY2UgdGhlIHBhdHRlcm4gZG9lcyBub3QKLSAgIGJvdGggYmVnaW4gYW5kIGVuZCB3aXRo IGEgYnJhY2UuKQotCi0gICBUbyBhZGQgaW4gYWxsIHRoZSBDLUtlcm1pdCB0ZXh0IGZpbGVzOgot Ci0gIGNrW2N1d10qLntbY3doXSxtYWssdHh0fQotCi0gICBBbGwgb2YgdGhlc2UgZmVhdHVyZXMg Y2FuIGJlIHVzZWQgYW55d2hlcmUgeW91IHdvdWxkIHR5cGUgYSBmaWxlbmFtZQotICAgdGhhdCBp cyBhbGxvd2VkIHRvIGNvbnRhaW4gd2lsZGNhcmRzLgotCi0gICBXaGVuIHlvdSBhcmUgdHlwaW5n IGF0IHRoZSBjb21tYW5kIHByb21wdCwgYW4gZXh0cmEgbGV2ZWwgb2YgcXVvdGluZyBpcwotICAg cmVxdWlyZWQgZm9yIHRoZSAnPycgY2hhcmFjdGVyIHRvIGRlZmVhdCBpdHMgcmVndWxhciBmdW5j dGlvbiBvZgotICAgcHJvZHVjaW5nIGEgbGlzdCBvZiBmaWxlcyB0aGF0IG1hdGNoIHdoYXQgeW91 IGhhdmUgdHlwZWQgc28gZmFyLCBmb3IKLSAgIGV4YW1wbGU6Ci0KLSAgc2VuZCBja1tjdV0/Ci0K LSAgIGxpc3RzIGFsbCB0aGUgZmlsZXMgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCBja2MgYW5kIGNr dS4gSWYgeW91IHF1b3RlCi0gICB0aGUgcXVlc3Rpb24gbWFyaywgaXQgaXMgdXNlZCBhcyBhIHBh dHRlcm4tbWF0Y2hpbmcgY2hhcmFjdGVyLCBmb3IKLSAgIGV4YW1wbGU6Ci0KLSAgc2VuZCBja1w/ W2Z0XWlvLmMKLQotICAgc2VuZHMgYWxsIHRoZSBmaWxlIGFuZCBjb21tdW5pY2F0aW9ucyBpL28g bW9kdWxlcyBmb3IgYWxsIHRoZQotICAgcGxhdGZvcm1zOiBja3VmaW8uYywgY2t1dGlvLmMsIGNr dmZpby5jLCBja3Z0aW8uYywgZXRjLgotCi0gICBJZiwgaG93ZXZlciwgYSBmaWxlbmFtZSBhY3R1 YWxseSBjb250YWlucyBhIHF1ZXN0aW9uIG1hcmsgYW5kIHlvdSBuZWVkCi0gICB0byByZWZlciB0 byBpdCBvbiB0aGUgY29tbWFuZCBsaW5lLCB5b3UgbXVzdCB1c2UgdGhyZWUgKDMpIGJhY2tzbGFz aGVzLgotICAgRm9yIGV4YW1wbGUsIGlmIHRoZSBmaWxlIGlzIGFjdHVhbGx5IGNhbGxlZCBjaz9m aW8uYywgeW91IHdvdWxkIHVzZToKLQotICBzZW5kIGNrXFxcP2Zpby5jCi0KLSAgIEZ1cnRoZXIg bm90ZXMgb24gcXVvdGluZzoKLQotICAgICAqIEEgc2luZ2xlIGJhY2tzbGFzaCBpcyBzdWZmaWNp ZW50IGZvciBxdW90aW5nIGEgc3BlY2lhbCBjaGFyYWN0ZXIgYXQKLSAgICAgICB0aGUgY29tbWFu ZCBwcm9tcHQgb3IgaW4gYSBjb21tYW5kIGZpbGUuIEhvd2V2ZXIsIHdoZW4gcGFzc2luZwotICAg ICAgIHBhdHRlcm5zIHRvIG1hY3JvcyB5b3UnbGwgbmVlZCBkb3VibGUgYmFja3NsYXNoZXMsIGFu ZCB3aGVuCi0gICAgICAgcmVmZXJyaW5nIHRvIHRoZXNlIHBhdHRlcm5zIHdpdGhpbiB0aGUgbWFj cm8sIHlvdSdsbCBuZWVkIHRvIHVzZQotICAgICAgIFxmY29udGVudHMoXCUxKSAoc2VlIFs1MDZd U2VjdGlvbiAxLjExLjUpLiBZb3Ugc2hvdWxkIGVuY2xvc2UgbWFjcm8KLSAgICAgICBhcmd1bWVu dCByZWZlcmVuY2VzIGluIGJyYWNlcyBpbiBjYXNlIGdyb3VwZWQgYXJndW1lbnRzIHdlcmUKLSAg ICAgICBwYXNzZWQuIEV4YW1wbGU6Ci0gZGVmaW5lIGlzbWF0Y2ggewotICAgICBpZiBtYXRjaCB7 XGZjb250KFwlMSl9IHtcZmNvbnQoXCUyKX0gewotICAgICAgICAgZW5kIDAgTUFUQ0gKLSAgICAg fSBlbHNlIHsKLSAgICAgICAgIGVuZCAxIE5PIE1BVENICi0gICAgIH0KLSB9Ci0gaXNtYXRjaCBh Yip5eiBhKlxcKip6ICAgICAgICAgICA7IEJhY2tzbGFzaCBtdXN0IGJlIGRvdWJsZWQKLSBpc21h dGNoIHthYmMgZGVmIHh5en0gKmIqZSp5KiAgIDsgQnJhY2VzIG11c3QgYmUgdXNlZCBmb3IgZ3Jv dXBpbmcKLQotICAgICAqIFdhdGNoIG91dCBmb3IgcG9zc2libGUgY29uZmxpY3RzIGJldHdlZW4g e30gaW4gZmlsZW5hbWUgcGF0dGVybnMKLSAgICAgICBhbmQge30gdXNlZCBmb3IgZ3JvdXBpbmcg bXVsdGlwbGUgd29yZHMgaW50byBhIHNpbmdsZSBmaWVsZCwgd2hlbgotICAgICAgIHRoZSBwYXR0 ZXJuIGhhcyBvdXRlciBicmFjZXMuIEZvciBleGFtcGxlLCBpbjoKLSAgICAgaWYgbWF0Y2gge2Fi YyB4eXp9IHthKiAqen0gZWNobyBUSEVZIE1BVENICi0KLSAgICAgICBicmFjZXMgbXVzdCBiZSB1 c2VkIHRvIGdyb3VwICJhYmMgeHl6IiBpbnRvIGEgc2luZ2xlIHN0cmluZy4gS2VybWl0Ci0gICAg ICAgc3RyaXBzIG9mZiB0aGUgYnJhY2VzIGJlZm9yZSBjb21wYXJpbmcgdGhlIHN0cmluZyB3aXRo IHRoZSBwYXR0ZXJuLgotICAgICAgIFRoZXJlZm9yZToKLSBpZiBtYXRjaCBtYWtlZmlsZSB7bWFr ZWZpbGUsTWFrZWZpbGV9IGVjaG8gVEhFWSBNQVRDSAotCi0gICAgICAgZG9lcyBub3Qgd29yaywg YnV0OgotIGlmIG1hdGNoIG1ha2VmaWxlIHt7bWFrZWZpbGUsTWFrZWZpbGV9fSBlY2hvIFRIRVkg TUFUQ0gKLQotICAgICAgIGRvZXMuCi0gICAgICogSWYgeW91IHVzZSBhIHBhdHRlcm4gdGhhdCBo YXMgb3V0ZXIgYnJhY2VzLCBsaWtlIHsqLnR4dCwqLmRvY30sIGluCi0gICAgICAgYSBmaWVsZCB0 aGF0IGFjY2VwdHMgYSBwYXR0ZXJuIGxpc3QgKGxpa2UgU0VORCAvRVhDRVBUOnh4eCksIHlvdSds bAotICAgICAgIG5lZWQgdG8gYWRkIHR3byBleHRyYSBzZXRzIG9mIG91dGVyIGJyYWNlczoKLSBz ZW5kIC9leGNlcHQ6e3t7Ki50eHQsKi5kb2N9fX0gKi4qCi0KLSAgIEMtS2VybWl0J3MgbmV3IHBh dHRlcm4gbWF0Y2hpbmcgY2FwYWJpbGl0aWVzIGFyZSBhbHNvIHVzZWQgd2hlbgotICAgQy1LZXJt aXQgaXMgaW4gc2VydmVyIG1vZGUsIHNvIG5vdyB5b3UgY2FuIHNlbmQgcmVxdWVzdHMgc3VjaCBh czoKLQotICBnZXQgY2tbY3V3XSouW2N3aF0KLQotICAgdG8gYSBDLUtlcm1pdCBzZXJ2ZXIgd2l0 aG91dCBoYXZpbmcgdG8gdGVsbCBpdCB0byBTRVQgV0lMRCBTSEVMTCBmaXJzdC4KLSAgIFByZXZp b3VzbHkgdGhpcyB3b3VsZCBoYXZlIHJlcXVpcmVkOgotCi0gIG1nZXQgY2tjKi5jIGNrYyoudyBj a2MqLmggY2t1Ki5jIGNrdSoudyBja3UqLmggY2t3Ki5jIGNrdyoudyBja3cqLmgKLQotICAgVGhl IG5ldyBwYXR0ZXJuIG1hdGNoaW5nIGZlYXR1cmVzIG1ha2UgU0VUIFdJTEQgU0hFTEwgcmVkdW5k YW50LCBhbmQKLSAgIGJhcnJpbmcgYW55IG9iamVjdGlvbnMsIGl0IHdpbGwgZXZlbnR1YWxseSBi ZSBwaGFzZWQgb3V0LiAoT25lIHBvc3NpYmxlCi0gICByZWFzb24gZm9yIHJldGFpbmluZyBpdCB3 b3VsZCBiZSBhcyBhbiBlc2NhcGUgbWVjaGFuaXNtIHdoZW4gS2VybWl0Ci0gICBkb2VzIG5vdCB1 bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIGZpbGUgc3lzdGVtLikKLQotICAgQnkgdGhlIHdheSwg cGF0dGVybnMgc3VjaCBhcyB0aGVzZSBhcmUgc29tZXRpbWVzIHJlZmVycmVkIHRvIGFzCi0gICAi cmVndWxhciBleHByZXNzaW9ucyIsIGJ1dCB0aGV5IGFyZSBub3QgcXVpdGUgdGhlIHNhbWUuIElu IGEgdHJ1ZQotICAgcmVndWxhciBleHByZXNzaW9uIChmb3IgZXhhbXBsZSksICIqIiBtZWFucyAi emVybyBvciBtb3JlIHJlcGV0aXRpb25zCi0gICBvZiB0aGUgcHJldmlvdXMgaXRlbSIsIHNvIChm b3IgZXhhbXBsZSksICIoWzAtOV0qKSIgd291bGQgbWF0Y2ggemVybyBvcgotICAgbW9yZSBkaWdp dHMgaW4gcGFyZW50aGVzZXMuIEluIEtlcm1pdCAoYW5kIGluIG1vc3Qgc2hlbGxzKSwgdGhpcwot ICAgbWF0Y2hlcyBvbmUgZGlnaXQgZm9sbG93ZWQgYnkgemVybyBvciBtb3JlIGNoYXJhY3RlcnMs IHdpdGhpbgotICAgcGFyZW50aGVzZXMuIEhlcmUgYXJlIHNvbWUgaGludHM6Ci0KLSAgICAgKiBB bHRob3VnaCB5b3UgY2FuJ3QgbWF0Y2ggYW55IHNlcXVlbmNlIG9mIGRpZ2l0cyAob3IgbGV0dGVy cywgZXRjKSwKLSAgICAgICB5b3UgY2FuIG1hdGNoIChzYXkpIDEsIDIsIG9yIDMgb2YgdGhlbSBp biByb3cuIEZvciBleGFtcGxlLCB0aGUKLSAgICAgICBmb2xsb3dpbmcgcGF0dGVybiBtYXRjaGVz IEtlcm1pdCBiYWNrdXAgZmlsZXMgKHdpdGggYmFja3VwIG51bWJlcnMKLSAgICAgICBmcm9tIDEg dG8gOTk5KToKLSAqLn57WzEtOV0sWzEtOV1bMC05XSxbMS05XVswLTldWzAtOV19fgotCi0gICAg ICogVGhlcmUgaXMgcHJlc2VudGx5IG5vIE5PVCBvcGVyYXRvciwgc28gbm8gd2F5IHRvIG1hdGNo IGFueQotICAgICAgIGNoYXJhY3RlciBvciBzdHJpbmcgRVhDRVBUIHRoZSBvbmUocykgc2hvd24u Ci0KLSAgIEluIG90aGVyIHdpbGRjYXJkaW5nIG5ld3MuLi4KLQotICAgICAqIFlvdSBtYXkgbm93 ICJzZW5kIHh4eCIgd2hlcmUgInh4eCIgaXMgYSBkaXJlY3RvcnkgbmFtZSwgYW5kIHRoaXMKLSAg ICAgICB3aWxsIHNlbmQgYWxsIHRoZSBmaWxlcyBmcm9tIHRoZSBkaXJlY3RvcnkgeHh4LCBhcyBp ZiB5b3UgaGFkIHR5cGVkCi0gICAgICAgInNlbmQgeHh4LyoiLiBZb3UgY2FuIGFsc28gdXNlIHRo ZSBzcGVjaWFsIHNob3J0aGFuZCAic2VuZCAuIiB0bwotICAgICAgIHNlbmQgYWxsIHRoZSBmaWxl cyBmcm9tIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KLSAgICAgKiBUbyBlYXNpbHkgc2tpcCBvdmVy IGJhY2t1cCBmaWxlcyAodGhlIG9uZXMgd2hvc2UgbmFtZXMgZW5kIGxpa2UKLSAgICAgICAufjIy fikgd2hlbiBzZW5kaW5nLCB5b3UgY2FuIHVzZSBTRU5EIC9OT0JBQ0tVUCAoc2VlIFs1MDddU2Vj dGlvbgotICAgICAgIDQuMC42IGZvciBkZXRhaWxzKS4KLSAgICAgKiBXaGVuIGNob29zaW5nIEtl cm1pdCB0byBleHBhbmQgd2lsZGNhcmRzLCByYXRoZXIgdGhhbiB0aGUgc2hlbGwsCi0gICAgICAg eW91IGNhbiBjaG9vc2Ugd2hldGhlciAiZG90IGZpbGVzIiAtLSBmaWxlcyB3aG9zZSBuYW1lcyBi ZWdpbiB3aXRoCi0gICAgICAgIi4iLCB3aGljaCBhcmUgbm9ybWFsbHkgImludmlzaWJsZSIgLS0g c2hvdWxkIGJlIG1hdGNoZWQ6Ci0gU0VUIFdJTEQgS0VSTUlUIC9OTy1NQVRDSC1ET1QtRklMRVMg KHRoaXMgaXMgdGhlIGRlZmF1bHQpCi0gU0VUIFdJTEQgS0VSTUlUIC9NQVRDSC1ET1QtRklMRVMg ICAgKHRoaXMgYWxsb3dzIG1hdGNoaW5nIG9mICIuIiBmaWxlcykKLQotICAgICAgIG9yIGluY2x1 ZGUgdGhlIC9ET1RGSUxFUyBvciAvTk9ET1RGSUxFUyBzd2l0Y2ggb24gdGhlIGNvbW1hbmQgeW91 Ci0gICAgICAgYXJlIHVzaW5nLCBzdWNoIGFzIFNFTkQgb3IgRElSRUNUT1JZLgotICAgICAqIENv bW1hbmRzIHN1Y2ggYXMgRElSRUNUT1JZIGFuZCBTRU5EIGFsbG93IHJlY3Vyc2l2ZSBkaXJlY3Rv cnkKLSAgICAgICB0cmF2ZXJzYWwuIFRoZXJlIGFyZSBhbHNvIG5ldyBmdW5jdGlvbnMgZm9yIHRo aXMgdG8gdXNlIGluIHNjcmlwdHMuCi0gICAgICAgU2VlIFs1MDhdU2VjdGlvbiA0LjExIGZvciBk ZXRhaWxzLgotCi0gICBXaGVuIGJ1aWxkaW5nIGZpbGUgbGlzdHMgaW4gVU5JWCwgQy1LZXJtaXQg Zm9sbG93cyBzeW1ib2xpYyBsaW5rcy4KLSAgIEJlY2F1c2Ugb2YgdGhpcywgeW91IG1pZ2h0IGVu Y291bnRlciBhbnkgb3IgYWxsIG9mIHRoZSBmb2xsb3dpbmcKLSAgIHBoZW5vbWVuYToKLQotICAg ICAqIE11bHRpcGxlIGNvcGllcyBvZiB0aGUgc2FtZSBmaWxlOyBlLmcuIG9uZSBmcm9tIGl0cyBy ZWFsIGRpcmVjdG9yeQotICAgICAgIGFuZCBvdGhlcnMgZnJvbSBsaW5rcyB0byBpdHMgcmVhbCBk aXJlY3RvcnksIGlmIGJvdGggdGhlIHJlYWwKLSAgICAgICBkaXJlY3RvcnkgYW5kIHRoZSBsaW5r cyB0byBpdCBhcmUgaW4gdGhlIHdpbGRjYXJkIGV4cGFuc2lvbiBsaXN0LgotICAgICAqIEEgY29t bWFuZCBtaWdodCB1bmV4cGVjdGVkbHkgImhhbmciIGZvciBhIGxvbmcgdGltZSBiZWNhdXNlIGFu IE5GUwotICAgICAgIGxpbmsgbWlnaHQgbm90IGJlIHJlc3BvbmRpbmcsIG9yIHRoZSBkaXJlY3Rv cnkgeW91IGFyZSBsb29raW5nIGF0Ci0gICAgICAgY29udGFpbnMgYSBsaW5rIHRvIGEgaHVnZSBk aXJlY3RvcnkgdHJlZSAoZXhhbXBsZTogImRpcmVjdG9yeQotICAgICAgIC9yZWN1cnNpdmUgL2V0 YyIgd2hlbiAvZXRjL3Nwb29sIGlzIGEgc3ltbGluayB0byAvdmFyL3Nwb29sLCB3aGljaAotICAg ICAgIGlzIGEgbGFyZ2Ugb3JnYW5pemF0aW9uJ3MgaW5jb21pbmcgZW1haWwgZGlyZWN0b3J5LCBj b250YWluaW5nIHRlbnMKLSAgICAgICBvZiB0aG91c2FuZHMgb2Ygc3ViZGlyZWN0b3JpZXMpLgot Ci0gICBUaGUgc2l6ZSBvZiB0aGUgZmlsZSBsaXN0IHRoYXQgS2VybWl0IGNhbiBidWlsZCBpcyBs aW1pdGVkIGluIG1vc3QKLSAgIEMtS2VybWl0IGltcGxlbWVudGF0aW9ucy4gVGhlIGxpbWl0LCBp ZiBhbnksIGRlcGVuZHMgb24gdGhlCi0gICBpbXBsZW1lbnRhdGlvbi4gVXNlIHRoZSBTSE9XIEZF QVRVUkVTIGNvbW1hbmQgYW5kIGxvb2sgaW4gdGhlCi0gICBhbHBoYWJldGl6ZWQgb3B0aW9ucyBs aXN0IGZvciBNQVhXTEQgdG8gc2VlIHRoZSB2YWx1ZS4KLQotNC45LjIuIEluIEtlcm1pdCA5NQot Ci0gICBLZXJtaXQgOTUgMS4xLjE5IGFuZCBsYXRlciB1c2VzIHRoZSBzYW1lIHBhdHRlcm4gbWF0 Y2hpbmcgc3ludGF4IGFzIGluCi0gICBVTklYLCBidXQgKGFzIGFsd2F5cykgeW91IHdpbGwgZW5j b3VudGVyIG51bWVyb3VzIGRpZmZpY3VsdGllcyBpZiB5b3UKLSAgIHVzZSBiYWNrc2xhc2ggKFwp IGFzIHRoZSBkaXJlY3Rvcnkgc2VwYXJhdG9yLiBJbiBhbnkgY29tbWFuZCB3aGVyZSBLOTUKLSAg IHBhcnNlcyBmaWxlbmFtZXMgaXRzZWxmICh0aGF0IGlzLCBwcmFjdGljYWxseSBhbnkgZmlsZS1v cmllbnRlZCBjb21tYW5kCi0gICBleGNlcHQgUlVOKSwgeW91IGNhbiB1c2UgZm9yd2FyZCBzbGFz aCAoLykgYXMgdGhlIGRpcmVjdG9yeSBzZXBhcmF0b3IKLSAgIHRvIGF2b2lkIGFsbCB0aGUgbmFz dHkgY29uZmxpY3RzLgotCi00LjkuMy4gSW4gVk1TLCBBT1MvVlMsIE9TLTksIFZPUywgZXRjLgot Ci0gICBQbGF0Zm9ybXMgb3RoZXIgdGhhbiBVTklYLCBXaW5kb3dzIDk1Lzk4L05ULCBhbmQgT1Mv MiBoYXZlIHRoZWlyIG93bgotICAgZmlsZW5hbWUgbWF0Y2hpbmcgY2FwYWJpbGl0aWVzIHRoYXQg YXJlLCBpbiBnZW5lcmFsLCBkaWZmZXJlbnQgZnJvbQotICAgS2VybWl0J3MgYnVpbHQtaW4gb25l cyBhbmQgaW4gYW55IGNhc2UgbWlnaHQgY29uZmxpY3Qgd2l0aCB0aGVtLiBGb3IKLSAgIGV4YW1w bGUsIFtdIGVuY2xvc2VzIGRpcmVjdG9yeSBuYW1lcyBpbiBWTVMuCi0KLSAgIE5ldmVydGhlbGVz cyB5b3UgY2FuIHN0aWxsIHVzZSBhbGwgdGhlIHBhdHRlcm4tbWF0Y2hpbmcgY2FwYWJpbGl0aWVz Ci0gICBkZXNjcmliZWQgaW4gWzUwOV1TZWN0aW9uIDQuOS4xIGJ5IGxvYWRpbmcgYSBmaWxlIGxp c3QgaW50byBhbiBhcnJheQotICAgKGUuZy4gd2l0aCBcZmZpbGVzKCosJmEpLCBzZWUgWzUxMF1T ZWN0aW9uIDQuMTEuMykgYW5kIHRoZW4gdXNpbmcgSUYKLSAgIE1BVENIIG9uIHRoZSBtZW1iZXJz LgotCi00LjEwLiBBZGRpdGlvbmFsIFBhdGhuYW1lIENvbnRyb2xzCi0KLSAgIEluIHZlcnNpb24g Ni4wIGFuZCBlYXJsaWVyLCBDLUtlcm1pdCdzIFNFVCB7IFNFTkQsIFJFQ0VJVkUgfSBQQVRITkFN RVMKLSAgIGNvbW1hbmQgaGFkIG9ubHkgT04gYW5kIE9GRiBhcyBvcHRpb25zLiBJbiB2ZXJzaW9u IDcuMCwgdGhlcmUgYXJlIG1vcmUKLSAgIGNob2ljZXM6Ci0KLSAgIFNFVCBTRU5EIFBBVEhOQU1F UyBPRkYKLSAgICAgICAgICBXaGVuIHNlbmRpbmcgYSBmaWxlLCBzdHJpcCBhbGwgZGlzay9kaXJl Y3RvcnkgaW5mb3JtYXRpb24gZnJvbQotICAgICAgICAgIHRoZSBuYW1lLiBFeGFtcGxlOiAic2Vu ZCAvdXNyL29sZ2EvbGV0dGVycy9vb2ZhLnR4dCIgc2VuZHMgdGhlCi0gICAgICAgICAgZmlsZSBh cyAib29mYS50eHQiLiBUaGlzIGFwcGxpZXMgdG8gYWN0dWFsIGZpbGVuYW1lcywgbm90IHRvIGFu eQotICAgICAgICAgIGFzLW5hbWUgeW91IG1pZ2h0IHNwZWNpZnkuCi0KLSAgIFNFVCBTRU5EIFBB VEhOQU1FUyBSRUxBVElWRQotICAgICAgICAgIFdoZW4gc2VuZGluZyBhIGZpbGUsIGxlYXZlIHRo ZSBwYXRobmFtZSBvbiBhcyBnaXZlbi4gRm9yCi0gICAgICAgICAgZXhhbXBsZSwgaWYgeW91ciBj dXJyZW50IGRpcmVjdG9yeSBpcyAvdXNyL29sZ2EsICJzZW5kCi0gICAgICAgICAgbGV0dGVycy9v b2ZhLnR4dCIgc2VuZHMgdGhlIGZpbGUgYXMgImxldHRlcnMvb29mYS50eHQiLCBub3QKLSAgICAg ICAgICAiL3Vzci9vbGdhL2xldHRlcnMvb29mYS50eHQiIG9yICJsZXR0ZXJzLnR4dCIuCi0KLSAg IFNFVCBTRU5EIFBBVEhOQU1FUyBBQlNPTFVURQotICAgICAgICAgIFdoZW4gc2VuZGluZyBhIGZp bGUsIGNvbnZlcnQgaXRzIG5hbWUgdG8gdGhlIGZ1bGwsIGFic29sdXRlCi0gICAgICAgICAgbG9j YWwgcGF0aG5hbWUuIEZvciBleGFtcGxlLCBpZiB5b3VyIGN1cnJlbnQgZGlyZWN0b3J5IGlzCi0g ICAgICAgICAgL3Vzci9vbGdhLCAic2VuZCBsZXR0ZXJzL29vZmEudHh0IiBzZW5kcyB0aGUgZmls ZSBhcwotICAgICAgICAgICIvdXNyL29sZ2EvbGV0dGVycy9vb2ZhLnR4dCIuIE5PVEU6IEV2ZW4g d2l0aCB0aGlzIHNldHRpbmcsCi0gICAgICAgICAgZGV2aWNlIGFuZC9vciBub2RlIG5hbWVzIGFy ZSBub3QgaW5jbHVkZWQuIEZvciBleGFtcGxlLCBpbiBWTVMsCi0gICAgICAgICAgYW55IG5vZGUg b3IgZGV2aWNlIG5hbWUgaXMgc3RyaXBwZWQ7IGluIFdpbmRvd3Mgb3IgT1MvMiwgYW55Ci0gICAg ICAgICAgZGlzayBsZXR0ZXIgaXMgc3RyaXBwZWQuCi0KLSAgIFNFVCBSRUNFSVZFIFBBVEhOQU1F UyBPRkYKLSAgICAgICAgICBXaGVuIHJlY2VpdmluZyBhIGZpbGUsIHN0cmlwIGFsbCBkaXNrL2Rp cmVjdG9yeSBpbmZvcm1hdGlvbiBmcm9tCi0gICAgICAgICAgdGhlIG5hbWUgYmVmb3JlIGF0dGVt cHRpbmcgdG8gc3RvcmUgaXQuIFRoaXMgYXBwbGllcyB0byBpbmNvbWluZwotICAgICAgICAgIGZp bGVuYW1lLCBub3QgdG8gYW55IGFzLW5hbWUgeW91IG1pZ2h0IHNwZWNpZnkuIEV4YW1wbGU6IElm IGEKLSAgICAgICAgICBmaWxlIGFycml2ZXMgdW5kZXIgdGhlIG5hbWUgIi91c3Ivb2xnYS9sZXR0 ZXJzL29vZmEudHh0IiBpdCBpcwotICAgICAgICAgIHN0b3JlZCBzaW1wbHkgYXMgIm9vZmEudHh0 IiBpbiB5b3VyIGRvd25sb2FkIGRpcmVjdG9yeSBvciwgaWYgbm8KLSAgICAgICAgICBkb3dubG9h ZCBkaXJlY3RvcnkgaGFzIGJlZW4gc3BlY2lmaWVkLCBpbiB5b3VyIGN1cnJlbnQKLSAgICAgICAg ICBkaXJlY3RvcnkuCi0KLSAgIFNFVCBSRUNFSVZFIFBBVEhOQU1FUyBSRUxBVElWRQotICAgICAg ICAgIFdoZW4gcmVjZWl2aW5nIGEgZmlsZSwgbGVhdmUgdGhlIHBhdGhuYW1lIG9uIGFzIGl0IGFw cGVhcnMgaW4KLSAgICAgICAgICB0aGUgaW5jb21pbmcgbmFtZSwgYnV0IGlmIHRoZSBpbmNvbWlu ZyBuYW1lIGFwcGVhcnMgdG8gYmUKLSAgICAgICAgICBhYnNvbHV0ZSwgbWFrZSBpdCByZWxhdGl2 ZSB0byB5b3VyIGN1cnJlbnQgb3IgZG93bmxvYWQKLSAgICAgICAgICBkaXJlY3RvcnkuIEV4YW1w bGVzOgotCi0gICAgICAgICAgKyAib29mYS50eHQiIGlzIHN0b3JlZCBhcyAib29mYS50eHQiLgot ICAgICAgICAgICsgImxldHRlcnMvb29mYS50eHQiIGlzIHN0b3JlZCBhcyAibGV0dGVycy9vb2Zh LnR4dCI7IHRoZQotICAgICAgICAgICAgImxldHRlcnMiIHN1YmRpcmVjdG9yeSBpcyBjcmVhdGVk IGlmIGl0IGRvZXMgbm90IGFscmVhZHkKLSAgICAgICAgICAgIGV4aXN0LgotICAgICAgICAgICsg Ii91c3Ivb2xnYS9sZXR0ZXJzL29vZmEudHh0IiBpcyBzdG9yZWQgYXMKLSAgICAgICAgICAgICJ1 c3Ivb2xnYS9sZXR0ZXJzL29vZmEudHh0IiBpbiB5b3VyIGN1cnJlbnQgb3IgZG93bmxvYWQKLSAg ICAgICAgICAgIGRpcmVjdG9yeSwgYW5kIHRoZSAidXNyIiwgInVzci9vbGdhIiwgZXRjLCBkaXJl Y3RvcmllcyBhcmUKLSAgICAgICAgICAgIGNyZWF0ZWQgaWYgdGhleSBkbyBub3QgZXhpc3QuCi0K LSAgIFNFVCBSRUNFSVZFIFBBVEhOQU1FUyBBQlNPTFVURQotICAgICAgICAgIFRoZSBpbmNvbWlu ZyBmaWxlbmFtZSBpcyB1c2VkIGFzIGdpdmVuLiBUaHVzIGl0IGNhbm5vdCBiZSBzdG9yZWQKLSAg ICAgICAgICB1bmxlc3MgdGhlIGdpdmVuIHBhdGggKGlmIGFueSkgYWxyZWFkeSBleGlzdHMgb3Ig Y2FuIGJlIGNyZWF0ZWQuCi0gICAgICAgICAgSW4gdGhpcyBjYXNlLCBub2RlLCBkZXZpY2UsIG9y IGRpc2sgZGVzaWduYXRpb25zIGFyZSBOT1QKLSAgICAgICAgICBzdHJpcHBlZCwgc2luY2UgdGhl eSBtb3N0IGxpa2VseSB3ZXJlIGdpdmVuIGV4cGxpY2l0bHkgYnkgdGhlCi0gICAgICAgICAgdXNl ciBhcyBhbiBhcy1uYW1lLCBtZWFudCB0byBiZSB1c2VkIGFzIGdpdmVuLgotCi0gICBTRVQgUkVD RUlWRSBQQVRITkFNRVMgQVVUTwotICAgICAgICAgIFRoaXMgaXMgdGhlIGRlZmF1bHQsIGFuZCBt ZWFucyBSRUxBVElWRSBpZiB0aGUgc2VuZGVyIHRlbGxzIG1lCi0gICAgICAgICAgaXQgaXMgYSBy ZWN1cnNpdmUgdHJhbnNmZXIsIE9GRiBvdGhlcndpc2UuCi0KLSAgIFNldCBGSUxFIE5BTUVTIENP TlZFUlRFRCBub3cgYWxzbyBhZmZlY3RzIHBhdGhuYW1lcyB0b28uIFdoZW4gUEFUSE5BTUVTCi0g ICBhcmUgUkVMQVRJVkUgb3IgQUJTT0xVVEUgYW5kIEZJTEUgTkFNRVMgYXJlIENPTlZFUlRFRCwg dGhlIGZpbGUgc2VuZGVyCi0gICBjb252ZXJ0cyBpdHMgbmF0aXZlIGRpcmVjdG9yeS1uYW1lIGZv cm1hdCB0byBVTklYIGZvcm1hdCwgYW5kIHRoZSBmaWxlCi0gICByZWNlaXZlciBjb252ZXJ0cyBm cm9tIFVOSVggZm9ybWF0IHRvIGl0cyBuYXRpdmUgb25lOyB0aHVzIFVOSVggZm9ybWF0Ci0gICBp cyB0aGUgY29tbW9uIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbiBmb3IgZGlyZWN0b3J5IGhp ZXJhcmNoaWVzLCBhcwotICAgaXQgaXMgaW4gdGhlIFpJUC9VTlpJUCBwcm9ncmFtcyAod2hpY2gg aXMgd2h5IFpJUCBhcmNoaXZlcyBhcmUKLSAgIHRyYW5zcG9ydGFibGUgYW1vbmcsIFVOSVgsIERP UywgYW5kIFZNUykuCi0KLSAgIEhlcmUncyBhbiBleGFtcGxlIGluIHdoaWNoIGEgZmlsZSBpcyBz ZW50IGZyb20gV2luZG93cyB0byBVTklYIHdpdGgKLSAgIHJlbGF0aXZlIHBhdGhuYW1lcyBhbmQg RklMRSBOQU1FUyBDT05WRVJURUQ6Ci0KLSAgU291cmNlIG5hbWUgICAgICAgICAgICAgICAgSW50 ZXJtZWRpYXRlIG5hbWUgICAgICBEZXN0aW5hdGlvbiBOYW1lCi0gIEM6XEs5NVxUTVBcT09GQS5U WFQgICAgICAgIEs5NS9UTVAvT09GQS5UWFQgICAgICAgazk1L3RtcC9vb2ZhLnR4dAotCi0gICBJ biBhIG1vcmUgY29tcGxpY2F0ZWQgZXhhbXBsZSwgd2Ugc2VuZCB0aGUgc2FtZSBmaWxlIGZyb20g V2luZG93cyB0bwotICAgVk1TOgotCi0gIFNvdXJjZSBuYW1lICAgICAgICAgICAgICAgIEludGVy bWVkaWF0ZSBuYW1lICAgICAgRGVzdGluYXRpb24gTmFtZQotICBDOlxLOTVcVE1QXE9PRkEuVFhU ICAgICAgICBLOTUvVE1QL09PRkEuVFhUICAgICAgIFsuSzk1LlRNUF1PT0ZBLlRYVAotCi0gICAo Tm90ZSB0aGF0IGRpc2sgbGV0dGVycyBhbmQgZGV2aWNlIGRlc2lnbmF0aW9ucyBhcmUgYWx3YXlz IHN0cmlwcGVkCi0gICB3aGVuIHBhdGhuYW1lcyBhcmUgcmVsYXRpdmUpLgotCi0gICBBcyB5b3Ug Y2FuIGltYWdpbmUsIGFzIG1vcmUgYW5kIG1vcmUgZGlyZWN0b3J5IGZvcm1hdHMgYXJlIGNvbnNp ZGVyZWQsCi0gICB0aGlzIGFwcHJvYWNoIGtlZXBzIG1hdHRlcnMgc2ltcGxlOiBvbiBlYWNoIHBs YXRmb3JtLCBLZXJtaXQgbXVzdCBrbm93Ci0gICBvbmx5IGl0cyBvd24gbG9jYWwgZm9ybWF0IGFu ZCB0aGUgY29tbW9uIGludGVybWVkaWF0ZSBvbmUuIEluIG1vc3QKLSAgIGNhc2VzLCB0aGUgcmVj ZWl2ZXIgY2FuIGRldGVjdCB3aGljaCBmb3JtYXQgaXMgdXNlZCBhdXRvbWF0aWNhbGx5LgotCi00 LjExLiBSZWN1cnNpdmUgU0VORCBhbmQgR0VUOiBUcmFuc2ZlcnJpbmcgRGlyZWN0b3J5IFRyZWVz Ci0KLSAgIEMtS2VybWl0IDcuMCBpbiBzZWxlY3RlZCB2ZXJzaW9ucyAoVU5JWCwgVk1TLCBWT1Ms IEFPUy9WUywgV2luZG93cywgYW5kCi0gICBPUy8yIGF0IHRoaXMgd3JpdGluZykgbm93IHBlcm1p dHMgdGhlIFNFTkQgY29tbWFuZCB0byB0cmF2ZXJzZQotICAgZGlyZWN0b3JpZXMgInJlY3Vyc2l2 ZWx5IiBpZiB5b3UgYXNrIGl0IHRvOyB0aGF0IGlzLCB0byBzZW5kIGZpbGVzIGZyb20KLSAgIHRo ZSBjdXJyZW50IG9yIHNwZWNpZmllZCBkaXJlY3RvcnkgYW5kIGFsbCBvZiBpdHMgc3ViZGlyZWN0 b3JpZXMgdG9vLAotICAgYW5kIHRoZWlyIHN1YmRpcmVjdG9yaWVzLCBldGMuIChTb21lIG90aGVy IGNvbW1hbmRzIGNhbiBkbyB0aGlzIHRvbywKLSAgIGluY2x1ZGluZyBESVJFQ1RPUlkuKQotCi0g ICBUaGlzIGZlYXR1cmUgaXMgbmV3IHRvIFVOSVgsIFdpbmRvd3MsIFZPUywgYW5kIE9TLzIuIFZN UyBhbmQgQU9TL1ZTCi0gICBoYXZlIGFsd2F5cyBpbmNsdWRlZCAid2lsZGNhcmQiIG9yICJ0ZW1w bGF0ZSIgY2hhcmFjdGVycyB0aGF0IGFsbG93Ci0gICB0aGlzLCBhbmQgaW4gdGhpcyBjYXNlLCBy ZWN1cnNpdmUgZGlyZWN0b3J5IHRyYXZlcnNhbCBjb3VsZCBoYXBwZW4KLSAgIGJlaGluZCBLZXJt aXQncyBiYWNrLCBpLmUuIEtlcm1pdCBkb2VzIG5vdCBoYXZlIHRvIGRvIGl0IGl0c2VsZiAoaW4K LSAgIFZNUywgdGhlIG5vdGF0aW9uIGlzICJbLi4uXSIgb3IgIltkaXJlY3RvcnkuLi5dIjsgaW4g QU9TL1ZTIGlzICIjIikuIEluCi0gICBDLUtlcm1pdCA3LjAsIGhvd2V2ZXIsIFNFTkQgL1JFQ1VS U0lWRSBpcyBzdXBwb3J0ZWQgYnkgQy1LZXJtaXQgaXRzZWxmCi0gICBmb3IgVk1TLgotCi00LjEx LjEuIENvbW1hbmQtTGluZSBPcHRpb25zCi0KLSAgIFRvIGRlc2NlbmQgYSBkaXJlY3RvcnkgdHJl ZSB3aGVuIHNlbmRpbmcgZmlsZXMsIHVzZSB0aGUgLUwgY29tbWFuZC1saW5lCi0gICBvcHRpb24g dG8gaW5kaWNhdGUgdGhhdCB0aGUgc2VuZCBvcGVyYXRpb24gaXMgdG8gYmUgcmVjdXJzaXZlLCBh bmQKLSAgIGluY2x1ZGUgYSBuYW1lIG9yIHBhdHRlcm4gdG8gYmUgc2VudC4gV2hlbiBnaXZpbmcg YSBwYXR0ZXJuLCB5b3Ugc2hvdWxkCi0gICBlbmNsb3NlIGl0IGluIHF1b3RlcyB0byBwcmV2ZW50 IHRoZSBzaGVsbCBmcm9tIGV4cGFuZGluZyBpdC4gRXhhbXBsZXM6Ci0KLSAgJCBrZXJtaXQgLUxz ICIvdXNyL29sZ2EvKiIgIyBzZW5kIGFsbCBvZiBPbGdhJ3MgZmlsZXMgaW4gYWxsIGhlciBkaXJl Y3RvcmllcwotICAkIGtlcm1pdCAtTHMgZm9vLnR4dCAgICAgICAjIHNlbmQgYWxsIGZvby50eHQg ZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgdHJlZQotICAkIGtlcm1pdCAtTHMgIioudHh0IiAgICAg ICAjIHNlbmQgYWxsIC50eHQgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgdHJlZQotICAkIGtlcm1p dCAtTHMgImxldHRlcnMvKiIgICAjIHNlbmQgYWxsIGZpbGVzIGluIHRoZSBsZXR0ZXJzIGRpcmVj dG9yeSB0cmVlCi0gICQga2VybWl0IC1McyBsZXR0ZXJzICAgICAgICMgc2VuZCBhbGwgZmlsZXMg aW4gdGhlIGxldHRlcnMgZGlyZWN0b3J5IHRyZWUKLSAgJCBrZXJtaXQgLUxzICIqIiAgICAgICAg ICAgIyBzZW5kIGFsbCBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSB0cmVlCi0gICQga2VybWl0IC1M cyAuICAgICAgICAgICAgICMgVU5JWCBvbmx5OiBzZW5kIGFsbCBmaWxlcyBpbiB0aGlzIGRpcmVj dG9yeSB0cmVlCi0gICQga2VybWl0IC1zIC4gICAgICAgICAgICAgICMgVU5JWCBvbmx5OiBhIGZp bGVuYW1lIG9mIC4gaW1wbGllcyAtTAotCi0gICBJZiB5b3UgbGV0IHRoZSBzaGVsbCBleHBhbmQg d2lsZGNhcmRzLCBLZXJtaXQgb25seSBzZW5kcyBmaWxlcyB3aG9zZQotICAgbmFtZXMgbWF0Y2gg ZmlsZXMgaW4gdGhlIGN1cnJlbnQgb3IgZ2l2ZW4gZGlyZWN0b3J5LCBiZWNhdXNlIHRoZSBzaGVs bAotICAgcmVwbGFjZXMgYW4gdW5xdW90ZWQgd2lsZGNhcmQgZXhwcmVzc2lvbiB3aXRoIHRoZSBs aXN0IG9mIG1hdGNoaW5nCi0gICBmaWxlcyAtLSBhbmQgdGhlIHNoZWxsIGRvZXMgbm90IGJ1aWxk IHJlY3Vyc2l2ZSBsaXN0cy4gTm90ZSB0aGF0IHRoZQotICAgIi4iIG5vdGF0aW9uIGZvciB0aGUg dHJlZSByb290ZWQgYXQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzIGFsbG93ZWQKLSAgIG9ubHkg aW4gVU5JWCwgc2luY2UgaW4gV2luZG93cyBhbmQgT1MvMiwgaXQgbWVhbnMgIiouKiIgKG5vbnJl Y3Vyc2l2ZSkuCi0KLTQuMTEuMi4gVGhlIFNFTkQgL1JFQ1VSU0lWRSBDb21tYW5kCi0KLSAgIElm IHlvdSBpbmNsdWRlIHRoZSAvUkVDVVJTSVZFIHN3aXRjaCBpbiBhIFNFTkQgKG9yIE1PVkUsIG9y IHNpbWlsYXIpCi0gICBjb21tYW5kLCBpdCBtZWFucyB0byBkZXNjZW5kIHRoZSBjdXJyZW50IG9y IHNwZWNpZmllZCBkaXJlY3RvcnkgdHJlZQotICAgc2VhcmNoaW5nIGZvciBmaWxlcyB3aG9zZSBu YW1lcyBtYXRjaCB0aGUgZ2l2ZW4gbmFtZSBvciBwYXR0ZXJuLiBTaW5jZQotICAgdGhpcyBpcyBu b3QgdGVycmlibHkgdXNlZnVsIHVubGVzcyB5b3UgYWxzbyBpbmNsdWRlIHBhdGhuYW1lcyB3aXRo IHRoZQotICAgb3V0Ym91bmQgZmlsZXMsIHRoZSAvUkVDVVJTSVZFIHN3aXRjaCBhbHNvIGluY2x1 ZGVzIGFuIGltcGxpY2l0Ci0gICAvUEFUSE5BTUVTOlJFTEFUSVZFIHN3aXRjaCAod2hpY2ggeW91 IGNhbiB1bmRvIGJ5IGluY2x1ZGluZyBhbiBleHBsaWNpdAotICAgL1BBVEhOQU1FUyBzd2l0Y2gg YWZ0ZXIgdGhlIC9SRUNVUlNJVkUgc3dpdGNoKS4KLQotICAgRXhhbXBsZXM6Ci0KLSAgIFNFTkQg L1JFQ1VSU0lWRSAqCi0gICAgICAgICAgU2VuZHMgYWxsIG9mIHRoZSBmaWxlcyBpbiB0aGUgY3Vy cmVudCBkaXJlY3RvcnkgYW5kIGFsbCB0aGUKLSAgICAgICAgICBmaWxlcyBpbiBhbGwgb2YgaXRz IHN1YmRpcmVjdG9yaWVzLCBhbmQgYWxsIG9mIHRoZWlyCi0gICAgICAgICAgc3ViZGlyZWN0b3Jp ZXMsIGV0YywgaW5jbHVkaW5nIHRoZWlyIHJlbGF0aXZlIHBhdGhuYW1lcy4gRW1wdHkKLSAgICAg ICAgICBkaXJlY3RvcmllcyBhcmUgbm90IHNlbnQuCi0KLSAgIFNFTkQgL1JFQ1VSU0lWRSAvUEFU SE5BTUVTOkFCU09MVVRFICoKLSAgICAgICAgICBTZW5kcyBhbGwgb2YgdGhlIGZpbGVzIGluIHRo ZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgYWxsIHRoZQotICAgICAgICAgIGZpbGVzIGluIGFsbCBv ZiBpdHMgc3ViZGlyZWN0b3JpZXMsIGFuZCBhbGwgb2YgdGhlaXIKLSAgICAgICAgICBzdWJkaXJl Y3RvcmllcywgZXRjLCBpbmNsdWRpbmcgdGhlaXIgYWJzb2x1dGUgcGF0aG5hbWVzLgotCi0gICBT RU5EIC9SRUNVUlNJVkUgL1BBVEhOQU1FUzpPRkYgKgotICAgICAgICAgIFNlbmRzIGFsbCBvZiB0 aGUgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCBhbGwgdGhlCi0gICAgICAgICAg ZmlsZXMgaW4gYWxsIG9mIGl0cyBzdWJkaXJlY3RvcmllcywgYW5kIGFsbCBvZiB0aGVpcgotICAg ICAgICAgIHN1YmRpcmVjdG9yaWVzLCBldGMsIHdpdGhvdXQgcGF0aG5hbWVzLgotCi0gICBTRU5E IC9SRUNVUlNJVkUgL3Vzci9vbGdhLyoKLSAgICAgICAgICBTZW5kcyBhbGwgb2YgdGhlIGZpbGVz IGluIHRoZSAvdXNyL29sZ2EgZGlyZWN0b3J5IGFuZCBhbGwgdGhlCi0gICAgICAgICAgZmlsZXMg aW4gYWxsIG9mIGl0cyBzdWJkaXJlY3RvcmllcywgYW5kIGFsbCBvZiB0aGVpcgotICAgICAgICAg IHN1YmRpcmVjdG9yaWVzLCBldGMuCi0KLSAgIFNFTkQgL1JFQ1VSU0lWRSAvdXNyL29sZ2EgKG9y IC91c3Ivb2xnYS8pCi0gICAgICAgICAgU2FtZSBhcyBhYm92ZS4gSWYgdGhlIG5hbWUgaXMgYSBk aXJlY3RvcnkgbmFtZSAod2l0aCBvciB3aXRob3V0Ci0gICAgICAgICAgYSB0cmFpbGluZyBzbGFz aCksIGl0cyBmaWxlcyBhcmUgc2VudCwgYW5kIHRob3NlIG9mIGl0cwotICAgICAgICAgIHN1YmRp cmVjdG9yaWVzLCBhbmQgdGhlaXIgc3ViZGlyZWN0b3JpZXMsIGV0YyAoc2VlIFs1MTFdU2VjdGlv bgotICAgICAgICAgIDQuOSkuCi0KLSAgIFNFTkQgL1JFQ1VSU0lWRSAvVEVYVCAvdXNyL29sZ2Ev Ki50eHQKLSAgICAgICAgICBBcyBhYm92ZSwgYnV0IG9ubHkgZmlsZXMgd2hvc2UgbmFtZXMgZW5k IHdpdGggIi50eHQiIGFyZSBzZW50LAotICAgICAgICAgIGFuZCB0aGV5IGFyZSBzZW50IGluIHRl eHQgbW9kZSAoYXMgdGhleSB3b3VsZCBiZSBieSBkZWZhdWx0Ci0gICAgICAgICAgYW55d2F5IGlm IFNFVCBGSUxFIFBBVFRFUk5TIGlzIE9OIG9yIEFVVE8pLgotCi0gICBTRU5EIC4KLSAgICAgICAg ICBVTklYIG9ubHk6IFNlbmQgYWxsIHRoZSBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3Rvcnku Ci0KLSAgIFNFTkQgL1JFQ1VSU0lWRSAuCi0gICAgICAgICAgVU5JWCBvbmx5OiBTZW5kcyBhbGwg b2YgdGhlIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQKLSAgICAgICAgICBhbGwg b2YgaXRzIHN1YmRpcmVjdG9yaWVzLCBldGMgKFs1MTJdU2VjdGlvbiA0LjkpLgotCi0gICBUaGUg L1JFQ1VSU0lWRSBzd2l0Y2ggaXMgZGlmZmVyZW50IGZyb20gbW9zdCBvdGhlciBzd2l0Y2hlcyBp biB0aGF0IGl0cwotICAgZWZmZWN0IGlzIGltbWVkaWF0ZSAoYnV0IHN0aWxsIGxvY2FsIHRvIHRo ZSBjb21tYW5kIGluIHdoaWNoIGl0IGlzCi0gICBnaXZlbiksIGJlY2F1c2UgaXQgZGV0ZXJtaW5l cyBob3cgZmlsZW5hbWVzIGFyZSB0byBiZSBwYXJzZWQuIEZvcgotICAgZXhhbXBsZSwgInNlbmQg Ki50eHQiIGZhaWxzIHdpdGggYSBwYXJzZSBlcnJvciAoIk5vIGZpbGVzIG1hdGNoIikgaWYKLSAg IHRoZXJlIGFyZSBubyAqLnR4dCBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIGJ1dCAi c2VuZCAvcmVjdXJzaXZlCi0gICAqLnR4dCIgc3VjY2VlZHMgaWYgdGhlcmUgYXJlICIudHh0IiBm aWxlcyBhbnl3aGVyZSBpbiB0aGUgdHJlZSByb290ZWQKLSAgIGF0IHRoZSBjdXJyZW50IGRpcmVj dG9yeS4KLQotICAgVGhlIC9SRUNVUlNJVkUgc3dpdGNoIGFsc28gYWZmZWN0cyB0aGUgZmlsZSBs aXN0cyBkaXNwbGF5ZWQgaWYgeW91IHR5cGUKLSAgICI/IiBpbiBhIGZpbGVuYW1lIGZpZWxkLiAi c2VuZCAuLz8iIGxpc3RzIHRoZSByZWd1bGFyIGZpbGVzIGluIHRoZQotICAgY3VycmVudCBkaXJl Y3RvcnksIGJ1dCAic2VuZCAvcmVjdXJzaXZlIC4vPyIgbGlzdHMgdGhlIGVudGlyZSBkaXJlY3Rv cnkKLSAgIHRyZWUgcm9vdGVkIGF0IHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KLQotNC4xMS4zLiBU aGUgR0VUIC9SRUNVUlNJVkUgQ29tbWFuZAotCi0gICBJbiBhIGNsaWVudC9zZXJ2ZXIgc2V0dGlu ZywgdGhlIGNsaWVudCBjYW4gYWxzbyByZXF1ZXN0IGEgcmVjdXJzaXZlCi0gICB0cmFuc2ZlciB3 aXRoOgotCi0gICBHRVQgL1JFQ1VSU0lWRSBbIG90aGVyIHN3aXRjaGVzIF0gcmVtb3RlLWZpbGVz cGVjIFsgbG9jYWwtc3BlYyBdCi0KLSAgIEluIHdoaWNoIHJlbW90ZSBmaWxlIHNwZWNpZmljYXRp b24gY2FuIGJlIGEgZGlyZWN0b3J5IG5hbWUsIGEgZmlsZW5hbWUsCi0gICBhIHdpbGRjYXJkLCBv ciBhbnkgY29tYmluYXRpb24uIElmIHRoZSBsb2NhbC1zcGVjIGlzIG5vdCBnaXZlbiAoYW5kCi0g ICBQQVRITkFNRVMgYXJlIFJFTEFUSVZFKSwgaW5jb21pbmcgZmlsZXMgYW5kIGRpcmVjdG9yaWVz IGdvIGludG8gdGhlCi0gICBjdXJyZW50IGxvY2FsIGRpcmVjdG9yeS4gSWYgbG9jYWwtc3BlYyBp cyBnaXZlbiBhbmQgaXMgYSBkaXJlY3RvcnksIGl0Ci0gICBiZWNvbWVzIHRoZSByb290IG9mIHRo ZSB0cmVlIGludG8gd2hpY2ggdGhlIGluY29taW5nIGZpbGVzIGFuZAotICAgZGlyZWN0b3JpZXMg YXJlIHBsYWNlZC4gSWYgbG9jYWwtc3BlYyBoYXMgdGhlIHN5bnRheCBvZiBhIGRpcmVjdG9yeQot ICAgbmFtZSAoZS5nLiBpbiBVTklYIGl0IGVuZHMgd2l0aCAvKSwgQy1LZXJtaXQgY3JlYXRlcyB0 aGUgZGlyZWN0b3J5IGFuZAotICAgdGhlbiBwbGFjZXMgdGhlIGluY29taW5nIGZpbGVzIGludG8g aXQuIElmIGxvY2FsLXNwZWMgaXMgYSBmaWxlbmFtZQotICAgKG5vdCByZWNvbW1lbmRlZCksIHRo ZW4gYWxsIGluY29taW5nIGZpbGVzIGFyZSBzdG9yZWQgd2l0aCB0aGF0IG5hbWUKLSAgIHdpdGgg Y29sbGlzaW9ucyBoYW5kbGVkIGFjY29yZGluZyB0byB0aGUgRklMRSBDT0xMSVNJT04gc2V0dGlu Zy4KLQotICAgQWdhaW4sIHRoZSBub3JtYWwgbWV0aG9kIGZvciB0cmFuc2ZlcnJpbmcgZGlyZWN0 b3J5IHRyZWVzIHVzZXMgcmVsYXRpdmUKLSAgIHBhdGhuYW1lcywgYW5kIHRoaXMgaXMgdGhlIGRl ZmF1bHQgd2hlbiB0aGUgc2VuZGVyIGhhcyBiZWVuIGdpdmVuIHRoZQotICAgL1JFQ1VSU0lWRSBz d2l0Y2guIFRoZSBhY3Rpb24gYXQgdGhlIHJlY2VpdmVyIGRlcGVuZHMgb24gaXRzIFJFQ0VJVkUK LSAgIFBBVEhOQU1FUyBzZXR0aW5nLiBUaGUgZGVmYXVsdCBpcyBBVVRPLCBtZWFuaW5nIHRoYXQg aWYgdGhlIHNlbmRlcgotICAgdGVsbHMgaXQgdG8gZXhwZWN0IGEgcmVjdXJzaXZlIHRyYW5zZmVy LCB0aGVuIGl0IHNob3VsZCBhdXRvbWF0aWNhbGx5Ci0gICBzd2l0Y2ggdG8gcmVsYXRpdmUgcGF0 aG5hbWVzIGZvciB0aGlzIHRyYW5zZmVyIG9ubHk7IG90aGVyd2lzZSBpdCBvYmV5cwotICAgdGhl IFJFQ0VJVkUgUEFUSE5BTUVTIHNldHRpbmcgb2YgT0ZGLCBBQlNPTFVURSwgb3IgUkVMQVRJVkUu Ci0KLSAgIFdoYXQgaGFwcGVucyBpZiBhIGZpbGUgYXJyaXZlcyB0aGF0IGhhcyBhbiBhYnNvbHV0 ZSBwYXRobmFtZSwgd2hlbiB0aGUKLSAgIHJlY2VpdmVyIGhhcyBiZWVuIHRvbGQgdG8gdXNlIG9u bHkgcmVsYXRpdmUgcGF0aG5hbWVzPyBBcyBhIHNlY3VyaXR5Ci0gICBwcmVjYXV0aW9uLCBpbiB0 aGlzIGNhc2UgdGhlIHJlY2VpdmVyIHRyZWF0cyB0aGUgbmFtZSBhcyBpZiBpdCB3YXMKLSAgIHJl bGF0aXZlLiBGb3IgZXhhbXBsZSwgaWYgYSBmaWxlIGFycml2ZXMgYXM6Ci0KLSAgL3Vzci9vbGdh L29vZmEudHh0Ci0KLSAgIFRoZSByZWNlaXZlciBjcmVhdGVzIGEgInVzciIgc3ViZGlyZWN0b3J5 IGluIGl0cyBjdXJyZW50IGRpcmVjdG9yeSwgYW5kCi0gICB0aGVuIGFuICJvbGdhIiBzdWJkaXJl Y3RvcnkgdW5kZXIgdGhlICJ1c3IiIHN1YmRpcmVjdG9yeSBpbiB3aGljaCB0bwotICAgc3RvcmUg dGhlIGluY29taW5nIGZpbGUuCi0KLSAgIFN1cHBvc2UsIGhvd2V2ZXIgdGhlcmUgaXMgYSBzZXF1 ZW5jZSBvZiBkaXJlY3RvcmllczoKLQotICAvdXNyL29sZ2EvYS9iL2MvZC8KLQotICAgaW4gd2hp Y2ggImEiIGNvbnRhaW5zIG5vdGhpbmcgYnV0IGEgc3ViZGlyZWN0b3J5ICJiIiwgd2hpY2ggaW4g dHVybgotICAgY29udGFpbnMgbm90aGluZyBidXQgYSBzdWJkaXJlY3RvcnkgImMiLCB3aGljaCBp biB0dXJuIGNvbnRhaW5zIG5vdGhpbmcKLSAgIGJ1dCBhIHN1YmRpcmVjdG9yeSAiZCIsIHdoaWNo IGNvbnRhaW5zIG5vdGhpbmcgYXQgYWxsLiBUaHVzIHRoZXJlIGFyZQotICAgbm8gZmlsZXMgaW4g dGhlICIvdXNyL29sZ2EvYS8iIHRyZWUsIGFuZCBzbyBpdCBpcyBub3Qgc2VudCwgYW5kCi0gICB0 aGVyZWZvcmUgaXQgaXMgbm90IHJlcHJvZHVjZWQgb24gdGhlIHRhcmdldCBjb21wdXRlci4KLQot NC4xMS40LiBOZXcgYW5kIENoYW5nZWQgRmlsZSBGdW5jdGlvbnMKLQotICAgQy1LZXJtaXQgNy4w IGFkZHMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6Ci0KLSAgIFxmZmlsZXMocGF0dGVyblssJmFd KQotICAgICAgICAgIFRoaXMgZnVuY3Rpb24gaGFzIGJlZW4gY2hhbmdlZCB0byBtYXRjaCBvbmx5 IHJlZ3VsYXIgZmlsZXMgaW4KLSAgICAgICAgICB0aGUgY3VycmVudCBvciBnaXZlbiBkaXJlY3Rv cnksIGFuZCB0byB0YWtlIGFuIG9wdGlvbmFsIGFycmF5Ci0gICAgICAgICAgbmFtZSBhcyBhIHNl Y29uZCBhcmd1bWVudCAoZXhwbGFpbmVkIGJlbG93KS4KLQotICAgXGZkaXJlY3RvcmllcyhwYXR0 ZXJuWywmYV0pCi0gICAgICAgICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRpcmVjdG9yaWVzIHRo YXQgbWF0Y2ggdGhlIGdpdmVuIHBhdHRlcm4uCi0gICAgICAgICAgSWYgdGhlIHBhdHRlcm4gZG9l cyBub3QgaW5jbHVkZSBhIGRpcmVjdG9yeSwgdGhlbiB0aGUgc2VhcmNoIGlzCi0gICAgICAgICAg cGVyZm9ybWVkIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KLQotICAgXGZyZmlsZXMocGF0dGVy blssJmFdKQotICAgICAgICAgIFJldHVybnMgdGhlIG51bWJlciBvZiBmaWxlcyBpbiB0aGUgY3Vy cmVudCBvciBnaXZlbiBkaXJlY3RvcnkKLSAgICAgICAgICBhbmQgYWxsIG9mIGl0cyBzdWJkaXJl Y3RvcmllcywgYW5kIHRoZWlyIHN1YmRpcmVjdG9yaWVzLCBldGMsCi0gICAgICAgICAgdGhhdCBt YXRjaCB0aGUgZ2l2ZW4gcGF0dGVybi4gV2FybmluZyAtLSB0aGlzIG9uZSBjYW4gdGFrZSBxdWl0 ZQotICAgICAgICAgIHNvbWUgdGltZSBpZiBwZXJmb3JtZWQgYXQgdGhlIHJvb3Qgb2YgYSBsYXJn ZSBkaXJlY3RvcnkgdHJlZS4KLQotICAgXGZyZGlyZWN0b3JpZXMocGF0dGVyblssJmFdKQotICAg ICAgICAgIFJldHVybnMgdGhlIG51bWJlciBvZiBkaXJlY3RvcmllcyBpbiB0aGUgY3VycmVudCBv ciBnaXZlbgotICAgICAgICAgIGRpcmVjdG9yeSBhbmQgYWxsIG9mIGl0cyBzdWJkaXJlY3Rvcmll cywgYW5kIHRoZWlyCi0gICAgICAgICAgc3ViZGlyZWN0b3JpZXMsIGV0YywgdGhhdCBtYXRjaCB0 aGUgZ2l2ZW4gcGF0dGVybi4KLQotICAgRWFjaCBvZiB0aGVzZSBmdW5jdGlvbnMgYnVpbGRzIHVw IGEgbGlzdCBvZiBmaWxlcyB0byBiZSByZXR1cm5lZCBieSB0aGUKLSAgIFxmbmV4dGZpbGUoKSBm dW5jdGlvbiwganVzdCBhcyBcZmZpbGVzKCkgYWx3YXlzIGhhcyBkb25lLiAoVGhpcyBjYW4KLSAg IGFsc28gYmUgZG9uZSB3aXRoIHRoZSAvQVJSQVkgc3dpdGNoIG9mIHRoZSBESVJFQ1RPUlkgY29t bWFuZDsgc2VlCi0gICBbNTEzXVNlY3Rpb25zIDQuNS4xIGFuZCBbNTE0XTcuMTApLgotCi0gICBF YWNoIG9mIHRoZXNlIGZ1bmN0aW9ucyBjYW4gYmUgZ2l2ZW4gYW4gYXJyYXkgbmFtZSBhcyBhbiBv cHRpb25hbAotICAgc2Vjb25kIGFyZ3VtZW50LiBJZiBhbiBhcnJheSBuYW1lIGlzIHN1cHBsaWVk LCB0aGUgYXJyYXkgd2lsbCBjb250YWluCi0gICB0aGUgbnVtYmVyIG9mIGZpbGVzIGFzIGl0cyAw dGggZWxlbWVudCwgYW5kIHRoZSBmaWxlbmFtZXMgaW4gZWxlbWVudHMgMQotICAgdGhyb3VnaCBs YXN0LiBJZiB0aGUgYXJyYXkgYWxyZWFkeSBleGlzdGVkLCBpdHMgcHJldmlvdXMgY29udGVudHMg YXJlCi0gICBsb3N0LiBGb3IgZXhhbXBsZSwgaWYgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGNvbnRh aW5zIHR3byBmaWxlcywKLSAgIG9vZmEudHh0IGFuZCBmb28uYmFyLCB0aGVuICJcZmZpbGVzKCos JmEpIiBjcmVhdGVzIGFuIGFycmF5IFwmYVtdIHdpdGgKLSAgIGEgZGltZW5zaW9uIG9mIDIsIGNv bnRhaW5pbmcgdGhlIGZvbGxvd2luZyBlbGVtZW50czoKLQotIFwmYVswXSA9IDIKLSBcJmFbMV0g PSBvb2ZhLnR4dAotIFwmYVsyXSA9IGZvby5iYXIKLQotICAgSWYgbm8gZmlsZXMgbWF0Y2ggdGhl IHNwZWNpZmljYXRpb24gZ2l2ZW4gaW4gdGhlIGZpcnN0IGFyZ3VtZW50LCB0aGUKLSAgIGFycmF5 IGdldHMgYSBkaW1lbnNpb24gb2YgMCwgd2hpY2ggaXMgdGhlIHNhbWUgYXMgdW5kZWNsYXJpbmcg dGhlCi0gICBhcnJheS4KLQotICAgTm90ZSB0aGF0IHRoZSBvcmRlciBpbiB3aGljaCB0aGUgYXJy YXkgaXMgZmlsbGVkIChhbmQgaW4gd2hpY2gKLSAgIFxmbmV4dGZpbGUoKSByZXR1cm5zIGZpbGVu YW1lcykgaXMgaW5kZXRlcm1pbmF0ZSAoYnV0IHNlZSBbNTE1XVNlY3Rpb24KLSAgIDcuMTAuNSku Ci0KLSAgIEhlcmUncyBhbiBleGFtcGxlIHRoYXQgYnVpbGRzIGFuZCBwcmludHMgYSBsaXN0IG9m IGFsbCB0aGUgZmlsZSB3aG9zZQotICAgbmFtZXMgZW5kIGluIC50eHQgaW4gdGhlIGN1cnJlbnQg ZGlyZWN0b3J5IGFuZCBhbGwgaXRzIGRlc2NlbmRlbnRzOgotCi0gIGFzZyBcJW4gXGZyZmlsZXMo Ki50eHQpCi0gIGRlY2xhcmUgXCZhW1wlbl0KLSAgZm9yIFwlaSAxIFwlbiAxIHsKLSAgICAgIGFz ZyBcJmFbXCVpXSBcZm5leHRmaWxlKCkKLSAgICAgIGVjaG8gXGZscGFkKFwlaSw0KS4gIlwmYVtc JWldIgotICB9Ci0KLSAgIEFsdGVybmF0aXZlbHksIHVzaW5nIHRoZSBhcnJheSBtZXRob2QsIGFu ZCB0aGVuIHByaW50aW5nIHRoZSBmaWxlbmFtZXMKLSAgIGluIGFscGhhYmV0aWMgb3JkZXIgKHNl ZSBbNTE2XVNlY3Rpb24gNy4xMC4zIGFuZCBbNTE3XTcuMTAuNSk6Ci0KLSAgYXNnIFwlbiBcZnJm aWxlcygqLnR4dCwmYSkKLSAgc29ydCAmYQotICBmb3IgXCVpIDEgXCVuIDEgewotICAgICAgZWNo byBcZmxwYWQoXCVpLDQpLiAiXCZhW1wlaV0iCi0gIH0KLQotICAgT3IgZXZlbiBtb3JlIHNpbXBs eToKLQotICBhc2cgXCVuIFxmcmZpbGVzKCoudHh0LCZhKQotICBzb3J0ICZhCi0gIHNob3cgYXJy YXkgJmEKLQotICAgQXMgbm90ZWQgZWxzZXdoZXJlLCB0aGUgZmlsZSBsaXN0cyBidWlsdCBieSBc ZmZpbGVzKCksIFxmcmZpbGVzKCksIGV0YywKLSAgIGFyZSBub3cgInNhZmUiIGluIHRoZSBzZW5z ZSB0aGF0IFNFTkQgYW5kIG90aGVyIGZpbGUtcmVsYXRlZCBjb21tYW5kcwotICAgY2FuIHJlZmVy ZW5jZSBcZm5leHRmaWxlKCkgd2l0aG91dCByZXNldHRpbmcgdGhlIGxpc3Q6Ci0KLSAgc2V0IHNl bmQgcGF0aG5hbWVzIHJlbGF0aXZlCi0gIGZvciBcJWkgMSBcZnJmaWxlcygqLnR4dCkgMSB7Ci0g ICAgICBhc2cgXCVhIFxmbmV4dGZpbGUoKQotICAgICAgZWNobyBTZW5kaW5nIFwlYS4uLgotICAg ICAgc2VuZCBcJWEKLSAgICAgIGlmIGZhaWwgYnJlYWsKLSAgfQotCi0gICBDb3B5aW5nIHRvIGFu IGFycmF5IChhcyBzaG93biBvbiBwLjM5OCBvZiBbNTE4XVVzaW5nIEMtS2VybWl0IDJuZCBFZCkK LSAgIGlzIG5vIGxvbmdlciBuZWNlc3NhcnkuCi0KLTQuMTEuNS4gTW92aW5nIERpcmVjdG9yeSBU cmVlcyBCZXR3ZWVuIExpa2UgU3lzdGVtcwotCi00LjExLjUuMS4gVU5JWCB0byBVTklYCi0KLSAg IFRyYW5zZmVycmluZyBhIGRpcmVjdG9yeSB0cmVlIGZyb20gb25lIGNvbXB1dGVyIHRvIGFub3Ro ZXIgcmVwbGljYXRlcwotICAgdGhlIGZpbGUgc2VuZGVyJ3MgYXJyYW5nZW1lbnQgb2YgZmlsZXMg YW5kIGRpcmVjdG9yaWVzIG9uIHRoZSBmaWxlCi0gICByZWNlaXZlcidzIGNvbXB1dGVyLiBOb3Jt YWxseSB0aGlzIGlzIGRvbmUgdXNpbmcgcmVsYXRpdmUgcGF0aG5hbWVzLAotICAgc2luY2UgdGhl IHVzZXIgSURzIG1pZ2h0IG5vdCBiZSBpZGVudGljYWwgb24gdGhlIHR3byBjb21wdXRlcnMuIExl dCdzCi0gICBzYXkgYm90aCBjb21wdXRlcnMgYXJlIFVOSVggYmFzZWQsIHJ1bm5pbmcgQy1LZXJt aXQgNy4wIG9yIGxhdGVyLiBPbgotICAgdGhlIHNlbmRpbmcgY29tcHV0ZXIgKGxlYXZpbmcgb3V0 IHRoZSBjb25uZWN0aW9uIGRldGFpbHMsIGV0Yyk6Ci0KLSAgQy1LZXJtaXQ+IGNkIC91c3Ivb2xn YQotICBDLUtlcm1pdD4gc2VuZCAvcmVjdXJzaXZlIC4KLQotICAgVGhlIC9SRUNVUlNJVkUgc3dp dGNoIHRlbGxzIEMtS2VybWl0IHRvIGRlc2NlbmQgdGhyb3VnaCB0aGUgZGlyZWN0b3J5Ci0gICB0 cmVlIGFuZCB0byBpbmNsdWRlIHJlbGF0aXZlIHBhdGhuYW1lcyBvbiBvdXRib3VuZCBmaWxlbmFt ZXMuCi0KLSAgIE9uIHRoZSByZWNlaXZpbmcgY29tcHV0ZXI6Ci0KLSAgQy1LZXJtaXQ+IG1rZGly IG9sZ2FzLWZpbGVzICAgICAgICAgICA7IE1ha2UgYSBuZXcgZGlyZWN0b3J5LgotICBDLUtlcm1p dD4gY2Qgb2xnYXMtZmlsZXMgICAgICAgICAgICAgIDsgQ0QgdG8gaXQuCi0gIEMtS2VybWl0PiBy ZWNlaXZlIC9yZWN1cnNpdmUgICAgICAgICAgOyA9IC9QQVRITkFNRVM6UkVMQVRJVkUKLQotICAg RWFjaCBLZXJtaXQgcHJvZ3JhbSByZWNvZ25pemVzIHRoYXQgdGhlIG90aGVyIGlzIHJ1bm5pbmcg dW5kZXIgVU5JWCBhbmQKLSAgIHN3aXRjaGVzIHRvIGJpbmFyeSBtb2RlIGFuZCBsaXRlcmFsIGZp bGVuYW1lcyBhdXRvbWF0aWNhbGx5LgotICAgRGlyZWN0b3JpZXMgYXJlIGF1dG9tYXRpY2FsbHkg Y3JlYXRlZCBvbiB0aGUgcmVjZWl2aW5nIHN5c3RlbSBhcwotICAgbmVlZGVkLiBGaWxlIGRhdGVz IGFuZCBwZXJtaXNzaW9ucyBhcmUgYXV0b21hdGljYWxseSByZXByb2R1Y2VkIGZyb20KLSAgIHNv dXJjZSB0byBkZXN0aW5hdGlvbi4KLQotNC4xMS41LjIuIFZNUyB0byBWTVMKLQotICAgVG8gc2Vu ZCByZWN1cnNpdmVseSBmcm9tIFZNUywgc2ltcGx5IGluY2x1ZGUgdGhlIC9SRUNVUlNJVkUgc3dp dGNoLCBmb3IKLSAgIGV4YW1wbGUgYXQgdGhlIHNlbmRlcjoKLQotICAkIGtlcm1pdAotICBDLUtl cm1pdD4gY2QgW29sZ2FdCi0gIEMtS2VybWl0PiBzZW5kIC9yZWN1cnNpdmUgKi4qOzAKLQotICAg QW5kIGF0IHRoZSByZWNlaXZlcjoKLQotICBDLUtlcm1pdD4gY2QgWy5vbGdhXQotICBDLUtlcm1p dD4gcmVjZWl2ZSAvcmVjdXJzaXZlCi0KLSAgIFRoZSBub3RhdGlvbiAiLi4uIiB3aXRoaW4gZGly ZWN0b3J5IGJyYWNrZXRzIGluIFZNUyBtZWFucyAidGhpcwotICAgZGlyZWN0b3J5IGFuZCBhbGwg ZGlyZWN0b3JpZXMgYmVsb3cgaXQiOyB0aGUgL1JFQ1VSU0lWRSBzd2l0Y2gsIHdoZW4KLSAgIGdp dmVuIHRvIHRoZSBzZW5kZXIsIGltcGxpZXMgdGhlIHVzZSBvZiAiLi4uIiBpbiB0aGUgZmlsZSBz cGVjaWZpY2F0aW9uCi0gICBzbyB5b3UgZG9uJ3QgaGF2ZSB0byBpbmNsdWRlICIuLi4iOyBidXQg aXQgbWFrZXMgbm8gZGlmZmVyZW5jZSBpZiB5b3UKLSAgIGRvOgotCi0gICQga2VybWl0Ci0gIEMt S2VybWl0PiBzZW5kIC9yZWN1cnNpdmUgW29sZ2EuLi5dKi4qOzAKLQotICAgQW5kIGF0IHRoZSBy ZWNlaXZlcjoKLQotICBDLUtlcm1pdD4gY2QgWy5vbGdhXQotICBDLUtlcm1pdD4gcmVjZWl2ZSAv cmVjdXJzaXZlCi0KLSAgIEluIGVpdGhlciBjYXNlLCBzaW5jZSBib3RoIHN5c3RlbXMgcmVjb2du aXplIGVhY2ggb3RoZXIgYXMgVk1TLCB0aGV5Ci0gICBzd2l0Y2ggaW50byBMQUJFTEVEIHRyYW5z ZmVyIG1vZGUgYXV0b21hdGljYWxseS4KLQotNC4xMS42LiBNb3ZpbmcgRGlyZWN0b3J5IFRyZWVz IEJldHdlZW4gVW5saWtlIFN5c3RlbXMKLQotICAgVGhlcmUgYXJlIHNldmVyYWwgZGlmZmljdWx0 aWVzIHdpdGggcmVjdXJzaXZlIHRyYW5zZmVycyBiZXR3ZWVuIHVubGlrZQotICAgc3lzdGVtczoK LQotICAgICAqIEZpbGUgZm9ybWF0cyBjYW4gYmUgZGlmZmVyZW50LCBlc3BlY2lhbGx5IHRleHQg ZmlsZXMgY2hhcmFjdGVyIHNldHMKLSAgICAgICBhbmQgcmVjb3JkIGZvcm1hdHMuIFRoaXMgY2Fu IG5vdyBiZSBoYW5kbGVkIGJ5IHVzaW5nIFNFVCBGSUxFCi0gICAgICAgUEFUVEVSTiwgU0VUIEZJ TEUgVEVYVC1QQVRURVJOUywgYW5kIFNFVCBGSUxFIEJJTkFSWS1QQVRURVJOUwotICAgICAgIChb NTE5XVNlY3Rpb24gNC4zKS4KLSAgICAgKiBGaWxlIG5hbWluZyBjb252ZW50aW9ucyBhcmUgZGlm ZmVyZW50LiBGb3IgZXhhbXBsZSwgb25lIHN5c3RlbQotICAgICAgIG1pZ2h0IGFsbG93IChhbmQg dXNlKSBsb25nZXIgZmlsZW5hbWVzIHRoYW4gdGhlIG90aGVyLiBZb3UgY2FuIHRlbGwKLSAgICAg ICBLZXJtaXQgaG93IHRvIGhhbmRsZSBmaWxlIG5hbWVzIHdpdGggdGhlIG5vcm1hbCAic2V0IGZp bGUgbmFtZXMiCi0gICAgICAgYW5kICJzZXQgZmlsZSBjb2xsaXNpb24iIG1lY2hhbmlzbXMuIE1v c3QgbW9kZXJuIEtlcm1pdHMgYXJlIGZhaXJseQotICAgICAgIHRvbGVyYW50IG9mIGlsbGVnYWwg ZmlsZW5hbWVzIGFuZCBzaG91bGQgbm90IGZhaWwgc2ltcGx5IGJlY2F1c2Ugb2YKLSAgICAgICBh biBpbmNvbWluZyBmaWxlbmFtZTsgcmF0aGVyLCBpdCB3aWxsIGRvIGl0cyBiZXN0IHRvIGNvbnZl cnQgaXQgdG8KLSAgICAgICBhIHJlY29nbml6YWJsZSBhbmQgdW5pcXVlIGxlZ2FsIGZpbGVuYW1l LgotICAgICAqIERpcmVjdG9yeSBub3RhdGlvbnMgY2FuIGJlIGRpZmZlcmVudCwgZS5nLiBiYWNr c2xhc2hlcyBpbnN0ZWFkIG9mCi0gICAgICAgc2xhc2hlcywgYnJhY2tldHMsIHBhcmVudGhlc2Vz LCBzcGFjZXMsIGV0Yy4gQnV0IHRoaXMgaXMgbm93Ci0gICAgICAgaGFuZGxlZCBieSBjb252ZXJ0 aW5nIHBhdGhuYW1lcyB0byBhIHN0YW5kYXJkIGZvcm1hdCBkdXJpbmcKLSAgICAgICB0cmFuc2Zl ciAoWzUyMF1TZWN0aW9uIDQuMTApLgotCi0gICBTbyBub3csIGZvciB0aGUgZmlyc3QgdGltZSwg aXQgaXMgcG9zc2libGUgdG8gc2VuZCBkaXJlY3RvcnkgdHJlZXMKLSAgIGFtb25nIGFueSBjb21i aW5hdGlvbiBvZiBVTklYLCBET1MsIFdpbmRvd3MsIE9TLzIsIFZNUywgQU9TL1ZTLCBldGMuCi0g ICBIZXJlJ3MgYW4gZXhhbXBsZSBzZW5kaW5nIGZpbGVzIGZyb20gYW4gSFAtVVggc3lzdGVtICh3 aGVyZSB0ZXh0IGZpbGVzCi0gICBhcmUgZW5jb2RlZCBpbiB0aGUgSFAgUm9tYW44IGNoYXJhY3Rl ciBzZXQpIHRvIGEgUEMgd2l0aCBLOTUgKHdoZXJlCi0gICB0ZXh0IGZpbGVzIGFyZSBlbmNvZGVk IGluIENQODUwKToKLQotIFNlbmRlcjoKLSAgY2QgeHh4ICAgICAgICAgICAgICAgICAgICAgICAg ICAgOyBDRCB0byByb290IG9mIHNvdXJjZSB0cmVlCi0gIHNldCBmaWxlIHR5cGUgYmluYXJ5ICAg ICAgICAgICAgIDsgRGVmYXVsdCB0cmFuc2ZlciBtb2RlCi0gIHNldCBmaWxlIGNoYXJhY3Rlci1z ZXQgaHAtcm9tYW44IDsgTG9jYWwgY2hhcmFjdGVyIHNldCBmb3IgdGV4dCBmaWxlcwotICBzZXQg eGZlciBjaGFyYWN0ZXItc2V0IGxhdGluMSAgICA7IFRyYW5zZmVyIGNoYXJhY3RlciBzZXQKLSAg c2V0IGZpbGUgcGF0dGVybnMgb24gICAgICAgICAgICAgOyBFbmFibGUgYXV0b21hdGljIGZpbGUt dHlwZSBzd2l0Y2hpbmcuLi4KLSAgc2V0IGZpbGUgYmluYXJ5LXBhdHRlcm5zICouWiAqLmd6ICou byAgOyBiYXNlZCBvbiB0aGVzZSBwYXR0ZXJucy4uLgotICBzZXQgZmlsZSB0ZXh0LXBhdHRlcm5z ICoudHh0ICouYyAqLmggICA7IGZvciBiaW5hcnkgYW5kIHRleHQgZmlsZXMuCi0gIHNlbmQgL3Jl Y3Vyc2l2ZSAqICAgICAgICAgICAgICAgIDsgU2VuZCBhbGwgdGhlIGZpbGUgaW4gdGhpcyBkaXJl Y3RvcnkgdHJlZQotCi0gUmVjZWl2ZXI6Ci0gIGNkIHl5eSAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsgQ0QgdG8gcm9vdCBvZiBkZXN0aW5hdGlvbiB0cmVlCi0gIHNldCBmaWxlIGNoYXJhY3Rl ci1zZXQgY3A4NTAgICAgIDsgTG9jYWwgY2hhcmFjdGVyIHNldCBmb3IgdGV4dCBmaWxlcwotICBy ZWNlaXZlIC9wYXRobmFtZXM6cmVsYXRpdmUgICAgICA7IFJlY2VpdmUgd2l0aCBwYXRobmFtZXMK LQotICAgTm90ZXM6Ci0gICAgICogUmVwbGFjZSAieHh4IiBhbmQgInl5eSIgd2l0aCB0aGUgZGVz aXJlZCBkaXJlY3Rvcmllcy4KLSAgICAgKiBSZXBsYWNlIHRoZSBmaWxlIGNoYXJhY3RlciBzZXRz IGFwcHJvcHJpYXRlbHkuCi0gICAgICogQ2hhbmdlIHRoZSBwYXR0ZXJucyBhcyBuZWVkZWQgKG9y IGp1c3QgdXNlIHRoZSBidWlsdC1pbiBkZWZhdWx0Ci0gICAgICAgbGlzdHMpLgotICAgICAqIFNF TkQgL1JFQ1VSU0lWRSBhbHNvIGltcGxpZXMgL1BBVEhOQU1FUzpSRUxBVElWRS4KLSAgICAgKiBU aGUgZmlsZSBzZW5kZXIgdGVsbHMgdGhlIGZpbGUgcmVjZWl2ZXIgdGhlIHRyYW5zZmVyIG1vZGUg b2YgZWFjaAotICAgICAgIGZpbGUuCi0gICAgICogVGhlIGZpbGUgc2VuZGVyIHRlbGxzIHRoZSBm aWxlIHJlY2VpdmVyIHRoZSB0cmFuc2ZlciBjaGFyYWN0ZXIgc2V0LgotICAgICAqIEJ5IGRlZmF1 bHQsIGRlc3RpbmF0aW9uIGZpbGUgZGF0ZXMgd2lsbCBiZSB0aGUgc2FtZSBhcyBvbiB0aGUKLSAg ICAgICBzb3VyY2UuCi0gICAgICogTWFueSBvZiB0aGUgc2V0dGluZ3Mgc2hvd24gbWlnaHQgYWxy ZWFkeSBiZSBzZXQgYnkgZGVmYXVsdC4KLSAgICAgKiBTZWUgWzUyMV1TZWN0aW9ucyA0LjMsIFs1 MjJdNC4xMCwgYW5kIFs1MjNdNC4xNSBmb3IgYWRkaXRpb25hbAotICAgICAgIGV4cGxhbmF0aW9u LgotCi0gICBJZiB5b3UgYXJlIHJlZnJlc2hpbmcgYW4gZXhpc3RpbmcgZGlyZWN0b3J5IG9uIHRo ZSBkZXN0aW5hdGlvbgotICAgY29tcHV0ZXIsIHVzZSAic2V0IGZpbGUgY29sbGlzaW9uIHVwZGF0 ZSIgb3Igb3RoZXIgYXBwcm9wcmlhdGUgZmlsZQotICAgY29sbGlzaW9uIG9wdGlvbiB0byBoYW5k bGUgZmlsZW5hbWUgY29sbGlzaW9ucy4KLQotNC4xMi4gV2hlcmUgRGlkIE15IEZpbGUgR28/Ci0K LSAgIE5vdyB0aGF0IEtlcm1pdCBjYW4gYmUgc3RhcnRlZCBieSBjbGlja2luZyBvbiBkZXNrdG9w IGljb25zICh0aHVzCi0gICBvYnNjdXJpbmcgdGhlIGNvbmNlcHQgb2YgImN1cnJlbnQgZGlyZWN0 b3J5IiksIGFuZCBjYW4gaGF2ZSBhIGRvd25sb2FkCi0gICBkaXJlY3RvcnksIGFuZCBjYW4gY3Jl YXRlIGRpcmVjdG9yaWVzIGZvciBpbmNvbWluZyBmaWxlcyBvbiB0aGUgZmx5LAotICAgZXRjLCBz b21ldGltZXMgaXQgaXMgZWFzeSB0byBsb3NlIGEgZmlsZSBhZnRlciB0cmFuc2Zlci4gT2YgY291 cnNlLCBpZgotICAgeW91IGtlZXAgYSB0cmFuc2FjdGlvbiBsb2c6Ci0KLSAgTE9HIFRSQU5TQUNU SU9OUwotCi0gICBpdCB3aWxsIHJlY29yZCB0aGUgZmF0ZSBhbmQgZmluYWwgcmVzdGluZyBwbGFj ZSBvZiBlYWNoIGZpbGUuIEJ1dCBpbgotICAgY2FzZSB5b3UgZGlkIG5vdCBrZWVwIGEgbG9nLCB0 aGUgbmV3IGNvbW1hbmQ6Ci0KLSAgV0hFUkUKLQotICAgYWRkZWQgaW4gQy1LZXJtaXQgNy4wLCBn aXZlcyB5b3UgYXMgbXVjaCBpbmZvcm1hdGlvbiBhcyBpdCBoYXMgYWJvdXQKLSAgIHRoZSBsb2Nh dGlvbiBvZiB0aGUgbGFzdCBmaWxlcyB0cmFuc2ZlcnJlZCwgaW5jbHVkaW5nIHRoZSBwYXRobmFt ZQotICAgcmVwb3J0ZWQgYnkgdGhlIHJlY2VpdmluZyBLZXJtaXQsIGlmIGFueSwgd2hlbiBDLUtl cm1pdCBpcyB0aGUgc2VuZGVyLgotICAgVGhpcyBpbmZvcm1hdGlvbiB3YXMgYWxzbyBhZGRlZCB0 byBTSE9XIEZJTEUgaW4gc29tZXdoYXQgbGVzcyBkZXRhaWwuCi0KLTQuMTMuIEZpbGUgT3V0cHV0 IEJ1ZmZlciBDb250cm9sCi0KLSAgIChVTklYIG9ubHkpLiBUaGUgbmV3IGNvbW1hbmQgU0VUIEZJ TEUgT1VUUFVUIGxldHMgeW91IGNvbnRyb2wgaG93Ci0gICBpbmNvbWluZyBmaWxlcyBhcmUgd3Jp dHRlbiB0byBkaXNrOgotCi0gICBTRVQgRklMRSBPVVRQVVQgQlVGRkVSRUQgWyBzaXplIF0KLSAg ICAgICAgICBDaG9vc2VzIGJ1ZmZlcmVkIGZpbGUgb3V0cHV0OyB0aGlzIGlzIHRoZSBkZWZhdWx0 LiBVTklYIGRvZXMgaXRzCi0gICAgICAgICAgbm9ybWFsIHNvcnQgb2YgZGlzayBidWZmZXJpbmcu IFRoZSBvcHRpb25hbCBzaXplIHNwZWNpZmllcwotICAgICAgICAgIEtlcm1pdCdzIG93biBmaWxl IG91dHB1dCBidWZmZXIgc2l6ZSwgYW5kIHRoZXJlZm9yZSB0aGUKLSAgICAgICAgICBmcmVxdWVu Y3kgb2YgZGlzayBhY2Nlc3NlcyAod3JpdGUoKSBzeXN0ZW0gY2FsbHMpIC0tIHRoZSBiaWdnZXIK LSAgICAgICAgICB0aGUgc2l6ZSwgdGhlIGZld2VyIHRoZSBkaXNrIGFjY2Vzc2VzLgotCi0gICBT RVQgRklMRSBPVVRQVVQgVU5CVUZGRVJFRCBbIHNpemUgXQotICAgICAgICAgIFRoaXMgZm9yY2Vz IGVhY2ggZmlsZSBvdXRwdXQgd3JpdGUoKSBjYWxsIHRvIGFjdHVhbGx5IGNvbW1pdCB0aGUKLSAg ICAgICAgICBkYXRhIHRvIGRpc2sgaW1tZWRpYXRlbHkuIENob29zaW5nIHRoaXMgb3B0aW9uIHdp bGwgdXN1YWxseSBzbG93Ci0gICAgICAgICAgZmlsZSByZWNlcHRpb24gZG93bi4KLQotICAgU0VU IEZJTEUgT1VUUFVUIEJMT0NLSU5HCi0gICAgICAgICAgV3JpdGUoKSBjYWxscyBzaG91bGQgbm90 IHJldHVybiB1bnRpbCB0aGV5IGFyZSBjb21wbGV0ZS4gVGhpcyBpcwotICAgICAgICAgIHRoZSBu b3JtYWwgc2V0dGluZywgYW5kIGl0IGxldHMgS2VybWl0IGRldGVjdCBkaXNrLXdyaXRlIGVycm9y cwotICAgICAgICAgIGltbWVkaWF0ZWx5LgotCi0gICBTRVQgRklMRSBPVVRQVVQgTk9OQkxPQ0tJ TkcKLSAgICAgICAgICBXcml0ZSgpIGNhbGxzIHNob3VsZCByZXR1cm4gaW1tZWRpYXRlbHkuIFRo aXMgY2FuIHNwZWVkIHVwIGZpbGUKLSAgICAgICAgICByZWNlcHRpb24sIGJ1dCBhbHNvIGRlbGF5 IHRoZSBkZXRlY3Rpb24gb2YgZGlzay13cml0ZSBlcnJvcnMuCi0KLSAgIEV4cGVyaW1lbnRhdGlv biB3aXRoIHRoZXNlIHBhcmFtZXRlcnMgc2hvdWxkIGJlIGhhcm1sZXNzLCBhbmQgbWlnaHQgKG9y Ci0gICBtaWdodCBub3QpIGhhdmUgYSBwZXJjZXB0aWJsZSwgZXZlbiBkcmFtYXRpYywgZWZmZWN0 IG9uIHBlcmZvcm1hbmNlLgotCi00LjE0LiBJbXByb3ZlZCBSZXNwb25zaXZlbmVzcwotCi0gICBJ biB2ZXJzaW9uIDcuMCwgQy1LZXJtaXQncyBmaWxlLXRyYW5zZmVyIHByb3RvY29sIGVuZ2luZSBo YXMgYmVlbiB0dW5lZAotICAgZm9yIGFkZGl0aW9uYWwgc3BlZWQgYW5kIHJlc3BvbnNpdmVuZXNz LgotCi0gICAgICogQmluYXJ5LW1vZGUgdHJhbnNmZXJzIG92ZXIgOC1iaXQgY29ubmVjdGlvbnMs IGEgdmVyeSBjb21tb24gY2FzZSwKLSAgICAgICBhcmUgbm93IGhhbmRsZWQgaW4gYSBzcGVjaWFs IHdheSB0aGF0IG1pbmltaXplcyBvdmVyaGVhZC4KLSAgICAgKiBTRVQgVFJBTlNGRVIgQ1JDLUNB TENVTEFUSU9OIGlzIG5vdyBPRkYgYnkgZGVmYXVsdCwgcmF0aGVyIHRoYW4gT04uCi0gICAgICAg KFRoaXMgYWZmZWN0cyBvbmx5IHRoZSBvdmVyYWxsIHBlci10cmFuc2ZlciBDUkMsIFx2KGNyYzE2 KSwgbm90IHRoZQotICAgICAgIHBlci1wYWNrZXQgQ1JDcykKLSAgICAgKiBDb25uZWN0aW9uIGxv c3MgZHVyaW5nIGZpbGUgdHJhbnNmZXIgaXMgbm93IGRldGVjdGVkIGltbWVkaWF0ZWx5IGluCi0g ICAgICAgbW9zdCBjYXNlcyBvbiBJbnRlcm5ldCBjb25uZWN0aW9ucyBhbmQgb24gc2VyaWFsIGNv bm5lY3Rpb25zIHdoZW4KLSAgICAgICBDQVJSSUVSLVdBVENIIGlzIG5vdCBzZXQgdG8gT0ZGLgot Ci00LjE1LiBEb3VibGluZyBhbmQgSWdub3JpbmcgQ2hhcmFjdGVycyBmb3IgVHJhbnNwYXJlbmN5 Ci0KLSAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZHMgd2VyZSBhZGRlZCBpbiA3LjAsIHByaW1hcmls eSB0byBhbGxvdyBzdWNjZXNzZnVsCi0gICBmaWxlIHRyYW5zZmVyIHRocm91Z2ggQVJQQW5ldCBU QUNzIGFuZCB3aXRoIEhvbmV5d2VsbCBEUFM2IHN5c3RlbXMsIGJ1dAotICAgY2FuIGJlIHVzZWQg aW4gYW55IHNldHRpbmcgd2hlcmUgdGhleSBtaWdodCBiZSBuZWVkZWQ6Ci0KLSAgIFNFVCBTRU5E IERPVUJMRS1DSEFSIHsgWyBjaGFyIFsgY2hhciBbIC4uLiBdIF0gXSwgTk9ORSB9Ci0gICAgICAg ICAgVGVsbHMgQy1LZXJtaXQgdG8gZG91YmxlIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVycyAodXNl IGRlY2ltYWwKLSAgICAgICAgICBub3RhdGlvbikgaW4gcGFja2V0cyB0aGF0IGl0IHNlbmRzLiBG b3IgZXhhbXBsZSwgaWYgeW91IGFyZQotICAgICAgICAgIHNlbmRpbmcgZmlsZXMgdGhyb3VnaCBh IGRldmljZSB0aGF0IHVzZXMgQCBhcyBhbiBlc2NhcGUKLSAgICAgICAgICBjaGFyYWN0ZXIsIGJ1 dCBhbGxvd3MgeW91IHRvIHNlbmQgYSBzaW5nbGUgY29weSBvZiBAIHRocm91Z2ggYnkKLSAgICAg ICAgICBkb3VibGluZyBpdCwgdXNlICJzZXQgc2VuZCBkb3VibGUgNjQiLgotCi0gICBTRVQgUkVD RUlWRSBJR05PUkUtQ0hBUiBbIGNoYXIgWyBjaGFyIFsgLi4uIF0gXSBdCi0gICAgICAgICAgVGVs bHMgQy1LZXJtaXQgdG8gaWdub3JlIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyKHMpIGluIGluY29t aW5nCi0gICAgICAgICAgcGFja2V0cy4gVXNlIHRoaXMsIGZvciBleGFtcGxlLCB3aGVuIHNvbWV0 aGluZyBiZXR3ZWVuIHRoZQotICAgICAgICAgIHNlbmRlciBhbmQgcmVjZWl2ZXIgaXMgaW5zZXJ0 aW5nIGxpbmVmZWVkcyBmb3Igd3JhcHBpbmcsIE5VTHMKLSAgICAgICAgICBmb3IgcGFkZGluZywg ZXRjLgotCi00LjE2LiBOZXcgRmlsZS1UcmFuc2ZlciBEaXNwbGF5IEZvcm1hdHMKLQotICAgU0VU IFRSQU5TRkVSIERJU1BMQVkgeyBCUklFRiwgQ1JULCBGVUxMU0NSRUVOLCBOT05FLCBTRVJJQUwg fQotICAgICAgICAgIFNlbGVjdHMgdGhlIGZpbGUtdHJhbnNmZXIgZGlzcGxheSBmb3JtYXQuCi0K LSAgIEJSSUVGIGlzIHRoZSBuZXcgb25lLiBUaGlzIHdyaXRlcyBvbmUgbGluZSB0byB0aGUgc2Ny ZWVuIHBlciBmaWxlLAotICAgc2hvd2luZyB0aGUgZmlsZSdzIG5hbWUsIHRyYW5zZmVyIG1vZGUs IHNpemUsIHRoZSBzdGF0dXMgb2YgdGhlCi0gICB0cmFuc2ZlciwgYW5kIHdoZW4gdGhlIHRyYW5z ZmVyIGlzIHN1Y2Nlc3NmdWwsIHRoZSBlZmZlY3RpdmUgZGF0YSByYXRlCi0gICBpbiBjaGFyYWN0 ZXJzIHBlciBzZWNvbmQgKENQUykuIEV4YW1wbGU6Ci0KLSAgU0VORCBja2NmbjMubyAoYmluYXJ5 KSAoNTkyMTYgYnl0ZXMpOiBPSyAoMC4xMDQgc2VjLCA1NzAyMDYgY3BzKQotICBTRU5EIGNrY2Zu cy5vIChiaW5hcnkpICgxMTQ0MzYgYnl0ZXMpOiBPSyAoMC4xNDggc2VjLCA3NzIwMDYgY3BzKQot ICBTRU5EIGNrY21haS5jICh0ZXh0KSAoNzkxNDcgYnl0ZXMpOiBPSyAoMC4xODAgc2VjLCA0Mzg1 NDMgY3BzKQotICBTRU5EIGNrY21haS5vIChiaW5hcnkpICgzNTM5NiBieXRlcyk6IE9LICgwLjA2 MCBzZWMsIDU4NzQ5NCBjcHMpCi0gIFNFTkQgY2tjbmV0Lm8gKGJpbmFyeSkgKDYyNzcyIGJ5dGVz KTogUkVGVVNFRAotICBTRU5EIGNrY3Byby5vIChiaW5hcnkpICgxMjE0NDggYnl0ZXMpOiBPSyAo MC4xNzMgc2VjLCA3MDM5MjggY3BzKQotICBTRU5EIGNrY3Byby53ICh0ZXh0KSAoNjM2ODcgYnl0 ZXMpOiBPSyAoMC4xNDEgc2VjLCA0NTMwNTkgY3BzKQotICBTRU5EIG1ha2VmaWxlICh0ZXh0KSAo MTg2NjM2IGJ5dGVzKTogT0sgKDAuNDQ0IHNlYywgNDIwNDcxIGNwcykKLSAgU0VORCB3ZXJtaXQg KGJpbmFyeSkgKDEwNjQ5NjAgYnl0ZXMpOiBPSyAoMi4yMDcgc2VjLCA0ODI0NzcgY3BzKQotCi0g ICBOb3RlIHRoYXQgdHJhbnNmZXIgdGltZXMgYXJlIG5vdyBvYnRhaW5lZCBpbiBmcmFjdGlvbmFs IHNlY29uZHMsIHJhdGhlcgotICAgdGhhbiB3aG9sZSBzZWNvbmRzLCBzbyB0aGUgQ1BTIGZpZ3Vy ZXMgYXJlIG1vcmUgYWNjdXJhdGUgKHRoZSBkaXNwbGF5Ci0gICBzaG93cyAzIGRlY2ltYWwgcGxh Y2VzLCBidXQgaW50ZXJuYWxseSB0aGUgZmlndXJlIGlzIGdlbmVyYWxseSBwcmVjaXNlCi0gICB0 byB0aGUgbWljcm9zZWNvbmQpLgotCi00LjE3LiBOZXcgVHJhbnNhY3Rpb24gTG9nIEZvcm1hdHMK LQotICAgVGhlIG5ldyBjb21tYW5kOgotCi0gIFNFVCBUUkFOU0FDVElPTi1MT0cgeyBWRVJCT1NF LCBGVFAsIEJSSUVGIFsgc2VwYXJhdG9yIF0gfQotCi0gICBsZXRzIHlvdSBjaG9vc2UgdGhlIGZv cm1hdCBvZiB0aGUgdHJhbnNhY3Rpb24gbG9nLiBWRVJCT1NFICh0aGUKLSAgIGRlZmF1bHQpIGlu ZGljYXRlcyB0aGUgdHJhZGl0aW9uYWwgZm9ybWF0IGRlc2NyaWJlZCBpbiB0aGUgYm9vay4gQlJJ RUYKLSAgIGFuZCBGVFAgYXJlIG5ldy4gVGhpcyBjb21tYW5kIG11c3QgYmUgZ2l2ZW4gcHJpb3Ig dG8gdGhlIExPRwotICAgVFJBTlNBQ1RJT04gY29tbWFuZCBpZiBhIG5vbi1WRVJCT1NFIHR5cGUg aXMgZGVzaXJlZC4KLQotNC4xNy4xLiBUaGUgQlJJRUYgRm9ybWF0Ci0KLSAgIEJSSUVGIGNob29z ZXMgYSBvbmUtbGluZSBwZXIgZmlsZSBmb3JtYXQgc3VpdGFibGUgZm9yIGRpcmVjdAotICAgaW1w b3J0YXRpb24gaW50byBkYXRhYmFzZXMgbGlrZSBJbmZvcm1peCwgT3JhY2xlLCBvciBTeWJhc2Us IGluIHdoaWNoOgotCi0gICAgICogRWFjaCByZWNvcmQgaGFzIDggZmllbGRzLgotICAgICAqIEZp ZWxkcyBhcmUgc2VwYXJhdGVkIGJ5IGEgbm9uLWFscGhhbnVtZXJpYyBzZXBhcmF0b3IgY2hhcmFj dGVyLgotICAgICAqIFRoZSBkZWZhdWx0IHNlcGFyYXRvciBjaGFyYWN0ZXIgaXMgY29tbWEgKCwp LgotICAgICAqIEFueSBmaWVsZCBjb250YWluaW5nIHRoZSBzZXBhcmF0b3IgY2hhcmFjdGVyIGlz IGVuY2xvc2VkIGluCi0gICAgICAgZG91YmxlcXVvdGVzLgotICAgICAqIFRoZSBmaW5hbCBmaWVs ZCBpcyBlbmNsb3NlZCBpbiBkb3VibGVxdW90ZXMuCi0KLSAgIFRoZSBmaWVsZHMgYXJlOgotCi0g ICAgMS4gRGF0ZSBpbiB5eXl5bW1kZCBmb3JtYXQKLSAgICAyLiBUaW1lIGluIGhoOm1tOnNzIGZv cm1hdAotICAgIDMuIEFjdGlvbjogU0VORCBvciBSRUNWCi0gICAgNC4gVGhlIGxvY2FsIGZpbGVu YW1lCi0gICAgNS4gVGhlIHNpemUgb2YgdGhlIGZpbGUKLSAgICA2LiBUaGUgdHJhbnNmZXIgbW9k ZSAodGV4dCwgYmluYXJ5LCBpbWFnZSwgbGFiZWxlZCkKLSAgICA3LiBUaGUgc3RhdHVzIG9mIHRo ZSB0cmFuc2ZlcjogT0sgb3IgRkFJTEVECi0gICAgOC4gQWRkaXRpb25hbCBzdGF0dXMtZGVwZW5k ZW50IGluZm8sIGluIGRvdWJsZXF1b3Rlcy4KLQotICAgRXhhbXBsZXM6Ci0KLSAgMjAwMDAyMDgs MTI6MDg6NTIsUkVDViwvdS9vbGdhL29vZmEudHh0LDUyNDYsdGV4dCxPSywiMC4yODRzZWMgMTg0 NDNjcHMiCi0gIDIwMDAwMjA4LDEyOjA5OjMxLFNFTkQsL3Uvb2xnYS9vb2ZhLmV4ZSwzMjc2OCxi aW5hcnksT0ssIjEuMjQzc2VjIDI2MzYyY3BzIgotICAyMDAwMDIwOCwxMjoxMDowMixTRU5ELCIv dS9vbGdhL2EsYiIsMTAxMzAsdGV4dCxGQUlMRUQsIlJlZnVzZWQ6IGRhdGUiCi0KLSAgIE5vdGUg aG93IHRoZSBmaWxlbmFtZSBpcyBlbmNsb3NlZCBpbiBkb3VibGVxdW90ZXMgaW4gdGhlIGZpbmFs IGV4YW1wbGUsCi0gICBiZWNhdXNlIGl0IGNvbnRhaW5zIGEgY29tbWEuCi0KLSAgIFRvIG9idGFp biBCUklFRiBmb3JtYXQsIHlvdSBtdXN0IGdpdmUgdGhlIFNFVCBUUkFOU0FDVElPTi1MT0cgQlJJ RUYKLSAgIGNvbW1hbmQgYmVmb3JlIHRoZSBMT0cgVFJBTlNBQ1RJT05TIGNvbW1hbmQuIChJZiB5 b3UgZ2l2ZSB0aGVtIGluIHRoZQotICAgb3Bwb3NpdGUgb3JkZXIsIGEgaGVhZGluZyBpcyB3cml0 dGVuIHRvIHRoZSBsb2cgYnkgdGhlIExPRyBjb21tYW5kLikKLQotNC4xNy4yLiBUaGUgRlRQIEZv cm1hdAotCi0gICBTRVQgVFJBTlNBQ1RJT04tTE9HIEZUUCAoYXZhaWxhYmxlIG9ubHkgaW4gVU5J WCkgY2hvb3NlcyBhIGZvcm1hdCB0aGF0Ci0gICBpcyBjb21wYXRpYmxlIHdpdGggdGhlIFdVLUZU UEQgKFdhc2hpbmd0b24gVW5pdmVyc2l0eSBGVFAgZGFlbW9uKSBsb2csCi0gICBhbmQgc28gY2Fu IGJlIHByb2Nlc3NlZCBieSBhbnkgc29mdHdhcmUgdGhhdCBwcm9jZXNzZXMgdGhlIFdVLUZUUEQg bG9nLgotICAgSXQgbG9ncyBvbmx5IHRyYW5zZmVycyBpbiBhbmQgb3V0LCBib3RoIHN1Y2Nlc3Nm dWwgYW5kIGZhaWxlZCAoYnV0Ci0gICBzdWNjZXNzIG9yIGZhaWx1cmUgaXMgbm90IGluZGljYXRl ZCwgZHVlIHRvIGxhY2sgb2YgYSBmaWVsZCBpbiB0aGUKLSAgIFdVLUZUUEQgbG9nIGZvcm1hdCBm b3IgdGhpcyBwdXJwb3NlKS4gTm9uLXRyYW5zZmVyIGV2ZW50cyBhcmUgbm90Ci0gICByZWNvcmRl ZC4KLQotICAgVW5saWtlIG90aGVyIGxvZ3MsIHRoZSBGVFAtZm9ybWF0IHRyYW5zYWN0aW9uIGxv ZyBpcyBvcGVuZWQgaW4gYXBwZW5kCi0gICBtb2RlIGJ5IGRlZmF1bHQuIFRoaXMgYWxsb3dzIHlv dSB0byBlYXNpbHkga2VlcCBhIHJlY29yZCBvZiBhbGwgeW91cgotICAga2VybWl0IHRyYW5zZmVy cywgYW5kIGl0IGFsc28gYWxsb3dzIHRoZSBzYW1lIGxvZyB0byBiZSBzaGFyZWQgYnkKLSAgIG11 bHRpcGxlIHNpbXVsdGFuZW91cyBLZXJtaXQgcHJvY2Vzc2VzIG9yIChwZXJtaXNzaW9ucyBwZXJt aXR0aW5nKQotICAgdXNlcnMuIFlvdSBjYW4sIG9mIGNvdXJzZSwgZm9yY2UgY3JlYXRpb24gb2Yg YSBuZXcgbG9nZmlsZSBieQotICAgc3BlY2lmeWluZyB0aGUgTkVXIGtleXdvcmQgYWZ0ZXIgdGhl IGZpbGVuYW1lLCBlLmcuCi0KLSAgbG9nIHRyYW5zYWN0aW9ucyBvb2ZhLmxvZyBuZXcKLQotICAg QWxsIHJlY29yZHMgaW4gdGhlIEZUUC1zdHlsZSBsb2cgYXJlIGluIGEgY29uc2lzdGVudCBmb3Jt YXQuIFRoZSBmaXJzdAotICAgZmllbGQgaXMgZml4ZWQtbGVuZ3RoIGFuZCBjb250YWlucyBzcGFj ZXM7IHN1YnNlcXVlbnQgZmllbGRzIGFyZQotICAgdmFyaWFibGUgbGVuZ3RoLCBjb250YWluIG5v IHNwYWNlcywgYW5kIGFyZSBzZXBhcmF0ZWQgYnkgb25lIG9yIG1vcmUKLSAgIHNwYWNlcy4gVGhl IGZpZWxkcyBhcmU6Ci0KLSAgIFRpbWVzdGFtcAotICAgICAgICAgIFRoaXMgaXMgYW4gYXNjdGlt ZS1zdHlsZSB0aW1lc3RhbXAsIGV4YW1wbGU6ICJXZWQgU2VwIDE2Ci0gICAgICAgICAgMjA6MTk6 MDUgMTk5OSIgSXQgaXMgYWx3YXlzIGV4YWN0bHkgMjQgY2hhcmFjdGVycyBsb25nLCBhbmQgdGhl Ci0gICAgICAgICAgc3ViZmllbGRzIGFyZSBhbHdheXMgaW4gZml4ZWQgcG9zaXRpb25zLgotCi0g ICBFbGFwc2VkIHRpbWUKLSAgICAgICAgICBUaGUgd2hvbGUgbnVtYmVyIG9mIHNlY29uZHMgcmVx dWlyZWQgdG8gdHJhbnNmZXIgdGhlIGZpbGUsIGFzIGEKLSAgICAgICAgICBzdHJpbmcgb2YgZGVj aW1hbCBkaWdpdHMsIGUuZy4gIjI0Ii4KLQotICAgQ29ubmVjdGlvbgotICAgICAgICAgIFRoZSBu YW1lIG9mIHRoZSBuZXR3b3JrIGhvc3QgdG8gd2hpY2ggQy1LZXJtaXQgaXMgY29ubmVjdGVkLCBv cgotICAgICAgICAgIHRoZSBuYW1lIG9mIHRoZSBzZXJpYWwgZGV2aWNlIHRocm91Z2ggd2hpY2gg aXQgaGFzIGRpYWxlZCAob3IKLSAgICAgICAgICBoYXMgYSBkaXJlY3QgY29ubmVjdGlvbiksIG9y ICIvZGV2L3R0eSIgZm9yIHRyYW5zZmVycyBpbiByZW1vdGUKLSAgICAgICAgICBtb2RlLgotCi0g ICBCeXRlcyB0cmFuc2ZlcnJlZAotICAgICAgICAgIFRoZSBudW1iZXIgb2YgYnl0ZXMgdHJhbnNm ZXJyZWQsIGRlY2ltYWwgZGlnaXRzLCBlLmcuICIxNTM3OTA0Ii4KLQotICAgRmlsZW5hbWUKLSAg ICAgICAgICBUaGUgbmFtZSBvZiB0aGUgZmlsZSB0aGF0IHdhcyB0cmFuc2ZlcnJlZCwgZS5nLgot ICAgICAgICAgICIvcHViL2Z0cC9rZXJtaXQvYS9SRUFETUUuVFhUIi4gSWYgdGhlIGZpbGVuYW1l IGNvbnRhaW5zIGFueQotICAgICAgICAgIHNwYWNlcyBvciBjb250cm9sIGNoYXJhY3RlcnMsIGVh Y2ggc3VjaCBjaGFyYWN0ZXIgaXMgcmVwbGFjZWQgYnkKLSAgICAgICAgICBhbiB1bmRlcnNjb3Jl ICgnXycpIGNoYXJhY3Rlci4KLQotICAgTW9kZQotICAgICAgICAgIFRoZSBsZXR0ZXIgJ2InIGlm IHRoZSBmaWxlIHdhcyB0cmFuc2ZlcnJlZCBpbiBiaW5hcnkgbW9kZSwgb3IKLSAgICAgICAgICAn YScgaWYgaXQgd2FzIHRyYW5zZmVycmVkIGluIHRleHQgKEFTQ0lJKSBtb2RlLgotCi0gICBPcHRp b25zCi0gICAgICAgICAgVGhpcyBmaWVsZCBhbHdheXMgY29udGFpbnMgYW4gdW5kZXJzY29yZSAo J18nKSBjaGFyYWN0ZXIuCi0KLSAgIERpcmVjdGlvbgotICAgICAgICAgIFRoZSBsZXR0ZXIgJ28n IGlmIHRoZSBmaWxlIHdhcyB0cmFuc2ZlcnJlZCBPdXQsIGFuZCAnaScgaWYgdGhlCi0gICAgICAg ICAgZmlsZSB3YXMgdHJhbnNmZXJyZWQgSW4uCi0KLSAgIFVzZXIgY2xhc3MKLSAgICAgICAgICBU aGUgbGV0dGVyICdyJyBpbmRpY2F0ZXMgdGhlIGZpbGUgd2FzIHRyYW5zZmVycmVkIGJ5IGEgUmVh bAotICAgICAgICAgIHVzZXIuCi0KLSAgIFVzZXIgaWRlbnRpZmljYXRpb24KLSAgICAgICAgICBU aGUgSUQgb2YgdGhlIHVzZXIgd2hvIHRyYW5zZmVycmVkIHRoZSBmaWxlLgotCi0gICBTZXJ2ZXIg aWRlbnRpZmljYXRpb24KLSAgICAgICAgICBUaGUgc3RyaW5nICJrZXJtaXQiLiBUaGlzIGRpc3Rp bmd1aXNoZXMgYSBLZXJtaXQgdHJhbnNmZXIgbG9nCi0gICAgICAgICAgcmVjb3JkIGZyb20gYSBX VS1GVFBEIHJlY29yZCwgd2hpY2ggY29udGFpbnMgImZ0cCIgaW4gdGhpcwotICAgICAgICAgIGZp ZWxkLgotCi0gICBBdXRoZW50aWNhdGlvbiBjbGFzcwotICAgICAgICAgIFRoZSBkaWdpdCAnMScg aWYgd2Uga25vdyB0aGUgdXNlcidzIElEIG9uIHRoZSBjbGllbnQgc3lzdGVtLAotICAgICAgICAg IG90aGVyd2lzZSAnMCcuIEN1cnJlbnRseSwgYWx3YXlzICcwJy4KLQotICAgQXV0aGVudGljYXRl ZCB1c2VyCi0gICAgICAgICAgSWYgdGhlIGF1dGhlbnRpY2F0aW9uIGNsYXNzIGlzICcxJywgdGhp cyBpcyB0aGUgdXNlcidzIElEIG9uIHRoZQotICAgICAgICAgIGNsaWVudCBzeXN0ZW0uIE90aGVy d2lzZSBpdCBpcyBhbiBhc3RlcmlzayAoJyonKS4gQ3VycmVudGx5IGl0Ci0gICAgICAgICAgaXMg YWx3YXlzIGFuIGFzdGVyaXNrLgotCi0gICBFeGFtcGxlczoKLQotICBUaHUgT2N0IDIyIDE3OjQy OjQ4IDE5OTggMCAqIDk0IC91c3Ivb2xnYS9uZXcueCBhIF8gaSByIG9sZ2Ega2VybWl0IDAgKgot ICBUaHUgT2N0IDIyIDE3OjUxOjI5IDE5OTggMSAqIDE0Nzg5OSAvdXNyL29sZ2EvdGVzdC5jIGEg XyBvIHIgb2xnYSBrZXJtaXQgMCAqCi0gIFRodSBPY3QgMjIgMTc6NTE6NDQgMTk5OCAxICogMjM1 IC91c3Ivb2xnYS90ZXN0Lm8gYiBfIGkgciBvbGdhIGtlcm1pdCAwICoKLSAgRnJpIE9jdCAyMyAx MjoxMDoyNSAxOTk4IDAgKiAyMzUgL3Vzci9vbGdhL3gua3NjIGEgXyBvIHIgb2xnYSBrZXJtaXQg MCAqCi0KLSAgIE5vdGUgdGhhdCBhbiBmdHAtZm9ybWF0IHRyYW5zYWN0aW9uIGxvZyBjYW4gYWxz byBiZSBzZWxlY3RlZCBvbiB0aGUKLSAgIEtlcm1pdCBjb21tYW5kIGxpbmUgYXMgZm9sbG93czoK LQotICBrZXJtaXQgLS14ZmVyZmlsZTpmaWxlc3BlYwotCi0gICBUaGlzIGlzIGVxdWl2YWxlbnQg dG86Ci0KLSAgU0VUIFRSQU5TQUNUSU9OLUxPRyBGVFAKLSAgTE9HIFRSQU5TQUNUSU9OUyBmaWxl c3BlYyBBUFBFTkQKLQotICAgQ29uY2VpdmFibHkgaXQgY291bGQgYmUgcG9zc2libGUgdG8gaGF2 ZSBhIHN5c3RlbS13aWRlIHNoYXJlZCBLZXJtaXQKLSAgIGxvZywgZXhjZXB0IHRoYXQgVU5JWCBs YWNrcyBhbnkgbm90aW9uIG9mIGFuIGFwcGVuZC1vbmx5IGZpbGU7IHRodXMgYW55Ci0gICB1c2Vy IHdobyBjb3VsZCBhcHBlbmQgdG8gdGhlIGxvZyBjb3VsZCBhbHNvIGRlbGV0ZSBpdCAob3IgYWx0 ZXIgaXQpLgotICAgVGhpcyBwcm9ibGVtIGNvdWxkIGJlIHdvcmtlZCBhcm91bmQgdXNpbmcgc2V0 dWlkL3NldGdpZCB0cmlja3MsIGJ1dAotICAgdGhlc2Ugd291bGQgbW9zdCBsaWtlbHkgaW50ZXJm ZXJlIHdpdGggdGhlIG90aGVyIHNldHVpZC9zZXRnaWQgdHJpY2tzCi0gICBDLUtlcm1pdCBtdXN0 IHVzZSBmb3IgZ2V0dGluZyBhdCBkaWFsb3V0IGRldmljZXMgYW5kIFVVQ1AgbG9nZmlsZXMuCi0K LTQuMTguIFVucHJlZml4aW5nIE5VTAotCi0gICBBcyBvZiA2LjEuMTkzIEFscGhhLjEwLCBDLUtl cm1pdCBjYW4gZmluYWxseSBzZW5kIGFuZCByZWNlaXZlCi0gICBmaWxlLXRyYW5zZmVyIHBhY2tl dHMgaW4gd2hpY2ggTlVMIChBU0NJSSAwKSBpcyB1bnByZWZpeGVkIChubyBtb3JlCi0gICBOVUwt dGVybWluYXRlZCBwYWNrZXRzISkuIE5VTCBpcywgb2YgY291cnNlLCBleHRyZW1lbHkgcHJldmFs ZW50IGluCi0gICBiaW5hcnkgZmlsZXMgc3VjaCBhcyBleGVjdXRhYmxlcywgYW5kIHRoaXMgaGFz IGJlZW4gYSBzaWduaWZpY2FudAotICAgc291cmNlIG9mIHBhY2tldCBvdmVyaGVhZC4gRm9yIGV4 YW1wbGUsIHdoZW4gdHJhbnNmZXJyaW5nIGl0c2VsZiAodGhlCi0gICBTdW5PUyBDLUtlcm1pdCBl eGVjdXRhYmxlKSB3aXRoIG1pbmltYWwgcHJlZml4aW5nIGFuZCA5MDAwLWJ5dGUKLSAgIHBhY2tl dHMsIHdlIHNlZToKLQotICBGaWxlIHNpemU6ICAgICAgICAgICAgICAgICAgICAgICAxMDY0OTYw Ci0gIFBhY2tldCBjaGFycyB3aXRoIDAgcHJlZml4ZWQ6ICAgIDExOTk2MjkgIG92ZXJoZWFkID0g MTIuNjUlCi0gIFBhY2tldCBjaGFycyB3aXRoIDAgdW5wcmVmaXhlZDogIDEwNjIzOTMgIG92ZXJo ZWFkID0gLTAuMDMlCi0KLSAgIFRyYW5zZmVyIHJhdGVzIGdvIHVwIGFjY29yZGluZ2x5LCBub3Qg b25seSBiZWNhdXNlIG9mIHRoZSByZWR1Y2VkCi0gICBhbW91bnQgb2YgaS9vLCBidXQgYWxzbyBi ZWNhdXNlIGxlc3MgY29tcHV0YXRpb24gaXMgcmVxdWlyZWQgb24gZWFjaAotICAgZW5kLgotCi00 LjE5LiBDbGVhci1DaGFubmVsIFByb3RvY29sCi0KLSAgIE5vdyB0aGF0IEMtS2VybWl0IGl0c2Vs ZiBpcyBjYXBhYmxlIG9mIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBhbnkgYnl0ZQotICAgYXQgYWxs IG9uIGEgY2xlYXIgY2hhbm5lbCAoWzUyNF1TZWN0aW9uIDQuMTgpLCBpdCBpcywgZm9yIHRoZSBm aXJzdAotICAgdGltZSwgaW4gYSBwb3NpdGlvbiB0byBuZWdvdGlhdGUgYSBjbGVhciBjaGFubmVs IHdpdGggdGhlIG90aGVyIEtlcm1pdCwKLSAgIGdpdmluZyBpdCBwZXJtaXNzaW9uIChidXQgbm90 IHJlcXVpcmluZyBpdCkgdG8gdW5wcmVmaXggYW55IGFuZCBhbGwKLSAgIGNoYXJhY3RlcnMgdGhh dCBpdCBrbm93cyBhcmUgc2FmZS4gSW4gZ2VuZXJhbCB0aGlzIG1lYW5zIGFsbCBidXQgdGhlCi0g ICBLZXJtaXQgc3RhcnQtb2YtcGFja2V0IGNoYXJhY3RlciAobm9ybWFsbHkgQ3RybC1BKSwgQ2Fy cmlhZ2UgUmV0dXJuCi0gICAobm90IG9ubHkgS2VybWl0J3MgZW5kLW9mLXBhY2tldCBjaGFyYWN0 ZXIsIGJ1dCBhbHNvIHRyZWF0ZWQgc3BlY2lhbGx5Ci0gICBvbiBUZWxuZXQgTlZUIGxpbmtzKSwg YW5kIElBQyAoMjU1LCBhbHNvIHNwZWNpYWwgdG8gVGVsbmV0KS4KLQotICAgQnkgZGVmYXVsdCwg Qy1LZXJtaXQgd2lsbCBzYXkgaXQgaGFzIGEgY2xlYXIgY2hhbm5lbCBvbmx5IGlmIGl0IGhhcwot ICAgb3BlbmVkIGEgVENQIHNvY2tldC4gU2luY2UgdGhlIEtlcm1pdCBwcm9ncmFtIG9uIHRoZSBm YXIgZW5kIG9mIGEKLSAgIFRDUC9JUCBjb25uZWN0aW9uIGdlbmVyYWxseSBkb2VzIG5vdCBrbm93 IGl0IGhhcyBhIFRDUC9JUCBjb25uZWN0aW9uLAotICAgaXQgd2lsbCBub3QgYW5ub3VuY2UgYSBj bGVhciBjaGFubmVsIHVubGVzcyBpdCBoYXMgYmVlbiB0b2xkIHRvIGRvIHNvLgotICAgVGhlIGNv bW1hbmQgaXM6Ci0KLSAgIFNFVCBDTEVBUi1DSEFOTkVMIHsgT04sIE9GRiwgQVVUTyB9Ci0KLSAg IEFVVE8gaXMgdGhlIGRlZmF1bHQsIG1lYW5pbmcgdGhhdCB0aGUgY2xlYXItY2hhbm5lbCBzdGF0 dXMgaXMKLSAgIGRldGVybWluZWQgYXV0b21hdGljYWxseSBmcm9tIHRoZSB0eXBlIG9mIGNvbm5l Y3Rpb24uIE9OIG1lYW5zIHRvCi0gICBhbm5vdW5jZSBhIGNsZWFyIGNoYW5uZWwsIE9GRiBtZWFu cyBub3QgdG8gYW5ub3VuY2UgaXQuIFVzZSBTSE9XCi0gICBTVFJFQU1JTkcgKFs1MjVdU2VjdGlv biA0LjIwKSB0byBzZWUgdGhlIGN1cnJlbnQgQ0xFQVItQ0hBTk5FTCBzdGF0dXMuCi0gICBTeW5v bnltOiBTRVQgQ0xFQVJDSEFOTkVMLgotCi0gICBDTEVBUi1DSEFOTkVMIGlzIGFsc28gc2V0IGlm IHlvdSBzdGFydCBDLUtlcm1pdCB3aXRoIHRoZSAtSSBzd2l0Y2ggKHNlZQotICAgWzUyNl1TZWN0 aW9uIDQuMjApLgotCi0gICBXaGVuZXZlciBhIGNsZWFyIGNoYW5uZWwgaXMgbmVnb3RpYXRlZCwg dGhlIHJlc3VsdGluZyBjb250cm9sLWNoYXJhY3RlcgotICAgdW5wcmVmaXhpbmcgaXMgInN0aWNr eSI7IHRoYXQgaXMsIGl0IHJlbWFpbnMgaW4gZWZmZWN0IGFmdGVyIHRoZQotICAgdHJhbnNmZXIg c28geW91IGNhbiB1c2UgU0hPVyBDT05UUk9MIHRvIHNlZSB3aGF0IHdhcyBuZWdvdGlhdGVkLgot Ci0gICBZb3UgY2FuIGFsc28gc2VlIHdoZXRoZXIgYSBjbGVhciBjaGFubmVsIHdhcyBuZWdvdGlh dGVkIGluIHRoZQotICAgU1RBVElTVElDUyAvVkVSQk9TRSBEaXNwbGF5LgotCi0gICBUaGUgYWR2 YW50YWdlIG9mIHRoZSBjbGVhciBjaGFubmVsIGZlYXR1cmUgaXMgdGhhdCBpdCBjYW4gbWFrZSBm aWxlCi0gICB0cmFuc2ZlcnMgZ28gZmFzdGVyIGF1dG9tYXRpY2FsbHkuIFRoZSBkaXNhZHZhbnRh Z2Ugd291bGQgYmUKLSAgIGZpbGUtdHJhbnNmZXIgZmFpbHVyZXMgaWYgdGhlIGNoYW5uZWwgaXMg bm90IHRydWx5IGNsZWFyLCBmb3IgZXhhbXBsZQotICAgaWYgQy1LZXJtaXQgbWFkZSBhIFRlbG5l dCBjb25uZWN0aW9uIHRvIGEgdGVybWluYWwgc2VydmVyLCBhbmQgdGhlbgotICAgZGlhbGVkIG91 dCBmcm9tIHRoZXJlOyBvciBpZiBDLUtlcm1pdCBtYWRlIGFuIFJsb2dpbiBjb25uZWN0aW9uIHRv IGhvc3QKLSAgIGFuZCB0aGVuIG1hZGUgYSBUZWxuZXQgY29ubmVjdGlvbiBmcm9tIHRoZXJlIHRv IGFub3RoZXIgaG9zdC4gSWYgYSBmaWxlCi0gICB0cmFuc2ZlciBmYWlscyBvbiBhIFRDUC9JUCBj b25uZWN0aW9uLCB1c2UgU0hPVyBDT05UUk9MIHRvIGNoZWNrCi0gICB3aGV0aGVyIGNvbnRyb2wg Y2hhcmFjdGVycyBiZWNhbWUgdW5wcmVmaXhlZCBhcyBhIHJlc3VsdCBvZiBwcm90b2NvbAotICAg bmVnb3RpYXRpb25zLCBhbmQvb3IgU0hPVyBTVFJFQU1JTkcgKFs1MjddU2VjdGlvbiA0LjIwKSB0 byBzZWUgaWYKLSAgICJjbGVhci1jaGFubmVsIiB3YXMgbmVnb3RpYXRlZC4gSWYgdGhpcyBoYXBw ZW5lZCwgdXNlIFNFVCBDTEVBUi1DSEFOTkVMCi0gICBPRkYgYW5kIFNFVCBQUkVGSVhJTkcgQ0FV VElPVVMgKG9yIHdoYXRldmVyKSB0byBwcmV2ZW50IGl0IGZyb20KLSAgIGhhcHBlbmluZyBhZ2Fp bi4KLQotNC4yMC4gU3RyZWFtaW5nIFByb3RvY29sCi0KLSAgIEEgbmV3IEtlcm1pdCBwcm90b2Nv bCBvcHRpb24gY2FsbGVkICJzdHJlYW1pbmciIHdhcyBhZGRlZCBpbiBDLUtlcm1pdAotICAgNy4w LiBUaGUgaWRlYSBpcyB0aGF0IGlmIHRoZSB0d28gS2VybWl0IHBhcnRuZXJzIGhhdmUgYSByZWxp YWJsZQotICAgdHJhbnNwb3J0IChzdWNoIGFzIFRDUC9JUCBvciBYLjI1KSBiZXR3ZWVuIHRoZW0s IHRoZW4gdGhlcmUgaXMgbm8gbmVlZAotICAgdG8gc2VuZCBBQ0tzIGZvciBEYXRhIHBhY2tldHMs IG9yIE5BS3MsIHNpbmNlIGEgcmVsaWFibGUgdHJhbnNwb3J0Ci0gICB3aWxsLCBieSBkZWZpbml0 aW9uLCBkZWxpdmVyIGFsbCBwYWNrZXRzIGluIG9yZGVyIGFuZCB1bmRhbWFnZWQuIE9uCi0gICBz dWNoIGEgY29ubmVjdGlvbiwgc3RyZWFtaW5nIGN1dHMgZG93biBub3Qgb25seSBvbiBLZXJtaXQg cHJvZ3JhbQotICAgb3ZlcmhlYWQgKHN3aXRjaGluZyBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHJl YWRpbmcgYW5kIHNlbmRpbmcKLSAgIHBhY2tldHMpLCBidXQgYWxzbyB0ZW5kcyB0byBtYWtlIHRo ZSB1bmRlcmx5aW5nIHRyYW5zcG9ydCB1c2UgaXRzZWxmCi0gICBtb3JlIGVmZmljaWVudGx5IChl LmcuIGJ5IGRlZmVhdGluZyB0aGUgTmFnbGUgYWxnb3JpdGhtIGFuZC9vciBEZWxheWVkCi0gICBB Q0sgc3RyYXRhZ2VtIG9mIHRoZSBUQ1AgbGF5ZXIpLiBGdXJ0aGVybW9yZSwgaXQgYWxsb3dzIHRy YW5zZmVycyB0bwotICAgd29yayBzbW9vdGhseSBvbiBleHRyZW1lbHkgc2xvdyBuZXR3b3JrIGNv bmdlc3Rpb25zIHRoYXQgd291bGQKLSAgIG90aGVyd2lzZSBjYXVzZSB0aW1lb3V0cyBhbmQgcmV0 cmFuc21pc3Npb25zLCBhbmQgZXZlbiBmYWlsdXJlIHdoZW4gdGhlCi0gICByZXRyeSBsaW1pdCB3 YXMgZXhjZWVkZWQuCi0KLSAgIFRoZSB0cmljayBpcyBrbm93aW5nIHdoZW4gd2UgY2FuIHN0cmVh bToKLQotICAgIDEuIElmIEMtS2VybWl0IGhhcyBvcGVuZWQgYSBUQ1Agc29ja2V0IG9yIFguMjUg Y29ubmVjdGlvbiwgaXQgb2ZmZXJzCi0gICAgICAgc3RyZWFtLgotICAgIDIuIElmIEMtS2VybWl0 IGhhcyBiZWVuIHN0YXJ0ZWQgd2l0aCB0aGUgLUkgKHVwcGVyY2FzZSkgb3B0aW9uLCBvciBpZgot ICAgICAgIGl0IGhhcyBiZWVuIHRvbGQgdG8gU0VUIFJFTElBQkxFIE9OLCBpdCBvZmZlcnMgdG8g c3RyZWFtLgotICAgIDMuIElmIEMtS2VybWl0IGlzIGluIHJlbW90ZSBtb2RlLCBhbmQgaGFzIGJl ZW4gdG9sZCB0byBTRVQgUkVMSUFCTEUKLSAgICAgICBBVVRPIChvciBPTiksIGl0IGFsd2F5cyBv ZmZlcnMgdG8gc3RyZWFtLCBhbmQgYWxzbyBhbHdheXMgYWdyZWVzIHRvCi0gICAgICAgc3RyZWFt LCBpZiB0aGUgb3RoZXIgS2VybWl0IG9mZmVycy4gVW5sZXNzIHlvdSB0YWtlIGV4cGxpY2l0Ci0g ICAgICAgYWN0aW9ucyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdHMsIHRoaXMgYWxsb3dzIHRoZSBs b2NhbCBLZXJtaXQgKHRoZQotICAgICAgIG9uZSB0aGF0IG1hZGUgdGhlIGNvbm5lY3Rpb24sIGFu ZCBzbyBrbm93cyB3aGV0aGVyIGl0J3MgcmVsaWFibGUpCi0gICAgICAgdG8gY29udHJvbCBzdHJl YW1pbmcuCi0KLSAgIChOb3RlIHRoYXQgYW4gb2ZmZXIgdG8gc3RyZWFtIGFsc28gcmVzdWx0cyBp biBhIENsZWFyLUNoYW5uZWwKLSAgIGFubm91bmNlbWVudCBpZiBDTEVBUi1DSEFOTkVMIGlzIHNl dCB0byBBVVRPOyBzZWUgWzUyOF1TZWN0aW9uIDQuMTkuKQotCi0gICBXaGVuIEJPVEggS2VybWl0 cyBvZmZlciB0byBzdHJlYW0sIHRoZW4gdGhleSBzdHJlYW07IG90aGVyd2lzZSB0aGV5Ci0gICBk b24ndC4gVGh1cyBzdHJlYW1pbmctY2FwYWJsZSBLZXJtaXQgcHJvZ3JhbXMgaW50ZXJvcGVyYXRl Ci0gICBhdXRvbWF0aWNhbGx5IGFuZCB0cmFuc3BhcmVudGx5IHdpdGggbm9uc3RyZWFtaW5nIG9u ZXMuIElmIHRoZSB0d28KLSAgIEtlcm1pdHMgZG8gYWdyZWUgdG8gc3RyZWFtLCB5b3UnbGwgc2Vl IHRoZSB3b3JkICJTVFJFQU1JTkciIG9uIHRoZQotICAgZnVsbHNjcmVlbiBmaWxlLXRyYW5zZmVy IGRpc3BsYXkgaW4gdGhlIFdpbmRvdyBTbG90cyBmaWVsZC4gWW91IGNhbgotICAgYWxzbyBmaW5k IG91dCBhZnRlcndhcmRzIHdpdGggdGhlIFNUQVRJU1RJQ1Mgb3IgU0hPVyBTVFJFQU1JTkcKLSAg IGNvbW1hbmRzLgotCi0gICAgIFdBUk5JTkc6IEF1dG9tYXRpYyBjaG9pY2Ugb2Ygc3RyZWFtaW5n IGlzIGJhc2VkIG9uIHRoZSBhc3N1bXB0aW9uIG9mCi0gICAgIGEgImRpcmVjdCIgZW5kLXRvLWVu ZCBuZXR3b3JrIGNvbm5lY3Rpb247IGZvciBleGFtcGxlLCBhIFRlbG5ldCBvcgotICAgICBSbG9n aW4gY29ubmVjdGlvbiBmcm9tIGhvc3QgQSB0byBob3N0IEIsIGFuZCB0cmFuc2ZlcnJpbmcgZmls ZXMKLSAgICAgYmV0d2VlbiBBIGFuZCBCLiBIb3dldmVyLCBpZiB5b3VyIGNvbm5lY3Rpb24gaGFz IGFkZGl0aW9uYWwKLSAgICAgY29tcG9uZW50cyAtLSBzb21ldGhpbmcgImluIHRoZSBtaWRkbGUi IChCKSB0aGF0IHlvdSBoYXZlIG1hZGUgYQotICAgICBuZXR3b3JrIGNvbm5lY3Rpb24gdG8sIHdo aWNoIG1ha2VzIGEgc2VwYXJhdGUgY29ubmVjdGlvbiB0byB0aGUKLSAgICAgZGVzdGluYXRpb24g aG9zdCAoQyksIHRoZW4geW91IGRvbid0IHJlYWxseSBoYXZlIGEgcmVsaWFibGUKLSAgICAgY29u bmVjdGlvbiwgYnV0IEMtS2VybWl0IGhhcyBubyB3YXkgb2Yga25vd2luZyB0aGlzOyB0cmFuc2Zl cnJpbmcKLSAgICAgZmlsZXMgYmV0d2VlbiBBIGFuZCBDIHdpbGwgcHJvYmFibHkgZmFpbC4gSW4g c3VjaCBjYXNlcywgeW91J2xsIG5lZWQKLSAgICAgdG8gdGVsbCB0aGUgKmxvY2FsKiBDLUtlcm1p dCB0byAic2V0IHJlbGlhYmxlIG9mZiIgYmVmb3JlCi0gICAgIHRyYW5zZmVycmluZyBmaWxlcyAo aXQgZG9lcyBubyBnb29kIHRvIGdpdmUgdGhpcyBjb21tYW5kIHRvIHRoZQotICAgICByZW1vdGUg S2VybWl0IHNpbmNlIHRoZSBsb2NhbCBvbmUgY29udHJvbHMgdGhlIFJFTElBQkxFIHNldHRpbmcp LgotCi0gICBTdHJlYW1pbmcgaXMgbGlrZSB1c2luZyBhbiBpbmZpbml0ZSB3aW5kb3cgc2l6ZSwg d2l0aCBubyB0aW1lb3V0cyBhbmQKLSAgIG5vIHRvbGVyYW5jZSBmb3IgdHJhbnNtaXNzaW9uIGVy cm9ycyAoc2luY2UgdGhlcmUgc2hvdWxkbid0IGJlIGFueSkuIEl0Ci0gICByZWxpZXMgb24gdGhl IHVuZGVybHlpbmcgdHJhbnNwb3J0IGZvciBmbG93IGNvbnRyb2wsIGVycm9yIGNvcnJlY3Rpb24s Ci0gICB0aW1lb3V0cywgYW5kIHJldHJhbnNtaXNzaW9uLiBUaHVzIGl0IGlzIHZlcnkgc3VpdGFi bGUgZm9yIHVzZSBvbgotICAgVENQL0lQIGNvbm5lY3Rpb25zLCBlc3BlY2lhbGx5IHNsb3cgb3Ig YnVyc3R5IG9uZXMsIHNpbmNlIEtlcm1pdCdzCi0gICBwYWNrZXQgdGltZW91dHMgd29uJ3QgaW50 ZXJmZXJlIHdpdGggdGhlIHRyYW5zZmVyIC0tIGVhY2ggcGFja2V0IHRha2VzCi0gICBhcyBsb25n IHRvIHJlYWNoIGl0cyBkZXN0aW5hdGlvbiBhcyBpdCB0YWtlcyBUQ1AgdG8gZGVsaXZlciBpdC4g SWYgVENQCi0gICBjYW4ndCBkZWxpdmVyIHRoZSBwYWNrZXQgd2l0aGluIGl0cyBvd24gdGltZW91 dCBwZXJpb2QgKG92ZXIgd2hpY2gKLSAgIEtlcm1pdCBoYXMgbm8gY29udHJvbCksIGl0IHNpZ25h bHMgYSBmYXRhbCBlcnJvci4gSnVzdCBsaWtlIEZUUC4KLQotICAgU3RyZWFtaW5nIGdvZXMgbXVj aCBmYXN0ZXIgdGhhbiBub24tc3RyZWFtaW5nIHdoZW4gYSByZWxhdGl2ZWx5IHNtYWxsCi0gICBw YWNrZXQgbGVuZ3RoIGlzIHVzZWQsIGFuZCBpdCB0ZW5kcyB0byBnbyBmYXN0ZXIgdGhhbiBub24t c3RyZWFtaW5nCi0gICB3aXRoIGV2ZW4gdGhlIGxvbmdlc3QgcGFja2V0IGxlbmd0aHMuIFRoZSBL ZXJtaXQgd2luZG93IHNpemUgaXMKLSAgIGlycmVsZXZhbnQgdG8gc3RyZWFtaW5nIHByb3RvY29s LCBidXQgc3RpbGwgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlIGluCi0gICBzbWFsbCB3YXlzIHNp bmNlIGl0IGNhbiByZXN1bHQgaW4gZGlmZmVyZW50IHBhdGhzIHRocm91Z2ggdGhlIGNvZGUuCi0K LSAgIFRoZSBkZWZpbml0aW9uIG9mICJyZWxpYWJsZSB0cmFuc3BvcnQiIGRvZXMgbm90IG5lY2Vz c2FyaWx5IGRlbWFuZAotICAgOC1iaXQgYW5kIGNvbnRyb2wtY2hhcmFjdGVyIHRyYW5zcGFyZW5j eS4gU3RyZWFtaW5nIGNhbiB3b3JrIHdpdGgKLSAgIHBhcml0eSBhbmQvb3IgY29udHJvbC1jaGFy YWN0ZXIgcHJlZml4aW5nIGp1c3QgYXMgd2VsbCAoYnV0IG5vdCBhcwotICAgZmFzdCkgYXMgd2l0 aG91dCB0aGVtOyBpbiBzdWNoIGNhc2VzIHlvdSBjYW4gbGVhdmUgUkVMSUFCTEUgc2V0IHRvIE9O LAotICAgYnV0IHNldCBDTEVBUkNIQU5ORUwgYW5kL29yIFBBUklUWSBhcHByb3ByaWF0ZWx5Lgot Ci0gICBNYXhpbXVtIHBlcmZvcm1hbmNlIC0tIGNvbXBhcmFibGUgdG8gYW5kIG9mdGVuIGV4Y2Vl ZGluZyBGVFAgLS0gaXMKLSAgIGFjaGlldmVkIG9uIHNvY2tldC10by1zb2NrZXQgY29ubmVjdGlv bnMgKGluIHdoaWNoIHRoZSBjb25zaWRlcmFibGUKLSAgIG92ZXJoZWFkIG9mIHRoZSB0ZXJtaW5h bCBkcml2ZXIgYW5kIFRlbG5ldCBvciBSbG9naW4gc2VydmVyIGlzCi0gICBlbGltaW5hdGVkKSB3 aXRoIGxvbmcgcGFja2V0cyBhbmQgdGhlIG5ldyAiYnJpZWYiIGZpbGUtdHJhbnNmZXIgZGlzcGxh eQotICAgKFs1MjldU2VjdGlvbiA0LjE2KS4KLQotNC4yMC4xLiBDb21tYW5kcyBmb3IgU3RyZWFt aW5nCi0KLSAgIFNFVCBSRUxJQUJMRSB7IE9OLCBPRkYsIEFVVE8gfQotICAgICAgICAgIFNFVCBS RUxJQUJMRSBPTiB0ZWxscyBLZXJtaXQgdGhhdCBpdCBoYXMgYSByZWxpYWJsZSB0cmFuc3BvcnQu Ci0gICAgICAgICAgU0VUIFJFTElBQkxFIE9GRiB0ZWxscyBLZXJtaXQgdGhlIHRyYW5zcG9ydCBp cyBub3QgcmVsaWFibGUuCi0gICAgICAgICAgU0VUIFJFTElBQkxFIEFVVE8gdGVsbHMgS2VybWl0 IHRoYXQgaXQgc2hvdWxkIFNFVCBSRUxJQUJMRSBPTgotICAgICAgICAgIHdoZW5ldmVyIGl0IG1h a2VzIGEgcmVsaWFibGUgY29ubmVjdGlvbiAoZS5nLiBURUxORVQgb3IgU0VUIEhPU1QKLSAgICAg ICAgICBvbiBhIFRDUC9JUCBvciBYLjI1IG5ldHdvcmspLCBhbmQgd2hlbiBpbiByZW1vdGUgbW9k ZSBpdCBzaG91bGQKLSAgICAgICAgICBiZWxpZXZlIHRoZSB0cmFuc3BvcnQgaXMgcmVsaWFibGUg aWYgdGhlIG90aGVyIEtlcm1pdCBzYXlzIGl0IGlzCi0gICAgICAgICAgZHVyaW5nIEtlcm1pdCBw cm90b2NvbCBuZWdvdGlhdGlvbi4KLQotICAgQVVUTyBpcyB0aGUgZGVmYXVsdDsgdGhlIEtlcm1p dCBwcm9ncmFtIHRoYXQgbWFrZXMgdGhlIGNvbm5lY3Rpb24ga25vd3MKLSAgIHdoZXRoZXIgaXQg aXMgcmVsaWFibGUsIGFuZCB0ZWxscyB0aGUgcmVtb3RlIEtlcm1pdC4KLQotICAgVGhlIFJFTElB QkxFIHNldHRpbmcgaGFzIHNldmVyYWwgZWZmZWN0cywgaW5jbHVkaW5nOgotCi0gICAgICogSXQg Y2FuIGFmZmVjdCB0aGUgdGltZW91dHMgdXNlZCBkdXJpbmcgbm9ybWFsIEFDSy9OQUsgcHJvdG9j b2wuCi0gICAgICogSXQgY2FuIGFmZmVjdCB0aGUgY2xlYXItY2hhbm5lbCBhbm5vdW5jZW1lbnQu Ci0gICAgICogSXQgY2FuIGFmZmVjdCBzdHJlYW1pbmcuCi0KLSAgIElmIHlvdSBURUxORVQgb3Ig U0VUIEhPU1Qgc29tZXdoZXJlLCB0aGlzIGluY2x1ZGVzIGFuIGltcGxpY2l0IFNFVAotICAgUkVM SUFCTEUgT04gY29tbWFuZC4gVGhlIC1JIGNvbW1hbmQtbGluZSBvcHRpb24gaXMgZXF1aXZhbGVu dCB0byBTRVQKLSAgIFJFTElBQkxFIE9OLgotCi0gICBTaW5jZSBTRVQgUkVMSUFCTEUgT04gKGFu ZCAtSSkgYWxzbyBpbXBsaWVzIFNFVCBDTEVBUiBDSEFOTkVMIE9OLCB5b3UKLSAgIG1pZ2h0IGZp bmQgdGhhdCBpbiBjZXJ0YWluIGNhc2VzIHlvdSBuZWVkIHRvIHRlbGwgS2VybWl0IHRoYXQgZXZl bgotICAgdGhvdWdoIHRoZSBjb25uZWN0aW9uIGlzIHJlbGlhYmxlLCBpdCBkb2Vzbid0IGhhdmUg YSBjbGVhciBjaGFubmVsCi0gICBhZnRlciBhbGw6Ci0KLSAgU0VUIENMRUFSLUNIQU5ORUwgT0ZG Ci0gIFNFVCBQUkVGSVhJTkcgQ0FVVElPVVMgOyBvciB3aGF0ZXZlci4uLgotCi0gICBZb3UgY2Fu IGNvbnRyb2wgc3RyZWFtaW5nIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBvdGhlciBpdGVtcyB3aXRo OgotCi0gIFNFVCBTVFJFQU1JTkcgeyBPTiwgT0ZGLCBBVVRPIH0KLQotICAgQVVUTyBpcyB0aGUg ZGVmYXVsdCwgbWVhbmluZyBzdHJlYW1pbmcgd2lsbCBvY2N1ciBpZiBLZXJtaXQgaGFzIG1hZGUg YQotICAgVENQL0lQIGNvbm5lY3Rpb24gb3IgaWYgUkVMSUFCTEUgaXMgT04gKG9yIGl0IHdhcyBz dGFydGVkIHdpdGggdGhlIC1JCi0gICBjb21tYW5kIGxpbmUgb3B0aW9uKS4gT0ZGIG1lYW5zIGRv bid0IHN0cmVhbTsgT04gbWVhbnMgb2ZmZXIgdG8gc3RyZWFtCi0gICBubyBtYXR0ZXIgd2hhdC4K LQotNC4yMC4yLiBFeGFtcGxlcyBvZiBTdHJlYW1pbmcKLQotICAgSGVyZSB3ZSBsb29rIGF0IHRo ZSB1c2UgYW5kIGJlaGF2aW9yIG9mIHN0cmVhbWluZyBvbiBzZXZlcmFsIGRpZmZlcmVudAotICAg a2luZHMgb2YgY29ubmVjdGlvbnMsIGFuZCBjb21wYXJlIGl0cyBwZXJmb3JtYW5jZSB3aXRoIG5v bi1zdHJlYW1pbmcKLSAgIHRyYW5zZmVycy4KLQotNC4yMC4yLjEuIFN0cmVhbWluZyBvbiBTb2Nr ZXQtdG8tU29ja2V0IENvbm5lY3Rpb25zCi0KLSAgIEhlcmUgd2UgZ2V0IHN0cmVhbWluZyBhdXRv bWF0aWNhbGx5IHdoZW4gYm90aCBLZXJtaXQgcHJvZ3JhbXMgYXJlCi0gICBjYXBhYmxlIG9mIGl0 LCBzaW5jZSB0aGV5IGJvdGggbWFrZSBzb2NrZXQgY29ubmVjdGlvbnMuIEZvciBleGFtcGxlLCBv bgotICAgdGhlIGZhciBlbmQ6Ci0KLSAgQy1LZXJtaXQ+IHNldCBob3N0ICogMzAwMAotICBDLUtl cm1pdD4gc2VydmVyCi0KLSAgIGFuZCBvbiB0aGUgbmVhciBlbmQ6Ci0KLSAgQy1LZXJtaXQ+IHNl dCBob3N0IGZvby5iYXIueHl6LmNvbSAzMDAwCi0gIChub3cgZ2l2ZSBTRU5EIGFuZCBHRVQgY29t bWFuZCkKLQotICAgQWxsIHN1YnNlcXVlbnQgZmlsZSB0cmFuc2ZlcnMgdXNlIHN0cmVhbWluZyBh dXRvbWF0aWNhbGx5LgotCi0gICBIZXJlIGFyZSB0aGUgcmVzdWx0cyBmcm9tIDg0IHRyaWFscywg cnVuIG9uIGEgcHJvZHVjdGlvbiBuZXR3b3JrLAotICAgZGlzay10by1kaXNrLCBpbiB3aGljaCBh IDEtTUIgYmluYXJ5IGZpbGUgKHRoZSBTdW5PUyBDLUtlcm1pdCBTcGFyYwotICAgZXhlY3V0YWJs ZSkgd2FzIHNlbnQgZnJvbSBhIFN1biBTcGFyYy0xMCB3aXRoIFN1bk9TIDQuMS4zIHRvIGFuIElC TQotICAgUG93ZXIgU2VydmVyIDg1MCB3aXRoIEFJWCA0LjEsIHNvY2tldC10by1zb2NrZXQsIG92 ZXIgYSAxME1icHMgMTBCYXNlVAotICAgRXRoZXJuZXQsIHVzaW5nIG1pbmltYWwgY29udHJvbC1j aGFyYWN0ZXIgdW5wcmVmaXhpbmcsIHdpbmRvdyBzaXplcwotICAgZnJvbSAxMCB0byAzMiwgYW5k IHBhY2tldCBzaXplcyBmcm9tIDE0NTAgdG8gOTAxMDoKLQotICAgICAgICAgICAgICAgIFN0cmVh bWluZyAgICBOb25zdHJlYW1pbmcKLSAgTWF4IENQUyAgICAgICAgIDc0ODk1NSAgICAgICAgNjgz MzU0Ci0gIE1pbiBDUFMgICAgICAgICAyMjE1MjIgICAgICAgIDE3MjQ5MQotICBNZWFuIENQUyAg ICAgICAgNjQ2MTM0ICAgICAgICA1NTg2ODAKLSAgTWVkaWFuIENQUyAgICAgIDY3ODA0MyAgICAg ICAgNTk1ODc0Ci0gIFN0ZCBEZXYgICAgICAgICAxMDE0MjQgICAgICAgIDExMTQ5MwotCi0gICBD b3JyZWxhdGlvbnM6Ci0KLSAgQ1BTIGFuZCB3aW5kb3cgc2l6ZTogICAtMC4wMzYKLSAgQ1BTIGFu ZCBwYWNrZXQgbGVuZ3RoOiAgMC4yNTQKLSAgQ1BTIGFuZCBzdHJlYW1pbmc6ICAgICAgMC4zODIK LQotICAgTm90ZSB0aGF0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBzdHJlYW1pbmcgYW5kIHRo cm91Z2hwdXQgaXMKLSAgIHNpZ25pZmljYW50bHkgc3Ryb25nZXIgdGhhbiB0aGF0IGJldHdlZW4g Q1BTIGFuZCB3aW5kb3cgc2l6ZSBvciBwYWNrZXQKLSAgIGxlbmd0aC4KLQotICAgQWxzbyBub3Rl IHRoYXQgdGhpcyBhbmQgYWxsIG90aGVyIHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50cyBpbiB0aGlz Ci0gICBzZWN0aW9uIGFyZSBzbmFwc2hvdHMgaW4gdGltZTsgdGhlIHJlc3VsdHMgY291bGQgYmUg bXVjaCBkaWZmZXJlbnQgYXQKLSAgIG90aGVyIHRpbWVzIHdoZW4gdGhlIGxvYWQgb24gdGhlIHN5 c3RlbXMgYW5kL29yIHRoZSBuZXR3b3JrIGlzIGhpZ2hlcgotICAgb3IgbG93ZXIuCi0KLSAgIElu IGEgc2ltaWxhciBzb2NrZXQtdG8tc29ja2V0IHRyaWFsLCBidXQgdGhpcyB0aW1lIG92ZXIgYSB3 aWRlLWFyZWEKLSAgIFRDUC9JUCBjb25uZWN0aW9uIChmcm9tIE5ldyBZb3JrIENpdHkgdG8gTG9n YW4sIFV0YWgsIGFib3V0IDIwMDAKLSAgIG1pbGVzKSwgdGhlIGZvbGxvd2luZyByZXN1bHRzIHdl cmUgb2J0YWluZWQ6Ci0KLSAgICAgICAgICAgICAgICBTdHJlYW1pbmcgICAgTm9uc3RyZWFtaW5n Ci0gIE1heCBDUFMgICAgICAgICAzMzgyMjYgICAgICAgIDMxODIwMwotICBNaW4gQ1BTICAgICAg ICAgMTkxNjU5ICAgICAgICAxMzIzMTQKLSAgTWVhbiBDUFMgICAgICAgIDI5Mzc0NCAgICAgICAg MjU5MjQwCi0gIE1lZGlhbiBDUFMgICAgICAzMDA4NDUgICAgICAgIDI3MzI3MQotICBTdGQgRGV2 ICAgICAgICAgIDQxOTE0ICAgICAgICAgNTIzNTEKLQotICAgQ29ycmVsYXRpb25zOgotCi0gIENQ UyBhbmQgd2luZG93IHNpemU6ICAgIDAuMTY0Ci0gIENQUyBhbmQgcGFja2V0IGxlbmd0aDogIDAu MTIzCi0gIENQUyBhbmQgc3RyZWFtaW5nOiAgICAgIDAuMzQ2Ci0KLTQuMjAuMi4yLiBTdHJlYW1p bmcgb24gVGVsbmV0IENvbm5lY3Rpb25zCi0KLSAgIEluIHRoaXMgY2FzZSB0aGUgbG9jYWwgY29w eSBvZiBLZXJtaXQgaXMgdG9sZCB0byBURUxORVQgb3IgU0VUIEhPU1QsCi0gICBhbmQgc28gaXQg a25vd3MgaXQgaGFzIGEgcmVsaWFibGUgY29ubmVjdGlvbiBhbmQgLS0gdW5sZXNzIGl0IGhhcyBi ZWVuCi0gICB0b2xkIG5vdCB0byAtLSB3aWxsIG9mZmVyIHRvIHN0cmVhbSwgYW5kIHRoZSBvdGhl ciBLZXJtaXQgcHJvZ3JhbSwKLSAgIHNpbmNlIGl0IGhhcyBTVFJFQU1JTkcgc2V0IHRvIEFVVE8s IGFncmVlcy4KLQotICAgU2luY2Ugd2UgaGF2ZSBhIHJlbGlhYmxlIGNvbm5lY3Rpb24sIHdlJ2xs IGFsc28gZ2V0IGNvbnRyb2wtY2hhcmFjdGVyCi0gICB1bnByZWZpeGluZyBhdXRvbWF0aWNhbGx5 IGJlY2F1c2Ugb2YgdGhlIG5ldyBjbGVhci1jaGFubmVsIHByb3RvY29sCi0gICAoWzUzMF1TZWN0 aW9uIDQuMTkpLgotCi0gICBBbnkgZXJyb3JzIHRoYXQgb2NjdXIgZHVyaW5nIHN0cmVhbWluZyBh cmUgZmF0YWwgdG8gdGhlIHRyYW5zZmVyLiBUaGUKLSAgIG1lc3NhZ2UgaXMgIlRyYW5zbWlzc2lv biBlcnJvciBvbiByZWxpYWJsZSBsaW5rIi4gU2hvdWxkIHRoaXMgaGFwcGVuOgotCi0gICAgMS4g Q2hlY2sgdGhlIHJlbW90ZSBLZXJtaXQncyBmbG93IGNvbnRyb2wgc2V0dGluZyAoU0hPVwotICAg ICAgIENPTU1VTklDQVRJT05TKS4gSWYgaXQgaXMgTk9ORSwgY2hhbmdlIGl0IHRvIFhPTi9YT0ZG LCBvciB2aWNlCi0gICAgICAgdmVyc2EuIElmIGl0IGlzIFhPTi9YT0ZGIChvciB5b3UganVzdCBj aGFuZ2VkIGl0IHRvIFhPRkYvWE9GRiksCi0gICAgICAgbWFrZSBzdXJlIHRoZSBmaWxlIHNlbmRl ciBpcyBwcmVmaXhpbmcgdGhlIFhPTiBhbmQgWE9GRiBjaGFyYWN0ZXJzLgotICAgICAgIEluIHRo ZSBtb3N0IGRyYXN0aWMgY2FzZSwgdXNlICJzZXQgcHJlZml4IGFsbCIgdG8gZm9yY2UgcHJlZml4 aW5nCi0gICAgICAgb2YgYWxsIGNvbnRyb2wgY2hhcmFjdGVycy4KLSAgICAyLiBUaGUgcmVtb3Rl IFRlbG5ldCBzZXJ2ZXIgbWlnaHQgY2hvcCBvZmYgdGhlIDh0aCBiaXQuIEluIHRoYXQgY2FzZSwK LSAgICAgICB0ZWxsIEMtS2VybWl0IHRvICJzZXQgcGFyaXR5IHNwYWNlIi4gT3IsIHlvdSBtaWdo dCBiZSBhYmxlIHRvIGZvcmNlCi0gICAgICAgdGhlIFRlbG5ldCB0byBhbGxvdyBlaWdodC1iaXQg ZGF0YSBieSB0ZWxsaW5nIEMtS2VybWl0IHRvICJzZXQKLSAgICAgICB0ZWxvcHQgYmluYXJ5IHJl cXVlc3QgYWNjZXB0IiAtLSB0aGF0IGlzLCByZXF1ZXN0IHRoZSBUZWxuZXQgc2VydmVyCi0gICAg ICAgdG8gZW50ZXIgYmluYXJ5IG1vZGUsIGFuZCBhY2NlcHQgYmluYXJ5LW1vZGUgYmlkcyBmcm9t IHRoZSBzZXJ2ZXIuCi0gICAgMy4gVGhlIHJlbW90ZSBUZWxuZXQgc2VydmVyIG1pZ2h0IGhhdmUg YSBidWZmZXJpbmcgbGltaXRhdGlvbi4gSWYgYQotICAgICAgIGFuZCBiIGRvbid0IGN1cmUgdGhl IHByb2JsZW0sIHRlbGwgdGhlIGZpbGUgcmVjZWl2ZXIgdG8gInNldAotICAgICAgIHJlY2VpdmUg cGFja2V0LWxlbmd0aCAxMDAwIiAob3Igb3RoZXIgbnVtYmVyIC0tIHVzZSB0aGUgbGFyZ2VzdCBv bmUKLSAgICAgICB0aGF0IHdvcmtzKS4gVGhpcyB0b28sIGlzIG5vIGRpZmZlcmVudCBmcm9tIHRo ZSBub24tc3RyZWFtaW5nIGNhc2UKLSAgICAgICAobW9yZSBhYm91dCB0aGlzIGluIFs1MzFdU2Vj dGlvbiA0LjIwLjIuMykuCi0KLSAgIEFuZCByZW1lbWJlciB5b3UgY2FuIGNvbnRpbnVlIGludGVy cnVwdGVkIGJpbmFyeS1tb2RlIHRyYW5zZmVycyB3aGVyZQotICAgdGhleSBsZWZ0IG9mZiB3aXRo IHRoZSBSRVNFTkQgKD0gU0VORCAvUkVDT1ZFUikgY29tbWFuZC4KLQotICAgSGVyZSBhcmUgdGhl IGZpZ3VyZXMgZm9yIHRoZSBzYW1lIDg0IHRyaWFscyBiZXR3ZWVuIHRoZSBzYW1lIFN1biBhbmQK LSAgIElCTSBob3N0cyBhcyBpbiA0LjIwLjIuMSwgb24gdGhlIHNhbWUgbmV0d29yaywgYnV0IG92 ZXIgYSBUZWxuZXQKLSAgIGNvbm5lY3Rpb24gcmF0aGVyIHRoYW4gc29ja2V0LXRvLXNvY2tldDoK LQotICAgICAgICAgICAgICAgICAgU3RyZWFtaW5nICAgIE5vbnN0cmVhbWluZwotICBNYXggQ1BT ICAgICAgICAgMzUwMDg4ICAgICAgICAzMjI1MjMKLSAgTWluIENQUyAgICAgICAgICA5NTU0NyAg ICAgICAgMTczMTUyCi0gIE1lYW4gQ1BTICAgICAgICAzMjEzNzIgICAgICAgIDI4MTgzMAotICBN ZWRpYW4gQ1BTICAgICAgMzQyNjA0ICAgICAgICAyOTE0NjkKLSAgU3RkIERldiAgICAgICAgICA0 MDUwMyAgICAgICAgIDI5OTQ4Ci0KLSAgIENvcnJlbGF0aW9uczoKLQotICBDUFMgYW5kIHdpbmRv dyBzaXplOiAgICAwLjAwMQotICBDUFMgYW5kIHBhY2tldCBsZW5ndGg6ICAwLjE1MgotICBDUFMg YW5kIHN0cmVhbWluZzogICAgICAwLjEyOAotCi0gICBIZXJlIHRoZSBlZmZlY3QgaXMgbm90IGFz IGVtcGhhdGljIGFzIGluIHRoZSBzb2NrZXQtdG8tc29ja2V0IGNhc2UsIHlldAotICAgb24gdGhl IHdob2xlIHN0cmVhbWluZyB0ZW5kcyB0byBiZSBiZW5lZmljaWFsLgotCi0gICBBZGRpdGlvbmFs IG1lYXN1cmVtZW50cyBvbiBIUC1VWCB1c2luZyBDLUtlcm1pdCA3LjAgQmV0YS4wNjoKLQotICAg ICAgICAgICAgICAgICAgV2luZG93aW5nICAgICBTdHJlYW1pbmcKLSAgSFAtVVggOC0+OCAgICAg IG5vdCB0ZXN0ZWQgICAgICAgMTRLY3BzCi0gIEhQLVVYIDgtPjkgICAgICBub3QgdGVzdGVkICAg ICAgIDc2S2NwcwotICBIUC1VWCA4LT4xMCAgICAgIDM2S2NwcyAgICAgICAgICA2NktjcHMKLSAg SFAtVVggOS0+OSAgICAgIG5vdCB0ZXN0ZWQgICAgICAxOTBLY3BzCi0gIEhQLVVYIDktPjEwICAg ICAxNjBLY3BzICAgICAgICAgMzc4S2NwcwotCi00LjIwLjIuMy4gU3RyZWFtaW5nIHdpdGggTGlt aXRlZCBQYWNrZXQgTGVuZ3RoCi0KLSAgIFRoZSBJUklYIHRlbG5ldCBzZXJ2ZXIgKGF0IGxlYXN0 IHRoZSBvbmVzIG9ic2VydmVkIGluIElSSVggNS4zIGFuZCA2LjIpCi0gICBkb2VzIG5vdCBhbGxv dyBLZXJtaXQgdG8gc2VuZCBwYWNrZXRzIGxvbmdlciB0aGFuIDQwOTYgYnl0ZXMuIFRodXMgd2hl bgotICAgc2VuZGluZyBmcm9tIElSSVggQy1LZXJtaXQgd2hlbiBpdCBpcyBvbiB0aGUgcmVtb3Rl IGVuZCBvZiBhIFRlbG5ldAotICAgY29ubmVjdGlvbiwgdGhlIHBhY2tldCBsZW5ndGggbXVzdCBi ZSA0SyBvciBsZXNzLiBUcmlhbHMgaW4gdGhpcyBjYXNlCi0gICAoaW4gd2hpY2ggcGFja2V0IGxl bmd0aHMgcmFuZ2UgZnJvbSAxNDUwIHRvIDQwMDApIHNob3cgYSBzdHJvbmcKLSAgIGFkdmFudGFn ZSBmb3Igc3RyZWFtaW5nLCB3aGljaCB3b3VsZCBiZSBldmlkZW50IGluIGFueSBvdGhlciBjYXNl IHdoZXJlCi0gICB0aGUgcGFja2V0IGxlbmd0aCBpcyByZXN0cmljdGVkLCBhbmQgc3Ryb25nZXIg dGhlIHNob3J0ZXIgdGhlIG1heGltdW0KLSAgIHBhY2tldCBsZW5ndGguCi0KLSAgICAgICAgICAg ICAgICAgIFN0cmVhbWluZyAgICBOb25zdHJlYW1pbmcKLSAgTWF4IENQUyAgICAgICAgIDQyNjE4 NyAgICAgICAgMzY2ODcwCi0gIE1pbiBDUFMgICAgICAgICA0MDc1MDAgICAgICAgIDI3NjUxNwot ICBNZWFuIENQUyAgICAgICAgNDE1MjI2ICAgICAgICAzMzkxNjgKLSAgTWVkaWFuIENQUyAgICAg IDQxNDEzOSAgICAgICAgMzQzODAzCi0gIFN0ZCBEZXYgICAgICAgICAgIDYwOTQgICAgICAgICAy NTg1MQotCi0gICBDb3JyZWxhdGlvbnM6Ci0KLSAgQ1BTIGFuZCB3aW5kb3cgc2l6ZTogICAgMC4x MTYKLSAgQ1BTIGFuZCBwYWNrZXQgbGVuZ3RoOiAgMC4yNDEKLSAgQ1BTIGFuZCBzdHJlYW1pbmc6 ICAgICAgMC45MDEKLQotNC4yMC4yLjQuIFN0cmVhbWluZyBvbiBEaWFsdXAgQ29ubmVjdGlvbnMK LQotICAgSGVyZSAiZGlhbHVwIiByZWZlcnMgdG8gYSAiZGlyZWN0IiBkaWFsdXAgY29ubmVjdGlv biwgbm90IGEgU0xJUCBvciBQUFAKLSAgIGNvbm5lY3Rpb24sIHdoaWNoIGlzIG9ubHkgYSBwYXJ0 aWN1bGFyIGtpbmQgb2YgVENQL0lQIGNvbm5lY3Rpb24uCi0KLSAgIEF0dGVtcHQgdGhpcyBhdCB5 b3VyIG93biByaXNrLCBhbmQgdGhlbiBvbmx5IGlmIChhKSB5b3UgaGF2ZQotICAgZXJyb3ItY29y cmVjdGluZyBtb2RlbXMsIGFuZCAoYikgdGhlIGNvbm5lY3Rpb25zIGJldHdlZW4gdGhlIG1vZGVt cyBhbmQKLSAgIGNvbXB1dGVycyBhcmUgYWxzbyBlcnJvci1mcmVlLCBwZXJmZWN0bHkgZmxvdy1j b250cm9sbGVkLCBhbmQgZnJlZSBvZgotICAgaW50ZXJydXB0IGNvbmZsaWN0cy4gU3RyZWFtaW5n IGNhbiBiZSB1c2VkIGVmZmVjdGl2ZWx5IGFuZCB0byBmYWlybHkKLSAgIGdvb2QgYWR2YW50YWdl IG9uIHN1Y2ggY29ubmVjdGlvbnMsIGJ1dCByZW1lbWJlciB0aGF0IHRoZSB0cmFuc2ZlciBpcwot ICAgZmF0YWwgaWYgZXZlbiBvbmUgZXJyb3IgaXMgZGV0ZWN0ZWQgKGFsc28gcmVtZW1iZXIgdGhh dCBzaG91bGQgYQotICAgYmluYXJ5LW1vZGUgdHJhbnNmZXIgZmFpbCwgaXQgY2FuIGJlIHJlY292 ZXJlZCBmcm9tIHRoZSBwb2ludCBvZgotICAgZmFpbHVyZSB3aXRoIFJFU0VORCkuCi0KLSAgIFRv IHVzZSBzdHJlYW1pbmcgb24gYW4gdW5yZWxpYWJsZSBjb25uZWN0aW9uLCB5b3UgbXVzdCB0ZWxs IGJvdGgKLSAgIEtlcm1pdHMgdGhhdCB0aGUgY29ubmVjdGlvbiBpcyByZWxpYWJsZToKLQotICBr ZXJtaXQgLUkKLQotICAgb3I6Ci0KLSAgQy1LZXJtaXQ+IHNldCByZWxpYWJsZSBvbgotCi0gICBJ biB0aGlzIGNhc2UsIGl0IHdpbGwgcHJvYmFibHkgYmUgbmVjZXNzYXJ5IHRvIHByZWZpeCBzb21l IGNvbnRyb2wKLSAgIGNoYXJhY3RlcnMsIGZvciBleGFtcGxlIGlmIHlvdXIgY29ubmVjdGlvbiBp cyB0aHJvdWdoIGEgdGVybWluYWwgc2VydmVyCi0gICB0aGF0IGhhcyBhbiBlc2NhcGUgY2hhcmFj dGVyLiBNb3N0IENpc2NvIHRlcm1pbmFsIHNlcnZlcnMsIGZvciBleGFtcGxlLAotICAgcmVxdWly ZSBDdHJsLV4gKDMwLCBhcyB3ZWxsIGFzIGl0cyBoaWdoLWJpdCBlcXVpdmFsZW50LCAxNTgpIHRv IGJlCi0gICBwcmVmaXhlZC4gVG8gdW5wcmVmaXggdGhlc2UsIHlvdSdsbCBuZWVkIHRvIGRlZmVh dCB0aGUgImNsZWFyIGNoYW5uZWwiCi0gICBmZWF0dXJlOgotCi0gIEMtS2VybWl0PiBzZXQgcmVs aWFibGUgb24KLSAgQy1LZXJtaXQ+IHNldCBjbGVhci1jaGFubmVsIG9mZgotICBDLUtlcm1pdD4g c2V0IHByZWZpeGluZyBub25lCi0gIEMtS2VybWl0PiBzZXQgY29udHJvbCBwcmVmaXggMSAxMyAz MCAxNTggOyBhbmQgd2hhdGV2ZXIgZWxzZSBpcyBuZWNlc3NhcnkKLQotICAgRGlhbHVwIHRyaWFs cyB3ZXJlIGRvbmUgdXNpbmcgZml4ZWQgbGFyZ2Ugd2luZG93IGFuZCBwYWNrZXQgc2l6ZXMuIFRo ZXkKLSAgIGNvbXBhcmUgdXBsb2FkaW5nIGFuZCBkb3dubG9hZGluZyBvZiB0d28gY29tbW9uIHR5 cGVzIG9mIGZpbGVzLCB3aXRoCi0gICBhbmQgd2l0aG91dCBzdHJlYW1pbmcuIENvbmZpZ3VyYXRp b246Ci0KLSAgICAgSFAtOTAwMC83MTUvMzMgLS0gNTc2MDBicHMsIFJUUy9DVFMgLS0gVVNSIENv dXJpZXIgVi4zNCAtLQotICAgICBWLjM0K1YuNDIsIDMxMjAwYnBzIC0tIFVTUiBWLjM0KyBSYWNr bW91bnQgLS0gNTc2MDBicHMsIFJUUy9DVFMgLS0KLSAgICAgQ2lzY28gdGVybWluYWwgc2VydmVy IC0tIFNvbGFyaXMgMi41LjEuIFBhY2tldCBzaXplID0gODAwMCwgV2luZG93Ci0gICAgIFNpemUg PSAzMCwgQ29udHJvbCBDaGFyYWN0ZXIgVW5wcmVmaXhpbmcgTWluaW1hbCAoYnV0IGluY2x1ZGlu ZyB0aGUKLSAgICAgQ2lzY28gZXNjYXBlIGNoYXJhY3RlcikuCi0KLSAgIFNpbmNlIHRoaXMgaXMg bm90IGEgdHJ1bHkgcmVsaWFibGUgY29ubmVjdGlvbiwgYSBmZXcgdHJpYWxzIGZhaWxlZCB3aGVu Ci0gICBhIGJhZCBwYWNrZXQgd2FzIHJlY2VpdmVkIChtb3N0IGxpa2VseSBkdWUgdG8gVUFSVCBv dmVycnVucyk7IHRoZQotICAgZmFpbHVyZSB3YXMgZ3JhY2VmdWwgYW5kIGltbWVkaWF0ZSwgYW5k IHRoZSBtZXNzYWdlIHdhcyBpbmZvcm1hdGl2ZS4KLSAgIFRoZSByZXN1bHRzIG9mIHRlbiBzdWNj ZXNzZnVsIHRyaWFscyB1cGxvYWRpbmcgYW5kIGRvd25sb2FkaW5nIHRoZSB0d28KLSAgIGZpbGVz IHdpdGggYW5kIHdpdGhvdXQgc3RyZWFtaW5nIGFyZToKLQotICAgICAgICAgICAgU3RyZWFtaW5n Li4KLSAgICAgICAgICAgIE9mZiAgICBPbgotICAgVXBsb2FkICAgNTE5NCAgIDU1NjUgICB0eHQg KD0gQyBzb3VyY2UgY29kZSwgNzhLKQotICAgICAgICAgICAgMzEzNSAgIDM0MDYgICBneiAgKD0g Z3ppcCBmaWxlLCBjb21wcmVzc2VkLCA4NUspCi0gRG93bmxvYWQgICA1MTk0ICAgNTU2NSAgIHR4 dAotICAgICAgICAgICAgMzA0MSAgIDM0MDYgICBnegotCi0gICBFYWNoIENQUyBmaWd1cmUgaXMg dGhlIG1lYW4gb2YgMTAgcmVzdWx0cy4KLQotICAgQSBicmllZiB0ZXN0IHdhcyBhbHNvIHBlcmZv cm1lZCBvbiBhIExBVC1iYXNlZCBkaWFsb3V0IGNvbm5lY3Rpb24gZnJvbQotICAgYSBWQVggMzEw MCB3aXRoIFZNUyA1LjUgdG8gYSBVU1IgQ291cmllciBWLjM0IGNvbm5lY3RlZCB0byBhIERFQ3Nl cnZlcgotICAgNzAwIGF0IDE5MjAwIGJwcy4gVGhlIDEtTUIgU3BhcmMgZXhlY3V0YWJsZSBkb3du bG9hZGVkIGZyb20gYSBTdW4gdG8KLSAgIHRoZSBWQVggYXQgMTEwMGNwcyB3aXRob3V0IHN0cmVh bWluZyBhbmQgMTkwMGNwcyB3aXRoIHN0cmVhbWluZywgdXNpbmcKLSAgIDgwMDAtYnl0ZSBwYWNr ZXRzLCAzMCB3aW5kb3cgc2xvdHMsIGFuZCBtaW5pbWFsIHByZWZpeGluZyBpbiBib3RoCi0gICBj YXNlcy4KLQotNC4yMC4yLjUuIFN0cmVhbWluZyBvbiBYLjI1IENvbm5lY3Rpb25zCi0KLSAgIFdl IGhhdmUgb25seSBsaW1pdGVkIGFjY2VzcyB0byBYLjI1IG5ldHdvcmtzLiBPbmUgdHJpYWwgd2Fz IHBlcmZvcm1lZAotICAgaW4gd2hpY2ggdGhlIDFNQiBTb2xhcmlzIDIuNCBTcGFyYyBleGVjdXRh YmxlIHdhcyB0cmFuc2ZlcnJlZCBvdmVyIGEKLSAgIFN1bkxpbmsgWC4yNSBjb25uZWN0aW9uOyBu b3RoaW5nIGlzIGtub3duIGFib3V0IHRoZSBhY3R1YWwgcGh5c2ljYWwKLSAgIGNvbm5lY3Rpb24u IFdpdGggYSBwYWNrZXQgbGVuZ3RoIG9mIDgwMDAgYW5kIGEgd2luZG93IHNpemUgb2YgMzAsIHRo ZQotICAgZmlsZSB0cmFuc2ZlcnJlZCBhdCA2NDAwIGNwcyAodXNpbmcgYSBtYXhpbXVtIG9mIDYg d2luZG93IHNsb3RzKS4gV2l0aAotICAgdGhlIHNhbWUgcGFja2V0IGxlbmd0aCwgYnV0IHdpdGgg c3RyZWFtaW5nLCBpdCB0cmFuc2ZlcnJlZCB3aXRob3V0Ci0gICBtaXNoYXAgYXQgNjcxMCBjcHMs IGFib3V0IDUlIGZhc3Rlci4KLQotNC4yMC4zLiBTdHJlYW1pbmcgLSBQcmVsaW1pbmFyeSBDb25j bHVzaW9ucwotCi0gICBUaGUgcmVzdWx0cyB2YXJ5IHdpdGggdGhlIHBhcnRpY3VsYXIgY29ubmVj dGlvbiwgYnV0IGFyZSBnb29kIG92ZXJhbGwuCi0gICBBbHRob3VnaCBudW1lcm91cyBsb3dlci1s ZXZlbCB0cmlja3MgY2FuIGJlIHVzZWQgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZQotICAgb24gc3Bl Y2lmaWMgcGxhdGZvcm1zIG9yIGNvbm5lY3Rpb24gbWV0aG9kcywgc3RyZWFtaW5nIG9jY3VycyBh dCBhCi0gICBoaWdoLCBzeXN0ZW0taW5kZXBlbmRlbnQgbGV2ZWwgb2YgdGhlIEtlcm1pdCBwcm90 b2NvbCBhbmQgdGhlcmVmb3JlIGNhbgotICAgYXBwbHkgdG8gYWxsIHR5cGVzIG9mIHBsYXRmb3Jt cyBhbmQgKHJlbGlhYmxlKSBjb25uZWN0aW9ucwotICAgdHJhbnNwYXJlbnRseS4KLQotNC4yMS4g VGhlIFRSQU5TTUlUIENvbW1hbmQKLQotICAgUHJpb3IgdG8gQy1LZXJtaXQgNy4wLCB0aGUgVFJB TlNNSVQgY29tbWFuZCB0cmFuc21pdHRlZCBpbiB0ZXh0IG9yCi0gICBiaW5hcnkgbW9kZSBhY2Nv cmRpbmcgdG8gU0VUIEZJTEUgVFlQRSB7IFRFWFQsIEJJTkFSWSB9LiBCdXQgbm93IHRoYXQKLSAg IGJpbmFyeSBtb2RlIGlzIGxpa2VseSB0byBiZSB0aGUgZGVmYXVsdCBmb3IgcHJvdG9jb2wgdHJh bnNmZXJzLCBpdCBpcwotICAgZXZpZGVudCB0aGF0IHRoaXMgbm90IGFsc28gYW4gYXBwcm9wcmlh dGUgZGVmYXVsdCBmb3IgVFJBTlNNSVQsIHNpbmNlCi0gICBiaW5hcnktbW9kZSBUUkFOU01JVCBp cyBhIHJhdGhlciBzcGVjaWFsaXplZCBhbmQgdHJpY2t5IG9wZXJhdGlvbi4KLSAgIFRoZXJlZm9y ZSwgVFJBTlNNSVQgZGVmYXVsdHMgdG8gdGV4dCBtb2RlIGFsd2F5cywgcmVnYXJkbGVzcyBvZiB0 aGUKLSAgIEZJTEUgVFlQRSBzZXR0aW5nLgotCi0gICBDLUtlcm1pdCA3LjAgZXhwYW5kcyB0aGUg Y2FwYWJpbGl0aWVzIG9mIHRoZSBUUkFOU01JVCBjb21tYW5kIGJ5IGFkZGluZwotICAgdGhlIGZv bGxvd2luZyBzd2l0Y2hlcyAoc2VlIFs1MzJdU2VjdGlvbiAxLjUpLiBUaGUgbmV3IHN5bnRheCBp czoKLQotICBUUkFOU01JVCBbIHN3aXRjaGVzLi4uIF0gZmlsZW5hbWUKLQotICAgWmVybyBvciBt b3JlIHN3aXRjaGVzIG1heSBiZSBpbmNsdWRlZDoKLQotICAgL1BJUEUKLSAgICAgICAgICBXaGVu IC9QSVBFIGlzIGluY2x1ZGVkLCAiZmlsZW5hbWUiIGlzIGludGVycHJldGVkIGFzIGEgc3lzdGVt Ci0gICAgICAgICAgY29tbWFuZCBvciBwcm9ncmFtIHdob3NlIG91dHB1dCBpcyB0byBiZSBzZW50 LiBTeW5vbnltOgotICAgICAgICAgIC9DT01NQU5ELiBFeGFtcGxlOgotCi0gIHRyYW5zbWl0IC9w aXBlIGZpbmdlcgotCi0gICAgICAgICAgWW91IG1heSBlbmNsb3NlIHRoZSBjb21tYW5kIGluIGJy YWNlcywgYnV0IHlvdSBkb24ndCBoYXZlIHRvOgotCi0gIHhtaXQgL3BpcGUge2xzIC1sIHwgc29y dCAtciArMC4yMiAtMC4zMiB8IGhlYWR9Ci0KLSAgIC9CSU5BUlkKLSAgICAgICAgICBUcmFuc21p dHMgdGhlIGZpbGUgKG9yIHBpcGUgb3V0cHV0KSBpbiBiaW5hcnkgbW9kZS4KLQotICAgL1RFWFQK LSAgICAgICAgICBUcmFuc21pdHMgdGhlIGZpbGUgKG9yIHBpcGUgb3V0cHV0KSBpbiBsaW5lLW9y aWVudGVkIHRleHQgbW9kZS4KLSAgICAgICAgICBDdXJyZW50IEZJTEUgQ0hBUkFDVEVSLVNFVCBh bmQgVEVSTUlOQUwgQ0hBUkFDVEVSLVNFVCBzZWxlY3Rpb25zCi0gICAgICAgICAgZ292ZXJuIHRy YW5zbGF0aW9uLiBEZWZhdWx0LgotCi0gICAvVFJBTlNQQVJFTlQKLSAgICAgICAgICBTcGVjaWZp ZXMgdGV4dCBtb2RlIHdpdGhvdXQgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiwgbm8gbWF0dGVy Ci0gICAgICAgICAgd2hhdCB0aGUgRklMRSBhbmQgVEVSTUlOQUwgQ0hBUkFDVEVSLVNFVCBzZWxl Y3Rpb25zIGFyZS4KLQotICAgL05PV0FJVAotICAgICAgICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0 byBTRVQgVFJBTlNNSVQgUFJPTVBUIDAsIGJ1dCBmb3IgdGhpcwotICAgICAgICAgIFRSQU5TTUlU IGNvbW1hbmQgb25seS4gQXBwbGllcyBvbmx5IHRvIHRleHQgbW9kZTsgaXQgbWVhbnMgdG8KLSAg ICAgICAgICBub3Qgd2FpdCBmb3IgYW55IGtpbmQgb2YgZWNobyBvciB0dXJuYXJvdW5kIGNoYXJh Y3RlciBhZnRlcgotICAgICAgICAgIHNlbmRpbmcgYSBsaW5lIGJlZm9yZSBzZW5kaW5nIHRoZSBu ZXh0IGxpbmUuIChOb3JtYWxseSBLZXJtaXQKLSAgICAgICAgICB3YWl0cyBmb3IgYSBsaW5lZmVl ZC4pCi0KLSAgIFdoZW4gVFJBTlNNSVQgRUNITyBpcyBPTiwgQy1LZXJtaXQgdHJpZXMgdG8gcmVh ZCBiYWNrIHRoZSBlY2hvIG9mIGVhY2gKLSAgIGNoYXJhY3RlciB0aGF0IGlzIHNlbnQuIFByaW9y IHRvIEMtS2VybWl0IDcuMCwgMSBzZWNvbmQgd2FzIGFsbG93ZWQgZm9yCi0gICBlYWNoIGVjaG8g dG8gYXBwZWFyOyBpZiBpdCBkaWRuJ3Qgc2hvdyB1cCBpbiBhIHNlY29uZCwgdGhlIFRSQU5TTUlU Ci0gICBjb21tYW5kIHdvdWxkIGZhaWwuIFNpbWlsYXJseSBmb3IgdGhlIFRSQU5TTUlUIFBST01Q VCBjaGFyYWN0ZXIuCi0gICBIb3dldmVyLCB3aXRoIHRvZGF5J3MgY29uZ2VzdGVkIEludGVybmV0 IGNvbm5lY3Rpb25zLCBldGMsIG1vcmUgdGltZSBpcwotICAgb2Z0ZW4gbmVlZGVkOgotCi0gICBT RVQgVFJBTlNNSVQgVElNRU9VVCBudW1iZXIKLQotICAgU3BlY2lmaWVzIHRoZSBudW1iZXIgb2Yg c2Vjb25kcyB0byB3YWl0IGZvciBhbiBlY2hvIG9yIHRoZSBwcm9tcHQKLSAgIGNoYXJhY3RlciB3 aGVuIFRSQU5TTUlUIFBST01QVCBpcyBub256ZXJvOyB0aGUgZGVmYXVsdCB3YWl0IGlzIDEKLSAg IHNlY29uZC4gSWYgeW91IHNwZWNpZnkgMCwgdGhlIHdhaXQgaXMgaW5kZWZpbml0ZS4gV2hlbiBh IHRpbWVvdXQKLSAgIGludGVydmFsIG9mIDAgaXMgc3BlY2lmaWVkLCBhbmQgYSBkZXNpcmVkIGVj aG8gb3IgcHJvbXB0IGRvZXMgbm90IHNob3cKLSAgIHVwLCB0aGUgVFJBTlNNSVQgY29tbWFuZCB3 aWxsIG5vdCB0ZXJtaW5hdGUgdW50aWwgb3IgdW5sZXNzIHlvdQotICAgaW50ZXJydXB0IGl0IHdp dGggQ3RybC1DOyB1c2UgU0VUIFRSQU5TTUlUIFRJTUVPVVQgMCB3aXRoIGNhdXRpb24uCi0KLSAg IE5vdGU6IHRvIGJsYXN0IGEgZmlsZSBvdXQgdGhlIGNvbW11bmljYXRpb25zIGNvbm5lY3Rpb24g d2l0aG91dCBhbnkKLSAgIGtpbmQgb2Ygc3luY2hyb25pemF0aW9uIG9yIHRpbWVvdXRzIG9yIG90 aGVyIG1hbm5lciBvZiBjaGVja2luZywgdXNlOgotCi0gIFNFVCBUUkFOU01JVCBFQ0hPIE9GRgot ICBTRVQgVFJBTlNNSVQgUFJPTVBUIDAgKG9yIGluY2x1ZGUgdGhlIC9OT1dBSVQgc3dpdGNoKQot ICBTRVQgVFJBTlNNSVQgUEFVU0UgMAotICBUUkFOU01JVCBbIHN3aXRjaGVzIF0gZmlsZW5hbWUK LQotICAgSW4gdGhpcyBjYXNlLCB0ZXh0LWZpbGUgdHJhbnNtaXNzaW9uIGlzIG5vdC1saW5lIG9y aWVudGVkIGFuZCBsYXJnZQotICAgYmxvY2tzIGNhbiBiZSBzZW50LCByZXN1bHRpbmcgaW4gYSBz aWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudAotICAgb3ZlciBsaW5lLWF0LWF0LXRp bWUgdHJhbnNtaXNzaW9uLiBTdWNjZXNzZnVsIG9wZXJhdGlvbiBkZXBlbmRzIChldmVuCi0gICBt b3JlIHRoYW4gdXN1YWwgZm9yIHRoZSBUUkFOU01JVCBjb21tYW5kISkgb24gYSBjbGVhbiBjb25u ZWN0aW9uIHdpdGgKLSAgIGVmZmVjdGl2ZSBmbG93IGNvbnRyb2wuCi0KLSAgIEZvciBkZXRhaWxz IG9uIFRSQU5TTUlUIGFuZCBjaGFyYWN0ZXIgc2V0cywgc2VlIFs1MzNdU2VjdGlvbiA2LjYuNS40 LgotCi0gIDQuMjIuIENvcGluZyB3aXRoIEZhdWx0eSBLZXJtaXQgSW1wbGVtZW50YXRpb25zCi0K LSAgIEtlcm1pdCBwcm90b2NvbCBoYXMgYmVlbiBpbXBsZW1lbnRlZCBpbiBxdWl0ZSBhIGZldyB0 aGlyZC1wYXJ0eQotICAgY29tbWVyY2lhbCwgc2hhcmV3YXJlLCBhbmQgZnJlZXdhcmUgc29mdHdh cmUgcGFja2FnZXMsIHdpdGggdmFyeWluZwotICAgZGVncmVlcyBvZiBzdWNjZXNzLiBJbiBtb3N0 IGNhc2VzIG9wZXJhdGlvbiBpcyBzYXRpc2ZhY3RvcnkgYnV0IHNsb3cgLS0KLSAgIG9ubHkgdGhl IGJhcmUgbWluaW11bSBzdWJzZXQgb2YgdGhlIHByb3RvY29sIGlzIGF2YWlsYWJsZSAtLSBzaG9y dAotICAgcGFja2V0cywgbm8gc2xpZGluZyB3aW5kb3dzLCBubyBhdHRyaWJ1dGVzLCBldGMuIElu IG90aGVyIGNhc2VzLCB0aGUKLSAgIGltcGxlbWVudGF0aW9uIGlzIGluY29ycmVjdCwgcmVzdWx0 aW5nIGluIGZhaWx1cmVzIGF0IHRoZSBpbml0aWFsCi0gICBuZWdvdGlhdGlvbiBzdGFnZSBvciBj b3JydXB0ZWQgZmlsZXMuCi0KLSAgIEMtS2VybWl0IDcuMCBhbmQgS2VybWl0IDk1IDEuMS4xOSBp bmNsdWRlIHNvbWUgbmV3IGRlZmVuc2UgbWVjaGFuaXNtcwotICAgdG8gaGVscCBjb3BlIHdpdGgg dGhlIG1vc3QgY29tbW9uIHNpdHVhdGlvbnMuIEhvd2V2ZXIsIGJlYXIgaW4gbWluZAotICAgdGhl cmUgaXMgb25seSBzbyBtdWNoIHdlIGNhbiBkbyBpbiBzdWNoIGNhc2VzIC0tIHRoZSByZXNwb25z aWJpbGl0eSBmb3IKLSAgIGZpeGluZyB0aGUgcHJvYmxlbSBsaWVzIHdpdGggdGhlIG1ha2VyIG9m IHRoZSBmYXVsdHkgc29mdHdhcmUuCi0KLSAgICA0LjIyLjEuIEZhaWx1cmUgdG8gQWNjZXB0IE1v ZGVybiBOZWdvdGlhdGlvbiBTdHJpbmdzCi0KLSAgIFRoZSBwdWJsaXNoZWQgS2VybWl0IHByb3Rv Y29sIHNwZWNpZmljYXRpb24gc3RhdGVzIHRoYXQgbmV3IGZpZWxkcyBjYW4KLSAgIGJlIGFkZGVk IHRvIHRoZSBwYXJhbWV0ZXIgbmVnb3RpYXRpb24gc3RyaW5nLiBUaGVzZSBhcmUgdG8gYmUgaWdu b3JlZAotICAgYnkgYW55IEtlcm1pdCBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgbm90IHVuZGVy c3RhbmQgdGhlbTsgdGhpcyBpcwotICAgd2hhdCBtYWtlcyB0aGUgS2VybWl0IHByb3RvY29sIGV4 dGVuc2libGUuIFVuZm9ydHVuYXRlbHksIHNvbWUgS2VybWl0Ci0gICBpbXBsZW1lbnRhdGlvbnMg YmVjb21lIGNvbmZ1c2VkIChvciB3b3JzZSkgd2hlbiByZWNlaXZpbmcgYSBuZWdvdGlhdGlvbgot ICAgc3RyaW5nIGxvbmdlciB0aGFuIHRoZSBvbmUgdGhleSBleHBlY3QuIFlvdSBjYW4gdHJ5IHdv cmtpbmcgYXJvdW5kIHN1Y2gKLSAgIHByb2JsZW1zIGJ5IHRlbGxpbmcgS2VybWl0IHRvIHNob3J0 ZW4gaXRzIG5lZ290aWF0aW9uIHN0cmluZyAoYW5kIHRodXMKLSAgIGRpc2FibGUgdGhlIGNvcnJl c3BvbmRpbmcgbmV3IGZlYXR1cmVzKToKLQotICBTRVQgU0VORCBORUdPVElBVElPTi1TVFJJTkct TUFYLUxFTkdUSCBudW1iZXIKLQotICAgVHJ5IGEgbnVtYmVyIGxpa2UgMTAuIElmIHRoYXQgZG9l c24ndCB3b3JrLCB0cnkgOSwgOCwgNywgNiwgYW5kIHNvIG9uLgotCi0gICAgNC4yMi4yLiBGYWls dXJlIHRvIE5lZ290aWF0ZSA4dGgtYml0IFByZWZpeGluZwotCi0gICBUaGUgcHVibGlzaGVkIEtl cm1pdCBwcm90b2NvbCBzcGVjaWZpY2F0aW9uIHN0YXRlcyB0aGF0IDh0aC1iaXQKLSAgIHByZWZp eGluZyAod2hpY2ggYWxsb3dzIHRyYW5zZmVyIG9mIDgtYml0IGRhdGEgb3ZlciBhIDctYml0IGNv bm5lY3Rpb24pCi0gICBvY2N1cnMgaWYgdGhlIGZpbGUgc2VuZGVyIHB1dHMgYSB2YWxpZCBwcmVm aXggY2hhcmFjdGVyIChub3JtYWxseSAiJiIpCi0gICBpbiB0aGUgOHRoLWJpdC1wcmVmaXggZmll bGQgb2YgdGhlIG5lZ290aWF0aW9uIHN0cmluZywgYW5kIHRoZSByZWNlaXZlcgotICAgcHV0cyBl aXRoZXIgYSBsZXR0ZXIgIlkiIG9yIHRoZSBzYW1lIHByZWZpeCBjaGFyYWN0ZXIuIEF0IGxlYXN0 IG9uZQotICAgZmF1bHR5IEtlcm1pdCBpbXBsZW1lbnRhdGlvbiBleGlzdHMgdGhhdCBkb2VzIG5v dCBhY2NlcHQgdGhlIGxldHRlcgotICAgIlkiLiBUbyBmb3JjZSBDLUtlcm1pdCAvIEstOTUgdG8g cmVwbHkgd2l0aCB0aGUgb3RoZXIgS2VybWl0J3MgcHJlZml4Ci0gICBjaGFyYWN0ZXIgcmF0aGVy IHRoYW4gYSAiWSIsIGdpdmUgdGhlIGZvbGxvd2luZyAoaW52aXNpYmxlKSBjb21tYW5kOgotCi0g IFNFVCBROEZMQUcgT04KLQotICAgVXNlIFNFVCBROEZMQUcgT0ZGIHRvIHJlc3RvcmUgdGhlIG5v cm1hbCBiZWhhdmlvci4KLQotICAgIDQuMjIuMy4gQ29ycnVwdCBGaWxlcwotCi0gICBSZWZlciB0 byBbNTM0XVNlY3Rpb24gNC4yMi4yLiBTb21lIEtlcm1pdCBpbXBsZW1lbnRhdGlvbnMgbWlzdGFr ZW5seQotICAgaW50ZXJwcmV0IHRoZSAiWSIgYXMgYSBwcmVmaXggY2hhcmFjdGVyLiBUaGVuLCB3 aGVuZXZlciBhIGxldHRlciBZCi0gICBhcHBlYXJzIGluIHRoZSBkYXRhLCB0aGUgWSBhbmQgdGhl IGNoYXJhY3RlciB0aGF0IGZvbGxvd3MgaXQgYXJlCi0gICByZXBsYWNlZCBieSBhIGdhcmJhZ2Ug Y2hhcmFjdGVyLiBBdCB0aGlzIHdyaXRpbmcsIHdlIGFyZSBub3Qgc3VyZSBpZgotICAgdGhlcmUg aXMgYW55IHNvbHV0aW9uLCBidXQgdHJ5ICJzZXQgc2VuZCBuZWdvdGlhdGlvbi1zdHJpbmctbWF4 LWxlbmd0aAotICAgNiIgYW5kL29yICJzZXQgcThmbGFnIG9uIi4KLQotICAgRmlsZSBjb3JydXB0 aW9uIGNhbiBhbHNvIG9jY3VyIHdoZW4gY29udHJvbCBjaGFyYWN0ZXJzIHdpdGhpbiB0aGUgZmls ZQotICAgZGF0YSBhcmUgc2VudCB3aXRob3V0IHByZWZpeGluZywgYXMgYXQgbGVhc3Qgc29tZSBh cmUgYnkgZGVmYXVsdCBpbgotICAgQy1LZXJtaXQgNy4wIGFuZCBLLTk1LiBTb21lIEtlcm1pdCBp bXBsZW1lbnRhdGlvbnMgZG8gbm90IGhhbmRsZQotICAgaW5jb21pbmcgImJhcmUiIGNvbnRyb2wg Y2hhcmFjdGVycy4gVG8gd29yayBhcm91bmQsICJzZXQgcHJlZml4aW5nCi0gICBhbGwiLgotCi0g ICAgNC4yMi40LiBTcHVyaW91cyBDYW5jZWxsYXRpb25zCi0KLSAgIFRoZSBLZXJtaXQgcHJvdG9j b2wgc3BlY2lmaWNhdGlvbiBzdGF0ZXMgdGhhdCBpZiBhbiBBQ0sgdG8gYSBEYXRhCi0gICBwYWNr ZXQgY29udGFpbnMgWCBpbiBpdHMgZGF0YSBmaWVsZCwgdGhlIHRyYW5zZmVyIG9mIHRoZSBjdXJy ZW50IGZpbGUKLSAgIGlzIGNhbmNlbGVkLCBhbmQgaWYgaXQgY29udGFpbnMgYSBaLCB0aGUgZW50 aXJlIHRyYW5zZmVyIGlzIGNhbmNlbGVkLgotICAgQXQgbGVhc3Qgb25lIG92ZXJ6ZWFsb3VzIEtl cm1pdCBpbXBsZW1lbnRhdGlvbiBhcHBsaWVzIHRoaXMgcnVsZSB0bwotICAgbm9uLURhdGEgcGFj a2V0cyBhcyB3ZWxsLCB0aGUgdHlwaWNhbCBzeW1wdG9tIGJlaW5nIHRoYXQgYW55IGF0dGVtcHQg dG8KLSAgIHRyYW5zZmVyIGEgZmlsZSB3aG9zZSBuYW1lIGJlZ2lucyB3aXRoIFggb3IgWiByZXN1 bHRzIGluIGNhbmNlbGxhdGlvbi4KLSAgIFRoaXMgaXMgYmVjYXVzZSB0aGUgZmlsZSByZWNlaXZl ciB0eXBpY2FsbHkgc2VuZHMgYmFjayB0aGUgbmFtZSB1bmRlcgotICAgd2hpY2ggaXQgc3RvcmVk IHRoZSBmaWxlICh3aGljaCBtaWdodCBub3QgYmUgdGhlIHNhbWUgYXMgdGhlIG5hbWUgaXQKLSAg IHdhcyBzZW50IHdpdGgpIGluIHRoZSBBQ0sgdG8gdGhlIEZpbGUgSGVhZGVyIHBhY2tldC4gVGhp cyBpcwotICAgaW5mb3JtYXRpb24gb25seSBhbmQgc2hvdWxkIG5vdCBjYXVzZSBjYW5jZWxsYXRp b24uIFRvIHdvcmsgYXJvdW5kIHRoZQotICAgcHJvYmxlbSwgdXNlOgotCi0gIFNFVCBGLUFDSy1C VUcgeyBPTiwgT0ZGIH0KLQotICAgT04gdGVsbHMgS2VybWl0IG5vdCB0byBzZW5kIGJhY2sgdGhl IGZpbGVuYW1lIGluIHRoZSBBQ0sgdG8gdGhlIGZpbGUKLSAgIGhlYWRlciBwYWNrZXQgYXMgaXQg bm9ybWFsbHkgd291bGQgZG8gKE9GRiBwdXRzIEtlcm1pdCBiYWNrIHRvIG5vcm1hbAotICAgYWZ0 ZXIgdXNpbmcgT04pLgotCi0gICBBIHZhcmlhdGlvbiBvbiB0aGUgdGhpcyBidWcgb2NjdXJzIGlu IGFuIG9ic2N1cmUgS2VybWl0IHByb2dyYW0gZm9yCi0gICBNVU1QUzogV2hlbiB0aGlzIEtlcm1p dCBwcm9ncmFtIHNlbmRzIGEgZmlsZSBjYWxsZWQgKHNheSkgRk9PLkJBUiwgaXQKLSAgIHJlcXVp cmVzIHRoYXQgdGhlIEFDSyB0byBpdHMgRiBwYWNrZXQgY29udGFpbiBleGFjdGx5IHRoZSBzYW1l IG5hbWUsCi0gICBGT08uQkFSLiBIb3dldmVyLCBDLUtlcm1pdCBsaWtlcyB0byBzZW5kIGJhY2sg dGhlIGZ1bGwgcGF0aG5hbWUsCi0gICBjYXVzaW5nIHRoZSBNVU1QUyBLZXJtaXQgdG8gZmFpbC4g U0VUIEYtQUNLLUJVRyBPTiBkb2Vzbid0IGhlbHAgaGVyZS4KLSAgIFNvIGEgc2VwYXJhdGUgY29t bWFuZCBoYXMgYmVlbiBhZGRlZCB0byBoYW5kbGUgdGhpcyBzaXR1YXRpb246Ci0KLSAgU0VUIEYt QUNLLVBBVEggeyBPTiwgT0ZGIH0KLQotICAgTm9ybWFsbHkgaXQgaXMgT04gKHJlZ2FyZGxlc3Mg b2YgdGhlIFNFVCBTRU5EIFBBVEhOQU1FUyBzZXR0aW5nKS4gVXNlCi0gICBTRVQgRi1BQ0stUEFU SCBPRkYgdG8gaW5zdHJ1Y3QgS2VybWl0IHRvIHNlbmQgYmFjayBvbmx5IHRoZSBmaWxlbmFtZQot ICAgd2l0aG91dCB0aGUgcGF0aCBpbiB0aGUgQUNLIHRvIHRoZSBGIHBhY2tldC4KLQotICAgIDQu MjIuNS4gU3B1cmlvdXMgUmVmdXNhbHMKLQotICAgU29tZSBLZXJtaXQgaW1wbGVtZW50YXRpb25z LCBub3RhYmx5IFBEUC0xMSBLZXJtaXQgMy42MCBhbmQgZWFybGllciwKLSAgIGhhdmUgYnVncyBp biB0aGVpciBoYW5kbGluZyBvZiBBdHRyaWJ1dGUgcGFja2V0cyB0aGF0IGNhbiBjYXVzZQotICAg dW53YXJyYW50ZWQgcmVmdXNhbCBvZiBpbmNvbWluZyBmaWxlcywgZS5nLiBiYXNlZCBvbiBkYXRl IG9yIHNpemUuIFRoaXMKLSAgIGNhbiBiZSB3b3JrZWQgYXJvdW5kIGJ5IHRlbGxpbmcgb25lIG9y IGJvdGggb2YgdGhlIEtlcm1pdCBwYXJ0bmVycyB0bzoKLQotICBTRVQgQVRUUklCVVRFUyBPRkYK LQotICAgIDQuMjIuNi4gRmFpbHVyZXMgZHVyaW5nIHRoZSBEYXRhIFRyYW5zZmVyIFBoYXNlCi0K LSAgIFRoaXMgY2FuIGJlIGNhdXNlZCBieSBjb250cm9sLWNoYXJhY3RlciB1bnByZWZpeGluZyAo WzUzNV1TZWN0aW9uCi0gICA0LjIyLjMgKSwgYW5kIGZpeGVkIGJ5OgotCi0gIFNFVCBQUkVGSVhJ TkcgQUxMCi0KLSAgIEl0IGNhbiBhbHNvIGhhdmUgbnVtZXJvdXMgb3RoZXIgY2F1c2VzLCBleHBs YWluZWQgaW4gQ2hhcHRlciAxMCBvZgotICAgWzUzNl1Vc2luZyBDLUtlcm1pdDogdGhlIGNvbm5l Y3Rpb24gaXMgbm90IDgtYml0IHRyYW5zcGFyZW50IChzbyB1c2UKLSAgICJzZXQgcGFyaXR5IHNw YWNlIiBvciBzb21lc3VjaCksIGluYWRlcXVhdGUgZmxvdyBjb250cm9sLCBldGMuIENvbnN1bHQK LSAgIHRoZSBtYW51YWwuCi0KLSAgICA0LjIyLjcuIEZyYWN0dXJlZCBGaWxlbmFtZXMKLQotICAg QXQgbGVhc3Qgb25lIHdlbGwta25vd24gUEMtYmFzZWQgY29tbXVuaWNhdGlvbnMgcGFja2FnZSBu ZWdvdGlhdGVzIGRhdGEKLSAgIGNvbXByZXNzaW9uLCB3aGljaCAoYWNjb3JkaW5nIHRvIHRoZSBw cm90b2NvbCBzcGVjaWZpY2F0aW9uKSBhcHBsaWVzIHRvCi0gICBib3RoIHRoZSBmaWxlbmFtZSBh bmQgdGhlIGZpbGUgZGF0YSwgYnV0IHRoZW4gZmFpbHMgdG8gZGVjb21wcmVzcyB0aGUKLSAgIGZp bGVuYW1lLiBFeGFtcGxlOiBDLUtlcm1pdCBzZW5kcyBhIGZpbGUgY2FsbGVkIFIwMDAxMDEuREFU ICh3aGVyZQotICAgMDAwMTAxIG1pZ2h0IGJlIG5vbi1ZMkstd2lzZSBZWU1NREQgbm90YXRpb24p LCBhbmQgdGhlIHBhY2thZ2UgaW4KLSAgIHF1ZXN0aW9uIHN0b3JlcyB0aGUgZmlsZXMgYXMgUn4j MDEwMS5EQVQuIFdvcmthcm91bmQ6IFRlbGwgQy1LZXJtaXQgdG8KLSAgIFNFVCBSRVBFQVQgQ09V TlRTIE9GRi4KLQotICAgIDQuMjIuOC4gQmFkIEZpbGUgRGF0ZXMKLQotICAgQXQgbGVhc3Qgb25l IHdlbGwta25vd24gUEMtYmFzZWQgY29tbXVuaWNhdGlvbnMgcGFja2FnZSBuZWdvdGlhdGVzIHRo ZQotICAgcGFzc2luZyBvZiBmaWxlIHRpbWVzdGFtcHMgZnJvbSBzZW5kZXIgdG8gcmVjZWl2ZXIs IGJ1dCB3aGVuIGl0IGlzCi0gICBzZW5kaW5nIGZpbGVzLCBpdCBhbHdheXMgZ2l2ZXMgdGhlbSBh IHRpbWVzdGFtcCBvZiAxIEZlYnJ1YXJ5IDE5NzAuCi0gICBXb3JrYXJvdW5kOiB0ZWxsIEMtS2Vy bWl0IHRvIFNFVCBBVFRSSUJVVEUgREFURSBPRkYuIFlvdSBkb24ndCBnZXQgdGhlCi0gICBmaWxl J3MgcmVhbCBkYXRlLCBidXQgeW91IGFsc28gZG9uJ3QgZ2V0IDEgRmViIDE5NzA7IGluc3RlYWQg dGhlIGZpbGUKLSAgIGdldHMgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZS4KLQotICA0LjIzLiBG aWxlIFRyYW5zZmVyIFJlY292ZXJ5Ci0KLSAgIFByaW9yIHRvIEMtS2VybWl0IDcuMCwgUkVTRU5E IChTRU5EIC9SRUNPVkVSKSBhbmQgUkVHRVQgKEdFVCAvUkVDT1ZFUikKLSAgIHJlZnVzZWQgdG8g d29yayBpZiBGSUxFIFRZUEUgd2FzIG5vdCBCSU5BUlkgb3IgdGhlIC9CSU5BUlkgc3dpdGNoIHdh cwotICAgbm90IGluY2x1ZGVkLiBOb3cgdGhlc2UgY29tbWFuZHMgaW5jbHVkZSBhbiBpbXBsaWVk IC9CSU5BUlkgc3dpdGNoLAotICAgbWVhbmluZyB0aGV5IHNldCB0aGUgZmlsZSB0eXBlIHRvIGJp bmFyeSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZQotICAgY29tbWFuZCBhdXRvbWF0aWNhbGx5Lgot Ci0gICBJbiB0aGUgY2xpZW50L3NlcnZlciBhcnJhbmdlbWVudCwgdGhpcyBhbHNvIGZvcmNlcyB0 aGUgc2VydmVyIGludG8KLSAgIGJpbmFyeSBtb2RlIChpZiBpdCBpcyBDLUtlcm1pdCA3LjAgb3Ig Z3JlYXRlciwgb3IgSzk1IDEuMS4xOSBvcgotICAgZ3JlYXRlcikgc28gdGhlIHJlY292ZXJ5IG9w ZXJhdGlvbiBwcm9jZWVkcywganVzdCBhcyB5b3UgYXNrZWQgYW5kCi0gICBleHBlY3RlZC4KLQot ICAgQlVULi4uIEp1c3QgYXMgYmVmb3JlLCB0aGUgcmVzdWx0cyBhcmUgY29ycmVjdCBvbmx5IHVu ZGVyIHRoZSBmb2xsb3dpbmcKLSAgIGNvbmRpdGlvbnM6Ci0KLSAgICAgKiBJZiB0aGUgcHJpb3Ig aW50ZXJydXB0ZWQgdHJhbnNmZXIgd2FzIGFsc28gaW4gYmluYXJ5IG1vZGU7IG9yOgotICAgICAq IElmIHRoZSBwcmlvciB0cmFuc2ZlciB3YXMgaW4gdGV4dCBtb2RlIGFuZCB0aGUgb3RoZXIgY29t cHV0ZXIgd2FzIGEKLSAgICAgICAibGlrZSBwbGF0Zm9ybSIgKGUuZy4gVU5JWC10by1VTklYLCBX aW5kb3dzLXRvLVdpbmRvd3MsCi0gICAgICAgRE9TLXRvLVdpbmRvd3MpIEFORCB0aGVyZSB3YXMg bm8gY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiAoaS5lLgotICAgICAgIFRSQU5TRkVSIENIQVJB Q1RFUi1TRVQgd2FzIFRSQU5TUEFSRU5UKS4KLQotICAgTm90ZSB0aGF0IHRoZXNlIGNpcmN1bXN0 YW5jZXMgYXJlIG1vcmUgbGlrZWx5IHRvIG9idGFpbiBpbiBDLUtlcm1pdAotICAgNy4wLCBpbiB3 aGljaDoKLQotICAgICAqIFRoZSBkZWZhdWx0IEZJTEUgVFlQRSBpbiBDLUtlcm1pdCA3LjAgaXMg QklOQVJZLgotICAgICAqIFRoZSBkZWZhdWx0IEZJTEUgSU5DT01QTEVURSBzZXR0aW5nIGlzIEFV VE8sIHdoaWNoIG1lYW5zIEtFRVAgaWYKLSAgICAgICB0aGUgdHJhbnNmZXIgaXMgaW4gYmluYXJ5 IG1vZGUsIERJU0NBUkQgb3RoZXJ3aXNlLgotICAgICAqIEMtS2VybWl0IDcuMCwgS2VybWl0IDk1 IDEuMS4xNywgYW5kIE1TLURPUyBLZXJtaXQgMy4xNSBhbmQgbGF0ZXIKLSAgICAgICBjYW4gcmVj b2duaXplICJsaWtlIHBsYXRmb3JtcyIgYW5kIHN3aXRjaCBpbnRvIGJpbmFyeSBtb2RlCi0gICAg ICAgYXV0b21hdGljYWxseS4gVHJhbnNmZXJzIGJldHdlZW4gbGlrZSBwbGF0Zm9ybXMgYXJlIGFs d2F5cyBiaW5hcnkKLSAgICAgICB1bmxlc3MgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiBoYXMg YmVlbiByZXF1ZXN0ZWQsIGFuZCB0aGVuIGlzCi0gICAgICAgc3RpbGwgYmluYXJ5IGZvciBhbGwg ZmlsZXMgd2hvc2UgbmFtZXMgbWF0Y2ggYSBiaW5hcnkgcGF0dGVybiwKLSAgICAgICB1bmxlc3Mg dGhlIGF1dG9tYXRpYyBtZWNoYW5pc21zIGhhdmUgYmVlbiBkaXNhYmxlZCAod2l0aCBhIC9URVhU Ci0gICAgICAgc3dpdGNoLCBvciB3aXRoIFNFVCBUUkFOU0ZFUiBNT0RFIE1BTlVBTCkuCi0gICAg ICogU0VORCAvQklOQVJZIGFuZCBHRVQgL0JJTkFSWSBhbHdheXMgZm9yY2UgYmluYXJ5LW1vZGUg dHJhbnNmZXJzLAotICAgICAgIGV2ZW4gd2hlbiBGSUxFIFRZUEUgaXMgVEVYVCwgZXZlbiB3aGVu IFRSQU5TRkVSIE1PREUgaXMgQVVUT01BVElDLAotICAgICAgIGV2ZW4gd2hlbiBQQVRURVJOUyBh cmUgT04gYW5kIHRoZSBmaWxlJ3MgbmFtZSBtYXRjaGVzIGEgdGV4dAotICAgICAgIHBhdHRlcm4u Ci0KLSAgIEJ1dCBhbHNvIG5vdGUgdGhhdCB0aGUgYXV0b21hdGljIGNsaWVudC9zZXJ2ZXIgdHJh bnNmZXItbW9kZQotICAgYWRqdXN0bWVudHMgZG8gbm90IHdvcmsgd2l0aCB2ZXJzaW9ucyBvZiBD LUtlcm1pdCBwcmlvciB0byA3LjAgb3IgSzk1Ci0gICBwcmlvciB0byAxLjEuMTYuCi0KLSAgIElm IHRoZSBwcmlvciB0cmFuc2ZlciB3YXMgaW4gdGV4dCBtb2RlOgotCi0gICAgICogSWYgdGV4dC1t b2RlIHRyYW5zZmVycyBiZXR3ZWVuIHRoZSB0d28gcGxhdGZvcm1zIGFyZQotICAgICAgICJsZW5n dGgtY2hhbmdpbmciIChhcyB0aGV5IGFyZSBiZXR3ZWVuIFVOSVggLS0gd2hpY2ggdGVybWluYXRl cwotICAgICAgIHRleHQgbGluZXMgd2l0aCBMRiAtLSBhbmQgRE9TIG9yIFdpbmRvd3MgLS0gd2hp Y2ggdGVybWluYXRlcyB0ZXh0Ci0gICAgICAgbGluZXMgd2l0aCBDUkxGKSwgdGhlIHJlY292ZXJl ZCBmaWxlIHdpbGwgYmUgY29ycnVwdC4KLSAgICAgKiBJZiB0ZXh0LW1vZGUgdHJhbnNmZXJzIGJl dHdlZW4gdGhlIHR3byBwbGF0Zm9ybXMgYXJlIG5vdAotICAgICAgIGxlbmd0aC1jaGFuZ2luZywg YnV0IGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24gd2FzIGFjdGl2ZSBpbiB0aGUKLSAgICAgICBw cmlvciB0cmFuc2ZlciwgdGhlIHJlc3VsdCB3aWxsIGJlIGEgZmlsZSBpbiB3aGljaCB0aGUgZmly c3QgcGFydAotICAgICAgIGhhcyB0cmFuc2xhdGVkIGNoYXJhY3RlcnMgYW5kIHRoZSBzZWNvbmQg cGFydCBkb2VzIG5vdC4KLQotICAgQnV0IGluIEMtS2VybWl0IDcuMCBhbmQgSzk1IDEuMS4xOSBh bmQgbGF0ZXIsIGluY29tcGxldGVseSB0cmFuc2ZlcnJlZAotICAgdGV4dCBmaWxlcyBhcmUgbm90 IGtlcHQgdW5sZXNzIHlvdSBjaGFuZ2UgdGhlIGRlZmF1bHQuIEJ1dCBpZiB5b3UgaGF2ZQotICAg ZG9uZSB0aGlzLCBhbmQgeW91IGhhdmUgYW4gaW5jb21wbGV0ZWx5IHRyYW5zZmVycmVkIHRleHQg ZmlsZSwgeW91J2xsCi0gICBuZWVkIHRvOgotCi0gICAgICogVHJhbnNmZXIgdGhlIHdob2xlIGZp bGUgYWdhaW4gaW4gdGV4dCBtb2RlLCBvcjoKLSAgICAgKiBVc2UgU0VORCAvU1RBUlRJTkctQVQ6 IHRvIHJlY292ZXIgdGhlIHRyYW5zZmVyIGF0IHRoZSBjb3JyZWN0Ci0gICAgICAgcG9pbnQ7IGJ1 dCB5b3UgaGF2ZSB0byBmaW5kIG91dCB3aGF0IHRoYXQgcG9pbnQgaXMsIGFzIGRlc2NyaWJlZCBp bgotICAgICAgIHRoZSBtYW51YWwuCi0KLSAgIEtlcm1pdCBoYXMgbm8gd2F5IG9mIGtub3dpbmcg d2hldGhlciB0aGUgcHJldmlvdXMgdHJhbnNmZXIgd2FzIGluIHRleHQKLSAgIG9yIGJpbmFyeSBt b2RlIHNvIGl0IGlzIHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gY2hvb3NlIHRoZSBhcHByb3ByaWF0 ZQotICAgcmVjb3ZlcnkgbWV0aG9kLgotCi0gICBJZiB5b3UgdXNlIEMtS2VybWl0IHRvIG1haW50 YWluIHBhcmFsbGVsIGRpcmVjdG9yaWVzIG9uIGRpZmZlcmVudAotICAgY29tcHV0ZXJzLCB1c2lu ZyBTRVQgRklMRSBDT0xMSVNJT04gdG8gdHJhbnNmZXIgb25seSB0aG9zZSBmaWxlcyB0aGF0Ci0g ICBjaGFuZ2VkIHNpbmNlIGxhc3QgdGltZSwgYW5kIHRoZSBmaWxlcyBhcmUgYmlnIGVub3VnaCAo b3IgdGhlCi0gICBjb25uZWN0aW9uIHNsb3cgZW5vdWdoKSB0byByZXF1aXJlIFNFTkQgL1JFQ09W RVIgdG8gcmVzdW1lIGludGVycnVwdGVkCi0gICB0cmFuc2ZlcnMsIHlvdSBzaG91bGQgcmVtZW1i ZXIgdGhhdCBTRU5EIC9SRUNPVkVSIChSRVNFTkQpIG92ZXJyaWRlcwotICAgYWxsIEZJTEUgQ09M TElTSU9OIHNldHRpbmdzLiBUaGVyZWZvcmUgeW91IHNob3VsZCB1c2UgU0VORCAvUkVDT1ZFUgot ICAgKFJFU0VORCkgb25seSBvbiB0aGUgZmlsZSB0aGF0IHdhcyBpbnRlcnJ1cHRlZCwgbm90IHRo ZSBmaWxlIGdyb3VwLiBGb3IKLSAgIGV4YW1wbGUsIGlmIHRoZSBvcmlnaW5hbCB0cmFuc2ZlciB3 YXMgaW5pdGlhdGVkIHdpdGg6Ci0KLSAgU0VORCAqCi0KLSAgIGFuZCB3YXMgaW50ZXJydXB0ZWQs IHRoZW4gYWZ0ZXIgcmVlc3RhYmxpc2hpbmcgeW91ciBjb25uZWN0aW9uIGFuZAotICAgc3RhcnRp bmcgdGhlIEtlcm1pdCByZWNlaXZlciB3aXRoIFNFVCBGSUxFIENPTExJU0lPTiBVUERBVEUgb24g dGhlCi0gICByZW1vdGUgZW5kLCB1c2UgdGhlIGZvbGxvd2luZyBzZXF1ZW5jZSBhdCB0aGUgc2Vu ZGVyIHRvIHJlc3VtZSB0aGUKLSAgIHRyYW5zZmVyOgotCi0gIFNFTkQgL1JFQ09WRVIgbmFtZS1v Zi1pbnRlcnJ1cHRlZC1maWxlCi0KLSAgIGFuZCB0aGVuOgotCi0gIFNFTkQgKgotCi0gICAoSW4g Qy1LZXJtaXQgNy4wIGFuZCBsYXRlciwgXHYoZmlsZW5hbWUpIGNvbnRhaW5zIHRoZSBuYW1lIG9m IHRoZSBmaWxlCi0gICBtb3N0IHJlY2VudGx5IHRyYW5zZmVycmVkLCBhcyBsb25nIHlvdSBoYXZl IG5vdCBFWElUZWQgZnJvbSBLZXJtaXQgb3IKLSAgIGNoYW5nZWQgZGlyZWN0b3J5LCBldGMuCi0K LSAgNC4yNC4gRklMRSBDT0xMSVNJT04gVVBEQVRFIENsYXJpZmljYXRpb24KLQotICAgSW4gVU5J WCwgZmlsZSBtb2RpZmljYXRpb24gZGF0ZXMgYXJlIHVzZWQgd2hlbiBjb21wYXJpbmcgdGhlIGZp bGUgZGF0ZQotICAgd2l0aCB0aGUgZGF0ZSBpbiB0aGUgYXR0cmlidXRlIHBhY2tldC4gSW4gVk1T LCBob3dldmVyLCB0aGUgZmlsZQotICAgY3JlYXRpb24gZGF0ZSBpcyB1c2VkLiBUaGVzZSB0d28g cG9saWNpZXMgcmVmbGVjdCB0aGUgcHJlZmVyZW5jZXMgb2YKLSAgIHRoZSB0d28gdXNlciBjb21t dW5pdGllcy4KLQotICAgQWxzbywgcmVtZW1iZXIgdGhhdCB0aGUgZmlsZSBkYXRlL3RpbWUgZ2l2 ZW4gaW4gdGhlIGF0dHJpYnV0ZSBwYWNrZXQgaXMKLSAgIHRoZSBsb2NhbCB0aW1lIGF0IHRoZSBm aWxlIHNlbmRlci4gQXQgcHJlc2VudCwgbm8gdGltZXpvbmUgY29udmVyc2lvbnMKLSAgIGFyZSBk ZWZpbmVkIGluIG9yIHBlcmZvcm1lZCBieSB0aGUgS2VybWl0IHByb3RvY29sLiBUaGlzIGlzIHBy aW1hcmlseQotICAgYmVjYXVzZSB0aGlzIGZlYXR1cmUgd2FzIGRlc2lnbmVkIGF0IGEgdGltZSB3 aGVuIG1hbnkgb2YgdGhlIHN5c3RlbXMKLSAgIHdoZXJlIEtlcm1pdCBydW5zIGhhZCBubyBjb25j ZXB0IG9mIHRpbWV6b25lLCBhbmQgdGhlcmVmb3JlIHdvdWxkIGJlCi0gICB1bmFibGUgdG8gY29u dmVydCAoc2F5LCB0by9mcm9tIEdNVCBvciBVVEMgb3IgWnVsdSB0aW1lKS4KLQotICAgQXMgYSBj b25zZXF1ZW5jZSwgc29tZSB1bmV4cGVjdGVkIHJlc3VsdHMgbWlnaHQgb2NjdXIgd2hlbiB0cmFu c2ZlcnJpbmcKLSAgIGZpbGVzIGFjcm9zcyB0aW1lem9uZXM7IGUuZy4gY29tbWFuZHMgb24gdGhl IHRhcmdldCBzeXN0ZW0gdGhhdCBhcmUKLSAgIHNlbnNpdGl2ZSB0byBmaWxlIGRhdGVzIG1pZ2h0 IG5vdCB3b3JrIChVTklYICJtYWtlIiwgYmFja3VwcywgZXRjKS4KLQotICAgVGltZXpvbmUgaGFu ZGxpbmcgaXMgZGVmZXJyZWQgZm9yIGEgZnV0dXJlIHJlbGVhc2UuCi0KLSAgNC4yNS4gQXV0b2Rv d25sb2FkIEltcHJvdmVtZW50cwotCi0gICBSZWZlciB0byBwYWdlcyAxNjQtMTY1IG9mIFs1Mzdd VXNpbmcgQy1LZXJtaXQgYWJvdXQgdGhlIGhhemFyZHMgb2YKLSAgIGF1dG9kb3dubG9hZCB3aGVu IEMtS2VybWl0IGlzICJpbiB0aGUgbWlkZGxlIi4gQXMgb2YgQy1LZXJtaXQgNy4wLCBubwotICAg bW9yZSBoYXphcmRzLiBJZiBDLUtlcm1pdCBoYXMgVEVSTUlOQUwgQVVUT0RPV05MT0FEIE9OIGFu ZCBpdCBkZXRlY3RzIGEKLSAgIHBhY2tldCBvZiB0aGUgY3VycmVudCBwcm90b2NvbCB0eXBlIChL ZXJtaXQgb3IgWm1vZGVtKSwgaXQgImVyYXNlcyIgdGhlCi0gICB2aXN1YWwgYXNwZWN0IG9mIHRo ZSBwYWNrZXQgdGhhdCB3b3VsZCBiZSBzZWVuIGJ5IHRoZSB0ZXJtaW5hbCAob3IsCi0gICBtb3Jl IHRvIHRoZSBwb2ludCwgdGhlIGVtdWxhdG9yLCBzdWNoIGFzIEs5NSkuIFRoaXMgd2F5LCBvbmx5 IEMtS2VybWl0Ci0gICBnb2VzIGludG8gUkVDRUlWRSBtb2RlLCBhbmQgbm90IGFsc28gdGhlIHRl cm1pbmFsIGVtdWxhdG9yIHRocm91Z2gKLSAgIHdoaWNoIEMtS2VybWl0IGlzIGFjY2Vzc2VkLiBB bmQgdGhlcmVmb3JlLCBpdCBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvCi0gICBTRVQgVEVSTUlO QUwgQVVUT0RPV05MT0FEIE9GRiB0byBwcmV2ZW50IG11bHRpcGxlIEtlcm1pdHMgZnJvbSBnb2lu ZwotICAgaW50byByZWNlaXZlIG1vZGUgYXQgb25jZSwgYnV0IG9mIGNvdXJzZSBpdCBpcyBzdGls bCBuZWNlc3NhcnkgdG8KLSAgIGVuc3VyZSB0aGF0LCB3aGVuIHlvdSBoYXZlIG11bHRpcGxlIEtl cm1pdHMgaW4gYSBjaGFpbiwgdGhhdCB0aGUKLSAgIGRlc2lyZWQgb25lIHJlY2VpdmVzIHRoZSBh dXRvZG93bmxvYWQuCi0KLSAgIFRoZSBkZWZhdWx0cyBoYXZlIG5vdCBiZWVuIGNoYW5nZWQ7IEtl cm1pdCA5NSBzdGlsbCBoYXMgYXV0b2Rvd25sb2FkIE9OCi0gICBieSBkZWZhdWx0LCBhbmQgQy1L ZXJtaXQgaGFzIGl0IE9GRiBieSBkZWZhdWx0LgotCi0gIDUuIENMSUVOVC9TRVJWRVIKLQotICA1 LjAuIEhpbnRzCi0KLSAgIElmIHlvdSB1c2UgU0VUIFNFUlZFUiBHRVQtUEFUSCB0byBzZXQgdXAg eW91ciBzZXJ2ZXIsIGFuZCB0aGUgR0VULVBBVEgKLSAgIGRvZXMgbm90IGluY2x1ZGUgdGhlIHNl cnZlcidzIGN1cnJlbnQgZGlyZWN0b3J5LCBjbGllbnRzIGNhbiBiZWNvbWUKLSAgIHF1aXRlIGNv bmZ1c2VkLiBGb3IgZXhhbXBsZSwgInJlbW90ZSBkaXIgb29mYS50eHQiIHNob3dzIGEgZmlsZSBu YW1lZAotICAgb29mYS50eHQsIGJ1dCAiZ2V0IG9vZmEudHh0IiBmYWlscy4gSW4gdGhpcyBzaXR1 YXRpb24sIHlvdSBzaG91bGQKLSAgIGVpdGhlciBESVNBQkxFIERJUiBvciBtYWtlIHlvdXIgR0VU LVBBVEggaW5jbHVkZSB0aGUgY3VycmVudCBkaXJlY3RvcnkuCi0KLSAgNS4xLiBOZXcgQ29tbWFu ZC1MaW5lIE9wdGlvbnMKLQotICAgVGhlIC1HIGNvbW1hbmQtbGluZSBvcHRpb24gaXMgbGlrZSAt ZyAoR0VUKSwgZXhjZXB0IHRoZSBpbmNvbWluZyBmaWxlCi0gICBpcyBzZW50IHRvIHN0YW5kYXJk IG91dHB1dCByYXRoZXIgdGhhbiB3cml0dGVuIHRvIGRpc2suCi0KLSAgIFRoZSAtSSBvcHRpb24g KCJJbnRlcm5ldCIpIGlzIHVzZWQgdG8gdGVsbCBhIHJlbW90ZSBDLUtlcm1pdCBwcm9ncmFtCi0g ICB0aGF0IHlvdSBhcmUgY29taW5nIGluIHZpYSBJbnRlcm5ldCBUZWxuZXQgb3IgUmxvZ2luIGFu ZCB0aGVyZWZvcmUgaGF2ZQotICAgYSByZWxpYWJsZSBjb25uZWN0aW9uLiBUaGUgLUkgb3B0aW9u IGlzIGVxdWl2YWxlbnQgdG8gU0VUIFJFTElBQkxFIE9OCi0gICBhbmQgU0VUIEZMT1cgTk9ORS4K LQotICAgVGhlIC1PIG9wdGlvbiAoIk9ubHkgT25lIikgdGVsbHMgQy1LZXJtaXQgdG8gZW50ZXIg c2VydmVyIG1vZGUgYnV0IHRoZW4KLSAgIGV4aXQgYWZ0ZXIgdGhlIGZpcnN0IGNsaWVudCBvcGVy YXRpb24uCi0KLSAgIFNlZSBbNTM4XVNlY3Rpb24gOS4zIGZvciBkZXRhaWxzLgotCi0gIDUuMi4g TmV3IENsaWVudCBDb21tYW5kcwotCi0gICBCWUUgYW5kIEZJTklTSCBubyBsb25nZXIgdHJ5IHRv IGRvIGFueXRoaW5nIGlmIGEgY29ubmVjdGlvbiBpcyBub3QKLSAgIGFjdGl2ZS4gVGh1cyBhIHNl cXVlbmNlIGxpa2UgImhhbmd1cCIgZm9sbG93ZWQgYnkgImJ5ZSIgb3IgImZpbmlzaCIKLSAgIHdp bGwgbm8gbG9uZ2VyIGdldCBzdHVjayBpbiBhIGxvbmcgdGltZW91dC1hbmQtcmV0cmFuc21pc3Np b24gY3ljbGUsCi0gICBub3Igd2lsbCBpdCB0cnkgdG8gb3BlbiBhIG5ldyBjb25uZWN0aW9uLgot Ci0gICBSRU1PVEUgRVhJVAotICAgICAgICAgIFNpbWlsYXIgdG8gRklOSVNILCBleGNlcHQgaXQg ZW5zdXJlcyB0aGF0IHRoZSBLZXJtaXQgc2VydmVyCi0gICAgICAgICAgcHJvZ3JhbSBleGl0cyBi YWNrIHRvIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9yIHNoZWxsIHByb21wdC4KLSAgICAgICAgICAo RklOSVNIIHdvdWxkIHJldHVybiBpdCB0byBpdHMgaW50ZXJhY3RpdmUgcHJvbXB0IGlmIGl0IHdh cwotICAgICAgICAgIHN0YXJ0ZWQgaW4gaW50ZXJhY3RpdmUgbW9kZSwgYW5kIHdvdWxkIGNhdXNl IGl0IHRvIGV4aXQgaWYgaXQKLSAgICAgICAgICBlbnRlcmVkIHNlcnZlciBtb2RlIHZpYSBjb21t YW5kLWxpbmUgb3B0aW9uLikgV2hlbiBDLUtlcm1pdCBpcwotICAgICAgICAgIHRvIGJlIHRoZSBz ZXJ2ZXIsIHlvdSBjYW4gdXNlIHsgRU5BQkxFLCBESVNBQkxFIH0gRVhJVCB0bwotICAgICAgICAg IGNvbnRyb2wgdGhlIGNsaWVudCdzIGFjY2VzcyB0byB0aGlzIGZlYXR1cmUuCi0KLSAgIFJFTU9U RSBNS0RJUiBkaXJlY3RvcnktbmFtZQotICAgICAgICAgIFRlbGxzIHRoZSBjbGllbnQgdG8gYXNr IHRoZSBzZXJ2ZXIgdG8gY3JlYXRlIGEgZGlyZWN0b3J5IHdpdGgKLSAgICAgICAgICB0aGUgZ2l2 ZW4gbmFtZSwgd2hpY2ggY2FuIGJlIGFic29sdXRlIG9yIHJlbGF0aXZlLiBUaGUgc3ludGF4IG9m Ci0gICAgICAgICAgdGhlIGRpcmVjdG9yeSBuYW1lIGRlcGVuZHMgb24gdGhlIEtlcm1pdCBzZXJ2 ZXIgKHNlZSBbNTM5XW5leHQKLSAgICAgICAgICBzZWN0aW9uKTsgaW4gYWxsIGNhc2VzLCBpdCBj YW4gYmUgaW4gdGhlIHN5bnRheCBvZiB0aGUgc3lzdGVtCi0gICAgICAgICAgd2hlcmUgdGhlIHNl cnZlciBpcyBydW5uaW5nIChVTklYLCBWTVMsIERPUywgZXRjKSBidXQgbmV3ZXIKLSAgICAgICAg ICBzZXJ2ZXJzIGFsc28gYWNjZXB0IFVOSVggc3ludGF4LCBubyBtYXR0ZXIgd2hhdCB0aGUgdW5k ZXJseWluZwotICAgICAgICAgIHBsYXRmb3JtLiBUaGUgc2VydmVyIHdpbGwgbm90IGV4ZWN1dGUg dGhpcyBjb21tYW5kIGlmIChhKSBpdAotICAgICAgICAgIGRvZXMgbm90IHVuZGVyc3RhbmQgaXQs IChiKSBhIERJU0FCTEUgTUtESVIgY29tbWFuZCBoYXMgYmVlbgotICAgICAgICAgIGdpdmVuLCBv ciAoYykgYSBESVNBQkxFIENXRCBjb21tYW5kIGhhcyBiZWVuIGdpdmVuOyBvdGhlcndpc2UsCi0g ICAgICAgICAgdGhlIGNvbW1hbmQgaXMgZXhlY3V0ZWQsIGJ1dCB3aWxsIGZhaWwgaWYgdGhlIGRp cmVjdG9yeSBjYW4gbm90Ci0gICAgICAgICAgYmUgY3JlYXRlZCwgaW4gd2hpY2ggY2FzZXMgbW9z dCBzZXJ2ZXJzIHdpbGwgYXR0ZW1wdCB0byByZXR1cm4gYQotICAgICAgICAgIG1lc3NhZ2UgZ2l2 aW5nIHRoZSByZWFzb24gZm9yIGZhaWx1cmUuIFRoZSBSRU1PVEUgTUtESVIgY29tbWFuZAotICAg ICAgICAgIHN1Y2NlZWRzIGlmIHRoZSByZW1vdGUgZGlyZWN0b3J5IGlzIGNyZWF0ZWQsIG9yIGlm IGl0IGFscmVhZHkKLSAgICAgICAgICBleGlzdHMgYW5kIHRoZXJlZm9yZSBkb2VzIG5vdCBuZWVk IHRvIGJlIGNyZWF0ZWQsIGFuZCBmYWlscwotICAgICAgICAgIG90aGVyd2lzZS4KLQotICAgUkVN T1RFIFJNRElSIGRpcmVjdG9yeS1uYW1lCi0gICAgICAgICAgVGVsbHMgdGhlIGNsaWVudCB0byBh c2sgdGhlIHNlcnZlciB0byByZW1vdmUgKGRlbGV0ZSkgYQotICAgICAgICAgIGRpcmVjdG9yeSB3 aXRoIHRoZSBnaXZlbiBuYW1lLiBUaGUgc2FtZSBjb25zaWRlcmF0aW9ucyBhcHBseSBhcwotICAg ICAgICAgIGZvciBSRU1PVEUgTUtESVIuCi0KLSAgIFJFTU9URSBTRVQgRklMRSBJTkNPTVBMRVRF IHsgRElTQ0FSRCwgS0VFUCwgQVVUTyB9Ci0gICAgICAgICAgUHJldmlvdXNseSB0aGlzIHdhcyBv bmx5IGF2YWlsYWJsZSBpbiBpdHMgZWFybGllciBmb3JtLCBSRU1PVEUKLSAgICAgICAgICBTRVQg SU5DT01QTEVURSAobm8gRklMRSkuIFRoZSBlYXJsaWVyIGZvcm0gaXMgc3RpbGwgYXZhaWxhYmxl LAotICAgICAgICAgIGJ1dCBpbnZpc2libGUuIEFsc28sIEFVVE8gd2FzIGFkZGVkLCBtZWFuaW5n IEtFRVAgaWYgaW4gYmluYXJ5Ci0gICAgICAgICAgbW9kZSwgRElTQ0FSRCBvdGhlcndpc2UuCi0K LSAgIFJFTU9URSBTRVQgVFJBTlNGRVIgTU9ERSB7IEFVVE9NQVRJQywgTUFOVUFMIH0KLSAgICAg ICAgICBUZWxscyB0aGUgY2xpZW50IHRvIGFzayB0aGUgc2VydmVyIHRvIHNldCB0aGUgZ2l2ZW4K LSAgICAgICAgICBmaWxlLXRyYW5zZmVyIG1vZGUuIEF1dG9tYXRpYyBtZWFucyAocm91Z2hseSk6 IGlmIHRoZSBjbGllbnQgYW5kCi0gICAgICAgICAgdGhlIHNlcnZlciBhcmUgcnVubmluZyBvbiB0 aGUgc2FtZSBraW5kIG9mIGNvbXB1dGVyIChlLmcuIGJvdGgKLSAgICAgICAgICBhcmUgb24gVU5J WCksIHRoZW4gdXNlIGJpbmFyeSBtb2RlIGF1dG9tYXRpY2FsbHk7IGlmIHRoZSBzeXN0ZW0KLSAg ICAgICAgICB0eXBlcyBhcmUgZGlmZmVyZW50LCB1c2Ugc29tZSBvdGhlciBtZXRob2QgdG8gYXV0 b21hdGljYWxseQotICAgICAgICAgIGRldGVybWluZSB0ZXh0IG9yIGJpbmFyeSBtb2RlLCBzdWNo IGFzIGZpbGVuYW1lIHBhdHRlcm4KLSAgICAgICAgICBtYXRjaGluZy4gTUFOVUFMIG1lYW5zLCBp biB0aGlzIGNvbnRleHQsIG9iZXkgdGhlIGNsaWVudCdzIEZJTEUKLSAgICAgICAgICBUWVBFIHNl dHRpbmcgKFRFWFQgb3IgQklOQVJZKS4gU3lub255bTogUkVNT1RFIFNFVCBYRkVSIE1PREUuCi0K LSAgIFsgUkVNT1RFIF0gUVVFUlkgS0VSTUlUIGZ1bmN0aW9uKGFyZ3MuLi4pCi0gICAgICAgICAg UHJpb3IgdG8gQy1LZXJtaXQgNy4wLCB0aGUgYXJndW1lbnRzIHdlcmUgbm90IGV2YWx1YXRlZCBs b2NhbGx5LgotICAgICAgICAgIFRodXMgaXQgd2FzIG5vdCBwb3NzaWJsZSB0byBoYXZlIHRoZSBz ZXJ2ZXIgcnVuIHRoZSBmdW5jdGlvbgotICAgICAgICAgIHdpdGggY2xpZW50LXNpZGUgdmFyaWFi bGVzIGFzIGFyZ3VtZW50cy4gTm93OgotCi0gIGRlZmluZSBcJWEgb29mYS4qCi0gIHJlbW90ZSBx dWVyeSBrZXJtaXQgZmlsZXMoXCVhKSAgICA7IENsaWVudCdzIFwlYQotICByZW1vdGUgcXVlcnkg a2VybWl0IGZpbGVzKFxcJWEpICAgOyBTZXJ2ZXIncyBcJWEKLQotICAgWyBSRU1PVEUgXSBMT0dJ TiBbIHVzZXIgWyBwYXNzd29yZCBdIF0KLSAgICAgICAgICBMT0dJTiBpcyBub3cgYSBzeW5vbnlt IGZvciBSRU1PVEUgTE9HSU4uCi0KLSAgIExPR09VVAotICAgICAgICAgIFRoaXMgY29tbWFuZCwg d2hlbiBnaXZlbiBpbiBsb2NhbCBtb2RlLCBpcyBlcXVpdmFsZW50IHRvIFJFTU9URQotICAgICAg ICAgIExPR09VVC4gV2hlbiBnaXZlbiBhdCB0aGUgSUtTRCBwcm9tcHQsIGl0IGxvZ3Mgb3V0IHRo ZSBJS1NELgotICAgICAgICAgIFdoZW4gZ2l2ZW4gYXQgdGhlIEMtS2VybWl0IHByb21wdCB3aGVu IGl0IGhhcyBubyBjb25uZWN0aW9uLCBpdAotICAgICAgICAgIGRvZXMgbm90aGluZy4KLQotICAg Tm90ZSB0aGF0IGluIEMtS2VybWl0IDcuMCwgdGhlIFJFTU9URSAob3IgUikgcHJlZml4IGlzIG5v dCByZXF1aXJlZCBmb3IKLSAgIFFVRVJZLCBzaW5jZSB0aGVyZSBpcyBubyBsb2NhbCBRVUVSWSBj b21tYW5kLiBUaGUgbmV3IHRvcC1sZXZlbCBRVUVSWQotICAgY29tbWFuZCBkb2VzIGV4YWN0bHkg d2hhdCBSRU1PVEUgUVVFUlkgKFJRVUVSWSkgZG9lcy4KLQotICAgQWxsIFJFTU9URSBjb21tYW5k cyBub3cgaGF2ZSBzaW5nbGUtd29yZCBzaG9ydGN1dHM6Ci0KLSBTaG9ydGN1dCAgIEZ1bGwgRm9y bQotICBSQVNHICAgICAgIFJFTU9URSBBU1NJR04KLSAgUkNEICAgICAgICBSRU1PVEUgQ0QKLSAg UkNPUFkgICAgICBSRU1PVEUgQ09QWQotICBSREVMICAgICAgIFJFTU9URSBERUxFVEUKLSAgUkRJ UiAgICAgICBSRU1PVEUgRElSRUNUT1JZCi0gIFJFWElUICAgICAgUkVNT1RFIEVYSVQKLSAgUkhF TFAgICAgICBSRU1PVEUgSEVMUAotICBSSE9TVCAgICAgIFJFTU9URSBIT1NUCi0gIFJQV0QgICAg ICAgUkVNT1RFIFBXRAotICBSU0VUICAgICAgIFJFTU9URSBTRVQKLSAgZXRjLgotCi0gICBUaGUg UiBwcmVmaXggaXMgbm90IGFwcGxpZWQgdG8gTE9HSU4gYmVjYXVzZSB0aGVyZSBpcyBhbHJlYWR5 IGFuIFJMT0dJTgotICAgY29tbWFuZCB3aXRoIGEgZGlmZmVyZW50IG1lYW5pbmcuIEl0IGlzIG5v dCBhcHBsaWVkIHRvIExPR09VVCBlaXRoZXIsCi0gICBzaW5jZSBMT0dPVVQga25vd3Mgd2hhdCB0 byBkbyBpbiBlYWNoIGNhc2UsIGFuZCBmb3Igc3ltbWV0cnkgd2l0aAotICAgTE9HSU4uCi0KLSAg ICA1LjIuMS4gUmVtb3RlIFByb2NlZHVyZSBEZWZpbml0aW9ucyBhbmQgQ2FsbHMKLQotICAgVGhp cyBpcyBub3RoaW5nIG5ldywgYnV0IGl0IG1pZ2h0IG5vdCBiZSBvYnZpb3VzLi4uIFJFTU9URSBB U1NJR04gYW5kCi0gICBSRU1PVEUgUVVFUlkgbWF5IGJlIHVzZWQgdG8gYWNoaWV2ZSByZW1vdGUg cHJvY2VkdXJlIGV4ZWN1dGlvbi4gVGhlCi0gICByZW1vdGUgcHJvY2VkdXJlIGNhbiBiZSBkZWZp bmVkIGxvY2FsbHkgb3IgcmVtb3RlbHkuCi0KLSAgIEEgcmVtb3RlIHByb2NlZHVyZSBjYWxsIGlz IGFjY29tcGxpc2hlZCBhcyBub3RlZCBpbiB0aGUgcHJldmlvdXMKLSAgIHNlY3Rpb246Ci0KLSAg WyByZW1vdGUgXSBxdWVyeSBrZXJtaXQgZnVuY3Rpb24tbmFtZShhcmdzLi4uKQotCi0gICBUaGlz IGludm9rZXMgYW55IGZ1bmN0aW9uIHRoYXQgaXMgYnVpbHQgaW4gdG8gdGhlIEtlcm1pdCBzZXJ2 ZXIsIGUuZy46Ci0KLSAgWyByZW1vdGUgXSBxdWVyeSBrZXJtaXQgc2l6ZShmb28uYmFyKQotCi0g ICByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSByZW1vdGUgZmlsZSwgZm9vLmJhci4KLQotICAgTm93 IG5vdGUgdGhhdCBDLUtlcm1pdCBpbmNsdWRlcyBhbiBcZmV4ZWN1dGUoKSBmdW5jdGlvbiwgYWxs b3dpbmcgaXQgdG8KLSAgIGV4ZWN1dGUgYW55IG1hY3JvIGFzIGlmIGl0IHdlcmUgYSBidWlsdC1p biBmdW5jdGlvbi4gU28gc3VwcG9zZSBNWU1BQ1JPCi0gICBpcyB0aGUgbmFtZSBvZiBhIG1hY3Jv IGRlZmluZWQgaW4gdGhlIHNlcnZlci4gWW91IGNhbiBleGVjdXRlIGl0IGZyb20KLSAgIHRoZSBj bGllbnQgYXMgZm9sbG93cyAodGhlIHJlZHVuZGFudCAicmVtb3RlIiBwcmVmaXggaXMgb21pdHRl ZCBpbiB0aGUKLSAgIHJlbWFpbmluZyBleGFtcGxlcyk6Ci0KLSAgcXVlcnkga2VybWl0IGV4ZWN1 dGUobXltYWNybyBhcmcxIGFyZzIuLi4pCi0KLSAgIFRoZSByZXR1cm4gdmFsdWUsIGlmIGFueSwg aXMgdGhlIHZhbHVlIG9mIHRoZSBSRVRVUk4gY29tbWFuZCB0aGF0Ci0gICB0ZXJtaW5hdGVkIGV4 ZWN1dGlvbiBvZiB0aGUgbWFjcm8sIGZvciBleGFtcGxlOgotCi0gIGRlZmluZSBhZGR0d29udW1i ZXJzIHJldHVybiBcZmV2YWwoXCUxK1wlMikKLQotICAgVGhlIGNsaWVudCBpbnZvY2F0aW9uIHdv dWxkIGJlOgotCi0gIHF1ZXJ5IGtlcm1pdCBleGVjdXRlKGFkZHR3b251bWJlcnMgMyA0KQotICA3 Ci0KLSAgIFRoZSByZXN1bHQgKCI3IiBpbiB0aGlzIGNhc2UpIGlzIGFsc28gYXNzaWduZWQgdG8g dGhlIGNsaWVudCdzCi0gICBcdihxdWVyeSkgdmFyaWFibGUuCi0KLSAgIFRvIGV4ZWN1dGUgYSBy ZW1vdGUgc3lzdGVtIGNvbW1hbmQgb3IgY29tbWFuZCBwcm9jZWR1cmUgKHNoZWxsIHNjcmlwdCwK LSAgIGV0YykgdXNlOgotCi0gIHF1ZXJ5IGtlcm1pdCBjb21tYW5kKG5hbWUgYXJncy4uLikKLQot ICAgRmluYWxseSwgc3VwcG9zZSB5b3Ugd2FudCB0aGUgY2xpZW50IHRvIHNlbmQgYSBtYWNybyB0 byB0aGUgc2VydmVyIHRvCi0gICBiZSBleGVjdXRlZCBvbiB0aGUgc2VydmVyIGVuZC4gVGhpcyBp cyBkb25lIGFzIGZvbGxvd3M6Ci0KLSAgcmVtb3RlIGFzc2lnbiBtYWNyb25hbWUgZGVmaW5pdGlv bgotICBxdWVyeSBrZXJtaXQgZXhlY3V0ZShtYWNyb25hbWUgYXJnMSBhcmcyLi4uKQotCi0gICBR dW90aW5nIGlzIHJlcXVpcmVkIGlmIHRoZSBkZWZpbml0aW9uIGNvbnRhaW5zIGZvcm1hbCBwYXJh bWV0ZXJzLgotCi0gIDUuMy4gTmV3IFNlcnZlciBDYXBhYmlsaXRpZXMKLQotICAgIDUuMy4xLiBD cmVhdGluZyBhbmQgUmVtb3ZpbmcgRGlyZWN0b3JpZXMKLQotICAgVGhlIEMtS2VybWl0IDcuMCBz ZXJ2ZXIgcmVzcG9uZHMgdG8gUkVNT1RFIE1LRElSIGFuZCBSRU1PVEUgUk1ESVIKLSAgIGNvbW1h bmRzLiBUaGUgZGlyZWN0b3J5IG5hbWUgbWF5IGJlIGluIGVpdGhlciB0aGUgbmF0aXZlIGZvcm1h dCBvZiB0aGUKLSAgIHNlcnZlcidzIGNvbXB1dGVyLCBvciBpbiBVTklYIGZvcm1hdC4gRm9yIGV4 YW1wbGUsIGEgc2VydmVyIHJ1bm5pbmcgb24KLSAgIFZNUyB3aXRoIGEgY3VycmVudCBkaXJlY3Rv cnkgb2YgW0lWQU5dIGNhbiBhY2NlcHQgY29tbWFuZHMgZnJvbSB0aGUKLSAgIGNsaWVudCBsaWtl OgotCi0gIHJlbW90ZSBta2RpciBvbGdhICAgICAgICAgOyBNYWtlcyBbSVZBTi5PTEdBXSAobm9u c3BlY2lmaWMgZm9ybWF0KQotICByZW1vdGUgbWtkaXIgLm9sZ2EgICAgICAgIDsgTWFrZXMgW0lW QU4uT0xHQV0gKFZNUyBmb3JtYXQgd2l0aG91dCBicmFja2V0cykKLSAgcmVtb3RlIG1rZGlyIG9s Z2EvICAgICAgICA7IE1ha2VzIFtJVkFOLk9MR0FdIChVTklYIHJlbGF0aXZlIGZvcm1hdCkKLSAg cmVtb3RlIG1rZGlyIC9pdmFuL29sZ2EgICA7IE1ha2VzIFtJVkFOLk9MR0FdIChVTklYIGFic29s dXRlIGZvcm1hdCkKLSAgcmVtb3RlIG1rZGlyIFtpdmFuLm9sZ2FdICA7IE1ha2VzIFtJVkFOLk9M R0FdIChWTVMgYWJzb2x1dGUgZm9ybWF0KQotICByZW1vdGUgbWtkaXIgWy5vbGdhXSAgICAgIDsg TWFrZXMgW0lWQU4uT0xHQV0gKFZNUyByZWxhdGl2ZSBmb3JtYXQpCi0KLSAgICA1LjMuMS4xLiBD cmVhdGluZyBEaXJlY3RvcmllcwotCi0gICBJZiBhIGRpcmVjdG9yeSBuYW1lIGlzIGdpdmVuIHRo YXQgY29udGFpbnMgbW9yZSB0aGFuIG9uZSBzZWdtZW50IHRoYXQKLSAgIGRvZXMgbm90IGV4aXN0 LCB0aGUgc2VydmVyIGF0dGVtcHRzIHRvIGNyZWF0ZSBhbGwgdGhlIHNlZ21lbnRzLiBGb3IKLSAg IGV4YW1wbGUsIGlmIHRoZSBjbGllbnQgc2F5czoKLQotICBSRU1PVEUgTUtESVIgbGV0dGVycy9h bmdyeQotCi0gICBhICJsZXR0ZXJzIiBzdWJkaXJlY3RvcnkgaXMgY3JlYXRlZCBpbiB0aGUgc2Vy dmVyJ3MgY3VycmVudCBkaXJlY3RvcnkKLSAgIGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3Qs IGFuZCB0aGVuIGFuICJhbmdyeSIgc3ViZGlyZWN0b3J5IGlzCi0gICBjcmVhdGVkIGJlbmVhdGgg aXQsIGlmIGl0IGRvZXMgbm90IGFscmVhZHkgaGF2ZSBvbmUuIFRoaXMgY2FuIHJlcGVhdGVkCi0g ICB0byBhbnkgcmVhc29uYWJsZSBkZXB0aDoKLQotICBSRU1PVEUgTUtESVIgYS9iL2MvZC9lL2Yv Zy9oL2kvai9rL2wvbS9uL28vcC9xL3Ivcy90L3Uvdi93L3oveS96Ci0KLSAgICA1LjMuMS4yLiBS ZW1vdmluZyBEaXJlY3RvcmllcwotCi0gICBXaGVuIGF0dGVtcHRpbmcgdG8gZXhlY3V0ZSBhIFJF TU9URSBSTURJUiwgdGhlIHNlcnZlciBjYW4gcmVtb3ZlIG9ubHkgYQotICAgc2luZ2xlIGRpcmVj dG9yeSwgbm90IGFuIGVudGlyZSBzZXF1ZW5jZSBvciB0cmVlLiBUaGUgc3lzdGVtIHNlcnZpY2UK LSAgIHRoYXQgaXMgY2FsbGVkIHRvIHJlbW92ZSB0aGUgZGlyZWN0b3J5IGdlbmVyYWxseSByZXF1 aXJlcyBub3Qgb25seSB0aGF0Ci0gICB0aGUgc2VydmVyIHByb2Nlc3MgaGFzIHdyaXRlIGRlbGV0 ZSBhY2Nlc3MsIGJ1dCBhbHNvIHRoYXQgdGhlIGRpcmVjdG9yeQotICAgY29udGFpbiBubyBmaWxl cy4KLQotICAgSW4gdGhlIGZ1dHVyZSwgYSBSRU1PVEUgUk1ESVIgL1JFQ1VSU0lWRSBjb21tYW5k IChhbmQgdGhlIGFjY29tcGFueWluZwotICAgcHJvdG9jb2wpIG1pZ2h0IGJlIGFkZGVkLiBGb3Ig bm93LCB1c2UgdGhlIGVxdWl2YWxlbnQgUkVNT1RFIEhPU1QKLSAgIGNvbW1hbmQocyksIGlmIGFu eS4KLQotICAgIDUuMy4yLiBEaXJlY3RvcnkgTGlzdGluZ3MKLQotICAgRGlyZWN0b3J5IGxpc3Rp bmdzIGFyZSBnZW5lcmF0ZWQgYnkgQy1LZXJtaXQgaXRzZWxmLCByYXRoZXIgdGhhbiBieQotICAg cnVubmluZyB0aGUgdW5kZXJseWluZyBzeXN0ZW0ncyBkaXJlY3RvcnkgY29tbWFuZC4gU29tZSBj b250cm9sIG92ZXIKLSAgIHRoZSBsaXN0aW5nIGZvcm1hdCBjYW4gYmUgb2J0YWluZWQgd2l0aCB0 aGUgU0VUIE9QVElPTlMgRElSRUNUT1JZCi0gICBjb21tYW5kIChbNTQwXVNlY3Rpb24gNC41LjEp LiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYWZmZWN0IGxpc3RpbmdzCi0gICBzZW50IGJ5IHRoZSBz ZXJ2ZXI6IC9bTk9dSEVBRElORywgL1tOT11ET1RGSUxFUywgYW5kIC9bTk9dQkFDS1VQLiBJbgot ICAgVU5JWCBhbmQgVk1TLCB0aGUgbGlzdGluZyBpcyBhbHdheXMgc29ydGVkIGJ5IGZpbGVuYW1l LiBUaGVyZSBpcywgYXQKLSAgIHByZXNlbnQsIG5vIHByb3RvY29sIGRlZmluZWQgZm9yIHRoZSBj bGllbnQgdG8gcmVxdWVzdCBsaXN0aW5nIG9wdGlvbnMKLSAgIG9mIHRoZSBzZXJ2ZXI7IHRoaXMg bWlnaHQgYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZS4KLQotICAgVGhlIHNlcnZlcidzIGRpcmVjdG9y eSBsaXN0aW5ncyBhcmUgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6Ci0KLSAgIFByb3RlY3Rpb24g b3IgcGVybWlzc2lvbnM6Ci0gICAgICAgICAgSW4gVU5JWCBhbmQgT1MtOSwgdGhpcyBpcyBhIDEw LWNoYXJhY3RlciBmaWVsZCwgbGVmdCBhZGp1c3RlZC4KLSAgICAgICAgICBJbiBWTVMgaXQgaXMg YSAyMi1jaGFyYWN0ZXIgZmllbGQsIGxlZnQtYWRqdXN0ZWQuIEluIGVhY2ggY2FzZSwKLSAgICAg ICAgICB0aGUgcHJvdGVjdGlvbiAvIHBlcm1pc3Npb24gY29kZXMgYXJlIHNob3duIGluIHRoZSBz ZXJ2ZXIKLSAgICAgICAgICBwbGF0Zm9ybSdzIG5hdGl2ZSBmb3JtYXQuIEluIG90aGVyIG9wZXJh dGluZyBzeXN0ZW1zLCB0aGlzIGZpZWxkCi0gICAgICAgICAgaXMgbm90IHNob3duLgotCi0gICBT aXplIGluIGJ5dGVzOgotICAgICAgICAgIFRoaXMgaXMgYWx3YXlzIGEgMTAtY2hhcmFjdGVyIGZp ZWxkLiBUaGUgZmlsZSdzIHNpemUgaXMgc2hvd24gYXMKLSAgICAgICAgICBhIGRlY2ltYWwgbnVt YmVyLCByaWdodCBhZGp1c3RlZCBpbiB0aGUgZmllbGQuIElmIHRoZSBmaWxlIGlzIGEKLSAgICAg ICAgICBkaXJlY3RvcnkgYW5kIGl0cyBzaXplIGNhbiBub3QgYmUgb2J0YWluZWQsIHRoZSBzaXpl IGlzIHNob3duIGFzCi0gICAgICAgICAgIjxESVI+Ii4gVHdvIGJsYW5rcyBmb2xsb3cgdGhpcyBm aWVsZC4KLQotICAgRGF0ZToKLSAgICAgICAgICBBbHdheXMgaW4geXl5eS1tbS1kZCBoaDptbTpz cyBudW1lcmljIGZvcm1hdCwgYW5kIHRoZXJlZm9yZSAxOQotICAgICAgICAgIGNoYXJhY3RlcnMg bG9uZy4gSWYgdGhlIGZpbGUncyBkYXRlL3RpbWUgY2FuJ3QgYmUgb2J0YWluZWQsCi0gICAgICAg ICAgemVyb3MgKDApIGFyZSBzaG93biBmb3IgYWxsIHRoZSBkaWdpdHMuIFRoaXMgZmllbGQgaXMg Zm9sbG93ZWQKLSAgICAgICAgICBieSB0d28gYmxhbmtzLgotCi0gICBGaWxlbmFtZToKLSAgICAg ICAgICBUaGlzIGZpZWxkIGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4gRmlsZW5hbWVz IGFyZSBzaG93bgotICAgICAgICAgIHJlbGF0aXZlIHRvIHRoZSBzZXJ2ZXIncyBjdXJyZW50IGRp cmVjdG9yeS4gSW4gVU5JWCwgc3ltYm9saWMKLSAgICAgICAgICBsaW5rcyBhcmUgc2hvd24gYXMg dGhleSBhcmUgaW4gYW4gImxzIC1sIiBsaXN0aW5nIGFzICJsaW5rbmFtZQotICAgICAgICAgIC0+ IGZpbGVuYW1lIi4KLQotICAgSW4gVU5JWCBhbmQgVk1TLCBsaXN0aW5ncyBhcmUgcmV0dXJuZWQg YnkgdGhlIHNlcnZlciBpbiBhbHBoYWJldGljYWwKLSAgIG9yZGVyIG9mIGZpbGVuYW1lLiBUaGVy ZSBhcmUgcHJlc2VudGx5IG5vIG90aGVyIHNvcnQgb3Igc2VsZWN0aW9uCi0gICBvcHRpb25zLgot Ci0gICBIb3dldmVyLCBzaW5jZSB0aGVzZSBhcmUgZml4ZWQtZmllbGQgbGlzdGluZ3MsIGFsbCBm aWVsZHMgY2FuIGJlIHVzZWQKLSAgIGFzIHNvcnQga2V5cyBieSBleHRlcm5hbCBzb3J0IHByb2dy YW1zLiBOb3RlLCBpbiBwYXJ0aWN1bGFyLCB0aGF0IHRoZQotICAgZm9ybWF0IHVzZWQgZm9yIHRo ZSBkYXRlIGFsbG93cyBhIG5vcm1hbCBsZXhpY2FsIG9uIHRoYXQgZmllbGQgdG8KLSAgIGFjaGll dmUgdGhlIGRhdGUgb3JkZXJpbmcuIEZvciBleGFtcGxlLCBsZXQncyBhc3N1bWUgd2UgaGF2ZSBh IFVOSVgKLSAgIGNsaWVudCBhbmQgYSBVTklYIHNlcnZlci4gSW4gdGhpcyBjYXNlLCB0aGUgc2Vy dmVyJ3MgbGlzdGluZyBoYXMgdGhlCi0gICBkYXRlIGluIGNvbHVtbnMgMjItNDAsIGFuZCB0aHVz IGNvdWxkIGJlIHNvcnRlZCBieSB0aGUgVU5JWCBzb3J0Ci0gICBwcm9ncmFtIHVzaW5nICJzb3J0 ICswLjIyIC0wLjQwIiBvciBpbiByZXZlcnNlIG9yZGVyIGJ5ICJzb3J0ICswLjIyCi0gICAtMC40 MHIiLgotCi0gICBTaW5jZSB0aGUgVU5JWCBjbGllbnQgY2FuIHBpcGUgcmVzcG9uc2VzIHRvIFJF TU9URSBjb21tYW5kcyB0aHJvdWdoCi0gICBmaWx0ZXJzLCBhbnkgZGVzaXJlZCBzb3J0aW5nIGNh biBiZSBhY2NvbXBsaXNoZWQgdGhpcyB3YXksIGZvciBleGFtcGxlOgotCi1DLUtlcm1pdD4gcmVt b3RlIGRpcmVjdG9yeSB8IHNvcnQgKzAuMjIgLTAuNDAKLQotICAgWW91IGNhbiBhbHNvIHNvcnQg Ynkgc2l6ZToKLQotICBDLUtlcm1pdD4gcmVtb3RlIGRpcmVjdG9yeSB8IHNvcnQgKzAuMTEgLTAu MTkKLQotICAgWW91IGNhbiB1c2Ugc29ydCBvcHRpb25zIHRvIHNlbGVjdCByZXZlcnNlIG9yIGFz Y2VuZGluZyBvcmRlci4gIm1hbgotICAgc29ydCIgKGluIFVOSVgpIGZvciBtb3JlIGluZm9ybWF0 aW9uLiBBbmQgb2YgY291cnNlLCB5b3UgY2FuIHBpcGUgdGhlc2UKLSAgIGxpc3RpbmdzIHRocm91 Z2ggYW55IG90aGVyIGZpbHRlciBvZiB5b3VyIGNob2ljZSwgc3VjaCBhcyBncmVwIHRvIHNraXAK LSAgIHVud2FudGVkIGxpbmVzLgotCi0gIDUuNC4gU3ludGF4IGZvciBSZW1vdGUgRmlsZW5hbWVz IHdpdGggRW1iZWRkZWQgU3BhY2VzCi0KLSAgIEMtS2VybWl0IGFuZCBLOTUsIHdoZW4gaW4gc2Vy dmVyIG1vZGUsIGFzc3VtZSB0aGF0IGFueSBzcGFjZXMgaW4gdGhlCi0gICBmaWxlIHNwZWNpZmlj YXRpb24gaW4gYW4gaW5jb21pbmcgR0VUIGNvbW1hbmQgYXJlIGZpbGVuYW1lIHNlcGFyYXRvcnMu Ci0gICBUaHVzIGlmIHRoZSBjbGllbnQgZ2l2ZXMgYSBjb21tYW5kIGxpa2U6Ci0KLSAgZ2V0IHtv b2ZhLnR4dCBvb2ZhLmJpbn0KLQotICAgb3IsIGVxdWl2YWxlbnRseToKLQotICBtZ2V0IG9vZmEu dHh0IG9vZmEuYmluCi0KLSAgIHRoZSBzZXJ2ZXIgdHJpZXMgdG8gc2VuZCB0aGUgdHdvIGZpbGVz LCBvb2ZhLnR4dCBhbmQgb29mYS5iaW4uIEJ1dCB3aGF0Ci0gICBpZiB5b3Ugd2FudCB0aGUgc2Vy dmVyIHRvIHNlbmQgeW91IGEgZmlsZSBuYW1lZCwgc2F5OgotCi0gIEQ6XEhQIE9mZmljZUpldCA1 MDBcSW1hZ2VzXE15IFByZXR0eSBQaWN0dXJlIERvdCBQQ0wKLQotICAgSG93IGRvZXMgdGhlIHNl cnZlciBrbm93IHRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgb25lIGZpbGUgYW5kIG5vdCBzZXZlbj8K LSAgIEluIHRoaXMgY2FzZSwgeW91IG5lZWQgdG8gdGhlIHNlbmQgZmlsZSBuYW1lIHRvIHRoZSBz ZXJ2ZXIgZW5jbG9zZWQgaW4KLSAgIGVpdGhlciBjdXJseSBicmFjZXM6Ci0KLSAge0Q6XEhQIE9m ZmljZUpldCA1MDBcSW1hZ2VzXE15IFByZXR0eSBQaWN0dXJlIERvdCBQQ0x9Ci0KLSAgIG9yIEFT Q0lJIGRvdWJsZXF1b3RlczoKLQotICAiRDpcSFAgT2ZmaWNlSmV0IDUwMFxJbWFnZXNcTXkgUHJl dHR5IFBpY3R1cmUgRG90IFBDTCIKLQotICAgVGhlIG1ldGhvZCBmb3IgZG9pbmcgdGhpcyBkZXBl bmRzIG9uIHlvdXIgY2xpZW50LiBJZiB5b3VyIGNsaWVudCBpcwotICAgQy1LZXJtaXQgNy4wLCBh bnkgcmVjZW50IHZlcnNpb24gb2YgS2VybWl0IDk1LCBvciBNUy1ET1MgS2VybWl0IDMuMTYsCi0g ICB0aGVuIHlvdSBoYXZlIHRvIGVuY2xvc2UgdGhlIG5hbWUgaW4gYnJhY2VzIGp1c3Qgc28gdGhl IGNsaWVudCBjYW4KLSAgIHBhcnNlIGl0LCBzbyB0byBzZW5kIGJyYWNlcyBvciBkb3VibGVxdW90 ZXMgdG8gdGhlIHNlcnZlciwgeW91IG11c3QgcHV0Ci0gICB0aGVtIGluc2lkZSB0aGUgZmlyc3Qs IG91dHNpZGUgcGFpciBvZiBicmFjZXMuIEFuZCB5b3UgYWxzbyBuZWVkIHRvCi0gICBkb3VibGUg dGhlIGJhY2tzbGFzaGVzIHRvIHByZXZlbnQgdGhlbSBmcm9tIGJlaW5nIGludGVycHJldGVkOgot Ci0gIGdldCB7e0Q6XFxIUCBPZmZpY2VKZXQgNTAwXFxJbWFnZXNcXE15IFByZXR0eSBQaWN0dXJl IERvdCBQQ0x9fQotICBnZXQgeyJEOlxcSFAgT2ZmaWNlSmV0IDUwMFxcSW1hZ2VzXFxNeSBQcmV0 dHkgUGljdHVyZSBEb3QgUENMIn0KLQotICAgVG8gZ2V0IGFyb3VuZCB0aGUgcmVxdWlyZW1lbnQg dG8gZG91YmxlIGJhY2tzbGFzaGVzIGluIGxpdGVyYWwKLSAgIGZpbGVuYW1lcywgb2YgY291cnNl IHlvdSBjYW4gYWxzbyB1c2U6Ci0KLSAgc2V0IGNvbW1hbmQgcXVvdGluZyBvZmYKLSAgZ2V0IHt7 RDpcSFAgT2ZmaWNlSmV0IDUwMFxJbWFnZXNcTXkgUHJldHR5IFBpY3R1cmUgRG90IFBDTH19Ci0g IGdldCB7IkQ6XEhQIE9mZmljZUpldCA1MDBcSW1hZ2VzXE15IFByZXR0eSBQaWN0dXJlIERvdCBQ Q0wifQotICBzZXQgY29tbWFuZCBxdW90aW5nIG9uCi0KLSAgIElmIHlvdSBhcmUgZ2l2aW5nIGEg Imtlcm1pdCIgY29tbWFuZCB0byB0aGUgVU5JWCBzaGVsbCwgeW91IGhhdmUgdG8KLSAgIG9ic2Vy dmUgdGhlIHNoZWxsJ3MgcXVvdGluZyBydWxlcywgc29tZXRoaW5nIGxpa2UgdGhpczoKLQotICBr ZXJtaXQgLWlnICJ7RDpcSFAgT2ZmaWNlSmV0IDUwMFxJbWFnZXNcTXkgUHJldHR5IFBpY3R1cmUg RG90IFBDTH0iCi0KLSAgIEhlcmUsIHRoZSBxdW90ZXMgZ28gb24gdGhlIG91dHNpZGUgc28gVU5J WCB3aWxsIHBhc3MgdGhlIGVudGlyZQotICAgZmlsZW5hbWUsIHNwYWNlcywgYnJhY2VzLCBhbmQg YWxsLCBhcyBhIHNpbmdsZSBhcmd1bWVudCB0byBLZXJtaXQsIGFuZAotICAgdGhlIGJhY2tzbGFz aGVzIGFyZSBub3QgZG91YmxlZCBiZWNhdXNlIChhKSB0aGUgVU5JWCBzaGVsbCBpZ25vcmVzIHRo ZW0KLSAgIHNpbmNlIHRoZXkgYXJlIGluIGEgcXVvdGVkIHN0cmluZywgYW5kIChiKSBLZXJtaXQg aWdub3JlcyB0aGVtIHNpbmNlCi0gICB0aGUgaW50ZXJhY3RpdmUgY29tbWFuZCBwYXJzZXIgaXMg bm90IGFjdGl2YXRlZCBpbiB0aGlzIGNhc2UuCi0KLSAgNS41LiBBdXRvbWF0aWMgT3JpZW50YXRp b24gTWVzc2FnZXMgdXBvbiBEaXJlY3RvcnkgQ2hhbmdlCi0KLSAgIEMtS2VybWl0IDcuMCwgd2hl biBhY3RpbmcgYXMgYSBzZXJ2ZXIsIGNhbiBzZW5kIGFuIG9yaWVudGF0aW9uIG1lc3NhZ2UKLSAg IHRvIHRoZSBjbGllbnQgd2hlbmV2ZXIgdGhlIHNlcnZlciBkaXJlY3RvcnkgY2hhbmdlcy4gRm9y IGV4YW1wbGUsIHdoZW4KLSAgIHRoZSBjbGllbnQgZ2l2ZXMgYSBSRU1PVEUgQ0QgY29tbWFuZCwg dGhlIHNlcnZlciBzZW5kcyB0aGUgY29udGVudHMgb2YKLSAgIHRoZSBuZXcgZGlyZWN0b3J5J3Mg IlJlYWQgTWUiIGZpbGUgdG8gdGhlIGNsaWVudCdzIHNjcmVlbi4gVGhlCi0gICBmb2xsb3dpbmcg Y29tbWFuZHMgZ292ZXJuIHRoaXMgZmVhdHVyZToKLQotICAgU0VUIFNFUlZFUiBDRC1NRVNTQUdF IEZJTEUgbmFtZQotICAgICAgICAgIEdpdmVuIHRvIHRoZSBzZXJ2ciwgYWxsb3dzIHRoZSBtZXNz YWdlLWZpbGUgbmFtZSB0byBiZSBzcGVjaWZpZWQKLSAgICAgICAgICBhdCBydW50aW1lLiBBIGxp c3Qgb2YgbmFtZXMgdG8gbG9vayBmb3IgY2FuIGJlIGdpdmVuIGluIHRoZQotICAgICAgICAgIGZv bGxvd2luZyBmb3JtYXQ6Ci0KLSAge3tuYW1lMX17bmFtZTJ9e25hbWUzfXsuLi59fQotCi0gICAg ICAgICAgZS5nLiBTRVQgU0VSVkVSIENELU1FU1NBR0UgRklMRQotICAgICAgICAgIHt7Li8ucmVh ZG1lfXtSRUFETUUuVFhUfXtSRUFELk1FfX0KLQotICAgUkVNT1RFIFNFVCBTRVJWRVIgQ0QtTUVT U0FHRSB7IE9OLCBPRkYgfQotICAgICAgICAgIEdpdmVuIHRvIHRoZSBjbGllbnQsIGxldHMgdGhl IGNsaWVudCBjb250cm9sIHdoZXRoZXIgdGhlIHNlcnZlcgotICAgICAgICAgIHNlbmRzIGF1dG9t YXRpYyBDRCBtZXNzYWdlcy4KLQotICAgU0hPVyBTRVJWRVIKLSAgICAgICAgICBHaXZlbiB0byBz ZXJ2ZXIsIGluY2x1ZGVzIENELU1lc3NhZ2Ugc3RhdHVzLgotCi0gICBUaGUgZGVmYXVsdCBDRCBt ZXNzYWdlIGZpbGUgbmFtZSBpcyBzeXN0ZW0gZGVwZW5kZW50LiBTSE9XIENEIG9yIFNIT1cKLSAg IFNFUlZFUiBkaXNwbGF5cyB0aGUgbGlzdC4gQWxzbyBzZWUgWzU0MV1TZWN0aW9uIDQuNS4yLgot Ci0gIDUuNi4gTmV3IFNlcnZlciBDb250cm9scwotCi0gICBESVNBQkxFIEVOQUJMRQotICAgICAg ICAgIEFsbG93cyB0aGUgc2VydmVyIHRvIGNvbmZpZ3VyZWQgc3VjaCB0aGF0IERJU0FCTEVkIGZl YXR1cmVzIGNhbgotICAgICAgICAgIG5vdCBiZSByZS1lbmFibGVkIGJ5IGFueSBtZWFucyAtLSBl LmcuIGlmIHRoZSBjbGllbnQgaXMgc29tZWhvdwotICAgICAgICAgIGFibGUgdG8gZ2V0IHRoZSBz ZXJ2ZXIgaW50byBjb21tYW5kIG1vZGUuIE9uY2UgRElTQUJMRWQsIEVOQUJMRQotICAgICAgICAg IGNhbiBub3QgYmUgcmUtRU5BQkxFZC4KLQotICAgU0VUIFNFUlZFUiBJRExFLVRJTUVPVVQgc2Vj b25kcwotICAgICAgICAgIFRoaXMgd2FzIGF2YWlsYWJsZSBwcmV2aW91c2x5IGluIEtlcm1pdCA5 NSBvbmx5LiBOb3cgaXQgY2FuIGJlCi0gICAgICAgICAgdXNlZCBpbiBDLUtlcm1pdCBhbHNvIHRv IHNwZWNpZnkgYSBtYXhpbXVtIG51bWJlciBvZiBzZWNvbmRzIHRoZQotICAgICAgICAgIHNlcnZl ciBpcyBhbGxvd2VkIHRvIGJlIGlkbGUgYmVmb3JlIGV4aXRpbmcgc2VydmVyIG1vZGUuIDAKLSAg ICAgICAgICBzZWNvbmRzIG1lYW5zIG5vIGlkbGUgdGltZW91dC4gSW4gQy1LZXJtaXQgKGJ1dCBu b3QgSy05NSksIFNFVAotICAgICAgICAgIFNFUlZFUiBUSU1FT1VUIGFuZCBTRVQgU0VSVkVSIElE TEUtVElNRU9VVCBhcmUgbXV0dWFsbHkKLSAgICAgICAgICBleGNsdXNpdmUgLS0geW91IGNhbiBo YXZlIG9uZSBvciB0aGUgb3RoZXIgKG9yIG5laXRoZXIpLCBidXQgbm90Ci0gICAgICAgICAgYm90 aC4gKFNlcnZlciB0aW1lb3V0cyBhcmUgZm9yIHRoZSBiZW5lZml0IG9mIHByaW1pdGl2ZSBLZXJt aXQKLSAgICAgICAgICBjbGllbnRzIHRoYXQgYXJlIG5vdCBjYXBhYmxlIG9mIHRpbWluZyBvdXQg b24gdGhlaXIgb3duOyB0byBvdXIKLSAgICAgICAgICBrbm93bGVkZ2UsIG5vIHN1Y2ggY2xpZW50 cyBhcmUgc3RpbGwgaW4gY2lyY3VsYXRpb24uKQotCi0gICBTRVQgU0VSVkVSIEtFRVBBTElWRSB7 IE9OLCBPRkYgfQotICAgICAgICAgIChTZWUgbmV4dCBzZWN0aW9uKS4KLQotICA1LjcuIFRpbWVv dXRzIGR1cmluZyBSRU1PVEUgSE9TVCBDb21tYW5kIEV4ZWN1dGlvbgotCi0gICBQcmlvciB0byBD LUtlcm1pdCA3LjAsIHRoZSBDLUtlcm1pdCBzZXJ2ZXIgd291bGQgYmxvY2sgd2FpdGluZyBmb3IK LSAgIG91dHB1dCBmcm9tIGEgc3lzdGVtIGNvbW1hbmQgaW52b2tlZCB2aWEgUkVNT1RFIEhPU1Qg ZnJvbSB0aGUgY2xpZW50LgotICAgSWYgdGhlIHN5c3RlbSBjb21tYW5kIHRvb2sgYSBsb25nIHRp bWUgdG8gZXhlY3V0ZSwgdGhlIGNsaWVudCB3b3VsZAotICAgdGltZSBvdXQgYW5kIHNlbmQgTkFL IHBhY2tldHMuIElmIHRoZSBjb21tYW5kIHRvb2sgdG9vIGxvbmcsIHRoZSBjbGllbnQKLSAgIHdv dWxkIHJlYWNoIGl0cyByZXRyeSBsaW1pdCBhbmQgZ2l2ZSB1cC4gRXZlbiBpZiBpdCBkaWRuJ3Qs IHRoZSBOQUtzCi0gICB3b3VsZCBjYXVzZSB1bm5lY2Vzc2FyeSByZXRyYW5zbWlzc2lvbnMuCi0K LSAgIEluIHZlcnNpb24gNy4wLCB0aGUgQy1LZXJtaXQgc2VydmVyIChWTVMgYW5kIHNlbGVjdCgp LWNhcGFibGUgVU5JWAotICAgdmVyc2lvbnMgb25seSksIHNlbmRzICJrZWVwYWxpdmUgcGFja2V0 cyIgKGVtcHR5IGRhdGEgcGFja2V0cykgb25jZSBwZXIKLSAgIHNlY29uZCB3aGlsZSB3YWl0aW5n IGZvciB0aGUgc3lzdGVtIGNvbW1hbmQgdG8gY29tcGxldGUuIFRoaXMgcHJvY2VkdXJlCi0gICBz aG91bGQgYmUgZW50aXJlbHkgdHJhbnNwYXJlbnQgdG8gdGhlIEtlcm1pdCBjbGllbnQsIGFuZCBz aG91bGQgcHJldmVudAotICAgdGhlIHVud2FudGVkIHRpbWVvdXRzIGFuZCBOQUtzLiBXaGVuIEMt S2VybWl0IDcuMCBpdHNlbGYgKG9yIEs5NQotICAgMS4xLjE5KSBpcyB0aGUgY2xpZW50LCBpdCBw cmludHMgZG90cyB0byBzaG93IHRoZSBrZWVwYWxpdmUgcGFja2V0cy4KLQotICAgVGhlIGtlZXBh bGl2ZSBmZWF0dXJlIGNhbiBiZSB0dXJuZWQgb2ZmIGFuZCBvbiB3aXRoOgotCi0gIFNFVCBTRVJW RVIgS0VFUEFMSVZFIHsgT04sIE9GRiB9Ci0KLSAgIE5vcm1hbGx5IGl0IHNob3VsZCBiZSBvbi4g VHVybiBpdCBvZmYgaXQgaWYgY2F1c2VzIHRyb3VibGUgd2l0aCB0aGUKLSAgIGNsaWVudCwgb3Ig aWYgaXQgc2VlbXMgdG8gc2xvdyBkb3duIHRoZSBzZXJ2ZXIgKGFzIGl0IG1pZ2h0IG9uIHNvbWUK LSAgIHBsYXRmb3JtcyB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMpLgotCi0gIDYuIElOVEVS TkFUSU9OQUwgQ0hBUkFDVEVSIFNFVFMKLQotICAgU3VwcG9ydCBmb3Igc2V2ZXJhbCBuZXcgc2lu Z2xlLWJ5dGUgY2hhcmFjdGVyIHNldHMgd2FzIGFkZGVkIGluCi0gICBDLUtlcm1pdCA3LjAuIFVu aWNvZGUgLyBJU08gMTA2NDYgaXMgbm90IHlldCBzdXBwb3J0ZWQsIGJ1dCBpcyBhIGhpZ2gKLSAg IHByaW9yaXR5IGZvciBmb3J0aGNvbWluZyByZWxlYXNlcy4KLQotICA2LjAuIElTTyA4ODU5LTE1 IExhdGluIEFscGhhYmV0IDkKLQotICAgVG8gYWNjb21tb2RhdGUgdGhlIEV1cm8gY3VycmVuY3kg c3ltYm9sLCBhbmQgdG8gY29ycmVjdCBzZXZlcmFsIG90aGVyCi0gICBsb25nc3RhbmRpbmcgcHJv YmxlbXMgd2l0aCBJU08gTGF0aW4gQWxwaGFiZXQgMSwgSVNPIDg4NTktMTUgTGF0aW4KLSAgIEFs cGhhYmV0IDkgd2FzIGlzc3VlZCBpbiBNYXkgMTk5OC4gSXQgaXMgc3VwcG9ydGVkIGJ5IEMtS2Vy bWl0IDcuMCBhcyBhCi0gICB0cmFuc2ZlciBjaGFyYWN0ZXIgc2V0LCBhIGZpbGUgY2hhcmFjdGVy IHNldCwgYW5kIGEgdGVybWluYWwgY2hhcmFjdGVyCi0gICBzZXQuIFRyYW5zbGF0aW9ucyB0aGF0 IHByZXNlcnZlIHRoZSBuZXcgY2hhcmFjdGVycyBhcmUgYXZhaWxhYmxlCi0gICBiZXR3ZWVuIExh dGluLTkgYW5kIHNldmVyYWwgb3RoZXIgc2V0cyBpbmNsdWRpbmc6Ci0KLSAgUEMgQ29kZSBQYWdl IDg1OCAgICAgICAgIChXZXN0ZXJuIEV1cm9wZWFuIGxhbmd1YWdlcywgc2ltaWxhciB0byBDUDg1 MCkKLSAgV2luZG93cyBDb2RlIFBhZ2UgMTI1MiAgIChXZXN0ZXJuIEV1cm9wZWFuIGxhbmd1YWdl cywgc2ltaWxhciB0byBMYXRpbi0xKQotICBXaW5kb3dzIENvZGUgUGFnZSAxMjUwICAgKEVhc3Rl cm4gRXVyb3BlYW4gbGFuZ3VhZ2VzLCBzaW1pbGFyIHRvIExhdGluLTIpCi0KLSAgIFRoZSBMYXRp bi05IHRyYW5zZmVyIGNoYXJhY3RlciBzZXQgYWxzbyBhbGxvd3MgZm9yIHRoZSBPRSBkaWdyYXBo Ci0gICBjaGFyYWN0ZXIsIHVzZWQgcHJpbWFyaWx5IGluIEZyZW5jaCwgdG8gYmUgcHJlc2VydmVk IGluIHRyYW5zZmVycwotICAgaW52b2x2aW5nIHRoZSBERUMgTUNTIG9yIE5lWFQgY2hhcmFjdGVy IHNldHMuCi0KLSAgIFRoZSBFdXJvIGNoYXJhY3RlciBpcyBhbHNvIHByZXNlbnQgaW4gdGhlIFVu aXZlcnNhbCBDaGFyYWN0ZXIgU2V0LAotICAgZGVzY3JpYmVkIGluIFs1NDJdU2VjdGlvbiA2LjYu Ci0KLSAgNi4xLiBUaGUgSFAtUm9tYW44IENoYXJhY3RlciBTZXQKLQotICAgVGhlIEhQLVJvbWFu OCBjaGFyYWN0ZXIgc2V0IGlzIHN1cHBvcnRlZCBpbiBDLUtlcm1pdCA2LjAgYW5kIGxhdGVyIGJ1 dAotICAgd2FzIG9taXR0ZWQgZnJvbSBUYWJsZSBWSUktNCBpbiB0aGUgMm5kIEVkaXRpb24gb2Yg VXNpbmcgQy1LZXJtaXQgZHVlCi0gICB0byBsYWNrIG9mIHNwYWNlLiBJdCBpcyBsaXN0ZWQgaW4g WzU0M11BcHBlbmRpeCBJSUkuCi0KLSAgNi4yLiBHcmVlayBDaGFyYWN0ZXIgU2V0cwotCi0gICBH cmVlayBjaGFyYWN0ZXIgc2V0cyB3ZXJlIGFkZGVkIGluIDYuMToKLQotICBTRVQgRklMRSBDSEFS QUNURVItU0VUIHsgQ1A4NjksIEVMT1Q5MjcsIEdSRUVLLUlTTyB9Ci0gIFNFVCBUUkFOU0ZFUiBD SEFSQUNURVItU0VUIHsgR1JFRUstSVNPIH0KLQotICAgR1JFRUstSVNPIGlzIElTTyA4ODU5LTcs IHdoaWNoIHRoZSBzYW1lIGFzIEVMT1QgOTI4LgotCi0gICBUaGUgbmV3IEdyZWVrIGNoYXJhY3Rl ciBzZXRzIGFyZSBsaXN0ZWQgaW4gWzU0NF1BcHBlbmRpeCBJSUkuCi0KLSAgNi4zLiBBZGRpdGlv bmFsIExhdGluLTIgQ2hhcmFjdGVyIFNldHMKLQotICAgVGhlIGZvbGxvd2luZyBoYXZlIGJlZW4g YWRkZWQgYXMgRklMRSBhbmQgVEVSTUlOQUwgQ0hBUkFDVEVSLVNFVHM6Ci0KLSAgIE1BWk9WSUEt UEMKLSAgICAgICAgICBBIFBDIGNvZGUgcGFnZSB1c2VkIGluIFBvbGFuZCwgZXF1aXZhbGVudCB0 byBDUDQzNywgYnV0IHdpdGggMTgKLSAgICAgICAgICBzdWJzdGl0dXRpb25zIG5lZWRlZCBmb3Ig UG9saXNoLgotCi0gICBDUDEyNTAKLSAgICAgICAgICBUaGUgV2luZG93cyBMYXRpbiAyIENvZGUg UGFnZS4gRXF1aXZhbGVudCB0byBJU08gODg1OS0yLCBidXQKLSAgICAgICAgICB3aXRoIGRpZmZl cmVudCBlbmNvZGluZy4KLQotICA2LjQuIEFkZGl0aW9uYWwgQ3lyaWxsaWMgQ2hhcmFjdGVyIFNl dHMKLQotICAgVGhlIGZvbGxvd2luZyBoYXZlIGJlZW4gYWRkZWQgYXMgRklMRSBhbmQgVEVSTUlO QUwgQ0hBUkFDVEVSLVNFVHM6Ci0KLSAgIEJVTEdBUklBLVBDCi0gICAgICAgICAgVGhpcyBpcyB0 aGUgQ3lyaWxsaWMgUEMgY29kZSBwYWdlIHVzZWQgaW4gQnVsZ2FyaWEsIHdoZXJlIGl0IGlzCi0g ICAgICAgICAgY2FsbGVkIENvZGUgUGFnZSA4NTYuIEl0IGlzIGF0dHJpYnV0ZWQgdG8gYSBjb21w YW55IGNhbGxlZAotICAgICAgICAgIERBVEVDLCBJbmMsIGJ1dCBDUDg1NiBpcyBub3QgYSBwcm9w ZXIgZGVzaWduYXRpb24sIHNpbmNlIGl0Ci0gICAgICAgICAgcmVmZXJzIHRvIGEgSGVicmV3IENv ZGUgUGFnZSAoc2VlIHRoZSBJQk0gUmVnaXN0cnkpLgotCi0gICBDUDg1NQotICAgICAgICAgIFRo aXMgUEMgQ29kZSBQYWdlIGNvbnRhaW5zIGFsbCB0aGUgQ3lyaWxsaWMgbGV0dGVycyB0aGF0IGFy ZQotICAgICAgICAgIGFsc28gaW4gSVNPIDg4NTktNSwgYW5kIGlzIHRoZXJlZm9yZSB1c2VmdWwg Zm9yIG5vbi1SdXNzaWFuCi0gICAgICAgICAgQ3lyaWxsaWMgdGV4dCAoVWtyYWluaWFuLCBCZWxh cnVzaWFuLCBldGMpLCB1bmxpa2UgQ1A4NjYsIHdoaWNoCi0gICAgICAgICAgaGFzIGEgc21hbGxl ciByZXBlcnRvaXJlIG9mIEN5cmlsbGljIGxldHRlcnMuCi0KLSAgIENQMTI1MQotICAgICAgICAg IFRoZSBXaW5kb3dzIEN5cmlsbGljIENvZGUgUGFnZS4gRXF1aXZhbGVudCB0byBDUDg1NSwgYnV0 IHdpdGgKLSAgICAgICAgICBkaWZmZXJlbnQgZW5jb2RpbmcuCi0KLSAgIEtPSThSCi0gICAgICAg ICAgQW4gZXh0ZW5zaW9uIHRvICJPbGQgS09JLTgiIHRoYXQgYWRkcyB1cHBlciBhbmQgbG93ZXIg Y2FzZQotICAgICAgICAgIEN5cmlsbGljIGxldHRlciBJbyAobG9va3MgbGlrZSBSb21hbiBFIHdp dGggZGlhZXJlc2lzKSBwbHVzIGEKLSAgICAgICAgICBzZWxlY3Rpb24gb2YgYm94LWRyYXdpbmcg Y2hhcmFjdGVycyB0byBjb2x1bW5zIDggdGhyb3VnaCAxMSwKLSAgICAgICAgICB3aGljaCBhcmUg dmFjYW50IGluIG9yaWdpbmFsIE9sZCBLT0ktOC4gS09JOC1SIGlzIHVzZWQgZm9yIHRoZQotICAg ICAgICAgIFJ1c3NpYW4gbGFuZ3VhZ2UuIEl0IGlzIHNwZWNpZmllZCBpbiBbNTQ1XVJGQyAxNDg5 LgotCi0gICBLT0k4VQotICAgICAgICAgIEEgc2ltaWxhciBleHRlbnNpb24gb2YgT2xkIEtPSS04 LCBidXQgZm9yIFVrcmFpbmlhbi4gSXQgaXMKLSAgICAgICAgICBzcGVjaWZpZWQgaW4gWzU0Nl1S RkMgMjMxOS4KLQotICA2LjUuIEF1dG9tYXRpYyBDaGFyYWN0ZXItU2V0IFN3aXRjaGluZwotCi0g ICBQcmlvciB0byB2ZXJzaW9uIDcuMCwgQy1LZXJtaXQncyBmaWxlIGNoYXJhY3Rlci1zZXQgYWx3 YXlzIGhhZCB0byBiZQotICAgc2V0IGV4cGxpY2l0bHkuIEluIDcuMCBhbmQgbGF0ZXIsIGl0IGlz IHNldCBhdXRvbWF0aWNhbGx5IHdoZW46Ci0KLSAgICAxLiBUaGlzIGZlYXR1cmUgaXMgZW5hYmxl ZCAoYXMgaXQgaXMgdW5sZXNzIHlvdSBkaXNhYmxlIGl0KS4KLSAgICAyLiBBbiBpbmNvbWluZyB0 ZXh0LW1vZGUgdHJhbnNmZXIgaW5jbHVkZXMgYSB0cmFuc2Zlci1jaGFyYWN0ZXItc2V0Ci0gICAg ICAgYW5ub3VuY2VyIGFuZCB5b3UgaGF2ZSBub3QgcHJldmlvdXNseSBnaXZlbiBhIFNFVCBGSUxF Ci0gICAgICAgQ0hBUkFDVEVSLVNFVCBjb21tYW5kLiBJbiB0aGlzIGNhc2UsIEMtS2VybWl0IHN3 aXRjaGVzIHRvIGFuCi0gICAgICAgYXBwcm9wcmlhdGUgZmlsZSBjaGFyYWN0ZXIgc2V0LiBGb3Ig ZXhhbXBsZSwgb24gYW4gSFAtVVgKLSAgICAgICB3b3Jrc3RhdGlvbiwgYW4gaW5jb21pbmcgTGF0 aW4tMSBmaWxlIGF1dG9tYXRpY2FsbHkgc2VsZWN0cwotICAgICAgIEhQLVJvbWFuOCBmb3IgdGhl IGxvY2FsIGNvcHkgb2YgdGhlIGZpbGU7IGluIERhdGEgR2VuZXJhbCBBT1MvVlMsCi0gICAgICAg aXQgd291bGQgc2VsZWN0IERHIEludGVybmF0aW9uYWwuCi0gICAgMy4gWW91IGdpdmUgYSBTRVQg VFJBTlNGRVIgQ0hBUkFDVEVSLVNFVCBjb21tYW5kIHdpdGhvdXQgaGF2aW5nCi0gICAgICAgcHJl dmlvdXNseSBzcGVjaWZpZWQgYSBGSUxFIENIQVJBQ1RFUi1TRVQuIEFuIGFwcHJvcHJpYXRlIGZp bGUKLSAgICAgICBjaGFyYWN0ZXItc2V0IGlzIGNob3NlbiBhdXRvbWF0aWNhbGx5LgotCi0gICBJ biBhZGRpdGlvbiwgd2hlbiB5b3UgZ2l2ZSBhIFNFVCBGSUxFIENIQVJBQ1RFUi1TRVQgY29tbWFu ZCwgdGhlCi0gICBhcHByb3ByaWF0ZSB0cmFuc2ZlciBjaGFyYWN0ZXItc2V0IGlzIGF1dG9tYXRp Y2FsbHkgY2hvc2VuLCB0byBiZSB1c2VkCi0gICB3aGVuIHlvdSBhcmUgc2VuZGluZyBmaWxlcyAo YnV0IHRoaXMgZG9lcyBub3Qgb3ZlcnJpZGUgdGhlIG9uZQotICAgYW5ub3VuY2VkIGJ5IHRoZSBz ZW5kZXIgd2hlbiB5b3UgYXJlIHJlY2VpdmluZyBmaWxlcykuCi0KLSAgIFlvdSBtaWdodCBub3Qg YWdyZWUgYWJvdXQgd2hhdCBpcyAiYXBwcm9wcmlhdGUiLCBzbyBvZiBjb3Vyc2UgeW91IGNhbgot ICAgZGlzYWJsZSBvciBjaGFuZ2UgYWxsIG9mIHRoZSBhYm92ZSBhY3Rpb25zLgotCi0gICBZb3Ug Y2FuIGRpc2FibGUgKG9yIHJlLWVuYWJsZSkgdGhlIG5ldyBhdXRvbWF0aWMgY2hhcmFjdGVyLXNl dAotICAgc3dpdGNoaW5nIGZlYXR1cmUgaW4gZWFjaCBkaXJlY3Rpb24gc2VwYXJhdGVseToKLQot ICAgU0VUIFJFQ0VJVkUgQ0hBUkFDVEVSLVNFVC1TRUxFQ1RJT04geyBBVVRPTUFUSUMsIE1BTlVB TCB9Ci0gICAgICAgICAgQVVUT01BVElDIGlzIHRoZSBkZWZhdWx0LCBjYXVzaW5nIHRoZSBiZWhh dmlvciBkZXNjcmliZWQgYWJvdmUKLSAgICAgICAgICB3aGVuIGFuIGluY29taW5nIGZpbGUgYXJy aXZlcy4gQ2hvb3NlIE1BTlVBTCB0byBkZWZlYXQgdGhpcwotICAgICAgICAgIGJlaGF2aW9yIGFu ZCBmb3JjZSB5b3VyIGN1cnJlbnQgRklMRSBDSEFSQUNURVItU0VUIHNldHRpbmcgdG8gYmUKLSAg ICAgICAgICB1c2VkLCBubyBtYXR0ZXIgd2hhdCBpdCBpcy4gTm90ZSB0aGF0IFNFVCBSRUNFSVZF IENIQVJBQ1RFUi1TRVQKLSAgICAgICAgICBNQU5VQUwgZG9lcyBub3QgZGlzYWJsZSByZWNvZ25p dGlvbiBvZiB0aGUgaW5jb21pbmcgdHJhbnNmZXIKLSAgICAgICAgICBjaGFyYWN0ZXItc2V0IGFu bm91bmNlciwgYW5kIHRyYW5zbGF0aW9uIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcKLSAgICAgICAg ICBjaGFyYWN0ZXItc2V0IHRvIHlvdXIgY3VycmVudCBmaWxlIGNoYXJhY3Rlci1zZXQuIFRvIGRp c2FibGUKLSAgICAgICAgICB0aGF0LCB1c2UgU0VUIEFUVFJJQlVURSBDSEFSQUNURVItU0VUIE9G Ri4KLQotICAgU0VUIFNFTkQgQ0hBUkFDVEVSLVNFVC1TRUxFQ1RJT04geyBBVVRPTUFUSUMsIE1B TlVBTCB9Ci0gICAgICAgICAgQWdhaW4gQVVUT01BVElDIGlzIHRoZSBkZWZhdWx0LCBjYXVzaW5n IHRoZSBiZWhhdmlvciBkZXNjcmliZWQKLSAgICAgICAgICBhYm92ZSB3aGVuIHlvdSBnaXZlIGEg U0VUIHsgRklMRSwgVFJBTlNGRVIgfSBDSEFSQUNURVItU0VUCi0gICAgICAgICAgY29tbWFuZC4g VXNlIE1BTlVBTCB0byBhbGxvdyB5b3UgdG8gc3BlY2lmeSB0aGUgdHJhbnNmZXIgYW5kCi0gICAg ICAgICAgZmlsZSBjaGFyYWN0ZXItc2V0cyBpbmRlcGVuZGVudGx5LgotCi0gICBTSE9XIENIQVJB Q1RFUi1TRVRTCi0gICAgICAgICAgVGVsbHMgc2V0dGluZ3Mgb2YgeyBTRU5ELCBSRUNFSVZFIH0g Q0hBUkFDVEVSLVNFVC1TRUxFQ1RJT04uCi0KLSAgIE5vcm1hbGx5LCBob3dldmVyLCBpdCBpcyBt b3JlIGNvbnZlbmllbnQgdG8gbGVhdmUgYXV0b21hdGljIHN3aXRjaGluZwotICAgYWN0aXZlLCBh bmQgY2hhbmdlIGFueSBhc3NvY2lhdGlvbnMgdGhhdCBhcmUgbm90IGFwcHJvcHJpYXRlIGZvciB5 b3VyCi0gICBhcHBsaWNhdGlvbiwgYXJlYSwgb3IgY291bnRyeS4gVGhlIGNvbW1hbmRzIGFyZToK LQotICAgU0hPVyBBU1NPQ0lBVElPTlMKLSAgICAgICAgICBUaGlzIGNvbW1hbmQgbGlzdHMgYWxs IHRoZSBhc3NvY2lhdGlvbnMgaW4gZWFjaCBkaXJlY3Rpb246IGZvcgotICAgICAgICAgIGVhY2gg cG9zc2libGUgdHJhbnNmZXIgY2hhcmFjdGVyLXNldCwgaXQgbGlzdHMgdGhlIGFzc29jaWF0ZWQK LSAgICAgICAgICBmaWxlIGNoYXJhY3Rlci1zZXQsIGFuZCB2aWNlIHZlcnNhLiBUaGVzZSBhcmUg dHdvIHNlcGFyYXRlIGFuZAotICAgICAgICAgIGluZGVwZW5kZW50IGxpc3RzLgotCi0gICBBU1NP Q0lBVEUgVFJBTlNGRVItQ0hBUkFDVEVSLVNFVCBuYW1lMSBbIG5hbWUyIF0KLSAgICAgICAgICBD aGFuZ2VzIHRoZSBhc3NvY2lhdGlvbiBmb3IgdGhlIHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQgbmFt ZTEgdG8KLSAgICAgICAgICBiZSB0aGUgZmlsZSBjaGFyYWN0ZXItc2V0IG5hbWUyLiBJZiBuYW1l MiBpcyBvbWl0dGVkLCBhdXRvbWF0aWMKLSAgICAgICAgICBzd2l0Y2hpbmcgaXMgZGlzYWJsZWQg Zm9yIHRoaXMgdHJhbnNmZXIgY2hhcmFjdGVyLXNldCBvbmx5LgotCi0gICBBU1NPQ0lBVEUgRklM RS1DSEFSQUNURVItU0VUIG5hbWUxIFsgbmFtZTIgXQotICAgICAgICAgIENoYW5nZXMgdGhlIGFz c29jaWF0aW9uIGZvciB0aGUgZmlsZSBjaGFyYWN0ZXItc2V0IG5hbWUxIHRvIGJlCi0gICAgICAg ICAgdGhlIHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQgbmFtZTIuIElmIG5hbWUyIGlzIG9taXR0ZWQs IGF1dG9tYXRpYwotICAgICAgICAgIHN3aXRjaGluZyBpcyBkaXNhYmxlZCBmb3IgdGhpcyBmaWxl IGNoYXJhY3Rlci1zZXQgb25seS4KLQotICA2LjYuIFVOSUNPREUKLQotICAgQy1LZXJtaXQgNy4w IGFkZHMgc3VwcG9ydCBmb3IgVW5pY29kZSwgdGhlIFVuaXZlcnNhbCBDaGFyYWN0ZXIgU2V0LAot ICAgZm9yOgotCi0gICAgICogRmlsZSBUcmFuc2ZlciAoU0VORCwgUkVDRUlWRSwgR0VULCBldGMp Ci0gICAgICogVGVybWluYWwgY29ubmVjdGlvbiAoQ09OTkVDVCkKLSAgICAgKiBVbmd1YXJkZWQg ZmlsZSBjYXB0dXJlIChMT0cgU0VTU0lPTikKLSAgICAgKiBVbmd1YXJkZWQgZmlsZSB0cmFuc21p c3Npb24gKFRSQU5TTUlUKQotICAgICAqIExvY2FsIGZpbGUgY2hhcmFjdGVyLXNldCBjb252ZXJz aW9uIChUUkFOU0xBVEUpCi0KLSAgIEMtS2VybWl0IGlzIG5vdCwgaG93ZXZlciwgYSAiVW5pY29k ZSBhcHBsaWNhdGlvbiIgaW4gdGhlIHNlbnNlIHRoYXQgaXRzCi0gICBjb21tYW5kcywgbWVzc2Fn ZXMsIG9yIHVzZXIgaW50ZXJmYWNlIGFyZSBVbmljb2RlLiBSYXRoZXIsIGl0IGlzCi0gICAiVW5p Y29kZSBhd2FyZSIgaW4gaXRzIGFiaWxpdHkgdG8gaGFuZGxlIGFuZCBjb252ZXJ0IFVuaWNvZGUg dGV4dCBpbgotICAgdGhlIGNvdXJzZSBvZiBmaWxlIHRyYW5zZmVyIGFuZCB0ZXJtaW5hbCBjb25u ZWN0aW9uLCBhbmQgeW91IGNhbiBhbHNvCi0gICB1c2UgS2VybWl0IHRvIGNvbnZlcnQgbG9jYWwg ZmlsZXMgYmV0d2VlbiBVbmljb2RlIGFuZCBvdGhlciBjaGFyYWN0ZXIKLSAgIHNldHMuIFRMQSdz OgotCi0gIEJNUCAtIEJhc2UgTXVsdGlsaW5ndWFsIFBsYW5lCi0gIEJPTSAtIEJ5dGUgT3JkZXIg TWFyawotICBDSksgLSBDaGluZXNlLCBKYXBhbmVzZSwgYW5kIEtvcmVhbgotICBJU08gLSBJbnRl cm5hdGlvbmFsIFN0YW5kYXJkcyBPcmdhbml6YXRpb24KLSAgVExBIC0gVGhyZWUtTGV0dGVyIEFj cm9ueW0KLSAgVUNTIC0gVW5pdmVyc2FsIENoYXJhY3RlciBTZXQKLSAgVVRGIC0gVUNTIFRyYW5z Zm9ybWF0aW9uIEZvcm1hdAotCi0gICBVbmljb2RlIGFuZCBJU08gMTA2NDYgYXJlIHRoZSBjb29y ZGluYXRlZCBhbmQgY29tcGF0aWJsZSBjb3Jwb3JhdGUgYW5kCi0gICBpbnRlcm5hdGlvbmFsIHN0 YW5kYXJkcyBmb3IgdGhlIFVuaXZlcnNhbCBDaGFyYWN0ZXIgU2V0IChVQ1MpLiBVbmxpa2UKLSAg IHNpbmdsZS1ieXRlIGFuZCBldmVuIG1vc3QgbXVsdGlieXRlIGNoYXJhY3RlciBzZXRzLCB0aGUg VUNTIGNhbgotICAgcmVwcmVzZW50IGFsbCBjaGFyYWN0ZXJzIGluIGV2ZXJ5IGV4aXN0aW5nIHdy aXRpbmcgc3lzdGVtLiBBIGZsYXQKLSAgIHBsYWluLXRleHQgZmlsZSBlbmNvZGVkIGluIHNvbWUg Zm9ybSBvZiBVQ1MgY2FuIGNvbnRhaW4gYW55IG1peHR1cmUgb2YKLSAgIEVuZ2xpc2gsIFNwYW5p c2gsIEl0YWxpYW4sIEdlcm1hbiwgSGVicmV3LCBBcmFiaWMsIEdyZWVrLCBSdXNzaWFuLAotICAg QXJtZW5pYW4sIEdlb3JnaWFuLCBKYXBhbmVzZSwgQ2hpbmVzZSwgS29yZWFuLCBWaWV0bmFtZXNl LCBUaWJldGFuLAotICAgSGluZGksIEJlbmdhbGksIFRhbWlsLCBUaGFpLCBFdGhpb3BpYywgYW5k IHNvIG9uLCBwbHVzIHNjaWVudGlmaWMgYW5kCi0gICBtYXRoZW1hdGljYWwgbm90YXRpb24sIGFz IHdlbGwgYXMgdGV4dHMgaW4gUnVuZXMsIE9naGFtLCBHbGFnb2xpdGljLAotICAgYW5kIG90aGVy IGhpc3RvcmljIHNjcmlwdHMuCi0KLSAgIFRoZSBVQ1MgYWxyZWFkeSBjb3ZlcnMgdGhlc2Ugc2Ny aXB0cyBhbmQgbWFueSBtb3JlLCBidXQgaXQncyBhbgotICAgZXZvbHZpbmcgc3RhbmRhcmQgd2l0 aCBlZmZvcnRzIHVuZGVyd2F5IHRvIGFjY29tbW9kYXRlIGV2ZW4gbW9yZQotICAgbGFuZ3VhZ2Vz IGFuZCB3cml0aW5nIHN5c3RlbXMuIFN1cHBvcnQgaXMgZ3Jvd2luZyBmb3IgbmF0aXZlIFVDUyB1 c2Ugb24KLSAgIG1hbnkgcGxhdGZvcm1zIGFuZCBpbiBtYW55IGFwcGxpY2F0aW9ucy4gVGhlIGdv YWwgb2YgdGhlIGZyYW1lcnMgb2YgdGhlCi0gICBVQ1MgaXMgZm9yIGl0IHRvIHJlcGxhY2UgQVND SUksIHRoZSBJU08gTGF0aW4gQWxwaGFiZXRzLCBJU0NJSSwgVklTQ0lJLAotICAgdGhlIENoaW5l c2UsIEphcGFuZXNlLCBhbmQgS29yZWFuIChDSkspIG11bHRpYnl0ZSBzZXRzLCBldGMsIGFzIHdl bGwgYXMKLSAgIHRoZSBtYW55IHByaXZhdGUgY2hhcmFjdGVyIHNldHMgaW4gdXNlIHRvZGF5LCBp biBvdGhlciB3b3JkcyB0byBiZWNvbWUKLSAgICp0aGUqIFVuaXZlcnNhbCBDaGFyYWN0ZXIgU2V0 LgotCi0gICBVbnRpbCB0aGF0IHRpbWUsIGhvd2V2ZXIsIGNvbnZlcnNpb25zIGJldHdlZW4gZXhp c3Rpbmcgc2V0cyBhbmQgdGhlIFVDUwotICAgd2lsbCBiZSBuZWNlc3Nhcnkgd2hlbiBtb3Zpbmcg dGV4dCBiZXR3ZWVuIHBsYXRmb3JtcyBhbmQgYXBwbGljYXRpb25zLgotICAgTm93IEtlcm1pdCBj YW4gaGVscC4KLQotICAgIDYuNi4xLiBPdmVydmlldyBvZiBVbmljb2RlCi0KLSAgIEZvciBhIG1v cmUgY29tcGxldGUgcGljdHVyZSwgcGxlYXNlIHZpc2l0OgotCi0gIFs1NDddaHR0cDovL3d3dy51 bmljb2RlLm9yZy8KLQotICAgYW5kIGFjY2VzcyB0aGUgdmFyaW91cyBvbmxpbmUgaW50cm9kdWN0 aW9ucywgRkFRcywgdGVjaG5pY2FsIHJlcG9ydHMsCi0gICBhbmQgb3RoZXIgaW5mb3JtYXRpb24u IEZvciBncmVhdGVyIGRlcHRoLCBvcmRlciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YKLSAgIHRoZSBw dWJsaXNoZWQgVW5pY29kZSBTdGFuZGFyZC4gVGhlIGZvbGxvd2luZyBvdmVydmlldyBjb250YWlu cyBhIGdyZWF0Ci0gICBtYW55IG92ZXJzaW1wbGlmaWNhdGlvbnMgYW5kIHBlcmhhcHMgYW4gb3Bp bmlvbiBvciB0d28uCi0KLSAgIEF0IHByZXNlbnQsIHRoZSBVQ1MgaXMgYSAxNi1iaXQgKDItYnl0 ZSkgY2hhcmFjdGVyIHNldCwgYnV0IHdpdGgKLSAgIHByb3Zpc2lvbnMgdG8gZ3JvdyB0byBhIDQt Ynl0ZSBzZXQuIFVDUy0yIHJlZmVycyB0byB0aGUgdHdvLWJ5dGUgc2V0LAotICAgYWxzbyBjYWxs ZWQgdGhlIEJhc2UgTXVsdGlsaW5ndWFsIFBsYW5lIChCTVApLCBpbiB3aGljaCBlYWNoIGNoYXJh Y3RlcgotICAgaGFzIDE2IGJpdHMsIGFuZCB0aGVyZWZvcmUgdGhlcmUgYXJlIDJeMTYgPSA2NTUz NiBwb3NzaWJsZSBjaGFyYWN0ZXJzLgotICAgVGhlIGZpcnN0IDEyOCBjaGFyYWN0ZXJzIGFyZSB0 aGUgc2FtZSBhcyBVUyBBU0NJSSAoQzAgY29udHJvbAotICAgY2hhcmFjdGVycyBhbmQgREVMIGlu Y2x1ZGVkKSwgdGhlIG5leHQgMzIgYXJlIHRoZSBDMSBjb250cm9sIGNoYXJhY3RlcnMKLSAgIG9m IElTTyA2NDI5LCBhbmQgdGhlIG5leHQgOTYgYXJlIHRoZSBSaWdodCBIYWxmIG9mIElTTyA4ODU5 LTEgTGF0aW4KLSAgIEFscGhhYmV0IDEuIFRoZSByZW1haW5pbmcgdGVucyBvZiB0aG91c2FuZHMg b2YgY2hhcmFjdGVycyBhcmUgYXJyYW5nZWQKLSAgIG5ld2x5IGZvciB0aGUgVUNTLCB1c3VhbGx5 IChidXQgbm90IGFsd2F5cykgaW4gc2VjdGlvbnMgY29ycmVzcG9uZGluZwotICAgdG8gZXhpc3Rp bmcgc3RhbmRhcmRzLCBzdWNoIGFzIElTTyBMYXRpbi9DeXJpbGxpYywgb2Z0ZW4gcGx1cwotICAg YWRkaXRpb25hbCBjaGFyYWN0ZXJzIG5vdCBhcHBlYXJpbmcgaW4gdGhlIGV4aXN0aW5nIHN0YW5k YXJkcyBkdWUgdG8KLSAgIGxhY2sgb2Ygc3BhY2UgKG9yIG90aGVyIHJlYXNvbnMpLgotCi0gICBJ U08gMTA2NDYgYWxsb3dzIGZvciBhZGRpdGlvbmFsIHBsYW5lcywgZS5nLiBmb3IgRWd5cHRpYW4g aGllcm9nbHlwaGljcwotICAgb3IgYW5jaWVudCAob3Igb3RoZXIgZXNvdGVyaWMpIENKSyBjaGFy YWN0ZXJzLCBidXQgdGhlc2UgcGxhbmVzIGFyZSBub3QKLSAgIHlldCBkZWZpbmVkIGFuZCBzbyB3 ZSB3aWxsIHNheSBub3RoaW5nIG1vcmUgYWJvdXQgdGhlbSBoZXJlLCBleGNlcHQKLSAgIHRoYXQg dGhlaXIgdXNlIHdpbGwgcmVxdWlyZSB0aGUgNC1ieXRlIGZvcm0gb2YgVUNTLCBjYWxsZWQgVUNT LTQsIGluCi0gICBzb21lIGZvcm0gKG1vcmUgYWJvdXQgImZvcm1zIiBpbiBbNTQ4XVNlY3Rpb24g Ni42LjIpLgotCi0gICBVbmljb2RlIGFuZCBJU08gMTA2NDYgYXJlIGNvbnN0YW50bHkgdW5kZXIg cmV2aXNpb24sIG1haW5seSB0byBhZGQgbmV3Ci0gICBjaGFyYWN0ZXJzLiBUaGUgVW5pY29kZSBy ZXZpc2lvbiBpcyBkZW5vdGVkIGJ5IGEgdmVyc2lvbiBudW1iZXIsIHN1Y2gKLSAgIGFzIDEuMCwg MS4xLCAyLjAsIDMuMC4gVGhlIElTTyAxMDY0NiBzdGFuZGFyZCByZXZpc2lvbiBpcyBpZGVudGlm aWVkIGJ5Ci0gICBFZGl0aW9uIChzdWNoIGFzIElTTyAxMDY0Ni0xIDE5OTMpLCBwbHVzIHJlZmVy ZW5jZSB0byBhbnkgYW1lbmRtZW50cy4KLSAgIFRoZSBmaXJzdCB2ZXJzaW9ucyBvZiB0aGVzZSBz dGFuZGFyZHMgaW5jbHVkZWQgZW5jb2RpbmdzIGZvciBLb3JlYW4KLSAgIEhhbmd1bCBzeWxsYWJs ZXMgKEphbW9zKTsgdGhlc2UgZW5jb2RpbmdzIHdlcmUgY2hhbmdlZCBpbiB2ZXJzaW9uIDEuMQot ICAgb2YgVW5pY29kZSBhbmQgYnkgQW1lbmRtZW50IDUgdG8gSVNPIDEwNjQ2LTEuIFRoZSBVbmlj b2RlIFRlY2huaWNhbAotICAgQ29tbWl0dGVlIGFuZCB0aGUgSVNPIGFja25vd2xlZGdlIHRoYXQg dGhpcyB3YXMgYSBiYWQgdGhpbmcgdG8gZG8sIGFuZAotICAgcHJvbWlzZSBuZXZlciBjaGFuZ2Ug ZW5jb2RpbmdzIG9yIGNoYXJhY3RlciBuYW1lcyBhZ2Fpbiwgc2luY2UgdGhpcwotICAgcG9zZXMg c2VyaW91cyBwcm9ibGVtcyBmb3IgY29uZm9ybWFuY2UgYW5kIGRhdGEgaW50ZXJjaGFuZ2UuCi0K LSAgIEEgVUNTLTIgdmFsdWUgaXMgY3VzdG9tYXJpbHkgd3JpdHRlbiBsaWtlIHRoaXM6Ci0KLSAg VSt4eHh4Ci0KLSAgIHdoZXJlICJ4eHh4IiByZXByZXNlbnRzIGZvdXIgaGV4YWRlY2ltYWwgZGln aXRzLCAwLTkgYW5kIEEtRi4gRm9yCi0gICBleGFtcGxlLCBVKzAwNDEgaXMgIkEiLCBVKzAwQzEg aXMgQS1hY3V0ZSwgVSswNDJGIGlzIHVwcGVyY2FzZSBDeXJpbGxpYwotICAgIllhIiwgVStGQjRG IGlzIEhlYnJldyBMaWdhdHVyZSBBbGVmIExhbWVkLCBhbmQgVStGRkZEIGlzIHRoZSBzcGVjaWFs Ci0gICBjaGFyYWN0ZXIgdGhhdCBtZWFucyAibm90IGEgY2hhcmFjdGVyIi4KLQotICAgTW9zdCBj aGFyYWN0ZXJzIGZyb20gd2lkZWx5LXVzZWQgYWxwaGFiZXRpYyB3cml0aW5nIHN5c3RlbXMgc3Vj aCBhcyB0aGUKLSAgIFdlc3QgRXVyb3BlYW4gb25lcywgQ3lyaWxsaWMsIEdyZWVrLCBIZWJyZXcs IFZpZXRuYW1lc2UsIGV0YywgYXJlCi0gICBhdmFpbGFibGUgaW4gInByZWNvbXBvc2VkIiBmb3Jt OyBmb3IgZXhhbXBsZSBVcHBlcmNhc2UgTGF0aW4gTGV0dGVyIEEKLSAgIHdpdGggQWN1dGUgQWNj ZW50IGlzIGEgc2luZ2xlIGNoYXJhY3RlciAoYXMgaXQgaXMgaW4gTGF0aW4tMSkuIEhvd2V2ZXIs Ci0gICB0aGUgVUNTIGFsc28gcGVybWl0cyBjb21wb3NpdGlvbiBvZiBhIGJhc2UgY2hhcmFjdGVy IHdpdGggb25lIG9yIG1vcmUKLSAgIG5vbnNwYWNpbmcgZGlhY3JpdGljcy4gVGhpcyBtZWFucyB0 aGUgc2FtZSBjaGFyYWN0ZXIgY2FuIGJlIHJlcHJlc2VudGVkCi0gICBpbiBtb3JlIHRoYW4gb25l IHdheSwgd2hpY2ggY2FuIHByZXNlbnQgcHJvYmxlbXMgaW4gbWFueSBhcHBsaWNhdGlvbgotICAg YXJlYXMsIGluY2x1ZGluZyB0cmFuc2ZlciBhbmQgY2hhcmFjdGVyLXNldCBjb252ZXJzaW9uIG9m IHRleHQuCi0KLSAgIENvbnZlcnNpb24gZnJvbSBBU0NJSSBvciBMYXRpbi0xIHRvIFVDUy0yIHRl eHQgaXMgInRyaXZpYWwiOiBzaW1wbHkKLSAgIGluc2VydCBhIE5VTCAoMCkgYnl0ZSBiZWZvcmUg ZWFjaCBBU0NJSSBvciBMYXRpbi0xIGJ5dGUuIENvbnZlcnRpbmcgaW4KLSAgIHRoZSByZXZlcnNl IGRpcmVjdGlvbiAocHJvdmlkZWQgdGhlIFVDUy0yIGZpbGUgY29udGFpbnMgb25seSBVKzAwMDAg dG8KLSAgIFUrMDBGRikgaXMgZXF1YWxseSBzaW1wbGUgKGlmIHdlIGlnbm9yZSB0aGUgaXNzdWUg b2YgY29tcG9zaXRpb24pOgotICAgcmVtb3ZlIGV2ZXJ5IHNlY29uZCAoTlVMKSBieXRlLiBDb252 ZXJzaW9uIG9mIG90aGVyIGNoYXJhY3RlciBzZXRzIHRvCi0gICBhbmQgZnJvbSBVQ1MsIGhvd2V2 ZXIsIHJlcXVpcmVzIHRhYmxlcyBvciBhbGdvcml0aG1zIHNwZWNpZmljIHRvIGVhY2gKLSAgIHNl dC4gTmV2ZXJ0aGVsZXNzLCB0aGUgcmVsYXRpdmVseSB0cmFuc3BhcmVudCB1cHdhcmRzIGNvbXBh dGliaWxpdHkKLSAgIGZyb20gQVNDSUkgYW5kIExhdGluLTEsIGluIHdoaWNoIGEgdmVyeSBsYXJn ZSBzaGFyZSBvZiB0aGUgd29ybGQncwotICAgdGV4dHVhbCBkYXRhIGlzIGVuY29kZWQsIGdpdmVz IHRoZSBVQ1MgYW4gZW50cmVlIG9udG8gZXhpc3RpbmcKLSAgIHBsYXRmb3Jtcy4KLQotICAgQnV0 IHRoZSAyLWJ5dGUgZm9ybWF0IGFuZCB0aGUgcHJlcG9uZGVyYW5jZSBvZiBOVUwgYW5kIG90aGVy IGNvbnRyb2wKLSAgIGJ5dGVzIGluIFVDUy0yIHRleHQgcG9zZSBwcm9ibGVtcyBmb3IgY3VycmVu dCBhcHBsaWNhdGlvbnMgYW5kCi0gICB0cmFuc21pc3Npb24gbWV0aG9kcy4gQW5kIHRvIG1ha2Ug bWF0dGVycyB3b3JzZSwgZGlmZmVyZW50IGhhcmR3YXJlCi0gICBwbGF0Zm9ybXMgc3RvcmUgVUNT LTIgY2hhcmFjdGVycyBpbiBkaWZmZXJlbnQgYnl0ZSBvcmRlci4gVGh1cyBhIFVDUy0yCi0gICBm aWxlIHRyYW5zZmVycmVkIGJ5IEZUUCAob3IgYWNjZXNzZWQgdmlhIE5GUywgZXRjKSBiZXR3ZWVu IHR3bwotICAgY29tcHV0ZXJzIHdpdGggZGlmZmVyZW50IGFyY2hpdGVjdHVyZSBtaWdodCBoYXZl IGl0cyBieXRlcyBpbiB0aGUgd3JvbmcKLSAgIG9yZGVyIChvciB3b3JzZTsgc2VlIFs1NDldU2Vj dGlvbiA2LjYuNS4xICkuCi0KLSAgICA2LjYuMi4gVUNTIEJ5dGUgT3JkZXIKLQotICAgQ29uc2lk ZXIgdGhlIG51bWJlciAxLiBJbiBhbiA4LWJpdCBieXRlLCB0aGlzIHdvdWxkIGJlIHJlcHJlc2Vu dGVkIGJ5Ci0gICB0aGUgZm9sbG93aW5nIHNlcmllcyBvZiAwLSBhbmQgMS1iaXRzOgotCi0gICst LS0tLS0tLS0tLS0tLS0tLSsKLSAgfCAwIDAgMCAwIDAgMCAwIDEgfAotICArLS0tLS0tLS0tLS0t LS0tLS0rCi0KLSAgIFRoZXJlZm9yZSBpbiBhIDE2LWJpdCAid29yZCIgdGhlIHJlcHJlc2VudGF0 aW9uIG1pZ2h0IGJlOgotCi0gICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSsK LSAgfCAwIDAgMCAwIDAgMCAwIDAgfCAwIDAgMCAwIDAgMCAwIDEgfAotICArLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rCi0KLSAgIE5vdyBjb25zaWRlciB0aGUgbnVtYmVyIDI1 Niwgd2hpY2ggaXMgMiB0byB0aGUgOHRoIHBvd2VyLiBUaGUgYmluYXJ5Ci0gICByZXByZXNlbnRh dGlvbiBpcyAxMDAwMDAwMDAgKDEgZm9sbG93ZWQgYnkgOCB6ZXJvcykuIDI1NiB3b3VsZCBnbyBp bnRvCi0gICBhIDE2LWJpdCB3b3JkIGxpa2UgdGhpczoKLQotICArLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0rCi0gIHwgMCAwIDAgMCAwIDAgMCAxIHwgMCAwIDAgMCAwIDAgMCAw IHwKLSAgKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKwotCi0gICBXaGVuIGEg Y29tcHV0ZXIgd29ya3MgdGhpcyB3YXksIGl0IGlzIHNhaWQgdG8gYmUgQmlnIEVuZGlhbiwgbWVh bmluZyBpdAotICAgcHV0cyB0aGUgbW9zdCBzaWduaWZpY2FudCAoYmlnZ2VzdCkgYnl0ZSBmaXJz dCAob24gdGhlICJsZWZ0IikgaW4gYQotICAgMTYtYml0IHdvcmQsIGFuZCB0aGUgbGVhc3Qgc2ln bmlmaWNhbnQgYnl0ZSBzZWNvbmQgKG9uIHRoZSByaWdodCkuCi0KLSAgIEhvd2V2ZXIsIHNvbWUg b3RoZXIgY29tcHV0ZXJzIGhhdmUgdGhlIG9wcG9zaXRlIGFycmFuZ2VtZW50LCBjYWxsZWQKLSAg IExpdHRsZSBFbmRpYW4sIGluIHdoaWNoIDEgaXM6Ci0KLSAgKy0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tKwotICB8IDAgMCAwIDAgMCAwIDAgMSB8IDAgMCAwIDAgMCAwIDAgMCB8 Ci0gICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSsKLQotICAgYW5kIDI1NiBp czoKLQotICArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rCi0gIHwgMCAwIDAg MCAwIDAgMCAwIHwgMCAwIDAgMCAwIDAgMCAxIHwKLSAgKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tKwotCi0gICBDb21wdXRlcnMgc3VjaCBhcyBTcGFyYywgTUlQUywgUEEtUklT QywgYW5kIFBvd2VyUEMgYXJlIEJpZyBFbmRpYW4sCi0gICB3aGVyZWFzIHRoZSBQQyBhbmQgdGhl IEFscGhhIGFyZSBMaXR0bGUgRW5kaWFuLiBFbmRpYW5uZXNzIGhhcyBuZXZlcgotICAgYmVlbiBh biBpc3N1ZSB3aXRoIDctIG9yIDgtYml0IGNoYXJhY3RlcnMsIGJ1dCBpdCBpcyB3aXRoIFVDUwot ICAgY2hhcmFjdGVycy4gSXQgY2FuIGJlIGEgdHJpY2t5IGJ1c2luZXNzIHRvIHNoYXJlIG9yIHRy YW5zZmVyIGEgVUNTLTIKLSAgIGZpbGUgYmV0d2VlbiB0d28gZGlmZmVyZW50IGtpbmRzIG9mIGNv bXB1dGVycy4KLQotICAgVG8gYWxsZXZpYXRlIChidXQgbm90IGVudGlyZWx5IHNvbHZlKSB0aGUg cHJvYmxlbSwgVUNTLTIgZmlsZXMgYXJlCi0gICBzdXBwb3NlZCB0byBiZWdpbiB3aXRoIHRoZSBV bmljb2RlIGNoYXJhY3RlciBVK0ZFRkYsIFplcm8tV2lkdGgKLSAgIE5vLUJyZWFrIFNwYWNlICha V05CUykuIFRoaXMgaXMgYSBraW5kIG9mICJuby1vcCIgKG5vdGU6IGFueSBzdWNoCi0gICBhc3Nl cnRpb24gbXVzdCBub3JtYWxseSBiZSBxdWFsaWZpZWQgd2l0aCBtYW55ICJidXQgaWZzIiBhbmQg ImV4Y2VwdHMiCi0gICB3aGljaCBhcmUgb21pdHRlZCBoZXJlIGluIHRoZSBpbnRlcmVzdCBvZiBi cmV2aXR5KS4gSWYgdGhlIGJ5dGVzIGFyZQotICAgcmV2ZXJzZWQgdGhlIFpXTkJTIGJlY29tZXMg VStGRkZFLCB3aGljaCBpcyBub3QgKGFuZCBuZXZlciB3aWxsIGJlKSBhCi0gICBkZWZpbmVkIFVD UyBjaGFyYWN0ZXIuIFUrRkVGRiBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgVUNTIGZpbGUgaXMKLSAg IHRoZXJlZm9yZSBjYWxsZWQgYSBCeXRlIE9yZGVyIE1hcmssIG9yIEJPTS4KLQotICAgQW55IGFw cGxpY2F0aW9uIHRoYXQgY3JlYXRlcyBhIFVDUy0yIChvciBVVEYtMTYsIG9yIFVDUy00KSBmaWxl IHNob3VsZAotICAgaW5jbHVkZSBhIEJPTSwgYW5kIGFueSBhcHBsaWNhdGlvbiB0aGF0IHJlYWRz IG9uZSBzaG91bGQgdGVzdCBmb3IgYQotICAgQk9NLCBhbmQgaWYgb25lIGlzIGZvdW5kLCBpbmZl ciB0aGUgYnl0ZSBvcmRlciBmcm9tIGl0LiBUaGlzIGlzIGEKLSAgIGNvbnZlbnRpb24sIGhvd2V2 ZXIgLS0gbm90IGEgc3RhbmRhcmQgb3IgYSByZXF1aXJlbWVudCAtLSBhbmQKLSAgIGFwcGxpY2F0 aW9ucyB2YXJ5IGluIHRoZWlyIGFiaWxpdHkgdG8gaGFuZGxlIEJPTXMgYW5kICJiYWNrd2FyZHMi IFVDUy0yCi0gICBmaWxlcy4KLQotICAgTm90ZSB0aGF0IGEgQk9NIGlzIHVzZWZ1bCBvbmx5IGF0 IHRoZSBiZWdpbm5pbmcgb2YgYSBmaWxlLiBJZiB5b3UKLSAgIGFwcGVuZCBvbmUgVUNTLTIgZmls ZSB0byBhbm90aGVyLCBhbmQgYm90aCBoYXZlIEJPTXMsIHRoZSBpbnRlcm5hbCBCT00KLSAgIGlz IG5vIGxvbmdlciBhIEJPTS4gQW5kIGlmIHRoZSBieXRlIG9yZGVycyBvZiB0aGUgdHdvIGZpbGVz IGRpZmZlciwKLSAgIHRoZW4gZWl0aGVyIHRoZSBmaXJzdCBwYXJ0IG9yIHRoZSBzZWNvbmQgd2ls bCBiZSBiYWNrd2FyZHMuIChWYXJpb3VzCi0gICBvdGhlciB1bmRlc2lyYWJsZSBlZmZlY3RzIG1p Z2h0IGFsc28gb2NjdXIsIG5vdCBkaXNjdXNzZWQgaGVyZS4pCi0KLSAgICA2LjYuMi4gVUNTIFRy YW5zZm9ybWF0aW9uIEZvcm1hdHMKLQotICAgVUNTIHRleHR1YWwgZGF0YSBjYW4gYmUgbW9kaWZp ZWQgaW4gdmFyaW91cyB3YXlzIGZvciB0cmFuc21pc3Npb24gb3IKLSAgIHN0b3JhZ2UuIEFueSBv ZmZpY2lhbGx5IHNhbmN0aW9uZWQgbWV0aG9kIG9mIGRvaW5nIHRoaXMgaXMgY2FsbGVkIGEgVUNT Ci0gICBUcmFuc2Zvcm1hdGlvbiBGb3JtYXQsIG9yIFVURi4gT25lIHN1Y2ggbWV0aG9kLCBjYWxs ZWQgVVRGLTE2LCBpcwotICAgZXNzZW50aWFsbHkgaWRlbnRpY2FsIHdpdGggVUNTLTIgZXhjZXB0 IHRoYXQgaXQgZGVzaWduYXRlcyBjZXJ0YWluIGNvZGUKLSAgIHZhbHVlcyBhcyAiZXNjYXBlIHNl cXVlbmNlcyIgKGNhbGxlZCBzdXJyb2dhdGUgcGFpcnMpIHRvIGFjY2VzcwotICAgY2hhcmFjdGVy cyBpbiBvdGhlciBwbGFuZXMgd2l0aG91dCBoYXZpbmcgdG8gdXNlIGZ1bGwgVUNTLTQuIFdlIHdv bid0Ci0gICBkaXNjdXNzIFVURi0xNiBmdXJ0aGVyIGhlcmUsIHNpbmNlIGF0IHRoZSBtb21lbnQg dGhlcmUgYXJlIG5vIG90aGVyCi0gICBwbGFuZXMuIFNldmVyYWwgb3RoZXIgVVRGJ3MgKHN1Y2gg YXMgVVRGLTEsIFVURi0yLCBhbmQgVVRGLTcpIGhhdmUKLSAgIGZhbGxlbiBpbnRvIGRpc3VzZSBh bmQgYXJlIG5vdCBkaXNjdXNzZWQgaGVyZS4gVGhlIG1vc3QgaW1wb3J0YW50Ci0gICB0cmFuc2Zv cm1hdGlvbiBmb3JtYXQgdG9kYXkgaXMgVVRGLTguCi0KLSAgIFVURi04LCBzbyBjYWxsZWQgYmVj YXVzZSBpdCAic2VyaWFsaXplcyIgVUNTLTIgZGF0YSBpbnRvIGEgc3RyZWFtIG9mCi0gICA4LWJp dCBieXRlcywgaXMgZGVzaWduZWQgdG8gYWxsb3cgdGhlIFVDUyB0byB3b3JrIHdpdGggcHJlc2Vu dC1kYXkKLSAgIGNvbW11bmljYXRpb25zIGdlYXIsIGNvbXB1dGVycywgYW5kIHNvZnR3YXJlLiBU aGUgbW9zdCBpbXBvcnRhbnQKLSAgIHByb3BlcnRpZXMgb2YgVVRGLTggYXJlIHRoYXQgYnl0ZSBv cmRlciBpcyBjb25zdGFudCAobm8gYnl0ZSBzd2FwcGluZykKLSAgIGFuZCBhbGwgKDctYml0KSBB U0NJSSBjaGFyYWN0ZXJzIHJlcHJlc2VudCB0aGVtc2VsdmVzLiBUaGVyZWZvcmUKLSAgIGNvbnZl cnNpb24gYmV0d2VlbiBBU0NJSSBhbmQgVVRGLTggaXMgbm8gY29udmVyc2lvbiBhdCBhbGwsIGFu ZAotICAgYXBwbGljYXRpb25zIG9yIHBsYXRmb3JtcyAoc3VjaCBhcyBQbGFuIDkgZnJvbSBCZWxs IExhYnMpIHRoYXQgdXNlCi0gICBVVEYtOCAiZm9yIGV2ZXJ5dGhpbmciIGNhbiBzdGlsbCBydW4g dHJhZGl0aW9uYWwgQVNDSUktb25seQotICAgYXBwbGljYXRpb25zIGFuZCBiZSBhY2Nlc3NlZCBm cm9tIHRoZW0uIEluIHBhcnRpY3VsYXIsIHVubGlrZSBVQ1MtMiwKLSAgIEFTQ0lJIGNoYXJhY3Rl cnMgYXJlIG5vdCBwYWRkZWQgd2l0aCBOVUwgYnl0ZXMuIEJ1dCBhbHNvIHVubGlrZSBVQ1MtMiwK LSAgIHRoZXJlIGlzIG5vIHRyYW5zcGFyZW5jeSBmb3IgTGF0aW4tMSBvciBhbnkgb3RoZXIgbm9u LUFTQ0lJIGNoYXJhY3RlcgotICAgc2V0LiBFdmVyeSBub24tQVNDSUkgVUNTLTIgY2hhcmFjdGVy IGlzIHJlcHJlc2VudGVkIGJ5IGEgc2VxdWVuY2Ugb2YgMgotICAgb3IgMyBVVEYtOCBieXRlcy4g VGh1cyBVVEYtOCBpcyBtb3JlIGNvbXBhY3QgdGhhbiBVQ1MtMiBmb3IgdGV4dAotICAgY29udGFp bmluZyBhIHByZXBvbmRlcmFuY2Ugb2YgQUJDJ3MgKG9yIG90aGVyIEFTQ0lJIGNoYXJhY3RlcnMp LCBhYm91dAotICAgdGhlIHNhbWUgYXMgVUNTLTIgZm9yIG90aGVyIGFscGhhYmV0aWMgc2NyaXB0 cyAoQ3lyaWxsaWMsIFJvbWFuLCBHcmVlaywKLSAgIGV0YyksIGFuZCBsYXJnZXIgdGhhbiBVQ1Mt MiBmb3IgQ2hpbmVzZSwgSmFwYW5lc2UsIGFuZCBLb3JlYW4uCi0KLSAgIFRoZSBVVEYtOCB1bmNv ZGluZyBvZiB0aGUgVUNTIGhhcyBiZWVuIGFkb3B0ZWQgYnkgdGhlIEludGVybmV0IGFzIHRoZQot ICAgcHJlZmVycmVkIGNoYXJhY3RlciBzZXQgZm9yIG5ldyBhcHBsaWNhdGlvbnMsIGFuZCBpcyBn cmFkdWFsbHkgYmVpbmcKLSAgIHJldHJvZml0dGVkIGludG8gdHJhZGl0aW9uYWwgYXBwbGljYXRp b25zIGxpa2UgRlRQIChbNTUwXVJGQyAyNjQwKS4KLQotICAgIDYuNi4zLiBDb25mb3JtYW5jZSBM ZXZlbHMKLQotICAgQWx0aG91Z2ggdGhlIFVuaWNvZGUgYW5kIElTTyAxMDY0NiBzdGFuZGFyZHMg Ym90aCBkZXNjcmliZSB0aGUgc2FtZQotICAgY2hhcmFjdGVyIHNldCwgdGhlc2Ugc3RhbmRhcmRz IGRpZmZlciBpbiBtYW55IHdheXMsIGluY2x1ZGluZyB0aGVpcgotICAgc3RhdGVkIHJlcXVpcmVt ZW50cyBmb3IgY29uZm9ybWFuY2UgYW5kIHRoZWlyIGNsYXNzaWZpY2F0aW9uIG9mCi0gICBjb25m b3JtYW5jZSBsZXZlbHMuCi0KLSAgIEtlcm1pdCBoYXMgYWx3YXlzIGFiaWRlZCBieSBJU08gY2hh cmFjdGVyLXNldCBzdGFuZGFyZHMsIGluY2x1ZGluZyBJU08KLSAgIGNoYXJhY3Rlci1zZXQgZGVz aWduYXRpb24gYW5kIGludm9jYXRpb24gbWV0aG9kcy4gSW4gYWRhcHRpbmcgVW5pY29kZSwKLSAg IHRoZXJlZm9yZSwgd2UgaGFkIHRvIGNob29zZSBmcm9tIGFtb25nIHRoZSBhdmFpbGFibGUgSVNP IGRlc2lnbmF0aW9ucwotICAgd2hpY2gsIGluIHR1cm4sIGNvcnJlc3BvbmQgd2l0aCBJU08gMTA2 NDYgY29uZm9ybWFuY2UgbGV2ZWxzLiBBdAotICAgcHJlc2VudCwgS2VybWl0IGNsYWltcyB0aGUg bG93ZXN0IGNvbmZvcm1hbmNlIGxldmVsLCAxLCBtZWFuaW5nCi0gICAocm91Z2hseSkgdGhhdCBp dCBkb2VzIG5vdCBoYW5kbGUgY29tYmluaW5nIGZvcm1zIGFuZCBpdCBkb2VzIG5vdAotICAgaGFu ZGxlIEtvcmVhbiBIYW5ndWwgSmFtb3MgKGp1c3QgYXMsIGF0IHByZXNlbnQsIGl0IGRvZXMgbm90 IGhhbmRsZQotICAgS29yZWFuIGluIGdlbmVyYWwpLiBOb3RlIHRoYXQgSVNPIDEwNjQ2IENvbmZv cm1hbmNlIExldmVscyAxIGFuZCAyCi0gICBzaWRlc3RlcCB0aGUgaXNzdWUgb2YgdGhlIGNvZGUg Y2hhbmdlcyBmb3IgS29yZWFuIEhhbmd1bCBieSBhbm5vdW5jaW5nCi0gICBub24tc3VwcG9ydCBm b3IgSGFuZ3VsIHJlZ2FyZGxlc3Mgb2YgZW5jb2RpbmcuCi0KLSAgIElTTyAxMDY0NiBDb25mb3Jt YW5jZSBMZXZlbCAxIGlzIGFwcHJveGltYXRlbHkgZXF1aXZhbGVudCB0byBVbmljb2RlCi0gICBO b3JtYWxpemF0aW9uIEZvcm0gQyAoZGVzY3JpYmVkIGluIFVuaWNvZGUgVGVjaG5pY2FsIFJlcG9y dCAxNSwKLSAgIGluY29ycG9yYXRlZCBpbnRvIFVuaWNvZGUgMy4wKS4KLQotICAgQXMgbm90ZWQg aW4gWzU1MV1TZWN0aW9uIDYuNi4yLCBLZXJtaXQgZG9lcyBub3QgY2xhaW0gdG8gc3VwcG9ydCBV VEYtMTYKLSAgIGF0IHRoZSBwcmVzZW50IHRpbWUsIGhlbmNlIHRoZSBVQ1MtMiBub21lbmNsYXR1 cmUuIEtlcm1pdCB0cmVhdHMKLSAgIHN1cnJvZ2F0ZXMganVzdCBhcyBpZiB0aGV5IHdlcmUgYW55 IG90aGVyIFVDUy0yIGNoYXJhY3RlcnMsIHJhdGhlciB0aGFuCi0gICBhcyBlc2NhcGVzIHRvIG90 aGVyIHBsYW5lcywgd2hpY2ggbWVhbnMgdGhhdCAoZXhjZXB0IHdoZW4gY29udmVydGluZwotICAg YmV0d2VlbiBVQ1MtMiBhbmQgVVRGLTgpIHRoZXkgYXJlIHRyYW5zbGF0ZWQgdG8gImVycm9yIiBj aGFyYWN0ZXJzLAotICAgc2luY2UgKGEpIG5vIG90aGVyIHBsYW5lcyBhcmUgZGVmaW5lZCB5ZXQg KGFuZCBpZiB0aGV5IHdlcmUsIG5vIG90aGVyCi0gICBjaGFyYWN0ZXIgc2V0cyBzdXBwb3J0ZWQg YnkgS2VybWl0IHdvdWxkIGVuY29kZSB0aGVpciBjaGFyYWN0ZXJzKSwgYW5kCi0gICAoYikgbm8g dmFsaWQgc3Vycm9nYXRlIGNoYXJhY3RlciBjb3JyZXNwb25kcyB0byBhbnkgb3RoZXIgVUNTLTIK LSAgIGNoYXJhY3Rlci4KLQotICAgQSBtaW5vciB5ZXQgc2lnbmlmaWNhbnQgYXNwZWN0IG9mIFVu aWNvZGUgMy4wIGFuZCBzb21lIHJlY2VudAotICAgcGVydHVyYmF0aW9uIG9mIElTTyAxMDY0Ni0x IChwcm9iYWJseSBBbWVuZG1lbnQgMTgsICJTeW1ib2xzIGFuZCBPdGhlcgotICAgQ2hhcmFjdGVy cyIpIGlzIHRoZSBhZGRpdGlvbiBvZiB0aGUgRXVybyBTaWduIGF0IFUrMjBBQy4gQXMgbm90ZWQg aW4KLSAgIFs1NTJdU2VjdGlvbiA2LjAsIEtlcm1pdCdzICJFdXJvIGNvbXBsaWFuY2UiIGluY2x1 ZGVzIGNvbnZlcnNpb24KLSAgIGJldHdlZW4gTGF0aW4gQWxwaGFiZXQgOSBhbmQgdmFyaW91cyBQ QyBjb2RlIHBhZ2VzLiBUZXh0IGNhbiBhbHNvIGJlCi0gICBjb252ZXJ0ZWQgYmV0d2VlbiBVQ1Mt MiBvciBVVEYtOCBhbmQgYW55IG90aGVyIEV1cm8tY29tcGxpYW50IGNoYXJhY3RlcgotICAgc2V0 IChMYXRpbi05LCBDUDg1OCwgQ1AxMjUwLCBDUDEyNTIpIHdpdGhvdXQgbG9zcyBvZiB0aGUgRXVy byBTaWduLgotCi0gICAgNi42LjQuIFJlbGF0aW9uc2hpcCBvZiBVbmljb2RlIHdpdGggS2VybWl0 J3MgT3RoZXIgQ2hhcmFjdGVyIFNldHMKLQotICAgS2VybWl0J3MgY2hhcmFjdGVyIHNldHMgYXJl IGRpdmlkZWQgaW50byB0d28gZ3JvdXBzOiBzaW5nbGUtYnl0ZSBzZXRzCi0gICAoc3VjaCBhcyBS b21hbiwgSGVicmV3LCBDeXJpbGxpYywgR3JlZWspIGFuZCBtdWx0aWJ5dGUgKHZhcmlvdXMKLSAg IEphcGFuZXNlIHNldHMpLiBUaGUgdHdvIGdyb3VwcyBhcmUgZGlzdGluY3Qgc2luY2Ugb25lIG5v cm1hbGx5IHdvdWxkCi0gICBub3QgZXhwZWN0IHRvIGNvbnZlcnQgS2FuamkgaWRlb2dyYW1zIHRv IFJvbWFuIChvciBvdGhlcikgbGV0dGVycywgb3IKLSAgIHZpY2UgdmVyc2EuCi0KLSAgIFVuaWNv ZGUgY2hhcmFjdGVyLXNldCBjb252ZXJzaW9uIHdvcmtzIHdpdGggYm90aCBncm91cHMsIGJ1dCBv YnZpb3VzbHkKLSAgIHRoZSByZXN1bHQgZGVwZW5kcyBvbiB0aGUgcmVwZXJ0b2lyZXMgb2YgdGhl IHNvdXJjZSBhbmQgZGVzdGluYXRpb24KLSAgIGNoYXJhY3Rlci1zZXRzIGJvdGggaW5jbHVkaW5n IHRoZSBjaGFyYWN0ZXJzIGluIHRoZSBmaWxlLiBGb3IgZXhhbXBsZSwKLSAgIHlvdSBjYW4gdHJh bnNsYXRlIGEgSHVuZ2FyaWFuIHRleHQgZmlsZSBiZXR3ZWVuIExhdGluLTIgYW5kIFVuaWNvZGUs Ci0gICBidXQgbm90IGJldHdlZW4gKHNheSkgVW5pY29kZSBhbmQgTGF0aW4vR3JlZWsuIEJ5IHRo ZSBzYW1lIHRva2VuIHlvdQotICAgY2FuIGNvbnZlcnQgSmFwYW5lc2UgdGV4dCBmcm9tIFNoaWZ0 LUpJUyBvciBFVUMgb3IgSklTLTcgdG8gVW5pY29kZSBhbmQKLSAgIGJhY2ssIGJ1dCB5b3UgY2Fu J3QgY29udmVydCB0aGUgc2FtZSBmaWxlIHRvIChzYXkpIExhdGluLTEgaWYgaXQKLSAgIGNvbnRh aW5zIEphcGFuZXNlIGNoYXJhY3RlcnMuCi0KLSAgICAgSklTLTcgaXMgZXF1aXZhbGVudCB0byBE RUMgS2FuamkgYW5kIElTTy0yMDIyLUpQIGV4Y2VwdCB0aGF0IHRoZQotICAgICBsYXR0ZXIgdHdv IGRvIG5vdCBzdXBwb3J0IGhhbGZ3aWR0aCBLYXRha2FuYS4gS2VybWl0IHRyZWF0cyBhbGwKLSAg ICAgdGhyZWUgb2YgdGhlc2Ugc2V0cyB0aGUgc2FtZSB3YXksIGkuZS4gYXMgSklTLTcuCi0KLSAg IEFzIG5vdGVkLCBLZXJtaXQgcHJlc2VudGx5IGRvZXMgbm90IGhhbmRsZSBjb21iaW5pbmcgZGlh Y3JpdGljcywgYW5kIHNvCi0gICB3aWxsIG5vdCBjb3JyZWN0bHkgY29udmVydCBVQ1MgZmlsZXMg dGhhdCB1c2UgdGhlbSBpbnRvIGEgc2luZ2xlLWJ5dGUKLSAgIGNoYXJhY3RlciBzZXQuIEZvciBl eGFtcGxlLCBpZiBhIFVDUyBmaWxlIGNvbnRhaW5zIExhdGluIENhcGl0YWwgTGV0dGVyCi0gICBB IChVKzAwNDEpIGZvbGxvd2VkIGJ5IENvbWJpbmluZyBBY3V0ZSBBY2NlbnQgKFUrMDMwMSksIHRo ZSByZXN1bHQgd2lsbAotICAgYmUgYSB0d28tY2hhcmFjdGVyIHNlcXVlbmNlLCBBIGZvbGxvd2Vk IGJ5IGFub3RoZXIgY2hhcmFjdGVyLiBUaGlzIGlzCi0gICB3aGF0IGlzIG1lYW50IGJ5IENvbmZv cm1hbmNlIExldmVsIDEuIChUaGUgc2l0dWF0aW9uIGdyb3dzIHdvcnNlIHdpdGgKLSAgIG11bHRp cGxlIGRpYWNyaXRpY3MsIHNpbmNlIHRoZXkgY2FuIG9jY3VyIGluIGFueSBvcmRlci4pCi0KLSAg IEEgaGlnaGVyIGxldmVsIG9mIGNvbmZvcm1hbmNlIGlzIHBvc3NpYmxlLCBpbiB3aGljaCAiY2Fu b25pY2FsCi0gICBlcXVpdmFsZW5jZXMiIGFyZSBoYW5kbGVkIHZpYSBhbGdvcml0aG1zIGFuZCBk YXRhYmFzZXMsIGF0IHNvbWUKLSAgIChwZXJoYXBzIGNvbnNpZGVyYWJsZSkgY29zdCBpbiBwZXJm b3JtYW5jZSwgc2luY2UgYSBmYWlyIGFtb3VudCBvZgotICAgYWRkaXRpb25hbCBjb2RlIG11c3Qg YmUgZXhlY3V0ZWQgZm9yIGV2ZXJ5IGNoYXJhY3RlciBkdXJpbmcgZGF0YQotICAgdHJhbnNmZXIg KGRhdGFiYXNlIGxvb2t1cCwgc29ydGluZyBvZiBjb21iaW5pbmcgc2VxdWVuY2VzIGludG8KLSAg IGNhbm9uaWNhbCBvcmRlciwgZXRjKS4gVGhpcyBjYW4gYmUgYWRkZWQgaW4gZnV0dXJlIHJlbGVh c2VzIGlmIHRoZXJlIGlzCi0gICBhIG5lZWQgKGJ1dCBpbiBtYW55IGNhc2VzLCBwcmUtIGFuZCBw b3N0cG9zdHByb2Nlc3NpbmcgbWlnaHQgYmUgYQotICAgYmV0dGVyIG9wdGlvbikuCi0KLSAgIFdp dGhpbiB0aGVzZSBjb25zdHJhaW50cywgS2VybWl0IGNvbnZlcnRzIGJldHdlZW4gdGhlIFVDUyBh bmQgaXRzIG90aGVyCi0gICBjaGFyYWN0ZXIgc2V0cy4gRm9yIGV4YW1wbGUsIGEgbWl4dHVyZSBv ZiBSdXNzaWFuIGFuZCBFbmdsaXNoIChhbmQvb3IKLSAgIER1dGNoLCBvciBMYXRpbikgdGV4dCBj YW4gYmV0IGNvbnZlcnRlZCBiZXR3ZWVuIHRoZSBVQ1MgYW5kIElTTwotICAgTGF0aW4vQ3lyaWxs aWMgb3IgS09JLTguIEJ1dCBzaW5jZSBLZXJtaXQgZG9lcyBub3QgcHJlc2VudGx5IHN1cHBvcnQK LSAgIEFyYWJpYyBjaGFyYWN0ZXItc2V0IGNvbnZlcnNpb24sIHRoZSBuZXcgYXZhaWxhYmlsaXR5 IG9mIFVDUyBjb252ZXJzaW9uCi0gICBkb2VzIG5vdCBtZWFuIHRoYXQgS2VybWl0IGNhbiBjb252 ZXJ0IGZyb20gQXJhYmljIFVDUyB0ZXh0IHRvIHNvbWUKLSAgIG90aGVyIGNoYXJhY3RlciBzZXQs IGJlY2F1c2UgS2VybWl0IGRvZXMgbm90IHN1cHBvcnQgYW55IG90aGVyCi0gICBjaGFyYWN0ZXIg c2V0IHRoYXQgaW5jbHVkZXMgQXJhYmljLiBEaXR0byBmb3IgVGhhaSwgQXJtZW5pYW4sIEdlb3Jn aWFuLAotICAgVGliZXRhbiwgQ2hpbmVzZSwgS29yZWFuLCBldGMuIEhvd2V2ZXIsIEtlcm1pdCBD QU4gY29udmVydCBBcmFiaWMgKG9yCi0gICBhbnkgb3RoZXIgc2NyaXB0KSBiZXR3ZWVuIFVDUy0y IGFuZCBVVEYtOC4KLQotICAgQ29uc2lkZXJpbmcgQ3lyaWxsaWMgbW9yZSBjYXJlZnVsbHksIG5v dGUgdGhhdCB0aGUgVUNTIGFsc28gY29udGFpbnMKLSAgIG51bWVyb3VzIEN5cmlsbGljIGNoYXJh Y3RlcnMgbm90IGZvdW5kIGluIGFueSBvZiB0aGUgQ3lyaWxsaWMgc2V0cyAoSVNPCi0gICBMYXRp bi9DeXJpbGxpYywgS09JOCwgQ1A4NjYsIGV0YykgdGhhdCBLZXJtaXQgc3VwcG9ydHM7IGNoYXJh Y3RlcnMKLSAgIG5lZWRlZCBmb3IgQWJraGFzaWFuLCBZYWt1dCwgVGF0YXIsIEJhc2hraXIsIEFs dGFpYywgT2xkIENodXJjaAotICAgU2xhdm9uaWMsIGV0YzsgVUNTIHRleHQgY29udGFpbmluZyBh bnkgb2YgdGhlc2UgaGlzdG9yaWMgb3IgImV4dGVuZGVkIgotICAgQ3lyaWxsaWMgY2hhcmFjdGVy cyBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBhbnkgb2YgS2VybWl0J3MgY3VycmVudAotICAgc2lu Z2xlLWJ5dGUgQ3lyaWxsaWMgc2V0cyB3aXRob3V0IGxvc3MuIFRoZSBzaXR1YXRpb24gaXMgc2lt aWxhciBmb3IKLSAgIEdyZWVrLCBIZWJyZXcsIGV0YywgYW5kIGV2ZW4gd29yc2UgZm9yIEphcGFu ZXNlIHNpbmNlIFVuaWNvZGUgY29udGFpbnMKLSAgIHRob3VzYW5kcyBvZiBLYW5qaXMgdGhhdCBh cmUgbGFja2luZyBmcm9tIHRoZSBKYXBhbmVzZSBjaGFyYWN0ZXIgc2V0cwotICAgYmFzZWQgb24g SklTIFggMDIwOCwgc3VjaCBhcyBFVUMtSlAsIEpJUy03LCBhbmQgU2hpZnQtSklTLgotCi0gICBJ biBnZW5lcmFsLCB3aGVuIGNvbnZlcnRpbmcgZnJvbSBVQ1MgdG8gYSBzaW5nbGUtYnl0ZSBzZXQs IHRoZXJlIGlzCi0gICBhbHdheXMgdGhlIHBvc3NpYmlsaXR5IG9mIGRhdGEgbG9zcywganVzdCBh cyB0aGVyZSBpcyB3aGVuIGNvbnZlcnRpbmcKLSAgIGZyb20gYW55IGxhcmdlciBzZXQgdG8gYSBz bWFsbGVyIG9uZS4gRm9yIGV4YW1wbGUsIGlmIGEgVUNTIGZpbGUKLSAgIGNvbnRhaW5zIERldmFu YWdhcmkgY2hhcmFjdGVycywgdGhlc2UgY2hhcmFjdGVycyB3aWxsIGJlIGxvc3Qgd2hlbgotICAg Y29udmVydGluZyB0byAoc2F5KSBMYXRpbi0xLCBqdXN0IGFzIFJvbWFuIHZvd2VscyB3aXRoIGFj dXRlIGFjY2VudHMKLSAgIGFyZSBsb3N0IHdoZW4gY29udmVydGluZyBmcm9tIExhdGluLTEgKGFu IDgtYml0IHNldCkgdG8gR2VybWFuIElTTyA2NDYKLSAgIChhIDctYml0IHNldCkuCi0KLSAgICA2 LjYuNS4gS2VybWl0J3MgVW5pY29kZSBGZWF0dXJlcwotCi0gICBDLUtlcm1pdCBjYW4gY29udmVy dCBiZXR3ZWVuIFVDUy0yIG9yIFVURi04IGFuZCBhbnkgb2YgaXRzIG90aGVyCi0gICBjaGFyYWN0 ZXIgc2V0cywgYW5kIGFsc28gYmV0d2VlbiBVQ1MtMiBhbmQgVVRGLTguIFdoZW4gY29udmVydGlu ZwotICAgYmV0d2VlbiBVQ1MtMiBvciBVVEYtOCBhbmQgYSBub24tVW5pY29kZSBjaGFyYWN0ZXIg c2V0IChzdWNoIGFzCi0gICBMYXRpbi0xKSwgdGhlIFVDUyBMaW5lIFNlcGFyYXRvciAoTFMsIFUr MjAyOCkgYW5kIFBhcmFncmFwaCBTZXBhcmF0b3IKLSAgIChQUywgVSsyMDI5KSBjaGFyYWN0ZXJz IGFyZSBjb252ZXJ0ZWQgdG8gdGhlIGFwcHJvcHJpYXRlIGxpbmUKLSAgIHRlcm1pbmF0b3IgKENS LCBMRiwgb3IgQ1JMRikuIFdoZW4gY29udmVydGluZyBmcm9tIGEgbm9uLVVuaWNvZGUgc2V0IHRv Ci0gICBVQ1MtMiBvciBVVEYtOCwgaG93ZXZlciwgbGluZSB0ZXJtaW5hdG9ycyBhcmUgbm90IGNv bnZlcnRlZCB0byBMUyBvcgotICAgUFMuIFRoaXMgaXMgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBy ZWNvbW1lbmRhdGlvbnMgb2YgVW5pY29kZSBUZWNobmljYWwKLSAgIFJlcG9ydCAjMTMuCi0KLSAg IFdoZW4gQy1LZXJtaXQgc3RhcnRzLCBpdCB0ZXN0cyB0aGUgbmF0aXZlIGJ5dGUgb3JkZXIgb2Yg dGhlIGNvbXB1dGVyLgotICAgWW91IGNhbiBzZWUgdGhlIHJlc3VsdCBpbiB0aGUgU0hPVyBGRUFU VVJFUyBvciBTSE9XIEZJTEUgZGlzcGxheS4gSXQncwotICAgYWxzbyBhdmFpbGFibGUgaW4gdGhl IHZhcmlhYmxlIFx2KGJ5dGVvcmRlcik6IDAgbWVhbnMgQmlnIEVuZGlhbiwgMQotICAgbWVhbnMg TGl0dGxlIEVuZGlhbi4KLQotICAgV2hlbiBVQ1MtMiBpcyBpbnZvbHZlZCBpbiBmaWxlIHRyYW5z ZmVyIG9yIHRyYW5zbGF0aW9uLCB0aGUgZm9sbG93aW5nCi0gICBjb21tYW5kcyB0ZWxsIEMtS2Vy bWl0IHdoYXQgdG8gZG8gYWJvdXQgYnl0ZSBvcmRlcjoKLQotICAgU0VUIEZJTEUgVUNTIEJZVEUt T1JERVIgeyBCSUctRU5ESUFOLCBMSVRUTEUtRU5ESUFOIH0KLSAgICAgICAgICBUaGlzIGlzIGZv ciByZWFkaW5nIFVDUy0yIGZpbGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIEJPTSwgYW5kIGFsc28KLSAg ICAgICAgICBmb3Igd3JpdGluZyBVQ1MtMiBmaWxlcy4gSWYgdGhpcyBjb21tYW5kIGlzIG5vdCBn aXZlbiwgdGhlCi0gICAgICAgICAgbWFjaGluZSdzIG5hdGl2ZSBieXRlIG9yZGVyIGlzIHVzZWQg d2hlbiB3cml0aW5nIFVDUy0yIGZpbGVzLAotICAgICAgICAgIGFuZCBhbHNvIHdoZW4gcmVhZGlu ZyBVQ1MtMiBmaWxlcyB0aGF0IGRvbid0IGhhdmUgYSBCT00uCi0KLSAgIFNFVCBGSUxFIFVDUyBC T00geyBPTiwgT0ZGIH0KLSAgICAgICAgICBUaGlzIHNldHRpbmcgaXMgdXNlZCB3aGVuIGNyZWF0 aW5nIFVDUy0yIGZpbGVzLiBBIEJPTSBpcyBhZGRlZAotICAgICAgICAgIGF0IHRoZSBiZWdpbm5p bmcgYnkgZGVmYXVsdC4gVXNlIE9GRiB0byBub3QgYWRkIHRoZSBCT00uIFRoaXMKLSAgICAgICAg ICBjb21tYW5kIGhhcyBubyBhZmZlY3Qgd2hlbiB3cml0aW5nIGZpbGVzLgotCi0gICBDT1BZIC9T V0FQLUJZVEVTIHNvdXJjZWZpbGUgZGVzdGluYXRpb25maWxlCi0gICAgICAgICAgVXNlIHRoaXMg Zm9yIGZpeGluZyBhIFVDUy0yIGZpbGUgd2hvc2UgYnl0ZXMgYXJlIGluIHRoZSB3cm9uZwotICAg ICAgICAgIG9yZGVyLgotCi0gICBVc2UgU0hPVyBGSUxFIHRvIGRpc3BsYXkgdGhlIEZJTEUgVUNT IHNldHRpbmdzLgotCi0gICBQbGVhc2Ugbm90ZSwgYWdhaW4sIHRoYXQgQy1LZXJtaXQncyB1c2Vy IGludGVyZmFjZSwgaW5jbHVkaW5nIGl0cwotICAgc2NyaXB0IGxhbmd1YWdlLCBpcyBub3QgaW50 ZXJuYXRpb25hbGl6ZWQgaW4gYW55IHdheS4gU3RyaW5nCi0gICBjb21wYXJpc29ucywgY2FzZSBj b252ZXJzaW9uLCBhbmQgc28gb24sIHdvcmsgb25seSBmb3IgVVMgQVNDSUkKLSAgIChjb21wYXJp c29ucyBmb3IgZXF1YWxpdHkgd29yayB3aXRoIG90aGVyIHNldHMsIGJ1dCBub3QKLSAgIGxleGlj YWxseS1ncmVhdGVyLW9yLWxlc3MtdGhhbiBvciBjYXNlbGVzcyBjb21wYXJpc29uczsgZXZlbgot ICAgY29tcGFyaXNvbnMgZm9yIGVxdWFsaXR5IGNhbiBmYWlsIHdoZW4gY29tcG9zZWQgY2hhcmFj dGVycyBvciBieXRlCi0gICBvcmRlciBhcmUgaW52b2x2ZWQpLiBTdHJpbmcgZnVuY3Rpb25zIHN1 Y2ggYXMgXGZpbmRleCgpIGFuZAotICAgXGZzdWJzdHJpbmcoKSB0aGF0IHJlZmVyZW5jZSBieXRl IHBvc2l0aW9ucyBkbyBqdXN0IHRoYXQ7IHRoZXkgd29uJ3QKLSAgIHdvcmsgd2l0aCBVVEYtOCB0 ZXh0IHRoYXQgY29udGFpbnMgYW55IG5vbi1BU0NJSSBjaGFyYWN0ZXJzLCBhbmQgdGhleQotICAg d2lsbCBub3Qgd29yayB3aXRoIFVDUy0yIHRleHQgYXQgYWxsIHNpbmNlIHRoZXkgdXNlIEMgc3Ry aW5ncwotICAgaW50ZXJuYWxseSwgd2hpY2ggYXJlIE5VTC10ZXJtaW5hdGVkLiBUaGVzZSBhcmUg anVzdCBhIGZldyBleGFtcGxlcyB0bwotICAgaWxsdXN0cmF0ZSB0aGF0IG5laXRoZXIgVW5pY29k ZSBub3IgYW55IG90aGVyIGNoYXJhY3Rlci1zZXQgYmV5b25kCi0gICBBU0NJSSBpcyBzdXBwb3J0 ZWQgYXQgdGhlIHVzZXItaW50ZXJmYWNlLCBjb21tYW5kLCBvciBzY3JpcHRpbmcgbGV2ZWwKLSAg IGluIHRoaXMgdmVyc2lvbiBvZiBDLUtlcm1pdC4KLQotICAgIDYuNi41LjEuIEZpbGUgVHJhbnNm ZXIKLQotICAgS2VybWl0IHN1cHBvcnRzIGJvdGggVUNTLTIgYW5kIFVURi04IGFzIGZpbGUgYW5k IHRyYW5zZmVyIGNoYXJhY3RlcgotICAgc2V0cyBpbiB0ZXh0LW1vZGUgZmlsZSB0cmFuc2Zlci4K LQotICAgVG8gc2VsZWN0IFVDUy0yIG9yIFVURi04IGFzIGEgZmlsZSBjaGFyYWN0ZXItc2V0LCB1 c2U6Ci0KLSAgU0VUIEZJTEUgQ0hBUkFDVEVSLVNFVCB7IFVDUzIsIFVURjggfQotCi0gICBJZiB5 b3Ugd2FudCB0byBzZW5kIGEgVUNTLTIgdGV4dCBmaWxlIChvciBzYXZlIGFuIGluY29taW5nIGZp bGUgaW4KLSAgIFVDUy0yIGZvcm1hdCksIHRlbGwgS2VybWl0IHRvOgotCi0gIFNFVCBGSUxFIENI QVJBQ1RFUi1TRVQgVUNTMgotCi0gICBhbmQgaWYgeW91IHdhbnQgdG8gc2VuZCBhIFVURi04IHRl eHQgZmlsZSAob3Igc3RvcmUgYW4gaW5jb21pbmcgZmlsZSBpbgotICAgVVRGLTggZm9ybWF0KSwg dGVsbCBLZXJtaXQgdG86Ci0KLSAgU0VUIEZJTEUgQ0hBUkFDVEVSLVNFVCBVVEY4Ci0KLSAgIFdo ZW4gc2VuZGluZyBVQ1MtMiBmaWxlcywgS2VybWl0IGRldGVybWluZXMgdGhlIGJ5dGUgb3JkZXIg ZnJvbSB0aGUKLSAgIEJPTSwgaWYgdGhlcmUgaXMgb25lIChhbmQgaWYgdGhlcmUgaXMgYSBCT00s IGl0IGlzIHN0cmlwcGVkLCBpLmUuIG5vdAotICAgc2VudCkuIElmIHRoZXJlIGlzIG5vIEJPTSwg dGhlIGJ5dGUgb3JkZXIgaXMgdGhlIG9uZSBzcGVjaWZpZWQgaW4gdGhlCi0gICBtb3N0IHJlY2Vu dCBTRVQgRklMRSBVQ1MgQllURS1PUkRFUiBjb21tYW5kLCBpZiBhbnksIG90aGVyd2lzZSB0aGUK LSAgIGNvbXB1dGVyJ3MgbmF0aXZlIGJ5dGUgb3JkZXIgaXMgYXNzdW1lZC4gV2hlbiBzdG9yaW5n IGluY29taW5nIGZpbGVzIGFzCi0gICBVQ1MtMiwgdGhlIGJ5dGUgb3JkZXIgaXMgYWNjb3JkaW5n IFNFVCBGSUxFIFVDUyBCWVRFLU9SREVSLCBpZiBnaXZlbiwKLSAgIG90aGVyd2lzZSB0aGUgbmF0 aXZlIG9uZTsgYSBCT00gaXMgd3JpdHRlbiBhY2NvcmRpbmcgdG8gU0VUIEZJTEUgVUNTCi0gICBC T00uCi0KLSAgIEEgdHJhbnNmZXIgY2hhcmFjdGVyLXNldCBzaG91bGQgYmUgY2hvc2VuIHRoYXQg aW5jbHVkZXMgYWxsIG9mIHRoZQotICAgY2hhcmFjdGVycyBpbiB0aGUgc291cmNlIGZpbGUuIFNv LCBmb3IgZXhhbXBsZSwgaWYgeW91IGFyZSBzZW5kaW5nIGEKLSAgIFVDUy0yIGZpbGUgY29udGFp bmluZyBvbmx5IEdlcm1hbi1sYW5ndWFnZSB0ZXh0LCB5b3VyIHRyYW5zZmVyCi0gICBjaGFyYWN0 ZXItc2V0IGNhbiBiZSBMYXRpbi0xLCBMYXRpbi0yLCBMYXRpbi05LCBVQ1MtMiwgb3IgVVRGLTgu IEJ1dCBpZgotICAgeW91IGFyZSBzZW5kaW5nIGEgZmlsZSB0aGF0IGNvbnRhaW5zIGEgY29tYmlu YXRpb24gb2YgSGVicmV3IGFuZCBHcmVlaywKLSAgIHlvdXIgdHJhbnNmZXIgY2hhcmFjdGVyLXNl dCBtdXN0IGJlIFVDUy0yIG9yIFVURi04IGlmIHlvdSBkb24ndCB3YW50IHRvCi0gICBsb3NlIG9u ZSBzY3JpcHQgb3IgdGhlIG90aGVyLiBGdXJ0aGVybW9yZSwgdGhlIHRyYW5zZmVyIGNoYXJhY3Rl ci1zZXQKLSAgIG11c3QgYmUgb25lIHRoYXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSByZWNlaXZpbmcg S2VybWl0IHByb2dyYW0uIFNpbmNlCi0gICBVQ1Mgc3VwcG9ydCBpcyBuZXcsIGl0IGlzIHBvc3Np YmxlIHRoYXQgdGhlIG90aGVyIEtlcm1pdCBwcm9ncmFtIChpZiBpdAotICAgc3VwcG9ydHMgY2hh cmFjdGVyIHNldHMgYXQgYWxsKSBkb2VzIG5vdCBzdXBwb3J0IGl0LCBidXQgZG9lcyBzdXBwb3J0 Ci0gICBzaW5nbGUtYnl0ZSBzZXRzIHN1Y2ggYXMgTGF0aW4tMSwgTGF0aW4vQ3lyaWxsaWMsIGV0 Yy4KLQotICAgVG8gc2VsZWN0IFVDUy0yIG9yIFVURi04IGFzIGEgdHJhbnNmZXIgY2hhcmFjdGVy LXNldCwgdXNlOgotCi0gIFNFVCBUUkFOU0ZFUiBDSEFSQUNURVItU0VUIHsgVUNTMiwgVVRGOCB9 Ci0KLSAgIEl0IGlzIHVwIHRvIHRoZSByZWNlaXZpbmcgS2VybWl0IHByb2dyYW0gdG8gY29udmVy dCB0aGUgdHJhbnNmZXIgZm9ybWF0Ci0gICB0byBpdHMgb3duIGxvY2FsIGZvcm1hdCwgaWYgbmVj ZXNzYXJ5LiBJZiBpdCBkb2VzIG5vdCB1bmRlcnN0YW5kIHRoZQotICAgVVRGLTggb3IgVUNTLTIg dHJhbnNmZXIgY2hhcmFjdGVyLXNldCwgYW5kIHlvdXIgZmlsZSBjYW4gbm90IGJlCi0gICBhZGVx dWF0ZWx5IHJlcHJlc2VudGVkIGJ5IGFueSBzaW5nbGUtYnl0ZSB0cmFuc2ZlciBjaGFyYWN0ZXIt c2V0IChzdWNoCi0gICBhcyBMYXRpbi0xIG9yIExhdGluL0N5cmlsbGljKSB0aGVuLCBpZiBVVEYt OCBmb3JtYXQgaXMgYWNjZXB0YWJsZSBvbgotICAgdGhlIHJlY2VpdmluZyBjb21wdXRlciwgdXNl IFVURi04IGFzIHRoZSB0cmFuc2ZlciBjaGFyYWN0ZXItc2V0LCB3aXRoCi0gICB0aGUgcmVjZWl2 ZXIgdG9sZCB0byAic2V0IHVua25vd24tY2hhciBrZWVwIiwgb3Igd2l0aCB0aGUgc2VuZGVyIHRv bGQKLSAgIHRvICJzZXQgYXR0cmlidXRlIGNoYXIgb2ZmIi4gSWYgeW91IHdhbnQgdGhlIGZpbGUg dG8gYmUgc3RvcmVkIGluIFVDUy0yCi0gICBmb3JtYXQgYXQgdGhlIHJlY2VpdmVyLCBzZW5kIGl0 IGl0IGJpbmFyeSBtb2RlIGlmIHRoZSBzb3VyY2UgZmlsZSBpcwotICAgYWxzbyBVQ1MtMiwgb3Ig ZWxzZSB1c2UgdGhlIFRSQU5TTEFURSBjb21tYW5kIChuZXh0IHNlY3Rpb24pIHRvIGNvbnZlcnQK LSAgIGl0IHRvIFVDUy0yIGZpcnN0LCB0aGVuIHNlbmQgaXQgaW4gYmluYXJ5IG1vZGUuIFlvdSBz aG91bGQgbm90IHVzZQotICAgVUNTLTIgYXMgYSB0cmFuc2ZlciBjaGFyYWN0ZXItc2V0IGluIHRl eHQtbW9kZSB0cmFuc2ZlcnMgdG8gS2VybWl0Ci0gICBwcm9ncmFtcyB0aGF0IGRvbid0IHN1cHBv cnQgaXQsIGJlY2F1c2UgdGhleSBhcmUgbGlrZWx5IHRvIGNvcnJ1cHQgdGhlCi0gICByZXN1bHQg dGhlIHNhbWUgd2F5IEZUUCB3b3VsZCAoc2VlIHRoZSBmaW5hbCBwYXJhZ3JhcGggb2YgdGhpcwot ICAgc2VjdGlvbikuCi0KLSAgIFdoZW4gVUNTLTIgaXMgdGhlIHRyYW5zZmVyIGNoYXJhY3RlciBz ZXQsIGl0IGFsd2F5cyBnb2VzIGludG8gS2VybWl0Ci0gICBwYWNrZXRzIGluIEJpZyBFbmRpYW4g Zm9ybWF0LCB3aXRoIG5vIEJPTS4gQXMgYWx3YXlzLCB0aGUgdHJhbnNmZXIKLSAgIGNoYXJhY3Rl ci1zZXQgaXMgYW5ub3VuY2VkIGJ5IHRoZSBzZW5kZXIgdG8gdGhlIHJlY2VpdmVyLiBUaGUKLSAg IGFubm91bmNlbWVudCBmb3IgVUNTLTIgaXMgIkkxNjIiIChJU08gUmVnaXN0cmF0aW9uIDE2MiA9 IFVDUy0yIExldmVsIDEpCi0gICBhbmQgYnkgZGVmaW5pdGlvbiBpdCBpcyBCaWcgRW5kaWFuICh0 aGUgc3RhbmRhcmRzIHNheSB0aGF0IHdoZW4gVUNTLTIKLSAgIGlzIHNlcmlhbGl6ZWQgaW50byBi eXRlcywgdGhlIG9yZGVyIG11c3QgYmUgQmlnIEVuZGlhbikuIFRoZQotICAgYW5ub3VuY2VtZW50 IGZvciBVVEYtOCBpcyAiSTE5MCIgKFVURi04IExldmVsIDEpLgotCi0gICBXaGVuIHJlY2Vpdmlu ZyBhIGZpbGUgd2hvc2UgdHJhbnNmZXIgY2hhcmFjdGVyLXNldCBpcyBVQ1MtMiBvciBVVEYtOCwK LSAgIHlvdSBtdXN0IGNob29zZSB0aGUgYXBwcm9wcmlhdGUgZmlsZSBjaGFyYWN0ZXIgc2V0IGZv ciB0aGUgcmVzdWx0LgotICAgVGhlcmUgaXMgbm8gd2F5IEtlcm1pdCBjYW4gZG8gdGhpcyBmb3Ig eW91IGF1dG9tYXRpY2FsbHksIHNpbmNlIFVDUwotICAgZGF0YSBjYW4gYmUgaW4gYW55IHNjcmlw dCBhdCBhbGwsIG9yIGFueSBjb21iaW5hdGlvbi4KLQotICAgSW4gZ2VuZXJhbCwgVVRGLTggb3Ig VUNTLTIgc2hvdWxkIGJlIGNob3NlbiBhcyBhIHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQKLSAgIGlm IHRoZSBzb3VyY2UgZmlsZSBpcyBhbHNvIGVuY29kZWQgaW4gc29tZSBmb3JtIG9mIFVDUyBhbmQg aXQgY29udGFpbnMKLSAgIG1vcmUgdGhhbiBvbmUgc2NyaXB0LiBCdXQgdGhlcmUgYXJlIG90aGVy IHNpdHVhdGlvbnMgd2hlcmUgd2hlcmUgVVRGLTgKLSAgIG9yIFVDUy0yIG9mZmVyIGFkdmFudGFn ZXMuIEZvciBleGFtcGxlLCBzdXBwb3NlIHRoZSBzb3VyY2UgZmlsZSBpcyBvbiBhCi0gICBOZVhU c3RhdGlvbiBhbmQgdGhlIGRlc3RpbmF0aW9uIGZpbGUgaXMgb24gVk1TLiBCb3RoIHRoZSBOZVhU IGFuZCB0aGUKLSAgIERFQyBNdWx0aW5hdGlvbmFsIGNoYXJhY3RlciBzZXRzIGluY2x1ZGUgdGhl IEZyZW5jaCBPRSBkaWdyYXBoLCBidXQKLSAgIExhdGluLTEgZG9lcyBub3QuIFRoZXJlZm9yZSBG cmVuY2ggd29yZHMgY29udGFpbmluZyB0aGlzIGNoYXJhY3RlcgotICAgbWlnaHQgbm90IGFycml2 ZSBpbnRhY3Qgd2hlbiBMYXRpbi0xIGlzIHRoZSB0cmFuc2ZlciBjaGFyYWN0ZXItc2V0LCBidXQK LSAgIHdpbGwgd2l0aCBVVEYtOCBvciBVQ1MtMiwgc2luY2UgdGhlIFVDUyBpbmNsdWRlcyB0aGUg T0UgZGlncmFwaCAoYnV0IHNvCi0gICBkb2VzIExhdGluLTkpLgotCi0gICBVQ1MtMiBzaG91bGQg YmUgY2hvc2VuIGFzIGEgdHJhbnNmZXIgY2hhcmFjdGVyLXNldCBvbmx5IGZvciBKYXBhbmVzZQot ICAgdGV4dCBmaWxlcyB0aGF0IGNvbnRhaW4gYSBsYXJnZSBwcmVwb25kZXJhbmNlIG9mIEthbmpp LCBzaW5jZSBpbiB0aGlzCi0gICBjYXNlIChhbmQgb25seSB0aGlzIGNhc2UpIFVDUy0yICh0d28g Ynl0ZXMgcGVyIEthbmppKSBpcyBtb3JlIGVmZmljaWVudAotICAgdGhhbiBVVEYtOCAodGhyZWUg Ynl0ZXMgcGVyIEthbmppKS4gVGhlIHNhbWUgd2lsbCBiZSB0cnVlIGZvciBDaGluZXNlCi0gICBh bmQgS29yZWFuIHdoZW4gdGhleSBhcmUgc3VwcG9ydGVkIGJ5IEtlcm1pdC4gVUNTLTIgc2hvdWxk IG5ldmVyIGJlCi0gICB1c2VkIGFzIGEgdHJhbnNmZXIgY2hhcmFjdGVyLXNldCB3aXRoIGEgdHJh bnNmZXIgcGFydG5lciB0aGF0IGRvZXMgbm90Ci0gICBzdXBwb3J0IFVDUy0yIHNpbmNlIHRoaXMg Y2FuIGNhdXNlIGZpbGUgY29ycnVwdGlvbiAoc2VlIGxhc3QgcGFyYWdyYXBoCi0gICBpbiB0aGlz IHNlY3Rpb24pLgotCi0gICBOb3RlIHRoYXQgS2VybWl0J3MgcmVwZWF0LWNvdW50IGNvbXByZXNz aW9uIGlzIDEwMCUgaW5lZmZlY3RpdmUgZm9yCi0gICBVQ1MtMiwgYW5kIGlzIGFsc28gaW5lZmZl Y3RpdmUgZm9yIG11bHRpYnl0ZSBjaGFyYWN0ZXJzIGluIFVURi04IGFuZAotICAgRVVDLUpQOyB0 aGlzIGlzIGJlY2F1c2UgcmVwZWF0LWNvbXByZXNzaW9uIGlzIGEgdHJhbnNwb3J0LWxldmVsCi0g ICBtZWNoYW5pc20gdGhhdCBvcGVyYXRlcyBvbiBhIHBlci1ieXRlIGJhc2lzOyBpdCBoYXMgbm8g a25vd2xlZGdlIG9mIHRoZQotICAgZGlzdGluY3Rpb24gYmV0d2VlbiBhIGJ5dGUgYW5kIGEgY2hh cmFjdGVyLgotCi0gICBXaGVuIEMtS2VybWl0IHN0YXJ0cywgaXQgc2V0cyB1cCBhc3NvY2lhdGlv bnMgKFs1NTNdU2VjdGlvbiA2LjUpIGZvcgotICAgaW5jb21pbmcgZmlsZXMgd2hvc2UgdHJhbnNm ZXIgY2hhcmFjdGVyIHNldHMgYXJlIFVDUy0yIG9yIFVURi04Ci0gICBhcHByb3ByaWF0ZWx5IGZv ciB0aGUgcGxhdGZvcm0gc28gdGhhdCB0aGUgZmlsZSBjaGFyYWN0ZXItc2V0IGZvciB0aGUKLSAg IGluY29taW5nIGZpbGUgaXMgVUNTLTIgaW4gV2luZG93cyBhbmQgVVRGLTggZWxzZXdoZXJlLiBP dGhlcndpc2UsCi0gICBDLUtlcm1pdCBkb2VzIG5vdCBtYWtlIGFueSBkZWZhdWx0IGFzc29jaWF0 aW9ucyBmb3IgVUNTLTIgb3IgVVRGLTgsIGJ1dAotICAgb2YgY291cnNlIHlvdSBtYXkgYWRkIG9y IGNoYW5nZSBhc3NvY2lhdGlvbnMgdG8gc3VpdCB5b3VyIG5lZWRzIGFuZAotICAgcHJlZmVyZW5j ZXMgYnkgaW5jbHVkaW5nIHRoZSBhcHByb3ByaWF0ZSBBU1NPQ0lBVEUgY29tbWFuZHMgaW4geW91 cgotICAgS2VybWl0IHN0YXJ0dXAgZmlsZS4gRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgYSBQQyB1 c2VyIGFuZCBkZWFsIG9ubHkKLSAgIHdpdGggdGV4dCB3cml0dGVuIGluIEdyZWVrIGFuZCBFbmds aXNoLCB5b3UgY2FuOgotCi0gIEFTU09DSUFURSBUUkFOU0ZFUi1DSEFSQUNURVItU0VUIFVURjgg Q1A4NjkKLSAgQVNTT0NJQVRFIFRSQU5TRkVSLUNIQVJBQ1RFUi1TRVQgVUNTMiBDUDg2OQotICBB U1NPQ0lBVEUgRklMRS1DSEFSQUNURVItU0VUIENQODY5IFVURjgKLQotICAgTm90ZSB0aGF0IHdo ZW4gZmlsZSB0cmFuc2ZlciBpbnZvbHZlcyBjb252ZXJzaW9uIGJldHdlZW4gYSBzaW5nbGUtYnl0 ZQotICAgY2hhcmFjdGVyIHNldCBhbmQgVUNTLTIgb3IgVVRGLTgsIHRoZSBmaWxlLXRyYW5zZmVy IHRoZXJtb21ldGVyIGFuZAotICAgZXN0aW1hdGVkIHRpbWUgbGVmdCBtaWdodCBiZSBpbmFjY3Vy YXRlLCBzaW5jZSB0aGV5IGFyZSBiYXNlZCBvbiB0aGUKLSAgIHNvdXJjZSBmaWxlIHNpemUsIG5v dCB0aGUgdHJhbnNmZXIgZW5jb2RpbmcuIFRoaXMgaXMgcHVyZWx5IGEgY29zbWV0aWMKLSAgIGlz c3VlIGFuZCBkb2VzIG5vdCBlZmZlY3QgdGhlIGZpbmFsIHJlc3VsdC4gKEFuZCBpcyBub3QsIHN0 cmljdGx5Ci0gICBzcGVha2luZywgYSBidWc7IEtlcm1pdCBwcm90b2NvbCBwcmVzZW50bHkgaW5j bHVkZXMgbm8gbWV0aG9kIGZvciB0aGUKLSAgIHNlbmRlciB0byBmdXJuaXNoIGFuICJlc3RpbWF0 ZWQgdHJhbnNmZXIgc2l6ZSIgdG8gdGhlIHJlY2VpdmVyLCBhbmQgaW4KLSAgIGFueSBjYXNlIGFu eSBzdWNoIGd1ZXNzIGNvdWxkIGJlIGFzIGZhciBvZmYgYXMgdGhlIGZpbGUgc2l6ZSwgZ2l2ZW4g dGhlCi0gICBtYW55IG90aGVyIGZhY3RvcnMgdGhhdCBjb21lIGludG8gcGxheSwgc3VjaCBhcyBj b21wcmVzc2lvbiBhbmQKLSAgIHByZWZpeGluZykuCi0KLSAgIEEgY2F1dGlvbiBhYm91dCBGVFAg YW5kIFVDUy0yLiBBcyBub3RlZCBwcmV2aW91c2x5LCBpZiB5b3UgdHJhbnNmZXIgYQotICAgVUNT LTIgZmlsZSB3aXRoIEZUUCBpbiBiaW5hcnkgbW9kZSBiZXR3ZWVuIHR3byBjb21wdXRlcnMgd2l0 aCBvcHBvc2l0ZQotICAgRW5kaWFubmVzcywgdGhlIHJlc3VsdCB3aWxsIGhhdmUgaXRzIGJ5dGVz IGluIHRoZSB3cm9uZyBvcmRlci4gSG93ZXZlciwKLSAgIGlmIHlvdSB1c2UgRlRQIHRvIHRyYW5z ZmVyIGEgVUNTLTIgZmlsZSBpbiAiYXNjaWkiICh0ZXh0KSBtb2RlIHRvIEFOWQotICAgY29tcHV0 ZXIsIGV2ZW4gaWYgaXQgaXMgaWRlbnRpY2FsIHRvIHlvdXJzLCB0aGUgcmVzdWx0IHdpbGwgYmUK LSAgIGNvcnJ1cHRlZCBiZWNhdXNlIEZUUCdzIGxpbmUtdGVybWluYXRvciBjb252ZXJzaW9ucyBk byBub3QgYWNjb3VudCBmb3IKLSAgIFVDUy0yLiBUaGUgc2FtZSBob2xkcyB3aGVuIHNlbmRpbmcg ZnJvbSBhIFVDUy1hd2FyZSBLZXJtaXQgcHJvZ3JhbSB0bwotICAgYW4gb2xkZXIgS2VybWl0IHBy b2dyYW0gaW4gdGV4dCBtb2RlIHdpdGggYSB0cmFuc2ZlciBjaGFyYWN0ZXItc2V0IG9mCi0gICBV Q1MtMi4gU28gdXNlIFVDUy0yIGFzIGEgdHJhbnNmZXIgY2hhcmFjdGVyLXNldCBPTkxZIHdpdGgg YSBVQ1MtMi1hd2FyZQotICAgS2VybWl0IHBhcnRuZXIuCi0KLSAgICA2LjYuNS4yLiBUaGUgVFJB TlNMQVRFIENvbW1hbmQKLQotICAgSW4gS2VybWl0IHZlcnNpb25zIHRoYXQgaGF2ZSBVbmljb2Rl IHN1cHBvcnQgaW5jbHVkZWQsIFRSQU5TTEFURSBub3cKLSAgIGFsd2F5cyBnb2VzIHRocm91Z2gg VW5pY29kZTsgdGhhdCBpcywgdGhlIHNvdXJjZSBzZXQgaXMgY29udmVydGVkIHRvCi0gICBVQ1Mt MiBhbmQgdGhlbmNlIHRvIHRoZSB0YXJnZXQgc2V0LiBUaGlzIGlzIGEgbWFqb3IgaW1wcm92ZW1l bnQsIHNpbmNlCi0gICBpbiBwcmlvciByZWxlYXNlcywgQy1LZXJtaXQgaGFkIHRvIHBpY2sgdGhl ICJtb3N0IGFwcHJvcHJpYXRlIiB0cmFuc2ZlcgotICAgY2hhcmFjdGVyLXNldCBhcyB0aGUgaW50 ZXJtZWRpYXRlIHNldCwgYW5kIHRoaXMgd291bGQgcmVzdWx0IGluIHRoZQotICAgbG9zcyBvZiBh bnkgY2hhcmFjdGVycyB0aGF0IHRoZSBzb3VyY2UgYW5kIHRhcmdldCBzZXRzIGhhZCBpbiBjb21t b24KLSAgIGJ1dCB3ZXJlIGxhY2tpbmcgZnJvbSB0aGUgaW50ZXJtZWRpYXRlIHNldCAoZm9yIGV4 YW1wbGUgdGhlIE9FIGRpZ3JhcGgKLSAgIHdoZW4gdHJhbnNsYXRpbmcgZnJvbSBOZVhUIHRvIERF QyBNQ1MgdGhyb3VnaCBMYXRpbi0xKS4gVGhpcyBuZXZlcgotICAgaGFwcGVucyB3aGVuIFVuaWNv ZGUgaXMgdGhlIGludGVybWVkaWF0ZSBzZXQgYmVjYXVzZSBVbmljb2RlIGlzIGEKLSAgIHN1cGVy c2V0IG9mIGFsbCBvdGhlciBjaGFyYWN0ZXIgc2V0cyBzdXBwb3J0ZWQgYnkgS2VybWl0LiBBIG1v cmUKLSAgIGRyYW1hdGljIGV4YW1wbGUgd291bGQgYmUgdHJhbnNsYXRpb24gYmV0d2VlbiBDeXJp bGxpYyBQQyBjb2RlIHBhZ2UgODY2Ci0gICBhbmQgS09JOC1SIChbNTU0XVNlY3Rpb24gNi40KTsg Zm9ybWVybHkgYWxsIHRoZSBsaW5lLSBhbmQgYm94LWRyYXdpbmcKLSAgIGNoYXJhY3RlcnMgd291 bGQgYmUgbG9zdCAoc2luY2UgSVNPIDg4NTktNSBkb2VzIG5vdCBoYXZlIGFueSk7IG5vdyB0aGUK LSAgIG9uZXMgdGhhdCB0aGVzZSB0d28gc2V0cyBoYXZlIGluIGNvbW1vbiBhcmUgcHJlc2VydmVk LgotCi0gICBVQ1MtMiBhbmQgVVRGLTggYXJlIG5vdyBib3RoIHN1cHBvcnRlZCBhcyBzb3VyY2Ut ZmlsZSBhbmQKLSAgIGRlc3RpbmF0aW9uLWZpbGUgY2hhcmFjdGVyIHNldHMgYnkgQy1LZXJtaXQn cyBUUkFOU0xBVEUgY29tbWFuZCwgZm9yCi0gICBleGFtcGxlOgotCi0gIHRyYW5zbGF0ZSBvb2Zh LnR4dCB1Y3MyIGxhdGluMSBvb2ZhLWwxLnR4dAotCi0gICB0cmFuc2xhdGVzIG9vZmEudHh0IGZy b20gVUNTLTIgdG8gTGF0aW4tMSwgc3RvcmluZyB0aGUgcmVzdWx0IGFzCi0gICBvb2ZhLWwxLnR4 dC4gU2ltaWxhcmx5OgotCi0gIHRyYW5zbGF0ZSBvb2ZhLnR4dCB1dGY4IGxhdGluMSBvb2ZhLWwx LnR4dAotICB0cmFuc2xhdGUgb29mYS50eHQgbGF0aW4xIHVjczIgb29mYS11Y3MyLnR4dAotICB0 cmFuc2xhdGUgb29mYS50eHQgbGF0aW4xIHV0Zjggb29mYS11dGY4LnR4dAotICB0cmFuc2xhdGUg b29mYS50eHQgdWNzMiB1dGY4IG9vZmEtdXRmOC50eHQKLSAgdHJhbnNsYXRlIG9vZmEudHh0IHV0 ZjggdWNzMiBvb2ZhLXVjczIudHh0Ci0KLSAgIFRyZWF0bWVudCBvZiB0aGUgVUNTLTIgQk9NIGlz IGV4YWN0bHkgdGhlIHNhbWUgYXMgZm9yIGZpbGUgdHJhbnNmZXIuCi0gICBOb3RlIHRoYXQgaWYg YSBVQ1MtMiBzb3VyY2UgZmlsZSBpcyBpbiB0aGUgIndyb25nIiBieXRlIG9yZGVyIGFuZCBsYWNr cwotICAgYSBCT00sIGFuZCB5b3UgZG9uJ3QgdGVsbCBLZXJtaXQgYWJvdXQgaXQgd2l0aCBTRVQg RklMRSBVQ1MgQllURS1PUkRFUiwKLSAgIHRoZSByZXN1bHQgb2YgdGhlIHRyYW5zbGF0aW9uIGlz IHRvdGFsIGdpYmJlcmlzaC4gUmVjYWxsIHRoYXQgeW91IGNhbgotICAgdXNlIENPUFkgL1NXQVAt QllURVMgdG8gc3dpdGNoIHRoZSBieXRlIG9yZGVyIG9mIGFuIGVycmFudCBVQ1MtMiBmaWxlCi0g ICAob3IgYW55IG90aGVyIGZpbGUgZm9yIHRoYXQgbWF0dGVyLCBpZiB5b3UgY2FuIHRoaW5rIG9m IGEgcmVhc29uIHRvKS4KLSAgIEFsc28gbm90ZSB0aGF0OgotCi0gIHRyYW5zbGF0ZSBvb2ZhLnR4 dCB1Y3MyIHVjczIgbmV3LnR4dAotCi0gICBQcm9kdWNlcyBhIHJlc3VsdCBpbiB0aGUgbmF0aXZl IChvciBTRVQgRklMRSBVQ1MpIGJ5dGUtb3JkZXIgYXMgbG9uZyBhcwotICAgb29mYS50eHQgaGFz IGEgQk9NLgotCi0gICBBcyBhIHNpZGUgYmVuZWZpdCBvZiB0aGUgVW5pY29kZSB3b3JrLCB0aGUg VFJBTlNMQVRFIGNvbW1hbmQgbm93IHdvcmtzCi0gICBmb3IgdGhlIGZpcnN0IHRpbWUgYWxzbyBm b3IgYWxsIEphcGFuZXNlIGNoYXJhY3RlciBzZXRzIHRoYXQgS2VybWl0Ci0gICBzdXBwb3J0cy4g SW4gb3RoZXIgd29yZHMsIGlmIHlvdSBoYXZlIGEgSmFwYW5lc2UgdGV4dCBmaWxlIGluIGFueSBv ZgotICAgdGhlIGZvbGxvd2luZyBlbmNvZGluZ3M6Ci0KLSAgRVVDLUpQCi0gIFNoaWZ0LUpJUwot ICBKSVMtNwotICBVQ1MtMgotICBVVEYtOAotCi0gICBZb3UgY2FuIHVzZSB0aGUgVFJBTlNMQVRF IGNvbW1hbmQgdG8gY29udmVydCB0byBhbnkgb3RoZXIgZW5jb2RpbmcgZnJvbQotICAgdGhlIHNh bWUgbGlzdC4KLQotICAgIDYuNi41LjMuIFRlcm1pbmFsIENvbm5lY3Rpb24KLQotICAgVGhlIENP Tk5FQ1QgY29tbWFuZCBub3cgYWxsb3dzIFVURi04IGFzIGEgbG9jYWwgb3IgcmVtb3RlIHRlcm1p bmFsCi0gICBjaGFyYWN0ZXItc2V0OgotCi0gIFNFVCBURVJNSU5BTCBDSEFSQUNURVItU0VUIHsg Li4uLCBVVEY4IH0geyAuLi4sIFVURjggfQotICBTRVQgVEVSTUlOQUwgUkVNT1RFLUNIQVJBQ1RF Ui1TRVQgeyAuLi4sIFVURjggfQotICBTRVQgVEVSTUlOQUwgTE9DQUwtQ0hBUkFDVEVSLVNFVCB7 IC4uLiwgVVRGOCB9Ci0KLSAgIChSZWNhbGwgdGhhdCBLZXJtaXQncyB0ZXJtaW5hbCBjaGFyYWN0 ZXItc2V0IGhhcyB0d28gImVuZHMiIC0tIHRoZSBzZXQKLSAgIHVzZWQgb24gdGhlIGhvc3QgdG8g d2hpY2ggS2VybWl0IGlzIGNvbm5lY3RlZCwgYW5kIHRoZSBzZXQgdXNlZCBvbiB0aGUKLSAgIGxv Y2FsIGtleWJvYXJkIGFuZCBzY3JlZW4uKQotCi0gICBVQ1MtMiBpcyBub3Qgc3VwcG9ydGVkIGFz IGEgdGVybWluYWwgY2hhcmFjdGVyLXNldCAoZWl0aGVyIGVuZCkgc2luY2UKLSAgIChhKSBpdCBp cyBub3QgdXNlZCB0aGF0IHdheSBhbnl3aGVyZSB0byBvdXIga25vd2xlZGdlLCBhbmQgKGIpIHRo ZQotICAgcHJvYmxlbXMgb2YgRW5kaWFubmVzcyBhbmQgdGhlIGhpZ2ggbGlrZWxpaG9vZCBvZiBs b3NzIG9mCi0gICBzeW5jaHJvbml6YXRpb24gbWFrZSBpdCBpbXByYWN0aWNhbC4gKFRlbGVjb21t dW5pY2F0aW9ucyBpcwotICAgYnl0ZS1vcmllbnRlZDsgaWYgb25lIGJ5dGUsIG9yIGFueSBvZGQg bnVtYmVyIG9mIGJ5dGVzLCBpcyBsb3N0IGJlY2F1c2UKLSAgIG9mIGJ1ZmZlciBvdmVycnVucywg Y2lyY3VpdCByZXNldHMsIGV0YyAob3IgbGlrZXdpc2UgaWYgYSBidXJzdCBvZgotICAgbm9pc2Ug YXBwZWFycyB0aGF0IHRha2VzIHRoZSBndWlzZSBvZiBhbiBvZGQgbnVtYmVyIG9mIGJ5dGVzKSwg dGhlIGJ5dGUKLSAgIG9yZGVyIG9mIHRoZSBzdWJzZXF1ZW50IGRhdGEgc3RyZWFtIHdpbGwgYmUg YmFja3dhcmRzOyB1bmxpa2UgVVRGLTggYW5kCi0gICB0cmFkaXRpb25hbCBieXRlLWJhc2VkIGNo YXJhY3RlciBzZXRzLCBVQ1MtMiBpcyBub3QgInNlbGYKLSAgIHN5bmNocm9uaXppbmciLikKLQot ICAgVVRGLTggZG9lcyBub3QgaGF2ZSBieXRlLW9yZGVyIG9yIHN5bmNocm9uaXphdGlvbiBwcm9i bGVtcyBhbmQgaXMKLSAgIGdyb3dpbmcgaW4gcG9wdWxhcml0eSBhcyBhIHRlcm1pbmFsIGNoYXJh Y3RlciBzZXQgYXMgd2VsbCBhcyBpbiBvdGhlcgotICAgYXBwbGljYXRpb24gYXJlYXMuIEl0IGFs bG93cyBhIHNpbmdsZSB0ZXJtaW5hbCBzZXNzaW9uIHRvIHVzZSBtdWx0aXBsZQotICAgc2NyaXB0 cyAoUm9tYW4sIEN5cmlsbGljLCBHcmVlaywgZXRjKSB3aXRob3V0IElTTyAyMDIyIGNoYXJhY3Rl ci1zZXQKLSAgIHN3aXRjaGluZyAod2hpY2ggdGVybWluYWwgZW11bGF0b3JzIGxpa2UgS2VybWl0 IDk1IGNhbiBoYW5kbGUgYnV0IGZldwotICAgaG9zdCBhcHBsaWNhdGlvbnMgdW5kZXJzdGFuZCBv ciB1c2UpLCBhbmQgbWVzaGVzIG5pY2VseSB3aXRoIHRoZQotICAgVW5pY29kZSBzY3JlZW4gZm9u dHMgdGhhdCBhcmUgYmVnaW5uaW5nIHRvIGFwcGVhci4KLQotICAgVVRGLTggd2FzIGZpcnN0IHVz ZWQgaW4gUGxhbiA5IGFuZCBzb29uIHdpbGwgYmUgYXZhaWxhYmxlIGluIExpbnV4LiBJdAotICAg d2lsbCBwcm9iYWJseSBzcHJlYWQgZnJvbSB0aGVyZSAoVW5pY29kZSBpbiBzb21lIGZvcm0gaXMs IG9mIGNvdXJzZSwKLSAgIGFsc28gdXNlZCBpbiBXaW5kb3dzIE5ULCBidXQgb25seSBpbnRlcm5h bGx5IC0tIG5vdCBmb3IgYWNjZXNzIGZyb20KLSAgIG91dHNpZGUpLgotCi0gICBUbyB1c2UgVVRG LTggb3IgYW55IG90aGVyIGNoYXJhY3RlciBzZXQgdGhhdCB1c2VzIDgtYml0IGJ5dGVzIGluIHlv dXIKLSAgIHRlcm1pbmFsIHNlc3Npb24sIGJlIHN1cmUgdG8gdGVsbCBDLUtlcm1pdCB0bzoKLQot ICBTRVQgVEVSTUlOQUwgQllURVNJWkUgOAotICBTRVQgQ09NTUFORCBCWVRFU0laRSA4Ci0gIFNF VCBQQVJJVFkgTk9ORQotCi0gICAob3IgdXNlIHRoZSBzaG9ydGN1dCBjb21tYW5kLCBFSUdIVEJJ VCwgd2hpY2ggZG9lcyBhbGwgdGhyZWUgYXQgb25jZSkuCi0KLSAgIEluIGEgc2V0dXAgd2hlcmUg eW91ciBsb2NhbCBLZXJtaXQgcHJvZ3JhbSB1c2VzIGEgc2luZ2xlLWJ5dGUgY2hhcmFjdGVyCi0g ICBzZXQgc3VjaCBhcyBQQyBDb2RlIFBhZ2UgODUwIGFuZCB0aGUgcmVtb3RlIGhvc3QgdXNlcyBV VEYtODoKLQotICBTRVQgVEVSTSBDSEFSIFVURjggQ1A4NTAKLQotICAgb3I6Ci0KLSAgU0VUIFRF Uk0gUkVNT1RFIENIQVIgVVRGOAotICBTRVQgVEVSTSBMT0NBTCBDSEFSIENQODUwCi0KLSAgIGFs bCB3b3JrcyBhcyBleHBlY3RlZC4gVVRGLTggdGV4dCBvbiB0aGUgcmVtb3RlIGRpc3BsYXlzIGNv cnJlY3RseSBvbgotICAgeW91ciBzY3JlZW4sIGFuZCB3aGVuIHlvdSB0eXBlIENQODUwIGNoYXJh Y3RlcnMsIHRoZXkgYXJlIHRyYW5zbGF0ZWQgdG8KLSAgIFVURi04IHNlcXVlbmNlcyBmb3IgdHJh bnNtaXNzaW9uLCBhbmQgdGhlIGVjaG8gZnJvbSB0aGUgaG9zdCBpcwotICAgdHJhbnNsYXRlZCBm cm9tIFVURi04IGJhY2sgdG8gQ1A4NTAuIFRlbG5ldCBuZWdvdGlhdGlvbnMgYW5kCi0gICBhdXRv ZG93bmxvYWQgdGFrZSBwbGFjZSBiZWZvcmUgYW55IGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24g YW5kIHdvcmsKLSAgIGFzIGJlZm9yZS4gVGhlIHNlc3Npb24gbG9nIChpZiB0ZXh0IG1vZGUgd2Fz IHNlbGVjdGVkIGZvciBpdCkgY29udGFpbnMKLSAgIG9ubHkgdGhlIGxvY2FsIHRlcm1pbmFsIGNo YXJhY3Rlci1zZXQuIEFuZCBzbyBvbi4KLQotICAgS2VybWl0IG1lcmVseSBzdXBwbGllcyB0cmFu c2xhdGlvbnMgZnJvbSBVVEYtOCB0byB5b3VyIGxvY2FsIHRlcm1pbmFsCi0gICBjaGFyYWN0ZXIt c2V0ICh0aGlzIGluY2x1ZGVzIHRyZWF0aW5nIFVURi04IExpbmUgU2VwYXJhdG9yIGFuZAotICAg UGFyYWdyYXBoIHNlcGFyYXRvciBhcyBDUkxGKS4gSG93ZXZlciwgS2VybWl0IGRvZXMgZG9lcyBu b3QsIGF0Ci0gICBwcmVzZW50LCBwZXJmb3JtICJjYW5vbmljYWxpemF0aW9uIiBvZiBjb21wb3Nl ZCBzZXF1ZW5jZXMsIG5vciBkb2VzIGl0Ci0gICBhdXRvbWF0aWNhbGx5IGV4ZWN1dGUgYmlkaXJl Y3Rpb25hbGl0eSBhbGdvcml0aG1zIGZvciBkaXNwbGF5IG9mCi0gICBtaXhlZC1kaXJlY3Rpb24g dGV4dCAoZS5nLiBIZWJyZXcgYW5kIEVuZ2xpc2gpLiBTdWNoIHByZXNlbnRhdGlvbgotICAgaXNz dWVzLCBsaWtlIGFsbCBvdGhlcnMgaW4gdGhlIHRlcm1pbmFsLWhvc3QgcmVnaW1lLCBhcmUgbGVm dCB0byB0aGUKLSAgIGhvc3QuCi0KLSAgIEJ5IHRoZSB3YXksIEMtS2VybWl0IGFsc28gYWxsb3dz IFVURi04IHRvIGJlIHRoZSBsb2NhbCBlbmQgb2YgdGhlCi0gICB0ZXJtaW5hbCBjaGFyYWN0ZXIt c2V0LCBidXQgc28gZmFyIHRoaXMgY29kZSBpcyBub3QgdGVzdGVkLCBzaW5jZSB3ZQotICAgZG9u J3QgaGF2ZSBhIFVURi04IGNvbnNvbGUgb3IgdGVybWluYWwgdG8gd29yayB3aXRoLiBIb3dldmVy LCBpdCBjYW4gYmUKLSAgIHN0YXRlZCB3aXRob3V0IGRvdWJ0IHRoYXQgQy1LZXJtaXQncyBrZXkg bWFwcGluZyB3aWxsIG5vdCB3b3JrIGZvcgotICAgVVRGLTggdmFsdWVzLCBzaW5jZSAoYSkgdGhl IGtleSBtYXAgaXMgaW5kZXhlZCBieSA4LWJpdCBieXRlIHZhbHVlcyBhbmQKLSAgIChiKSBDLUtl cm1pdCByZWFkcyBrZXlzdHJva2VzIGEgYnl0ZSBhdCBhIHRpbWUgKHRoZXNlIGNvbW1lbnRzIGRv IG5vdAotICAgYXBwbHkgdG8gSzk1LCB3aGljaCBoYXMgZGlyZWN0IGFjY2VzcyB0byB0aGUga2V5 Ym9hcmQgYW5kIGNhbiByZWFkCi0gICAid2lkZSIga2V5Y29kZXMgYW5kIHVzZXMgdGhlbSB0byBp bmRleCBhICJ3aWRlIiBrZXltYXApLgotCi0gICBSZXN0cmljdGlvbnM6IEFzIG5vdGVkLCB0aGUg Q09OTkVDVCBjb21tYW5kIGRvZXMgbm90IHN1cHBvcnQgVUNTLTIgYXMgYQotICAgUkVNT1RFIFRF Uk1JTkFMIGNoYXJhY3Rlci1zZXQuIE5laXRoZXIgZG9lcyBpdCBzdXBwb3J0IHRoZSBKYXBhbmVz ZQotICAgc2V0cyBFVUMtSlAsIEpJUy03LCBhbmQgU2hpZnQtSklTLiBTdXBwb3J0IGZvciB0aGUg SmFwYW5lc2Ugc2V0cyAoYW5kCi0gICBwb3NzaWJseSBDaGluZXNlIGFuZCBLb3JlYW4gdG9vKSBt aWdodCBiZSBhZGRlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLgotICAgU2luY2UgdGhlIFRSQU5TTUlU IGNvbW1hbmQgKG5leHQgc2VjdGlvbikgdXNlcyB0aGUgc2FtZSBSRU1PVEUgVEVSTUlOQUwKLSAg IGNoYXJhY3Rlci1zZXRzIGFzIHRoZSBDT05ORUNUIGNvbW1hbmQsIGl0IGhhcyB0aGUgc2FtZSBy ZXN0cmljdGlvbnMuCi0KLSAgICA2LjYuNS40LiBUaGUgVFJBTlNNSVQgQ29tbWFuZAotCi0gICBB cyBkZXNjcmliZWQgaW4gQ2hhcHRlciAxNSBvZiBbNTU1XVVzaW5nIEMtS2VybWl0IGFuZCBbNTU2 XVNlY3Rpb24gNC4yMQotICAgb2YgdGhpcyBkb2N1bWVudCwgdGhlIFRSQU5TTUlUIGNvbW1hbmQg Y2FuIGJlIHVzZWQgdG8gdXBsb2FkIGEgZmlsZQotICAgd2l0aG91dCBwcm90b2NvbCwgbW9yZSBv ciBsZXNzIGFzIGlmIHlvdSB3ZXJlIHR5cGluZyBpdCBvbiB5b3VyCi0gICBrZXlib2FyZCB3aGls ZSBjb25uZWN0ZWQgdG8gdGhlIGhvc3QuIFdoZW4gVFJBTlNNSVR0aW5nIGluIHRleHQgbW9kZSwK LSAgIHRoZSBmaWxlJ3MgY2hhcmFjdGVyIHNldCBpcyBjb252ZXJ0ZWQgdG8gdGhlIGhvc3QncyB1 bmxlc3MgeW91IGhhdmUgU0VUCi0gICBURVJNSU5BTCBDSEFSQUNURVItU0VUIFRSQU5TUEFSRU5U LCBvciB5b3UgaW5jbHVkZSB0aGUgbmV3IFRSQU5TTUlUCi0gICBzd2l0Y2gsIC9UUkFOU1BBUkVO VC4KLQotICAgQmVmb3JlIEMtS2VybWl0IDcuMCwgdGhlIGZpbGUgY2hhcmFjdGVyLXNldCB3YXMg YXNzdW1lZCB0byBiZSB0aGUgc2FtZQotICAgYXMgdGhlIGxvY2FsIGVuZCBvZiB0aGUgdGVybWlu YWwgY2hhcmFjdGVyLXNldCwgYW5kIHRoZSBUUkFOU01JVAotICAgY29tbWFuZCB1c2VkIHRoZSBz YW1lIHRyYW5zbGF0aW9ucyBhcyB0aGUgQ09OTkVDVCBjb21tYW5kLCBpZ25vcmluZyB0aGUKLSAg IGZpbGUgY2hhcmFjdGVyLXNldC4KLQotICAgSW4gQy1LZXJtaXQgNy4wLCB0aGF0IGFzc3VtcHRp b24gKGEgcG9vciBvbmUgdG8gYmVnaW4gd2l0aCkgY2FuIG5vCi0gICBsb25nZXIgYmUgbWFkZSwg c2luY2UgVUNTLTIgY2FuIGJlIGEgZmlsZSBjaGFyYWN0ZXItc2V0IGJ1dCBub3QgYQotICAgdGVy bWluYWwgY2hhcmFjdGVyLXNldC4gU28gbm93IHRoZSBmaWxlJ3MgY2hhcmFjdGVyLXNldCBpcyBn aXZlbiBieQotICAgeW91ciBtb3N0IHJlY2VudCBTRVQgRklMRSBDSEFSQUNURVItU0VUIGNvbW1h bmQuIFRoZSBob3N0J3MgY2hhcmFjdGVyCi0gICBzZXQgaXMgdGhlIHJlbW90ZSBlbmQgb2YgeW91 ciBtb3N0IHJlY2VudCBTRVQgVEVSTUlOQUwgQ0hBUkFDVEVSLVNFVAotICAgY29tbWFuZDoKLQot ICBTRVQgVEVSTUlOQUwgQ0hBUkFDVEVSLVNFVCByZW1vdGUtc2V0IFsgbG9jYWwtc2V0IF0KLQot ICAgb3I6Ci0KLSAgU0VUIFRFUk1JTkFMIFJFTU9URS1DSEFSQUNURVItU0VUIHJlbW90ZS1zZXQK LQotICAgVGhlIFRSQU5TTUlUIGNvbW1hbmQgY29udmVydHMgZWFjaCBzb3VyY2UtZmlsZSBjaGFy YWN0ZXIgZnJvbSB0aGUgRklMRQotICAgY2hhcmFjdGVyLXNldCB0byB0aGUgUkVNT1RFIFRFUk1J TkFMIGNoYXJhY3Rlci1zZXQsIGFuZCB0aGVuIHRyYW5zbWl0cwotICAgdGhlIHRyYW5zbGF0ZWQg Y2hhcmFjdGVycyBhY2NvcmRpbmcgdG8geW91ciBTRVQgVFJBTlNNSVQgcHJlZmVyZW5jZXMKLSAg IChDaGFwdGVyIDE1KS4KLQotICAgSWYgeW91IGhhdmUgU0VUIFRSQU5TTUlUIEVDSE8gT04sIGFu ZCB0aGUgaG9zdCBpcyBlY2hvaW5nIHRoZQotICAgdHJhbnNtaXR0ZWQgY2hhcmFjdGVycywgdGhl IGVjaG9zIGFyZSBjb252ZXJ0ZWQgZnJvbSB0aGUgcmVtb3RlCi0gICB0ZXJtaW5hbCBjaGFyYWN0 ZXItc2V0IHRvIHRoZSBsb2NhbCB0ZXJtaW5hbCBjaGFyYWN0ZXItc2V0LgotCi0gIFsgQSBwaWN0 dXJlIHdvdWxkIGhlbHAuLi4gXQotCi0gICBDb25mdXNlZD8gTGV0J3Mgd29yayB0aHJvdWdoIGFu IGV4YW1wbGUuIFN1cHBvc2UgeW91ciBsb2NhbCBjb21wdXRlciBpcwotICAgYSBOZVhUc3RhdGlv biwgb24gd2hpY2ggdGV4dCBmaWxlcyBhcmUgZW5jb2RlZCBpbiB0aGUgTmVYVCBjaGFyYWN0ZXIK LSAgIHNldCwgYW5kIHRoYXQgdGhlIHJlbW90ZSBjb21wdXRlciBpcyBhIERhdGEgR2VuZXJhbCBB VmlpT04sIHdoaWNoIHVzZXMKLSAgIHRoZSBEYXRhIEdlbmVyYWwgSW50ZXJuYXRpb25hbCBjaGFy YWN0ZXIgc2V0LiBGdXJ0aGVyIHN1cHBvc2UgdGhhdCB5b3UKLSAgIGFyZSBsb2dnZWQgaW4gdG8g dGhlIE5lWFQgZnJvbSBhIFZUMjIwIHRlcm1pbmFsIHdoaWNoIHVzZXMgdGhlIERFQwotICAgTXVs dGluYXRpb25hbCBjaGFyYWN0ZXIgc2V0LgotCi0gICBZb3UgbmVlZCB0byBjb252ZXJ0IHRoZSBm aWxlIGZyb20gTmVYVCBlbmNvZGluZyB0byBERyBlbmNvZGluZyBhbmQKLSAgIGNvbnZlcnQgdGhl IGVjaG9lcyBmcm9tIERHIGVuY29kaW5nIHRvIERFQyBlbmNvZGluZy4gU28gb24gdGhlIE5lWFQs Ci0gICB0ZWxsIEMtS2VybWl0IHRvOgotCi0gIGVpZ2h0Yml0Ci0gIHNldCBmaWxlIGNoYXJhY3Rl ci1zZXQgbmV4dAotICBzZXQgdGVybSBjaGFyYWN0ZXItc2V0IGRnLWludGVybmF0aW9uYWwgZGVj LW1jcwotICB0cmFuc21pdCAvdGV4dCBuZXh0ZGF0YS50eHQKLQotICAgKFRoaXMgYXNzdW1lcyB5 b3UgaGF2ZSBzb21lIHNvcnQgb2YgY29sbGVjdGlvbiBwcm9jZXNzIGFscmVhZHkgc2V0IHVwCi0g ICBvbiB0aGUgRGF0YSBHZW5lcmFsLCBzdWNoIGFzIGEgdGV4dCBlZGl0b3Igb3IgdGhlIHZlbmVy YWJsZSAiY2F0ID4KLSAgIGZvbyIuIFRoZSBFSUdIVEJJVCBjb21tYW5kIGlzIGVxdWl2YWxlbnQg dG8gU0VUIFRFUk1JTkFMIEJZVEVTSVpFIDgsCi0gICBTRVQgQ09NTUFORCBCWVRFU0laRSA4LCBT RVQgUEFSSVRZIE5PTkUuKQotCi0gICBUbyBmdXJ0aGVyIGNvbXBsaWNhdGUgbWF0dGVycywgc3Vw cG9zZSB5b3VyIGxvY2FsIHRlcm1pbmFsIGNoYXJhY3RlcgotICAgc2V0IGlzIHRoZSBzYW1lIGFz IHRoZSByZW1vdGUgb25lLCBzbyB5b3UgZG9uJ3QgbmVlZCB0ZXJtaW5hbAotICAgY2hhcmFjdGVy LXNldCB0cmFuc2xhdGlvbiwgYnV0IHlvdSBuZWVkIHRvIFRSQU5TTUlUIGEgZmlsZSB0aGF0IGlz IGluIGEKLSAgIGRpZmZlcmVudCBjaGFyYWN0ZXIgc2V0IGFuZCB5b3Ugd2FudCBpdCB0cmFuc2xh dGVkIHRvIHRoZSBob3N0IHNldC4gSW4KLSAgIHRoaXMgY2FzZSwgdXNlIFNFVCBURVJNIENIQVJB Q1RFUi1TRVQgdG8gYWN0dWFsbHkgc3BlY2lmeSB0aGUgY2hhcmFjdGVyCi0gICBzZXQgdXNlZCBv biBlYWNoIGVuZCwgcmF0aGVyIHRoYW4gc3BlY2lmeWluZyBUUkFOU1BBUkVOVDoKLQotICBlaWdo dGJpdAotICBzZXQgZmlsZSBjaGFyYWN0ZXItc2V0IHVjczIKLSAgc2V0IHRlcm0gY2hhcmFjdGVy LXNldCBsYXRpbjEgbGF0aW4xCi0gIHRyYW5zbWl0IC90ZXh0IHVjczJkYXRhLnR4dAotCi0gICBU aGUgZGlzdGluY3Rpb24gYmV0d2VlbjoKLQotICBTRVQgVEVSTUlOQUwgQ0hBUkFDVEVSLVNFVCB4 eHggeXl5Ci0KLSAgICh3aGVyZSB4eHggYW5kIHl5eSBhcmUgdGhlIHNhbWUgc2V0KSBhbmQ6Ci0K LSAgU0VUIFRFUk1JTkFMIENIQVJBQ1RFUi1TRVQgVFJBTlNQQVJFTlQKLQotICAgaXMgbmV3IHRv IEMtS2VybWl0IDcuMCwgYnV0IGFmZmVjdHMgb25seSB0aGUgVFJBTlNNSVQgY29tbWFuZC4KLQot ICAgVGhlIFRSQU5TTUlUIGNvbW1hbmQgY3VycmVudGx5IGRvZXMgbm90aGluZyBzcGVjaWFsIHdp dGggVUNTLTIvVVRGLTgKLSAgIExpbmUgYW5kIFBhcmFncmFwaCBTZXBhcmF0b3IgY2hhcmFjdGVy czsgbW9yZSBleHBlcmllbmNlIGlzIHJlcXVpcmVkIHRvCi0gICBmaW5kIG91dCBob3cgdGhlc2Ug YmVoYXZlIGluIGEgZ2VudWluZSBVbmljb2RlIHRlcm1pbmFsLWhvc3Qgc2V0dGluZy4KLQotICAg UmVzdHJpY3Rpb25zOiBBcyBub3RlZCwgdGhlIFRSQU5TTUlUIGNvbW1hbmQgdHJhbnNsYXRlcyBm cm9tIHRoZSBGSUxFCi0gICBjaGFyYWN0ZXItc2V0IHRvIHRoZSBSRU1PVEUgVEVSTUlOQUwgY2hh cmFjdGVyLXNldC4gVGhpcyBydWxlcyBvdXQKLSAgIHRyYW5zbGF0aW9ucyB0byBhbnkgY2hhcmFj dGVyIHNldCB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBSRU1PVEUKLSAgIFRFUk1JTkFMIGNo YXJhY3Rlci1zZXQsIHN1Y2ggYXMgVUNTLTIsIEVVQy1KUCwgSklTLTcsIGFuZCBTaGlmdC1KSVMu Ci0KLSAgICA2LjYuNS41LiBTdW1tYXJ5IG9mIEtlcm1pdCBVbmljb2RlIENvbW1hbmRzCi0KLSAg IFNwZWNpZnlpbmcgZmlsZSBjaGFyYWN0ZXItc2V0IGFuZCBieXRlIG9yZGVyOgotICAgICAgICAg IFNFVCBGSUxFIENIQVJBQ1RFUi1TRVQgeyAuLi4sIFVDUzIsIFVURjggfQotICAgICAgICAgIFJF TU9URSBTRVQgRklMRSBDSEFSQUNURVItU0VUIHsgLi4uLCBVQ1MyLCBVVEY4IH0gKFNlZSBuZXh0 Ci0gICAgICAgICAgc2VjdGlvbikKLSAgICAgICAgICBTRVQgRklMRSBVQ1MgQk9NIHsgT04sIE9G RiB9Ci0gICAgICAgICAgU0VUIEZJTEUgVUNTIEJZVEUtT1JERVIgeyBCSUctRU5ESUFOLCBMSVRU TEUtRU5ESUFOIH0KLQotICAgU3BlY2lmeWluZyB0aGUgdHJhbnNmZXIgY2hhcmFjdGVyLXNldDoK LSAgICAgICAgICBTRVQgVFJBTlNGRVIgQ0hBUkFDVEVSLVNFVCB7IC4uLiwgVUNTLTIsIFVURi04 IH0KLSAgICAgICAgICBSRU1PVEUgU0VUIFRSQU5TRkVSIENIQVJBQ1RFUi1TRVQgeyAuLi4sIFVD Uy0yLCBVVEYtOCB9Ci0KLSAgIFNwZWNpZnlpbmcgdGhlIHRlcm1pbmFsIGNoYXJhY3Rlci1zZXQ6 Ci0gICAgICAgICAgU0VUIFRFUk1JTkFMIENIQVJBQ1RFUi1TRVQgeyAuLi4sIFVURjggfSB7IC4u LiwgVVRGOCB9Ci0gICAgICAgICAgU0VUIFRFUk1JTkFMIFJFTU9URS1DSEFSQUNURVItU0VUIHsg Li4uLCBVVEY4IH0KLSAgICAgICAgICBTRVQgVEVSTUlOQUwgTE9DQUwtQ0hBUkFDVEVSLVNFVCB7 IC4uLiwgVVRGOCB9Ci0KLSAgIERpc3BsYXlpbmcgc2V0dGluZ3M6Ci0gICAgICAgICAgU0hPVyBG SUxFCi0gICAgICAgICAgU0hPVyBUUkFOU0ZFUgotICAgICAgICAgIFNIT1cgVEVSTUlOQUwKLSAg ICAgICAgICBTSE9XIENIQVJBQ1RFUi1TRVRTCi0KLSAgIENvbW1hbmRzIHRoYXQgdXNlIHRoZXNl IHNldHRpbmdzIGluY2x1ZGU6Ci0gICAgICAgICAgU0VORCwgUkVDRUlWRSwgR0VULCBldGMuCi0g ICAgICAgICAgQ09OTkVDVAotICAgICAgICAgIFRSQU5TTUlUCi0gICAgICAgICAgTE9HIFNFU1NJ T04KLQotICAgQ29udmVydGluZyBmaWxlczoKLSAgICAgICAgICBUUkFOU0xBVEUgaW5maWxlIHsg Li4uLCBVQ1MtMiwgVVRGLTggfSB7IC4uLiwgVUNTLTIsIFVURi04IH0KLSAgICAgICAgICBvdXRm aWxlCi0gICAgICAgICAgQ09QWSAvU1dBUC1CWVRFUyBpbmZpbGUgb3V0ZmlsZQotCi0gIDYuNy4g Q2xpZW50L1NlcnZlciBDaGFyYWN0ZXItU2V0IFN3aXRjaGluZwotCi0gICBBIHNpbXBsZSBtZWNo YW5pc20gaGFzIGJlZW4gYWRkZWQgdG8gYWxsb3cgdGhlIGNsaWVudCB0byBjaGFuZ2UgdGhlCi0g ICBzZXJ2ZXIncyBGSUxFIENIQVJBQ1RFUi1TRVQ6Ci0KLSAgIFJFTU9URSBTRVQgRklMRSBDSEFS QUNURVItU0VUIG5hbWUKLSAgICAgICAgICBUaGUgY2xpZW50IGFza3MgdGhlIHNlcnZlciB0byBj aGFuZ2UgaXRzIGZpbGUgY2hhcmFjdGVyLXNldCB0bwotICAgICAgICAgIHRoZSBvbmUgZ2l2ZW4u IFRoZSBuYW1lIG11c3QgbWF0Y2ggb25lIG9mIHRoZSBzZXJ2ZXIncyBmaWxlCi0gICAgICAgICAg Y2hhcmFjdGVyLXNldCBuYW1lcy4gRm9yIGNvbnZlbmllbmNlLCBDLUtlcm1pdCB1c2VzIGl0cyBv d24gZmlsZQotICAgICAgICAgIGNoYXJhY3Rlci1zZXQga2V5d29yZCBsaXN0IGZvciBwYXJzaW5n IHRoaXMgY29tbWFuZCBzbyB5b3UgY2FuCi0gICAgICAgICAgdXNlID8gZm9yIGhlbHAgYW5kIFRh YiBvciBFc2MgZm9yIGNvbXBsZXRpb24uIEhvd2V2ZXIsIHNpbmNlIHRoZQotICAgICAgICAgIHNl cnZlciBtaWdodCBoYXZlIGEgZGlmZmVyZW50IHJlcGVydG9pcmUgKG9yIGV2ZW4gdXNlIGRpZmZl cmVudAotICAgICAgICAgIG5hbWVzIGZvciB0aGUgc2FtZSBzZXRzKSwgQy1LZXJtaXQgYWNjZXB0 cyBhbnkgc3RyaW5nIHlvdSBzdXBwbHkKLSAgICAgICAgICBhbmQgc2VuZHMgaXQgdG8gdGhlIHNl cnZlci4gVGhlIHNlcnZlciwgaWYgaXQgc3VwcG9ydHMgdGhpcwotICAgICAgICAgIGNvbW1hbmQg KEMtS2VybWl0IDcuMCBhbmQgSzk1IDEuMS4xOSBkbyksIHNldHMgaXRzIGZpbGUKLSAgICAgICAg ICBjaGFyYWN0ZXItc2V0IGFzIHJlcXVlc3RlZCwgYW5kIGFsc28gZGlzYWJsZXMgYXV0b21hdGlj Ci0gICAgICAgICAgY2hhcmFjdGVyLXNldCBzd2l0Y2hpbmcgKFs1NTddU2VjdGlvbiA2LjUpLiBJ ZiB0aGUgc2VydmVyIGRvZXMKLSAgICAgICAgICBub3Qgc3VwcG9ydCB0aGlzIGNvbW1hbmQgb3Ig aWYgaXQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZ2l2ZW4KLSAgICAgICAgICBjaGFyYWN0ZXIgc2V0 LCB0aGUgUkVNT1RFIFNFVCBGSUxFIENIQVJBQ1RFUi1TRVQgY29tbWFuZCBmYWlscy4KLQotICAg SGVyZSdzIGFuIGV4YW1wbGUgdGhhdCBzZW5kcyBhIEphcGFuZXNlIHRleHQgZmlsZSBlbmNvZGVk IGluIFNoaWZ0LUpJUwotICAgdG8gYSBzZXJ2ZXIgdXNpbmcgZXZlcnkgY29tYmluYXRpb24gb2Yg S2VybWl0J3MgSmFwYW5lc2UtY2FwYWJsZSBmaWxlCi0gICBhbmQgdHJhbnNmZXIgY2hhcmFjdGVy IHNldHM6Ci0KLSAgZGNsIFwmeFtdID0gZXVjIHVjczIgdXRmOCAgICAgICAgICAgICA7IHRyYW5z ZmVyIGNoYXJhY3Rlci1zZXRzCi0gIGRjbCBcJnlbXSA9IGV1IHVjIHV0ICAgICAgICAgICAgICAg ICAgOyAyLWxldHRlciBhYmJyZXZpYXRpb25zIGZvciB0aGVtCi0gIGRjbCBcJmZbXSA9IHNoaWZ0 IGV1YyBqaXM3IHVjczIgdXRmOCAgOyBmaWxlIGNoYXJhY3Rlci1zZXRzCi0gIGRjbCBcJmdbXSA9 IHNqIGV1IGo3IHVjIHV0ICAgICAgICAgICAgOyAyLWxldHRlciBhYmJyZXZpYXRpb25zCi0KLSAg c2V0IGZpbGUgY2hhciBzaGlmdC1qaXMgICAgICAgICAgICAgICA7IGxvY2FsIGZpbGUgY2hhcmFj dGVyLXNldCBpcyBTaGlmdC1KSVMKLSAgZm9yIFwlaSAxIFxmZGltKCZ4KSAxIHsgICAgICAgICAg ICAgICA7IGZvciBlYWNoIHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQuLi4KLSAgICAgIHNldCB4ZmVy IGNoYXIgXCZ4W1wlaV0gICAgICAgICAgICA7IHNldCBpdAotICAgICAgZm9yIFwlaiAxIFxmZGlt KCZmKSAxIHsgICAgICAgICAgIDsgZm9yIGVhY2ggcmVtb3RlIGZpbGUgY2hhcmFjdGVyLXNldC4u LgotICAgICAgICAgIHJlbW90ZSBzZXQgZmlsZSBjaGFyIFwmZltcJWpdIDsgc2V0IGl0Ci0gICAg ICAgICAgaWYgZmFpbCBleGl0IDEgU0VSVkVSIFJFSkVDVEVEIENIQVJTRVQKLSAgICAgICAgICBz ZW5kIC90ZXh0IG1laWJvLXNqLmh0bWwgbWVpYm8tc2otXCZ5W1wlaV0tXCZnW1wlal0udHh0IDsg c2VuZCB0aGUgZmlsCi1lCi0gICAgICAgICAgaWYgZmFpbCBleGl0IDEgVFJBTlNGRVIgRkFJTEVE Ci0gICAgICB9Ci0gIH0KLQotICAgVGhlIEtlcm1pdC0zNzAgc2VydmVyIGRvZXMgbm90IHN1cHBv cnQgUkVNT1RFIFNFVCBGSUxFIENIQVJBQ1RFUi1TRVQsCi0gICBidXQgc2luY2UgaXQgc3VwcG9y dHMgUkVNT1RFIEtFUk1JVCBjb21tYW5kcywgeW91IGNhbiBnZXQgdGhlIHNhbWUKLSAgIGVmZmVj dCB3aXRoIFJFTU9URSBLRVJNSVQgU0VUIEZJTEUgQ0hBUkFDVEVSLVNFVCBuYW1lLgotCi0gIDcu IFNDUklQVCBQUk9HUkFNTUlORwotCi0gICAoQWxzbyBzZWUgWzU1OF1TZWN0aW9uIDIuOCwgU2Ny aXB0aW5nIExvY2FsIFByb2dyYW1zLikKLQotICA3LjAuIEJ1ZyBGaXhlcwotCi0gICBUaGUgZm9s bG93aW5nIHNjcmlwdCBwcm9ncmFtbWluZyBidWdzIHdlcmUgZml4ZWQgaW4gQy1LZXJtaXQgNy4w OgotCi0gICAgICogSUYgRVhJU1QgYW5kIElGIERJUkVDVE9SWSB3ZXJlIGZpeGVkIHRvIHByb3Bl cmx5IHN0cmlwIGJyYWNlcyBmcm9tCi0gICAgICAgYXJvdW5kIHRoZWlyIGFyZ3VtZW50cywgc28g ImlmIGRpcmVjdG9yeSB7QzpcUHJvZ3JhbSBGaWxlc30iLCBldGMsCi0gICAgICAgd291bGQgd29y ayBhcyBleHBlY3RlZC4gSG93ZXZlciwgdGhpcyBtZWFucyB0aGF0IGlmIHRoZSBmaWxlIG9yCi0g ICAgICAgZGlyZWN0b3J5IG5hbWUgaXMgYWN0dWFsbHkgZW5jbG9zZWQgaW4gYnJhY2VzLCB0aGUg YnJhY2VzIG11c3QgYmUKLSAgICAgICBkb3VibGVkLgotICAgICAqIFRoZSBSRUFEIGNvbW1hbmQg ZGlkIG5vdCBmYWlsIGlmIHRoZSBSRUFEIGZpbGUgd2Fzbid0IG9wZW47IG5vdyBpdAotICAgICAg IGRvZXMuCi0gICAgICogVGhlIFJFQUQgY29tbWFuZCByZWZ1c2VkIHRvIHJlYWQgdGhlIGxhc3Qg b3Igb25seSBsaW5lIG9mIGEgZmlsZSBpZgotICAgICAgIGl0IGRpZCBub3QgZW5kIHdpdGggYSBw cm9wZXIgbGluZSB0ZXJtaW5hdG9yOyBub3cgaXQgZG9lcy4KLSAgICAgKiBUaGUgRU5EIGNvbW1h bmQsIHdoZW4gZ2l2ZW4gZnJvbSB3aXRoaW4gYSBTV0lUQ0ggc3RhdGVtZW50LCBkaWQgbm90Ci0g ICAgICAgZXhpdCBmcm9tIHRoZSBjdXJyZW50IG1hY3JvIG9yIGNvbW1hbmQgZmlsZTsgaW5zdGVh ZCBpdCBqdXN0Ci0gICAgICAgdGVybWluYXRlZCB0aGUgU1dJVENILgotCi0gIDcuMS4gVGhlIElO UFVUIENvbW1hbmQKLQotICAgNy4xLjEuIElOUFVUIFRpbWVvdXRzCi0KLSAgIFRoZSBkZXNjcmlw dGlvbiBvZiB0aGUgSU5QVVQgY29tbWFuZCBvbiBwYWdlIDQyMiBmYWlscyB0byBtZW50aW9uIHRo ZQotICAgZm9sbG93aW5nIHR3byBwb2ludHMgYWJvdXQgdGhlIHRpbWVvdXQgKHdoaWNoIGFwcGx5 IHRvIEMtS2VybWl0IDYuMCBhbmQKLSAgIGxhdGVyKToKLQotICAgIDEuICJJTlBVVCAtMSB0ZXh0 IiAob3IgIklOUFVUIFwleCB0ZXh0Iiwgd2hlcmUgXCV4IGlzIGFueSB2YXJpYWJsZQotICAgICAg IHdob3NlIHZhbHVlIGlzIC0xIG9yIGxlc3MpIG1lYW5zICJ3YWl0IGZvcmV2ZXIiLiBUaGlzIGZv cm0gb2YgdGhlCi0gICAgICAgSU5QVVQgY29tbWFuZCBmYWlscyBvbmx5IGlmIGl0IGlzIGludGVy cnVwdGVkLCBzaW5jZSBpdCB3aWxsIG5ldmVyCi0gICAgICAgdGltZSBvdXQuCi0gICAgMi4gSU5Q VVQgMCBwZXJmb3JtcyBhIG5vbmJsb2NraW5nIHJlYWQgb2YgbWF0ZXJpYWwgdGhhdCBoYXMgYWxy ZWFkeQotICAgICAgIGFycml2ZWQgYnV0IGhhcyBub3QgeWV0IGJlZW4gcmVhZCwgYW5kIHN1Y2Nl ZWRzIGltbWVkaWF0ZWx5IGlmIHRoZQotICAgICAgIHRhcmdldCBzdHJpbmcgaXMgZm91bmQsIG9y IGZhaWxzIGltbWVkaWF0ZWx5IGlmIGl0IGlzIG5vdCBmb3VuZC4KLQotICAgVGhlIHNhbWUgcG9p bnRzIGFwcGx5IHRvIE1JTlBVVC4gUkVJTlBVVCBpZ25vcmVzIGl0cyB0aW1lb3V0IHBhcmFtZXRl ci4KLQotICAgIDcuMS4yLiBOZXcgSU5QVVQgQ29udHJvbHMKLQotICAgVGhlIGZvbGxvd2luZyBu ZXcgSU5QVVQgY29udHJvbHMgd2VyZSBhZGRlZCBpbiB2ZXJzaW9uIDcuMDoKLQotICAgU0VUIElO UFVUIEFVVE9ET1dOTE9BRCB7IE9OLCBPRkYgfQotICAgICAgICAgIEV4cGxhaW5lZCBpbiBbNTU5 XVNlY3Rpb24gNy43LgotCi0gICBTRVQgSU5QVVQgQ0FOQ0VMTEFUSU9OIHsgT04sIE9GRiB9Ci0g ICAgICAgICAgVGhpcyBnb3Zlcm5zIHdoZXRoZXIgYW4gSU5QVVQgY29tbWFuZCBjYW4gYmUgY2Fu Y2VsZWQgYnkKLSAgICAgICAgICAicHJlc3NpbmcgYW55IGtleSIgb24gdGhlIGtleWJvYXJkLiBO b3JtYWxseSBpdCBjYW4gYmUsIGluIHdoaWNoCi0gICAgICAgICAgY2FzZSB0aGUgSU5QVVQgY29t bWFuZCBmYWlscyBpbW1lZGlhdGVseSBhbmQgXHYoaW5zdGF0dXMpIGlzIHNldAotICAgICAgICAg IHRvIDIsIGluZGljYXRpbmcgaW50ZXJydXB0aW9uLiBTRVQgSU5QVVQgQ0FOQ0VMTEFUSU9OIE9G RgotICAgICAgICAgIGRpc2FibGVzIGtleWJvYXJkIGNhbmNlbGxhdGlvbnM7IHRodXMgaWYgdGhl IHNlYXJjaCB0ZXh0IGlzIG5vdAotICAgICAgICAgIGVuY291bnRlcmVkLCB0aGUgSU5QVVQgY29t bWFuZCB3aWxsIHJ1biBmb3IgaXRzIGVudGlyZSB0aW1lb3V0Ci0gICAgICAgICAgaW50ZXJ2YWwu IFNFVCBJTlBVVCBDQU5DRUxMQVRJT04gT0ZGIGRvZXMgbm90IGRpc2FibGUKLSAgICAgICAgICBp bnRlcnJ1cHRpb24gYnkgQ3RybC1DLCBob3dldmVyOyBldmVyeSBjb21tYW5kIG5lZWRzIGFuCi0g ICAgICAgICAgZW1lcmdlbmN5IGV4aXQuIChJZiB5b3UgcmVhbGx5IHdhbnQgdG8gZGlzYWJsZSBp bnRlcnJ1cHRpb24gYnkKLSAgICAgICAgICBDdHJsLUMsIHVzZSBTRVQgQ09NTUFORCBJTlRFUlJV UFRJT04gT0ZGLikKLQotICAgQWxzbyBzZWUgWzU2MF1TZWN0aW9uIDcuMiBmb3IgYW55IG5ldyB2 YXJpYWJsZXMgcmVsYXRlZCB0byBJTlBVVC4KLQotICAgIDcuMS4zLiBJTlBVVCB3aXRoIFBhdHRl cm4gTWF0Y2hpbmcKLQotICAgQy1LZXJtaXQgNy4wIGFsbG93cyBJTlBVVCwgTUlOUFVULCBhbmQg UkVJTlBVVCB0YXJnZXRzIHRvIGJlIGEgcGF0dGVybgotICAgKGV4cGxhaW5lZCBpbiBbNTYxXVNl Y3Rpb25zIDEuMTkgYW5kIFs1NjJdNC45KS4gVGhpcyBzb2x2ZXMgYQotICAgbG9uZy1zdGFuZGlu ZyBwcm9ibGVtIGlsbHVzdHJhdGVkIGJ5IHRoZSBmb2xsb3dpbmcgc2NlbmFyaW86IGEgY2VydGFp bgotICAgY29tcGFueSBoYXMgYSBiYW5rIG9mIFRDUC9JUCBtb2RlbSBzZXJ2ZXJzLCB3aXRoIGhv c3RuYW1lcyBzZXJ2ZXIxLAotICAgc2VydmVyMiwgc2VydmVyMywgYW5kIHNvIG9uLiBFYWNoIHNl cnZlcidzIHByb21wdCBpcyBpdHMgbmFtZSwgZm9sbG93ZWQKLSAgIGJ5IGEgY29sb24gKDopLCBm b3IgZXhhbXBsZSAiU2VydmVyNzI6Ii4gV2l0aG91dCBJTlBVVCBwYXR0ZXJucywgaXQKLSAgIHdv dWxkIGJlIHJhdGhlciBkaWZmaWN1bHQgdG8gd2FpdCBmb3IgdGhlIHByb21wdC4gVGhlIGJydXRl IGZvcmNlCi0gICBhcHByb2FjaDoKLQotICBtaW5wdXQgMjAgU2VydmVyMTogU2VydmVyMjogU2Vy dmVyMzogLi4uIChlbnVtZXJhdGluZyBlYWNoIG9uZSkKLQotICAgaXMgc3ViamVjdCB0byBmYWls dXJlIHdoZW5ldmVyIGEgbmV3IHNlcnZlciBpcyBhZGRlZC4gQSBtb3JlIHN1YnRsZQotICAgYXBw cm9hY2g6Ci0KLSAgaW5wdXQgMjAgU2VydmVyCi0gIGlmIGZhaWwgLi4uCi0gIGlucHV0IDIgOgot Ci0gICBpcyBsaWFibGUgdG8gZmFsc2UgcG9zaXRpdmVzLCBlLmcuICJXZWxjb21lIHRvIHRoZSBY WVogQ29ycCBNb2RlbQotICAgU2VydmVyLiBQbGVhc2UgcmVhZCB0aGUgZm9sbG93aW5nIG1lc3Nh Z2U6Ii4uLgotCi0gICBXaXRoIHBhdHRlcm5zLCB5b3UgY2FuIG1hdGNoIHRoZSBwcm9tcHQgd2l0 aCAiU2VydmVyKjoiICh3aGljaCBkb2Vzbid0Ci0gICBzb2x2ZSB0aGUgImZhbHNlIHBvc2l0aXZl cyIgcHJvYmxlbSwgYnV0IGNlcnRhaW5seSBpcyBtb3JlIGNvbXBhY3QgdGhhbgotICAgdGhlIGJy dXRlIGZvcmNlIG1ldGhvZCksIG9yIHdpdGggbW9yZSBzcGVjaWZpYyBwYXR0ZXJucyBzdWNoIGFz Ci0gICAiU2VydmVyWzEtOV06IiBhbmQgIlNlcnZlclsxLTldWzAtOV06Iiwgb3IgZXF1aXZhbGVu dGx5OgotCi0gIFNlcnZlcntbMS05XSxbMS05XVswLTldfToKLQotICAgbWVhbmluZyB0aGUgd29y ZCAiU2VydmVyIiBmb2xsb3dlZCBieSBhIHNpbmdsZSBkaWdpdCAoMS05KSBvciBieSB0d28KLSAg IGRpZ2l0cyByZXByZXNlbnRpbmcgYSBudW1iZXIgZnJvbSAxIHRvIDk5LCBmb2xsb3dlZCBieSBh IGNvbG9uLgotCi0gICBJTlBVVCBwYXR0ZXJuIG1hdGNoaW5nIGhhcyBiZWVuIGFkZGVkIGluIGEg d2F5IHRoYXQgZG9lcyBub3QgaW50ZXJmZXJlCi0gICB3aXRoIGV4aXN0aW5nIHNjcmlwdHMuIE5v IG5ldyBjb21tYW5kcyBvciBzd2l0Y2hlcyBhcmUgdXNlZC4gVGhlIHNpbXBsZQotICAgcnVsZSBp czogaWYgYW4gSU5QVVQgc2VhcmNoIHRhcmdldCBpcyB0aGUgYXJndW1lbnQgb2YgdGhlIChuZXcp Ci0gICBcZnBhdHRlcm4oKSBmdW5jdGlvbiwgaXQgaXMgYSBwYXR0ZXJuLiBPdGhlcndpc2UgaXQg aXMgdGFrZW4gbGl0ZXJhbGx5LAotICAgYXMgYmVmb3JlLiBGb3IgZXhhbXBsZToKLQotICBpbnB1 dCA1IGEqYgotCi0gICBzZWFyY2hlcyBmb3IgYW4gJ2EnIGZvbGxvd2VkIGJ5IGFuIGFzdGVyaXNr ICgnKicpLCBmb2xsb3dlZCBieSBhICdiJy4KLSAgIEJ1dDoKLQotICBpbnB1dCA1IFxmcGF0dGVy bihhKmIpCi0KLSAgIHNlYXJjaGVzIGZvciBhbiAnYScgZm9sbG93ZWQgYnkgYW55dGhpbmcgYXQg YWxsIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlCi0gICBmaXJzdCAnYicuIFRoaXMgbWVhbnMgdGhh dCBhbnkgc2VhcmNoIHRhcmdldCB0byBJTlBVVCwgTUlOUFVULCBvcgotICAgUkVJTlBVVCBjYW4g YmUgYSBwYXR0ZXJuIG9yIGEgbGl0ZXJhbCBzdHJpbmcsIGFuZCBpbiBwYXJ0aWN1bGFyIHRoYXQK LSAgIE1JTlBVVCBjYW4gYWNjb21tb2RhdGUgYW55IG1peHR1cmUgb2YgcGF0dGVybnMgYW5kIGxp dGVyYWwgc3RyaW5ncy4KLQotICAgSW4gc2VsZWN0aW5nIHBhdHRlcm5zLCBub3RlIHRoYXQ6Ci0K LSAgICAgKiBBIGxlYWRpbmcgJyonIGlzIGFsd2F5cyBpbXBsaWVkIHNvIHRoZXJlIGlzIG5vIG5l ZWQgdG8gaW5jbHVkZSBvbmUuCi0gICAgICogQSB0cmFpbGluZyAnKicgaXMgbWVhbmluZ2xlc3Mg YW5kIGlnbm9yZWQuCi0gICAgICogQSAnKicgYnkgaXRzZWxmIG1hdGNoZXMgdGhlIGZpcnN0IGNo YXJhY3RlciB0aGF0IGFycml2ZXMuCi0KLSAgIEEgc3ludGF4IG5vdGU6IElmIHlvdXIgcGF0dGVy biBpcyBhIHNlbGVjdGlvbiBsaXN0LCBtZWFuaW5nIGEgbGlzdCBvZgotICAgYWx0ZXJuYXRpdmVz IHNlcGFyYXRlZCBieSBjb21tYXMgYW5kIGVuY2xvc2VkIGluIGJyYWNlcywgdGhlbiB0aGUgb3V0 ZXIKLSAgIGJyYWNlcyB3aWxsIGJlIHN0cmlwcGVkIGJ5IHZhcmlvdXMgbGV2ZWxzIG9mIHBhcnNl cnMsIHNvIHlvdSBtdXN0Ci0gICBpbmNsdWRlIHRocmVlIG9mIGVhY2g6Ci0KLSAgaW5wdXQgMTAg XGZwYXR0ZXJuKHt7e2FiYyxtbm8seHl6fX19KQotCi0gICBOb3RlIHRoYXQgdGhpcyBpcyBlcXVp dmFsZW50IHRvOgotCi0gIG1pbnB1dCAxMCBhYmMgbW5vIHh5egotCi0gICBleGNlcHQgZm9yIHRo ZSBzZXR0aW5nIG9mIHRoZSBcdihtaW5wdXQpIHZhcmlhYmxlLgotCi0gICBBbmQgYSBjYXV0aW9u OiBJTlBVVCBwYXR0ZXJuIG1hdGNoaW5nIGhhcyBhIGxpbWl0YXRpb24gdGhhdCB5b3UKLSAgIHBy b2JhYmx5IG5ldmVyIG5vdGljZWQgd2l0aCBsaXRlcmFsLXN0cmluZyBtYXRjaGluZywgbmFtZWx5 IHRoYXQgdGhlcmUKLSAgIGlzIGEgbGltaXQgb24gdGhlIHNpemUgb2YgdGhlIG1hdGNoLiBGb3Ig ZXhhbXBsZSwgaWYgdGhlIHBhdHRlcm4gaXMKLSAgICJhKmIiLCB0aGUgbWF0Y2ggd2lsbCBzdWNj ZWVkIGlmIHRoZSAnYScgYW5kICdiJyBhcmUgbm90IHNlcGFyYXRlZCBieQotICAgbW9yZSB0aGFu IChzYXkpIDhLIGJ5dGVzLCBidXQgd2lsbCBmYWlsIGlmIHRoZXkgYXJlIGZhcnRoZXIgYXBhcnQg dGhhbgotICAgdGhhdC4gSW4gc3VjaCBjYXNlcywgaXQgYmV0dGVyIHRvIHVzZSB0d28gSU5QVVRz IChlLmcuICJpbnB1dCAxMCBhIiBhbmQKLSAgIHRoZW4gImlucHV0IDEwMCBiIikuCi0KLSAgICA3 LjEuNC4gVGhlIElOUFVUIE1hdGNoIFJlc3VsdAotCi0gICBUaGUgcmVzdWx0IG9mIGFueSBJTlBV VCwgTUlOUFVULCBvciBSRUlOUFVUIGNvbW1hbmQsIG5vIG1hdHRlciB3aGV0aGVyCi0gICB0aGUg c2VhcmNoIHRhcmdldHMgYXJlIHBhdHRlcm5zIG9yIGxpdGVyYWwgc3RyaW5ncywgaXMgYXZhaWxh YmxlIGluIHRoZQotICAgbmV3IFx2KGlubWF0Y2gpIHZhcmlhYmxlLiBGb3IgZXhhbXBsZToKLQot ICBtaW5wdXQgMTAgY2F0IFxmcGF0dGVybihbZGhdb2cpCi0gIGlmIHN1Y2Nlc3MgZWNobyBNSU5Q VVQgbWF0Y2hlZCAiXHYoaW5tYXRjaCkiCi0KLSAgIFRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWwg d2hlbiBhIHBhdHRlcm4gd2FzIG1hdGNoZWQsIHNpbmNlIGl0IG1ha2VzCi0gICB0aGUgc3RyaW5n IHRoYXQgbWF0Y2hlZCB0aGUgcGF0dGVybiBhdmFpbGFibGUgdG8gS2VybWl0OyB0aGVyZSB3b3Vs ZCBiZQotICAgbm8gd2F5IHRvIGdldCBpdCBvdGhlcndpc2UuCi0KLSAgIEFmdGVyIGFuIElOUFVU IGNvbW1hbmQsIHlvdSBjYW4gdmlldyBhbGwgdGhlIElOUFVULXJlbGF0ZWQgdmFyaWFibGVzIGJ5 Ci0gICB0eXBpbmcgInNob3cgdmFyaWFibGVzIGluIiAoYWJicmV2aWF0ZSBhcyAic2hvIHZhciBp biIpLCB3aGljaCBzaG93cwotICAgdGhlIHZhbHVlcyBvZiBhbGwgYnVpbHQtaW4gdmFyaWFibGVz IHdob3NlIG5hbWVzIHN0YXJ0IHdpdGggImluIi4KLQotICA3LjIuIE5ldyBvciBJbXByb3ZlZCBC dWlsdC1JbiBWYXJpYWJsZXMKLQotICAgXHYoYmxvY2tjaGVjaykKLSAgICAgICAgICBDdXJyZW50 IEJMT0NLLUNIRUNLIHNldHRpbmcsIDEsIDIsIDMsIG9yIDQuIDQgaXMgdGhlIGNvZGUgZm9yCi0g ICAgICAgICAgQkxBTkstRlJFRS0yLgotCi0gICBcdihieXRlb3JkZXIpCi0gICAgICAgICAgVGhl IG1hY2hpbmUncyBieXRlIG9yZGVyOiAwID0gQmlnIEVuZGlhbiwgMSA9IExpdHRsZSBFbmRpYW4u Ci0KLSAgIFx2KGNtZGJ1ZnNpemUpCi0gICAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgY29tbWFu ZCBidWZmZXIsIHdoaWNoIGlzIHRoZSBtYXhpbXVtIHNpemUgZm9yCi0gICAgICAgICAgYSBtYWNy bywgYSBjb21tYW5kLCBhIHZhcmlhYmxlLCBvciBhbnl0aGluZyBlbHNlIGluIEMtS2VybWl0J3MK LSAgICAgICAgICBzY3JpcHQgbGFuZ3VhZ2UuCi0KLSAgIFx2KGN0dHkpCi0gICAgICAgICAgVGhl IGRldmljZSBuYW1lIG9mIEMtS2VybWl0J3MgY29udHJvbGxpbmcgKGxvZ2luKSB0ZXJtaW5hbC4K LQotICAgXHYoZmlsZW5hbWUpCi0gICAgICAgICAgRGVzY3JpYmVkIGluIFs1NjNdU2VjdGlvbnMg NC4xIGFuZCBbNTY0XTQuMi4KLQotICAgXHYoZmlsZW51bWJlcikKLSAgICAgICAgICBEZXNjcmli ZWQgaW4gWzU2NV1TZWN0aW9ucyA0LjEgYW5kIFs1NjZdNC4yLgotCi0gICBcdihmaWxlc3BlYykK LSAgICAgICAgICBBcyBvZiBDLUtlcm1pdCA3LjAsIGNvbnRhaW5zIGZ1bGx5IHF1YWxpZmllZCBm aWxlbmFtZXMgcmF0aGVyCi0gICAgICAgICAgdGhhbiAodXN1YWxseSkgcmVsYXRpdmUgb25lcy4K LQotICAgXHYocmV0dXJuKQotICAgICAgICAgIE5vdyBob2xkcyB0aGUgRU5EIG4gdmFsdWUgb2Yg dGhlIG1hY3JvIHRoYXQgbW9zdCByZWNlbnRseQotICAgICAgICAgIHJldHVybmVkLCBpbiBjYXNl IEVORCB3YXMgdXNlZCByYXRoZXIgdGhhbiBSRVRVUk4uCi0KLSAgIFx2KGVkaXRvcikKLSAgICAg ICAgICBQYXRobmFtZSBvZiBwcmVmZXJyZWQgdGV4dCBlZGl0b3IKLQotICAgXHYoZWRpdG9wdHMp Ci0gICAgICAgICAgQ29tbWFuZC1saW5lIG9wdGlvbnMgZm9yIGVkaXRvcgotCi0gICBcdihlZGl0 ZmlsZSkKLSAgICAgICAgICBGaWxlIG1vc3QgcmVjZW50bHkgZWRpdGVkCi0KLSAgIFx2KGJyb3dz ZXIpCi0gICAgICAgICAgUGF0aG5hbWUgb2YgcHJlZmVycmVkIFdlYiBicm93c2VyCi0KLSAgIFx2 KGJyb3dzb3B0cykKLSAgICAgICAgICBDb21tYW5kLWxpbmUgb3B0aW9ucyBmb3IgV2ViIGJyb3dz ZXIKLQotICAgXHYoYnJvd3N1cmwpCi0gICAgICAgICAgVVJMIG1vc3QgcmVjZW50bHkgZ2l2ZW4g dG8gV2ViIGJyb3dzZXIKLQotICAgXHYoZGlhbHR5cGUpCi0gICAgICAgICAgVHlwZSBvZiBjYWxs IG1vc3QgcmVjZW50bHkgcGxhY2VkIChzZWUgWzU2N11TZWN0aW9uIDIuMS4xMSkuCi0KLSAgIFx2 KGtiY2hhcikKLSAgICAgICAgICBUaGUgY2hhcmFjdGVyLCBpZiBhbnksIHRoYXQgd2FzIHR5cGVk IGF0IHRoZSBrZXlib2FyZCB0byB0bwotICAgICAgICAgIGludGVycnVwdCB0aGUgbW9zdCByZWNl bnQgUEFVU0UsIFNMRUVQLCBXQUlULCBNU0xFRVAsIG9yIElOUFVUCi0gICAgICAgICAgY29tbWFu ZDsgZW1wdHkgaWYgdGhlIG1vc3QgcmVjZW50IHN1Y2ggY29tbWFuZCB3YXMgbm90Ci0gICAgICAg ICAgaW50ZXJydXB0ZWQgZnJvbSB0aGUga2V5Ym9hcmQuCi0KLSAgIFx2KGxvY2tkaXIpCi0gICAg ICAgICAgVU5JWCBvbmx5IC0gVGhlIG5hbWUgb2YgdGhlIFVVQ1AgbG9ja2ZpbGUgZGlyZWN0b3J5 LCBpZiBrbm93biwKLSAgICAgICAgICBvdGhlcndpc2UgIih1bmtub3duKSIuCi0KLSAgIFx2KGxv Y2twaWQpCi0gICAgICAgICAgVU5JWCBvbmx5IC0gUElEIG9mIHByb2Nlc3MgdGhhdCBvd25zIHRo ZSBjb21tdW5pY2F0aW9uIHBvcnQgdGhhdAotICAgICAgICAgIHlvdSB0cmllZCB0byBvcGVuIHdp dGggYSBTRVQgTElORSBjb21tYW5kIHRoYXQgZmFpbGVkIGJlY2F1c2UKLSAgICAgICAgICB0aGUg cG9ydCB3YXMgaW4gdXNlLCBvdGhlcndpc2UgZW1wdHkuIFRoaXMgdmFyaWFibGUgaXMgc2V0IHdp dGgKLSAgICAgICAgICBldmVyeSBTRVQgTElORSBjb21tYW5kLgotCi0gICBcdihjeF90aW1lKQot ICAgICAgICAgIElmIG5vIGNvbm5lY3Rpb24gKFNFVCBIT1NULCBTRVQgTElORSwgRElBTCwgVEVM TkVULCBldGMpIGlzCi0gICAgICAgICAgYWN0aXZlLCB0aGlzIGlzIDAuIElmIGEgY29ubmVjdGlv biBpcyBhY3RpdmUsIHRoaXMgaXMgdGhlIG51bWJlcgotICAgICAgICAgIG9mIHNlY29uZHMgc2lu Y2UgdGhlIGNvbm5lY3Rpb24gd2FzIG1hZGUuCi0KLSAgIFx2KGh3cGFyaXR5KQotICAgICAgICAg IElmIGhhcmR3YXJlIHBhcml0eSBpcyBpbiBlZmZlY3QsIHRoaXMgdmFyaWFibGUgZ2l2ZXMgaXRz IHZhbHVlLAotICAgICAgICAgIHN1Y2ggYXMgImV2ZW4iIG9yICJvZGQiIChpbiB3aGljaCBjYXNl LCB0aGUgXHYocGFyaXR5KSB2YXJpYWJsZQotICAgICAgICAgIHdpbGwgYmUgIm5vbmUiKS4gT3Ro ZXJ3aXNlIHRoaXMgdmFyaWFibGUgaXMgZW1wdHkuCi0KLSAgIFx2KHNlcmlhbCkKLSAgICAgICAg ICBDdXJyZW50IHNlcmlhbCBwb3J0IHNldHRpbmdzIGluIDhOMSBmb3JtYXQgKFs1NjhdU2VjdGlv biAyLjEwKS4KLQotICAgXHYoZXJybm8pCi0gICAgICAgICAgSW4gVU5JWCwgdGhlIGN1cnJlbnQg dmFsdWUgb2YgdGhlIEMgcnVudGltZSBlcnJubyB2YXJpYWJsZSwKLSAgICAgICAgICB3aGljaCBp cyBxdWl0ZSB2b2xhdGlsZSAobWVhbmluZyB0aGF0IG9mdGVuIGFuICJpbnRlcmVzdGluZyIKLSAg ICAgICAgICBlcnJvciBjb2RlIGNhbiBiZSBvdmVyd3JpdHRlbiBieSBzb21lIG90aGVyIGxpYnJh cnkgY2FsbCBvcgotICAgICAgICAgIHN5c3RlbSBzZXJ2aWNlIHRoYXQgc2V0cyBlcnJubyBiZWZv cmUgeW91IGhhdmUgYSBjaGFuY2UgdG8gbG9vawotICAgICAgICAgIGF0IGl0KS4gSW4gVk1TLCB0 aGUgZXJyb3IgY29kZSByZXR1cm5lZCBieSB0aGUgc3lzdGVtIG9yIGxpYnJhcnkKLSAgICAgICAg ICBjYWxsIHRoYXQgbW9zdCByZWNlbnRseSBmYWlsZWQgKHN1Y2Nlc3MgY29kZXMgYXJlIG5vdCBz YXZlZCkuCi0gICAgICAgICAgTm90IGF2YWlsYWJsZSBpbiBvdGhlciBvcGVyYXRpbmcgc3lzdGVt cy4KLQotICAgXHYoZXJyc3RyaW5nKQotICAgICAgICAgIFRoZSBVTklYIG9yIFZNUyBzeXN0ZW0g ZXJyb3IgbWVzc2FnZSB0aGF0IGNvcnJlc3BvbmRzIHRvCi0gICAgICAgICAgXHYoZXJybm8pLiBO b3QgYXZhaWxhYmxlIGluIGFsbCBPUydzLiBBbHNvIHNlZQotICAgICAgICAgIFs1NjldXGZlcnJz dHJpbmcoKS4KLQotICAgXHYoc2V0bGluZW1zZykKLSAgICAgICAgICBUaGUgZXJyb3IgbWVzc2Fn ZSwgaWYgYW55LCBmcm9tIHRoZSBtb3N0IHJlY2VudCBTRVQgTElORSwgU0VUCi0gICAgICAgICAg UE9SVCwgU0VUIEhPU1QsIFRFTE5FVCwgb3Igb3RoZXIgY29ubmVjdGlvbi1tYWtpbmcgY29tbWFu ZC4gVGhpcwotICAgICAgICAgIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyBcdihlcnJz dHJpbmcpIHNpbmNlIHRoZXNlCi0gICAgICAgICAgY29tbWFuZHMgbWlnaHQgZmFpbCB3aXRob3V0 IGdlbmVyYXRpbmcgYSBzeXN0ZW0gZXJyb3IgY29kZSwgZm9yCi0gICAgICAgICAgZXhhbXBsZSAo aW4gVU5JWCkgYmVjYXVzZSBhIGxvY2tmaWxlIGV4aXN0ZWQgaW5kaWNhdGluZyB0aGUKLSAgICAg ICAgICBkZXZpY2Ugd2FzIGFzc2lnbmVkIGJ5IGFub3RoZXIgdXNlci4KLQotICAgXHYoZXhpdHN0 YXR1cykKLSAgICAgICAgICBUaGUgZXhpdCBzdGF0dXMgQy1LZXJtaXQgd291bGQgcmV0dXJuIGlm IGl0IGV4aXRlZCBub3cuCi0KLSAgIFx2KHBleGl0c3RhdCkKLSAgICAgICAgICBUaGUgZXhpdCBz dGF0dXMgb2YgdGhlIGluZmVyaW9yIHByb2Nlc3MgbW9zdCByZWNlbnRseSBpbnZva2VkIGJ5Ci0g ICAgICAgICAgQy1LZXJtaXQgKGJ5IFJVTiwgISwgUkVESVJFQ1QsIFNFTkQgL0NPTU1BTkQsIGV0 YykuIEluIFZNUywgdGhpcwotICAgICAgICAgIGNvZGUgY2FuIGJlIGdpdmVuIHRvIFxmZXJyc3Ry aW5nKCkgdG8gZ2V0IHRoZSBjb3JyZXNwb25kaW5nCi0gICAgICAgICAgZXJyb3IgbWVzc2FnZSAo aW4gVU5JWCwgcHJvZ3JhbS9jb21tYW5kIHJldHVybiBjb2RlcyBhcmUgbm90IHRoZQotICAgICAg ICAgIHNhbWUgYXMgc3lzdGVtIGVycm9yIGNvZGVzKS4gTm90IGF2YWlsYWJsZSBpbiBvcGVyYXRp bmcgc3lzdGVtcwotICAgICAgICAgIG90aGVyIHRoYW4gVU5JWCBhbmQgVk1TLiBTZWUgWzU3MF1T ZWN0aW9uIDQuMi41IGZvciBkZXRhaWxzLgotCi0gICBcdihpbm1hdGNoKQotICAgICAgICAgIFRo ZSBpbmNvbWluZyBzdHJpbmcgb2YgY2hhcmFjdGVycywgaWYgYW55LCB0aGF0IG1hdGNoZWQgdGhl IG1vc3QKLSAgICAgICAgICByZWNlbnQgSU5QVVQsIFJFSU5QVVQsIG9yIE1JTlBVVCBjb21tYW5k LgotCi0gICBcdihpbnRpbWUpCi0gICAgICAgICAgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMg KHRob3VzYW5kdGhzIG9mIHNlY29uZHMpIGl0IHRvb2sgZm9yCi0gICAgICAgICAgdGhlIG1vc3Qg cmVjZW50IElOUFVUIGNvbW1hbmQgdG8gZmluZCBpdHMgbWF0Y2gsIG9yIC0xIGlmIG5vCi0gICAg ICAgICAgSU5QVVQgY29tbWFuZCBoYXMgYmVlbiBnaXZlbiB5ZXQuIElmIHRoZSBJTlBVVCBjb21t YW5kIHRpbWVkCi0gICAgICAgICAgb3V0LCB0aGUgdmFsdWUgaXMgYXBwcm94aW1hdGVseSBlcXVh bCB0byAxMDAwIHRpbWVzIHRoZSBJTlBVVAotICAgICAgICAgIHRpbWVvdXQuIElmIElOUFVUIGZh aWxlZCBmb3Igc29tZSBvdGhlciByZWFzb24sIHRoZSB2YWx1ZSBpcwotICAgICAgICAgIHVuZGVm aW5lZCAoXHYoaW5zdGF0dXMpIGdpdmVzIElOUFVUIGNvbXBsZXRpb24gc3RhdHVzKS4gSWYgeW91 cgotICAgICAgICAgIHZlcnNpb24gb2YgQy1LZXJtaXQgaXMgYnVpbHQgd2l0aG91dCBoaWdoLXBy ZWNpc2lvbgotICAgICAgICAgIGZsb2F0aW5nLXBvaW50IHRpbWVycywgdGhpcyBudW1iZXIgd2ls bCBhbHdheXMgYmUgYSBtdWx0aXBsZSBvZgotICAgICAgICAgIDEwMDAuCi0KLSAgIFx2KGlud2Fp dCkKLSAgICAgICAgICBUaGUgbnVtYmVyIG9mIHNlY29uZHMgc3BlY2lmaWVkIGFzIHRoZSB0aW1l b3V0IGluIHRoZSBtb3N0Ci0gICAgICAgICAgcmVjZW50IElOUFVUIGNvbW1hbmQuCi0KLSAgIFx2 KGRpYWxzdWZmaXgpCi0gICAgICAgICAgRGlhbGluZyBzdWZmaXggZm9yIHVzZSBkdXJpbmcgUERJ QUwgc2VxdWVuY2U7IHNlZSBbNTcxXVNlY3Rpb24KLSAgICAgICAgICAyLjEuMTAuCi0KLSAgIFx2 KHBpZCkKLSAgICAgICAgICBVTklYLCBWTVMsIGFuZCBLOTUgb25seS4gQy1LZXJtaXQncyBwcmlt YXJ5IHByb2Nlc3MgSUQsIG51bWVyaWMsCi0gICAgICAgICAgZGVjaW1hbC4gSWYgeW91IHdhbnQg dG8gc2hvdyBpdCBpbiBoZXgsIHVzZSBcZm4yaGV4KFx2KHBpZCkpIElmCi0gICAgICAgICAgeW91 IHdhbnQgdG8gc2hvdyBpdCBpbiBvY3RhbCwgdXNlIFxmbjJvY3RhbChcdihwaWQpKS4KLQotICAg XHYocHJpbnRlcikKLSAgICAgICAgICBDdXJyZW50IHByaW50ZXIgbmFtZSBvciBTRVQgUFJJTlRF UiB2YWx1ZS4KLQotICAgXHYocF9jdGwpCi0gICAgICAgICAgQ29udHJvbCBwcmVmaXggY2hhciBc dihwXzhiaXQpIDgtYml0IHByZWZpeCBjaGFyIChpZiBwYXJpdHkgbm90Ci0gICAgICAgICAgbm9u ZSkKLQotICAgXHYocF9ycHQpCi0gICAgICAgICAgUmVwZWF0IHByZWZpeCBjaGFyIChpZiByZXBl YXQgY29tcHJlc3Npb24gZW5hYmxlZCkKLQotICAgXHYoaGVyYWxkKQotICAgICAgICAgIEtlcm1p dCdzIHZlcnNpb24gaGVyYWxkCi0KLSAgIFx2KHRlc3QpCi0gICAgICAgICAgS2VybWl0J3MgdGVz dCB2ZXJzaW9uLCBpZiBhbnksIG9yIDAgaWYgdGhpcyBpcyBub3QgYSB0ZXN0Ci0gICAgICAgICAg dmVyc2lvbi4gVHlwaWNhbCB2YWx1ZXMgZm9yIHRlc3QgdmVyc2lvbnMgYXJlICJBbHBoYS4wMyIg b3IKLSAgICAgICAgICAiQmV0YS4xNCIuCi0KLSAgIFx2KHNlbmRsaXN0KQotICAgICAgICAgIFRo ZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgU0VORC1MSVNULCAwIGlmIG5vbmUuIE5vdGU6IGVu dHJpZXMKLSAgICAgICAgICBkbyBub3QgbmVjZXNzYXJpbHkgY29ycmVzcG9uZCB0byBmaWxlcywg c2luY2UgYW4gZW50cnkgbWlnaHQKLSAgICAgICAgICBjb250YWluIHdpbGRjYXJkcy4gQWxzbyBu b3RlIHRoYXQgdGhlIHZhbHVlIGRvZXMgbm90IGdvIGJhY2sgdG8KLSAgICAgICAgICAwIGFmdGVy IHRoZSBmaWxlcyBpbiB0aGUgbGlzdCBhcmUgc2VudC4gVG8gcmVzZXQgdGhpcyB2YXJpYWJsZSwK LSAgICAgICAgICB1c2UgQ0xFQVIgU0VORC1MSVNULiBUaGUgcHVycG9zZSBvZiB0aGlzIHZhcmlh YmxlIGlzIHRvCi0gICAgICAgICAgZGV0ZXJtaW5lIGlmIGEgU0VORCBjb21tYW5kLCB3aGVuIGdp dmVuIHdpdGhvdXQgYW55IGZpbGVuYW1lcywKLSAgICAgICAgICB3aWxsIGJlIGxlZ2FsLiBFeGFt cGxlOgotCi0gIHhpZiBcdihzZW5kbGlzdCkgeyBzZW5kIH0gZWxzZSB7IHNlbmQgb29mYS50eHQg fQotCi0gICBcdih0cmlnZ2VyKQotICAgICAgICAgIElmIHRoZSBtb3N0IHJlY2VudCBDT05ORUNU IHNlc3Npb24gd2FzIHRlcm1pbmF0ZWQgYXV0b21hdGljYWxseQotICAgICAgICAgIGJ5IGEgdHJp Z2dlciwgdGhpcyB2YXJpYWJsZSBjb250YWlucyB0aGUgdHJpZ2dlciB2YWx1ZS4KLQotICAgXHYo dHlfbG4pCi0gICAgICAgICAgVFlQRSBsaW5lIG51bWJlciAoZHVyaW5nIFRZUEUpCi0KLSAgIFx2 KHR5X2xjKQotICAgICAgICAgIFRZUEUgbGluZSBjb3VudCAoYWZ0ZXIgVFlQRSkKLQotICAgXHYo dHlfbWMpCi0gICAgICAgICAgVFlQRSBtYXRjaCBjb3VudCAoYWZ0ZXIgVFlQRSkKLQotICAgXHYo eGZlcnN0YXQpCi0gICAgICAgICAgU3RhdHVzIG9mIG1vc3QgcmVjZW50IGZpbGUgdHJhbnNmZXI6 Ci0KLS0xOiBObyB0cmFuc2ZlciB5ZXQKLSAwOiBTdWNjZWVkZWQKLSAxOiBGYWlsZWQKLQotICAg XHYoeGZlcm1zZykKLSAgICAgICAgICBJZiB0aGUgbW9zdCByZWNlbnQgZmlsZSB0cmFuc2ZlciBm YWlsZWQsIHRoaXMgaXMgdGhlIHJlYXNvbi4gSWYKLSAgICAgICAgICBpdCBzdWNjZWVkZWQsIFx2 KHhmZXJtc2cpIGlzIGFuIGVtcHR5IHN0cmluZy4KLQotICAgXHYodGZ0aW1lKQotICAgICAgICAg IFRvdGFsIGVsYXBzZWQgdGltZSBvZiBtb3N0IHJlY2VudCBmaWxlIHRyYW5zZmVyIG9wZXJhdGlv biwgaW4KLSAgICAgICAgICBzZWNvbmRzLgotCi0gICBcdih0ZXh0ZGlyKQotICAgICAgICAgIERp cmVjdG9yeSB0aGF0IGhvbGRzIChvciBpcyBzdXBwb3NlZCB0byBob2xkKSBLZXJtaXQgdGV4dCBm aWxlcwotICAgICAgICAgIHN1Y2ggYXMgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucywgcmVsZWFz ZSBub3RlcywgdXBkYXRlIG5vdGVzLAotICAgICAgICAgIHJlYWQtbWUgZmlsZXMsICJiZXdhcmUi IGZpbGVzLCBldGMuCi0KLSAgIFx2KG5hbWUpCi0gICAgICAgICAgVGhlIG5hbWUgd2l0aCB3aGlj aCB0aGUgS2VybWl0IHByb2dyYW0gd2FzIGludm9rZWQsIGUuZy4KLSAgICAgICAgICAia2VybWl0 IiwgIndlcm1pdCIsICJrOTUiLCAiazIiLCBldGMgKHNlZSBbNTcyXVNlY3Rpb24gOS4xKS4KLQot ICAgXHYob3NuYW1lKQotICAgICAgICAgIE5hbWUgb2Ygb3BlcmF0aW5nIHN5c3RlbSBvbiBjb21w dXRlciB3aGVyZSBDLUtlcm1pdCBpcyBydW5uaW5nLAotICAgICAgICAgIG9idGFpbmVkIGF0IHJ1 bnRpbWUgKGZyb20gdW5hbWUgb3IgZXF1aXZhbGVudCkuCi0KLSAgIFx2KG9zdmVyc2lvbikKLSAg ICAgICAgICBWZXJzaW9uIG9mIG9wZXJhdGluZyBzeXN0ZW0gb24gY29tcHV0ZXIgd2hlcmUgQy1L ZXJtaXQgaXMKLSAgICAgICAgICBydW5uaW5nLCBvYnRhaW5lZCBhdCBydW50aW1lIChmcm9tIHVu YW1lIG9yIGVxdWl2YWxlbnQpLgotCi0gICBcdihvc3JlbGVhc2UpCi0gICAgICAgICAgUmVsZWFz ZSBvZiBvcGVyYXRpbmcgc3lzdGVtIG9uIGNvbXB1dGVyIHdoZXJlIEMtS2VybWl0IGlzCi0gICAg ICAgICAgcnVubmluZywgb2J0YWluZWQgYXQgcnVudGltZSAoZnJvbSB1bmFtZSBvciBlcXVpdmFs ZW50KS4KLQotICAgXHYobW9kZWwpCi0gICAgICAgICAgVGhlIHNwZWNpZmljIGhhcmR3YXJlIG1v ZGVsIG9mIHRoZSBjb21wdXRlciB3aGVyZSBDLUtlcm1pdCBpcwotICAgICAgICAgIHJ1bm5pbmcs IGlmIGtub3duLgotCi0gICBcdihtYXRoX3BpKQotICAgICAgICAgIFRoZSB2YWx1ZSBvZiBQaSAo c2VlIFs1NzNdU2VjdGlvbiA3LjIzKQotCi0gICBcdihtYXRoX2UpCi0gICAgICAgICAgVGhlIHZh bHVlIG9mIGUgKHNlZSBbNTc0XVNlY3Rpb24gNy4yMykKLQotICAgXHYobWF0aF9wcmVjaXNpb24p Ci0gICAgICAgICAgSG93IG1hbnkgc2lnbmlmaWNhbnQgZGlnaXRzIGluIGEgZmxvYXRpbmctcG9p bnQgbnVtYmVyLgotCi0gICBcdihmX2NvdW50KQotICAgICAgICAgIFJlc3VsdCBvZiB0aGUgbW9z dCByZWNlbnQgRklMRSBDT1VOVCAoRkNPVU5UKSBjb21tYW5kLgotCi0gICBcdihmX2Vycm9yKQot ICAgICAgICAgIE51bWVyaWMgZXJyb3IgY29kZSBvZiBtb3N0IHJlY2VudCBGSUxFIGNvbW1hbmQu Ci0KLSAgIFx2KGZfbWF4KQotICAgICAgICAgIE1heGltdW0gbnVtYmVyIG9mIGZpbGVzIG9wZW4g c2ltdWx0YW5lb3VzbHkuCi0KLSAgIFRoZSBtYXRoIGNvbnN0YW50cyBhcmUgZ2l2ZW4gaW4gdGhl IHByZWNpc2lvbiBvZiB1bmRlcmx5aW5nIGNvbXB1dGVyJ3MKLSAgIGZsb2F0aW5nLXBvaW50IGFy aXRobWV0aWMuCi0KLSAgIE5vdGUgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gXHYob3NuYW1lKSwg XHYob3N2ZXJzaW9uKSwgYW5kCi0gICBcdihwbGF0Zm9ybSk7IHRoZSBsYXR0ZXIgcmVmZXJzIHRv IHRoZSBwbGF0Zm9ybSBmb3Igd2hpY2ggYW5kL29yIHVwb24KLSAgIHdoaWNoIEMtS2VybWl0IHdh cyBidWlsdCwgYXMgb3Bwb3NlZCB0byB0aGUgb25lIG9uIHdoaWNoIGl0IGlzIGFjdHVhbGx5Ci0g ICBydW5uaW5nLiBBbHNvIG5vdGUgdGhhdCBlYWNoIG9wZXJhdGluZyBzeXN0ZW0gY2FuLCBhbmQg cHJvYmFibHkgd2lsbCwKLSAgIGludGVycHJldCBhbmQgZmlsbCBpbiB0aGUgb3MqIHZhcmlhYmxl cyBkaWZmZXJlbnRseSwgb3Igbm90IGF0IGFsbC4KLQotICAgVGhlIFNIT1cgVkFSSUFCTEVTIGNv bW1hbmQgbm93IGFjY2VwdHMgYSB2YXJpYWJsZSBuYW1lLCBwcmVmaXgsIG9yCi0gICBwYXR0ZXJu OgotCi0gIHNob3cgdmFyaWFibGVzICAgICAgICAgU2hvd3MgYWxsIHZhcmlhYmxlcy4KLSAgc2hv dyB2YXJpYWJsZXMgdCAgICAgICBTaG93cyBhbGwgdmFyaWFibGVzIHRoYXQgc3RhcnQgd2l0aCAi dCIuCi0gIHNob3cgdmFyaWFibGVzICp2ZXIqICAgU2hvd3MgYWxsIHZhcmlhYmxlcyB3aG9zZSBu YW1lcyBjb250YWluICJ2ZXIiLgotICBzaG93IHZhcmlhYmxlcyAqdmVyICAgIERpdHRvIChhbiBp bXBsaWVkICIqIiBpcyBhcHBlbmRlZCkuCi0KLSAgNy4zLiBOZXcgb3IgSW1wcm92ZWQgQnVpbHQt SW4gRnVuY3Rpb25zCi0KLSAgIFRoZSBmb2xsb3dpbmcgbmV3IGZpbGUtaS9vIGZ1bmN0aW9ucyBh cmUgZXhwbGFpbmVkIGluIFs1NzVdU2VjdGlvbgotICAgMS4yMi4KLQotICBcZl9zdGF0dXMoY2hh bm5lbCkgICAgICAgICAgIFN0YXR1cyBvZiBmaWxlIG9wZW4gb24gY2hhbm5lbAotICBcZl9wb3Mo Y2hhbm5lbCkgICAgICAgICAgICAgIFJlYWQvd3JpdGUgKGJ5dGUpIHBvaW50ZXIgb2YgZ2l2ZW4g ZmlsZQotICBcZl9saW5lKGNoYW5uZWwpICAgICAgICAgICAgIEN1cnJlbnQgbGluZSBvZiBmaWxl Ci0gIFxmX2hhbmRsZShjaGFubmVsKSAgICAgICAgICAgSGFuZGxlIG9mIGZpbGUKLSAgXGZfZW9m KGNoYW5uZWwpICAgICAgICAgICAgICBXaGV0aGVyIGdpdmVuIGZpbGUgaXMgYXQgRU9GCi0gIFxm X2dldGNoYXIoY2hhbm5lbCkgICAgICAgICAgUmVhZCBhIGNoYXIgZnJvbSBnaXZlbiBmaWxlCi0g IFxmX2dldGxpbmUoY2hhbm5lbCkgICAgICAgICAgUmVhZCBhIGxpbmUgZnJvbSBnaXZlbiBmaWxl Ci0gIFxmX2dldGJsb2NrKGNoYW5uZWwsbikgICAgICAgUmVhZCBhIGJsb2NrIGZyb20gZ2l2ZW4g ZmlsZQotICBcZl9wdXRjaGFyKGNoYW5uZWwsYykgICAgICAgIFdyaXRlIGEgY2hhciB0byBnaXZl biBmaWxlCi0gIFxmX3B1dGxpbmUoY2hhbm5lbCxzdHJpbmcpICAgV3JpdGUgYSBsaW5lIHRvIGdp dmVuIGZpbGUKLSAgXGZfcHV0YmxvY2soY2hhbm5lbCxzdHJpbmcpICBXcml0ZSBhIGJsb2NrIHRv IGdpdmVuIGZpbGUKLQotICAgVGhlIGZvbGxvd2luZyBuZXcgZGF0ZS10aW1lLXJlbGF0ZWQgZnVu Y3Rpb25zIGFyZSBleHBsYWluZWQgaW4KLSAgIFs1NzZdU2VjdGlvbiAxLjY6Ci0KLSAgXGZkYXko KSAgICAgICAgICAgICAgICBSZXR1cm5zIGRheSBvZiB3ZWVrIG9mIGdpdmVuIGRhdGUKLSAgXGZu ZGF5KCkgICAgICAgICAgICAgICBSZXR1cm5zIG51bWVyaWMgZGF5IG9mIHdlZWsgb2YgZ2l2ZW4g ZGF0ZQotICBcZnRpbWUoKSAgICAgICAgICAgICAgIFJldHVybnMgdGltZSBwb3J0aW9uIG9mIGdp dmVuIGRhdGUtdGltZQotICBcZm50aW1lKCkgICAgICAgICAgICAgIENvbnZlcnRzIHRpbWUgdG8g c2Vjb25kcyBzaW5jZSBtaWRuaWdodAotICBcZm4ydGltZSgpICAgICAgICAgICAgIENvbnZlcnRz IHNlY29uZHMgc2luY2UgbWlkbmlnaHQgdG8gaGg6bW06c3MKLSAgXGZjdnRkYXRlKGRhdGUtdGlt ZSkgICBDb252ZXJ0cyBmcmVlLWZvcm1hdCBkYXRlIHRvIHl5eXltbWRkIGhoOm1tOnNzCi0gIFxm ZGF5b2Z5ZWFyKGRhdGUtdGltZSkgQ29udmVydHMgZGF0ZSB0byB5eXl5ZGRkIChkYXktb2YteWVh cikgZm9ybWF0Ci0gIFxmZG95KGRhdGUtdGltZSkgICAgICAgU3lub255bSBmb3IgXGZkYXlvZnll YXIoKQotICBcZmRveTJkYXRlKGRheW9meWVhcikgIENvbnZlcnRzIHl5eXlkZGQgdG8geXl5eW1t ZGQKLSAgXGZtamQoZGF0ZS10aW1lKSAgICAgICBDb252ZXJ0cyBmcmVlLWZvcm1hdCBkYXRlIHRv IE1vZGlmaWVkIEp1bGlhbiBEYXRlCi0gIFxmbWpkMmRhdGUobWpkKSAgICAgICAgQ29udmVydHMg bW9kaWZpZWQgSnVsaWFuIGRhdGUgdG8geXl5eW1tZGQKLQotICAgVGhlIG5ldyBmbG9hdGluZy1w b2ludCBhcml0aG1ldGljIGZ1bmN0aW9ucyBhcmUgZXhwbGFpbmVkIGluCi0gICBbNTc3XVNlY3Rp b24gNy4yMy4gZjEgYW5kIGYyIGFyZSBmbG9hdGluZy1wb2ludCAocmVhbCkgbnVtYmVyczsgZCBp cwotICAgdGhlIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyB0byBzaG93OgotCi0gIFxmZnBhYnNv bHV0ZShmMSxkKSAgICAgQWJzb2x1dGUgdmFsdWUgb2YgZjEKLSAgXGZmcGFkZChmMSxmMixkKSAg ICAgICBmMSArIGYxCi0gIFxmZnBjb3NpbmUoZjEsZCkgICAgICAgQ29zaW5lIG9mIGYxCi0gIFxm ZnBkaXZpZGUoZjEsZjIsZCkgICAgZjEgZGl2aWRlZCBieSBmMgotICBcZmZwZXhwKGYxLGQpICAg ICAgICAgIGUgdG8gdGhlIGYxIHBvd2VyCi0gIFxmZnBpbnQoZjEpICAgICAgICAgICAgSW50ZWdl ciBwYXJ0IG9mIGYxCi0gIFxmZnBsb2cxMChmMSxkKSAgICAgICAgTG9nIGJhc2UgMTAgb2YgZjEK LSAgXGZmcGxvZ24oZjEsZCkgICAgICAgICBOYXR1cmFsIGxvZyBvZiBmMQotICBcZmZwbWF4aW11 bShmMSxmMixkKSAgIE1heGltdW0gb2YgZjEgYW5kIGYyCi0gIFxmZnBtaW5pbXVtKGYxLGYyLGQp ICAgTWluaW11bSBvZiBmMSBhbmQgZjIKLSAgXGZmcG1vZHVsdXMoZjEsZjIsZCkgICBNb2R1bHVz IG9mIGYxIGFuZCBmMgotICBcZmZwbXVsdGlwbHkoZjEsZjIsZCkgIFByb2R1Y3Qgb2YgZjEgYW5k IGYyCi0gIFxmZnByYWlzZShmMSxmMixkKSAgICAgUmFpc2UgZjEgdG8gcG93ZXIgZjIKLSAgXGZm cHJvdW5kKGYxLGQpICAgICAgICBSb3VuZCBmMSB0byBkIHBsYWNlcwotICBcZmZwc2luZShmMSxk KSAgICAgICAgIFNpbmUgb2YgZjEKLSAgXGZmcHNxcnQoZjEsZCkgICAgICAgICBTcXVhcmUgcm9v dCBvZiBmMQotICBcZmZwc3VidHJhY3QoZjEsZjIsZCkgIGYyIC0gZjEKLSAgXGZmcHRhbmdlbnQo ZjEsZCkgICAgICBUYW5nZW50IG9mIGYxCi0KLSAgIEludGVnZXIgbnVtYmVyIGZ1bmN0aW9uczoK LQotICAgXGZhYnNvbHV0ZShuKQotICAgICAgICAgIEFic29sdXRlIHZhbHVlIG9mIGludGVnZXIg bi4KLQotICAgXGZyYW5kb20obikKLSAgICAgICAgICBSZXR1cm5zIGEgcmFuZG9tIGludGVnZXIg YmV0d2VlbiAwIGFuZCBuLTEuCi0KLSAgIFxmcmFkaXgocyxuMSxuMikKLSAgICAgICAgICBJZiB0 aGUgc3RyaW5nIHMgaXMgYW4gaW50ZWdlciBpbiByYWRpeCBuMSwgdGhlIHJlc3VsdCBpcyB0aGUK LSAgICAgICAgICBzYW1lIG51bWJlciBleHByZXNzZWQgaW4gcmFkaXggbjIsIHdoZXJlIG4xIGFu ZCBuMiBtYXkgYmUgYW55Ci0gICAgICAgICAgbnVtYmVyIGZyb20gMiB0aHJvdWdoIDM2LCBleHBy ZXNzZWQgYXMgZGVjaW1hbCBudW1iZXJzLCBvcgotICAgICAgICAgIHZhcmlhYmxlcyAoZXRjKSB0 aGF0IGV2YWx1YXRlIHRvIGRlY2ltYWwgbnVtYmVycy4gRm9yIHRoZSBzb3VyY2UKLSAgICAgICAg ICBhbmQgcmVzdWx0LCB0aGUgZGlnaXRzIG9mIGFueSByYWRpeCwgciwgYXJlIHRoZSBmaXJzdCBy Ci0gICAgICAgICAgY2hhcmFjdGVycyBpbiB0aGUgc2VxdWVuY2UgMC05LGEteiAoY2FzZSBkb2Vz bid0IG1hdHRlciBmb3IgdGhlCi0gICAgICAgICAgbGV0dGVycykuIFRoZSBzdHJpbmcgcyBtYXkg aGF2ZSBhIHNpZ24sICsgb3IgLTsgaWYgaXQgc3RhcnRzCi0gICAgICAgICAgd2l0aCBhIG1pbnVz ICgtKSBzaWduLCB0aGUgcmVzdWx0IGFsc28gaGFzIGEgbWludXMgc2lnbi4KLQotICAgVGhlIFxm cmFkaXgoKSBmdW5jdGlvbiBkb2VzIG5vdCB3b3JrIHdpdGggZmxvYXRpbmctcG9pbnQgbnVtYmVy cy4gSXQKLSAgIGRvZXMgbm90IHJldmVhbCB0aGUgaW50ZXJuYWwgc3RvcmFnZSBmb3JtYXQgb2Yg YSBudW1iZXI7IGZvciBleGFtcGxlLAotICAgXGZyYWRpeCgtMSwxMCwxNikgaXMgLTEsIG5vdCBz b21ldGhpbmcgbGlrZSBGRkZGRkZGRkZGLiBJZiBhbGwgdGhyZWUKLSAgIGFyZ3VtZW50cyBhcmUg bm90IGdpdmVuLCBvciBpZiBuMSBvciBuMiBhcmUgbm90IG51bWJlcnMgYmV0d2VlbiAyIGFuZAot ICAgMzYgaW5jbHVzaXZlLCBvciBzIGlzIG5vdCBhIG51bWJlciBpbiByYWRpeCBuMSwgYW4gZXJy b3Igb2NjdXJzIGFuZCB0aGUKLSAgIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4gXGZyYWRpeCgp IGFsc28gZG9lcyBub3Qgb2ZmZXIKLSAgIGV4dGVuZGVkLXByZWNpc2lvbiBhcml0aG1ldGljOyBu dW1iZXIgdmFsdWVzIGFyZSBsaW1pdGVkIHRvIHRob3NlCi0gICBleHByZXNzZWQgYXMgYSBsb25n IGludGVnZXIgaW4gdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgdW5kZXJseWluZwotICAgY29tcHV0 ZXIsIHVzdWFsbHkgMzIgb3IgNjQgYml0cy4gSWYgeW91IGdpdmUgaXQgYW4gYXJndW1lbnQgd2hv c2UKLSAgIGFic29sdXRlIHZhbHVlIGlzIGxhcmdlciB0aGFuIGNhbiBiZSBoZWxkIGluIGFuIHVu c2lnbmVkIGxvbmcsIHRoZQotICAgcmVzdWx0IGlzIC0xLgotCi0gICBUaGUgbmV4dCBmb3VyIGFy ZSBzaG9ydGhhbmQgZnVuY3Rpb25zIGZvciBkZWNpbWFsL2hleGFkZWNpbWFsIGFuZAotICAgZGVj aW1hbC9vY3RhbCBudW1iZXIgY29udmVyc2lvbjoKLQotICAgXGZuMmhleChuKQotICAgICAgICAg IFJldHVybnMgdGhlIGhleGFkZWNpbWFsIChiYXNlIDE2KSByZXByZXNlbnRhdGlvbiBvZiB0aGUg aW50ZWdlcgotICAgICAgICAgIG4uIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gXGZoZXhpZnkocyks IHdoaWNoIHRyZWF0cyBpdHMgYXJndW1lbnQKLSAgICAgICAgICBhcyBhIHN0cmluZyByYXRoZXIg dGhhbiBhIG51bWJlci4gVGhlIHJlc3VsdCBpcyBhbHdheXMKLSAgICAgICAgICBsZWZ0LXBhZGRl ZCB3aXRoIDAncyB0byBtYWtlIGl0cyBsZW5ndGggZXZlbi4gRXhhbXBsZXM6Ci0KLSAgXG4yaGV4 KDApICAgPSAiMDAiICAgICAgICAgICAgICAgICAgICBcZmhleGlmeSgwKSAgID0gIjMwIgotICBc bjJoZXgoMjU1KSA9ICJmZiIgICAgICAgICAgICAgICAgICAgIFxmaGV4aWZ5KDI1NSkgPSAiMzIz NTM1IgotICBcbjJoZXgoMjU2KSA9ICIwMTAwIiAgICAgICAgICAgICAgICAgIFxmaGV4aWZ5KDI1 NikgPSAiMzIzNTM2IgotCi0gICBcZmhleDJuKHgpCi0gICAgICAgICAgQ29udmVydHMgaGV4YWRl Y2ltYWwgbnVtYmVyIHggdG8gZGVjaW1hbCBlcXVpdmFsZW50IGRlY2ltYWwKLSAgICAgICAgICBu dW1iZXIuIFRoaXMgaXMgdGhlIGludmVyc2Ugb2YgXGZuMmhleCgpLiBFcXVpdmFsZW50IHRvCi0g ICAgICAgICAgXGZyYWRpeChzLDE2LDEwKS4KLQotICAgXGZuMm9jdGFsKG4pCi0gICAgICAgICAg UmV0dXJucyB0aGUgb2N0YWwgKGJhc2UgOCkgcmVwcmVzZW50YXRpb24gb2YgdGhlIG51bWJlciBu LgotICAgICAgICAgIEV4YW1wbGVzOgotCi0gIFxuMm9jdGFsKDApID0gIjAiCi0gIFxuMm9jdCgy NTUpID0gIjM3NyIKLSAgXG4yb2N0KDI1NikgPSAiNDAwIgotICBFcXVpdmFsZW50IHRvIFxmcmFk aXgobiwxMCw4KS4KLQotICAgXGZvY3QybihuKQotICAgICAgICAgIFJldHVybnMgdGhlIGRlY2lt YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIG9jdGFsIG51bWJlciwgbi4KLSAgICAgICAg ICBUaGUgaW52ZXJzZSBvZiBcZm4yb2N0YWwoKS4gRXF1aXZhbGVudCB0byBcZnJhZGl4KG4sOCwx MCkuCi0KLSAgIFN0cmluZyBmdW5jdGlvbnM6Ci0KLSAgIFxzKG5hbWVbbjptXSkKLSAgICAgICAg ICBFcXVpdmFsZW50IHRvIFxmc3Vic3RyaW5nKFxtKG5hbWUpLG4sbSkgKFs1NzhdU2VjdGlvbiA3 LjI0KS4KLQotICAgXDoobmFtZVtuOm1dKQotICAgICAgICAgIEVxdWl2YWxlbnQgdG8gXGZzdWJz dHJpbmcobmFtZSxuLG0pICh3aGVyZSAibmFtZSIgaXMgYW55Ci0gICAgICAgICAgXC1xdWFudGl0 eSkgKFs1NzldU2VjdGlvbiA3LjI0KS4KLQotICAgXGZsZWZ0KHMsbikKLSAgICAgICAgICBUaGUg bGVmdG1vc3QgbmNoYXJhY3RlcnMgb2Ygc3RyaW5nIHM7IGVxdWl2YWxlbnQgdG8KLSAgICAgICAg ICBcZnN1YnN0cmluZyhzLDEsbikuCi0KLSAgIFxmc3RyaXB4KHN0cmluZyxjaGFyKQotICAgICAg ICAgIFJldHVybnMgdGhlIHBhcnQgb2YgdGhlIHN0cmluZyB1cCB0byB0aGUgcmlnaHRtb3N0IG9j Y3VycmVuY2UsCi0gICAgICAgICAgaWYgYW55LCBvZiB0aGUgZ2l2ZW4gY2hhcmFjdGVyLiBUaGUg ZGVmYXVsdCBjaGFyYWN0ZXIgaXMgcGVyaW9kCi0gICAgICAgICAgKC4pIEV4YW1wbGVzOgotCi0g IFxmc3RyaXB4KGZvby9iYXIsLykgICAgICAgICAgICAgICAgID0gImZvbyIKLSAgXGZzdHJpcHgo Zm9vL2Jhci9iYXosLykgICAgICAgICAgICAgPSAiZm9vL2JhciIKLSAgXGZzdHJpcHgoYXV0b2V4 ZWMuYmF0LC4pICAgICAgICAgICAgPSAiYXV0b2V4ZWMiCi0gIFxmc3RyaXB4KGF1dG9leGVjLmJh dCkgICAgICAgICAgICAgID0gImF1dG9leGVjIgotICBcZnN0cmlweChmc3RyaXB4KGZvby9iYXIv YmF6LC8pLC8pICA9ICJmb28iCi0KLSAgIFxmbG9wKHN0cmluZyxjaGFyYWN0ZXIpCi0gICAgICAg ICAgUmV0dXJucyB0aGUgcG9ydGlvbiBvZiB0aGUgc3RyaW5nIHN0YXJ0aW5nIGFmdGVyIHRoZSBm aXJzdAotICAgICAgICAgIG9jY3VycmVuY2Ugb2YgdGhlIGdpdmVuIGNoYXJhY3Rlci4gVGhlIGRl ZmF1bHQgY2hhcmFjdGVyIGlzCi0gICAgICAgICAgcGVyaW9kICguKSBFeGFtcGxlczoKLQotICBc ZmxvcChhdXRvZXhlYy5iYXQpICAgICAgICAgICAgICAgICA9ICJiYXQiCi0gIFxmbG9wKGJhei5m b28vYmFyKSAgICAgICAgICAgICAgICAgID0gImZvby9iYXIiCi0gIFxmbG9wKGJhei5mb28vYmFy LC8pICAgICAgICAgICAgICAgID0gImJhcgotCi0gICBcZnN0cmlwbihzdHJpbmcsbikKLSAgICAg ICAgICBSZXR1cm5zIHRoZSBzdHJpbmcgd2l0aCBuY2hhcmFjdGVycyByZW1vdmVkIGZyb20gdGhl IGVuZC4KLSAgICAgICAgICBFeGFtcGxlOgotCi0gIFxmc3RyaXBuKDEyMzQ1Njc4LDMpICAgICAg ICAgICAgICAgID0gIjEyMzQ1IgotCi0gICAgICAgICAgKEZvciBtb3JlIGRpc2N1c3Npb24gb2Yg XGZzdHJpcHgoKSwgXGZzdHJpcG4oKSwgYW5kIFxmbG9wKCkgc2VlCi0gICAgICAgICAgWzU4MF1T ZWN0aW9uIDQuMi4zKS4KLQotICAgXGZiNjRlbmNvZGUocykKLSAgICAgICAgICBSZXR1cm5zIHRo ZSBCYXNlLTY0IGVuY29kaW5nIG9mIHRoZSBzdHJpbmcgcy4KLQotICAgXGZiNjRkZWNvZGUocykK LSAgICAgICAgICBSZXR1cm5zIHRoZSBkZWNvZGluZyBvZiB0aGUgQmFzZS02NCBzdHJpbmcgcy4g RmFpbHMgaWYgcyBpcyBub3QKLSAgICAgICAgICBhIEJhc2UtNjQgc3RyaW5nLCBvciBpZiBpdHMg bGVuZ3RoIGlzIG5vdCBhIG11bHRpcGxlIG9mIDQuIE5vdGUKLSAgICAgICAgICB0aGF0IGlmIGFu eSBvZiB0aGUgcmVzdWx0IGJ5dGVzIGFyZSBudWxsICgwKSwgdGhlIHJlc3VsdCBzdHJpbmcKLSAg ICAgICAgICBzdG9wcyB0aGVyZS4gVGhlcmUgaXMgbm8gd2F5IHRvIHJlcHJlc2VudCBzdHJpbmdz IHRoYXQgY29udGFpbgotICAgICAgICAgIG51bGwgYnl0ZXMgaW4gQy1LZXJtaXQgKHRoZSBzYW1l IGlzIHRydWUgZm9yIFxmdW5oZXhpZnkoKSkuCi0KLSAgIFxmd29yZChzMSxuLHMyLHMzKQotICAg ICAgICAgIEV4dHJhY3RzIHdvcmQgbnVtYmVyIG5mcm9tIHN0cmluZyBzMS4gQnkgZGVmYXVsdCwg YSAid29yZCIgaXMKLSAgICAgICAgICBhbnkgc2VxdWVuY2Ugb2YgQVNDSUkgbGV0dGVycyBvciBk aWdpdHM7IG5pcyAxLWJhc2VkLiBJZiBuIGlzCi0gICAgICAgICAgb21pdHRlZCwgIjEiIGlzIHVz ZWQuIEV4YW1wbGVzOgotCi0gIFxmd29yZChvbmUgdHdvIHRocmVlKSAgICA9ICJvbmUiCi0gIFxm d29yZChvbmUgdHdvIHRocmVlLDEpICA9ICJvbmUiCi0gIFxmd29yZChvbmUgdHdvIHRocmVlLDIp ICA9ICJ0d28iCi0gIFxmd29yZChvbmUgdHdvIHRocmVlLDMpICA9ICJ0aHJlZSIKLQotICAgICAg ICAgIGFuZDoKLQotICAgIFxmd29yZChcdihkaWFscmVzdWx0KSwyKSA9ICIzMTIwMCIKLQotICAg ICAgICAgIGlzICIzMTIwMCIgaWYgXHYoZGlhbHJlc3VsdCkgaXMgKGUuZy4pICJDT05ORUNUCi0g ICAgICAgICAgMzEyMDAvQVJRL1YzMi9MQVBNL1Y0MkJJUyIuCi0KLSAgICAgICAgICBJZiB5b3Ug aW5jbHVkZSBzMiwgdGhpcyByZXBsYWNlcyB0aGUgZGVmYXVsdCBicmVhayBzZXQuIEZvcgotICAg ICAgICAgIGV4YW1wbGUsIHN1cHBvc2UgeW91IGhhdmUgYSBzdHJpbmcgXCVhIHdob3NlIHZhbHVl IGlzOgotCi0gICQxNTAuMDAgJDMwMC4wMCAkMzkuOTUKLQotICAgICAgICAgIGFuZCB5b3Ugd2Fu dCBlYWNoIGRvbGxhciBhbW91bnQgdG8gYmUgYSB3b3JkOyB1c2U6Ci0KLSAgXGZ3b3JkKFwlYSxc JW4seyB9KQotCi0gICAgICAgICAgVGhpcyByZXR1cm5zIGRvbGxhciBhbW91bnQgbnVtYmVyIFwl biwgZS5nLiAiJDMwMC4wMCIgZm9yIFwlbiA9Ci0gICAgICAgICAgMi4gInsgfSIgZGVub3RlcyBh IHNwYWNlICh5b3UgbXVzdCBlbmNsb3NlIGl0IGluIGJyYWNlcywKLSAgICAgICAgICBvdGhlcndp c2UgaXQgaXMgc3F1ZWV6ZWQgb3V0KS4gTm90ZSB0aGF0IEFTQ0lJIGNvbnRyb2wKLSAgICAgICAg ICBjaGFyYWN0ZXJzIGFyZSBhbHdheXMgaW5jbHVkZWQgaW4gdGhlIGJyZWFrIHNldDsgeW91IGRv bid0IGhhdmUKLSAgICAgICAgICB0byBzcGVjaWZ5IHRoZW0gKGFuZCB5b3UgY2FuJ3Qgbm90IHNw ZWNpZnkgdGhlbSkuCi0KLSAgICAgICAgICBUaGUgb3B0aW9uYWwgczMgYXJndW1lbnQgbGlzdHMg Y2hhcmFjdGVycyAoZXZlbiBjb250cm9sCi0gICAgICAgICAgY2hhcmFjdGVycykgdGhhdCBub3Jt YWxseSB3b3VsZCBiZSBjb25zaWRlcmVkIHNlcGFyYXRvcnMgdGhhdAotICAgICAgICAgIHlvdSB3 YW50IGluY2x1ZGVkIGluIHdvcmRzLiBTbyB0aGUgZG9sbGFycy1hbmQtY2VudHMgZXhhbXBsZQot ICAgICAgICAgIGNvdWxkIGFsc28gYmUgaGFuZGxlZCB0aGlzIHdheToKLQotICBcZndvcmQoXCVh LFwlbiwsJC4pCi0KLSAgICAgICAgICBpbiBvdGhlciB3b3JkcywgdXNlIHRoZSBkZWZhdWx0IHNl cGFyYXRvciBsaXN0LCBidXQgcmVtb3ZlICIkIgotICAgICAgICAgIGFuZCAiLiIgZnJvbSBpdCBz byB0aGV5IHdpbGwgYmUgY29uc2lkZXJlZCBwYXJ0IG9mIGEgd29yZC4KLQotICAgICAgICAgIE5v dGUgdGhhdCBzaW5jZSA4LWJpdCBjaGFyYWN0ZXJzIGFyZSBub3QgQVNDSUksIHRoZXkgYWN0IGFz Ci0gICAgICAgICAgYnJlYWsgY2hhcmFjdGVycyB1bmxlc3MgeW91IHB1dCB0aGVtIGluIHRoZSBp bmNsdWRlIGxpc3QuCi0gICAgICAgICAgU3VwcG9zZSwgZm9yIGV4YW1wbGUsIHlvdSBoYXZlIGEg ZmlsZSBpbiB3aGljaCBlYWNoIGxpbmUgaXMgYQotICAgICAgICAgIFRhYi1zZXBhcmF0ZWQgbGlz dCBvZiB3b3JkcywgbnVtYmVycywgb3IgcGhyYXNlcyB0aGF0IG1pZ2h0Ci0gICAgICAgICAgY29u dGFpbiBwdW5jdHVhdGlvbiwgc3BlY2lhbCBjaGFyYWN0ZXJzIGxpa2UgJCBhbmQgQCwgOC1iaXQg Yml0Ci0gICAgICAgICAgY2hhcmFjdGVycywgZXRjIChsaWtlIHNvbWV0aGluZyB0aGF0IG1pZ2h0 IGhhdmUgYmVlbiBleHBvcnRlZAotICAgICAgICAgIGZyb20gYSBzcHJlYWRzaGVldCBvciBkYXRh YmFzZSksIGFuZCB5b3Ugd2FudCB0byBzcGxpdCBvbmx5IG9uCi0gICAgICAgICAgVGFiOyBoZXJl IGlzIGEgd2F5IChcbShsaW5lKSBpcyBhIGxpbmUgcmVhZCBmcm9tIHRoZSBmaWxlKToKLQotdW5k ZWYga2VlcAotZm9yIFwlaSAxIDI1NSAxIHsKLSAgICBpZiA9PSBcJWkgOSBjb250aW51ZQotICAg IC5rZWVwIDo9IFxtKGtlZXApXGZjaGFyKFwlaSkKLX0KLXdoaWxlIHRydWUgewotICAgIGZyZWFk IC9saW5lIFwlYyBsaW5lCi0gICAgaWYgZmFpbCBicmVhawotICAgIC5cJW4gOj0gXGZzcGxpdChc bShsaW5lKSwmYSxcOSxcbShrZWVwKSkKLSAgICAuLi4KLX0KLQotICAgICAgICAgIFRoaXMgcHJv YmxlbSBpcyBhZGRyZXNzZWQgaW4gWzU4MV1DLUtlcm1pdCA5LjAuCi0KLSAgIFxmc3BsaXQoczEs JmEsczIsczMpCi0gICAgICAgICAgVGhpcyBpcyBsaWtlIFxmd29yZCgpLCBleGNlcHQgaW5zdGVh ZCBvZiBleHRyYWN0aW5nIGFuZAotICAgICAgICAgIHJldHVybmluZyBhIHBhcnRpY3VsYXIgd29y ZCBmcm9tIHN0cmluZyBzMSwgaXQgY291bnRzIHRoZSB3b3JkcwotICAgICAgICAgIGFuZCBvcHRp b25hbGx5IGFzc2lnbnMgdGhlbSB0byB0aGUgYXJyYXkgd2hvc2UgaWRlbnRpZnlpbmcKLSAgICAg ICAgICBsZXR0ZXIsIGEteiwgaXMgZ2l2ZW4gYWZ0ZXIgdGhlICImIiBpbiB0aGUgc2Vjb25kIGFy Z3VtZW50LCB3aXRoCi0gICAgICAgICAgdGhlIGZpcnN0IHdvcmQgZ29pbmcgaW50byBlbGVtZW50 IDEsIHRoZSBzZWNvbmQgaW50byBlbGVtZW50IDIsCi0gICAgICAgICAgYW5kIHNvIG9uLiBUaGUg cnVsZXMgcmVnYXJkaW5nIGJyZWFrIGFuZCBpbmNsdWRlIGxpc3RzIChzMiBhbmQKLSAgICAgICAg ICBzMykgYXJlIGV4YWN0bHkgdGhlIHNhbWUgYXMgZm9yIFxmd29yZCgpLiBcZnNwbGl0KCkgcmV0 dXJucyB0aGUKLSAgICAgICAgICBudW1iZXIgb2Ygd29yZHMgdGhhdCB3ZXJlIGFzc2lnbmVkLCB3 aGljaCBpcyBlaXRoZXIgdGhlIG51bWJlcgotICAgICAgICAgIG9mIHdvcmRzIGluIHRoZSBzdHJp bmcsIG9yIHRoZSBkaW1lbnNpb24gb2YgdGhlIGFycmF5LCB3aGljaGV2ZXIKLSAgICAgICAgICBp cyBsZXNzLiBJZiB0aGUgYXJyYXkgaXMgbm90IGRlY2xhcmVkLCBcZnNwbGl0KCkgY3JlYXRlcyBp dCBhbmQKLSAgICAgICAgICByZXR1cm5zIGEgbnVtYmVyIHdoaWNoIGlzIGJvdGggdGhlIG51bWJl ciBvZiB3b3JkcyBpbiBzMSBhbmQgdGhlCi0gICAgICAgICAgZGltZW5zaW9uIG9mIHRoZSBuZXcg YXJyYXkuIEV4YW1wbGVzOgotCi0gIGRlY2xhcmUgXCZ3WzIwXSAgICAgICAgOyAoT3B0aW9uYWwu KQotICAuLi4KLSAgcmVhZCBcJXMgICAgICAgICAgICAgICA7IFwlcyBpcyAiVGhpcyBpcyBhIHNl bnRlbmNlIHdpdGggc2V2ZW4gd29yZHMuIgotICAuLi4KLSAgZWNobyAiXGZzcGxpdChcJXMpIiAg ICA7IFRoaXMgd291bGQgcHJpbnQgIjciLgotICBlY2hvICJcZnNwbGl0KFwlcywmdykiIDsgRGl0 dG8sIGFuZCBhbHNvIGFzc2lnbnMgdGhlbSB0byBhcnJheSBcJndbXS4KLQotICBlY2hvICJcJndb N10iICAgICAgICAgIDsgVGhpcyB3b3VsZCBwcmludCAid29yZHMiLgotCi0gICAgICAgICAgSWYg dGhlIGxpbmUgY29udGFpbmVkIGZpZWxkcyB0aGF0IHdlcmUgZGVsaW1pdGVkIGJ5IGNvbG9uICg6 KSwKLSAgICAgICAgICB5b3Ugd291bGQgdXNlIFxmc3BsaXQoXCVzLCZ3LDopLiBJZiB0aGUgZmll bGRzIHdlcmUgZGVsaW1pdGVkIGJ5Ci0gICAgICAgICAgY29tbWEsIHRoZW4geW91IHdvdWxkIHVz ZSBcZnNwbGl0KFwlcywmdyx7LH0pOyBpbiB0aGlzIGNhc2UgdGhlCi0gICAgICAgICAgbGl0ZXJh bCBjb21tYSBtdXN0IGJlIGVuY2xvc2VkIGluIGJyYWNlcyB0byBkaXN0aW5ndWlzaCBpdCBmcm9t Ci0gICAgICAgICAgdGhlIGNvbW1hIHRoYXQgc2VwYXJhdGVzIGZ1bmN0aW9uIGFyZ3VtZW50cy4g VG8gZ2V0IGEgd29yZCBjb3VudAotICAgICAgICAgIHdpdGhvdXQgbG9hZGluZyBhbiBhcnJheSwg YnV0IHN0aWxsIHNwZWNpZnkgYnJlYWsgYW5kL29yIGluY2x1ZGUKLSAgICAgICAgICBsaXN0cywg bGVhdmUgdGhlIGFycmF5IGFyZ3VtZW50IGVtcHR5OgotCi0gICBlY2hvICJcZnNwbGl0KFwlcyws OikiIDsgVXNlIGNvbG9uIGFzIHRoZSBzZXBhcmF0b3IuCi0KLSAgICAgICAgICBXQVJOSU5HUzoK LQotICAgICAgICAgMS4gSWYgeW91IHVzZSB0aGUgc2FtZSBhcnJheSByZXBlYXRlZGx5LCBcZnNw bGl0KCkgbGVhdmVzIGFueQotICAgICAgICAgICAgdHJhaWxpbmcgbWVtYmVycyB1bmRpc3R1cmJl ZC4gRm9yIGV4YW1wbGU6Ci0gIGRjbCBcJndbMTBdCi0gIFxmc3BsaXQoMSAyIDMgNCA1LCZ3KSA7 IFNldHMgXCZ3WzFdIHRocnUgXCZ3WzVdLgotICBcZnNwbGl0KGEgYiBjLCZ3KSAgICAgOyBTZXRz IFwmd1sxXS1bM10gbGVhdmluZyBbNF0tWzVdIGFzIHRoZXkgd2VyZS4KLQotICAgICAgICAgMi4g SWYgeW91IGFsbG93IFxmc3BsaXQgdG8gY3JlYXRlIHRoZSBhcnJheSAoYnkgbm90IGRlY2xhcmlu ZyBpdAotICAgICAgICAgICAgZmlyc3QpLCBpdCBpcyBkaW1lbnNpb25lZCB0byB0aGUgbnVtYmVy IG9mIGVsZW1lbnRzIGl0IHdhcwotICAgICAgICAgICAgY3JlYXRlZCB3aXRoOgotICBcZnNwbGl0 KDEgMiAzLCZ4KSAgICAgOyBDcmVhdGVzIGFuIGFycmF5IFwmeFtdIHdpdGggMyBlbGVtZW50cy4K LSAgXGZzcGxpdChhIGIgYyBkIGUsJngpIDsgVGhpcyBvdmVyZmxvd3MgdGhlIGFycmF5LgotCi0g ICAgICAgICAgVGh1cyBpZiB5b3Ugd2FudCB0byB1c2UgXGZzcGxpdCgpIHJlcGVhdGVkbHkgb24g dGhlIHNhbWUgYXJyYXksCi0gICAgICAgICAgZWl0aGVyIGRpbWVuc2lvbiBpdCBpbiBhZHZhbmNl IHRvIHRoZSBtYXhpbXVtIGV4cGVjdGVkIHNpemUgKGFuZAotICAgICAgICAgIHRoZW4gc29tZSAt LSBtb3JlIGVmZmljaWVudCksIG9yIGVsc2UgZGVzdHJveSBpdCBhZnRlciBlYWNoIHVzZQotICAg ICAgICAgICh0byBhbGxvdyBmb3IgdW5leHBlY3RlZGx5IGxhcmdlIGFyZ3VtZW50cykuIEV4YW1w bGUgdXNpbmcgYQotICAgICAgICAgIGR5bmFtaWMgYXJyYXk6Ci0KLSAgZm9wZW4gL3JlYWQgXCVj IHNvbWUtZmlsZQotICBpZiBmYWlsIC4uLgotICBzZXQgZnVuY3Rpb24gZXJyb3Igb24gICAgOyBT ZWUgWzU4Ml1TZWN0aW9uIDcuMTIKLSAgd2hpbGUgdHJ1ZSB7Ci0gICAgICBkY2wgXCZ3W10gICAg ICAgICAgICA7IERlc3Ryb3kgXCZbd10gZWFjaCB0aW1lIHRocnUgdGhlIGxvb3AKLSAgICAgIGZy ZWFkIC9saW5lIFwlYyBcJWEKLSAgICAgIGlmIGZhaWwgYnJlYWsKLSAgICAgIGFzZyBcJXggXGZz cGxpdChcJWEsJncpCi0gICAgICBpZiBmYWlsIC4uLgotICAgICAgOyAoZG8gd2hhdCB5b3Ugd2Fu dCB3aXRoIFwmd1tdIGhlcmUuLi4pCi0gIH0KLSAgZmNsb3NlIFwlYwotCi0gICBcZnJpbmRleChz MSxzMixuKQotICAgICAgICAgIFRoZSAibiIgYXJndW1lbnQgdG8gXGZyaW5kZXgoKSBub3cgd29y a3MgY29uc2lzdGVudGx5IChpbiBtaXJyb3IKLSAgICAgICAgICBpbWFnZSkgd2l0aCB0aGUgY29y cmVzcG9uZGluZyBcZmluZGV4KCkgYXJndW1lbnQuIEluIGVhY2ggY2FzZSwKLSAgICAgICAgICB0 aGUgKG4tMSktbW9zdCBjaGFyYWN0ZXJzIG9mIHMyIGFyZSBpZ25vcmVkIGluIHRoZSBzZWFyY2g7 IGZvcgotICAgICAgICAgIGZpbmRleCwgdGhpcyBtZWFucyB0aGUgc3RhcnRpbmcgcG9zaXRpb24g b2YgdGhlIHNlYXJjaCBpcyBuICh0aGUKLSAgICAgICAgICBkZWZhdWx0IG4gaXMgMSwgYW5kIDAg aXMgdHJlYXRlZCBsaWtlIDEpLiBGb3IgXGZyaW5kZXgoKSBpdAotICAgICAgICAgIG1lYW5zIHRo ZSBkZWZhdWx0IHN0YXJ0aW5nIHBvaW50IGlzOgotCi0gIGxlbmd0aChzMikgLSBsZW5ndGgoczEp IC0gbiAod2l0aCB0aGUgc2FtZSBkZWZhdWx0cyBmb3IgbikuCi0KLSAgIFxmc2VhcmNoKHBhdHRl cm4sc3RyaW5nWyxwb3NpdGlvbl0pCi0gICAgICAgICAgRXhhY3RseSBsaWtlIFxmaW5kZXgoKSwg ZXhjZXB0IHdpdGggYSBwYXR0ZXJuIChzZWUgWzU4M11TZWN0aW9uCi0gICAgICAgICAgNy45KSBy YXRoZXIgdGhhbiBhIGxpdGVyYWwgc3RyaW5nLgotCi0gICBcZnJzZWFyY2gocGF0dGVybixzdHJp bmdbLHBvc2l0aW9uXSkKLSAgICAgICAgICBFeGFjdGx5IGxpa2UgXGZyaW5kZXgoKSwgZXhjZXB0 IHdpdGggYSBwYXR0ZXJuIHJhdGhlciB0aGFuIGEKLSAgICAgICAgICBsaXRlcmFsIHN0cmluZy4K LQotICAgICAgICAgIEZpbGUgRnVuY3Rpb25zOgotCi0gICBcZmZpbGVzKCksIFxmbmV4dGZpbGUo KQotICAgICAgICAgIEl0IGlzIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gY29weSB0aGUgZmlsZSBs aXN0IHRvIGFuIGFycmF5Ci0gICAgICAgICAgYmVmb3JlIHVzZSwgYXMgc2hvd24gb24gcC4zOTgg b2YgWzU4NF1Vc2luZyBDLUtlcm1pdCAybmQKLSAgICAgICAgICBFZGl0aW9uLiBcZmZpbGVzKCkg YW5kIGZyaWVuZHMgbm93IG1ha2UgdGhlaXIgb3duIHNhZmUgY29waWVzIG9mCi0gICAgICAgICAg dGhlIGZpbGUgbGlzdC4gVGh1cyBjb25zdHJ1Y3Rpb25zIGxpa2UgdGhlIGZvbGxvd2luZyBhcmUg bm93Ci0gICAgICAgICAgcG9zc2libGU6Ci0KLSAgZm9yIFwlaSAxIFxmZmlsZXMoKi50eHQpIDEg eyBzZW5kIFxmbmV4dGZpbGUoKSB9Ci0KLSAgICAgICAgICBUaGUgc2FtZSBpcyB0cnVlIGZvciB0 aGUgbmV3IGZ1bmN0aW9uIFxmcmZpbGVzKCksCi0gICAgICAgICAgXGZkaXJlY3RvcmllcygpLCBh bmQgXGZyZGlyZWN0b3JpZXMoKSwgZGVzY3JpYmVkIGluIFs1ODVdU2VjdGlvbgotICAgICAgICAg IDQuMTEuMy4KLQotICAgICAgICAgIEJ1dCBub3RlIHRoYXQgZWFjaCByZWZlcmVuY2UgdG8gXGZu ZXh0ZmlsZSgpIHN0aWxsIGdldHMgeW91IHRoZQotICAgICAgICAgIG5leHQgZmlsZS4gU28gImlm IG5ld2VyIFxmbmV4dGZpbGUoKSBmb28udHh0IHNlbmQgXGZuZXh0ZmlsZSgpIgotICAgICAgICAg IGNvbXBhcmVzIG9uZSBmaWxlJ3MgYWdlIHdpdGggdGhhdCBvZiBmb28udHh0LCBhbmQgdGhlbiBz ZW5kcyBhbgotICAgICAgICAgIGVudGlyZWx5IGRpZmZlcmVudCBmaWxlLiBJZiB5b3UncmUgZ29p bmcgdG8gcmVmZXIgdG8gdGhlIHNhbWUKLSAgICAgICAgICBmaWxlIG1vcmUgdGhhbiBvbmNlLCBh c3NpZ24gaXQgdG8gYSB2YXJpYWJsZToKLQotICBhc2cgXCVmIFxmbmV4dGZpbGUoKQotICBpZiBu ZXdlciBcJWYgZm9vLnR4dCBzZW5kIFwlZgotCi0gICAgICAgICAgKG5vdGU6IGFzc2lnbiwgbm90 IGRlZmluZSkuCi0KLSAgICAgICAgICBBbHNvIG5vdGUgdGhhdCBcZmZpbGVzKCksIFxmcmZpbGVz KCksIFxmZGlyZWN0b3JpZXMoKSwgYW5kCi0gICAgICAgICAgXGZyZGlyZWN0b3JpZXMoKSBhbGwg bm93IGFjY2VwdCBvbiBvcHRpb25hbCAybmQgYXJndW1lbnQ6IHRoZQotICAgICAgICAgIG5hbWUg b2YgYW4gYXJyYXkgdG8gbG9hZCB3aXRoIHRoZSByZXN1bHRpbmcgZmlsZSBvciBkaXJlY3RvcnkK LSAgICAgICAgICBsaXN0LCBleHBsYWluZWQgaW4gWzU4Nl1TZWN0aW9uIDQuMTEuMy4gU28geW91 IGNhbiBhbHNvIGxvYWQgYW4KLSAgICAgICAgICBhcnJheSB3aXRoIHRoZSBmaWxlbGlzdCB3aGVu IHlvdSBuZWVkIHRvIHJlZmVyIHRvIHRoZSBzYW1lIGZpbGUKLSAgICAgICAgICBtb3JlIHRoYW4g b25jZToKLQotICBmb3IgXCVpIDEgXGZmaWxlcygqLCZhKSAxIHsgaWYgbmV3ZXIgXCZhW1wlaV0g Zm9vLnR4dCBzZW5kIFwmYVtcJWldIH0KLQotICAgXGZwZXJtaXNzaW9ucyhmaWxlKQotICAgICAg ICAgIFJldHVybnMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIHBlcm1pc3Npb25zIHN0cmluZyBmb3Ig dGhlIGZpbGUsCi0gICAgICAgICAgc3VjaCBhcyAiLXJ3LXJ3LXItLSIgaW4gVU5JWCBvciAiKFJX RSxSV0UsUkUsRSkiIGluIFZNUy4KLQotICAgXGZkaXJuYW1lKGYpCi0gICAgICAgICAgR2l2ZW4g YSBmaWxlIHNwZWNpZmljYXRpb24gZiwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjb21wbGV0 ZQotICAgICAgICAgIHBhdGhuYW1lIG9mIGRpcmVjdG9yeSB0aGUgZmlsZSBpcyBpbi4KLQotICAg QXJyYXkgRnVuY3Rpb25zOgotCi0gICBcZmRpbWVuc2lvbigmYSkKLSAgICAgICAgICBSZXR1cm5z IHRoZSBkaW1lbnNpb24gZGVjbGFyZWQgZm9yIHRoZSBhcnJheSB3aG9zZSBpZGVudGlmeWluZwot ICAgICAgICAgIGxldHRlciwgYS16LCBvciBzcGVjaWFsIGNoYXJhY3RlciAiXyIgb3IgIkAiLCBp cyBnaXZlbiBhZnRlciB0aGUKLSAgICAgICAgICAiJiIgaW4gdGhlIGFyZ3VtZW50LiBJZiB0aGUg YXJyYXkgaXMgbm90IGRlY2xhcmVkLCAwIGlzCi0gICAgICAgICAgcmV0dXJuZWQuIE5vdGUgdGhh dCB3aGVuIHVzZWQgd2l0aCB0aGUgbWFjcm8gYXJndW1lbnQgdmVjdG9yCi0gICAgICAgICAgYXJy YXksIFwmX1tdIChzZWUgWzU4N11TZWN0aW9uIDcuNSksIHRoZSB2YWx1ZSBvZiB0aGlzIGZ1bmN0 aW9uCi0gICAgICAgICAgaXMgb25lIGxlc3MgdGhhbiBcdihhcmdjKSwgYW5kIHdoZW4gdXNlZCB3 aXRoIHRoZSBDLUtlcm1pdAotICAgICAgICAgIGNvbW1hbmQtbGluZSBhcmd1bWVudCB2ZWN0b3Ig YXJyYXksIFwmQFtdLCBpdCBpcyBlcXVhbCB0byB0aGUKLSAgICAgICAgICBcdihhcmdzKSB2YXJp YWJsZS4gRXhhbXBsZXM6Ci0KLSAgZWNobyBcZmRpbWVuc2lvbigmYSkgICAgICAgOyBOb3QgZGVj bGFyZWQuCi0gIDAKLSAgZGVjbGFyZSBcJmFbMTJdICAgICAgICAgICAgOyBOb3cgaXQncyBkZWNs YXJlZC4KLSAgZWNobyBcZmRpbSgmYSkKLSAgMTIKLQotICAgXGZhcnJheWxvb2socGF0dGVybixh cnJheW5hbWUpCi0gICAgICAgICAgTG9va3MgaW4gdGhlIGdpdmVuIGFycmF5IGZvciB0aGUgcGF0 dGVybiBhbmQgcmV0dXJucyB0aGUgaW5kZXgKLSAgICAgICAgICBvZiB0aGUgZmlyc3QgZWxlbWVu dCB0aGF0IG1hdGNoZXMsIGlmIGFueSwgb3IgLTEgaWYgbm9uZSBtYXRjaC4KLSAgICAgICAgICBU aGUgYXJyYXluYW1lIGNhbiBpbmNsdWRlIGEgcmFuZ2Ugc3BlY2lmaWVyIHRvIHJlc3RyaWN0IHRv Ci0gICAgICAgICAgc2VhcmNoIHRvIGEgc2VnbWVudCBvZiB0aGUgYXJyYXksIGUuZy4KLSAgICAg ICAgICBcZmFycmF5bG9vaygqeHl6KiwmYVszMjo2M10pLiBGb3IgZ3JlYXRlciBkZXRhaWwgc2Vl Ci0gICAgICAgICAgWzU4OF1TZWN0aW9uIDcuMTAuNy4KLQotICAgXGZ0YWJsZWxvb2soa2V5d29y ZCxhcnJheW5hbWVbLGRlbGltaXRlcl0pCi0gICAgICAgICAgTG9va3MgaW4gdGhlIGdpdmVuICJ0 YWJsZSIsIHdoaWNoIG11c3QgYmUgc29ydGVkLCBmb3IgdGhlIGdpdmVuCi0gICAgICAgICAga2V5 d29yZC4gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIHRhYmxlIGVsZW1lbnQgdGhhdCB1bmlxdWVs eQotICAgICAgICAgIG1hdGNoZXMgdGhlIGdpdmVuIGtleXdvcmQsIG9yIC0xIGlmIG5vbmUgbWF0 Y2gsIG9yIC0yIGlmIG1vcmUKLSAgICAgICAgICB0aGFuIDEgbWF0Y2guIEZvciBncmVhdGVyIGRl dGFpbCBzZWUgWzU4OV1TZWN0aW9uIDcuMTAuNy4KLQotICAgT3RoZXIgbmV3IGZ1bmN0aW9uczoK LQotICAgXGZpcDJoZXgocykKLSAgICAgICAgICBDb252ZXJ0cyBhIGRvdHRlZCBkZWNpbWFsIElQ IGFkZHJlc3MgdG8gYW4gOC1kaWdpdCBoZXhhZGVjaW1hbAotICAgICAgICAgIG51bWJlci4gXGZp cDJoZXgoMTI4LjU5LjM5LjIpID0gODAzYjI3MDIuCi0KLSAgIFxmaGV4MmlwKHgpCi0gICAgICAg ICAgQ29udmVydHMgYW4gOC1kaWdpdCBoZXhhZGVjaW1hbCBJUCBhZGRyZXNzIHRvIGRvdHRlZCBk ZWNpbWFsCi0gICAgICAgICAgZm9ybSwgZS5nLiBcZmhleDJpcCg4MDNiMjcwMikgPSAxMjguNTku MzkuMi4gVGhlIGludmVyc2Ugb2YKLSAgICAgICAgICBcZmlwMmhleCgpLgotCi0gICBcZmNvbW1h bmQoKQotICAgXGZyYXdjb21tYW5kKCkKLSAgICAgICAgICBUaGVzZSBydW4gYW4gZXh0ZXJuYWwg Y29tbWFuZCBhbmQgcmV0dXJuIGl0cyBvdXRwdXQ7IHNlZQotICAgICAgICAgIFs1OTBdU2VjdGlv biA0LjIuOC40LgotCi0gICBcZmRpYWxjb252ZXJ0KHMpCi0gICAgICAgICAgcyBpcyBhIHBob25l IG51bWJlciBpbiBlaXRoZXIgbGl0ZXJhbCBvciBwb3J0YWJsZSBmb3JtYXQgKG5vdCBhCi0gICAg ICAgICAgZGlhbGluZyBkaXJlY3RvcnkgZW50cnkgbmFtZSkuIFRoZSBmdW5jdGlvbiByZXR1cm5z IHRoZSBkaWFsCi0gICAgICAgICAgc3RyaW5nIHRoYXQgd291bGQgYWN0dWFsbHkgYmUgdXNlZCB3 aGVuIGRpYWxpbmcgZnJvbSB0aGUgY3VycmVudAotICAgICAgICAgIGxvY2F0aW9uIChhZnRlciBw cm9jZXNzaW5nIGNvdW50cnkgY29kZSwgYXJlYSBjb2RlLCBhbmQgb3RoZXIKLSAgICAgICAgICBT RVQgRElBTCB2YWx1ZXMpLgotCi0gICBcZmVycnN0cmluZyhuKQotICAgICAgICAgIFJldHVybnMg dGhlIHN5c3RlbSBlcnJvciBtZXNzYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgKG51bWVyaWMpCi0g ICAgICAgICAgZXJyb3IgY29kZSBuLiBVTklYIGFuZCBWTVMgb25seS4gVXNlIGluIGNvbmp1bmN0 aW9uIHdpdGgKLSAgICAgICAgICBcdihlcnJubykgb3IgXHYocGV4aXRzdGF0KS4gU2VlIFs1OTFd U2VjdGlvbiA0LjIuNSBmb3IgYSB1c2FnZQotICAgICAgICAgIGV4YW1wbGUuIE5vdGU6IFRoaXMg ZnVuY3Rpb24gZG9lc24ndCB3b3JrIGluIFdpbmRvd3MgYmVjYXVzZQotICAgICAgICAgIHRoZXJl IGlzIG5vdCBhIGNvbnNpc3RlbnQgZXJyb3ItY29kZS10by1tZXNzYWdlIG1hcHBpbmc7IGVycm9y Ci0gICAgICAgICAgY29kZSAieCIgbWVhbnMgc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50 IGRlcGVuZGluZyBvbgotICAgICAgICAgIHdoZXRoZXIgaXQgY29tZXMgZnJvbSB0aGUgQyBydW50 aW1lIGxpYnJhcnksIFdpbnNvY2ssIGEKLSAgICAgICAgICBXaW5kb3dzLTMyIEFQSSwgVEFQSSwg ZXRjLAotCi0gICBcZnBhdHRlcm4ocykKLSAgICAgICAgICBVc2VkIGluIElOUFVULCBSRUlOUFVU LCBhbmQgTUlOUFVUIGNvbW1hbmRzIHRvIGRlbm90ZSBzZWFyY2gKLSAgICAgICAgICBzdHJpbmdz IHRoYXQgYXJlIHRvIGJlIHRyZWF0ZWQgYXMgcGF0dGVybnMgcmF0aGVyIHRoYW4KLSAgICAgICAg ICBsaXRlcmFsbHkuCi0KLSAgIEFsc28gc2VlIFs1OTJdU2VjdGlvbiA3Ljggb24gYnVpbHQtaW4g aGVscCBmb3IgZnVuY3Rpb25zLgotCi0gIDcuNC4gTmV3IElGIENvbmRpdGlvbnMKLQotICAgSUYg QVZBSUxBQkxFIGZlYXR1cmUgY29tbWFuZAotICAgICAgICAgIEV4ZWN1dGVzIHRoZSBjb21tYW5k IGlmIHRoZSBnaXZlbiBmZWF0dXJlIGlzIGF2YWlsYWJsZS4KLSAgICAgICAgICBQcmVzZW50bHkg dXNlZCBvbmx5IHRvIGRldGVybWluZSBpZiBzcGVjaWZpYyBhdXRoZW50aWNhdGlvbiBhbmQKLSAg ICAgICAgICBlbmNyeXB0aW9uIG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4gVHlwZSAiaWYgYXZhaWxh YmxlID8iIHRvIHNlZQotICAgICAgICAgIHdoaWNoIGZlYXR1cmVzIG1heSBiZSB0ZXN0ZWQuCi0K LSAgIElGIEZMT0FUIGYxIGNvbW1hbmQKLSAgICAgICAgICBFeGVjdXRlcyBjb21tYW5kIGlmIGYx IGlzIGEgbGVnYWwgZmxvYXRpbmcgcG9pbnQgbnVtYmVyICh3aGljaAotICAgICAgICAgIGluY2x1 ZGVzIGludGVnZXJzKS4gVXNlIHRoaXMgdG8gcHJldmVyaWZ5IGFyZ3VtZW50cyBmb3IgdGhlCi0g ICAgICAgICAgXGZmcC4uLigpIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgZnVuY3Rpb25zLCBl LmcuICJpZiBmbG9hdAotICAgICAgICAgIFwlMSBlY2hvIFxmZnBpbnQoXCUxKSIuCi0KLSAgIElG ID09IG4xIG4yIGNvbW1hbmQKLSAgICAgICAgICBTeW5vbnltIGZvciAiaWYgPSIgKG51bWVyaWMg ZXF1YWxpdHkpLiBOb3RlIHRoYXQgYXMgb2YgQy1LZXJtaXQKLSAgICAgICAgICA3LjAsIHRoaXMg YW5kIGFsbCBvdGhlciBudW1lcmljIGNvbXBhcmlzb24gb3BlcmF0b3JzIGFsc28gd29yawotICAg ICAgICAgIGZvciBmbG9hdGluZy1wb2ludCBudW1iZXJzLgotCi0gICBJRiAhPSBuMSBuMiBjb21t YW5kCi0gICAgICAgICAgRXhlY3V0ZXMgdGhlIGNvbW1hbmQgaWYgbjEgYW5kIG4yIGFyZSBib3Ro IG51bWJlcnMgb3IgdmFyaWFibGVzCi0gICAgICAgICAgY29udGFpbmluZyBudW1iZXJzIGFuZCB0 aGUgdmFsdWUgb2YgbjEgaXMgbm90IGVxdWFsIHRvIHRoZSB2YWx1ZQotICAgICAgICAgIG9mIG4y LiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gImlmIG5vdCA9IG4xIG4yIi4KLQotICAgSUYgPD0gbjEg bjIgY29tbWFuZAotICAgICAgICAgIEV4ZWN1dGVzIHRoZSBjb21tYW5kIGlmIG4xIGFuZCBuMiBh cmUgYm90aCBudW1iZXJzIG9yIHZhcmlhYmxlcwotICAgICAgICAgIGNvbnRhaW5pbmcgbnVtYmVy cyBhbmQgdGhlIHZhbHVlIG9mIG4xIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0bwotICAgICAgICAg IHRoZSB2YWx1ZSBvZiBuMi4gVGhpcyBpcyBlcXVpdmFsZW50IHRvICJpZiBub3QgPiBuMSBuMiIu Ci0KLSAgIElGID49IG4xIG4yIGNvbW1hbmQKLSAgICAgICAgICBFeGVjdXRlcyB0aGUgY29tbWFu ZCBpZiBuMSBhbmQgbjIgYXJlIGJvdGggbnVtYmVycyBvciB2YXJpYWJsZXMKLSAgICAgICAgICBj b250YWluaW5nIG51bWJlcnMgYW5kIHRoZSB2YWx1ZSBvZiBuMSBpcyBncmVhdGVyIHRoYW4gb3Ig ZXF1YWwKLSAgICAgICAgICB0byB0aGUgdmFsdWUgb2YgbjIuIEVxdWl2YWxlbnQgdG8gImlmIG5v dCA8IG4xIG4yIi4KLQotICAgSUYgQ09NTUFORCB3b3JkIGNvbW1hbmQKLSAgICAgICAgICBFeGVj dXRlcyB0aGUgY29tbWFuZCBpZiB3b3JkIGlzIGEgYnVpbHQtaW4gQy1LZXJtaXQgY29tbWFuZC4K LSAgICAgICAgICBFeGFtcGxlOgotCi0gIGlmIG5vdCBjb21tYW5kIGNvcHkgZGVmaW5lIHsgY29w eSBydW4gY29weSBcJTEgXCUyIH0iLgotCi0gICAgICAgICAgVGhpcyBkZWZpbmVzIGEgQ09QWSBt YWNybyB0aGF0IHJ1bnMgYW4gZXh0ZXJuYWwgQ09QWSBjb21tYW5kIGlmCi0gICAgICAgICAgQ09Q WSBpcyBub3QgYWxyZWFkeSBhIGJ1aWx0LWluIGNvbW1hbmQuCi0KLSAgIElGIExPQ0FMIGNvbW1h bmQKLSAgICAgICAgICBFeGVjdXRlcyB0aGUgY29tbWFuZCBpZiBLZXJtaXQgaXMgaW4gbG9jYWwg bW9kZSwgaS5lLiBpZiBpdCBoYXMKLSAgICAgICAgICBhIFNFVCBMSU5FLCBTRVQgUE9SVCwgb3Ig U0VUIEhPU1QgKFRFTE5FVCwgUkxPR0lOLCBldGMpIGRldmljZQotICAgICAgICAgIG9yIGNvbm5l Y3Rpb24gb3Blbi4gRG9lcyBub3QgZXhlY3V0ZSB0aGUgY29tbWFuZCBpZiBpbiByZW1vdGUKLSAg ICAgICAgICBtb2RlLgotCi0gICBJRiBNQVRDSCBzdHJpbmcgcGF0dGVybiBjb21tYW5kCi0gICAg ICAgICAgRXhlY3V0ZXMgdGhlIGNvbW1hbmQgaWYgdGhlIHN0cmluZyBtYXRjaGVzIHRoZSBwYXR0 ZXJuLiBGb3IgYQotICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBzeW50YXggZm9yIHRoZSBw YXR0ZXJuLCBzZWUgWzU5M11TZWN0aW9uCi0gICAgICAgICAgNC45LjEuIElmIHlvdSB3YW50IHRv IHRlc3QgaWYgdGhlIHN0cmluZyBjb250YWlucyBwYXR0ZXJuLCB1c2UKLSAgICAgICAgICBJRiBc ZnNlYXJjaChwYXR0ZXJuLHN0cmluZykuCi0KLSAgIElGIE9QRU4geyBERUJVRy1MT0csIFNFU1NJ T04tTE9HLCBUUkFOU0FDVElPTi1MT0csIC4uLiB9IGNvbW1hbmQKLSAgICAgICAgICBFeGVjdXRl cyB0aGUgY29tbWFuZCBpZiB0aGUgZ2l2ZW4gZmlsZSBpcyBvcGVuLCBmYWlscyBpZiBpdCBpcwot ICAgICAgICAgIG5vdCBvcGVuLiBUeXBlIElGIE9QRU4gPyBmb3IgYSBjb21wbGV0ZSBsaXN0IG9m IGZpbGVzIHRoYXQgY2FuCi0gICAgICAgICAgYmUgY2hlY2tlZCAoYWxsIHRoZSBmaWxlcyB0aGF0 IGNhbiBiZSBvcGVuZWQgd2l0aCB0aGUgT1BFTiBvcgotICAgICAgICAgIExPRyBjb21tYW5kcyku Ci0KLSAgIElGIFFVSUVUIGNvbW1hbmQKLSAgICAgICAgICBFeGVjdXRlcyB0aGUgY29tbWFuZCBp ZiBTRVQgUVVJRVQgaXMgT04sIGFuZCBkb2VzIG5vdCBleGVjdXRlIGl0Ci0gICAgICAgICAgaWYg U0VUIFFVSUVUIGlzIE9GRi4gRXhhbXBsZTogSUYgTk9UIFFVSUVUIEVDSE8geyBUaGlzIGlzIGEK LSAgICAgICAgICBtZXNzYWdlLn0uCi0KLSAgIElGIFJFQURBQkxFIG5hbWUKLSAgICAgICAgICBT dWNjZWVkcyBpZiBuYW1lIGlzIHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGZpbGUgb3IgZGlyZWN0 b3J5Ci0gICAgICAgICAgdGhhdCBpcyByZWFkYWJsZS4KLQotICAgSUYgV1JJVEVBQkxFIG5hbWUK LSAgICAgICAgICBTdWNjZWVkcyBpZiBuYW1lIGlzIHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGZp bGUgb3IgZGlyZWN0b3J5Ci0gICAgICAgICAgdGhhdCBpcyB3cml0YWJsZSwgZS5nLjoKLQotICBp ZiBub3Qgd3JpdGVhYmxlIFx2KGxvY2tkaXIpIGVjaG8gUGxlYXNlIHJlYWQgaW5zdGFsbGF0aW9u IGluc3RydWN0aW9ucyEKLQotICAgSUYgRkxBRyBjb21tYW5kCi0gICAgICAgICAgVGhpcyB0ZXN0 cyBhIHVzZXItc2V0dGFibGUgY29uZGl0aW9uLCB3aGljaCBjYW4gbWVhbiBhbnl0aGluZwotICAg ICAgICAgIHlvdSBsaWtlLiBTRVQgRkxBRyBPTiBjYXVzZXMgc3Vic2VxdWVudCBJRiBGTEFHIGNv bW1hbmRzIHRvCi0gICAgICAgICAgc3VjY2VlZDsgU0VUIEZMQUcgT0ZGIGNhdXNlcyB0aGVtIHRv IGZhaWwuIE9uZSB3YXkgdG8gdXNlIGl0Ci0gICAgICAgICAgd291bGQgYmUgZm9yIGRlYnVnZ2lu ZyB5b3VyIHNjcmlwdHM7IHByZWNlZGUgYW55IGRlYnVnZ2luZwotICAgICAgICAgIHN0YXRlbWVu dHMgd2l0aCBJRiBGTEFHLiBUaGVuIFNFVCBGTEFHIG9uIHRvIGRlYnVnIHlvdXIgc2NyaXB0LAot ICAgICAgICAgIFNFVCBGTEFHIE9GRiB0byBydW4gaXQgd2l0aG91dCBkZWJ1Z2dpbmcuIEFub3Ro ZXIgY29tbW9uIHVzZSBpcwotICAgICAgICAgIGZvciBjYXVzaW5nIGFuIGlubmVyIGxvb3AgdG8g Y2F1c2UgYW4gb3V0ZXIgbG9vcCB0byBleGl0LgotCi0gICBJRiBDLUtFUk1JVCBjb21tYW5kCi0g ICAgICAgICAgQy1LZXJtaXQsIGJ1dCBub3QgS2VybWl0IDk1IG9yIE1TLURPUyBLZXJtaXQsIGV4 ZWN1dGVzIHRoZQotICAgICAgICAgIGNvbW1hbmQuCi0KLSAgIElGIEstOTUgY29tbWFuZAotICAg ICAgICAgIEtlcm1pdCA5NSwgYnV0IG5vdCBDLUtlcm1pdCBvciBNUy1ET1MgS2VybWl0LCBleGVj dXRlcyB0aGUKLSAgICAgICAgICBjb21tYW5kLgotCi0gICBJRiBNUy1LRVJNSVQgY29tbWFuZAot ICAgICAgICAgIE1TLURPUyBLZXJtaXQsIGJ1dCBub3QgQy1LZXJtaXQgb3IgS2VybWl0IDk1LCBl eGVjdXRlcyB0aGUKLSAgICAgICAgICBjb21tYW5kLgotCi0gIDcuNS4gVXNpbmcgTW9yZSB0aGFu IFRlbiBNYWNybyBBcmd1bWVudHMKLQotICAgVGhlIFx2KGFyZ2MpIHZhcmlhYmxlIG5vdyBnaXZl cyB0aGUgYWN0dWFsIG51bWJlciBvZiBhcmd1bWVudHMsIGV2ZW4gaWYKLSAgIHRoZSBudW1iZXIg aXMgZ3JlYXRlciB0aGFuIDk6Ci0KLSAgQy1LZXJtaXQ+IGRlZmluZSB4eCBlY2hvIFx2KGFyZ2Mp Ci0gIEMtS2VybWl0PiB4eCBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgciBzIHQg dSB2IHcgeCB5IHoKLSAgMjcKLQotICAgUmVtZW1iZXIgdGhhdCBcdihhcmdjKSBpbmNsdWRlcyB0 aGUgbmFtZSBvZiB0aGUgbWFjcm8gaXRzZWxmLCBzbyBpdCBpcwotICAgYWx3YXlzIGF0IGxlYXN0 IDEsIGFuZCBpcyBhbHdheXMgMSBncmVhdGVyIHRoYW4gdGhlIGFjdHVhbCBudW1iZXIgb2YKLSAg IGFyZ3VtZW50cy4gQXMgaW4gdmVyc2lvbnMgNi4wIGFuZCBlYXJsaWVyLCBpZiBtb3JlIHRoYW4g OSBhcmd1bWVudHMgYXJlCi0gICBnaXZlbiwgb25seSB0aGUgZmlyc3QgbmluZSBhcmUgYXNzaWdu ZWQgdG8gdGhlIHZhcmlhYmxlcyBcJTEuLlwlOS4KLQotICAgVGhlIFwmX1tdIGFycmF5LCBkaXNj dXNzZWQgb24gcGFnZSAzNTMgb2YgWzU5NF1Vc2luZyBDLUtlcm1pdCwgMm5kIGVkLAotICAgbm93 IGhvbGRzIGFsbCB0aGUgYXJndW1lbnRzLCB1cCB0byBzb21lIGltcGxlbWVudGF0aW9uLWRlcGVu ZGVudCBsaW1pdAotICAgKDY0IG9yIGdyZWF0ZXIpLCByYXRoZXIgdGhhbiBvbmx5IHRoZSBmaXJz dCA5LiBUbyBpbGx1c3RyYXRlOiB0aGUKLSAgIGZvbGxvd2luZyBtYWNybyB0ZWxscyB0aGUgbnVt YmVyIG9mIGFyZ3VtZW50cyBpdCB3YXMgY2FsbGVkIHdpdGggYW5kCi0gICB0aGVuIHByaW50cyB0 aGVtOgotCi0gIGRlZmluZSBzaG93X2FsbF9hcmdzIHsKLSAgICAgIGxvY2FsIFwlaQotICAgICAg ZWNobyBcJl9bMF0gLSBOdW1iZXIgb2YgYXJndW1lbnRzOiBcZmV2YWwoXHYoYXJnYyktMSkKLSAg ICAgIGZvciBcJWkgMSBcdihhcmdjKS0xIDEgeyBlY2hvIFxmbHBhZChcJWksMykuICJcJl9bXCVp XSIgfQotICB9Ci0KLSAgIFdpdGhpbiBhIG1hY3JvIFwmX1swXSwgbGlrZSBcJTAsIGNvbnRhaW5z IHRoZSBuYW1lIG9mIHRoZSBtYWNyby4KLQotICAgQXQgdG9wIGxldmVsLCB0aGUgXCZfW10gYXJy YXkgaXMgZmlsbGVkIGFzIGZvbGxvd3M6Ci0KLSAgICAgKiBJZiB0aGUgZmlyc3QgYXJndW1lbnQg b24gdGhlIEMtS2VybWl0IGNvbW1hbmQgbGluZSB3YXMgYSBmaWxlbmFtZSwKLSAgICAgICBvciBD LUtlcm1pdCB3YXMgaW52b2tlZCBmcm9tIGEgIktlcmJhbmciIHNjcmlwdCAoWzU5NV1TZWN0aW9u Ci0gICAgICAgNy4xOSksIGVsZW1lbnQgMCBjb250YWlucyB0aGUgZmlsZW5hbWUsIGFuZCBlbGVt ZW50cyAxIHRocm91Z2gKLSAgICAgICBcdihhcmdjKS0xIGhvbGQgdGhlIHJlbWFpbmluZyBjb21t YW5kLWxpbmUgYXJndW1lbnRzLgotICAgICAqIE90aGVyd2lzZSB0aGUgcHJvZ3JhbSBuYW1lIGdv ZXMgaW4gZWxlbWVudCAwLCBhbmQgZWxlbWVudHMgMQotICAgICAgIHRocm91Z2ggXHYoYXJnYykt MSBob2xkIGFueSBhcmd1bWVudHMgdGhhdCB3ZXJlIGluY2x1ZGVkIGFmdGVyICItLSIKLSAgICAg ICBvciAiPSIKLQotICAgVGhlIG5ldyBcJSogdmFyaWFibGUsIHdoZW4gdXNlZCB3aXRoaW4gYSBt YWNybywgaXMgcmVwbGFjZWQgYnkgdGhlIHRleHQKLSAgIHRoYXQgZm9sbG93ZWQgdGhlIG1hY3Jv IG5hbWUgaW4gdGhlIG1hY3JvIGludm9jYXRpb24uIElmIG5vIGFyZ3VtZW50cwotICAgd2VyZSBn aXZlbiwgXCUqIGlzIHJlcGxhY2VkIGJ5IHRoZSBlbXB0eSBzdHJpbmcuIEV4YW1wbGVzOgotCi0g IEMtS2VybWl0PiBkZWZpbmUgeHggZWNobyBbXCUqXQotICBDLUtlcm1pdD4gZGVmaW5lIFwlYSBv b2ZhCi0gIEMtS2VybWl0PiB4eAotICBbXQotICBDLUtlcm1pdD4geHggXCVhCi0gIFtvb2ZhXQot ICBDLUtlcm1pdD4geHggYQotICBbYV0KLSAgQy1LZXJtaXQ+IHh4IGEgYgotICBbYSBiXQotICBD LUtlcm1pdD4geHggYSBiIGMKLSAgW2EgYiBjXQotICBDLUtlcm1pdD4geHggYSBiIGMgZCBlIGYg ZyBoIGkgaiBrIGwgbSBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6Ci0gIFthIGIgYyBkIGUgZiBn IGggaSBqIGsgbCBtIG4gbyBwIHEgciBzIHQgdSB2IHcgeCB5IHpdCi0KLSAgIE5vdGUgdGhhdCBc JSogY2FuIG5vdCBiZSB1c2VkIGF0IHRvcCBsZXZlbCwgc2luY2UgS2VybWl0IGRvZXMgbm90IGhh dmUKLSAgIGFjY2VzcyB0byB0aGUgcmF3IGNvbW1hbmQgbGluZSAob25seSB0byBpdHMgZWxlbWVu dHMgc2VwYXJhdGVseSwgYWZ0ZXIKLSAgIHRoZXkgaGF2ZSBiZWVuIHByb2Nlc3NlZCBieSB0aGUg c2hlbGwgYW5kIHRoZSBDIGxpYnJhcnkpLgotCi0gICBDLUtlcm1pdCA3LjAgYWxzbyBhZGRzIGEg U0hJRlQgY29tbWFuZDoKLQotICAgU0hJRlQgWyBudW1iZXIgXQotICAgICAgICAgIFNoaWZ0cyB0 aGUgbWFjcm8gYXJndW1lbnRzIChleGNlcHQgYXJndW1lbnQgMCkgdGhlIGdpdmVuIG51bWJlcgot ICAgICAgICAgIG9mIHBsYWNlcyB0byB0aGUgbGVmdCBhbmQgYWRqdXN0cyBcdihhcmdjKSBhY2Nv cmRpbmdseS4gVGhlCi0gICAgICAgICAgZGVmYXVsdCBudW1iZXIgaXMgMS4KLQotICAgVG8gaWxs dXN0cmF0ZSwgc3VwcG9zZSBtYWNybyBYWFggaXMgaW52b2tlZCBhcyBmb2xsb3dzOgotCi0gIHh4 eCBhcmcxIGFyZzIgYXJnMwotCi0gICBUaGVuIGluc2lkZSBYWFgsIFwlMSBpcyAiYXJnMSIsIFwl MiBpcyAiYXJnMiIsIGFuZCBcJTMgaXMgImFyZzMiLiBBZnRlcgotICAgYSBTSElGVCBjb21tYW5k IGlzIGdpdmVuIGluc2lkZSBYWFgsIHRoZW4gXCUxIGlzICJhcmcyIiwgXCUyIGlzICJhcmczIiwK LSAgIGFuZCBcJTMgaXMgZW1wdHkuIFwlMCAodGhlIG5hbWUgb2YgdGhlIG1hY3JvKSByZW1haW5z IHVuY2hhbmdlZC4KLQotICAgSWYgbW9yZSB0aGFuIDkgYXJndW1lbnRzIHdlcmUgZ2l2ZW4sIHRo ZW4gYXJndW1lbnRzIGFyZSBzaGlmdGVkIGludG8KLSAgIHRoZSBcJTEuLjkgdmFyaWFibGVzIGZy b20gdGhlIGFyZ3VtZW50IHZlY3RvciBhcnJheS4KLQotICAgQXQgdG9wIGxldmVsLCB0aGUgU0hJ RlQgY29tbWFuZCBvcGVyYXRlcyBvbiB0aGUgXCZfW10gYXJyYXkgYW5kIFwlMS4uOQotICAgdmFy aWFibGVzOyB0aGUgXCZAW10gYXJyYXkgaXMgbm90IGFmZmVjdGVkLiBTZWUgWzU5Nl1TZWN0aW9u IDcuMTYgZm9yCi0gICBkZXRhaWxzLgotCi0gICBUaGUgXCUqIHZhcmlhYmxlIGlzIG5vdCBhZmZl Y3RlZCBieSB0aGUgU0hJRlQgY29tbWFuZC4KLQotICA3LjYuIENsYXJpZmljYXRpb24gb2YgRnVu Y3Rpb24gQ2FsbCBTeW50YXgKLQotICAgU3BhY2VzIGFyZSBub3JtYWxseSBzdHJpcHBlZCBmcm9t IHRoZSBmcm9udCBhbmQgYmFjayBvZiBlYWNoIGZ1bmN0aW9uCi0gICBhcmd1bWVudDsgdG8gcHJl dmVudCB0aGlzIGVuY2xvc2UgdGhlIGFyZ3VtZW50IGluIGJyYWNlczoKLQotICBcZnNwbGl0KFwl YSwmYSx7IH0pCi0KLSAgIEhvd2V2ZXIsIGZ1bmN0aW9uIGNhbGxzIHRoYXQgY29udGFpbiBzcGFj ZXMgY2FuIG1ha2UgdHJvdWJsZSB3aGVuIHRoZQotICAgZnVuY3Rpb24gaXMgdG8gYmUgdXNlZCBp biBhICJ3b3JkIiBmaWVsZCwgc2luY2Ugc3BhY2Ugc2VwYXJhdGVzIHdvcmRzLgotICAgRm9yIGV4 YW1wbGU6Ci0KLSAgZm9yIFwlaSAxIFxmc3BsaXQoXCVhLCZhLHsgfSkgMSB7Ci0gICAgZWNobyBc JWkuICJcJmFbXCVpXSIKLSAgfQotCi0gICBJbiBtb3N0IGNhc2VzLCB0aGUgdHJvdWJsZSBjYW4g YmUgYXZlcnRlZCBieSBlbmNsb3NpbmcgdGhlIGZ1bmN0aW9uCi0gICByZWZlcmVuY2UgaW4gYnJh Y2VzOgotCi0gIGZvciBcJWkgMSB7XGZzcGxpdChcJWEsJmEseyB9KX0gMSB7Ci0gICAgZWNobyBc JWkuICJcJmFbXCVpXSIKLSAgfQotCi0gICBvciBieSByZXBsYWNpbmcgc3BhY2VzIHdpdGggXDMy ICh0aGUgQVNDSUkgY29kZSBmb3Igc3BhY2UpOgotCi0gIGZvciBcJWkgMSBcZnNwbGl0KFwlYSwm YSxcMzIpIDEgewotICAgIGVjaG8gXCVpLiAiXCZhW1wlaV0iCi0gIH0KLQotICAgQnJhY2VzIGFy ZSBhbHNvIHVzZWQgaW4gZnVuY3Rpb24gY2FsbHMgdG8gaW5kaWNhdGUgZ3JvdXBpbmcuIEZvcgot ICAgZXhhbXBsZToKLQotICBcZnN1YnN0cmluZyhhYmNkLDIsMikgPSAiYmMiCi0KLSAgIEJ1dCBz dXBwb3NlICJhYmNkIiBuZWVkZWQgdG8gY29udGFpbiBhIGNvbW1hOgotCi0gIFxmc3Vic3RyaW5n KGFiLGNkLDIsMikKLQotICAgVGhpcyB3b3VsZCBjYXVzZSBhbiBlcnJvciwgc2luY2UgImNkIiBh cHBlYXJzIHRvIGJlIHRoZSBzZWNvbmQKLSAgIGFyZ3VtZW50LCB3aGVuIHJlYWxseSB5b3Ugd2Fu dCB0aGUgZmlyc3QgIjIiIHRvIGJlIHRoZSBzZWNvbmQgYXJndW1lbnQuCi0gICBCcmFjZXMgdG8g dGhlIHJlc2N1ZToKLQotICBcZnN1YnN0cmluZyh7YWIsY2R9LDIsMikgPSAiYiwiCi0KLSAgIFNp bWlsYXJseSwgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzIGFyZSBzdHJpcHBlZCBmcm9tIGVh Y2ggYXJndW1lbnQsCi0gICBzbzoKLQotICBcZnN1YnN0cmluZyggYWJjZCAsMiwyKSA9ICJiYyIK LQotICAgYnV0IGJyYWNlcyBwcmVzZXJ2ZSB0aGVtOgotCi0gIFxmc3Vic3RyaW5nKHsgYWJjZCB9 LDIsMikgPSAiYWIiCi0KLSAgIEdpdmVuIHRoZXNlIHNwZWNpYWwgdXNlcyBmb3IgYnJhY2VzLCB0 aGVyZSBpcyBubyB3YXkgdG8gcGFzcyBsaXRlcmFsCi0gICBicmFjZXMgdG8gdGhlIGZ1bmN0aW9u IGl0c2VsZi4gRm9yIGV4YW1wbGU6Ci0KLSAgXGZzdWJzdHJpbmcoYWJ7Y2QsMiwyKQotCi0gICBj YXVzZXMgYW4gZXJyb3IuCi0KLSAgIFNvIGlmIHlvdSBuZWVkIGEgZnVuY3Rpb24gdG8gaW5jbHVk ZSBicmFjZXMsIGRlZmluZSBhIHZhcmlhYmxlCi0gICBjb250YWluaW5nIHRoZSBzdHJpbmcgdGhh dCBoYXMgYnJhY2VzLiBFeGFtcGxlOgotCi0gIGRlZmluZSBcJWEgYWJ7Y2QKLSAgXGZzdWJzdHJp bmcoXCVhLDIsMikgPSAiYnsiCi0KLSAgIElmIHRoZSBzdHJpbmcgaXMgdG8gc3RhcnQgd2l0aCBh IGxlYWRpbmcgYnJhY2UgYW5kIGVuZCB3aXRoIGEgY2xvc2luZwotICAgYnJhY2UsIHRoZW4gZG91 YmxlIGJyYWNlcyBtdXN0IGFwcGVhciBhcm91bmQgdGhlIHN0cmluZyAod2hpY2ggaXRzZWxmCi0g ICBpcyBlbmNsb3NlZCBpbiBicmFjZXMpOgotCi0gIGRlZmluZSBcJWEge3t7Zm9vfX19Ci0gIFxm c3Vic3RyaW5nKFwlYSkgPSAie2Zvb30iCi0KLSAgIFRoaXMgYWxzbyB3b3JrcyBmb3IgYW55IG90 aGVyIGtpbmQgb2Ygc3RyaW5nOgotCi0gIGRlZmluZSBcJWEge3thYntjZH19Ci0gIGVjaG8gXGZz dWJzdHJpbmcoXCVhKSA9ICJhYntjZCIKLQotICA3LjcuIEF1dG9kb3dubG9hZCBkdXJpbmcgSU5Q VVQgQ29tbWFuZCBFeGVjdXRpb24KLQotICAgQXMgb2YgNi4xIC8gMS4xLjEyLCBDLUtlcm1pdCBj YW4gYmUgdG9sZCB0byBsb29rIGZvciBpbmNvbWluZyBLZXJtaXQKLSAgIChvciBabW9kZW0pIHBh Y2tldHMgZHVyaW5nIGV4ZWN1dGlvbiBvZiBhbiBJTlBVVCBjb21tYW5kLiBCeSBkZWZhdWx0Ci0g ICAoZm9yIGNvbnNpc3RlbmN5IHdpdGggZWFybGllciByZWxlYXNlcyksIHRoaXMgaXMgbm90IGRv bmUuIFlvdSBjYW4KLSAgIGVuYWJsZSB0aGlzIGZlYXR1cmUgd2l0aDoKLQotICBTRVQgSU5QVVQg QVVUT0RPV05MT0FEIE9OCi0KLSAgIChhbmQgZGlzYWJsZSBpdCBhZ2FpbiB3aXRoIE9GRi4pCi0K LSAgIE9uZSBwb3NzaWJsZSB1c2UgZm9yIHRoaXMgZmVhdHVyZSBpcyBhcyBhIHNlcnZlciBtb2Rl IHdpdGggYSB0aW1lCi0gICBsaW1pdDoKLQotICBJTlBVVCAzNjAwIHNlY3JldC1zdHJpbmctdG8t ZW5kLXRoZS1JTlBVVC1jb21tYW5kCi0KLSAgIEluIHRoaXMgZXhhbXBsZSwgYW55IEdFVCwgU0VO RCwgb3IgUkVNT1RFIGNvbW1hbmRzIHJlY2VpdmVkIHdpdGhpbiBvbmUKLSAgIGhvdXIgKDM2MDAg c2Vjb25kcykgb2Ygd2hlbiB0aGUgSU5QVVQgY29tbWFuZCB3YXMgaXNzdWVkIHdpbGwgYmUKLSAg IGV4ZWN1dGVkLiBIZXJlJ3MgYW5vdGhlciBleGFtcGxlLCBpbiB3aGljaCB3ZSB3YW50IHRvIHN0 YXkgb3BlbiB1bnRpbAotICAgMTE6MzBwbSwgb3IgdW50aWwgaW50ZXJydXB0ZWQgYnkgc2V2ZW4g Y29uc2VjdXRpdmUgQ3RybC1DIChcMykKLSAgIGNoYXJhY3RlcnM6Ci0KLSAgSU5QVVQgMjM6MzA6 MDAgXDNcM1wzXDNcM1wzXDMKLQotICAgVGhlIElOUFVUIEFVVE9ET1dOTE9BRCBzZXR0aW5nIGlz IGRpc3BsYXllZCBieSBTSE9XIFNDUklQVFMgb3IgU0hPVwotICAgSU5QVVQuCi0KLSAgNy44LiBC dWlsdC1pbiBIZWxwIGZvciBGdW5jdGlvbnMuCi0KLSAgIEJlZ2lubmluZyBpbiBDLUtlcm1pdCA3 LjAsIHlvdSBtYXkgb2J0YWluIGEgZGVzY3JpcHRpb24gb2YgdGhlIGNhbGxpbmcKLSAgIGNvbnZl bnRpb25zIGFuZCByZXR1cm4gdmFsdWVzIG9mIGFueSBidWlsdC1pbiBmdW5jdGlvbiwgc3VjaCBh cwotICAgXGZzdWJzdHJpbmcoKSwgd2l0aCB0aGUgbmV3IEhFTFAgRlVOQ1RJT04gY29tbWFuZDsg Z2l2ZSB0aGUgZnVuY3Rpb24ncwotICAgbmFtZSB3aXRob3V0IHRoZSBsZWFkaW5nICJcZiIsIGUu Zy4gImhlbHAgZnVuYyBzdWJzdHJpbmciLiBZb3UgY2FuIHVzZQotICAgPywgY29tcGxldGlvbiwg YW5kIGFiYnJldmlhdGlvbiBpbiB0aGUgbm9ybWFsIG1hbm5lci4KLQotICA3LjkuIFZhcmlhYmxl IEFzc2lnbm1lbnRzCi0KLSAgICA3LjkuMS4gQXNzaWdubWVudCBPcGVyYXRvcnMKLQotICAgUHJv Z3JhbW1lcnMgYWNjdXN0b21lZCB0byBsYW5ndWFnZXMgc3VjaCBhcyBDIG9yIEZvcnRyYW4gbWln aHQgZmluZAotICAgS2VybWl0J3MgbWV0aG9kIG9mIGFzc2lnbmluZyB2YWx1ZXMgdG8gdmFyaWFi bGVzIHVubmF0dXJhbCBvciBhd2t3YXJkLgotICAgQmVnaW5uaW5nIGluIEMtS2VybWl0IDcuMCwg eW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBhbHRlcm5hdGl2ZQotICAgbm90YXRpb246Ci0KLSAu bmFtZSA9IHZhbHVlICAgIGlzIGVxdWl2YWxlbnQgdG8gICBERUZJTkUgbmFtZSB2YWx1ZQotIC5u YW1lIDo9IHZhbHVlICAgaXMgZXF1aXZhbGVudCB0byAgIEFTU0lHTiBuYW1lIHZhbHVlCi0gLm5h bWUgOjo9IHZhbHVlICBpcyBlcXVpdmFsZW50IHRvICAgQVNTSUdOIG5hbWUgXGZldmFsKHZhbHVl KQotCi0gICBXaGVuIHRoZSBjb21tYW5kIGJlZ2lucyB3aXRoIGEgcGVyaW9kICguKSwgdGhpcyBp bmRpY2F0ZXMgYW4KLSAgIGFzc2lnbm1lbnQuIFRoZSBuYW1lIGNhbiBiZSBhIG1hY3JvIG5hbWUs IGEgXCV7ZGlnaXQsbGV0dGVyfSB2YXJpYWJsZSwKLSAgIG9yIGFuIGFycmF5IGVsZW1lbnQuIFRo ZXJlIGNhbiBiZSBzcGFjZShzKSBiZXR3ZWVuICIuIiBhbmQgdGhlIG5hbWUuCi0gICBFeGFtcGxl czoKLQotICAuXCVhID0gVGhpcyBpcyBhIHN0cmluZyAgOyBTYW1lIGFzICJkZWZpbmUgXCVhIFRo aXMgaXMgYSBzdHJpbmciCi0gIGVjaG8gXCVhCi0gIFRoaXMgaXMgYSBzdHJpbmcKLQotICAueHh4 ID0gXCVhICAgICAgICAgICAgICAgOyBTYW1lIGFzICJkZWZpbmUgeHh4IFwlYSIKLSAgZWNobyBc bSh4eHgpCi0gIFwlYQotCi0gIC54eHggOj0gXCVhICAgICAgICAgICAgICA7IFNhbWUgYXMgImFz c2lnbiB4eHggXCVhIgotICBlY2hvIFxtKHh4eCkKLSAgVGhpcyBpcyBhIHN0cmluZwotCi0gIGRl Y2xhcmUgXCZhWzJdICAgICAgICAgICA7IFVzZSB3aXRoIGFycmF5cy4uLgotICBkZWZpbmUgXCVp IDIKLSAgLlwmYVsxXSA9IGZpcnN0Ci0gIC5cJmFbXCVpXSA9IHNlY29uZAotCi0gICBUaGUgZm9s bG93aW5nIHNlcXVlbmNlIGlsbHVzdHJhdGVzIHRoZSBkaWZmZXJlbmNlcyBhbW9uZyB0aHJlZSBs ZXZlbHMKLSAgIG9mIGV2YWx1YXRpb246Ci0KLSAgLlwleCA9IDIgICAgICAgICAgOyBEZWZpbmUg YSB2YXJpYWJsZSB0byBoYXZlIGEgbnVtZXJpYyB2YWx1ZQotICAuXCV5ID0gKDMgKyBcJXgpICA7 IERlZmluZSBhbm90aGVyIHZhcmlhYmxlIGFzIGFuIGFyaXRobWV0aWMgZXhwcmVzc2lvbgotCi0g IC54eHggPSA0ICogXCV5ICAgIDsgIj0iIHNpbXBseSBjb3BpZXMgdGhlIHJpZ2h0LWhhbmQgc2lk ZS4KLSAgZWNobyBcbSh4eHgpCi0gIDQgKiBcJXkKLQotICAueHh4IDo9IDQgKiBcJXkgICA7ICI6 PSIgZXZhbHVhdGVzIHRoZSB2YXJpYWJsZXMgZmlyc3QsIHRoZW4gY29waWVzLgotICBlY2hvIFxt KHh4eCkKLSAgNCAqICgzICsgMikKLQotICAueHh4IDo6PSA0ICogXCV5ICA7ICI6Oj0iIGV2YWx1 YXRlcyB0aGUgZXhwcmVzc2lvbiwgdGhlbiBjb3BpZXMuCi0gIGVjaG8gXG0oeHh4KQotICAyMAot Ci0gICBZb3UgY2FuIGFsc28gdXNlIHRoaXMgc3ludGF4IHRvIGNsZWFyICh1bmRlZmluZSkgYSB2 YXJpYWJsZToKLQotICAuXCVhID0gb29mYSAgICAgICA7IERlZmluZSB0aGUgdmFyaWFibGUKLSAg ZWNobyAiXCVhIgotICAib29mYSIKLSAgLlwlYSAgICAgICAgICAgICAgOyBDbGVhciB0aGUgdmFy aWFibGUKLSAgZWNobyAiXCVhIgotICAiIgotCi0gICBFeHRyYSBjcmVkaXQ6IENhbiB5b3UgZ3Vl c3Mgd2hhdCBoYXBwZW5zIGJlbG93IHdoZW4gdGhlIGZpbGUgImFiYyIgZG9lcwotICAgbm90IGV4 aXN0PwotCi0gIGZvcGVuIC9yZWFkIFwlYyBhYmMKLSAgaWYgZmFpbCAuLi4KLQotICAgIDcuOS4y LiBOZXcgQXNzaWdubWVudCBDb21tYW5kcwotCi0gICBSZWNhbGwgdGhlIERFRklORSBhbmQgQVNT SUdOIGNvbW1hbmRzLCBhbmQgdGhlaXIgaGlkZGVuIGNvdW50ZXJwYXJ0cywKLSAgIF9ERUZJTkUg YW5kIF9BU1NJR04uIFRoZSBmb3JtZXIgdGFrZSB0aGUgdmFyaWFibGUgbmFtZSBsaXRlcmFsbHks IHRoZQotICAgbGF0dGVyIGV2YWx1YXRlIHRoZSB2YXJpYWJsZS1uYW1lIGZpZWxkIHRvIGZvcm0g dGhlIHZhcmlhYmxlIG5hbWUKLSAgIGR5bmFtaWNhbGx5LiBFeGFtcGxlczoKLQotICBERUZJTkUg XCV4IGZvbyAgICA7IFNldHMgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBcJXggdG8gImZvbyIu Ci0gIERFRklORSBcJWEgXCV4ICAgIDsgU2V0cyB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIFwl YSB0byAiXCV4Ii4KLSAgX0RFRklORSB4X1wlYSBcJXggOyBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUg dmFyaWFibGUgeF9mb28gdG8gIlwleCIuCi0gIEFTU0lHTiBcJWEgXCV4ICAgIDsgU2V0cyB0aGUg dmFsdWUgb2YgdGhlIHZhcmlhYmxlIFwlYSB0byB0aGUgImZvbyIuCi0gIF9BU1NJR04geF9cJWEg XCV4IDsgU2V0cyB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIHhfZm9vIHRvICJmb28iLgotCi0g ICBUaGlzIGNvbmNlcHQgaGFzIGJlZW4gY2FycmllZCBvdmVyIHRvIHRoZSByZW1haW5pbmcgdmFy aWFibGUtYXNzaWdubWVudAotICAgY29tbWFuZHM6IEVWQUxVQVRFLCBJTkNSRU1FTlQsIGFuZCBE RUNSRU1FTlQ6Ci0KLSAgIEVWQUxVQVRFIHZhcmlhYmxlbmFtZSBleHByZXNzaW9uCi0gICAgICAg ICAgRXZhbHVhdGVzIHRoZSBhcml0aG1ldGljIGV4cHJlc3Npb24gYW5kIGFzc2lnbnMgaXRzIHZh bHVlIHRvIHRoZQotICAgICAgICAgIHZhcmlhYmxlIHdob3NlIG5hbWUgaXMgZ2l2ZW4uIEV4YW1w bGU6ICJldmFsIFwlYSAxKzEiIGFzc2lnbnMKLSAgICAgICAgICAiMiIgdG8gXCVhLgotCi0gICBf RVZBTFVBVEUgbWV0YW5hbWUgZXhwcmVzc2lvbgotICAgICAgICAgIEV2YWx1YXRlcyB0aGUgYXJp dGhtZXRpYyBleHByZXNzaW9uIGFuZCBhc3NpZ25zIGl0cyB2YWx1ZSB0byB0aGUKLSAgICAgICAg ICB2YXJpYWJsZSB3aG9zZSBuYW1lIGlzIGNvbXB1dGVkIGZyb20gdGhlIGdpdmVuIG1ldGFuYW1l LgotICAgICAgICAgIEV4YW1wbGU6ICJldmFsIGZvbzxcJWE+OjpcJTEgXCUyICogKFwlMyArIFwl NCkiIGFzc2lnbnMgdGhlCi0gICAgICAgICAgdmFsdWUgb2YgIlwlMiAqIChcJTMgKyBcJTQpIiB0 byB0aGUgdmFyaWFibGUgd2hvc2UgbmFtZSBpcwotICAgICAgICAgIGNvbXB1dGVkIGZyb20gImZv bzxcJWE+OjpcJTEiLgotCi0gICBJTkNSRU1FTlQgdmFyaWFibGVuYW1lIFsgZXhwcmVzc2lvbiBd Ci0gICAgICAgICAgRXZhbHVhdGVzIHRoZSBhcml0aG1ldGljIGV4cHJlc3Npb24gYW5kIGFkZHMg aXRzIHZhbHVlIHRvIHRoZQotICAgICAgICAgIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSB3aG9zZSBu YW1lIGlzIGdpdmVuLiBFeGFtcGxlOiAiaW5jcmVtZW50Ci0gICAgICAgICAgXCVhIi4KLQotICAg X0lOQ1JFTUVOVCBtZXRhbmFtZSBbIGV4cHJlc3Npb24gXQotICAgICAgICAgIEV2YWx1YXRlcyB0 aGUgYXJpdGhtZXRpYyBleHByZXNzaW9uIGFuZCBhZGRzIGl0cyB2YWx1ZSB0byB0aGUKLSAgICAg ICAgICB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgd2hvc2UgbmFtZSBpcyBjb21wdXRlZCBmcm9tIHRo ZSBnaXZlbgotICAgICAgICAgIG1ldGFuYW1lLiBFeGFtcGxlOiAiX2luY3JlbWVudCBXb3Jkczo6 XCUxLmNvdW50W1wlMl0iLgotCi0gICBERUNSRU1FTlQgdmFyaWFibGVuYW1lIFsgZXhwcmVzc2lv biBdCi0gICAgICAgICAgRXZhbHVhdGVzIHRoZSBhcml0aG1ldGljIGV4cHJlc3Npb24gYW5kIHN1 YnRyYWN0cyBpdHMgdmFsdWUgZnJvbQotICAgICAgICAgIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFi bGUgd2hvc2UgbmFtZSBpcyBnaXZlbi4KLQotICAgX0RFQ1JFTUVOVCBtZXRhbmFtZSBbIGV4cHJl c3Npb24gXQotICAgICAgICAgIEV2YWx1YXRlcyB0aGUgYXJpdGhtZXRpYyBleHByZXNzaW9uIGFu ZCBzdWJ0cmFjdHMgaXRzIHZhbHVlIGZyb20KLSAgICAgICAgICB0aGUgdmFsdWUgb2YgdGhlIHZh cmlhYmxlIHdob3NlIG5hbWUgaXMgY29tcHV0ZWQgZnJvbSB0aGUgZ2l2ZW4KLSAgICAgICAgICBt ZXRhbmFtZS4KLQotICAgV0FSTklORzogVGhlIHN5bnRheCBvZiB0aGUgRVZBTFVBVEUgY29tbWFu ZCBoYXMgY2hhbmdlZCBzaW5jZSBDLUtlcm1pdAotICAgNi4wIGFuZCBLOTUgMS4xLjE3LiBQcmV2 aW91c2x5LCBpdCBkaWQgbm90IGluY2x1ZGUgYSB2YXJpYWJsZSBuYW1lLAotICAgb25seSBhbiBl eHByZXNzaW9uLiBUbyByZXN0b3JlIHRoZSBvbGQgYmVoYXZpb3IsIHVzZSBTRVQgRVZBTFVBVEUg T0xELgotICAgVG8gcmV0dXJuIHRvIHRoZSBuZXcgYmVoYXZpb3IgYWZ0ZXIgcmVzdG9yaW5nIHRo ZSBvbGQgYmVoYXZpb3IsIHVzZSBTRVQKLSAgIEVWQUxVQVRFIE5FVy4KLQotICAgTk9URTogVGhl cmUgYXJlIG5vIGFuYWxvZ3MgdG8gdGhlICJfIiBjb21tYW5kcyBmb3IgdGhlIG9wZXJhdG9ycwot ICAgZGVzY3JpYmVkIGluIFs1OTddU2VjdGlvbiA3LjkuMTsgdGhvc2Ugb3BlcmF0b3JzIGNhbiBu b3QgYmUgdXNlZCB0bwotICAgYXNzaWduIHZhbHVlcyB0byB2YXJpYWJsZXMgd2hvc2UgbmFtZXMg bXVzdCBiZSBjb21wdXRlZC4KLQotICA3LjEwLiBBcnJheXMKLQotICAgQy1LZXJtaXQgNy4wIGFk ZHMgbG90cyBvZiBuZXcgYXJyYXktcmVsYXRlZCBmZWF0dXJlcywgYW5kIGdyb3VwcyB0aGVtCi0g ICB0b2dldGhlciB1bmRlciB0aGUgTkVXIEFSUkFZIGNvbW1hbmQ6Ci0KLSAgIEFSUkFZIHsgQ0xF QVIsIENPUFksIERFQ0xBUkUsIERFU1RST1ksIFJFU0laRSwgU0hPVywgU09SVCB9Ci0KLSAgIElu IGVhY2ggb2YgdGhlIEFSUkFZIGNvbW1hbmRzLCB3aGVyZXZlciBhbiBhcnJheSBuYW1lIGlzIGV4 cGVjdGVkLAotICAgInNob3J0IGZvcm1zIiBtYXkgYmUgdXNlZC4gRm9yIGV4YW1wbGUsIGFsbCBv ZiB0aGUgZm9sbG93aW5nIGFyZQotICAgYWNjZXB0YWJsZToKLQotICBhcnJheSBzaG93IFwmYVtd ICAob3IgU0hPVyBBUlJBWS4uLikKLSAgYXJyYXkgc2hvdyAmYVtdCi0gIGFycmF5IHNob3cgYVtd Ci0gIGFycmF5IHNob3cgJmEKLSAgYXJyYXkgc2hvdyBhCi0KLSAgIEluIGFkZGl0aW9uLCByYW5n ZXMgYXJlIGFjY2VwdGVkIGluIHRoZSBBUlJBWSBDT1BZLCBBUlJBWSBDTEVBUiwgQVJSQVkKLSAg IFNFVCwgQVJSQVkgU0hPVywgYW5kIEFSUkFZIFNPUlQgY29tbWFuZHM6Ci0KLSAgYXJyYXkgY2xl YXIgXCZhWzE2XSAgICAgOyBDbGVhcnMgMTYgdGhydSBlbmQKLSAgYXJyYXkgY2xlYXIgJmFbMTZd ICAgICAgOyBEaXR0bwotICBhcnJheSBjbGVhciBhWzE2XSAgICAgICA7IERpdHRvCi0KLSAgYXJy YXkgY2xlYXIgXCZhWzE2OjMyXSAgOyBDbGVhcnMgMTYgdGhydSAzMgotICBhcnJheSBjbGVhciAm YVsxNjozMl0gICA7IERpdHRvCi0gIGFycmF5IGNsZWFyIGFbMTY6MzJdICAgIDsgRGl0dG8KLQot ICAgV2hlbiB1c2luZyBhcnJheSBuYW1lcyBhcyBmdW5jdGlvbiBhcmd1bWVudHMsIHlvdSBtdXN0 IG9taXQgdGhlICJcIiBhbmQKLSAgIHlvdSBtdXN0IGluY2x1ZGUgdGhlICImIi4gWW91IG1heSBv cHRpb25hbGx5IGluY2x1ZGUgZW1wdHkgYnJhY2tldHMuCi0gICBFeGFtcGxlczoKLQotICBcZnNw bGl0KFwlYSxhKSAgICAgICAgICA7IEJhZAotICBcZnNwbGl0KFwlYSxcJmEpICAgICAgICA7IEJh ZAotICBcZnNwbGl0KFwlYSwmYVszXSkgICAgICA7IEJhZAotCi0gIFxmc3BsaXQoXCVhLCZhKSAg ICAgICAgIDsgR29vZAotICBcZnNwbGl0KFwlYSwmYVtdKSAgICAgICA7IEdvb2QKLQotICAgIDcu MTAuMS4gQXJyYXkgSW5pdGlhbGl6ZXJzCi0KLSAgIEJlZ2lubmluZyBpbiBDLUtlcm1pdCA3LjAs IHlvdSBtYXkgaW5pdGlhbGl6ZSBhbiBhcnJheSAtLSBpbiB3aG9sZSBvcgotICAgaW4gcGFydCAt LSBpbiBpdHMgZGVjbGFyYXRpb246Ci0KLSAgIFsgQVJSQVkgXSBERUNMQVJFIGFycmF5LW5hbWVb c2l6ZV0gWyA9IF0gWyB2YWx1ZTEgWyB2YWx1ZTIgWy4uLl0gXSBdCi0KLSAgIEZvciBjb21wYXRp YmlsaXR5IHdpdGggdmVyc2lvbnMgNUEgYW5kIDYuMCwgdGhlIEFSUkFZIGtleXdvcmQgaXMKLSAg IG9wdGlvbmFsLiBERUNMQVJFIGNhbiBhbHNvIGJlIHNwZWxsZWQgRENMLgotCi0gICBJbml0aWFs aXplcnMgYXJlIChhKSBvcHRpb25hbCwgKGIpIHN0YXJ0IHdpdGggZWxlbWVudCAxLCAoYykgbXVz dCBiZQotICAgZW5jbG9zZWQgaW4gYnJhY2VzIGlmIHRoZXkgY29udGFpbiBzcGFjZXMsIGFuZCAo ZCkgYXJlIGV2YWx1YXRlZAotICAgYWNjb3JkaW5nIHRvIG5vcm1hbCBydWxlcyBieSB0aGUgREVD TEFSRSBjb21tYW5kIHByaW9yIHRvIGFzc2lnbm1lbnQuCi0gICBUaHVzIHRoZSBhc3NpZ25tZW50 cyBtYWRlIGhlcmUgYXJlIHRoZSBzYW1lIGFzIHRob3NlIG1hZGUgYnkgdGhlIEFTU0lHTgotICAg Y29tbWFuZC4gVGhpcyBhbGxvd3MgeW91IHRvIGluaXRpYWxpemUgYXJyYXkgZWxlbWVudHMgZnJv bSB0aGUgdmFsdWVzCi0gICBvZiBvdGhlciB2YXJpYWJsZXMuIElmIHlvdSBhY3R1YWxseSB3YW50 IHRvIGluaXRpYWxpemUgYW4gYXJyYXkgZWxlbWVudAotICAgdG8gdmFyaWFibGUncyBuYW1lLCBh cyBvcHBvc2VkIHRvIGl0cyB2YWx1ZSwgdXNlIGRvdWJsZSBiYWNrc2xhc2hlcyAoYXMKLSAgIGlu ICJcXCZhIiwgIlxcdih0aW1lKSIsIGV0YykuCi0KLSAgIFRoZSBzaXplIChkaW1lbnNpb24pIG9m IHRoZSBhcnJheSBpcyBvcHRpb25hbC4gSWYgdGhlIHNpemUgaXMgb21pdHRlZCwKLSAgIGFzIGlu ICJcJmFbXSIsIHRoZW4gdGhlIGFycmF5IHNpemVzIGl0c2VsZiB0byB0aGUgbnVtYmVyIG9mCi0g ICBpbml0aWFsaXplcnM7IGlmIHRoZXJlIGFyZSBubyBpbml0aWFsaXplcnMgdGhlIGFycmF5IGlz IG5vdCBkZWNsYXJlZAotICAgb3IsIGlmIGl0IHdhcyBkZWNsYXJlZCBwcmV2aW91c2x5LCBpdCBp cyBkZXN0cm95ZWQuIElmIGEgc2l6ZSBpcyBnaXZlbiwKLSAgIGFueSBleHRyYSBlbGVtZW50cyBp biB0aGUgaW5pdGlhbGl6YXRpb24gbGlzdCBhcmUgZGlzY2FyZGVkIGFuZAotICAgaWdub3JlZC4K LQotICAgTk9URTogVW5saWtlIGluIEMsIHRoZSBsaXN0IG9mIGluaXRpYWxpemVycyBpcyBOT1Qg ZW5jbG9zZWQgaW4gYnJhY2VzLgotICAgSW5zdGVhZCwgYnJhY2VzIGFyZSB1c2VkIHRvIGdyb3Vw IG11bHRpcGxlIHdvcmRzIHRvZ2V0aGVyLiBTbzoKLQotICBBUlJBWSBERUNMQVJFIFwmYVtdID0g eyBvbmUgdHdvIHRocmVlIH0KLQotICAgd291bGQgY3JlYXRlIGFuIGFycmF5IHdpdGggdHdvIGVs ZW1lbnRzICgwIGFuZCAxKSwgd2l0aCBlbGVtZW50IDEKLSAgIGhhdmluZyB0aGUgdmFsdWUgIiBv bmUgdHdvIHRocmVlICIuCi0KLSAgIEV4YW1wbGVzOgotCi0gICBBUlJBWSBERUNMQVJFIFwmYVsx Nl0KLSAgICAgICAgICBEZWNsYXJlcyB0aGUgYXJyYXkgXCZhIHdpdGggMTcgZWxlbWVudHMgKDAg dGhyb3VnaCAxNiksIGluIHdoaWNoCi0gICAgICAgICAgYWxsIGVsZW1lbnRzIGFyZSBpbml0aWFs bHkgZW1wdHkuIElmIHRoZSBhcnJheSBcJmFbXSBleGlzdGVkCi0gICAgICAgICAgYmVmb3JlLCB0 aGUgZWFybGllciBjb3B5IGlzIGRlc3Ryb3llZC4KLQotICAgQVJSQVkgREVDTEFSRSAmYVsxNl0K LSAgIEFSUkFZIERFQ0xBUkUgYVsxNl0KLSAgIEFSUkFZIERDTCBcJmFbMTZdCi0gICBBUlJBWSBE Q0wgJmFbMTZdCi0gICBBUlJBWSBEQ0wgYVsxNl0KLSAgIERFQ0xBUkUgXCZhWzE2XQotICAgREVD TEFSRSAmYVsxNl0KLSAgIERFQ0xBUkUgYVsxNl0KLSAgIERDTCBcJmFbMTZdCi0gICBEQ0wgJmFb MTZdCi0gICBEQ0wgYVsxNl0KLSAgICAgICAgICBBbGwgb2YgdGhlIGFib3ZlIGFyZSB0aGUgc2Ft ZSBhcyB0aGUgZmlyc3QgZXhhbXBsZS4KLQotICAgQVJSQVkgREVDTEFSRSBcJmFbMTZdID0gYWxw aGEgYmV0YSB7Z2FtbWEgZGVsdGF9Ci0gICAgICAgICAgRGVjbGFyZXMgdGhlIGFycmF5IFwmYSB3 aXRoIDE3IGVsZW1lbnRzICgwIHRocm91Z2ggMTYpLAotICAgICAgICAgIGluaXRpYWxpemluZyBc JmFbMV0gdG8gImFscGhhIiwgXCZhWzJdIHRvICJiZXRhIiwgYW5kIFwmYVszXSB0bwotICAgICAg ICAgICJnYW1tYSBkZWx0YSIuIFRoZSByZW1haW5pbmcgZWxlbWVudHMgYXJlIGVtcHR5LgotCi0g ICBBUlJBWSBERUNMQVJFIFwmYVtdID0gYWxwaGEgYmV0YSB7Z2FtbWEgZGVsdGF9Ci0gICAgICAg ICAgU2FtZSBhcyB0aGUgcHJldmlvdXMgZXhhbXBsZSwgYnV0IHRoZSBhcnJheSBpcyBhdXRvbWF0 aWNhbGx5Ci0gICAgICAgICAgZGltZW5zaW9uZWQgdG8gMy4KLQotICAgQVJSQVkgREVDTEFSRSBc JmFbM10gPSBhbHBoYSBiZXRhIHtnYW1tYSBkZWx0YX0gZXBzaWxvbiB6ZXRhCi0gICAgICAgICAg VG9vIG1hbnkgaW5pdGlhbGl6ZXJzOyBvbmx5IHRoZSBmaXJzdCB0aHJlZSBhcmUga2VwdC4KLQot ICAgQVJSQVkgREVDTEFSRSBcJmFbMF0KLSAgIEFSUkFZIERFQ0xBUkUgXCZhW10KLSAgIEFSUkFZ IERFQ0xBUkUgJmFbXQotICAgQVJSQVkgREVDTEFSRSAmYQotICAgQVJSQVkgREVDTEFSRSBhCi0g ICBERUNMQVJFIFwmWzBdCi0gICBERUNMQVJFIGEKLSAgIERDTCBhCi0gICAgICAgICAgQWxsIG9m IHRoZXNlIGFyZSBlcXVpdmFsZW50LiBFYWNoIGRlc3Ryb3lzIFwmYVtdIGlmIGl0IGV4aXN0cy4K LSAgICAgICAgICBEZWNsYXJpbmcgYW4gYXJyYXkgd2l0aCBhIGRpbWVuc2lvbiBvZiAwIGlzIHRo ZSBzYW1lIGFzIEFSUkFZCi0gICAgICAgICAgREVTVFJPWSBhcnJheW5hbWUuCi0KLSAgIEFSUkFZ IERFQ0xBUkUgXCZhW10gPSBcJTEgXCUyIFwlMwotICAgICAgICAgIERlY2xhcmVzIHRoZSBhcnJh eSBcJmEgd2l0aCAzIGVsZW1lbnRzICgwIHRocm91Z2ggMyksCi0gICAgICAgICAgaW5pdGlhbGl6 aW5nIFwmYVsxXSB0byB0aGUgdmFsdWUgb2YgXCUxLCBcJmFbMl0gdG8gdGhlIHZhbHVlIG9mCi0g ICAgICAgICAgXCUyLCBhbmQgXCZhWzNdIHRvIHRoZSB2YWx1ZSBvZiBcJTMuIEluIHRoaXMgY2Fz ZSwgYW55IHJlZmVyZW5jZQotICAgICAgICAgIHRvIG9uZSBvZiB0aGVzZSBhcnJheSBlbGVtZW50 cyBpcyByZXBsYWNlZCBieSB0aGUgdmFsdWUgb2YgdGhlCi0gICAgICAgICAgY29ycmVzcG9uZGlu ZyBcJW4gdmFyaWFibGUgYXQgdGhlIHRpbWUgdGhlIGRlY2xhcmF0aW9uIHdhcwotICAgICAgICAg IGV4ZWN1dGVkIChpbW1lZGlhdGUgZXZhbHVhdGlvbjsgdGhlIGFycmF5IGVsZW1lbnQncyB2YWx1 ZSBkb2VzCi0gICAgICAgICAgbm90IGNoYW5nZSBpZiB0aGUgaW5pdGlhbGl6ZXIgdmFyaWFibGUn cyB2YWx1ZSBjaGFuZ2VzKS4KLQotICAgQVJSQVkgREVDTEFSRSBcJmFbXSA9IFxcJTEgXFwlMiBc XCUzCi0gICAgICAgICAgRGVjbGFyZXMgdGhlIGFycmF5IFwmYSB3aXRoIDMgZWxlbWVudHMgKDAg dGhyb3VnaCAzKSwKLSAgICAgICAgICBpbml0aWFsaXppbmcgXCZhWzFdIHRvIHRoZSBzdHJpbmcg IlwlMSIsIFwmYVsyXSB0byAiXCUyIiwgYW5kCi0gICAgICAgICAgXCZhWzNdIHRvICJcJTMiLiBJ biB0aGlzIGNhc2UgYW55IHJlZmVyZW5jZSB0byBvbmUgb2YgdGhlc2UKLSAgICAgICAgICBhcnJh eSBlbGVtZW50cyBpcyByZXBsYWNlZCBieSB0aGUgQ1VSUkVOVCB2YWx1ZSBvZiB0aGUKLSAgICAg ICAgICBjb3JyZXNwb25kaW5nIFwlbiB2YXJpYWJsZSAoZGVmZXJyZWQgZXZhbHVhdGlvbiAtLSB0 aGUgYXJyYXkKLSAgICAgICAgICBlbGVtZW50J3MgdmFsdWUgZm9sbG93cyB0aGUgdmFsdWUgb2Yg dGhlIGluaXRpYWxpemVyIHZhcmlhYmxlKS4KLQotICAgVGhlIGVxdWFsIHNpZ24gKD0pIHByZWNl ZGluZyB0aGUgaW5pdGlhbGl6ZXIgbGlzdCBpcyBvcHRpb25hbCwgYnV0IGlzCi0gICByZWNvbW1l bmRlZCBmb3IgY2xhcml0eS4gSWYgeW91IG5lZWQgdG8gaW5pdGlhbGl6ZSBlbGVtZW50IDEgdG8g YQotICAgbGl0ZXJhbCBlcXVhbCBzaWduLCB1c2UgdHdvIG9mIHRoZW0sIHNlcGFyYXRlZCBieSBh IHNwYWNlLCBhcyBpbiB0aGlzCi0gICBleGFtcGxlOgotCi0gIEFSUkFZIERFQ0xBUkUgXCZhW10g PSA9ICsgLSAqIC8KLQotICAgUmVtZW1iZXIsIGVsZW1lbnQgMCBpcyBub3QgaW5pdGlhbGl6ZWQg YnkgdGhlIERFQ0xBUkUgY29tbWFuZC4gVG8KLSAgIGluaXRpYWxpemUgZWxlbWVudCAwLCB1c2Ug YSByZWd1bGFyIERFRklORSBvciBBU1NJR04gY29tbWFuZDoKLQotICBBUlJBWSBERUNMQVJFIFwm YVtdIG9uZSB0d28gdGhyZWUgZm91ciBmaXZlIHNpeCBzZXZlbiBlaWdodCBuaW5lCi0gIERFRklO RSBcJmFbMF0gemVybwotCi0gICBGaW5hbGx5LCByZW1lbWJlciB0aGF0IGV2ZXJ5IGNvbW1hbmQg bGV2ZWwgaGFzIGl0cyBvd24gbG9jYWwgYXJyYXksCi0gICBcJl9bXSwgY29udGFpbmluZyBhbGwg dGhlIG1hY3JvIGFyZ3VtZW50cyAoXCUwLCBcJTEsIC4uLikgZm9yIHRoYXQKLSAgIGxldmVsLiBT ZWUgWzU5OF1TZWN0aW9uIDcuNSBmb3IgZGV0YWlscy4KLQotICAgIDcuMTAuMi4gVHVybmluZyBh IFN0cmluZyBpbnRvIGFuIEFycmF5IG9mIFdvcmRzCi0KLSAgIFRoZSBcZnNwbGl0KHMxLCZhLHMy LHMzKSBmdW5jdGlvbiBhc3NpZ25zIHRoZSB3b3JkcyBvZiBzdHJpbmcgczEgdG8KLSAgIHN1Y2Nl c3NpdmUgZWxlbWVudHMgb2YgdGhlIGFycmF5IChiZWdpbm5pbmcgd2l0aCBlbGVtZW50IDEpIHdo b3NlCi0gICBpZGVudGlmeWluZyBsZXR0ZXIsIGEteiwgaXMgZ2l2ZW4gYWZ0ZXIgdGhlICImIiBp biB0aGUgc2Vjb25kIGFyZ3VtZW50LAotICAgdXNpbmcgYnJlYWsgYW5kIGluY2x1ZGUgY2hhcmFj dGVycyBnaXZlbiBpbiBzMiBhbmQgczMuIFNlZSBbNTk5XVNlY3Rpb24KLSAgIDcuMyBmb3IgZGV0 YWlscy4KLQotICAgIDcuMTAuMy4gQXJyYXlzIG9mIEZpbGVuYW1lcwotCi0gICBTZWUgWzYwMF1T ZWN0aW9uIDQuMTEuMyBmb3IgbmV3cyBhYm91dCBob3cgXGZmaWxlcygpIGFuZCByZWxhdGVkCi0g ICBmdW5jdGlvbnMgY2FuIGFzc2lnbiBhIGxpc3Qgb2YgZmlsZW5hbWVzIHRvIGFuIGFycmF5LiBU byByZWNhcGl0dWxhdGUKLSAgIGJyaWVmbHkgaGVyZToKLQotICBcZmZpbGVzKCosJmEpCi0KLSAg IGFzc2lnbnMgYWxsIGZpbGVzIHRoYXQgbWF0Y2ggdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBh cnJheSBkZW5vdGVkIGJ5Ci0gICB0aGUgc2Vjb25kIGFyZ3VtZW50LiBJZiB0aGUgYXJyYXkgaGFz IG5vdCBiZWVuIGRlY2xhcmVkLCBpdCBpcyBkZWNsYXJlZAotICAgYXV0b21hdGljYWxseSwgd2l0 aCBleGFjdGx5IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgbmVlZGVkIHRvIGhvbGQgdGhlCi0gICBm aWxlIGxpc3Q7IGlmIGl0IHdhcyBwcmV2aW91c2x5IGRlY2xhcmVkLCBpdCBpcyBkZXN0cm95ZWQg YW5kIHJldXNlZC4KLSAgIFRoZSBmaWxlbmFtZXMgYXJlIGFzc2lnbmVkIHN0YXJ0aW5nIGF0IGFy cmF5IGVsZW1lbnQgMS4gRWxlbWVudCAwIGhvbGRzCi0gICB0aGUgbnVtYmVyIG9mIGZpbGVzIGlu IHRoZSBsaXN0LgotCi0gICBUaGUgRElSRUNUT1JZIGNvbW1hbmQgKFs2MDFdU2VjdGlvbiA0LjUu MSkgY2FuIGFsc28gY3JlYXRlIGZpbGVuYW1lCi0gICBhcnJheXMgaWYgeW91IGdpdmUgaXQgdGhl IC9BUlJBWTogc3dpdGNoOyB0aGlzIGFsbG93cyBzZWxlY3Rpb24KLSAgIGNyaXRlcmlhIGJleW9u ZCB3aGV0aGVyIHRoZSBmaWxlbmFtZSBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuLgotCi0gICBB bGwgZnVuY3Rpb25zIGFuZCBjb21tYW5kcyB0aGF0IGNyZWF0ZSBmaWxlbmFtZSBhcnJheXMgc3Rv cmUgdGhlIG51bWJlcgotICAgb2YgZmlsZW5hbWVzLCBuLCBhcyBlbGVtZW50IDAgb2YgdGhlIGFy cmF5LCBhbmQgdGhlIGZpbGVuYW1lcyBhcwotICAgZWxlbWVudHMgMSB0aHJvdWdoIG4uCi0KLSAg ICA3LjEwLjQuIEF1dG9tYXRpYyBBcnJheXMKLQotICAgSW4gYSBjb21tYW5kIGZpbGUgb3IgbWFj cm8sIHlvdSBjYW4gbm93IGhhdmUgbG9jYWwgKGF1dG9tYXRpYykgYXJyYXlzLgotICAgSnVzdCBn aXZlIHRoZSBuYW1lIGZvbGxvd2VkIGJ5IGVtcHR5IHN1YnNjcmlwdCBicmFja2V0cyAobm8gc3Bh Y2VzCi0gICBpbnNpZGUgdGhlIGJyYWNrZXRzIHBsZWFzZSkgaW4gYSBMT0NBTCBjb21tYW5kLCBh bmQgdGhlbiBkZWNsYXJlIHRoZQotICAgYXJyYXk6Ci0KLSAgTE9DQUwgXCVhIFwmYVtdIG9vZmEK LSAgQVJSQVkgREVDTEFSRSBcJmFbMzJdID0gdmFsdWUxIHZhbHVlMiB2YWx1ZTMgLi4uCi0KLSAg IFRoaXMgZGVjbGFyZXMgdGhlIHNjYWxhciB2YXJpYWJsZSBcJWEsIHRoZSBhcnJheSBcJmFbXSwg YW5kIHRoZSBtYWNybwotICAgbmFtZSAib29mYSIgdG8gYmUgbG9jYWwsIGFuZCB0aGVuIGRlY2xh cmVzIHRoZSBuZXcgbG9jYWwgY29weSBvZiBcJmFbXQotICAgd2l0aCAzMiBlbGVtZW50cywgcGVy aGFwcyBhc3NpZ25pbmcgc29tZSBpbml0aWFsIHZhbHVlcy4gV2hlbiBDLUtlcm1pdAotICAgZXhp dHMgZnJvbSB0aGUgY29tbWFuZCBmaWxlIG9yIG1hY3JvIGNvbnRhaW5pbmcgdGhlc2UgY29tbWFu ZCwgdGhlCi0gICBwcmV2aW91cyBcJmFbXSBhcnJheSBpcyByZXN0b3JlZCAoYW5kIGlmIHRoZXJl IHdhcyBubyBcJmFbXSBhdCBhbnkKLSAgIGhpZ2hlciBsZXZlbCwgdGhpcyB3aWxsIHN0aWxsIGJl IHRydWUpLiBUaGUgcHJvY2VzcyBjYW4gYmUgcmVwZWF0ZWQgdG8KLSAgIGFueSBsZXZlbC4gVGh1 cyBpdCBpcyBub3cgc2FmZSB0byB3cml0ZSBzY3JpcHRzIG9yIG1hY3JvcyBjb250YWluaW5nCi0g ICBhcnJheXMgd2l0aG91dCBkYW5nZXIgb2YgaW50ZXJmZXJpbmcgd2l0aCBnbG9iYWwgYXJyYXlz IG9mIHRoZSBzYW1lCi0gICBuYW1lLgotCi0gICBKdXN0IGFzIHNjYWxhcnMgYXJlIGluaGVyaXRl ZCBieSBsb3dlciBjb21tYW5kIGxldmVscywgc28gYXJlIGFycmF5cy4KLSAgIFNvLCBmb3IgZXhh bXBsZSwgaWYgXCZhW10gaXMgZGVjbGFyZWQgYXQgdG9wIGxldmVsLCBhbGwgbG93ZXIgbGV2ZWxz Ci0gICB3aWxsIHNlZSBpdCB1bmxlc3MgdGhleSBpbmNsdWRlIGEgImxvY2FsIFwmYVtdIiBzdGF0 ZW1lbnQsIGluIHdoaWNoCi0gICBjYXNlIGFsbCBsZXZlbHMgYXQgYW5kIGJlbmVhdGggdGhlIGxl dmVsIHdoZXJlIHRoZSBMT0NBTCBzdGF0ZW1lbnQgd2FzCi0gICBleGVjdXRlZCB3aWxsIHNlZSB0 aGUgbG9jYWwgY29weS4gVGhpcyB0b28gY2FuIGJlIHJlcGVhdGVkIHRvIGFueQotICAgbGV2ZWwu Ci0KLSAgIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB5b3UgREVDTEFSRSBhbiBhcnJheSBhdCBhIGxv d2VyIGNvbW1hbmQgbGV2ZWwKLSAgIHdpdGhvdXQgYWxzbyBtYWtpbmcgaXQgTE9DQUwsIHRoaXMg cmVwbGFjZXMgdGhlIGNvcHkgdGhhdCB3YXMgZGVjbGFyZWQKLSAgIGF0IHRoZSBsb3dlc3QgY29t bWFuZCBsZXZlbCBhYm92ZSB0aGlzIG9uZS4KLQotICAgIDcuMTAuNS4gU29ydGluZyBBcnJheXMK LQotICAgQWx0aG91Z2ggYXJyYXlzIGNhbiBiZSBzb3J0ZWQgdXNpbmcgRk9SIGxvb3BzIGFzIHNo b3duIG9uIHBhZ2UgMzgzIG9mCi0gICBVc2luZyBDLUtlcm1pdCwgMm5kIEVkLiwgdGhpcyBpbnZv bHZlcyBxdWl0ZSBhIGJpdCBvZiByZXBldGl0aXZlCi0gICBpbnRlcnByZXRhdGlvbiBieSB0aGUg Y29tbWFuZCBwYXJzZXIsIGFuZCBzbyBjYW4gYmUgc2xvdyBmb3IgbGFyZ2UKLSAgIGFycmF5cy4g Rm9yIHRoaXMgcmVhc29uLCBDLUtlcm1pdCA3LjAgYWRkcyBhIGJ1aWx0LWluIFNPUlQgY29tbWFu ZDoKLQotICAgQVJSQVkgU09SVCBbIHN3aXRjaGVzIF0gYXJyYXkgWyBhcnJheTIgXQotICAgICAg ICAgIFNvcnRzIHRoZSBnaXZlbiBhcnJheSBpbiBwbGFjZS4gU29ydGluZyBpcyBzdHJpY3RseSBs ZXhpY2FsCi0gICAgICAgICAgKHN0cmluZyBiYXNlZCkuIFRoZSBhcnJheSBuYW1lIGNhbiBiZSBn aXZlbiBmdWxseSwgZS5nLiAiXCZhW10iLAotICAgICAgICAgIG9yIHRoZSAiXCIgYW5kL29yICIm IiBhbmQvb3IgYnJhY2tldHMgY2FuIGJlIG9taXR0ZWQsIGUuZy4KLSAgICAgICAgICAiYXJyYXkg c29ydCBcJmFbXSIsICJzb3J0ICZhIiwgInNvcnQgYSIuIEFsc28sIGEgcmFuZ2UgY2FuIGJlCi0g ICAgICAgICAgaW5kaWNhdGVkIGluIHRoZSBicmFja2V0cyBhcyBub3RlZCBpbiBbNjAyXVNlY3Rp b24gNy4xMCwgdG8KLSAgICAgICAgICByZXN0cmljdCB0aGUgc29ydCB0byBhIHJhbmdlIG9mIGVs ZW1lbnRzIChlcXVpdmFsZW50IHRvIHRoZQotICAgICAgICAgIC9SQU5HRSBzd2l0Y2gsIGRlc2Ny aWJlZCBqdXN0IGJlbG93KSwgZS5nLiAiYXJyYXkgc29ydAotICAgICAgICAgICZhWzIwOjMwXSIu Ci0KLSAgIEEgc2Vjb25kIGFycmF5IG1heSBiZSBzcGVjaWZpZWQuIElmIGl0IGlzLCBhbmQgaWYg aXQgaXMgYXQgbGVhc3QgYXMgYmlnCi0gICBhcyB0aGUgZmlyc3QgYXJyYXksIGl0IGlzIHNvcnRl ZCBhY2NvcmRpbmcgdG8gdGhlIGZpcnN0IGFycmF5LiBGb3IgYQotICAgc2FtcGxlIGFwcGxpY2F0 aW9uLCBzZWUgWzYwM11TZWN0aW9uIDcuMTAuMTAuCi0KLSAgIFNlZSBbNjA0XVNlY3Rpb24gMS41 IGZvciBhbiBleHBsYW5hdGlvbiBvZiBzd2l0Y2hlcy4gVGhlIG9wdGlvbmFsCi0gICBzd2l0Y2hl cyBhcmU6Ci0KLSAgIC9DQVNFOntPTixPRkZ9Ci0gICAgICAgICAgL0NBU0U6T04gbWVhbnMgdGhh dCBhbHBoYWJldGljIGNhc2UgaXMgc2lnbmlmaWNhbnQgaW4KLSAgICAgICAgICBjb21wYXJpc29u czsgdXBwZXJjYXNlIGxldHRlcnMgYXJlIHNvcnRlZCBiZWZvcmUgbG93ZXJjYXNlIG9uZXMuCi0g ICAgICAgICAgL0NBU0U6T0ZGIG1lYW5zIGNhc2UgaXMgaWdub3JlZCwgZS5nLiAiQSIgaXMgdGhl IHNhbWUgYXMgImEiLiBJZgotICAgICAgICAgIHRoaXMgc3dpdGNoIGlzIG5vdCBnaXZlbiwgc29y dGluZyBpcyBhY2NvcmRpbmcgdGhlIGN1cnJlbnQgU0VUCi0gICAgICAgICAgQ0FTRSBzZXR0aW5n LgotCi0gICAvS0VZOm4KLSAgICAgICAgICBDb21wYXJpc29uIGJlZ2lucyBhdCBwb3NpdGlvbiBu KDEtYmFzZWQpIGluIGVhY2ggc3RyaW5nLiBJZiBubwotICAgICAgICAgIGtleSBpcyBnaXZlbiwg dGhlIGVudGlyZSBzdHJpbmdzIGFyZSBjb21wYXJlZC4gT25seSBvbmUga2V5IGNhbgotICAgICAg ICAgIGJlIGdpdmVuLiBJZiBhbiBhcnJheSBlbGVtZW50IGlzIHNob3J0ZXIgdGhhbiB0aGUga2V5 IHZhbHVlLCBuLAotICAgICAgICAgIHRoYXQgZWxlbWVudCBpcyBjb25zaWRlcmVkIGVtcHR5IGZv ciBjb21wYXJpc29uIHB1cnBvc2VzLCBhbmQKLSAgICAgICAgICB0aGVyZWZvcmUgbGV4aWNhbGx5 IGxlc3MgdGhhbiBhbnkgZWxlbWVudCBhdCBsZWFzdCBuY2hhcmFjdGVycwotICAgICAgICAgIGxv bmcuCi0KLSAgIC9OVU1FUklDCi0gICAgICAgICAgSWYgdGhpcyBzd2l0Y2ggaXMgaW5jbHVkZWQs IGl0IG1lYW5zIHNvcnRpbmcgc2hvdWxkIGJlIG51bWVyaWMsCi0gICAgICAgICAgcmF0aGVyIHRo YW4gbGV4aWNhbC4gVGhlIHNvcnQga2V5IGlzIHRoZSBzdHJpbmcgc3RhcnRpbmcgYXQgdGhlCi0g ICAgICAgICAga2V5IHBvc2l0aW9uLCBza2lwcGluZyBhbnkgbGVhZGluZyBibGFua3Mgb3IgdGFi cywgYW5kIHRoZW4gYXMKLSAgICAgICAgICBtdWNoIG9mIHRoZSBzdHJpbmcgZnJvbSB0aGF0IHBv aW50IG9uIHRoYXQgZml0cyB0aGUgZGVmaW5pdGlvbgotICAgICAgICAgIG9mICJudW1lcmljIiwg dGVybWluYXRpbmcgYXQgdGhlIGZpcnN0IGNoYXJhY3RlciB0aGF0IGRvZXMgbm90Ci0gICAgICAg ICAgcXVhbGlmeS4gQSBudW1lcmljIHN0cmluZyBoYXMgYW4gb3B0aW9uYWwgc2lnbiAoKyBvciAt KSBmb2xsb3dlZAotICAgICAgICAgIGJ5IG9uZSBvciBtb3JlIGRpZ2l0cywgYW5kIChpZiB5b3Vy IHZlcnNpb24gb2YgS2VybWl0IHdhcyBidWlsdAotICAgICAgICAgIHdpdGggZmxvYXRpbmctcG9p bnQgc3VwcG9ydDsgc2VlIFs2MDVdU2VjdGlvbiA3LjIzICkgemVybyBvciBvbmUKLSAgICAgICAg ICBkZWNpbWFsIHBvaW50IChwZXJpb2QpLiBJZiBib3RoIC9DQVNFIGFuZCAvTlVNRVJJQyBhcmUg Z2l2ZW4sCi0gICAgICAgICAgL05VTUVSSUMgdGFrZXMgcHJlY2VkZW5jZS4KLQotICAgL1JBTkdF Om5bOm1dCi0gICAgICAgICAgU29ydCBlbGVtZW50cyBudGhyb3VnaCBtIG9mIHRoZSBhcnJheS4g QnkgZGVmYXVsdCwgdGhlIGVudGlyZQotICAgICAgICAgIGFycmF5IGZyb20gZWxlbWVudCAxIHRv IGl0cyBkaW1lbnNpb25lZCBzaXplIGlzIHNvcnRlZCwgd2hpY2gKLSAgICAgICAgICBtaWdodCBw cm9kdWNlIHN1cnByaXNpbmcgcmVzdWx0cyBpZiB0aGUgYXJyYXkgaXMgbm90IGZ1bGw7IHNlZQot ICAgICAgICAgIGV4YW1wbGUgaW4gWzYwNl1TZWN0aW9uIDcuMTAuNy4gSWYgIjptIiBpcyBvbWl0 dGVkIGZyb20gdGhlCi0gICAgICAgICAgcmFuZ2UsIHRoZSBkaW1lbnNpb25lZCBzaXplIGlzIHVz ZWQuIFRodXMsIHRvIHNvcnQgYW4gZW50aXJlCi0gICAgICAgICAgYXJyYXksIFwmYVtdLCBpbmNs dWRpbmcgaXRzIDB0aCBlbGVtZW50LCB1c2UgInNvcnQgL3JhbmdlOjAgJmEiLgotICAgICAgICAg IFlvdSBjYW4gYWxzbyBzb3J0IGFueSBkZXNpcmVkIHNlY3Rpb24gb2YgYW4gYXJyYXksIGUuZy4g InNvcnQKLSAgICAgICAgICAvcmFuZ2U6MTA6MjAgJmEiIG9yICJzb3J0IC9yYW5nZTpcJWk6XCVq LTEgJmIiLiBBcyBub3RlZCBhYm92ZSwKLSAgICAgICAgICB5b3UgY2FuIGFsc28gc3BlY2lmeSBh IHJhbmdlIGluIHRoZSBhcnJheS1uYW1lIGJyYWNrZXRzLiBJZiB5b3UKLSAgICAgICAgICBzcGVj aWZ5IGEgcmFuZ2UgaW4gdGhlIGFycmF5LW5hbWUgYnJhY2tldHMgQU5EIHdpdGggYSAvUkFOR0UK LSAgICAgICAgICBzd2l0Y2gsIHRoZSBvbmVzIGluIHRoZSBicmFja2V0cyB0YWtlIHByZWNlZGVu Y2UuCi0KLSAgIC9SRVZFUlNFCi0gICAgICAgICAgU29ydCBpbiByZXZlcnNlIG9yZGVyLiBJZiB0 aGlzIHN3aXRjaCBpcyBub3QgZ2l2ZW4sIHRoZSBhcnJheSBpcwotICAgICAgICAgIHNvcnRlZCBp biBhc2NlbmRpbmcgb3JkZXIuCi0KLSAgIFJlbWVtYmVyIHRoYXQgbnVtZXJpYyBzd2l0Y2ggYXJn dW1lbnRzIGNhbiBiZSBudW1iZXJzLCBhcml0aG1ldGljCi0gICBleHByZXNzaW9ucywgb3IgdmFy aWFibGVzIHdob3NlIHZhbHVlcyBhcmUgbnVtYmVycyBvciBleHByZXNzaW9ucywgYXMKLSAgIGls bHVzdHJhdGVkIGluIHRoZSAvUkFOR0UgZXhhbXBsZXMgYWJvdmUuCi0KLSAgIEEgdHlwaWNhbCBz b3J0aW5nIGFwcGxpY2F0aW9uIG1pZ2h0IGJlIHRvIGxpc3Qgc3R1ZGVudHMnIHRlc3Qgc2NvcmVz IGluCi0gICBkZXNjZW5kaW5nIG9yZGVyLiBTdXBwb3NlIHlvdSBoYWQgdGhlIGZvbGxvd2luZyBy ZWNvcmRzOgotCi0gIG9sYWYgICAgICA2NQotICBvbGdhICAgICAgOTgKLSAgaXZhbiAgICAgIDgz Ci0gIHhlbmEgICAgIDEwMAotCi0gICAoYW5kIHNvIG9uKSBzdG9yZWQgaW4gYXJyYXkgXCZzW10g KGUuZy4gYnkgcmVhZGluZyB0aGVtIGZyb20gYSBmaWxlIGFzCi0gICBpbGx1c3RyYXRlZCBpbiBb NjA3XXNlY3Rpb24gNy4xMC43KS4gSW4gdGhlc2UgcmVjb3JkcywgdGhlIHN0dWRlbnQncwotICAg bmFtZSBpcyBpbiBjb2x1bW5zIDEtOSBhbmQgdGhlIHNjb3JlIGluIDEwLTEyLiBTbyB0byByZWFy cmFuZ2UgdGhlIGxpc3QKLSAgIGluIGRlc2NlbmRpbmcgb3JkZXIgb2Ygc2NvcmU6Ci0KLSAgc29y dCAva2V5OjEwIC9yZXZlcnNlICZzCi0KLSAgIFRoZW4gdG8gbGlzdCB5b3VyIHRvcCBmaXZlIHN0 dWRlbnRzOgotCi0gIGZvciBcJWkgMSA1IDEgeyBlY2hvIFwmc1tcJWldIH0KLQotICAgT3IgbW9y ZSBzaW1wbHkgKHNlZSBuZXh0IHNlY3Rpb24pOgotCi0gIHNob3cgYXJyYXkgYVsxOjVdCi0KLSAg IFRvIGlsbHVzdHJhdGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGxleGljYWwgYW5kIGEgbnVt ZXJpYyBzb3J0LAotICAgc3VwcG9zZSB5b3UgaGF2ZSB0aGUgZm9sbG93aW5nIHJlY29yZHMgKHRo ZSBsaW5lcyB0aGF0IGFyZSBudW1iZXJlZCwKLSAgIHN0YXJ0aW5nIGF0IGNvbHVtbiAxKSBpbiBh cnJheSBcJmFbXToKLQotICAgIENvbHVtbiAgIDEgICAgICAgICAyCi0gICAgMTIzNDU2Nzg5MDEy MzQ1Njc4OTAKLQotICAgMS4gSXZhbiAxMC4wIDIuIE9sYWYgOS45NSAzLiBPbGdhIDEwMS41Ci0K LSAgIEFSUkFZIFNPUlQgL0tFWToxMCAmYVtdIHdvdWxkIG9yZGVyIHRoZW0gMywxLDIsIGJ1dCBB UlJBWSBTT1JUIC9LRVk6MTAKLSAgIC9OVU1FUklDICZhW10gd291bGQgb3JkZXIgdGhlbSAyLDEs My4KLQotICAgIDcuMTAuNi4gRGlzcGxheWluZyBBcnJheXMKLQotICAgVGhlIFNIT1cgQVJSQVkg Y29tbWFuZCAob3IgQVJSQVkgU0hPVykgbm93IGFjY2VwdHMgYW4gb3B0aW9uYWwKLSAgIGFycmF5 LW5hbWUgYXJndW1lbnQ6Ci0KLSAgU0hPVyBBUlJBWSBcJmFbXQotCi0gICAoeW91IGNhbiBsZWF2 ZSBvZmYgdGhlIFwsIHRoZSBcJiwgYW5kL29yIHRoZSBbXSdzIGlmIHlvdSBsaWtlOyAic2hvdwot ICAgYXJyYXkgYSIgaXMgZXF1aXZhbGVudCB0byAic2hvdyBhcnJheSBcJmFbXSIpLiBXaGVuIGFu IGFycmF5IGlzCi0gICBzcGVjaWZpZWQsIGl0cyBkaW1lbnNpb24gaXMgc2hvd24gYW5kIGFsbCBk ZWZpbmVkIChub24tZW1wdHkpIGVsZW1lbnRzCi0gICBhcmUgbGlzdGVkLgotCi0gICBFeGFtcGxl OgotCi0gIGFzc2lnbiBcJW4gXGZmaWxlcygqLCZhKSAgOyBGaWxsIGFuIGFycmF5IHdpdGggZmls ZW5hbWVzIChbNjA4XVNlY3Rpb24gNC4xMS4zKQotICBzaG93IGFycmF5IFwmYVtdICAgICAgICAg IDsgU2hvdyB0aGUgYXJyYXkgd2UganVzdCByZWFkCi0gIGFycmF5IHNob3cgXCZhW10gICAgICAg ICAgOyBTYW1lIGFzIHByZXZpb3VzCi0gIGFycmF5IHNvcnQgXCZhW10gICAgICAgICAgOyBTb3J0 IHRoZSBhcnJheQotICBhcnJheSBzaG93IFwmYVtdICAgICAgICAgIDsgU2hvdyBpdCBhZnRlciBz b3J0aW5nCi0gIGFycmF5IHNob3cgXCZhICAgICAgICAgICAgOyBTaG93IGl0IGFnYWluCi0gIGFy cmF5IHNob3cgJmEgICAgICAgICAgICAgOyBTaG93IGl0IGFnYWluCi0gIGFycmF5IHNob3cgYSAg ICAgICAgICAgICAgOyBTaG93IGl0IGFnYWluCi0KLSAgIChUaGUgZmluYWwgZm91ciBjb21tYW5k cyBkZW1vbnN0cmF0ZSB0aGUgYWx0ZXJuYXRpdmUgZm9ybXMgdGhhdCBhcmUKLSAgIGFjY2VwdGVk IGZvciB0aGUgYXJyYXkgbmFtZS4pCi0KLSAgIElmIHlvdSBTSE9XIEFSUkFZIHdpdGhvdXQgZ2l2 aW5nIGFuIGFycmF5IG5hbWUsIGFsbCBkZWZpbmVkIGFycmF5cyBhcmUKLSAgIGxpc3RlZCBieSBu YW1lIGFuZCBkaW1lbnNpb24sIGJ1dCB0aGVpciBjb250ZW50cyBhcmUgbm90IHNob3duLgotCi0g ICBZb3UgY2FuIGFsc28gc2hvdyBhIHBpZWNlIG9mIGFuIGFycmF5IGJ5IGluY2x1ZGluZyBhIHN1 YnNjcmlwdCBvciByYW5nZQotICAgd2l0aGluIHRoZSBhcnJheSBicmFja2V0czoKLQotICBhcnJh eSBzaG93IFwmYVs1XSAgICAgICAgIDsgU2hvd3MgXCZhWzVdCi0gIGFycmF5IHNob3cgJmFbMzo4 XSAgICAgICAgOyBTaG93cyBcJmFbM10gdGhyb3VnaCBcJmFbOF0KLSAgYXJyYXkgc2hvdyBhWzpc JW4tMV0gICAgICA7IFNob3dzIFwmYVswXSB0aHJvdWdoIFwmYVtcJW4tMV0KLQotICAgIDcuMTAu Ny4gT3RoZXIgQXJyYXkgT3BlcmF0aW9ucwotCi0gICBBUlJBWSBERVNUUk9ZIGFycmF5bmFtZQot ICAgICAgICAgIERlc3Ryb3lzIGFuZCB1bmRlY2xhcmVzIHRoZSBuYW1lZCBhcnJheS4gU3Vic2Ny aXB0cyBvciByYW5nZXMKLSAgICAgICAgICBhcmUgbm90IGFjY2VwdGVkIGluIHRoaXMgY29tbWFu ZC4KLQotICAgQVJSQVkgQ09QWSBhcnJheTEgYXJyYXkyCi0gICAgICAgICAgQ29waWVzIHRoZSBm aXJzdCBhcnJheSB0byB0aGUgc2Vjb25kIGFycmF5LiBJZiB0aGUgdGFyZ2V0IGFycmF5Ci0gICAg ICAgICAgaGFzIG5vdCBiZWVuIGRlY2xhcmVkLCBpdCBpcyBjcmVhdGVkIGF1dG9tYXRpY2FsbHkg d2l0aCB0aGUgc2FtZQotICAgICAgICAgIHNpemUgYXMgdGhlIGZpcnN0LiBJZiBpdCBoYXMgYmVl biBkZWNsYXJlZCwgaXQgd2lsbCBiZSB1c2VkIGFzCi0gICAgICAgICAgZGVjbGFyZWQ7IGlmIHRo ZSBzb3VyY2UgYXJyYXkgaXMgbGFyZ2VyLCBvbmx5IGFzIG11Y2ggb2YgaXQgYXMKLSAgICAgICAg ICB3aWxsIGZpdCBpcyBjb3BpZWQgdG8gdGhlIHRhcmdldCBhcnJheS4gU3ludGF4IGZvciBhcnJh eTEgYW5kCi0gICAgICAgICAgYXJyYXkyIGlzIGFzIGluIEFSUkFZIFNIT1cgKFNIT1cgQVJSQVkp LiBFeGFtcGxlOgotCi0gIC5cJW4gOj0gXGZmaWxlcygqLCZhKSAgOyBDcmVhdGUgYW5kIGxvYWQg YXJyYXkgQSB3aXRoIGEgZmlsZSBsaXN0LgotICBhcnJheSBjb3B5ICZhICZiICAgICAgIDsgQ29w eSBhcnJheSBBIHRvIGFycmF5IEIuCi0KLSAgICAgICAgICBUaGUgQVJSQVkgQ09QWSBjb21tYW5k IGFsc28gbGV0cyB5b3UgY29weSBwaWVjZXMgb2YgYXJyYXlzIGJ5Ci0gICAgICAgICAgaW5jbHVk aW5nIHJhbmdlIHNwZWNpZmllcnMsIGFzIGluIHRoZXNlIGV4YW1wbGVzOgotCi0gICAgICAgIEFS UkFZIENPUFkgXCZhWzQ6MjddIFwmYgotICAgICAgICAgICAgICAgIFRoaXMgY29waWVzIFwmYVtd IGVsZW1lbnRzIDQtMjcgdG8gXCZiW10gZWxlbWVudHMgMS0yMywKLSAgICAgICAgICAgICAgICBj cmVhdGluZyBcJmJbXSBpZiBuZWNlc3Nhcnkgb3IsIGlmIFwmYltdIGlzIGFscmVhZHkKLSAgICAg ICAgICAgICAgICBkZWNsYXJlZCwgc3RvcHBpbmcgZWFybHkgaWYgaXRzIHNpemUgaXMgbGVzcyB0 aGFuIDIzLgotCi0gICAgICAgIEFSUkFZIENPUFkgXCZhWzQ6MjddIFwmYlsxMl0KLSAgICAgICAg ICAgICAgICBUaGlzIGNvcGllcyBcJmFbXSBlbGVtZW50cyA0LTI3IHRvIFwmYltdIGVsZW1lbnRz IDEyLTM1LAotICAgICAgICAgICAgICAgIGNyZWF0aW5nIFwmYltdIGlmIG5lY2Vzc2FyeSBvciwg aWYgXCZiW10gaXMgYWxyZWFkeQotICAgICAgICAgICAgICAgIGRlY2xhcmVkLCBzdG9wcGluZyBl YXJseSBpZiBpdHMgc2l6ZSBpcyBsZXNzIHRoYW4gMzUuCi0KLSAgICAgICAgQVJSQVkgQ09QWSBc JmFbNDoyN10gXCZiWzEyOjE0XQotICAgICAgICAgICAgICAgIFRoaXMgY29waWVzIFwmYVtdIGVs ZW1lbnRzIDQtNiB0byBcJmJbXSBlbGVtZW50cyAxMi0xNCwKLSAgICAgICAgICAgICAgICBjcmVh dGluZyBcJmJbXSBpZiBuZWNlc3Nhcnkgb3IsIGlmIFwmYltdIGlzIGFscmVhZHkKLSAgICAgICAg ICAgICAgICBkZWNsYXJlZCwgc3RvcHBpbmcgZWFybHkgaWYgaXRzIHNpemUgaXMgbGVzcyB0aGFu IDE0LgotCi0gICAgICAgIEFSUkFZIENPUFkgXCZhWzE3Ol0gXCZiCi0gICAgICAgICAgICAgICAg VGhpcyBjb3BpZXMgYWxsIHRoZSBlbGVtZW50cyBvZiBcJmFbXSBzdGFydGluZyB3aXRoIDE3Ci0g ICAgICAgICAgICAgICAgdW50aWwgdGhlIGxhc3QgdG8gXCZiW10sIGNyZWF0aW5nIFwmYltdIGlm IG5lY2Vzc2FyeSBvciwKLSAgICAgICAgICAgICAgICBpZiBcJmJbXSBpcyBhbHJlYWR5IGRlY2xh cmVkLCBzdG9wcGluZyBlYXJseSBpZiBcJmJbXSBpcwotICAgICAgICAgICAgICAgIG5vdCBiaWcg ZW5vdWdoLiBTdXBwb3NlLCBmb3IgZXhhbXBsZSwgeW91IGhhdmUgYSBzY3JpcHQKLSAgICAgICAg ICAgICAgICB3aG9zZSBhcmd1bWVudHMgYXJlIHN0cmluZzEsIHN0cmluZzIsIGFuZCBhIGxpc3Qg b2YgZmlsZXMsCi0gICAgICAgICAgICAgICAgd2hvc2Ugam9iIGlzIHRvIGNoYW5nZSBhbGwgb2Nj dXJyZW5jZXMgb2Ygc3RyaW5nMSB0bwotICAgICAgICAgICAgICAgIHN0cmluZzIgaW4gZWFjaCBv ZiB0aGUgZmlsZXMuIEJ1dCBpZiB0aGUgbGlzdCBvZiBmaWxlcyBpcwotICAgICAgICAgICAgICAg IG9taXR0ZWQsIHRoZW4gIioiIChhbGwgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5KSBp cwotICAgICAgICAgICAgICAgIGFzc3VtZWQ6Ci0KLWlmIDwgXHYoYXJnYykgMyBleGl0IDEgIlVz YWdlOiBcJTAgc3RyaW5nMSBzdHJpbmcyIFsgZmlsZXMgXSIKLWlmIG5vdCBkZWYgXCUzIHsKLSAg ICAubiA6PSBcZmZpbGVzKCosJmEpCi19IGVsc2UgewotICAgIGFycmF5IGNvcHkgJl9bMzpdICZh Ci0gICAgLm4gOj0gXGZkaW0oJmEpCi19Ci1mb3IgaSAxIG4gMSB7Ci0gICAgISBjYXQgXCZhW2ld IHwgc2VkIC1lICJzfFwlMXxcJTJ8ZyIgPiAvdG1wL194Ci0gICAgcmVuYW1lIC90bXAvX3ggXCZh W2ldCi19Ci0KLSAgICAgICAgQVJSQVkgQ09QWSBcJmFbMTddIFwmYgotICAgICAgICAgICAgICAg IFNhbWUgYXMgcHJldmlvdXMgZXhhbXBsZS4KLQotICAgQVJSQVkgQ0xFQVIgYXJyYXluYW1lCi0g ICAgICAgICAgU2V0cyBhbGwgdGhlIGVsZW1lbnRzIG9mIHRoZSBhcnJheSB0byB0aGUgZW1wdHkg dmFsdWUuIFlvdSBtYXkKLSAgICAgICAgICBhbHNvIGluY2x1ZGUgYSByYW5nZSBzcGVjaWZpZXIg dG8gY2xlYXIgb25seSBhIHNlbGVjdGVkIHBvcnRpb24KLSAgICAgICAgICBvZiB0aGUgYXJyYXk7 IGZvciBleGFtcGxlICJhcnJheSBjbGVhciBcJmFbMzc6MjE0XSIuIElmIHRoZQotICAgICAgICAg IHJhbmdlIGlzIG91dCBvZiBib3VuZHMsIG9ubHkgdGhlIHBhcnQgb2YgdGhlIGFycmF5IHRoYXQg aXMgaW4KLSAgICAgICAgICBib3VuZHMgaXMgY2xlYXJlZC4KLQotICAgQVJSQVkgU0VUIGFycmF5 bmFtZSBbIHZhbHVlIF0KLSAgICAgICAgICBTZXRzIGFsbCB0aGUgZWxlbWVudHMgb2YgdGhlIGFy cmF5IHRvIHRoZSBnaXZlbiB2YWx1ZS4gSWYgbm8KLSAgICAgICAgICB2YWx1ZSBpcyBnaXZlbiwg dGhlIGFycmF5IGlzIGNsZWFyZWQuIFlvdSBtYXkgYWxzbyBpbmNsdWRlIGEKLSAgICAgICAgICBy YW5nZSBzcGVjaWZpZXIgdG8gc2V0IG9ubHkgYSBzZWxlY3RlZCBwb3J0aW9uIG9mIHRoZSBhcnJh eTsgZm9yCi0gICAgICAgICAgZXhhbXBsZSAiYXJyYXkgc2V0IFwmYVsxOjldIC0xIi4gSWYgdGhl IHJhbmdlIGlzIG91dCBvZiBib3VuZHMsCi0gICAgICAgICAgb25seSB0aGUgcGFydCBvZiB0aGUg YXJyYXkgdGhhdCBpcyBpbiBib3VuZHMgaXMgc2V0LgotCi0gICBBUlJBWSBSRVNJWkUgYXJyYXlu YW1lIHNpemUKLSAgICAgICAgICBSZXNpemVzIHRoZSBnaXZlbiBhcnJheS4gSWYgdGhlIHNpemUg aXMgZ3JlYXRlciB0aGFuIHRoZSBhcnJheSdzCi0gICAgICAgICAgY3VycmVudCBkaW1lbnNpb24s IG5ldyBlbXB0eSBlbGVtZW50cyBhcmUgYWRkZWQgdG8gdGhlIGVuZC4gSWYKLSAgICAgICAgICB0 aGUgc2l6ZSBpcyBsZXNzIHRoYW4gdGhlIGN1cnJlbnQgZGltZW5zaW9uLCB0aGUgZXh0cmEgZWxl bWVudHMKLSAgICAgICAgICBhcmUgZGlzY2FyZGVkLiBOb3RlOiBJZiB5b3UgaGF2ZSBzdG9yZWQg dGhlIGFycmF5IHNpemUgaW4KLSAgICAgICAgICBlbGVtZW50IDAsIEFSUkFZIFJFU0laRSBkb2Vz IG5vdCBjaGFuZ2UgdGhpcyB2YWx1ZS4gQWx0ZXJuYXRpdmUKLSAgICAgICAgICBub3RhdGlvbjog QVJSQVkgUkVTSVpFIGFycmF5bmFtZVtzaXplXS4gRm9yIGEgcHJhY3RpY2FsIGV4YW1wbGUsCi0g ICAgICAgICAgc2VlIFs2MDldU2VjdGlvbiA3LjEwLjExLgotCi0gICBcZmFycmF5bG9vayhwYXR0 ZXJuLGFycmF5bmFtZSkKLSAgICAgICAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGluZGV4 IG9mIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZQotICAgICAgICAgIGdpdmVuIGFycmF5IHRoYXQg bWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVybiAoZm9yIGRldGFpbHMgYWJvdXQKLSAgICAgICAgICBw YXR0ZXJuIHN5bnRheCwgc2VlIFs2MTBdc2VjdGlvbiA0LjkpLiBUaGUgYXJyYXkgbmFtZSBjYW4K LSAgICAgICAgICBpbmNsdWRlIGEgcmFuZ2Ugc3BlY2lmaWNhdGlvbiB0byByZXN0cmljdCB0aGUg c2VhcmNoIHRvIGEgZ2l2ZW4KLSAgICAgICAgICBzZWdtZW50IG9mIHRoZSBhcnJheS4gSWYgbm8g ZWxlbWVudHMgbWF0Y2ggdGhlIHBhdHRlcm4sIC0xIGlzCi0gICAgICAgICAgcmV0dXJuZWQuCi0K LSAgIFxmdGFibGVsb29rKGtleXdvcmQsYXJyYXluYW1lWyxkZWxpbWl0ZXJdKQotICAgICAgICAg IExvb2tzIGluIHRoZSBnaXZlbiAidGFibGUiLCB3aGljaCBtdXN0IGJlIHNvcnRlZCwgZm9yIHRo ZSBnaXZlbgotICAgICAgICAgIGtleXdvcmQuIFRoZSBrZXl3b3JkIG5lZWQgbm90IGJlIHNwZWxs ZWQgb3V0IGluIGZ1bGwuCi0gICAgICAgICAgUGF0dGVybi1tYXRjaGluZyBjaGFyYWN0ZXJzIHNo b3VsZCBub3QgYmUgaW5jbHVkZWQgYXMgcGFydCBvZgotICAgICAgICAgIHRoZSBrZXl3b3JkLiBU aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIHRhYmxlIGVsZW1lbnQKLSAgICAg ICAgICB0aGF0IHVuaXF1ZWx5IG1hdGNoZXMgdGhlIGdpdmVuIGtleXdvcmQsIG9yIC0xIGlmIG5v bmUgbWF0Y2gsIG9yCi0gICAgICAgICAgLTIgaWYgbW9yZSB0aGFuIDEgbWF0Y2guCi0KLSAgIEEg InRhYmxlIiBpcyBhbiBhcnJheSB0aGF0IGlzIHNvcnRlZCBpbiBsZXhpY2FsIG9yZGVyOyBlYWNo IG9mIGl0cwotICAgZWxlbWVudHMgbWF5IGNvbnRhaW4gbXVsdGlwbGUgZmllbGRzLCBkZWxpbWl0 ZWQgYnkgdGhlIGdpdmVuIGRlbGltaXRlcgotICAgY2hhcmFjdGVyIG9yLCBpZiBubyBkZWxpbWl0 ZXIgaXMgc3BlY2lmaWVkLCBhIGNvbG9uICg6KS4KLQotICAgVGhlIFxmYXJyYXlsb29rKCkgZnVu Y3Rpb24gZG9lcyBleGFjdGx5IHdoYXQgeW91IHRlbGwgaXQuIElmIHlvdSBnaXZlCi0gICBpdCBh IHBhdHRlcm4gdGhhdCBkb2VzIG5vdCBpbmNsdWRlIHdpbGRjYXJkIGNoYXJhY3RlcnMgKHN1Y2gg YXMgKiwgPywKLSAgIGV0YyksIGl0IHJlcXVpcmVzIGFuIGV4YWN0IG1hdGNoLiBGb3IgZXhhbXBs ZToKLQotICBcZmFycmF5bG9vayhvb2ZhLCZhKQotCi0gICBzZWFyY2hlcyBmb3IgdGhlIGZpcnN0 IGVsZW1lbnQgb2YgXCZhW10gd2hvc2UgdmFsdWUgaXMgIm9vZmEiLiBCdXQ6Ci0KLSAgXGZhcnJh eWxvb2sob29mYSosJmEpCi0KLSAgIGZpbmRzIHRoZSBmaXJzdCBlbGVtZW50IHdob3NlIHZhbHVl IHN0YXJ0cyB3aXRoICJvb2ZhIiwgYW5kOwotCi0gIFxmYXJyYXlsb29rKCpvb2ZhLCZhKQotCi0g ICBmaW5kcyB0aGUgZmlyc3QgZWxlbWVudCB3aG9zZSB2YWx1ZSBlbmRzIHdpdGggIm9vZmEiLCBh bmQ7Ci0KLSAgXGZhcnJheWxvb2soKm9vZmEqLCZhKQotCi0gICBmaW5kcyB0aGUgZmlyc3QgZWxl bWVudCB3aG9zZSB2YWx1ZSBjb250YWlucyAib29mYSIuCi0KLSAgIEhlcmUncyBhIHNpbXBsZSBk ZW1vbnN0cmF0aW9uIG9mIGxvb2tpbmcgdXAgcGF0dGVybnMgaW4gYXJyYXlzOgotCi0gIGxvY2Fs IFwmYVtdIFwleCBcJW4KLSAgZGVjbGFyZSBcJmFbXSA9IHplcm8gb25lIHR3byB0aHJlZSBmb3Vy IGZpdmUgc2l4IHNldmVuIGVpZ2h0IG5pbmUgdGVuCi0gIHdoaWxlIHRydWUgewotICAgICAgLlwl eCA9IDEKLSAgICAgIC5cJW4gPSAwCi0gICAgICBhc2sgXCVhIHsgUGF0dGVybj8gfQotICAgICAg aWYgbm90IGRlZiBcJWEgZXhpdCAwIERvbmUuCi0gICAgICB3aGlsZSA8PSBcJXggXGZkaW0oJmEp IHsKLSAgICAgICAgICAuXCV4IDo9IFxmYXJyYXlsb29rKFwlYSwmYVtcJXhdKQotICAgICAgICAg IGlmICggPCBcJXggMCApIGJyZWFrCi0gICAgICAgICAgZWNobyBcZmxwYWQoXCV4LDMpLiBcJmFb XCV4XQotICAgICAgICAgIGluY3JlbWVudCBcJXgKLSAgICAgICAgICBpbmNyZW1lbnQgXCVuCi0g ICAgICB9Ci0gICAgICBpZiAoIDwgXCVuIDEgKSBlY2hvIFBhdHRlcm4gbm90IGZvdW5kIC0gIlwl YSIKLSAgfQotCi0gICBUaGUgYXJyYXkgbmVlZCBub3QgYmUgc29ydGVkLiBXaGVuIGEgcGF0dGVy biBpcyBnaXZlbiwgYSBzZWFyY2ggaXMKLSAgIHBlcmZvcm1lZDsgaWYgdGhlcmUgaXMgYSBtYXRj aCwgdGhlIG1hdGNoaW5nIGVsZW1lbnQncyBpbmRleCBhbmQgdGhlCi0gICBlbGVtZW50IGl0c2Vs ZiBhcmUgcHJpbnRlZCwgYW5kIHRoZSBzZWFyY2ggYmVnaW5zIGFnYWluIGF0IHRoZSBuZXh0Ci0g ICBlbGVtZW50LiBUaHVzIGVhY2ggbWF0Y2hpbmcgZWxlbWVudCBpcyBwcmludGVkLiBJZiBub25l IG1hdGNoLCB0aGUKLSAgICJQYXR0ZXJuIG5vdCBmb3VuZCIgbWVzc2FnZSBpcyBwcmludGVkLiBU aGUgcHJvY2VzcyByZXBlYXRzIGZvciBhcyBtYW55Ci0gICBwYXR0ZXJucyBhcyB0aGUgdXNlciB3 YW50cyB0byB0eXBlLCBhbmQgdGVybWluYXRlcyB3aGVuIHRoZSB1c2VyIHR5cGVzCi0gICBhbiBl bXB0eSBwYXR0ZXJuLgotCi0gICBOb3cgbGV0J3MgYnVpbGQgYSBsaXR0bGUgY29tbWFuZCBwYXJz ZXIsIGNvbnNpc3Rpbmcgb2YgYSBrZXl3b3JkIHRhYmxlLAotICAgYW5kIGEgbG9vcCB0byBsb29r IHVwIHRoZSB1c2VyJ3MgY29tbWFuZHMgaW4gaXQgd2l0aCBcZnRhYmxlbG9vaygpLiBJbgotICAg dGhpcyBjYXNlIHRoZSBhcnJheSBlbGVtZW50cyBoYXZlICJmaWVsZHMiIHNlcGFyYXRlZCBieSBj b2xvbiAoOikgLS0gYQotICAga2V5d29yZCBhbmQgYSB2YWx1ZS4gS2V5d29yZCB0YWJsZXMgbXVz dCBiZSBzb3J0ZWQgaWYgXHRhYmxlbG9vaygpIGlzCi0gICB0byB3b3JrIHJpZ2h0LCBzbyBhZnRl ciBkZWNsYXJpbmcgYW5kIGluaXRpYWxpemluZyB0aGUgdGFibGUgYXJyYXksIHdlCi0gICBzb3J0 IGl0LgotCi0gIGxvY2FsIFwma1tdIFwlYSBcJWkgXCVuCi0KLSAgYXJyYXkgZGVjbGFyZSBcJmtb XSA9IGRyaXZlOjkgZG86OCBkaXNjdXNzOjcgbGl2ZTo2IHNwZW5kOjUgaGVscDo0IHF1aXQ6MAot Ci0gIGFycmF5IHNvcnQgJmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgTWFrZSBzdXJl IGFycmF5IGlzIHNvcnRlZAotICBlY2hvIFR5cGUgImhlbHAiIGZvciBoZWxwLiAgICAgICAgICAg ICAgICA7IFByaW50IGdyZWV0aW5nICYgaW5zdHJ1Y3Rpb25zCi0KLSAgd2hpbGUgdHJ1ZSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBMb29wIHRvIGdldCBjb21tYW5kcwotICAgICAg dW5kZWZpbmUgXCVhCi0gICAgICB3aGlsZSBub3QgZGVmaW5lZCBcJWEgeyAgICAgICAgICAgICAg IDsgR2V0IGEgY29tbWFuZAotICAgICAgICAgIGFzayBcJWEgeyBDb21tYW5kPyB9Ci0gICAgICB9 Ci0gICAgICAuXCVuIDo9IFxmdGFibGVsb29rKFwlYSwmaykgICAgICAgICAgIDsgTG9vayB1cCB0 aGUgY29tbWFuZAotICAgICAgc3dpdGNoIFwlbiB7ICAgICAgICAgICAgICAgICAgICAgICAgICA7 IEhhbmRsZSBlcnJvcnMKLSAgICAgICAgOi0xLCBlY2hvIE5vdCBmb3VuZCAtICJcJWEiICAgICAg ICAgOyBEb2Vzbid0IG1hdGNoCi0gICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgOi0yLCBl Y2hvIEFtYmlndW91cyAtICJcJWEiICAgICAgICAgOyBNYXRjaGVzIHRvbyBtYW55Ci0gICAgICAg ICAgICAgY29udGludWUKLSAgICAgIH0KLSAgICAgIHN3aXRjaCBcZndvcmQoXCZrW1wlbl0sMikg eyAgICAgICAgICAgOyBEaXNwYXRjaCBhY2NvcmRpbmcgdG8gdmFsdWUKLSAgICAgICAgIDo5LCBl Y2hvIERyaXZpbmcuLi4sIGJyZWFrCi0gICAgICAgICA6OCwgZWNobyBEb2luZy4uLiwgYnJlYWsK LSAgICAgICAgIDo3LCBlY2hvIERpc2N1c3NpbmcuLi4sIGJyZWFrCi0gICAgICAgICA6NiwgZWNo byBMaXZpbmcuLi4sIGJyZWFrCi0gICAgICAgICA6NSwgZWNobyBTcGVuZGluZy4uLiwgYnJlYWsK LSAgICAgICAgIDo0LCBlY2hvIHsgQ29tbWFuZHMgKG1heSBiZSBhYmJyZXZpYXRlZCk6fQotICAg ICAgICAgICAgIGZvciBcJWkgMSBcZmRpbSgmaykgMSB7Ci0gICAgICAgICAgICAgICAgZWNobyB7 ICBcJWkuIFxmd29yZChcJmtbXCVpXSwxKSB9Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICAg IGJyZWFrCi0gICAgICAgICA6MCwgZXhpdCAwIEJ5ZSEKLSAgICAgICAgIDpkZWZhdWx0LCBzdG9w IDEgSW50ZXJuYWwgZXJyb3IKLSAgICAgIH0KLSAgfQotCi0gICBJbiB0aGlzIGV4YW1wbGUsIGtl eXdvcmRzIGFyZSAiZHJpdmUiLCAiZG8iLCAiZGlzY3VzcyIsIGV0YywgYW5kIHRoZWlyCi0gICB2 YWx1ZXMgYXJlIHVuaXF1ZSBudW1iZXJzICh2YWx1ZXMgbmVlZCBub3QgYmUgbnVtYmVycywgYW5k IHRoZXJlIG5lZWQKLSAgIG5vdCBiZSBvbmx5IG9uZSB2YWx1ZSAtLSB0aGVyZSBjYW4gYmUgMCwg MSwgMiwgb3IgbW9yZSBvZiB0aGVtKS4gVGhlCi0gICB1c2VyIHR5cGVzIGEgY29tbWFuZCwgd2hp Y2ggY2FuIGJlIHRoZSB3aG9sZSB3b3JkIChsaWtlICJoZWxwIikgb3IgYW55Ci0gICBhYmJyZXZp YXRpb24gKGxpa2UgImhlbCIsICJoZSIsIG9yIGp1c3QgImgiKS4gSWYgdGhpcyBkb2VzIG5vdCBt YXRjaAotICAgYW55IGtleXdvcmRzLCBcZnRhYmxlbG9vaygpIHJldHVybnMgLTE7IGlmIGl0IG1h dGNoZXMgbW9yZSB0aGFuIG9uZSAoYXMKLSAgIHdvdWxkICJkIiksIGl0IHJldHVybnMgLTIuIE90 aGVyd2lzZSB0aGUgYXJyYXkgaW5kZXggaXMgcmV0dXJuZWQsIDEgb3IKLSAgIGhpZ2hlci4KLQot ICAgR2l2ZW4gdGhlIGFycmF5IGluZGV4IFwlbiwgd2UgY2FuIGdldCB0aGUgdGFibGUgdmFsdWVz IGFzIGZvbGxvd3M6Ci0KLSAgXGZ3b3JkKFwma1tcJW5dLDEpIGlzIHRoZSBrZXl3b3JkIChmaXJz dCBmaWVsZCkKLSAgXGZ3b3JkKFwma1tcJW5dLDIpIGlzIHRoZSB2YWx1ZSAoc2Vjb25kIGZpZWxk LCBpbiB0aGlzIGNhc2UgYSBudW1iZXIpCi0KLSAgIEluIG91ciBleGFtcGxlLCB3ZSB1c2UgdGhl IHZhbHVlIChudW1iZXIpIGFzIHRoZSBTV0lUQ0ggdmFyaWFibGUuIEFzCi0gICBub3RlZCwgXGZh YmxlbG9vaygpIGV4cGVjdHMgdGhlIGFycmF5IGVsZW1lbnRzIHRvIGNvbnRhaW4gbXVsdGlwbGUK LSAgIGZpZWxkcyBzZXBhcmF0ZWQgYnkgY29sb24gKDopIChvciBvdGhlciBjaGFyYWN0ZXIgdGhh dCB5b3Ugc3BlY2lmeSwKLSAgIGUuZy4gXGZ0YWJsZWxvb2soXCVhLCZhLF4pKSBhbmQgd2hlbiBt YXRjaGluZyB0aGUga2V5d29yZCwgaWdub3JlcyB0aGUKLSAgIGZpcnN0IGRlbGltaXRlciBhbmQg ZXZlcnl0aGluZyBhZnRlciBpdC4KLQotICAgIDcuMTAuOC4gSGludHMgZm9yIFVzaW5nIEFycmF5 cwotCi0gICBDIHByb2dyYW1tZXJzIGFyZSBhY2N1c3RvbWVkIHRvIG91dC1vZi1ib3VuZHMgYXJy YXkgcmVmZXJlbmNlcyBjYXVzaW5nCi0gICBjb3JlIGR1bXBzIG9yIHdvcnNlLiBJbiBDLUtlcm1p dDoKLQotICAgICAqIEEgcmVmZXJlbmNlIHRvIGFuIGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgZWxl bWVudCByZXR1cm5zIHRoZSBlbXB0eQotICAgICAgIHN0cmluZy4KLSAgICAgKiBBbiBhdHRlbXB0 IHRvIHNldCB0aGUgdmFsdWUgb2YgYW4gYXJyYXkgZWxlbWVudCB0aGF0IGlzIG91dCBvZgotICAg ICAgIGJvdW5kcyBvciB0aGF0IGhhcyBub3QgYmVlbiBkZWNsYXJlZCBzaW1wbHkgZmFpbHMuCi0K LSAgIEMgcHJvZ3JhbW1lcnMgZXhwZWN0IGFuIGFycmF5IG9mIHNpemUgbiB0byBoYXZlIGVsZW1l bnRzIDAgdGhyb3VnaCBuLTEuCi0gICBGb3J0cmFuIHByb2dyYW1tZXJzIGV4cGVjdCB0aGUgc2Ft ZSBhcnJheSB0byBoYXZlIGVsZW1lbnRzIDEgdGhyb3VnaCBuLgotICAgQy1LZXJtaXQgYWNjb21t b2RhdGVzIGJvdGggc3R5bGVzOyB3aGVuIHlvdSBkZWNsYXJlIGFuIGFycmF5IG9mIHNpemUgbiwK LSAgIGl0IGhhcyBuKzEgZWxlbWVudHMsIDAgdGhyb3VnaCBuLCBhbmQgeW91IGNhbiB1c2UgdGhl IGFycmF5IGluIHlvdXIKLSAgIGFjY3VzdG9tZWQgbWFubmVyLCAwLWJhc2VkIG9yIDEtYmFzZWQu Ci0KLSAgIEhvd2V2ZXIsIG5vdGUgdGhhdCBDLUtlcm1pdCBoYXMgY2VydGFpbiBiaWFzZXMgdG93 YXJkcyAxLWJhc2VkIGFycmF5czoKLQotICAgICAqIEFzc2lnbm1lbnQgb2YgZmlsZSBsaXN0cyBz dGFydHMgd2l0aCBlbGVtZW50IDEgKFs2MTFdU2VjdGlvbgotICAgICAgIDcuMTAuMykuCi0gICAg ICogQXNzaWdubWVudCBieSBcZnNwbGl0KCkgc3RhcnRzIHdpdGggZWxlbWVudCAxIChbNjEyXVNl Y3Rpb24gNy4zKS4KLSAgICAgKiBBcnJheSBpbml0aWFsaXphdGlvbiBza2lwcyB0aGUgMHRoIGVs ZW1lbnQuIFRvIGluaXRpYWxpemUgYSAwLWJhc2VkCi0gICAgICAgYXJyYXksIHVzZSBzb21ldGhp bmcgbGlrZSB0aGlzOgotICBkZWNsYXJlIFwmYVszXSA9IG9uZSB0d28gdGhyZWUKLSAgLlwmYVsw XSA9IHplcm8KLQotICAgICAqIFRoZSBBUlJBWSBTT1JUIGNvbW1hbmQgc2tpcHMgdGhlIDB0aCBl bGVtZW50IHVubGVzcyB5b3UgaW5jbHVkZQotICAgICAgIC9SQU5HRTowCi0gICAgICogVGhlIFNI SUZUIGNvbW1hbmQgaWdub3JlcyBlbGVtZW50IDAgb2YgdGhlIFwmX1tdIGFycmF5LgotCi0gICBU aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBhbiBhcnJheSdzIGRpbWVuc2lvbmVkIHNpemUgYW5kIHRo ZSBudW1iZXIgb2YKLSAgIGVsZW1lbnRzIGluIHRoZSBhcnJheSBpcyBpbXBvcnRhbnQgd2hlbiBz b3J0aW5nLiBUbyBpbGx1c3RyYXRlOgotCi0gIGRlY2xhcmUgXCZhWzEwMF0gICAgICAgICAgICAg ICAgICA7IERlY2xhcmUgYXJyYXkgJmEgd2l0aCAxMDAgZWxlbWVudHMKLSAgZm9wZW4gL3JlYWQg XCVjIG9vZmEudHh0ICAgICAgICAgIDsgT3BlbiBhIGZpbGUKLSAgaWYgZmFpbC4uLgotICBmb3Ig XCVpIDEgXGZkaW0oJmEpIDEgeyAgICAgICAgICAgOyBSZWFkIHRoZSBmaWxlIGludG8gdGhlIGFy cmF5Ci0gICAgICBmcmVhZCBcJWMgXCZhW1wlaV0KLSAgICAgIGlmIGZhaWwgYnJlYWsKLSAgfQot ICBmY2xvc2UgXCVjCi0gIGlmID4gXCVpIFxmZGltKCZhKSBlbmQgMSBGaWxlIGhhcyB0b28gbWFu eSBsaW5lcyBmb3IgYXJyYXkuCi0gIC5cJW4gOjo9IFwlaSAtIDEKLSAgZWNobyBGaWxlIGhhcyBc JW4gbGluZShzKS4KLQotICAgTGV0J3Mgc2F5IHRoZSBmaWxlIGhhZCA5NSBsaW5lcy4gVGhpcyBs ZWF2ZXMgZWxlbWVudHMgOTYtMTAwIG9mIHRoZQotICAgYXJyYXkgZW1wdHkuIE5vdyBzdXBwb3Nl IHlvdSBzb3J0IHRoZSBhcnJheSBhbmQgd3JpdGUgb3V0IHRoZSByZXN1bHQ6Ci0KLSAgc29ydCAm YSAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgU29ydCB0aGUgd2hvbGUgYXJyYXkKLSAgZm9w ZW4gL3dyaXRlIFwlbyBvb2ZhLnR4dC5zb3J0ZWQgIDsgT3BlbiBhbiBvdXRwdXQgZmlsZQotICBp ZiBmYWlsIC4uLgotICBmb3IgXCVpIDEgXCVuIDEgeyAgICAgICAgICAgICAgICAgOyBXcml0ZSBv dXQgOTUgcmVjb3JkcwotICAgICAgZndyaXRlIC9saW5lIFwlbyBcJmFbXCVpXQotICAgICAgaWYg ZmFpbCBlbmQgMSBXcml0ZSBlcnJvcgotICB9Ci0gIGNsb3NlIHdyaXRlCi0KLSAgIFlvdSBtaWdo dCBiZSBzdXJwcmlzZWQgYXQgdGhlIGNvbnRlbnRzIG9mICJvb2ZhLnR4dC5zb3J0ZWQiIC0tIGZp dmUKLSAgIGVtcHR5IGVsZW1lbnRzLCA5Ni0xMDAsIGZsb2F0ZWQgdG8gdGhlIHRvcCBvZiB0aGUg YXJyYXkgaW4gdGhlIHNvcnQsCi0gICBhbmQgc2luY2UgeW91ciB3cml0ZSBsb29wIG9ubHkgaGFk IDk1IGl0ZXJhdGlvbnMsIHRoZSBmaW5hbCA1IGxpbmVzIG9mCi0gICB0aGUgc29ydGVkIGZpbGUg YXJlIGxvc3QuCi0KLSAgIFRoZXJlZm9yZSwgd2hlbiBkZWFsaW5nIHdpdGggcGFydGlhbGx5IGZp bGxlZCBhcnJheXMgLS0gZXNwZWNpYWxseSB3aGVuCi0gICBzb3J0aW5nIHRoZW0gLS0gcmVtZW1i ZXIgdG8gc3BlY2lmeSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzLiBBIGhhbmR5IHdheQotICAgb2Yg cmVjb3JkaW5nIGFuIGFycmF5J3MgInRydWUiIHNpemUgaXMgdG8gcHV0IGl0IGluIHRoZSAwdGgg ZWxlbWVudC4KLSAgIFRoYXQgd2F5LCBpdCAidHJhdmVscyB3aXRoIHRoZSBhcnJheSIuIFRvIGls bHVzdHJhdGUgKGNvbnRpbnVpbmcgdGhlCi0gICBwcmV2aW91cyBleGFtcGxlIGF0IHRoZSAiY2xv c2UgcmVhZCIgc3RhdGVtZW50KToKLQotICBjbG9zZSByZWFkCi0gIGlmID4gXCVpIFxmZGltKCZh KSBlbmQgMSBGaWxlIGhhcyB0b28gbWFueSBsaW5lcyBmb3IgYXJyYXkuCi0gIC5cJmFbMF0gOjo9 IFwlaSAtIDEgICAgIDsgQXNzaWduIG51bWJlciBvZiBsaW5lcyB0byBcJmFbMF0uCi0gIGVjaG8g RmlsZSBoYXMgXCZhWzBdIGxpbmUocykuCi0gIHNvcnQgL3JhbmdlOjE6XCZhWzBdICZhCi0gIG9w ZW4gd3JpdGUgb29mYS50eHQuc29ydGVkCi0gIGlmIGZhaWwgLi4uCi0gIGZvciBcJWkgMSBcJmFb MF0gMSB7Ci0gICAgICB3cml0ZWxuIGZpbGUgXCZhW1wlal0KLSAgICAgIGlmIGZhaWwgZW5kIDEg V3JpdGUgZXJyb3IKLSAgfQotICBjbG9zZSB3cml0ZQotCi0gICBOb3RlIHRoZSBTT1JUIHN3aXRj aCwgL1JBTkdFOjE6XCZhWzBdLiBUaGlzIGtlZXBzIHRoZSBzb3J0IDEtYmFzZWQsIGFuZAotICAg dXNlcyBlbGVtZW50IDAgb2YgdGhlIGFycmF5IGFzIGl0cyBzaXplIGluZGljYXRvci4KLQotICAg RmluYWxseSwgbm90ZSB0aGF0IGV2ZW4gdGhvdWdoIHNvbWUgY29tbWFuZHMgb3IgZnVuY3Rpb25z IG1pZ2h0IHB1dCBhCi0gICBzaXplIGluIGFycmF5IGVsZW1lbnQgMCwgbm8gYnVpbHQtaW4gZnVu Y3Rpb25zIG9yIGNvbW1hbmRzIGRlcGVuZCBvbiBhCi0gICBzaXplIGFjdHVhbGx5IGJlaW5nIHRo ZXJlLiBUaHVzIHlvdSBhcmUgcGVyZmVjdGx5IGZyZWUgdG8gcmVwbGFjZSB0aGUKLSAgIHNpemUg d2l0aCBzb21ldGhpbmcgZWxzZSBhbmQgdHJlYXQgdGhlIGFycmF5IGFzIDAtYmFzZWQuCi0KLSAg ICA3LjEwLjkuIERvLUl0LVlvdXJzZWxmIEFycmF5cwotCi0gICBLZXJtaXQncyBcJnhbXSBhcnJh eXMgYXJlIG5pY2UgYmVjYXVzZSBvZiB0aGUgYWNjb21wYW55aW5nIGJ1aWx0LWluCi0gICBmdW5j dGlvbmFsaXR5IC0tIEFSUkFZIGNvbW1hbmRzLCBidWlsdC1pbiBmdW5jdGlvbnMgdGhhdCBsb2Fk IGFuZAotICAgc2VhcmNoIGFycmF5cywgYXV0b21hdGljIGV2YWx1YXRpb24gb2YgYXJpdGhtZXRp YyBleHByZXNzaW9ucyB3aXRoaW4KLSAgIHRoZSBzdWJzY3JpcHQgYnJhY2tldHMsIGFuZCBzbyBv bi4gWWV0IHRoZXkgYWxzbyBoYXZlIGNlcnRhaW4KLSAgIGxpbWl0YXRpb25zOgotCi0gICAgMS4g RXhjZXB0IHdoZW4gY3JlYXRlZCBieSBkeW5hbWljIGxvYWRpbmcgKGUuZy4gYnkgXGZmaWxlcygp KSB0aGV5Ci0gICAgICAgbXVzdCBiZSBkZWNsYXJlZCBhbmQgZGltZW5zaW9uZWQgaW4gYWR2YW5j ZS4KLSAgICAyLiBJbmRpY2VzIG11c3QgYmUgbnVtZXJpYywgcG9zaXRpdmUsIGFuZCBpbiByYW5n ZS4KLSAgICAzLiBUaGVyZSBjYW4gYmUgb25seSBvbmUgZGltZW5zaW9uLiBNYXRyaWNlcyBvciBv dGhlcgotICAgICAgIGhpZ2hlci1kaW1lbnNpb25lZCBhcnJheXMgYXJlIG5vdCBhdmFpbGFibGUu Ci0KLSAgIEJ1dCBub25lIG9mIHRoaXMgaXMgdG8gc2F5IHlvdSBjYW4ndCBpbnZlbnQgYW55IGtp bmQgb2YgZGF0YSBzdHJ1Y3R1cmUKLSAgIHlvdSBsaWtlLiBJbiBbNjEzXVNlY3Rpb24gNy45LjIg eW91IGNhbiBzZWUgc29tZSBleGFtcGxlcy4gSGVyZSdzCi0gICBhbm90aGVyIChjb3VydGVzeSBv ZiBEYXQgVGh1YyBOZ3V5ZW4pLCBpbiB3aGljaCBhIHBhaXIgb2YgbWF0cmljZXMgaXMKLSAgIGNy ZWF0ZWQgYW5kIHRoZW4gYWRkZWQ6IG5vIGRpbWVuc2lvbmluZyBuZWNlc3NhcnkuCi0KLSAgLnJv dyA9IDQKLSAgLmNvbCA9IDkKLQotICA7IE1BQ1JPIFRPIFBSSU5UIEEgTUFUUklYCi0gIGRlZmlu ZSBQTUFUUklYIHsKLSAgICAgIGVjaG8gTWF0cml4IFwlMToKLSAgICAgIGZvciBcJXIgMSBcbShy b3cpIDEgewotICAgICAgICAgIGZvciBcJWMgMSBcbShjb2wpIDEgewotICAgICAgICAgICAgICB4 ZWNobyBcZmxwYWQoXG0oXCUxW1wlcl1bXCVjXSksNCkKLSAgICAgICAgICB9Ci0gICAgICAgICAg ZWNobwotICAgICAgfQotICAgICAgZWNobwotICB9Ci0gIDsgQ1JFQVRFIE1BVFJJQ0VTIEEgQU5E IEIKLSAgZm9yIFwlciAxIFxtKHJvdykgMSB7Ci0gICAgICBmb3IgXCVjIDEgXG0oY29sKSAxIHsK LSAgICAgICAgICBfZXZhbCBBW1wlcl1bXCVjXSBcJXIgKyBcJWMKLSAgICAgICAgICBfZXZhbCBC W1wlcl1bXCVjXSBcJXIgKiBcJWMKLSAgICAgIH0KLSAgfQotICA7IENSRUFURSBNQVRSSVggQyA9 IFNVTSBPRiBNQVRSSVggQSBBTkQgTUFUUklYIEIKLSAgZm9yIFwlciAxIFxtKHJvdykgMSB7Ci0g ICAgICBmb3IgXCVjIDEgXG0oY29sKSAxIHsKLSAgICAgICAgICBfZXZhbCBDW1wlcl1bXCVjXSBc bShBW1wlcl1bXCVjXSkgKyBcbShCW1wlcl1bXCVjXSkKLSAgICAgIH0KLSAgfQotICBwbWF0cml4 IEEgIDsgUHJpbnQgTWF0cml4IEEKLSAgcG1hdHJpeCBCICA7IFByaW50IE1hdHJpeCBCCi0gIHBt YXRyaXggQyAgOyBQcmludCBNYXRyaXggQwotCi0gICBJbiB0aGUgZXhhbXBsZSwgd2UgdXNlIG1h dHJpeC1saWtlIG5vdGF0aW9uIHRvIGNyZWF0ZSBtYWNyb3Mgd2l0aCBuYW1lcwotICAgbGlrZSAi QVsxXVsxXSIsICJCWzNdWzddIiwgYW5kIHNvIG9uLgotCi0gICAgNy4xMC4xMC4gQXNzb2NpYXRp dmUgQXJyYXlzCi0KLSAgIEFuIGFzc29jaWF0aXZlIGFycmF5IGlzIGEgc3BlY2lhbCBraW5kIG9m IERvLUl0LVlvdXJzZWxmIGFycmF5LiBJdAotICAgZGlmZmVycyBmcm9tIGEgcmVndWxhciBhcnJh eSBpbiB0aGF0IGl0cyBpbmRpY2VzIG5lZWQgbm90IGJlIG51bWJlcnMgLS0KLSAgIHRoZXkgY2Fu IGJlIGFueXRoaW5nIGF0IGFsbCAtLSB3b3JkcywgZmlsZW5hbWVzLCBuYW1lcyBvZiBtb250aHMs IGFueQotICAgY2hhcmFjdGVyIHN0cmluZyBhdCBhbGwsIGFuZCB0aGF0IGl0IGRvZXNuJ3QgaGF2 ZSB0byBiZSAoYW5kIGluIGZhY3QKLSAgIGNhbid0IGJlKSBkZWNsYXJlZC4gQW4gYXNzb2NpYXRp dmUgYXJyYXkgZWxlbWVudCBpcyBzaW1wbHkgYSBtYWNybwotICAgd2hvc2UgbmFtZSBlbmRzIHdp dGggYW4gaW5kZXggZW5jbG9zZWQgaW4gYW5nbGUgYnJhY2tldHMsIGZvciBleGFtcGxlOgotCi0g IGZpbGU8b29mYS50eHQ+Ci0KLSAgIE1vcmUgZm9ybWFsbHk6Ci0KLSAgYmFzZW5hbWU8aW5kZXg+ Ci0KLSAgIEFuIGFzc29jaWF0aXZlIGFycmF5IGlzIGEgY29sbGVjdGlvbiBvZiBhbGwgYXNzb2Np YXRpdmUgYXJyYXkgZWxlbWVudHMKLSAgIHRoYXQgaGF2ZSB0aGUgc2FtZSBiYXNlbmFtZS4gQW55 IG51bWJlciBvZiBhc3NvY2lhdGl2ZSBhcnJheXMsIGVhY2gKLSAgIHdpdGggYW55IG51bWJlciBv ZiBlbGVtZW50cywgY2FuIGV4aXN0IGF0IHRoZSBzYW1lIHRpbWUuCi0KLSAgIEFuIGFzc29jaWF0 aXZlIGFycmF5IGVsZW1lbnQgY2FuIGJlIGFzc2lnbmVkIGEgdmFsdWUsIHN1Y2ggYXMgIjEiLCBq dXN0Ci0gICBsaWtlIGFueSBvdGhlciBtYWNybzoKLQotICBkZWZpbmUgZmlsZTxvb2ZhLnR4dD4g MSAgICAgOyBHaXZlICJmaWxlPG9vZmEudHh0PiIgdGhlIHZhbHVlICIxIi4KLQotICAgb3I6Ci0K LSAgYXNzaWduIGZpbGU8b29mYS50eHQ+IFwlYSAgIDsgR2l2ZSBpdCB0aGUgdmFsdWUgb2YgdGhl IHZhcmlhYmxlIFwlYS4KLQotICAgSG93ZXZlciwgc2luY2UgYW4gYXNzb2NpYXRpdmUgYXJyYXkg ZWxlbWVudCBpcyBhIG1hY3JvLCBpdCBtYXkgbm90IGhhdmUKLSAgIGFuIGVtcHR5IChudWxsKSB2 YWx1ZSwgc2luY2UgYXNzaWduaW5nIGFuIGVtcHR5IHZhbHVlIHRvIGEgbWFjcm8KLSAgIHVuZGVm aW5lcyB0aGUgbWFjcm8uCi0KLSAgIFlvdSBjYW4gcmVmZXIgdG8gdGhlIHZhbHVlIG9mIGFuIGFz c29jaWF0aXZlIGFycmF5IGVsZW1lbnQgdXNpbmcgdGhlCi0gICBmYW1pbGlhciBub3RhdGlvbiBm b3IgbWFjcm8gdmFsdWVzOgotCi0gIGVjaG8gXG0oZmlsZTxvb2ZhLnR4dD4pICAgICA7IEVjaG8g dGhlIHZhbHVlIG9mICJmaWxlPG9vZmEudHh0PiIuCi0KLSAgIEFzc29jaWF0aXZlIGFycmF5cyBh cmUgbW9zdCB1c2VmdWwsIGhvd2V2ZXIsIHdoZW4gdGhlIHZhbHVlIG9mIHRoZQotICAgaW5kZXgg aXMgYSB2YXJpYWJsZS4gSW4gdGhhdCBjYXNlLCB5b3UgbXVzdCB1c2UgdGhlICJoaWRkZW4iIGZv cm1zIG9mCi0gICB0aGUgREVGSU5FIG9yIEFTU0lHTiBjb21tYW5kcyB0aGF0IGV2YWx1YXRlIHRo ZSBtYWNybyBuYW1lIGJlZm9yZQotICAgbWFraW5nIHRoZSBhc3NpZ25tZW50IChzZWUgWzYxNF1V c2luZyBDLUtlcm1pdCwgcGFnZSA0NTcpLiBFeGFtcGxlOgotCi0gIGRlZmluZSBcJWYgb29mYS50 eHQKLSAgX2RlZmluZSBmaWxlPFwlZj4gMQotICBlY2hvIGZpbGU8XCVmPiA9IFxtKGZpbGU8XCVm PikKLQotICAgcHJpbnRzOgotCi0gIGZpbGU8b29mYS50eHQ+ID0gMQotCi0gICBhbmQgdGhlbjoK LQotICBfaW5jcmVtZW50IGZpbGU8XCVmPgotICBlY2hvIGZpbGU8XCVmPiA9IFxtKGZpbGU8XCVm PikKLQotICAgcHJpbnRzOgotCi0gIGZpbGU8b29mYS50eHQ+ID0gMgotCi0gICBXaGF0IGFyZSBh c3NvY2lhdGl2ZSBhcnJheXMgZ29vZCBmb3I/IFRoZSBjbGFzc2ljIGV4YW1wbGUgaXMgIndvcmQK LSAgIGNvdW50cyI6IGZpbmRpbmcgdGhlIG51bWJlciBvZiB0aW1lcyBlYWNoIHdvcmQgaXMgdXNl ZCBpbiBhIHRleHQKLSAgIHdpdGhvdXQga25vd2luZyBpbiBhZHZhbmNlIHdoYXQgdGhlIHdvcmRz IGFyZS4gV2l0aG91dCBhc3NvY2lhdGl2ZQotICAgYXJyYXlzLCB5b3VyIHByb2dyYW0gd291bGQg aGF2ZSB0byBidWlsZCBhIHRhYmxlIG9mIHNvbWUga2luZCwgYW5kCi0gICBldmVyeSB0aW1lIGEg d29yZCB3YXMgZW5jb3VudGVyZWQsIGxvb2sgaXQgdXAgaW4gdGhlIHRhYmxlIHRvIGZpbmQgaXRz Ci0gICBwb3NpdGlvbiBhbmQgY291bnRlciwgb3IgYWRkIGl0IHRvIHRoZSB0YWJsZSBpZiBpdCB3 YXNuJ3QgZm91bmQgLS0gYQotICAgdGltZS1jb25zdW1pbmcgYW5kIGxhYm9yaW91cyBwcm9jZXNz LiBBc3NvY2lhdGl2ZSBhcnJheXMsIGhvd2V2ZXIsIGxldAotICAgeW91IHVzZSB0aGUgd29yZCBp dHNlbGYgYXMgdGhlIHRhYmxlIGluZGV4IGFuZCB0aGVyZWZvcmUgc2lkZXN0ZXAgYWxsCi0gICB0 aGUgdGFibGUgYnVpbGRpbmcgYW5kIGxvb2t1cHMuCi0KLSAgIExldCdzIHdvcmsgdGhyb3VnaCBh IHByYWN0aWNhbCBleGFtcGxlLiBTdXBwb3NlIHlvdSBoYXZlIGEKLSAgIGZpbGUtdHJhbnNmZXIg bG9nIGluIHdoaWNoIGVhY2ggbGluZSBpcyBjb21wb3NlZCBvZiBhIG51bWJlciBvZgotICAgYmxh bmstc2VwYXJhdGVkIGZpZWxkcywgYW5kIHRoZSA5dGggZmllbGQgaXMgYSBmaWxlbmFtZSAod2hp Y2ggaGFwcGVucwotICAgdG8gYmUgdGhlIGZvcm1hdCBvZiBjZXJ0YWluIEZUUCBzZXJ2ZXIgbG9n cywgYXMgd2VsbCBhcyBvZiBDLUtlcm1pdCdzCi0gICBuZXcgRlRQLWZvcm1hdCB0cmFuc2FjdGlv biBsb2csIGRlc2NyaWJlZCBpbiBbNjE1XVNlY3Rpb24gNC4xNy4yKSwgZm9yCi0gICBleGFtcGxl OgotCi0gIFdlZCBKdWwgMTQgMDk6MzU6MzEgMTk5OSAyMiB4eC5taXQuZWR1IDEzNDEyIC9wdWIv ZnRwL21tL2ludHJvLnR4dCAuLi4uCi0KLSAgIGFuZCB5b3Ugd2FudCB0byBmaW5kIG91dCBob3cg bWFueSB0aW1lcyBlYWNoIGZpbGUgd2FzIHRyYW5zZmVycmVkLiBUaGUKLSAgIGZvbGxvd2luZyBj b2RlIGJ1aWxkcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSwgZmlsZTw+LCBjb250YWluaW5nIHRoZQot ICAgY291bnRzIGZvciBlYWNoIGZpbGU6Ci0KLSAgbG9jYWwgbmFtZSBsaW5lIG1heCBcJWMgXCVu ICAgICAgICAgIDsgRGVjbGFyZSBsb2NhbCB2YXJpYWJsZXMKLSAgZm9wZW4gL3JlYWQgXCVjIC92 YXIvbG9nL2Z0cGQubG9nICAgIDsgT3BlbiB0aGUgbG9nIGZpbGUgKFs2MTZdU2VjdGlvbiAxLjIy KQotICBpZiBmYWlsIGV4aXQgMSBDYW4ndCBvcGVuIGxvZyAgICAgICAgOyBDaGVjawotICB3aGls ZSB0cnVlIHsgICAgICAgICAgICAgICAgICAgICAgICAgOyBMb29wIGZvciBlYWNoIHJlY29yZAot ICAgICAgZnJlYWQgL2xpbmUgXCVjIGxpbmUgICAgICAgICAgICAgOyBSZWFkIGEgbGluZQotICAg ICAgaWYgZmFpbCBicmVhayAgICAgICAgICAgICAgICAgICAgOyBDaGVjayBmb3IgZW5kIG9mIGZp bGUKLSAgICAgIC5uYW1lIDo9IFxmd29yZChcbShsaW5lKSw5LHsgfSkgIDsgR2V0IDl0aCBmaWVs ZCA9IGZpbGVuYW1lIChTZWMgNy4zKQotICAgICAgX2luY3JlbWVudCBmaWxlPFxtKG5hbWUpPiAg ICAgICAgOyBJbmNyZW1lbnQgaXRzIGNvdW50ZXIgKFNlYyA3LjkuMikKLSAgfQotICBmY2xvc2Ug XCVjICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBDbG9zZSBmaWxlIHdoZW4gZG9uZS4KLQot ICAgTm90ZSB0aGF0IF9JTkNSRU1FTlQgKGFuZCBJTkNSRU1FTlQsIGFuZCBbX11ERUNSRU1FTlQp IHRyZWF0IGFuIGVtcHR5Ci0gICAoaS5lLiBub25leGlzdGVudCkgdmFyaWFibGUgYXMgaGF2aW5n IGEgdmFsdWUgb2YgMCwgYW5kIHRoZXJlZm9yZQotICAgY3JlYXRlcyB0aGUgdmFyaWFibGUgd2l0 aCBhIHZhbHVlIG9mIDEuCi0KLSAgIEF0IHRoaXMgcG9pbnQsIGlmIHlvdSB0b2xkIEtlcm1pdCB0 byAic2hvdyBtYWNybyBmaWxlPCIsIGl0IHdvdWxkIGxpc3QKLSAgIHRoZSBhc3NvY2lhdGl2ZSBh cnJheS4gQnV0IHNpbmNlIHlvdSBkb24ndCBuZWNlc3NhcmlseSBrbm93IHRoZSBuYW1lcwotICAg b2YgdGhlIGZpbGVzIGluIHRoZSBhcnJheSwgb3IgZXZlbiBob3cgbWFueSBlbGVtZW50cyBhcmUg aW4gdGhlIGFycmF5LAotICAgaG93IGNhbiB5b3UgdXNlIGl0IGluIGEgc2NyaXB0IHByb2dyYW0/ Ci0KLSAgIFRoZSBpZGVhIG9mIGNyZWF0aW5nIG1hY3JvIG5hbWVzIHRoYXQgaW5jbHVkZSBjaGFy YWN0ZXItc3RyaW5nIGluZGljZXMKLSAgIGVuY2xvc2VkIGluIGFuZ2xlIGJyYWNrZXRzIGlzIHBl cmZlY3RseSBhcmJpdHJhcnkgYW5kIGRvZXNuJ3QgZGVwZW5kIG9uCi0gICBhbnkgS2VybWl0IGZl YXR1cmVzIHRoYXQgd2VyZW4ndCBhbHJlYWR5IHRoZXJlIC0tIHdlIGNvdWxkIGp1c3QgYXMKLSAg IGVhc2lseSBoYXZlIHVzZWQgc29tZSBvdGhlciBub3RhdGlvbiwgc3VjaCBhcyAiZmlsZVtpbmRl eF0iLAotICAgImZpbGU6aW5kZXgiLCBvciAiZmlsZS5pbmRleCIsIGFuZCB0aGUgY29kZSBhYm92 ZSB3b3VsZCBoYXZlIHdvcmtlZAotICAganVzdCBhcyB3ZWxsICh3aXRoIHRoZSBjb3JyZXNwb25k aW5nIHN5bnRheCBhZGp1c3RtZW50cykuIEJ1dCB0byBiZQotICAgYWJsZSB0byB1c2UgYW4gYXNz b2NpYXRpdmUgYXJyYXkgaW4gYSBwcm9ncmFtIGFmdGVyIHRoZSBhcnJheSBpcyBidWlsdCwKLSAg IHdlIG5lZWQgYSBtZXRob2Qgb2YgYWNjZXNzaW5nIGFsbCBpdHMgZWxlbWVudHMgd2l0aG91dCBr bm93aW5nIGluCi0gICBhZHZhbmNlIHdoYXQgdGhleSBhcmUuIFRoYXQncyB3aGVyZSB0aGUgY2hv c2VuIG5vdGF0aW9uIGNvbWVzIGluLgotCi0gICBGaXJzdCBvZiBhbGwsIGFueSBtYWNybyBuYW1l IHRoYXQgZW5kcyB3aXRoICI8eHh4PiIgKHdoZXJlICJ4eHgiIGlzIGFueQotICAgc3RyaW5nKSBp cyBjYXNlIHNlbnNpdGl2ZSwgdW5saWtlIGFsbCBvdGhlciBtYWNybyBuYW1lcywgd2hpY2ggYXJl IGNhc2UKLSAgIGluZGVwZW5kZW50LiBUbyBpbGx1c3RyYXRlLCAiZmlsZTxvb2ZhLnR4dD4iIGFu ZCAiZmlsZTxPT0ZBLlRYVD4iIGFyZQotICAgdHdvIGRpc3RpbmN0IG1hY3Jvcywgd2hlcmVhcyAi T09GQSIsICJPb2ZhIiwgYW5kICJvb2ZhIiwgd2hlbiB1c2VkIGFzCi0gICBtYWNybyBuYW1lcywg YXJlIGFsbCB0aGUgc2FtZS4KLQotICAgU2Vjb25kLCB0aGUgbmV3IFxmYWFjb252ZXJ0KCkgZnVu Y3Rpb24gY29udmVydHMgYW4gYXNzb2NpYXRpdmUgYXJyYXkKLSAgICh0aGF0IGlzLCBhbGwgbWFj cm9zIHdpdGggbmFtZXMgb2YgdGhlIGZvcm0gImJhc2U8aW5kZXg+IiB0aGF0IGhhdmUgdGhlCi0g ICBzYW1lICJiYXNlIiBwYXJ0KSBpbnRvIGEgcGFpciBvZiByZWd1bGFyIGFycmF5cyBhbmQgcmV0 dXJucyB0aGUgbnVtYmVyCi0gICBvZiBlbGVtZW50czoKLQotICBcZmFhY29udmVydChuYW1lLCZh WywmYl0pCi0KLSAgICJuYW1lIiBpcyB0aGUgbmFtZSBvZiB0aGUgYXNzb2NpYXRpdmUgYXJyYXks IHdpdGhvdXQgdGhlIGFuZ2xlIGJyYWNrZXRzCi0gICBvciBpbmRleCAoImZpbGUiIGluIG91ciBl eGFtcGxlKS4KLQotICAgVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiBhIHJlZ3Vs YXIgYXJyYXkgaW4gd2hpY2ggdG8gc3RvcmUKLSAgIHRoZSBpbmRpY2VzIG9mIHRoZSBhc3NvY2lh dGl2ZSBhcnJheSAoZmlsZW5hbWVzIGluIG91ciBleGFtcGxlKTsgaWYgYW4KLSAgIGFycmF5IG9m IHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cywgaXQgaXMgZGVzdHJveWVkIHVubGVzcyB0aGUgYXJy YXkgaXMKLSAgIExPQ0FMLiBUaGUgdGhpcmQgYXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgYW5vdGhl ciByZWd1bGFyIGFycmF5IGluIHdoaWNoCi0gICB0byBzdG9yZSB0aGUgdmFsdWVzICh0aGUgY291 bnRzIGluIG91ciBleGFtcGxlKSwgd2l0aCB0aGUgc2FtZSBydWxlcwotICAgYWJvdXQgYXJyYXkg bmFtZSBjb2xsaXNpb25zLiBJZiB5b3UgY2FyZSBvbmx5IGFib3V0IHRoZSBpbmRpY2VzIGFuZCBu b3QKLSAgIHRoZSB2YWx1ZXMsIHlvdSBjYW4gb21pdCB0aGUgdGhpcmQgYXJndW1lbnQgdG8gXGZh YWNvbnZlcnQoKS4gSW4gYW55Ci0gICBjYXNlLCB0aGUgYXNzb2NpYXRpdmUgYXJyYXkgaXMgY29u dmVydGVkLCBub3QgY29waWVkOiBpdHMgZWxlbWVudHMgYXJlCi0gICBtb3ZlZCB0byB0aGUgc3Bl Y2lmaWVkIHJlZ3VsYXIgYXJyYXlzLCBzbyBhZnRlciBjb252ZXJzaW9uIHRoZSBvcmlnaW5hbAot ICAgYXNzb2NpYXRpdmUgYXJyYXkgaXMgZ29uZS4KLQotICAgQXMgd2l0aCBvdGhlciBhcnJheS1s b2FkaW5nIGZ1bmN0aW9ucywgXGZhYWNvbnZlcnQoKSBzZXRzIGVsZW1lbnQgMCBvZgotICAgZWFj aCBhcnJheSB0byB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBhcnJheS4KLQotICAgVG8g Y29udGludWUgb3VyIGV4YW1wbGU6Ci0KLSAgLm1heCA6PSAwICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7IE1heGltdW0gY291bnQKLSAgLlwlbiA6PSBcZmFhY29udmVydChmaWxl LCZhLCZiKSAgICAgICAgICAgICA7IENvbnZlcnQKLSAgZm9yIFwlaSAxIFwlbiAxIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICA7IExvb3AgdGhyb3VnaCB2YWx1ZXMKLSAgICAgIGVjaG8gXGZs cGFkKFwlaSwzKS4gXCZhW1wlaV06IFwmYltcJWldICA7IEVjaG8gdGhpcyBwYWlyCi0gICAgICBp ZiAoID4gXCZiW1wlaV0gXG0obWF4KSApIHsgICAgICAgICAgICAgOyBDaGVjayBmb3IgbmV3IG1h eGltdW0KLSAgICAgICAgICAubmFtZSA6PSBcJmFbXCVpXQotICAgICAgICAgIC5tYXggIDo9IFwm YltcJWldCi0gICAgICB9Ci0gIH0KLSAgZWNobyBNb3N0IHBvcHVsYXIgZmlsZTogXG0obmFtZSks IGFjY2Vzc2VzOiBcbShtYXgpCi0KLSAgIFRoaXMgbGlzdHMgdGhlIGZpbGVzIGFuZCBjb3VudHMg YW5kIHRoZW4gYW5ub3VuY2VzIHdoaWNoIGZpbGUgaGFzIHRoZQotICAgaGlnaGVzdCBjb3VudC4K LQotICAgTm93IHN1cHBvc2UgeW91IHdhbnQgdG8gc29ydCB0aGUgYXJyYXkgcGFpciBjcmVhdGVk IGZyb20gYW4gYXNzb2NpYXRpdmUKLSAgIGFycmF5LiBJbiBvdXIgZXhhbXBsZSwgXCZhW10gY29u dGFpbnMgZmlsZW5hbWVzLCBhbmQgXCZiW10gY29udGFpbnMgdGhlCi0gICBhc3NvY2lhdGVkIGNv dW50cy4gSGVyZSB3ZSB0YWtlIGFkdmFudGFnZSBvZiB0aGUgQVJSQVkgU09SVCBjb21tYW5kJ3MK LSAgIGFiaWxpdHkgdG8gc29ydCBhIHNlY29uZCBhcnJheSBhY2NvcmRpbmcgdG8gdGhlIGZpcnN0 IG9uZToKLQotICBhcnJheSBzb3J0IC9yZXZlcnNlIC9udW1lcmljICZiICZhICAgICAgICAgIDsg RGVzY2VuZGluZyBzb3J0IGJ5IGNvdW50Ci0KLSAgIE5vdyB0byBzZWUgdGhlIHRvcCBmaXZlIGZp bGVzIGFuZCB0aGVpciBjb3VudHM6Ci0KLSAgZWNobyBUaGUgdG9wIDUgZmlsZXMgYXJlOgotICBm b3IgXCVpIDEgNSAxIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgTG9vcCB0aHJvdWdo IHRvcCA1IHZhbHVlcwotICAgICAgZWNobyBcZmxwYWQoXCVpLDMpLiBcJmFbXCVpXTogXCZiW1wl aV0gIDsgRWNobyB0aGlzIHBhaXIKLSAgfQotCi0gICAgNy4xMC4xMS4gVHJhbnNmZXJyaW5nIEFy cmF5IENvbnRlbnRzIHRvIE90aGVyIENvbXB1dGVycwotCi0gICBUaGUgU0VORCAvQVJSQVk6YXJy YXluYW1lIGNvbW1hbmQgKFs2MTddU2VjdGlvbiA0LjcuMSkgYWxsb3dzIHlvdSB0bwotICAgc2Vu ZCB0aGUgY29udGVudHMgb2YgYW55IGFycmF5LCBvciBhbnkgY29udGlndW91cyBzZWdtZW50IG9m IGl0LCBpbgotICAgZWl0aGVyIHRleHQgb3IgYmluYXJ5IG1vZGUgdG8gYW5vdGhlciBjb21wdXRl ciwgdXNpbmcgS2VybWl0IHByb3RvY29sLgotICAgV2hlbiB1c2VkIGluIGNvbmp1bmN0aW9uIHdp dGggQy1LZXJtaXQncyBvdGhlciBmZWF0dXJlcyAodGhlIGFycmF5Ci0gICBmZWF0dXJlcyBkZXNj cmliZWQgaW4gdGhpcyBzZWN0aW9uOyB0aGUgZmlsZSBpL28gcGFja2FnZSBmcm9tCi0gICBbNjE4 XVNlY3Rpb24gMS4yMjsgaXRzIGRlY2lzaW9uLW1ha2luZywgcGF0dGVybi1tYXRjaGluZywgYW5k IHN0cmluZwotICAgbWFuaXB1bGF0aW9uIGNhcGFiaWxpdGllcywgYW5kIHNvIG9uKSB0aGUgcG9z c2liaWxpdGllcyBhcmUgZW5kbGVzczoKLSAgIGV4dHJhY3RzIG9mIGxhcmdlIGZpbGVzLCByZW1v dGUgZGF0YWJhc2UgcXVlcmllcywgLi4uLCBhbGwgd2l0aG91dAotICAgcmVjb3Vyc2UgdG8gc3lz dGVtLWRlcGVuZGVudCBtZWNoYW5pc21zIHN1Y2ggVU5JWCBwaXBlcyBhbmQgZmlsdGVycywKLSAg IHRodXMgZW5zdXJpbmcgY3Jvc3MtcGxhdGZvcm0gcG9ydGFiaWxpdHkgb2Ygc2NyaXB0cyB0aGF0 IHVzZSB0aGVzZQotICAgZmVhdHVyZXMuCi0KLSAgIFdoZW4gc2VuZGluZyBhbiBhcnJheSBpbiB0 ZXh0IG1vZGUsIEtlcm1pdCBhcHBlbmRzIGEgbGluZSB0ZXJtaW5hdG9yIHRvCi0gICBlYWNoIGFy cmF5IGVsZW1lbnQsIGV2ZW4gZW1wdHkgb25lcywgYW5kIGl0IGFsc28gY29udmVydHMgdGhlIGNo YXJhY3RlcgotICAgc2V0IGZyb20geW91ciBjdXJyZW50IEZJTEUgY2hhcmFjdGVyLXNldCB0byB5 b3VyIGN1cnJlbnQgVFJBTlNGRVIKLSAgIGNoYXJhY3Rlci1zZXQsIGlmIGFueS4gTm8gY29udmVy c2lvbnMgYXJlIG1hZGUgb3IgbGluZSB0ZXJtaW5hdGlvbnMKLSAgIGFkZGVkIGluIGJpbmFyeSBt b2RlLiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBhcnJheToKLQotICBkY2wgXCZhW10gPSBP bmUgVHdvIFRocmVlIEZvdXIgRml2ZSBTaXgKLQotICAgaXMgc2VudCBhcyBzaXggbGluZXMsIG9u ZSB3b3JkIHBlciBsaW5lLCBpbiB0ZXh0IG1vZGUsIGFuZCBhcyB0aGUgYmFyZQotICAgdW50ZXJt aW5hdGVkIHN0cmluZyAiT25lVHdvVGhyZWVGb3VyRml2ZVNpeCIgaW4gYmluYXJ5IG1vZGUuCi0K LSAgIFlvdSBzaG91bGQgYWx3YXlzIGluY2x1ZGUgYSAvVEVYVCBvciAvQklOQVJZIHN3aXRjaCBp biBhbnkgU0VORCAvQVJSQVkKLSAgIGNvbW1hbmQgdG8gZm9yY2UgdGhlIGRlc2lyZWQgdHJhbnNm ZXIgbW9kZSwgb3RoZXJ3aXNlIHlvdSdyZSBsaWtlbHkgdG8KLSAgIGJlIHN1cnByaXNlZCBieSB0 aGUgZWZmZWN0cyBkZXNjcmliZWQgaW4gWzYxOV1TZWN0aW9uIDQuMy4KLQotICAgSGVyZSBhcmUg c29tZSBleGFtcGxlczoKLQotICAgc2VuZCAvdGV4dCAvYXJyYXk6XCZhW10KLSAgICAgICAgICBT ZW5kcyB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBhcnJheSBcJmFbXSBpbiB0ZXh0IG1vZGUu IFNpbmNlCi0gICAgICAgICAgYW4gYXMtbmFtZSBpcyBub3QgaW5jbHVkZWQsIHRoZSByZWNlaXZl ciBpcyB0b2xkIHRoZSBmaWxlbmFtZSBpcwotICAgICAgICAgIF9hcnJheV9hXy4KLQotICAgc2Vu ZCAvdGV4dCAvYXJyYXk6JmFbXQotICAgc2VuZCAvdGV4dCAvYXJyYXk6YVtdCi0gICBzZW5kIC90 ZXh0IC9hcnJheTomYQotICAgc2VuZCAvdGV4dCAvYXJyYXk6YQotICAgICAgICAgIFRoZXNlIGFy ZSBhbGwgZXF1aXZhbGVudCB0byB0aGUgcHJldmlvdXMgZXhhbXBsZS4KLQotICAgc2VuZCAvdGV4 dCAvYXJyYXk6JmEgL2FzLW5hbWU6Zm9vLmJhcgotICAgICAgICAgIEFzIGFib3ZlLCBidXQgdGhl IGFycmF5IGlzIHNlbnQgdW5kZXIgdGhlIG5hbWUgZm9vLmJhci4KLQotICAgc2VuZCAvdGV4dCAv YXJyYXk6JmFbMTAwOjE5OV0gL2FzOmZvby5iYXIKLSAgICAgICAgICBBcyBhYm92ZSwgYnV0IG9u bHkgdGhlIGVsZW1lbnRzIGZyb20gMTAwIHRocm91Z2ggMTk5IGFyZSBzZW50LgotCi0gICBJbiB0 ZXh0LW1vZGUgdHJhbnNmZXJzLCBjaGFyYWN0ZXIgc2V0cyBhcmUgdHJhbnNsYXRlZCBhY2NvcmRp bmcgdG8geW91cgotICAgY3VycmVudCBzZXR0aW5ncywganVzdCBhcyBmb3IgdGV4dCBmaWxlcy4g SW4gYmluYXJ5IG1vZGUsIG9mIGNvdXJzZSwKLSAgIHRoZXJlIGlzIG5vIGNoYXJhY3Rlci1zZXQg dHJhbnNsYXRpb24gb3Igb3RoZXIgY29udmVyc2lvbiBvZiBhbnkga2luZC4KLSAgIEJ1dCByZW1l bWJlciB0aGF0IGFycmF5IGVsZW1lbnRzIGNhbiBub3QgY29udGFpbiB0aGUgTlVMIChBU0NJSSAw KQotICAgY2hhcmFjdGVyLCBzaW5jZSB0aGV5IGFyZSBpbXBsZW1lbnRlZCBhcyBOVUwtdGVybWlu YXRlZCBzdHJpbmdzLgotCi0gICBIZXJlJ3MgYW4gZXhhbXBsZSB0aGF0IHNob3dzIGhvdyB0byBz ZW5kIGFsbCB0aGUgbGluZXMgKHVwIHRvIDEwMDAgb2YKLSAgIHRoZW0pIGZyb20gYSBmaWxlIGFu aW1hbHMudHh0IHRoYXQgY29udGFpbiB0aGUgd29yZHMgImNhdCIsICJkb2ciLCBvcgotICAgImhv ZyIgKHNlZSBbNjIwXVNlY3Rpb24gNC45IGFib3V0IHBhdHRlcm4gbWF0Y2hpbmcpOgotCi0gIGRl Y2xhcmUgXCZhWzEwMDBdCi0gIGZvcGVuIC9yZWFkIFwlYyBhbmltYWxzLnR4dAotICBpZiBmYWls IGV4aXQgMQotICAuXCVpID0gMAotICB3aGlsZSB0cnVlIHsKLSAgICAgIGZyZWFkIFwlYyBsaW5l Ci0gICAgICBpZiBmYWlsIGJyZWFrCi0gICAgICBpZiBtYXRjaCB7XG0obGluZSl9IHsqe2NhdCxb ZGhdb2d9Kn0gewotICAgICAgICAgIGluY3JlbWVudCBcJWkKLSAgICAgICAgICBpZiAoID4gXCVp IFxmZGltKCZhKSApIGJyZWFrCi0gICAgICAgICAgLlwmYVtcJWldIDo9IFxtKGxpbmUpCi0gICAg ICB9Ci0gIH0KLSAgZmNsb3NlIFwlYwotICBzZW5kIC9hcnJheTphWzE6XCVpXSAvdGV4dAotCi0g ICBOb3RlIHRoYXQgd2UgYXJlIGNhcmVmdWwgdG8gc2VuZCBvbmx5IHRoZSBwYXJ0IG9mIHRoZSBh cnJheSB0aGF0IHdhcwotICAgZmlsbGVkLCBub3QgdGhlIGVudGlyZSBhcnJheSwgYmVjYXVzZSB0 aGVyZSBhcmUgbGlrZWx5IHRvIGJlIGxvdHMgb2YKLSAgIHVudXNlZCBlbGVtZW50cyBhdCB0aGUg ZW5kLCBhbmQgdGhlc2Ugd291bGQgYmUgc2VudCBhcyBibGFuayBsaW5lcwotICAgb3RoZXJ3aXNl LgotCi0gICBUaGlzIGV4YW1wbGUgcmFpc2VzIGFuIGludGVyZXN0aW5nIHF1ZXN0aW9uOiB3aGF0 IGlmIHdlIHdhbnQgdG8gc2VuZAotICAgQUxMIHRoZSBtYXRjaGluZyBsaW5lcywgZXZlbiBpZiB0 aGVyZSBhcmUgbW9yZSB0aGFuIDEwMDAgb2YgdGhlbSwgYnV0Ci0gICB3ZSBkb24ndCBrbm93IHRo ZSBudW1iZXIgaW4gYWR2YW5jZT8gQ2xlYXJseSB0aGUgcHJvYmxlbSBpcyBsaW1pdGVkIGJ5Ci0g ICBLZXJtaXQncyAoYW5kIHRoZSBjb21wdXRlcidzKSBtZW1vcnkuIElmIHRoZXJlIGFyZSBhIHRo b3VzYW5kIHRyaWxsaW9uCi0gICBtYXRjaGluZyBsaW5lcywgdGhleSBtb3N0IGxpa2VseSB3aWxs IG5vdCBmaXQgaW4gbWVtb3J5LCBhbmQgaW4gdGhpcwotICAgY2FzZSB0aGUgb25seSBzb2x1dGlv biBpcyB0byB3cml0ZSB0aGVtIGZpcnN0IHRvIGEgdGVtcG9yYXJ5IGZpbGUgb24KLSAgIG1hc3Mg c3RvcmFnZSBhbmQgdGhlbiBzZW5kIHRoZSB0ZW1wb3JhcnkgZmlsZSBhbmQgZGVsZXRlIGl0IGFm dGVyd2FyZHMuCi0KLSAgIEhvd2V2ZXIsIHdoZW4gdGhlIHNlbGVjdGlvbiBpcyBsaWtlbHkgdG8g Zml0IGluIG1lbW9yeSwgdGhlCi0gICBvbmNlLWZhbWlsaWFyIHRlY2huaXF1ZSBvZiBpbml0aWFs IGFsbG9jYXRpb24gd2l0aCBleHRlbnRzIGNhbiBiZSB1c2VkOgotCi0gIGlmIG1hdGNoIHtcbShs aW5lKX0geyp7Y2F0LFtkaF1vZ30qfSB7Ci0gICAgICBpbmNyZW1lbnQgXCVpCi0gICAgICBpZiAo ID4gXCVpIFxmZGltKCZhKSApIHsKLSAgICAgICAgICBhcnJheSByZXNpemUgYSBcZmRpbSgmYSkr MTAwCi0gICAgICAgICAgaWYgZmFpbCBzdG9wIDEgTUVNT1JZIEZVTEwKLSAgICAgICAgICBlY2hv IE5FVyBESU1FTlNJT046IFxmZGltKCZhKQotICAgICAgfQotICAgICAgLlwmYVtcJWldIDo9IFxt KGxpbmUpCi0gIH0KLQotICAgVGhpcyBncm93cyB0aGUgYXJyYXkgaW4gY2h1bmtzIG9mIDEwMCBh cyBuZWVkZWQuCi0KLSAgNy4xMS4gT1VUUFVUIENvbW1hbmQgSW1wcm92ZW1lbnRzCi0KLSAgIExJ TkVPVVQgWyB0ZXh0IF0KLSAgICAgICAgICBUaGlzIGNvbW1hbmQgaXMgZXhhY3RseSBsaWtlIE9V VFBVVCwgZXhjZXB0IGl0IHN1cHBsaWVzIGEKLSAgICAgICAgICBjYXJyaWFnZSByZXR1cm4gYXQg dGhlIGVuZCBvZiB0aGUgdGV4dC4gImxpbmVvdXQgZXhpdCIgaXMKLSAgICAgICAgICBleGFjdGx5 IHRoZSBzYW1lIGFzICJvdXRwdXQgZXhpdFwxMyIuCi0KLSAgIFNFVCBPVVRQVVQgU1BFQ0lBTC1F U0NBUEVTIHsgT04sIE9GRiB9Ci0gICAgICAgICAgVGhpcyBjb21tYW5kIGxldHMgeW91IHRlbGwg Qy1LZXJtaXQgd2hldGhlciB0byBwcm9jZXNzIFxOLCBcTCwKLSAgICAgICAgICBhbmQgXEIgc3Bl Y2lhbGx5IGluIGFuIE9VVFBVVCBjb21tYW5kLCBhcyBkaXN0aW5jdCBmcm9tIG90aGVyIFwKLSAg ICAgICAgICBzZXF1ZW5jZXMgKHN1Y2ggYXMgXCVhLCBcMTMsIFx2KHRpbWUpLCBldGMpLiBOb3Jt YWxseSB0aGUKLSAgICAgICAgICBzcGVjaWFsIGVzY2FwZXMgYXJlIGhhbmRsZWQuIFVzZSBTRVQg T1VUUFVUIFNQRUNJQUwtRVNDQVBFUyBPRkYKLSAgICAgICAgICB0byBkaXNhYmxlIHRoZW0uCi0K LSAgIERpc2FibGluZyBzcGVjaWFsIGVzY2FwZXMgaXMgbmVjZXNzYXJ5IGluIHNpdHVhdGlvbnMg d2hlbiB5b3UgbmVlZCB0bwotICAgdHJhbnNtaXQgbGluZXMgb2YgZGF0YSBhbmQgeW91IGhhdmUg bm8gY29udHJvbCBvdmVyIHdoYXQgaXMgaW4gdGhlCi0gICBsaW5lcy4gRm9yIGV4YW1wbGUsIGEg ZmlsZSBvb2ZhLnR4dCB0aGF0IGNvbnRhaW5zOgotCi0gIFRoaXMgaXMgYSBmaWxlCi0gIEl0IGhh cyBcJWEgdmFyaWFibGVzIGluIGl0Ci0gIEFuZCBpdCBoYXMgXEIgaW4gaXQuCi0gIEFuZCBpdCBo YXMgXEwgaW4gaXQuCi0gIEFuZCBpdCBoYXMgXE4gaW4gaXQuCi0gIEFuZCB0aGlzIGlzIHRoZSBs YXN0IGxpbmUuCi0KLSAgIGNhbiBiZSBzZW50IGxpa2UgdGhpczoKLQotICBsb2NhbCBsaW5lCi0g IHNldCBvdXRwdXQgc3BlY2lhbC1lc2NhcGVzIG9mZgotICBmb3BlbiAvcmVhZCBcJWMgb29mYS50 eHQKLSAgaWYgZmFpbCBzdG9wIDEgQ2FuJ3Qgb3BlbiBvb2ZhLnR4dAotICB3aGlsZSBzdWNjZXNz IHsKLSAgICAgIGZyZWFkIFwlYyBsaW5lCi0gICAgICBpZiBmYWlsIGJyZWFrCi0gICAgICA7IEFk ZCBmaWx0ZXJpbmcgb3IgcHJvY2Vzc2luZyBjb21tYW5kcyBoZXJlLi4uCi0gICAgICBvdXRwdXQg XG0obGluZSlcMTMKLSAgfQotCi0gIDcuMTIuIEZ1bmN0aW9uIGFuZCBWYXJpYWJsZSBEaWFnbm9z dGljcwotCi0gICBJbiBDLUtlcm1pdCA2LjAgYW5kIGVhcmxpZXIsIHRoZSBvbmx5IGRpYWdub3N0 aWMgcmV0dXJuZWQgYnkgYSBmYWlsaW5nCi0gICBmdW5jdGlvbiBjYWxsIHdhcyBhbiBlbXB0eSB2 YWx1ZSwgd2hpY2ggKGEpIGNvdWxkIG5vdCBiZSBkaXN0aW5ndWlzaGVkCi0gICBmcm9tIGFuIGVt cHR5IHZhbHVlIHJldHVybmVkIGJ5IGEgc3VjY2Vzc2Z1bCBmdW5jdGlvbiBjYWxsOyAoYikgZGlk IG5vdAotICAgZ2l2ZSBhbnkgaW5kaWNhdGlvbiBvZiB0aGUgY2F1c2Ugb2YgZmFpbHVyZTsgYW5k IChjKSBkaWQgbm90IGNhdXNlIHRoZQotICAgZW5jbG9zaW5nIHN0YXRlbWVudCB0byBmYWlsLiBD LUtlcm1pdCA3LjAgY29ycmVjdHMgdGhlc2UgZGVmaWNpZW5jaWVzLgotCi0gICBTRVQgRlVOQ1RJ T04gRElBR05PU1RJQ1MgeyBPTiwgT0ZGIH0KLSAgICAgICAgICB3aGVuIE9OLCBhbGxvd3MgYnVp bHQtaW4gZnVuY3Rpb25zIHRvIHJldHVybiBkaWFnbm9zdGljIG1lc3NhZ2VzCi0gICAgICAgICAg d2hlbiBpbXByb3Blcmx5IHJlZmVyZW5jZWQsIGluc3RlYWQgb2YgYW4gZW1wdHkgc3RyaW5nLiBG VU5DVElPTgotICAgICAgICAgIERJQUdOT1NUSUNTIGFyZSBPTiBieSBkZWZhdWx0LiBXaGVuIE9G RiwgaW1wcm9wZXJseSByZWZlcmVuY2VkCi0gICAgICAgICAgZnVuY3Rpb25zIGNvbnRpbnVlIHRv IHJldHVybiBhbiBlbXB0eSBzdHJpbmcuIFRoaXMgY29tbWFuZCBhbHNvCi0gICAgICAgICAgYWZm ZWN0cyBidWlsdC1pbiB2YXJpYWJsZXM7IGluIHRoaXMgY2FzZSwgYW4gZXJyb3IgbWVzc2FnZSBp cwotICAgICAgICAgIHJldHVybmVkIG9ubHkgaWYgdGhlIHZhcmlhYmxlIGRvZXMgbm90IGV4aXN0 LiBXaGVuIEZVTkNUSU9OCi0gICAgICAgICAgRElBR05PU1RJQ1MgYXJlIE9OLCB0aGUgZXJyb3Ig bWVzc2FnZSBpcyBhbHNvIHByaW50ZWQuCi0KLSAgIEZvciB2YXJpYWJsZXMsIHRoZSBvbmx5IG1l c3NhZ2UgaXM6Ci0KLSAgPEVSUk9SOk5PX1NVQ0hfVkFSSUFCTEU6XHYobmFtZSk+Ci0KLSAgIHdo ZXJlICJuYW1lIiBpcyB0aGUgbmFtZSBvZiB0aGUgbm9uZXhpc3RlbnQgdmFyaWFibGUuCi0KLSAg IEZvciBmdW5jdGlvbnMsIHRoZSBkaWFnbm9zdGljIG1lc3NhZ2UgaXM6Ci0KLSAgPEVSUk9SOm1l c3NhZ2U6XGZuYW1lKCk+Ci0KLSAgIHdoZXJlICJtZXNzYWdlIiBpcyByZXBsYWNlZCBieSBhIG1l c3NhZ2UsIGFuZCAibmFtZSIgaXMgcmVwbGFjZWQgYnkgdGhlCi0gICBmdW5jdGlvbiBuYW1lLCBl LmcuIDxFUlJPUjpBUkdfTk9UX05VTUVSSUM6XGZtb2QoKT4uIE1lc3NhZ2VzIGluY2x1ZGU6Ci0K LSAgQVJHX0JBRF9BUlJBWSAgICAgICBBbiBhcmd1bWVudCBjb250YWlucyBhIG1hbGZvcm1lZCBh cnJheSByZWZlcmVuY2UuCi0gIEFSR19CQURfREFURSAgICAgICAgQW4gYXJndW1lbnQgY29udGFp bnMgYSBtYWxmb3JtZWQgZGF0ZSBhbmQvb3IgdGltZS4KLSAgQVJHX0JBRF9QSE9ORU5VTSAgICBB biBhcmd1bWVudCBjb250YWlucyBhIG1hbGZvcm1lZCB0ZWxlcGhvbmUgbnVtYmVyLgotICBBUkdf QkFEX1ZBUklBQkxFICAgIEFuIGFyZ3VtZW50IGNvbnRhaW5zIGEgbWFsZm9ybWVkIFwleCB2YXJp YWJsZS4KLSAgQVJHX0lOQ09NUExFVEUgICAgICBBbiBhcmd1bWVudCBpcyBpbmNvbXBsZXRlIChl LmcuIGEgYnJva2VuIEJhc2U2NCBzdHJpbmcpLgotICBBUkdfRVZBTF9GQUlMVVJFICAgIEFuIGFy Z3VtZW50IGNvdWxkIG5vdCBiZSBldmFsdWF0ZWQgKGludGVybmFsIGVycm9yKS4KLSAgQVJHX05P VF9BUlJBWSAgICAgICBBbiBhcmd1bWVudCByZWZlcmVuY2VzIGFuIGFycmF5IHRoYXQgaXMgbm90 IGRlY2xhcmVkLgotICBBUkdfTk9UX05VTUVSSUMgICAgIEFuIGFyZ3VtZW50IHRoYXQgbXVzdCBi ZSBpbnRlZ2VyIGNvbnRhaW5zIG5vbi1kaWdpdHMuCi0gIEFSR19OT1RfRkxPQVQgICAgICAgQW4g YXJndW1lbnQgaGFzIGJhZCBmbG9hdGluZy1wb2ludCBudW1iZXIgZm9ybWF0LgotICBBUkdfTk9U X1ZBUklBQkxFICAgIEFuIGFyZ3VtZW50IHRoYXQgbXVzdCBiZSBhIHZhcmlhYmxlIGlzIG5vdCBh IHZhcmlhYmxlLgotICBBUkdfT1VUX09GX1JBTkdFICAgIEFuIGFyZ3VtZW50J3MgbnVtZXJpYyB2 YWx1ZSBpcyB0b28gYmlnIG9yIHRvbyBzbWFsbCwKLSAgICAgICAgICAgICAgICAgICAgICBvciBh biBhcmd1bWVudCBjb250YWlucyBpbGxlZ2FsIGNoYXJhY3RlcnMgKGUuZy4gYSBoZXgKLSAgICAg ICAgICAgICAgICAgICAgICBvciBCYXNlLTY0IHN0cmluZykuCi0gIEFSR19UT09fTE9ORyAgICAg ICAgQW4gYXJndW1lbnQncyB2YWx1ZSBpcyB0b28gbG9uZy4KLSAgQVJSQVlfRkFJTFVSRSAgICAg ICBGYWlsdXJlIHRvIGNyZWF0ZSBhbiBhcnJheS4KLSAgRElWSURFX0JZX1pFUk8gICAgICBFeGVj dXRpb24gb2YgdGhlIGZ1bmN0aW9uIHdvdWxkIGNhdXNlIGRpdmlzaW9uIGJ5IHplcm8uCi0gIEZM T0FUSU5HX1BPSU5UX09QICAgRXhlY3V0aW9uIGVycm9yIGluIGEgZmxvYXRpbmctcG9pbnQgb3Bl cmF0aW9uLgotICBGSUxFX05PVF9GT1VORCAgICAgIEZpbGVuYW1lIGFyZ3VtZW50IG5hbWVzIGEg ZmlsZSB0aGF0IGNhbid0IGJlIGZvdW5kLgotICBGSUxFX05PVF9SRUFEQUJMRSAgIEZpbGVuYW1l IGFyZ3VtZW50IGlzIG5vdCBhIHJlZ3VsYXIgZmlsZS4KLSAgRklMRV9OT1RfQUNDRVNTSUJMRSBG aWxlbmFtZSBhcmd1bWVudCBuYW1lcyBhIGZpbGUgdGhhdCBpcyByZWFkLXByb3RlY3RlZC4KLSAg RklMRV9FUlJPUiAgICAgICAgICBPdGhlciBlcnJvciB3aXRoIGZpbGVuYW1lIGFyZ3VtZW50Lgot ICBGSUxFX05PVF9PUEVOICAgICAgIEEgZmlsZSBmdW5jdGlvbiB3YXMgZ2l2ZW4gYSBjaGFubmVs IHRoYXQgaXMgbm90IG9wZW4uCi0gIEZJTEVfRVJST1JfLW4gICAgICAgQSBmaWxlIGZ1bmN0aW9u IGdvdCBlcnJvciAtbiAoWzYyMV1TZWN0aW9uIDEuMjIpLgotICBMT09LVVBfRkFJTFVSRSAgICAg IEVycm9yIGxvb2tpbmcgdXAgZnVuY3Rpb24gKHNob3VsZG4ndCBoYXBwZW4pLgotICBNQUxMT0Nf RkFJTFVSRSAgICAgIEZhaWx1cmUgdG8gYWxsb2NhdGUgbmVlZGVkIG1lbW9yeSAoc2hvdWxkbid0 IGhhcHBlbikuCi0gIE5BTUVfQU1CSUdVT1VTICAgICAgVGhlIGZ1bmN0aW9uIGlzIG5vdCB1bmlx dWVseSBpZGVudGlmaWVkLgotICBNSVNTSU5HX0FSRyAgICAgICAgIEEgcmVxdWlyZWQgYXJndW1l bnQgaXMgbWlzc2luZy4KLSAgTk9fU1VDSF9GVU5DVElPTiAgICBBbiBhcmd1bWVudCByZWZlcmVu Y2VzIGEgZnVuY3Rpb24gdGhhdCBpcyBub3QgZGVmaW5lZC4KLSAgTk9fU1VDSF9NQUNSTyAgICAg ICBBbiBhcmd1bWVudCByZWZlcmVuY2VzIGEgbWFjcm8gdGhhdCBpcyBub3QgZGVmaW5lZC4KLSAg UkVTVUxUX1RPT19MT05HICAgICBUaGUgcmVzdWx0IG9mIGEgZnVuY3Rpb24gaXMgdG9vIGxvbmcu Ci0gIFVOS05PV05fRlVOQ1RJT04gICAgSW50ZXJuYWwgZXJyb3IgbG9jYXRpbmcgZnVuY3Rpb24g KHNob3VsZG4ndCBoYXBwZW4pLgotCi0gICBFeGFtcGxlczoKLQotICBhc3NpZ24gXCVtIFxmbW9k KCkKLSAgPzxFUlJPUjpNSVNTSU5HX0FSRzpcZm1vZCgpPgotICBlY2hvICJcZmNvbnRlbnRzKFwl bSkiCi0gICI8RVJST1I6TUlTU0lOR19BUkc6XGZtb2QoKT4iCi0gIGVjaG8gXGZtb2QoMyx4KQot ICA/PEVSUk9SOkFSR19OT1RfTlVNRVJJQzpcZm1vZCgpPgotICBlY2hvIFxmbW9kKDMsNC0yKjIp Ci0gID88RVJST1I6RElWSURFX0JZX1pFUk86XGZtb2QoKT4KLQotICAgTm90aWNlIHRoZSB1c2Ug b2YgXGZjb250ZW50cygpIGluIGVjaG9pbmcgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUgdGhhdAot ICAgY29udGFpbnMgYSByZXR1cm5lZCBlcnJvciBtZXNzYWdlLiBUaGF0J3MgYmVjYXVzZSB0aGUg ZXJyb3IgbWVzc2FnZQotICAgaW5jbHVkZXMgdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIG9yIGZ1 bmN0aW9uIHRoYXQgZmFpbGVkLCBzbyB5b3UgbXVzdAotICAgdXNlIFxmY29udGVudHMoKSB0byBw cmV2ZW50IGl0IGZyb20gYmVpbmcgZXZhbHVhdGVkIGFnYWluIC0tIG90aGVyd2lzZQotICAgdGhl IHNhbWUgZXJyb3Igd2lsbCBvY2N1ci4KLQotICAgVGhlIGhhbmRsaW5nIG9mIGZ1bmN0aW9uIGFu ZCB2YXJpYWJsZSBlcnJvcnMgaXMgY29udHJvbGxlZCBieToKLQotICAgU0VUIEZVTkNUSU9OIEVS Uk9SIHsgT04sIE9GRiB9Ci0gICAgICAgICAgVGVsbHMgd2hldGhlciBpbnZhbGlkIGZ1bmN0aW9u IGNhbGxzIG9yIHZhcmlhYmxlIHJlZmVyZW5jZXMKLSAgICAgICAgICBzaG91bGQgY2F1c2UgY29t bWFuZCBlcnJvcnMuIEZVTkNUSU9OIEVSUk9SIGlzIE9OIGJ5IGRlZmF1bHQuCi0gICAgICAgICAg V2hlbiBPTiwgYW5kIGFuIGVycm9yIGlzIGRpYWdub3NlZCBpbiBhIGJ1aWx0LWluIGZ1bmN0aW9u IG9yCi0gICAgICAgICAgdmFyaWFibGUsIHRoZSBjb21tYW5kIHRoYXQgaW5jbHVkZXMgdGhlIGZ1 bmN0aW9uIGNhbGwgb3IKLSAgICAgICAgICB2YXJpYWJsZSByZWZlcmVuY2UgZmFpbHMuIFRoZSBm YWlsaW5nIGNvbW1hbmQgY2FuIGJlIGhhbmRsZWQgaW4KLSAgICAgICAgICB0aGUgbm9ybWFsIHdh eSB3aXRoIElGIEZBSUxVUkUgLyBJRiBTVUNDRVNTLCBTRVQgVEFLRSBFUlJPUiwgb3IKLSAgICAg ICAgICBTRVQgTUFDUk8gRVJST1IuCi0KLSAgIFdoZW4gRlVOQ1RJT04gRElBR05PU1RJQ1MgaXMg T0ZGLCB0aGVyZSBpcyBubyBlcnJvciBtZXNzYWdlLgotCi0gICBTSE9XIFNDUklQVFMgZGlzcGxh eXMgdGhlIGN1cnJlbnQgRlVOQ1RJT04gRElBR05PU1RJQ1MgYW5kIEVSUk9SCi0gICBzZXR0aW5n cy4KLQotICA3LjEzLiBSZXR1cm4gVmFsdWUgb2YgTWFjcm9zCi0KLSAgIEluIEMtS2VybWl0IDVB IGFuZCA2LjAsIHRoZXJlIGFyZSB0d28gd2F5cyB0byByZXR1cm4gb25lIGxldmVsIGZyb20gYQot ICAgbWFjcm86IFJFVFVSTiB2YWx1ZSBhbmQgRU5EIG51bWJlciB0ZXh0LiBXaGVuIFJFVFVSTiBp cyB1c2VkLCB0aGUKLSAgIHZhbHVlLCB3aGljaCBjYW4gYmUgYSBudW1iZXIgb3IgYSB0ZXh0IHN0 cmluZywgaXMgYXNzaWduZWQgdG8KLSAgIFx2KHJldHVybikuIFdoZW4gRU5EIHdhcyB1c2VkLCBo b3dldmVyLCBcdihyZXR1cm4pIHdhcyBub3Qgc2V0LgotICAgU1VDQ0VTUy9GQUlMVVJFIHdhcyBz ZXQgYWNjb3JkaW5nIHRvIHdoZXRoZXIgdGhlIG51bWJlciB3YXMgemVybywgYW5kCi0gICB0aGUg dGV4dCB3YXMgcHJpbnRlZCwgYnV0IHRoZSBhY3R1YWwgdmFsdWUgb2YgdGhlIG51bWJlciB3YXMg bG9zdC4KLQotICAgSW4gQy1LZXJtaXQgNy4wLCB0aGUgRU5EIG51bWJlciBpcyBhdmFpbGFibGUg aW4gdGhlIFx2KHJldHVybikKLSAgIHZhcmlhYmxlLgotCi0gIDcuMTQuIFRoZSBBU1NFUlQsIEZB SUwsIGFuZCBTVUNDRUVEIENvbW1hbmRzLgotCi0gICBUaGUgQVNTRVJUIGNvbW1hbmQgaXMganVz dCBsaWtlIHRoZSBJRiBjb21tYW5kLCBidXQgd2l0aG91dCBhIGNvbW1hbmQKLSAgIHRvIGV4ZWN1 dGUuIEl0IHNpbXBseSBzdWNjZWVkcyBvciBmYWlscywgYW5kIHRoaXMgY2FuIGJlIHRlc3RlZCBi eSBhCi0gICBzdWJzZXF1ZW50IElGIFNVQ0NFU1Mgb3IgSUYgRkFJTFVSRSBjb21tYW5kLiBFeGFt cGxlOgotCi0gIEFTU0VSVCA9IDEgMQotICBJRiBTVUNDRVNTIGVjaG8gMSA9IDEuCi0KLSAgIFRo ZSBGQUlMIGNvbW1hbmQgZG9lcyBub3RoaW5nLCBidXQgYWx3YXlzIGZhaWxzLiBUaGUgU1VDQ0VF RCBjb21tYW5kCi0gICBkb2VzIG5vdGhpbmcsIGJ1dCBhbHdheXMgc3VjY2VlZHMuCi0KLSAgIFRo ZXNlIGNvbW1hbmRzIGFyZSBoYW5keSBpbiBkZWJ1Z2dpbmcgc2NyaXB0cyB3aGVuIHlvdSB3YW50 IHRvIGluZHVjZSBhCi0gICBmYWlsdXJlIChvciBzdWNjZXNzKSB0aGF0IG5vcm1hbGx5IHdvdWxk IG5vdCBvY2N1ciwgZS5nLiBmb3IgdGVzdGluZwotICAgYmxvY2tzIG9mIGNvZGUgdGhhdCBub3Jt YWxseSBhcmUgbm90IGV4ZWN1dGVkLgotCi0gIDcuMTUuIFVzaW5nIEFsYXJtcwotCi0gICBBbGFy bXMgbWF5IGJlIHNldCBpbiB0d28gd2F5czoKLQotICAgU0VUIEFMQVJNIG51bWJlcgotICAgICAg ICAgIFNldHMgYW4gYWxhcm0gZm9yIHRoZSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcyAiZnJvbSBu b3ciLCBpLmUuCi0gICAgICAgICAgaW4gdGhlIGZ1dHVyZSwgcmVsYXRpdmUgdG8gd2hlbiB0aGUg U0VUIEFMQVJNIGNvbW1hbmQgd2FzIGdpdmVuLgotICAgICAgICAgIEV4YW1wbGVzOgotCi0gIHNl dCBhbGFybSA2MCAgICAgICAgOyA2MCBzZWNvbmRzIGZyb20gbm93Ci0gIHNldCBhbGFybSArNjAg ICAgICAgOyBUaGUgc2FtZSBhcyAiNjAiCi0gIHNldCBhbGFybSAtNjAgICAgICAgOyBOb3QgbGVn YWwgLSB5b3UgY2FuJ3Qgc2V0IGFuIGFsYXJtIGluIHRoZSBwYXN0LgotICBzZXQgYWxhcm0gNjAq NjAgICAgIDsgNjAgbWludXRlcyBmcm9tIG5vdy4KLSAgc2V0IGFsYXJtIFwlYSsxMCAgICA7IFlv dSBjYW4gdXNlIHZhcmlhYmxlcywgZXRjLgotCi0gICBTRVQgQUxBUk0gaGg6bW06c3MKLSAgICAg ICAgICBTZXRzIGFuIGFsYXJtIGZvciB0aGUgc3BlY2lmaWVkIHRpbWUuIElmIHRoZSBnaXZlbiB0 aW1lIGlzCi0gICAgICAgICAgZWFybGllciB0aGFuIHRoZSBjdXJyZW50IHRpbWUsIHRoZSBhbGFy bSBpcyBzZXQgZm9yIHRoZSBnaXZlbgotICAgICAgICAgIHRpbWUgaW4gdGhlIG5leHQgZGF5LiBZ b3UgbWF5IGdpdmUgdGhlIHRpbWUgaW4gdmFyaW91cyBmb3JtYXRzOgotCi0gIHNldCBhbGFybSAx NTowMDowMCAgOyAzOjAwOjAwcG0KLSAgc2V0IGFsYXJtIDM6MDA6MDBwbSA7IDM6MDA6MDBwbQot ICBzZXQgYWxhcm0gMzowMHBtICAgIDsgMzowMDowMHBtCi0gIHNldCBhbGFybSAzcG0gICAgICAg OyAzOjAwOjAwcG0KLQotICAgU0hPVyBBTEFSTQotICAgICAgICAgIERpc3BsYXlzIHRoZSBjdXJy ZW50IGFsYXJtLCBpZiBhbnksIGluIHN0YW5kYXJkIGRhdGUtdGltZSBmb3JtYXQKLSAgICAgICAg ICAoc2VlIFs2MjJdU2VjdGlvbiAxLjYpOiB5eXl5bW1kZCBoaDptbTpzcy4KLQotICAgSUYgQUxB Uk0gY29tbWFuZAotICAgICAgICAgIEV4ZWN1dGVzIHRoZSBjb21tYW5kIGlmIGFuIGFsYXJtIGhh cyBiZWVuIHNldCBhbmQgdGhlIGFsYXJtIHRpbWUKLSAgICAgICAgICBoYXMgcGFzc2VkLgotCi0g ICBJRiBBTEFSTSB7IGNvbW1hbmQtbGlzdCB9IFsgRUxTRSB7IGNvbW1hbmQtbGlzdCB9IF0KLSAg ICAgICAgICBFeGVjdXRlcyB0aGUgY29tbWFuZC1saXN0IGlmIGFuIGFsYXJtIGhhcyBiZWVuIHNl dCBhbmQgdGhlIGFsYXJtCi0gICAgICAgICAgdGltZSBoYXMgcGFzc2VkLiBPdGhlcndpc2UsIGlm IGFuIEVMU0UgcGFydCBpcyBnaXZlbiwgaXRzCi0gICAgICAgICAgY29tbWFuZC1saXN0IGlzIGV4 ZWN1dGVkLgotCi0gICBDTEVBUiBBTEFSTQotICAgICAgICAgIENsZWFycyB0aGUgYWxhcm0uCi0K LSAgIE9ubHkgb25lIGFsYXJtIG1heSBiZSBzZXQgYXQgYSB0aW1lLgotCi0gICBFeGFtcGxlOiBT dXBwb3NlIHlvdSBoYXZlIGEgc2NyaXB0IHRoYXQgaXMgYWx3YXlzIHJ1bm5pbmcsIGFuZCB0aGF0 Ci0gICB0cmFuc2ZlcnMgZmlsZXMgcGVyaW9kaWNhbGx5LCBhbmQgdGhhdCBrZWVwcyBhIHRyYW5z YWN0aW9uIGxvZy4gU3VwcG9zZQotICAgeW91IHdhbnQgdG8gc3RhcnQgYSBuZXcgdHJhbnNhY3Rp b24gbG9nIGVhY2ggZGF5OgotCi0gIGxvZyB0cmFuc2FjdGlvbnMgXHYoZGF0ZSkubG9nCi0gIHNl dCBhbGFybSAwMDowMDowMCAgICAgICAgICAgICAgICAgICAgIDsgU2V0IGFuIGFsYXJtIGZvciBt aWRuaWdodAotICB3aGlsZSB0cnVlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICA7IE1haW4g c2NyaXB0IGxvb3AKLSAgICAgIHhpZiBhbGFybSB7ICAgICAgICAgICAgICAgICAgICAgICAgOyBJ ZiB0aGUgYWxhcm0gdGltZSBpcyBwYXN0Li4uCi0gICAgICAgICAgY2xvc2UgdHJhbnNhY3Rpb25z ICAgICAgICAgICAgIDsgQ2xvc2UgY3VycmVudCBsb2cKLSAgICAgICAgICBsb2cgdHJhbnNhY3Rp b25zIFx2KGRhdGUpLmxvZyAgOyBTdGFydCBuZXcgb25lCi0gICAgICAgICAgcGF1c2UgMSAgICAg ICAgICAgICAgICAgICAgICAgIDsgVG8gbWFrZSBzdXJlIDAwOjAwOjAwIGlzIHBhc3QKLSAgICAg ICAgICBzZXQgYWxhcm0gMDA6MDA6MDAgICAgICAgICAgICAgOyBTZXQgYSBuZXcgYWxhcm0KLSAg ICAgIH0KLSAgICAgIDsgcHV0IHRoZSByZXN0IG9mIHRoZSBzY3JpcHQgaGVyZS4uLgotICB9Ci0K LSAgIE5vdGUgdGhhdCBJRiBBTEFSTSAtLSBubyBtYXR0ZXIgd2hldGhlciBpdCBzdWNjZWVkcyBv ciBmYWlscyAtLSBkb2VzCi0gICBOT1QgY2xlYXIgYW4gZXhwaXJlZCBhbGFybS4gVGh1cywgb25j ZSBhbiBhbGFybSBoYXMgZXhwaXJlZCwgZXZlcnkgSUYKLSAgIEFMQVJNIHdpbGwgc3VjY2VlZCB1 bnRpbCB0aGUgYWxhcm0gaXMgY2xlYXJlZCAod2l0aCB0aGUgQ0xFQVIgQUxBUk0KLSAgIGNvbW1h bmQpIG9yIHJlc2V0IHdpdGggYSBuZXcgU0VUIEFMQVJNIGNvbW1hbmQuCi0KLSAgNy4xNi4gUGFz c2luZyBBcmd1bWVudHMgdG8gQ29tbWFuZCBGaWxlcwotCi0gICBCZWdpbm5pbmcgaW4gdmVyc2lv biA3LjAsIEMtS2VybWl0IGFjY2VwdHMgYXJndW1lbnRzIG9uIHRoZSBUQUtFCi0gICBjb21tYW5k IGxpbmUsIGZvciBleGFtcGxlOgotCi0gIEMtS2VybWl0PiB0YWtlIG9vZmEua3NjIG9uZSB0d28g e3RoaXMgaXMgdGhyZWV9IGZvdXIKLQotICAgVGhpcyBhdXRvbWF0aWNhbGx5IHNldHMgdGhlIHZh cmlhYmxlcyBcJTEgdGhyb3VnaCBcJTkgdG8gdGhlIGFyZ3VtZW50cywKLSAgIGFuZCBcJTAgdG8g dGhlIG5hbWUgb2YgdGhlIGZpbGUsIGluIHRoaXMgY2FzZToKLQotICBcJTAgPSAvdXNyL29sZ2Ev b29mYS5rc2MKLSAgXCUxID0gb25lCi0gIFwlMiA9IHR3bwotICBcJTMgPSB0aGlzIGlzIHRocmVl Ci0gIFwlNCA9IGZvdXIKLQotICAgYW5kIFwlNS4uXCU5IGFyZSB1bmRlZmluZWQgKGVtcHR5KS4g QXJndW1lbnRzIHBhc3QgdGhlIG5pbnRoIGFyZQotICAgYXZhaWxhYmxlIGluIHRoZSBcJl9bXSBh cmd1bWVudC12ZWN0b3IgYXJyYXkgKCBbNjIzXVNlY3Rpb24gNy41KS4KLQotICAgVGhlIHZhcmlh YmxlcyBhcmUgdGhvc2UgYXQgdGhlIGN1cnJlbnQgbWFjcm8gbGV2ZWwuIFRodXMsIGlmIHRoZSBU QUtFCi0gICBjb21tYW5kIGlzIGV4ZWN1dGVkIGZyb20gd2l0aGluIGEgbWFjcm8sIHRoZSBtYWNy bydzIGFyZ3VtZW50cyBhcmUKLSAgIHJlcGxhY2VkIGJ5IHRob3NlIGdpdmVuIG9uIHRoZSBUQUtF IGNvbW1hbmQgbGluZSAoYnV0IG9ubHkgaWYgYXQgbGVhc3QKLSAgIG9uZSBhcmd1bWVudCBpcyBn aXZlbikuIFRoZSBjb21tYW5kIHNob3duIGFib3ZlIGlzIGV4YWN0bHkgZXF1aXZhbGVudAotICAg dG86Ci0KLSAgYXNzaWduIFwlMCAvdXNyL29sZ2Evb29mYS5rc2MKLSAgYXNzaWduIFwlMSBvbmUK LSAgYXNzaWduIFwlMiB0d28KLSAgYXNzaWduIFwlMyB0aGlzIGlzIHRocmVlCi0gIGFzc2lnbiBc JTQgZm91cgotICBhc3NpZ24gXCU1Ci0gIGFzc2lnbiBcJTYKLSAgYXNzaWduIFwlNwotICBhc3Np Z24gXCU4Ci0gIGFzc2lnbiBcJTkKLSAgdGFrZSBvb2ZhLmtzYwotCi0gICBSZW1lbWJlciwgdGhl IHZhcmlhYmxlcyBcJTAuLlwlOSBhcmUgb24gdGhlIG1hY3JvIGNhbGwgc3RhY2ssIGFuZAotICAg Y29tbWFuZCBmaWxlcyBhcmUgaW5kZXBlbmRlbnQgb2YgdGhlIG1hY3JvIHN0YWNrLiBUaHVzLCBp ZiBhIGNvbW1hbmQKLSAgIGZpbGUgVEFLRXMgYW5vdGhlciBjb21tYW5kIGZpbGUgYW5kIHBhc3Nl cyBhcmd1bWVudHMgdG8gaXQsIHRoZQotICAgdmFyaWFibGVzIGFyZSBjaGFuZ2VkIGZyb20gdGhh dCBwb2ludCBvbiBmb3IgYm90aCBmaWxlcywgYW5kIHNvIGZvcnRoCi0gICBmb3IgYWxsIGxldmVs cyBvZiBuZXN0ZWQgY29tbWFuZCBmaWxlcyB3aXRob3V0IGludGVydmVuaW5nIG1hY3JvCi0gICBp bnZvY2F0aW9ucy4KLQotICAgSXQgd291bGQgaGF2ZSBiZWVuIHBvc3NpYmxlIHRvIGNoYW5nZSBD LUtlcm1pdCB0byB1c2UgdGhlIG92ZXJhbGwKLSAgIGNvbW1hbmQgc3RhY2ssIHJhdGhlciB0aGFu IHRoZSBtYWNybyBzdGFjaywgZm9yIGFyZ3VtZW50cyAtLSB0aGlzIHdvdWxkCi0gICBoYXZlIG1h ZGUgVEFLRSB3b3JrIGV4YWN0bHkgbGlrZSBETywgd2hpY2ggaXMgIm5pY2VyIiwgYnV0IGl0IHdv dWxkCi0gICBhbHNvIGhhdmUgYnJva2VuIGNvdW50bGVzcyBleGlzdGluZyBzY3JpcHRzLiBIb3dl dmVyLCB0aGUgbmV3IFNISUZUCi0gICBjb21tYW5kIChbNjI0XVNlY3Rpb24gNy41KSBtYWtlcyBp dCBwb3NzaWJsZSB0byBjcmVhdGUgYW4gYWx0ZXJuYXRpdmUKLSAgIFRBS0UgY29tbWFuZCB0aGF0 IGRvZXMgaW5kZWVkIHNhdmUgYW5kIHJlc3RvcmUgdGhlIGFyZ3VtZW50IHZhcmlhYmxlcwotICAg YXQgaXRzIG93biBsZXZlbCBhcm91bmQgZXhlY3V0aW9uIG9mIGEgY29tbWFuZCBmaWxlOgotCi0g IGRlZmluZSBtdGFrZSB7Ci0gICAgIGxvY2FsIFwlZgotICAgICBhc3NpZ24gXCVmIFxmY29udGVu dHMoXCUxKQotICAgICBzaGlmdAotICAgICB0YWtlIFwlZgotICB9Ci0KLSAgIEMtS2VybWl0IDcu MCBhbHNvIHN1cHBvcnRzIGEgbmV3LCBlYXNpZXIgd2F5IHRvIHBhc3MgYXJndW1lbnRzIHRvCi0g ICBzY3JpcHRzIGZyb20gdGhlIHN5c3RlbSBjb21tYW5kIGxpbmU6Ci0KLSAga2VybWl0IGZpbGVu YW1lIGFyZzEgYXJnMiBhcmczIC4uLgotCi0gICBpbiB3aGljaCBhcmcxLCBhcmcyLCBhcmczIChl dGMpIGFyZSBhcmd1bWVudHMgZm9yIHRoZSBzY3JpcHQgKHdob3NlCi0gICBmaWxlbmFtZSBpcyBn aXZlbiksIGFuZCBhcmUgYXNzaWduZWQgdG8gXCUxLCBcJTIsIC4uLiBcJTkuIFRoZSBmaWxlbmFt ZQotICAgaXMgYXNzaWduZWQgdG8gXCUwLiBUaGlzIGFwcGxpZXMgZXF1YWxseSB0byAiS2VyYmFu ZyIgc2NyaXB0cyBpbiBVTklYCi0gICAoWzYyNV1TZWN0aW9uIDcuMTkpLiBGb3IgZXhhbXBsZSwg c3VwcG9zZSB5b3UgaGF2ZSBhIGZpbGUgY2FsbGVkCi0gICAic2hvd2FyZ3MiIGNvbnRhaW5pbmcg dGhlIGZvbGxvd2luZyBsaW5lczoKLQotICAjIS91c3IvbG9jYWwvYmluL2tlcm1pdCArCi0gIGVj aG8gSGVsbG8gZnJvbSBcJTAKLSAgc2hvdyBhcmdzCi0gIGV4aXQKLQotICAgKGV4Y2VwdCBub3Qg aW5kZW50ZWQsIHNpbmNlIHRoZSAiIyEiIGxpbmUgbXVzdCBiZSBvbiB0aGUgbGVmdCBtYXJnaW4p LgotICAgSWYgeW91IGdpdmUgdGhpcyBmaWxlIGV4ZWN1dGUgcGVybWlzc2lvbjoKLQotICBjaG1v ZCAreCBzaG93YXJncwotCi0gICB0aGVuIHlvdSBjYW4gcnVuIGl0IGV4YWN0bHkgYXMgeW91IHdv dWxkIHJ1biBhIFVOSVggc2hlbGwgc2NyaXB0LCBlLmcuOgotCi0gICQgc2hvd2FyZ3Mgb25lIHR3 byB0aHJlZQotICBIZWxsbyBmcm9tIC91c3Ivb2xnYS9zaG93YXJncwotICBUb3AtbGV2ZWwgYXJn dW1lbnRzIChcdihhcmdjKSA9IDQpOgotICAgXCZfWzBdID0gL3Vzci9vbGdhL3Nob3dhcmdzCi0g ICBcJl9bMV0gPSBvbmUKLSAgIFwmX1syXSA9IHR3bwotICAgXCZfWzNdID0gdGhyZWUKLQotICAg RnVydGhlcm1vcmUsIHRoZSBcJl9bXSBhcnJheSBub3cgY29udGFpbnMgdGhlIGZpbGVuYW1lLCBp ZiBvbmUgd2FzCi0gICBnaXZlbiBhcyB0aGUgZmlyc3QgY29tbWFuZCBsaW5lIGFyZ3VtZW50LCBv ciBpdCBpcyBhICJLZXJiYW5nIiBzY3JpcHQsCi0gICBpbiBlbGVtZW50IDAuCi0KLSAgIE90aGVy d2lzZSBlbGVtZW50IDAgaXMgcHJvZ3JhbSBuYW1lLCBhbmQgZWxlbWVudHMgMSB0aHJvdWdoIFx2 KGFyZ2MpLTEKLSAgIGNvbnRhaW4gdGhlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMsIGlmIGFueSwg dGhhdCBhcHBlYXIgYWZ0ZXIgIi0tIiBvcgotICAgIj0iLCBpZiBhbnkuIFRoaXMgYXJyYXkgaXMg c2F2ZWQgYW5kIHJlc3RvcmVkIGFyb3VuZCBtYWNybyBjYWxsczsKLSAgIHJlY2FsbCB0aGF0IGlu c2lkZSBtYWNyb3MgaXQgY29udGFpbnMgdGhlIG1hY3JvIGFyZ3VtZW50IHZlY3RvcgotICAgKGFs bG93aW5nIHlvdSB0byBhY2Nlc3MgYXJndW1lbnRzIHByb2dyYW1tYXRpY2FsbHksIGFuZCB0byBo YXZlIG1vcmUKLSAgIHRoYW4gOSBvZiB0aGVtKS4KLQotICAgQXQgdG9wIGxldmVsLCBub3RpY2Ug dGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgXCZAW10gYW5kIFwmX1tdIGFycmF5cy4KLSAgIFRo ZSBmb3JtZXIgaW5jbHVkZXMgQy1LZXJtaXQgb3B0aW9uczsgdGhlIGxhdHRlciBvbWl0cyB0aGVt LgotCi0gIDcuMTcuIERpYWxvZ3Mgd2l0aCBUaW1lZCBSZXNwb25zZXMKLQotICAgVGhlIEFTSywg QVNLUSwgR0VUT0ssIGFuZCBHRVRDIGNvbW1hbmRzIChsZXQncyBjYWxsIHRoZW0gdGhlICJBU0st Y2xhc3MKLSAgIGNvbW1hbmRzIikgbGV0IHlvdSB3cml0ZSBzY3JpcHRzIHRoYXQgY2Fycnkgb24g ZGlhbG9ncyB3aXRoIHRoZSB1c2VyLAotICAgYXNraW5nIHRoZW0gZm9yIHRleHQsIGEgWWVzL05v IGFuc3dlciwgb3IgYSBjaGFyYWN0ZXIsIHJlc3BlY3RpdmVseS4KLSAgIFByaW9yIHRvIEMtS2Vy bWl0IDcuMCwgdGhlc2UgcXVlc3Rpb25zIHdvdWxkIGFsd2F5cyB3YWl0IGZvcmV2ZXIgZm9yIGFu Ci0gICBhbnN3ZXIuIEluIEMtS2VybWl0IDcuMCwgeW91IG1heSBzcGVjaWZ5IGEgdGltZSBsaW1p dCBmb3IgdGhlbSB3aXRoIHRoZQotICAgbmV3IGNvbW1hbmQ6Ci0KLSAgIFNFVCBBU0stVElNRVIg bnVtYmVyCi0gICAgICAgICAgU2V0cyBhIHRpbWUtbGltaXQgb24gQVNLLUNMQVNTIGNvbW1hbmRz IHRvIHRoZSBnaXZlbiBudW1iZXIgb2YKLSAgICAgICAgICBzZWNvbmRzLiBJZiB0aGUgbnVtYmVy IGlzIDAgb3IgbGVzcywgdGhlcmUgaXMgbm8gdGltZSBsaW1pdCBhbmQKLSAgICAgICAgICB0aGVz ZSBjb21tYW5kcyB3YWl0IGZvcmV2ZXIgZm9yIGEgcmVzcG9uc2UuIEFueSB0aW1lciB0aGF0IGlz Ci0gICAgICAgICAgZXN0YWJsaXNoZWQgYnkgdGhpcyBjb21tYW5kIHJlbWFpbnMgaW4gZWZmZWN0 IGZvciBhbGwgZnV0dXJlCi0gICAgICAgICAgQVNLLWNsYXNzIGNvbW1hbmRzIHVudGlsIGFub3Ro ZXIgU0VUIEFTSy1USU1FUiBjb21tYW5kIGlzIGdpdmVuCi0gICAgICAgICAgKGUuZy4gd2l0aCBh IHZhbHVlIG9mIDAgdG8gZGlzYWJsZSBBU0sgdGltZW91dHMpLgotCi0gICBJRiBBU0tUSU1FT1VU IGNvbW1hbmQKLSAgICAgICAgICBBbiBBU0stY2xhc3MgY29tbWFuZCB0aGF0IHRpbWVzIG91dCBy ZXR1cm5zIGEgZmFpbHVyZSBzdGF0dXMuCi0gICAgICAgICAgWW91IGNhbiB0ZXN0IGV4cGxpY2l0 bHkgZm9yIGEgdGltZW91dCB3aXRoOgotCi0gIDcuMTguIEluY3JlYXNlZCBGbGV4aWJpbGl0eSBv ZiBTV0lUQ0ggQ2FzZSBMYWJlbHMKLQotICAgUHJpb3IgdG8gQy1LZXJtaXQgNy4wIC8gSzk1IDEu MS4xOSwgdGhlIGNhc2UgbGFiZWxzIGluIFNXSVRDSAotICAgc3RhdGVtZW50cyB3ZXJlIHN0cmlu ZyBjb25zdGFudHMuCi0KLSAgIE5vdyBjYXNlIGxhYmVscyBjYW4gYmUgdmFyaWFibGVzLCBmdW5j dGlvbiBjYWxscywgb3IgYW55IG1peHR1cmUgb2YKLSAgIHRoZXNlIHdpdGggZWFjaCBvdGhlciBh bmQvb3Igd2l0aCByZWd1bGFyIGNoYXJhY3RlcnMuCi0KLSAgIEZ1cnRoZXJtb3JlLCBhZnRlciB0 aGUgY2FzZSBsYWJlbCBpcyBldmFsdWF0ZWQsIGl0IGlzIHRyZWF0ZWQgbm90IGFzIGEKLSAgIHN0 cmluZyBjb25zdGFudCwgYnV0IGFzIGEgcGF0dGVybiBhZ2FpbnN0IHdoaWNoIHRoZSBTV0lUQ0gg dmFyaWFibGUgaXMKLSAgIG1hdGNoZWQgKFs2MjZdU2VjdGlvbiA0LjkuMSkuCi0KLSAgIFRoaXMg aW50cm9kdWNlcyBhIHBvc3NpYmxlIGluY29tcGF0aWJpbGl0eSB3aXRoIHByZXZpb3VzIHJlbGVh c2VzLAotICAgc2luY2UgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzIGluIGNhc2UgbGFiZWxzIGFy ZSBubyBsb25nZXIgdGFrZW4KLSAgIGxpdGVyYWxseToKLQotICBcICogPyBbIHsKLQotICAgQW55 IHNjcmlwdHMgdGhhdCBwcmV2aW91c2x5IGluY2x1ZGVkIGFueSBvZiB0aGVzZSBjaGFyYWN0ZXJz IGluIGNhc2UKLSAgIGxhYmVscyBtdXN0IG5vdyBxdW90ZSB0aGVtIHdpdGggYmFja3NsYXNoIChc KS4KLQotICA3LjE5LiAiS2VyYmFuZyIgU2NyaXB0cwotCi0gICBJbiBVTklYIG9ubHksIEtlcm1p dCBzY3JpcHRzIGNhbiBiZSBzdG9yZWQgaW4gZmlsZXMgYW5kIHJ1biAiZGlyZWN0bHkiLAotICAg d2l0aG91dCBzdGFydGluZyBLZXJtaXQgZmlyc3QgKGFzIG5vdGVkIG9uIHBhZ2UgNDY3IG9mIHRo ZSBtYW51YWwpLAotICAganVzdCBhcyBhIHNoZWxsIHNjcmlwdCBjYW4gYmUgInJ1biIgYXMgaWYg aXQgd2VyZSBhIHByb2dyYW0uIFRoaXMKLSAgIHNlY3Rpb24gYW1wbGlmaWVzIG9uIHRoYXQgaWRl YSBhIGJpdCwgYW5kIHByZXNlbnRzIHNvbWUgbmV3IGFzcGVjdHMgb2YKLSAgIHZlcnNpb24gNy4w IHRoYXQgbWFrZSBpdCBlYXNpZXIgdG8gd3JpdGUgYW5kIHJ1biBLZXJtaXQgc2NyaXB0cwotICAg ZGlyZWN0bHkuCi0KLSAgICAgTk9URTogT24gbm9uLVVOSVggcGxhdGZvcm1zLCBzdWNoIGFzIFZN UyBvciBXaW5kb3dzLCBLZXJiYW5nIHNjcmlwdHMKLSAgICAgY2FuIGJlIHJ1biBhcyAia2VybWl0 ICsgc2NyaXB0ZmlsZW5hbWUgYXJnMSBhcmcyIGFyZzMgLi4uIi4gV2luZG93cwotICAgICA5NS85 OC9OVCBmaWxlIGFzc29jaWF0aW9ucyBkbyBub3QgYWxsb3cgZm9yIHRoZSBwYXNzaW5nIG9mCi0g ICAgIHBhcmFtZXRlcnMuIEluIFZNUywgaG93ZXZlciwgeW91IGNhbiBhY2hpZXZlIHRoZSBLZXJi YW5nIGVmZmVjdCBieQotICAgICBkZWZpbmluZyBhIHN5bWJvbCwgYXMgaW4gdGhpcyBleGFtcGxl OgotCi0gICQgYXV0b3RlbG5ldCA6PT0gIiRTWVMkVE9PTFM6S0VSTUlULkVYRSArIEFVVE9URUxO RVQuS1NDIgotCi0gICAgIGFuZCB0aGVuIHJ1bm5pbmcgdGhlIHNjcmlwdCBsaWtlIGFueSBvdGhl ciBjb21tYW5kOgotCi0gICQgYXV0b3RlbG5ldCB4eXpjb3JwLmNvbSBteXVzZXJpZAotCi0gICAg IFNlZSBbNjI3XVNlY3Rpb24gOS4zIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgIisiIHN5bWJv bC4KLQotICAgVU5JWCBzaGVsbCBzY3JpcHRzIGNhbiBzcGVjaWZ5IHdoaWNoIHNoZWxsIHNob3Vs ZCBydW4gdGhlbSBieSBpbmNsdWRpbmcKLSAgIGEgInNoZWJhbmciIGxpbmUgYXQgdGhlIHRvcCwg ZS5nLjoKLQotICAjIS9iaW4vc2gKLQotICAgKGJ1dCBub3QgaW5kZW50ZWQ7IHRoZSBzaGViYW5n IGxpbmUgbXVzdCBiZSBvbiB0aGUgbGVmdCBtYXJnaW4pLiBUaGUKLSAgIHRlcm0gInNoZWJhbmci IGlzIGEgY29udHJhY3Rpb24gb2YgInNoZWxsIiBhbmQgImJhbmciLiAiQmFuZyIgaXMgYQotICAg c2xhbmcgd29yZCBmb3IgdGhlIGV4Y2xhbWF0aW9uIG1hcmsgKCIhIik7ICJzaGViYW5nIiBpdHNl bGYgaXMgYW4KLSAgIEFtZXJpY2FuIHNsYW5nIHdvcmQgdXNlZCBpbiBpbiB0aGUgcGhyYXNlICJ0 aGUgd2hvbGUgc2hlYmFuZyIuCi0KLSAgIFdlIGNhbiBydW4gS2VybWl0IHNjcmlwdHMgZGlyZWN0 bHkgdG9vLCBieSBpbmNsdWRpbmcgYSAic2hlYmFuZyIgbGluZQotICAgdGhhdCBuYW1lcyBLZXJt aXQgYXMgdGhlICJzaGVsbCI7IHRodXMgd2UgY2FsbCB0aGVzZSAiS2VyYmFuZyIgc2NyaXB0cy4K LSAgIFRoaXMgbWVjaGFuaXNtIGhhcyBiZWVuIGNvbnNpZGVyYWJseSBzaW1wbGlmaWVkIGluIEMt S2VybWl0IDcuMCB0bwotICAgZmFjaWxpdGF0ZSBDLUtlcm1pdCdzIHVzZSBhIHNjcmlwdGluZyB0 b29sIGp1c3QgbGlrZSBhbnkgb2YgdGhlIFVOSVgKLSAgIHNoZWxscyBvciBzY3JpcHRpbmcgbGFu Z3VhZ2VzLiBUaGUgcnVsZXMgYXJlIHRoZSBzYW1lIGFzIGZvciBzaGVsbAotICAgc2NyaXB0czoK LQotICAgIDEuIFRoZSBmaXJzdCBsaW5lIG9mIHRoZSBLZXJtaXQgc2NyaXB0IG11c3QgYmVnaW4g d2l0aCAiIyEiCi0gICAgICAgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgdGhlIGZ1bGwgcGF0aG5h bWUgb2YgdGhlIHByb2dyYW0gdGhhdCB3aWxsCi0gICAgICAgZXhlY3V0ZSB0aGUgc2NyaXB0IChp biB0aGlzIGNhc2UsIEMtS2VybWl0IHJhdGhlciB0aGFuIGEgVU5JWAotICAgICAgIHNoZWxsKSwg Zm9sbG93ZWQgYnkgYW55IEtlcm1pdCBjb21tYW5kLWxpbmUgb3B0aW9ucy4gVG8gc3VwcHJlc3MK LSAgICAgICBleGVjdXRpb24gb2YgdGhlIEMtS2VybWl0IGluaXRpYWxpemF0aW9uIGZpbGUgYW5k IHRvIG1ha2UgY29tbWFuZAotICAgICAgIGxpbmUgYXJndW1lbnRzIGF2YWlsYWJsZSB0byB0aGUg c2NyaXB0LCB0aGUgZmluYWwgb3B0aW9uIHNob3VsZCBiZQotICAgICAgICIrIjoKLSAgIyEvdXNy L2xvY2FsL2Jpbi9rZXJtaXQgKwotCi0gICAgICAgU29tZSB1c2VycyBoYXZlIHJlcG9ydGVkIHRo YXQgaW4gc29tZSBjaXJjdW1zdGFuY2VzIGEgc3BhY2UgbWlnaHQKLSAgICAgICBiZSBuZWNlc3Nh cnkgYWZ0ZXIgdGhlIHBsdXMgc2lnbjsgdGhpcyBkZXBlbmRzIG9uIHlvdXIgc2hlbGwgLS0gaXQK LSAgICAgICBoYXMgbm90aGluZyB0byBkbyB3aXRoIEtlcm1pdC4gSW4gbW9zdCBjYXNlcywgbm8g c3BhY2UgaXMgbmVlZGVkLgotICAgIDIuIFRoZSBmaWxlIG11c3QgaGF2ZSBleGVjdXRlIHBlcm1p c3Npb24gKGdyYW50ZWQgdmlhICJjaG1vZCAreAotICAgICAgIGZpbGVuYW1lIikuCi0KLSAgIFdo ZW4gQy1LZXJtaXQgaXMgaW52b2tlZCBmcm9tIGEgS2VyYmFuZyBzY3JpcHQgKG9yIGZyb20gdGhl IHN5c3RlbQotICAgcHJvbXB0IHdpdGggYSAiKyIgY29tbWFuZC1saW5lIGFyZ3VtZW50LCB3aGlj aCBhbW91bnRzIHRvIHRoZSBzYW1lCi0gICB0aGluZyksIHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBy dWxlcyBhcHBseToKLQotICAgIDEuIFRoZSBDLUtlcm1pdCBpbml0aWFsaXphdGlvbiBmaWxlIGlz IE5PVCBleGVjdXRlZCBhdXRvbWF0aWNhbGx5LiBJZgotICAgICAgIHlvdSB3YW50IGl0IHRvIGJl IGV4ZWN1dGVkLCBpbmNsdWRlIGEgVEFLRSBjb21tYW5kIGZvciBpdCBpbiB0aGUKLSAgICAgICBz Y3JpcHQsIGUuZy4gInRha2UgXHYoaG9tZSkua2VybXJjIi4gKEluIHByZXZpb3VzIHJlbGVhc2Vz LCB0aGUKLSAgICAgICBpbml0aWFsaXphdGlvbiBmaWxlIHdhcyBhbHdheXMgZXhlY3V0ZWQsIHdp dGggbm8gd2F5IHRvIHByZXZlbnQgaXQKLSAgICAgICBleGNlcHQgZm9yIHRoZSB1c2VyIHRvIGlu Y2x1ZGUgS2VybWl0LXNwZWNpZmljIGNvbW1hbmQgbGluZSBvcHRpb25zCi0gICAgICAgd2hpY2gg aGFkIG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUgc2NyaXB0KS4gTWFueSBzY3JpcHRzIGhhdmUgbm8g bmVlZAotICAgICAgIGZvciB0aGUgc3RhbmRhcmQgS2VybWl0IGluaXRpYWxpemF0aW9uIGZpbGUs IHdoaWNoIGlzIHF1aXRlIGxlbmd0aHkKLSAgICAgICBhbmQgbm90IG9ubHkgZGVsYXlzIHN0YXJ0 dXAgb2YgdGhlIHNjcmlwdCwgYnV0IGFsc28gc3Bld3MgZm9ydGgKLSAgICAgICBudW1lcm91cyBt ZXNzYWdlcyB0aGF0IGFyZSBtb3N0IGxpa2VseSB1bnJlbGF0ZWQgdG8gdGhlIHNjcmlwdC4KLSAg ICAyLiBJZiB0aGUgaW5pdGlhbGl6YXRpb24gZmlsZSBpcyBub3QgZXhlY3V0ZWQsIG5laXRoZXIg aXMgeW91cgotICAgICAgIGN1c3RvbWl6YXRpb24gZmlsZSwgc2luY2UgdGhlIGluaXRpYWxpemF0 aW9uIGZpbGUgaXMgdGhlIGNvbW1hbmQKLSAgICAgICBmaWxlIGZyb20gd2hpY2ggdGhlIGN1c3Rv bWl6YXRpb24gZmlsZSBpcyBUQUtFbi4gQWdhaW4sIHlvdSBjYW4KLSAgICAgICBpbmNsdWRlIGEg VEFLRSBjb21tYW5kIGZvciB0aGUgaW5pdGlhbGl6YXRpb24gZmlsZSBpZiBkZXNpcmVkLCBvcgot ICAgICAgIGZvciB0aGUgY3VzdG9taXphdGlvbiBmaWxlIGJ5IGl0c2VsZiwgb3IgZm9yIGFueSBv dGhlciBmaWxlLgotICAgIDMuIEMtS2VybWl0IGRvZXMgbm90IHByb2Nlc3MgY29tbWFuZC1saW5l IGFyZ3VtZW50cyBhdCBhbGwuIEluc3RlYWQsCi0gICAgICAgaXQgcGFzc2VzIGFsbCB3b3JkcyBv biB0aGUgY29tbWFuZCBsaW5lIGFmdGVyIHRoZSAiKyIgdG8gdGhlIHNjcmlwdAotICAgICAgIGFz IFwlMCAodGhlIHNjcmlwdCBuYW1lKSwgXCUxLi5cJTkgKHRoZSBmaXJzdCBuaW5lIGFyZ3VtZW50 cyksIGFzCi0gICAgICAgd2VsbCBhcyBpbiB0aGUgYXJndW1lbnQgdmVjdG9yIGFycmF5IFwmX1td LiBUaGUgdmFyaWFibGUgXHYoYXJnYykKLSAgICAgICBpcyBzZXQgdG8gdGhlIHRvdGFsIG51bWJl ciBvZiAid29yZHMiIChhcyBwYXNzZWQgYnkgdGhlIHNoZWxsIHRvCi0gICAgICAgS2VybWl0KSBp bmNsdWRpbmcgdGhlIHNjcmlwdCBuYW1lLiBRdW90aW5nIGFuZCBncm91cGluZyBydWxlcyBhcmUK LSAgICAgICB0aG9zZSBvZiB0aGUgc2hlbGwuCi0gICAgNC4gQXQgYW55IHBvaW50IHdoZXJlIHRo ZSBzY3JpcHQgdGVybWluYXRlcywgaXQgbXVzdCBpbmNsdWRlIGFuIEVYSVQKLSAgICAgICBjb21t YW5kIGlmIHlvdSB3YW50IGl0IHRvIGV4aXQgYmFjayB0byB0aGUgc2hlbGw7IG90aGVyd2lzZQot ICAgICAgIEMtS2VybWl0IGVudGVycyBpbnRlcmFjdGl2ZSBwcm9tcHRpbmcgbW9kZSB3aGVuIHRo ZSBzY3JpcHQKLSAgICAgICB0ZXJtaW5hdGVzLiBUaGUgRVhJVCBjb21tYW5kIGNhbiBpbmNsdWRl IGEgbnVtZXJpYyBzdGF0dXMgdG8gYmUKLSAgICAgICByZXR1cm5lZCB0byB0aGUgc2hlbGwgKDAs IDEsIGV0YyksIHBsdXMgYW4gb3B0aW9uYWwgbWVzc2FnZS4KLQotICAgSGVyZSBpcyBhIHNpbXBs ZSBLZXJiYW5nIHNjcmlwdCB0aGF0IHByaW50cyBpdHMgYXJndW1lbnRzOgotCi0gICMvdXNyL2xv Y2FsL2Jpbi9rZXJtaXQgKwotICBlY2hvIEhlbGxvIGZyb20gXCUwCi0gIGZvciBcJWkgMCBcdihh cmdjKS0xIDEgewotICAgICAgZWNobyBcJWkuICJcJl9bXCVpXSIKLSAgfQotICBleGl0IDAKLQot ICAgU2F2ZSB0aGlzIGZpbGUgYXMgKHNheSkgInNob3dhcmdzIiwgdGhlbiBnaXZlIGl0IGV4ZWN1 dGUgcGVybWlzc2lvbiBhbmQKLSAgIHJ1biBpdCAodGhlIFwmX1tdIGFycmF5IGlzIHRoZSBzYW1l IGFzIFwlMC4uXCU5LCBidXQgYWxsb3dzIHlvdSB0bwotICAgcmVmZXIgdG8gYXJndW1lbnQgdmFy aWFibGVzIHByb2dyYW1tYXRpY2FsbHk7IHNlZSBbNjI4XVNlY3Rpb24gNy41KS4KLSAgIChZZXMs IHlvdSBjb3VsZCBzdWJzdGl0dXRlIFNIT1cgQVJHVU1FTlRTIGZvciB0aGUgbG9vcC4pCi0KLSAg JCBjaG1vZCAreCBzaG93YXJncwotICAkIC4vc2hvd2FyZ3Mgb25lICJ0aGlzIGlzIHR3byIgdGhy ZWUKLQotICAgVGhlIHNjcmlwdCBkaXNwbGF5cyBpdHMgYXJndW1lbnRzOgotCi0gIEhlbGxvIGZy b20gL3Vzci9vbGdhL3Nob3dhcmdzCi0gIDAuICIvdXNyL29sZ2Evc2hvd2FyZ3MiCi0gIDEuICJv bmUiCi0gIDIuICJ0aGlzIGlzIHR3byIKLSAgMy4gInRocmVlIgotICAkCi0KLSAgIE5vdGljZSB0 aGF0IG5vIGJhbm5lcnMgb3IgZ3JlZXRpbmdzIGFyZSBwcmludGVkIGFuZCB0aGF0IHN0YXJ0dXAg aXMKLSAgIGluc3RhbnRhbmVvdXMsIGp1c3QgbGlrZSBhIHNoZWxsIHNjcmlwdC4gQWxzbyBub3Rp Y2UgdGhhdCBncm91cGluZyBvZgotICAgYXJndW1lbnRzIGlzIGRldGVybWluZWQgYnkgKnNoZWxs KiBxdW90aW5nIHJ1bGVzLCBub3QgS2VybWl0IG9uZXMsCi0gICBzaW5jZSB0aGUgY29tbWFuZCBs aW5lIGlzIHBhcnNlZCBieSB0aGUgc2hlbGwgYmVmb3JlIEtlcm1pdCBldmVyIHNlZXMKLSAgIGl0 LgotCi0gICBPZiBjb3Vyc2UgeW91IGNhbiBwdXQgYW55IGNvbW1hbmRzIGF0IGFsbCBpbnRvIGEg S2VyYmFuZyBzY3JpcHQuIEl0IGNhbgotICAgcmVhZCBhbmQgd3JpdGUgZmlsZXMsIG1ha2UgY29u bmVjdGlvbnMsIHRyYW5zZmVyIGZpbGVzLCBhbnl0aGluZyB0aGF0Ci0gICBLZXJtaXQgY2FuIGRv IC0tIGJlY2F1c2UgaXQgKmlzKiBLZXJtaXQuIEFuZCBvZiBjb3Vyc2UsIEtlcmJhbmcgc2NyaXB0 cwotICAgY2FuIGFsc28gYmUgZXhlY3V0ZWQgZnJvbSB0aGUgS2VybWl0IHByb21wdCAob3IgZnJv bSBhbm90aGVyIHNjcmlwdCkKLSAgIHdpdGggYSBUQUtFIGNvbW1hbmQ7IHRoZSBLZXJiYW5nIGxp bmUgaXMgaWdub3JlZCBzaW5jZSBpdCBzdGFydHMgd2l0aAotICAgIiMiLCB3aGljaCBpcyBhIGNv bW1lbnQgaW50cm9kdWNlciB0byBLZXJtaXQganVzdCBhcyBpdCBpcyB0byB0aGUgVU5JWAotICAg c2hlbGwuIEluIFZNUyBhbmQgb3RoZXIgbm9uLVVOSVggcGxhdGZvcm1zLCB0aGUgS2VyYmFuZyBs aW5lIGhhcyBubwotICAgZWZmZWN0IGFuZCBjYW4gYmUgb21pdHRlZC4KLQotICAgSXQgbWlnaHQg YmUgZGVzaXJhYmxlIGZvciBhIHNjcmlwdCB0byBrbm93IHdoZXRoZXIgaXQgaGFzIGJlZW4gaW52 b2tlZAotICAgZGlyZWN0bHkgZnJvbSB0aGUgc2hlbGwgKGFzIGEgS2VyYmFuZyBzY3JpcHQpIG9y IGJ5IGEgVEFLRSBjb21tYW5kCi0gICBnaXZlbiB0byB0aGUgS2VybWl0IHByb21wdCBvciBpbiBh IEtlcm1pdCBjb21tYW5kIGZpbGUgb3IgbWFjcm8uIFRoaXMKLSAgIGNhbiBiZSBkb25lIGFzIGlu IHRoaXMgZXhhbXBsZToKLQotICAjIS91c3IvbG9jYWwvYmluL2tlcm1pdCArCi0gIGFzc2lnbiBc JW0gXGZiYXNlbmFtZShcJTApCi0gIGRlZmluZSB1c2FnZSB7IGV4aXQgMSB7dXNhZ2U6IFwlbSBw aG9uZW51bWJlciBtZXNzYWdlfSB9Ci0gIGRlZmluZSBhcGFnZSB7IChkZWZpbml0aW9uIG9mIEFQ QUdFLi4uKSB9IDsgKFNlZSBbNjI5XWJvb2sgcHAuNDU0LTQ1NikKLSAgeGlmIGVxdWFsICJcJTAi ICJcdihjbWRmaWwpIiB7Ci0gICAgICBpZiBub3QgZGVmIFwlMSB1c2FnZQotICAgICAgaWYgbm90 IGRlZiBcJTIgdXNhZ2UKLSAgICAgIGFwYWdlIHtcJTF9IHtcJTJ9Ci0gICAgICBleGl0IFx2KHN0 YXR1cykKLSAgfQotCi0gICBJbiBhIEtlcmJhbmcgc2NyaXB0LCBcJTAgYW5kIFx2KGNtZGZpbGUp IGFyZSB0aGUgc2FtZTsgYm90aCBvZiB0aGVtIGFyZQotICAgdGhlIG5hbWUgb2YgdGhlIHNjcmlw dC4gV2hlbiBhIHNjcmlwdCBpcyBpbnZva2VkIGJ5IGEgS2VybWl0IFRBS0UKLSAgIGNvbW1hbmQs IFwlMCBpcyB0aGUgbmFtZSBvZiB0aGUgS2VybWl0IHByb2dyYW0sIGJ1dCBcdihjbWRmaWxlKSBp cyB0aGUKLSAgIG5hbWUgb2YgdGhlIHNjcmlwdC4gSW4gdGhlIGV4YW1wbGUgYWJvdmUsIGEgbWFj cm8gY2FsbGVkIEFQQUdFIGlzCi0gICBkZWZpbmVkLiBJZiB0aGUgc2NyaXB0IHdhcyBpbnZva2Vk IGRpcmVjdGx5LCB0aGUgQVBBR0UgbWFjcm8gaXMgYWxzbwotICAgZXhlY3V0ZWQuIE90aGVyd2lz ZSwgaXQgaXMgYXZhaWxhYmxlIGZvciBzdWJzZXF1ZW50IGFuZCBwZXJoYXBzCi0gICByZXBlYXRl ZCB1c2UgbGF0ZXIgaW4gdGhlIEtlcm1pdCBzZXNzaW9uLgotCi0gICBBbiBlc3BlY2lhbGx5IGhh bmR5IHVzZSBmb3IgS2VyYmFuZyBzY3JpcHRzIGlzIHRvIGhhdmUgdGhlCi0gICBpbml0aWFsaXph dGlvbiBmaWxlIGl0c2VsZiBiZSBvbmUuIFNpbmNlIHRoZSBzdGFuZGFyZCBpbml0aWFsaXphdGlv bgotICAgZmlsZSBpcyByYXRoZXIgbG9uZyBhbmQgdGltZS1jb25zdW1pbmcgdG8gZXhlY3V0ZSwg aXQgaXMgb2Z0ZW4gb3ZlcmtpbGwKLSAgIGlmIHlvdSB3YW50IHRvIHN0YXJ0IEtlcm1pdCBqdXN0 IHRvIHRyYW5zZmVyIGEgZmlsZS4gT2YgY291cnNlIHRoZXJlCi0gICBhcmUgY29tbWFuZC1saW5l IHN3aXRjaGVzIHRvIHN1cHByZXNzIGluaXRpYWxpemF0aW9uLWZpbGUgZXhlY3V0aW9uLAotICAg ZXRjLCBidXQgYW5vdGhlciBhcHByb2FjaCBpcyB0byAicnVuIiB0aGUgaW5pdGlhbGl6YXRpb24g ZmlsZSB3aGVuIHlvdQotICAgd2FudCBpdHMgZmVhdHVyZXMgKG5vdGFibHkgdGhlIHNlcnZpY2Vz IGRpcmVjdG9yeSksIGFuZCBydW4gQy1LZXJtaXQKLSAgIGRpcmVjdGx5IHdoZW4geW91IGRvbid0 LiBBIHNldHVwIGxpa2UgdGhpcyByZXF1aXJlcyB0aGF0IChhKSB0aGUKLSAgIEMtS2VybWl0IGlu aXRpYWxpemF0aW9uIGZpbGUgaXMgY29uZmlndXJlZCBhcyBhIEtlcmJhbmcgc2NyaXB0IChoYXMK LSAgICMhL3BhdGguLi4va2VybWl0IGFzIGZpcnN0IGxpbmUpLCBoYXMgZXhlY3V0ZSBwZXJtaXNz aW9uLCBhbmQgaXMgaW4KLSAgIHlvdXIgUEFUSDsgYW5kIChiKSB0aGF0IHlvdSBkb24ndCBoYXZl IGEgLmtlcm1yYyBmaWxlIGluIHlvdXIgbG9naW4KLSAgIGRpcmVjdG9yeS4KLQotICA3LjIwLiBJ RiBhbmQgWElGIFN0YXRlbWVudCBTeW50YXgKLQotICAgVGhlIElGIGNvbW1hbmQgaGFzIGJlZW4g aW1wcm92ZWQgaW4gdHdvIHNpZ25pZmljYW50IHdheXMgaW4gQy1LZXJtaXQKLSAgIDcuMCwgZGVz Y3JpYmVkIGluIHRoZSBmb2xsb3dpbmcgc3Vic2VjdGlvbnMuIEFsbCBjaGFuZ2VzIGFyZSBiYWNr d2FyZHMKLSAgIGNvbXBhdGlibGUuCi0KLSAgICA3LjIwLjEuIFRoZSBJRi9YSUYgRGlzdGluY3Rp b24KLQotICAgVGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gSUYgYW5kIFhJRiBpcyBubyBsb25nZXIg aW1wb3J0YW50IGFzIG9mCi0gICBDLUtlcm1pdCA3LjAuIFlvdSBzaG91bGQgYmUgYWJsZSB0byB1 c2UgSUYgaW4gYWxsIGNhc2VzIChhbmQgb2YgY291cnNlLAotICAgYWxzbyBYSUYgZm9yIGJhY2t3 YXJkcyBjb21wYXRpYmlsaXR5KS4gSW4gdGhlIHBhc3QsIElGIHdhcyB1c2VkIGZvcgotICAgc2lu Z2xlLWNvbW1hbmQgVEhFTiBwYXJ0cywgZm9sbG93ZWQgb3B0aW9uYWxseSBieSBhIHNlcGFyYXRl IEVMU0UKLSAgIGNvbW1hbmQ6Ci0KLSAgSUYgY29uZGl0aW9uIGNvbW1hbmQxICAgIDsgVEhFTiBw YXJ0Ci0gIEVMU0UgY29tbWFuZDIgICAgICAgICAgICA7IEVMU0UgcGFydAotCi0gICB3aGVyZWFz IFhJRiB3YXMgcmVxdWlyZWQgaWYgZWl0aGVyIHBhcnQgaGFkIG11bHRpcGxlIGNvbW1hbmRzOgot Ci0gIFhJRiBjb25kaXRpb24geyBjb21tYW5kLCBjb21tYW5kLCAuLi4gfSBFTFNFIHsgY29tbWFu ZCwgY29tbWFuZCwgLi4uIH0KLQotICAgVGhlIHN5bnRhY3RpYyBkaWZmZXJlbmNlcyB3ZXJlIHBy aW1hcmlseSB0aGF0IElGIC8gRUxTRSB3YXMgdHdvCi0gICBjb21tYW5kcyBvbiB0d28gc2VwYXJh dGUgbGluZXMsIHdoZXJlYXMgWElGIHdhcyBvbmUgY29tbWFuZCBvbiBvbmUKLSAgIGxpbmUsIGFu ZCB0aGF0IFhJRiBhbGxvd2VkIChhbmQgaW4gZmFjdCByZXF1aXJlZCkgYnJhY2VzIGFyb3VuZCBp dHMKLSAgIGNvbW1hbmQgbGlzdHMsIHdoZXJlYXMgSUYgZGlkIG5vdCBhbGxvdyB0aGVtLgotCi0g ICBGdXJ0aGVybW9yZSwgdGhlIGNoYWluaW5nIG9yIG5lc3Rpbmcgb2YgcGFydHMgYW5kIGNvbmRp dGlvbnMgd2FzCi0gICBpbmNvbnNpc3RlbnQuIEZvciBleGFtcGxlLCB0aGUgSUYgY29tbWFuZCBj b3VsZCBiZSB1c2VkIGxpa2UgdGhpczoKLQotICBJRiBjb25kaXRpb24gY29tbWFuZAotICBFTFNF IElGIGNvbmRpdGlvbiBjb21tYW5kCi0gIEVMU0UgSUYgY29uZGl0aW9uIGNvbW1hbmQKLSAgRUxT RSBJRiBjb25kaXRpb24gY29tbWFuZAotICAuLi4KLQotICAgYnV0IFhJRiBjb3VsZCBub3QuIEMt S2VybWl0IDcuMCBhY2NlcHRzIHRoZSBvbGQgc3ludGF4IGFuZCBleGVjdXRlcyBpdAotICAgdGhl IHNhbWUgYXMgcHJldmlvdXMgdmVyc2lvbnMsIGJ1dCBhbHNvIGFjY2VwdHMgYSBuZXcgdW5pZmll ZCBhbmQgbW9yZQotICAgY29udmVuaWVudCBzeW50YXg6Ci0KLSAgIElGIGNvbmRpdGlvbiBjb21t YW5kLWxpc3QgWyBFTFNFIGNvbW1hbmQtbGlzdCBdCi0KLSAgIG9yOgotCi1JRiBjb25kaXRpb24g Y29tbWFuZC1saXN0Ci1FTFNFIGNvbW1hbmQtbGlzdAotCi0gICBpbiB3aGljaCB0aGUgRUxTRSBw YXJ0IGlzIG9wdGlvbmFsLCBhbmQgd2hlcmUgY29tbWFuZC1saXN0IGNhbiBiZSBhCi0gICBzaW5n bGUgY29tbWFuZCAod2l0aCBvciB3aXRob3V0IGJyYWNlcyBhcm91bmQgaXQpIG9yIGEgbGlzdCBv ZiBjb21tYW5kcwotICAgZW5jbG9zZWQgaW4gYnJhY2VzLiBFeGFtcGxlczoKLQotICAgRXhhbXBs ZSAxOgotCi0gIElGIGNvbmRpdGlvbiB7IGNvbW1hbmQxLCBjb21tYW5kMiB9IEVMU0UgeyBjb21t YW5kMywgY29tbWFuZDQgfQotCi0gICBFeGFtcGxlIDIgKHNhbWUgYXMgRXhhbXBsZSAxKToKLQot ICBJRiBjb25kaXRpb24gewotICAgICBjb21tYW5kMQotICAgICBjb21tYW5kMgotICB9IEVMU0Ug ewotICAgICBjb21tYW5kMwotICAgICBjb21tYW5kNAotICB9Ci0KLSAgIEV4YW1wbGUgMyAoc2Ft ZSBhcyAxIGFuZCAyKToKLQotICBJRiBjb25kaXRpb24gewotICAgICBjb21tYW5kMQotICAgICBj b21tYW5kMgotICB9Ci0gIEVMU0UgeyBjb21tYW5kMywgY29tbWFuZDQgfQotCi0gICBFeGFtcGxl IDQgKHNhbWUgYXMgMS0zKToKLQotICBJRiBjb25kaXRpb24gewotICAgICBjb21tYW5kMQotICAg ICBjb21tYW5kMgotICB9Ci0gIEVMU0UgewotICAgICBjb21tYW5kMwotICAgICBjb21tYW5kNAot ICB9Ci0KLSAgIEV4YW1wbGUgNSAoRUxTRSBjYW4gYmUgZm9sbG93ZWQgYnkgYW5vdGhlciBjb21t YW5kKToKLQotICBJRiBjb25kaXRpb24xIHsKLSAgICAgY29tbWFuZDEKLSAgICAgY29tbWFuZDIK LSAgfSBFTFNFIElGIGNvbmRpdGlvbjIgewotICAgICBjb21tYW5kMwotICAgICBjb21tYW5kNAot ICB9IEVMU0UgewotICAgICBjb21tYW5kNQotICAgICBjb21tYW5kNgotICB9Ci0KLSAgIEV4YW1w bGUgNSBzdWdnZXN0cyBvdGhlciBwb3NzaWJpbGl0aWVzOgotCi0gIElGIGNvbmRpdGlvbiB7Ci0g ICAgIGNvbW1hbmQxCi0gICAgIGNvbW1hbmQyCi0gIH0gRUxTRSBGT1IgdmFyaWFibGUgaW5pdGlh bCBmaW5hbCBpbmNyZW1lbnQgewotICAgICBjb21tYW5kMwotICAgICBjb21tYW5kNAotICB9Ci0K LSAgIEFuZCB0aGlzIHRvbyBpcyBwb3NzaWJsZSwgZXhjZXB0IGZvciBzb21lIG5vbi1vYnZpb3Vz IHF1b3RpbmcKLSAgIGNvbnNpZGVyYXRpb25zOgotCi0gIGRjbCBcJmFbNl0gPSBvbmUgdHdvIHRo cmVlIGZvdXIgZml2ZSBzaXgKLQotICBJRiA8IFwlbiAzIHsKLSAgICAgIGVjaG8gXFwlbiBpcyB0 b28gc21hbGw6IFwlbgotICB9IEVMU0UgRk9SIFxcJWkgMSBcXCVuIDEgewotICAgICAgZWNobyBc XCVpLiBcXCZhW1xcJWldCi0gIH0KLQotICAgKFRoZSBsb29wIHZhcmlhYmxlIG11c3QgYmUgcXVv dGVkIGluIHRoaXMgY29udGV4dCB0byBwcmV2ZW50IHByZW1hdHVyZQotICAgZXZhbHVhdGlvbi4p Ci0KLSAgIE1hbnkgQyBwcm9ncmFtbWVycyBwcmVmZXIgdG8gY29kZSBJRi1FTFNFLCBXSElMRSwg Rk9SLCBhbmQgU1dJVENIIHdpdGgKLSAgIHRoZSBibG9jay1vcGVuIGJyYWNrZXQgb24gaXRzIG93 biBsaW5lLiBUaGlzIGRvZXMgbm90IHdvcmsgaW4gS2VybWl0OgotCi0gIElGIGNvbmRpdGlvbiAg ICAgICAgOyBUSElTIEZPUk1BVCBET0VTIE5PVCBOT1QgV09SSwotICB7Ci0gICAgIGNvbW1hbmQx Ci0gICAgIGNvbW1hbmQyCi0gIH0KLSAgRUxTRQotICB7Ci0gICAgIGNvbW1hbmQzCi0gICAgIGNv bW1hbmQ0Ci0gIH0KLQotICAgRXhwbGFuYXRpb246IHRoZSBLZXJtaXQgY29tbWFuZCBsYW5ndWFn ZSBpcyBsaW5lIG9yaWVudGVkOyBlYWNoIGxpbmUgaXMKLSAgIGEgY29tbWFuZCwgZWFjaCBjb21t YW5kIGlzIGEgbGluZS4gVGhlIGZpcnN0IGxpbmUgYWJvdmUsIGhhdmluZyBubyBoaW50Ci0gICBv ZiBjb250aW51YXRpb24sIGlzIGFuIGluY29tcGxldGUgY29tbWFuZCwgeWV0IHN5bnRhY3RpY2Fs bHkgY29ycmVjdCAtLQotICAgYW4gSUYgc3RhdGVtZW50IHdpdGggYW4gZW1wdHkgVEhFTiBwYXJ0 LiBJbnRlcmVzdGluZ2x5IGVub3VnaCwgc2luY2UKLSAgIHRoZSBuZXh0IGxpbmUgYmVnaW5zIHdp dGggInsiIGl0IGlzIGEgYmxvY2sgdGhhdCAoaW4gWzYzMF1DLUtlcm1pdCA4LjAKLSAgIGFuZCBs YXRlcikgaXMgYSBibG9jayB0aGF0IGlzIGV4ZWN1dGVkIHVuY29uZGl0aW9uYWxseS4gVGh1cyB0 aGUKLSAgIGNvbW1hbmRzIGluIHRoZSBUSEVOIHBhcnQgYXJlIGV4ZWN1dGVkIHJlZ2FyZGxlc3Mg b2Ygd2hldGhlciB0aGUKLSAgIGNvbmRpdGlvbiBpcyB0cnVlIC0tIG5vdCB3aGF0IHlvdSB3YW50 ZWQhCi0KLSAgIFRoZSBuZXcgYmxvY2sgc3ludGF4IHVzZWQgaW4gdGhlIElGLCBXSElMRSwgRk9S LCBhbmQgU1dJVENIIGNvbW1hbmRzCi0gICBlbXBsb3lzIGNlcnRhaW4gdHJpY2tzIHRvIGFsbG93 IG11bHRpcGxlIGxpbmVzIHRvIGJlIHRyZWF0ZWQgYXMgYQotICAgc2luZ2xlIGxpbmU6Ci0KLSAg ICAgKiBBbnkgbGluZSBlbmRpbmcgd2l0aCAieyIgKGlnbm9yaW5nIHdoaXRlc3BhY2UgYW5kIGNv bW1lbnRzKSBtYXJrcwotICAgICAgIHRoZSBiZWdpbm5pbmcgb2YgYSBibG9jazsKLSAgICAgKiBB bnkgbGluZSBiZWdpbm5pbmcgd2l0aCAifSIgKGlnbm9yaW5nIHdoaXRlc3BhY2UpIG1hcmtzIHRo ZSBlbmQgb2YKLSAgICAgICBhIGJsb2NrOwotICAgICAqIExpbmUgYnJlYWtzIHdpdGhpbiBhIGJs b2NrIHNlcGFyYXRlIGNvbW1hbmRzOyB0aGUgY29tbWEgaXMgaW1wbGllZAotICAgICAgIGJ5IHRo ZSBsaW5lIGVuZC4KLQotICAgVGh1czoKLQotICBJRiBjb25kaXRpb24gewotICAgICBjb21tYW5k MQotICAgICBjb21tYW5kMgotICB9IEVMU0UgewotICAgICBjb21tYW5kMwotICAgICBjb21tYW5k NAotICB9Ci0KLSAgIGlzICJhc3NlbWJsZWQiIGludG86Ci0KLSAgSUYgY29uZGl0aW9uIHsgY29t bWFuZDEsIGNvbW1hbmQyIH0gRUxTRSB7IGNvbW1hbmQzLCBjb21tYW5kNCB9Ci0KLSAgIE5vdGUg dGhlIGFkZGl0aW9uIG9mIGNvbW1hcyB0byBzZXBhcmF0ZSBjb21tYW5kcyB3aXRoaW4gYmxvY2tz LiBBcwotICAgYWx3YXlzLCBpZiB5b3UgbmVlZCBjb250aW51ZSBhIGNvbW1hbmQgb250byBhZGRp dGlvbmFsIGxpbmVzLCB5b3UgY2FuCi0gICBlbmQgdGhlIGNvbnRpbnVlZCBsaW5lcyB3aXRoIHRo ZSBjb250aW51YXRpb24gY2hhcmFjdGVyLCAiLSIuIFlvdSBjYW4KLSAgIGFsc28gZG8gdGhpcyBp ZiB5b3Ugd2FudCB0byBwdXQgb3BlbmluZyBicmFja2V0cyBvbiB0aGVpciBvd24gbGluZToKLQot ICBJRiBjb25kaXRpb24gLQotICB7Ci0gICAgIGNvbW1hbmQxCi0gICAgIGNvbW1hbmQyCi0gIH0K LSAgRUxTRSAtCi0gIHsKLSAgICAgY29tbWFuZDMKLSAgICAgY29tbWFuZDQKLSAgfQotCi0gICAg Ny4yMC4yLiBCb29sZWFuIEV4cHJlc3Npb25zIChUaGUgSUYvV0hJTEUgQ29uZGl0aW9uKQotCi0g ICBQcmlvciB0byBDLUtlcm1pdCA3LjAsIHRoZSBJRiBhbmQgV0hJTEUgY29tbWFuZHMgYWNjZXB0 ZWQgb25seSBhIHNpbmdsZQotICAgQm9vbGVhbiAoInRydWUgb3IgZmFsc2UiKSBhc3NlcnRpb24s IGUuZy4gImlmID4gXCVtIDAgY29tbWFuZCIgb3IgImlmCi0gICBleGlzdCBmaWxlbmFtZSBjb21t YW5kIi4gVGhlcmUgd2FzIG5vIHdheSB0byBmb3JtIEJvb2xlYW4gZXhwcmVzc2lvbnMKLSAgIGFu ZCwgaW4gcGFydGljdWxhciwgbm90aGluZyB0aGF0IGFwcHJvYWNoZWQgYSBCb29sZWFuIE9SIGZ1 bmN0aW9uIChBTkQKLSAgIGNvdWxkIGJlIHNpbXVsYXRlZCBieSBjb25jYXRlbmF0aW5nIElGIHN0 YXRlbWVudHM6ICJpZiBjb25kaXRpb24xIGlmCi0gICBjb25kaXRpb24yLi4iKS4KLQotICAgQy1L ZXJtaXQgNy4wIChhbmQgSzk1IDEuMS4xOSkgYWxsb3cgZ3JvdXBpbmcgb2YgQm9vbGVhbiBhc3Nl cnRpb25zCi0gICB1c2luZyBwYXJlbnRoZXNlcyBhbmQgY29tYmluaW5nIHRoZW0gdXNpbmcgQU5E IChvciAmJikgYW5kIE9SIChvciB8fCkuCi0gICBFYWNoIG9mIHRoZXNlIG9wZXJhdG9ycyAtLSBp bmNsdWRpbmcgdGhlIHBhcmVudGhlc2VzIC0tIGlzIGEgZmllbGQgYW5kCi0gICBtdXN0IGJlIHNl dCBvZmYgYnkgc3BhY2VzLiBBTkQgaGFzIGhpZ2hlciBwcmVjZWRlbmNlIHRoYW4gT1IsIE5PVCBo YXMKLSAgIGhpZ2hlciBwcmVjZWRlbmNlIHRoYW4gQU5ELCBidXQgcGFyZW50aGVzZXMgY2FuIGJl IHVzZWQgdG8gZm9yY2UgYW55Ci0gICBkZXNpcmVkIG9yZGVyIG9mIGV2YWx1YXRpb24uIFRoZSBv bGQgc3ludGF4IGlzIHN0aWxsIGFjY2VwdGVkLgotCi0gICBIZXJlIGFyZSBzb21lIGV4YW1wbGVz OgotCi0gIGRlZmluZSBcJXogMCAgICAgICAgICAgICAgICAgICAgICAgICAgOyBEZWZpbmUgc29t ZSB2YXJpYWJsZXMKLSAgZGVmaW5lIFwlbiAxICAgICAgICAgICAgICAgICAgICAgICAgICA7IGZv ciB1c2UgaW4gdGhlIGV4YW1wbGVzLgotCi0gIGlmID4gXCVuIFwleiBlY2hvIFwlbiBpcyBncmVh dGVyLiAgICAgOyBPcmlnaW5hbCBmb3JtYXQgLSBzdGlsbCBhY2NlcHRlZC4KLSAgaWYgKCA+IFwl biBcJXogKSBlY2hvIFwlbiBpcyBncmVhdGVyLiA7IFBhcmVudGhlc2VzIG1heSBiZSB1c2VkIGlu IDcuMC4KLSAgaWYgKCA+IFwlbiBcJXogJiYgbm90ID0gXCV6IDAgKSAuLi4gICA7IFR3byBhc3Nl cnRpb25zIGNvbWJpbmVkIHdpdGggQU5ELgotICBpZiAoID4gXCVuIFwleiBhbmQgbm90ID0gXCV6 IDAgKSAuLi4gIDsgU2FtZSBhcyBwcmV2aW91cyAoImFuZCIgPSAiJiYiKS4KLSAgaWYgKCA+IFwl biBcJXogfHwgbm90ID0gXCV6IDAgKSAuLi4gICA7IFR3byBhc3NlcnRpb25zIGNvbWJpbmVkIHdp dGggT1IuCi0gIGlmICggPiBcJW4gXCV6IG9yIG5vdCA9IFwleiAwICkgLi4uICAgOyBTYW1lIGFz IHByZXZpb3VzICgib3IiID0gInx8IikuCi0gIGlmICggPiBcJW4gXCV6IHx8ICE9IFwleiAwICkg Li4uICAgICAgOyBEaXR0byAoIiE9IiA9ICJub3QgPSIpLgotICB3aGlsZSAoIDEgKSB7IC4uLiB9 ICAgICAgICAgICAgICAgICAgIDsgSnVzdCBsaWtlIEMuCi0KLSAgIE5vdGljZSB0aGUgc3BhY2Vz IGFyb3VuZCBhbGwgb3BlcmF0b3JzIGluY2x1ZGluZyB0aGUgcGFyZW50aGVzZXMgLS0KLSAgIHRo ZXNlIGFyZSByZXF1aXJlZC4gVGhlIGZvbGxvd2luZyBleGFtcGxlcyBzaG93IGhvdyBwYXJlbnRo ZXNlcyBjYW4gYmUKLSAgIHVzZWQgdG8gYWx0ZXIgdGhlIHByZWNlZGVuY2Ugb2YgdGhlIEFORCBh bmQgT1Igb3BlcmF0b3JzOgotCi0gIGlmICggZmFsc2UgfHwgZmFsc2UgJiYgZmFsc2UgfHwgdHJ1 ZSApICwuLiAgICAgICAgIDsgVHJ1ZQotICBpZiAoIGZhbHNlIHx8ICggZmFsc2UgJiYgZmFsc2Ug KSB8fCB0cnVlICkgLi4uICAgICA7IFNhbWUgYXMgcHJldmlvdXMKLSAgaWYgKCAoIGZhbHNlIHx8 IGZhbHNlICkgJiYgKCBmYWxzZSB8fCB0cnVlICkgKSAuLi4gOyBGYWxzZQotCi0gICBTaW1pbGFy bHkgZm9yIE5PVDoKLQotICBpZiAoIG5vdCB0cnVlICYmIGZhbHNlICkgLi4uICAgICAgICAgIDsg RmFsc2UgKE5PVCBiaW5kcyB0byBUUlVFIG9ubHkpCi0gIGlmICggKCBub3QgdHJ1ZSApICYmIGZh bHNlICkgLi4uICAgICAgOyBTYW1lIGFzIHByZXZpb3VzCi0gIGlmICggbm90ICggdHJ1ZSAmJiBm YWxzZSApICkgLi4uICAgICAgOyBUcnVlIChOT1QgYmluZHMgdG8gKFRSVUUgJiYgRkFMU0UpKQot Ci0gICBOb3RlczoKLQotICAgIDEuIFRoZSBzeW50YXggb2YgdGhlIEJvb2xlYW4gZXhwcmVzc2lv biBpdHNlbGYgaGFzIG5vdCBjaGFuZ2VkOyBlYWNoCi0gICAgICAgZXhwcmVzc2lvbiBiZWdpbnMg d2l0aCBhIGtleXdvcmQgb3IgdG9rZW4gc3VjaCBhcyAiRVhJU1QiLCAiPiIsIG9yCi0gICAgICAg Ij0iLCBldGM7IG9wZXJhdG9ycyBzdWNoIGFzICI8IiwgIj0iLCBhbmQgIj4iIGRvIG5vdCBnbyBi ZXR3ZWVuCi0gICAgICAgdGhlaXIgb3BlcmFuZHMgYnV0IHByZWNlZGUgdGhlbSBhcyBiZWZvcmU7 IHRoaXMgbWlnaHQgYmUgY2FsbGVkCi0gICAgICAgInJldmVyc2UgcmV2ZXJzZSBQb2xpc2ggbm90 YXRpb24iOyBpdCBhbGxvd3MgZGV0ZXJtaW5pc3RpYwotICAgICAgIG9uLXRoZS1mbHkgcGFyc2lu ZyBvZiB0aGVzZSBleHByZXNzaW9ucyBhdCB0aGUgQy1LZXJtaXQ+IHByb21wdCBhcwotICAgICAg IHdlbGwgYXMgaW4gc2NyaXB0cywgYW5kIGFsbG93cyA/LWhlbHAgdG8gYmUgZ2l2ZW4gZm9yIGVh Y2ggaXRlbQotICAgICAgIHdoZW4gSUYgb3IgV0hJTEUgY29tbWFuZHMgYXJlIHR5cGVkIGF0IHRo ZSBwcm9tcHQuCi0gICAgMi4gUGFyZW50aGVzZXMgYXJlIHJlcXVpcmVkIHdoZW4gdGhlcmUgaXMg bW9yZSB0aGFuIG9uZSBCb29sZWFuCi0gICAgICAgYXNzZXJ0aW9uLgotICAgIDMuIFBhcmVudGhl c2VzIGFyZSBub3QgcmVxdWlyZWQsIGJ1dCBhcmUgYWxsb3dlZCwgd2hlbiB0aGVyZSBpcyBvbmx5 Ci0gICAgICAgb25lIEJvb2xlYW4gYXNzZXJ0aW9uLgotICAgIDQuIEV2YWx1YXRpb24gb2YgQm9v bGVhbiBhc3NlcnRpb25zIG9jY3VycyBsZWZ0IHRvIHJpZ2h0LCBidXQgdGhlCi0gICAgICAgcmVz dWx0aW5nIEJvb2xlYW4gZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgYWZ0ZXJ3YXJkcyBhY2NvcmRp bmcgdG8KLSAgICAgICB0aGUgcnVsZXMgb2YgcHJlY2VkZW5jZS4gQWxsIEJvb2xlYW4gYXNzZXJ0 aW9ucyBhcmUgYWx3YXlzCi0gICAgICAgZXZhbHVhdGVkOyB0aGVyZSBpcyBubyAiZWFybHkgc3Rv cHBpbmciIHByb3BlcnR5IGFuZCB0aGVyZWZvcmUgbm8KLSAgICAgICBxdWVzdGlvbiBhYm91dCB3 aGVuIG9yIGlmIHNpZGUgZWZmZWN0cyB3aWxsIG9jY3VyIC0tIGlmIGFueSBCb29sZWFuCi0gICAg ICAgYXNzZXJ0aW9uIGhhcyBzaWRlIGVmZmVjdHMsIHRoZXkgd2lsbCBhbHdheXMgb2NjdXIuIChF YXJseSBzdG9wcGluZwotICAgICAgIGlzLCBob3dldmVyLCBwb3NzaWJsZSB3aXRoIHRoZSBbNjMx XVMtRXhwcmVzc2lvbiBJRiBpbnRyb2R1Y2VkIGluCi0gICAgICAgQy1LZXJtaXQgOC4wLikKLQot ICAgQ29uc3RydWN0aW9ucyBvZiBhcmJpdHJhcnkgY29tcGxleGl0eSBhcmUgcG9zc2libGUsIHdp dGhpbiByZWFzb24uCi0KLSAgIEFsc28gc2VlIFs2MzJdU2VjdGlvbiA3LjQgZm9yIG5ldyBJRiAv IFdISUxFIGNvbmRpdGlvbnMuCi0KLSAgNy4yMS4gU2NyZWVuIEZvcm1hdHRpbmcgYW5kIEN1cnNv ciBDb250cm9sCi0KLSAgIEMtS2VybWl0IDcuMCBhZGRzIGEgc2ltcGxlIHdheSB0byBjcmVhdGUg Zm9ybWF0dGVkIHNjcmVlbnMsIHRoZSBTQ1JFRU4KLSAgIGNvbW1hbmQ6Ci0KLSAgIFNDUkVFTiB7 IENMRUFSLCBDTEVPTCwgTU9WRS1UTyByb3cgWyBjb2x1bW4gXSB9Ci0gICAgICAgICAgUGVyZm9y bXMgc2NyZWVuLWZvcm1hdHRpbmcgYWN0aW9ucy4gQ29ycmVjdCBvcGVyYXRpb24gb2YgdGhlc2UK LSAgICAgICAgICBjb21tYW5kcyBkZXBlbmRzIG9uIHByb3BlciB0ZXJtaW5hbCBzZXR1cCBvbiBi b3RoIGVuZHMgb2YgdGhlCi0gICAgICAgICAgY29ubmVjdGlvbiAtLSBtYWlubHkgdGhhdCB0aGUg aG9zdCB0ZXJtaW5hbCB0eXBlIGlzIHNldCB0byBhZ3JlZQotICAgICAgICAgIHdpdGggdGhlIGtp bmQgb2YgdGVybWluYWwgb3IgdGhlIGVtdWxhdGlvbiB5b3UgYXJlIHZpZXdpbmcKLSAgICAgICAg ICBDLUtlcm1pdCB0aHJvdWdoLiBUaGUgVU5JWCB2ZXJzaW9uIHVzZXMgdGVybWluZm8gb3IgdGVy bWNhcCAobm90Ci0gICAgICAgICAgY3Vyc2VzKTsgdGhlIFZNUyB2ZXJzaW9uIHVzZXMgU01HOyBL LTk1IHVzZXMgaXRzIGJ1aWx0IGluIHNjcmVlbgotICAgICAgICAgIG1hbmFnZXIuCi0KLSAgIFND UkVFTiBDTEVBUgotICAgICAgICAgIE1vdmVzIHRoZSBjdXJzb3IgdG8gaG9tZSBwb3NpdGlvbiBh bmQgY2xlYXJzIHRoZSBlbnRpcmUgc2NyZWVuLgotICAgICAgICAgIFN5bm9ueW1zOiBDTEVBUiBD T01NQU5ELVNDUkVFTiBBTEwgKEstOTUgb25seSksIENMUywgQ0xFQVIKLSAgICAgICAgICBTQ1JF RU4uCi0KLSAgIFNDUkVFTiBDTEVPTAotICAgICAgICAgIENsZWFycyBmcm9tIHRoZSBjdXJyZW50 IGN1cnNvciBwb3NpdGlvbiB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLgotICAgICAgICAgIFN5bm9u eW06IENMRUFSIENPTU1BTkQtU0NSRUVOIEVPTCAoSy05NSBvbmx5KQotCi0gICBTQ1JFRU4gTU9W RS1UTyByb3cgY29sdW1uCi0gICAgICAgICAgTW92ZXMgdGhlIGN1cnNvciB0byB0aGUgaW5kaWNh dGVkIHJvdyBhbmQgY29sdW1uLiBUaGUgcm93IGFuZAotICAgICAgICAgIGNvbHVtbiBudW1iZXJz IGFyZSAxLWJhc2VkLCBzbyBvbiBhIDI0eDgwIHNjcmVlbiB0aGUgaG9tZQotICAgICAgICAgIHBv c2l0aW9uIGlzIDEgMSBhbmQgdGhlIGxvd2VyIHJpZ2h0IGNvcm5lciBpcyAyNCA4MC4gSWYgYSBy b3cgb3IKLSAgICAgICAgICBjb2x1bW4gbnVtYmVyIGlzIGdpdmVuIHRoYXQgdG9vIGxhcmdlIGZv ciB3aGF0IEtlcm1pdCBvciB0aGUKLSAgICAgICAgICBvcGVyYXRpbmcgc3lzdGVtIHRoaW5rcyBp cyB5b3VyIHNjcmVlbiBzaXplLCB0aGUgYXBwcm9wcmlhdGUKLSAgICAgICAgICBudW1iZXIgaXMg c3Vic3RpdHV0ZWQuCi0KLSAgIFRoZXNlIGVzY2FwZSBzZXF1ZW5jZXMgdXNlZCBieSB0aGVzZSBj b21tYW5kcyBkZXBlbmRzIG9uIHRoZSBwbGF0Zm9ybS4KLSAgIEluIFVOSVgsIHlvdXIgVEVSTSBl bnZpcm9ubWVudCB2YXJpYWJsZSBpcyB1c2VkIHRvIHF1ZXJ5IHRoZQotICAgdGVybWluZm8vdGVy bWNhcCBkYXRhYmFzZTsgaWYgdGhlIHF1ZXJ5IGZhaWxzLCBBTlNJL1ZUMTAwIHNlcXVlbmNlcyBh cmUKLSAgIHVzZWQuIEluIFZNUywgdGhlIFNNRyBsaWJyYXJ5IGlzIHVzZWQsIHdoaWNoIHNlbmRz IHNlcXVlbmNlcyBiYXNlZCBvbgotICAgeW91ciBWTVMgdGVybWluYWwgdHlwZS4gSzk1IGRvZXMg aXRzIG93biBzY3JlZW4gY29udHJvbC4gT24gb3RoZXIKLSAgIHBsYXRmb3JtcyAoc3VjaCBhcyBB T1MvVlMsIFZPUywgZXRjKSwgc2NyZWVuIGZvcm1hdHRpbmcgaXMgbm90Ci0gICBzdXBwb3J0ZWQs IGFuZCB0aGUgU0NSRUVOIGNvbW1hbmQgZG9lcyBub3RoaW5nLgotCi0gICBUaGUgdGhyZWUgU0NS RUVOIGFjdGlvbnMgY2FuIGJlIHVzZWQgaW4gc2NyaXB0cyB0byBwcm9kdWNlIG1lbnVzLAotICAg Zm9ybWF0dGVkIHNjcmVlbnMsIGR5bmFtaWMgZGlzcGxheXMsIGV0Yy4gUmVsYXRlZCB2YXJpYWJs ZXMgaW5jbHVkZToKLQotICBcdih0ZXJtaW5hbCkgICAgIFRoZSB0eXBlIHRlcm1pbmFsIEMtS2Vy bWl0IHRoaW5rcyB5b3UgaGF2ZS4KLSAgXHYocm93cykgICAgICAgICBUaGUgbnVtYmVyIG9mIHJv d3MgQy1LZXJtaXQgdGhpbmtzIHlvdXIgdGVybWluYWwgaGFzLgotICBcdihjb2x1bW5zKSAgICAg IFRoZSBudW1iZXIgb2YgY29sdW1ucyBDLUtlcm1pdCB0aGlua3MgeW91ciB0ZXJtaW5hbCBoYXMu Ci0KLSAgIEFuZCBmdW5jdGlvbnM6Ci0KLSAgXGZzY3JuY3VyeCgpICAgICBUaGUgY3VycmVudCBY IGNvb3JkaW5hdGUgb2YgdGhlIGN1cnNvciAoSy05NSBvbmx5KS4KLSAgXGZzY3JuY3VyeSgpICAg ICBUaGUgY3VycmVudCBZIGNvb3JkaW5hdGUgb2YgdGhlIGN1cnNvciAoSy05NSBvbmx5KS4KLSAg XGZzY3Juc3RyKHgseSxuKSBUaGUgc3RyaW5nIG9mIGxlbmd0aCBuYXQgcG9zaXRpb24gKHgseSkg KEstOTUgb25seSkuCi0KLSAgIEFuZCBjb21tYW5kczoKLQotICBFQ0hPIHN0cmluZyAgICAgIFdy aXRlcyBzdHJpbmcgKyBDUkxGIGF0IHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbi4KLSAgWEVD SE8gc3RyaW5nICAgICBXcml0ZXMgc3RyaW5nIGF0IGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uOyBD UkxGIG5vdCBzdXBwbGllZC4KLSAgR0VUQyB2IHByb21wdCAgICBJc3N1ZXMgcHJvbXB0LCByZWFk cyBvbmUgY2hhcmFjdGVyIGludG8gdmFyaWFibGUgdiwgbm8gZWNoby4KLQotICAgQW5kIHNwZWNp YWwgY2hhcmFjdGVyczoKLQotICBDdHJsLUwgICAgICAgICAgIEF0IHRoZSBDLUtlcm1pdD4gY29t bWFuZCBwcm9tcHQsIG9yIGluIGEgQy1LZXJtaXQgY29tbWFuZCwKLSAgICAgICAgICAgICAgICAg ICB3b3JrcyBsaWtlIFJldHVybiBvciBFbnRlciwgYnV0IGFsc28gY2xlYXJzIHRoZSBzY3JlZW4K LQotICAgRXhhbXBsZSAxOiBBIG1hY3JvIHRoYXQgcHJpbnRzIGEgbWVzc2FnZSBcJTEgYXQgY3Vy c29yIHBvc2l0aW9uCi0gICAoXCUyLFwlMyk6Ci0KLSAgZGVmaW5lIE1TRyB7Ci0gICAgICBpZiBu b3QgZGVmIFwlMyBkZWYgXCUzIDAgICAgICAgICAgICAgOyBEZWZhdWx0IGNvbHVtbiB0byAwCi0g ICAgICBpZiA+IFx2KGFyZ2MpIDIgc2NyZWVuIG1vdmUgXCUyIFwlMyAgOyBNb3ZlIHRvIGdpdmVu IHJvdy9jb2wgKGlmIGFueSkKLSAgICAgIHNjcmVlbiBjbGVvbCAgICAgICAgICAgICAgICAgICAg ICAgICA7IENsZWFyIHRvIGVuZCBvZiBsaW5lCi0gICAgICBpZiBkZWYgXCUxIHhlY2hvIFxmY29u dGVudHMoXCUxKSAgICAgOyBQcmludCBtZXNzYWdlIChpZiBhbnkpCi0gIH0KLQotICAgRXhhbXBs ZSAyOiBBIG1hY3JvIHB1dCB0aGUgY3Vyc29yIG9uIHRoZSBib3R0b20gc2NyZWVuIGxpbmUsIGxl ZnQKLSAgIG1hcmdpbjoKLQotICBkZWZpbmUgQk9UIHsKLSAgICAgIHNjcmVlbiBtb3ZlIFx2KHJv d3MpIDAKLSAgfQotCi0gICBFeGFtcGxlIDM6IEEgbWFjcm8gdG8gY2VudGVyIG1lc3NhZ2UgXCUx IG9uIGxpbmUgXCUyLgotCi0gIGRlZmluZSBDRU5URVIgewotICAgICAgaWYgbm90IGRlZiBcJTIg ZGVmIFwlMiAxCi0gICAgICAuXCV4IDo6PSAoXHYoY29scyktXGZsZW4oXCUxKSkvMgotICAgICAg bXNnIHtcJTF9IHtcJTJ9IHtcJXh9Ci0gIH0KLQotICAgRXhhbXBsZSA0OiBBIHNpbXBsZSBtZW51 IChidWlsZGluZyBvbiBFeGFtcGxlcyAxLTMpOgotCi0gIGRlZiBcJWMgMCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOyBNZW51IGNob2ljZSB2YXJpYWJsZQotICBzY3JlZW4gY2xlYXIgICAg ICAgICAgICAgICAgICAgICAgICAgIDsgQ2xlYXIgdGhlIHNjcmVlbgotICBjZW50ZXIge1dlbGNv bWUgdG8gVGhpcyBNZW51fSAyICAgICAgIDsgRGlzcGxheSB0aGUgbWVudQotICBtc2cge0Nob2lj ZXM6fSA0Ci0gIG1zZyB7IDEuIEZpbGV9IDYKLSAgbXNnIHsgMi4gRWRpdH0gNwotICBtc2cgeyAz LiBFeGl0fSA4Ci0gIHdoaWxlICggIT0gXCVjIDMgKSB7ICAgICAgICAgICAgICAgICAgOyBSZWFk IGFuZCB2ZXJpZnkgY2hvaWNlCi0gICAgICB3aGlsZSB0cnVlIHsgICAgICAgICAgICAgICAgICAg ICAgOyBLZWVwIHRyeWluZyB0aWxsIHdlIGdldCBhIGdvb2Qgb25lCi0gICAgICAgICAgc2NyZWVu IG1vdmUgMTAgICAgICAgICAgICAgICAgOyBNb3ZlIHRvIGxpbmUgMTAKLSAgICAgICAgICBzY3Jl ZW4gY2xlb2wgICAgICAgICAgICAgICAgICA7IENsZWFyIHRoaXMgbGluZQotICAgICAgICAgIGdl dGMgXCVjIHtZb3VyIGNob2ljZTogfSAgICAgIDsgUHJvbXB0IGFuZCBnZXQgYW5kIGVjaG8gMSBj aGFyYWN0ZXIKLSAgICAgICAgICB4ZWNobyBcJWMKLSAgICAgICAgICBpZiAoIG5vdCBudW1lcmlj IFwlYyApIHsgbXNnIHtOb3QgbnVtZXJpYyAtICJcJWMifSAxMiwgY29udGludWUgfQotICAgICAg ICAgIGlmICggPj0gXCVjIDEgJiYgPD0gXCVjIDMgKSBicmVhawotICAgICAgICAgIG1zZyB7T3V0 IG9mIHJhbmdlIC0gIlwlYyJ9IDEyCi0gICAgICB9Ci0gICAgICBzd2l0Y2ggXCVjIHsgICAgICAg ICAgICAgICAgICAgICAgOyBWYWxpZCBjaG9pY2UgLSBleGVjdXRlIGl0LgotICAgICAgICA6MSwg bXNnIHtGaWxpbmcuLi4gfSAxMiwgYnJlYWsKLSAgICAgICAgOjIsIG1zZyB7RWRpdGluZy4uLn0g MTIsIGJyZWFrCi0gICAgICAgIDozLCBtc2cge0V4aXRpbmcuLi59IDEyLCBicmVhawotICAgICAg fQotICB9Ci0gIGVjaG8gQnllICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBFeGl0IGNo b3NlbiAtIHNheSBnb29kYnllLgotICBib3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsgTGVhdmUgY3Vyc29yIGF0IHNjcmVlbiBib3R0b20uCi0gIGV4aXQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOyBBbmQgZXhpdC4KLQotICAgU2ltaWxhciBzY3JpcHRzIGNh biB3b3JrIG92ZXIgdGhlIGNvbW11bmljYXRpb24gY29ubmVjdGlvbjsgc3Vic3RpdHV0ZQotICAg SU5QVVQgYW5kIE9VVFBVVCBmb3IgR0VUQyBhbmQgRUNITy9YRUNITy4KLQotICA3LjIyLiBFdmFs dWF0aW5nIEFyaXRobWV0aWMgRXhwcmVzc2lvbnMKLQotICAgQSBuZXcgYXJpdGhtZXRpYyBvcGVy YXRvciB3YXMgYWRkZWQgdG8gdGhlIGxpc3QgcmVjb2duaXplZCBieSB0aGUKLSAgIEVWQUxVQVRF IGNvbW1hbmQsIHRoZSBcZmV2YWwoKSBmdW5jdGlvbiwgYW5kIHdoaWNoIGNhbiBhbHNvIGJlIHVz ZWQKLSAgIGFueXdoZXJlIGVsc2UgYXJpdGhtZXRpYyBleHByZXNzaW9ucyBhcmUgYWNjZXB0ZWQg KG51bWVyaWMgY29tbWFuZAotICAgZmllbGRzLCBhcnJheSBzdWJzY3JpcHRzLCBldGMpOgotCi0g ICBQcmVmaXggIiEiCi0gICAgICAgICAgVGhpcyBvcGVyYXRvciBpbnZlcnRzIHRoZSAidHJ1dGgg dmFsdWUiIG9mIHRoZSBudW1iZXIgb3IKLSAgICAgICAgICBhcml0aG1ldGljIGV4cHJlc3Npb24g dGhhdCBmb2xsb3dzLiBJZiB0aGUgdmFsdWUgb2YgdGhlIG9wZXJhbmQKLSAgICAgICAgICBpcyAw LCB0aGUgcmVzdWx0IGlzIDEuIElmIHRoZSB2YWx1ZSBpcyBub256ZXJvLCB0aGUgcmVzdWx0IGlz IDAuCi0KLSAgIEV4YW1wbGVzOgotCi0gIHNldCBldmFsIG9sZAotICBldmFsdWF0ZSAwCi0gIDAK LQotICBldmFsdWF0ZSAhMAotICAxCi0KLSAgZXZhbHVhdGUgITMKLSAgMAotCi0gIGV2YWx1YXRl ICEoLTMpCi0gIDAKLQotICAuXCVhID0gMQotICAuXCViID0gMAotICBldmFsdWF0ZSAhKFwlYXxc JWIpCi0gIDAKLQotICBldmFsdWF0ZSAhKFwlYSZcJWIpCi0gIDEKLQotICBldmFsdWF0ZSAhKCEo XCVhJlwlYikpCi0gIDAKLQotICAgTm90ZSB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBQcmVmaXgg ISAoaW52ZXJ0IHRydXRoIHZhbHVlKSBhbmQgU3VmZml4ICEKLSAgIChmYWN0b3JpYWwpLiBBbHNv IHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIFByZWZpeCAhIGFuZCBQcmVmaXggfiAod2hpY2gKLSAg IGludmVydHMgYWxsIHRoZSBiaXRzIGluIGl0cyBvcGVyYW5kKS4gQWxzbyBub3RlIHRoYXQgcHJl Zml4IG9wZXJhdG9ycwotICAgKCEsIC0sIGFuZCB+KSBjYW4gbm90IGJlIGFkamFjZW50IHVubGVz cyB5b3UgdXNlIHBhcmVudGhlc2VzIHRvCi0gICBzZXBhcmF0ZSB0aGVtLCBhcyBzaG93biBpbiB0 aGUgZmluYWwgZXhhbXBsZSBhYm92ZS4KLQotICA3LjIzLiBGbG9hdGluZy1Qb2ludCBBcml0aG1l dGljCi0KLSAgICAgRm9yIGEgbW9yZSBjb252ZW5pZW50IHdheSBvZiBkZWFsaW5nIHdpdGggZmxv YXRpbmctcG9pbnQgbnVtYmVycwotICAgICB0aGFuIHRoZSBvbmUgZGVzY3JpYmVkIGhlcmUsIHNl ZSB0aGUgWzYzM11DLUtlcm1pdCA4LjAgdXBkYXRlIG5vdGVzLAotICAgICB0aGUgc2VjdGlvbiBv biBbNjM0XVMtRXhwcmVzc2lvbnMuCi0KLSAgIEMtS2VybWl0IDcuMCBhZGRzIGxpbWl0ZWQgc3Vw cG9ydCBmb3IgZmxvYXRpbmctcG9pbnQgbnVtYmVycyAobnVtYmVycwotICAgdGhhdCBoYXZlIGZy YWN0aW9uYWwgcGFydHMsIGxpa2UgMy4xNDE1OTI2NTMpLiBUaGlzIHN1cHBvcnQgaXMgcHJvdmlk ZWQKLSAgIHRocm91Z2ggYSBzbWFsbCByZXBlcnRvaXJlIG9mIGZ1bmN0aW9ucyBhbmQgaW4gQm9v bGVhbiBleHByZXNzaW9ucyB0aGF0Ci0gICBjb21wYXJlIG51bWJlcnMsIGJ1dCBkb2VzIG5vdCBh cHBseSB0byBudW1iZXIgcGFyc2luZyBpbiBnZW5lcmFsLCBvciB0bwotICAgZXhwcmVzc2lvbiBl dmFsdWF0aW9uLCBhcnJheSBzdWJzY3JpcHRzLCB0aGUgSU5DUkVNRU5UIGFuZCBERUNSRU1FTlQK LSAgIGNvbW1hbmRzLCBvciBpbiBhbnkgY29udGV4dCBvdGhlciB0aGFuIHRob3NlIGxpc3RlZCBp biB0aGlzIHNlY3Rpb24uCi0KLSAgIEEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGhhcyBhbiBvcHRp b25hbCBzaWduICgrIG9yIC0pLCBmb2xsb3dlZCBieSBhCi0gICBzZXJpZXMgb2YgZGVjaW1hbCBk aWdpdHMgY29udGFpbmluZyBlaXRoZXIgemVybyBvciBvbmUgcGVyaW9kICguKQotICAgY2hhcmFj dGVyLCB3aGljaCBpcyB0aGUgZGVjaW1hbCBwb2ludC4gVGhlIHVzZSBvZiBjb21tYSBvciBhbnkg b3RoZXIKLSAgIGNoYXJhY3RlciBiZXNpZGVzIHBlcmlvZCBhcyBhIGRlY2ltYWwgcG9pbnQgaXMg bm90IHN1cHBvcnRlZC4KLSAgIFNjaWVudGlmaWMgbm90YXRpb24gaXMgbm90IHN1cHBvcnRlZCBl aXRoZXIuIEV4YW1wbGVzIG9mIGxlZ2FsCi0gICBmbG9hdGluZy1wb2ludCBudW1iZXJzOgotCi0g IDAgICAgICAgICAgICAgICAgSW50ZWdlcnMgY2FuIGJlIHVzZWQKLSAgMSAgICAgICAgICAgICAg ICBEaXR0bwotICAyLiAgICAgICAgICAgICAgIEEgZGVjaW1hbCBwb2ludCB3aXRob3V0IGRlY2lt YWwgZGlnaXRzCi0gIDMuMCAgICAgICAgICAgICAgQSBkZWNpbWFsIHBvaW50IHdpdGggZGVjaW1h bCBkaWdpdHMKLSAgMy4xNDE1OTI2NTMgICAgICBEaXR0bwotIC00LjAgICAgICAgICAgICAgIEEg bmVnYXRpdmUgc2lnbiBjYW4gYmUgaW5jbHVkZWQKLSArNS4wICAgICAgICAgICAgICBBIHBvc2l0 aXZlIHNpZ24gY2FuIGJlIGluY2x1ZGVkCi0KLSAgIEV4YW1wbGVzIG9mIG5vdGF0aW9ucyB0aGF0 IGFyZSBub3QgYWNjZXB0ZWQ6Ci0KLSAgMSwwMDAsMDAwICAgICAgICBTZXBhcmF0b3JzIGNhbiBu b3QgYmUgdXNlZAotICAxLjAwMC4wMDAgICAgICAgIERpdHRvIChvciBtdWx0aXBsZSBkZWNpbWFs IHBvaW50cykKLSAgNi4wMjIxMzdFMjMgICAgICBObyBzY2llbnRpZmljIG5vdGF0aW9uCi0gIDYu NjI2MDY4NjhlLTM0ICAgRGl0dG8KLSAgMTIuNSs2LjI1ICAgICAgICBObyAiYmFyZSIgZXhwcmVz c2lvbnMKLQotICAgWW91IGNhbiB1c2UgSUYgRkxPQVQgdGVzdCBhIHN0cmluZyBvciB2YXJpYWJs ZSB0byBzZWUgaWYgaXQncyBpbgotICAgYWNjZXB0YWJsZSBmbG9hdGluZy1wb2ludCBmb3JtYXQu IEV4YW1wbGU6Ci0KLSAgYXNrIFwlZiB7IFR5cGUgYSBudW1iZXI6IH0KLSAgaWYgbm90IGRlZiBc JWYgLlwlZiA9IDAuMAotICBpZiBub3QgZmxvYXQgXCVmIHN0b3AgMSBJbnZhbGlkIGZsb2F0aW5n LXBvaW50IG51bWJlcjogIlwlZiIKLQotICAgQy1LZXJtaXQncyBmbG9hdGluZy1wb2ludCBzdXBw b3J0LCBsaWtlIGl0cyBzdXBwb3J0IGZvciB3aG9sZSBudW1iZXJzCi0gICAoaW50ZWdlcnMpLCBy ZWxpZXMgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgdW5kZXJseWluZyBjb21wdXRlci4gWW91 cgotICAgY29tcHV0ZXIgaGFzIG9ubHkgYSBsaW1pdGVkIGFtb3VudCBvZiBwcmVjaXNpb24gZm9y IG51bWJlcnMsIGRlcGVuZGluZwotICAgb24gaXRzIGFyY2hpdGVjdHVyZS4gVGh1cyBmbG9hdGlu Zy1wb2ludCBudW1iZXJzIHRoYXQgaGF2ZSB0b28gbWFueQotICAgZGlnaXRzIHdpbGwgbm90IGJl IGFjY3VyYXRlOyBhZGRpbmcgYSB2ZXJ5IHNtYWxsIG51bWJlciB0byBhIHZlcnkgbGFyZ2UKLSAg IG9uZSBtaWdodCBoYXZlIG5vIGVmZmVjdCBhdCBhbGw7IGFuZCBzbyBvbi4gRm9yIGRldGFpbHMs IHJlYWQgYSB0ZXh0IG9uCi0gICBudW1lcmljYWwgYW5hbHlzaXMuIEV4YW1wbGU6Ci0KLSAgLlwl YSA9IDExMTExMTExMTExMTExMTExMTExICA7IEEgbG9uZyBudW1iZXIKLSAgLlwlYiA9IDIyMjIy MjIyMjIyMjIyMjIyMjIyICA7IEFub3RoZXIgb25lCi0gIGVjaG8gXGZmcGFkZChcJWEsXCViKSAg ICAgICAgOyBBZGQgdGhlbSAtIHRoZSByZXN1bHQgc2hvdWxkIGJlIGFsbCAzJ3MKLSAgMzMzMzMz MzMzMzMzMzMzMzAwMDAuMCAgICAgICA7IFNlZSB0aGUgcmVzdWx0Ci0KLSAgIEluIHRoaXMgZXhh bXBsZSwgdGhlIGNvbXB1dGVyIGhhcyAxNiBkaWdpdHMgb2YgcHJlY2lzaW9uOyBhZnRlciB0aGF0 LAotICAgdGhlIChsb3ctb3JkZXIpIGRpZ2l0cyBhcmUgc2V0IHRvIDAsIHNpbmNlIHRoZSBjb21w dXRlciBkb2Vzbid0IGtub3cKLSAgIHdoYXQgdGhleSByZWFsbHkgYXJlLiBJbiBmYWN0LCB0aGUg Y29tcHV0ZXIgcmV0dXJucyByYW5kb20gZGlnaXRzLCBidXQKLSAgIEtlcm1pdCBzZXRzIGFsbCBk aWdpdHMgYmV5b25kIHRoZSBjb21wdXRlcidzIHByZWNpc2lvbiB0byAwLgotCi0gICBDLUtlcm1p dCdzIGZsb2F0aW5nLXBvaW50IGZ1bmN0aW9ucyBoYXZlIG5hbWVzIG9mIHRoZSBmb3JtCi0gICAi XGZmcHh4eChhcmdzKSIgKCJcZiIgZm9yIGZ1bmN0aW9uLCAiZnAiIGZvciBmbG9hdGluZy1wb2lu dCksIHdoZXJlCi0gICAieHh4IiBpcyByZXBsYWNlZCBieSB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rp b24sIHN1Y2ggYXMgInNxcnQiLCBhbmQKLSAgICJhcmdzIiBpcyB0aGUgYXJndW1lbnQgbGlzdCwg Y29uc2lzdGluZyBvZiBvbmUgb3IgdHdvIGZsb2F0aW5nLXBvaW50Ci0gICBudW1iZXJzIChkZXBl bmRpbmcgb24gdGhlIGZ1bmN0aW9uKSwgYW5kIGFuIG9wdGlvbmFsICJkIiBhcmd1bWVudCB0aGF0 Ci0gICBzYXlzIG5vdyBtYW55IGRlY2ltYWwgcGxhY2VzIHNob3VsZCBiZSBzaG93biBpbiB0aGUg cmVzdWx0LiBFeGFtcGxlOgotCi0gIFxmZnBkaXYoMTAsMywxKSByZXR1cm5zICIzLjMiCi0gIFxm ZnBkaXYoMTAsMywyKSByZXR1cm5zICIzLjMzIgotICBcZmZwZGl2KDEwLDMsMykgcmV0dXJucyAi My4zMzMiCi0KLSAgIGFuZCBzbyBvbiwgdXAgdG8gdGhlIHByZWNpc2lvbiBvZiB0aGUgY29tcHV0 ZXIuIElmIHRoZSBkZWNpbWFsLXBsYWNlcwotICAgYXJndW1lbnQgaXMgbGVzcyB0aGFuIHplcm8s IHRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgdGhlIHJlc3VsdCBpcwotICAgdHJ1bmNhdGVkOgotCi0g IFxmZnBkaXYoMTAsMywtMSkgcmV0dXJucyAiMyIuCi0KLSAgIElmIHRoZSBkZWNpbWFsLXBsYWNl cyBhcmd1bWVudCBpcyAwLCBvciBpcyBvbWl0dGVkLCBDLUtlcm1pdCByZXR1cm5zIGFzCi0gICBt YW55IGRlY2ltYWwgcGxhY2VzIGFzIGFyZSBtZWFuaW5nZnVsIGluIHRoZSBjb21wdXRlcidzIGZs b2F0aW5nLXBvaW50Ci0gICBwcmVjaXNpb24sIHRydW5jYXRpbmcgYW55IGV4dHJhbmVvdXMgdHJh aWxpbmcgMCdzOgotCi0gIFxmZnBkaXYoMTAsOCkgcmV0dXJucyAiMS4yNSIuCi0gIFxmZnBkaXYo MTAsNCkgcmV0dXJucyAiMi41Ii4KLSAgXGZmcGRpdigxMCwyKSByZXR1cm5zICI1LjAiLgotICBc ZmZwZGl2KDEwLDMpIHJldHVybnMgIjMuMzMzMzMzMzMzMzMzMzMzIiAoZm9yIDE2LWRpZ2l0IHBy ZWNpc2lvbikuCi0KLSAgIFRoZXJlIGlzIG5vIHdheSB0byByZXF1ZXN0IHRoYXQgYSBmbG9hdGlu Zy1wb2ludCBmdW5jdGlvbiByZXR1cm4gYQotICAgZGVjaW1hbCBwb2ludCBidXQgbm8gZGVjaW1h bCBwbGFjZXMuIEhvd2V2ZXIsIHRoaXMgaXMgZWFzeSBlbm91Z2ggdG8KLSAgIGFjY29tcGxpc2gg aW4gb3RoZXIgd2F5cywgZm9yIGV4YW1wbGUgYnkgc3VwcGx5aW5nIGl0IG91dHNpZGUgdGhlCi0g ICBmdW5jdGlvbiBjYWxsOgotCi0gIGVjaG8gXGZmcGFkZChcJWEsXCViLC0xKS4KLQotICAgS2Vy bWl0J3MgZmxvYXRpbmctcG9pbnQgZnVuY3Rpb25zIGFsd2F5cyByb3VuZCB0aGUgcmVzdWx0IGZv ciB0aGUKLSAgIHJlcXVlc3RlZCBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgd2hlbiB0aGUgImQi IGFyZ3VtZW50IGlzIGdpdmVuIGFuZAotICAgaGFzIGEgdmFsdWUgZ3JlYXRlciB0aGFuIDAgKHNl ZSB0aGUgZGVzY3JpcHRpb24gb2YgXGZmcHJvdW5kKCkganVzdAotICAgYmVsb3cpLgotCi0gICBG bG9hdGluZy1wb2ludCBhcmd1bWVudHMgY2FuIGJlIGNvbnN0YW50cyBpbiBmbG9hdGluZy1wb2lu dCBmb3JtYXQgb3IKLSAgIHZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgYXJlIGZsb2F0aW5nLXBvaW50 IG51bWJlcnMuIElmIGEgZmxvYXRpbmctcG9pbnQKLSAgIGFyZ3VtZW50IGlzIG9taXR0ZWQsIG9y IGlzIGEgdmFyaWFibGUgd2l0aCBubyB2YWx1ZSwgMC4wIGlzIHN1cHBsaWVkCi0gICBhdXRvbWF0 aWNhbGx5LiBFeGFtcGxlOgotCi0gIGRlZiBcJXggOTk5Ljk5OQotICB1bmRlZiBcJXkKLSAgZWNo byBcZmZwbWluKFwleCxcJXkpCi0gIDAuMAotCi0gICBPciBlcXVpdmFsZW50bHk6Ci0KLSAgZWNo byBcZmZwbWluKDk5OS45OTkpCi0gIDAuMAotCi0gICBUaGUgZmxvYXRpbmctcG9pbnQgZnVuY3Rp b25zIGFyZToKLQotICAgXGZmcHJvdW5kKGYxLGQpCi0gICAgICAgICAgUmV0dXJucyBmMSByb3Vu ZGVkIHRvIGQgZGVjaW1hbCBwbGFjZXMuIEZvciB0aGlzIGZ1bmN0aW9uIG9ubHksCi0gICAgICAg ICAgZCA9IDAgKG9yIGQgb21pdHRlZCkgaGFzIGEgc3BlY2lhbCBtZWFuaW5nOiByZXR1cm4gdGhl IGludGVnZXIKLSAgICAgICAgICBwYXJ0IG9mIGYxIHJvdW5kZWQgYWNjb3JkaW5nIHRvIHRoZSBm cmFjdGlvbmFsIHBhcnQuIEV4YW1wbGVzOgotCi0gIFxmZnByb3VuZCgyLjc0NjUzLC0xKSByZXR1 cm5zICIyIiAoZnJhY3Rpb24gdHJ1bmNhdGVkLCBubyByb3VuZGluZykuCi0gIFxmZnByb3VuZCgy Ljc0NjUzLDApICByZXR1cm5zICIzIiAoaW50ZWdlciBwYXJ0IGlzIHJvdW5kZWQpLgotICBcZmZw cm91bmQoMi43NDY1MykgICAgcmV0dXJucyAiMyIgKGQgb21pdHRlZCBzYW1lIGFzIGQgPSAwKS4K LSAgXGZmcHJvdW5kKDIuNzQ2NTMsMSkgIHJldHVybnMgIjIuNyIuCi0gIFxmZnByb3VuZCgyLjc0 NjUzLDIpICByZXR1cm5zICIyLjc1Ii4KLSAgXGZmcHJvdW5kKDIuNzQ2NTMsMykgIHJldHVybnMg IjIuNzQ3Ii4KLSAgXGZmcHJvdW5kKDIuNzQ2NTMsNCkgIHJldHVybnMgIjIuNzQ2NSIsIGV0Yy4K LQotICAgXGZmcGFkZChmMSxmMixkKQotICAgICAgICAgIFJldHVybnMgdGhlIHN1bSBvZiBmMSBh bmQgZjIuCi0KLSAgIFxmZnBzdWJ0cmFjdChmMSxmMixkKQotICAgICAgICAgIFN1YnRyYWN0cyBm MiBmcm9tIGYxIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuCi0KLSAgIFxmZnBtdWx0aXBseShmMSxm MixkKQotICAgICAgICAgIFJldHVybnMgdGhlIHByb2R1Y3Qgb2YgZjEgYW5kIGYyLgotCi0gICBc ZmZwZGl2aWRlKGYxLGYyLGQpCi0gICAgICAgICAgSWYgZjIgaXMgbm90IDAsIGRpdmlkZXMgZjEg YnkgZjIgYW5kIHJldHVybnMgdGhlIHF1b3RpZW50LgotICAgICAgICAgIElmIGYyIGlzIDAsIGEg RElWSURFX0JZX1pFUk8gZXJyb3Igb2NjdXJzLgotCi0gICBcZmZwcmFpc2UoZjEsZjIsZCkKLSAg ICAgICAgICBJZiBmMSA9IDAgYW5kIGYyIDw9IDAsIG9yIGlmIGYxIDwgMCBhbmQgZjIgaGFzIGEg ZnJhY3Rpb25hbAotICAgICAgICAgIHBhcnQsIGFuIEFSR19PVVRfT0ZfUkFOR0UgZXJyb3Igb2Nj dXJzOyBvdGhlcndpc2UgZjEgcmFpc2VkIHRvCi0gICAgICAgICAgdGhlIGYyIHBvd2VyIGlzIHJl dHVybmVkLgotCi0gICBcZmZwc3FydChmMSxkKQotICAgICAgICAgIElmIGYxID49IDAsIHJldHVy bnMgdGhlIHNxdWFyZSByb290IG9mIGYxOyBvdGhlcndpc2UKLSAgICAgICAgICBBUkdfT1VUX09G X1JBTkdFLgotCi0gICBcZmZwYWJzb2x1dGUoZjEsZCkKLSAgICAgICAgICBSZXR1cm5zIHRoZSBh YnNvbHV0ZSB2YWx1ZSBvZiBmMSAoaS5lLiBmMSB3aXRob3V0IGEgc2lnbikuIFRoaXMKLSAgICAg ICAgICBpcyB0aGUgZmxvYXRpbmctcG9pbnQgYW5hbG9nIG9mIFxmYWJzb2x1dGUobjEpLgotCi0g ICBcZmZwaW50KGYxKQotICAgICAgICAgIFJldHVybnMgdGhlIGludGVnZXIgcGFydCBvZiBmMS4g RXF1aXZhbGVudCB0byBcZmZwcm91bmQoZjEsLTEpLgotCi0gICBcZmZwZXhwKGYxLGQpCi0gICAg ICAgICAgVGhlIGJhc2Ugb2YgbmF0dXJhbCBsb2dhcml0aG1zLCBlICgyLjcxODI4Mi4uLiksIHJh aXNlZCB0byB0aGUKLSAgICAgICAgICBmMSBwb3dlci4KLQotICAgXGZmcGxvZ24oZjEsZCkKLSAg ICAgICAgICBUaGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgZjEgKHRoZSBwb3dlciB0byB3aGljaCBl IG11c3QgYmUgcmFpc2VkCi0gICAgICAgICAgdG8gb2J0YWluIGYxKS4KLQotICAgXGZmcGxvZzEw KGYxLGQpCi0gICAgICAgICAgVGhlIGJhc2UtMTAgbG9nYXJpdGhtIG9mIGYxICh0aGUgcG93ZXIg dG8gd2hpY2ggMTAgbXVzdCBiZQotICAgICAgICAgIHJhaXNlZCB0byBvYnRhaW4gZjEpLgotCi0g ICBcZmZwbW9kdWx1cyhmMSxmMixkKQotICAgICAgICAgIElmIGYyIGlzIG5vdCAwLCB0aGUgcmVt YWluZGVyIGFmdGVyIGRpdmlkaW5nIGYxIGJ5IGYyLgotICAgICAgICAgIElmIGYyIGlzIDAsIGEg RElWSURFX0JZX1pFUk8gZXJyb3Igb2NjdXJzLgotICAgICAgICAgIFRoaXMgaXMgdGhlIGZsb2F0 aW5nLXBvaW50IGFuYWxvZyBvZiBcZm1vZChuMSxuMikuCi0KLSAgIFxmZnBtYXhpbXVtKGYxLGYy LGQpCi0gICAgICAgICAgUmV0dXJucyB0aGUgbWF4aW11bSBvZiBmMSBhbmQgZjIuIFRoaXMgaXMg dGhlIGZsb2F0aW5nLXBvaW50Ci0gICAgICAgICAgYW5hbG9nIG9mIFxmbWF4KG4xLG4yKS4KLQot ICAgXGZmcG1pbmltdW0oZjEsZjIsZCkKLSAgICAgICAgICBSZXR1cm5zIHRoZSBtaW5pbXVtIG9m IGYxIGFuZCBmMi4gVGhpcyBpcyB0aGUgZmxvYXRpbmctcG9pbnQKLSAgICAgICAgICBhbmFsb2cg b2YgXGZtaW4objEsbjIpLgotCi0gICBcZmZwc2luZShmMSxkKQotICAgICAgICAgIFJldHVybnMg dGhlIHNpbmUgb2YgZjEgcmFkaWFucy4KLQotICAgXGZmcGNvc2luZShmMSxkKQotICAgICAgICAg IFJldHVybnMgdGhlIGNvc2luZSBvZiBmMSByYWRpYW5zLgotCi0gICBcZmZwdGFuZ2VudChmMSxk KQotICAgICAgICAgIFJldHVybnMgdGhlIHRhbmdlbnQgb2YgZjEgcmFkaWFucy4KLQotICAgTm90 ZSB0aGF0IGFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgY2FuIGJlIHVzZWQgd2l0aCBpbnRlZ2VyIGFy Z3VtZW50cy4gSWYKLSAgIHlvdSB3YW50IGFuIGludGVnZXIgcmVzdWx0LCBzcGVjaWZ5IGQgPSAt MSAodG8gdHJ1bmNhdGUpIG9yIGZlZWQgdGhlCi0gICByZXN1bHQgdG8gXGZmcHJvdW5kKHh4eCww KSAodG8gcm91bmQpLgotCi0gICBGbG9hdGluZy1wb2ludCBudW1iZXJzIChvciB2YXJpYWJsZXMg b3IgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHRoZW0pIGNhbgotICAgYmUgdXNlZCBpbiBCb29sZWFu IGV4cHJlc3Npb25zIChzZWUgWzYzNV1TZWN0aW9uIDcuMjAuMikgdGhhdCBjb21wYXJlCi0gICBu dW1iZXJzOgotCi0gID0geCB5Ci0gICE9IHggeQotICA8IHggeQotICA+IHggeQotICA8PSB4IHkK LSAgPj0geCB5Ci0KLSAgIEluIHRoZXNlIGV4YW1wbGVzLCB4IGFuZCB5IGNhbiBiZSBlaXRoZXIg aW50ZWdlcnMgb3IgZmxvYXRpbmctcG9pbnQKLSAgIG51bWJlcnMgaW4gYW55IGNvbWJpbmF0aW9u LiBJbiBhbiBhcml0aG1ldGljIGNvbXBhcmlzb24gb2YgYW4gaW50ZWdlcgotICAgYW5kIGEgZmxv YXRpbmctcG9pbnQgbnVtYmVyLCB0aGUgaW50ZWdlciBpcyBjb252ZXJ0ZWQgdG8gZmxvYXRpbmct cG9pbnQKLSAgIGJlZm9yZSB0aGUgY29tcGFyaXNvbiBpcyBtYWRlLiBFeGFtcGxlczoKLQotICAu XCV0ID0gMy4wMDAwMDAwMDAKLSAgLlwlZiA9IDMuMTQxNTkyNjUzCi0gIC5cJWkgPSAzCi0KLSAg aWYgPiBcJWYgXCVpIGVjaG8gUGkgaXMgZ3JlYXRlci4KLSAgaWYgPSBcJXQgXCVpIGVjaG8gIlwl aSIgPSAiXCV0Ii4KLQotICAgQSBmbG9hdGluZy1wb2ludCBudW1iZXIgY2FuIGFsc28gYmUgdXNl ZCBpbjoKLQotICBJRiBudW1iZXIgY29tbWFuZAotCi0gICB3aGVyZSB0aGUgY29tbWFuZCBpcyBl eGVjdXRlZCBpZiB0aGUgbnVtYmVyIGlzIG5vbnplcm8uIElmIHRoZSBudW1iZXIKLSAgIGlzIGZs b2F0aW5nLXBvaW50LCB0aGUgY29tbWFuZCBpcyBub3QgZXhlY3V0ZWQgaWYgdGhlIG51bWJlciBp cyAwLjAsCi0gICBhbmQgaXMgZXhlY3V0ZWQgb3RoZXJ3aXNlLgotCi0gICBGbG9hdGluZy1wb2lu dCBudW1iZXJzIGNhbiBiZSBzb3J0ZWQgdXNpbmcgQVJSQVkgU09SVCAvTlVNRVJJQyAoc2VlCi0g ICBbNjM2XVNlY3Rpb24gNy4xMC41ICkuCi0KLSAgIFR3byBmbG9hdGluZy1wb2ludCBjb25zdGFu dHMgYXJlIHByb3ZpZGVkOgotCi0gIFx2KG1hdGhfcGkpID0gUGkgKDMuMTQxNTkyNjUzLi4uKQot ICBcdihtYXRoX2UpICA9IGUsIHRoZSBiYXNlIG9mIG5hdHVyYWwgbG9nYXJpdGhtcyAoMi43MTgy OC4uLikKLQotICAgVGhlc2UgYXJlIGdpdmVuIHRvIHRoZSBjb21wdXRlcidzIHByZWNpc2lvbiwg ZS5nLiAxNiBkaWdpdHMuIFRoaXMKLSAgIG51bWJlciBpdHNlbGYgaXMgYXZhaWxhYmxlIGluIGEg dmFyaWFibGU6Ci0KLSAgIFx2KG1hdGhfcHJlY2lzaW9uKQotICAgICAgICAgIEhvdyBtYW55IHNp Z25pZmljYW50IGRpZ2l0cyBpbiBhIGZsb2F0aW5nLXBvaW50IG51bWJlci4KLQotICA3LjI0LiBU cmFjaW5nIFNjcmlwdCBFeGVjdXRpb24KLQotICAgVGhlIFRSQUNFIGNvbW1hbmQgaXMgaGFuZHkg Zm9yIGRlYnVnZ2luZyBzY3JpcHRzLgotCi0gICBUUkFDRSBbIHsgL09OLCAvT0ZGIH0gXSBbIHsg QVNTSUdOTUVOVFMsIENPTU1BTkQtTEVWRUwsIEFMTCB9IF0KLSAgICAgICAgICBTZWxlY3RzIHRy YWNpbmcgb2YgdGhlIGdpdmVuIG9iamVjdC4KLQotICAgT3B0aW9uYWwgc3dpdGNoZXMgYXJlIC9P TiBhbmQgL09GRi4gSWYgbm8gc3dpdGNoIGlzIGdpdmVuLCAvT04gaXMKLSAgIGltcGxpZWQuIFRo ZSB0cmFjZSBvYmplY3RzIGFyZSBBU1NJR05NRU5UUywgQ09NTUFORC1MRVZFTCwgYW5kIEFMTC4g VGhlCi0gICBkZWZhdWx0IG9iamVjdCBpcyBBTEwsIG1lYW5pbmcgdG8gc2VsZWN0IGFsbCB0cmFj ZSBvYmplY3RzIChiZXNpZGVzCi0gICBBTEwpLiBUaHVzIFRSQUNFIGJ5IGl0c2VsZiBzZWxlY3Rz IHRyYWNpbmcgb2YgZXZlcnl0aGluZywgYXMgZG9lcyBUUkFDRQotICAgL09OLCBhbmQgVFJBQ0Ug L09GRiB0dXJucyBvZmYgYWxsIHRyYWNpbmcuCi0KLSAgIFdoZW4gdHJhY2luZyBvZiBBU1NJR05N RU5UUyBpcyBvbiwgZXZlcnkgdGltZSB0aGUgdmFsdWUgb2YgYW55Ci0gICB1c2VyLWRlZmluZWQg dmFyaWFibGUgb3IgbWFjcm8gY2hhbmdlcywgQy1LZXJtaXQgcHJpbnRzIG9uZSBvZiB0aGUKLSAg IGZvbGxvd2luZzoKLQotICAgPj4+IG5hbWU6ICJ2YWx1ZSIKLSAgICAgICAgICBUaGUgbmFtZSBv ZiB0aGUgdmFyaWFibGUgb3IgbWFjcm8gZm9sbG93ZWQgYnkgdGhlIG5ldyB2YWx1ZSBpbgotICAg ICAgICAgIHF1b3Rlcy4gVGhpcyBpbmNsdWRlcyBpbXBsaWNpdCBtYWNyby1wYXJhbWV0ZXIgYXNz aWdubWVudHMKLSAgICAgICAgICBkdXJpbmcgbWFjcm8gaW52b2NhdGlvbi4KLQotICAgPj4+IG5h bWU6ICh1bmRlZikKLSAgICAgICAgICBUaGlzIGluZGljYXRlcyB0aGF0IHRoZSB2YXJpYWJsZSBv ciBtYWNybyBoYXMgYmVlbiB1bmRlZmluZWQuCi0KLSAgIDw8PCBuYW1lOiAidmFsdWUiCi0gICAg ICAgICAgRm9yIFJFVFVSTiBzdGF0ZW1lbnRzOiB0aGUgbmFtZSBvZiB0aGUgbWFjcm8gYW5kIHRo ZSByZXR1cm4KLSAgICAgICAgICB2YWx1ZS4KLQotICAgPDw8IG5hbWU6IChudWxsKQotICAgICAg ICAgIEZvciBSRVRVUk4gc3RhdGVtZW50cyB0aGF0IGluY2x1ZGUgbm8gdmFsdWUgb3IgYW4gZW1w dHkgdmFsdWUuCi0KLSAgIFdoZW4gdHJhY2luZyBvZiBDT01NQU5ELUxFVkVMIGlzIG9uLCBDLUtl cm1pdCBwcmludHM6Ci0KLSAgIFtuXSArRjogIm5hbWUiCi0gICAgICAgICAgV2hlbmV2ZXIgYSBj b21tYW5kIGZpbGUgaXMgZW50ZXJlZCwgd2hlcmUgIm4iIGlzIHRoZSBjb21tYW5kCi0gICAgICAg ICAgbGV2ZWwgKDAgPSB0b3ApOyB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZCBmaWxlIGlzIHNob3du IGluCi0gICAgICAgICAgcXVvdGVzLgotCi0gICBbbl0gK006ICJuYW1lIgotICAgICAgICAgIFdo ZW5ldmVyIGEgbWFjcm8gaXMgZW50ZXJlZDsgIm4iIGlzIHRoZSBjb21tYW5kIGxldmVsLiBUaGUg bmFtZQotICAgICAgICAgIG9mIHRoZSBtYWNybyBpcyBzaG93biBpbiBxdW90ZXMuCi0KLSAgIFtu XSAtRjogIm5hbWUiCi0gICAgICAgICAgV2hlbmV2ZXIgYSBjb21tYW5kIGZpbGUgaXMgcmVlbnRl cmVkIGZyb20gYmVsb3csIHdoZW4gYSBtYWNybyBvcgotICAgICAgICAgIGNvbW1hbmQgZmlsZSB0 aGF0IGl0IGhhcyBpbnZva2VkIGhhcyByZXR1cm5lZC4KLQotICAgW25dIC1NOiAibmFtZSIKLSAg ICAgICAgICBXaGVuZXZlciBhIG1hY3JvIGlzIHJlZW50ZXJlZCBmcm9tIGJlbG93LgotCi0gICBG b3Igb3RoZXIgZGVidWdnaW5nIHRvb2xzLCBzZWUgU0hPVyBBUkdTLCBTSE9XIFNUQUNLLCBTRVQg VEFLRSwgU0VUCi0gICBNQUNSTywgYW5kIG9mIGNvdXJzZSwgRUNITy4KLQotICA3LjI1LiBDb21w YWN0IFN1YnN0cmluZyBOb3RhdGlvbgotCi0gICBJdCBpcyBvZnRlbiBkZXNpcmFibGUgdG8gZXh0 cmFjdCBhIHN1YnN0cmluZyBmcm9tIGEgc3RyaW5nIHdoaWNoIGlzCi0gICBzdG9yZWQgaW4gYSB2 YXJpYWJsZSwgYW5kIGZvciB0aGlzIHdlIGhhdmUgdGhlIFxmc3Vic3RyaW5nKCkgZnVuY3Rpb24s Ci0gICB3aGljaCBpcyB1c2VkIGxpa2UgdGhpczoKLQotICBkZWZpbmUgXCVhIDEyMzQ1Njc4OTAK LSAgZWNobyBcZnN1YnN0cmluZyhcJWEsMyw0KSA7IHN1YnN0cmluZyBmcm9tIDNyZCBjaGFyYWN0 ZXIgbGVuZ3RoIDQKLSAgMzQ1NgotCi0gICBvciBsaWtlIHRoaXMgd2l0aCBtYWNyby1uYW1lZCB2 YXJpYWJsZXM6Ci0KLSAgZGVmaW5lIHN0cmluZyAxMjM0NTY3ODkwCi0gIGVjaG8gXGZzdWJzdHJp bmcoXG0oc3RyaW5nKSwzLDQpCi0gIDM0NTYKLQotICAgQy1LZXJtaXQgNy4wIGFkZHMgYSBwYWly IG9mIGFsdGVybmF0aXZlIGNvbXBhY3Qgbm90YXRpb25zOgotCi1cOih2YXJpYWJsZW5hbWVbc3Rh cnQ6bGVuZ3RoXSkgIDwtLSBTdWJzdHJpbmcgb2YgdmFyaWFibGUncyB2YWx1ZQotXHMobWFjcm9u YW1lW3N0YXJ0Omxlbmd0aF0pICAgICA8LS0gU3Vic3RyaW5nIG9mIG1hY3JvJ3MgZGVmaW5pdGlv bgotCi0gICBUaGVzZSBhcmUgZXhhY3RseSBlcXVpdmFsZW50IHRvIHVzaW5nIFxmc3Vic3RyaW5n KCksIGV4Y2VwdCBtb3JlCi0gICBjb21wYWN0IHRvIHdyaXRlIGFuZCBhbHNvIGZhc3RlciBzaW5j ZSBldmFsdWF0aW9uIGlzIGluIG9uZSBzdGVwCi0gICBpbnN0ZWFkIG9mIHR3by4KLQotICAgVGhl ICJcOigpIiBub3RhdGlvbiBjYW4gYmUgdXNlZCB3aXRoIGFueSBLZXJtaXQgdmFyaWFibGUsIHRo YXQgaXMsCi0gICBhbG1vc3QgYW55dGhpbmcgdGhhdCBzdGFydHMgd2l0aCBhIGJhY2tzbGFzaDoK LQotICBcOihcJWFbMjo2XSkgICAgICA8LS0gZXF1aXZhbGVudCB0byBcZnN1YnN0cmluZyhcJWEs Miw2KQotICBcOihcJnhbMV1bMjo2XSkgICA8LS0gZXF1aXZhbGVudCB0byBcZnN1YnN0cmluZyhc JnhbMV0sMiw2KQotICBcOihcbShmb28pWzI6Nl0pICA8LS0gZXF1aXZhbGVudCB0byBcZnN1YnN0 cmluZyhcbShmb28pLDIsNikKLSAgXDooXHYodGltZSlbMjo2XSkgPC0tIGVxdWl2YWxlbnQgdG8g XGZzdWJzdHJpbmcoXHYodGltZSksMiw2KQotICBcOihcJChURVJNKVsyOjZdKSA8LS0gZXF1aXZh bGVudCB0byBcZnN1YnN0cmluZyhcJChURVJNKSwyLDYpCi0gIFw6KEFCQ0RFRkdIWzI6Nl0pIDwt LSBlcXVpdmFsZW50IHRvIFxmc3Vic3RyaW5nKEFCQ0RFRkdILDIsNikKLQotICAgV2hhdGV2ZXIg YXBwZWFycyBiZXR3ZWVuIHRoZSBsZWZ0IHBhcmVudGhlc2lzIGFuZCB0aGUgbGVmdCBicmFja2V0 IGlzCi0gICBldmFsdWF0ZWQgYW5kIHRoZW4gdGhlIGluZGljYXRlZCBzdWJzdHJpbmcgb2YgdGhl IHJlc3VsdCBpcyByZXR1cm5lZC4KLQotICAgVGhlICJccygpIiBub3RhdGlvbiBpcyB0aGUgc2Ft ZSwgZXhjZXB0IGFmdGVyIGV2YWx1YXRpbmcgdGhlIHZhcmlhYmxlLAotICAgdGhlIHJlc3VsdCBp cyB0cmVhdGVkIGFzIGEgbWFjcm8gbmFtZSBhbmQgaXMgbG9va2VkIHVwIGluIHRoZSBtYWNybwot ICAgdGFibGUuIFRoZW4gdGhlIGluZGljYXRlZCBzdWJzdHJpbmcgb2YgdGhlIG1hY3JvIGRlZmlu aXRpb24gaXMKLSAgIHJldHVybmVkLiBFeGFtcGxlOgotCi0gIGRlZmluZSB0ZXN0aW5nIGFiY2Rl ZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0gIGRlZmluZSBcJWEgdGVzdGluZwotCi0gIFxzKHRlc3Rp bmdbMjo2XSkgIC0tPiAgYmNkZWZnCi0gIFw6KHRlc3RpbmdbMjo2XSkgIC0tPiAgZXN0aW5nCi0g IFw6KFwlYVsyOjZdKSAgICAgIC0tPiAgZXN0aW5nCi0gIFxzKFwlYVsyOjZdKSAgICAgIC0tPiAg YmNkZWZnCi0KLSAgIE5vdGUgdGhhdCB0aGUgZm9sbG93aW5nIHR3byBleGFtcGxlcyBhcmUgZXF1 aXZhbGVudDoKLQotICBcOihcbShmb28pWzI6Nl0pCi0gIFxzKGZvb1syOjZdKQotCi0gICBUaGUg Zmlyc3QgbnVtYmVyIGluIHRoZSBicmFja2V0cyBpcyB0aGUgMS1iYXNlZCBzdGFydGluZyBwb3Np dGlvbi4gSWYKLSAgIGl0IGlzIG9taXR0ZWQsIG9yIGxlc3MgdGhhbiAxLCBpdCBpcyB0cmVhdGVk IGFzIDEuIElmIGl0IGlzIGdyZWF0ZXIKLSAgIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5n LCBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuCi0KLSAgIFRoZSBzZWNvbmQgbnVtYmVyIGlz IHRoZSBsZW5ndGggb2YgdGhlIGRlc2lyZWQgc3Vic3RyaW5nLiBJZiB0aGUgc2Vjb25kCi0gICBu dW1iZXIgaXMgb21pdHRlZCwgaXMgbGVzcyB0aGFuIDAsIG9yIHdvdWxkIGJlIHBhc3QgdGhlIGVu ZCBvZiB0aGUKLSAgIHN0cmluZywgdGhlbiAidGhyb3VnaCB0aGUgZW5kIG9mIHRoZSBzdHJpbmci IGlzIGFzc3VtZWQuIElmIGl0IGlzIDAsCi0gICB0aGUgZW1wdHkgc3RyaW5nIGlzIHJldHVybmVk LgotCi0gICBJZiB0aGUgYnJhY2tldHMgYXJlIGVtcHR5IG9yIG9taXR0ZWQsIHRoZSBvcmlnaW5h bCBzdHJpbmcgaXMgcmV0dXJuZWQuCi0KLSAgIFRoZSBzdGFydGluZyBwb3NpdGlvbiBhbmQgbGVu Z3RoIG5lZWQgbm90IGJlIGxpdGVyYWwgbnVtYmVyczsgdGhleSBjYW4KLSAgIGFsc28gYmUgdmFy aWFibGVzLCBmdW5jdGlvbnMsIGFyaXRobWV0aWMgZXhwcmVzc2lvbnMsIG9yIGV2ZW4gb3RoZXIK LSAgIFxzKCkgb3IgXDooKSBxdWFudGl0aWVzOyBhbnl0aGluZyB0aGF0IGV2YWx1YXRlcyB0byBh IG51bWJlciwgZm9yCi0gICBleGFtcGxlOgotCi0gIFxzKGJsb2NrWzEwMjU6XGZoZXgybihccyhi bG9ja1tcJWI6XCVuKzRdKSkvMl0pCi0KLSAgIFN5bnRhY3RpY2FsbHksIFxtKG5hbWUpIGFuZCBc cyhuYW1lKSBkaWZmZXIgb25seSBpbiB0aGF0IHRoZSBzZXF1ZW5jZQotICAgWypdIGF0IHRoZSBl bmQgb2YgdGhlIG5hbWUgKHdoZXJlICogaXMgYW55IHNlcXVlbmNlIG9mIDAgb3IgbW9yZQotICAg Y2hhcmFjdGVycykgaXMgdHJlYXRlZCBhcyBzdWJzdHJpbmcgbm90YXRpb24gaW4gXHMobmFtZSks IGJ1dCBpcwotICAgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBuYW1lIGluIFxtKG5hbWUpICh0byBz ZWUgd2h5LCBzZWUgWzYzN11TZWN0aW9uCi0gICA3LjEwLjkpLgotCi0gIDcuMjYuIE5ldyBXQUlU IENvbW1hbmQgT3B0aW9ucwotCi0gICBUaGUgV0FJVCBjb21tYW5kIGhhcyBiZWVuIGV4dGVuZGVk IHRvIGFsbG93IHdhaXRpbmcgZm9yIGRpZmZlcmVudCBraW5kcwotICAgb2YgdGhpbmdzIChmb3Jt ZXJseSBpdCBvbmx5IHdhaXRlZCBmb3IgbW9kZW0gc2lnbmFscykuIE5vdyBpdCBhbHNvIGNhbgot ICAgd2FpdCBmb3IgZmlsZSBldmVudHMuCi0KLSAgICA3LjI2LjEuIFdhaXRpbmcgZm9yIE1vZGVt IFNpZ25hbHMKLQotICAgVGhlIHByZXZpb3VzIHN5bnRheDoKLQotICBXQUlUIHRpbWUgeyBDRCwg RFNSLCBSVFMsIFJJLCAuLi4gfQotCi0gICBoYXMgY2hhbmdlZCB0bzoKLQotICBXQUlUIHRpbWUg TU9ERU0tU0lHTkFMUyB7IENELCBEU1IsIFJUUywgUkksIC4uLiB9Ci0KLSAgIEhvd2V2ZXIsIHRo ZSBwcmV2aW91cyBzeW50YXggaXMgc3RpbGwgYWNjZXB0ZWQuIFRoZSBiZWhhdmlvciBpcyB0aGUK LSAgIHNhbWUgaW4gZWl0aGVyIGNhc2UuCi0KLSAgICA3LjI2LjIuIFdhaXRpbmcgZm9yIEZpbGUg RXZlbnRzCi0KLSAgIFRoZSBuZXcgV0FJVCBvcHRpb246Ci0KLSAgV0FJVCB0aW1lIEZJTEUgeyBD UkVBVElPTiwgREVMRVRJT04sIE1PRElGSUNBVElPTiB9IGZpbGVuYW1lCi0KLSAgIGxldHMgeW91 IHRlbGwgS2VybWl0IHRvIHdhaXQgdGhlIGdpdmVuIGFtb3VudCBvZiB0aW1lIChvciB1bnRpbCB0 aGUKLSAgIGdpdmVuIHRpbWUgb2YgZGF5KSBmb3IgYSBmaWxlIHdob3NlIG5hbWUgaXMgZmlsZW5h bWUgdG8gYmUgY3JlYXRlZCwKLSAgIGRlbGV0ZWQsIG9yIG1vZGlmaWVkLCByZXNwZWN0aXZlbHku IFRoZSBmaWxlbmFtZSBtYXkgbm90IGNvbnRhaW4KLSAgIHdpbGRjYXJkcy4gSWYgdGhlIHNwZWNp ZmllZCBldmVudCBkb2VzIG5vdCBvY2N1ciB3aXRoaW4gdGhlIHRpbWUgbGltaXQsCi0gICBvciBp ZiBXQUlUIENBTkNFTExBVElPTiBpcyBPTiBhbmQgeW91IGludGVycnVwdCBmcm9tIHRoZSBrZXli b2FyZAotICAgYmVmb3JlIHRoZSB0aW1lIGlzIHVwLCB0aGUgV0FJVCBjb21tYW5kIGZhaWxzLiBJ ZiB0aGUgZXZlbnQgaXMKLSAgIE1PRElGSUNBVElPTiBhbmQgdGhlIGZpbGUgZG9lcyBub3QgZXhp c3QsIHRoZSBjb21tYW5kIGZhaWxzLiBPdGhlcndpc2UsCi0gICBpZiB0aGUgZ2l2ZW4gZXZlbnQg b2NjdXJzIHdpdGhpbiB0aGUgdGltZSBsaW1pdCwgdGhlIGNvbW1hbmQgc3VjY2VlZHMuCi0gICBF eGFtcGxlczoKLQotICAgV0FJVCA2MDAgRklMRSBERUxFVElPTiBvb2ZhLnRtcAotICAgICAgICAg IFdhaXQgdXAgdG8gMTAgbWludXRlcyBmb3IgZmlsZSBvb2ZhLnRtcCB0byBkaXNhcHBlYXIuCi0K LSAgIFdBSVQgMjM6NTk6NTkgRklMRSBNT0Qgb3JkZXJzLmRiCi0gICAgICAgICAgV2FpdCB1bnRp bCBqdXN0IGJlZm9yZSBtaWRuaWdodCBmb3IgdGhlIG9yZGVycy5kYiBmaWxlIHRvIGJlCi0gICAg ICAgICAgY2hhbmdlZC4KLQotICAgRXhhbXBsZTogU3VwcG9zZSB5b3Ugd2FudCB0byBoYXZlIHRo ZSBjdXJyZW50IGNvcHkgb2YgL2V0Yy9tb3RkIG9uIHlvdXIKLSAgIHNjcmVlbiBhdCBhbGwgdGlt ZXMsIGFuZCB5b3Ugd2FudCB0byBoZWFyIGEgYmVsbCB3aGVuZXZlciBpdCBjaGFuZ2VzOgotCi0g IGRlZiBcJWYgL2V0Yy9tb3RkICAgICAgICAgICAgICAgICAgICAgIDsgVGhlIGZpbGUgb2YgaW50 ZXJlc3QuCi0gIHdoaWxlIDEgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgTG9vcCBm b3JldmVyLi4uCi0gICAgICBjbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgQ2xl YXIgdGhlIHNjcmVlbi4KLSAgICAgIGVjaG8gXCVmOiBcdihkYXRlKSBcdih0aW1lKS4uLiAgICAg OyBQcmludCAyLWxpbmUgaGVhZGluZy4uLgotICAgICAgZWNobwotICAgICAgaWYgKCBub3QgZXhp c3QgXCVmICkgeyAgICAgICAgICAgICA7IElmIGZpbGUgZG9lc24ndCBleGlzdCwKLSAgICAgICAg ICBlY2hvIFwlZiBkb2VzIG5vdCBleGlzdC4uLiAgICAgOyBwcmludCBtZXNzYWdlLAotICAgICAg ICAgIHdhaXQgNjAwIGZpbGUgY3JlYXQgXCVmICAgICAgICA7IGFuZCB3YWl0IGZvciBpdCB0byBh cHBlYXIuCi0gICAgICAgICAgY29udGludWUKLSAgICAgIH0KLSAgICAgIGJlZXAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOyBTb21ldGhpbmcgbmV3IC0gYmVlcC4KLSAgICAgIHR5cGUg L2hlYWQ6XHYocm93cy0yKSBcJWYgICAgICAgICAgOyBEaXNwbGF5IHRoZSBmaWxlCi0gICAgICBp ZiBmYWlsIGV4aXQgMSBcJWY6IFxmZXJyc3RyaW5nKCkgIDsgKGNoZWNraW5nIGZvciBlcnJvcnMp LgotICAgICAgd2FpdCA5OTkgZmlsZSBtb2QgXCVmICAgICAgICAgICAgICA7IFdhaXQgZm9yIGl0 IHRvIGNoYW5nZS4KLSAgfQotCi0gICBUaGlzIG5vdGljZXMgd2hlbiB0aGUgZmlsZSBpcyBjcmVh dGVkLCBkZWxldGVkLCBvciBtb2RpZmllZCwgYW5kIGFjdHMKLSAgIG9ubHkgdGhlbiAob3Igd2hl biB5b3UgaW50ZXJydXB0IGl0IHdpdGgpOyB0aGUgdGltZSBzaG93biBpbiB0aGUKLSAgIGhlYWRp bmcgaXMgdGhlIHRpbWUgb2YgdGhlIG1vc3QgcmVjZW50IGV2ZW50IChpbmNsdWRpbmcgd2hlbiB0 aGUKLSAgIHByb2dyYW0gc3RhcnRlZCkuCi0KLSAgIFNlZSBbNjM4XVNlY3Rpb24gMS4xMCwgd2hl cmUgdGhlIFx2KGtiY2hhcikgdmFyaWFibGUgaXMgZXhwbGFpbmVkLiBUaGlzCi0gICBsZXRzIHlv dSBtb2RpZnkgYSBsb29wIGxpa2UgdGhlIG9uZSBhYm92ZSB0byBhbHNvIGFjY2VwdAotICAgc2lu Z2xlLWNoYXJhY3RlciBjb21tYW5kcywgd2hpY2ggaW50ZXJydXB0IHRoZSBXQUlULCBhbmQgZGlz cGF0Y2gKLSAgIGFjY29yZGluZ2x5LiBGb3IgZXhhbXBsZToKLQotICB3YWl0IDk5OSBmaWxlIG1v ZCBcJWYgICAgICAgICAgICAgIDsgV2FpdCBmb3IgdGhlIGZpbGUgdG8gY2hhbmdlLgotICBpZiBk ZWZpbmVkIFx2KGtiY2hhcikgeyAgICAgICAgICAgIDsgSW50ZXJydXB0ZWQgZnJvbSBrZXlib2Fy ZD8KLSAgICAgIHN3aXRjaCBcdihrYmNoYXIpIHsgICAgICAgICAgICA7IEhhbmRsZSB0aGUga2V5 c3Ryb2tlLi4uCi0gICAgICAgIDpxLCBleGl0ICAgICAgICAgICAgICAgICAgICAgOyBRIHRvIFF1 aXQKLSAgICAgICAgOmgsIGVjaG8gYmxhaCBibGFoLCBicmVhayAgICA7IEggZm9yIEhlbHAKLSAg ICAgICAgOmRlZmF1bHQsIGJlZXAsIGNvbnRpbnVlICAgICA7IEFueXRoaW5nIGVsc2UgYmVlcCBh bmQgaWdub3JlCi0gICAgICB9Ci0gIH0KLQotICAgVGhpcyBsZXRzIHlvdSB3cml0ZSBldmVudC1k cml2ZW4gYXBwbGljYXRpb25zIHRoYXQgd2FpdCBmb3IgdXAgdG8gdGhyZWUKLSAgIGV2ZW50cyBh dCBvbmNlOiBhIGZpbGUgb3IgbW9kZW0gZXZlbnQsIGEgdGltZW91dCwgYW5kIGEga2V5c3Ryb2tl LgotCi0gIDcuMjcuIFJlbGF4ZWQgRk9SIGFuZCBTV0lUQ0ggU3ludGF4Ci0KLSAgIEZvciBjb25z aXN0ZW5jeSB3aXRoIHRoZSBleHRlbmRlZCBJRiBhbmQgV0hJTEUgc3ludGF4LCB0aGUgRk9SIGFu ZAotICAgU1dJVENIIGNvbnRyb2wgbGlzdHMgbWF5IChidXQgbmVlZCBub3QgYmUpIGVuY2xvc2Vk IGluIHBhcmVudGhlc2VzOgotCi0gIEZPUiAoIFwlaSAxIFwlbiAxICkgeyBjb21tYW5kLWxpc3Qu Li4gfQotICBTV0lUQ0ggKCBcJWMgKSB7IGNvbW1hbmQtbGlzdC4uLiB9Ci0KLSAgIEluIHRoZSBG T1IgY29tbWFuZCwgdGhlIGluY3JlbWVudCBpdGVtIGNhbiBiZSBvbWl0dGVkIGlmIHRoZSBjb250 cm9sCi0gICBsaXN0IGlzIGVuY2xvc2VkIGluIHBhcmVudGhlc2VzLCBpbiB3aGljaCBjYXNlIHRo ZSBpbmNyZW1lbnQgZGVmYXVsdHMKLSAgIGFwcHJvcHJpYXRlbHkgdG8gMSBvciAtMSwgZGVwZW5k aW5nIG9uIHRoZSB2YWx1ZXMgb2YgdGhlIGZpcnN0IHR3bwotICAgdmFyaWFibGVzLgotCi0gICBB cyB3aXRoIElGLCB0aGUgcGFyZW50aGVzZXMgYXJvdW5kIHRoZSBGT1ItY29tbWFuZCBjb250cm9s IGxpc3QgbXVzdCBiZQotICAgc2V0IG9mZiBieSBzcGFjZXMgKGluIHRoZSBTV0lUQ0ggY29tbWFu ZCwgdGhlIHNwYWNlcyBhcmUgbm90IHJlcXVpcmVkCi0gICBzaW5jZSB0aGUgU1dJVENIIGV4cHJl c3Npb24gaXMgYSBzaW5nbGUgYXJpdGhtZXRpYyBleHByZXNzaW9uKS4KLQotICAgQWxzbywgb3V0 ZXIgYnJhY2VzIGFyb3VuZCB0aGUgY29tbWFuZCBsaXN0IGFyZSBzdXBwbGllZCBhdXRvbWF0aWNh bGx5Ci0gICBpZiB5b3Ugb21pdCB0aGVtLCBlLmcuOgotCi0gIEZPUiAoIFwlaSAxICVuIDEgKSBl Y2hvIFwlaQotCi0gIDguIFVTSU5HIE9USEVSIEZJTEUgVFJBTlNGRVIgUFJPVE9DT0xTCi0KLSAg IEluIEMtS2VybWl0IDcuMCwgYWx0ZXJuYXRpdmUgcHJvdG9jb2xzIGNhbiBiZSBzZWxlY3RlZCB1 c2luZyBzd2l0Y2hlcy4KLSAgIFN3aXRjaGVzIGFyZSBkZXNjcmliZWQgaW4gWzYzOV1TZWN0aW9u IDEuNTsgdGhlIHVzZSBvZgotICAgcHJvdG9jb2wtc2VsZWN0aW9uIHN3aXRjaGVzIGlzIGRlc2Ny aWJlZCBpbiBbNjQwXVNlY3Rpb24gNC43LjEuCi0gICBFeGFtcGxlOgotCi0gIHNlbmQgL2JpbmFy eSAvcHJvdG9jb2w6em1vZGVtIHgudGFyLmd6Ci0KLSAgIE5vdGUgdGhhdCBmaWxlIHRyYW5zZmVy IHJlY292ZXJ5IHdvcmtzIG9ubHkgd2l0aCBLZXJtaXQgYW5kIFptb2RlbQotICAgcHJvdG9jb2xz LiBXaXRoIFptb2RlbSwgcmVjb3ZlcnkgY2FuIGJlIGluaXRpYXRlZCBvbmx5IGJ5IHRoZSBzZW5k ZXIuCi0KLSAgIE9ubHkgcHJlLTE5ODggdmVyc2lvbnMgb2YgdGhlIHB1YmxpY2x5LWRpc3RyaWJ1 dGVkIHN6L3J6IHByb2dyYW1zIHVzZQotICAgU3RhbmRhcmQgSS9POyB0aG9zZSByZWxlYXNlZCBs YXRlciB0aGFuIHRoYXQgZG8gbm90IHVzZSBTdGFuZGFyZCBJL08KLSAgIGFuZCB0aGVyZWZvcmUg ZG8gbm90IHdvcmsgd2l0aCBSRURJUkVDVC4gSG93ZXZlciwgT21lbiBUZWNobm9sb2d5IGRvZXMK LSAgIG9mZmVyIGFuIHVwLXRvLWRhdGUgcmVkaXJlY3RhYmxlIHZlcnNpb24gY2FsbGVkIGNyenN6 LCB3aGljaCBtdXN0IGJlCi0gICBsaWNlbnNlZCBmb3IgdXNlOgotCi0gICAgICJVbml4IENyeiBh bmQgQ3N6IHN1cHBvcnQgWE1PREVNLCBZTU9ERU0sIGFuZCBaTU9ERU0gdHJhbnNmZXJzIHdoZW4K LSAgICAgY2FsbGVkIGJ5IGRpYWwtb3V0IHByb2dyYW1zIHN1Y2ggYXMgS2VybWl0IGFuZCBjZXJ0 YWluIHZlcnNpb25zIG9mCi0gICAgIGN1KDEpLiBUaGV5IGFyZSBjbGllbnRzIGRlc2lnbmVkIGZv ciB0aGlzIHVzZS4KLQotICAgICAiQ3J6IGFuZCBDc3ogYXJlIENvcHlyaWdodGVkIHNoYXJld2Fy ZSBwcm9ncmFtcy4gVXNlIG9mIHRoZXNlCi0gICAgIHByb2dyYW1zIGJleW9uZCBhIGJyaWVmIGV2 YWx1YXRpb24gcGVyaW9kIHJlcXVpcmVzIHJlZ2lzdHJhdGlvbi4KLSAgICAgUGxlYXNlIHByaW50 IHRoZSAibWFpbGVyLnJ6IiBmaWxlLCBmaWxsIG91dCB0aGUgZm9ybSBhbmQgcmV0dXJuIHNhbWUK LSAgICAgd2l0aCB5b3VyIHJlZ2lzdHJhdGlvbi4iCi0KLSAgIFRvIHVzZSB0aGUgY3J6c3ogcHJv Z3JhbXMgYXMgeW91ciBleHRlcm5hbCBYWVpNT0RFTSBwcm9ncmFtcyBpbgotICAgQy1LZXJtaXQs IGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHRoZSBib29rLCBidXQgcHV0IGEgImMiIGJlZm9y ZQotICAgZWFjaCBjb21tYW5kLCBlLmcuOgotCi0gIHNldCBwcm90b2NvbCB6bW9kZW0ge2NzeiAl c30ge2NzeiAtYSAlc30gY3J6IGNyeiBjcnogY3J6Ci0KLSAgIFRvIHVzZSBabW9kZW0gcHJvdG9j b2wgb3ZlciBUZWxuZXQgb3Igb3RoZXIgbm9uLXRyYW5zcGFyZW50Ci0gICBjb25uZWN0aW9ucywg eW91IG1pZ2h0IG5lZWQgdG8gYWRkIHRoZSAtZSAoRXNjYXBlKSBvcHRpb246Ci0KLSAgc2V0IHBy b3RvY29sIHptb2RlbSB7Y3N6IC1lICVzfSB7Y3N6IC1lIC1hICVzfSBjcnogY3J6IGNyeiBjcnoK LQotICA5LiBDT01NQU5ELUxJTkUgT1BUSU9OUwotCi0gIDkuMC4gRXh0ZW5kZWQtRm9ybWF0IENv bW1hbmQtTGluZSBPcHRpb25zCi0KLSAgIFN0YW5kYXJkIFVOSVggY29tbWFuZCBsaW5lIG9wdGlv bnMgYXJlIGEgc2luZ2xlIGxldHRlci4gQy1LZXJtaXQgaGFzCi0gICBydW4gb3V0IG9mIGxldHRl cnMsIHNvIG5ldyBvcHRpb25zIGFyZSBpbiBhIG5ldyBleHRlbmRlZCBmb3JtYXQ6Ci0KLSAtLXdv cmRbOmFyZ10KLQotICAgd2hlcmUgYSBrZXl3b3JkIChyYXRoZXIgdGhhbiBhIHNpbmdsZSBsZXR0 ZXIpIHNwZWNpZmllcyB0aGUgZnVuY3Rpb24sCi0gICBhbmQgaWYgYW4gYXJndW1lbnQgaXMgdG8g YmUgaW5jbHVkZWQsIGl0IGlzIHNlcGFyYXRlZCBieSBhIGNvbG9uIChvcgotICAgZXF1YWwgc2ln bikuIE1vc3Qgb2YgdGhlIG5ldyBleHRlbmRlZC1mb3JtYXQgY29tbWFuZC1saW5lIG9wdGlvbnMg YXJlCi0gICBvbmx5IGZvciB1c2Ugd2l0aCB0aGUgSW50ZXJuZXQgS2VybWl0IFNlcnZpY2UgRGFl bW9uOyBzZWUgdGhlIFs2NDFdSUtTRAotICAgQWRtaW5pc3RyYXRpb24gR3VpZGUgZm9yIGRldGFp bHMuIEhvd2V2ZXIsIHNldmVyYWwgb2YgdGhlbSBhcmUgYWxzbwotICAgZ2VuZXJhbCBpbiBuYXR1 cmU6Ci0KLSAgIC0tbm9pbnRlcnJ1cHRzCi0gICAgICAgICAgRGlzYWJsZXMga2V5Ym9hcmQgaW50 ZXJydXB0cyB0aGF0IGFyZSBub3JtYWxseSBlbmFibGVkLCB3aGljaAotICAgICAgICAgIGFyZSB1 c3VhbGx5IEN0cmwtQyAodG8gaW50ZXJydXB0IGEgY29tbWFuZCkgYW5kIEN0cmwtWiAoVU5JWAot ICAgICAgICAgIG9ubHksIHRvIHN1c3BlbmQgQy1LZXJtaXQpLgotCi0gICAtLWhlbHAKLSAgICAg ICAgICBMaXN0cyB0aGUgZXh0ZW5kZWQgY29tbWFuZC1saW5lIG9wdGlvbnMgdGhhdCBhcmUgYXZh aWxhYmxlIGluCi0gICAgICAgICAgeW91ciB2ZXJzaW9uIG9mIEMtS2VybWl0LiBJZiBhbnkgb3B0 aW9ucyBzZWVtIHRvIGJlIG1pc3NpbmcsCi0gICAgICAgICAgdGhhdCBpcyBiZWNhdXNlIHlvdXIg Y29weSBvZiBDLUtlcm1pdCB3YXMgYnVpbHQgd2l0aAotICAgICAgICAgIGNvbXBpbGUtdGltZSBv cHRpb25zIHRvIGRlc2VsZWN0IHRoZW0uCi0KLSAgIC0taGVscGZpbGU6ZmlsZW5hbWUKLSAgICAg ICAgICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgYSBmaWxlIHRvIGJlIGRpc3BsYXllZCBpZiB0aGUg dXNlciB0eXBlcwotICAgICAgICAgIEhFTFAgKG5vdCBmb2xsb3dlZCBieSBhIHNwZWNpZmljIGNv bW1hbmQgb3IgdG9waWMpLCBpbiBwbGFjZSBvZgotICAgICAgICAgIHRoZSBidWlsdC1pbiB0b3At bGV2ZWwgaGVscCB0ZXh0LiBUaGUgZmlsZSBuZWVkIG5vdCBmaXQgb24gb25lCi0gICAgICAgICAg c2NyZWVuOyBtb3JlLXByb21wdGluZyBpcyB1c2VkIGlmIHRoZSBmaWxlIGlzIG1vcmUgdGhhbiBv bmUKLSAgICAgICAgICBzY3JlZW4gbG9uZyBpZiBDT01NQU5EIE1PUkUtUFJPTVBUSU5HIGlzIE9O LCBhcyBpdCBpcyBieQotICAgICAgICAgIGRlZmF1bHQuCi0KLSAgIC0tYmFubmVyZmlsZTpmaWxl bmFtZQotICAgICAgICAgIFRoZSBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGEgbWVzc2FnZSB0 byBiZSBwcmludGVkIGFmdGVyIHRoZQotICAgICAgICAgIHVzZXIgbG9ncyBpbiwgaW4gcGxhY2Ug b2YgdGhlIG5vcm1hbCBtZXNzYWdlIChDb3B5cmlnaHQgbm90aWNlLAotICAgICAgICAgICJUeXBl IEhFTFAgb3IgPyBmb3IgaGVscCIsICJEZWZhdWx0IHRyYW5zZmVyIG1vZGUgaXMuLi4iLCBldGMp LgotCi0gICAtLWNkbWVzc2FnZTp7b24sb2ZmLDAsMSwyfQotICAgICAgICAgIEZvciB1c2UgaW4g dGhlIFNlcnZlci1TaWRlIFNlcnZlciBjb25maWd1cmF0aW9uOyB3aGVuZXZlciB0aGUKLSAgICAg ICAgICBjbGllbnQgdGVsbHMgdGhlIHNlcnZlciB0byBjaGFuZ2UgZGlyZWN0b3J5LCB0aGUgc2Vy dmVyIHNlbmRzCi0gICAgICAgICAgdGhlIGNvbnRlbnRzIG9mIGEgInJlYWQgbWUiIGZpbGUgdG8g dGhlIGNsaWVudCdzIHNjcmVlbi4gVGhpcwotICAgICAgICAgIGZlYXR1cmUgaXMgT24gYnkgZGVm YXVsdCwgYW5kIG9wZXJhdGVzIG9ubHkgaW4gY2xpZW50L3NlcnZlcgotICAgICAgICAgIG1vZGUg d2hlbiBPTiBvciAxLiBJZiBzZXQgdG8gMiBvciBoaWdoZXIsIGl0IGFsc28gb3BlcmF0ZXMgd2hl bgotICAgICAgICAgIHRoZSBDRCBjb21tYW5kIGlzIGdpdmVuIGF0IHRoZSBJS1NEPiBwcm9tcHQu IFN5bm9ueW06IC0tY2Rtc2cuCi0KLSAgIC0tY2RmaWxlOmZpbGVuYW1lCi0gICAgICAgICAgV2hl biBjZG1lc3NhZ2UgaXMgb24sIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlICJyZWFkIG1lIiBmaWxl IHRvCi0gICAgICAgICAgYmUgc2VudC4gTm9ybWFsbHkgeW91IHdvdWxkIHNwZWNpZnkgYSByZWxh dGl2ZSAobm90IGFic29sdXRlKQotICAgICAgICAgIG5hbWUsIHNpbmNlIHRoZSBmaWxlIGlzIG9w ZW5lZCB1c2luZyB0aGUgbGl0ZXJhbCBuYW1lIHlvdQotICAgICAgICAgIHNwZWNpZmllZCwgYWZ0 ZXIgY2hhbmdpbmcgdG8gdGhlIG5ldyBkaXJlY3RvcnkuIEV4YW1wbGU6Ci0KLSAgLS1jZGZpbGU6 UkVBRC5NRQotCi0gICAgICAgICAgWW91IGNhbiBhbHNvIGdpdmUgYSBsaXN0IG9mIHVwIHRvIDgg ZmlsZW5hbWVzIGJ5IChhKSBlbmNsb3NpbmcKLSAgICAgICAgICBlYWNoIGZpbGVuYW1lIGluIGJy YWNlcywgYW5kIChiKSBlbmNsb3NpbmcgdGhlIGVudGlyZSBsaXN0IGluCi0gICAgICAgICAgYnJh Y2VzLiBFeGFtcGxlOgotICAgICAgICAgIC0tY2RmaWxlOnt7Li8ucmVhZG1lfXtSRUFELk1FfXth YWFyZWFkbWUudHh0fXtSRUFETUV9e3JlYWQtdGhpcy0KLSAgICAgICAgICBmaXJzdH19IFdoZW4g YSBsaXN0IGlzIGdpdmVuLCBpdCBpcyBzZWFyY2hlZCBmcm9tIGxlZnQgdG8gcmlnaHQKLSAgICAg ICAgICBhbmQgdGhlIGZpcnN0IGZpbGUgZm91bmQgaXMgZGlzcGxheWVkLiBUaGUgZGVmYXVsdCBs aXN0IGZvciBVTklYCi0gICAgICAgICAgaXM6Ci0KLSAge3suLy5yZWFkbWV9e1JFQURNRS5UWFR9 e1JFQUQuTUV9fQotCi0gIDkuMS4gQ29tbWFuZCBMaW5lIFBlcnNvbmFsaXRpZXMKLQotICAgQmVn aW5uaW5nIGluIHZlcnNpb24gNy4wLCBpZiB0aGUgQy1LZXJtaXQgYmluYXJ5IGlzIHJlbmFtZWQg dG8gInRlbG5ldCIKLSAgIChvciBURUxORVQuRVhFLCB0ZWxuZXQucHIsIGV0YywgZGVwZW5kaW5n IG9uIHRoZSBwbGF0Zm9ybSksIGl0IGFjY2VwdHMKLSAgIHRoZSBUZWxuZXQgY29tbWFuZCBsaW5l OgotCi0gIHRlbG5ldCBbIGhvc3QgWyBwb3J0IF0gXQotCi0gICBJbiBVbml4LCB5b3UgY2FuIGFj aGlldmUgdGhlIHNhbWUgZWZmZWN0IHdpdGggYSBzeW1saW5rOgotCi0gIGNkIC91c3IvYmluCi0g IG12IHRlbG5ldCBvbGR0ZWxuZXQKLSAgbG4gLWxzIC91c3IvbG9jYWwvYmluL2tlcm1pdCB0ZWxu ZXQKLQotICAgV2hlbiBpbnN0YWxsZWQgaW4gdGhpcyBtYW5uZXIsIEMtS2VybWl0IGFsd2F5cyBy ZWFkcyBpdHMgaW5pdGlhbGl6YXRpb24KLSAgIGZpbGUuIElmIG5vIGhvc3QgKGFuZCB0aGVyZWZv cmUgbm8gcG9ydCkgaXMgZ2l2ZW4sIEMtS2VybWl0IHN0YXJ0cyBpbgotICAgaW50ZXJhY3RpdmUg cHJvbXB0aW5nIG1vZGUuIElmIGEgaG9zdCBpcyBnaXZlbiBhcyB0aGUgZmlyc3QKLSAgIGNvbW1h bmQtbGluZSBhcmd1bWVudCwgQy1LZXJtaXQgbWFrZXMgYSBjb25uZWN0aW9uIHRvIGl0LiBUaGUg aG9zdAotICAgYXJndW1lbnQgY2FuIGJlIGFuIElQIGhvc3QgbmFtZSBvciBhZGRyZXNzLCBvciB0 aGUgbmFtZSBvZiBhIFRDUC9JUAotICAgZW50cnkgaW4geW91ciBDLUtlcm1pdCBuZXR3b3JrIGRp cmVjdG9yeS4KLQotICAgSWYgYSBwb3J0IGlzIGdpdmVuLCBpdCBpcyB1c2VkLiBJZiBhIHBvcnQg aXMgbm90IGdpdmVuLCB0aGVuIGlmIHRoZQotICAgaG9zdG5hbWUgd2FzIGZvdW5kIGluIHlvdXIg bmV0d29yayBkaXJlY3RvcnkgYW5kIHBvcnQgd2FzIGFsc28gbGlzdGVkCi0gICB0aGVyZSwgdGhl biB0aGF0IHBvcnQgaXMgdXNlZC4gT3RoZXJ3aXNlIHBvcnQgMjMgKHRoZSBUZWxuZXQgcG9ydCkg aXMKLSAgIHVzZWQuCi0KLSAgIFdoZW4gQy1LZXJtaXQgaXMgY2FsbGVkICJ0ZWxuZXQiIGFuZCBp dCBpcyBpbnZva2VkIHdpdGggYSBob3N0bmFtZSBvbgotICAgdGhlIGNvbW1hbmQgbGluZSwgaXQg ZXhpdHMgYXV0b21hdGljYWxseSB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZC4KLSAgIFdo aWxlIHRoZSBjb25uZWN0aW9uIGlzIG9wZW4sIGhvd2V2ZXIsIHlvdSBtYXkgZXNjYXBlIGJhY2sg YW5kIGZvcnRoIGFzCi0gICBtYW55IHRpbWVzIGFzIHlvdSBsaWtlLCB0cmFuc2ZlciBmaWxlcywg ZXRjLgotCi0gICBBbiBybG9naW4gcGVyc29uYWxpdHkgaXMgYWxzbyBhdmFpbGFibGUsIGJ1dCBp dCBpcyBsZXNzIHVzZWZ1bCwgYXQKLSAgIGxlYXN0IGluIFVOSVggYW5kIFZNUywgd2hlcmUgdGhl IFJsb2dpbiBUQ1AgcG9ydCBpcyBwcml2aWxlZ2VkLgotCi0gICBUaGUgbmV3IHZhcmlhYmxlIFx2 KG5hbWUpIGluZGljYXRlcyB0aGUgbmFtZSB3aXRoIHdoaWNoIEMtS2VybWl0IHdhcwotICAgaW52 b2tlZCAoImtlcm1pdCIsICJ3ZXJtaXQiLCAiazk1IiwgInRlbG5ldCIsIGV0YykuCi0KLSAgOS4y LiBCdWlsdC1pbiBIZWxwIGZvciBDb21tYW5kIExpbmUgT3B0aW9ucwotCi0gICAia2VybWl0IC1o IiwgZ2l2ZW4gZnJvbSB0aGUgc3lzdGVtIHByb21wdCwgbGlzdHMgYXMgbWFueSBjb21tYW5kLWxp bmUKLSAgIG9wdGlvbnMgYXMgd2lsbCBmaXQgb24gYSBzdGFuZGFyZCAyNHg4MCBzY3JlZW4uIEZv ciBtb3JlIGNvbXByZWhlbnNpdmUKLSAgIGhlbHAsIHVzZSB0aGUgaW50ZXJhY3RpdmUgSEVMUCBP UFRJT05TIGNvbW1hbmQgdGhhdCB3YXMgYWRkZWQgaW4KLSAgIEMtS2VybWl0IDcuMDoKLQotICAg SEVMUCBPUFRJT05TCi0gICBFeHBsYWlucyBob3cgY29tbWFuZC1saW5lIG9wdGlvbnMgd29yaywg dGhlaXIgc3ludGF4LCBldGMuCi0KLSAgIEhFTFAgT1BUSU9OUyBBTEwKLSAgIExpc3RzIGFsbCBj b21tYW5kLWxpbmUgb3B0aW9ucyBhbmQgZ2l2ZXMgYnJpZWYgaGVscCBhYm91dCBlYWNoIG9uZS4K LQotICAgSEVMUCBPUFRJT04geAotICAgR2l2ZXMgYnJpZWYgaGVscCBhYm91dCBvcHRpb24gIngi LgotCi0gICBIRUxQIEVYVEVOREVELU9QVElPTlMKLSAgIExpc3RzIHRoZSBhdmFpbGFibGUgZXh0 ZW5kZWQtZm9ybWF0IGNvbW1hbmQtbGluZSBvcHRpb25zLgotCi0gICBIRUxQIEVYVEVOREVELU9Q VElPTiB4eHgKLSAgIEdpdmVzIGhlbHAgZm9yIHRoZSBzcGVjaWZpZWQgZXh0ZW5kZWQgb3B0aW9u LgotCi0gIDkuMy4gTmV3IENvbW1hbmQtTGluZSBPcHRpb25zCi0KLSAgIENvbW1hbmQtbGluZSBv cHRpb25zIGFkZGVkIHNpbmNlIEMtS2VybWl0IDYuMCBhcmU6Ci0KLSAgICsKLSAgICAgICAgICAo cGx1cyBzaWduIGJ5IGl0c2VsZik6IFRoZSBuZXh0IGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIGEg c2NyaXB0Ci0gICAgICAgICAgdG8gZXhlY3V0ZTsgYWxsIHN1YnNlcXVlbnQgYXJndW1lbnRzIGFy ZSBpZ25vcmVkIGJ5IEMtS2VybWl0Ci0gICAgICAgICAgaXRzZWxmLCBidXQgcGFzc2VkIHRvIHRo ZSBzY3JpcHQgYXMgdG9wLWxldmVsIGNvcGllcyBvZiBcJTEsCi0gICAgICAgICAgXCUyLCBldGM7 IHRoZSBcJl9bXSBpcyBhbHNvIHNldCBhY2NvcmRpbmdseS4gXCUwIGFuZCBcJl9bMF0KLSAgICAg ICAgICBiZWNvbWUgdGhlIG5hbWUgb2YgdGhlIHNjcmlwdCBmaWxlLCByYXRoZXIgdGhhbiB0aGUg cGF0aG5hbWUgb2YKLSAgICAgICAgICB0aGUgQy1LZXJtaXQgcHJvZ3JhbSwgd2hpY2ggaXMgaXRz IG5vcm1hbCB2YWx1ZS4gUHJpbWFyaWx5IGZvcgotICAgICAgICAgIHVzZSBpbiB0aGUgdG9wIGxp bmUgb2YgIktlcmJhbmciIHNjcmlwdHMgaW4gVU5JWCAoc2VlCi0gICAgICAgICAgWzY0Ml1TZWN0 aW9uIDcuMTkpLiBFeGFtcGxlIGZyb20gVU5JWCBjb21tYW5kIGxpbmU6Ci0KLSAgJCBrZXJtaXQg WyByZWd1bGFyIGtlcm1pdCBhcmdzIF0gKyBmaWxlbmFtZQotCi0gICAgICAgICAgU2FtcGxlIGZp cnN0IGxpbmUgb2YgS2VyYmFuZyBzY3JpcHQ6Ci0KLSAgIyEvdXNyL2xvY2FsL2Jpbi9rZXJtaXQg KwotCi0gICAtLQotICAgICAgICAgICh0d28gaHlwaGVucyBzdXJyb3VuZGVkIGJ5IHdoaXRlc3Bh Y2UpIEVxdWl2YWxlbnQgdG8gIj0iLCBmb3IKLSAgICAgICAgICBjb21wYXRpYmlsaXR5IHdpdGgg VU5JWCBnZXRvcHQoMSwzKS4KLQotICAgLUcKLSAgICAgICAgICBHRVQgKGxpa2UgLWcpLCBidXQg c2VuZCB0aGUgaW5jb21pbmcgZmlsZSB0byBzdGFuZGFyZCBvdXRwdXQuCi0gICAgICAgICAgRXhh bXBsZTogImtlcm1pdCAtRyBvb2ZhLnR4dCB8IGxwciIgcmV0cmlldmVzIGEgZmlsZSBmcm9tIHlv dXIKLSAgICAgICAgICBsb2NhbCBjb21wdXRlciAocHJvdmlkaW5nIGl0IGlzIHJ1bm5pbmcgYSBL ZXJtaXQgcHJvZ3JhbSB0aGF0Ci0gICAgICAgICAgc3VwcG9ydHMgdGhlIGF1dG9kb3dubG9hZCBm ZWF0dXJlIGFuZCBoYXMgaXQgZW5hYmxlZCkgYW5kIHByaW50cwotICAgICAgICAgIGl0LgotCi0g ICAtTwotICAgICAgICAgIGVxdWl2YWxlbnQgdG8gLXggKHN0YXJ0IHVwIGluIHNlcnZlciBtb2Rl KSwgYnV0IGV4aXRzIGFmdGVyIHRoZQotICAgICAgICAgIGZpcnN0IGNsaWVudCBjb21tYW5kIGhh cyBiZWVuIGV4ZWN1dGVkIChtbmVtb25pYzogTyA9IE9ubHkgT25lKS4KLSAgICAgICAgICBUaGlz IG9uZSBpcyBoYW5keSByZXBsYWNpbmcgImtlcm1pdCAteCIgaW4gdGhlICJhdXRvbWF0aWNhbGx5 Ci0gICAgICAgICAgc3RhcnQgS2VybWl0IG9uIHRoZSBvdGhlciBlbmQiIHN0cmluZzoKLQotICBz ZXQgcHJvdG9jb2wga2VybWl0IHtrZXJtaXQgLWlyfSB7a2VybWl0IC1yfSB7a2VybWl0IC14fQot Ci0gICAgICAgICAgc2luY2UgLXggbGVhdmVzIHRoZSByZW1vdGUgS2VybWl0IGluIHNlcnZlciBt b2RlIGFmdGVyIHRoZQotICAgICAgICAgIHRyYW5zZmVyLCB3aGljaCBjYW4gYmUgY29uZnVzaW5n LCB3aGVyZWFzIC1PIG1ha2VzIGl0IGdvIGF3YXkKLSAgICAgICAgICBhdXRvbWF0aWNhbGx5IGFm dGVyIHRoZSB0cmFuc2Zlci4KLQotICAgLUwKLSAgICAgICAgICBSZWN1cnNpdmUsIHdoZW4gdXNl ZCBpbiBjb21iaW5hdGlvbiB3aXRoIC1zIChtbmVtb25pYzogTCA9Ci0gICAgICAgICAgTGV2ZWxz KS4gSW4gVU5JWCBvciBvdGhlciBlbnZpcm9ubWVudHMgd2hlcmUgdGhlIHNoZWxsIGV4cGFuZHMK LSAgICAgICAgICB3aWxkY2FyZHMgaXRzZWxmLCB0aGUgLXMgYXJndW1lbnQsIGlmIGl0IGNvbnRh aW5zIHdpbGRjYXJkcywKLSAgICAgICAgICBtdXN0IGJlIHF1b3RlZCB0byBwcmV2ZW50IHRoaXMs IGUuZy46Ci0KLSAga2VybWl0IC1MIC1zICIqLmMiCi0KLSAgICAgICAgICBJbiBVTklYIG9ubHks ICJrZXJtaXQgLUwgLXMgLiIgbWVhbnMgdG8gc2VuZCB0aGUgY3VycmVudAotICAgICAgICAgIGRp cmVjdG9yeSB0cmVlLiBTZWUgWzY0M11TZWN0aW9ucyA0LjEwIGFuZCBbNjQ0XTQuMTEgYWJvdXQK LSAgICAgICAgICByZWN1cnNpdmUgZmlsZSB0cmFuc2Zlci4KLQotICAgLVYKLSAgICAgICAgICBF cXVpdmFsZW50IHRvIFNFVCBGSUxFIFBBVFRFUk5TIE9GRiAoWzY0NV1TZWN0aW9uIDQuMykgYW5k IFNFVAotICAgICAgICAgIFRSQU5TRkVSIE1PREUgTUFOVUFMLiBJbiBvdGhlciB3b3JkcywgdGFr ZSB0aGUgRklMRSBUWVBFIHNldHRpbmcKLSAgICAgICAgICBsaXRlcmFsbHkuIEZvciBleGFtcGxl LCAia2VybWl0IC1WVCBvb2ZhLmJpbiIgbWVhbnMgc2VuZCB0aGUKLSAgICAgICAgICBmaWxlIGlu IFRleHQgbW9kZSwgbm8gbWF0dGVyIHdoYXQgaXRzIG5hbWUgaXMgYW5kIG5vIG1hdHRlcgotICAg ICAgICAgIHdoZXRoZXIgYSBraW5kcmVkIHNwaXJpdCBpcyByZWNvZ25pemVkIGF0IHRoZSBvdGhl ciBlbmQgb2YgdGhlCi0gICAgICAgICAgY29ubmVjdGlvbi4KLQotICAgLTAKLSAgICAgICAgICAo ZGlnaXQgemVybykgbWVhbnMgImJlIDEwMCUgdHJhbnNwYXJlbnQgaW4gQ09OTkVDVCBtb2RlIi4g VGhpcwotICAgICAgICAgIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGZvbGxvd2luZyBzZXJpZXMgb2Yg Y29tbWFuZHM6IFNFVCBQQVJJVFkKLSAgICAgICAgICBOT05FLCBTRVQgQ09NTUFORCBCWVRFU0la RSA4LCBTRVQgVEVSTUlOQUwgQllURVNJWkUgOCwgU0VUIEZMT1cKLSAgICAgICAgICBOT05FLCBT RVQgVEVSTSBFU0NBUEUgRElTQUJMRUQsIFNFVCBURVJNIENIQVIgVFJBTlNQQVJFTlQsIFNFVAot ICAgICAgICAgIFRFUk0gQVVUT0RPV05MT0FEIE9GRiwgU0VUIFRFUk0gQVBDIE9GRiwgU0VUIFRF TE9QVCBLRVJNSVQKLSAgICAgICAgICBSRUZVU0UgUkVGVVNFLgotCi0gIDEwLiBDLUtFUk1JVCBB TkQgRy1LRVJNSVQKLQotICAgRXZlcnkgbXVsdGlmdW5jdGlvbmVkIGFuZCBsb25nLWxpdmVkIHNv ZnR3YXJlIHByb2dyYW0gZ3Jvd3MgaW4KLSAgIGNvbXBsZXhpdHkgYW5kIHNpemUgb3ZlciB0aW1l IHRvIG1lZXQgdGhlIG5lZWRzIGFuZCByZXF1ZXN0cyBvZiBpdHMKLSAgIHVzZXJzIGFuZCB0aGUg ZGVtYW5kcyBvZiB0aGUgdW5kZXJseWluZyB0ZWNobm9sb2d5IGFzIGl0IGNoYW5nZXMuCi0KLSAg IEV2ZW50dWFsbHkgdXNlcnMgYmVnaW4gdG8gbm90aWNlIGhvdyBiaWcgdGhlIGFwcGxpY2F0aW9u IGhhcyBncm93biwgaG93Ci0gICBtdWNoIGRpc2sgc3BhY2UgaXQgb2NjdXBpZXMsIGhvdyBsb25n IGl0IHRha2VzIHRvIGxvYWQsIGFuZCB0aGV5IHN0YXJ0Ci0gICB0byBsb25nIGZvciB0aGUgZ29v ZCBvbGQgZGF5cyB3aGVuIGl0IHdhcyBsZWFuIGFuZCBtZWFuLiBOb3QgbG9uZyBhZnRlcgotICAg dGhhdCB0aGV5IGJlZ2luIGFza2luZyBmb3IgYSAibGlnaHQiIHZlcnNpb24gdGhhdCBvbmx5IGRv ZXMgdGhlIGJhc2ljcwotICAgd2l0aCBubyBmcmlsbHMuCi0KLSAgIEFuZCBzbyBpdCBpcyB3aXRo IEMtS2VybWl0LiBBICJsaWdodCIgdmVyc2lvbiBvZiBLZXJtaXQgd2FzIHJlbGVhc2VkCi0gICAo Zm9yIFVOSVggb25seSkgaW4gRGVjZW1iZXIgMTk5OSB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2U7Ci0gICB0aHVzIGl0IGlzIGNhbGxlZCBHLUtlcm1pdCAoZm9yIEdOVSBLZXJt aXQpLiBBbGwgaXQgZG9lcyBpcyBzZW5kIGFuZAotICAgcmVjZWl2ZSBmaWxlcywgcGVyaW9kLiBZ b3UgY2FuIGZpbmQgaXQgYXQ6Ci0KLSAgWzY0Nl1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvZ2tlcm1pdC5odG1sCi0KLSAgIFdoZXJlIHRoZSBDLUtlcm1pdCA3LjAgYmluYXJ5IG1pZ2h0 IGJlIGFueXdoZXJlIGZyb20gMSB0byAzIG1pbGxpb24KLSAgIGJ5dGVzIGluIHNpemUsIHRoZSBH LUtlcm1pdCBiaW5hcnkgcmFuZ2VzIGZyb20gMzBLIHRvIDEwMEssIGRlcGVuZGluZwotICAgb24g dGhlIHVuZGVybHlpbmcgYXJjaGl0ZWN0dXJlIChSSVNDIHZzIENJU0MsIGV0YykuCi0KLSAgIEct S2VybWl0IGFuZCBDLUtlcm1pdCBtYXkgcmVzaWRlIHNpZGUtYnktc2lkZSBvbiB0aGUgc2FtZSBj b21wdXRlci4KLSAgIEctS2VybWl0IGRvZXMgbm90IG1ha2UgY29ubmVjdGlvbnM7IGl0IGRvZXMg bm90IGhhdmUgYSBzY3JpcHQgbGFuZ3VhZ2U7Ci0gICBpdCBkb2VzIG5vdCB0cmFuc2xhdGUgY2hh cmFjdGVyIHNldHMuIEctS2VybWl0IG1heSBiZSB1c2VkIGluc3RlYWQgb2YKLSAgIEMtS2VybWl0 IHdoZW46Ci0KLSAgICAgKiBJdCBpcyBvbiB0aGUgcmVtb3RlIGVuZC4KLSAgICAgKiBGaWxlcyBh cmUgdG8gYmUgdHJhbnNmZXJyZWQgaW4gYmluYXJ5IG1vZGUgb3IgaW4gdGV4dCBtb2RlIHdpdGhv dXQKLSAgICAgICBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uLgotICAgICAqIEZpbGUgdGltZXN0 YW1wcyBkb24ndCBuZWVkIHRvIGJlIHByZXNlcnZlZC4KLQotICAgSW4gc3VjaCBjYXNlcyBHLUtl cm1pdCBtaWdodCBiZSBwcmVmZXJyZWQgc2luY2UgaXQgZ2VuZXJhbGx5IHN0YXJ0cyB1cAotICAg ZmFzdGVyLCBhbmQgeWV0IHRyYW5zZmVycyBmaWxlcyBqdXN0IGFzIGZhc3Qgb24gbW9zdCAoYnV0 IG5vdAotICAgbmVjZXNzYXJpbHkgYWxsKSBraW5kcyBvZiBjb25uZWN0aW9uczsgZm9yIGV4YW1w bGUsIGl0IHN1cHBvcnRzCi0gICBzdHJlYW1pbmcgKFs2NDddU2VjdGlvbiA0LjIwKS4KLQotICAg Ry1LZXJtaXQgaXMgYWxzbyBoYW5keSBmb3IgYm9vdHN0cmFwcGluZy4gSXQgaXMgZWFzaWVyIHRv IGxvYWQgb24gYSBuZXcKLSAgIGNvbXB1dGVyIHRoYW4gQy1LZXJtaXQgLS0gaXQgZml0cyBvbiBh IGZsb3BweSBkaXNrZXR0ZSB3aXRoIHBsZW50eSBvZgotICAgcm9vbSB0byBzcGFyZS4gVGh1cyBp ZiB5b3UgaGF2ZSAoc2F5KSBhbiBvbGQgUEMgcnVubmluZyAoc2F5KSBTQ08gWGVuaXgKLSAgIGFu ZCBubyBuZXR3b3JrIGNvbm5lY3Rpb24sIHlvdSBjYW4gZG93bmxvYWQgdGhlIFhlbml4IHZlcnNp b24gb2YKLSAgIEctS2VybWl0IHRvIChzYXkpIGEgRE9TIG9yIFdpbmRvd3MgUEMsIGNvcHkgaXQg dG8gZGlza2V0dGUsIHJlYWQgdGhlCi0gICBkaXNrZXR0ZSBvbiBYZW5peCB3aXRoICJkb3NyZWFk IiwgYW5kIHRoZW4gdXNlIEctS2VybWl0IHRvIHJlY2VpdmUKLSAgIEMtS2VybWl0ICh3aGljaCBk b2VzIG5vdCBmaXQgb24gYSBkaXNrZXR0ZSkuIElmIGRpc2tldHRlcyBhcmVuJ3QgYW4KLSAgIG9w dGlvbiwgb3RoZXIgYm9vdHN0cmFwcGluZyBtZXRob2RzIGFyZSBwb3NzaWJsZSB0b28gLS0gc2Vl IHRoZQotICAgWzY0OF1HLUtlcm1pdCB3ZWIgcGFnZSBmb3IgZGV0YWlscy4KLQotSUlJLiBBUFBF TkRJQ0VTCi0KLSAgSUlJLjEuIENoYXJhY3RlciBTZXQgVGFibGVzCi0KLSAgICBJSUkuMS4xLiBU aGUgSGV3bGV0dCBQYWNrYXJkIFJvbWFuOCBDaGFyYWN0ZXIgU2V0Ci0KLWRlYyBjb2wvcm93IG9j dCBoZXggIGRlc2NyaXB0aW9uCi0xNjAgIDEwLzAwICAyNDAgIEEwICAoVW5kZWZpbmVkKQotMTYx ICAxMC8wMSAgMjQxICBBMSAgQSBncmF2ZQotMTYyICAxMC8wMiAgMjQyICBBMiAgQSBjaXJjdW1m bGV4Ci0xNjMgIDEwLzAzICAyNDMgIEEzICBFIGdyYXZlCi0xNjQgIDEwLzA0ICAyNDQgIEE0ICBF IGNpcmN1bWZsZXgKLTE2NSAgMTAvMDUgIDI0NSAgQTUgIEUgZGlhZXJlc2lzCi0xNjYgIDEwLzA2 ICAyNDYgIEE2ICBJIGNpcmN1bWZsZXgKLTE2NyAgMTAvMDcgIDI0NyAgQTcgIEkgZGlhZXJlc2lz Ci0xNjggIDEwLzA4ICAyNTAgIEE4ICBBY3V0ZSBhY2NlbnQKLTE2OSAgMTAvMDkgIDI1MSAgQTkg IEdyYXZlIGFjY2VudAotMTcwICAxMC8xMCAgMjUyICBBQSAgQ2lyY3VtZmxleCBhY2NlbnQKLTE3 MSAgMTAvMTEgIDI1MyAgQUIgIERpYWVyZXNpcwotMTcyICAxMC8xMiAgMjU0ICBBQyAgVGlsZGUg YWNjZW50Ci0xNzMgIDEwLzEzICAyNTUgIEFEICBVIGdyYXZlCi0xNzQgIDEwLzE0ICAyNTYgIEFF ICBVIGNpcmN1bWZsZXgKLTE3NSAgMTAvMTUgIDI1NyAgQUYgIExpcmEgc3ltYm9sCi0xNzYgIDEx LzAwICAyNjAgIEIwICBUb3AgYmFyIChtYWNyb24pCi0xNzcgIDExLzAxICAyNjEgIEIxICBZIGFj dXRlCi0xNzggIDExLzAyICAyNjIgIEIyICB5IGFjdXRlCi0xNzkgIDExLzAzICAyNjMgIEIzICBE ZWdyZWUgU2lnbgotMTgwICAxMS8wNCAgMjY0ICBCNCAgQyBjZWRpbGxhCi0xODEgIDExLzA1ICAy NjUgIEI1ICBjIGNlZGlsbGEKLTE4MiAgMTEvMDYgIDI2NiAgQjYgIE4gdGlsZGUKLTE4MyAgMTEv MDcgIDI2NyAgQjcgIG4gdGlsZGUKLTE4NCAgMTEvMDggIDI3MCAgQjggIEludmVydGVkIGV4Y2xh bWF0aW9uIG1hcmsKLTE4NSAgMTEvMDkgIDI3MSAgQjkgIEludmVydGVkIHF1ZXN0aW9uIG1hcmsK LTE4NiAgMTEvMTAgIDI3MiAgQkEgIEN1cnJlbmN5IHN5bWJvbAotMTg3ICAxMS8xMSAgMjczICBC QiAgUG91bmQgc3Rlcmxpbmcgc3ltYm9sCi0xODggIDExLzEyICAyNzQgIEJDICBZZW4gc3ltYm9s Ci0xODkgIDExLzEzICAyNzUgIEJEICBQYXJhZ3JhcGgKLTE5MCAgMTEvMTQgIDI3NiAgQkUgIEZs b3JpbiAoR3VpbGRlcikgc3ltYm9sCi0xOTEgIDExLzE1ICAyNzcgIEJGICBDZW50IHN5bWJvbAot MTkyICAxMi8wMCAgMzAwICBDMCAgYSBjaXJjdW1mbGV4Ci0xOTMgIDEyLzAxICAzMDEgIEMxICBl IGNpcmN1bWZsZXgKLTE5NCAgMTIvMDIgIDMwMiAgQzIgIG8gY2lyY3VtZmxleAotMTk1ICAxMi8w MyAgMzAzICBDMyAgdSBjaXJjdW1mbGV4Ci0xOTYgIDEyLzA0ICAzMDQgIEM0ICBhIGFjdXRlCi0x OTcgIDEyLzA1ICAzMDUgIEM1ICBlIGFjdXRlCi0xOTggIDEyLzA2ICAzMDYgIEM2ICBvIGFjdXRl Ci0xOTkgIDEyLzA3ICAzMDcgIEM3ICB1IGFjdXRlCi0yMDAgIDEyLzA4ICAzMTAgIEM4ICBhIGdy YXZlCi0yMDEgIDEyLzA5ICAzMTEgIEM5ICBlIGdyYXZlCi0yMDIgIDEyLzEwICAzMTIgIENBICBv IGdyYXZlCi0yMDMgIDEyLzExICAzMTMgIENCICB1IGdyYXZlCi0yMDQgIDEyLzEyICAzMTQgIEND ICBhIGRpYWVyZXNpcwotMjA1ICAxMi8xMyAgMzE1ICBDRCAgZSBkaWFlcmVzaXMKLTIwNiAgMTIv MTQgIDMxNiAgQ0UgIG8gZGlhZXJlc2lzCi0yMDcgIDEyLzE1ICAzMTcgIENGICB1IGRpYWVyZXNp cwotMjA4ICAxMy8wMCAgMzIwICBEMCAgQSByaW5nCi0yMDkgIDEzLzAxICAzMjEgIEQxICBpIGNp cmN1bWZsZXgKLTIxMCAgMTMvMDIgIDMyMiAgRDIgIE8gd2l0aCBzdHJva2UKLTIxMSAgMTMvMDMg IDMyMyAgRDMgIEFFIGRpZ3JhcGgKLTIxMiAgMTMvMDQgIDMyNCAgRDQgIGEgcmluZwotMjEzICAx My8wNSAgMzI1ICBENSAgaSBhY3V0ZQotMjE0ICAxMy8wNiAgMzI2ICBENiAgbyB3aXRoIHN0cm9r ZQotMjE1ICAxMy8wNyAgMzI3ICBENyAgYWUgZGlncmFwaAotMjE2ICAxMy8wOCAgMzMwICBEOCAg QSBkaWFlcmVzaXMKLTIxNyAgMTMvMDkgIDMzMSAgRDkgIGkgZ3JhdmUKLTIxOCAgMTMvMTAgIDMz MiAgREEgIE8gZGlhZXJlc2lzCi0yMTkgIDEzLzExICAzMzMgIERCICBVIGRpYWVyZXNpcwotMjIw ICAxMy8xMiAgMzM0ICBEQyAgRSBhY3V0ZQotMjIxICAxMy8xMyAgMzM1ICBERCAgaSBkaWFlcmVz aXMKLTIyMiAgMTMvMTQgIDMzNiAgREUgIEdlcm1hbiBzaGFycCBzCi0yMjMgIDEzLzE1ICAzMzcg IERGICBPIGNpcmN1bWZsZXgKLTIyNCAgMTQvMDAgIDM0MCAgRTAgIEEgYWN1dGUKLTIyNSAgMTQv MDEgIDM0MSAgRTEgIEEgdGlsZGUKLTIyNiAgMTQvMDIgIDM0MiAgRTIgIGEgdGlsZGUKLTIyNyAg MTQvMDMgIDM0MyAgRTMgIEljZWxhbmRpYyBFdGgKLTIyOCAgMTQvMDQgIDM0NCAgRTQgIEljZWxh bmRpYyBldGgKLTIyOSAgMTQvMDUgIDM0NSAgRTUgIEkgYWN1dGUKLTIzMCAgMTQvMDYgIDM0NiAg RTYgIEkgZ3JhdmUKLTIzMSAgMTQvMDcgIDM0NyAgRTcgIE8gYWN1dGUKLTIzMiAgMTQvMDggIDM1 MCAgRTggIE8gZ3JhdmUKLTIzMyAgMTQvMDkgIDM1MSAgRTkgIE8gdGlsZGUKLTIzNCAgMTQvMTAg IDM1MiAgRUEgIG8gdGlsZGUKLTIzNSAgMTQvMTEgIDM1MyAgRUIgIFMgY2Fyb24KLTIzNiAgMTQv MTIgIDM1NCAgRUMgIHMgY2Fyb24KLTIzNyAgMTQvMTMgIDM1NSAgRUQgIFUgYWN1dGUKLTIzOCAg MTQvMTQgIDM1NiAgRUUgIFkgZGlhZXJlc2lzCi0yMzkgIDE0LzE1ICAzNTcgIEVGICB5IGRpYWVy ZXNpcwotMjQwICAxNS8wMCAgMzYwICBGMCAgSWNlbGFuZGljIFRob3JuCi0yNDEgIDE1LzAxICAz NjEgIEYxICBJY2VsYW5kaWMgdGhvcm4KLTI0MiAgMTUvMDIgIDM2MiAgRjIgIE1pZGRsZSBkb3QK LTI0MyAgMTUvMDMgIDM2MyAgRjMgIEdyZWVrIG11Ci0yNDQgIDE1LzA0ICAzNjQgIEY0ICBQaWxj cm93IHNpZ24KLTI0NSAgMTUvMDUgIDM2NSAgRjUgIEZyYWN0aW9uIDMvNAotMjQ2ICAxNS8wNiAg MzY2ICBGNiAgTG9uZyBkYXNoLCBob3Jpem9udGFsIGJhcgotMjQ3ICAxNS8wNyAgMzY3ICBGNyAg RnJhY3Rpb24gMS80Ci0yNDggIDE1LzA4ICAzNzAgIEY4ICBGcmFjdGlvbiAxLzIKLTI0OSAgMTUv MDkgIDM3MSAgRjkgIEZlbWluaW5lIG9yZGluYWwKLTI1MCAgMTUvMTAgIDM3MiAgRkEgIE1hc2N1 bGluZSBvcmRpbmFsCi0yNTEgIDE1LzExICAzNzMgIEZCICBMZWZ0IGd1aWxsZW1vdAotMjUyICAx NS8xMiAgMzc0ICBGQyAgU29saWQgYm94Ci0yNTMgIDE1LzEzICAzNzUgIEZEICBSaWdodCBndWls bGVtb3QKLTI1NCAgMTUvMTQgIDM3NiAgRkUgIFBsdXMgb3IgbWludXMgc2lnbgotMjU1ICAxNS8x NSAgMzc3ICBGRiAgKFVuZGVmaW5lZCkKLQotICAgIElJSS4xLjIuIEdyZWVrIENoYXJhY3RlciBT ZXRzCi0KLSAgICBJSUkuMS4yLjEuIFRoZSBJU08gODg1OS03IExhdGluIC8gR3JlZWsgQWxwaGFi ZXQgPSBFTE9UIDkyOAotCi1kZWMgY29sL3JvdyBvY3QgaGV4ICBkZXNjcmlwdGlvbgotMTYwICAx MC8wMCAgMjQwICBBMCAgTm8tYnJlYWsgc3BhY2UKLTE2MSAgMTAvMDEgIDI0MSAgQTEgIExlZnQg c2luZ2xlIHF1b3RhdGlvbiBtYXJrCi0xNjIgIDEwLzAyICAyNDIgIEEyICByaWdodCBzaW5nbGUg cXVvdGF0aW9uIG1hcmsKLTE2MyAgMTAvMDMgIDI0MyAgQTMgIFBvdW5kIHNpZ24KLTE2NCAgMTAv MDQgIDI0NCAgQTQgIChVTlVTRUQpCi0xNjUgIDEwLzA1ICAyNDUgIEE1ICAoVU5VU0VEKQotMTY2 ICAxMC8wNiAgMjQ2ICBBNiAgQnJva2VuIGJhcgotMTY3ICAxMC8wNyAgMjQ3ICBBNyAgUGFyYWdy YXBoIHNpZ24KLTE2OCAgMTAvMDggIDI1MCAgQTggIERpYWVyZXNpcyAoRGlhbHl0aWthKQotMTY5 ICAxMC8wOSAgMjUxICBBOSAgQ29weXJpZ2h0IHNpZ24KLTE3MCAgMTAvMTAgIDI1MiAgQUEgIChV TlVTRUQpCi0xNzEgIDEwLzExICAyNTMgIEFCICBMZWZ0IGFuZ2xlIHF1b3RhdGlvbgotMTcyICAx MC8xMiAgMjU0ICBBQyAgTm90IHNpZ24KLTE3MyAgMTAvMTMgIDI1NSAgQUQgIFNvZnQgaHlwaGVu Ci0xNzQgIDEwLzE0ICAyNTYgIEFFICAoVU5VU0VEKQotMTc1ICAxMC8xNSAgMjU3ICBBRiAgSG9y aXpvbnRhbCBiYXIgKFBhcmVudGhldGlraSBwYXZsYSkKLTE3NiAgMTEvMDAgIDI2MCAgQjAgIERl Z3JlZSBzaWduCi0xNzcgIDExLzAxICAyNjEgIEIxICBQbHVzLW1pbnVzIHNpZ24KLTE3OCAgMTEv MDIgIDI2MiAgQjIgIFN1cGVyc2NyaXB0IHR3bwotMTc5ICAxMS8wMyAgMjYzICBCMyAgU3VwZXJz Y3JpcHQgdGhyZWUKLTE4MCAgMTEvMDQgIDI2NCAgQjQgIEFjY2VudCAodG9ub3MpCi0xODEgIDEx LzA1ICAyNjUgIEI1ICBEaWFlcmVzaXMgYW5kIGFjY2VudCAoRGlhbHl0aWthIGFuZCBUb25vcykK LTE4MiAgMTEvMDYgIDI2NiAgQjYgIEFscGhhIHdpdGggYWNjZW50Ci0xODMgIDExLzA3ICAyNjcg IEI3ICBNaWRkbGUgZG90IChBbm8gVGVsZWlhKQotMTg0ICAxMS8wOCAgMjcwICBCOCAgRXBzaWxv biB3aXRoIGFjY2VudAotMTg1ICAxMS8wOSAgMjcxICBCOSAgRXRhIHdpdGggYWNjZW50Ci0xODYg IDExLzEwICAyNzIgIEJBICBJb3RhIHdpdGggYWNjZW50Ci0xODcgIDExLzExICAyNzMgIEJCICBS aWdodCBhbmdsZSBxdW90YXRpb24KLTE4OCAgMTEvMTIgIDI3NCAgQkMgIE9taWNyb24gd2l0aCBh Y2NlbnQKLTE4OSAgMTEvMTMgIDI3NSAgQkQgIE9uZSBoYWxmCi0xOTAgIDExLzE0ICAyNzYgIEJF ICBVcHNpbG9uIHdpdGggYWNjZW50Ci0xOTEgIDExLzE1ICAyNzcgIEJGICBPbWVnYSB3aXRoIGFj Y2VudAotMTkyICAxMi8wMCAgMzAwICBDMCAgaW90YSB3aXRoIGRpYWVyZXNpcyBhbmQgYWNjZW50 Ci0xOTMgIDEyLzAxICAzMDEgIEMxICBBbHBoYQotMTk0ICAxMi8wMiAgMzAyICBDMiAgQmV0YQot MTk1ICAxMi8wMyAgMzAzICBDMyAgR2FtbWEKLTE5NiAgMTIvMDQgIDMwNCAgQzQgIERlbHRhCi0x OTcgIDEyLzA1ICAzMDUgIEM1ICBFcHNpbG9uCi0xOTggIDEyLzA2ICAzMDYgIEM2ICBaZXRhCi0x OTkgIDEyLzA3ICAzMDcgIEM3ICBFdGEKLTIwMCAgMTIvMDggIDMxMCAgQzggIFRoZXRhCi0yMDEg IDEyLzA5ICAzMTEgIEM5ICBJb3RhCi0yMDIgIDEyLzEwICAzMTIgIENBICBLYXBwYQotMjAzICAx Mi8xMSAgMzEzICBDQiAgTGFtZGEKLTIwNCAgMTIvMTIgIDMxNCAgQ0MgIE11Ci0yMDUgIDEyLzEz ICAzMTUgIENEICBOdQotMjA2ICAxMi8xNCAgMzE2ICBDRSAgS3NpCi0yMDcgIDEyLzE1ICAzMTcg IENGICBPbWljcm9uCi0yMDggIDEzLzAwICAzMjAgIEQwICBQaQotMjA5ICAxMy8wMSAgMzIxICBE MSAgUmhvCi0yMTAgIDEzLzAyICAzMjIgIEQyICAoVU5VU0VEKQotMjExICAxMy8wMyAgMzIzICBE MyAgU2lnbWEKLTIxMiAgMTMvMDQgIDMyNCAgRDQgIFRhdQotMjEzICAxMy8wNSAgMzI1ICBENSAg VXBzaWxvbgotMjE0ICAxMy8wNiAgMzI2ICBENiAgUGhpCi0yMTUgIDEzLzA3ICAzMjcgIEQ3ICBL aGkKLTIxNiAgMTMvMDggIDMzMCAgRDggIFBzaQotMjE3ICAxMy8wOSAgMzMxICBEOSAgT21lZ2EK LTIxOCAgMTMvMTAgIDMzMiAgREEgIElvdGEgd2l0aCBkaWFlcmVzaXMKLTIxOSAgMTMvMTEgIDMz MyAgREIgIFVwc2lsb24gd2l0aCBkaWFlcmVzaXMKLTIyMCAgMTMvMTIgIDMzNCAgREMgIGFscGhh IHdpdGggYWNjZW50Ci0yMjEgIDEzLzEzICAzMzUgIEREICBlcHNpbG9uIHdpdGggYWNjZW50Ci0y MjIgIDEzLzE0ICAzMzYgIERFICBldGEgd2l0aCBhY2NlbnQKLTIyMyAgMTMvMTUgIDMzNyAgREYg IGlvdGEgd2l0aCBhY2NlbnQKLTIyNCAgMTQvMDAgIDM0MCAgRTAgIHVwc2lsb24gd2l0aCBkaWFl cmVzaXMgYW5kIGFjY2VudAotMjI1ICAxNC8wMSAgMzQxICBFMSAgYWxwaGEKLTIyNiAgMTQvMDIg IDM0MiAgRTIgIGJldGEKLTIyNyAgMTQvMDMgIDM0MyAgRTMgIGdhbW1hCi0yMjggIDE0LzA0ICAz NDQgIEU0ICBkZWx0YQotMjI5ICAxNC8wNSAgMzQ1ICBFNSAgZXBzaWxvbgotMjMwICAxNC8wNiAg MzQ2ICBFNiAgemV0YQotMjMxICAxNC8wNyAgMzQ3ICBFNyAgZXRhCi0yMzIgIDE0LzA4ICAzNTAg IEU4ICB0aGV0YQotMjMzICAxNC8wOSAgMzUxICBFOSAgaW90YQotMjM0ICAxNC8xMCAgMzUyICBF QSAga2FwcGEKLTIzNSAgMTQvMTEgIDM1MyAgRUIgIGxhbWRhCi0yMzYgIDE0LzEyICAzNTQgIEVD ICBtdQotMjM3ICAxNC8xMyAgMzU1ICBFRCAgbnUKLTIzOCAgMTQvMTQgIDM1NiAgRUUgIGtzaQot MjM5ICAxNC8xNSAgMzU3ICBFRiAgb21pY3JvbgotMjQwICAxNS8wMCAgMzYwICBGMCAgcGkKLTI0 MSAgMTUvMDEgIDM2MSAgRjEgIHJobwotMjQyICAxNS8wMiAgMzYyICBGMiAgdGVybWluYWwgc2ln bWEKLTI0MyAgMTUvMDMgIDM2MyAgRjMgIHNpZ21hCi0yNDQgIDE1LzA0ICAzNjQgIEY0ICB0YXUK LTI0NSAgMTUvMDUgIDM2NSAgRjUgIHVwc2lsb24KLTI0NiAgMTUvMDYgIDM2NiAgRjYgIHBoaQot MjQ3ICAxNS8wNyAgMzY3ICBGNyAga2hpCi0yNDggIDE1LzA4ICAzNzAgIEY4ICBwc2kKLTI0OSAg MTUvMDkgIDM3MSAgRjkgIG9tZWdhCi0yNTAgIDE1LzEwICAzNzIgIEZBICBpb3RhIHdpdGggZGlh ZXJlc2lzCi0yNTEgIDE1LzExICAzNzMgIEZCICB1cHNpbG9uIHdpdGggZGlhZXJlc2lzCi0yNTIg IDE1LzEyICAzNzQgIEZDICBvbWljcm9uIHdpdGggZGlhZXJlc2lzCi0yNTMgIDE1LzEzICAzNzUg IEZEICB1cHNpbG9uIHdpdGggYWNjZW50Ci0yNTQgIDE1LzE0ICAzNzYgIEZFICBvbWVnYSB3aXRo IGFjY2VudAotMjU1ICAxNS8xNSAgMzc3ICBGRiAgKFVOVVNFRCkKLQotICAgIElJSS4xLjIuMi4g VGhlIEVMT1QgOTI3IENoYXJhY3RlciBTZXQKLQotZGVjIGNvbC9yb3cgb2N0IGhleCAgZGVzY3Jp cHRpb24KLSAzMiAgMDIvMDAgICA0MCAgMjAgIFNQQUNFCi0gMzMgIDAyLzAxICAgNDEgIDIxICBF WENMQU1BVElPTiBNQVJLCi0gMzQgIDAyLzAyICAgNDIgIDIyICBRVU9UQVRJT04gTUFSSwotIDM1 ICAwMi8wMyAgIDQzICAyMyAgTlVNQkVSIFNJR04KLSAzNiAgMDIvMDQgICA0NCAgMjQgIERPTExB UiBTSUdOCi0gMzcgIDAyLzA1ICAgNDUgIDI1ICBQRVJDRU5UIFNJR04KLSAzOCAgMDIvMDYgICA0 NiAgMjYgIEFNUEVSU0FORAotIDM5ICAwMi8wNyAgIDQ3ICAyNyAgQVBPU1RST1BIRQotIDQwICAw Mi8wOCAgIDUwICAyOCAgTEVGVCBQQVJFTlRIRVNJUwotIDQxICAwMi8wOSAgIDUxICAyOSAgUklH SFQgUEFSRU5USEVTSVMKLSA0MiAgMDIvMTAgICA1MiAgMkEgIEFTVEVSSVNLCi0gNDMgIDAyLzEx ICAgNTMgIDJCICBQTFVTIFNJR04KLSA0NCAgMDIvMTIgICA1NCAgMkMgIENPTU1BCi0gNDUgIDAy LzEzICAgNTUgIDJEICBIWVBIRU4sIE1JTlVTIFNJR04KLSA0NiAgMDIvMTQgICA1NiAgMkUgIFBF UklPRCwgRlVMTCBTVE9QCi0gNDcgIDAyLzE1ICAgNTcgIDJGICBTT0xJRFVTLCBTTEFTSAotIDQ4 ICAwMy8wMCAgIDYwICAzMCAgRElHSVQgWkVSTwotIDQ5ICAwMy8wMSAgIDYxICAzMSAgRElHSVQg T05FCi0gNTAgIDAzLzAyICAgNjIgIDMyICBESUdJVCBUV08KLSA1MSAgMDMvMDMgICA2MyAgMzMg IERJR0lUIFRIUkVFCi0gNTIgIDAzLzA0ICAgNjQgIDM0ICBESUdJVCBGT1VSCi0gNTMgIDAzLzA1 ICAgNjUgIDM1ICBESUdJVCBGSVZFCi0gNTQgIDAzLzA2ICAgNjYgIDM2ICBESUdJVCBTSVgKLSA1 NSAgMDMvMDcgICA2NyAgMzcgIERJR0lUIFNFVkVOCi0gNTYgIDAzLzA4ICAgNzAgIDM4ICBESUdJ VCBFSUdIVAotIDU3ICAwMy8wOSAgIDcxICAzOSAgRElHSVQgTklORQotIDU4ICAwMy8xMCAgIDcy ICAzQSAgQ09MT04KLSA1OSAgMDMvMTEgICA3MyAgM0IgIFNFTUlDT0xPTgotIDYwICAwMy8xMiAg IDc0ICAzQyAgTEVTUy1USEFOIFNJR04sIExFRlQgQU5HTEUgQlJBQ0tFVAotIDYxICAwMy8xMyAg IDc1ICAzRCAgRVFVQUxTIFNJR04KLSA2MiAgMDMvMTQgICA3NiAgM0UgIEdSRUFURVItVEhBTiBT SUdOLCBSSUdIVCBBTkdMRSBCUkFDS0VUCi0gNjMgIDAzLzE1ICAgNzcgIDNGICBRVUVTVElPTiBN QVJLCi0gNjQgIDA0LzAwICAxMDAgIDQwICBDT01NRVJDSUFMIEFUIFNJR04KLSA2NSAgMDQvMDEg IDEwMSAgNDEgIENBUElUQUwgTEVUVEVSIEEKLSA2NiAgMDQvMDIgIDEwMiAgNDIgIENBUElUQUwg TEVUVEVSIEIKLSA2NyAgMDQvMDMgIDEwMyAgNDMgIENBUElUQUwgTEVUVEVSIEMKLSA2OCAgMDQv MDQgIDEwNCAgNDQgIENBUElUQUwgTEVUVEVSIEQKLSA2OSAgMDQvMDUgIDEwNSAgNDUgIENBUElU QUwgTEVUVEVSIEUKLSA3MCAgMDQvMDYgIDEwNiAgNDYgIENBUElUQUwgTEVUVEVSIEYKLSA3MSAg MDQvMDcgIDEwNyAgNDcgIENBUElUQUwgTEVUVEVSIEcKLSA3MiAgMDQvMDggIDExMCAgNDggIENB UElUQUwgTEVUVEVSIEgKLSA3MyAgMDQvMDkgIDExMSAgNDkgIENBUElUQUwgTEVUVEVSIEkKLSA3 NCAgMDQvMTAgIDExMiAgNEEgIENBUElUQUwgTEVUVEVSIEoKLSA3NSAgMDQvMTEgIDExMyAgNEIg IENBUElUQUwgTEVUVEVSIEsKLSA3NiAgMDQvMTIgIDExNCAgNEMgIENBUElUQUwgTEVUVEVSIEwK LSA3NyAgMDQvMTMgIDExNSAgNEQgIENBUElUQUwgTEVUVEVSIE0KLSA3OCAgMDQvMTQgIDExNiAg NEUgIENBUElUQUwgTEVUVEVSIE4KLSA3OSAgMDQvMTUgIDExNyAgNEYgIENBUElUQUwgTEVUVEVS IE8KLSA4MCAgMDUvMDAgIDEyMCAgNTAgIENBUElUQUwgTEVUVEVSIFAKLSA4MSAgMDUvMDEgIDEy MSAgNTEgIENBUElUQUwgTEVUVEVSIFEKLSA4MiAgMDUvMDIgIDEyMiAgNTIgIENBUElUQUwgTEVU VEVSIFIKLSA4MyAgMDUvMDMgIDEyMyAgNTMgIENBUElUQUwgTEVUVEVSIFMKLSA4NCAgMDUvMDQg IDEyNCAgNTQgIENBUElUQUwgTEVUVEVSIFQKLSA4NSAgMDUvMDUgIDEyNSAgNTUgIENBUElUQUwg TEVUVEVSIFUKLSA4NiAgMDUvMDYgIDEyNiAgNTYgIENBUElUQUwgTEVUVEVSIFYKLSA4NyAgMDUv MDcgIDEyNyAgNTcgIENBUElUQUwgTEVUVEVSIFcKLSA4OCAgMDUvMDggIDEzMCAgNTggIENBUElU QUwgTEVUVEVSIFgKLSA4OSAgMDUvMDkgIDEzMSAgNTkgIENBUElUQUwgTEVUVEVSIFkKLSA5MCAg MDUvMTAgIDEzMiAgNUEgIENBUElUQUwgTEVUVEVSIFoKLSA5MSAgMDUvMTEgIDEzMyAgNUIgIExF RlQgU1FVQVJFIEJSQUNLRVQKLSA5MiAgMDUvMTIgIDEzNCAgNUMgIFJFVkVSU0UgU09MSURVUywg QkFDS1NMQVNICi0gOTMgIDA1LzEzICAxMzUgIDVEICBSSUdIVCBTUVVBUkUgQlJBQ0tFVAotIDk0 ICAwNS8xNCAgMTM2ICA1RSAgQ0lSQ1VNRkxFWCBBQ0NFTlQKLSA5NSAgMDUvMTUgIDEzNyAgNUYg IFVOREVSU0NPUkUKLSA5NiAgMDYvMDAgIDE0MCAgNjAgIEFDQ0VOVCBHUkFWRQotIDk3ICAwNi8w MSAgMTQxICA2MSAgR1JFRUsgTEVUVEVSIEFMUEhBCi0gOTggIDA2LzAyICAxNDIgIDYyICBHUkVF SyBMRVRURVIgQkVUQQotIDk5ICAwNi8wMyAgMTQzICA2MyAgR1JFRUsgTEVUVEVSIEdBTU1BCi0x MDAgIDA2LzA0ICAxNDQgIDY0ICBHUkVFSyBMRVRURVIgREVMVEEKLTEwMSAgMDYvMDUgIDE0NSAg NjUgIEdSRUVLIExFVFRFUiBFUFNJTE9OCi0xMDIgIDA2LzA2ICAxNDYgIDY2ICBHUkVFSyBMRVRU RVIgWkVUQQotMTAzICAwNi8wNyAgMTQ3ICA2NyAgR1JFRUsgTEVUVEVSIEVUQQotMTA0ICAwNi8w OCAgMTUwICA2OCAgR1JFRUsgTEVUVEVSIFRIRVRBCi0xMDUgIDA2LzA5ICAxNTEgIDY5ICBHUkVF SyBMRVRURVIgSU9UQQotMTA2ICAwNi8xMCAgMTUyICA2QSAgR1JFRUsgTEVUVEVSIEtBUFBBCi0x MDcgIDA2LzExICAxNTMgIDZCICBHUkVFSyBMRVRURVIgTEFNREEKLTEwOCAgMDYvMTIgIDE1NCAg NkMgIEdSRUVLIExFVFRFUiBNVQotMTA5ICAwNi8xMyAgMTU1ICA2RCAgR1JFRUsgTEVUVEVSIE5V Ci0xMTAgIDA2LzE0ICAxNTYgIDZFICBHUkVFSyBMRVRURVIgS1NJCi0xMTEgIDA2LzE1ICAxNTcg IDZGICBHUkVFSyBMRVRURVIgT01JQ1JPTgotMTEyICAwNy8wMCAgMTYwICA3MCAgR1JFRUsgTEVU VEVSIFBJCi0xMTMgIDA3LzAxICAxNjEgIDcxICBHUkVFSyBMRVRURVIgUkhPCi0xMTQgIDA3LzAy ICAxNjIgIDcyICBHUkVFSyBMRVRURVIgU0lHTUEKLTExNSAgMDcvMDMgIDE2MyAgNzMgIEdSRUVL IExFVFRFUiBUQVUKLTExNiAgMDcvMDQgIDE2NCAgNzQgIEdSRUVLIExFVFRFUiBVUFNJTE9OCi0x MTcgIDA3LzA1ICAxNjUgIDc1ICBHUkVFSyBMRVRURVIgRkkKLTExOCAgMDcvMDYgIDE2NiAgNzYg IEdSRUVLIExFVFRFUiBYSQotMTE5ICAwNy8wNyAgMTY3ICA3NyAgR1JFRUsgTEVUVEVSIFBTSQot MTIwICAwNy8wOCAgMTcwICA3OCAgR1JFRUsgTEVUVEVSIE9NRUdBCi0xMjEgIDA3LzA5ICAxNzEg IDc5ICBTUEFDRQotMTIyICAwNy8xMCAgMTcyICA3QSAgU1BBQ0UKLTEyMyAgMDcvMTEgIDE3MyAg N0IgIExFRlQgQ1VSTFkgQlJBQ0tFVCwgTEVGVCBCUkFDRQotMTI0ICAwNy8xMiAgMTc0ICA3QyAg VkVSVElDQUwgTElORSwgVkVSVElDQUwgQkFSCi0xMjUgIDA3LzEzICAxNzUgIDdEICBSSUdIVCBD VVJMWSBCUkFDS0VULCBSSUdIVCBCUkFDRQotMTI2ICAwNy8xNCAgMTc2ICA3RSAgVElMREUKLTEy NyAgMDcvMTUgIDE3NyAgN0YgIFJVQk9VVCwgREVMRVRFCi0KLSAgICBJSUkuMS4yLjMuIFBDIENv ZGUgUGFnZSA4NjkKLQotICAgKHRvIGJlIGZpbGxlZCBpbi4uLikKLQotICAgIElJSS4yLiBVcGRh dGVkIENvdW50cnkgQ29kZXMKLQotICAgRGF0ZTogTW9uLCA3IEFwciAxOTk3IDIzOjIzOjQ5IEVE VAotICAgRnJvbTogRGF2ZSBMZWlib2xkIDxkbGVpYm9sZEBlbHNlLm5ldD4KLSAgIE5ld3Nncm91 cHM6IGNvbXAuZGNvbS50ZWxlY29tCi0gICBTdWJqZWN0OiBFeC1VU1NSIENvdW50cnkgQ29kZXMg UHJvZmlsZQotICAgT3JnYW5pemF0aW9uOiBURUxFQ09NIERpZ2VzdAotCi0gICBFeC1VU1NSIENv dW50cnkgQ29kZXMgUHJvZmlsZQotICAgNCBBcHJpbCAxOTk3Ci0KLSAgIEJlbG93IGlzIGEgc3Vt bWFyeSBvZiB0aGUgY291bnRyeSBjb2RlcyB0aGF0IGhhdmUgZm9ybWVkIGluIHRoZSB3YWtlIG9m Ci0gICB0aGUgVVNTUiBkaXNzb2x1dGlvbiwgYWxvbmcgd2l0aCBzb21lIHVwZGF0ZWQgZmluZGlu Z3MgYW5kIHJlcG9ydHMuCi0gICBBZGRpdGlvbmFsIG9yIGNvcnJlY3RlZCBpbmZvcm1hdGlvbiBv biBhbnkgb2YgdGhlc2UgbmF0aW9ucyB3b3VsZCBiZQotICAgd2VsY29tZSAoYy9vIGRsZWlib2xk QGVsc2UubmV0KS4KLSAgICAgKiBLeXJneXogUmVwdWJsaWMgY291bnRyeSBjb2RlIDk5NiB3aWxs IHRha2UgZWZmZWN0LCBhdCBsZWFzdCBpbgotICAgICAgIENhbmFkYSwgZWZmZWN0aXZlIDEgTWF5 IDE5OTcsIGFjY29yZGluZyB0byBDUlRDIFRlbGVjb20gT3JkZXIKLSAgICAgICA5Ny00NjQsIGJh c2VkIG9uIFN0ZW50b3IgVGFyaWZmIE5vdGljZSA0MzMuIFRoZXJlIGlzIG5vIGluZGljYXRpb24K LSAgICAgICB3aGV0aGVyIHRoZXJlIHdpbGwgYmUgYSBwZXJtaXNzaXZlIGRpYWxpbmcgcGVyaW9k IGludm9sdmVkIG9yIGZvcgotICAgICAgIGhvdyBsb25nIHN1Y2ggYSBwZXJtaXNzaXZlIG9wZXJh dGlvbiB3b3VsZCByZW1haW4uCi0gICAgICogQ291bnRyeSBjb2RlIDk5MiB3YXMgcmVwb3J0ZWQg YXMgYSByZWNlbnQgYXNzaWdubWVudCBmb3IKLSAgICAgICBUYWppa2lzdGFuLCB3aGljaCB3aWxs IGJlIG1vdmluZyBmcm9tIGNvdW50cnkgY29kZSA3IGF0IHNvbWUKLSAgICAgICB1bmtub3duIHRp bWUuCi0gICAgICogVXpiZWtpc3RhbiBoYXMgaXRzIG93biBjb3VudHJ5IGNvZGUgYXNzaWdubWVu dCwgYnV0IEkgaGF2ZSBubwotICAgICAgIGluZm9ybWF0aW9uIGlmIHRoaXMgaXMgaW4gc2Vydmlj ZSB5ZXQgb3Igd2hhdCBpbXBsZW1lbnRhdGlvbiBkYXRlcwotICAgICAgIGhhdmUgYmVlbiBzZXQu Ci0gICAgICogS2F6YWtzdGFuIGRvZXMgbm90IGhhdmUgYSBrbm93biBzZXBhcmF0ZSBjb3VudHJ5 IGNvZGUgYXNzaWdubWVudCBhdAotICAgICAgIHByZXNlbnQuIEl0IHJlbWFpbnMgaW4gY291bnRy eSBjb2RlIDcgZm9yIHRoZSB0aW1lIGJlaW5nLgotICAgICAqIFJ1c3NpYSBzZWVtcyBkZXN0aW5l ZCB0byBrZWVwIGNvdW50cnkgY29kZSA3LgotICAgICAqIFJlY2VudCBuZXdzIHJlcG9ydHMgc3Bl YWsgb2Ygc29tZSBhZ3JlZW1lbnRzIGZvcm1pbmcgYmV0d2VlbiBSdXNzaWEKLSAgICAgICBhbmQg QmVsYXJ1cy4gV2hpbGUgdGhlcmUgaXMgbm8gb3V0cmlnaHQgcmV1bmlmaWNhdGlvbiB5ZXQsIHRo ZXJlIGlzCi0gICAgICAgZXhwZWN0ZWQgdG8gYmUgbXVjaCBjbG9zZXIgdGllcyBiZXR3ZWVuIHRo ZSB0d28gbmF0aW9ucy4gV2hldGhlcgotICAgICAgIHRoaXMgd2lsbCBsZWFkIHRvIGEgcmV1bmlm aWNhdGlvbiBvZiB0ZWxlcGhvbmUgY29kZXMgcmVtYWlucyB0byBiZQotICAgICAgIHNlZW4uCi0K LSAgIEluIHRoZSB0YWJsZSwgIkVmZmVjdGl2ZSIgbWVhbnMgdGhlIGRhdGUgYXQgd2hpY2ggdGhl IGNvdW50cnkgY29kZQotICAgYmVnYW4gc2VydmljZSAod2hpY2ggY291bGQgdmFyeSBhY2NvcmRp bmcgdG8gdGhlIG5hdGlvbikuICJNYW5kYXRvcnkiCi0gICBtZWFucyB0aGUgZGF0ZSBhdCB3aGlj aCB0aGUgY291bnRyeSBjb2RlIDcgaXMgaW52YWxpZCBmb3IgY2FsbHMgdG8gdGhhdAotICAgbmF0 aW9uLiBUaGVyZSBhcmUgYSBudW1iZXIgb2YgcXVlc3Rpb24gbWFya3Mgc2luY2UgZXhhY3QgZGF0 ZXMgaGF2ZSBub3QKLSAgIGJlZW4gY29sbGVjdGVkIGluIGFsbCBjYXNlcy4KLQotQ0MgIE5hdGlv biAgICAgICAgICAgIEVmZmVjdGl2ZSAgICAgTWFuZGF0b3J5ICAgIE5vdGVzCi0KLTM3MCBMaXRo dWFuaWEgICAgICAgICAxOTkzPyAgICAgICAgID8/PyAgICAgICAgICBBbm5vdW5jZWQgSmFuIDE5 OTMKLTM3MSBMYXR2aWEgICAgICAgICAgICAxOTkzPyAgICAgICAgID8/PwotMzcyIEVzdG9uaWEg ICAgICAgICAgIDEgRmViIDE5OTM/ICAgTWFyY2ggMTk5Mz8KLTM3MyBNb2xkb3ZhICAgICAgICAg ICAxOTkzPyAgICAgICAgID8/PyAgICAgICAgICBBbm5vdW5jZWQgSmFuIDE5OTMKLTM3NCBBcm1l bmlhICAgICAgICAgICAxIE1heSAxOTk1ICAgIDEgSnVseSAxOTk1ICBBbm5vdW5jZWQgSmFuIDE5 OTUgKElUVSkKLTM3NSBCZWxhcnVzICAgICAgICAgICAxNiBBcHIgMTk5NSAgIDE5OTc/Ci0zODAg VWtyYWluZSAgICAgICAgICAgMTYgQXByIDE5OTUgICBPY3QgMTk5NT8KLTcgICBLYXpha3N0YW4g ICAgICAgICAobm8ga25vd24gY2hhbmdlcykKLTcgICBSdXNzaWEgICAgICAgICAgICAocHJlc3Vt YWJseSBub3QgY2hhbmdpbmcpCi05OTIgVGFqaWtpc3RhbiAgICAgICAgPz8/ICAgICAgICAgICA/ Pz8gICAgICAgICAgQW5ub3VuY2VkIDE5OTYtNz8KLTk5MyBUdXJrbWVuaXN0YW4gICAgICAzIEph biAxOTk3ICAgIDMgQXByIDE5OTcgICBDYW5hZGEgYXMgb2YgMjkgTm92IDE5OTYKLTk5NCBBemVy YmFpamFuICAgICAgICBTZXB0IDE5OTQ/ICAgID8/PyAgICAgICAgICBBbm5vdW5jZWQgMTk5Mgot OTk1IEdlb3JnaWEgICAgICAgICAgIDE5OTQ/ICAgICAgICAgPz8/ICAgICAgICAgIHJlZjogVGVs ZWNvbSBEaWdlc3QgT2N0IDE5OTQKLTk5NiBLeXJneXogUmVwdWJsaWMgICAxIE1heSAxOTk3ICAg ID8/PyAgICAgICAgICByZWY6IFN0ZW50b3IgQ2FuYWRhL0NSVEMKLTk5OCBVemJla2lzdGFuICAg ICAgICA/Pz8gICAgICAgICAgID8/PyAgICAgICAgICBBbm5vdW5jZWQgMTk5Nj8gKElUVSkKLQot ICAgRGV0YWlscyBjb3VydGVzeSBUb2J5IE5peG9uLCBJVFUsIFN0ZW50b3IgKENhbmFkYSksIENS VEMgKENhbmFkYSksCi0gICBURUxFQ09NIERpZ2VzdCAoaW5jbHVkaW5nIGluZm9ybWF0aW9uIGNv bGxlY3RlZCBmb3IgdGhlIGNvdW50cnkgY29kZQotICAgbGlzdGluZ3MpLgotCi1JVi4gRVJSQVRB ICYgQ09SUklHRU5EQQotCi0gICBUaGUgZm9sbG93aW5nIGVycm9ycyBpbiBbNjQ5XVVzaW5nIEMt S2VybWl0LCBTZWNvbmQgRWRpdGlvbiwgZmlyc3QKLSAgIHByaW50aW5nLCBoYXZlIGJlZW4gbm90 ZWQuCi0KLSAgIEZpcnN0LCBzb21lIG1pc3NpbmcgYWNrbm93bGVkZ2VtZW50cyBmb3IgQy1LZXJt aXQgNi4wOiBKRSBKb25lcyBvZgotICAgTWljcm93YXJlIGZvciBoZWxwIHdpdGggT1MtOSwgTmln ZWwgUm9sZXMgZm9yIGhpcyBoZWxwIHdpdGggUGxhbiA5LAotICAgTHVjYXMgSGFydCBmb3IgaGVs cCB3aXRoIFZNUyBhbmQgRGlnaXRhbCBVTklYLCBJZ29yIEtvdmFsZW5rbyBmb3IgaGlzCi0gICBo ZWxwIHdpdGggUU5YLiBBbmQgbGF0ZXIsIHRvIFN1c2FuIEtsZWlubWFubiBmb3IgaGVyIGhlbHAg d2l0aCBEZWJpYW4KLSAgIExpbnV4IHBhY2thZ2luZzsgUGF0cmljayBWb2xrZXJkaW5nIGZvciBo aXMgaGVscCB3aXRoIFNsYWNrd2FyZSBMaW51eAotICAgcGFja2FnaW5nOyBKaW0gS25vYmxlIGZv ciBoaXMgaGVscCB3aXRoIFJlZCBIYXQgTGludXggcGFja2FnaW5nOyBhbmQgdG8KLSAgIGRvemVu cyBvZiBvdGhlcnMgZm9yIHNlbmRpbmcgaW5kaXZpZHVhbCBDLUtlcm1pdCBiaW5hcmllcyBmb3Ig dmFyaWVkCi0gICBhbmQgZGl2ZXJzZSBwbGF0Zm9ybXMuCi0KLSAgIFRoYW5rcyB0byBKYW1lcyBT cGF0aCBmb3IgYm90aCBiaW5hcmllcyBhbmQgcmVwb3J0aW5nIG1hbnkgb2YgdGhlIHR5cG9zCi0g ICBub3RlZCBiZWxvdy4gQWxzbyB0byBEYXQgVGh1YyBOZ3V5ZW4gZm9yIHNwb3R0aW5nIHNldmVy YWwgdHlwb3MuCi0KLVBBR0UgICAgUkVNQVJLUwotQ09WRVIgICAiQ09TIiBpcyBhIG1pc3ByaW50 LiAgVGhlcmUgaXMgbm8gQ09TLiAgUHJldGVuZCBpdCBzYXlzICJTQ08iIG9yICJWT1MiLgotICAg ICAgICAoVGhpcyBpcyBmaXhlZCBpbiB0aGUgc2Vjb25kIHByaW50aW5nLikKLSB4eGkgICAgU2Vj b25kIGxpbmU6IEZyZWQgU21pdGgncyBhZmZpbGlhdGlvbiBzaG91bGQgYmUgQ29tcHV0cml0aW9u LgotIDgzICAgICBDaGFuZ2UgImNvbW1hbmRzIG90aGVyIiB0byAiY29tbWFuZHMgYXMgb3RoZXIi ICgxc3QgcGFyYWdyYXBoKQotIDg3ICAgICBDaGFuZ2UgIlRoZSB0aGUiIHRvICJUaGUiICgybmQg cGFyYWdyYXBoKQotIDkyICAgICAic2V0IG1vZGVtLXR5cGUgdXNlci1kZWZpbmVkIHN1cHJhIiBz aG91bGQgYmUgInNldCBtb2RlbSB0eXBlIC4uLiIKLSA5NSAgICAgQ2hhbmdlICJWSSIgdG8gInZp IiAoMXN0IHBhcmFncmFwaCkKLSA5NiAgICAgQ2hhbmdlICJpdCBpdCIgdG8gIml0IGlzIiAoMXN0 IHBhcmFncmFwaCkKLSA5NyAgICAgQ2hhbmdlICJhZHZhbnRhZ2UgYSBsaXRlcmFsIiB0byAiYWR2 YW50YWdlIG9mIGEgbGl0ZXJhbCIgKDJuZAotICAgICAgICBwYXJhZ3JhcGgpCi0xMDIgICAgIFRo ZSBjYWxsLXdhaXRpbmcgZXhhbXBsZSB3b3VsZCBiZSBiZXR0ZXIgYXMgU0VUIERJQUwgUFJFRklY ICo3MFcKLSAgICAgICAgKHJhdGhlciB0aGFuICIqNzAsIikgYmVjYXVzZSB0aGUgZm9ybWVyIHdp bGwgbm90IGNhdXNlIGFuIGluY29ycmVjdAotICAgICAgICBjYWxsIHRvIGJlIHBsYWNlZCB3aXRo IHB1bHNlIGRpYWxpbmcuCi0xMjMgICAgIFRoaXJkIHBhcmFncmFwaCBmcm9tIGJvdHRvbTogIi4u b3RoZXJ3aXNlIGlmIGEgeW91ciBsb2NhbCB1c2VybmFtZS4uIgotICAgICAgICBzaG91bGQgYmUg Ii4ub3RoZXJ3aXNlIHlvdXIgbG9jYWwgdXNlcm5hbWUuLiIuCi0xNjAgICAgIERlbGV0ZSB0aGUg Iml0IiBiZXR3ZWVuICJhbmQiIGFuZCAidG8iICgybmQgcGFyYWdyYXBoKQotMTg1ICAgICBJbiAi V2hlbiBUUkFOU0ZFUiBESVNQTEFZIGlzIE9GRiwgQy1LZXJtaXQgc2tpcHMgdGhlIGRpc3BsYXku Li4iLAotICAgICAgICAiT0ZGIiBzaG91bGQgYmUgIk5PTkUiLgotMTg3ICAgICBUaGUgbGFzdCBw YXJhZ3JhcGggc2F5cyB0aGUgIkEgY29tbWFuZCIgaXMgaWdub3JlZCwgc2hvdWxkIGJlICJTIi4K LTE5NCAgICAgQ2hhbmdlICJpdCBrbm93biIgdG8gIml0IGlzIGtub3duIiAoNHRoIHBhcmFncmFw aCkuCi0yMzUgICAgIEluIEMtS2VybWl0IDcuMCwgdGhlIHN5bnRheCBvZiB0aGUgR0VUIGNvbW1h bmQgY2hhbmdlZC4gIE1HRVQgbm93Ci0gICAgICAgIG11c3QgYmUgdXNlZCB0byBnZXQgYSBsaXN0 IG9mIGZpbGVzIGFuZCB0aGVyZSBpcyBubyBtb3JlIG11bHRpbGluZQotICAgICAgICBHRVQgY29t bWFuZC4KLTI2OCAgICAgTGFzdCBwYXJhZ3JhcGg6ICJlZmZlY3QiIHNob3VsZCBiZSAiYWZmZWN0 Ii4KLTI3NSAgICAgSW4gdGhlIFNFVCBQUk9UT0NPTCBLRVJNSVQgZGVzY3JpcHRpb24sIHRoZSBm b2xsb3dpbmcgc2VudGVuY2UgaXMKLSAgICAgICAgaW5jb3JyZWN0IGFuZCBzaG91bGQgYmUgcmVt b3ZlZDogJ0lmIHlvdSBvbWl0IHRoZSBjb21tYW5kcywgdGhlCi0gICAgICAgIGRlZmF1bHQgb25l cyBhcmUgcmVzdG9yZWQ6ICJrZXJtaXQgLWlyIiBhbmQgImtlcm1pdCAtciIgcmVzcGVjdGl2ZWx5 Ii4KLSAgICAgICAgVGhlIGNvcnJlY3QgaW5mb3JtYXRpb24gaXMgZ2l2ZW4gYXQgdGhlIGJvdHRv bSBvZiBwYWdlIDI4MS4KLTI3OSAgICAgOXRoIGxpbmUuICBUaGUgZGVjaW1hbCB2YWx1ZSBvZiBT VCBpcyAxNTYsIG5vdCAxNTUuCi0yOTUgICAgIEluIHRoZSBzdGVwcGluZyBzdG9uZXMsIHNraXAg YWhlYWQgdG8gQ2hhcHRlciAxNyBvbiBwLiAzMjcuCi0yOTggICAgIFRhYmxlIDE2LTIsIFBvcnR1 Z3Vlc2UgZW50cnkuICBDb2x1bW4gNC8wMCBzaG91bGQgc2hvdyBzZWN0aW9uIHNpZ24sCi0gICAg ICAgIG5vdCBhY3V0ZSBhY2NlbnQuCi0zMTYgICAgIE90aGVyIGxhbmd1YWdlcyB3cml0dGVuIGlu IHRoZSBIZWJyZXcgYWxwaGFiZXQgaW5jbHVkZSBLYXJhaW0gKGEgVHVya2ljCi0gICAgICAgIGxh bmd1YWdlIHNwb2tlbiBpbiBMaXRodWFuaWEgYW5kIFBvbGFuZCksIEp1ZGVvLUt1cmRpc2gsIGFu ZCBKdWRlby0KLSAgICAgICAgR2VvcmdpYW4uCi0zMzIgICAgIFVOREVGSU5FIGRlZmluaXRpb24s IGNoYW5nZSAiVGhpcyBqdXN0IiB0byAiVGhpcyBpcyBqdXN0Ii4KLTM0NCAgICAgSXQgbWlnaHQg YmUgbmVjZXNzYXJ5IHRvIHNldCB0aGUgbW9kZW0ncyBwdWxzZSBnZW5lcmF0aW9uIHJhdGUgd2hl bgotICAgICAgICBzZW5kaW5nIG51bWVyaWMgcGFnZXM7IG1vc3QgSGF5ZXMgY29tcGF0aWJsZSBt b2RlbXMgdXNlIHRoZSBTMTEKLSAgICAgICAgcmVnaXN0ZXIgZm9yIHRoaXMuCi0zNTAgICAgIERl bGV0ZSAiaXMiIGZyb20gYmV0d2VlbiAiSXQiIGFuZCAiY2Vhc2VzIiAoNHRoIHBhcmFncmFwaCkK LTM1MSAgICAgVG9wIC0gYm90aCBvY2N1cnJlbmNlcyBvZiAicHJpbnQgXCVhIiBzaG91bGQgYmUg ImVjaG8gXCVhIi4KLTM2NCAgICAgXHYoaW5wdXQpIGFuZCBcdihxdWVyeSkgb3V0IG9mIGFscGhh YmV0aWNhbCBvcmRlci4KLTM3OCAgICAgSW4gdGhlIE1ZU0VORCBtYWNybywgImlmIG5vdCBcbShy YykgZ290byBiYWQiIHNob3VsZCBiZToKLSAgICAgICAgImlmIFxtKHJjKSBnb3RvIGJhZCIgKHJl bW92ZSB0aGUgIm5vdCIpLgotMzgyLTM4MyBJdCBzaG91bGQgYmUgc3RhdGVkIHRoYXQgdGhlIGxv b3AgY29udHJvbCB2YXJpYWJsZSBtdXN0IGJlIG9mIHRoZSBcJWEKLSAgICAgICAgdHlwZSwgb3Ig ZWxzZSBhbiBhcnJheSBlbGVtZW50OyBtYWNybyBuYW1lcyBjYW4gbm90IGJlIHVzZWQgZm9yIHRo aXMuCi0zODMgICAgIEluIGxpbmUgMywgIlwlZltcJWldIiBzaG91bGQgYmUgIlwmZltcJWldIi4K LTM4MyAgICAgSW4gdGhlIHNvcnQgZXhhbXBsZSwgaXQgc2hvdWxkIGJlIHN0YXRlZCB0aGF0IHRo ZSBhcnJheSBpcyAxLWJhc2VkLgotMzg3ICAgICBDaGFuZ2UgIllvdSBjYW4gbGlzdCIgdG8gIllv dSBjYW4gZ2V0IGEgbGlzdCIgKDV0aCBwYXJhZ3JhcGgpCi0zOTMgICAgIFxGdmVyaWZ5KCkgZGVz Y3JpcHRpb24uICBUaGUgM3JkIHNlbnRlbmNlIGNvdWxkIGJlIHN0YXRlZCBtb3JlIGNsZWFybHkK LSAgICAgICAgYXMgIklmIGFsbCBjaGFyYWN0ZXJzIGluIHN0cmluZzIgYXJlIGFsc28gaW4gc3Ry aW5nMSwgMCBpcyByZXR1cm5lZC4iCi0zOTggICAgIENvcHlpbmcgXGZmaWxlcygpIHJlc3VsdHMg dG8gYW4gYXJyYXkgYmVmb3JlIGlzIG5vdCByZXF1aXJlZCBhcyBvZgotICAgICAgICBDLUtlcm1p dCA3LjAgKHNlZSBbNjUwXVNlY3Rpb24gNy4zKS4KLTQwMyAgICAgSW4gIihcJWEgKyAzKSAqIChc JWIgIDUpIiwgYSBtaW51cyBzaWduIGlzIG1pc3NpbmcgYmV0d2VlbiBiIGFuZCA1LgotNDA3ICAg ICBDLUtlcm1pdCA3LjAgbm8gbG9uZ2VyIHN1cHBvcnRzIG11bHRpbGluZSBHRVQuICBDaGFuZ2UK LSAgICAgICAgImdldCwgXCUxLCBcJTIiIHRvICJnZXQge1wlMX0ge1wlMn0iIG9yICJnZXQgL2Fz OntcJTJ9IHtcJTF9Ii4KLTQwOSAgICAgUkVBRCBleGFtcGxlIHdoaWxlIGxvb3Agc2hvdWxkIGJl OgotICAgICAgICB3aGlsZSBzdWNjZXNzIHsgZWNobyBcbShsaW5lKSwgcmVhZCBsaW5lIH0KLTQw OSAgICAgIldSSVRFIGZpbGUiIHNob3VsZCBiZSAiV1JJVEUga2V5d29yZCIgKHlvdSBjYW4ndCBw dXQgYSBmaWxlbmFtZSB0aGVyZSkKLSAgICAgICAgKFRoZSBzYW1lIGFwcGxpZXMgdG8gV1JJVEUt TElORSAvIFdSSVRFTE4pLgotNDE0ICAgICBcRnVuaGV4aWZ5KCkgbWlzc2luZyBmcm9tIFRhYmxl IDE4LTMuCi00MjUgICAgIE1JTlBVVCBkZWZpbml0aW9uLCBjaGFuZ2UgMm5kICJ0ZXh0MiIgdG8g InRleHQzIi4KLTQzNiAgICAgU2V2ZXJhbCBsaW5lcyBhcmUgbWlzc2luZyBmcm9tIHRoZSBVTklY TE9HSU4gbWFjcm8gbGlzdGluZy4KLSAgICAgICAgQWZ0ZXIgdGhlICJ4aWYgZmFpbCIgYmxvY2ss IGluc2VydDoKLQotICAgICAgICAgIG91dCBcJTFcMTMgICAgICAgICAgICAgICAgICAgIDsgU2Vu ZCB1c2VybmFtZSwgY2FycmlhZ2UgcmV0dXJuCi0gICAgICAgICAgaW5wIDUgUGFzc3dvcmQ6ICAg ICAgICAgICAgICAgOyBXYWl0IDUgc2VjIGZvciB0aGlzIHByb21wdAotICAgICAgICAgIGlmIGZh aWwgZW5kIDEgTm8gcGFzc3dvcmQgcHJvbXB0Ci0gICAgICAgICAgcGF1c2UgICAgICAgICAgICAg ICAgICAgICAgICAgOyBXYWl0IGEgc2VjCi0gICAgICAgICAgb3V0IFwlMlwxMyAgICAgICAgICAg ICAgICAgICAgOyBTZW5kIHBhc3N3b3JkCi0KLTQ0MCAgICAgQ2hhbmdlICJzZXQgdGVybWluYWwg Ynl0ZXN6aWUiIHRvICJzZXQgdGVybWluYWwgYnl0ZXNpemUiLgotICAgICAgICBDaGFuZ2UgImlu cHV0IFBhc3N3b3JkOiIgdG8gImlucHV0IDEwIFBhc3N3b3JkIi4KLTQ0OCAgICAgRnJhbmNoaXNl IHNjcmlwdDogImFjY2VzcyBsaW5lIiBzaG91bGQgYmUgImFjY2VzcyBcbShsaW5lKSIuCi00NTMg ICAgIFRoZXJlIGFyZSB0d28gaW5jb3JyZWN0bHkgY29kZWQgSUYgc3RhdGVtZW50cyBpbiB0aGUg REVMSVZFUiBtYWNybwotICAgICAgICBkZWZpbml0aW9uLiAgUmVwbGFjZSBib3RoIG9jY3VycmVu Y2VzIG9mICJpZiA+IFwlMSBcJTMgeyIgd2l0aAotICAgICAgICAieGlmID4gXCVpIFwlMyB7IiAo cmVwbGFjZSAiaWYiIGJ5ICJ4aWYiIGFuZCAiXCUxIiB3aXRoICJcJWkiKS4KLTQ1MyAgICAgInRo ZSB0aGUiIChsYXN0IHBhcmFncmFwaCkgc2hvdWxkIGJlICJ0aGUiLgotNDU0ICAgICBFT1QgKGxh c3QgcGFyYWdyYXBoKSBpcyBFbmQgb2YgVHJhbnNtaXNzaW9uLCBub3QgRW5kIG9mIFRleHQuCi00 NTcgICAgIF9ERUZJTkUgZGVmaW5pdGlvbjogIm5hbWUgY29uc3RydWN0ZWQiIHNob3VsZCBiZSAi bmFtZSBpcyBjb25zdHJ1Y3RlZCIuCi00NTcgICAgICJtYWNybyBmb3IgYW5kIiAobGFzdCBwYXJh Z3JhcGgpIHNob3VsZCBiZSAibWFjcm8gYW5kIi4KLTQ1OSAgICAgU2hvdWxkIGV4cGxhaW4gdGhh dCBcdih1c2VyKSBpcyBhIGxlZ2FsIGFiYnJldmlhdGlvbiBvZiBcdih1c2VyaWQpLgotNDgwICAg ICBGaWd1cmUgSUktMiBpcyBiYWNrd2FyZHM7IHRoZSBsZWFzdC1zaWduaWZpY2FudCBiaXQgaXMg dHJhbnNtaXR0ZWQKLSAgICAgICAgZmlyc3QsIHRoZW4gdXAgdG8gdGhlIGhpZ2hlc3QsIGFuZCB0 aGUgcGFyaXR5IGJpdCBsYXN0LgotNTM0ICAgICBUaGUgVk1TIEFwcGVuZGl4IHNlY3Rpb24gb24g T2RkIFJlY29yZCBMZW5ndGhzIG5vIGxvbmdlciBhcHBsaWVzOwotICAgICAgICBDLUtlcm1pdCA3 LjAgaGFuZGxlcyBvZGQgcmVjb3JkIGxlbmd0aHMgYXMgd2VsbCBhcyBldmVuIG9uZXMuCi01NTkg ICAgIFRhYmxlIFZJSUktMywgUG9ydHVndWVzZSBlbnRyeS4gIENvbHVtbiA0LzAwIHNob3VsZCBz aG93IHNlY3Rpb24gc2lnbiwKLSAgICAgICAgbm90IGFjdXRlIGFjY2VudC4KLTU2MC01NjMgSFAt Um9tYW44IG1pc3NpbmcgZnJvbSBUYWJsZSBWSUktNDsgdGhlcmUgd2Fzbid0IHJvb20gdG8gc3F1 ZWV6ZSBpdCBpbi4KLSAgICAgICAgSXQgaXMgbGlzdGVkIGluIHNlY3Rpb24gSUkoNikuCi01NjUg ICAgICJkIHN0cm9rZSIgaW4gVGFibGUgVklJLTUgaGFzIHRoZSB3cm9uZyBhcHBlYXJhbmNlOyB0 aGUgc3RlbSBzaG91bGQKLSAgICAgICAgYmUgdXByaWdodC4gIFRoZSBsZXR0ZXIgc2hvd24gaW4g dGhlIHRhYmxlIGlzIGFjdHVhbGx5IGEgbG93ZXJjYXNlCi0gICAgICAgIEljZWxhbmRpYyBldGgs IHdoaWNoIGhhcyBhIGN1cnZlZCBzdGVtLgotNjAxLTYwNCBCZUJveCwgQmVPUywgUGxhbiA5LCBh bmQgcHJvYmFibHkgb3RoZXJzIG5vdCBsaXN0ZWQgaW4gdHJhZGVtYXJrcy4KLTYwNCAgICAgVGhl IHdvcmRzICJTQ1JJQkUgVEVYVCBGT1JNQVRURVIiIGFwcGVhciBhdCB0aGUgZW5kIG9mIHRoZSBs YXN0Ci0gICAgICAgIHNlbnRlbmNlIG9mIHRoZSBmaXJzdCBwYXJhZ3JhcGggb2YgdGhlIENvbG9w aG9uLiAgVGhleSBzaG91bGQgaGF2ZQotICAgICAgICBiZWVuIGluIHRoZSBJbmRleC4KLUluZGV4 OiAgTWlzc2luZyBlbnRyaWVzOiBTRVQgeyBTRU5ELCBSRUNFSVZFIH0gUEFUSE5BTUVTLCBDYWxs IHdhaXRpbmcsIC4uLgotICAgICAgICBcRigpICAgICAgICAgICAgUGFnZSA2MDUsIGFkZCBhbHNv IDQxMy00MTQKLSAgICAgICAgXEZicmVhayAgICAgICAgIDM4OQotICAgICAgICBcRmNhcGl0YWxp emUgICAgMzkwCi0gICAgICAgIFxGY2hlY2tzdW0gICAgICA0MTQKLSAgICAgICAgXEZjcmMxNiAg ICAgICAgIDQxNAotICAgICAgICBcRmV4ZWN1dGUgICAgICAgNDE0Ci0gICAgICAgIFxGaGV4aWZ5 ICAgICAgICAzOTAKLSAgICAgICAgXEZsdHJpbSAgICAgICAgIDM5MQotICAgICAgICBcRnJlcGVh dCAgICAgICAgMzkyCi0gICAgICAgIFxGc3Bhd24gICAgICAgICAzOTIKLSAgICAgICAgXEZ0b2Qy c2VjcyAgICAgIDM5OQotICAgICAgICBcdigpIGJ1aWx0X2luICAgUGFnZSA2MDYsIGFkZCBhbHNv IDM2MS0zNjQKLSAgICAgICAgXHYoX2xpbmUpICAgICAgIDM1NCwgMzYxCi0gICAgICAgIFx2KGFw Y2FjdGl2ZSkgICAzNjEKLSAgICAgICAgXHYoY2hhcnNldCkgICAgIDM2MgotICAgICAgICBcdihj cHUpICAgICAgICAgMzYyCi0gICAgICAgIFx2KGNyYzE2KSAgICAgICAzNTcsIDM2MgotICAgICAg ICBcdihkJHh4eCkgICAgICAgYWRkIHBhZ2UgMzYyCi0gICAgICAgIFx2KGRpYWxudW1iZXIpICAz NjIKLSAgICAgICAgXHYoZGlhbHJlc3VsdCkgIDM2MgotICAgICAgICBcdihlcnJubykgICAgICAg MzYyCi0gICAgICAgIFx2KGVycnN0cmluZykgICAzNjIKLSAgICAgICAgXHYoZXhlZGlyKSAgICAg IDM2MgotICAgICAgICBcdihpbmlkaXIpICAgICAgMzYzCi0gICAgICAgIFx2KGlwYWRkcmVzcykg ICAzNjMKLSAgICAgICAgXHYoa2V5Ym9hcmQpICAgIDM2MwotICAgICAgICBcdihtYWNybykgICAg ICAgMzYzCi0gICAgICAgIFx2KG1pbnB1dCkgICAgICAzNjMKLSAgICAgICAgXHYobV94eHgpICAg ICAgIDk0LCAzNjMKLSAgICAgICAgXHYocGFzc3dvcmQpICAgIDM2NAotICAgICAgICBcdihxdWVy eSkgICAgICAgMzY0Ci0gICAgICAgIFx2KHByb21wdCkgICAgICAzNjQKLSAgICAgICAgXHYoc3Bl ZWQpICAgICAgIDM1NiwgMzY0Ci0gICAgICAgIFx2KHN0YXJ0dXApICAgICAzNjQKLSAgICAgICAg XHYoc3RhdHVzKSAgICAgIDM2NAotICAgICAgICBcdihzeXNpZCkgICAgICAgMzY0Ci0gICAgICAg IFx2KHN5c3RlbSkgICAgICAzNjQKLSAgICAgICAgXHYoZnNpemUpICAgICAgIGF0IGxvd2VyIGhh bGYgcGFnZSA2MDYgc2hvdWxkIHJlYWQgXHYodGZzaXplKQotICAgICAgICBcdih4dmVyc2lvbikg ICAgMzY0Ci0gICAgICAgIEJFRVAgQ29tbWFuZCAgICA0MAotICAgICAgICBTRVQgRkxPVyAgICAg ICAgNjIsIDIxMgotCi0gICBGaWd1cmUgSUktNSBvbiBwYWdlIDQ5My4gVGhlIHBpbiBhc3NpZ25t ZW50cyBvZiB0aGUgTWluaSBEaW4tOAotICAgY29ubmVjdG9yIGFyZSBub3QgZGVzY3JpYmVkIGFu eXdoZXJlLiBBcyBub3RlZCBpbiB0aGUgdGV4dCwgdGhlc2UgdGVuZAotICAgdG8gdmFyeSBmcm9t IHZlbmRvciB0byB2ZW5kb3IuIE9uZSBjb21tb24gYXJyYW5nZW1lbnQgaXM6Ci0KLSAgMS4gSFNL b3V0IChIYW5kc2hha2Ugb3V0IC0tIGRlZmluaXRpb24gZGVwZW5kcyBvbiBzb2Z0d2FyZSkKLSAg Mi4gSFNLaW4gIChIYW5kc2hha2UgaW4gb3IgZXh0ZXJuYWwgY2xvY2spCi0gIDMuIFR4RC0KLSAg NC4gTm90IHVzZWQKLSAgNS4gUnhELQotICA2LiBUeEQrCi0gIDcuIE5vdCB1c2VkCi0gIDguIFJ4 RCsKLQotICAgTm90ZSB0aGUgImJhbGFuY2VkIHBhaXJzIiBmb3IgUmVjZWl2ZSBEYXRhIChSeEQp IGFuZCBUcmFuc21pdCBEYXRhCi0gICAoVHhEKSwgYW5kIHRoZSB1dHRlciBsYWNrIG9mIG1vZGVt IHNpZ25hbHMuIFRoZXNlIGNvbm5lY3RvcnMgZm9sbG93IHRoZQotICAgUlMtNDIzIHN0YW5kYXJk LCByYXRoZXIgdGhhbiBSUy0yMzIuIEluIHNvbWUgYXJyYW5nZW1lbnRzLCBQaW4gMSBpcwotICAg dXNlZCBmb3IgRFRSIGFuZCBQaW4gMiBmb3IgQ0Q7IGluIG90aGVycyBQaW4gMSBpcyBSVFMgYW5k IFBpbiAyIGlzIENUUy4KLQotICAgUGxlYXNlIHNlbmQgcmVwb3J0cyBvZiBvdGhlciBlcnJvcnMg dG8gdGhlIGF1dGhvcnMsIGFzIHdlbGwgYXMKLSAgIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVu dHMsIGFkZGl0aW9uYWwgaW5kZXggZW50cmllcywgYW5kIGFueSBvdGhlcgotICAgY29tbWVudHM6 Ci0KLSAgIFs2NTFda2VybWl0QGNvbHVtYmlhLmVkdQotCi1BUFBFTkRJWCBWLiBBRERJVElPTkFM IENPUFlSSUdIVCBOT1RJQ0VTCi0KLSAgIFRoZSBmb2xsb3dpbmcgY29weXJpZ2h0cyBjb3ZlciBz b21lIG9mIHRoZSBzb3VyY2UgY29kZSB1c2VkIGluIHRoZQotICAgZGV2ZWxvcG1lbnQgb2YgQy1L ZXJtaXQsIEtlcm1pdCA5NSwgb3IgS2VybWl0IDk1IHN1cHBvcnQgbGlicmFyaWVzLgotCi0vKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAg ICAgQ29weXJpZ2h0IChjKSAxOTk1IGJ5IE95IE9ubGluZSBTb2x1dGlvbnMgTHRkLiAgICAgICAg ICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgIERpc3RyaWJ1dGlvbiBvZiB0 aGlzIHNvdXJjZSBjb2RlIGlzIHN0cmljdGx5IGZvcmJpZGRlbi4gVXNlIG9mIHRoaXMgICAgKi8K LS8qICAgc291cmNlIGNvZGUgaXMgZ3JhbnRlZCB0byB0aGUgVW5pdmVyc2l0eSBvZiBDb2x1bWJp YSBDLUtlcm1pdCBwcm9qZWN0ICAgKi8KLS8qICAgdG8gYmUgZGlzdHJpYnV0ZWQgaW4gYmluYXJ5 IGZvcm1hdCBvbmx5LiBQbGVhc2UgZmFtaWxpYXJpemUgeW91cnNlbGYgICAgKi8KLS8qICAgd2l0 aCB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UuUCBmaWxlLiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KLQotICAgdXNlZCBmb3IgWG1vZGVtLCBZbW9kZW0sIGFuZCBabW9kZW0gcHJvdG9jb2wg aW4gS2VybWl0IDk1IChwOTUuZGxsLAotICAgcDIuZGxsKQotCi0gICBDb3B5cmlnaHQgKGMpIDE5 OTcgU3RhbmZvcmQgVW5pdmVyc2l0eQotCi0gICBUaGUgdXNlIG9mIHRoaXMgc29mdHdhcmUgZm9y IHJldmVudWUtZ2VuZXJhdGluZyBwdXJwb3NlcyBtYXkgcmVxdWlyZSBhCi0gICBsaWNlbnNlIGZy b20gdGhlIG93bmVycyBvZiB0aGUgdW5kZXJseWluZyBpbnRlbGxlY3R1YWwgcHJvcGVydHkuCi0g ICBTcGVjaWZpY2FsbHksIHRoZSBTUlAtMyBwcm90b2NvbCBtYXkgbm90IGJlIHVzZWQgZm9yIHJl dmVudWUtZ2VuZXJhdGluZwotICAgcHVycG9zZXMgd2l0aG91dCBhIGxpY2Vuc2UuCi0KLSAgIFdp dGhpbiB0aGF0IGNvbnN0cmFpbnQsIHBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFu ZCBkaXN0cmlidXRlCi0gICB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3Ig YW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQKLSAgIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0 aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlcyBhbmQgdGhpcwotICAgcGVybWlzc2lvbiBu b3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlIGFuZCByZWxhdGVkCi0g ICBkb2N1bWVudGF0aW9uLgotCi0gICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTLUlTIiBB TkQgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKLSAgIEVYUFJFU1MsIElNUExJRUQgT1Ig T1RIRVJXSVNFLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkKLSAgIFdBUlJBTlRZ IE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4K LQotICAgSU4gTk8gRVZFTlQgU0hBTEwgU1RBTkZPUkQgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lB TCwgSU5DSURFTlRBTCwKLSAgIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBB TlkgS0lORCwgT1IgQU5ZIERBTUFHRVMKLSAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9T UyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBPUiBOT1QKLSAgIEFEVklTRUQgT0Yg VEhFIFBPU1NJQklMSVRZIE9GIERBTUFHRSwgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LAotICAgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVS Rk9STUFOQ0UgT0YgVEhJUwotICAgU09GVFdBUkUuCi0KLSAgIFVzZWQgZm9yIFNlY3VyZSBSZW1v dGUgUGFzc3dvcmQgKFRNKSBwcm90b2NvbCAoU1JQKSBpbiBDLUtlcm1pdCwgS2VybWl0Ci0gICA5 NSAoazk1LmV4ZSwgazIuZXhlLCBrOTVjcnlwdC5kbGwsIGsyY3J5cHQuZGxsKQotCi0gICBDb3B5 cmlnaHQgMTk5MCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4g QWxsIFJpZ2h0cwotICAgUmVzZXJ2ZWQuCi0KLSAgIEV4cG9ydCBvZiB0aGlzIHNvZnR3YXJlIGZy b20gdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSBtYXkgcmVxdWlyZSBhCi0gICBzcGVjaWZp YyBsaWNlbnNlIGZyb20gdGhlIFVuaXRlZCBTdGF0ZXMgR292ZXJubWVudC4gSXQgaXMgdGhlCi0g ICByZXNwb25zaWJpbGl0eSBvZiBhbnkgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiBjb250ZW1wbGF0 aW5nIGV4cG9ydCB0bwotICAgb2J0YWluIHN1Y2ggYSBsaWNlbnNlIGJlZm9yZSBleHBvcnRpbmcu Ci0KLSAgIFdJVEhJTiBUSEFUIENPTlNUUkFJTlQsIHBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBt b2RpZnksIGFuZCBkaXN0cmlidXRlCi0gICB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRh dGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzCi0gICBoZXJlYnkgZ3JhbnRl ZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxs Ci0gICBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg cGVybWlzc2lvbiBub3RpY2UKLSAgIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24s IGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUKLSAgIHVzZWQgaW4gYWR2ZXJ0aXNp bmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQotICAgc29m dHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiBNLkkuVC4g bWFrZXMgbm8KLSAgIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhp cyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuCi0gICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdp dGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgotCi0gICBVc2VkIGZvciBUZWxuZXQg QXV0aGVudGljYXRpb24gT3B0aW9uLCBUZWxuZXQgRW5jcnlwdGlvbiBPcHRpb24sIGFuZAotICAg S2VyYmVyb3MgKFRNKSBhdXRoZW50aWNhdGlvbiBpbiBDLUtlcm1pdCwgS2VybWl0IDk1IChrOTUu ZXhlLCBrMi5leGUsCi0gICBrOTVjcnlwdC5kbGwsIGsyY3J5cHQuZGxsKQotCi0gICBDb3B5cmln aHQgKGMpIDE5OTEsIDE5OTMgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZv cm5pYS4KLSAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICAgbW9kaWZp Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp b25zIGFyZQotICAgbWV0OgotICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICAgIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0Ci0gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICAgICAgIGRpc3RyaWJ1dGlvbi4KLSAgICAz LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m IHRoaXMKLSAgICAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnZW1lbnQ6Ci0KLSAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotICAgICBDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRz IGNvbnRyaWJ1dG9ycy4KLSAgICA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5 IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gICAgICAgZnJvbSB0aGlzIHNv ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi0gICBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMg YGBBUyBJUycnIEFORAotICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gICBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAgIFBVUlBPU0Ug QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJV VE9SUwotICAgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAgIFNVQlNUSVRVVEUgR09P RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgotICAgQlVT SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksCi0gICBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgotICAgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgotICAgQURWSVNF RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSAgIFVzZWQgZm9yIFRlbG5l dCBBdXRoZW50aWNhdGlvbiBPcHRpb24sIFRlbG5ldCBFbmNyeXB0aW9uIE9wdGlvbiwgYW5kCi0g ICBLZXJiZXJvcyAoVE0pIGF1dGhlbnRpY2F0aW9uIGluIEMtS2VybWl0LCBLZXJtaXQgOTUgKGs5 NS5leGUsIGsyLmV4ZSwKLSAgIGs5NWNyeXB0LmRsbCwgazJjcnlwdC5kbGwpCi0KLSAgIENvcHly aWdodCAoQykgMTk5NS0xOTk3IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSBBbGwgcmln aHRzCi0gICByZXNlcnZlZC4KLQotICAgVGhpcyBwYWNrYWdlIGlzIGFuIERFUyBpbXBsZW1lbnRh dGlvbiB3cml0dGVuIGJ5IEVyaWMgWW91bmcKLSAgIChlYXlAY3J5cHRzb2Z0LmNvbSkuIFRoZSBp bXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtCi0gICB3aXRoIE1JVCdz IGxpYmRlcy4KLQotICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5v bi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCi0gICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg YXJlIGFoZWFyZWQgdG8uIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcHBseQotICAgdG8gYWxs IGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24uCi0KLSAgIENvcHlyaWdodCByZW1haW5z IEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCi0gICB0 aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGlu IGEgcHJvZHVjdCwKLSAgIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uIGFz IHRoZSBhdXRob3Igb2YgdGhhdCB0aGUgU1NMCi0gICBsaWJyYXJ5LiBUaGlzIGNhbiBiZSBpbiB0 aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtCi0gICBzdGFydHVwIG9yIGlu IGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZQotICAg cGFja2FnZS4KLQotICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gICBtZXQ6Ci0gICAg MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmln aHQgbm90aWNlLAotICAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuCi0gICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgICAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gICAg ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl Ci0gICAgICAgZGlzdHJpYnV0aW9uLgotICAgIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMg bWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotICAgICAgIHNvZnR3YXJlIG11c3Qg ZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDogVGhpcyBwcm9kdWN0Ci0gICAg ICAgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNv ZnQuY29tKQotCi0gICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBB UyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgotICAgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAgIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAg IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JT IEJFIExJQUJMRSBGT1IKLSAgIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAgIERBTUFHRVMgKElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gICBP UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikKLSAgIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAgIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORwotICAgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF Ci0gICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotICAgVGhlIGxpY2Vuc2UgYW5kIGRp c3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24KLSAg IG9yIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiBpLmUuIHRoaXMg Y29kZSBjYW5ub3QKLSAgIHNpbXBseSBiZSBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRp c3RyaWJ1dGlvbiBsaWNlbnNlIFtpbmNsdWRpbmcKLSAgIHRoZSBHTlUgUHVibGljIExpY2Vuc2Uu XQotCi0gICBUaGUgcmVhc29uIGJlaGluZCB0aGlzIGJlaW5nIHN0YXRlZCBpbiB0aGlzIGRpcmVj dCBtYW5uZXIgaXMgcGFzdAotICAgZXhwZXJpZW5jZSBpbiBjb2RlIHNpbXBseSBiZWluZyBjb3Bp ZWQgYW5kIHRoZSBhdHRyaWJ1dGlvbiByZW1vdmVkIGZyb20KLSAgIGl0IGFuZCB0aGVuIGJlaW5n IGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2Ygb3RoZXIgcGFja2FnZXMuIFRoaXMKLSAgIGltcGxlbWVu dGF0aW9uIHdhcyBhIG5vbi10cml2aWFsIGFuZCB1bnBhaWQgZWZmb3J0LgotCi0gICBVc2VkIERF UyBlbmNyeXB0aW9uIGluIEtlcm1pdCA5NSAoazk1Y3J5cHQuZGxsLCBrMmNyeXB0LmRsbCkKLSAg ICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCi0KLSAqIFRoaXMgaXMgdmVyc2lvbiAxLjEgb2YgQ3J5cHRvTGliCi0gKgot ICogVGhlIGF1dGhvcnMgb2YgdGhpcyBzb2Z0d2FyZSBhcmUgSmFjayBMYWN5LCBEb24gTWl0Y2hl bGwgYW5kIE1hdHQgQmxhemUKLSAqICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDE5OTEsIDE5 OTIsIDE5OTMsIDE5OTQsIDE5OTUgYnkgQVQmVC4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5 LCBhbmQgbW9kaWZ5IHRoaXMgc29mdHdhcmUgd2l0aG91dCBmZWUKLSAqIGlzIGhlcmVieSBncmFu dGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgZW50aXJlIG5vdGljZSBpcyBpbmNsdWRlZCBpbgotICog YWxsIGNvcGllcyBvZiBhbnkgc29mdHdhcmUgd2hpY2ggaXMgb3IgaW5jbHVkZXMgYSBjb3B5IG9y Ci0gKiBtb2RpZmljYXRpb24gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgaW4gYWxsIGNvcGllcyBvZiB0 aGUgc3VwcG9ydGluZwotICogZG9jdW1lbnRhdGlvbiBmb3Igc3VjaCBzb2Z0d2FyZS4KLSAqCi0g KiBOT1RFOgotICogU29tZSBvZiB0aGUgYWxnb3JpdGhtcyBpbiBjcnlwdG9saWIgbWF5IGJlIGNv dmVyZWQgYnkgcGF0ZW50cy4KLSAqIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgdXNl ciB0byBlbnN1cmUgdGhhdCBhbnkgcmVxdWlyZWQKLSAqIGxpY2Vuc2VzIGFyZSBvYnRhaW5lZC4K LSAqCi0gKgotICogU09NRSBQQVJUUyBPRiBDUllQVE9MSUIgTUFZIEJFIFJFU1RSSUNURUQgVU5E RVIgVU5JVEVEIFNUQVRFUyBFWFBPUlQKLSAqIFJFR1VMQVRJT05TLgotICoKLSAqCi0gKiBUSElT IFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgQU5ZIEVYUFJFU1Mg T1IgSU1QTElFRAotICogV0FSUkFOVFkuICBJTiBQQVJUSUNVTEFSLCBORUlUSEVSIFRIRSBBVVRI T1JTIE5PUiBBVCZUIE1BS0UgQU5ZCi0gKiBSRVBSRVNFTlRBVElPTiBPUiBXQVJSQU5UWSBPRiBB TlkgS0lORCBDT05DRVJOSU5HIFRIRSBNRVJDSEFOVEFCSUxJVFkKLSAqIE9GIFRISVMgU09GVFdB UkUgT1IgSVRTIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLSAgIFVzZWQg Zm9yIEJpZyBOdW1iZXIgbGlicmFyeSBpbiBLZXJtaXQgOTUgKGs5NWNyeXB0LmRsbCwgazJjcnlw dC5kbGwpLgotCi0gICBbIFs2NTJdVG9wIF0gWyBbNjUzXUMtS2VybWl0IF0gWyBbNjU0XUtlcm1p dCBIb21lIF0KLSAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCi0KLSAgIENLRVJNSVQ3MC5IVE0gLyBUaGUgS2VybWl0 IFByb2plY3QgLyBDb2x1bWJpYSBVbml2ZXJzaXR5IC8gOCBGZWIgMjAwMCAvCi0gICBMYXN0IHVw ZGF0ZTogOCBBdWcgMjAxMQotCi1SZWZlcmVuY2VzCi0KLSAgIDEuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1LwotICAgMi4gbWFpbHRvOmtlcm1pdEBjb2x1bWJpYS5lZHUKLSAgIDMuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gICA0LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvazk1Lmh0bWwKLSAgIDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0Lmh0bWwKLSAgIDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3NjcmlwdHMuaHRtbAotICAgNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2N1cnJl bnQuaHRtbAotICAgOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3doYXRzbmV3Lmh0 bWwKLSAgIDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9mYXEuaHRtbAotICAxMC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3N1cHBvcnQuaHRtbAotICAxMS4gaHR0cDov L3d3dy5hbWF6b24uY29tL2dwL3Byb2R1Y3QvMTU1NTU4MTY0MT9pZT1VVEY4JnRhZz1hbGVpZG1v cmVsZG9tLTIwJmxpbmtDb2RlPWFzMiZjYW1wPTE3ODkmY3JlYXRpdmU9OTMyNSZjcmVhdGl2ZUFT SU49MTU1NTU4MTY0MQotICAxMi4gbWFpbHRvOmtlcm1pdC1zdXBwb3J0QGNvbHVtYmlhLmVkdQot ICAxMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0LwotICAxNC4gaHR0cDovL3d3dy5r ZXJtaXQtcHJvamVjdC5vcmcvCi0gIDE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLm55Yy5ueS51cy9r ZXJtaXQvCi0gIDE2LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL0NPUFlJTkcu VFhUCi0gIDE3LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL2NrY21haS5jCi0g IDE4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeHYKLSAg MTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQotICAyMC4gZnRwOi8v a2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9ja2Nid3IudHh0Ci0gIDIxLiBmdHA6Ly9rZXJt aXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL2NrdWJ3ci50eHQKLSAgMjIuIGZ0cDovL2tlcm1pdC5j b2x1bWJpYS5lZHUva2VybWl0L2YvY2t2YndyLnR4dAotICAyMy4gZnRwOi8va2VybWl0LmNvbHVt YmlhLmVkdS9rZXJtaXQvZi9ja3Vid3IudHh0Ci0gIDI0LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEu ZWR1L2tlcm1pdC9mL2NrZXJtaXQ3MC50eHQKLSAgMjUuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5l ZHUva2VybWl0L2Yvc2VjdXJpdHkudHh0Ci0gIDI2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvc2VjdXJpdHkuaHRtCi0gIDI3LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1p dC9mL2lrc2QudHh0Ci0gIDI4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaWtzZC5o dG0KLSAgMjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jdWlrc2QuaHRtCi0gIDMw LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL3RlbG5ldC50eHQKLSAgMzEuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC90ZWxuZXQuaHRtCi0gIDMyLiBmdHA6Ly9rZXJt aXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL0NPUFlJTkcuVFhUCi0gIDMzLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvazk1Lmh0bWwKLSAgMzQuIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5v cmcvCi0gIDM1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KLSAgMzYu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4aQotICAzNy4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3hpaQotICAzOC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gwCi0gIDM5LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEKLSAgNDAuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4wCi0gIDQxLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMQotICA0Mi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjIKLSAgNDMu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4zCi0gIDQ0 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNAotICA0 NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjUKLSAg NDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS41LjEK LSAgNDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS41 LjIKLSAgNDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 MS41LjMKLSAgNDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4MS41LjQKLSAgNTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4MS41LjUKLSAgNTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4MS42Ci0gIDUyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDEuNwotICA1My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3gxLjgKLSAgNTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4MS45Ci0gIDU1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDEuMTAKLSAgNTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4MS4xMQotICA1Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3gxLjExLjEKLSAgNTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4MS4xMS4yCi0gIDU5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMTEuMwotICA2MC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjExLjQKLSAgNjEuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4xMS41Ci0gIDYyLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMTEuNgotICA2My4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjExLjcKLSAgNjQuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4xMgotICA2NS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjEzCi0gIDY2 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMTQKLSAg NjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4xNQot ICA2OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjE2 Ci0gIDY5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEu MTcKLSAgNzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 MS4xOAotICA3MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3gxLjE5Ci0gIDcyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDEuMjAKLSAgNzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4MS4yMQotICA3NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3gxLjIyCi0gIDc1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDEuMjIuMQotICA3Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3gxLjIyLjIKLSAgNzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4MS4yMi4zCi0gIDc4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMjIuNAotICA3OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjIyLjUKLSAgODAuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4yMi42Ci0gIDgxLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMjIuNwotICA4Mi4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjIyLjgKLSAgODMuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4yMwotICA4NC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjI0Ci0gIDg1LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIKLSAgODYuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4wCi0gIDg3LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMQotICA4OC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEuMQotICA4 OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEuMgot ICA5MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEu MwotICA5MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gy LjEuNAotICA5Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3gyLjEuNQotICA5My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3gyLjEuNgotICA5NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3gyLjEuNwotICA5NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3gyLjEuOAotICA5Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3gyLjEuOQotICA5Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3gyLjEuMTAKLSAgOTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4xLjExCi0gIDk5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMS4xMgotIDEwMC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEuMTMKLSAxMDEuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4xLjE0Ci0gMTAyLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMS4xNQotIDEwMy4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEuMTYKLSAxMDQuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4yCi0gMTA1LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMi4xCi0gMTA2 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMi4yCi0g MTA3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMwot IDEwOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjMu MAotIDEwOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gy LjMuMQotIDExMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3gyLjMuMgotIDExMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3gyLjMuMwotIDExMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3gyLjMuNAotIDExMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3gyLjMuNQotIDExNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3gyLjMuNgotIDExNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3gyLjQKLSAxMTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4Mi41Ci0gMTE3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDIuNgotIDExOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3gyLjcKLSAxMTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4Mi43LjAKLSAxMjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi43LjEKLSAxMjEuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi43LjIKLSAxMjIuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi43LjMKLSAxMjMuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi43LjQKLSAxMjQuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi43LjQuMQotIDEyNS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjcuNC4yCi0gMTI2LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuNy40LjMKLSAx MjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi43LjQu NAotIDEyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gy LjcuNC41Ci0gMTI5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDIuOAotIDEzMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3gyLjkKLSAxMzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4Mi45LjEKLSAxMzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4Mi45LjIKLSAxMzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4Mi4xMAotIDEzNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3gyLjExCi0gMTM1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDIuMTIKLSAxMzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4Mi4xMwotIDEzNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3gyLjE0Ci0gMTM4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMTUKLSAxMzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MwotIDE0MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3gzLjEKLSAxNDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4My4yCi0gMTQyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDMuMwotIDE0My4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gzLjQKLSAxNDQuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NAotIDE0NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjAKLSAxNDYuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xCi0gMTQ3LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMS4xCi0gMTQ4LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMS4yCi0gMTQ5LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMS4zCi0gMTUwLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMgotIDE1MS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuMQotIDE1Mi4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuMS4xCi0gMTUzLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMi4xLjIKLSAx NTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yLjEu MwotIDE1NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0 LjIuMgotIDE1Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3g0LjIuMi4xCi0gMTU3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcw Lmh0bWwjeDQuMi4yLjIKLSAxNTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4NC4yLjMKLSAxNTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4NC4yLjMuMQotIDE2MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuMy4yCi0gMTYxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMi40Ci0gMTYyLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMi41Ci0gMTYzLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMi42Ci0gMTY0LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMi43Ci0gMTY1LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMi44Ci0gMTY2LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMi44LjEKLSAxNjcuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yLjguMgotIDE2 OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuOC4z Ci0gMTY5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQu Mi44LjQKLSAxNzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4NC4zCi0gMTcxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDQuMy4xCi0gMTcyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcw Lmh0bWwjeDQuMy4yCi0gMTczLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDQuMy4zCi0gMTc0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDQuMy40Ci0gMTc1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDQuNAotIDE3Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3g0LjQuMQotIDE3Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3g0LjQuMS4xCi0gMTc4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNC4xLjIKLSAxNzkuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC40LjIKLSAxODAuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC40LjIuMQotIDE4MS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjQuMi4xLjEKLSAxODIuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC40LjIuMS4yCi0g MTgzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNC4y LjIKLSAxODQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 NC41Ci0gMTg1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwj eDQuNS4xCi0gMTg2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDQuNS4yCi0gMTg3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcw Lmh0bWwjeDQuNS4yLjEKLSAxODguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4NC41LjIuMgotIDE4OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3g0LjUuMwotIDE5MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3g0LjUuNAotIDE5MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjYKLSAxOTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC43Ci0gMTkzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNy4xCi0gMTk0LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNy4yCi0gMTk1LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNy4zCi0gMTk2LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuOAotIDE5Ny4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjguMQotIDE5OC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjguMgotIDE5OS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjkKLSAyMDAuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC45LjEKLSAyMDEuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC45LjIKLSAyMDIu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC45LjMKLSAy MDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xMAot IDIwNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjEx Ci0gMjA1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQu MTEuMQotIDIwNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3g0LjExLjIKLSAyMDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4NC4xMS4zCi0gMjA4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDQuMTEuNAotIDIwOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g0LjExLjUKLSAyMTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4NC4xMS42Ci0gMjExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTIKLSAyMTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xMwotIDIxMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjE0Ci0gMjE0LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTUKLSAyMTUuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xNgotIDIxNi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjE3Ci0gMjE3LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTcuMQotIDIxOC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjE3LjIKLSAyMTkuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xOAotIDIyMC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjE5Ci0gMjIxLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMjAKLSAyMjIu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yMC4xCi0g MjIzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMjAu MgotIDIyNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0 LjIwLjIuMQotIDIyNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3g0LjIwLjIuMgotIDIyNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3g0LjIwLjIuMwotIDIyNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3g0LjIwLjIuNAotIDIyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIwLjIuNQotIDIyOS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIwLjMKLSAyMzAuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yMQotIDIzMS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIyCi0gMjMyLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMjIuMQotIDIzMy4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIyLjIKLSAyMzQuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yMi4zCi0gMjM1 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMjIuNAot IDIzNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIy LjUKLSAyMzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 NC4yMi42Ci0gMjM4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDQuMjIuNwotIDIzOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3g0LjIyLjgKLSAyNDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4NC4yMwotIDI0MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g0LjI0Ci0gMjQyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDQuMjUKLSAyNDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4NQotIDI0NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3g1LjAKLSAyNDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4NS4xCi0gMjQ2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDUuMgotIDI0Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3g1LjMKLSAyNDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4NS4zLjEKLSAyNDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NS4zLjIKLSAyNTAuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NS40Ci0gMjUxLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDUuNQotIDI1Mi4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g1LjYKLSAyNTMuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NS43Ci0gMjU0LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDYKLSAyNTUuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ni4wCi0gMjU2LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDYuMQotIDI1Ny4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g2LjIKLSAyNTguIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ni4zCi0gMjU5LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDYuNAotIDI2MC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g2LjUKLSAyNjEuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ni42Ci0gMjYyLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDYuNi4xCi0gMjYzLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDYuNi4yCi0gMjY0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDYuNi4yCi0gMjY1LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDYuNi4zCi0gMjY2 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDYuNi40Ci0g MjY3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDYuNi41 Ci0gMjY4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDYu Ni41LjEKLSAyNjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4Ni42LjUuMgotIDI3MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3g2LjYuNS4zCi0gMjcxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDYuNi41LjQKLSAyNzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4Ni42LjUuNQotIDI3My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3g2LjcKLSAyNzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NwotIDI3NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjAKLSAyNzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xCi0gMjc3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMS4xCi0gMjc4LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMS4yCi0gMjc5LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMS4zCi0gMjgwLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMS40Ci0gMjgxLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMgotIDI4Mi4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjMKLSAyODMuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny40Ci0gMjg0LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuNQotIDI4NS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjYKLSAyODYuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny43Ci0gMjg3LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuOAotIDI4OC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjkKLSAyODkuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny45LjEKLSAyOTAu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny45LjIKLSAy OTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMAot IDI5Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEw LjEKLSAyOTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 Ny4xMC4yCi0gMjk0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDcuMTAuMwotIDI5NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3g3LjEwLjQKLSAyOTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4Ny4xMC41Ci0gMjk3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDcuMTAuNgotIDI5OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEwLjcKLSAyOTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMC44Ci0gMzAwLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTAuOQotIDMwMS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEwLjEwCi0gMzAyLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTEKLSAzMDMuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMgotIDMwNC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEzCi0gMzA1LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTQKLSAzMDYuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xNQotIDMwNy4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjE2Ci0gMzA4 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTcKLSAz MDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xOAot IDMxMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjE5 Ci0gMzExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcu MjAKLSAzMTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 Ny4yMC4xCi0gMzEzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDcuMjAuMgotIDMxNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3g3LjIxCi0gMzE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDcuMjIKLSAzMTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4Ny4yMwotIDMxNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g3LjI0Ci0gMzE4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDcuMjUKLSAzMTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4Ny4yNgotIDMyMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3g3LjI2LjEKLSAzMjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4yNi4yCi0gMzIyLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMjcKLSAzMjMuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4OAotIDMyNC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g5Ci0gMzI1LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDkuMAotIDMyNi4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g5LjEKLSAzMjcuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4OS4yCi0gMzI4LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDkuMwotIDMyOS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxMAotIDMzMC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3hpaWkKLSAzMzEuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4aWlpLjEKLSAzMzIuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4aWlpLjEuMQotIDMzMy4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3hpaWkuMS4yCi0gMzM0LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeGlpaS4xLjIuMQot IDMzNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3hpaWku MS4yLjIKLSAzMzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4aWlpLjEuMi4zCi0gMzM3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeGlpaS4yCi0gMzM4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeGl2Ci0gMzM5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeHYKLSAzNDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Iy Lmh0bQotIDM0MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYnJldmlld3MuaHRt bAotIDM0Mi4gaHR0cDovL3d3dy5iaHVzYS5jb20vCi0gMzQzLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvbWFudWFscy5odG1sI2NrZGUKLSAzNDQuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9tYW51YWxzLmh0bWwja3RiCi0gMzQ1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvbmV3cy5odG1sCi0gMzQ2LiBuZXdzOmNvbXAucHJvdG9jb2xzLmtlcm1pdC5hbm5v dW5jZQotIDM0Ny4gbmV3czpjb21wLnByb3RvY29scy5rZXJtaXQubWlzYwotIDM0OC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCi0gMzQ5LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQKLSAzNTAuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4zCi0gMzUxLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMjMKLSAzNTIuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC41LjEKLSAzNTMuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS41Ci0gMzU0LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNy4xCi0gMzU1LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuOS4KLSAzNTYuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQotIDM1Ny4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjkuMgotIDM1OC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjE1Ci0gMzU5LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDkuMQotIDM2MC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjYKLSAzNjEuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny40Ci0gMzYyLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuOS4xCi0gMzYzLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjbWpkCi0gMzY0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjbWpkCi0gMzY1LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuOQotIDM2Ni4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCi0gMzY3LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KLSAzNjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny41Ci0gMzY5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMTIKLSAzNzAuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS41Ci0gMzcxLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuOS4xCi0gMzcyLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDYuNi41Ci0gMzczLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuOQotIDM3NC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjE4Ci0gMzc1LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuNAotIDM3Ni4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjE1Ci0gMzc3LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMwotIDM3OC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjMKLSAzNzkuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMC43Ci0gMzgwLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMQotIDM4MS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjkuMQotIDM4 Mi4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9ja2NjZmcudHh0Ci0gMzgzLiBm dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL2NrY2NmZy50eHQKLSAzODQuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4yMi40Ci0gMzg1LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMjIuNQotIDM4 Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCi0gMzg3LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMjIuNQotIDM4OC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEyCi0gMzg5LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMS4xNgotIDM5 MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjcKLSAz OTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4zLjUK LSAzOTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny41 Ci0gMzkzLiBodHRwOi8vd3d3LnRlbGVmb25pY2EuZXMvY2FtYmlvZGVudW1lcmFjaW9uLwotIDM5 NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjUKLSAz OTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQotIDM5Ni4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjIuMgotIDM5Ny4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEuMTEKLSAzOTgu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4xLjEzCi0g Mzk5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMS4x MgotIDQwMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCi0gNDAxLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMS4xCi0gNDAy LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KLSA0MDMuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQotIDQwNC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEuNwotIDQwNS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEuNgotIDQwNi4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCi0gNDA3LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEu ZWR1L2tlcm1pdC9mL3RlbG5ldC50eHQKLSA0MDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC90ZWxuZXQuaHRtCi0gNDA5LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9m L3RlbG5ldC50eHQKLSA0MTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC90ZWxuZXQu aHRtCi0gNDExLiBmdHA6Ly9mdHAuaXNpLmVkdS9pbi1ub3Rlcy9yZmMxNTcyLnR4dAotIDQxMi4g ZnRwOi8vZnRwLmlzaS5lZHUvaW4tbm90ZXMvcmZjNzc5LnR4dAotIDQxMy4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCi0gNDE0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMTAKLSA0MTUuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi44Ci0gNDE2LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNQotIDQxNy4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIwCi0gNDE4LiBodHRwOi8vd3d3LnBzeS51 cS5vei5hdS9+ZnRwL0NyeXB0by8KLSA0MTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9zZWN1cml0eS5odG0KLSA0MjAuIGh0dHA6Ly9zcnAuc3RhbmZvcmQuZWR1L3NycC8KLSA0MjEu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi43LjEsCi0g NDIyLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL2NrY2NmZy50eHQKLSA0MjMu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zZWN1cml0eS5odG0KLSA0MjQuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQotIDQyNS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjcKLSA0MjYuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4wCi0gNDI3LiBmdHA6Ly9rZXJtaXQu Y29sdW1iaWEuZWR1L2tlcm1pdC9mL2NrdWlucy50eHQKLSA0MjguIGZ0cDovL2tlcm1pdC5jb2x1 bWJpYS5lZHUva2VybWl0L2YvY2t1YndyLnR4dAotIDQyOS4gZnRwOi8va2VybWl0LmNvbHVtYmlh LmVkdS9rZXJtaXQvZi9ja3VpbnMudHh0Ci0gNDMwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvaWtzZC5odG1sI3g0LjIKLSA0MzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9pa3NkLmh0bWwKLSA0MzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4NC4yLjguMQotIDQzMy4gZnRwOi8vZnRwLmlzaS5lZHUvaW4tbm90ZXMvcmZjMTk0 NS50eHQKLSA0MzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4MS41Ci0gNDM1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDMuMgotIDQzNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3gzLjIKLSA0MzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQot IDQzOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCi0gNDM5LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDUuNAotIDQ0MC4gZnRw Oi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9ja3Vid3IudHh0Ci0gNDQxLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTAKLSA0NDIuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC43LjEKLSA0NDMuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC43LjMKLSA0NDQu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4zCi0gNDQ1 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTAKLSA0 NDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xMQot IDQ0Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjE1 Ci0gNDQ4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQu Mi40Ci0gNDQ5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwj eDQuNwotIDQ1MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3g0LjIuMwotIDQ1MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3g0LjIuMS4zCi0gNDUyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5o dG0KLSA0NTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 NC4yLjIKLSA0NTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4MS41Ci0gNDU1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDQuMi44LjIKLSA0NTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4NC4zCi0gNDU3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDQuMTAKLSA0NTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4NC4xMQotIDQ1OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g0LjE1Ci0gNDYwLiBodHRwOi8vd3d3LnRlbHN0cmEuY29tLmF1L2RvY3Mv UEdQLwotIDQ2MS4gaHR0cDovL3d3dy50ZWxzdHJhLmNvbS5hdS9kb2NzL1BHUC9wZ3Bkb2MyL3Bn cGRvYzJfMTcuaHRtbAotIDQ2Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NlY3Vy aXR5Lmh0bQotIDQ2My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3gyLjcKLSA0NjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQot IDQ2NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjE0 Ci0gNDY2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEu MjMKLSA0NjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 NC43Ci0gNDY4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KLSA0Njku IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQotIDQ3MC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjkKLSA0NzEuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQotIDQ3Mi4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjUuNAotIDQ3My4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjMKLSA0NzQuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS41LjUKLSA0NzUuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny41Ci0gNDc2LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuOQotIDQ3Ny4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjUuNAotIDQ3OC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjkKLSA0NzkuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS41LjQKLSA0ODAuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS41LjUKLSA0ODEu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQotIDQ4Mi4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCi0gNDgzLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNQotIDQ4NC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjYKLSA0ODUuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMAotIDQ4Ni4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEwLjExCi0gNDg3LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNgotIDQ4OC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuMgotIDQ4OS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjExCi0gNDkwLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNS40Ci0gNDkxLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuOS4xCi0gNDky LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMC42Ci0g NDkzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMgot IDQ5NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjEK LSA0OTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC43 LjEKLSA0OTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQotIDQ5Ny4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjUKLSA0OTgu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yLjIKLSA0 OTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC43LjEK LSA1MDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4y Ci0gNTAxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQu MTAKLSA1MDIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 NC4yLjIKLSA1MDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4NC43LjEKLSA1MDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4NC4yCi0gNTA1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcw Lmh0bWwjeDQuMTAKLSA1MDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4MS4xMS41Ci0gNTA3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDQuMC42Ci0gNTA4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDQuMTEKLSA1MDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4NC45LjEKLSA1MTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xMS4zCi0gNTExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuOQotIDUxMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjkKLSA1MTMuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC41LjEKLSA1MTQuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMAotIDUxNS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEwLjUKLSA1MTYuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMC4zCi0gNTE3LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTAuNQotIDUxOC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCi0gNTE5LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMwotIDUyMC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjEwCi0gNTIxLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMwotIDUyMi4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjEwCi0gNTIzLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTUKLSA1MjQuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xOAotIDUyNS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIwCi0gNTI2LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMjAKLSA1Mjcu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yMAotIDUy OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjE5Ci0g NTI5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTYK LSA1MzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4x OQotIDUzMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0 LjIwLjIuMwotIDUzMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3gxLjUKLSA1MzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4Ni42LjUuNAotIDUzNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3g0LjIyLjIKLSA1MzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4NC4yMi4zCi0gNTM2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tiMi5odG0KLSA1MzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0 bQotIDUzOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g5 LjMKLSA1MzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 NS4yLjEKLSA1NDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4NC41LjEKLSA1NDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4NC41LjIKLSA1NDIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4Ni42Ci0gNTQzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeGlpaQotIDU0NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3hpaWkKLSA1NDUuIGZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL3JmYzE0ODku dHh0Ci0gNTQ2LiBmdHA6Ly9mdHAuaXNpLmVkdS9pbi1ub3Rlcy9yZmMyMzE5LnR4dAotIDU0Ny4g aHR0cDovL3d3dy51bmljb2RlLm9yZy8KLSA1NDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4Ni42LjIKLSA1NDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ni42LjUuMQotIDU1MC4gZnRwOi8vZnRwLmlzaS5lZHUv aW4tbm90ZXMvcmZjMjY0MC50eHQKLSA1NTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4Ni42LjIKLSA1NTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4Ni4wCi0gNTUzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDYuNQotIDU1NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3g2LjQKLSA1NTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2IyLmh0bQotIDU1Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g0LjIxCi0gNTU3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDYuNQotIDU1OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3gyLjgKLSA1NTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4Ny43Ci0gNTYwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDcuMgotIDU2MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3gxLjE5Ci0gNTYyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuOQotIDU2My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjEKLSA1NjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yCi0gNTY1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMQotIDU2Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIKLSA1NjcuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4xLjExCi0gNTY4LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMTAKLSA1NjkuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCNmZXJyc3RyaW5nCi0gNTcwLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMi41Ci0gNTcxLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMS4xMAotIDU3Mi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g5LjEKLSA1NzMu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4yMwotIDU3 NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjIzCi0g NTc1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMjIK LSA1NzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS42 Ci0gNTc3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcu MjMKLSA1NzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 Ny4yNAotIDU3OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3g3LjI0Ci0gNTgwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDQuMi4zCi0gNTgxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2s5MC5odG1s Ci0gNTgyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcu MTIKLSA1ODMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 Ny45Ci0gNTg0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KLSA1ODUu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xMS4zCi0g NTg2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTEu MwotIDU4Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3 LjUKLSA1ODguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 Ny4xMC43Ci0gNTg5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDcuMTAuNwotIDU5MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3g0LjIuOC40Ci0gNTkxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDQuMi41Ci0gNTkyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDcuOAotIDU5My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3g0LjkuMQotIDU5NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrYjIuaHRtCi0gNTk1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDcuMTkKLSA1OTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4Ny4xNgotIDU5Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g3LjkuMQotIDU5OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3g3LjUKLSA1OTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4Ny4zCi0gNjAwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDQuMTEuMwotIDYwMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjUuMQotIDYwMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEwCi0gNjAzLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTAuMTAKLSA2MDQuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS41Ci0gNjA1LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMjMKLSA2MDYuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMC43Ci0gNjA3LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTAuNwotIDYwOC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjExLjMKLSA2MDku IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMC4xMQot IDYxMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjkK LSA2MTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4x MC4zCi0gNjEyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwj eDcuMwotIDYxMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3g3LjkuMgotIDYxNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCi0g NjE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTcu MgotIDYxNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gx LjIyCi0gNjE3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwj eDQuNy4xCi0gNjE4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDEuMjIKLSA2MTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4NC4zCi0gNjIwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcw Lmh0bWwjeDQuOQotIDYyMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3gxLjIyCi0gNjIyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDEuNgotIDYyMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3g3LjUKLSA2MjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4Ny41Ci0gNjI1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDcuMTkKLSA2MjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4NC45LjEKLSA2MjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4OS4zCi0gNjI4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDcuNQotIDYyOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrYjIuaHRtCi0gNjMwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwKLSA2MzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAu aHRtbCN4OQotIDYzMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3g3LjQKLSA2MzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAu aHRtbAotIDYzNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1s I3g5Ci0gNjM1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwj eDcuMjAuMgotIDYzNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3g3LjEwLjUKLSA2MzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4Ny4xMC45Ci0gNjM4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDEuMTAKLSA2MzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4MS41Ci0gNjQwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDQuNy4xCi0gNjQxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvaWtzZC5odG1sCi0gNjQyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDcuMTkKLSA2NDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4NC4xMAotIDY0NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g0LjExCi0gNjQ1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDQuMwotIDY0Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2drZXJtaXQuaHRtbAotIDY0Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3g0LjIwCi0gNjQ4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvZ2tl cm1pdC5odG1sCi0gNjQ5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0K LSA2NTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4z Ci0gNjUxLiBtYWlsdG86a2VybWl0QGNvbHVtYmlhLmVkdQotIDY1Mi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3RvcAotIDY1My4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDY1NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2luZGV4Lmh0bWwKCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQv Y2tlcm1pdC05LjAuMzAyL2NrZXJtaXQ4MC50eHQgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tl cm1pdC05LjAuMzAyL2NrZXJtaXQ4MC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDE5NmI2OGIuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4w LjMwMi9ja2VybWl0ODAudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTAyODYgKzAsMCBAQAotCi0g ICBbMV1UaGUgQ29sdW1iaWEgQ3Jvd24gVGhlIEtlcm1pdCBQcm9qZWN0IHwgQ29sdW1iaWEgVW5p dmVyc2l0eQotICAgNjEyIFdlc3QgMTE1dGggU3RyZWV0LCBOZXcgWW9yayBOWSAxMDAyNSBVU0Eg byBbMl1rZXJtaXRAY29sdW1iaWEuZWR1Ci0gICAuLi5zaW5jZSAxOTgxCi0gICBbM11Ib21lIFs0 XUtlcm1pdCA5NSBbNV1DLUtlcm1pdCBbNl1TY3JpcHRzIFs3XUN1cnJlbnQgWzhdTmV3IFs5XUZB UQotICAgWzEwXVN1cHBvcnQKLQotQy1LZXJtaXQgOC4wIFVwZGF0ZSBOb3RlcwotCi0gICBbIFsx MV1Db250ZW50cyBdIFsgWzEyXUMtS2VybWl0IF0gWyBbMTNdS2VybWl0IEhvbWUgXQotCi1TZWNv bmQgU3VwcGxlbWVudCB0byBbMTRdVXNpbmcgQy1LZXJtaXQsIDJuZCBFZGl0aW9uCi0KLUZvciBD LUtlcm1pdCA4LjAKLQotICAgQXMgb2YgQy1LZXJtaXQgdmVyc2lvbjogOC4wLjIxMQotICAgRGF0 ZSBvZiBDLUtlcm1pdCByZWxlYXNlOiAxMCBBcHJpbCAyMDAzCi0gICBUaGlzIGZpbGUgbGFzdCB1 cGRhdGVkOiBNb24gU2VwIDEzIDA4OjUyOjM2IDIwMTAKLQotICAgICAqIElGIFlPVSBBUkUgUkVB RElORyBBIFBMQUlOLVRFWFQgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50LCBub3RlIHRoYXQKLSAg ICAgICBpdCBpcyBhIHBsYWluLXRleHQgZHVtcCBvZiBhIFdlYiBwYWdlLiBZb3UgY2FuIHZpc2l0 IHRoZSBvcmlnaW5hbAotICAgICAgIChhbmQgcG9zc2libHkgbW9yZSB1cC10by1kYXRlKSBXZWIg cGFnZSBoZXJlOgotICBbMTVdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4 MC5odG1sCi0KLSAgICAgKiBJZiB5b3UgYXJlIHJlYWRpbmcgdGhlIEhUTUwgdmVyc2lvbiBvZiB0 aGlzIGZpbGUgd2l0aCBhIEdVSSBXZWIKLSAgICAgICBicm93c2VyLCB0aGUgZmVhdHVyZXMgYWRk ZWQgc2luY2UgQy1LZXJtaXQgOC4wLjIwMSBhcmUgc2hvd24gaW4gcmVkCi0gICAgICAgaWYgeW91 ciBicm93c2VyIGFuZCBtb25pdG9yIHBlcm1pdC4gRmVhdHVyZXMgdGhhdCB3ZXJlIG5ldyB0bwot ICAgICAgIHZlcnNpb25zIDguMC4yMDAgYW5kIDIwMSBhcmUgaW4gYmxhY2suCi0KLUF1dGhvcnM6 IEZyYW5rIGRhIENydXogYW5kIENocmlzdGluZSBNLiBHaWFub25lCi1BZGRyZXNzOiBUaGUgS2Vy bWl0IFByb2plY3QKLSAgICAgICAgIENvbHVtYmlhIFVuaXZlcnNpdHkKLSAgICAgICAgIDYxMiBX ZXN0IDExNXRoIFN0cmVldAotICAgICAgICAgTmV3IFlvcmsgTlkgMTAwMjUtNzc5OQotICAgICAg ICAgVVNBCi1GYXg6ICAgICArMSAoMjEyKSA2NjItNjQ0MgotRS1NYWlsOiAgWzE2XWtlcm1pdC1z dXBwb3J0QGNvbHVtYmlhLmVkdQotV2ViOiAgICAgWzE3XWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC8KLU9yOiAgICAgIFsxOF1odHRwOi8vd3d3Lmtlcm1pdC1wcm9qZWN0Lm9yZy8KLU9y OiAgICAgIFsxOV1odHRwOi8vd3d3LmNvbHVtYmlhLm55Yy5ueS51cy9rZXJtaXQvCi0KLU5PVElD RVMKLQotICAgVGhpcyBkb2N1bWVudDoKLSAgICAgICAgICBDb3B5cmlnaHQg77+9IDE5OTcsIDIw MDIsIEZyYW5rIGRhIENydXogYW5kIENocmlzdGluZSBNLiBHaWFub25lLgotICAgICAgICAgIEFs bCByaWdodHMgcmVzZXJ2ZWQuCi0KLSAgIEtlcm1pdCA5NToKLSAgICAgICAgICBDb3B5cmlnaHQg 77+9IDE5OTUsIDIwMDIsIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlCi0g ICAgICAgICAgQ2l0eSBvZiBOZXcgWW9yay4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgQy1L ZXJtaXQ6Ci0gICAgICAgICAgQ29weXJpZ2h0IO+/vSAxOTg1LCAyMDAyLAotICAgICAgICAgIFRy dXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuIEFs bAotICAgICAgICAgIHJpZ2h0cyByZXNlcnZlZC4gU2VlIHRoZSBDLUtlcm1pdCBbMjBdQ09QWUlO Ry5UWFQgZmlsZSBvciB0aGUKLSAgICAgICAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgWzIxXWNr Y21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQKLSAgICAgICAgICBwZXJtaXNzaW9ucy4K LQotICAgV2hlbiBLZXJiZXJvcyhUTSkgYW5kL29yIFNSUChUTSkgKFNlY3VyZSBSZW1vdGUgUGFz c3dvcmQpIGFuZC9vcgotICAgICAgICAgIFNTTC9UTFMgcHJvdG9jb2wgYXJlIGluY2x1ZGVkOgot ICAgICAgICAgIFBvcnRpb25zIENvcHlyaWdodCDvv70gMTk5MCwgTWFzc2FjaHVzZXR0cyBJbnN0 aXR1dGUgb2YKLSAgICAgICAgICBUZWNobm9sb2d5LgotICAgICAgICAgIFBvcnRpb25zIENvcHly aWdodCDvv70gMTk5MSwgMTk5MyBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mCi0gICAgICAg ICAgQ2FsaWZvcm5pYS4KLSAgICAgICAgICBQb3J0aW9ucyBDb3B5cmlnaHQg77+9IDE5OTEsIDE5 OTIsIDE5OTMsIDE5OTQsIDE5OTUgYnkgQVQmVC4KLSAgICAgICAgICBQb3J0aW9ucyBDb3B5cmln aHQg77+9IDE5OTcsIFN0YW5mb3JkIFVuaXZlcnNpdHkuCi0gICAgICAgICAgUG9ydGlvbnMgQ29w eXJpZ2h0IO+/vSAxOTk1LTE5OTcsIEVyaWMgWW91bmcgPGVheUBjcnlwdG9zb2Z0LmNvbT4uCi0K LSAgIEZvciB0aGUgZnVsbCB0ZXh0IG9mIHRoZSB0aGlyZC1wYXJ0eSBjb3B5cmlnaHQgbm90aWNl cywgc2VlCi0gICBbMjJdQXBwZW5kaXggVi4KLQotV0hBVCBJUyBJTiBUSElTIEZJTEUKLQotICAg VGhpcyBmaWxlIGxpc3RzIGNoYW5nZXMgbWFkZSB0byBDLUtlcm1pdCBzaW5jZSB2ZXJzaW9uIDcu MCB3YXMgcmVsZWFzZWQKLSAgIGluIEphbnVhcnkgMjAwMC4gVXNlIHRoaXMgZmlsZSBhcyBhIHN1 cHBsZW1lbnQgdG86Ci0KLSAgICAgKiBUaGUgc2Vjb25kIGVkaXRpb24gb2YgWzIzXVVzaW5nIEMt S2VybWl0OyBhbmQ6Ci0gICAgICogVGhlIFsyNF1DLUtlcm1pdCA3LjAgVXBkYXRlIE5vdGVzLiBB bHNvIGF2YWlsYWJsZSBpbiBwbGFpbi10ZXh0Ci0gICAgICAgZm9ybSBhcyBbMjVdY2tlcm1pdDcw LnR4dC4KLQotICAgdW50aWwgdGhlIHRoaXJkIGVkaXRpb24gb2YgVXNpbmcgQy1LZXJtaXQgaXMg cHVibGlzaGVkLiBXZSBhcG9sb2dpemUKLSAgIGZvciB0aGUgc2NhdHRlcmVkIGRvY3VtZW50YXRp b24gYW5kIHdpbGwgY29uc29saWRhdGUgaXQgd2hlbiB3ZSBhcmUKLSAgIGFibGUuCi0KLUFERElU SU9OQUwgRklMRVMKLQotICAgU2V2ZXJhbCBvdGhlciBmaWxlcyBhY2NvbXBhbnkgdGhpcyBuZXcg S2VybWl0IHJlbGVhc2U6Ci0KLSAgIFsyNl1ja3V0dXRvci5odG1sCi0gICAgICAgICAgQy1LZXJt aXQgVHV0b3JpYWwgKGZvciBVbml4KS4gQWxzbyBkaXN0cmlidXRlZCBpbiBOcm9mZiBmb3JtIGFz Ci0gICAgICAgICAgWzI3XWNrdWtlci5uciwgdGhlIFVuaXggQy1LZXJtaXQgbWFudWFsIHBhZ2Uu Ci0KLSAgIFsyOF1zZWN1cml0eS5odG0KLSAgICAgICAgICBEaXNjdXNzaW9uIG9mIEtlcm1pdCdz IG5ldyBhdXRoZW50aWNhdGlvbiBhbmQgZW5jcnlwdGlvbgotICAgICAgICAgIGZlYXR1cmVzLCB1 cGRhdGVkIGZvciBDLUtlcm1pdCA4LjAuCi0KLSAgIFsyOV10ZWxuZXQuaHRtCi0gICAgICAgICAg RGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBvZiBLZXJtaXQncyBUZWxuZXQgY2xpZW50LCB1cGRhdGVk IGZvcgotICAgICAgICAgIEMtS2VybWl0IDguMC4KLQotICAgWzMwXWZ0cHNjcmlwdHMuaHRtbAot ICAgICAgICAgIFR1dG9yaWFsOiBXcml0aW5nIEZUUCBhdXRvbWF0aW9uIHNjcmlwdHMKLQotICAg WzMxXWNrY2J3ci5odG1sCi0gICAgICAgICAgUGxhdGZvcm0taW5kZXBlbmRlbnQgQy1LZXJtaXQg aGludHMgYW5kIHRpcHMuIEFsc28gZGlzdHJpYnV0ZWQKLSAgICAgICAgICBpbiBwbGFpbiB0ZXh0 IGZvcm0gYXMgWzMyXWNrY2J3ci50eHQKLQotICAgWzMzXWNrdWJ3ci5odG1sCi0gICAgICAgICAg VW5peC1zcGVjaWZpYyBDLUtlcm1pdCBoaW50cyBhbmQgdGlwcy4gQWxzbyBkaXN0cmlidXRlZCBp biBwbGFpbgotICAgICAgICAgIHRleHQgZm9ybSBhcyBbMzRdY2t1YndyLnR4dC4KLQotICAgWzM1 XWNrdmJ3ci5odG1sCi0gICAgICAgICAgVk1TLXNwZWNpZmljIEMtS2VybWl0IGhpbnRzIGFuZCB0 aXBzLiBBbHNvIGRpc3RyaWJ1dGVkIGluIHBsYWluCi0gICAgICAgICAgdGV4dCBmb3JtIGFzIFsz Nl1ja3Zid3IudHh0LgotCi0gICBbMzddY2t1aW5zLmh0bWwKLSAgICAgICAgICBVbml4IEMtS2Vy bWl0IGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMuIEFsc28gZGlzdHJpYnV0ZWQgaW4KLSAgICAg ICAgICBwbGFpbiB0ZXh0IGZvcm0gYXMgWzM4XWNrdWlucy50eHQuCi0KLSAgIFszOV1ja3ZpbnMu aHRtbAotICAgICAgICAgIFZNUyBDLUtlcm1pdCBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zLiBB bHNvIGRpc3RyaWJ1dGVkIGluCi0gICAgICAgICAgcGxhaW4gdGV4dCBmb3JtIGFzIFs0MF1ja3Zp bnMudHh0LgotCi0gICBbNDFdY2tjY2ZnLmh0bWwKLSAgICAgICAgICBDb21waWxlLXRpbWUgY29u ZmlndXJhdGlvbiBvcHRpb25zLiBBbHNvIGRpc3RyaWJ1dGVkIGluIHBsYWluCi0gICAgICAgICAg dGV4dCBmb3JtIGFzIFs0Ml1ja2NjZmcudHh0LgotCi0gICBbNDNdY2tjcGxtLmh0bWwKLSAgICAg ICAgICBDLUtlcm1pdCBQcm9ncmFtIExvZ2ljIE1hbnVhbC4gQWxzbyBkaXN0cmlidXRlZCBpbiBw bGFpbiB0ZXh0Ci0gICAgICAgICAgZm9ybSBhcyBbNDRdY2tjcGxtLnR4dC4KLQotICAgWzQ1XWlr c2QuaHRtbAotICAgICAgICAgIEludGVybmV0IEtlcm1pdCBTZXJ2aWNlIEFkbWluaXN0cmF0b3Jz IEd1aWRlIGZvciBVbml4LgotCi0gICBbNDZdc2tlcm1pdC5odG1sCi0gICAgICAgICAgQy1LZXJt aXQgYXMgYW4gU1NIIFN1YnN5c3RlbSAoU0ZUUCBzZXJ2ZXIgcmVwbGFjZW1lbnQpLgotCi0gICBb IFs0N11Ub3AgXSBbIFs0OF1DLUtlcm1pdCBdIFsgWzQ5XUtlcm1pdCBIb21lIF0KLQotQ09OVEVO VFMKLQotICAgICBbNTBdMC4gV0hBVCdTIE5FVwotICAgICBbNTFdMS4gRklYRVMgU0lOQ0UgVkVS U0lPTiA3LjAuMTk2Ci0gICAgIFs1Ml0yLiBTU0ggQU5EIEhUVFAKLSAgICAgICAgIFs1M10yLjEu IFNTSCBDb25uZWN0aW9ucwotICAgICAgICAgWzU0XTIuMi4gSFRUUCBDb25uZWN0aW9ucwotICAg ICAgICAgICAgWzU1XTIuMi4xLiBIVFRQIENvbW1hbmQgU3dpdGNoZXMKLSAgICAgICAgICAgIFs1 Nl0yLjIuMi4gSFRUUCBBY3Rpb24gQ29tbWFuZHMKLSAgICAgICAgICAgIFs1N10yLjIuMy4gSFRU UCBIZWFkZXJzCi0gICAgICAgICAgICBbNThdMi4yLjQuIFNlY3VyZSBIVFRQIENvbm5lY3Rpb25z Ci0gICAgICAgICAgICBbNTldMi4yLjUuIEhUVFAgVmFyaWFibGVzCi0gICAgICAgICAgICBbNjBd Mi4yLjYuIFRoZSBIVFRQIENvbW1hbmQtTGluZSBQZXJzb25hbGl0eQotICAgICBbNjFdMy4gVEhF IEJVSUxULUlOIEZUUCBDTElFTlQKLSAgICAgICAgIFs2Ml0zLjEuIE1ha2luZyBhbmQgTWFuYWdp bmcgRlRQIENvbm5lY3Rpb25zCi0gICAgICAgICAgICBbNjNdMy4xLjEuIEtlcm1pdCBDb21tYW5k LUxpbmUgT3B0aW9ucyBmb3IgRlRQCi0gICAgICAgICAgICBbNjRdMy4xLjIuIFRoZSBGVFAgQ29t bWFuZC1MaW5lIFBlcnNvbmFsaXR5Ci0gICAgICAgICAgICBbNjVdMy4xLjMuIFRoZSBGVFAgVVJM IEludGVycHJldGVyCi0gICAgICAgICAgICBbNjZdMy4xLjQuIEludGVyYWN0aXZlIEZUUCBTZXNz aW9uIEVzdGFibGlzaG1lbnQKLSAgICAgICAgIFs2N10zLjIuIE1ha2luZyBTZWN1cmUgRlRQIENv bm5lY3Rpb25zCi0gICAgICAgICBbNjhdMy4zLiBTZXR0aW5nIEZUUCBQcmVmZXJlbmNlcwotICAg ICAgICAgWzY5XTMuNC4gTWFuYWdpbmcgRGlyZWN0b3JpZXMgYW5kIEZpbGVzCi0gICAgICAgICBb NzBdMy41LiBVcGxvYWRpbmcgRmlsZXMgV2l0aCBGVFAKLSAgICAgICAgICAgIFs3MV0zLjUuMS4g RlRQIFBVVCBTd2l0Y2hlcwotICAgICAgICAgICAgWzcyXTMuNS4yLiBVcGRhdGUgTW9kZQotICAg ICAgICAgICAgWzczXTMuNS4zLiBSZWNvdmVyeQotICAgICAgICAgWzc0XTMuNi4gRG93bmxvYWRp bmcgRmlsZXMgV2l0aCBGVFAKLSAgICAgICAgICAgIFs3NV0zLjYuMS4gRlRQIEdFVCBTd2l0Y2hl cwotICAgICAgICAgICAgWzc2XTMuNi4yLiBGaWxlbmFtZSBDb2xsaXNpb25zCi0gICAgICAgICAg ICBbNzddMy42LjMuIFJlY292ZXJ5Ci0gICAgICAgICBbNzhdMy43LiBUcmFuc2xhdGluZyBDaGFy YWN0ZXIgU2V0cwotICAgICAgICAgICAgWzc5XTMuNy4xLiBDaGFyYWN0ZXIgU2V0cyBhbmQgVXBs b2FkaW5nCi0gICAgICAgICAgICBbODBdMy43LjIuIENoYXJhY3RlciBTZXRzIGFuZCBEb3dubG9h ZGluZwotICAgICAgICAgWzgxXTMuOC4gRlRQIENvbW1hbmQgU2hvcnRjdXRzCi0gICAgICAgICBb ODJdMy45LiBEdWFsIFNlc3Npb25zCi0gICAgICAgICBbODNdMy4xMC4gQXV0b21hdGluZyBGVFAg U2Vzc2lvbnMKLSAgICAgICAgICAgIFs4NF0zLjEwLjEuIEZUUC1TcGVjaWZpYyBWYXJpYWJsZXMg YW5kIEZ1bmN0aW9ucwotICAgICAgICAgICAgWzg1XTMuMTAuMi4gRXhhbXBsZXMKLSAgICAgICAg ICAgIFs4Nl0zLjEwLjMuIEF1dG9tYXRpbmcgU2VjdXJlIEZUUCBDb25uZWN0aW9ucwotICAgICAg ICAgWzg3XTMuMTEuIEFkdmFuY2VkIEZUUCBQcm90b2NvbCBGZWF0dXJlcyAgWzg4XTQuIEZJTEUg U0NBTk5JTkcKLSAgICBbODldNS4gRklMRSBBTkQgRElSRUNUT1JZIE5BTUVTIENPTlRBSU5JTkcg U1BBQ0VTCi0gICAgWzkwXTYuIE9USEVSIENPTU1BTkQgUEFSU0lORyBJTVBST1ZFTUVOVFMKLSAg ICAgICAgIFs5MV02LjEuIEdyb3VwaW5nIE1hY3JvIEFyZ3VtZW50cwotICAgICAgICAgWzkyXTYu Mi4gRGlyZWN0b3J5IGFuZCBGaWxlIE5hbWUgQ29tcGxldGlvbgotICAgICAgICAgWzkzXTYuMy4g UGFzc2luZyBBcmd1bWVudHMgdG8gQ29tbWFuZCBGaWxlcwotICAgICAgICAgWzk0XTYuNC4gTW9y ZS1Qcm9tcHRpbmcKLSAgICAgICAgIFs5NV02LjUuIENvbW1hcyBpbiBNYWNybyBEZWZpbml0aW9u cwotICAgICAgICAgWzk2XTYuNi4gQXJyb3cgS2V5cwotICAgIFs5N103LiBORVcgQ09NTUFORFMg QU5EIFNXSVRDSEVTCi0gICAgWzk4XTguIFNDUklQVElORyBJTVBST1ZFTUVOVFMKLSAgICAgICAg IFs5OV04LjEuIFBlcmZvcm1hbmNlIGFuZCBEZWJ1Z2dpbmcKLSAgICAgICAgIFsxMDBdOC4yLiBV c2luZyBNYWNyb3MgYXMgTnVtZXJpYyBWYXJpYWJsZXMKLSAgICAgICAgIFsxMDFdOC4zLiBOZXcg SUYgQ29uZGl0aW9ucwotICAgICAgICAgWzEwMl04LjQuIFRoZSBPTl9VTktOT1dOX0NPTU1BTkQg YW5kIE9OX0NEIE1hY3JvcwotICAgICAgICAgWzEwM104LjUuIFRoZSBTSE9XIE1BQ1JPIENvbW1h bmQKLSAgICAgICAgIFsxMDRdOC42LiBBcnJheXMKLSAgICAgICAgIFsxMDVdOC43LiBOZXcgb3Ig SW1wcm92ZWQgQnVpbHQtaW4gVmFyaWFibGVzIGFuZCBGdW5jdGlvbnMKLSAgICAgICAgIFsxMDZd OC44LiBUaGUgUkVUVVJOIGFuZCBFTkQgQ29tbWFuZHMKLSAgICAgICAgIFsxMDddOC45LiBVTkRF RklOaW5nIEdyb3VwcyBvZiBWYXJpYWJsZXMKLSAgICAgICAgIFsxMDhdOC4xMC4gVGhlIElOUFVU IGFuZCBNSU5QVVQgQ29tbWFuZHMKLSAgICAgICAgIFsxMDldOC4xMS4gTGVhcm5lZCBTY3JpcHRz Ci0gICAgICAgICBbMTEwXTguMTIuIFBhdHRlcm4gTWF0Y2hpbmcKLSAgICAgICAgIFsxMTFdOC4x My4gRGF0ZXMgYW5kIFRpbWVzCi0gICAgICAgICBbMTEyXTguMTQuIFRyYXBwaW5nIEtleWJvYXJk IEludGVycnVwdGlvbgotICAgIFsxMTNdOS4gUy1FWFBSRVNTSU9OUwotICAgICAgICAgWzExNF05 LjEuIFdoYXQgaXMgYW4gUy1FeHByZXNzaW9uPwotICAgICAgICAgWzExNV05LjIuIEludGVnZXIg YW5kIEZsb2F0aW5nLVBvaW50LUFyaXRobWV0aWMKLSAgICAgICAgIFsxMTZdOS4zLiBIb3cgdG8g VXNlIFMtRXhwcmVzc2lvbnMKLSAgICAgICAgIFsxMTddOS40LiBTdW1tYXJ5IG9mIEJ1aWx0LWlu IENvbnN0YW50cyBhbmQgT3BlcmF0b3JzCi0gICAgICAgICBbMTE4XTkuNS4gVmFyaWFibGVzCi0g ICAgICAgICBbMTE5XTkuNi4gQXNzaWdubWVudHMgYW5kIFNjb3BlCi0gICAgICAgICBbMTIwXTku Ny4gQ29uZGl0aW9uYWwgRXhwcmVzc2lvbnMKLSAgICAgICAgIFsxMjFdOS44LiBFeHRlbnNpYmls aXR5Ci0gICAgICAgICBbMTIyXTkuOS4gRXhhbXBsZXMKLSAgICAgICAgIFsxMjNdOS4xMC4gRGlm ZmVyZW5jZXMgZnJvbSBBbGdlYnJhaWMgTm90YXRpb24KLSAgICAgICAgIFsxMjRdOS4xMS5EaWZm ZXJlbmNlcyBmcm9tIExpc3AKLSAgICBbMTI1XTEwLiBGSUxFIFRSQU5TRkVSCi0gICAgWzEyNl0x MS4gTU9ERU1TIEFORCBESUFMSU5HCi0gICAgWzEyN10xMi4gVEVSTUlOQUwgQ09OTkVDVElPTgot ICAgIFsxMjhdMTMuIENIQVJBQ1RFUiBTRVRTCi0gICAgWzEyOV0xNC4gRElBTE9VVCBGUk9NIFRF TE5FVCBURVJNSU5BTCBTRVJWRVJTCi0gICAgWzEzMF0xNS4gQ09QSU5HIFdJVEggQlJPS0VOIEtF Uk1JVCBQQVJUTkVSUwotICAgIFsxMzFdMTYuIE5FVyBDT01NQU5ELUxJTkUgT1BUSU9OUwotICAg IFsxMzJdMTcuIExPR1MKLQotICAgWyBbMTMzXVRvcCBdIFsgWzEzNF1DLUtlcm1pdCBdIFsgWzEz NV1LZXJtaXQgSG9tZSBdCi0KLTAuIFdIQVQnUyBORVcKLQotICAgVGhlIEluaXRpYWxpemF0aW9u IGFuZCBDdXN0b21pemF0aW9uIEZpbGVzCi0gICAgICAgICAgQy1LZXJtaXQgOC4wIG5vdyBzdXBw b3J0cyBzcGVjaWZpY2F0aW9uIG9mIHRoZSBpbml0aWFsaXphdGlvbgotICAgICAgICAgIGZpbGUg bmFtZSAocGF0aCkgaW4gYW4gZW52aXJvbm1lbnQgdmFyaWFibGUsIENLRVJNSVRfSU5JLiBJdAot ICAgICAgICAgIGFsc28gcmVsaWVzIGZhciBsZXNzIHRoYW4gYmVmb3JlIG9uIHRoZSBpbml0aWFs aXphdGlvbiBmb3IKLSAgICAgICAgICBmdW5jdGlvbmluZy4gU2VlIFsxMzZdU2VjdGlvbiA1IG9m IHRoZSBVbml4IEMtS2VybWl0Ci0gICAgICAgICAgWzEzN11pbnN0YWxsYXRpb24gaW5zdHJ1Y3Rp b25zIGZvciBkZXRhaWxzLiBBcyBvZiB2ZXJzaW9uCi0gICAgICAgICAgOC4wLjIwMSwgQy1LZXJt aXQgYWxzbyBleGVjdXRlcyB5b3VyIGN1c3RvbWl6YXRpb24gZmlsZSAoaWYgeW91Ci0gICAgICAg ICAgaGF2ZSBvbmUpIGV2ZW4gaWYgdGhlIGluaXRpYWxpemF0aW9uIGZpbGUgd2FzIG5vdCBmb3Vu ZC4KLSAgICAgICAgICBQcmV2aW91c2x5LCB0aGUgY3VzdG9taXphdGlvbiBmaWxlIHdhcyBleGVj dXRlZCBieSBhIFRBS0UKLSAgICAgICAgICBjb21tYW5kIGluIHRoZSBpbml0aWFsaXphdGlvbiBm aWxlIChhbmQgaXQgc3RpbGwgaXMsIGlmIGFuCi0gICAgICAgICAgaW5pdGlhbGl6YXRpb24gaXMg Zm91bmQpLgotCi0gICBJbmNvbXBhdGlibGUgQ2hhbmdlcwotICAgICAgICAgIEFzIGFsd2F5cywg d2UgZG8gb3VyIGJlc3QgdG8gYXZvaWQgY2hhbmdlcyB0aGF0IGJyZWFrIGV4aXN0aW5nCi0gICAg ICAgICAgc2NyaXB0cy4gSG93ZXZlciwgQy1LZXJtaXQgOC4wIGRvZXMgaW5jbHVkZSBhIHJhdGhl ciBwZXJ2YXNpdmUKLSAgICAgICAgICBzeW50YXggY2hhbmdlIHRoYXQgbWlnaHQgYWx0ZXIgdGhl IGJlaGF2aW9yIG9mIHNjcmlwdHMgdGhhdAotICAgICAgICAgIGRlcGVuZCBvbiB0aGUgcHJldmlv dXMgYmVoYXZpb3IuIEFzIGRlc2NyaWJlZCBpbiBbMTM4XVNlY3Rpb24gNSwKLSAgICAgICAgICBD LUtlcm1pdCBub3cgYWNjZXB0cyBkb3VibGVxdW90ZXMgaW4gbW9zdCBjb250ZXh0cyB3aGVyZSB5 b3UKLSAgICAgICAgICBwcmV2aW91c2x5IGhhZCB0byB1c2UgYnJhY2VzIHRvIGdyb3VwIG11bHRp cGxlIHdvcmRzIGludG8gYQotICAgICAgICAgIHNpbmdsZSBmaWVsZCwgb3IgdG8gZm9yY2UgaW5j bHVzaW9uIG9mIGxlYWRpbmcgb3IgdHJhaWxpbmcKLSAgICAgICAgICBibGFua3MuIE1vc3Qgbm90 aWNlYWJseSwgaW4gQy1LZXJtaXQgNy4wIGFuZCBlYXJsaWVyOgotCi0gIGVjaG8ge3RoaXMgaXMg YSBzdHJpbmd9Ci0KLSAgICAgICAgICB3b3VsZCBwcmludDoKLQotICB0aGlzIGlzIGEgc3RyaW5n Ci0KLSAgICAgICAgICB3aGVyZWFzOgotCi0gIGVjaG8gInRoaXMgaXMgYSBzdHJpbmciCi0KLSAg ICAgICAgICBwcmludGVkOgotCi0gICJ0aGlzIGlzIGEgc3RyaW5nIgotCi0gICAgICAgICAgSW4g Qy1LZXJtaXQgOC4wLCBib3RoIHByaW50OgotCi0gIHRoaXMgaXMgYSBzdHJpbmcKLQotICAgICAg ICAgIFRvIGZvcmNlIHRoZSBkb3VibGVxdW90ZXMgdG8gYmUgdHJlYXRlZCBhcyBwYXJ0IG9mIHRo ZSBzdHJpbmcsCi0gICAgICAgICAgdXNlIGVpdGhlciBvZiB0aGUgZm9sbG93aW5nIGZvcm1zOgot Ci0gIGVjaG8geyJ0aGlzIGlzIGEgc3RyaW5nIn0KLSAgZWNobyAiInRoaXMgaXMgYSBzdHJpbmci IgotCi0gICAgICAgICAgU2ltaWxhcmx5LCB0byBmb3JjZSBicmFjZXMgdG8gYmUgdHJlYXRlZCBh cyBwYXJ0IG9mIHRoZSBzdHJpbmc6Ci0KLSAgZWNobyAie3RoaXMgaXMgYSBzdHJpbmd9IgotICBl Y2hvIHt7dGhpcyBpcyBhIHN0cmluZ319Ci0KLSAgICAgICAgICBPdGhlciBpbmNvbXBhdGliaWxp dGllczoKLQotICAgICAgICAgMS4gVXNpbmcgdGhlIFNFVCBIT1NUIGNvbW1hbmQgdG8gbWFrZSBI VFRQIGNvbm5lY3Rpb25zIGlzIG5vCi0gICAgICAgICAgICBsb25nZXIgc3VwcG9ydGVkLiBJbnN0 ZWFkLCB1c2UgdGhlIG5ldyBIVFRQIE9QRU4gY29tbWFuZCwKLSAgICAgICAgICAgIGRlc2NyaWJl ZCBpbiBbMTM5XVNlY3Rpb24gMi4yLgotCi0gICBDLUtlcm1pdCA3LjEgQWxwaGEuMDEgKDggRGVj ZW1iZXIgMjAwMCkKLQotICAgICBJdHMgbWFqb3IgbmV3IGZlYXR1cmVzIGFyZSB0aG9zZSBsaXN0 ZWQgaW4gdGhlIFsxNDBdVGFibGUgb2YKLSAgICAgICAgICBDb250ZW50czogdGhlIEZUUCBjbGll bnQsIGZpbGUgc2Nhbm5pbmcsIGNvbW1hbmQgcGFyc2luZyBhbmQKLSAgICAgICAgICBzY3JpcHRp bmcgaW1wcm92ZW1lbnRzLCBTLUV4cHJlc3Npb25zLCBhbmQgc3VwcG9ydCBmb3IgdGhlCi0gICAg ICAgICAgVGVsbmV0IENvbSBQb3J0IE9wdGlvbiwgcGx1cyB3aWRlciBhdmFpbGFiaWxpdHkgb2Yg dGhlIEtlcmJlcm9zLAotICAgICAgICAgIFNTTC9UTFMsIGFuZCBTUlAgc2VjdXJpdHkgb3B0aW9u cyBmb3Igc2VjdXJlIEludGVybmV0Ci0gICAgICAgICAgY29ubmVjdGlvbnMuCi0KLSAgIEMtS2Vy bWl0IDcuMS4xOTkgQWxwaGEuMDIgKDQgSmFudWFyeSAyMDAxKQotCi0gICAgICAgICAgKyBDLUtl cm1pdCBub3cgYWNjZXB0cyBbMTQxXUZUUCwgVEVMTkVULCBhbmQgSUtTRCBVUkxzIGFzIGl0cwot ICAgICAgICAgICAgZmlyc3QgY29tbWFuZC1saW5lIGFyZ3VtZW50LgotICAgICAgICAgICsgQ2hh cmFjdGVyLXNldCB0cmFuc2xhdGlvbiBhZGRlZCB0byB0aGUgRlRQIGNsaWVudCBmb3IKLSAgICAg ICAgICAgIFsxNDJdZmlsZW5hbWVzLgotICAgICAgICAgICsgT3B0aW9uYWwgWzE0M11zZXR0aW5n IG9mIGRhdGUgb2YgaW5jb21pbmcgZmlsZXMgYnkgRlRQIFtNXUdFVAotICAgICAgICAgICAgZnJv bSB0aGUgc2VydmVyIGRhdGUuCi0gICAgICAgICAgKyBbMTQ0XUZUUCBDSEVDSyBmaWxlbmFtZSBh ZGRlZCB0byBsZXQgRlRQIGNsaWVudCBjaGVjayB0aGUKLSAgICAgICAgICAgIGV4aXN0ZW5jZSBv ZiBhIGZpbGUgb24gdGhlIHNlcnZlci4KLSAgICAgICAgICArIFsxNDVdRlRQIEdFVCAvTkFNRUxJ U1Q6ZmlsZW5hbWUgYWRkZWQgdG8gZ2V0IGxpc3Qgb2Ygc2VydmVyCi0gICAgICAgICAgICBmaWxl bmFtZXMgaW50byBhIGxvY2FsIGZpbGUuCi0gICAgICAgICAgKyBbMTQ2XUZUUCBbTV1QVVQgL1NF UlZFUi1SRU5BTUU6dGVtcGxhdGUgYWRkZWQgdG8gbWFrZSBzZXJ2ZXIKLSAgICAgICAgICAgIHJl bmFtZSBhIGZpbGUgYXMgaW5kaWNhdGVkIGJ5IHRoZSB0ZW1wbGF0ZSBhZnRlciBpdCBoYXMKLSAg ICAgICAgICAgIGFycml2ZWQgY29tcGxldGVseS4KLSAgICAgICAgICArIEZUUCBbTV1HRVQgL1NF UlZFUi1SRU5BTUU6dGVtcGxhdGUgYWRkZWQgdG8gbWFrZSBzZXJ2ZXIgcmVuYW1lCi0gICAgICAg ICAgICBhIGZpbGUgYXMgaW5kaWNhdGVkIGJ5IHRoZSB0ZW1wbGF0ZSBhZnRlciBpdCBoYXMgYmVl biBzZW50Ci0gICAgICAgICAgICBjb21wbGV0ZWx5LgotICAgICAgICAgICsgRlRQIFsxNDddVkRJ UkVDVE9SWSBhZGRlZCBmb3IgZ2V0dGluZyB2ZXJib3NlIGRpcmVjdG9yeQotICAgICAgICAgICAg bGlzdGluZ3MgZnJvbSBUT1BTLTIwLgotICAgICAgICAgICsgWzE0OF1GVFAgVFlQRSBURU5FWCBh ZGRlZCBmb3IgdHJhbnNmZXJyaW5nIDgtYml0IGJpbmFyeSBmaWxlcwotICAgICAgICAgICAgd2l0 aCBQRFAtMTBzLgotICAgICAgICAgICsgQWRkZWQgWzE0OV1hdXRvbWF0aWMgdGV4dC9iaW5hcnkg bW9kZSBzd2l0Y2hpbmcgZm9yIEZUUAotICAgICAgICAgICAgW01dR0VULCBiYXNlZCBvbiBmaWxl bmFtZSBwYXR0ZXJucyAoZS5nLiAqLnppcCwgKi5neiwgKi5leGUKLSAgICAgICAgICAgIGFyZSBi aW5hcnk7ICoudHh0LCAqLmMgYXJlIHRleHQpLgotICAgICAgICAgICsgWzE1MF1TRVQgU0VORCBJ LVBBQ0tFVFMgT0ZGIGFkZGVkIGZvciBjb3Bpbmcgd2l0aCBLZXJtaXQKLSAgICAgICAgICAgIHNl cnZlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCBJIHBhY2tldHMuCi0gICAgICAgICAgKyBBIG5ldyBv cHRpb24gd2FzIGFkZGVkIHRvIFsxNTFdXGZ3b3JkKCkgYW5kIFxmc3BsaXQoKSBmb3IKLSAgICAg ICAgICAgIHBhcnNpbmcgY29tbWEtc2VwYXJhdGVkIGxpc3RzIHRoYXQgbWlnaHQgY29udGFpbiBl bXB0eQotICAgICAgICAgICAgZWxlbWVudHMuCi0gICAgICAgICAgKyBCdWcgZml4ZXMgaW5jbHVk aW5nOgotICAgICAgICAgICAgICAgbyB7fSBvciAiIiBjb3VsZCBub3QgYmUgdXNlZCBhcyBleHBl Y3RlZCB0byByZXByZXNlbnQgdGhlCi0gICAgICAgICAgICAgICAgIGVtcHR5IHN0cmluZy4KLSAg ICAgICAgICAgICAgIG8gLC0gb24gYSBsaW5lIGJ5IGl0c2VsZiBpbiBhIG1hY3JvIGRlZmluaXRp b24gY2F1c2VkCi0gICAgICAgICAgICAgICAgIHN1YnNlcXVlbnQgc3RhdGVtZW50cyB0byBiZSBz a2lwcGVkLgotICAgICAgICAgICAgICAgbyBGVFAgW01dR0VUIGRpZG4ndCB3b3JrIHJpZ2h0IGlm IHBhdGggc2VnbWVudHMgd2VyZQotICAgICAgICAgICAgICAgICBpbmNsdWRlZCBpbiB0aGUgZmls ZXNwZWMuCi0gICAgICAgICAgICAgICBvIEZUUCBNR0VULCBpZiBpbnRlcnJ1cHRlZCwgZGlkIG5v dCBjbGVhciBpdHMgZmlsZSBsaXN0LgotICAgICAgICAgICAgICAgbyBWYXJpb3VzIHByb2JsZW1z IHdpdGggRlRQIFBVVCAvQVMtTkFNRSB0aGF0IG5vYm9keQotICAgICAgICAgICAgICAgICBub3Rp Y2VkLgotICAgICAgICAgICAgICAgbyBTb21lIEZUUCBtZXNzYWdlcyBhbmQgZGlzcGxheXMgaW50 ZXJmZXJlZCB3aXRoIGVhY2gKLSAgICAgICAgICAgICAgICAgb3RoZXIuCi0gICAgICAgICAgICAg ICBvIFBhcnNpbmcgb2YgWUVTVEVSREFZLCBUT0RBWSwgYW5kIFRPTU9SUk9XIGluIGRhdGUtdGlt ZQotICAgICAgICAgICAgICAgICBmaWVsZHMgd2FzIGJyb2tlbi4KLSAgICAgICAgICAgICAgIG8g QXV0b21hdGljIG9sZC10by1uZXcgZGlhbGluZyBkaXJlY3RvcnkgZm9ybWF0IGNvbnZlcnNpb24K LSAgICAgICAgICAgICAgICAgd2FzIGJyb2tlbiBvbiBWTVMuCi0gICAgICAgICAgICAgICBvIFZh cmlvdXMgc291cmNlLWNvZGUgcG9ydGFiaWxpdHkgcHJvYmxlbXMgZml4ZWQuCi0gICAgICAgICAg KyBJbXByb3ZlbWVudCBvZiB2YXJpb3VzIEhFTFAgYW5kIFNIT1cgbWVzc2FnZXMuCi0KLSAgIEMt S2VybWl0IDcuMS4xOTkgQWxwaGEuMDQgKDEgQXByaWwgMjAwMSkKLQotICAgICAgICAgICsgQmln IGNoYW5nZXM6Ci0gICAgICAgICAgICAgICBvIENoYW5nZWQgZGVmYXVsdCBtb2RlbSB0eXBlIGZy b20gTk9ORSB0byBHRU5FUklDLgotICAgICAgICAgICAgICAgbyBHZW5lcmljIGRpYWxpbmcgbm93 IHNlbmRzIG5vIGluaXQgc3RyaW5nIGF0IGFsbC4KLSAgICAgICAgICAgICAgIG8gQ2hhbmdlZCBk ZWZhdWx0IHRlcm1pbmFsIGJ5dGVzaXplIGZyb20gNyB0byA4LgotICAgICAgICAgICsgTmV3IGZl YXR1cmVzOgotICAgICAgICAgICAgICAgbyBTRVQgU0VTU0lPTi1MT0cgVElNRVNUQU1QRUQtVEVY VCBmb3IgdGltZXN0YW1wZWQgc2Vzc2lvbgotICAgICAgICAgICAgICAgICBsb2cuCi0gICAgICAg ICAgKyBOZXcgbW9kZW0gdHlwZXM6Ci0gICAgICAgICAgICAgICBvIENvbmV4YW50IG1vZGVtIGZh bWlseQotICAgICAgICAgICAgICAgbyBMdWNlbnQgVkVOVVMgY2hpcHNldAotICAgICAgICAgICAg ICAgbyBQQ1RlbCBWLjkwIGNoaXBzZXQKLSAgICAgICAgICAgICAgIG8gWm9vbSBWLjkwCi0gICAg ICAgICAgICAgICBvIFpvb20gVi45MgotICAgICAgICAgICsgRlRQIGNsaWVudDoKLSAgICAgICAg ICAgICAgIG8gRlRQIE9QRU4gL1BBU1NJVkUgYW5kIC9BQ1RJVkUgc3dpdGNoZXMgYWRkZWQuCi0g ICAgICAgICAgICAgICBvIE5vdyB3b3JrcyB3aXRoIHNlcnZlcnMgdGhhdCB0aGF0IGRvbid0IGlu Y2x1ZGUgcGF0aCBpbgotICAgICAgICAgICAgICAgICBOTFNUIHJlc3BvbnNlLgotICAgICAgICAg ICAgICAgbyBGaXhlZCBTRU5EIC9SRUNVUlNJVkUgbm90IHRvIGZvbGxvdyBzeW1saW5rcyAoVU5J WCkuCi0gICAgICAgICAgICAgICBvIFNFVCBGVFAgVkVSQk9TRS1NT0RFIGRlZmF1bHQgaXMgbm93 IE9GRiBpbnN0ZWFkIG9mIE9OLgotICAgICAgICAgICsgS2VybWl0IHByb3RvY29sOgotICAgICAg ICAgICAgICAgbyBGaXhlZCB3aGF0IEkgaG9wZSBpcyB0aGUgbGFzdCAiUmVjZWl2ZSB3aW5kb3cg ZnVsbCIKLSAgICAgICAgICAgICAgICAgZXJyb3IuCi0gICAgICAgICAgICAgICBvIFNFVCBQUkVG SVhJTkcgb3IgU0VUIENPTlRST0wgUFJFRklYIG5vdyBhdXRvbWF0aWNhbGx5Ci0gICAgICAgICAg ICAgICAgIHNldHMgQ0xFQVJDSEFOTkVMIE9GRi4KLSAgICAgICAgICAgICAgIG8gRml4ZWQgaW5j b3JyZWN0IHJlcG9ydCBvZiBudW1iZXIgb2YgZmlsZXMgdHJhbnNmZXJyZWQgYXQKLSAgICAgICAg ICAgICAgICAgZW5kIG9mIHRyYW5zZmVyLgotICAgICAgICAgICAgICAgbyBGaXhlZCBTRU5EIC9S RUNVUlNJVkUgbm90IHRvIGZvbGxvdyBzeW1saW5rcyAoVU5JWCkuCi0gICAgICAgICAgKyBVTklY OgotICAgICAgICAgICAgICAgbyBIVFRQIGFuZCBzaGFkb3cgcGFzc3dvcmRzIGVuYWJsZWQgZm9y IFNDTyA1LjAuNi4KLSAgICAgICAgICAgICAgIG8gRXZlbiB3aXRoIFNFVCBGSUxFTkFNRVMgQ09O VkVSVEVELCBzcGFjZXMgd2VyZSBzdGlsbAotICAgICAgICAgICAgICAgICBhY2NlcHRlZCBpbiBp bmNvbWluZyBmaWxlbmFtZXM7IG5vdyB0aGV5IGFyZSBjb252ZXJ0ZWQgdG8KLSAgICAgICAgICAg ICAgICAgdW5kZXJzY29yZXMuCi0gICAgICAgICAgICAgICBvIEFkZGVkIHN1cHBvcnQgZm9yIGNv bXBpbGUtdGltZSBta3RlbXAoKS9ta3N0ZW1wKCkKLSAgICAgICAgICAgICAgICAgc2VsZWN0aW9u LgotICAgICAgICAgICsgVk1TOgotICAgICAgICAgICAgICAgbyBTZXNzaW9uLWxvZyBmb3JtYXQg Zm9yIHNjcmlwdGVkIHNlc3Npb25zIGZpeGVkLgotICAgICAgICAgICsgU2NyaXB0aW5nOgotICAg ICAgICAgICAgICAgbyBGaXhlZCBcZnJkaXIoKSBub3QgdG8gZm9sbG93IHN5bWxpbmtzIChVTklY KS4KLSAgICAgICAgICAgICAgIG8gRml4ZWQgXGZkYXkoKSBub3QgdG8gZHVtcCBjb3JlIGZvciBk YXRlcyBwcmlvciB0byAxNyBNYXIKLSAgICAgICAgICAgICAgICAgMTg1OC4KLSAgICAgICAgICAr IEdlbmVyYWw6Ci0gICAgICAgICAgICAgICBvICJDbG9zaW5nIGJsYWguLi4iIG1lc3NhZ2UgdXBv biBleGl0IGNvdWxkIG5vdCBiZQotICAgICAgICAgICAgICAgICBzdXBwcmVzc2VkLgotICAgICAg ICAgICAgICAgbyBBZGRlZCAvUEFHRSBhbmQgL05PUEFHRSB0byBERUxFVEUgc3dpdGNoZXMuCi0g ICAgICAgICAgICAgICBvIEFkZGVkIEdPIHJlc3BvbnNlIGZvciBERUxFVEUgL0FTSyAoZGVsZXRl IGFsbCB0aGUgcmVzdAotICAgICAgICAgICAgICAgICB3aXRob3V0IGFza2luZykuCi0gICAgICAg ICAgICAgICBvIEFkZGVkIEdPIHJlc3BvbnNlIHRvICJtb3JlPyIgcHJvbXB0IChmb3IgbXVsdGkt cGFnZQotICAgICAgICAgICAgICAgICBzY3JlZW4gb3V0cHV0KS4KLSAgICAgICAgICAgICAgIG8g VXBkYXRlZCBIRUxQIHRleHRzLgotCi0gICBDLUtlcm1pdCA3LjEuMTk5IEJldGEuMDEgKDEwIE1h eSAyMDAxKQotCi0gICAgICAgICAgKyBGVFAgY2xpZW50IHZlcmJvc2l0eSBhZGp1c3RtZW50cy4K LSAgICAgICAgICArIEJ1ZyB3aXRoIGdlbmVyaWMgbW9kZW0gZGlhbGluZyBwYXVzaW5nIHNldmVy YWwgc2VjcyBmaXhlZC4KLSAgICAgICAgICArIFNFVCBIT1NUIC9VU0VSOiwgU0VUIExPR0lOIFVT RVJJRCwgZXRjLCBmaXhlZCB3aGVuIGdpdmVuIG5vCi0gICAgICAgICAgICB1c2VyIElELgotICAg ICAgICAgICsgQSBjb3VwbGUgXHYoZG1fYmxhaCkgZGlhbCBtb2RpZmllciB2YXJpYWJsZXMgYWRk ZWQuCi0gICAgICAgICAgKyAiLS12ZXJzaW9uIiBjb21tYW5kLWxpbmUgc3dpdGNoIGFkZGVkLgot ICAgICAgICAgICsgRml4ZWQgTmV0QlNEIHNlcmlhbC1wb3J0IERUUiBoYW5kbGluZy4KLSAgICAg ICAgICArIExvdHMgb2Ygc3ludGF4IGNsZWFudXBzIGZvciBGbGV4ZWxpbnQgYW5kIGdjYyAtV2Fs bC4KLSAgICAgICAgICArIEZpeGVkIG1vZGVtLXR5cGUgYWxpYXNlcyB0byBub3QgdGFrZSBwcmVj ZWRlbmNlIG92ZXIgcmVhbAotICAgICAgICAgICAgbmFtZXMuCi0gICAgICAgICAgKyBGaXhlZCBm dW5ueSB0cmVhdG1lbnQgb2YgZG91YmxlcXVvdGVzIGJ5IEVDSE8gY29tbWFuZC4KLSAgICAgICAg ICArIEVuYWJsZWQgU0VUIFNFU1NJT04tTE9HIGZvciBWTVMgYW5kIG90aGVyIG5vbi1VTklYIHBs YXRmb3Jtcy4KLSAgICAgICAgICArIEZpeGVkIGNoYW5naW5nIGRpcmVjdGlvbiBpbiBjb21tYW5k IGhpc3RvcnkgYnVmZmVyLgotICAgICAgICAgICsgRml4ZWQgaGFuZGxpbmcgb2YgSUtTRCBVUkxz LgotICAgICAgICAgICsgTWFkZSBzdXJlIERFTEVURSBwcmludHMgYSBtZXNzYWdlIGlmIGl0IGdv dCBhbnkgZXJyb3JzLgotCi0gICBDLUtlcm1pdCA4LjAuMjAwIEJldGEuMDIgKDI4IEp1bmUgMjAw MSkKLQotICAgICAgICAgICsgTWFqb3IgdmVyc2lvbiBudW1iZXIgaW5jcmVhc2VkIGZyb20gNyB0 byA4LgotICAgICAgICAgICsgWzE1Ml1TU0ggY29tbWFuZC4KLSAgICAgICAgICArIE1vcmUtY29u c2lzdGVudCBLZXJtaXQgcHJvdG9jb2wgZGVmYXVsdHMuCi0gICAgICAgICAgKyBDT05ORUNUIGlk bGUgdGltZW91dCBhbmQgYWN0aW9uIHNlbGVjdGlvbi4KLSAgICAgICAgICArIENPTk5FQ1Qgc3Rh dHVzIHZhcmlhYmxlLgotICAgICAgICAgICsgQSB3YXkgdG8gYWxsb2NhdGUgbW9yZSBzcGFjZSBm b3IgZmlsZW5hbWUgbGlzdHMuCi0gICAgICAgICAgKyBQc2V1ZG90ZXJtaW5hbCBoYW5kbGVyIGZp eGVkIGZvciBsYXRlLW1vZGVsIExpbnV4ZXMuCi0gICAgICAgICAgKyBDb21tYW5kLWxpbmUgb3B0 aW9uIC1kZCBmb3IgdGltZXN0YW1wZWQgZGVidWcgbG9nLgotICAgICAgICAgICsgRG93bmxvYWQg ZGlyZWN0b3J5IG5vdyB3b3JrcyBmb3IgZXh0ZXJuYWwgcHJvdG9jb2xzIHRvby4KLSAgICAgICAg ICArIEdSRVAgL0NPVU5UOnZhcmlhYmxlLgotICAgICAgICAgICsgU0VUIEFUVFJJQlVURSBSRUNP UkQtRk9STUFUIHsgT0ZGLCBPTiB9LgotICAgICAgICAgICsgQnVnIGZpeGVzLgotCi0gICBDLUtl cm1pdCA4LjAuMjAwIEJldGEuMDMgKDkgU2VwIDIwMDEpCi0KLSAgICAgICAgICArIFsxNTNdSFRU UCAxLjEgY29ubmVjdGlvbnMgYW5kIHNjcmlwdGluZwotICAgICAgICAgICsgWzE1NF1PTl9DVFJM QyBtYWNybyBmb3IgdHJhcHBpbmcgQ3RybC1DIGluIHNjcmlwdHMKLSAgICAgICAgICArIFsxNTVd RGF0ZS10aW1lIHBhcnNpbmcgaW1wcm92ZW1lbnRzLCB0aW1lem9uZXMsIGNvbXBhcmlzb24sCi0g ICAgICAgICAgICBhcml0aG1ldGljCi0gICAgICAgICAgKyBbMTU2XVBhdHRlcm4tbWF0Y2hpbmcg aW1wcm92ZW1lbnRzCi0gICAgICAgICAgKyBGVFAgaW1wcm92ZW1lbnRzCi0gICAgICAgICAgKyBT RVQgRVhJVCBIQU5HVVAgeyBPTiwgT0ZGIH0KLSAgICAgICAgICArIFNFVCBGSUxFIEVPRiB7IENU UkwtWiwgTEVOR1RIIH0KLSAgICAgICAgICArIEFTS1tRXSAvVElNRU9VVAotICAgICAgICAgICsg QnVnIGZpeGVzCi0gICAgICAgICAgKyBOZXcgcGxhdGZvcm1zCi0KLSAgIEMtS2VybWl0IDguMC4y MDAgQmV0YS4wNCAoMTYgTm92IDIwMDEpCi0KLSAgICAgICAgICArIFsxNTddTmV3IFVuaXggbWFu IHBhZ2UKLSAgICAgICAgICArIFsxNThdTmV3IFVuaXggaW5zdGFsbGF0aW9uIGluc3RydWN0aW9u cwotICAgICAgICAgICsgU0VUIFRFTE9QVCBwb2xpY2llcyBhcmUgbm93IGVuZm9yY2VkIG9uIG5v bi1UZWxuZXQgcG9ydHMgaWYKLSAgICAgICAgICAgIHRoZSBzZXJ2ZXIgYmVnaW5zIFRlbG5ldCBu ZWdvdGlhdGlvbnMuCi0gICAgICAgICAgKyBTRVQgVEVSTUlOQUwgSURMRS1BQ1RJT04geyBURUxO RVQtTk9QLCBURUxORVQtQVlUIH0uCi0gICAgICAgICAgKyBVVUNQIGxvY2tmaWxlIGNyZWF0aW9u IHJhY2UgY29uZGl0aW9uIGZpeGVkLgotICAgICAgICAgICsgRGlhbG91dCwgbW9kZW0gc2lnbmFs cywgaGFuZ3VwLCBoYXJkd2FyZSBmbG93IGNvbnRyb2wsIGV0YywKLSAgICAgICAgICAgIHRlc3Rl ZCBleHRlbnNpdmVseSBvbiBtYW55IHBsYXRmb3JtcywgbnVtZXJvdXMgcHJvYmxlbXMgZml4ZWQu Ci0gICAgICAgICAgKyBJbXByb3ZlZCBoaW50cyB3aGVuIGRpYWxpbmcgZmFpbHMuCi0gICAgICAg ICAgKyBTRVQgU1RPUC1CSVRTIDIgY2FuIG5vdyBiZSBnaXZlbiB3aXRob3V0IFNFVCBGTE9XIEhB UkRXQVJFLgotICAgICAgICAgICsgTWFqb3IgaW1wcm92ZW1lbnRzIGluIFJGQyAyMjE3IFRlbG5l dCBDb20tUG9ydCBDb250cm9sLgotICAgICAgICAgICsgSW1wcm92ZWQgYWJpbGl0eSB0byBSRURJ QUwgYSBtb2RlbSBzZXJ2ZXIgcG9ydC4KLSAgICAgICAgICArIGtlcm1pdCAtaCBub3cgc2hvd3Mg dGhlIGNvbW1hbmQgbmFtZSBpbiB0aGUgdXNhZ2UgdXNhZ2UKLSAgICAgICAgICAgIHN0cmluZy4K LSAgICAgICAgICArIGtlcm1pdCAtaCBub3cgc2hvd3MgQUxMIGNvbW1hbmQtbGluZSBvcHRpb25z LgotICAgICAgICAgICsga2VybWl0IC1zIGJsYWgsIHdoZXJlIGJsYWggaXMgYSBzeW1saW5rLCBu b3cgd29ya3MuCi0gICAgICAgICAgKyAtLW5vcGVybXMgY29tbWFuZC1saW5lIG9wdGlvbiA9IFNF VCBBVFRSSUJVVEUgUEVSTUlTU0lPTlMgT0ZGLgotICAgICAgICAgICsgSFRUUCBhbmQgSFRUUFMg VVJMcyBub3cgc3VwcG9ydGVkIG9uIHRoZSBjb21tYW5kIGxpbmUuCi0gICAgICAgICAgKyBBbiBo dHRwIGNvbW1hbmQtbGluZSBwZXJzb25hbGl0eSBpcyBub3cgYXZhaWxhYmxlLgotICAgICAgICAg ICsgSW5pdGlhbGl6YXRpb24gZmlsZSBzdHJlYW1saW5lZCB0byBsb2FkIGZhc3RlciwgYW5hY2hy b25pc21zCi0gICAgICAgICAgICByZW1vdmVkLgotICAgICAgICAgICsgVXBkYXRlZCBORVdTLCBJ TlRSTywgSEVMUCB0ZXh0LCBTSE9XIGNvbW1hbmRzLiBJbiBwYXJ0aWN1bGFyLAotICAgICAgICAg ICAgc2VlIFNIT1cgQ09NTSwgSEVMUCBTRVQgTElORSwgSEVMUCBXQUlULgotICAgICAgICAgICsg RGF0ZS90aW1lIGFyaXRobWV0aWMgcm91dGluZXMgY29udmVydGVkIGZyb20gZmxvYXRpbmctcG9p bnQgdG8KLSAgICAgICAgICAgIGludGVnZXIgYXJpdGhtZXRpYyAoaW50ZXJuYWxseSkgZm9yIGdy ZWF0ZXIgYWNjdXJhY3kgYW5kCi0gICAgICAgICAgICBwb3J0YWJpbGl0eS4KLSAgICAgICAgICAr IFF1b3RlZCBzdHJpbmdzIGNvbnRhaW5pbmcgY29tbWFzIG5vIGxvbmdlciBicmVhayBtYWNybwot ICAgICAgICAgICAgZXhlY3V0aW9uLgotICAgICAgICAgICsgRHluYW1pYyBLZXJtaXQgZmlsZS10 cmFuc2ZlciB0aW1lb3V0cyBhcmUgbm93IG11Y2ggbW9yZQotICAgICAgICAgICAgYWdncmVzc2l2 ZS4KLSAgICAgICAgICArIE5ldyAiaG90IGtleXMiIHRvIHR1cm4gZGVidWcubG9nIG9uL29mZiBk dXJpbmcgZmlsZSB0cmFuc2Zlci4KLSAgICAgICAgICArIEltcHJvdmVkIGhpbnRzIHdoZW4gZmls ZSB0cmFuc2ZlciBmYWlscy4KLSAgICAgICAgICArIEZUUCBDRCBvcmllbnRhdGlvbiBtZXNzYWdl cyBhcmUgbm93IHByaW50ZWQuCi0gICAgICAgICAgKyAtUiBub3cgYWNjZXB0ZWQgb24gdGhlIEZU UCBjb21tYW5kIGxpbmUgdG8gcmVxdWVzdCBSZWN1cnNpb24uCi0gICAgICAgICAgKyAtbSBhbGxv d3MgQWN0aXZlIG9yIFBhc3NpdmUgbW9kZSB0byBiZSBjaG9zZW4gb24gdGhlIEZUUAotICAgICAg ICAgICAgY29tbWFuZCBsaW5lLgotICAgICAgICAgICsgLWRkIG9uIHRoZSBGVFAgY29tbWFuZCBs aW5lIGNyZWF0ZXMgYSB0aW1lc3RhbXBlZCBkZWJ1Zy5sb2cuCi0gICAgICAgICAgKyBGVFAgY29t bWFuZC1saW5lIHNlY3VyaXR5IG9wdGlvbnMgZmlsbGVkIGluLgotICAgICAgICAgICsgSW1wcm92 ZWQgYXV0b21hdGljIHRleHQvYmluYXJ5IG1vZGUgc3dpdGNoaW5nIGZvciBNR0VULgotICAgICAg ICAgICsgUmVtb3ZlZCBzcHVyaW91cyBlcnJvciBtZXNzYWdlcyB0aGF0IHNvbWV0aW1lcyBvY2N1 ciBkdXJpbmcKLSAgICAgICAgICAgIE1HRVQuCi0gICAgICAgICAgKyBESVJFQ1RPUlksIEdSRVAs IFRZUEUsIEhFQUQsIGFuZCBUQUlMIG5vdyBoYXZlIGEgL09VVFBVVDpmaWxlCi0gICAgICAgICAg ICBvcHRpb24uCi0gICAgICAgICAgKyBUWVBFIC9OVU1CRVIgYWRkcyBsaW5lIG51bWJlcnMuCi0g ICAgICAgICAgKyBDQVQgPSBUWVBFIC9OT1BBR0U7IE1PUkUgPSBUWVBFIC9QQUdFLgotICAgICAg ICAgICsgR0VUT0sgPy1oZWxwIGZpeGVkLgotICAgICAgICAgICsgXHYodGltZXN0YW1wKSAoPSAi XHYobmRhdGUpIFx2KHRpbWUpIikKLSAgICAgICAgICArIFx2KGhvdXIpIChob3VyIG9mIHRoZSBk YXksIDAtMjMpCi0gICAgICAgICAgKyBcZnVuaXgyZG9zcGF0aCgpIGNvbnZlcnRzIGEgVU5JWCBw YXRoICgvKSB0byBhIERPUyBvbmUgKFwpLgotICAgICAgICAgICsgXGZkb3MydW5peHBhdGgoKSBj b252ZXJ0cyBhIERPUyAoV2luZG93cywgT1MvMikgcGF0aCB0byBhIFVOSVgKLSAgICAgICAgICAg IG9uZS4KLSAgICAgICAgICArIFxma2V5d29yZHZhbCgpIHBhcnNlcyBuYW1lPXZhbHVlIHBhaXIs IGFsbG93cyBtYWNybyBrZXl3b3JkCi0gICAgICAgICAgICBwYXJhbWV0ZXJzLgotICAgICAgICAg ICsgV2Ugbm93IG1ha2UgZXZlcnkgYXR0ZW1wdCB0byBub3Qgd3JpdGUgcGFzc3dvcmRzIHRvIHRo ZQotICAgICAgICAgICAgZGVidWcubG9nLgotICAgICAgICAgICsgTmV3IENlcnRpZmljYXRlIEF1 dGhvcml0eSBjZXJ0aWZpY2F0ZXMgZmlsZSwgaW5jbHVkZXMgdGhlCi0gICAgICAgICAgICBLZXJt aXQgUHJvamVjdCBhdCBDb2x1bWJpYSBVbml2ZXJzaXR5IHNvIHlvdSBjYW4gYWNjZXNzIG91cgot ICAgICAgICAgICAgSUtTRCBzZWN1cmVseS4KLSAgICAgICAgICArIFNlY3VyZSB0YXJnZXRzIGlt cHJvdmVkIGFuZCBiZXR0ZXIgZG9jdW1lbnRlZCBpbiBVbml4Ci0gICAgICAgICAgICBtYWtlZmls ZS4KLSAgICAgICAgICArIEFsbCBMaW51eCAobGliYyBhbmQgZ2xpYmMpIGJ1aWxkcyBjb25zb2xp ZGF0ZWQgdW5kZXIgIm1ha2UKLSAgICAgICAgICAgIGxpbnV4Ii4KLSAgICAgICAgICArIEhQLVVY IG1ha2VmaWxlIHRhcmdldHMgbm93IGhhdmUgY29uc2lzdGVudCBuYW1lcy4KLSAgICAgICAgICAr IE5ldyBhaXg1MCBhbmQgYWl4NTEgdGFyZ2V0cyBhZGRlZC4KLQotICAgQy1LZXJtaXQgOC4wLjIw MCBGaW5hbCAoMTIgRGVjIDIwMDEpCi0KLSAgICAgICAgICArIFJlbW90ZS9sb2NhbC1tb2RlIGNv bmZ1c2lvbiBvbiBzb21lIHBsYXRmb3JtcyBpbnRyb2R1Y2VkIGluCi0gICAgICAgICAgICBCZXRh LjA0LCBmaXhlZC4KLSAgICAgICAgICArIE1hbnkgb2YgdGhlIG1ha2VmaWxlIHRhcmdldHMgYWRq dXN0ZWQsIG5ldyBvbmVzIGFkZGVkLgotICAgICAgICAgICsgTmV3ICJtYWtlIGluc3RhbGwiIHRh cmdldCBzaG91bGQgcGxlYXNlIG1vc3QgcGVvcGxlLgotICAgICAgICAgICsgTmV3IGNvbW1hbmQ6 IFNIT1cgSUtTRC4KLSAgICAgICAgICArIEZUUCBvdmVyIFRMUy4KLSAgICAgICAgICArIExhc3Qt bWludXRlIHRvdWNodXBzIHRvIHRleHQgbWVzc2FnZXMsIEhFTFAgdGV4dCwgZXRjLgotICAgICAg ICAgICsgRW5hYmxlIG1vZGVtLXNpZ25hbCByZWFkaW5nIGZvciBTQ08gT1NSNSBhbmQgVW5peHdh cmUgNy4KLSAgICAgICAgICArIFNwZWNpYWwgc3VwZXJmYXN0IFRSQU5TTUlUIC9CSU5BUlkgL05P RUNITyAvTk9XQUlUIG1vZGUgYWRkZWQuCi0gICAgICAgICAgKyBGaXhlZCBQQlggZGlhbGluZyBp biB1bm1hcmtlZC1hcmVhLWNvZGUgY2FzZS4KLSAgICAgICAgICArIEltcHJvdmVkIFNIT1cgQ09N TVVOSUNBVElPTlMgdGVsbHMgbG9ja2ZpbGUgZGlyZWN0b3J5LCB0eXBpY2FsCi0gICAgICAgICAg ICBkaWFsb3V0IGRldmljZSBuYW1lLgotICAgICAgICAgICsgU29tZSBGVFAgT1BFTiBjb21tYW5k IHBhcnNpbmcgcHJvYmxlbXMgZml4ZWQuCi0gICAgICAgICAgKyBTb21lIGVycm9ycyBpbiBkYXRl IGFyaXRobWV0aWMgZml4ZWQuCi0gICAgICAgICAgKyBOZXcgY29tbWFuZDogU0VUIFRFUk1JTkFM IEFVVE9ET1dOTE9BRCB7IC4uLiwgRVJST1IgeyBTVE9QLAotICAgICAgICAgICAgQ09OVElOVUUg fSB9Ci0gICAgICAgICAgKyBOZXcgY29tbWFuZDogSEVMUCBGSVJFV0FMTC4KLSAgICAgICAgICAr IFNFVCBNT0RFTSBIQU5HVVAtTUVUSE9EIERUUiBhZGRlZCBhcyBzeW5vbnltIGZvciBSUzIzMi1T SUdOQUwKLSAgICAgICAgICArIFN1cHBvcnQgZm9yIHNlY3VyZSBVUkwgcHJvdG9jb2xzIGFkZGVk OiB0ZWxuZXRzOiwgZnRwczosCi0gICAgICAgICAgICBodHRwczouCi0KLSAgIEMtS2VybWl0IDgu MC4yMDEgKDggRmViIDIwMDIpCi0KLSAgICAgICAgICArIEluc3RhbGxhYmlsaXR5IGFzIGFuIFsx NTldU1NIIHYyIFN1YnN5c3RlbS4KLSAgICAgICAgICArIFsxNjBdU0VUIExPQ1VTIGNvbW1hbmQu Ci0gICAgICAgICAgKyBbMTYxXUwtdmVyc2lvbnMgb2YgQ0QsIERJUiwgREVMRVRFLCBNS0RJUiwg ZXRjLCB0byBmb3JjZSBsb2NhbAotICAgICAgICAgICAgZXhlY3V0aW9uLgotICAgICAgICAgICsg WzE2Ml1VU0VSIGFuZCBBQ0NPVU5UIGFkZGVkIGFzIHN5bm9ueW1zIGZvciBGVFAgVVNFUiBhbmQg RlRQCi0gICAgICAgICAgICBBQ0NPVU5ULgotICAgICAgICAgICsgWzE2M11TSE9XIFZBUklBQkxF UyBub3cgYWNjZXB0cyBhIGxpc3Qgb2YgdmFyaWFibGVzLgotICAgICAgICAgICsgUnVkaW1lbnRh cnkgc3VwcG9ydCBmb3IgWzE2NF1DYWxsZXIgSUQgd2hlbiByZWNlaXZpbmcgcGhvbmUKLSAgICAg ICAgICAgIGNhbGxzLgotICAgICAgICAgICsgVXAvRG93biBbMTY1XUFycm93LWtleSBuYXZpZ2F0 aW9uIG9mIGNvbW1hbmQgaGlzdG9yeSBidWZmZXIuCi0gICAgICAgICAgKyBbMTY2XUF1dG9tYXRp YyBleGVjdXRpb24gb2YgY3VzdG9taXphdGlvbiBmaWxlIGlmIGluaXQgZmlsZSBpcwotICAgICAg ICAgICAgbWlzc2luZy4KLQotICAgQy1LZXJtaXQgOC4wLjIwNiBCZXRhLjAxICgxMSBPY3QgMjAw MikKLQotICAgICAgICBOZXcgY29tbWFuZHM6Ci0KLSAgICAgICAgICAgICAgIG8gT1JJRU5UQVRJ T04gbGlzdHMgbG9jYXRpb24tcmVsYXRlZCB2YXJpYWJsZXMgYW5kIHRoZWlyCi0gICAgICAgICAg ICAgICAgIHZhbHVlcy4KLSAgICAgICAgICAgICAgIG8gS0NEIGNoYW5nZXMgdG8gc3BlY2lhbCBk aXJlY3RvcmllcyBieSB0aGVpciBzeW1ib2xpYwotICAgICAgICAgICAgICAgICBuYW1lcyAoImtj ZCA/IiBmb3IgYSBsaXN0KS4KLSAgICAgICAgICAgICAgIG8gU0VUIENEIEhPTUUgcGF0aCB0byBz cGVjaWZ5IGhvbWUgZGlyZWN0b3J5IGZvciBDRCBhbmQgS0NECi0gICAgICAgICAgICAgICAgIGNv bW1hbmRzLgotICAgICAgICAgICAgICAgbyBDT05USU5VRSBnaXZlbiBhdCB0b3AgbGV2ZWwgaXMg ZXF1aXZhbGVudCB0byBFTkQgLS0gaGFuZHkKLSAgICAgICAgICAgICAgICAgd2hlbiBQUk9NUFQn ZWQgb3V0IG9mIGEgc2NyaXB0LCB0byBjb250aW51ZSB0aGUgc2NyaXB0LgotCi0gICAgICAgIE5l dyBzd2l0Y2hlcyBvciBvcGVyYW5kcyBmb3IgZXhpc3RpbmcgY29tbWFuZHM6Ci0KLSAgICAgICAg ICAgICAgIG8gR0VUT0sgL1RJTUVPVVQKLSAgICAgICAgICAgICAgIG8gQVNLLCBBU0tRLCBHRVRP SyAvUVVJRVQgKHN1cHByZXNzZXMgZXJyb3IgbWVzc2FnZSBvbgotICAgICAgICAgICAgICAgICB0 aW1lb3V0KQotICAgICAgICAgICAgICAgbyBDT1BZIC9BUFBFTkQgbm93IGFsbG93cyBjb25jYXRl bmF0aW5nIG11bHRpcGxlIHNvdXJjZQotICAgICAgICAgICAgICAgICBmaWxlcyBpbnRvIG9uZSBk ZXN0IGZpbGUuCi0gICAgICAgICAgICAgICBvIFNFVCBUQ1AgeyBIVFRQLVBST1hZLCBTT0NLUy1T RVJWRVIgfSAvVVNFUiwgL1BBU1NXT1JELgotICAgICAgICAgICAgICAgbyBESVJFQ1RPUlkgY29t bWFuZCBub3cgYWNjZXB0cyBtdWx0aXBsZSBmaWxlc3BlY3MsIGUuZy4KLSAgICAgICAgICAgICAg ICAgImRpciBhIGIgYyIuCi0KLSAgICAgICAgU0VUIFFVSUVUIE9OIG5vdyBhbHNvIGFwcGxpZXMg dG86Ci0KLSAgICAgICAgICAgICAgIG8gU0VUIEhPU1QgY29ubmVjdGlvbiBwcm9ncmVzcyBtZXNz YWdlcy4KLSAgICAgICAgICAgICAgIG8gIlByZXNzIHRoZSBYIG9yIEUga2V5IHRvIGNhbmNlbCIg ZmlsZS10cmFuc2ZlciBtZXNzYWdlLgotICAgICAgICAgICAgICAgbyBSRU1PVEUgQ0QgcmVzcG9u c2UuCi0gICAgICAgICAgICAgICBvIFJFTU9URSBMT0dJTiByZXNwb25zZS4KLQotICAgICAgICBJ bXByb3ZlbWVudHMgYW5kIG5ldyBmZWF0dXJlczoKLQotICAgICAgICAgICAgICAgbyBOdW1lcm91 cyBGVFAgY2xpZW50IGZpeGVzIGFuZCBuZXcgZmVhdHVyZXMsIGxpc3RlZCBiZWxvdy4KLSAgICAg ICAgICAgICAgIG8gQy1LZXJtaXQsIHdoZW4gaW4gcmVtb3RlIG1vZGUgYXQgdGhlIGVuZCBvZiBh IGZpbGUKLSAgICAgICAgICAgICAgICAgdHJhbnNmZXIsIG5vdyBwcmludHMgYSBvbmUtbGluZSAi d2hlcmUiIG1lc3NhZ2UuIENvbnRyb2wKLSAgICAgICAgICAgICAgICAgd2l0aCBTRVQgVFJBTlNG RVIgUkVQT1JULgotICAgICAgICAgICAgICAgbyBVbml4IG1ha2VmaWxlICJpbnN0YWxsIiB0YXJn ZXQgbm93IGNyZWF0ZXMgYW4gVU5JTlNUQUxMCi0gICAgICAgICAgICAgICAgIHNjcmlwdC4KLSAg ICAgICAgICAgICAgIG8gSW1wcm92ZWQgb3BlcmF0aW9uIGFuZCBwZXJmb3JtYW5jZSBvbiBSRkMg MjIxNyBUZWxuZXQKLSAgICAgICAgICAgICAgICAgY29ubmVjdGlvbnMuCi0gICAgICAgICAgICAg ICBvIEltcHJvdmVkIENPTk5FQ1QgKGludGVyYWN0aXZlIHRlcm1pbmFsIGNvbm5lY3Rpb24pCi0g ICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlLgotICAgICAgICAgICAgICAgbyBIRUxQIHRleHQg dXBkYXRlZCBmb3IgbWFueSBjb21tYW5kcy4KLQotICAgICAgICBOZXcgb3IgZml4ZWQgbWFrZWZp bGUgdGFyZ2V0czoKLQotICAgICAgICAgICAgICAgbyBTb2xhcmlzIDkgKHNldmVyYWwgdmFyaWF0 aW9ucykKLSAgICAgICAgICAgICAgIG8gQ29uY3VycmVudCBQb3dlck1BWAotICAgICAgICAgICAg ICAgbyBNYWMgT1MgWCAxMC4yCi0gICAgICAgICAgICAgICBvIEZyZWVCU0QgMS4wCi0gICAgICAg ICAgICAgICBvIEZyZWVCU0QgNC42LCA1LjAKLSAgICAgICAgICAgICAgIG8gQUlYIDUuMiwgNS4z Ci0KLSAgICAgICAgQnVncyBmaXhlZCAoZ2VuZXJhbCk6Ci0KLSAgICAgICAgICAgICAgIG8gRmFp bHVyZSB0byBydW4gaW4gVk1TIEJhdGNoIGZpeGVkLgotICAgICAgICAgICAgICAgbyBMRElSRUNU T1JZIGZpeGVkIHRvIHJ1biBLZXJtaXQncyBidWlsdC1pbiBESVJFQ1RPUlkKLSAgICAgICAgICAg ICAgICAgY29tbWFuZCByYXRoZXIgdGhhbiBhbiBleHRlcm5hbCBvbmUuCi0gICAgICAgICAgICAg ICBvIEZpeGVkIFNvbGFyaXMgYW5kIG90aGVyIFNWT1JQT1NJWCBidWlsZHMgdG8gZmluZCBvdXQK LSAgICAgICAgICAgICAgICAgdGhlaXIgZnVsbCBob3N0bmFtZXMgcmF0aGVyIHRoYW4ganVzdCB0 aGUgInVuYW1lIC1uIgotICAgICAgICAgICAgICAgICBuYW1lLgotICAgICAgICAgICAgICAgbyBG aXhlZCBzb21lIHByb2JsZW1zIG1hdGNoaW5nIHN0cmluZ3MgdGhhdCBzdGFydCB3aXRoICIuIi4K LSAgICAgICAgICAgICAgIG8gRml4ZWQgc29tZSBwcm9ibGVtcyBtYXRjaGluZyBwYXR0ZXJuIHRo YXQgY29udGFpbiB7YSxiLGN9Ci0gICAgICAgICAgICAgICAgIGxpc3RzLgotICAgICAgICAgICAg ICAgbyBGaXhlZCBlcnJvbmVvdXMgcmVwb3J0aW5nIG9mIHRleHQtbW9kZSByZWNlcHRpb24gYXMK LSAgICAgICAgICAgICAgICAgYmluYXJ5IHdoZW4gc2VuZGVyIGRpZCBub3QgcmVwb3J0IHRoZSBm aWxlIHNpemUgKGNvc21ldGljCi0gICAgICAgICAgICAgICAgIG9ubHkpLgotICAgICAgICAgICAg ICAgbyBNYW55IHByb2JsZW1zIHdpdGggU1dJVENIIHN0YXRlbWVudHMgZml4ZWQuCi0gICAgICAg ICAgICAgICBvIEZpeGVkIFNFVCBPUFRJT05TIERJUkVDVE9SWSAvRE9URklMRVMgdG8gd29yayBm b3Igc2VydmVyCi0gICAgICAgICAgICAgICAgIHRvby4KLSAgICAgICAgICAgICAgIG8gRml4ZWQg REVMRVRFIHRvIHByaW50IGFuIGVycm9yIG1lc3NhZ2UgaWYgdGhlIGZpbGUgd2FzCi0gICAgICAg ICAgICAgICAgIG5vdCBmb3VuZC4KLSAgICAgICAgICAgICAgIG8gRml4ZWQgU0VUIENPTlRST0wg VU5QUkVGSVggQUxMIGFuZCBTRVQgUFJFRklYSU5HIE5PTkUgdG8KLSAgICAgICAgICAgICAgICAg ZG8gdGhlIHNhbWUgdGhpbmcuCi0gICAgICAgICAgICAgICBvIEZpeGVkIGJ1Z3MgZXhlY3V0aW5n IG1hY3JvcyBmcm9tIHdpdGhpbiB0aGUgT05fRVhJVAotICAgICAgICAgICAgICAgICBtYWNyby4K LSAgICAgICAgICAgICAgIG8gXGZkYXkoKSBhbmQgXGZuZGF5KCkgZml4ZWQgZm9yIGRhdGVzIHBy aW9yIHRvIDE3IE5vdgotICAgICAgICAgICAgICAgICAxODU4LgotICAgICAgICAgICAgICAgbyBT ZXJpYWwgc3BlZWQtY2hhbmdpbmcgYnVnIGluIExpbnV4IGZpeGVkLgotICAgICAgICAgICAgICAg byAiVW5iYWxhbmNlZCBicmFjZXMiIHNjcmlwdCBwYXJzaW5nIGVycm9ycyB3aGVuIHVzaW5nCi0g ICAgICAgICAgICAgICAgIFx7bnVtYmVyfSBmaXhlZC4KLSAgICAgICAgICAgICAgIG8gImlmIGRl ZmluZWQgXHYobmFtZSkiIGZpeGVkIHRvIGJlaGF2ZSBhcyBkZXNjcmliZWQgaW4gdGhlCi0gICAg ICAgICAgICAgICAgIGJvb2suCi0gICAgICAgICAgICAgICBvIEZpeGVkIFByb2JsZW1zIGNhdXNl ZCBieSBMT0NBTCB2YXJpYWJsZXMgd2hvc2UgbmFtZXMgYXJlCi0gICAgICAgICAgICAgICAgIGxl ZnQgc3Vic3RyaW5ncyBvZiBtYWNybyBuYW1lcy4KLSAgICAgICAgICAgICAgIG8gVGhlIElOUFVU IGNvbW1hbmQgd2FzIGZpeGVkIHRvIGhvbm9yIHRoZSBQQVJJVFkgc2V0dGluZy4KLSAgICAgICAg ICAgICAgIG8gRml4ZWQgYnVnIHdpdGggQ09QWSB0byBleGlzdGluZyBmaWxlIHRoYXQgaXMgbG9u Z2VyIHRoYW4KLSAgICAgICAgICAgICAgICAgc291cmNlIGZpbGUuCi0gICAgICAgICAgICAgICBv IFJFSU5QVVQgY29tbWFuZCBmYWlsZWQgdG8gc3RyaXAgYnJhY2VzL3F1b3RlcyBhcm91bmQgaXRz Ci0gICAgICAgICAgICAgICAgIHRhcmdldCBzdHJpbmcuCi0gICAgICAgICAgICAgICBvIE5ldHdv cmsgZGlyZWN0b3J5IGxvb2t1cHMgZGlkbid0IHdvcmsgZm9yIFNTSAotICAgICAgICAgICAgICAg ICBjb25uZWN0aW9ucy4KLSAgICAgICAgICAgICAgIG8gUkVNT1RFIFNFVCB7IEZJTEUsIFRSQU5T RkVSIH0gQ0hBUkFDVEVSLVNFVCBmaXhlZC4KLSAgICAgICAgICAgICAgIG8gQ2xvc2VkIHNvbWUg aG9sZXMgd2hlcmVieSBhbiBpbmNvbXBsZXRlbHkgcmVjZWl2ZWQgZmlsZQotICAgICAgICAgICAg ICAgICB3YXMgbm90IGRlbGV0ZWQgd2hlbiBTRVQgRklMRSBJTkNPTVBMRVRFIGlzIERJU0NBUkQs IGUuZy4KLSAgICAgICAgICAgICAgICAgd2hlbiB0aGUgS2VybWl0IGlzIGh1bmcgdXAgdXBvbi4K LSAgICAgICAgICAgICAgIG8gU0VUIFhGRVIgQ0hBUkFDVEVSLVNFVCBUUkFOU1BBUkVOVCBmaXhl ZCB0byBkbyB0aGUgc2FtZQotICAgICAgICAgICAgICAgICBhcyBTRVQgWEZFUiBUUkFOU0xBVElP TiBPRkYuCi0gICAgICAgICAgICAgICBvIFNFVCBIT1NUIFBUWSAoZS5nLiBTU0gpIGNvbm5lY3Rp b24gZml4ZWQgdG8gcGFzcyBhbG9uZwotICAgICAgICAgICAgICAgICB3aW5kb3ctc2l6ZSBjaGFu Z2VzLgotICAgICAgICAgICAgICAgbyBDLUtlcm1pdCBzZWFyY2ggcGF0aCBmb3IgVEFLRSBmaWxl cyB3YXMgYWNjaWRlbnRhbGx5Ci0gICAgICAgICAgICAgICAgIGRpc2FibGVkLgotCi0gICAgICAg IEZUUCBjbGllbnQgYnVncyBmaXhlZDoKLQotICAgICAgICAgICAgICAgbyBDaGFyYWN0ZXIgc2V0 IHRyYW5zbGF0aW9uIHdhcyBicm9rZW4gb24gbGl0dGxlLWVuZGlhbgotICAgICAgICAgICAgICAg ICAoZS5nLiBQQykgYXJjaGl0ZWN0dXJlcy4KLSAgICAgICAgICAgICAgIG8gRlRQIFBVVCAvU0VS VkVSLVJFTkFNRTosIC9SRU5BTUUtVE86LCAvTU9WRS1UTzogc3dpdGNoZXMKLSAgICAgICAgICAg ICAgICAgd2VyZSBzdGlja3kuCi0gICAgICAgICAgICAgICBvIE1ha2UgU0VUIFRSQU5TRkVSIE1P REUgTUFOVUFMIGFwcGx5IHRvIEZUUC4KLSAgICAgICAgICAgICAgIG8gTWFrZSBTRVQgRklMRSBJ TkNPTVBMRVRFIHsgS0VFUCwgRElTQ0FSRCB9IGFwcGx5IHRvIEZUUC4KLSAgICAgICAgICAgICAg IG8gRlRQIE1HRVQgL1VQREFURSBoYW5kbGVkIGVxdWFsIHRpbWVzIGluY29ycmVjdGx5LgotICAg ICAgICAgICAgICAgbyBGVFAgTUdFVCAvUkVDT1ZFUiBmaXhlZCB0byBpZ25vcmUgZmlsZSBkYXRl cywgdXNlIG9ubHkKLSAgICAgICAgICAgICAgICAgc2l6ZS4KLSAgICAgICAgICAgICAgIG8gRlRQ IE1HRVQgL1JFQ09WRVIgc29tZXRpbWVzIGRvd25sb2FkZWQgZmlsZXMgaXQgZGlkbid0Ci0gICAg ICAgICAgICAgICAgIG5lZWQgdG8uCi0gICAgICAgICAgICAgICBvIEZUUCBkb3dubG9hZHMgd2l0 aCBUUkFOU0ZFUiBESVNQTEFZIEJSSUVGIGNvdWxkIGdpdmUKLSAgICAgICAgICAgICAgICAgbWlz bGVhZGluZyBlcnJvciBtZXNzYWdlcy4KLSAgICAgICAgICAgICAgIG8gRlRQIE1HRVQgdGVtcCBm aWxlIG5vdCBkZWxldGVkIGlmIEZUUCBERUJVRyBzZXQgdG8gT0ZGCi0gICAgICAgICAgICAgICAg IGFmdGVyIGl0IHdhcyBPTi4KLSAgICAgICAgICAgICAgIG8gTE9DVVMgbm90IHN3aXRjaGVkIGJh Y2sgd2hlbiBGVFAgY29ubmVjdGlvbiBpcyBsb3N0LgotICAgICAgICAgICAgICAgbyBTZXQgaW5j b21pbmcgZmlsZSBkYXRlIGV2ZW4gaWYgaXQgd2FzIG5vdCBjb21wbGV0ZWx5Ci0gICAgICAgICAg ICAgICAgIHJlY2VpdmVkLgotICAgICAgICAgICAgICAgbyBGVFAgTUdFVCBzZW50IFNJWkUgYW5k IE1EVE0gY29tbWFuZHMgZXZlbiB3aGVuIGl0IGRpZG4ndAotICAgICAgICAgICAgICAgICBoYXZl IHRvLgotICAgICAgICAgICAgICAgbyBGVFAgTUdFVCBzZW50IFNJWkUgYW5kIE1EVE0gY29tbWFu ZHMgZXZlbiB3aGVuIGl0IGtuZXcKLSAgICAgICAgICAgICAgICAgdGhleSB3b3VsZG4ndCB3b3Jr LgotICAgICAgICAgICAgICAgbyBGVFAgTUdFVCBmYWlsZWQgaWYgbm8gZmlsZXMgd2VyZSBzZWxl Y3RlZCBmb3IgZG93bmxvYWQuCi0gICAgICAgICAgICAgICBvIEZUUCBNR0VUIGEqIGIqIGMqIHdv dWxkIGZhaWwgdG8gZ2V0IGFueSBjKidzIGlmIG5vIGIqJ3MKLSAgICAgICAgICAgICAgICAgZXhp c3RlZC4KLSAgICAgICAgICAgICAgIG8gQmlnIHByb2JsZW1zIGNhbmNlbGluZyBNR0VUIHdpdGgg Q3RybC1DLgotICAgICAgICAgICAgICAgbyBTb21lIGV4dHJhbmVvdXMgTE9DVVMgZGlhbG9ncyBz cXVlbGNoZWQuCi0gICAgICAgICAgICAgICBvIFNvbWUgaW5jb25zaXN0ZW5jaWVzIGluIFNFVCBG VFAgRklMRU5BTUVTIEFVVE8gZml4ZWQuCi0gICAgICAgICAgICAgICBvIEZpeGVkIGZpbGUtZGVz Y3JpcHRvciBwaWxldXAgYWZ0ZXIgbXVsdGlwbGUgTUdFVHMgd2hlbgotICAgICAgICAgICAgICAg ICB1c2luZyBta3N0ZW1wKCkuCi0gICAgICAgICAgICAgICBvIEZpeGVkICJtZ2V0IGZvbyIsIHdo ZXJlIGZvbyBpcyBhIGRpcmVjdG9yeSBuYW1lLgotCi0gICAgICAgIEZUUCBpbXByb3ZlbWVudHM6 Ci0KLSAgICAgICAgICAgICAgIG8gTmV3IFsxNjddRlRQIHByb3RvY29sIGZlYXR1cmVzIGFkZGVk IChGRUFULCBNTFNEKS4KLSAgICAgICAgICAgICAgIG8gRlRQIE1HRVQgL1JFQ1VSU0lWRSBub3cg d29ya3MgYXMgZXhwZWN0ZWQgaWYgc2VydmVyCi0gICAgICAgICAgICAgICAgIHN1cHBvcnRzIE1M U0QuCi0gICAgICAgICAgICAgICBvIEZUUCBNR0VUIC9EQVRFUy1ESUZGRVIgdG8gZG93bmxvYWQg aWYgbG9jYWwgYW5kIHJlbW90ZQotICAgICAgICAgICAgICAgICBmaWxlIGRhdGVzIGRpZmZlci4K LSAgICAgICAgICAgICAgIG8gRlRQIERBVEVTIGRlZmF1bHQgY2hhbmdlZCB0byBPTi4KLSAgICAg ICAgICAgICAgIG8gRlRQIE1QVVQsIE1HRVQgL0VYQ0VQVCBub3cgYWxsb3dzIHVwIHRvIDY0IHBh dHRlcm5zICh1cAotICAgICAgICAgICAgICAgICBmcm9tIDgpLgotICAgICAgICAgICAgICAgbyBU b3AtbGV2ZWwgU0lURSBhbmQgUEFTU0lWRSBjb21tYW5kcyBhZGRlZCBmb3IKLSAgICAgICAgICAg ICAgICAgY29udmVuaWVuY2UuCi0gICAgICAgICAgICAgICBvIE1HRVQgL0NPTExJU0lPTjpBUFBF TkQgL0FTLU5BTUU6bmV3ZmlsZSAqLiogcHV0cyBhbGwKLSAgICAgICAgICAgICAgICAgcmVtb3Rl IGZpbGVzIGludG8gb25lIGxvY2FsIGZpbGUuCi0gICAgICAgICAgICAgICBvIFNFVCBGVFAgU0VS VkVSLVRJTUUtT0ZGU0VUIGZvciB3aGVuIHNlcnZlciBoYXMgd3JvbmcKLSAgICAgICAgICAgICAg ICAgdGltZXpvbmUgc2V0LgotICAgICAgICAgICAgICAgbyBBbGxvdyBmb3IgYWx0ZXJuYXRpdmUg c2VydmVyIGludGVycHJldGF0aW9ucyBvZiBbTV1NUFVUCi0gICAgICAgICAgICAgICAgIC9VTklR VUUuCi0gICAgICAgICAgICAgICBvIFNFVCBGVFAgQU5PTllNT1VTLVBBU1NXT1JEIGxldHMgeW91 IHNwZWNpZnkgdGhlIGRlZmF1bHQKLSAgICAgICAgICAgICAgICAgYW5vbnltb3VzIHBhc3N3b3Jk LgotICAgICAgICAgICAgICAgbyBBbGxvdyAiR0VUIC9SRUNVUlNJVkUgcGF0aC9maWxlIiB0byBm b3JjZSBsb2NhbAotICAgICAgICAgICAgICAgICBzdWJkaXJlY3RvcnkgY3JlYXRpb24uCi0gICAg ICAgICAgICAgICBvIFNFVCBGVFAgRElTUExBWSBpcyBsaWtlIFNFVCBUUkFOU0ZFUiBESVNQTEFZ IGJ1dCBhcHBsaWVzCi0gICAgICAgICAgICAgICAgIG9ubHkgdG8gRlRQLgotICAgICAgICAgICAg ICAgbyBGVFAgeyBFTkFCTEUsIERJU0FCTEUgfSBuZXctcHJvdG9jb2wtZmVhdHVyZS1uYW1lLgot ICAgICAgICAgICAgICAgbyBGVFAgTUdFVCAvTk9ET1RGSUxFUy4KLSAgICAgICAgICAgICAgIG8g RGVidWcgbG9nIG5vdyByZWNvcmRzIEZUUCBjb21tYW5kcyBhbmQgcmVzcG9uc2VzIGluCi0gICAg ICAgICAgICAgICAgIGdyZXAtYWJsZSBmb3JtYXQuCi0KLSAgIFsgWzE2OF1Ub3AgXSBbIFsxNjld Q29udGVudHMgXSBbIFsxNzBdQy1LZXJtaXQgXSBbIFsxNzFdS2VybWl0IEhvbWUgXQotCi0xLiBG SVhFUyBTSU5DRSBWRVJTSU9OIDcuMC4xOTYgRmlyc3QsIHRoZSBjaGFuZ2VzIGZyb20gNy4wLjE5 NiB0byA3LjAuMTk3Li4uCi1Tb3VyY2UgYW5kIG1ha2VmaWxlIHR3ZWFrcyB0byBnZXQgc3VjY2Vz c2Z1bCBidWlsZHMgb24gcGxhdGZvcm1zIHRoYXQgd2VyZQotbm90IGF2YWlsYWJsZSBpbiB0aW1l IGZvciB0aGUgNy4wIHJlbGVhc2U6Ci0KLSAgICAgKiA0LjJCU0QKLSAgICAgKiA0LjNCU0QKLSAg ICAgKiBBSVggNC4zCi0gICAgICogQVQmVCAzQjIgYW5kIDNCMjAKLSAgICAgKiBCZU9TIDQuNQot ICAgICAqIENMSVgKLSAgICAgKiBJbnRlcmFjdGl2ZSBVTklYIFN5c3RlbSBWLzM4NiBSMy4yIFY0 LjEuMQotICAgICAqIE9TLTkvNjgwMDAKLSAgICAgKiBPU0YvMSAxLjMuCi0gICAgICogUFMvMiBB SVggMS4yLjEKLSAgICAgKiBTQ08gT1NSNS4wLngKLSAgICAgKiBTQ08gWGVuaXggMi4zLjQKLSAg ICAgKiBTSU5JWCA1LjQxL0ludGVsCi0gICAgICogU3RyYXR1cyBGVFgKLSAgICAgKiBTdHJhdHVz IFZPUwotICAgICAqIFN1bk9TIDQuMSB3aXRoIFguMjUKLSAgICAgKiBVbHRyaXggNC4yCi0gICAg ICogVW5peHdhcmUgMi4wCi0KLSAgIFRoZXJlIHdlcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIGZy b20gMTk2IHRvIDE5Ny4KLQotICAgRml4ZXMgYXBwbGllZCBhZnRlciBDLUtlcm1pdCA3LjAuMTk3 IHdhcyByZWxlYXNlZDoKLQotICAgU291cmNlIGNvZGU6IEJpZyBmbGV4ZWxpbnQgYW5kICJnY2Mg LVdhbGwiIGF1ZGl0IGFuZCBjbGVhbnVwLgotCi0gICBDb25maWd1cmF0aW9uOgotICAgICAqIFNv bGFyaXMgUlRTL0NUUyAoaGFyZHdhcmUgZmxvdyBjb250cm9sKSBkaWRuJ3Qgd29yay4KLSAgICAg KiBCU0RJIFJUUy9DVFMgd29ya2VkIG9ubHkgaW4gb25lIGRpcmVjdGlvbi4KLSAgICAgKiBGcmVl QlNEIDQuMCB3aXRoIG5jdXJzZXMgNS4wIGJyb2tlIGludGVyYWN0aXZlIGNvbW1hbmQgcGFyc2lu Zy4KLSAgICAgKiBRTlgtMzIgYnVpbGQgbGFja2VkIC1EQklHQlVGT0sgc28gY291bGRuJ3QgZXhl Y3V0ZSBiaWcgbWFjcm9zLgotCi0gICBDb25uZWN0aW9uczoKLSAgICAgKiBTRVQgSE9TVCAvUFRZ IGRpZG4ndCB3b3JrIG9uIHNvbWUgcGxhdGZvcm1zLgotICAgICAqIEJyb2tlbiBTRVQgSE9TVCAv VVNFUjp4eHggL1BBU1NXT1JEOnl5eSAvQUNDT1VOVDp6enogc3dpdGNoZXMKLSAgICAgICBmaXhl ZC4KLSAgICAgKiBUcmFuc3BhcmVudCBwcmludGluZyB3YXMgYnJva2VuIGluIFVuaXguCi0gICAg ICogQU5TV0VSIDAgKHdhaXQgZm9yZXZlcikgZGlkbid0IHdvcmsuCi0gICAgICogU29tZSBwcm9i bGVtcyBpbiBNdWx0aXRlY2ggbW9kZW0gY29tbWFuZCBzdHJpbmdzLgotICAgICAqIFNwdXJpb3Vz ICI/U29ycnksIGNhbid0IGNvbmRpdGlvbiBjb25zb2xlIHRlcm1pbmFsIiBlcnJvcnMuCi0gICAg ICogRGlzYWJsaW5nIG1vZGVtIGNvbW1hbmQgc3RyaW5ncyBieSBzZXR0aW5nIHRoZW0gdG8gbm90 aGluZyBicm9rZQotICAgICAgIGRpYWxpbmcuCi0gICAgICogU0VUIERJQUwgVElNRU9VVCB2YWx1 ZSB3YXMgdXN1YWxseSBpZ25vcmVkLgotICAgICAqIFNFVCBESUFMIE1FVEhPRCBQVUxTRSBkaWRu J3Qgd29yay4KLSAgICAgKiBDZXJ0YWluIG1vZGVtIGNvbW1hbmRzLCBpZiBjaGFuZ2VkLCBub3Qg cmVmcmVzaGVkIGlmIG1vZGVtIHR5cGUKLSAgICAgICBjaGFuZ2VkLgotICAgICAqIFNFVCBTRVNT SU9OLUxPRyBjb21tYW5kIHdhcyBtaXNzaW5nIGZyb20gVk1TLgotICAgICAqIFZNUyBzZXNzaW9u IGxvZyBmb3JtYXQgZml4ZWQgZm9yIHNjcmlwdHMuCi0gICAgICogSEFOR1VQIGJ5IGRyb3BwaW5n IERUUiBkaWRuJ3Qgd29yayBpbiBOZXRCU0QuCi0gICAgICogU0VUIEZMT1cgL0FVVE8gdmVyc3Vz IFNFVCBGTE9XIGNvbmZ1c2lvbiBmaXhlZC4KLSAgICAgKiBTcHVyaW91cyBzZWNvbmRhcnkgU29s YXJpcyBsb2NrZmlsZSByZW1vdmVkLgotICAgICAqIFNDTyBPU1I1IERUUiBPbi9PZmYgaGFuZ3Vw LgotICAgICAqIFVVQ1AgbG9ja2ZpbGUgcmFjZSBjb25kaXRpb24uCi0KLSAgIENvbW1hbmRzIGFu ZCBzY3JpcHRzOgotICAgICAqIE1pc3NpbmcgQ0FVVElPVVMgYW5kIEZBU1QgY29tbWFuZHMgcmVz dG9yZWQuCi0gICAgICogQnJva2VuIFBUWSBjb21tYW5kIGluIGxhdGUtbW9kZWwgTGludXhlcyBm aXhlZCAoQVBJIGNoYW5nZWQpLgotICAgICAqIEZpeGVkIG9mZi1ieS1vbmUgZXJyb3IgaW4gY29t bWFuZCByZWNhbGwgd2hlbiBzd2l0Y2hpbmcgZGlyZWN0aW9uLgotICAgICAqIEZpeGVkIHJlY2Fs bCBvZiBjb21tYW5kcyB0aGF0IGNvbnRhaW4gJz8nLgotICAgICAqIENPUFkgL1NXQVAtQllURVMg ZGlkbid0IHdvcmsgb24gc29tZSBhcmNoaXRlY3R1cmVzLgotICAgICAqIFZhcmlvdXMgY29tYmlu YXRpb25zIG9mIENPUFkgc3dpdGNoZXMgZGlkbid0IHdvcmsuCi0gICAgICogVmFyaW91cyBwcm9i bGVtcyB3aXRoIENPUFkgb3IgUkVOQU1FIHdpdGggYSBkaXJlY3RvcnkgbmFtZSBhcwotICAgICAg IHRhcmdldC4KLSAgICAgKiBTSElGVCBkaWRuJ3QgZGVjcmVtZW50IFx2KGFyZ2MpIGlmIHVzZWQg d2l0aGluIElGLCBFTFNFLCBvciBTV0lUQ0gKLSAgICAgICBibG9jay4KLSAgICAgKiBTSElGVCBk aWRuJ3QgYWZmZWN0IHRoZSBcJSogdmFyaWFibGUuCi0gICAgICogRGl2aWRlIGJ5IHplcm8gaW1w cm9wZXJseSBoYW5kbGVkIGluIHNvbWUgXGZ1bmN0aW9uKClzLgotICAgICAqIFByb2JsZW1zIHdp dGggUkVUVVJOIGZyb20gcmlnaHQtcmVjdXJzaXZlIGZ1bmN0aW9ucy4KLSAgICAgKiBGU0VFSyAv TElORSBcJWMgTEFTVCBkaWRuJ3Qgd29yayBpZiBhbHJlYWR5IGF0IGVuZC4KLSAgICAgKiBTb21l IGJ1ZmZlciB2dWxuZXJhYmlsaXRpZXMgYW5kIHBvdGVudGlhbCBtZW1vcnkgbGVha3Mgd2VyZQot ICAgICAgIGRpc2NvdmVyZWQgYW5kIGZpeGVkLgotICAgICAqIFxmcmRpcmVjdG9yeSgpIGZpeGVk IG5vdCB0byBmb2xsb3cgc3ltYm9saWMgbGlua3MuCi0gICAgICogU0VUIEVYSVQgV0FSTklORyBP RkYgZml4ZWQgdG8gd29yayB3aGVuIEVYSVQgZ2l2ZW4gaW4gYSBzY3JpcHQuCi0gICAgICogTWlz c2luZyBERUxFVEUgYW5kIE1LRElSIGVycm9yIG1lc3NhZ2UgZml4ZWQuCi0gICAgICogXGZkYXko KSBjb3JlIGR1bXAgZm9yIGFuY2llbnQgZGF0ZXMgZml4ZWQuCi0KLSAgIEZpbGUgdHJhbnNmZXI6 Ci0gICAgICogU0VORCAvQ09NTUFORCB3YXMgYnJva2VuLgotICAgICAqIENSRUNFSVZFIHdhcyBi cm9rZW4gKGJ1dCBSRUNFSVZFIC9DT01NQU5EIHdhcyBPSykuCi0gICAgICogUXVvdGluZyB3aWxk Y2FyZCBjaGFycyBpbiBmaWxlbmFtZXMgZGlkbid0IHdvcmsuCi0gICAgICogUHJvYmxlbXMgY2Fu Y2VsaW5nIHN0cmVhbWluZyBmaWxlIHRyYW5zZmVycyB3aXRoIFggb3IgWi4KLSAgICAgKiBQcm9i bGVtcyBzaGlmdGluZyBiZXR3ZWVuIHN0cmVhbWluZyBhbmQgd2luZG93aW5nIGZpbGUgdHJhbnNm ZXIuCi0gICAgICogTm9uLUZVTEwgZmlsZS10cmFuc2ZlciBkaXNwbGF5cyBlcnJvbmVvdXNseSBz YWlkIFNUUkVBTUlORyB3aGVuCi0gICAgICAgbm90LgotICAgICAqIEFuIGFjdGl2ZSBTRU5ELUxJ U1QgcHJldmVudGVkIEdFVCBmcm9tIHdvcmtpbmcuCi0gICAgICogU0VUIFNFUlZFUiBHRVQtUEFU SCBpbnRlcnByZXRhdGlvbiBvZiByZWxhdGl2ZSBuYW1lcyBsaWtlICIuIiB3YXMKLSAgICAgICB3 cm9uZy4KLSAgICAgKiBUaGUgTUFJTCBjb21tYW5kIHdhcyBicm9rZW4uCi0gICAgICogImtlcm1p dCAtcyAqIiBtaWdodCBoYXZlIHNraXBwZWQgc29tZSBmaWxlcy4KLSAgICAgKiBUcmFuc2FjdGlv biBsb2cgZW50cmllcyB3ZXJlIG5vdCBtYWRlIGZvciBleHRlcm5hbCBwcm90b2NvbAotICAgICAg IHRyYW5zZmVycy4KLSAgICAgKiBGaWxlIGNvdW50IHJlcG9ydCBmaXhlZCB0byBzaG93IG51bWJl ciBvZiBmaWxlcyBhY3R1YWxseQotICAgICAgIHRyYW5zZmVycmVkLgotICAgICAqIEZpeGVkIGZp bGVuYW1lIGNvbnZlcnNpb24gdG8gY29udmVydCBzcGFjZXMgdG8gdW5kZXJzY29yZXMuCi0gICAg ICogTWFkZSBTRVQgUFJFRklYSU5HIC8gU0VUIENPTlRST0wgUFJFRklYIGFsc28gYWRqdXN0IENM RUFSQ0hBTk5FTC4KLSAgICAgKiBNb3JlICJSZWNlaXZlIHdpbmRvdyBmdWxsIiBlcnJvcnMgZml4 ZWQuCi0gICAgICogQnJva2VuIHRlcm1pbmFsIGJ1ZmZlcmluZyBhZnRlciBjdXJzZXMgZGlzcGxh eSBpbiBTb2xhcmlzIGZpeGVkLgotICAgICAqIFNFVCBGSUxFIElOQ09NUExFVEUgRElTQ0FSRCBk aWQgbm90IHdvcmsgaW4gYWxsIGNhc2VzLgotICAgICAqIFBhY2tldCBsb2cgY2hhbmdlZCB0byBy ZWZvcm1hdCB0aGUgc3RhcnQtb2YtcGFja2V0IGNoYXJhY3RlcgotICAgICAgIHByaW50YWJseS4K LSAgICAgKiBEeW5hbWljIHRpbWVvdXRzIGNvdWxkIGdyb3cgcmlkaWN1bG91c2x5IGxhcmdlLgot Ci0gICBDaGFyYWN0ZXIgc2V0czoKLSAgICAgKiBIZWJyZXctNyB0cmFuc2xhdGlvbnMgbWlzc2Vk IHRoZSBsZXR0ZXIgVGF2LgotICAgICAqIEMxIGFyZWEgb2YgQ1AxMjUyIHdhcyBpZ25vcmVkLgot ICAgICAqIFNFVCBUUkFOU0ZFUiBDSEFSQUNURVItU0VUIFRSQU5TUEFSRU5UIGNvdWxkIGdpdmUg Z2FyYmFnZQotICAgICAgIHRyYW5zbGF0aW9ucy4KLSAgICAgKiBUUkFOU0xBVEUgbWlnaHQgbm90 IHdvcmsgb24gTGl0dGxlIEVuZGlhbiBhcmNoaXRlY3R1cmVzLgotICAgICAqIEluc3VmZmljaWVu dCByYW5nZSBjaGVja2luZyBpbiBjZXJ0YWluIFRSQU5TTEFURSBvcGVyYXRpb25zLgotCi0gICBU aGUgZm9sbG93aW5nIGJ1Z3MgaW4gQy1LZXJtaXQgOC4wLjIwMCB3ZXJlIGZpeGVkIGluIDguMC4y MDE6Ci0KLSAgICAgKiBBbiBvYnNjdXJlIHBhdGggdGhyb3VnaCB0aGUgY29kZSBjb3VsZCBjYXVz ZSB0aGUgVW5peCB2ZXJzaW9uIG9mCi0gICAgICAgQy1LZXJtaXQgdG8gZHVtcCBjb3JlIGR1cmlu ZyBpdHMgc3RhcnR1cCBzZXF1ZW5jZS4gVGhpcyBoYXBwZW5lZCB0bwotICAgICAgIG9ubHkgb25l IHBlcnNvbiwgYnV0IG5vdyBpdCdzIGZpeGVkLgotICAgICAqIFdoZW4gQy1LZXJtaXQgOC4wIGlz IGluIEtlcm1pdCBzZXJ2ZXIgbW9kZSBhbmQgdGhlIGNsaWVudCBzYXlzICJnZXQKLSAgICAgICBi bGFoIiwgd2hlcmUgYmxhaCAob24gdGhlIHNlcnZlcikgaXMgYSBzeW1saW5rIHJhdGhlciB0aGFu IGEgcmVhbAotICAgICAgIGZpbGUsIHRoZSBzZXJ2ZXIgdW5yZWFzb25hYmx5IHJlZnVzZWQgdG8g c2VuZCB0aGUgbGlua2VkLXRvIGZpbGUuCi0gICAgICogV2hlbiBDLUtlcm1pdCBpcyBhbiBGVFAg Y2xpZW50IGFuZCBzYXlzICJnZXQgZm9vL2JhciIgKGkuZS4gYQotICAgICAgIGZpbGVuYW1lIHRo YXQgaW5jbHVkZXMgb25lIG9yIG1vcmUgcGF0aCBzZWdtZW50cyksIGl0IGZhaWxlZCB0bwotICAg ICAgIGFjY2VwdCB0aGUgaW5jb21pbmcgZmlsZSAodGhpcyBoYXBwZW5lZCBvbmx5IHdpdGggR0VU LCBub3QgTUdFVCkuCi0gICAgICogQXJyYXkgcmVmZXJlbmNlcyBzaG91bGQgYmUgY2FzZSBpbnNl bnNpdGl2ZSBidXQgb25seSBsb3dlcmNhc2UKLSAgICAgICBhcnJheSBsZXR0ZXJzIHdlcmUgYWNj ZXB0ZWQuCi0gICAgICogU0hPVyBWQVJJQUJMRVMgZHVtcGVkIGNvcmUgb24gXHYoc2V4cHJlc3Np b24pIGFuZCBcdihzdmFsdWUpLgotICAgICAqIFNwdXJpb3VzIHJlZnVzYWxzIG9mIHJlbW90ZSBk aXJlY3RvcnkgbGlzdGluZ3MgaWYgdGhlIHJlbW90ZQotICAgICAgIHNlcnZlcidzIGRhdGUgd2Fz IHNldCBpbiB0aGUgcGFzdC4KLSAgICAgKiBJbiBBSVgsIGFuZCBtYXliZSBlbHNld2hlcmUgdG9v LCBLZXJtaXQncyBDT1BZIGNvbW1hbmQgYWx3YXlzCi0gICAgICAgZmFpbGVkIHdpdGggIlNvdXJj ZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1lIGZpbGUiIHdoZW4gdGhlCi0gICAgICAgZGVz dGluYXRpb24gZmlsZSBkaWRuJ3QgZXhpc3QuCi0gICAgICogVGhlIFZNUyB2ZXJzaW9uIG9mIEMt S2VybWl0IGRpZCBub3Qgd29yayBpbiBCYXRjaCBvciB3aGVuIFNQQVdOJ2QuCi0gICAgICAgVG8g Y29tcG91bmQgdGhlIHByb2JsZW0sIGl0IGFsc28gcHJldHR5IG11Y2ggaWdub3JlZCB0aGUgLUIg YW5kIC16Ci0gICAgICAgY29tbWFuZC1saW5lIG9wdGlvbnMsIHdob3NlIHB1cnBvc2UgaXMgdG8g d29yayBhcm91bmQgc3VjaAotICAgICAgIHByb2JsZW1zLgotICAgICAqIEMtS2VybWl0IDguMCBj b3VsZCBub3QgYmUgYnVpbHQgb24gSVJJWCA1LnguCi0gICAgICogVGhlIEMtS2VybWl0IDguMCBi dWlsZCBmb3IgUU5YNiBzYWlkIGl0IHdhcyBhbiAiKHVua25vd24gdmVyc2lvbikiLgotCi0gICBP dGhlciBmaXhlcyBhcmUgbGlzdGVkIGluIHRoZSBbMTcyXXByZXZpb3VzIHNlY3Rpb24uCi0KLSAg IFsgWzE3M11Ub3AgXSBbIFsxNzRdQ29udGVudHMgXSBbIFsxNzVdQy1LZXJtaXQgXSBbIFsxNzZd S2VybWl0IEhvbWUgXQotCi0yLiBTU0ggQU5EIEhUVFAKLQotMi4xLiBTU0ggQ29ubmVjdGlvbnMK LQotICAgICBUaGlzIHNlY3Rpb24gZG9lcyBub3QgYXBwbHkgdG8gWzE3N11LZXJtaXQgOTUgMi4w LCB3aGljaCBoYXMgaXRzIG93bgotICAgICBidWlsdC1pbiBTU0ggY2xpZW50LCB3aGljaCBpcyBk b2N1bWVudGVkIFsxNzhdU0VQQVJBVEVMWS4KLQotICAgT24gbW9zdCBVTklYIHBsYXRmb3Jtcywg Qy1LZXJtaXQgY2FuIG1ha2UgU1NIIChTZWN1cmUgU0hlbGwpIGNvbm5lY3Rpb24KLSAgIGJ5IHJ1 bm5pbmcgdGhlIGV4dGVybmFsIFNTSCBjb21tYW5kIG9yIHByb2dyYW0gdGhyb3VnaCBpdHMKLSAg IHBzZXVkb3Rlcm1pbmFsIGludGVyZmFjZS4gVGhlIGNvbW1hbmQgaXM6Ci0KLSAgIFNTSCB0ZXh0 Ci0gICAgICAgICAgVGVsbHMgS2VybWl0IHRvIHN0YXJ0IHRoZSBleHRlcm5hbCBTU0ggY2xpZW50 LCBwYXNzaW5nIHRoZSBnaXZlbgotICAgICAgICAgIHRleHQgdG8gaXQgb24gdGhlIGNvbW1hbmQg bGluZS4gTm9ybWFsbHkgdGhlIHRleHQgaXMganVzdCB0aGUKLSAgICAgICAgICBob3N0bmFtZSwg YnV0IGl0IGNhbiBiZSBhbnl0aGluZyBlbHNlIHRoYXQgaXMgYWNjZXB0YWJsZSB0byB0aGUKLSAg ICAgICAgICBzc2ggY2xpZW50LiBJZiB0aGUgY29tbWFuZCBzdWNjZWVkcywgdGhlIGNvbm5lY3Rp b24gaXMgbWFkZSBhbmQKLSAgICAgICAgICBLZXJtaXQgYXV0b21hdGljYWxseSBlbnRlcnMgQ09O TkVDVCAodGVybWluYWwpIG1vZGUuIFlvdSBjYW4gdXNlCi0gICAgICAgICAgdGhlIFNTSCBjb21t YW5kIHRvIG1ha2UgYSBjb25uZWN0aW9uIHRvIGFueSBob3N0IHRoYXQgaGFzIGFuIFNTSAotICAg ICAgICAgIHNlcnZlci4KLQotICAgS2VybWl0J3MgU1NIIGNvbW1hbmQgZ2l2ZXMgeW91IGFsbCB0 aGUgZmVhdHVyZXMgb2YgS2VybWl0IG9uIGFuIFNTSAotICAgY29ubmVjdGlvbjogY29tbWFuZCBs YW5ndWFnZSwgZmlsZSB0cmFuc2ZlciwgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiwKLSAgIHNj cmlwdGluZywgYW5kIGFsbCB0aGUgcmVzdC4gQnkgZGVmYXVsdCwgQy1LZXJtaXQgaW52b2tlcyBT U0ggd2l0aCAiLWUKLSAgIG5vbmUiLCB3aGljaCBkaXNhYmxlcyB0aGUgc3NoIGVzY2FwZSBjaGFy YWN0ZXIgYW5kIG1ha2VzIHRoZSBjb25uZWN0aW9uCi0gICB0cmFuc3BhcmVudCBmb3IgcHVycG9z ZXMgb2YgZmlsZSB0cmFuc2Zlci4gWW91IGNhbiwgaG93ZXZlciwgY2hhbmdlIHRoZQotICAgU1NI IGludm9jYXRpb24gdG8gd2hhdGV2ZXIgZWxzZSB5b3UgbWlnaHQgbmVlZCAoYW4gZXhwbGljaXQg cGF0aCwKLSAgIGFkZGl0aW9uYWwgY29tbWFuZC1saW5lIGFyZ3VtZW50cywgZXRjKSB3aXRoOgot Ci0gICBTRVQgU1NIIENPTU1BTkQgdGV4dAotICAgICAgICAgIFNwZWNpZmllcyB0aGUgc3lzdGVt IGNvbW1hbmQgdGhhdCBLZXJtaXQncyBTU0ggY29tbWFuZCBzaG91bGQKLSAgICAgICAgICB1c2Ug dG8gaW52b2tlIHRoZSBleHRlcm5hbCBTU0ggY2xpZW50LiBVc2UgdGhpcyBjb21tYW5kIHRvCi0g ICAgICAgICAgc3VwcGx5IGEgc3BlY2lmaWMgcGF0aCBvciBhbHRlcm5hdGl2ZSBuYW1lLCBvciB0 byBpbmNsdWRlCi0gICAgICAgICAgZGlmZmVyZW50IG9yIG1vcmUgY29tbWFuZC1saW5lIG9wdGlv bnMuCi0KLSAgIEluIG1vc3QgY2FzZXMsIHRoZXNlIGNvbm5lY3Rpb25zIHdvcmsgcXVpdGUgd2Vs bC4gVGhleSBjYW4gYmUgc2NyaXB0ZWQKLSAgIGxpa2UgYW55IG90aGVyIGNvbm5lY3Rpb24sIGFu ZCBmaWxlIHRyYW5zZmVyIGdvZXMgYXMgZmFzdCBhcywgb3IgZmFzdGVyCi0gICB0aGFuLCBvbiBh IHJlZ3VsYXIgVGVsbmV0IGNvbm5lY3Rpb24uIEluIHNvbWUgY2FzZXMsIGhvd2V2ZXIsIHRoZQot ICAgdW5kZXJseWluZyBwc2V1ZG90ZXJtaW5hbCBkcml2ZXIgaXMgYSBsaW1pdGluZyBmYWN0b3Is IHJlc3VsdGluZyBpbgotICAgc2xvdyBvciBmYWlsZWQgZmlsZSB0cmFuc2ZlcnMuIFNvbWV0aW1l cyB5b3UgY2FuIHdvcmsgYXJvdW5kIHN1Y2gKLSAgIHByb2JsZW1zIGJ5IHJlZHVjaW5nIHRoZSBL ZXJtaXQgcGFja2V0IGxlbmd0aC4gTm90ZSB0aGF0IEtlcm1pdCBkb2VzCi0gICBub3QgY29uc2lk ZXIgU1NIIGNvbm5lY3Rpb25zIHRvIGJlIHJlbGlhYmxlLCBzbyBpdCBkb2VzIG5vdCBvZmZlciB0 bwotICAgdXNlIHN0cmVhbWluZyBpbiBLZXJtaXQgcHJvdG9jb2wgdHJhbnNmZXJzIChidXQgeW91 IGNhbiBmb3JjZSBpdCB3aXRoCi0gICBTRVQgUkVMSUFCTEUgb3IgU0VUIFNUUkVBTUlORyBpZiB5 b3Ugd2lzaCkuCi0KLSAgIFRoZSBTU0ggY29tbWFuZCBpcyBsaWtlIHRoZSBURUxORVQgY29tbWFu ZDogaXQgZW50ZXJzIENPTk5FQ1QgbW9kZQotICAgYXV0b21hdGljYWxseSB3aGVuIHRoZSBjb25u ZWN0aW9uIGlzIG1hZGUuIFRoZXJlZm9yZSwgdG8gc2NyaXB0IGFuIFNTSAotICAgY29ubmVjdGlv biwgdXNlOgotCi0gIHNldCBob3N0IC9wdHkgc3NoIC1lIG5vbmUgWyBvdGhlci1vcHRpb25zIF0g aG9zdAotICBpZiBmYWlsIC4uLgotCi0gICB0byBtYWtlIHRoZSBjb25uZWN0aW9uLgotCi0gICBI ZXJlJ3MgYSBzZXF1ZW5jZSB0aGF0IGNhbiBiZSB1c2VkIHRvIG1ha2UgYSBjb25uZWN0aW9uIHRv IGEgZ2l2ZW4gaG9zdAotICAgdXNpbmcgVGVsbmV0IGlmIHRoZSBob3N0IGFjY2VwdHMgaXQsIG90 aGVyd2lzZSBTU0g6Ci0KLSAgaWYgbm90IGRlZmluZWQgXCUxIGV4aXQgMSBVc2FnZTogXCUwIGhv c3QKLSAgc2V0IHF1aWV0IG9uCi0gIHNldCBob3N0IFwlMSAyMyAvdGVsbmV0Ci0gIGlmIGZhaWwg ewotICAgICAgc2V0IGhvc3QgL3B0eSBzc2ggLWwgXG0odXNlcikgLWUgbm9uZSBcJTEKLSAgICAg IGlmIGZhaWwgZXhpdCAxIFwlMTogVGVsbmV0IGFuZCBTU0ggYm90aCBmYWlsCi0gICAgICBlY2hv IFNTSCBjb25uZWN0aW9uIHRvIFwlMSBzdWNjZXNzZnVsCi0gIH0gZWxzZSB7Ci0gICAgICBlY2hv IFRlbG5ldCBjb25uZWN0aW9uIHRvIFwlMSBzdWNjZXNzZnVsCi0gIH0KLQotICAgSW4gU1NIIHYy LCBpdCBpcyBwb3NzaWJsZSB0byBtYWtlIGFuIFNTSCBjb25uZWN0aW9uIGRpcmVjdCB0byBhIEtl cm1pdAotICAgc2VydmVyIHN5c3RlbSBpZiB0aGUgaG9zdCBhZG1pbmlzdHJhdG9yIGhhcyBjb25m aWd1cmVkIHRoZSBTU0ggc2VydmVyCi0gICB0byBhbGxvdyB0aGlzOyBbMTc5XUNMSUNLIEhFUkUg Zm9yIGRldGFpbHMuCi0KLSAgIFNpbmNlIEtlcm1pdCB1c2VzIGV4dGVybmFsIHNzaCBjbGllbnQg c29mdHdhcmUsIGFuZCBzaW5jZSB0aGVyZSBhcmUKLSAgIGRpZmZlcmVudCBzc2ggY2xpZW50cyAo YW5kIGRpZmZlcmVudCByZWxlYXNlcyBvZiBlYWNoIG9uZSksIHRoZSBleGFjdAotICAgY29tbWFu ZCB0byBiZSB1c2VkIHRvIG1ha2UgYW4gU1NIL0tlcm1pdCBjb25uZWN0aW9uIGNhbiB2YXJ5LiBI ZXJlIGlzCi0gICB0aGUgY29tbWFuZCBmb3IgdGhlIE9wZW5TU0ggMy4wLjJwMSBjbGllbnQ6Ci0K LXNldCBob3N0IC9waXBlIHNzaCAtZSBub25lIFsgLWwgdXNlcm5hbWUgXSAtVCAtcyBob3N0bmFt ZSBrZXJtaXQKLQotICAgRXhhbXBsZToKLQotc2V0IGhvc3QgL3BpcGUgc3NoIC1lIG5vbmUgLWwg b2xnYSAtVCAtcyBocS54eXpjb3JwLmNvbSBrZXJtaXQKLQotICAgVGhlIFNTSCBjbGllbnQgbWln aHQgb3IgbWlnaHQgbm90IHByb21wdCB5b3UgZm9yIGEgcGFzc3dvcmQgb3Igb3RoZXIKLSAgIGlu Zm9ybWF0aW9uIGJlZm9yZSBpdCBtYWtlcyB0aGUgY29ubmVjdGlvbjsgdGhpcyBkZXBlbmRzIG9u IHlvdXIgU1NICi0gICBjb25maWd1cmF0aW9uICh5b3VyIHB1YmxpYyBhbmQgcHJpdmF0ZSBrZXlz LCB5b3VyIGF1dGhvcml6ZWQgaG9zdHMKLSAgIGZpbGUsIGV0YykuIEhlcmUncyBhIGJyaWVmIHN5 bm9wc2lzIG9mIHRoZSBPcGVuU1NIIGNsaWVudCBjb21tYW5kCi0gICBzeW50YXggKCJtYW4gc3No IiBmb3IgZGV0YWlscyk6Ci0KLSAgIC1lIG5vbmUKLSAgICAgICAgICBUaGlzIHRlbGxzIHRoZSBT U0ggY2xpZW50IHRvIHVzZSBubyBlc2NhcGUgY2hhcmFjdGVyLiBTaW5jZSB3ZQotICAgICAgICAg IHdpbGwgYmUgdHJhbnNmZXJyaW5nIGZpbGVzIGFjcm9zcyB0aGUgY29ubmVjdGlvbiwgd2UgZG9u J3Qgd2FudAotICAgICAgICAgIHRoZSBjb25uZWN0aW9uIHRvIHN1ZGRlbmx5IGJsb2NrIGJlY2F1 c2Ugc29tZSBjaGFyYWN0ZXIgaW4gdGhlCi0gICAgICAgICAgZGF0YS4KLQotICAgLWwgdXNlcm5h bWUKLSAgICAgICAgICBUaGlzIGlzIHRoZSB1c2VybmFtZSBvbiB0aGUgcmVtb3RlIGhvc3QuIFlv dSBjYW4gb21pdCB0aGUgLWwKLSAgICAgICAgICBvcHRpb24gYW5kIGl0cyBhcmd1bWVudCBpZiB5 b3VyIGxvY2FsIGFuZCByZW1vdGUgdXNlcm5hbWVzIGFyZQotICAgICAgICAgIHRoZSBzYW1lLiBJ ZiB0aGV5IGFyZSBkaWZmZXJlbnQsIHlvdSBtdXN0IHN1cHBseSB0aGUgcmVtb3RlCi0gICAgICAg ICAgdXNlcm5hbWUuCi0KLSAgIC1UCi0gICAgICAgICAgVGhpcyB0ZWxscyB0aGUgU1NIIGNsaWVu dCB0byB0ZWxsIHRoZSBTU0ggc2VydmVyIG5vdCB0byBhbGxvY2F0ZQotICAgICAgICAgIGEgcHNl dWRvdGVybWluYWwuIFdlIGFyZSBub3QgbWFraW5nIGEgdGVybWluYWwgY29ubmVjdGlvbiwgd2UK LSAgICAgICAgICBkb24ndCBuZWVkIGEgdGVybWluYWwsIGFuZCBpbiBmYWN0IGlmIGEgdGVybWlu YWwgd2VyZSBhbGxvY2F0ZWQKLSAgICAgICAgICBvbiB0aGUgcmVtb3RlIGVuZCwgdGhlIGNvbm5l Y3Rpb24gd291bGQgbm90IHdvcmsuCi0KLSAgIC1zIC4uLiBrZXJtaXQKLSAgICAgICAgICBUaGlz IHRlbGxzIHRoZSBTU0ggY2xpZW50IHRvIHRlbGwgdGhlIFNTSCBzZXJ2ZXIgdG8gc3RhcnQgdGhl Ci0gICAgICAgICAgc3BlY2lmaWVkIHN1YnN5c3RlbSAoImtlcm1pdCIpIG9uY2UgdGhlIGNvbm5l Y3Rpb24gaXMgbWFkZS4gVGhlCi0gICAgICAgICAgc3Vic3lzdGVtIG5hbWUgY29tZXMgYWZ0ZXIg dGhlIGhvc3RuYW1lLgotCi0gICBob3N0bmFtZQotICAgICAgICAgIFRoZSBJUCBob3N0IG5hbWUg b3IgYWRkcmVzcyBvZiB0aGUgZGVzaXJlZCBob3N0LgotCi0gICBZb3UgbWlnaHQgd2FudCB0byBp bmNsdWRlIG90aGVyIG9yIGFkZGl0aW9uYWwgc3NoIGNvbW1hbmQtbGluZSBvcHRpb25zOwotICAg Im1hbiBzc2giIGV4cGxhaW5zIHdoYXQgdGhleSBhcmUuIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXMg Zm9yIHRoZQotICAgT3BlblNTSCAzLjAuMnAxIGNsaWVudDoKLQotICAgLW9DbGVhckFsbEZvcndh cmRpbmdzIHllcwotICAgLW9Gb3J3YXJkQWdlbnQgbm8KLSAgIC1vRm9yd2FyZFgxMSBubwotICAg LW9GYWxsYmFja1RvUnNoIG5vCi0gICAgICAgICAgVGhlc2UgZW5zdXJlIHRoYXQgYSBzZWN1cmUg Y29ubmVjdGlvbiBpcyB1c2VkIGFuZCB0aGF0IHRoZQotICAgICAgICAgIGNvbm5lY3Rpb24gdXNl ZCBmb3IgZmlsZSB0cmFuc2ZlciBpcyBub3QgYWxzbyB1c2VkIGZvcgotICAgICAgICAgIGZvcndh cmRpbmcgb3RoZXIgdGhpbmdzIHRoYXQgbWlnaHQgYmUgc3BlY2lmaWVkIGluIHRoZQotICAgICAg ICAgIHNzaF9jb25maWcgZmlsZS4KLQotICAgLW9Qcm90b2NvbCAyCi0gICAgICAgICAgKGkuZS4g U1NIIHYyKSBFbnN1cmVzIHRoYXQgdGhlIG5lZ290aWF0ZWQgcHJvdG9jb2wgc3VwcG9ydHMKLSAg ICAgICAgICBzdWJzeXN0ZW1zLgotCi0gICBPbmNlIHlvdSBoYXZlIGFuIFNTSCBjb25uZWN0aW9u IHRvIGEgS2VybWl0IHNlcnZlciwgaXQncyBqdXN0IGxpa2UgYW55Ci0gICBvdGhlciBjb25uZWN0 aW9uIHRvIGEgS2VybWl0IHNlcnZlciAoYW5kIHZlcnkgc2ltaWxhciB0byBhIGNvbm5lY3Rpb24K LSAgIHRvIGFuIEZUUCBzZXJ2ZXIpLiBZb3UgZ2l2ZSB0aGUgY2xpZW50IGZpbGUgdHJhbnNmZXIg YW5kIG1hbmFnZW1lbnQKLSAgIGNvbW1hbmRzIGZvciB0aGUgc2VydmVyLCBhbmQgdGhlIHNlcnZl ciBleGVjdXRlcyB0aGVtLiBPZiBjb3Vyc2UgeW91Ci0gICBjYW4gYWxzbyBnaXZlIHRoZSBjbGll bnQgYW55IG90aGVyIGNvbW1hbmRzIHlvdSB3aXNoLgotCi0gICBbIFsxODBdU1NIIEtlcm1pdCBT ZXJ2ZXIgU3Vic3lzdGVtIF0gWyBbMTgxXUtlcm1pdCA5NSBCdWlsdC1pbiBTU0gKLSAgIENsaWVu dCBdCi0KLTIuMi4gSFRUUCBDb25uZWN0aW9ucwotCi0gICBIeXBlcnRleHQgVHJhbnNmZXIgUHJv dG9jb2wsIG9yIEhUVFAsIGlzIHRoZSBhcHBsaWNhdGlvbiBwcm90b2NvbCBvZgotICAgdGhlIFdv cmxkIFdpZGUgV2ViIChXV1cpLCB1c2VkIGJldHdlZW4gV2ViIGJyb3dzZXJzIChjbGllbnRzKSBh bmQgV2ViCi0gICBzZXJ2ZXJzLiBJdCBhbGxvd3MgYSBjbGllbnQgdG8gZ2V0IGZpbGVzIGZyb20g d2Vic2l0ZXMsIHVwbG9hZCBmaWxlcyB0bwotICAgd2Vic2l0ZXMsIGRlbGV0ZSBmaWxlcyBmcm9t IHdlYnNpdGVzLCBnZXQgaW5mb3JtYXRpb24gYWJvdXQgd2Vic2l0ZQotICAgZGlyZWN0b3JpZXMg YW5kIGZpbGVzLCBhbmQgaW50ZXJhY3Qgd2l0aCBzZXJ2ZXItc2lkZSBDR0kgc2NyaXB0cy4KLSAg IEMtS2VybWl0IGluY2x1ZGVzIGFuIEhUVFAgY2xpZW50IGNhcGFibGUgb2YgYm90aCBjbGVhci10 ZXh0IGFuZCBzZWN1cmUKLSAgIEhUVFAgY29ubmVjdGlvbnMsIHRoYXQgY2FuIGRvIGFsbCB0aGVz ZSB0YXNrcyBhbmQgY2FuIGJlIGF1dG9tYXRlZAotICAgdGhyb3VnaCB0aGUgS2VybWl0IHNjcmlw dGluZyBsYW5ndWFnZS4KLQotICAgQWx0aG91Z2ggQy1LZXJtaXQgNy4wIGNvdWxkIG1ha2UgSFRU UCBjb25uZWN0aW9ucyB0byBXZWIgc2VydmVycywgaXQKLSAgIGNvdWxkIGRvIHNvIG9ubHkgd2hl biBubyBvdGhlciBjb25uZWN0aW9uIHdhcyBvcGVuLCBhbmQgdGhlIHByb2NlZHVyZQotICAgd2Fz IHNvbWV3aGF0IGF3a3dhcmQuIEMtS2VybWl0IDguMCBpbXByb3ZlcyBtYXR0ZXJzIGJ5OgotCi0g ICAgICogQWxsb3dpbmcgYW4gSFRUUCBjb25uZWN0aW9uIHRvIGJlIG9wZW4gYXQgdGhlIHNhbWUg dGltZSBhcyBhCi0gICAgICAgcmVndWxhciBTRVQgTElORSBvciBTRVQgSE9TVCBjb25uZWN0aW9u LCBhbmQgYWxzbyBhdCB0aGUgc2FtZSB0aW1lCi0gICAgICAgYXMgYW4gRlRQIGNvbm5lY3Rpb24g KFsxODJdU2VjdGlvbiAzKTsKLSAgICAgKiBVcGdyYWRpbmcgdGhlIEhUVFAgcHJvdG9jb2wgbGV2 ZWwgZnJvbSAxLjAgdG8gMS4xLCB0aHVzIGFsbG93aW5nCi0gICAgICAgZm9yIHBlcnNpc3RlbnQg Y29ubmVjdGlvbnMsIGluIHdoaWNoIGEgc2VyaWVzIG9mIGNvbW1hbmRzIGNhbiBiZQotICAgICAg IHNlbnQgb24gdGhlIHNhbWUgY29ubmVjdGlvbiwgcmF0aGVyIHRoYW4gb25seSBvbmUgYXMgaW4g SFRUUCAxLjAKLSAgICAgICAoYW5kIEMtS2VybWl0IDcuMCk7Ci0gICAgICogUHJvdmlkaW5nIGZv ciAib25lLXNob3QiIFVSTC1kcml2ZW4gSFRUUCBvcGVyYXRpb25zIHN1Y2ggYXMgR0VUIG9yCi0g ICAgICAgUFVULgotICAgICAqIFByb3ZpZGluZyBhIGRpc3RpbmN0IEhUVFAgY29tbWFuZC1saW5l IHBlcnNvbmFsaXR5LgotCi0gICBQZXJzaXN0ZW50IEhUVFAgY29ubmVjdGlvbnMgYXJlIG1hbmFn ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOgotCi0gICBIVFRQIFsgc3dpdGNoZXMgXSBP UEVOIFsgc2VjdXJpdHktb3B0aW9ucyBdIGhvc3Qtb3ItdXJsIFsgcG9ydCBdCi0gICAgICAgICAg T3BlbnMgYSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gdG8gdGhlIHNwZWNpZmllZCBob3N0IChJUCBo b3N0Ci0gICAgICAgICAgbmFtZSBvciBhZGRyZXNzKSBvbiB0aGUgc3BlY2lmaWVkIHBvcnQuIElm IGFueSBzd2l0Y2hlcwotICAgICAgICAgIChvcHRpb25zLCBsaXN0ZWQgaW4gdGhlIG5leHQgc2Vj dGlvbikgYXJlIGluY2x1ZGVkLCB0aGVpciB2YWx1ZXMKLSAgICAgICAgICBhcmUgc2F2ZWQgYW5k IHVzZWQgZm9yIGFsbCBzdWJzZXF1ZW50IEhUVFAgYWN0aW9uIGNvbW1hbmRzIG9uCi0gICAgICAg ICAgdGhlIHNhbWUgY29ubmVjdGlvbi4gSWYgbm8gcG9ydCBpcyBzcGVjaWZpZWQsIEhUVFAgKDgw KSBpcyB1c2VkLgotICAgICAgICAgIEEgVW5pZm9ybSBSZXNvdXJjZSBMb2NhdG9yIChVUkwsIFsx ODNdUkZDIDE3MzgpIGNhbiBiZSBnaXZlbgotICAgICAgICAgIGluc3RlYWQgb2YgYSBob3N0bmFt ZSAob3IgYWRkcmVzcykgYW5kIHBvcnQgKGJ1dCB0aGUgVVJMIGNhbiBub3QKLSAgICAgICAgICBp bmNsdWRlIGEgZGlyZWN0b3J5L2ZpbGUgcGF0aCkuIFRoZSBzZWN1cml0eSBvcHRpb25zIGFyZQot ICAgICAgICAgIGV4cGxhaW5lZCBbMTg0XWJlbG93LiBUaGUgSFRUUCBPUEVOIGNvbW1hbmQgcmVw bGFjZXMgdGhlCi0gICAgICAgICAgQy1LZXJtaXQgNy4wIFNFVCBIT1NUIGhvc3RuYW1lIEhUVFAg Y29tbWFuZCwgd2hpY2ggbm8gbG9uZ2VyCi0gICAgICAgICAgd29ya3Mgd2l0aCBIVFRQIEdFVCBh bmQgcmVsYXRlZCBjb21tYW5kcy4KLQotICAgSFRUUCBDTE9TRQotICAgICAgICAgIENsb3NlcyBh bnkgb3BlbiBIVFRQIGNvbm5lY3Rpb24gYW5kIGNsZWFycyBhbnkgc2F2ZWQgc3dpdGNoCi0gICAg ICAgICAgdmFsdWVzLgotCi0gICBBIFVSTCBzdGFydHMgd2l0aCBhIHByb3RvY29sIG5hbWUsIHdo aWNoIG11c3QgYmUgaHR0cCBvciBodHRwcyBpbiB0aGlzCi0gICBjYXNlOyBvcHRpb25hbGx5IGlu Y2x1ZGVzIGEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkOyBhbmQgbXVzdCBjb250YWluIGEKLSAgIGhv c3QgbmFtZSBvciBhZGRyZXNzOgotCi0gIHByb3RvY29sOi8vW3VzZXJbLnBhc3N3b3JkXV1AaG9z dFs6cG9ydF1bVVJJXQotCi0gICBIVFRQIGlzIEh5cGVydGV4dCBUcmFuc2ZlciBQcm90b2NvbC4g SFRUUFMgaXMgdGhlIHNlY3VyZSAoU1NML1RMUykKLSAgIHZlcnNpb24gb2YgSFRUUC4gVGhlIFRD UCBzZXJ2aWNlIHBvcnQgaXMgZGVyaXZlZCBmcm9tIHRoZSBwcm90b2NvbAotICAgcHJlZml4IChz byBub3JtYWxseSB0aGUgIjpwb3J0IiBmaWVsZCBpcyBvbWl0dGVkKS4gVGh1cyB0aGUgVVJMCi0g ICBwcm90b2NvbCBuYW1lIHNwZWNpZmllcyBhIGRlZmF1bHQgVENQIHNlcnZpY2UgcG9ydCBhbmQg dGhlIFVSTCB1c2VyIGFuZAotICAgcGFzc3dvcmQgZmllbGRzIGNhbiB0YWtlIHRoZSBwbGFjZSBv ZiB0aGUgL1VTRVIgYW5kIC9QQVNTV09SRCBzd2l0Y2hlcwotICAgKFsxODVdU2VjdGlvbiAyLjIu MSkuIFRoZSBvcHRpb25hbCBVUkkgaXMgYSAiY29tcGFjdCBzdHJpbmcgb2YKLSAgIGNoYXJhY3Rl cnMgZm9yIGlkZW50aWZ5aW5nIGFuIGFic3RyYWN0IG9yIHBoeXNpY2FsIHJlc291cmNlIiAoWzE4 Nl1SRkMKLSAgIDIzOTYpLCBzdWNoIGFzIGEgZmlsZS4gSXQgbXVzdCBiZWdpbiB3aXRoIGEgc2xh c2ggKC8pOyBpZiB0aGUgVVJJIGlzCi0gICBvbWl0dGVkLCAiLyIgaXMgc3VwcGxpZWQuIEV4YW1w bGVzOgotCi0gICBodHRwIG9wZW4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUvCi0gICAgICAgICAg RXF1aXZhbGVudCB0byBodHRwIG9wZW4gd3d3LmNvbHVtYmlhLmVkdSBvciBodHRwIG9wZW4KLSAg ICAgICAgICB3d3cuY29sdW1iaWEuZWR1IGh0dHAuCi0KLSAgIGh0dHAgb3BlbiBodHRwczovL29s Z2Euc2VjcmV0QHd3dzEueHl6Y29ycC5jb20vCi0gICAgICAgICAgRXF1aXZhbGVudCB0byBodHRw IC91c2VyOm9sZ2EgL3Bhc3M6c2VjcmV0IG9wZW4gd3d3MS54eXpjb3JwLmNvbQotICAgICAgICAg IGh0dHBzLgotCi0gICBQZXJzaXN0ZW5jZSBpcyBhY2NvbXBsaXNoZWQgdW5pbGF0ZXJhbGx5IGJ5 IEMtS2VybWl0IDguMC4gQW4gSFRUUCAxLjAKLSAgIHNlcnZlciBjbG9zZXMgdGhlIGNvbm5lY3Rp b24gYWZ0ZXIgZWFjaCBhY3Rpb24uIEFsdGhvdWdoIEhUVFAgMS4xCi0gICBhbGxvd3MgbXVsdGlw bGUgYWN0aW9ucyBvbiB0aGUgc2FtZSBjb25uZWN0aW9uLCBhbiBIVFRQIDEuMSBzZXJ2ZXIKLSAg IHRlbmRzIHRvIGNsb3NlIHRoZSBjb25uZWN0aW9uIGlmIGl0IGlzIGlkbGUgZm9yIG1vcmUgdGhh biBhIGZldwotICAgc2Vjb25kcywgdG8gZGVmZW5kIGl0c2VsZiBhZ2FpbnN0IGRlbmlhbC1vZi1z ZXJ2aWNlIGF0dGFja3MuIEJ1dCB3aGVuCi0gICB5b3UgdXNlIEtlcm1pdCdzIEhUVFAgT1BFTiBj b21tYW5kIHRvIGNyZWF0ZSBhIGNvbm5lY3Rpb24sIEtlcm1pdAotICAgcmVvcGVucyBpdCBhdXRv bWF0aWNhbGx5IChpZiBuZWNlc3NhcnkpIGZvciBlYWNoIEhUVFAgYWN0aW9uIHVudGlsIHlvdQot ICAgY2xvc2UgaXQgd2l0aCBIVFRQIENMT1NFLCByZWdhcmRsZXNzIG9mIHRoZSBzZXJ2ZXIncyBI VFRQIHByb3RvY29sCi0gICB2ZXJzaW9uLCBvciBob3cgbWFueSB0aW1lcyBpdCBjbG9zZXMgdGhl IGNvbm5lY3Rpb24uCi0KLSAgIEZpcmV3YWxscyBjYW4gYmUgbmVnb3RpYXRlZCB0aHJvdWdoIHBy b3hpZXMgd2l0aCB0aGUgZm9sbG93aW5nCi0gICBjb21tYW5kczoKLQotICAgU0VUIFRDUCBIVFRQ LVBST1hZIFsgaG9zdFs6cG9ydF0gXQotICAgICAgICAgIElmIGEgaG9zdCAoYnkgaG9zdG5hbWUg b3IgSVAgYWRkcmVzcykgaXMgc3BlY2lmaWVkLCBLZXJtaXQgdXNlcwotICAgICAgICAgIGl0IGFz IGEgcHJveHkgc2VydmVyIHdoZW4gYXR0ZW1wdGluZyBvdXRnb2luZyBUQ1AgY29ubmVjdGlvbnMg LS0KLSAgICAgICAgICBub3Qgb25seSBIVFRQIGNvbm5lY3Rpb25zLCBidXQgYWxsIFRDUC9JUCBj b25uZWN0aW9ucywgVGVsbmV0Ci0gICAgICAgICAgYW5kIEZUUCBpbmNsdWRlZC4gVGhpcyBhbGxv d3MgS2VybWl0IHRvIGFkYXB0IHRvIHRoZSBIVFRQCi0gICAgICAgICAgZmlyZXdhbGwgcGVuZXRy YXRpb24gbWV0aG9kIChhcyBvcHBvc2VkIHRvIG90aGVyIG1ldGhvZHMgc3VjaCBhcwotICAgICAg ICAgIFNPQ0tTNCkuIElmIG5vIGhvc3RuYW1lIG9yIGlwLWFkZHJlc3MgaXMgc3BlY2lmaWVkLCBh bnkKLSAgICAgICAgICBwcmV2aW91c2x5IHNwZWNpZmllZCBQcm94eSBzZXJ2ZXIgaXMgcmVtb3Zl ZC4gSWYgbm8gcG9ydCBudW1iZXIKLSAgICAgICAgICBpcyBzcGVjaWZpZWQsIHRoZSAiaHR0cCIg c2VydmljZSBpcyB1c2VkLiBUaGlzIGNvbW1hbmQgbXVzdCBiZQotICAgICAgICAgIGdpdmVuIGJl Zm9yZSB0aGUgSFRUUCBPUEVOIGNvbW1hbmQgaWYgYSBwcm94eSBpcyB0byBiZSB1c2VkIG9yCi0g ICAgICAgICAgY2FuY2VsZWQuCi0KLSAgIEhUVFAgWyBzd2l0Y2hlcyBdIENPTk5FQ1QgaG9zdFs6 cG9ydF0KLSAgICAgICAgICBJbnN0cnVjdHMgdGhlIEhUVFAgc2VydmVyIHRvIGFjdCBhcyBhIHBy b3h5LCBlc3RhYmxpc2hpbmcgYQotICAgICAgICAgIGNvbm5lY3Rpb24gdG8gdGhlIHNwZWNpZmll ZCBob3N0IChJUCBob3N0bmFtZSBvciBhZGRyZXNzKSBvbiB0aGUKLSAgICAgICAgICBnaXZlbiBw b3J0ICg4MCA9IEhUVFAgYnkgZGVmYXVsdCkgYW5kIHRvIHJlZGlyZWN0IGFsbCBkYXRhCi0gICAg ICAgICAgdHJhbnNtaXR0ZWQgYmV0d2VlbiBLZXJtaXQgYW5kIGl0c2VsZiB0byB0aGUgZ2l2ZW4g aG9zdCBmb3IgdGhlCi0gICAgICAgICAgbGlmZSBvZiB0aGUgY29ubmVjdGlvbi4gVGhpcyBjb21t YW5kIGlzIHRvIGJlIHVzZWQgb25seSBmb3IKLSAgICAgICAgICBkZWJ1Z2dpbmcgSFRUUCBwcm94 eSBjb25uZWN0aW9ucy4gSWYgYSBwcm94eSBjb25uZWN0aW9uIGlzCi0gICAgICAgICAgcmVxdWly ZWQsIGluc3RydWN0IEtlcm1pdCB0byB1c2UgdGhlIHByb3h5IHdpdGggdGhlIFNFVCBUQ1AKLSAg ICAgICAgICBIVFRQLVBST1hZIGNvbW1hbmQuCi0KLTIuMi4xLiBIVFRQIENvbW1hbmQgU3dpdGNo ZXMKLQotICAgSFRUUCBzd2l0Y2hlcywgbGlrZSBhbGwgb3RoZXIgc3dpdGNoZXMsIGFyZSBvcHRp b25hbC4gV2hlbiBIVFRQCi0gICBzd2l0Y2hlcyBhcmUgaW5jbHVkZWQgd2l0aCB0aGUgSFRUUCBP UEVOIGNvbW1hbmQsIHRoZXkgYXBwbHkKLSAgIGF1dG9tYXRpY2FsbHkgdG8gdGhpcyBhbmQgYWxs IHN1YnNlcXVlbnQgSFRUUCBhY3Rpb25zIChHRVQsIFBVVCwgLi4uKQotICAgb24gdGhlIHNhbWUg Y29ubmVjdGlvbiB1bnRpbCBhbiBIVFRQIENMT1NFIGNvbW1hbmQgaXMgZ2l2ZW4uIFNvIGlmIHlv dQotICAgaW5jbHVkZSBzd2l0Y2hlcyAob3IgdGhlIGVxdWl2YWxlbnQgVVJMIGZpZWxkcywgc3Vj aCBhcyB1c2VyIGFuZAotICAgcGFzc3dvcmQpIGluIHRoZSBIVFRQIE9QRU4gY29tbWFuZCwgeW91 IGNhbiBvbWl0IHRoZW0gZnJvbSBzdWJzZXF1ZW50Ci0gICBjb21tYW5kcyBvbiB0aGUgc2FtZSBj b25uZWN0aW9uLiBJZiB0aGUgY29ubmVjdGlvbiBoYXMgY2xvc2VkIHNpbmNlCi0gICB5b3VyIGxh c3QgY29tbWFuZCwgaXQgaXMgYXV0b21hdGljYWxseSByZW9wZW5lZCB3aXRoIHRoZSBzYW1lIG9w dGlvbnMuCi0KLSAgIElmIHlvdSBpbmNsdWRlIHN3aXRjaGVzIHdpdGggYW4gSFRUUCBhY3Rpb24g Y29tbWFuZCAoc3VjaCBhcyBHRVQgb3IKLSAgIFBVVCksIHRoZXkgYXBwbHkgb25seSB0byB0aGF0 IGNvbW1hbmQuCi0KLSAgIC9VU0VSOm5hbWUKLSAgICAgICAgICBUbyBiZSB1c2VkIGluIGNhc2Ug YSBwYWdlIHJlcXVpcmVzIGEgdXNlcm5hbWUgZm9yIGFjY2Vzcy4gVGhlCi0gICAgICAgICAgdXNl cm5hbWUgaXMgc2VudCB3aXRoIHBhZ2UgcmVxdWVzdHMuIElmIGl0IGlzIGdpdmVuIHdpdGggdGhl Ci0gICAgICAgICAgT1BFTiBjb21tYW5kIGl0IGlzIHNhdmVkIHVudGlsIG5lZWRlZC4gSWYgYSB1 c2VybmFtZSBpcyBpbmNsdWRlZAotICAgICAgICAgIGluIGEgVVJMLCBpdCBvdmVycmlkZXMgdGhl IHVzZXJuYW1lIGdpdmVuIGluIHRoZSBzd2l0Y2guCi0gICAgICAgICAgQ0FVVElPTjogVXNlcm5h bWUgYW5kIHBhc3N3b3JkIChhbmQgYWxsIG90aGVyIGluZm9ybWF0aW9uLAotICAgICAgICAgIGlu Y2x1ZGluZyBjcmVkaXQgY2FyZCBudW1iZXJzIGFuZCBvdGhlciBtYXRlcmlhbCB0aGF0IHlvdSBt aWdodAotICAgICAgICAgIHByZWZlciB0byBwcm90ZWN0IGZyb20gcHVibGljIHZpZXcpIGFyZSBz ZW50IGFjcm9zcyB0aGUgbmV0d29yawotICAgICAgICAgIGluIGNsZWFyIHRleHQgb24gcmVndWxh ciBIVFRQIGNvbm5lY3Rpb25zLCBidXQgYXV0aGVudGljYXRpb24gaXMKLSAgICAgICAgICBwZXJm b3JtZWQgc2VjdXJlbHkgb24gSFRUUFMgY29ubmVjdGlvbnMuCi0KLSAgIC9QQVNTV09SRDp0ZXh0 Ci0gICAgICAgICAgVG8gYmUgdXNlZCBpbiBjYXNlIGEgd2ViIHBhZ2UgcmVxdWlyZXMgYSBwYXNz d29yZCBmb3IgYWNjZXNzLgotICAgICAgICAgIFRoZSBwYXNzd29yZCBpcyBzZW50IHdpdGggcGFn ZSByZXF1ZXN0cy4gSWYgaXQgaXMgZ2l2ZW4gd2l0aCB0aGUKLSAgICAgICAgICBPUEVOIGNvbW1h bmQgaXQgaXMgc2F2ZWQgdW50aWwgbmVlZGVkLiBJZiBhIHBhc3N3b3JkIGlzIGdpdmVuIGluCi0g ICAgICAgICAgYSBVUkwsIGl0IG92ZXJyaWRlcyB0aGUgb25lIGdpdmVuIGhlcmUuIENBVVRJT046 IChzYW1lIGFzIGZvcgotICAgICAgICAgIC9VU0VSOikuCi0KLSAgIC9BR0VOVDp1c2VyLWFnZW50 Ci0gICAgICAgICAgSWRlbnRpZmllcyB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXIuIE92ZXJyaWRl cyB0aGUgZGVmYXVsdCBhZ2VudAotICAgICAgICAgIHN0cmluZywgd2hpY2ggaXMgIkMtS2VybWl0 IiAoZm9yIEMtS2VybWl0KSBvciAiS2VybWl0LTk1IiAoZm9yCi0gICAgICAgICAgS2VybWl0IDk1 KS4KLQotICAgL0FSUkFZOmFycmF5LWRlc2lnbmF0b3IKLSAgICAgICAgICBUZWxscyBLZXJtaXQg dG8gc3RvcmUgdGhlIHJlc3BvbnNlIGhlYWRlcnMgaW4gdGhlIGdpdmVuIGFycmF5LAotICAgICAg ICAgIG9uZSBsaW5lIHBlciBlbGVtZW50LiBUaGUgYXJyYXkgbmVlZCBub3QgYmUgZGVjbGFyZWQg aW4gYWR2YW5jZS4KLSAgICAgICAgICBFeGFtcGxlOiAvYXJyYXk6JmEuCi0KLSAgIC9UT1NDUkVF TgotICAgICAgICAgIFRlbGxzIEtlcm1pdCB0byBkaXNwbGF5IGFueSByZXNwb25zZSB0ZXh0IG9u IHRoZSBzY3JlZW4uIEl0Ci0gICAgICAgICAgYXBwbGllcyBpbmRlcGVuZGVudGx5IG9mIHRoZSBv dXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uOyB0aHVzIGl0Ci0gICAgICAgICAgaXMgcG9zc2libGUg dG8gaGF2ZSB0aGUgc2VydmVyIHJlc3BvbnNlIGdvIHRvIHRoZSBzY3JlZW4sIGEKLSAgICAgICAg ICBmaWxlLCBib3RoLCBvciBuZWl0aGVyLgotCi0gICAvSEVBREVSOmhlYWRlci1pdGVtKHMpCi0g ICAgICAgICAgVXNlZCBmb3Igc3BlY2lmeWluZyBhbnkgb3B0aW9uYWwgaGVhZGVycyB0byBiZSBz ZW50IHdpdGggSFRUUAotICAgICAgICAgIHJlcXVlc3RzLgotCi0gIC9IRUFERVI6dGFnOnZhbHVl Ci0KLSAgICAgICAgICBUbyBzZW5kIG1vcmUgdGhhbiBvbmUgaGVhZGVyLCB1c2UgYnJhY2VzIGZv ciBncm91cGluZzoKLQotICAvSEVBREVSOnt7dGFnOnZhbHVlfXt0YWc6dmFsdWV9Li4ufQotCi0g ICAgICAgICAgRm9yIGEgbGlzdCBvZiB2YWxpZCB0YWdzIGFuZCB2YWx1ZSBmb3JtYXRzIHNlZSBb MTg3XVJGQyAyNjE2LAotICAgICAgICAgICJIeXBlcnRleHQgVHJhbnNmZXIgUHJvdG9jb2wgLS0g SFRUUC8xLjEiLiBBIG1heGltdW0gb2YgZWlnaHQKLSAgICAgICAgICBoZWFkZXJzIG1heSBiZSBz cGVjaWZpZWQuCi0KLTIuMi4yLiBIVFRQIEFjdGlvbiBDb21tYW5kcwotCi0gICBIVFRQIGFjdGlv bnMgY2FuIG9jY3VyIHdpdGhpbiBhIHBlcnNpc3RlbnQgY29ubmVjdGlvbiwgb3IgdGhleSBjYW4g YmUKLSAgIHNlbGYtY29udGFpbmVkICgiY29ubmVjdGlvbmxlc3MiKS4gQSBwZXJzaXN0ZW50IEhU VFAgY29ubmVjdGlvbiBiZWdpbnMKLSAgIHdpdGggYW4gSFRUUCBPUEVOIGNvbW1hbmQsIGZvbGxv d2VkIGJ5IHplcm8gb3IgbW9yZSBIVFRQIGFjdGlvbgotICAgY29tbWFuZHMsIGFuZCBpcyB0ZXJt aW5hdGVkIHdpdGggYW4gSFRUUCBDTE9TRSBjb21tYW5kOgotCi0gIGh0dHAgb3BlbiB3d3cuY29s dW1iaWEuZWR1Ci0gIGlmIGZhaWx1cmUgc3RvcCAxIEhUVFAgT1BFTiBmYWlsZWQ6IFx2KGh0dHBf bWVzc2FnZSkKLSAgaHR0cCBnZXQga2VybWl0L2luZGV4Lmh0bWwKLSAgaWYgZmFpbHVyZSBzdG9w IDEgSFRUUCBHRVQgZmFpbGVkOiBcdihodHRwX21lc3NhZ2UpCi0gIChtb3JlIGFjdGlvbnMgcG9z c2libGUgaGVyZS4uLikKLSAgaHR0cCBjbG9zZQotCi0gICBBIHNlbGYtY29udGFpbmVkIEhUVFAg YWN0aW9uIG9jY3VycyB3aGVuIGEgVVJMIGlzIGdpdmVuIGluc3RlYWQgb2YgYQotICAgcmVtb3Rl IGZpbGUgbmFtZSB0byBhbiBIVFRQIGFjdGlvbiBjb21tYW5kLiBJbiB0aGlzIGNhc2UsIEtlcm1p dCBtYWtlcwotICAgdGhlIEhUVFAgY29ubmVjdGlvbiwgdGFrZXMgdGhlIGFjdGlvbiwgYW5kIHRo ZW4gY2xvc2VzIHRoZSBjb25uZWN0aW9uLgotICAgSWYgYW4gSFRUUCBjb25uZWN0aW9uIHdhcyBh bHJlYWR5IG9wZW4sIGl0IGlzIGNsb3NlZCBzaWxlbnRseSBhbmQKLSAgIGF1dG9tYXRpY2FsbHku Ci0KLSAgaHR0cCBnZXQgaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwK LQotICAgS2VybWl0J3MgSFRUUCBhY3Rpb24gY29tbWFuZHMgYXJlIGFzIGZvbGxvd3MuIFN3aXRj aGVzIG1heSBiZSBpbmNsdWRlZAotICAgd2l0aCBhbnkgb2YgdGhlc2UgdG8gb3ZlcnJpZGUgc3dp dGNoIChvciBkZWZhdWx0KSB2YWx1ZXMgZ2l2ZW4gaW4gdGhlCi0gICBIVFRQIE9QRU4gY29tbWFu ZC4KLQotICAgSFRUUCBbIHN3aXRjaGVzIF0gR0VUIHJlbW90ZS1maWxlbmFtZSBbIGxvY2FsLWZp bGVuYW1lIF0KLSAgICAgICAgICBSZXRyaWV2ZXMgdGhlIG5hbWVkIGZpbGUgZnJvbSB0aGUgc2Vy dmVyIHNwZWNpZmllZCBpbiB0aGUgbW9zdAotICAgICAgICAgIHJlY2VudCBIVFRQIE9QRU4gY29t bWFuZCBmb3Igd2hpY2ggYSBjb3JyZXNwb25kaW5nIEhUVFAgQ0xPU0UKLSAgICAgICAgICBjb21t YW5kIGhhcyBub3QgYmVlbiBnaXZlbi4gVGhlIGZpbGVuYW1lIG1heSBub3QgaW5jbHVkZQotICAg ICAgICAgIHdpbGRjYXJkcyAoSFRUUCBwcm90b2NvbCBkb2VzIG5vdCBzdXBwb3J0IHRoZW0pLiBJ ZiBubyBIVFRQIE9QRU4KLSAgICAgICAgICBjb21tYW5kIGlzIGluIGVmZmVjdCwgdGhpcyBmb3Jt IG9mIHRoZSBIVFRQIEdFVCBjb21tYW5kIGZhaWxzLgotICAgICAgICAgIFRoZSBkZWZhdWx0IGxv Y2FsIGZpbGVuYW1lIGlzIHRoZSBzYW1lIGFzIHRoZSByZW1vdGUgbmFtZSwgYnV0Ci0gICAgICAg ICAgd2l0aCBhbnkgcGF0aG5hbWUgc3RyaXBwZWQuIEZvciBleGFtcGxlLCB0aGUgY29tbWFuZCBo dHRwIGdldAotICAgICAgICAgIGtlcm1pdC9pbmRleC5odG1sIHN0b3JlcyB0aGUgZmlsZSBpbiB0 aGUgY3VycmVudCBsb2NhbCBkaXJlY3RvcnkKLSAgICAgICAgICBhcyBpbmRleC5odG1sLiBJZiB0 aGUgL0hFQURFUlM6IHN3aXRjaCBpcyBpbmNsdWRlZCwgaW5mb3JtYXRpb24KLSAgICAgICAgICBh Ym91dCB0aGUgZmlsZSBpcyBhbHNvIHN0b3JlZCBpbiB0aGUgc3BlY2lmaWVkIGFycmF5IChleHBs YWluZWQKLSAgICAgICAgICBpbiBbMTg4XVNlY3Rpb24gMi4yLjMpLiBBbGwgZmlsZXMgYXJlIHRy YW5zZmVycmVkIGluIGJpbmFyeQotICAgICAgICAgIG1vZGUuIEhUVFAgZG9lcyBub3QgcHJvdmlk ZSBmb3IgcmVjb3JkLWZvcm1hdCBvciBjaGFyYWN0ZXItc2V0Ci0gICAgICAgICAgY29udmVyc2lv bi4KLQotICAgSFRUUCBbIHN3aXRjaGVzIF0gR0VUIHVybCBbIGxvY2FsLWZpbGVuYW1lIF0KLSAg ICAgICAgICBXaGVuIEhUVFAgR0VUIGlzIGdpdmVuIGEgVVJMIHJhdGhlciB0aGFuIGEgZmlsZW5h bWUsIEtlcm1pdAotICAgICAgICAgIG9wZW5zIGEgY29ubmVjdGlvbiB0byB0aGUgZGVzaWduYXRl ZCBzZXJ2ZXIgKGNsb3NpbmcgYW55Ci0gICAgICAgICAgcHJldmlvdXNseSBvcGVuIEhUVFAgY29u bmVjdGlvbiksIGdldHMgdGhlIGZpbGUsIGFuZCB0aGVuIGNsb3NlcwotICAgICAgICAgIHRoZSBj b25uZWN0aW9uLiBJZiB0aGUgVVJMIGRvZXMgbm90IGluY2x1ZGUgYSBmaWxlbmFtZSwKLSAgICAg ICAgICBpbmRleC5odG1sIGlzIHN1cHBsaWVkLiBUaGlzIGlzIHRoZSBzZWxmLWNvbnRhaW5lZCBv bmUtc3RlcAotICAgICAgICAgICJjb25uZWN0aW9ubGVzcyIgbWV0aG9kIGZvciBnZXR0aW5nIGEg ZmlsZSBmcm9tIGEgV2ViIHNlcnZlci4KLSAgICAgICAgICBUaGUgZGF0YSBpcyBub3QgaW50ZXJw cmV0ZWQ7IEhUVFAgR0VUIGlzIGxpa2UgImx5bnggLXNvdXJjZSIKLSAgICAgICAgICByYXRoZXIg dGhhbiAibHlueCAtZHVtcCIuCi0KLSAgIEluIHRoZSByZW1haW5pbmcgSFRUUCBhY3Rpb24gY29t bWFuZHMsIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGEgcmVtb3RlCi0gICBmaWxlbmFtZSBhbmQg YSBVUkwgYXJlIHRoZSBzYW1lIGFzIGluIHRoZSBIVFRQIEdFVCBjb21tYW5kLgotCi0gICBIVFRQ IFsgc3dpdGNoZXMgXSBIRUFEIHJlbW90ZS1maWxlbmFtZS1vci11cmwgWyBsb2NhbC1maWxlbmFt ZSBdCi0gICAgICAgICAgTGlrZSBHRVQgZXhjZXB0IHdpdGhvdXQgYWN0dWFsbHkgZ2V0dGluZyB0 aGUgZmlsZTsgaW5zdGVhZCBpdAotICAgICAgICAgIHJldHJpZXZlcyBvbmx5IHRoZSBoZWFkZXJz LiBJZiB0aGUgL0FSUkFZOiBvciAvVE9TQ1JFRU4gc3dpdGNoCi0gICAgICAgICAgaXMgaW5jbHVk ZWQsIHRoZXJlIGlzIG5vIGRlZmF1bHQgbG9jYWwgb3V0cHV0IGZpbGVuYW1lIGJ1dCB5b3UKLSAg ICAgICAgICBjYW4gc3RpbGwgc3BlY2lmeSBvbmUuIElmIG5laXRoZXIgb2YgdGhlc2Ugc3dpdGNo ZXMgaXMgaW5jbHVkZWQsCi0gICAgICAgICAgdGhlIGRlZmF1bHQgbG9jYWwgZmlsZW5hbWUgaXMg dGhlIHNhbWUgYXMgdGhlIHJlbW90ZSBmaWxlbmFtZSwKLSAgICAgICAgICBidXQgd2l0aCBhbnkg cGF0aCBzdHJpcHBlZCBhbmQgd2l0aCAiLmhlYWQiIGFwcGVuZGVkLiBUaGUgSEVBRAotICAgICAg ICAgIGNvbW1hbmQgY2FuIGJlIHVzZWQgaW4gYSBzY3JpcHQgd2l0aCB0aGUgL0FSUkFZOiBzd2l0 Y2ggdG8KLSAgICAgICAgICByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVxdWVzdGVk IHJlc291cmNlIHRvIGRldGVybWluZQotICAgICAgICAgIHdoZXRoZXIgdGhlIHJlc291cmNlIHNo b3VsZCBhY3R1YWxseSBiZSByZXRyaWV2ZWQgd2l0aCBhCi0gICAgICAgICAgc3Vic2VxdWVudCBH RVQgcmVxdWVzdC4KLQotICAgSFRUUCBbIHN3aXRjaGVzIF0gSU5ERVggcmVtb3RlLWRpcmVjdG9y eS1vci11cmwgWyBsb2NhbC1maWxlbmFtZSBdCi0gICAgICAgICAgQXNrcyB0aGUgc2VydmVyIHRv IHNlbmQgYSBsaXN0aW5nIG9mIHRoZSBmaWxlcyBpbiB0aGUgZ2l2ZW4KLSAgICAgICAgICBzZXJ2 ZXIgZGlyZWN0b3J5LiBUaGlzIGNvbW1hbmQgaXMgbm90IHN1cHBvcnRlZCBieSBtb3N0IFdlYgot ICAgICAgICAgIHNlcnZlcnMuIEV2ZW4gd2hlbiBpdCBpcyBzdXBwb3J0ZWQsIHRoZXJlIGlzIG5v IHN0YW5kYXJkIGZvcm1hdAotICAgICAgICAgIGZvciB0aGUgbGlzdGluZy4KLQotICAgSFRUUCBb IHN3aXRjaGVzIF0gUE9TVCBbIC9NSU1FLVRZUEU6dHlwZSBdIHNvdXJjZS1maWxlCi0gICAgICAg ICAgcmVtb3RlLXBhdGgtb3ItdXJsIFsgcmVzdWx0LWZpbGUgXQotICAgICAgICAgIFNlbmRzIGRh dGEgdG8gYSBwcm9jZXNzIHJ1bm5pbmcgb24gdGhlIHJlbW90ZSBob3N0OyB0aGUgcmVzdWx0Ci0g ICAgICAgICAgaXMgdXN1YWxseSBhbiBIVE1MIGZpbGUgYnV0IGNvdWxkIGJlIGFueXRoaW5nLiBU aGUgZGF0YSB0byBiZQotICAgICAgICAgIHBvc3RlZCBtdXN0IGJlIHJlYWQgZnJvbSBhIGxvY2Fs IGZpbGUgKHRoZSBzb3VyY2UtZmlsZSkuIElmIGEKLSAgICAgICAgICByZXN1bHQgZmlsZSBpcyBz cGVjaWZpZWQsIEtlcm1pdCBzdG9yZXMgdGhlIHNlcnZlcidzIHJlc3BvbnNlIGluCi0gICAgICAg ICAgaXQuCi0KLSAgIEhUVFAgWyBzd2l0Y2hlcyBdIFBVVCBbIE1JTUUtVFlQRTp0eXBlIF0gbG9j YWwtZmlsZSBbCi0gICAgICAgICAgcmVtb3RlLWZpbGUtb3ItdXJsIFsgcmVzdWx0LWZpbGUgXSBd Ci0gICAgICAgICAgVXBsb2FkcyBhIGxvY2FsIGZpbGUgdG8gdGhlIHNlcnZlci4gT25seSB0aGUg bmFtZSBvZiBhIHNpbmdsZQotICAgICAgICAgIGZpbGUgY2FuIGJlIGdpdmVuOyB3aWxkY2FyZHMg KGFuZCBncm91cCB0cmFuc2ZlcnMpIGFyZSBub3QKLSAgICAgICAgICBzdXBwb3J0ZWQgYnkgSFRU UCBwcm90b2NvbC4gSWYgbm8gcmVtb3RlIGZpbGVuYW1lIGlzIGdpdmVuLCB0aGUKLSAgICAgICAg ICBmaWxlIGlzIHNlbnQgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBsb2NhbCBmaWxlLCBidXQg d2l0aCBhbnkKLSAgICAgICAgICBwYXRobmFtZSBzdHJpcHBlZC4KLQotICAgSFRUUCBbIHN3aXRj aGVzIF0gREVMRVRFIHJlbW90ZS1maWxlLW9yLXVybCBbIGxvY2FsLXJlc3VsdC1maWxlIF0KLSAg ICAgICAgICBBc2tzIHRoZSBzZXJ2ZXIgdG8gZGVsZXRlIHRoZSBzcGVjaWZpZWQgc2luZ2xlIGZp bGUuIElmIGEgcmVzdWx0Ci0gICAgICAgICAgZmlsZSBpcyBzcGVjaWZpZWQsIGl0IHdpbGwgY29u dGFpbiBhbnkgcmVzcG9uc2UgZGF0YSByZXR1cm5lZCBieQotICAgICAgICAgIHRoZSBzZXJ2ZXIu Ci0KLSAgIE5vdGUgdGhlIGxpbWl0YXRpb25zIG9mIEhUVFAgcHJvdG9jb2wgY29tcGFyZWQgdG8g KHNheSkgRlRQIG9yIEtlcm1pdC4KLSAgIFRoZXJlIGlzIG5vIGNvbW1hbmQgZm9yIGNoYW5naW5n IGRpcmVjdG9yaWVzLCBubyBzdGFuZGFyZCB3YXkgdG8gZ2V0Ci0gICBmaWxlIG9yIGRpcmVjdG9y eSBsaXN0cywgbm8gd2F5IHRvIHRyYW5zZmVyIGZpbGUgZ3JvdXBzIGJ5IHVzaW5nCi0gICB3aWxk Y2FyZCBub3RhdGlvbiwgZXRjLCBhbmQgdGhlcmVmb3JlIG5vIGdvb2Qgd2F5IHRvIChzYXkpIGZl dGNoIGFsbAotICAgcGFnZXMsIGRlc2NlbmQgdGhyb3VnaCBzdWJkaXJlY3RvcmllcywgcGVyZm9y bSBhdXRvbWF0aWMgdXBkYXRlcywgZXRjLgotICAgVGhlcmUgaXMgbm8gYXNzdXJhbmNlIGEgY29u bmVjdGlvbiB3aWxsIHN0YXkgb3BlbiBhbmQsIGFzIG5vdGVkLCB0aGVyZQotICAgaXMgbm8gcHJv dmlzaW9uIGZvciBkYXRhIGNvbnZlcnNpb24gYmV0d2VlbiB1bmxpa2UgcGxhdGZvcm1zLiBUaGUK LSAgIGRhdGEncyBNSU1FIGhlYWRlcnMgY2FuIGJlIHVzZWQgZm9yIHBvc3Rwcm9jZXNzaW5nLgot Ci0yLjIuMy4gSFRUUCBIZWFkZXJzCi0KLSAgIEVhY2ggSFRUUCByZXF1ZXN0IGFuZCByZXNwb25z ZSBjb250YWlucyBhIHNldCBvZiBuYW1lL3ZhbHVlIHBhaXJzCi0gICBjYWxsZWQgaGVhZGVycy4g SFRUUCBoZWFkZXJzIGFyZSBzcGVjaWZpZWQgaW4gWzE4OV1SRkMgMjYxNi4gRm9yCi0gICBleGFt cGxlLCBhbiBIVFRQIEdFVCByZXF1ZXN0IGZvciAvaW5kZXguaHRtbCBvbiB3d3cuY29sdW1iaWEu ZWR1Ci0gICBjb250YWlucyB0aGUgZm9sbG93aW5nIGhlYWRlcnM6Ci0KLSAgR0VUIC9pbmRleC5o dG1sIEhUVFAvMS4xCi0gIEhvc3Q6IHd3dy5jb2x1bWJpYS5lZHU6ODAKLSAgVXNlci1hZ2VudDog Qy1LZXJtaXQgOC4wCi0gIEF1dGhvcml6YXRpb246IEJhc2ljIGJhc2U2NC1lbmNvZGVkLXVzZXJu YW1lLXBhc3N3b3JkCi0KLSAgIFRoZXNlIG1pZ2h0IGJlIGZvbGxvd2VkIGJ5IGFueSBvdGhlcnMg c3BlY2lmaWVkIHdpdGggYSAvSEVBREVSUzoKLSAgIHN3aXRjaDoKLQotICBBY2NlcHQ6IGltYWdl L2dpZiwgaW1hZ2UveC14Yml0bWFwLCBpbWFnZS9qcGVnLCAqLioKLSAgQWNjZXB0LUVuY29kaW5n OiBnemlwCi0gIEFjY2VwdC1MYW5ndWFnZTogZW4KLSAgQWNjZXB0LUNoYXJzZXQ6IGlzby04ODU5 LTEsdXRmLTgKLSAgQ29va2llOiBjb29raWUtZGF0YQotCi0gICBUaGUgc2VydmVyIHNlbmRzIGJh Y2sgYSBzaG9ydCByZXBvcnQgYWJvdXQgdGhlIGZpbGUgcHJpb3IgdG8gc2VuZGluZwotICAgdGhl IGZpbGUgY29udGVudHMuIEV4YW1wbGU6Ci0KLSAgSFRUUC8xLjEgMjAwIE9LCi0gIERhdGU6IEZy aSwgMjQgQXVnIDIwMDEgMjE6MDk6MzkgR01UCi0gIFNlcnZlcjogQXBhY2hlLzEuMy40IChVbml4 KQotICBMYXN0LU1vZGlmaWVkOiBNb24sIDA2IEF1ZyAyMDAxIDIxOjE2OjEzIEdNVAotICBFVGFn OiAiMWZhMTM3LTEwZDctM2I2ZjA5MWQiCi0gIEFjY2VwdC1SYW5nZXM6IGJ5dGVzCi0gIENvbnRl bnQtTGVuZ3RoOiA0MzExCi0gIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCi0KLSAgIElmIHlvdSB3 YW50IHRvIGhhdmUgdGhpcyBpbmZvcm1hdGlvbiBhdmFpbGFibGUgdG8gYSBLZXJtaXQgc2NyaXB0 IHlvdQotICAgY2FuIHVzZSB0aGUgL0FSUkFZIHN3aXRjaCB0byBoYXZlIEtlcm1pdCBwdXQgaXQg aW4gYXJyYXksIG9uZSBsaW5lIHBlcgotICAgYXJyYXkgZWxlbWVudC4gRXhhbXBsZToKLQotICBz ZXQgZXhpdCB3YXJuaW5nIG9mZgotICBodHRwIG9wZW4gd3d3LmNvbHVtYmlhLmVkdQotICBpZiBm YWlsIGV4aXQgMSBDYW4ndCByZWFjaCBzZXJ2ZXIKLSAgaHR0cCAvYXJyYXk6JmEgZ2V0IC9pbmRl eC5odG1sCi0gIGlmIGZhaWwgZXhpdCAxIENhbid0IGdldCBmaWxlCi0gIGVjaG8gSGVhZGVyIGxp bmVzOiBcZmRpbSgmYSkKLSAgZm9yIFwlaSAxIFxmZGltKCZhKSAxIHsKLSAgICAgIGVjaG8gXCVp LiBcJmFbXCVpXQotICB9Ci0KLSAgIE5vdGUgdGhhdCB0aGUgIkRhdGU6IiBpdGVtIGlzIHRoZSBj dXJyZW50IGRhdGUgYW5kIHRpbWU7IHRoZQotICAgIkxhc3QtTW9kaWZpZWQ6IiBpdGVtIGlzIHRo ZSBmaWxlJ3MgbW9kaWZpY2F0aW9uIGRhdGUgYW5kIHRpbWUuIEFuCi0gICBleGFtcGxlIHNob3dp bmcgaG93IHRvIHVzZSB0aGlzIGluZm9ybWF0aW9uIGlzIHByZXNlbnRlZCBpbgotICAgWzE5MF1T ZWN0aW9uIDguMTMuNy4KLQotMi4yLjQuIFNlY3VyZSBIVFRQIENvbm5lY3Rpb25zCi0KLSAgIFNT TC9UTFMgKFNlY3VyZSBTb2NrZXRzIExheWVyIC8gVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5KSBp cyB0aGUKLSAgIHByb3RvY29sIHVzZWQgdG8gc2VjdXJlIEhUVFAsIFNNVFAsIGFuZCBvdGhlciBJ bnRlcm5ldCBhcHBsaWNhdGlvbnMuCi0gICBTZWUgdGhlIFsxOTFdQy1LZXJtaXQgUmVmZXJlbmNl IFNlY3Rpb24gNS40IGZvciBhbiBpbnRyb2R1Y3Rpb24gdG8KLSAgIFNTTC9UTFMuIFRvIG1ha2Ug YSBzZWN1cmUgSFRUUCBjb25uZWN0aW9uLCB5b3UgbmVlZDoKLQotICAgIDEuIEEgc2VjdXJlIGNs aWVudCAoYSB2ZXJzaW9uIG9mIEMtS2VybWl0IG9yIEtlcm1pdCA5NSB3aXRoIFNTTC9UTFMKLSAg ICAgICBzZWN1cml0eSBidWlsdCBpbikuIFR5cGUgImNoZWNrIHNzbCIgYXQgdGhlIEtlcm1pdCBw cm9tcHQgdG8gbWFrZQotICAgICAgIHN1cmUgeW91IGhhdmUgaXQuCi0gICAgMi4gQSBzZWN1cmUg c2VydmVyIHRvIGNvbm5lY3QgdG8uCi0gICAgMy4gVGhlIENBIFJvb3QgQ2VydGlmaWNhdGUgdXNl ZCB0byBhdXRoZW50aWNhdGUgdGhlIHNlcnZlciB0byB0aGUKLSAgICAgICBjbGllbnQuIChzZWUg WzE5Ml1TZWN0aW9uIDE1IG9mIHRoZSBzZWN1cml0eSByZWZlcmVuY2UgZm9yIGFuCi0gICAgICAg aW50cm9kdWN0aW9uIHRvIGNlcnRpZmljYXRlcykuCi0KLSAgIEFuZCB5b3UgbXVzdCBtYWtlIGEg Y29ubmVjdGlvbiB0byB0aGUgc2VjdXJlIEhUVFAgcG9ydDogc2VydmljZSBuYW1lCi0gICBIVFRQ UywgcG9ydCBudW1iZXIgNDQzIChhcyBvcHBvc2VkIHRvIHNlcnZpY2UgSFRUUCwgcG9ydCA4MCku IFlvdSBjYW4KLSAgIGFsc28gbWFrZSBzZWN1cmUgY29ubmVjdGlvbnMgdG8gb3RoZXIgcG9ydHMg YnkgaW5jbHVkaW5nIHRoZSAvVExTIG9yCi0gICAvU1NMIHN3aXRjaCB3aXRoIHRoZSBIVFRQIE9Q RU4gY29tbWFuZCwgaWYgdGhlIGhvc3Qgc3VwcG9ydHMgU1NML1RMUyBvbgotICAgdGhlIGdpdmVu IHBvcnQ6Ci0KLSAgIFRoZSBxdWFsaXR5IG9mIHRoZSBTU0wvVExTIGNvbm5lY3Rpb24gZGVwZW5k cyBvbiB0aGUgY2lwaGVyIHN1aXRlLgotICAgVGhlcmUgYXJlIHNldmVyYWwgcG9zc2liaWxpdGll czoKLQotICAgQW5vbnltb3VzIGNpcGhlciBzdWl0ZToKLSAgICAgICAgICBJZiBhbiBhbm9ueW1v dXMgY2lwaGVyIHN1aXRlIGlzIG5lZ290aWF0ZWQsIHRoZSBjb25uZWN0aW9uIGlzCi0gICAgICAg ICAgZW5jcnlwdGVkIGJ1dCB0aGVyZSBpcyBubyBhdXRoZW50aWNhdGlvbi4gVGhpcyBjb25uZWN0 aW9uIGlzCi0gICAgICAgICAgc3ViamVjdCB0byBhIE1hbi1Jbi1UaGUtTWlkZGxlIChNSVRNKSBh dHRhY2suCi0KLSAgIFguNTA5IGNlcnRpZmljYXRlIG9uIHRoZSBzZXJ2ZXI6Ci0gICAgICAgICAg V2hlbiB5b3UgY29ubmVjdCB0byBjZXJ0YWluIHNlY3VyZSBzZXJ2ZXJzLCBhbiBYLjUwOSBjZXJ0 aWZpY2F0ZQotICAgICAgICAgIGlzIHJldHVybmVkLiBUaGlzIGNlcnRpZmljYXRlIGlzIGlzc3Vl ZCB0byBhIHNwZWNpYWwgaG9zdG5hbWUsCi0gICAgICAgICAgc29tZXRoaW5nIGxpa2Ugd3d3MS54 eXpjb3JwLmNvbSBvciB3d3dzLnh5emNvcnAuY29tIChyYXRoZXIgdGhhbgotICAgICAgICAgIHRo ZSBub3JtYWwgd3d3Lnh5emNvcnAuY29tKS4gSXQgaXMgc2lnbmVkIGJ5IHRoZSBob3N0J3MKLSAg ICAgICAgICBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKENBKS4gSWYgdGhlIGhvc3QgY2VydGlmaWNh dGUgaXMKLSAgICAgICAgICBjb25maWd1cmVkIG9uIHRoZSBjbGllbnQsIGl0IGNhbiBiZSB1c2Vk IHRvIHZlcmlmeSB0aGUKLSAgICAgICAgICBjZXJ0aWZpY2F0ZSByZWNlaXZlZCBmcm9tIHRoZSBz ZXJ2ZXIuIElmIHRoZSBjZXJ0aWZpY2F0ZSBpdAotICAgICAgICAgIHZlcmlmaWVkIGFzIGF1dGhl bnRpYywgYSBjaGVjayBpcyBtYWRlIHRvIGVuc3VyZSBpdCBoYXMgbm90Ci0gICAgICAgICAgZXhw aXJlZCBhbmQgaXQgd2FzIGlzc3VlZCB0byB0aGUgaG9zdCB5b3Ugd2VyZSBhdHRlbXB0aW5nIHRv Ci0gICAgICAgICAgY29ubmVjdCB0by4gSWYgeW91IGhhZCBhc2tlZCB0byBjb25uZWN0IHRvIChz YXkpIHd3dy54eXpjb3JwLmNvbQotICAgICAgICAgIGJ1dCB3ZXJlIGdpdmVuIGEgY2VydGlmaWNh dGUgZm9yIHd3dzEueHl6Y29ycC5jb20sIHlvdSB3b3VsZCBiZQotICAgICAgICAgIHByb21wdGVk IGZvciBwZXJtaXNzaW9uIHRvIGNvbnRpbnVlLgotCi0gICAgICAgICAgSWYgdGhlIHZlcmlmaWNh dGlvbiBzdWNjZWVkZWQsIHRoZSBjb25uZWN0aW9uIHdvdWxkIGJlIGVuY3J5cHRlZAotICAgICAg ICAgIHdpdGggb25lLXdheSAoc2VydmVyLXRvLWNsaWVudCkgYXV0aGVudGljYXRpb24uIFRoaXMg Y29ubmVjdGlvbgotICAgICAgICAgIGlzIG5vdCBzdWJqZWN0IHRvIGEgTUlUTSBhdHRhY2suCi0K LSAgICAgICAgICBJZiBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBhcmUgdHJhbnNtaXR0ZWQgb3Zl ciB0aGlzIGNvbm5lY3Rpb24sCi0gICAgICAgICAgdGhleSBhcmUgbm90IHN1YmplY3QgdG8gaW50 ZXJjZXB0aW9uLiBIb3dldmVyLCB0aGUgc3RhbmRhcmQKLSAgICAgICAgICByaXNrcyBhc3NvY2lh dGVkIHdpdGggcGFzc2luZyB0aGUgcGFzc3dvcmQgdG8gdGhlIGhvc3QgZm9yCi0gICAgICAgICAg dmVyaWZpY2F0aW9uIGFwcGx5OyBmb3IgZXhhbXBsZSwgaWYgdGhlIGhvc3QgaGFzIGJlZW4KLSAg ICAgICAgICBjb21wcm9taXNlZCwgdGhlIHBhc3N3b3JkIHdpbGwgYmUgY29tcHJvbWlzZWQuCi0K LSAgIFguNTA5IGNsaWVudCBjZXJ0aWZpY2F0ZToKLSAgICAgICAgICBJZiBhIGNvbm5lY3Rpb24g aGFzIGJlZW4gZXN0YWJsaXNoZWQgd2l0aCBhbiBYLjUwOSBzZXJ2ZXIKLSAgICAgICAgICBjZXJ0 aWZpY2F0ZSwgdGhlIHNlcnZlciBjYW4gYXNrIHRoZSBjbGllbnQgdG8gc2VuZCBhIGNlcnRpZmlj YXRlCi0gICAgICAgICAgb2YgaXRzIG93bi4gVGhpcyBjZXJ0aWZpY2F0ZSBtdXN0IGJlIHZlcmlm aWVkIGFnYWluc3QgYSBDQSBSb290Ci0gICAgICAgICAgY2VydGlmaWNhdGUuIFRoZSBjZXJ0aWZp Y2F0ZSBpdHNlbGYgKG9yIHN1YmplY3QgaW5mbyBmcm9tIHRoZQotICAgICAgICAgIGNlcnRpZmlj YXRlKSBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgYXV0aG9yaXphdGlvbiBmb3IgdGhlCi0gICAg ICAgICAgY2xpZW50LCBhbmQgaWYgc3VjY2Vzc2Z1bCwgdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29y ZCBuZWVkIG5vdCBiZQotICAgICAgICAgIHNlbnQgdG8gdGhlIHNlcnZlci4KLQotICAgS2VyYmVy b3MgNToKLSAgICAgICAgICBJbnN0ZWFkIG9mIHVzaW5nIFguNTA5IGNlcnRpZmljYXRlcywgS2Vy YmVyb3MgNSBjYW4gYmUgdXNlZCB0bwotICAgICAgICAgIHBlcmZvcm0gdGhlIGF1dGhlbnRpY2F0 aW9uIGFuZCBrZXkgZXhjaGFuZ2UuIEluIHRoaXMgc2l0dWF0aW9uLAotICAgICAgICAgIHRoZXJl IGlzIG11dHVhbCBhdXRoZW50aWNhdGlvbiBiZXR3ZWVuIHRoZSBjbGllbnQgYW5kIHNlcnZlci4K LSAgICAgICAgICBUaGUgS2VyYmVyb3MgNSBwcmluY2lwYWwgaXMgdXNlZCBieSB0aGUgc2VydmVy IHRvIGxvb2sgdXAgdGhlCi0gICAgICAgICAgYXBwcm9wcmlhdGUgYXV0aG9yaXphdGlvbiBkYXRh LiBUaGVyZSBpcyBubyBuZWVkIHRvIHNlbmQKLSAgICAgICAgICB1c2VybmFtZSBhbmQgcGFzc3dv cmQuCi0KLSAgIEFuIEhUVFAgY29ubmVjdGlvbiBpcyBtYWRlIHdpdGggdGhlIEhUVFAgT1BFTiBj b21tYW5kOgotCi0gICBIVFRQIFsgc3dpdGNoZXMgXSBPUEVOIFsgeyAvU1NMLCAvVExTIH0gXSBo b3N0IFsgcG9ydCBdCi0gICAgICAgICAgSWYgL1NTTCBvciAvVExTIHN3aXRjaGVzIGFyZSBpbmNs dWRlZCAodGhlc2UgYXJlIHN5bm9ueW1zKSwgb3IKLSAgICAgICAgICBpZiB0aGUgc2VydmljZSBp cyBIVFRQUyBvciB0aGUgcG9ydCBpcyA0NDMsIGEgc2VjdXJlIGNvbm5lY3Rpb24KLSAgICAgICAg ICBpcyBhdHRlbXB0ZWQgdXNpbmcgdGhlIGN1cnJlbnQgYXV0aGVudGljYXRpb24gc2V0dGluZ3M7 IHNlZSBIRUxQCi0gICAgICAgICAgU0VUIEFVVEhFTlRJQ0FUSU9OIGZvciBkZXRhaWxzIChbMTkz XVNlY3Rpb24gNi4yIG9mIHRoZSBzZWN1cml0eQotICAgICAgICAgIHJlZmVyZW5jZSkuIElmIHRo ZSBubyAvU1NMIG9yIC9UTFMgc3dpdGNoIGlzIGluY2x1ZGVkIGJ1dCB0aGUKLSAgICAgICAgICBw b3J0IGlzIDQ0MyBvciB0aGUgc2VydmljZSBpcyBIVFRQUywgYSBzZWN1cmUgY29ubmVjdGlvbiBp cwotICAgICAgICAgIGF0dGVtcHRlZC4gSWYgYW4gL1NTTCBvciAvVExTIHN3aXRjaCBpcyBpbmNs dWRlZCBidXQgYSBwb3J0IGlzCi0gICAgICAgICAgbm90IHNwZWNpZmllZCwgYW4gU1NML1RMUyBj b25uZWN0aW9uIGlzIGF0dGVtcHRlZCBvbiB0aGUgZGVmYXVsdAotICAgICAgICAgIHBvcnQgKDgw KS4KLQotICAgQ2VydGlmaWNhdGVzIGFyZSBjb3ZlcmVkIGluIHRoZSBzZXBhcmF0ZSBbMTk0XUtl cm1pdCBTZWN1cml0eSBSZWZlcmVuY2UKLSAgIGZvciBDLUtlcm1pdCA4LjAuIFlvdSBzaG91bGQg bGV0IEtlcm1pdCBrbm93IHRvIHZlcmlmeSBjZXJ0aWZpY2F0ZXMKLSAgIHdpdGggdGhlIFNFVCBB VVRIRU5USUNBVElPTiBUTFMgY29tbWFuZC4gRm9yIGV4YW1wbGU6Ci0KLSAgIFNFVCBBVVRIRU5U SUNBVElPTiBUTFMgQ1JMLURJUiBkaXJlY3RvcnkKLSAgICAgICAgICBTcGVjaWZpZXMgYSBkaXJl Y3RvcnkgdGhhdCBjb250YWlucyBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uIGZpbGVzCi0gICAgICAg ICAgd2hlcmUgZWFjaCBmaWxlIGlzIG5hbWVkIGJ5IHRoZSBoYXNoIG9mIHRoZSBjZXJ0aWZpY2F0 ZSB0aGF0IGhhcwotICAgICAgICAgIGJlZW4gcmV2b2tlZC4KLQotICAgU0VUIEFVVEhFTlRJQ0FU SU9OIFRMUyBDUkwtRklMRSBmaWxlbmFtZQotICAgICAgICAgIFNwZWNpZmllcyBhIGZpbGUgdGhh dCBjb250YWlucyBhIGxpc3Qgb2YgY2VydGlmaWNhdGUKLSAgICAgICAgICByZXZvY2F0aW9ucy4K LQotICAgU0VUIEFVVEhFTlRJQ0FUSU9OIFRMUyBWRVJJRlktRElSIGRpcmVjdG9yeQotICAgICAg ICAgIFNwZWNpZmllcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHJvb3QgQ0EgY2VydGlmaWNh dGUgZmlsZXMKLSAgICAgICAgICB1c2VkIHRvIHZlcmlmeSB0aGUgY2VydGlmaWNhdGUgY2hhaW5z IHByZXNlbnRlZCBieSB0aGUgcGVlci4KLSAgICAgICAgICBFYWNoIGZpbGUgaXMgbmFtZWQgYnkg YSBoYXNoIG9mIHRoZSBjZXJ0aWZpY2F0ZS4KLQotICAgU0VUIEFVVEhFTlRJQ0FUSU9OIFRMUyBW RVJJRlktRklMRSBmaWxlbmFtZQotICAgICAgICAgIFNwZWNpZmllcyBhIGZpbGUgdGhhdCBjb250 YWlucyByb290IENBIGNlcnRpZmljYXRlcyB0byBiZSB1c2VkCi0gICAgICAgICAgZm9yIHZlcmlm eWluZyBjZXJ0aWZpY2F0ZSBjaGFpbnMuCi0KLSAgIFNFVCBBVVRIRU5USUNBVElPTiBUTFMgVkVS SUZZIE9GRgotICAgICAgICAgIFRlbGxzIEtlcm1pdCBub3QgdG8gcmVxdWlyZSBhIGNlcnRpZmlj YXRlIGFuZCBhY2NlcHQgYW55Ci0gICAgICAgICAgY2VydGlmaWNhdGUgdGhhdCBpcyBwcmVzZW50 ZWQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIHZhbGlkLgotCi0gICBUaGVyZSBhcmUgbWFu eSBvdGhlciBvcHRpb25zOyBzZWUgdGhlIHNlY3VyaXR5IGRvY3VtZW50IGZvciBkZXRhaWxzLgot Ci0gICBOb3cgc3VwcG9zZSB5b3UgbmVlZCBuZWVkIHRvIGZldGNoIHRoZSBmaWxlIGRlbm90ZWQg YnkgdGhlIGZvbGxvd2luZwotICAgVVJMOgotCi0gIGh0dHBzOi8vbXl1c2VyaWQ6bXlwYXNzd29y ZEB3d3dzLnh5emNvcnAuY29tL2NsaWVudHMvaW5mby9zZWNyZXQuaHRtbAotCi0gICBPbmNlIHlv dSBoYXZlIHNldCB1cCB0aGUgaGFuZGxpbmcgb2YgY2VydGlmaWNhdGVzIGFzIGRlc2lyZWQsIHlv dSBjYW4KLSAgIHVzZSB0aGUgZm9sbG93aW5nIEtlcm1pdCBjb21tYW5kczoKLQotICBodHRwIC91 c2VyOm15dXNlcmlkIC9wYXNzd29yZDpteXBhc3N3b3JkIG9wZW4gd3d3MS54eXpjb3JwLmNvbSBo dHRwcwotICBpZiBzdWNjZXNzIHsKLSAgICAgIGh0dHAgZ2V0IC9jbGllbnRzL2luZm8vc2VjcmV0 Lmh0bWwKLSAgICAgIGh0dHAgY2xvc2UKLSAgfQotCi0gICBBcyBhbm90aGVyIGV4YW1wbGUsIGxl dCdzIHNheSB0aGF0IHlvdSBoYXZlIGEgd2ViIGZvcm0geW91IG5lZWQgdG8KLSAgIHBvcHVsYXRl IHdpdGggdGhyZWUgZmllbGRzOiByZWQsd2hpdGUgYW5kIGJsdWUuCi0KLSAgPEZPUk0gQUNUSU9O PSJodHRwOi8vd3d3Lnh5emNvcnAuY29tL2NnaS1iaW4vZm9ybS5jZ2kiIE1FVEhPRD0iUE9TVCI+ Ci0gIDxJTlBVVCBOQU1FPSJSZWQiPgotICA8SU5QVVQgTkFNRT0iV2hpdGUiPgotICA8SU5QVVQg TkFNRT0iQmx1ZSI+Ci0gIDwvRk9STT4KLQotICAgWW91IGNhbiBoYW5kbGUgdGhpcyB3aXRoIHRo ZSBIVFRQIFBPU1QgY29tbWFuZC4gVGhlIGRhdGEgdG8gYmUgcG9zdGVkCi0gICBpcyBzdG9yZWQg aW4gdGhlIGxvY2FsIGZpbGUgZGF0YS50eHQuCi0KLSAgUmVkPXNldmVuIHN0cmlwZXMmV2hpdGU9 c2l4IHN0cmlwZXMmQmx1ZT1maWZ0eSBzdGFycwotCi0gICBhbmQgdGhlIHJlc3BvbnNlIGZyb20g dGhlIHNlcnZlciB3aWxsIGJlIHN0b3JlZCBpbnRvIHJlc3BvbnNlLnR4dC4KLQotICBodHRwIG9w ZW4gd3d3Lnh5emNvcnAuY29tIGh0dHAKLSAgaWYgc3VjY2VzcyB7Ci0gICAgaHR0cCAvYXJyYXk6 YyBwb3N0IGRhdGEudHh0IC9jZ2ktYmluL2Zvcm0uY2dpIHJlc3BvbnNlLnR4dAotICAgIGh0dHAg Y2xvc2UKLSAgfQotCi0gICBJbiB0aGlzIHNjZW5hcmlvLCB0aGUgQ29tbW9uIEdhdGV3YXkgSW50 ZXJmYWNlIChDR0kpIHNlbmRzIGEgcmVzcG9uc2UKLSAgIHdoZXRoZXIgaXQgc3VjY2VlZHMgb3Ig ZmFpbHMgaW4gYSBzY3JpcHQtZGVwZW5kZW50IG1hbm5lci4gVGhlIHNjcmlwdAotICAgY2FuIGVp dGhlciByZXBvcnQgc3VjY2VzcyBhbmQgZW5jbG9zZSB0aGUgcmVzcG9uc2UgZGF0YTsgb3IgaXQg bWlnaHQKLSAgIHNlbmQgYSAzMDIgRm91bmQgZXJyb3Igd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhl ICJMb2NhdGlvbjoiIGhlYWRlcgotICAgc2hvdWxkIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBV UkwgYXQgd2hpY2ggdGhlIGRhdGEgY2FuIGJlIGZvdW5kLgotCi0yLjIuNS4gSFRUUCBWYXJpYWJs ZXMKLQotICAgXHYoaHR0cF9jb2RlKQotICAgICAgICAgIFRoZSBIVFRQIHByb3RvY29sIGNvZGUg bnVtYmVyIG9mIHRoZSBtb3N0IHJlY2VudCBzZXJ2ZXIgcmVwbHksCi0gICAgICAgICAgZS5nLiA0 MDQgZm9yICJub3QgZm91bmQiLgotCi0gICBcdihodHRwX2Nvbm5lY3RlZCkKLSAgICAgICAgICAx IHdoZW4gYW4gSFRUUCBjb25uZWN0aW9uIGlzIG9wZW4sIDAgd2hlbiB0aGVyZSBpcyBubyBIVFRQ Ci0gICAgICAgICAgY29ubmVjdGlvbi4KLQotICAgXHYoaHR0cF9ob3N0KQotICAgICAgICAgIElm IGFuIEhUVFAgY29ubmVjdGlvbiBpcyBvcGVuLCB0aGUgaG9zdG5hbWU6cG9ydCwgZS5nLgotICAg ICAgICAgIHd3dy5jb2x1bWJpYS5lZHU6ODA7IG90aGVyd2lzZSwgZW1wdHkuCi0KLSAgIFx2KGh0 dHBfbWVzc2FnZSkKLSAgICAgICAgICBTZXJ2ZXIgZXJyb3IgbWVzc2FnZSwgaWYgYW55LCBmcm9t IG1vc3QgcmVjZW50IEhUVFAgY29tbWFuZC4KLQotICAgXHYoaHR0cF9zZWN1cml0eSkKLSAgICAg ICAgICBBIGxpc3Qgb2YgdGhlIHNlY3VyaXR5IHBhcmFtZXRlcnMgYW5kIHZhbHVlcyBmb3IgdGhl IGN1cnJlbnQKLSAgICAgICAgICBjb25uZWN0aW9uLCBpZiBhbnkuIEVtcHR5IGlmIHRoZSBjb25u ZWN0aW9uIGlzIG5vdCB0byBhIHNlY3VyZQotICAgICAgICAgIHNlcnZlciwgb3IgdGhlcmUgaXMg bm8gY29ubmVjdGlvbi4KLQotICAgVG8gZGlzcGxheSBhbGwgdGhlIEhUVFAgdmFyaWFibGVzIGF0 IG9uY2UsIHR5cGUgU0hPVyBWQVIgSFRUUDoKLQotICBDLUtlcm1pdD4gaHR0cCBvcGVuIHd3dy5j b2x1bWJpYS5lZHUKLSAgQy1LZXJtaXQ+IGh0dHAgZ2V0IGxramxramxramxragotICBDLUtlcm1p dD4gc2hvIHZhciBodHRwCi0gICBcdihodHRwX2NvZGUpID0gNDA0Ci0gICBcdihodHRwX2Nvbm5l Y3RlZCkgPSAxCi0gICBcdihodHRwX2hvc3QpID0gd3d3LmNvbHVtYmlhLmVkdTo4MAotICAgXHYo aHR0cF9tZXNzYWdlKSA9IE5vdCBGb3VuZAotICAgXHYoaHR0cF9zZWN1cml0eSkgPSBOVUxMCi0g IEMtS2VybWl0PgotCi0yLjIuNi4gVGhlIEhUVFAgQ29tbWFuZC1MaW5lIFBlcnNvbmFsaXR5Ci0K LSAgIElmIHlvdSBpbnZva2UgQy1LZXJtaXQgd2l0aCB0aGUgbmFtZSAiaHR0cCIgb3IgImh0dHBz IiwgeW91IGNhbiB1c2UgYQotICAgc3BlY2lhbCBzZXQgb2YgSFRUUC1zcGVjaWZpYyBjb21tYW5k LWxpbmUgb3B0aW9ucy4gWW91IGNhbiBkbyB0aGlzIGJ5Ci0gICBjcmVhdGluZyBhIHN5bWJvbGlj IGxpbmtlICJodHRwIiBvciAiaHR0cHMiIHRvIHRoZSBDLUtlcm1pdCA4LjAKLSAgIGV4ZWN1dGFi bGUsIG9yIGJ5IGhhdmluZyBhIHNlcGFyYXRlIGNvcHkgb2YgaXQgY2FsbGVkICJodHRwIiBvcgot ICAgImh0dHBzIi4gSGVyZSdzIHRoZSB1c2FnZSBtZXNzYWdlICgiaHR0cCAtaCIpOgotCi0gIFVz YWdlOiAuL2h0dHAgaG9zdCBbIG9wdGlvbnMuLi4gXQotICAgLWggICAgICAgICAgICAgVGhpcyBt ZXNzYWdlLgotICAgLWQgICAgICAgICAgICAgRGVidWcgdG8gZGVidWcubG9nLgotICAgLVMgICAg ICAgICAgICAgU3RheSAoaXNzdWUgY29tbWFuZCBwcm9tcHQgd2hlbiBkb25lKS4KLSAgIC1ZICAg ICAgICAgICAgIERvIG5vdCBleGVjdXRlIEtlcm1pdCBpbml0aWFsaXphdGlvbiBmaWxlLgotICAg LXEgICAgICAgICAgICAgUXVpZXQgKHN1cHByZXNzIG1vc3QgbWVzc2FnZXMpLgotICAgLXUgbmFt ZSAgICAgICAgVXNlcm5hbWUuCi0gICAtUCBwYXNzd29yZCAgICBQYXNzd29yZC4KLSAgIC1nIHBh dGhuYW1lICAgIEdldCByZW1vdGUgcGF0aG5hbWUuCi0gICAtcCBwYXRobmFtZSAgICBQdXQgcmVt b3RlIHBhdGhuYW1lLgotICAgLUggcGF0aG5hbWUgICAgSGVhZCByZW1vdGUgcGF0aG5hbWUuCi0g ICAtbCBwYXRobmFtZSAgICBMb2NhbCBwYXRoIGZvciAtZywgLXAsIGFuZCAtSC4KLSAgIC16IG9w dFs9dmFsdWVdIFNlY3VyaXR5IG9wdGlvbnMuLi4KLSAgICAgIGNlcnQ9ZmlsZSAgIENsaWVudCBj ZXJ0aWZpY2F0ZSBmaWxlCi0gICAgICBjZXJ0c29rICAgICBBY2NlcHQgYWxsIGNlcnRpZmljYXRl cwotICAgICAga2V5PWZpbGUgICAgQ2xpZW50IHByaXZhdGUga2V5IGZpbGUKLSAgICAgIHNlY3Vy ZSAgICAgIFVzZSBTU0wKLSAgICAgIHZlcmlmeT1uICAgIDAgPSBub25lLCAxID0gcGVlciAsIDIg PSBjZXJ0aWZpY2F0ZSByZXF1aXJlZAotCi0gICBUaGUgImhvc3QiIGFyZ3VtZW50IGlzIHRoZSBu YW1lIG9mIGEgV2ViIGhvc3QsIGUuZy4gd3d3LmNvbHVtYmlhLmVkdS4KLSAgIFRoZSBhY3Rpb24g b3B0aW9ucyBhcmUgLXAsIC1nLCBhbmQgLUguIElmIHlvdSBnaXZlIGFuIGFjdGlvbiBvcHRpb24s Ci0gICBLZXJtaXQgZG9lcyB0aGUgYWN0aW9uIGFuZCB0aGVuIGV4aXRzLiBJZiB5b3UgZ2l2ZSBh IGhvc3Qgd2l0aG91dCBhbgotICAgYWN0aW9uIG9wdGlvbiwgS2VybWl0IG1ha2VzIGFuIEhUVFAg Y29ubmVjdGlvbiB0byB0aGUgaG9zdCBhbmQgdGhlbgotICAgZ2l2ZXMgeW91IHRoZSBDLUtlcm1p dCBwcm9tcHQuIEhlcmUncyBhIHNpbXBsZSBleGFtcGxlIHRoYXQgZmV0Y2hlcyBhCi0gICBwdWJs aWNseSByZWFkYWJsZSBXZWIgcGFnZToKLQotICBodHRwIHd3dy5jb2x1bWJpYS5lZHUgLWcga2Vy bWl0L2luZGV4Lmh0bWwKLQotICAgSWYgeW91IG5lZWQgdG8gYWNjZXNzIGEgd2Vic2l0ZSBmb3Ig d2hpY2ggYSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgYXJlCi0gICByZXF1aXJlZCwgeW91IGNhbiBz dXBwbHkgdGhlbSBvbiB0aGUgY29tbWFuZCBsaW5lIHdpdGggLXUgYW5kIC1QLiBJZgotICAgeW91 IGluY2x1ZGUgYSB1c2VybmFtZSBidXQgb21pdCB0aGUgcGFzc3dvcmQsIEtlcm1pdCBwcm9tcHRz IHlvdSBmb3IKLSAgIGl0OgotCi0gIGh0dHAgd3d3LmNvbHVtYmlhLmVkdSAtdSBvbGdhIC1wIGtl cm1pdC9pbmRleC5odG1sIC1sIGluZGV4Lmh0bWwKLSAgUGFzc3dvcmQ6Ci0KLSAgIE5vdGUgdGhh dCB3aGVuIFBVVCdpbmcgZmlsZXMgdG8gd2Vic2l0ZXMsIHlvdSBoYXZlIHRvIHN1cHBseSBib3Ro IHRoZQotICAgLXAgKHJlbW90ZSBwYXRobmFtZSkgYW5kIC1sIChsb2NhbCBwYXRoKSBvcHRpb25z LgotCi0gICBJZiB5b3VyIHZlcnNpb24gb2YgS2VybWl0IGlzIGJ1aWx0IHdpdGggU1NML1RMUyBz ZWN1cml0eSwgeW91IGNhbiBhbHNvCi0gICB1c2UgdGhlIC16IG9wdGlvbiB0byBtYWtlIHNlY3Vy ZSBIVFRQIChodHRwcykgY29ubmVjdGlvbnMuCi0KLSAgIEZpbmFsbHksIGFzIG5vdGVkIGluIFsx OTVdU2VjdGlvbiAxNiwgeW91IGNhbiBhbHNvIGdpdmUgYSBVUkwgaW5zdGVhZAotICAgb2YgYSBo b3N0IG5hbWUgYW5kIG9wdGlvbnMuCi0KLSAgIFsgWzE5Nl1Ub3AgXSBbIFsxOTddQ29udGVudHMg XSBbIFsxOThdQy1LZXJtaXQgSG9tZSBdIFsgWzE5OV1LZXJtaXQKLSAgIEhvbWUgXQotCi0zLiBL RVJNSVQnUyBCVUlMVC1JTiBGVFAgQ0xJRU5UCi0KLSAgICAgMy4xLiAgWzIwMF1NYWtpbmcgYW5k IE1hbmFnaW5nIEZUUCBDb25uZWN0aW9ucwotICAgICAzLjIuICBbMjAxXU1ha2luZyBTZWN1cmUg RlRQIENvbm5lY3Rpb25zCi0gICAgIDMuMy4gIFsyMDJdU2V0dGluZyBGVFAgUHJlZmVyZW5jZXMK LSAgICAgMy40LiAgWzIwM11NYW5hZ2luZyBEaXJlY3RvcmllcyBhbmQgRmlsZXMKLSAgICAgMy41 LiAgWzIwNF1VcGxvYWRpbmcgRmlsZXMgV2l0aCBGVFAKLSAgICAgMy42LiAgWzIwNV1Eb3dubG9h ZGluZyBGaWxlcyBXaXRoIEZUUAotICAgICAzLjcuICBbMjA2XVRyYW5zbGF0aW5nIENoYXJhY3Rl ciBTZXRzCi0gICAgIDMuOC4gIFsyMDddRlRQIENvbW1hbmQgU2hvcnRjdXRzCi0gICAgIDMuOS4g IFsyMDhdRHVhbCBTZXNzaW9ucwotICAgICAzLjEwLiBbMjA5XUF1dG9tYXRpbmcgRlRQIFNlc3Np b25zCi0gICAgIDMuMTEuIFsyMTBdQWR2YW5jZWQgRlRQIFByb3RvY29sIEZlYXR1cmVzCi0KLSAg IEVhcmxpZXIgdmVyc2lvbnMgb2YgQy1LZXJtaXQgYW5kIEs5NSBpbmNsdWRlZCBhbiBGVFAgY29t bWFuZCwgYnV0IGl0Ci0gICBzaW1wbHkgaW52b2tlZCBhbiBleHRlcm5hbCBGVFAgY2xpZW50LiBO b3csIGJ5IHBvcHVsYXIgZGVtYW5kLCBLZXJtaXQKLSAgIGluY2x1ZGVzIGl0cyBvd24gYnVpbHQt aW4gRlRQIGNsaWVudCB0aGF0IG9mZmVycyB0aGUgZm9sbG93aW5nCi0gICBhZHZhbnRhZ2VzIG92 ZXIgdHJhZGl0aW9uYWwgRlRQIGNsaWVudHMgKGFuZCBpdHMgcHJldmlvdXMgaW50ZXJmYWNlIHRv Ci0gICB0aGVtKToKLQotICAgICAqIEFueSBvZiBLZXJtaXQncyBidWlsdC1pbiBbMjExXXNlY3Vy aXR5IG1ldGhvZHMgY2FuIGJlIHVzZWQgdG8KLSAgICAgICBlc3RhYmxpc2ggYW5kIGNvbmR1Y3Qg c2VjdXJlIEZUUCBzZXNzaW9ucyB3aXRoIFsyMTJdRlRQIHNlcnZlcnMKLSAgICAgICB0aGF0IHN1 cHBvcnQgdGhlc2UgbWV0aG9kcy4gKFNlY3VyaXR5IG1vZHVsZXMgY2FuIGJlIHN1YmplY3QgdG8K LSAgICAgICBleHBvcnQgcmVzdHJpY3Rpb25zLikKLSAgICAgKiBLZXJtaXQncyBGVFAgY2xpZW50 IHVzZXMgInBhc3NpdmUgbW9kZSIgYnkgZGVmYXVsdCB0byBhdm9pZAotICAgICAgIGJsb2NrYWdl IGJ5IGZpcmV3YWxscyBhbmQgbmV0d29yayBhZGRyZXNzIHRyYW5zbGF0b3JzLiBPZiBjb3Vyc2UK LSAgICAgICBhY3RpdmUgbW9kZSBjYW4gYmUgY2hvc2VuIHRvbyB3aGVuIG5lZWRlZC4KLSAgICAg KiBbMjEzXUNoYXJhY3RlciBzZXRzIGNhbiBiZSB0cmFuc2xhdGVkIGFzIHBhcnQgb2YgdGhlIHRy YW5zZmVyCi0gICAgICAgcHJvY2VzcyBldmVuIHdoZW4gdGhlIEZUUCBzZXJ2ZXIgZG9lcyBub3Qg c3VwcG9ydCBjaGFyYWN0ZXItc2V0Ci0gICAgICAgdHJhbnNsYXRpb24sIGluY2x1ZGluZyB0by9m cm9tIHRoZSBuZXcgSW50ZXJuZXQgc3RhbmRhcmQKLSAgICAgICBpbnRlcm5hdGlvbmFsIGNoYXJh Y3RlciBzZXQsIFsyMTRdVW5pY29kZSBVVEYtOC4gVGhpcyBpbmNsdWRlcyBib3RoCi0gICAgICAg dGhlIGZpbGUncyBuYW1lIGFuZCAoZm9yIHRleHQgZmlsZXMgb25seSkgaXRzIGNvbnRlbnRzLgot ICAgICAqIEFsbCBvZiBDLUtlcm1pdCdzIFsyMTVdZmlsZS1zZWxlY3Rpb24gbWVjaGFuaXNtcyBh cmUgYXZhaWxhYmxlOgotICAgICAgIHNpemUsIGRhdGUsIG5hbWUgcGF0dGVybnMgYW5kIGxpc3Rz LCBleGNlcHRpb24gbGlzdHMsIGV0Yy4KLSAgICAgKiBbMjE2XUF0b21pYyBmaWxlIG1vdmVtZW50 IGNhcGFiaWxpdGllcyBhcmUgcHJvdmlkZWQgKGRlbGV0ZSwgbW92ZSwKLSAgICAgICBvciByZW5h bWUgZmlsZXMgYXV0b21hdGljYWxseSBhZnRlciBzdWNjZXNzZnVsIHRyYW5zZmVyKS4KLSAgICAg KiBUaGUgY29ycmVjdCBmaWxlIHR5cGUsICJhc2NpaSIgKGkuZS4gdGV4dCkgb3IgYmluYXJ5LCBp cyBjaG9zZW4KLSAgICAgICBhdXRvbWF0aWNhbGx5IGZvciBlYWNoIGZpbGUgKGV4cGxhaW5lZCBp biBbMjE3XVNlY3Rpb24gNCksIGFuZCBhbnkKLSAgICAgICBtaXh0dXJlIG9mIHRleHQgYW5kIGJp bmFyeSBmaWxlcyBjYW4gYmUgc2VudCBpbiBhIHNpbmdsZSBvcGVyYXRpb24sCi0gICAgICAgZXZl biBhY3Jvc3MgcGxhdGZvcm1zLgotICAgICAqIFVwZGF0ZSBtb2RlICgiZG9uJ3QgYm90aGVyIHRy YW5zZmVycmluZyBmaWxlcyB0aGF0IGRpZG4ndCBjaGFuZ2UKLSAgICAgICBzaW5jZSBsYXN0IHRp bWUiKSBhbmQgcmVjb3ZlcnkgKHJlc3VtcHRpb24gb2YgYW4gaW50ZXJydXB0ZWQKLSAgICAgICB0 cmFuc2ZlciBmcm9tIHRoZSBwb2ludCBvZiBmYWlsdXJlKSBhcmUgYXZhaWxhYmxlIGluIGJvdGgK LSAgICAgICBkaXJlY3Rpb25zLgotICAgICAqIFdoZW4gdXBsb2FkaW5nIGZpbGVzIGZyb20gVU5J WCB0byBVTklYLCB0aGUgZmlsZSdzIHBlcm1pc3Npb25zIGNhbgotICAgICAgIGJlIHByZXNlcnZl ZCBpZiBkZXNpcmVkLgotICAgICAqIFJlY3Vyc2l2ZSBkaXJlY3RvcnktdHJlZSBQVVRzIGFyZSBz dXBwb3J0ZWQgYmV0d2VlbiBhbnkgdHdvCi0gICAgICAgcGxhdGZvcm1zIHRoYXQgaGF2ZSB0cmVl LXN0cnVjdHVyZWQgZmlsZSBzeXN0ZW1zLiBSZWN1cnNpdmUgR0VUcwotICAgICAgIGFyZSBzdXBw b3J0ZWQgYmV0d2VlbiBsaWtlIHBsYXRmb3JtcyBpZiB0aGUgc2VydmVyIGNvb3BlcmF0ZXMgYW5k Ci0gICAgICAgYmV0d2VlbiBsaWtlIG9yIHVubGlrZSBwbGF0Zm9ybXMgaWYgdGhlIHNlcnZlciBz dXBwb3J0cyBNTFNECi0gICAgICAgKFsyMThdU2VjdGlvbiAzLjExKS4KLSAgICAgKiBXaGVuIHJl Y2VpdmluZyBmaWxlcywgYWxsIG9mIEtlcm1pdCdzIGZpbGUgY29sbGlzaW9uIGFjdGlvbnMgYXJl Ci0gICAgICAgYXZhaWxhYmxlOiBiYWNrdXAsIHVwZGF0ZSwgcmVmdXNlLCByZW5hbWUsIGV0Yy4K LSAgICAgKiBNdWx0aS1maWxlIHRyYW5zZmVycyBjYW4gYmUgaW50ZXJydXB0ZWQgb24gYSBwZXIt ZmlsZSBiYXNpcywKLSAgICAgICBhdXRvbWF0aWNhbGx5IHNraXBwaW5nIHRvIHRoZSBuZXh0IGZp bGUuCi0gICAgICogRlRQIHNlc3Npb25zIGFyZSBbMjE5XWZ1bGx5IHNjcmlwdGFibGUuCi0gICAg ICogQW4gZW50aXJlIEZUUCBzZXNzaW9uIChjb25uZWN0LCBsb2dpbiwgQ0QsIHVwbG9hZCBvciBk b3dubG9hZCwKLSAgICAgICBsb2dvdXQpIGNhbiBiZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQg bGluZSB3aXRob3V0IHVzaW5nIGEKLSAgICAgICBzY3JpcHQuCi0gICAgICogQWxsIG9mIEtlcm1p dCdzIGxvZ2dpbmcgb3B0aW9ucyBhbmQgZm9ybWF0cyBhcmUgYXZhaWxhYmxlIHRvIGtlZXAKLSAg ICAgICBhbiBhY2N1cmF0ZSBhbmQgY29tcGxldGUgcmVjb3JkIG9mIGVhY2ggY29ubmVjdGlvbiBh bmQgZmlsZQotICAgICAgIHRyYW5zZmVyLCBhbmQgdG8gYWlkIGluIHRyb3VibGVzaG9vdGluZy4K LSAgICAgKiBBbGwgb2YgS2VybWl0J3MgZmlsZS10cmFuc2ZlciBkaXNwbGF5IG9wdGlvbnMgYXJl IGF2YWlsYWJsZQotICAgICAgIChmdWxsc2NyZWVuLCBicmllZiwgQ1JULCBzZXJpYWwsIG5vbmUp LgotCi0gICBBbmQgYmVzdCBvZiBhbGw6Ci0gICAgICogS2VybWl0IGRvZXNuJ3QgZ2l2ZSB5b3Ug dGhvc2UgYW5ub3lpbmcgcGVyLWZpbGUgcHJvbXB0cyBldmVyeSB0aW1lCi0gICAgICAgeW91IHN0 YXJ0IGEgbXVsdGktZmlsZSB0cmFuc2ZlciB3aXRob3V0IHJlbWVtYmVyaW5nIHRvIGdpdmUgYQot ICAgICAgICJwcm9tcHQiIGNvbW1hbmQgZmlyc3QgOi0pLgotCi0gICBbIFsyMjBdVG9wIF0gWyBb MjIxXUZUUCBUb3AgXSBbIFsyMjJdRlRQIENsaWVudCBPdmVydmlldyBdIFsgWzIyM11GVFAKLSAg IFNjcmlwdCBUdXRvcmlhbCBdIFsgWzIyNF1DLUtlcm1pdCBIb21lIF0gWyBbMjI1XUtlcm1pdCBI b21lIF0KLQotMy4xLiBNYWtpbmcgYW5kIE1hbmFnaW5nIEZUUCBDb25uZWN0aW9ucwotCi0gICBF YWNoIGNvcHkgb2YgS2VybWl0IGNhbiBoYXZlIG9uZSBGVFAgY29ubmVjdGlvbiBvcGVuIGF0IGEg dGltZS4gRlRQCi0gICBjb25uZWN0aW9ucyBhcmUgaW5kZXBlbmRlbnQgb2YgcmVndWxhciB0ZXJt aW5hbCBjb25uZWN0aW9uczsgYSB0ZXJtaW5hbAotICAgY29ubmVjdGlvbiAoc2VyaWFsIG9yIG5l dHdvcmsgdmlhIFNFVCBMSU5FLCBESUFMLCBTRVQgSE9TVCwgVEVMTkVULAotICAgZXRjKSBtYXkg YmUsIGJ1dCBuZWVkIG5vdCBiZSwgb3BlbiBhdCB0aGUgc2FtZSB0aW1lIGFzIGFuIEZUUAotICAg Y29ubmVjdGlvbiwgYW5kIHRlcm1pbmFsIGNvbm5lY3Rpb25zIGNhbiBhbHNvIGJlIGNsb3NlZCwg YW5kIG5ldwotICAgY29ubmVjdGlvbnMgb3BlbmVkLCB3aXRob3V0IGludGVyZmVyaW5nIHdpdGgg dGhlIEZUUCBjb25uZWN0aW9uIChhbmQKLSAgIHZpY2UgdmVyc2EpLiBUaHVzLCBmb3IgZXhhbXBs ZSwgS2VybWl0IGNhbiBoYXZlIGFuIEZUUCBjb25uZWN0aW9uIGFuZCBhCi0gICBURUxORVQgY29u bmVjdGlvbiBvcGVuIHRvIHRoZSBzYW1lIGhvc3Qgc2ltdWx0YW5lb3VzbHksIHVzaW5nIHRoZQot ICAgVEVMTkVUIGNvbm5lY3Rpb24gKGUuZy4pIHRvIHNlbmQgbWFpbCBvciB0YWtlIG90aGVyIGRl c2lyZWQgYWN0aW9ucyBhcwotICAgdmFyaW91cyBGVFAgYWN0aW9ucyBjb21wbGV0ZS4gT2YgY291 cnNlLCBlYWNoIGNvcHkgb2YgS2VybWl0IGNhbiBkbwotICAgb25seSBvbmUgdGhpbmcgYXQgYSB0 aW1lLCBzbyBpdCBjYW4ndCAoZm9yIGV4YW1wbGUpIHRyYW5zZmVyIGEgZmlsZQotICAgd2l0aCBG VFAgYW5kIGFub3RoZXIgZmlsZSB3aXRoIEtlcm1pdCBwcm90b2NvbCBzaW11bHRhbmVvdXNseS4K LQotICAgQSBLZXJtaXQgRlRQIHNlc3Npb24gY2FuIGJlIGVzdGFibGlzaGVkIGJ5IFsyMjZdY29t bWFuZC1saW5lIG9wdGlvbnMsCi0gICBieSBbMjI3XVVSTCwgb3IgYnkgWzIyOF1pbnRlcmFjdGl2 ZSBjb21tYW5kcy4KLQotMy4xLjEuIEtlcm1pdCBDb21tYW5kLUxpbmUgT3B0aW9ucyBmb3IgRlRQ Ci0KLSAgIFRoZSBuZXcgY29tbWFuZC1saW5lIG9wdGlvbiAnLTknIChzb3JyeSwgd2UncmUgb3V0 IG9mIGxldHRlcnMpIGNhbiBiZQotICAgdXNlZCB3aGVuIHN0YXJ0aW5nIEMtS2VybWl0LCB0ZWxs aW5nIGl0IHRvIG1ha2UgYW4gRlRQIGNvbm5lY3Rpb246Ci0KLSAga2VybWl0IC05IGhvc3RuYW1l Ci0KLSAgIG9yIGlmIGEgbm9uLWRlZmF1bHQgRlRQIHBvcnQgaXMgbmVlZGVkOgotCi0gIGtlcm1p dCAtOSBob3N0bmFtZTpwb3J0Ci0KLSAgIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IHRoZSB1c2VybmFt ZSBvbiB0aGUgY29tbWFuZCBsaW5lIHdpdGggdGhlIC1NICgiTXkKLSAgIFVzZXIgSUQiKSBvcHRp b24gdGhhdCB3YXMgYWxyZWFkeSB0aGVyZSBmb3Igb3RoZXIgY29ubmVjdGlvbiB0eXBlczoKLQot ICBrZXJtaXQgLTkgaG9zdG5hbWUgLU0gb2xnYQotCi0gICBJZiB5b3Ugc3BlY2lmeSB0aGUgdXNl cm5hbWUgb24gdGhlIGNvbW1hbmQgbGluZSwgS2VybWl0IHVzZXMgaXQgd2hlbgotICAgbWFraW5n IHRoZSBjb25uZWN0aW9uIGFuZCBkb2VzIG5vdCBwcm9tcHQgeW91IGZvciBpdCAoYnV0IGl0IGRv ZXMKLSAgIHByb21wdCB5b3UgZm9yIHRoZSBwYXNzd29yZCBpZiBvbmUgaXMgcmVxdWlyZWQpLgot Ci0gICBPbmNlIHRoZSBjb25uZWN0aW9uIGlzIG1hZGUsIHlvdSBnZXQgdGhlIHJlZ3VsYXIgS2Vy bWl0IHByb21wdCwgYW5kIGNhbgotICAgZ2l2ZSBpbnRlcmFjdGl2ZSBjb21tYW5kcyBzdWNoIGFz IHRoZSBvbmVzIGRlc2NyaWJlZCBiZWxvdy4gV2hlbiB5b3UKLSAgIGdpdmUgYSBCWUUgY29tbWFu ZCwgS2VybWl0IGNsb3NlcyB0aGUgc2Vzc2lvbiBhbmQgZXhpdHMsIGp1c3QgYXMgYQotICAgcmVn dWxhciBGVFAgY2xpZW50IHdvdWxkIGRvLiBJZiB5b3UgZG9uJ3Qgd2FudCBLZXJtaXQgdG8gZXhp dCB3aGVuIHlvdQotICAgZ2l2ZSBhIEJZRSBjb21tYW5kLCBpbmNsdWRlIHRoZSAtUyAoIlN0YXki KSBvcHRpb24gb24gdGhlIGNvbW1hbmQgbGluZS4KLQotICAgT3RoZXIgS2VybWl0IGNvbW1hbmQt bGluZSBvcHRpb25zIHRoYXQgYXJlIG5vdCBzcGVjaWZpYyB0byBub24tRlRQCi0gICBjb25uZWN0 aW9ucyBzaG91bGQgYWZmZWN0IHRoZSBGVFAgc2Vzc2lvbiBpbiB0aGUgZXhwZWN0ZWQgd2F5czsg Zm9yCi0gICBleGFtcGxlLCAtaSBhbmQgLVQgZm9yY2UgYmluYXJ5IGFuZCB0ZXh0IG1vZGUgdHJh bnNmZXJzLCByZXNwZWN0aXZlbHkuCi0KLSAgIEZpbGUgdHJhbnNmZXJzIGNhbiBub3QgYmUgaW5p dGlhdGVkIG9uIHRoZSAia2VybWl0IC05IiBjb21tYW5kIGxpbmU7Ci0gICBmb3IgdGhhdCB5b3Ug bmVlZCB0byB1c2UgS2VybWl0J3MgRlRQIHBlcnNvbmFsaXR5IChuZXh0IHNlY3Rpb24pIG9yIHlv dQotICAgY2FuIHVzZSBVUkxzIChbMjI5XVNlY3Rpb24gMy4xLjMpLgotCi0zLjEuMi4gVGhlIEZU UCBDb21tYW5kLUxpbmUgUGVyc29uYWxpdHkKLQotICAgSWYgeW91IHdhbnQgdG8gcmVwbGFjZSB5 b3VyIHJlZ3VsYXIgRlRQIGNsaWVudCB3aXRoIEMtS2VybWl0LCB5b3UgY2FuCi0gICBtYWtlIGEg bGluayBjYWxsZWQgImZ0cCIgdG8gdGhlIEMtS2VybWl0IGJpbmFyeSAob3IgeW91IGNhbiBzdG9y ZSBhCi0gICBjb3B5IG9mIHRoZSBDLUtlcm1pdCBiaW5hcnkgdW5kZXIgdGhlIG5hbWUgImZ0cCIp LiBXaGVuIEMtS2VybWl0IGlzCi0gICBpbnZva2VkIHdpdGggYSBwcm9ncmFtIG5hbWUgb2YgImZ0 cCIgKG9yICJGVFAiLCBjYXNlIGRvZXNuJ3QgbWF0dGVyKSwKLSAgIGl0IGFzc3VtZXMgdGhlIGNv bW1hbmQtbGluZSBwZXJzb25hbGl0eSBvZiB0aGUgcmVndWxhciBGVFAgY2xpZW50OgotCi0gIGZ0 cCBbIG9wdGlvbnMgXSBob3N0bmFtZSBbIHBvcnQgXQotCi0gICBJbiB0aGlzIGNhc2UgdGhlIG9w dGlvbnMgYXJlIGxpa2UgdGhvc2Ugb2YgYSByZWd1bGFyIEZUUCBjbGllbnQ6Ci0KLSAgLWQgIERl YnVnOiBlbmFibGVzIGRlYnVnIG1lc3NhZ2VzIGFuZCBjcmVhdGVzIGEgZGVidWcubG9nIGZpbGUu Ci0gIC1uICBObyBhdXRvbG9naW46IEtlcm1pdCBzaG91bGQgbm90IHNlbmQgeW91ciB1c2VyIElE IGF1dG9tYXRpY2FsbHkuCi0gIC10ICBQYWNrZXQgdHJhY2U6IGFjY2VwdGVkIGJ1dCBpcyB0cmVh dGVkIHRoZSBzYW1lIGFzIC1kLgotICAtdiAgVmVyYm9zZTogYWNjZXB0ZWQgYnV0IGlnbm9yZWQg KG9wZXJhdGlvbiBpcyB2ZXJib3NlIGJ5IGRlZmF1bHQpLgotICAtaSAgTm90IGludGVyYWN0aXZl OiBhY2NlcHRlZCBidXQgaWdub3JlZC4KLQotICAgYW5kIHRoZSBob3N0bmFtZSBjYW4gYWxzbyBi ZSBhIFVSTCAoZXhwbGFpbmVkIGluIFsyMzBdU2VjdGlvbiAzLjEuMykuCi0gICBUbyBzcGVjaWZ5 IGEgbm9uLWRlZmF1bHQgVENQIHBvcnQgZm9yIHRoZSBGVFAgc2VydmVyLCBpbmNsdWRlIHRoZSBw b3J0Ci0gICBudW1iZXIgb3IgbmFtZSBhZnRlciB0aGUgaG9zdG5hbWUuCi0KLSAgIFRoZXJlIGFy ZSBhbHNvIHNvbWUgYm9udXMgb3B0aW9ucyB0aGF0IGFsbG93IHlvdSB0byBleGVjdXRlIGFuIGVu dGlyZQotICAgRlRQIHNlc3Npb24gZnJvbSB0aGUgc2hlbGwgY29tbWFuZCBsaW5lLCBhcyBsb25n IGFzIHlvdSBkb24ndCBpbmNsdWRlCi0gICB0aGUgLW4gb3B0aW9uLiBUaGVzZSBhcmUgbm90IGF2 YWlsYWJsZSB3aXRoIHJlZ3VsYXIgRlRQIGNsaWVudHMsIGFuZCBhdAotICAgbGVhc3Qgb25lIG9m IHRoZXNlIG9wdGlvbnMgKC1nKSBjb25mbGljdHMgd2l0aCBVTklYIGZ0cCAod2hlcmUgLWcgbWVh bnMKLSAgICJubyBnbG9iYmluZyIsIHdoaWNoIGRvZXMgbm90IGFwcGx5IHRvIEtlcm1pdCksIGFu ZCBzb21lIG9mIHRoZW0gKGxpa2UKLSAgIHRoZSBvcHRpb25zIGFib3ZlKSBhbHNvIGNvbmZsaWN0 IHdpdGggcmVndWxhciBLZXJtaXQgY29tbWFuZC1saW5lCi0gICBvcHRpb25zOgotCi0gIC1tIG1v ZGUgICAgICA9ICJwYXNzaXZlIiAoZGVmYXVsdCkgb3IgImFjdGl2ZSIKLSAgLVkgICAgICAgICAg ICBEb24ndCBleGVjdXRlIHRoZSBLZXJtaXQgaW5pdGlhbGl6YXRpb24gZmlsZSBbMV0KLSAgLXEg ICAgICAgICAgICBRdWlldCwgc3VwcHJlc3NlcyBhbGwgYnV0IGVycm9yIG1lc3NhZ2VzIFsxXQot ICAtUyAgICAgICAgICAgIFN0YXksIGRvbid0IGV4aXQgYXV0b21hdGljYWxseSBbMV0KLSAgLUEg ICAgICAgICAgICBBdXRvbG9naW4gYW5vbnltb3VzbHkgWzJdCi0gIC11IG5hbWUgICAgICAgVXNl cm5hbWUgZm9yIGF1dG9sb2dpbiBbMl0gKHN5bm9ueW06IC1NIFsxXSkKLSAgLVAgcGFzc3dvcmQg ICBQYXNzd29yZCBmb3IgYXV0b2xvZ2luIChzZWUgY2F1dGlvbnMgYmVsb3cpIFsyXQotICAtRCBk aXJlY3RvcnkgIGNkIGFmdGVyIGF1dG9sb2dpbiBbMl0KLSAgLWIgICAgICAgICAgICBCaW5hcnkg bW9kZSBbMl0KLSAgLWEgICAgICAgICAgICBUZXh0ICgiYXNjaWkiKSBtb2RlIFsyXSAoc3lub255 bTogLVQgWzFdKQotICAtUiAgICAgICAgICAgIFJlY3Vyc2l2ZSAod29ya3Mgd2l0aCAtcCkgWzRd Ci0gIC1wIGZpbGVzICAgICAgRmlsZXMgdG8gcHV0ICh1cGxvYWQpIGFmdGVyIGF1dG9sb2dpbiBb Ml0gKHN5bm9ueW06IC1zIFsxXSkKLSAgLWcgZmlsZXMgICAgICBGaWxlcyB0byBnZXQgKGRvd25s b2FkKSBhZnRlciBhdXRvbG9naW4gWzNdCi0KLSAgIFsxXSBTYW1lIGFzIEtlcm1pdCwgbm90IGF2 YWlsYWJsZSBpbiByZWd1bGFyIEZUUCBjbGllbnRzLgotICAgWzJdIENvbmZsaWN0cyB3aXRoIEtl cm1pdCwgbm90IGF2YWlsYWJsZSBpbiByZWd1bGFyIEZUUCBjbGllbnRzLgotICAgWzNdIFNhbWUg YXMgS2VybWl0LCBjb25mbGljdHMgd2l0aCByZWd1bGFyIEZUUCBjbGllbnRzLgotICAgWzRdIENv bmZsaWN0cyB3aXRoIEtlcm1pdCwgYXZhaWxhYmxlIGluIHNvbWUgRlRQIGNsaWVudHMuCi0KLSAg IEZhbmNpZXIgb3B0aW9ucyBzdWNoIGFzIHJlc3RhcnQsIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRp b24sIGZpbGVuYW1lCi0gICBjb2xsaXNpb24gc2VsZWN0aW9uLCBhdXRvbWF0aWMgbW92ZS9yZW5h bWUvZGVsZXRlLCBldGMsIGFyZSBub3QKLSAgIGF2YWlsYWJsZSBmcm9tIHRoZSBjb21tYW5kIGxp bmU7IGZvciB0aGVzZSB5b3UgY2FuIHVzZSB0aGUgY29tbWFuZHMKLSAgIGRlc2NyaWJlZCBpbiB0 aGUgZm9sbG93aW5nIHNlY3Rpb25zLiBUaGUgLVIgb3B0aW9uIG1pZ2h0IGFsc28gd29yayB3aXRo Ci0gICAtZyAoR0VUKSBidXQgdGhhdCBkZXBlbmRzIG9uIHRoZSBzZXJ2ZXIuCi0KLSAgIFRoZSBm b2xsb3dpbmcgc2VjdXJpdHkgb3B0aW9ucyBhcmUgYWxzbyBhdmFpbGFibGUsIGV4cGxhaW5lZCBp bgotICAgWzIzMV1TZWN0aW9uIDMuMjoKLQotICAtayByZWFsbSAgICAgIEtlcmJlcm9zIDQgcmVh bG0gWzRdCi0gIC1mICAgICAgICAgICAgS2VyYmVyb3MgNSBjcmVkZW50aWFscyBmb3J3YXJkaW5n IFs0XQotICAteCAgICAgICAgICAgIGF1dG9lbmNyeXB0aW9uIG1vZGUgWzRdCi0gIC1jIGNpcGhl ciAgICAgU1JQIGNpcGhlciB0eXBlIFs0XQotICAtSCBoYXNoICAgICAgIFNSUCBlbmNyeXB0aW9u IGhhc2ggWzRdCi0gIC16IG9wdGlvbiAgICAgU2VjdXJpdHkgb3B0aW9ucyBbNF0KLQotICAgSWYg eW91IGluY2x1ZGUgLUEgb3Igc3BlY2lmeSBhIG5hbWUgb2YgImFub255bW91cyIgb3IgImZ0cCIs IHlvdSBhcmUKLSAgIGxvZ2dlZCBpbiBhbm9ueW1vdXNseSBhbmQsIGluIHRoZSBhYnNlbmNlIG9m IC1QLCBLZXJtaXQgYXV0b21hdGljYWxseQotICAgc3VwcGxpZXMgYSBwYXNzd29yZCBvZiAidXNl ckBob3N0Iiwgd2hlcmUgInVzZXIiIGlzIHlvdXIgbG9jYWwgdXNlciBJRCwKLSAgIGFuZCAiaG9z dCIgaXMgdGhlIGhvc3RuYW1lIG9mIHRoZSBjb21wdXRlciB3aGVyZSBLZXJtaXQgaXMgcnVubmlu Zy4gSWYKLSAgIHlvdSBkbyBub3QgaW5jbHVkZSAtcCBvciAtZywgS2VybWl0IGVudGVycyBjb21t YW5kIG1vZGUgc28geW91IGNhbiB0eXBlCi0gICBjb21tYW5kcyBvciBleGVjdXRlIHRoZW0gZnJv bSBhIHNjcmlwdC4KLQotICAgSWYgeW91IGluY2x1ZGUgLXAgb3IgLWcsIEtlcm1pdCBhdHRlbXB0 cyB0byB0cmFuc2ZlciB0aGUgc3BlY2lmaWVkCi0gICBmaWxlcyBhbmQgdGhlbiBleGl0cyBhdXRv bWF0aWNhbGx5IGF0IHRoZSBlbmQgb2YgdGhlIHRyYW5zZmVyIHVubGVzcwotICAgeW91IGFsc28g aW5jbHVkZWQgLVMgKFN0YXkpLiBJdCB1c2VzIHRoZSAiYnJpZWYiIGZpbGUgdHJhbnNmZXIgZGlz cGxheQotICAgKG9uZSBsaW5lIHBlciBmaWxlKSB1bmxlc3MgeW91IGluY2x1ZGUgdGhlIC1xIG9w dGlvbiB0byBzdXBwcmVzcyBpdC4KLQotICAgV2hlbiB1cGxvYWRpbmcgZmlsZXMgd2l0aCAtcCwg S2VybWl0IHN3aXRjaGVzIGF1dG9tYXRpY2FsbHkgYmV0d2VlbgotICAgdGV4dCBhbmQgYmluYXJ5 IG1vZGUgZm9yIGVhY2ggZmlsZS4KLQotICAgV2hlbiBkb3dubG9hZGluZywgeW91IGNhbiBlaXRo ZXIgc3BlY2lmeSBhIHBhcnRpY3VsYXIgbW9kZSAodGV4dCBvcgotICAgYmluYXJ5KSB0byBiZSB1 c2VkIGZvciBhbGwgdGhlIGZpbGVzLCBvciB5b3UgY2FuIGxldCBLZXJtaXQgc2VsZWN0IHRoZQot ICAgdHlwZSBmb3IgZWFjaCBmaWxlIGF1dG9tYXRpY2FsbHksIGJhc2VkIG9uIGl0cyBuYW1lIChz ZWUgWzIzMl1TZWN0aW9ucwotICAgMy41IGFuZCBbMjMzXTMuNiBmb3IgZ3JlYXRlciBkZXRhaWwp LiBJbiBVTklYIGJlIHN1cmUgdG8gcXVvdGUgYW55Ci0gICB3aWxkY2FyZCBjaGFyYWN0ZXJzIHRv IHByZXZlbnQgdGhlIHNoZWxsIGZyb20gZXhwYW5kaW5nIHRoZW0sIGFzIHNob3duCi0gICBpbiB0 aGUgZXhhbXBsZXMganVzdCBiZWxvdy4gRmlsZW5hbWUgY29sbGlzaW9ucyBhcmUgaGFuZGxlZCBh Y2NvcmRpbmcKLSAgIEtlcm1pdCdzIEZJTEUgQ09MTElTSU9OIHNldHRpbmcgKGlmIHNwZWNpZmll ZCBpbiB5b3VyIEtlcm1pdAotICAgY3VzdG9taXphdGlvbiBmaWxlOyBvdGhlcndpc2UgdGhlIGRl ZmF1bHQsIHdoaWNoIGlzIEJBQ0tVUCkuCi0KLSAgIEl0IHNob3VsZCBnbyB3aXRob3V0IHNheWlu ZyB0aGF0IHRoZSAtUCBvcHRpb24gc2hvdWxkIGJlIHVzZWQgd2l0aAotICAgY2F1dGlvbi4gSW4g YWRkaXRpb24gdG8gdGhlIHdlbGwta25vd24gcmlza3Mgb2YgdHJhbnNtaXR0aW5nIHBsYWludGV4 dAotICAgcGFzc3dvcmRzIG92ZXIgdGhlIEludGVybmV0LCBpbiB0aGlzIGNhc2UgdGhlIHBhc3N3 b3JkIGFsc28gZWNob3MgdG8KLSAgIHRoZSBzY3JlZW4gaWYgeW91IHR5cGUgaXQsIGFuZCBjYW4g YmUgc2VlbiBpbiBwcyBhbmQgdyBsaXN0aW5ncyB0aGF0Ci0gICBzaG93IHRoZSB1c2VyJ3MgY3Vy cmVudGx5IGFjdGl2ZSBjb21tYW5kIGFuZCBjb21tYW5kLWxpbmUgYXJndW1lbnRzLgotICAgVGh1 cyBjb21tYW5kLWxpbmUgRlRQIHNlc3Npb25zIGFyZSBtb3N0IGFwcHJvcHJpYXRlIGZvciBzZWN1 cmUgb3IKLSAgIGFub255bW91cyBjb25uZWN0aW9ucyAodGhvc2UgdGhhdCBkbyBub3QgcmVxdWly ZSBwYXNzd29yZHMpLgotCi0gICBIZXJlJ3MgYW4gZXhhbXBsZSBpbiB3aGljaCB5b3UgZG93bmxv YWQgdGhlIGxhdGVzdCBDLUtlcm1pdCAidGFyYmFsbCIKLSAgIGZyb20gdGhlIENvbHVtYmlhIFVu aXZlcnNpdHkgRlRQIGFyY2hpdmU6Ci0KLSAgZnRwIC1BIGtlcm1pdC5jb2x1bWJpYS5lZHUgLWJn IGtlcm1pdC9hcmNoaXZlcy9ja2VybWl0LnRhci5negotCi0gICBUaGlzIGFzc3VtZXMgdGhhdCAi ZnRwIiBpcyBhIHN5bWJvbGljIGxpbmsgdG8gQy1LZXJtaXQuIEl0IGxvZ3MgeW91IGluCi0gICBh bm9ueW1vdXNseSBhbmQgZ2V0cyB0aGUgY2tlcm1pdC50YXIuZ3ogZmlsZSBpbiBiaW5hcnkgbW9k ZSBmcm9tIHRoZQotICAga2VybWl0L2FyY2hpdmVzIGRpcmVjdG9yeS4KLQotICAgSGVyZSdzIGEg c2xpZ2h0bHkgbW9yZSBhbWJpdGlvdXMgZXhhbXBsZSB0aGF0IGlsbHVzdHJhdGVzIENEJ2luZyB0 byB0aGUKLSAgIGRlc2lyZWQgc2VydmVyIGRpcmVjdG9yeSB0byBnZXQgYSBncm91cCBvZiBmaWxl cyBpbiB0ZXh0IG1vZGUgKGluIHRoaXMKLSAgIGNhc2UgdGhlIEMtS2VybWl0IHNvdXJjZSBmaWxl cyk6Ci0KLSAgZnRwIC1BIGtlcm1pdC5jb2x1bWJpYS5lZHUgLUQga2VybWl0L2YgLWFnICJja1tj dXddKi5bY3doXSIgbWFrZWZpbGUKLQotICAgSW4gdGhpcyBjYXNlIHdlIENEIHRvIHRoZSBrZXJt aXQvZiBkaXJlY3Rvcnkgc28gd2UgZG9uJ3QgaGF2ZSB0bwotICAgaW5jbHVkZSBpdCBpbiBlYWNo IGZpbGUgc3BlY2lmaWNhdGlvbiwgYW5kIHdlIHF1b3RlIHRoZSBja1tjdXddKi5bY3doXQotICAg c3BlY2lmaWNhdGlvbiBzbyB0aGUgc2hlbGwgZG9lc24ndCBleHBhbmQgaXQsIHNpbmNlIHdlIGhh dmUgdG8gcGFzcyBpdAotICAgYXMtaXMgdG8gdGhlIHNlcnZlci4gTm90ZSBhbHNvIHRoYXQgdGhl IHF1b3RlcyBkb24ndCBnbyBhcm91bmQgdGhlCi0gICBlbnRpcmUgZmlsZSBsaXN0OyBvbmx5IGFy b3VuZCBlYWNoIGZpbGUgc3BlY2lmaWNhdGlvbiB0aGF0IG5lZWRzIHRvIGJlCi0gICBxdW90ZWQu Ci0KLSAgIEhlcmUncyBvbmUgbW9yZSBleGFtcGxlLCB0aGF0IHVwbG9hZHMgYSBkZWJ1ZyBsb2cg ZmlsZSBpbiBiaW5hcnkgbW9kZQotICAgdG8gdGhlIEtlcm1pdCBpbmNvbWluZyBkaXJlY3Rvcnkg KGFzIHdlIG1pZ2h0IGFzayB5b3UgdG8gZG8gd2hlbgotICAgZm9sbG93aW5nIHVwIG9uIGEgcHJv YmxlbSByZXBvcnQpOgotCi0gIGZ0cCAtQSBrZXJtaXQuY29sdW1iaWEuZWR1IC1EIGtlcm1pdC9p bmNvbWluZyAtYnAgZGVidWcubG9nCi0KLSAgIEluIHRoaXMgY2FzZSB0aGUgLUQgb3B0aW9uIGlz IHJlcXVpcmVkIHRvIHRlbGwgdGhlIHNlcnZlciB3aGVyZSB0byBwdXQKLSAgIHRoZSBpbmNvbWlu ZyBmaWxlLgotCi0gICBVbmxlc3MgdGhlIC1ZIG9wdGlvbiBpcyBpbmNsdWRlZCwgeW91ciBLZXJt aXQgaW5pdGlhbGl6YXRpb24gZmlsZQotICAgKC5teWtlcm1yYyBpbiBVTklYLCBLOTUuSU5JIGlu IFdpbmRvd3MpIGlzIGV4ZWN1dGVkIGJlZm9yZSB0aGUgY29tbWFuZAotICAgbGluZSBvcHRpb25z LCBzbyB5b3UgY2FuIHNldCBhbnkgRlRQLXJlbGF0ZWQgcHJlZmVyZW5jZXMgdGhlcmUsIGFzCi0g ICBkZXNjcmliZWQgaW4gdGhlIHN1YnNlcXVlbnQgc2VjdGlvbnMuCi0KLTMuMS4zLiBUaGUgRlRQ IFVSTCBJbnRlcnByZXRlcgotCi0gICBJZiBLZXJtaXQgaXMgaW52b2tlZCB3aXRoIGVpdGhlciBp dHMgcmVndWxhciBwZXJzb25hbGl0eSAoYXMgImtlcm1pdCIpCi0gICAgICAgICAgb3IgaXRzIEZU UCBwZXJzb25hbGl0eSAoYXMgImZ0cCIpLCB5b3UgY2FuIGFsc28gZ2l2ZSBhIFVSTAotICAgICAg ICAgIChVbml2ZXJzYWwgUmVzb3VyY2UgTG9jYXRvcikgaW5zdGVhZCBvZiBhIGhvc3RuYW1lIGFu ZCBvcHRpb25zLAotICAgICAgICAgIHdpdGggb3Igd2l0aG91dCBhIHVzZXJuYW1lIGFuZCBwYXNz d29yZDoKLSAgICAgICAgICBmdHAgZnRwOi8vdXNlcjpwYXNzd29yZEBob3N0L3BhdGgKLSAgICAg ICAgICBmdHAgZnRwOi8vdXNlckBob3N0L3BhdGgKLSAgICAgICAgICBmdHAgZnRwOi8vQGhvc3Qv cGF0aCAgIChvciBmdHA6Ly86QGhvc3QvcGF0aCkKLSAgICAgICAgICBmdHAgZnRwOi8vaG9zdC9w YXRoCi0gICAgICAgICAga2VybWl0IGZ0cDovL2hvc3QvcGF0aAotCi0gICBJZiB0aGUgRlRQIHBl cnNvbmFsaXR5IGlzIHVzZWQsIHRoZSBzZXJ2aWNlIG11c3QgYmUgImZ0cCIuIEluIGFsbAotICAg Y2FzZXMsIGEgaG9zdG5hbWUgb3IgYWRkcmVzcyBtdXN0IGJlIGluY2x1ZGVkLiBJZiBhIHVzZXIg aXMgaW5jbHVkZWQKLSAgIGJ1dCBubyBwYXNzd29yZCwgeW91IGFyZSBwcm9tcHRlZCBmb3IgdGhl IHBhc3N3b3JkLiBJZiBhIHBhdGgKLSAgIChmaWxlbmFtZSkgaXMgaW5jbHVkZWQ6Ci0gICAgICog SWYgIkAiIGlzIGluY2x1ZGVkIHdpdGhvdXQgYSB1c2VyLCBLZXJtaXQgcHJvbXB0cyBmb3IgdGhl IHVzZXJuYW1lCi0gICAgICAgYW5kIHBhc3N3b3JkLgotICAgICAqIElmIG5vIHVzZXIgYW5kIG5v ICJAIiBhcmUgaW5jbHVkZWQsICJhbm9ueW1vdXMiIGlzIHVzZWQuCi0gICAgICogR0VUIGlzIGFz c3VtZWQuCi0KLSAgIElmIG5vIHBhdGggKGFuZCBubyBhY3Rpb24gb3B0aW9ucykgYXJlIGluY2x1 ZGVkLCBhbiBpbnRlcmFjdGl2ZSBGVFAKLSAgICAgICAgICBzZXNzaW9uIGlzIHN0YXJ0ZWQsIGFz IGluIHRoaXMgZXhhbXBsZToKLSAgICAgICAgICBmdHAgZnRwOi8va2VybWl0LmNvbHVtYmlhLmVk dQotCi0gICBJZiBhIHBhdGggaXMgaW5jbHVkZWQsIGJ1dCBhIHVzZXJuYW1lIGlzIG5vdCBpbmNs dWRlZCwgImFub255bW91cyIgaXMKLSAgIHVzZWQgYW5kIGFuIGFwcHJvcHJpYXRlIHVzZXJAaG9z dCBwYXNzd29yZCBpcyBzdXBwbGllZCBhdXRvbWF0aWNhbGx5LgotICAgSWYgYXV0aGVudGljYXRp b24gaXMgc3VjY2Vzc2Z1bCwgS2VybWl0IGF0dGVtcHRzIHRvIEdFVCB0aGUgZmlsZQotICAgaW5k aWNhdGVkIGJ5IHRoZSBwYXRoIG9yLCBpZiB0aGUgcGF0aCBpcyB0aGUgbmFtZSBvZiBhIGRpcmVj dG9yeSwgaXQKLSAgIGFza3MgdGhlIHNlcnZlciBmb3IgYSBkaXJlY3RvcnkgbGlzdGluZy4gSW4g Ym90aCBjYXNlcywgS2VybWl0Ci0gICBkaXNjb25uZWN0cyBmcm9tIHRoZSBzZXJ2ZXIgYW5kIGV4 aXRzIGFmdGVyIHRoZSBvcGVyYXRpb24gaXMgY29tcGxldGUKLSAgICh1bmxlc3MgeW91IGhhdmUg aW5jbHVkZWQgdGhlIC1TIG9wdGlvbiBvbiB0aGUgY29tbWFuZCBsaW5lKS4KLQotICAgSGVyZSdz IGFuIGV4YW1wbGUgdGhhdCBnZXRzIGEgbGlzdGluZyBvZiB0aGUgS2VybWl0IGRpcmVjdG9yeSBh dCB0aGUKLSAgICAgICAgICBLZXJtaXQgZnRwIHNpdGU6Ci0gICAgICAgICAgZnRwIGZ0cDovL2tl cm1pdC5jb2x1bWJpYS5lZHUva2VybWl0LwotCi0gICBUaGlzIGV4YW1wbGUgZ2V0cyB0aGUgdG9w LWxldmVsIFJFQUQuTUUgZmlsZSBmcm9tIHRoZSBzYW1lIGRpcmVjdG9yeToKLSAgICAgICAgICBm dHAgZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvUkVBRC5NRQotCi0gICBIZXJlJ3Mg dGhlIHNhbWUgZXhhbXBsZSwgYnV0IHJlcXVlc3RpbmcgYSB0ZXh0LW1vZGUgdHJhbnNmZXI6Ci0g ICAgICAgICAgZnRwIC1UIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L1JFQUQuTUUK LSAgICAgICAgICBUaGlzIGlsbHVzdHJhdGVzIHRoYXQgeW91IGNhbiBtaXggY29tbWFuZC1saW5l IG9wdGlvbnMgYW5kIFVSTHMKLSAgICAgICAgICBpZiB5b3UgZGVzaXJlLgotCi0gICBIZXJlJ3Mg YW4gZXhhbXBsZSB0aGF0IGxvZ3MgaW4gYXMgYSAoZmljdGl0aW91cykgcmVhbCB1c2VyIHRvIGdl dCBhCi0gICAgICAgICAgZmlsZToKLSAgICAgICAgICBmdHAgZnRwOi8vb2xnYUBmdHAueHl6Y29y cC5jb20vcmVzdW1lLnR4dAotICAgICAgICAgIFRoZSBwYXNzd29yZCBpcyBub3QgaW5jbHVkZWQs IHNvIEtlcm1pdCBwcm9tcHRzIGZvciBpdC4KLQotICAgVGhpcyBzY2hlbWUgYWxsb3dzIEtlcm1p dCB0byBiZSB1c2VkIGFzIHRoZSBGVFAgaGVscGVyIG9mIG90aGVyCi0gICBhcHBsaWNhdGlvbnMs IHN1Y2ggYXMgV2ViIGJyb3dzZXJzLCB3aXRoIGFsbCBpdHMgYWR2YW50YWdlcyBvdmVyIG90aGVy Ci0gICBGVFAgY2xpZW50cyAoZXNwZWNpYWxseSB0aGUgb25lcyB0aGF0IGFyZSBidWlsdCBpbiB0 byBtb3N0IFdlYgotICAgYnJvd3NlcnMpLCBlLmcuIHRoYXQgaXQgY2FuIGJlIGdpdmVuIHdpbGRj YXJkcywgYW5kIGl0IGNhbiBwaWNrIHRleHQKLSAgIGFuZCBiaW5hcnkgbW9kZSBhdXRvbWF0aWNh bGx5IGZvciBlYWNoIGZpbGUuCi0KLSAgIEhJTlQ6IHN1cHBvc2Ugc29tZWJvZHkgc2VuZHMgeW91 IGFuIEZUUCBVUkwgaW4gZW1haWwsIG9yIHlvdSBzZWUgaXQgaW4KLSAgIHNvbWUgdGV4dC4gSWYg eW91ciB0ZXJtaW5hbCBzY3JlZW4gc3VwcG9ydHMgY29weS9wYXN0ZSwgY29weSB0aGUgdXJsLAot ICAgYW5kIHRoZW4gYXQgdGhlIHNoZWxsIHByb21wdCB0eXBlICJrZXJtaXQiLCBhIHNwYWNlLCBh bmQgdGhlbiBwYXN0ZSB0aGUKLSAgIFVSTCwgZS5nLjoKLQotICAkIGtlcm1pdCBmdHA6Ly9hbHBo YS5ncmVlbmllLm5ldC9wdWIvbWdldHR5L3NvdXJjZS8xLjEvbWdldHR5MS4xLjI3LU8KLQotICAg IiQgaXMgdGhlIHNoZWxsIHByb21wdDsgdGhlIHBhcnQgeW91IHR5cGUgaXMgdW5kZXJsaW5lZCwg dGhlIHJlc3QgaXMKLSAgIHBhc3RlZCBpbi4gS2VybWl0IGRvZXMgdGhlIHJlc3QuCi0KLTMuMS40 LiBJbnRlcmFjdGl2ZSBGVFAgU2Vzc2lvbiBFc3RhYmxpc2htZW50Ci0KLSAgIEFzIHlvdSByZWFk IHRoaXMgYW5kIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMsIGJlYXIgaW4gbWluZCB0aGF0IGFueQot ICAgY29tbWFuZCB0aGF0IGNhbiBiZSBnaXZlbiBhdCB0aGUgcHJvbXB0IGNhbiBhbHNvIGJlIHVz ZWQgaW4gYSBzY3JpcHQKLSAgIHByb2dyYW0uIEtlcm1pdCdzIHNjcmlwdCBwcm9ncmFtbWluZyBs YW5ndWFnZSBpcyB0aGUgc2FtZSBhcyBpdHMKLSAgIGludGVyYWN0aXZlIGNvbW1hbmQgbGFuZ3Vh Z2UuIFsyMzRdQ0xJQ0sgSEVSRSBpZiB5b3Ugd291bGQgbGlrZSB0bwotICAgbGVhcm4gYSBiaXQg bW9yZSBhYm91dCBzY3JpcHQgd3JpdGluZy4KLQotICAgQW4gRlRQIHNlc3Npb24gaXMgZXN0YWJs aXNoZWQgd2l0aCB0aGUgRlRQIE9QRU4gY29tbWFuZDoKLQotICAgRlRQIFsgT1BFTiBdIFsgeyAv U1NMLCAvVExTIH0gXSBob3N0bmFtZSBbIHN3aXRjaGVzIF0gWyBwb3J0IF0KLSAgICAgICAgICBP cGVucyBhbiBGVFAgY29ubmVjdGlvbiB0byB0aGUgZ2l2ZW4gaG9zdCBvbiB0aGUgZ2l2ZW4gcG9y dCBhbmQsCi0gICAgICAgICAgaWYgRlRQIEFVVE9MT0dJTiBpcyBPTiwgYWxzbyBsb2dzIHlvdSBp biB0byB0aGUgc2VydmVyLAotICAgICAgICAgIHByb21wdGluZyBmb3IgdXNlcm5hbWUgYW5kIHBh c3N3b3JkIGlmIG5lY2Vzc2FyeS4gSWYgbm8gcG9ydCBpcwotICAgICAgICAgIHNwZWNpZmllZCwg dGhlIHJlZ3VsYXIgRlRQIHByb3RvY29sIHBvcnQgKDIxKSBpcyB1c2VkLiBUaGUgT1BFTgotICAg ICAgICAgIGtleXdvcmQgaXMgb3B0aW9uYWwgKHVubGVzcyB0aGUgaG9zdG5hbWUgY29uZmxpY3Rz IHdpdGggb25lIG9mCi0gICAgICAgICAgdGhlIEZUUCBjb21tYW5kIGtleXdvcmRzLCB3aGljaCB5 b3UgY2FuIGxpc3QgYnkgdHlwaW5nICJmdHAgPyIpLgotCi0gICBUaGUgaG9zdG5hbWUgY2FuIGJl IGFuIElQIGhvc3QgbmFtZSwgbnVtZXJpYyBJUCBhZGRyZXNzLCBvciBpZiB5b3UgaGF2ZQotICAg YSBuZXR3b3JrIGRpcmVjdG9yeSBhY3RpdmUgKFNFVCBORVRXT1JLIERJUkVDVE9SWTsgc2VlIENo YXB0ZXIgNiBvZgotICAgWzIzNV1Vc2luZyBDLUtlcm1pdCksIGFuIGVudHJ5IG5hbWUgaW4gdGhl IGRpcmVjdG9yeS4gSW4gdGhlIGxhdHRlcgotICAgY2FzZSwgaWYgdGhlIGdpdmVuIGhvc3RuYW1l IG1hdGNoZXMgZXhhY3RseSBvbmUgZW50cnksIHRoZSBhc3NvY2lhdGVkCi0gICBuYW1lIG9yIGFk ZHJlc3MgaXMgdXNlZDsgaWYgaXQgbWF0Y2hlcyBtb3JlIHRoYW4gb25lLCBLZXJtaXQgY3ljbGVz Ci0gICB0aHJvdWdoIHRoZW0gdW50aWwgb25lIGlzIGZvdW5kIHRoYXQgY2FuIGJlIG9wZW5lZDsg aWYgaXQgbWF0Y2hlcyBub25lLAotICAgdGhlbiB0aGUgaG9zdG5hbWUgaXMgdXNlZCBhcy1pcy4g SWYgYSBkaXJlY3RvcnkgaXMgYWN0aXZlIGJ1dCB5b3Ugd2FudAotICAgdG8gYnlwYXNzIGRpcmVj dG9yeSBsb29rdXAsIGluY2x1ZGUgYW4gIj0iIHNpZ24gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUK LSAgIGhvc3RuYW1lLCBhbmQvb3IgdXNlIGEgbnVtZXJpYyBJUCBhZGRyZXNzLgotCi0gICBXaGVu IGFuIEZUUCBjb25uZWN0aW9uIGlzIG9wZW5lZCwgdGhlIGRlZmF1bHQgZmlsZS10cmFuc2ZlciBt b2RlIGlzIHNldAotICAgdG8gYmluYXJ5IGlmIHRoZSBjbGllbnQgYW5kIHNlcnZlciBwbGF0Zm9y bXMgYXJlIGFsaWtlIChlLmcuIGJvdGggb2YKLSAgIHRoZW0gYXJlIHNvbWUga2luZCBvZiBVTklY KSwgYW5kIHRvIHRleHQgKCJhc2NpaSIpIGlmIHRoZXkgYXJlIG5vdAotICAgYWxpa2UuIFRoaXMg aGFzIG5vIHBhcnRpY3VsYXIgZWZmZWN0IGZvciB1cGxvYWRpbmcgc2luY2UgS2VybWl0Ci0gICBh dXRvbWF0aWNhbGx5IHN3aXRjaGVzIGJldHdlZW4gdGV4dCBhbmQgYmluYXJ5IG1vZGUgZm9yIGVh Y2ggZmlsZSwgYnV0Ci0gICBtaWdodCBiZSBpbXBvcnRhbnQgZm9yIGRvd25sb2FkaW5nLiBUaGUg Y29ubmVjdGlvbiBpcyBhbHNvIHNldCB0bwotICAgU3RyZWFtIG1vZGUgYW5kIEZpbGUgc3RydWN0 dXJlLiBSZWNvcmQtIG9yIHBhZ2Utb3JpZW50ZWQgZmlsZSB0cmFuc2ZlcnMKLSAgIGFyZSBub3Qg c3VwcG9ydGVkIGJ5IEMtS2VybWl0J3MgRlRQIGNsaWVudC4KLQotICAgVGhlIG9wdGlvbmFsIEZU UCBPUEVOIHN3aXRjaGVzIGFyZToKLQotICAgL0FOT05ZTU9VUwotICAgICAgICAgIExvZ3MgeW91 IGluIGFub255bW91c2x5LCBhdXRvbWF0aWNhbGx5IHN1cHBseWluZyB1c2VybmFtZQotICAgICAg ICAgICJhbm9ueW1vdXMiIGFuZCB1c2VyQGhvc3QgYXMgdGhlIHBhc3N3b3JkLCBiYXNlZCBvbiB5 b3VyIGxvY2FsCi0gICAgICAgICAgdXNlciBhbmQgaG9zdCBuYW1lcy4KLQotICAgL05PTE9HSU4K LQotICAgICAgICAgIE92ZXJyaWRlcyBTRVQgRlRQIEFVVE9MT0dJTiBPTiBmb3IgdGhpcyBjb25u ZWN0aW9uIG9ubHkuCi0KLSAgIC9VU0VSOm5hbWUKLSAgICAgICAgICBVc2VzIHRoZSBnaXZlbiB1 c2VybmFtZSB0byBsb2cgeW91IGluLCB0aHVzIGF2b2lkaW5nIHRoZSBOYW1lOgotICAgICAgICAg IHByb21wdC4KLSAgICAgICAgICBPdmVycmlkZXMgU0VUIEZUUCBBVVRPTE9HSU4gT0ZGIGZvciB0 aGlzIGNvbm5lY3Rpb24gb25seS4KLQotICAgL1BBU1NXT1JEOnRleHQKLSAgICAgICAgICBVc2Vz IHRoZSBnaXZlbiB0ZXh0IGFzIHlvdXIgcGFzc3dvcmQsIHRodXMgYXZvaWRpbmcgdGhlCi0gICAg ICAgICAgUGFzc3dvcmQ6IHByb21wdC4gVGhpcyBzd2l0Y2ggaXMgbm90IHJlY29tbWVuZGVkIGZv ciB1c2UgaW4KLSAgICAgICAgICBzY3JpcHQgZmlsZXMsIHdoaWNoIHdvdWxkIGJlIGEgc2VjdXJp dHkgcmlzay4KLQotICAgL0FDQ09VTlQ6dGV4dAotICAgICAgICAgIFVzZXMgdGhlIGdpdmVuIHRl eHQgYXMgeW91ciBhY2NvdW50IChvciBzZWNvbmRhcnkgcGFzc3dvcmQsCi0gICAgICAgICAgZGVw ZW5kaW5nIG9uIHRoZSByZXF1aXJlbWVudHMgb2YgdGhlIHNlcnZlcjsgbW9zdCBzZXJ2ZXJzIGRv IG5vdAotICAgICAgICAgIHJlcXVpcmUgb3IgYWNjZXB0IGFuIGFjY291bnQgbmFtZSkuIElmIGFu IGFjY291bnQgaXMgbm90Ci0gICAgICAgICAgc3VwcGxpZWQsIHlvdSBhcmUgbm90IHByb21wdGVk IGZvciBvbmUuCi0KLSAgIC9QQVNTSVZFCi0gICAgICAgICAgT3BlbnMgdGhlIGNvbm5lY3Rpb24g aW4gcGFzc2l2ZSBtb2RlLiBQYXNzaXZlIG1vZGUgaXMgdGhlCi0gICAgICAgICAgZGVmYXVsdCBp biBLZXJtaXQncyBGVFAgY2xpZW50LCB1bmxpa2UgaW4gbW9zdCBvdGhlcnMsIHNpbmNlIGl0Ci0g ICAgICAgICAgd29ya3MgYmV0dGVyIHRocm91Z2ggZmlyZXdhbGxzLiBUaGUgL1BBU1NJVkUgYW5k IC9BQ1RJVkUKLSAgICAgICAgICBzd2l0Y2hlcyBhcHBseSBvbmx5IHRvIHRoZSBjb25uZWN0aW9u IHRoYXQgaXMgYmVpbmcgb3BlbmVkLCBhbmQKLSAgICAgICAgICBkbyBub3QgYWZmZWN0IHRoZSBn bG9iYWwgRlRQIFBBU1NJVkUtTU9ERSBzZXR0aW5nLgotCi0gICAvQUNUSVZFCi0gICAgICAgICAg T3BlbnMgdGhlIGNvbm5lY3Rpb24gaW4gYWN0aXZlIG1vZGUuIFVzZSB0aGlzIHN3aXRjaCBpZiB0 aGUKLSAgICAgICAgICBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBwYXNzaXZlIG1vZGUsIG9yIHVz ZSB0aGUgY29tbWFuZCBTRVQgRlRQCi0gICAgICAgICAgUEFTU0lWRS1NT0RFIE9GRi4KLQotICAg L05PSU5JVAotICAgICAgICAgIEFkZGVkIGluIEMtS2VybWl0IDguMC4yMDEuICAgVGVsbHMgQy1L ZXJtaXQgbm90IHRvIHNlbmQgUkVTVCwKLSAgICAgICAgICBTVFJVLCBGRUFULCBhbmQgTU9ERSBj b21tYW5kcyB0byB0aGUgc2VydmVyIHdoZW4gdGhlIGNvbm5lY3Rpb24KLSAgICAgICAgICBpcyBv cGVuZWQsIHNpbmNlIHRoZXNlIGhhdmUgYmVlbiByZXBvcnRlZCB0byBjYXVzZSBjb25mdXNpb24g aW4KLSAgICAgICAgICBjZXJ0YWluIHNlcnZlcnMuCi0KLSAgIFdoZW4gYSB1c2VybmFtZSBvciBw YXNzd29yZCBpcyBtaXNzaW5nLCBhIHByb21wdCBpcyBpc3N1ZWQgYXQgdGhlCi0gICBjb250cm9s bGluZyB0ZXJtaW5hbCBhbmQgeW91IG11c3QgdHlwZSB0aGUgcmVzcG9uc2U7IHRoZSByZXNwb25z ZSBjYW4KLSAgIG5vdCBiZSBzY3JpcHRlZC4gVXNlIHRoZSBzd2l0Y2hlcyB0byBhdm9pZCBwcm9t cHRzLCBvciBvbmUgb2YgdGhlCi0gICBzZWN1cmUgYXV0aGVudGljYXRpb24gbWV0aG9kcyBkZXNj cmliZWQgaW4gdGhlIG5leHQgc2VjdGlvbiwgb3Igc2VlCi0gICBbMjM2XVNFVCBGVFAgQVVUT0xP R0lOIGFuZCB0aGUgWzIzN11GVFAgVVNFUiBhbmQgc2ltaWxhciBjb21tYW5kcwotICAgZGVzY3Jp YmVkIGxhdGVyIGluIHRoaXMgc2VjdGlvbi4KLQotICAgRXhhbXBsZXM6Ci0KLSAgZnRwIG9wZW4g a2VybWl0LmNvbHVtYmlhLmVkdSAvYW5vbnltb3VzICA7IE9wZW4gYW5kIGxvZyBpbiBhbm9ueW1v dXNseQotICBmdHAga2VybWl0LmNvbHVtYmlhLmVkdSAvYW5vbnltb3VzICAgICAgIDsgVGhlIE9Q RU4ga2V5d29yZCBjYW4gYmUgb21pdHRlZAotICBmdHAgeHl6Y29ycC5jb20gICAgICAgICAgICAg ICAgICAgICAgICAgIDsgT3BlbiBhbmQgbWF5YmUgcHJvbXB0IGZvciB1c2VybmFtZQotICBmdHAg eHl6Y29ycC5jb20gL3VzZXI6b2xnYSAgICAgICAgICAgICAgIDsgT3BlbiBhbmQgbG9nIGluIGFz IG9sZ2EKLSAgZnRwIHRlc3RpbmcuYWJjY29ycC5jb20gNDQ5ICAgICAgICAgICAgICA7IFNwZWNp ZnkgYSBzcGVjaWFsIFRDUCBwb3J0IG51bWJlcgotICBmdHAgdGVzdGluZy5hYmNjb3JwLmNvbSAv dXNlcjpvbGFmIC9wYXNzd29yZDpzZWNyZXQgNDQ5Ci0KLSAgIFRoZSBGVFAgT1BFTiBjb21tYW5k IHN1Y2NlZWRzIGlmIGEgY29ubmVjdGlvbiB3YXMgb3BlbmVkIHRvIHRoZSBzZXJ2ZXIKLSAgIChl dmVuIGlmIHRoZSBnaXZlbiB1c2VybmFtZSBhbmQgcGFzc3dvcmQgd2VyZSBub3QgdmFsaWQpIGFu ZCBmYWlscwotICAgb3RoZXJ3aXNlIChzZWUgWzIzOF1TZWN0aW9uIDMuOCBmb3IgZGV0YWlscyku Ci0KLSAgIFdoZW4geW91ciBGVFAgc2Vzc2lvbiBpcyBjb21wbGV0ZSwgeW91IGNhbiB0ZXJtaW5h dGUgaXQgYXMgZm9sbG93czoKLQotICAgRlRQIEJZRQotICAgICAgICAgIENsb3NlcyB0aGUgRlRQ IGNvbm5lY3Rpb24gaWYgb25lIHdhcyBvcGVuLiBUaGUgRlRQIHByZWZpeCBjYW4gYmUKLSAgICAg ICAgICBvbWl0dGVkIGlmIG5vIG90aGVyIGNvbm5lY3Rpb24gaXMgb3BlbiBhdCB0aGUgc2FtZSB0 aW1lIChzZWUKLSAgICAgICAgICBbMjM5XVNlY3Rpb24gMy44IGZvciBkZXRhaWxzKS4gSWYgYSBj b25uZWN0aW9uIGxvZyBpcyBhY3RpdmUsIGFuCi0gICAgICAgICAgRlRQIHJlY29yZCBpcyB3cml0 dGVuIHRvIGl0LiBJZiBLZXJtaXQgd2FzIHN0YXJ0ZWQgd2l0aCB0aGUgLTkKLSAgICAgICAgICBj b21tYW5kLWxpbmUgb3B0aW9uIG9yIHdpdGggaXRzIEZUUCBjb21tYW5kLWxpbmUgcGVyc29uYWxp dHksCi0gICAgICAgICAgYW5kIHRoZSAtUyAoU3RheSkgb3B0aW9uIHdhcyBub3QgZ2l2ZW4sIEFO RCB0aGVyZSBpcyBubyBvdGhlcgotICAgICAgICAgIGFjdGl2ZSBjb25uZWN0aW9uLCB0aGUgRlRQ IEJZRSBjb21tYW5kIGFsc28gZXhpdHMsIGp1c3QgYXMgaXQKLSAgICAgICAgICBkb2VzIG9uIGEg cmVndWxhciBGVFAgY2xpZW50LiBTeW5vbnltczogRlRQIENMT1NFLCBGVFAgUVVJVCAoYnV0Ci0g ICAgICAgICAgaWYgdGhlIEZUUCBwcmVmaXggaXMgb21pdHRlZCBmcm9tIFFVSVQsIHRoaXMgYmVj b21lcyB0aGUgcmVndWxhcgotICAgICAgICAgIEtlcm1pdCBRVUlUIGNvbW1hbmQsIHdoaWNoIGlz IGVxdWl2YWxlbnQgdG8gRVhJVDsgaS5lLiBpdCBjbG9zZXMKLSAgICAgICAgICB0aGUgY29ubmVj dGlvbiBhbmQgZXhpdHMgZnJvbSBLZXJtaXQpLgotCi0gICBUaGUgZm9sbG93aW5nIGNvbW1hbmRz IGNhbiBiZSB1c2VkIHRvIGFjaGlldmUgZ3JlYXRlciBjb250cm9sIG92ZXIgdGhlCi0gICBjb25u ZWN0aW9uIGFuZCBsb2dpbiBwcm9jZXNzOgotCi0gICBTRVQgRlRQIEFOT05ZTU9VUy1QQVNTV09S RCB0ZXh0Ci0gICAgICAgICAgQWxsb3dzIHlvdSB0byBjaG9vc2UgdGhlIHBhc3N3b3JkIHRleHQg dG8gYmUgc2VudCBhdXRvbWF0aWNhbGx5Ci0gICAgICAgICAgYnkgS2VybWl0IHdoZW4geW91IG9w ZW4gYW4gRlRQIGNvbm5lY3Rpb24gd2l0aCB0aGUgL0FOT05ZTU9VUwotICAgICAgICAgIHN3aXRj aC4KLQotICAgU0VUIEZUUCBBVVRPTE9HSU4geyBPTiwgT0ZGIH0KLSAgICAgICAgICBJZiB5b3Ug Z2l2ZSB0aGlzIGNvbW1hbmQgcHJpb3IgdG8gb3BlbmluZyBhbiBGVFAgY29ubmVjdGlvbiwgaXQK LSAgICAgICAgICBjb250cm9scyB3aGV0aGVyIEtlcm1pdCB0cmllcyB0byBsb2cgeW91IGluIGF1 dG9tYXRpY2FsbHkgYXMKLSAgICAgICAgICBwYXJ0IG9mIHRoZSBjb25uZWN0aW9uIHByb2Nlc3Mu IE5vcm1hbGx5IE9OLCB3aGljaCBtZWFucyB0aGUKLSAgICAgICAgICB1c2VybmFtZSBhbmQgcGFz c3dvcmQgYXJlIHNlbnQgYXV0b21hdGljYWxseSAoYW5kIHByb21wdGVkIGZvcgotICAgICAgICAg IGlmIHRoZXkgYXJlIG5vdCB5ZXQga25vd24pLiBXaGVuIE9GRiwgRlRQIE9QRU4gY29ubmVjdHMg dG8gdGhlCi0gICAgICAgICAgc2VydmVyIHdpdGhvdXQgbG9nZ2luZyBpbi4gT0ZGIGlzIGVxdWl2 YWxlbnQgdG8gdGhlIC1uCi0gICAgICAgICAgY29tbWFuZC1saW5lIG9wdGlvbiB3aGVuIHVzaW5n IEtlcm1pdCdzIEZUUCBjb21tYW5kLWxpbmUKLSAgICAgICAgICBwZXJzb25hbGl0eS4KLQotICAg RlRQIFVTRVIgbmFtZSBbIHBhc3N3b3JkIFsgYWNjb3VudCBdIF0KLSAgICAgICAgICBVc2VkIHRv IGxvZyBpbiB0byBhbiBGVFAgc2VydmVyIHRvIHdoaWNoIGEgY29ubmVjdGlvbiBoYXMgYmVlbgot ICAgICAgICAgIG1hZGUgd2l0aG91dCBhdXRvbG9naW4sIG9yIHdoZW4gYXV0b2xvZ2luIGZhaWxl ZC4gSWYgdGhlCi0gICAgICAgICAgcGFzc3dvcmQgaXMgZnVybmlzaGVkIG9uIHRoZSBjb21tYW5k IGxpbmUsIGl0IGlzIHVzZWQ7IG90aGVyd2lzZQotICAgICAgICAgIHlvdSBhcmUgcHJvbXB0ZWQg Zm9yIGEgcGFzc3dvcmQuIEFuIGFjY291bnQgbWF5IGFsc28gYmUKLSAgICAgICAgICBmdXJuaXNo ZWQgaWYgcmVxdWlyZWQgYnkgdGhlIHNlcnZlcjsgaXQgaXMgbm90IHJlcXVpcmVkIGJ5Ci0gICAg ICAgICAgS2VybWl0IGFuZCBpcyBub3QgcHJvbXB0ZWQgZm9yIGlmIG9taXR0ZWQuIFN5bm9ueW1z OiBVU0VSLCBGVFAKLSAgICAgICAgICBMT0dJTi4KLQotICAgRlRQIEFDQ09VTlQgdGV4dAotICAg ICAgICAgIFNlbmRzIGFuIGFjY291bnQgbmFtZSB0byBhIHNlcnZlciB0aGF0IHN1cHBvcnRzIGFj Y291bnRzLiBJZiB0aGUKLSAgICAgICAgICBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBhY2NvdW50 cywgYW4gZXJyb3IgcmVzcG9uc2Ugb2NjdXJzLiBJZgotICAgICAgICAgIHRoZSBzZXJ2ZXIgZG9l cyBzdXBwb3J0IGFjY291bnRzLCB0aGUgYWNjb3VudCBpcyBhY2NlcHRlZCBpZiBpdAotICAgICAg ICAgIGlzIHZhbGlkIGFuZCByZWplY3RlZCBpZiBpdCBpcyBub3QuIFRoZSBhY2NvdW50IG1pZ2h0 IGJlIHVzZWQKLSAgICAgICAgICBmb3IgY2hhcmdpbmcgcHVycG9zZXMgb3IgaXQgbWlnaHQgYmUg YSBzZWNvbmRhcnkgcGFzc3dvcmQsIG9yIGl0Ci0gICAgICAgICAgbWlnaHQgYmUgdXNlZCBmb3Ig YW55IG90aGVyIHB1cnBvc2UsIHN1Y2ggYXMgYW4gYWNjZXNzIHBhc3N3b3JkCi0gICAgICAgICAg Zm9yIGEgcGFydGljdWxhciBkaXNrLiBTZXJ2ZXJzIHRoYXQgc3VwcG9ydCBhY2NvdW50cyBtaWdo dCBvcgotICAgICAgICAgIG1pZ2h0IG5vdCBhbGxvdyBvciByZXF1aXJlIHRoZSBhY2NvdW50IHRv IGJlIHNlbnQgcHJpb3IgdG8KLSAgICAgICAgICBsb2dpbjsgdXN1YWxseSBpdCBpcyBzZW50IGFm dGVyIGxvZ2luLCBpZiBhdCBhbGwuIFN5bm9ueW06Ci0gICAgICAgICAgQUNDT1VOVC4KLQotICAg RXhhbXBsZToKLQotc2V0IGZ0cCBhdXRvbG9naW4gb2ZmICAgICAgICAgICAgICAgICAgOyBPbmUg dGhpbmcgYXQgYSB0aW1lIHBsZWFzZQotZnRwIHh5emNvcnAuY29tICAgICAgICAgICAgICAgICAg ICAgICAgOyBUcnkgdG8gbWFrZSB0aGUgY29ubmVjdGlvbgotaWYgZmFpbCBleGl0IDEgRlRQIGNv bm5lY3Rpb24gZmFpbGVkICAgOyBDaGVjayB0aGF0IGl0IHdhcyBtYWRlCi1mdHAgdXNlciBvbGdh IHNlY3JldCAgICAgICAgICAgICAgICAgICA7IE5vdyBsb2cgaW4gdG8gdGhlIHNlcnZlcgotaWYg ZmFpbCBleGl0IDEgRlRQIGxvZ2luIGZhaWxlZCAgICAgICAgOyBDaGVjayB0aGF0IGl0IHdvcmtl ZAotZnRwIGFjY291bnQgMTAzODk2ODU0ICAgICAgICAgICAgICAgICAgOyBMb2dpbiBPSyAtIHNl bmQgYWNjb3VudAotaWYgZmFpbCBlY2hvIFdBUk5JTkcgLSBGVFAgQUNDVCBmYWlsZWQgOyBXYXJu IGlmIHByb2JsZW0KLS4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgKGhh dmUgc2Vzc2lvbiBoZXJlKQotYnllICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OyBMb2cgb3V0IGFuZCBkaXNjb25uZWN0Ci0KLSAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZHMgYXJl IHVzZWQgdG8gY29udHJvbCBvciBnZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlCi0gICBGVFAgY29u bmVjdGlvbi4gQW55IHBhcnRpY3VsYXIgRlRQIHNlcnZlciBkb2VzIG5vdCBuZWNlc3NhcmlseSBz dXBwb3J0Ci0gICBhbGwgb2YgdGhlbS4KLQotICAgRlRQIFJFU0VUCi0gICAgICAgICAgVGVybWlu YXRlcyBhIHVzZXIgc2Vzc2lvbiBidXQgbGVhdmVzIHRoZSBjb25uZWN0aW9uIG9wZW4sCi0gICAg ICAgICAgYWxsb3dpbmcgYSBuZXcgbG9naW4gdmlhIEZUUCBVU0VSLgotCi0gICBGVFAgSURMRSBb IG51bWJlciBdCi0gICAgICAgICAgTW9zdCBGVFAgc2VydmVycyBhdXRvbWF0aWNhbGx5IGxvZyB5 b3Ugb3V0IGFuZCBhbmQgZGlzY29ubmVjdAotICAgICAgICAgIHlvdXIgc2Vzc2lvbiBpZiB0aGVy ZSBoYXMgYmVlbiBubyBhY3Rpdml0eSBmb3IgYSBjZXJ0YWluIGFtb3VudAotICAgICAgICAgIG9m IHRpbWUuIFVzZSB0aGlzIGNvbW1hbmQgdG8gYXNrIHRoZSBzZXJ2ZXIgdG8gc2V0IGl0cyBpZGxl Ci0gICAgICAgICAgbGltaXQgdG8gdGhlIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzLiBPbWl0IHRo ZSBudW1iZXIgdG8gYXNrIHRoZQotICAgICAgICAgIHNlcnZlciB0byBpbmZvcm0geW91IG9mIGl0 cyBjdXJyZW50IGlkbGUgbGltaXQuCi0KLSAgIEZUUCBTVEFUVVMgWyBmaWxlbmFtZSBdCi0gICAg ICAgICAgQXNrcyB0aGUgRlRQIHNlcnZlciB0byBzZW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZSBj dXJyZW50Ci0gICAgICAgICAgc2Vzc2lvbi4gVGhlIHJlc3VsdCBpcyBhIGZyZWUtZm9ybWF0IHJl cG9ydCB0aGF0IG1pZ2h0IGluY2x1ZGUKLSAgICAgICAgICBzZXJ2ZXIgaWRlbnRpZmljYXRpb24s IHVzZXJuYW1lIGFuZCBsb2dpbiB0aW1lLCBGVFAgcHJvdG9jb2wKLSAgICAgICAgICBzZXR0aW5n cywgYW5kIGZpbGUtdHJhbnNmZXIgc3RhdGlzdGljcy4gSWYgYSBmaWxlbmFtZSBpcyBnaXZlbiwK LSAgICAgICAgICB0aGUgc2VydmVyIGlzIHN1cHBvc2VkIHRvIHNlbmQgZGV0YWlsZWQgaW5mb3Jt YXRpb24gYWJvdXQgdGhlCi0gICAgICAgICAgZmlsZS4KLQotICAgRlRQIFNZU1RFTQotICAgICAg ICAgIEFza3MgdGhlIEZUUCBzZXJ2ZXIgdG8gaWRlbnRpZnkgaXRzIG9wZXJhdGluZyBzeXN0ZW0g KExpc3RlZCBpbgotICAgICAgICAgIEludGVybmV0IEFzc2lnbmVkIE51bWJlcnMsIE9wZXJhdGlu ZyBTeXN0ZW0gTmFtZXMpLiBFeGFtcGxlczoKLSAgICAgICAgICBVTklYLCBWTVMsIFZNL0NNUywg V0lORE9XUy1OVC4gVW5mb3J0dW5hdGVseSBtYW55IHZhcmlhdGlvbnMgYXJlCi0gICAgICAgICAg YWxsb3dlZCAoZS5nLiBMSU5VWC0yLjAsIExJTlVYLTIuMiwgRlJFRUJTRCwgVUxUUklYLCBldGMs Ci0gICAgICAgICAgaW5zdGVhZCBvZiBVTklYOyBXSU5ET1dTLU5ULTMsIFdJTkRPV1MtTlQtMy41 LCBXSU5ET1dTLU5ULTMuNTEsCi0gICAgICAgICAgV0lORE9XUy1OVC00LCBldGMpLiBUaGUgcmVw b3J0IG1pZ2h0IGFsc28gaW5jbHVkZSBvdGhlcgotICAgICAgICAgIGluZm9ybWF0aW9uIGxpa2Ug IlR5cGUgTDgiLCAiVHlwZSBJIiwgb3IgIlR5cGUgQSIsIGluZGljYXRpbmcKLSAgICAgICAgICB0 aGUgZmlsZS10cmFuc2ZlciBtb2RlLgotCi0gICBGVFAgSEVMUCBbIGtleXdvcmQgWyBrZXl3b3Jk IFsgLi4uIF0gXQotICAgICAgICAgIEFza3MgdGhlIHNlcnZlciB0byBsaXN0IHRoZSBjb21tYW5k cyBpdCBzdXBwb3J0cy4gVGhlIHJlc3BvbnNlCi0gICAgICAgICAgaXMgdXN1YWxseSBjcnlwdGlj LCBsaXN0aW5nIEZUUCBjb21tYW5kIG1uZW1vbmljcywgbm90IHRoZQotICAgICAgICAgIGNvbW1h bmRzIHVzZWQgYnkgdGhlIGNsaWVudCAoc2luY2UgdGhlIHNlcnZlciBoYXMgbm8gd2F5IG9mCi0g ICAgICAgICAga25vd2luZyBhbnl0aGluZyBhYm91dCB0aGUgY2xpZW50J3MgdXNlciBpbnRlcmZh Y2UpLiBGb3IKLSAgICAgICAgICBleGFtcGxlLCB0aGUgUFVUIGNvbW1hbmQgaXMgU1RPUiBpbiBG VFAgcHJvdG9jb2wuIElmIGEga2V5d29yZAotICAgICAgICAgIGlzIGdpdmVuLCB3aGljaCBzaG91 bGQgYmUgYW4gRlRQIHByb3RvY29sIGNvbW1hbmQsCi0gICAgICAgICAgc2xpZ2h0bHktbW9yZS0g ZGV0YWlsZWQgaGVscCBpcyBnaXZlbiBhYm91dCB0aGUgY29ycmVzcG9uZGluZwotICAgICAgICAg IGNvbW1hbmQgKGlmIHRoZSBGVFAgc2VydmVyIHN1cHBvcnRzIHRoaXMgZmVhdHVyZSkuIEV4YW1w bGVzOgotICAgICAgICAgICJmdHAgaGVscCIsICJmdHAgaGVscCBzdG9yIi4KLQotICAgRlRQIFNJ VEUgdGV4dAotICAgICAgICAgIChBZHZhbmNlZCkgU2VuZHMgYW4gRlRQIFNJVEUgKHNpdGUtc3Bl Y2lmaWMpIGNvbW1hbmQuIFVzdWFsbHkKLSAgICAgICAgICB0aGlzIG1lYW5zIHRoYXQgdGhlIEZU UCBzZXJ2ZXIgaXMgYXNrZWQgdG8gcnVuIGFuIGV4dGVybmFsCi0gICAgICAgICAgY29tbWFuZCB3 aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuIFlvdSBtaWdodCBiZSBhYmxlIHRvIGZpbmQgb3V0Ci0g ICAgICAgICAgd2hhdCBTSVRFIGNvbW1hbmRzIGFyZSBhdmFpbGFibGUgYnkgc2VuZGluZyAiZnRw IGhlbHAgc2l0ZSIgdG8KLSAgICAgICAgICB0aGUgc2VydmVyLCBidXQgaW4gZ2VuZXJhbCB0aGUg YXZhaWxhYmlsaXR5IG9mIGFuZCByZXNwb25zZSB0bwotICAgICAgICAgIFNJVEUgY29tbWFuZHMg aXMgKG5vdCBzdXJwcmlzaW5nbHkpIHNpdGUgc3BlY2lmaWMuCi0KLSAgIEZUUCBRVU9URSB0ZXh0 Ci0gICAgICAgICAgKEFkdmFuY2VkKSBTZW5kcyBhbiBGVFAgY29tbWFuZCBpbiBGVFAgcHJvdG9j b2wgZm9ybWF0LiBVc2UgdGhpcwotICAgICAgICAgIGNvbW1hbmQgdG8gc2VuZCBjb21tYW5kcyB0 byB0aGUgc2VydmVyIHRoYXQgdGhlIEZUUCBjbGllbnQgbWlnaHQKLSAgICAgICAgICBub3Qga25v dyBhYm91dC4KLQotICAgU0hPVyBGVFAKLSAgICAgICAgICBMaXN0cyBjbGllbnQgKEtlcm1pdCkg RlRQIHNldHRpbmdzIGFuZCBpbmZvcm1hdGlvbi4gQWxzbyBTSE9XCi0gICAgICAgICAgQ09OTkVD VElPTiwgU0hPVyBDT01NVU5JQ0FUSU9OUy4KLQotICAgSEVMUCBGVFAgWyBrZXl3b3JkIF0KLSAg ICAgICAgICBBc2tzIEtlcm1pdCB0byBsaXN0IGFuZCBkZXNjcmliZSBpdHMgYnVpbHQtaW4gRlRQ IGNvbW1hbmRzLgotCi0gICBIRUxQIFNFVCBGVFAgWyBrZXl3b3JkIF0KLSAgICAgICAgICBBc2tz IEtlcm1pdCB0byBsaXN0IGFuZCBkZXNjcmliZSBpdHMgYnVpbHQtaW4gU0VUIEZUUCBjb21tYW5k cy4KLQotICAgWyBbMjQwXVRvcCBdIFsgWzI0MV1GVFAgVG9wIF0gWyBbMjQyXUMtS2VybWl0IEhv bWUgXSBbIFsyNDNdS2VybWl0IEhvbWUKLSAgIF0KLQotMy4xLjUuIE1ha2luZyBQcm94eSBDb25u ZWN0aW9ucwotCi0gICBUaGUgc2ltcGxpc3QgZm9ybSBvZiBmaXJld2FsbCB0cmF2ZXJzYWwgaXMg dGhlIEhUVFAgQ09OTkVDVCBjb21tYW5kLgotICAgVGhlIENPTk5FQ1QgY29tbWFuZCB3YXMgaW1w bGVtZW50ZWQgdG8gYWxsb3cgYSBwdWJsaWMgd2ViIHNlcnZlciB3aGljaAotICAgdXN1YWxseSBy ZXNpZGVzIG9uIHRoZSBib3VuZGFyeSBiZXR3ZWVuIHRoZSBwdWJsaWMgYW5kIHByaXZhdGUgbmV0 d29ya3MKLSAgIHRvIGZvcndhcmQgSFRUUCByZXF1ZXN0cyBmcm9tIGNsaWVudHMgb24gdGhlIHBy aXZhdGUgbmV0d29yayB0byBwdWJsaWMKLSAgIHdlYiBzaXRlcy4gSW4gb3JkZXIgdG8gYWxsb3cg c2VjdXJlIHdlYiBjb25uZWN0aW9ucyB0byBiZSBlc3RhYmxpc2hlZCwKLSAgIHRoZSBDT05ORUNU IGNvbW1hbmQgd29ya3MgYnkgYXV0aGVudGljYXRpbmcgdGhlIGNsaWVudCB3aXRoIGEKLSAgIHVz ZXJuYW1lL3Bhc3N3b3JkIGFuZCB0aGVuIGVzdGFibGlzaGluZyBhIHR1bm5lbCB0byB0aGUgZGVz aXJlZCBob3N0LgotCi0gICBNYW55IHdlYiBzZXJ2ZXJzIHN1cHBvcnQgdGhlIENPTk5FQ1QgY29t bWFuZCBhbmQgaXQgY2FuIGJlIGNvbmZpZ3VyZWQKLSAgIHRvIGFsbG93IG91dGdvaW5nIGNvbm5l Y3Rpb25zIHRvIGF1dGhlbnRpY2F0ZWQgdXNlciB0byBhbnkgVENQL0lQCi0gICBob3N0bmFtZS9w b3J0IGNvbWJpbmF0aW9uIGFjY2Vzc2libGUgdG8gdGhlIHdlYiBzZXJ2ZXIuIFRoZSBsaW1pdGF0 aW9ucwotICAgb2YgSFRUUCBDT05ORUNUIGlzIHRoYXQgaXQgY2FuIG9ubHkgYmUgdXNlZCBmb3Ig b3V0Z29pbmcgY29ubmVjdGlvbnMKLSAgIGZvciBwcm90b2NvbHMgdGhhdCBhcmUgaW1wbGVtZW50 ZWQgdXNpbmcgVENQL0lQLiBQcm90b2NvbHMgc3VjaCBhcwotICAgS2VyYmVyb3MgYXV0aGVudGlj YXRpb24gdGhhdCB1c2UgVURQL0lQIGNhbm5vdCBiZSB0dW5uZWxlZCB1c2luZyBIVFRQCi0gICBD T05ORUNULgotCi0gICBLZXJtaXQgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIHVzZSBvZiBIVFRQ IENPTk5FQ1QgcHJveHkgc2VydmljZXMgd2l0aAotICAgdGhlIGNvbW1hbmQ6Ci0KLSAgU0VUIFRD UCBIVFRQLVBST1hZIFsvVVNFUjp1c2VybmFtZSAvUEFTU1dPUkQ6cGFzc3dvcmRdIGhvc3RuYW1l L2lwLWFkZHJlc3NbOnBvCi1ydF0KLQotICAgV2hlbiBhIHBvcnQgaXMgbm90IHNwZWNpZmllZCB0 aGUgZGVmYXVsdCBwb3J0IGNvbmZpZ3VyZWQgb24gdGhlIEhUVFAKLSAgIHNlcnZlciBpcyB1c2Vk LiBUaGlzIGlzIGZyZXF1ZW50bHkgcG9ydCA0NDMuIFdoZW4gYSBob3N0bmFtZSBpcwotICAgc3Bl Y2lmaWVkLCBpdCBpcyByZXNvbHZlZCB1c2luZyB0aGUgRE5TIGF2YWlsYWJsZSB0byB0aGUgd2Vi IHNlcnZlci4KLQotMy4yLiBNYWtpbmcgU2VjdXJlIEZUUCBDb25uZWN0aW9ucwotCi0gICBBbHNv IHNlZTogWzI0NF1BY2Nlc3NpbmcgSUJNIEluZm9ybWF0aW9uIEV4Y2hhbmdlIHdpdGggS2VybWl0 LgotCi0gICBJbiB0aGUgcHJldmlvdXMgc2VjdGlvbiwgeW91IGNhbiBzZWUgc2V2ZXJhbCBleGFt cGxlcyBvZiB0cmFkaXRpb25hbAotICAgaW5zZWN1cmUgYXV0aGVudGljYXRpb246IHVzZXJuYW1l IGFuZCBwYXNzd29yZCBzZW50IGFjcm9zcyB0aGUgbmV0d29yawotICAgaW4gY2xlYXIgdGV4dC4g T2YgY291cnNlIHRoaXMgaXMgYmFkIHByYWN0aWNlIG9uIGF0IGxlYXN0IHR3byBjb3VudHM6Ci0g ICAoMSkgc3RvcmluZyBwYXNzd29yZHMgaW4gZmlsZXMgKHN1Y2ggYXMgc2NyaXB0IGZpbGVzKSBn aXZlcyBhY2Nlc3MgdG8KLSAgIHRoZSB0YXJnZXQgc3lzdGVtcyB0byBhbnlib2R5IHdobyBjYW4g b2J0YWluIHJlYWQgYWNjZXNzIHRvIHlvdXIKLSAgIHNjcmlwdHM7IGFuZCAoMikgc2VuZGluZyB0 aGlzIGluZm9ybWF0aW9uIG92ZXIgdGhlIG5ldHdvcmsgbGVhdmVzIGl0Ci0gICBvcGVuIHRvIGlu dGVyY2VwdGlvbiBieSBuZXR3b3JrIHNuaWZmZXJzIG9yIGNvbXByb21pc2VkIGhvc3RzLgotCi0g ICBCZWNhdXNlIG9mIHRoZSBpbmNyZWFzaW5nIG5lZWQgZm9yIHNlY3VyaXR5IG9uIHRoZSBJbnRl cm5ldCwgRlRQCi0gICBzZXJ2ZXJzIGFyZSBiZWdpbm5pbmcgdG8gYXBwZWFyIHRoYXQgb2ZmZXIg c2VjdXJlIGZvcm1zIG9mCi0gICBhdXRoZW50aWNhdGlvbiwgaW4gd2hpY2ggbm8gaW5mb3JtYXRp b24gaXMgc2VudCBvdmVyIHRoZSBuZXR3b3JrIHRoYXQKLSAgIHdvdWxkIGFsbG93IGFueW9uZSB3 aG8gaW50ZXJjZXB0cyBpdCB0byB1c3VycCB5b3VyIGlkZW50aXR5IGFuZCBnYWluCi0gICB5b3Vy IGFjY2VzcyByaWdodHMuCi0KLSAgIEtlcm1pdCBwcm92aWRlcyBhbiBlcXVpdmFsZW50IGZvcm0g b2YgRlRQIHNlY3VyaXR5IGZvciBlYWNoIHR5cGUgb2YKLSAgIElFVEYgc3RhbmRhcmQgc2VjdXJp dHkgaW1wbGVtZW50ZWQgaW4gVGVsbmV0LiBUaGVzZSBpbmNsdWRlCi0gICBHU1NBUEktS0VSQkVS T1M1LCBLRVJCRVJPUzQsIFNlY3VyZSBSZW1vdGUgUGFzc3dvcmQgKFNSUCksIGFuZAotICAgVHJh bnNwb3J0IExheWVyIFNlY3VyaXR5IChTU0wgYW5kIFRMUykuIEl0IGRvZXMgbm90IHByZXNlbnRs eSBpbmNsdWRlCi0gICBTU0wgdHVubmVsaW5nIG5vciBhbnkgZm9ybSBvZiBTU0ggdjEgb3IgdjIu IFdoZW4gS2VybWl0IGlzIGJ1aWx0IHdpdGgKLSAgIHRoZSBuZWNlc3NhcnkgbGlicmFyaWVzLCBz ZWN1cmUgRlRQIGNvbm5lY3Rpb25zIGFyZSBhdHRlbXB0ZWQgYnkKLSAgIGRlZmF1bHQsIGluIHdo aWNoIGFsbCBjb25uZWN0aW9ucyBhcmUgYXV0aGVudGljYXRlZCBhbmQgdGhlIGNvbW1hbmQgYW5k Ci0gICBkYXRhIGNoYW5uZWxzIGFyZSBwcml2YXRlLgotCi0gICBUaGUgdXNlIG9mIGF1dGhlbnRp Y2F0aW9uIGFuZCBlbmNyeXB0aW9uIGZvciBGVFAgY29ubmVjdGlvbnMgY2FuIGJlCi0gICBhZGp1 c3RlZCB3aXRoIHRoZSBjb21tYW5kcyBsaXN0ZWQgYmVsb3csIHdoaWNoIGFyZSBhdmFpbGFibGUg b25seSBpZgotICAgeW91ciB2ZXJzaW9uIG9mIEtlcm1pdCB3YXMgYnVpbHQgd2l0aCB0aGUgY29y cmVzcG9uZGluZyBzZWN1cml0eQotICAgb3B0aW9ucyBhbmQgbGlicmFyaWVzOgotCi0gICBTRVQg RlRQIEFVVEhUWVBFIHsgQVVUT01BVElDLCBHU1NBUEktS1JCNSwgS0VSQkVST1M0LCBTUlAsIFNT TCwgVExTIH0KLSAgICAgICAgICBTcGVjaWZpZXMgYW4gb3JkZXJlZCBsaXN0IG9mIGF1dGhlbnRp Y2F0aW9uIG1ldGhvZHMgdG8gYmUKLSAgICAgICAgICBhdHRlbXB0ZWQgd2hlbiBBVVRPQVVUSEVO VElDQVRJT04gaXMgT04uIFRoZSBkZWZhdWx0IGxpc3QgaXM6Ci0gICAgICAgICAgR1NTQVBJLUtS QjUsIFNSUCwgS0VSQkVST1NfVjQsIFRMUywgU1NMLiBJZiBub25lIG9mIHRoZSBzZWxlY3RlZAot ICAgICAgICAgIG1ldGhvZHMgYXJlIHN1cHBvcnRlZCBieSB0aGUgc2VydmVyLCBhbiBpbnNlY3Vy ZSBsb2dpbiBpcyB1c2VkCi0gICAgICAgICAgYXMgYSBmYWxsYmFjay4gTm90ZSwgYnkgdGhlIHdh eSwgdGhhdCBTU0wgb3IgVExTIGNhbiBiZSB1c2VkIHRvCi0gICAgICAgICAgc2VjdXJlIGFuIGFu b255bW91cyBjb25uZWN0aW9uLgotCi0gICBTRVQgRlRQIEFVVE9BVVRIRU5USUNBVElPTiB7IE9O LCBPRkYgfQotICAgICAgICAgIFRlbGxzIHdoZXRoZXIgYXV0aGVudGljYXRpb24gc2hvdWxkIGJl IG5lZ290aWF0ZWQgYnkgdGhlIEZUUAotICAgICAgICAgIE9QRU4gY29tbWFuZC4gRGVmYXVsdCBp cyBPTi4gVXNlIFNFVCBGVFAgQVVUT0FVVEhFTlRJQ0FUSU9OIE9GRgotICAgICAgICAgIHRvIGZv cmNlIGEgY2xlYXItdGV4dCwgdW5lbmNyeXB0ZWQgY29ubmVjdGlvbiB0byBGVFAgc2VydmVycwot ICAgICAgICAgIChzdWNoIGFzIHRoZSBvbmUgYXQgdGhlIEtlcm1pdCBGVFAgc2l0ZSkgdGhhdCBu b3JtYWxseSB3b3VsZCB0cnkKLSAgICAgICAgICB0byBuZWdvdGlhdGUgc2VjdXJlIGF1dGhlbnRp Y2F0aW9uIGFuZCBlbmNyeXB0aW9uLgotCi0gICBTRVQgRlRQIEFVVE9FTkNSWVBUSU9OIHsgT04s IE9GRiB9Ci0gICAgICAgICAgVGVsbHMgd2hldGhlciBlbmNyeXB0aW9uIChwcml2YWN5KSBzaG91 bGQgYmUgbmVnb3RpYXRlZCBieSB0aGUKLSAgICAgICAgICBGVFAgT1BFTiBjb21tYW5kLCB3aGlj aCBjYW4gaGFwcGVuIG9ubHkgaWYgc2VjdXJlIGF1dGhlbnRpY2F0aW9uCi0gICAgICAgICAgaXMg YWxzbyBuZWdvdGlhdGVkLiBEZWZhdWx0IGlzIE9OLgotCi0gICBTRVQgRlRQIEFVVE9MT0dJTiB7 IE9OLCBPRkYgfQotICAgICAgICAgIFRlbGxzIEtlcm1pdCB3aGV0aGVyIHRvIHRyeSBsb2dnaW5n IGluIGF1dG9tYXRpY2FsbHkgd2hlbiB5b3UKLSAgICAgICAgICBtYWtlIGFuIEZUUCBjb25uZWN0 aW9uLCBhcyBvcHBvc2VkIHRvIGxldHRpbmcgeW91IGRvIGl0ICJieQotICAgICAgICAgIGhhbmQi IHdpdGggdGhlIEZUUCBVU0VSIGNvbW1hbmQuCi0KLSAgIFNFVCBGVFAgQ09NTUFORC1QUk9URUNU SU9OLUxFVkVMIHsgQ0xFQVIsIENPTkZJREVOVElBTCwgUFJJVkFURSwgU0FGRSB9Ci0gICAgICAg ICAgRGV0ZXJtaW5lcyB0aGUgbGV2ZWwgb2YgcHJvdGVjdGlvbiBhcHBsaWVkIHRvIHRoZSBjb21t YW5kCi0gICAgICAgICAgY2hhbm5lbDoKLQotICBDTEVBUiAgICAgICAgIERhdGEgaXMgc2VudCBp biBwbGFpbnRleHQgYW5kIG5vdCBwcm90ZWN0ZWQgYWdhaW5zdCB0YW1wZXJpbmcuCi0gIENPTkZJ REVOVElBTCAgRGF0YSBpcyBlbmNyeXB0ZWQgYnV0IG5vdCBwcm90ZWN0ZWQgYWdhaW5zdCB0YW1w ZXJpbmcuCi0gIFBSSVZBVEUgICAgICAgRGF0YSBpcyBlbmNyeXB0ZWQgYW5kIGlzIHByb3RlY3Rl ZCBhZ2FpbnN0IHRhbXBlcmluZy4KLSAgU0FGRSAgICAgICAgICBEYXRhIGlzIHNlbnQgaW4gcGxh aW50ZXh0IGJ1dCBwcm90ZWN0ZWQgYWdhaW5zdCB0YW1wZXJpbmcuCi0KLSAgICAgICAgICBUaGUg ZGVmYXVsdCBpcyBQUklWQVRFLgotCi0gICBTRVQgRlRQIENSRURFTlRJQUwtRk9SV0FSRElORyB7 IE9OLCBPRkYgfQotICAgICAgICAgIFRlbGxzIHdoZXRoZXIgZW5kLXVzZXIgY3JlZGVudGlhbHMg YXJlIHRvIGJlIGZvcndhcmRlZCB0byB0aGUKLSAgICAgICAgICBzZXJ2ZXIgaWYgc3VwcG9ydGVk IGJ5IHRoZSBhdXRoZW50aWNhdGlvbiBtZXRob2QgKEdTU0FQSS1LUkI1Ci0gICAgICAgICAgb25s eSkuIFRoaXMgaXMgb2Z0ZW4gcmVxdWlyZWQgdG8gYWxsb3cgYWNjZXNzIHRvIGRpc3RyaWJ1dGVk Ci0gICAgICAgICAgZmlsZSBzeXN0ZW1zIChlLmcuIEFGUy4pCi0KLSAgIFNFVCBGVFAgREFUQS1Q Uk9URUNUSU9OLUxFVkVMIHsgQ0xFQVIsIENPTkZJREVOVElBTCwgUFJJVkFURSwgU0FGRSB9Ci0g ICAgICAgICAgVGVsbHMgd2hhdCBsZXZlbCBvZiBwcm90ZWN0aW9uIGlzIGFwcGxpZWQgdG8gc3Vi c2VxdWVudCBkYXRhCi0gICAgICAgICAgY2hhbm5lbHMuIFRoZSBtZWFuaW5ncyBvZiB0aGUgcHJv dGVjdGlvbi1sZXZlbCBrZXl3b3JkcyBhcmUgdGhlCi0gICAgICAgICAgc2FtZSBhcyBmb3IgU0VU IEZUUCBDT01NQU5ELVBST1RFQ1RJT04tTEVWRUwuIFRoZSBkZWZhdWx0IGlzCi0gICAgICAgICAg UFJJVkFURS4KLQotICAgU0VUIEZUUCBTUlAgQ0lQSEVSIG5hbWUKLSAgICAgICAgICBTcGVjaWZp ZXMgdGhlIGNpcGhlciB0byBiZSB1c2VkIGZvciBlbmNyeXB0aW9uIHdoZW4gU1JQCi0gICAgICAg ICAgYXV0aGVudGljYXRpb24gaXMgaW4gdXNlLiBUaGUgbGlzdCBvZiBwb3NzaWJsZSBjaG9pY2Vz IGlzCi0gICAgICAgICAgY29tcHV0ZWQgYmFzZWQgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUg bG9jYWwgU1JQIGxpYnJhcnkgYW5kCi0gICAgICAgICAgaW5jbHVkZXMgTk9ORSBwbHVzIHplcm8g b3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nOgotCi0gIEJMT1dGSVNIX0VDQiAgICAgICAgQ0FTVDVf RUNCICAgICAgICAgIERFU19FQ0IgICAgICAgICAgREVTM19FQ0IKLSAgQkxPV0ZJU0hfQ0JDICAg ICAgICBDQVNUNV9DQkMgICAgICAgICAgREVTX0NCQyAgICAgICAgICBERVMzX0NCQwotICBCTE9X RklTSF9DRkI2NCAgICAgIENBU1Q1X0NGQjY0ICAgICAgICBERVNfQ0ZCNjQgICAgICAgIERFUzNf Q0ZCNjQKLSAgQkxPV0ZJU0hfT0ZCNjQgICAgICBDQVNUNV9PRkI2NCAgICAgICAgREVTX09GQjY0 ICAgICAgICBERVMzX09GQjY0Ci0KLSAgICAgICAgICBUaGUgZGVmYXVsdCBpcyBERVMzX0VDQi4K LQotICAgU0VUIEZUUCBTUlAgSEFTSCBuYW1lCi0gICAgICAgICAgU3BlY2lmaWVzIHRoZSBoYXNo IHRvIGJlIHVzZWQgZm9yIGRhdGEgcHJvdGVjdGlvbiB3aGVuIFNSUAotICAgICAgICAgIGF1dGhl bnRpY2F0aW9uIGlzIGluIHVzZS4gVGhlIGNob2ljZXMgYXJlIE1ENSBhbmQgU0hBLiBUaGUKLSAg ICAgICAgICBkZWZhdWx0IGlzIFNIQS4KLQotICAgQ29tbWFuZC1saW5lIG9wdGlvbnM6Ci0KLSAg IC1rIG5hbWUKLSAgICAgICAgICBTcGVjaWZpZXMgdGhlIHJlYWxtIHRvIGJlIHVzZWQgd2l0aCBL ZXJiZXJvcyA0IGF1dGhlbnRpY2F0aW9uICg9Ci0gICAgICAgICAgU0VUIEFVVEggSzQgUkVBTE0g bmFtZSkuCi0KLSAgIC1mCi0gICAgICAgICAgRW5hYmxlcyBmb3J3YXJkaW5nIG9mIEtlcmJlcm9z IDUgY3JlZGVudGlhbHMgdG8gdGhlIGhvc3Qgd2hlbgotICAgICAgICAgIHVzaW5nIEdTU0FQSSBh dXRoZW50aWNhdGlvbiAoPSBTRVQgQVVUSCBLNSBGT1JXQVJEQUJMRSBPTikuCi0KLSAgIC14Ci0g ICAgICAgICAgRW5hYmxlcyBhdXRvZW5jcnlwdGlvbiAoPSBTRVQgRlRQIEFVVE9FTkNSWVBUSU9O IE9OKS4KLQotICAgLWMgY2lwaGVyCi0gICAgICAgICAgU3BlY2lmaWVzIHRoZSBraW5kIG9mIGNp cGhlciB0byBiZSB1c2VkIGZvciBlbmNyeXB0aW9uIHdpdGggU1JQCi0gICAgICAgICAgYXV0aGVu dGljYXRpb24uIEVxdWl2YWxlbnQgdG8gU0VUIEZUUCBTUlAgQ0lQSEVSLCB3aXRoIHRoZSBzYW1l Ci0gICAgICAgICAgY2hvaWNlcy4gSWYgdGhpcyBvcHRpb24gaXMgbm90IGdpdmVuLCBDQVNUNV9D QkMgaXMgdXNlZC4KLQotICAgLUggaGFzaAotICAgICAgICAgIFNwZWNpZmllcyB0aGUgaGFzaCB0 byBiZSB1c2VkIGZvciBlbmNyeXB0aW9uIHdpdGggU1JQCi0gICAgICAgICAgYXV0aGVudGljYXRp b24uIEVxdWl2YWxlbnQgdG8gU0VUIEZUUCBTUlAgSEFTSCwgd2l0aCB0aGUgc2FtZQotICAgICAg ICAgIGNob2ljZXMuIElmIHRoaXMgb3B0aW9uIGlzIG5vdCBnaXZlbiwgU0hBIGlzIHVzZWQuCi0K LSAgIC16IGRlYnVnCi0gICAgICAgICAgVHVybnMgb24gU1NML1RMUyBkZWJ1Z2dpbmcuCi0KLSAg IC16IHNlY3VyZQotICAgICAgICAgIFJlcXVpcmVzIHNlY3VyZSBjb25uZWN0aW9uLgotCi0gICAt eiBjZXJ0c29rCi0gICAgICAgICAgU2F5cyB0byBhY2NlcHQgYWxsIGNlcnRpZmljYXRlcyB3aXRo b3V0IGNoZWNraW5nIHZhbGlkaXR5LgotCi0gICAteiB2ZXJpZnk9bgotICAgICAgICAgIFNldHMg Y2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIG1vZGUgdG8gdGhlIGdpdmVuIG51bWJlciwgbjoKLSAg ICAgICAgICAgIDAgPSBubyB2ZXJpZmljYXRpb24KLSAgICAgICAgICAgIDEgPSB2ZXJpZnkgY2Vy dGlmaWNhdGUgaWYgcHJlc2VudGVkCi0gICAgICAgICAgICAyID0gcmVxdWlyZSB2ZXJpZmljYXRp b24gb2YgY2VydGlmaWNhdGUKLQotICAgLXogY2VydD1maWxlbmFtZQotICAgICAgICAgIFNwZWNp ZmllcyBhIGZpbGUgY29udGFpbmluZyBhIGNsaWVudCBjZXJ0aWZpY2F0ZSB0byBiZSBwcmVzZW50 ZWQKLSAgICAgICAgICB0byB0aGUgRlRQIHNlcnZlci4KLQotICAgLXoga2V5PWZpbGVuYW1lCi0g ICAgICAgICAgU3BlY2lmaWVzIGEgZmlsZSBjb250YWluaW5nIGEgcHJpdmF0ZSBrZXkgbWF0Y2hp bmcgdGhlIGNsaWVudAotICAgICAgICAgIGNlcnRpZmljYXRlLgotCi0gICAteiAha3JiNAotICAg ICAgICAgIChub2tyYjQpIERpc2FibGVzIHRoZSB1c2Ugb2YgS2VyYmVyb3MgNC4KLQotICAgLXog IWdzcwotICAgLXogbm9nc3MKLSAgICAgICAgICBEaXNhYmxlcyB0aGUgdXNlIG9mIEdTU0FQSSAt IEtlcmJlcm9zIDUuCi0KLSAgIC16ICFzcnAKLSAgIC16IG5vc3JwCi0gICAgICAgICAgRGlzYWJs ZXMgdXNlIG9mIFNSUC4KLQotICAgLXogIXNzbAotICAgLXogbm9zc2wKLSAgICAgICAgICBEaXNh YmxlcyB0aGUgdXNlIG9mIFNTTC4KLQotICAgLXogIXRscwotICAgLXogbm90bHMKLSAgICAgICAg ICBEaXNhYmxlcyB0aGUgdXNlIG9mIFRMUy4KLQotICAgQ2F1dGlvbjogSWYgeW91ciBGVFAgY29u bmVjdGlvbiBpcyBzZWN1cmVkIHZpYSBBVVRIIFRMUywgaXQgaXMgbm90Ci0gICBwb3NzaWJsZSB0 byBpbnRlcnJ1cHQgYSBmaWxlIHRyYW5zZmVyLiBUaGlzIGlzIGEgbGltaXRhdGlvbiBvZiBhbGwK LSAgIGtub3duIEZUUCBzZXJ2ZXJzIHRoYXQgc3VwcG9ydCBBVVRIIFRMUy4KLQotICAgTm90ZSB0 aGF0IHdoZW4gdXNpbmcgY2VydGFpbiBzZWN1cml0eSBtZXRob2RzLCBzdWNoIGFzIFNTTCBvciBU TFMsIHlvdQotICAgbWF5IGJlIHByb21wdGVkIHRvIGNvbmZpcm0gb3IgdmVyaWZ5IGNlcnRhaW4g YWN0aW9ucyBvciBjb25kaXRpb25zLCBmb3IKLSAgIGV4YW1wbGUsIHdoZXRoZXIgdG8gYWNjZXB0 IHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlcy4gVGhpcyBjYW4gaW50ZXJmZXJlCi0gICB3aXRoIHVu YXR0ZW5kZWQgb3BlcmF0aW9uIG9mIHNjcmlwdHM7IHNlZSBbMjQ1XVNlY3Rpb24gMy4xMC4KLQot ICAgWyBbMjQ2XVRvcCBdIFsgWzI0N11GVFAgVG9wIF0gWyBbMjQ4XUMtS2VybWl0IEhvbWUgXSBb IFsyNDldS2VybWl0IEhvbWUKLSAgIF0KLQotMy4zLiBTZXR0aW5nIEZUUCBQcmVmZXJlbmNlcwot Ci0gICBGVFAgcHJlZmVyZW5jZXMgY2FuIGJlIHNldCBnbG9iYWxseSBhbmQgcGVyc2lzdGVudGx5 IHdpdGggdGhlIGNvbW1hbmRzCi0gICBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zOyBtYW55IG9m IHRoZXNlIGNhbiBhbHNvIGJlIG92ZXJyaWRkZW4gb24gYQotICAgcGVyLWNvbW1hbmQgYmFzaXMg d2l0aCBzd2l0Y2hlcyB0aGF0IGhhdmUgdGhlIHNhbWUgbmFtZS4KLQotMy4zLjEuIExvZ3MsIE1l c3NhZ2VzLCBhbmQgT3RoZXIgRmVlZGJhY2sKLQotICAgWW91IGNhbiBjb250cm9sIHRoZSBhbW91 bnQgb2YgZmVlZGJhY2sgcmVjZWl2ZWQgZnJvbSB5b3VyIEZUUCBzZXNzaW9uCi0gICB3aXRoIHRo ZSBjb21tYW5kcyBpbiB0aGlzIHNlY3Rpb24uIEZpcnN0LCB5b3UgY2FuIGNyZWF0ZSBhIGxvZyBv ZiB5b3VyCi0gICBGVFAgdHJhbnNmZXJzIHdpdGggdGhlIGZvbGxvd2luZyBjb21tYW5kczoKLQot ICAgU0VUIFRSQU5TQUNUSU9OLUxPRyB7IFZFUkJPU0UsIEZUUCwgQlJJRUYgfQotICAgICAgICAg IFNlbGVjdHMgdGhlIGxvZyBmb3JtYXQuIFZFUkJPU0UgaXMgdGhlIGRlZmF1bHQsIGFuZCBpcyBk ZXNjcmliZWQKLSAgICAgICAgICBpbiBbMjUwXXRoZSBtYW51YWwuIEZUUCBjaG9vc2VzIGEgV1Ut RlRQRCBmb3JtYXQsIHRoZSBzYW1lIGFzIGlzCi0gICAgICAgICAgdXNlZCBieSB0aGUgcG9wdWxh ciBGVFAgc2VydmVyLiBCUklFRiBjcmVhdGVzIHBlci1maWxlIHJlY29yZHMKLSAgICAgICAgICBp biBjb21tYS1zZXBhcmF0ZWQtbGlzdCBmb3JtYXQuIEZvciBncmVhdGVyIGRldGFpbCwgc2VlCi0g ICAgICAgICAgWzI1MV1TZWN0aW9uIDQuMTcgb2YgdGhlIFsyNTJdQy1LZXJtaXQgNy4wIFVwZGF0 ZSBOb3Rlcy4KLQotICAgTE9HIFRSQU5TQUNUSU9OUyBmaWxlbmFtZQotICAgICAgICAgIFJlY29y ZHMgRlRQIChvciBLZXJtaXQsIG9yIGFueSBvdGhlciBwcm90b2NvbCkgdXBsb2FkcyBhbmQKLSAg ICAgICAgICBkb3dubG9hZHMgaW4gdGhlIGdpdmVuIGZpbGUgdXNpbmcgdGhlIGZvcm1hdCBzZWxl Y3RlZCBieSB0aGUKLSAgICAgICAgICBtb3N0IHJlY2VudCBTRVQgVFJBTlNBQ1RJT04tTE9HIGNv bW1hbmQsIGlmIGFueSwgb3IgZWxzZSB0aGUKLSAgICAgICAgICBkZWZhdWx0IGZvcm1hdC4KLQot ICAgRlRQIHNjcmVlbiBtZXNzYWdlcyBhbmQgZGlzcGxheXMgYXJlIGNvbnRyb2xsZWQgYnkgdGhl IGZvbGxvd2luZwotICAgY29tbWFuZHM6Ci0KLSAgIFNFVCBUUkFOU0ZFUiBESVNQTEFZIHsgRlVM TFNDUkVFTiwgQ1JULCBTRVJJQUwsIEJSSUVGLCBOT05FLCBPRkYgfQotICAgICAgICAgIEZUUCB0 cmFuc2ZlcnMgdXNlIEtlcm1pdCdzIG5vcm1hbCBmaWxlLXRyYW5zZmVyIGRpc3BsYXkgc3R5bGVz LgotICAgICAgICAgIFVzZSB0aGlzIGNvbW1hbmQgdG8gY2hvb3NlIHRoZSBkZXNpcmVkIGZvcm1h dDsgdGhlIGRlZmF1bHQgb24KLSAgICAgICAgICBtb3N0IHBsYXRmb3JtcyBpcyBGVUxMU0NSRUVO LiBUaGUgZGlzcGxheSBpcyBhdXRvbWF0aWNhbGx5Ci0gICAgICAgICAgZGlzYWJsZWQgaWYgS2Vy bWl0IGlzIHJ1bm5pbmcgaW4gdGhlIGJhY2tncm91bmQgb3IgaW4gYmF0Y2guCi0gICAgICAgICAg QlJJRUYgaXMgYWx3YXlzIHVzZWQgZm9yIGNvbW1hbmQtbGluZSBpbml0aWF0ZWQgdHJhbnNmZXJz Ci0gICAgICAgICAgKHVubGVzcyBzdXBwcmVzc2VkIGJ5IC1xKS4gV2hpbGUgYSBmaWxlLXRyYW5z ZmVyIGlzIGluIHByb2dyZXNzLAotICAgICAgICAgIHlvdSBjYW4gaW50ZXJydXB0IGl0IGluIHRo ZSBub3JtYWwgS2VybWl0IHdheSBieSB0eXBpbmcgb25lIG9mCi0gICAgICAgICAgdGhlIGZvbGxv d2luZyBrZXlzIG9yIGtleSBjb21iaW5hdGlvbnM6Ci0gICAgICAgICAgICBYIC0gQ2FuY2VsIGN1 cnJlbnQgZmlsZSBidXQgZ28gb24gdG8gdGhlIG5leHQgb25lIChpZiBhbnkpLgotICAgICAgICAg ICAgWiAtIENhbmNlbCB0aGUgZW50aXJlIHRyYW5zZmVyLiAgIEN0cmwtTCBvciBDdHJsLVcgLSBS ZWZyZXNoCi0gICAgICAgICAgdGhlIGZpbGUtdHJhbnNmZXIgZGlzcGxheSAoaWYgYW55KS4KLQot ICAgU0VUIEZUUCBESVNQTEFZIHsgRlVMTFNDUkVFTiwgQ1JULCBTRVJJQUwsIEJSSUVGLCBOT05F LCBPRkYgfQotICAgICAgICAgIExpa2UgU0VUIFRSQU5TRkVSIERJU1BMQVksIGJ1dCBhcHBsaWVz IG9ubHkgdG8gRlRQIGNvbm5lY3Rpb25zLAotICAgICAgICAgIGFuZCBkb2VzIG5vdCBhZmZlY3Qg S2VybWl0LSBvciBvdGhlciBwcm90b2NvbCBmaWxlIHRyYW5zZmVycy4KLQotICAgU0VUIFFVSUVU IHsgT04sIE9GRiB9Ci0gICAgICAgICAgVGhpcyBjb21tYW5kIGFwcGxpZXMgdG8gS2VybWl0IGlu IGdlbmVyYWwsIG5vdCBqdXN0IEZUUC4gT0ZGIGJ5Ci0gICAgICAgICAgZGVmYXVsdDsgd2hlbiBP TiwgaXQgc3VwcHJlc3NlcyBtb3N0IG1lc3NhZ2VzIGZyb20gbW9zdCBjb21tYW5kcwotICAgICAg ICAgIGFzIHdlbGwgYXMgdGhlIGZpbGUtdHJhbnNmZXIgZGlzcGxheS4KLQotICAgU0VUIEZUUCBQ Uk9HUkVTUy1NRVNTQUdFUyB7IE9OLCBPRkYgfQotICAgICAgICAgIFRlbGxzIHdoZXRoZXIgS2Vy bWl0IHNob3VsZCBwcmludCBsb2NhbGx5LWdlbmVyYXRlZCBmZWVkYmFjawotICAgICAgICAgIG1l c3NhZ2VzIGZvciBlYWNoIG5vbi1maWxlLXRyYW5zZmVyIGNvbW1hbmQuIE9OIGJ5IGRlZmF1bHQu Ci0KLSAgIFNFVCBGVFAgVkVSQk9TRS1NT0RFIHsgT04sIE9GRiB9Ci0gICAgICAgICAgVGVsbHMg d2hldGhlciB0byBkaXNwbGF5IGFsbCByZXNwb25zZXMgZnJvbSB0aGUgRlRQIHNlcnZlci4gT0ZG Ci0gICAgICAgICAgYnkgZGVmYXVsdC4gVGhpcyBzaG93cyBhbGwgcmVzcG9uc2VzIHRvIGFsbCBj b21tYW5kcywgZXhjZXB0Ci0gICAgICAgICAgd2hlbiB0aGUgZmlsZS10cmFuc2ZlciBkaXNwbGF5 IGlzIGFjdGl2ZSwgYW5kIHVubGVzcyB5b3UgaGF2ZQotICAgICAgICAgIFNFVCBRVUlFVCBPTi4g V2hlbiBPRkYsIHJlc3BvbnNlcyBhcmUgc2hvd24gb25seSBmb3IgY29tbWFuZHMKLSAgICAgICAg ICBzdWNoIGFzIEZUUCBQV0Qgd2hvc2UgcHVycG9zZSBpcyB0byBkaXNwbGF5IGEgcmVzcG9uc2Uu Ci0KLSAgIFNFVCBGVFAgREVCVUcgeyBPTiwgT0ZGIH0KLSAgICAgICAgICBUZWxscyB3aGV0aGVy IGxvY2FsIGNsaWVudCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gc2hvdWxkIGJlCi0gICAgICAgICAg ZGlzcGxheWVkLiBPRkYgYnkgZGVmYXVsdC4gV2hlbiBPTiwgdGhlIGNvbW1hbmRzIHRoYXQgYXJl IHNlbnQKLSAgICAgICAgICB0byB0aGUgc2VydmVyIGFyZSBzaG93biwgYXMgd2VsbCBhcyBpdHMg cmVzcG9uc2VzIChldmVuIGlmCi0gICAgICAgICAgVkVSQk9TRS1NT0RFIGlzIE9GRiksIHBsdXMg YWRkaXRpb25hbCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIGFyZQotICAgICAgICAgIHByaW50ZWQg cmVnYXJkaW5nIHRoZSBwcm9ncmVzcyBvZiBzZWN1cmUgb3BlcmF0aW9ucy4gQWxzbywgdGhlCi0g ICAgICAgICAgdGVtcG9yYXJ5IGZpbGUgY3JlYXRlZCBieSB0aGUgWzI1M11NR0VUIGNvbW1hbmQg aXMgbm90IGRlbGV0ZWQKLSAgICAgICAgICBzbyB5b3UgY2FuIHNlZSB3aGF0J3MgaW4gaXQuCi0K LSAgIFNldCBhbGwgb2YgdGhlc2UgdG8gT0ZGIHdoZW4gc2lsZW50IHJ1bm5pbmcgaXMgZGVzaXJl ZC4KLQotMy4zLjIuIE9wZXJhdGlvbmFsIFByZWZlcmVuY2VzCi0KLSAgIEZUUCBESVNBQkxFIG5l dy1wcm90b2NvbC1mZWF0dXJlLW5hbWUKLSAgIEZUUCBFTkFCTEUgbmV3LXByb3RvY29sLWZlYXR1 cmUtbmFtZQotICAgICAgICAgIEV4cGxhaW5lZCBpbiBbMjU0XVNlY3Rpb24gMy4xMS4KLQotICAg U0VUIEZUUCBBVVRPTE9HSU4geyBPTiwgT0ZGIH0KLSAgICAgICAgICBJZiB5b3UgZ2l2ZSB0aGlz IGNvbW1hbmQgcHJpb3IgdG8gb3BlbmluZyBhbiBGVFAgY29ubmVjdGlvbiwgaXQKLSAgICAgICAg ICBjb250cm9scyB3aGV0aGVyIEtlcm1pdCB0cmllcyB0byBsb2cgeW91IGluIGF1dG9tYXRpY2Fs bHkgYXMKLSAgICAgICAgICBwYXJ0IG9mIHRoZSBjb25uZWN0aW9uIHByb2Nlc3MuIE5vcm1hbGx5 IE9OLCB3aGljaCBtZWFucyB0aGUKLSAgICAgICAgICB1c2VybmFtZSBhbmQgcGFzc3dvcmQgYXJl IHNlbnQgYXV0b21hdGljYWxseSAoYW5kIHByb21wdGVkIGZvcgotICAgICAgICAgIGlmIHRoZXkg YXJlIG5vdCB5ZXQga25vd24pLiBXaGVuIE9GRiwgRlRQIE9QRU4gY29ubmVjdHMgdG8gdGhlCi0g ICAgICAgICAgc2VydmVyIHdpdGhvdXQgbG9nZ2luZyBpbi4gT0ZGIGlzIGVxdWl2YWxlbnQgdG8g dGhlIC1uCi0gICAgICAgICAgY29tbWFuZC1saW5lIG9wdGlvbiB3aGVuIHVzaW5nIEtlcm1pdCdz IEZUUCBjb21tYW5kLWxpbmUKLSAgICAgICAgICBwZXJzb25hbGl0eS4gU2VlIFsyNTVdU2VjdGlv biAzLjEuNCBmb3IgdXNhZ2UuCi0KLSAgIFNFVCBGVFAgUEFTU0lWRS1NT0RFIHsgT04sIE9GRiB9 Ci0gICAgICAgICAgT04gYnkgZGVmYXVsdCwgdG8gYXZvaWQgcmFuZG9tIFRDUCBwb3J0IGFzc2ln bm1lbnQgZm9yIGRhdGEKLSAgICAgICAgICBjb25uZWN0aW9ucywgd2hpY2ggY2FuIHByZXZlbnQg RlRQIHByb3RvY29sIGZyb20gd29ya2luZyB0aHJvdWdoCi0gICAgICAgICAgZmlyZXdhbGxzIGFu ZCBuZXR3b3JrIGFkZHJlc3MgdHJhbnNsYXRvcnMgKGZvciBtb3JlIG9uIHRoZXNlCi0gICAgICAg ICAgdG9waWNzLCBzZWUgdGhlIFsyNTZdS2VybWl0IHNlY3VyaXR5IHJlZmVyZW5jZS4gU2V0IHRv IE9GRiBpbgotICAgICAgICAgIGNhc2UgdGhlIEZUUCBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBw YXNzaXZlIG1vZGUsIG9yIGluIGNhc2UKLSAgICAgICAgICB0aGUgY2xpZW50IGhhcyBwcm9ibGVt cyB3aXRoIGl0IChpdCBoYXMgYmVlbiBvYnNlcnZlZCwgZm9yCi0gICAgICAgICAgZXhhbXBsZSwg dGhhdCB3aGVuIHVzaW5nIHBhc3NpdmUgbW9kZSwgdGhlIFNDTyBYRU5JWCAyLjMuNAotICAgICAg ICAgIFRDUC9JUCBzdGFjayBoYW5ncyBpbiB0aGUgY29ubmVjdCgpIGNhbGwgZm9yZXZlcikuIFN5 bm9ueW1zOgotICAgICAgICAgIFBBU1NJVkUgWyBPTiBdLCBQQVNTSVZFIE9GRiwgUEFTViBbIE9O IF0sIFBBU1YgT0ZGLgotCi0gICBTRVQgRlRQIFNFTkQtUE9SVC1DT01NQU5EUyB7IE9OLCBPRkYg fQotICAgICAgICAgIFRoaXMgY29tbWFuZCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIEZUUCBjbGll bnQgc2VuZHMgYSBuZXcgUE9SVAotICAgICAgICAgIGNvbW1hbmQgdG8gdGhlIHNlcnZlciB3aGVu IGFjY2VwdGluZyBpbmNvbWluZyBkYXRhIGNvbm5lY3Rpb25zCi0gICAgICAgICAgKGFzIHdoZW4g bm90IHVzaW5nIHBhc3NpdmUgbW9kZS4pIFdoZW4gUEFTU0lWRS1NT0RFIGlzIE9GRiBhbmQKLSAg ICAgICAgICBTRVQgU0VORC1QT1JUIGlzIE9GRiwgdGhlIHBvcnQgdGhhdCB3YXMgb3JpZ2luYWxs eSBzcGVjaWZpZWQgaXMKLSAgICAgICAgICByZXVzZWQuIFRoaXMgaXMgdGhlIGRlZmF1bHQgYmVo YXZpb3IgZm9yIG5vcm1hbCBGVFAgY2xpZW50cyBidXQKLSAgICAgICAgICBpdCBpcyBub3QgY29t cGF0aWJsZSB3aXRoIG1hbnkgZmlyZXdhbGxzLgotCi0gICBTRVQgRlRQIENIQVJBQ1RFUi1TRVQt VFJBTlNMQVRJT04geyBPTiwgT0ZGIH0KLSAgICAgICAgICBXaGV0aGVyIHRvIHRyYW5zbGF0ZSBj aGFyYWN0ZXIgc2V0cyB3aGVuIHRyYW5zZmVycmluZyBmaWxlcyB3aXRoCi0gICAgICAgICAgRlRQ IChleHBsYWluZWQgaW4gWzI1N11TZWN0aW9uIDMuNykuIE9GRiBieSBkZWZhdWx0LgotCi0gICBT RVQgRlRQIFNFUlZFUi1DSEFSQUNURVItU0VUIG5hbWUKLSAgICAgICAgICBUZWxscyBLZXJtaXQg dGhlIGNoYXJhY3RlciBzZXQgdXNlZCBieSB0aGUgRlRQIHNlcnZlciwgVVRGLTggYnkKLSAgICAg ICAgICBkZWZhdWx0IChbMjU4XVNlY3Rpb24gMy43KS4KLQotICAgU0VUIEZUUCBTRVJWRVItVElN RS1PRkZTRVQgZGVsdGEtdGltZQotICAgICAgICAgIFRlbGxzIEtlcm1pdCB0byBhcHBseSB0aGUg Z2l2ZW4gWzI1OV1kZWx0YSB0aW1lIHRvIGZpbGUKLSAgICAgICAgICB0aW1lc3RhbXBzIHByb3Zp ZGVkIGJ5IHRoZSBzZXJ2ZXIgZm9yIGl0cyBmaWxlczsgZm9yIHVzZSB3aGVuCi0gICAgICAgICAg KGZvciBleGFtcGxlKSB0aGUgc2VydmVyIGRvZXMgbm90IGhhdmUgaXRzIHRpbWV6b25lIHNldAot ICAgICAgICAgIGNvcnJlY3RseS4KLQotICAgU0VUIEZUUCBFUlJPUi1BQ1RJT04geyBQUk9DRUVE LCBRVUlUIH0KLSAgICAgICAgICBXaGVuIHRyYW5zZmVycmluZyBhIGdyb3VwIG9mIGZpbGVzIHdp dGggRlRQLCBhbmQgYW4gZXJyb3Igb2NjdXJzCi0gICAgICAgICAgd2l0aCBvbmUgb2YgdGhlIGZp bGVzLCBLZXJtaXQgbm9ybWFsbHkgZ29lcyBvbiB0aGUgbmV4dCBmaWxlLgotICAgICAgICAgIFVz ZSBTRVQgRlRQIEVSUk9SLUFDVElPTiB0byBRVUlUIHRvIG1ha2UgS2VybWl0IHN0b3AgdGhlCi0g ICAgICAgICAgdHJhbnNmZXIgaW1tZWRpYXRlbHkgYW5kIGZhaWwgaWYgYW4gZXJyb3Igb2NjdXJz IHdpdGggYW55IHNpbmdsZQotICAgICAgICAgIGZpbGUgaW4gdGhlIGdyb3VwLiBFeGFtcGxlOiB5 b3UgaGF2ZSBnaXZlbiBLZXJtaXQgYSBsaXN0IG9mCi0gICAgICAgICAgZmlsZXMgdG8gc2VuZCwg YW5kIG9uZSBvZiB0aGUgZmlsZXMgY2FuIG5vdCBiZSBmb3VuZCwgb3IgcmVhZAotICAgICAgICAg IHBlcm1pc3Npb24gaXMgZGVuaWVkLiBOb3RlIHRoYXQgY2FuY2VsaW5nIGEgZmlsZSBieSB0eXBp bmcgJ1gnCi0gICAgICAgICAgZHVyaW5nIHRyYW5zZmVyIGlzIG5vdCBjb25zaWRlcmVkIGFuIGVy cm9yIChpZiB5b3Ugd2FudCB0bwotICAgICAgICAgIGNhbmNlbCB0aGUgZW50aXJlIHRyYW5zZmVy LCB0eXBlICdaJyBvciBDdHJsLUMpLgotCi0gICBTRVQgRlRQIFBFUk1JU1NJT05TIHsgQVVUTywg T04sIE9GRiB9Ci0gICAgICAgICAgV2hlbiB1cGxvYWRpbmcgZmlsZXMgd2l0aCBQVVQgb3IgTVBV VCwgdGhpcyB0ZWxscyB3aGV0aGVyIEtlcm1pdAotICAgICAgICAgIHNob3VsZCBzZW5kIGVhY2gg ZmlsZSdzIHBlcm1pc3Npb25zLiBUaGUgZGVmYXVsdCBpcyBPRkYsIHdoaWNoCi0gICAgICAgICAg bWVhbnMgbm90IHRvIHNlbmQgcGVybWlzc2lvbnMsIGluIHdoaWNoIGNhc2UgdGhlIHVwbG9hZGVk IGZpbGUncwotICAgICAgICAgIHBlcm1pc3Npb25zIGFyZSBzZXQgYnkgdGhlIEZUUCBzZXJ2ZXIg YWNjb3JkaW5nIHRvIGl0cyBvd24KLSAgICAgICAgICBjcml0ZXJpYS4gT04gbWVhbnMgdG8gc2Vu ZCB0aGVtLCBBVVRPIG1lYW5zIHRvIHNlbmQgdGhlbSBvbmx5IGlmCi0gICAgICAgICAgdGhlIGNs aWVudCAoS2VybWl0KSBhbmQgc2VydmVyIGFyZSBvbiBsaWtlIHBsYXRmb3JtcyAoZS5nLiBib3Ro Ci0gICAgICAgICAgVU5JWCkuIFRoaXMgY29tbWFuZCBoYXMgbm8gZWZmZWN0IHdoZW4gZG93bmxv YWRpbmcsIHNpbmNlIHRoZQotICAgICAgICAgIEZUUCBwcm90b2NvbCBkb2VzIG5vdCBpbmNsdWRl IGEgd2F5IGZvciB0aGUgc2VydmVyIHRvIGluZm9ybSB0aGUKLSAgICAgICAgICBjbGllbnQgb2Yg YSBmaWxlJ3MgcGVybWlzc2lvbnMuIEFsc28gc2VlIFsyNjBdRlRQIFBVVAotICAgICAgICAgIC9Q RVJNSVNTSU9OUy4gTm90ZSB0aGF0IHNldHRpbmcgcGVybWlzc2lvbnMgYWZ0ZXIgdXBsb2FkaW5n IGlzCi0gICAgICAgICAgbGlrZWx5IHRvIHdvcmsgKGNvcnJlY3RseSBvciBhdCBhbGwpIG9ubHkg d2hlbiB0aGUgY2xpZW50IGFuZAotICAgICAgICAgIHNlcnZlciBwbGF0Zm9ybXMgYXJlIGFsaWtl IChlLmcuIGJvdGggb2YgdGhlbSBhcmUgc29tZSBmb3JtIG9mCi0gICAgICAgICAgVU5JWCkuIEFs c28gbm90ZSB0aGF0IFdpbmRvd3MgZmlsZXMgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9ucy4gQWxzbwot ICAgICAgICAgIHNlZSBbMjYxXUZUUCBDSE1PRC4KLQotICAgU0VUIEZUUCBEQVRFUyB7IE9OLCBP RkYgfQotICAgICAgICAgIFdoZW4gZG93bmxvYWRpbmcgZmlsZXMgd2l0aCBHRVQgb3IgTUdFVCwg dGhpcyB0ZWxscyB3aGV0aGVyCi0gICAgICAgICAgS2VybWl0IHNob3VsZCB0cnkgdG8gc2V0IHRo ZSByZWNlaXZlZCBmaWxlJ3MgZGF0ZSBmcm9tIHRoZQotICAgICAgICAgIHNlcnZlcidzIGRhdGUu IEZUUCBEQVRFUyBpcyBPTiBieSBkZWZhdWx0LiBOb3RlLCBob3dldmVyLCB0aGF0Ci0gICAgICAg ICAgRlRQIHByb3RvY29sIGRvZXMgbm90IGFsbG93IGRhdGUgcHJlc2VydmF0aW9uIHdoZW4gdXBs b2FkaW5nLiBTbwotICAgICAgICAgIGF0IGJlc3QsIFNFVCBGVFAgREFURVMgT04gY2FuIHdvcmsg b25seSB3aGVuIGRvd25sb2FkaW5nLCBhbmQKLSAgICAgICAgICB0aGVuIG9ubHkgd2hlbiB0aGUg c2VydmVyIGFncmVlcyB0byBmdXJuaXNoIGZpbGUgZGF0ZXMuCi0KLSAgIFNFVCBGVFAgRklMRU5B TUVTIHsgQVVUTywgQ09OVkVSVEVELCBMSVRFUkFMIH0KLSAgICAgICAgICBXaGVuIHVwbG9hZGlu ZyAoc2VuZGluZykgZmlsZXMsIHRoaXMgdGVsbHMgd2hldGhlciB0byBjb252ZXJ0Ci0gICAgICAg ICAgb3V0Ym91bmQgZmlsZW5hbWVzIHRvICJjb21tb24gZm9ybSIuIFRoaXMgbWVhbnMgYWxsb3dp bmcgb25seQotICAgICAgICAgIG9uZSBwZXJpb2QgaW4gYSBuYW1lLCB1cHBlcmNhc2luZyBhbnkg bG93ZXJjYXNlIGxldHRlcnMsCi0gICAgICAgICAgcmVwbGFjaW5nIHNwYWNlcyBieSB1bmRlcnNj b3JlcywgZXRjLiBBVVRPTUFUSUMgaXMgdGhlIGRlZmF1bHQsCi0gICAgICAgICAgbWVhbmluZyBM SVRFUkFMIHdoZW4gY2xpZW50IGFuZCBzZXJ2ZXIgYXJlIHRoZSBzYW1lIHR5cGUgb2YKLSAgICAg ICAgICBzeXN0ZW0gKGUuZy4gVU5JWCkgYW5kIENPTlZFUlRFRCBvdGhlcndpc2UuIFNwZWNpYWwg Y2FzZTogaWYgdGhlCi0gICAgICAgICAgc2V0dGluZyBpcyBBVVRPTUFUSUMgYW5kIHRoZSBjbGll bnQgaXMgbm90IFVOSVggYW5kIHRoZSBzZXJ2ZXIKLSAgICAgICAgICBpZGVudGlmaWVzIGl0c2Vs ZiBhcyBVTklYLCBLZXJtaXQgdXNlcyBhIGxlc3Mtc3RyaWN0IGZvcm0gb2YKLSAgICAgICAgICBj b252ZXJzaW9uLCBpbiB3aGljaCBsb3dlcmNhc2UgbGV0dGVycyBhcmUgbm90IHVwcGVyY2FzZWQg YW5kCi0gICAgICAgICAgdGhlIGZpbGVuYW1lIGNhbiBjb250YWluIGFueSBudW1iZXIgb2YgcGVy aW9kcywgYnV0IHNwYWNlcyBhcmUKLSAgICAgICAgICBzdGlsbCBjb252ZXJ0ZWQgdG8gdW5kZXJz Y29yZS4gV2hlbiByZWNlaXZpbmcsIGNvbnZlcnNpb24KLSAgICAgICAgICBnZW5lcmFsbHkgbWVh bnMgdG8gY2hhbmdlIGFsbC11cHBlcmNhc2UgbmFtZXMgdG8gbG93ZXJjYXNlIGFuZAotICAgICAg ICAgIHNwYWNlcyB0byB1bmRlcnNjb3JlLgotCi0gICBTRVQgRlRQIFVOSVFVRS1TRVJWRVItTkFN RVMgeyBPTiwgT0ZGIH0KLSAgICAgICAgICBBcHBsaWVzIG9ubHkgdG8gdXBsb2Fkcy4gVGVsbHMg dGhlIHNlcnZlciB0byBjcmVhdGUgbmV3LCB1bmlxdWUKLSAgICAgICAgICBuYW1lcyBmb3IgaW5j b21pbmcgZmlsZXMgdGhhdCBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIGV4aXN0aW5nCi0gICAgICAg ICAgZmlsZXMuIE9GRiBieSBkZWZhdWx0LCBpbiB3aGljaCBjYXNlIHRoZSBzZXJ2ZXIgb3Zlcndy aXRlcwotICAgICAgICAgIGV4aXN0aW5nIGZpbGVzIHdpdGggbmV3IGZpbGVzIG9mIHRoZSBzYW1l IG5hbWUuIFdoZW4gT04sIHRoZQotICAgICAgICAgIHNlcnZlciB1c2VzIGl0cyBvd24gYnVpbHQt aW4gbWV0aG9kIGZvciBjcmVhdGluZyBuZXcgbmFtZXMgZm9yCi0gICAgICAgICAgaW5jb21pbmcg ZmlsZXM7IGZvciBleGFtcGxlLCBhcHBlbmRpbmcgYSBwZXJpb2QgKC4pIGFuZCBhIG51bWJlcgot ICAgICAgICAgIHRvIHRoZSBuYW1lLiBDQVVUSU9OOiBVc2UgdGhpcyBvcHRpb24gb25seSBpZiB5 b3UgZG8gbm90IG5lZWQgdG8KLSAgICAgICAgICByZWZlciB0byB0aGUgZmlsZSBhZnRlciBpdCBp cyB1cGxvYWRlZCwgc2luY2UgRlRQIHByb3RvY29sCi0gICAgICAgICAgcHJvdmlkZXMgbm8gbWVj aGFuaXNtIGZvciB0aGUgY2xpZW50IHRvIGZpbmQgb3V0IHdoYXQgbmFtZSB3YXMKLSAgICAgICAg ICBhc3NpZ25lZCBieSB0aGUgc2VydmVyLgotCi0gICBTRVQgRlRQIENPTExJU0lPTiB7IC4uLiB9 Ci0gICAgICAgICAgV2hlbiBkb3dubG9hZGluZywgd2hhdCB0byBkbyBpZiBhbiBpbmNvbWluZyBm aWxlIGhhcyB0aGUgc2FtZQotICAgICAgICAgIG5hbWUgYXMgYW4gZXhpc3RpbmcgZmlsZS4gT3B0 aW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yIFNFVCBGSUxFCi0gICAgICAgICAgQ09MTElTSU9OLiBJ ZiB0aGlzIGNvbW1hbmQgaXMgbm90IGdpdmVuLCBLZXJtaXQncyByZWd1bGFyIEZJTEUKLSAgICAg ICAgICBDT0xMSVNJT04gc2V0dGluZyBpcyB1c2VkLiBJZiB0aGlzIGNvbW1hbmQgaXMgZ2l2ZW4s IGl0Ci0gICAgICAgICAgb3ZlcnJpZGVzIHRoZSBGSUxFIENPTExJU0lPTiBzZXR0aW5nIGZvciBG VFAgdHJhbnNmZXJzIG9ubHkuIFNlZQotICAgICAgICAgIFsyNjJdU2VjdGlvbiAzLjYuMiBmb3Ig ZGV0YWlscy4KLQotICAgU0VUIEZUUCBUWVBFIHsgVEVYVCwgQklOQVJZLCBURU5FWCB9Ci0gICAg ICAgICAgQ2hhbmdlcyB0aGUgZGVmYXVsdCB0cmFuc2ZlciBtb2RlLiBXaGVuIHNlbmRpbmcgKHVw bG9hZGluZykKLSAgICAgICAgICBmaWxlcywgdGhpcyBjb21tYW5kIGhhcyBubyBlZmZlY3QgdW5s ZXNzIHlvdSBkaXNhYmxlIGF1dG9tYXRpYwotICAgICAgICAgIHRleHQvYmluYXJ5IG1vZGUgc3dp dGNoaW5nIChbMjYzXVNlY3Rpb24gNCkgd2l0aCBTRVQgRklMRSBTQ0FOCi0gICAgICAgICAgT0ZG IG9yIFNFVCBUUkFOU0ZFUiBNT0RFIE1BTlVBTC4gV2hlbiByZWNlaXZpbmcgKGRvd25sb2FkaW5n KQotICAgICAgICAgIGZpbGVzLCB0aGlzIGNvbW1hbmQgZXN0YWJsaXNoZXMgdGhlIHRyYW5zZmVy IG1vZGUgdG8gYmUgdXNlZAotICAgICAgICAgIHdoZW4gYSBmaWxlbmFtZSBkb2VzIG5vdCBtYXRj aCBhbnkgb2YgS2VybWl0J3MgdGV4dCBvciBiaW5hcnkKLSAgICAgICAgICBmaWxlbmFtZSBwYXR0 ZXJucywgdW5sZXNzIHlvdSB1c2UgU0VUIEZUUCBHRVQtRklMRVRZUEUtU1dJVENISU5HCi0gICAg ICAgICAgb3IgU0VUIFRSQU5TRkVSIE1PREUgTUFOVUFMIHRvIGRpc2FibGUgYXV0b21hdGljIHN3 aXRjaGluZywgaW4KLSAgICAgICAgICB3aGljaCBjYXNlLCB0aGlzIGNvbW1hbmQgZXN0YWJsaXNo ZXMgdGhlIHRyYW5zZmVyIG1vZGUgZm9yIGFsbAotICAgICAgICAgIGRvd25sb2FkZWQgZmlsZXMu IEluIGFsbCBjYXNlcywgaG93ZXZlciwgdGhlIEZUUCBUWVBFIGNhbiBiZQotICAgICAgICAgIG92 ZXJyaWRkZW4gaW4gYW55IEdFVCBvciBQVVQgY29tbWFuZCBieSBpbmNsdWRpbmcgYSAvVEVYVAot ICAgICAgICAgICgvQVNDSUkpLCAvQklOQVJZLCBvciAvVEVORVggc3dpdGNoLiBUaGUgRlRQIFRZ UEUgaXMgaW5kZXBlbmRlbnQKLSAgICAgICAgICBvZiB0aGUgS2VybWl0IEZJTEUgVFlQRSBzZXR0 aW5nLiBURU5FWCBpcyB1c2VkIGZvciBzZW5kaW5nIDgtYml0Ci0gICAgICAgICAgYmluYXJ5IGZp bGVzIHRvIDM2LWJpdCBwbGF0Zm9ybXMgc3VjaCBhcyBUT1BTLTEwLCBUT1BTLTIwLCBhbmQKLSAg ICAgICAgICBURU5FWCwgYW5kIGdldHRpbmcgdGhlbSBiYWNrIGFnYWluLiBTeW5vbnltOiBBU0NJ SSA9IFRFWFQuIE5vdGU6Ci0gICAgICAgICAgdGhlcmUgaXMgYWxzbyBhbiBGVFAgVFlQRSBjb21t YW5kLCB3aGljaCBkb2VzIHdoYXQgU0VUIEZUUCBUWVBFCi0gICAgICAgICAgZG9lcyBidXQgYWxz byBzZW5kcyBhIFRZUEUgY29tbWFuZCB0byB0aGUgc2VydmVyIGltbWVkaWF0ZWx5IGlmCi0gICAg ICAgICAgdGhlIGdpdmVuIHR5cGUgaXMgZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgb25lLgot Ci0gICBJZiB5b3Ugd2FudCB3YW50IHNwZWNpZmljIEZUUCBwcmVmZXJlbmNlIHNldHRpbmdzIHRv IGJlIGluIGVmZmVjdCBmb3IKLSAgIGFsbCB5b3VyIEtlcm1pdCBGVFAgc2Vzc2lvbnMsIHB1dCB0 aGUgZGVzaXJlZCBTRVQgRlRQIGNvbW1hbmRzIGluIHlvdXIKLSAgIEtlcm1pdCBjdXN0b21pemF0 aW9uIGZpbGUgKH4vLm15a2VybXJjIGluIFVOSVgsIEs5NUNVU1RPTS5JTkkgaW4KLSAgIFdpbmRv d3MpLgotCi0gICBbIFsyNjRdVG9wIF0gWyBbMjY1XUZUUCBUb3AgXSBbIFsyNjZdQy1LZXJtaXQg SG9tZSBdIFsgWzI2N11LZXJtaXQgSG9tZQotICAgXQotCi0zLjQuIE1hbmFnaW5nIERpcmVjdG9y aWVzIGFuZCBGaWxlcwotCi0gICBJbiBLZXJtaXQsIGNvbW1hbmRzIGZvciBkaXJlY3RvcnkgYW5k IGZpbGUgbWFuYWdlbWVudCBjYW4gcmVmZXIgdG86Ci0KLSAgICAgKiBUaGUgbG9jYWwgY29tcHV0 ZXIKLSAgICAgKiBBIHJlbW90ZSBjb21wdXRlciB3aGVuIHlvdSBoYXZlIGEgY29ubmVjdGlvbiB0 byBhIEtlcm1pdCBzZXJ2ZXIgb3IKLSAgICAgICBJS1NELgotICAgICAqIEEgcmVtb3RlIGNvbXB1 dGVyIHdoZW4geW91IGhhdmUgYSBjb25uZWN0aW9uIHRvIGFuIEZUUCBzZXJ2ZXIuCi0KLSAgIChU aGVyZSBjYW4gYWxzbyBiZSBhbiBIVFRQIGNvbm5lY3Rpb24sIGJ1dCB0aGUgY29tbWFuZHMgaW4g dGhpcyBzZWN0aW9uCi0gICBkb24ndCBhcHBseSB0byBIVFRQIGNvbm5lY3Rpb25zLikKLQotICAg VGh1cyBpbiBnZW5lcmFsLCBlYWNoIHN1Y2ggY29tbWFuZCBjb21lcyBpbiB0aHJlZSBmb3JtczoK LQotICAgIDEuIFdpdGggbm8gcHJlZml4IGluIEMtS2VybWl0IDguMC4yMDAsIGl0IHJlZmVycyB0 byB0aGUgbG9jYWwgY29tcHV0ZXIKLSAgICAgICAoQ0QsIERJUiwgZXRjKS4gSW4gQy1LZXJtaXQg OC4wLjIwMSBhbmQgbGF0ZXIsIGhvd2V2ZXIsIHRoZSAibG9jdXMiCi0gICAgICAgc3dpdGNoZXMg dG8gYXV0b21hdGljYWxseSB0byB0aGUgcmVtb3RlIEZUUCBzZXJ2ZXIgd2hlbiB5b3UgbWFrZSBh bgotICAgICAgIEZUUCBjb25uZWN0aW9uIChzZWUgdGhlIFNFVCBMT0NVUyBkZXNjcmlwdGlvbiBb MjY4XVNlY3Rpb24gNyk7IHRodXMKLSAgICAgICBDLUtlcm1pdCA4LjAuMjAxIGFjdHMgYWxtb3N0 IGV4YWN0bHkgbGlrZSBhIHJlZ3VsYXIgRlRQIGNsaWVudCB3aGVuCi0gICAgICAgaXQgaGFzIGFu IEZUUCBjb25uZWN0aW9uLCB5ZXQgc3RpbGwgYWN0cyBsaWtlIGl0c2VsZiBvbiBvdGhlciBraW5k cwotICAgICAgIG9mIGNvbm5lY3Rpb25zLgotICAgIDIuIFdpdGggdGhlIFJFTU9URSBwcmVmaXgs IGl0IGlzIGZvciBhIEtlcm1pdCBzZXJ2ZXIgKFJFTU9URSBDRCwKLSAgICAgICBSRU1PVEUgRElS KS4KLSAgICAzLiBXaXRoIHRoZSBGVFAgcHJlZml4LCBpdCdzIGZvciBhbiBGVFAgc2VydmVyIChG VFAgQ0QsIEZUUCBESVIpLgotICAgIDQuIEFsc28gc2VlIFsyNjldU2VjdGlvbiAzLjgsIHdoaWNo IGV4cGxhaW5zICJSLWNvbW1hbmRzIiBhbmQKLSAgICAgICAiTC1jb21tYW5kcyIuCi0KLSAgIEtl cm1pdCdzIEZUUCBmaWxlIGFuZCBkaXJlY3RvcnkgbWFuYWdlbWVudCBjb21tYW5kcyBhcmUgYXMg Zm9sbG93cy4KLSAgIFdoZW4gYW4gUi1jb21tYW5kIGlzIGluY2x1ZGVkIGluIHRoZSBTeW5vbnlt cyBsaXN0LCBiZSBzdXJlIHRvIHJlYWQKLSAgIFsyNzBdU2VjdGlvbiAzLjggYWJvdXQgcnVsZXMg Zm9yIHVzZSBvZiBSLWNvbW1hbmRzLgotCi0gICBGVFAgQ0QgWyBkaXJlY3RvcnkgXQotICAgICAg ICAgIFRlbGxzIHRoZSBGVFAgc2VydmVyIHRvIGNoYW5nZSBpdHMgZGVmYXVsdCAod29ya2luZykg ZGlyZWN0b3J5Ci0gICAgICAgICAgdG8gdGhlIG9uZSBnaXZlbiwgd2hpY2ggdXN1YWxseSBtdXN0 IGJlIGV4cHJlc3NlZCBpbiB0aGUgc3ludGF4Ci0gICAgICAgICAgb2YgdGhlIHNlcnZlciBwbGF0 Zm9ybSAoVU5JWCwgVk1TLCBldGMpLiBJZiB0aGUgZGlyZWN0b3J5IGlzIG5vdAotICAgICAgICAg IHNwZWNpZmllZCwgdGhlIHJlc3VsdCBkZXBlbmRzIG9uIHRoZSBGVFAgc2VydmVyIC0tIGl0IG1p Z2h0Ci0gICAgICAgICAgY29tcGxhaW4gdGhhdCB0aGUgY29tbWFuZCBpcyBpbGxlZ2FsLCBvciBp dCBtaWdodCBjaGFuZ2UgdG8geW91cgotICAgICAgICAgIG9yaWdpbmFsIGxvZ2luIGRpcmVjdG9y eS4gU3lub255bXM6IEZUUCBDV0QgKENoYW5nZSBXb3JkaW5nCi0gICAgICAgICAgRGlyZWN0b3J5 KTsgUkNELgotCi0gICBGVFAgQ0RVUAotICAgICAgICAgIFRlbGxzIHRoZSBGVFAgc2VydmVyIHRv IGNoYW5nZSBpdHMgZGVmYXVsdCAod29ya2luZykgZGlyZWN0b3J5Ci0gICAgICAgICAgdG8gdGhl IHBhcmVudCBkaXJlY3Rvcnkgb2YgaXRzIGN1cnJlbnQgb25lIChlcXVpdmFsZW50IHRvCi0gICAg ICAgICAgImNkIC4uIiBpbiBVTklYLCBvciAiY2QgWy1dIiBpbiBWTVMpLiBTeW5vbnltczogUkNE VVAsIEZUUCBVUC4KLQotICAgRlRQIFBXRAotICAgICAgICAgIEFza3MgdGhlIEZUUCBzZXJ2ZXIg dG8gcmVwb3J0ICgicHJpbnQiKSBpdHMgY3VycmVudCB3b3JraW5nCi0gICAgICAgICAgZGlyZWN0 b3J5LiBTeW5vbnltOiBSUFdELgotCi0gICBGVFAgTUtESVIgZGlyZWN0b3J5Ci0gICAgICAgICAg QXNrcyB0aGUgRlRQIHNlcnZlciB0byBjcmVhdGUgdGhlIGRpcmVjdG9yeSB3aG9zZSBuYW1lIGlz IGdpdmVuLgotICAgICAgICAgIEluIGdlbmVyYWwsIHRoZSBuYW1lIG11c3QgYmUgaW4gdGhlIHN5 bnRheCBvZiB0aGUgc2VydmVyJ3MgZmlsZQotICAgICAgICAgIHN5c3RlbSwgYW5kIGl0IG11c3Qg YmUgZWl0aGVyIGFic29sdXRlIChhIGZ1bGwgcGF0aG5hbWUpIG9yCi0gICAgICAgICAgcmVsYXRp dmUgdG8gdGhlIHNlcnZlcidzIGN1cnJlbnQgKHdvcmtpbmcpIGRpcmVjdG9yeS4gVGhpcwotICAg ICAgICAgIGNvbW1hbmQgZmFpbHMgaWYgdGhlIGRpcmVjdG9yeSBjYW4ndCBiZSBjcmVhdGVkIGZv ciBhbnkgcmVhc29uLAotICAgICAgICAgIGluY2x1ZGluZyB0aGF0IGl0IGV4aXN0cyBhbHJlYWR5 LiBTeW5vbnltOiBSTUtESVIuCi0KLSAgIEZUUCBSTURJUiBkaXJlY3RvcnkKLSAgICAgICAgICBB c2tzIHRoZSBGVFAgc2VydmVyIHRvIHJlbW92ZSB0aGUgZGlyZWN0b3J5IHdob3NlIG5hbWUgaXMg Z2l2ZW4uCi0gICAgICAgICAgVGhlIHJ1bGVzIGFyZSB0aGUgc2FtZSBhcyBmb3IgTUtESVIsIHBs dXMgaW4gbW9zdCBjYXNlcywgdGhlCi0gICAgICAgICAgc2VydmVyIHdpbGwgbm90IHJlbW92ZSBh bnkgZGlyZWN0b3J5IHVubGVzcyBpdCBpcyBlbXB0eS4KLSAgICAgICAgICBTeW5vbnltOiBSUk1E SVIuCi0KLSAgIEZUUCBESVJFQ1RPUlkgWyBmaWxlc3BlYyBdIFsgcmVkaXJlY3RvcnMgXQotICAg ICAgICAgIFRlbGxzIHRoZSBGVFAgc2VydmVyIHRvIHNlbmQgYSBkaXJlY3RvcnkgbGlzdGluZyBv ZiB0aGUKLSAgICAgICAgICBzcGVjaWZpZWQgZmlsZXMuIElmIG5vIGZpbGVzcGVjIGlzIGdpdmVu LCB0aGUgc2VydmVyIGxpc3RzIGFsbAotICAgICAgICAgIGZpbGVzIGluIGl0cyBjdXJyZW50IHdv cmtpbmcgZGlyZWN0b3J5LiBUaGUgcmVzdWx0cyBhcmUgaW4KLSAgICAgICAgICB3aGF0ZXZlciBm b3JtYXQgdGhlIHNlcnZlciBjaG9vc2VzIHRvIHNlbmQgdGhlbS4gWW91IGNhbiB1c2UKLSAgICAg ICAgICBVTklYLWxpa2UgcmVkaXJlY3RvcnMgdG8gc2VuZCB0aGUgbGlzdGluZyB0byBhIGZpbGUg b3IgYQotICAgICAgICAgIHBpcGVsaW5lLCBleGFjdGx5IGFzIHdpdGggdGhlIHJlZ3VsYXIgS2Vy bWl0IGNsaWVudC9zZXJ2ZXIKLSAgICAgICAgICBSRU1PVEUgRElSRUNUT1JZIGNvbW1hbmQgKFsy NzFdVXNpbmcgQy1LZXJtaXQsIENoYXB0ZXIgMTEpLgotICAgICAgICAgIFN5bm9ueW06IFJESVJF Q1RPUlkuIEV4YW1wbGVzOgotCi0gICAgZnRwIGRpciAgICAgICAgICAgICAgICAgICAgICAgICAg IDsgU2hvdyBsaXN0aW5nIG9mIGFsbCBmaWxlcyBvbiBzY3JlZW4KLSAgICBmdHAgZGlyICoudHh0 ICAgICAgICAgICAgICAgICAgICAgOyBMaXN0ICoudHh0IGZpbGVzIG9uIHNjcmVlbgotICAgIGZ0 cCBkaXIgKi50eHQgPiBzb21lZmlsZSAgICAgICAgICA7IFB1dCBsaXN0aW5nIGluIHNvbWVmaWxl Ci0gICAgZnRwIGRpciAqLnR4dCA+PiBzb21lZmlsZSAgICAgICAgIDsgQXBwZW5kIGxpc3Rpbmcg dG8gc29tZWZpbGUKLSAgICBmdHAgZGlyICoudHh0IHwgc29ydCA+IHNvbWVmaWxlICAgOyBQdXQg c29ydGVkIGxpc3RpbmcgaW4gc29tZWZpbGUKLSAgICBmdHAgZGlyIHwgbW9yZSAgICAgICAgICAg ICAgICAgICAgOyBSdW5zIGxpc3QgdGhyb3VnaCAibW9yZSIKLSAgICBmdHAgZGlyIHwgc29ydCB8 IG1vcmUgICAgICAgICAgICAgOyBSdW5zIGxpc3QgdGhyb3VnaCAic29ydCIgYW5kICJtb3JlIgot Ci0gICBGVFAgVkRJUkVDVE9SWSBbIGZpbGVzcGVjIF0gWyByZWRpcmVjdG9ycyBdCi0gICAgICAg ICAgIlZlcmJvc2UiIGRpcmVjdG9yeS4gVGhpcyBpcyBhbiBhbHRlcm5hdGl2ZSBGVFAgRElSRUNU T1JZCi0gICAgICAgICAgY29tbWFuZCBwcmltYXJpbHkgZm9yIHVzZSB3aXRoIERFQ1NZU1RFTS0y MCAoVE9QUy0yMCkgRlRQCi0gICAgICAgICAgc2VydmVycywgd2hpY2ggc2VuZCBvbmx5IGZpbGVu YW1lcyB3aGVuIGdpdmVuIGEgRElSRUNUT1JZCi0gICAgICAgICAgY29tbWFuZDsgdGhlIFZESVJF Q1RPUlkgY29tbWFuZCBtYWtlcyB0aGVtIGFsc28gc2VuZCBmaWxlIHNpemVzLAotICAgICAgICAg IGRhdGVzLCBhbmQgYXR0cmlidXRlcy4KLQotICAgRlRQIENIRUNLIGZpbGVzcGVjCi0gICAgICAg ICAgQXNrcyB0aGUgRlRQIHNlcnZlciB3aGV0aGVyIHRoZSBnaXZlbiBmaWxlIGV4aXN0cyBvciwg aWYgdGhlCi0gICAgICAgICAgZmlsZXNwZWMgY29udGFpbnMgd2lsZGNhcmRzLCBpZiBhbnkgZmls ZXMgbWF0Y2gsIGFuZCB0aGlzCi0gICAgICAgICAgY29tbWFuZCBzdWNjZWVkcyBvciBmYWlscyBh Y2NvcmRpbmdseS4KLQotICAgRlRQIE1PRFRJTUUgZmlsZW5hbWUKLSAgICAgICAgICBBc2tzIHRo ZSBGVFAgc2VydmVyLCB2aWEgdGhlIG5vdC15ZXQtc3RhbmRhcmQgRlRQIE1EVE0gY29tbWFuZCwK LSAgICAgICAgICB0byBzZW5kIHRoZSBtb2RpZmljYXRpb24gZGF0ZSBhbmQgdGltZSBvZiB0aGUg Z2l2ZW4gZmlsZS4gVGhlCi0gICAgICAgICAgcmVzcG9uc2Ugc2hvdWxkIGJlIGEgbnVtZXJpYyBz dHJpbmcgaW4gdGhlIGZvcm1hdDoKLSAgICAgICAgICB5eXl5bW1kZGhobW1zc3h4eHh4Li4uIHdo ZXJlIHl5eXkgaXMgdGhlIHllYXIsIG1tIGlzIHRoZSBtb250aCwKLSAgICAgICAgICBkZCBpcyB0 aGUgZGF5LCBoaCBpcyB0aGUgaG91ciAoMC0yMyksIG1tIGlzIHRoZSBtaW51dGUsIHNzIGlzCi0g ICAgICAgICAgdGhlIHNlY29uZCwgYW5kIHh4eC4uLiBpcyB0aGUgb3B0aW9uYWwgZnJhY3Rpb24g b2YgdGhlIHNlY29uZCAoMAotICAgICAgICAgIG9yIG1vcmUgZGlnaXRzKS4gVGhlIGRhdGUgYW5k IHRpbWUgaXMgZXhwcmVzc2VkIGluIFVUQyAoR01ULAotICAgICAgICAgIFp1bHUsIFplcm8tTWVy aWRpYW4pLiBUaGUgcmVzdWx0IGlzIGF2YWlsYWJsZSBwcm9ncmFtbWF0aWNhbGx5Ci0gICAgICAg ICAgaW4gdGhlIFsyNzJdXHYoZnRwX21lc3NhZ2UpIHZhcmlhYmxlLCBhbmQgaXMgdW5kZXJzdGFu ZGFibGUgYnkKLSAgICAgICAgICBLZXJtaXQncyBkYXRlLXRpbWUgc3dpdGNoZXMgYW5kIGZ1bmN0 aW9ucy4gRm9yIGV4YW1wbGUsIHN1cHBvc2UKLSAgICAgICAgICB3ZSB3YW50IHRvIHVwbG9hZCBh bGwgbG9jYWwgZmlsZXMgdGhhdCBhcmUgbmV3ZXIgdGhhbiBhCi0gICAgICAgICAgcGFydGljdWxh ciBmaWxlIG9uIHRoZSBzZXJ2ZXI6Ci0KLSAgQy1LZXJtaXQ+IGZ0cCBtb2R0aW1lIHNpZ25wb3N0 Ci0gIEMtS2VybWl0PiBlY2hvIFx2KGZ0cF9tZXNzYWdlKQotICAyMDAxMDgwNzExMzU0Mi4wMTQK LSAgQy1LZXJtaXQ+IGZ0cCBtcHV0IC9hZnRlcjpcdihmdHBfbWVzc2FnZSlHTVQgKgotCi0gICAg ICAgICAgTm90ZSB0aGF0IHdlIG11c3QgYXBwZW5kICJHTVQiIHRvIHRoZSBkYXRlLXRpbWUgc3Ry aW5nIHRvIGxldAotICAgICAgICAgIHRoZSAvQUZURVIgc3dpdGNoIGtub3cgdGhlIHRpbWUgaXMg R01UIHJhdGhlciB0aGFuIGxvY2FsLgotCi0gICBGVFAgU0laRSBmaWxlbmFtZQotICAgICAgICAg IEFza3MgdGhlIEZUUCBzZXJ2ZXIgdG8gc2VuZCB0aGUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBn aXZlbgotICAgICAgICAgIGZpbGUuIFRoZSByZXN1bHQgbWlnaHQgdmFyeSBkZXBlbmRpbmcgb24g d2hldGhlciB0aGUgY3VycmVudCBGVFAKLSAgICAgICAgICBUWVBFIGlzIGJpbmFyeSBvciB0ZXh0 ICgiYXNjaWkiKS4gRm9yIGEgcmVsaWFibGUgYnl0ZSBjb3VudCwgZG8KLSAgICAgICAgICBGVFAg VFlQRSBCSU5BUlkgZmlyc3QuIFRoZSByZXN1bHQgaXMgYXZhaWxhYmxlIHByb2dyYW1tYXRpY2Fs bHkKLSAgICAgICAgICBpbiB0aGUgWzI3M11cdihmdHBfbWVzc2FnZSkgdmFyaWFibGUuCi0KLSAg IEZUUCBDSE1PRCBwZXJtaXNzaW9ucyBmaWxlbmFtZQotICAgICAgICAgIFRlbGxzIHRoZSBGVFAg c2VydmVyIHRvIHNldCB0aGUgcGVybWlzc2lvbnMgKHByb3RlY3Rpb24pIG9mIHRoZQotICAgICAg ICAgIGdpdmVuIGZpbGUgdG8gdGhlIG9uZXMgZ2l2ZW4uIFRoZSBwZXJtaXNzaW9ucyBhbmQgZmls ZW5hbWUgbXVzdAotICAgICAgICAgIGJlIGdpdmVuIGluIHdoYXRldmVyIHN5bnRheCBpcyByZXF1 aXJlZCBieSB0aGUgc2VydmVyLiBFeGFtcGxlCi0gICAgICAgICAgKGZvciBhIFVOSVgtYmFzZWQg RlRQIHNlcnZlcik6Ci0KLSAgZnRwIGNobW9kIDY2NCBvb2ZhLnR4dAotCi0gICAgICAgICAgTm90 IGFsbCBzZXJ2ZXJzIHN1cHBvcnQgdGhpcyBjb21tYW5kLiBGb3Igbm9uLVVOSVgtYmFzZWQKLSAg ICAgICAgICBzZXJ2ZXJzLCB5b3UgbWlnaHQgbmVlZCB0byB1c2UgRlRQIFFVT1RFIG9yIEZUUCBT SVRFIGFuZCB0aGUKLSAgICAgICAgICBhcHByb3ByaWF0ZSBwbGF0Zm9ybS1zcGVjaWZpYyBGVFAg c2VydmVyIGNvbW1hbmQuCi0KLSAgIEZUUCBVTUFTSyBbIG51bWJlciBdCi0gICAgICAgICAgVGhp cyBjb21tYW5kIGlzIHByb2JhYmx5IHNwZWNpZmljIHRvIFVOSVgtYmFzZWQgc2VydmVyczsgaXQg c2V0cwotICAgICAgICAgIHRoZSBVTklYICJ1bWFzayIsIHdoaWNoIGlzIHRoZSBkZWZhdWx0IHBl cm1pc3Npb25zIG1hc2sgZm9yIG5ldwotICAgICAgICAgIChpbiB0aGlzIGNhc2UsIGluY29taW5n KSBmaWxlcy4gQ3J1ZGVseSBwdXQsIHRoZSBVTklYIHVtYXNrIGlzCi0gICAgICAgICAgYW4gb2N0 YWwgcmVwcmVzZW50YXRpb24gb2YgYSBiaW5hcnkgbnVtYmVyIGluIGluIHdoaWNoIGEgMSBiaXQK LSAgICAgICAgICBzdGFuZHMgZm9yIGEgcGVybWlzc2lvbiBiaXQgdGhhdCBtdXN0IGJlIDAsIGFu ZCBhIDAgYml0IHN0YW5kcwotICAgICAgICAgIGZvciBhIHBlcm1pc3Npb24gYml0IHRoYXQgY2Fu IGJlIDAgb3IgMSBkZXBlbmRpbmcgb24gb3RoZXIKLSAgICAgICAgICBmYWN0b3JzLCBzdWNoIGFz IHRoZSBwZXJtaXNzaW9ucyBvZiB0aGUgcGFyZW50IGRpcmVjdG9yeS4KLSAgICAgICAgICBFeGFt cGxlOiAidW1hc2sgMDA3IiByZXF1aXJlcyB0aGF0IG5ldyBmaWxlcyBhcmUgY3JlYXRlZCB3aXRo b3V0Ci0gICAgICAgICAgcmVhZC93cml0ZS9leGVjdXRlIHdvcmxkIHBlcm1pc3Npb24uIElmIHRo ZSBudW1iZXIgaXMgbm90Ci0gICAgICAgICAgc3BlY2lmaWVkLCB0aGUgc2VydmVyJ3MgY3VycmVu dCB1bWFzayBpcyByZXBvcnRlZC4KLQotICAgRlRQIFJFTkFNRSBmaWxlbmFtZSBuZXduYW1lCi0g ICAgICAgICAgQXNrcyB0aGUgRlRQIHNlcnZlciB0byByZW5hbWUgdGhlIGZpbGUgd2hvc2UgbmFt ZSBpcyAiZmlsZW5hbWUiCi0gICAgICAgICAgdG8gIm5ld25hbWUiLiBXb3JrcyBvbmx5IGZvciBv bmUgZmlsZTsgY2FuIG5vdCBiZSB1c2VkIHdpdGgKLSAgICAgICAgICB3aWxkY2FyZHMuIFRoZSBz ZXJ2ZXIncyBpbnRlcnByZXRhdGlvbiBvZiAibmV3bmFtZSIgY2FuIHZhcnkgKGluCi0gICAgICAg ICAgc29tZSBjYXNlcyBpdCBtdXN0IGJlIGEgZmlsZW5hbWUsIGluIG90aGVycyBwZXJoYXBzIGl0 IGNhbiBhbHNvCi0gICAgICAgICAgYmUgYSBkaXJlY3RvcnkgbmFtZSwgaW4gd2hpY2ggY2FzZSBp ZiB0aGUgZmlsZW5hbWUgZGVub3RlIGEKLSAgICAgICAgICByZWd1bGFyIGZpbGUsIHRoZSBmaWxl IG1pZ2h0IGJlIG1vdmVkIHRvIHRoZSBnaXZlbiBkaXJlY3RvcnkpLgotICAgICAgICAgIFNvbWUg c2VydmVycyBtaWdodCBhbGxvdyBmaWxlcyB0byBiZSByZW5hbWVkICgibW92ZWQiKSBiZXR3ZWVu Ci0gICAgICAgICAgcGh5c2ljYWwgZGlza3Mgb3IgcGFydGl0aW9ucywgb3RoZXJzIG1pZ2h0IG5v dC4gU3lub255bToKLSAgICAgICAgICBSUkVOQU1FLgotCi0gICBGVFAgREVMRVRFIFsgc3dpdGNo ZXMgXSBmaWxlc3BlYyBbIGZpbGVzcGVjIFsgLi4uIF0gXQotICAgICAgICAgIFRlbGxzIHRoZSBG VFAgc2VydmVyIHRvIGRlbGV0ZSB0aGUgZmlsZSBvciBmaWxlcyBsaXN0ZWQuIEVhY2gKLSAgICAg ICAgICBmaWxlIHNwZWNpZmljYXRpb24gbWF5LCBidXQgbmVlZCBub3QsIGNvbnRhaW4gd2lsZGNh cmQKLSAgICAgICAgICBjaGFyYWN0ZXJzIHRvIG1hdGNoIG11bHRpcGxlIGZpbGVzLiBGaWxlIHNw ZWNpZmljYXRpb25zIGFuZAotICAgICAgICAgIHdpbGRjYXJkIHN5bnRheCBtdXN0IGJlIHRob3Nl IG9mIHRoZSBzZXJ2ZXIuIEFueSBmaWxlCi0gICAgICAgICAgc3BlY2lmaWNhdGlvbnMgdGhhdCBj b250YWluIHNwYWNlcyBtdXN0IGJlIGVuY2xvc2VkIGluIGJyYWNlcyBvcgotICAgICAgICAgIGRv dWJsZXF1b3Rlcy4gRlRQIERFTEVURSBzd2l0Y2hlcyBhcmU6Ci0KLSAvRVJST1ItQUNUSU9OOiAg L0ZJTEVOQU1FUzogICAgIC9OT0JBQ0tVUEZJTEVTICAvUVVJRVQKLSAvRVhDRVBUOiAgICAgICAg L0xBUkdFUi1USEFOOiAgIC9OT0RPVEZJTEVTICAgICAvTk9QQUdFCi0gL1BBR0UgICAgICAgICAg IC9SRUNVUlNJVkUgICAgICAvU01BTExFUi1USEFOOgotCi0gICAgICAgICAgV2hlbiB1c2VkIHdp dGggRlRQIERFTEVURSwgdGhlIC9SRUNVUlNJVkUgc3dpdGNoIGRlbGV0ZXMgZmlsZXMKLSAgICAg ICAgICBidXQgbm90IGRpcmVjdG9yaWVzLCBhbmQgZnVydGhlcm1vcmUgZGVwZW5kcyBvbiB0aGUg c2VydmVyCi0gICAgICAgICAgcHJvdmlkaW5nIHJlY3Vyc2l2ZSBmaWxlIGxpc3RzLCB3aGljaCBp cyBub3QgdGhlIG5vcm1hbAotICAgICAgICAgIGJlaGF2aW9yLiBGb3IgZnVydGhlciBkZXRhaWxz LCBzZWUgdGhlIGRlc2NyaXB0aW9ucyBvZiB0aGVzZQotICAgICAgICAgIHN3aXRjaGVzIGluIFsy NzRdU2VjdGlvbiAzLjYuIFN5bm9ueW1zOiBGVFAgTURFTEVURSAoS2VybWl0Ci0gICAgICAgICAg bWFrZXMgbm8gZGlzdGluY3Rpb24gYmV0d2VlbiBERUxFVEUgYW5kIE1ERUxFVEUpOyBSREVMRVRF LgotCi0gICBGVFAgVFlQRSB7IFRFWFQsIEJJTkFSWSwgVEVORVggfQotICAgICAgICAgIFRlbGxz IHRoZSBGVFAgc2VydmVyIHRvIGNoYW5nZSBpdHMgZmlsZS10cmFuc2ZlciB0eXBlIHRvIHRoZSBv bmUKLSAgICAgICAgICBnaXZlbiwgaW1tZWRpYXRlbHkuIFNlZSBbMjc1XVNFVCBGVFAgVFlQRSBm b3IgZGV0YWlscy4KLQotICAgWyBbMjc2XVRvcCBdIFsgWzI3N11GVFAgVG9wIF0gWyBbMjc4XUMt S2VybWl0IEhvbWUgXSBbIFsyNzldS2VybWl0IEhvbWUKLSAgIF0KLQotMy41LiBVcGxvYWRpbmcg RmlsZXMgV2l0aCBGVFAKLQotICAgVXBsb2FkaW5nIG1lYW5zIHNlbmRpbmcgZmlsZXMgZnJvbSB0 aGUgY2xpZW50IChLZXJtaXQpIHRvIHRoZSBGVFAKLSAgIHNlcnZlci4gVGhlIGJhc2ljIGNvbW1h bmQgZm9yIHVwbG9hZGluZyBmaWxlcyB3aXRoIEZUUCBpcyBQVVQ6Ci0KLSAgIEZUUCBQVVQgWyBz d2l0Y2hlcyBdIFsgZmlsZXNwZWMgWyBhcy1uYW1lIF0gXQotICAgICAgICAgIFVwbG9hZHMgKHNl bmRzKSB0aGUgZmlsZSBvciBmaWxlcyB0aGF0IG1hdGNoIHRoZSBmaWxlCi0gICAgICAgICAgc3Bl Y2lmaWNhdGlvbiwgd2hpY2ggbWF5IGluY2x1ZGUgd2lsZGNhcmRzLCB0byB0aGUgc2VydmVyLiBJ ZiBubwotICAgICAgICAgIGZpbGVzcGVjIGlzIGdpdmVuLCB0aGUgbmFtZXMgb2YgZmlsZXMgdG8g c2VuZCBhcmUgdGFrZW4gZnJvbSB0aGUKLSAgICAgICAgICAvTElTVEZJTEU6IGZpbGUsIGlmIGFu eSwgb3RoZXJ3aXNlIGZyb20gdGhlIFNFTkQtTElTVCwgaWYgYW55LgotICAgICAgICAgIFVubGVz cyB5b3UgZ28gb3V0IG9mIHlvdXIgd2F5IHRvIHByZXZlbnQgaXQsIEtlcm1pdCBkZXRlcm1pbmVz Ci0gICAgICAgICAgdGhlIHRyYW5zZmVyIG1vZGUgKHRleHQgb3IgYmluYXJ5KSBmb3IgZWFjaCBm aWxlIGF1dG9tYXRpY2FsbHksCi0gICAgICAgICAgYW5kIHN3aXRjaGVzIGF1dG9tYXRpY2FsbHkg b24gYSBwZXItZmlsZSBiYXNpcy4gSWYgYW4gYXMtbmFtZSBpcwotICAgICAgICAgIGdpdmVuLCB0 aGUgZmlsZSBpcyBzZW50IHVuZGVyIHRoYXQgbmFtZSBpbnN0ZWFkIG9mIGl0cyBvd24gKGlmCi0g ICAgICAgICAgYW4gYXMtbmFtZSBpcyBnaXZlbiB3aXRoIGEgd2lsZGNhcmQgZmlsZXNwZWMsIHRo ZSByZXN1bHQgaXMgYQotICAgICAgICAgIGJpdCBtb3JlIGNvbXBsaWNhdGVkLCBhbmQgaXMgZXhw bGFpbmVkIGxhdGVyIGluIHRoaXMgc2VjdGlvbikuCi0KLSAgIFVubGlrZSBub3JtYWwgRlRQIGNs aWVudHMsIEtlcm1pdCBkb2VzIG5vdCBwcm9tcHQgeW91IGJ5IGRlZmF1bHQgKG9yIGF0Ci0gICBh bGwpIGZvciBlYWNoIGZpbGU7IGl0IGp1c3Qgc2VuZHMgdGhlbSwganVzdCBhcyBpdCBkb2VzIHdp dGggS2VybWl0Ci0gICBwcm90b2NvbC4gVGhlIGZpbGVzcGVjIGNhbiBiZSBhIGxpdGVyYWwgZmls ZW5hbWUgb3IgYSBLZXJtaXQgcGF0dGVybiwKLSAgIGRlc2NyaWJlZCBpbjoKLQotICBbMjgwXWh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC45Ci0KLSAgIEtl cm1pdCBwYXR0ZXJucyBhcmUgZXF1aXZhbGVudCB0byBDLVNoZWxsIHBhdHRlcm5zIGFuZCBwcm92 aWRlIGEgZmFpcgotICAgYW1vdW50IG9mIGZsZXhpYmlsaXR5IGluIHNlbGVjdGluZyB3aGljaCBm aWxlcyB0byBzZW5kLCB3aGljaCBpcwotICAgYXVnbWVudGVkIGJ5IHRoZSBmaWxlLXNlbGVjdGlv biBzd2l0Y2hlcyBwcmVzZW50ZWQgaW4gWzI4MV1TZWN0aW9uCi0gICAzLjUuMS4KLQotICAgRlRQ IE1QVVQgWyBzd2l0Y2hlcyBdIGZpbGVzcGVjIFsgZmlsZXNwZWMgWyAuLi4gXSBdCi0gICAgICAg ICAgRlRQIE1QVVQgaXMganVzdCBsaWtlIEZUUCBQVVQgZXhjZXB0IGl0IGFsbG93cyB5b3UgdG8g Z2l2ZSBtb3JlCi0gICAgICAgICAgdGhhbiBvbmUgZmlsZSBzcGVjaWZpY2F0aW9uLCBhbmQgaXQg ZG9lcyBub3QgYWxsb3cgYW4gYXMtbmFtZSBpbgotICAgICAgICAgIHRoZSBmaWxlIGxpc3QuIEhv d2V2ZXIsIGFzLW5hbWVzIGNhbiBiZSBnaXZlbiB0byBlaXRoZXIgUFVUIG9yCi0gICAgICAgICAg TVBVVCB3aXRoIHRoZSAvQVMtTkFNRTogc3dpdGNoLgotCi0gICBJZiBhIFBVVCBvciBNUFVUIGNv bW1hbmQgcmVzdWx0cyBpbiBvbmUgZmlsZSBiZWluZyB1cGxvYWRlZCwgaXQKLSAgIHN1Y2NlZWRz IGlmIHRoZSBmaWxlIGlzIHVwbG9hZGVkIGNvbXBsZXRlbHkgYW5kIGZhaWxzIG90aGVyd2lzZS4g SWYKLSAgIG1vcmUgdGhhbiBvbmUgZmlsZSBpcyBzZWxlY3RlZCBmb3IgdXBsb2FkLCBzdWNjZXNz IG9yIGZhaWx1cmUgZGVwZW5kcwotICAgb24gdGhlIFsyODJdRlRQIEVSUk9SLUFDVElPTiBzZXR0 aW5nOyBpZiBpdCBpcyBQUk9DRUVEICh0aGUgZGVmYXVsdAotICAgc2V0dGluZyksIHRoZW4gdGhl IFtNXVBVVCBjb21tYW5kIHN1Y2NlZWRzIGlmIGF0IGxlYXN0IG9uZSBvZiB0aGUgZmlsZXMKLSAg IHdhcyBjb21wbGV0ZWx5IHVwbG9hZGVkLCBhbmQgZmFpbHMgb3RoZXJ3aXNlLCBJZiBGVFAgRVJS T1ItQUNUSU9OIGlzCi0gICBRVUlULCB0aGUgW01dUFVUIGNvbW1hbmQgc3VjY2VlZHMgaWYgYWxs IHNlbGVjdGVkIGZpbGVzIHdlcmUgdXBsb2FkZWQKLSAgIHN1Y2Nlc3NmdWxseSwgYW5kIGZhaWxz IGlmIGFueSBmaWxlIGZhaWxlZC4KLQotICAgRlRQIHVwbG9hZHMgbWF5IGJlIGludGVycnVwdGVk IGp1c3QgbGlrZSBLZXJtaXQgdXBsb2Fkcy4gV2hpbGUgdGhlCi0gICB0cmFuc2ZlciBpcyBpbiBw cm9ncmVzcywgdHlwZToKLQotICBYIHRvIGludGVycnVwdCB0aGUgY3VycmVudCBmaWxlIGFuZCBn byBvbiB0byB0aGUgbmV4dCBmaWxlLgotICBaIHRvIGNhbmNlbCB0aGUgY3VycmVudCBmaWxlIGFu ZCBhbGwgcmVtYWluaW5nIGZpbGVzLgotICBeQyAoQ29udHJvbC1DKTogTGlrZSBaLCBidXQgbWln aHQgYWN0IG1vcmUgcXVpY2tseS4KLQotICAgTVBVVCBtYXkgYmUgdXNlZCBhcyBpbiByZWd1bGFy IEZUUCBjbGllbnRzLCBidXQgaXQgaXMgbm90IHJlcXVpcmVkIHRvCi0gICBzZW5kIG11bHRpcGxl IGZpbGVzOyBpbiBLZXJtaXQgaXQgaXMgcmVxdWlyZWQgb25seSBpZiB5b3Ugd2FudCB0byBnaXZl Ci0gICBtdWx0aXBsZSBmaWxlIHNwZWNpZmljYXRpb25zLiBFeGFtcGxlczoKLQotICBmdHAgcHV0 IG9vZmEudHh0ICAgICAgICAgICAgICAgOyBTZW5kIGEgc2luZ2xlIGZpbGUgb29mYS50eHQKLSAg ZnRwIHB1dCBvb2ZhLnR4dCBidWRnZXQudHh0ICAgIDsgU2VuZCBzaW5nbGUgZmlsZSBvb2ZhLnR4 dCBhcyBidWRnZXQudHh0Ci0gIGZ0cCBwdXQgKi50eHQgICAgICAgICAgICAgICAgICA7IFNlbmQg YWxsICoudHh0IGZpbGVzCi0gIGZ0cCBtcHV0ICoudHh0ICAgICAgICAgICAgICAgICA7IFNlbmQg YWxsICoudHh0IGZpbGVzIChzYW1lIGFzICJwdXQgKi50eHQiKQotICBmdHAgbXB1dCAqLnR4dCBm b28uYmFyICAgICAgICAgOyBTZW5kIGFsbCAqLnR4dCBmaWxlcyBwbHVzIGZvby5iYXIKLQotICAg VGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gUFVUIGFuZCBNUFVUIGlzIGltcG9ydGFudCBvbmx5IHdo ZW4gbW9yZSB0aGFuCi0gICBvbmUgZmlsZXNwZWMgaXMgZ2l2ZW4sIGp1c3QgbGlrZSB0aGUgZGlz dGluY3Rpb24gYmV0d2VlbiBLZXJtaXQgU0VORAotICAgYW5kIE1TRU5EOgotCi0gIGZ0cCBwdXQg b29mYS50eHQgYnVkZ2V0LnR4dCAgICA7IFNlbmQgb29mYS50eHQgQVMgYnVkZ2V0LnR4dAotICBm dHAgbXB1dCBvb2ZhLnR4dCBidWRnZXQudHh0ICAgOyBTZW5kIG9vZmEudHh0IEFORCBidWRnZXQu dHh0Ci0KLSAgIElmIHRoZSBzb3VyY2UgZmlsZSBzcGVjaWZpY2F0aW9uIGluY2x1ZGVzIGFueSBw YXRoIHNlZ21lbnRzLCBmb3IKLSAgIGV4YW1wbGU6Ci0KLSAgcHV0IC90bXAvb29mYS50eHQKLSAg cHV0IHN1YmRpci9hbm90aGVyL2FuZGFub3RoZXIvb29mYS50eHQKLQotICAgdGhlIHBhdGggcG9y dGlvbiBpcyBzdHJpcHBlZCBmcm9tIHRoZSBmaWxlbmFtZSB0aGF0IGlzIHNlbnQgdG8gdGhlCi0g ICBzZXJ2ZXIuIEhvd2V2ZXIsIGlmIGFuIGFzLW5hbWUgY29udGFpbnMgYSBwYXRoLCBpdCBpcyBy ZXRhaW5lZC4KLSAgIEV4YW1wbGVzOgotCi0gIGZ0cCBwdXQgL3Vzci9kb2Mvb29mYS50eHQgICAg ICA7IFNlbmQgYXMgIm9vZmEudHh0Ii4KLSAgZnRwIHB1dCBvb2ZhLnR4dCAvdG1wL29vZmEudHh0 IDsgU2VuZCBhcyAiL3RtcC9vb2ZhLnR4dCIKLQotICAgVGhlIGxhdHRlciBleGFtcGxlIHNlbmRz IHRoZSBmaWxlIG9vZmEudHh0IGZyb20geW91ciBjdXJyZW50IGxvY2FsCi0gICBkaXJlY3Rvcnkg dG8gdGhlIHNlcnZlcidzIC90bXAgZGlyZWN0b3J5LiBUaGlzIHdvcmtzIG9ubHkgaWYgdGhlIHNl cnZlcgotICAgdXNlcyB0aGUgc2FtZSBkaXJlY3Rvcnkgbm90YXRpb24gdGhhdCB5b3UgdXNlZCBp biB0aGUgYXMtbmFtZSBBTkQgdGhlCi0gICBnaXZlbiBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMg b24gdGhlIHNlcnZlciBBTkQgaWYgeW91IGhhdmUgd3JpdGUKLSAgIGFjY2VzcyB0byBpdC4KLQot ICAgVXNlIGNhdXRpb24gd2hlbiB1cGxvYWRpbmcgZnJvbSBhIGNhc2Utc2Vuc2l0aXZlIGZpbGUg c3lzdGVtLCBzdWNoIGFzCi0gICBVTklYLCB0byBhIGZpbGUgc3lzdGVtIHRoYXQgaXMgbm90IGNh c2Ugc2Vuc2l0aXZlLCBzdWNoIGFzIFdpbmRvd3Mgb3IKLSAgIFZNUy4gSWYgeW91IGhhdmUgdHdv IGZpbGVzIGluIFVOSVgsIEFBIGFuZCBhYSBhbmQgdXBsb2FkIGJvdGggb2YgdGhlbSwKLSAgIHRo ZSBzZWNvbmQgb25lIHdpbGwgb3ZlcndyaXRlIHRoZSBmaXJzdC4gVGhlIG9ubHkgd2F5IGFyb3Vu ZCB0aGlzCi0gICBwcm92aWRlZCBieSBGVFAgcHJvdG9jb2wgaXMgaXRzICJ1bmlxdWUgc2VydmVy IG5hbWVzIiBmZWF0dXJlIChTRVQgRlRQCi0gICBVTklRVUUtU0VSVkVSLU5BTUVTIG9yIHRoZSAv VU5JUVVFIHN3aXRjaCBkZXNjcmliZWQgYmVsb3cpLgotCi0zLjUuMS4gRlRQIFBVVCBTd2l0Y2hl cwotCi0gICBGVFAgUFVUIGFuZCBNUFVUIGFyZSBzaW1pbGFyIGluIGZvcm1hdCBhbmQgYmVoYXZp b3IgdG8gdGhlIHJlZ3VsYXIKLSAgIEtlcm1pdCBTRU5EIGFuZCBNU0VORCBjb21tYW5kcywgYW5k IHRoZXkgYWxsb3cgbW9zdCBvZiB0aGUgc2FtZQotICAgb3B0aW9uYWwgc3dpdGNoZXM6Ci0KLUMt S2VybWl0PmZ0cCBwdXQgPyBGaWxlbmFtZSwgb3Igc3dpdGNoLCBvbmUgb2YgdGhlIGZvbGxvd2lu ZzoKLSAvYWZ0ZXI6ICAgICAgICAgICAgICAgICAvbGFyZ2VyLXRoYW46ICAgICAgICAgICAvcmVu YW1lLXRvOgotIC9hcnJheTogICAgICAgICAgICAgICAgIC9saXN0ZmlsZTogICAgICAgICAgICAg IC9zZXJ2ZXItY2hhcmFjdGVyLXNldDoKLSAvYXMtbmFtZTogICAgICAgICAgICAgICAvbG9jYWwt Y2hhcmFjdGVyLXNldDogICAvc2VydmVyLXJlbmFtZS10bzoKLSAvYmVmb3JlOiAgICAgICAgICAg ICAgICAvbW92ZS10bzogICAgICAgICAgICAgICAvc2ltdWxhdGUKLSAvYmluYXJ5ICAgICAgICAg ICAgICAgICAvbm9iYWNrdXBmaWxlcyAgICAgICAgICAvc21hbGxlci10aGFuOgotIC9jb21tYW5k ICAgICAgICAgICAgICAgIC9ub2RvdGZpbGVzICAgICAgICAgICAgIC90ZW5leAotIC9kZWxldGUg ICAgICAgICAgICAgICAgIC9ub2ZvbGxvd2xpbmtzICAgICAgICAgIC90ZXh0Ci0gL2RvdGZpbGVz ICAgICAgICAgICAgICAgL25vdC1hZnRlcjogICAgICAgICAgICAgL3RyYW5zcGFyZW50Ci0gL2Vy cm9yLWFjdGlvbjogICAgICAgICAgL25vdC1iZWZvcmU6ICAgICAgICAgICAgL3R5cGU6Ci0gL2V4 Y2VwdDogICAgICAgICAgICAgICAgL3Blcm1pc3Npb25zOiAgICAgICAgICAgL3VwZGF0ZQotIC9m aWxlbmFtZXM6ICAgICAgICAgICAgIC9xdWlldCAgICAgICAgICAgICAgICAgIC91bmlxdWUtc2Vy dmVyLW5hbWVzCi0gL2ZpbHRlcjogICAgICAgICAgICAgICAgL3JlY292ZXIKLSAvZm9sbG93bGlu a3MgICAgICAgICAgICAvcmVjdXJzaXZlCi0KLSAgIFNpbmNlIG1vc3Qgb2YgdGhlc2Ugc3dpdGNo ZXMgYXJlIGNvbW1vbiB0byBLZXJtaXQncyBTRU5EIGFuZCBNU0VORAotICAgY29tbWFuZHMsIHRo ZXkgZGVzY3JpYmVkIG9ubHkgYnJpZWZseSBoZXJlLiBGb3IgZ3JlYXRlciBkZXRhaWwgc2VlOgot Ci0gICAgIFsyODNdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3gxLjUgKGV4cGxhbmF0aW9uCi0gICBvZiBzd2l0Y2hlcykKLSAgICAgWzI4NF1odHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNwotICAgKGZpbGUtdHJhbnNm ZXIgc3dpdGNoZXMpCi0KLSAgIEZpcnN0IHRoZSBmaWxlLXNlbGVjdGlvbiBzd2l0Y2hlczoKLQot ICAgL0FGVEVSOmRhdGUtdGltZQotICAgL0JFRk9SRTpkYXRlLXRpbWUKLSAgIC9OT1QtQUZURVI6 ZGF0ZS10aW1lCi0gICAvTk9ULUJFRk9SRTpkYXRlLXRpbWUKLSAgICAgICAgICBPbmx5IHNlbmQg dGhvc2UgZmlsZXMgbW9kaWZpZWQgb24gb3IgYWZ0ZXIgb3IgYmVmb3JlIHRoZSBnaXZlbgotICAg ICAgICAgIGRhdGUgYW5kIHRpbWUuIFRoZXNlIHN3aXRjaGVzIGNhbiBiZSBjb21iaW5lZCB0byBz ZWxlY3QgZmlsZXMKLSAgICAgICAgICBtb2RpZmllZCBiZXR3ZWVuIHR3byBkYXRlL3RpbWVzLiBW YXJpb3VzIGRhdGUtdGltZSBmb3JtYXRzIGFyZQotICAgICAgICAgIGFjY2VwdGVkOyBpZiB0aGUg ZGF0ZS10aW1lIGNvbnRhaW5zIHNwYWNlcywgaXQgbXVzdCBiZSBlbmNsb3NlZAotICAgICAgICAg IGluIGJyYWNlcyBvciBkb3VibGVxdW90ZXMuIFNlZQotICAgICAgICAgIFsyODVdaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjYgYW5kCi0gICAgICAgICAg WzI4Nl1TZWN0aW9uIDguMTMgb2YgdGhpcyBkb2N1bWVudCBmb3IgZGV0YWlscyBhYm91dCBkYXRl LXRpbWUKLSAgICAgICAgICBmb3JtYXRzLiBFeGFtcGxlczoKLQotICBmdHAgcHV0IC9hZnRlcjp7 MSBqYW4gMjAwMCAwOjAwOjAwfSAqCi0gIGZ0cCBwdXQgL2FmdGVyOi01ZGF5cyAqCi0KLSAgIC9M QVJHRVItVEhBTjpudW1iZXIKLSAgIC9TTUFMTEVSLVRIQU46bnVtYmVyCi0gICAgICAgICAgT25s eSBzZW5kIGZpbGVzIGxhcmdlciAoc21hbGxlcikgdGhhbiB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGJ5 dGVzCi0gICAgICAgICAgKG9jdGV0cykuIFRoZXNlIHN3aXRjaGVzIGNhbiBiZSBjb21iaW5lZCB0 byBzZWxlY3QgZmlsZXMgaW4gYQotICAgICAgICAgIGNlcnRhaW4gc2l6ZSByYW5nZS4KLQotICAg L1RZUEU6e1RFWFQsQklOQVJZfQotICAgICAgICAgIE9ubHkgc2VuZCBmaWxlcyB0aGF0IGFyZSB0 aGUgZ2l2ZW4gdHlwZSwgd2hpY2ggaXMgZGV0ZXJtaW5lZCBmb3IKLSAgICAgICAgICBlYWNoIGZp bGUganVzdCBiZWZvcmUgc2VuZGluZyBpdCBieSBmaWxlIHNjYW5uaW5nLiBCSU5BUlkKLSAgICAg ICAgICBpbmNsdWRlcyBURU5FWDsgaWYgeW91IGhhdmUgaW5jbHVkZWQgYSAvVEVORVggc3dpdGNo LCBvcgotICAgICAgICAgIHByZXZpb3VzbHkgZ2l2ZW4gYSBbU0VUXSBGVFAgVFlQRSBURU5FWCBj b21tYW5kLCBiaW5hcnkgZmlsZXMKLSAgICAgICAgICBhcmUgc2VudCBpbiBURU5FWCwgcmF0aGVy IHRoYW4gQklOQVJZIG1vZGUuCi0KLSAgIC9bTk9dRE9URklMRVMKLSAgICAgICAgICBbRG9uJ3Rd IGluY2x1ZGUgZmlsZXMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCBkb3QgKC4pLiBCeQotICAgICAg ICAgIGRlZmF1bHQsIHN1Y2ggZmlsZXMgYXJlIG5vdCBpbmNsdWRlZCB1bmxlc3MgeW91ciBmaWxl c3BlYwotICAgICAgICAgIGV4cGxpY2l0bHkgbWVudGlvbnMgdGhlbS4KLQotICAgL05PQkFDS1VQ RklMRVMKLSAgICAgICAgICBEb24ndCBpbmNsdWRlIGZpbGVzIHdob3NlIG5hbWVzIGVuZCB3aXRo IC5+bm5ufiwgd2hlcmUgbm5uIGlzIGEKLSAgICAgICAgICBudW1iZXIsIGUuZy4gb29mYS50eHQu fjI3fi4gVGhlc2UgYXJlIGJhY2t1cCBmaWxlcyBjcmVhdGVkIGJ5Ci0gICAgICAgICAgS2VybWl0 LCBFTUFDUywgYW5kIG90aGVyIGFwcGxpY2F0aW9ucy4gQnkgZGVmYXVsdCwgYmFja3VwIGZpbGVz Ci0gICAgICAgICAgYXJlIGluY2x1ZGVkLgotCi0gICAvTk9GT0xMT1dMSU5LUwotICAgICAgICAg IChVTklYIG9ubHkpIFNraXAgb3ZlciBzeW1ib2xpYyBsaW5rcyByYXRoZXIgdGhhbiBmb2xsb3dp bmcgdGhlbQotICAgICAgICAgIChkZWZhdWx0KS4gVGhpcyBhcHBsaWVzIHRvIHdpbGRjYXJkIGFu ZC9vciByZWN1cnNpdmUgW01dUFVUczsgaWYKLSAgICAgICAgICBhIHNpbmdsZSBmaWxlbmFtZSBp cyBnaXZlbiwgYW5kIGl0IGhhcHBlbnMgdG8gYmUgYSBzeW1ib2xpYwotICAgICAgICAgIGxpbmss IHRoZSBmaWxlIGl0IHBvaW50cyB0byBpcyBzZW50LgotCi0gICAvRk9MTE9XTElOS1MKLSAgICAg ICAgICAoVU5JWCBvbmx5KSBBbHdheXMgZm9sbG93IChyZXNvbHZlKSBzeW1ib2xpYyBsaW5rcywg ZXZlbiBpbgotICAgICAgICAgIHdpbGRjYXJkIG9yIHJlY3Vyc2l2ZSBbTV1QVVRzLiBVc2Ugd2l0 aCBjYXV0aW9uLiBXYXRjaCBvdXQgZm9yCi0gICAgICAgICAgY2lyY3VsYXIgbGlua3MsIGVuZGxl c3MgbG9vcHMsIGV0Yy4KLQotICAgL0VYQ0VQVDpwYXR0ZXJuCi0gICAgICAgICAgRXhjZXB0aW9u IGxpc3QgLS0gZG9uJ3Qgc2VuZCBmaWxlcyB3aG9zZSBuYW1lcyBtYXRjaCB0aGUgZ2l2ZW4KLSAg ICAgICAgICBwYXR0ZXJuLiBTZWUgWzI4N11TZWN0aW9uIDEuNS40IG9mIHRoZSBbMjg4XUMtS2Vy bWl0IDcuMCBVcGRhdGUKLSAgICAgICAgICBOb3RlcyBmb3IgZGV0YWlscy4gSWYgeW91IHdhbnQg dG8gZXhjbHVkZSBhIGRpcmVjdG9yeSBmcm9tIGEKLSAgICAgICAgICByZWN1cnNpdmUgW01dUFVU LCB1c2UgL0VYQ0VQVDp7ZGlybmFtZS8qfS4KLQotICAgL1JFQ1VSU0lWRQotICAgICAgICAgIFNl bmRzIHRoZSBkZXNpcmVkIGZpbGVzIGZyb20gdGhlIGN1cnJlbnQgKG9yIGdpdmVuKSBkaXJlY3Rv cnksCi0gICAgICAgICAgcGx1cyBhbGwgZGlyZWN0b3JpZXMgYmVuZWF0aCBpdCwgaW5jbHVkaW5n IGVtcHR5IGRpcmVjdG9yaWVzLAotICAgICAgICAgIHJlcGxpY2F0aW5nIHRoZSBkaXJlY3Rvcnkg c3RydWN0dXJlIG9uIHRoZSBzZXJ2ZXIuIE5vIHNwZWNpYWwKLSAgICAgICAgICBjYXBhYmlsaXRp ZXMgYXJlIHJlcXVpcmVkIGluIHRoZSBzZXJ2ZXIsIGJ1dCBvZiBjb3Vyc2UgeW91cgotICAgICAg ICAgIGxvZ2luIElEIG9uIHRoZSBzZXJ2ZXIgbXVzdCBoYXZlIHRoZSBhcHByb3ByaWF0ZSBhY2Nl c3MgYW5kCi0gICAgICAgICAgcGVybWlzc2lvbiB0byBjcmVhdGUgZGlyZWN0b3JpZXMuIFJlY3Vy c2l2ZSBQVVRzIHdvcmsgbm90IG9ubHkKLSAgICAgICAgICBiZXR3ZWVuIGxpa2UgcGxhdGZvcm1z IChlLmcuIFVOSVggdG8gVU5JWCkgYnV0IGFsc28gYmV0d2VlbgotICAgICAgICAgIHVubGlrZSBv bmVzIChlLmcuIFVOSVggdG8gVk1TIG9yIFdpbmRvd3MpLCBpbiB3aGljaCBjYXNlCi0gICAgICAg ICAgdGV4dC1maWxlIGZvcm1hdCBkaWZmZXJlbmNlcyBhcmUgaGFuZGxlZCBieSBLZXJtaXQncyBh dXRvbWF0aWMKLSAgICAgICAgICB0ZXh0L2JpbmFyeSBtb2RlIHN3aXRjaGluZyAoWzI4OV1TZWN0 aW9uIDQpIGFuZCBjaGFyYWN0ZXItc2V0Ci0gICAgICAgICAgdHJhbnNsYXRpb24gKFsyOTBdU2Vj dGlvbiAzLjcpLiBTeW5vbnltOiAvU1VCRElSRUNUT1JJRVMuCi0KLSAgIC9VUERBVEUKLSAgICAg ICAgICBTZW5kIG9ubHkgZmlsZXMgdGhhdCBoYXZlIGNoYW5nZWQgc2luY2UgbGFzdCB0aW1lIChb MjkxXVNlY3Rpb24KLSAgICAgICAgICAzLjUuMikuCi0KLSAgIC9BUlJBWTphcnJheW5hbWUKLSAg ICAgICAgICBUaGUgImZpbGUiIHRvIGJlIHNlbnQgaXMgYW4gYXJyYXksIG9yIGEgc2VnbWVudCBv ZiBvbmUsIHJhdGhlcgotICAgICAgICAgIHRoYW4gYSByZWFsIGZpbGUuIEluIHRoaXMgY2FzZSB0 aGUgb3RoZXIgc2VsZWN0aW9uIHN3aXRjaGVzCi0gICAgICAgICAgZG9uJ3QgYXBwbHkuIFRoZSBh cnJheSBjb250ZW50cyBhcmUgc2VudCBpbiB0ZXh0IG1vZGUsIGFuZCBlYWNoCi0gICAgICAgICAg YXJyYXkgZWxlbWVudCBpcyB0cmVhdGVkIGFzIGEgbGluZS4gRXhhbXBsZToKLQotICBmdHAgcHV0 IC9hcy1uYW1lOmFycmF5LnR4dCAvYXJyYXk6JmEKLQotICAgICAgICAgIChvciwgdG8gc2VuZCBh IHNlZ21lbnQgb2YgdGhlIGFycmF5LCAvYXJyYXk6JmFbMTAwOjE5OV0pLiBJZiB5b3UKLSAgICAg ICAgICBkb24ndCBpbmNsdWRlIGFuIC9BUy1OQU1FLCBhIG5hbWUgb2YgIl9hcnJheV94XyIgaXMg dXNlZCAod2hlcmUKLSAgICAgICAgICB4IGlzIHRoZSBhcnJheSBsZXR0ZXIpLiBJZiB5b3UgaW5j bHVkZSB0aGlzIHN3aXRjaCwgbW9zdCBvdGhlcgotICAgICAgICAgIHN3aXRjaGVzIGFyZSBtZWFu aW5nbGVzcyBhbmQgaWdub3JlZC4KLQotICAgL0NPTU1BTkQKLSAgICAgICAgICBUaGUgImZpbGUi IHRvIGJlIHNlbnQgaXMgdGhlIHN0YW5kYXJkIG91dHB1dCBvZiBhIGNvbW1hbmQsCi0gICAgICAg ICAgcmF0aGVyIHRoYW4gYSByZWFsIGZpbGUuIEl0IGlzIHNlbnQgaW4gdGV4dCBvciBiaW5hcnkg bW9kZQotICAgICAgICAgIGFjY29yZGluZyB0byB0aGUgcHJldmFpbGluZyBGVFAgVFlQRSwgd2hp Y2ggY2FuIGJlIG92ZXJyaWRkZW4KLSAgICAgICAgICB3aXRoIGEgL1RFWFQgb3IgL0JJTkFSWSBz d2l0Y2guIEV4YW1wbGU6IEV4YW1wbGU6Ci0KLSAgZnRwIHB1dCAvY29tbWFuZCAvYXMtbmFtZTp7 dXNlcmxpc3R9IHtmaW5nZXIgfCBzb3J0IC1yfQotCi0gICAvTElTVEZJTEU6ZmlsZW5hbWUKLSAg ICAgICAgICBUZWxscyBLZXJtaXQgdG8gb2J0YWluIHRoZSBsaXN0IG9mIGZpbGVzIHRvIGJlIHNl bnQgZnJvbSB0aGUKLSAgICAgICAgICBmaWxlIHdob3NlIG5hbWUgaXMgZ2l2ZW4uIFRoaXMgZmls ZSBtdXN0IGNvbnRhaW4gb25lIGZpbGUKLSAgICAgICAgICBzcGVjaWZpY2F0aW9uICh3aGljaCBt YXkgYmUgd2lsZCkgcGVyIGxpbmUuIElmIHRoZSBsaXN0IGluY2x1ZGVzCi0gICAgICAgICAgZmls ZXMgZnJvbSBkaWZmZXJlbnQgZGlyZWN0b3JpZXMsIHN1Y2ggYXMgYSByZWN1cnNpdmUgbGlzdGlu ZyBvZgotICAgICAgICAgIGEgZGlyZWN0b3J5IHRyZWUsIHRoZSBwYXRocyBhcmUgcmVjcmVhdGVk IG9uIHRoZSBzZXJ2ZXIgKGlmCi0gICAgICAgICAgcG9zc2libGUpIGlmIHlvdSBpbmNsdWRlIHRo ZSAvUkVDVVJTSVZFIHN3aXRjaDsgb3RoZXJ3aXNlIGFsbAotICAgICAgICAgIHRoZSBmaWxlcyBh cmUgc2VudCB0byB0aGUgY3VycmVudCBkaXJlY3Rvcnkgb24gdGhlIHNlcnZlci4KLQotICAgTm93 IHRoZSBvdGhlciBzd2l0Y2hlczoKLQotICAgL0FTLU5BTUU6dGV4dAotICAgICAgICAgIElmIGEg c2luZ2xlIGZpbGUgaXMgYmVpbmcgc2VudCwgc2VuZCBpdCB3aXRoIHRoZSBnaXZlbiB0ZXh0IGFz Ci0gICAgICAgICAgaXRzIG5hbWUuIElmIG11bHRpcGxlIGZpbGVzIGFyZSBiZWluZyBzZW50LCB0 aGUgdGV4dCBtdXN0IGJlIGEKLSAgICAgICAgICB0ZW1wbGF0ZSB0aGF0IGluY2x1ZGVzIHZhcmlh YmxlcyBzdWNoIGFzIFx2KGZpbGVuYW1lKSwKLSAgICAgICAgICBcdihmaWxlbnVtYmVyKSwgXHYo bnRpbWUpLCB0byBhbGxvdyBkeW5hbWljIGNyZWF0aW9uIG9mIGVhY2gKLSAgICAgICAgICBuYW1l LiBUaGUgc2FtZSBhcHBsaWVzIHRvIHRoZSBhcy1uYW1lIGZpZWxkIG9mIHRoZSBGVFAgUFVUCi0g ICAgICAgICAgY29tbWFuZC4gSWYgdGhpcyBzd2l0Y2ggaXMgbm90IGluY2x1ZGVkIChhbmQgYW4g YXMtbmFtZSBpcyBub3QKLSAgICAgICAgICBpbmNsdWRlZCBhcyB0aGUgc2Vjb25kIGZpbGVuYW1l IHRvIFBVVCksIGVhY2ggZmlsZSBpcyBzZW50IHdpdGgKLSAgICAgICAgICBpdHMgb3duIG5hbWUu Ci0KLSAgIC9CSU5BUlkKLSAgIC9URVhUCi0gICAvVEVORVgKLSAgICAgICAgICBGb3JjZXMgdGhp cyB1cGxvYWQgdG8gdGFrZSBwbGFjZSBpbiB0aGUgZ2l2ZW4gbW9kZSwgcmVnYXJkbGVzcwotICAg ICAgICAgIG9mIHRoZSBjdXJyZW50IEZUUCBUWVBFIHNldHRpbmcsIGFuZCB3aXRob3V0IGF1dG9t YXRpYwotICAgICAgICAgIHRleHQvYmluYXJ5IHN3aXRjaGluZy4gL0FTQ0lJIGlzIGEgc3lub255 bSBmb3IgL1RFWFQuCi0KLSAgIC9GSUxURVI6Y29tbWFuZAotICAgICAgICAgIFNwZWNpZmllcyB0 aGF0IHRoZSBmaWxlKHMpIGlzL2FyZSB0byBiZSBwYXNzZWQgdGhyb3VnaCB0aGUgZ2l2ZW4KLSAg ICAgICAgICBjb21tYW5kIG9yIHBpcGVsaW5lIG9uIHRoZWlyIHdheSB0byB0aGUgc2VydmVyLiBF eGFtcGxlOgotCi0gIGZ0cCBwdXQgL2JpbmFyeSAvZmlsdGVyOntnemlwIC1jIFx2KGZpbGVuYW1l KX0gL2FzLW5hbWU6XHYoZmlsZW5hbWUpLmd6ICoKLQotICAgL1RSQU5TUEFSRU5UCi0gICAvTE9D QUwtQ0hBUkFDVEVSLVNFVDpuYW1lCi0gICAvU0VSVkVSLUNIQVJBQ1RFUi1TRVQ6bmFtZQotICAg ICAgICAgIENoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24gZm9yIHRleHQgZmlsZXMsIGV4cGxhaW5l ZCBpbgotICAgICAgICAgIFsyOTJdU2VjdGlvbiAzLjcuCi0KLSAgIC9FUlJPUi1BQ1RJT046e1BS T0NFRUQsUVVJVH0KLSAgICAgICAgICBPdmVycmlkZXMgdGhlIHByZXZhaWxpbmcgWzI5M11GVFAg RVJST1ItQUNUSU9OIGZvciB0aGUgZHVyYXRpb24KLSAgICAgICAgICBvZiB0aGlzIFBVVCBvciBN UFVUIGNvbW1hbmQgb25seS4KLQotICAgL1JFQ09WRVIKLSAgICAgICAgICBSZXN1bWUgYW4gaW50 ZXJydXB0ZWQgdHJhbnNmZXIgd2hlcmUgZnJvbSB0aGUgcG9pbnQgb2YKLSAgICAgICAgICBpbnRl cnJ1cHRpb24gKGV4cGxhaW5lZCBpbiBbMjk0XVNlY3Rpb24gMy41LjIpLiBTeW5vbnltOgotICAg ICAgICAgIC9SRVNUQVJULgotCi0gICAvREVMRVRFCi0gICAgICAgICAgVGVsbHMgS2VybWl0IHRv IGRlbGV0ZSBlYWNoIHNvdXJjZSBmaWxlIGltbWVkaWF0ZWx5IGFmdGVyLCBhbmQKLSAgICAgICAg ICBvbmx5IGlmLCBpdCBoYXMgYmVlbiB1cGxvYWRlZCBjb21wbGV0ZWx5IGFuZCBzdWNjZXNzZnVs bHkuIFRoaXMsCi0gICAgICAgICAgaW4gZWZmZWN0LCBtb3ZlcyB0aGUgZmlsZSBmcm9tIHRoZSBj bGllbnQgdG8gdGhlIHNlcnZlci4KLQotICAgL01PVkUtVE86ZGlyZWN0b3J5Ci0gICAgICAgICAg VGVsbHMgS2VybWl0IHRvIG1vdmUgZWFjaCBzb3VyY2UgZmlsZSB0byB0aGUgbmFtZWQgbG9jYWwK LSAgICAgICAgICBkaXJlY3RvcnkgYWZ0ZXIsIGFuZCBvbmx5IGlmLCBpdCBoYXMgYmVlbiB1cGxv YWRlZCBjb21wbGV0ZWx5Ci0gICAgICAgICAgYW5kIHN1Y2Nlc3NmdWxseS4KLQotICAgL1JFTkFN RS1UTzp0ZW1wbGF0ZQotICAgICAgICAgIFRlbGxzIEtlcm1pdCB0byByZW5hbWUgZWFjaCAobG9j YWwpIHNvdXJjZSBmaWxlIGFjY29yZGluZyB0byB0aGUKLSAgICAgICAgICBnaXZlbiB0ZW1wbGF0 ZSBhZnRlciwgYW5kIG9ubHkgaWYsIGl0IGhhcyBiZWVuIHVwbG9hZGVkCi0gICAgICAgICAgY29t cGxldGVseSBhbmQgc3VjY2Vzc2Z1bGx5LiBUaGUgdGVtcGxhdGUgd29ya3MgYXMgaW4gL0FTLU5B TUUuCi0KLSAgIC9TRVJWRVItUkVOQU1FLVRPOnRlbXBsYXRlCi0gICAgICAgICAgVGVsbHMgS2Vy bWl0IHRvIGFzayB0aGUgc2VydmVyIHRvIHJlbmFtZSBlYWNoIGZpbGUgYWNjb3JkaW5nIHRvCi0g ICAgICAgICAgdGhlIGdpdmVuIHRlbXBsYXRlIGFzIHNvb24gYXMsIGFuZCBvbmx5IGlmLCBpdCBo YXMgYmVlbiByZWNlaXZlZAotICAgICAgICAgIGNvbXBsZXRlbHkgYW5kIHN1Y2Nlc3NmdWxseS4g VGhlIHRlbXBsYXRlIHdvcmtzIGFzIGluIC9BUy1OQU1FLgotICAgICAgICAgIFJlcXVpcmVzIHdy aXRlIGFuZCByZW5hbWUgYWNjZXNzIG9uIHRoZSBzZXJ2ZXIsIHNvIGRvZXNuJ3QKLSAgICAgICAg ICB1c3VhbGx5IHdvcmsgd2l0aCAoZS5nLikgYW5vbnltb3VzIHVwbG9hZHMgdG8gcHVibGljIGlu Y29taW5nCi0gICAgICAgICAgYXJlYXMgd2hlcmUgdGhlIHBlcm1pc3Npb25zIGRvbid0IGFsbG93 IHJlbmFtaW5nLiBFeGFtcGxlczoKLQotICAgICAgICBmdHAgbXB1dCAvc2VydmVyLXJlbmFtZTpc dihmaWxlbmFtZSkub2sgKgotICAgICAgICAgICAgICAgIEFwcGVuZHMgIi5vayIgdG8gZWFjaCBm aWxlbmFtZSBvbiB0aGUgc2VydmVyIHdoZW4gaXQncwotICAgICAgICAgICAgICAgIGZpbmlzaGVk IHVwbG9hZGluZy4KLQotICAgICAgICBmdHAgbXB1dCAvYXMtbmFtZTpcdihmaWxlbmFtZSkudG1w IC9zZXJ2ZXItcmVuYW1lOlx2KGZpbGVuYW1lKSAqCi0gICAgICAgICAgICAgICAgVGhpcyBpcyB0 aGUgcmV2ZXJzZSBvZiB0aGUgcHJldmlvdXMgZXhhbXBsZTsgaXQgdXNlcyBhCi0gICAgICAgICAg ICAgICAgdGVtcG9yYXJ5IG5hbWUgd2hpbGUgdXBsb2FkaW5nIGlzIGluIHByb2dyZXNzIGFuZCBy ZXZlcnRzCi0gICAgICAgICAgICAgICAgdGhlIGZpbGUgdG8gaXRzIHJlYWwgbmFtZSB3aGVuIHVw bG9hZGluZyBpcyBjb21wbGV0ZS4KLQotICAgICAgICBmdHAgbXB1dCAvYXMtbmFtZTpcdihmaWxl bmFtZSkKLSAgICAgICAgICAgICAgICAvc2VydmVyLXJlbmFtZTouLi9maW5hbC9cdihmaWxlbmFt ZSkgKgotICAgICAgICAgICAgICAgIE1vdmVzIHRoZSBmaWxlIGZyb20gdGhlIHdvcmtpbmcgZGly ZWN0b3J5IHRvIGEgZmluYWwKLSAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgd2hlbiB0aGUgdXBs b2FkIGlzIGNvbXBsZXRlLCBidXQgaW4gdGhpcyBjYXNlCi0gICAgICAgICAgICAgICAgeW91IGhh dmUgdG8ga25vdyB0aGUgcGF0aG5hbWUgc3ludGF4IG9mIHRoZSBzZXJ2ZXIuIElmIHRoZQotICAg ICAgICAgICAgICAgIHJlbmFtZSBmYWlscywgdGhlIFtNXVBVVCBjb21tYW5kIGZhaWxzIGFjY29y ZGluZyB0byB0aGUKLSAgICAgICAgICAgICAgICBbMjk1XUZUUCBFUlJPUi1BQ1RJT04gc2VsZWN0 aW9uLgotCi0gICAvRklMRU5BTUVTOntBVVRPTUFUSUMsQ09OVkVSVEVELExJVEVSQUx9Ci0gICAg ICAgICAgT3ZlcnJpZGVzIHRoZSBbMjk2XUZUUCBGSUxFTkFNRVMgc2V0dGluZyBmb3IgdGhpcyB1 cGxvYWQgb25seS4KLQotICAgL1BFUk1JU1NJT05TOntPTixPRkZ9Ci0gICAgICAgICAgT3ZlcnJp ZGVzIHRoZSBbMjk3XUZUUCBQRVJNSVNTSU9OUyBzZXR0aW5nIGZvciB0aGlzIHVwbG9hZCBvbmx5 LgotCi0gICAvVU5JUVVFCi0gICAgICAgICAgVGVsbHMgS2VybWl0IHRvIHRlbGwgdGhlIHNlcnZl ciB0byBnaXZlIFsyOThddW5pcXVlIG5hbWVzIHRvCi0gICAgICAgICAgaW5jb21pbmcgZmlsZXMg dGhhdCB3b3VsZCBvdGhlcndpc2Ugb3ZlcndyaXRlIGV4aXN0aW5nIGZpbGVzCi0gICAgICAgICAg dGhhdCBoYXZlIHRoZSBzYW1lIG5hbWUuIFRoaXMgc3dpdGNoIGNvbmZsaWN0cyB3aXRoIC9VUERB VEUsCi0gICAgICAgICAgL1JFQ09WRVIsIC9QRVJNSVNTSU9OUywgYW5kIC9TRVJWRVItUkVOQU1F IHNpbmNlIHRoZSBjbGllbnQgaGFzCi0gICAgICAgICAgbm8gd2F5IG9mIGtub3dpbmcgdGhlIG5h bWUgYXNzaWduZWQgYnkgdGhlIHNlcnZlci4KLQotICAgL1FVSUVUCi0gICAgICAgICAgRG9uJ3Qg ZGlzcGxheSBmaWxlLXRyYW5zZmVyIHByb2dyZXNzIG9yIHN0YXRpc3RpY3MuCi0KLSAgIC9TSU1V TEFURQotICAgICAgICAgIFNob3dzIHdoaWNoIGZpbGVzIHdvdWxkIGJlIHNlbnQgd2l0aG91dCBh Y3R1YWxseSBzZW5kaW5nIHRoZW0uCi0gICAgICAgICAgVXNlZnVsIChmb3IgZXhhbXBsZSkgd2l0 aCAvVVBEQVRFIChuZXh0IHNlY3Rpb24pLiBUaGUgcmVzdWx0cwotICAgICAgICAgIGFyZSBzaG93 biBpbiB0aGUgZmlsZS10cmFuc2ZlciBkaXNwbGF5IChpZiBpdCBpcyBub3QgZGlzYWJsZWQpCi0g ICAgICAgICAgYW5kIGluIHRoZSB0cmFuc2FjdGlvbiBsb2cgKGlmIG9uZSBpcyBhY3RpdmUpLiBI aW50OiB1c2UgU0VUCi0gICAgICAgICAgVFJBTlNGRVIgRElTUExBWSBCUklFRi4KLQotMy41LjIu IFVwZGF0ZSBNb2RlCi0KLSAgIFdoZW4geW91IGluY2x1ZGUgdGhlIC9VUERBVEUgc3dpdGNoLCB0 aGlzIG1lYW5zIHRvIHNraXAgc2VuZGluZyBhbnkKLSAgIGZpbGUgdGhhdCBhbHJlYWR5IGV4aXN0 cyBvbiB0aGUgc2VydmVyIGlmIHRoZSBsb2NhbCBmaWxlJ3MgbW9kaWZpY2F0aW9uCi0gICBkYXRl L3RpbWUgaXMgbm90IGxhdGVyIHRoYW4gdGhhdCBvZiB0aGUgY29ycmVzcG9uZGluZyBmaWxlIG9u IHRoZQotICAgc2VydmVyLiBIZXJlIGlzIGEgdHlwaWNhbCBhcHBsaWNhdGlvbiBmb3IgdXBkYXRl IG1vZGU6IFN1cHBvc2UgdGhhdCBvbgotICAgQ29tcHV0ZXIgQSwgeW91IG1haW50YWluIGEgbGFy Z2Ugc2V0IG9mIGZpbGVzIChzYXksIGEgY29sbGVjdGlvbiBvZiBXZWIKLSAgIHBhZ2VzIGFuZCBn cmFwaGljcyBpbWFnZXMsIG9yIHRoZSBzb3VyY2UgZmlsZXMgZm9yIGEgc29mdHdhcmUKLSAgIGFw cGxpY2F0aW9uKSwgYW5kIHlvdSBuZWVkIHRvIGtlZXAgYSBwYXJhbGxlbCBjb3B5IG9uIGFub3Ro ZXIgQ29tcHV0ZXIsCi0gICBCLiBPZiBjb3Vyc2UgeW91IGNvdWxkIHVwbG9hZCB0aGUgZW50aXJl IGNvbGxlY3Rpb24gZXZlcnkgZGF5OgotCi0gIGNkIHNvdXJjZS1kaXJlY3RvcnkKLSAgZnRwIGNv bXB1dGVyYi54eXpjb3JwLmNvbQotICAoIGF1dGhlbnRpY2F0aW9uIGRldGFpbHMuLi4gKQotICBm dHAgY2QgdGFyZ2V0LWRpcmVjdG9yeQotICBmdHAgcHV0IFsgc3dpdGNoZXMgXSAqCi0KLSAgIEJ1 dCBpZiB0aGUgdG90YWwgc2l6ZSBpcyBsYXJnZSBvciB0aGUgbmV0d29yayBzbG93LCB0aGlzIHdv dWxkIGJlCi0gICB1bm5lY2Vzc2FyaWx5IHRpbWUtY29uc3VtaW5nLiBXb3JzZSwgaWYgb3RoZXIg dXNlcnMgb3Igc2l0ZXMgaGFkIHRvCi0gICB1cGRhdGUgd2hlbmV2ZXIgbmV3IGZpbGVzIGFwcGVh cmVkIGluIEIncyBkaXJlY3RvcnksIHRoaXMgd291bGQgY2F1c2UKLSAgIHRoZW0gdW5uZWNlc3Nh cnkgd29yay4gQnkgaW5jbHVkaW5nIHRoZSAvVVBEQVRFIHN3aXRjaDoKLQotICBmdHAgcHV0IC91 cGRhdGUgWyBvdGhlci1zd2l0Y2hlcyBdICoKLQotICAgb25seSB0aG9zZSBmaWxlcyB0aGF0IGNo YW5nZWQgc2luY2UgbGFzdCB0aW1lIGFyZSB1cGxvYWRlZC4gSGVyZSdzIGhvdwotICAgaXQgd29y a3MuIEZvciBlYWNoIGxvY2FsIGZpbGUgdGhhdCBpcyBzZWxlY3RlZCBmb3IgdXBsb2FkaW5nOgot Ci0gICAgICogVGhlIHJlbW90ZSBmaWxlbmFtZSBpcyBkZXRlcm1pbmVkIGluIHRoZSBub3JtYWwg d2F5LCBhY2NvcmRpbmcgdG8KLSAgICAgICB0aGUgWzI5OV1GVFAgRklMRU5BTUVTIHNldHRpbmcs IC9GSUxFTkFNRVMgc3dpdGNoLCBvciB0aGUgYXMtbmFtZSwKLSAgICAgICBpZiBhbnkuCi0gICAg ICogS2VybWl0IHNlbmRzIGFuIE1EVE0gKG1vZGlmaWNhdGlvbiB0aW1lKSBjb21tYW5kIGZvciB0 aGUKLSAgICAgICBjb3JyZXNwb25kaW5nIHJlbW90ZSBmaWxlbmFtZSB0byB0aGUgc2VydmVyLgot ICAgICAqIElmIHRoZSBzZXJ2ZXIgZG9lcyBub3QgdW5kZXJzdGFuZCB0aGUgTURUTSBjb21tYW5k LCB0aGUgZmlsZSBpcwotICAgICAgIHNlbnQuCi0gICAgICogSWYgdGhlIHNlcnZlciBjYW4ndCBm aW5kIGEgZmlsZSB3aXRoIHRoZSBnaXZlbiBuYW1lLCB0aGUgZmlsZSBpcwotICAgICAgIHNlbnQu Ci0gICAgICogSWYgdGhlIGxvY2FsIGZpbGUncyBtb2RpZmljYXRpb24gdGltZSBpcyBsYXRlciB0 aGFuIHRoYXQgb2YgdGhlCi0gICAgICAgcmVtb3RlIGZpbGUsIHRoZSBmaWxlIGlzIHNlbnQuCi0g ICAgICogT3RoZXJ3aXNlIC0tIHRoZSByZW1vdGUgZmlsZSBleGlzdHMgYnV0IGl0cyBtb2RpZmlj YXRpb24gdGltZSBpcwotICAgICAgIGVxdWFsIHRvIG9yIGVhcmxpZXIgdGhhbiB0aGF0IG9mIHRo ZSBsb2NhbCBmaWxlIC0tIHRoZSBmaWxlIGlzCi0gICAgICAgc2tpcHBlZC4KLQotICAgQWxsIHRp bWUgY29tcGFyaXNvbnMgdGFrZSBwbGFjZSBpbiBDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZQot ICAgKFVUQykoWzMwMF0xKSwgYWxzbyBrbm93biBhcyBHTVQgb3IgWnVsdSB0aW1lOiBUaW1lem9u ZSAwOyBzdGFuZGFyZAotICAgdGltZSwgd2l0aG91dCBkYXlsaWdodCBzYXZpbmdzLgotCi0gICAg IFdBUk5JTkc6IFNvbWUgRlRQIHNlcnZlcnMsIHN1Y2ggYXMgTm92ZWxsIE5XRlRQRC5OTE0sIGln bm9yZSBvcgotICAgICBtaXNpbXBsZW1lbnQgdGhlIEZUUCBzcGVjaWZpY2F0aW9uIGFuZCBzZW5k IGxvY2FsIHRpbWUgcmF0aGVyIHRoYW4KLSAgICAgVVRDLgotCi0gICBVcGRhdGUgbW9kZSBpcyB1 c2VmdWwgb25seSB3aGVuIGFsd2F5cyB1c2VkIGluIHRoZSBzYW1lIGRpcmVjdGlvbi4gV2hlbgot ICAgeW91IHVwbG9hZCAoUFVUKSBhIGZpbGUgd2l0aCBGVFAsIHRoZSBkZXN0aW5hdGlvbiBmaWxl IHJlY2VpdmVzIHRoZQotICAgY3VycmVudCB0aW1lc3RhbXAgb24gdGhlIHNlcnZlcidzIGNvbXB1 dGVyLCBub3QgdGhlIG9yaWdpbmFsIGZpbGUncwotICAgdGltZXN0YW1wIChbMzAxXTIpLiBJZiB5 b3UgdHJ5IHRvIEZUUCBQVVQgL1VQREFURSB0aGUgc2FtZSBmaWxlIGFnYWluLAotICAgaXQgd2ls bCBiZSBza2lwcGVkIChhcyBleHBlY3RlZCkgc2luY2UgdGhlIHJlbW90ZSBjb3B5IGlzIG5ld2Vy LgotICAgSG93ZXZlciwgaWYgeW91IHRyeSB0byBGVFAgR0VUIC9VUERBVEUgdGhlIHNhbWUgZmls ZSAoWzMwMl1TZWN0aW9uCi0gICAzLjYpLCBpdCB3aWxsIGJlIHRyYW5zZmVycmVkIGZvciB0aGUg c2FtZSByZWFzb24uCi0KLSAgIFRvIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgb2YgUFVUIC9VUERB VEUgb24gYSBwYXJ0aWN1bGFyIGNvbm5lY3Rpb24sCi0gICBpc3N1ZSBhbiBGVFAgTU9EVElNRSBj b21tYW5kIGZvciBhIGZpbGUgdGhhdCBpcyBrbm93biB0byBleGlzdCBvbiB0aGUKLSAgIHNlcnZl ci4gSWYgaXQgc3VjY2VlZHMsIFBVVCAvVVBEQVRFIHNob3VsZCB3b3JrIGFuZCBpbiB0aGF0IGNh c2UsIHlvdQotICAgY2FuIHJ1biBhIHByb2NlZHVyZSBsaWtlIHRoZSBvbmUgYWJvdmUgZXZlcnkg ZGF5OiB0aGUgZmlyc3QgdGltZSwgaXQKLSAgIHNlbmRzIGFsbCB0aGUgZmlsZXM7IGFmdGVyIHRo YXQsIGl0IHNlbmRzIG9ubHkgdGhlIG9uZXMgdGhhdCBjaGFuZ2VkLgotICAgSWYgYSB0cmFuc2Fj dGlvbiBsb2cgaXMgYWN0aXZlLCBhIG5vdGF0aW9uIGlzIGluY2x1ZGVkIGZvciBhbnkgZmlsZXMK LSAgIHRoYXQgYXJlIHNraXBwZWQuCi0KLSAgIE5vdGVzOgotICAgIDEuIFdoeSBpcyBDb29yZGlu YXRlZCBVbml2ZXJzYWwgVGltZSBhYmJyZXZpYXRlZCBVVEM/IEZyb20gdGhlCi0gICAgICAgWzMw M11OYXRpb25hbCBJbnN0aXR1dGUgb2YgU3RhbmRhcmRzIGFuZCBUZWNobm9sb2d5IEZBUTogIklu IDE5NzAKLSAgICAgICB0aGUgQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUgc3lzdGVtIHdhcyBk ZXZpc2VkIGJ5IGFuCi0gICAgICAgaW50ZXJuYXRpb25hbCBhZHZpc29yeSBncm91cCBvZiB0ZWNo bmljYWwgZXhwZXJ0cyB3aXRoaW4gdGhlCi0gICAgICAgSW50ZXJuYXRpb25hbCBUZWxlY29tbXVu aWNhdGlvbiBVbmlvbiAoSVRVKS4gVGhlIElUVSBmZWx0IGl0IHdhcwotICAgICAgIGJlc3QgdG8g ZGVzaWduYXRlIGEgc2luZ2xlIGFiYnJldmlhdGlvbiBmb3IgdXNlIGluIGFsbCBsYW5ndWFnZXMg aW4KLSAgICAgICBvcmRlciB0byBtaW5pbWl6ZSBjb25mdXNpb24uIFNpbmNlIHVuYW5pbW91cyBh Z3JlZW1lbnQgY291bGQgbm90IGJlCi0gICAgICAgYWNoaWV2ZWQgb24gdXNpbmcgZWl0aGVyIHRo ZSBFbmdsaXNoIHdvcmQgb3JkZXIsIENVVCwgb3IgdGhlIEZyZW5jaAotICAgICAgIHdvcmQgb3Jk ZXIsIFRVQywgdGhlIGFjcm9ueW0gVVRDIHdhcyBjaG9zZW4gYXMgYSBjb21wcm9taXNlLiIKLSAg ICAyLiBUaGUgS2VybWl0IEZUUCBjbGllbnQgaXMgdW51c3VhbCBpbiB0aGF0LCB3aGVuIGRvd25s b2FkaW5nIG9ubHksIGl0Ci0gICAgICAgY2FuIHNldCB0aGUgcmVjZWl2ZWQgZmlsZSdzIGRhdGUg ZnJvbSB0aGUgZmlsZSdzIGRhdGUgb24gdGhlCi0gICAgICAgc2VydmVyLCBidXQgdGhpcyBzaG91 bGQgbm90IGFmZmVjdCB0aGUgdXBkYXRlIGZlYXR1cmUuIFdoZW4KLSAgICAgICB1cGxvYWRpbmcg dG8gYW4gRlRQIHNlcnZlciwgaG93ZXZlciwgdGhlcmUgaXMgbm8gbWVjaGFuaXNtIGZvciB0aGUK LSAgICAgICBjbGllbnQgdG8gc2V0IHRoZSBkYXRlIG9mIHRoZSB1cGxvYWRlZCBmaWxlIG9uIHRo ZSBzZXJ2ZXIuCi0KLTMuNS4zIFJlY292ZXJ5Ci0KLSAgIFN1cHBvc2UgdGhhdCB3aGlsZSB5b3Ug YXJlIHVwbG9hZGluZyBhIGxhcmdlIGZpbGUgb3ZlciBhIHNsb3cKLSAgIGNvbm5lY3Rpb24sIHRo ZSBjb25uZWN0aW9uIGlzIGxvc3QgYmVmb3JlIHRoZSBlbnRpcmUgZmlsZSBpcwotICAgdHJhbnNm ZXJyZWQuIFdpdGggbW9zdCBGVFAgY2xpZW50cywgeW91IHdvdWxkIGhhdmUgdG8gc3RhcnQgb3Zl ciwgdGh1cwotICAgcmVzZW5kaW5nIHRoZSBwb3J0aW9uIG9mIHRoZSBmaWxlIHRoYXQgd2FzIHNl bnQgYWxyZWFkeSwgYW5kIHRoYXQgaXMKLSAgIGFscmVhZHkgb24gdGhlIHNlcnZlci4gQnV0IEtl cm1pdCdzIC9SRUNPVkVSIHN3aXRjaCAoU3lub255bTogL1JFU1RBUlQpCi0gICBsZXRzIHlvdSBj b250aW51ZSBhbiBpbnRlcnJ1cHRlZCB0cmFuc2ZlciBmcm9tIHRoZSBwb2ludCBvZiBmYWlsdXJl LAotICAgdGh1cyB0cmFuc2ZlcnJpbmcgb25seSB0aGUgcGFydCB0aGF0IHdhc24ndCBzZW50IGFs cmVhZHkuIFRoZQotICAgcHJlcmVxdWlzaXRlcyBmb3IgcmVjb3ZlcnkgYXJlOgotCi0gICAgICog VGhlIHRyYW5zZmVyIG11c3QgYmUgaW4gQklOQVJZIG1vZGUsIG9yIGVsc2UgdGhlIGNsaWVudCBh bmQgc2VydmVyCi0gICAgICAgbXVzdCByZXNpZGUgb24gbGlrZSBzeXN0ZW1zIChlLmcuIGJvdGgg b24gc29tZSBmb3JtIG9mIFVOSVgpLgotICAgICAqIFRoZSBGVFAgc2VydmVyIG11c3Qgc3VwcG9y dCB0aGUgU0laRSBjb21tYW5kLgotCi0gICBIZXJlJ3MgaG93IGl0IHdvcmtzLiBXaGVuIHlvdSBp bmNsdWRlIHRoZSAvUkVDT1ZFUiBzd2l0Y2g6Ci0KLSAgICAgKiBLZXJtaXQgY2hlY2tzIGZvciBj b25mbGljdGluZyBzd2l0Y2hlcywgc3VjaCBhcyAvVVBEQVRFIGFuZAotICAgICAgIC9VTklRVUU7 IGlmIC9SRUNPVkVSIGlzIGdpdmVuIHdpdGggdGhlc2Ugc3dpdGNoZXMgYW4gZXJyb3Igb2NjdXJz LgotICAgICAgIElmIC9SRUNPVkVSIGlzIGdpdmVuIGluIG90aGVyIGNpcmN1bXN0YW5jZXMgd2hl cmUgaXQgY291bGQgc2VydmUgbm8KLSAgICAgICB1c2VmdWwgcHVycG9zZSAoZS5nLiB3aXRoIGFy cmF5cywgcGlwZXMsIG9yIGZpbHRlcnMpLCBpdCBpcwotICAgICAgIGlnbm9yZWQuCi0KLSAgIElm IHRoZSBzd2l0Y2ggaXMgYWNjZXB0ZWQsIHRoZW4gZm9yIGVhY2ggc2VsZWN0ZWQgZmlsZToKLQot ICAgICAqIElmIGl0IGlzIG5vdCBiaW5hcnkgKGRldGVybWluZWQgYnkgc2Nhbm5pbmcpIGFuZCB0 aGUgY2xpZW50IGFuZAotICAgICAgIHNlcnZlciBhcmUgbm90IG9uIGxpa2UgcGxhdGZvcm1zLCBy ZWNvdmVyeSBpcyBjYW5jZWxlZCAodGhlIGVudGlyZQotICAgICAgIGZpbGUgaXMgc2VudCkuIE90 aGVyd2lzZToKLSAgICAgKiBBIFNJWkUgY29tbWFuZCBpcyBzZW50IGZvciB0aGUgZmlsZSAodXNp bmcgaXRzIHJlbW90ZSBuYW1lKS4gSWYgdGhlCi0gICAgICAgcmVwbHkgaW5kaWNhdGVzIHRoZSBm aWxlIHdhcyBub3QgZm91bmQsIG9yIHRoZSBTSVpFIGNvbW1hbmQgd2FzIG5vdAotICAgICAgIHVu ZGVyc3Rvb2QsIG9yIGFueSBvdGhlciBraW5kIG9mIGVycm9yLCByZWNvdmVyeSBpcyBjYW5jZWxl ZC4KLSAgICAgICBPdGhlcndpc2U6Ci0gICAgICogQSBNRFRNIChtb2RpZmljYXRpb24gdGltZSkg Y29tbWFuZCBpcyBzZW50IGZvciB0aGUgZmlsZS4gSWYgYSB2YWxpZAotICAgICAgIHJlcGx5IGlz IHJlY2VpdmVkLCBhbmQgdGhlIG1vZGlmaWNhdGlvbiB0aW1lIG9mIHRoZSBsb2NhbCBmaWxlIGlz Ci0gICAgICAgbGF0ZXIgdGhhbiB0aGF0IG9mIHRoZSByZW1vdGUgZmlsZSwgcmVjb3ZlcnkgaXMg Y2FuY2VsZWQuCi0gICAgICAgT3RoZXJ3aXNlOgotICAgICAqIElmIHRoZSBzaXplcyBvZiB0aGUg dHdvIGZpbGVzIGFyZSBpZGVudGljYWwsIHRoZSBmaWxlIGlzIG5vdCBzZW50LgotICAgICAgIE90 aGVyd2lzZToKLSAgICAgKiBLZXJtaXQgc2Vla3MgdG8gdGhlIHJlY292ZXJ5IHNwb3QgaW4gdGhl IGxvY2FsIGZpbGUsIHRlbGxzIHRoZQotICAgICAgIHNlcnZlciB0byBBUFBFTkQgdGhlIGRhdGEg d2hpY2ggaXMgYWJvdXQgdG8gYXJyaXZlIHRvIHRoZSByZW1vdGUKLSAgICAgICBmaWxlLCBhbmQg dGhlbiBzZW5kcyB0aGUgZGF0YSBzdGFydGluZyBhdCB0aGUgcmVjb3ZlcnkgcG9pbnQuCi0KLSAg IFRvIHNhZmVndWFyZCBmaWxlIGludGVncml0eSwgcmVjb3ZlcnkgaXMgbm90IGF0dGVtcHRlZCB1 bmxlc3MgYWxsIHRoZQotICAgcHJlY29uZGl0aW9ucyBhcmUgbWV0LiBGb3IgdGhlIHdpZGVzdCBw b3NzaWJsZSB1c2VmdWxuZXNzLCBBUFBFTkQgaXMKLSAgIHVzZWQgcmF0aGVyIHRoYW4gUkVTVEFS VC4gRm9yIHN0cmVhbSB0cmFuc2ZlcnMgKHRoZSBvbmx5IGtpbmQgdGhhdAotICAgS2VybWl0IHN1 cHBvcnRzKSB0aGUgcmVzdWx0cyBhcmUgdGhlIHNhbWUuCi0KLSAgIEJ5IGRlc2lnbiwgdGhlIC9S RUNPVkVSIHN3aXRjaCBjYW4gYmUgaW5jbHVkZWQgd2l0aCBhbnkgRlRQIFBVVCBvciBNUFVUCi0g ICBjb21tYW5kLCBldmVuIGlmIGl0IHNwZWNpZmllcyBhIGdyb3VwIG9mIGZpbGVzLiBUaGlzIGFs bG93cyB5b3UgdG8KLSAgIHJlc3VtZSBhbiBpbnRlcnJ1cHRlZCBiYXRjaCB0cmFuc2ZlciBmcm9t IHdoZXJlIGl0IGxlZnQgb2ZmLiBUaGUgZmlsZXMKLSAgIHRoYXQgd2VyZSBhbHJlYWR5IGNvbXBs ZXRlbHkgc2VudCBhcmUgc2tpcHBlZCwgdGhlIGZpbGUgdGhhdCB3YXMKLSAgIGludGVycnVwdGVk IGlzIHJlY292ZXJlZCwgYW5kIHRoZSByZW1haW5pbmcgZmlsZXMgYXJlIHVwbG9hZGVkLgotCi0g ICBCeSB0aGUgd2F5LCBpdCBkb2Vzbid0IG1hdHRlciBob3cgdGhlIG9yaWdpbmFsIHBhcnRpYWwg ZmlsZSB3YXMKLSAgIHVwbG9hZGVkIC0tIEZUUCwgS2VybWl0LCBabW9kZW0sIGV0YzogYXMgbG9u ZyBhcyB0aGUgcHJlY29uZGl0aW9ucyBhcmUKLSAgIG1ldCwgaXQgY2FuIGJlIHJlY292ZXJlZCB3 aXRoIEZUUCBQVVQgL1JFQ09WRVIsIG9yIGZvciB0aGF0IG1hdHRlciBhbHNvCi0gICB1c2luZyBL ZXJtaXQgcHJvdG9jb2wgYW5kIFNFTkQgL1JFQ09WRVIuCi0KLSAgIEEgd29yZCBvZiBjYXV0aW9u LCBob3dldmVyLCB3aGVuIHRoZSBvcmlnaW5hbCB1cGxvYWQgd2FzIGluIHRleHQgbW9kZQotICAg d2l0aCBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uIChbMzA0XVNlY3Rpb24gMy43KToKLQotICAg ICAqIElmIHRoZSBvcmlnaW5hbCB1cGxvYWQgaW52b2x2ZWQgYSB0cmFuc2xhdGlvbiBmcm9tIG9u ZSBzaW5nbGUtYnl0ZQotICAgICAgIGNoYXJhY3RlciBzZXQgdG8gYW5vdGhlciAoZS5nLiBDb2Rl IFBhZ2UgODUwIHRvIExhdGluLTEpLCByZWNvdmVyeQotICAgICAgIGlzIHNhZmUgaWYgeW91IHNw ZWNpZnkgdGhlIHNhbWUgdHJhbnNsYXRpb25zIGZvciB0aGUgcmVjb3ZlcnkuIElmCi0gICAgICAg eW91IGRvbid0LCB0aGUgcmVzdWx0aW5nIGZpbGUgd2lsbCBjb250YWluIGEgbWl4dHVyZSBvZiBj aGFyYWN0ZXIKLSAgICAgICBzZXRzLgotICAgICAqIElmIHRoZSBvcmlnaW5hbCB1cGxvYWQgaW52 b2x2ZWQgYSB0cmFuc2xhdGlvbiB0aGF0IGNoYW5nZWQgdGhlIHNpemUKLSAgICAgICBvZiB0aGUg ZmlsZSAoZS5nLiBmcm9tIGFuIGFscGhhYmV0aWMgQ29kZSBQYWdlIG9yIExhdGluIEFscGhhYmV0 IHRvCi0gICAgICAgVW5pY29kZSwgb3IgdmljZSB2ZXJzYSksIHJlY292ZXJ5IGlzIE5PVCBzYWZl LCBldmVuIGlmIHlvdSBzcGVjaWZ5Ci0gICAgICAgdGhlIHNhbWUgdHJhbnNsYXRpb25zLgotCi0g ICBLZXJtaXQgaGFzIG5vIHdheSBvZiBrbm93aW5nIGFueXRoaW5nIGFib3V0IHRoZSBwcmV2aW91 cyB1cGxvYWQuIEFzIGEKLSAgIHNhZmVndWFyZCwgYW4gZXJyb3Igb2NjdXJzIGlmIHlvdSBpbmNs dWRlIC9SRUNPVkVSIGFuZCBhbHNvIHNwZWNpZnkgYQotICAgY2hhcmFjdGVyLXNldCBvZiBVQ1My IG9yIFVURjgsIHNpbmNlIHJlY292ZXJ5IGNhbid0IHBvc3NpYmx5IHdvcmsgaW4KLSAgIHRoYXQg c2l0dWF0aW9uLiBPdGhlcndpc2UsIGl0J3MgdXAgdG8geW91IHRvIGF2b2lkIHVuc2FmZSByZWNv dmVyeQotICAgb3BlcmF0aW9ucy4KLQotICAgWyBbMzA1XVRvcCBdIFsgWzMwNl1GVFAgVG9wIF0g WyBbMzA3XUMtS2VybWl0IEhvbWUgXSBbIFszMDhdS2VybWl0IEhvbWUKLSAgIF0KLQotMy42LiBE b3dubG9hZGluZyBGaWxlcyBXaXRoIEZUUAotCi0gICBBbHRob3VnaCB1cGxvYWRpbmcgZmlsZXMg d2l0aCBLZXJtaXQncyBGVFAgY2xpZW50IGlzIGp1c3QgYXMgZWFzeSBhbmQKLSAgIGZsZXhpYmxl IGFzIHNlbmRpbmcgZmlsZXMgd2l0aCBLZXJtaXQgcHJvdG9jb2wsIHRoZSBzYW1lIGlzIG5vdCBh bHdheXMKLSAgIHRydWUgZm9yIGRvd25sb2FkaW5nIGJlY2F1c2UgRlRQIHNlcnZlcnMgbGFjayBz b21lIG9mIHRoZSBjYXBhYmlsaXRpZXMKLSAgIG9mIGEgS2VybWl0IHNlcnZlcjoKLQotICAgICAq IElmIHlvdSB3YW50IHRvIGdldCBtb3JlIHRoYW4gb25lIGZpbGUsIHlvdSBoYXZlIHRvIHVzZSBN R0VULCBub3QKLSAgICAgICBHRVQsIHNpbmNlIHRoZSB1bmRlcmx5aW5nIEZUUCBwcm90b2NvbCBp cyBkaWZmZXJlbnQgaW4gdGhlIHR3bwotICAgICAgIGNhc2VzLiBLZXJtaXQgY2FuJ3QgImF1dG9k ZXRlY3QiIHdoaWNoIG9uZSB5b3UgbWVhbiwgYXMgaXQgY2FuIHdpdGgKLSAgICAgICBQVVQgYW5k IE1QVVQsIHNpbmNlIGl0IGNhbid0IGJlIGV4cGVjdGVkIHRvIGtub3cgdGhlIHdpbGRjYXJkCi0g ICAgICAgc3ludGF4IG9mIHRoZSByZW1vdGUgcGxhdGZvcm0gYW5kL29yIEZUUCBzZXJ2ZXIgKHRo ZSBzYW1lIGlzIHRydWUKLSAgICAgICBmb3IgYWxsIG90aGVyIEZUUCBjbGllbnRzKS4gVG8gY29t cGxpY2F0ZSBtYXR0ZXJzLCBGVFAgcHJvdG9jb2wgbm93Ci0gICAgICAgaW5jbHVkZXMgdHdvIHVu ZGVybHlpbmcgbWVjaGFuaXNtcyAoTkxTVCBhbmQgTUxTRCkgZm9yCi0gICAgICAgYWNjb21wbGlz aGluZyBNR0VUIG9wZXJhdGlvbnMgYW5kLCBhcyBleHBsYWluZWQgaW4gWzMwOV1TZWN0aW9uCi0g ICAgICAgMy4xMSwgdGhlIHR3byBiZWhhdmUgZGlmZmVyZW50bHkuCi0gICAgICogQXV0b21hdGlj IHRleHQtYmluYXJ5IG1vZGUgc3dpdGNoaW5nIGlzIG5vdCBkb25lIGJ5IHRoZSBzZXJ2ZXIuIEl0 Ci0gICAgICAgY2FuIGJlIGRvbmUgYnkgdGhlIGNsaWVudCAoS2VybWl0KSwgYnV0IGluIHRoaXMg Y2FzZSBpdCBpcyBub3QKLSAgICAgICBiYXNlZCBvbiBhIGZpbGUgc2NhbiAoc2luY2UgdGhlcmUg aXMgbm8gd2F5IGZvciBLZXJtaXQgcHJlc2NhbiBhCi0gICAgICAgc2VydmVyIGZpbGUpLCBidXQg cmF0aGVyIG9uIHRoZSBmaWxlbmFtZSwgdXNpbmcgQy1LZXJtaXQgNy4wCi0gICAgICAgWzMxMF1m aWxlbmFtZSBwYXR0ZXJucy4KLSAgICAgKiBTb21lIG9wdGlvbnMgdGhhdCBhcmUgYXZhaWxhYmxl IHdpdGggRlRQIFBVVCBjYW4gbm90IGJlIHVzZWQgd2l0aAotICAgICAgIEZUUCBbTV1HRVQgb3Ig ZG9uJ3Qgd29yayB0aGUgc2FtZSB3YXk6Ci0gICAgICAgICAvUEVSTUlTU0lPTlMgKEZUUCBwcm90 b2NvbCBoYXMgbm8gbWVjaGFuaXNtIGZvciB0aGlzKS4KLSAgICAgICAgIC9bTk9ULV1CRUZPUkUs IC9bTk9ULV1BRlRFUiAoYmVjYXVzZSBvZiB0aGUgdGltZXpvbmUgcHJvYmxlbSkuCi0gICAgICAg ICAvUkVDT1ZFUiB3b3JrcyBvbmx5IGluIGJpbmFyeSBtb2RlLiAgIC9SRUNVUlNJVkUgaGFzIGxp bWl0ZWQKLSAgICAgICB1dGlsaXR5LgotCi0gICBUaGUgY29tbWFuZHMgZm9yIGRvd25sb2FkaW5n IGFyZToKLQotICAgU0VUIEZJTEUgRE9XTkxPQUQtRElSRUNUT1JZIFsgZGlyZWN0b3J5IF0KLSAg ICAgICAgICBBcyB3aXRoIEtlcm1pdCB0cmFuc2ZlcnMsIHRoaXMgY29tbWFuZCwgaWYgZ2l2ZW4s IHRlbGxzIEMtS2VybWl0Ci0gICAgICAgICAgd2hlcmUgdG8gc3RvcmUgaW5jb21pbmcgZmlsZXMg aW4gdGhlIGFic2VuY2Ugb2YgYSBzcGVjaWZpYwotICAgICAgICAgIGFzLW5hbWUuIElmIG5vdCBn aXZlbiwgaW5jb21pbmcgZmlsZXMgYXJlIHN0b3JlZCBhcyBpbmRpY2F0ZWQgYnkKLSAgICAgICAg ICB0aGUgYXMtbmFtZSwgaWYgYW55LCBvdGhlcndpc2UgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5 LCBqdXN0IGFzCi0gICAgICAgICAgd2l0aCBLZXJtaXQgdHJhbnNmZXJzLiBUaGUgbW9yZSB2ZXJi b3NlIHRyYW5zZmVyIGRpc3BsYXkgZm9ybWF0cwotICAgICAgICAgIGdpdmUgdGhlIGZ1bGwgcGF0 aG5hbWUgb2YgZWFjaCByZWNlaXZlZCBmaWxlLCBhbmQsIGluIGNhc2UgeW91Ci0gICAgICAgICAg aGF2ZSB0cm91YmxlIGZpbmRpbmcgYSBkb3dubG9hZGVkIGZpbGUgYWZ0ZXJ3YXJkcywgaXRzIGZ1 bGwgcGF0aAotICAgICAgICAgIGlzIGFsc28gbGlzdGVkIGluIHRoZSB0cmFuc2FjdGlvbiBsb2cg KGlmIHlvdSBrZXB0IG9uZSksIGFuZCB5b3UKLSAgICAgICAgICBjYW4gYWxzbyBhc2sgS2VybWl0 IHdoZXJlIGl0IHdlbnQgd2l0aCB0aGUgWzMxMV1XSEVSRSBjb21tYW5kLgotCi0gICBTRVQgRlRQ IEdFVC1GSUxFVFlQRS1TV0lUQ0hJTkcgeyBPTiwgT0ZGIH0KLSAgICAgICAgICBPTiBieSBkZWZh dWx0LCBjYXVzaW5nIEtlcm1pdCB0byBzd2l0Y2ggYXV0b21hdGljYWxseSBpbnRvIHRleHQKLSAg ICAgICAgICBvciBiaW5hcnkgbW9kZSBmb3IgZWFjaCBmaWxlIGJhc2VkIG9uIHdoZXRoZXIgaXRz IG5hbWUgbWF0Y2hlcyBhCi0gICAgICAgICAgdGV4dCBwYXR0ZXJuIG9yIGJpbmFyeSBwYXR0ZXJu LiBTZXQgdGhpcyBPRkYsIG9yIHVzZSBhIC9URVhULAotICAgICAgICAgIC9CSU5BUlksIG9yIC9U RU5FWCBzd2l0Y2ggdG8gZGVmZWF0IHRoaXMgZmVhdHVyZS4gVXNlIFNIT1cKLSAgICAgICAgICBQ QVRURVJOUyB0byBzZWUgdGhlIGN1cnJlbnQgcGF0dGVybiBsaXN0LgotCi0gICBbIEZUUCBdIEdF VCBbIHN3aXRjaGVzIF0gZmlsZW5hbWUgWyBhcy1uYW1lIF0KLSAgICAgICAgICBBc2tzIHRoZSBz ZXJ2ZXIgdG8gc2VuZCB0aGUgZ2l2ZW4gZmlsZSwgYW5kIGlmIGl0IGNvbWVzLCBzdG9yZXMKLSAg ICAgICAgICBpdCBsb2NhbGx5IHVuZGVyIHRoZSBnaXZlbiBhcy1uYW1lLCBpZiBhbnksIG90aGVy d2lzZSB1bmRlciBpdHMKLSAgICAgICAgICBvcmlnaW5hbCBuYW1lIChtb2RpZmllZCBhY2NvcmRp bmcgdG8gdGhlIHNlbGVjdGVkIGZpbGVuYW1lCi0gICAgICAgICAgY29udmVyc2lvbiBvcHRpb24p LCBpbiB5b3VyIGRvd25sb2FkIGRpcmVjdG9yeSwgaWYgeW91IGhhdmUKLSAgICAgICAgICBzcGVj aWZpZWQgb25lLCBvdGhlcndpc2UgaW4gdGhlIGRpcmVjdG9yeSBpbmRpY2F0ZWQgaW4gdGhlCi0g ICAgICAgICAgYXMtbmFtZSwgaWYgYW55LCBvdGhlcndpc2UgaW4geW91ciBjdXJyZW50IGRpcmVj dG9yeS4gSWYgeW91Ci0gICAgICAgICAgYWNjaWRlbnRhbGx5IHVzZSBhIHdpbGRjYXJkIGluIHRo ZSBmaWxlbmFtZSAoImdldCAqLnR4dCIpIHRoZQotICAgICAgICAgIHNlcnZlciB3aWxsIHJlcGx5 IHdpdGggYSBtZXNzYWdlIGxpa2UgIkZpbGUgbm90IGZvdW5kIiAodW5sZXNzCi0gICAgICAgICAg dGhlcmUgaXMgYSBmaWxlIHdob3NlIG5hbWUgYWN0dWFsbHkgaXMgIioudHh0IikuIElmIEZUUAot ICAgICAgICAgIEdFVC1GSUxFVFlQRS1TV0lUQ0hJTkcgaXMgT04sIGFuZCBpbiB0aGUgYWJzZW5j ZSBvZiBhbnkgR0VUCi0gICAgICAgICAgc3dpdGNoZXMgdG8gb3ZlcnJpZGUgaXQsIHRoZSBmaWxl IGlzIHRyYW5zZmVycmVkIGluIGJpbmFyeSBtb2RlCi0gICAgICAgICAgaWYgaXQgbWF0Y2hlcyBh bnkgb2YgS2VybWl0J3MgYmluYXJ5IG5hbWUgcGF0dGVybnMsIGFuZCBpbiB0ZXh0Ci0gICAgICAg ICAgbW9kZSBpZiBpdCBtYXRjaGVzIGFueSBvZiBLZXJtaXQncyB0ZXh0IG5hbWUgcGF0dGVybnMs IGFuZCBpbgotICAgICAgICAgIHRoZSBwcmV2YWlsaW5nIEZUUCBUWVBFIGlmIGl0IG1hdGNoZXMg bm9uZSBvZiB0aGVzZSBwYXR0ZXJucy4KLQotICAgWyBGVFAgXSBNR0VUIFsgc3dpdGNoZXMgXSBm aWxlc3BlYyBbIGZpbGVzcGVjIFsgZmlsZXNwZWMgWyAuLi4gXSBdIF0KLSAgICAgICAgICBMaWtl IEdFVCwgYnV0IGZvciBtdWx0aXBsZSBmaWxlcy4gT25lIG9yIG1vcmUgZmlsZQotICAgICAgICAg IHNwZWNpZmljYXRpb25zIGNhbiBiZSBnaXZlbiwgYW5kIGFueSBvciBhbGwgKG9yIG5vbmUpIG9m IHRoZW0KLSAgICAgICAgICBjYW4gY29udGFpbiB3aWxkY2FyZHMgb3IgY2FuIGJlIGRpcmVjdG9y eSBuYW1lcy4gVGhlIGZpbGUgbGlzdAotICAgICAgICAgIG1heSBub3QgaW5jbHVkZSBhbiBhcy1u YW1lLCBidXQgeW91IGNhbiBzdGlsbCBnaXZlIG9uZSB3aXRoIHRoZQotICAgICAgICAgIC9BUy1O QU1FOiBzd2l0Y2guCi0KLSAgIEluIGJvdGggdGhlIEZUUCBHRVQgYW5kIE1HRVQgY29tbWFuZHMs IGFueSBmaWxlbmFtZXMgdGhhdCBjb250YWluCi0gICBzcGFjZXMgbXVzdCBiZSBlbmNsb3NlZCBp biBicmFjZXMgb3IgZG91YmxlcXVvdGVzIChzZWUgWzMxMl1TZWN0aW9uIDUKLSAgIGZvciBkZXRh aWxzKS4KLQotICAgRlRQIGRvd25sb2FkcyBtYXkgYmUgaW50ZXJydXB0ZWQganVzdCBsaWtlIEtl cm1pdCB0cmFuc2ZlcnMuIFdoaWxlIHRoZQotICAgdHJhbnNmZXIgaXMgaW4gcHJvZ3Jlc3MsIHR5 cGU6Ci0KLSAgICAgKiBYIHRvIGludGVycnVwdCB0aGUgY3VycmVudCBmaWxlIGFuZCBnbyBvbiB0 byB0aGUgbmV4dCBmaWxlLgotICAgICAqIFogKG9yIENvbnRyb2wtQykgdG8gY2FuY2VsIHRoZSBj dXJyZW50IGZpbGUgYW5kIGFsbCByZW1haW5pbmcKLSAgICAgICBmaWxlcy4KLQotICAgQmVmb3Jl IHByb2NlZWRpbmcsIGEgYnJpZWYgd29yZCBhYm91dCB0ZW1wb3JhcnkgZmlsZXMuIEluIEZUUCBw cm90b2NvbCwKLSAgIHRoZSBNR0VUIGNvbW1hbmQgd29ya3MgYnkgcmVxdWVzdGluZyBhIGZpbGUg bGlzdCBmcm9tIHRoZSBzZXJ2ZXIsIGFuZAotICAgdGhlbiAoaW50ZXJuYWxseSkgaXNzdWluZyBh IEdFVCBjb21tYW5kIChGVFAgUkVUUiBwcm90b2NvbCBkaXJlY3RpdmUpCi0gICBmb3IgZWFjaCBm aWxlLiBUaGUgZmlsZSBsaXN0IHJldHVybmVkIGJ5IHRoZSBzZXJ2ZXIgY2FuIGJlIGFueSBzaXpl IGF0Ci0gICBhbGwsIHNvIGluIGNhc2UgaXQgaXMgaHVnZSwgd2UgZG9uJ3Qgc3RvcmUgaXQgaW4g bWVtb3J5OyBpbnN0ZWFkIHdlIHB1dAotICAgaXQgaW4gYSB0ZW1wb3JhcnkgZmlsZS4gRm9yIHRy b3VibGVzaG9vdGluZyBwdXJwb3NlcywgeW91IHNob3VsZCBiZQotICAgYXdhcmUgb2YgdHdvIHBv aW50czoKLQotICAgIDEuIFRoZSBsb2NhdGlvbiBvZiB0aGUgdGVtcG9yYXJ5IGZpbGUgaXMgY2hv c2VuIGFjY29yZGluZyB0aGUgVE1QIG9yCi0gICAgICAgVEVNUCBlbnZpcm9ubWVudCB2YXJpYWJs ZXMuIElmIG5laXRoZXIgb2YgdGhlc2UgdmFyaWFibGVzIGlzCi0gICAgICAgZGVmaW5lZCwgeW91 IG1pZ2h0IG5lZWQgdG8gZGVmaW5lIGl0LiBJbiBjYXNlIHRoZXJlIGlzIG5vdCBlbm91Z2gKLSAg ICAgICBzcGFjZSBvbiB0aGUgaW5kaWNhdGVkIGRpc2sgb3IgcGFydGl0aW9uIGZvciB0aGUgc2Vy dmVyJ3MgZmlsZQotICAgICAgIGxpc3QsIHlvdSBtaWdodCBuZWVkIHRvIGVpdGhlciBjbGVhbiB1 cCB0aGUgdGVtcG9yYXJ5IGFyZWEsIG9yCi0gICAgICAgcmVkZWZpbmUgdGhlIGVudmlyb25tZW50 IHZhcmlhYmxlIHRvIGluZGljYXRlIGEgZGlmZmVyZW50IGFyZWEgdGhhdAotICAgICAgIGhhcyBz dWZmaWNpZW50IHNwYWNlLgotICAgIDIuIElmIHlvdSB3YW50IHRvIGxvb2sgYXQgdGhlIGxpc3Qg eW91cnNlbGYsIHVzZSBTRVQgRlRQIERFQlVHIE9OLgotICAgICAgIFRoaXMgdGVsbHMgS2VybWl0 IHRvIChhKSBnaXZlIHlvdSB0aGUgZnVsbCBwYXRobmFtZSBvZiB0aGUKLSAgICAgICB0ZW1wb3Jh cnkgZmlsZSBhdCB0aGUgZW5kIG9mIGVhY2ggTUdFVCBjb21tYW5kLCBhbmQgKGIpIG5vdCB0bwot ICAgICAgIGRlbGV0ZSBpdCwgYXMgaXQgbm9ybWFsbHkgZG9lcy4KLQotMy42LjEuIEZUUCBHRVQg U3dpdGNoZXMKLQotICAgVGhlIGZvbGxvd2luZyBzd2l0Y2hlcyBhcmUgYXZhaWxhYmxlIHdpdGgg RlRQIEdFVCBhbmQgTUdFVDoKLQotICAgL1RFWFQKLSAgICAgICAgICBTcGVjaWZpZXMgYSB0ZXh0 LW1vZGUgdHJhbnNmZXIuIE92ZXJyaWRlcyB0aGUgZ2xvYmFsIEZUUCBUWVBFCi0gICAgICAgICAg c2V0dGluZyBhbmQgZmlsZW5hbWUgcGF0dGVybi1tYXRjaGluZyBmb3IgdGhlIGR1cmF0aW9uIG9m IHRoZQotICAgICAgICAgIGN1cnJlbnQgY29tbWFuZCBvbmx5LCBBbGwgZmlsZXMgYXJlIGRvd25s b2FkZWQgaW4gdGV4dCBtb2RlLgotICAgICAgICAgIFN5bm9ueW06IC9BU0NJSS4KLQotICAgL0JJ TkFSWQotICAgICAgICAgIFNwZWNpZmllcyBhIGJpbmFyeS1tb2RlIHRyYW5zZmVyLiBPdmVycmlk ZXMgdGhlIGdsb2JhbCBGVFAgVFlQRQotICAgICAgICAgIHNldHRpbmcgYW5kIGZpbGVuYW1lIHBh dHRlcm4tbWF0Y2hpbmcgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUKLSAgICAgICAgICBjdXJyZW50 IGNvbW1hbmQgb25seS4gQWxsIGZpbGVzIGFyZSBkb3dubG9hZGVkIGluIGJpbmFyeSBtb2RlLgot Ci0gICAvVEVORVgKLSAgICAgICAgICBMaWtlIC9CSU5BUlkgYnV0IHNwZWNpZmllcyBhIHNwZWNp YWwgYmluYXJ5IHRyYW5zZmVyIG1vZGUgdG8gYmUKLSAgICAgICAgICB1c2VkIHdoZW4gZ2V0dGlu ZyA4LWJpdCBiaW5hcnkgZmlsZXMgZnJvbSBhIDM2LWJpdCBwbGF0Zm9ybSBzdWNoCi0gICAgICAg ICAgYXMgVE9QUy0xMCwgVE9QUy0yMCwgb3IgVEVORVguIEFsbCBmaWxlcyBhcmUgZG93bmxvYWRl ZCBpbiB0aGUKLSAgICAgICAgICBzcGVjaWFsIGJpbmFyeSBtb2RlLgotCi0gICAvUkVDT1ZFUgot ICAgICAgICAgIFRoaXMgaW5zdHJ1Y3RzIEtlcm1pdCB0byB0cnkgdG8gcmVjb3ZlciBhbiBpbmNv bXBsZXRlIGRvd25sb2FkCi0gICAgICAgICAgZnJvbSB0aGUgcG9pbnQgb2YgZmFpbHVyZS4gV29y a3Mgb25seSBpbiBiaW5hcnkgbW9kZSwgYW5kIG9ubHkKLSAgICAgICAgICBpZiB0aGUgc2VydmVy IHN1cHBvcnRzIHRoZSAobm90LXlldC1zdGFuZGFyZCkgRlRQICJSRVNUIgotICAgICAgICAgIGRp cmVjdGl2ZS4gU2VlIFszMTNdU2VjdGlvbiAzLjYuMyBmb3IgZGV0YWlscy4gU3lub255bToKLSAg ICAgICAgICAvUkVTVEFSVC4KLQotICAgL0ZJTEVOQU1FUzp7Q09OVkVSVEVELExJVEVSQUx9Ci0g ICAgICAgICAgT3ZlcnJpZGVzIHRoZSBbMzE0XUZUUCBGSUxFTkFNRVMgKGZpbGVuYW1lIGNvbnZl cnNpb24pIHNldHRpbmcKLSAgICAgICAgICBmb3IgdGhpcyBkb3dubG9hZCBvbmx5LCBmb3JjaW5n IGluY29taW5nIGZpbGVuYW1lcyB0byBiZSBlaXRoZXIKLSAgICAgICAgICBjb252ZXJ0ZWQgb3Ig dGFrZW4gbGl0ZXJhbGx5LgotCi0gICAvQVMtTkFNRTp0ZXh0Ci0gICAgICAgICAgRm9yIEdFVCwg dGhpcyBpcyBlcXVpdmFsZW50IHRvIGdpdmluZyBhbiBhcy1uYW1lIGFmdGVyIHRoZQotICAgICAg ICAgIGZpbGVuYW1lLiBGb3IgTUdFVCwgdGhpcyBpcyB0aGUgb25seSB3YXkgdG8gc3BlY2lmeSBh bHRlcm5hdGl2ZQotICAgICAgICAgIG5hbWVzIGZvciB0aGUgaW5jb21pbmcgZmlsZXMuIFdpdGgg TUdFVCwgdGhlIC9BUy1OQU1FIHRleHQKLSAgICAgICAgICBzaG91bGQgKG11c3QpIGNvbnRhaW4g YSBLZXJtaXQgdmFyaWFibGUsIHVzdWFsbHkgXHYoZmlsZW5hbWUpIG9yCi0gICAgICAgICAgXHYo ZmlsZW51bWJlcikuIEV4YW1wbGU6Ci0KLSAgbWdldCAvdGV4dCAvYXMtbmFtZTpcdihmaWxlbmFt ZSkubmV3ICouYwotCi0gICAgICAgICAgVGhpcyBnZXRzIGFsbCAiLmMiIGZpbGVzIGFuZCBzdG9y ZXMgdGhlbSB3aXRoICIKLQotICAgICAgICAgIC5uZXciIGFwcGVuZGVkIHRvIHRoZWlyIG5hbWVz LiBTZWUgdGhlIFszMTVdQy1LZXJtaXQgNy4wIFVwZGF0ZQotICAgICAgICAgIE5vdGVzIGZvciBk ZXRhaWxzLgotCi0gICAvQ09NTUFORAotICAgICAgICAgIFRoaXMgc3BlY2lmaWVzIHRoYXQgdGhl IGluY29taW5nIGZpbGUgaXMgdG8gYmUgd3JpdHRlbiB0byB0aGUKLSAgICAgICAgICBzdGFuZGFy ZCBpbnB1dCBvZiBhIGNvbW1hbmQsIHJhdGhlciB0aGFuIHRvIGEgZmlsZS4gVGhlIGNvbW1hbmQK LSAgICAgICAgICBuYW1lIGlzIHRoZSBhcy1uYW1lIGZyb20gdGhlIEdFVCBjb21tYW5kIG9yIHRo ZSAvQVMtTkFNRQotICAgICAgICAgIGFyZ3VtZW50LiBJZiB5b3UgbmVlZCB0byByZWZlciB0byB0 aGUgaW5jb21pbmcgZmlsZSdzIG5hbWUgaW4KLSAgICAgICAgICB0aGUgY29tbWFuZCwgdXNlIFx2 KGZpbGVuYW1lKS4gU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUKLSAgICAgICAgICByZWd1bGFy IEtlcm1pdCBbMzE2XUdFVCAvQ09NTUFORCBjb21tYW5kIGZvciBkZXRhaWxzIGFuZAotICAgICAg ICAgIGV4YW1wbGVzLgotCi0gICAvUVVJRVQKLSAgICAgICAgICBUcmFuc2ZlcnMgdGhlIGZpbGVz IHF1aWV0bHk7IGRvbid0IHB1dCB1cCBhIGZpbGUtdHJhbnNmZXIKLSAgICAgICAgICBkaXNwbGF5 LgotCi0gICAvRVJST1ItQUNUSU9OOntRVUlULFBST0NFRUR9Ci0gICAgICAgICAgVGhpcyBzd2l0 Y2ggYWZmZWN0cyBvbmx5IE1HRVQuIElmIGFuIGVycm9yIG9jY3VycyB3aXRoIGEKLSAgICAgICAg ICBwYXJ0aWN1bGFyIGZpbGUsIHRoaXMgdGVsbHMgd2hldGhlciB0byBnbyBvbiB0byB0aGUgbmV4 dCBmaWxlCi0gICAgICAgICAgKFBST0NFRUQpIG9yIHRvIHN0b3AgcmlnaHQgYXdheSBhbmQgZmFp bCAoUVVJVCkuIFRoZSBkZWZhdWx0IGlzCi0gICAgICAgICAgUFJPQ0VFRC4KLQotICAgVGhlIGZp bGUgc2VsZWN0aW9uIHN3aXRjaGVzIGFyZToKLQotICAgL0VYQ0VQVDp7cGF0dGVybn0gb3IgL0VY Q0VQVDp7e3BhdHRlcm59e3BhdHRlcm59ey4uLn19Ci0gICAgICAgICAgRXhjZXB0aW9uIGxpc3Qg Zm9yIE1HRVQ7IHNraXAgZG93bmxvYWRpbmcgYW55IGZpbGUgd2hvc2UgbmFtZQotICAgICAgICAg IG1hdGNoZXMgYW55IG9mIHRoZSBnaXZlbiBwYXR0ZXJucyAod2hlbiB1c2luZyB0aGUgc2Vjb25k IGZvcm1hdCwKLSAgICAgICAgICB1cCB0byA2NCBwYXR0ZXJucyBtYXkgYmUgc3BlY2lmaWVkKS4g WzMxN11DTElDSyBIRVJFIGZvciBzeW50YXgKLSAgICAgICAgICBkZXRhaWxzLgotCi0gICAvU01B TExFUi1USEFOOm51bWJlcgotICAgICAgICAgIERvd25sb2FkIG9ubHkgZmlsZXMgd2hvc2Ugc2l6 ZSBpcyBzbWFsbGVyIHRoYW4gdGhlIGdpdmVuIG51bWJlcgotICAgICAgICAgIG9mIGJ5dGVzIChv Y3RldHMpLiBSZXF1aXJlcyB0aGF0IHRoZSBGVFAgc2VydmVyIHN1cHBvcnQgdGhlIFNJWkUKLSAg ICAgICAgICBvciBNTFNEIGRpcmVjdGl2ZS4KLQotICAgL0xBUkdFUi1USEFOOm51bWJlcgotICAg ICAgICAgIERvd25sb2FkIG9ubHkgZmlsZXMgd2hvc2Ugc2l6ZSBpcyBncmVhdGVyIHRoYW4gdGhl IGdpdmVuIG51bWJlcgotICAgICAgICAgIG9mIGJ5dGVzLiBSZXF1aXJlcyB0aGF0IHRoZSBGVFAg c2VydmVyIHN1cHBvcnQgdGhlIFNJWkUgb3IgTUxTRAotICAgICAgICAgIGRpcmVjdGl2ZS4KLQot ICAgL05PQkFDS1VQRklMRVMKLSAgICAgICAgICBEdXJpbmcgTUdFVCwgZG9uJ3QgZG93bmxvYWQg YW55IGZpbGVzIHdob3NlIG5hbWVzIGVuZCB3aXRoCi0gICAgICAgICAgYmFja3VwIHN1ZmZpeGVz ICgufm5+IHdoZXJlIG4gaXMgYSBudW1iZXIpLgotCi0gICAvTk9ET1RGSUxFUwotICAgICAgICAg IER1cmluZyBNR0VULCBkb24ndCBkb3dubG9hZCBhbnkgZmlsZXMgd2hvc2UgbmFtZXMgYmVnaW4g d2l0aAotICAgICAgICAgIHBlcmlvZCAoLikuIEVxdWl2YWxlbnQgdG8gL0VYQ0VQVDp7Lip9Lgot Ci0gICAvTElTVEZJTEU6bG9jYWwtZmlsZW5hbWUKLSAgICAgICAgICBUaGUgZ2l2ZW4gZmlsZSBj b250YWlucyBhIGxpc3Qgb2YgZmlsZXMgdG8gR0VULCBvbmUgcGVyIGxpbmUuCi0gICAgICAgICAg RmlsZW5hbWVzIGluIHRoZSBsaXN0ZmlsZSBjYW4gY29udGFpbiB3aWxkY2FyZCBjaGFyYWN0ZXJz IGluIHRoZQotICAgICAgICAgIHN5bnRheCBvZiB0aGUgc2VydmVyLiBUaGVyZSBpcyBubyBsaW1p dCBvbiB0aGUgbnVtYmVyIG9mIGxpbmVzCi0gICAgICAgICAgaW4gdGhlIGxpc3RmaWxlLgotCi0g ICAvTkFNRUxJU1Q6bG9jYWwtZmlsZW5hbWUKLSAgICAgICAgICBJZiB0aGlzIHN3aXRjaCBpcyBn aXZlbiwgdGhlbiBpbnN0ZWFkIG9mIGFjdHVhbGx5IHJldHJpZXZpbmcgdGhlCi0gICAgICAgICAg c2VsZWN0ZWQgZmlsZXMsIHRoZSBHRVQgY29tbWFuZCByZXRyaWV2ZXMgYSBsaXN0IG9mIHRoZSBu YW1lcyBvZgotICAgICAgICAgIHRoZSBmaWxlcyB0aGF0IHdvdWxkIGJlIHJldHJpZXZlZCwgYW5k IHBsYWNlcyBpdCBpbiB0aGUKLSAgICAgICAgICBzcGVjaWZpZWQgZmlsZS4gVGhlIHJlc3VsdGlu ZyBmaWxlIGlzIGFuIG9yZGluYXJ5IHRleHQgZmlsZSwKLSAgICAgICAgICB3aXRoIG9uZSBmaWxl bmFtZSBwZXIgbGluZSwgc3VpdGFibGUgZm9yIHJlYWRpbmcgYnkgYSBwZXJzb24sIG9yCi0gICAg ICAgICAgcHJvY2Vzc2luZyBieSBhIGNvbXB1dGVyIHByb2dyYW0sIGluY2x1ZGluZyBLZXJtaXQg aXRzZWxmIChGT1BFTgotICAgICAgICAgIC8gRlJFQUQgLyBGV1JJVEUgLyBGQ0xPU0UpLCBhbmQg YXMgL0ZJTEVMSVNUOiBmaWxlLiBJZiB0aGUKLSAgICAgICAgICBmaWxlbmFtZSBpcyBvbWl0dGVk IG9yIGdpdmVuIGFzICItIiAoZGFzaCwgaHlwaGVuKSwgdGhlIGxpc3QKLSAgICAgICAgICBnb2Vz IHRvIHRoZSBzY3JlZW4uIE5PVEU6IGlmIHlvdSB3YW50IGEgY29weSBvZiB0aGUgY29tcGxldGUK LSAgICAgICAgICBsaXN0IHNlbnQgYnkgdGhlIHNlcnZlciwgdXNlIFNFVCBGVFAgREVCVUcgT04s IHBlcmZvcm0gYW4gTUdFVCwKLSAgICAgICAgICBhbmQgdGhlIHRlbXBvcmFyeSBmaWxlIGNvbnRh aW5pbmcgdGhlIGxpc3Qgd2lsbCBiZSBrZXB0IHJhdGhlcgotICAgICAgICAgIHRoYW4gZGVsZXRl ZCAoYW5kIEtlcm1pdCB0ZWxscyB5b3UgaXRzIG5hbWUpLgotCi0gICAvVVBEQVRFLCAvQ09MTElT SU9OOmtleXdvcmQKLSAgICAgICAgICBFeHBsYWluZWQgaW4gWzMxOF1TZWN0aW9uIDMuNi4yLgot Ci0gICAvUkVDVVJTSVZFCi0gICAgICAgICAgVGhpcyBtZWFucyB0byB0cnkgdG8gZG93bmxvYWQg YW4gZW50aXJlIGRpcmVjdG9yeSB0cmVlLCByYXRoZXIKLSAgICAgICAgICB0aGFuIGp1c3QgZmls ZXMgZnJvbSBhIHBhcnRpY3VsYXIgZGlyZWN0b3J5LiBJbiBmYWN0LCBGVFAKLSAgICAgICAgICBw cm90b2NvbCBkb2VzIG5vdCBwcm92aWRlIGEgbWV0aG9kIHRvIHJlcXVlc3QgYSByZWN1cnNpdmUK LSAgICAgICAgICBkb3dubG9hZCAodW5sZXNzIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgTUxTRDsgc2Vl IFszMTldU2VjdGlvbgotICAgICAgICAgIDMuMTEpLCBzbyB0aGlzIHdvcmtzIG9ubHkgaWYgdGhl IEZUUCBzZXJ2ZXIgZG9lcyBpdCBhbnl3YXksCi0gICAgICAgICAgd2l0aG91dCBiZWluZyBhc2tl ZCwgYXMgc29tZSBkby4gSW4gdGhpcyBjYXNlLCBLZXJtaXQgZGV0ZWN0cwotICAgICAgICAgIHRo YXQgbmFtZXMgaW4gdGhlIHJldHVybmVkIGZpbGUgbGlzdCBjb250YWluIGRpcmVjdG9yeQotICAg ICAgICAgIHNlcGFyYXRvcnMsIGFuZCB0aGVyZWZvcmUgYXR0ZW1wdHMgdG8gY3JlYXRlIHRoZSBu ZWVkZWQKLSAgICAgICAgICBkaXJlY3RvcmllcyBhcyB0aGUgZmlsZXMgYXJyaXZlLiBCdXQgdGhp cyBjYW4gd29yayBvbmx5IGlmIHRoZQotICAgICAgICAgIHNlcnZlciBpcyBvbiB0aGUgc2FtZSBr aW5kIG9mIHBsYXRmb3JtIGFzIHRoZSBjbGllbnQsIHNvIHRoZQotICAgICAgICAgIHBhdGhuYW1l IHN5bnRheCBjYW4gYmUgcmVjb2duaXplZCwgYW5kIGFsc28gYmVjYXVzZSB0aGUgc2VydmVyCi0g ICAgICAgICAgZG9lcyBub3Qgc3dpdGNoIGJldHdlZW4gdGV4dCBhbmQgYmluYXJ5IG1vZGUsIHdo aWNoIHdvdWxkIGJlCi0gICAgICAgICAgdml0YWwgZm9yIGNyb3NzLXBsYXRmb3JtIHRyYW5zZmVy cy4gVXNlIHdpdGggY2F1dGlvbi4gU3lub255bToKLSAgICAgICAgICAvU1VCRElSRUNUT1JJRVMu Ci0KLSAgICAgICAgICBFdmVuIHdoZW4gdGhlIHNlcnZlciBkb2VzIG5vdCBwcm92aWRlIHJlY3Vy c2l2ZSBmaWxlIGxpc3RzLAotICAgICAgICAgIFtNXUdFVCAvUkVDVVJTSVZFIGZvcmNlcyBLZXJt aXQgdG8gcmVwbGljYXRlIGFueSBkaXJlY3RvcnkKLSAgICAgICAgICBzdHJ1Y3R1cmUgaW1wbGll ZCBvciBleHByZXNzZWQgYnkgdGhlIHNlcnZlcidzIGZpbGUgbGlzdC4gRm9yCi0gICAgICAgICAg ZXhhbXBsZToKLQotICBnZXQgc29tZXBhdGgvc29tZWZpbGUKLQotICAgICAgICAgIEdldHMgdGhl IGZpbGUgbmFtZWQgc29tZWZpbGUgZnJvbSB0aGUgc2VydmVyJ3Mgc29tZXBhdGgKLSAgICAgICAg ICBkaXJlY3RvcnkgYW5kIHB1dHMgaXQgS2VybWl0J3MgY3VycmVudCAob3IgZG93bmxvYWQpIGRp cmVjdG9yeSwKLSAgICAgICAgICB3aGVyZWFzOgotCi0gIGdldCAvcmVjdXJzaXZlIHNvbWVwYXRo L3NvbWVmaWxlCi0KLSAgICAgICAgICBjcmVhdGVzIHRoZSBwYXRoIGxvY2FsbHkgYW5kIHRoZW4g cHV0cyB0aGUgZmlsZSBpbiBpdC4gU2ltaWxhcmx5Ci0gICAgICAgICAgZm9yIE1HRVQ6Ci0KLSAg bWdldCAqL2RhdGEvKgotCi0gICAgICAgICAgZG93bmxvYWRzIGFsbCB0aGUgZmlsZXMgaW4gYWxs IHRoZSBkYXRhIHN1YmRpcmVjdG9yaWVzIG9mIGFsbAotICAgICAgICAgIHRoZSBzdWJkaXJlY3Rv cmllcyBvZiB0aGUgc2VydmVyJ3MgY3VycmVudCBkaXJlY3RvcnkgYW5kIHN0b3JlcwotICAgICAg ICAgIHRoZW0gbG9jYWxseSBpbiBLZXJtaXQncyBjdXJyZW50IChvciBkb3dubG9hZCkgZGlyZWN0 b3J5LAotICAgICAgICAgIHdoZXJlYXM6Ci0KLSAgbWdldCAvcmVjdXJzaXZlICovZGF0YS8qCi0K LSAgICAgICAgICByZS1jcmVhdGVzIHRoZSBzZXJ2ZXIncyBkaXJlY3Rvcnkgc3RydWN0dXJlIGxv Y2FsbHkuCi0KLSAgIFRoZSBGVFAgcHJvdG9jb2wgZG9lcyBub3QgaW5jbHVkZSBleHBsaWNpdCBt ZWNoYW5pc21zIGZvciByZWN1cnNpb24sIHNvCi0gICBLZXJtaXQgYnVpbGRzIHVwb24gd2hhdCBp cyBhdmFpbGFibGUuIEFsdGhvdWdoIGFuIEludGVybmV0IGRyYWZ0Ci0gICBkZXNjcmliZXMgYSBt ZWNoYW5pc20gKCJNTFNEIikgdGhhdCB3b3VsZCBhbGxvdyBwcm90b2NvbC1kcml2ZW4KLSAgIHJl Y3Vyc2lvbiwgc2ltaWxhciB0byBLZXJtaXQncyBGaWxlIEF0dHJpYnV0ZSBwYWNrZXRzIChjaXJj YSAxOTg0KSwgaXQKLSAgIGhhcyBub3QgeWV0IGF0dGFpbmVkIFJGQyBvciBzdGFuZGFyZCBzdGF0 dXMsIGFuZCBzZXJ2ZXJzIGFyZSBub3QgeWV0Ci0gICB3aWRlbHkgYXZhaWxhYmxlIHRoYXQgb2Zm ZXIgdGhpcyBmZWF0dXJlLiBJbiB0aGUgbWVhbnRpbWUsIHRoZQotICAgZWZmZWN0aXZlbmVzcyBv ZiBNR0VUIC9SRUNVUlNJVkUgZGVwZW5kcyBvbiB0aGUgRlRQIHNlcnZlcgotICAgaW1wbGVtZW50 YXRpb24uIElmIHRoZSBzZXJ2ZXIgcmV0dXJucyBhIHJlY3Vyc2l2ZSBsaXN0IGluIHJlc3BvbnNl IHRvCi0gICB0aGUgc3RhbmRhcmQgTkxTVCBjb21tYW5kICh3aG9zZSBiZWhhdmlvciBpcyBpbGwt ZGVmaW5lZCksIEtlcm1pdCdzIEZUUAotICAgTUdFVCAvUkVDVVJTSVZFIGNvbW1hbmQgdXNlcyBp dCB0byByZS1jcmVhdGUgdGhlIHJlbW90ZSBkaXJlY3RvcnkgdHJlZQotICAgbG9jYWxseS4gSWYg dGhlIHNlcnZlciBzdXBwb3J0cyBNTFNELCBDLUtlcm1pdCA4LjAuMjA2IGFuZCBLZXJtaXQgOTUK LSAgIDIuMSBhbmQgbGF0ZXIgYXJlIGFibGUgdG8gc2Vuc2UgaXQgYXV0b21hdGljYWxseSBhbmQg dXNlIGl0LCBhcwotICAgZGVzY3JpYmVkIGJlbG93IGluIFszMjBdU2VjdGlvbiAzLjExLgotCi0g ICBUaGUgL0JFRk9SRTosIC9BRlRFUjosIC9OT1QtQkVGT1JFOiwgYW5kIC9OT1QtQUZURVI6IHN3 aXRjaGVzIGFyZSBub3QKLSAgIGF2YWlsYWJsZSBmb3IgZG93bmxvYWRpbmcgYmVjYXVzZSBvZiB0 aGUgY29uZnVzaW9uIHdpdGggdGltZXpvbmVzLgotICAgV291bGQgdGhlIGdpdmVuIHRpbWVzIGJl IGluIHRoZSBsb2NhbCB0aW1lem9uZSwgdGhlIHNlcnZlcidzIHRpbWV6b25lLAotICAgb3IgR01U PyBUaGUgRlRQIHNlcnZlcidzIGRpcmVjdG9yeSBsaXN0aW5ncyBzaG93IGl0cyBvd24gbG9jYWwg dGltZXMKLSAgIGJ1dCBzaW5jZSB3ZSBkb24ndCBrbm93IHdoYXQgdGltZXpvbmUgdGhlIHNlcnZl ciBpcyBpbiwgdGhlcmUncyBubyB3YXkKLSAgIHRvIHJlY29uY2lsZSBvdXIgbG9jYWwgdGltZXMg d2l0aCB0aGUgc2VydmVyJ3MuIFNpbWlsYXJseSwgL1BFUk1JU1NJT05TCi0gICBjYW4ndCBiZSBw cmVzZXJ2ZWQgaW4gZG93bmxvYWRzIGJlY2F1c2UgRlRQIHByb3RvY29sIHByb3ZpZGVzIG5vIG1l YW5zCi0gICBvZiBxdWVyeWluZyB0aGUgc2VydmVyIGZvciBhIGZpbGUncyBwZXJtaXNzaW9uLgot Ci0gICBTb3VyY2UtZmlsZSBkaXNwb3NpdGlvbiBzd2l0Y2hlczoKLQotICAgL0RFTEVURQotICAg ICAgICAgIEVhY2ggZmlsZSB0aGF0IGlzIGRvd25sb2FkZWQgc3VjY2Vzc2Z1bGx5IGlzIHRvIGJl IGRlbGV0ZWQgZnJvbQotICAgICAgICAgIHRoZSBzZXJ2ZXIuIFJlcXVpcmVzIHRoZSBhcHByb3By aWF0ZSBmaWxlIGFjY2VzcyByaWdodHMgb24gdGhlCi0gICAgICAgICAgc2VydmVyLgotCi0gICAv U0VSVkVSLVJFTkFNRS1UTzp0ZW1wbGF0ZQotICAgICAgICAgIEFza3MgdGhlIHNlcnZlciB0byBy ZW5hbWUgZWFjaCAocmVtb3RlKSBzb3VyY2UgZmlsZSBpbW1lZGlhdGVseQotICAgICAgICAgIGFm dGVyLCBhbmQgb25seSBpZiwgaXQgaXMgc2VudCBjb3JyZWN0bHkuIFNlZSBbMzIxXVBVVAotICAg ICAgICAgIC9TRVJWRVItUkVOQU1FLVRPOiBmb3IgZGV0YWlscy4KLQotICAgRGVzdGluYXRpb24t ZmlsZSBkaXNwb3NpdGlvbiBzd2l0Y2hlczoKLQotICAgL1RPLVNDUkVFTgotICAgICAgICAgIERp c3BsYXlzIHRoZSBpbmNvbWluZyBmaWxlIG9uIHRoZSBzY3JlZW4gcmF0aGVyIHRoYW4gc3Rvcmlu ZyBpdAotICAgICAgICAgIG9uIGRpc2suIElmIHRoaXMgc3dpdGNoIGlzIGdpdmVuLCB0aGUgL1JF TkFNRS1UTyBhbmQgL01PVkUtVE8KLSAgICAgICAgICBzd2l0Y2hlcyBhcmUgaWdub3JlZCwgdGhl IGZpbGUtdHJhbnNmZXIgZGlzcGxheSBpcyBzdXBwcmVzc2VkLAotICAgICAgICAgIGFuZCB0aGUg Z2l2ZW4gZmlsZShzKSBpcy9hcmUgc2hvd24gb24gdGhlIHNjcmVlbi4gQ2FuIGJlIHVzZWQKLSAg ICAgICAgICB3aXRoIC9GSUxURVIsIGUuZy4KLQotICBnZXQgL3RleHQgL3RvLXNjcmVlbiAvZmls dGVyOm1vcmUgb29mYS50eHQKLQotICAgICAgICAgIEluIGZhY3QsIHlvdSBzaG91bGQgYWx3YXlz IHVzZSAvVE8tU0NSRUVOIHdpdGggL0ZJTFRFUiBvcgotICAgICAgICAgIC9DT01NQU5EIHdoZW4g dGhlIGNvbW1hbmQgd291bGQgcmVzdWx0IGluIGRpc3BsYXlpbmcgdGhlCi0gICAgICAgICAgaW5j b21pbmcgZmlsZSBvbiB0aGUgc2NyZWVuOyBvdGhlcndpc2UgQy1LZXJtaXQgd291bGQgaGF2ZSBu bwotICAgICAgICAgIHdheSBvZiBrbm93aW5nIHRvIHN1cHByZXNzIGl0cyBmaWxlIHRyYW5zZmVy IGRpc3BsYXkgKHNpbmNlIGl0Ci0gICAgICAgICAgY2FuJ3QgYmUgZXhwZWN0ZWQgdG8ga25vdyB3 aGF0IHRoZSBjb21tYW5kIG9yIGZpbHRlciBkb2VzKS4KLQotICAgL1JFTkFNRS1UTzp0ZW1wbGF0 ZQotICAgICAgICAgIEVhY2ggZmlsZSB0aGF0IGlzIGRvd25sb2FkZWQgaXMgdG8gYmUgcmVuYW1l ZCBhcyBpbmRpY2F0ZWQgaWYKLSAgICAgICAgICBhbmQgb25seSBpZiBpdCB3YXMgcmVjZWl2ZWQg Y29tcGxldGVseSBhbmQgd2l0aG91dCBlcnJvci4gVGhlCi0gICAgICAgICAgdGVtcGxhdGUgY2Fu IGJlIGxpdGVyYWwgdGV4dCBvciBjYW4gY29udGFpbiB2YXJpYWJsZXMgdGhhdCBhcmUKLSAgICAg ICAgICBldmFsdWF0ZWQgZm9yIGVhY2ggZmlsZS4gRm9yIE1HRVQsIHRoZSB0ZXh0IG11c3QgY29u dGFpbgotICAgICAgICAgIHZhcmlhYmxlczsgZm9yIEdFVCBpdCBjYW4gYmUgYSBsaXRlcmFsIHN0 cmluZy4gVGhlIFx2KGZpbGVuYW1lKQotICAgICAgICAgIHZhcmlhYmxlIGNvbnRhaW5zIHRoZSBu YW1lIG9mIHRoZSBjdXJyZW50IGZpbGUsIHNvOgotCi0gIGZ0cCBtZ2V0IC9yZW5hbWUtdG86XHYo ZmlsZW5hbWUpLm9rICoKLQotICAgICAgICAgIGNhdXNlcyBlYWNoIGZpbGUgdGhhdCBpcyBzdWNj ZXNzZnVsbHkgZG93bmxvYWRlZCB0byBoYXZlICIub2siCi0gICAgICAgICAgYXBwZW5kZWQgdG8g aXRzIG5hbWUuIEZvciBkZXRhaWxzIHNlZSBbMzIyXVNlY3Rpb24gNC4xIG9mIHRoZQotICAgICAg ICAgIFszMjNdQy1LZXJtaXQgNy4wIFVwZGF0ZSBOb3Rlcy4KLQotICAgL01PVkUtVE86dGV4dAot ICAgICAgICAgIEp1c3QgbGlrZSAvUkVOQU1FLVRPOiwgZXhjZXB0IHRoZSB0ZXh0IGRlbm90ZXMg dGhlIG5hbWUgb2YgYQotICAgICAgICAgIGRpcmVjdG9yeSB0byB3aGljaCBzdWNjZXNzZnVsbHkg ZG93bmxvYWRlZCBmaWxlcyBhcmUgdG8gYmUKLSAgICAgICAgICBtb3ZlZC4gSWYgdGhlIGRpcmVj dG9yeSBkb2VzIG5vdCBleGlzdCwgaXQgaXMgY3JlYXRlZC4KLQotICAgVGhlIGZpbGUgdHJhbnNm ZXIgZGlzcGxheSBkb2VzIG5vdCBzaG93IHRoZSAvTU9WRS1UTyBvciAvUkVOQU1FLVRPCi0gICB2 YWx1ZSwgc2luY2UgdGhlIGluY29taW5nIGZpbGUgaGFzIG5vdCB5ZXQgYmVlbiBtb3ZlZCBvciBy ZW5hbWVkLgotCi0zLjYuMi4gRmlsZW5hbWUgQ29sbGlzaW9ucwotCi0gICBXaGF0IHNob3VsZCBo YXBwZW4gaWYgYW4gaW5jb21pbmcgZmlsZSBoYXMgdGhlIHNhbWUgbmFtZSBhcyBhbiBleGlzdGlu ZwotICAgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rvcnk/IEJ5IGRlZmF1bHQsIEtlcm1pdCdzIEZJ TEUgQ09MTElTSU9OIHNldHRpbmcKLSAgIGFwcGxpZXM6IEJBQ0tVUCwgUkVOQU1FLCBVUERBVEUs IERJU0NBUkQsIGV0YywgYXMgZGVzY3JpYmVkIGluCi0gICBbMzI0XVVzaW5nIEMtS2VybWl0LiBL ZXJtaXQncyBkZWZhdWx0IEZJTEUgQ09MTElTSU9OIHNldHRpbmcgaXMgQkFDS1VQCi0gICAocmVu YW1lIHRoZSBleGlzdGluZyBmaWxlIGFuZCBzdG9yZSB0aGUgaW5jb21pbmcgZmlsZSB1bmRlciBp dHMgb3duCi0gICBuYW1lKSBhbmQgdGhlcmVmb3JlIHRoaXMgaXMgYWxzbyB0aGUgZGVmYXVsdCBG VFAgY29sbGlzaW9uIGFjdGlvbi4KLQotICAgVGhlIG5hbWUgdW5kZXIgd2hpY2ggYW4gaW5jb21p bmcgZmlsZSBpcyB0byBiZSBzdG9yZWQgaXMgZGV0ZXJtaW5lZCBhcwotICAgZm9sbG93czoKLQot ICAgICAqIElmIGFuIGFzLW5hbWUgd2FzIGdpdmVuLCB0aGUgYXMtbmFtZSBpcyB1c2VkLiBPdGhl cndpc2U6Ci0gICAgICogSWYgdGhlIGNsaWVudCBhbmQgc2VydmVyIHBsYXRmb3JtcyBhcmUgYWxp a2Ugb3IgWzMyNV1GVFAgRklMRU5BTUVTCi0gICAgICAgaXMgc2V0IHRvIExJVEVSQUwgKG9yIHRo ZSAvRklMRU5BTUVTOkxJVEVSQUwgc3dpdGNoIHdhcyBnaXZlbiBmb3IKLSAgICAgICB0aGlzIGRv d25sb2FkKSwgdGhlIGluY29taW5nIGZpbGVuYW1lIGlzIHVzZWQgbGl0ZXJhbGx5LiBPdGhlcndp c2U6Ci0gICAgICogVGhlIGluY29taW5nIGZpbGVuYW1lIGlzIGNvbnZlcnRlZCB0byBhIGZvcm0g dGhhdCBpcyBmcmllbmRseSB0bwotICAgICAgIHRoZSBsb2NhbCBwbGF0Zm9ybS4gRm9yIFVOSVgs IGZvciBleGFtcGxlLCBpbmNvbWluZyBmaWxlbmFtZXMgdGhhdAotICAgICAgIGFyZSBhbGwgdXBw ZXJjYXNlIChhcyB0aGV5IG1pZ2h0IGJlIGZyb20sIHNheSwgVk1TIG9yIGFuIElCTQotICAgICAg IG1haW5mcmFtZSkgYXJlIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UuCi0KLSAgIElmIHRoZSByZXN1 bHRpbmcgbmFtZSBjb2luY2lkZXMgd2l0aCB0aGUgbmFtZSBvZiBhIGxvY2FsIGZpbGUgdGhhdAot ICAgYWxyZWFkeSBleGlzdHMsIHdlIGhhdmUgYSBmaWxlbmFtZSBjb2xsaXNpb24uIENvbGxpc2lv bnMgYXJlIGhhbmRsZWQKLSAgIGFjY29yZGluZyB0byB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNv bGxpc2lvbiBhY3Rpb246Ci0KLSAgIFNFVCBGVFAgQ09MTElTSU9OIHsgQkFDS1VQLCBSRU5BTUUs IFVQREFURSwgRElTQ0FSRCwgQVBQRU5ELCBPVkVSV1JJVEUKLSAgICAgICAgICB9Ci0gICAgICAg ICAgVGhpcyBlc3RhYmxpc2hlcyBhIGZpbGVuYW1lIGNvbGxpc2lvbiBmb3IgRlRQLCBzZXBhcmF0 ZSBmcm9tIHRoZQotICAgICAgICAgIEtlcm1pdCBvbmUuIFRoZSBpbml0aWFsIEZUUCBjb2xsaXNp b24gc2V0dGluZyBpcyBpbmhlcml0ZWQgZnJvbQotICAgICAgICAgIEtlcm1pdCdzIEZJTEUgQ09M TElTSU9OIHNldHRpbmcgd2hlbiB0aGUgZmlyc3QgRlRQIGNvbW1hbmQgaXMKLSAgICAgICAgICBn aXZlbiwgYnV0IHN1YnNlcXVlbnQgY2hhbmdlcyB0byBLZXJtaXQncyBGSUxFIENPTExJU0lPTiBz ZXR0aW5nCi0gICAgICAgICAgZG8gbm90IGFmZmVjdCB0aGUgRlRQIENPTExJU0lPTiBzZXR0aW5n LiBTSE9XIEZUUCB0ZWxscyB0aGUKLSAgICAgICAgICBjdXJyZW50IEZUUCBDT0xMSVNJT04gc2V0 dGluZy4KLQotICAgRlRQIEdFVCAvQ09MTElTSU9OOntCQUNLVVAsUkVOQU1FLFVQREFURSxESVND QVJELEFQUEVORCxPVkVSV1JJVEV9Ci0gICAgICAgICAgT3ZlcnJpZGVzIHRoZSBjdXJyZW50IEZU UCBDT0xMSVNJT04gYWN0aW9uIGZvciB0aGlzIGRvd25sb2FkCi0gICAgICAgICAgb25seS4KLQot ICAgRlRQIEdFVCAvVVBEQVRFCi0gICAgICAgICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIEdFVCAv Q09MTElTSU9OOlVQREFURSwgYW5kIGlzIGluY2x1ZGVkIGZvcgotICAgICAgICAgIHN5bW1ldHJ5 IHdpdGggUFVUIC9VUERBVEUKLQotICAgRlRQIEdFVCAvVVBEQVRFIGFuZCAvQ09MTElTSU9OOlVQ REFURSBtZWFuIHRvIGRvd25sb2FkIG9ubHkgdGhvc2UgZmlsZXMKLSAgIHdob3NlIG1vZGlmaWNh dGlvbiBkYXRlcyBvbiB0aGUgc2VydmVyIGFyZSBsYXRlciB0aGFuIHRob3NlIG9uIHRoZQotICAg Y2xpZW50LiBEYXRlLXRpbWUgY29tcGFyaXNvbnMgYXJlIGRvbmUgaW4gQ29vcmRpbmF0ZWQgVW5p dmVyc2FsIFRpbWUKLSAgIChVVEMsIEdNVCwgWlVMVSkuIFRoZSBjb21tYW5kOgotCi0gICAgIEZU UCBNR0VUIC9DT0xMSVNJT046QVBQRU5EIC9BUy1OQU1FOm5ld2ZpbGVuYW1lICouKgotCi0gICBE b3dubG9hZHMgYWxsIG1hdGNoaW5nIHJlbW90ZSBmaWxlcyBpbnRvIGEgc2luZ2xlIGxvY2FsIGZp bGUgKGluCi0gICB3aGF0ZXZlciBvcmRlciB0aGUgc2VydmVyIHNlbmRzIHRoZW0pLgotCi0zLjYu My4gUmVjb3ZlcnkKLQotICAgUmVjb3ZlcnkgaXMgYXZhaWxhYmxlIGZvciBkb3dubG9hZHMgdG9v LCBidXQgdGhlcmUgYXJlIHNvbWUgZGlmZmVyZW5jZXMKLSAgIGZyb20gdGhlIHVwbG9hZGluZyBj YXNlIGRlc2NyaWJlZCBpbiBbMzI2XVNlY3Rpb24gMy41LjM6Ci0KLSAgICAgKiBUaGUgdHJhbnNm ZXIgbXVzdCBiZSBpbiBCSU5BUlkgbW9kZS4gSXQgY2FuIG5vdCBiZSBpbiB0ZXh0IG1vZGUsCi0g ICAgICAgZXZlbiBpZiB0aGUgRlRQIHNlcnZlciBpcyBvbiB0aGUgc2FtZSBraW5kIG9mIHBsYXRm b3JtIGFzIEtlcm1pdCwKLSAgICAgICBhbmQgZXZlbiBpZiB0aGVyZSBpcyBubyBjaGFyYWN0ZXIt c2V0IHRyYW5zbGF0aW9uLiBUaGUgb3JpZ2luYWwKLSAgICAgICBkb3dubG9hZCBtdXN0IGFsc28g aGF2ZSBiZWVuIGluIGJpbmFyeSBtb2RlLgotICAgICAqIFRoZSBGVFAgc2VydmVyIG11c3Qgc3Vw cG9ydCB0aGUgUkVTVCAoInJlc3RhcnQiKSBkaXJlY3RpdmUuCi0gICAgICAgVW5mb3J0dW5hdGVs eSwgdGhpcyBpcyBub3QgYSBzdGFuZGFyZCBjb21tYW5kOyBhdCB0aGlzIHdyaXRpbmcsIGl0Ci0g ICAgICAgaXMgZGVzY3JpYmVkIG9ubHkgaW4gYW4gSW50ZXJuZXQgRHJhZnQsIG5vdCBhbiBSRkMg b3IgSW50ZXJuZXQKLSAgICAgICBTdGFuZGFyZCwgYnV0IG5ldmVydGhlbGVzcyBpdCBpcyBmb3Vu ZCBpbiBzZXZlcmFsIHBvcHVsYXIgRlRQCi0gICAgICAgc2VydmVycywgc3VjaCBhcyBbMzI3XVBy b0ZUUEQuCi0KLSAgIEhlcmUncyBob3cgZG93bmxvYWQgcmVjb3Zlcnkgd29ya3M6Ci0KLSAgICAg KiBLZXJtaXQgY2hlY2tzIGZvciBjb25mbGljdGluZyBzd2l0Y2hlcywgc3VjaCBhcyAvVVBEQVRF LCAvQ09NTUFORCwKLSAgICAgICBvciAvRklMVEVSLiBJZiAvUkVDT1ZFUiBpcyBnaXZlbiB3aXRo IHRoZXNlIHN3aXRjaGVzIGFuIGVycm9yCi0gICAgICAgb2NjdXJzLgotICAgICAqIFRoZSBwcmV2 YWlsaW5nIHRyYW5zZmVyIG1vZGUgKFNFVCBGVFAgVFlQRSkgbXVzdCBiZSBCSU5BUlkuIElmIGl0 Ci0gICAgICAgaXMgbm90LCB0aGUgL0JJTkFSWSBzd2l0Y2ggbXVzdCBoYXZlIGJlZW4gaW5jbHVk ZWQgd2l0aCB0aGUgRlRQCi0gICAgICAgW01dR0VUIGNvbW1hbmQuCi0KLSAgIElmIHRoZSAvUkVD T1ZFUiBzd2l0Y2ggaXMgYWNjZXB0ZWQsIHRoZW4gZm9yIGVhY2ggc2VsZWN0ZWQgZmlsZToKLQot ICAgICAqIEEgU0laRSBjb21tYW5kIGlzIHNlbnQgZm9yIHRoZSBmaWxlICh1c2luZyBpdHMgcmVt b3RlIG5hbWUpLiBJZiB0aGUKLSAgICAgICByZXBseSBpbmRpY2F0ZXMgdGhlIGZpbGUgd2FzIG5v dCBmb3VuZCwgb3IgdGhlIFNJWkUgY29tbWFuZCB3YXMgbm90Ci0gICAgICAgdW5kZXJzdG9vZCwg b3IgYW55IG90aGVyIGtpbmQgb2YgZXJyb3IsIHJlY292ZXJ5IGlzIGNhbmNlbGVkIChpLmUuCi0g ICAgICAgdGhlIGVudGlyZSBmaWxlIGlzIGRvd25sb2FkZWQpLgotICAgICAqIElmIHRoZSBzaXpl cyBvZiB0aGUgdHdvIGZpbGVzIGFyZSBpZGVudGljYWwsIHRoZSBmaWxlIGlzIG5vdCBzZW50Lgot ICAgICAgIE90aGVyd2lzZToKLSAgICAgKiBLZXJtaXQgc2VuZHMgdGhlIFJFU1QgZGlyZWN0aXZl IHRvIHRoZSBzZXJ2ZXIsIGluZGljYXRpbmcgdGhlIHNpemUKLSAgICAgICBvZiB0aGUgbG9jYWwg ZmlsZS4gSWYgdGhlIHNlcnZlciByZXNwb25kcyBhZmZpcm1hdGl2ZWx5LCBLZXJtaXQKLSAgICAg ICBvcGVucyB0aGUgbG9jYWwgZmlsZSBpbiBhcHBlbmQgbW9kZSBhbmQgYXBwZW5kcyB0aGUgaW5j b21pbmcgZGF0YQotICAgICAgIHRvIGl0LiBPdGhlcndpc2UsIHJlY292ZXJ5IGlzIGNhbmNlbGVk IGFuZCB0aGUgZW50aXJlIGZpbGUgaXMKLSAgICAgICBkb3dubG9hZGVkLgotCi0gICBUaGUgL1JF Q09WRVIgc3dpdGNoIGNhbiBiZSBpbmNsdWRlZCB3aXRoIGFueSBGVFAgR0VUIG9yIE1HRVQgY29t bWFuZCwKLSAgIGV2ZW4gaWYgaXQgc3BlY2lmaWVzIGEgZ3JvdXAgb2YgZmlsZXMuIFRoaXMgbGV0 cyB5b3UgcmVzdW1lIGFuCi0gICBpbnRlcnJ1cHRlZCBiYXRjaCB0cmFuc2ZlciBmcm9tIHdoZXJl IGl0IGxlZnQgb2ZmLiBUaGUgZmlsZXMgdGhhdCB3ZXJlCi0gICBhbHJlYWR5IGNvbXBsZXRlbHkg c2VudCBhcmUgc2tpcHBlZCwgdGhlIGZpbGUgdGhhdCB3YXMgaW50ZXJydXB0ZWQgaXMKLSAgIHJl Y292ZXJlZCwgYW5kIHRoZSByZW1haW5pbmcgZmlsZXMgYXJlIHVwbG9hZGVkLiBCVVQuLi4gdW5s aWtlIHdpdGgKLSAgIHVwbG9hZGluZywgd2hlcmUgdGhpcyBjYW4gYmUgZG9uZSB3aXRoIGFueSBt aXh0dXJlIG9mIHRleHQgYW5kIGJpbmFyeQotICAgZmlsZXMsIHdoZW4gZG93bmxvYWRpbmcsIGl0 IGNhbiBvbmx5IGJlIGRvbmUgaWYgYWxsIHRoZSBmaWxlcyBhcmUKLSAgIGJpbmFyeS4KLQotICAg SXQgZG9lc24ndCBtYXR0ZXIgaG93IHRoZSBvcmlnaW5hbCBwYXJ0aWFsIGZpbGUgd2FzIGRvd25s b2FkZWQgLS0gRlRQLAotICAgS2VybWl0LCBIVFRQLCBabW9kZW0sIGV0YzogYXMgbG9uZyBhcyB0 aGUgcHJlY29uZGl0aW9ucyBhcmUgbWV0LCBpdCBjYW4KLSAgIGJlIHJlY292ZXJlZCB3aXRoIEZU UCBbTV1HRVQgL1JFQ09WRVIsIG9yIGZvciB0aGF0IG1hdHRlciBhbHNvIHdpdGggR0VUCi0gICAv UkVDT1ZFUiAodXNpbmcgS2VybWl0IHByb3RvY29sKS4KLQotICAgWyBbMzI4XVRvcCBdIFsgWzMy OV1GVFAgVG9wIF0gWyBbMzMwXUMtS2VybWl0IEhvbWUgXSBbIFszMzFdS2VybWl0IEhvbWUKLSAg IF0KLQotMy43LiBUcmFuc2xhdGluZyBDaGFyYWN0ZXIgU2V0cwotCi0gICBBIHBvc3NpYmx5IHVu aXF1ZSBmZWF0dXJlIG9mIEtlcm1pdCdzIEZUUCBjbGllbnQgaXMgaXRzIGFiaWxpdHkgdG8KLSAg IGNvbnZlcnQgY2hhcmFjdGVyIHNldHMgd2hlbiB0cmFuc2ZlcnJpbmcgZmlsZXMgaW4gdGV4dCBt b2RlLAotICAgaW5kZXBlbmRlbnQgb2YgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgRlRQIHNlcnZl ciwgYXMgd2VsbCBhcyB0bwotICAgdHJhbnNsYXRlIHRoZSBjaGFyYWN0ZXIgc2V0cyBvZiBmaWxl bmFtZXMgcmVnYXJkbGVzcyBvZiB0cmFuc2ZlciBtb2RlLgotICAgRm9yIGNvbXBhdGliaWxpdHkg d2l0aCBleGlzdGluZyBGVFAgY2xpZW50cywgYW5kIGJlY2F1c2UgdGhlcmUgaXMgYQotICAgY2Vy dGFpbiBwZXJmb3JtYW5jZSBwZW5hbHR5LCBLZXJtaXQgd29uJ3QgZG8gdGhpcyB1bmxlc3MgeW91 IGFzayBmb3IKLSAgIGl0LiBJZiB5b3UgZW5hYmxlIHRoaXMgZmVhdHVyZSwgeW91IG5lZWQgdG8g aW5mb3JtIEtlcm1pdCBvZiB0aGUKLSAgIGNoYXJhY3RlciBzZXQgKHRvIGJlKSB1c2VkIG9uIHRo ZSBzZXJ2ZXIgYW5kIGluIHNvbWUgY2FzZXMgKGV4cGxhaW5lZAotICAgYmVsb3cpIGFsc28gdGhl IGxvY2FsIGZpbGUgY2hhcmFjdGVyIHNldC4gVGhpcyBkaXNjdXNzaW9uIGFzc3VtZXMgeW91Ci0g ICBrbm93IGEgYml0IGFib3V0IGNoYXJhY3RlciBzZXRzIChhcyB5b3UgbXVzdCBpZiB5b3UgaGF2 ZSB0byB1c2UgdGhlbSk7Ci0gICBzZWUgQ2hhcHRlciAxNiBvZiBbMzMyXVVzaW5nIEMtS2VybWl0 IGZvciBhIGRldGFpbGVkIHRyZWF0bWVudC4gVGhlCi0gICBLZXJtaXQgY29tbWFuZHMgZm9yIEZU UCBjaGFyYWN0ZXItc2V0IGNvbnZlcnNpb24gYXJlOgotCi0gICBTRVQgRlRQIENIQVJBQ1RFUi1T RVQtVFJBTlNMQVRJT04geyBPTiwgT0ZGIH0KLSAgICAgICAgICBXaGV0aGVyIHRvIHRyYW5zbGF0 ZSBjaGFyYWN0ZXIgc2V0cyB3aGVuIHRyYW5zZmVycmluZyB0ZXh0IGZpbGVzCi0gICAgICAgICAg d2l0aCBGVFAuIE9GRiBieSBkZWZhdWx0LiBTZXQgdGhpcyB0byBPTiB0byBlbmFibGUgY2hhcmFj dGVyLXNldAotICAgICAgICAgIHRyYW5zbGF0aW9uIGZvciBzdWJzZXF1ZW50IEZUUCB1cGxvYWRz IGFuZCBkb3dubG9hZHMuCi0KLSAgIFNFVCBGVFAgU0VSVkVSLUNIQVJBQ1RFUi1TRVQgWzMzM11u YW1lCi0gICAgICAgICAgVGV4dCBjaGFyYWN0ZXIgc2V0ICh0byBiZSkgdXNlZCBieSB0aGUgc2Vy dmVyLiBNb3N0IEZUUCBzZXJ2ZXJzCi0gICAgICAgICAgYXJlIGlnbm9yYW50IG9mIGNoYXJhY3Rl ciBzZXRzLCBzbyBhbGwgdHJhbnNsYXRpb25zIGFyZSBkb25lCi0gICAgICAgICAgdW5pbGF0ZXJh bGx5IGJ5IEtlcm1pdCdzIEZUUCBjbGllbnQuIFRoaXMgbWVhbnMgdGhhdCB3aGVuCi0gICAgICAg ICAgZG93bmxvYWRpbmcgZmlsZXMsIHlvdSBtdXN0IGtub3cgaW4gYWR2YW5jZSB0aGUgY2hhcmFj dGVyLXNldAotICAgICAgICAgIHVzZWQgaW4gdGhlIGZpbGVzIHlvdSBhcmUgZG93bmxvYWRpbmcg KGFuZCBpbiB0aGVpciBuYW1lcykuIFdoZW4KLSAgICAgICAgICB1cGxvYWRpbmcsIHlvdSBtdXN0 IHNwZWNpZnkgdGhlIGNoYXJhY3Rlci1zZXQgdG8gd2hpY2ggbG9jYWwKLSAgICAgICAgICBmaWxl bmFtZXMgYW5kIHRleHQtZmlsZSBjb250ZW50cyBhcmUgdG8gYmUgdHJhbnNsYXRlZCBmb3IKLSAg ICAgICAgICB0cmFuc21pc3Npb24gdG8gdGhlIHNlcnZlci4gSWYgeW91IFNFVCBGVFAKLSAgICAg ICAgICBDSEFSQUNURVItU0VULVRSQU5TTEFUSU9OIE9OIGJ1dCBkbyBub3Qgc3BlY2lmeSBhbiBG VFAKLSAgICAgICAgICBTRVJWRVItQ0hBUkFDVEVSLVNFVCwgWzMzNF1VVEY4IGlzIHVzZWQsIHNp bmNlIHRoaXMgaXMgdGhlIG5ldwotICAgICAgICAgIEludGVybmV0IHN0YW5kYXJkIGludGVybmF0 aW9uYWwgY2hhcmFjdGVyIHNldDsgaXQgaXMgdXB3YXJkcwotICAgICAgICAgIGNvbXBhdGlibGUg d2l0aCBBU0NJSSBhbmQgaXQgZW5jb21wYXNzZXMgbW9zdCB3cml0dGVuIGxhbmd1YWdlcwotICAg ICAgICAgIGFuZCB0aGVyZWZvcmUgZG9lcyBub3QgZmF2b3IgYW55IHBhcnRpY3VsYXIgZ3JvdXAg b2YgcGVvcGxlLCBhcwotICAgICAgICAgIGFueSBvdGhlciBkZWZhdWx0IHdvdWxkIGRvLiBJZiB5 b3UgU0VUIEZUUCBTRVJWRVItQ0hBUkFDVEVSLVNFVAotICAgICAgICAgIHRvIHNvbWV0aGluZyAo YW55dGhpbmcpIHdoZW4gRlRQIENIQVJBQ1RFUi1TRVQgVFJBTlNMQVRJT04gaXMKLSAgICAgICAg ICBPRkYsIHRoaXMgYWxzbyBzZXRzIHRoZSBsYXR0ZXIgT04uCi0KLSAgIFNFVCBGSUxFIENIQVJB Q1RFUi1TRVQgWzMzNV1uYW1lCi0gICAgICAgICAgVGhpcyBpcyB0aGUgcmVndWxhciBLZXJtaXQg KG5vbi1GVFAtc3BlY2lmaWMpIGNvbW1hbmQgZm9yCi0gICAgICAgICAgaWRlbnRpZnlpbmcgdGhl IGNoYXJhY3RlciBzZXQgKHRvIGJlKSB1c2VkIGluIGxvY2FsIHRleHQgZmlsZXMKLSAgICAgICAg ICBhbmQgZmlsZW5hbWVzLgotCi0gICBUTyBSRUlURVJBVEU6IElmIHlvdSBTRVQgRlRQIENIQVJB Q1RFUi1TRVQgVFJBTlNMQVRJT04gT04gYnV0IGRvIG5vdAotICAgc3BlY2lmeSBhbiBGVFAgU0VS VkVSLUNIQVJBQ1RFUi1TRVQsIG91dGJvdW5kIHRleHQgZmlsZXMgYXJlIGNvbnZlcnRlZAotICAg dG8gVVRGLTggYW5kIGluYm91bmQgdGV4dCBmaWxlcyBhcmUgYXNzdW1lZCB0byBiZSBVVEYtOC4g SWYgdGhpcyBpcyBub3QKLSAgIGFwcHJvcHJpYXRlLCBiZSBzdXJlIHRvIGFsc28gc3BlY2lmeSB0 aGUgZGVzaXJlZCBGVFAKLSAgIFNFUlZFUi1DSEFSQUNURVItU0VULgotCi0gICBZb3UgY2FuIHVz ZSAic3BlY2lhbCIgKG5vbi1BU0NJSSkgY2hhcmFjdGVycyBpbiBmaWxlbmFtZXMgaW4gYWxsIHRo ZQotICAgY2xpZW50IC8gc2VydmVyIGZpbGUgbWFuYWdlbWVudCBjb21tYW5kcyAoRlRQIE1LRElS LCBSTURJUiwgRElSRUNUT1JZLAotICAgVkRJUkVDVE9SWSwgREVMRVRFLCBldGMpLCBhbmQgYWxz byBpbiBmaWxlLXRyYW5zZmVyIGNvbW1hbmRzLiBXaGVuCi0gICBnaXZpbmcgY29tbWFuZHMgc3Vj aCBhcyBGVFAgRElSIChSRElSKSBhbmQgRlRQIFBXRCAoUlBXRCksIHRoZSByZXBseSBpcwotICAg dHJhbnNsYXRlZCB0b28sIHNvIHlvdSBjYW4gcmVhZCBpdC4gSW4gdGhpcyBleGFtcGxlLCB0aGUg Y2xpZW50IGFuZAotICAgc2VydmVyIHVzZSBlbnRpcmVseSBkaWZmZXJlbnQgY29kZXMgdG8gcmVw cmVzZW50IHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMKLSAgIG9mIEdlcm1hbjoKLQotICBDLUtlcm1p dD4gZnRwIHh5emNvcnAuZGUgL2Fub255bW91cwotICBDLUtlcm1pdD4gc2V0IGZ0cCBzZXJ2ZXIt Y2hhcmFjdGVyLXNldCBsYXRpbjEKLSAgQy1LZXJtaXQ+IHNldCBmaWxlIGNoYXJhY3Rlci1zZXQg Z2VybWFuCi0gIEMtS2VybWl0PiByY2QgU3Tvv71kdGUKLSAgQy1LZXJtaXQ+IHJwd2QKLSAgIi9w dWIvZnRwL1N077+9ZHRlIGlzIGN1cnJlbnQgZGlyZWN0b3J5IgotICBDLUtlcm1pdD4gcmRpcgot ICAtcnctcnctLS0tICAxIG9sYWYgICAgIDU0MDE4IEphbiAgNiAxNzo1OCBBZGVuYu+/vXR0ZWwu dHh0Ci0gIC1ydy1ydy0tLS0gIDEgdXJzdWxhICAgICAzNzMgSmFuICA1IDE1OjE5IEHvv71sYXIu dHh0Ci0gIC1ydy1ydy0tLS0gIDEgZ2lzYmVydCAgICA0ODIgSmFuICA1IDE1OjIwIEJsb3dhdHou dHh0Ci0gIC1ydy1ydy0tLS0gIDEgZ3VkcnVuICAgICAxMjQgSmFuICA1IDE1OjE5IELvv71ibGlu Z2VuLnR4dAotICAtcnctcnctLS0tICAxIG9sZ2EgICAgIDE0MzQ4IEphbiAgNyAxNDoyMyBL77+9 bG4udHh0Ci0KLSAgIFdoZW4gdGhlIGNsaWVudCBhbmQgc2VydmVyIGZpbGUgc3lzdGVtcyB1c2Ug ZGlmZmVyZW50IGNoYXJhY3RlciBzZXRzLAotICAgeW91IHNob3VsZCB0YWtlIGNhcmUgdG8gdXNl IG9ubHkgdGhvc2UgY2hhcmFjdGVycyB0aGF0IHRoZSB0d28gc2V0cwotICAgc2hhcmUgaW4gY29t bW9uIHdoZW4gY3JlYXRpbmcgZmlsZW5hbWVzIG9yIHRleHQtZmlsZSBjb250ZW50cy4gRm9yCi0g ICBleGFtcGxlLCBQQyBjb2RlIHBhZ2VzIGNvbnRhaW4gYSBsb3QgbGluZS0gYW5kIGJveC1kcmF3 aW5nIGNoYXJhY3RlcnMsCi0gICBhbmQgc29tZXRpbWVzICJzbWFydCBxdW90ZXMiLCBldGMsIHRo YXQgYXJlIG5vdCBmb3VuZCBpbiBJU08gc3RhbmRhcmQKLSAgIDgtYml0IGNoYXJhY3RlciBzZXRz LiBZb3Ugc2hvdWxkIGJlIGVzcGVjaWFsbHkgY2FyZWZ1bCB0byBhdm9pZCB1c2luZwotICAgc3Vj aCBjaGFyYWN0ZXJzIGluIGZpbGVuYW1lcy4KLQotICAgWyBbMzM2XUMtS2VybWl0IENoYXJhY3Rl ciBTZXRzIF0KLQotMy43LjEuIENoYXJhY3RlciBTZXRzIGFuZCBVcGxvYWRpbmcKLQotICAgS2Vy bWl0J3MgUFVUIGFuZCBNUFVUIGNvbW1hbmRzIGluY2x1ZGUgZnVsbCBmaWxlLXNjYW5uaW5nIGNh cGFiaWxpdGllcywKLSAgIGFzIGRlc2NyaWJlZCBpbiBbMzM3XVNlY3Rpb24gNC4gVGh1cyBpZiBG VFAgQ0hBUkFDVEVSLVNFVC1UUkFOU0xBVElPTgotICAgaXMgT04gYW5kIHlvdXIgY2hhcmFjdGVy LXNldCBhc3NvY2lhdGlvbnMgYXJlIHNldCB1cCBhcHByb3ByaWF0ZWx5LAotICAgS2VybWl0IGF1 dG9tYXRpY2FsbHkgc3dpdGNoZXMgb24gYSBwZXItZmlsZSBiYXNpcyBiZXR3ZWVuIHRleHQgYW5k Ci0gICBiaW5hcnkgbW9kZSwgYW5kIGZvciBlYWNoIHRleHQgZmlsZSBiZXR3ZWVuIHlvdXIgY2hv c2VuIDctYml0IHRleHQKLSAgIGNoYXJhY3RlciBzZXQgKGUuZy4gQVNDSUkgb3IgSVNPIDY0NiBH ZXJtYW4pLCA4LWJpdCB0ZXh0IChlLmcuIExhdGluLTEKLSAgIG9yIEphcGFuZXNlIEVVQyksIFVD Uy0yLCBhbmQgVVRGLTgsIGFuZCBjb252ZXJ0cyBlYWNoIG9mIHRoZXNlCi0gICBhdXRvbWF0aWNh bGx5IHRvIHRoZSBzZXJ2ZXIgY2hhcmFjdGVyLXNldCwgYW5kIGZ1cnRoZXJtb3JlCi0gICBhdXRv bWF0aWNhbGx5IGRpZmZlcmVudGlhdGVzIGJldHdlZW4gdGhlIExpdHRsZSBhbmQgQmlnIEVuZGlh biBmb3JtcyBvZgotICAgVUNTLTIsIGFsd2F5cyBzZW5kaW5nIGluIEJpZyBFbmRpYW4gZm9ybS4K LQotICAgICBXQVJOSU5HOiBJdCBpcyBub3QgYWR2aXNhYmxlIHRvIHVzZSBVQ1MtMiAob3IgYW55 IFVuaWNvZGUKLSAgICAgdHJhbnNmb3JtYXRpb24gb3RoZXIgdGhhbiBVVEYtOCkgIm9uIHRoZSB3 aXJlIiwgaS5lLiBhcyBhIHNlcnZlcgotICAgICBjaGFyYWN0ZXIgc2V0LiBNb3N0IEZUUCBzZXJ2 ZXJzIGFyZSBub3QgYWJsZSB0byBjb3BlIHdpdGggaXQsIHNpbmNlCi0gICAgIGl0IGNvbnRhaW5z IGxvdHMgb2YgMCAoTlVMKSBjaGFyYWN0ZXJzLiBJZiB5b3UgZG8gdXNlIGl0LCBLZXJtaXQKLSAg ICAgZG9lcyBub3QgdHJhbnNsYXRlIGZpbGVuYW1lcyB0byBvciBmcm9tIFVDUy0yLCBmb3IgcmVh c29ucyB3ZWxsCi0gICAgIGtub3duIHRvIEMgcHJvZ3JhbW1lcnMgKGZvciBleGFtcGxlLCBVTklY IEFQSXMgYXNzdW1lIGZpbGVuYW1lCi0gICAgIHN0cmluZ3MgYXJlIE5VTC10ZXJtaW5hdGVkKS4g WzMzOF1VVEYtOCBpcyB0aGUgcHJlZmVycmVkIChhbmQKLSAgICAgc3RhbmRhcmQpIFVuaWNvZGUg Zm9ybWF0IGZvciB0aGUgSW50ZXJuZXQuCi0KLSAgIEZUUCBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0 aW9ucyBkaWZmZXIgZnJvbSB0aGUgcmVndWxhciBLZXJtaXQgb25lcyBieQotICAgbm90IHJlc3Ry aWN0aW5nIHRyYW5zbGF0aW9ucyB0byBhIGZpbGUtY2hhcmFjdGVyLXNldCAvCi0gICB0cmFuc2Zl ci1jaGFyYWN0ZXItc2V0IHBhaXIuIFlvdSBjYW4gaGF2ZSBLZXJtaXQncyBGVFAgY2xpZW50IHRy YW5zbGF0ZQotICAgYmV0d2VlbiBhbnkgcGFpciBvZiBjaGFyYWN0ZXIgc2V0cyBpdCBrbm93cyBh Ym91dC4gWW91IGNhbiBzZWUgdGhlIGxpc3QKLSAgIG9mIHN1cHBvcnRlZCBjaGFyYWN0ZXIgc2V0 cyBieSB0eXBpbmcgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmc6Ci0KLSAgc2V0IGZ0cCBzZXJ2ZXIt Y2hhcmFjdGVyLXNldCA/Ci0gIHNldCBmaWxlIGNoYXJhY3Rlci1zZXQgPwotCi0gICBBIHR5cGlj YWwgbGlzdCBsb29rcyBsaWtlIHRoaXMgKFszMzldQ0xJQ0sgSEVSRSBmb3IgYW4gZXhwbGFuYXRp b24gb2YKLSAgIHRoZSBuYW1lcyk6Ci0KLSAgQy1LZXJtaXQ+c2V0IGZpbGUgY2hhciA/IE9uZSBv ZiB0aGUgZm9sbG93aW5nOgotICAgYXNjaWkgICAgICAgICAgICBjcDg2OS1ncmVlayAgICAgICBo ZWJyZXctNyAgICAgICAgIG1hem92aWEtcGMKLSAgIGJyaXRpc2ggICAgICAgICAgY3lyaWxsaWMt aXNvICAgICAgaGVicmV3LWlzbyAgICAgICBuZXh0LW11bHRpbmF0aW9uYWwKLSAgIGJ1bGdhcmlh LXBjICAgICAgZGFuaXNoICAgICAgICAgICAgaHAtcm9tYW44ICAgICAgICBub3J3ZWdpYW4KLSAg IGNhbmFkaWFuLWZyZW5jaCAgZGVjLWthbmppICAgICAgICAgaHVuZ2FyaWFuICAgICAgICBwb3J0 dWd1ZXNlCi0gICBjcDEyNTAgICAgICAgICAgIGRlYy1tdWx0aW5hdGlvbmFsIGlzbzIwMjJqcC1r YW5qaSAgc2hpZnQtamlzLWthbmppCi0gICBjcDEyNTEtY3lyaWxsaWMgIGRnLWludGVybmF0aW9u YWwgIGl0YWxpYW4gICAgICAgICAgc2hvcnQta29pCi0gICBjcDEyNTIgICAgICAgICAgIGR1dGNo ICAgICAgICAgICAgIGppczcta2FuamkgICAgICAgc3BhbmlzaAotICAgY3A0MzcgICAgICAgICAg ICBlbG90OTI3LWdyZWVrICAgICBrb2k4ICAgICAgICAgICAgIHN3ZWRpc2gKLSAgIGNwODUwICAg ICAgICAgICAgZWxvdDkyOC1ncmVlayAgICAga29pOHIgICAgICAgICAgICBzd2lzcwotICAgY3A4 NTIgICAgICAgICAgICBldWMtanAgICAgICAgICAgICBrb2k4dSAgICAgICAgICAgIHVjczIKLSAg IGNwODU1LWN5cmlsbGljICAgZmlubmlzaCAgICAgICAgICAgbGF0aW4xLWlzbyAgICAgICB1dGY4 Ci0gICBjcDg1OCAgICAgICAgICAgIGZyZW5jaCAgICAgICAgICAgIGxhdGluMi1pc28KLSAgIGNw ODYyLWhlYnJldyAgICAgZ2VybWFuICAgICAgICAgICAgbGF0aW45LWlzbwotICAgY3A4NjYtY3ly aWxsaWMgICBncmVlay1pc28gICAgICAgICBtYWNpbnRvc2gtbGF0aW4KLSAgQy1LZXJtaXQ+Ci0K LSAgIFRodXMgeW91IGNhbiB0cmFuc2xhdGUgbm90IG9ubHkgYmV0d2VlbiBwcml2YXRlIHNldHMg KGxpa2UgUEMgY29kZQotICAgcGFnZXMpIGFuZCBzdGFuZGFyZCBvbmVzIChsaWtlIExhdGluLTEp IGFzIGluIEtlcm1pdCBwcm90b2NvbCwgYnV0IGFsc28KLSAgIGJldHdlZW4gYW55IGdpdmVuIHBh aXIgb2YgcHJpdmF0ZSBzZXRzIChlLmcuIENQODUyIGFuZCBNYXpvdmlhKS4gQWxsCi0gICBjb252 ZXJzaW9ucyBnbyB0aHJvdWdoIFVuaWNvZGUgYXMgdGhlIGludGVybWVkaWF0ZSBjaGFyYWN0ZXIg c2V0LAotICAgcmVzdWx0aW5nIGluIGEgbWluaW11bSBvZiBjaGFyYWN0ZXIgbG9zcywgc2luY2Ug VW5pY29kZSBpcyBhIHN1cGVyc2V0Ci0gICBvZiBhbGwgb3RoZXIgY2hhcmFjdGVyIHNldHMga25v d24gdG8gS2VybWl0LgotCi0gICBJbiBhZGRpdGlvbiB0byB0aGUgU0VUIGNvbW1hbmRzIGxpc3Rl ZCBhYm92ZSwgdGhlIEZUUCBQVVQgYW5kIE1QVVQKLSAgIGNvbW1hbmRzIGluY2x1ZGUgc3dpdGNo ZXMgdGhhdCBhcHBseSBvbmx5IHRvIHRoZSBjdXJyZW50IGNvbW1hbmQ6Ci0KLSAgIC9MT0NBTC1D SEFSQUNURVItU0VUOm5hbWUKLSAgIC9TRVJWRVItQ0hBUkFDVEVSLVNFVDpuYW1lCi0gICAgICAg ICAgVXNlIHRoZXNlIHN3aXRjaGVzIHRvIGZvcmNlIGEgcGFydGljdWxhciB0cmFuc2xhdGlvbi4g VGhlc2UKLSAgICAgICAgICBzd2l0Y2hlcyBvdmVycmlkZSB0aGUgZ2xvYmFsIEZUUCBDSEFSQUNU RVItU0VULVRSQU5TTEFUSU9OIGFuZAotICAgICAgICAgIFNFUlZFUi1DSEFSQUNURVItU0VUIHNl dHRpbmdzIGFuZCBhbHNvIGNoYXJhY3Rlci1zZXQKLSAgICAgICAgICBkaWZmZXJlbnRpYXRpb24g YnkgZmlsZSBzY2FubmluZyBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBQVVQgb3IKLSAgICAgICAg ICBNUFVUIGNvbW1hbmQuIFRoZSBmaWxlIHNjYW4gaXMgc3RpbGwgcGVyZm9ybWVkLCBob3dldmVy LCB0bwotICAgICAgICAgIGRldGVybWluZSB3aGV0aGVyIHRoZSBmaWxlIGlzIHRleHQgb3IgYmlu YXJ5OyB0aHVzIHRoZXNlCi0gICAgICAgICAgc3dpdGNoZXMgZG8gbm90IGFmZmVjdCBiaW5hcnkg ZmlsZXMgdW5sZXNzIHlvdSBhbHNvIGluY2x1ZGUgdGhlCi0gICAgICAgICAgL1RFWFQgc3dpdGNo IHRvIGZvcmNlIGFsbCBmaWxlcyB0byBiZSB0cmVhdGVkIGFzIHRleHQuCi0KLSAgIEluIG90aGVy IHdvcmRzLCBpZiB5b3UgaW5jbHVkZSBvbmUgb3IgYm90aCBvZiB0aGVzZSBzd2l0Y2hlcyB3aXRo IGEgUFVUCi0gICBvciBNUFVUIGNvbW1hbmQsIHRoZXkgYXJlIHVzZWQuIFNpbWlsYXJseSwgdGhl IC9UUkFOU1BBUkVOVCBzd2l0Y2gKLSAgIGRpc2FibGVzIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRp b24gZm9yIHRoZSBQVVQgb3IgTVBVVCBjb21tYW5kIGRlc3BpdGUKLSAgIHRoZSBwcmV2YWlsaW5n IEZUUCBDSEFSQUNURVItU0VULVRSQU5TTEFUSU9OIGFuZCBTRVJWRVItQ0hBUkFDVEVSLVNFVAot ICAgc2V0dGluZ3MuCi0KLSAgIFdoZW4gdXBsb2FkaW5nLCB0aGUgRklMRSBDSEFSQUNURVItU0VU IHNldHRpbmcgaXMgaWdub3JlZCB1bmxlc3MgeW91Ci0gICBoYXZlIGZvcmNlZCBLZXJtaXQgbm90 IHRvIFszNDBdc2NhbiBsb2NhbCBmaWxlcyBieSBpbmNsdWRpbmcgYSAvVEVYVCBvcgotICAgL0JJ TkFSWSBzd2l0Y2ggd2l0aCB5b3VyIFtNXVBVVCBjb21tYW5kLCBvciBieSBkaXNhYmxpbmcgYXV0 b21hdGljCi0gICB0ZXh0L2JpbmFyeSBzd2l0Y2hpbmcgaW4gc29tZSBvdGhlciB3YXkuCi0KLSAg IEV4YW1wbGVzOgotCi0gICAgMS4gU3VwcG9zZSB5b3UgaGF2ZSBhIENQODUyIChFYXN0IEV1cm9w ZWFuKSB0ZXh0IGZpbGUgdGhhdCB5b3Ugd2FudCB0bwotICAgICAgIHVwbG9hZCBhbmQgc3RvcmUg aW4gSVNPIExhdGluIEFscGhhYmV0IDIgZW5jb2Rpbmc6Ci0gIGZ0cCBwdXQgL2xvY2FsLWNoYXI6 Y3A4NTIgL3NlcnZlci1jaGFyOmxhdGluMiBtYWd5YXIudHh0Ci0KLSAgICAyLiBTdXBwb3NlIHlv dSBhbHdheXMgd2FudCB5b3VyIHRleHQgZmlsZXMgY29udmVydGVkIHRvIExhdGluLTIgd2hlbgot ICAgICAgIHVwbG9hZGluZyB3aXRoIEZUUC4gVGhlbiBwdXQ6Ci0gIHNldCBmdHAgc2VydmVyLWNo YXJhY3Rlci1zZXQgbGF0aW4yCi0KLSAgICAgICBpbiB5b3VyIEtlcm1pdCBjdXN0b21pemF0aW9u IGZpbGUsIGFuZCB0aGVuIHlvdSBjYW4gb21pdCB0aGUKLSAgICAgICAvU0VSVkVSLUNIQVJBQ1RF Ui1TRVQ6IHN3aXRjaCBmcm9tIHlvdXIgRlRQIFBVVCBjb21tYW5kczoKLSAgZnRwIHB1dCAvbG9j YWwtY2hhcjpjcDg1MiBtYWd5YXIudHh0Ci0KLSAgICAzLiBOb3cgc3VwcG9zZSB0aGF0IGFsbCB0 aGUgdGV4dCBmaWxlcyBvbiB5b3VyIFBDIGFyZSB3cml0dGVuIGluCi0gICAgICAgSHVuZ2FyaWFu LCBidXQgdGhleSBoYXZlIGEgdmFyaWV0eSBvZiBlbmNvZGluZ3MsIGFuZCB5b3UgZG9uJ3Qgd2Fu dAotICAgICAgIHRvIGhhdmUgdG8gaW5jbHVkZSB0aGUgL0xPQ0FMLUNIQVJBQ1RFUi1TRVQ6IHN3 aXRjaCBvbiBldmVyeSBGVFAKLSAgICAgICBQVVQgY29tbWFuZCwgb3IgKG1vcmUgdG8gdGhlIHBv aW50KSB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHNlbmQgYQotICAgICAgIG1peHR1cmUgb2YgdGhl c2UgZmlsZXMgYWxsIGF0IG9uY2UuIFB1dCB0aGVzZSBjb21tYW5kcyBpbiB5b3VyCi0gICAgICAg S2VybWl0IGN1c3RvbWl6YXRpb24gZmlsZToKLSAgc2V0IGZ0cCBzZXJ2ZXItY2hhcmFjdGVyLXNl dCBsYXRpbjIgICAgICAgICAgICA7IElTTyA4ODU5LTIKLSAgc2V0IGZpbGUgZGVmYXVsdCA3LWJp dC1jaGFyYWN0ZXItc2V0IGh1bmdhcmlhbiA7IElTTyA2NDYgSHVuZ2FyaWFuCi0gIHNldCBmaWxl IGRlZmF1bHQgOC1iaXQtY2hhcmFjdGVyLXNldCBjcDg1MiAgICAgOyBQQyBFYXN0IEV1cm9wZWFu IENvZGUgUGFnZQotCi0gICAgICAgYW5kIG5vdyBQVVQgYW5kIE1QVVQgd2lsbCBhdXRvbWF0aWNh bGx5IGRldGVjdCBhbmQgc3dpdGNoIGFtb25nIElTTwotICAgICAgIDY0NiBIdW5nYXJpYW4sIENv ZGUgUGFnZSA4NTIsIFVURi04LCBhbmQgVUNTLTIgZW5jb2RpbmdzLAotICAgICAgIHRyYW5zbGF0 aW5nIGVhY2ggb25lIHRvIExhdGluLTIgZm9yIHVwbG9hZGluZzoKLSAgZnRwIHB1dCAqLnR4dAot Ci0gICBBbmQgc2luY2UgYmluYXJ5IGZpbGVzIGFyZSBhbHNvIGRldGVjdGVkIGF1dG9tYXRpY2Fs bHksIHRoZSBsYXR0ZXIgY2FuCi0gICBiZSBzaW1wbGlmaWVkIHRvOgotCi0gIGZ0cCBwdXQgKgot Ci0gICBldmVuIHdoZW4gIioiIG1hdGNoZXMgYSBkaXZlcnNlIGNvbGxlY3Rpb24gb2YgYmluYXJ5 IGFuZCB0ZXh0IGZpbGVzLAotICAgYmVjYXVzZSB0cmFuc2xhdGlvbnMgYXJlIHNraXBwZWQgYXV0 b21hdGljYWxseSBmb3IgYmluYXJ5IGZpbGVzLgotCi0zLjcuMi4gQ2hhcmFjdGVyIFNldHMgYW5k IERvd25sb2FkaW5nCi0KLSAgIFRoZSBjb21tYW5kcyBhbmQgc3dpdGNoZXMgYXJlIHRoZSBzYW1l IGFzIGZvciB1cGxvYWRpbmcsIGJ1dCBhdXRvbWF0aWMKLSAgIGNoYXJhY3Rlci1zZXQgc3dpdGNo aW5nIHdvcmtzIGRpZmZlcmVudGx5LCBzaW5jZSBLZXJtaXQgY2FuJ3Qgc2NhbiB0aGUKLSAgIHNl cnZlciBmaWxlcyBpbiBhZHZhbmNlLiBJbnN0ZWFkLCB0aGUgdHJhbnNmZXIgbW9kZSAodGV4dCBv ciBiaW5hcnkpIGlzCi0gICBiYXNlZCBvbiB0aGUgZmlsZW5hbWVzOyBlYWNoIG5hbWUgaXMgY29t cGFyZWQgd2l0aCBLZXJtaXQncyBsaXN0IG9mCi0gICB0ZXh0IG5hbWUgcGF0dGVybnMgYW5kIGJp bmFyeSBuYW1lIHBhdHRlcm5zLiBJZiB0aGUgbmFtZSBtYXRjaGVzIGEKLSAgIGJpbmFyeSBwYXR0 ZXJuIChmb3IgZXhhbXBsZSwgaWYgdGhlIGZpbGVuYW1lIGlzIG9vZmEudGFyLmd6IGFuZCBvbmUg b2YKLSAgIHRoZSBmaWxlbmFtZSBwYXR0ZXJucyBpcyAiKi5neiIpLCB0aGUgZmlsZSBpcyBkb3du bG9hZGVkIGluIGJpbmFyeQotICAgbW9kZTsgb3RoZXJ3aXNlIGlmIGl0IG1hdGNoZXMgYSB0ZXh0 IHBhdHRlcm4gKGUuZy4gb29mYS50eHQgbWF0Y2hlcwotICAgIioudHh0IiksIGl0IGlzIHRyYW5z ZmVycmVkIGluIHRleHQgKCJhc2NpaSIpIG1vZGUuIE90aGVyd2lzZSwgaXQgaXMKLSAgIHRyYW5z ZmVycmVkIGluIHRoZSBwcmV2YWlsaW5nIEZUUCBUWVBFLgotCi0gICBJbiBDLUtlcm1pdCA4LjAs IHRoZSBwYXR0ZXJuIGxpc3RzIHVzZWQgd2l0aCBGVFAgR0VUIGFyZSBub3QgdGhlIHNhbWUKLSAg IGxpc3RzIHVzZWQgd2l0aCBLZXJtaXQgdHJhbnNmZXJzLCBhbmQgY2FuIG5vdCBiZSB2aWV3ZWQg d2l0aCBTSE9XCi0gICBQQVRURVJOUywgbm9yIGFkanVzdGVkIHdpdGggQUREIGFuZCBSRU1PVkUg VEVYVC1QQVRURVJOUyBhbmQKLSAgIEJJTkFSWS1QQVRURVJOUywgb3IgU0VUIEZJTEUgVEVYVC1Q QVRURVJOUyBhbmQgQklOQVJZLVBBVFRFUk5TLgotICAgQ29uZmlndXJhdGlvbiBvZiB0aGUgRlRQ IHBhdHRlcm5zIGxpc3Qgd2lsbCBiZSBhZGRlZCBpbiBhIGZ1dHVyZQotICAgcmVsZWFzZS4KLQot ICAgRXhhbXBsZXM6Ci0KLSAgIGdldCAvc2VydmVyLWNoYXI6bGF0aW4xIC9sb2NhbC1jaGFyOmNw ODUwIEdy77+977+9ZS50eHQKLSAgICAgICAgICBJbiB0aGlzIGNvbW1hbmQsIHRoZSBmaWxlbmFt ZSBjb250YWlucyBzcGVjaWFsIGNoYXJhY3RlcnMsIHdoaWNoCi0gICAgICAgICAgeW91IGVudGVy IHVzaW5nIHdoYXRldmVyIGNoYXJhY3RlciBzZXQgeW91ciBsb2NhbCBjb21wdXRlciB1c2VzLAot ICAgICAgICAgIGluIHRoaXMgY2FzZSBQQyBDb2RlIFBhZ2UgODUwIChjcDg1MCkuIFRoZSBjb21t YW5kIHRlbGxzIEtlcm1pdAotICAgICAgICAgIChpbiBjYXNlIGl0IGRpZG4ndCBrbm93IGFscmVh ZHkgZnJvbSBpdHMgRklMRSBDSEFSQUNURVItU0VUCi0gICAgICAgICAgc2V0dGluZykgdGhhdCB0 aGUgbG9jYWwgY2hhcmFjdGVyIHNldCBpcyBjcDg1MCBhbmQgdGhlIHNlcnZlcidzCi0gICAgICAg ICAgY2hhcmFjdGVyLXNldCBpcyBJU08gODg1OS0xIExhdGluIEFscGhhYmV0IDEgKGxhdGluMSku IEtlcm1pdAotICAgICAgICAgIHRyYW5zbGF0ZXMgdGhlIGZpbGVuYW1lIGZyb20gY3A4NTAgdG8g bGF0aW4xIGFuZCBzZW5kcyB0aGUKLSAgICAgICAgICBsYXRpbjEgbmFtZSB0byB0aGUgc2VydmVy LiBTaW5jZSBpdCdzIGEgdGV4dCBmaWxlIChtYXRjaGVzCi0gICAgICAgICAgIioudHh0IiksIGl0 cyBjb250ZW50cyBhcmUgdHJhbnNsYXRlZCB0byBjcDg1MCBvbiBhcnJpdmFsLCBhbmQKLSAgICAg ICAgICBpdCBpcyBzYXZlZCB3aXRoIGEgY3A4NTAgbmFtZS4KLQotICAgbWdldCAvdGV4dCAvc2Vy dmVyOmxhdGluMSAvbG9jYWw6dXRmOCAqLnR4dAotICAgICAgICAgIFRoaXMgY29tbWFuZDoKLQot ICAgICAgICAgICsgVGVsbHMgQy1LZXJtaXQgdGhhdCB0aGUgc2VydmVyJ3MgZmlsZXMgYXJlIGVu Y29kZWQgaW4gSVNPCi0gICAgICAgICAgICA4ODU5LTEgTGF0aW4gQWxwaGFiZXQgMS4KLSAgICAg ICAgICArIFRlbGxzIEMtS2VybWl0IHRvIHRyYW5zbGF0ZSB0aGUgaW5jb21pbmcgZmlsZXMgaW50 byBVbmljb2RlCi0gICAgICAgICAgICBVVEYtOCBmb3Igc3RvcmFnZS4KLSAgICAgICAgICArIEFz a3MgdGhlIHNlcnZlciB0byBzZW5kIGFsbCAiLnR4dCIgZmlsZXMgaW4gdGV4dCBtb2RlLgotCi0g ICBtZ2V0IC9zZXJ2ZXI6bGF0aW4xIC9sb2NhbDp1dGY4ICoKLSAgICAgICAgICBUZWxscyBLZXJt aXQgdG8gZ2V0IGFsbCBmaWxlcyBmcm9tIHRoZSBzZXJ2ZXIncyBkaXJlY3RvcnksCi0gICAgICAg ICAgc3dpdGNoaW5nIGJldHdlZW4gdGV4dCBhbmQgYmluYXJ5IG1vZGUgYmFzZWQgb24gdGhlIGZp bGVuYW1lLgotICAgICAgICAgIFRoZSBuYW1lcyBvZiBhbGwgdGhlIGZpbGVzIGFyZSB0cmFuc2xh dGVkICh0byBVVEYtOCBpbiB0aGlzCi0gICAgICAgICAgY2FzZSksIGJ1dCBjb250ZW50cyBhcmUg dHJhbnNsYXRlZCAoYWxzbyB0byBVVEYtOCkgb25seSBmb3IgdGV4dAotICAgICAgICAgIGZpbGVz LgotCi0gICBOb3RlIHRoYXQgYW55IHBhaXIgb2YgOC1iaXQgY2hhcmFjdGVyIHNldHMgaXMgbGlr ZWx5IHRvIGhhdmUgc29tZQotICAgaW5jb21wYXRpYmlsaXRpZXMuIEFueSBjaGFyYWN0ZXJzIGlu IHRoZSBzb3VyY2UgZmlsZSB0aGF0IGRvIG5vdCBoYXZlCi0gICBlcXVpdmFsZW50cyBpbiB0aGUg ZGVzdGluYXRpb24gZmlsZSdzIGNoYXJhY3RlciBzZXQgYXJlIGNvbnZlcnRlZCB0bwotICAgcXVl c3Rpb24gbWFya3MuIFRoaXMgYXBwbGllcyB0byBib3RoIGZpbGVuYW1lcyBhbmQgdG8gdGV4dCBm aWxlCi0gICBjb250ZW50cy4KLQotICAgQWxzbyBub3RlIHRoYXQgdGhlIHNlcnZlcidzIGFiaWxp dHkgdG8gYWNjZXB0IHNwZWNpYWwgY2hhcmFjdGVycyBpbgotICAgZmlsZW5hbWVzIGRlcGVuZHMg b24gdGhlIHBhcnRpY3VsYXIgc2VydmVyLiBGb3IgZXhhbXBsZToKLQotICBnZXQgR3Lvv73vv71l LnR4dAotCi0gICB3b3JrcyB3aXRoIFdVLUZUUEQsIGJ1dDoKLQotICBtZ2V0IEdy77+977+9Ki50 eHQKLQotICAgZG9lcyBub3QuCi0KLTMuNy4zLiBSRkMyNjQwCi0KLSAgIFszNDFdUkZDMjY0MCwg SnVseSAxOTk5LCBzcGVjaWZpZXMgYSBtZXRob2QgYnkgd2hpY2ggdGhlIEZUUCBjbGllbnQgYW5k Ci0gICBzZXJ2ZXIgY2FuIG5lZ290aWF0ZSB0aGUgdXNlIG9mIFVURjguIEhvd2V2ZXIsIFJGQzI2 NDAtY2FwYWJsZSBzZXJ2ZXJzCi0gICBhcmUgcmFyZSB0byBub25leGlzdGVudCBhdCB0aGlzIHdy aXRpbmcsIGFuZCBpbiBhbnkgY2FzZSB5b3UgZG9uJ3QgbmVlZAotICAgdGhlbSB0byBiZSBhYmxl IHRvIHRyYW5zZmVyIHRleHQgaW4gVVRGOC4gQy1LZXJtaXQgbGV0cyB5b3UgdXBsb2FkIGFuZAot ICAgZG93bmxvYWQgdGV4dCBmaWxlcyBpbiBhbnkgY2hhcmFjdGVyIHNldCBpdCBrbm93cyBhYm91 dCwgY29udmVydGluZyB0bwotICAgb3IgZnJvbSBhbnkgb3RoZXIgY2hhcmFjdGVyIHNldCBpdCBr bm93cyBhYm91dCwgd2l0aG91dCB0aGUga25vd2xlZGdlLAotICAgcGVybWlzc2lvbiwgb3IgY29v cGVyYXRpb24gb2YgdGhlIHNlcnZlciwgYW5kIHJlZ2FyZGxlc3Mgb2YgaXRzCi0gICBjYXBhYmls aXRpZXMuCi0KLSAgIFsgWzM0Ml1Ub3AgXSBbIFszNDNdRlRQIFRvcCBdIFsgWzM0NF1DLUtlcm1p dCBIb21lIF0gWyBbMzQ1XUtlcm1pdCBIb21lCi0gICBdCi0KLTMuOC4gRlRQIENvbW1hbmQgU2hv cnRjdXRzCi0KLSAgIEMtS2VybWl0J3MgRlRQIGNsaWVudCBjb2V4aXN0cyB3aXRoIG90aGVyIEMt S2VybWl0IGZ1bmN0aW9ucyBieQotICAgcmVxdWlyaW5nIHRoZSAiZnRwIiBwcmVmaXggZm9yIGVh Y2ggRlRQLXJlbGF0ZWQgY29tbWFuZDogRlRQIE9QRU4sIEZUUAotICAgR0VULCBGVFAgQllFLCBh bmQgc28gb24uIEZvciBpbnRlcmFjdGl2ZSB1c2UsIGhvd2V2ZXIsIHRoaXMgY2FuIGJlCi0gICBy YXRoZXIgYXdrd2FyZCBhbmQgc29tZXRpbWVzIHN1cnByaXNpbmcsIGZvciBleGFtcGxlIHdoZW4g YSBHRVQgY29tbWFuZAotICAgc3RhcnRzIGEgS2VybWl0IEdFVCByYXRoZXIgdGhhbiBhbiBGVFAg R0VULiBJbiBmYWN0LCBtYW55IEtlcm1pdAotICAgY29tbWFuZHMgbWlnaHQganVzdCBhcyBlYXNp bHkgYXBwbHkgdG8gYW4gRlRQIGNvbm5lY3Rpb246IEdFVCwgUFVUCi0gICAoU0VORCksIEJZRSwg YW5kIENMT1NFLiBUaGUgZm9sbG93aW5nIGNvbW1hbmQgbGV0cyB5b3UgY2hvb3NlIGhvdyB0aGVz ZQotICAgY29tbWFuZHMgYXJlIGludGVycHJldGVkOgotCi0gICBTRVQgR0VULVBVVC1SRU1PVEUg eyBBVVRPLCBLRVJNSVQsIEZUUCB9Ci0gICAgICAgICAgQ29udHJvbHMgdGhlIG9yaWVudGF0aW9u IG9mIEdFVCwgUFVULCBSRU1PVEUgYW5kIG90aGVyCi0gICAgICAgICAgZmlsZS10cmFuc2ZlciBh bmQgY2xpZW50L3NlcnZlciBjb21tYW5kcyB0aGF0IG1pZ2h0IGFwcGx5IHRvCi0gICAgICAgICAg ZWl0aGVyIEtlcm1pdCBvciBGVFAuIFRoZSBkZWZhdWx0IHNldHRpbmcgaXMgQVVUTywgbWVhbmlu ZyB0aGF0Ci0gICAgICAgICAgdGhlc2UgY29tbWFuZHMgYXBwbHkgdG8gRlRQIGlmIGFuIEZUUCBj b25uZWN0aW9uIGlzIG9wZW4sIGFuZCB0bwotICAgICAgICAgIEtlcm1pdCBvdGhlcndpc2UuIEtF Uk1JVCBtZWFucyB0aGV5IGFsd2F5cyBhcHBseSB0byBLZXJtaXQsIEZUUAotICAgICAgICAgIG1l YW5zIHRoZXkgYWx3YXlzIGFwcGx5IHRvIEZUUC4KLQotICAgSGVyZSBpcyBhIGNvbXBsZXRlIGxp c3Qgb2YgYWZmZWN0ZWQgY29tbWFuZHM6Ci0KLSBLZXJtaXQgQ29tbWFuZCAgICAgICAgICAgICAg IEZUUCBFcXVpdmFsZW50Ci0gIChub25lKSAgICAgICAgICAgICAgICAgICAgICAgRlRQIFsgT1BF TiBdCi0gIExPR0lOICAgICAgICAgICAgICAgICAgICAgICAgRlRQIFVTRVIKLSAgTE9HT1VUICAg ICAgICAgICAgICAgICAgICAgICBGVFAgUkVTRVQKLSAgQllFICAgICAgICAgICAgICAgICAgICAg ICAgICBGVFAgQllFCi0gIEZJTklTSCAgICAgICAgICAgICAgICAgICAgICAgRlRQIEJZRQotICBD TE9TRSAgICAgICAgICAgICAgICAgICAgICAgIEZUUCBCWUUKLSAgSEFOR1VQICAgICAgICAgICAg ICAgICAgICAgICBGVFAgQllFCi0gIEJJTkFSWSAgICAgICAgICAgICAgICAgICAgICAgRlRQIFRZ UEUgQklOQVJZCi0gIFRFWFQgKG9yIEFTQ0lJKSAgICAgICAgICAgICAgRlRQIFRZUEUgQVNDSUkK LSAgU0VORCAob3IgUFVUKSAgICAgICAgICAgICAgICBGVFAgUFVUCi0gIE1TRU5EIChvciBNUFVU KSAgICAgICAgICAgICAgRlRQIE1QVVQKLSAgUkVTRU5EICAgICAgICAgICAgICAgICAgICAgICBG VFAgUFVUIC9SRUNPVkVSCi0gIENTRU5EICAgICAgICAgICAgICAgICAgICAgICAgRlRQIFBVVCAv Q09NTUFORAotICBHRVQgICAgICAgICAgICAgICAgICAgICAgICAgIEZUUCBHRVQKLSAgTUdFVCAg ICAgICAgICAgICAgICAgICAgICAgICBGVFAgTUdFVAotICBSRUdFVCAgICAgICAgICAgICAgICAg ICAgICAgIEZUUCBHRVQgL1JFQ09WRVIKLSAgUkVNT1RFIEhFTFAgICAgICAoUkhFTFApICAgICBG VFAgSEVMUAotICBSRU1PVEUgQ0QgICAgICAgIChSQ0QpICAgICAgIEZUUCBDRCAoQ1dEKQotICBS RU1PVEUgUFdEICAgICAgIChSUFdEKSAgICAgIEZUUCBQV0QKLSAgUkVNT1RFIERJUkVDVE9SWSAo UkRJUikgICAgICBGVFAgRElSRUNUT1JZCi0gIFJFTU9URSBERUxFVEUgICAgKFJERUwpICAgICAg RlRQIERFTEVURQotICBSRU1PVEUgTUtESVIgICAgIChSTUtESVIpICAgIEZUUCBNS0RJUgotICBS RU1PVEUgUk1ESVIgICAgIChSUk1ESVIpICAgIEZUUCBSTURJUgotICBSRU1PVEUgUkVOQU1FICAg IChSUkVOQU1FKSAgIEZUUCBSRU5BTUUKLSAgUkVNT1RFIFRZUEUgICAgICAoUlRZUEUpICAgICBG VFAgVFlQRQotICBSRU1PVEUgRVhJVCAgICAgIChSRVhJVCkgICAgIEZUUCBCWUUKLQotICAgVGhl IGNvbW1hbmRzIGluIHRoZSByaWdodC1oYW5kIGNvbHVtbiBhbHdheXMgYWNjZXNzIEZUUC4gVGhl IGNvbW1hbmRzCi0gICBpbiB0aGUgbGVmdCBjb2x1bW4gY2FuIGFjY2VzcyBlaXRoZXIgS2VybWl0 IHByb3RvY29sIG9yIEZUUDoKLQotICAgICAqIFdoZW4gR0VULVBVVC1SRU1PVEUgaXMgc2V0IHRv IEtFUk1JVCwgb3IgdG8gQVVUTyB3aGVuIHRoZXJlIGlzIG5vCi0gICAgICAgRlRQIGNvbm5lY3Rp b24sIHRoZSBjb21tYW5kcyBpbiB0aGUgbGVmdC1oYW5kIGNvbHVtbiBhY2Nlc3MgS2VybWl0Ci0g ICAgICAgcHJvdG9jb2wsIGFuZCB0aG9zZSByaWdodC1oYW5kIGNvbHVtbiBhcmUgcmVxdWlyZWQg Zm9yIEZUUC4KLSAgICAgKiBXaGVuIEdFVC1QVVQtUkVNT1RFIGlzIHNldCB0byBGVFAsIG9yIHRv IEFVVE8gd2hlbiB0aGVyZSBpcyBhbgotICAgICAgIGFjdGl2ZSBGVFAgY29ubmVjdGlvbiwgdGhl IGNvbW1hbmRzIGluIHRoZSBsZWZ0LWhhbmQgY29sdW1uIGFjY2VzcwotICAgICAgIHRoZSBGVFAg Y29ubmVjdGlvbiBhbmQgY2FuIG5vdCBiZSB1c2VkIHRvIGFjY2VzcyBLZXJtaXQgcHJvdG9jb2wu Ci0gICAgICAgSW4gdGhpcyBjYXNlLCBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSBib3Ro IEtlcm1pdCBwcm90b2NvbAotICAgICAgIGFuZCB0aGUgRlRQIGNvbm5lY3Rpb24sIHlvdSBtdXN0 IFNFVCBHRVQtUFVULVJFTU9URSBLRVJNSVQsIGFuZAotICAgICAgIHRoZW4gdXNlIHRoZSBGVFAg Y29tbWFuZHMgaW4gdGhlIHJpZ2h0LWhhbmQgY29sdW1uIHRvIGFjY2VzcyB0aGUKLSAgICAgICBG VFAgY29ubmVjdGlvbi4KLQotICAgTm90ZSB0aGF0IGZpbGUtbWFuYWdlbWVudCBjb21tYW5kcyBz dWNoIGFzIERJUkVDVE9SWSwgREVMRVRFLCBDRCwgUFdELAotICAgTUtESVIsIFJNRElSLCBIRUxQ LCBSRU5BTUUsIENPUFksIFRZUEUsIGFuZCBzbyBvbiwgYWx3YXlzIGFwcGx5Ci0gICBsb2NhbGx5 LCBubyBtYXR0ZXIgd2hhdCBraW5kIG9mIGNvbm5lY3Rpb24geW91IGhhdmUuIFRoaXMgaXMgdGhl Ci0gICBvcHBvc2l0ZSBvZiBtb3N0IEZUUCBjbGllbnRzLCB3aGVyZSB0aGVzZSBjb21tYW5kcyBh cmUgaW50ZW5kZWQgZm9yIHRoZQotICAgc2VydmVyLCBhbmQgcmVxdWlyZSBhbiAiTCIgcHJlZml4 IGZvciBsb2NhbCBleGVjdXRpb24gKGUuZy4gImRpciIgZ2V0cwotICAgYSBkaXJlY3RvcnkgbGlz dGluZyBmcm9tIHRoZSBzZXJ2ZXIsICJsZGlyIiBnZXRzIGEgbG9jYWwgZGlyZWN0b3J5Ci0gICBs aXN0aW5nKS4gVG8gaWxsdXN0cmF0ZSB3aXRoIHRoZSBDRCBjb21tYW5kIGFuZCBhIHR5cGljYWwg VU5JWCBGVFAKLSAgIGNsaWVudDoKLQotIENsaWVudCAgIFNlcnZlciAgICAgIENoYW5nZSBMb2Nh bCBEaXJlY3RvcnkgICAgIENoYW5nZSBSZW1vdGUgRGlyZWN0b3J5Ci0gIEZUUCAgICAgIEZUUCAg ICAgICAgIGxjZCAgICAgICAgICAgICAgICAgICAgICAgIGNkIChjd2QpCi0gIEtlcm1pdCAgIEtl cm1pdCAgICAgIGNkICAgICAgICAgICAgICAgICAgICAgICAgIHJjZCwgcmVtb3RlIGNkCi0gIEtl cm1pdCAgIEZUUCAgICAgICAgIGNkICAgICAgICAgICAgICAgICAgICAgICAgIGZ0cCBjZCwgcmNk LCByZW1vdGUgY2QKLQotICAgQWxzbyBub3RlIHRoYXQgbm90IGFsbCBSRU1PVEUgY29tbWFuZHMg YXJlIHVzZWZ1bCB3aXRoIEZUUCwgc2luY2UgRlRQCi0gICBzZXJ2ZXJzIGRvIG5vdCBvZmZlciB0 aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbnMuIFRoZXNlIGluY2x1ZGU6Ci0KLSAgICAgKiBSRU1P VEUgQVNTSUdOICAtIEZUUCBzZXJ2ZXJzIGRvbid0IGhhdmUgdmFyaWFibGVzCi0gICAgICogUkVN T1RFIENPUFkgICAgLSBGVFAgc2VydmVycyBkb24ndCBjb3B5IGZpbGVzCi0gICAgICogUkVNT1RF IEhPU1QgICAgLSBGVFAgc2VydmVycyBkb24ndCBleGVjdXRlIGhvc3QgKHNoZWxsKSBjb21tYW5k cwotICAgICAqIFJFTU9URSBLRVJNSVQgIC0gRlRQIHNlcnZlcnMgZG9uJ3QgZXhlY3V0ZSBLZXJt aXQgY29tbWFuZHMKLSAgICAgKiBSRU1PVEUgUFJJTlQgICAtIEZUUCBzZXJ2ZXJzIGRvbid0IHBy aW50IGZpbGVzCi0gICAgICogUkVNT1RFIFFVRVJZICAgLSBGVFAgc2VydmVycyBkb24ndCBoYXZl IHZhcmlhYmxlcwotICAgICAqIFJFTU9URSBTRVQgICAgIC0gRlRQIHNlcnZlcnMgZG9uJ3QgaGF2 ZSBLZXJtaXQgc2V0dGluZ3MKLSAgICAgKiBSRU1PVEUgV0hPICAgICAtIEZUUCBzZXJ2ZXJzIGRv bid0IHNlbmQgdXNlciBsaXN0cwotCi0gICBGaW5hbGx5IG5vdGUgdGhhdCBjb21tYW5kIHNob3J0 Y3V0cyBkbyBub3QgYXBwbHkgdG8gdGhlIEhFTFAgY29tbWFuZC4KLSAgIEZvciBoZWxwIGFib3V0 IGFuIEZUUCBjb21tYW5kLCB1c2UgKGZvciBleGFtcGxlKSAiaGVscCBmdHAgZGVsZXRlIiwgbm90 Ci0gICAiaGVscCBkZWxldGUiIG9yICJoZWxwIHJkZWxldGUiLgotCi0gICBbIFszNDZdVG9wIF0g WyBbMzQ3XUZUUCBUb3AgXSBbIFszNDhdQy1LZXJtaXQgSG9tZSBdIFsgWzM0OV1LZXJtaXQgSG9t ZQotICAgXQotCi0zLjkuIER1YWwgU2Vzc2lvbnMKLQotICAgWW91IGNhbiBoYXZlIGFuIEZUUCBz ZXNzaW9uIG9wZW4gYXQgdGhlIHNhbWUgdGltZSBhcyBhIHJlZ3VsYXIgS2VybWl0Ci0gICBTRVQg TElORSBvciBTRVQgSE9TVCAodGVybWluYWwpIHNlc3Npb24uIEluIHRoaXMgY2FzZSwgdGhlIGRl ZmF1bHQgU0VUCi0gICBHRVQtUFVULVJFTU9URSBBVVRPIHNldHRpbmcgc2hvdWxkIGVuc3VyZSB0 aGF0IGFsbCAidHdvLWZhY2VkIiBjb21tYW5kcwotICAgbGlrZSBHRVQsIFBVVCwgUkVNT1RFLCBI QU5HVVAsIEJZRSwgZXRjLCBhcHBseSB0byB0aGUgS2VybWl0IHNlc3Npb24sCi0gICBhbmQgYWxs IGNvbW1hbmRzIGZvciB0aGUgRlRQIHNlc3Npb24gbXVzdCBpbmNsdWRlIHRoZSBGVFAgcHJlZml4 LiBUbyBiZQotICAgYWJzb2x1dGVseSBjZXJ0YWluLCB5b3UgY2FuIHVzZSBTRVQgR0VULVBVVC1S RU1PVEUgS0VSTUlULgotCi0gIGZ0cCBmb28uYmFyLmJhei5jb20KLSAgaWYgZmFpbCAuLi4KLSAg KGxvZyBpbikKLSAgc2V0IGhvc3QgZm9vLmJhci5iYXouY29tCi0gIGlmIGZhaWwgLi4uCi0gIChs b2cgaW4pCi0KLSAgIE5vdyB5b3UgaGF2ZSBib3RoIGFuIEZUUCBhbmQgVGVsbmV0IGNvbm5lY3Rp b24gdG8gdGhlIHNhbWUgaG9zdCAob2YKLSAgIGNvdXJzZSB0aGV5IGNvdWxkIGFsc28gYmUgdG8g ZGlmZmVyZW50IGhvc3RzLCBhbmQgeW91IGNvdWxkIGFsc28gaGF2ZSBhCi0gICBkaXJlY3Qgb3Ig ZGlhbGVkIHNlcmlhbCBjb25uZWN0aW9uIGluc3RlYWQgb2YgYSBUZWxuZXQgY29ubmVjdGlvbiku IE5vdwotICAgYXNzdW1pbmcgeW91IGhhdmUgYSBLZXJtaXQgc2VydmVyIG9uIHRoZSBmYXIgZW5k IG9mIHRoZSBLZXJtaXQKLSAgIGNvbm5lY3Rpb246Ci0KLSAgcmNkIGluY29taW5nICAgICAgOyBD aGFuZ2VzIEtlcm1pdCBzZXJ2ZXIncyBkaXJlY3RvcnkgKD0gUkVNT1RFIENEKQotICBmdHAgY2Qg aW5jb21pbmcgICA7IENoYW5nZXMgRlRQIHNlcnZlcidzIGRpcmVjdG9yeQotICBwdXQgb29mYS50 eHQgICAgICA7IFNlbmRzIGEgZmlsZSBvbiB0aGUgS2VybWl0IGNvbm5lY3Rpb24KLSAgZnRwIHB1 dCBvb2ZhLnR4dCAgOyBTZW5kcyBhIGZpbGUgb24gdGhlIEZUUCBjb25uZWN0aW9uCi0gIGJ5ZSAg ICAgICAgICAgICAgIDsgU2h1dHMgZG93biB0aGUgS2VybWl0IGNvbm5lY3Rpb24KLSAgZnRwIGJ5 ZSAgICAgICAgICAgOyBTaHV0cyBkb3duIHRoZSBGVFAgY29ubmVjdGlvbgotCi0gICBOb3RlIHRo YXQgUFVUIGFuZCBTRU5EIGFyZSBzeW5vbnltcyBmb3IgYm90aCBGVFAgYW5kIEtlcm1pdAotICAg Y29ubmVjdGlvbnMuCi0KLSAgIFlvdSBjYW4gYWxzbyBlc3RhYmxpc2ggZHVhbCBzZXNzaW9ucyBv biB0aGUgS2VybWl0IGNvbW1hbmQgbGluZToKLQotICBrZXJtaXQgLWogaG9zdDEgLTkgaG9zdDIK LQotICAgVGhpcyBtYWtlcyBhIFRlbG5ldCBjb25uZWN0aW9uIHRvIGhvc3QxIGFuZCBhbiBGVFAg Y29ubmVjdGlvbiB0byBob3N0Mi4KLQotICAgWyBbMzUwXVRvcCBdIFsgWzM1MV1GVFAgVG9wIF0g WyBbMzUyXUMtS2VybWl0IEhvbWUgXSBbIFszNTNdS2VybWl0IEhvbWUKLSAgIF0KLQotMy4xMC4g QXV0b21hdGluZyBGVFAgU2Vzc2lvbnMKLQotICAgTW9zdCBvZiBLZXJtaXQncyBzY3JpcHRpbmcg ZmVhdHVyZXMgY2FuIGJlIHVzZWQgdG8gbWFrZSBhbmQgY29udHJvbCBGVFAKLSAgIHNlc3Npb25z OiBGT1IgYW5kIFdISUxFIGxvb3BzLCBJRi1FTFNFIGFuZCBTV0lUQ0ggY29uc3RydWN0aW9ucywK LSAgIHZhcmlhYmxlcywgYXJyYXlzLCBidWlsdC1pbiBmdW5jdGlvbnMsIGFuZCBhbGwgdGhlIHJl c3QuIFlvdSBjYW4ndCB1c2UKLSAgIElOUFVULCBNSU5QVVQsIE9VVFBVVCwgQ0xFQVIsIG9yIFND UklQVCBvbiBhbiBGVFAgc2Vzc2lvbiwgYnV0IHRoZXNlCi0gICBhcmUgbm90IG5lZWRlZCBzaW5j ZSB0aGUgRlRQIHByb3RvY29sIGlzIHdlbGwgZGVmaW5lZC4KLQotICAgWzM1NF1DTElDSyBIRVJF IGZvciBhbiBGVFAgc2NyaXB0aW5nIHR1dG9yaWFsLgotCi0zLjEwLjEuIEZUUC1TcGVjaWZpYyBW YXJpYWJsZXMgYW5kIEZ1bmN0aW9ucwotCi0gICBUaGUgZm9sbG93aW5nIHZhcmlhYmxlIHRlbGxz IHdoZXRoZXIgYW4gRlRQIGNvbm5lY3Rpb24gaXMgb3BlbjoKLQotICAgXHYoZnRwX2Nvbm5lY3Rl ZCkKLSAgICAgICAgICAxIGlmIHRoZXJlIGlzIGFuIGFjdGl2ZSBGVFAgY29ubmVjdGlvbiwgMCBp ZiB0aGVyZSBpc24ndC4KLQotICAgVGhlIEZUUCBPUEVOIGNvbW1hbmQgc2V0czoKLQotICAgXHYo ZnRwX2hvc3QpCi0gICAgICAgICAgVGhlIGhvc3QgdG8gd2hpY2ggdGhlIG1vc3QgcmVjZW50IEZU UCBjb25uZWN0aW9uIHdhcyBtYWRlLgotCi0gICBcdihmdHBfc2VjdXJpdHkpCi0gICAgICAgICAg VGhlIHNlY3VyaXR5IG1ldGhvZCBuZWdvdGlhdGVkIGZvciB0aGUgY3VycmVudCBGVFAgc2Vzc2lv bi4gVGhlCi0gICAgICAgICAgdmFsdWUgaXMgIk5VTEwiIHdoZW4gbm8gc2VjdXJpdHkgaXMgdXNl ZC4gT3RoZXIgcG9zc2liaWxpdGllcwotICAgICAgICAgIGFyZSBHU1NBUEksIEtFUkJFUk9TX1Y0 LCBTU0wsIFRMUywgYW5kIFNSUC4gQWxzbyBzZWUKLSAgICAgICAgICBcdihhdXRobmFtZSksIFx2 KGF1dGhzdGF0ZSksIGFuZCBcdihhdXRodHlwZSkuIFNlZSBbMzU1XTMuMi4KLSAgICAgICAgICBN YWtpbmcgU2VjdXJlIEZUUCBDb25uZWN0aW9ucy4KLQotICAgXHYoZnRwX3NlcnZlcikKLSAgICAg ICAgICBUaGUgT1MgdHlwZSAoVU5JWCwgVk1TLCBldGMpIG9mIHRoZSBGVFAgc2VydmVyIGhvc3Qu Ci0KLSAgIFRoZSBGVFAgVVNFUiBjb21tYW5kIChvciBGVFAgT1BFTiAvVVNFUjosIG9yIEZUUCB3 aXRoIGF1dG9tYXRpYyBsb2dpbikKLSAgIHNldHM6Ci0KLSAgIFx2KGZ0cF9sb2dnZWRpbikKLSAg ICAgICAgICAxIGlmIHlvdSBhcmUgbG9nZ2VkIGluIHRvIGFuIEZUUCBzZXJ2ZXIsIDAgaWYgeW91 IGFyZSBub3QuCi0KLSAgIFRoZSBjdXJyZW50IENPTU1BTkQtUFJPVEVDVElPTi1MRVZFTCBhbmQg REFUQS1QUk9URUNUSU9OLUxFVkVMIHZhbHVlcwotICAgYXJlIHJlZmxlY3RlZCBpbjoKLQotICAg XHYoZnRwX2NwbCkKLSAgIFx2KGZ0cF9kcGwpCi0gICAgICAgICAgVGhlIHZhbHVlcyBhcmUgImNs ZWFyIiwgImNvbmZpZGVudGlhbCIsICJzYWZlIiBvciAicHJpdmF0ZSIuIFNlZQotICAgICAgICAg IFszNTZdMy4yLiBNYWtpbmcgU2VjdXJlIEZUUCBDb25uZWN0aW9ucy4KLQotICAgVGhlIEZUUCBH RVQtUFVULVJFTU9URSBzZXR0aW5nIGlzIHJlZmxlY3RlZCBpbjoKLQotICAgXHYoZnRwX2dldHB1 dHJlbW90ZSkKLSAgICAgICAgICBUaGUgdmFsdWVzIGFyZSAiYXV0byIsICJmdHAiLCBvciAia2Vy bWl0Ii4KLQotICAgRXZlcnkgRlRQIGNvbW1hbmQgc2V0cyB0aGUgXHYoc3VjY2VzcykgdmFyaWFi bGUsIGFzIHdlbGwgYXMgdGhlCi0gICBmb2xsb3dpbmcgdHdvIEZUUC1zcGVjaWZpYyB2YXJpYWJs ZXM6Ci0KLSAgIFx2KGZ0cF9jb2RlKQotICAgICAgICAgIFRoZSBzdGFuZGFyZGl6ZWQgbnVtZXJp YyBGVFAgcHJvdG9jb2wgY29kZSBmcm9tIHRoZSBzZXJ2ZXIncwotICAgICAgICAgIHJlc3BvbnNl IHRvIHRoZSBsYXN0IGNsaWVudCBjb21tYW5kLCBhIDMtZGlnaXQgZGVjaW1hbCBudW1iZXIKLSAg ICAgICAgICBkZWZpbmVkIGluIFszNTddUkZDOTU5LiBCcmllZmx5OgotCi0gICAgICAgICAgMXh4 ID0gUG9zaXRpdmUgUHJlbGltaW5hcnkgUmVwbHkKLSAgICAgICAgICAyeHggPSBQb3NpdGl2ZSBD b21wbGV0aW9uIFJlcGx5Ci0gICAgICAgICAgM3h4ID0gUG9zaXRpdmUgSW50ZXJtZWRpYXRlIFJl cGx5Ci0gICAgICAgICAgNHh4ID0gVHJhbnNpZW50IE5lZ2F0aXZlIENvbXBsZXRpb24gUmVwbHkK LSAgICAgICAgICA1eHggPSBQZXJtYW5lbnQgTmVnYXRpdmUgQ29tcGxldGlvbiBSZXBseQotCi0g ICBcdihmdHBfbWVzc2FnZSkKLSAgICAgICAgICBUaGUgdGV4dCBtZXNzYWdlLCBpZiBhbnksIGZy b20gdGhlIHNlcnZlcidzIHJlc3BvbnNlIHRvIHRoZSBsYXN0Ci0gICAgICAgICAgY2xpZW50IGNv bW1hbmQuIElmIHRoZSBtb3N0IHJlY2VudCByZXNwb25zZSBoYWQgbXVsdGlwbGUgbGluZXMsCi0g ICAgICAgICAgdGhpcyB2YXJpYWJsZSBoYXMgb25seSB0aGUgZmluYWwgbGluZS4gVGhlc2UgbWVz c2FnZXMgYXJlIG5vdAotICAgICAgICAgIHN0YW5kYXJkaXplZCBhbmQgdmFyeSBpbiBmb3JtYXQg YW5kIGNvbnRlbnQgZnJvbSBzZXJ2ZXIgdG8KLSAgICAgICAgICBzZXJ2ZXIuIFN5bm9ueW06IFx2 KGZ0cF9tc2cpLgotCi0gICBGVFAgZmlsZSB0cmFuc2ZlcnMgc2V0IHRoZSByZWd1bGFyIEtlcm1p dCB0cmFuc2ZlciBzdGF0dXMgdmFyaWFibGVzOgotCi0gIFx2KGNwcykgICAgICAgICBDaGFyYWN0 ZXJzIHBlciBzZWNvbmQgb2YgbW9zdCByZWNlbnQgdHJhbnNmZXIuCi0gIFx2KGZpbGVzcGVjKSAg ICBGaWxlIHNwZWNpZmljYXRpb24gdXNlZCBpbiBtb3N0IHJlY2VudCB0cmFuc2Zlci4KLSAgXHYo ZnNpemUpICAgICAgIFNpemUgb2YgZmlsZSBtb3N0IHJlY2VudGx5IHRyYW5zZmVycmVkLgotICBc dih0ZnNpemUpICAgICAgVG90YWwgc2l6ZSBvZiBmaWxlIGdyb3VwIG1vc3QgcmVjZW50bHkgdHJh bnNmZXJyZWQuCi0gIFx2KHhmZXJzdGF0dXMpICBTdGF0dXMgb2YgbW9zdCByZWNlbnQgdHJhbnNm ZXIgKDAgPSBzdWNjZXNzLCAxID0gZmFpbHVyZSkuCi0gIFx2KHRmdGltZSkgICAgICBFbGFwc2Vk IHRpbWUgb2YgbW9zdCByZWNlbnQgdHJhbnNmZXIsIGluIHNlY29uZHMuCi0KLSAgIER1cmluZyBh biBGVFAgdHJhbnNmZXIsIHRoZSBwZXItZmlsZSB2YXJpYWJsZXMgYXJlOgotCi0gIFx2KGZpbGVu YW1lKSAgICBOYW1lIG9mIGN1cnJlbnQgZmlsZS4KLSAgXHYoZmlsZW51bWJlcikgIE9yZGluYWwg ZmlsZSBudW1iZXIgaW4gZ3JvdXAgKDEsIDIsIDMsIC4uLikKLQotMy4xMC4yLiBFeGFtcGxlcwot Ci0gICBMZXQncyBiZWdpbiB3aXRoIGEgc2ltcGxlIGV4YW1wbGUgc2hvd2luZyBob3cgdG8gbG9n IGluLCBzZW5kIHNvbWUKLSAgIGZpbGVzLCBhbmQgbG9nIG91dDoKLQotICBkZWZpbmUgZXJyb3Ig aWYgZmFpbCB7IGZ0cCBieWUsIHN0b3AgMSBFcnJvcjogXCUxIH0KLSAgc2V0IHRyYW5zYWN0IGJy aWVmCi0gIGxvZyB0Ci0gIGZ0cCBmdHAueHl6Y29ycC5jb20gL2Fub255bW91cwotICBpZiBmYWls IHN0b3AgMSBDb25uZWN0aW9uIGZhaWxlZAotICBpZiBub3QgXHYoZnRwX2xvZ2dlZGluKSBzdG9w IDEgTG9naW4gZmFpbGVkCi0gIGZ0cCBjZCBpbmNvbWluZwotICBlcnJvciB7ZnRwIGNkfQotICBj ZCB1cGxvYWQKLSAgZXJyb3Ige2xvY2FsIGNkfQotICBmdHAgcHV0IC9kZWxldGUgKgotICBlcnJv ciB7cHV0fQotICBmdHAgYnllCi0KLSAgIEZpcnN0IHdlIGRlZmluZSBhbiBlcnJvciBoYW5kbGlu ZyBtYWNybyB0byBiZSB1c2VkIGFmdGVyIHRoZSBjb25uZWN0aW9uCi0gICBpcyBtYWRlLiBUaGVu IHdlIHNldCB1cCBhIGJyaWVmLWZvcm1hdCB0cmFuc2FjdGlvbiBsb2cgdG8ga2VlcCBhIHJlY29y ZAotICAgb2Ygb3VyIGZpbGUgdHJhbnNmZXJzLiBUaGVuIHdlIG1ha2UgYSBjb25uZWN0aW9uIHRv IHRoZSBob3N0IGFuZCBsb2cgaW4KLSAgIGFub255bW91c2x5LiBUaGUgImlmIGZhaWwiIGNvbW1h bmQgY2hlY2tzIHdoZXRoZXIgdGhlIGNvbm5lY3Rpb24gd2FzCi0gICBtYWRlLiBUaGUgImlmIG5v dCIgY29tbWFuZCBjaGVja3Mgd2hldGhlciBsb2dpbiB3YXMgc3VjY2Vzc2Z1bC4KLSAgIE9idmlv dXNseSB0aGUgc2NyaXB0IHNob3VsZCBub3QgY29udGludWUgdW5sZXNzIGJvdGggdGVzdHMgc3Vj Y2VlZC4KLQotICAgTmV4dCB3ZSBjaGFuZ2UgdG8gdGhlIHNlcnZlcidzICdpbmNvbWluZycgZGly ZWN0b3J5IGFuZCB0byBvdXIgb3duCi0gICAndXBsb2FkJyBkaXJlY3RvcnksIGFuZCBzZW5kIGFs bCB0aGUgZmlsZXMgdGhhdCBhcmUgaW4gaXQgKHRoZXkgY2FuIGJlCi0gICBhbnkgbWl4dHVyZSBv ZiB0ZXh0IGFuZCBiaW5hcnkgZmlsZXMpLCBkZWxldGluZyBlYWNoIHNvdXJjZSBmaWxlCi0gICBh dXRvbWF0aWNhbGx5IGFmdGVyIGl0IGlzIHN1Y2Nlc3NmdWxseSB1cGxvYWRlZC4gRWFjaCBvZiB0 aGVzZQotICAgb3BlcmF0aW9ucyBpcyBjaGVja2VkIHdpdGggdGhlIEVSUk9SIG1hY3JvLCB3aGlj aCBwcmV2ZW50cyB0aGUgc2NyaXB0Ci0gICBmcm9tIGNvbnRpbnVpbmcgcGFzdCBhIGZhaWx1cmUu Ci0KLSAgIEZpbmFsbHkgd2UgY2xvc2UgdGhlIEZUUCBzZXNzaW9uIHdpdGggdGhlICJieWUiIGNv bW1hbmQuCi0KLSAgIEp1c3QgbGlrZSBhbnkgb3RoZXIgS2VybWl0IHNjcmlwdCwgdGhpcyBvbmUg Y2FuIGJlIHVzZWQgaW4gbWFueSB3YXlzOgotCi0gICAgICogSXQgY2FuIGJlIHN0b3JlZCBpbiBh IGZpbGUsIGFuZCBLZXJtaXQgY2FuIGJlIHRvbGQgdG8gVEFLRSB0aGUKLSAgICAgICBmaWxlLgot ICAgICAqIEluIFVOSVgsIGl0IGNhbiBiZSBhICJbMzU4XWtlcmJhbmciIHNjcmlwdCBhbmQgdGhl cmVmb3JlIHJ1bgotICAgICAgIGRpcmVjdGx5IGZyb20gdGhlIHNoZWxsIHByb21wdCBvciBhcyBh IGNyb24gam9iLgotCi0gICBXZSBjb3VsZCBoYXZlIHVzZWQgY29tbWFuZCBzaG9ydGN1dHMgbGlr ZSAicmNkIiwgInB1dCIsIGFuZCAiYnllIiwgYnV0Ci0gICBzaW5jZSB0aGV5IGNhbiBiZSBhbWJp Z3VvdXMgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLCBpdCBpcyBiZXR0ZXIKLSAgIHRvIGF2 b2lkIHRoZW0gaW4gc2NyaXB0czsgdGhleSBhcmUgaW50ZW5kZWQgbWFpbmx5IGZvciBjb252ZW5p ZW5jZQotICAgZHVyaW5nIGludGVyYWN0aXZlIHVzZS4gSG93ZXZlciwgaWYgeW91IHdpc2ggdG8g dXNlIHRoZSBzaG9ydGN1dHMgaW4gYQotICAgc2NyaXB0LCB5b3UgY2FuIGRvIGl0IHRoaXMgd2F5 IChlcnJvciBoYW5kbGluZyBvbWl0dGVkIGZvciBicmV2aXR5KToKLQotICBsb2NhbCBcJXQgICAg ICAgICAgICAgICAgICAgICAgIDsgRGVjbGFyZSBhIGxvY2FsIHRlbXBvcmFyeSB2YXJpYWJsZQot ICBhc3NpZ24gXCV0IFx2KGZ0cF9nZXRwdXRyZW1vdGUpIDsgU2F2ZSBjdXJyZW50IEZUUCBHRVQt UFVULVJFTU9URSBzZXR0aW5nCi0gIHNldCBmdHAgZ2V0LXB1dC1yZW1vdGUgZnRwICAgICAgOyBD aG9vc2UgRlRQIG9yaWVudGF0aW9uCi0gIGZ0cCB4eXpjb3JwLmNvbSAvYW5vbnltb3VzICAgICAg OyBPcGVuIGFuIEZUUCBjb25uZWN0aW9uCi0gIGdldCBvb2ZhLnR4dCAgICAgICAgICAgICAgICAg ICAgOyBHRVQgYSBmaWxlCi0gIHB1dCBmb28uYmFyICAgICAgICAgICAgICAgICAgICAgOyBQVVQg YSBmaWxlCi0gIHJkZWwgeWVzdGVyZGF5LmxvZyAgICAgICAgICAgICAgOyBEZWxldGUgYSBmaWxl IG9uIHRoZSBzZXJ2ZXIKLSAgYnllICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IExvZyBv dXQgYW5kIGRpc2Nvbm5lY3QgZnJvbSBzZXJ2ZXIuCi0gIHNldCBmdHAgZ2V0LXB1dC1yZW1vdGUg XCV0ICAgICAgOyBSZXN0b3JlIHByZXZpb3VzIEdFVC1QVVQtUkVNT1RFIHNldHRpbmcKLQotICAg T2YgY291cnNlLCBGVFAgc2NyaXB0cyBjYW4gYWxzbyBiZSB3cml0dGVuIGFzIG1hY3Jvcy4gVGhp cyBsZXRzIHlvdQotICAgcGFzcyBwYXJhbWV0ZXJzIHN1Y2ggYXMgaG9zdG5hbWVzLCB1c2VybmFt ZXMsIGFuZCBmaWxlbmFtZXMgdG8gdGhlbToKLQotICBkZWZpbmUgZG9mdHBnZXQgewotICAgICAg aWYgPCBcdihhcmdjKSA0IGVuZCAxIFVzYWdlOiBcJTAgaG9zdCB1c2VyIHJlbW90ZWZpbGUgWyBs b2NhbGZpbGUgXQotICAgICAgZnRwIFwlMSAvdXNlcjpcJTIKLSAgICAgIGlmIGZhaWwgZW5kIDEg RlRQIE9QRU4gXCUxIGZhaWxlZAotICAgICAgaWYgbm90IFx2KGZ0cF9sb2dnZWRpbikgZW5kIDEg RlRQIExPR0lOIGZhaWxlZAotICAgICAgZnRwIGdldCB7XCUzfSB7XCU0fQotICAgICAgaWYgZmFp bCBlbmQgMSBGVFAgR0VUIFwlMyBmYWlsZWQKLSAgICAgIGZ0cCBieWUKLSAgfQotCi0gICBBZGQg dGhpcyBkZWZpbml0aW9uIHRvIHlvdXIgS2VybWl0IGN1c3RvbWl6YXRpb24gZmlsZSwgYW5kIGl0 IHdpbGwKLSAgIGFsd2F5cyBiZSBhdmFpbGFibGUgd2hlbiB5b3Ugc3RhcnQgS2VybWl0LiBUaGlz IG1hY3JvIGxldHMgeW91IGRvd25sb2FkCi0gICBhIGZpbGUgd2l0aCBGVFAgYnkgZ2l2aW5nIGEg c2luZ2xlIGNvbW1hbmQsIGUuZy46Ci0KLSAgZG9mdHBnZXQgeHl6Y29ycC5jb20gYW5vbnltb3Vz IG9vZmEudHh0Ci0KLTMuMTAuMy4gQXV0b21hdGluZyBTZWN1cmUgRlRQIFNlc3Npb25zCi0KLSAg IE9mdGVuIHdoZW4gbWFraW5nIHNlY3VyZSBjb25uZWN0aW9ucywgeW91IGFyZSBwcm9tcHRlZCBp bnRlcmFjdGl2ZWx5Ci0gICBmb3IgY2VydGFpbiBpbmZvcm1hdGlvbiBvciBwZXJtaXNzaW9uIHRv IHByb2NlZWQuIFRoZXNlIHByb21wdHMgY2FuCi0gICBzdG9wIGFuIGF1dG9tYXRlZCBwcm9jZWR1 cmUuIFRvIGF2b2lkIHRoZW0sIHlvdSBtdXN0IGdpdmUgdGhlCi0gICBhcHByb3ByaWF0ZSBjb21t YW5kcyB0byBkaXNhYmxlIHRoZW0sIGFuZC9vciBzdXBwbHkgdGhlIHByb21wdGVkLWZvcgotICAg aW5mb3JtYXRpb24gYmVmb3JlaGFuZC4gSGVyZSBhcmUgYSBmZXcgaGludHM6Ci0KLSAgICAgKiBN YWtlIHN1cmUgdGhhdCBTRVQgVEFLRSBFUlJPUiBhbmQgU0VUIE1BQ1JPIEVSUk9SIGFyZSBib3Ro IE9GRi4KLSAgICAgICBUaGlzIGlzIHRoZSBkZWZhdWx0LCBidXQgaW4gY2FzZSB5b3UgaGF2ZSBz ZXQgZWl0aGVyIG9uZSBvZiB0aGVzZQotICAgICAgIE9OIGluIHlvdXIgc2NyaXB0IG9yIGluaXRp YWxpemF0aW9uIGZpbGUsIHRoaXMgbWFrZXMgdGhlIHNjcmlwdAotICAgICAgIGhhbHQgb24gYW55 IGtpbmQgb2YgZXJyb3IuIE5vcm1hbGx5IHlvdSB3b3VsZCB3YW50IHRvIGNoZWNrIGVhY2gKLSAg ICAgICBvcGVyYXRpb24gZm9yIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBhbmQgdGFrZSBhcHByb3ByaWF0 ZSBhY3Rpb24uCi0gICAgICogT24gU1NMIGFuZCBUTFMgY29ubmVjdGlvbnMsIHlvdSBtYXkgYmUg YXNrZWQgd2hldGhlciBpdCBpcyBPSyB0bwotICAgICAgIHByb2NlZWQgd2l0aCBhIGNvbm5lY3Rp b24gdG8gc2VydmVyIHRoYXQgcHJlc2VudHMgYSBzZWxmLXNpZ25lZAotICAgICAgIGNlcnRpZmlj YXRlLiBZb3UgY2FuIHVzZSB0aGUgU0VUIEFVVEhFTlRJQ0FUSU9OIFNTTCAob3IgVExTKSBWRVJJ RlkKLSAgICAgICBvciBTRVQgQVVUSCBTU0wgKG9yIFRMUykgQ0VSVFMtT0sgY29tbWFuZHMgdG8g YXZvaWQgdGhpcyBwcm9tcHQgYnkKLSAgICAgICBub3QgcmVxdWVzdGluZyBhIGNlcnRpZmljYXRl IGZyb20gdGhlIHBlZXIuCi0gICAgICogKE1vcmUgdG8gYmUgYWRkZWQuLi4pCi0KLSAgIFsgWzM1 OV1Ub3AgXSBbIFszNjBdRlRQIFRvcCBdIFsgWzM2MV1GVFAgU2NyaXB0IFR1dG9yaWFsIF0gWwot ICAgWzM2Ml1DLUtlcm1pdCBIb21lIF0gWyBbMzYzXUtlcm1pdCBIb21lIF0KLQotMy4xMS4gQWR2 YW5jZWQgRlRQIFByb3RvY29sIEZlYXR1cmVzCi0KLSAgIFRoZSByZW1haW5kZXIgb2YgdGhlIEZU UCBkb2N1bWVudGF0aW9uICh0aHJvdWdoIHRoZSBlbmQgb2YgU2VjdGlvbiAzKQotICAgaXMgbmV3 IHRvIEMtS2VybWl0IDguMC4yMDYsIGJ1dCB3ZSBsZWF2ZSBpdCBpbiBibGFjayB0byBwcmV2ZW50 Ci0gICBoZWFkYWNoZXMuIEV4Y2VwdCBmb3IgdGl0bGVzLgotICAgICAqIFszNjRdVEVSTUlOT0xP R1kKLSAgICAgKiBbMzY1XUZFQVRVUkUgTkVHT1RJQVRJT04KLSAgICAgKiBbMzY2XVVTSU5HIE1H RVQ6IE5MU1QgVkVSU1VTIE1MU0QKLSAgICAgKiBbMzY3XUVYQU1QTEVTCi0gICAgICogWzM2OF1S RUZFUkVOQ0VTCi0KLSAgIFRoZSBuZXcgcmVsZWFzZXMgb2YgWzM2OV1DLUtlcm1pdCAoOC4wLjIw NikgYW5kIFszNzBdS2VybWl0IDk1ICgyLjEpCi0gICBzdXBwb3J0IG5ldyBGVFAgcHJvdG9jb2wg ZmVhdHVyZXMgZnJvbSBSRkMgMjM4OSBhcyB3ZWxsIGFzIG1vc3Qgb2YKLSAgIHdoYXQncyBpbiB0 aGUgRWx6IGFuZCBIZXRobW9uIEV4dGVuc2lvbnMgdG8gRlRQIEludGVybmV0IERyYWZ0IChzZWUK LSAgIFszNzFdUmVmZXJlbmNlcykuIFNvbWUgb2YgdGhlc2UgZmVhdHVyZXMsIHN1Y2ggYXMgU0la RSAocmVxdWVzdCBhCi0gICBmaWxlJ3Mgc2l6ZSksIE1EVE0gKHJlcXVlc3QgZmlsZSdzIG1vZGlm aWNhdGlvbiB0aW1lKSwgYW5kIFJFU1QKLSAgIChyZXN0YXJ0IGludGVycnVwdGVkIHRyYW5zZmVy KSBoYXZlIGJlZW4gd2lkZWx5IGltcGxlbWVudGVkIGluIEZUUAotICAgY2xpZW50cyBhbmQgc2Vy dmVycyBmb3IgeWVhcnMgKGFzIHdlbGwgYXMgaW4gdGhlIGluaXRpYWwgcmVsZWFzZSBvZiB0aGUK LSAgIEtlcm1pdCBGVFAgY2xpZW50cykuIE90aGVycyBzdWNoIGFzIEZFQVQgYW5kIE1MU0QgYXJl IHJhcmVseSBzZWVuIGFuZAotICAgYXJlIG5ldyB0byB0aGUgdXBjb21pbmcgS2VybWl0IHJlbGVh c2VzLiBUVkZTIChUcml2aWFsIFZpcnR1YWwgRmlsZQotICAgU3RvcmUpIGlzIHN1cHBvcnRlZCBp bXBsaWNpdGx5LCBhbmQgdGhlIFVURi04IGNoYXJhY3Rlci1zZXQgaXMgYWxyZWFkeQotICAgZnVs bHkgc3VwcG9ydGVkIGF0IHRoZSBwcm90b2NvbCBhbmQgZGF0YS1pbnRlcmNoYW5nZSBsZXZlbC4K LQotICAgRm9yIEtlcm1pdCB1c2VycywgdGhlIG1haW4gYmVuZWZpdCBvZiB0aGUgbmV3IEZUUCBw cm90b2NvbCBleHRlbnNpb25zCi0gICBpcyB0aGUgYWJpbGl0eSB0byBkbyByZWN1cnNpdmUgZG93 bmxvYWRzLiBCdXQgdGhlIGV4dGVuc2lvbnMgYWxzbwotICAgaW50cm9kdWNlIGNvbXBsaWNhdGlv bnMgYW5kIHRyYWRlb2ZmcyB0aGF0IHlvdSBzaG91bGQgYmUgYXdhcmUgb2YuIE9mCi0gICBjb3Vy c2UgS2VybWl0IHRyaWVzIHRvICJkbyB0aGUgcmlnaHQgdGhpbmciIGF1dG9tYXRpY2FsbHkgaW4g ZXZlcnkgY2FzZQotICAgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBCdXQgKGFzIG5vdGVk IGxhdGVyKSBzb21lIGNhc2VzIGFyZQotICAgaW5oZXJlbnRseSBhbWJpZ3VvdXMgYW5kL29yIGNh biByZXN1bHQgaW4gbmFzdHkgc3VycHJpc2VzLCBhbmQgZm9yCi0gICB0aG9zZSBzaXR1YXRpb25z IG5ldyBjb21tYW5kcyBhbmQgc3dpdGNoZXMgYXJlIGF2YWlsYWJsZSB0byBnaXZlIHlvdQotICAg cHJlY2lzZSBjb250cm9sIG92ZXIgS2VybWl0J3MgYmVoYXZpb3IsIGluIGNhc2UgdGhlIGRlZmF1 bHRzIGRvbid0Ci0gICBwcm9kdWNlIHRoZSBkZXNpcmVkIHJlc3VsdHMuCi0KLTMuMTEuMS4gVGVy bWlub2xvZ3kKLQotICAgQ29tbWFuZC1saW5lIEZUUCBjbGllbnRzIHN1Y2ggYXMgS2VybWl0IChh cyB3ZWxsIGFzIHRoZSB0cmFkaXRpb25hbCBGVFAKLSAgIHByb2dyYW1zIGZvdW5kIG9uIFVuaXgs IFZNUywgLi4uLCBldmVuIFdpbmRvd3MpIGhhdmUgY29tbWFuZHMgbGlrZSBQVVQsCi0gICBNUFVU LCBHRVQsIE1HRVQsIGFuZCBCWUUsIHdoaWNoIHRoZXkgY29udmVydCBpbnRvIHplcm8gb3IgbW9y ZSBGVFAKLSAgIHByb3RvY29sIGNvbW1hbmRzLCBzdWNoIGFzIE5MU1QsIFJFVFIsIFFVSVQuIEZv ciBjbGFyaXR5LCB3ZSdsbCB1c2UKLSAgICJjb21tYW5kIiB0byByZWZlciB0byBjb21tYW5kcyBn aXZlbiBieSB0aGUgdXNlciB0byB0aGUgRlRQIGNsaWVudCwgYW5kCi0gICAiZGlyZWN0aXZlIiBm b3IgRlRQIHByb3RvY29sIGNvbW1hbmRzIHNlbnQgYnkgdGhlIEZUUCBjbGllbnQgdG8gdGhlIEZU UAotICAgc2VydmVyLgotCi0zLjExLjIuIEZlYXR1cmUgTmVnb3RpYXRpb24KLQotICAgTmV3IEZU UCBwcm90b2NvbCBmZWF0dXJlcyBhcmUgbmVnb3RpYXRlZCBieSB0aGUgY2xpZW50IHNlbmRpbmcg YSBGRUFUCi0gICBkaXJlY3RpdmUgYW5kIHRoZSBzZXJ2ZXIgcmVzcG9uZGluZyB3aXRoIGEgbGlz dCBvZiAobmV3KSBmZWF0dXJlcyBpdAotICAgc3VwcG9ydHMsIG9yIGVsc2Ugd2l0aCBhbiBlcnJv ciBpbmRpY2F0aW9uIGlmIGl0IGRvZXMgbm90IHN1cHBvcnQgdGhlCi0gICBGRUFUIGRpcmVjdGl2 ZSBhdCBhbGwsIGluIHdoaWNoIGNhc2UgdGhlIGNsaWVudCBoYXMgdG8gZ3Vlc3Mgd2hpY2ggbmV3 Ci0gICBmZWF0dXJlcyBpdCBzdXBwb3J0cyAoS2VybWl0IGd1ZXNzZXMgdGhhdCBpdCBzdXBwb3J0 cyBTSVpFIGFuZCBNRFRNIGJ1dAotICAgbm90IE1MU1QpLiBOb3RlIHRoYXQgdGhlIE1MU1QgZmVh dHVyZSBpbmNsdWRlcyBNTFNELCB3aGljaCBpcyBub3QKLSAgIGxpc3RlZCBzZXBhcmF0ZWx5IGFz IGEgZmVhdHVyZS4KLQotICAgR3Vlc3NpbmcgaXMgbmljZSB3aGVuIGl0IHdvcmtzLCBidXQgc29t ZXRpbWVzIGl0IGRvZXNuJ3QsIGFuZCBzb21lIEZUUAotICAgc2VydmVycyBiZWNvbWUgY29uZnVz ZWQgd2hlbiB5b3Ugc2VuZCB0aGVtIGEgZGlyZWN0aXZlIHRoZXkgZG9uJ3QKLSAgIHVuZGVyc3Rh bmQsIG9yIHRoZXkgZG8gc29tZXRoaW5nIHlvdSBkaWRuJ3Qgd2FudCwgc29tZXRpbWVzIHRvIHRo ZQotICAgcG9pbnQgb2YgY2xvc2luZyB0aGUgY29ubmVjdGlvbi4gRm9yIHRoaXMgcmVhc29uLCBL ZXJtaXQgbGV0cyB5b3UKLSAgIG92ZXJyaWRlIGRlZmF1bHQgb3IgbmVnb3RpYXRlZCBmZWF0dXJl cyB3aXRoIHRoZSBmb2xsb3dpbmcgbmV3Ci0gICBjb21tYW5kczoKLQotICAgRlRQIHsgRU5BQkxF LCBESVNBQkxFIH0gRkVBVAotICAgICAgICAgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGF1dG9t YXRpYyBzZW5kaW5nIG9mIGEgRkVBVCBkaXJlY3RpdmUKLSAgICAgICAgICB1cG9uIGNvbm5lY3Rp b24gdG8gYW4gRlRQIHNlcnZlci4gTm90ZSB0aGF0IEZUUCBbIE9QRU4gXSAvTk9JTklUCi0gICAg ICAgICAgICBhbHNvIGluaGliaXRzIHNlbmRpbmcgdGhlIEZFQVQgZGlyZWN0aXZlIChhbmQgc2V2 ZXJhbCBvdGhlcnMpCi0gICAgICAgICAgZm9yIHRoZSBjb25uZWN0aW9uIGJlaW5nIE9QRU4nZCwg YnV0IHdpdGhvdXQgbmVjZXNzYXJpbHkKLSAgICAgICAgICBkaXNhYmxpbmcgRkVBVCBmb3Igc3Vi c2VxdWVudCBjb25uZWN0aW9ucyBpbiB0aGUgc2FtZSBLZXJtaXQKLSAgICAgICAgICBpbnN0YW5j ZS4gRkVBVCBpcyBFTkFCTEVEIGJ5IGRlZmF1bHQsIGluIHdoaWNoIGNhc2UgbWFueSBGVFAKLSAg ICAgICAgICBzZXJ2ZXJzIGFyZSBsaWtlbHkgdG8gcmVwbHk6Ci0KLTUwMCAnRkVBVCc6IGNvbW1h bmQgbm90IHVuZGVyc3Rvb2QKLQotICAgICAgICAgIHdoaWNoIGlzIG5vcm1hbGx5IGhhcm1sZXNz IChidXQgeW91IG5ldmVyIGtub3cpLiAoSW4gQy1LZXJtaXQKLSAgICAgICAgICA4LjAuMjA4LCB0 aGlzIGVycm9yIG1lc3NhZ2UgaXMgc3VwcHJlc3NlZCB1bmxlc3MgeW91IFNFVCBGVFAKLSAgICAg ICAgICBERUJVRyBPTi4pCi0KLSAgIEZUUCBFTkFCTEUgeyBNRFRNLCBNTFNULCBTSVpFIH0KLSAg ICAgICAgICBFbmFibGVzIHRoZSBnaXZlbiBkaXJlY3RpdmUgZm9yIGltcGxpY2l0IHVzZSBieSB0 aGUgRlRQIEdFVCBhbmQKLSAgICAgICAgICBNR0VUIGNvbW1hbmRzIGluIGNhc2UgaXQgaGFzIGJl ZW4gZGlzYWJsZWQgb3IgZXJyb25lb3VzbHkKLSAgICAgICAgICBvbWl0dGVkIGJ5IHRoZSBzZXJ2 ZXIgaW4gaXRzIEZFQVQgcmVzcG9uc2UuIE5vdGU6IE1MU0QgY2FuIGJlCi0gICAgICAgICAgdXNl ZCBpbiB0aGUgRlRQIEVOQUJMRSBhbmQgRElTQUJMRSBjb21tYW5kcyBhcyBhIHN5bm9ueW0gZm9y Ci0gICAgICAgICAgTUxTVC4gWU9VIE1VU1QgR0lWRSBUSElTIENPTU1BTkQgQUZURVIgTUFLSU5H IFRIRSBGVFAKLSAgICAgICAgICBDT05ORUNUSU9OLgotCi0gICBGVFAgRElTQUJMRSB7IE1EVE0s IE1MU1QsIFNJWkUgfQotICAgICAgICAgIERpc2FibGVzIGltcGxpY2l0IHVzZSBvZiB0aGUgZ2l2 ZW4gZGlyZWN0aXZlIGJ5IEdFVCBvciBNR0VUIGluCi0gICAgICAgICAgY2FzZSBpdCBjYXVzZXMg cHJvYmxlbXM7IGZvciBleGFtcGxlLCBiZWNhdXNlIGl0IG1ha2VzIG11bHRpZmlsZQotICAgICAg ICAgIGRvd25sb2FkcyB0YWtlIHRvbyBsb25nIG9yIHRoZSBzZXJ2ZXIgYW5ub3VuY2VzIGl0IGVy cm9uZW91c2x5Ci0gICAgICAgICAgb3IgbWlzaW1wbGVtZW50cyBpdC4gVXNlIERJU0FCTEUgRkVB VCBiZWZvcmUgbWFraW5nIGEgY29ubmVjdGlvbgotICAgICAgICAgIHRvIHByZXZlbnQgS2VybWl0 IGZyb20gc2VuZGluZyB0aGUgRkVBVCBkaXJlY3RpdmUgYXMgcGFydCBvZiBpdHMKLSAgICAgICAg ICBpbml0aWFsIHNlcXVlbmNlLiBOb3RlIHRoYXQgZGlzYWJsaW5nIEZFQVQsIFNJWkUsIG9yIE1E VE0gZG9lcwotICAgICAgICAgIG5vdCBwcmV2ZW50IHlvdSBmcm9tIGV4ZWN1dGluZyBleHBsaWNp dCBGVFAgRkVBVFVSRVMsIEZUUCBTSVpFLAotICAgICAgICAgIG9yIEZUUCBNT0RUSU1FIGNvbW1h bmRzLiBBbHNvIG5vdGUgdGhhdCBkaXNhYmxpbmcgU0laRSBwcmV2ZW50cwotICAgICAgICAgIFBV VCAvUkVTVEFSVCAocmVjb3Zlcnkgb2YgaW50ZXJydXB0ZWQgdXBsb2FkcykgZnJvbSB3b3JraW5n LiBZT1UKLSAgICAgICAgICBNVVNUIEdJVkUgVEhJUyBDT01NQU5EIEFGVEVSIE1BS0lORyBUSEUg RlRQIENPTk5FQ1RJT04uCi0KLSAgIFRvIGVuYWJsZSBvciBkaXNhYmxlIG1vcmUgdGhhbiBvbmUg ZmVhdHVyZSwgdXNlIG11bHRpcGxlIEZUUCBFTkFCTEUgb3IKLSAgIEZUUCBESVNBQkxFIGNvbW1h bmRzLiBUaGUgU0hPVyBGVFAgY29tbWFuZCBzaG93cyB3aGljaCBmZWF0dXJlcyBhcmUKLSAgIGN1 cnJlbnRseSBlbmFibGVkIGFuZCBkaXNhYmxlZC4KLQotICAgRlRQIEZFQVRVUkVTCi0gICAgICAg ICAgVGhpcyBjb21tYW5kIHNlbmRzIGEgRkVBVCBkaXJlY3RpdmUgdG8gdGhlIHNlcnZlci4gSW4g Y2FzZSB5b3UKLSAgICAgICAgICBoYXZlIGJlZW4gZGlzYWJsaW5nIGFuZCBlbmFibGluZyBkaWZm ZXJlbnQgZmVhdHVyZXMsIHRoaXMKLSAgICAgICAgICByZXN5bmNocm9uaXplcyBLZXJtaXQncyBm ZWF0dXJlIGxpc3Qgd2l0aCB0aGUgc2VydmVyJ3MuIElmIHRoZQotICAgICAgICAgIHNlcnZlciBk b2VzIG5vdCBzdXBwb3J0IHRoZSBGRUFUIGRpcmVjdGl2ZSwgS2VybWl0J3MgZmVhdHVyZQotICAg ICAgICAgIGxpc3QgaXMgbm90IGNoYW5nZWQuCi0KLSAgIEZUUCBPUFRJT05TIGRpcmVjdGl2ZQot ICAgICAgICAgIEluZm9ybWF0aW9uYWwgb25seTogdGhlIHNlcnZlciB0ZWxscyB3aGF0IG9wdGlv bnMsIGlmIGFueSwgaXQKLSAgICAgICAgICBzdXBwb3J0cyBmb3IgdGhlIGdpdmVuIGRpcmVjdGl2 ZSwgZS5nLiBNTFNULiBGYWlscyBpZiB0aGUgc2VydmVyCi0gICAgICAgICAgZG9lcyBub3Qgc3Vw cG9ydCB0aGUgT1BUUyBkaXJlY3RpdmUgb3IgaWYgdGhlIGRpcmVjdGl2ZSBmb3IKLSAgICAgICAg ICB3aGljaCBvcHRpb25zIGFyZSByZXF1ZXN0ZWQgaXMgbm90IHZhbGlkLiBUaGUgZGlyZWN0aXZl IGlzCi0gICAgICAgICAgY2FzZS1pbnNlbnNpdGl2ZS4KLQotICAgRlRQIFNJWkUgZmlsZW5hbWUK LSAgICAgICAgICBTZW5kcyBhIFNJWkUgZGlyZWN0aXZlIHRvIHRoZSBzZXJ2ZXIgZm9yIHRoZSBn aXZlbiBmaWxlLiBUaGUKLSAgICAgICAgICBmaWxlbmFtZSBtdXN0IG5vdCBjb250YWluIHdpbGRj YXJkcy4gVGhlIHNlcnZlciByZXNwb25kcyB3aXRoIGFuCi0gICAgICAgICAgZXJyb3IgaWYgdGhl IGZpbGUgY2FuJ3QgYmUgZm91bmQsIGlzIG5vdCBhY2Nlc3NpYmxlLCBvciB0aGUgU0laRQotICAg ICAgICAgIGRpcmVjdGl2ZSBpcyBub3Qgc3VwcG9ydGVkLCBvdGhlcndpc2Ugd2l0aCB0aGUgbGVu Z3RoIG9mIHRoZQotICAgICAgICAgIGZpbGUgaW4gYnl0ZXMsIHdoaWNoIEtlcm1pdCBkaXNwbGF5 cyBhbmQgYWxzbyBtYWtlcyBhdmFpbGFibGUgdG8KLSAgICAgICAgICB5b3UgaW4gaXRzIFx2KGZ0 cF9tZXNzYWdlKSB2YXJpYWJsZS4gSWYgdGhlIGRpcmVjdGl2ZSBpcwotICAgICAgICAgIHN1Y2Nl c3NmdWwsIEtlcm1pdCAocmUtKWVuYWJsZXMgaXQgZm9yIGludGVybmFsIHVzZSBieSB0aGUgR0VU Ci0gICAgICAgICAgYW5kIE1HRVQgZGlyZWN0aXZlcyBvbiB0aGlzIGNvbm5lY3Rpb24uCi0KLSAg IEZUUCBNT0RUSU1FIGZpbGVuYW1lCi0gICAgICAgICAgV29ya3MganVzdCBsaWtlIHRoZSBTSVpF IGRpcmVjdGl2ZSBleGNlcHQgaXQgc2VuZHMgYW4gTURUTQotICAgICAgICAgIGRpcmVjdGl2ZS4g VXBvbiBzdWNjZXNzLCB0aGUgc2VydmVyIHNlbmRzIG1vZGlmaWNhdGlvbiBkYXRlLXRpbWUKLSAg ICAgICAgICBzdHJpbmcsIHdoaWNoIEtlcm1pdCBpbnRlcnByZXRzIGZvciB5b3UgYW5kIGFsc28g bWFrZXMgYXZhaWxhYmxlCi0gICAgICAgICAgaW4gaXRzIFx2KGZ0cF9tZXNzYWdlKSB2YXJpYWJs ZS4KLQotICAgV2hlbmV2ZXIgYSBTSVpFIG9yIE1EVE0gZGlyZWN0aXZlIGlzIHNlbnQgaW1wbGlj aXRseSBhbmQgcmVqZWN0ZWQgYnkKLSAgIHRoZSBzZXJ2ZXIgYmVjYXVzZSBpdCBpcyB1bmtub3du LCBLZXJtaXQgYXV0b21hdGljYWxseSBkaXNhYmxlcyBpdC4KLQotMy4xMS4zLiBVc2luZyBNR0VU OiBOTFNUIHZlcnN1cyBNTFNECi0KLSAgIFdoZW4geW91IGdpdmUgYW4gTUdFVCBjb21tYW5kIHRv IGFuIEZUUCBjbGllbnQsIGl0IHNlbmRzIGEgcmVxdWVzdCB0bwotICAgdGhlIEZUUCBzZXJ2ZXIg Zm9yIGEgbGlzdCBvZiBmaWxlcywgYW5kIHRoZW4gdXBvbiBzdWNjZXNzZnVsIHJlY2VpcHQgb2YK LSAgIHRoZSBsaXN0LCBnb2VzIHRocm91Z2ggaXQgYW5kIGlzc3VlcyBhIFJFVFIgKHJldHJpZXZl KSBkaXJlY3RpdmUgZm9yCi0gICBlYWNoIGZpbGUgb24gdGhlIGxpc3QgKG9yIHBvc3NpYmx5IG9u bHkgZm9yIHNlbGVjdGVkIGZpbGVzKS4KLQotICAgV2l0aCB0aGUgbmV3IEZUUCBwcm90b2NvbCBl eHRlbnNpb25zLCBub3cgdGhlcmUgYXJlIHR3byB3YXlzIHRvIGdldCB0aGUKLSAgIGxpc3Qgb2Yg ZmlsZXM6IHRoZSBOTFNUIGRpcmVjdGl2ZSwgd2hpY2ggaGFzIGJlZW4gcGFydCBvZiBGVFAgcHJv dG9jb2wKLSAgIHNpbmNlIHRoZSBiZWdpbm5pbmcsIGFuZCB0aGUgbmV3IE1MU0QgZGlyZWN0aXZl LCB3aGljaCBpcyBuZXcgYW5kIG5vdAotICAgeWV0IHdpZGVseSBpbXBsZW1lbnRlZC4gV2hlbiBO TFNUIGlzIHVzZWQgYW5kIHlvdSBnaXZlIGEgY29tbWFuZCBsaWtlCi0gICAibWdldCAqLnR4dCIs IHRoZSBGVFAgY2xpZW50IHNlbmRzOgotCi1OTFNUICoudHh0Ci0KLSAgIGFuZCB0aGUgc2VydmVy IHNlbmRzIGJhY2sgYSBsaXN0IG9mIHRoZSBmaWxlcyB3aG9zZSBuYW1lcyBtYXRjaCwgZS5nLgot Ci1mb28udHh0Ci1iYXIudHh0Ci1iYXoudHh0Ci0KLSAgIFRoZW4gd2hlbiBkb3dubG9hZGluZyBl YWNoIGZpbGUsIHRoZSBjbGllbnQgc2VuZHMgU0laRSAoaWYgaXQgd2FudHMKLSAgIGhhdmUgYSBw ZXJjZW50LWRvbmUgZGlzcGxheSkgYW5kIE1EVE0gKGlmIGl0IHdhbnRzIHRvIHNldCB0aGUKLSAg IGRvd25sb2FkZWQgZmlsZSdzIHRpbWVzdGFtcCB0byBtYXRjaCB0aGF0IG9mIHRoZSBvcmlnaW5h bCksIGFzIHdlbGwgYXMKLSAgIFJFVFIgKHRvIHJldHJpZXZlIHRoZSBmaWxlKS4KLQotICAgQnV0 IHdoZW4gTUxTRCBpcyB1c2VkLCB0aGUgY2xpZW50IGlzIG5vdCBzdXBwb3NlZCB0byBzZW5kIHRo ZSBmaWxlbmFtZQotICAgb3Igd2lsZGNhcmQgdG8gdGhlIHNlcnZlcjsgaW5zdGVhZCBpdCBzZW5k cyBhbiBNTFNEIGRpcmVjdGl2ZSB3aXRoIG5vCi0gICBhcmd1bWVudCAob3IgdGhlIG5hbWUgb2Yg YSBkaXJlY3RvcnkpLCBhbmQgdGhlIHNlcnZlciBzZW5kcyBiYWNrIGEgbGlzdAotICAgb2YgYWxs IHRoZSBmaWxlcyBpbiB0aGUgY3VycmVudCBvciBnaXZlbiBkaXJlY3Rvcnk7IHRoZW4gdGhlIGNs aWVudAotICAgZ29lcyB0aHJvdWdoIHRoZSBsaXN0IGFuZCBjaGVja3MgZWFjaCBmaWxlIHRvIHNl ZSBpZiBpdCBtYXRjaGVzIHRoZQotICAgZ2l2ZW4gcGF0dGVybiwgdGhlIHJhdGlvbmFsZSBiZWlu ZyB0aGF0IHRoZSB1c2VyIGtub3dzIG9ubHkgdGhlIGxvY2FsCi0gICBjb252ZW50aW9ucyBmb3Ig d2lsZGNhcmRzIGFuZCBub3QgbmVjZXNzYXJpbHkgdGhlIHNlcnZlcidzIGNvbnZlbnRpb25zLgot ICAgU28gd2l0aCBOTFNUIHRoZSBzZXJ2ZXIgaW50ZXJwcmV0cyB3aWxkY2FyZHM7IHdpdGggTUxT RCB0aGUgY2xpZW50Ci0gICBkb2VzLgotCi0gICAgIFRoZSBpbnRlcnByZXRhdGlvbiBvZiBOTFNU IHdpbGRjYXJkcyBieSB0aGUgc2VydmVyIGlzIG5vdAotICAgICBuZWNlc3NhcmlseSByZXF1aXJl ZCBvciBldmVuIGVudmlzaW9uZWQgYnkgdGhlIEZUUCBwcm90b2NvbAotICAgICBkZWZpbml0aW9u IChSRkMgOTU5KSwgYnV0IGluIHByYWN0aWNlIG1vc3QgY2xpZW50cyBhbmQgc2VydmVycyB3b3Jr Ci0gICAgIHRoaXMgd2F5LgotCi0gICBUaGUgcHJpbmNpcGFsIGFkdmFudGFnZSBvZiBNTFNEIGlz IHRoYXQgaW5zdGVhZCBvZiBzZW5kaW5nIGJhY2sgYQotICAgc2ltcGxlIGxpc3Qgb2YgZmlsZW5h bWVzLCBpdCBzZW5kcyBiYWNrIGEga2luZCBvZiBkYXRhYmFzZSBpbiB3aGljaAotICAgZWFjaCBl bnRyeSBjb250YWlucyBhIGZpbGVuYW1lIHRvZ2V0aGVyIHdpdGggaW5mb3JtYXRpb24gYWJvdXQg dGhlCi0gICBmaWxlOiB0eXBlLCBzaXplLCB0aW1lc3RhbXAsIGFuZCBzbyBvbjsgZm9yIGV4YW1w bGU6Ci0KLXNpemU9MDt0eXBlPWRpcjtwZXJtPWVsO21vZGlmeT0yMDAyMDQwOTE5MTUzMDsgYmlu Ci1zaXplPTM5MTkzMTI7dHlwZT1maWxlO3Blcm09cjttb2RpZnk9MjAwMDAzMTAxNDA0MDA7IGJh ci50eHQKLXNpemU9NjY4NjE3Njt0eXBlPWZpbGU7cGVybT1yO21vZGlmeT0yMDAwMTIxNTE4MTAw MDsgYmF6LnR4dAotc2l6ZT0zODIwMDkyO3R5cGU9ZmlsZTtwZXJtPXI7bW9kaWZ5PTIwMDAwMzEw MTQwMzAwOyBmb28udHh0Ci1zaXplPTI3NDM5O3R5cGU9ZmlsZTtwZXJtPXI7bW9kaWZ5PTIwMDIw OTIzMTUxMzEyOyBmb28uemlwCi0oZXRjIGV0Yy4uLikKLQotICAgKElmIHRoZSBmb3JtYXQgb2Yg dGhlIGZpbGUgbGlzdCB3ZXJlIHRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiBOTFNUCi0gICBh bmQgTUxTRCwgdGhlIGRpc2N1c3Npb24gd291bGQgYmUgZmluaXNoZWQ6IGl0IHdvdWxkIGFsd2F5 cyBiZSBiZXR0ZXIKLSAgIHRvIHVzZSBNTFNEIHdoZW4gYXZhaWxhYmxlLCBhbmQgdGhlIE1HRVQg dXNlciBpbnRlcmZhY2Ugd291bGQgbmVlZCBubwotICAgY2hhbmdlcy4gQnV0IHRoZXJlJ3MgYSBs b3QgbW9yZSB0byBNTFNEIHRoYW4gdGhlIGZpbGUtbGlzdCBmb3JtYXQ7IHJlYWQKLSAgIG9uLi4u KQotCi0gICBUaGUgY2xpZW50IGxlYXJucyB3aGV0aGVyIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgTUxT RCBpbiBGRUFUIGV4Y2hhbmdlLgotICAgQnV0IHRoZSBmYWN0IHRoYXQgdGhlIHNlcnZlciBzdXBw b3J0cyBNTFNEIGRvZXNuJ3QgbWVhbiB0aGUgY2xpZW50Ci0gICBzaG91bGQgYWx3YXlzIHVzZSBp dC4gSXQgaXMgYmV0dGVyIHRvIHVzZSBNTFNEOgotCi0gICAgICogT24gY29ubmVjdGlvbnMgd2hl cmUgdGhlIHNlcnZlciBpbXBvc2VzIGEgdGltZSBwZW5hbHR5IGZvciBldmVyeQotICAgICAgIGNv bW1hbmQsIGUuZy4gdGhlIFJlZCBIYXQgUmF3aGlkZSBzZXJ2ZXIuIFdpdGggTUxTRCwgdGhlIGNs aWVudAotICAgICAgIG5lZWRzIHRvIHNlbmQgb25seSBvbmUgY29tbWFuZCAoUkVUUikgcGVyIGZp bGUsIHdoZXJlYXMgTkxTVAotICAgICAgIHJlcXVpcmVzIHRocmVlIChTSVpFLCBSRVRSLCBhbmQg TURUTSkuIFN1cHBvc2UgdGhlcmUgaXMgYSAzMC1zZWNvbmQKLSAgICAgICBkZWxheSBmb3IgZWFj aCBjb21tYW5kIGFuZCAxMDAwIGZpbGVzIGFyZSB0byBiZSBmZXRjaGVkOyBpbiB0aGF0Ci0gICAg ICAgY2FzZSwgTUxTRCBzYXZlcyA2MCwwMDAgc2Vjb25kcyA9IDEwMDAgbWludXRlcyA9IDE2IGhv dXJzIGFuZCA0MAotICAgICAgIG1pbnV0ZXMuCi0gICAgICogRm9yIHJlY3Vyc2l2ZSBkb3dubG9h ZHMgc2luY2UgdGhlcmUgaXMgbm8gZGVwZW5kYWJsZSB3YXkgdG8KLSAgICAgICBkb3dubG9hZCBk aXJlY3RvcnkgdHJlZXMgd2l0aCBOTFNULgotCi0gICBCdXQgaXQgaXMgYmV0dGVyIHRvIHVzZSBO TFNUOgotCi0gICAgICogSWYgeW91IHdhbnQgb25seSBhIGNvdXBsZSBzaG9ydCBmaWxlcyBvdXQg b2YgYSBsYXJnZSBkaXJlY3RvcnkuIEluCi0gICAgICAgdGhpcyBjYXNlLCBOTFNUIGlzIHRoZSBi ZXR0ZXIgY2hvaWNlIHNpbmNlIHRoZSBzZXJ2ZXIgc2VuZHMgYSBsaXN0Ci0gICAgICAgb2Ygb25s eSB0aGUgZmlsZXMgeW91IHdhbnQsIG5vdCBhIGxpc3Qgb2YgKHNheSkgYSBtaWxsaW9uIGZpbGVz LAotICAgICAgIHdoaWNoIGNhbiBtYWtlIGEgYmlnIGRpZmZlcmVuY2Ugb24gc2xvdyBjb25uZWN0 aW9ucy4gRm9yIGV4YW1wbGUsCi0gICAgICAgc3VwcG9zZSB5b3VyIHdpbGRjYXJkIG1hdGNoZXMg dGhyZWUgZmlsZXMgb2YgMUsgZWFjaCwgYnV0IHRoZQotICAgICAgIG1pbGxpb24tZmlsZSBsaXN0 aW5nIGlzIDgwTUIgbG9uZywgYW5kIHlvdXIgY29ubmVjdGlvbiBpcyB0aHJvdWdoIGEKLSAgICAg ICBtb2RlbS4gVGhlIG92ZXJoZWFkIG9mIHVzaW5nIE1MU0QgaXMgcHJhY3RpY2FsbHkgaW5maW5p dGUuCi0gICAgICogSWYgdGhlIHNlcnZlciBzdXBwb3J0cyB3aWxkY2FyZGluZyBmZWF0dXJlcyBu b3Qga25vd24gdG8gdGhlCi0gICAgICAgY2xpZW50LCBidXQgdGhhdCBjYW4gYmUgdXNlZCB0byBh Y2hpZXZlIGRlc2lyYWJsZSBlZmZlY3RzIG90aGVyd2lzZQotICAgICAgIHVub2J0YWluYWJsZSwg c3VjaCBhcyAiW2Rpci4uLl0qLnR4dCIgaW4gVk1TIG9yIEFPUy9WUyAiZXhjZXB0IgotICAgICAg IGNsYXVzZXMuCi0gICAgICogSWYgeW91IGhhdmUgYmVlbiBnaXZlbiBhIHdpbGRjYXJkIHN0cmlu ZyBieSBhbiBGVFAgc2l0ZQotICAgICAgIGFkbWluaXN0cmF0b3IgZm9yIGZldGNoaW5nIGEgc3Bl Y2lmaWMgZ3JvdXAgb2YgZmlsZXMgb3V0IG9mIGEKLSAgICAgICBsYXJnZXIgZGlyZWN0b3J5LCBl LmcuICJtZ2V0IGNrW2N1d10qLltjd2hdIG1ha2VmaWxlIiwgdGhhdCBpcwotICAgICAgIGV4cGVj dGVkIHRvIHdvcmsgd2l0aCBhbnkgY2xpZW50IChhbiBGVFAgc2l0ZSBhZG1pbmlzdHJhdG9yIGNh bid0Ci0gICAgICAgYmUgZXhwZWN0ZWQgdG8ga25vdyB0aGUgd2lsZGNhcmQgc3ludGF4IG9mIGV2 ZXJ5IEZUUCBjbGllbnQpLgotCi0gICBCdXQgd2hlbiB1c2luZyBNTFNEIHRoZXJlIGFyZSBjb21w bGljYXRpb25zOgotCi0gICAgICogTUxTRCB3YW50cyBlaXRoZXIgYSBibGFuayBhcmd1bWVudCAo bWVhbmluZyB0aGUgY3VycmVudCBkaXJlY3RvcnkpCi0gICAgICAgb3IgZWxzZSB0aGUgbmFtZSBv ZiBhIHNwZWNpZmljIGRpcmVjdG9yeS4gVGhlIGNsaWVudCBtdXN0IG5vdCBzZW5kCi0gICAgICAg aXQgYSB3aWxkY2FyZCBvciBhIGZpbGVuYW1lLgotICAgICAqIEJ1dCBpZiB0aGUgdXNlcidzIGNv bW1hbmQgaXMgIm1nZXQgeHh4IiwgaG93IGRvZXMgdGhlIGNsaWVudCBrbm93Ci0gICAgICAgd2hl dGhlciB0byBzZW5kICJ4eHgiIGluIHRoZSBNTFNEIGRpcmVjdGl2ZT8gSXQgbWlnaHQgYmUgdGhl IG5hbWUKLSAgICAgICBvZiBhIGRpcmVjdG9yeSBvbiBvbiB0aGUgc2VydmVyLCBpbiB3aGljaCBj YXNlIGl0IHNob3VsZCBiZSBzZW50LAotICAgICAgIG9yIGl0IG1pZ2h0IGJlIHRoZSBuYW1lIG9m IGEgZmlsZSBvbiB0aGUgc2VydmVyIChvciBhIHdpbGRjYXJkKSwgaW4KLSAgICAgICB3aGljaCBj YXNlIGl0IG11c3Qgbm90IGJlIHNlbnQuIFNpbmNlIHRoZSBjbGllbnQga25vd3MgaXRzIG93bgot ICAgICAgIHdpbGRjYXJkIHN5bnRheCwgdGhlbiBpbiBtb3N0IGNhc2VzIGl0IHdvdWxkIGJlIHJp Z2h0IHRvIHNlbmQKLSAgICAgICAiTUxTRCIgd2l0aCBubyBhcmd1bWVudCBpZiB4eHggaXMgd2ls ZCwgYW5kIHRvIHNlbmQgIk1MU0QgeHh4IiBpZgotICAgICAgIGl0IGlzIG5vdC4KLSAgICAgKiBC dXQgc3VwcG9zZSB0aGUgc2VydmVyJ3MgZmlsZSBzeXN0ZW0gYWxsb3dzIGZpbGVuYW1lIGNoYXJh Y3RlcnMKLSAgICAgICB0aGF0IGNvcnJlc3BvbmQgd2l0aCB0aGUgY2xpZW50J3Mgd2lsZGNhcmQg c3ludGF4PyBGb3IgZXhhbXBsZToKLSAgICAgICAiW2FiY10iIGNvdWxkIGJlIGVpdGhlciBhIHZh bGlkIFZNUyBkaXJlY3RvcnkgbmFtZSBvciBhIHdpbGRjYXJkCi0gICAgICAgcGF0dGVybiB1c2Vk IGJ5IHRoZSBGVFAgY2xpZW50LiBXaGF0IHNob3VsZCB0aGUgY2xpZW50IGRvIHdpdGgKLSAgICAg ICAibWdldCBbYWJjXSI/IEluIHRoaXMgY2FzZSB0aGVyZSBtdXN0IGJlIGEgd2F5IGZvciB0aGUg dXNlciB0bwotICAgICAgIGZvcmNlIHNlbmRpbmcgdGhlIE1HRVQgYXJndW1lbnQgYXMgdGhlIE1M U0QgYXJndW1lbnQuCi0gICAgICogSWYgInh4eCIgaXMgYSByZWd1bGFyIGZpbGUgaW4gdGhlIHNl cnZlcidzIGN1cnJlbnQgZGlyZWN0b3J5LCAibWdldAotICAgICAgIHh4eCIgd29ya3Mgd2l0aCBO TFNUIGJ1dCBub3Qgd2l0aCBNTFNELgotCi0gICBUbyBmdXJ0aGVyIGNvbXBsaWNhdGUgbWF0dGVy cywgTkxTVCBjYW4gKGluIHRoZW9yeSkgd29yayBqdXN0IGxpa2UKLSAgIE1MU0Q6IGlmIHNlbnQg d2l0aCBhIGJsYW5rIGFyZ3VtZW50IG9yIGEgZGlyZWN0b3J5IG5hbWUsIGl0IGlzIHN1cHBvc2Vk Ci0gICB0byByZXR1cm4gYSBjb21wbGV0ZSBsaXN0IG9mIGZpbGVzIGluIHRoZSBjdXJyZW50IG9y IGdpdmVuIGRpcmVjdG9yeSwKLSAgIHdoaWNoIHRoZSBjbGllbnQgY2FuIG1hdGNoIGxvY2FsbHkg YWdhaW5zdCBzb21lIHBhdHRlcm4uIEl0IGlzIG5vdAotICAga25vd24gaWYgYW55IEZUUCBzZXJ2 ZXIgb3IgY2xpZW50IGRvZXMgdGhpcyBidXQgbmV2ZXJ0aGVsZXNzLCBpdCBzaG91bGQKLSAgIGJl IHBvc3NpYmxlIHNpbmNlIHRoaXMgYmVoYXZpb3IgY2FuIGJlIGluZmVycmVkIGZyb20gUkZDIDk1 OS4KLQotICAgSW4gdmlldyBvZiB0aGVzZSBjb25zaWRlcmF0aW9ucywgYW5kIGdpdmVuIHRoZSBu ZWVkIHRvIHByZXNlcnZlIHRoZQotICAgdHJhZGl0aW9uYWwgRlRQIGNsaWVudCBjb21tYW5kIHN0 cnVjdHVyZSBhbmQgYmVoYXZpb3Igc28gdGhlIHNvZnR3YXJlCi0gICB3aWxsIGJlIHVzYWJsZSBi eSBtb3N0IHBlb3BsZToKLQotICAgIDEuIFRoZSBNR0VUIGNvbW1hbmQgc2hvdWxkIHByb2R1Y2Ug dGhlIGV4cGVjdGVkIHJlc3VsdCBpbiB0aGUgY29tbW9uCi0gICAgICAgY2FzZXMsIHJlZ2FyZGxl c3Mgb2Ygd2hldGhlciBOTFNUIG9yIE1MU0QgaXMgdXNlZCB1bmRlcm5lYXRoLgotICAgIDIuIEZv ciBhbm9tYWxvdXMgY2FzZXMsIHRoZSB1c2VyIG5lZWRzIGEgd2F5IHRvIGNvbnRyb2wgd2hldGhl ciB0aGUKLSAgICAgICBNR0VUIGFyZ3VtZW50IGlzIHNlbnQgdG8gdGhlIHNlcnZlciBvciBrZXB0 IGZvciBsb2NhbCB1c2UuCi0gICAgMy4gQXQgdGhlIHNhbWUgdGltZSwgdGhlIHVzZXIgbWlnaHQg bmVlZCBhIHdheSB0byBzZW5kIGEgZGlyZWN0b3J5Ci0gICAgICAgbmFtZSB0byB0aGUgc2VydmVy LCBpbmRlcGVuZGVudCBvZiBhbnkgd2lsZGNhcmQgcGF0dGVybi4KLSAgICA0LiBUaGUgdXNlciBu ZWVkcyBhIHdheSB0byBmb3JjZSBOTFNUIG9yIE1MU0QgZm9yIGEgZ2l2ZW4gTUdFVAotICAgICAg IGNvbW1hbmQuCi0KLSAgIEJ5IGRlZmF1bHQsIEtlcm1pdCdzIE1HRVQgY29tbWFuZCB1c2VzIE1M U0QgaWYgTUxTVCBpcyByZXBvcnRlZCBieSB0aGUKLSAgIHNlcnZlciBpbiBpdHMgRkVBVCBsaXN0 LiBXaGVuIE1MU0QgaXMgdXNlZCwgdGhlIGZpbGVzcGVjIGlzIHNlbnQgdG8gdGhlCi0gICBzZXJ2 ZXIgaWYgaXQgaXMgbm90IHdpbGQgKGFjY29yZGluZyB0byBLZXJtaXQncyBvd24gZGVmaW5pdGlv biBvZgotICAgIndpbGQiIHNpbmNlIGl0IGNhbid0IHBvc3NpYmx5IGtub3cgdGhlIHNlcnZlcidz IGRlZmluaXRpb24pLiBJZiB0aGUKLSAgIGZpbGVzcGVjIGlzIHdpbGQgaXQgaXMgaGVsZCBmb3Ig bG9jYWwgdXNlIHRvIHNlbGVjdCBmaWxlcyBmcm9tIHRoZSBsaXN0Ci0gICByZXR1cm5lZCBieSB0 aGUgc2VydmVyLiBJZiBNTFNUIGlzIG5vdCByZXBvcnRlZCBieSB0aGUgc2VydmVyIG9yIGlzCi0g ICBkaXNhYmxlZCwgS2VybWl0IHNlbmRzIHRoZSBNR0VUIGZpbGVzcGVjIHdpdGggdGhlIE5MU1Qg ZGlyZWN0aXZlLgotCi0gICBUaGUgZGVmYXVsdCBiZWhhdmlvciBjYW4gYmUgb3ZlcnJpZGRlbiBn bG9iYWxseSB3aXRoIEZUUCBESVNBQkxFIE1MU1QsCi0gICB3aGljaCBmb3JjZXMgS2VybWl0IHRv IHVzZSBOTFNUIHRvIGdldCBmaWxlIGxpc3RzLiBBbmQgdGhlbiBmb3IKLSAgIHNpdHVhdGlvbnMg aW4gd2hpY2ggTUxTRCBpcyBlbmFibGVkLCB0aGUgZm9sbG93aW5nIE1HRVQgc3dpdGNoZXMgY2Fu IGJlCi0gICB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0cyBmb3IgYSBzcGVjaWZpYyBNR0VU IG9wZXJhdGlvbjoKLQotICAgL05MU1QKLSAgICAgICAgICBGb3JjZXMgdGhlIGNsaWVudCB0byBz ZW5kIE5MU1QuIEV4YW1wbGU6Ci0KLW1nZXQgL25sc3QgZm9vLioKLQotICAgL01MU0QKLSAgICAg ICAgICBGb3JjZXMgdGhlIGNsaWVudCB0byBzZW5kIE1MU0QgKGV2ZW4gaWYgTUxTVCBpcyBkaXNh YmxlZCkuCi0gICAgICAgICAgRXhhbXBsZToKLQotbWdldCAvbWxzZCBmb28uKgotCi0gICAvTUFU Q0g6cGF0dGVybgotICAgICAgICAgIFdoZW4gdGhpcyBzd2l0Y2ggaXMgZ2l2ZW4sIGl0IGZvcmNl cyB0aGUgY2xpZW50IHRvIGhvbGQgdGhlCi0gICAgICAgICAgcGF0dGVybiBmb3IgbG9jYWwgdXNl IGFnYWluc3QgdGhlIHJldHVybmVkIGZpbGUgbGlzdC4gSWYgYQotICAgICAgICAgIHJlbW90ZSBm aWxlc3BlYyBpcyBhbHNvIGdpdmVuIChlLmcuIHRoZSAiYmxhaCIgaW4gIm1nZXQKLSAgICAgICAg ICAvbWF0Y2g6Ki50eHQgYmxhaCIpLCB0aGVuIGl0IGlzIHNlbnQgYXMgdGhlIE5MU1Qgb3IgTUxT RAotICAgICAgICAgIGFyZ3VtZW50LCBwcmVzdW1hYmx5IHRvIHNwZWNpZnkgdGhlIGRpcmVjdG9y eSB3aG9zZSBmaWxlcyBhcmUgdG8KLSAgICAgICAgICBiZSBsaXN0ZWQuIFdoZW4gdGhlIC9NQVRD SCBzd2l0Y2ggaXMgbm90IGdpdmVuLCB0aGUgTUdFVAotICAgICAgICAgIGZpbGVzcGVjIGlzIHNl bnQgdG8gdGhlIHNlcnZlciBpZiB0aGUgZGlyZWN0aXZlIGlzIE5MU1Qgb3IgaWYKLSAgICAgICAg ICB0aGUgZmlsZXNwZWMgaXMgbm90IHdpbGQuIEV4YW1wbGVzOgotCi0gIENvbW1hbmQ6ICAgICAg ICAgICAgICAgICAgIFdpdGggTkxTVDogICAgIFdpdGggTUxTRDoKLSAgICBtZ2V0ICAgICAgICAg ICAgICAgICAgICAgIE5MU1QgICAgICAgICAgIE1MU0QKLSAgICBtZ2V0ICoudHh0ICAgICAgICAg ICAgICAgIE5MU1QgKi50eHQgICAgIE1MU0QKLSAgICBtZ2V0IGZvbyAgICAgICAgICAgICAgICAg IE5MU1QgZm9vICAgICAgIE1MU0QgZm9vCi0gICAgbWdldCAvbWF0Y2g6Ki50eHQgICAgICAgICBO TFNUICAgICAgICAgICBNTFNECi0gICAgbWdldCAvbWF0Y2g6Ki50eHQgZm9vICAgICBOTFNUIGZv byAgICAgICBNTFNEIGZvbwotCi0gICBJbiBvdGhlciB3b3JkcywgdGhlIHBhdHRlcm4gaXMgYWx3 YXlzIGludGVycHJldGVkIGxvY2FsbHkgdW5sZXNzIE1HRVQKLSAgIHVzZXMgTkxTVCBhbmQgbm8g L01BVENIIHN3aXRjaCB3YXMgZ2l2ZW4uCi0KLTMuMTEuNC4gRXhhbXBsZXMKLQotMy4xMS40LjEu IERvd25sb2FkaW5nIGEgU2luZ2xlIEZpbGUKLQotICAgVGhlcmUgYXJlIG5vIGNob2ljZXMgaGVy ZSwganVzdCB1c2UgdGhlIEZUUCBHRVQgY29tbWFuZC4gS2VybWl0IGFsd2F5cwotICAgc2VuZHMg dGhlIFJFVFIgZGlyZWN0aXZlLCBhbmQgcG9zc2libHkgU0laRSBhbmQvb3IgTURUTS4gVGhlIHNt YWxsCi0gICBhZHZhbnRhZ2Ugb2YgdXNpbmcgTUxTVCBpbiB0aGlzIGNhc2UgaXMgb3V0d2VpZ2hl ZCBieSB0aGUgcmlzayBhbmQKLSAgIGVmZm9ydCBvZiBjb2RpbmcgYSBzcGVjaWFsIGNhc2UuCi0K LTMuMTEuNC4yLiBEb3dubG9hZGluZyBhIEdyb3VwIG9mIEZpbGVzIGZyb20gYSBTaW5nbGUgRGly ZWN0b3J5Ci0KLSAgIFRoaXMgY2FzZSBwcmVzZW50cyB0cmFkZW9mZnMsIGVzcGVjaWFsbHkgb24g c2xvdyBjb25uZWN0aW9uczoKLQotICAgICAqIEZvciBkb3dubG9hZGluZyBhbGwgb3IgbW9zdCBv ZiB0aGUgZmlsZXMgaW4gYSBkaXJlY3RvcnksIE1MU0QgaXMKLSAgICAgICBiZXR0ZXIgYmVjYXVz ZSBpdCBlbGltaW5hdGVzIHRoZSBuZWVkIHRvIHNlbmQgU0laRSBhbmQgTURUTSBmb3IKLSAgICAg ICBlYWNoIGZpbGUuIE5vIHNwZWNpYWwgYWN0aW9ucyBhcmUgcmVxdWlyZWQgaW4gdGhpcyBjYXNl OyBLZXJtaXQKLSAgICAgICB1c2VzIE1MU0QgYXV0b21hdGljYWxseSBpZiB0aGUgc2VydmVyIHN1 cHBvcnRzIGl0ICh1bmxlc3MgeW91IGhhdmUKLSAgICAgICBkaXNhYmxlZCBpdCkuCi0gICAgICog Rm9yIGEgc21hbGwgbnVtYmVyIG9mIGZpbGVzIGZyb20gYSBsYXJnZSBkaXJlY3RvcnksIE5MU1Qg aXMgYmV0dGVyCi0gICAgICAgYmVjYXVzZSBpdCBieXBhc3NlcyBkb3dubG9hZGluZyBvZiBhIHBv dGVudGlhbGx5IGh1Z2UgZmlsZSBsaXN0Ci0gICAgICAgcHJpb3IgdG8gdGhlIGZpbGVzIHRoZW1z ZWx2ZXMuIElmIHlvdSBoYXZlIGEgY29ubmVjdGlvbiB0byBhIHNlcnZlcgotICAgICAgIHRoYXQg c3VwcG9ydHMgTUxTRCwgdXNlIHRoZSAvTkxTVCBzd2l0Y2ggdG8gZm9yY2UgTkxTVDoKLQotbWdl dCAvbmxzdCB0WzEyMzRdLmgKLQotICAgICAqIElmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgTUxTRCBi dXQgZG9lcyBub3Qgc3VwcG9ydCBzZXBhcmF0ZSBTSVpFIG9yCi0gICAgICAgTURUTSBkaXJlY3Rp dmVzLCBhbmQgeW91IG5lZWQgdGhlIHNpemUgYW5kL29yIHRpbWVzdGFtcAotICAgICAgIGluZm9y bWF0aW9uLCBNTFNEIGlzIGJldHRlcjsgbm8gc3BlY2lhbCBhY3Rpb25zIHJlcXVpcmVkLgotICAg ICAqIElmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgTUxTRCBidXQgZG9lcyBub3Qgc3VwcG9ydCB0aGUg InNpemUiIGFuZAotICAgICAgICJtb2RpZnkiIGZhY3RzLCBidXQgaXQgZG9lcyBzdXBwb3J0IHRo ZSBTSVpFIG9yIE1EVE0gZGlyZWN0aXZlcywKLSAgICAgICBhbmQgeW91IG5lZWQgdGhlIHNpemUg YW5kL29yIHRpbWVzdGFtcCBpbmZvcm1hdGlvbiwgTkxTVCBpcyBiZXR0ZXIuCi0KLTMuMTEuNC4z LiBEb3dubG9hZGluZyBhIERpcmVjdG9yeSBUcmVlCi0KLSAgIE1MU0QgaXMgdGhlIG9ubHkgY2hv aWNlIGZvciByZWN1cnNpdmUgZG93bmxvYWRzOyB0aGV5IHJhcmVseSwgaWYgZXZlciwKLSAgIHdv cmsgd2l0aCBOTFNUICh0aGUgZmV3IGNhc2VzIHdoZXJlIHRoZXkgZG8gd29yayByZWx5IG9uIGV4 dHJhLXByb3RvY29sCi0gICAic2VjcmV0IiBub3RhdGlvbnMgZm9yIHRoZSBOTFNUIGFyZ3VtZW50 KS4gTm8gc3BlY2lhbCBhY3Rpb25zIGFyZQotICAgcmVxdWlyZWQgdG8gZm9yY2UgTUxTRCB3aGVu IHRoZSBzZXJ2ZXIgc3VwcG9ydHMgaXQsIHVubGVzcyB5b3UgaGF2ZQotICAgZGlzYWJsZWQgaXQu IEV4YW1wbGVzOgotCi0gICBNR0VUIC9SRUNVUlNJVkUKLSAgICAgICAgICBUaGlzIHRlbGxzIHRo ZSBzZXJ2ZXIgdG8gc2VuZCBhbGwgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGluIHRoZQotICAgICAg ICAgIHRyZWUgcm9vdGVkIGF0IGl0cyBjdXJyZW50IGRpcmVjdG9yeS4KLQotICAgTUdFVCAvUkVD VVJTSVZFICoudHh0Ci0gICAgICAgICAgVGhpcyB0ZWxscyB0aGUgc2VydmVyIHRvIHNlbmQgYWxs ICoudHh0IGZpbGVzIGluIHRoZSB0cmVlIHJvb3RlZAotICAgICAgICAgIGF0IGl0cyBjdXJyZW50 IGRpcmVjdG9yeS4KLQotICAgTUdFVCAvTUxTRCAvUkVDVVJTSVZFICoudHh0Ci0gICAgICAgICAg U2FtZSBhcyB0aGUgcHJldmlvdXMgZXhhbXBsZSBidXQgZm9yY2VzIEtlcm1pdCB0byBzZW5kIE1M U0QgaW4KLSAgICAgICAgICBjYXNlIGl0IHdhcyBkaXNhYmxlZCwgb3IgaW4gY2FzZSB0aGUgc2Vy dmVyIGlzIGtub3duIHRvIHN1cHBvcnQKLSAgICAgICAgICBpdCBldmVuIHRob3VnaCBpdCBkaWQg bm90IGFubm91bmNlIGl0IGluIGl0cyBGRUFUIGxpc3RpbmcuCi0KLSAgIE1HRVQgL1JFQ1VSU0lW RSAvTUFUQ0g6Ki56aXAgYXJjaGl2ZXMKLSAgICAgICAgICBUZWxscyB0aGUgc2VydmVyIHRvIHNl bmQgYWxsIFpJUCBmaWxlcyBpbiB0aGUgdHJlZSByb290ZWQgYXQgaXRzCi0gICAgICAgICAgImFy Y2hpdmVzIiBkaXJlY3RvcnkuCi0KLSAgIE1HRVQgL1JFQ1VSU0lWRSAvTUFUQ0g6KiBbYWJjXQot ICAgICAgICAgIFRoZSBzZXJ2ZXIgaXMgcnVubmluZyBvbiBWTVMgYW5kIHlvdSB3YW50IGl0IHRv IHNlbmQgYWxsIHRoZQotICAgICAgICAgIGZpbGVzIGluIHRoZSBkaXJlY3RvcnkgdHJlZSByb290 ZWQgYXQgW0FCQ10uIEJ1dCBzaW5jZSAiW2FiY10iCi0gICAgICAgICAgbG9va3MganVzdCBsaWtl IGEgd2lsZGNhcmQsIHlvdSBoYXZlIHRvIGluY2x1ZGUgYSAvTUFUQ0g6IHN3aXRjaAotICAgICAg ICAgIHRvIGZvcmNlIEtlcm1pdCB0byBzZW5kICJbYWJjXSIgYXMgdGhlIE1MU0QgYXJndW1lbnQu Ci0KLSAgIEluIGFsbCBjYXNlcyBpbiB3aGljaCB0aGUgL1JFQ1VSU0lWRSBzd2l0Y2ggaXMgaW5j bHVkZWQsIHRoZSBzZXJ2ZXIncwotICAgdHJlZSBpcyBkdXBsaWNhdGVkIGxvY2FsbHkuCi0KLSAg ICAgQWx0aG91Z2ggTUxTRCBhbGxvd3MgcmVjdXJzaW9uIGFuZCBOTFNUIGRvZXMgbm90LCB0aGUg TUxTRAotICAgICBzcGVjaWZpY2F0aW9uIHBsYWNlcyBhIGhlYXZ5IGJ1cmRlbiBvbiB0aGUgY2xp ZW50OyB0aGUgb2J2aW91cywKLSAgICAgc3RyYWlnaHRmb3J3YXJkLCBhbmQgZWxlZ2FudCBpbXBs ZW1lbnRhdGlvbiAoZGVwdGgtZmlyc3QsIHRoZSBvbmUKLSAgICAgdGhhdCBLZXJtaXQgY3VycmVu dGx5IHVzZXMpIHJlcXVpcmVzIGFzIG1hbnkgb3BlbiB0ZW1wb3JhcnkgZmlsZXMgYXMKLSAgICAg dGhlIHNlcnZlcidzIGRpcmVjdG9yeSB0cmVlIGlzIGRlZXAsIGFuZCB0aGVyZWZvcmUgY2xpZW50 IHJlc291cmNlCi0gICAgIGV4aGF1c3Rpb24gLS0gZS5nLiBleGNlZWRpbmcgdGhlIG1heGltdW0g bnVtYmVyIG9mIG9wZW4gZmlsZXMgLS0gaXMKLSAgICAgYSBkYW5nZXIuIFVuZm9ydHVuYXRlbHkg TUxTRCB3YXMgbm90IGRlc2lnbmVkIHdpdGggcmVjdXJzaW9uIGluCi0gICAgIG1pbmQuIChCcmVh ZHRoLWZpcnN0IHRyYXZlcnNhbCBjb3VsZCBiZSBwcm9ibGVtYXRpYyBkdWUgdG8gbGFjayBvZgot ICAgICBzdWZmaWNpZW50IG5hdmlnYXRpb24gaW5mb3JtYXRpb24uKQotCi0gICBPZiBjb3Vyc2Ug YWxsIG9mIEtlcm1pdCdzIG90aGVyIE1HRVQgc3dpdGNoZXMgY2FuIGJlIHVzZWQgdG9vLCBlLmcu IGZvcgotICAgZmluZXItZ3JhaW5lZCBmaWxlIHNlbGVjdGlvbiAoYnkgZGF0ZSwgc2l6ZSwgZXRj KSwgZm9yIG1vdmluZyBvcgotICAgcmVuYW1pbmcgZmlsZXMgYXMgdGhleSBhcnJpdmUsIHRvIG92 ZXJyaWRlIEtlcm1pdCdzIGF1dG9tYXRpYyBwZXItZmlsZQotICAgdGV4dC9iaW5hcnkgbW9kZSBz d2l0Y2hpbmcsIHRvIHBhc3MgdGhlIGluY29taW5nIGZpbGVzIHRocm91Z2ggYQotICAgZmlsdGVy LCB0byBjb252ZXJ0IHRleHQtZmlsZSBjaGFyYWN0ZXIgc2V0cywgYW5kIHNvIG9uLgotCi0zLjEx LjQuNC4gTkxTVC9NTFNEIFN1bW1hcnkgVGFibGUKLQotICAgSGVyZSdzIGEgdGFibGUgc3VtbWFy aXppbmcgTUdFVCBiZWhhdmlvciB3aGVuIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgYm90aAotICAgTkxT VCBhbmQgTUxTRC4gL05MU1QgYW5kIC9NTFNEIHN3aXRjaGVzIGFyZSBpbmNsdWRlZCBmb3IgY2xh cml0eSB0bwotICAgaW5kaWNhdGUgd2hpY2ggcHJvdG9jb2wgaXMgYmVpbmcgdXNlZCwgYW5kIHRo ZSBleHBlY3RlZCBlZmZlY3RzLiBJbgotICAgcHJhY3RpY2UgeW91IGNhbiBvbWl0IHRoZSAvTkxT VCBhbmQgL01MU0Qgc3dpdGNoZXMgYW5kIHRoZSBLZXJtaXQKLSAgIGNsaWVudCBjaG9vc2VzIHRo ZSBhcHByb3ByaWF0ZSBvciBkZXNpcmVkIHByb3RvY29sIGFzIGRlc2NyaWJlZCBhYm92ZS4KLSAg IFNhbXBsZSBjb21tYW5kcyBwcmVzdW1lIGEgVW5peCBmaWxlIHN5c3RlbSBvbiB0aGUgc2VydmVy LCBidXQgb2YgY291cnNlCi0gICB0aGUgc2VydmVyIGNhbiBoYXZlIGFueSBmaWxlIHN5c3RlbSBv ciBzeW50YXggYXQgYWxsLgotCi0gICBVc2VyJ3MgQ29tbWFuZCBGVFAgU2VuZHMgUmVtYXJrcwot ICAgbWdldCAvbmxzdCBOTFNUIEdldHMgYSBsaXN0IG9mIGFsbCB0aGUgZmlsZXMgaW4gdGhlIHNl cnZlcidzIGN1cnJlbnQKLSAgIGFuZCBkb3dubG9hZHMgZWFjaCBmaWxlLiBUaGUgbGlzdCBpbmNs dWRlcyBuYW1lcyBvbmx5LCBzbyBLZXJtaXQgYWxzbwotICAgbXVzdCBzZW5kIFNJWkUgYW5kIE1E VE0gZGlyZWN0aXZlcyBpZiBzaXplIGFuZCB0aW1lc3RhbXAgaW5mb3JtYXRpb24gaXMKLSAgIHJl cXVpcmVkICh0aGlzIGlzIGFsd2F5cyB0cnVlIG9mIE5MU1QpLiBTZW5kaW5nIE5MU1Qgd2l0aG91 dCBhbgotICAgYXJndW1lbnQgaXMgYWxsb3dlZCBieSB0aGUgUkZDOTU5IE5MU1QgZGVmaW5pdGlv biBhbmQgYnkgdGhlIEtlcm1pdCBGVFAKLSAgIGNsaWVudCwgYnV0IG1pZ2h0IG5vdCB3b3JrIHdp dGggb3RoZXIgY2xpZW50cywgYW5kIGFsc28gbWlnaHQgbm90IHdvcmsKLSAgIHdpdGggZXZlcnkg c2VydmVyLgotICAgbWdldCAvbmxzdCBmb28gTkxTVCBmb28gSWYgImZvbyIgaXMgYSBkaXJlY3Rv cnksIHRoaXMgZ2V0cyBhIGxpc3Qgb2YKLSAgIGFsbCB0aGUgZmlsZXMgZnJvbSB0aGUgc2VydmVy J3MgImZvbyIgZGlyZWN0b3J5IGFuZCBkb3dubG9hZHMgZWFjaAotICAgZmlsZTsgb3RoZXJ3aXNl IHRoaXMgZG93bmxvYWRzIHRoZSBmaWxlIG5hbWVkICJmb28iIChpZiBhbnkpIGZyb20gdGhlCi0g ICBzZXJ2ZXIncyBjdXJyZW50IGRpcmVjdG9yeS4KLSAgIG1nZXQgL25sc3QgKi50eHQgTkxTVCAq LnR4dCBHZXRzIGEgbGlzdCBvZiB0aGUgZmlsZXMgaW4gdGhlIHNlcnZlcidzCi0gICBjdXJyZW50 IGRpcmVjdG9yeSB3aG9zZSBuYW1lcyBtYXRjaCB0aGUgcGF0dGVybiAqLnR4dCwgYW5kIHRoZW4K LSAgIGRvd25sb2FkcyBlYWNoIGZpbGUgZnJvbSB0aGUgbGlzdC4gQmVjYXVzZSB3ZSBhcmUgdXNp bmcgTkxTVCwgd2Ugc2VuZAotICAgdGhlIGZpbGVzcGVjICgqLnR4dCkgdG8gdGhlIHNlcnZlciBh bmQgdGhlIHNlcnZlciBpbnRlcnByZXRzIGFueQotICAgd2lsZGNhcmRzLgotICAgbWdldCAvbmxz dCBmb28vKi50eHQgTkxTVCBmb28vKi50eHQgIEdldHMgYSBsaXN0IG9mIHRoZSBmaWxlcyBpbiB0 aGUKLSAgIHNlcnZlcidzICJmb28iIGRpcmVjdG9yeSB3aG9zZSBuYW1lcyBtYXRjaCB0aGUgcGF0 dGVybiAqLnR4dCwgYW5kIHRoZW4KLSAgIGRvd25sb2FkcyBlYWNoIGZpbGUgZnJvbSB0aGUgbGlz dCAoc2VydmVyIGludGVycHJldHMgd2lsZGNhcmRzKS4KLSAgIG1nZXQgL25sc3QgL21hdGNoOiou dHh0IE5MU1QgR2V0cyBhIGxpc3Qgb2YgYWxsIHRoZSBmaWxlcyBpbiB0aGUKLSAgIHNlcnZlcidz IGN1cnJlbnQgZGlyZWN0b3J5IGFuZCB0aGVuIGRvd25sb2FkcyBlYWNoIG9uZSB3aG9zZSBuYW1l Ci0gICBtYXRjaGVzIHRoZSBwYXR0ZXJuICoudHh0IChjbGllbnQgaW50ZXJwcmV0cyB3aWxkY2Fy ZHMpLgotICAgbWdldCAvbmxzdCAvbWF0Y2g6Ki50eHQgZm9vICBOTFNUIGZvbyBHZXRzIGEgbGlz dCBvZiBhbGwgdGhlIGZpbGVzIGluCi0gICB0aGUgc2VydmVyJ3MgImZvbyIgZGlyZWN0b3J5IGFu ZCB0aGVuIGRvd25sb2FkcyBlYWNoIG9uZSB3aG9zZSBuYW1lCi0gICBtYXRjaGVzIHRoZSBwYXR0 ZXJuICoudHh0IChjbGllbnQgaW50ZXJwcmV0cyB3aWxkY2FyZHMpLgotICAgbWdldCAvbWxzZCBN TFNEIEdldHMgYSBsaXN0IG9mIGFsbCB0aGUgZmlsZXMgZnJvbSB0aGUgc2VydmVyJ3MgY3VycmVu dAotICAgZGlyZWN0b3J5IGFuZCB0aGVuIGRvd25sb2FkcyBlYWNoIG9uZS4gVGhlIGxpc3QgbWln aHQgaW5jbHVkZSBzaXplIGFuZAotICAgdGltZXN0YW1wIGluZm9ybWF0aW9uLCBpbiB3aGljaCBj YXNlIEtlcm1pdCBkb2VzIG5vdCBuZWVkIHRvIHNlbmQgU0laRQotICAgYW5kIE1EVE0gZGlyZWN0 aXZlcyBmb3IgZWFjaCBmaWxlICh0aGlzIGlzIGFsd2F5cyB0cnVlIG9mIE1MU0QpLgotICAgbWdl dCAvbWxzZCBmb28gTUxTRCBmb28gR2V0cyBhIGxpc3Qgb2YgYWxsIHRoZSBmaWxlcyBmcm9tIHRo ZSBzZXJ2ZXIncwotICAgImZvbyIgZGlyZWN0b3J5ICh3aGVyZSB0aGUgc3RyaW5nICJmb28iIGRv ZXMgbm90IGNvbnRhaW4gd2lsZGNhcmRzKSBhbmQKLSAgIHRoZW4gZG93bmxvYWRzIGVhY2ggb25l LiBJZiAiZm9vIiBpcyBhIHJlZ3VsYXIgZmlsZSBhbmQgbm90IGEKLSAgIGRpcmVjdG9yeSwgdGhp cyBjb21tYW5kIGlzIHN1cHBvc2VkIHRvIGZhaWwsIGJ1dCBzb21lIHNlcnZlcnMgaGF2ZSBiZWVu Ci0gICBvYnNlcnZlZCB0aGF0IHNlbmQgdGhlIGZpbGUuCi0gICBtZ2V0IC9tbHNkICoudHh0IE1M U0QgR2V0cyBhIGxpc3Qgb2YgYWxsIHRoZSBmaWxlcyBmcm9tIHRoZSBzZXJ2ZXIncwotICAgY3Vy cmVudCBkaXJlY3RvcnkgYW5kIHRoZW4gZG93bmxvYWRzIG9ubHkgdGhlIG9uZXMgd2hvc2UgbmFt ZXMgbWF0Y2gKLSAgIHRoZSBwYXR0ZXJuICIqLnR4dCIuIEJlY2F1c2Ugd2UgYXJlIHVzaW5nIE1M U0QgYW5kIHRoZSBNR0VUIGZpbGVzcGVjIGlzCi0gICB3aWxkLCB3ZSBkbyBub3Qgc2VuZCB0aGUg ZmlsZXNwZWMgdG8gdGhlIHNlcnZlciwgYnV0IHRyZWF0IGl0IGFzIHRob3VnaAotICAgaXQgaGFk IGJlZW4gZ2l2ZW4gaW4gYSAvTUFUQ0g6IHN3aXRjaCBhbmQgdXNlIGl0IGxvY2FsbHkgdG8gbWF0 Y2ggdGhlCi0gICBuYW1lcyBpbiB0aGUgbGlzdC4KLSAgIG1nZXQgL21sc2QgZm9vLyoudHh0IE1M U0QgVGhpcyBvbmUgd29uJ3Qgd29yayBiZWNhdXNlIE1MU0QgcmVxdWlyZXMKLSAgIHRoYXQgdGhl IG5vdGlvbnMgb2Ygc2VydmVyIGRpcmVjdG9yeSBhbmQgZmlsZW5hbWUtbWF0Y2hpbmcgcGF0dGVy biBiZQotICAgc2VwYXJhdGVkLiBIb3dldmVyLCB0aGUgY2xpZW50LCB3aGljaCBjYW4ndCBiZSBl eHBlY3RlZCB0byBrbm93IHRoZQotICAgc2VydmVyJ3MgZmlsZS1zeXN0ZW0gc3ludGF4LCB3aW5k cyB1cCBzZW5kaW5nIGEgcmVxdWVzdCB0aGF0IHRoZSBzZXJ2ZXIKLSAgIHdpbGwgKG9yIHNob3Vs ZCkgcmVqZWN0LgotICAgbWdldCAvbWxzZCAvbWF0Y2g6Ki50eHQgTUxTRCBHZXRzIGEgbGlzdCBv ZiBhbGwgdGhlIGZpbGVzIGZyb20gdGhlCi0gICBzZXJ2ZXIncyBjdXJyZW50IGRpcmVjdG9yeSBh bmQgdGhlbiBkb3dubG9hZHMgb25seSB0aGUgb25lcyB3aG9zZSBuYW1lcwotICAgbWF0Y2ggdGhl IHBhdHRlcm4gIioudHh0IiAoY2xpZW50IGludGVycHJldHMgd2lsZGNhcmRzKS4KLSAgIG1nZXQg L21sc2QgL21hdGNoOioudHh0IGZvbyBNTFNEIGZvbyBJZiAiZm9vIiBpcyBhIGRpcmVjdG9yeSBv biB0aGUKLSAgIHNlcnZlciwgdGhpcyBnZXRzIGEgbGlzdCBvZiBhbGwgdGhlIGZpbGVzIGZyb20g dGhlIHNlcnZlcidzICJmb28iCi0gICBkaXJlY3RvcnkgYW5kIHRoZW4gZG93bmxvYWRzIG9ubHkg dGhlIG9uZXMgd2hvc2UgbmFtZXMgbWF0Y2ggdGhlCi0gICBwYXR0ZXJuICIqLnR4dCIgKGNsaWVu dCBpbnRlcnByZXRzIHdpbGRjYXJkcykuIFRoaXMgbGVhdmVzIHRoZSBzZXJ2ZXIKLSAgIENEJ2Qg dG8gdGhlICJmb28iIGRpcmVjdG9yeTsgdGhlcmUncyBubyB3YXkgdGhlIGNsaWVudCBjYW4gcmVz dG9yZSB0aGUKLSAgIHNlcnZlcidzIG9yaWdpbmFsIGRpcmVjdG9yeSBiZWNhdXNlIE1MU0QgZG9l c24ndCBnaXZlIHRoYXQgaW5mb3JtYXRpb24sCi0gICBhbmQgc2luY2UgdGhlIGNsaWVudCBjYW4g bm90IGJlIGV4cGVjdGVkIHRvIGtub3cgdGhlIHNlcnZlcidzCi0gICBmaWxlLXN5c3RlbSBzeW50 YXgsIGl0IHdvdWxkIG5vdCBiZSBzYWZlIHRvIGd1ZXNzLiBJZiAiZm9vIiBpcyBhCi0gICByZWd1 bGFyIGZpbGUsIE1MU0QgZmFpbHMuCi0gICBtZ2V0IC9tbHNkIGZvbyBiYXIgTUxTRCBUaGlzIG9u ZSBpcyBwcm9ibGVtYXRpYy4gWW91J3JlIHN1cHBvc2VkIHRvIGJlCi0gICBhYmxlIHRvIGdpdmUg TUdFVCBhIGxpc3QgYSBmaWxlc3BlY3M7IGluIHRoaXMgY2FzZSB3ZSBuYW1lIHR3bwotICAgZGly ZWN0b3JpZXMuIFRoZSBjbGllbnQgbXVzdCBjaGFuZ2UgdGhlIHNlcnZlcidzIGRpcmVjdG9yeSB0 byAiZm9vIiB0bwotICAgZ2V0IHRoZSBsaXN0IG9mIGZpbGVzLCBhbmQgdGhlbiB0aGUgZmlsZXMg dGhlbXNlbHZlcy4gQnV0IHRoZW4gaXQgaGFzCi0gICBubyB3YXkgdG8gcmV0dXJuIHRvIHRoZSBz ZXJ2ZXIncyBwcmV2aW91cyBkaXJlY3RvcnkgaW4gb3JkZXIgdG8gZG8gdGhlCi0gICBzYW1lIGZv ciAiYmFyIiwgYXMgZXhwbGFpbmVkIGluIHRoZSBwcmV2aW91cyBleGFtcGxlLgotICAgbWdldCAv bWxzZCAvbWF0Y2g6KiBbYWJjXSBNTFNEIFthYmNdIEluY2x1ZGluZyBhIC9NQVRDSDogc3dpdGNo IGZvcmNlcwotICAgW2FiY10gdG8gYmUgc2VudCB0byB0aGUgc2VydmVyIGV2ZW4gdGhvdWdoIHRo ZSBjbGllbnQgd291bGQgbm9ybWFsbHkKLSAgIHRoaW5rIGl0IHdhcyBhIHdpbGRjYXJkIGFuZCBo b2xkIGl0IGZvciBsb2NhbCBpbnRlcnByZXRhdGlvbi4gSW4gdGhpcwotICAgZXhhbXBsZSwgW2Fi Y10gbWlnaHQgYmUgYSBWTVMgZGlyZWN0b3J5IG5hbWUuCi0gICBtZ2V0IC9tbHNkIC9tYXRjaDoq IHQqLmggTUxTRCB0Ki5oIENvbnRyYXJ5IHRvIHRoZSBNTFNEIHNwZWNpZmljYXRpb24sCi0gICBz b21lIE1MU0QtY2FwYWJsZSBGVFAgc2VydmVycyBkbyBpbnRlcnByZXQgd2lsZGNhcmRzLiBUaGlz IGZvcm0gb2YgdGhlCi0gICBNR0VUIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gZm9yY2UgYSB3aWxk Y2FyZCB0byBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIKLSAgIGZvciBpbnRlcnByZXRhdGlvbi4KLQot ICAgV2hlbiBNTFNEIGlzIHVzZWQgaW1wbGljaXRseSAodGhhdCBpcywgd2l0aG91dCBhbiAvTUxT RCBzd2l0Y2ggZ2l2ZW4gdG8KLSAgIGZvcmNlIHRoZSB1c2Ugb2YgTUxTRCkgYW5kIGFuIE1HRVQg Y29tbWFuZCBzdWNoIGFzICJtZ2V0IGZvby8qLnR4dCIKLSAgIGZhaWxzLCBLZXJtaXQgYXV0b21h dGljYWxseSBmYWxscyBiYWNrIHRvIE5MU1QgYW5kIHRyaWVzIGFnYWluLgotCi0zLjExLjUuIFJl ZmVyZW5jZXMKLQotICAgIDEuIFBvc3RlbCwgSi4sIGFuZCBKLiBSZXlub2xkcywgRmlsZSBUcmFu c2ZlciBQcm90b2NvbCAoRlRQKSwgUkZDIDk1OSwKLSAgICAgICBPY3RvYmVyIDE5ODU6IFszNzJd ZnRwOi8vZnRwLmlzaS5lZHUvaW4tbm90ZXMvcmZjOTU5LnR4dC4KLSAgICAyLiBIZXRobW9uLCBQ LCBhbmQgUi4gRWx6LCBGZWF0dXJlIG5lZ290aWF0aW9uIG1lY2hhbmlzbSBmb3IgdGhlIEZpbGUK LSAgICAgICBUcmFuc2ZlciBQcm90b2NvbCwgUkZDIDIzODksIEF1Z3VzdCAxOTk4OgotICAgICAg IFszNzNdZnRwOi8vZnRwLmlzaS5lZHUvaW4tbm90ZXMvcmZjMjM4OS50eHQuCi0gICAgMy4gRWx6 LCBSLCBhbmQgUC4gSGV0aG1vbiwgRXh0ZW5zaW9ucyB0byBGVFAsIEludGVybmV0IERyYWZ0Ci0g ICAgICAgZHJhZnQtaWV0Zi1mdHBleHQtbWxzdC0xNi50eHQsIFNlcHRlbWJlciAyMDAyOgotICAg ICAgIFszNzRdaHR0cDovL3d3dy5pZXRmLm9yZy9pbnRlcm5ldC1kcmFmdHMvZHJhZnQtaWV0Zi1m dHBleHQtbWxzdC0xNi4KLSAgICAgICB0eHQuCi0gICAgNC4gWzM3NV1UaGUgS2VybWl0IEZUUCBD bGllbnQgKG92ZXJ2aWV3KS4KLQotICAgWyBbMzc2XVRvcCBdIFsgWzM3N11GVFAgVG9wIF0gWyBb Mzc4XUMtS2VybWl0IEhvbWUgXSBbIFszNzldS2VybWl0IEhvbWUKLSAgIF0KLQotNC4gRklMRSBT Q0FOTklORwotCi0gICBBIG5ldyBmZWF0dXJlIGNhbGxlZCBmaWxlIHNjYW5uaW5nIGlzIHVzZWQg aW4gdmFyaW91cyBjb250ZXh0cyB0bwotICAgZGV0ZXJtaW5lIGlmIGEgZmlsZSBpcyB0ZXh0IG9y IGJpbmFyeSwgYW5kIGlmIGl0IGlzIHRleHQsIHdoYXQga2luZCBvZgotICAgdGV4dC4gVGhlIG92 ZXJoZWFkIG9mIGZpbGUgc2Nhbm5pbmcgaXMgc3VycHJpc2luZ2x5IHRvbGVyYWJsZSwgdXN1YWxs eQotICAgYWJvdXQgYSBxdWFydGVyIHNlY29uZCBwZXIgZmlsZS4gRmlsZSBzY2FubmluZyBpcyBu b3cgdXNlZCBpbnN0ZWFkIG9mCi0gICBmaWxlbmFtZSBwYXR0ZXJucyB1bmxlc3MgeW91IFNFVCBG SUxFIFNDQU4gT0ZGLCB3aGljaCByZXN0b3JlcyB0aGUKLSAgIHByZXZpb3VzIGJlaGF2aW9yLgot Ci0gICBUaGUgcHJpbWFyeSBiZW5lZml0IG9mIGZpbGUgc2Nhbm5pbmcgaXMgaW4gZmlsZSB0cmFu c2Zlci4gRm9yIGFsbAotICAgcHJhY3RpY2FsIHB1cnBvc2VzLCBub3cgeW91IGNhbiBzdG9wIHdv cnJ5aW5nIGFib3V0IHdoZXRoZXIgYSBmaWxlCi0gICBzaG91bGQgYmUgc2VudCBpbiBiaW5hcnkg b3IgdGV4dCBtb2RlLCBvciBhYm91dCBzZW5kaW5nIG1peHR1cmVzIG9mCi0gICB0ZXh0IGFuZCBi aW5hcnkgZmlsZXMgaW4gYSBzaW5nbGUgb3BlcmF0aW9uLCBvciBjb25maWd1cmluZyBhbmQKLSAg IGZpbmUtdHVuaW5nIHlvdXIgbGlzdHMgb2YgYmluYXJ5LWZpbGUgYW5kIHRleHQtZmlsZSBuYW1l IHBhdHRlcm5zOiBub3cKLSAgIGl0IGFsbCBqdXN0IHdvcmtzLgotCi0gICBGaWxlIHNjYW5uaW5n IGlzIGRvbmUgYnkgdGhlIGZpbGUgc2VuZGVyLCB3aGljaCBkZXRlcm1pbmVzIHRoZSB0eXBlIG9m Ci0gICBlYWNoIGZpbGUgYmVmb3JlIGl0IHNlbmRzIGl0IGFuZCBpbmZvcm1zIHRoZSByZWNlaXZl ciAoS2VybWl0IG9yIEZUUAotICAgc2VydmVyKSBvZiB0aGUgdHlwZS4gRmlsZSBzY2FubmluZyBp cyBOT1QgZG9uZSBieSB0aGUgcmVjZWl2ZXIsIGJlY2F1c2UKLSAgIGl0IGlzIHRoZSBzZW5kZXIn cyByZXNwb25zaWJpbGl0eSB0byBkZXRlcm1pbmUgZWFjaCBmaWxlJ3MgdHlwZSwgc2VuZAotICAg dGhlIGZpbGUgaW4gdGhlIHJpZ2h0IG1vZGUsIGFuZCBpbmZvcm0gdGhlIHJlY2VpdmVyIG9mIHRo ZSBtb2RlLiBJZgotICAgYm90aCB0cmFuc2ZlciBwYXJ0bmVycyBhcmUgY2FwYWJsZSBvZiB0aGlz IChvciBhbnkgb3RoZXIpIGZvcm0gb2YKLSAgIGF1dG9tYXRpYyB0ZXh0L2JpbmFyeSBtb2RlIHN3 aXRjaGluZywgdGhlbiBmaWxlcyBjYW4gYmUgc2VudCBpbiBib3RoCi0gICBkaXJlY3Rpb25zIHdp dGggbm8gd29ycmllcyBhYm91dCBjb3JydXB0aW9uIGR1ZSB0byBpbmFwcHJvcHJpYXRlCi0gICB0 cmFuc2ZlciBtb2RlLiAoQXMgbm90ZWQgaW4gWzM4MF1TZWN0aW9uIDMsIEZUUCBzZXJ2ZXJzIGRv bid0IGRvIHRoaXMsCi0gICBzbyB0aGlzIGRpc2N1c3Npb24gZG9lcyBub3QgYXBwbHkgd2hlbiB1 c2luZyBLZXJtaXQgdG8gZG93bmxvYWQgZnJvbSBhbgotICAgRlRQIHNlcnZlci4pCi0KLSAgIFRo ZSByZXN0IG9mIHRoaXMgc2VjdGlvbiBpcyBtYWlubHkgZm9yIHRoZSBjdXJpb3VzLiBJZiB5b3Ug ZG9uJ3QgcmVhZAotICAgaXQgYW5kIHNpbXBseSBhY2NlcHQgYWxsIGRlZmF1bHRzLCBldmVyeSBm aWxlIHlvdSBzZW5kIHNob3VsZCBnbyBpbiB0aGUKLSAgIGFwcHJvcHJpYXRlIG1vZGUgYXV0b21h dGljYWxseS4gQXMgYWx3YXlzLCBob3dldmVyLCBmb3IgY2hhcmFjdGVyLXNldAotICAgdHJhbnNs YXRpb24gdG8gd29yayBmb3IgNy0gYW5kIDgtYml0IGNoYXJhY3Rlci1zZXQgZmlsZXMsIHRoZQot ICAgYXBwcm9wcmlhdGUgU0VUIEZJTEUgQ0hBUkFDVEVSLVNFVCBjb21tYW5kKHMpIG11c3QgaGF2 ZSBiZWVuIGV4ZWN1dGVkCi0gICB0byBpZGVudGlmeSB0aGVpciBlbmNvZGluZyAoS2VybWl0J3Mg ZGVmYXVsdCBmaWxlIGNoYXJhY3Rlci1zZXQgaXMKLSAgIG5ldXRyYWwgQVNDSUkgZXhjZXB0IG9u IHBsYXRmb3JtcyBsaWtlIEhQLVVYIG9yIERHL1VYLCB3aGVyZSB0aGUKLSAgIGRlZmF1bHQgZmls ZSBjaGFyYWN0ZXItc2V0IGlzIGtub3duKS4gQW5kIG9mIGNvdXJzZSwgcmVjZWl2aW5nIGlzCi0g ICBhbm90aGVyIG1hdHRlciAtLSBvYnZpb3VzbHkgdGhlIG90aGVyIEtlcm1pdCBtdXN0IGFsc28g c2VuZCBlYWNoIGZpbGUKLSAgIGluIHRoZSBhcHByb3ByaWF0ZSBtb2RlLgotCi0gICBTY2Fubmlu ZyBpcyBtb3JlIHJlbGlhYmxlIHRoYW4gZmlsZW5hbWUgcGF0dGVybnMgc2ltcGx5IGJlY2F1c2UK LSAgIGZpbGVuYW1lcyBhcmUgbm90IHJlbGlhYmxlIGluZGljYXRvcnMgb2YgdGhlIGZpbGUncyBj b250ZW50cy4gQ2xhc3NpYwotICAgZXhhbXBsZXMgaW5jbHVkZSAiLmRvYyIgZmlsZXMsIHdoaWNo IGFyZSBiaW5hcnkgaWYgTWljcm9zb2Z0IFdvcmQKLSAgIGRvY3VtZW50cyBidXQgdGV4dCBvbiBt b3N0IG90aGVyIHBsYXRmb3JtcywgYW5kICIuY29tIiBmaWxlcywgd2hpY2ggYXJlCi0gICBiaW5h cnkgb24gRE9TIGFuZCBXaW5kb3dzIGJ1dCB0ZXh0IG9uIFZNUy4gQW55d2F5LCBub2JvZHkga25v d3MgdGhlCi0gICBuYW1pbmcgY29udmVudGlvbnMgKGlmIGFueSkgb2YgYWxsIHRoZSBhcHBsaWNh dGlvbnMgKGFuZCBwZXJzb25zISkgb24KLSAgIHlvdXIgY29tcHV0ZXIuIFNjYW5uaW5nLCBvbiB0 aGUgb3RoZXIgaGFuZCwgZGV0ZXJtaW5lcyBlYWNoIGZpbGUncyB0eXBlCi0gICBieSBpbnNwZWN0 aW5nIGl0cyBjb250ZW50cyByYXRoZXIgdGhhbiBqdXN0IGxvb2tpbmcgYXQgaXRzIG5hbWUuCi0K LSAgIEFsc28sIGZpbGUgcGF0dGVybnMgLS0gZXZlbiB3aGVuIHRoZXkgd29yayBhcyBpbnRlbmRl ZCAtLSBjYXRlZ29yaXplCi0gICBlYWNoIGZpbGUgb25seSBhcyB0ZXh0IG9yIGJpbmFyeSwgd2hl cmVhcyBmaWxlIHNjYW5uaW5nIGNhbiBtYWtlIGZpbmVyCi0gICBkaXN0aW5jdGlvbnM6Ci0KLSAg IEJJTkFSWQotICAgICAgICAgIEJpbmFyeSBkYXRhLCBub3QgdG8gYmUgY29udmVydGVkIGluIGFu eSB3YXkuIEV4YW1wbGVzIGluY2x1ZGUKLSAgICAgICAgICBiaW5hcnkgbWFjaGluZSBjb2RlIChl eGVjdXRhYmxlIHByb2dyYW1zKSwgZ3JhcGhpY3MgaW1hZ2VzIChHSUYsCi0gICAgICAgICAgSlBH LCBldGMpLCBjb21wcmVzc2VkIGZpbGVzIChaLCBHWiwgZXRjKSwgYXJjaGl2ZXMgYW5kIHBhY2th Z2VzCi0gICAgICAgICAgKFpJUCwgVEFSLCBSUE0sIGV0YyksIG9iamVjdCBmaWxlcyBhbmQgbGli cmFyaWVzIChPQkosIERMTCwKLSAgICAgICAgICBldGMpLgotCi0gICA3LUJJVCBURVhUCi0gICAg ICAgICAgVGV4dCBlbmNvZGVkIGluIGEgNy1iaXQgY2hhcmFjdGVyIHNldCBzdWNoIGFzIEFTQ0lJ IG9yIG9uZSBvZgotICAgICAgICAgIHRoZSBJU08gNjQ2IG5hdGlvbmFsIHZlcnNpb25zLiBLZXJt aXQgaGFzIG5vIHdheSB0byB0ZWxsIHdoaWNoCi0gICAgICAgICAgY2hhcmFjdGVyIGlzIHVzZWQs IG9ubHkgdGhhdCBpdCdzIDctYml0IHRleHQuIFR5cGljYWwgZXhhbXBsZXMKLSAgICAgICAgICBp bmNsdWRlIHByb2dyYW0gc291cmNlIGNvZGUsIFJFQURNRSBmaWxlcywgUGVybCBvciBLZXJtaXQK LSAgICAgICAgICBzY3JpcHRzLCBwbGFpbi10ZXh0IGVtYWlsLCBIVE1MLCBUZVgsIGFuZCB2YXJp b3VzIHRleHR1YWwKLSAgICAgICAgICBlbmNvZGluZ3Mgb2YgYmluYXJ5IGZpbGVzOiBIZXgsIEJh c2U2NCwgZXRjLiBXaGVuIHNlbmRpbmcgc3VjaAotICAgICAgICAgIGZpbGVzLCB0aGUgRklMRSBE RUZBVUxUIDdCSVQtQ0hBUkFDVEVSLVNFVCBpcyB1c2VkIGFzIHRoZSBmaWxlCi0gICAgICAgICAg Y2hhcmFjdGVyLXNldCwgYW5kIHRoZW4gdGhlIGFwcHJvcHJpYXRlIHRyYW5zZmVyIGNoYXJhY3Rl ciBzZXQKLSAgICAgICAgICBpcyBjaG9zZW4gZnJvbSB0aGUgYXNzb2NpYXRpb25zIGxpc3QgKEFT U09DSUFURSwgU0hPVwotICAgICAgICAgIEFTU09DSUFUSU9OUykuCi0KLSAgIDgtQklUIFRFWFQK LSAgICAgICAgICBUZXh0IGVuY29kZWQgaW4gYW4gOC1iaXQgY2hhcmFjdGVyIHNldCBzdWNoIGFz IExhdGluLTEsIExhdGluLTIsCi0gICAgICAgICAgTGF0aW4vSGVicmV3LCBMYXRpbi9DeXJpbGxp YywgS09JOCwgSFAtUm9tYW44LCBKSVMgWCAwMjA4LCBDb2RlCi0gICAgICAgICAgUGFnZSA0Mzcs IG9yIENvZGUgUGFnZSAxMjUyLiBBZ2FpbiwgS2VybWl0IGhhcyBubyB3YXkgb2Yga25vd2luZwot ICAgICAgICAgIHdoaWNoIHBhcnRpY3VsYXIgc2V0IGlzIGluIHVzZSwgb25seSB0aGF0IGl0J3Mg OC1iaXQgdGV4dC4gV2hlbgotICAgICAgICAgIHNlbmRpbmcgc3VjaCBmaWxlcywgdGhlIEZJTEUg REVGQVVMVCA4QklULUNIQVJBQ1RFUi1TRVQgaXMgdXNlZAotICAgICAgICAgIGFzIHRoZSBmaWxl IGNoYXJhY3Rlci1zZXQsIGFuZCB0aGVuIHRoZSBhcHByb3ByaWF0ZSB0cmFuc2ZlcgotICAgICAg ICAgIGNoYXJhY3RlciBzZXQgaXMgY2hvc2VuIGZyb20gdGhlIGFzc29jaWF0aW9ucyBsaXN0Lgot Ci0gICBVQ1MyIFRFWFQKLSAgICAgICAgICBVbmljb2RlIGluIGl0cyBiYXNpYyBmb3JtLCAxNiBi aXRzICgyIG9jdGV0cykgcGVyIGNoYXJhY3Rlci4KLSAgICAgICAgICBXaGVuIHNlbmRpbmcgc3Vj aCBmaWxlcywgVUNTMiBpcyB0aGUgZmlsZSBjaGFyYWN0ZXItc2V0IGFuZCB0aGUKLSAgICAgICAg ICBieXRlIG9yZGVyIGlzIGlkZW50aWZpZWQgYXV0b21hdGljYWxseTsgdGhlIGFwcHJvcHJpYXRl IHRyYW5zZmVyCi0gICAgICAgICAgY2hhcmFjdGVyIHNldCBpcyBjaG9zZW4gZnJvbSB0aGUgYXNz b2NpYXRpb25zIGxpc3QuIE5vcm1hbGx5Ci0gICAgICAgICAgdGhpcyB3b3VsZCBiZSBVVEY4LiBV VEYtMTYgaXMgbm90IHN1cHBvcnRlZCB5ZXQ7IEtlcm1pdCdzCi0gICAgICAgICAgVW5pY29kZSB0 cmFuc2xhdGlvbnMgYXJlIHJlc3RyaWN0ZWQgdG8gUGxhbmUgMCwgdGhlIEJhc2UKLSAgICAgICAg ICBNdWx0aWxpbmd1YWwgUGxhbmUgKEJNUCkuCi0KLSAgIFVURjggVEVYVAotICAgICAgICAgIFVu aWNvZGUgaW4gaXRzIDgtYml0IHRyYW5zZm9ybWF0aW9uIGZvcm1hdC4gV2hlbiBzZW5kaW5nIHN1 Y2gKLSAgICAgICAgICBmaWxlcywgVVRGOCBpcyB0aGUgZmlsZSBjaGFyYWN0ZXItc2V0OyB0aGUg YXBwcm9wcmlhdGUgdHJhbnNmZXIKLSAgICAgICAgICBjaGFyYWN0ZXIgc2V0IGlzIGNob3NlbiBm cm9tIHRoZSBhc3NvY2lhdGlvbnMgbGlzdCwgbm9ybWFsbHkKLSAgICAgICAgICBVQ1MyIG9yIFVU RjguCi0KLSAgIEZpbGUgc2Nhbm5pbmcgaXMgYXZhaWxhYmxlIGluIFVOSVggQy1LZXJtaXQsIGlu IEstOTUsIGFuZCB0byBhIGxpbWl0ZWQKLSAgIGV4dGVudCwgaW4gVk1TIEMtS2VybWl0IChmdWxs IHNjYW5uaW5nIGlzIHByb2JsZW1hdGljIGluIFZNUyBiZWNhdXNlCi0gICBldmVuIHBsYWluLXRl eHQgZmlsZXMgbWlnaHQgY29udGFpbiBiaW5hcnkgcmVjb3JkLWZvcm1hdCBpbmZvcm1hdGlvbiku Ci0gICBUaGUgcmVsZXZhbnQgY29tbWFuZHMgYXJlOgotCi0gICBTRVQgVFJBTlNGRVIgTU9ERSB7 IEFVVE9NQVRJQywgTUFOVUFMIH0KLSAgICAgICAgICBUZWxscyB3aGV0aGVyIHRoZSBmaWxlLXRy YW5zZmVyIG1vZGUgKHRleHQgb3IgYmluYXJ5KSBzaG91bGQgYmUKLSAgICAgICAgICBzZXQgYnkg YXV0b21hdGljIG9yICJtYW51YWwiIG1lYW5zLiBBVVRPTUFUSUMgaXMgdGhlIGRlZmF1bHQsCi0g ICAgICAgICAgd2hpY2ggYWxsb3dzIGFueSBvZiB0aGUgYXV0b21hdGljIG1ldGhvZHMgdGhhdCBh cmUgZW5hYmxlZCB0byBkbwotICAgICAgICAgIHRoZWlyIGpvYnM6IEZJTEUgU0NBTiwgRklMRSBQ QVRURVJOUywgcGVlciByZWNvZ25pdGlvbiwgZXRjLgotICAgICAgICAgIE1BTlVBTCBsZXRzIHlv dSBjb250cm9sIHRoZSB0cmFuc2ZlciBtb2RlIHdpdGggdGhlIFNFVCBGSUxFIFRZUEUKLSAgICAg ICAgICBjb21tYW5kcy4gQXMgYWx3YXlzLCAvVEVYVCBhbmQgL0JJTkFSWSBzd2l0Y2hlcyBvbiB5 b3VyCi0gICAgICAgICAgZmlsZS10cmFuc2ZlciBjb21tYW5kcyBvdmVycmlkZSBhbGwgb3RoZXIg bWV0aG9kczsgaWYgeW91IGdpdmUKLSAgICAgICAgICBvbmUgb2YgdGhlc2Ugc3dpdGNoZXMsIHNj YW5uaW5nIGlzIG5vdCBkb25lLiBTSE9XIFRSQU5TRkVSCi0gICAgICAgICAgZGlzcGxheXMgdGhl IGN1cnJlbnQgVFJBTlNGRVIgTU9ERSBzZXR0aW5nLgotCi0gICBTRVQgRklMRSBTQ0FOIHsgT04g WyBudW1iZXIgXSwgT0ZGIH0KLSAgICAgICAgICBUdXJucyB0aGlzIGZlYXR1cmUgb24gYW5kIG9m Zi4gSXQncyBPTiBieSBkZWZhdWx0LiBXaGVuIE9GRiwgdGhlCi0gICAgICAgICAgcHJldmlvdXMg cnVsZXMgYXBwbHkgKFNFVCBGSUxFIFBBVFRFUk5TLCBldGMpLiBXaGVuIE9OIGlzIGdpdmVuLAot ICAgICAgICAgIHlvdSBjYW4gYWxzbyBzcGVjaWZ5IGEgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHNj YW5uZWQuIFRoZQotICAgICAgICAgIGRlZmF1bHQgaXMgNDkxNTIgKD0gNDhLKS4gSWYgYSBuZWdh dGl2ZSBudW1iZXIgaXMgZ2l2ZW4sIHRoZQotICAgICAgICAgIGVudGlyZSBmaWxlIGlzIHNjYW5u ZWQsIG5vIG1hdHRlciBob3cgYmlnLCBmb3IgbWF4aW11bSBjZXJ0YWludHkKLSAgICAgICAgICAo Zm9yIGV4YW1wbGUsIGEgUG9zdFNjcmlwdCBmaWxlIHRoYXQgYXBwZWFycyB0byBiZSBwbGFpbiB0 ZXh0Ci0gICAgICAgICAgbWlnaHQgaW5jbHVkZSBhbiBlbWJlZGRlZCBncmFwaGljIHBhc3QgdGhl IG5vcm1hbCBzY2FubmluZwotICAgICAgICAgIGxpbWl0KS4gU0hPVyBGSUxFIGRpc3BsYXlzIHRo ZSBjdXJyZW50IEZJTEUgU0NBTiBzZXR0aW5nLgotCi0gICBTRVQgRklMRSBERUZBVUxUIDdCSVQt Q0hBUkFDVEVSLVNFVCBuYW1lCi0gICAgICAgICAgVGVsbHMgdGhlIDctYml0IGNoYXJhY3Rlci1z ZXQgdG8gdXNlIGlmIHNjYW5uaW5nIGlkZW50aWZpZXMgYQotICAgICAgICAgIDctYml0IHRleHQg ZmlsZSwgZS5nLiBHRVJNQU4uIFNIT1cgRklMRSBkaXNwbGF5cyB0aGUgY3VycmVudCBTRVQKLSAg ICAgICAgICBGSUxFIERFRkFVTFQgc2V0dGluZ3MuIFNvIGRvZXMgU0hPVyBDSEFSQUNURVItU0VU Uy4KLQotICAgU0VUIEZJTEUgREVGQVVMVCA4QklULUNIQVJBQ1RFUi1TRVQgbmFtZQotICAgICAg ICAgIFRlbGxzIHRoZSA4LWJpdCBjaGFyYWN0ZXItc2V0IHRvIHVzZSBpZiBzY2FubmluZyBpZGVu dGlmaWVzIGFuCi0gICAgICAgICAgOC1iaXQgdGV4dCBmaWxlLCBlLmcuIExBVElOMS4gU0hPVyBG SUxFIGFuZCBTSE9XIENIQVJBQ1RFUi1TRVQKLSAgICAgICAgICBkaXNwbGF5IHRoaXMuCi0KLSAg IEFTU09DSUFURSBGSUxFLUNIQVJBQ1RFUi1TRVQgZmNzIHRjcwotICAgICAgICAgIFdoZW4gc2Vu ZGluZyBmaWxlcyBhbmQgYSBmaWxlIGNoYXJhY3Rlci1zZXQgKGZjcykgaXMgaWRlbnRpZmllZAot ICAgICAgICAgIGJ5IHNjYW5uaW5nLCB0aGlzIHRlbGxzIEMtS2VybWl0IHdoaWNoIHRyYW5zZmVy IGNoYXJhY3Rlci1zZXQKLSAgICAgICAgICAodGNzKSB0byB0cmFuc2xhdGUgaXQgdG8uIEl0IGFs c28gYWxsb3dzIEMtS2VybWl0IHRvIHNldCB0aGUKLSAgICAgICAgICBhcHByb3ByaWF0ZSB0cmFu c2ZlciBjaGFyYWN0ZXItc2V0IGF1dG9tYXRpY2FsbHkgd2hlbmV2ZXIgeW91Ci0gICAgICAgICAg Z2l2ZSBhIFNFVCBGSUxFIENIQVJBQ1RFUi1TRVQgY29tbWFuZC4KLQotICAgQVNTT0NJQVRFIFRS QU5TRkVSLUNIQVJBQ1RFUi1TRVQgdGNzIGZjcwotICAgICAgICAgIFdoZW4gcmVjZWl2aW5nIGZp bGVzIGFuZCBhIGZpbGUgYXJyaXZlcyB3aG9zZSB0cmFuc2ZlcgotICAgICAgICAgIGNoYXJhY3Rl ci1zZXQgKHRjcykgaXMgYW5ub3VuY2VkIGJ5IHRoZSBzZW5kZXIsIHRoaXMgY29tbWFuZAotICAg ICAgICAgIHRlbGxzIEMtS2VybWl0IHdoaWNoIGZpbGUgY2hhcmFjdGVyLXNldCAoZmNzKSB0byB0 cmFuc2xhdGUgaXQKLSAgICAgICAgICB0by4gSXQgYWxzbyBhbGxvd3MgQy1LZXJtaXQgdG8gc2V0 IHRoZSBhcHByb3ByaWF0ZSBmaWxlCi0gICAgICAgICAgY2hhcmFjdGVyLXNldCB3aGVuZXZlciB5 b3UgZ2l2ZSBhIFNFVCBUUkFOU0ZFUiBDSEFSQUNURVItU0VUCi0gICAgICAgICAgY29tbWFuZC4K LQotICAgU0VUIEZJTEUgQ0hBUkFDVEVSLVNFVCBuYW1lCi0gICAgICAgICAgV2hlbiBnaXZlbiBm b3IgYSA3LWJpdCBzZXQsIGFsc28gc2V0cyBGSUxFIERFRkFVTFQKLSAgICAgICAgICA3QklULUNI QVJBQ1RFUi1TRVQgdG8gdGhlIHNhbWUgc2V0LiBXaGVuIGdpdmVuIGZvciBhbiA4LWJpdCBzZXQs Ci0gICAgICAgICAgYWxzbyBzZXRzIEZJTEUgREVGQVVMVCA4QklULUNIQVJBQ1RFUi1TRVQgdG8g dGhlIHNhbWUgc2V0LiBJZiBhbgotICAgICAgICAgIEFTU09DSUFURSBGSUxFLUNIQVJBQ1RFUi1T RVQgY29tbWFuZCBoYXMgYmVlbiBnaXZlbiBmb3IgdGhpcwotICAgICAgICAgIHNldCwgYWxzbyBz ZXRzIHRoZSBjb3JyZXNwb25kaW5nIHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQuCi0KLSAgIERJUkVD VE9SWSAvWEZFUk1PREUgWyBmaWxlc3BlYyBdCi0gICAgICAgICAgUGVyZm9ybXMgYSBmaWxlIHNj YW4gb2YgdGhlIGdpdmVuIGZpbGVzLCBsaXN0aW5nIHRoZSByZXN1bHQgZm9yCi0gICAgICAgICAg ZWFjaCBmaWxlLiBJZiBGSUxFIFNDQU4gaXMgT0ZGIGJ1dCBQQVRURVJOUyBhcmUgT04sIHRoZSBy ZXN1bHQKLSAgICAgICAgICBzaG93biBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgRklMRSBURVhU LVBBVFRFUk5TIGFuZAotICAgICAgICAgIEJJTkFSWS1QQVRURVJOUywgYW5kIGFyZSByZXN0cmlj dGVkIHRvIChCKSBhbmQgKFQpLiBXaGVuIEZJTEUKLSAgICAgICAgICBTQ0FOIGlzIE9OLCB0aGUg cmVzdWx0cyBhcmU6Ci0KLSAgKEIpICAgICAgICAgIEJpbmFyeQotICAoVCkoN0JJVCkgICAgVGV4 dDogNy1iaXQKLSAgKFQpKDhCSVQpICAgIFRleHQ6IDgtYml0Ci0gIChUKShVVEY4KSAgICBUZXh0 OiBVbmljb2RlIFVURjgKLSAgKFQpKFVDUzJCRSkgIFRleHQ6IFVuaWNvZGUgVUNTMiBCaWcgRW5k aWFuCi0gIChUKShVQ1MyTEUpICBUZXh0OiBVbmljb2RlIFVDUzIgTGl0dGxlIEVuZGlhbgotCi0g ICAgICAgICAgU28geW91IGNhbiB1c2UgRElSIC9YRkVSIHRvIGdldCBhIHByZXZpZXcgb2YgaG93 IGVhY2ggZmlsZSBpbiBhCi0gICAgICAgICAgc2VsZWN0ZWQgZ3JvdXAgd2lsbCBiZSB0cmFuc2Zl cnJlZC4gRXZlcnl0aGluZyB0byB0aGUgcmlnaHQgb2YKLSAgICAgICAgICB0aGUgKEIpIG9yIChU KSBpcyBuZXcuIElmIEZJTEUgU0NBTiBpcyBPRkYsIHlvdSBvbmx5IGdldCB0aGUgKEIpCi0gICAg ICAgICAgb3IgKFQpIGFzIGJlZm9yZS4KLQotICAgICAgICAgIE5vdGU6IEJpZyBhbmQgTGl0dGxl IEVuZGlhbiByZWZlciB0byB0aGUgb3JkZXJpbmcgb2YgYnl0ZXMKLSAgICAgICAgICB3aXRoaW4g YSBjb21wdXRlciB3b3JkLiBCaWcgRW5kaWFuIGFyY2hpdGVjdHVyZSBpcyBzdGFuZGFyZCBhbmQK LSAgICAgICAgICBpcyB1c2VkIG9uIG1vc3Qgbm9uLVBDIGNvbXB1dGVycy4gTGl0dGxlIEVuZGlh biBhcmNoaXRlY3R1cmUgaXMKLSAgICAgICAgICB1c2VkIG9uIFBDcy4KLQotICAgVG8gaWxsdXN0 cmF0ZSBmaWxlLXRyYW5zZmVyIHdpdGggc2Nhbm5pbmcsIHN1cHBvc2UgeW91IGhhdmUgYSBkaXJl Y3RvcnkKLSAgIGNvbnRhaW5pbmcgYSBtaXh0dXJlIG9mIHRleHQgYW5kIGJpbmFyeSBmaWxlcywg YW5kIGVhY2ggdGV4dCBmaWxlIGNhbgotICAgYmUgNy1iaXQgR2VybWFuIElTTyA2NDYsIDgtYml0 IExhdGluLTEsIG9yIFVuaWNvZGUgaW4gYW55IG9mIHRoZQotICAgZm9sbG93aW5nIGZvcm1zOiBV Q1MyIExpdHRsZSBFbmRpYW4sIFVDUzIgQmlnIEVuZGlhbiwgb3IgVVRGOAotICAgKFszODFdVVRG LTE2IGlzIG5vdCBzdXBwb3J0ZWQgeWV0KS4gQXNzdW1pbmcgYWxsIHRoZSBidWlsdC1pbiBkZWZh dWx0cwotICAgYXJlIGluIGVmZmVjdCwgdGhlIGZvbGxvd2luZyB0aHJlZSBjb21tYW5kcyBkbyB0 aGUgam9iOgotCi0gIHNldCBmaWxlIGNoYXIgZ2VybWFuICAgOyBUaGlzIHNldHMgdGhlIGRlZmF1 bHQgZm9yIDctYml0IHRleHQgZmlsZXMKLSAgc2V0IGZpbGUgY2hhciBsYXRpbjEgICA7IFRoaXMg c2V0cyB0aGUgZGVmYXVsdCBmb3IgOC1iaXQgdGV4dCBmaWxlcwotICBzZW5kICoKLQotICAgRWFj aCBmaWxlIGlzIHNlbnQgaW4gdGhlIGFwcHJvcHJpYXRlIG1vZGUgKHRleHQgb3IgYmluYXJ5KSwg d2l0aCB0ZXh0Ci0gICBmaWxlcyBjb252ZXJ0ZWQgdG8gdGhlIGFwcHJvcHJpYXRlIHRyYW5zZmVy IGNoYXJhY3Rlci1zZXQgYW5kIGxhYmVsZWQKLSAgIHNvIHRoZSByZWNlaXZlciBjYW4gY29udmVy dCB0aGVtIGFjY29yZGluZyB0byBpdHMgb3duIGxvY2FsCi0gICBjb252ZW50aW9ucy4KLQotICAg QnkgdGhlIHdheSwgd2hhdCBpZiB5b3Ugd2FudCB0byBpbmhpYml0IGNoYXJhY3Rlci1zZXQgdHJh bnNsYXRpb24gYnV0Ci0gICBzdGlsbCBhbGxvdyBhdXRvbWF0aWMgdGV4dC9iaW5hcnkgbW9kZSBz d2l0Y2hpbmc/IFByZXZpb3VzbHksIHlvdSBjb3VsZAotICAgc2ltcGx5IFNFVCBUUkFOU0ZFUiBD SEFSQUNURVItU0VUIFRSQU5TUEFSRU5ULiBCdXQgbm93IHdpdGggZmlsZQotICAgc2Nhbm5pbmcs IHRoZSBmaWxlIGFuZCB0cmFuc2ZlciBjaGFyYWN0ZXItc2V0cyBhcmUgc2V0IGF1dG9tYXRpY2Fs bHkKLSAgIHBlciBmaWxlLiBBIG5ldyBjb21tYW5kIHdhcyBhZGRlZCBmb3IgdGhpcyBwdXJwb3Nl OgotCi0gICBTRVQgVFJBTlNGRVIgVFJBTlNMQVRJT04geyBPTiwgT0ZGIH0KLSAgICAgICAgICBF bmFibGVzIGFuZCBkaXNhYmxlcyBmaWxlLXRyYW5zZmVyIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRp b24uIEl0Ci0gICAgICAgICAgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgotCi0gICBXaGVuIFRSQU5T RkVSIFRSQU5TTEFUSU9OIGlzIE9GRiBidXQgRklMRSBTQ0FOIGlzIE9OLCBmaWxlcyBhcmUgc3Rp bGwKLSAgIHNjYW5uZWQgdG8gc2VlIGlmIHRoZXkgYXJlIHRleHQgb3IgYmluYXJ5LCBidXQgbm8g Y2hhcmFjdGVyLXNldAotICAgdHJhbnNsYXRpb24gaXMgZG9uZSB3aGVuIHRoZXkgdGV4dDogb25s eSB0aGUgbm9ybWFsIHJlY29yZC1mb3JtYXQKLSAgIGNvbnZlcnNpb24uCi0KLSAgIExpa2UgYWxs IFNFVCBjb21tYW5kcywgU0VUIFRSQU5TRkVSIFRSQU5TTEFUSU9OIGlzIGdsb2JhbCBhbmQKLSAg IHBlcnNpc3RlbnQuIFlvdSBjYW4gYWxzbyBmb3JjZSBhIHBhcnRpY3VsYXIgZmlsZS10cmFuc2Zl ciBjb21tYW5kCi0gICAoU0VORCwgTVNFTkQsIEdFVCwgUkVDRUlWRSwgVFJBTlNNSVQsIGV0Yykg dG8gbm90IHRyYW5zbGF0ZSB3aXRob3V0Ci0gICBhZmZlY3RpbmcgdGhlIGdsb2JhbCB0cmFuc2xh dGlvbiBzZXR0aW5ncyBieSBpbmNsdWRpbmcgdGhlIG5ldwotICAgL1RSQU5TUEFSRU5UIHN3aXRj aCwgZS5nLgotCi0gIHNlbmQgL3RyYW5zcGFyZW50IG9vZmEudHh0Ci0KLSAgIEFzIG9mIEMtS2Vy bWl0IDguMC4yMDYsIFNFVCBUUkFOU0ZFUiBDSEFSQUNURVItU0VUIFRSQU5TUEFSRU5UIGltcGxp ZXMKLSAgIFNFVCBUUkFOU0ZFUiBUUkFOU0xBVElPTiBPRkYuCi0KLSAgIEZpbGUgc2Nhbm5pbmcg aXMgYWxzbyB1c2VkIGluIHRoZSBUWVBFIGNvbW1hbmQuIFRoZSBzb3VyY2UgZmlsZSB0eXBlCi0g ICBhbmQgY2hhcmFjdGVyIHNldCBhcmUgZGV0ZXJtaW5lZCBhcyBhYm92ZSwgYW5kIHRoZW4gdGhl IGZpbGUgaXMKLSAgIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIHlvdXIgZGlzcGxheSBjaGFy YWN0ZXItc2V0LCBsaW5lIGJ5IGxpbmUuIEluCi0gICBLZXJtaXQgOTUsIHRoZSBkaXNwbGF5IGNo YXJhY3Rlci1zZXQgaXMgVW5pY29kZSwgcGVyaGFwcyBjb252ZXJ0ZWQgdG8KLSAgIHlvdXIgY3Vy cmVudCBjb25zb2xlIGNvZGUgcGFnZTsgaW4gb3RoZXIgdmVyc2lvbnMgb2YgQy1LZXJtaXQsIGl0 IGlzCi0gICB5b3VyIGN1cnJlbnQgZmlsZSBjaGFyYWN0ZXItc2V0LiBUaHVzIGlmIHlvdSBoYXZl IHRoZSBmb2xsb3dpbmcgc2V0Ci0gICBhcHByb3ByaWF0ZWx5OgotCi0gIFNFVCBGSUxFIENIQVJB Q1RFUi1TRVQgKG5lY2Vzc2FyeSBpbiBVbml4IGJ1dCBub3QgSzk1KQotICBTRVQgRklMRSBERUZB VUxUIDdCSVQgQ0hBUkFDVEVSLVNFVAotICBTRVQgRklMRSBERUZBVUxUIDhCSVQgQ0hBUkFDVEVS LVNFVAotCi0gICB0aGVuIHlvdSBzaG91bGQgYmUgYWJsZSB0byBUWVBFIGFueSB0ZXh0IGZpbGUg YW5kIHNlZSBzb21ldGhpbmcKLSAgIHJlYXNvbmFibGUuIEZvciBleGFtcGxlLCBpbiBVbml4LCBp ZiB5b3VyIERFRkFVTFQgN0JJVC1DSEFSQUNURVItU0VUIGlzCi0gICBJVEFMSUFOIGFuZCB5b3Vy IERFRkFVTFQgOEJJVC1DSEFSQUNURVItU0VUIGlzIExBVElOMSwgYW5kIHlvdXIgRklMRQotICAg Q0hBUkFDVEVSLVNFVCBpcyBMQVRJTjEsIHlvdSBjYW4gVFlQRSBhbiBJdGFsaWFuIElTTyA2NDYg ZmlsZSwgYQotICAgTGF0aW4tMSBmaWxlLCBvciBhbnkga2luZCBvZiBVbmljb2RlIGZpbGUsIGFu ZCBoYXZlIGl0IHRyYW5zbGF0ZWQKLSAgIGF1dG9tYXRpY2FsbHkgdG8gTGF0aW4tMSBmb3IgeW91 ciBkaXNwbGF5LgotCi0gICBJbiB0aGUgR1VJIHZlcnNpb24gb2YgS2VybWl0IDk1LCB5b3UgY2Fu IHNlZSBtaXh0dXJlcyBvZiBtYW55IGRpZmZlcmVudAotICAgc2NyaXB0cyBpZiB0aGUgZmlsZSBp cyBVVEY4IG9yIFVDUzI6IFJvbWFuLCBDeXJpbGxpYywgSGVicmV3LCBHcmVlaywKLSAgIEFybWVu aWFuLCBHZW9yZ2lhbiwgZXRjLCBhbGwgb24gdGhlIHNhbWUgc2NyZWVuIGF0IG9uY2UuCi0KLSAg IEZpbGUgc2Nhbm5pbmcgYWxzbyBhZGRzIGEgbmV3IGNyaXRlcmlvbiBmb3IgZmlsZSBzZWxlY3Rp b24sIGkuZS4gdG8KLSAgIHNlbGVjdCBvbmx5IHRleHQgKG9yIGJpbmFyeSkgZmlsZXMuIFNldmVy YWwgY29tbWFuZHMgbm93IGluY2x1ZGUgYSBuZXcKLSAgIHN3aXRjaCwgL1RZUEU6e0JJTkFSWSxU RVhULEFMTH0uIEJJTkFSWSBtZWFucyBzZWxlY3Qgb25seSBiaW5hcnkKLSAgIHJlZ3VsYXIgZmls ZXMgKG5vdCBkaXJlY3RvcmllcykuIFRFWFQgbWVhbnMgc2VsZWN0IG9ubHkgdGV4dCBmaWxlcy4g QUxMCi0gICBtZWFucyBkb24ndCBzY2FuOyBzZWxlY3QgYWxsIGZpbGVzLiBFeGFtcGxlczoKLQot ICAgU0VORCAvVFlQRTpCSU5BUlkgKi4qCi0gICAgICAgICAgU2VuZHMgb25seSBiaW5hcnkgZmls ZXMsIHNraXBwaW5nIG92ZXIgdGV4dCBmaWxlcy4KLQotICAgTk9URTogRmlsZSBzY2FubmluZyBp cyBOT1QgZG9uZSB3aGVuIHVzaW5nIGV4dGVybmFsIHByb3RvY29scyAoYmVjYXVzZQotICAgdGhl IGV4dGVybmFsIHByb3RvY29sIHByb2dyYW1zLCBzdWNoIGFzIHN6LCBhcmUgcHJvY2Vzc2luZyBl YWNoIGZpbGUsCi0gICBub3QgS2VybWl0KS4KLQotICAgRElSRUNUT1JZIC9UWVBFOlRFWFQKLSAg ICAgICAgICBMaXN0cyBvbmx5IHRleHQgZmlsZXMgYnV0IG5vdCBiaW5hcnkgZmlsZXMuCi0KLSAg IERFTEVURSAvVFlQRTpCSU5BUlkgZm9vLioKLSAgICAgICAgICBEZWxldGVzIGFsbCBmb28uKiBm aWxlcyB0aGF0IGFyZSByZWd1bGFyIGJpbmFyeSBmaWxlcyBidXQgZG9lcwotICAgICAgICAgIG5v dCBkZWxldGUgYW55IHRleHQgZmlsZXMuCi0KLSAgIENITU9EIC9UWVBFOkJJTkFSWSA3NzUgKgot ICAgICAgICAgIChVTklYKSBDaGFuZ2VzIHRoZSBwZXJtaXNzaW9ucyBvZiBhbGwgYmluYXJ5IGZp bGVzIHRvIDc3NS4KLQotICAgV2hlbiBGSUxFIFNDQU4gaXMgT0ZGIGFuZCBGSUxFIFBBVFRFUk5T IGFyZSBPTiwgYmVoYXZpb3IgaXMgYXMgYmVmb3JlCi0gICB3aXRoIFBBVFRFUk5TIE9OLCBidXQg d2l0aCBzb21lIGltcHJvdmVtZW50czoKLQotICAgICAqIFBhdGhuYW1lcyBhcmUgbm93IHN0cmlw cGVkIHByaW9yIHRvIHBhdHRlcm4gbWF0Y2hpbmcuCi0gICAgICogQmFja3VwIHN1ZmZpeGVzIChs aWtlIC5+M34pIGFyZSBzdHJpcHBlZCBwcmlvciB0byBwYXR0ZXJuIG1hdGNoaW5nLgotCi0gICBb IFszODJdVG9wIF0gWyBbMzgzXUNvbnRlbnRzIF0gWyBbMzg0XUMtS2VybWl0IEhvbWUgXSBbIFsz ODVdS2VybWl0Ci0gICBIb21lIF0KLQotNS4gRklMRSBBTkQgRElSRUNUT1JZIE5BTUVTIENPTlRB SU5JTkcgU1BBQ0VTCi0KLSAgIFByaW9yIHRvIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIGdyYXBo aWNhbCB1c2VyIGludGVyZmFjZSAoR1VJKSwgaXQgd2FzCi0gICBpbmNvbmNlaXZhYmxlIHRoYXQg ZmlsZSBvciBkaXJlY3RvcnkgbmFtZXMgY291bGQgY29udGFpbiBzcGFjZXMsCi0gICBiZWNhdXNl IHNwYWNlIGlzIGEgZmllbGQgZGVsaW1pdGVyIGluIGFsbCBjb21tYW5kIGxhbmd1YWdlcy4gR1VJ cywKLSAgIGhvd2V2ZXIsIHVzZSBkaWFsb2cgYm94ZXMgZm9yIGZpbGVuYW1lcywgc28gdGhlcmUg aXMgbmV2ZXIgYW55IHF1ZXN0aW9uCi0gICBvZiBkaXN0aW5ndWlzaGluZyBhIGZpbGVuYW1lIGZy b20gYWRqYWNlbnQgZmllbGRzIC0tIGJlY2F1c2UgdGhlcmUgYXJlCi0gICBubyBhZGphY2VudCBm aWVsZHMgLS0gYW5kIHRoZXJlZm9yZSBpdCBoYXMgYmVjb21lIHF1aXRlIGNvbW1vbiBvbgotICAg Y29tcHV0ZXJzIHRoYXQgaGF2ZSBHVUlzIHRvIGhhdmUgZmlsZSBhbmQgZGlyZWN0b3J5IG5hbWVz IGNvbXBvc2VkIG9mCi0gICBtdWx0aXBsZSB3b3Jkcy4gT2YgY291cnNlIHRoaXMgcG9zZXMgcHJv YmxlbXMgZm9yIGNvbW1hbmQgc2hlbGxzIGFuZAotICAgb3RoZXIgdGV4dC1vcmllbnRlZCBwcm9n cmFtcy4KLQotICAgTW9zdCBjb21tYW5kIHNoZWxscyBhZGRyZXNzIHRoZXNlIHByb2JsZW1zIGJ5 IGFsbG93aW5nIHN1Y2ggbmFtZXMgdG8gYmUKLSAgIGVuY2xvc2VkIGluIGRvdWJsZXF1b3Rlcywg ZS5nLjoKLQotICBjZCAiYzpcUHJvZ3JhbSBGaWxlcyIKLQotICAgQy1LZXJtaXQgcHJldmlvdXNs eSB1c2VkIGJyYWNlcyBmb3IgdGhpczoKLQotICBjZCB7YzpcUHJvZ3JhbSBGaWxlc30KLQotICAg d2hpY2ggd2FzIG5vdCB3aGF0IG1vc3QgcGVvcGxlIGV4cGVjdGVkLiBBbmQgZXZlbiB3aGVuIGJy YWNlcyB3ZXJlCi0gICB1c2VkLCBLZXJtaXQgaGFkIGRpZmZpY3VsdGllcyB3aXRoIGNvbXBsZXRp b24sIGZpbGUgbWVudXMsIGFuZCBzbwotICAgZm9ydGgsIHdpdGhpbiBicmFjZWQgZmllbGRzLgot Ci0gICBDLUtlcm1pdCA4LjAgYWxsb3dzIGVpdGhlciBkb3VibGVxdW90ZXMgb3IgYnJhY2VzIHRv IGJlIHVzZWQgZm9yCi0gICBncm91cGluZzoKLQotICBzZW5kICJ0aGlzIGZpbGUiCi0gIHNlbmQg e3RoaXMgZmlsZX0KLSAgcmVuYW1lICJ0aGlzIGZpbGUiICJ0aGF0IGZpbGUiCi0gIHJlbmFtZSB7 dGhpcyBmaWxlfSAidGhhdCBmaWxlIgotICByZW5hbWUgInRoaXMgZmlsZSIge3RoYXQgZmlsZX0K LSAgY2Qge1Byb2dyYW0gRmlsZXN9Ci0gIGNkICJQcm9ncmFtIEZpbGVzIgotCi0gICBOb3RlIHRo YXQgdGhlIGRvdWJsZXF1b3RlcyBvciBicmFja2V0cyBtdXN0IGVuY2xvc2UgdGhlIHdob2xlIGZp bGUgb3IKLSAgIGRpcmVjdG9yeSBzcGVjaWZpY2F0aW9uOgotCi0gICJjOlxNeSBEaXJlY3Rvcnki Ci0KLSAgIG5vdDoKLQotICBjOlwiTXkgRGlyZWN0b3J5IgotCi0gICBJbiBDLUtlcm1pdCA4LjAs IHlvdSBjYW4gYWxzbyB1c2UgY29tcGxldGlvbiBvbiB0aGVzZSBmaWxlbmFtZXMsIGluCi0gICB3 aGljaCBjYXNlIEtlcm1pdCBzdXBwbGllcyB0aGUgcXVvdGVzIChvciBicmFjZXMpIGF1dG9tYXRp Y2FsbHkuCi0gICBFeGFtcGxlIChpbiB3aGljaCB0aGUgY3VycmVudCBkaXJlY3RvcnkgY29udGFp bnMgb25seSBvbmUgZmlsZSB3aG9zZQotICAgbmFtZSBzdGFydHMgd2l0aCAidGgiIGFuZCBpdHMg ZnVsbCBuYW1lIGlzICJ0aGlzIGZpbGUiICh3aXRob3V0IHRoZQotICAgcXVvdGVzLCBidXQgd2l0 aCB0aGUgc3BhY2UpKToKLQotICBjYXQgdGg8VGFiPgotCi0gICBLZXJtaXQgcmVwYWludHMgdGhl IGZpbGVuYW1lIGZpZWxkIGxpa2UgdGhpczoKLQotICBjYXQgInRoaXMgZmlsZSIKLQotICAgVGhh dCBpcywgaXQgYmFja3NwYWNlcyBvdmVyIHRoZSBvcmlnaW5hbCAidGgiIGFuZCB0aGVuIHdyaXRl cyB0aGUKLSAgIGZpbGVuYW1lIGluIGRvdWJsZXF1b3Rlcy4KLQotICAgSWYgY29tcGxldGlvbiBp cyBvbmx5IHBhcnRpYWwsIEtlcm1pdCBzdGlsbCBzdXBwbGllcyB0aGUgcXVvdGVzLCBidXQgaW4K LSAgIHRoaXMgY2FzZSBhbHNvIGJlZXBzLiBUbyBjb250aW51ZSB0aGUgZmlsZW5hbWUsIHlvdSBt dXN0IGZpcnN0Ci0gICBiYWNrc3BhY2Ugb3ZlciB0aGUgY2xvc2luZyBxdW90ZS4gVGhlIGNsb3Np bmcgcXVvdGUgaXMgc3VwcGxpZWQgaW4gdGhpcwotICAgY2FzZSB0byBtYWtlIHN1cmUgdGhhdCB5 b3UgY2FuIHNlZSB0aGUgc3BhY2VzLCBlc3BlY2lhbGx5IGlmIHRoZXkgYXJlCi0gICB0cmFpbGlu Zy4gRm9yIGV4YW1wbGUsIGlmIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBjb250YWlucyB0d28gZmls ZXMKLSAgIHdob3NlIG5hbWVzIHN0YXJ0IHdpdGggInRoIiwgYW5kIHRoZWlyIGZpbGwgbmFtZXMg YXJlICJ0aGlzIGZpbGUiIGFuZAotICAgInRoaXMgb3RoZXIgZmlsZSI6Ci0KLSAgY2F0IHRoPFRh Yj4KLQotICAgS2VybWl0IHByaW50czoKLQotICBjYXQgInRoaXMgIjxCZWVwPgotCi0gICBJZiBp dCBkaWRuJ3QgcHJpbnQgdGhlIGNsb3NpbmcgcXVvdGUsIHlvdSB3b3VsZCBwcm9iYWJseSB3b25k ZXIgd2h5IGl0Ci0gICB3YXMgYmVlcGluZy4KLQotICAgQWxzbywgaWYgeW91IGJlZ2luIGEgZmls ZW5hbWUgZmllbGQgd2l0aCBhIGRvdWJsZXF1b3RlIG9yIG9wZW5pbmcKLSAgIGJyYWNlLCBub3cg eW91IGNhbiB1c2UgY29tcGxldGlvbiBvciBnZXQgPy1oZWxwOyB0aGlzIHdhcyBuZXZlcgotICAg cG9zc2libGUgYmVmb3JlLgotCi0gQy1LZXJtaXQ+dHlwZSAidGhpPyBJbnB1dCBmaWxlIHNwZWNp ZmljYXRpb24sIG9uZSBvZiB0aGUgZm9sbG93aW5nOgotICAgdGhpcyBmaWxlICAgICAgICB0aGlz IG90aGVyIGZpbGUKLSBDLUtlcm1pdD50eXBlICJ0aGlfCi0KLSAgIFsgWzM4Nl1Ub3AgXSBbIFsz ODddQ29udGVudHMgXSBbIFszODhdQy1LZXJtaXQgSG9tZSBdIFsgWzM4OV1LZXJtaXQKLSAgIEhv bWUgXQotCi02LiBPVEhFUiBDT01NQU5EIFBBUlNJTkcgSU1QUk9WRU1FTlRTCi0KLTYuMS4gR3Jv dXBpbmcgTWFjcm8gQXJndW1lbnRzCi0KLSAgIERvdWJsZXF1b3RlcyBub3cgY2FuIGJlIHVzZWQg aW4gbWFjcm8gaW52b2NhdGlvbnMgdG8gZ3JvdXAgYXJndW1lbnRzCi0gICBjb250YWluaW5nIHNw YWNlcywgd2hlcmUgcHJldmlvdXNseSBvbmx5IGJyYWNlcyBjb3VsZCBiZSB1c2VkOgotCi0gIGRl ZmluZSB4eCBzaG93IGFyZ3MKLSAgeHggb25lICJ0aGlzIGlzIHR3byIgdGhyZWUKLQotICAgUmVz dWx0OgotCi0gIE1hY3JvIGFyZ3VtZW50cyBhdCBsZXZlbCAwIChcdihhcmdjKSA9IDQpOgotICAg XCUwID0geHgKLSAgIFwlMSA9IG9uZQotICAgXCUyID0gdGhpcyBpcyB0d28KLSAgIFwlMyA9IHRo cmVlCi0KLSAgIEFsc28sIHlvdSBjYW4gbm93IHF1b3RlIGJyYWNlcyBhbmQgcXVvdGVzIGluIG1h Y3JvIGFyZ3MgKHRoaXMgZGlkbid0Ci0gICB3b3JrIGJlZm9yZSkuIEV4YW1wbGVzOgotCi0gIHh4 ICJ7IiAgOyBUaGUgYXJndW1lbnQgaXMgYSBzaW5nbGUgbGVmdCBicmFjZQotICB4eCB7In0gIDsg VGhlIGFyZ3VtZW50IGlzIGEgZG91YmxlcXVvdGUgY2hhcmFjdGVyCi0KLSAgIEluIGNhc2UgdGhp cyBuZXcgYmVoYXZpb3IgaW50ZXJmZXJlcyB3aXRoIHlvdXIgc2NyaXB0cywgeW91IGNhbiByZXN0 b3JlCi0gICB0aGUgcHJldmlvdXMgYmVoYXZpb3Igd2l0aDoKLQotICBTRVQgQ09NTUFORCBET1VC TEVRVU9USU5HIE9GRgotCi02LjIuIERpcmVjdG9yeSBhbmQgRmlsZSBOYW1lIENvbXBsZXRpb24K LQotICAgQy1LZXJtaXQgOC4wIGFsc28gaW5jbHVkZXMgYmV0dGVyIGNvbXBsZXRpb24gZm9yIGRp cmVjdG9yeSBuYW1lcywgZS5nLgotICAgaW4gdGhlIENEIGNvbW1hbmQuIElmIHRoZSBuYW1lIHR5 cGVkIHNvIGZhciB1bmlxdWVseSBtYXRjaGVzIGEKLSAgIGRpcmVjdG9yeSBuYW1lLCBpdCBpcyBj b21wbGV0ZWQgKGFzIGJlZm9yZSksIGJ1dCBub3cgaWYgdGhlIGRpcmVjdG9yeQotICAgY29udGFp bnMgYW55IHN1YmRpcmVjdG9yaWVzLCBjb21wbGV0aW9uIGlzIHBhcnRpYWwgKGFsbG93aW5nIHlv dSB0bwotICAgc3VwcGx5IGFkZGl0aW9uYWwgcGF0aCBzZWdtZW50cyB3aXRob3V0IGJhY2tzcGFj aW5nKTsgb3RoZXJ3aXNlIGl0IGlzCi0gICBjb21wbGV0ZS4KLQotICAgQ29tcGxldGlvbiBoYXMg YWxzbyBiZWVuIGltcHJvdmVkIGZvciBmaWxlIGFuZCBkaXJlY3RvcnkgbmFtZXMgdGhhdAotICAg Y29udGFpbiBub3Qgb25seSBzcGFjZXMgKGFzIGRlc2NyaWJlZCBhYm92ZSkgYnV0IGFsc28gIm1l dGFjaGFyYWN0ZXJzIgotICAgc3VjaCBhcyBhc3RlcmlzayAoKikgYW5kIHRpbGRlICh+KTogbm93 IHRoZSBmaWVsZCBpcyByZXBhaW50ZWQgaWYKLSAgIG5lY2Vzc2FyeS4gRm9yIGV4YW1wbGUsIGlm IHRoZSBjdXJyZW50IGRpcmVjdG9yeSBjb250YWlucyBvbmx5IG9uZSBmaWxlCi0gICB3aG9zZSBu YW1lIGNvbnRhaW5zICJibGFoIiwgdGhlbiBpbjoKLQotICB0eXBlICpibGFoPFRhYj4KLQotICAg IipibGFoIiBpcyByZXBsYWNlZCBieSB0aGUgZmlsZW5hbWUuIEluIGVhcmxpZXIgcmVsZWFzZXMs IHRoZSBwYXJ0Ci0gICB0eXBlZCBzbyBmYXIgd2FzIGxlZnQgb24gdGhlIGNvbW1hbmQgbGluZSAo YW5kIGluIHRoZSBoaXN0b3J5IGJ1ZmZlciksCi0gICBzbyBldmVuIHdoZW4gdGhlIG9yaWdpbmFs IGNvbW1hbmQgd29ya2VkLCB0aGUgcmVjYWxsZWQgdmVyc2lvbiB3b3VsZAotICAgbm90LiBTaW1p bGFybHkgZm9yIH4gKHRoZSBuZWFybHktdW5pdmVyc2FsIFVuaXggbm90YXRpb24gZm9yIHVzZXJu YW1lKToKLQotICB0eXBlIH5vbGdhL3g8VGFiPgotCi0gICBpcyByZXBhaW50ZWQgYXMgKGUuZy4p OgotCi0gIHR5cGUgL3VzZXJzL2hvbWUvb2xnYS94KEJlZXApCi0KLSAgIFNwZWFraW5nIG9mIGNv bW1hbmQgaGlzdG9yeSwgdGhlIG5ldyBTSE9XIEhJU1RPUlkgY29tbWFuZCBzaG93cyB5b3VyCi0g ICBjb21tYW5kIGhpc3RvcnkgYW5kIHJlY2FsbCBidWZmZXIuIFNBVkUgQ09NTUFORCBISVNUT1JZ IHNhdmVzIGl0IGludG8gYQotICAgZmlsZSBvZiB5b3VyIGNob2ljZS4KLQotNi4zLiBQYXNzaW5n IEFyZ3VtZW50cyB0byBDb21tYW5kIEZpbGVzCi0KLSAgIFRoZSBtZXRob2QgZm9yIHBhc3Npbmcg YXJndW1lbnRzIHRvIGNvbW1hbmQgZmlsZXMgaGFzIGJlZW4gaW1wcm92ZWQuCi0gICBQcmlvciB0 byBDLUtlcm1pdCA3LjAgdGhlcmUgd2FzIG5vIHByb3Zpc2lvbiBmb3IgZG9pbmcgdGhpcy4gSW4K LSAgIEMtS2VybWl0IDcuMCwgdGhlIFRBS0UgY29tbWFuZCB3YXMgY2hhbmdlZCB0byBhbGxvdyBh cmd1bWVudHMgdG8gYmUKLSAgIGdpdmVuIGFmdGVyIHRoZSBmaWxlbmFtZToKLQotICB0YWtlIGNv bW1hbmRmaWxlIGFyZzEgYXJnMiAuLi4KLQotICAgVGhpcyB3YXMgYWNjb21wbGlzaGVkIGJ5IHJl cGxhY2luZyB0aGUgY3VycmVudCBcJTEsIFwlMiwgZXRjLCB3aXRoIHRoZQotICAgZ2l2ZW4gYXJn dW1lbnRzLCBzaW5jZSBhIG5ldyBzZXQgb2YgbWFjcm8gYXJndW1lbnQgdmFyaWFibGVzIGlzIGNy ZWF0ZWQKLSAgIG9ubHkgd2hlbiBhIG1hY3JvIGlzIGV4ZWN1dGVkLCBub3QgYSBjb21tYW5kIGZp bGUuIEl0IGlzIG11Y2ggbW9yZQotICAgaW50dWl0aXZlLCBob3dldmVyLCBpZiBhcmd1bWVudHMg dG8gY29tbWFuZCBmaWxlcyB3b3JrZWQgbGlrZSB0aG9zZSB0bwotICAgbWFjcm9zOiB0aGUgY29t bWFuZCBmaWxlIHNlZXMgdGhlIGFyZ3VtZW50cyBhcyBpdHMgb3duIFwlMSwgXCUyLCBldGMsCi0g ICBidXQgdGhlIGNhbGxlcidzIHZhcmlhYmxlcyBhcmUgbm90IGRpc3R1cmJlZC4gQy1LZXJtaXQg OC4wIGFjY29tcGxpc2hlcwotICAgdGhpcyBieSBhdXRvbWF0aWNhbGx5IGNyZWF0aW5nIGFuIGlu dGVybWVkaWF0ZSB0ZW1wb3JhcnkgbWFjcm8gdG8gc3RhcnQKLSAgIHRoZSBjb21tYW5kIGZpbGUg KGlmIGFueSBhcmd1bWVudHMgd2VyZSBnaXZlbiksIHRodXMgY3JlYXRpbmcgYSBuZXcKLSAgIGxl dmVsIG9mIGFyZ3VtZW50cyBhcyBleHBlY3RlZC4KLQotNi40LiBNb3JlLVByb21wdGluZwotCi0g ICBUaGUgZmFtaWxpYXIgLS1tb3JlPy0tIHByb21wdCB0aGF0IGFwcGVhcnMgYXQgdGhlIGVuZCBv ZiBlYWNoIHNjcmVlbmZ1bAotICAgb2YgY29tbWFuZC1yZXNwb25zZSBvdXRwdXQgbm93IGFjY2Vw dHMgYSBuZXcgYW5zd2VyOiBHIChHbykgbWVhbmluZwotICAgInNob3cgYWxsIHRoZSByZXN0IHdp dGhvdXQgcGF1c2luZyBhbmQgYXNraW5nIG1lIGFueSBtb3JlIHF1ZXN0aW9ucyIuIFAKLSAgIChQ cm9jZWVkKSBpcyBhIHN5bm9ueW0gZm9yIEcuCi0KLTYuNS4gQ29tbWFzIGluIE1hY3JvIERlZmlu aXRpb25zCi0KLSAgIEFzIG5vdGVkIGluIHRoZSBbMzkwXUMtS2VybWl0IG1hbnVhbCwgY29tbWEg aXMgdXNlZCB0byBzZXBhcmF0ZQotICAgY29tbWFuZHMgaW4gYSBtYWNybyBkZWZpbml0aW9uLiBF dmVuIHdoZW4gdGhlIG1hY3JvIGlzIGRlZmluZWQgb24KLSAgIG11bHRpcGxlIGxpbmVzIHVzaW5n IGN1cmx5LWJyYWNlIGJsb2NrLXN0cnVjdHVyZSBub3RhdGlvbiB3aXRob3V0Ci0gICBjb21tYXMs IHRoZSBkZWZpbml0aW9uIGlzIHN0aWxsIHN0b3JlZCBpbnRlcm5hbGx5IGFzIGEgY29tbWEtc2Vw YXJhdGVkCi0gICBsaXN0IG9mIGNvbW1hbmRzLiBUaGVyZWZvcmUgc3BlY2lhbCB0cmlja3MgYXJl IG5lZWRlZCB0byBpbmNsdWRlIGEKLSAgIGNvbW1hIGluIGEgY29tbWFuZC4gVGhlIGNsYXNzaWMg ZXhhbXBsZSBpczoKLQotICBkZWZpbmUgZm9vIHsKLSAgICAgIChzb21lIGNvbW1hbmQpCi0gICAg ICBpZiBmYWlsIGVjaG8gU29ycnksIGJsYWggZmFpbGVkLi4uCi0gIH0KLQotICAgVGhpcyB3b3Vs ZCByZXN1bHQgaW4gS2VybWl0IHRyeWluZyB0byBleGVjdXRlIGEgImJsYWgiIGNvbW1hbmQuIFRo aXMKLSAgIGNvdWxkIGFsd2F5cyBiZSBoYW5kbGVkIGJ5IGVuY2xvc2luZyB0aGUgdGV4dCBpbiBi cmFjZXM6Ci0KLSAgZGVmaW5lIGZvbyB7Ci0gICAgICAoc29tZSBjb21tYW5kKQotICAgICAgaWYg ZmFpbCBlY2hvIHtTb3JyeSwgYmxhaCBmYWlsZWQuLi59Ci0gIH0KLQotICAgYnV0IGRvdWJsZXF1 b3RlcyAobW9yZSBpbnR1aXRpdmUpIHNob3VsZCBoYXZlIHdvcmtlZCB0b28uIE5vdyB0aGV5IGRv OgotCi0gIGRlZmluZSBmb28gewotICAgICAgKHNvbWUgY29tbWFuZCkKLSAgICAgIGlmIGZhaWwg ZWNobyAiU29ycnksIGJsYWggZmFpbGVkLi4uIgotICB9Ci0KLTYuNi4gQXJyb3cgS2V5cwotCi0g ICBBcyBvZiB2ZXJzaW9uIDguMC4yMDEsIEMtS2VybWl0IG9uIG1vc3QgcGxhdGZvcm1zIGxldHMg eW91IGFjY2VzcyB0aGUKLSAgIGNvbW1hbmQgaGlzdG9yeSBidWZmZXIgd2l0aCBhcnJvdyBrZXlz LCBqdXN0IGFzIHlvdSBhbHdheXMgY291bGQgd2l0aAotICAgY29udHJvbCBjaGFyYWN0ZXJzLiBU aGUgcmVzdHJpY3Rpb25zIGFyZToKLQotICAgIDEuIE9ubHkgVXAgYW5kIERvd24gYXJyb3cga2V5 cyBhcmUgYWNjZXB0ZWQuCi0gICAgMi4gT25seSA3LWJpdCBBTlNJIGFycm93LWtleSBzZXF1ZW5j ZXMgYXJlIHVuZGVyc3Rvb2QgKEVTQyBmb2xsb3dlZCBieQotICAgICAgIFsgb3IgdXBwZXJjYXNl IGxldHRlciBPLCBmb2xsb3dlZCBieSB1cHBlcmNhc2UgbGV0dGVyIEEgb3IgKHVwKSBCCi0gICAg ICAgKGRvd24pLgotCi0gICBUaGlzIGNoYW5nZSB3YXMgbWFkZSB0byBmYWNpbGl0YXRlIGNvbW1h bmQgcmVjYWxsIGluIExpbnV4LWJhc2VkIFBEQXMKLSAgIHRoYXQgZG9uJ3QgaGF2ZSBhIENvbnRy b2wga2V5LCBvciBhdCBsZWFzdCBub3Qgb25lIHRoYXQncyBlYXNpbHkgKG9yCi0gICBhbHdheXMp IGFjY2Vzc2libGUsIHN1Y2ggYXMgdGhlIFNoYXJwIFphdXJ1cyBTTDU1MDAuCi0KLSAgIFsgWzM5 MV1Ub3AgXSBbIFszOTJdQ29udGVudHMgXSBbIFszOTNdQy1LZXJtaXQgSG9tZSBdIFsgWzM5NF1L ZXJtaXQKLSAgIEhvbWUgXQotCi03LiBORVcgQ09NTUFORFMgQU5EIFNXSVRDSEVTCi0KLSAgIFNl ZSBbMzk1XVNlY3Rpb24gNCBmb3IgbW9yZSBhYm91dCBmaWxlIHNjYW5uaW5nIGFuZCB0aGUgL1RZ UEU6IHN3aXRjaC4KLQotICAgQVNLW1FdIFsgL1RJTUVPVVQ6bnVtYmVyIC9RVUlFVCAvREVGQVVM VDp0ZXh0IF0gdmFyaWFibGUgWyBwcm9tcHQgXQotICAgICAgICAgIFRoZSBuZXcgb3B0aW9uYWwg L1RJTUVPVVQ6IHN3aXRjaCBmb3IgQVNLIGFuZCBBU0tRIGNhdXNlcyB0aGUKLSAgICAgICAgICBj b21tYW5kIHRvIHRpbWUgb3V0IGFuZCBhbmQgZmFpbCBpZiBubyByZXNwb25zZSBpcyBnaXZlbiB3 aXRoaW4KLSAgICAgICAgICB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBzZWNvbmRzLCAxIG9yIGdy ZWF0ZXIgKDAgb3IgbGVzcyBtZWFucwotICAgICAgICAgIG5vIHRpbWVvdXQsIHdhaXQgZm9yZXZl cikuIFRoaXMgd29ya3MganVzdCBsaWtlIFNFVCBBU0stVElNRVIsCi0gICAgICAgICAgZXhjZXB0 IGl0cyBlZmZlY3QgaXMgbG9jYWwgdG8gdGhlIEFTSyBjb21tYW5kIHdpdGggd2hpY2ggaXQgaXMK LSAgICAgICAgICBnaXZlbiBhbmQgaXQgZG9lcyBub3QgZGlzdHVyYiB0aGUgZ2xvYmFsIGFzayB0 aW1lciBzZXR0aW5nLiBUaGUKLSAgICAgICAgICBuZXcgL1FVSUVUIHN3aXRjaCB0ZWxscyBLZXJt aXQgbm90IHRvIHByaW50IGFuIGVycm9yIG1lc3NhZ2UgaWYKLSAgICAgICAgICB0aGUgQVNLIG9y IEFTS1EgY29tbWFuZCB0aW1lcyBvdXQgd2FpdGluZyBmb3IgYSByZXNwb25zZS4KLQotICAgICAg ICAgIFZlcnNpb24gOC4wLjIxMSBhZGRzIHRoZSAvREVGQVVMVDp0ZXh0IHN3aXRjaCBmb3IgQVNL LUNsYXNzCi0gICAgICAgICAgY29tbWFuZHMgKEFTSywgQVNLUSwgYW5kIEdFVE9LKS4gVGhpcyBs ZXRzIHlvdSBzdXBwbHkgYSBkZWZhdWx0Ci0gICAgICAgICAgYW5zd2VyIGluIGNhc2UgdGhlIHVz ZXIgc3VwcGxpZXMgYW4gZW1wdHkgYW5zd2VyIG9yIHRoZQotICAgICAgICAgIC9USU1FT1VUOiBz d2l0Y2ggd2FzIGluY2x1ZGVkIGFuZCB0aGUgdGltZSBsaW1pdCBleHBpcmVkIHdpdGhvdXQKLSAg ICAgICAgICBhbiBhbnN3ZXIuIEluIGJvdGggdGhlc2UgY2FzZXMsIHRoZSBjb21tYW5kIHN1Y2Nl ZWRzLgotCi0gICBDQVQgZmlsZW5hbWUKLSAgICAgICAgICBFcXVpdmFsZW50IHRvIFRZUEUgL05P UEFHRS4KLQotICAgQ0RVUAotICAgICAgICAgIENoYW5nZXMgS2VybWl0J3MgbG9jYWwgd29ya2lu ZyBkaXJlY3RvcnkgdG8gdGhlIHBhcmVudCBvZiB0aGUKLSAgICAgICAgICBjdXJyZW50IG9uZS4g RXF1aXZhbGVudCB0byAiY2QgLi4iIGluIFVOSVggb3IgV2luZG93cywgImNkIFstXSIKLSAgICAg ICAgICBpbiBWTVMsICJjZCBeIiBpbiBBT1MvVlMsIGV0YzsgaW4gb3RoZXIgd29yZHMsIGl0J3Mg YQotICAgICAgICAgIHBsYXRmb3JtLWluZGVwZW5kZW50IHdheSBvZiBtb3Zpbmcgb25lIGxldmVs IHVwIGluIGEgZGlyZWN0b3J5Ci0gICAgICAgICAgdHJlZS4KLQotICAgQ0hNT0QgWyBzd2l0Y2hl cyBdIHBlcm1pc3Npb24gZmlsZXMKLSAgICAgICAgICBVTklYIG9ubHkuIFNldHMgZmlsZSBwZXJt aXNzaW9ucyBmb3Igb25lIG9yIG1vcmUgZmlsZXMgb3IKLSAgICAgICAgICBkaXJlY3Rvcmllcy4g VGhlIHBlcm1pc3Npb24gbXVzdCBiZSBnaXZlbiBhcyBhbiBvY3RhbCBudW1iZXIsCi0gICAgICAg ICAgZS5nLiA2NjQsIDc1NS4gU3dpdGNoZXM6IC9ESVJFQ1RPUklFUywgL0ZJTEVTLCAvTk9MSVNU LCAvUEFHRSwKLSAgICAgICAgICAvRE9URklMRVMsIC9MSVNULCAvTk9QQUdFLCAvUkVDVVJTSVZF LCAvVFlQRTp7VEVYVCxCSU5BUlksQUxMfSwKLSAgICAgICAgICAvU0lNVUxBVEUuIFRoZSAvVFlQ RTogc3dpdGNoIGFsbG93cyBzZWxlY3Rpb24gb2Ygb25seSB0ZXh0IG9yCi0gICAgICAgICAgYmlu YXJ5IGZpbGVzLiBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgYSBtaXh0dXJlIG9mIHNvdXJjZSBm aWxlcwotICAgICAgICAgIGFuZCBleGVjdXRhYmxlcywgeW91IGNhbiB1c2UgImNobW9kIC9maWxl cyAvdHlwZTp0ZXh0IDY2NCIgdG8KLSAgICAgICAgICBnaXZlIG93bmVyL2dyb3VwIHJlYWQvd3Jp dGUgYW5kIHdvcmxkIHJlYWQgcGVybWlzc2lvbiB0byB0aGUKLSAgICAgICAgICB0ZXh0IGZpbGVz LCBhbmQgImNobW9kIC9maWxlcyAvdHlwZTpiaW5hcnkgNzc1IiB0byBnaXZlIHRoZSBzYW1lCi0g ICAgICAgICAgcGx1cyBleGVjdXRlIHBlcm1pc3Npb24gdG8gdGhlIGV4ZWN1dGFibGVzLiBVc2Ug L1NJTVVMQVRFIHRvIHNlZQotICAgICAgICAgIHdoaWNoIGZpbGVzIHdvdWxkIGJlIGFmZmVjdGVk LCB3aXRob3V0IGFjdHVhbGx5IGNoYW5naW5nIHRoZWlyCi0gICAgICAgICAgcGVybWlzc2lvbnMu Ci0KLSAgIENMRUFSIEtFWUJPQVJELUJVRkZFUgotICAgICAgICAgIEZsdXNoZXMgYW55IGFzLXll dCB1bnJlYWQgY2hhcmFjdGVycyBmcm9tIHRoZSBrZXlib2FyZCBpbnB1dAotICAgICAgICAgIGJ1 ZmZlci4gVXNlZnVsIGZvciBmbHVzaGluZyB0eXBlYWhlYWQgaW4gc2NyaXB0cy4KLQotICAgQ09O VElOVUUKLSAgICAgICAgICBXaGVuIGdpdmVuIGF0IGFuIGludGVyYWN0aXZlIGNvbW1hbmQgcHJv bXB0IHRoYXQgd2FzIHJlYWNoZWQgYnkKLSAgICAgICAgICBpc3N1aW5nIGEgUFJPTVBUIGNvbW1h bmQgKGRlc2NyaWJlZCBpbiB0aGlzIHNlY3Rpb24pIGZyb20gYQotICAgICAgICAgIHNjcmlwdCwg dGhpcyBjb21tYW5kIHJldHVybnMgdG8gdGhlIHNjcmlwdCwgY29udGludWluZyBpdHMKLSAgICAg ICAgICBleGVjdXRpb24gYXQgdGhlIGNvbW1hbmQgYWZ0ZXIgdGhlIFBST01QVCBjb21tYW5kLiBJ biB0aGlzCi0gICAgICAgICAgY29udGV4dCwgQ09OVElOVUUgaXMgc2ltcGx5IGEgbW9yZS1pbnR1 aXRpdmUgc3lub255bSBmb3IgRU5ELgotCi0gICBDT1BZLCBSRU5BTUUsIGFuZCBUUkFOU0xBVEUK LSAgICAgICAgICBUaGVzZSBjb21tYW5kcyBub3cgd29yayBvbiBmaWxlIGdyb3VwcyBpZiB0aGUg dGFyZ2V0IGZpbGVuYW1lIGlzCi0gICAgICAgICAgYSBkaXJlY3RvcnksIGUuZy4gImNvcHkgb29m YS4qIC4uIiwgInJlbmFtZSAqIH5vbGdhL3RtcC8iCi0KLSAgIENPUFkgL0FQUEVORCBzb3VyY2Ug ZGVzdGluYXRpb24KLSAgICAgICAgICBUaGUgc291cmNlIGZpbGUgc3BlY2lmaWNhdGlvbiBjYW4g bm93IGluY2x1ZGUgd2lsZGNhcmRzLCBpbgotICAgICAgICAgIHdoaWNoIGNhc2UgYWxsIG9mIHRo ZSBzb3VyY2UgZmlsZXMgdGhhdCBtYXRjaCB3aWxsIGdvIGludG8gdGhlCi0gICAgICAgICAgZGVz dGluYXRpb24gZmlsZSBpbiBhbHBoYWJldGljYWwgb3JkZXIgYnkgbmFtZS4KLQotICAgREVMRVRF IC9BU0sKLSAgICAgICAgICBBc2tzIHBlcm1pc3Npb24gdG8gZGVsZXRlIGVhY2ggZmlsZSBiZWZv cmUgZGVsZXRpbmcgaXQuIEluCi0gICAgICAgICAgQy1LZXJtaXQgNy4wLCB0aGUgYW5zd2VycyB3 ZXJlICJ5ZXMiIChvciAib2siKSBhbmQgIm5vIi4KLSAgICAgICAgICBDLUtlcm1pdCA4LjAgYWRk cyAiZ28iIChtZWFuaW5nLCBkZWxldGUgYWxsIHRoZSByZXN0IHdpdGhvdXQKLSAgICAgICAgICBh c2tpbmcpIGFuZCAicXVpdCIgKGNhbmNlbCB0aGUgREVMRVRFIGNvbW1hbmQgYW5kIHJldHVybiB0 byB0aGUKLSAgICAgICAgICBwcm9tcHQpLgotCi0gICBERUxFVEUgL0RJUkVDVE9SSUVTCi0gICAg ICAgICAgRGVsZXRlcyBub3Qgb25seSBmaWxlcyBidXQgYWxzbyBkaXJlY3Rvcmllcy4KLQotICAg REVMRVRFIC9SRUNVUlNJVkUKLSAgICAgICAgICBEZWxldGVzIGFsbCBmaWxlcyB0aGF0IG1hdGNo IHRoZSBnaXZlbiBmaWxlIHNwZWNpZmljYXRpb24gaW4gdGhlCi0gICAgICAgICAgY3VycmVudCAo b3IgZ2l2ZW4pIGRpcmVjdG9yeSBhbmQgYWxsIGRpcmVjdG9yaWVzIGJlbmVhdGggaXQuCi0KLSAg IERFTEVURSAvU1VNTUFSWQotICAgICAgICAgIFByaW50cyBvbmx5IHRoZSBudW1iZXIgb2YgZmls ZXMgZGVsZXRlZCBhbmQgdG90YWwgc2l6ZSBmcmVlZCwKLSAgICAgICAgICB3aXRob3V0IGxpc3Rp bmcgZWFjaCBmaWxlLgotCi0gICBERUxFVEUgL1RSRUUKLSAgICAgICAgICBTaG9ydGhhbmQgZm9y IERFTEVURSAvUkVDVVJTSVZFIC9ESVJFQ1RPUklFUyAvRE9URklMRVMvLgotICAgICAgICAgIEVx dWl2YWxlbnQgdG8gV2luZG93cyBERUxUUkVFIG9yIFVuaXggInJtIC1SZiIuIElmIG5vIGZpbGUK LSAgICAgICAgICBzcGVjaWZpY2F0aW9uIGlzIGdpdmVuLCB0aGUgY29udGVudHMgb2YgdGhlIGN1 cnJlbnQgZGlyZWN0b3J5LAotICAgICAgICAgIHBsdXMgYWxsIG9mIGl0cyBzdWJkaXJlY3Rvcmll cyBhbmQgdGhlaXIgY29udGVudHMsIGFyZSBkZWxldGVkLgotCi0gICBERUxFVEUgL1RZUEU6QklO QVJZCi0gICAgICAgICAgRGVsZXRlIG9ubHkgcmVndWxhciBiaW5hcnkgZmlsZXMgKHJlcXVpcmVz IEZJTEUgU0NBTiBPTikuCi0KLSAgIERFTEVURSAvVFlQRTpURVhUCi0gICAgICAgICAgRGVsZXRl IG9ubHkgcmVndWxhciB0ZXh0IGZpbGVzIChyZXF1aXJlcyBGSUxFIFNDQU4gT04pLgotCi0gICBE SVJFQ1RPUlkgWyBzd2l0Y2hlcyBdIFsgZmlsZXNwZWMgWyBmaWxlc3BlYyBbIGZpbGVzcGVjIC4u LiBdIF0gXQotICAgICAgICAgIFRoZSBESVJFQ1RPUlkgY29tbWFuZCBub3cgYWNjZXB0cyBtb3Jl IHRoYW4gb25lIGZpbGUKLSAgICAgICAgICBzcGVjaWZpY2F0aW9uOyBlLmcuICJkaXJlY3Rvcnkg bW9vbi50eHQgc3VuLmRvYyBzdGFycy4qIi4KLQotICAgRElSRUNUT1JZIC9OT1JFQ1VSU0lWRSB4 eHgKLSAgICAgICAgICBJZiB4eHggaXMgYSBkaXJlY3RvcnkgbmFtZSwgZm9yY2VzIGxpc3Rpbmcg b2YgdGhlIGRpcmVjdG9yeQotICAgICAgICAgIGl0c2VsZiByYXRoZXIgdGhhbiBpdHMgY29udGVu dHMuCi0KLSAgIERJUkVDVE9SWSAvRk9MTE9XTElOS1MgeHh4Ci0gICAgICAgICAgKFVOSVggb25s eSkgVGVsbHMgdGhlIERJUkVDVE9SWSBjb21tYW5kIHRvIGZvbGxvdyBzeW1ib2xpYwotICAgICAg ICAgIGxpbmtzLiBUaGlzIG5vdCB0aGUgZGVmYXVsdCBiZWNhdXNlIGl0IGNhbiBjYXVzZSBlbmRs ZXNzIGxvb3BzLgotCi0gICBESVJFQ1RPUlkgL05PRk9MTE9XTElOS1MgeHh4Ci0gICAgICAgICAg KFVOSVggb25seSkgVGVsbHMgdGhlIERJUkVDVE9SWSBjb21tYW5kIG5vdCB0byBmb2xsb3cgc3lt Ym9saWMKLSAgICAgICAgICBsaW5rcywgYnV0IHJhdGhlciwgbWVyZWx5IHRvIGxpc3QgdGhlbS4g VGhpcyBpcyB0aGUgZGVmYXVsdC4KLQotICAgRElSRUNUT1JZIC9PVVRQVVQ6ZmlsZW5hbWUKLSAg ICAgICAgICBTZW5kcyB0aGUgcmVzdWx0cyBvZiB0aGUgRElSRUNUT1JZIGNvbW1hbmQgdG8gdGhl IGdpdmVuIGZpbGUuCi0KLSAgIERJUkVDVE9SWSAvU1VNTUFSWQotICAgICAgICAgIFByaW50cyBv bmx5IHRoZSBudW1iZXIgb2YgZGlyZWN0b3JpZXMgYW5kIGZpbGVzIGFuZCB0aGUgdG90YWwKLSAg ICAgICAgICBzaXplLCB3aXRob3V0IGxpc3RpbmcgZWFjaCBmaWxlLgotCi0gICBESVJFQ1RPUlkg L1RZUEU6e1RFWFQsQklOQVJZfQotICAgICAgICAgIFNob3dzIG9ubHkgZmlsZXMgb2YgdGhlIHNl bGVjdGVkIHR5cGUsIGJhc2VkIG9uIGZpbGUgc2Nhbi4KLQotICAgRElSRUNUT1JZIC9YRkVSTU9E RQotICAgICAgICAgIE5vdyBzaG93cyByZXN1bHRzIG9mIGZpbGUgc2NhbiAoc2VlIFszOTZdU2Vj dGlvbiA0KS4KLQotICAgRk9QRU4gWyBzd2l0Y2hlcyBdIGNoYW5uZWwgZmlsZW5hbWUKLQotICAg ICAgICAgIEFzIG9mIHZlcnNpb24gOC4wLjIxMSwgRk9QRU4gYWxsb3dzIC9kZXYvdHR5IGFzIGEg ZmlsZW5hbWUgaW4KLSAgICAgICAgICBVbml4LWJhc2VkIG9wZXJhdGluZyBzeXN0ZW1zLgotCi0g ICBGUkVBRCAvVFJJTQotICAgICAgICAgICg4LjAuMjExKSBUcmltcyBhbnkgdHJhaWxpbmcgYmxh bmtzIG9yIHRhYnMgZnJvbSB0aGUgaXRlbSAoc3VjaAotICAgICAgICAgIGFzIGEgbGluZSBvZiB0 ZXh0KSB0aGF0IGl0IGhhcyByZWFkLgotCi0gICBGUkVBRCAvVU5UQUJJRlkKLSAgICAgICAgICAo OC4wLjIxMSkgQ29udmVydHMgSG9yaXpvbnRhbCBUYWIgY2hhcmFjdGVycyB0byB0aGUgYXBwcm9w cmlhdGUKLSAgICAgICAgICBudW1iZXIgb2Ygc3BhY2VzLCBiYXNlZCBvbiBWVDEwMC1saWtlIHRh YiBzdG9wcyAoMSw5LDE3LDI1LC4uLikuCi0KLSAgIEdSRVAgWyBzd2l0Y2hlcyBdIHBhdHRlcm4g ZmlsZXMKLSAgICAgICAgICBTaW1pbGFyIHRvIFVuaXggZ3JlcCBjb21tYW5kOiBkaXNwbGF5cyBm aWxlIGxpbmVzIHRoYXQgbWF0Y2ggdGhlCi0gICAgICAgICAgZ2l2ZW4gWzM5N11wYXR0ZXJuLiBT d2l0Y2hlczoKLQotICAgICAgICAvQ09VTlRbOnZhcmlhYmxlXQotICAgICAgICAgICAgICAgIERv bid0IHNob3cgdGhlIG1hdGNoaW5nIGxpbmVzLCBqdXN0IHRlbGwgaG93IG1hbnkgbGluZXMKLSAg ICAgICAgICAgICAgICBtYXRjaC4gSWYgYSB2YXJpYWJsZSBuYW1lIGlzIHNwZWNpZmllZCwgdGhl IGNvdW50IGlzCi0gICAgICAgICAgICAgICAgc3RvcmVkIGluIHRoZSBnaXZlbiB2YXJpYWJsZS4K LQotICAgICAgICAvRE9URklMRVMKLSAgICAgICAgICAgICAgICBJbmNsdWRlIGZpbGVzIHdob3Nl IG5hbWVzIGJlZ2luIHdpdGggZG90LgotCi0gICAgICAgIC9MSU5FTlVNQkVSUwotICAgICAgICAg ICAgICAgIFNob3cgbGluZSBudW1iZXJzIG9mIG1hdGNoaW5nIGxpbmVzLgotCi0gICAgICAgIC9O QU1FT05MWQotICAgICAgICAgICAgICAgIG9ubHkgbGlzdCB0aGUgbmFtZXMgb2YgZmlsZXMgdGhh dCBjb250YWluIG1hdGNoaW5nIGxpbmVzLAotICAgICAgICAgICAgICAgIGJ1dCBub3QgdGhlIGxp bmVzIHRoZW1zZWx2ZXMuCi0KLSAgICAgICAgL05PQkFDS1VQCi0gICAgICAgICAgICAgICAgU2tp cCBiYWNrdXAgZmlsZXMuCi0KLSAgICAgICAgL05PQ0FTRQotICAgICAgICAgICAgICAgIElnbm9y ZSBhbHBoYWJldGljIGNhc2Ugd2hpbGUgcGF0dGVybiBtYXRjaGluZy4KLQotICAgICAgICAvTk9E T1RGSUxFUwotICAgICAgICAgICAgICAgIHNraXAgZmlsZXMgd2hvc2UgbmFtZXMgc3RhcnQgd2l0 aCBkb3QgKHBlcmlvZCkuCi0KLSAgICAgICAgL05PTElTVAotICAgICAgICAgICAgICAgIFN1cHBy ZXNzIG91dHB1dCBidXQgc2V0IFNVQ0NFU1Mgb3IgRkFJTFVSRSBhY2NvcmRpbmcgdG8KLSAgICAg ICAgICAgICAgICBzZWFyY2ggcmVzdWx0LgotCi0gICAgICAgIC9OT01BVENICi0gICAgICAgICAg ICAgICAgTG9vayBmb3IgbGluZXMgdGhhdCBkbyBub3QgbWF0Y2ggdGhlIHBhdHRlcm4uCi0KLSAg ICAgICAgL05PUEFHRQotICAgICAgICAgICAgICAgIERvbid0IHBhdXNlIGJldHdlZW4gc2NyZWVu cyBvZiBvdXRwdXQuCi0KLSAgICAgICAgL09VVFBVVDpmaWxlbmFtZQotICAgICAgICAgICAgICAg IFdyaXRlIHJlc3VsdHMgaW50byB0aGUgZ2l2ZW4gZmlsZS4KLQotICAgICAgICAvUEFHRQotICAg ICAgICAgICAgICAgIFBhdXNlIGJldHdlZW4gc2NyZWVucyBvZiBvdXRwdXQuCi0KLSAgICAgICAg L1JFQ1VSU0lWRQotICAgICAgICAgICAgICAgIFNlYXJjaCBmaWxlcyBpbiBzdWJkaXJlY3Rvcmll cyB0b28uCi0KLSAgICAgICAgL1RZUEU6e1RFWFQsQklOQVJZfQotICAgICAgICAgICAgICAgIFNl YXJjaCBvbmx5IGZpbGVzIG9mIHRoZSBzcGVjaWZpZWQgdHlwZS4KLQotICAgICAgICAgIFN5bm9u eW1zOiBGSU5ELCBTRUFSQ0guCi0KLSAgIEdFVE9LIC9USU1FT1VUOm4gL1FVSUVUIC9ERUZBVUxU OnRleHQKLSAgICAgICAgICBUaGUgbmV3IC9RVUlFVCBzd2l0Y2ggaW5zdHJ1Y3RzIEdFVE9LLCB3 aGVuIGdpdmVuIGEgdGltZW91dCwgbm90Ci0gICAgICAgICAgdG8gcHJpbnQgYW4gZXJyb3IgbWVz c2FnZSBpZiBpdCB0aW1lcyBvdXQuIEFzIG9mIDguMC4yMTEsIGEKLSAgICAgICAgICBkZWZhdWx0 IGFuc3dlciBjYW4gYmUgc3VwcGxpZWQgKHNlZSBBU0spLgotCi0gICBIRUFEIFsgc3dpdGNoZXMg XSBmaWxlbmFtZQotICAgICAgICAgIEVxdWl2YWxlbnQgdG8gVFlQRSAvSEVBRCBbIG90aGVyLXN3 aXRjaGVzIF0gZmlsZW5hbWUuCi0KLSAgIEhFTFAgREFURQotICAgICAgICAgIEV4cGxhaW5zIGRh dGUtdGltZSBmb3JtYXRzLCBpbmNsdWRpbmcgdGltZXpvbmUgbm90YXRpb24gYW5kCi0gICAgICAg ICAgZGVsdGEgdGltZXMuCi0KLSAgIEhFTFAgRklSRVdBTExTCi0gICAgICAgICAgRXhwbGFpbnMg dGhlIGZpcmV3YWxsIG5lZ290aWF0aW9uIGNhcGFiaWxpdGllcyBvZiB5b3VyIHZlcnNpb24KLSAg ICAgICAgICBvZiBLZXJtaXQuCi0KLSAgIEtDRCBbIHN5bWJvbGljLWRpcmVjdG9yeS1uYW1lIF0K LSAgICAgICAgICBDaGFuZ2VzIEtlcm1pdCdzIHdvcmtpbmcgZGlyZWN0b3J5IHRvIHRoZSBuYW1l ZCBzeW1ib2xpYwotICAgICAgICAgIGRpcmVjdG9yeSwgc3VjaCBhcyBzdWNoIGFzIGV4ZWRpciwg aW5pZGlyLCBzdGFydHVwLCBkb3dubG9hZCwgb3IKLSAgICAgICAgICBhbmQgaG9tZS4gVHlwZSAi a2NkID8iIGZvciBhIGxpc3Qgb2Ygc3ltYm9saWMgZGlyZWN0b3J5IG5hbWVzCi0gICAgICAgICAg a25vd24gdG8geW91ciBjb3B5IG9mIEtlcm1pdCwgb3IgZ2l2ZSB0aGUgbmV3IE9SSUVOVEFUSU9O Ci0gICAgICAgICAgY29tbWFuZCBmb3IgYSBtb3JlIGRldGFpbGVkIGV4cGxhbmF0aW9uLiBJZiB5 b3UgZ2l2ZSBhIEtDRAotICAgICAgICAgIGNvbW1hbmQgd2l0aG91dCBhIGRpcmVjdG9yeSBuYW1l LCBLZXJtaXQgcmV0dXJucyB0byBpdHMgImhvbWUiCi0gICAgICAgICAgZGlyZWN0b3J5LCB3aGlj aCBpcyBkZXRlcm1pbmVkIGluIHNvbWUgd2F5IHRoYXQgZGVwZW5kcyBvbiB0aGUKLSAgICAgICAg ICB1bmRlcmx5aW5nIG9wZXJhdGluZyBzeXN0ZW0sIGJ1dCB3aGljaCB5b3UgY2FuIHJlZGVmaW5l IHdpdGggdGhlCi0gICAgICAgICAgKG5ldykgU0VUIENEIEhPTUUgY29tbWFuZC4gWW91ciBob21l IGRpcmVjdG9yeSBpcyBzaG93biBieSBTSE9XCi0gICAgICAgICAgQ0QgYW5kIGl0J3MgYWxzbyB0 aGUgdmFsdWUgb2YgdGhlIFx2KGhvbWUpIHZhcmlhYmxlLgotCi0gICBMSUNFTlNFCi0gICAgICAg ICAgRGlzcGxheXMgdGhlIEMtS2VybWl0IGxpY2Vuc2UuCi0KLSAgIEwtY29tbWFuZHMKLSAgICAg ICAgICBXaGVuIEtlcm1pdCBoYXMgYSBjb25uZWN0aW9uIHRvIGEgS2VybWl0IG9yIEZUUCBzZXJ2 ZXIsIGZpbGUKLSAgICAgICAgICBtYW5hZ2VtZW50IGNvbW1hbmRzIHN1Y2ggYXMgQ0QsIERJUkVD VE9SWSwgYW5kIERFTEVURSBtaWdodCBiZQotICAgICAgICAgIGludGVuZGVkIGZvciB0aGUgbG9j YWwgY29tcHV0ZXIgb3IgdGhlIHJlbW90ZSBzZXJ2ZXIuIEMtS2VybWl0Ci0gICAgICAgICAgOC4w LjIwMCBhbmQgZWFybGllciBhbHdheXMgZXhlY3V0ZXMgdGhlc2UgY29tbWFuZHMgb24gdGhlIGxv Y2FsCi0gICAgICAgICAgY29tcHV0ZXIuIElmIHlvdSB3YW50IHRoZW0gZXhlY3V0ZWQgYnkgdGhl IHJlbW90ZSBzZXJ2ZXIsIHlvdQotICAgICAgICAgIGhhdmUgdG8gcHJlZml4IHRoZW0gd2l0aCBS RU1PVEUgKGUuZy4gUkVNT1RFIENEKSBvciB1c2Ugc3BlY2lhbAotICAgICAgICAgIFItY29tbWFu ZCBhbGlhc2VzIChlLmcuIFJDRCA9IFJFTU9URSBDRCwgUkRJUiA9IFJFTU9URSBESVIsCi0gICAg ICAgICAgZXRjKS4gQnV0IHRoaXMgZmVlbHMgdW5uYXR1cmFsIHRvIEZUUCB1c2Vycywgd2hvIGV4 cGVjdAotICAgICAgICAgIHVucHJlZml4ZWQgZmlsZSBtYW5hZ2VtZW50IGNvbW1hbmRzIHRvIGJl IGV4ZWN1dGVkIGJ5IHRoZSByZW1vdGUKLSAgICAgICAgICBzZXJ2ZXIsIHJhdGhlciB0aGFuIGxv Y2FsbHkuIEMtS2VybWl0IDguMC4yMDEgYWRkcyBhdXRvbWF0aWMKLSAgICAgICAgICBsb2N1cyBz d2l0Y2hpbmcgdG8gcHJlc2VudCBhbiBGVFAtbGlrZSBpbnRlcmZhY2UgZm9yIEZUUAotICAgICAg ICAgIGNvbm5lY3Rpb25zIGFuZCB0aGUgbm9ybWFsIEtlcm1pdCBpbnRlcmZhY2UgZm9yIEtlcm1p dAotICAgICAgICAgIGNvbm5lY3Rpb25zLCBhbmQgYSBTRVQgTE9DVVMgY29tbWFuZCAoZGVzY3Jp YmVkIGJlbG93KSB0bwotICAgICAgICAgIGNvbnRyb2wgd2hldGhlciBvciBob3cgdGhpcyBpcyBk b25lLiBGb3Igd2hlbiBMT0NVUyBpcyBSRU1PVEUsIGEKLSAgICAgICAgICBuZXcgc2V0IG9mIGNv bW1hbmRzIHdhcyBhZGRlZCBmb3IgbG9jYWwgbWFuYWdlbWVudDogTENEIChMb2NhbAotICAgICAg ICAgIENEKSwgTERJUiAoTG9jYWwgRElSKSwgZXRjLiBUaGVzZSBhcmUgZGVzY3JpYmVkIGJlbG93 IHVuZGVyIFNFVAotICAgICAgICAgIExPQ1VTLgotCi0gICBNT1JFIGZpbGVuYW1lCi0gICAgICAg ICAgRXF1aXZhbGVudCB0byBUWVBFIC9QQUdFLgotCi0gICBPUklFTlRBVElPTgotICAgICAgICAg IERpc3BsYXlzIHN5bWJvbGljIGRpcmVjdG9yeSBuYW1lcyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcg dmFyaWFibGUKLSAgICAgICAgICBuYW1lcyBhbmQgdmFsdWVzLiBUaGUgc3ltYm9saWMgbmFtZXMs IHN1Y2ggYXMgZXhlZGlyLCBpbmlkaXIsCi0gICAgICAgICAgc3RhcnR1cCwgZG93bmxvYWQsIGFu ZCBob21lLCBjYW4gYmUgdXNlZCBhcyBhcmd1bWVudHMgdG8gdGhlIG5ldwotICAgICAgICAgIEtD RCBjb21tYW5kLgotCi0gICBQUk9NUFQgWyB0ZXh0IF0KLSAgICAgICAgICBGb3IgdXNlIGluIGEg bWFjcm8gb3IgY29tbWFuZCBmaWxlOiBlbnRlcnMgaW50ZXJhY3RpdmUgY29tbWFuZAotICAgICAg ICAgIG1vZGUgd2l0aGluIHRoZSBjdXJyZW50IGNvbnRleHQgKFszOThdU2VjdGlvbiA4LjEpLiBJ ZiB0aGUKLSAgICAgICAgICBvcHRpb25hbCB0ZXh0IGlzIGluY2x1ZGVkLCB0aGUgcHJvbXB0IGlz IHNldCB0byBpdC4gVGhlIHRleHQgY2FuCi0gICAgICAgICAgaW5jbHVkZSB2YXJpYWJsZXMsIGZ1 bmN0aW9ucywgZXRjLCBhcyBpbiB0aGUgU0VUIFBST01QVCBjb21tYW5kLgotICAgICAgICAgIFRo ZXkgYXJlIGV2YWx1YXRlZCBlYWNoIHRpbWUgdGhlIHByb21wdCBpcyBwcmludGVkLiBVbmxpa2Ug dGhlCi0gICAgICAgICAgU0VUIFBST01QVCBjb21tYW5kLCB0aGUgdGV4dCBhcmd1bWVudCBhcHBs aWVzIG9ubHkgdG8gdGhlCi0gICAgICAgICAgY3VycmVudCBjb21tYW5kIGxldmVsLiBUaHVzIHlv dSBjYW4gaGF2ZSBkaWZmZXJlbnQgcHJvbXB0cyBhdAotICAgICAgICAgIGRpZmZlcmVudCBsZXZl bHMuCi0KLSAgIFJFTU9URSBTRVQgTUFUQ0ggeyBET1RGSUxFLCBGSUZPIH0geyBPTiwgT0ZGIH0K LSAgICAgICAgICBBbGxvd3MgdGhlIGNsaWVudCB0byB0ZWxsIHRoZSBzZXJ2ZXIgd2hldGhlciB3 aWxkY2FyZHMgc2VudCB0bwotICAgICAgICAgIHRoZSBzZXJ2ZXIgc2hvdWxkIG1hdGNoIGRvdCBm aWxlcyAoZmlsZXMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aAotICAgICAgICAgIHBlcmlvZCkgb3Ig RklGT3MgKG5hbWVkIHBpcGVzKS4gU2VlIFNFVCBNQVRDSC4KLQotICAgU0VUIEFUVFJJQlVURSBS RUNPUkQtRk9STUFUIHsgT04sIE9GRiB9Ci0gICAgICAgICAgQWxsb3dzIGNvbnRyb2wgb2YgdGhl IEtlcm1pdCdzIFJlY29yZC1Gb3JtYXQgYXR0cmlidXRlLiBTZXQgdGhpcwotICAgICAgICAgIHRv IE9GRiBpbiBjYXNlIGluY29taW5nIGZpbGUgYXJlIHJlZnVzZWQgZHVlIHRvIHVua25vd24gb3IK LSAgICAgICAgICBpbnZhbGlkIHJlY29yZCBmb3JtYXRzIGlmIHlvdSB3YW50IHRvIGFjY2VwdCB0 aGUgZmlsZSBhbnl3YXkKLSAgICAgICAgICAoYW5kLCBwZXJoYXBzLCBwb3N0cHJvY2VzcyBpdCB0 byBmaXggaXRzIHJlY29yZCBmb3JtYXQpLgotCi0gICBTRVQgQ0QgSE9NRSBbIGRpcmVjdG9yeSBd Ci0gICAgICAgICAgU3BlY2lmaWVzIHRoZSB0YXJnZXQgZGlyZWN0b3J5IGZvciB0aGUgQ0QgYW5k IEtDRCBjb21tYW5kcywgd2hlbgotICAgICAgICAgIHRoZXkgYXJlIGdpdmVuIHdpdGhvdXQgYW4g YXJndW1lbnQsIGFuZCBhbHNvIHNldHMgdGhlIHZhbHVlIG9mCi0gICAgICAgICAgdGhlIFx2KGhv bWUpIHZhcmlhYmxlLgotCi0gICBTRVQgRVhJVCBIQU5HVVAgeyBPRkYsIE9OIH0KLSAgICAgICAg ICBOb3JtYWxseSBPTiwgbWVhbmluZyB0aGF0IHdoZW4gS2VybWl0IGV4aXRzLCBpdCBhbHNvIGV4 cGxpY2l0bHkKLSAgICAgICAgICBoYW5ncyB1cCB0aGUgY3VycmVudCBTRVQgTElORSAvIFNFVCBQ T1JUIHNlcmlhbCBwb3J0IGFjY29yZGluZwotICAgICAgICAgIHRvIHRoZSBjdXJyZW50IFNFVCBN T0RFTSBUWVBFIGFuZCBTRVQgTU9ERU0gSEFOR1VQIE1FVEhPRCwgYW5kCi0gICAgICAgICAgY2xv c2VzIHRoZSBwb3J0IGRldmljZSBpZiBpdCB3YXMgb3BlbmVkIGJ5IEtlcm1pdCBpbiB0aGUgZmly c3QKLSAgICAgICAgICBwbGFjZSAoYXMgb3Bwb3NlZCB0byBpbmhlcml0ZWQpLiBTRVQgRVhJVCBI QU5HVVAgT0ZGIHRlbGxzCi0gICAgICAgICAgS2VybWl0IG5vdCB0byBkbyB0aGlzLiBUaGlzIGNh bid0IHByZXZlbnQgdGhlIG9wZXJhdGluZyBzeXN0ZW0KLSAgICAgICAgICBmcm9tIGNsb3Npbmcg dGhlIGRldmljZSB3aGVuIEtlcm1pdCBleGl0cyAoYW5kIGl0J3MgYSAibGFzdAotICAgICAgICAg IGNsb3NlIikgYnV0IGlmIHRoZSBwb3J0IG9yIG1vZGVtIGhhdmUgYmVlbiBjb25kaXRpb25lZCB0 bwotICAgICAgICAgIHNvbWVob3cgaWdub3JlIHRoZSBjbG9zZSBhbmQga2VlcCB0aGUgY29ubmVj dGlvbiBvcGVuLCBhdCBsZWFzdAotICAgICAgICAgIEtlcm1pdCBpdHNlbGYgd29uJ3QgZG8gYW55 dGhpbmcgZXhwbGljaXQgdG8gaGFuZyBpdCB1cCBvciBjbG9zZQotICAgICAgICAgIGl0LgotCi0g ICBTRVQgRklMRSBFT0YgeyBDVFJMLVosIExFTkdUSCB9Ci0gICAgICAgICAgU3BlY2lmaWVzIHRo ZSBlbmQtb2YtZmlsZSBkZXRlY3Rpb24gbWV0aG9kIHRvIGJlIHVzZWQgYnkKLSAgICAgICAgICBD LUtlcm1pdCB3aGVuIHNlbmRpbmcgYW5kIHJlY2VpdmluZyB0ZXh0IGZpbGVzLCBhbmQgaW4gdGhl IFRZUEUKLSAgICAgICAgICBhbmQgc2ltaWxhciB0ZXh0LWZpbGUgb3JpZW50ZWQgY29tbWFuZHMu IFRoZSBub3JtYWwgYW5kIGRlZmF1bHQKLSAgICAgICAgICBtZXRob2QgaXMgTEVOR1RILiBZb3Ug Y2FuIHNwZWNpZnkgQ1RSTC1aIHdoZW4gaGFuZGxpbmcgQ1AvTSBvcgotICAgICAgICAgIE1TLURP UyBmb3JtYXQgdGV4dCBmaWxlcywgaW4gd2hpY2ggYSBDdHJsLVogKEFTQ0lJIDI2KSBjaGFyYWN0 ZXIKLSAgICAgICAgICB3aXRoaW4gdGhlIGZpbGUgbWFya3MgdGhlIGVuZCBvZiB0aGUgZmlsZS4K LQotICAgU0VUIEZJTEUgTElTVFNJWkUgbnVtYmVyCi0gICAgICAgICAgQWxsb2NhdGVzIHNwYWNl IGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGZpbGVuYW1lcyB0byBiZSBmaWxsZWQKLSAgICAgICAg ICBpbiBieSB0aGUgd2lsZGNhcmQgZXhwYW5kZXIuIFRoZSBjdXJyZW50IG51bWJlciBpcyBzaG93 biBieSBTSE9XCi0gICAgICAgICAgRklMRS4gSWYgeW91IGdpdmUgYSBjb21tYW5kIHRoYXQgaW5j bHVkZXMgYSBmaWxlbmFtZSBjb250YWluaW5nCi0gICAgICAgICAgYSB3aWxkY2FyZCAoc3VjaCBh cyAiKiIpIHRoYXQgbWF0Y2hlcyBtb3JlIGZpbGVzIHRoYXQgS2VybWl0J3MKLSAgICAgICAgICBs aXN0IGhhcyByb29tIGZvciwgeW91IGNhbiBhZGp1c3QgdGhlIGxpc3Qgc2l6ZSB3aXRoIHRoaXMK LSAgICAgICAgICBjb21tYW5kLgotCi0gICBTRVQgRklMRSBTVFJJTkdTUEFDRSBudW1iZXIKLSAg ICAgICAgICBBbGxvY2F0ZXMgc3BhY2UgZm9yIHRoZSBnaXZlbiBhbW91bnQgb2YgZmlsZW5hbWUg c3RyaW5ncyBmb3IgdXNlCi0gICAgICAgICAgYnkgdGhlIHdpbGRjYXJkIGV4cGFuZGVyLiBUaGUg Y3VycmVudCBudW1iZXIgaXMgc2hvd24gYnkgU0hPVwotICAgICAgICAgIEZJTEUuIFRoZSBudW1i ZXIgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyBvZiBhbGwgdGhlIGZpbGUKLSAgICAgICAg ICBzcGVjaWZpY2F0aW9ucyB0aGF0IG1hdGNoIHRoZSBnaXZlbiB3aWxkY2FyZC4KLQotICAgICBJ ZiB5b3UgbmVlZCB0byBwcm9jZXNzIGEgYmlnZ2VyIGxpc3Qgb2YgZmlsZXMgdGhhbiB5b3VyIGNv bXB1dGVyIGhhcwotICAgICBtZW1vcnkgZm9yLCB5b3UgbWlnaHQgYmUgYWJsZSB1c2UgYW4gZXh0 ZXJuYWwgZmlsZSBsaXN0LiBUaGUgS2VybWl0Ci0gICAgIFNFTkQgYW5kIHRoZSBGVFAgUFVUIGFu ZCBHRVQgY29tbWFuZHMgYWNjZXB0IGEgL0xJU1RGSUxFOiBzd2l0Y2gsCi0gICAgIHdoaWNoIGdp dmVzIHRoZSBuYW1lIG9mIGEgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZpbGVzIHRv IGJlCi0gICAgIHRyYW5zZmVycmVkLiBFeGFtcGxlIGZvciBVTklYOgotCi0gICFmaW5kIC4gLXBy aW50IHwgZ3JlcCAvID4gL3RtcC9uYW1lcwotICBmdHAgcHV0IC91cGRhdGUgL3JlY3Vyc2l2ZSAv bGlzdGZpbGU6L3RtcC9uYW1lcwotCi0gICBTRVQgTE9DVVMgeyBBVVRPLCBMT0NBTCwgUkVNT1RF IH0KLSAgICAgICAgICBBZGRlZCBpbiBDLUtlcm1pdCA4LjAuMjAxLiAgIFNldHMgdGhlIGxvY3Vz IGZvciB1bnByZWZpeGVkIGZpbGUKLSAgICAgICAgICBtYW5hZ2VtZW50IGNvbW1hbmRzIHN1Y2gg YXMgQ0QsIERJUkVDVE9SWSwgTUtESVIsIGV0Yy4gV2hlbgotICAgICAgICAgIExPQ1VTIGlzIExP Q0FMIHRoZXNlIGNvbW1hbmRzIGFjdCBsb2NhbGx5IGFuZCBhIFJFTU9URSAob3IgUikKLSAgICAg ICAgICBwcmVmaXggKGUuZy4gUkVNT1RFIENELCBSQ0QsIFJESVIpIGlzIHJlcXVpcmVkIHRvIHNl bmQgZmlsZQotICAgICAgICAgIG1hbmFnZW1lbnQgY29tbWFuZHMgdG8gYSByZW1vdGUgc2VydmVy LiBXaGVuIExPQ1VTIGlzIFJFTU9URSwgYW4KLSAgICAgICAgICBMIHByZWZpeCBpcyByZXF1aXJl ZCB0byBpc3N1ZSBsb2NhbCBmaWxlIG1hbmFnZW1lbnQgY29tbWFuZHMKLSAgICAgICAgICAoZS5n LiBMQ0QsIExESVIpLiBUaGUgd29yZCBMT0NBTCBjYW4ndCBiZSB1c2VkIGFzIGEgcHJlZml4IHNp bmNlCi0gICAgICAgICAgaXQgaXMgYWxyZWFkeSB1c2VkIGZvciBkZWNsYXJpbmcgbG9jYWwgdmFy aWFibGVzLiBMT0NVUyBhcHBsaWVzCi0gICAgICAgICAgdG8gYWxsIHR5cGVzIG9mIGNvbm5lY3Rp b25zLCBhbmQgdGh1cyBpcyBvcnRob2dvbmFsIHRvIFNFVAotICAgICAgICAgIEdFVC1QVVQtUkVN T1RFLCB3aGljaCBzZWxlY3RzIGJldHdlZW4gS2VybWl0IGFuZCBGVFAgZm9yIHJlbW90ZQotICAg ICAgICAgIGZpbGUtdHJhbnNmZXIgYW5kIG1hbmFnZW1lbnQgY29tbWFuZHMuIFRoZSBkZWZhdWx0 IExPQ1VTIGlzCi0gICAgICAgICAgQVVUTywgd2hpY2ggbWVhbnMgd2Ugc3dpdGNoIHRvIFJFTU9U RSB3aGVuZXZlciBhbiBGVFAgY29ubmVjdGlvbgotICAgICAgICAgIGlzIG1hZGUsIGFuZCB0byBM T0NBTCB3aGVuZXZlciBhIG5vbi1GVFAgY29ubmVjdGlvbiBpcyBtYWRlLCBhbmQKLSAgICAgICAg ICBzd2l0Y2ggYmFjayBhY2NvcmRpbmdseSB3aGVuZXZlciBhIGNvbm5lY3Rpb24gaXMgY2xvc2Vk LiBTbyBieQotICAgICAgICAgIGRlZmF1bHQsIEtlcm1pdCBiZWhhdmVzIGluIGl0cyB0cmFkaXRp b25hbCBtYW5uZXIgdW5sZXNzIHlvdQotICAgICAgICAgIG1ha2UgYW4gRlRQIGNvbm5lY3Rpb24s IGluIHdoaWNoIGNhc2UgaXQgYWN0cyBsaWtlIGEgcmVndWxhciBGVFAKLSAgICAgICAgICBjbGll bnQgKGJ1dCBiZXR0ZXIgOi0pICAgTE9DVVMgYXBwbGllcyB0byB0aGUgZm9sbG93aW5nCi0gICAg ICAgICAgY29tbWFuZHM6Ci0KLSAgVW5wcmVmaXhlZCAgICBSZW1vdGUgICAgICAgTG9jYWwgICAg ICAgIERlc2NyaXB0aW9uCi0gICBDRCAoQ1dEKSAgICAgIFJDRCAgICAgICAgICBMQ0QgICAgICAg ICAgQ2hhbmdlIChXb3JraW5nKSBEaXJlY3RvcnkKLSAgIENEVVAgICAgICAgICAgUkNEVVAgICAg ICAgIExDRFVQICAgICAgICBDRCBVcAotICAgUFdEICAgICAgICAgICBSUFdEICAgICAgICAgTFBX RCAgICAgICAgIFByaW50IFdvcmtpbmcgRGlyZWN0b3J5Ci0gICBESVJFQ1RPUlkgICAgIFJESVIg ICAgICAgICBMRElSICAgICAgICAgUmVxdWVzdCBhIGRpcmVjdG9yeSBsaXN0aW5nCi0gICBERUxF VEUgICAgICAgIFJERUwgICAgICAgICBMREVMICAgICAgICAgRGVsZXRlIChhKSBmaWxlKHMpCi0g ICBSRU5BTUUgICAgICAgIFJSRU4gICAgICAgICBMUkVOICAgICAgICAgUmVuYW1lIGEgZmlsZQot ICAgTUtESVIgICAgICAgICBSTUtESVIgICAgICAgTE1LRElSICAgICAgIENyZWF0ZSBhIGRpcmVj dG9yeQotICAgUk1ESVIgICAgICAgICBSUk1ESVIgICAgICAgTFJNRElSICAgICAgIFJlbW92ZSBh IGRpcmVjdG9yeQotCi0gICBTRVQgTUFUQ0ggeyBET1RGSUxFLCBGSUZPIH0geyBPTiwgT0ZGIH0K LSAgICAgICAgICBXaGV0aGVyIEMtS2VybWl0IGZpbGVuYW1lIHBhdHRlcm5zICh3aWxkY2FyZHMp IHNob3VsZCBtYXRjaAotICAgICAgICAgIGZpbGVuYW1lcyB0aGF0IHN0YXJ0IHdpdGggZG90IChw ZXJpb2QpLCBvciAoVW5peCBvbmx5KSBGSUZPcwotICAgICAgICAgIChuYW1lZCBwaXBlcykuIFRo ZSBkZWZhdWx0cyBhcmUgdG8gc2tpcCBkb3RmaWxlcyBpbiBVbml4IGJ1dAotICAgICAgICAgIG1h dGNoIHRoZW0gZWxzZXdoZXJlLCBhbmQgdG8gc2tpcCBGSUZPcy4gQXBwbGllcyB0byBib3RoCi0g ICAgICAgICAgaW50ZXJhY3RpdmUgdXNlIGFuZCB0byBzZXJ2ZXIgbW9kZSwgd2hlbiB0aGUgc2Vy dmVyIHJlY2VpdmVzCi0gICAgICAgICAgd2lsZGNhcmRzLCBlLmcuIGluIGEgR0VUIGNvbW1hbmQu IEFsc28gc2VlIFJFTU9URSBTRVQgTUFUQ0guCi0KLSAgIFNFVCBPUFRJT05TIERJUkVDVE9SWSAv RE9URklMRVMKLSAgICAgICAgICBOb3cgd29ya3MgZm9yIHNlcnZlciBsaXN0aW5ncyB0b28gKFVO SVggb25seSkuIEdpdmUgdGhpcyBjb21tYW5kCi0gICAgICAgICAgcHJpb3IgdG8gaGF2aW5nIEtl cm1pdCBlbnRlciBzZXJ2ZXIgbW9kZSwgYW5kIHRoZW4gaXQgd2lsbCBzaG93Ci0gICAgICAgICAg ZmlsZXMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCBkb3QgKHBlcmlvZCkgd2hlbiBzZW50IGEgUkVN T1RFCi0gICAgICAgICAgRElSRUNUT1JZIGNvbW1hbmQuCi0KLSAgIFNFVCBRVUlFVCBPTgotICAg ICAgICAgIChhcyB3ZWxsIGFzIHRoZSAtcSBjb21tYW5kLWxpbmUgb3B0aW9uKSBOb3cgYXBwbGll cyBhbHNvIHRvOgotCi0gICAgICAgICAgKyBTRVQgSE9TVCBjb25uZWN0aW9uIHByb2dyZXNzIG1l c3NhZ2VzLgotICAgICAgICAgICsgIlByZXNzIHRoZSBYIG9yIEUga2V5IHRvIGNhbmNlbCIgZmls ZS10cmFuc2ZlciBtZXNzYWdlLgotICAgICAgICAgICsgUkVNT1RFIENEIHJlc3BvbnNlLgotICAg ICAgICAgICsgUkVNT1RFIExPR0lOIHJlc3BvbnNlLgotCi0gICBTRVQgUkVDRUlWRSBQRVJNSVNT SU9OUyB7IE9OLCBPRkYgfQotICAgICAgICAgIFRlbGxzIEMtS2VybWl0IHdoZXRoZXIgdG8gc2V0 IHRoZSBwZXJtaXNzaW9ucyBvZiBpbmNvbWluZyBmaWxlcwotICAgICAgICAgIChyZWNlaXZlZCB3 aXRoIEtlcm1pdCBwcm90b2NvbCkgZnJvbSB0aGUgcGVybWlzc2lvbnMgc3VwcGxpZWQgaW4KLSAg ICAgICAgICB0aGUgZmlsZSdzIEF0dHJpYnV0ZSBwYWNrZXQgKGlmIGFueSkuIE5vcm1hbGx5IE9O LiBBbHNvIHNlZSBTRVQKLSAgICAgICAgICBTRU5EIFBFUk1JU1NJT05TLgotCi0gICBTRVQgUk9P VCBkaXJlY3RvcnkKLSAgICAgICAgICBMaWtlIFVOSVggY2hyb290LCB3aXRob3V0IHJlcXVpcmlu ZyBwcml2aWxlZ2UuIFNldHMgdGhlIHJvb3QgZm9yCi0gICAgICAgICAgZmlsZSBhY2Nlc3MsIGRv ZXMgbm90IGFsbG93IHJlZmVyZW5jZSB0byBvciBjcmVhdGlvbiBvZiBmaWxlcwotICAgICAgICAg IG91dHNpZGUgdGhlIHJvb3QsIGFuZCBjYW4ndCBiZSB1bmRvbmUuCi0KLSAgIFNFVCBTRU5EIFBF Uk1JU1NJT05TIHsgT04sIE9GRiB9Ci0gICAgICAgICAgVGVsbHMgQy1LZXJtaXQgd2hldGhlciB0 byBpbmNsdWRlIGZpbGUgcGVybWlzc2lvbnMgaW4gdGhlCi0gICAgICAgICAgYXR0cmlidXRlcyBp dCBpbmNsdWRlcyB3aXRoIGVhY2ggZmlsZSB3aGVuIHNlbmRpbmcgd2l0aCBLZXJtaXQKLSAgICAg ICAgICBwcm90b2NvbC4gQWxzbyBzZWUgU0VUIFJFQ0VJVkUgUEVSTUlTU0lPTlMuCi0KLSAgIFNF VCBUQ1AgeyBIVFRQLVBST1hZLCBTT0NLUy1TRVJWRVIgfSAvVVNFUjpuYW1lIC9QQVNTV09SRDp0 ZXh0Ci0gICAgICAgICAgVGhlc2UgY29tbWFuZHMgbm93IGFsbG93IHNwZWNpZmljYXRpb24gb2Yg dXNlcm5hbWUgYW5kIHBhc3N3b3JkLgotCi0gICBTRVQgVEVSTUlOQUwgLiAuIC4KLSAgICAgICAg ICAoU2VlIFszOTldU2VjdGlvbiAxMi4pCi0KLSAgIFNFVCBUUkFOU0ZFUiBNRVNTQUdFIFsgdGV4 dCBdCi0gICAgICAgICAgU2V0cyBhbiBpbml0aWFsIHRleHQgbWVzc2FnZSB0byBiZSBkaXNwbGF5 ZWQgaW4gdGhlCi0gICAgICAgICAgZmlsZS10cmFuc2ZlciBkaXNwbGF5LiBUaGUgdHJhbnNmZXIg bWVzc2FnZSBpcyBhdXRvbWF0aWNhbGx5Ci0gICAgICAgICAgZGVsZXRlZCBvbmNlIHVzZWQsIHNv IG11c3QgYmUgc2V0IGVhY2ggdGltZSBhIG1lc3NhZ2UgYSBkZXNpcmVkLgotICAgICAgICAgIEFu eSB2YXJpYWJsZXMgaW4gdGhlIG1lc3NhZ2UgYXJlIGV2YWx1YXRlZCBhdCB0aGUgdGltZSB0aGUg U0VUCi0gICAgICAgICAgY29tbWFuZCBpcyBnaXZlbi4gSWYgdGhlIG9wdGlvbmFsIHRleHQgaXMg b21pdHRlZCwgYW55IHRyYW5zZmVyCi0gICAgICAgICAgbWVzc2FnZSB0aGF0IGlzIGN1cnJlbnRs eSBzZXQgaXMgcmVtb3ZlZC4gU3lub255bTogU0VUIFhGRVIgTVNHLgotICAgICAgICAgIFNIT1cg VFJBTlNGRVIgZGlzcGxheXMgaXQgaWYgaXQgaGFzIGJlZW4gc2V0IGJ1dCBub3QgeWV0IHVzZWQu Ci0KLSAgIFNIT1cgQ09NTVVOSUNBVElPTlMKLSAgICAgICAgICBJbiBDLUtlcm1pdCA4LjAsIFNI T1cgQ09NTVVOSUNBVElPTlMsIHdoZW4gZ2l2ZW4gaW4gcmVtb3RlIG1vZGUKLSAgICAgICAgICAo aS5lLiBiZWZvcmUgYW55IGNvbm5lY3Rpb24gaGFzIGJlZW4gZXN0YWJsaXNoZWQpLCB0ZWxscyB0 aGUKLSAgICAgICAgICB0eXBpY2FsIGRpYWxvdXQgZGV2aWNlIG5hbWUgZm9yIHRoZSBwYXJ0aWN1 bGFyIHBsYXRmb3JtIG9uIHdoaWNoCi0gICAgICAgICAgaXQncyBydW5uaW5nIChlLmcuIFRYQTA6 IGZvciBWTVMsIG9yIC9kZXYvY3VhMHAwIGZvciBIUC1VWCkuIE9uCi0gICAgICAgICAgVW5peCBw bGF0Zm9ybXMsIGl0IGFsc28gdGVsbHMgdGhlIG5hbWUgb2YgdGhlIGxvY2tmaWxlCi0gICAgICAg ICAgZGlyZWN0b3J5LiBUaGlzIHdheSwgeW91IGhhdmUgYW4gaWRlYSBvZiB3aGF0IHRoZSBTRVQg TElORQotICAgICAgICAgIGRldmljZSBuYW1lIHNob3VsZCBsb29rIGxpa2UsIGFuZCBpZiB0aGUg U0VUIExJTkUgY29tbWFuZCBmYWlscywKLSAgICAgICAgICB5b3Uga25vdyB0aGUgbmFtZSBvZiB0 aGUgZGlyZWN0b3J5IG9yIGRldmljZSB0aGF0IGlzIHByb3RlY3RlZAotICAgICAgICAgIGFnYWlu c3QgeW91LgotCi0gICBTSE9XIFZBUklBQkxFUyBbIG5hbWUgWyBuYW1lIFsgLi4uIF0gXSBdCi0g ICAgICAgICAgSW4gQy1LZXJtaXQgOC4wLjIwMSB5b3UgY2FuIHJlcXVlc3QgdmFsdWVzIG9mIGEg bGlzdCBvZiBidWlsdC1pbgotICAgICAgICAgIChcdih4eHgpKSB2YXJpYWJsZXMuIEVhY2ggbmFt ZSBpcyBhIHBhdHRlcm4sIGFzIGJlZm9yZSwgYnV0IG5vdwotICAgICAgICAgIGl0IGEgZnJlZSBw YXR0ZXJuIHJhdGhlciB0aGFuIGFuIGFuY2hvcmVkIG9uZSAoZXhwbGFpbmVkIGluCi0gICAgICAg ICAgWzQwMF1TZWN0aW9uIDguMTIpIHNvIG5vdyAic2hvdyB2YXIgZGF0ZSB0aW1lIiBzaG93cyB0 aGUgdmFsdWVzCi0gICAgICAgICAgb2YgYWxsIHZhcmlhYmxlcyB3aG9zZSBuYW1lcyBpbmNsdWRl IHRoZSBzdHJpbmdzICJkYXRlIiBvcgotICAgICAgICAgICJ0aW1lIi4KLQotICAgVEFJTCBbIHN3 aXRjaGVzIF0gZmlsZW5hbWUKLSAgICAgICAgICBFcXVpdmFsZW50IHRvIFRZUEUgL1RBSUwgWyBv dGhlci1zd2l0Y2hlcyBdIGZpbGVuYW1lLgotCi0gICBUUkFOU01JVCAvTk9FQ0hPIFsgb3RoZXIg c3dpdGNoZXMgXSBmaWxlbmFtZQotICAgICAgICAgIFRoZSAvTk9FQ0hPIHN3aXRjaCBpcyBlcXVp dmFsZW50IHRvIGdpdmluZyB0aGUgY29tbWFuZCBTRVQKLSAgICAgICAgICBUUkFOU01JVCBFQ0hP IE9GRiBwcmlvciB0byB0aGUgVFJBTlNNSVQgY29tbWFuZCwgZXhjZXB0IHRoZQotICAgICAgICAg IHN3aXRjaCBhZmZlY3RzIG9ubHkgdGhlIGNvbW1hbmQgd2l0aCB3aGljaCBpdCB3YXMgZ2l2ZW4g YW5kIGRvZXMKLSAgICAgICAgICBub3QgYWZmZWN0IHRoZSBwcmV2YWlsaW5nIGdsb2JhbCBzZXR0 aW5nLgotCi0gICBUUkFOU01JVCAvTk9XQUlUIFsgb3RoZXIgc3dpdGNoZXMgXSBmaWxlbmFtZQot ICAgICAgICAgIFRoZSAvTk9XQUlUIHN3aXRjaCBpcyBlcXVpdmFsZW50IHRvIGdpdmluZyB0aGUg Y29tbWFuZCBTRVQKLSAgICAgICAgICBUUkFOU01JVCBQUk9NUFQgMCBwcmlvciB0byB0aGUgVFJB TlNNSVQgY29tbWFuZCwgZXhjZXB0IHRoZQotICAgICAgICAgIHN3aXRjaCBhZmZlY3RzIG9ubHkg dGhlIGNvbW1hbmQgd2l0aCB3aGljaCBpdCB3YXMgZ2l2ZW4gYW5kIGRvZXMKLSAgICAgICAgICBu b3QgYWZmZWN0IHRoZSBwcmV2YWlsaW5nIGdsb2JhbCBzZXR0aW5nLgotCi0gICBUUkFOU01JVCAv Tk9XQUlUIC9OT0VDSE8gL0JJTkFSWSBbIG90aGVyIHN3aXRjaGVzIF0gZmlsZW5hbWUKLSAgICAg ICAgICBXaGVuIHRoZSBUUkFOU01JVCBjb21tYW5kIGlzIGdpdmVuIHdpdGggdGhlIC9OT1dBSVQs IC9OT0VDSE8sCi0gICAgICAgICAgYW5kIC9CSU5BUlkgc3dpdGNoZXMsIHRoaXMgYWN0aXZhdGVz IGEgc3BlY2lhbCAiYmxhc3QgdGhlIHdob2xlCi0gICAgICAgICAgZmlsZSBvdXQgdGhlIGNvbW11 bmljYXRpb25zIGNvbm5lY3Rpb24gYWxsIGF0IG9uY2UiIG1vZGUgdGhhdAotICAgICAgICAgIEtl cm1pdCBkaWRuJ3QgaGF2ZSBwcmlvciB0byB2ZXJzaW9uIDguMC4gVGhlcmUgaGFzIGJlZW4KLSAg ICAgICAgICBpbmNyZWFzaW5nIGRlbWFuZCBmb3IgdGhpcyB0eXBlIG9mIHRyYW5zbWlzc2lvbiB3 aXRoIHRoZSBhZHZlbnQKLSAgICAgICAgICBvZiBkZXZpY2VzIHRoYXQgZXhwZWN0IGltYWdlIChl LmcuIC5KUEcpIG9yIHNvdW5kIChlLmcuIC5NUDMpCi0gICAgICAgICAgZmlsZXMgYXMgcmF3IGlu cHV0LiBUaGUgb2J2aW91cyBxdWVzdGlvbiBpczogaG93IGRvZXMgdGhlCi0gICAgICAgICAgcmVj ZWl2aW5nIGRldmljZSBrbm93IHdoZW4gaXQgaGFzIHRoZSB3aG9sZSBmaWxlPyBUaGlzIGRlcGVu ZHMKLSAgICAgICAgICBvbiB0aGUgZGV2aWNlLCBvZiBjb3Vyc2U7IHVzdWFsbHkgYWZ0ZXIgYSBj ZXJ0YWluIGFtb3VudCBvZiB0aW1lCi0gICAgICAgICAgZWxhcHNlcyB3aXRoIG5vdGhpbmcgYXJy aXZpbmcsIG9yIGVsc2Ugd2hlbiBLZXJtaXQgaGFuZ3MgdXAgb3IKLSAgICAgICAgICBjbG9zZXMg dGhlIGNvbm5lY3Rpb24uCi0KLSAgIFRZUEUgL0NIQVJBQ1RFUi1TRVQ6bmFtZQotICAgICAgICAg IEFsbG93cyB5b3UgdG8gc3BlY2lmeSB0aGUgY2hhcmFjdGVyIHNldCBpbiB3aGljaCB0aGUgZmls ZSB0byBiZQotICAgICAgICAgIHR5cGVkIGlzIGVuY29kZWQuCi0KLSAgIFRZUEUgL05VTUJFUgot ICAgICAgICAgIEFkZHMgbGluZSBudW1iZXJzLgotCi0gICBUWVBFIC9PVVRQVVQ6ZmlsZW5hbWUK LSAgICAgICAgICBTZW5kcyB0aGUgcmVzdWx0cyBvZiB0aGUgVFlQRSBjb21tYW5kIHRvIHRoZSBn aXZlbiBmaWxlLgotCi0gICBUWVBFIC9UUkFOU0xBVEUtVE86bmFtZQotICAgICAgICAgIFVzZWQg aW4gY29uanVuY3Rpb24gd2l0aCBUWVBFIC9DSEFSQUNURVItU0VUOnh4eDsgYWxsb3dzIHlvdSB0 bwotICAgICAgICAgIHNwZWNpZnkgdGhlIGNoYXJhY3RlciBzZXQgaW4gd2hpY2ggdGhlIGZpbGUg aXMgdG8gYmUgZGlzcGxheWVkLgotCi0gICBUWVBFIC9UUkFOU1BBUkVOVAotICAgICAgICAgIFVz ZWQgdG8gZGlzYWJsZSBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uIGluIHRoZSBUWVBFIGNvbW1h bmQsCi0gICAgICAgICAgd2hpY2ggb3RoZXJ3aXNlIGNhbiB0YWtlIHBsYWNlIGF1dG9tYXRpY2Fs bHkgYmFzZWQgb24gZmlsZQotICAgICAgICAgIHNjYW5uaW5nLCBldmVuIHdoZW4gL0NIQVJBQ1RF Ui1TRVQgYW5kIC9UUkFOU0xBVEUtVE8gc3dpdGNoZXMKLSAgICAgICAgICBhcmUgbm90IGdpdmVu LgotCi0gICBWT0lEIHRleHQKLSAgICAgICAgICBQYXJzZXMgdGhlIHRleHQsIGV2YWx1YXRpbmcg YW55IGJhY2tzbGFzaCBpdGVtcyBpbiBpdCAoc3VjaCBhcwotICAgICAgICAgIGZ1bmN0aW9uIGNh bGxzKSBidXQgZG9lc24ndCBkbyBhbnl0aGluZyBmdXJ0aGVyLCBleGNlcHQgcG9zc2libHkKLSAg ICAgICAgICBwcmludGluZyBlcnJvciBtZXNzYWdlcy4gVXNlZnVsIGZvciBpbnZva2luZyBmdW5j dGlvbnMgdGhhdCBoYXZlCi0gICAgICAgICAgc2lkZSBlZmZlY3RzIHdpdGhvdXQgdXNpbmcgb3Ig cHJpbnRpbmcgdGhlaXIgZGlyZWN0IHJlc3VsdHMsCi0gICAgICAgICAgZS5nLiAidm9pZCBcZnNw bGl0KFwlYSwmYSkiLgotCi1TeW1ib2xpYyBMaW5rcyBpbiBVTklYCi0KLSAgIFRoZSBVTklYIHZl cnNpb25zIG9mIEMtS2VybWl0IGhhdmUgaGFkIC9GT0xMT1dMSU5LUyBhbmQgL05PRk9MTE9XTElO S1MKLSAgIHN3aXRjaGVzIGFkZGVkIHRvIHNldmVyYWwgY29tbWFuZHMgdG8gY29udHJvbCB0aGUg dHJlYXRtZW50IG9mIHN5bWJvbGljCi0gICBsaW5rcy4gRGlmZmVyZW50IGNvbW1hbmRzIGRlYWwg ZGlmZmVyZW50bHkgd2l0aCBzeW1ib2xpYyBsaW5rczoKLQotICAgS2VybWl0IFNFTkQsIEZUUCBN UFVUCi0gICAgICAgICAgL05PRk9MTE9XTElOS1MgaXMgdGhlIGRlZmF1bHQsIHdoaWNoIG1lYW5z IHN5bWJvbGljIGxpbmtzIGFyZQotICAgICAgICAgIHNraXBwZWQgZW50aXJlbHkuIFRoZSBhbHRl cm5hdGl2ZSwgL0ZPTExPV0xJTktTLCBzaG91bGQgYmUgdXNlZAotICAgICAgICAgIHdpdGggY2F1 dGlvbiwgc2luY2UgYW4gaW5ub2NlbnQgbGluayBtaWdodCBwb2ludCB0byBhIHdob2xlIGZpbGUK LSAgICAgICAgICBzeXN0ZW0sIG9yIGl0IG1pZ2h0IGNhdXNlIGEgbG9vcC4gVGhlcmUgaXMgbm8g d2F5IGluIEtlcm1pdCBvcgotICAgICAgICAgIEZUUCBwcm90b2NvbCB0byBzZW5kIHRoZSBsaW5r IGl0c2VsZi4gV2UgZWl0aGVyIHNraXAgdGhlbSBvcgotICAgICAgICAgIGZvbGxvdyB0aGVtOyB3 ZSBjYW4ndCBkdXBsaWNhdGUgdGhlbS4KLQotICAgRElSRUNUT1JZCi0gICAgICAgICAgL05PRk9M TE9XTElOS1MgaXMgdGhlIGRlZmF1bHQsIHdoaWNoIG1lYW5zIHRoZSBESVJFQ1RPUlkgY29tbWFu ZAotICAgICAgICAgIGxpc3RzIHN5bWJvbGljIGxpbmtzIGluIGEgd2F5IHRoYXQgc2hvd3MgdGhl eSBhcmUgbGlua3MsIGJ1dCBpdAotICAgICAgICAgIGRvZXMgbm90IGZvbGxvdyB0aGVtLiBUaGUg YWx0ZXJuYXRpdmUsIC9GT0xMT1dMSU5LUywgZm9sbG93cwotICAgICAgICAgIGxpbmtzIGFuZCBn aXZlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGlua2VkLXRvIGRpcmVjdG9yaWVzIGFuZAotICAg ICAgICAgIGZpbGVzLgotCi0gICBERUxFVEUsIFJNRElSCi0gICAgICAgICAgVGhlIERFTEVURSBj b21tYW5kIGRvZXMgbm90IGhhdmUgbGluay1zcGVjaWZpYyBzd2l0Y2hlcy4gREVMRVRFCi0gICAg ICAgICAgbmV2ZXIgZm9sbG93cyBsaW5rcy4gSWYgeW91IHRlbGwgS2VybWl0IHRvIGRlbGV0ZSBh IHN5bWJvbGljCi0gICAgICAgICAgbGluaywgaXQgZGVsZXRlcyB0aGUgbGluayBpdHNlbGYsIG5v dCB0aGUgbGlua2VkLXRvIGZpbGUuIERpdHRvCi0gICAgICAgICAgZm9yIFJNRElSLgotCi0gICBD T1BZCi0gICAgICAgICAgVGhlIENPUFkgY29tbWFuZCBiZWhhdmVzIGp1c3QgbGlrZSB0aGUgVU5J WCBjcCBjb21tYW5kOyBpdAotICAgICAgICAgIGFsd2F5cyBmb2xsb3dzIGxpbmtzLgotCi0gICBS RU5BTUUKLSAgICAgICAgICBUaGUgUkVOQU1FIGNvbW1hbmQgYmVoYXZlcyBqdXN0IGxpa2UgdGhl IFVOSVggbXYgY29tbWFuZDsgaXQKLSAgICAgICAgICBvcGVyYXRlcyBvbiBsaW5rcyBkaXJlY3Rs eSByYXRoZXIgdGhhbiBmb2xsb3dpbmcuCi0KLSAgIFsgWzQwMV1Ub3AgXSBbIFs0MDJdQ29udGVu dHMgXSBbIFs0MDNdQy1LZXJtaXQgSG9tZSBdIFsgWzQwNF1LZXJtaXQKLSAgIEhvbWUgXQotCi04 LiBPVEhFUiBTQ1JJUFRJTkcgSU1QUk9WRU1FTlRTCi0KLTguMS4gUGVyZm9ybWFuY2UgYW5kIERl YnVnZ2luZwotCi0gICBBIGNvbW1hbmQgY2FjaGUgZm9yIGZyZXF1ZW50bHkgdXNlZCBjb21tYW5k cyBwbHVzIHNvbWUgcmVsYXRlZAotICAgb3B0aW1pemF0aW9ucyBpbmNyZWFzZXMgdGhlIHNwZWVk IG9mIGNvbXB1dGUtYm91bmQgc2NyaXB0cyBieSBhbnl3aGVyZQotICAgZnJvbSA1MCUgdG8gMTAw MCUuCi0KLSAgIFRoZSBuZXcgUFJPTVBUIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gc2V0IGJyZWFr cG9pbnRzIGZvciBkZWJ1Z2dpbmcKLSAgIHNjcmlwdHMuIElmIGV4ZWN1dGVkIGluIGEgY29tbWFu ZCBmaWxlIG9yIG1hY3JvLCBpdCBnaXZlcyB5b3UgYW4KLSAgIGludGVyYWN0aXZlIGNvbW1hbmQg cHJvbXB0IGluIHRoZSBjdXJyZW50IGNvbnRleHQgb2YgdGhlIHNjcmlwdCwgd2l0aAotICAgYWxs IGl0cyB2YXJpYWJsZXMsIGFyZ3VtZW50cywgY29tbWFuZCBzdGFjaywgZXRjLCBhdmFpbGFibGUg Zm9yCi0gICBleGFtaW5hdGlvbiBvciBjaGFuZ2UsIGFuZCB0aGUgYWJpbGl0eSB0byByZXN1bWUg dGhlIHNjcmlwdCBhdCBhbnkKLSAgIHBvaW50IChFTkQgcmVzdW1lcyBpdCwgQ3RybC1DIG9yIFNU T1AgY2FuY2VscyBpdCBhbmQgcmV0dXJucyB0byB0b3AKLSAgIGxldmVsKS4KLQotICAgVGhlIG5l dyBDdHJsLUMgdHJhcHBpbmcgZmVhdHVyZSAoWzQwNV1TZWN0aW9uIDguMTQpIGxldHMgeW91IGlu dGVyY2VwdAotICAgaW50ZXJydXB0aW9uIG9mIHNjcmlwdHMuIFRoaXMgY2FuIGJlIHVzZWQgaW4g Y29tYmluYXRpb24gd2l0aCB0aGUKLSAgIFBST01QVCBjb21tYW5kIHRvIGRlYnVnIHNjcmlwdHMu IEV4YW1wbGU6Ci0KLWRlZmluZSBPTl9DVFJMQyB7Ci0gICAgZWNobyBJTlRFUlJVUFRFRCBCWSBD VFJMLUMuLi4KLSAgICBlY2hvIFRoZSBjb21tYW5kIHN0YWNrIGhhcyBub3QgeWV0IGJlZW4gcm9s bGVkIGJhY2s6Ci0gICAgc2hvdyBzdGFjawotICAgIGVjaG8gVHlwZSBDdHJsLUMgYWdhaW4gb3Ig dXNlIHRoZSBFTkQgY29tbWFuZCB0byByZXR1cm4gdG8gdG9wIGxldmVsLgotICAgIHByb21wdCBE ZWJ1Zz4KLX0KLQotICAgQWRkaW5nIHRoaXMgT05fQ1RSTCBkZWZpbml0aW9uIHRvIHlvdXIgc2Ny aXB0IGxldHMgeW91IGludGVycnVwdCBpdCBhdAotICAgYW55IHBvaW50IGFuZCBnZXQgcHJvbXB0 IHRoYXQgaXMgaXNzdWVkIGF0IHRoZSBjdXJyZW50IGNvbW1hbmQgbGV2ZWwsCi0gICBzbyB5b3Ug Y2FuIHF1ZXJ5IGxvY2FsIHZhcmlhYmxlcywgZXRjLgotCi0gICBbIFs0MDZdVG9wIF0gWyBbNDA3 XUNvbnRlbnRzIF0gWyBbNDA4XUMtS2VybWl0IEhvbWUgXSBbIFs0MDldS2VybWl0Ci0gICBIb21l IF0KLQotOC4yLiBVc2luZyBNYWNyb3MgYXMgTnVtZXJpYyBWYXJpYWJsZXMKLQotICAgQSBtYWNy byBpcyBhIHdheSB0byBhc3NpZ24gYSB2YWx1ZSB0byBhIG5hbWUsIGFuZCB0aGVuIHVzZSB0aGUg bmFtZSB0bwotICAgcmVmZXIgdG8gdGhlIHZhbHVlLiBNYWNyb3MgYXJlIHVzZWQgaW4gdHdvIHdh eXMgaW4gS2VybWl0OiBhcwotICAgInN1YnJvdXRpbmVzIiBvciBmdW5jdGlvbnMgY29tcG9zZWQg b2YgS2VybWl0IGNvbW1hbmRzLCB3aGljaCBhcmUKLSAgIGV4ZWN1dGVkLCBvciBhcyB2YXJpYWJs ZXMgdG8gaG9sZCBhcmJpdHJhcnkgdmFsdWVzIC0tIHRleHQsIG51bWJlcnMsCi0gICBmaWxlbmFt ZXMsIGV0Yy4KLQotICAgV2hlbiBhIG1hY3JvIGlzIHRvIGJlIGV4ZWN1dGVkLCBpdHMgbmFtZSBp cyBnaXZlbiBhcyBpZiBpdCB3ZXJlIGEKLSAgIEMtS2VybWl0IGNvbW1hbmQsIG9wdGlvbmFsbHkg cHJlY2VkZWQgYnkgdGhlIHdvcmQgImRvIi4gV2hlbiBhIG1hY3JvIGlzCi0gICB1c2VkIGFzIGEg dmFyaWFibGUsIGl0IG11c3QgYmUgImVzY2FwZWQiIHdpdGggXG0oeHh4KSAob3IgZXF1aXZhbGVu dAotICAgZnVuY3Rpb24sIGUuZy4gXHMoeHh4KSwgXDooeHh4KSwgXGZkZWZpbml0aW9uKHh4eCkp LCB3aGVyZSB4eHggaXMgdGhlCi0gICBtYWNybyBuYW1lLCBmb3IgZXhhbXBsZToKLQotICBkZWZp bmUgZmlsZW5hbWUgL3Vzci9vbGdhL29vZmEudHh0Ci0gIHNlbmQgXG0oZmlsZW5hbWUpCi0KLSAg IE9mIGNvdXJzZSB2YXJpYWJsZXMgY2FuIGFsc28gaG9sZCBudW1iZXJzOgotCi0gIGRlZmluZSBz aXplIDE3Ci0gIGRlY2xhcmUgXCZhW1xtKHNpemUpXQotICAuLi4KLSAgZGVmaW5lIGluZGV4IDMK LSAgaWYgKCA9PSBcbShpbmRleCkgMyApIGVjaG8gVGhlIHRoaXJkIHZhbHVlIGlzOiBcJmFbXG0o aW5kZXgpXQotICBldmFsdWF0ZSBpbmRleCAoXG0oaW5kZXgpICogNCkKLSAgaWYgKCA+IFxtKGlu ZGV4KSBcbShzaXplKSApIGVjaG8gT3V0IG9mIHJhbmdlIQotCi0gICBCdXQgdGhlc2UgYXJlIGNv bnRleHRzIGluIHdoaWNoIG9ubHkgbnVtYmVycyBhcmUgdmFsaWQuIEMtS2VybWl0IDguMAotICAg aGFzIGJlZW4gY2hhbmdlZCB0byB0cmVhdCBub24tZXNjYXBlZCBub24tbnVtZXJpYyBpdGVtcyBp biBzdHJpY3RseQotICAgbnVtZXJpYyBjb250ZXh0cyBhcyBtYWNybyBuYW1lcy4gU28gaXQgaXMg bm93IHBvc3NpYmxlIChidXQgbm90Ci0gICByZXF1aXJlZCkgdG8gb21pdCB0aGUgXG0oLi4uKSBu b3RhdGlvbiBhbmQganVzdCB1c2UgdGhlIG1hY3JvIG5hbWUgaW4KLSAgIHRoZXNlIGNvbnRleHRz OgotCi0gIGRlZmluZSBzaXplIDE3Ci0gIGRlY2xhcmUgXCZhW3NpemVdCi0gIC4uLgotICBkZWZp bmUgaW5kZXggMwotICBpZiAoID09IGluZGV4IDMgKSBlY2hvIFRoZSB0aGlyZCB2YWx1ZSBpczog XCZhW2luZGV4XQotICBldmFsdWF0ZSBpbmRleCAoaW5kZXggKiA0KQotICBpZiAoID4gaW5kZXgg c2l6ZSApIGVjaG8gT3V0IG9mIHJhbmdlIQotCi0gICBUaGlzIGlzIGVzcGVjaWFsbHkgbmljZSBm b3IgbG9vcHMgdGhhdCBkZWFsIHdpdGggYXJyYXlzLiBIZXJlLCBmb3IKLSAgIGV4YW1wbGUsIGlz IGEgbG9vcCB0aGF0IHJldmVyc2VzIHRoZSBvcmRlciBvZiB0aGUgZWxlbWVudHMgaW4gYW4gYXJy YXkuCi0gICBXaGVyZWFzIGZvcm1lcmx5IGl0IHdhcyBuZWNlc3NhcnkgdG8gd3JpdGU6Ci0KLSAg LlwlbiA6Oj0gXGZkaW0oJmEpCi0gIGZvciBcJWkgMSBcJW4vMiAxIHsKLSAgICAgIC50bXAgOj0g XCZhW1wlbi1cJWkrMV0KLSAgICAgIC5cJmFbXCVuLVwlaSsxXSA6PSBcJmFbXCVpXQotICAgICAg LlwmYVtcJWldIDo9IFxtKHRtcCkKLSAgfQotCi0gICBSZWNvZGluZyB0aGlzIHRvIHVzZSBtYWNy byBuYW1lcyAiaSIgYW5kICJuIiBpbnN0ZWFkIG9mIHRoZSBiYWNrc2xhc2gKLSAgIHZhcmlhYmxl cyBcJWkgYW5kIFwlbiwgd2UgaGF2ZToKLQotICAubiA6Oj0gXGZkaW0oJmEpCi0gIGZvciBpIDEg bi8yIDEgewotICAgICAgLnRtcCA6PSBcJmFbbi1pKzFdCi0gICAgICAuXCZhW24taSsxXSA6PSBc JmFbaV0KLSAgICAgIC5cJmFbaV0gOj0gXG0odG1wKQotICB9Ci0KLSAgIHdoaWNoIHJlZHVjZXMg dGhlIGJhY2tzbGFzaCBjb3VudCB0byBsZXNzIHRoYW4gaGFsZi4gVGhlIGZpbmFsCi0gICBzdGF0 ZW1lbnQgaW4gdGhlIGxvb3AgY291bGQgYmUgd3JpdHRlbiAiLlwmYVtpXSA6Oj0gdG1wIiBpZiB0 aGUgYXJyYXkKLSAgIGNvbnRhaW5lZCBvbmx5IG51bWJlcnMgKHNpbmNlIDo6PSBpbmRpY2F0ZXMg YXJpdGhtZXRpYyBleHByZXNzaW9uCi0gICBldmFsdWF0aW9uKS4KLQotICAgQWxzbywgbm93IHlv dSBjYW4gdXNlIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgaW4gaW50ZWdlciBjb250ZXh0cyAoc3Vj aAotICAgYXMgYXJyYXkgc3Vic2NyaXB0cyksIGluIHdoaWNoIGNhc2UgdGhleSBhcmUgdHJ1bmNh dGVkIHRvIGFuIGludGVnZXIKLSAgIHZhbHVlIChpLmUuIHRoZSBmcmFjdGlvbmFsIHBhcnQgaXMg ZGlzY2FyZGVkKS4KLQotICAgRXhhbXBsZXMgb2YgbnVtZXJpYyBjb250ZXh0cyBpbmNsdWRlOgot Ci0gICAgICogQXJyYXkgc3Vic2NyaXB0cy4KLSAgICAgKiBBbnkgbnVtZXJpYyBmdW5jdGlvbiBh cmd1bWVudC4KLSAgICAgKiBSaWdodC1oYW5kIHNpZGUgb2YgOjo9IGFzc2lnbm1lbnRzLgotICAg ICAqIEVWQUxVQVRFIGNvbW1hbmQgb3IgXGZldmFsdWF0ZSgpIGZ1bmN0aW9uIGV4cHJlc3Npb24u Ci0gICAgICogVGhlIElOQ1JFTUVOVCBvciBERUNSRU1FTlQgYnktdmFsdWUuCi0gICAgICogSUYg PSwgPiwgPCwgIT0sID49LCBhbmQgPD0gY29tcGFyYW5kcy4KLSAgICAgKiBUaGUgSUYgbnVtYmVy IGNvbnN0cnVjdC4KLSAgICAgKiBGT1ItbG9vcCB2YXJpYWJsZXMuCi0gICAgICogU1RPUCwgRU5E LCBhbmQgRVhJVCBzdGF0dXMgY29kZXMuCi0gICAgICogVGhlIElOUFVUIHRpbWVvdXQgdmFsdWUu Ci0gICAgICogUEFVU0UsIFdBSVQsIFNMRUVQLCBNU0xFRVAgaW50ZXJ2YWxzLgotICAgICAqIFRo ZSBTSElGVCBhcmd1bWVudC4KLSAgICAgKiBOdW1lcmljIHN3aXRjaCBhcmd1bWVudHMsIGUuZy4g VFlQRSAvV0lEVEg6bnVtYmVyLCBTRU5ECi0gICAgICAgL0xBUkdFUjpudW1iZXIuCi0gICAgICog U0NSRUVOIE1PVkUtVE8gcm93IGFuZCBjb2x1bW4gbnVtYmVyLgotICAgICAqIFZhcmlvdXMgU0VU IERJQUwgcGFyYW1ldGVycyAodGltZW91dCwgcmV0cnkgbGltaXQsIGV0YykuCi0gICAgICogVmFy aW91cyBTRVQgU0VORCBvciBSRUNFSVZFIHBhcmFtZXRlcnMgKHBhY2tldCBsZW5ndGgsIHdpbmRv dyBzaXplLAotICAgICAgIGV0YykuCi0gICAgICogVmFyaW91cyBvdGhlciBTRVQgcGFyYW1ldGVy cy4KLQotICAgYW5kOgotCi0gICAgICogUy1FeHByZXNzaW9ucyAoZXhwbGFpbmVkIGluIFs0MTBd U2VjdGlvbiA5KS4KLQotICAgTWFjcm8gbmFtZXMgdXNlZCBpbiBudW1lcmljIGNvbnRleHRzIG11 c3Qgbm90IGluY2x1ZGUgbWF0aGVtYXRpY2FsCi0gICBvcGVyYXRvcnMuIEFsdGhvdWdoIGl0IGlz IGxlZ2FsIHRvIGNyZWF0ZSBhIG1hY3JvIGNhbGxlZCAiZm9vK2JhciIsIGluCi0gICBhIG51bWVy aWMgY29udGV4dCB0aGlzIHdvdWxkIGJlIHRha2VuIGFzIHRoZSBzdW0gb2YgdGhlIHZhbHVlcyBv ZiAiZm9vIgotICAgYW5kICJiYXIiLiBBbnkgc3VjaCBjb25mbGljdCBjYW4gYmUgYXZvaWRlZCwg b2YgY291cnNlLCBieSBlbmNsb3NpbmcKLSAgIHRoZSBtYWNybyBuYW1lIGluIFxtKC4uLikuCi0K LSAgIFsgWzQxMV1Ub3AgXSBbIFs0MTJdQ29udGVudHMgXSBbIFs0MTNdQy1LZXJtaXQgSG9tZSBd IFsgWzQxNF1LZXJtaXQKLSAgIEhvbWUgXQotCi04LjMuIE5ldyBJRiBDb25kaXRpb25zCi0KLSAg IFNldmVyYWwgbmV3IElGIGNvbmRpdGlvbnMgYXJlIGF2YWlsYWJsZToKLQotICAgSUYgREVDTEFS RUQgYXJyYXluYW1lCi0gICAgICAgICAgRXhwbGFpbmVkIGluIFs0MTVdU2VjdGlvbiA4LjYuCi0K LSAgIElGIEtCSElUCi0gICAgICAgICAgQWxsb3dzIGEgc2NyaXB0IHRvIHRlc3Qgd2hldGhlciBh IGtleSB3YXMgcHJlc3NlZCB3aXRob3V0Ci0gICAgICAgICAgYWN0dWFsbHkgdHJ5aW5nIHRvIHJl YWQgaXQuCi0KLSAgIElGIEtFUkJBTkcgKFVuaXggb25seSkKLSAgICAgICAgICBUcnVlIGlmIEtl cm1pdCB3YXMgc3RhcnRlZCBmcm9tIGEgS2VyYmFuZyBzY3JpcHQuIFRoaXMgaXMgdXNlZnVsCi0g ICAgICAgICAgZm9yIGtub3dpbmcgaG93IHRvIGludGVycHJldCB0aGUgXCZAW10gYW5kIFwmX1td IGFyZ3VtZW50IHZlY3RvcgotICAgICAgICAgIGFycmF5cywgYW5kIHVuZGVyIHdoYXQgY29uZGl0 aW9ucyB0byBleGl0LgotCi0gICBJRiBJTlRFR0VSIG4KLSAgICAgICAgICBUaGlzIGlzIGp1c3Qg YSBzeW5vbnltIGZvciBJRiBOVU1FUklDLCB3aGljaCBpcyB0cnVlIGlmIG4KLSAgICAgICAgICBj b250YWlucyBvbmx5IGRpZ2l0cyAob3IsIGlmIG4gaXMgYSB2YXJpYWJsZSwgaXRzIHZhbHVlIGNv bnRhaW5zCi0gICAgICAgICAgb25seSBkaWdpdHMpLgotCi0gICBCeSBjb250cmFzdCwgSUYgRkxP QVQgbiBzdWNjZWVkcyBpZiBuIGlzIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIE9SIGFuCi0gICBp bnRlZ2VyIChvciBhIHZhcmlhYmxlIHdpdGggZmxvYXRpbmctcG9pbnQgb3IgaW50ZWdlciB2YWx1 ZSkuCi0gICBUaGVyZWZvcmUsIElGIEZMT0FUIHNob3VsZCBiZSB1c2VkIHdoZW5ldmVyIGFueSBr aW5kIG9mIG51bWJlciBpcwotICAgYWNjZXB0YWJsZSwgd2hlcmVhcyBJRiBJTlRFR0VSIChvciBJ RiBOVU1FUklDKSB3aGVuIG9ubHkgYW4gaW50ZWdlciBjYW4KLSAgIGJlIHVzZWQuCi0KLSAgIFsg WzQxNl1Ub3AgXSBbIFs0MTddQ29udGVudHMgXSBbIFs0MThdQy1LZXJtaXQgSG9tZSBdIFsgWzQx OV1LZXJtaXQKLSAgIEhvbWUgXQotCi04LjQuIFRoZSBPTl9VTktOT1dOX0NPTU1BTkQgTWFjcm8K LQotICAgVGhlIG5ldyBPTl9VTktOT1dOX0NPTU1BTkQgbWFjcm8sIGlmIGRlZmluZWQsIGlzIGV4 ZWN1dGVkIHdoZW5ldmVyIHlvdQotICAgZ2l2ZSBhIGNvbW1hbmQgdGhhdCBpcyBub3Qga25vd24g dG8gQy1LZXJtaXQ7IGFueSBvcGVyYW5kcyBhcmUgcGFzc2VkCi0gICBhcyBhcmd1bWVudHMuIEhl cmUgYXJlIHNvbWUgc2FtcGxlIGRlZmluaXRpb25zOgotCi0gIERFRiBPTl9VTktOT1dOX0NPTU1B TkQgdGVsbmV0IFwlMSA7IFRyZWF0IHVua25vd24gY29tbWFuZHMgYXMgaG9zdG5hbWVzCi0gIERF RiBPTl9VTktOT1dOX0NPTU1BTkQgZGlhbCBcJTEgICA7IFRyZWF0IHVua25vd24gY29tbWFuZHMg cGhvbmUgbnVtYmVycwotICBERUYgT05fVU5LTk9XTl9DT01NQU5EIHRha2UgXCUxICAgOyBUcmVh dCB1bmtub3duIGNvbW1hbmRzIGFzIGZpbGVuYW1lcwotICBERUYgT05fVU5LTk9XTl9DT01NQU5E ICFcJSogICAgICAgOyBUcmVhdCB1bmtub3duIGNvbW1hbmRzIGFzIHNoZWxsIGNvbW1hbmRzCi0K LSAgIFRoZSBPTl9DRCBtYWNybywgaWYgZGVmaW5lZCwgaXMgZXhlY3V0ZWQgd2hlbmV2ZXIgS2Vy bWl0IGlzIGdpdmVuIGEgQ0QKLSAgIChjaGFuZ2UgZGlyZWN0b3J5KSBjb21tYW5kICg4LjAuMjEx KS4gVXBvbiBlbnRyeSB0byB0aGlzIG1hY3JvLCB0aGUKLSAgIGRpcmVjdG9yeSBoYXMgYWxyZWFk eSBjaGFuZ2VkIGFuZCB0aGUgbmV3IGRpcmVjdG9yeSBzdHJpbmcgaXMgYXZhaWxhYmxlCi0gICBp biB0aGUgXHYoZGlyZWN0b3J5KSB2YXJpYWJsZSwgYW5kIGFsc28gYXMgdGhlIGZpcnN0IGFyZ3Vt ZW50IChcJTEpLgotCi0gICBbIFs0MjBdVG9wIF0gWyBbNDIxXUNvbnRlbnRzIF0gWyBbNDIyXUMt S2VybWl0IEhvbWUgXSBbIFs0MjNdS2VybWl0Ci0gICBIb21lIF0KLQotOC41LiBUaGUgU0hPVyBN QUNSTyBDb21tYW5kCi0KLSAgIFRoZSBTSE9XIE1BQ1JPIGNvbW1hbmQgaGFzIGJlZW4gY2hhbmdl ZCB0byBhY2NlcHQgbW9yZSB0aGFuIG9uZSBtYWNybwotICAgbmFtZToKLQotICAoc2V0cSBhIDEg YiAyIGMgMykKLSAgc2hvdyBtYWMgYSBiIGMKLSAgYSA9IDEKLSAgYiA9IDIKLSAgYyA9IDMKLQot ICAgQW4gZXhhY3QgbWF0Y2ggaXMgcmVxdWlyZWQgZm9yIGVhY2ggbmFtZSAoZXhjZXB0IHRoYXQg Y2FzZSBkb2Vzbid0Ci0gICBtYXR0ZXIpLiBJZiB5b3UgaW5jbHVkZSB3aWxkY2FyZCBjaGFyYWN0 ZXJzLCBob3dldmVyLCBhIHBhdHRlcm4gbWF0Y2gKLSAgIGlzIHBlcmZvcm1lZDoKLQotICBzaG93 IG1hYyBbYS1jXSp4Ci0KLSAgIHNob3dzIGFsbCBtYWNyb3Mgd2hvc2UgbmFtZXMgc3RhcnQgd2l0 aCBhLCBiLCBvciBjLCBhbmQgZW5kIHdpdGggeC4KLQotICAgWyBbNDI0XVRvcCBdIFsgWzQyNV1D b250ZW50cyBdIFsgWzQyNl1DLUtlcm1pdCBIb21lIF0gWyBbNDI3XUtlcm1pdAotICAgSG9tZSBd Ci0KLTguNi4gQXJyYXlzCi0KLSAgIEEgY2xhcmlmaWNhdGlvbiByZWdhcmRpbmcgcmVmZXJlbmNl cyB0byBhcnJheSBuYW1lcyAoYXMgb3Bwb3NlZCB0bwotICAgYXJyYXkgZWxlbWVudHMpOiBZb3Ug Y2FuIHVzZSBhcnJheS1uYW1lICJhYmJyZXZpYXRpb25zIiBsaWtlICZhIG9ubHkgaW4KLSAgIGNv bnRleHRzIHRoYXQgZXhwZWN0IGFycmF5IG5hbWVzLCBsaWtlIEFSUkFZIGNvbW1hbmRzIG9yIGFy cmF5LW5hbWUKLSAgIGZ1bmN0aW9uIGFyZ3VtZW50cyBzdWNoIGFzIHRoZSBzZWNvbmQgYXJndW1l bnQgb2YgXGZzcGxpdCgpLiBJbiBhIExPQ0FMCi0gICBzdGF0ZW1lbnQsIGhvd2V2ZXIsIHlvdSBo YXZlIHRvIHdyaXRlIFwmYVtdLCBzaW5jZSAibG9jYWwgJmEiIG1pZ2h0Ci0gICByZWZlciB0byBh IG1hY3JvIG5hbWVkICImYSIuCi0KLSAgIEluIGZ1bmN0aW9uIGFyZ3VtZW50cywgaG93ZXZlciwg eW91IE1VU1QgdXNlIHRoZSBhYmJyZXZpYXRlZCBmb3JtOgotICAgXGZzcGxpdChcJWEsJmEpIG9y IFxmc3BsaXQoXCVhLCZhW10pLiBJZiB5b3UgaW5jbHVkZSB0aGUgYmFja3NsYXNoIChhcwotICAg aW4gIlxmc3BsaXQoXCVhLFwmYVtdKSIpIGEgcGFyc2UgZXJyb3Igb2NjdXJzLgotCi0gICBIZXJl IGFyZSB0aGUgbmV3IGFycmF5LXJlbGF0ZWQgY29tbWFuZHM6Ci0KLSAgIElGIERFQ0xBUkVEIGFy cmF5bmFtZQotICAgICAgICAgIEFsbG93cyBhIHNjcmlwdCB0byB0ZXN0IHdoZXRoZXIgYW4gYXJy YXkgaGFzIGJlZW4gZGVjbGFyZWQuIFRoZQotICAgICAgICAgIGFycmF5bmFtZSBjYW4gYmUgYSBu b24tYXJyYXkgYmFja3NsYXNoIHZhcmlhYmxlIHN1Y2ggYXMgXCUxIG9yCi0gICAgICAgICAgXG0o bmFtZSksIGluIHdoaWNoIGNhc2UgaXQgaXMgZXZhbHVhdGVkIGZpcnN0LCBhbmQgdGhlIHJlc3Vs dCBpcwotICAgICAgICAgIHRyZWF0ZWQgYXMgdGhlIGFycmF5IG5hbWUuIE90aGVyd2lzZSwgYXJy YXluYW1lIGlzIHRyZWF0ZWQgYXMgaW4KLSAgICAgICAgICB0aGUgQVJSQVkgY29tbWFuZHM6IGl0 IGNhbiBiZSBhLCAmYSwgJmFbXSwgXCZhLCBcJmFbXSwgXCZhWzNdLAotICAgICAgICAgIFwmYVsz OjldLCBldGMsIHdpdGggdGhlIGFwcHJvcHJpYXRlIHJlc3VsdHMgaW4gZWFjaCBjYXNlLgotICAg ICAgICAgIFN5bm9ueW06IElGIERDTC4KLQotICAgVU5ERUNMQVJFIGFycmF5bmFtZQotICAgICAg ICAgIFVOREVDTEFSRSBpcyBhIG5ldyB0b3AtbGV2ZWwgY29tbWFuZCB0byB1bmRlY2xhcmUgYW4g YXJyYXkuCi0gICAgICAgICAgUHJldmlvdXNseSB0aGlzIGNvdWxkIG9ubHkgYmUgZG9uZSB3aXRo ICJkZWNsYXJlIFwmYVswXSIgKGkuZS4KLSAgICAgICAgICByZS1kZWNsYXJlIHRoZSBhcnJheSB3 aXRoIGEgZGltZW5zaW9uIG9mIDApLgotCi0gICBBUlJBWSBMSU5LIGxpbmtuYW1lIGFycmF5bmFt ZQotICAgICAgICAgIENyZWF0ZXMgYSBzeW1ib2xpYyBsaW5rIGZyb20gdGhlIGFycmF5IG5hbWVk IGJ5IGxpbmtuYW1lICh3aGljaAotICAgICAgICAgIG11c3QgYmUgdGhlIG5hbWUgb2YgYW4gYXJy YXkgdGhhdCBpcyBub3QgeWV0IGRlY2xhcmVkIGluIHRoZQotICAgICAgICAgIGN1cnJlbnQgY29u dGV4dCkgdG8gdGhlIGFycmF5IG5hbWVkIGJ5IGFycmF5bmFtZSAod2hpY2ggbXVzdCB0aGUKLSAg ICAgICAgICBuYW1lIG9mIGEgY3VycmVudGx5IGRlY2xhcmVkIGFycmF5IHRoYXQgaXMgbm90IGl0 c2VsZiBhIGxpbmssIG9yCi0gICAgICAgICAgYSB2YXJpYWJsZSBjb250YWluaW5nIHRoZSBuYW1l IG9mIHN1Y2ggYW4gYXJyYXkpLiBUaGUgdHdvIG5hbWVzCi0gICAgICAgICAgaW5kaWNhdGUgdGhl IHNhbWUgYXJyYXk6IGlmIHlvdSBjaGFuZ2UgYW4gYXJyYXkgZWxlbWVudCwgdGhlCi0gICAgICAg ICAgY2hhbmdlIGlzIHJlZmxlY3RlZCBpbiB0aGUgbGluayB0b28sIGFuZCB2aWNlIHZlcnNhLiBJ ZiB5b3UKLSAgICAgICAgICB1bmRlY2xhcmUgdGhlIGxpbmssIHRoZSByZWFsIGFycmF5IGlzIHVu YWZmZWN0ZWQuIElmIHlvdQotICAgICAgICAgIHVuZGVjbGFyZSB0aGUgcmVhbCBhcnJheSwgYWxs IGxpbmtzIHRvIGl0IGRpc2FwcGVhci4gSWYgeW91Ci0gICAgICAgICAgcmVzaXplIGFuIGFycmF5 IChkaXJlY3RseSBvciB0aHJvdWdoIGEgbGluayksIGFsbCBsaW5rcyB0byBpdAotICAgICAgICAg IGFyZSB1cGRhdGVkIGF1dG9tYXRpY2FsbHkuCi0KLSAgIEFycmF5IGxpbmtzIGxldCB5b3UgcGFz cyBhcnJheSBuYW1lcyBhcyBhcmd1bWVudHMgdG8gbWFjcm9zLiBGb3IKLSAgIGV4YW1wbGUsIHN1 cHBvc2UgeW91IGhhZCBhIHByb2dyYW0gdGhhdCBuZWVkZWQgdG8gdXBwZXJjYXNlIGFsbCB0aGUK LSAgIGVsZW1lbnRzIG9mIGRpZmZlcmVudCBhcnJheXMgYXQgZGlmZmVyZW50IHRpbWVzLiBZb3Ug Y291bGQgd3JpdGUgYQotICAgbWFjcm8gdG8gZG8gdGhpcywgd2l0aCB0aGUgYXJyYXkgbmFtZSBh cyBhbiBhcmd1bWVudC4gQnV0IHdpdGhvdXQgYXJyYXkKLSAgIGxpbmtzLCB0aGVyZSB3b3VsZCBi ZSBubyB3YXkgdG8gcmVmZXIgdG8gdGhlIGFyZ3VtZW50IGFycmF5IHdpdGhpbiB0aGUKLSAgIG1h Y3JvLiBBcnJheSBsaW5rcyBtYWtlIGl0IGVhc3k6Ci0KLSAgZGVmaW5lIGFycmF5dXBwZXIgewot ICAgICAgbG9jYWwgXCZlW10gXCVpCi0gICAgICBhcnJheSBsaW5rIFwmZVtdIFwlMQotICAgICAg Zm9yIGkgMSBcZmRpbSgmZSkgMSB7IC5cJmVbaV0gOj0gXGZ1cHBlcihcJmVbaV0pIH0KLSAgfQot ICBkZWNsYXJlIFwmYVtdID0gdGhlc2UgYXJlIHNvbWUgd29yZHMKLSAgYXJyYXl1cHBlciAmYQot ICBzaG93IGFycmF5ICZhCi0KLSAgIFRoZSBtYWNybyBkZWNsYXJlcyB0aGUgYXJyYXkgbGluayBM T0NBTCwgd2hpY2ggbWVhbnMgaXQgZG9lc24ndAotICAgY29uZmxpY3Qgd2l0aCBhbnkgYXJyYXkg b2YgdGhlIHNhbWUgbmFtZSB0aGF0IG1pZ2h0IGV4aXN0IG91dHNpZGUgdGhlCi0gICBtYWNybywg YW5kIHRoYXQgdGhlIGxpbmsgaXMgZGVzdHJveWVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgbWFj cm8KLSAgIGV4aXRzLiBUaGlzIHdvcmtzLCBieSB0aGUgd2F5LCBldmVuIGlmIHRoZSBsaW5rIG5h bWUgYW5kIHRoZSBtYWNybwotICAgYXJndW1lbnQgbmFtZSBhcmUgdGhlIHNhbWUsIGFzIGxvbmcg YXMgdGhlIGxpbmsgaXMgZGVjbGFyZWQgTE9DQUwuCi0KLSAgIEFzIG5vdGVkLCB5b3UgY2FuJ3Qg bWFrZSBhIGxpbmsgdG8gYSBub25leGlzdGVudCBhcnJheS4gU28gd2hlbiB3cml0aW5nCi0gICBh IG1hY3JvIHdob3NlIGpvYiBpcyB0byBjcmVhdGUgYW4gYXJyYXkgd2hvc2UgbmFtZSBpcyBwYXNz ZWQgYXMgYW4KLSAgIGFyZ3VtZW50LCB5b3UgbXVzdCBkZWNsYXJlIHRoZSBhcnJheSBmaXJzdCAo dGhlIHNpemUgZG9lc24ndCBtYXR0ZXIgYXMKLSAgIGxvbmcgYXMgaXQncyBncmVhdGVyIHRoYW4g MCkuIEV4YW1wbGU6Ci0KLSAgZGVmaW5lIHRyeW1lIHsgICAgICAgICAgICAgICAgOyBEZW1vbnN0 cmF0aW9uIG1hY3JvCi0gICAgICBsb2NhbCBcJmVbXSAgICAgICAgICAgICAgIDsgV2Ugb25seSBu ZWVkIHRoaXMgaW5zaWRlIHRoZSBtYWNybwotICAgICAgYXJyYXkgbGluayBcJmVbXSBcJTEgICAg ICA7IE1ha2UgbG9jYWwgbGluawotICAgICAgc2hpZnQgICAgICAgICAgICAgICAgICAgICA7IFNo aWZ0IGFyZ3VtZW50IGxpc3QKLSAgICAgIHZvaWQgXGZzcGxpdChcJSosJmUpICAgICAgOyBTcGxp dCByZW1haW5kZXIgb2YgYXJnIGxpc3QgaW50byBhcnJheQotICB9Ci0gIGRlY2xhcmUgXCZhWzFd ICAgICAgICAgICAgICAgIDsgRGVjbGFyZSB0YXJnZXQgYXJyYXkgaW4gYWR2YW5jZQotICB0cnlt ZSAmYSBoZXJlIGFyZSBzb21lIHdvcmRzICA7IEludm9rZSB0aGUgbWFjcm8gd2l0aCBhcnJheSBu YW1lIGFuZCB3b3JkcwotICBzaG93IGFycmF5IGEgICAgICAgICAgICAgICAgICA7IFNlZSB0aGUg cmVzdWx0cwotCi0gICBPbmUgZmluYWwgaW1wcm92ZW1lbnQgYWxsb3dzIHRoZSBtYWNybyBpdHNl bGYgdG8gZGVjbGFyZSB0aGUgYXJyYXkKLSAgICh0aGlzIHdhcyBub3QgcG9zc2libGUgaW4gZWFy bGllciBLZXJtaXQgcmVsZWFzZXMpOiBpZiB0aGUgYXJyYXkgbmFtZQotICAgaW4gdGhlIERFQ0xB UkUgY29tbWFuZCBpcyBhIHZhcmlhYmxlIChhbmQgbm90IGFuIGFycmF5IG5hbWUpLCBvcgotICAg aW5jbHVkZXMgdmFyaWFibGVzLCB0aGUgcmVzdWx0aW5nIHZhbHVlIGlzIHVzZWQgYXMgdGhlIGFy cmF5IG5hbWUuIFNvOgotCi0gIGRlZmluZSB0cnltZSB7ICAgICAgICAgICAgICAgIDsgRGVtb25z dHJhdGlvbiBtYWNybwotICAgICAgZGVjbGFyZSBcJTFbMV0gICAgICAgICAgICA7IFByZWxpbWlu YXJ5IGRlY2xhcmF0aW9uIGZvciB0YXJnZXQgYXJyYXkKLSAgICAgIGxvY2FsIFwmZVtdICAgICAg ICAgICAgICAgOyBXZSBvbmx5IG5lZWQgdGhpcyBpbnNpZGUgdGhlIG1hY3JvCi0gICAgICBhcnJh eSBsaW5rIFwmZVtdIFwlMSAgICAgIDsgTWFrZSBsb2NhbCBsaW5rCi0gICAgICBzaGlmdCAgICAg ICAgICAgICAgICAgICAgIDsgU2hpZnQgYXJndW1lbnQgbGlzdAotICAgICAgdm9pZCBcZnNwbGl0 KFwlKiwmZSkgICAgICA7IFNwbGl0IHJlbWFpbmRlciBvZiBhcmcgbGlzdCBpbnRvIGFycmF5Ci0g IH0KLSAgdHJ5bWUgJmEgaGVyZSBhcmUgc29tZSB3b3JkcyAgOyBJbnZva2UgdGhlIG1hY3JvIHdp dGggYXJyYXkgbmFtZSBhbmQgd29yZHMKLSAgc2hvdyBhcnJheSBhICAgICAgICAgICAgICAgICAg OyBTZWUgdGhlIHJlc3VsdHMKLQotICAgVGhlIFNIT1cgQVJSQVkgY29tbWFuZCBub3cgaW5kaWNh dGVzIHdoZXRoZXIgYW4gYXJyYXkgbmFtZSBpcyBhIGxpbmsuCi0KLSAgIEFsc28gc2VlIHRoZSBk ZXNjcmlwdGlvbnMgb2YgWzQyOF1cZmpvaW4oKSBhbmQgWzQyOV1cZnNwbGl0KCksIHBsdXMKLSAg IFs0MzBdU2VjdGlvbiA4LjEwIG9uIHRoZSBNSU5QVVQgY29tbWFuZCwgd2hpY2ggc2hvd3MgaG93 IGFuIGVudGlyZQotICAgYXJyYXkgKG9yIHNlZ21lbnQgb2YgaXQpIGNhbiBiZSB1c2VkIGFzIHRo ZSBNSU5QVVQgdGFyZ2V0IGxpc3QuCi0KLSAgIFsgWzQzMV1Ub3AgXSBbIFs0MzJdQ29udGVudHMg XSBbIFs0MzNdQy1LZXJtaXQgSG9tZSBdIFsgWzQzNF1LZXJtaXQKLSAgIEhvbWUgXQotCi04Ljcu IE5ldyBvciBJbXByb3ZlZCBCdWlsdC1pbiBWYXJpYWJsZXMgYW5kIEZ1bmN0aW9ucwotCi0gICBU aGUgZm9sbG93aW5nIG5ldyBidWlsdC1pbiB2YXJpYWJsZXMgYXJlIGF2YWlsYWJsZToKLQotICBc dihidWlsZGlkKSAgICAgICBBIGRhdGUgc3RyaW5nIGxpa2UgIjIwMDAwODA4IiBpbmRpY2F0aW5n IHdoZW4gQy1LZXJtaXQgd2FzIGIKLXVpbHQuCi0gIFx2KGZ0aW1lKSAgICAgICAgIEN1cnJlbnQg dGltZSwgc2VjcyBzaW5jZSBtaWRuaWdodCwgaW5jbHVkaW5nIGZyYWN0aW9uIG9mIHNlYwotb25k LgotICBcdihpcHJvbXB0KSAgICAgICBUaGUgY3VycmVudCBTRVQgUFJPTVBUIHZhbHVlCi0gIFx2 KHNleHApICAgICAgICAgIFRoZSBtb3N0IHJlY2VudCBTLUV4cHJlc3Npb24gKHNlZSBbNDM1XVNl Y3Rpb24gOSkKLSAgXHYoc2RlcHRoKSAgICAgICAgVGhlIGN1cnJlbnQgUy1FeHByZXNzaW9uIGlu dm9jYXRpb24gZGVwdGggKFs0MzZdU2VjdGlvbiA5KQotICBcdihzdmFsdWUpICAgICAgICBUaGUg dmFsdWUgb2YgdGhlIG1vc3QgcmVjZW50IFMtRXhwcmVzc2lvbiAoWzQzN11TZWN0aW9uIDkpCi0K LSAgXHYoZnRwX2NvZGUpICAgICAgTW9zdCByZWNlbnQgRlRQIHJlc3BvbnNlIGNvZGUgKFs0Mzhd U2VjdGlvbiAzKQotICBcdihmdHBfY29ubmVjdGVkKSBGVFAgY29ubmVjdGlvbiBzdGF0dXMgKFs0 MzldU2VjdGlvbiAzKQotICBcdihmdHBfY3BsKSAgICAgICBGVFAgQ29tbWFuZCBQcm90ZWN0aW9u IExldmVsIChbNDQwXVNlY3Rpb24gMy4yKQotICBcdihmdHBfZHBsKSAgICAgICBGVFAgRGF0YSBQ cm90ZWN0aW9uIExldmVsIChbNDQxXVNlY3Rpb24gMy4yKQotICBcdihmdHBfZ2V0cHV0cmVtb3Rl KSBUaGUgY3VycmVudCBTRVQgR0VULVBVVC1SRU1PVEUgc2V0dGluZyAoWzQ0Ml1TZWN0aW9uIDMu OCkKLQotICBcdihmdHBfaG9zdCkgICAgICBOYW1lIG9yIElQIGFkZHJlc3Mgb2YgRlRQIHNlcnZl ciAoWzQ0M11TZWN0aW9uIDMpCi0gIFx2KGZ0cF9sb2dnZWRpbikgIEZUUCBsb2dpbiBzdGF0dXMg KFs0NDRdU2VjdGlvbiAzKQotICBcdihmdHBfbWVzc2FnZSkgICBNb3N0IHJlY2VudCBGVFAgcmVz cG9uc2UgbWVzc2FnZSAoWzQ0NV1TZWN0aW9uIDMpCi0gIFx2KGZ0cF9zZWN1cml0eSkgIEZUUCBT ZWN1cml0eSBtZXRob2QgKFs0NDZdU2VjdGlvbiAzLjIpCi0gIFx2KGZ0cF9zZXJ2ZXIpICAgIE9T IHR5cGUgb2YgRlRQIHNlcnZlciAoWzQ0N11TZWN0aW9uIDMpCi0KLSAgXHYoaHR0cF9jb2RlKSAg ICAgICBNb3N0IHJlY2VudCBIVFRQIHJlc3BvbnNlIGNvZGUKLSAgXHYoaHR0cF9jb25uZWN0ZWQp ICBIVFRQIGNvbm5lY3Rpb24gc3RhdHVzCi0gIFx2KGh0dHBfaG9zdCkgICAgICAgTmFtZSBvciBJ UCBhZGRyZXNzIG9mIEhUVFAgc2VydmVyCi0gIFx2KGh0dHBfbWVzc2FnZSkgICAgTW9zdCByZWNl bnQgSFRUUCByZXNwb25zZSBtZXNzYWdlCi0gIFx2KGh0dHBfc2VjdXJpdHkpICAgVExTIGNpcGhl ciB1c2VkIHRvIHNlY3VyZSB0aGUgSFRUUCBzZXNzaW9uCi0KLSAgXHYoaG91cikgICAgICAgICAg ICBIb3VyIG9mIHRoZSBkYXksIDAgdG8gMjMuCi0gIFx2KHRpbWVzdGFtcCkgICAgICAgRXF1aXZh bGVudCB0byAiXHYobmRhdGUpIFx2KHRpbWUpIi4KLQotICBcdihsb2dfZGVidWcpICAgICAgIEN1 cnJlbnQgZGVidWcgbG9nIGZpbGUsIGlmIGFueS4KLSAgXHYobG9nX3BhY2tldCkgICAgICBDdXJy ZW50IHBhY2tldCBsb2cgZmlsZSwgaWYgYW55LgotICBcdihsb2dfc2Vzc2lvbikgICAgIEN1cnJl bnQgc2Vzc2lvbiBsb2cgZmlsZSwgaWYgYW55LgotICBcdihsb2dfdHJhbnNhY3Rpb24pIEN1cnJl bnQgdHJhbnNhY3Rpb24gbG9nIGZpbGUsIGlmIGFueS4KLSAgXHYobG9nX2Nvbm5lY3Rpb24pICBD dXJyZW50IGNvbm5lY3Rpb24gbG9nIGZpbGUsIGlmIGFueS4KLQotICAgVGhlIGZvbGxvd2luZyBu ZXcgb3IgaW1wcm92ZWQgYnVpbHQtaW4gZnVuY3Rpb25zIGFyZSBhdmFpbGFibGU6Ci0KLSAgXGZj bWRzdGFjaygpICAgICAgICAgICAgQWxsb3dzIHByb2dyYW1tYXRpYyBhY2Nlc3MgdG8gdGhlIGNv bW1hbmQgc3RhY2suCi0gIFxmY3Z0ZGF0ZSgpICAgICAgICAgICAgIFs0NDhdU2VjdGlvbiA4LjEz LCBmb3JtYXQgb3B0aW9ucyBhZGRlZAotICBcZmRlbHRhMnNlY3MoKSAgICAgICAgICBbNDQ5XVNl Y3Rpb24gOC4xMwotICBcZmRvc3RvdW5peHBhdGgoczEpICAgICBDb252ZXJ0cyBhIERPUyBmaWxl bmFtZSB0byBVbml4IGZvcm1hdC4KLSAgXGZzcGxpdCgpICAgICAgICAgICAgICAgTm93IGFsbG93 cyBncm91cGluZy9uZXN0aW5nIGluIHNvdXJjZSBzdHJpbmcuCi0gIFxmd29yZCgpICAgICAgICAg ICAgICAgIEFsbG93cyB0aGUgc2FtZSBncm91cGluZyBhbmQgbmVzdGluZy4KLSAgXGZqb2luKCZh LHMxLG4xLG4yKSAgICAgQ29waWVzIGFuIGFycmF5IGludG8gYSBzaW5nbGUgc3RyaW5nLgotICBc ZnN1YnN0aXR1dGUoczEsczIsczMpICBTdWJzdGl0dXRlcyBjaGFyYWN0ZXJzIHdpdGhpbiBhIHN0 cmluZy4KLSAgXGZyZXBsYWNlKCkgICAgICAgICAgICAgSGFzIG5ldyA0dGggIm9jY3VycmVuY2Ui IGFyZ3VtZW50LgotICBcZnNleHByZXNzaW9uKCkgICAgICAgICBFdmFsdWF0ZXMgYW4gUy1FeHBy ZXNzaW9uIChleHBsYWluZWQgaW4gWzQ1MF1TZWN0aW9uIDkKLSkuCi0gIFxmdHJpbSgpLCBcZmx0 cmltKCkgICAgIE5vdyB0cmltIENSIGFuZCBMRiBieSBkZWZhdWx0LCBhcyB3ZWxsIGFzIFNQIGFu ZCBUYWIuCi0gIFxmdW5peHRvZG9zcGF0aChzMSkgICAgIENvbnZlcnRzIGEgVW5peCBmaWxlbmFt ZSB0byBET1MgZm9ybWF0LgotICBcZmtleXdvcmR2YWwoczEsYzEpICAgICBBc3NpZ25zIHZhbHVl cyB0byBrZXl3b3JkcyAobWFjcm9zKSAoZXhwbGFpbmVkIGJlbG93KS4KLQotICAgTW9zdCBmdW5j dGlvbnMgdGhhdCBoYXZlICIyIiBpbiB0aGVpciBuYW1lcyB0byBzdGFuZCBmb3IgdGhlIHdvcmQg InRvIgotICAgY2FuIG5vdyBhbHNvIGJlIHdyaXR0ZW4gd2l0aCAidG8iLCBlLmcuICJcZmRlbHRh MnNlY3MoKSwiCi0gICBcZmRlbHRhdG9zZWNzKCkuIgotCi0gICBcZnVudGFiaWZ5KHN0cmluZykK LSAgICAgICAgICAoTmV3IHRvIDguMC4yMTEpIFJlcGxhY2VzIEhvcml6b250YWwgVGFiIGNoYXJh Y3RlcnMgaW4gdGhlIGdpdmVuCi0gICAgICAgICAgc3RyaW5nIHdpdGggc3BhY2VzIGJhc2VkIG9u IFZUMTAwLWxpa2UgdGFiIHN0b3BzLgotCi0gICBcZnZlcmlmeShzMSxzMixuKQotICAgICAgICAg IEFzIG9mIHZlcnNpb24gOC4wLjIxMSwgcmV0dXJucyAtMSBpZiBzMiBpcyBhbiBlbXB0eSBzdHJp bmcuCi0gICAgICAgICAgUHJldmlvdXNseSBpdCByZXR1cm5lZCAwLCBtYWtpbmcgXGZ2ZXJpZnko YWJjLFwlYSkgbG9vayBhcyBpZgotICAgICAgICAgIFwlYSB3YXMgYSBzdHJpbmcgY29tcG9zZWQg b2YgYSdzLCBiJ3MsIGFuZC9vciBjJ3Mgd2hlbiBpbiBmYWN0Ci0gICAgICAgICAgaXQgY29udGFp bmVkIG5vdGhpbmcuCi0KLSAgIFxmY29kZShzdHJpbmcpCi0gICAgICAgICAgQXMgb2YgdmVyc2lv biA4LjAuMjExLCByZXR1cm5zIDAgaWYgc3RyaW5nIGlzIGVtcHR5IG9yIG1pc3NpbmcuCi0gICAg ICAgICAgUHJldmlvdXNseSBpdCByZXR1cm5lZCB0aGUgZW1wdHkgc3RyaW5nLCB3aGljaCBtYWRl IGl0IHVuc2FmZSB0bwotICAgICAgICAgIHVzZSBpbiBhcml0aG1ldGljIG9yIGJvb2xlYW4gZXhw cmVzc2lvbnMuCi0KLSAgIFx2KGluc2NhbGUpCi0gICAgICAgICAgTmV3IHRvIHZlcnNpb24gOC4w LjIxMSwgaXRzIHZhbHVlIGlzIHRoZSBJTlBVVCBTQ0FMRS1GQUNUT1IKLSAgICAgICAgICAoWzQ1 MV1TZWN0aW9uIDguMTApLCBkZWZhdWx0IDEuMC4KLQotOC43LjEuIFRoZSBcZmtleXdvcmR2YWwo KSBGdW5jdGlvbgotCi0gICBcZmtleXdvcmR2YWwoczEsYzEpIGlzIG5ldyB0byBDLUtlcm1pdCA4 LjAuIEdpdmVuIGEgc3RyaW5nIHMxIG9mIHRoZQotICAgZm9ybSAibmFtZT12YWx1ZSIsIGl0IGNy ZWF0ZXMgYSBtYWNybyB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCBhc3NpZ25zCi0gICBpdCB0aGUg Z2l2ZW4gdmFsdWUuIElmIG5vIHZhbHVlIGFwcGVhcnMgYWZ0ZXIgdGhlIGVxdWFsIHNpZ24sIGFu eQotICAgZXhpc3RpbmcgbWFjcm8gb2YgdGhlIGdpdmVuIG5hbWUgaXMgdW5kZWZpbmVkLiBCbGFu a3MgYXJlIGF1dG9tYXRpY2FsbHkKLSAgIHRyaW1tZWQgZnJvbSBhcm91bmQgdGhlIG5hbWUgYW5k IHZhbHVlLiBUaGUgb3B0aW9uYWwgYzEgcGFyYW1ldGVyIGlzCi0gICB0aGUgYXNzaWdubWVudCBv cGVyYXRvciBjaGFyYWN0ZXIsIGVxdWFsIHNpZ24gKD0pIGJ5IGRlZmF1bHQuIFRoaXMKLSAgIGZ1 bmN0aW9uIGlzIGhhbmR5IGZvciBwcm9jZXNzaW5nIGtleXdvcmQgcGFyYW1ldGVycyBvciBhbnkg b3RoZXIgZm9ybQotICAgb2YgcGFyYW1ldGVyLXZhbHVlIHBhaXIuIFN1cHBvc2UsIGZvciBleGFt cGxlLCB5b3Ugd2FudCB0byB3cml0ZSBhCi0gICBtYWNybyB0aGF0IGFjY2VwdHMga2V5d29yZCBw YXJhbWV0ZXJzIHJhdGhlciB0aGFuIHBvc2l0aW9uYWwgb25lczoKLQotICBkZWZpbmUgTVlESUFM IHsKLSAgICAgIGxvY2FsIFwlaSBtb2RlbSBoYW5ndXAgbWV0aG9kIGRldmljZSBzcGVlZCBudW1i ZXIKLSAgICAgIGRlZiBudW1iZXIgNTU1MTIzNCAgICAgICAgICA7IEFzc2lnbiBkZWZhdWx0IHBh cmFtZXRlciB2YWx1ZXMKLSAgICAgIGRlZiBzcGVlZCA1NzYwMAotICAgICAgZGVmIG1vZGVtIHVz cm9ib3RpY3MKLSAgICAgIGRlZiBoYW5ndXAgcnMyMzIKLSAgICAgIGRlZiBtZXRob2QgdG9uZQot ICAgICAgZGVmIGNvdW50cnkgMQotICAgICAgZm9yIFwlaSAxIFx2KGFyZ2MpLTEgMSB7ICAgIDsg UGFyc2UgYW55IGtleXdvcmQgcGFyYW1ldGVycy4uLgotICAgICAgICAgIGlmIG5vdCBcZmtleXdv cmR2YWwoXCZfW1wlaV0pIGVuZCAxIEJhZCBwYXJhbWV0ZXI6ICJcJl9bXCVpXSIKLSAgICAgIH0K LSAgICAgIHNldCBkaWFsIGNvdW50cnkgXG0oY291bnRyeSkKLSAgICAgIHNldCBtb2RlbSB0eXBl IFxtKG1vZGVtKQotICAgICAgc2V0IG1vZGVtIGhhbmcgXG0oaGFuZ3VwKQotICAgICAgc2V0IGRp YWwgbWV0aG9kIFxtKHRvbmUpCi0gICAgICBzZXQgbGluZSBcbShkZXZpY2UpCi0gICAgICBpZiBm YWlsIHN0b3AgMQotICAgICAgc2V0IHNwZWVkIFxtKHNwZWVkKQotICAgICAgaWYgZmFpbCBzdG9w IDEKLSAgICAgIHNob3cgY29tbQotICAgICAgc2V0IGRpYWwgZGlzcGxheSBvbgotICAgICAgZGlh bCBcbShudW1iZXIpCi0gICAgICBpZiBzdWNjZXNzIGNvbm5lY3QKLSAgfQotCi0gICBJbiB0aGlz IGV4YW1wbGUsIGFsbCB0aGUgZGVmYXVsdHMgYXJlIHNldCB1cCBpbnNpZGUgdGhlIG1hY3JvLCBh bmQKLSAgIHRoZXJlZm9yZSBpdCBjYW4gYmUgaW52b2tlZCB3aXRoIG5vIHBhcmFtZXRlcnMgYXQg YWxsLiBCdXQgaWYgeW91IHdhbnQKLSAgIHRvIGhhdmUgdGhlIG1hY3JvIGRpYWwgYSBkaWZmZXJl bnQgbnVtYmVyLCB5b3UgY2FuIHN1cHBseSBpdCBhcwotICAgZm9sbG93czoKLQotICBteWRpYWwg bnVtYmVyPTc2NTQzMjEKLQotICAgWW91IGNhbiBzdXBwbHkgYW55IG51bWJlciBvZiBrZXl3b3Jk IHBhcmFtZXRlcnMsIGFuZCB5b3UgY2FuIGdpdmUgdGhlbQotICAgaW4gYW55IG9yZGVyOgotCi0g IG15ZGlhbCBudW1iZXI9NzY1NDMyMSBoYW5ndXA9bW9kZW0gc3BlZWQ9MTE1MjAwCi0KLTguNy4y LiBUaGUgXGZzcGxpdCgpLCBcZmpvaW4oKSwgYW5kIFxmd29yZCgpIEZ1bmN0aW9ucwotCi0gICBc ZmpvaW4oJmEsczEsbjEsbjIpIGlzIGFsc28gbmV3OyBpdCBjcmVhdGVzIGEgc3RyaW5nIGZyb20g YW4gYXJyYXkgKG9yCi0gICBhIHBpZWNlIG9mIG9uZSkuICZhIGlzIHRoZSBuYW1lIG9mIHRoZSBh cnJheSAoYSByYW5nZSBzcGVjaWZpZXIgY2FuIGJlCi0gICBpbmNsdWRlZCk7IHMxIGlzIGEgY2hh cmFjdGVyIG9yIHN0cmluZyB0byBzZXBhcmF0ZSBlYWNoIGVsZW1lbnQgaW4gdGhlCi0gICByZXN1 bHQgc3RyaW5nIChjYW4gYmUgb21pdHRlZCwgaW4gd2hpY2ggY2FzZSB0aGUgZWxlbWVudHMgYXJl IG5vdAotICAgc2VwYXJhdGVkIGF0IGFsbCksIGFuZCBuMSBpcyBhIGdyb3VwaW5nIG1hc2ssIGV4 cGxhaW5lZCBiZWxvdy4gSWYgczEgaXMKLSAgIGVtcHR5IG9yIG5vdCBzcGVjaWZpZWQsIHRoZSBh cnJheSBlbGVtZW50cyBhcmUgc2VwYXJhdGVkIHdpdGggc3BhY2VzLgotICAgSWYgeW91IHdhbnQg dGhlIGVsZW1lbnRzIGNvbmNhdGVuYXRlZCB3aXRoIG5vIHNlcGFyYXRvciwgaW5jbHVkZSBhCi0g ICBub256ZXJvIG4yIGFyZ3VtZW50LiBHaXZlbiB0aGUgYXJyYXk6Ci0KLSAgZGVjbGFyZSBcJmFb XSA9IDAgMSAyIDMgNCA1IDYgNyA4IDkKLQotICAgeW91IGNhbiBnZXQgZWZmZWN0cyBsaWtlIHRo aXM6Ci0KLSAgXGZqb2luKCZhKSAgICAgIDAgMSAyIDMgNCA1IDYgNyA4IDkKLSAgXGZqb2luKCZh LDopICAgIDA6MToyOjM6NDo1OjY6Nzo4OjkKLSAgXGZqb2luKCZhLHssfSkgIDAsMSwyLDMsNCw1 LDYsNyw4LDkKLSAgXGZqb2luKCZhLC4uLikgIDAuLi4xLi4uMi4uLjMuLi40Li4uNS4uLjYuLi43 Li4uOC4uLjkKLSAgXGZqb2luKCZhLCwsMSkgIDAxMjM0NTY3ODkKLQotICAgXGZzcGxpdCgpLCBc ZndvcmQoKSwgXGZzdHJpcGIoKSwgYW5kIFxmam9pbigpIGFjY2VwdCBhICJncm91cGluZyBtYXNr IgotICAgYXJndW1lbnQsIG4xLCB3aGljaCBpcyBhIG51bWJlciBmcm9tIDAgdG8gNjMsIGluIHdo aWNoOgotCi0gICAxID0gIiIgZG91YmxlcXVvdGVzCi0gICAyID0ge30gYnJhY2VzCi0gICA0ID0g Jycgc2luZ2xlcXVvdGVzCi0gICA4ID0gKCkgcGFyZW50aGVzZXMKLSAgMTYgPSBbXSBzcXVhcmUg YnJhY2tldHMKLSAgMzIgPSA8PiBhbmdsZSBicmFja2V0cwotCi0gICBUaGVzZSBjYW4gYmUgT1In ZCAoYWRkZWQpIHRvZ2V0aGVyIHRvIG1ha2UgYW55IG51bWJlciAwLTYzICgtMSBpcwotICAgdHJl YXRlZCB0aGUgc2FtZSBhcyA2MywgMCBtZWFucyBubyBncm91cGluZykuIElmIGEgYml0IGlzIG9u LCB0aGUKLSAgIGNvcnJlc3BvbmRpbmcga2luZCBvZiBncm91cGluZyBpcyBzZWxlY3RlZC4gKElm IG1vcmUgdGhhbiAxIGJpdCBpcyBzZXQKLSAgIGZvciBcZmpvaW4oKSwgb25seSB0aGUgbG93ZXN0 LW9yZGVyIG9uZSBpcyB1c2VkLikKLQotICAgSWYgeW91IGluY2x1ZGUgdGhlIHNhbWUgY2hhcmFj dGVyIGluIHRoZSBncm91cGluZyBtYXNrIGFuZCB0aGUgaW5jbHVkZQotICAgbGlzdCwgdGhlIGdy b3VwaW5nIG1hc2sgdGFrZXMgcHJlY2VkZW5jZS4gRXhhbXBsZToKLQotICBkZWYgXCVhICBhICJi IGMgZCIgZQotICBcZnNwbGl0KFwlYSwmYVtdLCwsLTEpICA9IDMgIDwtLSBkb3VibGVxdW90ZSB1 c2VkIGZvciBncm91cGluZwotICBcZnNwbGl0KFwlYSwmYVtdLCwiLC0xKSA9IDMgIDwtLSBkb3Vi bGVxdW90ZSBzdGlsbCB1c2VkIGZvciBncm91cGluZwotCi0gICBOZXN0aW5nIG9mIG1hdGNoZWQg bGVmdCBhbmQgcmlnaHQgZ3JvdXBpbmcgY2hhcmFjdGVycyAocGFyZW50aGVzZXMsCi0gICBicmFj ZXMsIGFuZCBicmFja2V0cywgYnV0IG5vdCBxdW90ZXMpIGlzIHJlY29nbml6ZWQuIEV4YW1wbGU6 Ci0KLSAgZGVmIFwlYSBhIChiIGMgPGQgZSBbZiBnIHtoIGl9IGoga10gbCBtPiBuIG8pIHAKLSAg XGZzcGxpdChcJWEsJmEsLCwwKSAgPSAxNiAobm8gZ3JvdXBpbmcpCi0gIFxmc3BsaXQoXCVhLCZh LCwsMikgID0gMTUgKGJyYWNlcyBvbmx5KQotICBcZnNwbGl0KFwlYSwmYSwsLDE2KSA9IDExIChz cXVhcmUgYnJhY2tldHMgb25seSkKLSAgXGZzcGxpdChcJWEsJmEsLCwzMikgPSAgNyAoYW5nbGUg YnJhY2tldHMgb25seSkKLSAgXGZzcGxpdChcJWEsJmEsLCw2MykgPSAgMyAoYWxsKQotICBcZnNw bGl0KFwlYSwmYSwsLC0xKSA9ICAzIChhbGwpCi0KLSAgIFxmc3BsaXQoKSBhbmQgXGZqb2luKCkg YXJlICJyZWNpcHJvY2FsIiBmdW5jdGlvbnMuIFlvdSBjYW4gc3BsaXQgYQotICAgc3RyaW5nIHVw IGludG8gYW4gYXJyYXkgYW5kIGpvaW4gaXQgYmFjayBpbnRvIGEgbmV3IHN0cmluZyB0aGF0IGlz Ci0gICBlcXVpdmFsZW50LCBhcyBsb25nIGFzIFxmc3BsaXQoKSBhbmQgXGZqb2luKCkgYXJlIGdp dmVuIGVxdWl2YWxlbnQKLSAgIGdyb3VwaW5nIG1hc2tzLCBleGNlcHQgdGhhdCB0aGUgdHlwZSBv ZiBicmFjZXMgbWlnaHQgY2hhbmdlLiBFeGFtcGxlOgotCi0gIGRlZiBcJWEgYSB7YiBjIFtkIGVd IGYgZ30gImggaSIgaiA8ayBsPiBtCi0gIGVjaG8gU1RSSU5HPVtcJWFdCi0gIGVjaG8gV09SRFM9 XGZzcGxpdChcJWEsJmEsLCwtMSkKLSAgc2hvdyBhcnJheSBhCi0gIGFzZyBcJWIgXGZqb2luKCZh LHsgfSwyKQotICBlY2hvIEpPSU4gID1bXCViXQotICBlY2hvIFdPUkRTPVxmc3BsaXQoXCViLCZi LCwsLTEpCi0gIHNob3cgYXJyYXkgYgotCi0gICBUaGUgYXJyYXlzIGEgYW5kIGIgYXJlIGlkZW50 aWNhbC4gVGhlIHN0cmluZ3MgYSBhbmQgYiBhcmUgYXMgZm9sbG93czoKLQotICBcJWE6IGEge2Ig YyBbZCBlXSBmIGd9ICJoIGkiIGogPGsgbD4gbQotICBcJWI6IGEge2IgYyBbZCBlXSBmIGd9IHto IGl9IGoge2sgbH0gbQotCi0gICBJdCBpcyBwb3NzaWJsZSB0byBxdW90ZSBzZXBhcmF0b3IgZ3Jv dXBpbmcgY2hhcmFjdGVycyB3aXRoIGJhY2tzbGFzaCB0bwotICAgb3ZlcnJpZGUgdGhlaXIgZ3Jv dXBpbmcgZnVuY3Rpb24uIEFuZCBvZiBjb3Vyc2UgdG8gaW5jbHVkZSBiYWNrc2xhc2gKLSAgIGl0 c2VsZiBpbiB0aGUgc3RyaW5nLCBpdCBtdXN0IGJlIHF1b3RlZCB0b28uIEZ1cnRoZXJtb3JlLCBl YWNoCi0gICBiYWNrc2xhc2ggbXVzdCBiZSBkb3VibGVkLCBzbyB0aGUgY29tbWFuZCBwYXJzZXIg d2lsbCBzdGlsbCBwYXNzIG9uZQotICAgYmFja3NsYXNoIHRvIFxmc3BsaXQoKSBmb3IgZWFjaCB0 d28gdGhhdCBpdCBzZWVzLiBIZXJlIGFyZSBzb21lCi0gICBleGFtcGxlcyB1c2luZyBcZnNwbGl0 KCkgd2l0aCBhIGdyb3VwaW5nIG1hc2sgb2YgOCAodHJlYXQgcGFyZW50aGVzZXMKLSAgIGFzIGdy b3VwaW5nIGNoYXJhY3RlcnMpLgotCi0gIFN0cmluZyAgICAgICAgICAgICAgICAgIFJlc3VsdAot ICAgIGEgYiBjIGQgZSBmICAgICAgICAgICAgIDYKLSAgICBhIGJcXCBjIGQgZSBmICAgICAgICAg ICA1Ci0gICAgYSBiIChjIGQgZSkgZiAgICAgICAgICAgNAotICAgIGEgYiBcXChjIGQgZVxcKSBm ICAgICAgIDYKLSAgICBhIGIgXFxcXChjIGQgZVxcXFwpIGYgICA3Ci0KLSAgIFxmc3BsaXQoKSBo YXMgYWxzbyBiZWVuIGNoYW5nZWQgdG8gY3JlYXRlIGl0cyBhcnJheSAoaWYgb25lIGlzIGdpdmVu KQotICAgZWFjaCB0aW1lIGl0IGlzIGNhbGxlZCwgc28gbm93IGl0IGNhbiBiZSBjb252ZW5pZW50 bHkgY2FsbGVkIGluIGEgbG9vcAotICAgd2l0aG91dCBoYXZpbmcgdG8gcmVkZWNsYXJlIHRoZSBh cnJheSBlYWNoIHRpbWUuCi0KLSAgIEluY2lkZW50YWxseS4uLiBTb21ldGltZXMgeW91IG1pZ2h0 IHdhbnQgdG8gaW52b2tlIFxmc3BsaXQoKSBpbiBhCi0gICBzaXR1YXRpb24gd2hlcmUgeW91IGRv bid0IGNhcmUgYWJvdXQgaXRzIHJldHVybiB2YWx1ZSwgZS5nLiB3aGVuIHlvdQotICAganVzdCB3 YW50IHRvIGZpbGwgdGhlIGFycmF5LiBOb3cgeW91IGNhbiAiY2FsbCIgXGZzcGxpdCgpIG9yIGFu eSBvdGhlcgotICAgZnVuY3Rpb24gd2l0aCB0aGUgbmV3IFs0NTJdVk9JRCBjb21tYW5kOgotCi0g IHZvaWQgXGZzcGxpdChcJWEsJmEpCi0KLSAgIFxmc3BsaXQoKSBhbmQgXGZqb2luKCkgYWxzbyBh Y2NlcHQgYSBuZXcsIG9wdGlvbmFsIDZ0aCBhcmd1bWVudCwgYW4KLSAgIG9wdGlvbnMgZmxhZywg YSBudW1iZXIgdGhhdCBjYW4gc3BlY2lmeSBhIG51bWJlciBvZiBvcHRpb25zLiBTbyBmYXIKLSAg IHRoZXJlIGlzIGp1c3Qgb25lIG9wdGlvbiwgd2hvc2UgdmFsdWUgaXMgMToKLQotICAgc2VwYXJh dG9yLWZsYWcKLSAgICAgICAgICBOb3JtYWxseSBzZXBhcmF0b3JzIGFyZSBjb2xsYXBzZWQuIFNv LCBmb3IgZXhhbXBsZSwKLQotICBcZndvcmQoVGhyZWUgICAgICAgIGxpdHRsZSAgICAgICAgICB3 b3JkcywyKQotCi0gICAgICAgICAgcmV0dXJucyAibGl0dGxlIiAodGhlIHNlY29uZCB3b3JkKS4g U3BhY2UgaXMgYSBzZXBhcmF0b3IsIGJ1dAotICAgICAgICAgIHRoZXJlIGFyZSBtdWx0aXBsZSBz cGFjZXMgYmV0d2VlbiBlYWNoIHdvcmQuIElmIHRoZSB2YWx1ZSAxIGlzCi0gICAgICAgICAgaW5j bHVkZWQgaW4gdGhlIG9wdGlvbiBmbGFnLCBob3dldmVyLCBlYWNoIHNlcGFyYXRvciBjb3VudHMu IElmCi0gICAgICAgICAgdHdvIHNlcGFyYXRvcnMgYXJlIGFkamFjZW50LCBhbiBlbXB0eSB3b3Jk IGlzIHByb2R1Y2VkIGJldHdlZW4KLSAgICAgICAgICB0aGVtLiBUaGlzIGlzIHVzZWZ1bCBmb3Ig cGFyc2luZyAoZS5nLikgY29tbWEtc2VwYXJhdGVkIGxpc3RzCi0gICAgICAgICAgZXhwb3J0ZWQg ZnJvbSBkYXRhYmFzZXMgb3Igc3ByZWFkc2hlZXRzLgotCi04LjcuMy4gVGhlIFxmY21kc3RhY2so KSBGdW5jdGlvbgotCi0gICBUaGUgbmV3IFxmY21kc3RhY2soKSBmdW5jdGlvbiBnaXZlcyBhY2Nl c3MgdG8gdGhlIGNvbW1hbmQgc3RhY2s6Ci0KLSAgIFxmY21kc3RhY2sobjEsbjIpCi0gICAgICAg ICAgQXJndW1lbnRzOiBuMSBpcyB0aGUgY29tbWFuZCBzdGFjayBsZXZlbC4gSWYgb21pdHRlZCwg dGhlCi0gICAgICAgICAgY3VycmVudCBsZXZlbCwgXHYoY21kbGV2ZWwpLCBpcyB1c2VkLiBuMiBp cyBhIGZ1bmN0aW9uIGNvZGUKLSAgICAgICAgICBzcGVjaWZ5aW5nIHRoZSBkZXNpcmVkIHR5cGUg b2YgaW5mb3JtYXRpb246Ci0KLSAgMCAoZGVmYXVsdCkgPSBuYW1lIG9mIG9iamVjdCBhdCBsZXZl bCBuMS4KLSAgMSAobm9uemVybykgPSBvYmplY3QgdHlwZSAoMCA9IHByb21wdDsgMSA9IGNvbW1h bmQgZmlsZTsgMiA9IG1hY3JvKS4KLQotICAgICAgICAgIFRoZSBkZWZhdWx0IGZvciBuMiBpcyAw LgotCi0gICBUaGUgbmFtZSBhc3NvY2lhdGVkIHdpdGggcHJvbXB0IGlzICIocHJvbXB0KSIuIEhl cmUncyBhIGxvb3AgdGhhdCBjYW4KLSAgIGJlIGluY2x1ZGVkIGluIGEgbWFjcm8gb3IgY29tbWFu ZCBmaWxlIHRvIHNob3cgdGhlIHN0YWNrIChzaW1pbGFyIHRvCi0gICB3aGF0IHRoZSBTSE9XIFNU QUNLIGNvbW1hbmQgZG9lcyk6Ci0KLSAgZm9yIFwlaSBcdihjbWRsZXZlbCkgMCAtMSB7Ci0gICAg ICBlY2hvIFwlaS4gW1xmY21kc3RhY2soXCVpLDEpXSBcZmNtZHN0YWNrKFwlaSwwKQotICB9Ci0K LSAgIEluIHRoaXMgY29ubmVjdGlvbiwgbm90ZSB0aGF0IFx2KGNtZGZpbGUpIGFsd2F5cyBpbmRp Y2F0ZXMgdGhlIG1vc3QKLSAgIHJlY2VudGx5IGludm9rZWQgYWN0aXZlIGNvbW1hbmQgZmlsZSAo aWYgYW55KSwgZXZlbiBpZiB0aGF0IGZpbGUgaXMKLSAgIGV4ZWN1dGluZyBhIG1hY3JvLiBTaW1p bGFybHksIFx2KG1hY3JvKSBpbmRpY2F0ZXMgdGhlIG1vc3QgcmVjZW50bHkKLSAgIGludm9rZWQg bWFjcm8gKGlmIGFueSksIGV2ZW4gaWYgdGhlIGN1cnJlbnQgY29tbWFuZCBzb3VyY2UgaXMgbm90 IGEKLSAgIG1hY3JvLiBUaGUgbmFtZSBvZiB0aGUgImNhbGxlciIgb2YgdGhlIGN1cnJlbnRseSBl eGVjdXRpbmcgb2JqZWN0Ci0gICAoY29tbWFuZCBmaWxlIG9yIG1hY3JvKSBpczoKLQotICBcZmNt ZHN0YWNrKFx2KGNtZGxldmVsKS0xKQotCi0gICBhbmQgaXRzIHR5cGUgaXM6Ci0KLSAgXGZjbWRz dGFjayhcdihjbWRsZXZlbCktMSwxKQotCi0gICBUbyBmaW5kIHRoZSBuYW1lIG9mIHRoZSBtYWNy byB0aGF0IGludm9rZWQgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcKLSAgIG9iamVjdCwgZXZlbiBp ZiBvbmUgb3IgbW9yZSBpbnRlcm1lZGlhdGUgY29tbWFuZCBmaWxlcyAob3IgcHJvbXB0aW5nCi0g ICBsZXZlbHMpIGFyZSBpbnZvbHZlZCwgdXNlIGEgbG9vcCBsaWtlIHRoaXM6Ci0KLSAgZm9yIFwl aSBcdihjbWRsZXZlbCktMSAwIC0xIHsKLSAgICAgIGlmID0gXGZjbWRzdGFjayhcJWksMSkgMiBl Y2hvIENBTExFUiA9IFxmY21kc3RhY2soXCVpLDApCi0gIH0KLQotICAgT2YgY291cnNlIGlmIHlv dSBtYWtlIGEgbWFjcm8gdG8gZG8gdGhpcywgdGhlIG1hY3JvIG11c3QgYWNjb3VudCBmb3IKLSAg IGl0cyBvd24gYWRkaXRpb25hbCBsZXZlbDoKLQotICBkZWZpbmUgQ0FMTEVSIHsKLSAgICAgIGZv ciBcJWkgXHYoY21kbGV2ZWwpLTIgMCAtMSB7Ci0gICAgICAgICAgaWYgPSBcZmNtZHN0YWNrKFwl aSwxKSAyIHJldHVybiBcZmNtZHN0YWNrKFwlaSwwKQotICAgICAgfQotICAgICAgcmV0dXJuICIo bm9uZSkiCi0gIH0KLQotICAgVGhlIGJ1aWx0LWluIHZhcmlhYmxlIFx2KGNtZHNvdXJjZSkgZ2l2 ZXMgdGhlIGN1cnJlbnQgY29tbWFuZCBzb3VyY2UgYXMKLSAgIGEgd29yZCAoInByb21wdCIsICJm aWxlIiwgb3IgIm1hY3JvIikuCi0KLTguNy40LiBUaGUgVk9JRCBDb21tYW5kCi0KLSAgIFZPSUQg aXMgbGlrZSBFQ0hPIGluIHRoYXQgYWxsIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGluIGl0cyBh cmd1bWVudAotICAgdGV4dCBhcmUgZXZhbHVhdGVkLiBidXQgaXQgZG9lc24ndCBwcmludCBhbnl0 aGluZyAoZXhjZXB0IHBvc3NpYmx5IGFuCi0gICBlcnJvciBtZXNzYWdlIGlmIGEgZnVuY3Rpb24g d2FzIGludm9jYXRpb24gY29udGFpbmVkIG9yIHJlc3VsdGVkIGluIGFueQotICAgZXJyb3JzKS4g Vk9JRCBzZXRzIEZBSUxVUkUgaWYgaXQgZW5jb3VudGVycyBhbnkgZXJyb3JzLCBTVUNDRVNTCi0g ICBvdGhlcndpc2UuCi0KLSAgIFsgWzQ1M11Ub3AgXSBbIFs0NTRdQ29udGVudHMgXSBbIFs0NTVd Qy1LZXJtaXQgSG9tZSBdIFsgWzQ1Nl1LZXJtaXQKLSAgIEhvbWUgXQotCi04LjguIFRoZSBSRVRV Uk4gYW5kIEVORCBDb21tYW5kcwotCi0gICBUaGUgZXhlY3V0aW9uIG9mIGEgbWFjcm8gaXMgdGVy bWluYXRlZCBpbiBhbnkgb2YgdGhlIGZvbGxvd2luZyB3YXlzOgotCi0gICAgICogV2l0aCBhbiBF TkQgWyBudW1iZXIgWyBtZXNzYWdlIF0gXSBjb21tYW5kLiBJZiBhIG51bWJlciBpcyBnaXZlbiwK LSAgICAgICB0aGUgbWFjcm8gc3VjY2VlZHMgaWYgdGhlIG51bWJlciBpcyAwLCBhbmQgZmFpbHMg aWYgaXQgaXMgbm90IHplcm87Ci0gICAgICAgaWYgYSBudW1iZXIgaXMgbm90IGdpdmVuLCB0aGUg bWFjcm8gc3VjY2VlZHMuCi0gICAgICogV2l0aCBhIFNUT1AgY29tbWFuZCwgd2hpY2ggd29ya3Mg anVzdCBsaWtlIEVORCBleGNlcHQgaXQgcGVlbHMgYmFjawotICAgICAgIHRoZSBjb21tYW5kIHN0 YWNrIGFsbCB0aGUgd2F5IHRvIHRvcCBsZXZlbC4KLSAgICAgKiBXaXRoIGEgUkVUVVJOIFsgdGV4 dCBdIGNvbW1hbmQsIGluIHdoaWNoIGNhc2UgdGhlIG1hY3JvIGFsd2F5cwotICAgICAgIHN1Y2Nl ZWRzLgotICAgICAqIEJ5IHJ1bm5pbmcgb3V0IG9mIGNvbW1hbmRzIHRvIGV4ZWN1dGUsIGluIHdo aWNoIGNhc2UgdGhlIG1hY3JvCi0gICAgICAgc3VjY2VlZHMgb3IgZmFpbHMgYWNjb3JkaW5nIHRo ZSBtb3N0IHJlY2VudGx5IGV4ZWN1dGVkIGNvbW1hbmQgdGhhdAotICAgICAgIHNldHMgc3VjY2Vz cyBvciBmYWlsdXJlLgotCi0gICBUaGUgc2FtZSBjb25zaWRlcmF0aW9ucyBhcHBseSB0byBjb21t YW5kIGZpbGVzIGludm9rZWQgYnkgdGhlIFRBS0UKLSAgIGNvbW1hbmQuCi0KLSAgIElmIGEgbWFj cm8gZG9lcyBub3QgZXhlY3V0ZSBhbnkgY29tbWFuZHMgdGhhdCBzZXQgc3VjY2VzcyBvciBmYWls dXJlLAotICAgdGhlbiBpbnZva2luZyB0aGUgbWFjcm8gZG9lcyBub3QgY2hhbmdlIHRoZSBjdXJy ZW50IFNVQ0NFU1MvRkFJTFVSRQotICAgc3RhdHVzLiBJdCBmb2xsb3dzLCB0aGVuLCB0aGF0IHRo ZSBtZXJlIGludm9jYXRpb24gb2YgYSBtYWNybyBkb2VzIG5vdAotICAgY2hhbmdlIHRoZSBTVUND RVNTL0ZBSUxVUkUgc3RhdHVzIGVpdGhlci4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0bwotICAg d3JpdGUgbWFjcm9zIHRvIHJlYWN0IHRvIHRoZSBzdGF0dXMgb2Ygb3RoZXIgY29tbWFuZHMgKG9y IG1hY3JvcyksIGZvcgotICAgZXhhbXBsZToKLQotICBkZWZpbmUgQ0hLTElORSB7Ci0gICAgICBp ZiBzdWNjZXNzIGVuZCAwCi0gICAgICBzdG9wIDEgU0VUIExJTkUgZmFpbGVkIC0gcGxlYXNlIHRy eSBhbm90aGVyIGRldmljZS4KLSAgfQotICBzZXQgbW9kZW0gdHlwZSB1c3JvYm90aWNzCi0gIHNl dCBsaW5lIC9kZXYvY3VhMAotICBjaGtsaW5lCi0gIHNldCBzcGVlZCA1NzYwMAotICBkaWFsIDc2 NTQzMjEKLQotICAgQnkgdGhlIHdheSwgbm9uZSBvZiB0aGlzIGlzIG5ld3MuIEJ1dCBpdCB3YXMg bm90IGV4cGxpY2l0bHkgZG9jdW1lbnRlZAotICAgYmVmb3JlLCBhbmQgQy1LZXJtaXQgNy4wIGFu ZCBlYXJsaWVyIGRpZCBub3QgYWx3YXlzIGhhbmRsZSB0aGUgUkVUVVJOCi0gICBzdGF0ZW1lbnQg YXMgaXQgc2hvdWxkIGhhdmUuCi0KLSAgIFsgWzQ1N11Ub3AgXSBbIFs0NThdQ29udGVudHMgXSBb IFs0NTldQy1LZXJtaXQgSG9tZSBdIFsgWzQ2MF1LZXJtaXQKLSAgIEhvbWUgXQotCi04LjkuIFVO REVGSU5pbmcgR3JvdXBzIG9mIFZhcmlhYmxlcwotCi0gICBUaGUgVU5ERUZJTkUgY29tbWFuZCwg d2hpY2ggcHJldmlvdXNseSBhY2NlcHRlZCBvbmUgdmFyaWFibGUgbmFtZSwgbm93Ci0gICBhY2Nl cHRzIGEgbGlzdCBvZiB0aGVtLCBhbmQgYWxzbyBhY2NlcHRzIHdpbGRjYXJkIG5vdGF0aW9uIHRv IGFsbG93Ci0gICBkZWxldGlvbiBvZiB2YXJpYWJsZXMgdGhhdCBtYXRjaCBhIGdpdmVuIHBhdHRl cm4uCi0KLSAgIFVOREVGSU5FIFsgc3dpdGNoZXMgXSBuYW1lIFsgbmFtZSBbIG5hbWUgWyAuLi4g XSBdIF0KLSAgICAgICAgICBVbmRlZmluZXMgdGhlIHZhcmlhYmxlcyB3aG9zZSBuYW1lcyBhcmUg Z2l2ZW4uIFVwIHRvIDY0IG5hbWVzCi0gICAgICAgICAgbWF5IGJlIGdpdmVuIGluIG9uZSBVTkRF RklORSBjb21tYW5kLgotCi0gICBJZiB5b3Ugb21pdCB0aGUgc3dpdGNoZXMgYW5kIGluY2x1ZGUg b25seSBvbmUgbmFtZSwgdGhlIFVOREVGSU5FCi0gICBjb21tYW5kIHdvcmtzIGFzIGJlZm9yZS4K LQotICAgU3dpdGNoZXMgaW5jbHVkZToKLQotICAgL01BVENISU5HCi0gICAgICAgICAgU3BlY2lm aWVzIHRoYXQgdGhlIG5hbWVzIGdpdmVuIGFyZSB0byB0cmVhdGVkIGFzIHBhdHRlcm5zIHJhdGhl cgotICAgICAgICAgIHRoYW4gbGl0ZXJhbCB2YXJpYWJsZSBuYW1lcy4gTm90ZTogcGF0dGVybiBt YXRjaGluZyBjYW4ndCBiZQotICAgICAgICAgIHVzZWQgd2l0aCBhcnJheSByZWZlcmVuY2VzOyB1 c2UgdGhlIEFSUkFZIGNvbW1hbmQgdG8gbWFuaXB1bGF0ZQotICAgICAgICAgIGFycmF5cyBhbmQg c3ViYXJyYXlzLgotCi0gICAvTElTVAotICAgICAgICAgIExpc3QgdGhlIG5hbWUgb2YgZWFjaCB2 YXJpYWJsZSB0byBiZSB1bmRlZmluZWQsIGFuZCB3aGV0aGVyIGl0Ci0gICAgICAgICAgd2FzIHVu ZGVmaW5lZCBzdWNjZXNzZnVsbHkgKCJvayIgb3IgImVycm9yIiksIHBsdXMgYSBzdW1tYXJ5Ci0g ICAgICAgICAgY291bnQgYXQgdGhlIGVuZC4KLQotICAgL1NJTVVMQVRFCi0gICAgICAgICAgTGlz dCB0aGUgbmFtZXMgb2YgdGhlIHZhcmlhYmxlcyB0aGF0IHdvdWxkIGJlIGRlbGV0ZWQgd2l0aG91 dAotICAgICAgICAgIGFjdHVhbGx5IGRlbGV0aW5nIHRoZW0uIEltcGxpZXMgL0xJU1QuCi0KLSAg IFRoZSBVTkRFRklORSBjb21tYW5kIGZhaWxzIGlmIHRoZXJlIHdlcmUgYW55IGVycm9ycyBhbmQg c3VjY2VlZHMKLSAgIG90aGVyd2lzZS4KLQotICAgVGhlIG5ldyBfVU5ERUZJTkUgY29tbWFuZCBp cyBsaWtlIFVOREVGSU5FLCBleGNlcHQgdGhlIG5hbWVzIGFyZQotICAgYXNzdW1lZCB0byBiZSB2 YXJpYWJsZSBuYW1lcyB0aGVtc2VsdmVzLCB3aGljaCBjb250YWluIHRoZSBuYW1lcyAob3IKLSAg IHBhcnRzIG9mIHRoZW0pIG9mIHRoZSB2YXJpYWJsZXMgdG8gYmUgdW5kZWZpbmVkLiBGb3IgZXhh bXBsZSwgaWYgeW91Ci0gICBoYXZlIHRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnM6Ci0KLSAgZGVm aW5lIFwlYSBmb28KLSAgZGVmaW5lIGZvbyBUaGlzIGlzIHNvbWUgdGV4dAotCi0gICB0aGVuOgot Ci0gIHVuZGVmIFwlYQotCi0gICB1bmRlZmluZXMgdGhlIHZhcmlhYmxlIFwlYSwgYnV0OgotCi0g IF91bmRlZiBcJWEKLQotICAgdW5kZWZpbmVzIHRoZSBtYWNybyBmb28uCi0KLSAgIE5vcm1hbCBL ZXJtaXQgcGF0dGVybnMgYXJlIHVzZWQgZm9yIG1hdGNoaW5nOyBtZXRhY2hhcmFjdGVycyBpbmNs dWRlCi0gICBhc3RlcmlzaywgcXVlc3Rpb24gbWFyaywgYnJhY2VzLCBhbmQgc3F1YXJlIGJyYWNr ZXRzLiBUaHVzLCB3aGVuIHVzaW5nCi0gICB0aGUgL01BVENISU5HIHN3aXRjaCwgaWYgdGhlIG5h bWVzIG9mIHRoZSBtYWNyb3MgeW91IHdhbnQgdG8gdW5kZWZpbmUKLSAgIGNvbnRhaW4gYW55IG9m IHRoZXNlIGNoYXJhY3RlcnMsIHlvdSBtdXN0IHF1b3RlIHRoZW0gd2l0aCBiYWNrc2xhc2ggdG8K LSAgIGZvcmNlIHRoZW0gdG8gYmUgdGFrZW4gbGl0ZXJhbGx5LiBBbHNvIG5vdGUgdGhhdCBcJSog aXMgbm90IHRoZSBuYW1lIG9mCi0gICBhIHZhcmlhYmxlOyBpdCBpcyBhIHNwZWNpYWwgbm90YXRp b24gdXNlZCB3aXRoaW4gYSBtYWNybyBmb3IgImFsbCBteQotICAgYXJndW1lbnRzIi4gVGhlIGNv bW1hbmQgInVuZGVmIC9tYXRjaCBcJSoiIGRlbGV0ZXMgYWxsIFwleCB2YXJpYWJsZXMsCi0gICB3 aGVyZSB4IGlzIDAuLjkgYW5kIGEuLnouIFVzZSAidW5kZWYgL21hdGNoIFwlWzAtOV0iIHRvIGRl bGV0ZSBtYWNybwotICAgYXJndW1lbnQgdmFyaWFibGVzIG9yICJ1bmRlZiAvbWF0Y2ggXCVbaS1u XSIgdG8gZGVsZXRlIGEgcmFuZ2Ugb2YgXCV4Ci0gICB2YXJpYWJsZXMuCi0KLSAgIFsgWzQ2MV1U b3AgXSBbIFs0NjJdQ29udGVudHMgXSBbIFs0NjNdQy1LZXJtaXQgSG9tZSBdIFsgWzQ2NF1LZXJt aXQKLSAgIEhvbWUgXQotCi04LjEwLiBUaGUgSU5QVVQgYW5kIE1JTlBVVCBDb21tYW5kcwotCi0g ICBBcyBvZiBDLUtlcm1pdCA4LjAuMjExLCB0aGUgSU5QVVQgYW5kIE1JTlBVVCBjb21tYW5kcyBh Y2NlcHQgYSBzd2l0Y2g6Ci0KLSAgIFtNXUlOUFVUIC9OT01BVENIIHRpbWVvdXQKLSAgICAgICAg ICBUaGUgL05PTUFUQ0ggc3dpdGNoIGFsbG93cyBJTlBVVCBvciBNSU5QVVQgdG8gcmVhZCBpbmNv bWluZwotICAgICAgICAgIG1hdGVyaWFsIGZvciB0aGUgc3BlY2lmaWVkIGFtb3VudCBvZiB0aW1l LCB3aXRob3V0IGF0dGVtcHRpbmcgdG8KLSAgICAgICAgICBtYXRjaCBpdCB3aXRoIGFueSB0ZXh0 IG9yIHBhdHRlcm5zLiBXaGVuIHRoaXMgc3dpdGNoIGlzCi0gICAgICAgICAgaW5jbHVkZWQsIHRo ZSBbTV1JTlBVVCBjb21tYW5kIHN1Y2NlZWRzIHdoZW4gdGhlIHRpbWVvdXQKLSAgICAgICAgICBp bnRlcnZhbCBleHBpcmVzLCB3aXRoIFx2KGluc3RhdHVzKSBzZXQgdG8gMSwgbWVhbmluZyAidGlt ZWQKLSAgICAgICAgICBvdXQiLCBvciBmYWlscyB1cG9uIGludGVycnVwdGlvbiBvciBpL28gZXJy b3IuCi0KLSAgIEFsc28gaW4gdmVyc2lvbiA4LjAuMjExLCB0aGVyZSBpcyBhIG5ldyB3YXkgdG8g YXBwbHkgYSBzY2FsZSBmYWN0b3IgdG8KLSAgIFtNXUlOUFVUIHRpbWVvdXRzOgotCi0gICBTRVQg SU5QVVQgU0NBTEUtRkFDVE9SIGZsb2F0aW5nLXBvaW50LW51bWJlcgotICAgICAgICAgIFRoaXMg c2NhbGVzIGFsbCBbTV1JTlBVVCB0aW1lb3V0cyBieSB0aGUgZ2l2ZW4gZmFjdG9yLCBhbGxvd2lu ZwotICAgICAgICAgIHRpbWUtc2Vuc2l0aXZlIHNjcmlwdHMgdG8gYmUgYWRqdXN0ZWQgdG8gY2hh bmdpbmcgY29uZGl0aW9ucwotICAgICAgICAgIHN1Y2ggYXMgY29uZ2VzdGVkIG5ldHdvcmtzIG9y IGRpZmZlcmVudC1zcGVlZCBtb2RlbXMgd2l0aG91dAotICAgICAgICAgIGhhdmluZyB0byBjaGFu Z2UgZWFjaCBJTlBVVC1jbGFzcyBjb21tYW5kLiBUaGlzIGFmZmVjdHMgb25seQotICAgICAgICAg IHRob3NlIHRpbWVvdXRzIHRoYXQgYXJlIGdpdmVuIGluIHNlY29uZHMsIG5vdCBhcyB3YWxsLWNs b2NrCi0gICAgICAgICAgdGltZXMuIEFsdGhvdWdoIHRoZSBzY2FsZSBmYWN0b3IgY2FuIGhhdmUg YSBmcmFjdGlvbmFsIHBhcnQsIHRoZQotICAgICAgICAgIElOUFVUIHRpbWVvdXQgaXMgc3RpbGwg YW4gaW50ZWdlci4gVGhlIG5ldyBidWlsdC1pbiB2YXJpYWJsZQotICAgICAgICAgIFx2KGluc2Nh bGUpIHRlbGxzIHRoZSBjdXJyZW50IElOUFVUIFNDQUxFLUZBQ1RPUi4KLQotICAgVGhlIE1JTlBV VCBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIHNlYXJjaCB0aGUgaW5jb21pbmcgZGF0YSBzdHJlYW0g Zm9yCi0gICBzZXZlcmFsIHRhcmdldHMgc2ltdWx0YW5lb3VzbHkuIEZvciBleGFtcGxlOgotCi0g IE1JTlBVVCA4IG9uZSB0d28gdGhyZWUKLQotICAgd2FpdHMgdXAgdG8gOCBzZWNvbmRzIGZvciBv bmUgb2YgdGhlIHdvcmRzICJvbmUiLCAidHdvIiwgb3IgInRocmVlIiB0bwotICAgYXJyaXZlLiBX b3JkcyBjYW4gYmUgZ3JvdXBlZCB0byBpbmRpY2F0ZSB0YXJnZXRzIHRoYXQgY29udGFpbiBzcGFj ZXM6Ci0KLSAgTUlOUFVUIDggbmluZXRlZW4gdHdlbnR5ICJ0d2VudHkgb25lIgotCi0gICBBbmQg b2YgY291cnNlIHlvdSBjYW4gYWxzbyB1c2UgdmFyaWFibGVzIGluIHBsYWNlIG9mIChvciBhcyBw YXJ0IG9mKQotICAgdGhlIHRhcmdldCBuYW1lczoKLQotICBNSU5QVVQgOCBcJWEgXCZ4WzNdIFxt KGZvbykKLQotICAgVW50aWwgbm93IHlvdSBoYWQgdG8ga25vdyB0aGUgbnVtYmVyIG9mIHRhcmdl dHMgaW4gYWR2YW5jZSB3aGVuIHdyaXRpbmcKLSAgIHRoZSBNSU5QVVQgc3RhdGVtZW50LiBFYWNo IG9mIHRoZSBleGFtcGxlcyBhYm92ZSBoYXMgZXhhY3RseSB0aHJlZQotICAgdGFyZ2V0cy4KLQot ICAgQnV0IHN1cHBvc2UgeW91ciBzY3JpcHQgbmVlZHMgdG8gbG9vayBmb3IgYSB2YXJpYWJsZSBu dW1iZXIgb2YgdGFyZ2V0cy4KLSAgIEZvciB0aGlzIHlvdSBjYW4gdXNlIGFycmF5cyBhbmQgXGZq b2luKCksIGRlc2NyaWJlZCBpbiBbNDY1XVNlY3Rpb24KLSAgIDguNy4gQW55IG51bWJlciBvZiBc ZmpvaW4oKSBpbnZvY2F0aW9ucyBjYW4gYmUgaW5jbHVkZWQgaW4gdGhlIE1JTlBVVAotICAgdGFy Z2V0IGxpc3QsIGFuZCBlYWNoIG9uZSBpcyBleHBhbmRlZCBpbnRvIHRoZSBhcHByb3ByaWF0ZSBu dW1iZXIgb2YKLSAgIHNlcGFyYXRlIHRhcmdldHMgZWFjaCB0aW1lIHRoZSBNSU5QVVQgY29tbWFu ZCBpcyBleGVjdXRlZC4gRXhhbXBsZToKLQotICBkZWNsYXJlIFwmYVsxMF0gPSBvbmUgdHdvIHRo cmVlCi0gIG1pbnB1dCAxMCBmb28gXGZqb2luKCZhKSBiYXIKLQotICAgVGhpcyBkZWNsYXJlcyBh biBhcnJheSBvZiB0ZW4gZWxlbWVudHMsIGFuZCBhc3NpZ25zIHZhbHVlcyB0byB0aGUgZmlyc3QK LSAgIHRocmVlIG9mIHRoZW0uIFRoZSBNSU5QVVQgY29tbWFuZCBsb29rcyBmb3IgdGhlc2UgdGhy ZWUgKGFzIHdlbGwgYXMgdGhlCi0gICB3b3JkcyAiZm9vIiBhbmQgImJhciIpLiBMYXRlciwgaWYg eW91IGFzc2lnbiBhZGRpdGlvbmFsIGVsZW1lbnRzIHRvIHRoZQotICAgYXJyYXksIHRoZSBzYW1l IE1JTlBVVCBjb21tYW5kIGFsc28gbG9va3MgZm9yIHRoZSBuZXcgZWxlbWVudHMuCi0KLSAgIElm IGFuIGFycmF5IGVsZW1lbnQgY29udGFpbnMgc3BhY2VzLCBlYWNoIHdvcmQgYmVjb21lcyBhIHNl cGFyYXRlCi0gICB0YXJnZXQuIFRvIGNyZWF0ZSBvbmUgdGFyZ2V0IHBlciBhcnJheSBlbGVtZW50 LCB1c2UgXGZqb2luKCkncyBncm91cGluZwotICAgZmVhdHVyZToKLQotICBkY2wgXCZhW10gPSB7 YWFhIGJiYn0ge2NjYyBkZGR9IHt4eHggeXl5IHp6en0KLQotICBtaW5wdXQgMTAgXGZqb2luKCZh KSAgICAgPC0tIDcgdGFyZ2V0cwotICBtaW5wdXQgMTAgXGZqb2luKCZhLCwyKSAgPC0tIDMgdGFy Z2V0cwotCi0gICBbIFs0NjZdVG9wIF0gWyBbNDY3XUNvbnRlbnRzIF0gWyBbNDY4XUMtS2VybWl0 IEhvbWUgXSBbIFs0NjldS2VybWl0Ci0gICBIb21lIF0KLQotOC4xMS4gTGVhcm5lZCBTY3JpcHRz Ci0KLSAgIEMtS2VybWl0IG5vdyBpbmNsdWRlcyBhIHNpbXBsZSBzY3JpcHQgcmVjb3JkZXIgdGhh dCBtb25pdG9ycyB5b3VyCi0gICBjb21tYW5kcywgcGx1cyB5b3VyIGFjdGlvbnMgZHVyaW5nIENP Tk5FQ1QgbW9kZSwgYW5kIGF1dG9tYXRpY2FsbHkKLSAgIGdlbmVyYXRlcyBhIHNjcmlwdCBwcm9n cmFtIHRoYXQgbWltaWNzIHdoYXQgaXQgb2JzZXJ2ZWQuIFlvdSBzaG91bGQKLSAgIHRoaW5rIG9m IHRoaXMgZmVhdHVyZSBhcyBhIHNjcmlwdC13cml0aW5nIEFTU0lTVEFOVCBzaW5jZSwgYXMgeW91 IHdpbGwKLSAgIHNlZSBbNDcwXWxhdGVyIGluIHRoaXMgc2VjdGlvbiwgdGhlIHJlc3VsdCBnZW5l cmFsbHkgbmVlZHMgc29tZSBlZGl0aW5nCi0gICB0byBtYWtlIGl0IGJvdGggc2VjdXJlIGFuZCBm bGV4aWJsZS4gVGhlIHNjcmlwdCByZWNvcmRlciBpcyBjb250cm9sbGVkCi0gICBieSB0aGUgbmV3 IExFQVJOIGNvbW1hbmQ6Ci0KLSAgIExFQVJOIFsgL09OIC9PRkYgL0NMT1NFIF0gWyBmaWxlbmFt ZSBdCi0gICAgICAgICAgSWYgeW91IGdpdmUgYSBmaWxlbmFtZSwgdGhlIGZpbGUgaXMgb3BlbmVk IGZvciBzdWJzZXF1ZW50Ci0gICAgICAgICAgcmVjb3JkaW5nLiBUaGUgL09OIHN3aXRjaCBlbmFi bGVzIHJlY29yZGluZyB0byB0aGUgY3VycmVudCBmaWxlCi0gICAgICAgICAgKGlmIGFueSk7IC9P RkYgZGlzYWJsZXMgcmVjb3JkaW5nLiAvQ0xPU0UgY2xvc2VzIHRoZSBjdXJyZW50Ci0gICAgICAg ICAgc2NyaXB0IHJlY29yZGluZyBmaWxlIChpZiBhbnkpLiBJZiB5b3UgZ2l2ZSBhIGZpbGVuYW1l IHdpdGhvdXQKLSAgICAgICAgICBhbnkgc3dpdGNoZXMsIC9PTiBpcyBhc3N1bWVkLgotCi0gICBU aGUgL09GRiBhbmQgL09OIHN3aXRjaGVzIGxldCB5b3UgdHVybiByZWNvcmRpbmcgb2ZmIGFuZCBv biBkdXJpbmcgYQotICAgc2Vzc2lvbiB3aXRob3V0IGNsb3NpbmcgdGhlIGZpbGUuCi0KLSAgIFdo ZW4gcmVjb3JkaW5nOgotCi0gICAgICogQWxsIGNvbW1hbmRzIHRoYXQgeW91IHR5cGUgKG9yIHJl Y2FsbCkgYXQgdGhlIHByb21wdCBhcmUgcmVjb3JkZWQKLSAgICAgICBpbiB0aGUgZmlsZSBleGNl cHQ6Ci0gICAgICAgICAgKyBMRUFSTiBjb21tYW5kcyBhcmUgbm90IHJlY29yZGVkLgotICAgICAg ICAgICsgVGhlIENPTk5FQ1QgY29tbWFuZCBpcyBub3QgcmVjb3JkZWQuCi0gICAgICAgICAgKyBU aGUgVEVMTkVUIGNvbW1hbmQgaXMgY29udmVydGVkIHRvIFNFVCBIT1NUIC9ORVRXT1JLOlRDUC4K LSAgICAgKiBDb21tYW5kcyBvYnRhaW5lZCBmcm9tIG1hY3JvcyBvciBjb21tYW5kIGZpbGVzIGFy ZSBub3QgcmVjb3JkZWQuCi0gICAgICogRHVyaW5nIENPTk5FQ1Q6Ci0gICAgICAgICAgKyBFdmVy eSBsaW5lIHlvdSB0eXBlIGlzIGNvbnZlcnRlZCB0byBhbiBPVVRQVVQgY29tbWFuZC4KLSAgICAg ICAgICArIFRoZSBsYXN0IHByb21wdCBiZWZvcmUgYW55IGxpbmUgeW91IHR5cGUgYmVjb21lcyBh biBJTlBVVAotICAgICAgICAgICAgY29tbWFuZC4KLSAgICAgICAgICArIFRpbWVvdXRzIGFyZSBj YWxjdWxhdGVkIGF1dG9tYXRpY2FsbHkgZm9yIGVhY2ggSU5QVVQgY29tbWFuZC4KLSAgICAgICAg ICArIEEgUEFVU0UgY29tbWFuZCBpcyBpbnNlcnRlZCBiZWZvcmUgZWFjaCBPVVRQVVQgY29tbWFu ZCBqdXN0IHRvCi0gICAgICAgICAgICBiZSBzYWZlLgotCi0gICBUaHVzIHRoZSBzY3JpcHQgcmVj b3JkZXIgaXMgaW5oZXJlbnRseSBsaW5lLW9yaWVudGVkLiBJdCBjYW4ndCBiZSB1c2VkCi0gICB0 byBzY3JpcHQgY2hhcmFjdGVyLW9yaWVudGVkIGludGVyYWN0aW9ucyBsaWtlIHR5cGluZyBTcGFj ZSB0byBhCi0gICAiTW9yZT8iIHByb21wdCBvciBlZGl0aW5nIGEgdGV4dCBmaWxlIHdpdGggVkkg b3IgRU1BQ1MuCi0KLSAgIEJ1dCBpdCBoYXMgYWR2YW50YWdlcyB0b287IGZvciBleGFtcGxlIGl0 IHRha2VzIGNvbnRyb2wgY2hhcmFjdGVycyBpbnRvCi0gICBhY2NvdW50IHRoYXQgbWlnaHQgbm90 IGJlIHZpc2libGUgdG8geW91IG90aGVyd2lzZSwgYW5kIGl0Ci0gICBhdXRvbWF0aWNhbGx5IGNv bnZlcnRzIGNvbnRyb2wgY2hhcmFjdGVycyBpbiBib3RoIHRoZSBpbnB1dCBhbmQgb3V0cHV0Ci0g ICBzdHJlYW1zIHRvIHRoZSBhcHByb3ByaWF0ZSBub3RhdGlvbi4gSXQgY2FuIHRlbGwsIGZvciBl eGFtcGxlIHRoYXQgdGhlCi0gICAiJCAiIHByb21wdCBvbiB0aGUgbGVmdCBtYXJnaW4gaW4gVU5J WCBpcyByZWFsbHkge1x7MTN9XHsxMH0kIH0sCi0gICB3aGVyZWFzIGluIFZNUyBpdCBtaWdodCBi ZSB7XHsxM31cezEwfVx7MTN9JCB9LiBUaGVzZSBzZXF1ZW5jZXMgYXJlCi0gICBkZXRlY3RlZCBh bmQgcmVjb3JkZWQgYXV0b21hdGljYWxseS4KLQotICAgQSBsZWFybmVkIHNjcmlwdCBzaG91bGQg ZXhlY3V0ZSBjb3JyZWN0bHkgd2hlbiB5b3UgZ2l2ZSBhIFRBS0UgY29tbWFuZAotICAgZm9yIGl0 LiBIb3dldmVyLCBpdCBpcyB1c3VhbGx5IGFwcHJvcHJpYXRlIHRvIGVkaXQgdGhlIHNjcmlwdCBh IGJpdC4KLSAgIFRoZSBtb3N0IGltcG9ydGFudCBjaGFuZ2Ugd291bGQgYmUgdG8gcmVtb3ZlIGFu eSBwYXNzd29yZHMgZnJvbSBpdC4gRm9yCi0gICBleGFtcGxlLCBpZiB0aGUgc2NyaXB0IGNvbnRh aW5zOgotCi0gIElOUFVUIDkge1x7MTN9XHsxMH1QYXNzd29yZDogfQotICBJRiBGQUlMIFNUT1Ag MSBJTlBVVCB0aW1lb3V0Ci0gIFBBVVNFIDEKLSAgT1VUUFVUIGJpZ3NlY3JldFx7MTN9Ci0KLSAg IHlvdSBzaG91bGQgcmVwbGFjZSB0aGlzIGJ5IHNvbWV0aGluZyBsaWtlOgotCi0gIElOUFVUIDkg e1x7MTN9XHsxMH1QYXNzd29yZDogfQotICBJRiBGQUlMIFNUT1AgMSBJTlBVVCB0aW1lb3V0Ci0g IEFTS1EgcHN3ZCBQbGVhc2UgdHlwZSB5b3VyIHBhc3N3b3JkOgotICBQQVVTRSAxCi0gIE9VVFBV VCBcbShwc3dkKVx7MTN9Ci0KLSAgIFRoZSBMRUFSTiBjb21tYW5kIGNhbid0IGRvIHRoaXMgZm9y IHlvdSBzaW5jZSBpdCBrbm93cyBub3RoaW5nIGFib3V0Ci0gICAiY29udGVudCI7IGl0IG9ubHkg a25vd3MgYWJvdXQgbGluZXMgYW5kIGNhbid0IGJlIGV4cGVjdGVkIHRvIHBhcnNlIG9yCi0gICB1 bmRlcnN0YW5kIHRoZW0gLS0gYWZ0ZXIgYWxsLCB0aGUgUGFzc3dvcmQgcHJvbXB0IG1pZ2h0IGJl IGluIHNvbWUKLSAgIG90aGVyIGxhbmd1YWdlLiBTbyByZW1lbWJlcjogaWYgeW91IHVzZSB0aGUg TEVBUk4gY29tbWFuZCB0byByZWNvcmQgYQotICAgbG9naW4gc2NyaXB0LCBiZSBzdXJlIGVkaXQg dGhlIHJlc3VsdGluZyBmaWxlIHRvIHJlbW92ZSBhbnkgcGFzc3dvcmRzLgotICAgQWxzbyBiZSBz dXJlIHRvIGRlbGV0ZSBhbnkgYmFja3VwIGNvcGllcyB5b3VyIGVkaXRvciBvciBPUyBtaWdodCBo YXZlCi0gICBtYWRlIG9mIHRoZSBmaWxlLgotCi0gICBPdGhlciBtYW51YWwgYWRqdXN0bWVudHMg bWlnaHQgYWxzbyBiZSBhcHByb3ByaWF0ZToKLQotICAgICAqIElmIHRoZSB0YXJnZXQgb2YgYW4g SU5QVVQgY29tbWFuZCBjYW4gdmFyeSwgeW91IGNhbiByZXBsYWNlIHRoZQotICAgICAgIElOUFVU IGNvbW1hbmQgd2l0aCBNSU5QVVQgYW5kIHRoZSBhcHByb3ByaWF0ZSB0YXJnZXQgbGlzdCwgYW5k L29yCi0gICAgICAgdGhlIHRhcmdldCB3aXRoIGEgXGZwYXR0ZXJuKCkuIEZvciBleGFtcGxlLCBz dXBwb3NlIHlvdSBhcmUgZGlhbGluZwotICAgICAgIGEgbnVtYmVyIHRoYXQgY2FuIGJlIGFuc3dl cmVkIGJ5IGFueSBvbmUgb2YgMTAwIHRlcm1pbmFsIHNlcnZlcnMsCi0gICAgICAgd2hvc2UgcHJv bXB0cyBhcmUgdHMtMDA+LCB0cy0wMT4sIHRzLTAyPiwgLi4uIHRzLTk5Pi4gVGhlIHNjcmlwdAot ICAgICAgIHJlY29yZHMgYSBwYXJ0aWN1bGFyIG9uZSBvZiB0aGVzZSwgYnV0IHlvdSB3YW50IGl0 IHRvIHdvcmsgZm9yIGFsbAotICAgICAgIG9mIHRoZW0sIHNvIGNoYW5nZSAoZS5nLik6Ci0gIElO UFVUIDEwIHRzLTIzPiAgOyBvciB3aGF0ZXZlcgotCi0gICAgICAgdG86Ci0gIElOUFVUIDEwIFxm cGF0dGVybih0cy1bMC05XVswLTldPikKLQotICAgICAqIFRoZSBJTlBVVCB0aW1lb3V0IHZhbHVl cyBhcmUgY29uc2VydmF0aXZlLCBidXQgdGhleSBhcmUgYmFzZWQgb25seQotICAgICAgIG9uIGEg c2luZ2xlIG9ic2VydmF0aW9uOyB5b3UgbWlnaHQgbmVlZCB0byB0dW5lIHRoZW0uCi0gICAgICog VGhlIFBBVVNFIGNvbW1hbmRzIG1pZ2h0IG5vdCBiZSBuZWNlc3NhcnksIG9yIHRoZSBQQVVTRSBp bnRlcnZhbAotICAgICAgIG1pZ2h0IG5lZWQgYWRqdXN0bWVudC4KLSAgICAgKiBJbiBjYXNlIHlv dSBtYWRlIHR5cG9ncmFwaGljYWwgZXJyb3JzIGR1cmluZyByZWNvcmRpbmcsIHRoZXkgYXJlCi0g ICAgICAgaW5jb3Jwb3JhdGVkIGluIHlvdXIgc2NyaXB0OyB5b3UgY2FuIGVkaXQgdGhlbSBvdXQg aWYgeW91IHdhbnQgdG8uCi0KLSAgIEhlcmUgaXMgYSBzYW1wbGUgc2NyaXB0IGdlbmVyYXRlZCBi eSBLZXJtaXQgKCJsZWFybiB2bXMua3NjIikgaW4gd2hpY2gKLSAgIGEgVGVsbmV0IGNvbm5lY3Rp b24gaXMgbWFkZSB0byBhIFZNUyBjb21wdXRlciwgdGhlIHVzZXIgbG9ncyBpbiwgc3RhcnRzCi0g ICBLZXJtaXQgb24gVk1TLCBzZW5kcyBpdCBhIGZpbGUsIGFuZCB0aGVuIGxvZ3Mgb3V0OgotCi0g IDsgU2NyaXB0ZmlsZTogdm1zLmtzYwotICA7IERpcmVjdG9yeTogIC91c3Ivb2xnYQotICA7IFJl Y29yZGVkOiAgIDIwMDAxMTI0IDE1OjIxOjIzCi0KLSAgU0VUIEhPU1QgL05FVFdPUks6VENQIHZt cy54eXpjb3JwLmNvbQotICBJRiBGQUlMIFNUT1AgMSBDb25uZWN0aW9uIGZhaWxlZAotCi0gIElO UFVUIDcge1x7MTN9XHsxMH1cezEzfVVzZXJuYW1lOiB9Ci0gIElGIEZBSUwgU1RPUCAxIElOUFVU IHRpbWVvdXQKLSAgUEFVU0UgMQotICBPVVRQVVQgb2xnYVx7MTN9Ci0gIElOUFVUIDMge1x7MTN9 XHsxMH1cezEzfVBhc3N3b3JkOiB9Ci0gIElGIEZBSUwgU1RPUCAxIElOUFVUIHRpbWVvdXQKLSAg UEFVU0UgMQotICBPVVRQVVQgc2VjcmV0XHsxM30KLSAgSU5QVVQgMTgge1x7MTN9XHsxMH1cezEz fSQgfQotICBJRiBGQUlMIFNUT1AgMSBJTlBVVCB0aW1lb3V0Ci0gIFBBVVNFIDEKLSAgT1VUUFVU IHNldCBkZWZhdWx0IFsuaW5jb21pbmddXHsxM30KLSAgSU5QVVQgMTIge1x7MTN9XHsxMH1cezEz fSQgfQotICBJRiBGQUlMIFNUT1AgMSBJTlBVVCB0aW1lb3V0Ci0gIFBBVVNFIDEKLSAgT1VUUFVU IGtlcm1pdFx7MTN9Ci0gIElOUFVUIDE1IHtcezEzfVx7MTB9XHsxM31BTFRPOltPTEdBLklOQ09N SU5HXSBDLUtlcm1pdD59Ci0gIElGIEZBSUwgU1RPUCAxIElOUFVUIHRpbWVvdXQKLSAgUEFVU0Ug MQotICBPVVRQVVQgcmVjZWl2ZVx7MTN9Ci0gIHNlbmQgbXlmaWxlLnR4dAotCi0gIElOUFVUIDE4 IHtcezEzfVx7MTB9XHsxM31BTFRPOltPTEdBLklOQ09NSU5HXSBDLUtlcm1pdD59Ci0gIElGIEZB SUwgU1RPUCAxIElOUFVUIHRpbWVvdXQKLSAgUEFVU0UgMQotICBPVVRQVVQgZXhpdFx7MTN9Ci0g IElOUFVUIDYge1x7MTN9XHsxMH1cezEzfSQgfQotICBJRiBGQUlMIFNUT1AgMSBJTlBVVCB0aW1l b3V0Ci0gIFBBVVNFIDEKLSAgT1VUUFVUIGxvZ291dFx7MTN9Ci0gIGNsb3NlCi0gIGV4aXQKLQot ICAgVGhlIGNvbW1hbmRzIGdlbmVyYXRlZCBieSBLZXJtaXQgZHVyaW5nIENPTk5FQ1QgKElOUFVU LCBJRiBGQUlMLCBQQVVTRSwKLSAgIGFuZCBPVVRQVVQpIGhhdmUgdXBwZXJjYXNlIGtleXdvcmRz OyB0aGUgY29tbWFuZHMgdHlwZWQgYnkgdGhlIHVzZXIgYXJlCi0gICBpbiB3aGF0ZXZlciBmb3Jt IHRoZSB1c2VyIHR5cGVkIHRoZW0gKGluIHRoaXMgY2FzZSwgbG93ZXJjYXNlKS4KLQotICAgWyBb NDcxXVRvcCBdIFsgWzQ3Ml1Db250ZW50cyBdIFsgWzQ3M11DLUtlcm1pdCBIb21lIF0gWyBbNDc0 XUtlcm1pdAotICAgSG9tZSBdCi0KLTguMTIuIFBhdHRlcm4gTWF0Y2hpbmcKLQotICAgQSBwYXR0 ZXJuIGlzIGEgY2hhcmFjdGVyIHN0cmluZyB0aGF0IGlzIHVzZWQgdG8gbWF0Y2ggb3RoZXIgc3Ry aW5ncy4KLSAgIFBhdHRlcm5zIGNhbiBjb250YWluIG1ldGFjaGFyYWN0ZXJzIHRoYXQgcmVwcmVz ZW50IHNwZWNpYWwgYWN0aW9ucyBsaWtlCi0gICAibWF0Y2ggYW55IHNpbmdsZSBjaGFyYWN0ZXIi LCAibWF0Y2ggemVybyBvciBtb3JlIGNoYXJhY3RlcnMiLCAibWF0Y2gKLSAgIGFueSBzaW5nbGUg Y2hhcmFjdGVyIGZyb20gYSBsaXN0IiwgYW5kIHNvIG9uLiBUaGUgYmVzdCBrbm93bgotICAgYXBw bGljYXRpb24gb2YgcGF0dGVybnMgaXMgaW4gZmlsZSBzcGVjaWZpY2F0aW9ucyB0aGF0IGNvbnRh aW4KLSAgIHdpbGRjYXJkcywgYXMgaW4gInNlbmQgKi50eHQiLCBtZWFuaW5nICJzZW5kIGFsbCBm aWxlcyB3aG9zZSBuYW1lcyBlbmQKLSAgIHdpdGggLnR4dCIuCi0KLSAgIFBhdHRlcm5zIGFyZSBh bHNvIHVzZWQgaW4gaW5jcmVhc2luZ2x5IG1hbnkgb3RoZXIgd2F5cywgdG8gdGhlIGV4dGVudAot ICAgaXQgaXMgdXNlZnVsIHRvIHBvaW50IG91dCBjZXJ0YWluIGltcG9ydGFudCBkaXN0aW5jdGlv bnMgaW4gdGhlIHdheXMgaW4KLSAgIHdoaWNoIHRoZXkgYXJlIHVzZWQ6Ci0KLSAgIEFuY2hvcmVk IFBhdHRlcm5zCi0gICAgICAgICAgSWYgYW4gYW5jaG9yZWQgcGF0dGVybiBkb2VzIG5vdCBiZWdp biB3aXRoICIqIiwgaXQgbXVzdCBtYXRjaAotICAgICAgICAgIHRoZSBiZWdpbm5pbmcgb2YgdGhl IHN0cmluZywgYW5kIGlmIGl0IGRvZXMgbm90IGVuZCB3aXRoICIqIiwgaXQKLSAgICAgICAgICBt dXN0IG1hdGNoIHRoZSBlbmQgb2YgdGhlIHN0cmluZy4gRm9yIGV4YW1wbGUsIHRoZSBhbmNob3Jl ZAotICAgICAgICAgIHBhdHRlcm4gImFiYyIgbWF0Y2hlcyBvbmx5IHRoZSBzdHJpbmcgImFiYyIs IG5vdCAiYWJjZGUiIG9yCi0gICAgICAgICAgInh5emFiYyIgb3IgImFiY2FiYyIuIFRoZSBhbmNo b3JlZCBwYXR0ZXJuICJhYmMqIiBtYXRjaGVzIGFueQotICAgICAgICAgIHN0cmluZyB0aGF0IHN0 YXJ0cyB3aXRoICJhYmMiOyB0aGUgYW5jaG9yZWQgcGF0dGVybiAiKmFiYyIKLSAgICAgICAgICBt YXRjaGVzIGFueSBzdHJpbmcgdGhhdCBlbmRzIHdpdGggImFiYyI7IHRoZSBhbmNob3JlZCBwYXR0 ZXJuCi0gICAgICAgICAgIiphYmMqIiBtYXRjaGVzIGFueSBzdHJpbmcgdGhhdCBjb250YWlucyAi YWJjIiAoaW5jbHVkaW5nIGFueQotICAgICAgICAgIHRoYXQgc3RhcnQgYW5kL29yIGVuZCB3aXRo IGl0KS4KLQotICAgRmxvYXRpbmcgUGF0dGVybnMKLSAgICAgICAgICBBIGZsb2F0aW5nIHBhdHRl cm4gbWF0Y2hlcyBhbnkgc3RyaW5nIHRoYXQgY29udGFpbnMgYSBzdWJzdHJpbmcKLSAgICAgICAg ICB0aGF0IG1hdGNoZXMgdGhlIHBhdHRlcm4uIEluIG90aGVyIHdvcmRzLCBhIGZsb2F0aW5nIHBh dHRlcm4gaGFzCi0gICAgICAgICAgYW4gaW1wbGllZCAiKiIgYXQgdGhlIGJlZ2lubmluZyBhbmQg ZW5kLiBZb3UgY2FuIGFuY2hvciBhCi0gICAgICAgICAgZmxvYXRpbmcgcGF0dGVybiB0byB0aGUg YmVnaW5uaW5nIGJ5IHN0YXJ0aW5nIGl0IHdpdGggIl4iLCBhbmQKLSAgICAgICAgICB5b3UgY2Fu IGFuY2hvciBpdCB0byB0aGUgZW5kIGJ5IGVuZGluZyBpdCB3aXRoICIkIiAoc2VlIGV4YW1wbGVz Ci0gICAgICAgICAgYmVsb3cpLgotCi0gICBXaWxkY2FyZHMKLSAgICAgICAgICBBIHdpbGRjYXJk IGlzIGFuIGFuY2hvcmVkIHBhdHRlcm4gdGhhdCBoYXMgdGhlIGFkZGl0aW9uYWwKLSAgICAgICAg ICBwcm9wZXJ0eSB0aGF0ICIqIiBkb2VzIG5vdCBtYXRjaCBkaXJlY3Rvcnkgc2VwYXJhdG9ycy4K LQotICAgVGhpcyB0ZXJtaW5vbG9neSBsZXRzIHVzIGRlc2NyaWJlIEtlcm1pdCdzIGNvbW1hbmRz IHdpdGggYSBiaXQgbW9yZQotICAgcHJlY2lzaW9uLiBXaGVuIGEgcGF0dGVybiBpcyB1c2VkIGZv ciBtYXRjaGluZyBmaWxlbmFtZXMsIGl0IGlzIGEKLSAgIHdpbGRjYXJkLCBleGNlcHQgaW4gdGhl IFRFWFQtUEFUVEVSTlMgYW5kIEJJTkFSWS1QQVRURVJOUyBsaXN0cyBhbmQKLSAgIC9FWENFUFQ6 IGNsYXVzZXMsIGluIHdoaWNoIGNhc2UgZGlyZWN0b3J5IHNlcGFyYXRvcnMgYXJlIG5vdAotICAg c2lnbmlmaWNhbnQgKGZvciBleGFtcGxlLCBhIEJJTkFSWS1QQVRURVJOIG9mICIqLmV4ZSIgbWF0 Y2hlcyBhbnkgZmlsZQotICAgd2hvc2UgbmFtZSBlbmRzIGluIC5leGUsIG5vIG1hdHRlciBob3cg ZGVlcGx5IGl0IG1pZ2h0IGJlIGJ1cmllZCBpbgotICAgc3ViZGlyZWN0b3JpZXMpLiBXaGVuIEtl cm1pdCBwYXJzZXMgYSBmaWxlIHNwZWNpZmljYXRpb24gZGlyZWN0bHksCi0gICBob3dldmVyLCBp dCB1c2VzIHRoZSBzdHJpY3Qgd2lsZGNhcmQgZGVmaW5pdGlvbi4gRm9yIGV4YW1wbGUsICJzZW5k Ci0gICBhKmIiIHNlbmRzIGFsbCBmaWxlcyB3aG9zZSBuYW1lcyBzdGFydCB3aXRoICJhIiBhbmQg ZW5kIHdpdGggImIiIGluIHRoZQotICAgY3VycmVudCBkaXJlY3RvcnksIGFuZCBub3QgYW55IGZp bGVzIHdob3NlIG5hbWVzIGVuZCB3aXRoICJiIiB0aGF0Ci0gICBoYXBwZW4gdG8gYmUgaW4gc3Vi ZGlyZWN0b3JpZXMgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCAiYSIuIEFuZCBhcwotICAgbm90ZWQs IHdpbGRjYXJkcyBhcmUgYW5jaG9yZWQsIHNvICJkZWxldGUgZm9vIiBkZWxldGVzIHRoZSBmaWxl IG5hbWVkCi0gICAiZm9vIiwgYW5kIG5vdCBhbGwgZmlsZXMgd2hvc2UgbmFtZXMgaGFwcGVuIHRv IGNvbnRhaW4gImZvbyIuCi0KLSAgIE1vc3Qgb3RoZXIgcGF0dGVybnMgYXJlIGFuY2hvcmVkLiBG b3IgZXhhbXBsZToKLQotICBpZiBtYXRjaCBhYmMgYmMgLi4uCi0KLSAgIGRvZXMgbm90IHN1Y2Nl ZWQgKGFuZCB5b3Ugd291bGQgYmUgc3VycHJpc2VkIGlmIGl0IGRpZCEpLiBJbiBmYWN0LCB0aGUK LSAgIG9ubHkgZmxvYXRpbmcgcGF0dGVybnMgYXJlIHRoZSBvbmVzIHVzZWQgYnkgY29tbWFuZHMg b3IgZnVuY3Rpb25zIHRoYXQKLSAgIHNlYXJjaCBmb3IgcGF0dGVybnMgaW4gZmlsZXMsIGFycmF5 cywgb3Igc3RyaW5ncy4gVGhlc2UgaW5jbHVkZToKLQotICAgICAqIFRoZSBHUkVQIGFuZCBUWVBF IC9NQVRDSCBjb21tYW5kcy4KLSAgICAgKiBUaGUgXGZzZWFyY2goKSwgXGZyc2VhcmNoKCksIGFu ZCBcZmFycmF5bG9vaygpIGZ1bmN0aW9ucy4KLQotICAgVGh1cyB0aGVzZSBhcmUgdGhlIG9ubHkg Y29udGV4dHMgaW4gd2hpY2ggZXhwbGljaXQgYW5jaG9ycyAoIl4iIGFuZAotICAgIiQiKSBtYXkg YmUgdXNlZDoKLQotICAgZ3JlcCBhYmMgKi50eHQKLSAgICAgICAgICBQcmludHMgYWxsIGxpbmVz IGNvbnRhaW5pbmcgImFiYyIgaW4gYWxsIGZpbGVzIHdob3NlIG5hbWVzIGVuZAotICAgICAgICAg IHdpdGggIi50eHQiLgotCi0gICBncmVwIF5hYmMgKi50eHQKLSAgICAgICAgICBQcmludHMgYWxs IGxpbmVzIHRoYXQgc3RhcnQgd2l0aCAiYWJjIiBpbiBhbGwgIi50eHQiIGZpbGVzLgotCi0gICBn cmVwIGFiYyQgKi50eHQKLSAgICAgICAgICBQcmludHMgYWxsIGxpbmVzIHRoYXQgZW5kIHdpdGgg ImFiYyIgaW4gYWxsICIudHh0IiBmaWxlcy4KLQotICAgZ3JlcCBeYSp6JCAqLnR4dAotICAgICAg ICAgIFByaW50cyBhbGwgbGluZXMgdGhhdCBzdGFydCB3aXRoICJhIiBhbmQgZW5kIHdpdGggInoi IGluIGFsbAotICAgICAgICAgICIudHh0IiBmaWxlcy4KLQotICAgU2ltaWxhcmx5IGZvciBUWVBF IC9QQUdFLCAvZnNlYXJjaCgpLCAvZnJzZWFyY2goKSwgYW5kIFxmYXJyYXlsb29rKCkuCi0KLSAg IEhlcmUgaXMgYSBicmllZiBzdW1tYXJ5IG9mIGFuY2hvcmVkIGFuZCBmbG9hdGluZyBwYXR0ZXJu IGVxdWl2YWxlbmNlczoKLQotICBBbmNob3JlZCAgIEZsb2F0aW5nCi0gICAgYWJjICAgICAgIF5h YmMkCi0gICAgKmFiYyAgICAgIGFiYyQKLSAgICBhYmMqICAgICAgXmFiYwotICAgICphYmMqICAg ICBhYmMKLQotICAgWyBbNDc1XVRvcCBdIFsgWzQ3Nl1Db250ZW50cyBdIFsgWzQ3N11DLUtlcm1p dCBIb21lIF0gWyBbNDc4XUtlcm1pdAotICAgSG9tZSBdCi0KLTguMTMuIERhdGVzIGFuZCBUaW1l cwotCi0gICBDLUtlcm1pdCdzIGNvbXByZWhlbnNpb24gb2YgZGF0ZS10aW1lIGZvcm1hdHMgaXMg Y29uc2lkZXJhYmx5IGV4cGFuZGVkCi0gICBpbiB2ZXJzaW9uIDguMC4gQW55IGNvbW1hbmQgdGhh dCByZWFkcyBkYXRlcywgaW5jbHVkaW5nIHRoZSBEQVRFCi0gICBjb21tYW5kIGl0c2VsZiwgb3Ig YW55IHN3aXRjaCwgc3VjaCBhcyB0aGUgL0JFRk9SRTogYW5kIC9BRlRFUjoKLSAgIHN3aXRjaGVz LCBvciBhbnkgZnVuY3Rpb24gc3VjaCBhcyBcZmN2dGRhdGUoKSwgbm93IGNhbiB1bmRlcnN0YW5k IGRhdGVzCi0gICBhbmQgdGltZXMgZXhwcmVzc2VkIGluIGFueSBJU08gODYwMSBmb3JtYXQsIGlu IFVuaXggImFzY3RpbWUiIGZvcm1hdCwKLSAgIGluIEZUUCBNRFRNIGZvcm1hdCwgYW5kIGluIHBy YWN0aWNhbGx5IGFueSBmb3JtYXQgdXNlZCBpbiBSRkMgODIyIG9yCi0gICBSRkMgMjgyMiBlbGVj dHJvbmljIG1haWwsIHdpdGggb3Igd2l0aG91dCB0aW1lem9uZXMsIGFuZCBpbiBhIGdyZWF0Ci0g ICBtYW55IG90aGVyIGZvcm1hdHMgYXMgd2VsbC4gSEVMUCBEQVRFIGJyaWVmbHkgc3VtbWFyaXpl cyB0aGUgYWNjZXB0YWJsZQotICAgZGF0ZS10aW1lIGZvcm1hdHMuCi0KLSAgIEZ1cnRoZXJtb3Jl LCBDLUtlcm1pdCA4LjAgaW5jbHVkZXMgYSBuZXcgYW5kIGVhc3ktdG8tdXNlIGZvcm0gb2YKLSAg IGRhdGUtdGltZSBhcml0aG1ldGljLCBpbiB3aGljaCBhbnkgZGF0ZSBvciB0aW1lIGNhbiBiZSBj b21iaW5lZCB3aXRoIGEKLSAgICJkZWx0YSB0aW1lIiwgdG8gYWRkIG9yIHN1YnRyYWN0IHRoZSBk ZXNpcmVkIHRpbWUgaW50ZXJ2YWwgKHllYXJzLAotICAgbW9udGhzLCB3ZWVrcywgZGF5cywgaG91 cnMsIG1pbnV0ZXMsIHNlY29uZHMpIHRvL2Zyb20gdGhlIGdpdmVuIGRhdGUuCi0gICBBbmQgbmV3 IGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIHRvIGNvbXBhcmUgZGF0ZXMgYW5kIHRvIGNvbXB1dGUg dGhlaXIKLSAgIGRpZmZlcmVuY2VzLgotCi0gICBBcyB5b3UgY2FuIGltYWdpbmUsIGFsbCB0aGlz IHJlcXVpcmVzIHF1aXRlIGEgYml0IG9mICJzeW50YXgiLiBUaGUKLSAgIGJhc2ljIGZvcm1hdCBp czoKLQotICBbIGRhdGUgXSBbIHRpbWUgXSBbIGRlbHRhIF0KLQotICAgRWFjaCBmaWVsZCBpcyBv cHRpb25hbCwgYnV0IGluIG1vc3QgY2FzZXMgKGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCkKLSAg IHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGZpZWxkLiBJZiBhIGRhdGUgaXMgZ2l2ZW4sIGl0 IG11c3QgY29tZQotICAgZmlyc3QuIElmIG5vIGRhdGUgaXMgZ2l2ZW4sIHRoZSBjdXJyZW50IGRh dGUgaXMgYXNzdW1lZC4gSWYgbm8gdGltZSBpcwotICAgZ2l2ZW4sIGFuIGFwcHJvcHJpYXRlIHRp bWUgaXMgc3VwcGxpZWQgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYSBkYXRlIHdhcwotICAgc3VwcGxp ZWQuIElmIG5vIGRlbHRhIGlzIGdpdmVuLCBubyBhcml0aG1ldGljIGlzIGRvbmUuIElmIGEgZGVs dGEgaXMKLSAgIGdpdmVuIHdpdGhvdXQgYSBkYXRlIG9yIHRpbWUsIHRoZSBjdXJyZW50IGRhdGUg YW5kIHRpbWUgYXJlIHVzZWQgYXMgdGhlCi0gICBiYXNlLgotCi0gICBEYXRlLXRpbWUtZGVsdGEg ZmllbGRzIGFyZSBsaWtlbHkgdG8gY29udGFpbiBzcGFjZXMgKGFsdGhvdWdoIHRoZXkgbmVlZAot ICAgbm90OyBzcGFjZS1mcmVlIGZvcm1zIGFyZSBhbHdheXMgYXZhaWxhYmxlKS4gVGhlcmVmb3Jl LCBpbiBtb3N0Ci0gICBjb250ZXh0cyAtLSBhbmQgbm90YWJseSBhcyBzd2l0Y2ggYXJndW1lbnRz IC0tIGRhdGUtdGltZSBpbmZvcm1hdGlvbgotICAgbXVzdCBiZSBlbmNsb3NlZCBpbiBicmFjZXMg b3IgZG91YmxlcXVvdGVzLCBmb3IgZXhhbXBsZToKLQotICBzZW5kIC9hZnRlcjoiOC1BdWctMjAw MSAxMjowMCBVVEMiICoudHh0Ci0KLSAgIEtlcm1pdCdzIHN0YW5kYXJkIGludGVybmFsIGZvcm1h dCBmb3IgZGF0ZXMgYW5kIHRpbWVzIGlzOgotCi0gIHl5eXltbWRkIGhoOm1tOnNzCi0KLSAgIGZv ciBleGFtcGxlOgotCi0gIDIwMDEwMjA4IDEwOjI4OjAxCi0KLSAgIERhdGUtdGltZXMgY2FuIGFs d2F5cyBiZSBnaXZlbiBpbiB0aGlzIGZvcm1hdC4geXl5eSBpcyB0aGUgNC1kaWdpdAotICAgeWVh ciwgbW0gaXMgdGhlIHR3by1kaWdpdCBtb250aCAoMS0xMjsgc3VwcGx5IGxlYWRpbmcgemVybyBm b3IKLSAgIEphbi1TZXApLCBkZCBpcyB0aGUgMi1kaWdpdCBkYXkgKGxlYWRpbmcgemVybyBmb3Ig MS05KSwgaGggaXMgdGhlIGhvdXIKLSAgICgwLTIzKSwgbW0gdGhlIG1pbnV0ZSAoMC01OSksIHNz IHRoZSBzZWNvbmQgKDAtNTkpLCBlYWNoIHdpdGggbGVhZGluZwotICAgemVybyBpZiBsZXNzIHRo YW4gdGhlIGZpZWxkIHdpZHRoLiBUaGUgZGF0ZSBhbmQgdGltZSBjYW4gYmUgc2VwYXJhdGVkCi0g ICBieSBhIHNwYWNlLCBhbiB1bmRlcnNjb3JlLCBhIGNvbG9uLCBvciB0aGUgbGV0dGVyIFQuIFRo ZSB0aW1lIGlzIGluCi0gICAyNC1ob3VyIGZvcm1hdC4gVGh1cyB0aGUgdmFyaW91cyBxdWFudGl0 aWVzIGFyZSBhdCB0aGUgZm9sbG93aW5nIGZpeGVkCi0gICBwb3NpdGlvbnM6Ci0KLVBvc2l0aW9u ICBDb250ZW50cwotICAgMS00ICAgIFllYXIgICAoNCBkaWdpdHMsIDAwMDAtOTk5OSkKLSAgIDUt NiAgICBNb250aCAgKDIgZGlnaXRzLCAxLTEyKQotICAgNy04ICAgIERheSAgICAoMiBkaWdpdHMs IDEtMzEpCi0gICA5ICAgICAgRGF0ZS1UaW1lIFNlcGFyYXRvciAoc3BhY2UsIDosIF8sIG9yIHRo ZSBsZXR0ZXIgVCkKLSAgMTAtMTEgICBIb3VyICAgKDIgZGlnaXRzLCAwLTIzKQotICAxMiAgICAg IEhvdXItTWludXRlIFNlcGFyYXRvciAoY29sb24pCi0gIDEzLTE0ICAgTWludXRlICgyIGRpZ2l0 cywgMC01OSkKLSAgMTUgICAgICBNaW51dGUtU2Vjb25kIFNlcGFyYXRvciAoY29sb24pCi0gIDE2 LTE3ICAgU2Vjb25kICgyIGRpZ2l0cywgMC01OSkKLQotICAgRXhhbXBsZToKLQotICAxOTgwMDUy NiAxMzowNzoxMiAgMjYgTWF5IDE5ODAsIDEzOjA3OjEyICgxOjA3OjEyUE0pCi0KLSAgIFRoaXMg aXMgdGhlIGZvcm1hdCBwcm9kdWNlZCBieSB0aGUgREFURSBjb21tYW5kIGFuZCBieSBhbnkgZnVu Y3Rpb24KLSAgIHRoYXQgcmV0dXJucyBhIGRhdGUtdGltZS4gSXQgaXMgc3VpdGFibGUgZm9yIGxl eGljYWwgY29tcGFyaXNvbiBhbmQKLSAgIHNvcnRpbmcsIGFuZCBmb3IgdXNlIGFzIGEgZGF0ZS10 aW1lIGluIGFueSBLZXJtaXQgY29tbWFuZC4gV2hlbiB0aGlzCi0gICBmb3JtYXQgaXMgZ2l2ZW4g YXMgaW5wdXQgdG8gYSBjb21tYW5kIG9yIGZ1bmN0aW9uLCB2YXJpb3VzIGRhdGUtdGltZQotICAg c2VwYXJhdG9ycyAoYXMgbm90ZWQpIGFyZSBhY2NlcHRlZDoKLQotICAxOTgwMDUyNiAxMzowNzox MiAgMjYgTWF5IDE5ODAsIDEzOjA3OjEyICgxOjA3OjEyUE0pCi0gIDIwMDEwMjA4XzEwOjI4OjM1 ICAyIEZlYnJ1YXJ5IDIwMDEsIDEwOjI4OjM1IEFNCi0gIDE4NTgwMTAxOjEyOjAwOjAwICAxIEph bnVhcnkgMTg1OCwgbm9vbgotICAyMDExMDIwOFQwMDowMDowMCAgMiBGZWJydWFyeSAyMDExLCBt aWRuaWdodAotCi0gICBDZXJ0YWluIG90aGVyIHNwZWNpYWwgZGF0ZS10aW1lIGZvcm1hdHMgdGhh dCBhcmUgZW5jb3VudGVyZWQgb24KLSAgIGNvbXB1dGVyIG5ldHdvcmtzIGFyZSByZWNvZ25pemVk OgotCi0gICBBc2N0aW1lIEZvcm1hdAotICAgICAgICAgIFRoaXMgaXMgYSBmaXhlZCBmb3JtYXQg dXNlZCBieSBVbml4LCBuYW1lZCBhZnRlciBVbml4J3MKLSAgICAgICAgICBhc2N0aW1lKCkgKCJB U0NJSSB0aW1lIikgZnVuY3Rpb24uIEl0IGlzIGFsd2F5cyBleGFjdGx5IDI0Ci0gICAgICAgICAg Y2hhcmFjdGVycyBsb25nLiBFeGFtcGxlOiBGcmkgQXVnIDEwIDE2OjM4OjAxIDIwMDEKLQotICAg QXNjdGltZSB3aXRoIFRpbWV6b25lCi0gICAgICAgICAgVGhpcyBpcyBsaWtlIEFzY3RpbWUgZm9y bWF0LCBidXQgaW5jbHVkZXMgYSAzLWNoYXJhY3RlciB0aW1lem9uZQotICAgICAgICAgIGJldHdl ZW4gdGhlIHRpbWUgYW5kIHllYXIuIEl0IGlzIGV4YWN0bHkgMjggY2hhcmFjdGVycyBsb25nLgot ICAgICAgICAgIEV4YW1wbGU6IEZyaSBBdWcgMTAgMTY6Mzg6MDEgR01UIDIwMDEKLQotICAgRS1N YWlsIEZvcm1hdAotICAgICAgICAgIEUtbWFpbCBkYXRlLXRpbWUgZm9ybWF0cyBhcmUgZGVmaW5l ZCBpbiBbNDc5XVJGQyAyODIyIHdpdGggYQotICAgICAgICAgIGZhaXIgYW1vdW50IG9mIGZsZXhp YmlsaXR5IGFuZCBvcHRpb25zLiBUaGUgZm9sbG93aW5nIGV4YW1wbGVzCi0gICAgICAgICAgYXJl IHR5cGljYWwgb2YgZS1tYWlscyBhbmQgSFRUUCAod2ViLXBhZ2UpIGhlYWRlcnM6Ci0KLSAgU2F0 LCAxNCBKdWwgMjAwMSAxMTo0OToyOSAgICAgICAgICAgICAgICAoTm8gdGltZXpvbmUpCi0gIEZy aSwgMjQgTWFyIDIwMDAgMTQ6MTk6NTkgRVNUICAgICAgICAgICAgKFN5bWJvbGljIHRpbWV6b25l KQotICBUdWUsIDI2IEp1biAyMDAxIDEwOjE5OjQ1IC0wNDAwIChFRFQpICAgIChHTVQgT2Zmc2V0 ICsgY29tbWVudCkKLQotICAgRlRQIE1EVE0gRm9ybWF0Ci0gICAgICAgICAgVGhpcyBpcyB0aGUg ZGF0ZS10aW1lIGZvcm1hdCBzdXBwbGllZCBieSBGVFAgc2VydmVycyB0aGF0Ci0gICAgICAgICAg c3VwcG9ydCB0aGUgKG5vdCB5ZXQgc3RhbmRhcmQgYnV0IHdpZGVseSB1c2VkIG5ldmVydGhlbGVz cykgTURUTQotICAgICAgICAgIGNvbW1hbmQsIGJ5IHdoaWNoIHRoZSBGVFAgY2xpZW50IGFza3Mg Zm9yIGEgZmlsZSdzIG1vZGlmaWNhdGlvbgotICAgICAgICAgIHRpbWU6Ci0KLSAgeXl5eW1tZGRo aG1tc3NbLmZmZmZdCi0KLSAgICAgICAgICB3aGVyZSB5eXl5IGlzIHRoZSA0LWRpZ2l0IHllYXIs IG1tIGlzIHRoZSAyLWRpZ2l0IG1vbnRoLCBhbmQgc28KLSAgICAgICAgICBvbiwgZXhhY3RseSAx NCBkaWdpdHMgbG9uZy4gQW4gb3B0aW9uYWwgZnJhY3Rpb25hbCBwYXJ0Ci0gICAgICAgICAgKGZy YWN0aW9uIG9mIHNlY29uZCkgbWF5IGFsc28gYmUgaW5jbHVkZWQsIHNlcGFyYXRlZCBieSBhCi0g ICAgICAgICAgZGVjaW1hbCBwb2ludCAocGVyaW9kKS4gS2VybWl0IHJvdW5kcyB0byB0aGUgbmVh cmVzdCBzZWNvbmQuCi0gICAgICAgICAgRXhhbXBsZToKLQotICAyMDAyMDIwODEwMjgzNS41MTUg ICAgICAgICAgICAgICAgICAgICAgICg4IEZlYnJ1YXJ5IDIwMDIgMTA6Mjg6MzYgQU0pCi0KLTgu MTMuMS4gVGhlIERhdGUKLQotICAgVGhlIGRhdGUsIGlmIGdpdmVuLCBtdXN0IHByZWNlZGUgdGhl IHRpbWUgYW5kL29yIGRlbHRhLCBhbmQgY2FuIGJlIGluCi0gICBtYW55LCBtYW55IGZvcm1hdHMu IEZvciBzdGFydGVycywgeW91IGNhbiB1c2Ugc2V2ZXJhbCBzeW1ib2xpYyBkYXRlCi0gICBuYW1l cyBpbiBwbGFjZSBvZiBhY3R1YWwgZGF0ZXM6Ci0KLSAgIE5PVwotICAgICAgICAgIFRoaXMgaXMg cmVwbGFjZWQgYnkgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZS4gVGhlIHRpbWUgY2FuIG5vdAot ICAgICAgICAgIGJlIG92ZXJyaWRlbiAoaWYgeW91IHdhbnQgdG8gc3VwcGx5IGEgc3BlY2lmaWMg dGltZSwgdXNlIFRPREFZCi0gICAgICAgICAgcmF0aGVyIHRoYW4gTk9XKS4KLQotICAgVE9EQVkK LSAgICAgICAgICBUaGlzIGlzIHJlcGxhY2VkIGJ5IHRoZSBjdXJyZW50IGRhdGUgYW5kIGEgZGVm YXVsdCB0aW1lIG9mCi0gICAgICAgICAgMDA6MDA6MDAgaXMgc3VwcGxpZWQsIGJ1dCBjYW4gYmUg b3ZlcnJpZGRlbiBieSBhIHNwZWNpZmljIHRpbWU7Ci0gICAgICAgICAgZm9yIGV4YW1wbGUsIGlm IHRvZGF5IGlzIDggRmVicnVhcnkgMjAwMiwgdGhlbiAiVE9EQVkiIGlzCi0gICAgICAgICAgIjIw MDIwODAyIDAwOjAwOjAwIiBidXQgIlRPREFZIDEwOjI4IiBpcyAiMjAwMjA4MDIgMTA6Mjg6MDAi LgotCi0gICBUT01PUlJPVwotICAgICAgICAgIExpa2UgVE9EQVksIGJ1dCBvbmUgZGF5IGxhdGVy IChpZiB0b2RheSBpcyA4IEZlYnJ1YXJ5IDIwMDIsIHRoZW4KLSAgICAgICAgICAiVE9NT1JST1ci IGlzICIyMDAyMDgwMyAwMDowMDowMCIgYnV0ICJUT01PUlJPVyAxNjozMCIgaXMKLSAgICAgICAg ICAiMjAwMjA4MDMgMTY6MzA6MDAiKS4KLQotICAgWUVTVEVSREFZCi0gICAgICAgICAgTGlrZSBU T0RBWSwgYnV0IG9uZSBkYXkgZWFybGllci4KLQotICAgTU9OREFZLCBUVUVTREFZLCBXRURORVNE QVksIC4uLiwgU1VOREFZCi0gICAgICAgICAgVGhlIGRhdGUgb24gdGhlIGdpdmVuIGRheSBvZiB0 aGUgd2VlaywgdG9kYXkgb3IgbGF0ZXIuIEEgZGVmYXVsdAotICAgICAgICAgIHRpbWUgb2YgMDA6 MDA6MDAgaXMgc3VwcGxpZWQgYnV0IGNhbiBiZSBvdmVycmlkZGVuLiBFeGFtcGxlOgotICAgICAg ICAgICJTQVRVUkRBWSAxMjowMCIgbWVhbnMgbmV4dCBTYXR1cmRheSAob3IgdG9kYXksIGlmIHRv ZGF5IGlzCi0gICAgICAgICAgU2F0dXJkYXkpIGF0IG5vb24uCi0KLSAgIFlvdSBjYW4gZ2l2ZSBh biBleHBsaWNpdCBkYXRlIGluIGFsbW9zdCBhbnkgY29uY2VpdmFibGUgZm9ybWF0LCBidXQKLSAg IHRoZXJlIGFyZSBzb21lIHJ1bGVzOgotCi0gICAgICogSWYgYSBkYXRlIGlzIGdpdmVuLCBpdCBt dXN0IGhhdmUgdGhyZWUgZmllbGRzOiBkYXksIG1vbnRoLCBhbmQKLSAgICAgICB5ZWFyOyB0aGUg b3JkZXIgY2FuIHZhcnkgKGV4Y2VwdCB0aGF0IHRoZSBtb250aCBjYW4gbm90IGJlIGxhc3QpLgot ICAgICAqIElmIG5hbWVzIGFyZSB1c2VkIGZvciBkYXlzLCBtb250aHMsIGV0YywgdGhleSBtdXN0 IGJlIEVuZ2xpc2guCi0gICAgICogVGhlIHllYXIgbXVzdCBsaWUgYmV0d2VlbiAwMDAwIGFuZCA5 OTk5LCBpbmNsdXNpdmUuCi0gICAgICogQWxsIGNhbGVuZGFyIGNhbGN1bGF0aW9ucyB1c2UgR3Jl Z29yaWFuIGRhdGluZywgc28gY2FsY3VsYXRlZCBkYXRlcwotICAgICAgIGZvciB5ZWFycyBwcmlv ciB0byAxNTgyIChvciBsYXRlciwgZGVwZW5kaW5nIG9uIHRoZSBjb3VudHJ5KSB3aWxsCi0gICAg ICAgbm90IGFncmVlIHdpdGggaGlzdG9yaWNhbCBkYXRlcy4gT3RoZXIgZm9ybXMgb2YgZGF0aW5n IChlLmcuCi0gICAgICAgSGVicmV3LCBDaGluZXNlKSBhcmUgbm90IHN1cHBvcnRlZC4KLQotICAg VmFyaW91cyBkYXRlLWZpZWxkIHNlcGFyYXRvcnMgYXJlIGFjY2VwdGVkOiBoeXBoZW4sIHNsYXNo LCBzcGFjZSwKLSAgIHVuZGVyc2NvcmUsIHBlcmlvZC4gVGhlIHNhbWUgZmllbGQgc2VwYXJhdG9y IChpZiBhbnkpIG11c3QgYmUgdXNlZCBpbgotICAgYm90aCBwbGFjZXM7IGZvciBleGFtcGxlIDE4 LVNlcC0yMDAxIGJ1dCBub3QgMTgtU2VwLzIwMDEuIE1vbnRocyBjYW4gYmUKLSAgIG51bWVyaWMg KDEtMTIpIG9yIEVuZ2xpc2ggbmFtZXMgb3IgYWJicmV2aWF0aW9ucy4gTW9udGggbmFtZQotICAg YWJicmV2aWF0aW9ucyBhcmUgbm9ybWFsbHkgdGhyZWUgbGV0dGVycywgZS5nLiBBcHIsIE1heSwg SnVuLCBKdWwuCi0gICBDYXBpdGFsaXphdGlvbiBkb2Vzbid0IG1hdHRlci4KLQotICAgSGVyZSBh cmUgYSBmZXcgZXhhbXBsZXM6Ci0KLSAgMTggU2VwIDIwMDEgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoRW5nbGlzaCBtb250aCwgYWJicmV2aWF0ZWQpCi0gIDE4IFNlcHRlbWJlciAyMDAx ICAgICAgICAgICAgICAgICAgICAgICAgKEVuZ2xpc2ggbW9udGgsIHNwZWxsZWQgb3V0KQotICAy MDAxIFNlcHQgMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgIChZZWFyLCBtb250aCwgZGF5 KQotICAxOC1TZXAtMjAwMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXaXRoIGh5cGhl bnMpCi0gIDE4LzA5LzIwMDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFsbCBudW1l cmljIHdpdGggc2xhc2hlcykKLSAgMTguMDkuMjAwMSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoRGl0dG8sIHdpdGggcGVyaW9kcykKLSAgMThfMDlfMjAwMSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoRGl0dG8sIHdpdGggdW5kZXJzY29yZXMpCi0gIDA5LzE4LzIwMDEgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNlZSBiZWxvdykKLSAgMjAwMS8wOS8xOCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoU2VlIGJlbG93KQotICBTZXB0ZW1iZXIgMTgsIDIw MDEgICAgICAgICAgICAgICAgICAgICAgIChDb3JyZXNwb25kZW5jZSBzdHlsZSkKLSAgU2VwLTE4 LTIwMDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTW9udGgtZGF5LXllYXIpCi0gIDIw MDEwOTE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE51bWVyaWMsIG5vIHNlcGFy YXRvcnMpCi0KLSAgIFlvdSBjYW4gYWxzbyBpbmNsdWRlIHRoZSBkYXkgb2YgdGhlIHdlZWsgd2l0 aCBhIHNwZWNpZmljIGRhdGUsIGluIHdoaWNoCi0gICBjYXNlIGl0IGlzIGFjY2VwdGVkIChpZiBp dCBpcyBhIHZhbGlkIGRheSBuYW1lKSwgYnV0IG5vdCB2ZXJpZmllZCB0bwotICAgYWdyZWUgd2l0 aCB0aGUgZ2l2ZW4gZGF0ZToKLQotICBUdWUsIDE4IFNlcCAyMDAxICAgICAgICAgICAgICAgICAg ICAgICAgIChBYmJyZXZpYXRlZCwgd2l0aCBjb21tYSkKLSAgVHVlLDE4IFNlcCAyMDAxICAgICAg ICAgICAgICAgICAgICAgICAgICAoQ29tbWEgYnV0IG5vIHNwYWNlKQotICBUdWUgMTggU2VwIDIw MDEgICAgICAgICAgICAgICAgICAgICAgICAgIChBYmJyZXZpYXRlZCwgbm8gY29tbWEpCi0gIFR1 ZXNkYXkgMTggU2VwIDIwMDEgICAgICAgICAgICAgICAgICAgICAgKFNwZWxsZWQgb3V0KQotICBU dWVzZGF5LCAxOCBTZXAgMjAwMSAgICAgICAgICAgICAgICAgICAgIChldGMpCi0gIEZyaWRheSwg MTggU2VwIDIwMDEgICAgICAgICAgICAgICAgICAgICAgKEFjY2VwdGVkIGV2ZW4gaWYgbm90IEZy aWRheSkKLQotICAgSW4gYWxsLW51bWVyaWMgZGF0ZXMgd2l0aCB0aGUgeWVhciBsYXN0LCBzdWNo IGFzIDE4LzA5LzIwMDEsIEtlcm1pdAotICAgaWRlbnRpZmllcyB0aGUgeWVhciBiZWNhdXNlIGl0 J3MgNCBkaWdpdHMsIHRoZW4gZGVjaWRlcyB3aGljaCBvZiB0aGUKLSAgIG90aGVyIHR3byBudW1i ZXJzIGlzIHRoZSBtb250aCBvciBkYXkgYmFzZWQgb24gaXRzIHZhbHVlLiBJZiBib3RoIGFyZQot ICAgMTIgb3IgbGVzcyBhbmQgYXJlIHVuZXF1YWwsIHRoZSBkYXRlIGlzIGFtYmlndW91cyBhbmQg aXMgcmVqZWN0ZWQuIEluCi0gICBhbGwtbnVtZXJpYyBkYXRlcyB3aXRoIHRoZSB5ZWFyIGZpcnN0 LCB0aGUgc2Vjb25kIGZpZWxkIGlzIGFsd2F5cyB0aGUKLSAgIG1vbnRoIGFuZCB0aGUgdGhpcmQg aXMgdGhlIGRheS4gVGhlIG1vbnRoIG5ldmVyIGNvbWVzIGxhc3QuIEEgZGF0ZSB3aXRoCi0gICBu byBzZXBhcmF0b3JzIGlzIGFjY2VwdGVkIG9ubHkgaWYgaXQgaXMgYWxsIG51bWVyaWMgYW5kIGhh cyBleGFjdGx5Ci0gICBlaWdodCBkaWdpdHMsIGFuZCBpcyBhc3N1bWVkIHRvIGJlIGluIHl5eXlt bWRkIGZvcm1hdC4KLQotICAyMDAxMDkxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICgxOC1TZXAtMjAwMSAwMDowMDowMCkKLQotICAgb3IgMTQgZGlnaXRzIChhcyBpbiBGVFAgTURU TSBmb3JtYXQpOgotCi0gIDIwMDEwOTE4MTIzNDU2ICAgICAgICAgICAgICAgICAgICAgICAgICAg KDE4LVNlcC0yMDAxIDEyOjM0OjU2KQotCi0gICBZb3UgY2FuIGFsd2F5cyBhdm9pZCBhbWJpZ3Vp dHkgYnkgcHV0dGluZyB0aGUgeWVhciBmaXJzdCwgb3IgYnkgdXNpbmcKLSAgIGFuIEVuZ2xpc2gs IHJhdGhlciB0aGFuIG51bWVyaWMsIG1vbnRoLiBBIGRhdGUgc3VjaCBhcyAwOS8wOC8yMDAxIHdv dWxkCi0gICBiZSBhbWJpZ3VvdXMgYnV0IDIwMDEvMDkvMDggaXMgbm90LCBub3IgaXMgMDktQXVn LTIwMDEuCi0KLSAgIFVudGlsIHRoZSBsYXRlIDE5OTBzLCBpdCB3YXMgY29tbW9uIHRvIGVuY291 bnRlciAyLWRpZ2l0IHllYXJzLCBhbmQKLSAgIHRoZXNlIGFyZSBmb3VuZCB0byB0aGlzIGRheSBp biBvbGQgZS1tYWlscyBhbmQgb3RoZXIgZG9jdW1lbnRzLiBLZXJtaXQKLSAgIGFjY2VwdHMgdGhl c2UgZGF0ZXMgaWYgdGhleSBoYXZlIEVuZ2xpc2ggbW9udGhzLCBhbmQgaW50ZXJwcmV0cyB0aGVt Ci0gICBhY2NvcmRpbmcgdG8gdGhlIHdpbmRvd2luZyBydWxlcyBvZiBbNDgwXVJGQyAyODIyOiAi SWYgYSB0d28gZGlnaXQgeWVhcgotICAgaXMgZW5jb3VudGVyZWQgd2hvc2UgdmFsdWUgaXMgYmV0 d2VlbiAwMCBhbmQgNDksIHRoZSB5ZWFyIGlzCi0gICBpbnRlcnByZXRlZCBieSBhZGRpbmcgMjAw MCwgZW5kaW5nIHVwIHdpdGggYSB2YWx1ZSBiZXR3ZWVuIDIwMDAgYW5kCi0gICAyMDQ5LiBJZiBh IHR3byBkaWdpdCB5ZWFyIGlzIGVuY291bnRlcmVkIHdpdGggYSB2YWx1ZSBiZXR3ZWVuIDUwIGFu ZAotICAgOTksIG9yIGFueSB0aHJlZSBkaWdpdCB5ZWFyIGlzIGVuY291bnRlcmVkLCB0aGUgeWVh ciBpcyBpbnRlcnByZXRlZCBieQotICAgYWRkaW5nIDE5MDAuIgotCi0gICBJZiB5b3UgbmVlZCB0 byBzcGVjaWZ5IGEgeWVhciBwcmlvciB0byAxMDAwLCB1c2UgbGVhZGluZyB6ZXJvcyB0bwotICAg ZW5zdXJlIGl0IGlzIG5vdCBtaXNpbnRlcnByZXRlZCBhcyBhICJub24tWTJLLWNvbXBsaWFudCIg bW9kZXJuIHllYXI6Ci0KLSAgNy1PY3QtNzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoMTk3NzEwMDcgMDA6MDA6MDApCi0gIDctT2N0LTAwNzcgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKDAwNzcxMDA3IDAwOjAwOjAwKQotCi04LjEzLjIuIFRoZSBUaW1lCi0KLSAgIFRo ZSBiYXNpYyB0aW1lIGZvcm1hdCBpcyBoaDptbTpkZDsgdGhhdCBpcyBob3VycywgbWludXRlcywg c2Vjb25kcywKLSAgIHNlcGFyYXRlZCBieSBjb2xvbnMsIHBlcmhhcHMgd2l0aCBhbiBvcHRpb25h bCBmcmFjdGlvbmFsIHNlY29uZAotICAgc2VwYXJhdGVkIGJ5IGEgZGVjaW1hbCBwb2ludCAocGVy aW9kKS4gVGhlIGhvdXJzIGFyZSBpbiAyNC1ob3VyIGZvcm1hdDsKLSAgIDEyIGlzIG5vb24sIDEz IGlzIDFwbSwgYW5kIHNvIG9uLiBGaWVsZHMgb21pdHRlZCBmcm9tIHRoZSByaWdodCBkZWZhdWx0 Ci0gICB0byB6ZXJvLiBGaWVsZHMgY2FuIGJlIG9taXR0ZWQgZnJvbSB0aGUgbGVmdCBvciBtaWRk bGUgYnkgaW5jbHVkaW5nIHRoZQotICAgZmllbGQncyB0ZXJtaW5hdGluZyBjb2xvbi4gRXhhbXBs ZXM6Ci0KLSAgMTE6NTk6NTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTE6NTk6 NTkgQU0pCi0gIDExOjU5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDExOjU5 OjAwIEFNKQotICAxMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMTow MDowMCBBTSkKLSAgMTE6NTk6NTkuMzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTE6 NTk6NTkgQU0pCi0gIDExOjU5OjU5LjY2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE5v b24pCi0gIDAzOjIxOjAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDM6MjE6MDAg QU0pCi0gIDM6MjE6MDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDM6MjE6MDAg QU0pCi0gIDE1OjIxOjAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDM6MjE6MDAg UE0pCi0gIDoyMTowMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAwOjIxOjAw IEFNKQotICA6OjAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwMDowMDow MSBBTSkKLSAgMTE6OjU5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTE6MDA6 NTkgQU0pCi0KLSAgIExlYWRpbmcgemVyb3MgY2FuIGJlIG9taXR0ZWQsIGJ1dCBpdCBpcyBjdXN0 b21hcnkgYW5kIG1vcmUgcmVhZGFibGUgdG8KLSAgIGtlZXAgdGhlbSBpbiB0aGUgbWludXRlIGFu ZCBzZWNvbmQgZmllbGRzOgotCi0gIDAzOjAyOjAxICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKDAzOjAyOjAxIEFNKQotICAzOjAyOjAxICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICgwMzowMjowMSBBTSkKLSAgMzoyOjEgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoMDM6MDI6MDEgQU0pCi0KLSAgIEFNL1BNIG5vdGF0aW9uIGlzIGFjY2VwdGVkIGlm IHlvdSB3aXNoIHRvIHVzZSBpdDoKLQotICAxMTo1OTo1OSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICgxMTo1OTo1OSBBTSkKLSAgMTE6NTk6NTlBTSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoMTE6NTk6NTkgQU0pCi0gIDExOjU5OjU5QS5NLiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKDExOjU5OjU5IEFNKQotICAxMTo1OTo1OWFtICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgxMTo1OTo1OSBBTSkKLSAgMTE6NTk6NTlhLm0uICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoMTE6NTk6NTkgQU0pCi0gIDExOjU5OjU5UE0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKDExOjU5OjU5IFBNID0gMjM6NTk6NTkpCi0gIDExOjU5OjU5UC5NLiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKDExOjU5OjU5IFBNID0gMjM6NTk6NTkpCi0gIDEx OjU5OjU5cG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDExOjU5OjU5IFBNID0gMjM6 NTk6NTkpCi0gIDExOjU5OjU5cC5tLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDExOjU5 OjU5IFBNID0gMjM6NTk6NTkpCi0KLSAgIFlvdSBjYW4gb21pdCB0aGUgY29sb25zIGlmIHlvdSB3 aXNoLCBpbiB3aGljaCBjYXNlIEtlcm1pdCB1c2VzIHRoZQotICAgZm9sbG93aW5nIHJ1bGVzIHRv IGludGVycHJldCB0aGUgdGltZToKLQotICAgIDEuIDYgZGlnaXRzIGlzIGhoOm1tOnNzLCBlLmcu IDEyMzQ1NiBpcyAxMjozNDo1Ni4KLSAgICAyLiA1IGRpZ2l0cyBpcyBoOm1tOnNzLCBlLmcuIDEy MzQ1IGlzIDE6MjM6NDUuCi0gICAgMy4gNCBkaWdpdHMgaXMgaGg6bW0sIGUuZy4gMTIzNCBpcyAx MjozNC4KLSAgICA0LiAzIGRpZ2l0cyBpcyBoOm1tLCBlLmcuIDEyMyBpcyAxOjIzLgotICAgIDUu IDIgZGlnaXRzIGlzIGhoLCBlLmcuIDEyIGlzIDEyOjAwLgotICAgIDYuIDEgZGlnaXQgaXMgaCAo dGhlIGhvdXIpLCBlLmcuIDEgaXMgMTowMC4KLQotICAgRXhhbXBsZXM6Ci0KLSAgMSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMDE6MDA6MDAgQU0pCi0gIDEwICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEwOjAwOjAwIEFNKQotICAyMzAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwMjozMDowMCBBTSkKLSAgMjMwcG0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMDI6MzA6MDAgUE0gPSAxNDozMDow MCkKLSAgMTExNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTE6MTU6MDAg QU0pCi0gIDIzMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDExOjE1OjAw IFBNID0gMjM6MTU6MDAgUE0pCi0gIDIzMTUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKDAyOjMxOjUwIEFNKQotICAyMzE1MDAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICgyMzoxNTowMCBQTSkKLQotOC4xMy4zLiBUaW1lIFpvbmVzCi0KLSAgIElmIGEgdGlt ZSBpcyBnaXZlbiwgaXQgY2FuIChidXQgbmVlZCBub3QpIGJlIGZvbGxvd2VkIGJ5IGEgdGltZSB6 b25lCi0gICBkZXNpZ25hdG9yLiBJZiBubyB0aW1lIHpvbmUgaXMgaW5jbHVkZWQsIHRoZSB0aW1l IGlzIHRyZWF0ZWQgYXMgbG9jYWwKLSAgIHRpbWUgYW5kIG5vIHRpbWV6b25lIGNvbnZlcnNpb25z IGFyZSBwZXJmb3JtZWQuCi0KLSAgIFRoZSBwcmVmZXJyZWQgdGltZSB6b25lIGRlc2lnbmF0b3Ig aXMgdGhlIFVUQyBPZmZzZXQsIGFzIHNwZWNpZmllZCBpbgotICAgWzQ4MV1SRkMgMjgyMjogYSBw bHVzIHNpZ24gb3IgbWludXMgc2lnbiBpbW1lZGlhdGVseSBmb2xsb3dlZCBieQotICAgZXhhY3Rs eSBmb3VyIGRlY2ltYWwgZGlnaXRzLCBzaWduaWZ5aW5nIHRoZSBkaWZmZXJlbmNlIGluIGhoICho b3VycykKLSAgIGFuZCBtbSAobWludXRlcykgZnJvbSBVbml2ZXJzYWwgQ29vcmRpbmF0ZWQgVGlt ZSAoVVRDLCBhbHNvIGtub3duIGFzCi0gICBHcmVlbndpY2ggTWVhbiBUaW1lLCBvciBHTVQpLCB3 aXRoIG5lZ2F0aXZlIG51bWJlcnMgdG8gdGhlIFdlc3QgYW5kCi0gICBwb3NpdGl2ZSBudW1iZXJz IHRvIHRoZSBFYXN0LiBGb3IgZXhhbXBsZToKLQotICBGcmksIDEzIEp1bCAyMDAxIDEyOjU0OjI5 IC0wNzAwCi0KLSAgIGluZGljYXRlcyBhIGxvY2FsIHRpbWUgb2YgMTI6NTQ6MjkgdGhhdCBpcyAw NyBob3VycyBhbmQgMDAgbWludXRlcwotICAgYmVoaW5kIChsZXNzIHRoYW4sIEVhc3Qgb2YpIFVu aXZlcnNhbCBUaW1lLiBUaGUgc3BhY2UgaXMgb3B0aW9uYWwsIHNvCi0gICB0aGUgZXhhbXBsZSBj b3VsZCBhbHNvIGJlIHdyaXR0ZW4gYXM6Ci0KLSAgRnJpLCAxMyBKdWwgMjAwMSAxMjo1NDoyOS0w NzAwCi0KLSAgIFRoZSBmb2xsb3dpbmcgc3ltYm9saWMgdGltZSB6b25lcyBhcmUgYWxzbyBhY2Nl cHRlZCwgYXMgc3BlY2lmaWVkIGJ5Ci0gICBbNDgyXVJGQyAyODIyIGFuZC9vciBpbiBJU08gODYw MToKLQotICBHTVQgID0gICswMDAwICAgICAgIEdyZWVud2ljaCBNZWFuIFRpbWUKLSAgWiAgICA9 ICArMDAwMCAgICAgICBadWx1IChaZXJvIE1lcmlkaWFuKSBUaW1lCi0gIFVUQyAgPSAgKzAwMDAg ICAgICAgVW5pdmVyc2FsIENvb3JkaW5hdGVkIFRpbWUKLSAgVVQgICA9ICArMDAwMCAgICAgICBV bml2ZXJzYWwgVGltZQotICBFRFQgID0gIC0wNDAwICAgICAgIEVhc3Rlcm4gKFVTQSkgRGF5bGln aHQgVGltZQotICBFU1QgID0gIC0wNTAwICAgICAgIEVhc3Rlcm4gKFVTQSkgU3RhbmRhcmQgVGlt ZQotICBDRFQgID0gIC0wNTAwICAgICAgIENlbnRyYWwgKFVTQSkgRGF5bGlnaHQgVGltZQotICBD U1QgID0gIC0wNjAwICAgICAgIENlbnRyYWwgKFVTQSkgU3RhbmRhcmQgVGltZQotICBNRFQgID0g IC0wNjAwICAgICAgIE1vdW50YWluIChVU0EpIERheWxpZ2h0IFRpbWUKLSAgTVNUICA9ICAtMDcw MCAgICAgICBNb3VudGFpbiAoVVNBKSBTdGFuZGFyZCBUaW1lCi0gIFBEVCAgPSAgLTA3MDAgICAg ICAgUGFjaWZpYyAoVVNBKSBEYXlsaWdodCBUaW1lCi0gIFBTVCAgPSAgLTA4MDAgICAgICAgUGFj aWZpYyAoVVNBKSBTdGFuZGFyZCBUaW1lCi0KLSAgIE5vdGUgdGhhdCBHTVQsIFosIFVUQywgYW5k IFVUIGFsbCBleHByZXNzIHRoZSBzYW1lIGNvbmNlcHQ6IHN0YW5kYXJkCi0gICAobm90IGRheWxp Z2h0KSB0aW1lIGF0IHRoZSBaZXJvIE1lcmlkaWFuLiBVVEMsIGJ5IHRoZSB3YXksIGlzIGFuCi0g ICBpbnRlcm5hdGlvbmFsIHN0YW5kYXJkIHN5bWJvbCBhbmQgZG9lcyBub3QgY29ycmVzcG9uZCB0 byB0aGUgb3JkZXIgb2YKLSAgIHRoZSBFbmdsaXNoIHdvcmRzLCBVbml2ZXJzYWwgQ29vcmRpbmF0 ZWQgVGltZSwgYnV0IGl0IGhhcHBlbnMgdG8gaGF2ZQotICAgdGhlIHNhbWUgaW5pdGlhbCBsZXR0 ZXJzIGFzIHRoZXNlIHdvcmRzLiBPZiBjb3Vyc2UgaHVuZHJlZHMgb2Ygb3RoZXIKLSAgIHN5bWJv bGljIHRpbWV6b25lcyBhbmQgdmFyaWF0aW9ucyBleGlzdCwgYnV0IHRoZXkgYXJlIG5vdCBzdGFu ZGFyZGl6ZWQsCi0gICBhbmQgYXJlIHRoZXJlZm9yZSBub3Qgc3VwcG9ydGVkIGJ5IEtlcm1pdC4K LQotICAgV2hlbiBhIHRpbWUgem9uZSBpcyBpbmNsdWRlZCB3aXRoIGEgdGltZSwgdGhlIHRpbWUg aXMgY29udmVydGVkIHRvCi0gICBsb2NhbCB0aW1lLiBJbiBjYXNlIHRoZSBjb252ZXJzaW9uIGNy b3NzZXMgYSBtaWRuaWdodCBib3VuZGFyeSwgdGhlCi0gICBkYXRlIGlzIGFkanVzdGVkIGFjY29y ZGluZ2x5LiBFeGFtcGxlcyBjb252ZXJ0aW5nIHRvIEVTVCAoRWFzdGVybiBVU0EKLSAgIFN0YW5k YXJkIFRpbWUgPSAtMDUwMCk6Ci0KLSAxMTozMDowMCAgICAgID0gIDExOjMwOjAwCi0gMTE6MzA6 MDAgRVNUICA9ICAxMTozMDowMAotIDExOjMwOjAwIEdNVCAgPSAgMDY6MzA6MDAKLSAxMTozMDow MCBQU1QgID0gIDE0OjMwOjAwCi0gMTE6MzA6MDBaICAgICA9ICAwNjozMDowMAotIDExOjMwUE0g R01UICAgPSAgMTg6MzA6MDAKLSAxMTozMCAtMDUwMCAgID0gIDExOjMwOjAwCi0gMTE6MzAgLTA4 MDAgICA9ICAwODozMDowMAotIDExOjMwICswMjAwICAgPSAgMDQ6MzA6MDAKLQotICAgVW5saWtl IG1vc3Qgb2YgS2VybWl0J3Mgb3RoZXIgZGF0ZS10aW1lIGNvbnZlcnNpb25zLCB0aW1lem9uZSBr bm93bGVkZ2UKLSAgIChzcGVjaWZpY2FsbHksIHRoZSBvZmZzZXQgb2YgbG9jYWwgdGltZSBmcm9t IFVUQykgaXMgZW1ib2RpZWQgaW4gdGhlCi0gICB1bmRlcmx5aW5nIG9wZXJhdGluZyBzeXN0ZW0s IG5vdCBpbiBLZXJtaXQgaXRzZWxmLCBhbmQgYW55IGNvbnZlcnNpb24KLSAgIGVycm9ycyBpbiB0 aGlzIGRlcGFydG1lbnQgYXJlIHRoZSBmYXVsdCBvZiB0aGUgT1MuIEZvciBleGFtcGxlLCBtb3N0 Ci0gICBVTklYIHBsYXRmb3JtcyBkbyBub3QgcGVyZm9ybSBjb252ZXJzaW9ucyBmb3IgeWVhcnMg cHJpb3IgdG8gMTk3MC4KLQotOC4xMy40LiBEZWx0YSBUaW1lCi0KLSAgIERhdGUvdGltZSBleHBy ZXNzaW9ucyBjYW4gYmUgY29tcG9zZWQgb2YgYSBkYXRlIGFuZC9vciB0aW1lIGFuZCBhIGRlbHRh Ci0gICB0aW1lLCBvciBhIGRlbHRhIHRpbWUgYnkgaXRzZWxmLiBXaGVuIGEgZGVsdGEgdGltZSBp cyBnaXZlbiBieSBpdHNlbGYsCi0gICBpdCBpcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBsb2Nh bCBkYXRlIGFuZCB0aW1lLiBEZWx0YSB0aW1lcyBoYXZlIHRoZQotICAgZm9sbG93aW5nIGdlbmVy YWwgZm9ybWF0OgotCi0gIHsrLC19W251bWJlciB1bml0c11baGhbOm1tWzpzc11dXQotCi0gICBJ biBvdGhlciB3b3JkcywgYSBkZWx0YSB0aW1lIGFsd2F5cyBzdGFydHMgd2l0aCBhIHBsdXMgb3Ig bWludXMgc2lnbiwKLSAgIHdoaWNoIGlzIGZvbGxvd2VkIGJ5IGEgInBhcnQxIiwgYSAicGFydDIi LCBvciBib3RoLiBUaGUgInBhcnQxIiwgaWYKLSAgIGdpdmVuLCBzcGVjaWZpZXMgYSBudW1iZXIg b2YgZGF5cywgd2Vla3MsIG1vbnRocywgb3IgeWVhcnM7ICJwYXJ0MiIKLSAgIHNwZWNpZmllcyBh IHRpbWUgaW4gaGg6bW06c3Mgbm90YXRpb24uIEluIGFyaXRobWV0aWMgdGVybXMsIHRoZXNlCi0g ICByZXByZXNlbnRzIHNvbWUgbnVtYmVyIG9mIGRheXMgb3Igb3RoZXIgYmlnIHRpbWUgdW5pdHMs IGFuZCB0aGVuIGEKLSAgIGZyYWN0aW9uIG9mIGEgZGF5IGV4cHJlc3NlZCBhcyBob3VycywgbWlu dXRlcywgYW5kIHNlY29uZHM7IHRoZXNlIGFyZQotICAgdG8gYmUgYWRkZWQgdG8gb3Igc3VidHJh Y3RlZCBmcm9tIHRoZSBnaXZlbiAob3IgaW1wbGllZCkgZGF0ZSBhbmQgdGltZS4KLSAgIFRoZSBz eW50YXggaXMgc29tZXdoYXQgZmxleGlibGUsIGFzIHNob3duIGJ5IHRoZSBmb2xsb3dpbmcgZXhh bXBsZXM6Ci0KLSAgKzEgZGF5ICAgICAgICAgICAgICAgIChQbHVzIG9uZSBkYXkpCi0gICsxZGF5 ICAgICAgICAgICAgICAgICAoRGl0dG8pCi0gICsxZCAgICAgICAgICAgICAgICAgICAoRGl0dG8p Ci0gICsgMSBkYXkgICAgICAgICAgICAgICAoRGl0dG8pCi0gICsgMSBkYXkgMzowMCAgICAgICAg ICAoUGx1cyBvbmUgZGF5IGFuZCAzIGhvdXJzKQotICArMWQzOjAwICAgICAgICAgICAgICAgKERp dHRvKQotICArMWQzICAgICAgICAgICAgICAgICAgKERpdHRvKQotICArMzowMDowMCAgICAgICAg ICAgICAgKFBsdXMgMyBob3VycykKLSAgKzM6MDAgICAgICAgICAgICAgICAgIChEaXR0bykKLSAg KzMgICAgICAgICAgICAgICAgICAgIChEaXR0bykKLSAgKzIgZGF5cyAgICAgICAgICAgICAgIChQ bHVzIDIgZGF5cykKLSAgLTEyIGRheXMgNzoxNDoyMiAgICAgIChNaW51cyAxMiBkYXlzLCA3IGhv dXJzLCAxNCBtaW51dGVzLCBhbmQgMjIgc2Vjb25kcykKLQotICAgVGhlIHdvcmRzICJ3ZWVrIiwg Im1vbnRoIiwgYW5kICJ5ZWFyIiBjYW4gYmUgdXNlZCBsaWtlICJkYXkiIGluIHRoZQotICAgZXhh bXBsZXMgYWJvdmUuIEEgd2VlayBpcyBleGFjdGx5IGVxdWl2YWxlbnQgdG8gNyBkYXlzLiBXaGVu IG1vbnRocyBhcmUKLSAgIHNwZWNpZmllZCwgdGhlIG51bWVyaWMgbW9udGggbnVtYmVyIG9mIHRo ZSBkYXRlIGlzIGluY3JlbWVudGVkIG9yCi0gICBkZWNyZW1lbnRlZCBieSB0aGUgZ2l2ZW4gbnVt YmVyLCBhbmQgdGhlIHllYXIgYW5kIGRheSBhZGp1c3RlZAotICAgYWNjb3JkaW5nbHkgaWYgbmVj ZXNzYXJ5IChmb3IgZXhhbXBsZSwgMzEtSmFuLTIwMDEgKzFtb250aCA9Ci0gICAwMy1NYXItMjAw MSBiZWNhdXNlIEZlYnJ1YXJ5IGRvZXMgbm90IGhhdmUgMzEgZGF5cykuIFdoZW4geWVhcnMgYXJl Ci0gICBzcGVjaWZpZWQsIHRoZXkgYXJlIGFkZGVkIG9yIHN1YnRyYWN0ZWQgdG8gdGhlIGJhc2Ug eWVhci4gRXhhbXBsZXMKLSAgIChhc3N1bWluZyB0aGUgY3VycmVudCBkYXRlIGlzIDEwLUF1Zy0y MDAxIGFuZCB0aGUgY3VycmVudCB0aW1lIGlzCi0gICAxOToyMToxMSk6Ci0KLSAgMTgtU2VwLTIw MDEgKzFkYXkgICAgICAgICAgICAgICgyMDAxMDkxOCAwMDowMDowMCkKLSAgdG9kYXkgKzFkYXkg ICAgICAgICAgICAgICAgICAgICgyMDAxMDgxMSAwMDowMDowMCkKLSAgbm93KzFkICAgICAgICAg ICAgICAgICAgICAgICAgICgyMDAxMDgxMSAxOToyMToxMSkKLSAgKyAxIGRheSAgICAgICAgICAg ICAgICAgICAgICAgICgyMDAxMDgxMSAxOToyMToxMSkKLSAgKyAxIGRheSAzOjE0OjQyICAgICAg ICAgICAgICAgICgyMDAxMDgxMSAyMjozNTo1NCkKLSAgKyA3IHdlZWtzICAgICAgICAgICAgICAg ICAgICAgICgyMDAxMDkyOCAxOToyMToxMSkKLSAgKzFkMzoxNDo0MiAgICAgICAgICAgICAgICAg ICAgICgyMDAxMDgxMSAyMjozNTo1NCkKLSAgKzF3MzoxNDo0MiAgICAgICAgICAgICAgICAgICAg ICgyMDAxMDgxNyAyMjozNTo1NCkKLSAgKzFtMzoxNDo0MiAgICAgICAgICAgICAgICAgICAgICgy MDAxMDkxMCAyMjozNTo1NCkKLSAgKzF5MzoxNDo0MiAgICAgICAgICAgICAgICAgICAgICgyMDAy MDgxMCAyMjozNTo1NCkKLSAgMiBmZWIgMjAwMSArIDEwIHllYXJzICAgICAgICAgICgyMDExMDIw OCAwMDowMDowMCkKLSAgMjAwMS0wMi0wOCArMTB5MTIgICAgICAgICAgICAgICgyMDExMDIwOCAx MjowMDowMCkKLSAgMzEtZGVjLTE5OTkgMjM6NTk6NTkrMDA6MDA6MDEgICgyMDAwMDEwMSAwMDow MDowMCkKLSAgMjgtZmViLTE5OTYgKzFkYXkgICAgICAgICAgICAgICgxOTk2MDIyOSAwMDowMDow MCkgKGxlYXAgeWVhcikKLSAgMjgtZmViLTE5OTcgKzFkYXkgICAgICAgICAgICAgICgxOTk3MDMw MSAwMDowMDowMCkgKG5vbmxlYXAgeWVhcikKLSAgMjgtZmViLTE5OTcgKzFtb250aCAgICAgICAg ICAgICgxOTk3MDMyOCAwMDowMDowMCkKLSAgMjgtZmViLTE5OTcgKzFtb250aCAxMTo1OTo1OSAg ICgxOTk3MDMyOCAxMTo1OTo1OSkKLSAgMjgtZmViLTE5OTcgKzIweWVhcnMgICAgICAgICAgICgy MDE3MDIyOCAwMDowMDowMCkKLSAgMjgtZmViLTE5OTcgKzgwMDB5ZWFycyAgICAgICAgICg5OTk3 MDIyOCAwMDowMDowMCkKLQotICAgRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBWTVMsIHRoZSBmb2xs b3dpbmcgc3BlY2lhbCBkZWx0YS10aW1lIGZvcm1hdCBpcwotICAgYWxzbyBhY2NlcHRlZDoKLQot ICArbnVtYmVyLWhoOm1tOnNzCi0gIC1udW1iZXItaGg6bW06c3MKLQotICAgKG5vIHNwYWNlcyku IFRoZSBoeXBoZW4gYWZ0ZXIgdGhlIG51bWJlciBpbmRpY2F0ZXMgZGF5cy4gSXQgY29ycmVzcG9u ZHMKLSAgIGV4YWN0bHkgdG8gdGhlIEtlcm1pdCBub3RhdGlvbjoKLQotICArbnVtYmVyZGhoOm1t OnNzCi0gIC1udW1iZXJkaGg6bW06c3MKLQotICAgVGhlIGZvbGxvd2luZyBmb3JtcyBhbGwgaW5k aWNhdGUgZXhhY3RseSB0aGUgc2FtZSBkYXRlIGFuZCB0aW1lOgotCi0gIDE4LVNlcC0yMDAxIDEy OjM0OjU2ICsxLTM6MjM6MDEKLSAgMTgtU2VwLTIwMDEgMTI6MzQ6NTYgKzFkMzoyMzowMQotICAx OC1TZXAtMjAwMSAxMjozNDo1NiArMSBkYXkgMzoyMzowMQotCi0gICBhbmQgbWVhbiAiYWRkIGEg ZGF5IHBsdXMgMyBob3VycywgMjMgbWludXRlcywgYW5kIDEgc2Vjb25kIiB0byB0aGUKLSAgIGdp dmVuIGRhdGUuCi0KLSAgIE5vdGUgdGhhdCBkZWx0YSB0aW1lcyBhcmUgbm90IGF0IGFsbCB0aGUg c2FtZSBhcyBVVEMgb2Zmc2V0czsgdGhlCi0gICBmb3JtZXIgc3BlY2lmaWVzIGFuIGFkanVzdG1l bnQgdG8gdGhlIGdpdmVuIGRhdGUvdGltZSBhbmQgdGhlIGxhdHRlcgotICAgc3BlY2lmaWVzIHRo YXQgdGhlIGxvY2FsIHRpbWUgaXMgYSBwYXJ0aWN1bGFyIGRpc3RhbmNlIGZyb20gVW5pdmVyc2Fs Ci0gICBUaW1lLCBmb3IgZXhhbXBsZToKLQotICAxMS1BdWctMjAwMSAxMjozNDo1NiAtMDgwMCAg ICAgICAgICAoMjAwMTA4MTEgMTY6MzQ6NTYgLS0gVVRDIE9mZnNldCkKLSAgMTEtQXVnLTIwMDEg MTI6MzQ6NTYgLTA4OjAwICAgICAgICAgKDIwMDEwODExIDA0OjM0OjU2IC0tIERlbHRhIHRpbWUp Ci0KLSAgIElmIHlvdSBnaXZlIGEgdGltZSBmb2xsb3dlZCBieSBhIG1vZGlmaWVyIHRoYXQgc3Rh cnRzIHdpdGggYSArIG9yIC0KLSAgIHNpZ24sIGhvdyBkb2VzIEtlcm1pdCBrbm93IHdoZXRoZXIg aXQncyBhIFVUQyBvZmZzZXQgb3IgYSBkZWx0YSB0aW1lPwotICAgSXQgaXMgdHJlYXRlZCBhcyBh IFVUQyBvZmZzZXQgaWYgdGhlIHNpZ24gaXMgZm9sbG93ZWQgYnkgZXhhY3RseSBmb3VyCi0gICBk ZWNpbWFsIGRpZ2l0czsgb3RoZXJ3aXNlIGl0IGlzIGEgZGVsdGEgdGltZS4gRXhhbXBsZXMgKGZv ciBVU0EgRWFzdGVybgotICAgRGF5bGlnaHQgVGltZSk6Ci0KLSAgMTEtQXVnLTIwMDEgMTI6MzQ6 NTYgLTA4MDAgICAgICAgICAgKDIwMDEwODExIDE2OjM0OjU2IC0tIFVUQyBPZmZzZXQpCi0gIDEx LUF1Zy0yMDAxIDEyOjM0OjU2IC0wODowMCAgICAgICAgICgyMDAxMDgxMSAwNDozNDo1NiAtLSBE ZWx0YSB0aW1lKQotICAxMS1BdWctMjAwMSAxMjozNDo1NiAtODAwICAgICAgICAgICAoMjAwMTA4 MTEgMDQ6MzQ6NTYgLS0gRGVsdGEgdGltZSkKLSAgMTEtQXVnLTIwMDEgMTI6MzQ6NTYgLTggICAg ICAgICAgICAgKDIwMDEwODExIDA0OjM0OjU2IC0tIERlbHRhIHRpbWUpCi0KLSAgIFRoZSBmaXJz dCBleGFtcGxlIHNheXMgdGhhdCBhdCBzb21lIHVua25vd24gcGxhY2Ugd2hpY2ggaXMgOCBob3Vy cwotICAgYWhlYWQgb2YgVW5pdmVyc2FsIFRpbWUsIHRoZSB0aW1lIGlzIDEyOjM0OjU2LCBhbmQg dGhpcyBjb3JyZXNwb25kcyB0bwotICAgMTY6MzQ6NTYgaW4gRWFzdGVybiBEYXlsaWdodCB0aW1l LiBUaGUgc2Vjb25kIGV4YW1wbGUgc2F5cyB0byBzdWJ0cmFjdAotICAgOCBob3VycyBmcm9tIHRo ZSBsb2NhbCB0aW1lLiBUaGUgdGhpcmQgYW5kIGZvdXJ0aCBhcmUgZGVsdGEgdGltZXMKLSAgIGJl Y2F1c2UsIGV2ZW4gdGhvdWdoIGEgY29sb24gaXMgbm90IGluY2x1ZGVkLCB0aGUgdGltZSBkb2Vz IG5vdCBjb25zaXN0Ci0gICBvZiBleGFjdGx5IDQgZGlnaXRzLgotCi0gICBXaGVuIGEgZGVsdGEg dGltZSBpcyB3cml0dGVuIGFmdGVyIGEgdGltZXpvbmUsIGhvd2V2ZXIsIHRoZXJlIGlzIG5vCi0g ICBhbWJpZ3VpdHkgYW5kIG5vIHN5bnRheCBkaXN0aW5jdGlvbiBpcyByZXF1aXJlZDoKLQotICAx MS1BdWctMjAwMSAxMjozNDo1NiAtMDgwMCAtMDgwMCAgICAoMjAwMTA4MTEgMDg6MzQ6NTYpCi0g IDExLUF1Zy0yMDAxIDEyOjM0OjU2IC0wODAwIC0wODowMCAgIChEaXR0bykKLSAgMTEtQXVnLTIw MDEgMTI6MzQ6NTYgLTA4OjAwIC0wODowMCAgKElsbGVnYWwpCi0KLTguMTMuNS4gVGhlIERBVEUg Q29tbWFuZAotCi0gICBPYnZpb3VzbHkgYSBncmVhdCBtYW55IGNvbWJpbmF0aW9ucyBvZiBkYXRl LCB0aW1lLCB0aW1lIHpvbmUsIGFuZCBkZWx0YQotICAgdGltZSBhcmUgcG9zc2libGUsIGFzIHdl bGwgYXMgbWFueSBmb3JtYXR0aW5nIG9wdGlvbnMuIFRoZSBwdXJwb3NlIG9mCi0gICBhbGwgdGhp cyBmbGV4aWJpbGl0eSBpcyB0byBjb21wbHkgd2l0aCBhcyBtYW55IHN0YW5kYXJkcyBhcyBwb3Nz aWJsZSAtLQotICAgSW50ZXJuZXQgUkZDcywgSVNPIHN0YW5kYXJkcywgYW5kIHByb3ZlbiBjb3Jw b3JhdGUgc3RhbmRhcmRzIC0tIGFzIHdlbGwKLSAgIGFzIHdpdGggbm90YXRpb25zIGNvbW1vbmx5 IHVzZWQgYnkgcmVhbCBwZW9wbGUsIGluIG9yZGVyIHRoYXQgZGF0ZXMgYW5kCi0gICB0aW1lcyBm cm9tIHRoZSB3aWRlc3QgdmFyaWV0eSBvZiBzb3VyY2VzIGNhbiBiZSBhc3NpZ25lZCB0byBhIHZh cmlhYmxlCi0gICBhbmQgdXNlZCBpbiBhbnkgZGF0ZS10aW1lIGZpZWxkIGluIGFueSBLZXJtaXQg Y29tbWFuZC4KLQotICAgWW91IGNhbiB0ZXN0IGFueSBkYXRlLWFuZC9vci10aW1lIGZvcm1hdCB3 aXRoIHRoZSBEQVRFIGNvbW1hbmQsIHdoaWNoCi0gICBjb252ZXJ0cyBpdCB0byBzdGFuZGFyZCB5 eXl5bW1kZCBoaDptbTpzcyBmb3JtYXQgaWYgaXQgaXMgdW5kZXJzdG9vZCwKLSAgIG9yIGVsc2Ug Z2l2ZXMgYW4gZXhwbGljaXQgZXJyb3IgbWVzc2FnZSAocmF0aGVyIHRoYW4ganVzdCAiQkFEIERB VEUiIGFzCi0gICBpbiBwcmV2aW91cyBDLUtlcm1pdCByZWxlYXNlcykgdG8gaW5kaWNhdGUgd2hh dCBpcyB3cm9uZyB3aXRoIGl0LgotICAgRXhhbXBsZXMgKG9uIFR1ZXNkYXksIDMxIEp1bHkgMjAw MSBpbiBOZXcgWW9yayBDaXR5LCBFYXN0ZXJuIERheWxpZ2h0Ci0gICBUaW1lLCBVVEMgLTA0MDAp OgotCi0gIERBVEUgY29tbWFuZCBhcmd1bWVudCAgICAgICAgICAgICAgICAgICBSZXN1bHQKLSAg MTI6MzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDEwNzMxIDEyOjMwOjAw Ci0gIDEyOjMwOjAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDczMSAxMjoz MDowMQotICAxMjozMDowMS41ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA3MzEg MTI6MzA6MDIKLSAgMTIzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDEw NzMxIDEyOjMwOjAwCi0gIDIzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAy MDAxMDczMSAwMjozMDowMAotICAyMzArMWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMjAwMTA4MDEgMDI6MzA6MDAKLSAgMjMwKzFkMzowMCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDIwMDEwODAxIDA1OjMwOjAwCi0gIDIwMDEwNzE4IDE5OjIxOjE1ICAgICAgICAgICAg ICAgICAgICAgICAyMDAxMDcxOCAxOToyMToxNQotICAyMDAxMDcxOF8xOTIxMTUgICAgICAgICAg ICAgICAgICAgICAgICAgMjAwMTA3MTggMTk6MjE6MTUKLSAgMjAwMTA3MThUMTkyMTE1ICAgICAg ICAgICAgICAgICAgICAgICAgIDIwMDEwNzE4IDE5OjIxOjE1Ci0gIDE4IEp1bCAyMDAxICswNDAw ICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDcxNyAyMzo1OTo1OQotICAxOCBKdWwgMjAwMSAx OTIxMTUgICAgICAgICAgICAgICAgICAgICAgMjAwMTA3MTggMTk6MjE6MTUKLSAgMTggSnVsIDIw MDEgMTkyMTE1LjggICAgICAgICAgICAgICAgICAgIDIwMDEwNzE4IDE5OjIxOjE2Ci0gIDE4LUp1 bC0yMDAxVDE5MjEgICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDcxOCAxOToyMTowMAotICAx OC1KdWwtMjAwMSAxOTIxWiAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA3MTggMTU6MjE6MDAK LSAgMTgtSnVsLTIwMDEgMTkyMSBHTVQgICAgICAgICAgICAgICAgICAgIDIwMDEwNzE4IDE1OjIx OjAwCi0gIDE4LUp1bC0yMDAxIDE5MjEgVVRDICAgICAgICAgICAgICAgICAgICAyMDAxMDcxOCAx NToyMTowMAotICAxOC1KdWwtMjAwMSAxOTIxIFogICAgICAgICAgICAgICAgICAgICAgMjAwMTA3 MTggMTU6MjE6MDAKLSAgMTgtSnVsLTIwMDEgMTkyMVogICAgICAgICAgICAgICAgICAgICAgIDIw MDEwNzE4IDE1OjIxOjAwCi0gIDE4LUp1bC0yMDAxIDE5MjEgLTA0OjAwOjAwICAgICAgICAgICAg ICAyMDAxMDcxOCAxOToyMTowMAotICAyMS1KdWwtMjAwMV8wODoyMDowMGFtICAgICAgICAgICAg ICAgICAgMjAwMTA3MjEgMDg6MjA6MDAKLSAgMjEtSnVsLTIwMDFfODoyMDowMFAuTS4gICAgICAg ICAgICAgICAgIDIwMDEwNzIxIDIwOjIwOjAwCi0gIEZyaSBKdWwgMjAgMTE6MjY6MjUgMjAwMSAg ICAgICAgICAgICAgICAyMDAxMDcyMCAxMToyNjoyNQotICBGcmkgSnVsIDIwIDExOjI2OjI1IEdN VCAyMDAxICAgICAgICAgICAgMjAwMTA3MjAgMDc6MjY6MjUKLSAgU3VuLCA5IEFwciAyMDAwIDA2 OjQ2OjQ2ICswMTAwICAgICAgICAgIDIwMDAwNDA5IDAxOjQ2OjQ2Ci0gIFN1bmRheSwgOSBBcHIg MjAwMCAwNjo0Njo0NiArMDEwMCAgICAgICAyMDAwMDQwOSAwMTo0Njo0NgotICBub3cgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA3MzEgMTk6NDE6MTIKLSAgdG9kYXkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDEwNzMxIDAwOjAwOjAwCi0gIHRv ZGF5IDA5OjAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDczMSAwOTowMDowMAot ICB0b21vcnJvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA4MDEgMDA6MDA6 MDAKLSAgdG9tb3Jyb3cgMDk6MDAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDEwODAxIDA5 OjAwOjAwCi0gIHRvbW9ycm93IDA5OjAwIEdNVCAgICAgICAgICAgICAgICAgICAgICAyMDAxMDgw MSAwNTowMDowMAotICB5ZXN0ZXJkYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAw MTA3MzAgMDA6MDA6MDAKLSAgeWVzdGVyZGF5IDA5OjAwICAgICAgICAgICAgICAgICAgICAgICAg IDIwMDEwNzMwIDA5OjAwOjAwCi0gICsgMyBkYXlzICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAyMDAxMDgwMyAwMDowMDowMAotICArMyBkYXlzICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMjAwMTA4MDMgMDA6MDA6MDAKLSAgKzNkYXlzICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDIwMDEwODAzIDAwOjAwOjAwCi0gICsgM2RheXMgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAyMDAxMDgwMyAwMDowMDowMAotICArIDMgZGF5cyAwOTowMCAgICAg ICAgICAgICAgICAgICAgICAgICAgMjAwMTA4MDMgMDk6MDA6MDAKLSAgKyAyIHdlZWtzICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDEwODE0IDAwOjAwOjAwCi0gICsgMSBtb250aCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDgzMSAwMDowMDowMAotICAtIDcgbW9u dGhzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMDEyMzEgMDA6MDA6MDAKLSAgKyAx MCB5ZWFycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMTEwNzMxIDAwOjAwOjAwCi0g IGZyaWRheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDgwMyAwMDowMDow MAotICBzYXR1cmRheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA4MDQgMDA6 MDA6MDAKLSAgc3VuZGF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDEwODA1 IDAwOjAwOjAwCi0gIG1vbmRheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAx MDgwNiAwMDowMDowMAotICB0dWVzZGF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MjAwMTA3MzEgMDA6MDA6MDAKLSAgd2VkbmVzZGF5ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDIwMDEwODAxIDAwOjAwOjAwCi0gIHRodXJzZGF5ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAyMDAxMDgwMiAwMDowMDowMAotICBmcmlkYXkgMDc6MDAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMjAwMTA4MDMgMDc6MDA6MDAKLSAgdGh1cnNkYXkgMTowMHBtICAgICAgICAg ICAgICAgICAgICAgICAgIDIwMDEwODAyIDEzOjAwOjAwCi0gIHRodXJzZGF5IDE6MDBwbSBHTVQg ICAgICAgICAgICAgICAgICAgICAyMDAxMDgwMiAwOTowMDowMAotICBUaHUsIDEwIE5vdiA5NCAx MDo1MDo0NyBFU1QgICAgICAgICAgICAgMTk5NDExMTAgMTA6NTA6NDcKLSAgRnJpLCAyMCBPY3Qg MTk5NSAxODozNToxNSAtMDQwMCAoRURUKSAgIDE5OTUxMDIwIDE4OjM1OjE1Ci0gIDMxLzEyLzIw MDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAxMTIzMSAwMDowMDowMAotICAxMi8z MS8yMDAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMTEyMzEgMDA6MDA6MDAKLSAg MjAwMS1KdWx5LTIwICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDEwNzIwIDAwOjAwOjAw Ci0gIDIwMDEtU2VwdGVtYmVyLTMwICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDkzMCAwMDow MDowMAotICAzMC1TZXB0ZW1iZXItMjAwMSAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA5MzAg MDA6MDA6MDAKLSAgU2VwIDMwLCAyMDAxIDEyOjM0OjU2ICAgICAgICAgICAgICAgICAgIDIwMDEw OTMwIDEyOjM0OjU2Ci0gIFNlcHRlbWJlciAzMCwgMjAwMSAgICAgICAgICAgICAgICAgICAgICAy MDAxMDkzMCAwMDowMDowMAotICBTZXB0ZW1iZXIgMzAsIDIwMDEgNjMwICAgICAgICAgICAgICAg ICAgMjAwMTA5MzAgMDY6MzA6MDAKLSAgU2VwdGVtYmVyIDMwIDIwMDEgNjMwICAgICAgICAgICAg ICAgICAgIDIwMDEwOTMwIDA2OjMwOjAwCi0gIFNlcC0zMC0yMDAxIDEyOjM0OjU5ICAgICAgICAg ICAgICAgICAgICAyMDAxMDkzMCAxMjozNDo1OQotICAyMDAxMDgwNzExMzU0Mi4wMTQgICAgICAg ICAgICAgICAgICAgICAgMjAwMTA4MDcgMTE6MzUuNDIKLSAgMjAwMTA4MDcxMTM1NDIuMDE0WiAg ICAgICAgICAgICAgICAgICAgIDIwMDEwODA3IDA3OjM1OjQyCi0KLTguMTMuNi4gTmV3IERhdGUt VGltZSBGdW5jdGlvbnMKLQotICAgSW4gdGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbnMsIGRhdGUt dGltZSBmdW5jdGlvbiBhcmd1bWVudHMgYXJlIHRoZQotICAgc2FtZSBmcmVlLWZvcm1hdCBkYXRl LXRpbWUgc3RyaW5ncyBkaXNjdXNzZWQgYWJvdmUsIHdpdGggdGhlIHNhbWUKLSAgIGRlZmF1bHRz IGZvciBtaXNzaW5nIGZpZWxkcy4gVGhleSBhcmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8K LSAgIHN0YW5kYXJkIGZvcm1hdCBpbnRlcm5hbGx5IHByaW9yIHRvIHByb2Nlc3NpbmcuCi0KLSAg IFxmY3Z0ZGF0ZShkMSkKLSAgICAgICAgICBDb252ZXJ0cyB0aGUgZGF0ZS10aW1lIGQxIHRvIHN0 YW5kYXJkIGZvcm1hdCBhbmQgbG9jYWwgdGltZS4KLSAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGlz IG5vdCBuZXcsIGJ1dCBub3cgaXQgYWNjZXB0cyBhIHdpZGVyIHJhbmdlIG9mCi0gICAgICAgICAg YXJndW1lbnQgZm9ybWF0cyB0aGF0IGNhbiBpbmNsdWRlIHRpbWV6b25lcyBhbmQvb3IgZGVsdGEg dGltZXMuCi0gICAgICAgICAgSWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIG9taXR0ZWQsIHRoZSBj dXJyZW50IGRhdGUgYW5kIHRpbWUgYXJlCi0gICAgICAgICAgYXNzdW1lZC4gVGhlIG9wdGlvbmFs IHNlY29uZCBhcmd1bWVudCBpcyBhIGZvcm1hdCBjb2RlIGZvciB0aGUKLSAgICAgICAgICByZXN1 bHQ6Ci0KLSAgICAgbjEgPSAxOiB5eXl5LW1tbS1kZCBoaDptbTpzcyAobW1tID0gRW5nbGlzaCAz LWxldHRlciBtb250aAotICAgICBhYmJyZXZpYXRpb24pCi0gICAgIG4xID0gMjogZGQtbW1tLXl5 eXkgaGg6bW06c3MgKGRpdHRvKQotICAgICBuMSA9IDM6IHl5eXltbWRkaGhtbXNzIChhbGwgbnVt ZXJpYykKLQotICAgXGZ1dGNkYXRlKGQxKQotICAgICAgICAgIENvbnZlcnRzIHRoZSBkYXRlLXRp bWUgZDEgdG8gVW5pdmVyc2FsIENvb3JkaW5hdGVkIFRpbWUgKFVUQyksCi0gICAgICAgICAgYWxz byBrbm93biBhcyBHTVQgb3IgWnVsdSBvciBaZXJvLU1lcmlkaWFuIHRpbWUuIFRoZSBkZWZhdWx0 IGQxCi0gICAgICAgICAgaXMgTk9XLiBJZiBkMSBpcyBhIHZhbGlkIGRhdGUtdGltZSwgdGhlIFVU QyByZXN1bHQgaXMgcmV0dXJuZWQKLSAgICAgICAgICBpbiBzdGFuZGFyZCBmb3JtYXQsIHl5eXlt bWRkIGhoOnNzOm1tLgotCi0gICBcZmNtcGRhdGVzKGQxLGQyKQotICAgICAgICAgIENvbXBhcmVz IHR3byBmcmVlLWZvcm1hdCBkYXRlLXRpbWVzLCBkMSBhbmQgZDIsIGFuZCwgaWYgYm90aAotICAg ICAgICAgIGFyZ3VtZW50cyBhcmUgdmFsaWQsIHJldHVybnMgYSBudW1iZXI6IC0xIGlmIGQxIGlz IGVhcmxpZXIgdGhhbgotICAgICAgICAgIChiZWZvcmUpIGQyOyAwIGlmIGQxIGlzIHRoZSBzYW1l IGFzIGQyOyAxIGlmIGQxIGlzIGxhdGVyIHRoYW4KLSAgICAgICAgICAoYWZ0ZXIpIGQyLgotCi0g ICBcZmRpZmZkYXRlcyhkMSxkMikKLSAgICAgICAgICBDb21wdXRlcyB0aGUgZGlmZmVyZW5jZSBi ZXR3ZWVuIHR3byBmcmVlLWZvcm1hdCBkYXRlLXRpbWVzLCBkMQotICAgICAgICAgIGFuZCBkMi4g SWYgYm90aCBhcmd1bWVudHMgYXJlIHZhbGlkLCByZXR1cm5zIGEgZGVsdGEgdGltZSB3aGljaAot ICAgICAgICAgIGlzIG5lZ2F0aXZlIGlmIGQxIGlzIGVhcmxpZXIgdGhhbiAoYmVmb3JlKSBkMiBh bmQgcG9zaXRpdmUKLSAgICAgICAgICBvdGhlcndpc2UuIElmIGQxIGFuZCBkMiBhcmUgZXF1YWws IHRoZSByZXN1bHQgaXMgIiswOjAwIi4KLSAgICAgICAgICBPdGhlcndpc2UsIHRoZSByZXN1bHQg Y29uc2lzdHMgb2YgdGhlIG51bWJlciBvZiBkYXlzLCBob3VycywKLSAgICAgICAgICBtaW51dGVz LCBhbmQgc2Vjb25kcyB0aGF0IHNlcGFyYXRlIHRoZSB0d28gZGF0ZS10aW1lcy4gSWYgdGhlCi0g ICAgICAgICAgbnVtYmVyIG9mIGRheXMgaXMgemVybywgaXQgaXMgb21pdHRlZC4gSWYgdGhlIG51 bWJlciBvZiBkYXlzIGlzCi0gICAgICAgICAgbm9uemVybyBidXQgdGhlIGhvdXJzLCBtaW51dGVz LCBhbmQgc2Vjb25kcyBhcmUgYWxsIHplcm8sIHRoZQotICAgICAgICAgIHRpbWUgaXMgb21pdHRl ZC4gaWYgdGhlIHNlY29uZHMgYXJlIHplcm8sIHRoZXkgYXJlIG9taXR0ZWQuCi0KLSAgIFxmZGVs dGEyc2VjcyhkdCkKLSAgICAgICAgICBDb252ZXJ0cyBhIGRlbHRhIHRpbWUgdG8gc2Vjb25kcy4g Rm9yIGV4YW1wbGUsICIrMWQwMDowMDowMSIgdG8KLSAgICAgICAgICA4NjQwMS4gVmFsaWQgZGVs dGEgdGltZXMgbXVzdCBzdGFydCB3aXRoIGEgKyBvciAtIHNpZ24uIERheXMgYXJlCi0gICAgICAg ICAgYWNjZXB0ZWQgYXMgdGltZSB1bml0cywgYnV0IG5vdCB5ZWFycywgbW9udGhzLCBvciB3ZWVr cy4gSWYgdGhlCi0gICAgICAgICAgcmVzdWx0IHdvdWxkIG92ZXJmbG93IGEgY29tcHV0ZXIgbG9u ZyB3b3JkIChhcyB3b3VsZCBoYXBwZW4gd2l0aAotICAgICAgICAgIDMyLWJpdCBsb25nIHdvcmRz IHdoZW4gdGhlIG51bWJlciBvZiBkYXlzIGlzIGdyZWF0ZXIgdGhhbgotICAgICAgICAgIDI0ODU0 KSwgdGhlIGZ1bmN0aW9uIGZhaWxzLgotCi0gICBISU5UOiBBbHRob3VnaCBLZXJtaXQgaGFzIGEg bnVtYmVyIG9mIGJ1aWx0LWluIGRhdGUgYW5kIHRpbWUgdmFyaWFibGVzLAotICAgaXQgZG9lc24n dCBoYXZlIGEgc2luZ2xlIG9uZSBzdWl0YWJsZSBmb3Igd3JpdGluZyBhIHRpbWVzdGFtcC4gRm9y IHRoaXMKLSAgIHlvdSB3b3VsZCBub3JtYWxseSB1c2Ugc29tZXRoaW5nIGxpa2UgIlx2KG5kYXRl KSBcdih0aW1lKSIuIEJ1dAotICAgXGZjdnRkYXRlKCkgKHdpdGggbm8gYXJndW1lbnRzKSBpcyBl cXVpdmFsZW50OiBpdCByZXR1cm5zIHRoZSBjdXJyZW50Ci0gICBkYXRlIGFuZCB0aW1lIGluIHl5 eXltbWRkIGhoOm1tOnNzIGZvcm1hdCwgc3VpdGFibGUgZm9yIHRpbWUgc3RhbXBpbmcuCi0KLTgu MTMuNy4gRGF0ZS1UaW1lIFByb2dyYW1taW5nIEV4YW1wbGVzCi0KLSAgIEhlcmUncyBhIG1hY3Jv IHRoYXQgY29udmVydHMgYW55IGRhdGUtdGltZSB0byBVVEMsIHdoaWNoIHlvdSBtaWdodCB1c2UK LSAgIGlmIEMtS2VybWl0IGRpZG4ndCBhbHJlYWR5IGhhdmUgYSBcZnV0Y2RhdGUoKSBmdW5jdGlv bjoKLQotICBkZWZpbmUgdXRjZGF0ZSB7Ci0gICAgICAubG9jYWwgOj0gXGZjdnRkYXRlKFwlKikg ICAgICAgICAgICAgICAgIDsgMS4KLSAgICAgIC50bXAgOj0gXGZjdnRkYXRlKFxtKGxvY2FsKVVU QykgICAgICAgICAgOyAyLgotICAgICAgLm9mZnNldCA6PSBcZmRpZmZkYXRlKFxtKGxvY2FsKSxc bSh0bXApKSA7IDMuCi0gICAgICAudXRjIDo9IFxmY3Z0ZGF0ZShcbShsb2NhbClcbShvZmZzZXQp KSAgIDsgNC4KLSAgICAgIHNobyBtYWMgdXRjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OyA1LgotICB9Ci0KLSAgIEJyaWVmIGV4cGxhbmF0aW9uOiBMaW5lIDEgY29udmVydHMgdGhlIG1h Y3JvIGFyZ3VtZW50LCBhIGZyZWUtZm9ybWF0Ci0gICBkYXRlLXRpbWUsIHRvIHN0YW5kYXJkLWZv cm1hdCBsb2NhbCB0aW1lLiBMaW5lIDIgYXBwZW5kcyB0aGUgIlVUQyIKLSAgIHRpbWV6b25lIHRv IHRoZSBsb2NhbCB0aW1lIGFuZCBjb252ZXJ0cyB0aGUgcmVzdWx0IHRvIGxvY2FsIHRpbWUuIElu Ci0gICBvdGhlciB3b3Jkcywgd2UgdGFrZSB0aGUgc2FtZSB0aW1lIGFzIHRoZSBsb2NhbCB0aW1l LCBidXQgcHJldGVuZCBpdCdzCi0gICBVVEMgdGltZSwgYW5kIGNvbnZlcnQgaXQgdG8gbG9jYWwg dGltZS4gRm9yIGV4YW1wbGUsIGlmIE5ldyBZb3JrIHRpbWUKLSAgIGlzIDQgaG91cnMgYWhlYWQg b2YgVVRDLCB0aGVuIDY6MDBwbSBOZXcgWW9yayB0aW1lIGlzIDI6MDBwbSBVVEMuIExpbmUKLSAg IDMgZ2V0cyB0aGUgZGlmZmVyZW5jZSBvZiB0aGUgdHdvIHJlc3VsdHMgKGUuZy4gIiswNDowMCIp LiBMaW5lIDQKLSAgIGFwcGVuZHMgdGhlIGRpZmZlcmVuY2UgKGRlbHRhIHRpbWUpIHRvIHRoZSBs b2NhbCB0aW1lLCBhbmQgY29udmVydHMgaXQKLSAgIGFnYWluLCB3aGljaCBhZGRzIChvciBzdWJ0 cmFjdHMpIHRoZSBVVEMgb2Zmc2V0IHRvIHRoZSBnaXZlbiB0aW1lLiBMaW5lCi0gICA1IGRpc3Bs YXlzIHRoZSByZXN1bHQuCi0KLSAgIEhlcmUncyBhIHNjcmlwdCB0aGF0IG9wZW5zIGEgd2ViIHBh Z2UsIGdldHMgaXRzIGhlYWRlcnMgaW50byBhbiBhcnJheSwKLSAgIHNjYW5zIHRoZSBhcnJheSBm b3IgdGhlICJMYXN0LU1vZGlmaWVkOiIgaGVhZGVyLCBhbmQgaW50ZXJwcmV0cyBpdDoKLSAgaHR0 cCBvcGVuIHd3dy5jb2x1bWJpYS5lZHUKLSAgaWYgZmFpbCBzdG9wIDEgSFRUUCBPUEVOIGZhaWxl ZAotICBodHRwIC9hcnJheTphIGhlYWQgaW5kZXguaHRtbCAvZGV2L251bGwKLSAgaWYgZmFpbCBz dG9wIDEgSFRUUCBHRVQgZmFpbGVkCi0gIHNob3cgYXJyYXkgYQotICBmb3IgXCVpIDEgXGZkaW0o JmEpIDEgewotICAgICAgLlwleCA6PSBcZmluZGV4KDosXCZhW1wlaV0pCi0gICAgICBpZiBub3Qg XCV4IGNvbnRpbnVlCi0gICAgICAudGFnIDo9IFxmbGVmdChcJmFbXCVpXSxcJXgtMSkKLSAgICAg IC52YWwgOj0gXGZsdHJpbShcZnN1YnN0cihcJmFbXCVpXSxcJXgrMSkpCi0gICAgICBpZiAoIGVx ICJcbSh0YWcpIiAiTGFzdC1Nb2RpZmllZCIgKSB7Ci0gICAgICAgICAgZWNobyBIVFRQIERhdGU6 IFxtKHZhbCkKLSAgICAgICAgICAucmRhdGUgOj0gXGZjdnRkYXRlKFxtKHZhbCkpCi0gICAgICAg ICAgZWNobyB7U3RhbmRhcmQgRGF0ZSAobG9jYWwpOiBcbShyZGF0ZSl9Ci0gICAgICAgICAgZWNo byB7U3RhbmRhcmQgRGF0ZSAoVVRDKTogICBcZnV0Y2RhdGUoXG0ocmRhdGUpKX0KLSAgICAgICAg ICBicmVhawotICAgICAgfQotICB9Ci0gIGh0dHAgY2xvc2UKLQotICAgVGhlIHJlc3VsdDoKLQot ICBIVFRQIERhdGU6IE1vbiwgMTMgQXVnIDIwMDEgMjA6MDU6NDIgR01UCi0gIFN0YW5kYXJkIERh dGUgKGxvY2FsKTogMjAwMTA4MTMgMTY6MDU6NDIKLSAgU3RhbmRhcmQgRGF0ZSAoVVRDKTogICAy MDAxMDgxMyAyMDowNTo0MgotCi0gICBBcyB5b3UgY2FuIHNlZSwgS2VybWl0IGhhZCBubyB0cm91 YmxlIGRlY29kaW5nIHRoZSBkYXRlLXRpbWUtc3RyaW5nCi0gICBmcm9tIHRoZSB3ZWJzaXRlLCBj b252ZXJ0aW5nIHRvIGxvY2FsIHRpbWUsIGFuZCBjb252ZXJ0aW5nIGJhY2sgdG8gVVRDCi0gICB3 aXRoIG5vIGNvbmZsaWN0cyBvciBsb3NzIG9mIGluZm9ybWF0aW9uLiBJZiBpdCBoYWQgYmVlbiBp biBhbnkgb3RoZXIKLSAgIGtub3duIGZvcm1hdCwgdGhlIHJlc3VsdCB3b3VsZCBoYXZlIGJlZW4g dGhlIHNhbWUuCi0KLSAgIE5vdyBzdXBwb3NlIHdlIHdhbnQgdG8gZG93bmxvYWQgdGhlIHdlYiBw YWdlIG9ubHkgaWYgaXQgaXMgbmV3ZXIgdGhhbgotICAgb3VyIGxvY2FsIGNvcHkuIFRoZSBcZmRh dGUoZmlsZW5hbWUpIGZ1bmN0aW9uICh3aGljaCByZXR1cm5zIHRoZQotICAgbW9kaWZpY2F0aW9u IGRhdGUtdGltZSBvZiB0aGUgZ2l2ZW4gZmlsZSkgYW5kIHRoZSBuZXcgXGZjbXBkYXRlcygpCi0g ICBmdW5jdGlvbiBtYWtlIGl0IGVhc3kuIEluc2VydCB0aGUgZm9sbG93aW5nIGp1c3QgYmVmb3Jl IHRoZSBCUkVBSwotICAgc3RhdGVtZW50OgotCi0gIGlmICggPCAwIFxmY21wZGF0ZXMoXG0ocmRh dGUpLFxmZGF0ZShpbmRleC5odG1sKSkgKSB7Ci0gICAgIGVjaG8gR0VUVElORyBpbmRleC5odG1s Li4uCi0gICAgIGh0dHAgZ2V0IGluZGV4Lmh0bWwgaW5kZXguaHRtbAotICAgICBpZiBzdWNjZXNz IGVjaG8gSFRUUCBHRVQgT0sKLSAgfSBlbHNlIHsKLSAgICAgZWNobyBpbmRleC5odG1sOiBubyB1 cGRhdGUgbmVlZGVkCi0gIH0KLSAgaHR0cCBjbG9zZQotICBleGl0Ci0KLSAgIFRoaXMgc2F5cywg ImlmIDAgaXMgbGVzcyB0aGFuIHRoZSBjb21wYXJpc29uIG9mIHRoZSByZW1vdGUgZmlsZSBkYXRl Ci0gICBhbmQgdGhlIGxvY2FsIGZpbGUgZGF0ZSwgZ2V0IHRoZSByZW1vdGUgZmlsZSwgb3RoZXJ3 aXNlIHNraXAgaXQuIiBBbmQKLSAgIGl0IGF1dG9tYXRpY2FsbHkgcmVjb25jaWxlcyB0aGUgdGlt ZS16b25lIGRpZmZlcmVuY2UgKGlmIGFueSkuCi0KLSAgIEl0IHdvdWxkIGJlIG5pY2UgdG8gYmUg YWJsZSB0byBleHRlbmQgdGhpcyBzY3JpcHQgaW50byBhCi0gICBnZW5lcmFsLXB1cnBvc2Ugd2Vi c2l0ZSB1cGRhdGVyLCBidXQgdW5mb3J0dW5hdGVseSBIVFRQIHByb3RvY29sCi0gICBkb2Vzbid0 IHByb3ZpZGUgYW55IG1lY2hhbmlzbSBmb3IgdGhlIGNsaWVudCB0byBhc2sgdGhlIHNlcnZlciBm b3IgYQotICAgbGlzdCBvZiBmaWxlcywgcmVjdXJzaXZlIG9yIG90aGVyd2lzZS4KLQotICAgWyBb NDgzXVRvcCBdIFsgWzQ4NF1Db250ZW50cyBdIFsgWzQ4NV1DLUtlcm1pdCBIb21lIF0gWyBbNDg2 XUtlcm1pdAotICAgSG9tZSBdCi0KLTguMTQuIFRyYXBwaW5nIEtleWJvYXJkIEludGVycnVwdGlv bgotCi0gICBOb3JtYWxseSB3aGVuIHlvdSB0eXBlIEN0cmwtQyBhbmQgS2VybWl0IGlzIGluIGNv bW1hbmQgbW9kZSAoYXMgb3Bwb3NlZAotICAgdG8gQ09OTkVDVCBtb2RlKSB3aXRoIENPTU1BTkQg SU5URVJSVVBUSU9OIE9OIChhcyBpdCBpcyB1bmxlc3MgeW91IGhhdmUKLSAgIHNldCBpdCBPRkYp LCBLZXJtaXQgaW50ZXJydXB0cyBhbnkgY29tbWFuZCB0aGF0IGlzIGN1cnJlbnRseSBpbgotICAg cHJvZ3Jlc3MsIGFuZCBpZiBhIGNvbW1hbmQgZmlsZSBvciBtYWNybyBpcyBleGVjdXRpbmcsIHJv bGxzIHRoZQotICAgY29tbWFuZCBzdGFjayBiYWNrIHRvIHRvcCBsZXZlbCwgY2xvc2luZyBhbGwg b3BlbiBjb21tYW5kIGZpbGVzLAotICAgZGVhY3RpdmF0aW5nIGFsbCBtYWNyb3MsIGRlYWxsb2Nh dGluZyBhbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBhcnJheXMsCi0gICBhbmQgbGVhdmluZyB5b3Ug YXQgdGhlIGNvbW1hbmQgcHJvbXB0LgotCi0gICBTdXBwb3NlLCBob3dldmVyLCB5b3Ugd2FudCBj ZXJ0YWluIGFjdGlvbnMgdG8gb2NjdXIgd2hlbiBhIHNjcmlwdCBpcwotICAgaW50ZXJydXB0ZWQ7 IGZvciBleGFtcGxlLCBjbG9zaW5nIG9wZW4gZmlsZXMsIHdyaXRpbmcgbG9nIGVudHJpZXMsIG9y Ci0gICBkaXNwbGF5aW5nIHN1bW1hcnkgcmVzdWx0cy4gWW91IGNhbiBkbyB0aGlzIGJ5IGRlZmlu aW5nIGEgbWFjcm8gbmFtZWQKLSAgIE9OX0NUUkxDLiBXaGVuIEN0cmwtQyBpcyBkZXRlY3RlZCwg YW5kIGEgbWFjcm8gd2l0aCB0aGlzIG5hbWUgaXMKLSAgIGRlZmluZWQsIEtlcm1pdCBleGVjdXRl cyBpdCBmcm9tIHRoZSBjdXJyZW50IGNvbW1hbmQgbGV2ZWwsIHRodXMgZ2l2aW5nCi0gICBpdCBm dWxsIGFjY2VzcyB0byB0aGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggdGhlIGludGVycnVwdGlvbiBv Y2N1cnJlZCwKLSAgIGluY2x1ZGluZyBsb2NhbCB2YXJpYWJsZXMgYW5kIG9wZW4gZmlsZXMuIE9u bHkgd2hlbiB0aGUgT05fQ1RSTEMgbWFjcm8KLSAgIGNvbXBsZXRlcyBleGVjdXRpb24gaXMgdGhl IGNvbW1hbmQgc3RhY2sgcm9sbGVkIGJhY2sgdG8gdG9wIGxldmVsLgotCi0gICBPbmNlIHRoZSBP Tl9DVFJMQyBtYWNybyBpcyBkZWZpbmVkLCBpdCBjYW4gYmUgZXhlY3V0ZWQgb25seSBvbmNlLiBU aGlzCi0gICBpcyB0byBwcmV2ZW50IHJlY3Vyc2lvbiBpZiB0aGUgdXNlciB0eXBlcyBDdHJsLUMg d2hpbGUgdGhlIE9OX0NUUkxDCi0gICBtYWNybyBpcyBleGVjdXRpbmcuIElmIHlvdSB0eXBlIEN0 cmwtQyB3aGlsZSB0aGUgQ3RybC1DIG1hY3JvIGlzCi0gICBhY3RpdmUsIHRoaXMgZG9lcyBub3Qg c3RhcnQgYSBuZXcgY29weSBvZiBPTl9DVFJMQzsgcmF0aGVyLCBpdCByZXR1cm5zCi0gICB0byB0 aGUgdG9wLWxldmVsIGNvbW1hbmQgcHJvbXB0LiBBZnRlciB0aGUgT05fQ1RSTEMgbWFjcm8gcmV0 dXJucywgaXQKLSAgIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgbWFjcm8gdGFibGUgc28gaWYg eW91IHdhbnQgdG8gdXNlIGl0IGFnYWluIG9yCi0gICBpbnN0YWxsIGEgZGlmZmVyZW50IEN0cmwt QyB0cmFwLCB5b3UgbXVzdCBleGVjdXRlIGEgbmV3IERFRklORSBPTl9DVFJMQwotICAgY29tbWFu ZC4gSW4gYW55IGNhc2UsIGFzIGFsd2F5cyB3aGVuIHlvdSBpbnRlcnJ1cHQgYSBzY3JpcHQgd2l0 aAotICAgQ3RybC1DLCBpdHMgY29tcGxldGlvbiBzdGF0dXMgaXMgRkFJTFVSRS4KLQotICAgTm9y bWFsbHkgdGhlIE9OX0NUUkxDIG1hY3JvIHdvdWxkIGJlIGRlZmluZWQgaW4gdGhlIGNvbW1hbmQg ZmlsZSBvcgotICAgbWFjcm8gdG8gd2hpY2ggaXQgYXBwbGllcywgYW5kIHNob3VsZCBiZSBkZWNs YXJlZCBMT0NBTC4gVGhpcyB3YXksIGlmCi0gICB0aGUgY29tbWFuZCBmaWxlIG9yIG1hY3JvIGNv bXBsZXRlcyBzdWNjZXNzZnVsbHkgd2l0aG91dCBiZWluZwotICAgaW50ZXJydXB0ZWQsIHRoZSBP Tl9DVFJMQyBkZWZpbml0aW9uIGRpc2FwcGVhcnMgYXV0b21hdGljYWxseS4KLSAgIE90aGVyd2lz ZSB0aGUgZGVmaW5pdGlvbiB3b3VsZCBzdGlsbCBiZSB2YWxpZCBhbmQgdGhlIG1hY3JvIHdvdWxk IGJlCi0gICBleGVjdXRlZCwgcHJvYmFibHkgb3V0IG9mIGNvbnRleHQsIHRoZSBuZXh0IHRpbWUg eW91IHR5cGVkIEN0cmwtQy4KLQotICAgSGVyZSdzIGEgc2ltcGxlIGV4YW1wbGUgb2YgYSBjb21t YW5kIGZpbGUgdGhhdCBzZXRzIGEgQ3RybC1DIHRyYXAgZm9yCi0gICBpdHNlbGY6Ci0KLSAgbG9j YWwgb25fY3RybGMgICAgICAgICAgICAgIDsgTWFrZSBDdHJsLUMgdHJhcCBsb2NhbCB0byB0aGlz IGNvbW1hbmQgZmlsZS4KLSAgZGVmaW5lIG9uX2N0cmxjIHsgICAgICAgICAgIDsgRGVmaW5lIHRo ZSBPTl9DVFJMQyBtYWNyby4KLSAgICAgIGVjaG8gSW50ZXJydXB0ZWQgYXQgXHYodGltZSkuCi0g ICAgICBlY2hvIEl0ZXJhdGlvbnM6IFwlbgotICB9Ci0gIHhlY2hvIFR5cGUgQ3RybC1DIHRvIHF1 aXQKLSAgZm9yIFwlbiAxIDk5OSAxIHsgICAgICAgICAgIDsgUHJpbnRzIGEgZG90IGV2ZXJ5IHNl Y29uZCB1bnRpbCBpbnRlcnJ1cHRlZC4KLSAgICAgIHNsZWVwIDEKLSAgICAgIHhlY2hvIC4KLSAg fQotICBlY2hvIEZpbmlzaGVkIG5vcm1hbGx5IGF0IFx2KHRpbWUpIDsgR2V0IGhlcmUgb25seSBp ZiBub3QgaW50ZXJydXB0ZWQuCi0gIGRlY3JlbWVudCBcJW4KLSAgZWNobyBJdGVyYXRpb25zOiBc JW4KLQotICAgVGhpcyBwcmludHMgYSBzdW1tYXJ5IG5vIG1hdHRlciB3aGV0aGVyIGl0IGNvbXBs ZXRlcyBub3JtYWxseSBvciBpcwotICAgaW50ZXJydXB0ZWQgZnJvbSB0aGUga2V5Ym9hcmQuIElu IGJvdGggY2FzZXMgdGhlIHRyYXAgaXMgYXV0b21hdGljYWxseQotICAgcmVtb3ZlZCBhZnRlcndh cmRzLgotCi0gICBGb3IgYW4gZXhhbXBsZSBvZiBob3cgdG8gdXNlIE9OX0NUUkxDIHRvIGRlYnVn IHNjcmlwdHMsIHNlZQotICAgWzQ4N11TZWN0aW9uIDguMS4KLQotICAgWyBbNDg4XVRvcCBdIFsg WzQ4OV1Db250ZW50cyBdIFsgWzQ5MF1DLUtlcm1pdCBIb21lIF0gWyBbNDkxXUtlcm1pdAotICAg SG9tZSBdCi0KLTkuIFMtRVhQUkVTU0lPTlMKLQotICAgVGhpcyBzZWN0aW9uIGlzIHByaW1hcmls eSBmb3IgdGhvc2Ugd2hvIHdhbnQgdG8gd3JpdGUKLSAgIGNhbGN1bGF0aW9uLWludGVuc2l2ZSBz Y3JpcHRzLCBlc3BlY2lhbGx5IGlmIHRoZXkgcmVxdWlyZQotICAgZmxvYXRpbmctcG9pbnQgYXJp dGhtZXRpYywgYW5kL29yIGZvciB0aG9zZSB3aG8gYXJlIGZhbWlsaWFyIHdpdGggdGhlCi0gICBM SVNQIHByb2dyYW1taW5nIGxhbmd1YWdlLgotCi0gICBFdmVyIHNpbmNlIEMtS2VybWl0IHZlcnNp b24gNSB3YXMgcmVsZWFzZWQgaW4gMTk4OCwgc2NyaXB0aW5nIGhhcyBiZWVuCi0gICBvbmUgb2Yg aXRzIG1ham9yIGF0dHJhY3Rpb25zLCBhbmQgYXJpdGhtZXRpYyBpcyBhIGtleSBwYXJ0IG9mIGl0 LgotICAgVmVyc2lvbnMgNSBhbmQgNiBpbmNsdWRlZCBpbnRlZ2VyIGFyaXRobWV0aWMgb25seSwg dXNpbmcgdHJhZGl0aW9uYWwKLSAgIGFsZ2VicmFpYyBub3RhdGlvbiwgZS5nLjoKLQotICBlY2hv IFxmZXZhbHVhdGUoMyooMis3KS8yKQotICAxMwotCi0gICBDLUtlcm1pdCA3LjAgYWRkZWQgc3Vw cG9ydCBmb3IgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYywgYnV0IG9ubHkKLSAgIHRocm91Z2gg ZnVuY3Rpb24gY2FsbHM6Ci0KLSAgZWNobyBcZmZwZGl2aWRlKFxmZnBtdWx0aXBseSgzLjAsXGZm cGFkZCgyLjAsNy4wKSksMi4wKQotICAxMy41Ci0KLSAgIEMtS2VybWl0IDguMCBpbnRyb2R1Y2Vz IGEgdGhpcmQgZm9ybSBvZiBhcml0aG1ldGljIHRoYXQgdHJlYXRzIGludGVnZXJzCi0gICBhbmQg ZmxvYXRpbmctcG9pbnQgbnVtYmVycyB1bmlmb3JtbHksIGlzIGVhc2llciB0byByZWFkIGFuZCB3 cml0ZSwgYW5kCi0gICBleGVjdXRlcyB2ZXJ5IHF1aWNrbHk6Ci0KLSAgKC8gKCogMyAoKyAyIDcp KSAyKQotICAxMy41Ci0KLSAgIEJ1dCBmaXJzdCBzb21lIGJhY2tncm91bmQuCi0KLSAgIFRoZSBL ZXJtaXQgY29tbWFuZCBhbmQgc2NyaXB0aW5nIGxhbmd1YWdlIGRpZmZlcnMgZnJvbSB0cnVlIHBy b2dyYW1taW5nCi0gICBsYW5ndWFnZXMgKHN1Y2ggYXMgQyBvciBGb3J0cmFuKSBpbiBtYW55IHdh eXM7IG9uZSBvZiB0aGUgbW9zdAotICAgcHJvbWluZW50IGRpZmZlcmVuY2VzIGlzIHRoZSB3YXkg aW4gd2hpY2ggdmFyaWFibGVzIGFyZSBkaXN0aW5ndWlzaGVkCi0gICBmcm9tIGNvbnN0YW50cy4g SW4gYSBjb21tYW5kIGxhbmd1YWdlLCB3b3JkcyBhcmUgdGFrZW4gbGl0ZXJhbGx5OyBmb3IKLSAg IGV4YW1wbGUsIHRoZSBVbml4IHNoZWxsOgotCi0gIGNhdCBmb28uYmFyCi0KLSAgIGRpc3BsYXlz IHRoZSBmaWxlIG5hbWVkIGZvby5iYXIuIFdoZXJlYXMgaW4gYSBwcm9ncmFtbWluZyBsYW5ndWFn ZSBsaWtlCi0gICBDLCB3b3JkcyBhcmUgYXNzdW1lZCB0byBiZSB2YXJpYWJsZXM6Ci0KLSAgcyA9 IGZvby5iYXI7ICAgIC8qIEFzc2lnbnMgdGhlIHZhbHVlIG9mIGZvby5iYXIgdG8gdGhlIHZhcmlh YmxlIHMgKi8KLQotICAgVG8gbWFrZSBhIHByb2dyYW1taW5nIGxhbmd1YWdlIHRha2Ugd29yZHMg bGl0ZXJhbGx5LCB5b3UgaGF2ZSB0byBxdW90ZQotICAgb3IgImVzY2FwZSIgdGhlbToKLQotICBz ID0gImZvby5iYXIiOyAgLyogQXNzaWducyBhIHBvaW50ZXIgdG8gdGhlIHN0cmluZyAiZm9vLmJh ciIgdG8gdGhlIHZhcmlhYmxlIHMKLSAqLwotCi0gICBUaGUgb3Bwb3NpdGUgaG9sZHMgZm9yIGNv bW1hbmQgbGFuZ3VhZ2VzOiB0byBnZXQgdGhlbSB0byB0cmVhdCBhIHdvcmQKLSAgIGFzIGEgdmFy aWFibGUgcmF0aGVyIHRoYW4gYSBjb25zdGFudCwgeW91IGhhdmUgdG8gZXNjYXBlIHRoZW0uIEZv cgotICAgZXhhbXBsZSwgaW4gdGhlIFVuaXggc2hlbGw6Ci0KLSAgZm9vPTEyMyAgICAgICAgIDsg QXNzaWduIHZhbHVlIDEyMyB0byB2YXJpYWJsZSBmb28uCi0gIGVjaG8gZm9vICAgICAgICA7IFBy aW50cyAiZm9vIgotICBlY2hvICRmb28gICAgICAgOyBQcmludHMgIjEyMyIKLQotICAgQW5kIGlu IEtlcm1pdDoKLQotICBkZWZpbmUgZm9vIDEyMyAgOyBBc3NpZ24gdmFsdWUgMTIzIHRvIHZhcmlh YmxlIGZvby4KLSAgZWNobyAxMjMgICAgICAgIDsgVGhpcyBwcmludHMgIjEyMyIuCi0gIGVjaG8g Zm9vICAgICAgICA7IFRoaXMgcHJpbnRzICJmb28iLgotICBlY2hvIFxtKGZvbykgICAgOyBUaGlz IHByaW50cyAiMTIzIi4KLQotICAgSW4gb3RoZXIgd29yZHMsIGNoYXJhY3RlciBzdHJpbmdzIChz dWNoIGFzICJmb28iIGFib3ZlKSBhcmUgaW50ZXJwcmV0ZWQKLSAgIGFzIGxpdGVyYWwgc3RyaW5n cywgcmF0aGVyIHRoYW4gdmFyaWFibGUgbmFtZXMsIGV4Y2VwdCBpbiBzcGVjaWFsCi0gICBjb21t YW5kcyBsaWtlIERFRklORSB0aGF0IGRlYWwgc3BlY2lmaWNhbGx5IHdpdGggdmFyaWFibGUgbmFt ZXMgKG9yIGluCi0gICBudW1lcmljIGNvbnRleHRzIGFzIGV4cGxhaW5lZCBpbiBbNDkyXVNlY3Rp b24gOC4yKS4gVGhlIHNwZWNpYWwKLSAgICJlc2NhcGUiIGNoYXJhY3RlciAoZG9sbGFyIHNpZ24g KCQpIGZvciB0aGUgc2hlbGwsIGJhY2tzbGFzaCAoXCkgZm9yCi0gICBLZXJtaXQpIGluZGljYXRl cyB0aGF0IGEgdmFyaWFibGUgaXMgdG8gYmUgcmVwbGFjZWQgYnkgaXRzIHZhbHVlLgotCi0gICBU aGUgcmVxdWlyZW1lbnQgdG8gZXNjYXBlIHZhcmlhYmxlIG5hbWVzIGluIGNvbW1hbmQgbGFuZ3Vh Z2VzIG5vcm1hbGx5Ci0gICBkb2VzIG5vdCBpbXBvc2UgYW55IHNwZWNpYWwgaGFyZHNoaXAsIGJ1 dCBjYW4gYWRkIGEgY29uc2lkZXJhYmxlCi0gICBub3RhdGlvbmFsIGJ1cmRlbiB0byBhcml0aG1l dGljIGV4cHJlc3Npb25zLCB3aGljaCBhcmUgdHlwaWNhbGx5IGZ1bGwKLSAgIG9mIHZhcmlhYmxl cy4gRXNwZWNpYWxseSBpbiBLZXJtaXQgd2hlbiBmbG9hdGluZyBwb2ludCBudW1iZXJzIGFyZQot ICAgaW52b2x2ZWQsIHdoZXJlIHlvdSBtdXN0IHVzZSBzcGVjaWFsIFxmZnB4eHgoKSBmdW5jdGlv bnMsIGUuZy4KLSAgICJcZmZwYWRkKFxtKGEpLFxtKGIpKSIgcmF0aGVyIHRoYW4gdGhlIHNpbXBs ZSAiKyIgb3BlcmF0b3IgdG8gYWRkIHR3bwotICAgZmxvYXRpbmctcG9pbnQgbnVtYmVycyB0b2dl dGhlciwgYmVjYXVzZSB0aGUgb3JpZ2luYWwgYXJpdGhtZXRpYwotICAgaGFuZGxlciBkb2Vzbid0 IHN1cHBvcnQgZmxvYXRpbmcgcG9pbnQgKHRoaXMgbWlnaHQgY2hhbmdlIGluIHRoZQotICAgZnV0 dXJlKS4gVG8gaWxsdXN0cmF0ZSwgdGhlIGdlbmVyYWwgZm9ybXVsYSBmb3IgdGhlIGFyZWEgb2Yg YSB0cmlhbmdsZQotICAgaXM6Ci0KLSAgc3FydChzICogKHMgLSBhKSAqIChzIC0gYikgKiAocyAt IGMpKQotCi0gICB3aGVyZSBhLCBiLCBhbmQgYyBhcmUgdGhlIGxlbmd0aHMgb2YgdGhlIHRyaWFu Z2xlJ3MgdGhyZWUgc2lkZXMgYW5kOgotCi0gIHMgPSAoYSArIGIgKyBjKSAvIDIKLQotICAgRXhj ZXB0IGluIHNwZWNpYWwgY2FzZXMgKGUuZy4gYSA9IDMsIGIgPSA0LCBjID0gNSksIHRoZSByZXN1 bHQgaGFzIGEKLSAgIGZyYWN0aW9uYWwgcGFydCBzbyB0aGUgY29tcHV0YXRpb24gbXVzdCBiZSBk b25lIHVzaW5nIGZsb2F0aW5nLXBvaW50Ci0gICBhcml0aG1ldGljLiBXZSBjYW4gY3JlYXRlIGEg S2VybWl0IDcuMCBmdW5jdGlvbiBmb3IgdGhpcyBhcyBmb2xsb3dzOgotCi0gIGRlZiBhcmVhIHsK LSAgICAgIGxvY2FsIHMgdDEgdDIgdDMKLSAgICAgIGFzc2lnbiBzIFxmZnBkaXYoXGZmcGFkZChc ZmZwYWRkKFwlMSxcJTIpLFwlMyksMi4wKQotICAgICAgYXNzaWduIHQxIFxmZnBzdWIoXG0ocyks XCUxKQotICAgICAgYXNzaWduIHQyIFxmZnBzdWIoXG0ocyksXCUyKQotICAgICAgYXNzaWduIHQz IFxmZnBzdWIoXG0ocyksXCUzKQotICAgICAgcmV0dXJuIFxmZnBzcXJ0KFxmZnBtdWwoXG0ocyks XGZmcG11bChcbSh0MSksXGZmcG11bChcbSh0MiksXG0odDMpKSkpKQotICB9Ci0KLSAgIEJ1dCBh cyB5b3UgY2FuIHNlZSwgdGhpcyBpcyByYXRoZXIgY3VtYmVyc29tZS4gTm90ZSwgaW4gcGFydGlj dWxhciwKLSAgIHRoYXQgYXJpdGhtZXRpYyBmdW5jdGlvbnMgbGlrZSBcZmZwYWRkKCksIFxmZnBt dWwoKSwgZXRjLCB0YWtlIGV4YWN0bHkKLSAgIHR3byBvcGVyYW5kcyAobGlrZSB0aGVpciBzeW1i b2xpYyBjb3VudGVycGFydHMgKyBhbmQgKiksIHNvIG9idGFpbmluZwotICAgdGhlIHByb2R1Y3Qg b2YgdGhyZWUgb3IgbW9yZSBudW1iZXJzIChhcyB3ZSBkbyBpbiB0aGlzIGNhc2UpIGlzCi0gICBh d2t3YXJkLgotCi0gICBVc2luZyB0aGUgYWx0ZXJuYXRpdmUgUy1FeHByZXNzaW9uIG5vdGF0aW9u LCB3ZSBjYW4gcmVkdWNlIHRoaXMgdG8gYQotICAgZm9ybSB0aGF0IGlzIGJvdGggZWFzaWVyIHRv IHJlYWQgYW5kIGV4ZWN1dGVzIGZhc3RlciAodGhlIGRldGFpbHMgYXJlCi0gICBleHBsYWluZWQg bGF0ZXIpOgotCi0gIGRlZiBuZXdhcmVhIHsKLSAgICAgIChsZXQgcyAoLyAoKyBcJTEgXCUyIFwl MykgMi4wKSkKLSAgICAgIChzcXJ0ICgqIHMgKC0gcyBcJTEpICgtIHMgXCUyKSAoLSBzIFwlMykp KQotICB9Ci0KLSAgIEluIGJvdGggZXhhbXBsZXMsIHRoZSBcJTEuLjMgdmFyaWFibGVzIGFyZSB0 aGUgbm9ybWFsIEtlcm1pdCBtYWNybwotICAgYXJndW1lbnRzLCByZWZlcmVuY2VkIGJ5IHRoZSBu b3JtYWwgZXNjYXBpbmcgbWVjaGFuaXNtLiBGb3IgaW5jcmVhc2VkCi0gICByZWFkYWJpbGl0eSwg d2UgY2FuIGFsc28gYXNzaWduIHRoZSBtYWNybyBhcmd1bWVudHMgXCUxLCBcJTIsIGFuZCBcJTMK LSAgIHRvIHRoZSBsZXR0ZXJzIGEsIGIsIGFuZCBjIGNvcnJlc3BvbmRpbmcgdG8gb3VyIGZvcm11 bGE6Ci0KLWRlZiBuZXdhcmVhIHsKLSAgICAobGV0IGEgXCUxIGIgXCUyIGMgXCUzKQotICAgIChs ZXQgcyAoLyAoKyBhIGIgYykgMi4wKSkKLSAgICAoc3FydCAoKiBzICgtIHMgYSkgKC0gcyBiKSAo LSBzIGMpKSkKLX0KLQotICAgQW5kIG5vdyB0aGUgS2VybWl0IGZ1bmN0aW9uIHJlYWRzIGFsbW9z dCBsaWtlIHRoZSBvcmlnaW5hbCBmb3JtdWxhLgotICAgSGVyZSBLZXJtaXQgYmVoYXZlcyBtb3Jl IGxpa2UgYSByZWd1bGFyIHByb2dyYW1taW5nIGxhbmd1YWdlLiBJbiBhbgotICAgUy1FeHByZXNz aW9uLCBtYWNybyBuYW1lcyBuZWVkIG5vdCBiZSBlc2NhcGVkIHdoZW4gdGhleSBhcmUgdXNlZCBh cyB0aGUKLSAgIG5hbWVzIG9mIG51bWVyaWMgdmFyaWFibGVzLgotCi0gICBbIFs0OTNdVG9wIF0g WyBbNDk0XUNvbnRlbnRzIF0gWyBbNDk1XUMtS2VybWl0IEhvbWUgXSBbIFs0OTZdS2VybWl0Ci0g ICBIb21lIF0KLQotOS4xLiBXaGF0IGlzIGFuIFMtRXhwcmVzc2lvbj8KLQotICAgVGhlIFMtRXhw cmVzc2lvbiBjb25jZXB0IGlzIGJvcnJvd2VkIGZyb20gdGhlIExpc3AgcHJvZ3JhbW1pbmcKLSAg IGxhbmd1YWdlLiAiUy1FeHByZXNzaW9uIiBpcyBzaG9ydCBmb3IgU3ltYm9saWMgRXhwcmVzc2lv biAoaXRzZWxmCi0gICBzb21ldGltZXMgc2hvcnRlbmVkIHRvIFNFWFApLiBTLUV4cHJlc3Npb25z IHByb3ZpZGUgYSBraW5kIG9mCi0gICBBbHRlcm5hdGl2ZSBNaW5pLVVuaXZlcnNlIHdpdGhpbiB0 aGUgS2VybWl0IGNvbW1hbmQgbGFuZ3VhZ2Ugd2hlbiB0aGUKLSAgIHJlZ3VsYXIgcnVsZXMgZG9u J3QgYXBwbHksIGEgdW5pdmVyc2UgZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMuCi0KLSAgIEMtS2Vy bWl0IGRvZXMgbm90IHByZXRlbmQgdG8gYmUgYSBmdWxsIExpc3AgaW50ZXJwcmV0ZXI7IG9ubHkg dGhlCi0gICBhcml0aG1ldGljIHBhcnRzIG9mIExpc3AgaGF2ZSBiZWVuIGluY29ycG9yYXRlZDog Uy1FeHByZXNzaW9ucyB0aGF0Ci0gICBvcGVyYXRlIG9uIG51bWJlcnMgYW5kIHJldHVybiBudW1l cmljIHZhbHVlcyAocGx1cyBleHRlbnNpYmlsaXR5Ci0gICBmZWF0dXJlcyBkZXNjcmliZWQgaW4g WzQ5N11TZWN0aW9uIDkuOCwgd2hpY2ggYWxsb3cgc29tZSBkZWdyZWUgb2YKLSAgIHN0cmluZyBw cm9jZXNzaW5nKS4KLQotICAgQW4gUy1FeHByZXNzaW9uIGlzIGEgbGlzdCBvZiB6ZXJvIG9yIG1v cmUgaXRlbXMsIHNlcGFyYXRlZCBieSBzcGFjZXMsCi0gICB3aXRoaW4gcGFyZW50aGVzZXMuIEV4 YW1wbGVzOgotCi0gICgpCi0gICgxKQotICAoYSkKLSAgKCsgYSAxKQotICAoKiAyIGEgYikKLQot ICAgSWYgdGhlIFMtRXhwcmVzc2lvbiBpcyBlbXB0eSwgaXQgaGFzIHRoZSBOSUwgKGVtcHR5KSB2 YWx1ZS4gSWYgaXQgaXMKLSAgIG5vdCBlbXB0eSBhbmQgdGhlIGZpcnN0IGl0ZW0gaXMgYW4gb3Bl cmF0b3IgKHN1Y2ggYXMgKyBvciAqKSwgdGhlcmUgY2FuCi0gICBiZSB6ZXJvIG9yIG1vcmUgc3Vi c2VxdWVudCBpdGVtcywgY2FsbGVkIHRoZSBvcGVyYW5kczoKLQotICAoKyAxIDIpCi0KLSAgIEhl cmUgdGhlIG9wZXJhdG9yIGlzICIrIiBhbmQgdGhlIG9wZXJhbmRzIGFyZSAiMSIgYW5kICIyIiwg YW5kIHRoZQotICAgdmFsdWUgb2YgdGhlIFMtRXhwcmVzc2lvbiBpcyB0aGUgdmFsdWUgb2YgdGhl IG9wZXJhdGlvbiAoaW4gdGhpcyBjYXNlCi0gICAzKS4gVGhlIG9wZXJhdG9yIGFsd2F5cyBjb21l cyBmaXJzdCwgd2hpY2ggaXMgZGlmZmVyZW50IGZyb20gdGhlCi0gICBmYW1pbGlhciBhbGdlYnJh aWMgbm90YXRpb247IHRoaXMgYmVjYXVzZSBTLUV4cHJlc3Npb24gb3BlcmF0b3JzIGNhbgotICAg aGF2ZSBkaWZmZXJlbnQgbnVtYmVycyBvZiBvcGVyYW5kczoKLQotICAoKyAxKQotICAoKyAxIDIp Ci0gICgrIDEgMiAzIDQgNSA2IDcgOCA5KQotCi0gICBJZiB0aGUgZmlyc3QgaXRlbSBpbiB0aGUg Uy1FeHByZXNzaW9uIGlzIG5vdCBhbiBvcGVyYXRvciwgdGhlbiBpdCBtdXN0Ci0gICBiZSBhIHZh cmlhYmxlIG9yIGEgbnVtYmVyIChvciBhIG1hY3JvOyBzZWUgWzQ5OF1TZWN0aW9uIDkuOCksIGFu ZCB0aGUKLSAgIFMtRXhwcmVzc2lvbiBjYW4gb25seSBjb250YWluIG9uZSBpdGVtOyBpbiB0aGlz IGNhc2UsIHRoZQotICAgUy1FeHByZXNzaW9uJ3MgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoZSB2 YXJpYWJsZSBvciBudW1iZXI6Ci0KLSAgKGEpCi0gICgzKQotCi0gICBPcGVyYW5kcyBjYW4gYmUg bnVtYmVycywgdmFyaWFibGVzIHRoYXQgaGF2ZSBudW1lcmljIHZhbHVlcywgZnVuY3Rpb25zCi0g ICB0aGF0IHJldHVybiBudW1iZXJzLCBvciBvdGhlciBTLUV4cHJlc3Npb25zLiBUbyBpbGx1c3Ry YXRlIGFuCi0gICBTLUV4cHJlc3Npb24gd2l0aGluIGFuIFMtRXhwcmVzc2lvbiwgb2JzZXJ2ZSB0 aGF0OgotCi0gICgrIDEgMikKLQotICAgaXMgZXF1aXZhbGVudCB0byBhbnkgb2YgdGhlIGZvbGxv d2luZyAocGx1cyBhbiBpbmZpbml0ZSBudW1iZXIgb2YKLSAgIG90aGVycyk6Ci0KLSAgKCsgMSAo KyAxIDEpKQotICAoKyAoLSAzIDIpICgvIDE0ICgrIDMgNCkpKQotCi0gICBTLUV4cHJlc3Npb25z IGNhbiBiZSBuZXN0ZWQgdG8gYW55IHJlYXNvbmFibGUgbGV2ZWw7IGZvciBleGFtcGxlLCB0aGUK LSAgIHZhbHVlIG9mIHRoZSBmb2xsb3dpbmcgUy1FeHByZXNzaW9uIGlzIDY0OgotCi0gICgtICgq ICgrIDIgKCogMyA0KSkgKC0gOSAoKiAyIDIpKSkgNikKLQotICAgT3BlcmF0b3JzIGhhdmUgbm8g cHJlY2VkZW5jZSwgaW1wbGllZCBvciBvdGhlcndpc2UsIHNpbmNlIHRoZXkgY2FuJ3QgYmUKLSAg IG1peGVkLiBUaGUgb25seSBleGNlcHRpb25zIGFyZSB1bmFyeSArIGFuZCAtLCB3aGljaCBzaW1w bHkgaW5kaWNhdGUgdGhlCi0gICBzaWduIG9mIGEgbnVtYmVyOgotCi0gICgqIDMgLTEpCi0KLSAg IE9yZGVyIG9mIGV2YWx1YXRpb24gaXMgc3BlY2lmaWVkIGVudGlyZWx5IGJ5IHBhcmVudGhlc2Vz LCB3aGljaCBhcmUKLSAgIHJlcXVpcmVkIGFyb3VuZCBlYWNoIG9wZXJhdG9yIGFuZCBpdHMgb3Bl cmFuZHM6ICgrIGEgKCogYiBjKSkgaW5zdGVhZAotICAgb2YgKGEgKyBiICogYykuCi0KLSAgIFMt RXhwcmVzc2lvbnMgcHJvdmlkZSBhIHNpbXBsZSBhbmQgaXNvbGF0ZWQgZW52aXJvbm1lbnQgaW4g d2hpY2gKLSAgIEtlcm1pdCdzIG1hY3JvIG5hbWVzIGNhbiBiZSB1c2VkIHdpdGhvdXQgdGhlIFxt KC4uLikgZXNjYXBpbmcgdGhhdCBpcwotICAgbm9ybWFsbHkgcmVxdWlyZWQuIEdpdmVuOgotCi0g IGRlZmluZSBhIDEKLSAgZGVmaW5lIGIgMgotICBkZWZpbmUgYyAzCi0KLSAgIFRoZW46Ci0KLSAg KCsgXG0oYSkgXG0oYikgXG0oYykpCi0KLSAgIGlzIGVxdWl2YWxlbnQgdG86Ci0KLSAgKCsgYSBi IGMpCi0KLSAgIFdpdGhpbiBhbiBTLUV4cHJlc3Npb24sIGFzIGluIG90aGVyIHN0cmljdGx5IG51 bWVyaWMgY29udGV4dHMKLSAgIChbNDk5XVNlY3Rpb24gOC4yKSwgYW55IG9wZXJhbmQgdGhhdCBz dGFydHMgd2l0aCBhIGxldHRlciBpcyB0cmVhdGVkIGFzCi0gICBhIEtlcm1pdCBtYWNybyBuYW1l LiBJbiB0aGlzIGNvbnRleHQsIGFiYnJldmlhdGlvbnMgYXJlIG5vdCBhY2NlcHRlZDsKLSAgIHZh cmlhYmxlIG5hbWVzIG11c3QgYmUgc3BlbGxlZCBvdXQgaW4gZnVsbC4gQWxwaGFiZXRpYyBjYXNl IGlzIG5vdAotICAgc2lnbmlmaWNhbnQ7ICJhIiBhbmQgIkEiIGFyZSB0aGUgc2FtZSB2YXJpYWJs ZSwgYnV0IGJvdGggYXJlIGRpZmZlcmVudAotICAgZnJvbSAiYXJlYSIuCi0KLSAgIE9mIGNvdXJz ZSwgcmVndWxhciBLZXJtaXQgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgY2FuIGJlIHVzZWQgaW4K LSAgIFMtRXhwcmVzc2lvbnMgaW4gdGhlIG5vcm1hbCB3YXlzOgotCi0gICgqIFx2KG1hdGhfcGkp ICheIFwlciAyKSkgICAgICAgICAgICAgOyBBcmVhIG9mIGEgY2lyY2xlIHdpdGggcmFkaXVzIFwl cgotICAoKyBcZmpvaW4oJmEpKSAgICAgICAgICAgICAgICAgICAgICAgIDsgU3VtIG9mIGFsbCBl bGVtZW50cyBvZiBhcnJheSBcJmFbXQotCi0gICBbIFs1MDBdVG9wIF0gWyBbNTAxXUNvbnRlbnRz IF0gWyBbNTAyXUMtS2VybWl0IEhvbWUgXSBbIFs1MDNdS2VybWl0Ci0gICBIb21lIF0KLQotOS4y LiBJbnRlZ2VyIGFuZCBGbG9hdGluZy1Qb2ludC1Bcml0aG1ldGljCi0KLSAgIE5vcm1hbGx5LCBp ZiBhbGwgbnVtYmVycyBpbiBhbiBTLUV4cHJlc3Npb24gYXJlIGludGVnZXJzLCB0aGUgcmVzdWx0 IGlzCi0gICBhbiBpbnRlZ2VyOgotCi0gICgrIDEgMSkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOyBSZXN1bHQgaXMgMgotICAoLyA5IDMpICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsgUmVzdWx0IGlzIDMKLQotICAgSWYgYW55IG9mIHRoZSBvcGVyYW5kcyBpcyBmbG9hdGlu ZyBwb2ludCwgaG93ZXZlciwgdGhlIHJlc3VsdCBpcyBhbHNvCi0gICBmbG9hdGluZyBwb2ludDoK LQotICAoKyAxIDEuMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzdWx0IGlzIDIu MAotICAoLyA5LjAgMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzdWx0IGlzIDMu MAotCi0gICBJZiBhbGwgdGhlIG9wZXJhbmRzIGFyZSBpbnRlZ2VycyBidXQgdGhlIHJlc3VsdCBo YXMgYSBmcmFjdGlvbmFsIHBhcnQsCi0gICB0aGUgcmVzdWx0IGlzIGZsb2F0aW5nIHBvaW50Ogot Ci0gICgvIDEwIDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXN1bHQgaXMgMy4z MzMzMzMzMzMzMzMzMzMKLQotICAgVG8gZm9yY2UgYW4gaW50ZWdlciByZXN1bHQgaW4gc3VjaCBj YXNlcywgdXNlIHRoZSBUUlVOQ0FURSBvcGVyYXRvcjoKLQotICAodHJ1bmNhdGUgKC8gMTAgMykp ICAgICAgICAgICAgICAgICAgIDsgUmVzdWx0IGlzIDMKLQotICAgU2ltaWxhcmx5LCB0byBmb3Jj ZSBhIGNvbXB1dGF0aW9uIHRvIG9jY3VyIGluIGZsb2F0aW5nIHBvaW50LCB5b3UgY2FuCi0gICBj b2VyY2Ugb25lIG9mIGl0cyBvcGVyYW5kcyB0byBGTE9BVDoKLQotICAoKyAxIChmbG9hdCAxKSkg ICAgICAgICAgICAgICAgICAgICAgIDsgUmVzdWx0IGlzIDIuMAotCi0gICBUaGUgcmVzdWx0IGlz IGFsc28gZmxvYXRpbmcgcG9pbnQgaWYgdGhlIG1hZ25pdHVkZSBvZiBhbnkgaW50ZWdlcgotICAg b3BlcmFuZCwgaW50ZXJtZWRpYXRlIHJlc3VsdCwgb3IgdGhlIHJlc3VsdCBpdHNlbGYsIGlzIGxh cmdlciB0aGFuIHRoZQotICAgbWF4aW11bSBmb3IgdGhlIHVuZGVybHlpbmcgbWFjaGluZSBhcmNo aXRlY3R1cmU6Ci0KLSAgKF4gMTAwIDEwMCkKLQotICAgSWYgdGhlIHJlc3VsdCBpcyB0b28gbGFy Z2UgZXZlbiBmb3IgZmxvYXRpbmctcG9pbnQgcmVwcmVzZW50YXRpb24sCi0gICAiSW5maW5pdHki IGlzIHByaW50ZWQ7IGlmIGl0IGlzIHRvbyBzbWFsbCB0byBiZSBkaXN0aW5ndWlzaGVkIGZyb20g MCwKLSAgIDAuMCBpcyByZXR1cm5lZC4KLQotICAgTGFyZ2UgbnVtYmVycyBjYW4gYmUgdXNlZCBh bmQgbGFyZ2UgcmVzdWx0cyBnZW5lcmF0ZWQsIGJ1dCB0aGV5IGFyZQotICAgYWNjdXJhdGUgb25s eSB0byB0aGUgcHJlY2lzaW9uIG9mIHRoZSB1bmRlcmx5aW5nIG1hY2hpbmUuIEZvciBleGFtcGxl LAotICAgdGhlIHJlc3VsdCBvZjoKLQotICgrIDExMTExMTExMTExMTExMTExMTExMSAyMjIyMjIy MjIyMjIyMjIyMjIyMjIpCi0KLSAgIHNob3VsZCBiZSAzMzMzMzMzMzMzMzMzMzMzMzMzMzMsIGJ1 dCAzMzMzMzMzMzMzMzMzMzMzMDAwMDAuMCBpcwotICAgcHJvZHVjZWQgaW5zdGVhZCBpZiB0aGUg bWFjaGluZSBpcyBhY2N1cmF0ZSB0byBvbmx5IGFib3V0IDE2IGRlY2ltYWwKLSAgIGRpZ2l0cywg ZXZlbiB3aXRoIGNvZXJjaW9uIHRvIGZsb2F0aW5nLXBvaW50LiBUaGUgb3JkZXIgb2YgbWFnbml0 dWRlIGlzCi0gICBjb3JyZWN0IGJ1dCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgZGlnaXRzIGFyZSB3 cm9uZy4gVGhlIGltcHJlY2lzZQotICAgbmF0dXJlIG9mIHRoZSByZXN1bHQgaXMgaW5kaWNhdGVk IGJ5IHRoZSAiLjAiIGF0IHRoZSBlbmQuIENvbnRyYXN0Ci0gICB3aXRoOgotCi0gKCsgMTExMTEx MTExIDIyMjIyMjIyMikKLQotICAgd2hpY2ggcHJvZHVjZXMgYW4gZXhhY3QgaW50ZWdlciByZXN1 bHQuCi0KLSAgIFsgWzUwNF1Ub3AgXSBbIFs1MDVdQ29udGVudHMgXSBbIFs1MDZdQy1LZXJtaXQg SG9tZSBdIFsgWzUwN11LZXJtaXQKLSAgIEhvbWUgXQotCi05LjMuIEhvdyB0byBVc2UgUy1FeHBy ZXNzaW9ucwotCi0gICBTLUV4cHJlc3Npb25zIG1heSBiZSBnaXZlbiBhcyBjb21tYW5kcyB0byBD LUtlcm1pdC4gQW55IGNvbW1hbmQgd2hvc2UKLSAgIGZpcnN0IGNoYXJhY3RlciBpcyAiKCIgKGxl ZnQgcGFyZW50aGVzaXMpIGlzIGludGVycHJldGVkIGFzIGFuCi0gICBTLUV4cHJlc3Npb24uCi0K LSAgIElmIHlvdSBlbnRlciBhbiBTLUV4cHJlc3Npb24gYXQgdGhlIEMtS2VybWl0PiBwcm9tcHQs IGl0cyByZXN1bHQgaXMKLSAgIHByaW50ZWQ6Ci0KLSAgQy1LZXJtaXQ+KC8gMTAuMCAzKQotICAg My4zMzMzMzMzMzMzMzMzMzMKLSAgQy1LZXJtaXQ+Ci0KLSAgIElmIGFuIFMtRXhwcmVzc2lvbiBp cyBleGVjdXRlZCB3aXRoaW4gYSBtYWNybyBvciBjb21tYW5kIGZpbGUsIGl0cwotICAgdmFsdWUg aXMgbm90IHByaW50ZWQuIEhvd2V2ZXIsIHlvdSBjYW4gY29udHJvbCB0aGUgcHJpbnRpbmcgYWN0 aW9uCi0gICB3aXRoOgotCi0gICBTRVQgU0VYUFJFU1NJT04gRUNITyB7IEFVVE8sIE9OLCBPRkYg fQotICAgICAgICAgIEFVVE8gaXMgdGhlIGRlZmF1bHQsIG1lYW5pbmcgcHJpbnQgdGhlIHZhbHVl IGF0IHRvcCBsZXZlbCBvbmx5OwotICAgICAgICAgIE9OIG1lYW5zIGFsd2F5cyBwcmludCB0aGUg dmFsdWU7IE9GRiBtZWFucyBuZXZlciBwcmludCBpdC4KLQotICAgSW4gYW55IGNhc2UsIHRoZSB2 YWx1ZSBvZiB0aGUgbW9zdCByZWNlbnQgUy1FeHByZXNzaW9uIChhbmQgdGhlCi0gICBTLUV4cHJl c3Npb24gaXRzZWxmKSBtYXkgYmUgYWNjZXNzZWQgcHJvZ3JhbW1hdGljYWxseSB0aHJvdWdoIHRo ZQotICAgZm9sbG93aW5nIHZhcmlhYmxlczoKLQotICAgXHYoc2V4cHJlc3Npb24pCi0gICAgICAg ICAgVGhlIFMtRXhwcmVzc2lvbiBtb3N0IHJlY2VudGx5IGV4ZWN1dGVkLgotCi0gICBcdihzdmFs dWUpCi0gICAgICAgICAgVGhlIHZhbHVlIG9mIHRoZSBTLUV4cHJlc3Npb24gbW9zdCByZWNlbnRs eSBleGVjdXRlZC4KLQotICAgQmVzaWRlcyBpc3N1aW5nIFMtRXhwcmVzc2lvbnMgYXMgY29tbWFu ZHMgaW4gdGhlbXNlbHZlcywgeW91IGNhbiBhbHNvCi0gICBleGVjdXRlIHRoZW0gYW55d2hlcmUg d2l0aGluIGEgS2VybWl0IGNvbW1hbmQsIGJ1dCBpbiB0aGlzIGNhc2UgdGhleQotICAgbXVzdCBi ZSBlbmNsb3NlZCBpbiBhIGZ1bmN0aW9uIGNhbGwgKG90aGVyd2lzZSB0aGV5IGFyZSB0YWtlbgot ICAgbGl0ZXJhbGx5KToKLQotICAgXGZzZXhwcmVzc2lvbihzKQotICAgICAgICAgIFRoZSBhcmd1 bWVudCAicyIgaXMgYW4gUy1FeHByZXNzaW9uOyB0aGUgb3V0ZXIgcGFyZW50aGVzZXMgbWF5Ci0g ICAgICAgICAgYmUgb21pdHRlZC4gVGhlIHZhbHVlIG9mIHRoZSBTLUV4cHJlc3Npb24gaXMgcmV0 dXJuZWQuIE5vdGUgdGhhdAotICAgICAgICAgIHNpbmNlIFMtRXhwcmVzc2lvbnMgdXN1YWxseSBj b250YWluIHNwYWNlcywgc29tZSBmb3JtIG9mCi0gICAgICAgICAgZ3JvdXBpbmcgb3IgcXVvdGlu ZyBtaWdodCBiZSBuZWVkZWQgaW4gc29tZSBjb250ZXh0czoKLQotICBlY2hvIFxmc2V4cHJlc3Np b24oKCsgMSAxKSkgICAgICAgICAgICA7IE91dGVyIHBhcmVudGhlc2VzIG1heSBiZSBpbmNsdWRl ZAotICBlY2hvIFxmc2V4cHIoKyAxIDEpICAgICAgICAgICAgICAgICAgICA7IE91dGVyIHBhcmVu dGhlc2VzIG1heSBiZSBvbWl0dGVkCi0gIGVjaG8gVmFsdWUgPSAiXGZzZXhwKCsgMSBhKSIgICAg ICAgICAgIDsgQ2FuIGJlIGVtYmVkZGVkIGluIHN0cmluZ3MKLSAgZWNobyBWYWx1ZSA9IFwmYVtc ZnNleHAoLyBiIDIpXSAgICAgICAgOyBDYW4gYmUgdXNlZCBpbiBhcnJheSBzdWJzY3JpcHRzCi0g IGlmID0ge1xmc2V4cCgrIDEgMSl9IDIgeyAgICAgICAgICAgICAgIDsgQnJhY2VzIG5lZWRlZCBo ZXJlIGZvciBncm91cGluZwotICAgICAgZWNobyBPbmUgcGx1cyBvbmUgc3RpbGwgZXF1YWxzIHR3 bwotICB9Ci0KLSAgIFRoZSBJRiBzdGF0ZW1lbnQgaWxsdXN0cmF0ZXMgaG93IHRvIHVzZSBTLUV4 cHJlc3Npb25zIGFzIChvciBpbikgSUYgb3IKLSAgIFdISUxFIGNvbmRpdGlvbnM6Ci0KLSAgICAg KiBBbHRob3VnaCBTLUV4cHJlc3Npb25zIGFuZCBJRiBjb25kaXRpb25zIGFyZSBzaW1pbGFyIGlu IGFwcGVhcmFuY2UsCi0gICAgICAgdGhleSBhcmUgbm90IGludGVyY2hhbmdlYWJsZS4gVGhlcmVm b3JlIHlvdSBtdXN0IHVzZSBcZnNleHByKCkgdG8KLSAgICAgICBsZXQgS2VybWl0IGtub3cgaXQn cyBhbiBTLUV4cHJlc3Npb24gcmF0aGVyIHRoYW4gYSByZWd1bGFyIElGCi0gICAgICAgY29uZGl0 aW9uLCBvciBhIGJvb2xlYW4gb3IgYWxnZWJyYWljIGV4cHJlc3Npb24gd2l0aGluIGFuIElGCi0g ICAgICAgY29uZGl0aW9uLgotICAgICAqIEluIGNvbnRleHRzIHdoZXJlIGEgc2luZ2xlICJ3b3Jk IiBpcyBleHBlY3RlZCwgeW91IG11c3QgZW5jbG9zZSB0aGUKLSAgICAgICBcZnNleHAoKSBpbnZv Y2F0aW9uIGluIGJyYWNlcyBpZiB0aGUgUy1FeHByZXNzaW9uIGNvbnRhaW5zIHNwYWNlcwotICAg ICAgIChhbmQgbW9zdCBvZiB0aGVtIGRvKS4KLQotICAgSWYgYW4gUy1FeHByZXNzaW9uIGlzIHRo ZSBsYXN0IGNvbW1hbmQgZXhlY3V0ZWQgaW4gYSBtYWNybywgaXRzIHZhbHVlCi0gICBiZWNvbWVz IHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIG1hY3JvOyBubyBSRVRVUk4gY29tbWFuZCBpcyBuZWVk ZWQuCi0gICBFeGFtcGxlOgotCi0gIGRlZiBuZXdhcmVhIHsKLSAgICAgIChsZXQgcyAoLyAoKyBc JTEgXCUyIFwlMykgMi4wKSkKLSAgICAgIChzcXJ0ICgqIHMgKC0gcyBcJTEpICgtIHMgXCUyKSAo LSBzIFwlMykpKQotICB9Ci0KLSAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG1vcmUgZWZm aWNpZW50IHRoYW4pOgotCi0gIGRlZiBuZXdhcmVhIHsKLSAgICAgIChsZXQgcyAoLyAoKyBcJTEg XCUyIFwlMykgMi4wKSkKLSAgICAgIHJldHVybiBcZnNleHAoc3FydCAoKiBzICgtIHMgXCUxKSAo LSBzIFwlMikgKC0gcyBcJTMpKSkKLSAgfQotCi0gICBXaGVuIGFuIFMtRXhwcmVzc2lvbiBpcyBl bnRlcmVkIGFzIGEgY29tbWFuZCAtLSB0aGF0IGlzLCB0aGUgZmlyc3QKLSAgIG5vbmJsYW5rIGNo YXJhY3RlciBvZiB0aGUgY29tbWFuZCBpcyBhIGxlZnQgcGFyZW50aGVzaXMgLS0gdGhlbiBpdCBp cwotICAgYWxsb3dlZCB0byBzcGFuIG11bHRpcGxlIGxpbmVzLCBhcyBtYW55IGFzIHlvdSBsaWtl LCB1bnRpbCB0aGUgZmlyc3QKLSAgIGxlZnQgcGFyZW50aGVzaXMgaXMgbWF0Y2hlZDoKLQotICAo bGV0IHMgKC8KLSAgICAgICAgICAoKwotICAgICAgICAgICBcJTEKLSAgICAgICAgICAgXCUyCi0g ICAgICAgICAgIFwlMwotICAgICAgICAgICApCi0gICAgICAgICAgMi4wCi0gICAgICAgICAgKQot ICAgICAgICkKLSAgKHNxcnQgKCoKLSAgICAgICAgIHMKLSAgICAgICAgICgtIHMgXCUxKQotICAg ICAgICAgKC0gcyBcJTIpCi0gICAgICAgICAoLSBzIFwlMykKLSAgICAgICAgICkKLSAgICAgICAg KQotCi0gICBUaGUgUy1FeHByZXNzaW9uIGNvbmNlcHQgbGVuZHMgaXRzZWxmIGVhc2lseSB0byBl bWJlZGRpbmcgYW5kCi0gICByZWN1cnNpb24sIGJ1dCB0aGUgZGVwdGggdG8gd2hpY2ggcmVjdXJz aW9uIGNhbiBvY2N1ciBpcyBsaW1pdGVkIGJ5IHRoZQotICAgcmVzb3VyY2VzIG9mIHRoZSBjb21w dXRlciAobWVtb3J5IHNpemUsIGFkZHJlc3Mgc3BhY2UsIHN3YXAgc3BhY2Ugb24KLSAgIGRpc2sp IGFuZCBvdGhlciBmYWN0b3JzLiBUaGVyZSBpcyBubyB3YXkgdGhhdCBDLUtlcm1pdCBjYW4ga25v dyB3aGF0Ci0gICB0aGlzIGxpbWl0IGlzLCBzaW5jZSBpdCB2YXJpZXMgbm90IG9ubHkgZnJvbSBj b21wdXRlciB0byBjb21wdXRlciwgYnV0Ci0gICBhbHNvIGZyb20gbW9tZW50IHRvIG1vbWVudC4g SWYgcmVzb3VyY2VzIGFyZSBleGhhdXN0ZWQgYnkgcmVjdXJzaW9uLAotICAgQy1LZXJtaXQgc2lt cGx5IGNyYXNoZXM7IHRoZXJlJ3Mgbm8gd2F5IHRvIHRyYXAgdGhpcyBlcnJvci4gSG93ZXZlciwK LSAgIHlvdSBjYW4gc2V0IGEgZGVwdGggbGltaXQgb24gUy1FeHByZXNzaW9uczoKLQotICAgU0VU IFNFWFBSRVNTSU9OIERFUFRILUxJTUlUIG51bWJlcgotICAgICAgICAgIExpbWl0cyB0aGUgbnVt YmVyIG9mIHRpbWVzIHRoZSBTLUV4cHJlc3Npb24gcmVhZGVyIGNhbiBpbnZva2UKLSAgICAgICAg ICBpdHNlbGYgd2l0aG91dCByZXR1cm5pbmcgdG8gdGhlIGdpdmVuIG51bWJlci4gVGhlIGRlZmF1 bHQgbGltaXQKLSAgICAgICAgICBpcyAxMDAwLiBUaGlzIGxpbWl0IGFwcGxpZXMgdG8gUy1FeHBy ZXNzaW9ucyBlbWJlZGRlZCB3aXRoaW4KLSAgICAgICAgICBvdGhlciBTLUV4cHJlc3Npb25zIGFz IHdlbGwgYXMgdG8gUy1FeHByZXNzaW9ucyB0aGF0IGludm9rZQotICAgICAgICAgIHJlY3Vyc2l2 ZSBtYWNyb3MuIElmIHRoZSBsaW1pdCBpcyBleGNlZWRlZCwgS2VybWl0IHByaW50cwotICAgICAg ICAgICI/Uy1FeHByZXNzaW9uIGRlcHRoIGxpbWl0IGV4Y2VlZGVkIiBhbmQgcmV0dXJucyB0byBp dHMgcHJvbXB0LgotICAgICAgICAgIE1vcmUgYWJvdXQgcmVjdXJzaW9uIGluIFs1MDhdU2VjdGlv biA5LjguCi0KLSAgIFlvdSBjYW4gYWxzbyB0ZXN0IHRoZSBkZXB0aCBwcm9ncmFtbWF0aWNhbGx5 OgotCi0gICBcdihzZGVwdGgpCi0gICAgICAgICAgVGhlIGN1cnJlbnQgUy1FeHByZXNzaW9uIGlu dm9jYXRpb24gZGVwdGguIFRoZSBkZXB0aCBpbmNsdWRlcwotICAgICAgICAgIGJvdGggbmVzdGlu ZyBsZXZlbCBhbmQgcmVjdXJzaW9uLiBGb3IgZXhhbXBsZSwgaW46Ci0gICAgICAgICAgKGZvbyAo Zm9vIChmb28gKGZvbyAoZm9vKSkpKSksIHRoZSBpbm5lcm1vc3QgKGZvbykgaXMgYXQgZGVwdGgK LSAgICAgICAgICA1LgotCi0gICBIZWxwLCBjb21wbGV0aW9uLCBhbmQgc3ludGF4IGNoZWNraW5n IGFyZSBub3QgYXZhaWxhYmxlIHdpdGhpbiBhbgotICAgUy1FeHByZXNzaW9uLiBJZiB5b3UgdHlw ZSA/IHdpdGhpbiBhbiBTLUV4cHJlc3Npb24sIGl0IHNheXM6Ci0KLSAgQy1LZXJtaXQ+KD8gUy1F eHByZXNzaW9uICgiaGVscCBzZXhwIiBmb3IgZGV0YWlscykKLQotICAgQXMgaXQgc2F5cywgdHlw aW5nICJoZWxwIHNleHAiIHdpbGwgZGlzcGxheSBhIGJyaWVmIGhlbHAgdGV4dC4KLQotICAgVGhl IFNIT1cgU0VYUFJFU1NJT04gY29tbWFuZCBkaXNwbGF5cyBjdXJyZW50IFNFVCBTRVhQUkVTU0lP TiBzZXR0aW5ncwotICAgYW5kIHJlbGF0ZWQgaW5mb3JtYXRpb24uCi0KLSAgIFsgWzUwOV1Ub3Ag XSBbIFs1MTBdQ29udGVudHMgXSBbIFs1MTFdQy1LZXJtaXQgSG9tZSBdIFsgWzUxMl1LZXJtaXQK LSAgIEhvbWUgXQotCi05LjQuIFN1bW1hcnkgb2YgQnVpbHQtaW4gQ29uc3RhbnRzIGFuZCBPcGVy YXRvcnMKLQotICAgVGhyZWUgY29uc3RhbnRzIGFyZSBidWlsdCBpbjoKLQotICAgICAqIFBJLCB3 aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgcGkgKHRoZSBxdW90aWVudCBvZiBjaXJjdW1mZXJl bmNlCi0gICAgICAgb2YgYW55IGNpcmNsZSBhbmQgaXRzIGRpYW1ldGVyLCAzLjE0MTU5MjY1My4u LikgdG8gdGhlIHVuZGVybHlpbmcKLSAgICAgICBtYWNoaW5lJ3MgcHJlY2lzaW9uOwotICAgICAq IFQsIHdoaWNoIGFsd2F5cyBoYXMgdGhlIHZhbHVlIDEsIHdoaWNoIHNpZ25pZmllcyB0cnV0aCBp biBLZXJtaXQKLSAgICAgICBsb2dpY2FsIGV4cHJlc3Npb25zIG9yIFMtRXhwcmVzc2lvbnM7Ci0g ICAgICogTklMLCB3aGljaCBhbHdheXMgaGFzIHRoZSBlbXB0eSB2YWx1ZSwgYW5kIGNhbiBzZXJ2 ZSBhcyBhIEZhbHNlCi0gICAgICAgdHJ1dGggdmFsdWUuCi0KLSAgIFRoZXNlIGNvbnN0YW50cyBh cmUgc3BlY2lmaWMgdG8gUy1FeHByZXNzaW9ucyBhbmQgYXJlIG5vdCB2aXNpYmxlCi0gICBvdXRz aWRlIHRoZW0uIFRoZXkgbWF5IG5vdCBiZSB1c2VkIGFzIHRoZSB0YXJnZXQgb2YgYW4gYXNzaWdu bWVudC4gU28sCi0gICBmb3IgZXhhbXBsZToKLQotICAoc2V0cSB0IDApICAgRmFpbHMKLSAgYXNz aWduIHQgMCAgIFN1Y2NlZWRzIGJ1dCB0aGlzIGlzIG5vdCB0aGUgc2FtZSBUIQotCi0gICBFICh0 aGUgYmFzZSBvZiBuYXR1cmFsIGxvZ2FyaXRobXMsIDIuNzE4MjgxODE4NC4uLikgaXMgbm90IGJ1 aWx0IGluCi0gICBzaW5jZSBpdCBpcyBub3QgaW50cmluc2ljIGluIG1vc3QgTGlzcCBkaWFsZWN0 cy4gSWYgeW91IHdhbnQgRSB0byBiZQotICAgdGhlIGJhc2Ugb2YgbmF0dXJhbCBsb2dhcml0aG1z IHlvdSBjYW46Ci0KLSAgKHNldHEgZSAoZXhwIDEpKQotCi0gICBPcGVyYXRvcnMgYXJlIGVpdGhl ciBzeW1ib2xzIChzdWNoIGFzICIrIikgb3Igd29yZHMuIFdvcmRzIG11c3QgYmUKLSAgIHNwZWxs ZWQgb3V0IGluIGZ1bGwsIG5vdCBhYmJyZXZpYXRlZC4gRGlmZmVyZW5jZXMgb2YgYWxwaGFiZXRp YyBjYXNlCi0gICBhcmUgaWdub3JlZC4KLQotICAgVGhlIG1vc3QgYmFzaWMgb3BlcmF0aW9uIGlu IFMtRXhwcmVzc2lvbnMgaXMgZXZhbHVhdGlvbjoKLQotICAgRVZBTCBbIHMtZXhwcmVzc2lvbiBv ciB2YXJpYWJsZSBvciBudW1iZXIgWyBhbm90aGVyIFsgYW5vdGhlciAuLi4gXSBdIF0KLSAgICAg ICAgICBFdmFsdWF0ZXMgaXRzIG9wZXJhbmRzIGFuZCByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUg bGFzdCBvbmUKLSAgICAgICAgICBldmFsdWF0ZWQuIEV4YW1wbGVzOgotCi0gIChldmFsKSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotICAoZXZhbCAxKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDEKLSAgKGV2YWwgYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 YWx1ZSBvZiBhCi0gIChldmFsICgrIDEgYSkpICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUg b2YgYSsxCi0gIChldmFsIChzZXRxIGEgMSkgKHNldHEgYiAoKyBhIDAuNSkpKSAgdmFsdWUgb2Yg YiAoPSBhKzAuNSkKLQotICAgICAgICAgIFlvdSBjYW4gdXNlICIuIiBhcyBhIHNob3J0aGFuZCBm b3IgRVZBTDoKLQotICAoLikKLSAgKC4gMSkKLSAgKC4gYSkKLSAgKC4gKCsgMSBhKSkKLSAgKC4g KHNldHEgYSAxKSAoc2V0cSBiICgrIGEgMC41KSkpCi0KLSAgIE9wcG9zaXRlIG9mIEVWQUwgaXMg dGhlIG9wZXJhdG9yIHRoYXQgc3VwcHJlc3NlcyBldmFsdWF0aW9uIG9mIGl0cwotICAgb3BlcmFu ZDoKLQotICAgUVVPVEUgaXRlbQotICAgICAgICAgIFRoZSB2YWx1ZSAocXVvdGUgaXRlbSkgaXMg Iml0ZW0iLiBJZiB0aGUgaXRlbSBpcyBpdHNlbGYgYW4KLSAgICAgICAgICBTLUV4cHJlc3Npb24s IHRoZSByZXN1bHQgaXMgdGhlIFMtRXhwcmVzc2lvbiB3aXRoIHRoZSBvdXRlcgotICAgICAgICAg IHBhcmVudGhlc2VzIHN0cmlwcGVkLiBFeGFtcGxlczoKLQotICAocXVvdGUpICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChpbGxlZ2FsKQotICAocXVvdGUgYSkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGEKLSAgKHF1b3RlIGhlbGxvKSAgICAgICAgICAgICAgICAgICAgICAgICBo ZWxsbwotICAocXVvdGUgKHRoaXMgaXMgYSBzdHJpbmcpKSAgICAgICAgICAgIHRoaXMgaXMgYSBz dHJpbmcKLSAgKHF1b3RlIHRoaXMgaXMgYSBzdHJpbmcpICAgICAgICAgICAgICAoaWxsZWdhbCkK LQotICAgICAgICAgIEEgc2hvcnRoYW5kIG5vdGF0aW9uIGlzIGFsc28gYWNjZXB0ZWQgZm9yIHF1 b3Rpbmc6Ci0gICAgICAgICAgJ2EgaXMgZXF1aXZhbGVudCB0byAocXVvdGUgYSkuIEFuZCB0aGVy ZWZvcmU6Ci0gICAgICAgICAgJyhhIGIgYykgaXMgZXF1aXZhbGVudCB0byAocXVvdGUgKGEgYiBj KSkuCi0gICAgICAgICAgTW9yZSBhYm91dCBxdW90aW5nIGluIFs1MTNdU2VjdGlvbiA5LjguCi0K LSAgIFNUUklORyBpdGVtCi0gICAgICAgICAgSXMgYSBjb21iaW5hdGlvbiBvZiBFVkFMIGFuZCBR VU9URS4gSXQgZXZhbHVhdGVzIHRoZSBpdGVtIGFzIGFuCi0gICAgICAgICAgUy1FeHByZXNzaW9u LCBhbmQgdGhlbiBwdXRzIHF1b3RlcyBhcm91bmQgdGhlIHJlc3VsdCAobW9yZSBhYm91dAotICAg ICAgICAgIHRoaXMgaW4gWzUxNF1TZWN0aW9uIDkuOCkuCi0KLSAgIFRoZSBmb2xsb3dpbmcgb3Bl cmF0b3JzIGFzc2lnbiB2YWx1ZXMgdG8gdmFyaWFibGVzOgotCi0gICBTRVRRIFsgdmFyaWFibGUg WyB2YWx1ZSBbIHZhcmlhYmxlIFsgdmFsdWUgWyAuLi4gXSBdIF0gXSBdCi0gICAgICAgICAgQXBw bGllcyB0byBnbG9iYWwgdmFyaWFibGVzLiBGb3IgZWFjaCB2YXJpYWJsZSBnaXZlbjogaWYgYSB2 YWx1ZQotICAgICAgICAgIGlzIG5vdCBnaXZlbiwgdGhlIHZhcmlhYmxlIGlzIHVuZGVmaW5lZC4g SWYgYSB2YWx1ZSBpcyBnaXZlbiwKLSAgICAgICAgICBhc3NpZ25zIHRoZSB2YWx1ZSB0byB0aGUg dmFyaWFibGUuIFRoZSB2YWx1ZSBtYXkgYmUgYSBudW1iZXIsIGEKLSAgICAgICAgICB2YXJpYWJs ZSwgb3IgYW55dGhpbmcgdGhhdCByZXNvbHZlcyB0byBhIG51bWJlciBpbmNsdWRpbmcgYW4KLSAg ICAgICAgICBTLUV4cHJlc3Npb24uIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBsYXN0IGFzc2ln bm1lbnQuCi0gICAgICAgICAgRXhhbXBsZXM6Ci0KLSAgKHNldHEpICAgICAgICAgICAgIERvZXMg bm90aGluZywgcmV0dXJucyBOSUwuCi0gIChzZXRxIGEpICAgICAgICAgICBVbmRlZmluZXMgYSwg cmV0dXJucyBOSUwuCi0gIChzZXRxIGEgMSkgICAgICAgICBBc3NpZ25zIDEgdG8gYSwgcmV0dXJu cyAxLgotICAoc2V0cSBhIDEgYiAyKSAgICAgQXNzaWducyAxIHRvIGEsIDIgdG8gYiwgcmV0dXJu cyAyLgotICAoc2V0cSBhIDEgYiAyIGMpICAgQXNzaWducyAxIHRvIGEsIDIgdG8gYiwgdW5kZWZp bmVzIGMsIHJldHVybnMgTklMLgotCi0gICBUbyB1bmRlZmluZSBhIHZhcmlhYmxlIHRoYXQgaXMg bm90IHRoZSBmaW5hbCBvbmUgaW4gdGhlIGxpc3QsIGdpdmUgaXQgYQotICAgdmFsdWUgb2YgIigp IiBvciBOSUw6Ci0KLSAgKHNldHEgYSAoKSBiIDIpICAgIFVuZGVmaW5lcyBhLCBhc3NpZ25zIDIg dG8gYiwgcmV0dXJucyAyLgotICAoc2V0cSBhIG5pbCBiIDIpICAgRGl0dG8uCi0KLSAgIE5vdGUg dGhhdCBhIHZhcmlhYmxlIGNhbiBiZSB1c2VkIHJpZ2h0IGF3YXkgb25jZSBpdCBoYXMgYSB2YWx1 ZToKLQotICAoc2V0cSBhIDEgYiBhKSAgICAgQXNzaWducyAxIHRvIGEsIHRoZSB2YWx1ZSBvZiBh ICgxKSB0byBiLCByZXR1cm5zIDEuCi0KLSAgIFRoZSByZXN1bHRzIG9mIFNFVFEgKHdoZW4gdXNl ZCB3aXRoIG1hY3JvIG5hbWVzKSBjYW4gYmUgY2hlY2tlZAotICAgY29udmVuaWVudGx5IHdpdGgg U0hPVyBNQUNSTywgZS5nOgotCi0gIHNob3cgbWFjIGEgYiBjCi0KLSAgIExFVCBbIHZhcmlhYmxl IFsgdmFsdWUgWyB2YXJpYWJsZSBbIHZhbHVlIFsgLi4uIF0gXSBdIF0gXQotICAgICAgICAgIExp a2UgU0VUUSwgYnV0IGFwcGxpZXMgdG8gbG9jYWwgdmFyaWFibGVzLiBOb3RlIHRoYXQgImxvY2Fs IiBpcwotICAgICAgICAgIHVzZWQgaW4gdGhlIEtlcm1pdCBzZW5zZSwgbm90IHRoZSBMaXNwIHNl bnNlOyBpdCBhcHBsaWVzIHRvIHRoZQotICAgICAgICAgIGN1cnJlbnQgS2VybWl0IGNvbW1hbmQg bGV2ZWwsIG5vdCB0byB0aGUgY3VycmVudCBTLUV4cHJlc3Npb24uCi0KLSAgIElmIHlvdSB3YW50 IHRvIHVzZSBTRVRRIG9yIExFVCB0byBhc3NpZ24gYSB2YWx1ZSB0byBhIGJhY2tzbGFzaAotICAg dmFyaWFibGUgc3VjaCBhcyBcJWEgb3IgXCZhWzJdLCB5b3UgbXVzdCBkb3VibGUgdGhlIGJhY2tz bGFzaDoKLQotICAoc2V0cSBcXCVhIDMpCi0gIChzZXRxIFxcJWIgKCsgXCVhIDEpKQotICAoc2V0 cSBcXCZhWzJdIChzZXRxIChcXCVjICgrIFwlYSBcJWIpKSkpCi0KLSAgIEluIG90aGVyIHdvcmRz OgotCi0gICAgICogRG91YmxlIHRoZSBiYWNrc2xhc2ggd2hlbiB5b3Ugd2FudCB0byBpbmRpY2F0 ZSB0aGUgdmFyaWFibGUncyBOQU1FOwotICAgICAqIERvbid0IGRvdWJsZSB0aGUgYmFja3NsYXNo IHdoZW4geW91IHdhbnQgaXRzIFZBTFVFLgotCi0gICBTZWUgWzUxNV1TZWN0aW9uIDkuNiBmb3Ig YSBmdWxsZXIgZXhwbGFuYXRpb24gb2YgdmFyaWFibGUgc3ludGF4IGFuZAotICAgc2NvcGUuCi0K LSAgIEhlcmUncyBhIHN1bW1hcnkgdGFibGUgb2YgYXJpdGhtZXRpYyBvcGVyYXRvcnM7IGluIHRo ZSBleGFtcGxlcywgYSBpcyAyCi0gICBhbmQgYiBpcyAtMS4zOgotCi0gIE9wZXJhdG9yICBEZXNj cmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGFtcGxlICAgICAgICAgICBSZXN1 bHQKLSAgKyAgICAgICAgIEFkZHMgYWxsIG9wZXJhbmRzICgwIG9yIG1vcmUpICAgICAgICAgICgr IGEgYikgICAgICAgICAgIDAuNwotICAtICAgICAgICAgU3VidHJhY3RzIGFsbCBvcGVyYW5kcyAo MCBvciBtb3JlKSAgICAgKC0gOSA1IDIgMSkgICAgICAgMQotICAqICAgICAgICAgTXVsdGlwbGll cyBhbGwgb3BlcmFuZHMgKDAgb3IgbW9yZSkgICAgKCogYSAoKyBiIDEpIDMpICAtMS44MAotICAv ICAgICAgICAgRGl2aWRlcyBhbGwgb3BlcmFuZHMgKDIgb3IgbW9yZSkgICAgICAgKC8gYiBhIDIp ICAgICAgICAtMC4zMjUKLSAgXiAgICAgICAgIFJhaXNlIGdpdmVuIG51bWJlciB0byBnaXZlbiBw b3dlciAgICAgICheIDMgMikgICAgICAgICAgIDkKLSAgKysgICAgICAgIEluY3JlbWVudHMgdmFy aWFibGVzICAgICAgICAgICAgICAgICAgICgrKyBhIDEuMikgICAgICAgIDMuMgotICAtLSAgICAg ICAgRGVjcmVtZW50cyB2YXJpYWJsZXMgICAgICAgICAgICAgICAgICAgKC0tIGEpICAgICAgICAg ICAgMQotICBBQlMgICAgICAgQWJzb2x1dGUgdmFsdWUgb2YgMSBvcGVyYW5kICAgICAgICAgICAg KGFicyAoKiBhIGIgMykpICAgNy44Ci0gIE1BWCAgICAgICBNYXhpbXVtIG9mIGFsbCBvcGVyYW5k cyAoMSBvciBtb3JlKSAgICAobWF4IDEgMiAzIDQpICAgICA0Ci0gIE1JTiAgICAgICBNaW5pbXVt IG9mIGFsbCBvcGVyYW5kcyAoMSBvciBtb3JlKSAgICAobWluIDEgMiAzIDQpICAgICAxCi0gIE1P RCAoJSkgICBNb2R1bHVzIG9mIGFsbCBvcGVyYW5kcyAoMSBvciBtb3JlKSAgICAobW9kIDcgNCAy KSAgICAgICAxCi0gIEZMT0FUICAgICBDb252ZXJ0IGFuIGludGVnZXIgdG8gZmxvYXRpbmctcG9p bnQgICAoZmxvYXQgMSkgICAgICAgICAxLjAKLSAgVFJVTkNBVEUgIEludGVnZXIgcGFydCBvZiBm bG9hdGluZy1wb2ludCBvcGVyYW5kICh0cnVuY2F0ZSAzLjMzMykgIDMKLSAgQ0VJTElORyAgIENl aWxpbmcgb2YgZmxvYXRpbmctcG9pbnQgb3BlcmFuZCAgICAgIChjZWlsaW5nIDEuMjUpICAgIDIK LSAgRkxPT1IgICAgIEZsb29yIG9mIGZsb2F0aW5nLXBvaW50IG9wZXJhbmQgICAgICAgIChmbG9v ciAxLjI1KSAgICAgIDEKLSAgUk9VTkQgICAgIE9wZXJhbmQgcm91bmRlZCB0byBuZWFyZXN0IGlu dGVnZXIgICAgIChyb3VuZCAxLjc1KSAgICAgIDIKLSAgU1FSVCAgICAgIFNxdWFyZSByb290IG9m IDEgb3BlcmFuZCAgICAgICAgICAgICAgIChzcXJ0IDIpICAgICAgICAgIDEuNDE0Li4KLSAgRVhQ ICAgICAgIGUgKDIuNzE4MjguLikgdG8gdGhlIGdpdmVuIHBvd2VyICAgICAgIChleHAgLTEpICAg ICAgICAgIDAuMzY3Li4KLSAgU0lOICAgICAgIFNpbmUgb2YgYW5nbGUtaW4tcmFkaWFucyAgICAg ICAgICAgICAgIChzaW4gKC8gcGkgMikpICAgIDEuMAotICBDT1MgICAgICAgQ29zaW5lIG9mIGFu Z2xlLWluLXJhZGlhbnMgICAgICAgICAgICAgKGNvcyBwaSkgICAgICAgICAtMS4wCi0gIFRBTiAg ICAgICBUYW5nZW50IG9mIGFuZ2xlLWluLXJhZGlhbnMgICAgICAgICAgICAodGFuIHBpKSAgICAg ICAgICAwLjAKLSAgTE9HICAgICAgIE5hdHVyYWwgbG9nIChiYXNlIGUpIG9mIGdpdmVuIG51bWJl ciAgIChsb2cgMi43MTgzKSAgICAgIDEuMDAwLi4KLSAgTE9HMTAgICAgIExvZyBiYXNlIDEwIG9m IGdpdmVuIG51bWJlciAgICAgICAgICAgIChsb2cxMCAxMDAwKSAgICAgIDMuMAotCi0gICBUaGUg KysgYW5kIC0tIG9wZXJhdG9ycyBhcmUgYWxzbyBhc3NpZ25tZW50IG9wZXJhdG9ycyBhbmQgd29y ayBqdXN0Ci0gICBsaWtlIFNFVFEgYW5kIExFVCBpbiB0aGVpciBpbnRlcnByZXRhdGlvbnMgb2Yg b3BlcmF0b3JzIGFuZCBvcGVyYW5kcywKLSAgIGJ1dDoKLQotICAgICAqIEVhY2ggdGFyZ2V0IHZh cmlhYmxlIG11c3QgYWxyZWFkeSBiZSBkZWZpbmVkIGFuZCBoYXZlIGEgbnVtZXJpYwotICAgICAg IHZhbHVlOwotICAgICAqIFRoZSBhc3NpZ25tZW50IHZhbHVlIGlzIHRoZSBhbW91bnQgYnkgd2hp Y2ggdG8gaW5jcmVtZW50IG9yCi0gICAgICAgZGVjcmVtZW50IHRoZSB2YXJpYWJsZS4KLSAgICAg KiBJZiBhbiBhc3NpZ25tZW50IHZhbHVlIGlzIG5vdCBnaXZlbiwgMSBpcyB1c2VkLgotCi0gICBJ ZiB5b3UgaW5jbHVkZSBtb3JlIHRoYW4gb25lIHZhcmlhYmxlLXZhbHVlIHBhaXIgaW4gYSArKyBv ciAtLQotICAgZXhwcmVzc2lvbiwgZXZlcnkgdmFyaWFibGUgKGV4Y2VwdCwgb3B0aW9uYWxseSwg dGhlIGxhc3QpIG11c3QgYmUKLSAgIGZvbGxvd2VkIGJ5IGEgdmFsdWUuIEV4YW1wbGVzOgotCi0g ICgrKyBhKSAgICAgICAgICAgICAgICBFcXVpdmFsZW50IHRvIChzZXRxIGEgKCsgYSAxKSkgYW5k IHRvICgrKyBhIDEpCi0gICgrKyBhIDIpICAgICAgICAgICAgICBFcXVpdmFsZW50IHRvIChzZXRx IGEgKCsgYSAyKSkKLSAgKC0tIGEgKCogMiBwaSkpICAgICAgIEVxdWl2YWxlbnQgdG8gKHNldHEg YSAoLSBhICgqIDIgcGkpKSkKLSAgKCsrIGEgMSBiIDEgYyAxIGQpICAgIEVxdWl2YWxlbnQgdG8g Zm91ciBTRVRRcyBpbmNyZW1lbnRpbmcgYSxiLGMsZCBieSAxLgotCi0gICBBbm90aGVyIGdyb3Vw IG9mIG9wZXJhdG9ycyBmb3JtcyB0aGUgcHJlZGljYXRlcy4gVGhlc2UgcmV0dXJuIGEgInRydXRo Ci0gICB2YWx1ZSIsIGluIHdoaWNoIDAgKG9yIE5JTCkgaXMgZmFsc2UsIGFuZCAxIG9yIGFueSBv dGhlciBub256ZXJvIG51bWJlcgotICAgaXMgdHJ1ZS4KLQotICBPcGVyYXRvciAgRGVzY3JpcHRp b24gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhhbXBsZSAgICAgICAgICAgUmVzdWx0Ci0g ID0gKG9yID09KSBPcGVyYW5kcyBhcmUgZXF1YWwgICAgICAgICAgICAgICAgICAgICAoPSAxIDEu MCkgICAgICAgICAxCi0gICE9ICAgICAgICBPcGVyYW5kcyBhcmUgbm90IGVxdWFsICAgICAgICAg ICAgICAgICAoIT0gMSAxLjApICAgICAgICAwCi0gIDwgICAgICAgICBPcGVyYW5kcyBpbiBzdHJp Y3RseSBhc2NlbmRpbmcgb3JkZXIgICAoPCAxIDIgMykgICAgICAgICAxCi0gIDw9ICAgICAgICBP cGVyYW5kcyBpbiBhc2NlbmRpbmcgb3JkZXIgICAgICAgICAgICAoPD0gMSAxIDIgMykgICAgICAx Ci0gID4gICAgICAgICBPcGVyYW5kcyBpbiBzdHJpY3RseSBkZXNjZW5kaW5nIG9yZGVyICAoPiAz IDIgMSkgICAgICAgICAxCi0gID49ICAgICAgICBPcGVyYW5kcyBpbiBkZXNjZW5kaW5nIG9yZGVy ICAgICAgICAgICAoPD0gMyAzIDIgMSkgICAgICAxCi0gIEFORCAoJiYpICBPcGVyYW5kcyBhcmUg YWxsIHRydWUgICAgICAgICAgICAgICAgICAoYW5kIDEgMSAxIDEgMCkgICAwCi0gIE9SICAofHwp ICBBdCBsZWFzdCBvbmUgb3BlcmFuZCBpcyB0cnVlICAgICAgICAgICAob3IgMSAxIDEgMSAwKSAg ICAxCi0gIFhPUiAgICAgICBMb2dpY2FsIEV4Y2x1c2l2ZSBPUiAgICAgICAgICAgICAgICAgICAo eG9yIDMgMSkgICAgICAgICAwCi0gIE5PVCAoISkgICBSZXZlcnNlcyB0cnV0aCB2YWx1ZSBvZiBv cGVyYW5kICAgICAgICAobm90IDMpICAgICAgICAgICAwCi0KLSAgIFRoZSBFeGNsdXNpdmUgT1Ig b2YgdHdvIHZhbHVlcyBpcyB0cnVlIGlmIG9uZSB2YWx1ZSBpcyB0cnVlIGFuZCB0aGUKLSAgIG90 aGVyIHZhbHVlIGlzIGZhbHNlLgotCi0gICBBbmQgYW5vdGhlciBncm91cCBvcGVyYXRlcyBvbiBi aXRzIHdpdGhpbiBhbiBpbnRlZ2VyIHdvcmQ6Ci0KLSAgT3BlcmF0b3IgIERlc2NyaXB0aW9uICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEV4YW1wbGUgICAgICAgICAgIFJlc3VsdAotICAmICAg ICAgICAgQml0d2lzZSBBTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCYgNyAyKSAgICAg ICAgICAgMgotICB8ICAgICAgICAgQml0d2lzZSBPUiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKHwgMSAyIDMgNCkgICAgICAgNwotICAjICAgICAgICAgQml0d2lzZSBFeGNsdXNpdmUgT1Ig ICAgICAgICAgICAgICAgICAgKCMgMyAxKSAgICAgICAgICAgMgotICB+ICAgICAgICAgUmV2ZXJz ZXMgYWxsIGJpdHMgICAgICAgICAgICAgICAgICAgICAgKH4gMykgICAgICAgICAgICAtNAotCi0g ICBUaGVzZSBvcGVyYXRvcnMgY29lcmNlIHRoZWlyIG9wZXJhbmRzIHRvIGludGVnZXIgYnkgdHJ1 bmNhdGlvbiBpZgotICAgbmVjZXNzYXJ5LiBUaGUgcmVzdWx0IG9mIGJpdCByZXZlcnNhbCBpcyBo YXJkd2FyZSBkZXBlbmRlbnQuCi0KLSAgIFRoZSBmaW5hbCBjYXRlZ29yeSBvZiBvcGVyYXRvciB3 b3JrcyBvbiB0cnV0aCB2YWx1ZXM6Ci0KLSAgT3BlcmF0b3IgIERlc2NyaXB0aW9uICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEV4YW1wbGUgICAgICAgICAgIFJlc3VsdAotICBJRiAgICAgICAg Q29uZGl0aW9uYWwgZXZhbHVhdGlvbiAgICAgICAgICAgICAgICAgKGlmICgxKSAyIDMpICAgICAg MgotCi0gICBJRiAocHJlZGljYXRlKSAoczEpIFsgKHMyKSBdCi0gICAgICAgICAgVGhlIElGIG9w ZXJhdG9yIGlzIHNpbWlsYXIgdG8gS2VybWl0J3MgSUYgY29tbWFuZC4gSWYgdGhlCi0gICAgICAg ICAgcHJlZGljYXRlIGlzIHRydWUgKGkuZS4gZXZhbHVhdGVzIHRvIGEgbm9uemVybyBudW1iZXIp LCB0aGUKLSAgICAgICAgICBmaXJzdCBTLUV4cHJlc3Npb24gKHMxKSBpcyBldmFsdWF0ZWQgYW5k IGl0cyB2YWx1ZSBpcyByZXR1cm5lZC4KLSAgICAgICAgICBPdGhlcndpc2UsIGlmIChzMikgaXMg Z2l2ZW4sIGl0IGlzIGV2YWx1YXRlZCBhbmQgaXRzIHZhbHVlCi0gICAgICAgICAgcmV0dXJuZWQ7 IGlmIChzMikgaXMgbm90IGdpdmVuLCBub3RoaW5nIGhhcHBlbnMgYW5kIHRoZSBOSUwKLSAgICAg ICAgICAoZW1wdHkpIHZhbHVlIGlzIHJldHVybmVkLgotCi0gICBZb3UgY2FuIGdyb3VwIG11bHRp cGxlIGV4cHJlc3Npb25zIGluIHRoZSBzMSBhbmQgczIgZXhwcmVzc2lvbnMgdXNpbmcKLSAgIEVW QUwgKG9yICIuIik6Ci0KLSAgKGlmICg8IGEgMCkgKGV2YWwgKHNldHEgeCAwKSAoc2V0cSB5IDAp KSAoZXZhbCAoc2V0cSB4IGEpIChzZXRxIHkgYikpKQotCi0gICBvciBlcXVpdmFsZW50bHk6Ci0K LSAgKGlmICg8IGEgMCkgKC4gKHNldHEgeCAwKSAoc2V0cSB5IDApKSAoLiAoc2V0cSB4IGEpIChz ZXRxIHkgYikpKQotCi0gICBFYWNoIG9wZXJhdG9yIGhhcyBpdHMgb3duIHJlcXVpcmVtZW50IGFz IHRvIG51bWJlciBhbmQgdHlwZSBvZgotICAgb3BlcmFuZHMuIEluIHRoZSBmb2xsb3dpbmcgdGFi bGUsICJudW1iZXIiIG1lYW5zIGFueSBraW5kIG9mIG51bWJlciAtLQotICAgaW50ZWdlciBvciBm bG9hdGluZy1wb2ludCAtLSBvciBhIHZhcmlhYmxlLCBmdW5jdGlvbiwgbWFjcm8sIG9yCi0gICBT LUV4cHJlc3Npb24gdGhhdCByZXR1cm5zIGEgbnVtYmVyOyAidm5hbWUiIG1lYW5zIHZhcmlhYmxl IG5hbWUsCi0gICAiZnBudW1iZXIiIG1lYW5zIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIChvciBh bnl0aGluZyB0aGF0IHJlc29sdmVzIHRvCi0gICBvbmUpLCBhbmQgImludGVnZXIiIG1lYW5zIGlu dGVnZXIgKG9yIGFueXRoaW5nIHRoYXQgcmVzb2x2ZXMgdG8gb25lKS4KLSAgICJ0cnV0aHZhbHVl IiBtZWFucyBhbnl0aGluZyB0aGF0IHJlc29sdmVzIHRvIGEgdmFsdWUgb2YgemVybyBvciBhbgot ICAgZW1wdHkgdmFsdWUgKHdoaWNoIGluZGljYXRlcyBmYWxzZSkgb3IgYSBub256ZXJvIHZhbHVl ICh3aGljaCBpbmRpY2F0ZXMKLSAgIHRydWUpLiAiYW55IiBtZWFucyBhbnkga2luZCBvZiB2YWx1 ZSwgaW5jbHVkaW5nIG5vbmUgYXQgYWxsLgotCi0gIE9wZXJhdG9yICBOdW1iZXIgb2Ygb3BlcmFu ZHMgICBUeXBlIG9mIG9wZXJhbmRzICAgIFJldHVybnMKLSAgRVZBTCAgKC4pIDAgb3IgbW9yZSAg ICAgICAgICAgIFMtRXhwcmVzc2lvbiAgICAgICAgTGFzdCB2YWx1ZSAoZGVmYXVsdCBOSUwpCi0g IFNUUklORyAgICAxICAgICAgICAgICAgICAgICAgICBTLUV4cHJlc3Npb24gICAgICAgIHN0cmlu ZwotICBRVU9URSAoJykgMSAgICAgICAgICAgICAgICAgICAgd29yZCAgICAgICAgICAgICAgICBz dHJpbmcKLSAgU0VUUSAgICAgIDAgb3IgbW9yZSAgICAgICAgICAgIHZuYW1lIHZhbHVlIHBhaXJz ICAgTGFzdCB2YWx1ZSAoZGVmYXVsdCBOSUwpCi0gIExFVCAgICAgICAwIG9yIG1vcmUgICAgICAg ICAgICB2bmFtZSB2YWx1ZSBwYWlycyAgIExhc3QgdmFsdWUgKGRlZmF1bHQgTklMKQotICArICAg ICAgICAgMCBvciBtb3JlICAgICAgICAgICAgbnVtYmVyICAgICAgICAgICAgICBudW1iZXIgICAg IChkZWZhdWx0IDApCi0gIC0gICAgICAgICAwIG9yIG1vcmUgICAgICAgICAgICBudW1iZXIgICAg ICAgICAgICAgIG51bWJlciAgICAgKGRlZmF1bHQgMCkKLSAgKiAgICAgICAgIDAgb3IgbW9yZSAg ICAgICAgICAgIG51bWJlciAgICAgICAgICAgICAgbnVtYmVyICAgICAoc2VlIG5vdGUgKDEpKQot ICAvICAgICAgICAgMiBvciBtb3JlICAgICAgICAgICAgbnVtYmVyICAgICAgICAgICAgICBudW1i ZXIKLSAgXiAgICAgICAgIDIgb3IgbW9yZSAgICAgICAgICAgIG51bWJlciAgICAgICAgICAgICAg bnVtYmVyCi0gICsrICAgICAgICAxIG9yIG1vcmUgICAgICAgICAgICB2bmFtZSB2YWx1ZSBwYWly cyAgIFJlc3VsdCBvZiBsYXN0IGluY3JlbWVudAotICAtLSAgICAgICAgMSBvciBtb3JlICAgICAg ICAgICAgdm5hbWUgdmFsdWUgcGFpcnMgICBSZXN1bHQgb2YgbGFzdCBkZWNyZW1lbnQKLSAgQUJT ICAgICAgIDEgICAgICAgICAgICAgICAgICAgIG51bWJlciAgICAgICAgICAgICAgbnVtYmVyCi0g IE1BWCAgICAgICAxIG9yIG1vcmUgICAgICAgICAgICBudW1iZXIgICAgICAgICAgICAgIG51bWJl cgotICBNSU4gICAgICAgMSBvciBtb3JlICAgICAgICAgICAgbnVtYmVyICAgICAgICAgICAgICBu dW1iZXIKLSAgTU9EICglKSAgIDIgICAgICAgICAgICAgICAgICAgIG51bWJlciAgICAgICAgICAg ICAgbnVtYmVyCi0gIEZMT0FUICAgICAxICAgICAgICAgICAgICAgICAgICBudW1iZXIgICAgICAg ICAgICAgIGZwbnVtYmVyCi0gIFRSVU5DQVRFICAxICAgICAgICAgICAgICAgICAgICBudW1iZXIg ICAgICAgICAgICAgIGludGVnZXIKLSAgQ0VJTElORyAgIDEgICAgICAgICAgICAgICAgICAgIG51 bWJlciAgICAgICAgICAgICAgaW50ZWdlcgotICBGTE9PUiAgICAgMSAgICAgICAgICAgICAgICAg ICAgbnVtYmVyICAgICAgICAgICAgICBpbnRlZ2VyCi0gIFJPVU5EICAgICAxICAgICAgICAgICAg ICAgICAgICBudW1iZXIgICAgICAgICAgICAgIGludGVnZXIKLSAgU1FSVCAgICAgIDEgICAgICAg ICAgICAgICAgICAgIG51bWJlciAgICAgICAgICAgICAgZnBudW1iZXIKLSAgRVhQICAgICAgIDEg ICAgICAgICAgICAgICAgICAgIG51bWJlciAgICAgICAgICAgICAgZnBudW1iZXIKLSAgU0lOICAg ICAgIDEgICAgICAgICAgICAgICAgICAgIG51bWJlciAgICAgICAgICAgICAgZnBudW1iZXIKLSAg Q09TICAgICAgIDEgICAgICAgICAgICAgICAgICAgIG51bWJlciAgICAgICAgICAgICAgZnBudW1i ZXIKLSAgVEFOICAgICAgIDEgICAgICAgICAgICAgICAgICAgIG51bWJlciAgICAgICAgICAgICAg ZnBudW1iZXIKLSAgTE9HICAgICAgIDEgICAgICAgICAgICAgICAgICAgIG51bWJlciAgICAgICAg ICAgICAgZnBudW1iZXIKLSAgTE9HMTAgICAgIDEgICAgICAgICAgICAgICAgICAgIG51bWJlciAg ICAgICAgICAgICAgZnBudW1iZXIKLSAgPSAoPT0pICAgIDEgb3IgbW9yZSAgICAgICAgICAgIG51 bWJlciAgICAgICAgICAgICAgdHJ1dGh2YWx1ZQotICAhPSAgICAgICAgMSBvciBtb3JlICAgICAg ICAgICAgbnVtYmVyICAgICAgICAgICAgICB0cnV0aHZhbHVlCi0gIDwgICAgICAgICAxIG9yIG1v cmUgICAgICAgICAgICBudW1iZXIgICAgICAgICAgICAgIHRydXRodmFsdWUKLSAgPD0gICAgICAg IDEgb3IgbW9yZSAgICAgICAgICAgIG51bWJlciAgICAgICAgICAgICAgdHJ1dGh2YWx1ZQotICA+ ICAgICAgICAgMSBvciBtb3JlICAgICAgICAgICAgbnVtYmVyICAgICAgICAgICAgICB0cnV0aHZh bHVlCi0gID49ICAgICAgICAxIG9yIG1vcmUgICAgICAgICAgICBudW1iZXIgICAgICAgICAgICAg IHRydXRodmFsdWUKLSAgQU5EICgmJikgIDEgb3IgbW9yZSAgICAgICAgICAgIHRydXRodmFsdWUg ICAgICAgICAgdHJ1dGh2YWx1ZQotICBPUiAgKHx8KSAgMSBvciBtb3JlICAgICAgICAgICAgdHJ1 dGh2YWx1ZSAgICAgICAgICB0cnV0aHZhbHVlCi0gIFhPUiAgICAgICAyICAgICAgICAgICAgICAg ICAgICB0cnV0aHZhbHVlICAgICAgICAgIHRydXRodmFsdWUKLSAgTk9UICghKSAgIDEgICAgICAg ICAgICAgICAgICAgIHRydXRodmFsdWUgICAgICAgICAgdHJ1dGh2YWx1ZQotICAmICAgICAgICAg MSBvciBtb3JlICAgICAgICAgICAgbnVtYmVyIChzZWUgbm90ZSAyKSBpbnRlZ2VyCi0gIHwgICAg ICAgICAxIG9yIG1vcmUgICAgICAgICAgICBudW1iZXIgKHNlZSBub3RlIDIpIGludGVnZXIKLSAg IyAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgIG51bWJlciAoc2VlIG5vdGUgMikgaW50ZWdl cgotICB+ICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgbnVtYmVyIChzZWUgbm90ZSAyKSBp bnRlZ2VyCi0gIElGICAgICAgICAyIG9yIDMgICAgICAgICAgICAgICB0cnV0aHZhbHVlLGFueSxh bnkgIGFueQotCi0gICBPcGVyYXRvcnMgdGhhdCBkb24ndCByZXF1aXJlIGFueSBhcmd1bWVudHMg cmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlcwotICAgc2hvd24uCi0KLSAgICAxLiBUaGUgdmFsdWUg b2YgIioiLCB3aGVuIHVzZWQgYXMgYW4gb3BlcmFuZCwgaXMgaW5pdGlhbGx5ICIxIiBhbmQgdGhl Ci0gICAgICAgdmFsdWUgb2YgdGhlIG1vc3QgcmVjZW50IFMtRXhwcmVzc2lvbiB0aGVyZWFmdGVy LCBhcyBpbiBGcmFueiBMaXNwLgotICAgICAgIFRoaXMgaXMgaGFuZHkgd2hlbiBkb2luZyBhIHNl cmllcyBvZiBjYWxjdWxhdGlvbnMgYnkgaGFuZDoKLSAgQy1LZXJtaXQ+KCogMTMyNzIuNDIgMC40 MCkKLSAgIDUzMDguOTY4Ci0gIEMtS2VybWl0PigvICogMikKLSAgIDI2NTQuNDg0MAotICBDLUtl cm1pdD4KLQotICAgIDIuIFRoZSBiaXR3aXNlIG9wZXJhdG9ycyBjb2VyY2UgdGhlaXIgb3BlcmFu ZHMgdG8gaW50ZWdlciBieQotICAgICAgIHRydW5jYXRpb24uCi0KLSAgIFsgWzUxNl1Ub3AgXSBb IFs1MTddQ29udGVudHMgXSBbIFs1MThdQy1LZXJtaXQgSG9tZSBdIFsgWzUxOV1LZXJtaXQKLSAg IEhvbWUgXQotCi05LjUuIFZhcmlhYmxlcwotCi0gICBBcyBub3RlZCBlbHNld2hlcmUgaW4gdGhp cyBkaXNjdXNzaW9uLCBhbGwgYmFja3NsYXNoIGl0ZW1zICh2YXJpYWJsZXMKLSAgIHN1Y2ggYXMg XCVhLCBtYWNybyBwYXJhbWV0ZXJzIHN1Y2ggYXMgXCUxLCBhcnJheSBlbGVtZW50cyBzdWNoIGFz Ci0gICBcJmFbXCVpXSwgYnVpbHQtaW4gdmFyaWFibGVzIHN1Y2ggYXMgXHYobmRhdGUpLCBidWls dC1pbiBmdW5jdGlvbnMgc3VjaAotICAgYXMgXGZqb2luKCksIG1hY3JvIG5hbWVzIGVuY2xvc2Vk IGluIFxtKCksIFxzKCksIG9yIFw6KCksIGV0YykgYXJlCi0gICBldmFsdWF0ZWQgYXQgInRvcCBs ZXZlbCIgYmVmb3JlIHRoZSBTLUV4cHJlc3Npb24gaXMgc2VudCB0byB0aGUKLSAgIFMtRXhwcmVz c2lvbiByZWFkZXIuIFRvIHVzZSBhIGJhY2tzbGFzaCB2YXJpYWJsZSBhcyB0aGUgdGFyZ2V0IG9m IGFuCi0gICBhc3NpZ25tZW50IChlLmcuIGJ5IFNFVFEsIExFVCwgKyssIG9yIC0tKSwgeW91IG11 c3QgZG91YmxlIHRoZQotICAgYmFja3NsYXNoLCBlLmcuIChzZXRxIFxcJXIgMTIzNCkuIFRoaXMg aXMgZGlzY3Vzc2VkIGF0IGdyZWF0ZXIgbGVuZ3RoCi0gICBpbiB0aGUgbmV4dCBzZWN0aW9uLgot Ci0gICBUaHVzIFMtRXhwcmVzc2lvbiByZWFkZXIgZ2VuZXJhbGx5IGRlYWxzIG9ubHkgd2l0aCBt YWNybyBuYW1lcyAobm90Ci0gICBiYWNrc2xhc2ggaXRlbXMpIGFzIHZhcmlhYmxlcy4gSXQgaXMg aW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZQotICAgcmVhZGVyIGhhbmRsZXMgbWFjcm8g bmFtZXMuIFRoZXJlIGFyZSBmdW5kYW1lbnRhbGx5IHR3byBraW5kcyBvZgotICAgUy1FeHByZXNz aW9uczogdGhvc2UgdGhhdCBjb250YWluIGEgc2luZ2xlIGVsZW1lbnQsIHN1Y2ggYXM6Ci0KLSAg KGZvbykKLQotICAgYW5kIHRob3NlIHRoYXQgY29udGFpbiBtb3JlIHRoYW4gb25lIGVsZW1lbnQ6 Ci0KLSAgKGZvbyBhIGIgYykKLQotICAgSWYgYW4gUy1FeHByZXNzaW9uIGNvbnRhaW5zIG9ubHkg b25lIGVsZW1lbnQsIGFuZCBpdCBpcyB0aGUgbmFtZSBvZiBhCi0gICBtYWNybywgdGhlIG1hY3Jv J3MgZGVmaW5pdGlvbiBpcyBleGFtaW5lZC4gSWYgdGhlIGRlZmluaXRpb24gaXMgYQotICAgbnVt YmVyIChpbnRlZ2VyIG9yIGZsb2F0aW5nLXBvaW50LCBwb3NpdGl2ZSBvciBuZWdhdGl2ZSksIHRo ZW4gdGhpcwotICAgYmVjb21lcyB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24uIElmIHRoZSBk ZWZpbml0aW9uIHN0YXJ0cyB3aXRoICcKLSAgIChhcG9zdHJvcGhlKSwgdGhlbiB0aGUgcXVvdGVk IHdvcmQgb3Igc3RyaW5nIGlzIHRoZSB2YWx1ZSBvZiB0aGUKLSAgIGV4cHJlc3Npb24gKGV4cGxh aW5lZCBpbiBbNTIwXVNlY3Rpb24gOS44KS4gT3RoZXJ3aXNlLCB0aGUgbWFjcm8gaXMKLSAgIGFz c3VtZWQgdG8gYmUgY29tcG9zZWQgb2YgS2VybWl0IGNvbW1hbmRzIChwb3NzaWJseSBpbmNsdWRp bmcKLSAgIFMtRXhwcmVzc2lvbnMpLCB3aGljaCBhcmUgZXhlY3V0ZWQuIElmIHRoZSBtYWNybyBo YXMgYSBSRVRVUk4gdmFsdWUsIG9yCi0gICBpdCBleGVjdXRlcyBhbiBTLUV4cHJlc3Npb24gYXMg aXRzIGxhc3QgY29tbWFuZCwgdGhlIHJlc3VsdCBiZWNvbWVzIHRoZQotICAgdmFsdWUgb2YgdGhl IFMtRXhwcmVzc2lvbjsgb3RoZXJ3aXNlIHRoZSByZXN1bHQgaXMgZW1wdHkuCi0KLSAgIEZvciBT LUV4cHJlc3Npb25zIHRoYXQgY29udGFpbiBtb3JlIHRoYW4gb25lIGVsZW1lbnQsIGFuZCB0aGUg Zmlyc3QKLSAgIGVsZW1lbnQgaXMgdGhlIG5hbWUgb2YgYSBtYWNybywgdGhlbiB0aGlzIG1hY3Jv IGlzIGV4ZWN1dGVkIHdpdGggdGhlCi0gICBhcmd1bWVudHMgdGhhdCBhcmUgZ2l2ZW4sIGFmdGVy IHRoZSBhcmd1bWVudHMgYXJlIGV2YWx1YXRlZCBieSB0aGUKLSAgIFMtRXhwcmVzc2lvbiByZWFk ZXIuIExpa2V3aXNlLCBJZiB0aGUgZmlyc3QgZWxlbWVudCBpcyBhIGJ1aWx0LWluCi0gICBvcGVy YXRvciwgdGhlbiBpdCBpcyBhcHBsaWVkIHRvIHRoZSBvcGVyYW5kcyBhZnRlciB0aGV5IGFyZSBl dmFsdWF0ZWQuCi0gICBJbiBib3RoIGNhc2VzLCBlYWNoIG9wZXJhbmQgaXMgZmVkIHRvIHRoZSBT LUV4cHJlc3Npb24gcmVhZGVyCi0gICByZWN1cnNpdmVseSBmb3IgZXZhbHVhdGlvbi4gSWYgYW4g b3BlcmFuZCBpcyBhIG51bWJlciBvciBhIHF1b3RlZAotICAgc3RyaW5nLCBpdCBpcyB1c2VkIGFz LWlzLiBCdXQgaWYgaXQncyBhIG1hY3JvIG5hbWUsIHRoaXMgZGVnZW5lcmF0ZXMKLSAgIGludG8g dGhlIGZpcnN0IGNhc2UsIGFuZCB0aGUgcHJldmlvdXMgcGFyYWdyYXBoIGFwcGxpZXMuCi0KLSAg IEV4YW1wbGVzOgotCi0gIGRlZmluZSBmb28gMTIzCi0gIChmb28pICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBSZXN1bHQ6IDEyMwotICBkZWZpbmUgZm9vICdhYmMKLSAgKGZvbykgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdDogYWJjCi0gIGRlZmluZSBmb28gJyhv bmUgdHdvIHRocmVlKQotICAoZm9vKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVz dWx0OiBvbmUgdHdvIHRocmVlCi0gIGRlZmluZSBmb28gcmV0dXJuIFxmcmFuZG9tKDEwMDApCi0g IChmb28pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQ6IDcxMyAob3Igb3Ro ZXIgbnVtYmVyKQotICBkZWZpbmUgZm9vICgrIGEgYikKLSAgKGZvbykgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFJlc3VsdDogVGhlIHN1bSBvZiBhIGFuZCBiCi0KLSAgIEEgbW9yZSBk aWZmaWN1bHQgZXhhbXBsZToKLQotICBkZWZpbmUgZm9vIGFiYwotICAoZm9vKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUmVzdWx0OiA/Pz8KLQotICAgVGhlIHJlc3VsdCBpbiB0aGUg bGFzdCBleGFtcGxlIGRlcGVuZHMgb24gdGhlIGRlZmluaXRpb24gb2YgYWJjOgotCi0gICAgICog SWYgaXQgaGFzIG5vIGRlZmluaXRpb24sIGFuIGVycm9yIG9jY3Vyczsgb3RoZXJ3aXNlOgotICAg ICAqIElmIHRoZSBkZWZpbml0aW9uIGlzIGFuIFMtRXhwcmVzc2lvbiwgdGhlIHJlc3VsdCBpcyB0 aGUKLSAgICAgICBTLUV4cHJlc3Npb24ncyB2YWx1ZTsgb3RoZXJ3aXNlOgotICAgICAqIElmIHRo ZSBkZWZpbml0aW9uIGNvbnNpc3RzIG9mIEtlcm1pdCBjb21tYW5kcywgdGhleSBhcmUgZXhlY3V0 ZWQuCi0gICAgICAgQnV0IGluIHRoaXMgY2FzZSAiKGZvbykiIHByb2R1Y2VzIHRoZSBlbXB0eSBy ZXN1bHQsIGJlY2F1c2UgaXQKLSAgICAgICBkb2Vzbid0IFJFVFVSTiBhbnl0aGluZy4KLQotICAg VGhlIHVzZSBvZiBtYWNyb3MgYXMgUy1FeHByZXNzaW9uIG9wZXJhdG9ycyBpcyBkZXNjcmliZWQg aW4KLSAgIFs1MjFdU2VjdGlvbiA5LjguCi0KLSAgIFsgWzUyMl1Ub3AgXSBbIFs1MjNdQ29udGVu dHMgXSBbIFs1MjRdQy1LZXJtaXQgSG9tZSBdIFsgWzUyNV1LZXJtaXQKLSAgIEhvbWUgXQotCi05 LjYuIEFzc2lnbm1lbnRzIGFuZCBTY29wZQotCi0gICBUaGUgYXNzaWdubWVudCBvcGVyYXRvcnMg U0VUUSBhbmQgTEVUIGFwcGx5IHRvIGdsb2JhbCBhbmQgbG9jYWwKLSAgIHZhcmlhYmxlcywgcmVz cGVjdGl2ZWx5LiBTRVRRIGFuZCBMRVQgYXJlIHN0YW5kYXJkIExpc3Agb3BlcmF0b3JzCi0gICBh ZGFwdGVkIHRvIEtlcm1pdCBzY29waW5nIHJ1bGVzLiBXaGVuIHRoZSBvcGVyYW5kcyBhcmUgbnVt ZXJpYyBvcgotICAgYXJpdGhtZXRpYywgU0VUUSBpcyBlcXVpdmFsZW50IHRvIEtlcm1pdCdzIEVW QUxVQVRFIGNvbW1hbmQ6Ci0KLSAgKHNldHEgYSAoKyAxIDIpKQotICBldmFsdWF0ZSBhIDEgKyAy Ci0KLSAgIFdoZW4gdGhlIG9wZXJhbmQgaXMgYSBzdHJpbmcsIFNFVFEgaXMgZXF1aXZhbGVudCB0 byBERUZJTkU6Ci0KLSAgKHNldHEgYSAnKHRoaXMgaXMgYSBzdHJpbmcpKQotICBkZWZpbmUgYSB0 aGlzIGlzIGEgc3RyaW5nCi0KLSAgIEluIHRoZSBmaXJzdCBjYXNlLCBib3RoIHN0YXRlbWVudHMg Y3JlYXRlIGEgbWFjcm8gbmFtZWQgImEiIHdpdGggYQotICAgdmFsdWUgb2YgMy4gQnV0IGluIG5l aXRoZXIgY2FzZSBpcyB0aGUgbWFjcm8gImEiIG5lY2Vzc2FyaWx5IGdsb2JhbC4gSWYKLSAgIGVp dGhlciBvZiB0aGVzZSBjb21tYW5kcyBleGVjdXRlcyBpbiBhbiBlbnZpcm9ubWVudCAoaS5lLiBt YWNybwotICAgaW52b2NhdGlvbiBsZXZlbCkgd2hlcmUgYSAibG9jYWwgYSIgY29tbWFuZCBoYXMg YmVlbiBnaXZlbiwgdGhlICJhIgotICAgbWFjcm8gaXMgZ2xvYmFsIHRvIHRoYXQgZW52aXJvbm1l bnQsIGJ1dCBpcyBub3QgdmlzaWJsZSBvdXRzaWRlIGl0LgotCi0gICBMRVQgaXMgZXF1aXZhbGVu dCB0byB0aGUgS2VybWl0IExPQ0FMIGNvbW1hbmQsIGZvbGxvd2VkIGJ5IHRoZQotICAgY29ycmVz cG9uZGluZyBFVkFMVUFURToKLQotICAobGV0IGEgKCsgMSAyKSkKLQotICAgaXMgZXF1aXZhbGVu dCB0bzoKLQotICBsb2NhbCBhCi0gIGV2YWx1YXRlIGEgMSArIDIKLQotICAgQWdhaW4sICJsb2Nh bCIgaW4gdGhpcyBjb250ZXh0IGFwcGxpZXMgdG8gdGhlIEtlcm1pdCBtYWNybyBpbnZvY2F0aW9u Ci0gICBzdGFjaywgbm90IHRvIHRoZSBTLUV4cHJlc3Npb24gbmVzdGluZyBsZXZlbC4gVG8gaWxs dXN0cmF0ZSwgcmVjYWxsIG91cgotICAgIm5ld2FyZWEiIG1hY3JvOgotCi1kZWYgbmV3YXJlYSB7 Ci0gICAgKGxldCBhIFwlMSBiIFwlMiBjIFwlMykKLSAgICAobGV0IHMgKC8gKCsgYSBiIGMpIDIu MCkpCi0gICAgKHNxcnQgKCogcyAoLSBzIGEpICgtIHMgYikgKC0gcyBjKSkpCi19Ci0KLSAgIEJl Y2F1c2UgU0VUUSBhbmQgTEVUIGV4cHJlc3Npb25zIHJldHVybiBhIHZhbHVlLCB0aGV5IGNhbiBi ZSBwbGFjZWQKLSAgIHdpdGhpbiBhIGxhcmdlciBTLUV4cHJlc3Npb24uIEluIHRoaXMgY2FzZSB3 ZSBjYW4gcmVwbGFjZSB0aGUgZmlyc3QKLSAgIHJlZmVyZW5jZSB0byB0aGUgInMiIHZhcmlhYmxl IGJ5IGl0cyBkZWZpbmluZyBleHByZXNzaW9uOgotCi1kZWYgbmV3YXJlYSB7Ci0gICAgKGxldCBh IFwlMSBiIFwlMiBjIFwlMykKLSAgICAoc3FydCAoKiAobGV0IHMgKC8gKCsgYSBiIGMpIDIuMCkp ICgtIHMgYSkgKC0gcyBiKSAoLSBzIGMpKSkKLX0KLQotICAgVGhpcyB3b3VsZCBub3Qgd29yayBp ZiBMRVQgd2VyZSBsb2NhbCB0byB0aGUgUy1FeHByZXNzaW9uLCBidXQgaXQgd29ya3MKLSAgIG5p Y2VseSBpbiB0aGUgY29udGV4dCBvZiBLZXJtaXQgbWFjcm9zLiBUaGUgcHJldmlvdXMgZGVmaW5p dGlvbiBpcwotICAgZXF1aXZhbGVudCB0bzoKLQotZGVmIG5ld2FyZWEgewotICAgIGxvY2FsIGEg YiBjIHMKLSAgICAoc2V0cSBhIFwlMSBiIFwlMiBjIFwlMykKLSAgICAoc3FydCAoKiAoc2V0cSBz ICgvICgrIGEgYiBjKSAyLjApKSAoLSBzIGEpICgtIHMgYikgKC0gcyBjKSkpCi19Ci0KLSAgIElu IGJvdGggY2FzZXMsIHRoZSB2YXJpYWJsZXMgYSwgYiwgYywgYW5kIHMgYXJlIGxvY2FsIHRvIHRo ZSAibmV3YXJlYSIKLSAgIG1hY3JvLCBhbmQgZ2xvYmFsIHdpdGhpbiBpdC4KLQotICAgTXVsdGlw bGUgYXNzaWdubWVudHMgY2FuIGJlIGhhbmRsZWQgaW4gc2V2ZXJhbCB3YXlzLiBIZXJlIGlzIHRo ZQotICAgb2J2aW91cyB3YXkgdG8gaW5pdGlhbGl6ZSBhIHNlcmllcyBvZiB2YXJpYWJsZXMgdG8g dGhlIHNhbWUgdmFsdWU6Ci0KLSAgKHNldHEgYSAwKQotICAoc2V0cSBiIDApCi0gIChzZXRxIGMg MCkKLSAgKHNldHEgcyAwKQotCi0gICBIZXJlIGlzIGEgbW9yZSBjb21wYWN0IGFuZCBlZmZpY2ll bnQgd2F5IG9mIGRvaW5nIHRoZSBzYW1lIHRoaW5nOgotCi0gIChzZXRxIGEgMCBiIDAgYyAwIHMg MCkKLQotICAgSG93ZXZlciwgaW4gY2FzZSB0aGUgdmFsdWUgd2FzIG1vcmUgY29tcGxleCwgaXQn cyBiZXR0ZXIgdG8gcHV0IG9ubHkKLSAgIG9uZSBjb3B5IG9mIGl0IGluIHRoZSBTLUV4cHJlc3Np b247IGluIHRoaXMgY2FzZSB3ZSByZWx5IG9uIHRoZSBmYWN0Ci0gICB0aGF0IFNFVFEgcmV0dXJu cyB0aGUgdmFsdWUgb2YgaXRzIGxhc3QgYXNzaWdubWVudDoKLQotICAoc2V0cSBhIChzZXRxIGIg KHNldHEgYyAoc2V0cSBzICgqIHggKF4geSAyKSkpKSkpCi0KLSAgIFNpbWlsYXJseSwgdG8gc2V0 IGEgc2VyaWVzIG9mIHZhcmlhYmxlcyB0byB4LCB4KzEsIHgrMiwgLi4uCi0KLSAgKHNldHEgYyAo KyAoc2V0cSBiICgrIChzZXRxIGEgKCsgKHNldHEgcyB4KSAxKSkgMSkpIDEpKQotCi0gICBJbiB0 aGUgbGFzdCBleGFtcGxlLCB5b3UgY2FuIHNlZSB3aHkgImxhc3QiIGRvZXMgbm90IGFsd2F5cyBj b3JyZXNwb25kCi0gICB0byAicmlnaHRtb3N0IiAodGhlIGxlZnRtb3N0IHZhcmlhYmxlICJjIiBp cyBhc3NpZ25lZCBsYXN0KS4KLQotICAgSWYgeW91IGFyZSB3b3JraW5nIHdpdGggYmFja3NsYXNo IHZhcmlhYmxlcyBsaWtlIFwlYSBvciBhcnJheSBlbGVtZW50cwotICAgbGlrZSBcJmFbMV0sIHJl bWVtYmVyIHR3byBydWxlczoKLSAgICAxLiBEb24ndCBwdXQgc3BhY2VzIGluc2lkZSBhcnJheSBi cmFja2V0cy4KLSAgICAyLiBZb3UgbXVzdCBkb3VibGUgdGhlIGJhY2tzbGFzaCB3aGVuIHVzaW5n IFNFVFEsIExFVCwgKyssIG9yIC0tIHRvCi0gICAgICAgYXNzaWduIGEgdmFsdWUgdG8gYSBiYWNr c2xhc2ggdmFyaWFibGUuCi0KLSAgIEV4YW1wbGVzIG9mIGFzc2lnbmluZyB0byBhIGJhY2tzbGFz aCB2YXJpYWJsZToKLQotICAoc2V0cSB4IDEpCi0gIChzZXRxIFxcJWEgMCkKLSAgKHNldHEgXFwm YVt4KzFdIDEpCi0gICgrKyBcXCV4KQotICAoLS0gXFwmYVt4KzJdKQotCi0gICBFeGFtcGxlcyBv ZiByZWZlcnJpbmcgdG8gYSBiYWNrc2xhc2ggdmFyaWFibGUncyB2YWx1ZToKLQotICAoc2V0cSBh ICgrIFwlYSAxKSkKLSAgKHNldHEgYiAoKyBcJWEgXCZhWzFdKSkKLSAgKCsrIGEgXCV4KQotICAo LS0gYiBcJmFbMV0pCi0KLSAgIFRoZSBzcGVjaWFsIG5vdGF0aW9uIGlzIHJlcXVpcmVkIGJlY2F1 c2UgYWxsIGJhY2tzbGFzaGVkIGl0ZW1zIChcJXgKLSAgIHZhcmlhYmxlcywgYXJyYXkgZWxlbWVu dHMsIGJ1aWx0LWluIFx2KHh4eCkgdmFyaWFibGVzLCBhbmQgXGZ4eHgoKQotICAgZnVuY3Rpb24g aW52b2NhdGlvbnMpIGFyZSBldmFsdWF0ZWQgaW4gYSBzaW5nbGUgcGFzcyBCRUZPUkUgdGhlCi0g ICBTLUV4cHJlc3Npb24gaXMgZXhlY3V0ZWQ7IGFueSBvdGhlciBhcHByb2FjaCB3b3VsZCByZXN1 bHQgaW4KLSAgIHVuYWNjZXB0YWJsZSBwZXJmb3JtYW5jZS4gU28sIGZvciBleGFtcGxlLCBpbjoK LQotICBkZWNsYXJlIFwmYVtdID0gMSAyIDMKLSAgZGVmaW5lIFwleCA0Ci0gIGRlZmluZSBcJXkg MAotICAoc2V0cSBcXCV5ICgrIFwleCBcJmFbMV0pKQotCi0gICB0aGUgUy1FeHByZXNzaW9uIGJl Y29tZXM6Ci0KLSAgKHNldHEgXCV5ICgrIDQgMSkpCi0KLSAgIGJlZm9yZSBpdCBpcyBzZW50IHRv IHRoZSBTLUV4cHJlc3Npb24gZXZhbHVhdG9yLiBJZiB0aGUgYmFja3NsYXNoIGhhZAotICAgbm90 IGJlZW4gZG91YmxlZCBvbiB0aGUgYXNzaWdubWVudCB0YXJnZXQsIHRoZSByZXN1bHQgd291bGQg aGF2ZSBiZWVuOgotCi0gIChzZXRxIDAgKCsgNCAxKSkKLQotICAgd2hpY2ggaXMgaWxsZWdhbCBi ZWNhdXNlIHlvdSBjYW4ndCBhc3NpZ24gYSB2YWx1ZSB0byBhIG51bWJlci4KLSAgIENvbnZlcnNl bHksIGlmIGJhY2tzbGFzaGVzIHdlcmUgZG91YmxlZCBvbiByaWdodC1oYW5kLXNpZGUgdmFsdWVz OgotCi0gIChzZXRxIFxcJXkgKCsgXFwleCBcXCZhWzFdKQotCi0gICB0aGlzIHRvbywgd291bGQg Z2l2ZSBhbiBlcnJvciAobm90IG51bWVyaWMgLSAiXCV4IikuCi0KLSAgIElmIHlvdSBvbWl0IHRo ZSBkb3VibGUgYmFja3NsYXNoIGluIHRoZSBhc3NpZ25tZW50IHRhcmdldCwgdGhlIHJlc3VsdAot ICAgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSB2YXJpYWJsZSBhbHJlYWR5IGhhcyBhIHZhbHVlOgot Ci0gIChzZXRxIFwlYSAoKiAzIDMpKQotCi0gICBJZiBcJWEgaGFzIGEgbm9uLW51bWVyaWMgc2lu Z2xlLXdvcmQgdmFsdWUsIHRoZW4gdGhpcyBiZWNvbWVzIHRoZSBuYW1lCi0gICBvZiB0aGUgdmFy aWFibGUgdGhhdCBpcyBhc3NpZ25lZCBieSBTRVRRLiBUbyBpbGx1c3RyYXRlOgotCi0gIGRlZmlu ZSBcJWEgZm9vCi0gIGVjaG8gXCVhCi0gIGZvbwotICAoc2V0cSBcJWEgKCogMyAzKSkKLSAgZWNo byBcJWEKLSAgZm9vCi0gIHNob3cgbWFjcm8gZm9vCi0gIGZvbyA9IDkKLQotICAgSWYgXCVhIGhh cyBubyB2YWx1ZSwgYSBudW1lcmljIHZhbHVlLCBvciBhIG11bHRpd29yZCB2YWx1ZSwgYW4gImlu dmFsaWQKLSAgIGFzc2lnbm1lbnQiIGVycm9yIG9jY3Vycy4KLQotICAgWyBbNTI2XVRvcCBdIFsg WzUyN11Db250ZW50cyBdIFsgWzUyOF1DLUtlcm1pdCBIb21lIF0gWyBbNTI5XUtlcm1pdAotICAg SG9tZSBdCi0KLTkuNy4gQ29uZGl0aW9uYWwgRXhwcmVzc2lvbnMKLQotICAgVGhlIElGIG9wZXJh dG9yIHByb3ZpZGVzIGEgY29tcGFjdCBmb3JtIG9mIGRlY2lzaW9uLW1ha2luZyB3aXRoaW4KLSAg IFMtRXhwcmVzc2lvbnMuIEFuIElGIGV4cHJlc3Npb24gY2FuIHN0YW5kIHdoZXJldmVyIGEgbnVt YmVyIG1pZ2h0Ci0gICBzdGFuZCwgYXMgbG9uZyBpcyBpdCByZXR1cm5zIGEgbnVtYmVyLiBIZXJl J3MgYSBxdWljayB3YXkgdG8gb2J0YWluIHRoZQotICAgYXZlcmFnZSB2YWx1ZSBvZiBhbGwgdGhl IGVsZW1lbnRzIGluIGFuIGFycmF5IHRoYXQgY29udGFpbnMgb25seQotICAgbnVtYmVyczoKLQot ICAoLyAoKyBcZmpvaW4oJmEpKSAoZmxvYXQgXGZkaW0oJmEpKSkKLQotICAgVGhpcyByZXN1bHRz IGluIGEgIkRpdmlkZSBieSB6ZXJvIiBlcnJvciBpZiB0aGUgYXJyYXkgaXMgZW1wdHkuIElmIHlv dQotICAgd2FudCB0byBkZWZpbmUgdGhlIGF2ZXJhZ2UgdmFsdWUgb2YgYW4gZW1wdHkgYXJyYXkg dG8gYmUgMCBpbnN0ZWFkIG9mCi0gICBnZXR0aW5nIGFuIGVycm9yLCB5b3UgY2FuIHVzZSBJRiB0 byBjaGVjayB0aGUgYXJyYXkgc2l6ZToKLQotICAoaWYgXGZkaW0oJmEpICgvICgrIFxmam9pbigm YSkpIChmbG9hdCBcZmRpbSgmYSkpKSAwKQotCi0gICBvciBlcXVpdmFsZW50bHk6Ci0KLSAgKGlm IChub3QgXGZkaW0oJmEpKSAwICgvICgrIFxmam9pbigmYSkpIChmbG9hdCBcZmRpbSgmYSkpKSkK LQotICAgT2YgY291cnNlLCBJRiBjYW4gZml0IGFueXdoZXJlIGVsc2UgaW50byBhbiBTLUV4cHJl c3Npb246Ci0KLSAgKHNldHEgYSAoKyBiIChpZiAoPCBjIDApIDAgYykpKQotCi0gICBhbmQgdGhl IElGIGV4cHJlc3Npb24gY2FuIGJlIGFzIGNvbXBsZXggYXMgeW91IGxpa2U6Ci0KLSAgKHNldHEg YSAoKyBiIChpZiAoYW5kIChvciAoPiB4IDApICg+IHkgMCkpICg8IGMgMCkgKD4gZCAxKSAoIT0g ZSAwKSkgMSAwKSkpCi0KLSAgIGFuZCB0aGUgInRoZW4iIGFuZCAiZWxzZSIgcGFydHMgY2FuIGNv bnRhaW4gbXVsdGlwbGUgUy1FeHByZXNzaW9ucwotICAgZW5jbG9zZWQgd2l0aGluIChFVkFMIC4u Lik6Ci0KLSAgKGlmIHggKGV2YWwgKC4uLikgKC4uLikgKC4uLikpIChldmFsICguLi4pICguLi4p ICguLi4pKSkKLQotICAgQU5EIGFuZCBPUiBvcGVyYXRvcnMgYXJlIGd1YXJhbnRlZWQgdG8gInNo b3J0IGNpcmN1aXQiLiBJZiBhbnkgb3BlcmFuZAotICAgb2YgQU5EIGlzIGZhbHNlLCBub25lIG9m IHRoZSBzdWJzZXF1ZW50IG9wZXJhbmRzIGlzIGV2YWx1YXRlZDsKLSAgIGxpa2V3aXNlLCBpZiBh biBPUiBvcGVyYW5kIGlzIHRydWUsIG5vIGZ1cnRoZXIgb3BlcmFuZHMgYXJlIGV2YWx1YXRlZC4K LQotICAgQmVhciBpbiBtaW5kIHRoYXQgdGhlIFMtRXhwcmVzc2lvbiBJRiBpcyBub3QgdGhlIHNh bWUgYXMgS2VybWl0IElGOyB0aGUKLSAgIGNvbmRpdGlvbiBpcyBvbmx5IGFsbG93ZWQgdG8gYmUg YW4gUy1FeHByZXNzaW9uIG9yIGEgdmFyaWFibGUgb3IKLSAgIG51bWJlciwgbm90IHRoZSB3aG9s ZSBsaXN0IG9mIHBvc3NpYmlsaXRpZXMgeW91IHNlZSB3aGVuIHlvdSB0eXBlICJpZgotICAgPyIg YXQgdGhlIEMtS2VybWl0PiBwcm9tcHQuIEJ1dCBrZWVwIHJlYWRpbmcuLi4KLQotICAgWyBbNTMw XVRvcCBdIFsgWzUzMV1Db250ZW50cyBdIFsgWzUzMl1DLUtlcm1pdCBIb21lIF0gWyBbNTMzXUtl cm1pdAotICAgSG9tZSBdCi0KLTkuOC4gRXh0ZW5zaWJpbGl0eQotCi0gICBUbyBleHRlbmQgdGhl IGNhcGFiaWxpdGllcyBvZiBTLUV4cHJlc3Npb25zLCB5b3UgY2FuIHVzZSBLZXJtaXQgbWFjcm8K LSAgIG5hbWVzIGFzIG9wZXJhdG9ycywgd2l0aCB0aGUgZm9sbG93aW5nIGxpbWl0YXRpb25zOgot Ci0gICAgICogVGhlIG1hY3JvIG11c3Qgbm90IGhhdmUgdGhlIHNhbWUgbmFtZSBhcyBhIGJ1aWx0 LWluIG9wZXJhdG9yLgotICAgICAqIFlvdSBtdXN0IHVzZSB0aGUgZnVsbCBtYWNybyBuYW1lLCBu b3QgYW4gYWJicmV2aWF0aW9uLgotCi0gICBBbmQgd2l0aCB0aGUgZm9sbG93aW5nIGVuaGFuY2Vt ZW50OgotCi0gICAgICogSWYgdGhlIGxhc3Qgc3RhdGVtZW50IGV4ZWN1dGVkIGJ5IHRoZSBtYWNy byBpcyBhbiBTLUV4cHJlc3Npb24sIGl0cwotICAgICAgIHZhbHVlIGlzIHJldHVybmVkIGF1dG9t YXRpY2FsbHkuIEluIG90aGVyIHdvcmRzOgotCi0gIGRlZmluZSBidW1wICgrKyBcJTEpCi0KLSAg IGlzIGVxdWl2YWxlbnQgdG86Ci0KLSAgZGVmaW5lIGJ1bXAgcmV0dXJuIFxmc2V4cHJlc3Npb24o KysgXCUxKQotCi0gICBIZXJlJ3MgYW4gZXhhbXBsZSBpbiB3aGljaCB3ZSBkZWZpbmUgYSBGSUJP TkFDQ0kgb3BlcmF0b3IgdGhhdCByZXR1cm5zCi0gICB0aGUgbnRoIGVsZW1lbnQsIG4gPj0gMCwg b2YgdGhlIEZpYm9uYWNjaSBzZXJpZXMsIDAgMSAxIDIgMyA1IDggMTMgMjEKLSAgIDM0IDU1LCAu IC4gLiwgaW4gd2hpY2ggdGhlIGZpcnN0IGVsZW1lbnQgaXMgMCwgdGhlIHNlY29uZCBpcyAxLCBh bmQKLSAgIGVhY2ggc3Vic2VxdWVudCBlbGVtZW50IGlzIHRoZSBzdW0gb2YgdGhlIHR3byBiZWZv cmUgaXQuIFRoaXMgc2VyaWVzCi0gICB3YXMgZGV2aXNlZCBieSBMZW9uYXJkbyBQaXNhbm8sIEZp bGl1cyBCb25hY2NpIChGaWJvbmFjY2kgZm9yIHNob3J0KSBpbgotICAgMTIwMiB0byBkZXNjcmli ZSBob3cgZmFzdCByYWJiaXRzIGNhbiBicmVlZCwgYW5kIGFsc28gZm9ybXMgdGhlIGJhc2lzCi0g ICBmb3IgdGhlIEdvbGRlbiBNZWFuLCB0aGUgYnJhbmNoaW5nIGJlaGF2aW9yIG9mIHBsYW50cywg dGhlIHNwaXJhbCBvZiBhCi0gICBuYXV0aWx1cyBzaGVsbCwgZXRjLiAoVGhhbmtzIHRvIFs1MzRd RGF0IFRodWMgTmd1eWVuIGZvciBEZWNlbWJlciAyMDAzCi0gICBjb3JyZWN0aW9ucyB0byB0aGlz IHNlY3Rpb24hKQotCi0gICBXZSBjYW4gd3JpdGUgYSBGSUJPTkFDQ0kgZnVuY3Rpb24gYXMgYSBt YWNybyBlYXNpbHkgd2l0aCBTLUV4cHJlc3Npb25zOgotCi0gIGRlZmluZSBGSUJPTkFDQ0kgewot ICAgIChpZiAoPT0gXCUxIDApIDAKLSAgICAgICAgKGlmICg9PSBcJTEgMSkgMSAoKyAoZmlib25h Y2NpICgtIFwlMSAyKSkgKGZpYm9uYWNjaSAoLSBcJTEgMSkpKSkpCi0gIH0KLQotICAgWW91IGNh biByZWFkIHRoaXMgYXM6Ci0KLSAgICAgSWYgdGhlIGFyZ3VtZW50IChcJTEpIGlzIDAsIHJldHVy biBhIHJlc3VsdCBvZiAwOyBpZiBpdCBpcyAxLAotICAgICByZXR1cm4gMTsgb3RoZXJ3aXNlOgot ICAgICByZXR1cm4gdGhlIHN1bSBvZiBmaWJvbmFjY2koYXJndW1lbnQgLSAyKSBhbmQgZmlib25h Y2NpKGFyZ3VtZW50IC0KLSAgICAgMSkKLQotICAgTm90ZSB0aGF0IGEgUkVUVVJOIHN0YXRlbWVu dCBpcyBub3QgbmVlZGVkLCBzaW5jZSBTLUV4cHJlc3Npb25zCi0gICBhdXRvbWF0aWNhbGx5IHNl dCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZWlyIGNvbnRhaW5pbmcgbWFjcm9zLgotCi0gICBGb3Ig Y29tcGFyaXNvbiwgaGVyZSdzIGhvdyBpdCB3b3VsZCBiZSBjb2RlZCB3aXRob3V0IFMtRXhwcmVz c2lvbnM6Ci0KLSAgZGVmaW5lIEZJQk9OQUNDSSB7Ci0gICAgICBpZiA9PSBcJTEgMCB7Ci0gICAg ICAgICAgcmV0dXJuIDAKLSAgICAgIH0gZWxzZSBpZiA9PSBcJTEgMSB7Ci0gICAgICAgICAgcmV0 dXJuIDEKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcmV0dXJuIFxmZXZhbChcZmV4ZWMoZmli b25hY2NpIFxmZXZhbChcJTEtMikpIC0KLSAgICAgICAgICAgICAgICsgXGZleGVjKGZpYm9uYWNj aSBcZmV2YWwoXCUxLTEpKSkKLSAgICAgIH0KLSAgfQotCi0gICBOb3cgd2UgY2FuIHVzZSB0aGUg RklCT05BQ0NJIGZ1bmN0aW9uICh3aGljaGV2ZXIgd2F5IHlvdSB3cml0ZSBpdCkganVzdAotICAg YXMgaWYgaXQgd2VyZSBhIGJ1aWx0LWluIG9wZXJhdG9yOgotCi0gIChmaWJvbmFjY2kgNikKLQot ICAgT3I6Ci0KLSAgKHNldHEgYSAxMCkKLSAgKGZpYm9uYWNjaSBhKQotCi0gICBXaXRoaW4gUy1F eHByZXNzaW9ucyBvbmx5IChub3Qgb3V0c2lkZSB0aGVtKSwgUy1FeHByZXNzaW9ucyB0aGVtc2Vs dmVzCi0gICBjYW4gYmUgdXNlZCBhcyBtYWNybyBhcmd1bWVudHM6Ci0KLSAgKHNldHEgYSAyIGIg NCkKLSAgKHNldHEgeCAoZmlib25hY2NpICgqIGEgYiApKSkKLQotICAgVGhlIHZhbHVlIG9mIHRo ZSBTLUV4cHJlc3Npb24gKGluIHRoaXMgY2FzZSAiOCIpLCBhbmQgbm90IHRoZQotICAgUy1FeHBy ZXNzaW9uIGl0c2VsZiwgaXMgc2VudCB0byB0aGUgbWFjcm8uCi0KLSAgIFlvdXIgbWFjcm8gaXMg cmVzcG9uc2libGUgZm9yIGFyZ3VtZW50IHZhbGlkYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nLiBB Ci0gICByb2J1c3QgRmlib25hY2NpIG1hY3JvIHdvdWxkIGJlIG1vcmUgbGlrZSB0aGlzOgotCi0g IGRlZmluZSBGSUJPTkFDQ0kgewotICAgICAgaWYgPCBcdihhcmdjKSAyIGVuZCAxID9cJTA6IE1p c3NpbmcgYXJndW1lbnQKLSAgICAgIGlmID4gXHYoYXJnYykgMiBlbmQgMSA/XCUwOiBUb28gbWFu eSBhcmd1bWVudHMKLSAgICAgIGlmIG5vdCBpbnRlZ2VyIFwlMSBlbmQgMSA/XCUwOiBJbnRlZ2Vy cyBvbmx5Ci0gICAgICBpZiA8IFwlMSAxIGVuZCAxID9cJTA6IEFyZ3VtZW50IG91dCBvZiByYW5n ZQotICAgICAgKGlmICg9PSBcJTEgMCkgMAotICAgICAgICAgKGlmICg9PSBcJTEgMSkgMSAoKyAo Zmlib25hY2NpICgtIFwlMSAyKSkgKGZpYm9uYWNjaSAoLSBcJTEgMSkpKSkpCi0gIH0KLQotICAg UmVjYWxsIHRoYXQgIkVORCBub256ZXJvLW51bWJlciBbIG1lc3NhZ2UgXSIgY2F1c2VzIGEgbWFj cm8gaW52b2NhdGlvbgotICAgdG8gZmFpbC4gV2hlbiB0aGUgbWFjcm8gaXMgdGhlIG9wZXJhdG9y IGluIGFuIFMtRXhwcmVzc2lvbiwgdGhpcyBtYWtlcwotICAgdGhlIFMtRXhwcmVzc2lvbiBmYWls IHRvby4gQWxzbyBub3RlIHRoYXQgb3VyIEZpYm9uYWNjaSBtYWNybyBpcyBqdXN0Ci0gICBhbiBp bGx1c3RyYXRpb24sIG5vdCBhIHByYWN0aWNhbCBleGFtcGxlLiBTaW5jZSBpdCBpcyByZWN1cnNp dmUgKGNhbGxzCi0gICBpdHNlbGYpLCBpdCB3b24ndCB3b3JrIGZvciBsYXJnZSBhcmd1bWVudHMg YmVjYXVzZSB0aGUgY2FsbCBzdGFjayBjYW4KLSAgIGV4Y2VlZCBhdmFpbGFibGUgbWVtb3J5LiBT ZWUgWzUzNV1TZWN0aW9uIDkuOS4yIGZvciBhIHByYWN0aWNhbAotICAgYWx0ZXJuYXRpdmUuCi0K LSAgIEtlcm1pdCBtYWNyb3MsIHdoZW4gdXNlZCBhcyBTLUV4cHJlc3Npb24gb3BlcmF0b3JzLCBj YW4gZG8gYW55dGhpbmcgYXQKLSAgIGFsbCBleGNlcHQgaW5pdGlhdGUgZmlsZSB0cmFuc2ZlcnM6 IHRoZXkgY2FuIHByaW50IG1lc3NhZ2VzIG9uIHRoZQotICAgc2NyZWVuLCByZWFkIGFuZCB3cml0 ZSBmaWxlcywgaW50ZXJhY3Qgd2l0aCB0aGUgdXNlciwgYW5kIHNvIG9uLiBGb3IKLSAgIGV4YW1w bGUsIGhlcmUncyBhIG1hY3JvIEFTS01FIHRoYXQgYXNrcyB5b3UgdG8gZW50ZXIgYSBudW1iZXIs IG1ha2VzCi0gICBzdXJlIHRoYXQgeW91IGRpZCwgYW5kIHRoZW4gcmV0dXJucyBpdHMgdmFsdWUg Zm9yIHVzZSBpbiB0aGUKLSAgIFMtRXhwcmVzc2lvbjoKLQotICBkZWZpbmUgQVNLTUUgewotICAg ICAgbG9jYWwgXCVuCi0gICAgICB3aGlsZSB0cnVlIHsKLSAgICAgICAgICBhc2sgXCVuIHsgTnVt YmVyOiB9Ci0gICAgICAgICAgaWYgbm90IGRlZiBcJW4gY29udGludWUKLSAgICAgICAgICBpZiBu b3QgbnVtZXJpYyBcJW4gewotICAgICAgICAgICAgICBlY2hvIE5vdCBudW1lcmljIC0gIlwlbiIK LSAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWsKLSAg ICAgIH0KLSAgICAgIHJldHVybiBcJW4KLSAgfQotICAoc2V0cSBhICgqIDIgKGFza21lKSkpIDsg R2V0IG51bWJlciBmcm9tIHVzZXIsIGRvdWJsZSBpdCwgYXNzaWduIHJlc3VsdCB0byBhLgotCi0g ICBIZXJlJ3MgYSBtYWNybyB5b3UgY2FuIHVzZSB0byB2YWxpZGF0ZSB0aGF0IGEgbnVtYmVyIGlz IGluIGEgZ2l2ZW4KLSAgIHJhbmdlOgotCi0gIGRlZmluZSBpbnJhbmdlIHsKLSAgICAgIGlmICE9 IFx2KGFyZ2MpIDQgZW5kIDEgP1wlMDogV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cwotICAgICAg aWYgKCA8IFwlMSBcJTIgfHwgPiBcJTEgXCUzICkgcmV0dXJuIDAKLSAgICAgIHJldHVybiAxCi0g IH0KLQotICAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBudW1iZXIgdG8gYmUgY2hlY2tlZCwg dGhlIHNlY29uZCBpcyB0aGUKLSAgIG1pbmltdW0gYWNjZXB0YWJsZSB2YWx1ZSwgdGhlIHRoaXJk IGlzIHRoZSBtYXhpbXVtLiBZb3UgY2FuIHVzZSB0aGlzCi0gICAoZm9yIGV4YW1wbGUpIGluIElG IGNvbmRpdGlvbnM6Ci0KLSAgZGVmaW5lIHllcyBlY2hvIFwlMSBJUyBPSwotICBkZWZpbmUgbm8g ZWNobyBcJTEgSVMgTk9UIE9LCi0KLSAgKHNldHEgYSAtMSBiIDk5OSkKLSAgKGlmIChpbnJhbmdl IGEgMCAxMDApICh5ZXMgYSkgKG5vIGEpKQotICAoaWYgKGlucmFuZ2UgYiAtMTAwMCArMTAwMCkg KHllcyBiKSAobm8gYikpCi0KLSAgIFRoaXMgaXMganVzdCBhbiBpbGx1c3RyYXRpb24sIG9mIGNv dXJzZTsgdGhlcmUncyBhbHJlYWR5IGEgYnVpbHQtaW4KLSAgIG9wZXJhdG9yIHRvIGxldCB5b3Ug ZG8gcmFuZ2UgY2hlY2tpbmcgd2l0aG91dCBoZWxwIGZyb20gbWFjcm9zOgotCi0gIChpZiAoPD0g MCBhIDEwMCkgKHllcyBhKSAobm8gYSkpCi0gIChpZiAoPD0gLTEwMDAgYiArMTAwMCkgKHllcyBi KSAobm8gYikpCi0KLSAgIFRvIHNlbmQgc3RyaW5nIHBhcmFtZXRlcnMgdG8gYSBtYWNybywgc29t ZSBraW5kIG9mIHF1b3RpbmcgaXMgcmVxdWlyZWQKLSAgIHRvIHRlbGwgdGhlIFMtRXhwcmVzc2lv biBwYXJzZXIgdG8gdGFrZSBhIGdpdmVuICJ3b3JkIiBsaXRlcmFsbHkgcmF0aGVyCi0gICB0aGFu IHJlcGxhY2luZyBpdCBieSBpdHMgdmFsdWUuIEZvciB0aGlzIHdlIHVzZSB0aGUgTGlzcCBRVU9U RQotICAgb3BlcmF0b3I6Ci0KLSAgZGVmaW5lIGxlbmd0aCByZXR1cm4gXGZsZW5ndGgoXCUxKQot ICAobGVuZ3RoIChxdW90ZSBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eikpCi0gIDI2Ci0KLSAg IFRoaXMgY2F1c2VzIHRoZSBzdHJpbmcgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IiB0byBi ZSBzZW50Ci0gICBsaXRlcmFsbHkgdG8gdGhlIExFTkdUSCBtYWNyby4gS2VybWl0LCBsaWtlIExp c3AsIGFsc28gb2ZmZXJzIGEKLSAgIHNob3J0Y3V0IGZvciBRVU9URSwgdGhhdCBsZXRzIHVzIHF1 b3RlIGEgd29yZCBieSBwcmVmaXhpbmcgaXQgd2l0aCBhCi0gICBzaW5nbGUgcXVvdGUgKCcpIGNo YXJhY3RlciwgYWxzbyBjYWxsZWQgYXBvc3Ryb3BoZSAoQVNDSUkgMzkpOgotCi0gIChsZW5ndGgg J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6KQotICAyNgotCi0gICBUaGUgdHdvIGZvcm1zIGFy ZSBlcXVpdmFsZW50LgotCi0gICBIb3cgdGhlIG1hY3JvIHRyZWF0cyBpdHMgYXJndW1lbnRzIGlz IHVwIHRvIHRoZSBtYWNyby4gSW4gdGhlIGV4YW1wbGUKLSAgIGFib3ZlLCB0aGUgYXJndW1lbnQg aXMgdHJlYXRlZCBhcyBhIGxpdGVyYWwgc3RyaW5nLiBIb3dldmVyLCBpdCBjYW4KLSAgIGFsc28g YmUgdHJlYXRlZCBhcyBhIHZhcmlhYmxlIG5hbWU6Ci0KLSAgZGVmaW5lIHN0cmluZyBUaGlzIGlz IGEgc3RyaW5nCi0gIGRlZmluZSBsZW5ndGggcmV0dXJuIFxmbGVuZ3RoKFxtKFwlMSkpCi0gIChs ZW5ndGggJ3N0cmluZykKLSAgMTYKLQotICAgTm90ZSB0aGUgY29uc3RydWN0IFxtKFwlMSkuIFRo aXMgbWVhbnMgInRoZSB2YWx1ZSBvZiB0aGUgbWFjcm8gd2hvc2UKLSAgIG5hbWUgaXMgdGhlIHZh bHVlIG9mCi0gICBcJTEiLiBUaGUgdmFsdWUgb2YgXCUxIGluIHRoaXMgY2FzZSBpcyB0aGUgd29y ZCAic3RyaW5nIiwgYW5kIHRoZSB2YWx1ZQotICAgb2YgdGhlIG1hY3JvIHdob3NlIG5hbWUgaXMg InN0cmluZyIgaXMgIlRoaXMgaXMgYSBzdHJpbmciLgotCi0gICBXaGF0IGlmIHRoZSBtYWNybyB0 YWtlcyBtdWx0aXBsZSBhcmd1bWVudHMsIG9yIGEgdmFyaWFibGUgbnVtYmVyIG9mCi0gICB0aGVt PyBIZXJlJ3MgYSBzaW1wbGUgbWFjcm8gdGhhdCBwcmludHMgYSBwaHJhc2UgdGhhdCBpbmNsdWRl cyBpdHMKLSAgIGFyZ3VtZW50czoKLQotICBkZWZpbmUgY29tcGxhaW4gZWNobyBJdCdzIHRvbyBc JSohCi0KLSAgIChSZWNhbGwgdGhhdCBcJSogbWVhbnMgImFsbCBhcmd1bWVudHMiLikKLQotICAg SXQgY2FuIGJlIGNhbGxlZCBpbiB0aGUgdHJhZGl0aW9uYWwgd2F5OgotCi0gIGNvbXBsYWluIGhv dCAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0OiAiSXQncyB0b28gaG90ISIKLSAgY29tcGxh aW4gY29sZCBhbmQgd2V0ICAgICAgICAgICAgICBSZXN1bHQ6ICJJdCdzIHRvbyBjb2xkIGFuZCB3 ZXQhIgotCi0gICBPciBmcm9tIGFuIFMtRXhwcmVzc2lvbiBpZiB5b3UgcXVvdGUgdGhlIGFyZ3Vt ZW50czoKLQotICAoY29tcGxhaW4gJ2hvdCkgICAgICAgICAgICAgICAgICAgIFJlc3VsdDogIkl0 J3MgdG9vIGhvdCEiCi0gIChjb21wbGFpbiAnY29sZCAnYW5kICd3ZXQpICAgICAgICAgUmVzdWx0 OiAiSXQncyB0b28gY29sZCBhbmQgd2V0ISIKLQotICAgVG8gZ3JvdXAgbXVsdGlwbGUgd29yZHMg aW50byBhIHNpbmdsZSBhcmd1bWVudCwgdXNlIHBhcmVudGhlc2VzOgotCi0gIChjb21wbGFpbiAo cXVvdGUgKGNvbGQgYW5kIHdldCkpKSAgUmVzdWx0OiAiSXQncyB0b28gY29sZCBhbmQgd2V0ISIK LSAgKGNvbXBsYWluICcoY29sZCBhbmQgd2V0KSkgICAgICAgICBSZXN1bHQ6ICJJdCdzIHRvbyBj b2xkIGFuZCB3ZXQhIgotCi0gICBOb3RlIHRoZSBkaWZmZXJlbmNlOgotCi0gIChjb21wbGFpbiAn Y29sZCAnYW5kICd3ZXQpICAgICAgICAgVGhyZWUgYXJndW1lbnRzCi0gIChjb21wbGFpbiAnKGNv bGQgYW5kIHdldCkpICAgICAgICAgT25lIGFyZ3VtZW50Ci0KLSAgIFNpbmNlIHRoZSBDT01QTEFJ TiBtYWNybyB1c2VzIFwlKiB0byByZWZlciB0byBhbGwgaXRzIGFyZ3VtZW50cywgbm8KLSAgIG1h dHRlciBob3cgbWFueSwgaXQgZG9lc24ndCBjYXJlIHdoaWNoIGZvcm0geW91IHVzZS4gQnV0IGl0 IG1ha2VzIGEKLSAgIGRpZmZlcmVuY2UgaW4gY2FzZXMgd2hlcmUgdGhlIG1hY3JvIHJlZmVycyB0 byBpdHMgYXJndW1lbnRzCi0gICBpbmRpdmlkdWFsbHkuCi0KLSAgIFRvIGlsbHVzdHJhdGUsIGxl dCdzIGNvbnNpZGVyIGEgbWFjcm8gdGhhdCByZWNlaXZlcyB0aGUgbmFtZSBvZiBhIG1hY3JvCi0g ICBhbmQgaXRzIGFyZ3VtZW50IGxpc3QgYW5kIGV4ZWN1dGVzIGl0IHdpdGggaXRzIGFyZ3VtZW50 cywgd2l0aG91dAotICAga25vd2luZyBob3cgbWFueSBhcmd1bWVudHMgdGhlcmUgYXJlLiBUaGUg Zm9sbG93aW5nIExPT1AgbWFjcm8gaXMgdXNlZAotICAgdG8gZXhlY3V0ZSB0aGUgZ2l2ZW4gbWFj cm8gd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnQgbGlzdCB0aGUgcmVxdWVzdGVkCi0gICBudW1iZXIg b2YgdGltZXM6Ci0KLSAgZGVmIGxvb3AgeyBsb2NhbCBpLCBmb3IgaSAxIFwlMSAxIGRvIFwlMiBc JTMgfQotCi0gICBXaXRoaW4gdGhlIExPT1AgbWFjcm8sIHRoZSBmaXJzdCBhcmd1bWVudCAoXCUx KSBpcyB0aGUgbG9vcCBjb3VudCwgXCUyCi0gICBpcyB0aGUgbWFjcm8gbmFtZSwgYW5kIFwlMyBp cyB0aGUgYXJndW1lbnQgbGlzdC4gV2hlbiB0aGUgTE9PUCBtYWNybyBpcwotICAgaW52b2tlZCB0 cmFkaXRpb25hbGx5IGxpa2UgdGhpczoKLQotICBsb29wIDMgY29tcGxhaW4gaG90Ci0KLSAgIGl0 IHByaW50cyAiSXQncyB0b28gaG90ISIgdGhyZWUgdGltZXMuIFRvIGludm9rZSBpdCBmcm9tIGFu Ci0gICBTLUV4cHJlc3Npb24sIHlvdSBtdXN0IHF1b3RlIGJvdGggdGhlIG1hY3JvIG5hbWUgYXMg d2VsbCBhcyB0aGUKLSAgIGFyZ3VtZW50LCBzaW5jZSBpbiB0aGlzIGNhc2UgdGhlIG1hY3JvIG5h bWUgaXRzZWxmIGlzIGFuIGFyZ3VtZW50OgotCi0gIChsb29wIDMgJ2NvbXBsYWluICdob3QpCi0K LSAgIE5vdyB3aGF0IGlmIHlvdSBuZWVkIHRvIHNlbmQgZGlmZmVyZW50IG9yIHZhcmlhYmxlIG51 bWJlcnMgb2YgYXJndW1lbnRzCi0gICB0byB0aGUgTE9PUCBtYWNybz8gVGhlIExPT1AgbWFjcm8g Y2FuIGhhbmRsZSBpdCBhbHJlYWR5LCBwcm92aWRlZCB5b3UKLSAgIGdyb3VwIHRoZSBhcmd1bWVu dHMgaW50byBMT09QJ3MgdGhpcmQgYXJndW1lbnQgKFwlMykuIEluIEtlcm1pdCBzeW50YXgsCi0g ICB3aXRob3V0IGdyb3VwaW5nOgotCi0gIGxvb3AgMyBjb21wbGFpbiBjb2xkIGFuZCB3ZXQKLQot ICAgcHJpbnRzICJJdCdzIHRvbyBjb2xkISIgdGhyZWUgdGltZXMgKCJhbmQgd2V0IiBpcyBsb3N0 KTsgYnV0IHdpdGgKLSAgIGdyb3VwaW5nIChlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyB0d28gZm9y bXMpOgotCi0gIGxvb3AgMyBjb21wbGFpbiB7Y29sZCBhbmQgd2V0fQotICBsb29wIDMgY29tcGxh aW4gImNvbGQgYW5kIHdldCIKLQotICAgdGhlIExPT1AgbWFjcm8gcHJpbnRzICJJdCdzIHRvbyBj b2xkIGFuZCB3ZXQhIiB0aHJlZSB0aW1lcyBhcyBkZXNpcmVkLgotCi0gICBUbyBkbyB0aGUgc2Ft ZSB0aGluZyBpbiBhbiBTLUV4cHJlc3Npb24sIGp1c3QgdXNlIHRoZSBMaXNwIGZvcm1zIG9mCi0g ICBxdW90aW5nIGluc3RlYWQgb2YgdGhlIEtlcm1pdCBmb3JtczsgdGhlIGZvbGxvd2luZyB0d28g YXJlIGVxdWl2YWxlbnQ6Ci0KLSAgKGxvb3AgMyAnY29tcGxhaW4gKHF1b3RlIChjb2xkIGFuZCB3 ZXQpKSkKLSAgKGxvb3AgMyAnY29tcGxhaW4gJyhjb2xkIGFuZCB3ZXQpKQotCi0gICBIZXJlJ3Mg YSBzaW1pbGFyIGV4YW1wbGUgaW4gd2hpY2ggd2Ugd3JpdGUgYSBtYWNybyB0aGF0IHNob3dzIGJv dGggdGhlCi0gICBuYW1lIGFuZCB0aGUgdmFsdWUgb2Ygb25lIG9yIG1vcmUgb3RoZXIgbWFjcm9z LCB3aG9zZSBuYW1lcyBhcmUgZ2l2ZW4KLSAgIGFzIGFyZ3VtZW50cyAoc2ltaWxhciB0byAic2hv dyBtYWNybyIpOgotCi0gIGRlZmluZSBkaXNwbGF5IHsKLSAgICAgIGxvY2FsIFwlaQotICAgICAg Zm9yIFwlaSAxIFx2KGFyZ2MpLTEgMSB7Ci0gICAgICAgICAgZWNobyBcJl9bXCVpXSA9IFxtKFwm X1tcJWldKQotICAgICAgfQotICB9Ci0KLSAgIChSZWNhbGwgdGhhdCBcJl9bXSBpcyB0aGUgbWFj cm8ncyBhcmd1bWVudCB2ZWN0b3IgYXJyYXksIGVxdWl2YWxlbnQgdG8KLSAgIFwlMSwgXCUyLCAu Li4pIFRoZSBESVNQTEFZIG1hY3JvIGNhbiBiZSB1c2VkIGluIFMtRXhwcmVzc2lvbnMgbGlrZQot ICAgdGhpczoKLQotICAoc2V0cSBhIDEgYiAyIGMgMykKLSAgKGRpc3BsYXkgJ2EgJ2IgJ2MgJ2Qp Ci0KLSAgIHdoaWNoIHByaW50czoKLQotICBhID0gMQotICBiID0gMgotICBjID0gMwotICBkID0K LQotICAgVGhlIG5hbWVzIG11c3QgYmUgcXVvdGVkIHRvIHByZXZlbnQgdGhlaXIgZXZhbHVhdGlv biBiZWZvcmUgdGhleSBhcmUKLSAgIHNlbnQgdG8gdGhlIG1hY3JvLiBUaGlzIGFiaWxpdHkgdG8g cGFzcyB2YXJpYWJsZXMgImJ5IG5hbWUiIHRvIG1hY3JvcywKLSAgIHJhdGhlciB0aGFuIGJ5IHZh bHVlLCBsZXRzIHlvdSB3cml0ZSBtYWNyb3MgdGhhdCBjaGFuZ2UgdGhlIHZhbHVlcyBvZgotICAg YXJndW1lbnQgdmFyaWFibGVzLiBGb3IgZXhhbXBsZSwgaGVyZSdzIGEgbWFjcm8gdGhhdCBkb3Vi bGVzIHRoZSB2YWx1ZQotICAgb2YgaXRzIGFyZ3VtZW50IHZhcmlhYmxlOgotCi0gIGRlZmluZSBk b3VibGUgKCsrIFwlMSBcJTEpCi0KLSAgIHdoaWNoIHlvdSBjYW4gY2FsbCBsaWtlIHRoaXM6Ci0K LSAgKHNldHEgYSAxMikKLSAgKGRvdWJsZSAnYSkKLQotICAgSW4gdGhlIG1hY3JvLCBcJTEgaXMg cmVwbGFjZSBieSB0aGUgdmFyaWFibGUgbmFtZSAiYSI7ICIoKysgYSBhKSIgYWRkcwotICAgImEi IHRvIGl0c2VsZiwgYW5kIHNldHMgdGhlIHZhbHVlIG9mICJhIiB0byB0aGUgcmVzdWx0LgotCi0g ICBUaGVyZSBhcmUgbm8gYnVpbHQtaW4gb3BlcmF0b3JzIG90aGVyIHRoYW4gUVVPVEUsICcsIGFu ZCBTVFJJTkcgZm9yCi0gICBoYW5kbGluZyBzdHJpbmdzIGluIFMtRXhwcmVzc2lvbnMsIGJ1dCB1 c2luZyBqdXN0IHRoZXNlLCBwbHVzIG1hY3JvcwotICAgdGhhdCB1c2UgS2VybWl0J3MgcmVndWxh ciBzdHJpbmctaGFuZGxpbmcgZmVhdHVyZXMsIHlvdSBjYW4gZWFzaWx5Ci0gICBleHRlbmQgUy1F eHByZXNzaW9ucyB0byBkbyBzdHJpbmcgbWFuaXB1bGF0aW9uOgotCi0gIGRlZmluZSBsZW4gcmV0 dXJuIFxmbGVuKFwlMSkgICAgICAgICAgICAgICBSZXR1cm5zIGxlbmd0aCBvZiBhcmd1bWVudCBz dHJpbmcKLSAgZGVmaW5lIGNhcCByZXR1cm4gXGZ1cHBlcihcJTEpICAgICAgICAgICAgIFVwcGVy Y2FzZSBhcmd1bWVudCBzdHJpbmcKLSAgZGVmaW5lIHJldiByZXR1cm4gXGZyZXZlcnNlKFwlMSkg ICAgICAgICAgIFJldmVyc2VzIGFyZ3VtZW50IHN0cmluZwotICBkZWZpbmUgc3ViIHJldHVybiBc ZnN1YnN0cihcJTEsXCUyLFwlMykgICAgUmV0dXJucyBzdWJzdHJpbmcgb2YgYXJnIHN0cmluZwot Ci0gIChsZW4gJyh0aGlzIGlzIGEgc3RyaW5nKSkgICAgICAgICAgICAgICAgICBSZXN1bHQ6IDE2 Ci0gIChyZXYgJyh0aGlzIGlzIGEgc3RyaW5nKSkgICAgICAgICAgICAgICAgICBSZXN1bHQ6IGdu aXJ0cyBhIHNpIHNpaHQKLSAgKHJldiAoY2FwICcodGhpcyBpcyBhIHN0cmluZykpKSAgICAgICAg ICAgIFJlc3VsdDogR05JUlRTIEEgU0kgU0lIVAotICAoc3ViIChyZXYgKGNhcCAnKHRoaXMgaXMg YSBzdHJpbmcpKSkgNSA5KSAgUmVzdWx0OiBUUyBBIFNJIFMKLQotICAgWW91IGNhbiBhc3NpZ24g YSBzdHJpbmcgdG8gYSBtYWNybyBuYW1lIGFzIGZvbGxvd3M6Ci0KLSAgKHNldHEgZm9vICcodGhp cyBpcyBhIHN0cmluZykpCi0gIChzZXRxIGZvbyAocXVvdGUgKHRoaXMgaXMgYSBzdHJpbmcpKSkK LQotICAgVGhlIHR3byBhcmUgZXhhY3RseSBlcXVpdmFsZW50LiBJbiBib3RoIGNhc2VzLCB0aGUg bWFjcm8gImZvbyIgaGFzIHRoZQotICAgdmFsdWU6Ci0KLSAgJyh0aGlzIGlzIGEgc3RyaW5nKQot Ci0gICBzbyB3aGVuIGl0IGlzIHJldHJpZXZlZCBpdCBjYW4gYmUgaWRlbnRpZmllZCBhcyBhIHN0 cmluZyByYXRoZXIgdGhhbiBhCi0gICBudW1iZXIgb3IgY29tbWFuZHMgdG8gYmUgZXhlY3V0ZWQu IFRodXM6Ci0KLSAgKHNldHEgZm9vIChxdW90ZSAodGhpcyBpcyBhIHN0cmluZykpKQotICBzaG93 IG1hY3JvIGZvbwotICBmb28gPSAnKHRoaXMgaXMgYSBzdHJpbmcpCi0gIChmb28pCi0gIHRoaXMg aXMgYSBzdHJpbmcKLQotICAgTm90ZSB0aGUgZGlmZmVyZW50IHJlc3VsdHMgZm9yICJzaG93IG1h Y3JvIGZvbyIgYW5kICIoZm9vKSIuIFRoZSBmb3JtZXIKLSAgIHNob3dzIHRoZSBpbnRlcm5hbCBk ZWZpbml0aW9uOyB0aGUgbGF0dGVyIGV2YWx1YXRlcyB0aGUgdmFyaWFibGUsIHdoaWNoCi0gICBy ZW1vdmVzIHRoZSBxdW90aW5nLiBBbmQgcGVyaGFwcyBtb3JlIGltcG9ydGFudCwgbm90ZSB0aGF0 IGlmIHRoZQotICAgYXBvc3Ryb3BoZSBhbmQgc3Vycm91bmRpbmcgcGFyZW50aGVzZXMgd2VyZSBu b3Qgc3RvcmVkIGFzIHBhcnQgb2YgdGhlCi0gICBkZWZpbml0aW9uLCAoZm9vKSB3b3VsZCB0cnkg dG8gZXhlY3V0ZSAidGhpcyBpcyBhIHN0cmluZyIgYXMgYSBjb21tYW5kLgotCi0gICBHaXZlbiB0 aGUgYXNzaWdubWVudCBhYm92ZSwgdGhlIGZvbGxvd2luZyB3b3JrIGFzIGV4cGVjdGVkOgotCi0g IChsZW4gZm9vKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQ6IDE2Ci0g IChyZXYgZm9vKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQ6IGduaXJ0 cyBhIHNpIHNpaHQKLSAgKHJldiAoY2FwIGZvbykpICAgICAgICAgICAgICAgICAgICAgICAgICAg IFJlc3VsdDogR05JUlRTIEEgU0kgU0lIVAotICAoc3ViIChyZXYgKGNhcCBmb28pKSA1IDgpICAg ICAgICAgICAgICAgICAgUmVzdWx0OiBUUyBBIFNJIFMKLQotICAgTm90ZSB0aGF0LCB1bmxpa2Ug YnVpbHQtaW4gUy1FeHByZXNzaW9uIG9wZXJhdG9ycyB0aGF0IHJldHVybiBudW1iZXJzCi0gICBv ciB0cnV0aCB2YWx1ZXMsIHRoZXNlIG9wZXJhdG9ycyByZXR1cm4gc3RyaW5ncy4gSWYgeW91IHdh bnQgdG8gYXNzaWduCi0gICB0aGVpciByZXR1cm4gdmFsdWVzIHRvIG90aGVyIHZhcmlhYmxlcywg eW91IGNhbiBkbyBzbzoKLQotICAoc2V0cSBiYXIgKHJldiAoY2FwIGZvbykpKSAgICAgICAgICAg ICAgICAgUmVzdWx0OiBHTklSVFMgQSBTSSBTSUhUCi0KLSAgIEJ1dCBub3cgdGhlIFMtRXhwcmVz c2lvbiBwcm9jZXNzb3IgZG9lc24ndCBrbm93IHRoZSB2YWx1ZSBvZiAiYmFyIiBpcwotICAgc3Vw cG9zZWQgdG8gYmUgYSBzdHJpbmcsIHJhdGhlciB0aGFuIGEgbWFjcm8gdG8gZXhlY3V0ZS4gRm9y IHRoaXMgeW91Ci0gICBuZWVkIG9uZSBmaW5hbCBzcGVjaWFsIG9wZXJhdG9yLCBTVFJJTkcuIFRo ZSBTVFJJTkcgb3BlcmF0b3IgdGFrZXMgYW4KLSAgIFMtRXhwcmVzc2lvbiBhcyBhbiBvcGVyYW5k LCBldmFsdWF0ZXMgaXQsIGFuZCB0aGVuIHJldHVybnMgaXRzIHZhbHVlCi0gICBlbmNsb3NlZCBp biAnKCksIHNvIHlvdSBjYW4gdXNlIHRoZSB2YWx1ZSBhcyBhIHN0cmluZyBpcyBzdWJzZXF1ZW50 Ci0gICBTLUV4cHJlc3Npb25zLiBVc2UgU1RSSU5HIGZvciByZWZlcmVuY2luZyBtYWNyb3MgdGhh dCByZXR1cm4gc3RyaW5nczoKLQotICAoc2V0cSBiYXIgKHN0cmluZyAocmV2IChjYXAgZm9vKSkp KSAgICAgICAgUmVzdWx0OiAnKEdOSVJUUyBBIFNJIFNJSFQpCi0KLSAgIFNUUklORyBpcyBsaWtl IFFVT1RFLCBleGNlcHQgdGhhdCBpdCBldmFsdWF0ZXMgaXRzIG9wZXJhbmQgYmVmb3JlCi0gICBh cHBseWluZyB0aGUgcXVvdGluZywgcmF0aGVyIHRoYW4gdGFraW5nIHRoZSBvcGVyYW5kIGxpdGVy YWxseS4KLQotICAgVG8gcmVmZXJlbmNlIGJhY2tzbGFzaCB2YXJpYWJsZXMgb3IgZnVuY3Rpb25z IHRoYXQgcmV0dXJuIHN0cmluZwotICAgdmFsdWVzLCB5b3UgbXVzdCB1c2UgdGhlIHJlZ3VsYXIg cXVvdGluZyBtZWNoYW5pc21zOgotCi0gIChzZXRxIHRpbWUgJyhcdih0aW1lKSkpCi0gIChzZXRx IGRhdGUgJyhcdihkYXRlKSkpCi0gIGFzc2lnbiBcJXIgdGhpcyBpcyBhIHN0cmluZwotICAoc2V0 cSBzMSAnKFwlcikpCi0KLSAgIFRoYXQncyBiZWNhdXNlIGJhY2tzbGFzaCBpdGVtcyBhcmUgZXZh bHVhdGVkIEJFRk9SRSB0aGUgUy1FeHByZXNzaW9uCi0gICBwYXJzZXIgZXZlciBzZWVzIHRoZW0s IGFuZCB0aGUgdmFsdWVzIG9mIFx2KHRpbWUpIGFuZCBzbyBvbiBhcmUgbm90Ci0gICB2YWxpZCBT LUV4cHJlc3Npb25zLCBzbyBTVFJJTkcgd29uJ3QgbGlrZSB0aGVtLgotCi0gICBGaW5hbGx5IGEg YnJpZWYgd29yZCBvbiB0aGUgdG91Y2h5IHRvcGljIG9mIHF1b3RpbmcuIFN1cHBvc2UgeW91IHdh bnQKLSAgIHRvIGluY2x1ZGUgKHNheSkgbGl0ZXJhbCBwYXJlbnRoZXNlcyBpbiBhIHN0cmluZyB0 aGF0IHdpbGwgbGF0ZXIgYmUKLSAgIHByb2Nlc3NlZCBieSB0aGUgUy1FeHByZXNzaW9uIHJlYWRl ciAob3IgXGZzcGxpdCgpIG9yIFxmd29yZCgpKS4KLSAgIE5vcm1hbGx5LCB5b3UgY2FuJ3QgZG8g dGhpcyBiZWNhdXNlIHBhcmVudGhlc2VzIGFyZSBtZWFuaW5nZnVsIGluIHRoZXNlCi0gICBjb250 ZXh0cy4gVG8gZGVmZWF0IHRoZSBub3JtYWwgcGFyc2luZyBydWxlcywgeW91IGNhbiBxdW90ZSB0 aGUKLSAgIHBhcmVudGhlc2VzIHdpdGggYmFja3NsYXNoLiBIb3dldmVyLCBkdWUgdG8gdGhlIG1h bnkgbGV2ZWxzIG9mIHN0cmluZwotICAgcHJvY2Vzc2luZyBpbnZvbHZlZCwgYSBzdXJwcmlzaW5n bHkgbGFyZ2UgYW1vdW50IG9mIGJhY2tzbGFzaGVzIG1pZ2h0Ci0gICBiZSByZXF1aXJlZCwgZm9y IGV4YW1wbGU6Ci0KLSAgKHNldHEgcyAnKGEgYiAoYyBkKSBcXFxcXFxcXFxcXFxcXFxcKGUgZiAo ZyBoKSB4XFxcXFxcXFxcXFxcXFxcXCkgaiBrKSkKLQotICAgVGhpcyBpcyBuZWFybHkgaW1wb3Nz aWJsZSB0byBleHBsYWluKCopLiBJbnN0ZWFkLCBqdXN0IHJlbWVtYmVyIHR3bwotICAgcG9pbnRz OgotCi0gICAgICogSW4gc2l0dWF0aW9ucyBsaWtlIHRoaXMsIGl0J3MgYmV0dGVyIHRvIHVzZSBE RUZJTkUgdG8gY3JlYXRlIHRoZQotICAgICAgIHN0cmluZywgcmF0aGVyIHRoYW4gU0VUUS4gVGhl IGV4YW1wbGUgYWJvdmUgcmVxdWlyZXMgb25seSBkb3VibGUKLSAgICAgICBiYWNrc2xhc2hlcyB3 aGVuIERFRklORSBpcyB1c2VkOgotICBkZWZpbmUgcyAnKGEgYiAoYyBkKSBcXChlIGYgKGcgaCkg eFxcKSBqIGspCi0KLSAgICAgKiBUaGUgbGV2ZWwgb2YgcXVvdGluZyBkZXBlbmRzIG9uIGhvdyBt YW55IGxldmVscyBvZiBldmFsdWF0aW9uIHRoZQotICAgICAgIHN0cmluZyBtdXN0IHBhc3MgdGhy b3VnaCwgd2hpY2ggaXMgbm90IGFsd2F5cyBvYnZpb3VzLiBIb3dldmVyLCB0aGUKLSAgICAgICBu dW1iZXIgb2YgYmFja3NsYXNoZXMgcmVxdWlyZWQgaW4gYW55IGdpdmVuIHNpdHVhdGlvbiBpcyBh bHdheXMgYQotICAgICAgIHBvd2VyIG9mIDIuIFNvIGlmIDEgZG9lc24ndCB3b3JrLCB0cnkgMjsg aWYgMiBkb2Vzbid0IHdvcmssIHRyeSA0OwotICAgICAgIGlmIDQgZG9lc24ndCB3b3JrLCB0cnkg OCwgMTYsIDMyLCBhbmQgc28gb24uCi0KLSAgIENvbnNpZGVyYXRpb25zIGxpa2UgdGhpcyBhcHBs eSBpbiBhbnkgc2NyaXB0aW5nIGxhbmd1YWdlIChzaGVsbCwgVGNsLAotICAgUGVybCwgUHl0aG9u LCBldGMpLiBUaGUgc2l0dWF0aW9uIGlzIGtub3duIGFzICJRdW90aW5nIEhlbGwiLgotCi0gICAo KikgSWYgeW91IHJlYWxseSB3YW50IGFuIGV4cGxhbmF0aW9uLCBoZXJlIGl0IGlzOgotCi0gICAg ICogRXZlcnkgU0VYUCBoYXMgaXRzIGJhY2tzbGFzaCBpdGVtcyBldmFsdWF0ZWQgaW4gYSBzaW5n bGUgcGFzcyBhdAotICAgICAgIHRvcCBsZXZlbCBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIHRoZSBT RVhQIHJlYWRlciwgc28gXCUxLAotICAgICAgIFx2KGZ0aW1lKSwgZXRjLCBjYW4gYmUgZXZhbHVh dGVkIHVwIGZyb250LCBmcmVlaW5nIHRoZSBTRVhQIHJlYWRlcgotICAgICAgIG9mIGhhdmluZyB0 byBrbm93IGFib3V0IHN1Y2ggdGhpbmdzLCB3aGljaCBpbiB0dXJuIG1ha2VzIGl0IG11Y2gKLSAg ICAgICBtb3JlIGVmZmljaWVudC4gVGhlcmVmb3JlIG9uZSBsZXZlbCBvZiBxdW90aW5nIGlzIGxv c3QgcmlnaHQgYXdheSwKLSAgICAgICBhbmQgdGhlcmVmb3JlIHlvdSBtdXN0IGRvdWJsZSBlYWNo IGJhY2tzbGFzaCB0aGF0IGlzIHRvIGJlIHVzZWQgYXMKLSAgICAgICBhIHF1b3RlLgotICAgICAq IFdoZW4gdGhlIFNFWFAgcmVhZGVyIHNlZXMgJ1wnLCBpdCB0cmVhdHMgaXQgYXMgYSBxdW90ZTsg ZGlzY2FyZHMgaXQKLSAgICAgICBhbmQga2VlcHMgdGhlIG5leHQgY2hhcmFjdGVyLiBUaHVzICdc XCcgYmVjb21lcyAnXCcuIFRoaXMgd291bGQgYmUKLSAgICAgICB0aGUgZW5kIG9mIGl0LCBleGNl cHQgdGhhdDoKLSAgICAgKiBUaGUgU0VYUCByZWFkZXIgbXVzdCBjYWxsIGl0c2VsZiByZWN1cnNp dmVseSBvbiBpdHMgb3BlcmFuZHMsIHNvIHdlCi0gICAgICAgbXVzdCBkb3VibGUgYW55IHF1b3Rl cyBpbiB0aGUgb3BlcmFuZHM6IDJeMiA9IDQuCi0gICAgICogSWYgdGhlIHJlc3VsdCBpcyB0byBi ZSBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gYSBtYWNybywgdGhlCi0gICAgICAgYmFja3NsYXNo ZXMgbXVzdCBhZ2FpbiBiZSBkb3VibGVkLCBiZWNhdXNlIHRoZSBtYWNybyBwcm9jZXNzb3IKLSAg ICAgICBldmFsdWF0ZXMgdGhlIGFyZ3VtZW50cyBiZWZvcmUgc2VuZGluZyB0aGVtIHRvIHRoZSBt YWNybzogMl4zID0gOC4KLSAgICAgKiBJZiB0aGUgbWFjcm8gaXRzZWxmIGlzIHRvIHNlZSB0aGUg cXVvdGVzLCByYXRoZXIgdGhhbiBqdXN0IHRoZQotICAgICAgIHJlc3VsdCBvZiB0aGUgcXVvdGlu ZywgdGhlIHF1b3RlcyBtdXN0IGJlIGRvdWJsZWQgYWdhaW46IDJeNCA9IDE2LgotCi0gICBNb3Jh bDogVG8gY3JlYXRlIHN0cmluZyBjb25zdGFudHMgaW4gd2hpY2ggZ3JvdXBpbmcgY2hhcmFjdGVy cyBtdXN0IGJlCi0gICBxdW90ZWQsIHVzZSBERUZJTkUgcmF0aGVyIHRoYW4gU0VUUS4KLQotICAg WyBbNTM2XVRvcCBdIFsgWzUzN11Db250ZW50cyBdIFsgWzUzOF1DLUtlcm1pdCBIb21lIF0gWyBb NTM5XUtlcm1pdAotICAgSG9tZSBdCi0KLTkuOS4gRXhhbXBsZXMKLQotOS45LjEuIFN0YXRpc3Rp Y3MKLQotICAgVGhlIGZvbGxvd2luZyBwcm9ncmFtIGNvbXB1dGVzIHN0YXRpc3RpY3MgLS0gbWVh bnMsIG1heGltYSwgbWluaW1hLAotICAgdmFyaWFuY2UsIHN0YW5kYXJkIGRldmlhdGlvbiwgYW5k IGNvcnJlbGF0aW9uIC0tIGZyb20gZGF0YSBzdG9yZWQgaW4KLSAgIHBhcmFsbGVsIGFycmF5cywg XCZ4W10gYW5kIFwmeVtdLCB3aGljaCBjYW4gY29udGFpbiBhbnkgbWl4dHVyZSBvZgotICAgaW50 ZWdlciBhbmQgZmxvYXRpbmctcG9pbnQgbnVtYmVyczogcG9zaXRpdmUsIG5lZ2F0aXZlLCBvciB6 ZXJvLiBBcnJheQotICAgc2V0dXAgYW5kIHZhbGlkYXRpb24gYXJlIG5vdCBzaG93bi4gRXhjZXB0 IGZvciB0aGUgdHJhZGl0aW9uYWwgRk9SIGxvb3AKLSAgIGFuZCBwcmludGluZyB0aGUgcmVzdWx0 cyBhdCB0aGUgZW5kLCB0aGUgZW50aXJlIGNvbXB1dGF0aW9uIGlzIGRvbmUKLSAgIHdpdGggUy1F eHByZXNzaW9uczoKLQotOyBJbml0aWFsaXplIHN1bXMsIG1heGltYSwgbWluaW1hLCBhbmQgbnVt YmVyIG9mIGVsZW1lbnRzCi0KLSAgKHNldHEgeHN1bSAwIHlzdW0gMCB4c3VtMiAwIHlzdW0yIDAg eHlzdW0gMCkKLSAgKHNldHEgeG1pbiAoc2V0cSB4bWF4IFwmeFsxXSkgeW1pbiAoc2V0cSB5bWF4 IFwmeVsxXSkpCi0gIChzZXRxIG4gXGZkaW0oJngpKQotCi07IExvb3AgdGhyb3VnaCBlbGVtZW50 cyBhbmQgYWNjdW11bGF0ZSBzdW1zLCBtYXhpbWEsIGFuZCBtaW5pbWEKLQotICBmb3IgaSAxIG4g MSB7Ci0gICAgICAoc2V0cSB4IFwmeFtpXSB5IFwmeVtpXSkgICAgICAgICAgICAgICAgICAgIDsg Tm90YXRpb25hbCBjb252ZW5pZW5jZQotICAgICAgKHNldHEgeG1heCAobWF4IHhtYXggeCkgeW1h eCAobWF4IHltYXggeSkpICA7IFggYW5kIFkgbWF4aW1hCi0gICAgICAoc2V0cSB4bWluIChtaW4g eG1pbiB4KSB5bWluIChtaW4geW1pbiB5KSkgIDsgWCBhbmQgWSBtaW5pbWEKLSAgICAgICgrKyB4 c3VtIHggeXN1bSB5KSAgICAgICAgICAgICAgICAgICAgICAgICAgOyBYIGFuZCBZIHN1bXMKLSAg ICAgICgrKyB4c3VtMiAoXiB4IDIpIHlzdW0yICheIHkgMikpICAgICAgICAgICAgOyBTdW0gb2Yg WCBhbmQgWSBzcXVhcmVzCi0gICAgICAoKysgeHlzdW0gKCogeCB5KSkgICAgICAgICAgICAgICAg ICAgICAgICAgIDsgU3VtIG9mIFhZIHByb2R1Y3RzCi0gIH0KLQotOyBDYWxjdWxhdGUgcmVzdWx0 cwotCi0gIChzZXRxIHhtZWFuICgvIHhzdW0gbikgeW1lYW4gKC8geXN1bSBuKSkgICAgICAgIDsg TWVhbiBYIGFuZCBZCi0gIChzZXRxIHhzcyAoLSB4c3VtMiAoLyAoXiB4c3VtIDIpIG4pKSkgICAg ICAgICAgIDsgSW50ZXJtZWRpYXRlIHZhbHVlcwotICAoc2V0cSB5c3MgKC0geXN1bTIgKC8gKF4g eXN1bSAyKSBuKSkpCi0gIChzZXRxIHh5c3MgKC0geHlzdW0gKC8gKCogeHN1bSB5c3VtKSBuKSkp Ci0gIChzZXRxIHh2YXIgKC8geHNzIG4pIHl2YXIgKC8geXNzIG4pKSAgICAgICAgICAgIDsgWCBh bmQgWSB2YXJpYW5jZQotICAoc2V0cSBzZHggKHNxcnQgeHZhcikgc2R5IChzcXJ0IHl2YXIpKSAg ICAgICAgICA7IFN0ZCBkZXZpYXRpb24gaW4gWCBhbmQgWQotICAoc2V0cSB0bXAgKCogeHNzIHlz cykpCi0gIChzZXRxIGNjIChpZiB0bXAgKC8geHlzcyAoc3FydCB0bXApKSAxLjApKSAgICAgIDsg Q29ycmVsYXRpb24gY29lZmZpY2llbnQKLSAgc2hvdyBtYWNybyB4bWVhbiB5bWVhbiB4dmFyIHl2 YXIgc2R4IHNkeSBjYyAgICAgOyBQcmludCB0aGUgcmVzdWx0cwotCi0gICBUaGUgZmluYWwgImlm IHRtcCIgY2hlY2sgYWNjb3VudHMgZm9yIHRoZSBwb3NzaWJpbGl0eSB0aGF0IGJvdGggYXJyYXlz Ci0gICBjb250YWluIGFsbCAwJ3MuIFJlc3VsdHMgY2FuIGFsc28gYmUgcHJpbnRlZCB3aXRoICJl Y2hvIENDID0gXG0oY2MpIiwKLSAgIG9yIGFueSBvdGhlciBkZXNpcmVkIHdheS4gSW50ZXJlc3Rp bmdseSwgaWYgd2UgaGFkIG5vdCBuZWVkZWQgdGhlIHN1bQotICAgb2YgdGhlIHNxdWFyZXMgYW5k IHByb2R1Y3RzLCB3ZSBjb3VsZCBoYXZlIG9idGFpbmVkIHRoZSBzdW1zLCBtYXhpbWEsCi0gICBh bmQgbWluaW1hIG9mIHRoZSBYJ3MgYW5kIFkncyB3aXRob3V0IGEgbG9vcCBsaWtlIHRoaXM6Ci0K LSAgKHNldHEgeHN1bSAoKyBcZmpvaW4oJngpKSB5c3VtICgrIFxmam9pbigmeSkpKQotICAoc2V0 cSB4bWF4IChtYXggXGZqb2luKCZ4KSkgeW1heCAobWF4IFxmam9pbigmeSkpKQotICAoc2V0cSB4 bWluIChtaW4gXGZqb2luKCZ4KSkgeW1pbiAobWluIFxmam9pbigmeSkpKQotCi0gICBBbnkgS2Vy bWl0IGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBudW1iZXJzIG9yIGxpc3RzIG9mIG51bWJlcnMgY2Fu IGJlCi0gICBpbmNsdWRlZCBpbiBhbiBTLUV4cHJlc3Npb24gYXMgYW4gb3BlcmFuZC4KLQotOS45 LjIuIFByYWN0aWNhbCBGaWJvbmFjY2kgU2VyaWVzCi0KLSAgIFRoZSByZWN1cnNpdmUgRmlib25h Y2NpIGV4YW1wbGUgZ2l2ZW4gcHJldmlvdXNseSBpcyBzaW1wbGUgYW5kIGVsZWdhbnQsCi0gICBi dXQgbm90IHZlcnkgdXNlZnVsIHNpbmNlIGl0IGNhdXNlcyBtZW1vcnkgb2NjdXBhdGlvbiB0byBn cm93IGVhY2ggdGltZQotICAgaXQgY2FsbHMgaXRzZWxmLCB1bnRpbCBldmVudHVhbGx5IGJvdGgg cGh5c2ljYWwgbWVtb3J5IGFuZCBkaXNrIHN3YXAKLSAgIHNwYWNlIGFyZSBmaWxsZWQgYW5kIHRo ZSBwcm9ncmFtIGNyYXNoZXMuIEV2ZW4gZm9yIHNtYWxsIGFyZ3VtZW50cywKLSAgIGxpa2UgMTcs IGV4ZWN1dGlvbiB0aW1lIGNhbiBiZSBwcm9oaWJpdGl2ZToKLQotICAoc2V0cSB0MSBcdihmdGlt ZSkpCi0gIChzZXRxIHJlc3VsdCAoZmlib25hY2NpIDE3KSkKLSAgKHNldHEgdDIgKC0gXHYoZnRp bWUpIHQxKSkKLSAgZWNobyBGSUJPTkFDQ0koMTcpID0gXG0ocmVzdWx0KTogVElNRSA9IFxmZnBy b3VuZCh0MiwzKQotCi0gICBwcmludHMgKG9uIGEgY2VydGFpbiByYXRoZXIgc2xvdyBjb21wdXRl cik6Ci0KLSAgRklCT05BQ0NJKDE3KSA9IDE1OTc6IFRJTUUgPSA1Ljg2MQotCi0gICBBbnkgcmVj dXJzaXZlIGZ1bmN0aW9uIGNhbiBiZSByZWNvZGVkIGl0ZXJhdGl2ZWx5LiBUaGUgcmVzdWx0IGlz IG5vdCBhcwotICAgcHJldHR5LCBidXQgZXhlY3V0aW9uIGlzIGZhciBsZXNzIGV4cGVuc2l2ZToK LQotICAgIGRlZmluZSBGSUJJVEVSIHsKLSAgICAgICAgKGlmICg9PSBcJTMgMCkgKFwlMikgKGZp Yml0ZXIgKCsgXCUxIFwlMikgXCUxICgtIFwlMyAxKSkpCi0gICAgfQotICAgIGRlZmluZSBGSUJP TkFDQ0kgewotICAgICAgICAoZmliaXRlciAxIDAgXCUxKQotICAgIH0KLQotICAgSGVyZSdzIHRo ZSByZXN1bHQgb24gdGhlIHNhbWUgY29tcHV0ZXIgZm9yIHRoZSBzYW1lIGFyZ3VtZW50IG9mIDE3 OgotCi0gIEZJQk9OQUNDSSgxNykgPSAxNTk3OiBUSU1FID0gMC4wMTUKLQotICAgKDQ3IHRpbWVz IGZhc3Rlci4pIEV4ZWN1dGlvbiB0aW1lIGluY3JlYXNlcyBwcm9wb3J0aW9uYWxseSB0byB0aGUg c2l6ZQotICAgb2YgdGhlIGFyZ3VtZW50IGluIHRoZSBpdGVyYXRpdmUgY2FzZSwgd2hlcmVhcyBp biB0aGUgcmVjdXJzaXZlIGNhc2UgaXQKLSAgIGdvZXMgdXAgZ2VvbWV0cmljYWxseSwgcXVpY2ts eSByZWFjaGluZyBpbmZpbml0eS4KLQotICAgWyBbNTQwXVRvcCBdIFsgWzU0MV1Db250ZW50cyBd IFsgWzU0Ml1DLUtlcm1pdCBIb21lIF0gWyBbNTQzXUtlcm1pdAotICAgSG9tZSBdCi0KLTkuMTAu IERpZmZlcmVuY2VzIGZyb20gQWxnZWJyYWljIE5vdGF0aW9uCi0KLSAgIEluIEMtS2VybWl0Ogot Ci0gICAgICogQWxnZWJyYWljIG5vdGF0aW9uIHVzZXMgaW5maXggb3BlcmF0b3JzIGFuZCBub3Jt YWwgcnVsZXMgb2YKLSAgICAgICBvcGVyYXRvciBwcmVjZWRlbmNlLCB3aXRoIHBhcmVudGhlc2Vz IHVzZWQgdG8gZm9yY2UgZXhjZXB0aW9ucyB0bwotICAgICAgIHRoZSBydWxlczsgbWFueSBvcGVy YXRpb25zIGNhbiBiZSBpbmNsdWRlZCBpbiBhbiBleHByZXNzaW9uLgotICAgICAgIFMtRXhwcmVz c2lvbnMgdXNlIHByZWZpeCBvcGVyYXRvcnMgd2l0aCBubyBpbnRyaW5zaWMgcHJlY2VkZW5jZTsK LSAgICAgICBlYWNoIG9wZXJhdGlvbiBpcyBlbmNsb3NlZCBpbiBwYXJlbnRoZXNlcywgYW5kIHRo ZSBhcnJhbmdlbWVudCBvZgotICAgICAgIHBhcmVudGhlc2VzIGRldGVybWluZXMgcHJlY2VkZW5j ZS4KLSAgICAgKiBBbGdlYnJhaWMgaW5maXggb3BlcmF0b3JzIHJlcXVpcmUgdHdvIG9wZXJhbmRz OyBTLUV4cHJlc3Npb24gcHJlZml4Ci0gICAgICAgb3BlcmF0b3JzIGNhbiBhY2NlcHQgYSB2YXJp YWJsZSBudW1iZXIgb2Ygb3BlcmFuZHMuCi0gICAgICogWW91IGNhbiB1c2UgYWxnZWJyYWljIG5v dGF0aW9uIGFueXdoZXJlIHRoYXQgQy1LZXJtaXQgYWNjZXB0cyBhCi0gICAgICAgbnVtYmVyLCBl LmcuICJlY2hvIFwmYVsoKDErMSkqMi0xXSIsIGJ1dCB5b3UgY2FuIHVzZSBTLUV4cHJlc3Npb25z Ci0gICAgICAgb25seSBhcyB0b3AtbGV2ZWwgY29tbWFuZHMuIFlvdSBjYW4sIGhvd2V2ZXIsIHVz ZSBlaXRoZXIgYWxnZWJyYWljCi0gICAgICAgb3IgUy1FeHByZXNzaW9ucyBhbnl3aGVyZSBhdCBh bGwgYnkgZW5jbG9zaW5nIHRoZW0gaW4gXGZldmFsdWF0ZSgpCi0gICAgICAgb3IgXGZzZXhwcmVz c2lvbigpLCByZXNwZWN0aXZlbHkuCi0gICAgICogWW91IGNhbiB1c2UgYW55IG1peHR1cmUgb2Yg aW50ZWdlciBhbmQgZmxvYXRpbmctcG9pbnQgbnVtYmVycyBpbgotICAgICAgIFMtRXhwcmVzc2lv bnMsIGJ1dCBvbmx5IGludGVnZXJzIGFyZSBwZXJtaXR0ZWQgaW4gYWxnZWJyYWljCi0gICAgICAg ZXhwcmVzc2lvbnMuIE91dHNpZGUgb2YgUy1FeHByZXNzaW9ucywgZmxvYXRpbmcgcG9pbnQgYXJp dGhtZXRpYyBpcwotICAgICAgIHN1cHBvcnRlZCBvbmx5IGJ5IFxmZnAuLi4oKSBmdW5jdGlvbiBj YWxscy4KLSAgICAgKiBPcGVyYXRvcnMgYW5kIG9wZXJhbmRzIGluIFMtRXhwcmVzc2lvbnMgbXVz dCBiZSBzZXBhcmF0ZWQgYnkKLSAgICAgICBzcGFjZXMsIGUuZy4gIigrIGEgYikiLiBTcGFjZXMg YXJlIG5vdCByZXF1aXJlZCBpbiBhbGdlYnJhaWMKLSAgICAgICBleHByZXNzaW9uczogIigoYSti KSpjKSIuCi0gICAgICogV2hlbiBhc3NpZ25pbmcgdmFsdWVzIHRvIGJhY2tzbGFzaCB2YXJpYWJs ZXMgKHN1Y2ggYXMgXCV4IG9yCi0gICAgICAgXCZhWzJdKSB1c2luZyBTRVRRIG9yIExFVCwgeW91 IG11c3QgZG91YmxlIHRoZSBiYWNrc2xhc2guCi0KLSAgIFsgWzU0NF1Ub3AgXSBbIFs1NDVdQ29u dGVudHMgXSBbIFs1NDZdQy1LZXJtaXQgSG9tZSBdIFsgWzU0N11LZXJtaXQKLSAgIEhvbWUgXQot Ci05LjExLiBEaWZmZXJlbmNlcyBmcm9tIExpc3AKLQotICAgICAqIEtlcm1pdCBoYXMgYSBsb3Qg b2YgYnVpbHQtaW4gb3BlcmF0b3JzIG5vdCBmb3VuZCBpbiBMaXNwOiArKywgXiwKLSAgICAgICBl dGMuCi0gICAgICogTW9zdCBkaWFsZWN0cyBvZiByZWFsIExpc3AgZG8gbm90IGFsbG93IFMtRXhw cmVzc2lvbnMgdGhhdCBkb24ndAotICAgICAgIHN0YXJ0IHdpdGggYW4gb3BlcmF0b3IsIGZvciBl eGFtcGxlOgotICAoYSkKLQotICAgICAgIFRoaXMgZXhwcmVzc2lvbiBjYW4gY2F1c2UgYW4gZXJy b3IgaW4gTGlzcCAoZXZlbiBpZiAiYSIgaGFzIGEKLSAgICAgICB2YWx1ZSksIGJ1dCBpcyBhY2Nl cHRhYmxlIGluIEtlcm1pdCwgd2hlcmUgaXQgcmV0dXJucyB0aGUgdmFsdWUgb2YKLSAgICAgICB0 aGUgdmFyaWFibGUgImEiLiBTaW1pbGFybHksICgxKSByZXR1cm5zIHRoZSB2YWx1ZSAiMSIuCi0g ICAgICogSW4gcmVhbCBMaXNwLCBFVkFMIHJlcXVpcmVzIGV4YWN0bHkgb25lIG9wZXJhbmQuIElu IEtlcm1pdCwgaXQgY2FuCi0gICAgICAgaGF2ZSAwLCAxLCAyLCBvciBtb3JlIG9wZXJhbmRzLiBJ dCByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgbGFzdAotICAgICAgIG9wZXJhbmQgZXZhbHVhdGVk LgotICAgICAqIFJlYWwgTGlzcCBTRVRRIGFuZCBMRVQgdXN1YWxseSByZXF1aXJlIGFuIGV2ZW4g bnVtYmVyIG9mIG9wZXJhbmRzLgotICAgICAgIEtlcm1pdCBhbGxvd3MgYW4gb2RkIG51bWJlciwg aW4gd2hpY2ggY2FzZSB0aGUgbGFzdCAob3Igb25seSkKLSAgICAgICB2YXJpYWJsZSBpcyB1bmRl ZmluZWQgKGkuZS4gZGVsZXRlZCwgZGVzdHJveWVkKS4KLSAgICAgKiBLZXJtaXQgZG9lcyBub3Qg c3VwcG9ydCByYXRpb3Mgc3VjaCBhcyAiNy84Ii4gU29tZSBMaXNwIGRpYWxlY3RzCi0gICAgICAg YWNjZXB0IHJhdGlvcyBhcyBudW1iZXJzLCBhbmQgZ2VuZXJhdGUgcmF0aW9zIHdoZW4gdG9sZCB0 byBkaXZpZGUKLSAgICAgICB0d28gaW50ZWdlcnMgd2hvc2UgcXVvdGllbnQgaXMgbm90IGEgd2hv bGUgbnVtYmVyOyBlLmcuIGluIENvbW1vbgotICAgICAgIExpc3A6Ci0gIFsxM10gVVNFUigzNyk6 ICgvICgrIDEgMiAzIDQpIDMpCi0gIDEwLzMKLSAgWzEzXSBVU0VSKDM4KToKLQotICAgICAqIFRo ZSByZXN1bHQgb2YgKC8gMTAgMykgaXMgMy4zMzMuLi4uIFNvbWUgTGlzcCBkaWFsZWN0cyB0cnVu Y2F0ZSB0aGUKLSAgICAgICByZXN1bHQgdG8gMyBzaW5jZSBib3RoIG9wZXJhbmRzIGFyZSBpbnRl Z2Vycywgc29tZSBkb24ndDsgc29tZSBnaXZlCi0gICAgICAgdGhlIHJlc3VsdCBhcyBhIHJhdGlv LiBDLUtlcm1pdCBhbHdheXMgZ2l2ZXMgYSBmbG9hdGluZyBwb2ludAotICAgICAgIHJlc3VsdCB3 aGVuIHRoZXJlIGlzIGEgZnJhY3Rpb25hbCBwYXJ0LiBJZiB5b3Ugd2FudCBhbiBpbnRlZ2VyCi0g ICAgICAgcmVzdWx0LCB5b3UgY2FuIHVzZSBUUlVOQ0FURSwgRkxPT1IsIG9yIENFSUxJTkcsIGUu Zy4gKHRydW5jYXRlICgvCi0gICAgICAgMTAgMykpLgotICAgICAqIFRoZXJlIGlzIGN1cnJlbnRs eSBubyAiYmlnbnVtIiBzdXBwb3J0LiBMYXJnZSBudW1iZXJzIGNhbiBiZSB1c2VkCi0gICAgICAg YW5kIGxhcmdlIHJlc3VsdHMgZ2VuZXJhdGVkLCBidXQgKGFzIG5vdGVkIGluIFs1NDhdU2VjdGlv biA5LjIpCi0gICAgICAgdGhleSBhcmUgYWNjdXJhdGUgb25seSB0byB0aGUgcHJlY2lzaW9uIG9m IHRoZSB1bmRlcmx5aW5nIG1hY2hpbmUuCi0gICAgICAgXHYobWF0aF9wcmVjaXNpb24pIGdpdmVz IHRoZSBtYWNoaW5lIHByZWNpc2lvbiBhcyBhIG51bWJlciBvZgotICAgICAgIGRlY2ltYWwgZGln aXRzLCBlLmcuIDE2LgotICAgICAqIFNjaWVudGlmaWMgbm90YXRpb24gZm9yIGZsb2F0aW5nLXBv aW50IG51bWJlcnMgaXMgbm90IHN1cHBvcnRlZC4gSWYKLSAgICAgICB0aGUgbWFnbml0dWRlIG9m IGEgbnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcHJlY2lzaW9uIG9mIHRoZQotICAgICAgIHVu ZGVybHlpbmcgaGFyZHdhcmUsIHRoZSBsZXNzLXNpZ25pZmljYW50IGRpZ2l0cyBhcmUgc2hvd24g YnV0Ci0gICAgICAgdGhlaXIgdmFsdWVzIGFyZSBtZWFuaW5nbGVzcy4gSWYgaXQgdGhlIG51bWJl ciBpcyB0b28gc21hbGwgdG8gYmUKLSAgICAgICByZXByZXNlbnRlZCBpbnRlcm5hbGx5LCBpdCBp cyBzaG93biBhcyAiMC4wIi4KLSAgICAgKiBNYW55IExpc3AgZmVhdHVyZXMgYXJlIG9taXR0ZWQ6 IExpc3QgcHJvY2Vzc2luZyAoQ0FSLCBDRFIsIGV0YyksCi0gICAgICAgREVGVU4sIExpc3Atc3Bl Y2lmaWMgY29udHJvbCBzdHJ1Y3R1cmVzLCBhbmQgc28gb24uCi0KLSAgIFsgWzU0OV1Ub3AgXSBb IFs1NTBdQ29udGVudHMgXSBbIFs1NTFdQy1LZXJtaXQgSG9tZSBdIFsgWzU1Ml1LZXJtaXQKLSAg IEhvbWUgXQotCi0xMC4gRklMRSBUUkFOU0ZFUgotCi0gICBOZXcgY29tbWFuZHMgYW5kIHN3aXRj aGVzOgotCi0gICBTRVQgVFJBTlNGRVIgUkVQT1JUIHsgT0ZGLCBPTiB9Ci0gICAgICAgICAgRW5h YmxlcyBvciBkaXNhYmxlcyB0aGUgKG5ldykgb25lLWxpbmUgbWVzc2FnZSBwcmludGVkIGJ5IEtl cm1pdAotICAgICAgICAgIGFmdGVyIGEgcmVtb3RlLW1vZGUgZmlsZSB0cmFuc2ZlciB0byBpbmRp Y2F0ZSB0aGUgc291cmNlIGFuZAotICAgICAgICAgIGRlc3RpbmF0aW9uIGZpbGUsIGNvbXBsZXRl IHdpdGggcGF0aCwgdG8gbGV0IHlvdSBrbm93IHdoZXJlIHRoZQotICAgICAgICAgIGZpbGUgd2Vu dC4KLQotICAgU0VORCAvVFlQRTp7VEVYVCxCSU5BUll9Ci0gICAgICAgICAgU2VuZHMgb25seSBm aWxlcyBvZiB0aGUgZ2l2ZW4gdHlwZSAoc2VlIFs1NTNdU2VjdGlvbiA0KS4KLQotICAgU0VORCAv Tk9GT0xMT1dMSU5LUzoKLSAgICAgICAgICAoVU5JWCBvbmx5KSBTa2lwIG92ZXIgc3ltYm9saWMg bGlua3MgcmF0aGVyIHRoYW4gZm9sbG93aW5nIHRoZW0KLSAgICAgICAgICAoZGVmYXVsdCkuIFRo aXMgYXBwbGllcyB0byB3aWxkY2FyZCBhbmQvb3IgcmVjdXJzaXZlIFNFTkRzOyBpZiBhCi0gICAg ICAgICAgc2luZ2xlIGZpbGVuYW1lIGlzIGdpdmVuLCBhbmQgaXQgaGFwcGVucyB0byBiZSBhIHN5 bWJvbGljIGxpbmssCi0gICAgICAgICAgdGhlIGZpbGUgaXQgcG9pbnRzIHRvIGlzIHNlbnQuCi0K LSAgIFNFTkQgL0ZPTExPV0xJTktTOgotICAgICAgICAgIChVTklYIG9ubHkpIEZvbGxvdyAocmVz b2x2ZSkgc3ltYm9saWMgbGlua3MuIFdhdGNoIG91dCBmb3IKLSAgICAgICAgICBjaXJjdWxhciBs aW5rcywgZW5kbGVzcyBsb29wcywgZXRjLgotCi0gICBTRVQgU0VORCBJLVBBQ0tFVFMgeyBPRkYs IE9OIH0KLSAgICAgICAgICBXaGVuIHNlbmRpbmcgY29tbWFuZHMgdG8gYSBLZXJtaXQgc2VydmVy LCB0aGlzIHRlbGxzIHdoZXRoZXIKLSAgICAgICAgICBjb21tYW5kIHBhY2tldHMgc2hvdWxkIGJl IHByZWNlZGVkIGJ5IGFuIEkgKGluZm9ybWF0aW9uKSBwYWNrZXQsCi0gICAgICAgICAgd2hpY2gg aXMgdXNlZCB0byBzeW5jaHJvbml6ZSBwYXJhbWV0ZXJzIHByaW9yIHRvIGV4ZWN1dGluZyB0aGUK LSAgICAgICAgICBjb21tYW5kLiBOb3JtYWxseSBPTi4gVGhlIG9ubHkgcmVhc29uIHRvIHNldCB0 aGlzIE9GRiBpcyBmb3IKLSAgICAgICAgICBjb21tdW5pY2F0aW5nIHdpdGggYnVnZ3kgS2VybWl0 IHNlcnZlcnMgdGhhdCBtaXNiZWhhdmUgd2hlbiBhbiBJCi0gICAgICAgICAgcGFja2V0IGlzIHNl bnQgdG8gdGhlbS4gVGhlcmUgaXMgYWxzbyBhIFNFVCBSRUNFSVZFIEktUEFDS0VUUwotICAgICAg ICAgIGNvbW1hbmQsIGJ1dCBwcmVzZW50bHkgaXQgaGFzIG5vIGVmZmVjdC4KLQotICAgU0VUIFRS QU5TRkVSIE1FU1NBR0UgWyB0ZXh0IF0KLSAgICAgICAgICBTZXRzIGFuIGluaXRpYWwgbWVzc2Fn ZSB0byBiZSBzaG93biBpbiB0aGUgTGFzdCBNZXNzYWdlIGZpZWxkIG9mCi0gICAgICAgICAgdGhl IGZ1bGxzY3JlZW4gZmlsZS10cmFuc2ZlciBkaXNwbGF5LgotCi0gICBTRVQgVFJBTlNGRVIgVFJB TlNMQVRJT04geyBPTiwgT0ZGIH0KLSAgICAgICAgICBJbmhpYml0cyBvciByZS1lbmFibGVzIHRl eHQtZmlsZSB0cmFuc2ZlciBjaGFyYWN0ZXItc2V0Ci0gICAgICAgICAgdHJhbnNsYXRpb24gZ2xv YmFsbHkuCi0KLSAgIHsgU0VORCwgTVNFTkQsIEdFVCwgUkVDRUlWRSB9IC9UUkFOU1BBUkVOVAot ICAgICAgICAgIEluaGliaXRzIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24gZm9yIHRoaXMgdHJh bnNmZXIgb25seS4KLQotICAgeyBHRVQsIFJFQ0VJVkUgfSAvUElQRVM6e09OLE9GRn0KLSAgICAg ICAgICBPdmVycmlkZXMgZ2xvYmFsIFRSQU5TRkVSIFBJUEVTIHNldHRpbmcgZm9yIHRoaXMgdHJh bnNmZXIgb25seTsKLSAgICAgICAgICBPTiBhbGxvd3MgaW5jb21pbmcgZmlsZXMgd2l0aCBuYW1l cyBsaWtlICIhdGFyIHhmIC0iIHRvIGJlCi0gICAgICAgICAgb3BlbmVkIGFzIHBpcGVsaW5lcyBy YXRoZXIgdGhhbiByZWd1bGFyIGZpbGVzLgotCi0gICBUaGUgZm9sbG93aW5nIG5ldyAiaG90IGtl eXMiIGFyZSBhdmFpbGFibGUgd2hlbiBLZXJtaXQncyBmaWxlLXRyYW5zZmVyCi0gICBkaXNwbGF5 IGlzIHZpc2libGU6Ci0KLSAgICAgRDogVHVybiBvbiBkZWJ1Z2dpbmcsIG9wZW4gImRlYnVnLmxv ZyIgaWYgbm90IGFscmVhZHkgb3Blbi4KLSAgICAgZDogVHVybiBvZmYgZGVidWdnaW5nIGJ1dCBs ZWF2ZSBsb2cgb3BlbiAoaWYgaXQgd2FzIG9wZW4pLgotICAgICBUOiBUdXJuIG9uIGRlYnVnLWxv ZyB0aW1lc3RhbXBzLgotICAgICB0OiBUdXJuIG9mZiBkZWJ1Zy1sb2cgdGltZXN0YW1wcy4KLQot ICAgT3RoZXIgaW1wcm92ZW1lbnRzOgotICAgICAqIFNFVCBGSUxFIERPV05MT0FELURJUkVDVE9S WSBub3cgd29ya3MgZm9yIGV4dGVybmFsIHByb3RvY29scyAoZS5nLgotICAgICAgIHN6L3J6KSB0 b28uCi0gICAgICogSW1wcm92ZWQgYXV0b21hdGljIHBlci1maWxlIHRleHQvYmluYXJ5IHN3aXRj aGluZywgZGVzY3JpYmVkIGluCi0gICAgICAgWzU1NF1TZWN0aW9uIDQuCi0gICAgICogV2hlbiBz ZW5kaW5nIGEgZmlsZSBncm91cCAoZS5nLiAic2VuZCAqLioiKSwgZmFpbHVyZSB0byBvcGVuIGEg ZmlsZQotICAgICAgIGlzIG5vIGxvbmdlciBmYXRhbDsgbm93IEMtS2VybWl0IHNpbXBseSBnb2Vz IGFoZWFkIHRvIHRoZSBuZXh0Ci0gICAgICAgZmlsZS4KLSAgICAgKiBUcmFuc2FjdGlvbiBsb2cg ZW50cmllcyBhcmUgbm93IG1hZGUgZm9yIGV4dGVybmFsIHByb3RvY29scyB0b28uCi0KLSAgIFsg WzU1NV1Ub3AgXSBbIFs1NTZdQ29udGVudHMgXSBbIFs1NTddQy1LZXJtaXQgSG9tZSBdIFsgWzU1 OF1LZXJtaXQKLSAgIEhvbWUgXQotCi0xMS4gTU9ERU1TIEFORCBESUFMSU5HCi0KLSAgIEluIEMt S2VybWl0IDguMCwgdGhlIGRlZmF1bHQgbW9kZW0gdHlwZSBmb3IgZGlhbGluZyBoYXMgY2hhbmdl ZCBmcm9tCi0gICBOT05FICg9IERJUkVDVCwgbWVhbmluZyBubyBtb2RlbSkgdG8gR0VORVJJQy4g VGhpcyBjaGFuZ2Ugc2hvdWxkIGhhdmUKLSAgIG5vIGltcGFjdCBvbiBkaXJlY3QgY29ubmVjdGlv bnMuIEZvciBkaWFsaW5nLCBpdCBtZWFucyB0aGF0LCB1bmxlc3MgeW91Ci0gICBTRVQgTU9ERU0g VFlQRSB0byBhIHNwZWNpZmljIHR5cGUsIHN1Y2ggYXMgVVNST0JPVElDUyBvciBDT05FWEFOVCwK LSAgIEtlcm1pdCBhc3N1bWVzOgotCi0gICAgMS4gVGhlIG1vZGVtIHVzZXMgdGhlIEhheWVzIEFU IGNvbW1hbmQgc2V0LgotICAgIDIuIFRoZSBtb2RlbSBzdXBwb3J0cyBlcnJvciBjb3JyZWN0aW9u LCBkYXRhIGNvbXByZXNzaW9uLCBhbmQgaGFyZHdhcmUKLSAgICAgICBmbG93IGNvbnRyb2wgYW5k IGlzIGFscmVhZHkgY29uZmlndXJlZCB0byB1c2UgdGhlbS4KLQotICAgSW4gZmFjdCwgS2VybWl0 IGFzc3VtZXMgdGhlIG1vZGVtIGlzIGNvbXBsZXRlbHkgY29uZmlndXJlZCwgYW5kCi0gICB0aGVy ZWZvcmUgZG9lcyBub3Qgc2VuZCBpdCBhbiBpbml0aWFsaXphdGlvbiBzdHJpbmcgb3IgYW55Ci0g ICBjb25maWd1cmF0aW9uIGNvbW1hbmRzLiBJbnN0ZWFkLCBpdCBzZW5kcyBvbmx5IHRoZSBzaW1w bGVzdCBhbmQgbW9zdAotICAgcG9ydGFibGUgY29tbWFuZHM6Ci0KLSAgICAgQVRRMFYxICAgICAg ICAgIEdpdmUgZGlhbCByZXN1bHQgY29kZXMuCi0gICAgIEFURFRudW1iZXIgICAgICBEaWFsIHRo ZSBudW1iZXIuCi0KLSAgIChvciBBVEQgb3IgQVREUCwgYXMgYXBwcm9wcmlhdGUpLgotCi0gICBU aGUgbmV3IGRlZmF1bHRzIHdvcmsgZm9yIGRpcmVjdCBjb25uZWN0aW9ucyBhbmQgZm9yIG1vc3Qg bW9kZXJuIG1vZGVtcwotICAgb24gbW9zdCBwbGF0Zm9ybXMsIGFuZCB0aGV5IHdvcmsgbXVjaCBm YXN0ZXIgdGhhbiAiZnVsbC10cmVhdG1lbnQiCi0gICBkaWFsaW5nLiBJZiB0aGUgbmV3IGRlZmF1 bHRzIGRvbid0IHdvcmsgZm9yIHlvdSwgb3IgaWYgeW91IG5lZWQgdG8KLSAgIHBlcmZvcm0gZXhw bGljaXQgbW9kZW0gY29uZmlndXJhdGlvbnMgb3IgaW50ZXJhY3Rpb25zLCB0aGVuIHNldCBhCi0g ICBzcGVjaWZpYyBtb2RlbSB0eXBlIGFuZCB1c2UgdGhlIFNFVCBNT0RFTSBhbmQgU0VUIERJQUwg Y29tbWFuZHMgYXMKLSAgIGRvY3VtZW50ZWQgaW4gVXNpbmcgQy1LZXJtaXQuCi0KLSAgICAgV0FS TklORzogRG9uJ3QgdXNlIHRoZSBnZW5lcmljIG1vZGVtIG9uIGhvc3RzIHRoYXQgZG8gbm90IHN1 cHBvcnQKLSAgICAgUlRTL0NUUyBmbG93IGNvbnRyb2wuIElmIFhvbi9Yb2ZmIGlzIGluIHVzZSBv biB0aGUgc2VyaWFsIHBvcnQsCi0gICAgIHlvdSdsbCBuZWVkIHRvIHNlbGVjdCBhIHBhcnRpY3Vs YXIgbW9kZW0gdHlwZSBzbyBLZXJtaXQga25vd3Mgd2hhdAotICAgICBjb21tYW5kIHRvIGdpdmUg aXQgdG8gZW5hYmxlIFhvbi9Yb2ZmIGZsb3cgY29udHJvbCBiZXR3ZWVuIGl0c2VsZgotICAgICBh bmQgeW91ciBzZXJpYWwgcG9ydC4KLQotICAgVGhlIGZvbGxvd2luZyBuZXcgbW9kZW0gdHlwZXMg d2VyZSBhZGRlZCBpbiBDLUtlcm1pdCA4LjA6Ci0KLSAgICAgbHVjZW50OiAgICAgICAgICBMdWNl bnQgVmVudXMgY2hpcHNldAotICAgICBwY3RlbDogICAgICAgICAgIFBDVGVsIFYuOTAgY2hpcHNl dAotICAgICBjb25leGFudDogICAgICAgIENvbmV4YW50IChleC1Sb2Nrd2VsbCkgbW9kZW0gZmFt aWx5Ci0gICAgIHpvb20tdjMyYmlzOiAgICAgTmV3IG5hbWUgZm9yICJab29tIgotICAgICB6b29t LXYzNCAgICAgICAgIFpvb20gVi4zNAotICAgICB6b29tLXY5MCAgICAgICAgIFpvb20gVi45MCA1 NksKLSAgICAgem9vbS12OTI6ICAgICAgICBab29tIFYuOTIgd2l0aCBWLjQ0IGRhdGEgY29tcHJl c3Npb24KLSAgICAgem9sdHJpeC12MzQ6ICAgICBOZXcgbmFtZSBmb3IgInpvbHRyaXgiCi0gICAg IHpvbHRyaXgtaHNwLXY5MDogU3lub255bSBmb3IgUENUZWwKLSAgICAgem9sdHJpeC1oY2Ytdjkw OiBTeW5vbnltIGZvciBJVFUtVC1WMjUwCi0gICAgIHNtYXJ0bGluay12OTA6ICAgU3lub255bSBm b3IgdXNyb2JvdGljcyAoc2FtZSBjaGlwc2V0KQotICAgICBhY2VyLXY5MDogICAgICAgIFN5bm9u eW0gZm9yIFJvY2t3ZWxsLXY5MAotCi0gICBOZXcgRElBTC1yZWxhdGVkIHZhcmlhYmxlczoKLQot ICAgICBcdihkbV9oZik6ICBEaWFsIG1vZGlmaWVyOiBXYWl0IGZvciBIb29rLUZsYXNoLgotICAg ICBcdihkbV93Yik6ICBEaWFsIG1vZGlmaWVyOiBXYWl0IGZvciBCb25nLgotCi0gICBGaW5hbGx5 LCBpZiBkaWFsaW5nIGZhaWxzLCBLZXJtaXQgbm93IHByaW50cyBhIGNvbnRleHQtc2Vuc2l0aXZl IGhpbnQKLSAgIHN1Z2dlc3RpbmcgcG9zc2libGUgcmVhc29ucyBhbmQgcmVtZWRpZXMuCi0KLSAg IEFkZGVkIGluIEMtS2VybWl0IDguMC4yMDE6ICAgUnVkaW1lbnRhcnkgc3VwcG9ydCBmb3IgQ2Fs bGVyIElELCBmb3IgdXNlCi0gICB3aXRoIHRoZSBBTlNXRVIgY29tbWFuZC4gSWYgdGhlIG1vZGVt IHJlcG9ydHMgQ2FsbGVyIElEIGluZm9ybWF0aW9uLAotICAgS2VybWl0IHN0b3JlcyBpdCBpbiB2 YXJpYWJsZXMgdGhhdCB5b3UgY2FuIGFjY2VzcyBhZnRlciB0aGUgY2FsbCBpcwotICAgYW5zd2Vy ZWQ6Ci0KLSAgXHYoY2FsbGlkX2RhdGUpICAgVGhlIGRhdGUgb2YgdGhlIGNhbGwKLSAgXHYoY2Fs bGlkX3RpbWUpICAgVGhlIHRpbWUgb2YgdGhlIGNhbGwKLSAgXHYoY2FsbGlkX25hbWUpICAgVGhl IG5hbWUgb2YgdGhlIGNhbGxlcgotICBcdihjYWxsaWRfbm1icikgICBUaGUgdGVsZXBob25lIG51 bWJlciBvZiB0aGUgY2FsbGVyCi0gIFx2KGNhbGxpZF9tZXNnKSAgIEEgbWVzc2FnZQotCi0gICBU aGUgZm9ybWF0IG9mIHRoZXNlIGl0ZW1zIGRlcGVuZHMgb24gdGhlIG9yaWdpbmF0aW5nIGFuZCBh bnN3ZXJpbmcKLSAgIHBob25lIGNvbXBhbmllcyBhbmQgdGhlIG1vZGVtcyBhbmQgdGhlaXIgY29u ZmlndXJhdGlvbi4KLQotICAgTm90IHZlcnkgbWFueSBtb2RlbXMgc3VwcG9ydCBDYWxsZXIgSUQs IGFuZCB0aG9zZSB0aGF0IGRvIChhKSB0ZW5kIHRvCi0gICBoYXZlIGl0IGRpc2FibGVkIGJ5IGRl ZmF1bHQsIGFuZCAoYikgdXNlIGRpZmZlcmVudCBjb21tYW5kcyB0byBlbmFibGUKLSAgIGl0LiBB IHF1aWNrIHN1cnZleSBzaG93cyBvZiBzb21lIGN1cnJlbnQgbW9kZWxzIHNob3dzOgotCi0gICAt IFVTUiBWLjkwOiAgICAgIE5vCi0gICAtIElUVS1UIFYuMjUwOiAgIE5vCi0gICAtIEx1Y2VudCBW ZW51czogIE5vCi0gICAtIERpYW1vbmQgU3VwcmE6ICNDSUQ9MQotICAgLSBSb2Nrd2VsbCA1Nks6 ICAjQ0lEPTEKLSAgIC0gUENURUw6ICAgICAgICAgI0NJRD0xCi0gICAtIFpvbHRyaXg6ICAgICAg ICtWQ0lEPTEKLSAgIC0gQ29uZXhhbnQ6ICAgICAgK1ZDSUQ9MQotCi0gICBUbyB1c2UgS2VybWl0 J3MgQ2FsbGVyIElEIGZlYXR1cmUsIHlvdSBoYXZlIHRvIHNldCB0aGUgbW9kZW0gdG8gd2FpdAot ICAgZm9yIGF0IGxlYXN0IHR3byByaW5ncyBiZWZvcmUgYW5zd2VyaW5nLCBhbmQgeW91IGhhdmUg dG8gZ2l2ZSB0aGUKLSAgIGNvbW1hbmQgdG8gZW5hYmxlIENhbGxlciBJRDsgZm9yIGV4YW1wbGUg KGFmdGVyIGNob29zaW5nIGEgbW9kZW0gd2l0aAotICAgU0VUIE1PREVNIFRZUEUpOgotCi0gIHNl dCBtb2RlbSBjb21tYW5kIGF1dG9hbnN3ZXIgb24gQVRTMD0yI0NJRD0xXHsxM30KLSAgc2V0IG1v ZGVtIGNvbW1hbmQgYXV0b2Fuc3dlciBvbiBBVFMwPTIrVkNJRD0xXHsxM30KLQotICAgVGhlc2Ug Y29tbWFuZHMgY2FuIGJlIHVuZG9uZSB3aXRoOgotCi0gIHNldCBtb2RlbSBjb21tYW5kIGF1dG9h bnN3ZXIgb24gQVRTMD0xI0NJRD0wXHsxM30KLSAgc2V0IG1vZGVtIGNvbW1hbmQgYXV0b2Fuc3dl ciBvbiBBVFMwPTErVkNJRD0wXHsxM30KLQotICAgS2VybWl0IHByZXNlbnRseSBoYXMgbm8gYnVp bHQtaW4ga25vd2xlZGdlIG9mIHRoZSBDYWxsZXIgSUQKLSAgIGNhcGFiaWxpdGllcyBvciBjb21t YW5kcyBvZiB0aGUgbW9kZW1zIGluIGl0cyBkYXRhYmFzZS4KLQotICAgU2luY2UgdGhlIHZhcmlh YmxlcyBjYW4gYmUgYWNjZXNzZWQgb25seSBhZnRlciB0aGUgY2FsbCBpcyBhbnN3ZXJlZCwKLSAg IHRoZSBvbmx5IHdheSB0byByZWZ1c2UgYSBjYWxsIGlzIHRvIGFuc3dlciBpdCwgaW5zcGVjdCB0 aGUgdmFyaWFibGVzLAotICAgYW5kIHRoZW4gaGFuZyBpdCB1cCBpZiBkZXNpcmVkLgotCi0gICBb IFs1NTldVG9wIF0gWyBbNTYwXUNvbnRlbnRzIF0gWyBbNTYxXUMtS2VybWl0IEhvbWUgXSBbIFs1 NjJdS2VybWl0Ci0gICBIb21lIF0KLQotMTIuIFRFUk1JTkFMIENPTk5FQ1RJT04KLQotICAgTm93 IHRoYXQgNy1iaXQgY29ubmVjdGlvbnMgYXJlIG5vIGxvbmdlciB0aGUgbm9ybSwgdGhlIGRlZmF1 bHQgdGVybWluYWwKLSAgIGJ5dGVzaXplIChhbHNvIGNhbGxlZCAiZGF0YSBzaXplIiBvciAid29y ZCBzaXplIikgaW4gQy1LZXJtaXQgOC4wIGlzIDgKLSAgIGJpdHMsIHJhdGhlciB0aGFuIDcgYml0 cyBhcyBpdCB3YXMgaW4gQy1LZXJtaXQgNy4wIGFuZCBlYXJsaWVyOgotCi0gICBTRVQgRVNDQVBF IGNoYXJhY3RlcgotICAgICAgICAgIFRoaXMgY29tbWFuZCwgd2hpY2ggc3BlY2lmaWVzIHlvdXIg Q09OTkVDVC1tb2RlIGVzY2FwZQotICAgICAgICAgIGNoYXJhY3RlciwgYWxsb3dzIHlvdSB0byBz cGVjaWZ5IGFueSBBU0NJSSBjb250cm9sIGNoYXJhY3RlciBpbgotICAgICAgICAgIGEgdmFyaWV0 eSBvZiBmb3JtYXRzLiBDLUtlcm1pdCA4LjAuMjAxIG5vdyBhbHNvIGxldHMgeW91IHNwZWNpZnkK LSAgICAgICAgICBhbnkgOC1iaXQgdmFsdWUsIDEyOC0yNTUsIGFzIHRoZSBlc2NhcGUgY2hhcmFj dGVyLiBJbiB0aGUgU0VUCi0gICAgICAgICAgRVNDQVBFIGNvbW1hbmQsIHlvdSBjYW4gdHlwZSB0 aGUgOC1iaXQgY2hhcmFjdGVyIGxpdGVyYWxseSBvcgotICAgICAgICAgIHlvdSBjYW4gZW50ZXIg aXRzIG51bWVyaWMgY29kZS4gSGVyZSBhcmUgZXhhbXBsZXMgdGhhdCB5b3UgY2FuCi0gICAgICAg ICAgZW50ZXIgZnJvbSBhIHRlcm1pbmFsIG9yIGNvbnNvbGUgdGhhdCB1c2VzIHRoZSBJU08gTGF0 aW4tMQotICAgICAgICAgIGNoYXJhY3RlciBzZXQ6Ci0KLSAgQy1LZXJtaXQ+IHNldCBlc2NhcGUg 77+9Ci0gIEMtS2VybWl0PiBzZXQgZXNjYXBlIDE5NQotICBDLUtlcm1pdD4gc2hvdyBlc2NhcGUK LSAgIEVzY2FwZSBjaGFyYWN0ZXI6IENvZGUgMTk1ICjvv70pOiBlbmFibGVkCi0gIEMtS2VybWl0 PgotCi0gICAgICAgICAgQm90aCBvZiB0aGVzZSBjb21tYW5kcyBzZXQgdGhlIGVzY2FwZSBjaGFy YWN0ZXIgdmFsdWUgdG8gMTk1Ci0gICAgICAgICAgKGRlY2ltYWwpLCB3aGljaCBoYXBwZW5zIHRv IGJlIHVwcGVyY2FzZSBsZXR0ZXIgQSB3aXRoIFRpbGRlIGluCi0gICAgICAgICAgTGF0aW4tMS4g U0hPVyBFU0NBUEUgYW5kIFNIT1cgVEVSTUlOQUwgc2hvdyB0aGUgdmFsdWUsIGFzIGRvZXMKLSAg ICAgICAgICB0aGUgQ09OTkVDVCBtZXNzYWdlLgotCi0gICBTRVQgVEVSTUlOQUwgQVVUT0RPV05M T0FEIEVSUk9SIHsgU1RPUCwgQ09OVElOVUUgfQotICAgICAgICAgIFdoZW4gS2VybWl0IGhhcyBh IHRlcm1pbmFsIGNvbm5lY3Rpb24gdG8gYW5vdGhlciBjb21wdXRlciwgYW5kIGEKLSAgICAgICAg ICBmaWxlIHRyYW5zZmVyIGlzIGluaXRpYXRlZCBhdXRvbWF0aWNhbGx5IGJlY2F1c2UgYSBLZXJt aXQgcGFja2V0Ci0gICAgICAgICAgd2FzIHJlY2VpdmVkIGluIENPTk5FQ1QgbW9kZSAoaS5lLiBp biB0aGUgdGVybWluYWwgc2NyZWVuKSwgdGhpcwotICAgICAgICAgIGNvbW1hbmQgdGVsbHMgd2hh dCBLZXJtaXQgc2hvdWxkIGRvIGlmIHRoZSB0cmFuc2ZlciBmYWlscy4gVGhlCi0gICAgICAgICAg ZGVmYXVsdCBpcyB0byBTVE9QLCB3aGljaCBsZWF2ZXMgS2VybWl0IGluIGNvbW1hbmQgbW9kZSB3 aXRoIGl0cwotICAgICAgICAgIGZpbGUtdHJhbnNmZXIgZGlzcGxheSBzaG93aW5nLCBzbyB5b3Ug Y2FuIHNlZSB0aGF0IHRoZSB0cmFuc2ZlcgotICAgICAgICAgIGZhaWxlZCBhbmQgd2h5LiBJZiB5 b3UgU0VUIFRFUk1JTkFMIEFVVE9ET1dOTE9BRCBFUlJPUiBDT05USU5VRSwKLSAgICAgICAgICB0 aGlzIGNhdXNlcyBLZXJtaXQgdG8gcmV0dXJuIGF1dG9tYXRpY2FsbHkgdG8gaXRzIHRlcm1pbmFs Ci0gICAgICAgICAgc2NyZWVuIChpLmUuIHJlc3VtZSBpdHMgQ09OTkVDVCBzZXNzaW9uKSBhcyBp ZiB0aGUgdHJhbnNmZXIgaGFkCi0gICAgICAgICAgc3VjY2VlZGVkOyB0aGlzIGNhbiBiZSBkZXNp cmFibGUgaWYgdGhlIGVudGlyZSBzZXNzaW9uIGlzIHVuZGVyCi0gICAgICAgICAgY29udHJvbCBv ZiBhIGhvc3QtYmFzZWQgc2NyaXB0LgotCi0gICBTRVQgVEVSTUlOQUwgQllURVNJWkUgeyA3LCA4 IH0KLSAgICAgICAgICBUaGUgYnl0ZSBzaXplIHRvIHVzZSBkdXJpbmcgQ09OTkVDVCBhbmQgSU5Q VVQgY29tbWFuZCBleGVjdXRpb24sCi0gICAgICAgICAgd2hpY2ggY2FuIGJlIG1vcmUgcmVzdHJp Y3RpdmUgdGhhbiB0aGUgYnl0ZXNpemUgaW1wbGllZCBieSB0aGUKLSAgICAgICAgICBjdXJyZW50 IFBBUklUWSBzZXR0aW5nLCBidXQgbm90IGxlc3MgcmVzdHJpY3RpdmUuIEluIEMtS2VybWl0Ci0g ICAgICAgICAgNy4wIGFuZCBlYXJsaWVyLCB0aGUgdGVybWluYWwgYnl0ZXNpemUgd2FzIDcgYnkg ZGVmYXVsdCB0bwotICAgICAgICAgIHByb3RlY3QgYWdhaW5zdCB0aGUgbGlrZWxpaG9vZCB0aGF0 IHBhcml0eSB3YXMgaW4gdXNlIG9uIHRoZQotICAgICAgICAgIGNvbm5lY3Rpb24gd2l0aG91dCB0 aGUgdXNlcidzIGtub3dsZWRnZS4gV2hlbiB0aGUgdGVybWluYWwKLSAgICAgICAgICBieXRlc2l6 ZSBpcyA4IChhcyBpdCBpcyBpbiBDLUtlcm1pdCA4LjAgYW5kIGxhdGVyKSwgdGhlIHVzZXIKLSAg ICAgICAgICB3aWxsIHNlZSBnYXJiYWdlIGluIHRoaXMgKGluY3JlYXNpbmdseSB1bmxpa2VseSkg c2l0dWF0aW9uLiBOb3RlCi0gICAgICAgICAgdGhhdCA4IGRhdGEgYml0cyBhcmUgcmVxdWlyZWQg Zm9yIG1vc3QgY2hhcmFjdGVyIHNldHMgb3RoZXIgdGhhbgotICAgICAgICAgIEFTQ0lJOiBMYXRp bi0xLCBVVEYtOCwgYW5kIHNvIG9uLgotCi0gICBBIG5ldyBjb21tYW5kIGhhcyBiZWVuIGFkZGVk IHRvIHByb2R1Y2UgdGltZXN0YW1wZWQgc2Vzc2lvbiBsb2dzOgotCi0gICBTRVQgVEVSTUlOQUwg U0VTU0lPTi1MT0cgVElNRVNUQU1QRUQtVEVYVAotICAgICAgICAgIFJlY29yZHMgdGhlIHRlcm1p bmFsIHNlc3Npb24gaW4gdGV4dCBtb2RlIChsaWtlIFNFVCBURVJNSU5BTAotICAgICAgICAgIFNF U1NJT04tTE9HIFRFWFQpIGJ1dCBhZGRzIGEgdGltZXN0YW1wIGF0IHRoZSBiZWdpbm5pbmcgb2Yg ZWFjaAotICAgICAgICAgIGxpbmUuIFRoZSB0aW1lc3RhbXAgZm9ybWF0IGlzIGhoOm1tOnNzLm5u biwgYW5kIGluZGljYXRlcyB0aGUKLSAgICAgICAgICB0aW1lIGF0IHdoaWNoIHRoZSBmaXJzdCBj aGFyYWN0ZXIgb2YgdGhlIGxpbmUgYXBwZWFyZWQuCi0KLSAgIEluIG1vc3QgVU5JWCB2ZXJzaW9u cyAodGhvc2UgYnVpbHQgd2l0aCB0aGUgc2VsZWN0KCktY2FwYWJsZSBDT05ORUNUCi0gICBtb2R1 bGUgLS0gcHJldHR5IG11Y2ggYWxsIHRoZSBvbmVzIHRoYXQgaGF2ZSBvciBjb3VsZCBoYXZlIFRF TE5FVAotICAgaW5jbHVkZWQpLCBhbiBpZGxlIHRpbWVvdXQgZmVhdHVyZSBoYXMgYmVlbiBhZGRl ZDoKLQotICAgU0VUIFRFUk1JTkFMIElETEUtVElNRU9VVCBudW1iZXIKLSAgICAgICAgICBJZiB0 aGUgbnVtYmVyIGlzIG5vdCAwLCB0aGVuIEtlcm1pdCBpcyB0byB0YWtlIGFuIGFjdGlvbiB3aGVu Ci0gICAgICAgICAgdGhlIGdpdmVuIGFtb3VudCBvZiB0aW1lIHBhc3NlcyB3aXRoIG5vIGFjdGl2 aXR5IGR1cmluZyBDT05ORUNUCi0gICAgICAgICAgbW9kZS4gSWYgdGhlIG51bWJlciBpcyBwb3Np dGl2ZSBpdCBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgaWRsZQotICAgICAgICAgIHNlY29uZHM7 IGlmIG51bWJlciBpcyBuZWdhdGl2ZSBpdCByZXByZXNlbnRzIG1pbGxpc2Vjb25kcwotICAgICAg ICAgICh0aG91c2FuZHRocyBvZiBzZWNvbmRzKS4gSWYgMCBpcyBnaXZlbiBhcyB0aGUgbnVtYmVy LCB0aGVyZSBhcmUKLSAgICAgICAgICBubyBpZGxlIHRpbWVvdXRzLiBTeW5vbnltOiBTRVQgVEVS TUlOQUwgSURMRS1MSU1JVC4KLQotICAgU0VUIFRFUk1JTkFMIElETEUtQUNUSU9OIHsgUkVUVVJO LCBIQU5HVVAsIEVYSVQsIE9VVFBVVCBbIHN0cmluZyBdIH0KLSAgICAgICAgICBUaGUgYWN0aW9u IHRvIGJlIHRha2VuIHVwb24gYW4gaWRsZSB0aW1lb3V0IGluIENPTk5FQ1QgbW9kZS4KLSAgICAg ICAgICBSRVRVUk4gdG8gdGhlIHByb21wdCwgSEFOR1VQIHRoZSBjb25uZWN0aW9uLCBFWElUIGZy b20gS2VybWl0LAotICAgICAgICAgIG9yIE9VVFBVVCB0aGUgZ2l2ZW4gc3RyaW5nIChpZiBubyBz dHJpbmcgaXMgZ2l2ZW4sIGEgTlVMIChBU0NJSQotICAgICAgICAgIDApIGNoYXJhY3RlciBpcyBz ZW50KS4KLQotICAgU0VUIFRFUk1JTkFMIElETEUtQUNUSU9OIHsgVEVMTkVULU5PUCwgVEVMTkVU LUFZVCB9Ci0gICAgICAgICAgQWN0aW9ucyB0aGF0IGNhbiBiZSBzZWxlY3RlZCBvbiBUZWxuZXQg Y29ubmVjdGlvbnMgb25seSwgdGhhdAotICAgICAgICAgIG1pZ2h0IGJlIHVzZWZ1bCBpZiBpZGxl IGxpbWl0cyBhcmUgZW5mb3JjZWQgYnkgdGhlIFRlbG5ldCBzZXJ2ZXIKLSAgICAgICAgICBvciBp biB0aGUgVENQL0lQIHByb3RvY29sOiBURUxORVQtTk9QIHNlbmRzIGEgIk5PIE9wZXJhdGlvbiIK LSAgICAgICAgICAoZG8tbm90aGluZykgY29tbWFuZCwgd2hpY2ggY2F1c2VzIG5vIHJlc3BvbnNl IGZyb20gdGhlIHNlcnZlcjsKLSAgICAgICAgICBURUxORVQtQVlUIHNlbmRzIGFuICJBcmUgWW91 IFRoZXJlIiBtZXNzYWdlIHRvIHRoZSBzZXJ2ZXIsIHdoaWNoCi0gICAgICAgICAgc2hvdWxkIG1h a2UgdGhlIHNlcnZlciBzZW5kIGJhY2sgYSBtZXNzYWdlLiBOZWl0aGVyIG9mIHRoZXNlCi0gICAg ICAgICAgYWN0aW9ucyBpbnRlcmZlcmVzIHdpdGggeW91ciByZW1vdGUgc2Vzc2lvbi4KLQotICAg U0VUIFRFUk1JTkFMIElETEUtQUNUSU9OIGlzIHVzZWZ1bCBmb3IgY29ubmVjdGlvbnMgdG8gaG9z dHMgb3Igc2VydmljZXMKLSAgIHRoYXQgYXV0b21hdGljYWxseSBsb2cgeW91IG91dCBhZnRlciBh IGNlcnRhaW4gYW1vdW50IG9mIGlkbGUgdGltZSwKLSAgIGUuZy46Ci0KLSAgc2V0IHRlcm0gaWRs ZS10aW1lb3V0IDMwMAotICBzZXQgdGVybSBpZGxlLWFjdGlvbiBvdXRwdXQgXDMyCi0KLSAgIHNl bmRzIGEgc3BhY2UgKGFzIGlmIHlvdSBoYWQgcHJlc3NlZCB0aGUgc3BhY2UgYmFyKSBldmVyeSAz MDAgc2Vjb25kcwotICAgKGZpdmUgbWludXRlcykgd2hpbGUgdGhlcmUgaXMgbm8gYWN0aXZpdHkg KDMyIGlzIHRoZSBBU0NJSSBjb2RlIGZvcgotICAgc3BhY2UpLgotCi0gICBXaGVuIEMtS2VybWl0 IHJldHVybnMgZnJvbSBDT05ORUNUIHRvIGNvbW1hbmQgbW9kZSwgdGhlIHJlYXNvbiBmb3IgdGhl Ci0gICB0cmFuc2l0aW9uIGlzIGdpdmVuIGluIGEgbmV3IHZhcmlhYmxlLCBcdihjeF9zdGF0dXMp OgotCi0gICAgICAwICBObyBDT05ORUNUIGNvbW1hbmQgZ2l2ZW4geWV0LgotICAgICAgMSAgVXNl ciBlc2NhcGVkIGJhY2sgbWFudWFsbHkuCi0gICAgICAyICBBIHRyaWdnZXIgc3RyaW5nIHdhcyBl bmNvdW50ZXJlZC4KLSAgICAgIDMgIElLU0QgZW50ZXJlZCBzZXJ2ZXIgbW9kZS4KLSAgICAgIDQg IEFwcGxpY2F0aW9uIFByb2dyYW0gQ29tbWFuZCByZWNlaXZlZCBmcm9tIGhvc3QuCi0gICAgICA1 ICBJZGxlIHRpbWVvdXQuCi0gICAgICA2ICBUZWxuZXQgcHJvdG9jb2wgZXJyb3IuCi0gICAgICA3 ICBLZXlzdHJva2UgbWFjcm8uCi0gICAgICA4ICBUaW1lIGxpbWl0IGV4Y2VlZGVkLgotICAgIDEw MCAgSW50ZXJuYWwgZXJyb3IuCi0gICAgMTAxICBDYXJyaWVyIHJlcXVpcmVkIGJ5IG5vdCBkZXRl Y3RlZC4KLSAgICAxMDIgIEkvTyBlcnJvciBvbiBjb25uZWN0aW9uLgotICAgIDEwMyAgRGlzY29u bmVjdGVkIGJ5IGhvc3QuCi0gICAgMTA0ICBEaXNjb25uZWN0ZWQgYnkgdXNlci4KLSAgICAxMDUg IFNlc3Npb24gbGltaXQgZXhjZWVkZWQuCi0gICAgMTA2ICBSZWplY3RlZCBkdWUgdG8gVGVsbmV0 IHBvbGljeS4KLSAgICAxMDcgIFJlY2VpdmVkIGtpbGwgc2lnbmFsLgotCi0gICBWYWx1ZXMgMTAw IGFuZCBhYm92ZSBpbmRpY2F0ZSB0aGVyZSBpcyBubyBjb25uZWN0aW9uLgotCi0gICBbIFs1NjNd VG9wIF0gWyBbNTY0XUNvbnRlbnRzIF0gWyBbNTY1XUMtS2VybWl0IEhvbWUgXSBbIFs1NjZdS2Vy bWl0Ci0gICBIb21lIF0KLQotMTMuIENIQVJBQ1RFUiBTRVRTCi0KLSAgIFNlZSB0aGUgc2VjdGlv biBvbiBbNTY3XWZpbGUgc2Nhbm5pbmcgYWJvdmUsIGFuZCB0aGUgc2VjdGlvbiBvbgotICAgY2hh cmFjdGVyLXNldCBjb252ZXJzaW9uIGluIFs1NjhdRlRQLiBBbHNvOgotCi0gICAgICogVHJ1ZSBz dXBwb3J0IGZvciBDUDEyNTIgKHJhdGhlciB0aGFuIHRyZWF0aW5nIGl0IGFzIExhdGluLTEpLgot ICAgICAqIFByb3BlciBoYW5kbGluZyBvZiBDMSB2YWx1ZXMgd2hlbiBjb252ZXJ0aW5nIElTTyA4 LWJpdCB0ZXh0IHRvCi0gICAgICAgVVRGLTguCi0gICAgICogVFlQRSAvQ0hBUkFDVEVSLVNFVDog L1RSQU5TTEFURS1UTzogYWxsb3dzIHNwZWNpZmljIHRyYW5zbGF0aW9ucy4KLSAgICAgKiBUaGUg VFJBTlNMQVRFIGNvbW1hbmQgbm93IHdvcmtzIG9uIG11bHRpcGxlIGZpbGVzLgotICAgICAqIEtf Q0hBUlNFVCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBzZXQgdGhlIGZpbGUgY2hhcmFjdGVyLXNl dC4KLSAgICAgKiBTRVQgVFJBTlNGRVIgVFJBTlNMQVRJT04gT0ZGLgotICAgICAqIEZUUCBjbGll bnQgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiAoWzU2OV1TZWN0aW9uIDMuNykuCi0KLSAgIFsg WzU3MF1Ub3AgXSBbIFs1NzFdQ29udGVudHMgXSBbIFs1NzJdQy1LZXJtaXQgSG9tZSBdIFsgWzU3 M11LZXJtaXQKLSAgIEhvbWUgXQotCi0xNC4gRElBTE9VVCBGUk9NIFRFTE5FVCBURVJNSU5BTCBT RVJWRVJTCi0KLSAgIEZvciB5ZWFycywgQy1LZXJtaXQgaGFzIHN1cHBvcnRlZCBkaWFsaW5nIG91 dCBmcm9tIFRlbG5ldCBtb2RlbSBzZXJ2ZXJzCi0gICAoYWxzbyBjYWxsZWQgcmV2ZXJzZSB0ZXJt aW5hbCBzZXJ2ZXJzIG9yIGFjY2VzcyBzZXJ2ZXJzKSwgYnV0IHVudGlsIG5vdwotICAgdGhlcmUg d2FzIG5vIHdheSBmb3IgS2VybWl0IHRvIGNvbnRyb2wgdGhlIGNvbW11bmljYXRpb24gcGFyYW1l dGVycwotICAgKHNwZWVkLCBwYXJpdHksIGV0Yykgb24gdGhlIHNlcmlhbCBwb3J0IG9mIHRoZSB0 ZXJtaW5hbCBzZXJ2ZXI7IGl0IGhhZAotICAgdG8gdXNlIHdoYXRldmVyIHdhcyB0aGVyZS4KLQot ICAgQnV0IG5vdywgaWYgeW91IG1ha2UgYSBjb25uZWN0aW9uIHRvIGEgc2VydmVyIHRoYXQgc3Vw cG9ydHMgdGhlIFRlbG5ldAotICAgQ29tIFBvcnQgQ29udHJvbCBPcHRpb24sIFs1NzRdUkZDIDIy MTcsIHlvdSBoYXZlIHRoZSBzYW1lIGRlZ3JlZSBvZgotICAgY29udHJvbCBhcyB5b3Ugd291bGQg aGF2ZSBvdmVyIGEgc2VyaWFsIHBvcnQgb24gdGhlIGNvbXB1dGVyIHdoZXJlCi0gICBLZXJtaXQg aXMgcnVubmluZzogU0VUIFNQRUVELCBTRVQgRkxPVywgU0VUIFBBUklUWSwgU0VUIFNUT1AtQklU UywgU0hPVwotICAgQ09NTSwgV0FJVCwgU0VUIENBUlJJRVItV0FUQ0gsIHRoZSBtb2RlbS1zaWdu YWwgdmFyaWFibGVzLCBzZW5kaW5nCi0gICBCcmVhaywgYW5kIHNvIG9uLCBhcHBseSB0byB0aGUg Y29ubmVjdGlvbiBiZXR3ZWVuIHRoZSB0ZXJtaW5hbCBzZXJ2ZXIKLSAgIGFuZCB0aGUgbW9kZW0u Ci0KLSAgIEZvciBleGFtcGxlLCB1c2luZyBhIENpc2NvIEFjY2VzcyBTZXJ2ZXIgMjUwOSwgd2hl cmUgc3BlY2lmeWluZyBhIFRDUAotICAgcG9ydCBpbiB0aGUgNjAwMCdzIHNlbGVjdHMgYSBzZXJp YWwgcG9ydCB0aGF0IGNhbiBiZSB1c2VkIGZvciBkaWFsaW5nCi0gICBvdXQ6Ci0KLSAgc2V0IGhv c3QgeHh4IDYwMDEgICAgICA7IHh4eCBpcyB0aGUgSVAgaG9zdG5hbWUgb3IgYWRkcmVzcyBvZiB0 aGUgc2VydmVyCi0gIChsb2cgaW4gaWYgbmVjZXNzYXJ5KSAgOyBXaXRoIGEgc2NyaXB0IG9yIGJ5 IGhhbmQKLSAgc2V0IG1vZGVtIHR5cGUgdXNyICAgICA7IFRlbGwgS2VybWl0IHdoYXQga2luZCBv ZiBtb2RlbSBpdCBoYXMKLSAgc2V0IHNwZWVkIDU3NjAwICAgICAgICA7IFRoaXMgYWZmZWN0cyB0 aGUgc2VydmVyJ3MgcG9ydAotICBzZXQgZmxvdyBydHMvY3RzICAgICAgIDsgRGl0dG8KLSAgZGlh bCA3NjU0MzIxCi0KLSAgIFRoZSBtb2RlbSBzZXJ2ZXIgbWlnaHQgb3IgbWlnaHQgbm90IHJlcXVp cmUgYSBsb2dpbiBzZXF1ZW5jZS4gSXQgbWlnaHQKLSAgIGFsc28gYWxsb3cgZm9yIGF1dG9tYXRp YyBhdXRoZW50aWNhdGlvbiwgZS5nLiB2aWEgS2VyYmVyb3MgdGlja2V0cy4KLSAgIE5PVEU6IElm IHRoZSBtb2RlbSBzZXJ2ZXIgcmVxdWlyZXMgYSBsb2dpbiBzZXF1ZW5jZSwgdGhlbiBSRURJQUwg bWlnaHQKLSAgIG5vdCB3b3JrIGFzIGV4cGVjdGVkLgotCi0gICBXaGVuIHlvdSBoYXZlIGEgVGVs bmV0IENvbSBQb3J0IGNvbm5lY3Rpb24sIHlvdXIgU0VUIFNQRUVEIGFuZCBTRVQgRkxPVwotICAg b3B0aW9ucyBjaGFuZ2UgYXV0b21hdGljYWxseSB0byByZWZsZWN0IHRoZSBjYXBhYmlsaXRpZXMg b2YgdGhlIHNlcnZlciwKLSAgIHJhdGhlciB0aGFuIHRob3NlIG9mIHlvdXIgbG9jYWwgY29tcHV0 ZXIuCi0KLSAgIFNlZSB0aGUgY29uZmlndXJhdGlvbiBtYW51YWwgZm9yIHlvdXIgc2VydmVyIGZv ciBhZGRpdGlvbmFsCi0gICBpbmZvcm1hdGlvbi4gRm9yIGV4YW1wbGUsIGhvdyB0byBzZXQgdXAg dGhlIHNlcnZlciB0byBkcm9wIHRoZSBUZWxuZXQKLSAgIGNvbm5lY3Rpb24gYXV0b21hdGljYWxs eSB3aGVuIHRoZSB0ZWxlcGhvbmUgY2FsbCBpcyBodW5nIHVwIChlLmcuCi0gICAiYXV0b2hhbmd1 cCIgb24gQ2lzY28gbW9kZWxzKS4KLQotICAgRm9yIGEgTGludXgtYmFzZWQgVGVsbmV0IENvbS1Q b3J0IHNlcnZlciwgY2xpY2sgdGhlIFNyZWRpcmQgbGluazoKLQotICAgWyBbNTc1XVRvcCBdIFsg WzU3Nl1Db250ZW50cyBdIFsgWzU3N11TcmVkaXJkIF0gWyBbNTc4XUMtS2VybWl0IEhvbWUgXQot ICAgWyBbNTc5XUtlcm1pdCBIb21lIF0KLQotMTUuIENPUElORyBXSVRIIEJST0tFTiBLRVJNSVQg UEFSVE5FUlMKLQotICAgVGhlcmUgYXJlIGxvdHMgb2YgZmF1bHR5IEtlcm1pdCBwcm90b2NvbCBp bXBsZW1lbnRhdGlvbnMgb3V0IHRoZXJlLAotICAgZm91bmQgbWFpbmx5IGluIDNyZC1wYXJ0eSBw cm9kdWN0cyByYW5naW5nIGZyb20gY29tbXVuaWNhdGlvbnMgc29mdHdhcmUKLSAgIHBhY2thZ2Vz IHRvIGZpbGUtdHJhbnNmZXIgZnVuY3Rpb25zIGVtYmVkZGVkIHdpdGhpbiBkZXZpY2VzLiBUaGlz IHRvcGljCi0gICBpcyBjb3ZlcmVkIFs1ODBdSEVSRSBmb3IgQy1LZXJtaXQgNy4wLCBidXQgQy1L ZXJtaXQgOC4wIGFkZHMgc29tZQotICAgYWRkaXRpb25hbCB0cmlja3MuCi0KLSAgIFNFVCBBVFRS SUJVVEUgUkVDT1JELUZPUk1BVCB7IE9OLCBPRkYgfQotICAgICAgICAgIEFsbG93cyBjb250cm9s IG9mIHRoZSBLZXJtaXQncyBSZWNvcmQtRm9ybWF0IGF0dHJpYnV0ZS4gU2V0IHRoaXMKLSAgICAg ICAgICB0byBPRkYgaW4gY2FzZSBpbmNvbWluZyBmaWxlIGFyZSByZWZ1c2VkIGR1ZSB0byB1bmtu b3duIG9yCi0gICAgICAgICAgaW52YWxpZCByZWNvcmQgZm9ybWF0cyBpZiB5b3Ugd2FudCB0byBh Y2NlcHQgdGhlIGZpbGUgYW55d2F5LgotCi0gICBTRVQgQVRUUklCVVRFUyBPRkYKLSAgICAgICAg ICBUaGlzIGlzIG5vdCBhIG5ldyB0cmljaywgYnV0IGl0IHdhcyByZWNlbnRseSBkaXNjb3ZlcmVk IHRoYXQgdGhlCi0gICAgICAgICAgS2VybWl0IGltcGxlbWVudGF0aW9uIGVtYmVkZGVkIHdpdGhp biBhIGNlcnRhaW4ga2luZCBvZgotICAgICAgICAgIHB1bmNoaW5nL2JlbmRpbmcgbWFjaGluZSAo U2FsdmFnbmluaSBpZiB5b3UgbXVzdCBrbm93KSBoYW5ncwotICAgICAgICAgIHVwb24gcmVjZXB0 aW9uIG9mIHN0YW5kYXJkIGZvcm1hdCBLZXJtaXQgYXR0cmlidXRlcyB3aGVuCi0gICAgICAgICAg cmVjZWl2aW5nIGZpbGVzLiBXaGVuIHNlbmRpbmcgZmlsZXMsIGl0IHNlbmRzIGF0dHJpYnV0ZXMg b2YgaXRzCi0gICAgICAgICAgb3duLCBvbmUgcGVyIEEtcGFja2V0LCB3aGljaCBpcyBzbGlnaHRs eSB1bnVzdWFsIGJ1dCBsZWdhbC4gV2hlbgotICAgICAgICAgIHJlY2VpdmluZyBmaWxlcyBmcm9t IEMtS2VybWl0LCBLOTUsIE1TLURPUyBLZXJtaXQsIEtlcm1pdC0zNzAsCi0gICAgICAgICAgZXRj LCBpdCBzaW1wbHkgZXhpdHMgdXBvbiByZWNlcHRpb24gb2YgdGhlIGZpcnN0IEEtcGFja2V0Owot ICAgICAgICAgIGFwcGFyZW50bHkgaXQgd2FzIG5vdCBjb2RlZCBhY2NvcmRpbmcgdG8gdGhlIHBy b3RvY29sCi0gICAgICAgICAgc3BlY2lmaWNhdGlvbiwgd2hpY2ggYWxsb3dzIG11bHRpcGxlIGF0 dHJpYnV0ZXMgcGVyIEEtcGFja2V0LgotICAgICAgICAgIFNvbHV0aW9uOiB0ZWxsIHRoZSBmaWxl IHNlbmRlciB0byBTRVQgQVRUUklCVVRFUyBPRkYuCi0KLSAgIFNFVCBTRU5EIEktUEFDS0VUUyB7 IE9OLCBPRkYgfQotICAgICAgICAgIEEgS2VybWl0IHNlcnZlciBpcyBzdXBwb3NlZCB0byBhY2Nl cHQgSS1wYWNrZXRzOyB0aGlzIGlzIGhvdyB0aGUKLSAgICAgICAgICBjbGllbnQgbGV0cyB0aGUg c2VydmVyIGtub3cgaXRzIGNhcGFiaWxpdGllcyBhbmQgcHJlZmVyZW5jZXMKLSAgICAgICAgICBi ZWZvcmUgc2VuZGluZyBhIGNvbW1hbmQuIEFwcGFyZW50bHkgdGhlcmUgaXMgYXQgbGVhc3Qgb25l Ci0gICAgICAgICAgS2VybWl0IHNlcnZlciBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgbm90IGFj Y2VwdCBJLXBhY2tldHMsIGFuZAotICAgICAgICAgIGRvZXMgbm90IHByb3Blcmx5IHJlc3BvbmQg d2l0aCBhbiBFcnJvciBwYWNrZXQgaWYgaXQgZ2V0cyBvbmUuCi0gICAgICAgICAgVG8gZ2V0IGFy b3VuZCBzdWNoIHNpdHVhdGlvbnMgaW4gQy1LZXJtaXQgOC4wLCB5b3UgY2FuIHVzZSBTRVQKLSAg ICAgICAgICBTRU5EIEktUEFDS0VUUyBPRkYgdG8gaW5oaWJpdCB0aGUgc2VuZGluZyBvZiBJIHBh Y2tldHMuIEluIHRoaXMKLSAgICAgICAgICBjYXNlLCB0aGUgY2xpZW50IG11c3QgYmUgYWJsZSB0 byBhZGp1c3QgdG8gdGhlIHNlcnZlcidzCi0gICAgICAgICAgY29uZmlndXJhdGlvbiwgcmF0aGVy IHRoYW4gdGhlIG90aGVyIHdheSBhcm91bmQgYXMgd2UgYXJlIHVzZWQKLSAgICAgICAgICB0by4K LQotICAgU0VUIFBST1RPQ09MIEtFUk1JVCB7fSB7fSB7fQotICAgICAgICAgIEMtS2VybWl0IDYu MCBhbmQgbGF0ZXIgYXV0b21hdGljYWxseSBzZW5kICJhdXRvdXBsb2FkIiBhbmQKLSAgICAgICAg ICAiYXV0b2Rvd25sb2FkIiBjb21tYW5kcyB3aGVuIGluIGxvY2FsIG1vZGUgYW5kIHlvdSBnaXZl IGEgZmlsZQotICAgICAgICAgIHRyYW5zZmVyIGNvbW1hbmQuIEZvciBleGFtcGxlLCBpZiB5b3Ug dGVsbCBrZXJtaXQgdG8gInNlbmQKLSAgICAgICAgICBvb2ZhLnR4dCIsIEtlcm1pdCBzZW5kcyAi a2VybWl0IC1yIiBhbmQgYSBjYXJyaWFnZSByZXR1cm4sIGluCi0gICAgICAgICAgY2FzZSB5b3Ug aGFkIGZvcmdvdHRlbiB0byBzdGFydCBLZXJtaXQgb24gdGhlIGZhciBlbmQgYW5kIHRvbGQKLSAg ICAgICAgICBpdCB0byByZWNlaXZlIGEgZmlsZS4gSWYgYSBLZXJtaXQgcHJvZ3JhbSBoYWQgYWxy ZWFkeSBiZWVuCi0gICAgICAgICAgc3RhcnRlZCBvbiB0aGUgZmFyIGVuZCwgaXQgc2hvdWxkIGhh cm1sZXNzbHkgYWJzb3JiIHRoaXMgc3RyaW5nLgotICAgICAgICAgIEhvd2V2ZXIsIHNvbWUgS2Vy bWl0IHByb2dyYW1zIHZpb2xhdGUgdGhlIEtlcm1pdCBwcm90b2NvbAotICAgICAgICAgIGRlZmlu aXRpb24gYW5kIHRyZWF0IHN1Y2ggc3RyaW5ncyBhcyBLZXJtaXQgcGFja2V0cyBldmVuIHRob3Vn aAotICAgICAgICAgIHRoZXkgYXJlIG5vdC4gSW4gc3VjaCBjYXNlcywgZ2l2ZSB0aGlzIGNvbW1h bmQgdG8gc2V0IHRoZSBLZXJtaXQKLSAgICAgICAgICBwcm90b2NvbCBhdXRvdXBsb2FkIGFuZCBk b3dubG9hZCBzdHJpbmdzIHRvIG5vdGhpbmcsIHdoaWNoIHRlbGxzCi0gICAgICAgICAgS2VybWl0 IG5vdCB0byBzZW5kIHRoZW0uIChUaGlzIGlzIG5vdCBhIG5ldyBmZWF0dXJlLCBidXQgaXQgd2Fz Ci0gICAgICAgICAgbm90IHByZXZpb3VzbHkgaW5jbHVkZWQgaW4gdGhlICJDb3BpbmciIHNlY3Rp b24gb2YgdGhlCi0gICAgICAgICAgZG9jdW1lbnRhdGlvbi4pCi0KLSAgIFsgWzU4MV1Ub3AgXSBb IFs1ODJdQ29udGVudHMgXSBbIFs1ODNdQy1LZXJtaXQgSG9tZSBdIFsgWzU4NF1LZXJtaXQKLSAg IEhvbWUgXQotCi0xNi4gTkVXIENPTU1BTkQtTElORSBPUFRJT05TCi0KLSAgIGtlcm1pdCAtaCBO b3cgcHJpbnRzIGEgY29tcGxldGUgbGlzdGluZyBvZiBpdHMgY29tbWFuZC1saW5lIG9wdGlvbnMs Ci0gICByYXRoZXIgdGhhbiBhbiBhYmJyZXZpYXRlZCBsaXN0IHNxdWVlemVkIGludG8gYSAyNHg4 MCBzcGFjZS4KLQotICAgLWRkICAgICAgICAgICAgICBEZWJ1ZywgbGlrZSAtZCBidXQgYWRkcyB0 aW1lc3RhbXBzCi0gICAtLXZlcnNpb24gIFNob3dzIEMtS2VybWl0IHZlcnNpb24gbnVtYmVyLgot ICAgLS1ub3Blcm1zICBFcXVpdmFsZW50IHRvIFNFVCBBVFRSSUJVVEUgUFJPVEVDVElPTiBPRkYu Ci0KLSAgIEtlcm1pdCBub3cgYWNjZXB0cyBhIHNlbGVjdGlvbiBvZiBVUkxzIChVbml2ZXJzYWwg UmVzb3VyY2UgTG9jYXRvcnMpIGFzCi0gICBpdHMgZmlyc3QgY29tbWFuZC1saW5lIGFyZ3VtZW50 LiBUaGVzZSBhcmU6Ci0KLSAgIHRlbG5ldDpob3N0bmFtZQotICAgICAgICAgIE1ha2VzIGEgVGVs bmV0IGNvbm5lY3Rpb24gdG8gdGhlIGdpdmVuIGhvc3QgKElQIGhvc3RuYW1lIG9yCi0gICAgICAg ICAgYWRkcmVzcykuCi0KLSAgIGZ0cDovL1t1c2VyWzpwYXNzd29yZF1AXWhvc3RuYW1lWy9wYXRo Li4uXQotICAgICAgICAgIE1ha2VzIGFuIEZUUCBjb25uZWN0aW9uIHRvIHRoZSBnaXZlbiBob3N0 IChJUCBob3N0bmFtZSBvcgotICAgICAgICAgIGFkZHJlc3MpLiBJZiBhIHVzZXJuYW1lIGlzIGdp dmVuLCBLZXJtaXQgdHJpZXMgdG8gbG9nIHlvdSBpbjsgaWYKLSAgICAgICAgICBhIHBhc3N3b3Jk IGlzIGdpdmVuLCBpdCBpcyB1c2VkOyBpZiBub3QsIHlvdSBhcmUgcHJvbXB0ZWQgZm9yCi0gICAg ICAgICAgb25lLiBJZiBubyB1c2VybmFtZSBpcyBnaXZlbiwgYW4gYW5vbnltb3VzIGxvZ2luIGlz IHBlcmZvcm1lZC4KLSAgICAgICAgICBJZiBhIHBhdGhuYW1lIGlzIGluY2x1ZGVkLCBLZXJtaXQg dHJpZXMgdG8gR0VUIHRoZSBnaXZlbiBmaWxlLgotICAgICAgICAgIFNlZSBbNTg1XVNlY3Rpb24g My4xLjMgZm9yIGRldGFpbHMuCi0KLSAgIGZ0cHM6Ly9bdXNlcls6cGFzc3dvcmRdQF1ob3N0bmFt ZVsvcGF0aC4uLl0KLSAgICAgICAgICBNYWtlcyBhIHNlY3VyZSBGVFAgY29ubmVjdGlvbiBvdmVy IFNTTC4KLQotICAgdGVsbmV0czovL1t1c2VyWzpwYXNzd29yZF1AXWhvc3RuYW1lCi0gICAgICAg ICAgTWFrZXMgYSBzZWN1cmUgVGVsbmV0IGNvbm5lY3Rpb24gb3ZlciBTU0wuCi0KLSAgIGtlcm1p dDovL1t1c2VyWzpwYXNzd29yZF1AXWhvc3RuYW1lWy9wYXRoLi4uXQotICAgICAgICAgIE1ha2Vz IGEgY29ubmVjdGlvbiB0byBhbiBbNTg2XUludGVybmV0IEtlcm1pdCBTZXJ2ZXIuCi0KLSAgIGh0 dHA6Ly9bdXNlcls6cGFzc3dvcmRdQF1ob3N0bmFtZVsvcGF0aC4uLl0KLSAgICAgICAgICBNYWtl cyBhIGNvbm5lY3Rpb24gdG8gV2ViIHNlcnZlci4KLQotICAgaHR0cHM6Ly9bdXNlcls6cGFzc3dv cmRdQF1ob3N0bmFtZVsvcGF0aC4uLl0KLSAgICAgICAgICBNYWtlcyBhIGNvbm5lY3Rpb24gdG8g c2VjdXJlIFdlYiBzZXJ2ZXIuCi0KLSAgIFsgWzU4N11Ub3AgXSBbIFs1ODhdQ29udGVudHMgXSBb IFs1ODldQy1LZXJtaXQgSG9tZSBdIFsgWzU5MF1LZXJtaXQKLSAgIEhvbWUgXQotCi0xNy4gTE9H UwotCi0gICBJbiBDLUtlcm1pdCA4LjAsIHdlIG1ha2UgYW4gZWZmb3J0IHRvIGtlZXAgcGFzc3dv cmRzIG91dCBvZiB0aGUgZGVidWcKLSAgIGxvZy4gVGhpcyBjYW4gbmV2ZXIgYmUgMTAwJSBlZmZl Y3RpdmUsIGJ1dCBpdCdzIGJldHRlciB0aGFuIGJlZm9yZSwKLSAgIHdoZW4gdGhlcmUgd2VyZSBu byBwcmVjYXV0aW9ucyBhdCBhbGwuIFdoZW5ldmVyIEtlcm1pdCBrbm93cyBpdCdzCi0gICBwcm9t cHRpbmcgZm9yLCBwYXJzaW5nLCBvciB0cmFuc21pdHRpbmcgYSBwYXNzd29yZCwgaXQgdGVtcG9y YXJpbHkKLSAgIHR1cm5zIG9mZiBsb2dnaW5nIGFuZCB0aGVuIHR1cm5zIGl0IGJhY2sgb24gYWZ0 ZXJ3YXJkcy4gVGhpcyBrZWVwcyB0aGUKLSAgIGRlYnVnIGxvZyBwYXNzd29yZC1mcmVlIGluIG1v c3QgY29tbW9uIGNhc2VzLCBidXQgdGhlcmUgY2FuIGJlIG5vCi0gICBndWFyYW50ZWVzLgotCi0g ICBBcyBub3RlZCBlbHNld2hlcmUsIHRoZSBuZXcgIi1kZCIgY29tbWFuZC1saW5lIG9wdGlvbiBz ZWxlY3RzIGEKLSAgIHRpbWVzdGFtcGVkIGRlYnVnIGxvZyAoZXF1aXZhbGVudCB0byAic2V0IGRl YnVnIHRpbWVzdGFtcHMgb24iLCAibG9nCi0gICBkZWJ1ZyBkZWJ1Zy5sb2ciKS4KLQotICAgQy1L ZXJtaXQgOC4wIGFsc28gc3VwcG9ydHMgYSBuZXcgdGltZXN0YW1wZWQgc2Vzc2lvbiBsb2cgdmlh ICJzZXQKLSAgIHNlc3Npb24tbG9nIHRpbWVzdGFtcGVkLXRleHQiLCAibG9nIHNlc3Npb24iLgot Ci0gICBUaGVyZSBoYXZlIGJlZW4gcmVxdWVzdHMgZm9yIG90aGVyIGtpbmRzIG9mIGxvZ3MsIGZv ciBleGFtcGxlIGEgY29tbWFuZAotICAgbG9nLiBUaGVzZSBtaWdodCBiZSBhZGRlZCBhdCBzb21l IHBvaW50LiBPbmUgcGVyc29uIHdhbnRlZCB0byBiZSBhYmxlCi0gICB0byBsb2cgY29tbWFuZHMg d2l0aCB0aW1lc3RhbXBzLCBidXQgb25seSBjb21tYW5kcyBpc3N1ZWQgYXQgdGhlCi0gICBwcm9t cHQsIG5vdCBjb21tYW5kcyBmcm9tIGZpbGVzIG9yIG1hY3JvcywgYW5kIGFsc28gd2FudGVkIGEg aGVhZGVyCi0gICBsaW5lIGF0IHRoZSBiZWdpbm5pbmcgc2hvd2luZyB0aGUgZGF0ZSwgdXNlciwg YW5kIGhvc3QuIFRoaXMgY2FuIGJlCi0gICBkb25lIGFzIGZvbGxvd3M6Ci0KLSAgLmZpbGVuYW1l IDo9IFx2KGhvbWUpY29tbWFuZHMubG9nICA7IChmb3IgZXhhbXBsZSkKLSAgZm9wZW4gL3dyaXRl IFwlYyBcbShmaWxlbmFtZSkKLSAgaWYgc3VjY2VzcyB7Ci0gICAgICBmd3JpdGUgL2xpbmUgXCVj IFx2KGRhdGUpOiBVc2VyPVx2KHVzZXIpIEhvc3Q9XHYoaG9zdCkKLSAgICAgIGZjbG9zZSBcJWMK LSAgICAgIHNldCBkZWJ1ZyB0aW1lc3RhbXBzIG9uCi0gICAgICBsb2cgZGVidWcge3wgZ3JlcCAi Q01EKFApIiA+PiBcbShmaWxlbmFtZSl9IGFwcGVuZAotICB9Ci0KLSAgIFsgWzU5MV1Ub3AgXSBb IFs1OTJdQ29udGVudHMgXSBbIFs1OTNdQy1LZXJtaXQgSG9tZSBdIFsgWzU5NF1LZXJtaXQKLSAg IEhvbWUgXQotICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KLQotCi0gICAgQy1LZXJtaXQgOC4wIFVwZGF0ZSBOb3Rl cyAvIFs1OTVdVGhlIEtlcm1pdCBQcm9qZWN0IC8gQ29sdW1iaWEKLSAgICBVbml2ZXJzaXR5IC8g MTUgRGVjIDIwMDMgLSAxMyBTZXAgMjAxMAotCi1SZWZlcmVuY2VzCi0KLSAgIDEuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1LwotICAgMi4gbWFpbHRvOmtlcm1pdEBjb2x1bWJpYS5lZHUKLSAgIDMu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gICA0LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvazk1Lmh0bWwKLSAgIDUuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAgIDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3NjcmlwdHMuaHRtbAotICAgNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2N1cnJlbnQuaHRtbAotICAgOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3do YXRzbmV3Lmh0bWwKLSAgIDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9mYXEuaHRt bAotICAxMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3N1cHBvcnQuaHRtbAotICAx MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRz Ci0gIDEyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gIDEz LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotICAxNC4gaHR0cDov L3d3dy5hbWF6b24uY29tL2dwL3Byb2R1Y3QvMTU1NTU4MTY0MT9pZT1VVEY4JnRhZz1hbGVpZG1v cmVsZG9tLTIwJmxpbmtDb2RlPWFzMiZjYW1wPTE3ODkmY3JlYXRpdmU9OTMyNSZjcmVhdGl2ZUFT SU49MTU1NTU4MTY0MQotICAxNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sCi0gIDE2LiBtYWlsdG86a2VybWl0LXN1cHBvcnRAY29sdW1iaWEuZWR1Ci0gIDE3 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvCi0gIDE4LiBodHRwOi8vd3d3Lmtlcm1p dC1wcm9qZWN0Lm9yZy8KLSAgMTkuIGh0dHA6Ly93d3cuY29sdW1iaWEubnljLm55LnVzL2tlcm1p dC8KLSAgMjAuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2YvQ09QWUlORy5UWFQK LSAgMjEuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2YvY2tjbWFpLmMKLSAgMjIu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4dgotICAyMy4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrNjBtYW51YWwuaHRtbAotICAyNC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaTcwLmh0bWwKLSAgMjUuIGZ0cDovL2tl cm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2YvY2tlcm1pdDcwLnR4dAotICAyNi4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwKLSAgMjcuIGZ0cDovL2tlcm1pdC5j b2x1bWJpYS5lZHUva2VybWl0L2YvY2t1a2VyLm5yCi0gIDI4LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvc2VjdXJpdHkuaHRtCi0gIDI5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvdGVsbmV0Lmh0bQotICAzMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Z0 cHNjcmlwdHMuaHRtbAotICAzMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3 ci5odG1sCi0gIDMyLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL2NrY2J3ci50 eHQKLSAgMzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbAotICAz NC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9ja3Vid3IudHh0Ci0gIDM1LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t2YndyLmh0bWwKLSAgMzYuIGZ0cDovL2tl cm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2YvY2t2YndyLnR4dAotICAzNy4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sCi0gIDM4LiBmdHA6Ly9rZXJtaXQuY29sdW1i aWEuZWR1L2tlcm1pdC9mL2NrdWlucy50eHQKLSAgMzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3ZpbnMuaHRtbAotICA0MC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJt aXQvZi9ja3ZpbnMudHh0Ci0gIDQxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tj Y2ZnLmh0bWwKLSAgNDIuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2YvY2tjY2Zn LnR4dAotICA0My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sCi0g IDQ0LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL2NrY3BsbS50eHQKLSAgNDUu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pa3NkLmh0bWwKLSAgNDYuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9za2VybWl0Lmh0bWwKLSAgNDcuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKLSAgNDguIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAgNDkuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gIDUwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDgwLmh0bWwjeDAKLSAgNTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0ODAuaHRtbCN4MQotICA1Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ4MC5odG1sI3gyCi0gIDUzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDgwLmh0bWwjeDIuMQotICA1NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ4MC5odG1sI3gyLjIKLSAgNTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0ODAuaHRtbCN4Mi4yLjEKLSAgNTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0ODAuaHRtbCN4Mi4yLjIKLSAgNTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4Mi4yLjMKLSAgNTguIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4Mi4yLjQKLSAgNTkuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4Mi4yLjUKLSAgNjAuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4Mi4yLjYKLSAgNjEuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4MwotICA2Mi4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjEKLSAgNjMuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4xLjEKLSAgNjQuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4xLjIKLSAgNjUuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4xLjMKLSAgNjYuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4xLjQKLSAgNjcu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4yCi0gIDY4 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMwotICA2 OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjQKLSAg NzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My41Ci0g IDcxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuNS4x Ci0gIDcyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMu NS4yCi0gIDczLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwj eDMuNS4zCi0gIDc0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0 bWwjeDMuNgotICA3NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5o dG1sI3gzLjYuMQotICA3Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4 MC5odG1sI3gzLjYuMgotICA3Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3gzLjYuMwotICA3OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3gzLjcKLSAgNzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0ODAuaHRtbCN4My43LjEKLSAgODAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0ODAuaHRtbCN4My43LjIKLSAgODEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0ODAuaHRtbCN4My44Ci0gIDgyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuOQotICA4My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjEwCi0gIDg0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMTAuMQotICA4NS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjEwLjIKLSAgODYuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4xMC4zCi0gIDg3LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMTEKLSAgODguIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4NAotICA4OS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g1Ci0gIDkwLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDYKLSAgOTEuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4Ni4xCi0gIDkyLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDYuMgotICA5My4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g2LjMKLSAgOTQuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4Ni40Ci0gIDk1LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDYuNQotICA5Ni4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g2LjYKLSAgOTcuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4NwotICA5OC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4Ci0gIDk5LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguMQotIDEwMC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjIKLSAxMDEuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC4zCi0gMTAyLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguNAotIDEwMy4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjUKLSAxMDQuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC42Ci0gMTA1LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguNwotIDEwNi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjgKLSAxMDcu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC45Ci0gMTA4 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguMTAKLSAx MDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC4xMQot IDExMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjEy Ci0gMTExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDgu MTMKLSAxMTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4 OC4xNAotIDExMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1s I3g5Ci0gMTE0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwj eDkuMQotIDExNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1s I3g5LjIKLSAxMTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRt bCN4OS4zCi0gMTE3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0 bWwjeDkuNAotIDExOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5o dG1sI3g5LjUKLSAxMTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAu aHRtbCN4OS42Ci0gMTIwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgw Lmh0bWwjeDkuNwotIDEyMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4 MC5odG1sI3g5LjgKLSAxMjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCN4OS45Ci0gMTIzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjeDkuMTAKLSAxMjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN4OS4xMQotIDEyNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3gxMAotIDEyNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3gxMQotIDEyNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3gxMgotIDEyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3gxMwotIDEyOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3gxNAotIDEzMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3gxNQotIDEzMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3gxNgotIDEzMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3gxNwotIDEzMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3RvcAotIDEzNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQuaHRtbAotIDEzNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0 bWwKLSAxMzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NQot IDEzNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sCi0gMTM4LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDUKLSAxMzkuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4Mi4yCi0gMTQwLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKLSAx NDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4MTUKLSAx NDIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My43Ci0g MTQzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjZnRwZGF0 ZXMKLSAxNDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNm dHBjaGVjawotIDE0NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5o dG1sI2Z0cG5hbWVsaXN0Ci0gMTQ2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjc3J2cmVuYW1lCi0gMTQ3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDgwLmh0bWwjZnRwdmRpcgotIDE0OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ4MC5odG1sI3NldGZ0cHR5cGUKLSAxNDkuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My42Ci0gMTUwLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDE1Ci0gMTUxLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguNwotIDE1Mi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gyLjEKLSAxNTMuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4Mi4yCi0gMTU0LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguMTQKLSAxNTUuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC4xMwotIDE1Ni4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjEzCi0gMTU3LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbAotIDE1OC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sCi0gMTU5LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvc2tlcm1pdC5odG1sCi0gMTYwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDgwLmh0bWwjc2V0bG9jdXMKLSAxNjEuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNsY29tbWFuZHMKLSAxNjIuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNmdHB1c2VyCi0gMTYzLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjc2hvd3ZhcgotIDE2NC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NhbGxlcmlkCi0gMTY1LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDYuNgotIDE2Ni4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gwCi0gMTY3LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMTEKLSAxNjgu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKLSAxNjku IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50cwot IDE3MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDE3MS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSAxNzIuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4MAotIDE3My4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAotIDE3NC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCi0gMTc1LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gMTc2LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDE3Ny4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2s5NS5odG1sCi0gMTc4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvc3NoY2xpZW50Lmh0bWwKLSAxNzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9z a2VybWl0Lmh0bWwKLSAxODAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9za2VybWl0 Lmh0bWwKLSAxODEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zc2hjbGllbi5odG0K LSAxODIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4Mwot IDE4My4gZnRwOi8vZnRwLmlzaS5lZHUvaW4tbm90ZXMvcmZjMTczOC50eHQKLSAxODQuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4Mi4yLjIKLSAxODUuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4Mi4yLjEKLSAxODYu IGZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL3JmYzIzOTYudHh0Ci0gMTg3LiBmdHA6Ly9mdHAu aXNpLmVkdS9pbi1ub3Rlcy9yZmMyNjE2LnR4dAotIDE4OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gyLjIuMwotIDE4OS4gZnRwOi8vZnRwLmlzaS5lZHUv aW4tbm90ZXMvcmZjMjYxNi50eHQKLSAxOTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0ODAuaHRtbCN4OC4xMy43Ci0gMTkxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvc2VjdXJpdHkuaHRtI3g1LjQKLSAxOTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9zZWN1cml0eS5odG0jeDE1Ci0gMTkzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvc2VjdXJpdHkuaHRtI3g2LjIKLSAxOTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9zZWN1cml0eS5odG1sCi0gMTk1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjeDE2Ci0gMTk2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjdG9wCi0gMTk3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjY29udGVudHMKLSAxOTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0Lmh0bWwKLSAxOTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRl eC5odG1sCi0gMjAwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0 bWwjeDMuMQotIDIwMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5o dG1sI3gzLjIKLSAyMDIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAu aHRtbCN4My4zCi0gMjAzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgw Lmh0bWwjeDMuNAotIDIwNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4 MC5odG1sI3gzLjUKLSAyMDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCN4My42Ci0gMjA2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjeDMuNwotIDIwNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3gzLjgKLSAyMDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN4My45Ci0gMjA5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjeDMuMTAKLSAyMTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0ODAuaHRtbCN4My4xMQotIDIxMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L3NlY3VyaXR5Lmh0bQotIDIxMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NlY3Vy aXR5Lmh0bSNzZXJ2ZXJzCi0gMjEzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tj c2V0cy5odG1sCi0gMjE0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvdW5pY29kZS5o dG1sCi0gMjE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pNzAuaHRtI3gx LjUuNAotIDIxNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nhc2UxMC5odG1sCi0g MjE3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDQKLSAy MTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4xMQot IDIxOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Z0cHNjcmlwdHMuaHRtbAotIDIy MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAotIDIy MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2Z0cAotIDIy Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Z0cGNsaWVudC5odG1sCi0gMjIzLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvZnRwc2NyaXB0cy5odG1sCi0gMjI0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gMjI1LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDIyNi4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjEuMQotIDIyNy4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjEuMwotIDIyOC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjEuNAotIDIyOS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjEuMwotIDIzMC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjEuMwotIDIzMS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjIKLSAyMzIuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My41Ci0gMjMzLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuNgotIDIzNC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Z0cHNjcmlwdHMuaHRtbAotIDIzNS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCi0gMjM2LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjZnRwYXV0b2xvZwotIDIzNy4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2Z0cHVzZXIKLSAyMzguIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My44Ci0gMjM5LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuOAotIDI0MC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAotIDI0MS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2Z0cAotIDI0Mi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDI0My4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSAyNDQuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9pYm1faWUuaHRtbAotIDI0NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjEwCi0gMjQ2LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCi0gMjQ3LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjZnRwCi0gMjQ4LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gMjQ5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvaW5kZXguaHRtbAotIDI1MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr NjBtYW51YWwuaHRtbAotIDI1MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3g0LjE3Ci0gMjUyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwKLSAyNTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCN4My42Ci0gMjU0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjeDMuMTEKLSAyNTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN4My4xLjQKLSAyNTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9z ZWN1cml0eS5odG1sCi0gMjU3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjeDMuNwotIDI1OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3gzLjcKLSAyNTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN4OC4xMy40Ci0gMjYwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDgwLmh0bWwjcGVybXN3aXRjaAotIDI2MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ4MC5odG1sI2Z0cGNobW9kCi0gMjYyLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuNi4yCi0gMjYzLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDQKLSAyNjQuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKLSAyNjUuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNmdHAKLSAyNjYuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAyNjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9pbmRleC5odG1sCi0gMjY4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDgwLmh0bWwjeDcKLSAyNjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0ODAuaHRtbCN4My44Ci0gMjcwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDgwLmh0bWwjeDMuOAotIDI3MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrYjIuaHRtCi0gMjcyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgw Lmh0bWwjeDMuMTAKLSAyNzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCN4My4xMAotIDI3NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3gzLjYKLSAyNzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCNzZXRmdHB0eXBlCi0gMjc2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDgwLmh0bWwjdG9wCi0gMjc3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDgwLmh0bWwjZnRwCi0gMjc4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdC5odG1sCi0gMjc5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5k ZXguaHRtbAotIDI4MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3g0LjkKLSAyODEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAu aHRtbCN4My41LjEKLSAyODIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCNlcnJvcmFjdGlvbgotIDI4My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3gxLjUKLSAyODQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4NC43Ci0gMjg1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDEuNgotIDI4Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ4MC5odG1sI3g4LjEzCi0gMjg3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pNzAuaHRtI3gxLjUuNAotIDI4OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaTcwLmh0bQotIDI4OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ4MC5odG1sI3g0Ci0gMjkwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDgwLmh0bWwjeDMuNwotIDI5MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ4MC5odG1sI3gzLjUuMgotIDI5Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ4MC5odG1sI3gzLjcKLSAyOTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0ODAuaHRtbCNlcnJvcmFjdGlvbgotIDI5NC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjUuMgotIDI5NS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2Vycm9yYWN0aW9uCi0gMjk2LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjZnRwZmlsZW5hbWVzCi0gMjk3 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjZnRwcGVybXMK LSAyOTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNmdHB1 bmlxdWUKLSAyOTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRt bCNmdHBmaWxlbmFtZXMKLSAzMDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCNub3RlX3V0YwotIDMwMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ4MC5odG1sI25vdGVfZGF0ZQotIDMwMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjYKLSAzMDMuIGh0dHA6Ly93d3cuYm91bGRlci5uaXN0 Lmdvdi90aW1lZnJlcS9mYXEvZmFxLmh0bSMxMDoKLSAzMDQuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My43Ci0gMzA1LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCi0gMzA2LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjZnRwCi0gMzA3LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gMzA4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvaW5kZXguaHRtbAotIDMwOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3gzLjExCi0gMzEwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pNzAuaHRtI3g0LjMKLSAzMTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbAotIDMxMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3g1Ci0gMzEzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjeDMuNi4zCi0gMzE0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjZnRwZmlsZW5hbWVzCi0gMzE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pNzAuaHRtI3g0LjEKLSAzMTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWk3MC5odG0jeDQuMi4yCi0gMzE3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pNzAuaHRtI3gxLjUuNAotIDMxOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjYuMgotIDMxOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjExCi0gMzIwLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMTEKLSAzMjEuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNzcnZyZW5hbWUKLSAzMjIuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWk3MC5odG0jeDQuMQotIDMyMy4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaTcwLmh0bQotIDMyNC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrYjIuaHRtCi0gMzI1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDgwLmh0bWwjZnRwZmlsZW5hbWVzCi0gMzI2LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuNS4zCi0gMzI3LiBodHRwOi8vd3d3LnByb2Z0 cGQubmV0LwotIDMyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5o dG1sI3RvcAotIDMyOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5o dG1sI2Z0cAotIDMzMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRt bAotIDMzMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSAzMzIu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQotIDMzMy4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3NldHMuaHRtbAotIDMzNC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L3VuaWNvZGUuaHRtbAotIDMzNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrY3NldHMuaHRtbAotIDMzNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrY3NldHMuaHRtbAotIDMzNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3g0Ci0gMzM4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvdXRm OC5odG1sCi0gMzM5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjc2V0cy5odG1s Ci0gMzQwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDQK LSAzNDEuIGZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL3JmYzI2NDAudHh0Ci0gMzQyLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCi0gMzQzLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjZnRwCi0gMzQ0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gMzQ1LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDM0Ni4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAotIDM0Ny4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2Z0cAotIDM0OC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDM0OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2luZGV4Lmh0bWwKLSAzNTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0ODAuaHRtbCN0b3AKLSAzNTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0ODAuaHRtbCNmdHAKLSAzNTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0Lmh0bWwKLSAzNTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5o dG1sCi0gMzU0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvZnRwc2NyaXB0cy5odG1s Ci0gMzU1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMu MgotIDM1Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gz LjIKLSAzNTcuIGZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL3JmYzk1OS50eHQKLSAzNTguIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3NjcmlwdHMuaHRtbAotIDM1OS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAotIDM2MC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2Z0cAotIDM2MS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Z0cHNjcmlwdC5odG1sCi0gMzYyLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gMzYzLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDM2NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjExLjEKLSAzNjUuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4xMS4yCi0gMzY2LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMTEuMwotIDM2Ny4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjExLjQKLSAzNjguIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4xMS41Ci0gMzY5LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gMzcwLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvazk1Lmh0bWwKLSAzNzEuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4xMS41Ci0gMzcyLiBmdHA6Ly9mdHAuaXNpLmVk dS9pbi1ub3Rlcy9yZmM5NTkudHh0Ci0gMzczLiBmdHA6Ly9mdHAuaXNpLmVkdS9pbi1ub3Rlcy9y ZmMyMzg5LnR4dAotIDM3NC4gaHR0cDovL3d3dy5pZXRmLm9yZy9pbnRlcm5ldC1kcmFmdHMvZHJh ZnQtaWV0Zi1mdHBleHQtbWxzdC0xNi50eHQKLSAzNzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9mdHBjbGllbnQuaHRtbAotIDM3Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ4MC5odG1sI3RvcAotIDM3Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ4MC5odG1sI2Z0cAotIDM3OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQuaHRtbAotIDM3OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2lu ZGV4Lmh0bWwKLSAzODAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAu aHRtbCN4MwotIDM4MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5o dG1sI3VjczIKLSAzODIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAu aHRtbCN0b3AKLSAzODMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAu aHRtbCNjb250ZW50cwotIDM4NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQuaHRtbAotIDM4NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwK LSAzODYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AK LSAzODcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250 ZW50cwotIDM4OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAot IDM4OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSAzOTAuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQotIDM5MS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAotIDM5Mi4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCi0gMzkzLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gMzk0LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDM5NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g0Ci0gMzk2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDQKLSAzOTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC4xMgotIDM5OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjEKLSAzOTkuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4MTIKLSA0MDAuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC4xMgotIDQwMS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAotIDQwMi4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCi0gNDAzLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gNDA0LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDQwNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ4MC5odG1sI3g4LjE0Ci0gNDA2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCi0gNDA3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKLSA0MDguIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSA0MDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9pbmRleC5odG1sCi0gNDEwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjeDkKLSA0MTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN0b3AKLSA0MTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCNjb250ZW50cwotIDQxMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQuaHRtbAotIDQxNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4 Lmh0bWwKLSA0MTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRt bCN4OC42Ci0gNDE2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0 bWwjdG9wCi0gNDE3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0 bWwjY29udGVudHMKLSA0MTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 Lmh0bWwKLSA0MTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0g NDIwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCi0g NDIxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVu dHMKLSA0MjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSA0 MjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gNDI0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCi0gNDI1LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKLSA0MjYu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSA0MjcuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gNDI4LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjZmpvaW4KLSA0MjkuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNmc3BsaXQKLSA0MzAuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC4xMAotIDQzMS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAotIDQzMi4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCi0gNDMzLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gNDM0LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDQzNS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g5Ci0gNDM2LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDkKLSA0MzcuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OQotIDQzOC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzCi0gNDM5LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMKLSA0NDAuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4yCi0gNDQxLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMgotIDQ0Mi4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjgKLSA0NDMuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4MwotIDQ0NC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzCi0gNDQ1LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMKLSA0NDYuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4yCi0gNDQ3LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMKLSA0NDguIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC4xMwotIDQ0OS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjEzCi0gNDUwLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDkKLSA0NTEuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC4xMAotIDQ1Mi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjcuNAotIDQ1My4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAotIDQ1NC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCi0gNDU1LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gNDU2LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDQ1Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAotIDQ1OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCi0gNDU5LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gNDYwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvaW5kZXguaHRtbAotIDQ2MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ4MC5odG1sI3RvcAotIDQ2Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCi0gNDYzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdC5odG1sCi0gNDY0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv aW5kZXguaHRtbAotIDQ2NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4 MC5odG1sI3g4LjcKLSA0NjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCN0b3AKLSA0NjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCNjb250ZW50cwotIDQ2OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQuaHRtbAotIDQ2OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0 bWwKLSA0NzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNz Y3JpcHRlZGl0Ci0gNDcxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgw Lmh0bWwjdG9wCi0gNDcyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgw Lmh0bWwjY29udGVudHMKLSA0NzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0Lmh0bWwKLSA0NzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1s Ci0gNDc1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9w Ci0gNDc2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29u dGVudHMKLSA0NzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwK LSA0NzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gNDc5LiBm dHA6Ly9mdHAuaXNpLmVkdS9pbi1ub3Rlcy9yZmMyODIyLnR4dAotIDQ4MC4gZnRwOi8vZnRwLmlz aS5lZHUvaW4tbm90ZXMvcmZjMjgyMi50eHQKLSA0ODEuIGZ0cDovL2Z0cC5pc2kuZWR1L2luLW5v dGVzL3JmYzI4MjIudHh0Ci0gNDgyLiBmdHA6Ly9mdHAuaXNpLmVkdS9pbi1ub3Rlcy9yZmMyODIy LnR4dAotIDQ4My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1s I3RvcAotIDQ4NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1s I2NvbnRlbnRzCi0gNDg1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5o dG1sCi0gNDg2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDQ4 Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjEKLSA0 ODguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKLSA0 ODkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50 cwotIDQ5MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDQ5 MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSA0OTIuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC4yCi0gNDkzLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCi0gNDk0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKLSA0OTUu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSA0OTYuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gNDk3LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDkuOAotIDQ5OC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g5LjgKLSA0OTkuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC4yCi0gNTAwLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCi0gNTAxLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKLSA1MDIuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSA1MDMuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gNTA0LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCi0gNTA1LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKLSA1MDYuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSA1MDcuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gNTA4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDgwLmh0bWwjeDkuOAotIDUwOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ4MC5odG1sI3RvcAotIDUxMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCi0gNTExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gNTEyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvaW5kZXguaHRtbAotIDUxMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3g5LjgKLSA1MTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN4OS44Ci0gNTE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjeDkuNgotIDUxNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3RvcAotIDUxNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI2NvbnRlbnRzCi0gNTE4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdC5odG1sCi0gNTE5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5k ZXguaHRtbAotIDUyMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5o dG1sI3g5LjgKLSA1MjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAu aHRtbCN4OS44Ci0gNTIyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgw Lmh0bWwjdG9wCi0gNTIzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgw Lmh0bWwjY29udGVudHMKLSA1MjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0Lmh0bWwKLSA1MjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1s Ci0gNTI2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9w Ci0gNTI3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29u dGVudHMKLSA1MjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwK LSA1MjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gNTMwLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCi0gNTMxLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKLSA1 MzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSA1MzMuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gNTM0LiBtYWlsdG86dGh1 Y2RhdEBob3RtYWlsLmNvbQotIDUzNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3g5LjkuMgotIDUzNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ4MC5odG1sI3RvcAotIDUzNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCi0gNTM4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdC5odG1sCi0gNTM5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv aW5kZXguaHRtbAotIDU0MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4 MC5odG1sI3RvcAotIDU0MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4 MC5odG1sI2NvbnRlbnRzCi0gNTQyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdC5odG1sCi0gNTQzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRt bAotIDU0NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3Rv cAotIDU0NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2Nv bnRlbnRzCi0gNTQ2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1s Ci0gNTQ3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotIDU0OC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g5LjIKLSA1NDku IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKLSA1NTAu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50cwot IDU1MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDU1Mi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSA1NTMuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4NAotIDU1NC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g0Ci0gNTU1LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCi0gNTU2LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKLSA1NTcuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSA1NTguIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gNTU5LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCi0gNTYwLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKLSA1NjEuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSA1NjIuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gNTYzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDgwLmh0bWwjdG9wCi0gNTY0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKLSA1NjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSA1NjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9pbmRleC5odG1sCi0gNTY3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjeDQKLSA1NjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCN4My43Ci0gNTY5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjeDMuNwotIDU3MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3RvcAotIDU3MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI2NvbnRlbnRzCi0gNTcyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdC5odG1sCi0gNTczLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXgu aHRtbAotIDU3NC4gZnRwOi8vZnRwLmlzaS5lZHUvaW4tbm90ZXMvcmZjMjIxNy50eHQKLSA1NzUu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKLSA1NzYu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50cwot IDU3Ny4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvc3JlZGlyZC8KLSA1NzguIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSA1NzkuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gNTgwLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pNzAuaHRtI3g0LjIyCi0gNTgxLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCi0gNTgyLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKLSA1ODMuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSA1ODQuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gNTg1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMS4zCi0gNTg2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY3Vpa3NkLmh0bWwKLSA1ODcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0ODAuaHRtbCN0b3AKLSA1ODguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0ODAuaHRtbCNjb250ZW50cwotIDU4OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQuaHRtbAotIDU5MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2luZGV4Lmh0bWwKLSA1OTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCN0b3AKLSA1OTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCNjb250ZW50cwotIDU5My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQuaHRtbAotIDU5NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0 bWwKLSA1OTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCgpkaWZm IC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2VybWl0OTAu dHh0IGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2VybWl0OTAudHh0 CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGY2ZWUzLi4wMDAwMDAwCi0tLSBhL2Nr ZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tlcm1pdDkwLnR4dAorKysgL2Rl di9udWxsCkBAIC0xLDIxNTIgKzAsMCBAQAotCi0gICBbMV1UaGUgQ29sdW1iaWEgQ3Jvd24gVGhl IEtlcm1pdCBQcm9qZWN0IHwgQ29sdW1iaWEgVW5pdmVyc2l0eQotICAgNjEyIFdlc3QgMTE1dGgg U3RyZWV0LCBOZXcgWW9yayBOWSAxMDAyNSBVU0EgbyBbMl1rZXJtaXRAY29sdW1iaWEuZWR1Ci0g ICAuLi5zaW5jZSAxOTgxCi0gICBbM11Ib21lIFs0XUtlcm1pdCA5NSBbNV1DLUtlcm1pdCBbNl1T Y3JpcHRzIFs3XUN1cnJlbnQgWzhdTmV3IFs5XUZBUQotICAgWzEwXVN1cHBvcnQKLQotCi0gICAg ICBbMTFdQ0xJQ0sgSEVSRSB0byByZWFkIGFib3V0IHNvbWUgb2YgdGhlc2UgaXRlbXMuCi0KLSAg ICAgICAgICBbMTJdVGFibGUgb2YgcGxhdGZvcm1zICAgWzEzXUJvb2s6IFVzaW5nIEMtS2VybWl0 ICAgWzE0XURvd25sb2FkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEMtS2VybWl0IDkuMAotCi1DLUtlcm1pdCA5LjAgVXBkYXRl IE5vdGVzCi0KLSAgIE5vdGU6ICAgQy1LZXJtaXQgOS4wLjMwMSBjb250YWlucyBhIGNvcnJlY3Rp b24gdGhhdCBhcHBsaWVzIG9ubHkgdG8KLSAgIFNvbGFyaXMgMTAgYW5kIDExLgotICAgICBDLUtl cm1pdCA5LjAuMzAyIGNvbnRhaW5zIGNvcnJlY3Rpb25zIHRoYXQgYXBwbHkgb25seSB0byBGcmVl QlNEIDgKLSAgIGFuZCA5LgotICAgICAqIFsxNV1MYXJnZSBGaWxlcwotICAgICAqIFsxNl1Ib3cg dG8gVGVzdCBMYXJnZS1GaWxlIFRyYW5zZmVyCi0gICAgICogWzE3XUFyaXRobWV0aWMgd2l0aCBM YXJnZSBJbnRlZ2VycwotICAgICAqIFsxOF1GT1JDRS0zIFBhY2tldCBQcm90b2NvbAotICAgICAq IFsxOV1WYXJpYWJsZSBFdmFsdWF0aW9uCi0KLSAgICAgKiBbMjBdVGhlIFJFTkFNRSBDb21tYW5k IFlvdSBBbHdheXMgV2FudGVkCi0gICAgICogWzIxXU90aGVyIE5ldyBGZWF0dXJlcwotICAgICAq IFsyMl1JbmNvbXBhdGliaWxpdGllcwotICAgICAqIFsyM11XaGF0J3MgTm90IEluIEMtS2VybWl0 IDkuMAotICAgICAqIFsyNF1BbmQgYSBMb29zZSBFbmQKLQotICAgICAqIFsyNV1EZW1vbnN0cmF0 aW9uOiBTZWN1cmUgUE9QIG1haWwgZmV0Y2hlcgotICAgICAqIFsyNl1EZW1vbnN0cmF0aW9uOiBI UCBTd2l0Y2ggQ29uZmlndXJhdGlvbiBCYWNrdXAKLSAgICAgKiBbMjddRGVtb25zdHJhdGlvbjog SFAgaUxPIEJsYWRlIENvbmZpZ3VyYXRpb24KLSAgICAgKiBbMjhdRGVtb25zdHJhdGlvbjogSUJN L1JvbG0vU2llbWVucyBDQlggTWFuYWdlbWVudAotICAgICAqIFsyOV1EZW1vbnN0cmF0aW9uOiBD U1YgYW5kIFRTViBGaWxlcwotICAgICAqIFszMF1EZW1vbnN0cmF0aW9uIFNjcmlwdHMgZm9yIFdl Ym1hc3RlcnMKLQotICAgVGhpcyBpcyB0aGUgdGhpcmQgc3VwcGxlbWVudCB0byBbMzFdVXNpbmcg Qy1LZXJtaXQsIFNlY29uZCBFZGl0aW9uLiBJCi0gICBhcG9sb2dpemUgZm9yIHRoZSBzY2F0dGVy ZWQgbmF0dXJlIG9mIHRoZSBpbmZvcm1hdGlvbiBhbmQgSSBob3BlIEkgY2FuCi0gICBvcmdhbml6 ZSBpdCBhbmQgZ2F0aGVyIGl0IGFsbCBpbnRvIG9uZSBwbGFjZSBmb3IgZWFzeSBhbmQgZGVmaW5p dGl2ZQotICAgcmVmZXJlbmNlIHNvbWUgZGF5LiBJdCdzIGEgYmlnIGpvYiBzbyBpdCBkZXBlbmRz IG9uIHRoZSBkZW1hbmQuIEZvciB0aGUKLSAgIHRpbWUgYmVpbmcgdGhlIGRlZmluaXRpdmUgcmVm ZXJlbmNlIGFuZCBpbnRyb2R1Y3Rpb24gaXMgdGhlIGJvb2sgKHdoaWNoCi0gICBpcyBub3cgYXZh aWxhYmxlIGFsc28gaW4gYSBbMzJdS2luZGxlIEVkaXRpb24pLCBwbHVzIHRoZSBbMzNdQy1LZXJt aXQKLSAgIDcuMCB1cGRhdGUsIFszNF1DLUtlcm1pdCA4LjAgdXBkYXRlLCBhbmQgbm93IHRoaXMg b25lLiBQbHVzIHRvbnMgb2YKLSAgIG90aGVyIHdlYiBwYWdlcyBvbiB0aGlzIHNpdGUsIHNhbXBs ZSBzY3JpcHQgcHJvZ3JhbXMsIGFuZCBzbyBvbi4KLQotICAgSW4gdmVyc2lvbiA2LjAsIEMtS2Vy bWl0IHdhcyBhIHByZXR0eSBwb3dlcmZ1bCBhbmQgZmxleGlibGUKLSAgIGNvbW11bmljYXRpb24g cHJvZ3JhbSB3aXRoIHNjcmlwdGluZyBjYXBhYmlsaXRpZXMuIEJ5IHZlcnNpb24gOS4wLCBJJ2QK LSAgIGxpa2UgdG8gdGhpbmsgb2YgaXQgbW9yZSBhcyBhIHNjcmlwdGluZyBsYW5ndWFnZSB3aXRo IGJ1aWx0LWluCi0gICBjb21tdW5pY2F0aW9ucy4gWW91IGNhbiBnZXQgYW4gaWRlYSBvZiB0aGUg a2luZHMgb2YgcHJvZ3JhbXMgeW91IGNhbgotICAgd3JpdGUgaW4gS2VybWl0IGxhbmd1YWdlIFsz NV1oZXJlLiBZb3UgY2FuIGRldmVsb3AgcHJvZ3JhbXMgcXVpY2tseQotICAgYmVjYXVzZSBpdCdz IGFuIGludGVyYWN0aXZlIHByb2dyYW0sIG5vdCBhIGNvbXBpbGVyLiBUaGUgc2NyaXB0aW5nCi0g ICBsYW5ndWFnZSBpcyB0aGUgY29tbWFuZCBsYW5ndWFnZS4gS2luZCBvZiBsaWtlIHRoZSBVbml4 IHNoZWxsIGJ1dAotICAgInNvbWV3aGF0IiBsZXNzIGNyeXB0aWMsIGluY2x1ZGluZyBjb25jZXB0 cyBub3Qgb25seSBmcm9tIEMgYnV0IGZyb20KLSAgIFBML0ksIFNub2JvbCwgTElTUCwgQmxpc3Ms IGFuZCBTbWFsbHRhbGsuIFRoZSBsYW5ndWFnZSBpdHNlbGYgaXMgYnVpbHQKLSAgIHVwb24gdGhl IGNvbW1hbmQgbGFuZ3VhZ2Ugb2YgdGhlIG11Y2gtbG92ZWQgWzM2XURFQ1NZU1RFTS0yMCBmcm9t IHRoZQotICAgMTk3MHMgYW5kIDgwcywgdGhlIENsaXBwZXIgU2hpcCBvZiB0aGUgVGV4dCBFcmEu IChUZXh0IGlzIG5vdCBhIGJhZAotICAgd29yZC4gVGhvc2Ugb2YgdXMgd2hvIGNhbiB0b3VjaC10 eXBlIGFuZCB3aG8gYXJlIHByb2ZpY2llbnQgaW4KLSAgIHRleHQtYmFzZWQgY29tcHV0aW5nIGVu dmlyb25tZW50cyBsaWtlIFVuaXggc2hlbGwgb3IgVk1TIERDTCBhcmUgbGlrZWx5Ci0gICB0byBi ZSBvcmRlcnMgb2YgbWFnbml0dWRlIG1vcmUgcHJvZHVjdGl2ZSB0aGFuIHVzZXJzIG9mIEdVSXMu KQotCi0gICBUaGFua3MgdG8gKGF0IGxlYXN0KSBKZWZmIEFsdG1hbiwgV2lsbGlhbSBCYWRlciwg SWFuIEJlY2t3aXRoLCBOZWxzb24KLSAgIEJlZWJlLCBHZXJyeSBCZWxhbmdlciwgSm9vcCBCb29u ZW4sIFJvYiBCcm93biwgQ2hyaXN0aWFuIENvcnRpLCBBbGV4ZXkKLSAgIERva3VjaGFldiwgSm9o biBEdW5sYXAsIFBldGVyIEVpY2hob3JuLCBDYXJsIEZyaWVkYmVyZywgVGVycnkgS2VubmVkeSwK LSAgIEfvv71udGVyIEtuYXVmLCBKYXNvbiBMZWhyLCBBcnRodXIgTWFyc2gsIExld2lzIE1jQ2Fy dGh5LCBHYXJ5IE1pbGxzLCBFZAotICAgUmF2aW4sIEpvbmF0aGFuIFJlYW1zLCBNaWtlIFJlY2h0 bWFuLCBNYXJrIFNhcGlybywgU3RldmVuIFNjaHdlZGEKLSAgIChTTVMpLCBLaW5qYWwgU2hhaCwg TWljaGFlbCBTb2tvbG92LCBBbmR5IFRhbmVuYmF1bSwgU2V0aCBUaGVyaWF1bHQsCi0gICBaYWNo IEEuIFRob21hcywgTWFydGluIFZvcmzvv71uZGVyLCBhbmQgRXJpYyBXZWF2ZXIgZm9yIGFzc2lz dGFuY2UsIGFuZAotICAgdG8gSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgZm9yIHN1cHBvcnQuCi0K LSAgICAgLSBGcmFuayBkYSBDcnV6ICAgWzM3XWZkY0Bjb2x1bWJpYS5lZHUsIDMwIEp1bmUgMjAx MQotCi0gICBQLlMuIEl0IG9jY3VycmVkIHRvIG1lIGp1c3QgYmVmb3JlIHRoZSBlbmQgb2YgdGhl IGRheSB0aGF0IG1heWJlIEkKLSAgIHNob3VsZCBiYWNrIHVwIHRoZSBLZXJtaXQgd2Vic2l0ZSBv biBEVkQsIGp1c3QgaW4gY2FzZS4gVXNpbmcKLSAgIFszOF1LZXJtaXQgOTUgb24gdGhlIGRlc2t0 b3Agb3ZlciBhbiBTU0ggY29ubmVjdGlvbiB0byB0aGUgVW5peCBmaWxlCi0gICBzeXN0ZW0gd2hl cmUgdGhlIHdlYnNpdGUgcmVzaWRlcywgSSBtYWRlIGEgZnJlc2ggZGlyZWN0b3J5IG9uIHRoZSBQ QywKLSAgIENEJ2QgdG8gaXQsIGFuZCBvbiBVbml4IGNkJ2QgdG8gdGhlIFdlYnNpdGUgZGlyZWN0 b3J5LCBhbmQgdG9sZAotICAgQy1LZXJtaXQgOS4wIHRvOgotCi1DLUtlcm1pdD4gc2VuZCAvcmVj dXJzaXZlIC9kb3RmaWxlcyAvbm9iYWNrdXAgKgotCi0gICBhbmQgaXQgcmUtY3JlYXRlZCB0aGUg d2Vic2l0ZSBkaXJlY3RvcnkgdHJlZSBpbiB0aGUgUEMgZGlyZWN0b3J5LCB0ZXh0Ci0gICBmaWxl cyBjb3JyZWN0bHkgY29udmVydGVkIHRvIFdpbmRvd3MgZm9ybWF0IGFuZCBiaW5hcnkgZmlsZXMg Y29ycmVjdGx5Ci0gICBsZWZ0IGFzLWlzLiBUaGUgL2RvdGZpbGVzIHN3aXRjaCBtZWFucyB0byBp bmNsdWRlIGZpbGVzIHN1Y2ggYXMKLSAgIC5odGFjY2VzcyB3aG9zZSBuYW1lcyBzdGFydCB3aXRo IGEgZG90IChwZXJpb2QpLCBhbmQgdGhlIC9ub2JhY2t1cAotICAgc3dpdGNoIG1lYW5zIHRvIHNr aXAgYmFja3VwIGZpbGVzIGNyZWF0ZWQgYnkgRU1BQ3MgKHN1Y2ggYXMKLSAgIGluZGV4Lmh0bWwu fjI0M34pLiBBbmQgdGhlbiBJIGRpZCB0aGUgc2FtZSB3aXRoIHRoZSBGVFAgc2l0ZXMsIGFib3V0 Ci0gICA4R0IgaW4gYWxsLiBXYXRjaGluZyB0aGUgZmlsZS10cmFuc2ZlciBkaXNwbGF5IHdhcyBr aW5kIG9mIGxpa2UgaGF2aW5nCi0gICAzMCB5ZWFycyBvZiBteSBsaWZlIGZsYXNoIGJlZm9yZSBt eSBleWVzIGluIGEgZmV3IG1pbnV0ZXMuIFRoZW4gSQotICAgY29waWVkIHRoZSB0d28gZGlyZWN0 b3JpZXMgdG8gRFZEICh0aGUgRlRQIHNpdGUgaGFkIHRvIGJlIHNwbGl0IG92ZXIgMgotICAgRFZE cykuIFRoZSB3aG9sZSBvcGVyYXRpb24gdG9vayB1bmRlciBoYWxmIGFuIGhvdXIuIFRoZSBkaXJl Y3RvcnkgdHJlZQotICAgb24gdGhlIENEIGlzIGRpcmVjdGx5IHVzYWJsZSBpbiBXaW5kb3dzLCBV bml4LCBvciBhbnkgb3RoZXIgb3BlcmF0aW5nCi0gICBzeXN0ZW0gKHVubGlrZSBpZiBJIGhhZCB0 cmFuc2ZlcnJlZCB0aGUgZmlsZXMgYWxsIGluIGJpbmFyeSBtb2RlIG9yIGFsbAotICAgaW4gdGV4 dCBtb2RlLCBvciBpZiBJIGhhZCBtYWRlLCBzYXksIGEgZ3ppcHBlZCB0YXIgYXJjaGl2ZSBvciBh IHppcAotICAgYXJjaGl2ZSkuIEkgYmVsaWV2ZSB0aGF0LCB0byB0aGlzIGRheSwgS2VybWl0IGlz IHRoZSBvbmx5IHNvZnR3YXJlIHRoYXQKLSAgIGNhbiBkbyB0aGlzLiBJZiBzb21lZGF5IEkgaGF2 ZSB0byB1cGxvYWQgZnJvbSB0aGVzZSBEVkRzIHRvIFVuaXgsIFZNUywKLSAgIG9yIGFueSBvdGhl ciBvcGVyYXRpbmcgc3lzdGVtLCBpdCBjYW4gYmUgZG9uZSBleGFjdGx5IHRoZSBzYW1lIHdheSwK LSAgIHdpdGggYW55IG5lY2Vzc2FyeSBjb252ZXJzaW9ucyBvbiB0ZXh0IGZpbGVzIGRvbmUgYXV0 b21hdGljYWxseSwgYW5kCi0gICBiaW5hcnkgZmlsZXMgbGVmdCBpbnRhY3QsIHJlY3Vyc2l2ZWx5 IHRocm91Z2ggYSB3aG9sZSB2ZXJ5IGxhcmdlCi0gICBkaXJlY3RvcnkgdHJlZS4KLQotV2hhdCdz IE5ldyBpbiBHZW5lcmFsCi0KLSAgIFZlcnkgYnJpZWZseSwgdGhlIG1ham9yIGl0ZW1zOgotICAg ICAqIFszOV1PcGVuIFNvdXJjZSBsaWNlbnNlLgotICAgICAqIFs0MF02NC1iaXQgZmlsZSBhY2Nl c3MgYW5kIHRyYW5zZmVyIGFuZCA2NC1iaXQgaW50ZWdlciBhcml0aG1ldGljCi0gICAgICAgb24g bW9zdCBjb21tb24gcGxhdGZvcm1zLgotICAgICAqIFN1cHBvcnQgZm9yIHJlY2VudCByZWxlYXNl cyBvZiBMaW51eCwgTWFjIE9TIFgsICpCU0QsIGV0YyAoWzQxXXNlZQotICAgICAgIHRhYmxlKS4K LSAgICAgKiBTdXBwb3J0IGZvciBuZXdlciBPcGVuU1NMIHJlbGVhc2VzIHVwIHRvIGFuZCBpbmNs dWRpbmcgMS4wLjBkCi0gICAgICAgKFs0Ml1zZWUgdGFibGUpLgotICAgICAqIFs0M11TdHJlbmd0 aGVuZWQgZXJyb3IgY2hlY2tpbmcgZm9yIGZpbGUgdHJhbnNmZXIgdW5kZXIgZXh0cmVtZWx5Ci0g ICAgICAgaGFyc2ggY29uZGl0aW9ucy4KLSAgICAgKiBbNDRdU2ltcGxpZmllZCBzZW1hbnRpY3Mg Zm9yIHZhcmlhYmxlcyB1c2VkIGluIHNjcmlwdHMuCi0gICAgICogU3VwZXItaGFuZHkgWzQ1XWV4 dGVuc2lvbnMgdG8gdGhlIFJFTkFNRSBjb21tYW5kLgotICAgICAqIE90aGVyIHNjcmlwdGluZyBp bXByb3ZlbWVudHMgaW5jbHVkaW5nIHN1cHBvcnQgZm9yIHJlYWRpbmcgYW5kCi0gICAgICAgd3Jp dGluZyBbNDZdQ1NWIGFuZCBUU1YgZmlsZXMuCi0gICAgICogWzQ3XU1JTUUgY2hhcmFjdGVyLXNl dCBuYW1lcyBhcmUgbm93IHJlY29nbml6ZWQuCi0gICAgICogSW1wcm92ZWQgbG9nZ2luZyBhbmQg ZGVidWdnaW5nIChzZWUgZGVtbyBbNDhdaGVyZSkuCi0gICAgICogTG90cyBtb3JlIGRlc2NyaWJl ZCBvciBsaXN0ZWQgYmVsb3csIGFuZCBbNDldaGVyZS4KLQotT3BlbiBTb3VyY2UgTGljZW5zZQot Ci0gICBDLUtlcm1pdCA5LjAgaGFzIHRoZSBbNTBdUmV2aXNlZCAzLUNsYXVzZSBCU0QgTGljZW5z ZSwgYW4gb3BlbiBzb3VyY2UKLSAgIGxpY2Vuc2UgYXBwcm92ZWQgYnkgT1NJLCB0aGUgWzUxXU9w ZW4gU291cmNlIEluaXRpYXRpdmUuCi0KLUxhcmdlIEZpbGVzCi0KLSAgIEtlcm1pdCBpcywgZmly c3QgYW5kIGZvcmVtb3N0LCBhIGZpbGUtdHJhbnNmZXIgcHJvZ3JhbS4gT25lIG1pZ2h0Ci0gICBl eHBlY3QgaXQgdG8gYmUgYWJsZSB0byB0cmFuc2ZlciBhbnkga2luZCBvZiBmaWxlLCBidXQgdGhh dCBoYXMgYmVlbgotICAgZGVjcmVhc2luZ2x5IHRoZSBjYXNlIGFzIGZpbGUgc2l6ZXMgYmVnYW4g dG8gY3Jvc3MgdGhlIDIgZ2lnYWJ5dGUKLSAgIHRocmVzaG9sZC4KLQotICAgVGhlIGJpZ2dlc3Qg Y2hhbmdlIHNpbmNlIEMtS2VybWl0IDguMC4yMTEgaXMgc3VwcG9ydCBmb3IgbGFyZ2UgZmlsZXMg b24KLSAgIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgdGhlbS4gQSAibGFyZ2UgZmlsZSIgaXMgb25l IHdob3NlIHNpemUgaXMKLSAgIGdyZWF0ZXIgdGhhbiAyXjMxLTEgKDIsMTQ3LDQ4Myw2NDcpIGJ5 dGVzICgyR0ItMSk7IHRoYXQgaXMsIG9uZSB3aG9zZQotICAgc2l6ZSByZXF1aXJlcyBtb3JlIHRo YW4gMzEgYml0cyB0byByZXByZXNlbnQuIEJlZm9yZSBub3csIEtlcm1pdCB3YXMKLSAgIGFibGUg dG8gYWNjZXNzIHN1Y2ggZmlsZXMgb25seSBvbiAxMDAlIDY0LWJpdCBwbGF0Zm9ybXMgc3VjaCBh cyBEaWdpdGFsCi0gICBVbml4LCBsYXRlciBrbm93biBhcyBUcnU2NCBVbml4LiBJbiB0aGUgbmV3 IHJlbGVhc2UsIEtlcm1pdCB0YWtlcwotICAgYWR2YW50YWdlIG9mIHRoZSBYL09wZW4gU2luZ2xl IFVOSVggU3BlY2lmaWNhdGlvbiBWZXJzaW9uIDIgKFVOSVggOTgpCi0gICBMYXJnZSBGaWxlIFN1 cHBvcnQgKExGUykgc3BlY2lmaWNhdGlvbiwgd2hpY2ggYWxsb3dzIDMyLWJpdCBwbGF0Zm9ybXMK LSAgIHRvIGNyZWF0ZSwgYWNjZXNzLCBhbmQgbWFuYWdlIGZpbGVzIGxhcmdlciB0aGFuIDJHQi4K LQotICAgQWNjb21tb2RhdGluZyBsYXJnZSBmaWxlcyByZXF1aXJlZCBjb2RlIGNoYW5nZXMgaW4g bWFueSBtb2R1bGVzLAotICAgYWZmZWN0aW5nIG5vdCBvbmx5IGZpbGUgdHJhbnNmZXIsIGJ1dCBh bHNvIGZpbGUgbWFuYWdlbWVudCBmdW5jdGlvbnMKLSAgIGZyb20gZGlyZWN0b3J5IGxpc3Rpbmdz IHRvIGxvY2FsIGZpbGUgbWFuaXB1bGF0aW9uLCBwbHVzIHRoZSB1c2VyCi0gICBpbnRlcmZhY2Ug aXRzZWxmIHRvIGFsbG93IGVudHJ5IGFuZCBkaXNwbGF5IG9mIGxhcmdlIG51bWJlcnMuIEFsbCB0 aGlzCi0gICBoYWQgdG8gYmUgZG9uZSBpbiBhIHdheSB0aGF0IHdvdWxkIG5vdCBhZmZlY3QgcHVy ZSAzMi1iaXQgYnVpbGRzIG9uCi0gICBwbGF0Zm9ybXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBsYXJn ZSBmaWxlcy4gTGFyZ2UgZmlsZSBzdXBwb3J0IGlzCi0gICBzdW1tYXJpemVkIGluIHRoZSBbNTJd VGFibGUgb2YgUGxhdGZvcm1zOyBlbnRyaWVzIGluIFllbGxvdyAoMzItYml0Ci0gICBidWlsZHMg dGhhdCBzdXBwb3J0IDY0LWJpdCBpbnRlZ2VycykgYW5kIEdyZWVuICg2NC1iaXQgYnVpbGRzKSBz dXBwb3J0Ci0gICBsYXJnZSBmaWxlcy4KLQotICAgTm90ZSB0aGF0IFZNUyBDLUtlcm1pdCBhbmQg S2VybWl0IDk1IGZvciBXaW5kb3dzIGhhdmUgYWx3YXlzIGJlZW4gYWJsZQotICAgdG8gdHJhbnNm ZXIgbGFyZ2UgZmlsZXMuIEhvd2V2ZXIgdGhlaXIgdXNlciBpbnRlcmZhY2UgdXNlZCAzMi1iaXQK LSAgIGludGVnZXJzIGZvciBzdGF0aXN0aWNzIGFuZCB0aGUgZmlsZSB0cmFuc2ZlciBkaXNwbGF5 LiBJbiBDLUtlcm1pdCA5LjAKLSAgIEFscGhhLjAzLCBWTVMgQy1LZXJtaXQgb24gNjQtYml0IHBs YXRmb3JtcyAoQWxwaGEgYW5kIEl0YW5pdW0pIHNob3VsZAotICAgbm93IGdpdmUgY29ycmVjdCBz dGF0aXN0aWNzIGFuZCBwcm9ncmVzcyBkaXNwbGF5cy4gKFdlJ2xsIHNlZSBhYm91dAotICAgS2Vy bWl0IDk1IGxhdGVyLikKLQotSG93IHRvIFRlc3QgTGFyZ2UtRmlsZSBUcmFuc2ZlcgotCi0gICBT ZXZlcmFsIG1ldGhvZHMgYXJlIGF2YWlsYWJsZSBmb3IgdGVzdGluZyBsYXJnZS1maWxlIHRyYW5z ZmVyczoKLSAgICAgKiBCeSB0cmFuc2ZlcnJpbmcgYSByZWFsIGZpbGUgdGhhdCBpcyBtb3JlIHRo YW4gMjE0NzQ4MzY0OCBieXRlcyBsb25nCi0gICAgICAgKGEgZmlsZSB3aG9zZSBsZW5ndGggcmVx dWlyZXMgbW9yZSB0aGFuIDMxIGJpdHMgdG8gZXhwcmVzcyk7IG9yIHRvCi0gICAgICAgYmUgdG90 YWxseSBzdXJlLCB0aGF0IGlzIGxvbmdlciB0aGFuIDQyOTQ5NjcyOTYgYnl0ZXMgKDMyIGJpdHMg b3IKLSAgICAgICBtb3JlKS4gT3IgdG8gYmUgZG91YmxlIHN1cGVyIHN1cmUsIGxvbmdlciB0aGFu IDg1ODk5MzQ1OTIgKDMzCi0gICAgICAgYml0cykuCi0gICAgICogSWYgeW91IGRvbid0IGhhdmUg c3VjaCBhIGZpbGUgb3IgdGhlcmUgaXMgbm90IHN1ZmZpY2llbnQgZGlzayBzcGFjZQotICAgICAg IGZvciBzdWNoIGEgZmlsZSwgeW91IGNhbiBjcmVhdGUgYSBzcGVjaWFsIGtpbmQgb2YgZmlsZSB0 aGF0IHRha2VzCi0gICAgICAgdXAgb25lIGJsb2NrIG9uIHRoZSBkaXNrIGJ1dCBhcHBlYXJzIHRv IGJlIDQuM0dCIGxvbmcgYnkgY29tcGlsaW5nCi0gICAgICAgYW5kIHJ1bm5pbmcgWzUzXVRISVMg QyBQUk9HUkFNIG9uIExpbnV4LCBTb2xhcmlzLCBIUC1VWCwgb3Igb3RoZXIKLSAgICAgICBVbml4 IHBsYXRmb3JtIHRoYXQgc3VwcG9ydHMgbGFyZ2UgZmlsZXMuIEtlcm1pdCBvciBGVFAgb3IgYW55 IG90aGVyCi0gICAgICAgZmlsZSB0cmFuc2ZlciBwcm9ncmFtIHdpbGwgdHJhbnNmZXIgdGhlIHJl c3VsdCAoQklHRklMRSkgaW4gc3VjaCBhCi0gICAgICAgd2F5IGFzIHRvIGFjdHVhbGx5IHB1dCA0 LjNHQiAob3Igb3RoZXIgZGVzaXJlZCBzaXplOyBzZWUgc291cmNlKSBvbgotICAgICAgIHRoZSB3 aXJlLgotICAgICAqIFlvdSBjYW4gdXNlIEtlcm1pdCdzIENBTElCUkFURSBmZWF0dXJlIHRvIHRy YW5zZmVyIGEgbGFyZ2UgZmlsZQotICAgICAgIHRoYXQgZG9lc24ndCBleGlzdC4gQXQgdGhlIHJl Y2VpdmVyLCB1c2UgUkVDRUlWRSAvQ0FMSUJSQVRFLiBBdCB0aGUKLSAgICAgICBzZW5kZXIsIHVz ZSBTRU5EIC9DQUxJQlJBVEU6bGVuZ3RoLCBlLmcuOgotCi0gICAgIChBdCByZW1vdGUga2VybWl0 Li4uKQotICAgICAkIGtlcm1pdCAtWQotICAgICBDLUtlcm1pdD4gcmVjZWl2ZSAvY2FsaWJyYXRl Ci0gICAgIChSZXR1cm4gdG8gbG9jYWwga2VybWl0Li4uKQotICAgICBDdHJsLVxjCi0gICAgIEMt S2VybWl0PiBzZW5kIC9jYWxpYnJhdGU6NDMwMDAwMDAwMAotICAgICAgIFRoaXMgc2VuZHMgYSBz aW11bGF0ZWQgZmlsZSA0LjNHQiBpbiBsZW5ndGgsIHRoYXQgZG9lcyBub3QgZXhpc3Qgb24KLSAg ICAgICB0aGUgc2VuZGVyIGFuZCB3aWxsIG5vdCB0YWtlIHVwIGFueSBkaXNrIHNwYWNlIG9uIHRo ZSByZWNlaXZlci4KLSAgICAgICBTRU5EIC9DQUxJQlJBVEU6IGFjY2VwdHMgYmlnIG51bWJlcnMg b25seSBpbiBLZXJtaXQgdmVyc2lvbnMgdGhhdAotICAgICAgIHN1cHBvcnQgdGhlbSAodGhpcyBk b2VzIG5vdCBpbmNsdWRlIEtlcm1pdCA5NSBvbiBXaW5kb3dzKS4gVGhpcwotICAgICAgIG1ldGhv ZCB0ZXN0cyBvbmx5IEtlcm1pdCdzIGFiaWxpdHkgdG8gZXhwcmVzcyBhbmQgdW5kZXJzdGFuZCBs YXJnZQotICAgICAgIGZpbGUgc2l6ZXMsIGJ1dCBkb2VzIG5vdCB0ZXN0IEtlcm1pdCdzIGZpbGUt c3lzdGVtIGludGVyZmFjZSwgc2luY2UKLSAgICAgICBubyBmaWxlcyBhcmUgaW52b2x2ZWQuCi0K LUFyaXRobWV0aWMgd2l0aCBMYXJnZSBJbnRlZ2VycwotCi0gICBCZWNhdXNlIGxhcmdlIGZpbGUg c3VwcG9ydCByZXF1aXJlcyB0aGUgYXZhaWxhYmlsaXR5IG9mIGEgNjQtYml0IHNpZ25lZAotICAg aW50ZWdlciBkYXRhIHR5cGUsIG90aGVyIGFzcGVjdHMgb2YgQy1LZXJtaXQgd2VyZSBhZGFwdGVk IHRvIHVzZSBpdAotICAgdG9vLCBtb3N0IG5vdGFibHkgS2VybWl0J3MgYWxnZWJyYWljIGV4cHJl c3Npb24gZXZhbHVhdG9yIGFuZCBpdHMKLSAgIFs1NF1TLUV4cHJlc3Npb24gaW50ZXJwcmV0ZXIs IG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IGxhcmdlIGZpbGVzCi0gICAodGhvc2UgbGlz dGVkIGFzIDY0IG9yIDMyLzY0IGluIHRoZSBXb3JkIGNvbHVtbiBvZiB0aGUgWzU1XXRhYmxlKS4g SW4KLSAgIGZhY3QsIGV2ZXJ5IEtlcm1pdCBjb21tYW5kIHRoYXQgcGFyc2VzIGEgbnVtYmVyIGlu IGFueSBmaWVsZCBjYW4gbm93Ci0gICBwYXJzZSBhIGxhcmdlIG51bWJlciBvbiB0aG9zZSBwbGF0 Zm9ybXMuCi0KLSAgIFMtRXhwcmVzc2lvbnMgY2FuIG5vdyBiZSBmb3JjZWQgdG8gb3BlcmF0ZSB3 aXRoIGludGVnZXJzIG9ubHksIHdpdGhvdXQKLSAgIGZsb2F0aW5nLXBvaW50IGNvbnZlcnNpb24g b3IgaGF2aW5nIHRvIGV4cGxpY2l0bHkgdHJ1bmNhdGUgZWFjaCByZXN1bHQ7Ci0gICBhcyBhbiBl eGFtcGxlLiBzZWUgdGhlIHJldmlzZWQgWzU2XUVhc3RlciBkYXRlIGNhbGN1bGF0aW9uIHNjcmlw dC4KLQotRk9SQ0UtMyBQYWNrZXQgUHJvdG9jb2wKLQotICAgVGhlIEtlcm1pdCBwcm90b2NvbCBo YXMgcHJvdmVuIGl0c2VsZiBvdmVyIHRoZSBwYXN0IDMwIHllYXJzIHRvIGJlCi0gICByb2J1c3Qg aW4gdGVybXMgb2Ygc3Vydml2aW5nIGhhcnNoIHRyYW5zbWlzc2lvbiBlbnZpcm9ubWVudHMgYW5k Ci0gICBkZWxpdmVyaW5nIHRoZSBkYXRhIGNvcnJlY3RseSBhbmQgY29tcGxldGVseS4gSW4gdGhl c2UgdGltZXMgb2YKLSAgIEludGVybmV0IGV2ZXJ5d2hlcmUgYW5kIGVycm9yLWNvcnJlY3Rpbmcg bW9kZW1zIGluIHRoZSBmZXcgcGxhY2VzIHdoZXJlCi0gICB0aGUgSW50ZXJuZXQgaXNuJ3QsIGZl dyBwZW9wbGUgZXZlbiByZWNhbGwgdGhlIGtpbmRzIG9mIGRpZmZpY3VsdAotICAgY29uZGl0aW9u cyB0aGF0IHdlcmUgY29tbW9uIHdoZW4gdGhlIEtlcm1pdCBwcm90b2NvbCB3YXMgZmlyc3QKLSAg IGRldmVsb3BlZDogbm9pc3kgdGVsZXBob25lIGxpbmVzLCBzZXJpYWwgaW50ZXJmYWNlcyB0aGF0 IGRyb3AKLSAgIGNoYXJhY3RlcnMsIGxhY2sgb2YgdHJhbnNwYXJlbmN5IHRvIGNvbnRyb2wgb3Ig OC1iaXQgY2hhcmFjdGVycywKLSAgIGFic2VuY2Ugb2YgZmxvdyBjb250cm9sLCAiYmFyZSIgbW9k ZW1zIHdpdGhvdXQgZXJyb3IgY29ycmVjdGlvbi4KLQotICAgQnV0IHRoZSBJbnRlcm5ldCBpcyBu b3QgZXZlcnl3aGVyZSwgYW5kIG5vdCBhbGwgbW9kZW1zIGFyZQotICAgZXJyb3ItY29ycmVjdGlu Zy4gUGVyaGFwcyB0aGUgbW9zdCBkaWZmaWN1bHQgdHJpYWwgc28gZmFyIGZvciBLZXJtaXQgb3IK LSAgIGFueSBvdGhlciBwcm90b2NvbCBpcyB0aGUgWzU3XUVNLUFQRVggcHJvamVjdCwgaW4gd2hp Y2ggZmxvYXRzIGFyZQotICAgZHJvcHBlZCBpbnRvIHRoZSBvY2VhbiBmcm9tIGFuIGFpcmNyYWZ0 IGludG8gdGhlIHBhdGggb2YgYSBodXJyaWNhbmU7Ci0gICB0aGVzZSBmbG9hdHMgZGl2ZSBpbnRv IHRoZSB3YXRlciBtZWFzdXJpbmcgY3VycmVudCwgdGVtcGVyYXR1cmUsIGFuZAotICAgc2FsaW5p dHkgYXQgZGlmZmVyZW50IGRlcHRocyBhbmQgdGhlbiBzdXJmYWNlIHRvIHBob25lIGhvbWUsIHNl bmRpbmcKLSAgIHRoZSBkYXRhIHRvIGxhbmQgc3RhdGlvbnMgdXNpbmcgS2VybWl0IHByb3RvY29s IG92ZXIKLSAgIG5vbi1lcnJvci1jb3JyZWN0aW5nIDMwMGJwcyBbNThdSXJpZGl1bSBzYXRlbGxp dGUgbW9kZW1zLCB3aXRoIGhpZ2gKLSAgIHNlYXMgYW5kIHdpbmRzIGJhdHRlcmluZyB0aGUgZmxv YXRzIGFuZCBoZWF2eSAoWzU5XXNvbWV0aW1lcwotICAgZWxlY3RyaWNhbCkgc3Rvcm1zIGJldHdl ZW4gdGhlIG1vZGVtIGFuZCB0aGUgc2F0ZWxsaXRlLgotCi0gICBCZWNhdXNlIG9mIHRoZSB0cmFu c21pc3Npb24gc3BlZWQgYW5kIGxvbmcgZGlzdGFuY2VzIGludm9sdmVkLCB0aGUKLSAgIHRyYW5z ZmVycyB3ZXJlIHZlcnkgc2xvdy4gVGhlIEtlcm1pdCBzb2Z0d2FyZSBpbiB0aGUgZmxvYXRzIGlz Ci0gICBbNjBdRW1iZWRkZWQgS2VybWl0LCB3aGljaCBkaWQgbm90IGltcGxlbWVudCBzbGlkaW5n IHdpbmRvd3MsIHdoaWNoCi0gICB3b3VsZCBoYXZlIHNwZWQgdXAgdGhlIGZsb3cgY29uc2lkZXJh Ymx5LiBKb2huIER1bmxhcCwgZW5naW5lZXIgYXQgdGhlCi0gICBVbml2ZXJzaXR5IG9mIFdhc2hp bmd0b24ncyBBcHBsaWVkIFBoeXNpY3MgTGFib3JhdG9yeSwgdW5kZXJ0b29rIHRoZQotICAgdGFz ayBvZiBhZGRpbmcgc2xpZGluZyB3aW5kb3dzIHRvIEUtS2VybWl0LiBGb3IgdGVzdGluZywgaGUg cmlnZ2VkIHVwIGEKLSAgIFs2MV1zaW11bGF0b3IgaW4gd2hpY2ggS2VybWl0IHRyYW5zZmVycyB0 YWtlIHBsYWNlIG92ZXIgYSBjb25uZWN0aW9uCi0gICB3aXRoIGRpZmZlcmVudCBhbW91bnRzIG9m IG5vaXNlIGFuZCBkZWxheS4gSGUgZm91bmQgdGhhdCBvY2Nhc2lvbmFsbHksCi0gICBhIHRyYW5z ZmVyIHdvdWxkIGFwcGVhciB0byBzdWNjZWVkLCBidXQgdGhlIHJlY2VpdmVkIGZpbGUgd291bGQg YmUKLSAgIGNvcnJ1cHQuCi0KLSAgIEFjY29yZGluZyB0byB0aGUgS2VybWl0IHByb3RvY29sIGRl ZmluaXRpb24sIHRoZSBmaXJzdCBwYWNrZXQgYWx3YXlzCi0gICBoYXMgYmxvY2stY2hlY2sgdHlw ZSAxLCBhIDYtYml0IGNoZWNrc3VtLCB3aGljaCBpcyB0aGUgb25seSBibG9jayBjaGVjawotICAg dHlwZSB0aGF0IGFsbCBLZXJtaXQgaW1wbGVtZW50YXRpb25zIGFyZSByZXF1aXJlZCB0byBzdXBw b3J0OyB0aHVzIGFueQotICAgS2VybWl0IHBhcnRuZXIgY2FuIHByb2Nlc3MgdGhpcyBwYWNrZXQu IFRoaXMgcGFja2V0IGl0c2VsZiBjYW4KLSAgIG5lZ290aWF0ZSBhIGhpZ2hlciBsZXZlbCBvZiBj aGVja2luZywgc3VjaCB0aGF0IHN1YnNlcXVlbnQgcGFja2V0cyBoYXZlCi0gICAoc2F5KSBibG9j ay1jaGVjayB0eXBlIDMsIGEgMTYtYml0IGN5Y2xpYyByZWR1bmRhbmN5IGNoZWNrIChDUkMpCi0g ICBlbmNvZGVkIGFzIHRocmVlIHByaW50YWJsZSA3LWJpdCBBU0NJSSBjaGFyYWN0ZXJzLiBUaGUg MTYtYml0IENSQyBjYW4KLSAgIGNhdGNoIGFsbCBlcnJvcnMgb2YgY2VydGFpbiBraW5kcyAoc2lu Z2xlLWJpdCwgZG91YmxlLWJpdCwgYnVyc3RzIG9mIDE2Ci0gICBiaXRzIG9yIGxlc3MpLCBhbmQg bW9yZSB0aGFuIDk5Ljk5ODQ3NDEyMTA5MzclIG9mIGFsbCBvdGhlciBwb3NzaWJsZQotICAgZXJy b3JzLgotCi0gICBKb2huJ3Mgc2ltdWxhdGlvbnMgcmV2ZWFsZWQgdGhhdCBmaWxlIGNvcnJ1cHRp b24gY291bGQgb2NjdXIgdW5kZXRlY3RlZAotICAgd2hlbiB0aGUgaW5pdGlhbCBwYWNrZXQgd2Fz IGNvcnJ1cHRlZCBpbiBzdWNoIGEgd2F5IHRoYXQgYSBwYXJhbWV0ZXIgb3IKLSAgIGNhcGFiaWxp dHkgYnl0ZSB3YXMgY2hhbmdlZCBhbmQgdGhlIGNoZWNrc3VtIGFsc28gY2hhbmdlZCB0byBtYWtl IHRoZQotICAgcGFja2V0IGFwcGVhciB0byBiZSBjb3JyZWN0LCB0aHVzIGFsbG93aW5nIHRoZSB0 cmFuc2ZlciB0byBwcm9jZWVkIHdpdGgKLSAgIHRoZSB0d28gS2VybWl0IHBhcnRuZXJzIG91dCBv ZiBzeW5jIGFzIHRvIHBhY2tldCBlbmNvZGluZyBhbmQKLSAgIGludGVycHJldGF0aW9uICh0aGUg Y2hhbmNlcyBvZiB0d28gc3VjaCBlcnJvcnMgcHJvZHVjaW5nIGEgc2VlbWluZ2x5Ci0gICB2YWxp ZCBwYWNrZXQgYXJlIGFib3V0IDEgaW4gNjAwMCB3aGVuIHVzaW5nIHRoZSA2LWJpdCBjaGVja3N1 bSkuIEZvcgotICAgZXhhbXBsZSwgdGhlIGNvbXByZXNzaW9uIHRlY2huaXF1ZSBtaWdodCBiZSBt aXNuZWdvdGlhdGVkIGFuZCB0aGVuIHRoZQotICAgcmVjZWl2ZXIgbWlnaHQgc3RvcmUgaW5jb21p bmcgZGF0YSB3aXRob3V0IGRlY29tcHJlc3NpbmcgaXQuCi0KLSAgIFRoZSBzb2x1dGlvbiBpcyBh IG5ldyBvcHRpb24sIHNlbGVjdGVkIGJ5OgotCi0gICAgIEJMT0NLLUNIRUNLIFRZUEUgNQotCi0g ICB0byByZXF1aXJlIGEgdHlwZSAzIGJsb2NrIGNoZWNrICgxNi1iaXQgQ1JDKSBvbiBldmVyeSBw YWNrZXQsIGluY2x1ZGluZwotICAgdGhlIGluaXRpYWwgb25lcywgdGh1cyByZWR1Y2luZyB0aGUg cHJvYmFiaWxpdHkgb2YgYSBtaXNuZWdvdGlhdGlvbiBieQotICAgbWFueSBvcmRlcnMgb2YgbWFn bml0dWRlLiBUSElTIFBBUkFNRVRFUiBDQU4gTk9UIEJFIE5FR09USUFURUQuIEVhY2gKLSAgIEtl cm1pdCBwcm9ncmFtIG11c3QgYmUgZ2l2ZW4gdGhlICJzZXQgYmxvY2sgNSIgY29tbWFuZCBwcmlv ciB0bwotICAgdHJhbnNmZXIuIFRoYXQncyBiZWNhdXNlIG5vcm1hbGx5IGV2ZXJ5IEtlcm1pdCBw cm9ncmFtIGV4cGVjdHMgdGhlCi0gICBmaXJzdCBwYWNrZXQgdG8gaGF2ZSBhIDYtYml0IGNoZWNr c3VtLCBhbmQgaWYgdGhlIGZpcnN0IHBhY2tldCBoYXMgYQotICAgMy1ieXRlLCAxNi1iaXQgQ1JD LCB0aGUgcGFja2V0IHJlY2VpdmVyIHdpbGwgdGhpbmsgaXQgaXMgY29ycnVwdGVkLgotCi0gICBJ biBwcmFjdGljZSwgaG93ZXZlciwgaXQgaXMgcG9zc2libGUgdG8gY29kZSB0aGUgcGFja2V0IHJl Y2VpdmVyCi0gICAiY2hlYXQiIGJ5IHJlYWRpbmcgdGhlIHBhY2tldCBkYXRhIGJlZm9yZSB2ZXJp ZnlpbmcgdGhlIGJsb2NrIGNoZWNrLgotICAgVGh1cyB3aGVuIHRoZSByZWNlaXZlciBpcyBDLUtl cm1pdCA5LjAgb3IgbGF0ZXIgb3IgRS1LZXJtaXQgMS43IG9yCi0gICBsYXRlciwgaXQgaXMgb25s eSBuZWNlc3NhcnkgdG8gZ2l2ZSB0aGUgInNldCBibG9jayA1IiBjb21tYW5kIHRvIHRoZQotICAg ZmlsZSBzZW5kZXIsIGFuZCB0aGUgcmVjZWl2ZXIgd2lsbCBjaGVjayBmb3IgYSBGT1JDRS0zIGZp cnN0IHBhY2tldC4gSWYKLSAgIHRoZSByZWNlaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVh dHVyZSwgaG93ZXZlciwgdGhlIGluaXRpYWwgcGFja2V0Ci0gICB3aWxsIGJlIGJlIHJlamVjdGVk IChhZnRlciBzZXZlcmFsIHJldHJpZXMpIGFuZCB0aGUgZmlsZSB0cmFuc2ZlciB3aWxsCi0gICBu b3QgdGFrZSBwbGFjZS4gVGhlcmUgaXMgbm8gYXR0ZW1wdCB0byAiYmFjayBvZmYiIHRvIG5vcm1h bCBiZWhhdmlvci4KLQotICAgQ0FQVElPTjogVGFibGUgNC4gS2VybWl0IFByb3RvY29sIFBhY2tl dCBCbG9jayBDaGVjayBUeXBlcwotCi0gICBUeXBlIENvbW1hbmQgQnl0ZXMgU3RhdHVzIEV4cGxh bmF0aW9uCi0gICAxIFNFVCBCTE9DSyAxIDEgUmVxdWlyZWQgaW4gYWxsIEtlcm1pdCBpbXBsZW1l bnRhdGlvbnMuIE5lZ290aWF0ZWQuCi0gICA2LWJpdCBjaGVja3N1bSwgc3VpdGFibGUgZm9yIGdv b2QgY29ubmVjdGlvbnMuCi0gICAyIFNFVCBCTE9DSyAyIDIgT3B0aW9uYWwsIG5lZ290aWF0ZWQu IDEyLWJpdCBjaGVja3N1bS4gNjQgdGltZXMKLSAgIHN0cm9uZ2VyIHRoYW4gdHlwZSAxLgotICAg MyBTRVQgQkxPQ0sgMyAzIE9wdGlvbmFsLCBuZWdvdGlhdGVkLiAxNi1iaXQgQ1JDLgotICAgQkxB TkstRlJFRS0yIFNFVCBCTE9DSyA0IDIgT3B0aW9uYWwsIG5lZ290aWF0ZWQuIDEyLWJpdCBjaGVj a3N1bSwgdHdvCi0gICBub25ibGFuayBieXRlcy4KLSAgIEZPUkNFLTMgU0VUIEJMT0NLIDUgMyBP cHRpb25hbCwgbm90IG5lZ290aWF0ZWQuIDE2LWJpdCBDUkMgZm9yY2VkIGFsbAotICAgcGFja2V0 cy4KLQotICAgQkxBTkstRlJFRS0yIGlzIGZvciBlbnZpcm9ubWVudHMgd2hlcmUgS2VybWl0IHBh Y2tldHMgYXJlIHRyZWF0ZWQgYXMKLSAgIGxpbmVzIG9mIHRleHQsIGFuZCBpbiB3aGljaCB0cmFp bGluZyBibGFua3MgY2FuIGJlIHN0cmlwcGVkOyBmb3IKLSAgIGV4YW1wbGUsIHdoZW4gdHJhbnNm ZXJyaW5nIGZpbGVzIHdpdGggYW4gSUJNIG1haW5mcmFtZSB0aHJvdWdoIGEgMzI3MAotICAgcHJv dG9jb2wgY29udmVydGVyLgotICAgWzYyXUUtS2VybWl0IDEuNwotCi1WYXJpYWJsZSBFdmFsdWF0 aW9uCi0KLSAgICAgRG9lcyB0aGUgc3RyYW5nZSBiZWhhdmlvciBvZiBLZXJtaXQncyBcJXggdmFy aWFibGVzIHB1enpsZSBvciBhbm5veQotICAgICB5b3U/Ci0KLSAgIEtlcm1pdCBzb2Z0d2FyZSBk ZXZlbG9wbWVudCBoYXMgYmVlbiBhIGNvbGxhYm9yYXRpdmUgcHJvamVjdCBvdmVyIHRoZQotICAg eWVhcnMsIHdpdGggY29udHJpYnV0aW9ucyBjb21pbmcgaW4gZnJvbSBhbG1vc3QgZXZlcnkgY291 bnRyeSBhbmQgZXZlcnkKLSAgIHNlY3RvciBvZiB0aGUgZWNvbm9teSAtIGFjYWRlbWljLCBjb3Jw b3JhdGUsIGdvdmVybm1lbnQuIFRodXMgbm90IGFsbAotICAgdmVyc2lvbnMsIGFuZCBub3QgYWxs IGZlYXR1cmVzIG9mIGEgZ2l2ZW4gdmVyc2lvbiwgYXJlIGEgcHJvZHVjdCBvZgotICAgc3lzdGVt YXRpYyBkZXNpZ24uCi0KLSAgIE9uZSBleGFtcGxlIHdhcyB0aGUgaW50cm9kdWN0aW9uIG9mIHZh cmlhYmxlcyBmb3IgdGV4dCBzdWJzdGl0dXRpb24sCi0gICBmaXJzdCBpbiBhIHZlcnNpb24gb2Yg TVMtRE9TIEtlcm1pdCB0aGF0IHdhcyBzZW50IGluIGJ5IHNvbWVvbmUKLSAgIHNvbWV3aGVyZSAo SSBjb3VsZCBsb29rIGl0IHVwLCBidXQgbm8gdGltZS4uLikgQWx0aG91Z2ggdGhlIGRlc2lnbiBv ZgotICAgdGhlIG5vdGF0aW9uIGZvciB2YXJpYWJsZSBuYW1lcyAodGFibGUgYmVsb3cpIGlzIG1p bmUsIHRoZSB1bmRlcmx5aW5nCi0gICBjb2RlIHdhcyBjb250cmlidXRlZC4gSW4gdGhhdCBjb2Rl IHRoZXJlIHdhcyBvbmx5IG9uZSBraW5kIG9mIHZhcmlhYmxlLAotICAgYW5kIGlmIEkgcmVjYWxs IGNvcnJlY3RseSB0aGUgdmFyaWFibGUgbmFtZSB3YXMgYSBiYWNrc2xhc2ggZm9sbG93ZWQgYnkK LSAgIGEgc2luZ2xlIGxldHRlciwgZm9yIGV4YW1wbGUgXGEsIFxiLCBldGMuIFRoZSBjb250cmli dXRlZCBjb2RlCi0gICBldmFsdWF0ZWQgdGhlc2UgdmFyaWFibGVzIHJlY3Vyc2l2ZWx5LCBtZWFu aW5nIGlmIHRoZSBkZWZpbml0aW9uIG9mIGEKLSAgIHZhcmlhYmxlIGNvbnRhaW5lZCB2YXJpYWJs ZSByZWZlcmVuY2VzLCB0aGVuIHRoZXNlIHdlcmUgcmVzb2x2ZWQgd2hlbgotICAgZGVyZWZlcmVu Y2luZyB0aGUgdmFyaWFibGUsIGFuZCB0aGUgcHJvY2VzcyB3b3VsZCBjb250aW51ZSBhcyBkZWVw IGRvd24KLSAgIGFzIG5lY2Vzc2FyeSB0byByZXNvbHZlIHRoZSB0aGluZyBmdWxseS4KLQotICAg VGhpcyB3YXMgc29tZXRpbWVzIGhhbmR5LCBidXQgaXQgaGFkIG9uZSBzZXZlcmUgZHJhd2JhY2s6 IFRoZXJlIHdhcyBubwotICAgd2F5IHRvIHVzZSB2YXJpYWJsZXMgaW4gYSBzdHJhaWdodGZvcndh cmQgd2F5IHRvIHJlcHJlc2VudCBzdHJpbmdzIHRoYXQKLSAgIGNvbnRhaW5lZCBsaXRlcmFsIGJh Y2tzbGFzaGVzOyBmb3IgZXhhbXBsZSwgRE9TIG9yIFdpbmRvd3MgcGF0aG5hbWVzLgotICAgVGhp cyBnYXZlIHJpc2UgdG8gYWxsIGtpbmRzIG9mIHF1b3RpbmcgcnVsZXMgYW5kIGNvbnZlbnRpb25z IChlLmcuCi0gICBkb3VibGluZyBiYWNrc2xhc2hlcyBvciBmb3JjaW5nIHNpbmdsZS1sZXZlbCBl dmFsdWF0aW9uIHdpdGgKLSAgIFxcZmNvbnRlbnRzKCkpLCBhbmQgYWxzbyB0byB0aGUgaW50cm9k dWN0aW9uIG9mIG90aGVyIGtpbmRzIG9mCi0gICB2YXJpYWJsZXMgdGhhdCB3ZXJlIGV2YWx1YXRl ZCBvbmUgbGV2ZWwgZGVlcCwgcmF0aGVyIHRoYW4gcmVjdXJzaXZlbHkuCi0KLSAgIFRvIGFjY29t bW9kYXRlIGNvZXhpc3RlbmNlIG9mIGRpZmZlcmVudCBraW5kcyBvZiB2YXJpYWJsZXMgYXMgd2Vs bCBhcwotICAgImVzY2FwZSBzZXF1ZW5jZXMiIGZvciByZXByZXNlbnRpbmcgY29udHJvbCBhbmQg OC1iaXQgY2hhcmFjdGVycywgdGhlCi0gICBzeW50YXggZm9yIHZhcmlhYmxlIG5hbWVzIHdhcyBl eHRlbmRlZCB0byBpbmNsdWRlIHRocmVlIGVsZW1lbnRzOiB0aGUKLSAgIGxlYWRpbmcgYmFja3Ns YXNoLCB0aGVuIGEgc2luZ2xlIGNoYXJhY3RlciBpbmRpY2F0aW5nIHRoZSB0eXBlIG9mCi0gICB2 YXJpYWJsZSwgYW5kIHRoZW4gdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIGluIGEgZm9ybWF0IGNv cnJlc3BvbmRpbmcKLSAgIHRvIHRoZSB0eXBlIGRlc2lnbmF0b3IsIGFzIHNob3duIGluIHRoaXMg c29tZXdoYXQgc2ltcGxpZmllZCB0YWJsZToKLQotICAgQ0FQVElPTjogVGFibGUgMS4gVmFyaWFi bGUtbmFtZSBTeW50YXggaW4gS2VybWl0Ci0KLSAgIE5vdGF0aW9uIE1lYW5pbmcKLSAgIFwwMDAg LSBcMjU1IDgtYml0IGNoYXJhY3RlciBjb25zdGFudCAoZGVjaW1hbCkKLSAgIFxkMDAwIC0gXGQy NTUgQWx0ZXJuYXRpdmUgbm90YXRpb24gZm9yIDgtYml0IGNoYXJhY3RlciAoYnl0ZSkgY29uc3Rh bnQKLSAgIChkZWNpbWFsKQotICAgXG8wMDAgLSBcbzM3NyA4LWJpdCBjaGFyYWN0ZXIgY29uc3Rh bnQgKG9jdGFsKQotICAgXHgwMCAtIFx4ZmYgOC1iaXQgY2hhcmFjdGVyIGNvbnN0YW50IChoZXhh ZGVjaW1hbCkKLSAgIFwlYSAtIFwleiBTY2FsYXIgdmFyaWFibGUsIGV2YWx1YXRlZCByZWN1cnNp dmVseS4KLSAgIFwlMCAtIFwlOSBNYWNybyBhcmd1bWVudCwgc2NhbGFyLCBldmFsdWF0ZWQgcmVj dXJzaXZlbHkuCi0gICBcJmEgLSBcJSYgQXJyYXkgbmFtZQotICAgXCZhW3hdIEFycmF5IHJlZmVy ZW5jZSwgZXZhbHVhdGVkIHJlY3Vyc2l2ZWx5ICh4IGlzIGFueSBjb25zdGFudCBvcgotICAgdmFy aWFibGUpCi0gICBcdihuYW1lKSBCdWlsdC1pbiBzY2FsYXIgdmFyaWFibGUsIGV2YWx1YXRlZCBv bmUgbGV2ZWwgZGVlcC4KLSAgIFxtKG5hbWUpIFVzZXItZGVmaW5lZCBzY2FsYXIgdmFyaWFibGUs IGV2YWx1YXRlZCBvbmUgbGV2ZWwgZGVlcC4KLSAgIFwkKG5hbWUpIEFuIGVudmlyb25tZW50IHZh cmlhYmxlLCBldmFsdWF0ZWQgb25lIGxldmVsIGRlZXAuCi0gICBccyhuYW1lW246bV0pIENvbXBh Y3Qgc3Vic3RyaW5nIG5vdGF0aW9uLCBldmFsdWF0ZWQgb25lIGxldmVsIGRlZXAuCi0gICBcZm5h bWUoYXJncy4uLikgQnVpbHQtaW4gZnVuY3Rpb24gd2l0aCB6ZXJvIG9yIG1vcmUgYXJndW1lbnRz LgotICAgXFwgTGl0ZXJhbCBiYWNrc2xhc2gKLSAgIFxOIE9VVFBVVCBjb21tYW5kIG9ubHk6IE5V TCwgQVNDSUkgMAotICAgXEIgT1VUUFVUIGNvbW1hbmQgb25seTogQlJFQUsgKDI1MG1zLCBmb3Ig c2VyaWFsIGNvbm5lY3Rpb25zKQotICAgXEwgT1VUUFVUIGNvbW1hbmQgb25seTogTG9uZyBCUkVB SyAoMS41c2VjLCBkaXR0bykKLQotICAgVmFyaWFibGUgbmFtZXMgaW4gS2VybWl0IGFyZSBjYXNl LWluZGVwZW5kZW50LiBUaGUgc2ltcGxpZmljYXRpb25zIGluCi0gICB0aGUgdGFibGUgYXJlIHRo YXQgdGhlIG5vdGF0aW9uIGZvciBkZWNpbWFsIGFuZCBvY3RhbCBieXRlcyBjYW4gaGF2ZQotICAg ZnJvbSBvbmUgdG8gdGhyZWUgZGlnaXRzLCBhbmQgY2FuIGluY2x1ZGUgYnJhY2VzIHRvIHNlcGFy YXRlIHRoZW0gZnJvbQotICAgdGV4dCBkaWdpdHMsIGUuZy4gXDcsIFx7MTIzfSwgXG97NTB9LiBI ZXggYnl0ZXMgdG9vLCBleGNlcHQgdGhleSBtdXN0Ci0gICBhbHdheXMgaGF2ZSBleGFjdGx5IHR3 byBoZXggZGlnaXRzLCAwLTlhLWYuIEFycmF5IGluZGljZXMgbXVzdCBiZSwgb3IKLSAgIG11c3Qg ZXZhbHVhdGUgdG8sIG51bWJlcnMgKGZsb2F0aW5nIHBvaW50IG51bWJlcnMgYXJlIHRydW5jYXRl ZCkuCi0gICBBc3NvY2lhdGl2ZSBhcnJheXMgYXJlIGFsc28gYXZhaWxhYmxlIChkeW5hbWljIGFy cmF5cyB3aXRoIGFyYml0cmFyeQotICAgdGV4dCBhcyBzdWJzY3JpcHQpLCBidXQgdGhleSBhcmUg cmVhbGx5IGp1c3QgYSB2YXJpYXRpb24gb24gXG0oKQotICAgdmFyaWFibGVzIChyZWFkIGFib3V0 IGFzc29jaWF0aXZlIGFycmF5cyBbNjNdaGVyZSkuIEFsc28sIHRoZXJlIGFyZQotICAgc29tZSBh bHRlcm5hdGl2ZSBub3RhdGlvbnMgZm9yIGNvbXBhY3Qgc3Vic3RyaW5nIG5vdGF0aW9uLgotCi0g ICBXZSBkaWRuJ3Qgd2FudCB0byBoYXZlIGxvdHMgb2YgImRpc3Rpbmd1aXNoZWQiIGNoYXJhY3Rl cnMsIGFzIHRoZSBVTklYCi0gICBzaGVsbCBkb2VzOyBvbmUgaXMgZW5vdWdoLCBjbGFyaXR5IG92 ZXIgYnJldml0eS4gQWx0aG91Z2ggdGhlIG5vdGF0aW9uCi0gICBjYW4gYmUgYSBiaXQgY3VtYmVy c29tZSwgd2UgY2FuIHVzZSB0aGUgXG0obmFtZSkgZm9ybSB0byBjaXJjdW12ZW50IHRoZQotICAg b3ZlcmV2YWx1YXRpb24gaW4gbW9zdCBjb250ZXh0cy4gQnV0IG1hY3JvIGFyZ3VtZW50cyBhcmUg YWx3YXlzCi0gICBhc3NpZ25lZCB0byB0aGUgXCUwLTkgdmFyaWFibGVzLCBhbmQgdGh1cyBhbHdh eXMgZXZhbHVhdGVkIHJlY3Vyc2l2ZWx5LAotICAgbWFraW5nIGl0IGRpZmZpY3VsdCBhbmQgY29u ZnVzaW5nIHRvIHBhc3MgKGUuZy4pIFdpbmRvd3MgcGF0aG5hbWVzIGFzCi0gICBhcmd1bWVudHMg dG8gbWFjcm9zLiBUaGUgc2FtZSBpcyB0cnVlIGZvciBhcnJheSBlbGVtZW50cywgZXNwZWNpYWxs eSBpbgotICAgY29udGV4dHMgd2hlcmUgdGhleSBhcmUgdXNlZCB0byByZXR1cm4gcmVzdWx0cyBm cm9tIGJ1aWx0LWluIGZ1bmN0aW9ucwotICAgKGZvciBleGFtcGxlLCBcZnNwbGl0KCkgdXNlZCB0 byByZXR1cm4gdGhlIGVsZW1lbnRzIG9mIGEKLSAgIFs2NF1jb21tYS1zZXBhcmF0ZWQgdmFsdWUg bGlzdCBpZiBhbnkgb2YgdGhlIHZhbHVlcyBjb250YWluZWQKLSAgIGJhY2tzbGFzaGVzKS4gQW4g ZXZlbiB3b3JzZSBzY2VuYXJpbyBpcyB3aGVuIG1hY3JvIGFyZ3VtZW50cyBhcmUgcGFzc2VkCi0g ICBmcm9tIG9uZSBtYWNybyB0byBhbm90aGVyOyBmb3Igc29tZSBncmFwaGljIGlsbHVzdHJhdGlv bnMgc2VlCi0gICBbNjVdVGFtaW5nIHRoZSBXaWxkIEJhY2tzbGFzaCAtIFBhcnQgRGV1eCBmcm9t IHRoZSBbNjZdQy1LZXJtaXQgNy4wCi0gICBVcGRhdGUgTm90ZXMuCi0KLSAgIFdlIGNhbid0IGp1 c3QgY2hhbmdlIGhvdyB2YXJpYWJsZXMgYXJlIGV2YWx1YXRlZCBiZWNhdXNlIHRoYXQgd291bGQK LSAgIGJyZWFrIGV4aXN0aW5nIHNjcmlwdHMuIEJ1dCB3ZSBjYW4gYWx3YXlzIGFkZCBZZXQgQW5v dGhlciBTRVQgQ29tbWFuZDoKLQotICAgICBTRVQgQ09NTUFORCBWQVJJQUJMRS1FVkFMVUFUSU9O IHsgUkVDVVJTSVZFLCBTSU1QTEUgfQotCi0gICBUaGlzIGFwcGxpZXMgb25seSB0byBcJWEteiBh bmQgXCUwLTkgdmFyaWFibGVzIGFuZCB0byBcJmEteltdIGFycmF5cwotICAgKHNpbmNlIGFsbCBv dGhlciBraW5kcyBvZiB2YXJpYWJsZXMgYXJlIGV2YWx1YXRlZCBvbmx5IG9uZSBsZXZlbCBkZWVw KS4KLSAgIFRoZSBkZWZhdWx0LCBvZiBjb3Vyc2UsIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0 eSwgaXMgUkVDVVJTSVZFLgotICAgU0lNUExFIGZvcmNlcyB0aGUgZXZhbHVhdGlvbiBvZiB0aGVz ZSB2YXJpYWJsZXMgdG8gcmV0dXJuIHRoZWlyIGxpdGVyYWwKLSAgIGNvbnRlbnRzLCB3aXRob3V0 IGZ1cnRoZXIgZXZhbHVhdGlvbjoKLQotICAgICAqIEFuIGV4Y2VwdGlvbiBpcyBtYWRlIGluIHRo ZSBjYXNlIG9mIGFycmF5IHN1YnNjcmlwdHMsIGJlY2F1c2UKLSAgICAgICBjaGFuZ2luZyBob3cg dGhleSBhcmUgZXZhbHVhdGVkIGNvdWxkIGJyZWFrIGEgbG90IG9mIHNjcmlwdHMsIGFuZAotICAg ICAgIGFueXdheSB0aGVyZSBzaG91bGQgbmV2ZXIgYmUgYW55IGhhcm0gaW4gZXZhbHVhdGluZyB0 aGVtCi0gICAgICAgcmVjdXJzaXZlbHkgYmVjYXVzZSB0aGVpciBmaW5hbCB2YWx1ZSBpcyBhbHdh eXMgKG9yIHNob3VsZCBiZSkKLSAgICAgICBudW1lcmljLCBub3Qgc29tZSBzdHJpbmcgdGhhdCBt aWdodCBjb250YWluIGJhY2tzbGFzaGVzLgotICAgICAqIFRoZSBWQVJJQUJMRS1FVkFMVUFUSU9O IHNldHRpbmcgaXMgb24gdGhlIGNvbW1hbmQgc3RhY2suIFRodXMgeW91Ci0gICAgICAgY2FuIGdp dmUgdGhpcyBjb21tYW5kIGluIGEgbWFjcm8sIGNvbW1hbmQgZmlsZSwgb3IgdXNlci1kZWZpbmVk Ci0gICAgICAgZnVuY3Rpb24gd2l0aG91dCBhZmZlY3RpbmcgdGhlIGNhbGxpbmcgZW52aXJvbm1l bnQuCi0gICAgICogVGhlIG5ldyBcZnJlY3Vyc2UoKSBmdW5jdGlvbiBmb3JjZXMgcmVjdXJzaXZl IGV2YWx1YXRpb24gb2YgaXRzCi0gICAgICAgYXJndW1lbnQgcmVnYXJkbGVzcyBvZiB0aGUgVkFS SUFCTEUtRVZBTFVBVElPTiBzZXR0aW5nLiBUaGUKLSAgICAgICBhcmd1bWVudCBjYW4gYmUgYW55 IHN0cmluZyAob3Igbm90aGluZyBhdCBhbGwpOyBhbGwgdGhlIHZhcmlhYmxlcwotICAgICAgIGlu IHRoZSBzdHJpbmcsIGV2ZW4gXG0oKSBvbmVzLCBhcmUgZXZhbHVhdGVkIHJlY3Vyc2l2ZWx5Ogot Ci1kZWYgXCVhIDEgXCViIDMKLWRlZiBcJWIgMgotZGVmIHh4IGVhc3kgYXMgXCVhCi1zaG93IG1h YyB4eAotZWNobyBcZnJlY3Vyc2UoXG0oeHgpKQotZWFzeSBhcyAxIDIgMwotZWNobyBcZnJlY3Vy c2UoaXQncyBhcyBlYXN5IGFzIFxtKHh4KSkKLWl0J3MgYXMgZWFzeSBhcyBlYXN5IGFzIDEgMiAz Ci0KLSAgICAgKiBUaGUgbmV3IFx2KHZhcmV2YWwpIGJ1aWx0LWluIHZhcmlhYmxlIGNvbnRhaW5z IHRoZSBjdXJyZW50IHNldHRpbmcKLSAgICAgICAocmVjdXJzaXZlIG9yIHNpbXBsZSkgYXQgdGhl IGN1cnJlbnQgY29tbWFuZC1zdGFjayBsZXZlbC4KLQotICAgSGVyZSdzIGEgc2hvcnQgc2NyaXB0 IGZvciBpbGx1c3RyYXRpb246Ci0KLWRlZmluZSBwYXRoIGM6XHVzZXJzXGZkY1xzb21lZmlsZS50 eHQKLWRlZmluZSB0ZXN0MSB7ICAgICAgICAjIE5vcm1hbCByZWN1cnNpdmUgYXJndW1lbnQgZXZh bHVhdGlvbgotICBlY2hvIFwlMDogYXJnPVwlMQotfQotZGVmaW5lIHRlc3QyIHsgICAgICAgICMg U2ltcGxlIGFyZ3VtZW50IGV2YWx1YXRpb24KLSAgc2V0IHZhciBzaW1wbGUKLSAgZWNobyBcJTA6 IGFyZz1cJTEKLX0KLXRlc3QxIFxtKHBhdGgpCi10ZXN0MiBcbShwYXRoKQotZXhpdAotCi0gICBB bmQgaGVyZSdzIHRoZSByZXN1bHQ6Ci0KLT88RVJST1I6Tk9fU1VDSF9GVU5DVElPTjpcZmRjXHNv bWVmaWxlLnR4dCgpPgotdGVzdDI6IGFyZz1jOlx1c2Vyc1xmZGNcc29tZWZpbGUudHh0Ci0KLSAg IFRoZSBmaXJzdCBsaW5lIG1pZ2h0IHNlZW0gc3VycHJpc2luZywgYnV0IHVuZGVyIHRoZSBub3Jt YWwgcnVsZXMgKHNlZQotICAgdGFibGUgYWJvdmUpIFxmIGluZGljYXRlcyBhIGZ1bmN0aW9uIGNh bGwsIHdpdGggdGhlIGxldHRlcnMgZm9sbG93aW5nCi0gICB0aGUgJ2YnIGJlaW5nIHRoZSBuYW1l IG9mIHRoZSBmdW5jdGlvbi4gQnV0IHRoZXJlIGlzIG5vIGZ1bmN0aW9uIGJ5Ci0gICB0aGF0IG5h bWUuLi4gYW5kIGlmIHRoZXJlIHdlcmUsIHlvdSBwcm9iYWJseSBkaWRuJ3QgaW50ZW5kIHRvIGNh bGwgaXQhCi0KLSAgIFNFVCBDT01NQU5EIFZBUklBQkxFLUVWQUxVQVRJT04gU0lNUExFIGhhcyBu byBlZmZlY3Qgb24gY29uc3RhbnRzLCBvbmx5Ci0gICBvbiB2YXJpYWJsZXMuIE5vdGUgaG93IFxt KHBhdGgpIGlzIGRlZmluZWQuIFRoZSBERUZJTkUgY29tbWFuZCBhc3NpZ25zCi0gICB0aGUgbGl0 ZXJhbCB2YWx1ZSBvZiBpdHMgYXJndW1lbnQgdG8gdGhlIG5hbWVkIHZhcmlhYmxlIChzZWUgVGFi bGUgMwotICAgYmVsb3cpLCB0aHVzIGluIHRoaXMgY2FzZSBubyBzcGVjaWFsIHN5bnRheCBpcyBu ZWVkZWQuIEJ1dCBpbiBvdGhlcgotICAgY29udGV4dHMsIHlvdSBtdXN0IGRvdWJsZSB0aGUgYmFj a3NsYXNoZXMgb3IgdXNlIHRoZSBcZmxpdGVyYWwoKQotICAgZnVuY3Rpb24gdG8gdXNlIGxpdGVy YWwgYmFja3NsYXNoZXMgaW4gZGF0YToKLQotdGVzdDIgYzpcXHVzZXJzXFxmZGNcXHNvbWVmaWxl LnR4dAotdGVzdDIgXGZsaXRlcmFsKGM6XHVzZXJzXGZkY1xzb21lZmlsZS50eHQpCi0KLSAgIEMt S2VybWl0IDkuMCBhZGRzIGEgbmV3IG5vdGF0aW9uIGZvciBcZmxpdGVyYWwoKSB3aGljaCBhbHNv IGhhcyBjZXJ0YWluCi0gICBhZHZhbnRhZ2VzIG92ZXIgaXQ6IFxxKHN0cmluZyk6Ci0KLXRlc3Qy IFxxKGM6XHVzZXJzXGZkY1xzb21lZmlsZS50eHQpCi0KLSAgIFNpbmNlIFxmbGl0ZXJhbCgpIGlz IGEgZnVuY3Rpb24sIGl0cyBhcmd1bWVudCBsaXN0ICh0aGUgdGV4dCB3aXRoaW4KLSAgIHBhcmVu dGhlc2VzKSBoYXMgc3BlY2lhbCBzeW50YXggb2YgaXRzIG93biwgaW4gd2hpY2ggY29tbWFzIGFu ZCBicmFjZXMKLSAgIGFyZSB0cmVhdGVkIHNwZWNpYWxseSBhbmQgaW50cm9kdWNlIGFub3RoZXIg c2V0IG9mIHF1b3RpbmcgcHJvYmxlbXMuCi0gICBccShzdHJpbmcpIGRvZXNuJ3QgaGF2ZSB0aGVz ZSBwcm9ibGVtcy4gVGhlIG9ubHkgY29uc2lkZXJhdGlvbiBpcyB0aGF0Ci0gICBwYXJlbnRoZXNl cyBtdXN0IGJlIGJhbGFuY2VkIG9yIGVsc2UgcXVvdGVkIChwcmVjZWRlZCBieSBiYWNrc2xhc2gp LCBvcgotICAgcmVwcmVzZW50ZWQgYXMgbnVtZXJpYyBjaGFyYWN0ZXIgZW50aXRpZXMgKGxlZnQg cGFyZW4gPSBcNDAsIChyaWdodAotICAgcGFyZW4gPSBcNDEpLgotCi0gICBPciBlbHNlIGhvbGQg dGhlIHZhbHVlIGluIGEgc2ltcGxlIHZhcmlhYmxlIGFzIHdlIGRpZCB3aXRoIFxcbShwYXRoKQot ICAgYWJvdmUuCi0KLSAgIFNFVCBDT01NQU5EIFZBUklBQkxFLUVWQUxVQVRJT04gU0lNUExFIGlz IGEgYmlnIGNoYW5nZSBhbmQgbWlnaHQgaGF2ZQotICAgcmVwZXJjdXNzaW9ucyB0aGF0IGRpZG4n dCBzaG93IHVwIGluIHRoZSBpbml0aWFsIHRlc3RzOyBhIGxvdCBtb3JlCi0gICB0ZXN0aW5nIGlz IG5lZWRlZC4KLQotICAgT24gdGhlIHRvcGljIG9mIHZhcmlhYmxlcywgbGV0J3Mgc3VtbWFyaXpl IGluIG9uZSBwbGFjZSB0aGUgd2F5cyBpbgotICAgd2hpY2ggdmFsdWVzIGNhbiBiZSBleHBsaWNp dGx5IGFzc2lnbmVkIHRvIHZhcmlhYmxlcy4gVGhlcmUgaXMgbm90aGluZwotICAgbmV3IGhlcmUg ZXhjZXB0IHRoZSB0YWJsZSBpdHNlbGY6Ci0KLSAgIENBUFRJT046IFRhYmxlIDIuIFZhcmlhYmxl IEFzc2lnbm1lbnQgaW4gS2VybWl0Ci0KLSAgIENvbW1hbmQgU2hvcnRoYW5kIEV4cGxhbmF0aW9u Ci0gICBERUZJTkUgbmFtZSB2YWx1ZSAubmFtZSA9IHZhbHVlIFRoZSBsaXRlcmFsIHZhbHVlIGJl Y29tZXMgdGhlIGNvbnRlbnRzCi0gICBvZiB0aGUgbmFtZWQgdmFyaWFibGU7IHZhcmlhYmxlcyBu YW1lcyBpbiB0aGUgdmFsdWUgYXJlIGNvcGllZCB3aXRob3V0Ci0gICBldmFsdWF0aW9uLiBUaGlz IGNvbW1hbmQgaXMgZm9yIGRlZmluaW5nIG1hY3JvcyB0aGF0IHRha2UgcGFyYW1ldGVycywKLSAg IGFzIHdlbGwgYXMgZm9yIGRlZmluaW5nIHNpbXBsZSB2YXJpYWJsZXMsIGVzcGVjaWFsbHkgaWYg dGhlIHZhbHVlcwotICAgY29udGFpbiBiYWNrc2xhc2hlcy4KLSAgIF9ERUZJTkUgbmFtZSB2YWx1 ZSAgIExpa2UgREVGSU5FIGJ1dCB0aGUgbmFtZSBpcyBldmFsdWF0ZWQgYmVmb3JlIHVzZS4KLSAg IEFTU0lHTiBuYW1lIHZhbHVlIC5uYW1lIDo9IHZhbHVlIFRoZSB2YWx1ZSBpcyBldmFsdWF0ZWQg YW5kIHRoZSByZXN1bHQKLSAgIGJlY29tZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBuYW1lZCB2YXJp YWJsZS4KLSAgIF9BU1NJR04gbmFtZSB2YWx1ZSAgIExpa2UgQVNTSUdOIGJ1dCB0aGUgbmFtZSBp cyBldmFsdWF0ZWQgYmVmb3JlIHVzZS4KLSAgIEVWQUxVQVRFIG5hbWUgZXhwcmVzc2lvbiAubmFt ZSA6Oj0gdmFsdWUgVGhlIGV4cHJlc3Npb24gKGluIHJlZ3VsYXIKLSAgIGFsZ2VicmFpYyBub3Rh dGlvbikgaXMgZXZhbHVhdGVkIGFyaXRobWV0aWNhbGx5IGFuZCB0aGUgcmVzdWx0IGJlY29tZXMK LSAgIHRoZSBjb250ZW50cyBvZiB0aGUgbmFtZWQgdmFyaWFibGUuIElmIHRoZSBleHByZXNzaW9u IGNvbnRhaW5zIGFueQotICAgdmFyaWFibGVzIHRoZXkgYXJlIGV2YWx1YXRlZCBmaXJzdC4KLSAg IF9FVkFMVUFURSBuYW1lIGV4cHJlc3Npb24gICBMaWtlIEVWQUxVQVRFIGJ1dCB0aGUgbmFtZSBp cyBldmFsdWF0ZWQKLSAgIGJlZm9yZSB1c2UuCi0gICBJTkNSRU1FTlQgbmFtZSBleHByZXNzaW9u ICAgRXZhbHVhdGVzIHRoZSB2YXJpYWJsZXMgaW4gdGhlIGV4cHJlc3Npb24sCi0gICB0aGVuIGV2 YWx1YXRlcyB0aGUgZXhwcmVzc2lvbiBhcml0aG1ldGljYWxseSwgYW5kIHRoZW4gYWRkcyB0aGUg dmFsdWUKLSAgIHRvIHRoZSBjb250ZW50cyBvZiB0aGUgbmFtZWQgdmFyaWFibGUsIHdoaWNoIG11 c3QgYmUgYSBudW1iZXIgb3IgYW4KLSAgIGFsZ2VicmFpYyBleHByZXNzaW9uLiBJZiB0aGUgZXhw cmVzc2lvbiBpcyBlbXB0eSwgYSB2YWx1ZSBvZiAxIGlzIHVzZWQuCi0gICBfSU5DUkVNRU5UIG5h bWUgZXhwcmVzc2lvbiAgIExpa2UgSU5DUkVNRU5UIGJ1dCB0aGUgbmFtZSBpcyBldmFsdWF0ZWQK LSAgIGJlZm9yZSB1c2UuCi0gICBERUNSRU1FTlQgbmFtZSBleHByZXNzaW9uICAgRXZhbHVhdGVz IHRoZSB2YXJpYWJsZXMgaW4gdGhlIGV4cHJlc3Npb24sCi0gICB0aGVuIGV2YWx1YXRlcyB0aGUg ZXhwcmVzc2lvbiBhcml0aG1ldGljYWxseSwgYW5kIHRoZW4gc3VidHJhY3RzIHRoZQotICAgdmFs dWUgZnJvbSB0aGUgY29udGVudHMgb2YgdGhlIG5hbWVkIHZhcmlhYmxlLCB3aGljaCBtdXN0IGJl IGEgbnVtYmVyCi0gICBvciBhbiBhbGdlYnJhaWMgZXhwcmVzc2lvbi4gSWYgdGhlIGV4cHJlc3Np b24gaXMgZW1wdHksIGEgdmFsdWUgb2YgMSBpcwotICAgdXNlZC4KLSAgIF9ERUNSRU1FTlQgbmFt ZSBleHByZXNzaW9uICAgTGlrZSBERUNSRU1FTlQgYnV0IHRoZSBuYW1lIGlzIGV2YWx1YXRlZAot ICAgYmVmb3JlIHVzZS4KLSAgIERFQ0xBUkUgbmFtZSA9IGxpc3QgICBBbiBhcnJheSBkZWNsYXJh dGlvbiBjYW4gaW5jbHVkZSBhbiBpbml0aWFsaXplcgotICAgbGlzdDsgaXRlbXMgaW4gdGhlIGxp c3QgYXJlIGV2YWx1YXRlZCBiZWZvcmUgYXNzaWdubWVudC4gVGhpcyBjYW4gYmUKLSAgIGRlZmVh dGVkIGJ5IGRvdWJsaW5nIGFueSBiYWNrc2xhc2hlcyBvciBlbmNsb3NpbmcgaW5kaXZpZHVhbCBh cmd1bWVudHMKLSAgIGluIFxmbGl0ZXJhbCgpLgotICAgRE8gbmFtZSBhcmd1bWVudHMgbmFtZSBh cmd1bWVudHMgV2hlbiBpbnZva2luZyBhIG1hY3JvIHdpdGggYSBETwotICAgY29tbWFuZCAob3Ig YW4gaW1wbGllZCBvbmUpLCB0aGUgYXJndW1lbnRzIGFyZSBldmFsdWF0ZWQsIHRoZW4gYXNzaWdu ZWQKLSAgIHRvIFwlMSwgXCUyLCBldGMsIGFuZCB0aGUgbWFjcm8ncyBuYW1lIHRvIFwlMC4KLSAg IChTRVRRIG5hbWUgdmFsdWUpICAgS2VybWl0IGFsc28gaW5jbHVkZXMgYSBtaW5pLVs2N11MSVNQ IGludGVycHJldGVyCi0KLSAgIFZhcmlhYmxlcyBhcmUgZXZhbHVhdGVkIGF1dG9tYXRpY2FsbHkg aW4gS2VybWl0IGNvbW1hbmRzIHNpbXBseSBieQotICAgcmVmZXJlbmNpbmcgdGhlbSwgYWNjb3Jk aW5nIHRvIHJ1bGVzIGdpdmVuIGluIFRhYmxlIDEuIFRoZSBmb2xsb3dpbmcKLSAgIGZ1bmN0aW9u cyBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgaG93IGEgYSBwYXJ0aWN1bGFyIHZhcmlhYmxlIGlzCi0g ICBldmFsdWF0ZWQ6Ci0KLSAgIENBUFRJT046IFRhYmxlIDMuIEtlcm1pdCBGdW5jdGlvbnMgZm9y IEV2YWx1YXRpbmcgVmFyaWFibGVzCi0KLSAgIEZ1bmN0aW9uIEFyZ3VtZW50IERlc2NyaXB0aW9u Ci0gICBcZmNvbnRlbnRzKCkgXCV4IG9yIFwmeFt5XSBFdmFsdWF0ZXMgdGhlIHZhcmlhYmxlIG9y IGFycmF5IGVsZW1lbnQKLSAgICh3aGljaCBub3JtYWxseSB3b3VsZCBiZSBldmFsdWF0ZWQgcmVj dXJzaXZlbHkpIG9uZSBsZXZlbCBkZWVwLgotICAgXGZkZWZpbml0aW9uKCkgbmFtZSBJZiB0aGUg YXJndW1lbnQgaXMgYSBcJXggdmFyaWFibGUgb3IgYW4gYXJyYXkKLSAgIGVsZW1lbnQsIGl0IGlz IGV2YWx1YXRlZCB0byBnZXQgdGhlIG5hbWU7IG90aGVyd2lzZSB0aGUgYXJndW1lbnQgaXMgdGhl Ci0gICBuYW1lLiBJdHMgZGVmaW5pdGlvbiBpcyByZXR1cm5lZCB3aXRoIG5vIHJlY3Vyc2lvbi4K LSAgIFxtKCkgbmFtZSBFcXVpdmFsZW50IHRvIFxmZGVmaW5pdGlvbigpLgotICAgXGZyZWN1cnNl KCkgXG0obmFtZSkgRm9yY2VzIHJlY3Vyc2l2ZSBldmFsdWF0aW9uIG9mIGEgbWFjcm8gZGVmaW5p dGlvbgotICAgKGEuay5hLiBsb25nIHZhcmlhYmxlIG5hbWUpLiBOT1RFOiBcZnJlY3Vyc2UoKSBj YW4gb3BlcmF0ZSBvbiBhbnkga2luZAotICAgb2YgdmFyaWFibGUgYXMgd2VsbCBhcyBvbiBhbnkg c3RyaW5nIGNvbnRhaW5pbmcgYW55IG1peHR1cmUgb2YKLSAgIHZhcmlhYmxlcy4KLQotQy1LZXJt aXQncyBSRU5BTUUgQ29tbWFuZAotCi0gICBDLUtlcm1pdCdzIFJFTkFNRSBjb21tYW5kLCB3aGlj aCBpcyB1c2VkIGZvciBjaGFuZ2luZyB0aGUgbmFtZXMgb2YKLSAgIGxvY2FsIGZpbGVzIG9yIGZv ciBtb3ZpbmcgZmlsZXMgbG9jYWxseSwgaGFzIHR3byBiYXNpYyBmb3JtczoKLQotICAgUkVOQU1F IFsgb3B0aW9uYWwtc3dpdGNoZXMgXSBvbGRmaWxlbmFtZSBuZXdmaWxlbmFtZQotICAgICAgICAg IFRoaXMgZm9ybSBsZXRzIHlvdSBjaGFuZ2UgdGhlIG5hbWUgb2YgYSBzaW5nbGUgZmlsZSBmcm9t Ci0gICAgICAgICAgb2xkZmlsZW5hbWUgdG8gbmV3ZmlsZW5hbWUuIEV4YW1wbGU6Ci0gICAgICAg ICAgcmVuYW1lIHRoaXNtb250aC5sb2cgbGFzdG1vbnRoLmxvZwotCi0gICBSRU5BTUUgWyBvcHRp b25hbC1zd2l0Y2hlcyBdIGZpbGVzcGVjIGRpcmVjdG9yeW5hbWUKLSAgICAgICAgICBUaGlzIGZv cm0gbGV0cyB5b3UgbW92ZSAod2l0aG91dCByZW5hbWluZykgb25lIG9yIG1vcmUgZmlsZXMKLSAg ICAgICAgICAoYWxsIHRoZSBmaWxlcyB0aGF0IG1hdGNoIHRoZSBmaWxlc3BlYywgd2hpY2ggbWF5 IGNvbnRhaW4KLSAgICAgICAgICB3aWxkY2FyZCBjaGFyYWN0ZXJzIHN1Y2ggYXMgIioiKSB0byB0 aGUgZ2l2ZW4gZGlyZWN0b3J5LgotICAgICAgICAgIEV4YW1wbGU6Ci0gICAgICAgICAgcmVuYW1l ICoudHh0IH4vdGV4dGZpbGVzLwotCi0gICBUcmFkaXRpb25hbGx5LCB0aGUgb3B0aW9uYWwgc3dp dGNoZXMgaGF2ZSBiZWVuOgotCi0gICBSRU5BTUUgL0xJU1Qgb2xkbmFtZSBuZXduYW1lCi0gICAg ICAgICAgRGlzcGxheSB0aGUgb2xkIGFuZCBuZXcgbmFtZSBmb3IgZWFjaCBmaWxlIHdoaWxlIHJl bmFtaW5nLgotICAgICAgICAgIFN5bm9ueW1zOiAvTE9HLCAvVkVSQk9TRS4gRXhhbXBsZToKLSAg ICAgICAgICByZW5hbWUgL2xpc3QgKi50eHQgfi90ZXh0ZmlsZXMvCi0KLSAgIFJFTkFNRSAvTk9M SVNUIG9sZG5hbWUgbmV3bmFtZQotICAgICAgICAgIERvbid0IGRpc3BsYXkgdGhlIG9sZCBhbmQg bmV3IG5hbWUgZm9yIGVhY2ggZmlsZSB3aGlsZSByZW5hbWluZy4KLSAgICAgICAgICBUaGlzIGlz IHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBTeW5vbnltczogL05PTE9HLCAvUVVJRVQuIEV4YW1wbGU6 Ci0gICAgICAgICAgcmVuYW1lIC9ub2xpc3QgKi50eHQgfi90ZXh0ZmlsZXMvCi0KLSAgIFJlbWlu ZGVyOiBFdmVyeSBzd2l0Y2ggc3RhcnRzIHdpdGggYSBzbGFzaCAoLykgYW5kIG11c3QgYmUgcHJl Y2VkZWQgYnkKLSAgIGEgc3BhY2UuCi0KLU5ldyBSRU5BTUUgRmVhdHVyZXMgZm9yIEMtS2VybWl0 IDkuMAotCi0gICBBIHNlcmllcyBvZiBuZXcgb3B0aW9ucyAoc3dpdGNoZXMpIGhhdmUgYmVlbiBh ZGRlZCB0byBsZXQgeW91IGNoYW5nZQotICAgdGhlIG5hbWVzIG9mIG11bHRpcGxlIGZpbGVzIGF0 IG9uY2UgYnkgY2FzZSBjb252ZXJzaW9uLCBzdHJpbmcKLSAgIHN1YnN0aXR1dGlvbiwgb3IgY2hh cmFjdGVyLXNldCBjb252ZXJzaW9uLCBhbmQgb3B0aW9uYWxseSBhbHNvIG1vdmUKLSAgIHRoZW0g dG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5OgotCi0gICAgIC9MT1dFUjogICAgICBDb252ZXJ0IHRo ZSBmaWxlbmFtZSB0byBsb3dlcmNhc2UKLSAgICAgL1VQUEVSOiAgICAgIENvbnZlcnQgdGhlIGZp bGVuYW1lIHRvIHVwcGVyY2FzZQotICAgICAvQ09OVkVSVDogICAgQ2hhbmdlIHRoZSBmaWxlbmFt ZSdzIGNoYXJhY3RlciBlbmNvZGluZwotICAgICAvUkVQTEFDRTogICAgRG8gc3RyaW5nIHN1YnN0 aXR1dGlvbnMgb24gdGhlIGZpbGVuYW1lCi0KLSAgIElmIHRoZSBzb3VyY2UtZmlsZSBzcGVjaWZp Y2F0aW9uIGluY2x1ZGVzIGEgcGF0aCBvciBkaXJlY3RvcnksIGFueQotICAgY2hhbmdlcyBhcmUg YXBwbGllZCB0byB0aGUgZmlsZW5hbWVzIG9ubHksIG5vdCB0byB0aGUgZGlyZWN0b3J5IG9yIHBh dGgKLSAgIHNwZWNpZmljYXRpb24uCi0KLSAgIFNpbmNlIG5hbWUgY2hhbmdlcywgd2hlbiBhcHBs aWVkIHRvIG1hbnkgZmlsZXMgYXQgb25jZSwgY2FuIGhhdmUKLSAgIGNvbnNlcXVlbmNlcyB0aGF0 IGFyZSBub3QgZWFzaWx5IHVuZG9uZSwgdGhlcmUgYXJlIGFsc28gc29tZSBuZXcKLSAgIGNvbnRy b2xzLCBzYWZlZ3VhcmRzLCBhbmQgY29udmVuaWVuY2VzOgotCi0gICBSRU5BTUUgL1NJTVVMQVRF Ci0gICAgICAgICAgVGhpcyBzd2l0Y2ggdGVsbHMgS2VybWl0IHRvIHNob3cgeW91IHdoYXQgdGhl IFJFTkFNRSBjb21tYW5kCi0gICAgICAgICAgd291bGQgZG8gd2l0aG91dCBhY3R1YWxseSBkb2lu ZyBpdC4gL1NJTVVMQVRFIGltcGxpZXMgL0xJU1QuCi0KLSAgIFJFTkFNRSAvQ09MTElTSU9OOntG QUlMLFNLSVAsT1ZFUldSSVRFfQotICAgICAgICAgIFRoaXMgc3dpdGNoIGdvdmVybnMgS2VybWl0 J3MgYmVoYXZpb3Igd2hlbiByZW5hbWluZyBtdWx0aXBsZQotICAgICAgICAgIGZpbGVzLCBhbmQg YW55IG9mIHRoZSBuYW1lcyB3b3VsZCBjb2xsaWRlIHdpdGggdGhlIG5hbWUgb2YgYQotICAgICAg ICAgIGZpbGUgdGhhdCBhbHJlYWR5IGV4aXN0cy4gVGhlIGRlZmF1bHQsIGZvciBjb21wYXRpYmls aXR5IHdpdGgKLSAgICAgICAgICBlYXJsaWVyIHJlbGVhc2VzIG9mIEMtS2VybWl0LCBpcyBPVkVS V1JJVEUsIGkuZS4gd3JpdGUgb3ZlciB0aGUKLSAgICAgICAgICBleGlzdGluZyBmaWxlLiBUaGUg b3RoZXIgdHdvIHByb3RlY3QgZXhpc3RpbmcgZmlsZXMuIFNLSVAgbWVhbnMKLSAgICAgICAgICB0 byBza2lwIChub3QgcmVuYW1lKSB0aGUgZmlsZSB0aGF0IHdvdWxkIGNhdXNlIHRoZSBjb2xsaXNp b24sCi0gICAgICAgICAgYW5kIHByb2NlZWQgdG8gdGhlIG5leHQgZmlsZSwgaWYgYW55LiBGQUlM IG1lYW5zIHRoYXQgbm8gZmlsZXMKLSAgICAgICAgICB3aWxsIGJlIHJlbmFtZWQgaWYgdGhlcmUg d291bGQgYmUgYW55IGNvbGxpc2lvbnM7IGZvciB0aGlzCi0gICAgICAgICAgS2VybWl0IG1ha2Vz IHR3byBwYXNzZXMsIGNoZWNraW5nIGVhY2ggbmV3IG5hbWUgaXQgY29uc3RydWN0cwotICAgICAg ICAgIGZvciBleGlzdGVuY2UgYmVmb3JlIHN0YXJ0aW5nIHRoZSBzZWNvbmQgcGFzcyAoaG93ZXZl ciwgdGhlcmUgaXMKLSAgICAgICAgICBubyBndWFyYW50ZWUgdGhhdCBpbiB0aGUgc2Vjb25kIHBh c3MsIGl0IHdvbid0IGNyZWF0ZSB0aGUgc2FtZQotICAgICAgICAgIG5ldyBuYW1lIGZvciBtb3Jl IHRoYW4gb25lIGZpbGU7IGluIHRoYXQgY2FzZSwgaXQgd2lsbCBzdG9wCi0gICAgICAgICAgYmVm b3JlIGV4ZWN1dGluZyB0aGUgc2Vjb25kIHJlbmFtZSkuIEV4YW1wbGU6Ci0gICAgICAgICAgcmVu YW1lIC9zaW11bGF0ZSAvY29sbGlzaW9uOnByb2NlZWQgKiB+L3RtcC8KLQotICAgUmVtaW5kZXI6 IEluIHN3aXRjaGVzIHN1Y2ggYXMgL0NPTExJU0lPTiB0aGF0IHRha2UgYXJndW1lbnRzCi0gICAo b3BlcmFuZHMpLCB0aGUgc3dpdGNoIG5hbWUgYW5kIGl0cyBhcmd1bWVudChzKSBhcmUgc2VwYXJh dGVkIGJ5IGEKLSAgIGNvbG9uICg6KSB3aXRoIG5vIGludGVydmVuaW5nIHNwYWNlcy4gQWxzbyBy ZW1lbWJlciB0aGF0IEtlcm1pdAotICAga2V5d29yZHMgY2FuIGFsd2F5cyBiZSBhYmJyZXZpYXRl ZCBieSBsZWF2aW5nIG9mZiBjaGFyYWN0ZXJzIGZyb20gdGhlCi0gICByaWdodCwgYXMgbG9uZyBh cyB0aGUgcmVzdWx0IGlzIHN0aWxsIHVuaXF1ZSBpbiBpdHMgY29udGV4dC4gVGh1cyAicmVuCi0g ICAvY29sOmYiIHdvdWxkIGJlIGVxdWl2YWxlbnQgdG8gInJlbmFtZSAvY29sbGlzaW9uOmZhaWwi LgotCi0gICBZb3UgY2FuIGNoYW5nZSB0aGUgZm9sbG93aW5nIHByZWZlcmVuY2VzIGZvciB0aGUg UkVOQU1FIGNvbW1hbmQgd2l0aAotICAgdGhlIG5ldyBTRVQgUkVOQU1FIGNvbW1hbmQ6Ci0KLSAg IFNFVCBSRU5BTUUgTElTVCB7IE9OLCBPRkYgfQotICAgICAgICAgIFRlbGxzIHRoZSBSRU5BTUUg Y29tbWFuZCB3aGV0aGVyIHRvIGxpc3QgaXRzIGFjdGlvbnMgaWYgeW91Ci0gICAgICAgICAgZG9u J3QgaW5jbHVkZSBhIC9MSVNUIG9yIC9OT0xJU1Qgb3IgZXF1aXZhbGVudCBzd2l0Y2guCi0KLSAg IFNFVCBSRU5BTUUgQ09MTElTSU9OIHsgRkFJTCwgT1ZFUldSSVRFLCBTS0lQIH0KLSAgICAgICAg ICBUZWxscyB0aGUgUkVOQU1FIGNvbW1hbmQgaG93IHRvIGhhbmRsZSBmaWxlbmFtZSBjb2xsaXNp b25zIGluCi0gICAgICAgICAgdGhlIGFic2VuY2Ugb2YgYSAvQ09MTElTSU9OIHN3aXRjaC4gVGhh dCBpcywgaXQgcmVwbGFjZXMgdGhlCi0gICAgICAgICAgZGVmYXVsdCBhY3Rpb24gb2YgT1ZFUldS SVRFIHdpdGggYWN0aW9uIG9mIHlvdXIgY2hvb3NpbmcsIHdoaWNoCi0gICAgICAgICAgaXMgdGhl biB1c2VkIGluIGFueSBSRU5BTUUgY29tbWFuZCB0aGF0IGRvZXMgbm90IGluY2x1ZGUgYW4KLSAg ICAgICAgICBleHBsaWNpdCAvQ09MTElTSU9OIHN3aXRjaC4KLQotICAgU0hPVyBSRU5BTUUKLSAg ICAgICAgICBEaXNwbGF5cyB0aGUgY3VycmVudCBTRVQgUkVOQU1FIHNldHRpbmdzLgotCi1DaGFu Z2luZyB0aGUgQ2FzZSBvZiBGaWxlbmFtZXMKLQotICAgUkVOQU1FIC9VUFBFUjp7QUxMLExPV0VS fSBmaWxlc3BlYyBbIGRpcmVjdG9yeSBdCi0gICAgICAgICAgUkVOQU1FIC9MT1dFUjp7QUxMLFVQ UEVSfSBmaWxlc3BlYyBbIGRpcmVjdG9yeSBdCi0gICAgICAgICAgVGhlc2Ugc3dpdGNoZXMgbGV0 IHlvdSBjaGFuZ2UgdGhlIGFscGhhYmV0aWMgY2FzZSBvZiBsZXR0ZXJzIGluCi0gICAgICAgICAg YWxsIHRoZSBmaWxlcyB3aG9zZSBuYW1lcyBtYXRjaCB0aGUgZmlsZXNwZWMuIElmIGEgZGlyZWN0 b3J5Ci0gICAgICAgICAgbmFtZSBpcyBnaXZlbiBhZnRlciB0aGUgZmlsZXNwZWMsIHRoZW4gdGhl IGZpbGVzIGFyZSBhbHNvIG1vdmVkCi0gICAgICAgICAgdG8gdGhlIGdpdmVuIGRpcmVjdG9yeS4K LQotICAgQnkgZGVmYXVsdCwgYWxsIGZpbGVzIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIGZpbGVzcGVj IGhhdmUgdGhlaXIgbmFtZXMKLSAgIGNoYW5nZWQgKGlmIG5lY2Vzc2FyeSkuIFRoaXMgaXMgd2hh dCB0aGUgQUxMIGFyZ3VtZW50IG1lYW5zLCBlLmcuOgotCi0gICAgIFJFTkFNRSAvTE9XRVI6QUxM ICoKLSAgICAgUkVOQU1FIC9MT1dFUiAqCi0KLSAgIFlvdSBjYW4gdXNlIGVpdGhlciBmb3JtOiBS RU5BTUUgL0xPV0VSIGlzIGVxdWl2YWxlbnQgdG8gUkVOQU1FCi0gICAvTE9XRVI6QUxMLiBUaGUg b3RoZXIgYXJndW1lbnQgKC9MT1dFUjpVUFBFUiBvciAvVVBQRVI6TE9XRVIpIG1lYW5zIHRvCi0g ICBsZWF2ZSBtaXhlZC1jYXNlIGZpbGVuYW1lcyBhbG9uZSwgYW5kIHJlbmFtZSBvbmx5IHRob3Nl IGZpbGVzIHdob3NlCi0gICBuYW1lcyBjb250YWluIGxldHRlcnMgb2Ygb25seSB0aGUgZ2l2ZW4g Y2FzZS4gRXhhbXBsZXM6Ci0KLSAgIFJFTkFNRSAvVVBQRVI6QUxMIGZvby5iYXIKLSAgICAgICAg ICBDaGFuZ2VzIHRoZSBmaWxlbmFtZSB0byBGT08uQkFSLgotCi0gICBSRU5BTUUgL1VQUEVSIGZv by5iYXIKLSAgICAgICAgICBTYW1lIGFzICJyZW5hbWUgL3VwcGVyOmFsbCBmb28uYmFyIi4KLQot ICAgUkVOQU1FIC9VUFBFUiBmb28uYmFyIH4vb2xkLwotICAgICAgICAgIFJlbmFtZXMgZm9vLmJh ciB0byBGT08uQkFSIGFuZCBtb3ZlcyBpdCB0byB0aGUgdXNlcidzIG9sZAotICAgICAgICAgIGRp cmVjdG9yeSAoVW5peCkuCi0KLSAgIFJFTkFNRSAvTE9XRVIgKgotICAgICAgICAgIENoYW5nZXMg dGhlIG5hbWVzIG9mIGFsbCBmaWxlcyB0byBoYXZlIG9ubHkgbG93ZXJjYXNlIGxldHRlcnMuCi0K LSAgIFJFTkFNRSAvTE9XRVI6VVBQRVIgKgotICAgICAgICAgIENoYW5nZXMgdGhlIG5hbWVzIG9m IG9ubHkgdGhvc2UgZmlsZXMgd2hvc2UgbmFtZXMgY29udGFpbiBubwotICAgICAgICAgIGxvd2Vy Y2FzZSBsZXR0ZXJzIHRvIGhhdmUgb25seSBsb3dlcmNhc2UgbGV0dGVycy4gRm9yIGV4YW1wbGUs Ci0gICAgICAgICAgRk9PLkJBUiB3b3VsZCBiZSBjaGFuZ2VkLCBGb28uQmFyIHdvdWxkIG5vdCBi ZSBjaGFuZ2VkLiBmb28uYmFyCi0gICAgICAgICAgd291bGQgbm90IGJlIGNoYW5nZWQgZWl0aGVy IGJlY2F1c2UgaXQncyBhbHJlYWR5IGFsbCBsb3dlcmNhc2UuCi0KLSAgIFJFTkFNRSAvTE9XRVI6 VVBQRVIgKiB+L25ldy8KLSAgICAgICAgICBTYW1lIGFzIHRoZSBwcmV2aW91cyBleGFtcGxlLCBi dXQgYWxzbyBtb3ZlcyBlYWNoIGZpbGUgdG8gdGhlCi0gICAgICAgICAgdXNlcidzIG5ldyBkaXJl Y3RvcnkgKHdoZXRoZXIgaXQgd2FzIHJlbmFtZWQgb3Igbm90KS4KLQotICAgQ2FzZSBjb252ZXJz aW9uIHdvcmtzIHJlbGlhYmx5IGZvciBBU0NJSSBjaGFyYWN0ZXJzIG9ubHkuIEtlcm1pdCB1c2Vz Ci0gICB0aGUgQyBsaWJyYXJ5IGZvciB0aGlzLCB3aGljaCBvbiBhbnkgZ2l2ZW4gcGxhdGZvcm0g bWlnaHQgb3IgbWlnaHQgbm90Ci0gICBoYW5kbGUgbm9uLUFTQ0lJIGxldHRlcnMsIGFuZCBpZiBp dCBkb2VzLCB0aGVuIGhvdyBpdCB3b3JrcyB3b3VsZAotICAgbm9ybWFsbHkgZGVwZW5kIG9uIHlv dXIgbG9jYWxlIGRlZmluaXRpb25zICh0aGUgTENfQ1RZUEUgYW5kL29yIExBTkcKLSAgIGVudmly b25tZW50IHZhcmlhYmxlIGluIFVuaXgpLiBXaGVuIG5vbi1BU0NJSSBsZXR0ZXJzIGFyZSBub3Qg aGFuZGxlZAotICAgYnkgdGhlIEMgbGlicmFyeSwgdGhlIFJFTkFNRSBjb21tYW5kIGRvZXMgY2hh bmdlIHRoZWlyIGNhc2UuIEZvcgotICAgZXhhbXBsZSwgT2xnYV9UYe+/ve+/vW4udHh0IG1pZ2h0 IGJlY29tZSBPTEdBX1RB77+977+9Ti5UWFQuCi0KLVN0cmluZyBSZXBsYWNlbWVudCBpbiBGaWxl bmFtZXMKLQotICAgVGhlIFJFTkFNRSBjb21tYW5kIGFsc28gbGV0cyB5b3UgY2hhbmdlIGZpbGVu YW1lcyBieSBzdHJpbmcKLSAgIHN1YnN0aXR1dGlvbi4KLQotICAgUkVOQU1FIC9GSVhTUEFDRVNb OlN0cmluZ10gZmlsZXNwZWMgWyBkaXJlY3RvcnkgXQotICAgICAgICAgIFJlcGxhY2VzIGFsbCBz cGFjZXMgaW4gZWFjaCBtYXRjaGluZyBmaWxlbmFtZSBieSB0aGUgZ2l2ZW4KLSAgICAgICAgICBz dHJpbmcsIGlmIGFueSwgb3IgaWYgbm9uZSBpcyBnaXZlbiwgYnkgdW5kZXJzY29yZS4gRXhhbXBs ZXM6Ci0KLSAgICAgUkVOQU1FIC9GSVggKgotICAgICBSRU5BTUUgL0ZJWFNQQUNFUzpfICoKLSAg ICAgUkVOQU1FIC9GSVhTUEFDRVM6IiIgKgotICAgICBSRU5BTUUgL0ZJWFNQQUNFUzo8MDQwPiAq Ci0KLSAgICAgICAgICBUaGUgZmlyc3QgdHdvIGFyZSBlcXVpdmFsZW50LCByZXBsYWNpbmcgZWFj aCBzcGFjZSB3aXRoCi0gICAgICAgICAgdW5kZXJzY29yZTsgYSBmaWxlIGNhbGxlZCAiTXkgRmF2 b3JpdGUgUGhvdG8uanBnIiBiZWNvbWVzCi0gICAgICAgICAgIk15X0Zhdm9yaXRlX1Bob3RvLmpw ZyIuIFRoZSB0aGlyZCBleGFtcGxlIHJlbW92ZXMgYWxsIHNwYWNlcwotICAgICAgICAgICgiTXlG YXZvcml0ZVBob3RvLmpwZyIpLiBUaGUgZm91cnRoIHJlcGxhY2VzIGVhY2ggc3BhY2Ugd2l0aCB0 aGUKLSAgICAgICAgICBzdHJpbmcgIjwwNDA+IiAoIk15PDA0MD5GYXZvcml0ZTwwNDA+UGhvdG8u anBnIikuCi0KLSAgIFJFTkFNRSAvUkVQTEFDRTp7e1N0cmluZzF9e1N0cmluZzJ9fSBmaWxlc3Bl YyBbIGRpcmVjdG9yeSBdCi0gICAgICAgICAgUmVuYW1lcyBlYWNoIG1hdGNoaW5nIGZpbGUgYnkg Y2hhbmdpbmcgb2NjdXJyZW5jZXMgb2YgU3RyaW5nMSBpbgotICAgICAgICAgIGl0cyBuYW1lIHRv IFN0cmluZzIuIElmIGEgZGlyZWN0b3J5IHNwZWNpZmljYXRpb24gaXMgaW5jbHVkZWQsCi0gICAg ICAgICAgdGhlIGZpbGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgZ2l2ZW4gZGlyZWN0b3J5IChldmVu IGlmIHRoZSBuYW1lCi0gICAgICAgICAgd2FzIG5vdCBjaGFuZ2VkKS4gTm90ZSB0aGF0IGluIHRo aXMgY2FzZSwgdGhlIGN1cmx5IGJyYWNlcyBhcmUKLSAgICAgICAgICBwYXJ0IG9mIHRoZSBjb21t YW5kLiBFeGFtcGxlOgotCi0gICAgIFJFTkFNRSAvUkVQTEFDRTp7ey5qcGVnfXsuanBnfX0gKgot Ci0gICAgICAgICAgY2hhbmdlcyBhbGwgKi5qcGVnIGZpbGVzIHRvICouanBnLgotCi0gICBCeSBk ZWZhdWx0LCBSRU5BTUUgL1JFUExBQ0UgY2hhbmdlcyBhbGwgb2NjdXJyZW5jZXMgb2YgU3RyaW5n MSBpbiBlYWNoCi0gICBmaWxlbmFtZSB0byBTdHJpbmcyIHNvLCBmb3IgZXhhbXBsZSwgaWYgeW91 IGhhZCBhIGZpbGUgY2FsbGVkCi0gICBhYmNqcGVneHl6LmpwZWcsIHRoZSBjb21tYW5kIGp1c3Qg c2hvd24gd291bGQgY2hhbmdlIGl0cyBuYW1lIHRvCi0gICBhYmNqcGd4eXouanBnLgotCi0gICBG b3IgZ3JlYXRlciBjb250cm9sIGFuZCBmbGV4aWJpbGl0eSwgdGhlIC9SRVBMQUNFOiBzd2l0Y2gg YXJndW1lbnQgY2FuCi0gICB0YWtlIHNldmVyYWwgZGlzdGluY3QgZm9ybXM6Ci0KLSAgIFJFTkFN RSAvUkVQTEFDRTpTdHJpbmcxIGZpbGVzcGVjIFsgZGlyZWN0b3J5IF0KLSAgICAgICAgICBUaGlz IG1lYW5zIHRvIHJlbW92ZSBhbGwgb2NjdXJyZW5jZXMgb2YgU3RyaW5nMSBmcm9tIHRoZSBnaXZl bgotICAgICAgICAgIGZpbGVuYW1lcyBuYW1lLiBJdCBpcyBlcXVpdmFsZW50IHRvIC9SRVBMQUNF Ont7U3RyaW5nMX17fX0uIEEKLSAgICAgICAgICBoYW5keSB1c2UgZm9yIHRoaXMgb3B0aW9uIGlz IHRvIHJlbW92ZSBzcGFjZXMgZnJvbSBmaWxlbmFtZXMuCi0KLSAgIFJFTkFNRSAvUkVQTEFDRTp7 e1N0cmluZzF9e1N0cmluZzJ9fSBmaWxlc3BlYyBbIGRpcmVjdG9yeSBdCi0gICAgICAgICAgQXMg YWxyZWFkeSBub3RlZCwgdGhpcyByZXBsYWNlcyBldmVyeSBvY2N1cnJlbmNlIG9mIFN0cmluZzEg d2l0aAotICAgICAgICAgIFN0cmluZzIgaW4gZWFjaCBmaWxlbmFtZS4gQWxwaGFiZXRpYyBjYXNl IGluIHN0cmluZyBtYXRjaGluZyBpcwotICAgICAgICAgIGRvbmUgYWNjb3JkaW5nIHRvIHRoZSBj dXJyZW50IFNFVCBDQVNFIHNldHRpbmcuCi0KLSAgIFJFTkFNRSAvUkVQTEFDRTp7eyB9e199fSBm aWxlc3BlYyBbIGRpcmVjdG9yeSBdCi0gICAgICAgICAgVGhpcyByZXBsYWNlcyBhbGwgc3BhY2Vz IGluIHRoZSBnaXZlbiBmaWxlbmFtZXMgd2l0aCB1bmRlcnNjb3JlLAotICAgICAgICAgIGVxdWl2 YWxlbnQgdG8gUkVOQU1FIC9GSVhTUEFDRVMuCi0KLSAgIFJFTkFNRSAvUkVQTEFDRTp7e1N0cmlu ZzF9e1N0cmluZzJ9e09wdGlvbnN9fSBmaWxlc3BlYyBbIGRpcmVjdG9yeSBdCi0gICAgICAgICAg T3B0aW9ucyBjYW4gYmUgaW5jbHVkZWQgdGhhdCBhZGQgbW9yZSBjb250cm9sIHRvIHRoZSBwcm9j ZXNzLgotICAgICAgICAgIFRoZSBvcHRpb24gc3RyaW5nIGlzIGEgc2VxdWVuY2Ugb2YgY2hhcmFj dGVyczsgZWFjaCBjaGFyYWN0ZXIgaW4KLSAgICAgICAgICB0aGUgc3RyaW5nIGlzIGFuIG9wdGlv bi4gVGhlIGNob2ljZXMgYXJlOgotCi0gICBBIFN0cmluZyBtYXRjaGluZyBpcyB0byBiZSBjYXNl LXNlbnNpdGl2ZSwgcmVnYXJkbGVzcyBvZiBTRVQgQ0FTRS4KLSAgIGEgU3RyaW5nIG1hdGNoaW5n IGlzIHRvIGJlIGNhc2UtaW5kZXBlbmRlbnQsIHJlZ2FyZGxlc3Mgb2YgU0VUIENBU0UuCi0gICBe IFN0cmluZyByZXBsYWNlbWVudCB3aWxsIG9jY3VyIG9ubHkgYXQgdGhlIGJlZ2lubmluZyBvZiB0 aGUgZmlsZW5hbWUuCi0gICAkIFN0cmluZyByZXBsYWNlbWVudCB3aWxsIG9jY3VyIG9ubHkgYXQg dGhlIGVuZCBvZiB0aGUgZmlsZW5hbWUuCi0gICAxIE9ubHkgdGhlIGZpcnN0IG9jY3VycmVuY2Ug b2YgdGhlIHN0cmluZyB3aWxsIGJlIHJlcGxhY2VkLgotICAgMiBPbmx5IHRoZSBzZWNvbmQgb2Nj dXJyZW5jZSBvZiB0aGUgc3RyaW5nIHdpbGwgYmUgcmVwbGFjZWQuCi0gICAzIDQgNSA2IDcgOCAu Li4KLSAgIDkgT25seSB0aGUgbmludGggb2NjdXJyZW5jZSBvZiB0aGUgc3RyaW5nIHdpbGwgYmUg cmVwbGFjZWQuCi0gICAtIChoeXBoZW4sIG1pbnVzIHNpZ24pIEJlZm9yZSBhIGRpZ2l0OiBvY2N1 cnJlbmNlcyB3aWxsIGJlIGNvdW50ZWQgZnJvbQotICAgdGhlIHJpZ2h0LgotICAgfiAodGlsZGUp IEJlZm9yZSBkaWdpdCBvciBtaW51cyBzaWduOiBhbGwgb2NjdXJyZW5jZXMgYnV0IHRoZSBnaXZl biBvbmUKLSAgIHdpbGwgYmUgcmVwbGFjZWQuCi0KLSAgIFRoZSB0aWxkZSBtb2RpZmllciB3b3Jr cyBvbmx5IHdpdGggc2luZ2xlLWJ5dGUgY2hhcmFjdGVyIHNldHMgc3VjaCBhcwotICAgQVNDSUks IENQNDM3LCBJU08gODg1OS0xLCBldGMsIGJ1dCBub3Qgd2l0aCBtdWx0aWJ5dGUgY2hhcmFjdGVy IHNldHMKLSAgIHN1Y2ggYXMgVUNTMiwgVVRGOCwgb3IgYW55IG9mIHRoZSBKYXBhbmVzZSBLYW5q aSBzZXRzLgotCi0gICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzIHNob3dpbmcgaG93IHRvIHVzZSB0 aGUgL1JFUExBQ0Ugb3B0aW9uczoKLQotICAgUkVOQU1FIC9SRVBMQUNFOnt7Zm9vfXtiYXJ9e159 fSAqCi0gICAgICAgICAgRm9yIGFsbCBmaWxlcyB3aG9zZSBuYW1lcyBzdGFydCB3aXRoICJmb28i LCByZXBsYWNlcyB0aGUgImZvbyIKLSAgICAgICAgICBhdCB0aGUgYmVnaW5uaW5nIHdpdGggImJh ciIuCi0KLSAgIFJFTkFNRSAvUkVQTEFDRTp7e317TmV3LX17Xn19ICoKLSAgICAgICAgICBQcmVw ZW5kcyAiTmV3LSIgdG8gdGhlIG5hbWUgb2YgZWFjaCBmaWxlLgotCi0gICBSRU5BTUUgL1JFUExB Q0U6e3suanBlZ317LmpwZ317JH19ICoKLSAgICAgICAgICBSZXBsYWNlcyAiLmpwZWciIGF0IHRo ZSBlbmQgb2YgZWFjaCBmaWxlbmFtZSB3aXRoICIuanBnIi4KLQotICAgUkVOQU1FIC9SRVBMQUNF Ont7fXstT2xkfXskfX0gKgotICAgICAgICAgIEFwcGVuZHMgIi1PbGQiIHRvIHRoZSBuYW1lIG9m IGVhY2ggZmlsZS4KLQotICAgUkVOQU1FIC9SRVBMQUNFOnt7Zm9vfXtiYXJ9e2F9fSAqCi0gICAg ICAgICAgUmVwbGFjZXMgImZvbyIsICJGT08iLCAiRm9vIiwgImZPTyIsIGV0Yywgd2l0aCAiYmFy IiBpbiBlYWNoCi0gICAgICAgICAgZmlsZW5hbWUuCi0KLSAgIFJFTkFNRSAvUkVQTEFDRTp7e2Zv b317YmFyfXtBfX0gKgotICAgICAgICAgIFJlcGxhY2VzIG9ubHkgKGxvd2VyY2FzZSkgImZvbyIg aW4gZmlsZW5hbWVzIHdpdGggImJhciIuCi0KLSAgIFJFTkFNRSAvUkVQTEFDRTp7e2F9e1hYfX0g KgotICAgICAgICAgIENoYW5nZXMgZXZlcnkgImEiIHRvICJYWCIuIEZvciBleGFtcGxlIGEgZmls ZSBjYWxsZWQgImEuYS5hLmEiCi0gICAgICAgICAgd291bGQgYmVjb21lICJYWC5YWC5YWC5YWCIu Ci0KLSAgIFJFTkFNRSAvUkVQTEFDRTp7e2F9e1h9ezJ9fQotICAgICAgICAgIENoYW5nZXMgb25s eSB0aGUgc2Vjb25kICJhIiB0byAiWCIuIEZvciBleGFtcGxlIGEgZmlsZSBjYWxsZWQKLSAgICAg ICAgICAiYS5hLmEuYSIgd291bGQgYmVjb21lICJhLlguYS5hIi4KLQotICAgUkVOQU1FIC9SRVBM QUNFOnt7YX17WH17LTF9fQotICAgICAgICAgIENoYW5nZXMgb25seSB0aGUgZmluYWwgImEiIGlu IHRoZSBmaWxlbmFtZSAoaXQgZG9lc24ndCBoYXZlIHRvCi0gICAgICAgICAgYmUgYXQgdGhlIGVu ZCkgdG8gIlgiLiBGb3IgZXhhbXBsZSBhIGZpbGUgY2FsbGVkICJhLmIuYS5jLmEuZCIKLSAgICAg ICAgICB3b3VsZCBiZWNvbWUgImEuYi5hLmMuWC5kIi4KLQotICAgUkVOQU1FIC9SRVBMQUNFOnt7 Zm9vfXtOT1RGT099ey0yfX0KLSAgICAgICAgICBDaGFuZ2VzIHRoZSBzZWNvbmQtdG8tbGFzdCAi Zm9vIiAoaWYgYW55KSBpbiB0aGUgZmlsZW5hbWUgdG8KLSAgICAgICAgICAiTk9URk9PIi4KLQot ICAgUkVOQU1FIC9SRVBMQUNFOnt7Zm9vfXt9ey0yfX0KLSAgICAgICAgICBEZWxldGVzIHRoZSBz ZWNvbmQtdG8tbGFzdCAiZm9vIiAoaWYgYW55KSBmcm9tIHRoZSBmaWxlbmFtZS4KLQotICAgUkVO QU1FIC9SRVBMQUNFOnt7Ln17X317fjF9fQotICAgICAgICAgIENoYW5nZXMgYWxsIGJ1dCB0aGUg Zmlyc3QgcGVyaW9kIHRvIGFuIHVuZGVyc2NvcmU7IGZvciBleGFtcGxlLAotICAgICAgICAgICJh LmIuYy5kLmUiIHdvdWxkIGJlY29tZSAiYS5iX2NfZF9lIi4KLQotICAgUkVOQU1FIC9SRVBMQUNF Ont7Ln17X317fi0xfX0KLSAgICAgICAgICBDaGFuZ2VzIGFsbCBidXQgdGhlIGZpbmFsIHBlcmlv ZCB0byBhbiB1bmRlcnNjb3JlOyBmb3IgZXhhbXBsZSwKLSAgICAgICAgICAiYS5iLmMuZC5lIiB3 b3VsZCBiZWNvbWUgImFfYl9jX2QuZSIuCi0KLSAgIEluIHRoZSBPcHRpb25zIGZpZWxkLCBkaWdp dHMgKGFuZCB0aGVpciBtb2RpZmllcnMpLCBeLCBhbmQgJCBhcmUKLSAgIG11dHVhbGx5IGV4Y2x1 c2l2ZS4gSWYgeW91IGluY2x1ZGUgbW9yZSB0aGFuIG9uZSBvZiB0aGVzZSBpbiB0aGUgb3B0aW9u Ci0gICBzdHJpbmcsIG9ubHkgdGhlIGxhc3Qgb25lIGlzIHVzZWQuIFNpbWlsYXJseSBmb3IgJ2En IGFuZCAnQSc6Ci0KLSAgIFJFTkFNRSAvUkVQTEFDRTp7e2Zvb317YmFyfXtBYTIkXn19ICoKLSAg ICAgICAgICBUaGlzIHJlcGxhY2VzICJmb28iIHdpdGggImJhciIgbm8gbWF0dGVyIHdoYXQgY29t YmluYXRpb24gb2YKLSAgICAgICAgICB1cHBlciBhbmQgbG93ZXIgY2FzZSBsZXR0ZXJzIGFyZSB1 c2VkIGluICJmb28iICgnYScgb3ZlcnJpZGVzCi0gICAgICAgICAgJ0EnIGluIHRoZSBvcHRpb24g c3RyaW5nKSwgYnV0IG9ubHkgaWYgImZvbyIgaXMgYXQgdGhlIGJlZ2lubmluZwotICAgICAgICAg IG9mIHRoZSBmaWxlbmFtZSAoJ14nIG92ZXJyaWRlcyAnJCcgYW5kICcyJykuCi0KLSAgIElmIHlv dSBnaXZlIGFuIC9VUFBFUiBvciAvTE9XRVIgc3dpdGNoIGFuZCBhIC9SRVBMQUNFIHN3aXRjaCBp biB0aGUKLSAgIHNhbWUgUkVOQU1FIGNvbW1hbmQsIHRoZSAvUkVQTEFDRSBhY3Rpb24gb2NjdXJz IGZpcnN0LCB0aGVuIHRoZSBjYXNlCi0gICBjb252ZXJzaW9uOgotCi0gICBSRU5BTUUgL1JFUExB Q0U6e3tmb299e2Jhcn19IC9VUFBFUiAqIC90bXAKLSAgICAgICAgICBGb3IgZWFjaCBmaWxlOiBj aGFuZ2VzIGFsbCBvY2N1cnJlbmNlcyBvZiAiZm9vIiBpbiB0aGUgbmFtZSB0bwotICAgICAgICAg ICJiYXIiLCB0aGVuIGNvbnZlcnRzIHRoZSByZXN1bHQgdG8gdXBwZXJjYXNlLCBhbmQgdGhlbiBt b3ZlcyB0aGUKLSAgICAgICAgICBmaWxlIHRvIHRoZSAvdG1wIGRpcmVjdG9yeS4gU28gKGZvciBl eGFtcGxlKSAiZm9vdC50eHQiIHdvdWxkCi0gICAgICAgICAgYmVjb21lICIvdG1wL0JBUlQuVFhU Ii4KLQotQ2hhbmdpbmcgdGhlIENoYXJhY3RlciBFbmNvZGluZyBvZiBGaWxlbmFtZXMKLQotICAg QXMgeW91IGtub3csIHRleHQgaXMgcmVwcmVzZW50ZWQgb24gdGhlIGNvbXB1dGVyIGFzIGEgc2Vy aWVzIG9mCi0gICBudW1iZXJzLCB3aXRoIGEgZ2l2ZW4gbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8g YSBnaXZlbiBjaGFyYWN0ZXIKLSAgIGFjY29yZGluZyB0byBzb21lIGNvbnZlbnRpb24gb3Igc3Rh bmRhcmQuIEZpbGVuYW1lcyBhcmUgcmVwcmVzZW50ZWQgdGhlCi0gICBzYW1lIHdheS4gVGhlIHRy b3VibGUgaXMsIGRpZmZlcmVudCBjb21wdXRlcnMsIG9yIGV2ZW4gZGlmZmVyZW50Ci0gICBhcHBs aWNhdGlvbnMgb24gdGhlIHNhbWUgY29tcHV0ZXIsIG1pZ2h0IHVzZSBkaWZmZXJlbnQgc3RhbmRh cmRzIG9yCi0gICBjb252ZW50aW9ucyAoImNoYXJhY3RlciBzZXRzIikgZm9yIHJlcHJlc2VudGlu ZyB0aGUgc2FtZSBjaGFyYWN0ZXJzLgotICAgVXN1YWxseSBBU0NJSSBpcyBzYWZlLCBidXQgYW55 dGhpbmcgYmV5b25kIHRoYXQgLS0gbm9uLUFTQ0lJIGNoYXJhY3RlcnMKLSAgIHN1Y2ggYXMgYWNj ZW50ZWQgb3Igbm9uLVJvbWFuIGxldHRlcnMgLS0gaXMgbGlrZWx5IHRvIHZhcnkuIFNvbWV0aW1l cwotICAgeW91IGhhdmUgdGV4dCB0aGF0J3MgaW4gdGhlICJ3cm9uZyIgY2hhcmFjdGVyIHNldCBh bmQgeW91IG5lZWQgdG8KLSAgIGNvbnZlcnQgaXQgdG8gc29tZXRoaW5nIHlvdSBjYW4gY2FuIHVz ZS4gS2VybWl0IGhhcyBhbHdheXMgYmVlbiBhYmxlIHRvCi0gICBoYW5kbGUgdGhpcyBhcyBwYXJ0 IG9mIGZpbGUgdHJhbnNmZXIgYW5kIHRlcm1pbmFsIGVtdWxhdGlvbiwgYXMgd2VsbCBhcwotICAg YmVpbmcgYWJsZSB0byBjb252ZXJ0IHRleHQgZmlsZXMgbG9jYWxseSB3aXRoIGl0cyBUUkFOU0xB VEUgY29tbWFuZC4KLSAgIE5vdyB0aGVyZSdzIGEgd2F5IHRvIGNvbnZlcnQgZmlsZW5hbWVzIHRv bywgZm9yIGV4YW1wbGUgYWZ0ZXIgY29weWluZwotICAgZmlsZXMgZnJvbSBhIENEIHRoYXQgdXNl cyBhIGRpZmZlcmVudCBlbmNvZGluZzoKLQotICAgUkVOQU1FIC9DT05WRVJUOmNoYXJzZXQxOmNo YXJzZXQyIGZpbGVzcGVjIFsgZGlyZWN0b3J5IF0KLSAgICAgICAgICBDb252ZXJ0cyBmaWxlbmFt ZXMgZnJvbSB0aGUgZmlyc3QgY2hhcmFjdGVyIHNldCB0byB0aGUgc2Vjb25kCi0gICAgICAgICAg b25lLiBUaGUgdHdvIGNoYXJhY3RlciBzZXRzIGNhbiBiZSBjaG9zZW4gZnJvbSB0aGUgU0VUIEZJ TEUKLSAgICAgICAgICBDSEFSQUNURVItU0VUIGxpc3Q7IGZvciBjb21wbGV0ZSBkZXRhaWxzIHNl ZSBbNjhddGhpcyBwYWdlLiBGb3IKLSAgICAgICAgICBleGFtcGxlIHN1cHBvc2UgeW91IGhhdmUg YSBmaWxlIGNhbGxlZCAiT2xnYV9UYe+/ve+/vW4udHh0IiBvbiBhCi0gICAgICAgICAgY29tcHV0 ZXIgd2hlcmUgSVNPIDg4NTktMSBMYXRpbiBBbHBoYWJldCAxIGlzIHVzZWQsIGFuZCB5b3UgaGF2 ZQotICAgICAgICAgIHRyYW5zcG9ydGVkIGl0IChlLmcuIG9uIENEUk9NKSB0byBhbm90aGVyIGNv bXB1dGVyIHdoZXJlIHRoZQotICAgICAgICAgIHRleHQgZW5jb2RpbmcgaXMgVVRGOC4gTWF5YmUg eW91IGFsc28gaGF2ZSBhIGxvdCBvZiBvdGhlciBmaWxlcwotICAgICAgICAgIHdpdGggc2ltaWxh ciBuYW1lcyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuIFlvdSBjYW4gY29udmVydCB0aGUKLSAgICAg ICAgICBmaWxlbmFtZXMgdG8gVVRGOCBsaWtlIHRoaXM6Ci0KLSAgICAgUkVOQU1FIC9DT05WRVJU OmxhdGluMTp1dGY4ICoKLQotICAgL0NPTlZFUlQgY2FuIG5vdCBiZSBjb21iaW5lZCB3aXRoIC9V UFBFUiwgL0xPV0VSLCBvciAvUkVQTEFDRS4KLQotICAgWW91IHNob3VsZCBOT1QgdXNlIFVDUzIg Zm9yIGZpbGVuYW1lcyBzaW5jZSB0aGlzIGVuY29kaW5nIGlzIG5vdAotICAgY29tcGF0aWJsZSB3 aXRoIEMgc3RyaW5ncyB1c2VkIGluIFVuaXggYW5kIGVsc2V3aGVyZS4KLQotICAgUkVOQU1FIC9D T05WRVJUIGFmZmVjdHMgb25seSB0aGUgZmlsZW5hbWUsIG5vdCB0aGUgZmlsZSdzIGNvbnRlbnRz LiBZb3UKLSAgIGNhbiB1c2UgdGhlIFRSQU5TTEFURSBjb21tYW5kIHRvIGNvbnZlcnQgdGhlIGVu Y29kaW5nIG9mIHRoZSBjb250ZW50cwotICAgb2YgYSB0ZXh0IGZpbGUuCi0KLU90aGVyIE5ldyBG ZWF0dXJlcwotCi0gICBTZWUgdGhlIFs2OV1DLUtlcm1pdCBEYWlseSBCdWlsZHMgcGFnZSBmb3Ig ZGV0YWlscy4gVmVyeSBicmllZmx5OgotCi0gICAgICogUGVyaGFwcyBtb3N0IGltcG9ydGFudCwg bW9kZXJuaXplZCBtYWtlZmlsZSB0YXJnZXRzIGZvciB0aGUgbWFqb3IKLSAgICAgICBVbml4IHBs YXRmb3JtczogTGludXgsIE1hYyBPUyBYLCBBSVgsIFNvbGFyaXMsIGV0Yy4gVGhlc2UgYXJlCi0g ICAgICAgc29tZXdoYXQgYXV0b21hdGVkOyBub3QgYXV0b2NvbmYgZXhhY3RseSwgYnV0IHRoZXkg Y3V0IGRvd24KLSAgICAgICBzaWduaWZpY2FudGx5IG9uIHJlZHVuZGFudCB0YXJnZXRzLiBGb3Ig ZXhhbXBsZSwgb25lIHNpbmdsZSAibGludXgiCi0gICAgICAgdGFyZ2V0IHdvcmtzIG9uIG1hbnkg KGhvcGVmdWxseSBhbGwpIGRpZmZlcmVudCBMaW51eAotICAgICAgIGNvbmZpZ3VyYXRpb25zLCB3 aGVyZSBiZWZvcmUgZGlmZmVyZW50IHRhcmdldHMgd2VyZSByZXF1aXJlZCBmb3IKLSAgICAgICBk aWZmZXJlbnQgY29tYmluYXRpb25zIG9mIChlLmcuKSBjdXJzZXMgLyBuY3Vyc2VzIC8gbm8gY3Vy c2VzOwotICAgICAgIDMyLWJpdCAvIDY0LWJpdDsgZGlmZmVyZW50IGZlYXR1cmUgc2V0cyBhbmQg bGlicmFyeSBsb2NhdGlvbnMuCi0gICAgICAgKFNlcGFyYXRlIHRhcmdldHMgYXJlIHN0aWxsIHJl cXVpcmVkIGZvciBLZXJiZXJvcyBhbmQvb3IgU1NMCi0gICAgICAgYnVpbGRzLCBidXQgdGhleSBh cmUgInN1YnJvdXRpbml6ZWQiLikKLSAgICAgKiBCaWdnZXIgYnVmZmVycywgbW9yZSBzdG9yYWdl IGZvciBjb21tYW5kcywgbWFjcm9zLCBzY3JpcHRzLAotICAgICAgIHN0cmluZ3MsIGFuZCBmaWxl bmFtZSBleHBhbnNpb24gaW4gNjQtYml0IHZlcnNpb25zIGFuZCBpbiAzMi1iaXQKLSAgICAgICB2 ZXJzaW9ucyB0aGF0IHN1cHBvcnQgbGFyZ2UgZmlsZXMuCi0gICAgICogVXNlci1zZXR0YWJsZSBG VFAgdGltZW91dCwgd29ya3Mgb24gYm90aCB0aGUgZGF0YSBhbmQgY29udHJvbAotICAgICAgIGNv bm5lY3Rpb24uCi0gICAgICogRlRQIGFjY2VzcyB0byBwb3J0cyBoaWdoZXIgdGhhbiAxNjM4My4K LSAgICAgKiBCdWlsdC1pbiBGVFAgY2xpZW50IGZvciBWTVMuIFRoaXMgaXMgdGhlIFs3MF1zYW1l IEZUUCBjbGllbnQgVW5peAotICAgICAgIEMtS2VybWl0IGhhcyBoYWQgc2luY2UgdmVyc2lvbiA4 LjAsIG1pbmltYWxseSBhZGFwdGVkIHRvIFZNUyBieQotICAgICAgIFNNUywgc3VwcG9ydGluZyBi aW5hcnkgYW5kIFN0cmVhbV9MRiBmaWxlIHRyYW5zZmVyIG9ubHkgKGluIG90aGVyCi0gICAgICAg d29yZHMsIG5vdGhpbmcgdG8gaGFuZGxlIFJNUyBmaWxlcyksIGJ1dCBvdGhlcndpc2UgZnVsbHkg ZnVuY3Rpb25hbAotICAgICAgIChhbmQgc2NyaXB0YWJsZSkgYW5kIHRoZW9yZXRpY2FsbHkgY2Fw YWJsZSBvZiBtYWtpbmcgY29ubmVjdGlvbnMKLSAgICAgICBzZWN1cmVkIGJ5IFNTTCAoYXQgbGVh c3QgaXQgY29tcGlsZXMgYW5kIGxpbmtzIE9LIHdpdGggU1NMIC0gSFAgU1NMCi0gICAgICAgMS4z IGluIHRoaXMgY2FzZSkuCi0gICAgICogTGFyZ2UgZmlsZSBzdXBwb3J0IGluIFZNUywgYWxzbyBi eSBTTVMuIEFscGhhIGFuZCBJdGFuaXVtIG9ubHkgKG5vdAotICAgICAgIFZBWCkuIFZNUyBDLUtl cm1pdCB3YXMgYWxyZWFkeSBhYmxlIHRvIHRyYW5zZmVyIGxhcmdlIGZpbGVzLCBidXQKLSAgICAg ICB0aGUgZmlsZS10cmFuc2ZlciBkaXNwbGF5IChudW1iZXJzIGFuZCBwcm9ncmVzcyBiYXIpIGFu ZCBzdGF0aXN0aWNzCi0gICAgICAgd2VyZSB3cm9uZyBiZWNhdXNlIHRoZXkgdXNlZCBpbnRzLiBJ biB0aGUgcHJlc2VudCBBbHBoYSB0ZXN0Ci0gICAgICAgcmVsZWFzZSwgdGhpcyBpcyBhbiBvcHRp b25hbCBmZWF0dXJlIHJlcXVlc3RlZCBieSBpbmNsdWRpbmcgdGhlICJmIgotICAgICAgIG9wdGlv biBpbiBQMS4KLSAgICAgKiBOZXcgUFVURU5WIGNvbW1hbmQgdGhhdCBhbGxvd3MgS2VybWl0IHRv IHBhc3MgZW52aXJvbm1lbnQgdmFyaWFibGVzCi0gICAgICAgdG8gc3VicHJvY2Vzc2VzIChVbml4 IG9ubHksICJoZWxwIHB1dGVudiIpLgotICAgICAqIE5ldyBUT1VDSCBjb21tYW5kLCBtYW55IGZp bGUgc2VsZWN0aW9uIG9wdGlvbnMgKCJoZWxwIHRvdWNoIikuCi0gICAgICogTmV3IERJUkVDVE9S WSBjb21tYW5kIG9wdGlvbnMgYW5kIHN3aXRjaGVzICgvVE9QLCAvQ09VTlQ7Ci0gICAgICAgSERJ UkVDVE9SWSwgV0RJUkVDVE9SWS4uLikuIFRvIHNlZSB0aGUgdGVuIGJpZ2dlc3QgZmlsZXMgaW4g dGhlCi0gICAgICAgY3VycmVudCBkaXJlY3Rvcnk6ICJkaXIgL3RvcDoxMCAvc29ydDpzaXplIC9y ZXZlcnNlICoiIG9yCi0gICAgICAgZXF1aXZhbGVudGx5LCAiaGRpciAvdG9wOjEwICoiLiBXRElS IGxpc3RzIGZpbGVzIGluIHJldmVyc2UKLSAgICAgICBjaHJvbm9sb2dpY2FsIG9yZGVyLCBzaG9y dGhhbmQgZm9yICJkaXIgL3NvcnQ6ZGF0ZSAvcmV2ZXJzZSIuCi0gICAgICogTmV3IGNvbW1hbmQg RlNFRUsgL0ZJTkQ6c3RyaW5nLW9yLXBhdHRlcm4sIHNlZWtzIHRvIHRoZSBmaXJzdCBsaW5lCi0g ICAgICAgaW4gYW4gRk9QRU4nZCBmaWxlIHRoYXQgY29udGFpbnMgdGhlIGdpdmVuIHN0cmluZyBv ciBtYXRjaGVzIHRoZQotICAgICAgIGdpdmVuIHBhdHRlcm4uIEV4YW1wbGU6IFN1cHBvc2UgeW91 IGhhdmUgYSBmaWxlIG9mIGxpbmVzIGxpa2UgdGhpczoKLQotICAgICBxdWFudGl0eSAgIGRlc2Ny aXB0aW9uLi4uCi0gICAgICAgaW4gd2hpY2ggdGhlIGZpcnN0ICJ3b3JkIiBpcyBhIG51bWJlciwg Zm9sbG93ZWQgYnkgYSBkZXNjcmlwdGlvbgotICAgICAgIChmb3IgZXhhbXBsZSwgdGhlIG5hbWUg b2YgYW4gaXRlbSkuIEhlcmUgaXMgaG93IHRvIHVzZSBGU0VFSyB0bwotICAgICAgIHF1aWNrbHkg Z2V0IHRoZSB0b3RhbCBxdWFudGl0eSBvZiBhbnkgZ2l2ZW4gaXRlbSwgd2hpY2ggaXMgcGFzc2Vk Ci0gICAgICAgYXMgYSBwYXJhbWV0ZXIgKGVpdGhlciBhIGxpdGVyYWwgc3RyaW5nIG9yIGEgcGF0 dGVybikgb24gdGhlCi0gICAgICAgY29tbWFuZCBsaW5lOgotCi0jIS91c3IvbG9jYWwvYmluL2tl cm1pdCArCi1pZiBub3QgZGVmIFwlMSBleGl0IDEgVXNhZ2U6IFxmYmFzZW5hbWUoXCUwKSBzdHJp bmctb3ItcGF0dGVybgotCi0uZmlsZW5hbWUgPSAvdXNyL2xvY2FsL2RhdGEvaXRlbXMubG9nICAg ICAgICAjIFN1YnN0aXR1dGUgdGhlIGFjdHVhbCBmaWxlbmFtZQotc2V0IGNhc2Ugb2ZmICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBTZWFyY2hlcyBhcmUgY2FzZS1pbmRlcGVuZGVu dAotZm9wZW4gL3JlYWQgXCVjIFxtKGZpbGVuYW1lKSAgICAgICAgICAgICAgICAgIyBPcGVuIHRo ZSBmaWxlCi1pZiBmYWlsIGV4aXQgMSAiXG0oZmlsZW5hbWUpOiBcdihlcnJzdHJpbmcpIiAjIEZh aWw6IGV4aXQgd2l0aCBlcnJvciBtZXNzYWdlCi0udG90YWwgPSAwICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjIE9LOiBJbml0aWFsaXplIHRoZSB0b3RhbAotZWNobyBTZWFyY2hp bmcgIlwlMSIuLi4KLQotd2hpbGUgdHJ1ZSB7Ci0gICAgZnNlZWsgL2xpbmUgL3JlbGF0aXZlIC9m aW5kOlwlMSBcJWMgMCAgICAjIEdldCBuZXh0IGxpbmUgdGhhdCBoYXMgdGFyZ2V0Ci0gICAgaWYg ZmFpbCBicmVhayAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEZhaWx1cmUgaW5kaWNhdGVz IEVPRgotICAgIGZyZWFkIC9saW5lIFwlYyBsaW5lICAgICAgICAgICAgICAgICAgICAgIyBSZWFk IGl0Ci0gICAgaWYgZmFpbCBicmVhayAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChzaG91 bGRuJ3QgaGFwcGVuKQotICAgIGluY3JlbWVudCB0b3RhbCBcZndvcmQoXG0obGluZSksMSkgICAg ICAgIyBJbmNyZW1lbnQgdGhlIHRvdGFsCi19Ci1mY2xvc2UgXCVjICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjIENsb3NlIHRoZSBmaWxlCi1lY2hvIFRvdGFsIGZvciAiXCUxIiA6 IFxtKHRvdGFsKSAgICAgICAgICAgICAjIFByaW50IHRoZSByZXN1bHQKLWV4aXQgMAotCi0gICAg ICAgVGhlIHN5bnRheCBvZiB0aGUgRlNFRUsgY29tbWFuZCBpbiB0aGlzIGV4YW1wbGUgaW5kaWNh dGVzIHRoYXQgZWFjaAotICAgICAgIHNlYXJjaCBzaG91bGQgc3RhcnQgcmVsYXRpdmUgdG8gdGhl IGN1cnJlbnQgZmlsZSBsaW5lLiBTaW5jZSBLZXJtaXQKLSAgICAgICBpcyBhbiBpbnRlcnByZXRp dmUgbGFuZ3VhZ2UsIEZTRUVLIGlzIGEgbG90IGZhc3RlciB0aGFuIEZSRUFEJ2luZwotICAgICAg IGVhY2ggbGluZSBhbmQgY2hlY2tpbmcgaXQgZm9yIHRoZSB0YXJnZXQsIGVzcGVjaWFsbHkgZm9y IGJpZyBmaWxlcy4KLSAgICAgICBBbiBlc3BlY2lhbGx5IGhhbmR5IHVzZSBmb3IgRlNFRUsgaXMg Zm9yIHVzZSB3aXRoIHBvdGVudGlhbGx5IGh1Z2UKLSAgICAgICBzZXF1ZW50aWFsbHkgdGltZXN0 YW1wZWQgbG9ncywgdG8gc2VlayBkaXJlY3RseSB0byB0aGUgZGF0ZS10aW1lCi0gICAgICAgd2hl cmUgeW91IHdhbnQgdG8gc3RhcnQgcHJvY2Vzc2luZy4gU29tZSBvdGhlciBpbXByb3ZlbWVudHMg Zm9yIHRoZQotICAgICAgIEZPUEVOL0ZSRUFEL0ZXUklURS9GQ0xPU0UgZmFtaWx5IG9mIGNvbW1h bmRzIGFyZSBpbmNsdWRlZCBhbHNvCi0gICAgICAgKHBlcmZvcm1hbmNlLCBidWcgZml4ZXMsIGNv bnZlbmllbmNlIGZlYXR1cmVzKSwgbGlzdGVkIGluIHRoZQotICAgICAgIFs3MV1jaGFuZ2UgbG9n LiAoUHJpb3IgdG8gOS4wLjI5OSBBbHBoYS4wMiwgdGhlIEZTRUVLIC9GSU5EOgotICAgICAgIGNv bW1hbmQgYWx3YXlzIHN0YXJ0ZWQgZnJvbSB0aGUgdG9wLikKLSAgICAgKiBNSU1FIHN5bm9ueW1z IGZvciBjaGFyYWN0ZXItc2V0IG5hbWVzOiBBIG5ldyBlcXVpdmFsZW5jZSBiZXR3ZWVuCi0gICAg ICAgTUlNRSBuYW1lcyBhbmQgS2VybWl0IG5hbWVzIGZvciBjaGFyYWN0ZXIgc2V0cywgd2l0aCBh IG5ldyB0YWJsZQotICAgICAgIHNob3dpbmcgdGhlIHN1cHBvcnRlZCBzZXRzIFs3Ml1IRVJFICh0 aGlzIGZlYXR1cmUgaXMgYWxzbwotICAgICAgIGlsbHVzdHJhdGVkIGluIHRoZSBbNzNdV2VibG9n IHNjcmlwdCkuCi0gICAgICogVW5peCBDLUtlcm1pdCBTRVQgVEVSTUlOQUwgVFlQRSBub3cgcGFz c2VzIGl0cyBhcmd1bWVudHMgdG8KLSAgICAgICBzdWJwcm9jZXNzZXMgYXMgYW4gZW52aXJvbm1l bnQgdmFyaWFibGUuCi0gICAgICogU0VUIFNFU1NJT04tTE9HIFRFWFQgbm93IHN0cmlwcyBvdXQg QU5TSSBlc2NhcGUgc2VxdWVuY2VzIGZyb20gdGhlCi0gICAgICAgc2Vzc2lvbiBsb2cuCi0gICAg ICogRm9yIGludGVyYWN0aW5nIHdpdGggUE9QIHNlcnZlcnMgb3ZlciBjbGVhci10ZXh0IG9yIFNT TC1zZWN1cmVkCi0gICAgICAgY29ubmVjdGlvbnM6Ci0gICAgICAgICAgKyBOZXcgU1NMIGFuZCBU TFMgInJhdyIgY29ubmVjdGlvbnMgKG5vIFRlbG5ldCBwcm90b2NvbCkuCi0gICAgICAgICAgKyBO ZXcgSU5QVVQgY29tbWFuZCBvcHRpb25zIGZvciByZWFkaW5nIGFuZCBjYXB0dXJpbmcgKHBlcmhh cHMKLSAgICAgICAgICAgIHdoaWxlIHNjYW5uaW5nKSBjb250aW51b3VzIGluY29taW5nIHRleHQs IHN1Y2ggYXMgSU5QVVQKLSAgICAgICAgICAgIC9OT1dSQVAgKGV4cGxhaW5lZCBbNzRdSEVSRSku Ci0gICAgICAgICAgKyBOZXcgXGZlbWFpbGFkZHJlc3MoKSBjb21tYW5kIHRvIGV4dHJhY3QgdGhl IGUtbWFpbCBhZGRyZXNzCi0gICAgICAgICAgICBmcm9tIGFuIEludGVybmV0IG1haWwgbWVzc2Fn ZSBUbzogb3IgRnJvbTogbGluZSwgdXNlZCBpbgotICAgICAgICAgICAgZmV0Y2hpbmcgbWFpbCBm cm9tIFBPUCBzZXJ2ZXJzLgotICAgICAgICAgICsgSW1wcm92ZWQgZGF0ZSBwYXJzaW5nIGNvbW1h bmRzIGFuZCBmdW5jdGlvbnMgZm9yIHBhcnNpbmcgdGhlCi0gICAgICAgICAgICBkaWZmZXJlbnQg ZGF0ZSBmb3JtYXRzIHRoYXQgY2FuIGFwcGVhciBpbiBlLW1haWwuCi0gICAgICAgICAgKyBQcm9k dWN0aW9uIHNjcmlwdHMgZm9yIGZldGNoaW5nIG1haWwgZnJvbSBhIHNlY3VyZSBQT1Agc2VydmVy LAotICAgICAgICAgICAgYXZhaWxhYmxlIFs3NV1IRVJFLgotICAgICAqIFZhcmlvdXMgZmVhdHVy ZXMgYWRkZWQgdG8gbWFrZSBLZXJtaXQgbW9yZSB1c2VmdWwgZm9yIHdyaXRpbmcgQ0dJCi0gICAg ICAgc2NyaXB0cyBzdWNoIGFzIElOUFVUIC9DT1VOVDpuIHRvIElOUFVUIGV4YWN0bHkgbiBjaGFy YWN0ZXJzCi0gICAgICAgKHVzZWZ1bCBmb3IgcmVhZGluZyBmb3JtIGRhdGEpLgotICAgICAqIE5l dyBcZnBpY3R1cmVpbmZvKCkgZnVuY3Rpb24gZm9yIGdldHRpbmcgb3JpZW50YXRpb24gYW5kIGRp bWVuc2lvbnMKLSAgICAgICBvZiBKUEcgYW5kIEdJRiBpbWFnZXMsIGRlc2NyaWJlZCBbNzZdSEVS RS4KLSAgICAgKiBOZXcgXGZnZXRwaWRpbmZvKCkgZnVuY3Rpb24gZm9yIHRlc3Rpbmcgd2hldGhl ciBhIGdpdmVuIHByb2Nlc3MKLSAgICAgICBleGlzdHMuCi0gICAgICogXGZrd2R2YWx1ZSgpIGZ1 bmN0aW9uIGZpeGVkIHRvIGFsbG93IG11bHRpd29yZCB2YWx1ZXMuCi0gICAgICogTmV3IGZ1bmN0 aW9uIFxmY291bnQoczEsczIpIHRvIHRlbGwgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiBz MQotICAgICAgIGluIHMyLgotICAgICAqIE5ldyBcZmxvcHgoKSBmdW5jdGlvbiByZXR1cm5zIHJp Z2h0bW9zdCBmaWVsZCBmcm9tIHN0cmluZyAoc3VjaCBhcwotICAgICAgIGEgZmlsZSdzIGV4dGVu c2lvbikuCi0gICAgICogTmV3IGZ1bmN0aW9uIFxmZnVuY3Rpb24oczEpIHRvIHRlbGwgd2hldGhl ciBhIGJ1aWx0LWluIHMxIGZ1bmN0aW9uCi0gICAgICAgZXhpc3RzLgotICAgICAqIE5ldyBcZnNx dWVlemUoczEpIGZ1bmN0aW9uIHJlbW92ZXMgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFj ZQotICAgICAgIGZyb20gc3RyaW5nIHMxLCBjaGFuZ2VzIHRhYnMgdG8gc3BhY2VzLCBzcXVlZXpp bmcgZWFjaCBydW4gb2YKLSAgICAgICByZXBlYXRlZCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgdG8g YSBzaW5nbGUgc3BhY2UuCi0gICAgICogQ29tcGFjdCBzdWJzdHJpbmcgbm90YXRpb246IFxzKHNv bWVzdHJpbmdbMTI6MThdKSBpcyB0aGUgc2FtZSBhcwotICAgICAgIFxmc3Vic3RyaW5nKFxtKHNv bWVzdHJpbmcpLDEyLDE4KSwgaS5lLiB0aGUgc3Vic3RyaW5nIHN0YXJ0aW5nIGF0Ci0gICAgICAg cG9zaXRpb24gMTIsIDE4IGNoYXJhY3RlcnMgbG9uZy4gXHMoc29tZXN0cmluZ1sxMl8xOF0pIG1l YW5zCi0gICAgICAgY2hhcmFjdGVycyAxMiB0aHJvdWdoIDE4IG9mIHRoZSBzdHJpbmcgKDcgY2hh cmFjdGVycykuIEFsc28sCi0gICAgICAgXHMoc29tZXN0cmluZ1sxNy5dKSByZXR1cm5zIGNoYXJh Y3RlciBudW1iZXIgMTcgb2Ygc29tZXN0cmluZy4KLSAgICAgKiBUaGUgc3RyaW5nIGluZGV4aW5n IGZ1bmN0aW9ucyBub3cgYWNjZXB0IGFuIG9wdGlvbmFsIHRyYWlsaW5nCi0gICAgICAgYXJndW1l bnQgc3BlY2lmeWluZyB0aGUgb2NjdXJyZW5jZSBudW1iZXIgb2YgdGhlIHRhcmdldCBzdHJpbmcu Ci0gICAgICAgTGlrZXdpc2UsIFxmd29yZCgpIGNhbiBmZXRjaCB3b3JkcyBmcm9tIHRoZSByaWdo dCBhcyB3ZWxsIGFzIHRoZQotICAgICAgIGxlZnQuCi0gICAgICogVGhlIENPUFkgY29tbWFuZCBp biBVbml4IEMtS2VybWl0IGhhcyBhIG5ldyAvUFJFU0VSVkUgc3dpdGNoLAotICAgICAgIGVxdWl2 YWxlbnQgdG8gVW5peCAiY3AgLXAiLgotICAgICAqIEFTS1EgL0VDSE86YyBjYW4gYmUgdXNlZCB0 byBtYWtlIHRoZSBjaGFyYWN0ZXJzIHRoZSB1c2VyIHR5cGVzIGVjaG8KLSAgICAgICBhcyB0aGUg Y2hhcmFjdGVyIGMsIGUuZy4gYXN0ZXJpc2sgd2hlbiB0eXBpbmcgYSBwYXNzd29yZC4KLSAgICAg KiBJRiBMSU5LIGZpbGVuYW1lIHRvIHRlc3QgaWYgdGhlIGZpbGVuYW1lIGlzIGEgc3ltbGluay4K LSAgICAgKiBDdHJsLUssIHdoZW4gdHlwZWQgYXQgdGhlIGNvbW1hbmQgcGFyc2VyLCByZXBsYWNl cyBpdHNlbGYgd2l0aCBtb3N0Ci0gICAgICAgcmVjZW50bHkgZW50ZXJlZCBmaWxlIHNwZWNpZmlj YXRpb24uCi0gICAgICogSW4gVW5peCwgdGhlIGFiaWxpdHkgdG8gbG9nIGEgdGVybWluYWwgc2Vz c2lvbiB0byBhIHNlcmlhbCBwb3J0LAotICAgICAgIGZvciB1c2Ugd2l0aCBzcGVha2luZyBkZXZp Y2VzIG9yIHNlcmlhbCBwcmludGVyczsgZGVzY3JpYmVkCi0gICAgICAgWzc3XUhFUkUuIEFsc28g Zm9yIHRoZSBzYW1lIHB1cnBvc2UsIFNFVCBTRVNTSU9OLUxPRwotICAgICAgIE5VTEwtUEFEREVE LUxJTkVTIGZvciBhIHNwZWVjaCBzeW50aGVzaXplciB0aGFuIG5lZWRlZCB0aGlzLgotICAgICAq IEFkYXB0YXRpb24gdG8gT3BlblNTTCAwLjkuOCBhbmQgMS4wLjAuCi0gICAgICogTGlmdGVkIHRo ZSByZXN0cmljdGlvbiBvbiBoYXZpbmcgYSByZW1vdGUgS2VybWl0IHByb2dyYW0gc2VuZAotICAg ICAgIFJFTU9URSBjb21tYW5kcyB0byB0aGUgbG9jYWwuIEEgdmVyeSBiaWcgZXgtY2xpZW50IG5l ZWRlZCB0byBiZQotICAgICAgIGFibGUgdG8gZG8gdGhpcyAoYnJhbmNoZXMgd291bGQgY29ubmVj dCB0byBoZWFkcXVhcnRlcnMgYW5kIHVwbG9hZAotICAgICAgIGZpbGVzOyBIUSB3b3VsZCB0aGVu IGRvd25sb2FkIHBhdGNoZXMsIGEgUkVNT1RFIEhPU1QgY29tbWFuZCB3YXMKLSAgICAgICBuZWNl c3NhcnkgdG8gYWxsb3cgdGhlIHJlbW90ZSBoZWFkcXVhcnRlcnMgbWFjaGluZXMgdG8gaW5zdGFs bCB0aGUKLSAgICAgICBwYXRjaGVzIG9uIHRoZSBsb2NhbCBjbGllbnQ7IG9mIGNvdXJzZSB0aGUg Y2xpZW50IGZpcnN0IGhhcyB0bwotICAgICAgIEVOQUJMRSBIT1NUIGJlY2F1c2UgdGhpcyBpcyBh IHJpc2t5IHNjZW5hcmlvKS4gVGhlIHJlYXNvbiBmb3IgdGhlCi0gICAgICAgcmVzdHJpY3Rpb24g d2FzIHRoYXQgdGhlIHNlcnZlciwgdXBvbiByZWNlaXZpbmcgYW55IFJFTU9URSBjb21tYW5kCi0g ICAgICAgd291bGQgc2VuZCB0aGUgcmVzdWx0cyAob3V0cHV0KSBiYWNrIHRvIHRoZSBjbGllbnQg YXMgYSBmaWxlCi0gICAgICAgdHJhbnNmZXIgd2l0aCAiZGVzdGluYXRpb24gc2NyZWVuIiwgYnV0 IG9mIGNvdXJzZSB0aGUgcmVtb3RlIGhhcyBubwotICAgICAgIHNjcmVlbi4KLSAgICAgKiBBZGRl ZCBYTUVTU0FHRSwgd2hpY2ggaXMgdG8gWzc4XU1FU1NBR0UgYXMgWEVDSE8gaXMgRUNITzogaXQK LSAgICAgICBvdXRwdXRzIGEgc3RyaW5nIHdpdGggbm8gbGluZSB0ZXJtaW5hdG9yIERFQlVHIE1F U1NBR0UgaXMgT04uCi0gICAgICogRml4ZWQgXGZyZWN1cnNlKCkgdG8gbm90IGR1bXAgY29yZSB3 aGVuIGludm9rZWQgd2l0aCBubyBhcmd1bWVudHMuCi0gICAgICogSW1wcm92ZWQgdGV4dCBmb3Ig SEVMUCBGVU5DVElPTiBTUExJVCBhbmQgSEVMUCBGVU5DVElPTiBXT1JELgotICAgICAqIFBhdGNo ZXMgZm9yIERlYmlhbiA2LjAgIlNxdWVlemUiIGZyb20gSWFuIEJlY2t3aXRoLgotICAgICAqIFxm Y29udGVudHMoXCZhWzNdKSBnb3QgYW4gZXJyb3IgaWYgdGhlIGFycmF5IHdhcyBkZWNsYXJlZCBi dXQgaXRzCi0gICAgICAgZGltZW5zaW9uIHdhcyBsZXNzIHRoYW4gMy4gTm93IGl0IHNpbXBseSBy ZXR1cm5zIGFuZCBlbXB0eSBzdHJpbmcuCi0gICAgICogXGZzcGxpdCgpLCB3aGVuIHBhcnNpbmcg bGluZXMgZnJvbSBDU1YgYW5kIFRTViBmaWxlcywgd2FzIHRyZWF0aW5nCi0gICAgICAgYmFja3Ns YXNoIGluIHRoZSBkYXRhIHRoZSBzYW1lIHdheSBpdCB0cmVhdHMgYmFja3NsYXNoIGluIEtlcm1p dAotICAgICAgIGNvbW1hbmRzLiBUaGlzIHdhcyBmaXhlZCB0byB0cmVhdCBiYWNrc2xhc2ggbGlr ZSBhbnkgb3RoZXIKLSAgICAgICBjaGFyYWN0ZXIuCi0gICAgICogQnVpbGRzIGZvciBTb2xhcmlz IDkgYW5kIGxhdGVyIG5vdyB1c2Ugc3RyZWFtcyBwdHlzIHJhdGhlciB0aGVuIHRoZQotICAgICAg IG9sZCBCU0Qtc3R5bGUgcHR5cy4gVGhhbmtzIHRvIEdhcnkgTWlsbHMgZm9yIHRoaXMgb25lLCB3 aG8gbm90aWNlZAotICAgICAgIHRoYXQgaGUgY291bGRuJ3QgaGF2ZSBtb3JlIHRoYW4gNDggQy1L ZXJtaXQgU1NIIHNlc3Npb25zIGdvaW5nIGF0Ci0gICAgICAgb25jZSBhbmQgZmlndXJlZCBvdXQg d2h5LgotICAgICAqIEFzIG5vdGVkIFs3OV1iZWxvdyBERVMgZW5jcnlwdGlvbiBpcyBiZWluZyBy ZXRpcmVkIGZyb20gbWFueQotICAgICAgIHBsYXRmb3JtcyBhbmQgbGlicmFyaWVzIHRoYXQgb25j ZSB1c2VkIGl0LiBJIGNoYW5nZWQgdGhlIFNvbGFyaXMKLSAgICAgICBhbmQgTGludXggT3BlblNT TCBidWlsZHMgdG8gYWNjb3VudCBmb3IgdGhpcyBieSB0ZXN0aW5nIGZvciBpdC4gSQotICAgICAg IHByb2JhYmx5IHNob3VsZCBhbHNvIGFkZCBhIE9NSVRERVMgb3B0aW9uIHRvIG9taXQgREVTIGV2 ZW4gaWYgaXQgaXMKLSAgICAgICBpbnN0YWxsZWQsIGJ1dCAiS0ZMQUdTPS1VQ0tfREVTIiBzZWVt cyB0byBkbyB0aGUgam9iIGZvciBub3cuCi0gICAgICogSSBjaGFuZ2VkIHRoZSBMaW51eCBidWls ZCB0byB0ZXN0IGZvciB0aGUgT3BlblNTTCB2ZXJzaW9uIChsaWtlIHRoZQotICAgICAgIFNvbGFy aXMgdmVyc2lvbiBhbHJlYWR5IGRpZCksIHJhdGhlciB0aGFuIGFzc3VtaW5nIE9wZW5TU0wgMC45 LjcuCi0gICAgICogQSBjb3VwbGUgbWlub3IgY2hhbmdlcyBmb3IgVHJ1NjQgVW5peCA1LjFCIGZy b20gU3RldmVuIFNjaHdlZGEgYnV0Ci0gICAgICAgd2Ugc3RpbGwgaGF2ZSBzb21lIHRyb3VibGUg b24gdGhhdCBwbGF0Zm9ybS4gQXMgYSB3b3JrYXJvdW5kICJtYWtlCi0gICAgICAgb3NmMSIgY2Fu IGJlIHVzZWQgdGhlcmUuCi0gICAgICogVW5peCBtYWtlZmlsZSBhbmQgbWFuIHBhZ2UgYXJlIG5v dyBpbmNsdWRlZCBpbiB0aGUgWmlwCi0gICAgICAgZGlzdHJpYnV0aW9uLgotICAgICAqIFxmam9p bigpLCB3aGljaCBpcyB0aGUgaW52ZXJzZSBmdW5jdGlvbiBvZiBmc3BsaXQoKSBub3cgYWNjZXB0 cyBDU1YKLSAgICAgICBhbmQgVFNWIGFzIGEgc2Vjb25kIGFyZ3VtZW50LCB0byB0cmFuc2Zvcm0g YW4gYXJyYXkgaW50byBhCi0gICAgICAgY29tbWEtc2VwYXJhdGVkIG9yIHRhYi1zZXBhcmF0ZWQg dmFsdWUgbGlzdCwgYXMgZGVzY3JpYmVkIFs4MF1IRVJFLgotICAgICAqIEV2ZW4gaW4gMjAxMCwg VW5peCBkaXN0cmlidXRpb25zIGNvbnRpbnVlIHRvIGNoYW5nZSB0aGVpciBVVUNQCi0gICAgICAg bG9ja2ZpbGUgY29udmVudGlvbnMuIEMtS2VybWl0IDkuMCBjb250YWlucyBzdXBwb3J0IGZyb20g Sm9vcAotICAgICAgIEJvb25lbiBmb3IgT3BlblN1U0UgPj0gMTEuMyBhbmQgcmVjZW50IERlYmlh biwgd2hpY2ggbm8gbG9uZ2VyIGhhdmUKLSAgICAgICBiYXVkYm95LmgsIHdoaWNoIGZpcnN0IGFw cGVhcmVkIGluIFJlZCBIYXQgNy4yIGluIDIwMDMuCi0gICAgICogRnJvbSBMZXdpcyBNY0NhcnRo eToKLQotICAgICBCYXNlZCBvbiBjb2RlIGluc3BlY3Rpb24sIEMtS2VybWl0IGFwcGVhcnMgdG8g aGF2ZSBhbiBTU0wtcmVsYXRlZAotICAgICBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGFuYWxvZ291 cyB0byB0aGF0IGlkZW50aWZpZWQgYXMgQ1ZFLTIwMDktMzc2NwotICAgICAoc2VlIGUuZy4KLSAg ICAgWzgxXWh0dHA6Ly9jdmUubWl0cmUub3JnL2NnaS1iaW4vY3ZlbmFtZS5jZ2k/bmFtZT1DVkUt MjAwOS0zNzY3KS4KLQotICAgICBJJ20gYXR0YWNoaW5nIGEgcGF0Y2ggZm9yIHRoaXMgaXNzdWUg cmVsYXRpdmUgdG8gdGhlIHJldmlzaW9uIG9mCi0gICAgIGNrX3NzbC5jIG9idGFpbmVkIGZyb20g YSBjb3B5IG9mCi0gICAgIFs4Ml1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvZnRwL3Rl c3QvdGFyL3guemlwIGRvd25sb2FkZWQgb24KLSAgICAgMjAxMC8wNy8zMCwgd2hpY2ggSSBiZWxp ZXZlIGlzIHRoZSBsYXRlc3QuCi0gICAgIFdoZW4gdGhpcyBmbGF3IHdhcyBmaXJzdCB3aWRlbHkg cHVibGljaXplZCBhdCBsYXN0IHllYXIncyBCbGFjayBIYXQKLSAgICAgY29uZmVyZW5jZSwgaXQg d2FzIGNsYWltZWQgdGhhdCBzb21lIHB1YmxpYyBjZXJ0aWZpY2F0ZSBhdXRob3JpdGllcwotICAg ICBoYWQgaW5kZWVkIGlzc3VlZCBjZXJ0aWZpY2F0ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIGV4 cGxvaXQgdGhpcwotICAgICBjbGFzcyBvZiB2dWxuZXJhYmlsaXR5LiBBcyBmYXIgYXMgSSBrbm93 IHRoZXkgaGF2ZSBub3QgcmV2ZWFsZWQKLSAgICAgc3BlY2lmaWNhbGx5IHdoaWNoIHB1YmxpYyBD QShzKSBoYWQgYmVlbiBmb3VuZCBpc3N1aW5nIHN1Y2gKLSAgICAgY2VydGlmaWNhdGVzLiBTb21l IHJlZmVyZW5jZXM6Ci0gICAgICAgICAgKyBbODNdaHR0cDovL3d3dy5tc2VjbGFiLmNvbS8/cD0x ODAKLSAgICAgICAgICArIFs4NF1odHRwOi8vd3d3LnRoZXJlZ2lzdGVyLmNvLnVrLzIwMDkvMDcv MzAvdW5pdmVyc2FsX3NzbF9jZXJ0Ci0gICAgICAgICAgICBpZmljYXRlLwotCi0gICAgICogUGV0 ZXIgRWljaGhvcm4gcmVwb3J0ZWQgdGhhdCAiUkVOQU1FIC4uL3ggLiIgZGlkbid0IHdvcms7IGZp eGVkCi0gICAgICAgbm93LgotICAgICAqIElmIG9ubHkgb25lIGZpbGUgaXMgRk9QRU4nZCwgRkNM T1NFIGdpdmVuIHdpdGggbm8gYXJndW1lbnRzIHdvdWxkCi0gICAgICAgY2xvc2UgaXQ7IHRoaXMg d2FzIGEgImNvbnZlbmllbmNlIGZlYXR1cmUiIHRoYXQgdHVybmVkIG91dCB0byBiZQotICAgICAg IGRhbmdlcm91cy4gRm9yIHNhZmV0eSBGQ0xPU0UgaGFzIHRvIHJlcXVpcmUgYSBzcGVjaWZpYyBj aGFubmVsCi0gICAgICAgbnVtYmVyIG9yIHRoZSB3b3JkIEFMTC4KLSAgICAgKiBBZGRlZCBcZnN0 cmNtcChzMSxzMixjYXNlLHN0YXJ0LGxlbmd0aCksIHdoaWNoIGhhcyB0aGUgYWR2YW50YWdlCi0g ICAgICAgb3ZlciBJRiBFUVUsTEdULExMVCB0aGF0IGNhc2Ugc2Vuc2l0aXZpdHkgY2FuIGJlIHNw ZWNpZmllZCBhcyBhCi0gICAgICAgZnVuY3Rpb24gYXJnLCBhbmQgYWxzbyBzdWJzdHJpbmdzIGNh biBiZSBzcGVjaWZpZWQuCi0gICAgICogTmV3IGJ1aWx0LWluIGZ1bmN0aW9uczoKLQotICAgICAg ICBcZmN2dGNzZXRzKHN0cmluZyxjczEsY3MyKQotICAgICAgICAgICAgICAgIEZ1bmN0aW9uIHRv IGNvbnZlcnQgYSBzdHJpbmcgZnJvbSBvbmUgY2hhcmFjdGVyIHNldCB0bwotICAgICAgICAgICAg ICAgIGFub3RoZXIuCi0KLSAgICAgICAgXGZkZWNvZGVoZXgoc3RyaW5nWyxwcmVmaXhdKQotICAg ICAgICAgICAgICAgIEZ1bmN0aW9uIHRvIGRlY29kZSBhIHN0cmluZyBjb250YWluaW5nIGhleCBl c2NhcGVzLgotCi0gICAgICAgIFxmc3RyaW5ndHlwZShzdHJpbmcpCi0gICAgICAgICAgICAgICAg RnVuY3Rpb24gdG8gdGVsbCB3aGV0aGVyIGEgc3RyaW5nIGlzIDctYml0LCA4LWJpdCwgb3IKLSAg ICAgICAgICAgICAgICBVVEYtOC4KLQotICAgICAgIEZvciB0aGUgbW90aXZhdGlvbiBmb3IgdGhl c2UgZmVhdHVyZXMgYW5kIGFuIGFwcGxpY2F0aW9uIHRoYXQgdXNlcwotICAgICAgIHRoZW0gdG8g YW5hbHl6ZSB3ZWIgbG9ncywgc2VlIHRoZSBXZWJsb2cgc2NyaXB0IGJlbG93LgotICAgICAqCi0K LSAgICAgICAgTGF6eSBJRiBDb25kaXRpb25zOiBOb3cgeW91IGNhbiBkbyB0aGlzOgotICAgICAg ICAgICAgICAgIGRlZmluZSBmb28gc29tZSBudW1iZXIKLSAgICAgICAgICAgICAgICBpZiBmb28g Y29tbWFuZAotCi0gICAgICAgIGluc3RlYWQgb2YgdGhpczoKLSAgICAgICAgICAgICAgICBkZWZp bmUgZm9vIHNvbWUgbnVtYmVyCi0gICAgICAgICAgICAgICAgaWYgXG0oZm9vKSBjb21tYW5kCi0K LSAgICAgICBPZiBjb3Vyc2UgdGhlIG9sZCB3YXkgc3RpbGwgd29ya3MgdG9vLiBCdXQgd2F0Y2gg b3V0IGJlY2F1c2UgaWYgdGhlCi0gICAgICAgdmFyaWFibGUgbmFtZSBpcyB0aGUgc2FtZSBhcyBh IHN5bWJvbGljIElGIGNvbmRpdGlvbiAoZm9yIGV4YW1wbGUKLSAgICAgICBDT1VOVCksIGl0IHdv bid0IGRvIHdoYXQgeW91IGV4cGVjdGVkLiAoSUYgQ09VTlQgd2FzIHVzZWQgZm9yIGxvb3AKLSAg ICAgICBjb250cm9sIGluIGVhcmx5IHZlcnNpb25zIG9mIE1TLURPUyBLZXJtaXQsIGJlZm9yZSBp dCBnb3QgcmVhbCBGT1IKLSAgICAgICBhbmQgV0hJTEUgbG9vcHM7IGl0IHdhcyBhZGRlZCB0byBD LUtlcm1pdCBmb3IgY29tcGF0aWJpbGl0eSwgYW5kIGl0Ci0gICAgICAgY2FuJ3QgYmUgcmVtb3Zl ZCBiZWNhdXNlIHRoYXQgY291bGQgYnJlYWsgZXhpc3Rpbmcgc2NyaXB0cykuCi0gICAgICogRXNj YXBlIHNlcXVlbmNlcyBhcmUgbm93IHN0cmlwcGVkIGZyb20gdGV4dC1tb2RlIHNlc3Npb24gbG9n cyBub3QKLSAgICAgICBvbmx5IGluIENPTk5FQ1Qgc2Vzc2lvbnMgYnV0IGFsc28gaW4gd2hhdGV2 ZXIgaXMgbG9nZ2VkIGJ5IHRoZQotICAgICAgIElOUFVUIGNvbW1hbmQ7IGRlc2NyaWJlZCBpbiB0 aGUgWzg1XW5leHQgc2VjdGlvbi4KLSAgICAgKiBOZXcgY29tbWFuZHMgZm9yIHNlbGVjdGl2ZWx5 IGlzc3VpbmcgcHJvZ3Jlc3Mgb3IgZGVidWdnaW5nIG1lc3NhZ2VzCi0gICAgICAgZnJvbSBzY3Jp cHRzLCBhbHNvIGRlc2NyaWJlZCBpbiB0aGUgbmV4dCBzZWN0aW9uLgotICAgICAqIEZpeCBmcm9t IFs4Nl1Kb2huIER1bmxhcCB0byBwcmV2ZW50IHRoZSBmaXhlZCBwYWNrZXQtdGltZW91dAotICAg ICAgIGludGVydmFsIGZyb20gZ29pbmcgdG8gYW4gdW5leHBlY3RlZCB2YWx1ZS4KLSAgICAgKiBB bHBoYS4wNCBmaXhlcyBhIHByb2JsZW0gd2l0aCBGVFAgY29ubmVjdGlvbnMgbWFkZSBmcm9tIDY0 LWJpdCBVbml4Ci0gICAgICAgcGxhdGZvcm1zLiBBbGwgdGhlIG90aGVyIGNoYW5nZXMgaW4gdGhp cyBzZWN0aW9uIHdlcmUgdG8gQWxwaGEuMDMuCi0gICAgICogUmVsYXVuY2hpbmcgYSBjbG9zZWQg U1NIIGNvbm5lY3Rpb24gd2l0aCB0aGUgQ09OTkVDVCBjb21tYW5kIGlzIG5vdwotICAgICAgIHBv c3NpYmxlLCBhcyBpdCBhbHdheXMgaGFzIGJlZW4gd2l0aCBUZWxuZXQgYW5kIG90aGVyIGNvbm5l Y3Rpb24KLSAgICAgICB0eXBlczsgc3VnZ2VzdGVkIGJ5IFBldGVyIEVpY2hob3JuIChuZWVkcyB0 ZXN0aW5nKS4KLSAgICAgKiBBIHN5bWJvbCBjb25mbGljdCBmaXhlZCB0aGF0IHByZXZlbnRlZCBz dWNjZXNzZnVsIGJ1aWxkIG9uCi0gICAgICAgWzg3XUZyZWVCU0QgOC4wLgotICAgICAqIEZpeGVz IGZyb20gQ2hyaXN0aWFuIENvcnRpIGZvciBidWlsZGluZyBvbiBTdW5PUyA0LjEuCi0gICAgICog TmV3IGFpeGcgdGFyZ2V0IGZvciBidWlsZGluZyBvbiBBSVggd2l0aCBnY2MuCi0gICAgICogTmV3 IGFpeCtpYm1zc2wgdGFyZ2V0LiBUaGlzIGlzIG5pY2UgYmVjYXVzZSB0aGUgSUJNLXN1cHBsaWVk IFNTTAotICAgICAgIGxpYnJhcmllcyBhbmQgaGVhZGVyIGZpbGVzIGFyZSBpbiBhIGtub3duIGxv Y2F0aW9uOyBubyBuZWVkIHRvCi0gICAgICAgWzg4XXNldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMg Z2l2aW5nIHRoZWlyIGxvY2F0aW9ucy4KLSAgICAgKiAiTGFyZ2UgRmlsZSBTdXBwb3J0IiBpcyBu b3cgaW5jbHVkZWQgYnkgZGVmYXVsdCBvbiBBbHBoYSBhbmQgSUE2NAotICAgICAgIGhhcmR3YXJl IG9uIFZNUyA3LjMgYW5kIGxhdGVyLCBhbmQgaXQgc2hvdWxkIHdvcmsgbXVjaCBiZXR0ZXIgdGhh bgotICAgICAgIGJlZm9yZS4KLSAgICAgKiBLZXJtaXQncyBpbnRlcm5hbCBGVFAgY2xpZW50IGlz IG5vdyBpbmNsdWRlZCBieSBkZWZhdWx0IGluIGFueQotICAgICAgIGJ1aWxkIHRoYXQgYWxzbyBp bmNsdWRlcyBUQ1AvSVAgbmV0d29ya2luZy4gQXQgcHJlc2VudCwgdGhlIEZUUAotICAgICAgIGNs aWVudCBzZWVtcyB0byB3b3JrIHdlbGwgZm9yIGJpbmFyeS1tb2RlIHRyYW5zZmVyczsgdGV4dCAo QVNDSUkpCi0gICAgICAgbW9kZSB0cmFuc2ZlcnMgc3RpbGwgbmVlZCBzb21lIHdvcmsuIEluIGJ1 aWxkcyB0aGF0IGFsc28gaW5jbHVkZQotICAgICAgIFNlY3VyZSBTb2NrZXRzIExheWVyIChTU0wp IHNlY3VyaXR5IChuZXh0IGl0ZW0pIHRoZSBGVFAgY2xpZW50Ci0gICAgICAgc2hvdWxkIGJlIGFi bGUgdG8gbWFrZSBzZWN1cmVseSBhdXRoZW50aWNhdGVkIGFuZCBlbmNyeXB0ZWQKLSAgICAgICBj b25uZWN0aW9ucy4KLSAgICAgKiBJbiBuZXR3b3JrIGJ1aWxkcyB0aGF0IHJlcXVlc3QgT3BlblNT TCBzdXBwb3J0LCBlLmcuOgotCi0gICAgICQgQGNrdmtlciAgIiIgICIiICAiQ0tfU1NMIgotICAg ICAgIHRoZSBPcGVuU1NMIHZlcnNpb24gaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSBhbmQgdGhl IGFwcHJvcHJpYXRlCi0gICAgICAgY29tcGlsZS10aW1lIG9wdGlvbnMgYXJlIGVtaXR0ZWQgKHN1 Y2ggYXMKLSAgICAgICBPUEVOU1NMX0RJU0FCTEVfT0xEX0RFU19TVVBQT1JUKS4KLSAgICAgKiBQ cmVsaW1pbmFyeSAvIGxpbWl0ZWQgc3VwcG9ydCBmb3IgdGhlIE9EUy01IGZpbGUgc3lzdGVtIG9u IFZNUyA3LjIKLSAgICAgICBhbmQgbGF0ZXIsIEFscGhhIGFuZCBJdGFuaXVtIG9ubHkgKG5lZWRz IHRlc3RpbmcpOiBGaWxlbmFtZXMgY2FuIGJlCi0gICAgICAgbWl4ZWQgY2FzZSBhbmQgY2FuIGJl IGxvbmdlci4KLSAgICAgKiBTdXBwb3J0IGZvciBvbGRlciBhbmQgb2xkZXIgVk1TIHZlcnNpb25z LgotICAgICAqIEluIHRoZSBWTVMgYnVpbGQgcHJvY2VkdXJlLCBDS1ZLRVIuQ09NLCB0aGUgImki IG9wdGlvbiBpbiBQMSBub3cKLSAgICAgICBtZWFucyBkb24ndCBpbmNsdWRlIHRoZSBpbnRlcm5h bCBGVFAgY2xpZW50LCBhbmQgdGhlICJmIiBvcHRpb24KLSAgICAgICBtZWFucyBkbyBub3QgaW5j bHVkZSAiTGFyZ2UgRmlsZSIgc3VwcG9ydC4gTGFyZ2UgRmlsZSBzdXBwb3J0IGluCi0gICAgICAg Vk1TIHJlYWxseSBvbmx5IGFwcGxpZXMgdG8gdGhlIGZpbGUtdHJhbnNmZXIgZGlzcGxheSBhbmQK LSAgICAgICBzdGF0aXN0aWNzLCB3aGljaCB3b3VsZCBnbyBvdXQgb2Ygd2hhY2sgYXMgc29vbiBh cyB0aGUgYnl0ZSBjb3VudAotICAgICAgIG92ZXJmbG93ZWQgMzEgYml0cyBiZWNhdXNlIHRoaXMg aXMgQy1LZXJtaXQsIGJ1aWx0IHdpdGggdGhlIEMKLSAgICAgICBjb21waWxlciBhbmQgdGhlIEMg bGlicmFyeSAocnVudGltZSBzeXN0ZW0pLCB3aGljaCBkaWQgbm90IHN1cHBvcnQKLSAgICAgICBs b25nIGludGVnZXJzIHVudGlsIFZNUyA3LjMuCi0gICAgICogVGhlIFs4OV1MSVNQIE9wZXJhdG9y IFJPVU5EIG5vdyB0YWtlcyBhbiBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQKLSAgICAgICB0aGF0 IHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHBsYWNlcyB0byByb3VuZCB0bywgZS5nLgotICAgICAg IChST1VORCBkb2xsYXJzIDIpIHJvdW5kcyBkb2xsYXJzIHRvIDIgZGVjaW1hbCBwbGFjZXMuCi0g ICAgICogSW1wcm92ZWQgcGF0dGVybiBtYXRjaGluZyBpbiBtYW55IGNvbW1hbmRzIGZvciBib3Ro IHN0cmluZ3MgYW5kCi0gICAgICAgZmlsZW5hbWVzLgotICAgICAqIFZhcmlvdXMgbWlub3IgbmV3 IGZlYXR1cmVzLCBwbHVzIG51bWVyb3VzIGJ1ZyBmaXhlcyBhbmQgc3BlZWR1cHMuCi0KLUluY29t cGF0aWJpbGl0aWVzCi0KLSAgIEEgdG9wIHByaW9yaXR5IGZvciBuZXcgS2VybWl0IHNvZnR3YXJl IHJlbGVhc2VzIGhhcyBhbHdheXMgYmVlbgotICAgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIEEg c2NyaXB0IHdyaXR0ZW4gZm9yIGEgcHJldmlvdXMgS2VybWl0IHJlbGVhc2UKLSAgIHNob3VsZCBy dW4gdGhlIHNhbWUgd2F5IGluIHRoZSBuZXcgcmVsZWFzZS4KLQotICAgVGhlcmUncyBvbmUgZXhj ZXB0aW9uIHRoaXMgdGltZS4gVGhlIFs5MF1cZnNwbGl0KCkgZnVuY3Rpb24gaXMKLSAgIGluY3Jl ZGlibHkgaGFuZHksIGl0IGNhbiBkbyBhbG1vc3QgYW55dGhpbmcsIHVwIHRvIGFuZCBpbmNsdWRp bmcKLSAgIHBhcnNpbmcgYSBMSVNQIHByb2dyYW0gKHRoZSB1bmRlcmx5aW5nIGNvZGUgaXMgdGhl IGJhc2lzIG9mIHRoZQotICAgWzkxXVMtRXhwcmVzc2lvbiBpbnRlcnByZXRlcikuIEJ1dCBkaWQg eW91IGV2ZXIgdHJ5IHRvIHVzZSBpdCB0byBwYXJzZQotICAgKHNheSkgYSBUYWItU2VwYXJhdGVk LUxpc3QgKFRTViBmaWxlKSBvciBDb21tYS1TZXBhcmF0ZWQtTGlzdCAoQ1NWKT8gSXQKLSAgIHdv cmtzIGFzIGV4cGVjdGVkIGFzIGxvbmcgYXMgdGhlIGRhdGEgY29udGFpbnMgb25seSA3LWJpdCBj aGFyYWN0ZXJzLgotICAgQnV0IGlmIHlvdXIgZGF0YSBjb250YWlucyAoc2F5KSBTcGFuaXNoIG9y IEdlcm1hbiBvciBSdXNzaWFuIHRleHQKLSAgIHdyaXR0ZW4gaW4gYW4gOC1iaXQgY2hhcmFjdGVy IHNldCBzdWNoIGFzIElTTyA4ODU5LTEsIGV2ZXJ5IDgtYml0Ci0gICBjaGFyYWN0ZXIgKGFueSB2 YWx1ZSAxMjgtMjU1KSBpcyB0cmVhdGVkIGFzIGEgYnJlYWsgY2hhcmFjdGVyLiBUaGlzIGlzCi0g ICBmaXhlZCBpbiBDLUtlcm1pdCA5LjAgYnkgdHJlYXRpbmcgYWxsIDgtYml0IGJ5dGVzIGFzICJp bmNsdWRlIgotICAgY2hhcmFjdGVycyByYXRoZXIgdGhhbiBicmVhayBjaGFyYWN0ZXJzLCBhIHRv dGFsIHJldmVyc2FsIG9mIHBhc3QKLSAgIGJlaGF2aW9yLiBJIGRvbid0IHRoaW5rIGl0IHdpbGwg YWZmZWN0IGFueW9uZSB0aG91Z2gsIGJlY2F1c2UgaWYgdGhpcwotICAgaGFkIGhhcHBlbmVkIHRv IGFueW9uZSwgSSB3b3VsZCBoYXZlIGhlYXJkIGFib3V0IGl0IQotCi0gICBTaW5jZSBtb3N0IHN0 YW5kYXJkIDgtYml0IGNoYXJhY3RlciBzZXRzIGhhdmUgY29udHJvbCBjaGFyYWN0ZXJzIGluCi0g ICBwb3NpdGlvbnMgMTI4LTE2MCwgaXQgbWlnaHQgaGF2ZSBtYWRlIHNlbnNlIHRvIGtlZXAgMTI4 LTE2MCBpbiB0aGUKLSAgIGJyZWFrIHNldCwgYnV0IHdpdGggdGhlIHByb2xpZmVyYXRpb24gb2Yg TWljcm9zb2Z0IFdpbmRvd3MgY29kZSBwYWdlcywKLSAgIHRoZXJlIGlzIG5vIHRlbGxpbmcgd2hp Y2ggOC1iaXQgY2hhcmFjdGVyIGlzIGxpa2VseSB0byBiZSBzb21lIGtpbmQgb2YKLSAgIHRleHQs IGUuZy4gInNtYXJ0IHF1b3RlcyIgb3IgRWFzdCBFdXJvcGVhbiBvciBUdXJraXNoIGFjY2VudGVk IGxldHRlcnMuCi0KLVdoYXQncyBOb3QgSW4gQy1LZXJtaXQgOS4wCi0KLSAgIFNvbWUgbGFyZ2Ug cHJvamVjdHMgdGhhdCB3ZXJlIGNvbnRlbXBsYXRlZCBoYXZlIG5vdCBiZWVuIGRvbmUsCi0gICBp bmNsdWRpbmc6Ci0gICAgICogSVB2Ni4gSG9uZXN0bHksIHRoZXJlIGhhcyBiZWVuIHplcm8gZGVt YW5kIGZvciB0aGlzLCBhbmQgaXQgd291bGQKLSAgICAgICBiZSBhIGxvdCBvZiB3b3JrIGFuZCBk aXNydXB0aW9uIHRvIHRoZSBjb2RlIGJhc2UuIFZvbHVudGVlcnMKLSAgICAgICB3ZWxjb21lLCBJ IGd1ZXNzLiBJdCBjb3VsZCBiZSBhIENTIHByb2plY3QuCi0gICAgICogQSBkYXRhYmFzZSBpbnRl cmZhY2UgLSBNeVNRTCBvciBPREJDLiBGb3IgdGhpcyBvbmUsIHRoZXJlIGlzIHNvbWUKLSAgICAg ICBkZW1hbmQgYnV0IEkgaGF2ZW4ndCBoYWQgYSBjaGFuY2UgdG8gZXZlbiBsb29rIGludG8gaXQu Ci0gICAgICogVGhlcmUncyBhIGxvb21pbmcgaXNzdWUgd2l0aCBERVMgZW5jcnlwdGlvbjsgbWFq b3IgdmVuZG9ycyBhcmUKLSAgICAgICByZW1vdmluZyBpdCBmcm9tIHRoZWlyIHBsYXRmb3Jtcywg c3RhcnRpbmcgd2l0aCBBcHBsZSBpbiBNYWMgT1MgWAotICAgICAgIDEwLjYsIHdpdGggTWljcm9z b2Z0IHRvIGZvbGxvdyBzdWl0LiBBIHNlY3VyZSB2ZXJzaW9uIG9mIEtlcm1pdCBjYW4KLSAgICAg ICBiZSBidWlsdCB3aXRob3V0IERFUywgYnV0IGluIGxpbWl0ZWQgdGVzdGluZyBzdWNjZXNzZnVs IGNvbm5lY3Rpb25zCi0gICAgICAgd2VyZSBzcG90dHkgKGUuZy4gd2l0aCBLZXJiZXJvcyA1KS4K LSAgICAgKiBDbGVhbmluZyB1cCB0aGUgVW5peCBtYWtlZmlsZS4gSXQgaGFzIDI1IHllYXJzJyB3 b3J0aCBvZiB0YXJnZXRzIGluCi0gICAgICAgaXQuIEl0IGlzIHZlcnkgbGlrZWx5IHNhZmUgdG8g cmVtb3ZlIG1vc3Qgb2YgdGhlbSwgc2luY2UgKGEpIG1vc3QKLSAgICAgICBvbGQgcGxhdGZvcm1z IGhhdmUgZ29uZSBhd2F5IGJ5IG5vdywgb3IgaGF2ZSBiZWVuIHVwZ3JhZGVkLCBkdWUgdG8KLSAg ICAgICBoYWNraW5nIHZ1bG5lcmFiaWxpdGllczsgKGIpIHRoZSBtYXJrZXQgaGFzIGNvbnNvbGlk YXRlZAotICAgICAgIGNvbnNpZGVyYWJseTsgYW5kIChjKSBtb3N0IG9mIHRoZSBuZXcgZmVhdHVy ZXMgb2YgQy1LZXJtaXQgOS4wLAotICAgICAgIHN1Y2ggYXMgbGFyZ2UgZmlsZXMsIHdvbid0IGJl IG9mIGFueSB1c2Ugb24gb2xkZXIgcGxhdGZvcm1zIGFuZAotICAgICAgIHByZXZpb3VzIEMtS2Vy bWl0IHZlcnNpb25zIHdpbGwgcmVtYWluIGF2YWlsYWJsZS4KLSAgICAgKiBQYWNrYWdlcy4gRXZl cnlib2R5IHdhbnRzIGFuIGluc3RhbGwgcGFja2FnZSBjdXN0b20gbWFkZSBmb3IgdGhlaXIKLSAg ICAgICBvd24gY29tcHV0ZXIsIExpbnV4IFJQTXMgYmVpbmcgdGhlIHByaW1lIGV4YW1wbGUgYnV0 IGZhciBmcm9tIHRoZQotICAgICAgIG9ubHkgb25lLiBUaGVzZSB3aWxsIGNvbWUsIEkgc3VwcG9z ZSAoZXNwZWNpYWxseSB3aXRoIHNvbWUgTGludXgKLSAgICAgICBzaXRlcyBoYXZpbmcgYSBwb2xp Y3kgYWdhaW5zdCBpbnN0YWxsaW5nIGFueSBhcHBsaWNhdGlvbiB0aGF0IGRvZXMKLSAgICAgICBu b3QgY29tZSBhcyBhbiBSUE0pLiBJbiB0aGUgbWVhbnRpbWUsIGhlcmUncyBhIHBhZ2UgdGhhdCBk ZXNjcmliZXMKLSAgICAgICBzb21lIEtlcm1pdC1zcGVjaWZpYyBpc3N1ZXMgaW4gcGFja2FnZSBj b25zdHJ1Y3Rpb246Ci0gICAgICAgWzkyXWNrcGFja2FnZXMuaHRtbC4KLQotQW5kIGEgTG9vc2Ug RW5kLi4uCi1Vc2luZyBFeHRlcm5hbCBGaWxlLVRyYW5zZmVyIFByb3RvY29scyBvbiBTZWN1cmUg Q29ubmVjdGlvbnMKLQotICAgQWZ0ZXIgQy1LZXJtaXQgOC4wLjIxMiBEZXYuMjcgKDIwMDYvMTIv MjIpLCBJIHNwZW50IGEgYmlnIGNodW5rIG9mIHRpbWUKLSAgIHRyeWluZyB0byBzb2x2ZSBhIHBh cnRpY3VsYXIgcHJvYmxlbSB0aGF0IHNvbWUgb2YgeW91IGhhdmUgY29tcGxhaW5lZAotICAgYWJv dXQgYW5kIG90aGVycyBtaWdodCBiZSBmYW1pbGlhciB3aXRoOiBJZiB5b3UgdXNlIEMtS2VybWl0 IHRvIG1ha2UgYQotICAgc2VjdXJlIFRlbG5ldCBjb25uZWN0aW9uIHRvIGFub3RoZXIgaG9zdCAo ZS5nLiB3aXRoIFRlbG5ldCBTU0wvVExTLAotICAgS2VyYmVyb3MsIG9yIFNSUCkgYW5kIHRoZW4g YXR0ZW1wdCB0byB0cmFuc2ZlciBhIGZpbGUgdXNpbmcgYW4gZXh0ZXJuYWwKLSAgIHByb3RvY29s IHN1Y2ggYXMgWm1vZGVtLCBpdCBkb2Vzbid0IHdvcmsuCi0KLSAgIFRoYXQncyBiZWNhdXNlIGFz IGNvZGVkICh0aHJvdWdoIDguMC4yMTEpLCBDLUtlcm1pdCBzaW1wbHkgc3RhcnRzIHRoZQotICAg ZXh0ZXJuYWwgcHJvdG9jb2wgaW4gYSBmb3JrIHdpdGggaXRzIHN0YW5kYXJkIGkvbyByZWRpcmVj dGVkIHRvIHRoZQotICAgY29ubmVjdGlvbi4gVGhpcyBjb21wbGV0ZWx5IGJ5cGFzc2VzIHRoZSBl bmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uIHRoYXQKLSAgIGlzIGRvbmUgYnkgQy1LZXJtaXQgaXRz ZWxmLCBhbmQgb2YgY291cnNlIGl0IGRvZXNuJ3Qgd29yay4gVGhlIHNhbWUKLSAgIHRoaW5nIG9j Y3VycyBpZiB5b3UgdXNlIHRoZSBSRURJUkVDVCBjb21tYW5kLiBUaGUgcm91dGluZSB0aGF0IGhh bmRsZXMKLSAgIHRoaXMgaXMgdHRydW5jbWQoKSBpbiBja3V0aW8uYy4KLQotICAgSW4gb3JkZXIg dG8gYWxsb3cgKHNheSkgWm1vZGVtIHRyYW5zZmVycyBvbiBzZWN1cmUgY29ubmVjdGlvbnMsIGl0 IGlzCi0gICBuZWNlc3NhcnkgZm9yIEMtS2VybWl0IHRvIGludGVycG9zZSBpdHNlbGYgYmV0d2Vl biB0aGUgZXh0ZXJuYWwgWm1vZGVtCi0gICBwcm9ncmFtIGFuZCB0aGUgY29ubmVjdGlvbiwgZGVj cnlwdGluZyB0aGUgaW5jb21pbmcgc3RyZWFtIGJlZm9yZQotICAgZmVlZGluZyBpdCB0byBabW9k ZW0gYW5kIGVuY3J5cHRpbmcgWm1vZGVtJ3Mgb3V0cHV0IGJlZm9yZSBzZW5kaW5nIG91dAotICAg dGhlIGNvbm5lY3Rpb24uCi0KLSAgIEluIHByaW5jaXBhbCwgdGhpcyBpcyBzaW1wbGUgZW5vdWdo LiBXZSBvcGVuIGEgcHNldWRvdGVybWluYWwgcGFpcgotICAgKCJtYXN0ZXIiIGFuZCAic2xhdmUi KSBmb3IgWm1vZGVtJ3MgaS9vIGFuZCB3ZSBjcmVhdGUgYSBmb3JrIGFuZCBzdGFydAotICAgWm1v ZGVtIGluIGl0OyB3ZSByZWFkIGZyb20gdGhlIGZvcmsgcHR5J3Mgc3RhbmRhcmQgb3V0cHV0LCBl bmNyeXB0LCBhbmQKLSAgIHNlbmQgdG8gdGhlIG5ldDsgd2UgcmVhZCBmcm9tIHRoZSBuZXQsIGRl Y3J5cHQsIGFuZCB3cml0ZSB0byB0aGUgZm9yawotICAgcHR5J3Mgc3RhbmRhcmQgaW5wdXQuCi0K LSAgIEluIHByYWN0aWNlLCBpdCdzIG5vdCBzbyBzaW1wbGUuIEZpcnN0IG9mIGFsbCwgcHNldWRv dGVybWluYWxzIChwdHlzKQotICAgZG9uJ3Qgc2VlbSB0byBpbnRlcmZhY2UgY29ycmVjdGx5IHdp dGggY2VydGFpbiBjcnVjaWFsIEFQSXMsIGF0IGxlYXN0Ci0gICBub3QgaW4gdGhlIE9TJ3MgSSBo YXZlIHRyaWVkIChNYWMgT1MgWCwgTGludXgsIE5ldEJTRCwgZXRjKSwgc3VjaCBhcwotICAgc2Vs ZWN0KCkuIEFuZCBpL28gd2l0aCB0aGUgcHR5IG9mdGVuIC0gcGVyaGFwcyBhbHdheXMgLSBmYWls cyB0bwotICAgaW5kaWNhdGUgZXJyb3JzIHdoZW4gdGhleSBvY2N1cjsgZm9yIGV4YW1wbGUsIHdo ZW4gdGhlIGZvcmsgaGFzIGV4aXRlZC4KLQotICAgQnV0LCBldmVuIGFmdGVyIGNvZGluZyBhcm91 bmQgdGhlIGFwcGFyZW50IHVzZWxlc3NuZXNzIG9mIHNlbGVjdCgpIGZvcgotICAgbXVsdGlwbGV4 aW5nIHB0eSBhbmQgbmV0LCBhbmQgdXNpbmcgdmFyaW91cyB0cmlja3MgdG8gZGV0ZWN0IHdoZW4g dGhlCi0gICBleHRlcm5hbCBwcm90b2NvbCBleGl0cyBhbmQgd2hhdCBpdHMgZXhpdCBzdGF0dXMg aXMsIEknbSBzdGlsbCBsZWZ0Ci0gICB3aXRoIGEgc2hvdy1zdG9wcGluZyBwcm9ibGVtOiBJIGp1 c3Qgc2ltcGx5IGNhbiBub3QgZG93bmxvYWQgKHJlY2VpdmUpCi0gICBhIGZpbGUgd2l0aCBabW9k ZW0sIHdoaWNoIGlzIHRoZSBtYWluIHRoaW5nIHRoYXQgcGVvcGxlIHdvdWxkIHByb2JhYmx5Ci0g ICB3YW50IHRvIGRvLiBJIGNhbiBzZW5kIGZpbGVzIGp1c3QgZmluZSwgYnV0IG5vdCByZWNlaXZl LiBUaGUgaW5jb21pbmcKLSAgIHN0cmVhbSBpcyBkZWxpdmVyZWQgdG8gWm1vZGVtICh0byB0aGUg cHR5IHNsYXZlKSBidXQgdXBvbiBhcnJpdmFsIGF0Ci0gICB0aGUgWm1vZGVtIHByb2Nlc3MgaXRz ZWxmLCBwaWVjZXMgYXJlIGFsd2F5cyBtaXNzaW5nIGFuZC9vciBjb3JydXB0LgotICAgWWV0IEkg Y2FuIHJlY2VpdmUgZmlsZXMganVzdCBmaW5lIGlmIEkgdXNlIEtlcm1pdCBpdHNlbGYgKEMtS2Vy bWl0IG9yCi0gICBHLUtlcm1pdCkgYXMgdGhlIGV4dGVybmFsIHByb3RvY29sLCByYXRoZXIgdGhh biBabW9kZW0uCi0KLSAgIEkgY2FuIHRoaW5rIG9mIHR3byByZWFzb25zIHdoeSB0aGlzIG1pZ2h0 IGJlIHRoZSBjYXNlOgotCi0gICAgMS4gWm1vZGVtIHNlbmRzIGFsbCA4LWJpdCBieXRlcyBhbmQg Y29udHJvbCBjb2RlcyBpbiB0aGUgY2xlYXIsIGFuZAotICAgICAgIG1heWJlIHRoZSBwdHkgaXMg Y2hva2luZyBvbiB0aGVtIGJlY2F1c2UgaXQgdGhpbmtzIGl0IGlzIGEgcmVhbAotICAgICAgIHRl cm1pbmFsLgotCi0gICBCdXQgWm1vZGVtIHB1dHMgaXRzIGNvbnRyb2xsaW5nIHRlcm1pbmFsIGlu dG8gcmF3IG1vZGUuIEFuZCBDLUtlcm1pdAotICAgcHV0cyB0aGUgcHR5IGludG8gcmF3IG1vZGUg dG9vLCBqdXN0IGZvciBnb29kIG1lYXN1cmUuIElmIGFueSAweEZGCi0gICBjb2RlcyBhcmUgaW4g dGhlIFptb2RlbSBkYXRhIHN0cmVhbSwgYW5kIGl0J3MgYSBUZWxuZXQgc2Vzc2lvbiwgS2VybWl0 Ci0gICBkb2VzIGFueSBuZWVkZWQgYnl0ZSBzdHVmZmluZy91bnN0dWZmaW5nIGF1dG9tYXRpY2Fs bHkuIEFueXdheSwgaWYgSQotICAgdGVsbCBabW9kZW0gdG8gcHJlZml4IGV2ZXJ5dGhpbmcsIGl0 IG1ha2VzIG5vIGRpZmZlcmVuY2UuCi0KLSAgICAyLiBabW9kZW0gaXMgYSBzdHJlYW1pbmcgcHJv dG9jb2wgYW5kIHBlcmhhcHMgdGhlIHB0eSBkcml2ZXIgY2FuJ3QKLSAgICAgICBrZWVwIHVwIHdp dGggYSBzdXN0YWluZWQgc3RyZWFtIG9mIGlucHV0IGF0IG5ldHdvcmsgc3BlZWRzLiBXaGF0Ci0g ICAgICAgd291bGQgYmUgdGhlIG1ldGhvZCBvZiBmbG93IGNvbnRyb2w/Ci0KLSAgIEkgY2FuIHZh cnkgdGhlIHNpemUgb2YgdGhlIGkvbyBidWZmZXJzIHVzZWQgZm9yIHdyaXRpbmcgdG8gdGhlIHB0 eSwgYW5kCi0gICBnZXQgZGlmZmVyZW50IGVmZmVjdHMsIGJ1dCBJIGFtIG5vdCBhYmxlIHRvIGdl dCBhIGNsZWFuIGRvd25sb2FkLCBubwotICAgbWF0dGVyIHdoYXQgYnVmZmVyIHNpemUgSSB1c2Uu IHdyaXRlKCknaW5nIHRvIHRoZSBwdHkgZG9lcyBub3QgcmV0dXJuCi0gICBhbiBlcnJvciwgYW5k IEkgY2FuJ3Qgc2VlIHRoZSBlcnJvcnMgYmVjYXVzZSB0aGV5IGhhcHBlbiBvbiB0aGUgbWFzdGVy Ci0gICBzaWRlLiBJdCdzIGFzIGlmIHRoZSBwYXRoIGJldHdlZW4gdGhlIHB0eSBzbGF2ZSBhbmQg bWFzdGVyIGxhY2tzIGZsb3cKLSAgIGNvbnRyb2w7IEkgZGVsaXZlciBhIHZhbGlkIGRhdGEgc3Ry ZWFtIHRvIHRoZSBwdHkgc2xhdmUgYW5kIHRoZSBtYXN0ZXIKLSAgIGdldHMgYml0cyBhbmQgcGll Y2VzLiBUaGlzIGltcHJlc3Npb24gaXMgYm9sc3RlcmVkIHNvbWV3aGF0IGJ5IHRoZQotICAgIls5 M11tYW4gNyBwdHkiIHBhZ2UgaW4gSFAtVVgsIHdoaWNoIHRhbGtzIGFib3V0IHNvbWUgc3BlY2lh bCBtb2RlcyBmb3IKLSAgIHB0eXMgdGhhdCB0dXJuIG9mZiBhbGwgdGVybWlvIHByb2Nlc3Npbmcg YW5kIGd1YXJhbnRlZSBhCi0gICBmbG93LWNvbnRyb2xsZWQgcmVsaWFibGUgc3RyZWFtIG9mIGJ5 dGVzIGluIGJvdGggZGlyZWN0aW9ucyAtIGEgZmVhdHVyZQotICAgdGhhdCBzZWVtcyB0byBiZSBz cGVjaWZpYyB0byBIUC1VWCwgYW5kIGV4YWN0bHkgdGhlIG9uZSB3ZSBuZWVkCi0gICBldmVyeXdo ZXJlLgotCi0gICBXZWxsLCBpbiBQYXNzIE9uZSBJIHVzZWQgQy1LZXJtaXQncyBleGlzdGluZyBw dHkgcm91dGluZXMgZnJvbQotICAgY2t1cHR5LltjaF0sIHdoaWNoIGFyZSB3ZWxsLXByb3ZlbiBp biB0ZXJtcyBvZiBwb3J0YWJpbGl0eSBhbmQgb2YKLSAgIGFjdHVhbGx5IHdvcmtpbmcuIFRoZXkg YXJlIGN1cnJlbnRseSB1c2VkIGJ5IFNFVCBIT1NUIC9QVFkgZm9yIG1ha2luZwotICAgdGVybWlu YWwgY29ubmVjdGlvbnMgdG8gZXh0ZXJuYWwgcHJvY2Vzc2VzLiBCdXQgdGhlc2Ugcm91dGluZXMg YXJlCi0gICB3cml0dGVuIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIHB0eSBpcyB0byBiZSBh Y2Nlc3NlZCBpbnRlcmFjdGl2ZWx5LAotICAgYW5kIG1heWJlIHRoZXkgYXJlIHNldHRpbmcgdGhl IGZvcmsvcHR5IGFycmFuZ2VtZW50IHVwIGluIHN1Y2ggYSB3YXkKLSAgIHRoYXQgdGhhdCdzIG5v dCBzdWl0YWJsZSBmb3IgZmlsZSB0cmFuc2Zlci4gVGhlIFBhc3MgT25lIHJvdXRpbmUgaXMKLSAg IGNhbGxlZCB4dHRwdHljbWQoKSBpbiBja3V0aW8uYy4KLQotICAgU28gaW4gUGFzcyBUd28gSSBt YWRlIGEgc2Vjb25kIGNvcHkgb2YgdGhlIHJvdXRpbmUsIHl0dHB0eWNtZCgpLCB0aGF0Ci0gICBt YW5hZ2VzIHRoZSBwdHkgYW5kIGZvcmsgaXRzZWxmLCBzbyBhbGwgdGhlIGNvZGUgaXMgaW4gb25l IHBsYWNlIGFuZAotICAgaXQncyBzaW1wbGUgYW5kIHVuZGVyc3RhbmRhYmxlLiBCdXQgaXQgc3Rp bGwgZG9lc24ndCB3b3JrIGZvciBabW9kZW0KLSAgIGRvd25sb2Fkcy4gSW4gdGhpcyByb3V0aW5l LCBJIHVzZSBvcGVucHR5KCkgdG8gZ2V0IHRoZSBwdHkgcGFpciwgd2hpY2gKLSAgIGlzIG5vdCBw b3J0YWJsZSwgc28gSSBjYW4gaGF2ZSBhY2Nlc3MgdG8gYm90aCB0aGUgbWFzdGVyIGFuZCBzbGF2 ZSBwdHkKLSAgIGZpbGUgZGVzY3JpcHRvcnMuIFRoaXMgdmVyc2lvbiBjYW4gYmUgdXNlZCBvbmx5 IGEgcGxhdGZvcm1zIHRoYXQgaGF2ZQotICAgb3BlbnB0eSgpOiBMaW51eCwgTWFjIE9TIFgsIE5l dEJTRCwgZXRjLgotCi0gICBJbiBQYXNzIFRocmVlLCB6dHRwdHljbWQoKSwgSSB0cmllZCB1c2lu ZyBwaXBlcyBpbnN0ZWFkIG9mIHB0eXMsIGluCi0gICBjYXNlIHB0eXMgYXJlIHNpbXBseSBub3Qg dXAgdG8gdGhpcyB0YXNrIChidXQgdGhhdCBjYW4ndCBiZSB0cnVlCi0gICBiZWNhdXNlIGlmIEkg bWFrZSBhIFRlbG5ldCBvciBTU0ggY29ubmVjdGlvbiBpbnRvIGEgaG9zdCwgSSBjYW4gc2VuZAot ICAgZmlsZXMgdG8gaXQgd2l0aCBabW9kZW0sIGFuZCB0aGUgcmVtb3RlIFptb2RlbSByZWNlaXZl ciBpcywgaW5kZWVkLAotICAgcnVubmluZyBvbiBhIHB0eSkuIEJ1dCBwaXBlcyBkaWRuJ3Qgd29y ayBlaXRoZXIuCi0KLSAgIEluIFBhc3MgRm91ciwgSSBleHRyYWN0ZWQgdGhlIHJlbGV2YW50IHJv dXRpbmVzIGludG8gYSBzdGFuZGFsb25lCi0gICBwcm9ncmFtIGJhc2VkIG9uIHl0dHB0eWNtZCgp ICh0aGUgb3BlbnB0eSgpIHZlcnNpb24sIGZvciBzaW1wbGljaXR5KSwKLSAgIHdoaWNoIEkgdGVz dGVkIG9uIE1hYyBPUyBYLCB0aGUgaWRlYSBiZWluZyB0byBydWxlIG91dCBhbnkKLSAgICJlbnZp cm9ubWVudGFsIiBlZmZlY3RzIG9mIHJ1bm5pbmcgaW5zaWRlIHRoZSBDLUtlcm1pdCBwcm9jZXNz LiBUaGVyZQotICAgd2FzIG5vIGRpZmZlcmVuY2UgLS0gS2VybWl0IHRyYW5zZmVycyAod2l0aCBD LUtlcm1pdCBpdHNlbGYgYXMgdGhlCi0gICBleHRlcm5hbCBwcm90b2NvbCkgd29ya2VkOyBabW9k ZW0gdHJhbnNmZXJzIChuZWl0aGVyIHN6IG9yIGxzeikgZGlkCi0gICBub3QuCi0KLSAgIFdlbGws IGl0J3MgYSBtdWNoIGxvbmdlciBzdG9yeS4gQXMgdGhlIGV4dGVybmFsIHByb3RvY29sLCBJJ3Zl IHRyaWVkCi0gICByenN6LCBjcnpzeiwgYW5kIGxyenN6LiBXZSBrbm93IHRoYXQgc29tZSBvZiB0 aGVzZSBoYXZlIHF1aXJrcwotICAgcmVnYXJkaW5nIHN0YW5kYXJkIGkvbywgZXRjLCB3aGljaCBp cyBvbmUgb2YgdGhlIHJlYXNvbnMgZm9yIHVzaW5nIHB0eXMKLSAgIGluIHRoZSBmaXJzdCBwbGFj ZSwgYW5kIGkvbyBkb2VzIHdvcmsgLSBqdXN0IG5vdCByZWxpYWJseS4gQW55d2F5LCB0aGUKLSAg IDExMDAgbGluZXMgb3Igc28gb2YgWzk0XWNrYzI5OS50eHQsIHN0YXJ0aW5nIGp1c3QgYmVsb3cg d2hlcmUgaXQgc2F5cwotICAgIi0tLSBEZXYuMjcgLS0tIiB0ZWxsIHRoZSBmdWxsIHN0b3J5LiBB dCB0aGlzIHBvaW50IEkgaGF2ZSB0byBnaXZlIHVwCi0gICBhbmQgbW92ZSBvbjsgaXQgbWlnaHQg YmUgbW9yZSBwcm9kdWN0aXZlIHRvIGxldCBzb21lYm9keSBlbHNlIHdobyBoYXMKLSAgIG1vcmUg ZXhwZXJpZW5jZSB3aXRoIHB0eXMgdGFrZSBhIGxvb2sgYXQgaXQgLSBpZiBpbmRlZWQgYW55b25l IHN0aWxsCi0gICBjYXJlcyBhYm91dCBiZWluZyBhYmxlIHRvIGRvIFptb2RlbSB0cmFuc2ZlcnMg b3ZlciBzZWN1cmUgVGVsbmV0Ci0gICBjb25uZWN0aW9ucy4KLQotICAgQy1LZXJtaXQgOS4wIGNv bnRhaW5zIHRoZSB0aHJlZSBuZXcgcm91dGluZXMgKGFuZCBzb21lIGF1eGlsaWFyeSBvbmVzKSwK LSAgIGJ1dCB0aGV5IGFyZSBub3QgY29tcGlsZWQgb3IgY2FsbGVkIHVubGVzcyB5b3UgYnVpbGQg aXQgc3BlY2lhbGx5OgotCi0gICAgIG1ha2UgdGFyZ2V0bmFtZSBLRkxBR1M9LURYVFRQVFlDTUQg KGJ1aWxkcyB3aXRoIHh0dHB0eWNtZCgpKQotICAgICBtYWtlIHRhcmdldG5hbWUgS0ZMQUdTPS1E WVRUUFRZQ01EIChidWlsZHMgd2l0aCB5dHRwdHljbWQoKSkKLSAgICAgbWFrZSB0YXJnZXRuYW1l IEtGTEFHUz0tRFpUVFBUWUNNRCAoYnVpbGRzIHdpdGggenR0cHR5Y21kKCkpCi0KLSAgIFRoZXNl IGFyZSBhbGwgaW4gWzk1XWNrdXRpby5jLiBBcyBub3RlZCwgdGhlIHNlY29uZCBvbmUgd29ya3Mg b25seSBmb3IKLSAgIExpbnV4LCBGcmVlQlNELCBOZXRCU0QsIGFuZCBNYWMgT1MgWCwgYmVjYXVz ZSBpdCB1c2VzIG5vbi1QT1NJWCwKLSAgIG5vbi1wb3J0YWJsZSBvcGVucHR5KCkuIElmIHlvdSB3 YW50IHRvIHRyeSBpdCBvbiBzb21lIG90aGVyIHBsYXRmb3JtCi0gICB0aGF0IGhhcyBvcGVucHR5 KCksIHlvdSBjYW4gYnVpbGQgaXQgbGlrZSB0aGlzOgotCi0gICAgIG1ha2UgdGFyZ2V0bmFtZSAi S0ZMQUdTPS1EWVRUUFRZQ01EIC1ESEFWRV9PUEVOUFRZIgotCi0gICAoYW5kIGxldCBtZSBrbm93 LCBzbyBJIGNhbiBoYXZlIEhBVkVfT1BFTlBUWSBwcmVkZWZpbmVkIGZvciB0aGF0Ci0gICBwbGF0 Zm9ybSB0b28pLiBUaGUgYmVzdCBzdHJhdGVneSB0byBnZXQgdGhpcyB3b3JraW5nLCBJIHRoaW5r LCB3b3VsZCBiZQotICAgdG8gY29uY2VudHJhdGUgb24geXR0cHR5Y21kKCksIHdoaWNoIGlzIHRo ZSBzaW1wbGVyIG9mIHRoZSB0d28KLSAgIHB0eS1iYXNlZCByb3V0aW5lcy4gSWYgaXQgY2FuIGJl IG1hZGUgdG8gd29yaywgdGhlbiB3ZSdsbCBzZWUgaWYgd2UgY2FuCi0gICByZXRyb2ZpdCBpdCB0 byB1c2UgdGhlIGNrdXB0eS5jIHJvdXRpbmVzIHNvIGl0IHdpbGwgYmUgcG9ydGFibGUgdG8KLSAg IG5vbi1CU0QgcGxhdGZvcm1zLgotCi0gICBCeSB0aGUgd2F5LCBpZiB5b3UgYnVpbGQgd2l0aCBh bnkgb2YgW1hZWl1UVFBUWUNNRCBkZWZpbmVkLCB0aGVuIHRoZQotICAgc2VsZWN0ZWQgcm91dGlu ZSB3aWxsIGFsd2F5cyBiZSB1c2VkIGluIHBsYWNlIG9mIHR0cnVuY21kKCkuIFRoaXMgaXMgdG8K LSAgIGFsbG93IHRlc3Rpbmcgb24gYWxsIGtpbmRzIG9mIGNvbm5lY3Rpb25zLCBub3QganVzdCBz ZWN1cmUgb25lcywgaW4KLSAgIGJvdGggbG9jYWwgYW5kIHJlbW90ZSBtb2RlLiBPbmNlIHRoZSB0 aGluZyB3b3JrcywgaWYgaXQgZXZlciBkb2VzLCBJJ2xsCi0gICBhZGQgdGhlIGFwcHJvcHJpYXRl IHRlc3RzIGFuZC9vciBjb21tYW5kcy4KLQotICAgQnkgZGVmYXVsdCwgaW4gdGhlIGluaXRpYWwg dGVzdCByZWxlYXNlLCBDLUtlcm1pdCA5LjAgdXNlcyB0dHJ1bmNtZCgpCi0gICBvbiBzZXJpYWwg Y29ubmVjdGlvbnMgYW5kIHR0eXB0eWNtZCgpIG9uIG5ldHdvcmsgY29ubmVjdGlvbnMuIEV2ZW4g d2hlbgotICAgYSBuZXR3b3JrIGNvbm5lY3Rpb24gaXMgbm90IGVuY3J5cHRlZCwgS2VybWl0IHN0 aWxsIG5lZWRzIHRvIGhhbmRsZSB0aGUKLSAgIG5ldHdvcmsgcHJvdG9jb2wsIGUuZy4gdGhlIHF1 b3Rpbmcgb2YgMHhmZiBieXRlcyBvbiBUZWxuZXQgY29ubmVjdGlvbnMuCi0KLURlbW9uc3RyYXRp b246IEZldGNoIE1haWwgZnJvbSBQT1AgU2VydmVyIFNlY3VyZWQgYnkgU1NMCi0KLSAgIFs5Nl1w b3Aua3NjIGlzIGEgZnVsbHkgZWxhYm9yYXRlZCBwcm9kdWN0aW9uIHNjcmlwdCBmb3IgZmV0Y2hp bmcgb25lJ3MKLSAgIG1haWwgZnJvbSBhIFBPUDMgc2VydmVyIG92ZXIgYSBjb25uZWN0aW9uIHNl Y3VyZWQgYnkgU1NMLiBGb3IKLSAgIGV4cGxhbmF0aW9uIGFuZCBkb2N1bWVudGF0aW9uLCBbOTdd Q0xJQ0sgSEVSRS4gWzk4XW1haWxjaGVjayBpcyBhCi0gICB3cmFwcGVyIGZvciB0aGUgcG9wLmtz YyBzY3JpcHQsIHdoaWNoIGNvbGxlY3RzIHlvdXIgcGFzc3dvcmQgb25lIHRpbWUsCi0gICBhbmQg dGhlbiBjaGVja3MgZm9yIG5ldyBtYWlsIGV2ZXJ5IDUgbWludXRlcyAob3Igb3RoZXIgc2VsZWN0 ZWQKLSAgIGludGVydmFsKSBhbmQgY2FsbHMgcG9wLmtzYyB0byBmZXRjaCBpdCBpZiB0aGVyZSBp cyBhbnkuCi0KLURlbW9uc3RyYXRpb246IEhQIFN3aXRjaCBDb25maWd1cmF0aW9uIEJhY2t1cAot Ci0gICBBIGNvbW1vbiB1c2UgZm9yIEtlcm1pdCBzb2Z0d2FyZSBpcyB0byBtYWtlIGF1dG9tYXRl ZCBiYWNrdXBzIG9mIHRoZQotICAgY29uZmlndXJhdGlvbiBvZiBuZXR3b3JrIHN3aXRjaGVzIGFu ZCByb3V0ZXJzLCBzdWNoIGFzIHRob3NlIG1hZGUgYnkKLSAgIENpc2NvIG9yIEhld2xldHQtUGFj a2FyZCAoYWx0aG91Z2ggWzk5XXRmdHAgY2FuIGJlIHVzZWQgZm9yIHRoaXMsIGl0IGlzCi0gICBu b3QgYXZhaWxhYmxlIGluIGFsbCBzdWNoIGRldmljZXM7IEtlcm1pdCwgaG93ZXZlciwgd29ya3Mg d2l0aCB0aG9zZQotICAgdGhhdCBoYXZlIHRmdHAgYXMgd2VsbCBhcyB0aG9zZSB0aGF0IGRvbid0 KS4KLQotICAgVHlwaWNhbGx5IGEgYmFja3VwIGNhbiBiZSBkb25lIGJ5IG1ha2luZyBhIFRlbG5l dCwgU1NILCBvciBzZXJpYWwKLSAgIGNvbm5lY3Rpb24gdG8gdGhlIGRldmljZSB3aXRoIEtlcm1p dCBhbmQgZ2l2aW5nIGEgY29tbWFuZCBzdWNoIGFzICJzaG93Ci0gICBjb25maWciIGF0IHRoZSBj b21tYW5kLWxpbmUgcHJvbXB0IG9mIHRoZSBkZXZpY2Ugd2l0aCBLZXJtaXQncyBzZXNzaW9uCi0g ICBsb2cgYWN0aXZhdGVkLiBUaGUgcmVzdWx0IGlzIGEgbGlzdCBvZiB0aGUgY29tbWFuZHMgdGhh dCB3ZXJlIHVzZWQgdG8KLSAgIGVzdGFibGlzaCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLCBz dWl0YWJsZSBmb3IgZmVlZGluZyBiYWNrIHRvIHRoZQotICAgZGV2aWNlJ3MgY29uc29sZSAoZS5n LiB3aXRoIEMtS2VybWl0J3MgVFJBTlNNSVQgY29tbWFuZCkgdG8gcmVlc3RhYmxpc2gKLSAgIHRo ZSBzYW1lIGNvbmZpZ3VyYXRpb24gb3IgdG8gZHVwbGljYXRlIGl0IG9uIGFub3RoZXIgZGV2aWNl LgotCi0gICBBdCBhbiBIUCBpbnN0YWxsYXRpb24gaXQgd2FzIG5vdGVkLCBob3dldmVyLCB0aGF0 IHdoaWxlIHRoZSBIUCBzd2l0Y2hlcwotICAgKHZhcmlvdXMgUHJvQ3VydmUgbW9kZWxzKSBwcm9k dWNlZCB0aGUgZGVzaXJlZCBsaXN0IG9mIGNvbW1hbmRzLCB0aGV5Ci0gICB3ZXJlIGludGVyc3Bl cnNlZCB3aXRoIGVzY2FwZSBzZXF1ZW5jZXMgZm9yIHNwZWNpYWwgZWZmZWN0cywgdGh1cwotICAg cmVuZGVyaW5nIHRoZSByZWNvcmRlZCBzZXNzaW9ucyB1bnN1aXRhYmxlIGZvciBmZWVkaW5nIGJh Y2sgaW50byB0aGUKLSAgIHN3aXRjaGVzLgotCi0gICBDLUtlcm1pdCA5LjAgaW50cm9kdWNlcyBh IG5ldyBmZWF0dXJlIHRvIHN0cmlwIHRoZSBvZmZlbmRpbmcgc2VxdWVuY2VzCi0gICBvdXQgb2Yg YSBzZXNzaW9uIGxvZywgbGVhdmluZyBqdXN0IHRoZSB0ZXh0LiBUaGUgY29tbWFuZCBTRVQKLSAg IFNFU1NJT04tTE9HIFRFWFQgYWN0aXZhdGVzIHRoaXMgZmVhdHVyZS4gSW4gQy1LZXJtaXQgOS4w IEFscGhhLjAyIGFuZAotICAgZWFybGllciwgZXNjYXBlIHNlcXVlbmNlIHN0cmlwcGluZyBvY2N1 cnJlZCBvbmx5IHdoaWxlIGxvZ2dpbmcKLSAgIGludGVyYWN0aXZlIChDT05ORUNUKSBzZXNzaW9u czsgYmVnaW5uaW5nIHdpdGggQWxwaGEuMDMgaXQgaXMgZG9uZSBhbHNvCi0gICBmb3IgZGF0YSB0 aGF0IGlzIHJlYWQgYnkgSU5QVVQgY29tbWFuZHMgYW5kIHRoZXJlZm9yZSB3b3JrcyBmb3Igc2Ny aXB0cwotICAgdG9vLgotCi0gICBBIHNhbXBsZSBIUCBTd2l0Y2ggQ29uZmlndXJhdGlvbiBCYWNr dXAgc2NyaXB0IGlzIFsxMDBdSEVSRSwgYW5kIGl0cwotICAgZGF0YSBmaWxlIGlzIFsxMDFdSEVS RS4gVGhpcyBzY3JpcHQgYWxzbyBpbGx1c3RyYXRlcyBzb21lIG90aGVyIG5ldwotICAgZmVhdHVy ZXMgb2YgQWxwaGEuMDM6Ci0KLSAgIE1FU1NBR0UgdGV4dAotICAgICAgICAgIFRoaXMgbGV0cyB5 b3UgcHV0IGRlYnVnZ2luZyBtZXNzYWdlcyBpbiB5b3VyIHNjcmlwdCB0aGF0IGNhbiBiZQotICAg ICAgICAgIGRpc3BsYXllZCBvciBub3QsIGFjY29yZGluZyB0byBTRVQgREVCVUcgTUVTU0FHRSAo YmVsb3cpLiBUaGlzCi0gICAgICAgICAgd2F5IHlvdSBkb24ndCBoYXZlIHRvIGNoYW5nZSB5b3Vy IHNjcmlwdCBmb3IgZGVidWdnaW5nLiAgSGludDoKLSAgICAgICAgICBJbiBVbml4LCBpbnZva2Ug dGhlIHNjcmlwdCBsaWtlIHRoaXM6Ci0KLSAgICAgJCBERUJVRz0xIHNjcmlwdG5hbWUgYXJnMSBh cmcyLi4uCi0KLSAgICAgICAgICBhbmQgdGhlbiBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgY29tbWFu ZCBpbiB5b3VyIHNjcmlwdDoKLQotICAgICBpZiBkZWZpbmVkIFwkKERFQlVHKSBzZXQgZGVidWcg bWVzc2FnZSBvbgotCi0gICBYTUVTU0FHRSB0ZXh0Ci0gICAgICAgICAgTGlrZSBNRVNTQUdFIGJ1 dCBwcmludHMgdGhlIHRleHQgd2l0aCBubyBsaW5lIHRlcm1pbmF0b3IsIHNvIGl0Ci0gICAgICAg ICAgY2FuIGJlIGNvbnRpbnVlZCBieSBzdWJzZXF1ZW50IG1lc3NhZ2VzLgotCi0gICBTRVQgREVC VUcgTUVTU0FHRSB7IE9OLCBPRkYsIFNUREVSUiB9Ci0gICAgICAgICAgT04gbWVhbnMgTUVTU0FH RSBjb21tYW5kcyBzaG91bGQgcHJpbnQgdG8gc3RhbmRhcmQgb3V0cHV0OyBPRkYKLSAgICAgICAg ICBtZWFucyB0aGV5IHNob3VsZG4ndCBwcmludCBhbnl0aGluZzsgU1RERVJSIG1lYW5zIHRoZSBt ZXNzYWdlcwotICAgICAgICAgIHNob3VsZCBiZSBwcmludGVkIHRvIFsxMDJdc3RkZXJyLiBERUJV RyBNRVNTQUdFIGlzIE9GRiBieQotICAgICAgICAgIGRlZmF1bHQsIGkuZS4gdW5sZXNzIHlvdSBT RVQgaXQgdG8gT04gb3IgU1RERVJSLgotCi0gICBJRiBERUJVRyBjb21tYW5kCi0gICAgICAgICAg RXhlY3V0ZXMgdGhlIGNvbW1hbmQgaWYgU0VUIERFQlVHIE1FU1NBR0UgaXMgbm90IE9GRi4KLQot ICAgVGhlIFx2KGxhc3Rjb21tYW5kKSB2YXJpYWJsZQotICAgICAgICAgIFRoaXMgdmFyaWFibGUg Y29udGFpbnMgdGhlIHByZXZpb3VzIGNvbW1hbmQuIFlvdSBjYW4gdXNlIGl0IGluCi0gICAgICAg ICAgZGVidWdnaW5nIGFuZCBlcnJvciBtZXNzYWdlIHRvIHNob3cgKGZvciBleGFtcGxlKSBleGFj dGx5IHdoYXQKLSAgICAgICAgICB0aGUgY29tbWFuZCB3YXMgdGhhdCBqdXN0IGZhaWxlZCwgd2l0 aG91dCBoYXZpbmcgdG8gbWFrZSBhIGNvcHkKLSAgICAgICAgICBvZiB0aGUgY29tbWFuZDoKLQot c2V0IGhvc3Qgc29tZWhvc3Quc29tZWNvbXBhbnkuY29tCi1pZiBmYWlsIGV4aXQgMSAiRkFUQUwg LSBcdihsYXN0Y29tbWFuZCkiCi0KLSAgICAgICAgICB3aGljaCwgaWYgdGhlIFNFVCBIT1NUIGNv bW1hbmQgZmFpbHMsIHByaW50cyAiRkFUQUwgLSBzZXQgaG9zdAotICAgICAgICAgIHNvbWVob3N0 LnNvbWVjb21wYW55LmNvbSIgYW5kIHRoZW4gZXhpdHMgd2l0aCBzdGF0dXMgMSAod2hpY2gKLSAg ICAgICAgICBub3JtYWxseSBpbmRpY2F0ZXMgZmFpbHVyZSkuCi0KLURlbW9uc3RyYXRpb246IEhQ IGlMTyBCbGFkZSBDb25maWd1cmF0aW9uCi0KLSAgIFsxMDNdVEhJUyBET0NVTUVOVCBkZXNjcmli ZXMgYSBzY3JpcHQgaW4gcHJvZHVjdGlvbiB1c2UgYXQgQ29sdW1iaWEKLSAgIFVuaXZlcnNpdHkg Zm9yIGNvbmZpZ3VyaW5nIGFuZCBkZXBsb3lpbmcgcmFja3MgZnVsbCBvZiBIUCBibGFkZSBzZXJ2 ZXJzCi0gICB0aHJvdWdoIHRoZWlyICJpbnRlZ3JhdGVkIExpZ2h0cyBPdXQiIChpTE8pIG1hbmFn ZW1lbnQgaW50ZXJmYWNlLAotICAgYnlwYXNzaW5nIHRoZSB0ZWRpb3VzIGFuZCBlcnJvci1wcm9u ZSBwcm9jZXNzIG9mIGNvbmZpZ3VyaW5nIHRoZQotICAgc2VydmVycyBvbmUgYnkgb25lIHRocm91 Z2ggdGhlIHZlbmRvci1wcm92aWRlZCBwb2ludC1hbmQtY2xpY2sgV2ViCi0gICBpbnRlcmZhY2Us IHdoaWNoIGlzIGlsbC1zdWl0ZWQgdG8gY29uZmlndXJpbmcgbGFyZ2UgbnVtYmVycyBvZiBibGFk ZXMuCi0gICBUaGUgc2NyaXB0IGlsbHVzdHJhdGVzIHNvbWUgb2YgQy1LZXJtaXQgOS4wJ3MgbmV3 IGZlYXR1cmVzOyBzb3VyY2UgY29kZQotICAgaXMgYXZhaWxhYmxlIHRocm91Z2ggdGhlIGxpbmsu IFRoZSBjb2RlIGlzIGFwdCB0byBjaGFuZ2UgZnJvbSB0aW1lIHRvCi0gICB0aW1lIGFzIG5ldyBy ZXF1aXJlbWVudHMgc3VyZmFjZS4KLQotRGVtb25zdHJhdGlvbjogSUJNL1JvbG0vU2llbWVucyBD QlggTWFuYWdlbWVudAotCi0gICBbMTA0XVRISVMgRE9DVU1FTlQgZGVzY3JpYmVzIGEgc3VpdGUg b2Ygc2NyaXB0cyAoc29tZSBpbiBwcm9kdWN0aW9uLAotICAgc29tZSBpbiBkZXZlbG9wbWVudCkg dXNlZCB0byBtYW5hZ2UgdGhlIENvbHVtYmlhIGNhbXB1cyAyMCwwMDAtbGluZQotICAgbWFpbiB0 ZWxlcGhvbmUgc3dpdGNoLCBhbG9uZyB3aXRoIGFib3V0IDEwIHNhdGVsbGl0ZSBzd2l0Y2hlcyBh dAotICAgb2ZmLWNhbXB1cyBsb2NhdGlvbnMuIFRoZXNlIHN3aXRjaGVzIGFyZSAxOTgwcyB0ZWNo bm9sb2d5KiwgdGhlaXIKLSAgIG1hbmFnZW1lbnQgY29uc29sZXMgYXJlIHNlcmlhbCBwb3J0cy4g QWNjZXNzIGlzIHZpYSBUZWxuZXQgdG8gcmV2ZXJzZQotICAgdGVybWluYWwgc2VydmVycy4gVGhl IHNjcmlwdHMgYWxsb3cgZm9yIGludGVyYWN0aXZlIHNlc3Npb25zIGFzIHdlbGwgYXMKLSAgIGF1 dG9tYXRpYyBwcm9kdWN0aW9uIChhbmQgaW4gc29tZSBjYXNlcyBmb3JtYXR0aW5nKSBvZiBkaWZm ZXJlbnQKLSAgIHJlcG9ydHMgcmVxdWlyZWQgYnkgZGlmZmVyZW50IGdyb3VwcyBhdCBkaWZmZXJl bnQgaW50ZXJ2YWxzLiBUaGVzZQotICAgc2NyaXB0cyByZXBsYWNlIGEgd2hvbGUgYXNzb3J0bWVu dCBvZiBhZC1ob2MgUHJvQ29tbSBBU1BFQ1Qgc2NyaXB0cwotICAgdGhhdCB3ZXJlIHNjYXR0ZXJl ZCBhbGwgb3ZlciB0aGUgcGxhY2UsIHdpdGggcGFzc3dvcmRzIGVtYmVkZGVkLiBUaGUKLSAgIG5l dyBzY3JpcHRzIGFyZSBpbnRlbmRlZCB0byBiZSBydW4gZnJvbSBhIGNlbnRyYWxpemVkIHNlcnZl ciB3aGVyZQotICAgdGhlcmUgaXMgYSBzaW5nbGUgd2VsbC1zZWN1cmVkIGNvbmZpZ3VyYXRpb24g ZmlsZSwgYW5kIHdoZXJlIHRoZXkgY2FuCi0gICBiZSB1c2VkIG9uIGRlbWFuZCwgb3IgaW4gY3Jv biBqb2JzLiBUaGV5IGFyZSBtb2R1bGFyIHNvIGNvZGUKLSAgIGR1cGxpY2F0aW9uIGlzIG1pbmlt YWwuCi0gICBfX19fX19fX19fX19fX19fX19fX19fX19fXwotICAgKiAgT2YgY291cnNlIHRoZSBV bml2ZXJzaXR5IGlzIGRlcGxveWluZyBuZXcgdGVjaG5vbG9neSBidXQgdGhlIGJ1dCB0aGUKLSAg IG9sZCBzeXN0ZW0gd2lsbCBiZSB1c2VkIGluIHBhcmFsbGVsIGZvciBzb21lIHRpbWUgdG8gY29t ZS4KLQotRGVtb25zdHJhdGlvbjogQ1NWIGFuZCBUU1YgRmlsZXMKLQotICAgQ29udGVudHMKLQot ICAgICAqIFsxMDVdUmVhZGluZyBhIENTViBvciBUU1YgUmVjb3JkIGFuZCBDb252ZXJ0aW5nIGl0 IHRvIGFuIEFycmF5Ci0gICAgICogWzEwNl1Vc2luZyBcZmpvaW4oKSB0byBjcmVhdGUgYSBDb21t YS0gb3IgVGFiLVNlcGFyYXRlZCBWYWx1ZSBMaXN0Ci0gICAgICAgZnJvbSBhbiBBcnJheQotICAg ICAqIFsxMDddVXNpbmcgQ1NWIG9yIFRTViBGaWxlcwotCi0gICBDb21tYS1TZXBhcmF0ZWQgVmFs dWUgKENTVikgZm9ybWF0IGlzIGNvbW1vbmx5IG91dHB1dCBieSBzcHJlYWRzaGVldHMKLSAgIGFu ZCBkYXRhYmFzZXMgd2hlbiBleHBvcnRpbmcgZGF0YSBpbnRvIHBsYWluLXRleHQgZmlsZXMgZm9y IGltcG9ydCBpbnRvCi0gICBvdGhlciBhcHBsaWNhdGlvbnMuIEhlcmUgYXJlIHRoZSBkZXRhaWxz OgotCi0gICBDb21tYS1TZXBhcmF0ZWQgTGlzdCBTeW50YXgKLQotICAgIDEuIEVhY2ggcmVjb3Jk IGlzIGEgc2VyaWVzIG9mIGZpZWxkcy4KLSAgICAyLiBSZWNvcmRzIGFyZSBpbiB3aGF0ZXZlciBm b3JtYXQgaXMgdXNlZCBieSB0aGUgdW5kZXJseWluZyBmaWxlCi0gICAgICAgc3lzdGVtIGZvciBs aW5lcyBvZiB0ZXh0LgotICAgIDMuIEZpZWxkcyB3aXRoaW4gcmVjb3JkcyBhcmUgc2VwYXJhdGVk IGJ5IGNvbW1hcywgd2l0aCB6ZXJvIG9yIG1vcmUKLSAgICAgICB3aGl0ZXNwYWNlIGNoYXJhY3Rl cnMgKHNwYWNlIG9yIHRhYikgYmVmb3JlIGFuZC9vciBhZnRlciB0aGUgY29tbWE7Ci0gICAgICAg c3VjaCB3aGl0ZXNwYWNlIGlzIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgc2VwYXJhdG9yLgotICAg IDQuIEZpZWxkcyB3aXRoIGVtYmVkZGVkIGNvbW1hcyBtdXN0IGJlIGVuY2xvc2VkIGluIEFTQ0lJ IGRvdWJsZXF1b3RlCi0gICAgICAgY2hhcmFjdGVycy4KLSAgICA1LiBGaWVsZHMgd2l0aCBsZWFk aW5nIG9yIHRyYWlsaW5nIHNwYWNlcyBtdXN0IGJlIGVuY2xvc2VkIGluIEFTQ0lJCi0gICAgICAg ZG91YmxlcXVvdGVzLgotICAgIDYuIEFueSBmaWVsZCBtYXkgYmUgZW5jbG9zZWQgaW4gQVNDSUkg ZG91YmxlcXVvdGVzLgotICAgIDcuIEZpZWxkcyB3aXRoIGVtYmVkZGVkIGRvdWJsZXF1b3RlcyBt dXN0IGJlIGVuY2xvc2VkIGluIGRvdWJsZXF1b3RlcwotICAgICAgIGFuZCBlYWNoIGludGVyaW9y IGRvdWJsZXF1b3RlIGlzIGRvdWJsZWQuCi0KLSAgIEhlcmUgaXMgYW4gZXhhbXBsZToKLQotYWFh LCBiYmIsIGhhcyBzcGFjZXMsLCJkZGQsZWVlLGZmZiIsICIgaGFzIHNwYWNlcyAiLCJNdWhhbW1h ZCAiIlRoZSBHcmVhdGVzdCIiIEEKLWxpIgotCi0gICBUaGUgZmlyc3QgdHdvIGFyZSByZWd1bGFy IGZpZWxkcy4gVGhlIHNlY29uZCBpcyBhIGZpZWxkIHRoYXQgaGFzIGFuCi0gICBlbWJlZGRlZCBz cGFjZSBidXQgaW4gd2hpY2ggYW55IGxlYWRpbmcgb3IgdHJhaWxpbmcgc3BhY2VzIGFyZSB0byBi ZQotICAgaWdub3JlZC4gVGhlIGZvdXJ0aCBpcyBhbiBlbXB0eSBmaWVsZCwgYnV0IHN0aWxsIGEg ZmllbGQuIFRoZSBmaWZ0aCBpcwotICAgYSBmaWVsZCB0aGF0IGNvbnRhaW5zIGVtYmVkZGVkIGNv bW1hcy4gVGhlIHNpeHRoIGhhcyBsZWFkaW5nIGFuZAotICAgdHJhaWxpbmcgc3BhY2VzLiBUaGUg bGFzdCBmaWVsZCBoYXMgZW1iZWRkZWQgcXVvdGF0aW9uIG1hcmtzLgotCi0gICBQcmlvciB0byBD LUtlcm1pdCA5LjAgQWxwaGEuMDYsIEMtS2VybWl0IGRpZCBub3QgaGFuZGxlIENTViBmaWxlcwot ICAgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uIGFib3ZlLiBNb3N0IHNlcmlvdXNseSwg dGhlcmUgd2FzIG5vCi0gICBwcm92aXNpb24gZm9yIGEgc2VwYXJhdG9yIHRvIGJlIHN1cnJvdW5k ZWQgYnkgd2hpdGVzcGFjZSB0aGF0IHdhcyB0byBiZQotICAgY29uc2lkZXJlZCBwYXJ0IG9mIHRo ZSBzZXBhcmF0b3IuIEFsc28gdGhlcmUgd2FzIG5vIHByb3Zpc2lvbiBmb3IKLSAgIHF1b3Rpbmcg ZG91YmxlcXVvdGVzIGluc2lkZSBvZiBhIHF1b3RlZCBzdHJpbmcuCi0KLVJlYWRpbmcgYSBDU1Yg cmVjb3JkCi0KLSAgIE5vdyB0aGUgXGZzcGxpdCgpIGZ1bmN0aW9uIGNhbiBoYW5kbGUgYW55IENT Vi1mb3JtYXQgc3RyaW5nIGlmIHlvdQotICAgaW5jbHVkZSB0aGUgc3ltYm9saWMgaW5jbHVkZSBz ZXQgIkNTViIgYXMgdGhlIDR0aCBwYXJhbWV0ZXIuIFRvCi0gICBpbGx1c3RyYXRlLCB0aGlzIHBy b2dyYW06Ci0KLWRlZiB4eCB7Ci0gICBlY2hvIFtcZmNvbnRlbnRzKFwlMSldCi0gICAuXCU5IDo9 IFxmc3BsaXQoXGZjb250ZW50cyhcJTEpLCAmYSwgXDQ0LCBDU1YpCi0gICBmb3IgXCVpIDEgXCU5 IDEgeyBlY2hvICJcZmxwYWQoXCVpLDMpLiBbXCZhW1wlaV1dIiB9Ci0gICBlY2hvICItLS0tLS0t LS0tLSIKLX0KLXh4IHthLGIsY30KLXh4IHsgYSAsIGIgLCBjIH0KLXh4IHsgYWFhLCxjY2MsIiB3 aXRoIHNwYWNlcyAiLHp6eiB9Ci14eCB7ICIxIiwiMiIsIjMiLCIiLCI1IiB9Ci14eCB7IHRoaXMg aXMgYSBzaW5nbGUgZmllbGQgfQoteHggeyB0aGlzIGlzIG9uZSBmaWVsZCwgIiBhbmQgdGhpcyBp cyBhbm90aGVyICAiIH0KLXh4IHsgbmFtZSwiTW9oYW1tYWQgIiJUaGUgR3JlYXRlc3QiIiBBbGki LCBhZ2UsIDY3IH0KLXh4IHsgIiIiZmllbGQgZW5jbG9zZWQgaW4gZG91YmxlcXVvdGVzIiIiIH0K LWV4aXQKLQotICAgZ2l2ZXMgdGhlIGZvbGxvd2luZyByZXN1bHRzOgotCi1bYSxiLGNdCi0gIDEu IFthXQotICAyLiBbYl0KLSAgMy4gW2NdCi0tLS0tLS0tLS0tLQotWyBhICwgYiAsIGMgXQotICAx LiBbYV0KLSAgMi4gW2JdCi0gIDMuIFtjXQotLS0tLS0tLS0tLS0KLVsgYWFhLCxjY2MsIiB3aXRo IHNwYWNlcyAiLHp6eiBdCi0gIDEuIFthYWFdCi0gIDIuIFtdCi0gIDMuIFtjY2NdCi0gIDQuIFsg d2l0aCBzcGFjZXMgXQotICA1LiBbenp6XQotLS0tLS0tLS0tLS0KLVsgIjEiLCIyIiwiMyIsIiIs IjUiIF0KLSAgMS4gWzFdCi0gIDIuIFsyXQotICAzLiBbM10KLSAgNC4gW10KLSAgNS4gWzVdCi0t LS0tLS0tLS0tLQotWyB0aGlzIGlzIGEgc2luZ2xlIGZpZWxkIF0KLSAgMS4gW3RoaXMgaXMgYSBz aW5nbGUgZmllbGRdCi0tLS0tLS0tLS0tLQotWyB0aGlzIGlzIG9uZSBmaWVsZCwgIiBhbmQgdGhp cyBpcyBhbm90aGVyICAiIF0KLSAgMS4gW3RoaXMgaXMgb25lIGZpZWxkXQotICAyLiBbIGFuZCB0 aGlzIGlzIGFub3RoZXIgIF0KLS0tLS0tLS0tLS0tCi1bIG5hbWUsIk1vaGFtbWFkICIiVGhlIEdy ZWF0ZXN0IiIgQWxpIiwgYWdlLCA2NyBdCi0gIDEuIFtuYW1lXQotICAyLiBbTW9oYW1tYWQgIlRo ZSBHcmVhdGVzdCIgQWxpXQotICAzLiBbYWdlXQotICA0LiBbNjddCi0tLS0tLS0tLS0tLQotWyAi IiJmaWVsZCBlbmNsb3NlZCBpbiBkb3VibGVxdW90ZXMiIiIgXQotICAxLiBbImZpZWxkIGVuY2xv c2VkIGluIGRvdWJsZXF1b3RlcyJdCi0tLS0tLS0tLS0tLQotCi0gICBUaGUgc2VwYXJhdG9yIFw0 NCAoY29tbWEpIG11c3Qgc3RpbGwgYmUgc3BlY2lmaWVkIGFzIHRoZSBicmVhayBzZXQgKDNyZAot ICAgXGZzcGxpdCgpIHBhcmFtZXRlcikuIFdoZW4gIkNTViIgaXMgc3BlY2lmaWVkIGFzIHRoZSBp bmNsdWRlIHNldDoKLSAgICAgKiBUaGUgR3JvdXBpbmcgTWFzayBpcyBhdXRvbWF0aWNhbGx5IHNl dCB0byAxICh3aGljaCBzcGVjaWZpZXMgdGhhdAotICAgICAgIHRoZSBBU0NJSSBkb3VibGVxdW90 ZSBjaGFyYWN0ZXIgKCIpIGlzIHVzZWQgZm9yIGdyb3VwaW5nOwotICAgICAqIFRoZSBTZXBhcmF0 b3IgRmxhZyBpcyBhdXRvbWF0aWNhbGx5IHNldCB0byAxIHNvIHRoYXQgYWRqYWNlbnQgZmllbGQK LSAgICAgICBzZXBhcmF0b3JzIHdpbGwgbm90IGJlIGNvbGxhcHNlZDsKLSAgICAgKiBBbGwgYnl0 ZXMgKHZhbHVlcyAwIHRocm91Z2ggMjU1KSBvdGhlciB0aGFuIHRoZSBicmVhayBjaGFyYWN0ZXIg YXJlCi0gICAgICAgYWRkZWQgdG8gdGhlIGluY2x1ZGUgc2V0OwotICAgICAqIEFueSBsZWFkaW5n IHdoaXRlc3BhY2UgaXMgc3RyaXBwZWQgZnJvbSB0aGUgZmlyc3QgZWxlbWVudCB1bmxlc3MgaXQK LSAgICAgICBpcyBlbmNsb3NlZCBpbiBkb3VibGVxdW90ZXM7Ci0gICAgICogQW55IHRyYWlsaW5n IHdoaXRlc3BhY2UgaXMgdHJpbW1lZCBmcm9tIHRoZSBlbmQgb2YgdGhlIGxhc3QgZWxlbWVudAot ICAgICAgIHVubGVzcyBpdCBpcyBlbmNsb3NlZCBpbiBkb3VibGVxdW90ZXM7Ci0gICAgICogSWYg dGhlIHNlcGFyYXRvciBjaGFyYWN0ZXIgaGFzIGFueSBzcGFjZXMgb3IgdGFicyBwcmVjZWRpbmcg aXQgb3IKLSAgICAgICBmb2xsb3dpbmcgaXQsIHRoZXkgYXJlIGlnbm9yZWQgYW5kIGRpc2NhcmRl ZDsKLSAgICAgKiBUaGUgc2VwYXJhdG9yIGNoYXJhY3RlciBpcyB0cmVhdGVkIGFzIGFuIG9yZGlu YXJ5IGRhdGEgY2hhcmFjdGVyIGlmCi0gICAgICAgaXQgYXBwZWFycyBpbiBhIHF1b3RlZCBmaWVs ZDsKLSAgICAgKiBBIHNlcXVlbmNlIG9mIHR3byBkb3VibGVxdW90ZSBjaGFyYWN0ZXJzICgiIikg d2l0aGluIGEgcXVvdGVkIGZpZWxkCi0gICAgICAgaXMgY29udmVydGVkIHRvIGEgc2luZ2xlIGRv dWJsZXF1b3RlLgotCi0gICBUaGVyZSBpcyBhbHNvIGEgbmV3IFRTViBzeW1ib2xpYyBpbmNsdWRl IHNldCwgd2hpY2ggaXMgbGlrZSBDU1YgZXhjZXB0Ci0gICB3aXRob3V0IHRoZSBxdW90aW5nIHJ1 bGVzIG9yIHRoZSBzdHJpcHBpbmcgb2Ygd2hpdGVzcGFjZSBhcm91bmQgdGhlCi0gICBzZXBhcmF0 b3IgYmVjYXVzZSwgYnkgZGVmaW5pdGlvbiwgVFNWIGZpZWxkcyBkbyBub3QgY29udGFpbiB0YWJz LgotCi0gICBPZiBjb3Vyc2UgeW91IGNhbiBzcGVjaWZ5IGFueSBzZXBhcmF0b3IocykgeW91IHdh bnQgd2l0aCBlaXRoZXIgdGhlCi0gICBDU1YsIFRTViwgb3IgQUxMIHN5bWJvbGljIGluY2x1ZGUg c2V0cy4gRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIGEgVFNWCi0gICBmaWxlIGluIHdoaWNoIHlv dSB3YW50IHRoZSBzcGFjZXMgYXJvdW5kIGVhY2ggVGFiIHRvIGJlIGRpc2NhcmRlZCwgeW91Ci0g ICBjYW4gdXNlOgotCi1cZnNwbGl0KHZhcmlhYmxlLCAmYSwgXDksIENTVikKLQotICAgXDkgaXMg VGFiLgotCi0gICBUaGUgbmV3IHN5bWJvbGljIGluY2x1ZGUgc2V0cyBjYW4gYWxzbyBiZSB1c2Vk IHdpdGggXGZ3b3JkKCksIHdoaWNoIGlzCi0gICBqdXN0IGxpa2UgXGZzcGxpdCgpIGV4Y2VwdCB0 aGF0IGl0IHJldHJpZXZlcyB0aGUgbnRoIHdvcmQgZnJvbSB0aGUKLSAgIGFyZ3VtZW50IHN0cmlu ZywgcmF0aGVyIHRoYW4gYW4gYXJyYXkgb2YgYWxsIHRoZSB3b3Jkcy4gSW4gQy1LZXJtaXQgeW91 Ci0gICBjYW4gZ2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZXNlIG9yIGFueSBvdGhlciBmdW5jdGlv bnMgd2l0aCB0aGUgSEVMUAotICAgRlVOQ1RJT04gY29tbWFuZCwgZS5nLjoKLQotQy1LZXJtaXQ+ IGhlbHAgZnVuYyB3b3JkCi0KLUZ1bmN0aW9uIFxmd29yZChzMSxuMSxzMixzMyxuMixuMykgLSBF eHRyYWN0cyBhIHdvcmQgZnJvbSBhIHN0cmluZy4KLSAgICBzMSA9IHNvdXJjZSBzdHJpbmcuCi0g ICAgbjEgPSB3b3JkIG51bWJlciAoMS1iYXNlZCkgY291bnRpbmcgZnJvbSBsZWZ0OyBpZiBuZWdh dGl2ZSwgZnJvbSByaWdodC4KLSAgICBzMiA9IG9wdGlvbmFsIGJyZWFrIHNldC4KLSAgICBzMyA9 IG9wdGlvbmFsIGluY2x1ZGUgc2V0IChvciBBTEwsIENTViwgb3IgVFNWKS4KLSAgICBuMiA9IG9w dGlvbmFsIGdyb3VwaW5nIG1hc2suCi0gICAgbjMgPSBvcHRpb25hbCBzZXBhcmF0b3IgZmxhZzoK LSAgICAgICAwID0gY29sbGFwc2UgYWRqYWNlbnQgc2VwYXJhdG9yczsKLSAgICAgICAxID0gZG9u J3QgY29sbGFwc2UgYWRqYWNlbnQgc2VwYXJhdG9ycy4KLQotICBcZndvcmQoKSByZXR1cm5zIHRo ZSBuMXRoICJ3b3JkIiBvZiB0aGUgc3RyaW5nIHMxLCBhY2NvcmRpbmcgdG8gdGhlCi0gIGNyaXRl cmlhIHNwZWNpZmllZCBieSB0aGUgb3RoZXIgcGFyYW1ldGVycy4KLQotICBUaGUgQlJFQUsgU0VU IGlzIHRoZSBzZXQgb2YgYWxsIGNoYXJhY3RlcnMgdGhhdCBzZXBhcmF0ZSB3b3Jkcy4gVGhlCi0g IGRlZmF1bHQgYnJlYWsgc2V0IGlzIGFsbCBjaGFyYWN0ZXJzIGV4Y2VwdCBBU0NJSSBsZXR0ZXJz IGFuZCBkaWdpdHMuCi0gIEFTQ0lJIChDMCkgY29udHJvbCBjaGFyYWN0ZXJzIGFyZSB0cmVhdGVk IGFzIGJyZWFrIGNoYXJhY3RlcnMgYnkgZGVmYXVsdCwKLSAgYXMgYXJlIHNwYWNpbmcgYW5kIHB1 bmN0dWF0aW9uIGNoYXJhY3RlcnMsIGJyYWNrZXRzLCBhbmQgc28gb24sIGFuZAotICBhbGwgOC1i aXQgY2hhcmFjdGVycy4KLQotICBUaGUgSU5DTFVERSBTRVQgaXMgdGhlIHNldCBvZiBjaGFyYWN0 ZXJzIHRoYXQgYXJlIHRvIGJlIHRyZWF0ZWQgYXMKLSAgcGFydHMgb2Ygd29yZHMgZXZlbiB0aG91 Z2ggdGhleSBub3JtYWxseSB3b3VsZCBiZSBzZXBhcmF0b3JzLiAgVGhlCi0gIGRlZmF1bHQgaW5j bHVkZSBzZXQgaXMgZW1wdHkuICBUaHJlZSBzcGVjaWFsIHN5bWJvbGljIGluY2x1ZGUgc2V0cyBh cmUKLSAgYWxzbyBhbGxvd2VkOgotCi0gICAgQUxMIChtZWFuaW5nIGluY2x1ZGUgYWxsIGJ5dGVz IHRoYXQgYXJlIG5vdCBpbiB0aGUgYnJlYWsgc2V0KQotICAgIENTViAoc3BlY2lhbCB0cmVhdG1l bnQgZm9yIENvbW1hLVNlcGFyYXRlZC1WYWx1ZSByZWNvcmRzKQotICAgIFRTViAoc3BlY2lhbCB0 cmVhdG1lbnQgZm9yIFRhYi1TZXBhcmF0ZWQtVmFsdWUgcmVjb3JkcykKLQotICBGb3Igb3BlcmF0 aW5nIG9uIDgtYml0IGNoYXJhY3RlciBzZXRzLCB0aGUgaW5jbHVkZSBzZXQgc2hvdWxkIGJlIEFM TC4KLQotICBJZiB0aGUgR1JPVVBJTkcgTUFTSyBpcyBnaXZlbiBhbmQgaXMgbm9uemVybywgd29y ZHMgY2FuIGJlIGdyb3VwZWQgYnkKLSAgcXVvdGVzIG9yIGJyYWNrZXRzIHNlbGVjdGVkIGJ5IHRo ZSBzdW0gb2YgdGhlIGZvbGxvd2luZzoKLQotICAgICAxID0gZG91YmxlcXVvdGVzOiAgICAiYSBi IGMiCi0gICAgIDIgPSBicmFjZXM6ICAgICAgICAgIHthIGIgY30KLSAgICAgNCA9IGFwb3N0cm9w aGVzOiAgICAgJ2EgYiBjJwotICAgICA4ID0gcGFyZW50aGVzZXM6ICAgICAoYSBiIGMpCi0gICAg MTYgPSBzcXVhcmUgYnJhY2tldHM6IFthIGIgY10KLSAgICAzMiA9IGFuZ2xlIGJyYWNrZXRzOiAg PGEgYiBjPgotCi0gIE5lc3RpbmcgaXMgcG9zc2libGUgd2l0aCB7fSgpW108PiBidXQgbm90IHdp dGggcXVvdGVzIG9yIGFwb3N0cm9waGVzLgotCi1SZXR1cm5zIHN0cmluZzoKLSAgV29yZCBudW1i ZXIgbjEsIGlmIHRoZXJlIGlzIG9uZSwgb3RoZXJ3aXNlIGFuIGVtcHR5IHN0cmluZy4KLQotQWxz byBzZWU6Ci0gIEhFTFAgRlVOQ1RJT04gU1BMSVQKLQotQy1LZXJtaXQ+Ci0KLVVzaW5nIFxmam9p bigpIHRvIGNyZWF0ZSBDb21tYS0gb3IgVGFiLVNlcGFyYXRlZCBWYWx1ZSBMaXN0cyBmcm9tIEFy cmF5cwotCi0gICBJbiBDLUtlcm1pdCA5LjAsIFxmc3BsaXQoKSdzIGludmVyc2UgZnVuY3Rpb24s IFsxMDhdXGZqb2luKCkgcmVjZWl2ZWQKLSAgIHRoZSBjYXBhYmlsaXR5IG9mIGNvbnZlcnRpbmcg YW4gYXJyYXkgaW50byBhIGNvbW1hLXNlcGFyYXRlZCBvciBhCi0gICB0YWItc2VwYXJhdGVkIHZh bHVlIGxpc3QuIFRodXMsIGdpdmVuIGEgQ1NWLCBpZiB5b3Ugc3BsaXQgaXQgaW50byBhbgotICAg YXJyYXkgd2l0aCBcZnNwbGl0KCkgYW5kIHRoZW4gam9pbiB0aGUgYXJyYXkgd2l0aCBcZmpvaW4o KSwgZ2l2aW5nIGVhY2gKLSAgIGZ1bmN0aW9uIHRoZSBuZXcgQ1NWIHBhcmFtZXRlciBpbiB0aGUg YXBwcm9wcmlhdGUgYXJndW1lbnQgcG9zaXRpb24sCi0gICB0aGUgcmVzdWx0IHdpbGwgYmUgd2ls bCBiZSBlcXVpdmFsZW50IHRvIHRoZSBvcmlnaW5hbCwgYWNjb3JkaW5nIHRvIHRoZQotICAgQ1NW IGRlZmluaXRpb24uIEl0IG1pZ2h0IG5vdCBiZSBpZGVudGljYWwsIGJlY2F1c2UgaWYgdGhlIHJl c3VsdCBoYWQKLSAgIGV4dHJhbmVvdXMgc3BhY2VzIGJlZm9yZSBvciBhZnRlciB0aGUgc2VwYXJh dGluZyBjb21tYXMsIHRoZXNlIGFyZQotICAgZGlzY2FyZGVkLCBidXQgdGhhdCBkb2VzIG5vdCBh ZmZlY3QgdGhlIGVsZW1lbnRzIHRoZW1zZWx2ZXMuIFRoZSBuZXcKLSAgIHN5bnRheCBmb3IgXGZq b2luKCkgaXM6Ci0KLSAgIFxmam9pbigmYSxDU1YpCi0gICAgICAgICAgR2l2ZW4gdGhlIGFycmF5 IFwmYVtdIG9yIGFueSBvdGhlciB2YWxpZCBhcnJheSBkZXNpZ25hdG9yLCBqb2lucwotICAgICAg ICAgIGl0cyBlbGVtZW50cyBpbnRvIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QgYWNjb3JkaW5nIHRv IHRoZQotICAgICAgICAgIFsxMDldcnVsZXMgbGlzdGVkIGFib3ZlLgotCi0gICBcZmpvaW4oJmEs VFNWKQotICAgICAgICAgIEpvaW5zIHRoZSBlbGVtZW50cyBvZiB0aGUgZ2l2ZW4gYXJyYXkgaW50 byBhIHRhYi1zZXBhcmF0ZWQgbGlzdCwKLSAgICAgICAgICBhbHNvIGRlc2NyaWJlZCBhYm92ZS4K LQotICAgWzExMF1QcmV2aW91cyBjYWxsaW5nIGNvbnZlbnRpb25zIGZvciBcZmpvaW4oKSBhcmUg dW5kaXN0dXJiZWQsCi0gICBpbmNsdWRpbmcgdGhlIGFiaWxpdHkgdG8gc3BlY2lmeSBhIHBvcnRp b24gb2YgYW4gYXJyYXksIHJhdGhlciB0aGFuIHRoZQotICAgd2hvbGUgYXJyYXk6Ci0KLWRlY2xh cmUgXCZhW10gPSAxIDIgMyA0IDUgNiA3IDggOQotZWNobyBcZmpvaW4oJmFbMzo3XSxDU1YpCi0z LDQsNSw2LDcKLQotICAgVXNpbmcgXGZzcGxpdCgpIGFuZCBcZmpvaW4oKSBpdCBpcyBub3cgcG9z c2libGUgdG8gY29udmVydCBhCi0gICBjb21tYS1zZXBhcmF0ZWQgdmFsdWUgbGlzdCBpbnRvIGEg dGFiLXNlcGFyYXRlZCB2YWx1ZSBsaXN0LCBhbmQgdmljZQotICAgdmVyc2EgKHdoaWNoIGlzIG5v dCBhIHNpbXBsZSBtYXR0ZXIgb2YgY2hhbmdpbmcgY29tbWFzIHRvIHRhYnMgb3IgdmljZQotICAg dmVyc2EpLgotCi1BcHBsaWNhdGlvbnMgZm9yIENTViBGaWxlcwotCi0gICBEYXRhYmFzZXMgc3Vj aCBhcyBNUyBBY2Nlc3Mgb3IgTXlTUUwgY2FuIGV4cG9ydCB0YWJsZXMgb3IgcmVwb3J0cyBpbgot ICAgQ1NWIGZvcm1hdCwgYW5kIHRoZW4gS2VybWl0IGNhbiByZWFkIHRoZSByZXN1bHRpbmcgQ1NW IGZpbGUgYW5kIGRvCi0gICB3aGF0ZXZlciB5b3UgbGlrZSB3aXRoIGl0OyB0eXBpY2FsbHkgc29t ZXRoaW5nIHRoYXQgY291bGQgbm90IGJlIGRvbmUKLSAgIHdpdGggdGhlIGRhdGFiYXNlIHF1ZXJ5 IGxhbmd1YWdlIGl0c2VsZiAob3IgdGhhdCB5b3UgZGlkbid0IGtub3cgaG93IHRvCi0gICBkbyB0 aGF0IHdheSk6IGNyZWF0ZSByZXBvcnRzIG9yIGRhdGFzZXRzIGJhc2VkIG9uIGNvbXBsZXggY3Jp dGVyaWEgb3IKLSAgIHByb2NlZHVyZXMsIGVkaXQgb3IgbW9kaWZ5IHNvbWUgZmllbGRzLCBldGMs IGFuZCB0aGVuIHVzZSBcZmpvaW4oKSB0bwotICAgcHV0IGVhY2ggcmVjb3JkIGJhY2sgaW4gQ1NW IGZvcm0gc28gaXQgY2FuIGJlIHJlaW1wb3J0ZWQgaW50byBhCi0gICBzcHJlYWRzaGVldCBvciBk YXRhYmFzZS4KLQotICAgSGVyZSBpcyBhIHNpbXBsZSBleGFtcGxlIGluIHdoaWNoIHdlIHB1cmdl IGFsbCByZWNvcmRzIG9mIGN1c3RvbWVycyB3aG8KLSAgIGhhdmUgdHdvIG9yIG1vcmUgdW5wYWlk IGJpbGxzLiBUaGUgZmlsZSBpcyBzb3J0ZWQgc28gdGhhdCBlYWNoIGxpY2Vuc2UKLSAgIHB1cmNo YXNlIHJlY29yZCBpcyBmb2xsb3dlZCBieSBpdHMgYW5udWFsIG1haW50ZW5hbmNlIHBheW1lbnQg cmVjb3JkcwotICAgaW4gY2hyb25vbG9naWNhbCBvcmRlci4KLQotIyEvdXNyL2xvY2FsL2Jpbi9r ZXJtaXQKLS5maWxlbmFtZSA9IHNvbWVmaWxlLmNzdiAgICAgICAgIyBJbnB1dCBmaWxlIGluIENT ViBmb3JtYXQKLWZvcGVuIC9yZWFkIFwlYyBcbShmaWxlbmFtZSkgICAgIyBPcGVuIGl0Ci1pZiBm YWlsIGV4aXQgICAgICAgICAgICAgICAgICAgICMgRG9uJ3QgZ28gb24gaWYgb3BlbiBmYWlsZWQK LWNvcHkgXG0oZmlsZW5hbWUpIC4vbmV3ICAgICAgICAgIyBNYWtlIGEgY29weSBvZiB0aGUgZmls ZQotCi0ub2xkc2VyaWFsID0gMDAwMDAwMDAwMDAgICAgICAgICMgTXVsdGlwbGUgcmVjb3JkcyBm b3IgZWFjaCBzZXJpYWwgbnVtYmVyCi0uemVyb3MgPSAwICAgICAgICAgICAgICAgICAgICAgICMg VW5wYWlkIGJpbGwgY291bnRlcgotCi13aGlsZSB0cnVlIHsgICAgICAgICAgICAgICAgICAgICMg TG9vcAotICAgIGZyZWFkIC9saW5lIFwlYyBsaW5lICAgICAgICAjIEdldCBhIHJlY29yZAotICAg IGlmIGZhaWwgZXhpdCAgICAgICAgICAgICAgICAjIEVuZCBvZiBmaWxlCi0gICAgLm4gOj0gXGZz cGxpdChcbShsaW5lKSwmYSxcNDQsQ1NWKSAgICAjIFNwbGl0IHRoZSBmaWVsZHMgaW50byBhbiBh cnJheQotICAgIGlmIG5vdCBlcXUgIlxtKG9sZHNlcmlhbCkiICJcJmFbNl0iIHsgIyBIYXZlIG5l dyBzZXJpYWwgbnVtYmVyPwotICAgICAgICAjIFJlbW92ZSBhbGwgcmVjb3JkcyBmb3IgcHJldmlv dXMgc2VyaWFsIG51bWJlcgotICAgICAgICAjIGlmIHR3byBvciBtb3JlIGJpbGxzIHdlcmUgbm90 IHBhaWQuLi4KLSAgICAgICAgaWYgPiBcbSh6ZXJvcykgMSB7Ci0gICAgICAgICAgICBncmVwIC9u b21hdGNoIFxtKG9sZHNlcmlhbCkgL291dHB1dDouL25ldzIgLi9uZXcKLSAgICAgICAgICAgIHJl bmFtZSAuL25ldzIgLi9uZXcKLSAgICAgICAgfQotICAgICAgICAub2xkc2VyaWFsIDo9IFwmYVs2 XSAgICAjIFRvIGRldGVjdCBuZXh0IHRpbWUgc2VyaWFsIG51bWJlciBjaGFuZ2VzCi0gICAgICAg IC56ZXJvcyA9IDAgICAgICAgICAgICAgICMgUmVzZXQgdW5wYWlkIGJpbGwgY291bnRlcgotICAg IH0KLSAgICBpZiBlcXUgIlwmYVs1XSIgIiQwLjAwIiB7ICAgIyBFbGVtZW50IDUgaXMgYW1vdW50 IHBhaWQKLSAgICAgICAgaW5jcmVtZW50IHplcm9zICAgICAgICAgIyBJZiBpdCdzIHplcm8sIGNv dW50IGl0LgotICAgIH0KLX0KLWZjbG9zZSBcJWMKLQotICAgUmV3cml0aW5nIHRoZSBmaWxlIG11 bHRpcGxlIHRpbWVzIGlzIGluZWxlZ2FudCwgYnV0IHRoaXMgaXMgYSBxdWljayBhbmQKLSAgIGRp cnR5IHVzZS1vbmNlLWFuZC1kaXNjYXJkIHNjcmlwdCwgc28gZWxlZ2FuY2UgZG9lc24ndCBjb3Vu dC4gVGhlCi0gICBleGFtcGxlIGlzIGludGVyZXN0aW5nIGluIHRoYXQgaXQgcHVyZ2VzIGNlcnRh aW4gcmVjb3JkcyBiYXNlZCBvbiB0aGUKLSAgIGNvbnRlbnRzIG9mIG90aGVyIHJlY29yZHMuIE1h eWJlIHRoZXJlIGlzIGEgd2F5IHRvIGRvIHRoaXMgZGlyZWN0bHkKLSAgIHdpdGggU1FMLCBidXQg d2h5IHVzZSBTUUwgd2hlbiB5b3UgY2FuIHVzZSBLZXJtaXQ/Ci0KLSAgIEhlcmUgaXMgdGhlIHNh bWUgdGFzayBidXQgdGhpcyB0aW1lIG5vIHNoZWxsaW5nIG91dCwgYW5kIHRoaXMgdGltZSB3ZQot ICAgZG8gY2hhbmdlIGFuZCBhZGQgc29tZSBmaWVsZHMgYW5kIHRoZW4gam9pbiB0aGUgcmVzdWx0 IGJhY2sgaW50byBhIENTVgotICAgcmVjb3JkIGFuZCB3cml0ZSBpdCBvdXQgdG8gYSBuZXcgZmls ZS4gVGhlIG9iamVjdCBpcyB0byBjcmVhdGUgYSByZWNvcmQKLSAgIGZvciBlYWNoIGxpY2Vuc2Ug dGhhdCBzaG93cyBub3Qgb25seSB0aGUgZGF0ZSBhbmQgcHVyY2hhc2UgcHJpY2Ugb2YgdGhlCi0g ICBsaWNlbnNlIGJ1dCBhbHNvIHRoZSBkYXRlIGFuZCBhbW91bnQgb2YgdGhlIGxhc3QgbWFpbnRl bmFuY2UgcGF5bWVudCwKLSAgIGFuZCB0byBhZGQgbmV3IGZpZWxkcyBmb3Igc29ydGluZyBieSBh bm5pdmVyc2FyeSAobW9udGggYW5kIGRheSk6Ci0KLSMhdXNyL2xvY2FsL2Jpbi9rZXJtaXQgKwot Y2Qgfi9zb21lZGlyZWN0b3J5ICAgICAgICAgICAgICAgICAgICAgICMgQ0QgdG8gYXBwcm9wcmlh dGUgZGlyZWN0b3J5Ci1pZiBmYWlsIGV4aXQgMSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBN YWtlIHN1cmUgd2UgZGlkCi0uZmlsZW5hbWUgOj0gXCUxICAgICAgICAgICAgICAgICAgICAgICAg IyBGaWxlbmFtZSBmcm9tIGNvbW1hbmQgbGluZQotaWYgbm90IGRlZiBmaWxlbmFtZSB7ICAgICAg ICAgICAgICAgICAgICMgSWYgbm9uZSBnaXZlIHVzYWdlIG1lc3NhZ2UKLSAgICBleGl0IDEgIlVz YWdlOiBcJTA6IGluZmlsZSBbIG91dGZpbGUgXSIKLX0KLWZvcGVuIC9yZWFkIFwlYyBcbShmaWxl bmFtZSkgICAgICAgICAgICAjIE9wZW4gdGhlIGlucHV0IENTViBmaWxlCi1pZiBmYWlsIGV4aXQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgd2UgZGlkCi0KLS5vdXRwdXQg Oj0gXCUyICAgICAgICAgICAgICAgICAgICAgICAgICAjIE91dHB1dCBmaWxlbmFtZSBmcm9tIGNv bW1hbmQgbGluZQotaWYgbm90IGRlZiBvdXRwdXQgeyAgICAgICAgICAgICAgICAgICAgICMgU3Vw cGx5IG9uZSBpZiBub3QgZ2l2ZW4KLSAgICAub3V0cHV0IDo9IE5ld19cbShmaWxlbmFtZSkKLX0K LWZvcGVuIC93cml0ZSBcJW8gXG0ob3V0cHV0KSAgICAgICAgICAgICAjIE9wZW4gb3V0cHV0IGZp bGUKLWlmIGZhaWwgZXhpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIENoZWNrIHRoYXQg d2UgZGlkCi0KLS5zZXJpYWwgPSAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgICAgICAjIEluaXRp YWxpemUgc2VyaWFsIG51bWJlcgotLmxpY2Vuc2VzID0gMCAgICAgICAgICAgICAgICAgICAgICAg ICAgICMgYW5kIGxpY2Vuc2UgY291bnRlcgotCi1mcmVhZCAvbGluZSBcJWMgbGluZSAgICAgICAg ICAgICAgICAgICAgICAgICMgRmlyc3QgbGluZSBpcyBjb2x1bW4gbGFiZWxzCi1pZiBmYWlsIGV4 aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQ2hlY2sKLWZ3cml0ZSAvbGluZSBc JW8gIlxtKGxpbmUpLEFNTV9ERCxBWVlZWSIgICAgIyBXcml0ZSBuZXcgbGFiZWxzIGxpbmUKLQot IyBSZW1haW5pbmcgbGluZXMgYXJlIGxpY2Vuc2UgcHVyY2hhc2VzIChLOTVCKSBmb2xsb3dlZCBi eSB6ZXJvIG9yIG1vcmUKLSMgbWFpbnRlbmFuY2UgaW52b2ljZXMgKEs5NUJNKSBmb3IgZWFjaCBs aWNlbnNlLgotCi0uZGF0ZXBhaWQgPSAwMC8wMC8wMDAwICAgICAgICAgICAgICAgICAgIyBJbml0 aWFsaXplIGxhc3QgbWFpbnQgcGF5bWVudCBkYXRlCi0uYW10cGFpZCA9ICQwLjAwICAgICAgICAg ICAgICAgICAgICAgICAgIyBJbml0aWFsaXplIGxhc3QgbWFpbnQgcGF5bWVudCBhbW91bnQKLXNl dCBmbGFnIG9mZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEZvciByZW1lbWJlcmluZyB3 ZSdyZSBhdCBlbmQgb2YgZmlsZQotd2hpbGUgbm90IGZsYWcgeyAgICAgICAgICAgICAgICAgICAg ICAgICMgTG9vcCB0byByZWFkIGFsbCByZWNvcmRzCi0gICAgZnJlYWQgL2xpbmUgXCVjIGxpbmUg ICAgICAgICAgICAgICAgIyBSZWFkIGEgcmVjb3JkCi0gICAgaWYgZmFpbCBzZXQgZmxhZyBvbiAg ICAgICAgICAgICAgICAgIyBJZiBFT0Ygc2V0IGZsYWcgZm9yIGxhdGVyCi0gICAgLm4gOj0gXGZz cGxpdChcbShsaW5lKSwmYSxcNDQsQ1NWKSAgIyBCcmVhayByZWNvcmQgaW50byBhcnJheQotICAg IGlmICggZmxhZyB8fCBlcXUgIlwmYVszXSIgIks5NUIiICkgeyAjIExpY2Vuc2Ugb3IgRU9GCi0g ICAgICAgIGlmIGZhaWwgZXhpdCAxICJGQUlMRUQ6IFx2KGxhc3Rjb21tYW5kKSIKLSAgICAgICAg aWYgbGljZW5zZXMgeyAgICAgICAgICAgICAgICAgICAjIElmIHRoaXMgaXMgbm90IHRoZSBmaXJz dCBsaWNlbnNlCi0gICAgICAgICAgICAuXCZ4WzVdIDo9IFxtKGFtdHBhaWQpICAgICAgIyBTdWJz dGl0dXRlIG1vc3QgcmVjZW50IGFtb3VudCBwYWlkCi0gICAgICAgICAgICAuXCZ4WzIxXSA6PSBc bShkYXRlcGFpZCkgICAgIyBTdWJzdGl0dXRlIG1vc3QgcmVjZW50IGRhdGUgcGFpZAotICAgICAg ICAgICAgdm9pZCBcZnNwbGl0KFwmeFsxOF0sJmQsLykgICMgQnJlYWsgdXAgb3JpZ2luYWwgKGFu bml2ZXJzYXJ5KSBkYXRlCi0gICAgICAgICAgICAjIGFuZCBwdXQgbW1fZGQgYW5kIHl5eXkgaW4g c2VwYXJhdGUgZmllbGRzIGZvciBzb3J0aW5nLi4uCi0gICAgICAgICAgICBmd3JpdGUgL2xpbmUg XCVvICJcZmpvaW4oJngsQ1NWKSxcZmxwYWQoXCZkWzFdLDIsMClfXGZscGFkKFwmZFsyXSwyLAot MCksXCZkWzNdIgotICAgICAgICAgICAgaWYgZmFpbCBleGl0IDEgV1JJVEUgICAgICAgICMgQ2hl Y2sgZm9yIGVycm9yCi0gICAgICAgICAgICB4ZWNobyAuICAgICAgICAgICAgICAgICAgICAgIyBT aG93IHByb2dyZXNzIGFzIG9uZSBkb3QgcGVyIHJlY29yZAotICAgICAgICB9Ci0gICAgICAgIGlm IGZsYWcgYnJlYWsgICAgICAgICAgICAgICAgICAgIyBXZSdyZSBhdCBFT0Ygc28gd2UncmUgZmlu aXNoZWQKLSAgICAgICAgaW5jcmVtZW50IGxpY2Vuc2VzICAgICAgICAgICAgICAjIE5ldyBsaWNl bnNlIC0gY291bnQgaXQKLSAgICAgICAgYXJyYXkgY29weSAmYSAmeCAgICAgICAgICAgICAgICAj IEtlZXAgdGhpcyByZWNvcmQgd2hpbGUgcmVhZGluZyBuZXh0Ci0gICAgICAgIC5zZXJpYWwgOj0g XCZhWzZdICAgICAgICAgICAgICAgIyBSZW1lbWJlciBzZXJpYWwgbnVtYmVyCi0gICAgICAgIC5k YXRlcGFpZCA9IDAwLzAwLzAwMDAgICAgICAgICAgIyBJbml0aWFsIG1haW50ZW5hbmNlIHBheW1l bnQgZGF0ZQotICAgICAgICAuYW10cGFpZCA9ICQwLjAwICAgICAgICAgICAgICAgICMgYW5kIGFt b3VudAotICAgICAgICBjb250aW51ZSAgICAgICAgICAgICAgICAgICAgICAgICMgYW5kIGdvIGJh Y2sgdG8gcmVhZCBuZXh0IHJlY29yZAotICAgIH0KLSAgICBpZiBub3QgZXEgIlxtKHNlcmlhbCki ICJcJmFbNl0iIHsgICAjIENhdGNoIG91dC1vZi1zZXF1ZW5jZSByZWNvcmQKLSAgICAgICAgZWNo bwotICAgICAgICBlY2hvICJTRVFVRU5DRTogXG0oc2VyaWFsKS4uXCZhWzZdOiBcJmFbN10gW1wm YVsxXV0iCi0gICAgICAgIGNvbnRpbnVlCi0gICAgfQotICAgIGlmIGVxdSAiXCZhWzVdIiAiIiAu XCZhWzVdID0gJDAuMDAgICMgSWYgYW1vdW50IGlzIGVtcHR5IG1ha2UgaXQgJDAuMDAKLSAgICBp ZiBub3QgZXF1ICJcJmFbNV0iICIkMC4wMCIgeyAgICAgICAjIElmIGFtb3VudCBpcyBub3QgJDAu MDAKLSAgICAgICAgLmRhdGVwYWlkIDo9IFwmYVsyMV0gICAgICAgICAgICAjIHJlbWVtYmVyIGRh dGUgcGFpZAotICAgICAgICAuYW10cGFpZCA6PSBcJmFbNV0gICAgICAgICAgICAgICMgYW5kIGFt b3VudCBwYWlkCi0gICAgfQotfQotZmNsb3NlIEFMTCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICMgRG9uZSAtIGNsb3NlIGFsbCBmaWxlcyBhbmQgZXhpdAotZXhpdCAwIERvbmUuCi0KLQot ICAgVGhlIHJlc3VsdCBpbXBvcnRzIGJhY2sgaW50byBFeGNlbCwgd2hlcmUgaXQgY2FuIGJlIHNv cnRlZCwgZm9ybWF0dGVkLAotICAgb3Igb3RoZXJ3aXNlIG1hbmlwdWxhdGVkIGFzIGRlc2lyZWQu Ci0KLVVzaW5nIENTViBGaWxlczogRXh0ZW5kaW5nIEtlcm1pdCdzIERhdGEgU3RydWN0dXJlcwot Ci0gICBOb3cgdGhhdCB3ZSBjYW4gcGFyc2UgYSBDU1YgcmVjb3JkLCB3aGF0IHdvdWxkIHdlIGRv IHdpdGggYSBDU1YgZmlsZSAtCi0gICB0aGF0IGlzLCBhIHNlcXVlbmNlIG9mIHJlY29yZHM/IElm IHdlIG5lZWRlZCBhbGwgdGhlIGRhdGEgYXZhaWxhYmxlIGF0Ci0gICBvbmNlLCB3ZSB3b3VsZCB3 YW50IHRvIGxvYWQgaXQgaW50byBhIG1hdHJpeCBvZiAocm93LGNvbHVtbikgdmFsdWVzLgotICAg QnV0IEtlcm1pdCBkb2Vzbid0IGhhdmUgbWF0cmljZXMuIE9yIGRvZXMgaXQ/Ci0KLSAgIEtlcm1p dCBoYXMgc2V2ZXJhbCBidWlsdC1pbiBkYXRhIHR5cGVzLCBidXQgeW91IGNhbiBpbnZlbnQgeW91 ciBvd24KLSAgIGRhdGEgdHlwZXMgYXMgbmVlZGVkIHVzaW5nIEtlcm1pdCdzIG1hY3JvIGZlYXR1 cmU6Ci0KLWRlZmluZSB2YXJpYWJsZW5hbWUgdmFsdWUKLQotICAgRm9yIGV4YW1wbGU6Ci0KLWRl ZmluZSBhbHBoYWJldCBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotCi0gICBUaGlzIGRlZmlu ZXMgYSBtYWNybyBuYW1lZCBhbHBoYWJldCBhbmQgZ2l2ZXMgaXQgdGhlIHZhbHVlCi0gICBhYmNk ZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4gQSBtb3JlIGNvbnZlbmllbnQgbm90YXRpb24gKGFkZGVk IGluCi0gICBDLUtlcm1pdCA3LjAsIHNlZSBbMTExXVRhYmxlIDIpIGZvciB0aGlzIGlzOgotCi0u YWxwaGFiZXQgPSBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotCi0gICBUaGUgdHdvIGFyZSBl eGFjdGx5IGVxdWl2YWxlbnQ6IHRoZXkgbWFrZSBhIGxpdGVyYWwgY29weSB0aGUgInJpZ2h0Ci0g ICBoYW5kIHNpZGUiIGFzIHRoZSB2YWx1ZSBvZiB0aGUgbWFjcm8uIFRoZW4geW91IGNhbiByZWZl ciB0byB0aGUgbWFjcm8KLSAgIGFueXdoZXJlIGluIGEgS2VybWl0IGNvbW1hbmQgYXMgIlxtKG1h Y3JvbmFtZSkiOgotCi1lY2hvICJBbHBoYWJldCA9IFxtKGFscGhhYmV0KSIKLQotICAgVGhlcmUg aXMgYSBzZWNvbmQgd2F5IHRvIGRlZmluZSBhIG1hY3JvLCB3aGljaCBpcyBsaWtlIHRoZSBmaXJz dCBleGNlcHQKLSAgIHRoYXQgdGhlIHJpZ2h0LWhhbmQgc2lkZSBpcyBldmFsdWF0ZWQgZmlyc3Q7 IHRoYXQgaXMsIGFueSB2YXJpYWJsZQotICAgcmVmZXJlbmNlcyBvciBmdW5jdGlvbiBjYWxscyBp biB0aGUgcmlnaHQtaGFuZCBzaWRlIGFyZSByZXBsYWNlZCBieQotICAgdGhlaXIgdmFsdWVzIGJl Zm9yZSB0aGUgcmVzdWx0IGlzIGFzc2lnbmVkIHRvIHRoZSBtYWNyby4gVGhlIGNvbW1hbmQKLSAg IGZvciB0aGlzIGlzIEFTU0lHTiByYXRoZXIgdGhhbiBERUZJTkU6Ci0KLWRlZmluZSBhbHBoYWJl dCBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotYXNzaWduIGJhY2t3YXJkcyBcZnJldmVyc2Uo XG0oYWxwaGFiZXQpKQotZWNobyAiQWxwaGFiZXQgYmFja3dhcmRzID0gXG0oYmFja3dhcmRzKSIK LQotICAgd2hpY2ggcHJpbnRzOgotCi1BbHBoYWJldCBiYWNrd2FyZHMgPSB6eXh3dnV0c3JxcG9u bWxramloZ2ZlZGNiYQotCi0gICBUaGlzIGtpbmQgb2YgYXNzaWdubWVudCBjYW4gYWxzbyBiZSBk b25lIGxpa2UgdGhpczoKLQotLmFscGhhYmV0ID0gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoK LS5iYWNrd2FyZHMgOj0gXGZyZXZlcnNlKFxtKGFscGhhYmV0KSkKLQotICAgWzExMl1BbnkgY29t bWFuZCBzdGFydGluZyB3aXRoIGEgcGVyaW9kIGlzIGFuIGFzc2lnbm1lbnQsIGFuZCB0aGUKLSAg IG9wZXJhdG9yICg9IG9yIDo9KSB0ZWxscyB3aGF0IHRvIGRvIHdpdGggdGhlIHJpZ2h0LWhhbmQg c2lkZSBiZWZvcmUKLSAgIG1ha2luZyB0aGUgYXNzaWdubWVudC4KLQotICAgSW4gYm90aCB0aGUg REVGSU5FIGFuZCBBU1NJR04gY29tbWFuZHMsIHRoZSB2YXJpYWJsZSBuYW1lIGl0c2VsZiBpcwot ICAgdGFrZW4gbGl0ZXJhbGx5LiBJdCBpcyBhbHNvIHBvc3NpYmxlLCBob3dldmVyLCB0byBoYXZl IEtlcm1pdCBjb21wdXRlCi0gICB0aGUgdmFyaWFibGUgbmFtZS4gVGhpcyBpcyBkb25lIChhcyBk ZXNjcmliZWQgaW4gWzExM11Vc2luZyBDLUtlcm1pdCwKLSAgIDJuZCBFZC4sIHAuNDU3KSwgdXNp bmcgcGFyYWxsZWwgY29tbWFuZHMgdGhhdCBzdGFydCB3aXRoIHVuZGVyc2NvcmU6Ci0gICBfREVG SU5FIGFuZCBfQVNTSUdOIChhbGlhcyBfREVGIGFuZCBfQVNHKS4gVGhlc2UgYXJlIGp1c3QgbGlr ZSBERUZJTkUKLSAgIGFuZCBBU1NJR04gZXhjZXB0IHRoZXkgZXZhbHVhdGUgdGhlIHZhcmlhYmxl IG5hbWUgYmVmb3JlIG1ha2luZyB0aGUKLSAgIGFzc2lnbm1lbnQuIEZvciBleGFtcGxlOgotCi1k ZWZpbmUgXCVhIG9uZQotX2RlZmluZSBcJWFcJWFcJWEgMTExCi0KLSAgIHdvdWxkIGNyZWF0ZSBh IG1hY3JvIG5hbWVkIE9ORU9ORU9ORSB3aXRoIGEgdmFsdWUgb2YgMTExLCBhbmQ6Ci0KLWRlZmlu ZSBcJWEgb25lCi1kZWZpbmUgbnVtYmVyIDExMQotX2Fzc2lnbiBcJWFcJWFcJWEgXG0obnVtYmVy KQotCi0gICB3b3VsZCBjcmVhdGUgdGhlIHNhbWUgbWFjcm8gd2l0aCB0aGUgc2FtZSB2YWx1ZSwg YnV0OgotCi1kZWZpbmUgXCVhIG9uZQotZGVmaW5lIG51bWJlciAxMTEKLV9kZWZpbmUgXCVhXCVh XCVhIFxtKG51bWJlcikKLQotICAgd291bGQgZ2l2ZSB0aGUgbWFjcm8gYSB2YWx1ZSBvZiAiXG0o bnVtYmVyKSIuCi0KLSAgIFlvdSBjYW4gdXNlIHRoZSBfQVNTSUdOIGNvbW1hbmQgdG8gY3JlYXRl IGFueSBraW5kIG9mIGRhdGEgc3RydWN0dXJlCi0gICB5b3Ugd2FudDsgeW91IGNhbiBmaW5kIHNv bWUgZXhhbXBsZXMgaW4gdGhlIFsxMTRdT2JqZWN0LU9yaWVudGVkCi0gICBQcm9ncmFtbWluZyBz ZWN0aW9uIG9mIHRoZSBbMTE1XUtlcm1pdCBTY3JpcHQgTGlicmFyeS4gSW4gdGhlIGZvbGxvd2lu ZwotICAgcHJvZ3JhbSB3ZSB1c2UgdGhpcyBjYXBhYmlsaXR5IHRvIGNyZWF0ZSBhIHR3by1kaW1l bnNpb25hbCBhcnJheSwgb3IKLSAgIG1hdHJpeCwgdG8gaG9sZCB0aGUgYWxsIHRoZSBlbGVtZW50 cyBvZiB0aGUgQ1NWIGZpbGUsIGFuZCB0aGVuIHRvCi0gICBkaXNwbGF5IHRoZSBtYXRyaXg6Ci0K LWZvcGVuIC9yZWFkIFwlYyBkYXRhLmNzdiAgICAgICAgICAgICAgICAjIE9wZW4gQ1NWIGZpbGUK LWlmIGZhaWwgZXhpdCAxCi0KLS5cJXIgPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjIFJvdwotLlwlbSA9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTWF4aW11 bSBjb2x1bW5zCi13aGlsZSB0cnVlIHsKLSAgICBmcmVhZCAvbGluZSBcJWMgbGluZSAgICAgICAg ICAgICAgICAjIFJlYWQgYSByZWNvcmQKLSAgICBpZiBmYWlsIGJyZWFrICAgICAgICAgICAgICAg ICAgICAgICAjIEVuZCBvZiBmaWxlCi0gICAgLlwlbiA6PSBcZnNwbGl0KFxtKGxpbmUpLCZhLFw0 NCxDU1YpICMgU3BsaXQgcmVjb3JkIGludG8gaXRlbXMKLSAgICBpbmNyIFwlciAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjIENvdW50IHRoaXMgcm93Ci0gICAgZm9yIFwlaSAxIFwlbiAxIHsg ICAgICAgICAgICAgICAgICAgIyBBc3NpZ24gaXRlbXMgdG8gdGhpcyByb3cgb2YgbWF0cml4Ci0g ICAgICAgIF9hc2cgYVtcJXJdW1wlaV0gXCZhW1wlaV0KLSAgICB9Ci0gICAgaWYgPiBcJWkgXCVt IHsgLlwlbSA6PSBcJWkgfSAgICAgICAgIyBSZW1lbWJlciB3aWR0aCBvZiB3aWRlc3Qgcm93Ci19 Ci1mY2xvc2UgXCVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDbG9zZSBDU1YgZmls ZQotZGVjcmVtZW50IFwlbSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKGJlY2F1c2Ugb2Yg aG93IEZPUiBsb29wIHdvcmtzKQotZWNobyBNQVRSSVggQSBST1dTOiBcJXIgQ09MVU1OUzogXCVt ICAgICMgU2hvdyB0aGUgbWF0cml4Ci0KLWZvciBcJWkgMSBcJXIgMSB7ICAgICAgICAgICAgICAg ICAgICAgICAjIExvb3AgdGhyb3VnaCByb3dzCi0gICAgZm9yIFwlaiAxIFwlbSAxIHsgICAgICAg ICAgICAgICAgICAgIyBMb29wIHRocm91Z2ggY29sdW1ucyBvZiBlYWNoIHJvdwotICAgICAgICB4 ZWNobyAiXGZscGFkKFxtKGFbXCVpXVtcJWpdKSw2KSIKLSAgICB9Ci0gICAgZWNobwotfQotZXhp dCAwCi0KLSAgIFRoZSBtYXRyaXggaXMgY2FsbGVkIGEgYW5kIGl0cyBlbGVtZW50cyBhcmUgYVsx XVsxXSwgYVsxXVsyXSwgYVsxXVszXSwKLSAgIC4uLiBhWzJdWzFdLCBldGMsIGFuZCB5b3UgY2Fu IHRyZWF0IHRoaXMgZGF0YSBzdHJ1Y3R1cmUgZXhhY3RseSBsaWtlIGEKLSAgIHR3by1kaW1lbnNp b25hbCBhcnJheSwgaW4gd2hpY2ggeW91IGNhbiByZWZlciB0byBhbnkgZWxlbWVudCBieSBpdHMg IlgKLSAgIGFuZCBZIGNvb3JkaW5hdGVzIi4gRm9yIGV4YW1wbGUsIGlmIHRoZSBDU1YgZmlsZSBj b250YWluZWQgbnVtZXJpYyBkYXRhCi0gICB5b3UgY291bGQgY29tcHV0ZSByb3cgYW5kIGNvbHVt biBzdW1zIHVzaW5nIHNpbXBsZSBGT1IgbG9vcHMgYW5kCi0gICBLZXJtaXQncyBidWlsdC1pbiBv bmUtZGltZW5zaW9uYWwgYXJyYXkgZGF0YSB0eXBlOgotCi1kZWNsYXJlIFwmcltcJXJdICAgICAg ICAgICAgICAgICAgICAgICAgIyBNYWtlIGFuIGFycmF5IGZvciB0aGUgcm93IHN1bXMKLWRlY2xh cmUgXCZjW1wlbV0gICAgICAgICAgICAgICAgICAgICAgICAjIE1ha2UgYW4gYXJyYXkgZm9yIHRo ZSBjb2x1bW4gc3VtcwotZm9yIFwlaSAxIFwlciAxIHsgICAgICAgICAgICAgICAgICAgICAgICMg TG9vcCB0aHJvdWdoIHJvd3MKLSAgICBmb3IgXCVqIDEgXCVtIDEgeyAgICAgICAgICAgICAgICAg ICAjIExvb3AgdGhyb3VnaCBjb2x1bW5zIG9mIGVhY2ggcm93Ci0gICAgICAgIGluY3JlbWVudCBc JnJbXCVpXSBcbShhW1wlaV1bXCVqXSkgIyBBY2N1bXVsYXRlIHJvdyBzdW0KLSAgICAgICAgaW5j cmVtZW50IFwmY1tcJWpdIFxtKGFbXCVpXVtcJWpdKSAjIEFjY3VtdWxhdGUgY29sdW1uIHN1bQot ICAgIH0KLX0KLQotICAgTm90ZSB0aGF0IHRoZSBzdW0gYXJyYXlzIGRvbid0IGhhdmUgdG8gYmUg aW5pdGlhbGl6ZWQgdG8gemVybyBiZWNhdXNlCi0gICBLZXJtaXQncyBJTkNSRU1FTlQgY29tbWFu ZCB0cmVhdHMgZW1wdHkgZGVmaW5pdGlvbnMgYXMgemVyby4KLQotRGVtb25zdHJhdGlvbiBTY3Jp cHRzIGZvciBXZWJtYXN0ZXJzCi0KLSAgIFRoZXNlIHNjcmlwdHMgYWxsIHVzZSBuZXcgZmVhdHVy ZXMgb2YgQy1LZXJtaXQgOS4wLgotCi0gICBbMTE2XWtzaXRlbWFwCi0gICAgICAgICAgQSBDLUtl cm1pdCA5LjAgc2NyaXB0IHRvIGJ1aWxkIHNpdGVtYXAueG1sIGZvciBhIHdlYnNpdGUsCi0gICAg ICAgICAgY29tcGxldGUgd2l0aCBHb29nbGUgaW1hZ2UgZXh0ZW5zaW9ucyAodGhpcyBpcyB0aGUg ZmlsZSB1c2VkIGJ5Ci0gICAgICAgICAgd2VibWFzdGVycyB0byBnZXQgdGhlaXIgc2l0ZXMgY3Jh d2xlZCBhbmQgaW5kZXhlZCBvcHRpbWFsbHkpLgotCi0gICBbMTE3XVRoZSBXZWJsb2cgU2NyaXB0 Ci0gICAgICAgICAgUmVhZHMgYSB3ZWIgbG9nLCBleHRyYWN0cyB0aGUgR29vZ2xlIHNlYXJjaGVz LCBub3JtYWxpemVzIHRoZQotICAgICAgICAgIHNlYXJjaCBzdHJpbmdzLCBhbmQgcHJpbnRzIHRo ZSB0b3AgMjAgc2VhcmNoZXMsIGFsb25nIHdpdGggdGhlaXIKLSAgICAgICAgICBjb3VudHMuCi0K LSAgIFsxMThdVGhlIEFtYXpvbiBTY3JpcHQKLSAgICAgICAgICBSZWFkcyBhbiBBbWF6b24gQXNz b2NpYXRlIG9yZGVycyByZXBvcnQgYW5kIGxpc3RzIHRoZSBwcm9kdWN0cwotICAgICAgICAgIGFj Y29yZGluZyB0byB0aGUgbnVtYmVyIG9mIG9yZGVycyBmb3IgZWFjaCwgb3IgdGhlIG51bWJlciBv ZgotICAgICAgICAgIGNsaWNrcyBvbiBlYWNoLgotCi0gICBbMTE5XVBob3RvYWxidW0KLSAgICAg ICAgICBNYWtlcyBhIHdlYnNpdGUgZnJvbSBhIGNvbGxlY3Rpb24gb2YgSlBHIGltYWdlcy4KLQot ICAgICAgICAgICAgWzEyMF1Ib21lIFsxMjFdS2VybWl0IDk1IFsxMjJdQy1LZXJtaXQgWzEyM11T Y3JpcHRzIFsxMjRdQ3VycmVudAotICAgWzEyNV1OZXcgWzEyNl1GQVEgIFsxMjddU3VwcG9ydAot Ci0KLSAgICBDLUtlcm1pdCA5LjAgLyBbMTI4XVRoZSBLZXJtaXQgUHJvamVjdCAvIFsxMjldQ29s dW1iaWEgVW5pdmVyc2l0eSAvCi0gICAgWzEzMF1rZXJtaXRAY29sdW1iaWEuZWR1IC8gWzEzMV12 YWxpZGF0ZQotCi1SZWZlcmVuY2VzCi0KLSAgIDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1Lwot ICAgMi4gbWFpbHRvOmtlcm1pdEBjb2x1bWJpYS5lZHUKLSAgIDMuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gICA0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvazk1Lmh0bWwKLSAgIDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0Lmh0bWwKLSAgIDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3NjcmlwdHMu aHRtbAotICAgNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2N1cnJlbnQuaHRtbAot ICAgOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3doYXRzbmV3Lmh0bWwKLSAgIDku IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9mYXEuaHRtbAotICAxMC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L3N1cHBvcnQuaHRtbAotICAxMS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUvY3UvY29tcHV0aW5naGlzdG9yeS9ib29rcy8jbWVuYWdlcmllCi0gIDEyLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2s5MHRhYmxlcy5odG1sCi0gIDEzLiBodHRwOi8v d3d3LmFtYXpvbi5jb20vZ3AvcHJvZHVjdC8xNTU1NTgxNjQxP2llPVVURjgmdGFnPWFsZWlkbW9y ZWxkb20tMjAmbGlua0NvZGU9YXMyJmNhbXA9MTc4OSZjcmVhdGl2ZT05MzI1JmNyZWF0aXZlQVNJ Tj0xNTU1NTgxNjQxCi0gIDE0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dC5odG1sI2Rvd25sb2FkCi0gIDE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDkwLmh0bWwjTGFyZ2VGaWxlcwotICAxNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ5MC5odG1sI1Rlc3RMYXJnZUZpbGVzCi0gIDE3LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwjQmlnbnVtcwotICAxOC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ5MC5odG1sI2ZvcmNlMwotICAxOS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ5MC5odG1sI1ZhcmV2YWwKLSAgMjAuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0OTAuaHRtbCNyZW5hbWUKLSAgMjEuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0OTAuaHRtbCNPdGhlcgotICAyMi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ5MC5odG1sI0luY29tcGF0aWJp bGl0aWVzCi0gIDIzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDkwLmh0 bWwjTm90SW45LjAKLSAgMjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 OTAuaHRtbCNMb29zZUVuZAotICAyNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ5MC5odG1sI3BvcAotICAyNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ5MC5odG1sI0hQc3dpdGNoCi0gIDI3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDkwLmh0bWwjaUxPCi0gIDI4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDkwLmh0bWwjUm9sbQotICAyOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ5MC5odG1sI0NTVgotICAzMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ5MC5odG1sI090aGVyZGVtb3MKLSAgMzEuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9jazYwbWFudWFsLmh0bWwKLSAgMzIuIGh0dHA6Ly93d3cuYW1hem9uLmNvbS9n cC9wcm9kdWN0L0IwMDJBQ1BGOU0/aWU9VVRGOCZ0YWc9YWxlaWRtb3JlbGRvbS0yMCZsaW5rQ29k ZT1hczImY2FtcD0xNzg5JmNyZWF0aXZlPTM5MDk1NyZjcmVhdGl2ZUFTSU49QjAwMkFDUEY5TQot ICAzMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sCi0gIDM0 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwKLSAgMzUuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3NjcmlwdHMuaHRtbAotICAzNi4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUvY3UvY29tcHV0aW5naGlzdG9yeS9kZWMyMC5odG1sCi0gIDM3LiBt YWlsdG86ZmRjQGNvbHVtYmlhLmVkdQotICAzOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2s5NS5odG1sCi0gIDM5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY3UtYnNk LWxpY2Vuc2UuaHRtbAotICA0MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ5MC5odG1sI0xhcmdlRmlsZXMKLSAgNDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9jazkwdGFibGVzLmh0bWwKLSAgNDIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j azkwdGFibGVzLmh0bWwKLSAgNDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0OTAuaHRtbCNmb3JjZTMKLSAgNDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0OTAuaHRtbCNWYXJldmFsCi0gIDQ1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tyZW5hbWUuaHRtbAotICA0Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nz di5odG1sCi0gIDQ3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY3NldG5hbWVzLmh0 bWwKLSAgNDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0OTAuaHRtbCNI UHN3aXRjaAotICA0OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZGFpbHkuaHRt bAotICA1MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2N1LWJzZC1saWNlbnNlLmh0 bWwKLSAgNTEuIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvCi0gIDUyLiBodHRwOi8va2VybWl0 LmNvbHVtYmlhLmVkdS9jazkwdGFibGVzLmh0bWwjTEYKLSAgNTMuIGZ0cDovL2tlcm1pdC5jb2x1 bWJpYS5lZHUva2VybWl0L3V0aWxzL2JpZ2ZpbGUuYwotICA1NC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g5Ci0gIDU1LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2s5MHRhYmxlcy5odG1sI0xGCi0gIDU2LiBmdHA6Ly9rZXJtaXQuY29sdW1i aWEuZWR1L2tlcm1pdC9zY3JpcHRzL2NrZXJtaXQvZWFzdGVyMgotICA1Ny4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2VtLWFwZXguaHRtbAotICA1OC4gaHR0cDovL3d3dy5pcmlkaXVt LmNvbS8KLSAgNTkuIGh0dHA6Ly9zY2llbmNlMS5uYXNhLmdvdi9zY2llbmNlLW5ld3Mvc2NpZW5j ZS1hdC1uYXNhLzIwMDYvMDlqYW5fZWxlY3RyaWNodXJyaWNhbmVzLwotICA2MC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2VrLmh0bWwKLSAgNjEuIGZ0cDovL2tlcm1pdC5jb2x1bWJp YS5lZHUva2VybWl0L2VrL3NpbWlyaWQvCi0gIDYyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvZWsuaHRtbAotICA2My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3g3LjEwLjEwCi0gIDY0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y3N2Lmh0bWwKLSAgNjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4MS4xMQotICA2Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sCi0gIDY3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0 bWwjeDkKLSAgNjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jc2V0bmFtZXMuaHRt bAotICA2OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZGFpbHkuaHRtbAotICA3 MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Z0cGNsaWVudC5odG1sCi0gIDcxLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tkYWlseS5odG1sCi0gIDcyLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY3NldG5hbWVzLmh0bWwKLSAgNzMuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0OTAuaHRtbCNPdGhlcmRlbW9zCi0gIDc0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5wdXRfbm93cmFwLmh0bWwKLSAgNzUuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L35mZGMvbW0vaW5kZXguaHRtbAotICA3Ni4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L3Bob3RvYWxidW0uaHRtbAotICA3Ny4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUvfmZkYy9rZXJtaXQvbG9nc2VyaWFsLmh0bWwKLSAgNzguIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0OTAuaHRtbCNtZXNzYWdlCi0gIDc5LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwjTm90SW45LjAKLSAgODAuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jc3YuaHRtbCNqb2luCi0gIDgxLiBodHRwOi8vY3Zl Lm1pdHJlLm9yZy9jZ2ktYmluL2N2ZW5hbWUuY2dpP25hbWU9Q1ZFLTIwMDktMzc2NwotICA4Mi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Z0cC90ZXN0L3Rhci94LnppcAotICA4My4g aHR0cDovL3d3dy5tc2VjbGFiLmNvbS8/cD0xODAKLSAgODQuIGh0dHA6Ly93d3cudGhlcmVnaXN0 ZXIuY28udWsvMjAwOS8wNy8zMC91bml2ZXJzYWxfc3NsX2NlcnRpZmljYXRlLwotICA4NS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ5MC5odG1sI0hQc3dpdGNoCi0gIDg2 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvZW0tYXBleC5odG1sCi0gIDg3LiBodHRw Oi8vd3d3LmZyZWVic2Qub3JnL3JlbGVhc2VzLzguMFIvYW5ub3VuY2UuaHRtbAotICA4OC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NlY3VyaXR5ODEuaHRtbCN4NC4yLjMKLSAgODku IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OQotICA5MC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjcuMgotICA5 MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g5Ci0gIDky LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2twYWNrYWdlcy5odG1sCi0gIDkzLiBo dHRwOi8vZG9jcy5ocC5jb20vZW4vQjkxMDYtOTAwMTMvcHR5LjcuaHRtbAotICA5NC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3Rlc3QvdGV4dC9ja2MyOTkudHh0Ci0gIDk1LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvdGVzdC90ZXh0L2NrdXRpby5jCi0gIDk2LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9+ZmRjL21tL3BvcAotICA5Ny4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUvfmZkYy9tbS8KLSAgOTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L35mZGMvbW0vbWFp bGNoZWNrCi0gIDk5LiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RyaXZpYWxfRmlsZV9U cmFuc2Zlcl9Qcm90b2NvbAotIDEwMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Z0 cC9zY3JpcHRzL2NrZXJtaXQvZ2V0aHBjb25maWcKLSAxMDEuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9mdHAvc2NyaXB0cy9ja2VybWl0L1Rlc3RTd2l0Y2hlcy50eHQKLSAxMDIuIGh0 dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3RhbmRhcmRfc3RyZWFtcwotIDEwMy4gaHR0cDov L2tlcm1pdC5jb2x1bWJpYS5lZHUvY3Vkb2NzL2lsb3NldHVwLmh0bWwKLSAxMDQuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jdWRvY3MvY2J4Lmh0bWwKLSAxMDUuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0OTAuaHRtbCNyZWNvcmQKLSAxMDYuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0OTAuaHRtbCNqb2luCi0gMTA3LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwjZmlsZQotIDEwOC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2Zqb2luCi0gMTA5LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwjcnVsZXMKLSAxMTAuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNmam9pbgotIDExMS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ5MC5odG1sI3ZhcmFzZwotIDEx Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjkKLSAx MTMuIGh0dHA6Ly93d3cuYW1hem9uLmNvbS9ncC9wcm9kdWN0LzE1NTU1ODE2NDE/aWU9VVRGOCZ0 YWc9YWxlaWRtb3JlbGRvbS0yMCZsaW5rQ29kZT1hczImY2FtcD0xNzg5JmNyZWF0aXZlPTkzMjUm Y3JlYXRpdmVBU0lOPTE1NTU1ODE2NDEKLSAxMTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3NjcmlwdHMuaHRtbCNvb3BzCi0gMTE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tzY3JpcHRzLmh0bWwKLSAxMTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9rc2l0ZW1hcC5odG1sCi0gMTE3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvd2Vi bG9nLmh0bWwKLSAxMTguIGh0dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2Z0cC9zY3JpcHRzL2Nr ZXJtaXQvYW1hem9uCi0gMTE5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvcGhvdG9h bGJ1bS5odG1sCi0gMTIwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRt bAotIDEyMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2s5NS5odG1sCi0gMTIyLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gMTIzLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tzY3JpcHRzLmh0bWwKLSAxMjQuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9jdXJyZW50Lmh0bWwKLSAxMjUuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC93aGF0c25ldy5odG1sCi0gMTI2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvZmFxLmh0bWwKLSAxMjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9z dXBwb3J0Lmh0bWwKLSAxMjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5o dG1sCi0gMTI5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS8KLSAxMzAuIG1haWx0bzprZXJtaXRA Y29sdW1iaWEuZWR1Ci0gMTMxLiBodHRwOi8vdmFsaWRhdG9yLnczLm9yZy9jaGVjaz91cmk9aHR0 cCUzQSUyRiUyRmtlcm1pdC5jb2x1bWJpYS5lZHUlMkZja2VybWl0OTAuaHRtbAoKZGlmZiAtLWdp dCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tlcm1vZC5pbmkgYi9j a2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrZXJtb2QuaW5pCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjEzYzg1Li4wMDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4w LjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tlcm1vZC5pbmkKKysrIC9kZXYvbnVsbApAQCAt MSw4ICswLDAgQEAKLTsgRmlsZSBDS0VSTU9ELklOSSwgU2FtcGxlIEMtS2VybWl0IDcuMCBjdXN0 b21pemF0aW9uIGZpbGUuCi07Ci1lY2hvCi1lY2hvIFRoZSB2ZXJ5IGxvbmcgc3RhbmRhcmQgaW5p dGlhbGl6YXRpb24gZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZAotZWNobyB3aXRoIEMtS2VybWl0 IDYsIDcsIGFuZCA4IGlzIG5vIGxvbmdlciByZWNvbW1lbmRlZCBhcyAic3RhbmRhcmQiLAotZWNo byBzaW5jZSBpdHMgZmVhdHVyZXMgd2VyZSBsaXR0bGUgdXNlZC4gIEl0IGlzIHN0aWxsIGF2YWls YWJsZSBpbgotZWNobyB0aGUgQy1LZXJtaXQgZGlzdHJpYnV0aW9uIGFzIG9ja2VybW9kLmluaS4K LWVjaG8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAy L2NrdWF0Mi5oIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VhdDIu aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY3OWE5OS4uMDAwMDAwMAotLS0gYS9j a2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWF0Mi5oCisrKyAvZGV2L251 bGwKQEAgLTEsMzU4ICswLDAgQEAKLS8qCi0gIEMgSyBVIEEgVCAyIC4gSCAgLS0gIEtlcmJlcm9z IGhlYWRlcnMgZm9yIEMtS2VybWl0Ci0KLSAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDA5LAotICAg IFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsu Ci0gICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQg ZmlsZSBvciB0aGUKLSAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZv ciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KLQotICBBdXRob3I6Ci0gICAgS2VyYmVyb3Mg SVYgYW5kIFYgaW50ZXJncmF0aW9uLgotICAgIEplZmZyZXkgRSBBbHRtYW4gKGphbHRtYW5Ac2Vj dXJlLWVuZHBvaW50cy5jb20pCi0gICAgU2VjdXJlIEVuZHBvaW50cyBJbmMuLCBOZXcgWW9yayBD aXR5Ci0qLwotLyoKLSAqIEJhc2VkIG9uIGEgY29uY2F0ZW5hdGlvbiBvZiBhbGwgbmVjZXNzYXJ5 IGluY2x1ZGUgZmlsZXMgZGlzdHJpYnV0ZWQgd2l0aAotICogdGhlIEtlcmJlcm9zIDUgTlQgQWxw aGEgMiBUZWxuZXQgcGFja2FnZSBmcm9tIE1JVC4KLSAqLwotCi0jaWZuZGVmIEtSQjVfVEVMTkVU X0gKLSNkZWZpbmUgS1JCNV9URUxORVRfSAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTEsIDE5 OTMKLSAqICAgICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4g IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0 ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAg IG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqICAgICAgVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBv ZgotICogICAgICBDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KLSAq IDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBp dHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lm aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBB TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElO IE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAq IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0g KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBV U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP RgotICogU1VDSCBEQU1BR0UuCi0gKgotICogICAgICBAKCMpZW5jcnlwdC5oICAgOC4xIChCZXJr ZWxleSkgNi80LzkzCi0gKi8KLQotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5MCBieSB0aGUgTWFz c2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neQotICoKLSAqIEV4cG9ydCBvZiB0aGlz IHNvZnR3YXJlIGZyb20gdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSBtYXkKLSAqIHJlcXVp cmUgYSBzcGVjaWZpYyBsaWNlbnNlIGZyb20gdGhlIFVuaXRlZCBTdGF0ZXMgR292ZXJubWVudC4K LSAqIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBhbnkgcGVyc29uIG9yIG9yZ2FuaXphdGlv biBjb250ZW1wbGF0aW5nCi0gKiBleHBvcnQgdG8gb2J0YWluIHN1Y2ggYSBsaWNlbnNlIGJlZm9y ZSBleHBvcnRpbmcuCi0gKgotICogV0lUSElOIFRIQVQgQ09OU1RSQUlOVCwgcGVybWlzc2lvbiB0 byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kCi0gKiBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5k IGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQKLSAqIHdpdGhvdXQgZmVlIGlz IGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v dGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5v dGljZSBhbmQKLSAqIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcg ZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQKLSAqIHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNl ZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZwotICogdG8gZGlzdHJpYnV0 aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCi0gKiBw ZXJtaXNzaW9uLiAgTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3Vp dGFiaWxpdHkgb2YKLSAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJv dmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3MKLSAqIG9yIGltcGxpZWQgd2FycmFudHkuCi0g Ki8KLQotI2lmZGVmICBDS19FTkNSWVBUSU9OCi0KLSNpZm5kZWYgX19FTkNSWVBUSU9OX18KLSNk ZWZpbmUgX19FTkNSWVBUSU9OX18KLQotI2RlZmluZSBESVJfREVDUllQVCAgICAgICAgICAgICAx Ci0jZGVmaW5lIERJUl9FTkNSWVBUICAgICAgICAgICAgIDIKLQotI2lmbmRlZiBDS19ERVNfQwot I2lmbmRlZiBOT0JMT0NLREVGCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgQmxvY2tbOF07Ci0jZW5k aWYgLyogTk9CTE9DS0RFRiAqLwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyICpCbG9ja1Q7Ci0jaWZu ZGVmIEtSQjQgICAgLyogYWxyZWFkeSBkZWZpbmVkIGluIGtlcmJlcm9zaXYvZGVzLmggKi8KLXR5 cGVkZWYgc3RydWN0IGRlc19rc19zdHJ1Y3QgeyBCbG9jayBfOyB9IFNjaGVkdWxlWzE2XTsKLSNl bHNlIC8qIEtSQjQgKi8KLSNpZm5kZWYgT1MyCi0jaWZuZGVmIE5PQkxPQ0tERUYgICAgLyogYWxy ZWFkeSBkZWZpbmVkIGluIGtlcmJlcm9zaXYvZGVzLmggKi8KLXR5cGVkZWYgc3RydWN0IGRlc19r c19zdHJ1Y3QgeyBCbG9jayBfOyB9IFNjaGVkdWxlWzE2XTsKLSNlbmRpZiAvKiBOT0JMT0NLREVG ICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogS1JCNCAqLwotCi0jZGVmaW5lIFZBTElE S0VZKGtleSkgKGtleVswXXxrZXlbMV18a2V5WzJdfGtleVszXXxrZXlbNF18a2V5WzVdfGtleVs2 XXxrZXlbN10pCi0KLSNkZWZpbmUgU0FNRUtFWShrMSwgazIpICghbWVtY21wKCh2b2lkICopazEs ICh2b2lkICopazIsIHNpemVvZihCbG9jaykpKQotI2VuZGlmIC8qIENLX0RFU19DICovCi0KLXR5 cGVkZWYgc3RydWN0IF9zZXNzaW9uX2tleSB7Ci0gIHNob3J0ICAgICAgICAgdHlwZTsKLSAgaW50 ICAgICAgICAgICBsZW5ndGg7Ci0gIHVuc2lnbmVkIGNoYXIgKmRhdGE7Ci19IFNlc3Npb25fS2V5 OwotCi0jaWZkZWYgX19TVERDX18KLXR5cGVkZWYgc3RydWN0IHsKLSAgY2hhciAgKm5hbWU7Ci0g IGludCAgIHR5cGU7Ci0gIHZvaWQgICgqb3V0cHV0KSh1bnNpZ25lZCBjaGFyICosIGludCk7Ci0g IGludCAgICgqaW5wdXQpKGludCk7Ci0gIHZvaWQgICgqaW5pdCkoaW50KTsKLSAgaW50ICAgKCpz dGFydCkoaW50LCBpbnQpOwotICBpbnQgICAoKmlzKSh1bnNpZ25lZCBjaGFyICosIGludCk7Ci0g IGludCAgICgqcmVwbHkpKHVuc2lnbmVkIGNoYXIgKiwgaW50KTsKLSAgaW50ICAgKCpzZXNzaW9u KShTZXNzaW9uX0tleSAqLCBpbnQpOwotICBpbnQgICAoKmtleWlkKShpbnQsIHVuc2lnbmVkIGNo YXIgKiwgaW50ICopOwotICB2b2lkICAoKnByaW50c3ViKSh1bnNpZ25lZCBjaGFyICosIGludCwg dW5zaWduZWQgY2hhciAqLCBpbnQpOwotfSBFbmNyeXB0aW9uczsKLSNpZiAhZGVmaW5lZChQKQot I2RlZmluZSBQKHgpIHgKLSNlbmRpZgotI2Vsc2UKLXR5cGVkZWYgc3RydWN0IHsKLSAgY2hhciAg Km5hbWU7Ci0gIGludCAgIHR5cGU7Ci0gIHZvaWQgICgqb3V0cHV0KSgpOwotICBpbnQgICAoKmlu cHV0KSgpOwotICB2b2lkICAoKmluaXQpKCk7Ci0gIGludCAgICgqc3RhcnQpKCk7Ci0gIGludCAg ICgqaXMpKCk7Ci0gIGludCAgICgqcmVwbHkpKCk7Ci0gIGludCAgICgqc2Vzc2lvbikoKTsKLSAg aW50ICAgKCprZXlpZCkoKTsKLSAgdm9pZCAgKCpwcmludHN1YikoKTsKLX0gRW5jcnlwdGlvbnM7 Ci0jaWYgIWRlZmluZWQoUCkKLSNkZWZpbmUgUCh4KSAoKQotI2VuZGlmCi0jZW5kaWYKLQotaW50 IGVuY3J5cHRfcGFyc2UodW5zaWduZWQgY2hhciAqLCBpbnQpOwotCi0jaWZkZWYgREVCVUcKLWlu dCBwcmludHN1YihjaGFyLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCk7Ci0jZW5kaWYKLQotI2Rl ZmluZSBTS19HRU5FUklDICAgICAgMCAgICAgICAvKiBKdXN0IGEgc3RyaW5nIG9mIGJpdHMgKi8K LSNkZWZpbmUgU0tfREVTICAgICAgICAgIDEgICAgICAgLyogTWF0Y2hlZCBLZXJiZXJvcyB2NSBF TkNUWVBFX0RFUyAqLwotCi12b2lkIGVuY3J5cHRfaW5pdCBQKChrc3RyZWFtLGludCkpOwotRW5j cnlwdGlvbnMgKmZpbmRlbmNyeXB0aW9uIFAoKGludCkpOwotdm9pZCBlbmNyeXB0X3NlbmRfc3Vw cG9ydCBQKCh2b2lkKSk7Ci12b2lkIGVuY3J5cHRfYXV0byBQKChpbnQpKTsKLXZvaWQgZGVjcnlw dF9hdXRvIFAoKGludCkpOwotaW50ICBlbmNyeXB0X2lzIFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50 KSk7Ci1pbnQgIGVuY3J5cHRfcmVwbHkgUCgodW5zaWduZWQgY2hhciAqLCBpbnQpKTsKLXZvaWQg ZW5jcnlwdF9zdGFydF9pbnB1dCBQKChpbnQpKTsKLWludCAgZW5jcnlwdF9zZXNzaW9uX2tleSBQ KChTZXNzaW9uX0tleSAqLCBpbnQpKTsKLWludCAgZW5jcnlwdF9kb250X3N1cHBvcnQgUCgoaW50 KSk7Ci12b2lkIGVuY3J5cHRfZW5kX2lucHV0IFAoKHZvaWQpKTsKLXZvaWQgZW5jcnlwdF9zdGFy dF9vdXRwdXQgUCgoaW50KSk7Ci12b2lkIGVuY3J5cHRfZW5kX291dHB1dCBQKCh2b2lkKSk7Ci12 b2lkIGVuY3J5cHRfc2VuZF9yZXF1ZXN0X3N0YXJ0IFAoKHZvaWQpKTsKLXZvaWQgZW5jcnlwdF9z ZW5kX3JlcXVlc3RfZW5kIFAoKHZvaWQpKTsKLXZvaWQgZW5jcnlwdF9zZW5kX2VuZCBQKCh2b2lk KSk7Ci12b2lkIGVuY3J5cHRfd2FpdCBQKCh2b2lkKSk7Ci1pbnQgIGVuY3J5cHRfaXNfZW5jcnlw dGluZyBQKCh2b2lkKSk7Ci12b2lkIGVuY3J5cHRfc2VuZF9zdXBwb3J0IFAoKHZvaWQpKTsKLWlu dCAgZW5jcnlwdF9zZW5kX2tleWlkIFAoKGludCwgdW5zaWduZWQgY2hhciAqLCBpbnQsIGludCkp OwotCi1pbnQgZW5jcnlwdF9jbWQgUCgoaW50LCBjaGFyICoqKSk7Ci12b2lkIGVuY3J5cHRfZGlz cGxheSBQKCh2b2lkKSk7Ci0KLSNpZmRlZiBDS19LRVJCRVJPUwotdm9pZCBrcmJkZXNfZW5jcnlw dCBQKCh1bnNpZ25lZCBjaGFyICosIGludCkpOwotaW50ICBrcmJkZXNfZGVjcnlwdCBQKChpbnQp KTsKLWludCAga3JiZGVzX2lzIFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7Ci1pbnQgIGtyYmRl c19yZXBseSBQKCh1bnNpZ25lZCBjaGFyICosIGludCkpOwotdm9pZCBrcmJkZXNfaW5pdCBQKChp bnQpKTsKLWludCAga3JiZGVzX3N0YXJ0IFAoKGludCwgaW50KSk7Ci12b2lkIGtyYmRlc19zZXNz aW9uIFAoKFNlc3Npb25fS2V5ICosIGludCkpOwotdm9pZCBrcmJkZXNfcHJpbnRzdWIgUCgodW5z aWduZWQgY2hhciAqLCBpbnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7Ci0jZW5kaWYgLyogQ0tf S0VSQkVST1MgKi8KLQotdm9pZCBjZmI2NF9lbmNyeXB0IFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50 KSk7Ci1pbnQgY2ZiNjRfZGVjcnlwdCBQKChpbnQpKTsKLXZvaWQgY2ZiNjRfaW5pdCBQKChpbnQp KTsKLWludCBjZmI2NF9zdGFydCBQKChpbnQsIGludCkpOwotaW50IGNmYjY0X2lzIFAoKHVuc2ln bmVkIGNoYXIgKiwgaW50KSk7Ci1pbnQgY2ZiNjRfcmVwbHkgUCgodW5zaWduZWQgY2hhciAqLCBp bnQpKTsKLWludCBjZmI2NF9zZXNzaW9uIFAoKFNlc3Npb25fS2V5ICosIGludCkpOwotaW50IGNm YjY0X2tleWlkIFAoKGludCwgdW5zaWduZWQgY2hhciAqLCBpbnQgKikpOwotdm9pZCBjZmI2NF9w cmludHN1YiBQKCh1bnNpZ25lZCBjaGFyICosIGludCwgdW5zaWduZWQgY2hhciAqLCBpbnQpKTsK LQotdm9pZCBvZmI2NF9lbmNyeXB0IFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7Ci1pbnQgb2Zi NjRfZGVjcnlwdCBQKChpbnQpKTsKLXZvaWQgb2ZiNjRfaW5pdCBQKChpbnQpKTsKLWludCBvZmI2 NF9zdGFydCBQKChpbnQsIGludCkpOwotaW50IG9mYjY0X2lzIFAoKHVuc2lnbmVkIGNoYXIgKiwg aW50KSk7Ci1pbnQgb2ZiNjRfcmVwbHkgUCgodW5zaWduZWQgY2hhciAqLCBpbnQpKTsKLWludCBv ZmI2NF9zZXNzaW9uIFAoKFNlc3Npb25fS2V5ICosIGludCkpOwotaW50IG9mYjY0X2tleWlkIFAo KGludCwgdW5zaWduZWQgY2hhciAqLCBpbnQgKikpOwotdm9pZCBvZmI2NF9wcmludHN1YiBQKCh1 bnNpZ25lZCBjaGFyICosIGludCwgdW5zaWduZWQgY2hhciAqLCBpbnQpKTsKLQotdm9pZCBkZXMz X2NmYjY0X2VuY3J5cHQgUCgodW5zaWduZWQgY2hhciAqLCBpbnQpKTsKLWludCAgZGVzM19jZmI2 NF9kZWNyeXB0IFAoKGludCkpOwotdm9pZCBkZXMzX2NmYjY0X2luaXQgUCgoaW50KSk7Ci1pbnQg IGRlczNfY2ZiNjRfc3RhcnQgUCgoaW50LCBpbnQpKTsKLWludCAgZGVzM19jZmI2NF9pcyBQKCh1 bnNpZ25lZCBjaGFyICosIGludCkpOwotaW50ICBkZXMzX2NmYjY0X3JlcGx5IFAoKHVuc2lnbmVk IGNoYXIgKiwgaW50KSk7Ci1pbnQgIGRlczNfY2ZiNjRfc2Vzc2lvbiBQKChTZXNzaW9uX0tleSAq LCBpbnQpKTsKLWludCAgZGVzM19jZmI2NF9rZXlpZCBQKChpbnQsIHVuc2lnbmVkIGNoYXIgKiwg aW50ICopKTsKLXZvaWQgZGVzM19jZmI2NF9wcmludHN1YiBQKCh1bnNpZ25lZCBjaGFyICosIGlu dCwgdW5zaWduZWQgY2hhciAqLCBpbnQpKTsKLQotdm9pZCBkZXMzX29mYjY0X2VuY3J5cHQgUCgo dW5zaWduZWQgY2hhciAqLCBpbnQpKTsKLWludCAgZGVzM19vZmI2NF9kZWNyeXB0IFAoKGludCkp Owotdm9pZCBkZXMzX29mYjY0X2luaXQgUCgoaW50KSk7Ci1pbnQgIGRlczNfb2ZiNjRfc3RhcnQg UCgoaW50LCBpbnQpKTsKLWludCAgZGVzM19vZmI2NF9pcyBQKCh1bnNpZ25lZCBjaGFyICosIGlu dCkpOwotaW50ICBkZXMzX29mYjY0X3JlcGx5IFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7Ci1p bnQgIGRlczNfb2ZiNjRfc2Vzc2lvbiBQKChTZXNzaW9uX0tleSAqLCBpbnQpKTsKLWludCAgZGVz M19vZmI2NF9rZXlpZCBQKChpbnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50ICopKTsKLXZvaWQgZGVz M19vZmI2NF9wcmludHN1YiBQKCh1bnNpZ25lZCBjaGFyICosIGludCwgdW5zaWduZWQgY2hhciAq LCBpbnQpKTsKLQotI2lmZGVmIENBU1RfRU5DUllQVElPTgotdm9pZCBjYXN0X2NmYjY0X2VuY3J5 cHQgUCgodW5zaWduZWQgY2hhciAqLCBpbnQpKTsKLWludCAgY2FzdF9jZmI2NF9kZWNyeXB0IFAo KGludCkpOwotdm9pZCBjYXN0X2NmYjY0X2luaXQgUCgoaW50KSk7Ci1pbnQgIGNhc3RfY2ZiNjRf c3RhcnQgUCgoaW50LCBpbnQpKTsKLWludCAgY2FzdF9jZmI2NF9pcyBQKCh1bnNpZ25lZCBjaGFy ICosIGludCkpOwotaW50ICBjYXN0X2NmYjY0X3JlcGx5IFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50 KSk7Ci1pbnQgIGNhc3RfY2ZiNjRfc2Vzc2lvbiBQKChTZXNzaW9uX0tleSAqLCBpbnQpKTsKLWlu dCAgY2FzdF9jZmI2NF9rZXlpZCBQKChpbnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50ICopKTsKLXZv aWQgY2FzdF9jZmI2NF9wcmludHN1YiBQKCh1bnNpZ25lZCBjaGFyICosIGludCwgdW5zaWduZWQg Y2hhciAqLCBpbnQpKTsKLQotdm9pZCBjYXN0X29mYjY0X2VuY3J5cHQgUCgodW5zaWduZWQgY2hh ciAqLCBpbnQpKTsKLWludCAgY2FzdF9vZmI2NF9kZWNyeXB0IFAoKGludCkpOwotdm9pZCBjYXN0 X29mYjY0X2luaXQgUCgoaW50KSk7Ci1pbnQgIGNhc3Rfb2ZiNjRfc3RhcnQgUCgoaW50LCBpbnQp KTsKLWludCAgY2FzdF9vZmI2NF9pcyBQKCh1bnNpZ25lZCBjaGFyICosIGludCkpOwotaW50ICBj YXN0X29mYjY0X3JlcGx5IFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7Ci1pbnQgIGNhc3Rfb2Zi NjRfc2Vzc2lvbiBQKChTZXNzaW9uX0tleSAqLCBpbnQpKTsKLWludCAgY2FzdF9vZmI2NF9rZXlp ZCBQKChpbnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50ICopKTsKLXZvaWQgY2FzdF9vZmI2NF9wcmlu dHN1YiBQKCh1bnNpZ25lZCBjaGFyICosIGludCwgdW5zaWduZWQgY2hhciAqLCBpbnQpKTsKLQot dm9pZCBjYXN0ZXhwX2NmYjY0X2VuY3J5cHQgUCgodW5zaWduZWQgY2hhciAqLCBpbnQpKTsKLWlu dCAgY2FzdGV4cF9jZmI2NF9kZWNyeXB0IFAoKGludCkpOwotdm9pZCBjYXN0ZXhwX2NmYjY0X2lu aXQgUCgoaW50KSk7Ci1pbnQgIGNhc3RleHBfY2ZiNjRfc3RhcnQgUCgoaW50LCBpbnQpKTsKLWlu dCAgY2FzdGV4cF9jZmI2NF9pcyBQKCh1bnNpZ25lZCBjaGFyICosIGludCkpOwotaW50ICBjYXN0 ZXhwX2NmYjY0X3JlcGx5IFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7Ci1pbnQgIGNhc3RleHBf Y2ZiNjRfc2Vzc2lvbiBQKChTZXNzaW9uX0tleSAqLCBpbnQpKTsKLWludCAgY2FzdGV4cF9jZmI2 NF9rZXlpZCBQKChpbnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50ICopKTsKLXZvaWQgY2FzdGV4cF9j ZmI2NF9wcmludHN1YiBQKCh1bnNpZ25lZCBjaGFyICosIGludCwgdW5zaWduZWQgY2hhciAqLCBp bnQpKTsKLQotdm9pZCBjYXN0ZXhwX29mYjY0X2VuY3J5cHQgUCgodW5zaWduZWQgY2hhciAqLCBp bnQpKTsKLWludCAgY2FzdGV4cF9vZmI2NF9kZWNyeXB0IFAoKGludCkpOwotdm9pZCBjYXN0ZXhw X29mYjY0X2luaXQgUCgoaW50KSk7Ci1pbnQgIGNhc3RleHBfb2ZiNjRfc3RhcnQgUCgoaW50LCBp bnQpKTsKLWludCAgY2FzdGV4cF9vZmI2NF9pcyBQKCh1bnNpZ25lZCBjaGFyICosIGludCkpOwot aW50ICBjYXN0ZXhwX29mYjY0X3JlcGx5IFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7Ci1pbnQg IGNhc3RleHBfb2ZiNjRfc2Vzc2lvbiBQKChTZXNzaW9uX0tleSAqLCBpbnQpKTsKLWludCAgY2Fz dGV4cF9vZmI2NF9rZXlpZCBQKChpbnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50ICopKTsKLXZvaWQg Y2FzdGV4cF9vZmI2NF9wcmludHN1YiBQKCh1bnNpZ25lZCBjaGFyICosIGludCwgdW5zaWduZWQg Y2hhciAqLCBpbnQpKTsKLSNlbmRpZiAvKiBDQVNUX0VOQ1JZUFRJT04gKi8KLQotLyogaW50ICBk ZXNfc3RyaW5nX3RvX2tleSBQKChjaGFyICosIEJsb2NrKSk7ICovCi0KLSNpZmRlZiBERUJVRwot ZXh0ZXJuIGludCBlbmNyeXB0X2RlYnVnX21vZGU7Ci0jZW5kaWYKLQotaW50IGRlY3J5cHRfa3Nf aGFjayh1bnNpZ25lZCBjaGFyICosIGludCk7Ci0KLSNlbmRpZiAvKiBfX0VOQ1JZUFRJT05fXyAq LwotI2VuZGlmIC8qIEVOQ1JZUFRJT04gKi8KLQotI2lmZGVmIENSWVBUX0RMTAotc3RydWN0IF9j cnlwdF9kbGxfaW5pdCB7Ci0gICAgaW50IHZlcnNpb247Ci0KLSAgICAvKiBWZXJzaW9uIDEgdmFy aWFibGVzICovCi0gICAgaW50ICgqcF90dG9sKShjaGFyICosaW50KTsKLSAgICBpbnQgKCpwX2Rv ZGVidWcpKGludCxjaGFyICosY2hhciAqLENLX09GRl9UKTsKLSAgICBpbnQgKCpwX2RvaGV4ZHVt cCkoY2hhciAqLGNoYXIgKixpbnQpOwotICAgIHZvaWQgKCpwX3RuX2RlYnVnKShjaGFyICopOwot ICAgIGludCAoKnBfdnNjcm5wcmludGYpKGNoYXIgKiwgLi4uKTsKLQotICAgIC8qIFZlcnNpb24g MiB2YXJpYWJsZXMgKi8KLSAgICB2b2lkICogcF9rNV9jb250ZXh0OwotCi0gICAgLyogVmVyc2lv biAzIHZhcmlhYmxlcyAqLwotICAgIHZvaWQgKCpwX2luc3RhbGxfZnVuY3MpKGNoYXIgKix2b2lk ICopOwotCi0gICAgLyogVmVyc2lvbiA1IHZhcmlhYmxlcyAqLwotICAgIHVuc2lnbmVkIGxvbmcg KCpwX3JlcXRlbG11dGV4KSh1bnNpZ25lZCBsb25nKTsKLSAgICB1bnNpZ25lZCBsb25nICgqcF9y ZWx0ZWxtdXRleCkodm9pZCk7Ci19OwotI2VuZGlmIC8qIENSWVBUX0RMTCAqLwotCi0vKiBwZXIg S2VyYmVyb3MgdjUgcHJvdG9jb2wgc3BlYyAqLwotI2lmbmRlZiBFTkNUWVBFX05VTEwKLSNkZWZp bmUgRU5DVFlQRV9OVUxMICAgICAgICAgICAgMHgwMDAwCi0jZW5kaWYKLSNpZm5kZWYgIEVOQ1RZ UEVfREVTX0NCQ19DUkMKLSNkZWZpbmUgRU5DVFlQRV9ERVNfQ0JDX0NSQyAgICAgMHgwMDAxICAv KiBERVMgY2JjIG1vZGUgd2l0aCBDUkMtMzIgKi8KLSNlbmRpZgotI2lmbmRlZiAgRU5DVFlQRV9E RVNfQ0JDX01ENAotI2RlZmluZSBFTkNUWVBFX0RFU19DQkNfTUQ0ICAgICAweDAwMDIgIC8qIERF UyBjYmMgbW9kZSB3aXRoIFJTQS1NRDQgKi8KLSNlbmRpZgotI2lmbmRlZiAgRU5DVFlQRV9ERVNf Q0JDX01ENQotI2RlZmluZSBFTkNUWVBFX0RFU19DQkNfTUQ1ICAgICAweDAwMDMgIC8qIERFUyBj YmMgbW9kZSB3aXRoIFJTQS1NRDUgKi8KLSNlbmRpZgotI2lmbmRlZiAgRU5DVFlQRV9ERVNfQ0JD X1JBVwotI2RlZmluZSBFTkNUWVBFX0RFU19DQkNfUkFXICAgICAweDAwMDQgIC8qIERFUyBjYmMg bW9kZSByYXcgKi8KLSNlbmRpZgotLyogWFhYIGRlcHJlY2F0ZWQ/ICovCi0jaWZuZGVmICBFTkNU WVBFX0RFUzNfQ0JDX1NIQQotI2RlZmluZSBFTkNUWVBFX0RFUzNfQ0JDX1NIQSAgICAweDAwMDUg IC8qIERFUy0zIGNiYyBtb2RlIHdpdGggTklTVC1TSEEgKi8KLSNlbmRpZgotI2lmbmRlZiAgRU5D VFlQRV9ERVMzX0NCQ19SQVcKLSNkZWZpbmUgRU5DVFlQRV9ERVMzX0NCQ19SQVcgICAgMHgwMDA2 ICAvKiBERVMtMyBjYmMgbW9kZSByYXcgKi8KLSNlbmRpZgotI2lmbmRlZiAgRU5DVFlQRV9ERVNf SE1BQ19TSEExCi0jZGVmaW5lIEVOQ1RZUEVfREVTX0hNQUNfU0hBMSAgIDB4MDAwOAotI2VuZGlm Ci0jaWZuZGVmICBFTkNUWVBFX0RFUzNfQ0JDX1NIQTEKLSNkZWZpbmUgRU5DVFlQRV9ERVMzX0NC Q19TSEExICAweDAwMTAKLSNlbmRpZgotI2lmbmRlZiBFTkNUWVBFX0FFUzEyOF9DVFNfSE1BQ19T SEExXzk2Ci0jZGVmaW5lIEVOQ1RZUEVfQUVTMTI4X0NUU19ITUFDX1NIQTFfOTYgIDB4MDAxMQot I2VuZGlmCi0jaWZuZGVmIEVOQ1RZUEVfQUVTMjU2X0NUU19ITUFDX1NIQTFfOTYKLSNkZWZpbmUg RU5DVFlQRV9BRVMyNTZfQ1RTX0hNQUNfU0hBMV85NiAgMHgwMDEyCi0jZW5kaWYKLSNpZm5kZWYg RU5DVFlQRV9BUkNGT1VSX0hNQUMKLSNkZWZpbmUgRU5DVFlQRV9BUkNGT1VSX0hNQUMgICAgIDB4 MDAxNwotI2VuZGlmCi0jaWZuZGVmIEVOQ1RZUEVfQVJDRk9VUl9ITUFDX0VYUAotI2RlZmluZSBF TkNUWVBFX0FSQ0ZPVVJfSE1BQ19FWFAgMHgwMDE4Ci0jZW5kaWYKLSNpZm5kZWYgRU5DVFlQRV9M T0NBTF9SQzRfTUQ0Ci0jZGVmaW5lIEVOQ1RZUEVfTE9DQUxfUkM0X01ENCAgICAweEZGRkZGRjgw Ci0jZW5kaWYKLSNpZm5kZWYgIEVOQ1RZUEVfVU5LTk9XTgotI2RlZmluZSBFTkNUWVBFX1VOS05P V04gICAgICAgICAweDAxZmYKLSNlbmRpZgotLyogbG9jYWwgY3J1ZCAqLwotLyogbWFyYydzIERF Uy0zIHdpdGggMzItYml0IGxlbmd0aCAqLwotI2lmbmRlZiAgRU5DVFlQRV9MT0NBTF9ERVMzX0hN QUNfU0hBMQotI2RlZmluZSBFTkNUWVBFX0xPQ0FMX0RFUzNfSE1BQ19TSEExIDB4NzAwNwotI2Vu ZGlmCi0jZW5kaWYgLyogS1JCNV9URUxORVRfSCAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4w LjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1YXRoLmMgYi9ja2VybWl0LTkuMC4zMDItYnVp bGQvY2tlcm1pdC05LjAuMzAyL2NrdWF0aC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCBlYTliYzdkLi4wMDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTku MC4zMDIvY2t1YXRoLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzM2MiArMCwwIEBACi1jaGFyICpj a2F0aHYgPSAiQXV0aGVudGljYXRpb24sIDkuMC4yMzUsIDE2IE1hciAyMDEwIjsKLS8qCi0gIEMg SyBVIEEgVCBIIC4gQyAgLS0gIEF1dGhlbnRpY2F0aW9uIGZvciBDLUtlcm1pdAotCi0gIENvcHly aWdodCAoQykgMTk5OSwgMjAxMCwKLSAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5 IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgotICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUg dGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCi0gICAgY29weXJpZ2h0IHRleHQg aW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCi0K LSAgICBBdXRob3I6ICBKZWZmcmV5IEUgQWx0bWFuIChqYWx0bWFuQHNlY3VyZS1lbmRwb2ludHMu Y29tKQotICAgICAgICAgICAgICAgU2VjdXJlIEVuZHBvaW50cyBJbmMuLCBOZXcgWW9yayBDaXR5 Ci0qLwotLyoKLSAqIEFkZGl0aW9uYWwgY29weXJpZ2h0cyBpbmNsdWRlZCB3aXRoIGFmZmVjdGVk IGNvZGUuCi0gKi8KLQotI2lmZGVmIEhFSU1EQUwKLS8qCi0gIFR1cm5lZCBvZmYgVXNlciB0byBV c2VyIHN1cHBvcnQKLSAgVHVybmVkIG9mZiBLREVTVFJPWSBzdXBwb3J0Ci0gIFR1cm5lZCBvZmYg S0xJU1Qgc3VwcG9ydAotICBUdXJuZWQgb2ZmIGtyYjVfcHJvbXB0ZXIoKSBzdXBwb3J0Ci0gIFR1 cm5lZCBvZmYgdGlja2V0IHZhbGlkYXRpb24KLSAgVHVybmVkIG9mZiB0aWNrZXQgcmVuZXdhbAot ICBUdXJuZWQgb2ZmIGFsdGVybmF0aXZlIGNhY2hlIHN1cHBvcnQgaW4gazVfZ2V0X2NjYWNoZSgp Ci0KLSAgUmVtYWluaW5nIGxpbmsgcHJvYmxlbXM6Ci0KLSAgY2t1YXRoLm86IEluIGZ1bmN0aW9u IGBja19rcmI1X2luaXRUR1QnOgotICBja3VhdGgubygudGV4dCsweDUwYzIpOiB1bmRlZmluZWQg cmVmZXJlbmNlIHRvIGBrcmI1X3N0cmluZ190b19kZWx0YXQnCi0gIGNrdWF0aC5vKC50ZXh0KzB4 NTE2ZCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGtyYjVfc3RyaW5nX3RvX2RlbHRhdCcKLSAg Y2t1YXRoLm8oLnRleHQrMHg1MWVmKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBga3JiNV9zdHJp bmdfdG9fZGVsdGF0JwotKi8KLSNlbmRpZiAvKiBIRUlNREFMICovCi0KLS8qCi0gKiBJbXBsZW1l bnRzIEtlcmJlcm9zIDQvNSwgU1JQLCBTU0wsIE5UTE0gYXV0aGVudGljYXRpb24gYW5kIFNUQVJU X1RMUwotICovCi0KLSNpbmNsdWRlICJja2NzeW0uaCIKLSNpbmNsdWRlICJja2NkZWIuaCIKLQot I2lmZGVmIENLX1NFQ1VSSVRZCi0KLSNkZWZpbmUgQ0tVQVRIX0MKLSNpbmNsdWRlICJja2NrZXIu aCIKLSNpbmNsdWRlICJja3V1c3IuaCIKLSNpbmNsdWRlICJja3VjbWQuaCIgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEZvciBzdHJ1Y3Qga2V5dGFiICovCi0jaW5jbHVkZSAiY2tjbmV0 LmgiCi0jaW5jbHVkZSAiY2tjdGVsLmgiCi0KLWNoYXIgc3pVc2VyTmFtZVJlcXVlc3RlZFtVSURC VUZMRU4rMV07ICAgIC8qIGZvciBpbmNvbWluZyBjb25uZWN0aW9ucyAqLwotY2hhciBzelVzZXJO YW1lQXV0aGVudGljYXRlZFtVSURCVUZMRU4rMV07LyogZm9yIGluY29taW5nIGNvbm5lY3Rpb25z ICovCi1jaGFyIHN6SG9zdE5hbWVbVUlEQlVGTEVOKzFdOwotY2hhciBzelVzZXJOYW1lW1VJREJV RkxFTisxXTsKLXN0YXRpYyBjaGFyIHN6SVBbMTZdOwotc3RhdGljIGludCAgdmFsaWRVc2VyID0g QVVUSF9SRUpFQ1Q7ICAgIC8qIFVzZXIgc3RhcnRzIG91dCBpbnZhbGlkICovCi1pbnQgYXV0aGVu dGljYXRpb25fdmVyc2lvbiA9IEFVVEhUWVBFX05VTEw7Ci1pbnQgYWNjZXB0X2NvbXBsZXRlID0g MDsKLQotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0jaWZkZWYgQ0tfU1NMCi0jaWZkZWYgS1JC NQotI2RlZmluZSBUTFNfVkVSSUZZCi0jZW5kaWYgLyogS1JCNSAqLwotI2VuZGlmIC8qIENLX1NT TCAqLwotCi0jaWZkZWYgQ0tfREVTCi0jaWZkZWYgQ0tfU1NMCi0jaWZuZGVmIExJQkRFUwotI2Rl ZmluZSBMSUJERVMKLSNlbmRpZiAvKiBMSUJERVMgKi8KLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNl bmRpZiAvKiBDS19ERVMgKi8KLQotI2lmZGVmIENSWVBUX0RMTAotI2lmbmRlZiBMSUJERVMKLSNk ZWZpbmUgTElCREVTCi0jZW5kaWYgLyogTElCREVTICovCi0jaWZkZWYgT1MyCi0jaWZkZWYgTlQK LSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jZWxzZSAvKiBOVCAqLwotI2RlZmluZSBJTkNMX0RPU01P RFVMRU1HUgotI2luY2x1ZGUgPG9zMi5oPgotI2VuZGlmIC8qIE5UICovCi0jZW5kaWYgLyogT1My ICovCi0jZW5kaWYgLyogQ1JZUFRfRExMICovCi0KLSNpZmRlZiBOVAotI2RlZmluZSBLUkI1X0FV VE9DT05GX18KLSNkZWZpbmUgTlRMTQotI2VuZGlmIC8qIE5UICovCi0KLSNpZmRlZiBDS19LRVJC RVJPUwotI2RlZmluZSBLSU5JVAotI2lmbmRlZiBIRUlNREFMCi0jZGVmaW5lIEtMSVNUCi0jZGVm aW5lIEtERVNUUk9ZCi0jZW5kaWYgLyogSEVJTURBTCAqLwotI2RlZmluZSBDSEVDS0FERFJTCi0j ZWxzZSAvKiBDS19LRVJCRVJPUyAqLwotI2lmZGVmIEtSQjQKLSN1bmRlZiBLUkI0Ci0jZW5kaWYg LyogS1JCNCAqLwotI2lmZGVmIEtSQjUKLSN1bmRlZiBLUkI1Ci0jZW5kaWYgLyogS1JCNSAqLwot I2lmZGVmIEtSQjUyNAotI3VuZGVmIEtSQjUyNAotI2VuZGlmIC8qIEtSQjUyNCAqLwotI2VuZGlm IC8qIENLX0tFUkJFUk9TICovCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJp bmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHRpbWUuaD4KLSNpbmNsdWRlIDxm Y250bC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaWZuZGVmIG1hbGxvYwotI2lmbmRlZiBWTVMK LSNpZm5kZWYgRlJFRUJTRDQKLSNpZm5kZWYgT3BlbkJTRAotI2lmZGVmIE1BQ09TWAotI2luY2x1 ZGUgPHN5cy9tYWxsb2MuaD4KLSNlbHNlIC8qIE1BQ09TWCAqLwotI2luY2x1ZGUgPG1hbGxvYy5o PgotI2VuZGlmIC8qIE1BQ09TWCAqLwotI2VuZGlmIC8qIE9wZW5CU0QgKi8KLSNlbmRpZiAvKiBG UkVFQlNENCAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIG1hbGxvYyAqLwotI2lmZGVm IE9TMgotI2luY2x1ZGUgPGlvLmg+Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBLUkI1Ci0j aWZkZWYgSEVJTURBTAotI2lmZGVmIHByaW50ZgotI2RlZmluZSBzYXZlcHJpbnRmIHByaW50Zgot I3VuZGVmIHByaW50ZgotI2VuZGlmIC8qIHByaW50ZiAqLwotI2luY2x1ZGUgImtyYjUuaCIKLQot I2luY2x1ZGUgImNvbV9lcnIuaCIKLQotI2lmZGVmIHNhdmVwcmludGYKLSNkZWZpbmUgcHJpbnRm IHNhdmVwcmludGYKLSNlbmRpZiAvKiBzYXZlcHJpbnRmICovCi0jZWxzZSAvKiBIRUlNREFMICov Ci0jaW5jbHVkZSAia3JiNS5oIgotI2luY2x1ZGUgInByb2ZpbGUuaCIKLSNpbmNsdWRlICJjb21f ZXJyLmgiCi0jaWZkZWYgS1JCNV9HRVRfSU5JVF9DUkVEU19PUFRfVEtUX0xJRkUKLSNkZWZpbmUg S1JCNV9IQVZFX0dFVF9JTklUX0NSRURTCi0jZWxzZQotI2RlZmluZSBrcmI1X2ZyZWVfdW5wYXJz ZWRfbmFtZShjb24sdmFsKSBrcmI1X3hmcmVlKChjaGFyICopKHZhbCkpCi0jZW5kaWYKLSNpZm5k ZWYgS1JCNV9IQVZFX0dFVF9JTklUX0NSRURTCi0jZGVmaW5lIGtyYjVfZnJlZV9kYXRhX2NvbnRl bnRzKGMsdikga3JiNV94ZnJlZSgoY2hhciAqKSh2KS0+ZGF0YSkKLSNlbmRpZgotI2VuZGlmIC8q IEhFSU1EQUwgKi8KLSNpZmRlZiBIQVZFX1BXRF9ICi0jaW5jbHVkZSA8cHdkLmg+Ci0jZW5kaWYK LSNlbmRpZiAvKiBLUkI1ICovCi0KLSNpZmRlZiBLUkI0Ci0jZGVmaW5lICBkZXNfY2Jsb2NrIEJs b2NrCi0jZGVmaW5lICBjb25zdF9kZXNfY2Jsb2NrIGNvbnN0IEJsb2NrCi0jZGVmaW5lICBkZXNf a2V5X3NjaGVkdWxlIFNjaGVkdWxlCi0jaWZkZWYgS1JCNTI0Ci0jaWZkZWYgTlQKLSNkZWZpbmUg X1dJTkRPV1MKLSNlbmRpZiAvKiBOVCAqLwotI2luY2x1ZGUgImtlcmJlcm9zSVYva3JiLmgiCi0j aWZuZGVmIE9TMgotI2lmZGVmIEtSQjUyNF9DT05WCi0jaW5jbHVkZSAia3JiNTI0LmgiCi0jZW5k aWYgLyogS1JCNTI0X0NPTlYgKi8KLV9QUk9UT1RZUChjb25zdCBjaGFyICoga3JiX2dldF9lcnJf dGV4dF9lbnRyeSwgKGludCkpOwotI2VuZGlmIC8qIE9TMiAqLwotI2Vsc2UgLyogS1JCNTI0ICov Ci0jaWZkZWYgU09MQVJJUwotI2lmbmRlZiBzdW4KLS8qIGZvciBzb21lIHJlYXNvbiB0aGUgTWFr ZWZpbGUgZW50cmllcyBmb3IgdGhlIFNvbGFyaXMgc3lzdGVtcyBoYXZlIC1Vc3VuICovCi0jZGVm aW5lIHN1bgotI2VuZGlmIC8qIHN1biAqLwotI2VuZGlmIC8qIFNPTEFSSVMgKi8KLSNpbmNsdWRl ICJrcmIuaCIKLSNkZWZpbmUga3JiX2dldF9lcnJfdGV4dF9lbnRyeSBrcmJfZ2V0X2Vycl90ZXh0 Ci0jZW5kaWYgLyogS1JCNTI0ICovCi0jZWxzZSAvKiBLUkI0ICovCi0jaWZkZWYgQ0tfU1NMCi0j ZGVmaW5lICBkZXNfY2Jsb2NrIEJsb2NrCi0jaWZkZWYgQ09NTUVOVAotI2RlZmluZSAgY29uc3Rf ZGVzX2NibG9jayBjb25zdCBCbG9jawotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNkZWZpbmUgIGRl c19rZXlfc2NoZWR1bGUgU2NoZWR1bGUKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNlbmRpZiAvKiBL UkI0ICovCi0KLSNpbmNsdWRlICJja3VhdGguaCIKLSNpZmRlZiBDS19LRVJCRVJPUwotI2lmbmRl ZiBLUkI1Ci0jZGVmaW5lIE5PQkxPQ0tERUYKLSNlbHNlIC8qIEtSQjUgKi8KLSNpZmRlZiBLUkI1 MjQKLSNkZWZpbmUgTk9CTE9DS0RFRgotI2VuZGlmIC8qIEtSQjUyNCAqLwotI2VuZGlmIC8qIEtS QjUgKi8KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotI2luY2x1ZGUgImNrdWF0Mi5oIgotCi0j aWZkZWYgQ0tfU1NMCi0jaWZkZWYgTElCREVTCi0jaWZkZWYgT1BFTlNTTF8wOTcKLSNpZmRlZiBD S19ERVMKLSNkZWZpbmUgT1BFTlNTTF9FTkFCTEVfT0xEX0RFU19TVVBQT1JUCi0jaW5jbHVkZSA8 b3BlbnNzbC9kZXMuaD4KLSNlbmRpZgkvKiBDS19ERVMgKi8KLSNlbmRpZiAvKiBPUEVOU1NMXzA5 NyAqLwotI2lmbmRlZiBIRUFERVJfREVTX0gKLSNkZWZpbmUgSEVBREVSX0RFU19ICi0jZW5kaWYg LyogSEVBREVSX0RFU19IICovCi0jZW5kaWYgLyogTElCREVTICovCi0jaW5jbHVkZSAiY2tfc3Ns LmgiCi1leHRlcm4gaW50IHNzbF9maW5pc2hlZF9tZXNzYWdlczsKLSNlbmRpZiAvKiBTU0wgKi8K LQotI2RlZmluZSBQV0RfU1ogMTI4Ci0KLSNpZm5kZWYgTElCREVTCi0jaWZkZWYgVU5JWAotI2Rl ZmluZSBkZXNfc2V0X3JhbmRvbV9nZW5lcmF0b3Jfc2VlZCh4KSBkZXNfaW5pdF9yYW5kb21fbnVt YmVyX2dlbmVyYXRvcih4KQotI2VuZGlmIC8qIFVOSVggKi8KLSNlbHNlIC8qIExJQkRFUyAqLwot I2RlZmluZSBkZXNfZml4dXBfa2V5X3Bhcml0eSBkZXNfc2V0X29kZF9wYXJpdHkKLSNlbmRpZiAv KiBMSUJERVMgKi8KLQotI2lmZGVmIE9TMgotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSNkZWZpbmUg TUFQX0RFUwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNpZmRlZiBLUkI0Ci0jZGVmaW5l IE1BUF9LUkI0Ci0jZW5kaWYgLyogS1JCNCAqLwotI2lmZGVmIFNSUERMTAotI2RlZmluZSBNQVBf U1JQCi0jZW5kaWYgLyogU1JQRExMICovCi0jaWZkZWYgS1JCNQotI2RlZmluZSBNQVBfS1JCNQot I2VuZGlmIC8qIEtSQjUgKi8KLSNpZmRlZiBDUllQVF9ETEwKLSNkZWZpbmUgTUFQX0NSWVBUCi0j ZW5kaWYgLyogQ1JZUFRfRExMICovCi0jZGVmaW5lIE1BUF9OVExNCi0jaW5jbHVkZSAiY2tvYXRo LmgiCi0jaW5jbHVkZSAiY2tvc3luLmgiCi0jZW5kaWYgLyogT1MyICovCi0KLS8qCi0gKiBHbG9i YWxzCi0gKi8KLWludCBhdXRoX3R5cGVfdXNlcltBVVRIVFlQTFNUU1pdID0ge0FVVEhUWVBFX0FV VE8sIEFVVEhUWVBFX05VTEx9OwotaW50IGF1dGhfaG93PTA7Ci1pbnQgYXV0aF9jcnlwdD0wOwot aW50IGF1dGhfZndkPTA7Ci0KLS8qIFRoZXNlIGFyZSBzdGF0ZSBjb21wbGV0aW9uIHZhcmlhYmxl cyAqLwotc3RhdGljIGludCBtdXR1YWxfY29tcGxldGUgPSAwOwotCi0jaWZkZWYgS1JCNAotI2lm ZGVmIE9TMgotc3RhdGljIExFQVNIX0NSRURFTlRJQUxTIGNyZWQ7Ci0jZWxzZSAvKiBPUzIgKi8K LXN0YXRpYyBDUkVERU5USUFMUyBjcmVkOwotI2VuZGlmIC8qIE9TMiAqLwotc3RhdGljIEtURVhU X1NUIGs0X2F1dGg7Ci1zdGF0aWMgY2hhciAgICAgazRfbmFtZVtBTkFNRV9TWl07Ci1zdGF0aWMg QVVUSF9EQVQgazRfYWRhdCAgPSB7IDAgfTsKLXN0YXRpYyBNU0dfREFUICBrNF9tc2dfZGF0YTsK LSNpZmRlZiBDS19FTkNSWVBUSU9OCi1zdGF0aWMgQmxvY2sgICAgazRfc2Vzc2lvbl9rZXkgICAg ID0geyAwIH07Ci1zdGF0aWMgU2NoZWR1bGUgazRfc2NoZWQ7Ci1zdGF0aWMgQmxvY2sgICAgazRf Y2hhbGxlbmdlICAgICAgID0geyAwIH07Ci0jaWZkZWYgTUlUX0NVUlJFTlQKLXN0YXRpYyBrcmI1 X2tleWJsb2NrIGs0X2tyYmtleTsKLSNlbmRpZiAvKiBNSVRfQ1VSUkVOVCAqLwotI2VuZGlmIC8q IEVOQ1JZUFRJT04gKi8KLSNkZWZpbmUgS1JCNF9TRVJWSUNFX05BTUUgICAgInJjbWQiCi0KLV9Q Uk9UT1RZUChzdGF0aWMgaW50IGs0X2F1dGhfc2VuZCwoVk9JRCkpOwotX1BST1RPVFlQKHN0YXRp YyBpbnQgazRfYXV0aF9yZXBseSwodW5zaWduZWQgY2hhciAqLCBpbnQpKTsKLV9QUk9UT1RZUChz dGF0aWMgaW50IGs0X2F1dGhfaXMsKHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7Ci0jZW5kaWYgLyog S1JCNCAqLwotCi0jaWZkZWYgS1JCNQotc3RhdGljIGtyYjVfZGF0YSAgICAgICAgICBrNV9hdXRo Owotc3RhdGljIGtyYjVfYXV0aF9jb250ZXh0ICBhdXRoX2NvbnRleHQ7Ci1zdGF0aWMga3JiNV9r ZXlibG9jayAgICAgKms1X3Nlc3Npb25fa2V5ID0gTlVMTDsKLXN0YXRpYyBrcmI1X3RpY2tldCAg ICAgICAqazVfdGlja2V0ID0gTlVMTDsKLSNpZm5kZWYgS1JCNV9TRVJWSUNFX05BTUUKLSNkZWZp bmUgS1JCNV9TRVJWSUNFX05BTUUgICAgImhvc3QiCi0jaWZkZWYgTUFDT1NYCi0jZGVmaW5lIE1J VF9DVVJSRU5UIDEKLSNkZWZpbmUgZGVjb2RlX2tyYjVfdGlja2V0ICBrcmI1X2RlY29kZV90aWNr ZXQKLSNkZWZpbmUga3JiNV9yZWFkX21lc3NhZ2UgICBja19rcmI1X3JlYWRfbWVzc2FnZQotI2Rl ZmluZSBrcmI1X3dyaXRlX21lc3NhZ2UgIGNrX2tyYjVfd3JpdGVfbWVzc2FnZQotI2VuZGlmIC8q IE1BQ09TWCAqLwotI2VuZGlmCi0KLV9QUk9UT1RZUChzdGF0aWMgaW50IGs1X2F1dGhfc2VuZCwo aW50LGludCxpbnQpKTsKLV9QUk9UT1RZUChzdGF0aWMgaW50IGs1X2F1dGhfcmVwbHksKGludCwg dW5zaWduZWQgY2hhciAqLCBpbnQpKTsKLV9QUk9UT1RZUChzdGF0aWMgaW50IGs1X2F1dGhfaXMs KGludCx1bnNpZ25lZCBjaGFyICosIGludCkpOwotX1BST1RPVFlQKHN0YXRpYyBpbnQgU2VuZEs1 QXV0aFNCLChpbnQsIHZvaWQgKiwgaW50KSk7Ci0jaWZkZWYgVExTX1ZFUklGWQotc3RhdGljIGlu dCBrcmI1X3Rsc192ZXJpZmllZCA9IDA7Ci0jZW5kaWYgLyogVExTX1ZFUklGWSAqLwotI2VuZGlm IC8qIEtSQjUgKi8KLQotI2lmZGVmIEdTU0FQSV9LUkI1Ci0jaW5jbHVkZSA8Z3NzYXBpL2dzc2Fw aS5oPgotI2luY2x1ZGUgPGdzc2FwaS9nc3NhcGlfZ2VuZXJpYy5oPgotI2luY2x1ZGUgPGdzc2Fw aS9nc3NhcGlfa3JiNS5oPgotCi1zdGF0aWMgZ3NzX2N0eF9pZF90IGdjb250ZXh0OwotI2RlZmlu ZSBHU1NfQlVGU0laIDQwOTYKLXN0YXRpYyBnc3NfYnVmZmVyX2Rlc2MgZ3NzX3NlbmRfdG9rLCBn c3NfcmVjdl90b2ssICpnc3NfdG9rZW5fcHRyOwotc3RhdGljIGNoYXIgZ3NzX3N0YnVmW0dTU19C VUZTSVpdOwotc3RhdGljIGdzc19uYW1lX3QgZ3NzX3RhcmdldF9uYW1lOwotc3RhdGljIHN0cnVj dCBnc3NfY2hhbm5lbF9iaW5kaW5nc19zdHJ1Y3QgZ3NzX2NoYW47Ci0KLV9QUk9UT1RZUChzdGF0 aWMgaW50IGdzc2s1X2F1dGhfc2VuZCwoaW50LGludCxpbnQpKTsKLV9QUk9UT1RZUChzdGF0aWMg aW50IGdzc2s1X2F1dGhfcmVwbHksKGludCwgdW5zaWduZWQgY2hhciAqLCBpbnQpKTsKLV9QUk9U T1RZUChzdGF0aWMgaW50IGdzc2s1X2F1dGhfaXMsKGludCx1bnNpZ25lZCBjaGFyICosIGludCkp OwotX1BST1RPVFlQKHN0YXRpYyBpbnQgU2VuZEdTU0s1QXV0aFNCLChpbnQsIHZvaWQgKiwgaW50 KSk7Ci0jZW5kaWYgLyogR1NTQVBJX0tSQjUgKi8KLQotI2lmZGVmIENLX1NSUAotI2lmZGVmIFBS RV9TUlBfMV83XzMKLV9QUk9UT1RZUChzdGF0aWMgaW50IHNycF9yZXBseSwoaW50LCB1bnNpZ25l ZCBjaGFyICosIGludCkpOwotX1BST1RPVFlQKHN0YXRpYyBpbnQgc3JwX2lzLChpbnQsIHVuc2ln bmVkIGNoYXIgKiwgaW50KSk7Ci0jZWxzZSAvKiBQUkVfU1JQXzFfN18zICovCi1fUFJPVE9UWVAo c3RhdGljIGludCBuZXdfc3JwX3JlcGx5LChpbnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7Ci1f UFJPVE9UWVAoc3RhdGljIGludCBuZXdfc3JwX2lzLChpbnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50 KSk7Ci0jZW5kaWYgLyogUFJFX1NSUF8xXzdfMyAqLwotI2VuZGlmIC8qIFNSUCAqLwotCi0jaWZk ZWYgQ0tfRU5DUllQVElPTgotaW50IGVuY3J5cHRfZmxhZyA9IDE7Ci0jZW5kaWYKLSNpZmRlZiBG T1JXQVJECi1pbnQgZm9yd2FyZF9mbGFnID0gMDsgICAgICAgICAgICAgIC8qIGZvcndhcmQgdGlj a2V0cz8gKi8KLWludCBmb3J3YXJkYWJsZV9mbGFnID0gMTsgICAgICAgICAgLyogZ2V0IGZvcndh cmRhYmxlIHRpY2tldHMgdG8gZm9yd2FyZD8gKi8KLWludCBmb3J3YXJkZWRfdGlja2V0cyA9IDA7 ICAgICAgICAgLyogd2VyZSB0aWNrZXRzIGZvcndhcmRlZD8gKi8KLSNlbmRpZgotCi1zdGF0aWMg dW5zaWduZWQgY2hhciBzdHJfZGF0YVs0MDk2XSA9IHsgSUFDLCBTQiwgVEVMT1BUX0FVVEhFTlRJ Q0FUSU9OLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVVEhU WVBFX0tFUkJFUk9TX1Y1LCB9OwotI2RlZmluZSBBVVRIVE1QQkwgMjA0OAotc3RhdGljIGNoYXIg c3RyVG1wW0FVVEhUTVBCTCsxXTsKLXN0YXRpYyBjaGFyIHN6TG9jYWxIb3N0TmFtZVtVSURCVUZM RU4rMV07Ci1zdGF0aWMga3N0cmVhbSBnX2tzdHJlYW09TlVMTDsKLQotI2lmZGVmIEtSQjUKLWty YjVfY29udGV4dCBrNV9jb250ZXh0PU5VTEw7Ci1zdGF0aWMga3JiNV9jcmVkcyAqIHJldF9jcmVk PU5VTEw7Ci1zdGF0aWMga3JiNV9jb250ZXh0IHRlbG5ldF9jb250ZXh0PU5VTEw7Ci1zdGF0aWMg Y2hhciAqIHRlbG5ldF9rcmI1X3JlYWxtID0gTlVMTDsKLXN0YXRpYyBrcmI1X3ByaW5jaXBhbCBm d2Rfc2VydmVyID0gTlVMTDsKLSNlbmRpZiAvKiBLUkI1ICovCi0KLSNpZmRlZiBDS19TUlAKLSNp ZmRlZiBQUkVfU1JQXzFfNF80Ci0jaWZuZGVmIFBSRV9TUlBfMV80XzUKLSNkZWZpbmUgUFJFX1NS UF8xXzRfNQotI2VuZGlmIC8qIFBSRV9TUlBfMV80XzUgKi8KLSNlbmRpZiAvKiBQUkVfU1JQXzFf NF81ICovCi0jaWZkZWYgUFJFX1NSUF8xXzRfNQotI2lmbmRlZiBQUkVfU1JQXzFfN18zCi0jZGVm aW5lIFBSRV9TUlBfMV83XzMKLSNlbmRpZiAvKiBQUkVfU1JQXzFfN18zICovCi0jZW5kaWYgLyog UFJFX1NSUF8xXzRfNSAqLwotI2luY2x1ZGUgPHRfcHdkLmg+Ci0jaW5jbHVkZSA8dF9jbGllbnQu aD4KLSNpbmNsdWRlIDx0X3NlcnZlci5oPgotc3RhdGljIHN0cnVjdCB0X3NlcnZlciAqIHRzID0g TlVMTDsKLXN0YXRpYyBzdHJ1Y3QgdF9jbGllbnQgKiB0YyA9IE5VTEw7Ci0jaWZkZWYgUFJFX1NS UF8xXzRfNAotc3RhdGljIHN0cnVjdCB0X3B3ICogdHB3ID0gTlVMTDsKLXN0YXRpYyBzdHJ1Y3Qg dF9jb25mICogdGNvbmYgPSBOVUxMOwotI2VuZGlmIC8qIFBSRV9TUlBfMV80XzQgKi8KLSNpZm5k ZWYgUFJFX1NSUF8xXzdfMwotI2lmbmRlZiBTVERDX0hFQURFUlMKLSNkZWZpbmUgU1REQ19IRUFE RVJTIDEKLSNlbmRpZiAvKiBTVERDX0hFQURFUlMgKi8KLSNpbmNsdWRlIDxzcnAuaD4KLXN0YXRp YyBTUlAgKiBzX3NycCA9IE5VTEw7Ci1zdGF0aWMgY3N0ciAqIHNfa2V5ID0gTlVMTDsKLXN0YXRp YyBTUlAgKiBjX3NycCA9IE5VTEw7Ci1zdGF0aWMgY3N0ciAqIGNfa2V5ID0gTlVMTDsKLSNlbmRp ZiAvKiBQUkVfU1JQXzFfN18zICovCi1zdGF0aWMgaW50IHNycF93YWl0cmVzcCA9IDA7ICAgIC8q IEZsYWcgdG8gaW5kaWNhdGUgcmVhZGluZXNzIGZvciByZXNwb25zZSAqLwotc3RhdGljIGNoYXIg c3JwX3Bhc3N3ZFtQV0RfU1pdOwotI2VuZGlmIC8qIENLX1NSUCAqLwotCi0jaWZkZWYgQ0tfS0VS QkVST1MKLSNpZmRlZiBSTE9HQ09ERQotI2RlZmluZSBPUFRTX0ZPUldBUkRfQ1JFRFMgICAgICAg ICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgT1BUU19GT1JXQVJEQUJMRV9DUkVEUyAgICAgICAweDAw MDAwMDEwCi0jZGVmaW5lIEtDTURfS0VZVVNBR0UgICAgICAgICAgICAgICAgMTAyNgotCi0jZGVm aW5lIFJMT0dfQlVGU0laIDUxMjAKLXN0YXRpYyBpbnQgcmxvZ19lbmNyeXB0ID0gMDsKLWNoYXIg ZGVzX2luYnVmWzIqUkxPR19CVUZTSVpdOyAgICAgICAvKiBuZWVkcyB0byBiZSA+IGxhcmdlc3Qg cmVhZCBzaXplICovCi1jaGFyIGRlc19vdXRwa3RbMipSTE9HX0JVRlNJWis0XTsgICAgLyogbmVl ZHMgdG8gYmUgPiBsYXJnZXN0IHdyaXRlIHNpemUgKi8KLSNpZmRlZiBLUkI1Ci1rcmI1X2RhdGEg ZGVzaW5idWYsZGVzb3V0YnVmOwota3JiNV9lbmNyeXB0X2Jsb2NrIGVibG9jazsgICAgICAgICAg ICAgLyogZWJsb2NrIGZvciBlbmNyeXB0L2RlY3J5cHQgKi8KLXN0YXRpYyBrcmI1X2RhdGEgZW5j aXZlY19pWzJdLCBlbmNpdmVjX29bMl07Ci0KLWVudW0ga3JiNV9rY21kX3Byb3RvIHsKLSAgLyog T2xkIHByb3RvY29sOiBERVMgZW5jcnlwdGlvbiBvbmx5LiAgTm8gc3Via2V5cy4gIE5vIHByb3Rl Y3Rpb24KLSAgICAgZm9yIGNsZWFydGV4dCBsZW5ndGguICBObyBpdmVjIHN1cHBsaWVkLiAgT09C IGhhY2tzIHVzZWQgZm9yCi0gICAgIHJsb2dpbi4gIENoZWNrc3VtIG1heSBiZSBvbWl0dGVkIGF0 IGNvbm5lY3Rpb24gc3RhcnR1cC4gICovCi0gIEtDTURfT0xEX1BST1RPQ09MID0gMSwKLSAgLyog TmV3IHByb3RvY29sOiBBbnkgZW5jcnlwdGlvbiBzY2hlbWUuICBDbGllbnQtZ2VuZXJhdGVkIHN1 YmtleQotICAgICByZXF1aXJlZC4gIFByZXBlbmQgY2xlYXJ0ZXh0LWxlbmd0aCB0byBjbGVhcnRl eHQgZGF0YSAoYnV0IGRvbid0Ci0gICAgIGluY2x1ZGUgaXQgaW4gY291bnQpLiAgU3RhcnRpbmcg aXZlYyBkZWZpbmVkLCBjaGFpbmVkLiAgSW4tYmFuZAotICAgICBzaWduYWxsaW5nLiAgQ2hlY2tz dW0gcmVxdWlyZWQuICAqLwotICBLQ01EX05FV19QUk9UT0NPTCwKLSAgLyogSGFjazogR2V0IGNy ZWRlbnRpYWxzLCBhbmQgdXNlIHRoZSBvbGQgcHJvdG9jb2wgaWZmIHRoZSBzZXNzaW9uCi0gICAg IGtleSB0eXBlIGlzIHNpbmdsZS1ERVMuICAqLwotICBLQ01EX1BST1RPQ09MX0NPTVBBVF9IQUNL LAotICBLQ01EX1VOS05PV05fUFJPVE9DT0wKLX07Ci1lbnVtIGtyYjVfa2NtZF9wcm90byBrcmI1 X3Jsb2dfdmVyID0gS0NNRF9QUk9UT0NPTF9DT01QQVRfSEFDSzsKLSNlbmRpZiAvKiBLUkI1ICov Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8KLXN0YXRpYyBjaGFyIHN0b3JhZ2VbNjU1MzZdOyAgICAg ICAgICAgIC8qIHN0b3JhZ2UgZm9yIHRoZSBkZWNyeXB0aW9uICovCi1zdGF0aWMgaW50IG5zdG9y ZWQgPSAwOwotc3RhdGljIGNoYXIgKnN0b3JlX3B0ciA9IHN0b3JhZ2U7Ci0KLWV4dGVybiBjaGFy ICoga3JiNV9kX3ByaW5jaXBhbDsgICAgICAgICAvKiBEZWZhdWx0IHByaW5jaXBhbCAqLwotZXh0 ZXJuIGNoYXIgKiBrcmI1X2RfaW5zdGFuY2U7ICAgICAgICAgIC8qIERlZmF1bHQgaW5zdGFuY2Ug Ki8KLWV4dGVybiBjaGFyICoga3JiNV9kX3JlYWxtOyAgICAgICAgICAgICAvKiBEZWZhdWx0IHJl YWxtICovCi1leHRlcm4gY2hhciAqIGtyYjVfZF9jYzsgICAgICAgICAgICAgICAgLyogRGVmYXVs dCBjcmVkZW50aWFscyBjYWNoZSAqLwotZXh0ZXJuIGNoYXIgKiBrcmI1X2Rfc3J2OyAgICAgICAg ICAgICAgIC8qIERlZmF1bHQgc2VydmljZSBuYW1lICovCi1leHRlcm4gaW50ICAgIGtyYjVfZF9s aWZldGltZTsgICAgICAgICAgLyogRGVmYXVsdCBsaWZldGltZSAqLwotZXh0ZXJuIGludCAgICBr cmI1X2RfZm9yd2FyZGFibGU7Ci1leHRlcm4gaW50ICAgIGtyYjVfZF9wcm94aWFibGU7Ci1leHRl cm4gaW50ICAgIGtyYjVfZF9yZW5ld2FibGU7Ci1leHRlcm4gaW50ICAgIGtyYjVfYXV0b2dldDsK LWV4dGVybiBpbnQgICAga3JiNV9jaGVja2FkZHJzOwotZXh0ZXJuIGludCAgICBrcmI1X2RfZ2V0 azQ7Ci1leHRlcm4gaW50ICAgIGtyYjVfZF9ub19hZGRyZXNzZXM7Ci1leHRlcm4gY2hhciAqIGs1 X2tleXRhYjsKLQotZXh0ZXJuIGludCAgICBrcmI1X2Vycm5vOwotZXh0ZXJuIGNoYXIgKiBrcmI1 X2Vycm1zZzsKLQotZXh0ZXJuIGNoYXIgKiBrcmI0X2RfcHJpbmNpcGFsOyAgICAgICAgIC8qIERl ZmF1bHQgcHJpbmNpcGFsICovCi1leHRlcm4gY2hhciAqIGtyYjRfZF9yZWFsbTsgICAgICAgICAg ICAgLyogRGVmYXVsdCByZWFsbSAqLwotZXh0ZXJuIGNoYXIgKiBrcmI0X2Rfc3J2OyAgICAgICAg ICAgICAgIC8qIERlZmF1bHQgc2VydmljZSBuYW1lICovCi1leHRlcm4gaW50ICAgIGtyYjRfZF9s aWZldGltZTsgICAgICAgICAgLyogRGVmYXVsdCBsaWZldGltZSAqLwotZXh0ZXJuIGludCAgICBr cmI0X2RfcHJlYXV0aDsKLWV4dGVybiBjaGFyICoga3JiNF9kX2luc3RhbmNlOwotZXh0ZXJuIGlu dCAgICBrcmI0X2F1dG9nZXQ7Ci1leHRlcm4gaW50ICAgIGtyYjRfY2hlY2thZGRyczsKLWV4dGVy biBjaGFyICogazRfa2V5dGFiOwotCi1leHRlcm4gaW50ICAgIGtyYjRfZXJybm87Ci1leHRlcm4g Y2hhciAqIGtyYjRfZXJybXNnOwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0KLWV4dGVybiBj aGFyIHRuX21zZ1tdLCBoZXhidWZbXTsgICAgICAgICAvKiBmcm9tIGNrY25ldC5jICovCi1leHRl cm4gQ0hBUiBwd2J1ZltdOwotZXh0ZXJuIGludCAgcHdmbGcsIHB3Y3J5cHQ7Ci1leHRlcm4gaW50 IGRlYmxvZywgZGVic2VzLCB0bl9kZWI7Ci1leHRlcm4gaW50IHNzdGVsbmV0LCBpbnNlcnZlcjsK LSNpZmRlZiBDS19MT0dJTgotZXh0ZXJuIGludCBja3hhbm9uOwotI2VuZGlmIC8qIENLX0xPR0lO ICovCi1leHRlcm4gaW50IHRuX2F1dGhfaG93OwotZXh0ZXJuIGludCB0bl9hdXRoX2VuYzsKLSNp ZmRlZiBDS19FTkNSWVBUSU9OCi1leHRlcm4gaW50IGN4X3R5cGU7Ci0jZW5kaWYgLyogQ0tfRU5D UllQVElPTiAqLwotZXh0ZXJuIGludCBxdWlldCwgdHR5ZmQsIHR0bnByb3RvOwotCi1pbnQKLWNr X2dzc2FwaV9pc19pbnN0YWxsZWQoKQotewotI2lmZGVmIEtSQjUKLSNpZmRlZiBPUzIKLSAgICBy ZXR1cm4oaEdTU0FQSSAhPSBOVUxMKTsKLSNlbHNlIC8qIE9TMiAqLwotICAgIHJldHVybigxKTsK LSNlbmRpZiAvKiBPUzIgKi8KLSNlbHNlIC8qIEtSQjUgKi8KLSAgICByZXR1cm4oMCk7Ci0jZW5k aWYgLyogS1JCNSAqLwotfQotCi1pbnQKLWNrX2tyYjVfaXNfaW5zdGFsbGVkKCkKLXsKLSNpZmRl ZiBLUkI1Ci0jaWZkZWYgT1MyCi0gICAgcmV0dXJuKGhLUkI1XzMyICE9IE5VTEwpOwotI2Vsc2Ug LyogT1MyICovCi0gICAgcmV0dXJuKDEpOwotI2VuZGlmIC8qIE9TMiAqLwotI2Vsc2UgLyogS1JC NSAqLwotICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBLUkI1ICovCi19Ci0KLQotaW50Ci1ja19r cmI1X2lzX2luc3RhbGxlZF9hc19zZXJ2ZXIoKQotewotI2lmZGVmIEtSQjUKLSNpZmRlZiBIRUlN REFMCi0gICAga3JiNV9lcnJvcl9jb2RlIHJldDsKLSAgICBrcmI1X2tleXRhYiBrdDsKLSAgICBr cmI1X2t0X2N1cnNvciBjdXJzb3I7Ci0KLSAgICByZXQgPSBrcmI1X2t0X2RlZmF1bHQoazVfY29u dGV4dCwgJmt0KTsKLSAgICBpZiAoIHJldCApIHsKLSAgICAgICAga3JiNV9rdF9jbG9zZShrNV9j b250ZXh0LCBrdCk7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBr cmI1X2t0X2VuZF9zZXFfZ2V0KGs1X2NvbnRleHQsIGt0LCAmY3Vyc29yKTsKLSAgICAgICAga3Ji NV9rdF9jbG9zZShrNV9jb250ZXh0LCBrdCk7Ci0gICAgICAgIHJldHVybigxKTsKLSAgICB9Ci0j ZWxzZSAvKiBIRUlNREFMICovCi0jaWZuZGVmIENPTU1FTlQKLSAgICBjaGFyIGt0bmFtZVtDS01B WFBBVEhdPSIiOwotCi0gICAgaWYgKCBrNV9rZXl0YWIgKSB7Ci0gICAgICAgIGNrc3RybmNweShr dG5hbWUsazVfa2V5dGFiLENLTUFYUEFUSCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAga3JiNV9l cnJvcl9jb2RlIGNvZGU7Ci0KLSAgICAgICAgaWYgKCBrNV9jb250ZXh0ID09IE5VTEwpCi0gICAg ICAgICAgICBpZiAoa3JiNV9pbml0X2NvbnRleHQoJms1X2NvbnRleHQpKQotICAgICAgICAgICAg ICAgIHJldHVybigwKTsKLQotICAgICAgICBjb2RlID0ga3JiNV9rdF9kZWZhdWx0X25hbWUoazVf Y29udGV4dCxrdG5hbWUsQ0tNQVhQQVRIKTsKLSAgICAgICAgZGVidWcoRjEwMSwia3JiNV9rdF9k ZWZhdWx0X25hbWUiLCIiLGNvZGUpOwotICAgICAgICBpZiAoIGNvZGUgKSB7Ci0gICAgICAgICAg ICAvKiBXZSBjYW4ndCBjaGVjayB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmaWxlIHNpbmNlIHdlIGNh bid0ICAgKi8KLSAgICAgICAgICAgIC8qIGRldGVybWluZSB0aGUgZmlsZSBuYW1lLiAgU28gd2Ug cmV0dXJuIFRSVUUgYW5kIGxldCAgICAgICAqLwotICAgICAgICAgICAgLyogS3JiNSBiZSBvZmZl cmVkIHRvIHRoZSB1c2VyIGV2ZW4gdGhvdWdoIGl0IG1heSBmYWlsIGxhdGVyICovCi0gICAgICAg ICAgICByZXR1cm4oMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoICFzdHJuY21wKCJG SUxFOiIsa3RuYW1lLDUpICkgewotICAgICAgICBpZiAoIHpjaGtpKCZrdG5hbWVbNV0pID4gMCAp Ci0gICAgICAgICAgICByZXR1cm4oMSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVy bigwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoa3RuYW1lWzBdKQotICAgICAgICAgICAg cmV0dXJuKDEpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQot I2Vsc2UgLyogQ09NTUVOVCAqLwotICAgIGtyYjVfZXJyb3JfY29kZSAgICAgICAgICAgICBrcmI1 cmMgPSBLUkI1S1JCX0VSUl9HRU5FUklDOwotICAgIGtyYjVfY29udGV4dCAgICAgICAgICAgICAg ICBrcmI1Y29udGV4dCA9IE5VTEw7Ci0gICAga3JiNV9jY2FjaGUgICAgICAgICAgICAgICAgIGty YjVjY2RlZiA9IE5VTEw7Ci0gICAga3JiNV9jcmVkcyAgICAgICAgICAgICAgICAgIGtyYjVjcmVk cywgKmtyYjVjcmVkc3AgPSBOVUxMOwotICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBy YyA9IDA7Ci0KLSAgICBpZiAoICFja19rcmI1X2lzX2luc3RhbGxlZCgpICkKLSAgICAgICAgcmV0 dXJuKDApOwotCi0gICAgbWVtc2V0KChjaGFyICopJmtyYjVjcmVkcywgMCwgc2l6ZW9mKGtyYjVj cmVkcykpOwotCi0gICAgaWYgKChrcmI1cmMgPSBrcmI1X2luaXRfY29udGV4dCgma3JiNWNvbnRl eHQpKSAhPSAwKQotICAgICAgICBnb3RvIGVycjsKLQotICAgIGlmICgoa3JiNXJjID0ga3JiNV9z bmFtZV90b19wcmluY2lwYWwoa3JiNWNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzekhvc3ROYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAga3JiNV9kX3NydiA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBrcmI1X2Rfc3J2IDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEtSQjVfU0VSVklDRV9OQU1FLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgS1JCNV9OVF9TUlZfSFNULAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmtyYjVjcmVkcy5zZXJ2ZXIpKSAhPSAwKQotICAgICAgZ290 byBlcnI7Ci0KLSAgICBpZiAoKGtyYjVyYyA9IGtyYjVfY2NfZGVmYXVsdChrcmI1Y29udGV4dCwg JmtyYjVjY2RlZikpICE9IDApCi0gICAgICAgIGdvdG8gZXJyOwotCi0gICAgaWYgKChrcmI1cmMg PSBrcmI1X2NjX2dldF9wcmluY2lwYWwoa3JiNWNvbnRleHQsIGtyYjVjY2RlZiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtyYjVjcmVkcy5jbGllbnQpKSAhPSAw KQotICAgICAgICBnb3RvIGVycjsKLQotICAgIGlmICgoa3JiNXJjID0ga3JiNV9nZXRfY3JlZGVu dGlhbHMoa3JiNWNvbnRleHQsIDAsIGtyYjVjY2RlZiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAma3JiNWNyZWRzLCAma3JiNWNyZWRzcCkpICE9IDApCi0gICAgICAg IGdvdG8gZXJyOwotICAgIHJjID0gMTsKLQotICBlcnI6Ci0KLSAgICBpZiAoa3JiNWNyZWRzLmNs aWVudCkKLSAgICAgIGtyYjVfZnJlZV9wcmluY2lwYWwoa3JiNWNvbnRleHQsIGtyYjVjcmVkcy5j bGllbnQpOwotICAgIGlmIChrcmI1Y3JlZHMuc2VydmVyKQotICAgICAga3JiNV9mcmVlX3ByaW5j aXBhbChrcmI1Y29udGV4dCwga3JiNWNyZWRzLnNlcnZlcik7Ci0gICAgaWYgKGtyYjVjb250ZXh0 KQotICAgICAga3JiNV9mcmVlX2NvbnRleHQoa3JiNWNvbnRleHQpOwotICAgIHJldHVybihyYyk7 Ci0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZW5kaWYgLyogSEVJTURBTCAqLwotI2Vsc2UgLyog S1JCNSAqLwotICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBLUkI1ICovCi19Ci0KLWludAotY2tf a3JiNF9pc19pbnN0YWxsZWQoKQotewotI2lmZGVmIEtSQjQKLSNpZmRlZiBPUzIKLSAgICByZXR1 cm4oaEtSQjRfMzIgIT0gTlVMTCk7Ci0jZWxzZSAvKiBPUzIgKi8KLSAgICByZXR1cm4oMSk7Ci0j ZW5kaWYgLyogT1MyICovCi0jZWxzZSAvKiBLUkI0ICovCi0gICAgcmV0dXJuKDApOwotI2VuZGlm IC8qIEtSQjQgKi8KLX0KLQotaW50Ci1ja19rcmI0X2lzX2luc3RhbGxlZF9hc19zZXJ2ZXIoKQot ewotICAgIGlmICggIWNrX2tyYjRfaXNfaW5zdGFsbGVkKCkgKQotICAgICAgICByZXR1cm4oMCk7 Ci0KLSNpZmRlZiBLUkI0Ci0gICAgaWYgKCAhazRfa2V5dGFiICkgewotI2lmZGVmIE5UCi0gICAg ICAgIGNoYXIgbmFtZVtDS01BWFBBVEhdPSIiOwotICAgICAgICBEV09SRCBsZW4gPSBDS01BWFBB VEg7Ci0KLSAgICAgICAgbGVuID0gR2V0V2luZG93c0RpcmVjdG9yeShuYW1lLGxlbik7Ci0gICAg ICAgIGlmICggbGVuID4gMCApCi0gICAgICAgICAgICBja3N0cm5jYXQobmFtZSwiL3NydnRhYiIs Q0tNQVhQQVRIKTsKLSAgICAgICAgaWYgKCBuYW1lWzBdICkKLSAgICAgICAgICAgIG1ha2VzdHIo Jms0X2tleXRhYixuYW1lKTsKLSNlbHNlIC8qIE5UICovCi0gICAgICAgIG1ha2VzdHIoJms0X2tl eXRhYiwiL2V0Yy9zcnZ0YWIiKTsKLSNlbmRpZiAvKiBOVCAqLwotICAgIH0KLQotICAgIGlmICgg IWs0X2tleXRhYiApCi0gICAgICAgIHJldHVybigwKTsKLQotICAgIGlmICggemNoa2koazRfa2V5 dGFiKSA+IDAgKQotICAgICAgICByZXR1cm4oMSk7Ci0jaWZkZWYgS1JCNTI0Ci0gICAgZWxzZSBp ZiAoY2tfa3JiNV9pc19pbnN0YWxsZWRfYXNfc2VydmVyKCkpCi0gICAgICAgIHJldHVybigxKTsK LSNlbmRpZiAvKiBLUkI1MjQgKi8KLSAgICBlbHNlCi0gICAgICAgIHJldHVybigwKTsKLSNlbmRp ZiAvKiBLUkI0ICovCi19Ci0KLWludAotY2tfc3JwX2lzX2luc3RhbGxlZF9hc19zZXJ2ZXIoKQot ewotI2lmZGVmIENLX1NSUAotI2lmZGVmIFNSUERMTAotICAgIGlmICggaFNSUCA9PSBOVUxMICkK LSAgICAgICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIFNSUERMTCAqLwotI2lmZGVmIENPTU1FTlQK LSAgICAvKiBUaGlzIGlzIHRoZSBuZXcgQVBJIGFzIG9mIDEuNy40LiAgSG93ZXZlciwgYWxsIGl0 IGRvZXMKLSAgICAgICBpcyBhbGxvY2F0ZSBhIGRhdGEgc3RydWN0dXJlLiAgSXQgY2FuIG5ldmVy IGZhaWwuCi0gICAgICovCi0gICAgewotICAgICAgICBTUlAgKiBzX3NycCA9IFNSUF9uZXcoU1JQ X1JGQzI5NDVfc2VydmVyX21ldGhvZCgpKTsKLSAgICAgICAgaWYgKCBzX3NycCApIHsKLSAgICAg ICAgICAgIFNSUF9mcmVlKHNfc3JwKTsKLSAgICAgICAgICAgIHNfc3JwID0gTlVMTDsKLSAgICAg ICAgICAgIHJldHVybigxKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQot I2Vsc2UgLyogQ09NTUVOVCAqLwotICAgIHsKLSAgICAgICAgc3RydWN0IHRfcHcgKiB0cHcgPSBO VUxMOwotICAgICAgICBzdHJ1Y3QgdF9jb25mICogdGNvbmYgPSBOVUxMOwotICAgICAgICBpZigo dGNvbmYgPSB0X29wZW5jb25mKE5VTEwpKSA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuKDAp OwotICAgICAgICBpZigodHB3ID0gdF9vcGVucHcoTlVMTCkpID09IE5VTEwpIHsKLSAgICAgICAg ICAgIHRfY2xvc2Vjb25mKHRjb25mKTsKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAg fQotICAgICAgICB0X2Nsb3NlY29uZih0Y29uZik7Ci0gICAgICAgIHRfY2xvc2Vwdyh0cHcpOwot ICAgICAgICByZXR1cm4oMSk7Ci0gICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNlbHNlIC8q IFNSUCAqLwotICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBTUlAgKi8KLX0KLQotaW50Ci1ja19z cnBfaXNfaW5zdGFsbGVkKCkKLXsKLSNpZmRlZiBDS19TUlAKLSNpZmRlZiBTUlBETEwKLSAgICBp ZiAoIGhTUlAgPT0gTlVMTCApCi0gICAgICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBTUlBETEwg Ki8KLSAgICByZXR1cm4oMSk7Ci0jZWxzZSAvKiBDS19TUlAgKi8KLSAgICByZXR1cm4oMCk7Ci0j ZW5kaWYgLyogQ0tfU1JQICovCi19Ci0KLWludAotY2tfa3J5cHRvX2lzX2luc3RhbGxlZCgpCi17 Ci0jaWZkZWYgQ0tfU1JQCi0jaWZkZWYgT1MyCi0gICAgaWYgKCBoTElCS1JZUFRPID09IE5VTEwg KQotICAgICAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgcmV0dXJuKDEpOwot I2Vsc2UgLyogQ0tfU1JQICovCi0gICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIENLX1NSUCAqLwot fQotCi1pbnQKLWNrX2NyeXB0X2lzX2luc3RhbGxlZCgpCi17Ci0jaWZkZWYgQ0tfRU5DUllQVElP TgotI2lmZGVmIENSWVBUX0RMTAotICAgIHJldHVybihoQ1JZUFQgIT0gTlVMTCk7Ci0jZWxzZSAv KiBDUllQVF9ETEwgKi8KLSAgICByZXR1cm4oMSk7Ci0jZW5kaWYgLyogQ1JZUFRfRExMICovCi0j ZWxzZSAvKiBFTkNSWVBUSU9OICovCi0gICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIEVOQ1JZUFRJ T04gKi8KLX0KLQotaW50Ci1ja19udGxtX2lzX2luc3RhbGxlZCgpCi17Ci0jaWZkZWYgTlQKLSAg ICByZXR1cm4oaFNTUEkgIT0gTlVMTCk7Ci0jZWxzZSAvKiBOVCAqLwotICAgIHJldHVybigwKTsK LSNlbmRpZiAvKiBOVCAqLwotfQotCi1pbnQKLWNrX3RuX2F1dGhfdmFsaWQoKQotewotICAgIHJl dHVybih2YWxpZFVzZXIpOwotfQotCi0vKiBDIEsgXyBLIFIgQiBfIEEgVSBUIEggXyBJIE4gXyBQ IFIgTyBHIFIgRSBTIFMKLSAqCi0gKiBJcyBhbiBhdXRoZW50aWNhdGlvbiBuZWdvdGlhdGlvbiBz dGlsbCBpbiBwcm9ncmVzcz8KLSAqCi0gKi8KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWNrX3Ru X2F1dGhfaW5fcHJvZ3Jlc3Modm9pZCkKLSNlbHNlCi1ja190bl9hdXRoX2luX3Byb2dyZXNzKCkK LSNlbmRpZgotewotICAgIHN3aXRjaCAoYXV0aGVudGljYXRpb25fdmVyc2lvbikgewotICAgIGNh c2UgQVVUSFRZUEVfQVVUTzoKLSAgICAgICAgcmV0dXJuKDEpOwotICAgIGNhc2UgQVVUSFRZUEVf TlVMTDoKLSAgICAgICAgcmV0dXJuKDApOwotI2lmZGVmIEtSQjQKLSAgICBjYXNlIEFVVEhUWVBF X0tFUkJFUk9TX1Y0OgotICAgICAgICBpZiAoIWFjY2VwdF9jb21wbGV0ZSkgewotICAgICAgICAg ICAgZGVidWcoRjEwMCwiY2tfYXV0aF9pbl9wcm9ncmVzcygpIEtlcmJlcm9zIDQgIWFjY2VwdF9j b21wbGV0ZSIsCi0gICAgICAgICAgICAgICAgICAgIiIsMCk7Ci0gICAgICAgICAgICByZXR1cm4o MSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoKGF1dGhfaG93ICYgQVVUSF9IT1dfTUFT SykgJiYgIW11dHVhbF9jb21wbGV0ZSkgewotICAgICAgICAgICAgZGVidWcoRjEwMCwiY2tfYXV0 aF9pbl9wcm9ncmVzcygpIEtlcmJlcm9zIDQgIW11dHVhbF9jb21wbGV0ZSIsCi0gICAgICAgICAg ICAgICAgICAgIiIsMCk7Ci0gICAgICAgICAgICByZXR1cm4oMSk7Ci0gICAgICAgIH0KLSAgICAg ICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIEtSQjQgKi8KLSNpZmRl ZiBLUkI1Ci0gICAgY2FzZSBBVVRIVFlQRV9LRVJCRVJPU19WNToKLSAgICAgICAgaWYgKCFhY2Nl cHRfY29tcGxldGUpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsImNrX2F1dGhfaW5fcHJvZ3Jl c3MoKSBLZXJiZXJvcyA1ICFhY2NlcHRfY29tcGxldGUiLAotICAgICAgICAgICAgICAgICAgICIi LDApOwotICAgICAgICAgICAgcmV0dXJuKDEpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYg KChhdXRoX2hvdyAmIEFVVEhfSE9XX01BU0spICYmICFtdXR1YWxfY29tcGxldGUpIHsKLSAgICAg ICAgICAgIGRlYnVnKEYxMDAsImNrX2F1dGhfaW5fcHJvZ3Jlc3MoKSBLZXJiZXJvcyA1ICFtdXR1 YWxfY29tcGxldGUiLAotICAgICAgICAgICAgICAgICAgICIiLDApOwotICAgICAgICAgICAgcmV0 dXJuKDEpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybigwKTsK LSNpZmRlZiBHU1NBUElfSzUKLSAgICBjYXNlIEFVVEhUWVBFX0dTU0FQSV9LUkI1OgotICAgICAg ICBpZiAoIWFjY2VwdF9jb21wbGV0ZSkgewotICAgICAgICAgICAgZGVidWcoRjEwMCwKLQkJICAi Y2tfYXV0aF9pbl9wcm9ncmVzcygpIEdTU0FQSSBLZXJiZXJvcyA1ICFhY2NlcHRfY29tcGxldGUi LAotCQkgICIiLAotCQkgIDAKLQkJICApOwotICAgICAgICAgICAgcmV0dXJuKDEpOwotICAgICAg ICB9Ci0gICAgICAgIGVsc2UgaWYgKChhdXRoX2hvdyAmIEFVVEhfSE9XX01BU0spICYmICFtdXR1 YWxfY29tcGxldGUpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsCi0JCSAgImNrX2F1dGhfaW5f cHJvZ3Jlc3MoKSBHU1NBUEkgS2VyYmVyb3MgNSAhbXV0dWFsX2NvbXBsZXRlIiwKLQkJICAiIiwK LQkJICAwCi0JCSAgKTsKLSAgICAgICAgICAgIHJldHVybigxKTsKLSAgICAgICAgfSBlbHNlCi0J ICByZXR1cm4oMCk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIEdTU0FQSV9LNSAqLwotI2Vu ZGlmIC8qIEtSQjUgKi8KLSNpZmRlZiBDS19TUlAKLSAgICBjYXNlIEFVVEhUWVBFX1NSUDoKLSAg ICAgICAgaWYgKCFhY2NlcHRfY29tcGxldGUgfHwgc3JwX3dhaXRyZXNwKQotICAgICAgICAgICAg cmV0dXJuKDEpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4oMCk7Ci0jZW5kaWYg LyogQ0tfU1JQICovCi0jaWZkZWYgTlRMTQotICAgIGNhc2UgQVVUSFRZUEVfTlRMTToKLSAgICAg ICAgaWYgKCFhY2NlcHRfY29tcGxldGUpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsImNrX2F1 dGhfaW5fcHJvZ3Jlc3MoKSBOVExNICFhY2NlcHRfY29tcGxldGUiLAotICAgICAgICAgICAgICAg ICAgICIiLDApOwotICAgICAgICAgICAgcmV0dXJuKDEpOwotICAgICAgICB9Ci0gICAgICAgIGVs c2UKLSAgICAgICAgICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBOVExNICovCi0gICAgY2FzZSBB VVRIVFlQRV9TU0w6Ci0gICAgICAgIGlmICghYWNjZXB0X2NvbXBsZXRlKSB7Ci0gICAgICAgICAg ICBkZWJ1ZyhGMTAwLCJja19hdXRoX2luX3Byb2dyZXNzKCkgU1NMICFhY2NlcHRfY29tcGxldGUi LAotICAgICAgICAgICAgICAgICAgICIiLDApOwotICAgICAgICAgICAgcmV0dXJuKDEpOwotICAg ICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICBkZWZhdWx0 OgotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotICAgIHJldHVybigwKTsKLX0KLQotCi0vKiAg QyBLIF8gSyBSIEIgXyBUIE4gXyBBIFUgVCBIIF8gUiBFIFEgVSBFIFMgVAotICoKLSAqICBCdWls ZHMgYSBUZWxuZXQgQXV0aGVudGljYXRpb24gU2VuZCBOZWdvdGlhdGlvbiBwcm92aWRpbmcgdGhl Ci0gKiAgbGlzdCBvZiBzdXBwb3J0ZWQgYXV0aGVudGljYXRpb24gbWV0aG9kcy4gIFRvIGJlIHVz ZWQgb25seQotICogIHdoZW4gYWNjZXB0aW5nIGluY29taW5nIGNvbm5lY3Rpb25zIGFzIG9ubHkg dGhlIHNlcnZlciAoRE8pIHNpZGUgb2YgdGhlCi0gKiAgVGVsbmV0IG5lZ290aWF0aW9uIGlzIGFs bG93ZWQgdG8gc2VuZCBhbiBBVVRIIFNFTkQuCi0gKgotICogIFJldHVybnM6IDAgb24gc3VjY2Vz cyBhbmQgLTEgb24gZmFpbHVyZQotICovCi0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHN0cl9yZXF1 ZXN0WzY0XSA9IHsgSUFDLCBTQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFRFTE9QVF9BVVRIRU5USUNBVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFRFTFFVQUxfU0VORCB9OwotI2lmZGVmIEdTU0FQSV9LNQot c3RhdGljIGludAotY2tfdG5fYXV0aF9yZXF1ZXN0X2dzc2tyYjUoaW50IGkpCi17Ci0gICAgaWYg KGNrX2dzc2FwaV9pc19pbnN0YWxsZWQoKSAmJiBja19rcmI1X2lzX2luc3RhbGxlZF9hc19zZXJ2 ZXIoKSkgewotICAgICAgICBpZiAoICh0bl9hdXRoX2hvdyA9PSBUTl9BVVRIX0hPV19BTlkgfHwK LSAgICAgICAgICAgICAgIHRuX2F1dGhfaG93ID09IFROX0FVVEhfSE9XX01VVFVBTCkgICYmCi0g ICAgICAgICAgICAgKHRuX2F1dGhfZW5jID09IFROX0FVVEhfRU5DX0FOWSB8fAotICAgICAgICAg ICAgICAgdG5fYXV0aF9lbmMgPT0gVE5fQVVUSF9FTkNfRVhDSCkgKSB7Ci0gICAgICAgICAgICBz dHJfcmVxdWVzdFtpKytdID0gQVVUSFRZUEVfS0VSQkVST1NfVjU7Ci0gICAgICAgICAgICBzdHJf cmVxdWVzdFtpXSA9IEFVVEhfQ0xJRU5UX1RPX1NFUlZFUiB8IEFVVEhfSE9XX01VVFVBTDsKLSAg ICAgICAgICAgIHN0cl9yZXF1ZXN0W2ldIHw9IEFVVEhfRU5DUllQVF9BRlRFUl9FWENIQU5HRTsK LQotICAgICAgICAgICAgaWYgKCBkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcyApCi0gICAgICAg ICAgICAgICAgY2tzdHJuY2F0KHRuX21zZywKLSAgICAgICAgICAgICAgICAiS0VSQkVST1NfVjUg Q0xJRU5UX1RPX1NFUlZFUnxNVVRVQUx8RU5DUllQVF9BRlRFUl9FWENIQU5HRSAiLAotICAgICAg ICAgICAgICAgICAgICAgICAgICBUTl9NU0dfTEVOKTsKLSAgICAgICAgICAgIGkrKzsKLSAgICAg ICAgfQotICAgIH0KLX0KLSNlbmRpZiAvKiBHU1NBUElfSzUgKi8KLQotI2lmZGVmIEtSQjUKLXN0 YXRpYyBpbnQKLWNrX3RuX2F1dGhfcmVxdWVzdF9rcmI1KGludCBpKQotewotICAgIGlmIChja19r cmI1X2lzX2luc3RhbGxlZF9hc19zZXJ2ZXIoKSkgewotI2lmZGVmIENLX1NTTAotICAgICAgICBp ZiAoIGNrX3NzbGVheV9pc19pbnN0YWxsZWQoKSAmJgotICAgICAgICAgICAgICh0bHNfYWN0aXZl X2ZsYWcgfHwgc3NsX2FjdGl2ZV9mbGFnKSAmJgotICAgICAgICAgICAgIHNzbF9maW5pc2hlZF9t ZXNzYWdlcyApCi0gICAgICAgIHsKLSNpZmRlZiBVU0VfSU5JX0NSRURfRldECi0gICAgICAgICAg ICBpZiAoIGZvcndhcmRfZmxhZyAmJgotICAgICAgICAgICAgICAgICAodG5fYXV0aF9ob3cgPT0g VE5fQVVUSF9IT1dfQU5ZIHx8Ci0gICAgICAgICAgICAgICAgICAgdG5fYXV0aF9ob3cgPT0gVE5f QVVUSF9IT1dfTVVUVUFMKSAgJiYKLSAgICAgICAgICAgICAgICAgKHRuX2F1dGhfZW5jID09IFRO X0FVVEhfRU5DX0FOWSB8fAotICAgICAgICAgICAgICAgICAgIHRuX2F1dGhfZW5jID09IFROX0FV VEhfRU5DX1RFTE9QVCkKLSAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgewotICAgICAg ICAgICAgICAgIHN0cl9yZXF1ZXN0W2krK10gPSBBVVRIVFlQRV9LRVJCRVJPU19WNTsKLSAgICAg ICAgICAgICAgICBzdHJfcmVxdWVzdFtpXSA9IEFVVEhfQ0xJRU5UX1RPX1NFUlZFUiB8IEFVVEhf SE9XX01VVFVBTDsKLSAgICAgICAgICAgICAgICBzdHJfcmVxdWVzdFtpXSB8PSBBVVRIX0VOQ1JZ UFRfU1RBUlRfVExTOwotICAgICAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2ldIHw9IElOSV9DUkVE X0ZXRF9PTjsKLQotICAgICAgICAgICAgICAgIGlmICggZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJz ZXMgKQotICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLAotICJLRVJCRVJPU19W NSBDTElFTlRfVE9fU0VSVkVSfE1VVFVBTHxFTkNSWVBUX1NUQVJUX1RMU3xJTklfQ1JFRF9GV0Rf T04gIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTl9NU0dfTEVOKTsKLSAgICAg ICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogVVNFX0lOSV9DUkVEX0ZX RCAqLwotICAgICAgICAgICAgaWYgKCAodG5fYXV0aF9ob3cgPT0gVE5fQVVUSF9IT1dfQU5ZIHx8 Ci0gICAgICAgICAgICAgICAgICAgdG5fYXV0aF9ob3cgPT0gVE5fQVVUSF9IT1dfTVVUVUFMKSAg JiYKLSAgICAgICAgICAgICAgICAgKHRuX2F1dGhfZW5jID09IFROX0FVVEhfRU5DX0FOWSB8fAot ICAgICAgICAgICAgICAgICAgIHRuX2F1dGhfZW5jID09IFROX0FVVEhfRU5DX1RFTE9QVCkgKSB7 Ci0gICAgICAgICAgICAgICAgc3RyX3JlcXVlc3RbaSsrXSA9IEFVVEhUWVBFX0tFUkJFUk9TX1Y1 OwotICAgICAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2ldID0gQVVUSF9DTElFTlRfVE9fU0VSVkVS IHwgQVVUSF9IT1dfTVVUVUFMOwotICAgICAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2ldIHw9IEFV VEhfRU5DUllQVF9TVEFSVF9UTFM7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIGRlYmxvZyB8fCB0 bl9kZWIgfHwgZGVic2VzICkKLSAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZywK LSAgICAgICAgICAgICAgICAgICAgICAiS0VSQkVST1NfVjUgQ0xJRU5UX1RPX1NFUlZFUnxNVVRV QUx8RU5DUllQVF9TVEFSVF9UTFMgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRO X01TR19MRU4pOwotICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIGlmICggdG5fYXV0aF9ob3cgPT0gVE5fQVVUSF9IT1dfQU5ZIHx8Ci0gICAgICAgICAgICAg ICAgIHRuX2F1dGhfaG93ID09IFROX0FVVEhfSE9XX09ORV9XQVkgKSB7Ci0gICAgICAgICAgICAg ICAgc3RyX3JlcXVlc3RbaSsrXSA9IEFVVEhUWVBFX0tFUkJFUk9TX1Y1OwotICAgICAgICAgICAg ICAgIHN0cl9yZXF1ZXN0W2ldID0gQVVUSF9DTElFTlRfVE9fU0VSVkVSIHwgQVVUSF9IT1dfT05F X1dBWTsKLSAgICAgICAgICAgICAgICBzdHJfcmVxdWVzdFtpXSB8PSBBVVRIX0VOQ1JZUFRfU1RB UlRfVExTOwotCi0gICAgICAgICAgICAgICAgaWYgKCBkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNl cyApCi0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csCi0gICAgICAgICAgICAg ICAgICAgICJLRVJCRVJPU19WNSBDTElFTlRfVE9fU0VSVkVSfE9ORV9XQVl8RU5DUllQVF9TVEFS VF9UTFMgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTl9NU0dfTEVOKTsKLSAg ICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNpZmRlZiBDS19F TkNSWVBUSU9OCi0gICAgICAgIGVsc2UKLSAgICAgICAgewotI2VuZGlmIC8qIENLX0VOQ1JZUFRJ T04gKi8KLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0jaWZkZWYg VVNFX0lOSV9DUkVEX0ZXRAotICAgICAgICAgICAgaWYgKCBmb3J3YXJkX2ZsYWcgJiYKLSAgICAg ICAgICAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pICE9IFROX05HX1JG ICYmCi0gICAgICAgICAgICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pICE9 IFROX05HX1JGICYmCi0gICAgICAgICAgICAgICAgICh0bl9hdXRoX2hvdyA9PSBUTl9BVVRIX0hP V19BTlkgfHwKLSAgICAgICAgICAgICAgICAgICB0bl9hdXRoX2hvdyA9PSBUTl9BVVRIX0hPV19N VVRVQUwpICAmJgotICAgICAgICAgICAgICAgICAodG5fYXV0aF9lbmMgPT0gVE5fQVVUSF9FTkNf QU5ZIHx8Ci0gICAgICAgICAgICAgICAgICAgdG5fYXV0aF9lbmMgPT0gVE5fQVVUSF9FTkNfVEVM T1BUKQotICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg c3RyX3JlcXVlc3RbaSsrXSA9IEFVVEhUWVBFX0tFUkJFUk9TX1Y1OwotICAgICAgICAgICAgICAg IHN0cl9yZXF1ZXN0W2ldID0gQVVUSF9DTElFTlRfVE9fU0VSVkVSIHwgQVVUSF9IT1dfTVVUVUFM OwotICAgICAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2ldIHw9IEFVVEhfRU5DUllQVF9VU0lOR19U RUxPUFQ7Ci0gICAgICAgICAgICAgICAgc3RyX3JlcXVlc3RbaV0gfD0gSU5JX0NSRURfRldEX09O OwotCi0gICAgICAgICAgICAgICAgaWYgKCBkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcyApCi0g ICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csCi0gICJLRVJCRVJPU19WNSBDTElF TlRfVE9fU0VSVkVSfE1VVFVBTHxFTkNSWVBUX1VTSU5HX1RFTE9QVHxJTklfQ1JFRF9GV0RfT04g IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTl9NU0dfTEVOKTsKLSAgICAgICAg ICAgICAgICBpKys7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogVVNFX0lOSV9DUkVEX0ZXRCAq LwotCi0gICAgICAgICAgICBpZiAoIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSAh PSBUTl9OR19SRiAmJgotICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNS WVBUSU9OKSAhPSBUTl9OR19SRiAmJgotICAgICAgICAgICAgICAgICAodG5fYXV0aF9ob3cgPT0g VE5fQVVUSF9IT1dfQU5ZIHx8Ci0gICAgICAgICAgICAgICAgICAgdG5fYXV0aF9ob3cgPT0gVE5f QVVUSF9IT1dfTVVUVUFMKSAgJiYKLSAgICAgICAgICAgICAgICAgKHRuX2F1dGhfZW5jID09IFRO X0FVVEhfRU5DX0FOWSB8fAotICAgICAgICAgICAgICAgICAgIHRuX2F1dGhfZW5jID09IFROX0FV VEhfRU5DX1RFTE9QVCkgKSB7Ci0gICAgICAgICAgICAgICAgc3RyX3JlcXVlc3RbaSsrXSA9IEFV VEhUWVBFX0tFUkJFUk9TX1Y1OwotICAgICAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2ldID0gQVVU SF9DTElFTlRfVE9fU0VSVkVSIHwgQVVUSF9IT1dfTVVUVUFMOwotICAgICAgICAgICAgICAgIHN0 cl9yZXF1ZXN0W2ldIHw9IEFVVEhfRU5DUllQVF9VU0lOR19URUxPUFQ7Ci0KLSAgICAgICAgICAg ICAgICBpZiAoIGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzICkKLSAgICAgICAgICAgICAgICAg ICAgY2tzdHJuY2F0KHRuX21zZywKLSAgICAgICAgICAgICAgIktFUkJFUk9TX1Y1IENMSUVOVF9U T19TRVJWRVJ8TVVUVUFMfEVOQ1JZUFRfVVNJTkdfVEVMT1BUICIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVE5fTVNHX0xFTik7Ci0gICAgICAgICAgICAgICAgaSsrOwotICAgICAg ICAgICAgfQotI2lmZGVmIENLX1NTTAotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0j ZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotCi0gICAgICAgIGlmICggVEVMT1BUX01FX01PREUo VEVMT1BUX0VOQ1JZUFRJT04pICE9IFROX05HX01VICYmCi0gICAgICAgICAgICAgVEVMT1BUX1Vf TU9ERShURUxPUFRfRU5DUllQVElPTikgIT0gVE5fTkdfTVUgJiYKLSAgICAgICAgICAgICAodG5f YXV0aF9lbmMgPT0gVE5fQVVUSF9FTkNfQU5ZIHx8Ci0gICAgICAgICAgICAgICB0bl9hdXRoX2Vu YyA9PSBUTl9BVVRIX0VOQ19OT05FKQotI2lmZGVmIENLX1NTTAotICAgICAgICAgICAgICYmICEo Y2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpICYmCi0gICAgICAgICAgICAgICAgICAgKHRsc19hY3Rp dmVfZmxhZyB8fCBzc2xfYWN0aXZlX2ZsYWcpICYmCi0gICAgICAgICAgICAgICAgICAgdGxzX2lz X2Fub24oMCkpCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgICAgICAgKQotICAgICAgICB7 Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICAgICAgLyogQ2FuJ3QgcGVyZm9ybSBtdXR1 YWwgYXV0aGVudGljYXRpb24gd2l0aG91dCBlbmNyeXB0aW9uICovCi0gICAgICAgICAgICBpZiAo IHRuX2F1dGhfaG93ID09IFROX0FVVEhfSE9XX0FOWSB8fAotICAgICAgICAgICAgICAgICB0bl9h dXRoX2hvdyA9PSBUTl9BVVRIX0hPV19NVVRVQUwgKSB7Ci0gICAgICAgICAgICAgICAgc3RyX3Jl cXVlc3RbaSsrXSA9IEFVVEhUWVBFX0tFUkJFUk9TX1Y1OwotICAgICAgICAgICAgICAgIHN0cl9y ZXF1ZXN0W2ldID0gQVVUSF9DTElFTlRfVE9fU0VSVkVSIHwgQVVUSF9IT1dfTVVUVUFMOwotICAg ICAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2ldIHw9IEFVVEhfRU5DUllQVF9PRkY7Ci0KLSAgICAg ICAgICAgICAgICBpZiAoIGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzICkKLSAgICAgICAgICAg ICAgICAgICAgY2tzdHJuY2F0KHRuX21zZywiS0VSQkVST1NfVjUgQ0xJRU5UX1RPX1NFUlZFUnxN VVRVQUwgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTl9NU0dfTEVOKTsKLSAg ICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElP TiAqLwotICAgICAgICAgICAgaWYgKCB0bl9hdXRoX2hvdyA9PSBUTl9BVVRIX0hPV19BTlkgfHwK LSAgICAgICAgICAgICAgICAgdG5fYXV0aF9ob3cgPT0gVE5fQVVUSF9IT1dfT05FX1dBWSApIHsK LSAgICAgICAgICAgICAgICBzdHJfcmVxdWVzdFtpKytdID0gQVVUSFRZUEVfS0VSQkVST1NfVjU7 Ci0gICAgICAgICAgICAgICAgc3RyX3JlcXVlc3RbaV0gPSBBVVRIX0NMSUVOVF9UT19TRVJWRVIg fCBBVVRIX0hPV19PTkVfV0FZOwotICAgICAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2ldIHw9IEFV VEhfRU5DUllQVF9PRkY7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIGRlYmxvZyB8fCB0bl9kZWIg fHwgZGVic2VzICkKLSAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZywiS0VSQkVS T1NfVjUgQ0xJRU5UX1RPX1NFUlZFUnxPTkVfV0FZICIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVE5fTVNHX0xFTik7Ci0gICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAg fQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybihpKTsKLX0KLSNlbmRpZiAvKiBLUkI1ICov Ci0jaWZkZWYgS1JCNAotc3RhdGljIGludAotY2tfdG5fYXV0aF9yZXF1ZXN0X2tyYjQoaW50IGkp Ci17Ci0gICAgaWYgKGNrX2tyYjRfaXNfaW5zdGFsbGVkX2FzX3NlcnZlcigpKSB7Ci0jaWZkZWYg Q0tfRU5DUllQVElPTgotICAgICAgICBpZiAoVEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJ T04pICE9IFROX05HX1JGICYmCi0gICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5D UllQVElPTikgIT0gVE5fTkdfUkYgJiYKLSAgICAgICAgICAgICAodG5fYXV0aF9ob3cgPT0gVE5f QVVUSF9IT1dfQU5ZIHx8Ci0gICAgICAgICAgICAgICB0bl9hdXRoX2hvdyA9PSBUTl9BVVRIX0hP V19NVVRVQUwpICAmJgotICAgICAgICAgICAgICh0bl9hdXRoX2VuYyA9PSBUTl9BVVRIX0VOQ19B TlkgfHwKLSAgICAgICAgICAgICAgIHRuX2F1dGhfZW5jID09IFROX0FVVEhfRU5DX1RFTE9QVCkg KQotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJfcmVxdWVzdFtpKytdID0gQVVUSFRZUEVfS0VS QkVST1NfVjQ7Ci0gICAgICAgICAgICBzdHJfcmVxdWVzdFtpXSA9IEFVVEhfQ0xJRU5UX1RPX1NF UlZFUiB8IEFVVEhfSE9XX01VVFVBTDsKLSAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2ldIHw9IEFV VEhfRU5DUllQVF9VU0lOR19URUxPUFQ7Ci0KLSAgICAgICAgICAgIGlmICggZGVibG9nIHx8IHRu X2RlYiB8fCBkZWJzZXMgKQotICAgICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLCJLRVJCRVJP U19WNCBDTElFTlRfVE9fU0VSVkVSfE1VVFVBTHxFTkNSWVBUICIsCi0gICAgICAgICAgICAgICAg ICAgICAgICBUTl9NU0dfTEVOKTsKLSAgICAgICAgICAgIGkrKzsKLSAgICAgICAgfQotI2VuZGlm IC8qIENLX0VOQ1JZUFRJT04gKi8KLQotICAgICAgICBpZiAoVEVMT1BUX01FX01PREUoVEVMT1BU X0VOQ1JZUFRJT04pICE9IFROX05HX01VICYmCi0gICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShU RUxPUFRfRU5DUllQVElPTikgIT0gVE5fTkdfTVUgJiYKLSAgICAgICAgICAgICAodG5fYXV0aF9l bmMgPT0gVE5fQVVUSF9FTkNfQU5ZIHx8Ci0gICAgICAgICAgICAgICB0bl9hdXRoX2VuYyA9PSBU Tl9BVVRIX0VOQ19OT05FKSApCi0gICAgICAgIHsKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAg ICAgICAgICAvKiBDYW4ndCBwZXJmb3JtIG11dHVhbCBhdXRoZW50aWNhdGlvbiB3aXRob3V0IGVu Y3J5cHRpb24gKi8KLSAgICAgICAgICAgIGlmICggdG5fYXV0aF9ob3cgPT0gVE5fQVVUSF9IT1df QU5ZIHx8Ci0gICAgICAgICAgICAgICAgIHRuX2F1dGhfaG93ID09IFROX0FVVEhfSE9XX01VVFVB TCApIHsKLSAgICAgICAgICAgICAgICBzdHJfcmVxdWVzdFtpKytdID0gQVVUSFRZUEVfS0VSQkVS T1NfVjQ7Ci0gICAgICAgICAgICAgICAgc3RyX3JlcXVlc3RbaV0gPSBBVVRIX0NMSUVOVF9UT19T RVJWRVIgfCBBVVRIX0hPV19NVVRVQUw7Ci0gICAgICAgICAgICAgICAgc3RyX3JlcXVlc3RbaV0g fD0gQVVUSF9FTkNSWVBUX09GRjsKLQotICAgICAgICAgICAgICAgIGlmICggZGVibG9nIHx8IHRu X2RlYiB8fCBkZWJzZXMgKQotICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLCJL RVJCRVJPU19WNCBDTElFTlRfVE9fU0VSVkVSfE1VVFVBTCAiLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFROX01TR19MRU4pOwotICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAg ICAgIH0KLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAgICAgICAgICBpZiAoIHRuX2F1 dGhfaG93ID09IFROX0FVVEhfSE9XX0FOWSB8fAotICAgICAgICAgICAgICAgICB0bl9hdXRoX2hv dyA9PSBUTl9BVVRIX0hPV19PTkVfV0FZICkgewotICAgICAgICAgICAgICAgIHN0cl9yZXF1ZXN0 W2krK10gPSBBVVRIVFlQRV9LRVJCRVJPU19WNDsKLSAgICAgICAgICAgICAgICBzdHJfcmVxdWVz dFtpXSA9IEFVVEhfQ0xJRU5UX1RPX1NFUlZFUiB8IEFVVEhfSE9XX09ORV9XQVk7Ci0gICAgICAg ICAgICAgICAgc3RyX3JlcXVlc3RbaV0gfD0gQVVUSF9FTkNSWVBUX09GRjsKLQotICAgICAgICAg ICAgICAgIGlmICggZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMgKQotICAgICAgICAgICAgICAg ICAgICBja3N0cm5jYXQodG5fbXNnLCJLRVJCRVJPU19WNCBDTElFTlRfVE9fU0VSVkVSfE9ORV9X QVkgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTl9NU0dfTEVOKTsKLSAgICAg ICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy ZXR1cm4oaSk7Ci19Ci0jZW5kaWYgLyogS1JCNCAqLwotCi0jaWZkZWYgQ0tfU1JQCi1zdGF0aWMg aW50Ci1ja190bl9hdXRoX3JlcXVlc3Rfc3JwKGludCBpKQotewotICAgIGlmIChja19zcnBfaXNf aW5zdGFsbGVkX2FzX3NlcnZlcigpKSB7Ci0jaWZuZGVmIFBSRV9TUlBfMV80XzUKLSAgICAgICAg LyogRG9udCcgZG8gdGhpcyB5ZXQuICBTUlAgd2hlbiBpdCB1c2VzIHRoZSBFTkNSWVBUX1VTSU5H X1RFTE9QVCAgICovCi0gICAgICAgIC8qIGZsYWcgaXQgbXVzdCBwZXJmb3JtIGEgY2hlY2tzdW0g b2YgdGhlIGF1dGgtdHlwZS1wYWlyIGJ1dCB0aGVyZSAqLwotICAgICAgICAvKiBpcyBubyBtZWNo YW5zaW0gdG8gZG8gdGhhdCB5ZXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8K LSNpZmRlZiBDS19TU0wKLSAgICAgICAgaWYgKCBja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkgJiYK LSAgICAgICAgICAgICAodGxzX2FjdGl2ZV9mbGFnIHx8IHNzbF9hY3RpdmVfZmxhZykgJiYKLSAg ICAgICAgICAgICBzc2xfZmluaXNoZWRfbWVzc2FnZXMgJiYKLSAgICAgICAgICAgICAgICAgKHRu X2F1dGhfaG93ID09IFROX0FVVEhfSE9XX0FOWSB8fAotICAgICAgICAgICAgICAgICAgIHRuX2F1 dGhfaG93ID09IFROX0FVVEhfSE9XX09ORV9XQVkpICAmJgotICAgICAgICAgICAgICAgICAodG5f YXV0aF9lbmMgPT0gVE5fQVVUSF9FTkNfQU5ZIHx8Ci0gICAgICAgICAgICAgICAgICAgdG5fYXV0 aF9lbmMgPT0gVE5fQVVUSF9FTkNfVEVMT1BUKSkKLSAgICAgICAgewotICAgICAgICAgICAgc3Ry X3JlcXVlc3RbaSsrXSA9IEFVVEhUWVBFX1NSUDsKLSAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2ld ID0gQVVUSF9DTElFTlRfVE9fU0VSVkVSIHwgQVVUSF9IT1dfT05FX1dBWTsKLSAgICAgICAgICAg IHN0cl9yZXF1ZXN0W2ldIHw9IEFVVEhfRU5DUllQVF9TVEFSVF9UTFM7Ci0KLSAgICAgICAgICAg IGlmICggZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMgKQotICAgICAgICAgICAgICAgIGNrc3Ry bmNhdCh0bl9tc2csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiU1JQIENMSUVOVF9UT19T RVJWRVJ8T05FX1dBWXxFTkNSWVBUX1NUQVJUX1RMUyAiLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgVE5fTVNHX0xFTik7Ci0gICAgICAgICAgICBpKys7Ci0gICAgICAgIH0KLSNpZmRlZiBD S19FTkNSWVBUSU9OCi0gICAgICAgIGVsc2UgewotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8K LSNlbmRpZiAvKiBDS19TU0wgKi8KLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAgICAgICBp ZiAoVEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pICE9IFROX05HX1JGICYmCi0gICAg ICAgICAgICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pICE9IFROX05HX1JG ICYmCi0gICAgICAgICAgICAgICAgICh0bl9hdXRoX2hvdyA9PSBUTl9BVVRIX0hPV19BTlkgfHwK LSAgICAgICAgICAgICAgICAgICB0bl9hdXRoX2hvdyA9PSBUTl9BVVRIX0hPV19PTkVfV0FZKSAg JiYKLSAgICAgICAgICAgICAgICAgKHRuX2F1dGhfZW5jID09IFROX0FVVEhfRU5DX0FOWSB8fAot ICAgICAgICAgICAgICAgICAgIHRuX2F1dGhfZW5jID09IFROX0FVVEhfRU5DX1RFTE9QVCkKLSAg ICAgICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAgICAgc3RyX3JlcXVlc3RbaSsrXSA9IEFV VEhUWVBFX1NSUDsKLSAgICAgICAgICAgICAgICBzdHJfcmVxdWVzdFtpXSA9IEFVVEhfQ0xJRU5U X1RPX1NFUlZFUiB8IEFVVEhfSE9XX09ORV9XQVk7Ci0gICAgICAgICAgICAgICAgc3RyX3JlcXVl c3RbaV0gfD0gQVVUSF9FTkNSWVBUX1VTSU5HX1RFTE9QVDsKLQotICAgICAgICAgICAgICAgIGlm ICggZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMgKQotICAgICAgICAgICAgICAgICAgICBja3N0 cm5jYXQodG5fbXNnLAotICAgICAgICAgICAgICAgICAgICAiU1JQIENMSUVOVF9UT19TRVJWRVJ8 T05FX1dBWXxFTkNSWVBUX1VTSU5HX1RFTE9QVCAiLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFROX01TR19MRU4pOwotICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgIH0K LSNpZmRlZiBDS19TU0wKLSAgICAgICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotI2VuZGlmIC8q IENLX0VOQ1JZUFRJT04gKi8KLSNlbmRpZiAvKiBQUkVfU1JQXzFfNF81ICovCi0gICAgICAgIGlm IChURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgIT0gVE5fTkdfTVUgJiYKLSAgICAg ICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSAhPSBUTl9OR19NVSAmJgot ICAgICAgICAgICAgICh0bl9hdXRoX2hvdyA9PSBUTl9BVVRIX0hPV19BTlkgfHwKLSAgICAgICAg ICAgICAgIHRuX2F1dGhfaG93ID09IFROX0FVVEhfSE9XX01VVFVBTCkgICYmCi0gICAgICAgICAg ICAgKHRuX2F1dGhfZW5jID09IFROX0FVVEhfRU5DX0FOWSB8fAotICAgICAgICAgICAgICAgdG5f YXV0aF9lbmMgPT0gVE5fQVVUSF9FTkNfTk9ORSkKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAg ICAmJiAhKGNrX3NzbGVheV9pc19pbnN0YWxsZWQoKSAmJgotICAgICAgICAgICAgICAgICAgICh0 bHNfYWN0aXZlX2ZsYWcgfHwgc3NsX2FjdGl2ZV9mbGFnKSAmJgotICAgICAgICAgICAgICAgICAg IHRsc19pc19hbm9uKDApKQotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICAgICAgICkKLSAg ICAgICAgewotICAgICAgICAgICAgc3RyX3JlcXVlc3RbaSsrXSA9IEFVVEhUWVBFX1NSUDsKLSAg ICAgICAgICAgIHN0cl9yZXF1ZXN0W2ldID0gQVVUSF9DTElFTlRfVE9fU0VSVkVSIHwgQVVUSF9I T1dfT05FX1dBWTsKLSAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2ldIHw9IEFVVEhfRU5DUllQVF9P RkY7Ci0KLSAgICAgICAgICAgIGlmICggZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMgKQotICAg ICAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csIlNSUCBDTElFTlRfVE9fU0VSVkVSfE9ORV9X QVkgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFROX01TR19MRU4pOwotICAgICAgICAg ICAgaSsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuKGkpOwotfQotI2VuZGlmIC8q IENLX1NSUCAqLwotCi0jaWZkZWYgQ0tfU1NMCi1zdGF0aWMgaW50Ci1ja190bl9hdXRoX3JlcXVl c3Rfc3NsKGludCBpKQotewotICAgIGlmIChja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkKLSAgICAg ICAgICYmICF0bHNfYWN0aXZlX2ZsYWcgJiYgIXNzbF9hY3RpdmVfZmxhZyAmJiBzc2xfaW5pdGlh bGl6ZWQKLSAgICAgICAgICkgewotICAgICAgICBpZiAoVEVMT1BUX01FX01PREUoVEVMT1BUX0VO Q1JZUFRJT04pICE9IFROX05HX01VICYmCi0gICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxP UFRfRU5DUllQVElPTikgIT0gVE5fTkdfTVUgJiYKLSAgICAgICAgICAgICAodG5fYXV0aF9ob3cg PT0gVE5fQVVUSF9IT1dfQU5ZIHx8Ci0gICAgICAgICAgICAgICB0bl9hdXRoX2hvdyA9PSBUTl9B VVRIX0hPV19PTkVfV0FZKSAgJiYKLSAgICAgICAgICAgICAodG5fYXV0aF9lbmMgPT0gVE5fQVVU SF9FTkNfQU5ZIHx8Ci0gICAgICAgICAgICAgICB0bl9hdXRoX2VuYyA9PSBUTl9BVVRIX0VOQ19O T05FKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2krK10gPSBBVVRIVFlQ RV9TU0w7Ci0gICAgICAgICAgICBzdHJfcmVxdWVzdFtpXSA9IEFVVEhfQ0xJRU5UX1RPX1NFUlZF UiB8IEFVVEhfSE9XX09ORV9XQVk7Ci0gICAgICAgICAgICBzdHJfcmVxdWVzdFtpXSB8PSBBVVRI X0VOQ1JZUFRfT0ZGOwotICAgICAgICAgICAgaWYgKCBkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNl cyApCi0gICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZywiU1NMIENMSUVOVF9UT19TRVJW RVJ8T05FX1dBWSAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgVE5fTVNHX0xFTik7Ci0g ICAgICAgICAgICBpKys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4oaSk7Ci19Ci0j ZW5kaWYgLyogQ0tfU1NMICovCi0jaWZkZWYgTlRMTQotc3RhdGljIGludAotY2tfdG5fYXV0aF9y ZXF1ZXN0X250bG0oaW50IGkpCi17Ci0gICAgLyogTWljcm9zb2Z0J3MgVGVsbmV0IGNsaWVudCB3 b24ndCBwZXJmb3JtIGF1dGhlbnRpY2F0aW9uIGlmICovCi0gICAgLyogTlRMTSBpcyBub3QgZmly c3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgaWYgKCBj a19udGxtX2lzX3ZhbGlkKDEpICkgewotICAgICAgICBpZiAoVEVMT1BUX01FX01PREUoVEVMT1BU X0VOQ1JZUFRJT04pICE9IFROX05HX01VICYmCi0gICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShU RUxPUFRfRU5DUllQVElPTikgIT0gVE5fTkdfTVUgJiYKLSAgICAgICAgICAgICAodG5fYXV0aF9o b3cgPT0gVE5fQVVUSF9IT1dfQU5ZIHx8Ci0gICAgICAgICAgICAgICB0bl9hdXRoX2hvdyA9PSBU Tl9BVVRIX0hPV19PTkVfV0FZKSAgJiYKLSAgICAgICAgICAgICAodG5fYXV0aF9lbmMgPT0gVE5f QVVUSF9FTkNfQU5ZIHx8Ci0gICAgICAgICAgICAgICB0bl9hdXRoX2VuYyA9PSBUTl9BVVRIX0VO Q19OT05FKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2krK10gPSBBVVRI VFlQRV9OVExNOwotICAgICAgICAgICAgc3RyX3JlcXVlc3RbaV0gPSBBVVRIX0NMSUVOVF9UT19T RVJWRVIgfCBBVVRIX0hPV19PTkVfV0FZOwotICAgICAgICAgICAgc3RyX3JlcXVlc3RbaV0gfD0g QVVUSF9FTkNSWVBUX09GRjsKLSAgICAgICAgICAgIGlmICggZGVibG9nIHx8IHRuX2RlYiB8fCBk ZWJzZXMgKQotICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csIk5UTE0gQ0xJRU5UX1RP X1NFUlZFUnxPTkVfV0FZICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBUTl9NU0dfTEVO KTsKLSAgICAgICAgICAgIGkrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybihpKTsK LX0KLSNlbmRpZiAvKiBOVExNICovCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotY2tfdG5fYXV0aF9y ZXF1ZXN0KHZvaWQpCi0jZWxzZQotY2tfdG5fYXV0aF9yZXF1ZXN0KCkKLSNlbmRpZgotewotICAg IGludCBpID0gNCwgcmMgPSAtMTsKLQotI2lmZGVmIENLX1NTTAotICAgIGlmIChURUxPUFRfU0Io VEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKLSAgICAgICAgcmV0dXJu KDApOwotICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotICAgIGlmICggZGVibG9nIHx8IHRu X2RlYiB8fCBkZWJzZXMgKQotICAgICAgICBzdHJjcHkodG5fbXNnLCJURUxORVQgU0VOVCBTQiBB VVRIRU5USUNBVElPTiBTRU5EICIpOwotCi0gICAgLyogQ3JlYXRlIGEgbGlzdCBvZiBhY2NlcHRh YmxlIEF1dGhlbnRpY2F0aW9uIHR5cGVzIHRvIHNlbmQgdG8gKi8KLSAgICAvKiB0aGUgY2xpZW50 IGFuZCBsZXQgaXQgY2hvb3NlIGZpbmQgb25lIHRoYXQgd2Ugc3VwcG9ydCAgICAgICAqLwotCi0g ICAgLyogRm9yIHRob3NlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgdGhhdCBzdXBwb3J0IEVuY3J5 cHRpb24gb3IgKi8KLSAgICAvKiBDcmVkZW50aWFscyBGb3J3YXJkaW5nIHdlIG11c3Qgc2VuZCBh bGwgb2YgdGhlIGFwcHJvcHJpYXRlICAqLwotICAgIC8qIGNvbWJpbmF0aW9ucyBiYXNlZCB1cG9u IHRoZSBzdGF0ZSBvZiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogVEVMT1BUX3hf TU9ERShURUxPUFRfRU5DUllQVElPTikgYW5kIGZvcndhcmRfZmxhZy4gICAgICAgICAgKi8KLQot ICAgIGlmICggYXV0aF90eXBlX3VzZXJbMF0gPT0gQVVUSFRZUEVfQVVUTyApIHsKLSNpZmRlZiBH U1NBUElfSzUKLSAgICAgICAgaSA9IGNrX3RuX2F1dGhfcmVxdWVzdF9nc3NrcmI1KGkpOwotI2Vu ZGlmIC8qIEdTU0FQSV9LNSAqLwotI2lmZGVmIEtSQjUKLSAgICAgICAgaSA9IGNrX3RuX2F1dGhf cmVxdWVzdF9rcmI1KGkpOwotI2VuZGlmIC8qIEtSQjUgKi8KLSNpZmRlZiBLUkI0Ci0gICAgICAg IGkgPSBja190bl9hdXRoX3JlcXVlc3Rfa3JiNChpKTsKLSNlbmRpZiAvKiBLUkI0ICovCi0jaWZk ZWYgQ0tfU1JQCi0gICAgICAgIGkgPSBja190bl9hdXRoX3JlcXVlc3Rfc3JwKGkpOwotI2VuZGlm IC8qIFNSUCAqLwotI2lmZGVmIENLX1NTTAotICAgICAgICBpID0gY2tfdG5fYXV0aF9yZXF1ZXN0 X3NzbChpKTsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNpZmRlZiBOVExNCi0gICAgICAgIGkgPSBj a190bl9hdXRoX3JlcXVlc3RfbnRsbShpKTsKLSNlbmRpZiAvKiBOVExNICovCi0gICAgfSBlbHNl IHsKLSAgICAgICAgaW50IGo7Ci0gICAgICAgIGZvciAoIGo9MDsKLSAgICAgICAgICAgICAgajxB VVRIVFlQTFNUU1ogJiYgYXV0aF90eXBlX3VzZXJbal0gIT0gQVVUSFRZUEVfTlVMTDsKLSAgICAg ICAgICAgICAgaisrKSB7Ci0jaWZkZWYgTlRMTQotICAgICAgICAgICAgaWYgKGF1dGhfdHlwZV91 c2VyW2pdID09IEFVVEhUWVBFX05UTE0pCi0gICAgICAgICAgICAgICAgaSA9IGNrX3RuX2F1dGhf cmVxdWVzdF9udGxtKGkpOwotI2VuZGlmIC8qIE5UTE0gKi8KLSNpZmRlZiBDS19TU0wKLSAgICAg ICAgICAgIGlmICggYXV0aF90eXBlX3VzZXJbal0gPT0gQVVUSFRZUEVfU1NMICkKLSAgICAgICAg ICAgICAgICBpID0gY2tfdG5fYXV0aF9yZXF1ZXN0X3NzbChpKTsKLSNlbmRpZiAvKiBDS19TU0wg Ki8KLSNpZmRlZiBDS19TUlAKLSAgICAgICAgICAgIGlmICggYXV0aF90eXBlX3VzZXJbal0gPT0g QVVUSFRZUEVfU1JQICkKLSAgICAgICAgICAgICAgICBpID0gY2tfdG5fYXV0aF9yZXF1ZXN0X3Ny cChpKTsKLSNlbmRpZiAvKiBTUlAgKi8KLSNpZmRlZiBHU1NBUElfSzUKLSAgICAgICAgICAgIGlm ICggYXV0aF90eXBlX3VzZXJbal0gPT0gQVVUSFRZUEVfR1NTQVBJX0tSQjUgKQotICAgICAgICAg ICAgICAgIGkgPSBja190bl9hdXRoX3JlcXVlc3RfZ3Nza3JiNShpKTsKLSNlbmRpZiAvKiBHU1NB UElfSzUgKi8KLSNpZmRlZiBLUkI1Ci0gICAgICAgICAgICBpZiAoIGF1dGhfdHlwZV91c2VyW2pd ID09IEFVVEhUWVBFX0tFUkJFUk9TX1Y1ICkKLSAgICAgICAgICAgICAgICBpID0gY2tfdG5fYXV0 aF9yZXF1ZXN0X2tyYjUoaSk7Ci0jZW5kaWYgLyogS1JCNSAqLwotI2lmZGVmIEtSQjQKLSAgICAg ICAgICAgIGlmICggYXV0aF90eXBlX3VzZXJbal0gPT0gQVVUSFRZUEVfS0VSQkVST1NfVjQgKQot ICAgICAgICAgICAgICAgIGkgPSBja190bl9hdXRoX3JlcXVlc3Rfa3JiNChpKTsKLSNlbmRpZiAv KiBLUkI0ICovCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdHJfcmVxdWVzdFtpKytdID0gSUFD OwotICAgIHN0cl9yZXF1ZXN0W2krK10gPSBTRTsKLSAgICBpZiAoIGRlYmxvZyB8fCB0bl9kZWIg fHwgZGVic2VzICkgewotICAgICAgICBja3N0cm5jYXQodG5fbXNnLCJJQUMgU0UiLFROX01TR19M RU4pOwotICAgICAgICBkZWJ1ZyhGMTAwLHRuX21zZywiIiwwKTsKLSAgICAgICAgaWYgKHRuX2Rl YiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZyk7Ci0gICAgfQotCi0gICAgLyogU2VuZCBkYXRh ICovCi0jaWZkZWYgT1MyCi0gICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9X QUlUICk7Ci0jZW5kaWYKLSAgICByYyA9IHR0b2woKENIQVIgKilzdHJfcmVxdWVzdCwgaSk7Ci0j aWZkZWYgT1MyCi0gICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7Ci0jZW5kaWYKLSAgICBpZiAoIHJj ID09IGkgKQotICAgICAgICByZXR1cm4oMCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4oLTEp OwotfQotCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotVk9JRAotY2tfdG5fZW5jX3N0YXJ0KCkKLXsK LSAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfRU5DUllQVElPTikgJiYgIVRFTE9QVF9VKFRFTE9Q VF9FTkNSWVBUSU9OKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghVEVMT1BUX1NCKFRFTE9Q VF9FTkNSWVBUSU9OKS5lbmNyeXB0LnN0b3AgJiYKLSAgICAgICAgICghZW5jcnlwdF9pc19kZWNy eXB0aW5nKCkgfHwgIWVuY3J5cHRfaXNfZW5jcnlwdGluZygpKSkgewotICAgICAgICBkZWJ1ZyhG MTEwLCJja190bl9lbmNfc3RhcnQiLCJub3RoaW5nIHRvIGRvIiwwKTsKLSAgICAgICAgcmV0dXJu OwotICAgIH0KLSAgICBURUxPUFRfU0IoVEVMT1BUX0VOQ1JZUFRJT04pLmVuY3J5cHQuc3RvcCA9 IDA7Ci0gICAgaWYgKFRFTE9QVF9NRShURUxPUFRfRU5DUllQVElPTikgJiYgIWVuY3J5cHRfaXNf ZW5jcnlwdGluZygpKSB7Ci0gICAgICAgIGRlYnVnKEYxMTAsImNrX3RuX2VuY19zdGFydCIsImVu Y3J5cHRfcmVxdWVzdF9zdGFydCIsMCk7Ci0gICAgICAgIGVuY3J5cHRfcmVxdWVzdF9zdGFydCgp OwotICAgIH0KLSAgICBpZiAoVEVMT1BUX1UoVEVMT1BUX0VOQ1JZUFRJT04pICYmICFlbmNyeXB0 X2lzX2RlY3J5cHRpbmcoKSkgewotICAgICAgICBkZWJ1ZyhGMTEwLCJja190bl9lbmNfc3RhcnQi LCJlbmNyeXB0X3NlbmRfcmVxdWVzdF9zdGFydCIsMCk7Ci0gICAgICAgIGVuY3J5cHRfc2VuZF9y ZXF1ZXN0X3N0YXJ0KCk7Ci0gICAgfQotICAgIHRuX3dhaXQoImVuY3J5cHQgc3RhcnQiKTsKLSAg ICB0bl9wdXNoKCk7Ci19Ci0KLVZPSUQKLWNrX3RuX2VuY19zdG9wKCkKLXsKLSAgICBpZiAoIVRF TE9QVF9NRShURUxPUFRfRU5DUllQVElPTikgJiYgIVRFTE9QVF9VKFRFTE9QVF9FTkNSWVBUSU9O KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX0VOQ1JZUFRJT04p LmVuY3J5cHQuc3RvcCB8fAotICAgICAgICAgIShlbmNyeXB0X2lzX2RlY3J5cHRpbmcoKSB8fCBl bmNyeXB0X2lzX2VuY3J5cHRpbmcoKSkpIHsKLSAgICAgICAgZGVidWcoRjExMCwiY2tfdG5fZW5j X3N0b3AiLCJub3RoaW5nIHRvIGRvIiwwKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgVEVM T1BUX1NCKFRFTE9QVF9FTkNSWVBUSU9OKS5lbmNyeXB0LnN0b3AgPSAxOwotICAgIGlmIChURUxP UFRfVShURUxPUFRfRU5DUllQVElPTikgJiYgZW5jcnlwdF9pc19kZWNyeXB0aW5nKCkpIHsKLSAg ICAgICAgZGVidWcoRjExMCwiY2tfdG5fZW5jX3N0b3AiLCJlbmNyeXB0X3NlbmRfcmVxdWVzdF9l bmQiLDApOwotICAgICAgICBlbmNyeXB0X3NlbmRfcmVxdWVzdF9lbmQoKTsKLSAgICB9Ci0gICAg aWYgKFRFTE9QVF9NRShURUxPUFRfRU5DUllQVElPTikgJiYgZW5jcnlwdF9pc19lbmNyeXB0aW5n KCkpIHsKLSAgICAgICAgZGVidWcoRjExMCwiY2tfdG5fZW5jX3N0b3AiLCJlbmNyeXB0X3NlbmRf ZW5kIiwwKTsKLSAgICAgICAgZW5jcnlwdF9zZW5kX2VuZCgpOwotICAgIH0KLSAgICB0bl93YWl0 KCJlbmNyeXB0IHN0b3AiKTsKLSAgICB0bl9wdXNoKCk7Ci19Ci0jZW5kaWYgLyogQ0tfRU5DUllQ VElPTiAqLwotCi0vKiAgQyBLIF8gSyBSIEIgXyBUIE4gXyBTIEIgXyBBIFUgVCBICi0gKiAgQW4g aW50ZXJmYWNlIGJldHdlZW4gdGhlIEMtS2VybWl0IFRlbG5ldCBDb21tYW5kIFBhcnNlciBhbmQg dGhlIEF1dGhlbnQtCi0gKiAgaWNhdGlvbiBvcHRpb24gcGFyc2VyIGltcGxlbWVudGVkIGluIHRo ZSBLZXJiZXJvcyBUZWxuZXQgY2xpZW50LgotICoKLSAqICBzYiAgIC0gdGhlIHN1Ym5lZ290aWF0 aW9uIGFzIGNhbGN1bGF0ZWQgaW4gY2tjbmV0LmMKLSAqICBsZW4gIC0gdGhlIGxlbmd0aCBvZiB0 aGUgYnVmZmVyCi0gKgotICogIFJldHVybnM6IDAgb24gc3VjY2VzcyBhbmQgLTEgb24gZmFpbHVy ZQotICovCi0KLWludAotI2lmZGVmIENLX0FOU0lDCi1ja190bl9zYl9hdXRoKGNoYXIgKiBzYiwg aW50IGxlbikKLSNlbHNlIC8qIENLX0FOU0lDICovCi1ja190bl9zYl9hdXRoKHNiLGxlbikgY2hh ciAqIHNiOyBpbnQgbGVuOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgLyogYXV0aF9w YXJzZSgpIGFzc3VtZXMgdGhhdCBzYiBzdGFydHMgYXQgcG9zIDEgbm90IDAgYXMgaW4gY2tjbmV0 LmMgKi8KLSAgICAvKiBhbmQgaXQgd2FudHMgdGhlIGxlbmd0aCB0byBleGNsdWRlIHRoZSBJQUMg U0UgYnl0ZXMgICAgICAgICAgICAgICAqLwotICAgIENIQVIgKiBidWY7Ci0gICAgaW50IHJjID0g LTE7Ci0KLSAgICBidWYgPSBtYWxsb2MobGVuLTEpOwotICAgIGlmICggIWJ1ZiApIHJldHVybigt MSk7Ci0KLSAgICBidWZbMF0gPSBTQjsKLSAgICBtZW1jcHkoICZidWZbMV0sIHNiLCBsZW4tMiAp OwotICAgIHJjID0gYXV0aF9wYXJzZShidWYsbGVuLTEpOwotICAgIGZyZWUoYnVmKTsKLSAgICBk ZWJ1ZyhGMTExLCJja190bl9zYl9hdXRoIiwicmMiLHJjKTsKLSAgICBpZiAocmMgPT0gQVVUSF9G QUlMVVJFKSB7Ci0gICAgICAgIGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24gPSBBVVRIVFlQRV9OVUxM OwotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0gICAgICAgIGlwYWRsMjUoKTsKLSNlbmRp ZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0gICAgICAgIHJldHVybigtMSk7Ci0g ICAgfQotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0gICAgaXBhZGwyNSgpOwotI2VuZGlm IC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSAgICByZXR1cm4oMCk7Ci19Ci0KLS8q ICBDIEsgXyBLIFIgQiBfIFQgTiBfIFMgQiBfIEUgTiBDIFIgWSBQIFQKLSAqICBBbiBpbnRlcmZh Y2UgYmV0d2VlbiB0aGUgQy1LZXJtaXQgVGVsbmV0IENvbW1hbmQgUGFyc2VyIGFuZCB0aGUgRW5j cnlwdGlvbgotICogIG9wdGlvbiBwYXJzZXIgaW1wbGVtZW50ZWQgaW4gdGhlIEtlcmJlcm9zIFRl bG5ldCBjbGllbnQuCi0gKgotICogIHNiICAgLSB0aGUgc3VibmVnb3RpYXRpb24gYXMgY2FsY3Vs YXRlZCBpbiBja2NuZXQuYwotICogIGxlbiAgLSB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIKLSAq Ci0gKiAgUmV0dXJuczogQWx3YXlzIHJldHVybnMgMCBmb3Igc3VjY2VzcyBzaW5jZSBlbmNyeXB0 X3BhcnNlIGlzIHZvaWQKLSAqLwotCi0KLWludAotI2lmZGVmIENLX0FOU0lDCi1ja190bl9zYl9l bmNyeXB0KGNoYXIgKiBzYiwgaW50IGxlbikKLSNlbHNlCi1ja190bl9zYl9lbmNyeXB0KHNiLGxl bikgY2hhciAqIHNiOyBpbnQgbGVuOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0gICAgLyog ZW5jcnlwdF9wYXJzZSgpIGFzc3VtZXMgdGhhdCBzYiBzdGFydHMgYXQgcG9zIDEgbm90IDAgYXMg aW4gY2tjbmV0LmMgKi8KLSAgICAvKiBhbmQgaXQgd2FudHMgdGhlIGxlbmd0aCB0byBleGNsdWRl IHRoZSBJQUMgU0UgYnl0ZXMgICAgICAgICAgICAgICAgICAqLwotI2lmZGVmIENLX0VOQ1JZUFRJ T04KLSAgICBjaGFyICogYnVmOwotICAgIGludCByYyA9IC0xOwotCi0gICAgYnVmID0gbWFsbG9j KGxlbi0xKTsKLSAgICBpZiAoICFidWYgKSByZXR1cm4oLTEpOwotCi0gICAgYnVmWzBdID0gU0I7 Ci0gICAgbWVtY3B5KCAmYnVmWzFdLCBzYiwgbGVuLTIgKTsKLSAgICByYyA9IGVuY3J5cHRfcGFy c2UoKENIQVIgKilidWYsbGVuLTEpOwotCi0gICAgaWYgKHJjIDwgMCkgewotICAgICAgICBmcmVl KGJ1Zik7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotCi0gICAgLyogVGhpcyBpcyBhIGhh Y2suICBJdCBkb2VzIG5vdCBiZWxvbmcgaGVyZSBidXQgc2hvdWxkIHJlYWxseSBiZSBpbiAqLwot ICAgIC8qIGVuY3J5cHRfcGFyc2UoKSBidXQgaW4gSzk1IHRoZSBlbmNyeXB0X3BhcnNlKCkgcm91 dGluZSBkb2VzIG5vdCAgKi8KLSAgICAvKiBoYXZlIGFjY2VzcyB0byB0aGUgdGVsb3B0X3N0YXRl cyBhcnJheS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgaWYgKCBidWZbMV0gPT0g RU5DUllQVF9SRVFFTkQgKQotICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0VOQ1JZUFRJT04pLmVu Y3J5cHQuc3RvcCA9IDE7Ci0gICAgZWxzZSBpZiAoIGJ1ZlsxXSA9PSBFTkNSWVBUX1JFUVNUQVJU ICkKLSAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9FTkNSWVBUSU9OKS5lbmNyeXB0LnN0b3AgPSAw OwotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0gICAgaXBhZGwyNSgpOwotI2VuZGlmIC8q IE9TMiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSAgICBmcmVlKGJ1Zik7Ci0jZW5kaWYgLyog RU5DUllQVElPTiAqLwotICAgIHJldHVybigwKTsKLX0KLQotCi0vKiAgQyBLIF8gSyBSIEIgXyBF IE4gQyBSIFkgUCBUIEkgTiBHCi0gKiAgUmV0dXJucyAxIGlmIHdlIGFyZSBlbmNyeXB0aW5nIGFu ZCAwIGlmIHdlIGFyZSBub3QKLSAqLwotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotY2tfdG5fZW5j cnlwdGluZyhWT0lEKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLWNrX3RuX2VuY3J5cHRpbmcoKQot I2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgIGlmICgg Z19rc3RyZWFtID09IE5VTEwgKQotICAgICAgICByZXR1cm4oMCk7Ci0gICAgaWYgKCBnX2tzdHJl YW0tPmVuY3J5cHQgJiYgZW5jcnlwdF9pc19lbmNyeXB0aW5nKCkpIHsKLSAgICAgICAgZGVidWco RjExMSwiY2tfdG5fZW5jcnlwdGluZyIsImVuY3J5cHRpbmciLAotICAgICAgICAgICAgICAgZ19r c3RyZWFtLT5lbmNyeXB0X3R5cGUpOwotICAgICAgICByZXR1cm4oZ19rc3RyZWFtLT5lbmNyeXB0 X3R5cGUpOwotICAgIH0KLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAgZGVidWcoRjEx MCwiY2tfdG5fZW5jcnlwdGluZyIsIm5vdCBlbmNyeXB0aW5nIiwwKTsKLSAgICByZXR1cm4oMCk7 Ci19Ci0KLS8qICBDIEsgXyBLIFIgQiBfIEQgRSBDIFIgWSBQIFQgSSBOIEcKLSAqICBSZXR1cm5z IDEgaWYgd2UgYXJlIGRlY3J5cHRpbmcgYW5kIDAgaWYgd2UgYXJlIG5vdAotICovCi0KLWludAot I2lmZGVmIENLX0FOU0lDCi1ja190bl9kZWNyeXB0aW5nKFZPSUQpCi0jZWxzZQotY2tfdG5fZGVj cnlwdGluZygpCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSNpZmRlZiBDS19FTkNSWVBUSU9O Ci0gICAgaWYgKCBnX2tzdHJlYW0gPT0gTlVMTCApCi0gICAgICAgIHJldHVybigwKTsKLSAgICBp ZiAoIGdfa3N0cmVhbS0+ZGVjcnlwdCAmJiBlbmNyeXB0X2lzX2RlY3J5cHRpbmcoKSkgewotICAg ICAgICBkZWJ1ZyhGMTExLCJja190bl9kZWNyeXB0aW5nIiwiZGVjcnlwdGluZyIsCi0gICAgICAg ICAgICAgICBnX2tzdHJlYW0tPmRlY3J5cHRfdHlwZSk7Ci0gICAgICAgIHJldHVybihnX2tzdHJl YW0tPmRlY3J5cHRfdHlwZSk7Ci0gICAgfQotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSAg ICBkZWJ1ZyhGMTEwLCJja190bl9kZWNyeXB0aW5nIiwibm90IGRlY3J5cHRpbmciLDApOwotICAg IHJldHVybigwKTsKLX0KLQotLyogIEMgSyBfIEsgUiBCIF8gQSBVIFQgSCBFIE4gVCBJIEMgQSBU IEUgRAotICogIFJldHVybnMgdGhlIGF1dGhlbnRpY2F0aW9uIHR5cGU6IEFVVEhUWVBFX05VTEws IEFVVEhUWVBFX0tFUkJFUk9TNCwKLSAqICBvciBBVVRIVFlQRV9LRVJCRVJPUzUsIEFVVEhUWVBF X1NSUCwgLi4uIChzZWUgY2tjdGVsLmgpCi0gKi8KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWNr X3RuX2F1dGhlbnRpY2F0ZWQoVk9JRCkKLSNlbHNlCi1ja190bl9hdXRoZW50aWNhdGVkKCkKLSNl bmRpZgotewotICAgIHJldHVybihhdXRoZW50aWNhdGlvbl92ZXJzaW9uKTsKLX0KLQotLyogIEMg SyBfIEsgUiBCIF8gRSBOIEMgUiBZIFAgVAotICogIGVuY3J5cHRzIG4gY2hhcmFjdGVycyBpbiBz IGlmIHdlIGFyZSBlbmNyeXB0aW5nCi0gKi8KLQotVk9JRAotI2lmZGVmIENLX0FOU0lDCi1ja190 bl9lbmNyeXB0KCBjaGFyICogcywgaW50IG4gKQotI2Vsc2UKLWNrX3RuX2VuY3J5cHQoIHMsbiAp IGNoYXIgKiBzOyBpbnQgbjsKLSNlbmRpZgotewotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICBz dHJ1Y3Qga3N0cmVhbV9kYXRhX2Jsb2NrIGk7Ci0KLSAgICBpZiAoZ19rc3RyZWFtLT5lbmNyeXB0 ICYmIGVuY3J5cHRfaXNfZW5jcnlwdGluZygpKSB7Ci0jaWZkZWYgREVCVUcKLSAgICAgIGNraGV4 ZHVtcCgiZnJvbSBwbGFpbnRleHQiLCBzLCBuKTsKLSNlbmRpZgotICAgICAgICBpLnB0ciA9IHM7 Ci0gICAgICAgIGkubGVuZ3RoID0gbjsKLSAgICAgICAgZ19rc3RyZWFtLT5lbmNyeXB0KCZpLCBO VUxMKTsKLSNpZmRlZiBERUJVRwotICAgICAgICBja2hleGR1bXAoInRvIGN5cGhlcnRleHQiLCBz LCBuKTsKLSNlbmRpZgotICAgIH0KLSAgICBlbHNlIGRlYnVnKEYxMDEsImNrX3RuX2VuY3J5cHQg bm90IGVuY3J5cHRpbmciLCIiLG4pOwotI2VuZGlmIC8qIEVOQ1JZUFRJT04gKi8KLX0KLQotLyog IEMgSyBfIEsgUiBCIF8gRCBFIEMgUiBZIFAgVAotICogIGRlY3J5cHRzIG4gY2hhcmFjdGVycyBp biBzIGlmIHdlIGFyZSBkZWNyeXB0aW5nCi0gKi8KLQotVk9JRAotI2lmZGVmIENLX0FOU0lDCi1j a190bl9kZWNyeXB0KCBjaGFyICogcywgaW50IG4gKQotI2Vsc2UKLWNrX3RuX2RlY3J5cHQoIHMs biApIGNoYXIgKiBzOyBpbnQgbjsKLSNlbmRpZgotewotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAg ICBzdHJ1Y3Qga3N0cmVhbV9kYXRhX2Jsb2NrIGk7Ci0KLSAgICBpZiAoZ19rc3RyZWFtLT5kZWNy eXB0ICYmIGVuY3J5cHRfaXNfZGVjcnlwdGluZygpKSB7Ci0KLSNpZmRlZiBERUJVRwotICAgICAg ICBja2hleGR1bXAoImZyb20gY3lwaGVydGV4dCIsIHMsIG4pOwotI2VuZGlmCi0KLSAgICAgICAg aS5wdHIgPSBzOwotICAgICAgICBpLmxlbmd0aCA9IG47Ci0gICAgICAgIGdfa3N0cmVhbS0+ZGVj cnlwdCgmaSwgTlVMTCk7Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgY2toZXhkdW1wKCJ0byBwbGFp bnRleHQiLCBzLCBuKTsKLSNlbmRpZgotICAgIH0KLSAgICBlbHNlIGRlYnVnKEYxMDEsImNrX3Ru X2RlY3J5cHQgbm90IGRlY3J5cHRpbmciLCIiLG4pOwotI2VuZGlmIC8qIEVOQ1JZUFRJT04gKi8K LX0KLQotLyogIFMgRSBOIEQgSyA1IEEgVSBUIEggUyBCCi0gKiAgU2VuZCBhIEtlcmJlcm9zIDUg QXV0aGVudGljYXRpb24gU3VibmVnb3RpYXRpb24gdG8gaG9zdCBhbmQKLSAqICBvdXRwdXQgYXBw cm9wcmlhdGUgVGVsbmV0IERlYnVnIG1lc3NhZ2VzCi0gKgotICogIHR5cGUgLSBTdWIgTmVnb3Rp YXRpb24gdHlwZQotICogIGRhdGEgLSBwdHIgdG8gYnVmZmVyIGNvbnRhaW5pbmcgZGF0YQotICog IGxlbiAgLSBsZW4gb2YgYnVmZmVyIGlmIG5vdCBOVUwgdGVybWluYXRlZAotICoKLSAqICByZXR1 cm5zIG51bWJlciBvZiBjaGFyYWN0ZXJzIHNlbnQgb3IgZXJyb3IgdmFsdWUKLSAqLwotCi1zdGF0 aWMgaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLVNlbmRLNUF1dGhTQihpbnQgdHlwZSwgdm9pZCAqZGF0 YSwgaW50IGxlbikKLSNlbHNlCi1TZW5kSzVBdXRoU0IodHlwZSxkYXRhLGxlbikgaW50IHR5cGU7 IHZvaWQgKmRhdGE7IGludCBsZW47Ci0jZW5kaWYKLXsKLSAgICBpbnQgcmM7Ci0gICAgdW5zaWdu ZWQgY2hhciAqcCA9IHN0cl9kYXRhICsgMzsKLSAgICB1bnNpZ25lZCBjaGFyICpjZCA9ICh1bnNp Z25lZCBjaGFyICopZGF0YTsKLSAgICBleHRlcm4gaW50IHNzdGVsbmV0OwotCi0jaWZkZWYgQ0tf U1NMCi0gICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9s bG93cykgewotICAgICAgICBpZiAodHRjaGsoKSA8IDApCi0gICAgICAgICAgcmV0dXJuKDApOwot ICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuKDEpOwotICAgIH0KLSNlbmRpZiAvKiBDS19T U0wgKi8KLQotICAgIGlmICggdHlwZSA8IDAgfHwgdHlwZSA+IDcgKSAgICAgICAgIC8qIENoZWNr IGZvciBpbnZhbGlkIHZhbHVlcyAqLwotICAgICAgICByZXR1cm4oMCk7Ci0KLSAgICBpZiAoIWNk KSB7Ci0gICAgICAgIGNkID0gKHVuc2lnbmVkIGNoYXIgKikiIjsKLSAgICAgICAgbGVuID0gMDsK LSAgICB9Ci0KLSAgICBpZiAobGVuID09IC0xKSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVz ZSBzdHJsZW4oKSBmb3IgbGVuICovCi0gICAgICAgIGxlbiA9IHN0cmxlbigoY2hhciAqKWNkKTsK LQotICAgIC8qIENvbnN0cnVjdCBNZXNzYWdlICovCi0gICAgKnArKyA9IHNzdGVsbmV0ID8gVEVM UVVBTF9SRVBMWSA6IFRFTFFVQUxfSVM7Ci0gICAgKnArKyA9IEFVVEhUWVBFX0tFUkJFUk9TX1Y1 OwotICAgICpwID0gQVVUSF9DTElFTlRfVE9fU0VSVkVSOwotICAgICpwIHw9IGF1dGhfaG93Owot I2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAqcCB8PSBhdXRoX2NyeXB0OwotI2VuZGlmCi0jaWZk ZWYgVVNFX0lOSV9DUkVEX0ZXRAotICAgIGlmIChhdXRoX2Z3ZCkKLSAgICAgICAgKnAgfD0gSU5J X0NSRURfRldEX09OOwotI2VuZGlmIC8qIFVTRV9JTklfQ1JFRF9GV0QgKi8KLSAgICBwKys7Ci0g ICAgKnArKyA9IHR5cGU7Ci0gICAgd2hpbGUgKGxlbi0tID4gMCkgewotICAgICAgICBpZiAoKCpw KysgPSAqY2QrKykgPT0gSUFDKQotICAgICAgICAgICAgKnArKyA9IElBQzsKLSAgICB9Ci0gICAg KnArKyA9IElBQzsKLSAgICAqcCsrID0gU0U7Ci0KLSAgICAvKiBIYW5kbGUgVGVsbmV0IERlYnVn Z2luZyBNZXNzYWdlcyAqLwotICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewot ICAgICAgICBpbnQgaTsKLSAgICAgICAgaW50IGRlYmxlbj1wLXN0cl9kYXRhLTI7Ci0gICAgICAg IGNoYXIgKnM9TlVMTDsKLSAgICAgICAgaW50IG1vZGUgPSBBVVRIX0NMSUVOVF9UT19TRVJWRVIg fCAoYXV0aF9ob3cgJiBBVVRIX0hPV19NQVNLKSB8Ci0gICAgICAgICAgICBhdXRoX2NyeXB0Ci0j aWZkZWYgVVNFX0lOSV9DUkVEX0ZXRAotICAgICAgICAgICAgICB8IChhdXRoX2Z3ZD9JTklfQ1JF RF9GV0RfT046SU5JX0NSRURfRldEX09GRikKLSNlbmRpZiAvKiBVU0VfSU5JX0NSRURfRldEICov Ci0gICAgICAgICAgICAgICAgICAgIDsKLQotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAg ICAgY2FzZSAwOgotICAgICAgICAgICAgcyA9ICJBVVRIIjsKLSAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBzID0gIlJFSkVDVCI7Ci0gICAgICAgICAgICBi cmVhazsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgcyA9ICJBQ0NFUFQiOwotICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgIHMgPSAiUkVTUE9OU0Ui OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgIHMgPSAi Rk9SV0FSRCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA1OgotICAgICAgICAg ICAgcyA9ICJGT1JXQVJEX0FDQ0VQVCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz ZSA2OgotICAgICAgICAgICAgcyA9ICJGT1JXQVJEX1JFSkVDVCI7Ci0gICAgICAgICAgICBicmVh azsKLSAgICAgICAgY2FzZSA3OgotICAgICAgICAgICAgcyA9ICJUTFNfVkVSSUZZIjsKLSAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNrbWFreG1zZyh0bl9tc2cs VE5fTVNHX0xFTiwKLSAgICAgICAgICAgICAgICAgICJURUxORVQgU0VOVCBTQiAiLAotICAgICAg ICAgICAgICAgICBURUxPUFQoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSwiICIsCi0gICAgICAgICAg ICAgICAgIHN0cl9kYXRhWzNdID09IFRFTFFVQUxfSVMgPyAiSVMiIDoKLSAgICAgICAgICAgICAg ICAgc3RyX2RhdGFbM10gPT0gVEVMUVVBTF9SRVBMWSA/ICJSRVBMWSIgOiAiPz8/IiwiICIsCi0g ICAgICAgICAgICAgICAgIEFVVEhUWVBFX05BTUUoYXV0aGVudGljYXRpb25fdmVyc2lvbiksIiAi LAotICAgICAgICAgICAgICAgICBBVVRITU9ERV9OQU1FKG1vZGUpLCIgIiwKLSAgICAgICAgICAg ICAgICAgcywiICIsTlVMTCk7Ci0gICAgICAgIHRuX2hleCgoQ0hBUiAqKXRuX21zZyxUTl9NU0df TEVOLCZzdHJfZGF0YVs3XSxkZWJsZW4tNyk7Ci0gICAgICAgIGNrc3RybmNhdCh0bl9tc2csIklB QyBTRSIsVE5fTVNHX0xFTik7Ci0gICAgICAgIGRlYnVnKEYxMDAsdG5fbXNnLCIiLDApOwotICAg ICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnKTsKLSAgICB9Ci0KLSAg ICAvKiBTZW5kIGRhdGEgKi8KLSNpZmRlZiBPUzIKLSAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNF TV9JTkRFRklOSVRFX1dBSVQgKTsKLSNlbmRpZgotICAgIHJjID0gdHRvbCgoQ0hBUiAqKXN0cl9k YXRhLCBwIC0gc3RyX2RhdGEpOwotI2lmZGVmIE9TMgotICAgIFJlbGVhc2VUZWxuZXRNdXRleCgp OwotI2VuZGlmCi0gICAgZGVidWcoRjExMSwiU2VuZEs1QXV0aFNCIiwidHRvbCgpIixyYyk7Ci0g ICAgcmV0dXJuKHJjKTsKLX0KLQotLyogIFMgRSBOIEQgSyA0IEEgVSBUIEggUyBCCi0gKiAgU2Vu ZCBhIEtlcmJlcm9zIDQgQXV0aGVudGljYXRpb24gU3VibmVnb3RpYXRpb24gdG8gaG9zdCBhbmQK LSAqICBvdXRwdXQgYXBwcm9wcmlhdGUgVGVsbmV0IERlYnVnIG1lc3NhZ2VzCi0gKgotICogIHR5 cGUgLSBTdWIgTmVnb3RpYXRpb24gdHlwZQotICogIGRhdGEgLSBwdHIgdG8gYnVmZmVyIGNvbnRh aW5pbmcgZGF0YQotICogIGxlbiAgLSBsZW4gb2YgYnVmZmVyIGlmIG5vdCBOVUwgdGVybWluYXRl ZAotICoKLSAqICByZXR1cm5zIG51bWJlciBvZiBjaGFyYWN0ZXJzIHNlbnQgb3IgZXJyb3IgdmFs dWUKLSAqLwotCi1zdGF0aWMgaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLVNlbmRLNEF1dGhTQihpbnQg dHlwZSwgdm9pZCAqZGF0YSwgaW50IGxlbikKLSNlbHNlCi1TZW5kSzRBdXRoU0IodHlwZSxkYXRh LGxlbikgaW50IHR5cGU7IHZvaWQgKmRhdGE7IGludCBsZW47Ci0jZW5kaWYKLXsKLSAgICBpbnQg cmM7Ci0gICAgdW5zaWduZWQgY2hhciAqcCA9IHN0cl9kYXRhICsgMzsKLSAgICB1bnNpZ25lZCBj aGFyICpjZCA9ICh1bnNpZ25lZCBjaGFyICopZGF0YTsKLSAgICBleHRlcm4gaW50IHNzdGVsbmV0 OwotICAgIGludCBtb2RlID0gKGF1dGhfaG93ICYgQVVUSF9IT1dfTUFTSykgfAotICAgICAgICBh dXRoX2NyeXB0OwotCi0gICAgaWYgKCB0eXBlIDwgMCB8fCB0eXBlID4gNCApICAgICAgICAgLyog Q2hlY2sgZm9yIGludmFsaWQgdmFsdWVzICovCi0gICAgICAgIHJldHVybigwKTsKLQotI2lmZGVm IENLX1NTTAotICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1l X2ZvbGxvd3MpIHsKLSAgICAgICAgaWYgKHR0Y2hrKCkgPCAwKQotICAgICAgICAgIHJldHVybigw KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHJldHVybigxKTsKLSAgICB9Ci0jZW5kaWYgLyog Q0tfU1NMICovCi0KLSAgICBpZiAoIWNkKSB7Ci0gICAgICAgIGNkID0gKHVuc2lnbmVkIGNoYXIg KikiIjsKLSAgICAgICAgbGVuID0gMDsKLSAgICB9Ci0KLSAgICBpZiAobGVuID09IC0xKSAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFVzZSBzdHJsZW4oKSBmb3IgbGVuICovCi0gICAgICAgIGxl biA9IHN0cmxlbigoY2hhciAqKWNkKTsKLQotCi0gICAgLyogQ29uc3RydWN0IE1lc3NhZ2UgKi8K LSAgICAqcCsrID0gc3N0ZWxuZXQgPyBURUxRVUFMX1JFUExZIDogVEVMUVVBTF9JUzsKLSAgICAq cCsrID0gQVVUSFRZUEVfS0VSQkVST1NfVjQ7Ci0gICAgKnAgPSBBVVRIX0NMSUVOVF9UT19TRVJW RVI7Ci0gICAgKnAgfD0gbW9kZTsKLSAgICBwKys7Ci0gICAgKnArKyA9IHR5cGU7Ci0gICAgd2hp bGUgKGxlbi0tID4gMCkgewotICAgICAgICBpZiAoKCpwKysgPSAqY2QrKykgPT0gSUFDKQotICAg ICAgICAgICAgKnArKyA9IElBQzsKLSAgICAgICAgfQotICAgICpwKysgPSBJQUM7Ci0gICAgKnAr KyA9IFNFOwotCi0gICAgLyogSGFuZGxlIFRlbG5ldCBEZWJ1Z2dpbmcgTWVzc2FnZXMgKi8KLSAg ICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgaW50IGk7Ci0gICAg ICAgIGludCBkZWJsZW49cC1zdHJfZGF0YS0yOwotICAgICAgICBjaGFyICpzPU5VTEw7Ci0KLSAg ICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIHMgPSAi QVVUSCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAg cyA9ICJSRUpFQ1QiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAg ICAgICAgIHMgPSAiQUNDRVBUIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDM6 Ci0gICAgICAgICAgICBzID0gIkNIQUxMRU5HRSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg ICAgY2FzZSA0OgotICAgICAgICAgICAgcyA9ICJSRVNQT05TRSI7Ci0gICAgICAgICAgICBicmVh azsKLSAgICAgICAgfQotCi0gICAgICAgIGNrbWFreG1zZyh0bl9tc2csVE5fTVNHX0xFTiwiVEVM TkVUIFNFTlQgU0IgIiwKLSAgICAgICAgICAgICAgICAgVEVMT1BUKFRFTE9QVF9BVVRIRU5USUNB VElPTiksIiAiLAotICAgICAgICAgICAgICAgICBzdHJfZGF0YVszXSA9PSBURUxRVUFMX0lTID8g IklTIiA6Ci0gICAgICAgICAgICAgICAgIChzdHJfZGF0YVszXSA9PSBURUxRVUFMX1JFUExZID8g IlJFUExZIiA6ICI/Pz8iKSwiICIsCi0gICAgICAgICAgICAgICAgIEFVVEhUWVBFX05BTUUoYXV0 aGVudGljYXRpb25fdmVyc2lvbiksIiAiLAotICAgICAgICAgICAgICAgICBBVVRITU9ERV9OQU1F KG1vZGUpLCIgIiwKLSAgICAgICAgICAgICAgICAgcywiICIsTlVMTCk7Ci0gICAgICAgIHRuX2hl eCgoQ0hBUiAqKXRuX21zZyxUTl9NU0dfTEVOLCZzdHJfZGF0YVs3XSxkZWJsZW4tNyk7Ci0gICAg ICAgIGNrc3RybmNhdCh0bl9tc2csIklBQyBTRSIsVE5fTVNHX0xFTik7Ci0gICAgICAgIGRlYnVn KEYxMDAsdG5fbXNnLCIiLDApOwotICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVi dWcodG5fbXNnKTsKLSAgICB9Ci0KLSAgICAvKiBTZW5kIGRhdGEgKi8KLSNpZmRlZiBPUzIKLSAg ICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNlbmRpZgotICAg IHJjID0gdHRvbCgoQ0hBUiAqKXN0cl9kYXRhLCBwIC0gc3RyX2RhdGEpOwotI2lmZGVmIE9TMgot ICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwotI2VuZGlmCi0gICAgZGVidWcoRjExMSwiU2VuZEs0 QXV0aFNCIiwidHRvbCgpIixyYyk7Ci0gICAgcmV0dXJuKHJjKTsKLX0KLQotLyogIFMgRSBOIEQg UyBSIFAgQSBVIFQgSCBTIEIKLSAqICBTZW5kIGEgU1JQIEF1dGhlbnRpY2F0aW9uIFN1Ym5lZ290 aWF0aW9uIHRvIGhvc3QgYW5kCi0gKiAgb3V0cHV0IGFwcHJvcHJpYXRlIFRlbG5ldCBEZWJ1ZyBt ZXNzYWdlcwotICoKLSAqICB0eXBlIC0gU3ViIE5lZ290aWF0aW9uIHR5cGUKLSAqICBkYXRhIC0g cHRyIHRvIGJ1ZmZlciBjb250YWluaW5nIGRhdGEKLSAqICBsZW4gIC0gbGVuIG9mIGJ1ZmZlciBp ZiBub3QgTlVMIHRlcm1pbmF0ZWQKLSAqCi0gKiAgcmV0dXJucyBudW1iZXIgb2YgY2hhcmFjdGVy cyBzZW50IG9yIGVycm9yIHZhbHVlCi0gKi8KLQotc3RhdGljIGludAotI2lmZGVmIENLX0FOU0lD Ci1TZW5kU1JQQXV0aFNCKGludCB0eXBlLCB2b2lkICpkYXRhLCBpbnQgbGVuKQotI2Vsc2UKLVNl bmRTUlBBdXRoU0IodHlwZSxkYXRhLGxlbikgaW50IHR5cGU7IHZvaWQgKmRhdGE7IGludCBsZW47 Ci0jZW5kaWYKLXsKLSAgICBpbnQgcmM7Ci0gICAgdW5zaWduZWQgY2hhciAqcCA9IHN0cl9kYXRh ICsgMzsKLSAgICB1bnNpZ25lZCBjaGFyICpjZCA9ICh1bnNpZ25lZCBjaGFyICopZGF0YTsKLSAg ICBleHRlcm4gaW50IHNzdGVsbmV0OwotCi0gICAgLyogQ2hlY2sgZm9yIGludmFsaWQgdmFsdWVz ICovCi0gICAgaWYgKCB0eXBlICE9IFNSUF9FWFAgJiYgdHlwZSAhPSBTUlBfUkVTUE9OU0UgJiYK LSAgICAgICAgIHR5cGUgIT0gU1JQX1JFSkVDVCAmJiB0eXBlICE9IFNSUF9BQ0NFUFQgJiYKLSAg ICAgICAgIHR5cGUgIT0gU1JQX0NIQUxMRU5HRSAmJiB0eXBlICE9IFNSUF9QQVJBTVMgJiYKLSAg ICAgICAgIHR5cGUgIT0gU1JQX0FVVEgpCi0gICAgICAgIHJldHVybigwKTsKLQotICAgIGlmIChs ZW4gPT0gLTEpICAgICAgICAgICAgICAgICAgICAgICAgLyogVXNlIHN0cmxlbigpIGZvciBsZW4g Ki8KLSAgICAgICAgbGVuID0gc3RybGVuKChjaGFyICopY2QpOwotCi0gICAgLyogQ29uc3RydWN0 IE1lc3NhZ2UgKi8KLSAgICAqcCsrID0gc3N0ZWxuZXQgPyBURUxRVUFMX1JFUExZIDogVEVMUVVB TF9JUzsKLSAgICAqcCsrID0gQVVUSFRZUEVfU1JQOwotICAgICpwID0gQVVUSF9DTElFTlRfVE9f U0VSVkVSOwotICAgICpwIHw9IGF1dGhfaG93OwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAq cCB8PSBhdXRoX2NyeXB0OwotI2VuZGlmCi0gICAgcCsrOwotICAgICpwKysgPSB0eXBlOwotICAg IHdoaWxlIChsZW4tLSA+IDApIHsKLSAgICAgICAgaWYgKCgqcCsrID0gKmNkKyspID09IElBQykK LSAgICAgICAgICAgICpwKysgPSBJQUM7Ci0gICAgICAgIH0KLSAgICAqcCsrID0gSUFDOwotICAg ICpwKysgPSBTRTsKLQotICAgIC8qIEhhbmRsZSBUZWxuZXQgRGVidWdnaW5nIE1lc3NhZ2VzICov Ci0gICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7Ci0gICAgICAgIGludCBpOwot ICAgICAgICBpbnQgZGVibGVuPXAtc3RyX2RhdGEtMjsKLSAgICAgICAgY2hhciAqcz1OVUxMOwot ICAgICAgICBpbnQgbW9kZSA9IEFVVEhfQ0xJRU5UX1RPX1NFUlZFUiB8IChhdXRoX2hvdyAmIEFV VEhfSE9XX01BU0spIHwKLSAgICAgICAgICAgIGF1dGhfY3J5cHQ7Ci0KLSAgICAgICAgc3dpdGNo ICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIHMgPSAiQVVUSCI7Ci0gICAg ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgcyA9ICJSRUpFQ1Qi OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIHMgPSAi QUNDRVBUIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAg ICBzID0gIkNIQUxMRU5HRSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA0Ogot ICAgICAgICAgICAgcyA9ICJSRVNQT05TRSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg Y2FzZSA1OgotICAgICAgICAgICAgcyA9ICJGT1JXQVJEIjsKLSAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICBjYXNlIDY6Ci0gICAgICAgICAgICBzID0gIkZPUldBUkRfQUNDRVBUIjsKLSAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDc6Ci0gICAgICAgICAgICBzID0gIkZPUldBUkRf UkVKRUNUIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDg6Ci0gICAgICAgICAg ICBzID0gIkVYUCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA5OgotICAgICAg ICAgICAgcyA9ICJQQVJBTVMiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAg ICAgICBja21ha3htc2codG5fbXNnLFROX01TR19MRU4sCi0gICAgICAgICAgICAgICAgICAiVEVM TkVUIFNFTlQgU0IgIiwKLSAgICAgICAgICAgICAgICAgVEVMT1BUKFRFTE9QVF9BVVRIRU5USUNB VElPTiksIiAiLAotICAgICAgICAgICAgICAgICBzdHJfZGF0YVszXSA9PSBURUxRVUFMX1JFUExZ ID8gIlJFUExZIiA6Ci0gICAgICAgICAgICAgICAgIHN0cl9kYXRhWzNdID09IFRFTFFVQUxfSVMg PyAiSVMiIDogIj8/PyIsIiAiLAotICAgICAgICAgICAgICAgICBBVVRIVFlQRV9OQU1FKGF1dGhl bnRpY2F0aW9uX3ZlcnNpb24pLCIgIiwKLSAgICAgICAgICAgICAgICAgQVVUSE1PREVfTkFNRSht b2RlKSwiICIsCi0gICAgICAgICAgICAgICAgIHMsIiAiLE5VTEwpOwotICAgICAgICB0bl9oZXgo KENIQVIgKil0bl9tc2csVE5fTVNHX0xFTiwmc3RyX2RhdGFbN10sZGVibGVuLTcpOwotICAgICAg ICBja3N0cm5jYXQodG5fbXNnLCJJQUMgU0UiLFROX01TR19MRU4pOwotICAgICAgICBkZWJ1ZyhG MTAwLHRuX21zZywiIiwwKTsKLSAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVn KHRuX21zZyk7Ci0gICAgfQotCi0gICAgLyogU2VuZCBkYXRhICovCi0jaWZkZWYgT1MyCi0gICAg UmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Ci0jZW5kaWYKLSAgICBy YyA9IHR0b2woKENIQVIgKilzdHJfZGF0YSwgcCAtIHN0cl9kYXRhKTsKLSNpZmRlZiBPUzIKLSAg ICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRpZgotICAgIHJldHVybihyYyk7Ci19Ci0KLSNp ZmRlZiBDS19FTkNSWVBUSU9OCi0vKgotICogRnVuY3Rpb246IEVuYWJsZSBvciBkaXNhYmxlIHRo ZSBlbmNyeXB0aW9uIHByb2Nlc3MuCi0gKgotICogUGFyYW1ldGVyczoKLSAqICAgICAgZW5hYmxl IC0gVFJVRSB0byBlbmFibGUsIEZBTFNFIHRvIGRpc2FibGUuCi0gKi8KLXN0YXRpYyBWT0lECi0j aWZkZWYgQ0tfQU5TSUMKLWF1dGhfZW5jcnlwdF9lbmFibGUoQk9PTCBlbmFibGUpCi0jZWxzZQot YXV0aF9lbmNyeXB0X2VuYWJsZShlbmFibGUpIEJPT0wgZW5hYmxlOwotI2VuZGlmCi17Ci0gIGVu Y3J5cHRfZmxhZyA9IGVuYWJsZTsKLX0KLSNlbmRpZgotCi0vKgotICogRnVuY3Rpb246IEFib3J0 IHRoZSBhdXRoZW50aWNhdGlvbiBwcm9jZXNzCi0gKgotICogUGFyYW1ldGVyczoKLSAqLwotc3Rh dGljIFZPSUQKLSNpZmRlZiBDS19BTlNJQwotYXV0aF9hYm9ydChjaGFyICplcnJtc2csIGxvbmcg cikKLSNlbHNlCi1hdXRoX2Fib3J0KGVycm1zZyxyKSBjaGFyICplcnJtc2c7IGxvbmcgcjsKLSNl bmRpZgotewotICAgIGNoYXIgYnVmWzldOwotICAgIGV4dGVybiBpbnQgc3N0ZWxuZXQ7Ci0KLSNp ZmRlZiBDS19TU0wKLSAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rs cy5tZV9mb2xsb3dzKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1NM ICovCi0gICAgZGVidWcoRjExMSwiYXV0aF9hYm9ydCIsZXJybXNnLHIpOwotCi0gICAgLyogQ29u c3RydWN0IFRlbG5ldCBEZWJ1Z2dpbmcgbWVzc2FnZXMgKi8KLSAgICBpZiAoZGVibG9nIHx8IHRu X2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgY2ttYWt4bXNnKHRuX21zZyxUTl9NU0dfTEVOLAot ICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICIsVEVMT1BUKFRFTE9QVF9BVVRIRU5U SUNBVElPTiksCi0gICAgICAgICAgICAgICAgICAiIElTICIsQVVUSFRZUEVfTkFNRShBVVRIVFlQ RV9OVUxMKSwiICIsCi0gICAgICAgICAgICAgICAgICAgQVVUSFRZUEVfTkFNRShBVVRIVFlQRV9O VUxMKSwiIElBQyBTRSIsCi0gICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxO VUxMCi0gICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIGRlYnVnKEYxMDAsdG5fbXNnLCIiLDAp OwotICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnKTsKLSAgICB9 Ci0KLSAgICAvKiBDb25zdHJ1Y3QgdGhlIEFib3J0IG1lc3NhZ2UgdG8gc2VuZCB0byB0aGUgaG9z dCAgICovCi0gICAgLyogQmFzaWNseSB3ZSBjaGFuZ2UgdGhlIGF1dGhlbnRpY2F0aW9uIHR5cGUg dG8gTlVMTCAqLwotICAgIHNwcmludGYoYnVmLCAiJWMlYyVjJWMlYyVjJWMlYyIsIElBQywgU0Is IFRFTE9QVF9BVVRIRU5USUNBVElPTiwKLSAgICAgICAgICAgICBzc3RlbG5ldCA/IFRFTFFVQUxf UkVQTFkgOiBURUxRVUFMX0lTLCBBVVRIVFlQRV9OVUxMLAotICAgICAgICAgICAgIEFVVEhUWVBF X05VTEwsIElBQywgU0UpOyAgIC8qIHNhZmUgKi8KLSNpZmRlZiBPUzIKLSAgICBSZXF1ZXN0VGVs bmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNlbmRpZgotICAgIHR0b2woKENIQVIg KilidWYsIDgpOwotI2lmZGVmIE9TMgotICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwotI2VuZGlm Ci0KLSAgICAvKiBJZiB0aGVyZSBpcyBhbiBlcnJvciBtZXNzYWdlLCBhbmQgZXJyb3IgbnVtYmVy IGNvbnN0cnVjdCAqLwotICAgIC8qIGFuIGV4cGxhbmF0aW9uIHRvIGRpc3BsYXkgdG8gdGhlIHVz ZXIgICAgICAgICAgICAgICAgICAgICovCi0gICAgaWYgKGVycm1zZyAhPSBOVUxMKSB7Ci0gICAg ICAgIGNrc3RybmNweShzdHJUbXAsIGVycm1zZywgQVVUSFRNUEJMKTsKLSAgICB9IGVsc2UKLSAg ICAgICAgc3RyVG1wWzBdID0gJ1wwJzsKLQotCi0gICAgaWYgKHIgIT0gQVVUSF9TVUNDRVNTKSB7 Ci0gICAgICAgIGNrc3RybmNhdChzdHJUbXAsICJcclxuIixBVVRIVE1QQkwpOwotI2lmZGVmIEtS QjQKLSAgICAgICAgaWYgKCBhdXRoZW50aWNhdGlvbl92ZXJzaW9uID09IEFVVEhUWVBFX0tFUkJF Uk9TX1Y0ICkgewotICAgICAgICAgICAgY2tzdHJuY2F0KHN0clRtcCwgKGNoYXIgKilrcmJfZ2V0 X2Vycl90ZXh0X2VudHJ5KHIpLAotICAgICAgICAgICAgICAgICAgICAgICBBVVRIVE1QQkwpOwot ICAgICAgICAgICAgZGVidWcoRjExMSwiYXV0aF9hYm9ydCIsKGNoYXIgKilrcmJfZ2V0X2Vycl90 ZXh0X2VudHJ5KHIpLHIpOwotICAgICAgICB9Ci0jZW5kaWYKLSNpZmRlZiBLUkI1Ci0gICAgICAg IGlmICggYXV0aGVudGljYXRpb25fdmVyc2lvbiA9PSBBVVRIVFlQRV9LRVJCRVJPU19WNSApIHsK LSAgICAgICAgICAgIGNrc3RybmNhdChzdHJUbXAsIGVycm9yX21lc3NhZ2UociksQVVUSFRNUEJM KTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImF1dGhfYWJvcnQiLGVycm9yX21lc3NhZ2Uociks cik7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgIH0KLSAgICBwcmludGYoIkF1dGhlbnRpY2F0aW9u IGZhaWxlZDogJXNcclxuIixzdHJUbXApOwotI2lmZGVmIENLU1lTTE9HCi0gICAgaWYgKGNreHN5 c2xvZyA+PSBTWVNMR19MSSAmJiBja3hsb2dnaW5nKSB7Ci0gICAgICAgIGNrc3lzbG9nKFNZU0xH X0xJLCAwLCAiVGVsbmV0IGF1dGhlbnRpY2F0aW9uIGZhaWx1cmUiLAotICAgICAgICAgICAgICAg ICAgKGNoYXIgKikgc3pVc2VyTmFtZVJlcXVlc3RlZCwKLSAgICAgICAgICAgICAgICAgIHN0clRt cCk7Ci0gICAgfQotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgYXV0aGVudGljYXRpb25fdmVy c2lvbiA9IEFVVEhUWVBFX05VTEw7Ci19Ci0KLQotLyoKLSAqIEZ1bmN0aW9uOiBDb3B5IGRhdGEg dG8gYnVmZmVyLCBkb3VibGluZyBJQUMgY2hhcmFjdGVyIGlmIHByZXNlbnQuCi0gKgotICovCi1p bnQKLSNpZmRlZiBDS19BTlNJQwotY29weV9mb3JfbmV0KHVuc2lnbmVkIGNoYXIgKnRvLCB1bnNp Z25lZCBjaGFyICpmcm9tLCBpbnQgYykKLSNlbHNlCi1jb3B5X2Zvcl9uZXQodG8sZnJvbSxjKSB1 bnNpZ25lZCBjaGFyICp0bzsgdW5zaWduZWQgY2hhciAqZnJvbTsgaW50IGM7Ci0jZW5kaWYKLXsK LSAgICBpbnQgbjsKLQotICAgIG4gPSBjOwotICAgIGRlYnVnKEYxMTEsImNvcHlfZm9yX25ldCIs ImJlZm9yZSIsbik7Ci0gICAgd2hpbGUgKGMtLSA+IDApIHsKLSAgICAgICAgaWYgKCgqdG8rKyA9 ICpmcm9tKyspID09IElBQykgewotICAgICAgICAgICAgbisrOwotICAgICAgICAgICAgKnRvKysg PSBJQUM7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZGVidWcoRjExMSwiY29weV9mb3JfbmV0Iiwi YWZ0ZXIiLG4pOwotICAgIHJldHVybiBuOwotfQotCi0jaWZkZWYgQ0tfU1NMCi0vKiAgUyBFIE4g RCBTIFMgTCBBIFUgVCBIIFMgQgotICogIFNlbmQgYSBTU0wgQXV0aGVudGljYXRpb24gU3VibmVn b3RpYXRpb24gdG8gaG9zdCBhbmQKLSAqICBvdXRwdXQgYXBwcm9wcmlhdGUgVGVsbmV0IERlYnVn IG1lc3NhZ2VzCi0gKgotICogIHR5cGUgLSBTdWIgTmVnb3RpYXRpb24gdHlwZQotICogIGRhdGEg LSBwdHIgdG8gYnVmZmVyIGNvbnRhaW5pbmcgZGF0YQotICogIGxlbiAgLSBsZW4gb2YgYnVmZmVy IGlmIG5vdCBOVUwgdGVybWluYXRlZAotICoKLSAqICByZXR1cm5zIG51bWJlciBvZiBjaGFyYWN0 ZXJzIHNlbnQgb3IgZXJyb3IgdmFsdWUKLSAqLwotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotU2Vu ZFNTTEF1dGhTQihpbnQgdHlwZSwgdm9pZCAqZGF0YSwgaW50IGxlbikKLSNlbHNlCi1TZW5kU1NM QXV0aFNCKHR5cGUsZGF0YSxsZW4pIGludCB0eXBlOyB2b2lkICpkYXRhOyBpbnQgbGVuOwotI2Vu ZGlmCi17Ci0gICAgaW50IHJjOwotICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBzdHJfZGF0YSArIDM7 Ci0gICAgdW5zaWduZWQgY2hhciAqY2QgPSAodW5zaWduZWQgY2hhciAqKWRhdGE7Ci0gICAgZXh0 ZXJuIGludCBzc3RlbG5ldDsKLQotICAgIC8qIENoZWNrIGZvciBpbnZhbGlkIHZhbHVlcyAqLwot ICAgIGlmICggdHlwZSAhPSBTU0xfU1RBUlQgJiYgdHlwZSAhPSBTU0xfQUNDRVBUICYmCi0gICAg ICAgICB0eXBlICE9IFNTTF9SRUpFQ1QpCi0gICAgICAgIHJldHVybigwKTsKLQotICAgIGlmIChU RUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKLSAgICAg ICAgaWYgKHR0Y2hrKCkgPCAwKQotICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgZWxzZQot ICAgICAgICAgIHJldHVybigxKTsKLSAgICB9Ci0KLSAgICBpZiAobGVuID09IC0xKSAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFVzZSBzdHJsZW4oKSBmb3IgbGVuICovCi0gICAgICAgIGxlbiA9 IHN0cmxlbigoY2hhciAqKWNkKTsKLQotICAgIC8qIENvbnN0cnVjdCBNZXNzYWdlICovCi0gICAg KnArKyA9IHNzdGVsbmV0ID8gVEVMUVVBTF9SRVBMWSA6IFRFTFFVQUxfSVM7Ci0gICAgKnArKyA9 IEFVVEhUWVBFX1NTTDsKLSAgICAqcCA9IEFVVEhfQ0xJRU5UX1RPX1NFUlZFUjsKLSAgICAqcCB8 PSBhdXRoX2hvdzsKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgKnAgfD0gYXV0aF9jcnlwdDsK LSNlbmRpZgotICAgIHArKzsKLSAgICAqcCsrID0gdHlwZTsKLSAgICB3aGlsZSAobGVuLS0gPiAw KSB7Ci0gICAgICAgIGlmICgoKnArKyA9ICpjZCsrKSA9PSBJQUMpCi0gICAgICAgICAgICAqcCsr ID0gSUFDOwotICAgICAgICB9Ci0gICAgKnArKyA9IElBQzsKLSAgICAqcCsrID0gU0U7Ci0KLSAg ICAvKiBIYW5kbGUgVGVsbmV0IERlYnVnZ2luZyBNZXNzYWdlcyAqLwotICAgIGlmIChkZWJsb2cg fHwgdG5fZGViIHx8IGRlYnNlcykgewotICAgICAgICBpbnQgaTsKLSAgICAgICAgaW50IGRlYmxl bj1wLXN0cl9kYXRhLTI7Ci0gICAgICAgIGNoYXIgKnM9TlVMTDsKLSAgICAgICAgaW50IG1vZGUg PSBBVVRIX0NMSUVOVF9UT19TRVJWRVIgfCAoYXV0aF9ob3cgJiBBVVRIX0hPV19NQVNLKSB8Ci0g ICAgICAgICAgICAoYXV0aF9jcnlwdD9BVVRIX0VOQ1JZUFRfVVNJTkdfVEVMT1BUOkFVVEhfRU5D UllQVF9PRkYpOwotCi0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIFNTTF9T VEFSVDoKLSAgICAgICAgICAgIHMgPSAiU1RBUlQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgIGNhc2UgU1NMX0FDQ0VQVDoKLSAgICAgICAgICAgIHMgPSAiQUNDRVBUIjsKLSAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNTTF9SRUpFQ1Q6Ci0gICAgICAgICAgICBzID0gIlJF SkVDVCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNrbWFreG1z Zyh0bl9tc2csVE5fTVNHX0xFTiwKLSAgICAgICAgICAgICAgICAgICJURUxORVQgU0VOVCBTQiAi LAotICAgICAgICAgICAgICAgICBURUxPUFQoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSwiICIsCi0g ICAgICAgICAgICAgICAgIHN0cl9kYXRhWzNdID09IFRFTFFVQUxfUkVQTFkgPyAiUkVQTFkiIDoK LSAgICAgICAgICAgICAgICAgc3RyX2RhdGFbM10gPT0gVEVMUVVBTF9JUyA/ICJJUyIgOiAiPz8/ IiwiICIsCi0gICAgICAgICAgICAgICAgIEFVVEhUWVBFX05BTUUoYXV0aGVudGljYXRpb25fdmVy c2lvbiksIiAiLAotICAgICAgICAgICAgICAgICBBVVRITU9ERV9OQU1FKG1vZGUpLCIgIiwKLSAg ICAgICAgICAgICAgICAgcywiICIsTlVMTCk7Ci0gICAgICAgIHRuX2hleCgoQ0hBUiAqKXRuX21z ZyxUTl9NU0dfTEVOLCZzdHJfZGF0YVs3XSxkZWJsZW4tNyk7Ci0gICAgICAgIGNrc3RybmNhdCh0 bl9tc2csIklBQyBTRSIsVE5fTVNHX0xFTik7Ci0gICAgICAgIGRlYnVnKEYxMDAsdG5fbXNnLCIi LDApOwotICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnKTsKLSAg ICB9Ci0KLSAgICAvKiBTZW5kIGRhdGEgKi8KLSNpZmRlZiBPUzIKLSAgICBSZXF1ZXN0VGVsbmV0 TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKLSNlbmRpZgotICAgIHJjID0gdHRvbCgoQ0hB UiAqKXN0cl9kYXRhLCBwIC0gc3RyX2RhdGEpOwotI2lmZGVmIE9TMgotICAgIFJlbGVhc2VUZWxu ZXRNdXRleCgpOwotI2VuZGlmCi0gICAgcmV0dXJuKHJjKTsKLX0KLSNlbmRpZiAgLyogQ0tfU1NM ICovCi0KLWludAotdG5faG93X29rKGludCBob3cpCi17Ci0gICAgc3dpdGNoICggdG5fYXV0aF9o b3cgKSB7Ci0gICAgY2FzZSBUTl9BVVRIX0hPV19BTlk6Ci0gICAgICAgIHJldHVybigxKTsKLSAg ICBjYXNlIFROX0FVVEhfSE9XX09ORV9XQVk6Ci0gICAgICAgIHJldHVybigoaG93ICYgQVVUSF9I T1dfTUFTSykgPT0gQVVUSF9IT1dfT05FX1dBWSk7Ci0gICAgY2FzZSBUTl9BVVRIX0hPV19NVVRV QUw6Ci0gICAgICAgIHJldHVybigoaG93ICYgQVVUSF9IT1dfTUFTSykgPT0gQVVUSF9IT1dfTVVU VUFMKTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotfQotCi1pbnQK LXRuX2VuY19vayhpbnQgZW5jKQotewotICAgIHN3aXRjaCAoIHRuX2F1dGhfZW5jICkgewotICAg IGNhc2UgVE5fQVVUSF9FTkNfQU5ZOgotICAgICAgICBpZiAoKGVuYyAmIEFVVEhfRU5DUllQVF9N QVNLKSA9PSBBVVRIX0VOQ1JZUFRfU1RBUlRfVExTICYmCi0gICAgICAgICAgICAoIWNrX3NzbGVh eV9pc19pbnN0YWxsZWQoKQotI2lmZGVmIENLX1NTTAotICAgICAgICAgICAgIHx8ICFzc2xfZmlu aXNoZWRfbWVzc2FnZXMgfHwKLSAgICAgICAgICAgICAhKHRsc19hY3RpdmVfZmxhZyB8fCBzc2xf YWN0aXZlX2ZsYWcpCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgICAgICAgKSkgewotI2lm ZGVmIENLX1NTTAotICAgICAgICAgICAgaWYgKCFzc2xfZmluaXNoZWRfbWVzc2FnZXMpCi0gICAg ICAgICAgICAgICAgZGVidWcoRjEwMCwidG5fZW5jX29rICFzc2xfZmluaXNoZWRfbWVzc2FnZXMi LCIiLDApOwotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICAgICAgcmV0dXJuKDApOwotICAg ICAgICB9Ci0gICAgICAgIHJldHVybigxKTsKLSAgICBjYXNlIFROX0FVVEhfRU5DX05PTkU6Ci0g ICAgICAgIHJldHVybigoZW5jICYgQVVUSF9FTkNSWVBUX01BU0spID09IEFVVEhfRU5DUllQVF9P RkYpOwotICAgIGNhc2UgVE5fQVVUSF9FTkNfVEVMT1BUOgotICAgICAgICByZXR1cm4oKGVuYyAm IEFVVEhfRU5DUllQVF9NQVNLKSA9PSBBVVRIX0VOQ1JZUFRfVVNJTkdfVEVMT1BUKTsKLSAgICBj YXNlIFROX0FVVEhfRU5DX0VYQ0g6Ci0gICAgICAgIHJldHVybigoZW5jICYgQVVUSF9FTkNSWVBU X01BU0spID09IEFVVEhfRU5DUllQVF9BRlRFUl9FWENIQU5HRSk7Ci0gICAgY2FzZSBUTl9BVVRI X0VOQ19UTFM6Ci0gICAgICAgIHJldHVybigoKGVuYyAmIEFVVEhfRU5DUllQVF9NQVNLKSA9PSBB VVRIX0VOQ1JZUFRfU1RBUlRfVExTKSAmJgotICAgICAgICAgICAgICAgY2tfc3NsZWF5X2lzX2lu c3RhbGxlZCgpCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAgICAgICAgICAmJiBzc2xfZmluaXNoZWRf bWVzc2FnZXMgJiYKLSAgICAgICAgICAgICAgICh0bHNfYWN0aXZlX2ZsYWcgfHwgc3NsX2FjdGl2 ZV9mbGFnKQotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICAgICApOwotICAgIGRlZmF1bHQ6 Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbnQKLWF0b2soaW50IGF0 KSB7Ci0gICAgaW50IGk7Ci0gICAgaWYgKCBhdXRoX3R5cGVfdXNlclswXSA9PSBBVVRIVFlQRV9B VVRPICkKLSAgICAgICAgcmV0dXJuKDEpOwotICAgIGlmICggYXV0aF90eXBlX3VzZXJbMF0gPT0g QVVUSFRZUEVfTlVMTCApCi0gICAgICAgIHJldHVybigwKTsKLQotICAgIGZvciAoIGk9MDsKLSAg ICAgICAgICBpPEFVVEhUWVBMU1RTWiAmJiBhdXRoX3R5cGVfdXNlcltpXSAhPSBBVVRIVFlQRV9O VUxMOwotICAgICAgICAgIGkrKyApIHsKLSAgICAgICAgaWYgKCBhdXRoX3R5cGVfdXNlcltpXSA9 PSBhdCApCi0gICAgICAgICAgICByZXR1cm4oMSk7Ci0gICAgfQotCi0gICAgcmV0dXJuKDApOwot fQotCi0KLS8qCi0gKiBGdW5jdGlvbjogUGFyc2UgYXV0aGVudGljYXRpb24gc2VuZCBjb21tYW5k Ci0gKgotICogUGFyYW1ldGVyczoKLSAqICBwYXJzZWRhdCAtIHRoZSBzdWItY29tbWFuZCBkYXRh LgotICoKLSAqICAgICAgZW5kX3N1YiAtIGluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgaW4gdGhlICdw YXJzZWRhdCcgYXJyYXkgd2hpY2gKLSAqICAgICAgICAgICAgICBpcyB0aGUgbGFzdCBieXRlIGlu IGEgc3ViLW5lZ290aWF0aW9uCi0gKgotICogUmV0dXJuczogS2VyYmVyb3MgZXJyb3IgY29kZS4K LSAqLwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciBzZW5kX2xpc3RbNTEyXTsKLXN0YXRpYyBpbnQg IHNlbmRfbGVuID0gMDsKLQotX1BST1RPVFlQKHN0YXRpYyBpbnQgYXV0aF9zZW5kLCAodW5zaWdu ZWQgY2hhciAqcGFyc2VkYXQsIGludCBlbmRfc3ViKSk7Ci0KLXN0YXRpYyBpbnQKLSNpZmRlZiBD S19BTlNJQwotYXV0aF9yZXNlbmQoaW50IHR5cGUpCi0jZWxzZQotYXV0aF9yZXNlbmQodHlwZSkg aW50IHR5cGU7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpbnQgaT0yOwotICAgIHdo aWxlIChpKzEgPD0gc2VuZF9sZW4pIHsKLSAgICAgICAgaWYgKHNlbmRfbGlzdFtpXSA9PSB0eXBl KSB7Ci0gICAgICAgICAgICBpbnQgajsKLSAgICAgICAgICAgIHNlbmRfbGVuIC09IDI7Ci0gICAg ICAgICAgICBmb3IgKGogPSBpOyBqIDwgc2VuZF9sZW47IGorKykKLSAgICAgICAgICAgICAgICBz ZW5kX2xpc3Rbal0gPSBzZW5kX2xpc3RbaisyXTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgIGkgKz0gMjsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4oYXV0aF9zZW5kKHNlbmRf bGlzdCxzZW5kX2xlbikpOwotfQotCi1zdGF0aWMgaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWF1dGhf c2VuZCh1bnNpZ25lZCBjaGFyICpwYXJzZWRhdCwgaW50IGVuZF9zdWIpCi0jZWxzZQotYXV0aF9z ZW5kKHBhcnNlZGF0LGVuZF9zdWIpIHVuc2lnbmVkIGNoYXIgKnBhcnNlZGF0OyBpbnQgZW5kX3N1 YjsKLSNlbmRpZgotewotICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGJ1Zls0MDk2XTsKLSAgICB1 bnNpZ25lZCBjaGFyICpwbmFtZTsKLSAgICBpbnQgcGxlbjsKLSAgICBpbnQgcjsKLSAgICBpbnQg aTsKLSAgICBpbnQgbW9kZTsKLSNpZmRlZiBNSVRfQ1VSUkVOVAotI2lmZGVmIENLX0VOQ1JZUFRJ T04KLSAgICBrcmI1X2RhdGEgZGF0YTsKLSAgICBrcmI1X2VuY19kYXRhIGVuY2RhdGE7Ci0gICAg a3JiNV9lcnJvcl9jb2RlIGNvZGU7Ci0gICAga3JiNV9rZXlibG9jayByYW5kb21fa2V5OwotI2Vu ZGlmIC8qIEVOQ1JZUFRJT04gKi8KLSNlbmRpZiAvKiBNSVRfQ1VSUkVOVCAqLwotI2lmZGVmIEtS QjUKLSAgICBpbnQga3JiNV9tc2cgPSAwOwotI2VuZGlmIC8qIEtSQjUgKi8KLSNpZmRlZiBLUkI0 Ci0gICAgaW50IGtyYjRfbXNnID0gMDsKLSNlbmRpZiAvKiBLUkI0ICovCi0jaWZkZWYgR1NTQVBJ X0tSQjUKLSAgICBpbnQgZ3NzazVfbXNnID0gMDsKLSNlbmRpZiAvKiBHU1NBUElfS1JCNSAqLwot ICAgIGludCBpYWNjbnQ9MDsKLQotI2lmZGVmIENLX1NTTAotICAgIGlmIChURUxPUFRfU0IoVEVM T1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpCi0gICAgICAgIHJldHVybihBVVRI X1NVQ0NFU1MpOwotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0gICAgYXV0aF9ob3cgPSAtMTsgICAg ICAgICAgICAgIC8qIFdlIGhhdmUgbm90IGZvdW5kIGFuIGF1dGggbWV0aG9kICAqLwotICAgIGF1 dGhfY3J5cHQgPSAwOyAgICAgICAgICAgICAvKiBXZSBhcmUgbm90IHVzaW5nIGVuY3J5cHRpb24g KHlldCkgKi8KLSAgICBzZW5kX2xlbiA9IGVuZF9zdWIgPiA1MTIgPyA1MTIgOiBlbmRfc3ViOwot ICAgIG1lbWNweShzZW5kX2xpc3QscGFyc2VkYXQsc2VuZF9sZW4pOwotCi0gICAgLyogU2VhcmNo IHRoZSBsaXN0IG9mIGFjY2VwdGFibGUgQXV0aGVudGljYXRpb24gdHlwZXMgc2VudCBmcm9tICov Ci0gICAgLyogdGhlIGhvc3QgYW5kIGZpbmQgb25lIHRoYXQgd2Ugc3VwcG9ydCAgICAgICAgICAg ICAgICAgICAgICAgICovCi0KLSAgICAvKiBGb3IgS2VyYmVyb3MgYXV0aGVudGljYXRpb25zLCB0 cnkgdG8gZGV0ZXJtaW5lIGlmIHdlIGhhdmUgYSAgKi8KLSAgICAvKiB2YWxpZCBUR1QsIGlmIG5v dCBza2lwIG92ZXIgdGhlIGF1dGhlbnRpY2F0aW9uIHR5cGUgYmVjYXVzZSAgKi8KLSAgICAvKiB3 ZSB3b3VsZG4ndCBiZSBhYmxlIHRvIHN1Y2Nlc3NmdWxseSBsb2dpbiBhbnl3YXkuICBQZXJoYXBz ICAgKi8KLSAgICAvKiB0aGVyZSBpcyBhbm90aGVyIHN1cHBvcnRlZCBhdXRoZW50aWNhdGlvbiB3 aGljaCB3ZSBjb3VsZCB1c2UgKi8KLQotI2lmZGVmIE5PX0ZUUF9BVVRICi0gICAgLyogSWYgdGhl IHVzZXJpZCBpcyAiZnRwIiBvciAiYW5vbnltb3VzIiByZWZ1c2UgdG8gcGVyZm9ybSBBVVRIICov Ci0gICAgLyogZm9yIEtlcmJlcm9zIG9yIFNSUC4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICovCi0jZW5kaWYgLyogTk9fRlRQX0FVVEggKi8KLQotICAgIGlmICggYXV0 aF90eXBlX3VzZXJbMF0gPT0gQVVUSFRZUEVfQVVUTyApIHsKLSAgICBmb3IgKGkgPSAyOyBpKzEg PD0gZW5kX3N1YjsgaSArPSAyKSB7Ci0jaWZkZWYgTlRMTQotICAgICAgICBpZiAocGFyc2VkYXRb aV0gPT0gQVVUSFRZUEVfTlRMTSAmJgotICAgICAgICAgICAgIGNrX250bG1faXNfdmFsaWQoMSkg JiYKLSAgICAgICAgICAgICBudGxtX2F1dGhfc2VuZCgpID09IDApIHsKLSAgICAgICAgICAgIGlm ICgocGFyc2VkYXRbaSsxXSAmIEFVVEhfV0hPX01BU0spID09IEFVVEhfQ0xJRU5UX1RPX1NFUlZF UiAmJgotICAgICAgICAgICAgICAgICB0bl9ob3dfb2socGFyc2VkYXRbaSsxXSkgJiYgdG5fZW5j X29rKHBhcnNlZGF0W2krMV0pKSB7Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICAgICAg ICAgIC8qIE5UTE0gZG9lcyBub3Qgc3VwcG9ydCBUZWxuZXQgRW5jcnlwdGlvbiAqLwotICAgICAg ICAgICAgICAgIGlmICgocGFyc2VkYXRbaSsxXSAmIEFVVEhfRU5DUllQVF9NQVNLKSkKLSAgICAg ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgYXV0aF9jcnlwdCA9IHBh cnNlZGF0W2krMV0gJiBBVVRIX0VOQ1JZUFRfTUFTSzsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9O ICovCi0gICAgICAgICAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0g VE5fTkdfUkY7Ci0gICAgICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElP TikgPSBUTl9OR19SRjsKLSAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbl92ZXJzaW9uID0g QVVUSFRZUEVfTlRMTTsKLSAgICAgICAgICAgICAgICBhdXRoX2hvdyA9IHBhcnNlZGF0W2krMV0g JiBBVVRIX0hPV19NQVNLOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot ICAgICAgICB9Ci0jZW5kaWYgLyogTlRMTSAqLwotI2lmZGVmIENLX1NTTAotICAgICAgICBpZiAo IHBhcnNlZGF0W2ldID09IEFVVEhUWVBFX1NTTCAmJiBzc2xfaW5pdGlhbGl6ZWQgJiYKLSNpZmRl ZiBTU0xETEwKLSAgICAgICAgICAgICBja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkgJiYKLSNlbmRp ZiAvKiBTU0xETEwgKi8KLSAgICAgICAgICAgICAhdGxzX2FjdGl2ZV9mbGFnICYmICFzc2xfYWN0 aXZlX2ZsYWcKLSNpZm5kZWYgVVNFX0NFUlRfQ0IKLSAgICAgICAgICAgICAmJiB0bHNfbG9hZF9j ZXJ0cyhzc2xfY3R4LHNzbF9jb24sMCkKLSNlbmRpZiAvKiBVU0VfQ0VSVF9DQiAqLwotICAgICAg ICAgICAgICkgewotCi0gICAgICAgICAgICBpZiAoKHBhcnNlZGF0W2krMV0gJiBBVVRIX1dIT19N QVNLKSA9PSBBVVRIX0NMSUVOVF9UT19TRVJWRVIgJiYKLSAgICAgICAgICAgICAgICAgdG5faG93 X29rKHBhcnNlZGF0W2krMV0pICYmIHRuX2VuY19vayhwYXJzZWRhdFtpKzFdKSkgewotI2lmZGVm IENLX0VOQ1JZUFRJT04KLSAgICAgICAgICAgICAgICAvKiBTU0wgZG9lcyBub3Qgc3VwcG9ydCBU ZWxuZXQgRW5jcnlwdGlvbiAqLwotICAgICAgICAgICAgICAgIGlmICgocGFyc2VkYXRbaSsxXSAm IEFVVEhfRU5DUllQVF9NQVNLKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg ICAgICAgICAgICAgYXV0aF9jcnlwdCA9IHBhcnNlZGF0W2krMV0gJiBBVVRIX0VOQ1JZUFRfTUFT SzsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAgICAgICAgICAgICAgVEVMT1BUX01F X01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7Ci0gICAgICAgICAgICAgICAgVEVM T1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsKLSAgICAgICAgICAgICAg ICBhdXRoZW50aWNhdGlvbl92ZXJzaW9uID0gQVVUSFRZUEVfU1NMOwotICAgICAgICAgICAgICAg IGF1dGhfaG93ID0gcGFyc2VkYXRbaSsxXSAmIEFVVEhfSE9XX01BU0s7Ci0gICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBTU0wgKi8KLSNp ZmRlZiBDS19TUlAKLSAgICAgICAgaWYgKCBwYXJzZWRhdFtpXSA9PSBBVVRIVFlQRV9TUlAKLSNp ZmRlZiBTUlBETEwKLSAgICAgICAgICAgICAmJiBoU1JQCi0jZW5kaWYgLyogU1JQRExMICovCi0j aWZkZWYgTk9fRlRQX0FVVEgKLSAgICAgICAgICAgICAmJiBzdHJjbXAoImZ0cCIsc3pVc2VyTmFt ZSkgJiYgc3RyY21wKCJhbm9ueW1vdXMiLHN6VXNlck5hbWUpCi0jZW5kaWYgLyogTk9fRlRQX0FV VEggKi8KLSAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgIGlmICgocGFyc2VkYXRbaSsxXSAm IEFVVEhfV0hPX01BU0spID09IEFVVEhfQ0xJRU5UX1RPX1NFUlZFUiAmJgotICAgICAgICAgICAg ICAgICB0bl9ob3dfb2socGFyc2VkYXRbaSsxXSkgJiYgdG5fZW5jX29rKHBhcnNlZGF0W2krMV0p KSB7Ci0jaWZkZWYgUFJFX1NSUF8xXzRfNQotICAgICAgICAgICAgICAgIGlmIChwYXJzZWRhdFtp KzFdICYgQVVUSF9FTkNSWVBUX01BU0spCi0gICAgICAgICAgICAgICAgICAgICAvKiBEbyBub3Qg c3VwcG9ydCBFTkNSWVBUX1VTSU5HX1RFTE9QVCB5ZXQuICovCi0gICAgICAgICAgICAgICAgICAg IGNvbnRpbnVlOwotI2VuZGlmIC8qIFBSRV9TUlBfMV80XzUgKi8KLSAgICAgICAgICAgICAgICBp ZiAoKChwYXJzZWRhdFtpKzFdICYgQVVUSF9FTkNSWVBUX01BU0spID09Ci0gICAgICAgICAgICAg ICAgICAgICBBVVRIX0VOQ1JZUFRfVVNJTkdfVEVMT1BUKSAmJgotICAgICAgICAgICAgICAgICAg ICAoVEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID09IFROX05HX1JGIHx8Ci0gICAg ICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9PSBUTl9O R19SRikpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAg YXV0aF9jcnlwdCA9IHBhcnNlZGF0W2krMV0gJiBBVVRIX0VOQ1JZUFRfTUFTSzsKLSNpZmRlZiBD S19FTkNSWVBUSU9OCi0gICAgICAgICAgICAgICAgaWYgKCBhdXRoX2NyeXB0ID09IEFVVEhfRU5D UllQVF9VU0lOR19URUxPUFQgKSB7Ci0gICAgICAgICAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RF KFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX01VOwotICAgICAgICAgICAgICAgICAgICBURUxP UFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX01VOwotICAgICAgICAgICAgICAg IH0KLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAgICAg ICAgICAgaWYgKCBhdXRoX2NyeXB0ID09IEFVVEhfRU5DUllQVF9TVEFSVF9UTFMgJiYKLSAgICAg ICAgICAgICAgICAgICAgIGNrX3NzbGVheV9pc19pbnN0YWxsZWQoKSAmJgotICAgICAgICAgICAg ICAgICAgICAgKHRsc19hY3RpdmVfZmxhZyB8fCBzc2xfYWN0aXZlX2ZsYWcpICkgewotICAgICAg ICAgICAgICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19S RjsKLSAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikg PSBUTl9OR19SRjsKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAg ICAgICAgICAgICAgYXV0aGVudGljYXRpb25fdmVyc2lvbiA9IEFVVEhUWVBFX1NSUDsKLSAgICAg ICAgICAgICAgICBhdXRoX2hvdyA9IHBhcnNlZGF0W2krMV0gJiBBVVRIX0hPV19NQVNLOwotICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLyog U1JQICovCi0jaWZkZWYgR1NTQVBJX0tSQjUKLSAgICAgICAgaWYgKHBhcnNlZGF0W2ldID09IEFV VEhUWVBFX0dTU0FQSV9LUkI1ICYmCi0gICAgICAgICAgICAocGFyc2VkYXRbaSsxXSAmIEFVVEhf RU5DUllQVF9NQVNLKSA9PQotICAgICAgICAgICAgQVVUSF9FTkNSWVBUX0FGVEVSX0VYQ0hBTkdF ICYmCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICBoR1NTQVBJICYmCi0jZW5kaWYgLyogT1MyICov Ci0jaWZkZWYgTk9fRlRQX0FVVEgKLSAgICAgICAgICAgICBzdHJjbXAoImZ0cCIsc3pVc2VyTmFt ZSkgJiYgc3RyY21wKCJhbm9ueW1vdXMiLHN6VXNlck5hbWUpICYmCi0jZW5kaWYgLyogTk9fRlRQ X0FVVEggKi8KLSAgICAgICAgICAgICBja19nc3NhcGlfaXNfaW5zdGFsbGVkKCkgJiYgIWdzc2s1 X21zZykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCAhZ3NzazVfYXV0aF9zZW5kKHBhcnNl ZGF0W2krMV0gJiBBVVRIX0hPV19NQVNLLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBhcnNlZGF0W2krMV0gJiBBVVRIX0VOQ1JZUFRfTUFTSywKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwYXJzZWRhdFtpKzFdICYgSU5JX0NSRURfRldEX01BU0spICkKLSAg ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiBJZiB3ZSBhcmUgYXV0by1nZXR0aW5nIFRH VHMsIHRyeSAqLwotICAgICAgICAgICAgICAgIGlmICggIWNrX2tyYjVfaXNfdGd0X3ZhbGlkKCkg KSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJLZXJiZXJvcyA1OiBUaWNrZXQgR2V0dGluZyBU aWNrZXQgbm90IHZhbGlkLlxyXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgZ3NzazVfbXNnID0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKChw YXJzZWRhdFtpKzFdICYgQVVUSF9XSE9fTUFTSykgPT0KLSAgICAgICAgICAgICAgICAgICAgICBB VVRIX0NMSUVOVF9UT19TRVJWRVIgJiYKLSAgICAgICAgICAgICAgICAgICAgICB0bl9ob3dfb2so cGFyc2VkYXRbaSsxXSkgJiYgdG5fZW5jX29rKHBhcnNlZGF0W2krMV0pKSB7Ci0gICAgICAgICAg ICAgICAgYXV0aF9jcnlwdCA9IHBhcnNlZGF0W2krMV0gJiBBVVRIX0VOQ1JZUFRfTUFTSzsKLSNp ZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAgICAgICAgICAgaWYgKCBhdXRoX2NyeXB0ID09IEFV VEhfRU5DUllQVF9BRlRFUl9FWENIQU5HRSApIHsKLSAgICAgICAgICAgICAgICAgICAgVEVMT1BU X01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7Ci0gICAgICAgICAgICAgICAg ICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7Ci0gICAgICAg ICAgICAgICAgfQotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSAgICAgICAgICAgICAgICBh dXRoX2Z3ZCA9IHBhcnNlZGF0W2krMV0gJiBJTklfQ1JFRF9GV0RfTUFTSzsKLSAgICAgICAgICAg ICAgICBhdXRoZW50aWNhdGlvbl92ZXJzaW9uID0gQVVUSFRZUEVfR1NTQVBJX0tSQjU7Ci0gICAg ICAgICAgICAgICAgYXV0aF9ob3cgPSBwYXJzZWRhdFtpKzFdICYgQVVUSF9IT1dfTUFTSzsKLSAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8q IEdTU0FQSV9LUkI1ICovCi0jaWZkZWYgS1JCNQotICAgICAgICBpZiAocGFyc2VkYXRbaV0gPT0g QVVUSFRZUEVfS0VSQkVST1NfVjUgJiYKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICBoS1JCNV8z MiAmJgotI2VuZGlmIC8qIE9TMiAqLwotI2lmZGVmIE5PX0ZUUF9BVVRICi0gICAgICAgICAgICAg c3RyY21wKCJmdHAiLHN6VXNlck5hbWUpICYmIHN0cmNtcCgiYW5vbnltb3VzIixzelVzZXJOYW1l KSAmJgotI2VuZGlmIC8qIE5PX0ZUUF9BVVRIICovCi0gICAgICAgICAgICAgY2tfa3JiNV9pc19p bnN0YWxsZWQoKSAmJiAha3JiNV9tc2cpIHsKLQotICAgICAgICAgICAgLyogV2l0aG91dCBlbmNy eXB0aW9uIHdlIGNhbid0IHBlcmZvcm0gbXV0dWFsIGF1dGhlbnRpY2F0aW9uICovCi0gICAgICAg ICAgICBpZiAoIChwYXJzZWRhdFtpKzFdICYgQVVUSF9IT1dfTUFTSykgPT0gQVVUSF9IT1dfTVVU VUFMICYmCi0gICAgICAgICAgICAgICAgICFja19jcnlwdF9pc19pbnN0YWxsZWQoKSkKLSAgICAg ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgLyogU2tpcCBvdmVyIGVudHJpZXMg dGhhdCByZXF1ZXN0IGNyZWRlbnRpYWwgZm9yd2FyZGluZyAqLwotICAgICAgICAgICAgLyogaWYg d2UgYXJlIG5vdCBmb3J3YXJkaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAg ICAgICAgICAgaWYgKCghZm9yd2FyZF9mbGFnICYmIChwYXJzZWRhdFtpKzFdICYgSU5JX0NSRURf RldEX01BU0spKSB8fAotICAgICAgICAgICAgICAgIChmb3J3YXJkX2ZsYWcgJiYKLSAgICAgICAg ICAgICAgICAgICgocGFyc2VkYXRbaSsxXSAmIEFVVEhfSE9XX01BU0spID09IEFVVEhfSE9XX09O RV9XQVkpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKCAh azVfYXV0aF9zZW5kKHBhcnNlZGF0W2krMV0gJiBBVVRIX0hPV19NQVNLLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwYXJzZWRhdFtpKzFdICYgQVVUSF9FTkNSWVBUX01BU0ssCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZGF0W2krMV0gJiBJTklfQ1JFRF9G V0RfTUFTSykgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8qIElmIHdlIGFyZSBh dXRvLWdldHRpbmcgVEdUcywgdHJ5ICovCi0gICAgICAgICAgICAgICAgaWYgKCAhY2tfa3JiNV9p c190Z3RfdmFsaWQoKSApIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIktlcmJlcm9zIDU6IFRp Y2tldCBHZXR0aW5nIFRpY2tldCBub3QgdmFsaWQuXHJcbiIpOwotICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICBrcmI1X21zZyA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg ICBlbHNlIGlmICgocGFyc2VkYXRbaSsxXSAmIEFVVEhfV0hPX01BU0spID09Ci0gICAgICAgICAg ICAgICAgICAgICAgQVVUSF9DTElFTlRfVE9fU0VSVkVSICYmCi0gICAgICAgICAgICAgICAgICAg ICAgdG5faG93X29rKHBhcnNlZGF0W2krMV0pICYmIHRuX2VuY19vayhwYXJzZWRhdFtpKzFdKSkg ewotICAgICAgICAgICAgICAgIGlmICgoKHBhcnNlZGF0W2krMV0gJiBBVVRIX0VOQ1JZUFRfTUFT SykgPT0KLSAgICAgICAgICAgICAgICAgICAgIEFVVEhfRU5DUllQVF9VU0lOR19URUxPUFQpICYm Ci0gICAgICAgICAgICAgICAgICAgICAoVEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04p ID09IFROX05HX1JGIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VX01PREUoVEVM T1BUX0VOQ1JZUFRJT04pID09IFROX05HX1JGKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGlu dWU7Ci0gICAgICAgICAgICAgICAgaWYgKCgocGFyc2VkYXRbaSsxXSAmIEFVVEhfRU5DUllQVF9N QVNLKSA9PQotICAgICAgICAgICAgICAgICAgICAgQVVUSF9FTkNSWVBUX1NUQVJUX1RMUykgJiYK LSAgICAgICAgICAgICAgICAgICAgICghY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpCi0jaWZkZWYg Q0tfU1NMCi0gICAgICAgICAgICAgICAgICAgICAgIHx8ICEodGxzX2FjdGl2ZV9mbGFnIHx8IHNz bF9hY3RpdmVfZmxhZykKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICAgICAgICAgICAg ICAgKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICBh dXRoX2NyeXB0ID0gcGFyc2VkYXRbaSsxXSAmIEFVVEhfRU5DUllQVF9NQVNLOwotI2lmZGVmIENL X0VOQ1JZUFRJT04KLSAgICAgICAgICAgICAgICBpZiAoIGF1dGhfY3J5cHQgPT0gQVVUSF9FTkNS WVBUX1VTSU5HX1RFTE9QVCApIHsKLSAgICAgICAgICAgICAgICAgICAgVEVMT1BUX01FX01PREUo VEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfTVU7Ci0gICAgICAgICAgICAgICAgICAgIFRFTE9Q VF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfTVU7Ci0gICAgICAgICAgICAgICAg fQotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAg ICAgICBpZiAoIGF1dGhfY3J5cHQgPT0gQVVUSF9FTkNSWVBUX1NUQVJUX1RMUyAmJgotICAgICAg ICAgICAgICAgICAgICAgY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpICYmCi0gICAgICAgICAgICAg ICAgICAgICAodGxzX2FjdGl2ZV9mbGFnIHx8IHNzbF9hY3RpdmVfZmxhZykgKSB7Ci0gICAgICAg ICAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JG OwotICAgICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9 IFROX05HX1JGOwotICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAg ICAgICAgICAgICBhdXRoX2Z3ZCA9IHBhcnNlZGF0W2krMV0gJiBJTklfQ1JFRF9GV0RfTUFTSzsK LSAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbl92ZXJzaW9uID0gQVVUSFRZUEVfS0VSQkVS T1NfVjU7Ci0gICAgICAgICAgICAgICAgYXV0aF9ob3cgPSBwYXJzZWRhdFtpKzFdICYgQVVUSF9I T1dfTUFTSzsKLSAgICAgICAgICAgICAgICBpZiAoIGF1dGhfaG93ID09IEFVVEhfSE9XX09ORV9X QVkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBU SU9OKSA9IFROX05HX1JGOwotICAgICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9Q VF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIEtSQjUgKi8K LSNpZmRlZiBLUkI0Ci0gICAgICAgIGlmIChwYXJzZWRhdFtpXSA9PSBBVVRIVFlQRV9LRVJCRVJP U19WNCAmJgotI2lmZGVmIE9TMgotICAgICAgICAgICAgIGhLUkI0XzMyICYmCi0jZW5kaWYgLyog T1MyICovCi0jaWZkZWYgTk9fRlRQX0FVVEgKLSAgICAgICAgICAgICBzdHJjbXAoImZ0cCIsc3pV c2VyTmFtZSkgJiYgc3RyY21wKCJhbm9ueW1vdXMiLHN6VXNlck5hbWUpICYmCi0jZW5kaWYgLyog Tk9fRlRQX0FVVEggKi8KLSAgICAgICAgICAgICBja19rcmI0X2lzX2luc3RhbGxlZCgpICYmICFr cmI0X21zZykgewotICAgICAgICAgICAgaW50IHJjID0gMDsKLQotICAgICAgICAgICAgLyogV2l0 aG91dCBlbmNyeXB0aW9uIHdlIGNhbid0IHBlcmZvcm0gbXV0dWFsIGF1dGhlbnRpY2F0aW9uICov Ci0gICAgICAgICAgICBpZiAoIChwYXJzZWRhdFtpKzFdICYgQVVUSF9IT1dfTUFTSykgPT0gQVVU SF9IT1dfTVVUVUFMICYmCi0gICAgICAgICAgICAgICAgICFja19jcnlwdF9pc19pbnN0YWxsZWQo KSApCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlmICggIWs0X2F1 dGhfc2VuZCgpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiBJZiB3ZSBhcmUg YXV0by1nZXR0aW5nIFRHVHMsIHRyeSAqLwotICAgICAgICAgICAgICAgIGlmICggIWNrX2tyYjRf aXNfdGd0X3ZhbGlkKCkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiS2VyYmVyb3Mg NDogVGlja2V0IEdldHRpbmcgVGlja2V0IG5vdCB2YWxpZC5cclxuIik7Ci0gICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgIGtyYjRfbXNnID0gMTsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIGVsc2UgaWYgKChwYXJzZWRhdFtpKzFdICYgQVVUSF9XSE9fTUFTSykgPT0KLSAgICAg ICAgICAgICAgICAgICAgICBBVVRIX0NMSUVOVF9UT19TRVJWRVIgJiYKLSAgICAgICAgICAgICAg ICAgICAgICB0bl9ob3dfb2socGFyc2VkYXRbaSsxXSkgJiYgdG5fZW5jX29rKHBhcnNlZGF0W2kr MV0pKSB7Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICAgICAgICAgIGlmICgocGFyc2Vk YXRbaSsxXSAmIEFVVEhfRU5DUllQVF9NQVNLKSAmJgotICAgICAgICAgICAgICAgICAgICAgKFRF TE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9PSBUTl9OR19SRiB8fAotICAgICAgICAg ICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9PSBUTl9OR19S RikpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGF1dGhf Y3J5cHQgPSBwYXJzZWRhdFtpKzFdICYgQVVUSF9FTkNSWVBUX01BU0s7Ci0gICAgICAgICAgICAg ICAgaWYgKCBhdXRoX2NyeXB0ID09IEFVVEhfRU5DUllQVF9VU0lOR19URUxPUFQgKSB7Ci0gICAg ICAgICAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05H X01VOwotICAgICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9O KSA9IFROX05HX01VOwotICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9O ICovCi0gICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb25fdmVyc2lvbiA9IEFVVEhUWVBFX0tF UkJFUk9TX1Y0OwotICAgICAgICAgICAgICAgIGF1dGhfaG93ID0gcGFyc2VkYXRbaSsxXSAmIEFV VEhfSE9XX01BU0s7Ci0gICAgICAgICAgICAgICAgaWYgKCBhdXRoX2hvdyA9PSBBVVRIX0hPV19P TkVfV0FZICkgewotICAgICAgICAgICAgICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfRU5D UllQVElPTikgPSBUTl9OR19SRjsKLSAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShU RUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBLUkI0 ICovCi0gICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoaSA9IDI7IGkrMSA8PSBlbmRf c3ViOyBpICs9IDIpIHsKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAgIGlmICggYXRvayhBVVRI VFlQRV9TU0wpICYmIHBhcnNlZGF0W2ldID09IEFVVEhUWVBFX1NTTCAmJgotI2lmZGVmIFNTTERM TAotICAgICAgICAgICAgICAgICBja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkgJiYKLSNlbmRpZiAv KiBTU0xETEwgKi8KLSAgICAgICAgICAgICAgICAgIXRsc19hY3RpdmVfZmxhZyAmJiAhc3NsX2Fj dGl2ZV9mbGFnICYmIHNzbF9pbml0aWFsaXplZAotI2lmbmRlZiBVU0VfQ0VSVF9DQgotICAgICAg ICAgICAgICAgICAmJiB0bHNfbG9hZF9jZXJ0cyhzc2xfY3R4LHNzbF9jb24sMCkKLSNlbmRpZiAv KiBVU0VfQ0VSVF9DQiAqLwotICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICB7Ci0gICAg ICAgICAgICAgICAgaWYgKChwYXJzZWRhdFtpKzFdICYgQVVUSF9XSE9fTUFTSykgPT0gQVVUSF9D TElFTlRfVE9fU0VSVkVSICYmCi0gICAgICAgICAgICAgICAgICAgICB0bl9ob3dfb2socGFyc2Vk YXRbaSsxXSkgJiYgdG5fZW5jX29rKHBhcnNlZGF0W2krMV0pKSB7Ci0jaWZkZWYgQ0tfRU5DUllQ VElPTgotICAgICAgICAgICAgICAgICAgICAvKiBTU0wgZG9lcyBub3Qgc3VwcG9ydCBUZWxuZXQg RW5jcnlwdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoKHBhcnNlZGF0W2krMV0gJiBB VVRIX0VOQ1JZUFRfTUFTSykpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg ICAgICAgICAgICAgICAgICAgYXV0aF9jcnlwdCA9IHBhcnNlZGF0W2krMV0gJiBBVVRIX0VOQ1JZ UFRfTUFTSzsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAgICAgICAgICAgICAgICAg IFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOwotICAgICAgICAg ICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOwot ICAgICAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbl92ZXJzaW9uID0gQVVUSFRZUEVfU1NM OwotICAgICAgICAgICAgICAgICAgICBhdXRoX2hvdyA9IHBhcnNlZGF0W2krMV0gJiBBVVRIX0hP V19NQVNLOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICB9Ci0jZW5kaWYgLyogU1NMICovCi0jaWZkZWYgQ0tfU1JQCi0gICAgICAgICAg ICBpZiAoIGF0b2soQVVUSFRZUEVfU1JQKSAmJgotICAgICAgICAgICAgICAgICBwYXJzZWRhdFtp XSA9PSBBVVRIVFlQRV9TUlAKLSNpZmRlZiBTUlBETEwKLSAgICAgICAgICAgICAgICAgJiYgaFNS UAotI2VuZGlmIC8qIFNSUERMTCAqLwotI2lmZGVmIE5PX0ZUUF9BVVRICi0gICAgICAgICAgICAg ICAgICYmIHN0cmNtcCgiZnRwIixzelVzZXJOYW1lKSAmJiBzdHJjbXAoImFub255bW91cyIsc3pV c2VyTmFtZSkKLSNlbmRpZiAvKiBOT19GVFBfQVVUSCAqLwotICAgICAgICAgICAgICAgICApIHsK LSAgICAgICAgICAgICAgICBpZiAoKHBhcnNlZGF0W2krMV0gJiBBVVRIX1dIT19NQVNLKSA9PSBB VVRIX0NMSUVOVF9UT19TRVJWRVIgJiYKLSAgICAgICAgICAgICAgICAgICAgIHRuX2hvd19vayhw YXJzZWRhdFtpKzFdKSAmJiB0bl9lbmNfb2socGFyc2VkYXRbaSsxXSkpIHsKLSNpZmRlZiBQUkVf U1JQXzFfNF81Ci0gICAgICAgICAgICAgICAgaWYgKHBhcnNlZGF0W2krMV0gJiBBVVRIX0VOQ1JZ UFRfTUFTSykKLSAgICAgICAgICAgICAgICAgICAgIC8qIERvIG5vdCBzdXBwb3J0IEVOQ1JZUFRf VVNJTkdfVEVMT1BUIHlldC4gKi8KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0jZW5k aWYgLyogUFJFX1NSUF8xXzRfNSAqLwotICAgICAgICAgICAgICAgIGlmICgoKHBhcnNlZGF0W2kr MV0gJiBBVVRIX0VOQ1JZUFRfTUFTSykgPT0KLSAgICAgICAgICAgICAgICAgICAgIEFVVEhfRU5D UllQVF9VU0lOR19URUxPUFQpICYmCi0gICAgICAgICAgICAgICAgICAgICAoVEVMT1BUX01FX01P REUoVEVMT1BUX0VOQ1JZUFRJT04pID09IFROX05HX1JGIHx8Ci0gICAgICAgICAgICAgICAgICAg ICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID09IFROX05HX1JGKSkKLSAgICAg ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKCgocGFyc2VkYXRb aSsxXSAmIEFVVEhfRU5DUllQVF9NQVNLKSA9PQotICAgICAgICAgICAgICAgICAgICAgQVVUSF9F TkNSWVBUX1NUQVJUX1RMUykgJiYKLSAgICAgICAgICAgICAgICAgICAgICghY2tfc3NsZWF5X2lz X2luc3RhbGxlZCgpCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAgICAgICAgICAgICAgICAgIHx8ICEo dGxzX2FjdGl2ZV9mbGFnIHx8IHNzbF9hY3RpdmVfZmxhZykKLSNlbmRpZiAvKiBDS19TU0wgKi8K LSAgICAgICAgICAgICAgICAgICAgICAgKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7 Ci0gICAgICAgICAgICAgICAgICAgIGF1dGhfY3J5cHQgPSBwYXJzZWRhdFtpKzFdICYgQVVUSF9F TkNSWVBUX01BU0s7Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICAgICAgICAgICAgICBp ZiAoIGF1dGhfY3J5cHQgPT0gQVVUSF9FTkNSWVBUX1VTSU5HX1RFTE9QVCApIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05H X01VOwotICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQ VElPTikgPSBUTl9OR19NVTsKLSAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIENLX0VO Q1JZUFRJT04gKi8KLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAgICAgICBpZiAoIGF1dGhfY3J5 cHQgPT0gQVVUSF9FTkNSWVBUX1NUQVJUX1RMUyAmJgotICAgICAgICAgICAgICAgICAgICAgY2tf c3NsZWF5X2lzX2luc3RhbGxlZCgpICYmCi0gICAgICAgICAgICAgICAgICAgICAodGxzX2FjdGl2 ZV9mbGFnIHx8IHNzbF9hY3RpdmVfZmxhZykgKSB7Ci0gICAgICAgICAgICAgICAgICAgIFRFTE9Q VF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOwotICAgICAgICAgICAgICAg ICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOwotICAgICAg ICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICAgICAgICAgICAgYXV0 aGVudGljYXRpb25fdmVyc2lvbiA9IEFVVEhUWVBFX1NSUDsKLSAgICAgICAgICAgICAgICAgICAg YXV0aF9ob3cgPSBwYXJzZWRhdFtpKzFdICYgQVVUSF9IT1dfTUFTSzsKLSAgICAgICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotI2VuZGlmIC8q IFNSUCAqLwotI2lmZGVmIEdTU0FQSV9LUkI1Ci0gICAgICAgIGlmIChhdG9rKEFVVEhUWVBFX0dT U0FQSV9LUkI1KSAmJgotICAgICAgICAgICAgcGFyc2VkYXRbaV0gPT0gQVVUSFRZUEVfR1NTQVBJ X0tSQjUgJiYKLSAgICAgICAgICAgIChwYXJzZWRhdFtpKzFdICYgQVVUSF9FTkNSWVBUX01BU0sp ID09Ci0gICAgICAgICAgICBBVVRIX0VOQ1JZUFRfQUZURVJfRVhDSEFOR0UgJiYKLSNpZmRlZiBP UzIKLSAgICAgICAgICAgIGhHU1NBUEkgJiYKLSNlbmRpZiAvKiBPUzIgKi8KLSNpZmRlZiBOT19G VFBfQVVUSAotICAgICAgICAgICAgc3RyY21wKCJmdHAiLHN6VXNlck5hbWUpICYmIHN0cmNtcCgi YW5vbnltb3VzIixzelVzZXJOYW1lKSAmJgotI2VuZGlmIC8qIE5PX0ZUUF9BVVRIICovCi0gICAg ICAgICAgICBja19nc3NhcGlfaXNfaW5zdGFsbGVkKCkgJiYgIWdzc2s1X21zZykKLSAgICAgICAg ewotICAgICAgICAgICAgaWYgKCAhZ3NzazVfYXV0aF9zZW5kKHBhcnNlZGF0W2krMV0gJiBBVVRI X0hPV19NQVNLLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZGF0W2kr MV0gJiBBVVRIX0VOQ1JZUFRfTUFTSywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwYXJzZWRhdFtpKzFdICYgSU5JX0NSRURfRldEX01BU0spICkKLSAgICAgICAgICAgIHsKLSAg ICAgICAgICAgICAgICAvKiBJZiB3ZSBhcmUgYXV0by1nZXR0aW5nIFRHVHMsIHRyeSAqLwotICAg ICAgICAgICAgICAgIGlmICggIWNrX2tyYjVfaXNfdGd0X3ZhbGlkKCkgKSB7Ci0gICAgICAgICAg ICAgICAgcHJpbnRmKCJLZXJiZXJvcyA1OiBUaWNrZXQgR2V0dGluZyBUaWNrZXQgbm90IHZhbGlk LlxyXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZ3NzazVfbXNnID0g MTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKChwYXJzZWRhdFtpKzFdICYg QVVUSF9XSE9fTUFTSykgPT0KLSAgICAgICAgICAgICAgICAgICAgICBBVVRIX0NMSUVOVF9UT19T RVJWRVIgJiYKLSAgICAgICAgICAgICAgICAgICAgICB0bl9ob3dfb2socGFyc2VkYXRbaSsxXSkg JiYgdG5fZW5jX29rKHBhcnNlZGF0W2krMV0pKSB7Ci0gICAgICAgICAgICAgICAgYXV0aF9jcnlw dCA9IHBhcnNlZGF0W2krMV0gJiBBVVRIX0VOQ1JZUFRfTUFTSzsKLSNpZmRlZiBDS19FTkNSWVBU SU9OCi0gICAgICAgICAgICAgICAgaWYgKCBhdXRoX2NyeXB0ID09IEFVVEhfRU5DUllQVF9BRlRF Ul9FWENIQU5HRSApIHsKLSAgICAgICAgICAgICAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BU X0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7Ci0gICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VX01P REUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7Ci0gICAgICAgICAgICAgICAgfQotI2Vu ZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSAgICAgICAgICAgICAgICBhdXRoX2Z3ZCA9IHBhcnNl ZGF0W2krMV0gJiBJTklfQ1JFRF9GV0RfTUFTSzsKLSAgICAgICAgICAgICAgICBhdXRoZW50aWNh dGlvbl92ZXJzaW9uID0gQVVUSFRZUEVfR1NTQVBJX0tSQjU7Ci0gICAgICAgICAgICAgICAgYXV0 aF9ob3cgPSBwYXJzZWRhdFtpKzFdICYgQVVUSF9IT1dfTUFTSzsKLSAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIEdTU0FQSV9LUkI1ICov Ci0jaWZkZWYgS1JCNQotICAgICAgICAgICAgaWYgKCBhdG9rKEFVVEhUWVBFX0tFUkJFUk9TX1Y1 KSAmJgotICAgICAgICAgICAgICAgICBwYXJzZWRhdFtpXSA9PSBBVVRIVFlQRV9LRVJCRVJPU19W NSAmJgotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICBoS1JCNV8zMiAmJgotI2VuZGlmIC8q IE9TMiAqLwotI2lmZGVmIE5PX0ZUUF9BVVRICi0gICAgICAgICAgICAgICAgIHN0cmNtcCgiZnRw IixzelVzZXJOYW1lKSAmJiBzdHJjbXAoImFub255bW91cyIsc3pVc2VyTmFtZSkgJiYKLSNlbmRp ZiAvKiBOT19GVFBfQVVUSCAqLwotICAgICAgICAgICAgICAgICBja19rcmI1X2lzX2luc3RhbGxl ZCgpICYmICFrcmI1X21zZykgewotCi0gICAgICAgICAgICAgICAgLyogV2l0aG91dCBlbmNyeXB0 aW9uIHdlIGNhbid0IHBlcmZvcm0gbXV0dWFsIGF1dGhlbnRpY2F0aW9uICovCi0gICAgICAgICAg ICAgICAgaWYgKCAocGFyc2VkYXRbaSsxXSAmIEFVVEhfSE9XX01BU0spID09IEFVVEhfSE9XX01V VFVBTCAmJgotICAgICAgICAgICAgICAgICAgICAgIWNrX2NyeXB0X2lzX2luc3RhbGxlZCgpKQot ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgIC8qIFNraXAg b3ZlciBlbnRyaWVzIHRoYXQgcmVxdWVzdCBjcmVkZW50aWFsIGZvcndhcmRpbmcgKi8KLSAgICAg ICAgICAgICAgICAvKiBpZiB3ZSBhcmUgbm90IGZvcndhcmRpbmcuICAgICAgICAgICAgICAgICAg ICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgaWYgKCghZm9yd2FyZF9mbGFnICYmIChwYXJz ZWRhdFtpKzFdICYgSU5JX0NSRURfRldEX01BU0spKSB8fAotICAgICAgICAgICAgICAgICAgICAg KGZvcndhcmRfZmxhZyAmJgotICAgICAgICAgICAgICAgICAgICAgICAoKHBhcnNlZGF0W2krMV0g JiBBVVRIX0hPV19NQVNLKSA9PSBBVVRIX0hPV19PTkVfV0FZKSkpCi0gICAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgaWYgKCAhazVfYXV0aF9zZW5kKHBhcnNl ZGF0W2krMV0gJiBBVVRIX0hPV19NQVNLLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGFyc2VkYXRbaSsxXSAmIEFVVEhfRU5DUllQVF9NQVNLLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcGFyc2VkYXRbaSsxXSAmIElOSV9DUkVEX0ZXRF9NQVNLKSAp Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSBhcmUgYXV0 by1nZXR0aW5nIFRHVHMsIHRyeSAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoICFja19rcmI1 X2lzX3RndF92YWxpZCgpICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIktlcmJlcm9zIDU6IFRpY2tldCBHZXR0aW5nIFRpY2tl dCBub3QgdmFsaWQuXHJcbiIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgICAgIGtyYjVfbXNnID0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg ZWxzZSBpZiAoKHBhcnNlZGF0W2krMV0gJiBBVVRIX1dIT19NQVNLKSA9PQotICAgICAgICAgICAg ICAgICAgICAgICAgICBBVVRIX0NMSUVOVF9UT19TRVJWRVIgJiYKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgdG5faG93X29rKHBhcnNlZGF0W2krMV0pICYmIHRuX2VuY19vayhwYXJzZWRhdFtp KzFdKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoKHBhcnNl ZGF0W2krMV0gJiBBVVRIX0VOQ1JZUFRfTUFTSykgPT0KLSAgICAgICAgICAgICAgICAgICAgICAg ICBBVVRIX0VOQ1JZUFRfVVNJTkdfVEVMT1BUKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAg IChURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPT0gVE5fTkdfUkYgfHwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID09 IFROX05HX1JGKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg ICAgICAgICAgICBpZiAoKChwYXJzZWRhdFtpKzFdICYgQVVUSF9FTkNSWVBUX01BU0spID09Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgQVVUSF9FTkNSWVBUX1NUQVJUX1RMUykgJiYKLSAgICAg ICAgICAgICAgICAgICAgICAgICAoIWNrX3NzbGVheV9pc19pbnN0YWxsZWQoKQotI2lmZGVmIENL X1NTTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgISh0bHNfYWN0aXZlX2ZsYWcgfHwg c3NsX2FjdGl2ZV9mbGFnKQotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg ICAgICAgICAgICBhdXRoX2NyeXB0ID0gcGFyc2VkYXRbaSsxXSAmIEFVVEhfRU5DUllQVF9NQVNL OwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dGhfY3J5 cHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNS WVBUSU9OKSA9IFROX05HX01VOwotICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1VfTU9E RShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19NVTsKLSAgICAgICAgICAgICAgICAgICAgfQot I2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAgICAg ICAgICAgaWYgKCBhdXRoX2NyeXB0ID09IEFVVEhfRU5DUllQVF9TVEFSVF9UTFMgJiYKLSAgICAg ICAgICAgICAgICAgICAgICAgICBja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkgJiYKLSAgICAgICAg ICAgICAgICAgICAgICAgICAodGxzX2FjdGl2ZV9mbGFnIHx8IHNzbF9hY3RpdmVfZmxhZykgKSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElP TikgPSBUTl9OR19SRjsKLSAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VX01PREUoVEVM T1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSNlbmRp ZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb25fdmVyc2lv biA9IEFVVEhUWVBFX0tFUkJFUk9TX1Y1OwotICAgICAgICAgICAgICAgICAgICBhdXRoX2hvdyA9 IHBhcnNlZGF0W2krMV0gJiBBVVRIX0hPV19NQVNLOwotICAgICAgICAgICAgICAgICAgICBpZiAo IGF1dGhfaG93ID09IEFVVEhfSE9XX09ORV9XQVkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg ICBURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsKLSAgICAgICAg ICAgICAgICAgICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdf UkY7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotI2VuZGlmIC8qIEtSQjUgKi8KLSNpZmRl ZiBLUkI0Ci0gICAgICAgICAgICBpZiAoIGF0b2soQVVUSFRZUEVfS0VSQkVST1NfVjQpICYmCi0g ICAgICAgICAgICAgICAgIHBhcnNlZGF0W2ldID09IEFVVEhUWVBFX0tFUkJFUk9TX1Y0ICYmCi0j aWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgIGhLUkI0XzMyICYmCi0jZW5kaWYgLyogT1MyICov Ci0jaWZkZWYgTk9fRlRQX0FVVEgKLSAgICAgICAgICAgICAgICAgc3RyY21wKCJmdHAiLHN6VXNl ck5hbWUpICYmIHN0cmNtcCgiYW5vbnltb3VzIixzelVzZXJOYW1lKSAmJgotI2VuZGlmIC8qIE5P X0ZUUF9BVVRIICovCi0gICAgICAgICAgICAgICAgIGNrX2tyYjRfaXNfaW5zdGFsbGVkKCkgJiYg IWtyYjRfbXNnKSB7Ci0gICAgICAgICAgICAgICAgaW50IHJjID0gMDsKLQotICAgICAgICAgICAg ICAgIC8qIFdpdGhvdXQgZW5jcnlwdGlvbiB3ZSBjYW4ndCBwZXJmb3JtIG11dHVhbCBhdXRoZW50 aWNhdGlvbiAqLwotICAgICAgICAgICAgICAgIGlmICggKHBhcnNlZGF0W2krMV0gJiBBVVRIX0hP V19NQVNLKSA9PSBBVVRIX0hPV19NVVRVQUwgJiYKLSAgICAgICAgICAgICAgICAgICAgICFja19j cnlwdF9pc19pbnN0YWxsZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAg ICAgICAgICAgICAgICBpZiAoICFrNF9hdXRoX3NlbmQoKSApCi0gICAgICAgICAgICAgICAgewot ICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSBhcmUgYXV0by1nZXR0aW5nIFRHVHMsIHRyeSAq LwotICAgICAgICAgICAgICAgICAgICBpZiAoICFja19rcmI0X2lzX3RndF92YWxpZCgpICkgewot ICAgICAgICAgICAgICAgICAgICBwcmludGYoIktlcmJlcm9zIDQ6IFRpY2tldCBHZXR0aW5nIFRp Y2tldCBub3QgdmFsaWQuXHJcbiIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgICAgIGtyYjRfbXNnID0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgZWxzZSBpZiAoKHBhcnNlZGF0W2krMV0gJiBBVVRIX1dIT19NQVNLKSA9PQotICAgICAgICAg ICAgICAgICAgICAgICAgICBBVVRIX0NMSUVOVF9UT19TRVJWRVIgJiYKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgdG5faG93X29rKHBhcnNlZGF0W2krMV0pICYmIHRuX2VuY19vayhwYXJzZWRh dFtpKzFdKSkKLSAgICAgICAgICAgICAgICB7Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAg ICAgICAgICAgICAgICBpZiAoKHBhcnNlZGF0W2krMV0gJiBBVVRIX0VOQ1JZUFRfTUFTSykgJiYK LSAgICAgICAgICAgICAgICAgICAgICAgIChURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElP TikgPT0gVE5fTkdfUkYgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RF KFRFTE9QVF9FTkNSWVBUSU9OKSA9PSBUTl9OR19SRikpCi0gICAgICAgICAgICAgICAgICAgICAg Y29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGF1dGhfY3J5cHQgPSBwYXJzZWRhdFtpKzFd ICYgQVVUSF9FTkNSWVBUX01BU0s7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdXRoX2NyeXB0 KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQ VElPTikgPSBUTl9OR19NVTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VX01PREUo VEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfTVU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSNl bmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAgICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0 aW9uX3ZlcnNpb24gPSBBVVRIVFlQRV9LRVJCRVJPU19WNDsKLSAgICAgICAgICAgICAgICAgICAg YXV0aF9ob3cgPSBwYXJzZWRhdFtpKzFdICYgQVVUSF9IT1dfTUFTSzsKLSAgICAgICAgICAgICAg ICAgICAgaWYgKCBhdXRoX2hvdyA9PSBBVVRIX0hPV19PTkVfV0FZICkgewotICAgICAgICAgICAg ICAgICAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7 Ci0gICAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9O KSA9IFROX05HX1JGOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBLUkI0 ICovCi0jaWZkZWYgTlRMTQotICAgICAgICBpZiAoIGF0b2soQVVUSFRZUEVfTlRMTSkgJiYKLSAg ICAgICAgICAgICBwYXJzZWRhdFtpXSA9PSBBVVRIVFlQRV9OVExNICYmCi0gICAgICAgICAgICAg Y2tfbnRsbV9pc192YWxpZCgxKSAmJgotICAgICAgICAgICAgIG50bG1fYXV0aF9zZW5kKCkgPT0g MCkgewotICAgICAgICAgICAgaWYgKChwYXJzZWRhdFtpKzFdICYgQVVUSF9XSE9fTUFTSykgPT0g QVVUSF9DTElFTlRfVE9fU0VSVkVSICYmCi0gICAgICAgICAgICAgICAgIHRuX2hvd19vayhwYXJz ZWRhdFtpKzFdKSAmJiB0bl9lbmNfb2socGFyc2VkYXRbaSsxXSkpIHsKLSNpZmRlZiBDS19FTkNS WVBUSU9OCi0gICAgICAgICAgICAgICAgLyogTlRMTSBkb2VzIG5vdCBzdXBwb3J0IFRlbG5ldCBF bmNyeXB0aW9uICovCi0gICAgICAgICAgICAgICAgaWYgKChwYXJzZWRhdFtpKzFdICYgQVVUSF9F TkNSWVBUX01BU0spKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg ICAgICBhdXRoX2NyeXB0ID0gcGFyc2VkYXRbaSsxXSAmIEFVVEhfRU5DUllQVF9NQVNLOwotI2Vu ZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSAgICAgICAgICAgICAgICBURUxPUFRfTUVfTU9ERShU RUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsKLSAgICAgICAgICAgICAgICBURUxPUFRfVV9N T0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOwotICAgICAgICAgICAgICAgIGF1dGhl bnRpY2F0aW9uX3ZlcnNpb24gPSBBVVRIVFlQRV9OVExNOwotICAgICAgICAgICAgICAgIGF1dGhf aG93ID0gcGFyc2VkYXRbaSsxXSAmIEFVVEhfSE9XX01BU0s7Ci0gICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOVExNICovCi0gICAgICAg IH0KLSAgICB9Ci0KLSAgICBpZiAoYXV0aF9ob3cgPT0gLTEpIHsgICAgICAgICAgICAgICAvKiBE aWQgd2UgZmluZCBvbmU/ICovCi0gICAgICAgIHN3aXRjaCAoIGF1dGhfdHlwZV91c2VyWzBdICkg eyAgLyogSWYgbm90LCBhYm9ydCB0aGUgbmVnb3RpYXRpb24gKi8KLSAgICAgICAgY2FzZSBBVVRI VFlQRV9OVUxMOgotICAgICAgICAgICAgYXV0aF9hYm9ydCgiVXNlciByZWZ1c2VkIHRvIGFjY2Vw dCBhbnkgYXV0aGVudGljYXRpb24gbWV0aG9kIiwwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICBjYXNlIEFVVEhUWVBFX0FVVE86Ci0gICAgICAgICAgICBhdXRoX2Fib3J0KCJObyBhdXRo ZW50aWNhdGlvbiBtZXRob2QgYXZhaWxhYmxlIiwgMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg ICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAgY2hhciBtc2dbODBdOwotICAgICAgICAgICAg Y2ttYWttc2cobXNnLDgwLEFVVEhUWVBFX05BTUUoYXV0aF90eXBlX3VzZXJbMF0pLAotICAgICAg ICAgICAgICAgICAgICAgICIgY291bGQgbm90IGJlIG5lZ290aWF0ZWQiLE5VTEwsTlVMTAotICAg ICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGF1dGhfYWJvcnQobXNnLCAwKTsKLSAg ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwot ICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOwotICAgIH0KLQotICAgIHByaW50ZigiQXV0aGVu dGljYXRpbmcgd2l0aCAlc1xyXG4iLAotICAgICAgICAgICAgQVVUSFRZUEVfTkFNRShhdXRoZW50 aWNhdGlvbl92ZXJzaW9uKSk7Ci0KLSAgICAvKiBTZW5kIFRlbG5ldCBBdXRoIE5hbWUgbWVzc2Fn ZSAoaWYgbmVjZXNzYXJ5KSAqLwotICAgIHN3aXRjaCAoIGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24g KSB7Ci0gICAgY2FzZSBBVVRIVFlQRV9TUlA6Ci0gICAgY2FzZSBBVVRIVFlQRV9LRVJCRVJPU19W NDoKLSAgICBjYXNlIEFVVEhUWVBFX0tFUkJFUk9TX1Y1OgotICAgIGNhc2UgQVVUSFRZUEVfR1NT QVBJX0tSQjU6Ci0gICAgICAgIC8qIGlmIHdlIGRvIG5vdCBoYXZlIGEgbmFtZSB0byBsb2dpbiB3 aXRoIGdldCBvbmUgbm93LiAqLwotICAgICAgICB3aGlsZSAoIHN6VXNlck5hbWVbMF0gPT0gJ1ww JyApIHsKLSAgICAgICAgICAgIGV4dGVybiBjaGFyICogdG5fcHJfdWlkOwotICAgICAgICAgICAg aW50IG9rID0gdXFfdHh0KE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICB0bl9wcl91aWQgJiYg dG5fcHJfdWlkWzBdID8gdG5fcHJfdWlkIDogIkhvc3QgVXNlcmlkOiAiLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDEsIE5VTEwsIHN6VXNlck5hbWUsIDYzLCBOVUxMLERFRkFVTFRfVVFf VElNRU9VVCk7Ci0gICAgICAgICAgICBpZiAoICFvayApCi0gICAgICAgICAgICAgICAgcmV0dXJu IEFVVEhfRkFJTFVSRTsKLSAgICAgICAgfQotICAgICAgICBwbGVuID0gc3RybGVuKHN6VXNlck5h bWUpOwotICAgICAgICBwbmFtZSA9ICh1bnNpZ25lZCBjaGFyICopIHN6VXNlck5hbWU7Ci0KLSAg ICAgICAgLyogQ29uc3RydWN0IFRlbG5ldCBEZWJ1Z2dpbmcgTWVzc2FnZSAqLwotICAgICAgICBp ZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgICAgIGNrbWFreG1zZyh0 bl9tc2csVE5fTVNHX0xFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNC ICIsVEVMT1BUKFRFTE9QVF9BVVRIRU5USUNBVElPTiksCi0gICAgICAgICAgICAgICAgICAgICAg ICIgTkFNRSAiLChjaGFyICopcG5hbWUsIiBJQUMgU0UiLE5VTEwsCi0gICAgICAgICAgICAgICAg ICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMCi0gICAgICAgICAgICAgICAgICAg ICApOwotICAgICAgICAgICAgZGVidWcoRjEwMCx0bl9tc2csIiIsMCk7Ci0gICAgICAgICAgICBp ZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnKTsKLSAgICAgICAgfQotCi0gICAg ICAgIC8qIENvbnN0cnVjdCBhbmQgc2VuZCBBdXRoZW50aWNhdGlvbiBOYW1lIHN1Ym5lZ290aWF0 aW9uICovCi0gICAgICAgIGlmICggcGxlbiA8IHNpemVvZihidWYpIC0gNiApIHsKLSAgICAgICAg ICAgIHNwcmludGYoKGNoYXIgKilidWYsICIlYyVjJWMlYyIsIElBQywgU0IsIAotICAgICAgICAg ICAgICAgICAgICAgVEVMT1BUX0FVVEhFTlRJQ0FUSU9OLAotICAgICAgICAgICAgICAgICAgICAg VEVMUVVBTF9OQU1FKTsKLSAgICAgICAgICAgIG1lbWNweSgmYnVmWzRdLCBwbmFtZSwgcGxlbik7 ICAgICAgICAgICAgICAgLyogc2FmZSAqLwotICAgICAgICAgICAgc3ByaW50ZigoY2hhciAqKSZi dWZbcGxlbiArIDRdLCAiJWMlYyIsIElBQywgU0UpOyAgIC8qIHNhZmUgKi8KLSNpZmRlZiBPUzIK LSAgICAgICAgICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwot I2VuZGlmCi0gICAgICAgICAgICB0dG9sKChDSEFSICopYnVmLCBwbGVuKzYpOwotI2lmZGVmIE9T MgotICAgICAgICAgICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7Ci0jZW5kaWYKLSAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgIHNwcmludGYoKGNoYXIgKilidWYsICIlYyVjJWMlYyVjJWMiLCBJ QUMsIFNCLCAKLSAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9BVVRIRU5USUNBVElPTiwKLSAg ICAgICAgICAgICAgICAgICAgIFRFTFFVQUxfTkFNRSwgSUFDLCBTRSk7ICAgIC8qIHNhZmUgKi8K LSNpZmRlZiBPUzIKLSAgICAgICAgICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5J VEVfV0FJVCApOwotI2VuZGlmCi0gICAgICAgICAgICB0dG9sKChDSEFSICopYnVmLCA2KTsKLSNp ZmRlZiBPUzIKLSAgICAgICAgICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwotI2VuZGlmCi0gICAg ICAgIH0KLSAgICB9Ci0KLSAgICAvKiBDb25zdHJ1Y3QgQXV0aGVudGljYXRpb24gTW9kZSBzdWJu ZWdvdGlhdGlvbiBtZXNzYWdlIChpZiBuZWNlc3NhcnkpICovCi0gICAgc3dpdGNoICggYXV0aGVu dGljYXRpb25fdmVyc2lvbiApIHsKLSAgICBjYXNlIEFVVEhUWVBFX1NSUDoKLSAgICBjYXNlIEFV VEhUWVBFX0tFUkJFUk9TX1Y0OgotICAgIGNhc2UgQVVUSFRZUEVfS0VSQkVST1NfVjU6Ci0gICAg Y2FzZSBBVVRIVFlQRV9HU1NBUElfS1JCNToKLSAgICBjYXNlIEFVVEhUWVBFX05UTE06Ci0gICAg ICAgIG1vZGUgPSBBVVRIX0NMSUVOVF9UT19TRVJWRVIgfCAoYXV0aF9ob3cgJiBBVVRIX0hPV19N QVNLKSB8IGF1dGhfY3J5cHQKLSNpZmRlZiBVU0VfSU5JX0NSRURfRldECi0gICAgICAgICAgICAg ICB8ICgoKGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24gPT0gQVVUSFRZUEVfS0VSQkVST1NfVjUpICYm Ci0gICAgICAgICAgICAgICAgICBhdXRoX2Z3ZCk/SU5JX0NSRURfRldEX09OOklOSV9DUkVEX0ZX RF9PRkYpCi0jZW5kaWYgLyogVVNFX0lOSV9DUkVEX0ZXRCAqLwotICAgICAgICAgICAgICAgOwot ICAgICAgICBzcHJpbnRmKChjaGFyICopYnVmLCAiJWMlYyVjJWMlYyVjJWMiLAotICAgICAgICAg ICAgICAgICBJQUMsIFNCLCBURUxPUFRfQVVUSEVOVElDQVRJT04sCi0gICAgICAgICAgICAgICAg IFRFTFFVQUxfSVMsCi0gICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24sCi0g ICAgICAgICAgICAgICAgIG1vZGUsCi0gICAgICAgICAgICAgICAgIEtSQl9BVVRIKTsgICAgIC8q IHNhZmUgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgLyogU2VuZCBpbml0aWFsIGF1 dGhlbnRpY2F0aW9uIGRhdGEgKi8KLSAgICBzd2l0Y2ggKCBhdXRoZW50aWNhdGlvbl92ZXJzaW9u ICkgewotI2lmZGVmIENLX1NTTAotICAgIGNhc2UgQVVUSFRZUEVfU1NMOgotICAgICAgICBTZW5k U1NMQXV0aFNCKFNTTF9TVEFSVCxOVUxMLDApOwotICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBT U0wgKi8KLSNpZmRlZiBDS19TUlAKLSAgICBjYXNlIEFVVEhUWVBFX1NSUDoKLSAgICAgICAgc3By aW50ZigmYnVmWzddLCAiJWMlYyIsIElBQywgU0UpOyAgICAgIC8qIHNhZmUgKi8KLSAgICAgICAg aWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7Ci0gICAgICAgICAgICBja21ha3htc2co dG5fbXNnLFROX01TR19MRU4sCi0gICAgICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNC ICIsVEVMT1BUKFRFTE9QVF9BVVRIRU5USUNBVElPTiksCi0gICAgICAgICAgICAgICAgICAgICAg IiBJUyAiLEFVVEhUWVBFX05BTUUoYXV0aGVudGljYXRpb25fdmVyc2lvbiksCi0gICAgICAgICAg ICAgICAgICAgICAgIiBBVVRIICIsQVVUSE1PREVfTkFNRShtb2RlKSwiIElBQyBTRSIsCi0gICAg ICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMCi0gICAgICAgICAgICAg ICAgICAgICApOwotICAgICAgICAgICAgZGVidWcoRjEwMCx0bl9tc2csIiIsMCk7Ci0gICAgICAg ICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnKTsKLSAgICAgICAgfQot I2lmZGVmIE9TMgotICAgICAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dB SVQgKTsKLSNlbmRpZgotICAgICAgICB0dG9sKChDSEFSICopYnVmLCA5KTsKLSNpZmRlZiBPUzIK LSAgICAgICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7Ci0jZW5kaWYKLSAgICAgICAgYnJlYWs7Ci0j ZW5kaWYgLyogU1JQICovCi0jaWZkZWYgTlRMTQotICAgIGNhc2UgQVVUSFRZUEVfTlRMTTogewot ICAgICAgICBpbnQgbGVuZ3RoID0gMDsKLQotICAgICAgICBmb3IgKCBpPTAgOyBpPE5UTE1TZWNC dWZbMF0uY2JCdWZmZXIgOyBpKysgKSB7Ci0gICAgICAgICAgICBpZiAoICgoY2hhciAqKU5UTE1T ZWNCdWZbMF0ucHZCdWZmZXIpW2ldID09IElBQyApCi0gICAgICAgICAgICAgICAgaWFjY250Kys7 Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoICggMipzaXplb2YoVUxPTkcpICsgTlRMTVNlY0J1 ZlswXS5jYkJ1ZmZlciArIGlhY2NudCArIDEwKSAgPAotICAgICAgICAgICAgIHNpemVvZihidWYp ICkgewotICAgICAgICAgICAgbGVuZ3RoID0gY29weV9mb3JfbmV0KCZidWZbN10sKGNoYXIgKikm TlRMTVNlY0J1ZlswXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMipzaXpl b2YoVUxPTkcpKTsKLSAgICAgICAgICAgIGxlbmd0aCArPSBjb3B5X2Zvcl9uZXQoJmJ1Zls3K2xl bmd0aF0sIE5UTE1TZWNCdWZbMF0ucHZCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTlRMTVNlY0J1ZlswXS5jYkJ1ZmZlcik7Ci0gICAgICAgIH0KLSAgICAgICAgc3By aW50ZigmYnVmWzcrbGVuZ3RoXSwgIiVjJWMiLCBJQUMsIFNFKTsKLQotICAgICAgICBpZiAoZGVi bG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKLSAgICAgICAgICAgIGludCBpOwotICAgICAgICAg ICAgY2ttYWt4bXNnKHRuX21zZyxUTl9NU0dfTEVOLAotICAgICAgICAgICAgICAgICAgICAgICJU RUxORVQgU0VOVCBTQiAiLFRFTE9QVChURUxPUFRfQVVUSEVOVElDQVRJT04pLAotICAgICAgICAg ICAgICAgICAgICAgICIgSVMgIixBVVRIVFlQRV9OQU1FKGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24p LCIgIiwKLSAgICAgICAgICAgICAgICAgICAgICBBVVRITU9ERV9OQU1FKG1vZGUpLCIgTlRMTV9B VVRIICIsCi0gICAgICAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTAot ICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICB0bl9oZXgoKGNoYXIgKil0bl9t c2csVE5fTVNHX0xFTiwmYnVmWzddLGxlbmd0aCk7Ci0gICAgICAgICAgICBja3N0cm5jYXQodG5f bXNnLCJJQUMgU0UiLFROX01TR19MRU4pOwotICAgICAgICAgICAgZGVidWcoRjEwMCx0bl9tc2cs IiIsMCk7Ci0gICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNn KTsKLSAgICAgICAgfQotI2lmZGVmIE9TMgotICAgICAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNF TV9JTkRFRklOSVRFX1dBSVQgKTsKLSNlbmRpZgotICAgICAgICB0dG9sKChDSEFSICopYnVmLCBs ZW5ndGgrOSk7Ci0jaWZkZWYgT1MyCi0gICAgICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwotI2Vu ZGlmCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSNlbmRpZiAvKiBOVExNICovCi0jaWZkZWYgS1JC NAotICAgIGNhc2UgQVVUSFRZUEVfS0VSQkVST1NfVjQ6Ci0gICAgICAgIGZvciAoIGk9MCA7IGk8 azRfYXV0aC5sZW5ndGggOyBpKysgKSB7Ci0gICAgICAgICAgICBpZiAoIGs0X2F1dGguZGF0W2ld ID09IElBQyApCi0gICAgICAgICAgICAgICAgaWFjY250Kys7Ci0gICAgICAgIH0KLQotICAgICAg ICBpZiAoIGs0X2F1dGgubGVuZ3RoICsgaWFjY250ICsgMTAgPCBzaXplb2YoYnVmKSApCi0gICAg ICAgICAgazRfYXV0aC5sZW5ndGggPSBjb3B5X2Zvcl9uZXQoJmJ1Zls3XSwgazRfYXV0aC5kYXQs IGs0X2F1dGgubGVuZ3RoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgazRfYXV0aC5sZW5n dGggPSAwOwotICAgICAgICBzcHJpbnRmKCZidWZbazRfYXV0aC5sZW5ndGgrN10sICIlYyVjIiwg SUFDLCBTRSk7Ci0KLSAgICAgICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7Ci0g ICAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICAgIGNrbWFreG1zZyh0bl9tc2csVE5fTVNHX0xF TiwKLSAgICAgICAgICAgICAgICAgICAgICAiVEVMTkVUIFNFTlQgU0IgIixURUxPUFQoVEVMT1BU X0FVVEhFTlRJQ0FUSU9OKSwiIElTICIsCi0gICAgICAgICAgICAgICAgICAgICAgQVVUSFRZUEVf TkFNRShhdXRoZW50aWNhdGlvbl92ZXJzaW9uKSwiICIsCi0gICAgICAgICAgICAgICAgICAgICAg QVVUSE1PREVfTkFNRShtb2RlKSwiIEFVVEggIiwKLSAgICAgICAgICAgICAgICAgICAgICBOVUxM LE5VTEwsTlVMTCxOVUxMLE5VTEwKLSAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAg ICB0bl9oZXgoKGNoYXIgKil0bl9tc2csVE5fTVNHX0xFTiwmYnVmWzddLGs0X2F1dGgubGVuZ3Ro KTsKLSAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csIklBQyBTRSIsVE5fTVNHX0xFTik7Ci0g ICAgICAgICAgICBkZWJ1ZyhGMTAwLHRuX21zZywiIiwwKTsKLSAgICAgICAgICAgIGlmICh0bl9k ZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2cpOwotICAgICAgICB9Ci0jaWZkZWYgT1MyCi0g ICAgICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwotI2VuZGlm Ci0gICAgICAgIHR0b2woKENIQVIgKilidWYsIGs0X2F1dGgubGVuZ3RoKzkpOwotI2lmZGVmIE9T MgotICAgICAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKLSNlbmRpZgotCi0jaWZuZGVmIFJFTU9W RV9GT1JfRVhQT1JUCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICAvKgotICAgICAgICAg KiBJZiB3ZSBhcmUgZG9pbmcgbXV0dWFsIGF1dGhlbnRpY2F0aW9uLCBnZXQgc2V0IHVwIHRvIHNl bmQKLSAgICAgICAgICogdGhlIGNoYWxsZW5nZSwgYW5kIHZlcmlmeSBpdCB3aGVuIHRoZSByZXNw b25zZSBjb21lcyBiYWNrLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKChhdXRoX2hvdyAmIEFV VEhfSE9XX01BU0spID09IEFVVEhfSE9XX01VVFVBTCkgewotICAgICAgICAgICAgcmVnaXN0ZXIg aW50IGk7Ci0gICAgICAgICAgICBpbnQgcmMgPSAwOwotCi0jaWZkZWYgTUlUX0NVUlJFTlQKLSAg ICAgICAgICAgIGRhdGEuZGF0YSA9IGNyZWQuc2Vzc2lvbjsKLSAgICAgICAgICAgIGRhdGEubGVu Z3RoID0gODsgLyogc2l6ZW9mKGNyZWQuc2Vzc2lvbikgKi87Ci0KLSAgICAgICAgICAgIGlmIChj b2RlID0ga3JiNV9jX3JhbmRvbV9zZWVkKGs1X2NvbnRleHQsICZkYXRhKSkgewotICAgICAgICAg ICAgICAgIGNvbV9lcnIoImxpYnRlbG5ldCIsIGNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgIndoaWxlIHNlZWRpbmcgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IiKTsKLSAgICAgICAgICAg ICAgICByZXR1cm4oMCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjb2RlID0g a3JiNV9jX21ha2VfcmFuZG9tX2tleShrNV9jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBFTkNUWVBFX0RFU19DQkNfUkFXLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmFuZG9tX2tleSkpIHsKLSAg ICAgICAgICAgICAgICBjb21fZXJyKCJsaWJ0ZWxuZXQiLCBjb2RlLAotICAgICAgICAgICAgICAg ICAgICAgICAgICJ3aGlsZSBjcmVhdGluZyByYW5kb20gc2Vzc2lvbiBrZXkiKTsKLSAgICAgICAg ICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qIHRoZSBr cmI0IGNvZGUgdXNlcyBlY2IgbW9kZSwgYnV0IG9uIGEgc2luZ2xlIGJsb2NrCi0gICAgICAgICAg ICB3aXRoIGEgemVybyBpdmVjLCBlY2IgYW5kIGNiYyBhcmUgdGhlIHNhbWUgKi8KLSAgICAgICAg ICAgIGs0X2tyYmtleS5lbmN0eXBlID0gRU5DVFlQRV9ERVNfQ0JDX1JBVzsKLSAgICAgICAgICAg IGs0X2tyYmtleS5sZW5ndGggPSA4OwotICAgICAgICAgICAgazRfa3Jia2V5LmNvbnRlbnRzID0g Y3JlZC5zZXNzaW9uOwotCi0gICAgICAgICAgICBlbmNkYXRhLmNpcGhlcnRleHQuZGF0YSA9IHJh bmRvbV9rZXkuY29udGVudHM7Ci0gICAgICAgICAgICBlbmNkYXRhLmNpcGhlcnRleHQubGVuZ3Ro ID0gcmFuZG9tX2tleS5sZW5ndGg7Ci0gICAgICAgICAgICBlbmNkYXRhLmVuY3R5cGUgPSBFTkNU WVBFX1VOS05PV047Ci0KLSAgICAgICAgICAgIGRhdGEuZGF0YSA9IGs0X3Nlc3Npb25fa2V5Owot ICAgICAgICAgICAgZGF0YS5sZW5ndGggPSA4OwotCi0gICAgICAgICAgICBjb2RlID0ga3JiNV9j X2RlY3J5cHQoazVfY29udGV4dCwgJms0X2tyYmtleSwgMCwgMCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmVuY2RhdGEsICZkYXRhKTsKLQotICAgICAgICAgICAga3JiNV9m cmVlX2tleWJsb2NrX2NvbnRlbnRzKGs1X2NvbnRleHQsICZyYW5kb21fa2V5KTsKLQotICAgICAg ICAgICAgaWYgKGNvZGUpIHsKLSAgICAgICAgICAgICAgICBjb21fZXJyKCJsaWJ0ZWxuZXQiLCBj b2RlLCAid2hpbGUgZW5jcnlwdGluZyByYW5kb20ga2V5Iik7Ci0gICAgICAgICAgICAgICAgcmV0 dXJuKDApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBlbmNkYXRhLmNpcGhlcnRleHQu ZGF0YSA9IGs0X3Nlc3Npb25fa2V5OwotICAgICAgICAgICAgZW5jZGF0YS5jaXBoZXJ0ZXh0Lmxl bmd0aCA9IDg7Ci0gICAgICAgICAgICBlbmNkYXRhLmVuY3R5cGUgPSBFTkNUWVBFX1VOS05PV047 Ci0KLSAgICAgICAgICAgIGRhdGEuZGF0YSA9IGs0X2NoYWxsZW5nZTsKLSAgICAgICAgICAgIGRh dGEubGVuZ3RoID0gODsKLQotICAgICAgICAgICAgY29kZSA9IGtyYjVfY19kZWNyeXB0KGs1X2Nv bnRleHQsICZrNF9rcmJrZXksIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZlbmNkYXRhLCAmZGF0YSk7Ci0jZWxzZSAvKiBNSVRfQ1VSUkVOVCAqLwotICAgICAgICAg ICAgbWVtc2V0KGs0X3NjaGVkLDAsc2l6ZW9mKFNjaGVkdWxlKSk7Ci0gICAgICAgICAgICBja2hl eGR1bXAoImF1dGhfc2VuZCIsY3JlZC5zZXNzaW9uLDgpOwotICAgICAgICAgICAgcmMgPSBkZXNf a2V5X3NjaGVkKGNyZWQuc2Vzc2lvbiwgazRfc2NoZWQpOwotICAgICAgICAgICAgaWYgKCByYyA9 PSAtMSApIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9JbnZhbGlkIERFUyBrZXkgc3BlY2lm aWVkIGluIGNyZWRlbnRpYWxzXHJcbiIpOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImF1 dGhfc2VuZCIsCi0gICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgREVTIEtleSBzcGVjaWZp ZWQgaW4gY3JlZGVudGlhbHMiLDApOwotICAgICAgICAgICAgfSBlbHNlIGlmICggcmMgPT0gLTIg KSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/V2VhayBERVMga2V5IHNwZWNpZmllZCBpbiBj cmVkZW50aWFsc1xyXG4iKTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJhdXRoX3NlbmQi LAotICAgICAgICAgICAgICAgICAgICAgICJ3ZWFrIERFUyBLZXkgc3BlY2lmaWVkIGluIGNyZWRl bnRpYWxzIiwwKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIHJjICE9IDAgKSB7Ci0gICAgICAg ICAgICAgICAgcHJpbnRmKCI/REVTIEtleSBTY2hlZHVsZSBub3Qgc2V0IGJ5IGNyZWRlbnRpYWxz XHJcbiIpOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImF1dGhfc2VuZCIsCi0gICAgICAg ICAgICAgICAgICAgICAgIkRFUyBLZXkgU2NoZWR1bGUgbm90IHNldCBieSBjcmVkZW50aWFscyIs MCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBja2hleGR1bXAoImF1dGhfc2VuZCBzY2hl ZHVsZSIsazRfc2NoZWQsOCoxNik7Ci0KLSAgICAgICAgICAgIGRlc19zZXRfcmFuZG9tX2dlbmVy YXRvcl9zZWVkKGNyZWQuc2Vzc2lvbik7Ci0KLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAg ICAgICBkZXNfbmV3X3JhbmRvbV9rZXkoazRfc2Vzc2lvbl9rZXkpOwotICAgICAgICAgICAgICAg IGRlc19maXh1cF9rZXlfcGFyaXR5KGs0X3Nlc3Npb25fa2V5KTsKLSAgICAgICAgICAgIH0gd2hp bGUgKCBja19kZXNfaXNfd2Vha19rZXkoazRfc2Vzc2lvbl9rZXkpICk7Ci0KLSAgICAgICAgICAg IGNraGV4ZHVtcCgiYXV0aF9zZW5kIGRlc19uZXdfcmFuZG9tX2tleShrNF9zZXNzaW9uX2tleSki LAotICAgICAgICAgICAgICAgICAgICAgazRfc2Vzc2lvbl9rZXksOCk7Ci0KLSAgICAgICAgICAg IC8qIERlY3J5cHQgdGhlIHNlc3Npb24ga2V5IHNvIHRoYXQgd2UgY2FuIHNlbmQgaXQgdG8gdGhl ICovCi0gICAgICAgICAgICAvKiBob3N0IGFzIGEgY2hhbGxlbmdlICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqLwotI2lmZGVmIE5UCi0gICAgICAgICAgICBkZXNfZWNiX2VuY3J5 cHQoazRfc2Vzc2lvbl9rZXksIGs0X3Nlc3Npb25fa2V5LCBrNF9zY2hlZCwgMCk7Ci0jZWxzZSAv KiBOVCAqLwotICAgICAgICAgICAgZGVzX2VjYl9lbmNyeXB0KCZrNF9zZXNzaW9uX2tleSwgJms0 X3Nlc3Npb25fa2V5LCBrNF9zY2hlZCwgMCk7Ci0jZW5kaWYgLyogTlQgKi8KLSAgICAgICAgICAg IGNraGV4ZHVtcCgKLSAgICAgICAgICAgICAgICAiYXV0aF9zZW5kIGRlc19lY2JfZW5jcnlwdChr NF9zZXNzaW9uX2tleSxrNF9zZXNzaW9uX2tleSwwKSIsCi0gICAgICAgICAgICAgICAgazRfc2Vz c2lvbl9rZXksOAotICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgLyogUHJlcGFy ZSB0aGUgcmVzdWx0IG9mIHRoZSBjaGFsbGVuZ2UgKi8KLSAgICAgICAgICAgIC8qIERlY3J5cHQg dGhlIHNlc3Npb25fa2V5LCBhZGQgMSwgYW5kIHRoZW4gZW5jcnlwdCBpdCAqLwotICAgICAgICAg ICAgLyogVGhlIHJlc3VsdCBzdG9yZWQgaW4gazRfY2hhbGxlbmdlIHNob3VsZCBtYXRjaCB0aGUg ICovCi0gICAgICAgICAgICAvKiBLUkI0X1JFU1BPTlNFIHZhbHVlIGZyb20gdGhlIGhvc3QuICAg ICAgICAgICAgICAgICAgKi8KLSNpZmRlZiBOVAotICAgICAgICAgICAgZGVzX2VjYl9lbmNyeXB0 KGs0X3Nlc3Npb25fa2V5LCBrNF9jaGFsbGVuZ2UsIGs0X3NjaGVkLCAwKTsKLSNlbHNlIC8qIE5U ICovCi0gICAgICAgICAgICBkZXNfZWNiX2VuY3J5cHQoJms0X3Nlc3Npb25fa2V5LCAmazRfY2hh bGxlbmdlLCBrNF9zY2hlZCwgMCk7Ci0jZW5kaWYgLyogTlQgKi8KLQotICAgICAgICAgICAgY2to ZXhkdW1wKCJhdXRoX3NlbmQgZGVzX2VjYl9lbmNyeXB0KGs0X3Nlc3Npb25fa2V5LGs0X2NoYWxs ZW5nZSwwKSIsCi0gICAgICAgICAgICAgICAgICAgICBrNF9jaGFsbGVuZ2UsOCk7Ci0jZW5kaWYg LyogTUlUX0NVUlJFTlQgKi8KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAqIEluY3JlbWVu dCB0aGUgY2hhbGxlbmdlIGJ5IDEsIGFuZCBlbmNyeXB0IGl0IGZvcgotICAgICAgICAgICAgKiBs YXRlciBjb21wYXJpc29uLgotICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGZvciAoaSA9IDc7 IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHg7Ci0gICAgICAg ICAgICAgICAgeCA9ICh1bnNpZ25lZCBpbnQpazRfY2hhbGxlbmdlW2ldICsgMTsKLSAgICAgICAg ICAgICAgICBrNF9jaGFsbGVuZ2VbaV0gPSB4OyAgICAvKiBpZ25vcmUgb3ZlcmZsb3cgKi8KLSAg ICAgICAgICAgICAgICBpZiAoeCA8IDI1NikgICAgICAgICAgICAvKiBpZiBubyBvdmVyZmxvdywg YWxsIGRvbmUgKi8KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgICAgICBja2hleGR1bXAoImF1dGhfc2VuZCBrNF9jaGFsbGVuZ2UrMSIsazRfY2hhbGxl bmdlLDgpOwotI2lmZGVmIE1JVF9DVVJSRU5UCi0gICAgICAgICAgICBkYXRhLmRhdGEgPSBrNF9j aGFsbGVuZ2U7Ci0gICAgICAgICAgICBkYXRhLmxlbmd0aCA9IDg7Ci0KLSAgICAgICAgICAgIGVu Y2RhdGEuY2lwaGVydGV4dC5kYXRhID0gazRfY2hhbGxlbmdlOwotICAgICAgICAgICAgZW5jZGF0 YS5jaXBoZXJ0ZXh0Lmxlbmd0aCA9IDg7Ci0gICAgICAgICAgICBlbmNkYXRhLmVuY3R5cGUgPSBF TkNUWVBFX1VOS05PV047Ci0KLSAgICAgICAgICAgIGlmIChjb2RlID0ga3JiNV9jX2VuY3J5cHQo azVfY29udGV4dCwgJms0X2tyYmtleSwgMCwgMCwgJmRhdGEsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmZW5jZGF0YSkpIHsKLSAgICAgICAgICAgICAgICBjb21fZXJy KCJsaWJ0ZWxuZXQiLCBjb2RlLCAid2hpbGUgZW5jcnlwdGluZyByYW5kb20ga2V5Iik7Ci0gICAg ICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICAgICAgfQotI2Vsc2UgLyogTUlUX0NVUlJF TlQgKi8KLSNpZmRlZiBOVAotICAgICAgICAgICAgZGVzX2VjYl9lbmNyeXB0KGs0X2NoYWxsZW5n ZSwgazRfY2hhbGxlbmdlLCBrNF9zY2hlZCwgMSk7Ci0jZWxzZSAvKiBOVCAqLwotICAgICAgICAg ICAgZGVzX2VjYl9lbmNyeXB0KCZrNF9jaGFsbGVuZ2UsICZrNF9jaGFsbGVuZ2UsIGs0X3NjaGVk LCAxKTsKLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICAgICAgY2toZXhkdW1wKCJhdXRoX3NlbmQg ZGVzX2VjYl9lbmNyeXB0KGs0X3Nlc3Npb25fa2V5LGs0X2NoYWxsZW5nZSwxKSIsCi0gICAgICAg ICAgICAgICAgICAgICBrNF9jaGFsbGVuZ2UsOCk7Ci0jZW5kaWYgLyogTUlUX0NVUlJFTlQgKi8K LSAgICAgICAgfQotI2VuZGlmICAvKiBFTkNSWVBUSU9OICovCi0jZW5kaWYgLyogUkVNT1ZFX0ZP Ul9FWFBPUlQgKi8KLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogS1JCNCAqLwotI2lmZGVmIEdT U0FQSV9LUkI1Ci0gICAgY2FzZSBBVVRIVFlQRV9HU1NBUElfS1JCNToKLSAgICAgICAgZm9yICgg aT0wIDsgaTxnc3Nfc2VuZF90b2subGVuZ3RoIDsgaSsrICkgewotICAgICAgICAgICAgaWYgKCAo KGNoYXIgKilnc3Nfc2VuZF90b2sudmFsdWUpW2ldID09IElBQyApCi0gICAgICAgICAgICAgICAg aWFjY250Kys7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIGdzc19zZW5kX3Rvay5sZW5ndGgg KyBpYWNjbnQgKyAxMCA8IHNpemVvZihidWYpICkKLSAgICAgICAgICAgIGdzc19zZW5kX3Rvay5s ZW5ndGggPSBjb3B5X2Zvcl9uZXQoJmJ1Zls3XSwgZ3NzX3NlbmRfdG9rLnZhbHVlLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3Nfc2VuZF90b2subGVu Z3RoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ3NzX3NlbmRfdG9rLmxlbmd0aCA9IDA7 Ci0gICAgICAgIHNwcmludGYoJmJ1Zltnc3Nfc2VuZF90b2subGVuZ3RoKzddLCAiJWMlYyIsIElB QywgU0UpOyAgICAgICAvKiBzYWZlICovCi0gICAgICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8 IGRlYnNlcykgewotICAgICAgICAgICAgaW50IGk7Ci0gICAgICAgICAgICBja21ha3htc2codG5f bXNnLFROX01TR19MRU4sCi0gICAgICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICIs VEVMT1BUKFRFTE9QVF9BVVRIRU5USUNBVElPTiksIiBJUyAiLAotICAgICAgICAgICAgICAgICAg ICAgIEFVVEhUWVBFX05BTUUoYXV0aGVudGljYXRpb25fdmVyc2lvbiksIiAiLAotICAgICAgICAg ICAgICAgICAgICAgIEFVVEhNT0RFX05BTUUobW9kZSksIiBBVVRIICIsCi0gICAgICAgICAgICAg ICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMCi0gICAgICAgICAgICAgICAgICAgICAp OwotICAgICAgICAgICAgdG5faGV4KChjaGFyICopdG5fbXNnLFROX01TR19MRU4sJmJ1Zls3XSxn c3Nfc2VuZF90b2subGVuZ3RoKTsKLSAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csIklBQyBT RSIsVE5fTVNHX0xFTik7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLHRuX21zZywiIiwwKTsKLSAg ICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2cpOwotICAgICAg ICB9Ci0jaWZkZWYgT1MyCi0gICAgICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5J VEVfV0FJVCApOwotI2VuZGlmCi0gICAgICAgIHR0b2woKENIQVIgKilidWYsIGdzc19zZW5kX3Rv ay5sZW5ndGgrOSk7Ci0jaWZkZWYgT1MyCi0gICAgICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwot I2VuZGlmCi0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIEdTU0FQSV9LUkI1ICovCi0jaWZkZWYg S1JCNQotICAgIGNhc2UgQVVUSFRZUEVfS0VSQkVST1NfVjU6Ci0gICAgICAgIGRlYnVnKEYxMTEs ImF1dGhfc2VuZCBLUkI1IiwiazVfYXV0aC5sZW5ndGgiLGs1X2F1dGgubGVuZ3RoKTsKLSAgICAg ICAgZm9yICggaT0wIDsgaTxrNV9hdXRoLmxlbmd0aCA7IGkrKyApIHsKLSAgICAgICAgICAgIGlm ICggKGNoYXIgKilrNV9hdXRoLmRhdGFbaV0gPT0gSUFDICkKLSAgICAgICAgICAgICAgICBpYWNj bnQrKzsKLSAgICAgICAgfQotICAgICAgICBpZiAoIGs1X2F1dGgubGVuZ3RoICsgaWFjY250ICsg MTAgPCBzaXplb2YoYnVmKSApIHsKLQkgICAgazVfYXV0aC5sZW5ndGggPSBjb3B5X2Zvcl9uZXQo JmJ1Zls3XSwKLQkJCQkJICAoQ0hBUiAqKWs1X2F1dGguZGF0YSwKLQkJCQkJICBrNV9hdXRoLmxl bmd0aCk7Ci0JfSBlbHNlIHsKLSAgICAgICAgICBkZWJ1ZyhGMTAwLCJhdXRoX3NlbmQoKSBLUkI1 IGF1dGggZGF0YSB0b28gbGFyZ2UgZm9yIGJ1ZmZlciIsIiIsMCk7Ci0gICAgICAgICAgazVfYXV0 aC5sZW5ndGggPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgc3ByaW50ZigoY2hhciAqKSZidWZb azVfYXV0aC5sZW5ndGgrN10sICIlYyVjIiwgSUFDLCBTRSk7IC8qIHNhZmUgKi8KLSAgICAgICAg aWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7Ci0gICAgICAgICAgICBpbnQgaTsKLSAg ICAgICAgICAgIGNrbWFreG1zZyh0bl9tc2csVE5fTVNHX0xFTiwKLSAgICAgICAgICAgICAgICAg ICAgICAiVEVMTkVUIFNFTlQgU0IgIixURUxPUFQoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSwiIElT ICIsCi0gICAgICAgICAgICAgICAgICAgICAgQVVUSFRZUEVfTkFNRShhdXRoZW50aWNhdGlvbl92 ZXJzaW9uKSwiICIsCi0gICAgICAgICAgICAgICAgICAgICAgQVVUSE1PREVfTkFNRShtb2RlKSwi IEFVVEggIiwKLSAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwK LSAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICB0bl9oZXgoKENIQVIgKil0bl9t c2csVE5fTVNHX0xFTiwmYnVmWzddLGs1X2F1dGgubGVuZ3RoKTsKLSAgICAgICAgICAgIGNrc3Ry bmNhdCh0bl9tc2csIklBQyBTRSIsVE5fTVNHX0xFTik7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAw LHRuX21zZywiIiwwKTsKLSAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1 Zyh0bl9tc2cpOwotICAgICAgICB9Ci0jaWZkZWYgT1MyCi0gICAgICAgIFJlcXVlc3RUZWxuZXRN dXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwotI2VuZGlmCi0gICAgICAgIHR0b2woKENIQVIg KilidWYsIGs1X2F1dGgubGVuZ3RoKzkpOwotI2lmZGVmIE9TMgotICAgICAgICBSZWxlYXNlVGVs bmV0TXV0ZXgoKTsKLSNlbmRpZgotI2lmZGVmIEhFSU1EQUwKLSAgICAgICAga3JiNV9kYXRhX2Zy ZWUoJms1X2F1dGgpOwotI2Vsc2UgLyogSEVJTURBTCAqLwotICAgICAgICBrcmI1X2ZyZWVfZGF0 YV9jb250ZW50cyhrNV9jb250ZXh0LCZrNV9hdXRoKTsKLSAgICAgICAgbWVtc2V0KCZrNV9hdXRo LDAsc2l6ZW9mKGtyYjVfZGF0YSkpOwotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLSAgICAgICAgYnJl YWs7Ci0jZW5kaWYgLyogS1JCNSAqLwotICAgIH0KLSAgICByZXR1cm4gQVVUSF9TVUNDRVNTOwot fQotCi0vKgotICogRnVuY3Rpb246IFBhcnNlIGF1dGhlbnRpY2F0aW9uIFJFUExZIGNvbW1hbmQK LSAqCi0gKiBQYXJhbWV0ZXJzOgotICogIHBhcnNlZGF0IC0gdGhlIHN1Yi1jb21tYW5kIGRhdGEu Ci0gKgotICogICAgICBlbmRfc3ViIC0gaW5kZXggb2YgdGhlIGNoYXJhY3RlciBpbiB0aGUgJ3Bh cnNlZGF0JyBhcnJheSB3aGljaAotICogICAgICAgICAgICAgIGlzIHRoZSBsYXN0IGJ5dGUgaW4g YSBzdWItbmVnb3RpYXRpb24KLSAqCi0gKiBSZXR1cm5zOiBLZXJiZXJvcyBlcnJvciBjb2RlLgot ICovCi1zdGF0aWMgaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWF1dGhfcmVwbHkodW5zaWduZWQgY2hh ciAqcGFyc2VkYXQsIGludCBlbmRfc3ViKQotI2Vsc2UKLWF1dGhfcmVwbHkocGFyc2VkYXQsZW5k X3N1YikgdW5zaWduZWQgY2hhciAqcGFyc2VkYXQ7IGludCBlbmRfc3ViOwotI2VuZGlmCi17Ci0g ICAgaW50IG4gPSBBVVRIX0ZBSUxVUkU7Ci0KLSAgICBpZiAoIHBhcnNlZGF0WzJdICE9IGF1dGhl bnRpY2F0aW9uX3ZlcnNpb24gKSB7Ci0gICAgICAgIHByaW50ZigiQXV0aGVudGljYXRpb24gdmVy c2lvbiBtaXNtYXRjaCAoJXMgWyVkXSAhPSAlcyBbJWRdKVxyXG4iLAotICAgICAgICAgICAgICAg IEFVVEhUWVBFX05BTUUocGFyc2VkYXRbMl0pLHBhcnNlZGF0WzJdLAotICAgICAgICAgICAgICAg IEFVVEhUWVBFX05BTUUoYXV0aGVudGljYXRpb25fdmVyc2lvbiksYXV0aGVudGljYXRpb25fdmVy c2lvbik7Ci0gICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAgICAgICByZXR1 cm4oQVVUSF9GQUlMVVJFKTsKLSAgICB9Ci0gICAgaWYgKCBwYXJzZWRhdFszXSAhPSAoYXV0aF9o b3d8YXV0aF9jcnlwdHxhdXRoX2Z3ZCkgKSB7Ci0gICAgICAgIHByaW50ZigiQXV0aGVudGljYXRp b24gbW9kZSBtaXNtYXRjaCAoJXMgIT0gJXMpXHJcbiIsCi0gICAgICAgICAgICAgICAgQVVUSE1P REVfTkFNRShwYXJzZWRhdFszXSksCi0gICAgICAgICAgICAgICAgQVVUSE1PREVfTkFNRShhdXRo X2hvd3xhdXRoX2NyeXB0fGF1dGhfZndkKSk7Ci0gICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9S RUpFQ1QpOwotICAgICAgICByZXR1cm4oQVVUSF9GQUlMVVJFKTsKLSAgICB9Ci0KLSNpZmRlZiBL UkI0Ci0gICAgaWYgKGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24gPT0gQVVUSFRZUEVfS0VSQkVST1Nf VjQpCi0gICAgICAgIG4gPSBrNF9hdXRoX3JlcGx5KHBhcnNlZGF0LCBlbmRfc3ViKTsKLSNlbmRp ZgotI2lmZGVmIEtSQjUKLSAgICBpZiAoYXV0aGVudGljYXRpb25fdmVyc2lvbiA9PSBBVVRIVFlQ RV9LRVJCRVJPU19WNSkKLSAgICAgICAgbiA9IGs1X2F1dGhfcmVwbHkoYXV0aF9ob3d8YXV0aF9j cnlwdHxhdXRoX2Z3ZCwgcGFyc2VkYXQsIGVuZF9zdWIpOwotI2VuZGlmCi0jaWZkZWYgQ0tfU1JQ Ci0gICAgaWYgKGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24gPT0gQVVUSFRZUEVfU1JQKSB7Ci0jaWZu ZGVmIFBSRV9TUlBfMV83XzMKLSAgICAgICAgbiA9IG5ld19zcnBfcmVwbHkoYXV0aF9ob3d8YXV0 aF9jcnlwdHxhdXRoX2Z3ZCwgcGFyc2VkYXQsIGVuZF9zdWIpOwotI2Vsc2UgLyogUFJFX1NSUF8x XzdfMyAqLwotICAgICAgICBuID0gc3JwX3JlcGx5KGF1dGhfaG93fGF1dGhfY3J5cHR8YXV0aF9m d2QsIHBhcnNlZGF0LCBlbmRfc3ViKTsKLSNlbmRpZiAvKiBQUkVfU1JQXzFfN18zICovCi0gICAg fQotI2VuZGlmIC8qIFNSUCAqLwotI2lmZGVmIENLX1NTTAotICAgIGlmIChhdXRoZW50aWNhdGlv bl92ZXJzaW9uID09IEFVVEhUWVBFX1NTTCkKLSAgICAgICAgbiA9IHNzbF9yZXBseShhdXRoX2hv d3xhdXRoX2NyeXB0fGF1dGhfZndkLCBwYXJzZWRhdCwgZW5kX3N1Yik7Ci0jZW5kaWYgLyogU1NM ICovCi0jaWZkZWYgTlRMTQotICAgIGlmIChhdXRoZW50aWNhdGlvbl92ZXJzaW9uID09IEFVVEhU WVBFX05UTE0pCi0gICAgICAgIG4gPSBudGxtX3JlcGx5KGF1dGhfaG93fGF1dGhfY3J5cHR8YXV0 aF9md2QsIHBhcnNlZGF0LCBlbmRfc3ViKTsKLSNlbmRpZiAvKiBOVExNICovCi0gICAgcmV0dXJu IG47Ci19Ci0KLQotLyoKLSAqIEZ1bmN0aW9uOiBQYXJzZSBhdXRoZW50aWNhdGlvbiBJUyBjb21t YW5kCi0gKgotICogUGFyYW1ldGVyczoKLSAqICBwYXJzZWRhdCAtIHRoZSBzdWItY29tbWFuZCBk YXRhLgotICoKLSAqICAgICAgZW5kX3N1YiAtIGluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgaW4gdGhl ICdwYXJzZWRhdCcgYXJyYXkgd2hpY2gKLSAqICAgICAgICAgICAgICBpcyB0aGUgbGFzdCBieXRl IGluIGEgc3ViLW5lZ290aWF0aW9uCi0gKgotICogUmV0dXJuczogS2VyYmVyb3MgZXJyb3IgY29k ZS4KLSAqLwotc3RhdGljIGludAotI2lmZGVmIENLX0FOU0lDCi1hdXRoX2lzKHVuc2lnbmVkIGNo YXIgKnBhcnNlZGF0LCBpbnQgZW5kX3N1YikKLSNlbHNlCi1hdXRoX2lzKHBhcnNlZGF0LGVuZF9z dWIpIHVuc2lnbmVkIGNoYXIgKnBhcnNlZGF0OyBpbnQgZW5kX3N1YjsKLSNlbmRpZgotewotICAg IGludCBuID0gQVVUSF9GQUlMVVJFOwotCi0gICAgaWYgKCBwYXJzZWRhdFsyXSA9PSBBVVRIVFlQ RV9OVUxMICkgewotICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICAgICAg cmV0dXJuKEFVVEhfRkFJTFVSRSk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiAgSWYgQ0xJRU5U X0NIT09TRV9PTkNFIGlzIHNlbGVjdGVkIHRoZSBzZXJ2ZXIgd2lsbCBub3QgYWxsb3cgdGhlCi0g ICAgICogIGNsaWVudCB0byBzd2l0Y2ggdG8gYW4gYWx0ZXJuYXRlIGF1dGhlbnRpY2F0aW9uIG1l dGhvZCBpZiB0aGUgb25lCi0gICAgICogIGl0IG9yaWdpbmFsbHkgc2VsZWN0ZWQgZmFpbHMuICAo aWUsIGlmIHRoZSBob3N0J3MgU1JQIHBhcmFtZXRlcnMKLSAgICAgKiAgYXJlIGludmFsaWQuKSAg SG93ZXZlciwgSSB0aGluayB0aGlzIGlzIGEgYml0IG9mIGEgc2VjdXJpdHkgcmlzawotICAgICAq ICBzaW5jZSBhbGxvd2luZyB0aGF0IGZ1bmN0aW9uYWxpdHkgbWVhbnMgdGhhdCBpdCBpcyBpbXBv c3NpYmxlIHRvCi0gICAgICogIGRldGVjdCBpZiBhbiBhdHRhY2sgaXMgYmVpbmcgY2FycmllZCBv dXQgb24KLSAgICAgKi8KLSNkZWZpbmUgQ0xJRU5UX0NIT09TRV9PTkNFCi0jaWZkZWYgQ0xJRU5U X0NIT09TRV9PTkNFCi0gICAgaWYgKCBhdXRoZW50aWNhdGlvbl92ZXJzaW9uID09IEFVVEhUWVBF X0FVVE8gKQotI2VuZGlmIC8qIENMSUVOVF9DSE9PU0VfT05DRSAqLwotICAgIHsKLSAgICAgICAg LyogdGhpcyBibG9jayBvZiBjb2RlIG5lZWRzIHRvIGNoZWNrIHRoZSBpbml0aWFsIHBhcmFtZXRl cnMgKi8KLSAgICAgICAgLyogdG8gZW5zdXJlIHRoYXQgdGhvc2UgcmV0dXJuZWQgbWF0Y2ggb25l IG9mIHRoZSBzZXRzIHRoYXQgKi8KLSAgICAgICAgLyogd2VyZSBzZW50IHRvIHRoZSBjbGllbnQg aW4gdGhlIGZpcnN0IHBsYWNlLiAgICAgICAgICAgICAgKi8KLQotICAgICAgICBpbnQgaT0wOwot ICAgICAgICBmb3IgKCBpPTQ7IHN0cl9yZXF1ZXN0W2ldICE9IElBQyA7IGkrPTIpIHsKLSAgICAg ICAgICAgIGlmIChzdHJfcmVxdWVzdFtpXSA9PSBwYXJzZWRhdFsyXSAmJgotICAgICAgICAgICAg ICAgICBzdHJfcmVxdWVzdFtpKzFdID09IHBhcnNlZGF0WzNdKQotICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBzdHJfcmVxdWVzdFtpXSA9PSBJQUMgKSB7 Ci0gICAgICAgICAgICBwcmludGYoIkludmFsaWQgYXV0aGVudGljYXRpb24gdHlwZSBwYWlyICgl cywlcylcclxuIiwKLSAgICAgICAgICAgICAgICAgICAgQVVUSFRZUEVfTkFNRShwYXJzZWRhdFsy XSksCi0gICAgICAgICAgICAgICAgICAgIEFVVEhNT0RFX05BTUUocGFyc2VkYXRbM10pKTsKLSAg ICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAgICAgICAgICAgcmV0dXJu KEFVVEhfRkFJTFVSRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXV0aGVudGljYXRpb25f dmVyc2lvbiAhPSBwYXJzZWRhdFsyXSkgewotICAgICAgICAgICAgYXV0aGVudGljYXRpb25fdmVy c2lvbiA9IHBhcnNlZGF0WzJdOwotICAgICAgICAgICAgYXV0aF9ob3cgPSAocGFyc2VkYXRbM10g JiBBVVRIX0hPV19NQVNLKTsKLSAgICAgICAgICAgIGF1dGhfY3J5cHQgPSAocGFyc2VkYXRbM10g JiBBVVRIX0VOQ1JZUFRfTUFTSyk7Ci0gICAgICAgICAgICBhdXRoX2Z3ZCA9IChwYXJzZWRhdFsz XSAmIElOSV9DUkVEX0ZXRF9NQVNLKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImF1dGhfaXMi LCJhdXRoZW50aWNhdGlvbl92ZXJzaW9uIiwKLSAgICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0 aW9uX3ZlcnNpb24pOwotICAgICAgICAgICAgZGVidWcoRjExMSwiYXV0aF9pcyIsImF1dGhfaG93 IixhdXRoX2hvdyk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJhdXRoX2lzIiwiYXV0aF9jcnlw dCIsYXV0aF9jcnlwdCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJhdXRoX2lzIiwiYXV0aF9m d2QiLGF1dGhfZndkKTsKLSAgICAgICAgfQotICAgIH0KLQotI2lmZGVmIENMSUVOVF9DSE9PU0Vf T05DRQotICAgIGlmICggcGFyc2VkYXRbMl0gIT0gYXV0aGVudGljYXRpb25fdmVyc2lvbiApIHsK LSAgICAgICAgcHJpbnRmKCJBdXRoZW50aWNhdGlvbiB2ZXJzaW9uIG1pc21hdGNoICglcyBbJWRd ICE9ICVzIFslZF0pXHJcbiIsCi0gICAgICAgICAgICAgICAgQVVUSFRZUEVfTkFNRShwYXJzZWRh dFsyXSkscGFyc2VkYXRbMl0sCi0gICAgICAgICAgICAgICAgQVVUSFRZUEVfTkFNRShhdXRoZW50 aWNhdGlvbl92ZXJzaW9uKSxhdXRoZW50aWNhdGlvbl92ZXJzaW9uKTsKLSAgICAgICAgYXV0aF9m aW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0gICAgICAgIHJldHVybihBVVRIX0ZBSUxVUkUpOwotICAg IH0KLSAgICBpZiAoIHBhcnNlZGF0WzNdICE9IChhdXRoX2hvd3xhdXRoX2NyeXB0fGF1dGhfZndk KSApIHsKLSAgICAgICAgcHJpbnRmKCJBdXRoZW50aWNhdGlvbiBtb2RlIG1pc21hdGNoICglcyAh PSAlcylcclxuIiwKLSAgICAgICAgICAgICAgICBBVVRITU9ERV9OQU1FKHBhcnNlZGF0WzNdKSwK LSAgICAgICAgICAgICAgICBBVVRITU9ERV9OQU1FKGF1dGhfaG93fGF1dGhfY3J5cHR8YXV0aF9m d2QpKTsKLSAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0gICAgICAgIHJldHVy bihBVVRIX0ZBSUxVUkUpOwotICAgIH0KLSNlbmRpZiAvKiBDTElFTlRfQ0hPT1NFX09OQ0UgKi8K LQotICAgIHN3aXRjaCAoYXV0aGVudGljYXRpb25fdmVyc2lvbikgewotI2lmZGVmIEtSQjQKLSAg ICBjYXNlIEFVVEhUWVBFX0tFUkJFUk9TX1Y0OgotICAgICAgICBuID0gazRfYXV0aF9pcyhwYXJz ZWRhdCwgZW5kX3N1Yik7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0jaWZkZWYgS1JCNQotICAg IGNhc2UgQVVUSFRZUEVfS0VSQkVST1NfVjU6Ci0gICAgICAgIG4gPSBrNV9hdXRoX2lzKHBhcnNl ZGF0WzNdLHBhcnNlZGF0LCBlbmRfc3ViKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSNpZmRl ZiBDS19TUlAKLSAgICBjYXNlIEFVVEhUWVBFX1NSUDoKLSNpZm5kZWYgUFJFX1NSUF8xXzdfMwot ICAgICAgICBuID0gbmV3X3NycF9pcyhwYXJzZWRhdFszXSwgcGFyc2VkYXQsIGVuZF9zdWIpOwot I2Vsc2UgLyogUFJFX1NSUF8xXzdfMyAqLwotICAgICAgICBuID0gc3JwX2lzKHBhcnNlZGF0WzNd LCBwYXJzZWRhdCwgZW5kX3N1Yik7Ci0jZW5kaWYgLyogUFJFX1NSUF8xXzdfMyAqLwotICAgICAg ICBicmVhazsKLSNlbmRpZiAvKiBTUlAgKi8KLSNpZmRlZiBDS19TU0wKLSAgICBjYXNlIEFVVEhU WVBFX1NTTDoKLSAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5f TkdfUkY7Ci0gICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdf UkY7Ci0gICAgICAgIG4gPSBzc2xfaXMocGFyc2VkYXQsIGVuZF9zdWIpOwotICAgICAgICBicmVh azsKLSNlbmRpZiAvKiBTU0wgKi8KLSNpZmRlZiBOVExNCi0gICAgY2FzZSBBVVRIVFlQRV9OVExN OgotICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsK LSAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsKLSAg ICAgICAgbiA9IG50bG1faXMocGFyc2VkYXQsIGVuZF9zdWIpOwotICAgICAgICBicmVhazsKLSNl bmRpZiAvKiBOVExNICovCi0gICAgY2FzZSBBVVRIVFlQRV9OVUxMOgotICAgIGRlZmF1bHQ6Ci0g ICAgICAgIG4gPSBBVVRIX0ZBSUxVUkU7Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsImF1dGhfaXMi LCJuIixuKTsKLSAgICByZXR1cm4gbjsKLX0KLQotLyoKLSAqIEZ1bmN0aW9uOiBQYXJzZSBhdXRo ZW50aWNhdGlvbiBOQU1FIGNvbW1hbmQKLSAqCi0gKiBQYXJhbWV0ZXJzOgotICogIHBhcnNlZGF0 IC0gdGhlIHN1Yi1jb21tYW5kIGRhdGEuCi0gKgotICogICAgICBlbmRfc3ViIC0gaW5kZXggb2Yg dGhlIGNoYXJhY3RlciBpbiB0aGUgJ3BhcnNlZGF0JyBhcnJheSB3aGljaAotICogICAgICAgICAg ICAgIGlzIHRoZSBsYXN0IGJ5dGUgaW4gYSBzdWItbmVnb3RpYXRpb24KLSAqCi0gKiBSZXR1cm5z OiBLZXJiZXJvcyBlcnJvciBjb2RlLgotICovCi1zdGF0aWMgaW50Ci0jaWZkZWYgQ0tfQU5TSUMK LWF1dGhfbmFtZSh1bnNpZ25lZCBjaGFyICpwYXJzZWRhdCwgaW50IGVuZF9zdWIpCi0jZWxzZQot YXV0aF9uYW1lKHBhcnNlZGF0LGVuZF9zdWIpIHVuc2lnbmVkIGNoYXIgKnBhcnNlZGF0OyBpbnQg ZW5kX3N1YjsKLSNlbmRpZgotewotICAgIGludCBsZW4gPSAoZW5kX3N1Yi0yKSA+IDYzID8gNjMg OiAoZW5kX3N1Yi0yKTsKLSAgICBpZiAoIGxlbiA+IDAgJiYgKGxlbiArIDEpIDwgc2l6ZW9mKHN6 VXNlck5hbWVSZXF1ZXN0ZWQpKSB7Ci0gICAgICAgIG1lbWNweShzelVzZXJOYW1lUmVxdWVzdGVk LCZwYXJzZWRhdFsyXSxsZW4pOyAgICAgICAgICAgLyogc2FmZSAqLwotICAgICAgICBzelVzZXJO YW1lUmVxdWVzdGVkW2xlbl0gPSAnXDAnOwotICAgIH0gZWxzZQotICAgICAgc3pVc2VyTmFtZVJl cXVlc3RlZFswXSA9ICdcMCc7Ci0gICAgZGVidWcoRjExMSwiYXV0aF9uYW1lIHN6VXNlck5hbWVS ZXF1ZXN0ZWQiLHN6VXNlck5hbWVSZXF1ZXN0ZWQsbGVuKTsKLSAgICByZXR1cm4oQVVUSF9TVUND RVNTKTsKLX0KLQotLyoKLSAqIEZ1bmN0aW9uOiBQYXJzZSB0aGUgYXRob3JpemF0aW9uIHN1Yi1v cHRpb25zIGFuZCByZXBseS4KLSAqCi0gKiBQYXJhbWV0ZXJzOgotICogICAgICBwYXJzZWRhdCAt IHN1Yi1vcHRpb24gc3RyaW5nIHRvIHBhcnNlLgotICoKLSAqICAgICAgZW5kX3N1YiAtIGxhc3Qg Y2hhcmN0ZXIgcG9zaXRpb24gaW4gcGFyc2VkYXQuCi0gKi8KLWludAotYXV0aF9wYXJzZSh1bnNp Z25lZCBjaGFyICpwYXJzZWRhdCwgaW50IGVuZF9zdWIpCi17Ci0gICAgaW50IHJjID0gQVVUSF9G QUlMVVJFOwotICAgIHN3aXRjaCAocGFyc2VkYXRbMV0pIHsKLSAgICBjYXNlIFRFTFFVQUxfU0VO RDoKLSAgICAgICAgcmMgPSBhdXRoX3NlbmQocGFyc2VkYXQsIGVuZF9zdWIpOwotICAgICAgICBi cmVhazsKLSAgICBjYXNlIFRFTFFVQUxfUkVQTFk6Ci0gICAgICAgIHJjPSBhdXRoX3JlcGx5KHBh cnNlZGF0LCBlbmRfc3ViKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBURUxRVUFMX0lTOgot ICAgICAgICByYyA9IGF1dGhfaXMocGFyc2VkYXQsIGVuZF9zdWIpOwotICAgICAgICBicmVhazsK LSAgICBjYXNlIFRFTFFVQUxfTkFNRToKLSAgICAgICAgcmMgPSBhdXRoX25hbWUocGFyc2VkYXQs IGVuZF9zdWIpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVidWcoRjExMSwiYXV0aF9w YXJzZSIsInJjIixyYyk7Ci0gICAgcmV0dXJuKHJjKTsKLX0KLQotCi0vKgotICogRnVuY3Rpb246 IEluaXRpYWxpemF0aW9uIHJvdXRpbmUgY2FsbGVkIGtzdHJlYW0gZW5jcnlwdGlvbiBzeXN0ZW0u Ci0gKgotICogUGFyYW1ldGVyczoKLSAqICBkYXRhIC0gdXNlciBkYXRhLgotICovCi1pbnQKLSNp ZmRlZiBDS19BTlNJQwotYXV0aF9pbml0KGtzdHJlYW0ga3MpCi0jZWxzZQotYXV0aF9pbml0KGtz KSBrc3RyZWFtX3B0ciBrczsKLSNlbmRpZgotewotI2lmZGVmIEZPUldBUkQKLSAgICBmb3J3YXJk ZWRfdGlja2V0cyA9IDA7ICAvKiB3ZXJlIHRpY2tldHMgZm9yd2FyZGVkPyAqLwotI2VuZGlmIC8q IEZPUldBUkQgKi8KLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgZW5jcnlwdF9pbml0KGtzLGN4 X3R5cGUpOwotI2VuZGlmCi0gICAgcmV0dXJuIDA7Ci19Ci0KLQotLyoKLSAqIEZ1bmN0aW9uOiBE ZXN0cm95IHJvdXRpbmUgY2FsbGVkIGtzdHJlYW0gZW5jcnlwdGlvbiBzeXN0ZW0uCi0gKgotICog UGFyYW1ldGVyczoKLSAqICBkYXRhIC0gdXNlciBkYXRhLgotICovCi1WT0lECi0jaWZkZWYgQ0tf QU5TSUMKLWF1dGhfZGVzdHJveSh2b2lkKQotI2Vsc2UKLWF1dGhfZGVzdHJveSgpCi0jZW5kaWYK LXsKLX0KLQotCi0vKgotICogRnVuY3Rpb246IENhbGxiYWNrIHRvIGVuY3J5cHQgYSBibG9jayBv ZiBjaGFyYWN0ZXJzCi0gKgotICogUGFyYW1ldGVyczoKLSAqICBvdXQgLSByZXR1cm4gYXMgcG9p bnRlciB0byBjb252ZXJ0ZWQgYnVmZmVyLgotICoKLSAqICBpbiAtIHRoZSBidWZmZXIgdG8gY29u dmVydAotICoKLSAqIFJldHVybnM6IG51bWJlciBvZiBjaGFyYWN0ZXJzIGNvbnZlcnRlZC4KLSAq LwotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWF1dGhfZW5jcnlwdChzdHJ1Y3Qga3N0cmVhbV9kYXRh X2Jsb2NrICpvdXQsCi0gICAgICAgICAgICAgc3RydWN0IGtzdHJlYW1fZGF0YV9ibG9jayAqaW4p Ci0jZWxzZQotYXV0aF9lbmNyeXB0KG91dCxpbikKLSAgICBzdHJ1Y3Qga3N0cmVhbV9kYXRhX2Js b2NrICpvdXQ7IHN0cnVjdCBrc3RyZWFtX2RhdGFfYmxvY2sgKmluOwotI2VuZGlmCi17Ci0gICAg b3V0LT5wdHIgPSBpbi0+cHRyOwotCi0gICAgb3V0LT5sZW5ndGggPSBpbi0+bGVuZ3RoOwotCi0g ICAgcmV0dXJuKG91dC0+bGVuZ3RoKTsKLX0KLQotCi0vKgotICogRnVuY3Rpb246IENhbGxiYWNr IHRvIGRlY3J5cHQgYSBibG9jayBvZiBjaGFyYWN0ZXJzCi0gKgotICogUGFyYW1ldGVyczoKLSAq ICBvdXQgLSByZXR1cm4gYXMgcG9pbnRlciB0byBjb252ZXJ0ZWQgYnVmZmVyLgotICoKLSAqICBp biAtIHRoZSBidWZmZXIgdG8gY29udmVydAotICoKLSAqIFJldHVybnM6IG51bWJlciBvZiBjaGFy YWN0ZXJzIGNvbnZlcnRlZC4KLSAqLwotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWF1dGhfZGVjcnlw dChzdHJ1Y3Qga3N0cmVhbV9kYXRhX2Jsb2NrICpvdXQsCi0gICAgICAgICAgICAgc3RydWN0IGtz dHJlYW1fZGF0YV9ibG9jayAqaW4pCi0jZWxzZQotYXV0aF9kZWNyeXB0KG91dCxpbikKLSAgICBz dHJ1Y3Qga3N0cmVhbV9kYXRhX2Jsb2NrICpvdXQ7IHN0cnVjdCBrc3RyZWFtX2RhdGFfYmxvY2sg KmluOwotI2VuZGlmCi17Ci0gICAgb3V0LT5wdHIgPSBpbi0+cHRyOwotCi0gICAgb3V0LT5sZW5n dGggPSBpbi0+bGVuZ3RoOwotCi0gICAgcmV0dXJuKG91dC0+bGVuZ3RoKTsKLX0KLQotI2lmZGVm IEtSQjQKLSNpZmRlZiBOVAotdm9pZAotY2tfa3JiNF9kZWJ1ZyhpbnQgeCkKLXsKLSAgICBzZXRf a3JiX2RlYnVnKHgpOwotICAgIHNldF9rcmJfYXBfcmVxX2RlYnVnKHgpOwotfQotI2VuZGlmIC8q IE5UICovCi1pbnQKLWNrX2tyYjRfYXV0b2dldF9UR1QoY2hhciAqIHJlYWxtKQotewotICAgIGV4 dGVybiBzdHJ1Y3Qga3JiX29wX2RhdGEga3JiX29wOwotICAgIGV4dGVybiBzdHJ1Y3Qga3JiNF9p bml0X2RhdGEga3JiNF9pbml0OwotICAgIGNoYXIgcGFzc3dkW1BXRF9TWl07Ci0gICAgY2hhciBw cm9tcHRbMjU2XTsKLSAgICBjaGFyICogc2F2ZXJlYWxtPU5VTEw7Ci0gICAgaW50ICByYyA9IC0x OwotICAgIGV4dGVybiBjaGFyICogazRwcnByb21wdDsKLSAgICBleHRlcm4gY2hhciAqIGs0cHdw cm9tcHQ7Ci0KLSAgICBpbmlfa2VyYigpOyAgICAgICAgIC8qIFBsYWNlIGRlZmF1bHRzIGluIGFi b3ZlIHN0cnVjdHMgKi8KLSAgICBwYXNzd2RbMF0gPSAnXDAnOwotCi0gICAgaWYgKCBrcmI0X2lu aXQucHJpbmNpcGFsID09IE5VTEwgfHwKLSAgICAgICAgIGtyYjRfaW5pdC5wcmluY2lwYWxbMF0g PT0gJ1wwJykgewotICAgICAgICBpbnQgb2sgPSB1cV90eHQoTlVMTCwgCi0gICAgICAgICAgICAg ICAgIGs0cHJwcm9tcHQgJiYgazRwcnByb21wdFswXSA/Ci0gICAgICAgICAgICAgICAgIGs0cHJw cm9tcHQgOgotICAgICAgICAgICAgICAgICAiS2VyYmVyb3MgNCBQcmluY2lwYWw6ICIsCi0gICAg ICAgICAgICAgICAgIDIsIE5VTEwsIHBhc3N3ZCxQV0RfU1otMSwgTlVMTCwgREVGQVVMVF9VUV9U SU1FT1VUKTsKLSAgICAgICAgaWYgKCBvayAmJiBwYXNzd2RbMF0gKQotICAgICAgICAgICAgbWFr ZXN0cigma3JiNF9pbml0LnByaW5jaXBhbCxwYXNzd2QpOwotICAgICAgICBlbHNlCi0gICAgICAg ICAgICByZXR1cm4oMCk7Ci0gICAgfQotCi0gICAgLyogU2F2ZSByZWFsbSBpbiBpbml0IHN0cnVj dHVyZSBzbyBpdCBjYW4gYmUgcmVzdG9yZWQgKi8KLSAgICBpZiAoIHJlYWxtICkgewotICAgICAg ICBzYXZlcmVhbG0gPSBrcmI0X2luaXQucmVhbG07Ci0gICAgICAgIGtyYjRfaW5pdC5yZWFsbSA9 IHJlYWxtOwotICAgIH0KLQotICAgIGlmICggcGFzc3dkWzBdIHx8ICEocHdidWZbMF0gJiYgcHdm bGcpICkgewotICAgICAgICBpbnQgb2s7Ci0gICAgICAgIGlmICggazRwd3Byb21wdCAmJiBrNHB3 cHJvbXB0WzBdICYmCi0gICAgICAgICAgICAgKHN0cmxlbihrNHB3cHJvbXB0KSArIHN0cmxlbihr cmI0X2luaXQucHJpbmNpcGFsKSArCi0gICAgICAgICAgICAgICBzdHJsZW4oa3JiNF9pbml0LnJl YWxtKSAtIDQpIDwgc2l6ZW9mKHByb21wdCkpIHsKLSAgICAgICAgICAgIHNwcmludGYocHJvbXB0 LGs0cHdwcm9tcHQsa3JiNF9pbml0LnByaW5jaXBhbCxrcmI0X2luaXQucmVhbG0pOwotICAgICAg ICB9IGVsc2UKLSAgICAgICAgICAgIGNrbWFreG1zZyhwcm9tcHQsc2l6ZW9mKHByb21wdCksCi0g ICAgICAgICAgICAgICAgICAiS2VyYmVyb3MgNCBQYXNzd29yZCBmb3IgIixrcmI0X2luaXQucHJp bmNpcGFsLCJAIiwKLSAgICAgICAgICAgICAgICAgIGtyYjRfaW5pdC5yZWFsbSwiOiAiLAotICAg ICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0gICAg ICAgIG9rID0gdXFfdHh0KE5VTEwscHJvbXB0LDIsTlVMTCxwYXNzd2QsUFdEX1NaLTEsTlVMTCwK LQkJICAgIERFRkFVTFRfVVFfVElNRU9VVCk7Ci0gICAgICAgIGlmICggIW9rICkKLSAgICAgICAg ICAgIHBhc3N3ZFswXSA9ICdcMCc7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2tzdHJuY3B5KHBh c3N3ZCxwd2J1ZixzaXplb2YocGFzc3dkKSk7Ci0jaWZkZWYgT1MyCi0gICAgICAgIGlmICggcHdj cnlwdCApCi0gICAgICAgICAgICBja19lbmNyeXB0KChjaGFyICopcGFzc3dkKTsKLSNlbmRpZiAv KiBPUzIgKi8KLSAgICB9Ci0KLSAgICBpZiAoIHBhc3N3ZFswXSApIHsKLSAgICAgICAgbWFrZXN0 cigma3JiNF9pbml0LnBhc3N3b3JkLHBhc3N3ZCk7Ci0gICAgICAgIHJjID0gY2tfa3JiNF9pbml0 VEdUKCZrcmJfb3AsICZrcmI0X2luaXQpOwotICAgICAgICBmcmVlKGtyYjRfaW5pdC5wYXNzd29y ZCk7Ci0gICAgICAgIGtyYjRfaW5pdC5wYXNzd29yZCA9IE5VTEw7Ci0gICAgfQotCi0gICAga3Ji NF9pbml0LnBhc3N3b3JkID0gTlVMTDsKLSAgICBtZW1zZXQocGFzc3dkLDAsUFdEX1NaKTsKLQot ICAgIC8qIHJlc3RvcmUgcmVhbG0gdG8gaW5pdCBzdHJ1Y3R1cmUgaWYgbmVlZGVkICovCi0gICAg aWYgKCBzYXZlcmVhbG0gKQotICAgICAgICBrcmI0X2luaXQucmVhbG0gPSBzYXZlcmVhbG07Ci0g ICAgcmV0dXJuKHJjID09IDApOwotfQotCi1jaGFyICoKLWNrX2tyYjRfcmVhbG1vZmhvc3QoY2hh ciAqaG9zdCkKLXsKLSAgICByZXR1cm4gKGNoYXIgKilrcmJfcmVhbG1vZmhvc3QoaG9zdCk7Ci19 Ci0KLS8qCi0gKgotICogSzRfYXV0aF9zZW5kIC0gZ2V0cyBhdXRoZW50aWNhdGlvbiBiaXRzIHdl IG5lZWQgdG8gc2VuZCB0byBLREMuCi0gKgotICogUmVzdWx0IGlzIGxlZnQgaW4gYXV0aAotICoK LSAqIFJldHVybnM6IDAgb24gZmFpbHVyZSwgMSBvbiBzdWNjZXNzCi0gKi8KLXN0YXRpYyBpbnQK LSNpZmRlZiBDS19BTlNJQwotazRfYXV0aF9zZW5kKHZvaWQpCi0jZWxzZQotazRfYXV0aF9zZW5k KCkKLSNlbmRpZgotewotICAgIGludCByPTA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogUmV0dXJuIHZhbHVlICovCi0gICAgY2hhciBpbnN0YW5jZVtJTlNUX1NaKzFdPSIi OwotICAgIGNoYXIgKnJlYWxtPU5VTEw7Ci0gICAgY2hhciB0Z3RbNCpSRUFMTV9TWisxXTsKLQot ICAgIG1lbXNldChpbnN0YW5jZSwgMCwgc2l6ZW9mKGluc3RhbmNlKSk7Ci0KLSNpZmRlZiBDT01N RU5UCi0gICAgLyogd2Ugb25seSBuZWVkIHRvIGNhbGwga3JiX2dldF9waG9zdCBpZiB0aGUgaG9z dG5hbWUgKi8KLSAgICAvKiBpcyBub3QgZnVsbHkgcXVhbGlmaWVkLiAgQnV0IHdlIGhhdmUgYWxy ZWFkeSBkb25lICAqLwotICAgIC8qIHRoaXMgaW4gbmV0b3BlbigpIGNhbGwuICBUaGlzIHdpbGwg c2F2ZSBhIHJvdW5kIG9mICovCi0gICAgLyogRE5TIHF1ZXJpZXMuICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICBkZWJ1ZyhGMTEwLCJrNF9hdXRoX3NlbmQiLCJr cmJfZ2V0X3Bob3N0IiwwKTsKLSAgICBpZiAocmVhbG0gPSAoY2hhciAqKWtyYl9nZXRfcGhvc3Qo c3pIb3N0TmFtZSkpIHsKLSAgICAgICAgY2tzdHJuY3B5KGluc3RhbmNlLCByZWFsbSwgSU5TVF9T Wik7Ci0gICAgfQotI2Vsc2UgLyogQ09NTUVOVCAqLwotICAgIHsKLSAgICAgICAgY2hhciAqcDsK LSAgICAgICAgY2tzdHJuY3B5KGluc3RhbmNlLCBzekhvc3ROYW1lLCBJTlNUX1NaKTsKLSAgICAg ICAgZm9yICggcD1pbnN0YW5jZTsgKnAgJiYgKnAgIT0gJy4nIDsgcCsrICk7Ci0gICAgICAgICpw ID0gJ1wwJzsKLSAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgZGVidWcoRjExMCwi azRfYXV0aF9zZW5kIiwia3JiX2dldF9yZWFsbW9maG9zdCIsMCk7Ci0gICAgcmVhbG0gPSAoY2hh ciAqKWtyYl9yZWFsbW9maG9zdChzekhvc3ROYW1lKTsKLQotICAgIGlmICghcmVhbG0pIHsKLSAg ICAgICAgc3RyY3B5KHN0clRtcCwgIkNhbid0IGZpbmQgcmVhbG0gZm9yIGhvc3QgXCIiKTsKLSAg ICAgICAgY2tzdHJuY2F0KHN0clRtcCwgc3pIb3N0TmFtZSxBVVRIVE1QQkwpOwotICAgICAgICBj a3N0cm5jYXQoc3RyVG1wLCAiXCIiLEFVVEhUTVBCTCk7Ci0gICAgICAgIHByaW50ZigiP0tlcmJl cm9zIDQgZXJyb3I6ICVzXHJcbiIsc3RyVG1wKTsKLSAgICAgICAga3JiNF9lcnJubyA9IHI7Ci0g ICAgICAgIG1ha2VzdHIoJmtyYjRfZXJybXNnLHN0clRtcCk7Ci0gICAgICAgIHJldHVybigwKTsK LSAgICB9Ci0KLSAgICBja21ha21zZyh0Z3Qsc2l6ZW9mKHRndCksImtyYnRndC4iLHJlYWxtLCJA IixyZWFsbSk7Ci0gICAgciA9IGNrX2tyYjRfdGt0X2lzdmFsaWQodGd0KTsKLQotICAgIGlmICgg ciA8PSAwICYmIGtyYjRfYXV0b2dldCApCi0gICAgICAgIGNrX2tyYjRfYXV0b2dldF9UR1QocmVh bG0pOwotCi0gICAgZGVidWcoRjExMCwiazRfYXV0aF9zZW5kIiwia3JiX21rX3JlcSIsMCk7Ci0g ICAgciA9IGtyYl9ta19yZXEoJms0X2F1dGgsIGtyYjRfZF9zcnYgPyBrcmI0X2Rfc3J2IDogS1JC NF9TRVJWSUNFX05BTUUsCi0gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLCByZWFsbSwgMCk7 Ci0KLSAgICBpZiAociA9PSAwKSB7Ci0gICAgICAgIGRlYnVnKEYxMTAsIms0X2F1dGhfc2VuZCIs ImtyYl9nZXRfY3JlZCIsMCk7Ci0gICAgICAgIHIgPSBrcmJfZ2V0X2NyZWQoa3JiNF9kX3NydiA/ IGtyYjRfZF9zcnYgOiBLUkI0X1NFUlZJQ0VfTkFNRSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgaW5zdGFuY2UsIHJlYWxtLCAmY3JlZCk7Ci0gICAgICAgIGlmIChyKQotICAgICAgICAgICAg ZGVidWcoRjExMSwiazRfYXV0aF9zZW5kIiwia3JiX2dldF9jcmVkKCkgZmFpbGVkIixyKTsKLSAg ICB9Ci0gICAgZWxzZQotICAgICAgICBkZWJ1ZyhGMTExLCJrNF9hdXRoX3NlbmQiLCJrcmJfbWtf cmVxKCkgZmFpbGVkIixyKTsKLQotICAgIGlmIChyKSB7Ci0gICAgICAgIHN0cmNweShzdHJUbXAs ICJDYW4ndCBnZXQgXCIiKTsKLSAgICAgICAgY2tzdHJuY2F0KHN0clRtcCwKLSAgICAgICAgICAg ICAgICAgIGtyYjRfZF9zcnYgPyBrcmI0X2Rfc3J2IDogS1JCNF9TRVJWSUNFX05BTUUsQVVUSFRN UEJMKTsKLSAgICAgICAgaWYgKGluc3RhbmNlWzBdICE9IDApIHsKLSAgICAgICAgICAgIGNrc3Ry bmNhdChzdHJUbXAsICIuIixBVVRIVE1QQkwpOwotICAgICAgICAgICAgY2tzdHJuY2F0KHN0clRt cCwgaW5zdGFuY2UsQVVUSFRNUEJMKTsKLSAgICAgICAgfQotICAgICAgICBja3N0cm5jYXQoc3Ry VG1wLCAiQCIsQVVUSFRNUEJMKTsKLSAgICAgICAgY2tzdHJuY2F0KHN0clRtcCwgcmVhbG0sQVVU SFRNUEJMKTsKLSAgICAgICAgY2tzdHJuY2F0KHN0clRtcCwgIlwiIHRpY2tldFxyXG4gICIsQVVU SFRNUEJMKTsKLSAgICAgICAgY2tzdHJuY2F0KHN0clRtcCwgKGNoYXIgKilrcmJfZ2V0X2Vycl90 ZXh0X2VudHJ5KHIpLEFVVEhUTVBCTCk7Ci0gICAgICAgIGRlYnVnKEYxMTEsIms0X2F1dGhfc2Vu ZCIsKGNoYXIgKilrcmJfZ2V0X2Vycl90ZXh0X2VudHJ5KHIpLHIpOwotICAgICAgICBwcmludGYo Ij9LZXJiZXJvcyA0IGVycm9yOiAlc1xyXG4iLHN0clRtcCk7Ci0gICAgICAgIGtyYjRfZXJybm8g PSByOwotICAgICAgICBtYWtlc3RyKCZrcmI0X2Vycm1zZyxrcmJfZ2V0X2Vycl90ZXh0X2VudHJ5 KGtyYjRfZXJybm8pKTsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLQotI2lmZGVmIE9TMgot ICAgIGlmICggIXN6VXNlck5hbWVbMF0gfHwgIXN0cmljbXAoc3pVc2VyTmFtZSxjcmVkLnBuYW1l KSApIHsKLSAgICAgICAgY2tzdHJuY3B5KHN6VXNlck5hbWUsIGNyZWQucG5hbWUsIFVJREJVRkxF Tik7Ci0gICAgfQotI2VuZGlmIC8qIE9TMiAqLwotICAgIGtyYjRfZXJybm8gPSByOwotICAgIG1h a2VzdHIoJmtyYjRfZXJybXNnLGtyYl9nZXRfZXJyX3RleHRfZW50cnkoa3JiNF9lcnJubykpOwot ICAgIGRlYnVnKEYxMTAsIms0X2F1dGhfc2VuZCIsa3JiNF9lcnJtc2csMCk7Ci0gICAgcmV0dXJu KDEpOwotfQotCi0vKgotICogRnVuY3Rpb246IEs0IHBhcnNlIGF1dGhlbnRpY2F0aW9uIHJlcGx5 IGNvbW1hbmQKLSAqCi0gKiBQYXJhbWV0ZXJzOgotICogIHBhcnNlZGF0IC0gdGhlIHN1Yi1jb21t YW5kIGRhdGEuCi0gKgotICogIGVuZF9zdWIgLSBpbmRleCBvZiB0aGUgY2hhcmFjdGVyIGluIHRo ZSAncGFyc2VkYXQnIGFycmF5IHdoaWNoCi0gKiAgICAgICAgICAgICAgaXMgdGhlIGxhc3QgYnl0 ZSBpbiBhIHN1Yi1uZWdvdGlhdGlvbgotICoKLSAqIFJldHVybnM6IEtlcmJlcm9zIGVycm9yIGNv ZGUuCi0gKi8KLXN0YXRpYyBpbnQKLSNpZmRlZiBDS19BTlNJQwotazRfYXV0aF9yZXBseSh1bnNp Z25lZCBjaGFyICpwYXJzZWRhdCwgaW50IGVuZF9zdWIpCi0jZWxzZQotazRfYXV0aF9yZXBseShw YXJzZWRhdCxlbmRfc3ViKSB1bnNpZ25lZCBjaGFyICpwYXJzZWRhdDsgaW50IGVuZF9zdWI7Ci0j ZW5kaWYKLXsKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgU2Vzc2lvbl9LZXkgc2tleTsKLSNp ZmRlZiBNSVRfQ1VSUkVOVAotICAgIGtyYjVfZGF0YSBrZGF0YTsKLSAgICBrcmI1X2VuY19kYXRh IGVuY2RhdGE7Ci0gICAga3JiNV9lcnJvcl9jb2RlIGNvZGU7Ci0jZW5kaWYgLyogTUlUX0NVUlJF TlQgKi8KLSNlbmRpZgotICAgIHRpbWVfdCB0OwotICAgIGludCB4OwotICAgIGludCBpOwotCi0g ICAgaWYgKGVuZF9zdWIgPCA0IHx8IHBhcnNlZGF0WzJdICE9IEFVVEhUWVBFX0tFUkJFUk9TX1Y0 KSB7Ci0gICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAgICAgICByZXR1cm4g QVVUSF9GQUlMVVJFOwotICAgIH0KLQotICAgIGlmIChwYXJzZWRhdFs0XSA9PSBLUkJfUkVKRUNU KSB7Ci0gICAgICAgIHN0clRtcFswXSA9IDA7Ci0KLSAgICAgICAgZm9yIChpID0gNTsgaSA8PSBl bmRfc3ViOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChwYXJzZWRhdFtpXSA9PSBJQUMpCi0gICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBzdHJUbXBbaS01XSA9IHBhcnNlZGF0W2ld OwotICAgICAgICAgICAgc3RyVG1wW2ktNF0gPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg KCFzdHJUbXBbMF0pCi0gICAgICAgICAgICBzdHJjcHkoc3RyVG1wLCAiQXV0aGVudGljYXRpb24g cmVqZWN0ZWQgYnkgcmVtb3RlIG1hY2hpbmUhIik7Ci0gICAgICAgIHByaW50ZigiS2VyYmVyb3Mg VjQgYXV0aGVudGljYXRpb24gZmFpbGVkIVxyXG4lc1xyXG4iLHN0clRtcCk7Ci0gICAgICAgIGty YjRfZXJybm8gPSAtMTsKLSAgICAgICAgbWFrZXN0cigma3JiNF9lcnJtc2csc3RyVG1wKTsKLSAg ICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0gICAgICAgIHJldHVybiBBVVRIX0ZB SUxVUkU7Ci0gICAgfQotCi0gICAgaWYgKHBhcnNlZGF0WzRdID09IEtSQl9BQ0NFUFQpIHsKLSAg ICAgICAgaW50IG5ldF9sZW47Ci0gICAgICAgIGlmICgocGFyc2VkYXRbM10gJiBBVVRIX0hPV19N QVNLKSA9PSBBVVRIX0hPV19PTkVfV0FZKSB7Ci0gICAgICAgICAgICBja21ha21zZyhzdHJUbXAs c2l6ZW9mKHN0clRtcCksIktlcmJlcm9zIFY0IGFjY2VwdHMgeW91IGFzICIsCi0gICAgICAgICAg ICAgICAgICAgICAgc3pVc2VyTmFtZSxOVUxMLE5VTEwpOwotICAgICAgICAgICAgcHJpbnRmKCIl c1xyXG4iLHN0clRtcCk7Ci0gICAgICAgICAgICBhY2NlcHRfY29tcGxldGUgPSAxOwotICAgICAg ICAgICAga3JiNF9lcnJubyA9IDA7Ci0gICAgICAgICAgICBtYWtlc3RyKCZrcmI0X2Vycm1zZyxz dHJUbXApOwotICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1VTRVIpOwotICAgICAgICAg ICAgcmV0dXJuIEFVVEhfU1VDQ0VTUzsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgocGFyc2Vk YXRbM10gJiBBVVRIX0hPV19NQVNLKSAhPSBBVVRIX0hPV19NVVRVQUwpIHsKLSAgICAgICAgICAg IHByaW50ZigiS2VyYmVyb3MgVjQgYXV0aGVudGljYXRpb24gZmFpbGVkIVxyXG4iKTsKLSAgICAg ICAgICAgIGNrc3RybmNweShzdHJUbXAsCi0gICAgICAgICJLZXJiZXJvcyBWNCBhY2NlcHRlZCB5 b3UsIGJ1dCBkaWRuJ3QgcHJvdmlkZSBtdXR1YWwgYXV0aGVudGljYXRpb24iLAotICAgICAgICAg ICAgICAgICAgICAgICBzaXplb2Yoc3RyVG1wKSk7Ci0gICAgICAgICAgICBwcmludGYoIiVzXHJc biIsc3RyVG1wKTsKLSAgICAgICAgICAgIGtyYjRfZXJybm8gPSAtMTsKLSAgICAgICAgICAgIG1h a2VzdHIoJmtyYjRfZXJybXNnLHN0clRtcCk7Ci0gICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFV VEhfUkVKRUNUKTsKLSAgICAgICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7Ci0gICAgICAgIH0K LQotI2lmbmRlZiBSRU1PVkVfRk9SX0VYUE9SVAotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAg ICAgU2VuZEs0QXV0aFNCKEtSQjRfQ0hBTExFTkdFLGs0X3Nlc3Npb25fa2V5LHNpemVvZihrNF9z ZXNzaW9uX2tleSkpOwotCi0gICAgICAgIC8qIFdlIGhhdmUgc2VudCB0aGUgZGVjcnlwdGVkIHNl c3Npb24ga2V5IHRvIHRoZSBob3N0IGFzIGEgY2hhbGxlbmdlICovCi0gICAgICAgIC8qIG5vdyBl bmNyeXB0IGl0IHRvIHJlc3RvcmUgaXQgdG8gaXRzIG9yaWdpbmFsIHZhbGlkIERFUyBrZXkgdmFs dWUgKi8KLSNpZmRlZiBNSVRfQ1VSUkVOVAotICAgICAgICBrZGF0YS5kYXRhID0gazRfc2Vzc2lv bl9rZXk7Ci0gICAgICAgIGtkYXRhLmxlbmd0aCA9IDg7Ci0KLSAgICAgICAgZW5jZGF0YS5jaXBo ZXJ0ZXh0LmRhdGEgPSBrNF9zZXNzaW9uX2tleTsKLSAgICAgICAgZW5jZGF0YS5jaXBoZXJ0ZXh0 Lmxlbmd0aCA9IDg7Ci0gICAgICAgIGVuY2RhdGEuZW5jdHlwZSA9IEVOQ1RZUEVfVU5LTk9XTjsK LQotICAgICAgICBpZiAoY29kZSA9IGtyYjVfY19lbmNyeXB0KGs1X2NvbnRleHQsICZrNF9rcmJr ZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsICZrZGF0YSwgJmVu Y2RhdGEpKSB7Ci0gICAgICAgICAgICBjb21fZXJyKCJrNF9hdXRoX3JlcGx5IiwgY29kZSwKLSAg ICAgICAgICAgICAgICAgICAgICJ3aGlsZSBlbmNyeXB0aW5nIHNlc3Npb25fa2V5Iik7Ci0gICAg ICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICAgICAgICAgIHJldHVybiBB VVRIX0ZBSUxVUkU7Ci0gICAgICAgIH0KLSNlbHNlIC8qIE1JVF9DVVJSRU5UICovCi0jaWZkZWYg TlQKLSAgICAgICAgZGVzX2VjYl9lbmNyeXB0KGs0X3Nlc3Npb25fa2V5LCBrNF9zZXNzaW9uX2tl eSwgazRfc2NoZWQsIDEpOwotI2Vsc2UgLyogTlQgKi8KLSAgICAgICAgZGVzX2VjYl9lbmNyeXB0 KCZrNF9zZXNzaW9uX2tleSwgJms0X3Nlc3Npb25fa2V5LCBrNF9zY2hlZCwgMSk7Ci0jZW5kaWYg LyogTlQgKi8KLSAgICAgICAgY2toZXhkdW1wKAotICAgICAgICAgICAgIms0X2F1dGhfcmVwbHkg ZGVzX2VjYl9lbmNyeXB0KGs0X3Nlc3Npb25fa2V5LGs0X3Nlc3Npb25fa2V5LDEpIiwKLSAgICAg ICAgICAgICBrNF9zZXNzaW9uX2tleSwKLSAgICAgICAgICAgICA4Ci0gICAgICAgICAgICAgICAg KTsKLSNlbmRpZiAvKiBNSVRfQ1VSUkVOVCAqLwotCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAgIGlm ICghKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpKQotI2VuZGlmIC8qIENLX1NT TCAqLwotICAgICAgICB7Ci0gICAgICAgIC8qIEFuZCB0aGVuIHVzZSBpdCB0byBjb25maWd1cmUg dGhlIGVuY3J5cHRpb24gc3RhdGUgbWFjaGluZS4gKi8KLSAgICAgICAgICAgIHNrZXkudHlwZSA9 IFNLX0RFUzsKLSAgICAgICAgICAgIHNrZXkubGVuZ3RoID0gODsKLSAgICAgICAgICAgIHNrZXku ZGF0YSA9IGs0X3Nlc3Npb25fa2V5OwotICAgICAgICAgICAgZW5jcnlwdF9zZXNzaW9uX2tleSgm c2tleSwgQVVUSF9DTElFTlRfVE9fU0VSVkVSKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIEVOQ1JZ UFRJT04gKi8KLSNlbmRpZiAvKiBSRU1PVkVfRk9SX0VYUE9SVCAqLwotICAgICAgICBhY2NlcHRf Y29tcGxldGUgPSAxOwotICAgICAgICBja21ha21zZyhzdHJUbXAsc2l6ZW9mKHN0clRtcCksCi0g ICAgICAgICAgICAgICAgICJLZXJiZXJvcyBWNCBhY2NlcHRzIHlvdSBhcyAiLHN6VXNlck5hbWUs TlVMTCxOVUxMKTsKLSAgICAgICAgcHJpbnRmKCIlc1xyXG4iLHN0clRtcCk7Ci0gICAgICAgIGty YjRfZXJybm8gPSAwOwotICAgICAgICBtYWtlc3RyKCZrcmI0X2Vycm1zZyxzdHJUbXApOwotICAg ICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfVVNFUik7Ci0gICAgICAgIHJldHVybiBBVVRIX1NVQ0NF U1M7Ci0gICAgfQotCi0gICAgaWYgKHBhcnNlZGF0WzRdID09IEtSQjRfUkVTUE9OU0UpIHsKLSAg ICAgICAgaWYgKGVuZF9zdWIgPCAxMikgewotICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRI X1JFSkVDVCk7Ci0gICAgICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOwotICAgICAgICB9Ci0K LSAgICAgICAgY2toZXhkdW1wKCJLUkI0X1JFU1BPTlNFICZwYXJzZWRhdFs1XSIsJnBhcnNlZGF0 WzVdLDgpOwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgY2toZXhkdW1wKCJLUkI0X1JF U1BPTlNFIGs0X2NoYWxsZW5nZSIsazRfY2hhbGxlbmdlLDgpOwotCi0gICAgICAgIC8qIFRoZSBk YXRhYmxvY2sgcmV0dXJuZWQgZnJvbSB0aGUgaG9zdCBzaG91bGQgbWF0Y2ggdGhlIHZhbHVlICov Ci0gICAgICAgIC8qIHdlIHN0b3JlZCBpbiBrNF9jaGFsbGVuZ2UuICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICovCi0gICAgICAgIGlmIChtZW1jbXAoJnBhcnNlZGF0WzVdLCBrNF9j aGFsbGVuZ2UsIHNpemVvZihrNF9jaGFsbGVuZ2UpKSAhPSAwKSB7Ci0gICAgICAgICAgICBwcmlu dGYoIktlcmJlcm9zIFY0IGF1dGhlbnRpY2F0aW9uIGZhaWxlZCFcclxuJXNcclxuIiwKLSAgICAg ICAgICAgICJSZW1vdGUgbWFjaGluZSBpcyBiZWluZyBpbXBlcnNvbmF0ZWQhIik7Ci0gICAgICAg ICAgICBrcmI0X2Vycm5vID0gLTE7Ci0gICAgICAgICAgICBtYWtlc3RyKCZrcmI0X2Vycm1zZywi UmVtb3RlIG1hY2hpbmUgaXMgYmVpbmcgaW1wZXJzb25hdGVkISIpOwotICAgICAgICAgICAgYXV0 aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0gICAgICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJF OwotICAgICAgICB9Ci0jZWxzZSAvKiBFTkNSWVBUSU9OICovCi0gICAgICAgIG1ha2VzdHIoJmty YjRfZXJybXNnLCJLZXJtaXQgYnVpbHQgd2l0aG91dCBzdXBwb3J0IGZvciBlbmNyeXB0aW9uLiIp OwotICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOwotI2VuZGlmIC8qIEVOQ1JZUFRJT04gKi8K LSAgICAgICAgbXV0dWFsX2NvbXBsZXRlID0gMTsKLSAgICAgICAgY2tzdHJuY3B5KHN0clRtcCwi UmVtb3RlIG1hY2hpbmUgaGFzIGJlZW4gbXV0dWFsbHkgYXV0aGVudGljYXRlZCIsCi0gICAgICAg ICAgICAgICAgICAgc2l6ZW9mKHN0clRtcCkpOwotICAgICAgICBwcmludGYoIiVzXHJcbiIsc3Ry VG1wKTsKLSAgICAgICAga3JiNF9lcnJubyA9IDA7Ci0gICAgICAgIG1ha2VzdHIoJmtyYjRfZXJy bXNnLHN0clRtcCk7Ci0gICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9VU0VSKTsKLSAgICAgICAg cmV0dXJuIEFVVEhfU1VDQ0VTUzsKLSAgICB9Ci0gICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVD VCk7Ci0gICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKLX0KLQotLyoKLSAqIEZ1bmN0aW9uOiBLNCBw YXJzZSBhdXRoZW50aWNhdGlvbiBJUyBjb21tYW5kCi0gKgotICogUGFyYW1ldGVyczoKLSAqICBw YXJzZWRhdCAtIHRoZSBzdWItY29tbWFuZCBkYXRhLgotICoKLSAqICBlbmRfc3ViIC0gaW5kZXgg b2YgdGhlIGNoYXJhY3RlciBpbiB0aGUgJ3BhcnNlZGF0JyBhcnJheSB3aGljaAotICogICAgICAg ICAgICBpcyB0aGUgbGFzdCBieXRlIGluIGEgc3ViLW5lZ290aWF0aW9uCi0gKgotICogUmV0dXJu czogS2VyYmVyb3MgZXJyb3IgY29kZS4KLSAqLwotCi1zdGF0aWMgaW50Ci0jaWZkZWYgQ0tfQU5T SUMKLWs0X2F1dGhfaXModW5zaWduZWQgY2hhciAqcGFyc2VkYXQsIGludCBlbmRfc3ViKQotI2Vs c2UKLWs0X2F1dGhfaXMocGFyc2VkYXQsZW5kX3N1YikgdW5zaWduZWQgY2hhciAqcGFyc2VkYXQ7 IGludCBlbmRfc3ViOwotI2VuZGlmCi17Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgIFNlc3Np b25fS2V5IHNrZXk7Ci0jaWZkZWYgTUlUX0NVUlJFTlQKLSAgICBCbG9jayBkYXRhYmxvY2ssIHRt cGtleTsKLSAgICBrcmI1X2RhdGEga2RhdGE7Ci0gICAga3JiNV9lbmNfZGF0YSBlbmNkYXRhOwot ICAgIGtyYjVfZXJyb3JfY29kZSBjb2RlOwotI2Vsc2UgLyogTUlUX0NVUlJFTlQgKi8KLSAgICBC bG9jayBkYXRhYmxvY2s7Ci0jZW5kaWYgLyogTUlUX0NVUlJFTlQgKi8KLSNlbmRpZiAgLyogRU5D UllQVElPTiAqLwotICAgIGNoYXIgcmVhbG1bUkVBTE1fU1orMV07Ci0gICAgY2hhciBpbnN0YW5j ZVtJTlNUX1NaXTsKLSAgICBpbnQgciA9IDA7Ci0gICAgY2hhciAqIGRhdGEgPSAmcGFyc2VkYXRb NV07Ci0gICAgaW50ICAgIGNudCA9IGVuZF9zdWIgLSA1OwotICAgIGV4dGVybiBjaGFyIG15aXBh ZGRyW107Ci0gICAgc3RydWN0IGhvc3RlbnQgKmhvc3Q7Ci0gICAgc3RydWN0IGluX2FkZHIgaW5h ZGRyOwotICAgIGludCBpOwotCi0gICAgaWYgKGVuZF9zdWIgPCA0IHx8IHBhcnNlZGF0WzJdICE9 IEFVVEhUWVBFX0tFUkJFUk9TX1Y0KSB7Ci0gICAgICAgIGRlYnVnKEYxMTAsIms0X2F1dGhfaXMi LCJOb3Qga2VyYmVyb3MgdjQiLDApOwotICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNU KTsKLSAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHBh cnNlZGF0WzRdKSB7Ci0gICAgY2FzZSBLUkJfQVVUSDoKLSAgICAgICAgZGVidWcoRjExMCwiazRf YXV0aF9pcyIsIktSQl9BVVRIIiwwKTsKLSAgICAgICAgY2tzdHJuY3B5KHJlYWxtLGNrX2tyYjRf Z2V0cmVhbG0oKSxSRUFMTV9TWisxKTsKLSAgICAgICAgaWYgKHJlYWxtWzBdID09ICdcMCcpIHsK LSAgICAgICAgICAgIFNlbmRLNEF1dGhTQihLUkJfUkVKRUNULCAodm9pZCAqKSJObyBsb2NhbCBW NCBSZWFsbS4iLCAtMSk7Ci0gICAgICAgICAgICBwcmludGYoIlxyXG4/IEtlcmJlcm9zIDQgLSBO byBMb2NhbCBSZWFsbVxyXG4iKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsIms0X2F1dGhfaXMi LCJObyBsb2NhbCByZWFsbSIsMCk7Ci0gICAgICAgICAgICBrcmI0X2Vycm5vID0gLTE7Ci0gICAg ICAgICAgICBtYWtlc3RyKCZrcmI0X2Vycm1zZywiTm8gbG9jYWwgcmVhbG0iKTsKLSAgICAgICAg ICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAgICAgICAgICAgcmV0dXJuIEFVVEhf RkFJTFVSRTsKLSAgICAgICAgfQotICAgICAgICBkZWJ1ZyhGMTEwLCJrNF9hdXRoX2lzIixyZWFs bSwwKTsKLSAgICAgICAgaWYgKCBjbnQgPCBzaXplb2YoazRfYXV0aC5kYXQpICkgewotICAgICAg ICAgICAgazRfYXV0aC5sZW5ndGggPSBjbnQ7Ci0gICAgICAgICAgICBtZW1jcHkoKHZvaWQgKilr NF9hdXRoLmRhdCwgKHZvaWQgKilkYXRhLCBrNF9hdXRoLmxlbmd0aCk7Ci0gICAgICAgIH0gZWxz ZQotICAgICAgICAgICAgazRfYXV0aC5sZW5ndGggPSAwOwotICAgICAgICBja2hleGR1bXAoIms0 X2F1dGguZGF0IixrNF9hdXRoLmRhdCwgazRfYXV0aC5sZW5ndGgpOwotCi0gICAgICAgIC8qIEdl dCBJbnN0YW5jZSAqLwotICAgICAgICBpbmFkZHIuc19hZGRyID0gaW5ldF9hZGRyKG15aXBhZGRy KTsKLSAgICAgICAgaG9zdCA9IGdldGhvc3RieWFkZHIoKHVuc2lnbmVkIGNoYXIgKikmaW5hZGRy LDQsUEZfSU5FVCk7Ci0gICAgICAgIGlmICggaG9zdCApIHsKLSNpZmRlZiBIQUREUkxJU1QKLSAg ICAgICAgICAgIGhvc3QgPSBja19jb3B5aG9zdGVudChob3N0KTsKLSNlbmRpZiAvKiBIQUREUkxJ U1QgKi8KLSAgICAgICAgICAgIGNrc3RybmNweShpbnN0YW5jZSxob3N0LT5oX25hbWUsSU5TVF9T Wik7Ci0gICAgICAgICAgICBmb3IgKCBpPTA7aTxJTlNUX1NaO2krKyApIHsKLSAgICAgICAgICAg ICAgICBpZiAoIGluc3RhbmNlW2ldID09ICcuJyApCi0gICAgICAgICAgICAgICAgICAgIGluc3Rh bmNlW2ldID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg IGluc3RhbmNlW2ldID0gdG9sb3dlcihpbnN0YW5jZVtpXSk7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbnN0YW5jZVswXSA9ICcqJzsKLSAgICAgICAgICAg IGluc3RhbmNlWzFdID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyID0ga3JiX3JkX3Jl cSgmazRfYXV0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBrcmI0X2Rfc3J2ID8ga3Ji NF9kX3NydiA6IEtSQjRfU0VSVklDRV9OQU1FLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg IGluc3RhbmNlLCAwLCAmazRfYWRhdCwgazRfa2V5dGFiKSkgewotCi0gICAgICAgICAgICBja2hl eGR1bXAoIms0X2FkYXQiLCAmazRfYWRhdCwgc2l6ZW9mKEFVVEhfREFUKSk7Ci0gICAgICAgICAg ICBrcmJfa250b2xuKCZrNF9hZGF0LCBrNF9uYW1lKTsKLSAgICAgICAgICAgIGNrbWFrbXNnKHN0 clRtcCxzaXplb2Yoc3RyVG1wKSwKLSAgICAgICAgICAgICAgICAgICAgICJLZXJiZXJvcyBmYWls ZWQgaGltIGFzICIsIGs0X25hbWUsTlVMTCxOVUxMKTsKLSAgICAgICAgICAgIHByaW50ZigiJXNc clxuIixzdHJUbXApOwotICAgICAgICAgICAga3JiNF9lcnJubyA9IHI7Ci0gICAgICAgICAgICBt YWtlc3RyKCZrcmI0X2Vycm1zZyxzdHJUbXApOwotICAgICAgICAgICAgU2VuZEs0QXV0aFNCKEtS Ql9SRUpFQ1QsICh2b2lkICopa3JiX2dldF9lcnJfdGV4dF9lbnRyeShyKSwgLTEpOwotICAgICAg ICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0gICAgICAgICAgICByZXR1cm4gQVVU SF9GQUlMVVJFOwotICAgICAgICB9Ci0KLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAgIG1l bWNweSgodm9pZCAqKWs0X3Nlc3Npb25fa2V5LCAodm9pZCAqKWs0X2FkYXQuc2Vzc2lvbiwKLSAg ICAgICAgICAgICAgICBzaXplb2YoQmxvY2spKTsgICAgICAgICAgICAgICAgIC8qIHNhZmUgKi8K LSAgICAgICAgY2toZXhkdW1wKCJrNF9hdXRoX2lzIGs0X3Nlc3Npb25fa2V5IixrNF9zZXNzaW9u X2tleSxzaXplb2YoQmxvY2spKTsKLSNlbmRpZiAvKiBFTkNSWVBUSU9OICovCi0gICAgICAgIGty Yl9rbnRvbG4oJms0X2FkYXQsIGs0X25hbWUpOwotCi0gICAgICAgIGNrc3RybmNweShzelVzZXJO YW1lQXV0aGVudGljYXRlZCxrNF9uYW1lLFVJREJVRkxFTik7Ci0gICAgICAgIGlmIChzelVzZXJO YW1lUmVxdWVzdGVkICYmICFrdXNlcm9rKCZrNF9hZGF0LCBrNF9uYW1lKSkgewotICAgICAgICAg ICAgU2VuZEs0QXV0aFNCKEtSQl9BQ0NFUFQsICh2b2lkICopMCwgMCk7Ci0gICAgICAgICAgICBp ZiAoICFzdHJjbXAoazRfbmFtZSxzelVzZXJOYW1lUmVxdWVzdGVkKSApCi0gICAgICAgICAgICAg ICAgYXV0aF9maW5pc2hlZChBVVRIX1ZBTElEKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg ICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfVVNFUik7Ci0gICAgICAgICAgICBhY2NlcHRfY29t cGxldGUgPSAxOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgU2VuZEs0 QXV0aFNCKEtSQl9SRUpFQ1QsCi0gICAgICAgICAgICAgICAgICAodm9pZCAqKSJ1c2VyIGlzIG5v dCBhdXRob3JpemVkIiwgLTEpOwotICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVD VCk7Ci0gICAgICAgICAgICBrcmI0X2Vycm5vID0gcjsKLSAgICAgICAgICAgIG1ha2VzdHIoJmty YjRfZXJybXNnLCJ1c2VyIGlzIG5vdCBhdXRob3JpemVkIik7Ci0gICAgICAgICAgICByZXR1cm4o QVVUSF9GQUlMVVJFKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgS1JC NF9DSEFMTEVOR0U6Ci0gICAgICAgIGRlYnVnKEYxMTAsIms0X2F1dGhfaXMiLCJLUkJfQ0hBTExF TkdFIiwwKTsKLSNpZm5kZWYgQ0tfRU5DUllQVElPTgotICAgICAgICBTZW5kSzRBdXRoU0IoS1JC NF9SRVNQT05TRSwgKHZvaWQgKikwLCAwKTsKLSNlbHNlICAgLyogRU5DUllQVElPTiAqLwotICAg ICAgICBpZiAoIVZBTElES0VZKGs0X3Nlc3Npb25fa2V5KSkgewotICAgICAgICAgICAgLyoKLSAg ICAgICAgICAgICogV2UgZG9uJ3QgaGF2ZSBhIHZhbGlkIHNlc3Npb24ga2V5LCBzbyBqdXN0Ci0g ICAgICAgICAgICAqIHNlbmQgYmFjayBhIHJlc3BvbnNlIHdpdGggYW4gZW1wdHkgc2Vzc2lvbgot ICAgICAgICAgICAgKiBrZXkuCi0gICAgICAgICAgICAqLwotICAgICAgICAgICAgU2VuZEs0QXV0 aFNCKEtSQjRfUkVTUE9OU0UsICh2b2lkICopMCwgMCk7Ci0gICAgICAgICAgICBtdXR1YWxfY29t cGxldGUgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICAvKgot ICAgICAgICAqIEluaXRpYWxpemUgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIHNpbmNlIGl0 J3MKLSAgICAgICAgKiB1c2VkIGxhdGVyIG9uIGJ5IHRoZSBlbmNyeXB0aW9uIHJvdXRpbmUuCi0g ICAgICAgICovCi0jaWZkZWYgTUlUX0NVUlJFTlQKLSAgICAgICAga2RhdGEuZGF0YSA9IGs0X3Nl c3Npb25fa2V5OwotICAgICAgICBrZGF0YS5sZW5ndGggPSA4OwotCi0gICAgICAgIGlmIChjb2Rl ID0ga3JiNV9jX3JhbmRvbV9zZWVkKGs1X2NvbnRleHQsICZrZGF0YSkpIHsKLSAgICAgICAgICAg IGNvbV9lcnIoIms0X2F1dGhfaXMiLCBjb2RlLAotICAgICAgICAgICAgICAgICAgICAgIndoaWxl IHNlZWRpbmcgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IiKTsKLSAgICAgICAgICAgIGF1dGhfZmlu aXNoZWQoQVVUSF9SRUpFQ1QpOwotICAgICAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKLSAg ICAgICAgfQotCi0gICAgICAgIG1lbWNweSgodm9pZCAqKWRhdGFibG9jaywgKHZvaWQgKilkYXRh LCBzaXplb2YoQmxvY2spKTsgLyogc2FmZSAqLwotICAgICAgICAvKgotICAgICAgICAqIFRha2Ug dGhlIHJlY2VpdmVkIGVuY3J5cHRlZCBjaGFsbGVuZ2UsIGFuZCBlbmNyeXB0Ci0gICAgICAgICog aXQgYWdhaW4gdG8gZ2V0IGEgdW5pcXVlIHNlc3Npb25fa2V5IGZvciB0aGUKLSAgICAgICAgKiBF TkNSWVBUIG9wdGlvbi4KLSAgICAgICAgKi8KLSAgICAgICAgazRfa3Jia2V5LmVuY3R5cGUgPSBF TkNUWVBFX0RFU19DQkNfUkFXOwotICAgICAgICBrNF9rcmJrZXkubGVuZ3RoID0gODsKLSAgICAg ICAgazRfa3Jia2V5LmNvbnRlbnRzID0gazRfc2Vzc2lvbl9rZXk7Ci0KLSAgICAgICAga2RhdGEu ZGF0YSA9IGRhdGFibG9jazsKLSAgICAgICAga2RhdGEubGVuZ3RoID0gODsKLQotICAgICAgICBl bmNkYXRhLmNpcGhlcnRleHQuZGF0YSA9IHRtcGtleTsKLSAgICAgICAgZW5jZGF0YS5jaXBoZXJ0 ZXh0Lmxlbmd0aCA9IDg7Ci0gICAgICAgIGVuY2RhdGEuZW5jdHlwZSA9IEVOQ1RZUEVfVU5LTk9X TjsKLQotICAgICAgICBpZiAoY29kZSA9IGtyYjVfY19lbmNyeXB0KGs1X2NvbnRleHQsICZrNF9r cmJrZXksIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZGF0YSwg JmVuY2RhdGEpKSB7Ci0gICAgICAgICAgICBjb21fZXJyKCJrNF9hdXRoX2lzIiwgY29kZSwgIndo aWxlIGVuY3J5cHRpbmcgcmFuZG9tIGtleSIpOwotICAgICAgICAgICAgYXV0aF9maW5pc2hlZChB VVRIX1JFSkVDVCk7Ci0gICAgICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOwotICAgICAgICB9 Ci0KLSNpZmRlZiBDS19TU0wKLSAgICAgICAgaWYgKCEoc3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19h Y3RpdmVfZmxhZykpCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgIHsKLSAgICAgICAgICAg IHNrZXkudHlwZSA9IFNLX0RFUzsKLSAgICAgICAgICAgIHNrZXkubGVuZ3RoID0gODsKLSAgICAg ICAgICAgIHNrZXkuZGF0YSA9IHRtcGtleTsKLSAgICAgICAgICAgIGVuY3J5cHRfc2Vzc2lvbl9r ZXkoJnNrZXksIEFVVEhfU0VSVkVSX1RPX0NMSUVOVCk7Ci0gICAgICAgIH0KLSAgICAgICAgLyoK LSAgICAgICAgKiBOb3cgZGVjcnlwdCB0aGUgcmVjZWl2ZWQgZW5jcnlwdGVkIGNoYWxsZW5nZSwK LSAgICAgICAgKiBpbmNyZW1lbnQgYnkgb25lLCByZS1lbmNyeXB0IGl0IGFuZCBzZW5kIGl0IGJh Y2suCi0gICAgICAgICovCi0gICAgICAgIGVuY2RhdGEuY2lwaGVydGV4dC5kYXRhID0gZGF0YWJs b2NrOwotICAgICAgICBlbmNkYXRhLmNpcGhlcnRleHQubGVuZ3RoID0gODsKLSAgICAgICAgZW5j ZGF0YS5lbmN0eXBlID0gRU5DVFlQRV9VTktOT1dOOwotCi0gICAgICAgIGtkYXRhLmRhdGEgPSBr NF9jaGFsbGVuZ2U7Ci0gICAgICAgIGtkYXRhLmxlbmd0aCA9IDg7Ci0KLSAgICAgICAgaWYgKGNv ZGUgPSBrcmI1X2NfZGVjcnlwdChrNV9jb250ZXh0LCAmazRfa3Jia2V5LCAwLCAwLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZW5jZGF0YSwgJmtkYXRhKSkgewotICAgICAg ICAgICAgY29tX2VycigiazRfYXV0aF9pcyIsIGNvZGUsICJ3aGlsZSBkZWNyeXB0aW5nIGNoYWxs ZW5nZSIpOwotICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0gICAgICAg ICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOwotICAgICAgICB9Ci0jZWxzZSAvKiBNSVRfQ1VSUkVO VCAqLwotICAgICAgICBkZXNfc2V0X3JhbmRvbV9nZW5lcmF0b3Jfc2VlZChrNF9zZXNzaW9uX2tl eSk7Ci0gICAgICAgIHIgPSBkZXNfa2V5X3NjaGVkKGs0X3Nlc3Npb25fa2V5LCBrNF9zY2hlZCk7 Ci0gICAgICAgIGlmICggciA9PSAtMSApIHsKLSAgICAgICAgICAgIHByaW50ZigiP0ludmFsaWQg REVTIGtleSBzcGVjaWZpZWQgaW4gY3JlZGVudGlhbHNcclxuIik7Ci0gICAgICAgICAgICBkZWJ1 ZyhGMTEwLCJhdXRoX2lzIENIQUxMRU5HRSIsCi0gICAgICAgICAgICAgICAgICAgImludmFsaWQg REVTIEtleSBzcGVjaWZpZWQgaW4gY3JlZGVudGlhbHMiLDApOwotICAgICAgICB9IGVsc2UgaWYg KCByID09IC0yICkgewotICAgICAgICAgICAgcHJpbnRmKCI/V2VhayBERVMga2V5IHNwZWNpZmll ZCBpbiBjcmVkZW50aWFsc1xyXG4iKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImF1dGhfaXMg Q0hBTExFTkdFIiwKLSAgICAgICAgICAgICAgICAgICAid2VhayBERVMgS2V5IHNwZWNpZmllZCBp biBjcmVkZW50aWFscyIsMCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoIHIgIT0gMCApIHsKLSAgICAg ICAgICAgIHByaW50ZigiP0RFUyBLZXkgU2NoZWR1bGUgbm90IHNldCBieSBjcmVkZW50aWFsc1xy XG4iKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImF1dGhfaXMgQ0hBTExFTkdFIiwKLSAgICAg ICAgICAgICAgICAgICAiREVTIEtleSBTY2hlZHVsZSBub3Qgc2V0IGJ5IGNyZWRlbnRpYWxzIiww KTsKLSAgICAgICAgfQotICAgICAgICBja2hleGR1bXAoImF1dGhfaXMgc2NoZWR1bGUiLGs0X3Nj aGVkLDgqMTYpOwotCi0gICAgICAgIG1lbWNweSgodm9pZCAqKWRhdGFibG9jaywgKHZvaWQgKilk YXRhLCBzaXplb2YoQmxvY2spKTsgLyogc2FmZSAqLwotICAgICAgICBja2hleGR1bXAoImF1dGhf aXMgY2hhbGxlZ2UiLGRhdGFibG9jayxzaXplb2YoQmxvY2spKTsKLQotICAgICAgICAvKgotICAg ICAgICAqIFRha2UgdGhlIHJlY2VpdmVkIGVuY3J5cHRlZCBjaGFsbGVuZ2UsIGFuZCBlbmNyeXB0 Ci0gICAgICAgICogaXQgYWdhaW4gdG8gZ2V0IGEgdW5pcXVlIGs0X3Nlc3Npb25fa2V5IGZvciB0 aGUKLSAgICAgICAgKiBFTkNSWVBUIG9wdGlvbi4KLSAgICAgICAgKi8KLSNpZmRlZiBOVAotICAg ICAgICBkZXNfZWNiX2VuY3J5cHQoZGF0YWJsb2NrLCBrNF9zZXNzaW9uX2tleSwgazRfc2NoZWQs IDEpOwotI2Vsc2UgLyogTlQgKi8KLSAgICAgICAgZGVzX2VjYl9lbmNyeXB0KCZkYXRhYmxvY2ss ICZrNF9zZXNzaW9uX2tleSwgazRfc2NoZWQsIDEpOwotI2VuZGlmIC8qIE5UICovCi0gICAgICAg IGNraGV4ZHVtcCgiYXV0aF9pcyBkZXNfZWNiX2VuY3J5cHQoZGF0YWJsb2NrLGs0X3Nlc3Npb25f a2V5LDEpIiwKLSAgICAgICAgICAgICAgICAgazRfc2Vzc2lvbl9rZXksOCk7Ci0KLSNpZmRlZiBD S19TU0wKLSAgICAgICAgaWYgKCEoc3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykp Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNrZXkudHlwZSA9 IFNLX0RFUzsKLSAgICAgICAgICAgIHNrZXkubGVuZ3RoID0gODsKLSAgICAgICAgICAgIHNrZXku ZGF0YSA9IGs0X3Nlc3Npb25fa2V5OwotICAgICAgICAgICAgZW5jcnlwdF9zZXNzaW9uX2tleSgm c2tleSwgQVVUSF9TRVJWRVJfVE9fQ0xJRU5UKTsKLSAgICAgICAgfQotICAgICAgICAvKgotICAg ICAgICAqIE5vdyBkZWNyeXB0IHRoZSByZWNlaXZlZCBlbmNyeXB0ZWQgY2hhbGxlbmdlLAotICAg ICAgICAqIGluY3JlbWVudCBieSBvbmUsIHJlLWVuY3J5cHQgaXQgYW5kIHNlbmQgaXQgYmFjay4K LSAgICAgICAgKi8KLSNpZmRlZiBOVAotICAgICAgICBkZXNfZWNiX2VuY3J5cHQoZGF0YWJsb2Nr LCBrNF9jaGFsbGVuZ2UsIGs0X3NjaGVkLCAwKTsKLSNlbHNlIC8qIE5UICovCi0gICAgICAgIGRl c19lY2JfZW5jcnlwdCgmZGF0YWJsb2NrLCAmazRfY2hhbGxlbmdlLCBrNF9zY2hlZCwgMCk7Ci0j ZW5kaWYgLyogTlQgKi8KLSAgICAgICAgY2toZXhkdW1wKCJhdXRoX2lzIGRlc19lY2JfZW5jcnlw dChkYXRhYmxvY2ssazRfY2hhbGxlbmdlLDApIiwKLSAgICAgICAgICAgICAgICAgazRfc2Vzc2lv bl9rZXksOCk7Ci0jZW5kaWYgLyogTUlUX0NVUlJFTlQgKi8KLSAgICAgICAgZm9yIChyID0gNzsg ciA+PSAwOyByLS0pIHsKLSAgICAgICAgICAgIHJlZ2lzdGVyIGludCB0OwotICAgICAgICAgICAg dCA9ICh1bnNpZ25lZCBpbnQpazRfY2hhbGxlbmdlW3JdICsgMTsKLSAgICAgICAgICAgIGs0X2No YWxsZW5nZVtyXSA9IHQ7ICAgICAgICAvKiBpZ25vcmUgb3ZlcmZsb3cgKi8KLSAgICAgICAgICAg IGlmICh0IDwgMjU2KSAgICAgICAgICAgICAgICAvKiBpZiBubyBvdmVyZmxvdywgYWxsIGRvbmUg Ki8KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBja2hleGR1bXAo ImF1dGhfaXMgazRfY2hhbGxlbmdlKzEiLGs0X2NoYWxsZW5nZSw4KTsKLQotI2lmZGVmIE1JVF9D VVJSRU5UCi0gICAgICAgIGtkYXRhLmRhdGEgPSBrNF9jaGFsbGVuZ2U7Ci0gICAgICAgIGtkYXRh Lmxlbmd0aCA9IDg7Ci0KLSAgICAgICAgZW5jZGF0YS5jaXBoZXJ0ZXh0LmRhdGEgPSBrNF9jaGFs bGVuZ2U7Ci0gICAgICAgIGVuY2RhdGEuY2lwaGVydGV4dC5sZW5ndGggPSA4OwotICAgICAgICBl bmNkYXRhLmVuY3R5cGUgPSBFTkNUWVBFX1VOS05PV047Ci0KLSAgICAgICAgaWYgKGNvZGUgPSBr cmI1X2NfZW5jcnlwdChrNV9jb250ZXh0LCAmazRfa3Jia2V5LCAwLCAwLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAma2RhdGEsICZlbmNkYXRhKSkgewotICAgICAgICAgICAg Y29tX2VycigiazRfYXV0aF9pcyIsIGNvZGUsICJ3aGlsZSBkZWNyeXB0aW5nIGNoYWxsZW5nZSIp OwotICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0gICAgICAgICAgICBy ZXR1cm4gQVVUSF9GQUlMVVJFOwotICAgICAgICB9Ci0jZWxzZSAvKiBNSVRfQ1VSUkVOVCAqLwot I2lmZGVmIE5UCi0gICAgICAgIGRlc19lY2JfZW5jcnlwdChrNF9jaGFsbGVuZ2UsIGs0X2NoYWxs ZW5nZSwgazRfc2NoZWQsIDEpOwotI2Vsc2UgLyogTlQgKi8KLSAgICAgICAgZGVzX2VjYl9lbmNy eXB0KCZrNF9jaGFsbGVuZ2UsICZrNF9jaGFsbGVuZ2UsIGs0X3NjaGVkLCAxKTsKLSNlbmRpZiAv KiBOVCAqLwotICAgICAgICBja2hleGR1bXAoImF1dGhfaXMgZGVzX2VjYl9lbmNyeXB0KGs0X2No YWxsZW5nZV9rZXksazRfY2hhbGxlbmdlLDEpIiwKLSAgICAgICAgICAgICAgICAgazRfY2hhbGxl bmdlLDgpOwotCi0jZW5kaWYgLyogTUlUX0NVUlJFTlQgKi8KLSAgICAgICAgU2VuZEs0QXV0aFNC KEtSQjRfUkVTUE9OU0UsKHZvaWQgKilrNF9jaGFsbGVuZ2Usc2l6ZW9mKGs0X2NoYWxsZW5nZSkp OwotI2VuZGlmICAvKiBFTkNSWVBUSU9OICovCi0gICAgICAgIG11dHVhbF9jb21wbGV0ZSA9IDE7 Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgaWYgKDEpCi0gICAgICAg ICAgICBwcmludGYoIlVua25vd24gS2VyYmVyb3Mgb3B0aW9uICVkXHJcbiIsIGRhdGFbLTFdKTsK LSAgICAgICAgU2VuZEs0QXV0aFNCKEtSQl9SRUpFQ1QsIDAsIDApOwotICAgICAgICByZXR1cm4o QVVUSF9GQUlMVVJFKTsKLSAgICB9Ci0gICAga3JiNF9lcnJubyA9IHI7Ci0gICAgbWFrZXN0cigm a3JiNF9lcnJtc2csa3JiX2dldF9lcnJfdGV4dF9lbnRyeShrcmI0X2Vycm5vKSk7Ci0gICAgcmV0 dXJuKEFVVEhfU1VDQ0VTUyk7Ci19Ci0jZW5kaWYgLyogS1JCNCAqLwotCi0jaWZkZWYgS1JCNQot aW50Ci1ja19rcmI1X2F1dG9nZXRfVEdUKGNoYXIgKiByZWFsbSkKLXsKLSAgICBleHRlcm4gc3Ry dWN0IGtyYl9vcF9kYXRhIGtyYl9vcDsKLSAgICBleHRlcm4gc3RydWN0IGtyYjVfaW5pdF9kYXRh IGtyYjVfaW5pdDsKLSAgICBjaGFyIHBhc3N3ZFtQV0RfU1pdOwotICAgIGNoYXIgcHJvbXB0WzY0 XTsKLSAgICBjaGFyICogc2F2ZXJlYWxtPU5VTEw7Ci0gICAgaW50ICByYyA9IC0xOwotICAgIGV4 dGVybiBjaGFyICogazVwcnByb21wdDsKLSAgICBleHRlcm4gY2hhciAqIGs1cHdwcm9tcHQ7Ci0K LSAgICBpbmlfa2VyYigpOyAgICAgICAgIC8qIFBsYWNlIGRlZmF1bHRzIGluIGFib3ZlIHN0cnVj dHMgKi8KLSAgICBwYXNzd2RbMF0gPSAnXDAnOwotCi0gICAgaWYgKCBrcmI1X2luaXQucHJpbmNp cGFsID09IE5VTEwgfHwKLSAgICAgICAgIGtyYjVfaW5pdC5wcmluY2lwYWxbMF0gPT0gJ1wwJykg ewotICAgICAgICBpbnQgb2sgPSB1cV90eHQoTlVMTCxrNXBycHJvbXB0ICYmIGs1cHJwcm9tcHRb MF0gPyBrNXBycHJvbXB0IDoKLSAgICAgICAgICAgICAgICAgICJLZXJiZXJvcyA1IFByaW5jaXBh bDogIiwyLE5VTEwscGFzc3dkLFBXRF9TWi0xLE5VTEwsCi0JCQlERUZBVUxUX1VRX1RJTUVPVVQp OwotICAgICAgICBpZiAoIG9rICYmIHBhc3N3ZFswXSApCi0gICAgICAgICAgICBtYWtlc3RyKCZr cmI1X2luaXQucHJpbmNpcGFsLHBhc3N3ZCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJl dHVybigwKTsKLSAgICB9Ci0KLSAgICAvKiBTYXZlIHJlYWxtIGluIGluaXQgc3RydWN0dXJlIHNv IGl0IGNhbiBiZSByZXN0b3JlZCAqLwotICAgIGlmICggcmVhbG0gKSB7Ci0gICAgICAgIHNhdmVy ZWFsbSA9IGtyYjVfaW5pdC5yZWFsbTsKLSAgICAgICAga3JiNV9pbml0LnJlYWxtID0gcmVhbG07 Ci0gICAgfQotCi0gICAgaWYgKCBwYXNzd2RbMF0gfHwgIShwd2J1ZlswXSAmJiBwd2ZsZykgKSB7 Ci0gICAgICAgIGludCBvazsKLSAgICAgICAgaWYgKCBrNXB3cHJvbXB0ICYmIGs1cHdwcm9tcHRb MF0gJiYKLSAgICAgICAgICAgICAoc3RybGVuKGs1cHdwcm9tcHQpICsgc3RybGVuKGtyYjVfaW5p dC5wcmluY2lwYWwpICsKLSAgICAgICAgICAgICAgc3RybGVuKGtyYjVfaW5pdC5yZWFsbSkgLSA0 KSA8IHNpemVvZihwcm9tcHQpKSB7Ci0gICAgICAgICAgICBzcHJpbnRmKHByb21wdCxrNXB3cHJv bXB0LGtyYjVfaW5pdC5wcmluY2lwYWwsa3JiNV9pbml0LnJlYWxtKTsKLSAgICAgICAgfSBlbHNl Ci0gICAgICAgIGNrbWFreG1zZyhwcm9tcHQsc2l6ZW9mKHByb21wdCksCi0gICAgICAgICAgICAg ICAgICBrNXB3cHJvbXB0ICYmIGs1cHdwcm9tcHRbMF0gPyBrNXB3cHJvbXB0IDoKLSAgICAgICAg ICAgICAgICAgICJLZXJiZXJvcyA1IFBhc3N3b3JkIGZvciAiLAotICAgICAgICAgICAgICAgICAg a3JiNV9pbml0LnByaW5jaXBhbCwiQCIsa3JiNV9pbml0LnJlYWxtLCI6ICIsCi0gICAgICAgICAg ICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMCi0gICAgICAgICAgICAg ICAgICk7Ci0gICAgICAgIG9rID0gdXFfdHh0KE5VTEwscHJvbXB0LDIsTlVMTCxwYXNzd2QsUFdE X1NaLTEsTlVMTCwKLQkJICAgIERFRkFVTFRfVVFfVElNRU9VVCk7Ci0gICAgICAgIGlmICggIW9r ICkKLSAgICAgICAgICAgIHBhc3N3ZFswXSA9ICdcMCc7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg Y2tzdHJuY3B5KHBhc3N3ZCwoY2hhciAqKXB3YnVmLHNpemVvZihwYXNzd2QpKTsKLSNpZmRlZiBP UzIKLSAgICAgICAgaWYgKCBwd2NyeXB0ICkKLSAgICAgICAgICAgIGNrX2VuY3J5cHQoKGNoYXIg KilwYXNzd2QpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgIH0KLQotICAgIGlmICggcGFzc3dkWzBd ICkgewotICAgICAgICBleHRlcm4gc3RydWN0IGtyYjRfaW5pdF9kYXRhIGtyYjRfaW5pdDsKLSAg ICAgICAgY2hhciAqIHNhdmVrNHJlYWxtPU5VTEw7Ci0KLSAgICAgICAgbWFrZXN0cigma3JiNV9p bml0LnBhc3N3b3JkLHBhc3N3ZCk7Ci0KLSAgICAgICAgaWYgKCBrcmI1X2RfZ2V0azQgKSB7Ci0g ICAgICAgICAgICBrcmI1X2luaXQuZ2V0azQgPSAxOwotICAgICAgICAgICAgbWFrZXN0cigma3Ji NF9pbml0LnByaW5jaXBhbCxrcmI1X2luaXQucHJpbmNpcGFsKTsKLSAgICAgICAgICAgIG1ha2Vz dHIoJmtyYjRfaW5pdC5wYXNzd29yZCxwYXNzd2QpOwotICAgICAgICAgICAgaWYgKCByZWFsbSAp IHsKLSAgICAgICAgICAgICAgICBzYXZlazRyZWFsbSA9IGtyYjRfaW5pdC5yZWFsbTsKLSAgICAg ICAgICAgICAgICBrcmI0X2luaXQucmVhbG0gPSByZWFsbTsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIHJjID0gY2tfa3JiNV9pbml0VEdUKCZrcmJfb3AsICZrcmI1X2luaXQsJmtyYjRfaW5p dCk7Ci0KLSAgICAgICAgICAgIGlmICggc2F2ZWs0cmVhbG0gKQotICAgICAgICAgICAgICAgIGty YjRfaW5pdC5yZWFsbSA9IHNhdmVrNHJlYWxtOwotICAgICAgICAgICAgZnJlZShrcmI0X2luaXQu cGFzc3dvcmQpOwotICAgICAgICAgICAga3JiNF9pbml0LnBhc3N3b3JkID0gTlVMTDsKLSAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJjID0gY2tfa3JiNV9pbml0VEdUKCZrcmJfb3AsICZr cmI1X2luaXQsTlVMTCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmcmVlKGtyYjVfaW5pdC5wYXNz d29yZCk7Ci0gICAgICAgIGtyYjVfaW5pdC5wYXNzd29yZCA9IE5VTEw7Ci0KLSAgICAgICAgbWVt c2V0KHBhc3N3ZCwwLFBXRF9TWik7Ci0gICAgfQotCi0gICAgLyogcmVzdG9yZSByZWFsbSB0byBp bml0IHN0cnVjdHVyZSBpZiBuZWVkZWQgKi8KLSAgICBpZiAoIHNhdmVyZWFsbSApCi0gICAgICAg IGtyYjVfaW5pdC5yZWFsbSA9IHNhdmVyZWFsbTsKLSAgICByZXR1cm4ocmMgPT0gMCk7Ci19Ci0K LXN0YXRpYyBrcmI1X2Vycm9yX2NvZGUKLSNpZmRlZiBDS19BTlNJQwotazVfZ2V0X2NjYWNoZSgg a3JiNV9jb250ZXh0IGs1X2NvbnRleHQsIGtyYjVfY2NhY2hlICogcF9jY2FjaGUsCi0gICAgICAg ICAgICAgICBjaGFyICogY2NfbmFtZSApCi0jZWxzZSAgLyogQ0tfQU5TSUMgKi8KLWs1X2dldF9j Y2FjaGUoazVfY29udGV4dCwgcF9jY2FjaGUsIGNjX25hbWUpCi0gICAga3JiNV9jb250ZXh0IGs1 X2NvbnRleHQ7Ci0gICAga3JiNV9jY2FjaGUgKiBwX2NjYWNoZTsKLSAgICBjaGFyICogY2NfbmFt ZTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIGtyYjVfZXJyb3JfY29kZSByPTA7Ci0g ICAgY2hhciBjY190bXBbQ0tNQVhQQVRIKzFdOwotICAgIGNvbnN0IGNoYXIgKiBkZWZfbmFtZSA9 IE5VTEw7Ci0KLSNpZm5kZWYgSEVJTURBTAotICAgIGlmICggY2NfbmFtZSApIHsKLSAgICAgICAg aWYgKCBzdHJuY21wKCJGSUxFOiIsY2NfbmFtZSw1KSAmJgotICAgICAgICAgICAgIHN0cm5jbXAo Ik1FTU9SWToiLGNjX25hbWUsNykgJiYKLSAgICAgICAgICAgICBzdHJuY21wKCJBUEk6IixjY19u YW1lLDQpICYmCi0gICAgICAgICAgICAgc3RybmNtcCgiU1RESU86IixjY19uYW1lLDYpICYmCi0J ICAgICBzdHJuY21wKCJNU0xTQToiLGNjX25hbWUsNikpCi0jaWZkZWYgTlQKLSAgICAgICAgICAg IGNrbWFrbXNnKGNjX3RtcCxDS01BWFBBVEgsIkFQSToiLGNjX25hbWUsTlVMTCxOVUxMKTsKLSNl bHNlIC8qIE5UICovCi0gICAgICAgICAgICBja21ha21zZyhjY190bXAsQ0tNQVhQQVRILCJGSUxF OiIsY2NfbmFtZSxOVUxMLE5VTEwpOwotI2VuZGlmIC8qIE5UICovCi0gICAgICAgIGVsc2Ugewot ICAgICAgICAgICAgY2tzdHJuY3B5KGNjX3RtcCxjY19uYW1lLENLTUFYUEFUSCk7Ci0gICAgICAg IH0KLSAgICAgICAgciA9IGtyYjVfY2NfcmVzb2x2ZSAoazVfY29udGV4dCwgY2NfdG1wLCBwX2Nj YWNoZSk7Ci0gICAgICAgIGlmIChyICE9IDApIHsKLSAgICAgICAgICAgIGNvbV9lcnIoIms1X2dl dF9jY2FjaGUgcmVzb2x2aW5nIGNjYWNoZSIsciwKLSAgICAgICAgICAgICAgICAgICAgIGNjX3Rt cCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKiBNYWtlIHN1cmUgR1NTQVBJIHNl ZXMgdGhlIHNhbWUgY2FjaGUgd2UgYXJlIHVzaW5nICovCi0gICAgICAgICAgICBjaGFyIGJ1Zlsx MjhdOwotICAgICAgICAgICAgY2ttYWttc2coKGNoYXIgKilidWYsMTI4LCJLUkI1Q0NOQU1FPSIs Y2NfdG1wLE5VTEwsTlVMTCk7Ci0gICAgICAgICAgICBwdXRlbnYoYnVmKTsKLSAgICAgICAgfQot ICAgIH0gZWxzZSBpZiAoIGtyYjVfZF9jYyApIHsKLSAgICAgICAgaWYgKCBzdHJuY21wKCJGSUxF OiIsa3JiNV9kX2NjLDUpICYmCi0gICAgICAgICAgICAgc3RybmNtcCgiTUVNT1JZOiIsa3JiNV9k X2NjLDcpICYmCi0gICAgICAgICAgICAgc3RybmNtcCgiQVBJOiIsa3JiNV9kX2NjLDQpICYmCi0g ICAgICAgICAgICAgc3RybmNtcCgiU1RESU86IixrcmI1X2RfY2MsNikgJiYKLQkgICAgIHN0cm5j bXAoIk1TTFNBOiIsIGtyYjVfZF9jYyw2KSkKLSNpZmRlZiBOVAotICAgICAgICAgICAgY2ttYWtt c2coY2NfdG1wLENLTUFYUEFUSCwiQVBJOiIsa3JiNV9kX2NjLE5VTEwsTlVMTCk7Ci0jZWxzZSAv KiBOVCAqLwotICAgICAgICAgICAgY2ttYWttc2coY2NfdG1wLENLTUFYUEFUSCwiRklMRToiLGty YjVfZF9jYyxOVUxMLE5VTEwpOwotI2VuZGlmIC8qIE5UICovCi0gICAgICAgIGVsc2UgewotICAg ICAgICAgICAgY2tzdHJuY3B5KGNjX3RtcCxrcmI1X2RfY2MsQ0tNQVhQQVRIKTsKLSAgICAgICAg fQotICAgICAgICByID0ga3JiNV9jY19yZXNvbHZlIChrNV9jb250ZXh0LCBjY190bXAsIHBfY2Nh Y2hlKTsKLSAgICAgICAgaWYgKHIgIT0gMCkgewotICAgICAgICAgICAgY29tX2VycigiazVfZ2V0 X2NjYWNoZSByZXNvbHZpbmcgY2NhY2hlIixyLAotICAgICAgICAgICAgICAgICAgICAga3JiNV9k X2NjKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIE1ha2Ugc3VyZSBHU1NBUEkg c2VlcyB0aGUgc2FtZSBjYWNoZSB3ZSBhcmUgdXNpbmcgKi8KLSAgICAgICAgICAgIGNoYXIgYnVm WzEyOF07Ci0gICAgICAgICAgICBja21ha21zZygoY2hhciAqKWJ1ZiwxMjgsIktSQjVDQ05BTUU9 IixjY190bXAsTlVMTCxOVUxMKTsKLSAgICAgICAgICAgIHB1dGVudihidWYpOwotICAgICAgICB9 Ci0gICAgfSBlbHNlCi0jZW5kaWYgLyogSEVJTURBTCAqLwotICAgIHsKLSAgICAgICAgaWYgKChy ID0ga3JiNV9jY19kZWZhdWx0KGs1X2NvbnRleHQsIHBfY2NhY2hlKSkpIHsKLSAgICAgICAgICAg IGNvbV9lcnIoIms1X2dldF9jY2FjaGUiLHIsIndoaWxlIGdldHRpbmcgZGVmYXVsdCBjY2FjaGUi KTsKLSAgICAgICAgfQotICAgIH0KLSAgICAvKiBkbyBub3Qgc2V0IGtyYjVfZXJybm8va3JiNV9l cnJtc2cgaGVyZSBzaW5jZSB0aGUgdmFsdWUgcmV0dXJuZWQgKi8KLSAgICAvKiBpcyBiZWluZyBw YXNzZWQgaW50ZXJuYWxseSB3aXRoaW4gdGhlIGtyYjUgZnVuY3Rpb25zLiAgICAgICAgICAgKi8K LSAgICByZXR1cm4ocik7Ci19Ci0KLQotY2hhciAqCi1ja19rcmI1X3JlYWxtb2Zob3N0KGNoYXIg Kmhvc3QpCi17Ci0gICAgY2hhciAqKiByZWFsbWxpc3Q9TlVMTDsKLSAgICBrcmI1X2NvbnRleHQg cHJpdmF0ZV9jb250ZXh0PU5VTEw7Ci0gICAgc3RhdGljIGNoYXIgKiByZWFsbSA9IE5VTEw7Ci0K LSAgICBpZiAoICFob3N0ICkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAoIHJlYWxt ICkgewotICAgICAgICBmcmVlKHJlYWxtKTsKLSAgICAgICAgcmVhbG0gPSBOVUxMOwotICAgIH0K LQotICAgIC8qIGNyZWF0ZSBwcml2YXRlX2NvbnRleHQgKi8KLSAgICBpZiAoa3JiNV9pbml0X2Nv bnRleHQoJnByaXZhdGVfY29udGV4dCkpIHsKLSAgICAgICAgZGVidWcoRjExMCwiY2tfa3JiNV9y ZWFsbW9maG9zdCgpIiwidW5hYmxlIHRvIGluaXRfY29udGV4dCIsMCk7Ci0gICAgICAgIHJldHVy bihOVUxMKTsKLSAgICB9Ci0KLSAgICBrcmI1X2dldF9ob3N0X3JlYWxtKHByaXZhdGVfY29udGV4 dCxob3N0LCZyZWFsbWxpc3QpOwotICAgIGlmIChyZWFsbWxpc3QgJiYgcmVhbG1saXN0WzBdKSB7 Ci0gICAgICAgIG1ha2VzdHIoJnJlYWxtLHJlYWxtbGlzdFswXSk7Ci0gICAgICAgIGtyYjVfZnJl ZV9ob3N0X3JlYWxtKHByaXZhdGVfY29udGV4dCxyZWFsbWxpc3QpOwotICAgICAgICByZWFsbWxp c3QgPSBOVUxMOwotICAgIH0KLQotICAgIGlmICggcHJpdmF0ZV9jb250ZXh0ICkgewotICAgICAg ICBrcmI1X2ZyZWVfY29udGV4dChwcml2YXRlX2NvbnRleHQpOwotICAgICAgICBwcml2YXRlX2Nv bnRleHQgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChja3N0cmNocihyZWFsbSwnLicpID09IE5V TEwpIHsKLSAgICAgICAgaW50IG4gPSAwOwotICAgICAgICBjaGFyICogcCA9IGhvc3Q7Ci0gICAg ICAgIHdoaWxlICggKHAgPSBja3N0cmNocihwLCcuJykpICE9IE5VTEwgKSB7Ci0gICAgICAgICAg ICBuKys7Ci0gICAgICAgICAgICBwKys7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG4gPT0gMSkg ewotICAgICAgICAgICAgbWFrZXN0cigmcmVhbG0saG9zdCk7Ci0gICAgICAgICAgICBja3VwcGVy KHJlYWxtKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZyZWUocmVhbG0pOwotICAg ICAgICAgICAgcmVhbG0gPSBOVUxMOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybihyZWFs bSk7Ci19Ci0KLS8qCi0gKgotICogSzVfYXV0aF9zZW5kIC0gZ2V0cyBhdXRoZW50aWNhdGlvbiBi aXRzIHdlIG5lZWQgdG8gc2VuZCB0byBLREMuCi0gKgotICogQ29kZSBsaWZ0ZWQgZnJvbSB0ZWxu ZXQgc2FtcGxlIGNvZGUgaW4gdGhlIGFwcGwgZGlyZWN0b3J5LgotICoKLSAqIFJlc3VsdCBpcyBs ZWZ0IGluIGs1X2F1dGgKLSAqCi0gKiBSZXR1cm5zOiAwIG9uIGZhaWx1cmUsIDEgb24gc3VjY2Vz cwotICoKLSAqLwotCi1zdGF0aWMgaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWs1X2F1dGhfc2VuZChp bnQgaG93LCBpbnQgZW5jcnlwdCwgaW50IGZvcndhcmQpCi0jZWxzZQotazVfYXV0aF9zZW5kKGhv dyxlbmNyeXB0LGZvcndhcmQpIGludCBob3c7IGludCBlbmNyeXB0OyBpbnQgZm9yd2FyZDsKLSNl bmRpZgotewotICAgIGtyYjVfZXJyb3JfY29kZSByPTA7Ci0gICAga3JiNV9jY2FjaGUgY2NhY2hl PU5VTEw7Ci0jaWZuZGVmIEhFSU1EQUwKLSAgICBrcmI1X2NyZWRzIGNyZWRzOwotI2VuZGlmIC8q IEhFSU1EQUwgKi8KLSAgICBrcmI1X2NyZWRzICogbmV3X2NyZWRzPU5VTEw7Ci0jaWZkZWYgQ0tf RU5DUllQVElPTgotICAgIGtyYjVfa2V5YmxvY2sgKm5ld2tleSA9IDA7Ci0jZW5kaWYgLyogQ0tf RU5DUllQVElPTiAqLwotICAgIGtyYjVfZmxhZ3MgYXBfb3B0cywgYXV0aF9mbGFnczsKLSAgICBj aGFyIHR5cGVfY2hlY2tbMzJdOwotICAgIGtyYjVfZGF0YSBjaGVja3N1bTsKLSAgICBpbnQgbGVu PTA7Ci0gICAgY2hhciAqIHJlYWxtID0gTlVMTDsKLSAgICBjaGFyIHRndFsyNTZdOwotCi0gICAg cmVhbG0gPSBja19rcmI1X3JlYWxtb2Zob3N0KHN6SG9zdE5hbWUpOwotICAgIGlmICghcmVhbG0p IHsKLSAgICAgICAgY2tzdHJuY3B5KHN0clRtcCwgIkNhbid0IGZpbmQgcmVhbG0gZm9yIGhvc3Qg XCIiLEFVVEhUTVBCTCk7Ci0gICAgICAgIGNrc3RybmNhdChzdHJUbXAsIHN6SG9zdE5hbWUsQVVU SFRNUEJMKTsKLSAgICAgICAgY2tzdHJuY2F0KHN0clRtcCwgIlwiIixBVVRIVE1QQkwpOwotICAg ICAgICBwcmludGYoIj9LZXJiZXJvcyA1IGVycm9yOiAlc1xyXG4iLHN0clRtcCk7Ci0gICAgICAg IGtyYjVfZXJybm8gPSBLUkI1X0VSUl9IT1NUX1JFQUxNX1VOS05PV047Ci0gICAgICAgIG1ha2Vz dHIoJmtyYjVfZXJybXNnLHN0clRtcCk7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0KLSAg ICBja21ha21zZyh0Z3Qsc2l6ZW9mKHRndCksImtyYnRndC8iLHJlYWxtLCJAIixyZWFsbSk7Ci0g ICAgZGVidWcoRjExMCwiazVfYXV0aF9zZW5kIFRHVCIsdGd0LDApOwotICAgIGlmICgga3JiNV9h dXRvZ2V0ICYmCi0gICAgICAgICAhKChja19rcmI1X3RrdF9pc3ZhbGlkKE5VTEwsdGd0KSA+IDAp IHx8Ci0gICAgICAgICAgKGNrX2tyYjVfaXNfdGd0X3ZhbGlkKCkgPiAwKSkgKQotICAgICAgICBj a19rcmI1X2F1dG9nZXRfVEdUKHJlYWxtKTsKLQotICAgIHIgPSBrNV9nZXRfY2NhY2hlKGs1X2Nv bnRleHQsJmNjYWNoZSxOVUxMKTsKLSAgICBpZiAoIHIgKSB7Ci0gICAgICAgIGNvbV9lcnIoTlVM TCwgciwgIndoaWxlIGF1dGhvcml6aW5nICgwKS4iKTsKLSAgICAgICAga3JiNV9lcnJubyA9IHI7 Ci0gICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJubykp OwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotCi0jaWZuZGVmIEhFSU1EQUwKLSAgICBtZW1z ZXQoKGNoYXIgKikmY3JlZHMsIDAsIHNpemVvZihjcmVkcykpOwotICAgIGlmIChyID0ga3JiNV9z bmFtZV90b19wcmluY2lwYWwoazVfY29udGV4dCwgc3pIb3N0TmFtZSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAga3JiNV9kX3NydiA/IGtyYjVfZF9zcnYgOiBLUkI1X1NFUlZJQ0Vf TkFNRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS1JCNV9OVF9TUlZfSFNULCAm Y3JlZHMuc2VydmVyKSkgewotICAgICAgICBjb21fZXJyKE5VTEwsIHIsICJ3aGlsZSBhdXRob3Jp emluZyAoMSkuIik7Ci0gICAgICAgIGtyYjVfZXJybm8gPSByOwotICAgICAgICBtYWtlc3RyKCZr cmI1X2Vycm1zZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKLSAgICAgICAgcmV0dXJuKDAp OwotICAgIH0KLQotICAgIGlmIChmb3J3YXJkX2ZsYWcpIHsKLSAgICAgICAgaWYgKGZ3ZF9zZXJ2 ZXIpIHsKLSAgICAgICAgICAgIGtyYjVfZnJlZV9wcmluY2lwYWwoazVfY29udGV4dCxmd2Rfc2Vy dmVyKTsKLSAgICAgICAgICAgIGZ3ZF9zZXJ2ZXIgPSBOVUxMOwotICAgICAgICB9Ci0gICAgICAg IGtyYjVfY29weV9wcmluY2lwYWwoazVfY29udGV4dCxjcmVkcy5zZXJ2ZXIsJmZ3ZF9zZXJ2ZXIp OwotICAgIH0KLQotICAgIHIgPSBrcmI1X2NjX2dldF9wcmluY2lwYWwoazVfY29udGV4dCwgY2Nh Y2hlLCAmY3JlZHMuY2xpZW50KTsKLSAgICBpZiAocikgewotICAgICAgICBjb21fZXJyKE5VTEws IHIsICJ3aGlsZSBhdXRob3JpemluZyAoMikuIik7Ci0gICAgICAgIGtyYjVfZnJlZV9jcmVkX2Nv bnRlbnRzKGs1X2NvbnRleHQsICZjcmVkcyk7Ci0gICAgICAgIGtyYjVfZXJybm8gPSByOwotICAg ICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKLSAg ICAgICAgcmV0dXJuKDApOwotICAgIH0KLQotICAgIGlmIChzelVzZXJOYW1lWzBdID09ICdcMCcp IHsgICAgICAgICAgICAgICAgLyogR2V0IHVzZXIgbmFtZSBub3cgKi8KLSAgICAgICAgbGVuICA9 IGtyYjVfcHJpbmNfY29tcG9uZW50KGs1X2NvbnRleHQsIGNyZWRzLmNsaWVudCwgMCktPmxlbmd0 aDsKLSAgICAgICAgaWYgKCBsZW4gPCBzaXplb2Yoc3pVc2VyTmFtZSkgKSB7Ci0gICAgICAgICAg ICBtZW1jcHkoc3pVc2VyTmFtZSwKLSAgICAgICAgICAgICAgICAgICAga3JiNV9wcmluY19jb21w b25lbnQoazVfY29udGV4dCwgY3JlZHMuY2xpZW50LCAwKS0+ZGF0YSwKLSAgICAgICAgICAgICAg ICAgICAgbGVuKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIHNhZmUgKi8KLSAgICAgICAgfSBl bHNlCi0gICAgICAgICAgICBsZW4gPSAwOwotICAgICAgICBzelVzZXJOYW1lW2xlbl0gPSAnXDAn OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNoYXIgKiBuYW1lID0gTlVMTDsKLSAgICAgICAgbGVu ICA9IGtyYjVfcHJpbmNfY29tcG9uZW50KGs1X2NvbnRleHQsIGNyZWRzLmNsaWVudCwgMCktPmxl bmd0aDsKLSAgICAgICAgaWYgKCBsZW4gPT0gc3RybGVuKHN6VXNlck5hbWUpICkgewotICAgICAg ICAgICAgbmFtZSA9IGtyYjVfcHJpbmNfY29tcG9uZW50KGs1X2NvbnRleHQsIGNyZWRzLmNsaWVu dCwgMCktPmRhdGE7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICBpZiAoICFzdHJuaWNtcChzelVz ZXJOYW1lLG5hbWUsbGVuKSApCi0gICAgICAgICAgICAgICAgbWVtY3B5KHN6VXNlck5hbWUsbmFt ZSxsZW4pOyAgICAvKiBzYWZlICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAgIH0KLSAgICB9 Ci0gICAgaWYgKCB0bl9hdXRoX2tyYjVfZGVzX2J1ZyApIHsgICAvKiAhQUxMT1dfS1JCXzNERVNf RU5DUllQVCAqLwotICAgICAgICAvKiBOb3Qgc3VyZSBpZiB0aGlzIGlzIG5lY2Vzc2FyeSBhbnlt b3JlLiAgV2hhdCBpbXBhY3QgZG9lcyBpdCBoYXZlCi0gICAgICAgICAqIG9uIFdpbjIwMDAgVEdU cyB0aGF0IHVzZSBERVNfQ0JDX01ENSBvciBSQzRfSE1BQz8KLSAgICAgICAgICoKLSAgICAgICAg ICogVGhpcyBwcmV2ZW50cyB1c2luZyAzREVTIFNlcnZpY2UgVGlja2V0cy4KLSAgICAgICAgICov Ci0gICAgICAgIGNyZWRzLmtleWJsb2NrLmVuY3R5cGU9RU5DVFlQRV9ERVNfQ0JDX0NSQzsKLSAg ICB9Ci0KLSAgICBpZiAociA9IGtyYjVfZ2V0X2NyZWRlbnRpYWxzKGs1X2NvbnRleHQsIDAsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2NhY2hlLCAmY3JlZHMsICZuZXdfY3Jl ZHMpKSB7Ci0gICAgICAgIGNvbV9lcnIoTlVMTCwgciwgIndoaWxlIGF1dGhvcml6aW5nICgzKS4i KTsKLSAgICAgICAga3JiNV9mcmVlX2NyZWRfY29udGVudHMoazVfY29udGV4dCwgJmNyZWRzKTsK LSAgICAgICAga3JiNV9lcnJubyA9IHI7Ci0gICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLGVy cm9yX21lc3NhZ2Uoa3JiNV9lcnJubykpOwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2Vu ZGlmIC8qIEhFSU1EQUwgKi8KLQotICAgIGlmIChhdXRoX2NvbnRleHQpIHsKLSAgICAgICAga3Ji NV9hdXRoX2Nvbl9mcmVlKGs1X2NvbnRleHQsIGF1dGhfY29udGV4dCk7Ci0gICAgICAgIGF1dGhf Y29udGV4dCA9IDA7Ci0gICAgfQotICAgIGlmIChyID0ga3JiNV9hdXRoX2Nvbl9pbml0KGs1X2Nv bnRleHQsICZhdXRoX2NvbnRleHQpKSB7Ci0gICAgICAgIGNvbV9lcnIoTlVMTCwgciwgIndoaWxl IGluaXRpYWxpemluZyBhdXRoIGNvbnRleHQiKTsKLSAgICAgICAga3JiNV9lcnJubyA9IHI7Ci0g ICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJubykpOwot ICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotCi0gICAgLyogVVBEQVRFIGZvciBTVEFSVF9UTFMu ICBBVVRIX0VOQ1JZUFRfU1RBUlRfVExTIGFuZCBpbmNsdXNpb24gb2YgKi8KLSAgICAvKiBjbGll bnQgYW5kIHRoZW4gc2VydmVyIGZpbmlzaGVkIG1lc3NhZ2VzLiAgICAgICAgICAgICAgICAgICAg ICAqLwotCi0gICAgdHlwZV9jaGVja1swXSA9IEFVVEhUWVBFX0tFUkJFUk9TX1Y1OwotICAgIHR5 cGVfY2hlY2tbMV0gPSBBVVRIX0NMSUVOVF9UT19TRVJWRVIgfAotICAgICAgICAoaG93ID8gQVVU SF9IT1dfTVVUVUFMIDogQVVUSF9IT1dfT05FX1dBWSkgfAotICAgICAgICAoZW5jcnlwdCkgfAot ICAgICAgICAoZm9yd2FyZCA/IElOSV9DUkVEX0ZXRF9PTiA6IElOSV9DUkVEX0ZXRF9PRkYpOwot I2lmZGVmIENLX1NTTAotICAgIGlmIChlbmNyeXB0ID09IEFVVEhfRU5DUllQVF9TVEFSVF9UTFMp IHsKLSAgICAgICAgc3NsX2dldF9jbGllbnRfZmluaXNoZWQoJnR5cGVfY2hlY2tbMl0sMTIpOwot ICAgICAgICBzc2xfZ2V0X3NlcnZlcl9maW5pc2hlZCgmdHlwZV9jaGVja1sxNF0sMTIpOwotICAg IH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotI2lmbmRlZiBIRUlNREFMCi0gICAgY2hlY2tzdW0u bWFnaWMgPSBLVjVNX0RBVEE7Ci0jZW5kaWYgLyogSEVJTURBTCAqLwotICAgIGNoZWNrc3VtLmxl bmd0aCA9Ci0jaWZkZWYgQ0tfU1NMCi0gICAgICAgIChlbmNyeXB0ID09IEFVVEhfRU5DUllQVF9T VEFSVF9UTFMpID8gMjYgOgotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICAyOwotICAgIGNo ZWNrc3VtLmRhdGEgPSAoY2hhciAqKSZ0eXBlX2NoZWNrOwotCi0gICAgYXBfb3B0cyA9IDA7Ci0g ICAgaWYgKChob3cgJiBBVVRIX0hPV19NQVNLKSA9PSBBVVRIX0hPV19NVVRVQUwpCi0gICAgICAg IGFwX29wdHMgfD0gQVBfT1BUU19NVVRVQUxfUkVRVUlSRUQ7Ci0KLSNpZmRlZiBIRUlNREFMCi0g ICAgciA9IGtyYjVfYXV0aF9zZXRrZXl0eXBlKGs1X2NvbnRleHQsIGF1dGhfY29udGV4dCwgS0VZ VFlQRV9ERVMpOwotICAgIGlmIChyKQotICAgICAgICBjb21fZXJyKE5VTEwsIHIsICJ3aGlsZSBz ZXR0aW5nIGF1dGgga2V5dHlwZSIpOwotICAgIHIgPSBrcmI1X2F1dGhfY29uX3NldGFkZHJzX2Zy b21fZmQoazVfY29udGV4dCxhdXRoX2NvbnRleHQsICZ0dHlmZCk7Ci0gICAgaWYgKHIpCi0gICAg ICAgIGNvbV9lcnIoTlVMTCwgciwgIndoaWxlIHNldHRpbmcgYXV0aCBhZGRycyIpOwotICAgIHIg PSBrcmI1X21rX3JlcShrNV9jb250ZXh0LCAmYXV0aF9jb250ZXh0LCBhcF9vcHRzLAotICAgICAg ICAgICAgICAgICAgICBrcmI1X2Rfc3J2ID8ga3JiNV9kX3NydiA6IEtSQjVfU0VSVklDRV9OQU1F LAotICAgICAgICAgICAgICAgICAgICBzekhvc3ROYW1lLCAmY2hlY2tzdW0sIGNjYWNoZSwgJms1 X2F1dGgpOwotICAgIGlmIChyKQotICAgICAgICBjb21fZXJyKE5VTEwsIHIsICJ3aGlsZSBtYWtp bmcgcmVxdWVzdCIpOwotI2Vsc2UgLyogSEVJTURBTCAqLwotICAgIGF1dGhfZmxhZ3MgPSBLUkI1 X0FVVEhfQ09OVEVYVF9SRVRfVElNRTsKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgYXBfb3B0 cyB8PSBBUF9PUFRTX1VTRV9TVUJLRVk7Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotI2lm ZGVmIFRMU19WRVJJRlkKLSAgICBpZiAoKGhvdyAmIEFVVEhfRU5DUllQVF9NQVNLKSA9PSBBVVRI X0VOQ1JZUFRfU1RBUlRfVExTKSB7Ci0gICAgICAgIGF1dGhfZmxhZ3MgfD0gS1JCNV9BVVRIX0NP TlRFWFRfRE9fU0VRVUVOQ0U7Ci0gICAgICAgIGlmICgha3JiNV9kX25vX2FkZHJlc3NlcykKLSAg ICAgICAgICAgIHIgPSBrcmI1X2F1dGhfY29uX2dlbmFkZHJzKGs1X2NvbnRleHQsIGF1dGhfY29u dGV4dCwgdHR5ZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLUkI1X0FVVEhf Q09OVEVYVF9HRU5FUkFURV9SRU1PVEVfRlVMTF9BRERSKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tf U1NMICovCi0gICAga3JiNV9hdXRoX2Nvbl9zZXRmbGFncyhrNV9jb250ZXh0LCBhdXRoX2NvbnRl eHQsIGF1dGhfZmxhZ3MpOwotICAgIHIgPSBrcmI1X21rX3JlcV9leHRlbmRlZChrNV9jb250ZXh0 LCAmYXV0aF9jb250ZXh0LCBhcF9vcHRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JmNoZWNrc3VtLCBuZXdfY3JlZHMsICZrNV9hdXRoKTsKLSNlbmRpZiAvKiBIRUlNREFMICovCi0K LSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgaWYgKCFyKSB7Ci0gICAgICAgIHIgPSBrcmI1X2F1 dGhfY29uX2dldGxvY2Fsc3Via2V5KGs1X2NvbnRleHQsIGF1dGhfY29udGV4dCwgJm5ld2tleSk7 Ci0gICAgICAgIGlmIChyKQotICAgICAgICAgICAgciA9IGtyYjVfYXV0aF9jb25fZ2V0a2V5KGs1 X2NvbnRleHQsIGF1dGhfY29udGV4dCwgJm5ld2tleSk7Ci0KLSAgICAgICAgaWYgKGs1X3Nlc3Np b25fa2V5KSB7Ci0gICAgICAgICAgICBrcmI1X2ZyZWVfa2V5YmxvY2soazVfY29udGV4dCwgazVf c2Vzc2lvbl9rZXkpOwotICAgICAgICAgICAgazVfc2Vzc2lvbl9rZXkgPSAwOwotICAgICAgICB9 Ci0gICAgfQotICAgIGlmIChuZXdrZXkpIHsKLSAgICAgICAgLyoKLSAgICAgICAgKiBrZWVwIHRo ZSBrZXkgaW4gb3VyIHByaXZhdGUgc3RvcmFnZSwgYnV0IGRvbid0IHVzZSBpdAotICAgICAgICAq IHlldC0tLXNlZSBrZXJiZXJvczVfcmVwbHkoKSBiZWxvdwotICAgICAgICAqLwotI2lmZGVmIEhF SU1EQUwKLSAgICAgICAgaWYgKChuZXdrZXktPmtleXR5cGUgPT0gRVRZUEVfREVTX0NCQ19DUkMp IHx8Ci0gICAgICAgICAgICAgKG5ld2tleS0+a2V5dHlwZSA9PSBFVFlQRV9ERVNfQ0JDX01ENSkg fHwKLSAgICAgICAgICAgICAobmV3a2V5LT5rZXl0eXBlID09IEVUWVBFX0RFU19DQkNfTUQ0KSkK LSAgICAgICAgewotICAgICAgICAgICAgZGVidWcoRjExMSwiazVfYXV0aF9zZW5kKCkiLCJuZXdr ZXktPmtleXR5cGUiLG5ld2tleS0+a2V5dHlwZSk7Ci0gICAgICAgICAgICBrcmI1X2NvcHlfa2V5 YmxvY2soazVfY29udGV4dCwgbmV3a2V5LCAmazVfc2Vzc2lvbl9rZXkpOwotICAgICAgICB9Ci0j ZWxzZSAvKiBIRUlNREFMICovCi0gICAgICAgIC8qIGxvb2sgZm9yIGFsbCBwb3NzaWJsZSBERVMg a2V5cyBmaXJzdCAtIGp1c3QgZm9yIGNvbXBhdGliaWxpdHkgKi8KLSAgICAgICAgLyogb3RoZXIg a2V5IHR5cGVzIGFyZSBtdWNoIGxlc3MgbGlrZWx5IHRvIGJlIGF2YWlsYWJsZSAgICAgICAgICAq LwotICAgICAgICBpZiAoKG5ld2tleS0+ZW5jdHlwZSA9PSBFTkNUWVBFX0RFU19DQkNfQ1JDKSB8 fAotICAgICAgICAgICAgIChuZXdrZXktPmVuY3R5cGUgPT0gRU5DVFlQRV9ERVNfQ0JDX01ENSkg fHwKLSAgICAgICAgICAgICAobmV3a2V5LT5lbmN0eXBlID09IEVOQ1RZUEVfREVTX0NCQ19NRDQp KQotICAgICAgICB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJrNV9hdXRoX3NlbmQoKSIsIm5l d2tleS0+ZW5jdHlwZSIsbmV3a2V5LT5lbmN0eXBlKTsKLSAgICAgICAgICAgIGtyYjVfY29weV9r ZXlibG9jayhrNV9jb250ZXh0LCBuZXdrZXksICZrNV9zZXNzaW9uX2tleSk7Ci0gICAgICAgIH0K LSAgICAgICAgZWxzZSBpZiAoKG5ld19jcmVkcy0+a2V5YmxvY2suZW5jdHlwZSA9PSBFTkNUWVBF X0RFU19DQkNfQ1JDKSB8fAotICAgICAgICAgICAgICAgICAobmV3X2NyZWRzLT5rZXlibG9jay5l bmN0eXBlID09IEVOQ1RZUEVfREVTX0NCQ19NRDUpKQotICAgICAgICB7Ci0gICAgICAgICAgICAv KiB1c2UgdGhlIHNlc3Npb24ga2V5IGluIGNyZWRlbnRpYWxzIGluc3RlYWQgKi8KLSAgICAgICAg ICAgIGRlYnVnKEYxMTEsIms1X2F1dGhfc2VuZCgpIiwibmV3X2NyZWRzLT5rZXlibG9jay5lbmN0 eXBlIiwKLSAgICAgICAgICAgICAgICAgICBuZXdfY3JlZHMtPmtleWJsb2NrLmVuY3R5cGUpOwot ICAgICAgICAgICAga3JiNV9jb3B5X2tleWJsb2NrKGs1X2NvbnRleHQsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZuZXdfY3JlZHMtPmtleWJsb2NrLCAmazVfc2Vzc2lvbl9rZXkp OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG5ld2tleS0+ZW5jdHlwZSAhPSAwKQotICAg ICAgICB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJrNV9hdXRoX3NlbmQoKSIsIm5ld2tleS0+ ZW5jdHlwZSIsbmV3a2V5LT5lbmN0eXBlKTsKLSAgICAgICAgICAgIGtyYjVfY29weV9rZXlibG9j ayhrNV9jb250ZXh0LCBuZXdrZXksICZrNV9zZXNzaW9uX2tleSk7Ci0gICAgICAgIH0KLSAgICAg ICAgZWxzZSBpZiAobmV3X2NyZWRzLT5rZXlibG9jay5lbmN0eXBlICE9IDApCi0gICAgICAgIHsK LSAgICAgICAgICAgIC8qIHVzZSB0aGUgc2Vzc2lvbiBrZXkgaW4gY3JlZGVudGlhbHMgaW5zdGVh ZCAqLwotICAgICAgICAgICAgZGVidWcoRjExMSwiazVfYXV0aF9zZW5kKCkiLCJuZXdfY3JlZHMt PmtleWJsb2NrLmVuY3R5cGUiLAotICAgICAgICAgICAgICAgICAgIG5ld19jcmVkcy0+a2V5Ymxv Y2suZW5jdHlwZSk7Ci0gICAgICAgICAgICBrcmI1X2NvcHlfa2V5YmxvY2soazVfY29udGV4dCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld19jcmVkcy0+a2V5YmxvY2ssICZr NV9zZXNzaW9uX2tleSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJrNV9hdXRoX3NlbmQoKSIsIk5PIEtFWSBpbiBuZXdrZXkiLDApOwotICAgICAg ICB9Ci0jZW5kaWYgLyogSEVJTURBTCAqLwotICAgICAgICBrcmI1X2ZyZWVfa2V5YmxvY2soazVf Y29udGV4dCwgbmV3a2V5KTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotI2lm bmRlZiBIRUlNREFMCi0gICAga3JiNV9mcmVlX2NyZWRfY29udGVudHMoazVfY29udGV4dCwgJmNy ZWRzKTsKLSAgICBrcmI1X2ZyZWVfY3JlZHMoazVfY29udGV4dCwgbmV3X2NyZWRzKTsKLSNlbmRp ZiAvKiBIRUlNREFMICovCi0gICAga3JiNV9jY19jbG9zZShrNV9jb250ZXh0LGNjYWNoZSk7Ci0K LSAgICBpZiAocikgewotICAgICAgICBjb21fZXJyKE5VTEwsIHIsICJ3aGlsZSBhdXRob3Jpemlu ZyAoNCkuIik7Ci0gICAgICAgIGtyYjVfZXJybm8gPSByOwotICAgICAgICBtYWtlc3RyKCZrcmI1 X2Vycm1zZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKLSAgICAgICAgcmV0dXJuKDApOwot ICAgIH0KLSAgICBrcmI1X2Vycm5vID0gMDsKLSAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZywiT0si KTsKLSAgICByZXR1cm4oMSk7Ci19Ci0KLS8qCi0gKiBLNV9hdXRoX3JlcGx5IC0tIGNoZWNrcyB0 aGUgcmVwbHkgZm9yIG11dHVhbCBhdXRoZW50aWNhdGlvbi4KLSAqLwotc3RhdGljIGludAotI2lm ZGVmIENLX0FOU0lDCi1rNV9hdXRoX3JlcGx5KGludCBob3csIHVuc2lnbmVkIGNoYXIgKmRhdGEs IGludCBjbnQpCi0jZWxzZQotazVfYXV0aF9yZXBseShob3csZGF0YSxjbnQpIGludCBob3c7IHVu c2lnbmVkIGNoYXIgKmRhdGE7IGludCBjbnQ7Ci0jZW5kaWYKLXsKLSNpZmRlZiBDS19FTkNSWVBU SU9OCi0gICAgU2Vzc2lvbl9LZXkgc2tleTsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0K LSAgICBkYXRhICs9IDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50 IHRvIHN0YXR1cyBieXRlICovCi0gICAgY250IC09NTsKLQotICAgIHN3aXRjaCAoKmRhdGErKykg ewotICAgIGNhc2UgS1JCX1JFSkVDVDoKLSAgICAgICAgaWYgKGNudCA+IDApIHsKLSAgICAgICAg ICAgIGNoYXIgKnM7Ci0gICAgICAgICAgICBpbnQgbGVuOwotICAgICAgICAgICAgY2tzdHJuY3B5 KHN0clRtcCwiS2VyYmVyb3MgVjUgcmVmdXNlcyBhdXRoZW50aWNhdGlvbiBiZWNhdXNlXHJcbiIs Ci0gICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0clRtcCkpOwotICAgICAgICAgICAgbGVu ID0gc3RybGVuKHN0clRtcCk7Ci0gICAgICAgICAgICBpZiAoIGxlbiArIGNudCA8IHNpemVvZihz dHJUbXApICkgewotICAgICAgICAgICAgICAgIHMgPSBzdHJUbXAgKyBzdHJsZW4oc3RyVG1wKTsK LSAgICAgICAgICAgICAgICBtZW1jcHkocywgZGF0YSwgY250KTsgICAgICAgICAgIC8qIHNhZmUg Ki8KLSAgICAgICAgICAgICAgICBzW2NudF0gPSAwOwotICAgICAgICAgICAgfQotICAgICAgICB9 IGVsc2UKLSAgICAgICAgICAgIGNrc3RybmNweShzdHJUbXAsIktlcmJlcm9zIFY1IHJlZnVzZXMg YXV0aGVudGljYXRpb24iLAotICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJUbXApKTsK LSAgICAgICAga3JiNV9lcnJubyA9IC0xOwotICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxz dHJUbXApOwotICAgICAgICBwcmludGYoIktlcmJlcm9zIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCFc clxuJXNcclxuIixzdHJUbXApOwotICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsK LSAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKLQotICAgIGNhc2UgS1JCX0FDQ0VQVDoKLSAg ICAgICAgaWYgKCFtdXR1YWxfY29tcGxldGUpIHsKLSAgICAgICAgICAgIGlmICgoaG93ICYgQVVU SF9IT1dfTUFTSykgPT0gQVVUSF9IT1dfTVVUVUFMICYmICFtdXR1YWxfY29tcGxldGUpIHsKLSAg ICAgICAgICAgICAgICBja3N0cm5jcHkoc3RyVG1wLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAiS2VyYmVyb3MgVjUgYWNjZXB0ZWQgeW91LCBidXQgZGlkbid0IHByb3ZpZGUiCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICIgbXV0dWFsIGF1dGhlbnRpY2F0aW9uIixzaXplb2Yoc3RyVG1w KSk7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJLZXJiZXJvcyBhdXRoZW50aWNhdGlvbiBmYWls ZWQhXHJcbiVzXHJcbiIsc3RyVG1wKTsKLSAgICAgICAgICAgICAgICBrcmI1X2Vycm5vID0gLTE7 Ci0gICAgICAgICAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csc3RyVG1wKTsKLSAgICAgICAg ICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICAgICAgICAgICAgICByZXR1 cm4gQVVUSF9GQUlMVVJFOwotICAgICAgICAgICAgfQotCi0jaWZkZWYgQ0tfRU5DUllQVElPTgot ICAgICAgICAgICAgaWYgKGs1X3Nlc3Npb25fa2V5KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCB0 bl9hdXRoX2tyYjVfZGVzX2J1ZyApIHsgICAvKiAhQUxMT1dfS1JCXzNERVNfRU5DUllQVCAqLwot ICAgICAgICAgICAgICAgICAgICBza2V5LnR5cGUgPSBTS19ERVM7Ci0gICAgICAgICAgICAgICAg ICAgIHNrZXkubGVuZ3RoID0gODsKLSNpZmRlZiBIRUlNREFMCi0gICAgICAgICAgICAgICAgICAg IHNrZXkuZGF0YSA9IGs1X3Nlc3Npb25fa2V5LT5rZXl2YWx1ZS5kYXRhOwotI2Vsc2UgLyogSEVJ TURBTCAqLwotICAgICAgICAgICAgICAgICAgICBza2V5LmRhdGEgPSBrNV9zZXNzaW9uX2tleS0+ Y29udGVudHM7Ci0jZW5kaWYgLyogSEVJTURBTCAqLwotICAgICAgICAgICAgICAgIH0gZWxzZSB7 Ci0jaWZkZWYgSEVJTURBTAotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKCBrNV9zZXNzaW9u X2tleS0+a2V5dHlwZSApIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFVFlQRV9ERVNfQ0JD X0NSQzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFVFlQRV9ERVNfQ0JDX01ENToKLSAgICAg ICAgICAgICAgICAgICAgY2FzZSBFVFlQRV9ERVNfQ0JDX01ENDoKLSAgICAgICAgICAgICAgICAg ICAgICAgIHNrZXkudHlwZSA9IFNLX0RFUzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNrZXku bGVuZ3RoID0gODsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgc2tleS50eXBlID0gU0tf R0VORVJJQzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNrZXkubGVuZ3RoID0gazVfc2Vzc2lv bl9rZXktPmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuY3J5cHRfZG9udF9zdXBw b3J0KEVOQ1RZUEVfREVTX0NGQjY0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuY3J5cHRf ZG9udF9zdXBwb3J0KEVOQ1RZUEVfREVTX09GQjY0KTsKLSAgICAgICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgICAgICBza2V5LmRhdGEgPSBrNV9zZXNzaW9uX2tleS0+a2V5dmFsdWUu ZGF0YTsKLSNlbHNlIC8qIEhFSU1EQUwgKi8KLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoICgg azVfc2Vzc2lvbl9rZXktPmVuY3R5cGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRU5D VFlQRV9ERVNfQ0JDX0NSQzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFTkNUWVBFX0RFU19D QkNfTUQ1OgotICAgICAgICAgICAgICAgICAgICBjYXNlIEVOQ1RZUEVfREVTX0NCQ19NRDQ6Ci0g ICAgICAgICAgICAgICAgICAgICAgICBza2V5LnR5cGUgPSBTS19ERVM7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBza2V5Lmxlbmd0aCA9IDg7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6 Ci0gICAgICAgICAgICAgICAgICAgICAgICBza2V5LnR5cGUgPSBTS19HRU5FUklDOwotICAgICAg ICAgICAgICAgICAgICAgICAgc2tleS5sZW5ndGggPSBrNV9zZXNzaW9uX2tleS0+bGVuZ3RoOwot ICAgICAgICAgICAgICAgICAgICAgICAgZW5jcnlwdF9kb250X3N1cHBvcnQoRU5DVFlQRV9ERVNf Q0ZCNjQpOwotICAgICAgICAgICAgICAgICAgICAgICAgZW5jcnlwdF9kb250X3N1cHBvcnQoRU5D VFlQRV9ERVNfT0ZCNjQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg ICAgIHNrZXkuZGF0YSA9IGs1X3Nlc3Npb25fa2V5LT5jb250ZW50czsKLSNlbmRpZiAvKiBIRUlN REFMICovCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVuY3J5cHRfc2Vzc2lv bl9rZXkoJnNrZXksIEFVVEhfQ0xJRU5UX1RPX1NFUlZFUik7Ci0gICAgICAgICAgICB9Ci0jZW5k aWYgLyogQ0tfRU5DUllQVElPTiAqLwotICAgICAgICB9Ci0gICAgICAgIGlmICggY250ID4gMCAp IHsKLSAgICAgICAgICAgIGNoYXIgKnM7Ci0gICAgICAgICAgICBpbnQgbGVuOwotICAgICAgICAg ICAgY2tzdHJuY3B5KHN0clRtcCwiS2VyYmVyb3MgVjUgYWNjZXB0cyB5b3UgYXMgIixzaXplb2Yo c3RyVG1wKSk7Ci0gICAgICAgICAgICBsZW4gPSBzdHJsZW4oc3RyVG1wKTsKLSAgICAgICAgICAg IGlmICggbGVuICsgY250IDwgc2l6ZW9mKHN0clRtcCkgKSB7Ci0gICAgICAgICAgICAgICAgcyA9 IHN0clRtcCArIHN0cmxlbihzdHJUbXApOwotICAgICAgICAgICAgICAgIG1lbWNweShzLGRhdGEs Y250KTsKLSAgICAgICAgICAgICAgICBzW2NudF0gPSAwOwotICAgICAgICAgICAgfQotICAgICAg ICB9Ci0gICAgICAgIGFjY2VwdF9jb21wbGV0ZSA9IDE7Ci0gICAgICAgIHByaW50ZigiJXNcclxu IixzdHJUbXApOwotCi0jaWZkZWYgRk9SV0FSRAotICAgICAgICBpZiAoZm9yd2FyZF9mbGFnCi0j aWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgIC8qIE1hcmMgSG9yb3dpdHogPG1hcmNAbWl0LmVk dT4gaGFzIHN1Y2Nlc3NmdWxseSBhcmd1ZWQKLSAgICAgICAgICAgICAgICB0aGF0IGl0IGlzIGlu ZGVlZCBzYWZlIHRvIHNlbmQgRm9yd2FyZGVkIGNyZWRlbnRpYWxzCi0gICAgICAgICAgICAgICAg dG8gYW4gdW50cnVzdGVkIGhvc3QuCi0gICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgJiYg KGF1dGhfaG93ICYgQVVUSF9IT1dfTUFTSykgPT0gQVVUSF9IT1dfTVVUVUFMCi0jZW5kaWYgLyog Q09NTUVOVCAqLwotICAgICAgICAgICAgICkKLSAgICAgICAgICAgIGtlcmJlcm9zNV9mb3J3YXJk KCk7Ci0jZW5kaWYgLyogRk9SV0FSRCAqLwotICAgICAgICBrcmI1X2Vycm5vID0gMDsKLSAgICAg ICAgbWFrZXN0cigma3JiNV9lcnJtc2csc3RyVG1wKTsKLSAgICAgICAgYXV0aF9maW5pc2hlZChB VVRIX1VTRVIpOwotICAgICAgICByZXR1cm4gQVVUSF9TVUNDRVNTOwotCi0gICAgY2FzZSBLUkI1 X1JFU1BPTlNFOgotI2lmZGVmIFRMU19WRVJJRlkKLSAgICAgICAgaWYgKChob3cgJiBBVVRIX0VO Q1JZUFRfTUFTSykgPT0gQVVUSF9FTkNSWVBUX1NUQVJUX1RMUyAmJgotICAgICAgICAgICAgIWty YjVfdGxzX3ZlcmlmaWVkKSB7Ci0gICAgICAgICAgICBwcmludGYoCi0gICAgIk1hbiBpbiB0aGUg bWlkZGxlIGF0dGFjayBkZXRlY3RlZC4gIFNlc3Npb24gdGVybWluYXRlZC5cclxuIik7Ci0jaWZu ZGVmIEJFVEFURVNUCi0gICAgICAgICAgICBuZXRjbG9zKCk7Ci0jZW5kaWYgLyogQkVUQVRFU1Qg Ki8KLSAgICAgICAgICAgIGtyYjVfZXJybm8gPSAtMTsKLSAgICAgICAgICAgIG1ha2VzdHIoJmty YjVfZXJybXNnLCJUTFMgbm90IHZlcmlmaWVkIik7Ci0gICAgICAgICAgICBhdXRoX2ZpbmlzaGVk KEFVVEhfUkVKRUNUKTsKLSAgICAgICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7Ci0gICAgICAg IH0KLSAgICAgICAgaWYoKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpICYmCi0g ICAgICAgICAgICAoaG93ICYgQVVUSF9FTkNSWVBUX01BU0spID09IEFVVEhfRU5DUllQVF9TVEFS VF9UTFMpIHsKLSAgICAgICAgICAgIHByaW50ZigiVExTIHNlc3Npb24gcGFyYW1ldGVycyB2ZXJp ZmllZCBieSBLZXJiZXJvcyA1XHJcbiIpOwotICAgICAgICB9Ci0jZW5kaWYgLyogVExTX1ZFUklG WSAqLwotICAgICAgICBpZiAoKGhvdyAmIEFVVEhfSE9XX01BU0spID09IEFVVEhfSE9XX01VVFVB TCkgewotICAgICAgICAgICAgLyogdGhlIHJlc3Qgb2YgdGhlIHJlcGx5IHNob3VsZCBjb250YWlu IGEga3JiX2FwX3JlcCAqLwotICAgICAgICAgICAga3JiNV9hcF9yZXBfZW5jX3BhcnQgKnJlcGx5 OwotICAgICAgICAgICAga3JiNV9kYXRhIGluYnVmOwotICAgICAgICAgICAga3JiNV9lcnJvcl9j b2RlIHI7Ci0KLSAgICAgICAgICAgIGluYnVmLmxlbmd0aCA9IGNudDsKLSAgICAgICAgICAgIGlu YnVmLmRhdGEgPSAoY2hhciAqKWRhdGE7Ci0KLSAgICAgICAgICAgIGlmIChyID0ga3JiNV9yZF9y ZXAoazVfY29udGV4dCwgYXV0aF9jb250ZXh0LCAmaW5idWYsICZyZXBseSkpIHsKLSAgICAgICAg ICAgICAgICBjb21fZXJyKE5VTEwsIHIsICJ3aGlsZSBhdXRob3JpemluZy4gKDUpIik7Ci0gICAg ICAgICAgICAgICAga3JiNV9lcnJubyA9IHI7Ci0gICAgICAgICAgICAgICAgbWFrZXN0cigma3Ji NV9lcnJtc2csZXJyb3JfbWVzc2FnZShrcmI1X2Vycm5vKSk7Ci0gICAgICAgICAgICAgICAgYXV0 aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFVVEhfRkFJ TFVSRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGtyYjVfZnJlZV9hcF9yZXBfZW5jX3Bh cnQoazVfY29udGV4dCwgcmVwbHkpOwotCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICAg ICAgaWYgKGVuY3J5cHRfZmxhZyAmJiBrNV9zZXNzaW9uX2tleSkgewotICAgICAgICAgICAgICAg IGlmICggdG5fYXV0aF9rcmI1X2Rlc19idWcgKSB7ICAgLyogIUFMTE9XX0tSQl8zREVTX0VOQ1JZ UFQgKi8KLSAgICAgICAgICAgICAgICAgICAgc2tleS50eXBlID0gU0tfREVTOwotICAgICAgICAg ICAgICAgICAgICBza2V5Lmxlbmd0aCA9IDg7Ci0jaWZkZWYgSEVJTURBTAotICAgICAgICAgICAg ICAgICAgICBza2V5LmRhdGEgPSBrNV9zZXNzaW9uX2tleS0+a2V5dmFsdWUuZGF0YTsKLSNlbHNl IC8qIEhFSU1EQUwgKi8KLSAgICAgICAgICAgICAgICAgICAgc2tleS5kYXRhID0gazVfc2Vzc2lv bl9rZXktPmNvbnRlbnRzOwotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLSAgICAgICAgICAgICAgICB9 IGVsc2UgewotI2lmZGVmIEhFSU1EQUwKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoICggazVf c2Vzc2lvbl9rZXktPmtleXR5cGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRVRZUEVf REVTX0NCQ19DUkM6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRVRZUEVfREVTX0NCQ19NRDU6 Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRVRZUEVfREVTX0NCQ19NRDQ6Ci0gICAgICAgICAg ICAgICAgICAgICAgICBza2V5LnR5cGUgPSBTS19ERVM7Ci0gICAgICAgICAgICAgICAgICAgICAg ICBza2V5Lmxlbmd0aCA9IDg7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg ICAgICAgICAgICAgICAgICBza2V5LnR5cGUgPSBTS19HRU5FUklDOwotICAgICAgICAgICAgICAg ICAgICAgICAgc2tleS5sZW5ndGggPSBrNV9zZXNzaW9uX2tleS0+bGVuZ3RoOwotICAgICAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHNrZXkuZGF0YSA9IGs1X3Nlc3Npb25f a2V5LT5rZXl2YWx1ZS5kYXRhOwotI2Vsc2UgLyogSEVJTURBTCAqLwotICAgICAgICAgICAgICAg ICAgICBzd2l0Y2ggKCBrNV9zZXNzaW9uX2tleS0+ZW5jdHlwZSApIHsKLSAgICAgICAgICAgICAg ICAgICAgY2FzZSBFTkNUWVBFX0RFU19DQkNfQ1JDOgotICAgICAgICAgICAgICAgICAgICBjYXNl IEVOQ1RZUEVfREVTX0NCQ19NRDU6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRU5DVFlQRV9E RVNfQ0JDX01ENDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNrZXkudHlwZSA9IFNLX0RFUzsK LSAgICAgICAgICAgICAgICAgICAgICAgIHNrZXkubGVuZ3RoID0gODsKLSAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg ICAgICAgICAgICAgICAgc2tleS50eXBlID0gU0tfR0VORVJJQzsKLSAgICAgICAgICAgICAgICAg ICAgICAgIHNrZXkubGVuZ3RoID0gazVfc2Vzc2lvbl9rZXktPmxlbmd0aDsKLSAgICAgICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBza2V5LmRhdGEgPSBrNV9zZXNzaW9uX2tl eS0+Y29udGVudHM7Ci0jZW5kaWYgLyogSEVJTURBTCAqLwotICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICBlbmNyeXB0X3Nlc3Npb25fa2V5KCZza2V5LCBBVVRIX0NMSUVOVF9UT19T RVJWRVIpOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIEVOQ1JZUFRJT04gKi8KLSAgICAgICAg ICAgIG11dHVhbF9jb21wbGV0ZSA9IDE7Ci0gICAgICAgIH0KLSAgICAgICAgY2tzdHJuY3B5KHN0 clRtcCwiUmVtb3RlIG1hY2hpbmUgaGFzIGJlZW4gbXV0dWFsbHkgYXV0aGVudGljYXRlZCIsCi0g ICAgICAgICAgICAgICAgICBzaXplb2Yoc3RyVG1wKSk7Ci0gICAgICAgIGtyYjVfZXJybm8gPSAw OwotICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxzdHJUbXApOwotICAgICAgICBwcmludGYo IiVzXHJcbiIsc3RyVG1wKTsKLSAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1VTRVIpOwotICAg ICAgICByZXR1cm4gQVVUSF9TVUNDRVNTOwotCi0jaWZkZWYgRk9SV0FSRAotICAgIGNhc2UgS1JC NV9GT1JXQVJEX0FDQ0VQVDoKLSAgICAgICAgZm9yd2FyZGVkX3RpY2tldHMgPSAxOwotICAgICAg ICBja3N0cm5jcHkoc3RyVG1wLCJSZW1vdGUgbWFjaGluZSBoYXMgYWNjZXB0ZWQgZm9yd2FyZGVk IGNyZWRlbnRpYWxzIiwKLSAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJUbXApKTsKLSAgICAg ICAga3JiNV9lcnJubyA9IDA7Ci0gICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLHN0clRtcCk7 Ci0gICAgICAgIHByaW50ZigiJXNcclxuIixzdHJUbXApOwotICAgICAgICByZXR1cm4gQVVUSF9T VUNDRVNTOwotCi0gICAgY2FzZSBLUkI1X0ZPUldBUkRfUkVKRUNUOgotICAgICAgICBmb3J3YXJk ZWRfdGlja2V0cyA9IDA7Ci0gICAgICAgIGlmIChjbnQgPiAwKSB7Ci0gICAgICAgICAgICBjaGFy ICpzOwotICAgICAgICAgICAgaW50IGxlbjsKLSAgICAgICAgICAgIGxlbiA9IGNrc3RybmNweShz dHJUbXAsCi0gICAgICAgICAgICAgICAgICAgICAgIktlcmJlcm9zIFY1IHJlZnVzZXMgZm9yd2Fy ZGVkIGNyZWRlbnRpYWxzIGJlY2F1c2UgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9m KHN0clRtcCkpOwotICAgICAgICAgICAgaWYgKCBsZW4gKyBjbnQgPCBzaXplb2Yoc3RyVG1wKSAp IHsKLSAgICAgICAgICAgICAgICBzID0gc3RyVG1wICsgc3RybGVuKHN0clRtcCk7Ci0gICAgICAg ICAgICAgICAgbWVtY3B5KHMsIGRhdGEsIGNudCk7Ci0gICAgICAgICAgICAgICAgc1tjbnRdID0g MDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBja3N0cm5jcHko c3RyVG1wLCAiS2VyYmVyb3MgVjUgcmVmdXNlcyBmb3J3YXJkZWQgY3JlZGVudGlhbHMiLAotICAg ICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJUbXApKTsKLQotICAgICAgICBwcmludGYoIiVz XHJcbiIsc3RyVG1wKTsKLSAgICAgICAga3JiNV9lcnJubyA9IC0xOwotICAgICAgICBtYWtlc3Ry KCZrcmI1X2Vycm1zZyxzdHJUbXApOwotICAgICAgICByZXR1cm4gQVVUSF9TVUNDRVNTOwotI2Vu ZGlmICAvKiBGT1JXQVJEICovCi0KLSNpZmRlZiBUTFNfVkVSSUZZCi0gICAgY2FzZSBLUkI1X1RM U19WRVJJRlk6Ci0gICAgICAgIGlmICgoaG93ICYgQVVUSF9FTkNSWVBUX01BU0spID09IEFVVEhf RU5DUllQVF9TVEFSVF9UTFMpIHsKLSAgICAgICAgICAgIGtyYjVfZGF0YSByZXBseSwgbXNnOwot ICAgICAgICAgICAgY2hhciB0bHNfdmVyaWZ5WzI0XTsKLSAgICAgICAgICAgIGtyYjVfcmVwbGF5 X2RhdGEgcmVwZGF0YTsKLSAgICAgICAgICAgIGtyYjVfZXJyb3JfY29kZSByOwotCi0gICAgICAg ICAgICBzc2xfZ2V0X3NlcnZlcl9maW5pc2hlZCgmdGxzX3ZlcmlmeVswXSwxMik7Ci0gICAgICAg ICAgICBzc2xfZ2V0X2NsaWVudF9maW5pc2hlZCgmdGxzX3ZlcmlmeVsxMl0sMTIpOwotCi0gICAg ICAgICAgICByZXBseS5kYXRhID0gKGNoYXIgKilkYXRhOwotICAgICAgICAgICAgcmVwbHkubGVu Z3RoID0gY250OwotCi0JCQlrcmI1X2F1dGhfY29uX2dlbmFkZHJzKGs1X2NvbnRleHQsIGF1dGhf Y29udGV4dCwgdHR5ZmQsCi0JCQkJCQkJCSAgIEtSQjVfQVVUSF9DT05URVhUX0dFTkVSQVRFX1JF TU9URV9GVUxMX0FERFIpOwotCi0gICAgICAgICAgICBpZiAociA9IGtyYjVfcmRfc2FmZShrNV9j b250ZXh0LGF1dGhfY29udGV4dCwmcmVwbHksJm1zZywmcmVwZGF0YSkpCi0gICAgICAgICAgICAg IHsKLSAgICAgICAgICAgICAgICBjb21fZXJyKCIiLCByLCAiZGVjb2RpbmcgdGxzIHZlcmlmaWVy Iik7Ci0gICAgICAgICAgICAgICAga3JiNV9lcnJubyA9IHI7Ci0gICAgICAgICAgICAgICAgbWFr ZXN0cigma3JiNV9lcnJtc2csIlRMUyB2ZXJpZnkgZmFpbHVyZSIpOwotICAgICAgICAgICAgICAg IGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAgICAgICAgICAgICAgIHJldHVybihBVVRI X0ZBSUxVUkUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCBtc2cubGVuZ3RoID09 IDI0ICYmICFtZW1jbXAobXNnLmRhdGEsdGxzX3ZlcmlmeSwyNCkgKQotICAgICAgICAgICAgICAg ICBrcmI1X3Rsc192ZXJpZmllZCA9IDE7Ci0gICAgICAgICAgICBrcmI1X2ZyZWVfZGF0YV9jb250 ZW50cyhrNV9jb250ZXh0LCZtc2cpOwotICAgICAgICAgICAgaWYgKGtyYjVfdGxzX3ZlcmlmaWVk KQotICAgICAgICAgICAgICAgIHJldHVybihBVVRIX1NVQ0NFU1MpOwotICAgICAgICB9Ci0gICAg ICAgIHByaW50ZigiTWFuIGluIHRoZSBtaWRkbGUgYXR0YWNrIGRldGVjdGVkLiAgU2Vzc2lvbiB0 ZXJtaW5hdGVkLlxyXG4iKTsKLSAgICAgICAgbmV0Y2xvcygpOwotICAgICAgICBrcmI1X2Vycm5v ID0gLTE7Ci0gICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLCJUTFMgdmVyaWZ5IGZhaWx1cmUi KTsKLSAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0gICAgICAgIHJldHVybihB VVRIX0ZBSUxVUkUpOwotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0gICAgZGVmYXVsdDoKLSAgICAg ICAga3JiNV9lcnJubyA9IC0xOwotICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZywiVW5rbm93 biByZXBseSB0eXBlIik7Ci0gICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAg ICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVua25v d24gcmVwbHkgdHlwZSAqLwotICAgIH0KLX0KLQotI2lmZGVmIEZPUldBUkQKLS8qIERlY29kZSwg ZGVjcnlwdCBhbmQgc3RvcmUgdGhlIGZvcndhcmRlZCBjcmVkcyBpbiB0aGUgbG9jYWwgY2NhY2hl LiAqLwotLyogTmVlZGVkIGZvciBLUkI1X0ZPUldBUkQgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICovCi1zdGF0aWMga3JiNV9lcnJvcl9jb2RlCi1yZF9hbmRfc3Rv cmVfZm9yX2NyZWRzKGNvbnRleHQsIGF1dGhfY29udGV4dCwgaW5idWYsIGNsaWVudCkKLSAgICBr cmI1X2NvbnRleHQgY29udGV4dDsKLSAgICBrcmI1X2F1dGhfY29udGV4dCBhdXRoX2NvbnRleHQ7 Ci0gICAga3JiNV9kYXRhICppbmJ1ZjsKLSAgICBrcmI1X2NvbnN0X3ByaW5jaXBhbCBjbGllbnQ7 Ci17Ci0gICAga3JiNV9jcmVkcyAqKiBjcmVkcz1OVUxMOwotICAgIGtyYjVfZXJyb3JfY29kZSBy ZXR2YWw7Ci0gICAga3JiNV9jY2FjaGUgY2NhY2hlPU5VTEw7Ci0KLSNpZmRlZiBIRUlNREFMCi0g ICAgLyoKLSAgICBIZWltZGFsIFRlbG5ldGQgY3JlYXRlcyB0aGUgY2FjaGUgZmlsZSBhdCB0aGlz IHBvaW50IGFuZCBzZXRzCi0gICAgdGhlIEtSQjVDQ05BTUUgZW52aXJvbm1lbnQgdmFyaWFibGUu Ci0KLSAgICBzdHJ1Y3QgcGFzc3dkICpwd2Q7Ci0gICAgY2hhciBjY25hbWVbMTAyNF07Ci0KLSAg ICBwd2QgPSBnZXRwd25hbShzelVzZXJOYW1lUmVxdWVzdGVkKTsKLSAgICBpZiAocHdkID09IE5V TEwpCi0gICAgICAgIGJyZWFrOwotICAgIHNucHJpbnRmKGNjbmFtZSwgc2l6ZW9mKGNjbmFtZSkt MSwgIkZJTEU6L3RtcC9rcmI1Y2NfJXUiLHB3ZC0+cHdfdWlkKTsKLSAgICByZXR2YWwgPSBrcmI1 X2NjX3Jlc29sdmUoY29udGV4dCxjY25hbWUsJmNjYWNoZSk7Ci0KLSAgICBjaG93bihjY25hbWUg KyA1LCBwd2QtPnB3X3VpZCwgLTEpOwotICAgICovCi0jZW5kaWYgLyogSEVJTURBTCAqLwotCi0g ICAgaWYgKHJldHZhbCA9IGs1X2dldF9jY2FjaGUoY29udGV4dCwmY2NhY2hlLE5VTEwpKQotICAg ICAgICByZXR1cm4ocmV0dmFsKTsKLQotI2lmZGVmIEhFSU1EQUwKLSAgICBpZiAoKHJldHZhbCA9 IGtyYjVfY2NfaW5pdGlhbGl6ZShjb250ZXh0LCBjY2FjaGUsIGNsaWVudCkpKQotICAgICAgICBy ZXR1cm4ocmV0dmFsKTsKLQotICAgIGlmICgocmV0dmFsID0ga3JiNV9yZF9jcmVkKGNvbnRleHQs IGF1dGhfY29udGV4dCwgY2NhY2hlLCBpbmJ1ZikpKQotICAgICAgICByZXR1cm4ocmV0dmFsKTsK LSNlbHNlIC8qIEhFSU1EQUwgKi8KLSAgICBpZiAoKHJldHZhbCA9IGtyYjVfcmRfY3JlZChjb250 ZXh0LCBhdXRoX2NvbnRleHQsIGluYnVmLCAmY3JlZHMsIE5VTEwpKSkKLSAgICAgICAgcmV0dXJu KHJldHZhbCk7Ci0KLSAgICBpZiAoKHJldHZhbCA9IGtyYjVfY2NfaW5pdGlhbGl6ZShjb250ZXh0 LCBjY2FjaGUsIGNyZWRzWzBdLT5jbGllbnQpKSkKLSAgICAgICAgZ290byBjbGVhbnVwOwotCi0g ICAgaWYgKChyZXR2YWwgPSBrcmI1X2NjX3N0b3JlX2NyZWQoY29udGV4dCwgY2NhY2hlLCBjcmVk c1swXSkpKQotICAgICAgICBnb3RvIGNsZWFudXA7Ci0KLSAgICBpZiAoKHJldHZhbCA9IGtyYjVf Y2NfY2xvc2UoY29udGV4dCwgY2NhY2hlKSkpCi0gICAgICAgIGdvdG8gY2xlYW51cDsKLQotICBj bGVhbnVwOgotICAgIGtyYjVfZnJlZV90Z3RfY3JlZHMoY29udGV4dCwgY3JlZHMpOwotI2VuZGlm IC8qIEhFSU1EQUwgKi8KLSAgICByZXR1cm4gcmV0dmFsOwotfQotI2VuZGlmIC8qIEZPUldBUkQg Ki8KLQotLyoKLSAqCi0gKiBLNV9hdXRoX2lzLgotICoKLSAqLwotCi1zdGF0aWMgaW50Ci0jaWZk ZWYgQ0tfQU5TSUMKLWs1X2F1dGhfaXMoaW50IGhvdywgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50 IGNudCkKLSNlbHNlCi1rNV9hdXRoX2lzKGhvdyxkYXRhLGNudCkgaW50IGhvdzsgdW5zaWduZWQg Y2hhciAqZGF0YTsgaW50IGNudDsKLSNlbmRpZgotewotICAgIGludCByID0gMDsKLSAgICBrcmI1 X3ByaW5jaXBhbCBzZXJ2ZXI7Ci0gICAga3JiNV9rZXlibG9jayAqbmV3a2V5ID0gTlVMTDsKLSAg ICBrcmI1X2RhdGEgb3V0YnVmOwotICAgIGNoYXIgZXJyYnVmWzEyOF09IiI7Ci0gICAgY2hhciAq Z2V0ZW52KCk7Ci0jaWZuZGVmIEhFSU1EQUwKLSAgICBrcmI1X2F1dGhlbnRpY2F0b3IgKmF1dGhl bnRpY2F0b3I7Ci0gICAga3JiNV9rZXl0YWIga2V5dGFiaWQgPSAwOwotI2VuZGlmIC8qIEhFSU1E QUwgKi8KLSAgICBrcmI1X2RhdGEgaW5idWY7Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgIFNl c3Npb25fS2V5IHNrZXk7Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotICAgIGNoYXIgcHJp bmNbMjU2XT0iIjsKLSAgICBpbnQgbGVuOwotCi0gICAgZGF0YSArPSA0OyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byBzdGF0dXMgYnl0ZSAqLwotICAgIGNudCAt PSA0OwotCi0gICAgY2toZXhkdW1wKCJrNV9hdXRoX2lzIGRhdGEiLGRhdGEsY250KTsKLSAgICBk ZWJ1ZyhGMTExLCJrNV9hdXRoX2lzIiwiaG93Iixob3cpOwotCi0gICAgaWYgKGNudC0tIDwgMSkg ewotICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICAgICAgcmV0dXJuIEFV VEhfRkFJTFVSRTsKLSAgICB9Ci0gICAgc3dpdGNoICgqZGF0YSsrKSB7Ci0gICAgY2FzZSBLUkJf QVVUSDoKLSAgICAgICAgazVfYXV0aC5kYXRhID0gKGNoYXIgKilkYXRhOwotICAgICAgICBrNV9h dXRoLmxlbmd0aCA9IGNudDsKLQotICAgICAgICBkZWJ1ZyhGMTEwLCJrNV9hdXRoX2lzIiwiS1JC X0FVVEgiLDApOwotICAgICAgICBkZWJ1ZyhGMTExLCJrNV9hdXRoX2lzIiwiYXV0aF9jb250ZXh0 IixhdXRoX2NvbnRleHQpOwotCi0gICAgICAgIGlmICghciAmJiAhYXV0aF9jb250ZXh0KSB7Ci0g ICAgICAgICAgICByID0ga3JiNV9hdXRoX2Nvbl9pbml0KGs1X2NvbnRleHQsICZhdXRoX2NvbnRl eHQpOwotICAgICAgICAgICAgZGVidWcoRjExMSwiazVfYXV0aF9pcyIsImtyYjVfYXV0aF9jb25f aW5pdCIscik7Ci0gICAgICAgIH0KLQotI2lmZGVmIEhFSU1EQUwKLSAgICAgICAgaWYgKCFyKQot ICAgICAgICAgICAgciA9IGtyYjVfYXV0aF9jb25fc2V0YWRkcnNfZnJvbV9mZChrNV9jb250ZXh0 LAotCQkJCQkgICAgICAgYXV0aF9jb250ZXh0LAotCQkJCQkgICAgICAgJnR0eWZkKTsKLSAgICAg ICAgaWYgKCFyKQotICAgICAgICAgICAgciA9IGtyYjVfc29ja190b19wcmluY2lwYWwoazVfY29u dGV4dCwKLQkJCQkgICAgICAgMCwKLQkJCQkgICAgICAgImhvc3QiLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgS1JCNV9OVF9TUlZfSFNULAotCQkJCSAgICAgICAmc2Vy dmVyKTsKLSAgICAgICAgaWYgKCFyKQotI2Vsc2UgLyogSEVJTURBTCAqLwotICAgICAgICBpZiAo IXIpIHsKLSAgICAgICAgICAgIGtyYjVfcmNhY2hlIHJjYWNoZSA9IE5VTEw7Ci0KLSAgICAgICAg ICAgIHIgPSBrcmI1X2F1dGhfY29uX2dldHJjYWNoZShrNV9jb250ZXh0LCBhdXRoX2NvbnRleHQs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyY2FjaGUpOwotICAg ICAgICAgICAgZGVidWcoRjExMSwiazVfYXV0aF9pcyIsImtyYjVfYXV0aF9jb25fZ2V0cmNhY2hl IixyKTsKLQotICAgICAgICAgICAgaWYgKCFyICYmICFyY2FjaGUpIHsKLSAgICAgICAgICAgICAg ICAvKiBEbyBub3QgcmVzb2x2ZSBzZXJ2ZXIncyBwcmluY2lwYWwgbmFtZSwgd2Ugd2lsbCBjaGVj ayAqLwotICAgICAgICAgICAgICAgIC8qIGZvciB2YWxpZGl0eSBhZnRlciB0aGUga3JiNV9yZF9y ZXEoKSBjYWxsLiAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgciA9IGtyYjVfc25hbWVf dG9fcHJpbmNpcGFsKGs1X2NvbnRleHQsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBLUkI1X05UX1NSVl9IU1QsICZzZXJ2ZXIpOwotICAgICAgICAg ICAgICAgIGRlYnVnKEYxMTEsIms1X2F1dGhfaXMiLCJrcmI1X3NuYW1lX3RvX3ByaW5jaXBhbCIs cik7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXIpIHsKLSAgICAgICAgICAgICAgICAgICAgciA9 IGtyYjVfZ2V0X3NlcnZlcl9yY2FjaGUoazVfY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAg ICAgIGtyYjVfcHJpbmNfY29tcG9uZW50KGs1X2NvbnRleHQsIHNlcnZlciwgMCksCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmNhY2hlKTsKLSAgICAg ICAgICAgICAgICAgICAgZGVidWcoRjExMSwiazVfYXV0aF9pcyIsImtyYjVfZ2V0X3NlcnZlcl9y Y2FjaGUiLHIpOwotICAgICAgICAgICAgICAgICAgICBrcmI1X2ZyZWVfcHJpbmNpcGFsKGs1X2Nv bnRleHQsIHNlcnZlcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg ICAgICAgaWYgKCFyKSB7Ci0gICAgICAgICAgICAgICAgciA9IGtyYjVfYXV0aF9jb25fc2V0cmNh Y2hlKGs1X2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBhdXRoX2NvbnRleHQsIHJjYWNoZSk7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwi azVfYXV0aF9pcyIsImtyYjVfYXV0aF9jb25fc2V0cmNhY2hlIixyKTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgfQotICAgICAgICBpZiAoIXIgJiYgazVfa2V5dGFiKSB7Ci0gICAgICAgICAgICBy ID0ga3JiNV9rdF9yZXNvbHZlKGs1X2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBrNV9rZXl0YWIsICZrZXl0YWJpZCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJr NV9hdXRoX2lzIiwia3JiNV9rdF9yZXNvbHZlIixyKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIEhF SU1EQUwgKi8KLSAgICAgICAgaWYgKCFyKSB7Ci0gICAgICAgICAgICByID0ga3JiNV9yZF9yZXEo azVfY29udGV4dCwgJmF1dGhfY29udGV4dCwgJms1X2F1dGgsCi0jaWZkZWYgSEVJTURBTAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIsIE5VTEwsIE5VTEwsCi0jZWxzZSAvKiBI RUlNREFMICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGtleXRhYmlkLCBO VUxMLAotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Jms1X3RpY2tldCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJrNV9hdXRoX2lzIiwia3JiNV9y ZF9yZXEiLHIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyKSB7Ci0gICAgICAgICAgICAodm9p ZCkgY2tzdHJuY3B5KGVycmJ1ZiwgImtyYjVfcmRfcmVxIGZhaWxlZDogIixzaXplb2YoZXJyYnVm KSk7Ci0gICAgICAgICAgICAodm9pZCkgY2tzdHJuY2F0KGVycmJ1ZiwgZXJyb3JfbWVzc2FnZShy KSxzaXplb2YoZXJyYnVmKSk7Ci0gICAgICAgICAgICBnb3RvIGVycm91dDsKLSAgICAgICAgfQot I2lmZGVmIEhFSU1EQUwKLSAgICAgICAga3JiNV9mcmVlX3ByaW5jaXBhbChrNV9jb250ZXh0LCBz ZXJ2ZXIpOwotCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoYXIgdHlwZV9jaGVja1syNl07Ci0K LSAgICAgICAgICAgIC8qIFVQREFURSBmb3IgU1RBUlRfVExTLiBBVVRIX0VOQ1JZUFRfU1RBUlRf VExTIGFuZCBpbmNsdXNpb24gb2YgKi8KLSAgICAgICAgICAgIC8qIGNsaWVudCBhbmQgdGhlbiBz ZXJ2ZXIgZmluaXNoZWQgbWVzc2FnZXMuICovCi0KLSAgICAgICAgICAgIHR5cGVfY2hlY2tbMF0g PSBBVVRIVFlQRV9LRVJCRVJPU19WNTsKLSAgICAgICAgICAgIHR5cGVfY2hlY2tbMV0gPSBob3c7 ICAgICAgICAvKiBub3QgYnJva2VuIGludG8gcGFydHMgKi8KLSNpZmRlZiBDS19TU0wKLSAgICAg ICAgICAgIGlmICgoaG93ICYgQVVUSF9FTkNSWVBUX01BU0spID09IEFVVEhfRU5DUllQVF9TVEFS VF9UTFMpIHsKLSAgICAgICAgICAgICAgICBzc2xfZ2V0X2NsaWVudF9maW5pc2hlZCgmdHlwZV9j aGVja1syXSwxMik7Ci0gICAgICAgICAgICAgICAgc3NsX2dldF9zZXJ2ZXJfZmluaXNoZWQoJnR5 cGVfY2hlY2tbMTRdLDEyKTsKLSAgICAgICAgICAgICAgICBja2hleGR1bXAoIms1X2F1dGhfaXMg dHlwZV9jaGVjayIsdHlwZV9jaGVjaywyNik7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tf U1NMICovCi0KLSAgICAgICAgICAgIHIgPSBrcmI1X3ZlcmlmeV9hdXRoZW50aWNhdG9yX2NoZWNr c3VtKGs1X2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYXV0aF9jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHR5cGVfY2hlY2ssCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAg ICAgICAgICAgKChob3cgJiBBVVRIX0VOQ1JZUFRfTUFTSykgPT0gQVVUSF9FTkNSWVBUX1NUQVJU X1RMUykgPyAyNiA6Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMik7Ci0gICAgICAgIH0KLSNlbHNlIC8qIEhF SU1EQUwgKi8KLSAgICAgICAgbGVuID0ga3JiNV9wcmluY19jb21wb25lbnQoazVfY29udGV4dCxr NV90aWNrZXQtPnNlcnZlciwwKS0+bGVuZ3RoOwotICAgICAgICBpZiAobGVuIDwgMjU2KQotICAg ICAgICB7Ci0gICAgICAgICAgICBtZW1jcHkocHJpbmMsCi0gICAgICAgICAgICAgICAgICAga3Ji NV9wcmluY19jb21wb25lbnQoazVfY29udGV4dCxrNV90aWNrZXQtPnNlcnZlciwwKS0+ZGF0YSwK LSAgICAgICAgICAgICAgICAgICBsZW4pOwotICAgICAgICAgICAgcHJpbmNbbGVuXSA9ICdcMCc7 Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCBzdHJjbXAoKGtyYjVfZF9zcnYgPyBrcmI1X2Rfc3J2 IDogS1JCNV9TRVJWSUNFX05BTUUpLCBwcmluYykgKQotICAgICAgICB7Ci0gICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJrNV9hdXRoX2lzIGluY29ycmVjdCBzZXJ2aWNlIG5hbWUiLHByaW5jLDApOwot ICAgICAgICAgICAgY2tzdHJuY3B5KGVycmJ1ZiwiaW5jb3JyZWN0IHNlcnZpY2UgbmFtZTogIixz aXplb2YoZXJyYnVmKSk7Ci0gICAgICAgICAgICBja3N0cm5jYXQoZXJyYnVmLGtyYjVfZF9zcnYg PyBrcmI1X2Rfc3J2IDogS1JCNV9TRVJWSUNFX05BTUUsCi0gICAgICAgICAgICAgICAgICAgICBz aXplb2YoZXJyYnVmKSk7Ci0gICAgICAgICAgICBja3N0cm5jYXQoZXJyYnVmLCIgIT0gIixzaXpl b2YoZXJyYnVmKSk7Ci0gICAgICAgICAgICBja3N0cm5jYXQoZXJyYnVmLHByaW5jLHNpemVvZihl cnJidWYpKTsKLSAgICAgICAgICAgIGdvdG8gZXJyb3V0OwotICAgICAgICB9Ci0KLSAgICAgICAg ciA9IGtyYjVfYXV0aF9jb25fZ2V0YXV0aGVudGljYXRvcihrNV9jb250ZXh0LAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoX2NvbnRleHQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhdXRoZW50aWNhdG9yKTsKLSAg ICAgICAgZGVidWcoRjExMSwiazVfYXV0aF9pcyIsImtyYjVfYXV0aF9jb25fZ2V0YXV0aGVudGlj YXRvciIscik7Ci0gICAgICAgIGlmIChyKSB7Ci0gICAgICAgICAgICAodm9pZCkgY2tzdHJuY3B5 KGVycmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtyYjVfYXV0aF9jb25fZ2V0 YXV0aGVudGljYXRvciBmYWlsZWQ6ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVvZihlcnJidWYpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAg ICAodm9pZCkgY2tzdHJuY2F0KGVycmJ1ZiwgZXJyb3JfbWVzc2FnZShyKSxzaXplb2YoZXJyYnVm KSk7Ci0gICAgICAgICAgICBnb3RvIGVycm91dDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChh dXRoZW50aWNhdG9yLT5jaGVja3N1bSkgewotICAgICAgICAgICAgY2hhciB0eXBlX2NoZWNrWzI2 XTsKLSAgICAgICAgICAgIGtyYjVfY2hlY2tzdW0gKmNrc3VtID0gYXV0aGVudGljYXRvci0+Y2hl Y2tzdW07Ci0gICAgICAgICAgICBrcmI1X2tleWJsb2NrICprZXk7Ci0KLSAgICAgICAgICAgIC8q IFVQREFURSBmb3IgU1RBUlRfVExTLiBBVVRIX0VOQ1JZUFRfU1RBUlRfVExTIGFuZCBpbmNsdXNp b24gb2YgKi8KLSAgICAgICAgICAgIC8qIGNsaWVudCBhbmQgdGhlbiBzZXJ2ZXIgZmluaXNoZWQg bWVzc2FnZXMuICovCi0KLSAgICAgICAgICAgIHR5cGVfY2hlY2tbMF0gPSBBVVRIVFlQRV9LRVJC RVJPU19WNTsKLSAgICAgICAgICAgIHR5cGVfY2hlY2tbMV0gPSBob3c7ICAgICAgICAvKiBub3Qg YnJva2VuIGludG8gcGFydHMgKi8KLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAgIGlmICgoaG93 ICYgQVVUSF9FTkNSWVBUX01BU0spID09IEFVVEhfRU5DUllQVF9TVEFSVF9UTFMpIHsKLSAgICAg ICAgICAgICAgICBzc2xfZ2V0X2NsaWVudF9maW5pc2hlZCgmdHlwZV9jaGVja1syXSwxMik7Ci0g ICAgICAgICAgICAgICAgc3NsX2dldF9zZXJ2ZXJfZmluaXNoZWQoJnR5cGVfY2hlY2tbMTRdLDEy KTsKLSAgICAgICAgICAgICAgICBja2hleGR1bXAoIms1X2F1dGhfaXMgdHlwZV9jaGVjayIsdHlw ZV9jaGVjaywyNik7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSAgICAg ICAgICAgIHIgPSBrcmI1X2F1dGhfY29uX2dldGtleShrNV9jb250ZXh0LCBhdXRoX2NvbnRleHQs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXkpOwotICAgICAgICAg ICAgZGVidWcoRjExMSwiazVfYXV0aF9pcyIsImtyYjVfYXV0aF9jb25fZ2V0a2V5IixyKTsKLSAg ICAgICAgICAgIGlmIChyKSB7Ci0gICAgICAgICAgICAgICAgKHZvaWQpIGNrc3RybmNweShlcnJi dWYsICJrcmI1X2F1dGhfY29uX2dldGtleSBmYWlsZWQ6ICIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZW9mKGVycmJ1ZikpOwotICAgICAgICAgICAgICAgICh2b2lkKSBj a3N0cm5jYXQoZXJyYnVmLCBlcnJvcl9tZXNzYWdlKHIpLHNpemVvZihlcnJidWYpKTsKLSAgICAg ICAgICAgICAgICBnb3RvIGVycm91dDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgciA9 IGtyYjVfdmVyaWZ5X2NoZWNrc3VtKGs1X2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNrc3VtLT5jaGVja3N1bV90eXBlLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBja3N1bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJnR5cGVfY2hlY2ssCi0gICAgICAgICAgICAgICAgICAoKGhvdyAmIEFVVEhfRU5D UllQVF9NQVNLKSA9PSBBVVRIX0VOQ1JZUFRfU1RBUlRfVExTKSA/IDI2IDoKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAga2V5LT5jb250ZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAga2V5LT5sZW5ndGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsIms1X2F1dGhfaXMiLCJrcmI1X3ZlcmlmeV9j aGVja3N1bSIscik7Ci0gICAgICAgICAgICBpZiAocikgewotICAgICAgICAgICAgICAgICh2b2lk KSBja3N0cm5jcHkoZXJyYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNo ZWNrc3VtIHZlcmlmaWNhdGlvbiBmYWlsZWQ6ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplb2YoZXJyYnVmKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKLSAgICAgICAgICAgICAgICAodm9pZCkgY2tzdHJuY2F0KGVycmJ1ZiwgZXJyb3JfbWVzc2Fn ZShyKSxzaXplb2YoZXJyYnVmKSk7Ci0gICAgICAgICAgICAgICAgZ290byBlcnJvdXQ7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBrcmI1X2ZyZWVfa2V5YmxvY2soazVfY29udGV4dCwga2V5 KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICgoaG93ICYgQVVUSF9FTkNSWVBU X01BU0spID09IEFVVEhfRU5DUllQVF9VU0lOR19URUxPUFQpIHsKLSAgICAgICAgICAgICAgICAo dm9pZCkgc3RyY3B5KGVycmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXV0 aGVudGljYXRvciBpcyBtaXNzaW5nIHJlcXVpcmVkIGNoZWNrc3VtIik7Ci0gICAgICAgICAgICAg ICAgZ290byBlcnJvdXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBrcmI1 X2ZyZWVfYXV0aGVudGljYXRvcihrNV9jb250ZXh0LCBhdXRoZW50aWNhdG9yKTsKLSNlbmRpZiAv KiBIRUlNREFMICovCi0KLSNpZmRlZiBUTFNfVkVSSUZZCi0gICAgICAgIGlmICgoaG93ICYgQVVU SF9FTkNSWVBUX01BU0spID09IEFVVEhfRU5DUllQVF9TVEFSVF9UTFMpIHsKLSAgICAgICAgICAg IGtyYjVfZGF0YSBpbiwgbXNnOwotICAgICAgICAgICAgY2hhciB0bHNfdmVyaWZ5WzI0XTsKLSAg ICAgICAgICAgIGtyYjVfcmVwbGF5X2RhdGEgcmVwZGF0YTsKLQotICAgICAgICAgICAgc3NsX2dl dF9zZXJ2ZXJfZmluaXNoZWQoJnRsc192ZXJpZnlbMF0sMTIpOwotICAgICAgICAgICAgc3NsX2dl dF9jbGllbnRfZmluaXNoZWQoJnRsc192ZXJpZnlbMTJdLDEyKTsKLQotICAgICAgICAgICAgaW4u ZGF0YSA9IHRsc192ZXJpZnk7Ci0gICAgICAgICAgICBpbi5sZW5ndGggPSAyNDsKLQotICAgICAg ICAgICAga3JiNV9hdXRoX2Nvbl9nZW5hZGRycyhrNV9jb250ZXh0LCBhdXRoX2NvbnRleHQsIHR0 eWZkLAotCQkJCQkJCQkgICBLUkI1X0FVVEhfQ09OVEVYVF9HRU5FUkFURV9MT0NBTF9GVUxMX0FE RFIpOwotICAgICAgICAgICAgaWYgKHIgPSBrcmI1X21rX3NhZmUoazVfY29udGV4dCxhdXRoX2Nv bnRleHQsJmluLCZtc2csJnJlcGRhdGEpKSB7Ci0gICAgICAgICAgICAgICAgY29tX2VycigiIiwg ciwgImVuY29kaW5nIHRscyB2ZXJpZmllciIpOwotICAgICAgICAgICAgICAgICh2b2lkKSBja3N0 cm5jYXQoZXJyYnVmLCBlcnJvcl9tZXNzYWdlKHIpLHNpemVvZihlcnJidWYpKTsKLSAgICAgICAg ICAgICAgICBnb3RvIGVycm91dDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFNlbmRLNUF1 dGhTQihLUkI1X1RMU19WRVJJRlksIG1zZy5kYXRhLCBtc2cubGVuZ3RoKTsKLSAgICAgICAgICAg IGtyYjVfZnJlZV9kYXRhX2NvbnRlbnRzKGs1X2NvbnRleHQsJm1zZyk7Ci0gICAgICAgIH0KLSNl bmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgaWYgKChob3cgJiBBVVRIX0hPV19NQVNLKSA9PSBB VVRIX0hPV19NVVRVQUwpIHsKLSAgICAgICAgICAgIC8qIGRvIGFwX3JlcCBzdHVmZiBoZXJlICov Ci0gICAgICAgICAgICBpZiAoKHIgPSBrcmI1X21rX3JlcChrNV9jb250ZXh0LAotI2lmZGVmIEhF SU1EQUwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXV0aF9jb250ZXh0LAot I2Vsc2UgLyogSEVJTURBTCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1 dGhfY29udGV4dCwKLSNlbmRpZiAvKiBIRUlNREFMICovCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJm91dGJ1ZikpKSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwiazVf YXV0aF9pcyIsImtyYjVfbWtfcmVwIixyKTsKLSAgICAgICAgICAgICAgICAodm9pZCkgY2tzdHJu Y3B5KGVycmJ1ZiwgIk1ha2UgcmVwbHkgZmFpbGVkOiAiLHNpemVvZihlcnJidWYpKTsKLSAgICAg ICAgICAgICAgICAodm9pZCkgY2tzdHJuY2F0KGVycmJ1ZiwgZXJyb3JfbWVzc2FnZShyKSxzaXpl b2YoZXJyYnVmKSk7Ci0gICAgICAgICAgICAgICAgZ290byBlcnJvdXQ7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJrNV9hdXRoX2lzIiwia3JiNV9ta19yZXAiLHIpOwot Ci0gICAgICAgICAgICBTZW5kSzVBdXRoU0IoS1JCNV9SRVNQT05TRSwgb3V0YnVmLmRhdGEsIG91 dGJ1Zi5sZW5ndGgpOwotICAgICAgICAgICAgbXV0dWFsX2NvbXBsZXRlID0gMTsKLSAgICAgICAg fQotCi0jaWZkZWYgSEVJTURBTAotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyICogbmFtZSA9 IE5VTEw7Ci0gICAgICAgICAgICBpZiAoa3JiNV91bnBhcnNlX25hbWUoazVfY29udGV4dCwgazVf dGlja2V0LT5jbGllbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYW1l KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzelVzZXJOYW1lQXV0aGVudGljYXRl ZFswXSA9ICdcMCc7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNrc3Ry bmNweShzelVzZXJOYW1lQXV0aGVudGljYXRlZCxVSURCVUZMRU4sbmFtZSk7Ci0gICAgICAgICAg ICAgICAgZnJlZShuYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2Vsc2UgLyogSEVJ TURBTCAqLwotICAgICAgICBpZiAoIGtyYjVfYW5hbWVfdG9fbG9jYWxuYW1lKGs1X2NvbnRleHQs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGs1X3RpY2tldC0+ZW5jX3Bh cnQyLT5jbGllbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJREJV RkxFTixzelVzZXJOYW1lQXV0aGVudGljYXRlZCkgKQotICAgICAgICAgICAgc3pVc2VyTmFtZUF1 dGhlbnRpY2F0ZWRbMF0gPSAnXDAnOwotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLQotICAgICAgICBT ZW5kSzVBdXRoU0IoS1JCX0FDQ0VQVCwgc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWQsCi0gICAgICAg ICAgICAgICAgICAgICAgc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWRbMF0gPyAtMSA6IDApOwotICAg ICAgICBhY2NlcHRfY29tcGxldGUgPSAxOwotICAgICAgICBja21ha21zZyhzdHJUbXAsc2l6ZW9m KHN0clRtcCksCi0gICAgICAgICAgICAgICAgICJLZXJiZXJvczUgaWRlbnRpZmllcyBoaW0gYXMg YGAiLAotICAgICAgICAgICAgICAgICBzelVzZXJOYW1lQXV0aGVudGljYXRlZCwiJyciLE5VTEwp OwotICAgICAgICBwcmludGYoIiVzXHJcbiIsc3RyVG1wKTsKLQotICAgICAgICBpZiAoc3pVc2Vy TmFtZVJlcXVlc3RlZFswXSAmJgotICAgICAgICAgICAga3JiNV9rdXNlcm9rKGs1X2NvbnRleHQs Ci0jaWZkZWYgSEVJTURBTAotICAgICAgICAgICAgICAgICAgICAgICAgICBrNV90aWNrZXQtPmNs aWVudCwKLSNlbHNlIC8qIEhFSU1EQUwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgazVf dGlja2V0LT5lbmNfcGFydDItPmNsaWVudCwKLSNlbmRpZiAvKiBIRUlNREFMICovCi0gICAgICAg ICAgICAgICAgICAgICAgICAgIHN6VXNlck5hbWVSZXF1ZXN0ZWQpKQotICAgICAgICAgICAgYXV0 aF9maW5pc2hlZChBVVRIX1ZBTElEKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXV0aF9m aW5pc2hlZChBVVRIX1VTRVIpOwotCi0gICAgICAgIGtyYjVfYXV0aF9jb25fZ2V0cmVtb3Rlc3Vi a2V5KGs1X2NvbnRleHQsIGF1dGhfY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZuZXdrZXkpOwotICAgICAgICBpZiAoazVfc2Vzc2lvbl9rZXkpIHsKLSAg ICAgICAgICAgIGtyYjVfZnJlZV9rZXlibG9jayhrNV9jb250ZXh0LCBrNV9zZXNzaW9uX2tleSk7 Ci0gICAgICAgICAgICBrNV9zZXNzaW9uX2tleSA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg KG5ld2tleSkgewotICAgICAgICAgICAga3JiNV9jb3B5X2tleWJsb2NrKGs1X2NvbnRleHQsIG5l d2tleSwgJms1X3Nlc3Npb25fa2V5KTsKLSAgICAgICAgICAgIGtyYjVfZnJlZV9rZXlibG9jayhr NV9jb250ZXh0LCBuZXdrZXkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAga3JiNV9j b3B5X2tleWJsb2NrKGs1X2NvbnRleHQsCi0jaWZkZWYgSEVJTURBTAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmazVfdGlja2V0LT50aWNrZXQua2V5LAotI2Vsc2UgLyogSEVJTURB TCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrNV90aWNrZXQtPmVuY19wYXJ0 Mi0+c2Vzc2lvbiwKLSNlbmRpZiAvKiBIRUlNREFMICovCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZrNV9zZXNzaW9uX2tleSk7Ci0gICAgICAgIH0KLQotI2lmZGVmIENLX0VOQ1JZ UFRJT04KLSNpZmRlZiBIRUlNREFMCi0gICAgICAgIHNrZXkudHlwZSA9IGs1X3Nlc3Npb25fa2V5 LT5rZXl2YWx1ZS5sZW5ndGggPT0gOCA/IFNLX0RFUyA6IFNLX0dFTkVSSUM7Ci0gICAgICAgIHNr ZXkubGVuZ3RoID0gazVfc2Vzc2lvbl9rZXktPmtleXZhbHVlLmxlbmd0aDsKLSAgICAgICAgc2tl eS5kYXRhID0gazVfc2Vzc2lvbl9rZXktPmtleXZhbHVlLmRhdGE7Ci0jZWxzZSAvKiBIRUlNREFM ICovCi0gICAgICAgIHNrZXkudHlwZSA9IGs1X3Nlc3Npb25fa2V5LT5sZW5ndGggPT0gOCA/IFNL X0RFUyA6IFNLX0dFTkVSSUM7Ci0gICAgICAgIHNrZXkubGVuZ3RoID0gazVfc2Vzc2lvbl9rZXkt Pmxlbmd0aDsKLSAgICAgICAgc2tleS5kYXRhID0gazVfc2Vzc2lvbl9rZXktPmNvbnRlbnRzOwot I2VuZGlmIC8qIEhFSU1EQUwgKi8KLSAgICAgICAgZW5jcnlwdF9zZXNzaW9uX2tleSgmc2tleSwg QVVUSF9TRVJWRVJfVE9fQ0xJRU5UKTsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAg ICAgIGRlYnVnKEYxMDAsIms1X2F1dGhfaXMgQVVUSF9TVUNDRVNTIiwiIiwwKTsKLSAgICAgICAg a3JiNV9lcnJubyA9IHI7Ci0gICAgICAgIGlmICgga3JiNV9lcnJubyApCi0gICAgICAgICAgICBt YWtlc3RyKCZrcmI1X2Vycm1zZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKLSAgICAgICAg ZWxzZQotICAgICAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csc3RyVG1wKTsKLSAgICAgICAg cmV0dXJuIEFVVEhfU1VDQ0VTUzsKLQotI2lmZGVmIEZPUldBUkQKLSAgICBjYXNlIEtSQjVfRk9S V0FSRDoKLSAgICAgICAgaWYgKCAhZm9yd2FyZF9mbGFnICkgewotICAgICAgICAgICAgU2VuZEs1 QXV0aFNCKEtSQjVfRk9SV0FSRF9SRUpFQ1QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJm b3J3YXJkZWQgY3JlZGVudGlhbHMgYXJlIGJlaW5nIHJlZnVzZWQuIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgLTEpOwotICAgICAgICAgICAgcmV0dXJuKEFVVEhfU1VDQ0VTUyk7Ci0gICAg ICAgIH0KLQotICAgICAgICBpbmJ1Zi5sZW5ndGggPSBjbnQ7Ci0gICAgICAgIGluYnVmLmRhdGEg PSAoY2hhciAqKWRhdGE7Ci0gICAgICAgIGlmICgKLSNpZm5kZWYgSEVJTURBTAotICAgICAgICAg ICAgKCFrcmI1X2Rfbm9fYWRkcmVzc2VzICYmCi0gICAgICAgICAgICAociA9IGtyYjVfYXV0aF9j b25fZ2VuYWRkcnMoazVfY29udGV4dCxhdXRoX2NvbnRleHQsZ19rc3RyZWFtLT5mZCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEtSQjVfQVVUSF9DT05URVhUX0dFTkVSQVRFX1JFTU9U RV9GVUxMX0FERFIpKSkgfHwKLSNlbmRpZiAvKiBIRUlNREFMICovCi0gICAgICAgICAgICAociA9 IHJkX2FuZF9zdG9yZV9mb3JfY3JlZHMoazVfY29udGV4dCwgYXV0aF9jb250ZXh0LCZpbmJ1ZiwK LSNpZmRlZiBIRUlNREFMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGs1X3RpY2tldC0+Y2xpZW50Ci0jZWxzZSAvKiBIRUlNREFMICovCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGs1X3RpY2tldC0+ZW5jX3BhcnQyLT5jbGllbnQKLSNl bmRpZiAvKiBIRUlNREFMICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICkpKSB7Ci0gICAgICAgICAgICAodm9pZCkgY2tzdHJuY3B5KGVycmJ1ZiwgIlJlYWQgZm9y d2FyZGVkIGNyZWRzIGZhaWxlZDogIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVvZihlcnJidWYpKTsKLSAgICAgICAgICAgICh2b2lkKSBja3N0cm5jYXQoZXJyYnVmLCBlcnJv cl9tZXNzYWdlKHIpLHNpemVvZihlcnJidWYpKTsKLSAgICAgICAgICAgIFNlbmRLNUF1dGhTQihL UkI1X0ZPUldBUkRfUkVKRUNULCBlcnJidWYsIC0xKTsKLSAgICAgICAgICAgIHByaW50ZigiQ291 bGQgbm90IHJlYWQgZm9yd2FyZGVkIGNyZWRlbnRpYWxzXHJcbiIpOwotICAgICAgICAgICAga3Ji NV9lcnJubyA9IHI7Ci0gICAgICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxlcnJvcl9tZXNz YWdlKGtyYjVfZXJybm8pKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg IFNlbmRLNUF1dGhTQihLUkI1X0ZPUldBUkRfQUNDRVBULCAwLCAwKTsKLSAgICAgICAgICAgIGNr c3RybmNweShzdHJUbXAsIkZvcndhcmRlZCBjcmVkZW50aWFscyBvYnRhaW5lZCIsc2l6ZW9mKHN0 clRtcCkpOwotICAgICAgICAgICAgcHJpbnRmKCIlc1xyXG4iLHN0clRtcCk7Ci0gICAgICAgICAg ICBrcmI1X2Vycm5vID0gMDsKLSAgICAgICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLHN0clRt cCk7Ci0gICAgICAgIH0KLSAgICAgICAgLyogQSBmYWlsdXJlIHRvIGFjY2VwdCBmb3J3YXJkZWQg Y3JlZGVudGlhbHMgaXMgbm90IGFuICovCi0gICAgICAgIC8qIGF1dGhlbnRpY2F0aW9uIGZhaWx1 cmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICByZXR1cm4gQVVUSF9T VUNDRVNTOwotI2VuZGlmICAvKiBGT1JXQVJEICovCi0gICAgZGVmYXVsdDoKLSAgICAgICAgcHJp bnRmKCJVbmtub3duIEtlcmJlcm9zIG9wdGlvbiAlZFxyXG4iLCBkYXRhWy0xXSk7Ci0gICAgICAg IFNlbmRLNUF1dGhTQihLUkJfUkVKRUNULCAwLCAwKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot ICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7 Ci0KLSAgZXJyb3V0OgotICAgIFNlbmRLNUF1dGhTQihLUkJfUkVKRUNULCBlcnJidWYsIC0xKTsK LSAgICBrcmI1X2Vycm5vID0gcjsKLSAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxlcnJidWYpOwot ICAgIHByaW50ZigiJXNcclxuIiwgZXJyYnVmKTsKLSAgICBpZiAoYXV0aF9jb250ZXh0KSB7Ci0g ICAgICAgIGtyYjVfYXV0aF9jb25fZnJlZShrNV9jb250ZXh0LCBhdXRoX2NvbnRleHQpOwotICAg ICAgICBhdXRoX2NvbnRleHQgPSAwOwotICAgIH0KLSAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVK RUNUKTsKLSAgICByZXR1cm4gQVVUSF9GQUlMVVJFOwotfQotCi0jaWZkZWYgRk9SV0FSRAotaW50 Ci0jaWZkZWYgQ0tfQU5TSUMKLWtlcmJlcm9zNV9mb3J3YXJkKHZvaWQpCi0jZWxzZQota2VyYmVy b3M1X2ZvcndhcmQoKQotI2VuZGlmCi17Ci0gICAga3JiNV9lcnJvcl9jb2RlIHI7Ci0gICAga3Ji NV9jY2FjaGUgY2NhY2hlPU5VTEw7Ci0gICAga3JiNV9wcmluY2lwYWwgY2xpZW50ID0gMDsKLSAg ICBrcmI1X3ByaW5jaXBhbCBzZXJ2ZXIgPSAwOwotICAgIGtyYjVfZGF0YSBmb3J3X2NyZWRzOwot I2lmZGVmIEhFSU1EQUwKLSAgICBrcmI1X2NyZWRzICAgICAgY3JlZHM7Ci0jZW5kaWYgLyogSEVJ TURBTCAqLwotCi0gICAgZm9yd19jcmVkcy5kYXRhID0gMDsKLQotICAgIHIgPSBrNV9nZXRfY2Nh Y2hlKGs1X2NvbnRleHQsJmNjYWNoZSxOVUxMKTsKLSAgICBpZiAoIHIgKSB7Ci0gICAgICAgIGNv bV9lcnIoTlVMTCwgciwgIktlcmJlcm9zIFY1OiBjb3VsZCBub3QgZ2V0IGRlZmF1bHQgY2NhY2hl Iik7Ci0gICAgICAgIGtyYjVfZXJybm8gPSByOwotICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1z ZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKLSAgICAgICAgcmV0dXJuKEFVVEhfRkFJTFVS RSk7Ci0gICAgfQotCi0gICAgaWYgKChyID0ga3JiNV9jY19nZXRfcHJpbmNpcGFsKGs1X2NvbnRl eHQsIGNjYWNoZSwgJmNsaWVudCkpKSB7Ci0gICAgICAgIGNvbV9lcnIoTlVMTCwgciwgIktlcmJl cm9zIFY1OiBjb3VsZCBub3QgZ2V0IGRlZmF1bHQgcHJpbmNpcGFsIik7Ci0gICAgICAgIGdvdG8g Y2xlYW51cDsKLSAgICB9Ci0KLSNpZmRlZiBIRUlNREFMCi0gICAgbWVtc2V0KCZjcmVkcywgMCwg c2l6ZW9mKGNyZWRzKSk7Ci0gICAgY3JlZHMuY2xpZW50ID0gY2xpZW50OwotCi0gICAgaWYgKHIg PSBrcmI1X2J1aWxkX3ByaW5jaXBhbChrNV9jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmY3JlZHMuc2VydmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJs ZW4oY2xpZW50LT5yZWFsbSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnQt PnJlYWxtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtyYnRndCIsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjbGllbnQtPnJlYWxtLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE5VTEwpKSB7Ci0gICAgICAgIGNvbV9lcnIoTlVMTCwgciwgIktlcmJl cm9zIFY1OiBjb3VsZCBub3QgZ2V0IHByaW5jaXBhbCIpOwotICAgICAgICBnb3RvIGNsZWFudXA7 Ci0gICAgfQotCi0gICAgY3JlZHMudGltZXMuZW5kdGltZSA9IDA7Ci0KLSAgICBpZiAociA9IGty YjVfZ2V0X2ZvcndhcmRlZF9jcmVkcyhrNV9jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhdXRoX2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNjYWNoZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3pIb3N0TmFtZSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNyZWRzLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZm9yd19jcmVkcykpIHsKLSAgICAgICAgY29t X2VycihOVUxMLCByLCAiS2VyYmVyb3MgVjU6IGVycm9yIGdldHRpbmcgZm9yd2FyZGVkIGNyZWRz Iik7Ci0gICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICB9Ci0jZWxzZSAvKiBIRUlNREFMICovCi0g ICAgLyogd2Ugc2hvdWxkIG5vdCBuZWVkIHRvIG1ha2UgdGhpcyBjYWxsIHNpbmNlIHdlIGFyZSBz dG9yaW5nIHRoZSAqLwotICAgIC8qIHNlcnZlcidzIHByaW5jaXBhbCBpbiBmd2Rfc2VydmVyIGZy b20gb3VyIGNhbGwgdG8gICAgICAgICAgICAgKi8KLSAgICAvKiBrcmI1X3NuYW1lX3RvX3ByaW5j aXBhbCgpIGluIGs1X2F1dGhfc2VuZCgpICAgICAgICAgICAgICAgICAgICovCi0gICAgaWYgKGZ3 ZF9zZXJ2ZXIgPT0gTlVMTCkgewotICAgICAgICBpZiAoKHIgPSBrcmI1X3NuYW1lX3RvX3ByaW5j aXBhbChrNV9jb250ZXh0LCBzekhvc3ROYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAga3JiNV9kX3NydiA/IGtyYjVfZF9zcnYgOiBLUkI1X1NFUlZJQ0VfTkFNRSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtSQjVfTlRfU1JWX0hTVCwgJnNl cnZlcikpKSB7Ci0gICAgICAgICAgICBjb21fZXJyKE5VTEwsIHIsICJLZXJiZXJvcyBWNTogY291 bGQgbm90IG1ha2Ugc2VydmVyIHByaW5jaXBhbCIpOwotICAgICAgICAgICAgZ290byBjbGVhbnVw OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFrcmI1X2Rfbm9fYWRkcmVzc2VzICYmCi0g ICAgICAgIChyID0ga3JiNV9hdXRoX2Nvbl9nZW5hZGRycyhrNV9jb250ZXh0LCBhdXRoX2NvbnRl eHQsIGdfa3N0cmVhbS0+ZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtSQjVfQVVU SF9DT05URVhUX0dFTkVSQVRFX0xPQ0FMX0ZVTExfQUREUikpKQotICAgIHsKLSAgICAgICAgY29t X2VycihOVUxMLCByLCAiS2VyYmVyb3MgVjU6IGNvdWxkIG5vdCBnZW4gbG9jYWwgZnVsbCBhZGRy ZXNzIik7Ci0gICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICB9Ci0KLSAgICBpZiAociA9IGtyYjVf ZndkX3RndF9jcmVkcyhrNV9jb250ZXh0LCBhdXRoX2NvbnRleHQsIDAsIGNsaWVudCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZndkX3NlcnZlciA/IGZ3ZF9zZXJ2ZXIgOiBzZXJ2 ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNjYWNoZSwgZm9yd2FyZGFibGVf ZmxhZywgJmZvcndfY3JlZHMpKSB7Ci0gICAgICAgIGNvbV9lcnIoTlVMTCwgciwgIktlcmJlcm9z IFY1OiBlcnJvciBnZXR0aW5nIGZvcndhcmRhYmxlIGNyZWRlbnRpYWxzIik7Ci0gICAgICAgIGdv dG8gY2xlYW51cDsKLSAgICB9Ci0jZW5kaWYgLyogSEVJTURBTCAqLwotCi0gICAgLyogU2VuZCBm b3J3YXJkZWQgY3JlZGVudGlhbHMgKi8KLSAgICBpZiAoIVNlbmRLNUF1dGhTQihLUkI1X0ZPUldB UkQsIGZvcndfY3JlZHMuZGF0YSwgZm9yd19jcmVkcy5sZW5ndGgpKSB7Ci0gICAgICAgIHByaW50 ZigiS2VyYmVyb3MgVjUgZm9yd2FyZGluZyBlcnJvciFcclxuJXNcclxuIiwKLSAgICAgICAgICAg ICAgICAgICAgIk5vdCBlbm91Z2ggcm9vbSBmb3IgYXV0aGVudGljYXRpb24gZGF0YSIpOwotICAg IH0KLQotY2xlYW51cDoKLSAgICBpZiAoY2xpZW50KQotICAgICAgICBrcmI1X2ZyZWVfcHJpbmNp cGFsKGs1X2NvbnRleHQsIGNsaWVudCk7Ci0gICAgaWYgKHNlcnZlcikKLSAgICAgICAga3JiNV9m cmVlX3ByaW5jaXBhbChrNV9jb250ZXh0LCBzZXJ2ZXIpOwotI2lmZGVmIEhFSU1EQUwKLSAgICBr cmI1X2RhdGFfZnJlZSgmZm9yd19jcmVkcyk7Ci0jZWxzZSAvKiBIRUlNREFMICovCi0gICAga3Ji NV9mcmVlX2RhdGFfY29udGVudHMoazVfY29udGV4dCwmZm9yd19jcmVkcyk7Ci0jZW5kaWYgLyog SEVJTURBTCAqLwotICAgIGtyYjVfY2NfY2xvc2UoazVfY29udGV4dCwgY2NhY2hlKTsKLQotICAg IGtyYjVfZXJybm8gPSByOwotICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLGtyYjVfZXJybm8/ZXJy b3JfbWVzc2FnZShrcmI1X2Vycm5vKToiT0siKTsKLSAgICByZXR1cm4ocj9BVVRIX0ZBSUxVUkU6 QVVUSF9TVUNDRVNTKTsKLX0KLSNlbmRpZiAvKiBGT1JXQVJEICovCi0jZWxzZSAvKiBLUkI1ICov Ci1pbnQKLWNrX2tyYjVfYXV0b2dldF9UR1QoY2hhciAqIGR1bW15KQotewotICAgIHJldHVybigw KTsKLX0KLSNpZmRlZiBDS19LRVJCRVJPUwotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWNrX2tyYjVf aW5pdFRHVCggc3RydWN0IGtyYl9vcF9kYXRhICogb3AsIHN0cnVjdCBrcmI1X2luaXRfZGF0YSAq IGluaXQsCi0gICAgICAgICAgICAgICAgIHN0cnVjdCBrcmI0X2luaXRfZGF0YSAqIGs0X2luaXQp Ci0jZWxzZQotY2tfa3JiNV9pbml0VEdUKG9wLGluaXQsazRfaW5pdCkKLSAgICBrcmJfb3BfZGF0 YSAqIG9wOyBzdHJ1Y3Qga3JiNV9pbml0X2RhdGEgKiBpbml0OwotICAgIHN0cnVjdCBrcmI0X2lu aXRfZGF0YSAqIGs0X2luaXQ7Ci0jZW5kaWYgLyogQ0tfQU5TSUMqLwotewotICAgIHJldHVybigt MSk7Ci19Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi1ja19rcmI1X2Rlc3Ryb3koc3RydWN0IGty Yl9vcF9kYXRhICogb3ApCi0jZWxzZQotY2tfa3JiNV9kZXN0cm95KG9wKSBzdHJ1Y3Qga3JiX29w X2RhdGEgKiBvcDsKLSNlbmRpZgotewotICAgIHJldHVybigtMSk7Ci19Ci0KLWludAotI2lmZGVm IENLX0FOU0lDCi1ja19rcmI1X2xpc3RfY3JlZHMoc3RydWN0IGtyYl9vcF9kYXRhICogb3AsIHN0 cnVjdCBrcmI1X2xpc3RfY3JlZF9kYXRhICogbGMpCi0jZWxzZQotY2tfa3JiNV9saXN0X2NyZWRz KG9wLGxjKQotICAgIHN0cnVjdCBrcmJfb3BfZGF0YSAqIG9wOyBzdHJ1Y3Qga3JiNV9saXN0X2Ny ZWRfZGF0YSAqIGxjOwotI2VuZGlmCi17Ci0gICAgcmV0dXJuKC0xKTsKLX0KLSNlbHNlIC8qIENL X0tFUkJFUk9TICovCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotY2tfa3JiNV9pbml0VEdUKHZvaWQg KiBvcCwgdm9pZCAqIGluaXQsIHZvaWQgKiBrNF9pbml0ICkKLSNlbHNlCi1ja19rcmI1X2luaXRU R1Qob3AsaW5pdCxrNF9pbml0KQotICAgIHZvaWQgKiBvcDsgdm9pZCAqIGluaXQ7IHZvaWQgKiBr NF9pbml0OwotI2VuZGlmIC8qIENLX0FOU0lDKi8KLXsKLSAgICByZXR1cm4oLTEpOwotfQotCi1p bnQKLSNpZmRlZiBDS19BTlNJQwotY2tfa3JiNV9kZXN0cm95KHZvaWQgKiBvcCkKLSNlbHNlCi1j a19rcmI1X2Rlc3Ryb3kob3ApIHZvaWQgKiBvcDsKLSNlbmRpZgotewotICAgIHJldHVybigtMSk7 Ci19Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi1ja19rcmI1X2xpc3RfY3JlZHModm9pZCAqIG9w LCB2b2lkICogbGMpCi0jZWxzZQotY2tfa3JiNV9saXN0X2NyZWRzKG9wLGxjKQotICAgIHZvaWQg KiBvcDsgdm9pZCAqIGxjOwotI2VuZGlmCi17Ci0gICAgcmV0dXJuKC0xKTsKLX0KLSNlbmRpZiAv KiBDS19LRVJCRVJPUyAqLwotI2VuZGlmIC8qIEtSQjUgKi8KLQotI2lmZGVmIEdTU0FQSV9LUkI1 Ci0vKgotICoKLSAqIGdzc2s1X2F1dGhfc2VuZCAtIGdldHMgYXV0aGVudGljYXRpb24gYml0cyB3 ZSBuZWVkIHRvIHNlbmQgdG8gS0RDLgotICoKLSAqIFJlc3VsdCBpcyBsZWZ0IGluIGs1X2F1dGgK LSAqCi0gKiBSZXR1cm5zOiAwIG9uIGZhaWx1cmUsIDEgb24gc3VjY2VzcwotICoKLSAqLwotCi1z dGF0aWMgaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWdzc2s1X2F1dGhfc2VuZChpbnQgaG93LCBpbnQg ZW5jcnlwdCwgaW50IGZvcndhcmQpCi0jZWxzZQotZ3NzazVfYXV0aF9zZW5kKGhvdyxlbmNyeXB0 LGZvcndhcmQpIGludCBob3c7IGludCBlbmNyeXB0OyBpbnQgZm9yd2FyZDsKLSNlbmRpZgotewot ICAgIE9NX3VpbnQzMiBtYWpfc3RhdCwgbWluX3N0YXQ7Ci0jaWZkZWYgS1JCNQotICAgIGNoYXIg KiByZWFsbSA9IE5VTEw7Ci0gICAgY2hhciB0Z3RbMjU2XTsKLSNlbmRpZiAvKiBLUkI1ICovCi0K LSAgICBnc3NfY2hhbi5pbml0aWF0b3JfYWRkcnR5cGUgPSBHU1NfQ19BRl9JTkVUOyAvKiBPTV91 aW50MzIgICovCi0gICAgZ3NzX2NoYW4uaW5pdGlhdG9yX2FkZHJlc3MubGVuZ3RoID0gNDsKLSAg ICBnc3NfY2hhbi5pbml0aWF0b3JfYWRkcmVzcy52YWx1ZSA9ICZteWN0bGFkZHIuc2luX2FkZHIu c19hZGRyOwotICAgIGdzc19jaGFuLmFjY2VwdG9yX2FkZHJ0eXBlID0gR1NTX0NfQUZfSU5FVDsg LyogT01fdWludDMyICovCi0gICAgZ3NzX2NoYW4uYWNjZXB0b3JfYWRkcmVzcy5sZW5ndGggPSA0 OwotICAgIGdzc19jaGFuLmFjY2VwdG9yX2FkZHJlc3MudmFsdWUgPSAmaGlzY3RsYWRkci5zaW5f YWRkci5zX2FkZHI7Ci0gICAgZ3NzX2NoYW4uYXBwbGljYXRpb25fZGF0YS5sZW5ndGggPSAwOwot ICAgIGdzc19jaGFuLmFwcGxpY2F0aW9uX2RhdGEudmFsdWUgPSAwOwotCi0jaWZkZWYgS1JCNQot ICAgIHJlYWxtID0gY2tfa3JiNV9yZWFsbW9maG9zdChmdHBfaG9zdCk7Ci0gICAgaWYgKHJlYWxt KSB7Ci0gICAgICAgIGNrbWFrbXNnKHRndCxzaXplb2YodGd0KSwia3JidGd0LyIscmVhbG0sIkAi LHJlYWxtKTsKLSAgICAgICAgZGVidWcoRjExMCwiZnRwX2F1dGgoR1NTQVBJKSBUR1QiLHRndCww KTsKLSAgICAgICAgaWYgKCBrcmI1X2F1dG9nZXQgJiYKLSAgICAgICAgICAgICAhKChja19rcmI1 X3RrdF9pc3ZhbGlkKE5VTEwsdGd0KSA+IDApIHx8Ci0gICAgICAgICAgICAgICAgKGNrX2tyYjVf aXNfdGd0X3ZhbGlkKCkgPiAwKSkgKQotICAgICAgICAgICAgY2tfa3JiNV9hdXRvZ2V0X1RHVChy ZWFsbSk7Ci0gICAgfQotI2VuZGlmIC8qIEtSQjUgKi8KLQotICAgIC8qIEJsb2IgZnJvbSBnc3Mt Y2xpZW50ICovCi0gICAgLyogaG9zdEBob3N0bmFtZSAqLwotICAgIC8qIHRoZSBWNSBHU1NBUEkg YmluZGluZyBjYW5vbmljYWxpemVzIHRoaXMgZm9yIHVzLi4uICovCi0gICAgY2ttYWttc2coZ3Nz X3N0YnVmLEdTU19CVUZTSVosCi0gICAgICAgICAgICAga3JiNV9kX3NydiA/IGtyYjVfZF9zcnYg OiBLUkI1X1NFUlZJQ0VfTkFNRSwKLSAgICAgICAgICAgICAiQCIsCi0gICAgICAgICAgICAgc3pI b3N0TmFtZSwKLSAgICAgICAgICAgICAgTlVMTAotICAgICAgICAgICAgICApOwotICAgIGZwcmlu dGYoc3RkZXJyLCAiQXV0aGVudGljYXRpbmcgdG8gPCVzPi4uLlxuIiwgZ3NzX3N0YnVmKTsKLSAg ICBnc3Nfc2VuZF90b2sudmFsdWUgPSBnc3Nfc3RidWY7Ci0gICAgZ3NzX3NlbmRfdG9rLmxlbmd0 aCA9IHN0cmxlbihnc3Nfc3RidWYpOwotICAgIG1hal9zdGF0ID0gZ3NzX2ltcG9ydF9uYW1lKCZt aW5fc3RhdCwgJmdzc19zZW5kX3RvaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z3NzX250X3NlcnZpY2VfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdz c190YXJnZXRfbmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIGlm IChtYWpfc3RhdCAhPSBHU1NfU19DT01QTEVURSkgewotICAgICAgICB1c2VyX2dzc19lcnJvciht YWpfc3RhdCwgbWluX3N0YXQsICJwYXJzaW5nIG5hbWUiKTsKLSAgICAgICAgc2VjdXJlX2Vycm9y KCJuYW1lIHBhcnNlZCA8JXM+XG4iLCBnc3Nfc3RidWYpOwotICAgICAgICByZXR1cm4oMCk7Ci0g ICAgfQotICAgIHRva2VuX3B0ciA9IEdTU19DX05PX0JVRkZFUjsKLSAgICBnY29udGV4dCA9IEdT U19DX05PX0NPTlRFWFQ7IC8qIHN0cnVjdHVyZSBjb3B5ICovCi0KLSAgICBmcHJpbnRmKHN0ZGVy ciwgImNhbGxpbmcgZ3NzX2luaXRfc2VjX2NvbnRleHRcbiIpOwotICAgIG1hal9zdGF0ID0KLSAg ICAgICAgZ3NzX2luaXRfc2VjX2NvbnRleHQoJm1pbl9zdGF0LAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgR1NTX0NfTk9fQ1JFREVOVElBTCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZnY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzc190YXJn ZXRfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzc19tZWNoX2tyYjUsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU1NfQ19NVVRVQUxfRkxBRyB8Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBHU1NfQ19SRVBMQVlfRkxBRyB8Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoKGZvcndhcmQgJiYgZm9yd2FyZF9mbGFnKSA/Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdTU19DX0RFTEVHX0ZMQUcgOiAwKSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa3Ji NV9kX25vX2FkZHJlc3NlcyA/IC8qIGNoYW5uZWwgYmluZGluZ3MgKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgR1NTX0NfTk9fQ0hBTk5FTF9CSU5ESU5HUyA6Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZnc3NfY2hhbiksCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBnc3NfdG9rZW5fcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM TCwgICAgIC8qIGlnbm9yZSBtZWNoIHR5cGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZnc3Nfc2VuZF90b2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAg ICAgLyogaWdub3JlIHJldF9mbGFncyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TlVMTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsgICAgICAgIC8qIGlnbm9yZSB0 aW1lX3JlYyAqLwotCi0KLSAgICAgICAgaWYgKG1hal9zdGF0ICE9IEdTU19TX0NPTVBMRVRFICYm Ci0gICAgICAgICAgICAgbWFqX3N0YXQgIT0gR1NTX1NfQ09OVElOVUVfTkVFREVEKSB7Ci0gICAg ICAgICAgICB1c2VyX2dzc19lcnJvcihtYWpfc3RhdCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtaW5fc3RhdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5pdGlhbGl6aW5n IGNvbnRleHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGdz c19yZWxlYXNlX25hbWUoJm1pbl9zdGF0LCAmZ3NzX3RhcmdldF9uYW1lKTsKLSAgICAgICAgICAg IHJldHVybigwKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4oMSk7Ci19Ci0KLS8qCi0gKiBn c3NrNV9hdXRoX3JlcGx5IC0tIGNoZWNrcyB0aGUgcmVwbHkgZm9yIG11dHVhbCBhdXRoZW50aWNh dGlvbi4KLSAqLwotc3RhdGljIGludAotI2lmZGVmIENLX0FOU0lDCi1nc3NrNV9hdXRoX3JlcGx5 KGludCBob3csIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBjbnQpCi0jZWxzZQotZ3NzazVfYXV0 aF9yZXBseShob3csZGF0YSxjbnQpIGludCBob3c7IHVuc2lnbmVkIGNoYXIgKmRhdGE7IGludCBj bnQ7Ci0jZW5kaWYKLXsKLSAgICBkYXRhICs9IDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFBvaW50IHRvIHN0YXR1cyBieXRlICovCi0gICAgY250IC09NTsKLQotICAgIHN3 aXRjaCAoKmRhdGErKykgewotICAgIGNhc2UgR1NTX1JFSkVDVDoKLSAgICAgICAgaWYgKGNudCA+ IDApIHsKLSAgICAgICAgICAgIGNoYXIgKnM7Ci0gICAgICAgICAgICBpbnQgbGVuOwotICAgICAg ICAgICAgY2tzdHJuY3B5KHN0clRtcCwiR1NTQVBJIHJlZnVzZXMgYXV0aGVudGljYXRpb24gYmVj YXVzZVxyXG4iLAotICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJUbXApKTsKLSAgICAg ICAgICAgIGxlbiA9IHN0cmxlbihzdHJUbXApOwotICAgICAgICAgICAgaWYgKCBsZW4gKyBjbnQg PCBzaXplb2Yoc3RyVG1wKSApIHsKLSAgICAgICAgICAgICAgICBzID0gc3RyVG1wICsgc3RybGVu KHN0clRtcCk7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHMsIGRhdGEsIGNudCk7ICAgICAgICAg ICAvKiBzYWZlICovCi0gICAgICAgICAgICAgICAgc1tjbnRdID0gMDsKLSAgICAgICAgICAgIH0K LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBja3N0cm5jcHkoc3RyVG1wLCJHU1NBUEkgcmVm dXNlcyBhdXRoZW50aWNhdGlvbiIsCi0gICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0clRt cCkpOwotICAgICAgICBwcmludGYoIkdTU0FQSSBhdXRoZW50aWNhdGlvbiBmYWlsZWQhXHJcbiVz XHJcbiIsc3RyVG1wKTsKLSAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0gICAg ICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7Ci0KLSAgICBjYXNlIEdTU19BQ0NFUFQ6Ci0gICAgICAg IGlmICggY250ID4gMCApIHsKLSAgICAgICAgICAgIGNoYXIgKnM7Ci0gICAgICAgICAgICBpbnQg bGVuOwotICAgICAgICAgICAgY2tzdHJuY3B5KHN0clRtcCwiR1NTQVBJIGFjY2VwdHMgeW91IGFz ICIsc2l6ZW9mKHN0clRtcCkpOwotICAgICAgICAgICAgbGVuID0gc3RybGVuKHN0clRtcCk7Ci0g ICAgICAgICAgICBpZiAoIGxlbiArIGNudCA8IHNpemVvZihzdHJUbXApICkgewotICAgICAgICAg ICAgICAgIHMgPSBzdHJUbXAgKyBzdHJsZW4oc3RyVG1wKTsKLSAgICAgICAgICAgICAgICBtZW1j cHkocyxkYXRhLGNudCk7Ci0gICAgICAgICAgICAgICAgc1tjbnRdID0gMDsKLSAgICAgICAgICAg IH0KLSAgICAgICAgfQotICAgICAgICBhY2NlcHRfY29tcGxldGUgPSAxOwotICAgICAgICBwcmlu dGYoIiVzXHJcbiIsc3RyVG1wKTsKLSAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1VTRVIpOwot ICAgICAgICByZXR1cm4gQVVUSF9TVUNDRVNTOwotCi0gICAgY2FzZSBHU1NfUkVTUE9OU0U6Ci0g ICAgICAgIGdzc190b2tlbl9wdHIgPSAmZ3NzX3JlY3ZfdG9rOwotICAgICAgICBnc3NfcmVjdl90 b2sudmFsdWUgPSBkYXRhOwotICAgICAgICBnc3NfcmVjdl90b2subGVuZ3RoID0gY250OwotCi0g ICAgICAgIG1hal9zdGF0ID0KLSAgICAgICAgICAgIGdzc19pbml0X3NlY19jb250ZXh0KCZtaW5f c3RhdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU1NfQ19OT19DUkVERU5U SUFMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnY29udGV4dCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NfdGFyZ2V0X25hbWUsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZ3NzX2tyYjVfbWVjaCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBHU1NfQ19NVVRVQUxfRkxBRyB8Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgR1NTX0NfUkVQTEFZX0ZMQUcgfAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChmb3J3YXJkX2ZsYWcgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgR1NTX0NfREVMRUdfRkxBRyA6IDApLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtyYjVfZF9u b19hZGRyZXNzZXMgPyAvKiBjaGFubmVsIGJpbmRpbmdzICovCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBHU1NfQ19OT19DSEFOTkVMX0JJTkRJTkdTIDoKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZnc3NfY2hhbiksCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ3NzX3Rva2VuX3B0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBOVUxMLCAvKiBpZ25vcmUgbWVjaCB0eXBlICovCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJmdzc19zZW5kX3RvaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBOVUxMLCAvKiBpZ25vcmUgcmV0X2ZsYWdzICovCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTlVMTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 ICAgIC8qIGlnbm9yZSB0aW1lX3JlYyAqLwotCi0gICAgICAgIGlmICggbWFqX3N0YXQgPT0gR1NT X1NfQ09NUExFVEUgKQotICAgICAgICB7Ci0KLSAgICAgICAgfSBlbHNlIGlmICggbWFqX3N0YXQg PT0gQ1NTX1NfQ09OVElOVUVfTkVFREVEICkgewotICAgICAgICB9IGVsc2UgewotICAgICAgICB9 Ci0KLSAgICAgICAgY2tzdHJuY3B5KHN0clRtcCwiUmVtb3RlIG1hY2hpbmUgaGFzIGJlZW4gbXV0 dWFsbHkgYXV0aGVudGljYXRlZCIsCi0gICAgICAgICAgICAgICAgICBzaXplb2Yoc3RyVG1wKSk7 Ci0gICAgICAgIHByaW50ZigiJXNcclxuIixzdHJUbXApOwotICAgICAgICBhdXRoX2ZpbmlzaGVk KEFVVEhfVVNFUik7Ci0gICAgICAgIHJldHVybiBBVVRIX1NVQ0NFU1M7Ci0KLSAgICBkZWZhdWx0 OgotICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICAgICAgcmV0dXJuIEFV VEhfRkFJTFVSRTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmtub3duIHJlcGx5IHR5cGUg Ki8KLSAgICB9Ci19Ci0KLS8qCi0gKgotICogZ3NzazVfYXV0aF9pcy4KLSAqCi0gKi8KLQotc3Rh dGljIGludAotI2lmZGVmIENLX0FOU0lDCi1rNV9hdXRoX2lzKGludCBob3csIHVuc2lnbmVkIGNo YXIgKmRhdGEsIGludCBjbnQpCi0jZWxzZQotazVfYXV0aF9pcyhob3csZGF0YSxjbnQpIGludCBo b3c7IHVuc2lnbmVkIGNoYXIgKmRhdGE7IGludCBjbnQ7Ci0jZW5kaWYKLXsKLSAgICBpbnQgcmVw bGllZCA9IDA7Ci0gICAgZ3NzX2NyZWRfaWRfdCBzZXJ2ZXJfY3JlZHMsIGRlbGVnX2NyZWRzOwot ICAgIGdzc19uYW1lX3QgY2xpZW50OwotICAgIGludCByZXRfZmxhZ3M7Ci0gICAgZ3NzX2J1ZmZl cl9kZXNjIG5hbWVfYnVmOwotICAgIGdzc19uYW1lX3Qgc2VydmVyX25hbWU7Ci0gICAgT01fdWlu dDMyIGFjcXVpcmVfbWFqLAotICAgICAgYWNxdWlyZV9taW4sCi0gICAgICBhY2NlcHRfbWFqLAot ICAgICAgYWNjZXB0X21pbiwKLSAgICAgIHN0YXRfbWFqLAotICAgICAgc3RhdF9taW47Ci0gICAg Z3NzX09JRCBtZWNoaWQ7Ci0gICAgZ3NzX2J1ZmZlcl9kZXNjIHRvaywgb3V0X3RvazsKLSAgICBj aGFyIGdidWZbR1NTX0JVRlNJWl07Ci0gICAgdV9jaGFyIGdvdXRfYnVmW0dTU19CVUZTSVpdOwot ICAgIGNoYXIgbG9jYWxuYW1lW01BWEhPU1ROQU1FTEVOXTsKLSAgICBjaGFyIHNlcnZpY2VfbmFt ZVtNQVhIT1NUTkFNRUxFTisxMF07Ci0gICAgY2hhciAqKnNlcnZpY2U7Ci0gICAgc3RydWN0IGhv c3RlbnQgKmhwOwotCi0gICAgZGF0YSArPSA0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBQb2ludCB0byBzdGF0dXMgYnl0ZSAqLwotICAgIGNudCAtPSA0OwotCi0gICAgY2to ZXhkdW1wKCJnc3NrNV9hdXRoX2lzIGRhdGEiLGRhdGEsY250KTsKLSAgICBkZWJ1ZyhGMTExLCJn c3NrNV9hdXRoX2lzIiwiaG93Iixob3cpOwotCi0gICAgaWYgKGNudC0tIDwgMSkgewotICAgICAg ICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVS RTsKLSAgICB9Ci0gICAgc3dpdGNoICgqZGF0YSsrKSB7Ci0gICAgY2FzZSBHU1NfQVVUSDoKLSAg ICAgICAgZ3NzX2NoYW4uaW5pdGlhdG9yX2FkZHJ0eXBlID0gR1NTX0NfQUZfSU5FVDsKLSAgICAg ICAgZ3NzX2NoYW4uaW5pdGlhdG9yX2FkZHJlc3MubGVuZ3RoID0gNDsKLSAgICAgICAgZ3NzX2No YW4uaW5pdGlhdG9yX2FkZHJlc3MudmFsdWUgPSAmaGlzX2FkZHIuc2luX2FkZHIuc19hZGRyOwot ICAgICAgICBnc3NfY2hhbi5hY2NlcHRvcl9hZGRydHlwZSA9IEdTU19DX0FGX0lORVQ7Ci0gICAg ICAgIGdzc19jaGFuLmFjY2VwdG9yX2FkZHJlc3MubGVuZ3RoID0gNDsKLSAgICAgICAgZ3NzX2No YW4uYWNjZXB0b3JfYWRkcmVzcy52YWx1ZSA9ICZjdHJsX2FkZHIuc2luX2FkZHIuc19hZGRyOwot ICAgICAgICBnc3NfY2hhbi5hcHBsaWNhdGlvbl9kYXRhLmxlbmd0aCA9IDA7Ci0gICAgICAgIGdz c19jaGFuLmFwcGxpY2F0aW9uX2RhdGEudmFsdWUgPSAwOwotCi0gICAgICAgIHRvay52YWx1ZSA9 IGRhdGE7Ci0gICAgICAgIHRvay5sZW5ndGggPSBjbnQ7Ci0KLSAgICAgICAgaWYgKGdldGhvc3Ru YW1lKGxvY2FsbmFtZSwgTUFYSE9TVE5BTUVMRU4pKSB7Ci0gICAgICAgICAgICBhdXRoX2Zpbmlz aGVkKEFVVEhfUkVKRUNUKTsKLSAgICAgICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7Ci0gICAg ICAgIH0KLSAgICAgICAgaWYgKCEoaHAgPSBnZXRob3N0YnluYW1lKGxvY2FsbmFtZSkpKSB7Ci0g ICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICAgICAgICAgIHJldHVy biBBVVRIX0ZBSUxVUkU7Ci0gICAgICAgIH0KLSNpZmRlZiBIQUREUkxJU1QKLSAgICAgICAgaHAg PSBja19jb3B5aG9zdGVudChocCk7Ci0jZW5kaWYgLyogSEFERFJMSVNUICovCi0gICAgICAgIHN0 cm5jcHkobG9jYWxuYW1lLCBocC0+aF9uYW1lLCBzaXplb2YobG9jYWxuYW1lKSAtIDEpOwotICAg ICAgICBsb2NhbG5hbWVbc2l6ZW9mKGxvY2FsbmFtZSkgLSAxXSA9ICdcMCc7Ci0KLSAgICAgICAg c3ByaW50ZihzZXJ2aWNlX25hbWUsICIlc0AlcyIsICpzZXJ2aWNlLCBsb2NhbG5hbWUpOwotICAg ICAgICBuYW1lX2J1Zi52YWx1ZSA9IHNlcnZpY2VfbmFtZTsKLSAgICAgICAgbmFtZV9idWYubGVu Z3RoID0gc3RybGVuKG5hbWVfYnVmLnZhbHVlKSArIDE7Ci0gICAgICAgIHN0YXRfbWFqID0gZ3Nz X2ltcG9ydF9uYW1lKCZzdGF0X21pbiwgJm5hbWVfYnVmLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ3NzX250X3NlcnZpY2VfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZzZXJ2ZXJfbmFtZSk7Ci0gICAgICAgIGlmIChzdGF0X21haiAhPSBH U1NfU19DT01QTEVURSkgewotICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7 Ci0gICAgICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOwotICAgICAgICB9Ci0KLSAgICAgICAg YWNxdWlyZV9tYWogPSBnc3NfYWNxdWlyZV9jcmVkKCZhY3F1aXJlX21pbiwgc2VydmVyX25hbWUs IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NTX0NfTlVMTF9P SURfU0VULCBHU1NfQ19BQ0NFUFQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnNlcnZlcl9jcmVkcywgTlVMTCwgTlVMTCk7Ci0gICAgICAgICh2b2lkKSBnc3NfcmVs ZWFzZV9uYW1lKCZzdGF0X21pbiwgJnNlcnZlcl9uYW1lKTsKLQotICAgICAgICBpZiAoYWNxdWly ZV9tYWogIT0gR1NTX1NfQ09NUExFVEUpIHsKLSAgICAgICAgICAgIHJlcGx5X2dzc19lcnJvcig1 MzUsIGFjY2VwdF9tYWosIGFjY2VwdF9taW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiYWNjZXB0aW5nIGNvbnRleHQiKTsKLSAgICAgICAgICAgIHN5c2xvZyhMT0dfRVJSLCAi ZmFpbGVkIGFjY2VwdGluZyBjb250ZXh0Iik7Ci0gICAgICAgICAgICAodm9pZCkgZ3NzX3JlbGVh c2VfY3JlZCgmc3RhdF9taW4sICZzZXJ2ZXJfY3JlZHMpOwotICAgICAgICAgICAgaWYgKHJldF9m bGFncyAmIEdTU19DX0RFTEVHX0ZMQUcpCi0gICAgICAgICAgICAgICAgKHZvaWQpIGdzc19yZWxl YXNlX2NyZWQoJnN0YXRfbWluLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmZGVsZWdfY3JlZHMpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQot ICAgICAgICBnY29udGV4dCA9IEdTU19DX05PX0NPTlRFWFQ7Ci0gICAgICAgIGFjY2VwdF9tYWog PSBnc3NfYWNjZXB0X3NlY19jb250ZXh0KCZhY2NlcHRfbWluLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2NvbnRleHQsIC8qIGNvbnRleHRfaGFuZGxlICov Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHZlcmlmaWVy X2NyZWRfaGFuZGxlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNlcnZlcl9jcmVkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnRvaywgLyogaW5wdXRfdG9rZW4gKi8KLQkJCQkJICAgIChrcmI1X2Rfbm9fYWRkcmVz c2VzID8KLQkJCQkJICAgICAvKiBjaGFubmVsIGJpbmRpbmdzICovCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTU19DX05PX0NIQU5ORUxfQklORElOR1Mg OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ3NzX2No YW4pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNsaWVu dCwgLyogc3JjX25hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJm1lY2hpZCwgLyogbWVjaF90eXBlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZvdXRfdG9rLCAvKiBvdXRwdXRfdG9rZW4gKi8KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJldF9mbGFncywKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgLyogaWdub3Jl IHRpbWVfcmVjICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGZvcndhcmRlZCBjcmVkZW50aWFscyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmZGVsZWdfY3JlZHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKLQotICAgICAgICBpZiAoYWNjZXB0X21haiE9R1NTX1NfQ09N UExFVEUgJiYgYWNjZXB0X21haiE9R1NTX1NfQ09OVElOVUVfTkVFREVEKSB7Ci0gICAgICAgICAg ICByZXBseV9nc3NfZXJyb3IoNTM1LCBhY2NlcHRfbWFqLCBhY2NlcHRfbWluLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiYWNjZXB0aW5nIGNvbnRleHQiKTsKLSAgICAgICAgICAgIHN5 c2xvZyhMT0dfRVJSLCAiZmFpbGVkIGFjY2VwdGluZyBjb250ZXh0Iik7Ci0gICAgICAgICAgICAo dm9pZCkgZ3NzX3JlbGVhc2VfY3JlZCgmc3RhdF9taW4sICZzZXJ2ZXJfY3JlZHMpOwotICAgICAg ICAgICAgaWYgKHJldF9mbGFncyAmIEdTU19DX0RFTEVHX0ZMQUcpCi0gICAgICAgICAgICAgICAg KHZvaWQpIGdzc19yZWxlYXNlX2NyZWQoJnN0YXRfbWluLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmZGVsZWdfY3JlZHMpOwotICAgICAgICAgICAgcmV0dXJuIDA7 Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAob3V0X3Rvay5sZW5ndGgpIHsKLSAgICAgICAgICAg IGlmIChrZXJyb3IgPSByYWRpeF9lbmNvZGUob3V0X3Rvay52YWx1ZSxnYnVmLCZvdXRfdG9rLmxl bmd0aCwgMCkpIHsKLSAgICAgICAgICAgICAgICBzZWN1cmVfZXJyb3IoIkNvdWxkbid0IGVuY29k ZSBBREFUIHJlcGx5ICglcykiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpeF9l cnJvcihrZXJyb3IpKTsKLSAgICAgICAgICAgICAgICBzeXNsb2coTE9HX0VSUiwgImNvdWxkbid0 IGVuY29kZSBBREFUIHJlcGx5Iik7Ci0gICAgICAgICAgICAgICAgKHZvaWQpIGdzc19yZWxlYXNl X2NyZWQoJnN0YXRfbWluLCAmc2VydmVyX2NyZWRzKTsKLSAgICAgICAgICAgICAgICBpZiAocmV0 X2ZsYWdzICYgR1NTX0NfREVMRUdfRkxBRykKLSAgICAgICAgICAgICAgICAgICAgICAgICh2b2lk KSBnc3NfcmVsZWFzZV9jcmVkKCZzdGF0X21pbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZkZWxlZ19jcmVkcyk7Ci0gICAgICAgICAgICAgICAgcmV0 dXJuKDApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN0YXRfbWFqID09IEdTU19T X0NPTVBMRVRFKSB7Ci0gICAgICAgICAgICAgICAgcmVwbHkoMjM1LCAiQURBVD0lcyIsIGdidWYp OwotICAgICAgICAgICAgICAgIHJlcGxpZWQgPSAxOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg ICAgICAgICAgICAgICAvKiBJZiB0aGUgc2VydmVyIGFjY2VwdHMgdGhlIHNlY3VyaXR5IGRhdGEs IGFuZAotICAgICAgICAgICAgICAgICAgIHJlcXVpcmVzIGFkZGl0aW9uYWwgZGF0YSwgaXQgc2hv dWxkIHJlc3BvbmQKLSAgICAgICAgICAgICAgICAgICB3aXRoIHJlcGx5IGNvZGUgMzM1LiAqLwot ICAgICAgICAgICAgICAgIHJlcGx5KDMzNSwgIkFEQVQ9JXMiLCBnYnVmKTsKLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgICh2b2lkKSBnc3NfcmVsZWFzZV9idWZmZXIoJnN0YXRfbWluLCAmb3V0 X3Rvayk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3RhdF9tYWogPT0gR1NTX1NfQ09NUExF VEUpIHsKLSAgICAgICAgICAgIC8qIEdTU0FQSSBhdXRoZW50aWNhdGlvbiBzdWNjZWVkZWQgKi8K LSAgICAgICAgICAgIHN0YXRfbWFqID0gZ3NzX2Rpc3BsYXlfbmFtZSgmc3RhdF9taW4sIGNsaWVu dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNsaWVudF9uYW1l LCAmbWVjaGlkKTsKLSAgICAgICAgICAgIGlmIChzdGF0X21haiAhPSBHU1NfU19DT01QTEVURSkg ewotICAgICAgICAgICAgICAgIC8qICJJZiB0aGUgc2VydmVyIHJlamVjdHMgdGhlIHNlY3VyaXR5 IGRhdGEgKGlmCi0gICAgICAgICAgICAgICAgICAgYSBjaGVja3N1bSBmYWlscywgZm9yIGluc3Rh bmNlKSwgaXQgc2hvdWxkCi0gICAgICAgICAgICAgICAgICAgcmVzcG9uZCB3aXRoIHJlcGx5IGNv ZGUgNTM1LiIgKi8KLSAgICAgICAgICAgICAgICByZXBseV9nc3NfZXJyb3IoNTM1LCBzdGF0X21h aiwgc3RhdF9taW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHRyYWN0aW5n IEdTU0FQSSBpZGVudGl0eSBuYW1lIik7Ci0gICAgICAgICAgICAgICAgc3lzbG9nKExPR19FUlIs ICJnc3NhcGkgZXJyb3IgZXh0cmFjdGluZyBpZGVudGl0eSIpOwotICAgICAgICAgICAgICAgICh2 b2lkKSBnc3NfcmVsZWFzZV9jcmVkKCZzdGF0X21pbiwgJnNlcnZlcl9jcmVkcyk7Ci0gICAgICAg ICAgICAgICAgaWYgKHJldF9mbGFncyAmIEdTU19DX0RFTEVHX0ZMQUcpCi0gICAgICAgICAgICAg ICAgICAgICAgICAodm9pZCkgZ3NzX3JlbGVhc2VfY3JlZCgmc3RhdF9taW4sCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVsZWdfY3JlZHMpOwotICAg ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXV0aF90 eXBlID0gdGVtcF9hdXRoX3R5cGU7Ci0gICAgICAgICAgICB0ZW1wX2F1dGhfdHlwZSA9IE5VTEw7 Ci0KLSAgICAgICAgICAgICh2b2lkKSBnc3NfcmVsZWFzZV9jcmVkKCZzdGF0X21pbiwgJnNlcnZl cl9jcmVkcyk7Ci0gICAgICAgICAgICBpZiAocmV0X2ZsYWdzICYgR1NTX0NfREVMRUdfRkxBRykg ewotICAgICAgICAgICAgICAgIGlmICh3YW50X2NyZWRzKQotICAgICAgICAgICAgICAgICAgICBm dHBkX2dzc19jb252ZXJ0X2NyZWRzKGNsaWVudF9uYW1lLnZhbHVlLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxlZ19jcmVkcyk7Ci0gICAgICAgICAgICAg ICAgKHZvaWQpIGdzc19yZWxlYXNlX2NyZWQoJnN0YXRfbWluLCAmZGVsZWdfY3JlZHMpOwotICAg ICAgICAgICAgfQotCi0gICAgICAgICAgICAvKiBJZiB0aGUgc2VydmVyIGFjY2VwdHMgdGhlIHNl Y3VyaXR5IGRhdGEsIGJ1dCBkb2VzCi0gICAgICAgICAgICAgICBub3QgcmVxdWlyZSBhbnkgYWRk aXRpb25hbCBkYXRhIChpLmUuLCB0aGUgc2VjdXJpdHkKLSAgICAgICAgICAgICAgIGRhdGEgZXhj aGFuZ2UgaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkpLCBpdCBtdXN0Ci0gICAgICAgICAgICAg ICByZXNwb25kIHdpdGggcmVwbHkgY29kZSAyMzUuICovCi0gICAgICAgICAgICBpZiAoIXJlcGxp ZWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHJldF9mbGFncyAmIEdTU19D X0RFTEVHX0ZMQUcgJiYgIWhhdmVfY3JlZHMpCi0gICAgICAgICAgICAgICAgICByZXBseSgyMzUs Ci0gIkdTU0FQSSBBdXRoZW50aWNhdGlvbiBzdWNjZWVkZWQsIGJ1dCBjb3VsZCBub3QgYWNjZXB0 IGZvcndhcmRlZCBjcmVkZW50aWFscyIKLSAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgcmVwbHkoMjM1LCAiR1NTQVBJIEF1 dGhlbnRpY2F0aW9uIHN1Y2NlZWRlZCIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0 dXJuKDEpOwotICAgICAgICB9IGVsc2UgaWYgKHN0YXRfbWFqID09IEdTU19TX0NPTlRJTlVFX05F RURFRCkgewotICAgICAgICAgICAgLyogSWYgdGhlIHNlcnZlciBhY2NlcHRzIHRoZSBzZWN1cml0 eSBkYXRhLCBhbmQKLSAgICAgICAgICAgIHJlcXVpcmVzIGFkZGl0aW9uYWwgZGF0YSwgaXQgc2hv dWxkIHJlc3BvbmQgd2l0aAotICAgICAgICAgICAgcmVwbHkgY29kZSAzMzUuICovCi0gICAgICAg ICAgICByZXBseSgzMzUsICJtb3JlIGRhdGEgbmVlZGVkIik7Ci0gICAgICAgICAgICAodm9pZCkg Z3NzX3JlbGVhc2VfY3JlZCgmc3RhdF9taW4sICZzZXJ2ZXJfY3JlZHMpOwotICAgICAgICAgICAg aWYgKHJldF9mbGFncyAmIEdTU19DX0RFTEVHX0ZMQUcpCi0gICAgICAgICAgICAgICAgKHZvaWQp IGdzc19yZWxlYXNlX2NyZWQoJnN0YXRfbWluLCAmZGVsZWdfY3JlZHMpOwotICAgICAgICAgICAg cmV0dXJuKDApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogIklmIHRoZSBzZXJ2 ZXIgcmVqZWN0cyB0aGUgc2VjdXJpdHkgZGF0YSAoaWYKLSAgICAgICAgICAgIGEgY2hlY2tzdW0g ZmFpbHMsIGZvciBpbnN0YW5jZSksIGl0IHNob3VsZAotICAgICAgICAgICAgcmVzcG9uZCB3aXRo IHJlcGx5IGNvZGUgNTM1LiIgKi8KLSAgICAgICAgICAgIHJlcGx5X2dzc19lcnJvcig1MzUsIHN0 YXRfbWFqLCBzdGF0X21pbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdTU0FQSSBm YWlsZWQgcHJvY2Vzc2luZyBBREFUIik7Ci0gICAgICAgICAgICBzeXNsb2coTE9HX0VSUiwgIkdT U0FQSSBmYWlsZWQgcHJvY2Vzc2luZyBBREFUIik7Ci0gICAgICAgICAgICAodm9pZCkgZ3NzX3Jl bGVhc2VfY3JlZCgmc3RhdF9taW4sICZzZXJ2ZXJfY3JlZHMpOwotICAgICAgICAgICAgaWYgKHJl dF9mbGFncyAmIEdTU19DX0RFTEVHX0ZMQUcpCi0gICAgICAgICAgICAgICAgKHZvaWQpIGdzc19y ZWxlYXNlX2NyZWQoJnN0YXRfbWluLCAmZGVsZWdfY3JlZHMpOwotICAgICAgICAgICAgcmV0dXJu KDApOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVidWcoRjEwMCwiZ3NzazVfYXV0aF9pcyBBVVRI X1NVQ0NFU1MiLCIiLDApOwotICAgICAgICBrcmI1X2Vycm5vID0gcjsKLSAgICAgICAgaWYgKCBr cmI1X2Vycm5vICkKLSAgICAgICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLGVycm9yX21lc3Nh Z2Uoa3JiNV9lcnJubykpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYWtlc3RyKCZrcmI1 X2Vycm1zZyxzdHJUbXApOwotICAgICAgICByZXR1cm4gQVVUSF9TVUNDRVNTOwotCi0gICAgZGVm YXVsdDoKLSAgICAgICAgcHJpbnRmKCJVbmtub3duIEtlcmJlcm9zIG9wdGlvbiAlZFxyXG4iLCBk YXRhWy0xXSk7Ci0gICAgICAgIFNlbmRHU1NLNUF1dGhTQihHU1NfUkVKRUNULCAwLCAwKTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAg IHJldHVybiBBVVRIX0ZBSUxVUkU7Ci19Ci0jZW5kaWYgLyogR1NTQVBJX0tSQjUgKi8KLQotI2lm ZGVmIENLX1NSUAotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5NyBTdGFuZm9yZCBVbml2ZXJzaXR5 Ci0gKgotICogVGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGZvciByZXZlbnVlLWdlbmVyYXRpbmcg cHVycG9zZXMgbWF5IHJlcXVpcmUgYQotICogbGljZW5zZSBmcm9tIHRoZSBvd25lcnMgb2YgdGhl IHVuZGVybHlpbmcgaW50ZWxsZWN0dWFsIHByb3BlcnR5LgotICogU3BlY2lmaWNhbGx5LCB0aGUg U1JQLTMgcHJvdG9jb2wgbWF5IG5vdCBiZSB1c2VkIGZvciByZXZlbnVlLWdlbmVyYXRpbmcKLSAq IHB1cnBvc2VzIHdpdGhvdXQgYSBsaWNlbnNlLgotICoKLSAqIE5PVEU6IENvbHVtYmlhIFVuaXZl cnNpdHkgaGFzIGEgbGljZW5zZS4KLSAqCi0gKiBXaXRoaW4gdGhhdCBjb25zdHJhaW50LCBwZXJt aXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZQotICogdGhpcyBzb2Z0 d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFu dGVkCi0gKiB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZXMgYW5kIHRoaXMgcGVybWlzc2lvbgotICogbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVz IG9mIHRoZSBzb2Z0d2FyZSBhbmQgcmVsYXRlZCBkb2N1bWVudGF0aW9uLgotICoKLSAqIFRIRSBT T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMtSVMiIEFORCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL SU5ELAotICogRVhQUkVTUywgSU1QTElFRCBPUiBPVEhFUldJU0UsIElOQ0xVRElORyBXSVRIT1VU IExJTUlUQVRJT04sIEFOWQotICogV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotICoKLSAqIElOIE5PIEVWRU5UIFNIQUxMIFNU QU5GT1JEIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsCi0gKiBJTkRJUkVD VCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIEtJTkQsIE9SIEFOWSBEQU1BR0VTIFdI QVRTT0VWRVIKLSAqIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMs IFdIRVRIRVIgT1IgTk9UIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBEQU1BR0Us IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgQVJJU0lORyBPVVQKLSAqIE9GIE9SIElO IENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUu Ci0gKi8KLQotc3RhdGljIHZvaWQKLXNycF9lbmNvZGVfbGVuZ3RoKGRhdGEsIG51bSkKLSAgICB1 bnNpZ25lZCBjaGFyICogZGF0YTsKLSAgICBpbnQgbnVtOwotewotICAgICpkYXRhID0gKG51bSA+ PiA4KSAmIDB4ZmY7Ci0gICAgKisrZGF0YSA9IG51bSAmIDB4ZmY7Ci19Ci0KLXN0YXRpYyBpbnQK LXNycF9kZWNvZGVfbGVuZ3RoKGRhdGEpCi0gICAgdW5zaWduZWQgY2hhciAqIGRhdGE7Ci17Ci0g ICAgcmV0dXJuICgoKGludCkgKmRhdGEgJiAweGZmKSA8PCA4KSB8ICgqKGRhdGEgKyAxKSAmIDB4 ZmYpOwotfQotCi0jaWZkZWYgUFJFX1NSUF8xXzdfMwotc3RhdGljIGludAotI2lmZGVmIENLX0FO U0lDCi1zcnBfcmVwbHkoaW50IGhvdywgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGNudCkKLSNl bHNlCi1zcnBfcmVwbHkoaG93LGRhdGEsY250KSBpbnQgaG93OyB1bnNpZ25lZCBjaGFyICpkYXRh OyBpbnQgY250OwotI2VuZGlmCi17Ci0gICAgc3RydWN0IHRfbnVtIG47Ci0gICAgc3RydWN0IHRf bnVtIGc7Ci0gICAgc3RydWN0IHRfbnVtIHM7Ci0gICAgc3RydWN0IHRfbnVtIEI7Ci0gICAgc3Ry dWN0IHRfbnVtICogQTsKLSAgICBjaGFyIHR5cGVfY2hlY2tbMjZdOwotICAgIGludCBwZmxhZzsK LQotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICBTZXNzaW9uX0tleSBza2V5OwotI2VuZGlmIC8q IEVOQ1JZUFRJT04gKi8KLQotICAgIGNoYXIgKiBzdHI9TlVMTDsKLQotICAgIGRhdGEgKz0gNDsg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50IHRvIHN0YXR1cyBieXRlICovCi0gICAg Y250ICAtPSA0OwotCi0gICAgaWYoY250LS0gPCAxKSB7Ci0gICAgICAgIGF1dGhfZmluaXNoZWQo QVVUSF9SRUpFQ1QpOwotICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOwotICAgIH0KLQotICAg IHN3aXRjaCgqZGF0YSsrKSB7Ci0gICAgY2FzZSBTUlBfUkVKRUNUOgotICAgICAgICBja21ha21z ZyhzdHJUbXAsc2l6ZW9mKHN0clRtcCksCi0gICAgICAgICAgICAgICAgICAiU1JQIHJlZnVzZXMg YXV0aGVudGljYXRpb24gZm9yICciLHN6VXNlck5hbWUsCi0gICAgICAgICAgICAgICAgICAiJ1xy XG4iLE5VTEwpOwotICAgICAgICBpZiAoY250ID4gMCkgewotICAgICAgICAgICAgaW50IGxlbiA9 IHN0cmxlbihzdHJUbXApOwotICAgICAgICAgICAgaWYgKCBsZW4gKyBjbnQgPCBzaXplb2Yoc3Ry VG1wKSApIHsKLSAgICAgICAgICAgICAgICBzdHIgPSBzdHJUbXAgKyBzdHJsZW4oc3RyVG1wKTsK LSAgICAgICAgICAgICAgICBtZW1jcHkoc3RyLGRhdGEsY250KTsKLSAgICAgICAgICAgICAgICBz dHJbY250XSA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcHJpbnRmKCJT UlAgYXV0aGVudGljYXRpb24gZmFpbGVkIVxyXG4lc1xyXG4iLHN0clRtcCk7Ci0gICAgICAgIGlm ICh0YyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICB0X2NsaWVudGNsb3NlKHRjKTsKLSAgICAgICAg ICAgIHRjID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVK RUNUKTsKLSAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKLQotICAgIGNhc2UgU1JQX0FDQ0VQ VDoKLSAgICAgICAgaWYoY250IDwgUkVTUE9OU0VfTEVOIHx8ICFzcnBfd2FpdHJlc3AgfHwKLSAg ICAgICAgICAgIHRjID09IE5VTEwKLSAgICAgICAgICAgICkgewotICAgICAgICAgICAgcHJpbnRm KCJTUlAgUHJvdG9jb2wgZXJyb3JcclxuIik7Ci0gICAgICAgICAgICByZXR1cm4oYXV0aF9yZXNl bmQoQVVUSFRZUEVfU1JQKSk7Ci0gICAgICAgIH0KLSAgICAgICAgc3JwX3dhaXRyZXNwID0gMDsK LQotICAgICAgICBpZih0X2NsaWVudHZlcmlmeSh0YywgZGF0YSkgPT0gMCkgewotICAgICAgICAg ICAgcHJpbnRmKCJTUlAgYWNjZXB0cyB5b3UgYXMgJXNcclxuIixzelVzZXJOYW1lKTsKLSNpZmRl ZiBDS19TU0wKLSAgICAgICAgICAgIGlmKChzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9m bGFnKSAmJgotICAgICAgICAgICAgICAgIChob3cgJiBBVVRIX0VOQ1JZUFRfTUFTSykgPT0gQVVU SF9FTkNSWVBUX1NUQVJUX1RMUykgewotICAgICAgICAgICAgICAgIHByaW50ZigiVExTIHNlc3Np b24gcGFyYW1ldGVycyB2ZXJpZmllZCBieSBTUlBcclxuIik7Ci0gICAgICAgICAgICB9IGVsc2UK LSNlbmRpZiAvKiBDS19TU0wgKi8KLQotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgICAg IHsKLSAgICAgICAgICAgICAgICBza2V5LnR5cGUgPSBTS19HRU5FUklDOwotICAgICAgICAgICAg ICAgIHNrZXkubGVuZ3RoID0gU0VTU0lPTl9LRVlfTEVOOwotICAgICAgICAgICAgICAgIHNrZXku ZGF0YSA9IHRjLT5zZXNzaW9uX2tleTsKLSAgICAgICAgICAgICAgICBlbmNyeXB0X3Nlc3Npb25f a2V5KCZza2V5LCBBVVRIX0NMSUVOVF9UT19TRVJWRVIpOwotICAgICAgICAgICAgfQotI2VuZGlm IC8qIEVOQ1JZUFRJT04gKi8KLSAgICAgICAgICAgIHRfY2xpZW50Y2xvc2UodGMpOwotICAgICAg ICAgICAgdGMgPSBOVUxMOwotICAgICAgICAgICAgYWNjZXB0X2NvbXBsZXRlID0gMTsKLSAgICAg ICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9WQUxJRCk7Ci0gICAgICAgICAgICByZXR1cm4gQVVU SF9TVUNDRVNTOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHJpbnRmKCJTUlAgc2Vy dmVyIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCFcclxuIik7Ci0gICAgICAgICAgICB0X2NsaWVudGNs b3NlKHRjKTsKLSAgICAgICAgICAgIHRjID0gTlVMTDsKLSAgICAgICAgICAgIHJldHVybihhdXRo X3Jlc2VuZChBVVRIVFlQRV9TUlApKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAg IGNhc2UgU1JQX1BBUkFNUzoKLSAgICAgICAgaWYoIXN6VXNlck5hbWUpIHsKLSAgICAgICAgICAg IHByaW50ZigiTm8gdXNlcm5hbWUgYXZhaWxhYmxlXHJcbiIpOwotICAgICAgICAgICAgcmV0dXJu KGF1dGhfcmVzZW5kKEFVVEhUWVBFX1NSUCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbi5sZW4g PSBzcnBfZGVjb2RlX2xlbmd0aChkYXRhKTsKLSAgICAgICAgZGF0YSArPSAyOwotICAgICAgICBj bnQgLT0gMjsKLSAgICAgICAgaWYobi5sZW4gPiBjbnQpIHsKLSAgICAgICAgICAgIHByaW50Zigi biB0b28gbG9uZ1xyXG4iKTsKLSAgICAgICAgICAgIHJldHVybihhdXRoX3Jlc2VuZChBVVRIVFlQ RV9TUlApKTsKLSAgICAgICAgfQotICAgICAgICBuLmRhdGEgPSBkYXRhOwotICAgICAgICBkYXRh ICs9IG4ubGVuOwotICAgICAgICBjbnQgLT0gbi5sZW47Ci0KLSAgICAgICAgZy5sZW4gPSBzcnBf ZGVjb2RlX2xlbmd0aChkYXRhKTsKLSAgICAgICAgZGF0YSArPSAyOwotICAgICAgICBjbnQgLT0g MjsKLSAgICAgICAgaWYoZy5sZW4gPiBjbnQpIHsKLSAgICAgICAgICAgIHByaW50ZigiZyB0b28g bG9uZ1xyXG4iKTsKLSAgICAgICAgICAgIHJldHVybihhdXRoX3Jlc2VuZChBVVRIVFlQRV9TUlAp KTsKLSAgICAgICAgfQotICAgICAgICBnLmRhdGEgPSBkYXRhOwotICAgICAgICBkYXRhICs9IGcu bGVuOwotICAgICAgICBjbnQgLT0gZy5sZW47Ci0KLSAgICAgICAgcy5sZW4gPSBzcnBfZGVjb2Rl X2xlbmd0aChkYXRhKTsKLSAgICAgICAgZGF0YSArPSAyOwotICAgICAgICBjbnQgLT0gMjsKLSAg ICAgICAgaWYocy5sZW4gPiBjbnQpIHsKLSAgICAgICAgICAgIHByaW50Zigic2FsdCB0b28gbG9u Z1xyXG4iKTsKLSAgICAgICAgICAgIHJldHVybihhdXRoX3Jlc2VuZChBVVRIVFlQRV9TUlApKTsK LSAgICAgICAgfQotICAgICAgICBzLmRhdGEgPSBkYXRhOwotICAgICAgICBkYXRhICs9IHMubGVu OwotICAgICAgICBjbnQgLT0gcy5sZW47Ci0KLSAgICAgICAgLyogSWYgdGhlIHBhcmFtZXRlcnMg cHJvdmlkZWQgYnkgdGhlIHNlcnZlciBjYW5ub3QgYmUKLSAgICAgICAgICogdmFsaWRhdGVkIHRo ZSBmb2xsb3dpbmcgZnVuY3Rpb24gd2lsbCBmYWlsLgotICAgICAgICAgKi8KLSAgICAgICAgdGMg PSB0X2NsaWVudG9wZW4oc3pVc2VyTmFtZSwgJm4sICZnLCAmcyk7Ci0gICAgICAgIGlmICh0YyA9 PSBOVUxMKSB7Ci0gICAgICAgICAgICBwcmludGYoIlNSUCBwYXJhbWV0ZXIgaW5pdGlhbGl6YXRp b24gZXJyb3JcclxuIik7Ci0gICAgICAgICAgICByZXR1cm4oYXV0aF9yZXNlbmQoQVVUSFRZUEVf U1JQKSk7Ci0gICAgICAgIH0KLSAgICAgICAgQSA9IHRfY2xpZW50Z2VuZXhwKHRjKTsKLSAgICAg ICAgaWYoQSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBwcmludGYoIlNSUCBwcm90b2NvbCBlcnJv clxyXG4iKTsKLSAgICAgICAgICAgIHJldHVybihhdXRoX3Jlc2VuZChBVVRIVFlQRV9TUlApKTsK LSAgICAgICAgfQotICAgICAgICBTZW5kU1JQQXV0aFNCKFNSUF9FWFAsIEEtPmRhdGEsIEEtPmxl bik7Ci0KLSAgICAgICAgaWYgKCBwd2J1ZlswXSAmJiBwd2ZsZyApIHsKLSAgICAgICAgICAgIHBy aW50ZigiU1JQIHVzaW5nICVkLWJpdCBtb2R1bHVzIGZvciAnJXMnXHJcbiIsCi0gICAgICAgICAg ICAgICAgICAgOCAqIG4ubGVuLAotICAgICAgICAgICAgICAgICAgIHN6VXNlck5hbWUKLSAgICAg ICAgICAgICAgICAgICApOwotICAgICAgICAgICAgY2tzdHJuY3B5KHNycF9wYXNzd2QscHdidWYs c2l6ZW9mKHNycF9wYXNzd2QpKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgIGlmICggcHdjcnlw dCApCi0gICAgICAgICAgICAgICAgY2tfZW5jcnlwdCgoY2hhciAqKXNycF9wYXNzd2QpOwotI2Vu ZGlmIC8qIE9TMiAqLwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZXh0ZXJuIGNoYXIg KiBzcnBwd3Byb21wdDsKLSAgICAgICAgICAgIGNoYXIgcHJlZmFjZVsxMjhdOwotICAgICAgICAg ICAgaW50IG9rOwotCi0gICAgICAgICAgICBpZiAoc3JwcHdwcm9tcHQgJiYgc3JwcHdwcm9tcHRb MF0gJiYKLQkJKHN0cmxlbihzcnBwd3Byb21wdCkgKyBzdHJsZW4oc3pVc2VyTmFtZSkgLSAyKSA8 Ci0JCXNpemVvZihwcmVmYWNlKSkgewotICAgICAgICAgICAgICAgIHNwcmludGYocHJlZmFjZSxz cnBwd3Byb21wdCxzelVzZXJOYW1lKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICAgICAgY2ttYWt4bXNnKCBwcmVmYWNlLHNpemVvZihwcmVmYWNlKSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgIlNSUCB1c2luZyAiLGNraXRvYSg4Km4ubGVuKSwiLWJpdCBtb2R1bHVzIGZv ciAnIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3pVc2VyTmFtZSwgIiciLCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBO VUxMKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG9rID0gdXFfdHh0KCBwcmVmYWNlLCJQ YXNzd29yZDogIiwyLE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3JwX3Bhc3N3ZCxz aXplb2Yoc3JwX3Bhc3N3ZCktMSxOVUxMLAotCQkJIERFRkFVTFRfVVFfVElNRU9VVCk7Ci0gICAg ICAgICAgICBpZiAoICFvayApCi0gICAgICAgICAgICAgICAgc3JwX3Bhc3N3ZFswXSA9ICdcMCc7 Ci0gICAgICAgIH0KLQotICAgICAgICB0X2NsaWVudHBhc3N3ZCh0Yywgc3JwX3Bhc3N3ZCk7Ci0g ICAgICAgIG1lbXNldChzcnBfcGFzc3dkLCAwLCBzaXplb2Yoc3JwX3Bhc3N3ZCkpOwotICAgICAg ICByZXR1cm4gQVVUSF9TVUNDRVNTOwotCi0gICAgY2FzZSBTUlBfQ0hBTExFTkdFOgotICAgICAg ICBpZih0YyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBwcmludGYoIlNSUCBwcm90b2NvbCBlcnJv clxyXG4iKTsKLSAgICAgICAgICAgIHJldHVybihhdXRoX3Jlc2VuZChBVVRIVFlQRV9TUlApKTsK LSAgICAgICAgfQotCi0jaWZuZGVmIFBSRV9TUlBfMV80XzUKLSAgICAgICAgLyoKLSAgICAgICAg ICogVGhlIG9yaWdpbmFsIFNSUCBBVVRIIGltcGxlbWVudGF0aW9uIGRpZCBub3QgcHJvdGVjdCBh Z2FpbnN0Ci0gICAgICAgICAqIHRhbXBlcmluZyBvZiB0aGUgYXV0aC10eXBlLXBhaXJzLiAgVGhl cmVmb3JlLCB3aGVuIHRoZQotICAgICAgICAgKiBBVVRIX0VOQ1JZUFRfTUFTSyBiaXRzIGFyZSB6 ZXJvLCBubyBleHRyYSBkYXRhIGlzIGluc2VydGVkCi0gICAgICAgICAqIGludG8gdGhlIFNSUCBo YXNoIGNvbXB1dGF0aW9uLiAgV2hlbiBBVVRIX0VOQ1JZUFRfU1RBUlRfVExTCi0gICAgICAgICAq IGlzIHNldCB3ZSBhbHNvIGluc2VydCB0aGUgU1NML1RMUyBjbGllbnQgYW5kIHNlcnZlciBmaW5p c2hlZAotICAgICAgICAgKiBtZXNzYWdlcyB0byBlbnN1cmUgdGhhdCB0aGVyZSBpcyBubyBtYW4g aW4gdGhlIG1pZGRsZSBhdHRhY2sKLSAgICAgICAgICogdW5kZXJ3YXkgb24gdGhlIFNTTC9UTFMg Y29ubmVjdGlvbi4KLSAgICAgICAgICovCi0gICAgICAgIGlmICgoaG93ICYgQVVUSF9FTkNSWVBU X01BU0spICE9IEFVVEhfRU5DUllQVF9PRkYpIHsKLSAgICAgICAgICAgIHR5cGVfY2hlY2tbMF0g PSBBVVRIVFlQRV9TUlA7Ci0gICAgICAgICAgICB0eXBlX2NoZWNrWzFdID0gaG93OwotI2lmZGVm IENLX1NTTAotICAgICAgICAgICAgaWYgKChob3cgJiBBVVRIX0VOQ1JZUFRfTUFTSykgPT0gQVVU SF9FTkNSWVBUX1NUQVJUX1RMUykgewotICAgICAgICAgICAgICAgIHNzbF9nZXRfY2xpZW50X2Zp bmlzaGVkKCZ0eXBlX2NoZWNrWzJdLDEyKTsKLSAgICAgICAgICAgICAgICBzc2xfZ2V0X3NlcnZl cl9maW5pc2hlZCgmdHlwZV9jaGVja1sxNF0sMTIpOwotICAgICAgICAgICAgICAgIHRfY2xpZW50 YWRkZXhkYXRhKHRjLHR5cGVfY2hlY2ssMjYpOwotICAgICAgICAgICAgfSBlbHNlCi0jZW5kaWYg LyogQ0tfU1NMICovCi0gICAgICAgICAgICAgICAgdF9jbGllbnRhZGRleGRhdGEodGMsdHlwZV9j aGVjaywyKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIFBSRV9TUlBfMV80XzUgKi8KLQotICAgICAg ICBCLmRhdGEgPSBkYXRhOwotICAgICAgICBCLmxlbiA9IGNudDsKLSAgICAgICAgdF9jbGllbnRn ZXRrZXkodGMsICZCKTsKLQotICAgICAgICBTZW5kU1JQQXV0aFNCKFNSUF9SRVNQT05TRSwgdF9j bGllbnRyZXNwb25zZSh0YyksIFJFU1BPTlNFX0xFTik7Ci0gICAgICAgIHNycF93YWl0cmVzcCA9 IDE7Ci0gICAgICAgIHJldHVybiBBVVRIX1NVQ0NFU1M7Ci0KLSAgICBkZWZhdWx0OgotICAgICAg ICByZXR1cm4oYXV0aF9yZXNlbmQoQVVUSFRZUEVfU1JQKSk7Ci0gICAgfQotICAgIHJldHVybiBB VVRIX0ZBSUxVUkU7Ci19Ci0KLXN0YXRpYyBpbnQKLSNpZmRlZiBDS19BTlNJQwotc3JwX2lzKGlu dCBob3csIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBjbnQpCi0jZWxzZQotc3JwX2lzKGhvdyxk YXRhLGNudCkgaW50IGhvdzsgdW5zaWduZWQgY2hhciAqZGF0YTsgaW50IGNudDsKLSNlbmRpZgot ewotICAgIGNoYXIgKiBwYnVmID0gTlVMTDsKLSAgICBjaGFyICogcHRyOwotI2lmZGVmIENLX0VO Q1JZUFRJT04KLSAgICBTZXNzaW9uX0tleSBza2V5OwotI2VuZGlmCi0gICAgc3RydWN0IHRfbnVt IEE7Ci0gICAgc3RydWN0IHRfcHcgKiB0cHcgPSBOVUxMOwotICAgIHN0cnVjdCB0X2NvbmYgKiB0 Y29uZiA9IE5VTEw7Ci0gICAgc3RydWN0IHBhc3N3ZCAqIHBhc3M7Ci0gICAgc3RhdGljIHN0cnVj dCB0X251bSAqIEIgPSBOVUxMOyAgICAgLyogSG9sZGVyIGZvciBCICovCi0jaWZkZWYgQ0tfU1NM Ci0gICAgY2hhciB0eXBlX2NoZWNrWzI2XTsKLSNlbHNlCi0gICAgY2hhciB0eXBlX2NoZWNrWzJd OwotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0gICAgaWYgKChjbnQgLT0gNCkgPCAxKSB7Ci0gICAg ICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAgICAgICByZXR1cm4gQVVUSF9GQUlM VVJFOwotICAgIH0KLQotICAgIGRhdGEgKz0gNDsKLSAgICBjbnQgIC09IDE7Ci0gICAgc3dpdGNo KCpkYXRhKyspIHsKLSAgICBjYXNlIFNSUF9BVVRIOgotICAgICAgICAvKiBTZW5kIHBhcmFtZXRl cnMgYmFjayB0byBjbGllbnQgKi8KLSAgICAgICAgaWYodHMgIT0gTlVMTCkgewotICAgICAgICAg ICAgdF9zZXJ2ZXJjbG9zZSh0cyk7Ci0gICAgICAgICAgICB0cyA9IE5VTEw7Ci0gICAgICAgIH0K LSAgICAgICAgaWYoIXN6VXNlck5hbWVSZXF1ZXN0ZWRbMF0pIHsKLSAgICAgICAgICAgIGlmICgx KQotICAgICAgICAgICAgICAgIHByaW50ZigiTm8gdXNlcm5hbWUgYXZhaWxhYmxlXHJcbiIpOwot ICAgICAgICAgICAgU2VuZFNSUEF1dGhTQihTUlBfUkVKRUNULCAodm9pZCAqKSAiTm8gdXNlcm5h bWUgc3VwcGxpZWQiLCAtMSk7Ci0gICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNU KTsKLSAgICAgICAgICAgIHJldHVybihBVVRIX0ZBSUxVUkUpOwotICAgICAgICB9Ci0jaWZkZWYg SUtTRAotI2lmZGVmIENLX0xPR0lOCi0gICAgICAgIGlmIChpbnNlcnZlciAmJiBja3hhbm9uICYm Ci0gICAgICAgICAgICAgIXN0cmNtcChzelVzZXJOYW1lUmVxdWVzdGVkLCJhbm9ueW1vdXMiKSkg ewotICAgICAgICAgICAgU2VuZFNSUEF1dGhTQihTUlBfUkVKRUNULCAodm9pZCAqKQotICAgICAg ICAgICAgImFub255bW91cyBsb2dpbiBjYW5ub3QgYmUgcGVyZm9ybWVkIHdpdGggU2VjdXJlIFJl bW90ZSBQYXNzd29yZCIsCi0gICAgICAgICAgICAtMSk7Ci0gICAgICAgICAgICBhdXRoX2Zpbmlz aGVkKEFVVEhfUkVKRUNUKTsKLSAgICAgICAgICAgIHJldHVybihBVVRIX0ZBSUxVUkUpOwotICAg ICAgICB9Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSNlbmRpZiAvKiBJS1NEICovCi0jaWZuZGVm IFBSRV9TUlBfMV80XzQKLSAgICAgICAgaWYodHB3ID09IE5VTEwpIHsKLSAgICAgICAgICAgIGlm KCh0cHcgPSB0X29wZW5wdyhOVUxMKSkgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGlmICgx KQotICAgICAgICAgICAgICAgICAgICBwcmludGYoIlVuYWJsZSB0byBvcGVuIHBhc3N3b3JkIGZp bGVcclxuIik7Ci0gICAgICAgICAgICAgICAgU2VuZFNSUEF1dGhTQihTUlBfUkVKRUNULCAodm9p ZCAqKSAiTm8gcGFzc3dvcmQgZmlsZSIsIC0xKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oQVVU SF9GQUlMVVJFKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZih0Y29uZiA9 PSBOVUxMKSB7Ci0gICAgICAgICAgICBpZigodGNvbmYgPSB0X29wZW5jb25mKE5VTEwpKSA9PSBO VUxMKSB7Ci0gICAgICAgICAgICAgICAgaWYgKDEpCi0gICAgICAgICAgICAgICAgICBwcmludGYo IlVuYWJsZSB0byBvcGVuIGNvbmZpZ3VyYXRpb24gZmlsZVxyXG4iKTsKLSAgICAgICAgICAgICAg ICBTZW5kU1JQQXV0aFNCKFNSUF9SRUpFQ1QsICh2b2lkICopIk5vIGNvbmZpZ3VyYXRpb24gZmls ZSIsIC0xKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oQVVUSF9GQUlMVVJFKTsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgfQotICAgICAgICB0cyA9IHRfc2VydmVyb3BlbmZyb21maWxlcyhzelVz ZXJOYW1lUmVxdWVzdGVkLCB0cHcsIHRjb25mKTsKLSAgICAgICAgdF9jbG9zZXB3KHRwdyk7Ci0g ICAgICAgIHRwdyA9IE5VTEw7Ci0gICAgICAgIHRfY2xvc2Vjb25mKHRjb25mKTsKLSAgICAgICAg dGNvbmYgPSBOVUxMOwotI2Vsc2UgLyogUFJFX1NSUF8xXzRfNCAqLwotI2lmZGVmIENPTU1FTlQK LSAgICAgICAgLyogdGhlIGNvZGUgaW4gdGhpcyBibG9jayBzaG91bGQgbm8gbG9uZ2VyIGJlIG5l Y2Vzc2FyeSBvbiBPUy8yCi0gICAgICAgICAgIG9yIFdpbmRvd3MgYmVjYXVzZSBJIGhhdmUgYWRk ZWQgZnVuY3Rpb25hbGl0eSB0byBsaWJzcnAubGliCi0gICAgICAgICAgIHRvIGZpbmQgdGhlIHNy cCBmaWxlcy4gICA0LzIyLzIwMDAKLSAgICAgICAgKi8KLQotICAgICAgICAvKiBPbiBXaW5kb3dz IGFuZCBPUy8yIHRoZXJlIGlzIG5vIHdlbGwgZGVmaW5lZCBwbGFjZSBmb3IgdGhlICovCi0gICAg ICAgIC8qIEVUQyBkaXJlY3RvcnkuICBTbyB3ZSBsb29rIGZvciBlaXRoZXIgYW4gU1JQX0VUQyBv ciBFVEMgICAgKi8KLSAgICAgICAgLyogZW52aXJvbm1lbnQgdmFyaWFibGUgaW4gdGhhdCBvcmRl ci4gIElmIHdlIGZpbmQgb25lIHdlICAgICAqLwotICAgICAgICAvKiBhdHRlbXB0IHRvIG9wZW4g dGhlIGZpbGVzIG1hbnVhbGx5LiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIC8q IFdlIHdpbGwgcmV1c2UgdGhlIHN0clRtcFtdIGZvciB0aGUgZmlsZSBuYW1lcy4gKi8KLSAgICAg ICAgcHRyID0gZ2V0ZW52KCJTUlBfRVRDIik7Ci0gICAgICAgIGlmICggIXB0ciApCi0gICAgICAg ICAgICBwdHIgPSBnZXRlbnYoIkVUQyIpOwotI2lmZGVmIE5UCi0gICAgICAgIGlmICggIXB0ciAp IHsKLSAgICAgICAgICAgIERXT1JEIGxlbjsKLSAgICAgICAgICAgIGxlbiA9IEFVVEhUTVBCTDsK LQotICAgICAgICAgICAgbGVuID0gR2V0V2luZG93c0RpcmVjdG9yeShzdHJUbXAsbGVuKTsKLSAg ICAgICAgICAgIGlmICggbGVuID4gMCAmJiBsZW4gPCBBVVRIVE1QQkwpIHsKLSAgICAgICAgICAg ICAgICBpZiAoICFpc1dpbjk1KCkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggbGVuID09 IDEgKQotCQkgICAgICBja3N0cm5jYXQoc3RyVG1wLCJTWVNURU0zMi9EUklWRVJTL0VUQyIsc2l6 ZW9mKHN0clRtcCkpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0JCSAgICAgIGNrc3RybmNh dChzdHJUbXAsIi9TWVNURU0zMi9EUklWRVJTL0VUQyIsc2l6ZW9mKHN0clRtcCkpOwotICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHB0ciA9IHN0clRtcDsKLSAg ICAgICAgfQotI2VuZGlmIC8qIE5UICovCi0gICAgICAgIGlmICggcHRyICkgewotICAgICAgICAg ICAgaW50IGxlbiA9IHN0cmxlbihwdHIpOwotICAgICAgICAgICAgaW50IGk7Ci0JICAgIGlmIChw dHIgIT0gc3RyVG1wKQotCQlzdHJjcHkoc3RyVG1wLHB0cik7Ci0gICAgICAgICAgICBmb3IgKCBp PTA7aTxsZW47aSsrICkgewotICAgICAgICAgICAgICAgIGlmICggc3RyVG1wW2ldID09ICdcXCcg KQotICAgICAgICAgICAgICAgICAgICBzdHJUbXBbaV0gPSAnLyc7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgICAgICBpZiAoIHN0clRtcFtsZW4tMV0gIT0gJy8nICkKLSAgICAgICAgICAgICAgICBj a3N0cm5jYXQoc3RyVG1wLCIvdHBhc3N3ZCIsc2l6ZW9mKHN0clRtcCkpOwotICAgICAgICAgICAg ZWxzZQotICAgICAgICAgICAgICAgIGNrc3RybmNhdChzdHJUbXAsInRwYXNzd2QiLHNpemVvZihz dHJUbXApKTsKLSAgICAgICAgICAgIHRwdyA9IHRfb3BlbnB3YnluYW1lKHN0clRtcCk7Ci0KLSAg ICAgICAgICAgIGNrc3RybmNhdChzdHJUbXAsIi5jb25mIixzaXplb2Yoc3RyVG1wKSk7Ci0gICAg ICAgICAgICB0Y29uZiA9IHRfb3BlbmNvbmZieW5hbWUoc3RyVG1wKTsKLSAgICAgICAgfQotCi0g ICAgICAgIGlmICggdHB3ICYmIHRjb25mICkKLSAgICAgICAgICAgIHRzID0gdF9zZXJ2ZXJvcGVu ZnJvbWZpbGVzKHN6VXNlck5hbWVSZXF1ZXN0ZWQsIHRwdywgdGNvbmYpOwotICAgICAgICBlbHNl Ci0gICAgICAgICAgICB0cyA9IHRfc2VydmVyb3BlbihzelVzZXJOYW1lUmVxdWVzdGVkKTsKLSAg ICAgICAgaWYgKCB0cHcgKSB7Ci0gICAgICAgICAgICB0X2Nsb3NlcHcodHB3KTsKLSAgICAgICAg ICAgIHRwdyA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCB0Y29uZiApIHsKLSAgICAg ICAgICAgIHRfY2xvc2Vjb25mKHRjb25mKTsKLSAgICAgICAgICAgIHRjb25mID0gTlVMTDsKLSAg ICAgICAgfQotI2Vsc2UgLyogQ09NTUVOVCAqLwotICAgICAgICB0cyA9IHRfc2VydmVyb3Blbihz elVzZXJOYW1lUmVxdWVzdGVkKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZW5kaWYgLyogUFJF X1NSUF8xXzRfNCAqLwotCi0gICAgICAgIGlmKCB0cyA9PSBOVUxMICkgewotICAgICAgICAgICAg cHJpbnRmKCJVc2VyICVzIG5vdCBmb3VuZFxyXG4iLCBzelVzZXJOYW1lUmVxdWVzdGVkKTsKLSAg ICAgICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQX1JFSkVDVCwgKHZvaWQgKikgIlBhc3N3b3JkIG5v dCBzZXQiLCAtMSk7Ci0gICAgICAgICAgICByZXR1cm4oQVVUSF9GQUlMVVJFKTsKLSAgICAgICAg fQotCi0JcGJ1ZiA9IChjaGFyICopbWFsbG9jKHRzLT5uLmxlbiArIHRzLT5nLmxlbiArIHRzLT5z LmxlbiArIDcpOwotCXB0ciA9IHBidWY7Ci0KLSAgICAgICAgc3JwX2VuY29kZV9sZW5ndGgocHRy LCB0cy0+bi5sZW4pOwotICAgICAgICBwdHIgKz0gMjsKLSAgICAgICAgbWVtY3B5KHB0ciwgdHMt Pm4uZGF0YSwgdHMtPm4ubGVuKTsgICAgIC8qIHNhZmUgKi8KLSAgICAgICAgcHRyICs9IHRzLT5u LmxlbjsKLQotICAgICAgICBzcnBfZW5jb2RlX2xlbmd0aChwdHIsIHRzLT5nLmxlbik7Ci0gICAg ICAgIHB0ciArPSAyOwotICAgICAgICBtZW1jcHkocHRyLCB0cy0+Zy5kYXRhLCB0cy0+Zy5sZW4p OyAgICAgLyogc2FmZSAqLwotICAgICAgICBwdHIgKz0gdHMtPmcubGVuOwotCi0gICAgICAgIHNy cF9lbmNvZGVfbGVuZ3RoKHB0ciwgdHMtPnMubGVuKTsKLSAgICAgICAgcHRyICs9IDI7Ci0gICAg ICAgIG1lbWNweShwdHIsIHRzLT5zLmRhdGEsIHRzLT5zLmxlbik7ICAgICAvKiBzYWZlICovCi0g ICAgICAgIHB0ciArPSB0cy0+cy5sZW47Ci0KLSAgICAgICAgU2VuZFNSUEF1dGhTQihTUlBfUEFS QU1TLCBwYnVmLCBwdHIgLSBwYnVmKTsKLQlmcmVlKHBidWYpOyBwYnVmID0gTlVMTDsKLQotICAg ICAgICBCID0gdF9zZXJ2ZXJnZW5leHAodHMpOwotICAgICAgICBja3N0cm5jcHkoc3pVc2VyTmFt ZUF1dGhlbnRpY2F0ZWQsc3pVc2VyTmFtZVJlcXVlc3RlZCxVSURCVUZMRU4pOwotICAgICAgICBy ZXR1cm4gQVVUSF9TVUNDRVNTOwotCi0gICAgY2FzZSBTUlBfRVhQOgotICAgICAgICAvKiBDbGll bnQgaXMgc2VuZGluZyBBIHRvIHVzLCBjb21wdXRlIGNoYWxsZW5nZSAmIGV4cGVjdGVkIHJlc3Bv bnNlLiAqLwotICAgICAgICBpZiAodHMgPT0gTlVMTCB8fCBCID09IE5VTEwpIHsKLSAgICAgICAg ICAgIHByaW50ZigiUHJvdG9jb2wgZXJyb3I6IFNSUF9FWFAgdW5leHBlY3RlZFxyXG4iKTsKLSAg ICAgICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQX1JFSkVDVCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgKHZvaWQgKikgIlByb3RvY29sIGVycm9yOiB1bmV4cGVjdGVkIEVYUCIsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgIC0xCi0gICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg ICAgICAgICByZXR1cm4oQVVUSF9GQUlMVVJFKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIFdh aXQgdW50aWwgbm93IHRvIHNlbmQgQiwgc2luY2UgaXQgY29udGFpbnMgdGhlIGtleSB0byAidSIg Ki8KLSAgICAgICAgU2VuZFNSUEF1dGhTQihTUlBfQ0hBTExFTkdFLCBCLT5kYXRhLCBCLT5sZW4p OwotICAgICAgICBCID0gTlVMTDsKLQotI2lmbmRlZiBQUkVfU1JQXzFfNF81Ci0gICAgICAgIC8q Ci0gICAgICAgICAqIFRoZSBvcmlnaW5hbCBTUlAgQVVUSCBpbXBsZW1lbnRhdGlvbiBkaWQgbm90 IHByb3RlY3QgYWdhaW5zdAotICAgICAgICAgKiB0YW1wZXJpbmcgb2YgdGhlIGF1dGgtdHlwZS1w YWlycy4gIFRoZXJlZm9yZSwgd2hlbiB0aGUKLSAgICAgICAgICogQVVUSF9FTkNSWVBUX01BU0sg Yml0cyBhcmUgemVybywgbm8gZXh0cmEgZGF0YSBpcyBpbnNlcnRlZAotICAgICAgICAgKiBpbnRv IHRoZSBTUlAgaGFzaCBjb21wdXRhdGlvbi4gIFdoZW4gQVVUSF9FTkNSWVBUX1NUQVJUX1RMUwot ICAgICAgICAgKiBpcyBzZXQgd2UgYWxzbyBpbnNlcnQgdGhlIFNTTC9UTFMgY2xpZW50IGFuZCBz ZXJ2ZXIgZmluaXNoZWQKLSAgICAgICAgICogbWVzc2FnZXMgdG8gZW5zdXJlIHRoYXQgdGhlcmUg aXMgbm8gbWFuIGluIHRoZSBtaWRkbGUgYXR0YWNrCi0gICAgICAgICAqIHVuZGVyd2F5IG9uIHRo ZSBTU0wvVExTIGNvbm5lY3Rpb24uCi0gICAgICAgICAqLwotICAgICAgICBpZiAoIChob3cgJiBB VVRIX0VOQ1JZUFRfTUFTSykgIT0gQVVUSF9FTkNSWVBUX09GRiApIHsKLSAgICAgICAgICAgIHR5 cGVfY2hlY2tbMF0gPSBBVVRIVFlQRV9TUlA7Ci0gICAgICAgICAgICB0eXBlX2NoZWNrWzFdID0g aG93OwotI2lmZGVmIENLX1NTTAotICAgICAgICAgICAgaWYgKChob3cgJiBBVVRIX0VOQ1JZUFRf TUFTSykgPT0gQVVUSF9FTkNSWVBUX1NUQVJUX1RMUykgewotICAgICAgICAgICAgICAgIHNzbF9n ZXRfY2xpZW50X2ZpbmlzaGVkKCZ0eXBlX2NoZWNrWzJdLDEyKTsKLSAgICAgICAgICAgICAgICBz c2xfZ2V0X3NlcnZlcl9maW5pc2hlZCgmdHlwZV9jaGVja1sxNF0sMTIpOwotICAgICAgICAgICAg fQotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICAgICAgdF9zZXJ2ZXJhZGRleGRhdGEodHMs dHlwZV9jaGVjaywKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAgICAgICAgICgoaG93ICYgQVVU SF9FTkNSWVBUX01BU0spID09IEFVVEhfRU5DUllQVF9TVEFSVF9UTFMpID8gMjYgOgotI2VuZGlm IC8qIENLX1NTTCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIpOwotICAgICAg ICB9Ci0jZW5kaWYgLyogUFJFX1NSUF8xXzRfNSAqLwotCi0gICAgICAgIEEuZGF0YSA9IGRhdGE7 Ci0gICAgICAgIEEubGVuID0gY250OwotICAgICAgICBwdHIgPSB0X3NlcnZlcmdldGtleSh0cywg JkEpOwotCi0gICAgICAgIGlmKHB0ciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoMSkKLSAg ICAgICAgICAgICAgcHJpbnRmKCJTZWN1cml0eSBhbGVydDogVHJpdmlhbCBzZXNzaW9uIGtleSBh dHRlbXB0ZWRcclxuIik7Ci0gICAgICAgICAgICBTZW5kU1JQQXV0aFNCKFNSUF9SRUpFQ1QsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopICJUcml2aWFsIHNlc3Npb24ga2V5IGRl dGVjdGVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLTEKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKLSAgICAgICAgICAgIHJldHVybihBVVRIX0ZBSUxVUkUpOwotICAgICAgICB9 Ci0gICAgICAgIHNycF93YWl0cmVzcCA9IDE7Ci0gICAgICAgIHJldHVybiBBVVRIX1NVQ0NFU1M7 Ci0KLSAgICBjYXNlIFNSUF9SRVNQT05TRToKLSAgICAgICAgLyogR290IHRoZSByZXNwb25zZTsg c2VlIGlmIGl0J3MgY29ycmVjdCAqLwotICAgICAgICBpZiAoIXNycF93YWl0cmVzcCB8fAotICAg ICAgICAgICAgIHRzID09IE5VTEwKLSAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgIGlmICgx KQotICAgICAgICAgICAgICBwcmludGYoIlByb3RvY29sIGVycm9yOiBTUlBfUkVTUE9OU0UgdW5l eHBlY3RlZFxyXG4iKTsKLSAgICAgICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQX1JFSkVDVCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgIlByb3RvY29sIGVycm9yOiB1bmV4cGVj dGVkIFJFU1BPTlNFIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLTEKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIHJldHVybihBVVRIX0ZBSUxVUkUpOwotICAg ICAgICB9Ci0gICAgICAgIHNycF93YWl0cmVzcCA9IDA7ICAgICAgIC8qIHdlIGdvdCBhIHJlc3Bv bnNlICovCi0KLSAgICAgICAgaWYgKGNudCA8IFJFU1BPTlNFX0xFTikgewotICAgICAgICAgICAg aWYgKDEpCi0gICAgICAgICAgICAgIHByaW50ZigiUHJvdG9jb2wgZXJyb3I6IG1hbGZvcm1lZCBy ZXNwb25zZVxyXG4iKTsKLSAgICAgICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQX1JFSkVDVCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgIlByb3RvY29sIGVycm9yOiBtYWxmb3Jt ZWQgcmVzcG9uc2UiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAtMQotICAgICAgICAgICAg ICAgICAgICAgICAgICApOwotICAgICAgICAgICAgcmV0dXJuKEFVVEhfRkFJTFVSRSk7Ci0gICAg ICAgIH0KLQotICAgICAgICBpZiAodF9zZXJ2ZXJ2ZXJpZnkodHMsIGRhdGEpID09IDApIHsKLSAg ICAgICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQX0FDQ0VQVCwgdF9zZXJ2ZXJyZXNwb25zZSh0cyks IFJFU1BPTlNFX0xFTik7Ci0gICAgICAgICAgICBhY2NlcHRfY29tcGxldGUgPSAxOwotI2lmZGVm IENLX0VOQ1JZUFRJT04KLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAgIGlmICghKHNzbF9hY3Rp dmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpKQotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAg ICAgICAgewotICAgICAgICAgICAgICAgIGNraGV4ZHVtcCgiU1JQX1JFU1BPTlNFIHRzIix0cyxz aXplb2YodHMpKTsKLSAgICAgICAgICAgICAgICBja2hleGR1bXAoIlNSUF9SRVNQT05TRSBzZXNz aW9uX2tleSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdHMtPnNlc3Npb25fa2V5LAotICAg ICAgICAgICAgICAgICAgICAgICAgIFNFU1NJT05fS0VZX0xFTgotICAgICAgICAgICAgICAgICAg ICAgICAgICk7Ci0gICAgICAgICAgICAgICAgc2tleS50eXBlID0gU0tfR0VORVJJQzsKLSAgICAg ICAgICAgICAgICBza2V5Lmxlbmd0aCA9IFNFU1NJT05fS0VZX0xFTjsKLSAgICAgICAgICAgICAg ICBza2V5LmRhdGEgPSB0cy0+c2Vzc2lvbl9rZXk7Ci0gICAgICAgICAgICAgICAgZW5jcnlwdF9z ZXNzaW9uX2tleSgmc2tleSwgQVVUSF9TRVJWRVJfVE9fQ0xJRU5UKTsKLSAgICAgICAgICAgIH0K LSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFV VEhfVkFMSUQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgU2VuZFNS UEF1dGhTQihTUlBfUkVKRUNULCAodm9pZCAqKSAiTG9naW4gaW5jb3JyZWN0IiwgLTEpOwotICAg ICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Ci0gICAgICAgICAgICByZXR1cm4o QVVUSF9GQUlMVVJFKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gQVVUSF9TVUNDRVNTOwot Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcHJpbnRmKCJVbmtub3duIFNSUCBvcHRpb24gJWRcclxu IiwgZGF0YVstMV0pOwotICAgICAgICBTZW5kU1JQQXV0aFNCKFNSUF9SRUpFQ1QsICh2b2lkICop ICJVbmtub3duIG9wdGlvbiByZWNlaXZlZCIsIC0xKTsKLSAgICAgICAgcmV0dXJuKEFVVEhfRkFJ TFVSRSk7Ci0gICAgfQotfQotI2Vsc2UgLyogUFJFX1NSUF8xXzdfMyAqLwotc3RhdGljIGludAot I2lmZGVmIENLX0FOU0lDCi1uZXdfc3JwX3JlcGx5KGludCBob3csIHVuc2lnbmVkIGNoYXIgKmRh dGEsIGludCBjbnQpCi0jZWxzZQotbmV3X3NycF9yZXBseShob3csZGF0YSxjbnQpIGludCBob3c7 IHVuc2lnbmVkIGNoYXIgKmRhdGE7IGludCBjbnQ7Ci0jZW5kaWYKLXsKLSAgICBkYXRhICs9IDQ7 ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byBzdGF0dXMgYnl0ZSAqLwotICAg IGNudCAgLT0gNDsKLQotICAgIGlmKGNudC0tIDwgMSkgeyAgICAgICAgICAgICAgICAgICAgIC8q IE1hdGNoZXMgd2l0aCBkYXRhKysgKi8KLSAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVD VCk7Ci0gICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7Ci0gICAgfQotCi0gICAgc3dpdGNoKCpk YXRhKyspIHsKLSAgICBjYXNlIFNSUF9QQVJBTVM6IHsKLSAgICAgICAgc3RydWN0IHRfbnVtIG47 Ci0gICAgICAgIHN0cnVjdCB0X251bSBnOwotICAgICAgICBzdHJ1Y3QgdF9udW0gczsKLSAgICAg ICAgY3N0ciAqIEE7Ci0KLSAgICAgICAgaWYoIXN6VXNlck5hbWUpIHsKLSAgICAgICAgICAgIHBy aW50ZigiTm8gdXNlcm5hbWUgYXZhaWxhYmxlXHJcbiIpOwotICAgICAgICAgICAgcmV0dXJuKGF1 dGhfcmVzZW5kKEFVVEhUWVBFX1NSUCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbi5sZW4gPSBz cnBfZGVjb2RlX2xlbmd0aChkYXRhKTsKLSAgICAgICAgZGF0YSArPSAyOwotICAgICAgICBjbnQg LT0gMjsKLSAgICAgICAgaWYobi5sZW4gPiBjbnQpIHsKLSAgICAgICAgICAgIHByaW50ZigibiB0 b28gbG9uZ1xyXG4iKTsKLSAgICAgICAgICAgIHJldHVybihhdXRoX3Jlc2VuZChBVVRIVFlQRV9T UlApKTsKLSAgICAgICAgfQotICAgICAgICBuLmRhdGEgPSBkYXRhOwotICAgICAgICBkYXRhICs9 IG4ubGVuOwotICAgICAgICBjbnQgLT0gbi5sZW47Ci0KLSAgICAgICAgZy5sZW4gPSBzcnBfZGVj b2RlX2xlbmd0aChkYXRhKTsKLSAgICAgICAgZGF0YSArPSAyOwotICAgICAgICBjbnQgLT0gMjsK LSAgICAgICAgaWYoZy5sZW4gPiBjbnQpIHsKLSAgICAgICAgICAgIHByaW50ZigiZyB0b28gbG9u Z1xyXG4iKTsKLSAgICAgICAgICAgIHJldHVybihhdXRoX3Jlc2VuZChBVVRIVFlQRV9TUlApKTsK LSAgICAgICAgfQotICAgICAgICBnLmRhdGEgPSBkYXRhOwotICAgICAgICBkYXRhICs9IGcubGVu OwotICAgICAgICBjbnQgLT0gZy5sZW47Ci0KLSAgICAgICAgcy5sZW4gPSBzcnBfZGVjb2RlX2xl bmd0aChkYXRhKTsKLSAgICAgICAgZGF0YSArPSAyOwotICAgICAgICBjbnQgLT0gMjsKLSAgICAg ICAgaWYocy5sZW4gIT0gY250KSB7Ci0gICAgICAgICAgICBwcmludGYoImludmFsaWQgc2FsdFxy XG4iKTsKLSAgICAgICAgICAgIHJldHVybihhdXRoX3Jlc2VuZChBVVRIVFlQRV9TUlApKTsKLSAg ICAgICAgfQotICAgICAgICBzLmRhdGEgPSBkYXRhOwotICAgICAgICBkYXRhICs9IHMubGVuOwot ICAgICAgICBjbnQgLT0gcy5sZW47Ci0KLSAgICAgICAgLyogSWYgdGhlIHBhcmFtZXRlcnMgcHJv dmlkZWQgYnkgdGhlIHNlcnZlciBjYW5ub3QgYmUKLSAgICAgICAgICogdmFsaWRhdGVkIHRoZSBm b2xsb3dpbmcgZnVuY3Rpb24gd2lsbCBmYWlsLgotICAgICAgICAgKi8KLSAgICAgICAgY19zcnAg PSBTUlBfbmV3KFNSUF9SRkMyOTQ1X2NsaWVudF9tZXRob2QoKSk7Ci0gICAgICAgIGlmIChjX3Ny cCA9PSBOVUxMIHx8Ci0JICAgIFNSUF9zZXRfdXNlcm5hbWUoY19zcnAsIHN6VXNlck5hbWUpICE9 IFNSUF9TVUNDRVNTIHx8Ci0JICAgIFNSUF9zZXRfcGFyYW1zKGNfc3JwLG4uZGF0YSxuLmxlbixn LmRhdGEsZy5sZW4scy5kYXRhLHMubGVuKSAhPQotCSAgICBTUlBfU1VDQ0VTUykgewotICAgICAg ICAgICAgcHJpbnRmKCJTUlAgUGFyYW1ldGVyIGluaXRpYWxpemF0aW9uIGVycm9yXHJcbiIpOwot ICAgICAgICAgICAgcmV0dXJuKGF1dGhfcmVzZW5kKEFVVEhUWVBFX1NSUCkpOwotICAgICAgICB9 Ci0KLSAgICAgICAgQSA9IGNzdHJfbmV3KCk7Ci0gICAgICAgIGlmKFNSUF9nZW5fcHViKGNfc3Jw LCAmQSkgIT0gU1JQX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIHByaW50ZigiU1JQIEVycm9yIGdl bmVyYXRpbmcga2V5IGV4Y2hhbmdlXHJcbiIpOwotICAgICAgICAgICAgcmV0dXJuKGF1dGhfcmVz ZW5kKEFVVEhUWVBFX1NSUCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgU2VuZFNSUEF1dGhTQihT UlBfRVhQLCBBLT5kYXRhLCBBLT5sZW5ndGgpOwotICAgICAgICBjc3RyX2ZyZWUoQSk7Ci0KLSAg ICAgICAgaWYgKCBwd2J1ZlswXSAmJiBwd2ZsZyApIHsKLSAgICAgICAgICAgIHByaW50ZigiU1JQ IHVzaW5nICVkLWJpdCBtb2R1bHVzIGZvciAnJXMnXHJcbiIsCi0gICAgICAgICAgICAgICAgICAg OCAqIG4ubGVuLAotICAgICAgICAgICAgICAgICAgIHN6VXNlck5hbWUKLSAgICAgICAgICAgICAg ICAgICApOwotICAgICAgICAgICAgY2tzdHJuY3B5KHNycF9wYXNzd2QscHdidWYsc2l6ZW9mKHNy cF9wYXNzd2QpKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgIGlmICggcHdjcnlwdCApCi0gICAg ICAgICAgICAgICAgY2tfZW5jcnlwdCgoY2hhciAqKXNycF9wYXNzd2QpOwotI2VuZGlmIC8qIE9T MiAqLwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZXh0ZXJuIGNoYXIgKiBzcnBwd3By b21wdDsKLSAgICAgICAgICAgIGNoYXIgcHJlZmFjZVsxMjhdOwotICAgICAgICAgICAgaW50IG9r OwotCi0gICAgICAgICAgICBpZiAoc3JwcHdwcm9tcHQgJiYgc3JwcHdwcm9tcHRbMF0gJiYKLQkJ KHN0cmxlbihzcnBwd3Byb21wdCkgKyBzdHJsZW4oc3pVc2VyTmFtZSkgLSAyKSA8Ci0JCXNpemVv ZihwcmVmYWNlKSkgewotICAgICAgICAgICAgICAgIHNwcmludGYocHJlZmFjZSxzcnBwd3Byb21w dCxzelVzZXJOYW1lKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY2tt YWt4bXNnKCBwcmVmYWNlLHNpemVvZihwcmVmYWNlKSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgIlNSUCB1c2luZyAiLGNraXRvYSg4Km4ubGVuKSwiLWJpdCBtb2R1bHVzIGZvciAnIiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgc3pVc2VyTmFtZSwgIiciLCBOVUxMLCBOVUxMLCBOVUxM LCBOVUxMLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKTsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIG9rID0gdXFfdHh0KHByZWZhY2UsIlBhc3N3b3JkOiAi LDIsTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNycF9wYXNzd2Qsc2l6ZW9mKHNycF9w YXNzd2QpLTEsTlVMTCwKLQkJCURFRkFVTFRfVVFfVElNRU9VVCk7Ci0gICAgICAgICAgICBpZiAo ICFvayApCi0gICAgICAgICAgICAgICAgc3JwX3Bhc3N3ZFswXSA9ICdcMCc7Ci0gICAgICAgIH0K LQotICAgICAgICBpZihTUlBfc2V0X2F1dGhfcGFzc3dvcmQoY19zcnAsIHNycF9wYXNzd2QpICE9 IFNSUF9TVUNDRVNTKSB7Ci0gICAgICAgICAgICBtZW1zZXQoc3JwX3Bhc3N3ZCwgMCwgc2l6ZW9m KHNycF9wYXNzd2QpKTsKLSAgICAgICAgICAgIHByaW50ZigiU1JQIEVycm9yIHNldHRpbmcgY2xp ZW50IHBhc3N3b3JkXHJcbiIpOwotICAgICAgICAgICAgcmV0dXJuKGF1dGhfcmVzZW5kKEFVVEhU WVBFX1NSUCkpOwotICAgICAgICB9Ci0gICAgICAgIG1lbXNldChzcnBfcGFzc3dkLCAwLCBzaXpl b2Yoc3JwX3Bhc3N3ZCkpOwotICAgICAgICByZXR1cm4gQVVUSF9TVUNDRVNTOwotICAgIH0KLSAg ICBjYXNlIFNSUF9DSEFMTEVOR0U6IHsKLSAgICAgICAgY2hhciB0eXBlX2NoZWNrWzI2XTsKLSAg ICAgICAgY3N0ciAqIHJlc3AgPSBOVUxMOwotCi0gICAgICAgIGlmKGNfc3JwID09IE5VTEwpIHsK LSAgICAgICAgICAgIHByaW50ZigiU1JQIHByb3RvY29sIGVycm9yXHJcbiIpOwotICAgICAgICAg ICAgcmV0dXJuKGF1dGhfcmVzZW5kKEFVVEhUWVBFX1NSUCkpOwotICAgICAgICB9Ci0KLSAgICAg ICAgLyoKLSAgICAgICAgICogVGhlIG9yaWdpbmFsIFNSUCBBVVRIIGltcGxlbWVudGF0aW9uIGRp ZCBub3QgcHJvdGVjdCBhZ2FpbnN0Ci0gICAgICAgICAqIHRhbXBlcmluZyBvZiB0aGUgYXV0aC10 eXBlLXBhaXJzLiAgVGhlcmVmb3JlLCB3aGVuIHRoZQotICAgICAgICAgKiBBVVRIX0VOQ1JZUFRf TUFTSyBiaXRzIGFyZSB6ZXJvLCBubyBleHRyYSBkYXRhIGlzIGluc2VydGVkCi0gICAgICAgICAq IGludG8gdGhlIFNSUCBoYXNoIGNvbXB1dGF0aW9uLiAgV2hlbiBBVVRIX0VOQ1JZUFRfU1RBUlRf VExTCi0gICAgICAgICAqIGlzIHNldCB3ZSBhbHNvIGluc2VydCB0aGUgU1NML1RMUyBjbGllbnQg YW5kIHNlcnZlciBmaW5pc2hlZAotICAgICAgICAgKiBtZXNzYWdlcyB0byBlbnN1cmUgdGhhdCB0 aGVyZSBpcyBubyBtYW4gaW4gdGhlIG1pZGRsZSBhdHRhY2sKLSAgICAgICAgICogdW5kZXJ3YXkg b24gdGhlIFNTTC9UTFMgY29ubmVjdGlvbi4KLSAgICAgICAgICovCi0gICAgICAgIGlmICgoaG93 ICYgQVVUSF9FTkNSWVBUX01BU0spICE9IEFVVEhfRU5DUllQVF9PRkYpIHsKLSAgICAgICAgICAg IHR5cGVfY2hlY2tbMF0gPSBBVVRIVFlQRV9TUlA7Ci0gICAgICAgICAgICB0eXBlX2NoZWNrWzFd ID0gaG93OwotI2lmZGVmIENLX1NTTAotICAgICAgICAgICAgaWYgKChob3cgJiBBVVRIX0VOQ1JZ UFRfTUFTSykgPT0gQVVUSF9FTkNSWVBUX1NUQVJUX1RMUykgewotICAgICAgICAgICAgICAgIHNz bF9nZXRfY2xpZW50X2ZpbmlzaGVkKCZ0eXBlX2NoZWNrWzJdLDEyKTsKLSAgICAgICAgICAgICAg ICBzc2xfZ2V0X3NlcnZlcl9maW5pc2hlZCgmdHlwZV9jaGVja1sxNF0sMTIpOwotICAgICAgICAg ICAgICAgIFNSUF9hZGRfZXhfZGF0YShjX3NycCwgdHlwZV9jaGVjaywgMjYpOwotICAgICAgICAg ICAgfSBlbHNlCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgICAgICAgICAgU1JQX2FkZF9l eF9kYXRhKGNfc3JwLCB0eXBlX2NoZWNrLCAyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmKFNS UF9jb21wdXRlX2tleShjX3NycCwgJmNfa2V5LCBkYXRhLCBjbnQpICE9IFNSUF9TVUNDRVNTKSB7 Ci0gICAgICAgICAgICBwcmludGYoIlNSUCBFUlJPUjogdW5hYmxlIHRvIGNvbXB1dGUgY2xpZW50 IGtleVxyXG4iKTsKLSAgICAgICAgICAgIHJldHVybihhdXRoX3Jlc2VuZChBVVRIVFlQRV9TUlAp KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJlc3AgPSBjc3RyX25ldygpOwotICAgICAgICBpZihT UlBfcmVzcG9uZChjX3NycCwgJnJlc3ApICE9IFNSUF9TVUNDRVNTKSB7Ci0gICAgICAgICAgICBw cmludGYoIlNSUCBFUlJPUjogdW5hYmxlIHRvIGNvbXB1dGUgY2xpZW50IHJlc3BvbnNlXHJcbiIp OwotICAgICAgICAgICAgcmV0dXJuKGF1dGhfcmVzZW5kKEFVVEhUWVBFX1NSUCkpOwotICAgICAg ICB9Ci0gICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQX1JFU1BPTlNFLCByZXNwLT5kYXRhLCByZXNw LT5sZW5ndGgpOwotICAgICAgICBjc3RyX2ZyZWUocmVzcCk7Ci0gICAgICAgIHNycF93YWl0cmVz cCA9IDE7Ci0gICAgICAgIHJldHVybiBBVVRIX1NVQ0NFU1M7Ci0gICAgfQotICAgIGNhc2UgU1JQ X0FDQ0VQVDogewotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgU2Vzc2lvbl9LZXkgc2tl eTsKLSNlbmRpZiAvKiBFTkNSWVBUSU9OICovCi0KLSAgICAgICAgaWYoY250IDwgUkVTUE9OU0Vf TEVOIHx8ICFzcnBfd2FpdHJlc3AgfHwgY19zcnAgPT0gTlVMTCkgewotICAgICAgICAgICAgcHJp bnRmKCJTUlAgUHJvdG9jb2wgZXJyb3JcclxuIik7Ci0gICAgICAgICAgICByZXR1cm4oYXV0aF9y ZXNlbmQoQVVUSFRZUEVfU1JQKSk7Ci0gICAgICAgIH0KLSAgICAgICAgc3JwX3dhaXRyZXNwID0g MDsKLQotICAgICAgICBpZihTUlBfdmVyaWZ5KGNfc3JwLCBkYXRhLCBjbnQpID09IFNSUF9TVUND RVNTKSB7Ci0gICAgICAgICAgICBwcmludGYoIlNSUCBhY2NlcHRzIHlvdSBhcyAlc1xyXG4iLHN6 VXNlck5hbWUpOwotCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAgICAgICBpZigoc3NsX2FjdGl2ZV9m bGFnIHx8IHRsc19hY3RpdmVfZmxhZykgJiYKLSAgICAgICAgICAgICAgICAoaG93ICYgQVVUSF9F TkNSWVBUX01BU0spID09IEFVVEhfRU5DUllQVF9TVEFSVF9UTFMpIHsKLSAgICAgICAgICAgICAg ICBwcmludGYoIlRMUyBzZXNzaW9uIHBhcmFtZXRlcnMgdmVyaWZpZWQgYnkgU1JQXHJcbiIpOwot ICAgICAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyogQ0tfU1NMICovCi0jaWZkZWYgQ0tfRU5DUllQ VElPTgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNrZXkudHlwZSA9IFNLX0dFTkVS SUM7Ci0gICAgICAgICAgICAgICAgc2tleS5sZW5ndGggPSBjX2tleS0+bGVuZ3RoOwotICAgICAg ICAgICAgICAgIHNrZXkuZGF0YSA9IGNfa2V5LT5kYXRhOwotICAgICAgICAgICAgICAgIGVuY3J5 cHRfc2Vzc2lvbl9rZXkoJnNrZXksIEFVVEhfQ0xJRU5UX1RPX1NFUlZFUik7Ci0gICAgICAgICAg ICAgICAgY3N0cl9jbGVhcl9mcmVlKGNfa2V5KTsKLSAgICAgICAgICAgICAgICBjX2tleSA9IE5V TEw7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotICAgICAgICAg ICAgYWNjZXB0X2NvbXBsZXRlID0gMTsKLSAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9W QUxJRCk7Ci0gICAgICAgICAgICBTUlBfZnJlZShjX3NycCk7Ci0gICAgICAgICAgICBjX3NycCA9 IE5VTEw7Ci0gICAgICAgICAgICByZXR1cm4gQVVUSF9TVUNDRVNTOwotICAgICAgICB9Ci0gICAg ICAgIGVsc2UgewotICAgICAgICAgICAgcHJpbnRmKCJbIEVycm9yOiBTUlAgc2VydmVyIGF1dGhl bnRpY2F0aW9uIGZhaWxlZCBdXHJcbiIpOwotICAgICAgICAgICAgcmV0dXJuKGF1dGhfcmVzZW5k KEFVVEhUWVBFX1NSUCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhc2UgU1JQX1JFSkVDVDog ewotICAgICAgICBjaGFyICogc3RyPU5VTEw7Ci0KLSAgICAgICAgY2ttYWttc2coc3RyVG1wLHNp emVvZihzdHJUbXApLAotICAgICAgICAgICAgICAgICAgIlNSUCByZWZ1c2VzIGF1dGhlbnRpY2F0 aW9uIGZvciAnIixzelVzZXJOYW1lLAotICAgICAgICAgICAgICAgICAgIidcclxuIixOVUxMKTsK LSAgICAgICAgaWYgKGNudCA+IDApIHsKLSAgICAgICAgICAgIGludCBsZW4gPSBzdHJsZW4oc3Ry VG1wKTsKLSAgICAgICAgICAgIGlmICggbGVuICsgY250IDwgc2l6ZW9mKHN0clRtcCkgKSB7Ci0g ICAgICAgICAgICAgICAgc3RyID0gc3RyVG1wICsgc3RybGVuKHN0clRtcCk7Ci0gICAgICAgICAg ICAgICAgbWVtY3B5KHN0cixkYXRhLGNudCk7Ci0gICAgICAgICAgICAgICAgc3RyW2NudF0gPSAw OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHByaW50ZigiU1JQIGF1dGhlbnRp Y2F0aW9uIGZhaWxlZCFcclxuJXNcclxuIixzdHJUbXApOwotICAgICAgICBhdXRoX2ZpbmlzaGVk KEFVVEhfUkVKRUNUKTsKLSAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKLSAgICB9Ci0gICAg ZGVmYXVsdDoKLSAgICAgICAgcHJpbnRmKCJVbmtub3duIFNSUCBvcHRpb24gJWRcclxuIiwgZGF0 YVstMV0pOwotICAgICAgICByZXR1cm4oYXV0aF9yZXNlbmQoQVVUSFRZUEVfU1JQKSk7Ci0gICAg fQotICAgIC8qIE5FVkVSIFJFQUNIRUQgKi8KLX0KLQotc3RhdGljIGludAotI2lmZGVmIENLX0FO U0lDCi1uZXdfc3JwX2lzKGludCBob3csIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBjbnQpCi0j ZWxzZQotbmV3X3NycF9pcyhob3csZGF0YSxjbnQpIGludCBob3c7IHVuc2lnbmVkIGNoYXIgKmRh dGE7IGludCBjbnQ7Ci0jZW5kaWYKLXsKLSAgICBjaGFyICogcGJ1ZiA9IE5VTEw7Ci0gICAgY2hh ciAqIHB0cjsKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgU2Vzc2lvbl9LZXkgc2tleTsKLSNl bmRpZgotICAgIHN0YXRpYyBjc3RyICogQiA9IE5VTEw7ICAgICAgICAgICAgIC8qIEhvbGRlciBm b3IgQiAqLwotICAgIHN0cnVjdCB0X3Bhc3N3ZCAqIHBhc3M7Ci0gICAgY3N0ciAqIHJlc3A7Ci0g ICAgY2hhciB0eXBlX2NoZWNrWzI2XTsKLQotICAgIGlmICgoY250IC09IDQpIDwgMSkgewotICAg ICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICAgICAgcmV0dXJuIEFVVEhfRkFJ TFVSRTsKLSAgICB9Ci0KLSAgICBkYXRhICs9IDQ7Ci0gICAgY250ICAtPSAxOwotICAgIHN3aXRj aCgqZGF0YSsrKSB7Ci0gICAgY2FzZSBTUlBfQVVUSDoKLSAgICAgICAgLyogU2VuZCBwYXJhbWV0 ZXJzIGJhY2sgdG8gY2xpZW50ICovCi0gICAgICAgIGlmKHNfc3JwICE9IE5VTEwpIHsKLSAgICAg ICAgICAgIFNSUF9mcmVlKHNfc3JwKTsKLSAgICAgICAgICAgIHNfc3JwID0gTlVMTDsKLSAgICAg ICAgfQotICAgICAgICBpZiAoQiAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBjc3RyX2ZyZWUoQik7 Ci0gICAgICAgICAgICBCID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBpZighc3pVc2VyTmFt ZVJlcXVlc3RlZFswXSkgewotICAgICAgICAgICAgaWYgKDEpCi0gICAgICAgICAgICAgICAgcHJp bnRmKCJObyB1c2VybmFtZSBhdmFpbGFibGVcclxuIik7Ci0gICAgICAgICAgICBTZW5kU1JQQXV0 aFNCKFNSUF9SRUpFQ1QsICh2b2lkICopICJObyB1c2VybmFtZSBzdXBwbGllZCIsIC0xKTsKLSAg ICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAgICAgICAgICAgcmV0dXJu KEFVVEhfRkFJTFVSRSk7Ci0gICAgICAgIH0KLSNpZmRlZiBJS1NECi0jaWZkZWYgQ0tfTE9HSU4K LSAgICAgICAgaWYgKGluc2VydmVyICYmIGNreGFub24gJiYKLSAgICAgICAgICAgICAhc3RyY21w KHN6VXNlck5hbWVSZXF1ZXN0ZWQsImFub255bW91cyIpKSB7Ci0gICAgICAgICAgICBTZW5kU1JQ QXV0aFNCKFNSUF9SRUpFQ1QsICh2b2lkICopCi0gICAgICAgICAgICAiYW5vbnltb3VzIGxvZ2lu IGNhbm5vdCBiZSBwZXJmb3JtZWQgd2l0aCBTZWN1cmUgUmVtb3RlIFBhc3N3b3JkIiwKLSAgICAg ICAgICAgIC0xKTsKLSAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwotICAg ICAgICAgICAgcmV0dXJuKEFVVEhfRkFJTFVSRSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS19M T0dJTiAqLwotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgICAgc19zcnAgPSBTUlBfbmV3KFNSUF9S RkMyOTQ1X3NlcnZlcl9tZXRob2QoKSk7Ci0gICAgICAgIGlmKHNfc3JwID09IE5VTEwpIHsKLSAg ICAgICAgICAgIHByaW50ZigiRXJyb3IgaW5pdGlhbGl6aW5nIFNSUCBzZXJ2ZXJcclxuIik7Ci0g ICAgICAgICAgICBTZW5kU1JQQXV0aFNCKFNSUF9SRUpFQ1QsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICh2b2lkICopICJTUlAgc2VydmVyIGluaXQgZmFpbGVkIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgLTEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAg IHJldHVybihBVVRIX0ZBSUxVUkUpOwotICAgICAgICB9Ci0gICAgICAgIHBhc3MgPSBnZXR0cG5h bShzelVzZXJOYW1lUmVxdWVzdGVkKTsKLSAgICAgICAgaWYocGFzcyA9PSBOVUxMKSB7Ci0gICAg ICAgICAgICBwcmludGYoIlVzZXIgJXMgbm90IGZvdW5kXHJcbiIsIHN6VXNlck5hbWVSZXF1ZXN0 ZWQpOwotICAgICAgICAgICAgU2VuZFNSUEF1dGhTQihTUlBfUkVKRUNULCAodm9pZCAqKSAiUGFz c3dvcmQgbm90IHNldCIsIC0xKTsKLSAgICAgICAgICAgIHJldHVybihBVVRIX0ZBSUxVUkUpOwot ICAgICAgICB9Ci0gICAgICAgIGlmKFNSUF9zZXRfdXNlcm5hbWUoc19zcnAsIHN6VXNlck5hbWVS ZXF1ZXN0ZWQpICE9IFNSUF9TVUNDRVNTIHx8Ci0JICAgU1JQX3NldF9wYXJhbXMoc19zcnAsIHBh c3MtPnRjLm1vZHVsdXMuZGF0YSwKLQkJCSAgcGFzcy0+dGMubW9kdWx1cy5sZW4sCi0JCQkgIHBh c3MtPnRjLmdlbmVyYXRvci5kYXRhLAotCQkJICBwYXNzLT50Yy5nZW5lcmF0b3IubGVuLAotCQkJ ICBwYXNzLT50cC5zYWx0LmRhdGEsCi0JCQkgIHBhc3MtPnRwLnNhbHQubGVuKSAhPSBTUlBfU1VD Q0VTUyB8fAotCSAgIFNSUF9zZXRfYXV0aGVudGljYXRvcihzX3NycCwKLQkJCQkgcGFzcy0+dHAu cGFzc3dvcmQuZGF0YSwKLQkJCQkgcGFzcy0+dHAucGFzc3dvcmQubGVuKSAhPSBTUlBfU1VDQ0VT UykgewotICAgICAgICAgICAgcHJpbnRmKCJFcnJvciBpbml0aWFsaXppbmcgU1JQIHBhcmFtZXRl cnNcclxuIik7Ci0gICAgICAgICAgICBTZW5kU1JQQXV0aFNCKFNSUF9SRUpFQ1QsKHZvaWQgKiki U1JQIHBhcmFtZXRlciBpbml0IGZhaWxlZCIsIC0xKTsKLSAgICAgICAgICAgIHJldHVybihBVVRI X0ZBSUxVUkUpOwotICAgICAgICB9Ci0KLQlwYnVmID0gKGNoYXIgKiltYWxsb2MocGFzcy0+dGMu bW9kdWx1cy5sZW4gKyBwYXNzLT50Yy5nZW5lcmF0b3IubGVuICsKLQkJCSAgICAgICBwYXNzLT50 cC5zYWx0LmxlbiArIDcpOwotICAgICAgICBwdHIgPSBwYnVmOwotCi0gICAgICAgIHNycF9lbmNv ZGVfbGVuZ3RoKHB0ciwgcGFzcy0+dGMubW9kdWx1cy5sZW4pOwotICAgICAgICBwdHIgKz0gMjsK LSAgICAgICAgbWVtY3B5KHB0ciwgcGFzcy0+dGMubW9kdWx1cy5kYXRhLCBwYXNzLT50Yy5tb2R1 bHVzLmxlbik7Ci0gICAgICAgIHB0ciArPSBwYXNzLT50Yy5tb2R1bHVzLmxlbjsKLQotICAgICAg ICBzcnBfZW5jb2RlX2xlbmd0aChwdHIsIHBhc3MtPnRjLmdlbmVyYXRvci5sZW4pOwotICAgICAg ICBwdHIgKz0gMjsKLSAgICAgICAgbWVtY3B5KHB0ciwgcGFzcy0+dGMuZ2VuZXJhdG9yLmRhdGEs IHBhc3MtPnRjLmdlbmVyYXRvci5sZW4pOwotICAgICAgICBwdHIgKz0gcGFzcy0+dGMuZ2VuZXJh dG9yLmxlbjsKLQotICAgICAgICBzcnBfZW5jb2RlX2xlbmd0aChwdHIsIHBhc3MtPnRwLnNhbHQu bGVuKTsKLSAgICAgICAgcHRyICs9IDI7Ci0gICAgICAgIG1lbWNweShwdHIsIHBhc3MtPnRwLnNh bHQuZGF0YSwgcGFzcy0+dHAuc2FsdC5sZW4pOwotICAgICAgICBwdHIgKz0gcGFzcy0+dHAuc2Fs dC5sZW47Ci0KLSAgICAgICAgU2VuZFNSUEF1dGhTQihTUlBfUEFSQU1TLCBwYnVmLCBwdHIgLSBw YnVmKTsKLQlmcmVlKHBidWYpOwotCXBidWYgPSBOVUxMOwotCi0gICAgICAgIGlmKFNSUF9nZW5f cHViKHNfc3JwLCAmQikgIT0gU1JQX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIHByaW50ZigiRXJy b3IgZ2VuZXJhdGluZyBTUlAgcHVibGljIHZhbHVlXHJcbiIpOwotICAgICAgICAgICAgU2VuZFNS UEF1dGhTQihTUlBfUkVKRUNULCAodm9pZCAqKSAiU1JQX2dlbl9wdWIgZmFpbGVkIiwgLTEpOwot ICAgICAgICAgICAgcmV0dXJuKEFVVEhfRkFJTFVSRSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2tz dHJuY3B5KHN6VXNlck5hbWVBdXRoZW50aWNhdGVkLHN6VXNlck5hbWVSZXF1ZXN0ZWQsVUlEQlVG TEVOKTsKLSAgICAgICAgcmV0dXJuIEFVVEhfU1VDQ0VTUzsKLQotICAgIGNhc2UgU1JQX0VYUDoK LSAgICAgIC8qIENsaWVudCBpcyBzZW5kaW5nIEEgdG8gdXMsIGNvbXB1dGUgY2hhbGxlbmdlIGFu ZCBleHBlY3RlZCByZXNwb25zZS4gKi8KLSAgICAgICAgaWYgKHNfc3JwID09IE5VTEwgfHwgQiA9 PSBOVUxMKSB7Ci0JICAgIHByaW50ZigiUHJvdG9jb2wgZXJyb3I6IFNSUF9FWFAgdW5leHBlY3Rl ZFxyXG4iKTsKLQkgICAgU2VuZFNSUEF1dGhTQihTUlBfUkVKRUNULAotCQkgIAkodm9pZCAqKSJQ cm90b2NvbCBlcnJvcjogdW5leHBlY3RlZCBFWFAiLCAtMSk7Ci0JICAgIHJldHVybihBVVRIX0ZB SUxVUkUpOwotCX0KLSAgICAgICAgLyogV2FpdCB1bnRpbCBub3cgdG8gc2VuZCBCLCBzaW5jZSBp dCBjb250YWlucyB0aGUga2V5IHRvICJ1IiAqLwotICAgICAgICBTZW5kU1JQQXV0aFNCKFNSUF9D SEFMTEVOR0UsIEItPmRhdGEsIEItPmxlbmd0aCk7Ci0gICAgICAgIGNzdHJfZnJlZShCKTsKLSAg ICAgICAgQiA9IE5VTEw7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogVGhlIG9yaWdpbmFsIFNS UCBBVVRIIGltcGxlbWVudGF0aW9uIGRpZCBub3QgcHJvdGVjdCBhZ2FpbnN0Ci0gICAgICAgICAq IHRhbXBlcmluZyBvZiB0aGUgYXV0aC10eXBlLXBhaXJzLiAgVGhlcmVmb3JlLCB3aGVuIHRoZQot ICAgICAgICAgKiBBVVRIX0VOQ1JZUFRfTUFTSyBiaXRzIGFyZSB6ZXJvLCBubyBleHRyYSBkYXRh IGlzIGluc2VydGVkCi0gICAgICAgICAqIGludG8gdGhlIFNSUCBoYXNoIGNvbXB1dGF0aW9uLiAg V2hlbiBBVVRIX0VOQ1JZUFRfU1RBUlRfVExTCi0gICAgICAgICAqIGlzIHNldCB3ZSBhbHNvIGlu c2VydCB0aGUgU1NML1RMUyBjbGllbnQgYW5kIHNlcnZlciBmaW5pc2hlZAotICAgICAgICAgKiBt ZXNzYWdlcyB0byBlbnN1cmUgdGhhdCB0aGVyZSBpcyBubyBtYW4gaW4gdGhlIG1pZGRsZSBhdHRh Y2sKLSAgICAgICAgICogdW5kZXJ3YXkgb24gdGhlIFNTTC9UTFMgY29ubmVjdGlvbi4KLSAgICAg ICAgICovCi0gICAgICAgIGlmICggKGhvdyAmIEFVVEhfRU5DUllQVF9NQVNLKSAhPSBBVVRIX0VO Q1JZUFRfT0ZGICkgewotICAgICAgICAgICAgdHlwZV9jaGVja1swXSA9IEFVVEhUWVBFX1NSUDsK LSAgICAgICAgICAgIHR5cGVfY2hlY2tbMV0gPSBob3c7Ci0jaWZkZWYgQ0tfU1NMCi0gICAgICAg ICAgICBpZiAoKGhvdyAmIEFVVEhfRU5DUllQVF9NQVNLKSA9PSBBVVRIX0VOQ1JZUFRfU1RBUlRf VExTKSB7Ci0gICAgICAgICAgICAgICAgc3NsX2dldF9jbGllbnRfZmluaXNoZWQoJnR5cGVfY2hl Y2tbMl0sMTIpOwotICAgICAgICAgICAgICAgIHNzbF9nZXRfc2VydmVyX2ZpbmlzaGVkKCZ0eXBl X2NoZWNrWzE0XSwxMik7Ci0gICAgICAgICAgICAgICAgU1JQX2FkZF9leF9kYXRhKHNfc3JwLCB0 eXBlX2NoZWNrLCAyNik7Ci0gICAgICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBDS19TU0wgKi8K LSAgICAgICAgICAgICAgICBTUlBfYWRkX2V4X2RhdGEoc19zcnAsIHR5cGVfY2hlY2ssIDIpOwot ICAgICAgICB9Ci0KLSAgICAgICAgaWYoU1JQX2NvbXB1dGVfa2V5KHNfc3JwLCAmc19rZXksIGRh dGEsIGNudCkgIT0gU1JQX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIHByaW50ZigiU2VjdXJpdHkg YWxlcnQ6IFRyaXZpYWwgc2Vzc2lvbiBrZXkgYXR0ZW1wdGVkXHJcbiIpOwotICAgICAgICAgICAg U2VuZFNSUEF1dGhTQihTUlBfUkVKRUNULAotCQkJICAodm9pZCAqKSAiVHJpdmlhbCBzZXNzaW9u IGtleSBkZXRlY3RlZCIsIC0xKTsKLSAgICAgICAgICAgIHJldHVybihBVVRIX0ZBSUxVUkUpOwot ICAgICAgICB9Ci0gICAgICAgIHNycF93YWl0cmVzcCA9IDE7Ci0gICAgICAgIHJldHVybiBBVVRI X1NVQ0NFU1M7Ci0KLSAgICBjYXNlIFNSUF9SRVNQT05TRToKLSAgICAgICAgLyogR290IHRoZSBy ZXNwb25zZTsgc2VlIGlmIGl0J3MgY29ycmVjdCAqLwotICAgICAgICBpZiAoIXNycF93YWl0cmVz cCB8fCBzX3NycCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoMSkKLSAgICAgICAgICAgICAg cHJpbnRmKCJQcm90b2NvbCBlcnJvcjogU1JQX1JFU1BPTlNFIHVuZXhwZWN0ZWRcclxuIik7Ci0g ICAgICAgICAgICBTZW5kU1JQQXV0aFNCKFNSUF9SRUpFQ1QsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICh2b2lkICopICJQcm90b2NvbCBlcnJvcjogdW5leHBlY3RlZCBSRVNQT05TRSIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgIC0xCi0gICAgICAgICAgICAgICAgICAgICAgICAgICk7 Ci0gICAgICAgICAgICByZXR1cm4oQVVUSF9GQUlMVVJFKTsKLSAgICAgICAgfQotICAgICAgICBz cnBfd2FpdHJlc3AgPSAwOyAgICAgICAvKiB3ZSBnb3QgYSByZXNwb25zZSAqLwotCi0gICAgICAg IGlmIChjbnQgPCBSRVNQT05TRV9MRU4pIHsKLSAgICAgICAgICAgIGlmICgxKQotICAgICAgICAg ICAgICBwcmludGYoIlByb3RvY29sIGVycm9yOiBtYWxmb3JtZWQgcmVzcG9uc2VcclxuIik7Ci0g ICAgICAgICAgICBTZW5kU1JQQXV0aFNCKFNSUF9SRUpFQ1QsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICh2b2lkICopICJQcm90b2NvbCBlcnJvcjogbWFsZm9ybWVkIHJlc3BvbnNlIiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgLTEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK LSAgICAgICAgICAgIHJldHVybihBVVRIX0ZBSUxVUkUpOwotICAgICAgICB9Ci0KLSAgICAgICAg aWYoU1JQX3ZlcmlmeShzX3NycCwgZGF0YSwgY250KSA9PSBTUlBfU1VDQ0VTUykgewotICAgICAg ICAgICAgcmVzcCA9IGNzdHJfbmV3KCk7Ci0gICAgICAgICAgICBpZihTUlBfcmVzcG9uZChzX3Ny cCwgJnJlc3ApICE9IFNSUF9TVUNDRVNTKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJFcnJv ciBjb21wdXRpbmcgcmVzcG9uc2VcclxuIik7Ci0gICAgICAgICAgICAgICAgU2VuZFNSUEF1dGhT QihTUlBfUkVKRUNULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgIkVy cm9yIGNvbXB1dGluZyByZXNwb25zZSIsIC0xKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oQVVU SF9GQUlMVVJFKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQ X0FDQ0VQVCwgcmVzcC0+ZGF0YSwgcmVzcC0+bGVuZ3RoKTsKLSAgICAgICAgICAgIGFjY2VwdF9j b21wbGV0ZSA9IDE7Ci0gICAgICAgICAgICBjc3RyX2ZyZWUocmVzcCk7Ci0KLSNpZmRlZiBDS19F TkNSWVBUSU9OCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAgICAgICBpZiAoIShzc2xfYWN0aXZlX2Zs YWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSkKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICAg IHsKLSAgICAgICAgICAgICAgICBza2V5LnR5cGUgPSBTS19HRU5FUklDOwotICAgICAgICAgICAg ICAgIHNrZXkubGVuZ3RoID0gc19rZXktPmxlbmd0aDsKLSAgICAgICAgICAgICAgICBza2V5LmRh dGEgPSBzX2tleS0+ZGF0YTsKLSAgICAgICAgICAgICAgICBlbmNyeXB0X3Nlc3Npb25fa2V5KCZz a2V5LCBBVVRIX1NFUlZFUl9UT19DTElFTlQpOwotICAgICAgICAgICAgICAgIGNzdHJfY2xlYXJf ZnJlZShzX2tleSk7Ci0gICAgICAgICAgICAgICAgc19rZXkgPSBOVUxMOwotICAgICAgICAgICAg fQotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSAgICAgICAgICAgIGF1dGhfZmluaXNoZWQo QVVUSF9WQUxJRCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBTZW5k U1JQQXV0aFNCKFNSUF9SRUpFQ1QsICh2b2lkICopICJMb2dpbiBpbmNvcnJlY3QiLCAtMSk7Ci0g ICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKLSAgICAgICAgICAgIHJldHVy bihBVVRIX0ZBSUxVUkUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBBVVRIX1NVQ0NFU1M7 Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBwcmludGYoIlVua25vd24gU1JQIG9wdGlvbiAlZFxy XG4iLCBkYXRhWy0xXSk7Ci0gICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQX1JFSkVDVCwgKHZvaWQg KikgIlVua25vd24gb3B0aW9uIHJlY2VpdmVkIiwgLTEpOwotICAgICAgICByZXR1cm4oQVVUSF9G QUlMVVJFKTsKLSAgICB9Ci19Ci0jZW5kaWYgLyogUFJFX1NSUF8xXzdfMyAqLwotI2VuZGlmIC8q IFNSUCAqLwotCi0jaWZkZWYgS1JCNQotI2lmZGVmIEtJTklUCi0vKgotICogY2xpZW50cy9raW5p dC9raW5pdC5jCi0gKgotICogQ29weXJpZ2h0IDE5OTAgYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5z dGl0dXRlIG9mIFRlY2hub2xvZ3kuCi0gKiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIEV4 cG9ydCBvZiB0aGlzIHNvZnR3YXJlIGZyb20gdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSBt YXkKLSAqICAgcmVxdWlyZSBhIHNwZWNpZmljIGxpY2Vuc2UgZnJvbSB0aGUgVW5pdGVkIFN0YXRl cyBHb3Zlcm5tZW50LgotICogICBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgYW55IHBlcnNv biBvciBvcmdhbml6YXRpb24gY29udGVtcGxhdGluZwotICogICBleHBvcnQgdG8gb2J0YWluIHN1 Y2ggYSBsaWNlbnNlIGJlZm9yZSBleHBvcnRpbmcuCi0gKgotICogV0lUSElOIFRIQVQgQ09OU1RS QUlOVCwgcGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kCi0gKiBkaXN0cmlidXRl IHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQK LSAqIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92 ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3Ro IHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQKLSAqIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBw ZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQKLSAqIHRoZSBuYW1lIG9m IE0uSS5ULiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmlu ZwotICogdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3 cml0dGVuIHByaW9yCi0gKiBwZXJtaXNzaW9uLiAgTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0 aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKLSAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBw dXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3MKLSAqIG9yIGlt cGxpZWQgd2FycmFudHkuCi0gKgotICoKLSAqIEluaXRpYWxpemUgYSBjcmVkZW50aWFscyBjYWNo ZS4KLSAqLwotCi0jZGVmaW5lIEtSQjVfREVGQVVMVF9PUFRJT05TIDAKLSNkZWZpbmUgS1JCNV9E RUZBVUxUX0xJRkUgNjAqNjAqMTAgLyogMTAgaG91cnMgKi8KLQotc3RhdGljIGtyYjVfZGF0YSB0 Z3RuYW1lID0gewotI2lmbmRlZiBIRUlNREFMCi0gICAgMCwKLSNlbmRpZiAvKiBIRUlNREFMICov Ci0gICAgS1JCNV9UR1NfTkFNRV9TSVpFLAotICAgIEtSQjVfVEdTX05BTUUKLX07Ci0KLS8qIElu dGVybmFsIHByb3RvdHlwZXMgKi8KLV9QUk9UT1RZUChzdGF0aWMga3JiNV9lcnJvcl9jb2RlIGty YjVfdmFsaWRhdGVfdGd0LAotICAgICAgICAoa3JiNV9jb250ZXh0LCBrcmI1X2NjYWNoZSxrcmI1 X3ByaW5jaXBhbCwga3JiNV9kYXRhICopKTsKLV9QUk9UT1RZUChzdGF0aWMga3JiNV9lcnJvcl9j b2RlIGtyYjVfcmVuZXdfdGd0LAotICAgICAgICAoa3JiNV9jb250ZXh0LCBrcmI1X2NjYWNoZSwK LSAgICAgICAgICAgICAgICAgICAgICAgIGtyYjVfcHJpbmNpcGFsLCBrcmI1X2RhdGEgKikpOwot X1BST1RPVFlQKHN0YXRpYyBrcmI1X2Vycm9yX2NvZGUga3JiNV90Z3RfZ2VuLAotICAgICAgICAo a3JiNV9jb250ZXh0LCBrcmI1X2NjYWNoZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGtyYjVf cHJpbmNpcGFsLCBrcmI1X2RhdGEgKiwgaW50IG9wdCkpOwotCi0jaWZkZWYgS1JCNV9IQVZFX0dF VF9JTklUX0NSRURTCi1zdGF0aWMga3JiNV9lcnJvcl9jb2RlIEtSQjVfQ0FMTENPTlYKLWNrX2ty YjVfcHJvbXB0ZXIoIGtyYjVfY29udGV4dCBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgdm9p ZCAqZGF0YSwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAg ICAgICAgICBjb25zdCBjaGFyICpiYW5uZXIsCi0gICAgICAgICAgICAgICAgICBpbnQgbnVtX3By b21wdHMsCi0gICAgICAgICAgICAgICAgICBrcmI1X3Byb21wdCBwcm9tcHRzW10pCi17Ci0gICAg a3JiNV9lcnJvcl9jb2RlICAgICBlcnJjb2RlID0gMDsKLSAgICBpbnQgICAgICAgICAgICAgICAg IGk7Ci0jaWZkZWYgS1VJCi0gICAgc3RydWN0IHR4dGJveCAqIHRiID0gTlVMTDsKLSNlbHNlIC8q IEtVSSAqLwotICAgIGNoYXIgKiBwcm9tcHQgPSBOVUxMOwotI2VuZGlmIC8qIEtVSSAqLwotICAg IGludCAgICBsZW4gPSAwLCBibGVuPTAsIG5sZW49MDsKLQotICAgIGRlYnVnKEYxMTAsImNrX2ty YjVfcHJvbXB0ZXIgbmFtZSIsbmFtZSwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJja19rcmI1X3Byb21w dGVyIGJhbm5lciIsYmFubmVyLDApOwotICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfcHJvbXB0ZXIg bnVtX3Byb21wdHMiLCIiLG51bV9wcm9tcHRzKTsKLQotICAgIGlmIChuYW1lKQotICAgICAgICBu bGVuID0gc3RybGVuKG5hbWUpKzI7Ci0KLSAgICBpZiAoYmFubmVyKQotICAgICAgICBibGVuID0g c3RybGVuKGJhbm5lcikrMjsKLQotI2lmZGVmIEtVSQotICAgIHRiID0gKHN0cnVjdCB0eHRib3gg KikgbWFsbG9jKHNpemVvZihzdHJ1Y3QgdHh0Ym94KSAqIG51bV9wcm9tcHRzKTsKLSAgICBpZiAo IHRiICE9IE5VTEwgKSB7Ci0gICAgICAgIGludCBvazsKLSAgICAgICAgbWVtc2V0KHRiLDAsc2l6 ZW9mKHN0cnVjdCB0eHRib3gpICogbnVtX3Byb21wdHMpOwotICAgICAgICBmb3IgKCBpPTA7IGkg PCBudW1fcHJvbXB0czsgaSsrICkgewotICAgICAgICAgICAgdGJbaV0udF9idWYgPSBwcm9tcHRz W2ldLnJlcGx5LT5kYXRhOwotICAgICAgICAgICAgdGJbaV0udF9sZW4gPSBwcm9tcHRzW2ldLnJl cGx5LT5sZW5ndGg7Ci0gICAgICAgICAgICB0YltpXS50X2xibCA9IHByb21wdHNbaV0ucHJvbXB0 OwotICAgICAgICAgICAgdGJbaV0udF9kZmx0ID0gTlVMTDsKLSAgICAgICAgICAgIHRiW2ldLnRf ZWNobyA9IChwcm9tcHRzW2ldLmhpZGRlbiA/IDIgOiAxKTsKLSAgICAgICAgfSAgIAotCi0gICAg ICAgIG9rID0gdXFfbXR4dCgoY2hhciAqKWJhbm5lcixOVUxMLG51bV9wcm9tcHRzLHRiKTsKLSAg ICAgICAgaWYgKCBvayApIHsKLSAgICAgICAgICAgIGZvciAoIGk9MDsgaSA8IG51bV9wcm9tcHRz OyBpKysgKQotICAgICAgICAgICAgICAgIHByb21wdHNbaV0ucmVwbHktPmxlbmd0aCA9IHN0cmxl bihwcm9tcHRzW2ldLnJlcGx5LT5kYXRhKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBl cnJjb2RlID0gLTI7Ci0gICAgfQotI2Vsc2UgLyogS1VJICovCi0gICAgZm9yIChpID0gMDsgaSA8 IG51bV9wcm9tcHRzOyBpKyspIHsKLSAgICAgICAgZGVidWcoRjExMSwiY2tfa3JiNV9wcm9tcHRl ciBwcm9tcHQiLHByb21wdHNbaV0ucHJvbXB0LGkpOwotCi0gICAgICAgIGlmICggcHJvbXB0ICYm IGxlbiA8IChubGVuICsgYmxlbiArIHN0cmxlbihwcm9tcHRzW2ldLnByb21wdCkrMikgKSB7Ci0g ICAgICAgICAgICBmcmVlKHByb21wdCk7Ci0gICAgICAgICAgICBwcm9tcHQgPSBOVUxMOwotICAg ICAgICB9Ci0gICAgICAgIGlmICggIXByb21wdCApCi0gICAgICAgICAgICBwcm9tcHQgPSAoY2hh ciAqKW1hbGxvYyhubGVuICsgYmxlbiArIHN0cmxlbihwcm9tcHRzW2ldLnByb21wdCkrMik7Ci0g ICAgICAgIGlmICggIXByb21wdCApIHsKLSAgICAgICAgICAgIGVycmNvZGUgPSBLUkI1X1JDX01B TExPQzsKLSAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICAgICAgfQotICAgICAgICBsZW4g PSBubGVuICsgYmxlbiArIHN0cmxlbihwcm9tcHRzW2ldLnByb21wdCkrMjsKLSAgICAgICAgY2tt YWt4bXNnKHByb21wdCxsZW4sCi0gICAgICAgICAgICAgICAgIChjaGFyICopIChuYW1lP25hbWU6 IiIpLAotICAgICAgICAgICAgICAgICBuYW1lPyJcclxuIjoiIiwKLSAgICAgICAgICAgICAgICAg KGNoYXIgKikgKGJhbm5lcj9iYW5uZXI6IiIpLAotICAgICAgICAgICAgICAgICBiYW5uZXI/Ilxy XG4iOiIiLAotICAgICAgICAgICAgICAgICAoY2hhciAqKXByb21wdHNbaV0ucHJvbXB0LAotICAg ICAgICAgICAgICAgICAiOiAiLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLQotICAg ICAgICBtZW1zZXQocHJvbXB0c1tpXS5yZXBseS0+ZGF0YSwgMCwgcHJvbXB0c1tpXS5yZXBseS0+ bGVuZ3RoKTsKLSAgICAgICAgaWYgKHByb21wdHNbaV0uaGlkZGVuKSB7Ci0gICAgICAgICAgICBy ZWFkcGFzcyhwcm9tcHQsIHByb21wdHNbaV0ucmVwbHktPmRhdGEsCi0gICAgICAgICAgICAgICAg ICAgICAgcHJvbXB0c1tpXS5yZXBseS0+bGVuZ3RoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg ICAgICAgIHJlYWR0ZXh0KHByb21wdCwgcHJvbXB0c1tpXS5yZXBseS0+ZGF0YSwKLSAgICAgICAg ICAgICAgICAgICAgICBwcm9tcHRzW2ldLnJlcGx5LT5sZW5ndGgpOwotICAgICAgICB9Ci0gICAg ICAgIHByb21wdHNbaV0ucmVwbHktPmxlbmd0aCA9IHN0cmxlbihwcm9tcHRzW2ldLnJlcGx5LT5k YXRhKTsKLSAgICB9Ci0jZW5kaWYgLyogS1VJICovCi0KLSAgY2xlYW51cDoKLSNpZmRlZiBLVUkK LSAgICBpZiAoIHRiICkKLSAgICAgICAgZnJlZSh0Yik7Ci0jZWxzZSAvKiBLVUkgKi8KLSAgICBp ZiAoIHByb21wdCApCi0gICAgICAgIGZyZWUocHJvbXB0KTsKLSNlbmRpZiAvKiBLVUkgKi8KLSAg ICBpZiAoZXJyY29kZSkgewotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3Byb21wdHM7IGkr KykgewotICAgICAgICAgICAgbWVtc2V0KHByb21wdHNbaV0ucmVwbHktPmRhdGEsIDAsIHByb21w dHNbaV0ucmVwbHktPmxlbmd0aCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGVycmNv ZGU7Ci19Ci0KLS8qCi0gKiAgICAgIEknbSBub3QgcmVhbGx5IHN1cmUgd2hhdCB0byBkbyB3aXRo IHRoaXMuICBUaGUgTlJMIERMTHMgdXNlIGEKLSAqICAgICAgZGlmZmVyZW50IGludGVyZmFjZSBm b3IgdGhlIGtyYjVfcHJvbXB0ZXIgY2FsbGJhY2suICBJdCBoYXMKLSAqICAgICAgb25lIGxlc3Mg cGFyYW1ldGVyLiAgIFRoaXMgaXMgZ29pbmcgdG8gYmUgdWdseS4KLSAqLwotc3RhdGljIGtyYjVf ZXJyb3JfY29kZSBLUkI1X0NBTExDT05WCi1ja19OUkxfa3JiNV9wcm9tcHRlcigga3JiNV9jb250 ZXh0IGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwKLSAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpiYW5uZXIsCi0gICAgICAgICAgICAgICAg ICAgICAgaW50IG51bV9wcm9tcHRzLAotICAgICAgICAgICAgICAgICAgICAgIGtyYjVfcHJvbXB0 IHByb21wdHNbXSkKLXsKLSAgICByZXR1cm4oY2tfa3JiNV9wcm9tcHRlcihjb250ZXh0LE5VTEws bmFtZSxiYW5uZXIsbnVtX3Byb21wdHMscHJvbXB0cykpOwotfQotI2VuZGlmIC8qIEtSQjVfSEFW RV9HRVRfSU5JVF9DUkVEUyAqLwotCi0jaWZkZWYgS1JCNTI0X0NPTlYKLWxvbmcKLXRyeV9jb252 ZXJ0NTI0KGtyYjVfY29udGV4dCBjdHgsIGtyYjVfcHJpbmNpcGFsIG1lLCBrcmI1X2NjYWNoZSBj YykKLXsKLSAgICBjaGFyICogcHJvZ25hbWUgPSAiY29udmVydDUyNCI7Ci0gICAga3JiNV9lcnJv cl9jb2RlIGNvZGUgPSAwOwotICAgIGludCBpY29kZSA9IDA7Ci0gICAga3JiNV9wcmluY2lwYWwg a3Bjc2VydmVyID0gMDsKLSAgICBrcmI1X2NyZWRzICp2NWNyZWRzID0gMDsKLSAgICBrcmI1X2Ny ZWRzIGluY3JlZHM7Ci0jaWZkZWYgT1MyCi0gICAgTEVBU0hfQ1JFREVOVElBTFMgdjRjcmVkczsK LSNlbHNlIC8qIE9TMiAqLwotICAgIENSRURFTlRJQUxTIHY0Y3JlZHM7Ci0jZW5kaWYgLyogT1My ICovCi0KLSAgICBtZW1zZXQoKGNoYXIgKikgJmluY3JlZHMsIDAsIHNpemVvZihpbmNyZWRzKSk7 Ci0gICAgLyoKLSAgICAgIEZyb20gdGhpcyBwb2ludCBvbiwgd2UgY2FuIGdvdG8gY2xlYW51cCBi ZWNhdXNlIGluY3JlZHMgaXMKLSAgICAgIGluaXRpYWxpemVkLgotICAgICovCi0KLSAgICBpZiAo KGNvZGUgPSBrcmI1X2J1aWxkX3ByaW5jaXBhbChjdHgsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJmtwY3NlcnZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBrcmI1X3ByaW5jX3JlYWxtKGN0eCwgbWUpLT5sZW5ndGgsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAga3JiNV9wcmluY19yZWFsbShjdHgsIG1lKS0+ZGF0YSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAia3JidGd0IiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrcmI1X3ByaW5jX3JlYWxtKGN0eCwgbWUpLT5k YXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpKSkgewotICAg ICAgICBjb21fZXJyKHByb2duYW1lLCBjb2RlLAotICAgICAgICAgICAgICAgICJ3aGlsZSBjcmVh dGluZyBzZXJ2aWNlIHByaW5jaXBhbCBuYW1lIik7Ci0gICAgICAgIGdvdG8gY2xlYW51cDsKLSAg ICB9Ci0KLSAgICBtZW1zZXQoKGNoYXIqKSAmaW5jcmVkcywgMCwgc2l6ZW9mKGluY3JlZHMpKTsK LSAgICBpbmNyZWRzLmNsaWVudCA9IG1lOwotICAgIGluY3JlZHMuc2VydmVyID0ga3Bjc2VydmVy OwotICAgIC8qIFByZXZlbnQgZHVwbGljYXRlIGZyZWUgY2FsbHMuICAqLwotICAgIGtwY3NlcnZl ciA9IDA7Ci0KLSAgICBpbmNyZWRzLnRpbWVzLmVuZHRpbWUgPSAwOwotICAgIGluY3JlZHMua2V5 YmxvY2suZW5jdHlwZSA9IEVOQ1RZUEVfREVTX0NCQ19DUkM7Ci0gICAgaWYgKChjb2RlID0ga3Ji NV9nZXRfY3JlZGVudGlhbHMoY3R4LCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbmNyZWRz LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2NWNyZWRzKSkpIHsKLSAg ICAgICAgY29tX2Vycihwcm9nbmFtZSwgY29kZSwKLSAgICAgICAgICAgICAgICAiZ2V0dGluZyBW NSBjcmVkZW50aWFscyIpOwotICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgfQotICAgIGlmICgo aWNvZGUgPSBrcmI1MjRfY29udmVydF9jcmVkc19rZGMoY3R4LAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdjVjcmVkcywKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZ2NGNyZWRzKSkpIHsKLSAgICAgICAgY29tX2Vycihwcm9nbmFt ZSwgaWNvZGUsCi0gICAgICAgICAgICAgICAgImNvbnZlcnRpbmcgdG8gVjQgY3JlZGVudGlhbHMi KTsKLSAgICAgICAgZ290byBjbGVhbnVwOwotICAgIH0KLSAgICAvKiB0aGlzIGlzIHN0b2xlbiBm cm9tIHRoZSB2NCBraW5pdCAqLwotICAgIC8qIGluaXRpYWxpemUgdGlja2V0IGNhY2hlICovCi0g ICAgaWYgKChpY29kZSA9IGtyYl9pbl90a3QodjRjcmVkcy5wbmFtZSwgdjRjcmVkcy5waW5zdCwg djRjcmVkcy5yZWFsbSkKLSAgICAgICAgICE9IEtTVUNDRVNTKSkgewotICAgICAgICBjb21fZXJy KHByb2duYW1lLCBpY29kZSwKLSAgICAgICAgICAgICAgICAidHJ5aW5nIHRvIGNyZWF0ZSB0aGUg VjQgdGlja2V0IGZpbGUiKTsKLSAgICAgICAgZ290byBjbGVhbnVwOwotICAgIH0KLSAgICAvKiBz dGFzaCB0aWNrZXQsIHNlc3Npb24ga2V5LCBldGMuIGZvciBmdXR1cmUgdXNlICovCi0gICAgaWYg KChpY29kZSA9IGtyYl9zYXZlX2NyZWRlbnRpYWxzKHY0Y3JlZHMuc2VydmljZSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjRjcmVkcy5pbnN0YW5jZSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjRjcmVkcy5yZWFsbSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdjRjcmVkcy5zZXNzaW9uLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2NGNyZWRzLmxpZmV0aW1lLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2NGNyZWRzLmt2bm8sCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICYodjRjcmVkcy50aWNrZXRfc3QpLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2NGNyZWRzLmlzc3VlX2RhdGUpKSkgewotICAgICAg ICBjb21fZXJyKHByb2duYW1lLCBpY29kZSwKLSAgICAgICAgICAgICAgICAidHJ5aW5nIHRvIHNh dmUgdGhlIFY0IHRpY2tldCIpOwotICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgfQotCi0gY2xl YW51cDoKLSAgICBtZW1zZXQoJnY0Y3JlZHMsIDAsIHNpemVvZih2NGNyZWRzKSk7Ci0gICAgaWYg KHY1Y3JlZHMpCi0gICAgICAgIGtyYjVfZnJlZV9jcmVkcyhjdHgsIHY1Y3JlZHMpOwotICAgIGlu Y3JlZHMuY2xpZW50ID0gMDsKLSAgICBrcmI1X2ZyZWVfY3JlZF9jb250ZW50cyhjdHgsICZpbmNy ZWRzKTsKLSAgICBpZiAoa3Bjc2VydmVyKQotICAgICAgICBrcmI1X2ZyZWVfcHJpbmNpcGFsKGN0 eCwga3Bjc2VydmVyKTsKLSAgICByZXR1cm4gIShjb2RlIHx8IGljb2RlKTsKLX0KLSNlbmRpZiAv KiBLUkI1MjRfQ09OViAqLwotCi0jZGVmaW5lIE5PX0tFWVRBQgotCi1pbnQKLSNpZmRlZiBDS19B TlNJQwotY2tfa3JiNV9pbml0VEdUKCBzdHJ1Y3Qga3JiX29wX2RhdGEgKiBvcCwgc3RydWN0IGty YjVfaW5pdF9kYXRhICogaW5pdCwKLSAgICAgICAgICAgICAgICAgc3RydWN0IGtyYjRfaW5pdF9k YXRhICogazRfaW5pdCkKLSNlbHNlCi1ja19rcmI1X2luaXRUR1Qob3AsaW5pdCxrNF9pbml0KQot ICAgIGtyYl9vcF9kYXRhICogb3A7IHN0cnVjdCBrcmI1X2luaXRfZGF0YSAqIGluaXQ7Ci0gICAg c3RydWN0IGtyYjRfaW5pdF9kYXRhICogazRfaW5pdDsKLSNlbmRpZiAvKiBDS19BTlNJQyovCi17 Ci0gICAga3JiNV9jb250ZXh0IGtjb250ZXh0OwotICAgIGtyYjVfY2NhY2hlIGNjYWNoZSA9IE5V TEw7Ci0gICAga3JiNV9kZWx0YXQgbGlmZXRpbWUgPSBLUkI1X0RFRkFVTFRfTElGRTsgICAvKiAt bCBvcHRpb24gKi8KLSAgICBrcmI1X3RpbWVzdGFtcCBzdGFydHRpbWUgPSAwOwotICAgIGtyYjVf ZGVsdGF0IHJsaWZlID0gMDsKLSAgICBpbnQgb3B0aW9ucyA9IEtSQjVfREVGQVVMVF9PUFRJT05T OwotICAgIGludCBvcHRpb247Ci0gICAgaW50IGVycmZsZyA9IDA7Ci0gICAga3JiNV9lcnJvcl9j b2RlIGNvZGU7Ci0gICAga3JiNV9wcmluY2lwYWwgbWU9TlVMTDsKLSAgICBrcmI1X3ByaW5jaXBh bCBzZXJ2ZXI9TlVMTDsKLSAgICBrcmI1X2NyZWRzIG15X2NyZWRzOwotICAgIGtyYjVfdGltZXN0 YW1wIG5vdzsKLSNpZm5kZWYgSEVJTURBTAotICAgIGtyYjVfYWRkcmVzcyAqKmFkZHJzID0gKGty YjVfYWRkcmVzcyAqKikwOwotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLSAgICBpbnQgYWRkcl9jb3Vu dD0wOwotICAgIGludCBpLGo7Ci0jaWZuZGVmIE5PX0tFWVRBQgotICAgIGludCB1c2Vfa2V5dGFi ID0gMDsgICAgICAgICAgICAgICAgIC8qIC1rIG9wdGlvbiAqLwotICAgIGtyYjVfa2V5dGFiIGtl eXRhYiA9IE5VTEw7Ci0jZW5kaWYgLyogTk9fS0VZVEFCICovCi0gICAgc3RydWN0IHBhc3N3ZCAq cHcgPSAwOwotICAgIGludCBwd3NpemU7Ci0gICAgY2hhciAqY2xpZW50X25hbWU9TlVMTCwgcHJp bmNpcGFsWzI1Nl09IiIsIHJlYWxtWzI1Nl09IiIsIG51bXN0cls0MF09IiI7Ci0gICAgY2hhciAq cGFzc3dvcmQ9TlVMTCwgcGFzc3dkWzgwXT0iIjsKLSNpZmRlZiBLUkI1X0hBVkVfR0VUX0lOSVRf Q1JFRFMKLSAgICBrcmI1X2dldF9pbml0X2NyZWRzX29wdCBvcHRzOwotI2VuZGlmCi0gICAgY2hh ciAqIG5hbWU7Ci0gICAgaW50IGxlbjsKLQotICAgIGlmICggIWNrX2tyYjVfaXNfaW5zdGFsbGVk KCkgKQotICAgICAgICByZXR1cm4oLTEpOwotCi0jaWZkZWYgQ09NTUVOVAotICAgIHByaW50Zigi S2VyYmVyb3MgViBpbml0aWFsaXphdGlvblxyXG4iKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0K LSAgICBjb2RlID0ga3JiNV9pbml0X2NvbnRleHQoJmtjb250ZXh0KTsKLSAgICBpZiAoY29kZSkg ewotICAgICAgICBjb21fZXJyKCJrcmI1X2tpbml0Iixjb2RlLCJ3aGlsZSBpbml0X2NvbnRleHQi KTsKLSAgICAgICAga3JiNV9lcnJubyA9IGNvZGU7Ci0gICAgICAgIG1ha2VzdHIoJmtyYjVfZXJy bXNnLGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJubykpOwotICAgICAgICByZXR1cm4oLTEpOwotICAg IH0KLQotICAgIGRlYnVnKEYxMTAsImtyYjVfaW5pdCIsImtyYjVfaW5pdF9jb250ZXh0IiwwKTsK LQotICAgIGlmICgoY29kZSA9IGtyYjVfdGltZW9mZGF5KGtjb250ZXh0LCAmbm93KSkpIHsKLSAg ICAgICAgY29tX2Vycigia3JiNV9raW5pdCIsY29kZSwid2hpbGUgZ2V0dGluZyB0aW1lIG9mIGRh eSIpOwotICAgICAgICBnb3RvIGV4aXRfazVfaW5pdDsKLSAgICB9Ci0KLSNpZmRlZiBLUkI1X0hB VkVfR0VUX0lOSVRfQ1JFRFMKLSAgICBtZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7Ci0g ICAga3JiNV9nZXRfaW5pdF9jcmVkc19vcHRfaW5pdCgmb3B0cyk7Ci0gICAgZGVidWcoRjExMCwi a3JiNV9pbml0Iiwia3JiNV9nZXRfaW5pdF9jcmVkc19vcHRfaW5pdCIsMCk7Ci0jZW5kaWYKLQot ICAgIGlmICggaW5pdC0+cmVuZXdhYmxlICkgewotICAgICAgICBvcHRpb25zIHw9IEtEQ19PUFRf UkVORVdBQkxFOwotICAgICAgICBja21ha21zZyhudW1zdHIsc2l6ZW9mKG51bXN0ciksY2tpdG9h KGluaXQtPnJlbmV3YWJsZSksIm0iLE5VTEwsTlVMTCk7Ci0jaWZkZWYgSEVJTURBTAotICAgICAg ICBjb2RlID0gLTE7Ci0jZWxzZSAvKiBIRUlNREFMICovCi0gICAgICAgIGNvZGUgPSBrcmI1X3N0 cmluZ190b19kZWx0YXQobnVtc3RyLCAmcmxpZmUpOwotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLSAg ICAgICAgaWYgKGNvZGUgIT0gMCB8fCBybGlmZSA9PSAwKSB7Ci0gICAgICAgICAgICBwcmludGYo IkJhZCByZW5ld2FibGUgdGltZSB2YWx1ZSAlc1xyXG4iLCBudW1zdHIpOwotICAgICAgICAgICAg ZXJyZmxnKys7Ci0gICAgICAgIH0KLSNpZmRlZiBLUkI1X0hBVkVfR0VUX0lOSVRfQ1JFRFMKLSAg ICAgICAga3JiNV9nZXRfaW5pdF9jcmVkc19vcHRfc2V0X3JlbmV3X2xpZmUoJm9wdHMsIHJsaWZl KTsKLSNlbmRpZgotICAgIH0KLSAgICBpZiAoIGluaXQtPnJlbmV3ICkgewotICAgICAgICAvKiBy ZW5ldyB0aGUgdGlja2V0ICovCi0gICAgICAgIG9wdGlvbnMgfD0gS0RDX09QVF9SRU5FVzsKLSAg ICB9Ci0KLSAgICBpZiAoIGluaXQtPnZhbGlkYXRlICkgewotICAgICAgICAvKiB2YWxpZGF0ZSB0 aGUgdGlja2V0ICovCi0gICAgICAgIG9wdGlvbnMgfD0gS0RDX09QVF9WQUxJREFURTsKLSAgICB9 Ci0gICAgaWYgKCBpbml0LT5wcm94aWFibGUgKSB7Ci0gICAgICAgIG9wdGlvbnMgfD0gS0RDX09Q VF9QUk9YSUFCTEU7Ci0jaWZkZWYgS1JCNV9IQVZFX0dFVF9JTklUX0NSRURTCi0gICAgICAgIGty YjVfZ2V0X2luaXRfY3JlZHNfb3B0X3NldF9wcm94aWFibGUoJm9wdHMsIDEpOwotI2VuZGlmCi0g ICAgfQotICAgIGlmICggaW5pdC0+Zm9yd2FyZGFibGUgKSB7Ci0gICAgICAgIG9wdGlvbnMgfD0g S0RDX09QVF9GT1JXQVJEQUJMRTsKLSNpZmRlZiBLUkI1X0hBVkVfR0VUX0lOSVRfQ1JFRFMKLSAg ICAgICAga3JiNV9nZXRfaW5pdF9jcmVkc19vcHRfc2V0X2ZvcndhcmRhYmxlKCZvcHRzLCAxKTsK LSNlbmRpZgotICAgIH0KLSNpZm5kZWYgTk9fS0VZVEFCCi0gICAgaWYgKCAgKSB7Ci0gICAgICAg IHVzZV9rZXl0YWIgPSAxOwotICAgIH0KLSAgICBpZiAoICApIHsKLSAgICAgICAgaWYgKGtleXRh YiA9PSBOVUxMICYmIGtleXRhYl9uYW1lICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGNvZGUgPSBr cmI1X2t0X3Jlc29sdmUoa2NvbnRleHQsIGtleXRhYl9uYW1lLCAma2V5dGFiKTsKLSAgICAgICAg ICAgIGlmIChjb2RlICE9IDApIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJrcmI1X2lu aXQgcmVzb2x2aW5nIGtleXRhYiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAga2V5dGFiX25h bWUsY29kZSk7Ci0gICAgICAgICAgICAgICAgZXJyZmxnKys7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogTk9fS0VZVEFCICovCi0gICAgaWYgKCBpbml0LT5saWZl dGltZSApIHsKLSAgICAgICAgY2ttYWttc2cobnVtc3RyLHNpemVvZihudW1zdHIpLGNraXRvYShp bml0LT5saWZldGltZSksIm0iLE5VTEwsTlVMTCk7Ci0jaWZkZWYgSEVJTURBTAotICAgICAgICBj b2RlID0gLTE7Ci0jZWxzZSAvKiBIRUlNREFMICovCi0gICAgICAgIGNvZGUgPSBrcmI1X3N0cmlu Z190b19kZWx0YXQobnVtc3RyLCAmbGlmZXRpbWUpOwotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLSAg ICAgICAgaWYgKGNvZGUgIT0gMCB8fCBsaWZldGltZSA9PSAwKSB7Ci0gICAgICAgICAgICBwcmlu dGYoIkJhZCBsaWZldGltZSB2YWx1ZSAlc1xyXG4iLCBudW1zdHIpOwotICAgICAgICAgICAgZXJy ZmxnKys7Ci0gICAgICAgIH0KLSNpZmRlZiBLUkI1X0hBVkVfR0VUX0lOSVRfQ1JFRFMKLSAgICAg ICAga3JiNV9nZXRfaW5pdF9jcmVkc19vcHRfc2V0X3RrdF9saWZlKCZvcHRzLCBsaWZldGltZSk7 Ci0jZW5kaWYKLSAgICB9Ci0gICAgaWYgKCBpbml0LT5wb3N0ZGF0ZSApIHsKLSAgICAgICAgLyog Q29udmVydCBjbWRhdGUoKSB0byBhIHRpbWVfdCB2YWx1ZSAqLwotICAgICAgICBzdHJ1Y3QgdG0g KiB0aW1lX3RtOwotICAgICAgICBzdHJ1Y3QgdG0gKiBjbWRhdGUydG0oY2hhciAqLGludCk7Ci0g ICAgICAgIHRpbWVfdG0gPSBjbWRhdGUydG0oaW5pdC0+cG9zdGRhdGUsMCk7Ci0gICAgICAgIGlm ICggdGltZV90bSApCi0gICAgICAgICAgICBzdGFydHRpbWUgPSAoa3JiNV90aW1lc3RhbXApIG1r dGltZSh0aW1lX3RtKTsKLQotICAgICAgICBpZiAoY29kZSAhPSAwIHx8IHN0YXJ0dGltZSA9PSAw IHx8IHN0YXJ0dGltZSA9PSAtMSkgewotICAgICAgICAgICAga3JiNV9kZWx0YXQga3RtcDsKLSNp ZmRlZiBIRUlNREFMCi0gICAgICAgICAgICBjb2RlID0gLTE7Ci0jZWxzZSAvKiBIRUlNREFMICov Ci0gICAgICAgICAgICBjb2RlID0ga3JiNV9zdHJpbmdfdG9fZGVsdGF0KGluaXQtPnBvc3RkYXRl LCAma3RtcCk7Ci0jZW5kaWYgLyogSEVJTURBTCAqLwotICAgICAgICAgICAgaWYgKGNvZGUgPT0g MCAmJiBrdG1wICE9IDApIHsKLSAgICAgICAgICAgICAgICBzdGFydHRpbWUgPSBub3cgKyBrdG1w OwotICAgICAgICAgICAgICAgIG9wdGlvbnMgfD0gS0RDX09QVF9QT1NUREFURUQ7Ci0gICAgICAg ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByaW50ZigiQmFkIHBvc3RkYXRlIHN0YXJ0 IHRpbWUgdmFsdWUgJXNcclxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGluaXQtPnBvc3Rk YXRlKTsKLSAgICAgICAgICAgICAgICBlcnJmbGcrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAg fSBlbHNlIHsKLSAgICAgICAgICAgIG9wdGlvbnMgfD0gS0RDX09QVF9QT1NUREFURUQ7Ci0gICAg ICAgIH0KLSAgICB9Ci0KLSAgICBkZWJ1ZyhGMTEwLCJrcmI1X2luaXQgc2VhcmNoaW5nIGZvciBj Y2FjaGUiLG9wLT5jYWNoZSwwKTsKLQotICAgIGNvZGUgPSBrNV9nZXRfY2NhY2hlKGtjb250ZXh0 LCZjY2FjaGUsb3AtPmNhY2hlKTsKLSAgICBpZiAoY29kZSAhPSAwKSB7Ci0gICAgICAgIGNvbV9l cnIoImtyYjVfa2luaXQiLGNvZGUsIndoaWxlIGdldHRpbmcgZGVmYXVsdCBjY2FjaGUiKTsKLSAg ICAgICAgZ290byBleGl0X2s1X2luaXQ7Ci0gICAgfQotCi0gICAgLyogVGhpcyBpcyBvdXIgcmVh bG0gdW5sZXNzIGl0IGlzIGNoYW5nZWQgKi8KLSAgICBja3N0cm5jcHkocmVhbG0saW5pdC0+cmVh bG0gPyBpbml0LT5yZWFsbSA6IGtyYjVfZF9yZWFsbSwgMjU2KTsKLQotI2lmZGVmIEJFVEFURVNU Ci0gICAgLyogVGhpcyBjb2RlIGlzIGdvaW5nIHRvIHRha2UgdGhlIHJlYWxtIGFuZCBhdHRlbXB0 IHRvIGNvcnJlY3QgKi8KLSAgICAvKiB0aGUgY2FzZS4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIHsKLSAgICAgICAgcHJvZmlsZV90IHBy b2ZpbGU7Ci0KLSAgICAgICAgY29kZSA9IGtyYjVfZ2V0X3Byb2ZpbGUoa2NvbnRleHQsICZwcm9m aWxlKTsKLSAgICAgICAgaWYgKCAhY29kZSApIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIgICpu YW1lc1s0XTsKLSAgICAgICAgICAgIGNoYXIgKiogcmVhbG1zOwotICAgICAgICAgICAgaW50IGZv dW5kID0gMDsKLQotICAgICAgICAgICAgbmFtZXNbMF0gPSAicmVhbG1zIjsKLSAgICAgICAgICAg IG5hbWVzWzFdID0gTlVMTDsKLQotICAgICAgICAgICAgY29kZSA9IHByb2ZpbGVfZ2V0X3N1YnNl Y3Rpb25fbmFtZXMocHJvZmlsZSxuYW1lcywmcmVhbG1zKTsKLSAgICAgICAgICAgIGlmICggY29k ZSA9PSAwICkgewotICAgICAgICAgICAgICAgIGludCBpPTA7Ci0gICAgICAgICAgICAgICAgd2hp bGUgKCByZWFsbXNbaV0gKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChja3N0cmNtcChyZWFs bSxyZWFsbXNbaV0sLTEsMCkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5 KHJlYWxtLHJlYWxtc1tpXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IDE7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot Ci0jaWZkZWYgQ0tfRE5TX1NSVgotICAgICAgICAgICAgaWYgKCAhZm91bmQgKSB7Ci0gICAgICAg ICAgICAgICAgY2hhciAqIGRuc19yZWFsbSA9IE5VTEw7Ci0KLSAgICAgICAgICAgICAgICAvKiBX ZSBkaWQgbm90IGZpbmQgdGhlIHJlYWxtIGluIHRoZSBwcm9maWxlIHNvIGxldCdzIHRyeSBETlMg Ki8KLSAgICAgICAgICAgICAgICBsb2NhdGVfdHh0X3JyKCJfa2VyYmVyb3MiLHJlYWxtLCZkbnNf cmVhbG0pOwotICAgICAgICAgICAgICAgIGlmICggZG5zX3JlYWxtICYmCi0gICAgICAgICAgICAg ICAgICAgICBja3N0cmNtcChyZWFsbSxkbnNfcmVhbG0sLTEsMCkgPT0gMCAmJgotICAgICAgICAg ICAgICAgICAgICAgY2tzdHJjbXAocmVhbG0sZG5zX3JlYWxtLC0xLDEpICE9IDAKLSAgICAgICAg ICAgICAgICAgICAgICkgewotICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkocmVhbG0sZG5z X3JlYWxtLDI1Nik7Ci0gICAgICAgICAgICAgICAgICAgIGZyZWUoZG5zX3JlYWxtKTsKLSAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfRE5TX1NSViAqLwotICAg ICAgICB9Ci0KLSAgICAgICAgaWYgKGluaXQtPnJlYWxtICYmCi0gICAgICAgICAgICAgY2tzdHJj bXAocmVhbG0saW5pdC0+cmVhbG0sLTEsMCkgPT0gMCAmJgotICAgICAgICAgICAgIGNrc3RyY21w KHJlYWxtLGluaXQtPnJlYWxtLC0xLDEpICE9IDApCi0gICAgICAgICAgICBzdHJjcHkoaW5pdC0+ cmVhbG0scmVhbG0pOwotICAgICAgICBpZiAoY2tzdHJjbXAocmVhbG0sa3JiNV9kX3JlYWxtLC0x LDApID09IDAgJiYKLSAgICAgICAgICAgICBja3N0cmNtcChyZWFsbSxrcmI1X2RfcmVhbG0sLTEs MSkgIT0gMCkKLSAgICAgICAgICAgIHN0cmNweShrcmI1X2RfcmVhbG0scmVhbG0pOwotICAgIH0K LSNlbmRpZiAvKiBCRVRBVEVTVCAqLwotCi0gICAgaWYgKGluaXQtPnByaW5jaXBhbCA9PSBOVUxM KSB7ICAgICAgIC8qIE5vIHByaW5jaXBhbCBuYW1lIHNwZWNpZmllZCAqLwotI2lmbmRlZiBOT19L RVlUQUIKLSAgICAgICAgaWYgKHVzZV9rZXl0YWIpIHsKLSAgICAgICAgICAgIC8qIFVzZSB0aGUg ZGVmYXVsdCBob3N0L3NlcnZpY2UgbmFtZSAqLwotICAgICAgICAgICAgY29kZSA9IGtyYjVfc25h bWVfdG9fcHJpbmNpcGFsKGtjb250ZXh0LCBOVUxMLCBOVUxMLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBLUkI1X05UX1NSVl9IU1QsICZtZSk7Ci0gICAgICAg ICAgICBpZiAoY29kZSA9PSAwICYmCi0gICAgICAgICAgICAgICAga3JiNV9wcmluY19yZWFsbShr Y29udGV4dCwgbWUpLT5sZW5ndGggPCBzaXplb2YocmVhbG0pKQotICAgICAgICAgICAgewotICAg ICAgICAgICAgICAgIC8qIFNhdmUgdGhlIHJlYWxtICovCi0gICAgICAgICAgICAgICAgbWVtY3B5 KHJlYWxtLGtyYjVfcHJpbmNfcmVhbG0oa2NvbnRleHQsIG1lKS0+ZGF0YSwKLSAgICAgICAgICAg ICAgICAgICAgICAgIGtyYjVfcHJpbmNfcmVhbG0oa2NvbnRleHQsIG1lKS0+bGVuZ3RoKTsgLyog c2FmZSAqLwotICAgICAgICAgICAgICAgIHJlYWxtW2tyYjVfcHJpbmNfcmVhbG0oa2NvbnRleHQs IG1lKS0+bGVuZ3RoXT0nXDAnOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg ICBjb21fZXJyKCJrcmI1X2tpbml0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUsCi0g ICAgICAgICAgICAgICAgICAgICAgICAid2hlbiBjcmVhdGluZyBkZWZhdWx0IHNlcnZlciBwcmlu Y2lwYWwgbmFtZSIpOwotICAgICAgICAgICAgICAgIGdvdG8gZXhpdF9rNV9pbml0OwotICAgICAg ICAgICAgfQotICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBOT19LRVlUQUIgKi8KLSAgICAgICAg ewotICAgICAgICAgICAgaW50IGxlbjsKLSAgICAgICAgICAgIGNoYXIgKiBuYW1lOwotCi0gICAg ICAgICAgICAvKiBHZXQgZGVmYXVsdCBwcmluY2lwYWwgZnJvbSBjYWNoZSBpZiBvbmUgZXhpc3Rz ICovCi0gICAgICAgICAgICBjb2RlID0ga3JiNV9jY19nZXRfcHJpbmNpcGFsKGtjb250ZXh0LCBj Y2FjaGUsICZtZSk7Ci0jaWZkZWYgSEVJTURBTAotICAgICAgICAgICAgbmFtZSA9IG1lLT5yZWFs bTsKLSAgICAgICAgICAgIGxlbiA9IHN0cmxlbihuYW1lKTsKLSNlbHNlIC8qIEhFSU1EQUwgKi8K LSAgICAgICAgICAgIGxlbiA9IGtyYjVfcHJpbmNfcmVhbG0oa2NvbnRleHQsIG1lKS0+bGVuZ3Ro OwotICAgICAgICAgICAgbmFtZSA9IGtyYjVfcHJpbmNfcmVhbG0oa2NvbnRleHQsIG1lKS0+ZGF0 YTsKLSNlbmRpZiAvKiBIRUlNREFMICovCi0gICAgICAgICAgICBpZiAoY29kZSA9PSAwICYmIGxl biA8IHNpemVvZihyZWFsbSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogU2F2 ZSB0aGUgcmVhbG0gKi8KLSAgICAgICAgICAgICAgICBtZW1jcHkocmVhbG0sbmFtZSxsZW4pOyAv KiBzYWZlICovCi0gICAgICAgICAgICAgICAgcmVhbG1bbGVuXT0nXDAnOwotICAgICAgICAgICAg fSBlbHNlIHsKLSNpZmRlZiBIQVZFX1BXRF9ICi0gICAgICAgICAgICAgICAgLyogRWxzZSBzZWFy Y2ggcGFzc3dkIGZpbGUgZm9yIGNsaWVudCAqLwotCi0gICAgICAgICAgICAgICAgcHcgPSBnZXRw d3VpZCgoaW50KSBnZXR1aWQoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHB3KSB7Ci0gICAgICAg ICAgICAgICAgICAgIGNoYXIgcHJpbmNfcmVhbG1bMjU2XTsKLSAgICAgICAgICAgICAgICAgICAg aWYgKCAoc3RybGVuKHB3LT5wd19uYW1lKSArIHN0cmxlbihyZWFsbSkgKyAxKSA+IDI1NSApCi0g ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXRfazVfaW5pdDsKLQotICAgICAgICAgICAg ICAgICAgICBja3N0cm5jcHkocHJpbmNpcGFsLHB3LT5wd19uYW1lLDI1Nik7Ci0gICAgICAgICAg ICAgICAgICAgIGNrc3RybmNweShwcmluY19yZWFsbSxwdy0+cHdfbmFtZSwyNTYpOwotICAgICAg ICAgICAgICAgICAgICBja3N0cm5jYXQocHJpbmNfcmVhbG0sIkAiLDI1Nik7Ci0gICAgICAgICAg ICAgICAgICAgIGNrc3RybmNhdChwcmluY19yZWFsbSxyZWFsbSwyNTYpOwotCi0gICAgICAgICAg ICAgICAgICAgIGlmICgoY29kZSA9IGtyYjVfcGFyc2VfbmFtZShrY29udGV4dCxwcmluY19yZWFs bSwmbWUpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAga3JiNV9lcnJubyA9IGNvZGU7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBjb21fZXJyKCJrcmI1X2tpbml0Iixjb2RlLCJ3aGVuIHBh cnNpbmcgbmFtZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbmNfcmVh bG0pOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBleGl0X2s1X2luaXQ7Ci0gICAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg ICAgICBwcmludGYoCi0gICAgICAgICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIGlkZW50aWZ5 IHVzZXIgZnJvbSBwYXNzd29yZCBmaWxlXHJcbiIpOwotICAgICAgICAgICAgICAgICAgICBnb3Rv IGV4aXRfazVfaW5pdDsKLSAgICAgICAgICAgICAgICB9Ci0jZWxzZSAvKiBIQVZFX1BXRF9IICov Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJVbmFibGUgdG8gaWRlbnRpZnkgdXNlclxyXG4iKTsK LSAgICAgICAgICAgICAgICBnb3RvIGV4aXRfazVfaW5pdDsKLSNlbmRpZiAvKiBIQVZFX1BXRF9I ICovCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotI2lmZGVmIEhFSU1EQUwKLSAgICAgICAg bGVuID0gbWUtPm5hbWUubmFtZV9zdHJpbmcubGVuOwotICAgICAgICBuYW1lID0gKm1lLT5uYW1l Lm5hbWVfc3RyaW5nLnZhbDsKLSNlbHNlIC8qIEhFSU1EQUwgKi8KLSAgICAgICAgbGVuID0ga3Ji NV9wcmluY19uYW1lKGtjb250ZXh0LCBtZSktPmxlbmd0aDsKLSAgICAgICAgbmFtZSA9IGtyYjVf cHJpbmNfbmFtZShrY29udGV4dCwgbWUpLT5kYXRhOwotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLSAg ICAgICAgaWYgKCBsZW4gPCBzaXplb2YocHJpbmNpcGFsKSApIHsKLSAgICAgICAgICAgIG1lbWNw eShwcmluY2lwYWwsbmFtZSxsZW4pOyAgICAgLyogc2FmZSAqLwotICAgICAgICAgICAgcHJpbmNp cGFsW2xlbl09J1wwJzsKLSAgICAgICAgfQotICAgIH0gLyogVXNlIHNwZWNpZmllZCBuYW1lICov Ci0gICAgZWxzZSB7Ci0gICAgICAgIGNoYXIgcHJpbmNfcmVhbG1bMjU2XTsKLSAgICAgICAgaWYg KCAoc3RybGVuKGluaXQtPnByaW5jaXBhbCkgKwotICAgICAgICAgICAgICAoaW5pdC0+aW5zdGFu Y2UgPyBzdHJsZW4oaW5pdC0+aW5zdGFuY2UpKzEgOiAwKSArCi0gICAgICAgICAgICAgIHN0cmxl bihyZWFsbSkKLSAgICAgICAgICAgICAgKyAyKSA+IDI1NSApCi0gICAgICAgICAgICAgZ290byBl eGl0X2s1X2luaXQ7Ci0KLSAgICAgICAgY2tzdHJuY3B5KHByaW5jaXBhbCxpbml0LT5wcmluY2lw YWwsMjU2KTsKLSAgICAgICAgY2tzdHJuY3B5KHByaW5jX3JlYWxtLGluaXQtPnByaW5jaXBhbCwy NTYpOwotICAgICAgICBpZiAoaW5pdC0+aW5zdGFuY2UpIHsKLSAgICAgICAgICAgIGNrc3RybmNh dChwcmluY19yZWFsbSwiLyIsMjU2KTsKLSAgICAgICAgICAgIGNrc3RybmNhdChwcmluY19yZWFs bSxpbml0LT5pbnN0YW5jZSwyNTYpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZWFsbVswXSkg ewotICAgICAgICAgIGNrc3RybmNhdChwcmluY19yZWFsbSwiQCIsMjU2KTsKLSAgICAgICAgICBj a3N0cm5jYXQocHJpbmNfcmVhbG0scmVhbG0sMjU2KTsKLSAgICAgICAgfQotICAgICAgICBpZiAo KGNvZGUgPSBrcmI1X3BhcnNlX25hbWUgKGtjb250ZXh0LCBwcmluY19yZWFsbSwgJm1lKSkpIHsK LSAgICAgICAgICAgIGNvbV9lcnIoImtyYjVfa2luaXQiLGNvZGUsIndoZW4gcGFyc2luZyBuYW1l IixwcmluY19yZWFsbSk7Ci0gICAgICAgICAgICBnb3RvIGV4aXRfazVfaW5pdDsKLSAgICAgICAg fQotICAgIH0KLQotICAgIGlmICgoY29kZSA9IGtyYjVfdW5wYXJzZV9uYW1lKGtjb250ZXh0LCBt ZSwgJmNsaWVudF9uYW1lKSkpIHsKLSAgICAgICAgY29tX2Vycigia3JiNV9raW5pdCIsY29kZSwi d2hlbiB1bnBhcnNpbmcgbmFtZSIpOwotICAgICAgICBnb3RvIGV4aXRfazVfaW5pdDsKLSAgICB9 Ci0gICAgZGVidWcoRjExMCwia3JiNV9pbml0IGNsaWVudF9uYW1lIixjbGllbnRfbmFtZSwwKTsK LQotCi0gICAgbWVtc2V0KChjaGFyICopJm15X2NyZWRzLCAwLCBzaXplb2YobXlfY3JlZHMpKTsK LSAgICBteV9jcmVkcy5jbGllbnQgPSBtZTsKLQotICAgIGlmIChpbml0LT5zZXJ2aWNlID09IE5V TEwpIHsKLSAgICAgICAgaWYgKChjb2RlID0KLSAgICAgICAgICAgICBrcmI1X2J1aWxkX3ByaW5j aXBhbF9leHQoa2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZzZXJ2ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihy ZWFsbSkscmVhbG0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRndG5h bWUubGVuZ3RoLCB0Z3RuYW1lLmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cmxlbihyZWFsbSkscmVhbG0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDApKSkgewotICAgICAgICAgICAgY29tX2Vycigia3JiNV9raW5pdCIsY29kZSwi d2hpbGUgYnVpbGRpbmcgc2VydmVyIG5hbWUiKTsKLSAgICAgICAgICAgIGdvdG8gZXhpdF9rNV9p bml0OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGNvZGUgPSBrcmI1X3Bh cnNlX25hbWUoa2NvbnRleHQsIGluaXQtPnNlcnZpY2UsICZzZXJ2ZXIpKSB7Ci0gICAgICAgICAg ICBjb21fZXJyKCJrcmI1X2tpbml0Iixjb2RlLCJ3aGlsZSBwYXJzaW5nIHNlcnZpY2UgbmFtZSIs Ci0gICAgICAgICAgICAgICAgICAgIGluaXQtPnNlcnZpY2UpOwotICAgICAgICAgICAgZ290byBl eGl0X2s1X2luaXQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBteV9jcmVkcy5zZXJ2ZXIgPSBz ZXJ2ZXI7Ci0KLSAgICBpZiAob3B0aW9ucyAmIEtEQ19PUFRfUE9TVERBVEVEKSB7Ci0gICAgICAg IG15X2NyZWRzLnRpbWVzLnN0YXJ0dGltZSA9IHN0YXJ0dGltZTsKLSAgICAgICAgbXlfY3JlZHMu dGltZXMuZW5kdGltZSA9IHN0YXJ0dGltZSArIGxpZmV0aW1lOwotICAgIH0gZWxzZSB7Ci0gICAg ICAgIG15X2NyZWRzLnRpbWVzLnN0YXJ0dGltZSA9IDA7ICAgLyogc3RhcnQgdGltZXIgd2hlbiBy ZXF1ZXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0cyB0 byBLREMgKi8KLSAgICAgICAgbXlfY3JlZHMudGltZXMuZW5kdGltZSA9IG5vdyArIGxpZmV0aW1l OwotICAgIH0KLSAgICBpZiAob3B0aW9ucyAmIEtEQ19PUFRfUkVORVdBQkxFKSB7Ci0gICAgICAg IG15X2NyZWRzLnRpbWVzLnJlbmV3X3RpbGwgPSBub3cgKyBybGlmZTsKLSAgICB9IGVsc2UKLSAg ICAgICAgbXlfY3JlZHMudGltZXMucmVuZXdfdGlsbCA9IDA7Ci0KLSAgICBpZiAob3B0aW9ucyAm IEtEQ19PUFRfVkFMSURBVEUpIHsKLSAgICAgICAga3JiNV9kYXRhIG91dGJ1ZjsKLQotI2lmZGVm IEtSQjVfSEFWRV9HRVRfSU5JVF9DUkVEUwotICAgICAgICBjb2RlID0ga3JiNV9nZXRfdmFsaWRh dGVkX2NyZWRzKGtjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZteV9jcmVkcywgbWUsIGNjYWNoZSwgaW5pdC0+c2VydmljZSk7Ci0gICAgICAgIGlmICgg Y29kZSA9PSAtMSApCi0jZW5kaWYKLSAgICAgICAgewotI2lmZGVmIEhFSU1EQUwKLSAgICAgICAg ICAgIHByaW50ZigiP3ZhbGlkYXRlIG5vdCBpbXBsZW1lbnRlZFxyXG4iKTsKLSAgICAgICAgICAg IGNvZGUgPSAtMTsKLSAgICAgICAgICAgIGdvdG8gZXhpdF9rNV9pbml0OwotI2Vsc2UgLyogSEVJ TURBTCAqLwotICAgICAgICAgICAgY29kZSA9IGtyYjVfdmFsaWRhdGVfdGd0KGtjb250ZXh0LCBj Y2FjaGUsIHNlcnZlciwgJm91dGJ1Zik7Ci0jZW5kaWYgLyogSEVJTURBTCAqLwotICAgICAgICB9 Ci0gICAgICAgIGlmIChjb2RlKSB7Ci0gICAgICAgICAgICBjb21fZXJyKCJrcmI1X2tpbml0Iixj b2RlLCJ2YWxpZGF0aW5nIHRndCIpOwotICAgICAgICAgICAgZ290byBleGl0X2s1X2luaXQ7Ci0g ICAgICAgIH0KLSAgICAgICAgLyogc2hvdWxkIGJlIGRvbmUuLi4gKi8KLSAgICAgICAgZ290byBl eGl0X2s1X2luaXQ7Ci0gICAgfQotCi0gICAgaWYgKG9wdGlvbnMgJiBLRENfT1BUX1JFTkVXKSB7 Ci0gICAgICAgIGtyYjVfZGF0YSBvdXRidWY7Ci0KLSNpZmRlZiBLUkI1X0hBVkVfR0VUX0lOSVRf Q1JFRFMKLSAgICAgICAgY29kZSA9IGtyYjVfZ2V0X3JlbmV3ZWRfY3JlZHMoa2NvbnRleHQsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZteV9jcmVkcywgbWUsIGNjYWNo ZSwgaW5pdC0+c2VydmljZSk7Ci0gICAgICAgIGlmICggY29kZSA9PSAtMSApCi0jZW5kaWYKLSAg ICAgICAgewotI2lmZGVmIEhFSU1EQUwKLSAgICAgICAgICAgIHByaW50ZigiP3JlbmV3IG5vdCBp bXBsZW1lbnRlZFxyXG4iKTsKLSAgICAgICAgICAgIGNvZGUgPSAtMTsKLSAgICAgICAgICAgIGdv dG8gZXhpdF9rNV9pbml0OwotI2Vsc2UgLyogSEVJTURBTCAqLwotICAgICAgICAgICAgY29kZSA9 IGtyYjVfcmVuZXdfdGd0KGtjb250ZXh0LCBjY2FjaGUsIHNlcnZlciwgJm91dGJ1Zik7Ci0jZW5k aWYgLyogSEVJTURBTCAqLwotICAgICAgICB9Ci0gICAgICAgIGlmIChjb2RlKSB7Ci0gICAgICAg ICAgICBjb21fZXJyKCJrcmI1X2tpbml0Iixjb2RlLCJ3aGlsZSByZW5ld2luZyB0Z3QiKTsKLSAg ICAgICAgICAgIGdvdG8gZXhpdF9rNV9pbml0OwotICAgICAgICB9Ci0gICAgICAgIC8qIHNob3Vs ZCBiZSBkb25lLi4uICovCi0gICAgICAgIGdvdG8gc3RvcmVfY3JlZDsKLSAgICB9Ci0KLSNpZm5k ZWYgSEVJTURBTAotICAgIGlmICggaW5pdC0+YWRkcnMgJiYgIWluaXQtPm5vX2FkZHJlc3NlcyAp IHsKLSAgICAgICAgLyogY29uc3RydWN0IGFuIGFycmF5IG9mIGtyYjVfYWRkcmVzcyBzdHJ1Y3Rz IHRvIHBhc3MgdG8gZ2V0X2luX3RrdCAqLwotICAgICAgICAvKiBpbmNsdWRlIGJvdGggdGhlIGxv Y2FsIGlwIGFkZHJlc3NlcyBhcyB3ZWxsIGFzIGFueSBvdGhlciB0aGF0ICAgICovCi0gICAgICAg IC8qIGFyZSBzcGVjaWZpZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKi8KLSAgICAgICAgdW5zaWduZWQgbG9uZyBpcGFkZHI7Ci0KLSAgICAgICAg Zm9yICggYWRkcl9jb3VudD0wO2FkZHJfY291bnQ8S1JCNV9OVU1fT0ZfQUREUlM7YWRkcl9jb3Vu dCsrICkKLSAgICAgICAgICAgIGlmICggaW5pdC0+YWRkcnNbYWRkcl9jb3VudF0gPT0gTlVMTCAp Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaWYgKGFkZHJfY291bnQgPiAwKSB7 Ci0gICAgICAgICAgICBrcmI1X2FkZHJlc3MgKiogbG9jYWxfYWRkcnM9TlVMTDsKLSAgICAgICAg ICAgIGtyYjVfb3NfbG9jYWxhZGRyKGtjb250ZXh0LCAmbG9jYWxfYWRkcnMpOwotICAgICAgICAg ICAgaSA9IDA7Ci0gICAgICAgICAgICB3aGlsZSAoIGxvY2FsX2FkZHJzW2ldICkKLSAgICAgICAg ICAgICAgICBpKys7Ci0gICAgICAgICAgICBhZGRyX2NvdW50ICs9IGk7Ci0KLSAgICAgICAgICAg IGFkZHJzID0gKGtyYjVfYWRkcmVzcyAqKikKLSAgICAgICAgICAgICAgbWFsbG9jKChhZGRyX2Nv dW50KzEpICogc2l6ZW9mKGtyYjVfYWRkcmVzcyAqKSk7Ci0gICAgICAgICAgICBpZiAoICFhZGRy cyApIHsKLSAgICAgICAgICAgICAgICBrcmI1X2ZyZWVfYWRkcmVzc2VzKGtjb250ZXh0LCBsb2Nh bF9hZGRycyk7Ci0gICAgICAgICAgICAgICAgZ290byBleGl0X2s1X2luaXQ7Ci0gICAgICAgICAg ICB9Ci0gICAgICAgICAgICBtZW1zZXQoYWRkcnMsIDAsIHNpemVvZihrcmI1X2FkZHJlc3MgKikg KiAoYWRkcl9jb3VudCsxKSk7Ci0gICAgICAgICAgICBpID0gMDsKLSAgICAgICAgICAgIHdoaWxl ICggbG9jYWxfYWRkcnNbaV0gKSB7Ci0gICAgICAgICAgICAgICAgYWRkcnNbaV0gPSAoa3JiNV9h ZGRyZXNzICopbWFsbG9jKHNpemVvZihrcmI1X2FkZHJlc3MpKTsKLSAgICAgICAgICAgICAgICBp ZiAoYWRkcnNbaV0gPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBrcmI1X2ZyZWVfYWRk cmVzc2VzKGtjb250ZXh0LCBsb2NhbF9hZGRycyk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8g ZXhpdF9rNV9pbml0OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGFkZHJz W2ldLT5tYWdpYyA9IGxvY2FsX2FkZHJzW2ldLT5tYWdpYzsKLSAgICAgICAgICAgICAgICBhZGRy c1tpXS0+YWRkcnR5cGUgPSBsb2NhbF9hZGRyc1tpXS0+YWRkcnR5cGU7Ci0gICAgICAgICAgICAg ICAgYWRkcnNbaV0tPmxlbmd0aCA9IGxvY2FsX2FkZHJzW2ldLT5sZW5ndGg7Ci0gICAgICAgICAg ICAgICAgYWRkcnNbaV0tPmNvbnRlbnRzID0gKHVuc2lnbmVkIGNoYXIgKiltYWxsb2MoYWRkcnNb aV0tPmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFhZGRyc1tpXS0+Y29udGVudHMpIHsK LSAgICAgICAgICAgICAgICAgICAga3JiNV9mcmVlX2FkZHJlc3NlcyhrY29udGV4dCwgbG9jYWxf YWRkcnMpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXRfazVfaW5pdDsKLSAgICAgICAg ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBtZW1jcHkoYWRkcnNbaV0tPmNvbnRlbnRzLGxv Y2FsX2FkZHJzW2ldLT5jb250ZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2Fk ZHJzW2ldLT5sZW5ndGgpOyAgICAgICAgLyogc2FmZSAqLwotICAgICAgICAgICAgICAgIGkrKzsK LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGtyYjVfZnJlZV9hZGRyZXNzZXMoa2NvbnRleHQs IGxvY2FsX2FkZHJzKTsKLQotICAgICAgICAgICAgZm9yICggaj0wO2k8YWRkcl9jb3VudDtpKyss aisrICkgewotICAgICAgICAgICAgICAgIGFkZHJzW2ldID0gKGtyYjVfYWRkcmVzcyAqKW1hbGxv YyhzaXplb2Yoa3JiNV9hZGRyZXNzKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFkZHJzW2ldID09 IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdF9rNV9pbml0OwotCi0gICAgICAg ICAgICAgICAgYWRkcnNbaV0tPm1hZ2ljID0gS1Y1TV9BRERSRVNTOwotICAgICAgICAgICAgICAg IGFkZHJzW2ldLT5hZGRydHlwZSA9IEFGX0lORVQ7Ci0gICAgICAgICAgICAgICAgYWRkcnNbaV0t Pmxlbmd0aCA9IDQ7Ci0gICAgICAgICAgICAgICAgYWRkcnNbaV0tPmNvbnRlbnRzID0gKHVuc2ln bmVkIGNoYXIgKiltYWxsb2MoYWRkcnNbaV0tPmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgaWYg KCFhZGRyc1tpXS0+Y29udGVudHMpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdF9rNV9p bml0OwotCi0gICAgICAgICAgICAgICAgaXBhZGRyID0gaW5ldF9hZGRyKGluaXQtPmFkZHJzW2pd KTsKLSAgICAgICAgICAgICAgICBtZW1jcHkoYWRkcnNbaV0tPmNvbnRlbnRzLCZpcGFkZHIsNCk7 ICAgLyogc2FmZSAqLwotICAgICAgICAgICAgfQotI2lmZGVmIEtSQjVfSEFWRV9HRVRfSU5JVF9D UkVEUwotICAgICAgICAgICAga3JiNV9nZXRfaW5pdF9jcmVkc19vcHRfc2V0X2FkZHJlc3NfbGlz dCgmb3B0cyxhZGRycyk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgICB9Ci0jZW5kaWYgLyogIUhF SU1EQUwgKi8KLSNpZmRlZiBLUkI1X0hBVkVfR0VUX0lOSVRfQ1JFRFMKLSAgICBpZiAoIGluaXQt Pm5vX2FkZHJlc3NlcyApCi0gICAgICAgIGtyYjVfZ2V0X2luaXRfY3JlZHNfb3B0X3NldF9hZGRy ZXNzX2xpc3QoJm9wdHMsTlVMTCk7Ci0jZW5kaWYKLQotI2lmbmRlZiBOT19LRVlUQUIKLSAgICBp ZiAoIXVzZV9rZXl0YWIpCi0jZW5kaWYKLSAgICB7Ci0gICAgICAgIGlmICggaW5pdC0+cGFzc3dv cmQgKSB7Ci0gICAgICAgICAgICBwd3NpemUgPSBzdHJsZW4oaW5pdC0+cGFzc3dvcmQpOwotICAg ICAgICAgICAgaWYgKCBwd3NpemUgKQotICAgICAgICAgICAgICAgIHBhc3N3b3JkID0gaW5pdC0+ cGFzc3dvcmQ7Ci0gICAgICAgIH0gZWxzZSBpZiAoaW5pdC0+Z2V0azQgJiYgazRfaW5pdCkgewot ICAgICAgICAgICAgLyogV2hlbiB3ZSBhcmUgcmVxdWVzdGluZyB0aGF0IEs0IHRpY2tldHMgYmUg YXV0b21hdGljYWxseSAqLwotICAgICAgICAgICAgLyogYWNxdWlyZWQgd2hlbiBLNSB0aWNrZXRz IGFyZSBhY3F1aXJlZCwgd2UgbXVzdCBnZXQgdGhlICAqLwotICAgICAgICAgICAgLyogcGFzc3dv cmQgdXAgZnJvbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAg ICAgICAgICAgY2hhciBwcm1wdFsyNTZdOwotICAgICAgICAgICAgZXh0ZXJuIGNoYXIgKiBrNXBy cHJvbXB0OwotICAgICAgICAgICAgZXh0ZXJuIGNoYXIgKiBrNXB3cHJvbXB0OwotICAgICAgICAg ICAgaW50IG9rID0gMDsKLQotICAgICAgICAgICAgaWYgKCBrNXB3cHJvbXB0ICYmIGs1cHdwcm9t cHRbMF0gJiYKLSAgICAgICAgICAgICAgICAgKHN0cmxlbihrNXB3cHJvbXB0KSArIHN0cmxlbihw cmluY2lwYWwpICsKLSAgICAgICAgICAgICAgICAgIHN0cmxlbihyZWFsbSkgLSA0KSA8IHNpemVv Zihwcm1wdCkpIHsKLSAgICAgICAgICAgICAgICBzcHJpbnRmKHBybXB0LGs1cHdwcm9tcHQscHJp bmNpcGFsLHJlYWxtKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGNrbWFr eG1zZyhwcm1wdCxzaXplb2YocHJtcHQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgazVw d3Byb21wdCAmJiBrNXB3cHJvbXB0WzBdID8gazVwd3Byb21wdCA6Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAiS2VyYmVyb3MgNSBQYXNzd29yZCBmb3IgIiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgIHByaW5jaXBhbCwiQCIscmVhbG0sIjogIiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBvayA9IHVxX3R4dChOVUxMLHBybXB0LDIsTlVM TCxwYXNzd2QsODAsTlVMTCxERUZBVUxUX1VRX1RJTUVPVVQpOwotICAgICAgICAgICAgaWYgKCBv ayApCi0gICAgICAgICAgICAgICAgcGFzc3dvcmQgPSBwYXNzd2Q7Ci0KLSAgICAgICAgICAgIGlm ICggazRfaW5pdC0+cGFzc3dvcmQgPT0gTlVMTCApCi0gICAgICAgICAgICAgICAgbWFrZXN0cigm azRfaW5pdC0+cGFzc3dvcmQscGFzc3dkKTsKLSAgICAgICAgfQotI2lmZGVmIEtSQjVfSEFWRV9H RVRfSU5JVF9DUkVEUwotICAgICAgICBkZWJ1ZyhGMTAwLCJrcmI1X2luaXQgY2FsbGluZyBrcmI1 X2dldF9pbml0X2NyZWRzX3Bhc3N3b3JkKCkiLCIiLDApOwotI2lmZGVmIE9TMgotICAgICAgICBp ZiAoIGlzX05STF9LUkI1KCkgKQotICAgICAgICAgICAgY29kZSA9IGtyYjVfZ2V0X2luaXRfY3Jl ZHNfcGFzc3dvcmQoa2NvbnRleHQsICZteV9jcmVkcywgbWUsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilja19OUkxfa3JiNV9wcm9t cHRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO VUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 YXJ0dGltZSwgaW5pdC0+c2VydmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmb3B0cyk7Ci0gICAgICAgIGVsc2UKLSNlbmRpZiAvKiBPUzIgKi8K LSAgICAgICAgICAgIGNvZGUgPSBrcmI1X2dldF9pbml0X2NyZWRzX3Bhc3N3b3JkKGtjb250ZXh0 LCAmbXlfY3JlZHMsIG1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBhc3N3b3JkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNrX2tyYjVfcHJvbXB0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdGFydHRpbWUsIGluaXQtPnNlcnZpY2UsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wdHMpOwotICAgICAg ICBkZWJ1ZyhGMTExLCJrcmI1X2luaXQiLCJrcmI1X2dldF9pbml0X2NyZWRzX3Bhc3N3b3JkKCki LGNvZGUpOwotCi0gICAgICAgIGlmICggY29kZSA9PSAtMSApCi0gICAgICAgIHsKLSAgICAgICAg ICAgIGlmICghcGFzc3dvcmQpIHsKLSAgICAgICAgICAgICAgICBjaGFyIHBybXB0WzI1Nl07Ci0g ICAgICAgICAgICAgICAgaW50IG9rOwotCi0gICAgICAgICAgICAgICAgY2ttYWttc2cocHJtcHQs c2l6ZW9mKHBybXB0KSwiS2VyYmVyb3MgNSBQYXNzd29yZCBmb3IgIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgY2xpZW50X25hbWUsIjogIixOVUxMKTsKLSAgICAgICAgICAgICAgICBvayA9 IHVxX3R4dChOVUxMLHBybXB0LDIsTlVMTCxwYXNzd2QsODAsTlVMTCwKLQkJCSAgICBERUZBVUxU X1VRX1RJTUVPVVQpOwotICAgICAgICAgICAgICAgIGlmICggb2sgKQotICAgICAgICAgICAgICAg ICAgICBwYXNzd29yZCA9IHBhc3N3ZDsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg ICAgICAgICAgICAgY29kZSA9IC0yOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXRfazVf aW5pdDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm ICggIXBhc3N3b3JkICkgCi0gICAgICAgICAgICAgICAgcGFzc3dvcmQgPSAiIjsKLSAgICAgICAg ICAgIGNvZGUgPSBrcmI1X2dldF9pbl90a3Rfd2l0aF9wYXNzd29yZChrY29udGV4dCwgb3B0aW9u cywKLSNpZmRlZiBIRUlNREFMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE5VTEwsCi0jZWxzZSAvKiBIRUlNREFMICovCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXQtPm5vX2FkZHJlc3NlcyA/IE5VTEwgOmFk ZHJzLAotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICZteV9jcmVkcywgTlVMTCk7Ci0g ICAgICAgICAgICBpZiAoIGNvZGUgKQotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImtyYjVf aW5pdCIsImtyYjVfZ2V0X2luX3RrdF93aXRoX3Bhc3N3b3JkKCkiLGNvZGUpOwotICAgICAgICB9 Ci0jZWxzZSAvKiBLUkI1X0hBVkVfR0VUX0lOSVRfQ1JFRFMgKi8KLSAgICAgICAgaWYgKCFwYXNz d29yZCkgewotICAgICAgICAgICAgY2hhciBwcm1wdFsyNTZdOwotICAgICAgICAgICAgaW50IG9r OwotCi0gICAgICAgICAgICBja21ha21zZyhwcm1wdCxzaXplb2YocHJtcHQpLCJLZXJiZXJvcyA1 IFBhc3N3b3JkIGZvciAiLAotICAgICAgICAgICAgICAgICAgICAgIGNsaWVudF9uYW1lLCI6ICIs TlVMTCk7Ci0gICAgICAgICAgICBvayA9IHVxX3R4dChOVUxMLHBybXB0LDIsTlVMTCxwYXNzd2Qs ODAsTlVMTCxERUZBVUxUX1VRX1RJTUVPVVQpOwotICAgICAgICAgICAgaWYgKCBvayApCi0gICAg ICAgICAgICAgICAgcGFzc3dvcmQgPSBwYXNzd2Q7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAg ICAgICAgICAgICBjb2RlID0gLTI7Ci0gICAgICAgICAgICAgICAgZ290byBleGl0X2s1X2luaXQ7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCAhcGFzc3dvcmQgKSAKLSAg ICAgICAgICAgIHBhc3N3b3JkID0gIiI7Ci0gICAgICAgIGNvZGUgPSBrcmI1X2dldF9pbl90a3Rf d2l0aF9wYXNzd29yZChrY29udGV4dCwgb3B0aW9ucywKLSNpZmRlZiBIRUlNREFMCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSNlbHNlIC8qIEhF SU1EQUwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5p dC0+bm9fYWRkcmVzc2VzID8gTlVMTCA6YWRkcnMsCi0jZW5kaWYgLyogSEVJTURBTCAqLwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgJm15X2Ny ZWRzLCBOVUxMKTsKLSAgICAgICAgaWYgKCBjb2RlICkKLSAgICAgICAgICAgIGRlYnVnKEYxMTEs ImtyYjVfaW5pdCIsImtyYjVfZ2V0X2luX3RrdF93aXRoX3Bhc3N3b3JkKCkiLGNvZGUpOwotI2Vu ZGlmIC8qIEtSQjVfSEFWRV9HRVRfSU5JVF9DUkVEUyAqLwotCi0gICAgICAgIGlmICggaW5pdC0+ cGFzc3dvcmQgJiYgcHdzaXplID4gMCApCi0gICAgICAgICAgICBtZW1zZXQoaW5pdC0+cGFzc3dv cmQsIDAsIHB3c2l6ZSk7Ci0gICAgICAgIG1lbXNldChwYXNzd2QsMCw4MCk7Ci0gICAgfQotI2lm bmRlZiBOT19LRVlUQUIKLSAgICBlbHNlIHsKLSNpZmRlZiBLUkI1X0hBVkVfR0VUX0lOSVRfQ1JF RFMKLSAgICAgICAgY29kZSA9IGtyYjVfZ2V0X2luaXRfY3JlZHNfa2V5dGFiKGtjb250ZXh0LCAm bXlfY3JlZHMsIG1lLCBrZXl0YWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RhcnR0aW1lLCBpbml0LT5zZXJ2aWNlLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZvcHRzKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgaWYgKCBj b2RlID09IC0xKQotICAgICAgICAgICAgY29kZSA9IGtyYjVfZ2V0X2luX3RrdF93aXRoX2tleXRh YihrY29udGV4dCwgb3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbml0LT5ub19hZGRyZXNzZXMgPyBOVUxMIDphZGRycywKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIGtleXRhYiwgTlVM TCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZteV9j cmVkcywgMCk7Ci0jZW5kaWYgLyogT1MyICovCi0jZWxzZSAvKiBLUkI1X0hBVkVfR0VUX0lOSVRf Q1JFRFMgKi8KLSAgICAgICAgY29kZSA9IGtyYjVfZ2V0X2luX3RrdF93aXRoX2tleXRhYihrY29u dGV4dCwgb3B0aW9ucywKLSNpZmRlZiBIRUlNREFMCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0jZWxzZSAvKiBIRUlNREFMICovCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXQtPm5vX2FkZHJlc3Nl cyA/IE5VTEwgOmFkZHJzLAotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwga2V5dGFiLCBOVUxMLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbXlfY3JlZHMsIDApOwot I2VuZGlmIC8qIEtSQjVfSEFWRV9HRVRfSU5JVF9DUkVEUyAqLwotICAgIH0KLSNlbmRpZgotCi0g ICAgaWYgKGNvZGUpIHsKLSAgICAgICAgc3dpdGNoIChjb2RlKSB7Ci0gICAgICAgIGNhc2UgS1JC NUtSQl9BUF9FUlJfQkFEX0lOVEVHUklUWToKLSAgICAgICAgICAgIHByaW50ZigiUGFzc3dvcmQg aW5jb3JyZWN0XHJcbiIpOwotICAgICAgICAgICAgZ290byBleGl0X2s1X2luaXQ7Ci0gICAgICAg IGNhc2UgS1JCNUtSQl9BUF9FUlJfVjRfUkVQTFk6Ci0gICAgICAgICAgICBpZiAoaW5pdC0+Z2V0 azQgJiYgazRfaW5pdCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiS2VyYmVyb3MgNSBUaWNr ZXRzIG5vdCBzdXBwb3J0IGJ5IHNlcnZlci4gICIpOwotICAgICAgICAgICAgICAgIHByaW50Zigi QSB2ZXJzaW9uIDQgVGlja2V0IHdpbGwgYmUgcmVxdWVzdGVkLlxyXG4iKTsKLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIGdvdG8gZXhpdF9rNV9pbml0OwotICAgICAgICBkZWZhdWx0OgotICAg ICAgICAgICAgZ290byBleGl0X2s1X2luaXQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgc3RvcmVf Y3JlZDoKLSAgICBkZWJ1ZyhGMTAwLCJrcmI1X2luaXQgY2FsbGluZyBrcmI1X2NjX2luaXRpYWxp emUoKSIsIiIsMCk7Ci0KLSAgICBjb2RlID0ga3JiNV9jY19pbml0aWFsaXplIChrY29udGV4dCwg Y2NhY2hlLCBtZSk7Ci0gICAgaWYgKCBjb2RlID09IEtSQjVfQ0NfQkFETkFNRSApIHsKLSAgICAg ICAgLyogVGhpcyBpcyBhIHJlYWxseSB1Z2x5IGhhY2sgdGhhdCBzaG91bGQgbm90IGhhdmUgdG8g YmUgaGVyZS4KLSAgICAgICAgICoga3JiNV9jY19pbml0aWFsaXplIHNob3VsZCBub3QgZmFpbCB3 aXRoIGFuIGVycm9yIGlmIHRoZQotICAgICAgICAgKiBjYWNoZSBhbHJlYWR5IGV4aXN0cy4gIFRo ZSByZWFzb24gdGhlIHByb2JsZW0gaXMgb2NjdXJpbmcKLSAgICAgICAgICogaXMgdGhhdCB0aGUg a3JiNSBsaWJyYXJ5IGlzIG5vIGxvbmdlciBjYWxsaW5nIGNjX2Rlc3Ryb3koKQotICAgICAgICAg KiB3aGVuIGNjX2luaXRpYWxpemUoKSBpcyBjYWxsZWQgYW5kIHRoZSBDQ0FQSSBpbXBsZW1lbnRh dGlvbgotICAgICAgICAgKiBvbiBXaW5kb3dzIGhhcyBub3QgeWV0IGJlZW4gY29ycmVjdGVkIHRv IGhhbmRsZSBpdC4gIFRvCi0gICAgICAgICAqIGVuc3VyZSB0aGF0IEs5NSB3aWxsIGNvbnRpbnVl IHRvIHdvcmsgd2l0aCBib3RoIHdlIHdpbGwgY2FsbAotICAgICAgICAgKiBjY19kZXN0cm95KCkg aWYgdGhlIGNjX2luaXRpYWxpemUoKSBjYWxsIGZhaWxzIHdpdGggYSBCQUROQU1FCi0gICAgICAg ICAqIGVycm9yLiAgSWYgdGhlIGNjX2Rlc3Ryb3koKSBpcyBzdWNjZXNzZnVsLCB3ZSB3aWxsIHRy eSBhZ2Fpbi4KLSAgICAgICAgICovCi0KLSAgICAgICAgZGVidWcoRjEwMCwia3JiNV9pbml0IGNh bGxpbmcga3JiNV9jY19kZXN0cm95KCkiLCIiLDApOwotICAgICAgICBjb2RlID0ga3JiNV9jY19k ZXN0cm95IChrY29udGV4dCwgY2NhY2hlKTsKLSAgICAgICAgaWYgKCAhY29kZSApIHsKLSAgICAg ICAgICAgIGRlYnVnKEYxMDAsImtyYjVfaW5pdCBjYWxsaW5nIGs1X2dldF9jY2FjaGUoKSIsIiIs MCk7Ci0gICAgICAgICAgICBjb2RlID0gazVfZ2V0X2NjYWNoZShrY29udGV4dCwmY2NhY2hlLG9w LT5jYWNoZSk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJrcmI1X2luaXQgY2FsbGluZyBrcmI1 X2NjX2luaXRpYWxpemUoKSIsIiIsMCk7Ci0gICAgICAgICAgICBjb2RlID0ga3JiNV9jY19pbml0 aWFsaXplIChrY29udGV4dCwgY2NhY2hlLCBtZSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg ICAgY29kZSA9IEtSQjVfQ0NfQkFETkFNRTsKLSAgICB9Ci0gICAgaWYgKGNvZGUpIHsKLSAgICAg ICAgY29tX2Vycigia3JiNV9raW5pdCIsY29kZSwid2hlbiBpbml0aWFsaXppbmcgY2FjaGUiLG9w LT5jYWNoZSk7Ci0gICAgICAgIGdvdG8gZXhpdF9rNV9pbml0OwotICAgIH0KLQotICAgIGRlYnVn KEYxMDAsImtyYjVfaW5pdCBjYWxsaW5nIGtyYjVfY2Nfc3RvcmVfY3JlZCgpIiwiIiwwKTsKLSAg ICBjb2RlID0ga3JiNV9jY19zdG9yZV9jcmVkKGtjb250ZXh0LCBjY2FjaGUsICZteV9jcmVkcyk7 Ci0gICAgaWYgKGNvZGUpIHsKLSAgICAgICAgY29tX2Vycigia3JiNV9raW5pdCIsY29kZSwid2hp bGUgc3RvcmluZyBjcmVkZW50aWFscyIpOwotICAgICAgICBnb3RvIGV4aXRfazVfaW5pdDsKLSAg ICB9Ci0KLSAgICBpZiAoIGluaXQtPmdldGs0ICYmIAotI2lmZGVmIEtSQjUyNF9DT05WCi0gICAg ICAgICAhdHJ5X2NvbnZlcnQ1MjQoa2NvbnRleHQsbWUsY2NhY2hlKSAmJiAKLSNlbmRpZiAvKiBL UkI1MjRfQ09OViAqLwotICAgICAgICAgazRfaW5pdCApIHsKLSAgICAgICAgaW50IGs0cmMgPSBj a19rcmI0X2luaXRUR1Qob3AsazRfaW5pdCk7Ci0gICAgICAgIGlmIChrNHJjIDwgMCkKLSAgICAg ICAgICAgIGNvZGUgPSAtMzsKLSAgICB9Ci0KLWV4aXRfazVfaW5pdDoKLSAgICBkZWJ1ZyhGMTAw LCJrcmI1X2luaXQgZXhpdF9rNV9pbml0IiwiIiwwKTsKLQotI2lmbmRlZiBIRUlNREFMCi0gICAg LyogRnJlZSBrcmI1X2FkZHJlc3Mgc3RydWN0dXJlcyBpZiB3ZSBjcmVhdGVkIHRoZW0gKi8KLSAg ICBpZiAoIGFkZHJzICkgewotICAgICAgICBmb3IgKCBpPTA7aTxhZGRyX2NvdW50O2krKyApIHsK LSAgICAgICAgICAgIGlmICggYWRkcnNbaV0gKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBhZGRy c1tpXS0+Y29udGVudHMgKQotICAgICAgICAgICAgICAgICAgICBmcmVlKGFkZHJzW2ldLT5jb250 ZW50cyk7Ci0gICAgICAgICAgICAgICAgZnJlZShhZGRyc1tpXSk7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogSEVJTURBTCAqLwotCi0KLSAgICBrcmI1X2Vycm5v ID0gY29kZTsKLSAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxrcmI1X2Vycm5vID8gZXJyb3JfbWVz c2FnZShrcmI1X2Vycm5vKSA6ICJPSyIpOwotCi0gICAgaWYgKGNsaWVudF9uYW1lKQotICAgICAg ICBrcmI1X2ZyZWVfdW5wYXJzZWRfbmFtZShrY29udGV4dCwgY2xpZW50X25hbWUpOwotCi0gICAg LyogbXlfY3JlZHMgaXMgcG9pbnRpbmcgYXQgc2VydmVyICovCi0gICAgZGVidWcoRjEwMCwia3Ji NV9pbml0IGNhbGxpbmcga3JiNV9mcmVlX3ByaW5jaXBhbCgpIiwiIiwwKTsKLSAgICBrcmI1X2Zy ZWVfcHJpbmNpcGFsKGtjb250ZXh0LCBzZXJ2ZXIpOwotICAgIGRlYnVnKEYxMDAsImtyYjVfaW5p dCBjYWxsaW5nIGtyYjVfY2NfY2xvc2UoKSIsIiIsMCk7Ci0gICAga3JiNV9jY19jbG9zZShrY29u dGV4dCxjY2FjaGUpOwotICAgIGRlYnVnKEYxMDAsImtyYjVfaW5pdCBjYWxsaW5nIGtyYjVfZnJl ZV9jb250ZXh0KCkiLCIiLDApOwotICAgIGtyYjVfZnJlZV9jb250ZXh0KGtjb250ZXh0KTsKLQot ICAgIGlmIChjb2RlICE9IC0yKQotICAgICAgICBwcmludGYoIlJlc3VsdCBmcm9tIHJlYWxtICVz OiAlc1xyXG4iLHJlYWxtLAotICAgICAgICAgICAgICAgIGNvZGU9PS0zPyJVbmFibGUgdG8gcmV0 cmlldmUgS2VyYmVyb3MgSVYgY3JlZGVudGlhbHMiOgotICAgICAgICAgICAgICAgIGNvZGU/ZXJy b3JfbWVzc2FnZShjb2RlKToiT0siKTsKLSAgICByZXR1cm4oY29kZT8tMTowKTsKLX0KLQotI2lm bmRlZiBIRUlNREFMCi0jZGVmaW5lIFZBTElEQVRFIDAKLSNkZWZpbmUgUkVORVcgMQotCi0vKiBz dHJpcHBlZCBkb3duIHZlcnNpb24gb2Yga3JiNV9ta19yZXEgKi8KLXN0YXRpYyBrcmI1X2Vycm9y X2NvZGUKLSNpZmRlZiBDS19BTlNJQwota3JiNV92YWxpZGF0ZV90Z3QoIGtyYjVfY29udGV4dCBj b250ZXh0LAotICAgICAgICAgICAgICAgICAgIGtyYjVfY2NhY2hlIGNjYWNoZSwKLSAgICAgICAg ICAgICAgICAgICBrcmI1X3ByaW5jaXBhbCAgICAgc2VydmVyLCAvKiB0Z3RuYW1lICovCi0gICAg ICAgICAgICAgICAgICAga3JiNV9kYXRhICpvdXRidWYgKQotI2Vsc2UKLWtyYjVfdmFsaWRhdGVf dGd0KGNvbnRleHQsIGNjYWNoZSwgc2VydmVyLCBvdXRidWYpCi0gICAgIGtyYjVfY29udGV4dCBj b250ZXh0OwotICAgICBrcmI1X2NjYWNoZSBjY2FjaGU7Ci0gICAgIGtyYjVfcHJpbmNpcGFsICAg ICBzZXJ2ZXI7IC8qIHRndG5hbWUgKi8KLSAgICAga3JiNV9kYXRhICpvdXRidWY7Ci0jZW5kaWYK LXsKLSAgICByZXR1cm4ga3JiNV90Z3RfZ2VuKGNvbnRleHQsIGNjYWNoZSwgc2VydmVyLCBvdXRi dWYsIFZBTElEQVRFKTsKLX0KLQotLyogc3RyaXBwZWQgZG93biB2ZXJzaW9uIG9mIGtyYjVfbWtf cmVxICovCi1zdGF0aWMga3JiNV9lcnJvcl9jb2RlCi0jaWZkZWYgQ0tfQU5TSUMKLWtyYjVfcmVu ZXdfdGd0KGtyYjVfY29udGV4dCBjb250ZXh0LAotICAgICAgICAgICAgICAgIGtyYjVfY2NhY2hl IGNjYWNoZSwKLSAgICAgICAgICAgICAgICBrcmI1X3ByaW5jaXBhbCAgICBzZXJ2ZXIsIC8qIHRn dG5hbWUgKi8KLSAgICAgICAgICAgICAgICBrcmI1X2RhdGEgKm91dGJ1ZikKLSNlbHNlCi1rcmI1 X3JlbmV3X3RndChjb250ZXh0LCBjY2FjaGUsIHNlcnZlciwgb3V0YnVmKQotICAgICBrcmI1X2Nv bnRleHQgY29udGV4dDsKLSAgICAga3JiNV9jY2FjaGUgY2NhY2hlOwotICAgICBrcmI1X3ByaW5j aXBhbCAgICAgICBzZXJ2ZXI7IC8qIHRndG5hbWUgKi8KLSAgICAga3JiNV9kYXRhICpvdXRidWY7 Ci0jZW5kaWYKLXsKLSAgICByZXR1cm4ga3JiNV90Z3RfZ2VuKGNvbnRleHQsIGNjYWNoZSwgc2Vy dmVyLCBvdXRidWYsIFJFTkVXKTsKLX0KLQotCi0vKiBzdHJpcHBlZCBkb3duIHZlcnNpb24gb2Yg a3JiNV9ta19yZXEgKi8KLXN0YXRpYyBrcmI1X2Vycm9yX2NvZGUKLSNpZmRlZiBDS19BTlNJQwot a3JiNV90Z3RfZ2VuKGtyYjVfY29udGV4dCBjb250ZXh0LAotICAgICAgICAgICAgICBrcmI1X2Nj YWNoZSBjY2FjaGUsCi0gICAgICAgICAgICAgIGtyYjVfcHJpbmNpcGFsICAgICAgc2VydmVyLCAv KiB0Z3RuYW1lICovCi0gICAgICAgICAgICAgIGtyYjVfZGF0YSAqb3V0YnVmLAotICAgICAgICAg ICAgICBpbnQgb3B0KQotI2Vsc2UKLWtyYjVfdGd0X2dlbihjb250ZXh0LCBjY2FjaGUsIHNlcnZl ciwgb3V0YnVmLCBvcHQpCi0gICAgIGtyYjVfY29udGV4dCBjb250ZXh0OwotICAgICBrcmI1X2Nj YWNoZSBjY2FjaGU7Ci0gICAgIGtyYjVfcHJpbmNpcGFsICAgICAgIHNlcnZlcjsgLyogdGd0bmFt ZSAqLwotICAgICBrcmI1X2RhdGEgKm91dGJ1ZjsKLSAgICAgaW50IG9wdDsKLSNlbmRpZgotewot ICAgIGtyYjVfZXJyb3JfY29kZSAgICAgICByZXR2YWw7Ci0gICAga3JiNV9jcmVkcyAgICAgICAg ICAqIGNyZWRzcDsKLSAgICBrcmI1X2NyZWRzICAgICAgICAgICAgY3JlZHM7Ci0KLSAgICAvKiBv YnRhaW4gdGlja2V0ICYgc2Vzc2lvbiBrZXkgKi8KLSAgICBtZW1zZXQoKGNoYXIgKikmY3JlZHMs IDAsIHNpemVvZihjcmVkcykpOwotICAgIGlmICgocmV0dmFsID0ga3JiNV9jb3B5X3ByaW5jaXBh bChjb250ZXh0LCBzZXJ2ZXIsICZjcmVkcy5zZXJ2ZXIpKSkKLSAgICAgICAgZ290byBjbGVhbnVw OwotCi0gICAgaWYgKChyZXR2YWwgPSBrcmI1X2NjX2dldF9wcmluY2lwYWwoY29udGV4dCwgY2Nh Y2hlLCAmY3JlZHMuY2xpZW50KSkpCi0gICAgICAgIGdvdG8gY2xlYW51cF9jcmVkczsKLQotICAg IGlmIChvcHQgPT0gVkFMSURBVEUpIHsKLSAgICAgICAgaWYgKChyZXR2YWwgPSBrcmI1X2dldF9j cmVkZW50aWFsc192YWxpZGF0ZShjb250ZXh0LCAwLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNjYWNoZSwgJmNyZWRzLCAmY3JlZHNwKSkpCi0g ICAgICAgICAgZ290byBjbGVhbnVwX2NyZWRzOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICgo cmV0dmFsID0ga3JiNV9nZXRfY3JlZGVudGlhbHNfcmVuZXcoY29udGV4dCwgMCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjY2FjaGUsICZjcmVkcywg JmNyZWRzcCkpKQotICAgICAgICAgIGdvdG8gY2xlYW51cF9jcmVkczsKLSAgICB9Ci0KLSAgICAv KiB3ZSBkb24ndCBhY3R1YWxseSBuZWVkIHRvIGRvIHRoZSBta19yZXEsIGp1c3QgZ2V0IHRoZSBj cmVkcy4gKi8KLWNsZWFudXBfY3JlZHM6Ci0gICAga3JiNV9mcmVlX2NyZWRfY29udGVudHMoY29u dGV4dCwgJmNyZWRzKTsKLQotY2xlYW51cDoKLQotICAgIHJldHVybiByZXR2YWw7Ci19Ci0jZW5k aWYgLyogSEVJTURBTCAqLwotI2VuZGlmIC8qIEtJTklUICovCi0jaWZkZWYgS0RFU1RST1kKLWlu dAotI2lmZGVmIENLX0FOU0lDCi1ja19rcmI1X2Rlc3Ryb3koc3RydWN0IGtyYl9vcF9kYXRhICog b3ApCi0jZWxzZQotY2tfa3JiNV9kZXN0cm95KG9wKSBzdHJ1Y3Qga3JiX29wX2RhdGEgKiBvcDsK LSNlbmRpZgotewotICAgIGtyYjVfY29udGV4dCBrY29udGV4dDsKLSAgICBrcmI1X2Vycm9yX2Nv ZGUgcmV0dmFsOwotICAgIGludCBjOwotICAgIGtyYjVfY2NhY2hlIGNjYWNoZSA9IE5VTEw7Ci0g ICAgY2hhciAqY2FjaGVfbmFtZSA9IE5VTEw7Ci0gICAgaW50IGNvZGU7Ci0gICAgaW50IGVycmZs Zz0wOwotICAgIGludCBxdWlldCA9IDA7Ci0KLSAgICBpZiAoICFja19rcmI1X2lzX2luc3RhbGxl ZCgpICkKLSAgICAgICAgcmV0dXJuKC0xKTsKLQotICAgIGNvZGUgPSBrcmI1X2luaXRfY29udGV4 dCgma2NvbnRleHQpOwotICAgIGlmIChjb2RlKSB7Ci0gICAgICAgIGRlYnVnKEYxMDEsImNrX2ty YjVfZGVzdHJveSB3aGlsZSBpbml0aWFsaXppbmcga3JiNSIsIiIsY29kZSk7Ci0gICAgICAgIGty YjVfZXJybm8gPSBjb2RlOwotICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxlcnJvcl9tZXNz YWdlKGtyYjVfZXJybm8pKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAgICBjb2Rl ID0gazVfZ2V0X2NjYWNoZShrY29udGV4dCwmY2NhY2hlLG9wLT5jYWNoZSk7Ci0gICAgaWYgKGNv ZGUgIT0gMCkgewotICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X2Rlc3Ryb3kgd2hpbGUgZ2V0 dGluZyBjY2FjaGUiLAotICAgICAgICAgICAgICAgIiIsY29kZSk7Ci0gICAgICAgIGtyYjVfZnJl ZV9jb250ZXh0KGtjb250ZXh0KTsKLSAgICAgICAga3JiNV9lcnJubyA9IGNvZGU7Ci0gICAgICAg IG1ha2VzdHIoJmtyYjVfZXJybXNnLGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJubykpOwotICAgICAg ICByZXR1cm4oLTEpOwotICAgIH0KLQotICAgIGNvZGUgPSBrcmI1X2NjX2Rlc3Ryb3kgKGtjb250 ZXh0LCBjY2FjaGUpOwotICAgIGlmIChjb2RlICE9IDApIHsKLSAgICAgICAgZGVidWcoRjEwMSwi Y2tfa3JiNV9kZXN0cm95IHdoaWxlIGRlc3Ryb3lpbmcgY2FjaGUiLCIiLGNvZGUpOwotICAgICAg ICBpZiAoIGNvZGUgPT0gS1JCNV9GQ0NfTk9GSUxFICkKLSAgICAgICAgICAgIHByaW50ZigiTm8g dGlja2V0IGNhY2hlIHRvIGRlc3Ryb3kuXHJcbiIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg ICBwcmludGYoIlRpY2tldCBjYWNoZSBOT1QgZGVzdHJveWVkIVxyXG4iKTsKLSAgICAgICAga3Ji NV9jY19jbG9zZShrY29udGV4dCxjY2FjaGUpOwotICAgICAgICBrcmI1X2ZyZWVfY29udGV4dChr Y29udGV4dCk7Ci0gICAgICAgIGtyYjVfZXJybm8gPSBjb2RlOwotICAgICAgICBtYWtlc3RyKCZr cmI1X2Vycm1zZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKLSAgICAgICAgcmV0dXJuKC0x KTsKLSAgICB9Ci0KLSAgICBwcmludGYoIlRpY2tldHMgZGVzdHJveWVkLlxyXG4iKTsKLSAgICAv KiBEbyBub3QgY2FsbCBrcmI1X2NjX2Nsb3NlKCkgYmVjYXVzZSBjYWNoZSBoYXMgYmVlbiBkZXN0 cm95ZWQgKi8KLSAgICBrcmI1X2ZyZWVfY29udGV4dChrY29udGV4dCk7Ci0gICAga3JiNV9lcnJu byA9IDA7Ci0gICAgbWFrZXN0cigma3JiNV9lcnJtc2csIk9LIik7Ci0gICAgcmV0dXJuICgwKTsK LX0KLSNlbHNlIC8qIEtERVNUUk9ZICovCi0jaWZkZWYgS1JCNQotaW50Ci0jaWZkZWYgQ0tfQU5T SUMKLWNrX2tyYjVfZGVzdHJveShzdHJ1Y3Qga3JiX29wX2RhdGEgKiBvcCkKLSNlbHNlCi1ja19r cmI1X2Rlc3Ryb3kob3ApIHN0cnVjdCBrcmJfb3BfZGF0YSAqIG9wOwotI2VuZGlmCi17Ci0gICAg cHJpbnRmKCI/Tm90IGltcGxlbWVudGVkLlxyXG4iKTsKLSAgICByZXR1cm4oLTEpOwotfQotI2Vu ZGlmIC8qIEtSQjUgKi8KLSNlbmRpZiAvKiBLREVTVFJPWSAqLwotI2lmbmRlZiBLTElTVAotI2lm ZGVmIEtSQjUKLWludAotI2lmZGVmIENLX0FOU0lDCi1ja19rcmI1X2xpc3RfY3JlZHMoc3RydWN0 IGtyYl9vcF9kYXRhICogb3AsIHN0cnVjdCBrcmI1X2xpc3RfY3JlZF9kYXRhICogbGMpCi0jZWxz ZQotY2tfa3JiNV9saXN0X2NyZWRzKG9wLGxjKQotICAgIHN0cnVjdCBrcmJfb3BfZGF0YSAqIG9w OyBzdHJ1Y3Qga3JiNV9saXN0X2NyZWRfZGF0YSAqIGxjOwotI2VuZGlmCi17Ci0gICAgcHJpbnRm KCI/Tm90IGltcGxlbWVudGVkLlxyXG4iKTsKLSAgICByZXR1cm4oLTEpOwotfQotI2VuZGlmIC8q IEtSQjUgKi8KLSNlbHNlIC8qIEtMSVNUICovCi1zdGF0aWMgaW50IHNob3dfZmxhZ3MgPSAwLCBz aG93X3RpbWUgPSAwLCBzdGF0dXNfb25seSA9IDAsIHNob3dfa2V5cyA9IDA7Ci1zdGF0aWMgaW50 IHNob3dfZXR5cGUgPSAwLCBzaG93X2FkZHIgPSAwOwotc3RhdGljIGNoYXIgKmRlZm5hbWU7Ci1z dGF0aWMgY2hhciAqcHJvZ25hbWU7Ci1zdGF0aWMga3JiNV9pbnQzMiBub3c7Ci1zdGF0aWMgaW50 IHRpbWVzdGFtcF93aWR0aDsKLQotX1BST1RPVFlQKHN0YXRpYyBjaGFyICogZXR5cGVfc3RyaW5n LCAoa3JiNV9lbmN0eXBlICkpOwotX1BST1RPVFlQKHN0YXRpYyB2b2lkIHNob3dfY3JlZGVudGlh bCwoa3JiNV9jb250ZXh0LGtyYjVfY3JlZHMgKikpOwotX1BST1RPVFlQKHN0YXRpYyBpbnQgZG9f Y2NhY2hlLCAoa3JiNV9jb250ZXh0LGNoYXIgKikpOwotX1BST1RPVFlQKHN0YXRpYyBpbnQgZG9f a2V5dGFiLCAoa3JiNV9jb250ZXh0LGNoYXIgKikpOwotX1BST1RPVFlQKHN0YXRpYyB2b2lkIHBy aW50dGltZSwgKHRpbWVfdCkpOwotX1BST1RPVFlQKHN0YXRpYyB2b2lkIGZpbGxpdCwgKGludCwg aW50KSk7Ci0KLSNkZWZpbmUgREVGQVVMVCAwCi0jZGVmaW5lIENDQUNIRSAxCi0jZGVmaW5lIEtF WVRBQiAyCi0KLWludAotI2lmZGVmIENLX0FOU0lDCi1ja19rcmI1X2xpc3RfY3JlZHMoc3RydWN0 IGtyYl9vcF9kYXRhICogb3AsIHN0cnVjdCBrcmI1X2xpc3RfY3JlZF9kYXRhICogbGMpCi0jZWxz ZQotY2tfa3JiNV9saXN0X2NyZWRzKG9wLGxjKQotICAgIHN0cnVjdCBrcmJfb3BfZGF0YSAqIG9w OyBzdHJ1Y3Qga3JiNV9saXN0X2NyZWRfZGF0YSAqIGxjOwotI2VuZGlmCi17Ci0gICAga3JiNV9j b250ZXh0IGtjb250ZXh0OwotICAgIGtyYjVfZXJyb3JfY29kZSByZXR2YWw7Ci0gICAgaW50IGNv ZGU7Ci0gICAgY2hhciAqbmFtZSA9IG9wLT5jYWNoZTsKLSAgICBpbnQgbW9kZTsKLQotICAgIGlm ICggIWNrX2tyYjVfaXNfaW5zdGFsbGVkKCkgKQotICAgICAgICByZXR1cm4oLTEpOwotCi0gICAg Y29kZSA9IGtyYjVfaW5pdF9jb250ZXh0KCZrY29udGV4dCk7Ci0gICAgaWYgKGNvZGUpIHsKLSAg ICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV9saXN0X2NyZWRzIHdoaWxlIGluaXRpYWxpemluZyBr cmI1IiwiIixjb2RlKTsKLSAgICAgICAga3JiNV9lcnJubyA9IGNvZGU7Ci0gICAgICAgIG1ha2Vz dHIoJmtyYjVfZXJybXNnLGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJubykpOwotICAgICAgICByZXR1 cm4oLTEpOwotICAgIH0KLQotICAgIG5hbWUgPSBvcC0+Y2FjaGU7Ci0gICAgbW9kZSA9IERFRkFV TFQ7Ci0gICAgc2hvd19mbGFncyA9IDA7Ci0gICAgc2hvd190aW1lID0gMDsKLSAgICBzdGF0dXNf b25seSA9IDA7Ci0gICAgc2hvd19rZXlzID0gMDsKLSAgICBzaG93X2V0eXBlID0gMDsKLSAgICBz aG93X2FkZHIgPSAwOwotCi0gICAgc2hvd19mbGFncyA9IGxjLT5mbGFnczsKLSAgICBzaG93X2V0 eXBlID0gbGMtPmVuY3J5cHRpb247Ci0gICAgc2hvd19hZGRyICA9IGxjLT5hZGRyOwotICAgIHNo b3dfdGltZSA9IDE7Ci0gICAgc2hvd19rZXlzID0gMTsKLSAgICBtb2RlID0gQ0NBQ0hFOwotCi0g ICAgaWYgKChjb2RlID0ga3JiNV90aW1lb2ZkYXkoa2NvbnRleHQsICZub3cpKSkgewotICAgICAg ICBpZiAoIXN0YXR1c19vbmx5KQotICAgICAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV9saXN0 X2NyZWRzIHdoaWxlIGdldHRpbmcgdGltZSBvZiBkYXkuIiwKLSAgICAgICAgICAgICAgICAgICAi Iixjb2RlKTsKLSAgICAgICAga3JiNV9mcmVlX2NvbnRleHQoa2NvbnRleHQpOwotICAgICAgICBr cmI1X2Vycm5vID0gY29kZTsKLSAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csZXJyb3JfbWVz c2FnZShrcmI1X2Vycm5vKSk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIGVsc2Ug ewotICAgICAgICBjaGFyIHRtcFtCVUZTSVpdOwotCi0gICAgICAgIGlmICgha3JiNV90aW1lc3Rh bXBfdG9fc2ZzdHJpbmcobm93LCB0bXAsIDIwLCAoY2hhciAqKSBOVUxMKSB8fAotICAgICAgICAg ICAgIWtyYjVfdGltZXN0YW1wX3RvX3Nmc3RyaW5nKG5vdywgdG1wLCBzaXplb2YodG1wKSwgKGNo YXIgKikgTlVMTCkpCi0gICAgICAgICAgICB0aW1lc3RhbXBfd2lkdGggPSAoaW50KSBzdHJsZW4o dG1wKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGltZXN0YW1wX3dpZHRoID0gMTU7Ci0g ICAgfQotCi0gICAgaWYgKG1vZGUgPT0gREVGQVVMVCB8fCBtb2RlID09IENDQUNIRSkKLSAgICAg ICAgIHJldHZhbCA9IGRvX2NjYWNoZShrY29udGV4dCxuYW1lKTsKLSAgICBlbHNlCi0gICAgICAg ICByZXR2YWwgPSBkb19rZXl0YWIoa2NvbnRleHQsbmFtZSk7Ci0gICAga3JiNV9mcmVlX2NvbnRl eHQoa2NvbnRleHQpOwotICAgIHJldHVybihyZXR2YWwpOwotfQotCi1zdGF0aWMgaW50Ci0jaWZk ZWYgQ0tfQU5TSUMKLWRvX2tleXRhYihrcmI1X2NvbnRleHQga2NvbnRleHQsIGNoYXIgKiBuYW1l KQotI2Vsc2UKLWRvX2tleXRhYihrY29udGV4dCxuYW1lKSBrcmI1X2NvbnRleHQga2NvbnRleHQ7 IGNoYXIgKiBuYW1lOwotI2VuZGlmCi17Ci0gICAga3JiNV9rZXl0YWIga3Q7Ci0gICAga3JiNV9r ZXl0YWJfZW50cnkgZW50cnk7Ci0gICAga3JiNV9rdF9jdXJzb3IgY3Vyc29yOwotICAgIGNoYXIg YnVmW0JVRlNJWl07IC8qIGhvcGVmdWxseSBsYXJnZSBlbm91Z2ggZm9yIGFueSB0eXBlICovCi0g ICAgY2hhciAqcG5hbWU7Ci0gICAgaW50IGNvZGUgPSAwOwotCi0gICAgaWYgKG5hbWUgPT0gTlVM TCkgewotICAgICAgICBpZiAoKGNvZGUgPSBrcmI1X2t0X2RlZmF1bHQoa2NvbnRleHQsICZrdCkp KSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X2xpc3RfY3JlZHMgd2hpbGUgZ2V0 dGluZyBkZWZhdWx0IGtleXRhYiIsCi0gICAgICAgICAgICAgICAgICAgIiIsY29kZSk7Ci0gICAg ICAgICAgICBrcmI1X2Vycm5vID0gY29kZTsKLSAgICAgICAgICAgIG1ha2VzdHIoJmtyYjVfZXJy bXNnLGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJubykpOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsK LSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICgoY29kZSA9IGtyYjVfa3RfcmVz b2x2ZShrY29udGV4dCwgbmFtZSwgJmt0KSkpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImNr X2tyYjVfbGlzdF9jcmVkcyB3aGlsZSByZXNvbHZpbmcga2V5dGFiIiwKLSAgICAgICAgICAgICAg ICAgICAgIG5hbWUsY29kZSk7Ci0gICAgICAgICAgICBrcmI1X2Vycm5vID0gY29kZTsKLSAgICAg ICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJubykpOwot ICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICgoY29k ZSA9IGtyYjVfa3RfZ2V0X25hbWUoa2NvbnRleHQsIGt0LCBidWYsIEJVRlNJWikpKSB7Ci0gICAg ICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfbGlzdF9jcmVkcyB3aGlsZSBnZXR0aW5nIGtleXRhYiBu YW1lIiwKLSAgICAgICAgICAgICAgICIiLGNvZGUpOwotICAgICAgICBrcmI1X2Vycm5vID0gY29k ZTsKLSAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csZXJyb3JfbWVzc2FnZShrcmI1X2Vycm5v KSk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotCi0gICAgIHByaW50ZigiS2V5dGFiIG5h bWU6ICVzXHJcbiIsIGJ1Zik7Ci0KLSAgICAgaWYgKChjb2RlID0ga3JiNV9rdF9zdGFydF9zZXFf Z2V0KGtjb250ZXh0LCBrdCwgJmN1cnNvcikpKSB7Ci0gICAgICAgICBkZWJ1ZyhGMTAxLCJja19r cmI1X2xpc3RfY3JlZHMgd2hpbGUgc3RhcnRpbmcga2V5dGFiIHNjYW4iLAotICAgICAgICAgICAg ICAgICIiLGNvZGUpOwotICAgICAgICAga3JiNV9lcnJubyA9IGNvZGU7Ci0gICAgICAgICBtYWtl c3RyKCZrcmI1X2Vycm1zZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKLSAgICAgICAgIHJl dHVybigtMSk7Ci0gICAgIH0KLQotICAgICBpZiAoc2hvd190aW1lKSB7Ci0gICAgICAgICAgcHJp bnRmKCJLVk5PIFRpbWVzdGFtcCIpOwotICAgICAgICAgIGZpbGxpdCh0aW1lc3RhbXBfd2lkdGgg LSBzaXplb2YoIlRpbWVzdGFtcCIpICsgMiwgKGludCkgJyAnKTsKLSAgICAgICAgICBwcmludGYo IlByaW5jaXBhbFxyXG4iKTsKLSAgICAgICAgICBwcmludGYoIi0tLS0gIik7Ci0gICAgICAgICAg ZmlsbGl0KHRpbWVzdGFtcF93aWR0aCwgKGludCkgJy0nKTsKLSAgICAgICAgICBwcmludGYoIiAi KTsKLSAgICAgICAgICBmaWxsaXQoNzggLSB0aW1lc3RhbXBfd2lkdGggLSBzaXplb2YoIktWTk8i KSwgKGludCkgJy0nKTsKLSAgICAgICAgICBwcmludGYoIlxyXG4iKTsKLSAgICAgfSBlbHNlIHsK LSAgICAgICAgICBwcmludGYoIktWTk8gUHJpbmNpcGFsXHJcbiIpOwotICAgICAgICAgIHByaW50 ZigKLSItLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tXAotLS0tLS0tXHJcbiIpOwotICAgICB9Ci0KLSAgICB3aGls ZSAoKGNvZGUgPSBrcmI1X2t0X25leHRfZW50cnkoa2NvbnRleHQsIGt0LCAmZW50cnksICZjdXJz b3IpKSA9PSAwKSB7Ci0gICAgICAgIGlmICgoY29kZSA9IGtyYjVfdW5wYXJzZV9uYW1lKGtjb250 ZXh0LCBlbnRyeS5wcmluY2lwYWwsICZwbmFtZSkpKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAx LCJja19rcmI1X2xpc3RfY3JlZHMgd2hpbGUgdW5wYXJzaW5nIHByaW5jaXBhbCBuYW1lIiwKLSAg ICAgICAgICAgICAgICAgICAiIixjb2RlKTsKLSAgICAgICAgICAgIGtyYjVfZXJybm8gPSBjb2Rl OwotICAgICAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csZXJyb3JfbWVzc2FnZShrcmI1X2Vy cm5vKSk7Ci0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0gICAgICAgIHByaW50 ZigiJTRkICIsIGVudHJ5LnZubyk7Ci0gICAgICAgIGlmIChzaG93X3RpbWUpIHsKLSAgICAgICAg ICAgIHByaW50dGltZShlbnRyeS50aW1lc3RhbXApOwotICAgICAgICAgICAgcHJpbnRmKCIgIik7 Ci0gICAgICAgIH0KLSAgICAgICAgcHJpbnRmKCIlcyIsIHBuYW1lKTsKLSAgICAgICAgaWYgKHNo b3dfZXR5cGUpCi0gICAgICAgICAgICBwcmludGYoIiAoJXMpICIgLAotI2lmZGVmIEhFSU1EQUwK LSAgICAgICAgICAgICAgICAgICAgZXR5cGVfc3RyaW5nKGVudHJ5LmtleS5rZXl0eXBlKQotI2Vs c2UgLyogSEVJTURBTCAqLwotICAgICAgICAgICAgICAgICAgICBldHlwZV9zdHJpbmcoZW50cnku a2V5LmVuY3R5cGUpCi0jZW5kaWYgLyogSEVJTURBTCAqLwotICAgICAgICAgICAgICAgICAgICAp OwotICAgICAgICBpZiAoc2hvd19rZXlzKSB7Ci0gICAgICAgICAgICBwcmludGYoIiAoMHgiKTsK LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICAgICAgICBm b3IgKGkgPSAwOyBpIDwgZW50cnkua2V5Lmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgICAg ICBwcmludGYoIiUwMngiLAotI2lmZGVmIEhFSU1EQUwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlbnRyeS5rZXkua2V5dmFsdWVbaV0KLSNlbHNlIC8qIEhFSU1EQUwgKi8KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBlbnRyeS5rZXkuY29udGVudHNbaV0KLSNlbmRpZiAvKiBIRUlN REFMICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIHByaW50ZigiKSIpOwotICAgICAgICB9Ci0gICAgICAgIHByaW50ZigiXHJcbiIp OwotICAgICAgICBrcmI1X2ZyZWVfdW5wYXJzZWRfbmFtZShrY29udGV4dCxwbmFtZSk7Ci0gICAg fQotICAgIGlmIChjb2RlICYmIGNvZGUgIT0gS1JCNV9LVF9FTkQpIHsKLSAgICAgICAgZGVidWco RjEwMSwiY2tfa3JiNV9saXN0X2NyZWRzIHdoaWxlIHNjYW5uaW5nIGtleXRhYiIsCi0gICAgICAg ICAgICAgICAiIixjb2RlKTsKLSAgICAgICAga3JiNV9lcnJubyA9IGNvZGU7Ci0gICAgICAgIG1h a2VzdHIoJmtyYjVfZXJybXNnLGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJubykpOwotICAgICAgICBy ZXR1cm4oLTEpOwotICAgIH0KLSAgICBpZiAoKGNvZGUgPSBrcmI1X2t0X2VuZF9zZXFfZ2V0KGtj b250ZXh0LCBrdCwgJmN1cnNvcikpKSB7Ci0gICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfbGlz dF9jcmVkcyB3aGlsZSBlbmRpbmcga2V5dGFiIHNjYW4iLAotICAgICAgICAgICAgICAgIiIsY29k ZSk7Ci0gICAgICAgIGtyYjVfZXJybm8gPSBjb2RlOwotICAgICAgICBtYWtlc3RyKCZrcmI1X2Vy cm1zZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAg ICB9Ci0gICAga3JiNV9lcnJubyA9IDA7Ci0gICAgbWFrZXN0cigma3JiNV9lcnJtc2csIk9LIik7 Ci0gICAgcmV0dXJuKDApOwotfQotCi1zdGF0aWMgaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWRvX2Nj YWNoZShrcmI1X2NvbnRleHQga2NvbnRleHQsIGNoYXIgKiBjY19uYW1lKQotI2Vsc2UKLWRvX2Nj YWNoZShrY29udGV4dCxuYW1lKSBrcmI1X2NvbnRleHQga2NvbnRleHQ7IGNoYXIgKiBjY19uYW1l OwotI2VuZGlmCi17Ci0gICAga3JiNV9jY2FjaGUgY2FjaGUgPSBOVUxMOwotICAgIGtyYjVfY2Nf Y3Vyc29yIGN1cjsKLSAgICBrcmI1X2NyZWRzIGNyZWRzOwotICAgIGtyYjVfcHJpbmNpcGFsIHBy aW5jPU5VTEw7Ci0gICAga3JiNV9mbGFncyBmbGFncz0wOwotICAgIGtyYjVfZXJyb3JfY29kZSBj b2RlID0gMDsKLSAgICBpbnQgZXhpdF9zdGF0dXMgPSAwOwotCi0gICAgaWYgKHN0YXR1c19vbmx5 KQotICAgICAgICAvKiBleGl0X3N0YXR1cyBpcyBzZXQgYmFjayB0byAwIGlmIGEgdmFsaWQgdGd0 IGlzIGZvdW5kICovCi0gICAgICAgIGV4aXRfc3RhdHVzID0gMTsKLQotICAgIGNvZGUgPSBrNV9n ZXRfY2NhY2hlKGtjb250ZXh0LCZjYWNoZSxjY19uYW1lKTsKLSAgICBpZiAoY29kZSAhPSAwKSB7 Ci0gICAgICAgIGRlYnVnKEYxMTEsImRvX2NjYWNoZSB3aGlsZSBnZXR0aW5nIGNjYWNoZSIsCi0g ICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlKGNvZGUpLGNvZGUpOwotICAgICAgICBrcmI1X2Vy cm5vID0gY29kZTsKLSAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csZXJyb3JfbWVzc2FnZShr cmI1X2Vycm5vKSk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotCi0gICAgZmxhZ3MgPSAw OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHVybnMgb2ZmIE9QRU5DTE9TRSBtb2RlICov Ci0gICAgaWYgKChjb2RlID0ga3JiNV9jY19zZXRfZmxhZ3Moa2NvbnRleHQsIGNhY2hlLCBmbGFn cykpKSB7Ci0gICAgICAgIGlmIChjb2RlID09IEVOT0VOVCkgewotICAgICAgICAgICAgZGVidWco RjExMSwiY2tfa3JiNV9saXN0X2NyZWRzICh0aWNrZXQgY2FjaGUpIiwKLSAgICAgICAgICAgICAg ICAgICBrcmI1X2NjX2dldF9uYW1lKGtjb250ZXh0LCBjYWNoZSksY29kZSk7Ci0gICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLAotICAgICAgICAgICAgICAgICAiY2tfa3Ji NV9saXN0X2NyZWRzIHdoaWxlIHNldHRpbmcgY2FjaGUgZmxhZ3MgKHRpY2tldCBjYWNoZSkiLAot ICAgICAgICAgICAgICAgICAga3JiNV9jY19nZXRfbmFtZShrY29udGV4dCwgY2FjaGUpLGNvZGUp OwotICAgICAgICB9Ci0gICAgICAgIHByaW50ZigiTm8gdGlja2V0IEZpbGUuXHJcbiIpOwotICAg ICAgICBrcmI1X2Vycm5vID0gY29kZTsKLSAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csZXJy b3JfbWVzc2FnZShrcmI1X2Vycm5vKSk7Ci0gICAgICAgIGtyYjVfY2NfY2xvc2Uoa2NvbnRleHQs Y2FjaGUpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBpZiAoKGNvZGUgPSBrcmI1 X2NjX2dldF9wcmluY2lwYWwoa2NvbnRleHQsIGNhY2hlLCAmcHJpbmMpKSkgewotICAgICAgICBk ZWJ1ZyhGMTAxLCJja19rcmI1X2xpc3RfY3JlZHMgd2hpbGUgcmV0cmlldmluZyBwcmluY2lwYWwg bmFtZSIsCi0gICAgICAgICAgICAgICAiIixjb2RlKTsKLSAgICAgICAga3JiNV9lcnJubyA9IGNv ZGU7Ci0gICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJu bykpOwotICAgICAgICBrcmI1X2NjX2Nsb3NlKGtjb250ZXh0LGNhY2hlKTsKLSAgICAgICAgcmV0 dXJuKC0xKTsKLSAgICB9Ci0gICAgaWYgKChjb2RlID0ga3JiNV91bnBhcnNlX25hbWUoa2NvbnRl eHQsIHByaW5jLCAmZGVmbmFtZSkpKSB7Ci0gICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfbGlz dF9jcmVkcyB3aGlsZSB1bnBhcnNpbmcgcHJpbmNpcGFsIG5hbWUiLAotICAgICAgICAgICAgICAg IiIsY29kZSk7Ci0gICAgICAgIGtyYjVfZXJybm8gPSBjb2RlOwotICAgICAgICBtYWtlc3RyKCZr cmI1X2Vycm1zZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKLSAgICAgICAga3JiNV9jY19j bG9zZShrY29udGV4dCxjYWNoZSk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIGlm ICghc3RhdHVzX29ubHkpIHsKLSAgICAgICAgcHJpbnRmKCJUaWNrZXQgY2FjaGU6ICAgICAgJXM6 JXNcclxuRGVmYXVsdCBwcmluY2lwYWw6ICVzXHJcblxyXG4iLAotICAgICAgICAgICAgICAgIGty YjVfY2NfZ2V0X3R5cGUoa2NvbnRleHQsIGNhY2hlKSwKLSAgICAgICAgICAgICAgICBrcmI1X2Nj X2dldF9uYW1lKGtjb250ZXh0LCBjYWNoZSksIGRlZm5hbWUpOwotICAgICAgICBwcmludGYoIlZh bGlkIHN0YXJ0aW5nIik7Ci0gICAgICAgIGZpbGxpdCh0aW1lc3RhbXBfd2lkdGggLSBzaXplb2Yo IlZhbGlkIHN0YXJ0aW5nIikgKyAzLAotICAgICAgICAgICAgICAgKGludCkgJyAnKTsKLSAgICAg ICAgcHJpbnRmKCJFeHBpcmVzIik7Ci0gICAgICAgIGZpbGxpdCh0aW1lc3RhbXBfd2lkdGggLSBz aXplb2YoIkV4cGlyZXMiKSArIDMsCi0gICAgICAgICAgICAgICAoaW50KSAnICcpOwotICAgICAg ICBwcmludGYoIlNlcnZpY2UgcHJpbmNpcGFsXHJcbiIpOwotICAgIH0KLSAgICBpZiAoKGNvZGUg PSBrcmI1X2NjX3N0YXJ0X3NlcV9nZXQoa2NvbnRleHQsIGNhY2hlLCAmY3VyKSkpIHsKLSAgICAg ICAgZGVidWcoRjEwMSwiY2tfa3JiNV9saXN0X2NyZWRzIHdoaWxlIHN0YXJ0aW5nIHRvIHJldHJp ZXZlIHRpY2tldHMiLAotICAgICAgICAgICAgICAgIiIsY29kZSk7Ci0gICAgICAgIGtyYjVfZXJy bm8gPSBjb2RlOwotICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxlcnJvcl9tZXNzYWdlKGty YjVfZXJybm8pKTsKLSAgICAgICAga3JiNV9jY19jbG9zZShrY29udGV4dCxjYWNoZSk7Ci0gICAg ICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIHdoaWxlICghKGNvZGUgPSBrcmI1X2NjX25leHRf Y3JlZChrY29udGV4dCwgY2FjaGUsICZjdXIsICZjcmVkcykpKSB7Ci0gICAgICAgIGlmIChzdGF0 dXNfb25seSkgewotICAgICAgICAgICAgaWYgKGV4aXRfc3RhdHVzICYmIGNyZWRzLnNlcnZlci0+ bGVuZ3RoID09IDIgJiYKLSAgICAgICAgICAgICAgICBzdHJjbXAoY3JlZHMuc2VydmVyLT5yZWFs bS5kYXRhLCBwcmluYy0+cmVhbG0uZGF0YSkgPT0gMCAmJgotICAgICAgICAgICAgICAgIHN0cmNt cCgoY2hhciAqKWNyZWRzLnNlcnZlci0+ZGF0YVswXS5kYXRhLCAia3JidGd0IikgPT0gMCAmJgot ICAgICAgICAgICAgICAgIHN0cmNtcCgoY2hhciAqKWNyZWRzLnNlcnZlci0+ZGF0YVsxXS5kYXRh LAotICAgICAgICAgICAgICAgICAgICAgICBwcmluYy0+cmVhbG0uZGF0YSkgPT0gMCAmJgotICAg ICAgICAgICAgICAgIGNyZWRzLnRpbWVzLmVuZHRpbWUgPiBub3cpCi0gICAgICAgICAgICAgICAg ZXhpdF9zdGF0dXMgPSAwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2hvd19jcmVk ZW50aWFsKGtjb250ZXh0LCAmY3JlZHMpOwotICAgICAgICB9Ci0gICAgICAgIGtyYjVfZnJlZV9j cmVkX2NvbnRlbnRzKGtjb250ZXh0LCAmY3JlZHMpOwotICAgIH0KLSAgICBwcmludGYoIlxyXG4i KTsKLSAgICBpZiAoY29kZSA9PSBLUkI1X0NDX0VORCB8fCBjb2RlID09IEtSQjVfQ0NfTk9URk9V TkQpIHsKLSAgICAgICAgaWYgKChjb2RlID0ga3JiNV9jY19lbmRfc2VxX2dldChrY29udGV4dCwg Y2FjaGUsICZjdXIpKSkgewotICAgICAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV9saXN0X2Ny ZWRzIHdoaWxlIGZpbmlzaGluZyB0aWNrZXQgcmV0cmlldmFsIiwKLSAgICAgICAgICAgICAgICAg ICAiIixjb2RlKTsKLSAgICAgICAgICAgIGtyYjVfZXJybm8gPSBjb2RlOwotICAgICAgICAgICAg bWFrZXN0cigma3JiNV9lcnJtc2csZXJyb3JfbWVzc2FnZShrcmI1X2Vycm5vKSk7Ci0gICAgICAg ICAgICBrcmI1X2NjX2Nsb3NlKGtjb250ZXh0LGNhY2hlKTsKLSAgICAgICAgICAgIHJldHVybigt MSk7Ci0gICAgICAgIH0KLSAgICAgICAgZmxhZ3MgPSBLUkI1X1RDX09QRU5DTE9TRTsgICAgICAv KiB0dXJucyBvbiBPUEVOQ0xPU0UgbW9kZSAqLwotICAgICAgICBpZiAoKGNvZGUgPSBrcmI1X2Nj X3NldF9mbGFncyhrY29udGV4dCwgY2FjaGUsIGZsYWdzKSkpIHsKLSAgICAgICAgICAgIGRlYnVn KEYxMDEsImNrX2tyYjVfbGlzdF9jcmVkcyB3aGlsZSBjbG9zaW5nIGNjYWNoZSIsCi0gICAgICAg ICAgICAgICAgICAgIiIsY29kZSk7Ci0gICAgICAgICAgICBrcmI1X2Vycm5vID0gY29kZTsKLSAg ICAgICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJubykp OwotICAgICAgICAgICAga3JiNV9jY19jbG9zZShrY29udGV4dCxjYWNoZSk7Ci0gICAgICAgICAg ICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0gICAgICAgIGtyYjVfZXJybm8gPSAwOwotICAgICAg ICBtYWtlc3RyKCZrcmI1X2Vycm1zZywiT0siKTsKLSAgICAgICAga3JiNV9jY19jbG9zZShrY29u dGV4dCxjYWNoZSk7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBk ZWJ1ZyhGMTAxLCJja19rcmI1X2xpc3RfY3JlZHMgd2hpbGUgcmV0cmlldmluZyBhIHRpY2tldCIs IiIsY29kZSk7Ci0gICAgICAgIGtyYjVfZXJybm8gPSBjb2RlOwotICAgICAgICBtYWtlc3RyKCZr cmI1X2Vycm1zZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKLSAgICAgICAga3JiNV9jY19j bG9zZShrY29udGV4dCxjYWNoZSk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIGty YjVfZXJybm8gPSAwOwotICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLCJPSyIpOwotICAgIGtyYjVf Y2NfY2xvc2Uoa2NvbnRleHQsY2FjaGUpOwotICAgIHJldHVybigwKTsKLX0KLQotc3RhdGljIGNo YXIgKgotI2lmZGVmIENLX0FOU0lDCi0jaWZkZWYgSEVJTURBTAotZXR5cGVfc3RyaW5nKGtyYjVf a2V5dHlwZSBlbmN0eXBlKQotI2Vsc2UgLyogSEVJTURBTCAqLwotZXR5cGVfc3RyaW5nKGtyYjVf ZW5jdHlwZSBlbmN0eXBlKQotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLSNlbHNlCi0jaWZkZWYgSEVJ TURBTAotZXR5cGVfc3RyaW5nKGVuY3R5cGUpIGtyYjVfa2V5dHlwZSBlbmN0eXBlOwotI2Vsc2Ug LyogSEVJTURBTCAqLwotZXR5cGVfc3RyaW5nKGVuY3R5cGUpIGtyYjVfZW5jdHlwZSBlbmN0eXBl OwotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLSNlbmRpZgotewotICAgIHN0YXRpYyBjaGFyIGJ1Zlsx Ml07Ci0KLSAgICBzd2l0Y2ggKGVuY3R5cGUpIHsKLSAgICBjYXNlIEVOQ1RZUEVfTlVMTDoKLSAg ICAgICAgcmV0dXJuICJOVUxMIjsKLSAgICBjYXNlIEVOQ1RZUEVfREVTX0NCQ19DUkM6Ci0gICAg ICAgIHJldHVybiAiREVTLUNCQy1DUkMiOwotICAgIGNhc2UgRU5DVFlQRV9ERVNfQ0JDX01ENDoK LSAgICAgICAgcmV0dXJuICJERVMtQ0JDLU1ENCI7Ci0gICAgY2FzZSBFTkNUWVBFX0RFU19DQkNf TUQ1OgotICAgICAgICByZXR1cm4gIkRFUy1DQkMtTUQ1IjsKLSAgICBjYXNlIEVOQ1RZUEVfREVT X0NCQ19SQVc6Ci0gICAgICAgIHJldHVybiAiREVTLUNCQy1SQVciOwotICAgIGNhc2UgRU5DVFlQ RV9ERVMzX0NCQ19TSEE6Ci0gICAgICAgIHJldHVybiAiREVTMy1DQkMtU0hBIjsKLSAgICBjYXNl IEVOQ1RZUEVfREVTM19DQkNfUkFXOgotICAgICAgICByZXR1cm4gIkRFUzMtQ0JDLVJBVyI7Ci0g ICAgY2FzZSBFTkNUWVBFX0RFU19ITUFDX1NIQTE6Ci0gICAgICAgIHJldHVybiAiREVTLUhNQUMt U0hBMSI7Ci0gICAgY2FzZSBFTkNUWVBFX0RFUzNfQ0JDX1NIQTE6Ci0gICAgICAgIHJldHVybiAi REVTMy1DQkMtU0hBMSI7Ci0gICAgY2FzZSBFTkNUWVBFX0FFUzEyOF9DVFNfSE1BQ19TSEExXzk2 OgotICAgICAgICByZXR1cm4gIkFFUzEyOF9DVFMtSE1BQy1TSEExXzk2IjsKLSAgICBjYXNlIEVO Q1RZUEVfQUVTMjU2X0NUU19ITUFDX1NIQTFfOTY6Ci0gICAgICAgIHJldHVybiAiQUVTMjU2X0NU Uy1ITUFDLVNIQTFfOTYiOwotICAgIGNhc2UgRU5DVFlQRV9BUkNGT1VSX0hNQUM6Ci0gICAgICAg IHJldHVybiAiUkM0LUhNQUMtTlQiOwotICAgIGNhc2UgRU5DVFlQRV9BUkNGT1VSX0hNQUNfRVhQ OgotICAgICAgICByZXR1cm4gIlJDNC1ITUFDLU5ULUVYUCI7Ci0gICAgY2FzZSBFTkNUWVBFX1VO S05PV046Ci0gICAgICAgIHJldHVybiAiVU5LTk9XTiI7Ci0gICAgY2FzZSBFTkNUWVBFX0xPQ0FM X0RFUzNfSE1BQ19TSEExOgotICAgICAgICByZXR1cm4gIkxPQ0FMLURFUzMtSE1BQy1TSEExIjsK LSAgICBjYXNlIEVOQ1RZUEVfTE9DQUxfUkM0X01ENDoKLSAgICAgICAgcmV0dXJuICJMT0NBTC1S QzQtTUQ0IjsKLSAgICBkZWZhdWx0OgotICAgICAgICBja21ha21zZyhidWYsIHNpemVvZihidWYp LCJldHlwZSAiLCBja2l0b2EoZW5jdHlwZSksTlVMTCxOVUxMKTsKLSAgICAgICAgcmV0dXJuIGJ1 ZjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgY2hhciAqCi0jaWZkZWYgQ0tf QU5TSUMKLWZsYWdzX3N0cmluZyhyZWdpc3RlciBrcmI1X2NyZWRzICpjcmVkKQotI2Vsc2UKLWZs YWdzX3N0cmluZyhjcmVkKSByZWdpc3RlciBrcmI1X2NyZWRzICpjcmVkOwotI2VuZGlmCi17Ci0g ICAgc3RhdGljIGNoYXIgYnVmWzMyXTsKLSAgICBpbnQgaSA9IDA7Ci0KLSAgICBpZiAoY3JlZC0+ dGlja2V0X2ZsYWdzICYgVEtUX0ZMR19GT1JXQVJEQUJMRSkKLSAgICAgICAgYnVmW2krK10gPSAn Ric7Ci0gICAgaWYgKGNyZWQtPnRpY2tldF9mbGFncyAmIFRLVF9GTEdfRk9SV0FSREVEKQotICAg ICAgICBidWZbaSsrXSA9ICdmJzsKLSAgICBpZiAoY3JlZC0+dGlja2V0X2ZsYWdzICYgVEtUX0ZM R19QUk9YSUFCTEUpCi0gICAgICAgIGJ1ZltpKytdID0gJ1AnOwotICAgIGlmIChjcmVkLT50aWNr ZXRfZmxhZ3MgJiBUS1RfRkxHX1BST1hZKQotICAgICAgICBidWZbaSsrXSA9ICdwJzsKLSAgICBp ZiAoY3JlZC0+dGlja2V0X2ZsYWdzICYgVEtUX0ZMR19NQVlfUE9TVERBVEUpCi0gICAgICAgIGJ1 ZltpKytdID0gJ0QnOwotICAgIGlmIChjcmVkLT50aWNrZXRfZmxhZ3MgJiBUS1RfRkxHX1BPU1RE QVRFRCkKLSAgICAgICAgYnVmW2krK10gPSAnZCc7Ci0gICAgaWYgKGNyZWQtPnRpY2tldF9mbGFn cyAmIFRLVF9GTEdfSU5WQUxJRCkKLSAgICAgICAgYnVmW2krK10gPSAnaSc7Ci0gICAgaWYgKGNy ZWQtPnRpY2tldF9mbGFncyAmIFRLVF9GTEdfUkVORVdBQkxFKQotICAgICAgICBidWZbaSsrXSA9 ICdSJzsKLSAgICBpZiAoY3JlZC0+dGlja2V0X2ZsYWdzICYgVEtUX0ZMR19JTklUSUFMKQotICAg ICAgICBidWZbaSsrXSA9ICdJJzsKLSAgICBpZiAoY3JlZC0+dGlja2V0X2ZsYWdzICYgVEtUX0ZM R19IV19BVVRIKQotICAgICAgICBidWZbaSsrXSA9ICdIJzsKLSAgICBpZiAoY3JlZC0+dGlja2V0 X2ZsYWdzICYgVEtUX0ZMR19QUkVfQVVUSCkKLSAgICAgICAgYnVmW2krK10gPSAnQSc7Ci0gICAg YnVmW2ldID0gJ1wwJzsKLSAgICByZXR1cm4oYnVmKTsKLX0KLQotc3RhdGljIGNoYXIgICAqCi0j aWZkZWYgQ0tfQU5TSUMKLXNob3J0X2RhdGUobG9uZyAgICpkcCkKLSNlbHNlCi1zaG9ydF9kYXRl KGRwKSBsb25nICAgKmRwOwotI2VuZGlmCi17Ci0gICAgcmVnaXN0ZXIgY2hhciAqY3A7Ci0jaWZu ZGVmIGN0aW1lCi0gICAgZXh0ZXJuIGNoYXIgKmN0aW1lKCk7Ci0jZW5kaWYgLyogY3RpbWUgKi8K LSAgICBjcCA9IGN0aW1lKGRwKSArIDQ7Ci0gICAgY3BbMTVdID0gJ1wwJzsKLSAgICByZXR1cm4g KGNwKTsKLX0KLQotCi1zdGF0aWMgVk9JRAotI2lmZGVmIENLX0FOU0lDCi1wcmludHRpbWUodGlt ZV90IHR2KQotI2Vsc2UKLXByaW50dGltZSh0dikgdGltZV90IHR2OwotI2VuZGlmCi17Ci0gICAg Y2hhciB0aW1lc3RyaW5nW0JVRlNJWl07Ci0gICAgY2hhciBmb3JtYXRbMTJdOwotICAgIGNoYXIg ZmlsbDsKLQotICAgIGZpbGwgPSAnICc7Ci0gICAgc3ByaW50Zihmb3JtYXQsIiUlLSVkcyIsdGlt ZXN0YW1wX3dpZHRoKTsgICAvKiBzYWZlICovCi0gICAgaWYgKCFrcmI1X3RpbWVzdGFtcF90b19z ZnN0cmluZygoa3JiNV90aW1lc3RhbXApIHR2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRpbWVzdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGltZXN0YW1wX3dpZHRoKzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJmZpbGwpKSB7Ci0gICAgICAgIHByaW50Zihmb3JtYXQsdGltZXN0cmluZyk7Ci0gICAgfQot ICAgIGVsc2UgewotICAgICAgICBwcmludGYoZm9ybWF0LHNob3J0X2RhdGUoJnR2KSk7Ci0gICAg fQotCi19Ci0KLXN0YXRpYyB2b2lkCi0jaWZkZWYgQ0tfQU5TSUMKLW9uZV9hZGRyKGtyYjVfYWRk cmVzcyAqYSkKLSNlbHNlCi1vbmVfYWRkcihhKSBrcmI1X2FkZHJlc3MgKmE7Ci0jZW5kaWYKLXsK LSAgICBzdHJ1Y3QgaG9zdGVudCAqaDsKLSAgICBleHRlcm4gdGNwX3JkbnM7Ci0KLSAgICBpZiAo KGEtPmFkZHJ0eXBlID09IEFERFJUWVBFX0lORVQpICYmCi0gICAgICAgIChhLT5sZW5ndGggPT0g NCkpIHsKLSAgICAgICAgaWYgKHRjcF9yZG5zICE9IFNFVF9PRkYpIHsKLSAgICAgICAgICAgIGgg PSBnZXRob3N0YnlhZGRyKGEtPmNvbnRlbnRzLCA0LCBBRl9JTkVUKTsKLSAgICAgICAgICAgIGlm IChoKSB7Ci0jaWZkZWYgSEFERFJMSVNUCi0gICAgICAgICAgICAgICAgaCA9IGNrX2NvcHlob3N0 ZW50KGgpOwotI2VuZGlmIC8qIEhBRERSTElTVCAqLwotICAgICAgICAgICAgICAgIHByaW50Zigi JXMgKCVkLiVkLiVkLiVkKSIsIGgtPmhfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGEt PmNvbnRlbnRzWzBdLCBhLT5jb250ZW50c1sxXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGEt PmNvbnRlbnRzWzJdLCBhLT5jb250ZW50c1szXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K LSAgICAgICAgaWYgKHRjcF9yZG5zID09IFNFVF9PRkYgfHwgIWgpIHsKLSAgICAgICAgICAgIHBy aW50ZigiJWQuJWQuJWQuJWQiLCBhLT5jb250ZW50c1swXSwgYS0+Y29udGVudHNbMV0sCi0gICAg ICAgICAgICAgICAgICAgYS0+Y29udGVudHNbMl0sIGEtPmNvbnRlbnRzWzNdKTsKLSAgICAgICAg fQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHByaW50ZigidW5rbm93biBhZGRyIHR5cGUgJWQiLCBh LT5hZGRydHlwZSk7Ci0gICAgfQotfQotCi1zdGF0aWMgVk9JRAotI2lmZGVmIENLX0FOU0lDCi1z aG93X2NyZWRlbnRpYWwoa3JiNV9jb250ZXh0IGtjb250ZXh0LCByZWdpc3RlciBrcmI1X2NyZWRz ICogY3JlZCkKLSNlbHNlCi1zaG93X2NyZWRlbnRpYWwoa2NvbnRleHQsIGNyZWQpCi0gICAga3Ji NV9jb250ZXh0ICAgICAgICAgIGtjb250ZXh0OwotICAgIHJlZ2lzdGVyIGtyYjVfY3JlZHMgKiBj cmVkOwotI2VuZGlmCi17Ci0gICAga3JiNV9lcnJvcl9jb2RlIHJldHZhbD0wOwotICAgIGtyYjVf dGlja2V0ICp0a3Q9TlVMTDsKLSAgICBjaGFyICpuYW1lPU5VTEwsICpzbmFtZT1OVUxMLCAqZmxh Z3M9TlVMTDsKLSAgICBpbnQgZXh0cmFfZmllbGQgPSAwOwotCi0gICAgcmV0dmFsID0ga3JiNV91 bnBhcnNlX25hbWUoa2NvbnRleHQsIGNyZWQtPmNsaWVudCwgJm5hbWUpOwotICAgIGlmIChyZXR2 YWwpIHsKLSAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV9saXN0X2NyZWRzIHdoaWxlIHVucGFy c2luZyBjbGllbnQgbmFtZSIsIiIscmV0dmFsKTsKLSAgICAgICAga3JiNV9lcnJubyA9IHJldHZh bDsKLSAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csZXJyb3JfbWVzc2FnZShrcmI1X2Vycm5v KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgcmV0dmFsID0ga3JiNV91bnBhcnNlX25h bWUoa2NvbnRleHQsIGNyZWQtPnNlcnZlciwgJnNuYW1lKTsKLSAgICBpZiAocmV0dmFsKSB7Ci0g ICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfbGlzdF9jcmVkcyB3aGlsZSB1bnBhcnNpbmcgc2Vy dmVyIG5hbWUiLCIiLHJldHZhbCk7Ci0gICAgICAgIGZyZWUobmFtZSk7Ci0gICAgICAgIGtyYjVf ZXJybm8gPSByZXR2YWw7Ci0gICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLGVycm9yX21lc3Nh Z2Uoa3JiNV9lcnJubykpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghY3JlZC0+ dGltZXMuc3RhcnR0aW1lKQotICAgICAgICBjcmVkLT50aW1lcy5zdGFydHRpbWUgPSBjcmVkLT50 aW1lcy5hdXRodGltZTsKLQotICAgIHByaW50dGltZShjcmVkLT50aW1lcy5zdGFydHRpbWUpOwot ICAgIHByaW50ZigiICAiKTsKLQotICAgIGlmICggdGltZSgwKSA8IGNyZWQtPnRpbWVzLmVuZHRp bWUgKQotICAgICAgICBwcmludHRpbWUoY3JlZC0+dGltZXMuZW5kdGltZSk7Ci0gICAgZWxzZQot ICAgICAgICBwcmludGYoIioqIGV4cGlyZWQgKiogIik7Ci0KLSAgICBwcmludGYoIiAgJXNcclxu Iiwgc25hbWUpOwotCi0gICAgaWYgKHN0cmNtcChuYW1lLCBkZWZuYW1lKSkgewotICAgICAgICBw cmludGYoIiAgIGZvciBjbGllbnQgJXMiLCBuYW1lKTsKLSAgICAgICAgZXh0cmFfZmllbGQrKzsK LSAgICB9Ci0KLSAgICBpZiAoY3JlZC0+dGltZXMucmVuZXdfdGlsbCkgewotICAgICAgICBpZiAo IWV4dHJhX2ZpZWxkKQotICAgICAgICAgICAgcHJpbnRmKCIgICAiKTsKLSAgICAgICAgZWxzZQot ICAgICAgICAgICAgcHJpbnRmKCIsICIpOwotICAgICAgICBwcmludGYoInJlbmV3IHVudGlsICIp OwotICAgICAgICBwcmludHRpbWUoY3JlZC0+dGltZXMucmVuZXdfdGlsbCk7Ci0gICAgICAgIGV4 dHJhX2ZpZWxkICs9IDI7Ci0gICAgfQotCi0gICAgaWYgKGV4dHJhX2ZpZWxkID4gMykgewotICAg ICAgICBwcmludGYoIlxyXG4iKTsKLSAgICAgICAgZXh0cmFfZmllbGQgPSAwOwotICAgIH0KLQot ICAgIGlmIChzaG93X2ZsYWdzKSB7Ci0gICAgICAgIGZsYWdzID0gZmxhZ3Nfc3RyaW5nKGNyZWQp OwotICAgICAgICBpZiAoZmxhZ3MgJiYgKmZsYWdzKSB7Ci0gICAgICAgICAgICBpZiAoIWV4dHJh X2ZpZWxkKQotICAgICAgICAgICAgICAgIHByaW50ZigiICAgIik7Ci0gICAgICAgICAgICBlbHNl Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIsICIpOwotICAgICAgICAgICAgcHJpbnRmKCJGbGFn czogJXMiLCBmbGFncyk7Ci0gICAgICAgICAgICBleHRyYV9maWVsZCsrOwotICAgICAgICB9Ci0g ICAgfQotCi0gICAgaWYgKGV4dHJhX2ZpZWxkID4gMikgewotICAgICAgICBwcmludGYoIlxyXG4i KTsKLSAgICAgICAgZXh0cmFfZmllbGQgPSAwOwotICAgIH0KLQotICAgIGlmIChzaG93X2V0eXBl KSB7Ci0gICAgICAgIHJldHZhbCA9IGRlY29kZV9rcmI1X3RpY2tldCgmY3JlZC0+dGlja2V0LCAm dGt0KTsKLSAgICAgICAgaWYgKCFleHRyYV9maWVsZCkKLSAgICAgICAgICAgIHByaW50ZigiICAg Iik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHByaW50ZigiLCAiKTsKLSNpZmRlZiBIRUlN REFMCi0gICAgICAgIHByaW50ZigiRXR5cGUgKHNrZXksIHRrdCk6ICVzLCAlcyAiLAotICAgICAg ICAgICAgICAgZXR5cGVfc3RyaW5nKGNyZWQtPnNlc3Npb24ua2V5dHlwZSksCi0gICAgICAgICAg ICAgICBldHlwZV9zdHJpbmcodGt0LT5lbmNfcGFydC5rZXl0eXBlKSk7Ci0jZWxzZSAvKiBIRUlN REFMICovCi0gICAgICAgIHByaW50ZigiRXR5cGUgKHNrZXksIHRrdCk6ICVzLCAlcyAiLAotICAg ICAgICAgICAgICAgZXR5cGVfc3RyaW5nKGNyZWQtPmtleWJsb2NrLmVuY3R5cGUpLAotICAgICAg ICAgICAgICAgZXR5cGVfc3RyaW5nKHRrdC0+ZW5jX3BhcnQuZW5jdHlwZSkpOwotI2VuZGlmIC8q IEhFSU1EQUwgKi8KLSAgICAgICAga3JiNV9mcmVlX3RpY2tldChrY29udGV4dCwgdGt0KTsKLSAg ICAgICAgZXh0cmFfZmllbGQrKzsKLSAgICB9Ci0KLSAgICAvKiBpZiBhbnkgYWRkaXRpb25hbCBp bmZvIHdhcyBwcmludGVkLCBleHRyYV9maWVsZCBpcyBub24temVybyAqLwotICAgIGlmIChleHRy YV9maWVsZCkKLSAgICAgICAgcHJpbnRmKCJcclxuIik7Ci0KLSAgICBpZiAoIHNob3dfYWRkciAp IHsKLSAgICAgICAgaWYgKCFjcmVkLT5hZGRyZXNzZXMgfHwgIWNyZWQtPmFkZHJlc3Nlc1swXSkg ewotICAgICAgICAgICAgcHJpbnRmKCJcdEFkZHJlc3NlczogKG5vbmUpXHJcbiIpOwotICAgICAg ICB9IGVsc2UgewotICAgICAgICAgICAgaW50IGk7Ci0gICAgICAgICAgICBmb3IgKGk9MDsgY3Jl ZC0+YWRkcmVzc2VzW2ldOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoaSkKLSAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKCIgICAgICAgICAgICAgICIpOwotICAgICAgICAgICAgICAgIGVs c2UKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgICBBZGRyZXNzZXM6ICIpOwotICAgICAg ICAgICAgICAgIG9uZV9hZGRyKGNyZWQtPmFkZHJlc3Nlc1tpXSk7Ci0gICAgICAgICAgICAgICAg cHJpbnRmKCJcclxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBr cmI1X2ZyZWVfdW5wYXJzZWRfbmFtZShrY29udGV4dCxuYW1lKTsKLSAgICBrcmI1X2ZyZWVfdW5w YXJzZWRfbmFtZShrY29udGV4dCxzbmFtZSk7Ci0KLSAgICBrcmI1X2Vycm5vID0gMDsKLSAgICBt YWtlc3RyKCZrcmI1X2Vycm1zZywiT0siKTsKLX0KLQotc3RhdGljIFZPSUQKLSNpZmRlZiBDS19B TlNJQwotZmlsbGl0KGludCBudW0sIGludCBjKQotI2Vsc2UKLWZpbGxpdChudW0sIGMpIGludCBu dW07IGludCBjOwotI2VuZGlmCi17Ci0gICAgaW50IGk7Ci0KLSAgICBmb3IgKGk9MDsgaTxudW07 IGkrKykKLSAgICAgICAgcHJpbnRmKCIlYyIsYyk7Ci19Ci0jZW5kaWYgLyogS0xJU1QgKi8KLSNl bmRpZiAvKiBLUkI1ICovCi0KLSNpZmRlZiBLUkI0Ci0jZGVmaW5lIEtERUJVRyAxCi1pbnQgazRk ZWJ1ZyA9IDA7ICAgICAgICAgICAgICAgIC8qIEtlcmJlcm9zIDQgcnVudGltZSBkZWJ1Z2dpbmcg Ki8KLQotI2lmZGVmIEtJTklUCi0jZGVmaW5lIEtSQl9ERUZBVUxUX0xJRkUgMTIwIC8qIDEwIGhv dXJzIGluIDUgbWludXRlIGludGVydmFscyAqLwotCi0jaWZkZWYgU05LNAotLyogU05LNCBpcyBh IGhhcmR3YXJlIGF1dGhlbnRpY2F0aW9uIHN5c3RlbSB1c2VkIHRvIHByZS1hdXRoZW50aWNhdGUg ICAgKi8KLS8qIGEgdGlja2V0IGdldHRpbmcgdGlja2V0LiAgV2UgZG8gbm90IHN1cHBvcnQgdGhp cyBjb2RlIGF0IHRoZSBwcmVzZW50ICovCi0vKiB0aW1lIGluIEtlcm1pdC4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotdm9pZAotZ2V0X2lu cHV0KHMsIHNpemUsIHN0cmVhbSkKLWNoYXIgKnM7Ci1pbnQgc2l6ZTsKLUZJTEUgKnN0cmVhbTsK LXsKLSAgICBjaGFyICpwOwotCi0gICAgaWYgKGZnZXRzKHMsIHNpemUsIHN0cmVhbSkgPT0gTlVM TCkKLSAgICAgICAgZXhpdCgxKTsKLSAgICBpZiAoIChwID0gc3RyY2hyKHMsICdcbicpKSAhPSBO VUxMKQotICAgICAgICAqcCA9ICdcMCc7Ci19Ci0jZW5kaWYgLyogU05LNCAqLwotCi0jaWZkZWYg Q09NTUVOVAotc3RhdGljIGNoYXIKLSNpZmRlZiBDS19BTlNJQwotaGV4X3NjYW5fbnliYmxlKGNo YXIgYykKLSNlbHNlCi1oZXhfc2Nhbl9ueWJibGUoYykgY2hhciBjOwotI2VuZGlmCi17Ci0gICAg aWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKQotICAgICAgICByZXR1cm4gYyAtICcwJzsKLSAgICBp ZiAoYyA+PSAnQScgJiYgYyA8PSAnRicpCi0gICAgICAgIHJldHVybiBjIC0gJ0EnICsgMTA7Ci0g ICAgaWYgKGMgPj0gJ2EnICYmIGMgPD0gJ2YnKQotICAgICAgICByZXR1cm4gYyAtICdhJyArIDEw OwotICAgIHJldHVybiAtMTsKLX0KLQotLyogcmV0dXJuczogTlVMTCBmb3Igb2ssIHBvaW50ZXIg dG8gZXJyb3Igc3RyaW5nIGZvciBiYWQgaW5wdXQgKi8KLXN0YXRpYyBjaGFyKgotI2lmZGVmIENL X0FOU0lDCi1oZXhfc2Nhbl9mb3VyX2J5dGVzKGNoYXIgKm91dCwgY2hhciAqaW4pCi0jZWxzZQot aGV4X3NjYW5fZm91cl9ieXRlcyhvdXQsIGluKSBjaGFyICpvdXQ7IGNoYXIgKmluOwotI2VuZGlm Ci17Ci0gICAgaW50IGk7Ci0gICAgaW50IGM7Ci0gICAgY2hhciBjMTsKLSAgICBmb3IgKGk9MDsg aTw4OyBpKyspIHsKLSAgICAgICAgaWYoIWluW2ldKQotICAgICAgICAgICAgcmV0dXJuICJub3Qg ZW5vdWdoIGlucHV0IjsKLSAgICAgICAgYyA9IGhleF9zY2FuX255YmJsZShpbltpXSk7Ci0gICAg ICAgIGlmKGM8MCkKLSAgICAgICAgICAgIHJldHVybiAiaW52YWxpZCBkaWdpdCI7Ci0gICAgICAg IGMxID0gYzsKLSAgICAgICAgaSsrOwotICAgICAgICBpZighaW5baV0pCi0gICAgICAgICAgICBy ZXR1cm4gIm5vdCBlbm91Z2ggaW5wdXQiOwotICAgICAgICBjID0gaGV4X3NjYW5fbnliYmxlKGlu W2ldKTsKLSAgICAgICAgaWYoYzwwKQotICAgICAgICAgICAgcmV0dXJuICJpbnZhbGlkIGRpZ2l0 IjsKLSAgICAgICAgKm91dCsrID0gKGMxIDw8IDQpICsgYzsKLSAgICB9Ci0gICAgc3dpdGNoKGlu W2ldKSB7Ci0gICAgY2FzZSAwOgotICAgIGNhc2UgJ1xyJzoKLSAgICBjYXNlICdcbic6Ci0gICAg ICAgIHJldHVybiBOVUxMOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAiZXh0cmEgY2hh cmFjdGVycyBhdCBlbmQgb2YgaW5wdXQiOwotICAgIH0KLX0KLSNlbmRpZiAvKiBDT01NRU5UICov Ci0KLS8qIGNrX2tyYjRfaW5pdFRHVCgpIHJldHVybnMgMCBvbiBzdWNjZXNzICovCi1pbnQKLSNp ZmRlZiBDS19BTlNJQwotY2tfa3JiNF9pbml0VEdUKHN0cnVjdCBrcmJfb3BfZGF0YSAqIG9wLCBz dHJ1Y3Qga3JiNF9pbml0X2RhdGEgKiBpbml0KQotI2Vsc2UKLWNrX2tyYjRfaW5pdFRHVChvcCxp bml0KQotICAgIHN0cnVjdCBrcmJfb3BfZGF0YSAqIG9wLCBzdHJ1Y3Qga3JiNF9pbml0X2RhdGEg KiBpbml0Ci0jZW5kaWYKLXsKLSAgICBjaGFyICAgIGFuYW1lW0FOQU1FX1NaKzFdOwotICAgIGNo YXIgICAgaW5zdFtJTlNUX1NaKzFdOwotICAgIGNoYXIgICAgcmVhbG1bUkVBTE1fU1orMV07Ci0g ICAgY2hhciAgICAqcGFzc3dvcmQ9TlVMTDsKLSAgICBjaGFyICAgIHBhc3N3ZFs4MF09IiI7Ci0g ICAgY2hhciAgICAqdXNlcm5hbWUgPSBOVUxMOwotICAgIGNoYXIgICAgKnVzZXJuYW1lcHRyPU5V TEw7Ci0gICAgaW50ICAgICBpZmxhZywgICAgICAvKiBJbnN0YW5jZSAqLwotICAgICAgICAgICAg cmZsYWcsICAgICAgLyogUmVhbG0gKi8KLSAgICAgICAgICAgIHZmbGFnLCAgICAgIC8qIFZlcmJv c2UgKi8KLSAgICAgICAgICAgIGxmbGFnLCAgICAgIC8qIExpZmV0aW1lICovCi0gICAgICAgICAg ICBwZmxhZywgICAgICAvKiBQcmVhdXRoICovCi0gICAgICAgICAgICBsaWZldGltZT1LUkJfREVG QVVMVF9MSUZFLCAgIC8qIExpZmUgVGltZSAqLwotICAgICAgICAgICAga19lcnJubzsKLSAgICBy ZWdpc3RlciBjaGFyICpjcDsKLSAgICByZWdpc3RlciBpOwotCi0gICAgaWYgKCAhY2tfa3JiNF9p c19pbnN0YWxsZWQoKSApCi0gICAgICAgIHJldHVybigtMSk7Ci0KLSAgICAqaW5zdCA9ICpyZWFs bSA9ICdcMCc7Ci0gICAgaWZsYWcgPSByZmxhZyA9IHZmbGFnID0gbGZsYWcgPSBwZmxhZyA9IDA7 Ci0KLSAgICB2ZmxhZyA9IGluaXQtPnZlcmJvc2U7Ci0gICAgcGZsYWcgPSBpbml0LT5wcmVhdXRo OwotCi0gICAgaWYgKCBpbml0LT5saWZldGltZSApIHsKLSAgICAgICAgbGlmZXRpbWUgPSBpbml0 LT5saWZldGltZTw1PzE6aW5pdC0+bGlmZXRpbWUvNTsKLSAgICAgICAgaWYgKCBsaWZldGltZSA+ IDI1NSApIGxpZmV0aW1lID0gMjU1OwotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIGxpZmV0aW1l ID0gS1JCX0RFRkFVTFRfTElGRTsKLQotICAgIHVzZXJuYW1lID0gaW5pdC0+cHJpbmNpcGFsOwot Ci0gICAgaWYgKHVzZXJuYW1lICYmIHVzZXJuYW1lWzBdICYmCi0gICAgICAgIChrX2Vycm5vID0g a25hbWVfcGFyc2UoYW5hbWUsIGluc3QsIHJlYWxtLCB1c2VybmFtZSkpCi0gICAgICAgICE9IEFV VEhfU1VDQ0VTUykgewotICAgICAgICBrcmI0X2Vycm5vID0ga19lcnJubzsKLSAgICAgICAgbWFr ZXN0cigma3JiNF9lcnJtc2csa3JiX2dldF9lcnJfdGV4dF9lbnRyeShrX2Vycm5vKSk7Ci0gICAg ICAgIHByaW50ZigiJXNcclxuIiwga3JiX2dldF9lcnJfdGV4dF9lbnRyeShrX2Vycm5vKSk7Ci0g ICAgICAgIGlmbGFnID0gcmZsYWcgPSAxOwotICAgICAgICB1c2VybmFtZSA9IE5VTEw7Ci0gICAg fQotCi0gICAgaWYgKCBpbml0LT5yZWFsbSApIHsKLSAgICAgICAgY2tzdHJuY3B5KHJlYWxtLGlu aXQtPnJlYWxtLFJFQUxNX1NaKTsKLSAgICB9Ci0KLSAgICBpZiAoIGluaXQtPmluc3RhbmNlICkg ewotICAgICAgICBja3N0cm5jcHkoaW5zdCxpbml0LT5pbnN0YW5jZSwgSU5TVF9TWik7Ci0gICAg fQotCi0jaWZkZWYgQ09NTUVOVAotICAgIGlmICggdmZsYWcgKQotICAgICAgICBwcmludGYoIktl cmJlcm9zIElWIGluaXRpYWxpemF0aW9uXHJcbiIpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQot ICAgIGlmICghdXNlcm5hbWUgfHwgIXVzZXJuYW1lWzBdKSB7Ci0gICAgICAgIGRlYnVnKEYxMDAs ImNrX2tyYjRfaW5pdFRHVCBubyB1c2VybmFtZSBzcGVjaWZpZWQiLCIiLDApOwotICAgICAgICBw cmludGYoIj9JbnZhbGlkIHByaW5jaXBhbCBzcGVjaWZpZWQuXHJcbiIpOwotICAgICAgICBrcmI0 X2Vycm5vID0gLTE7Ci0gICAgICAgIG1ha2VzdHIoJmtyYjRfZXJybXNnLCJObyBwcmluY2lwYWwg c3BlY2lmaWVkIik7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIGlmICghKnJlYWxt KSB7Ci0gICAgICAgIGNrc3RybmNweShyZWFsbSxja19rcmI0X2dldHJlYWxtKCksUkVBTE1fU1op OwotICAgIH0KLQotICAgIGlmICggaW5pdC0+cGFzc3dvcmQgKQotICAgICAgICBwYXNzd29yZCA9 IGluaXQtPnBhc3N3b3JkOwotICAgIGVsc2UgewotICAgICAgICBjaGFyIHBybXB0WzgwXTsKLSAg ICAgICAgaW50IG9rOwotCi0gICAgICAgIGNrbWFreG1zZyhwcm1wdCxzaXplb2YocHJtcHQpLAot ICAgICAgICAgICAgICAgICAgIktlcmJlcm9zIDQgUGFzc3dvcmQgZm9yICIsdXNlcm5hbWUsIkAi LHJlYWxtLCI6ICIsCi0gICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxM LE5VTEwsTlVMTCk7Ci0gICAgICAgIG9rID0gdXFfdHh0KE5VTEwscHJtcHQsMixOVUxMLHBhc3N3 ZCw4MCxOVUxMLERFRkFVTFRfVVFfVElNRU9VVCk7Ci0gICAgICAgIGlmICggb2sgKQotICAgICAg ICAgICAgcGFzc3dvcmQgPSBwYXNzd2Q7Ci0gICAgfQotCi0gICAgaWYgKHBmbGFnKSB7Ci0gICAg ICAgIGtfZXJybm8gPSBrcmJfZ2V0X3B3X2luX3RrdF9wcmVhdXRoKCBhbmFtZSwgaW5zdCwgcmVh bG0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAia3JidGd0 IiwgcmVhbG0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs aWZldGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh c3N3b3JkKTsKLSAgICAgICAgaWYgKGtfZXJybm8gPT0gLTEpIHsgICAgLyogcHJlYXV0aCBtZXRo b2Qgbm90IGF2YWlsYWJsZSAqLwotICAgICAgICAgICAga19lcnJubyA9IGtyYl9nZXRfcHdfaW5f dGt0KGFuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0 LCByZWFsbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtyYnRn dCIsIHJlYWxtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWZl dGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQp OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAga19lcnJubyA9IGtyYl9nZXRfcHdf aW5fdGt0KGFuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3Qs IHJlYWxtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrcmJ0Z3QiLCBy ZWFsbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWZldGltZSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZCk7Ci0gICAgfQotCi0g ICAgbWVtc2V0KHBhc3N3ZCwwLHNpemVvZihwYXNzd2QpKTsKLSAgICBpZiAoa19lcnJubykgewot ICAgICAgICBwcmludGYoIiVzIGZvciBwcmluY2lwYWwgJXMlcyVzQCVzXHJcbiIsCi0gICAgICAg ICAgICAgICAga3JiX2dldF9lcnJfdGV4dF9lbnRyeShrX2Vycm5vKSwgYW5hbWUsCi0gICAgICAg ICAgICAgICAgaW5zdFswXT8iLiI6IiIsIGluc3QsIHJlYWxtKTsKLSAgICAgICAga3JiNF9lcnJu byA9IGtfZXJybm87Ci0gICAgICAgIG1ha2VzdHIoJmtyYjRfZXJybXNnLGtyYl9nZXRfZXJyX3Rl eHRfZW50cnkoa19lcnJubykpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0gZWxzZSBpZiAo dmZsYWcpIHsKLSAgICAgICAgcHJpbnRmKCJSZXN1bHQgZnJvbSByZWFsbSAlczogIiwgcmVhbG0p OwotICAgICAgICBwcmludGYoIiVzXHJcbiIsIGtyYl9nZXRfZXJyX3RleHRfZW50cnkoa19lcnJu bykpOwotICAgIH0KLSAgICBrcmI0X2Vycm5vID0ga19lcnJubzsKLSAgICBtYWtlc3RyKCZrcmI0 X2Vycm1zZyxrcmJfZ2V0X2Vycl90ZXh0X2VudHJ5KGtfZXJybm8pKTsKLSAgICByZXR1cm4oMCk7 Ci19Ci0jZW5kaWYgLyogS0lOSVQgKi8KLSNpZmRlZiBLREVTVFJPWQotaW50Ci0jaWZkZWYgQ0tf QU5TSUMKLWNrX2tyYjRfZGVzdHJveShzdHJ1Y3Qga3JiX29wX2RhdGEgKiBvcCkKLSNlbHNlCi1j a19rcmI0X2Rlc3Ryb3kob3ApIHN0cnVjdCBrcmJfb3BfZGF0YSAqIG9wOwotI2VuZGlmCi17Ci0g ICAgaW50IGtfZXJybm89MDsKLQotICAgIGlmICggIWNrX2tyYjRfaXNfaW5zdGFsbGVkKCkgKQot ICAgICAgICByZXR1cm4oLTEpOwotCi0gICAga19lcnJubyA9IGRlc3RfdGt0KCk7Ci0KLSAgICBr cmI0X2Vycm5vID0ga19lcnJubzsKLSAgICBtYWtlc3RyKCZrcmI0X2Vycm1zZyxrcmJfZ2V0X2Vy cl90ZXh0X2VudHJ5KGtfZXJybm8pKTsKLQotICAgIGlmIChrX2Vycm5vID09IDApCi0gICAgICAg IHByaW50ZigiVGlja2V0cyBkZXN0cm95ZWQuXHJcbiIpOwotICAgIGVsc2UgaWYgKGtfZXJybm8g PT0gUkVUX1RLRklMKQotICAgICAgICBwcmludGYoIk5vIHRpY2tldHMgdG8gZGVzdHJveS5cclxu Iik7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHByaW50ZigiVGlja2V0cyBNQVkgTk9UIGJlIGRlc3Ry b3llZC5cclxuIik7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIHJldHVybigwKTsK LX0KLSNlbmRpZiAvKiBLREVTVFJPWSAqLwotI2lmZGVmIEtMSVNUCi1fUFJPVE9UWVAoc3RhdGlj IGludCBkaXNwbGF5X3RrdGZpbGUsKGNoYXIgKiwgaW50LCBpbnQsIGludCkpOwotCi1pbnQKLSNp ZmRlZiBDS19BTlNJQwotY2tfa3JiNF9saXN0X2NyZWRzKHN0cnVjdCBrcmJfb3BfZGF0YSAqIG9w KQotI2Vsc2UKLWNrX2tyYjRfbGlzdF9jcmVkcyhvcCkgc3RydWN0IGtyYl9vcF9kYXRhICogb3A7 Ci0jZW5kaWYKLXsKLSAgICBpbnQgICAgIGxvbmdfZm9ybSA9IDE7Ci0gICAgaW50ICAgICB0Z3Rf dGVzdCA9IDA7Ci0gICAgaW50ICAgICBkb19zcnZ0YWIgPSAwOwotICAgIGludCAgICAgc2hvd19r dm5vcyA9IDA7Ci0gICAgY2hhciAgICp0a3RfZmlsZSA9IE5VTEw7Ci0KLSAgICBpZiAoICFja19r cmI0X2lzX2luc3RhbGxlZCgpICkKLSAgICAgICAgcmV0dXJuKC0xKTsKLQotICAgIGlmICggb3At PmNhY2hlICkKLSAgICAgICAgdGt0X2ZpbGUgPSBvcC0+Y2FjaGU7Ci0KLSAgICBpZiAoIGs0ZGVi dWcgKSB7Ci0gICAgICAgIHNob3dfa3Zub3MgPSAxOwotICAgIH0KLQotICAgIGlmIChkb19zcnZ0 YWIpCi0gICAgICAgIHJldHVybihkaXNwbGF5X3NydnRhYih0a3RfZmlsZSkpOwotICAgIGVsc2UK LSAgICAgICAgcmV0dXJuKGRpc3BsYXlfdGt0ZmlsZSh0a3RfZmlsZSwgdGd0X3Rlc3QsIGxvbmdf Zm9ybSwgc2hvd19rdm5vcykpOwotfQotCi0jaWZuZGVmIEtSQjUKLXN0YXRpYyBpbnQgdGltZXN0 YW1wX3dpZHRoPTA7Ci0KLXN0YXRpYyBjaGFyICAgKgotI2lmZGVmIENLX0FOU0lDCi1zaG9ydF9k YXRlKGxvbmcgICAqZHApCi0jZWxzZQotc2hvcnRfZGF0ZShkcCkgbG9uZyAgICpkcDsKLSNlbmRp ZgotewotICAgIHJlZ2lzdGVyIGNoYXIgKmNwOwotICAgIGV4dGVybiBjaGFyICpjdGltZSgpOwot ICAgIGNwID0gY3RpbWUoZHApICsgNDsKLSAgICBjcFsxNV0gPSAnXDAnOwotICAgIHJldHVybiAo Y3ApOwotfQotCi0KLXN0YXRpYyBWT0lECi0jaWZkZWYgQ0tfQU5TSUMKLXByaW50dGltZSh0aW1l X3QgdHYpCi0jZWxzZQotcHJpbnR0aW1lKHR2KSB0aW1lX3QgdHY7Ci0jZW5kaWYKLXsKLSAgICBj aGFyIHRpbWVzdHJpbmdbQlVGU0laXTsKLSAgICBjaGFyIGZvcm1hdFsxMl07Ci0gICAgY2hhciBm aWxsOwotCi0gICAgZmlsbCA9ICcgJzsKLSAgICBzcHJpbnRmKGZvcm1hdCwiJSUtJWRzIix0aW1l c3RhbXBfd2lkdGgpOyAgIC8qIHNhZmUgKi8KLSAgICBwcmludGYoZm9ybWF0LHNob3J0X2RhdGUo JnR2KSk7Ci19Ci0jZW5kaWYgLyogS1JCNSAqLwotCi1zdGF0aWMgaW50Ci0jaWZkZWYgQ0tfQU5T SUMKLWRpc3BsYXlfdGt0ZmlsZShjaGFyICpmaWxlLCBpbnQgdGd0X3Rlc3QsIGludCBsb25nX2Zv cm0sIGludCBzaG93X2t2bm9zKQotI2Vsc2UKLWRpc3BsYXlfdGt0ZmlsZShmaWxlLHRndF90ZXN0 LGxvbmdfZm9ybSxzaG93X2t2bm9zKQotICAgIGNoYXIgKmZpbGU7IGludCB0Z3RfdGVzdDsgaW50 IGxvbmdfZm9ybTsgaW50IHNob3dfa3Zub3M7Ci0jZW5kaWYKLXsKLSAgICBjaGFyICAgIHBuYW1l W0FOQU1FX1NaXTsKLSAgICBjaGFyICAgIHBpbnN0W0lOU1RfU1pdOwotICAgIGNoYXIgICAgcHJl YWxtW1JFQUxNX1NaXTsKLSAgICBjaGFyICAgIGJ1ZjFbMjBdLCBidWYyWzIwXTsKLSAgICBpbnQg ICAgIGtfZXJybm87Ci0jaWZkZWYgT1MyCi0gICAgTEVBU0hfQ1JFREVOVElBTFMgY3JlZHM7Ci0j ZWxzZSAvKiBPUzIgKi8KLSAgICBDUkVERU5USUFMUyBjcmVkczsKLSNlbmRpZiAvKiBPUzIgKi8K LSAgICBpbnQgICAgIGhlYWRlciA9IDE7Ci0KLSAgICBmaWxlID0gdGt0X3N0cmluZygpOwotCi0g ICAgaWYgKGxvbmdfZm9ybSkgewotICAgICAgICBwcmludGYoIlRpY2tldCBjYWNoZTogICAgICAl c1xyXG4iLCBmaWxlKTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIFNpbmNlIGtyYl9nZXRfdGZf cmVhbG0gd2lsbCByZXR1cm4gYSB0aWNrZXRfZmlsZSBlcnJvciwKLSAgICAgKiB3ZSB3aWxsIGNh bGwgdGZfaW5pdCBhbmQgdGZfY2xvc2UgZmlyc3QgdG8gZmlsdGVyIG91dAotICAgICAqIHRoaW5n cyBsaWtlIG5vIHRpY2tldCBmaWxlLiAgT3RoZXJ3aXNlLCB0aGUgZXJyb3IgdGhhdAotICAgICAq IHRoZSB1c2VyIHdvdWxkIHNlZSB3b3VsZCBiZQotICAgICAqIGtsaXN0OiBjYW4ndCBmaW5kIHJl YWxtIG9mIHRpY2tldCBmaWxlOiBObyB0aWNrZXQgZmlsZSAodGZfdXRpbCkKLSAgICAgKiBpbnN0 ZWFkIG9mCi0gICAgICoga2xpc3Q6IE5vIHRpY2tldCBmaWxlICh0Zl91dGlsKQotICAgICAqLwot Ci0gICAgLyogT3BlbiB0aWNrZXQgZmlsZSAqLwotICAgIGlmIChrX2Vycm5vID0gdGZfaW5pdChm aWxlLCBSX1RLVF9GSUwpKSB7Ci0gICAgICAgIGlmICghdGd0X3Rlc3QpCi0gICAgICAgICAgICBw cmludGYoIiVzXHJcbiIsIGtyYl9nZXRfZXJyX3RleHRfZW50cnkgKGtfZXJybm8pKTsKLSAgICAg ICAga3JiNF9lcnJubyA9IGtfZXJybm87Ci0gICAgICAgIG1ha2VzdHIoJmtyYjRfZXJybXNnLGty Yl9nZXRfZXJyX3RleHRfZW50cnkoa19lcnJubykpOwotICAgICAgICByZXR1cm4oLTEpOwotICAg IH0KLQotCi0gICAgLyogQ2xvc2UgdGlja2V0IGZpbGUgKi8KLSAgICAodm9pZCkgdGZfY2xvc2Uo KTsKLQotICAgIC8qCi0gICAgICogV2UgbXVzdCBmaW5kIHRoZSByZWFsbSBvZiB0aGUgdGlja2V0 IGZpbGUgaGVyZSBiZWZvcmUgY2FsbGluZwotICAgICAqIHRmX2luaXQgYmVjYXVzZSBzaW5jZSB0 aGUgcmVhbG0gb2YgdGhlIHRpY2tldCBmaWxlIGlzIG5vdAotICAgICAqIHJlYWxseSBzdG9yZWQg aW4gdGhlIHByaW5jaXBhbCBzZWN0aW9uIG9mIHRoZSBmaWxlLCB0aGUKLSAgICAgKiByb3V0aW5l IHdlIHVzZSBtdXN0IGl0c2VsZiBjYWxsIHRmX2luaXQgYW5kIHRmX2Nsb3NlLgotICAgICAqLwot ICAgIGlmICgoa19lcnJubyA9IGtyYl9nZXRfdGZfcmVhbG0oZmlsZSwgcHJlYWxtKSkgIT0gQVVU SF9TVUNDRVNTKSB7Ci0gICAgICAgIGlmICghdGd0X3Rlc3QpCi0gICAgICAgICAgICBwcmludGYo ImNhbid0IGZpbmQgcmVhbG0gb2YgdGlja2V0IGZpbGU6ICVzXHJcbiIsCi0gICAgICAgICAgICAg ICAgICAgIGtyYl9nZXRfZXJyX3RleHRfZW50cnkgKGtfZXJybm8pKTsKLSAgICAgICAga3JiNF9l cnJubyA9IGtfZXJybm87Ci0gICAgICAgIG1ha2VzdHIoJmtyYjRfZXJybXNnLGtyYl9nZXRfZXJy X3RleHRfZW50cnkoa19lcnJubykpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLQotICAg IC8qIE9wZW4gdGlja2V0IGZpbGUgKi8KLSAgICBpZiAoa19lcnJubyA9IHRmX2luaXQoZmlsZSwg Ul9US1RfRklMKSkgewotICAgICAgICBpZiAoIXRndF90ZXN0KQotICAgICAgICAgICAgcHJpbnRm KCIlc1xyXG4iLCBrcmJfZ2V0X2Vycl90ZXh0X2VudHJ5IChrX2Vycm5vKSk7Ci0gICAgICAgIGty YjRfZXJybm8gPSBrX2Vycm5vOwotICAgICAgICBtYWtlc3RyKCZrcmI0X2Vycm1zZyxrcmJfZ2V0 X2Vycl90ZXh0X2VudHJ5KGtfZXJybm8pKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0g ICAgLyogR2V0IHByaW5jaXBhbCBuYW1lIGFuZCBpbnN0YW5jZSAqLwotICAgIGlmICgoa19lcnJu byA9IHRmX2dldF9wbmFtZShwbmFtZSkpIHx8Ci0gICAgICAgICAoa19lcnJubyA9IHRmX2dldF9w aW5zdChwaW5zdCkpKSB7Ci0gICAgICAgICh2b2lkKSB0Zl9jbG9zZSgpOwotICAgICAgICBpZiAo IXRndF90ZXN0KQotICAgICAgICAgICAgcHJpbnRmKCIlc1xyXG4iLCBrcmJfZ2V0X2Vycl90ZXh0 X2VudHJ5IChrX2Vycm5vKSk7Ci0gICAgICAgIGtyYjRfZXJybm8gPSBrX2Vycm5vOwotICAgICAg ICBtYWtlc3RyKCZrcmI0X2Vycm1zZyxrcmJfZ2V0X2Vycl90ZXh0X2VudHJ5KGtfZXJybm8pKTsK LSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIFlvdSBtYXkgdGhp bmsgdGhhdCB0aGlzIGlzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIGdldCB0aGUKLSAgICAgKiByZWFs bSBvZiB0aGUgdGlja2V0IGZpbGUsIGJ1dCBpdCBjYW4ndCBiZSBkb25lIGhlcmUgYXMgdGhlCi0g ICAgICogcm91dGluZSB0byBkbyB0aGlzIG11c3Qgb3BlbiB0aGUgdGlja2V0IGZpbGUuICBUaGlz IGlzIHdoeQotICAgICAqIGl0IHdhcyBkb25lIGJlZm9yZSB0Zl9pbml0LgotICAgICAqLwotCi0g ICAgaWYgKCF0Z3RfdGVzdCAmJiBsb25nX2Zvcm0pCi0gICAgICAgIHByaW50ZigiRGVmYXVsdCBw cmluY2lwYWw6ICVzJXMlcyVzJXNcclxuXHJcbiIsIHBuYW1lLAotICAgICAgICAgICAgICAgKHBp bnN0WzBdID8gIi4iIDogIiIpLCBwaW5zdCwKLSAgICAgICAgICAgICAgIChwcmVhbG1bMF0gPyAi QCIgOiAiIiksIHByZWFsbSk7Ci0KLSAgICB3aGlsZSAoKGtfZXJybm8gPSB0Zl9nZXRfY3JlZCgm Y3JlZHMpKSA9PSBBVVRIX1NVQ0NFU1MpIHsKLSAgICAgICAgaWYgKCF0Z3RfdGVzdCAmJiBsb25n X2Zvcm0gJiYgaGVhZGVyKSB7Ci0gICAgICAgICAgICBwcmludGYoIiUtMTdzICAlLTE3cyAgJXNc clxuIiwKLSAgICAgICAgICAgICAgICAgICAiVmFsaWQgc3RhcnRpbmciLCAiRXhwaXJlcyIsICJT ZXJ2aWNlIHByaW5jaXBhbCIpOwotICAgICAgICAgICAgaGVhZGVyID0gMDsKLSAgICAgICAgfQot ICAgICAgICBpZiAodGd0X3Rlc3QpIHsKLSAgICAgICAgICAgIGNyZWRzLmlzc3VlX2RhdGUgKz0g KCh1bnNpZ25lZCBjaGFyKSBjcmVkcy5saWZldGltZSkgKiA1ICogNjA7Ci0gICAgICAgICAgICBp ZiAoIXN0cmNtcChjcmVkcy5zZXJ2aWNlLCAia3JidGd0IikgJiYKLSAgICAgICAgICAgICAgICAh c3RyY21wKGNyZWRzLmluc3RhbmNlLCBwcmVhbG0pKSB7Ci0gICAgICAgICAgICAgICAga3JiNF9l cnJubyA9IGtfZXJybm87Ci0gICAgICAgICAgICAgICAgbWFrZXN0cigma3JiNF9lcnJtc2csa3Ji X2dldF9lcnJfdGV4dF9lbnRyeShrX2Vycm5vKSk7Ci0KLSAgICAgICAgICAgICAgICAodm9pZCkg dGZfY2xvc2UoKTsKLSAgICAgICAgICAgICAgICBpZiAodGltZSgwKSA8IGNyZWRzLmlzc3VlX2Rh dGUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKDApOyAgICAgICAgICAvKiB0Z3QgaGFz bid0IGV4cGlyZWQgKi8KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg ICAgICByZXR1cm4oLTEpOyAgICAgICAgIC8qIGhhcyBleHBpcmVkICovCi0gICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgICAg ICAgIC8qIG5vdCBhIHRndCAqLwotICAgICAgICB9Ci0gICAgICAgIGlmIChsb25nX2Zvcm0pIHsK LSAgICAgICAgICAgIHRpbWVzdGFtcF93aWR0aCA9IDE3OyAgICAgICAvKiBmb3IgazUgZGlzcGxh eSBmdW5jdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IGlmIGF2YWlsYWJsZSAgICAgICAgICAgICovCi0gICAgICAgICAgICBwcmludHRpbWUoY3JlZHMu aXNzdWVfZGF0ZSk7Ci0gICAgICAgICAgICBwcmludGYoIiAgIik7Ci0gICAgICAgICAgICBjcmVk cy5pc3N1ZV9kYXRlICs9ICgodW5zaWduZWQgY2hhcikgY3JlZHMubGlmZXRpbWUpICogNSAqIDYw OwotICAgICAgICAgICAgaWYgKCB0aW1lKDApIDwgY3JlZHMuaXNzdWVfZGF0ZSApCi0gICAgICAg ICAgICAgICAgcHJpbnR0aW1lKGNyZWRzLmlzc3VlX2RhdGUpOwotICAgICAgICAgICAgZWxzZQot ICAgICAgICAgICAgICAgIHByaW50ZigiKioqIGV4cGlyZWQgKioqICAiKTsKLSAgICAgICAgICAg IHByaW50ZigiICAiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc2hvd19rdm5vcykKLSAgICAg ICAgICBwcmludGYoIiVzJXMlcyVzJXMgKCVkKVxyXG4iLAotICAgICAgICAgICAgICAgICBjcmVk cy5zZXJ2aWNlLCAoY3JlZHMuaW5zdGFuY2VbMF0gPyAiLiIgOiAiIiksIGNyZWRzLmluc3RhbmNl LAotICAgICAgICAgICAgICAgICAoY3JlZHMucmVhbG1bMF0gPyAiQCIgOiAiIiksIGNyZWRzLnJl YWxtLCBjcmVkcy5rdm5vKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHByaW50ZigiJXMlcyVz JXMlc1xyXG4iLAotICAgICAgICAgICAgICAgICBjcmVkcy5zZXJ2aWNlLCAoY3JlZHMuaW5zdGFu Y2VbMF0gPyAiLiIgOiAiIiksIGNyZWRzLmluc3RhbmNlLAotICAgICAgICAgICAgICAgICAoY3Jl ZHMucmVhbG1bMF0gPyAiQCIgOiAiIiksIGNyZWRzLnJlYWxtKTsKLQotI2lmZGVmIE9TMgotICAg ICAgICBpZiAoIGNyZWRzLmFkZHJlc3NbMF0gKQotICAgICAgICAgICAgcHJpbnRmKCIgICBBZGRy ZXNzOiAlc1xyXG4iLGNyZWRzLmFkZHJlc3MpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgIH0KLQot ICAgICh2b2lkKSB0Zl9jbG9zZSgpOwotCi0gICAgaWYgKHRndF90ZXN0KSB7Ci0gICAgICAgIHJl dHVybigtMSk7Ci0gICAgfS8qIG5vIHRndCBmb3VuZCAqLwotICAgIGlmIChoZWFkZXIgJiYgbG9u Z19mb3JtICYmIGtfZXJybm8gPT0gRU9GKSB7Ci0gICAgICAgIHByaW50ZigiTm8gdGlja2V0cyBp biBmaWxlLlxyXG4iKTsKLSAgICB9Ci0gICAga3JiNF9lcnJubyA9IGtfZXJybm87Ci0gICAgbWFr ZXN0cigma3JiNF9lcnJtc2csa3JiX2dldF9lcnJfdGV4dF9lbnRyeShrX2Vycm5vKSk7Ci0gICAg cmV0dXJuKDApOwotfQotCi0jaWZkZWYgQ09NTUVOVAotLyogSnVzdCBzbyB3ZSByZW1lbWJlciB3 aGF0IHRoZSBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIGxvb2tlZCBsaWtlICovCi11c2FnZSgpCi17 Ci0gICAgcHJpbnRmKAotICAgICAgICAiVXNhZ2U6IFsgLXMgfCAtdCBdIFsgLWZpbGUgZmlsZW5h bWUgXSBbIC1zcnZ0YWIgXSBbIC12ZXJzaW9uIF1cclxuIik7Ci0gICAgcmV0dXJuKC0xKTsKLX0K LSNlbmRpZiAvKiBDT01NRU5UICovCi0KLS8qIGFkYXB0ZWQgZnJvbSBnZXRzdCgpIGluIGxpYnJr YiAqLwotLyoKLSAqIG9rX2dldHN0KCkgdGFrZXMgYSBmaWxlIGRlc2NyaXB0b3IsIGEgc3RyaW5n IGFuZCBhIGNvdW50LiAgSXQgcmVhZHMKLSAqIGZyb20gdGhlIGZpbGUgdW50aWwgZWl0aGVyIGl0 IGhhcyByZWFkICJjb3VudCIgY2hhcmFjdGVycywgb3IgdW50aWwKLSAqIGl0IHJlYWRzIGEgbnVs bCBieXRlLiAgV2hlbiBmaW5pc2hlZCwgd2hhdCBoYXMgYmVlbiByZWFkIGV4aXN0cyBpbgotICog dGhlIGdpdmVuIHN0cmluZyAicyIuICBJZiAiY291bnQiIGNoYXJhY3RlcnMgd2VyZSBhY3R1YWxs eSByZWFkLCB0aGUKLSAqIGxhc3QgaXMgY2hhbmdlZCB0byBhIG51bGwsIHNvIHRoZSByZXR1cm5l ZCBzdHJpbmcgaXMgYWx3YXlzIG51bGwtCi0gKiB0ZXJtaW5hdGVkLiAgb2tfZ2V0c3QoKSByZXR1 cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLCBpbmNsdWRpbmcKLSAqIHRoZSBudWxs IHRlcm1pbmF0b3IuCi0gKgotICogSWYgdGhlcmUgaXMgYSByZWFkIGVycm9yLCBpdCByZXR1cm5z IC0xIChsaWtlIHRoZSByZWFkKDIpIHN5c3RlbSBjYWxsKQotICovCi0KLXN0YXRpYyBpbnQKLSNp ZmRlZiBDS19BTlNJQwotb2tfZ2V0c3QoaW50IGZkLCByZWdpc3RlciBjaGFyICpzLCBpbnQgbikK LSNlbHNlCi1va19nZXRzdChmZCwgcywgbikgaW50IGZkOyByZWdpc3RlciBjaGFyICpzOyBpbnQg bjsKLSNlbmRpZgotewotICAgIHJlZ2lzdGVyIGludCBjb3VudCA9IG47Ci0gICAgaW50IGVycjsK LSAgICB3aGlsZSAoKGVyciA9IHJlYWQoZmQsIHMsIDEpKSA+IDAgJiYgLS1jb3VudCkKLSAgICAg ICAgaWYgKCpzKysgPT0gJ1wwJykKLSAgICAgICAgICAgIHJldHVybiAobiAtIGNvdW50KTsKLSAg ICBpZiAoZXJyIDwgMCkKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAqcyA9ICdcMCc7Ci0gICAg cmV0dXJuIChuIC0gY291bnQpOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotZGlzcGxheV9z cnZ0YWIoY2hhciAqZmlsZSkKLSNlbHNlCi1kaXNwbGF5X3NydnRhYihmaWxlKSBjaGFyICpmaWxl OwotI2VuZGlmCi17Ci0gICAgaW50IHN0YWI7Ci0gICAgY2hhciBzZXJ2W1NOQU1FX1NaXTsKLSAg ICBjaGFyIGluc3RbSU5TVF9TWl07Ci0gICAgY2hhciBybG1bUkVBTE1fU1pdOwotICAgIHVuc2ln bmVkIGNoYXIga2V5WzhdOwotICAgIHVuc2lnbmVkIGNoYXIgdm5vOwotICAgIGludCBjb3VudDsK LQotICAgIHByaW50ZigiU2VydmVyIGtleSBmaWxlOiAgICVzXHJcbiIsIGZpbGUpOwotI2lmZGVm IE5UCi0jaWZuZGVmIE9fUkRPTkxZCi0jZGVmaW5lIE9fUkRPTkxZIF9PX1JET05MWQotI2VuZGlm IC8qIE9fUkRPTkxZICovCi0jZW5kaWYgLyogTlQgKi8KLQotICAgIGlmICgoc3RhYiA9IG9wZW4o ZmlsZSwgT19SRE9OTFksIDA0MDApKSA8IDApIHsKLSAgICAgICAgcGVycm9yKGZpbGUpOwotICAg ICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBwcmludGYoIiUtMTVzICUtMTVzICUtMTBzICVz XHJcbiIsIlNlcnZpY2UiLCJJbnN0YW5jZSIsIlJlYWxtIiwKLSAgICAgICAgICAgIktleSBWZXJz aW9uIik7Ci0gICAgcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS1cclxuIik7Ci0KLSAgICAvKiBhcmdoLiBnZXRzdCBkb2Vzbid0IHJl dHVybiBlcnJvciBjb2RlcywgaXQgc2lsZW50bHkgZmFpbHMgKi8KLSAgICB3aGlsZSAoKChjb3Vu dCA9IG9rX2dldHN0KHN0YWIsIHNlcnYsIFNOQU1FX1NaKSkgPiAwKQotICAgICAgICAgICAmJiAo KGNvdW50ID0gb2tfZ2V0c3Qoc3RhYiwgaW5zdCwgSU5TVF9TWikpID4gMCkKLSAgICAgICAgICAg JiYgKChjb3VudCA9IG9rX2dldHN0KHN0YWIsIHJsbSwgUkVBTE1fU1opKSA+IDApKSB7Ci0gICAg ICAgIGlmICgoKGNvdW50ID0gcmVhZChzdGFiLChjaGFyICopICZ2bm8sMSkpICE9IDEpIHx8Ci0g ICAgICAgICAgICAgKChjb3VudCA9IHJlYWQoc3RhYiwoY2hhciAqKSBrZXksOCkpICE9IDgpKSB7 Ci0gICAgICAgICAgICBpZiAoY291bnQgPCAwKQotICAgICAgICAgICAgICAgIHBlcnJvcigicmVh ZGluZyBmcm9tIGtleSBmaWxlIik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg cHJpbnRmKCJrZXkgZmlsZSB0cnVuY2F0ZWRcclxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTEp OwotICAgICAgICB9Ci0gICAgICAgIHByaW50ZigiJS0xNXMgJS0xNXMgJS0xNXMgJWRcclxuIixz ZXJ2LGluc3QscmxtLHZubyk7Ci0gICAgfQotICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgIHBl cnJvcihmaWxlKTsKLSAgICAodm9pZCkgY2xvc2Uoc3RhYik7Ci0gICAgcmV0dXJuKDApOwotfQot I2VuZGlmIC8qIEtMSVNUICovCi0jZWxzZSAvKiBLUkI0ICovCi1pbnQKLWNrX2tyYjRfYXV0b2dl dF9UR1QoY2hhciAqIGR1bW15KQotewotICAgIHJldHVybigtMSk7Ci19Ci0jaWZkZWYgQ0tfS0VS QkVST1MKLWludAotI2lmZGVmIENLX0FOU0lDCi1ja19rcmI0X2luaXRUR1Qoc3RydWN0IGtyYl9v cF9kYXRhICogb3AsIHN0cnVjdCBrcmI0X2luaXRfZGF0YSAqIGluaXQpCi0jZWxzZQotY2tfa3Ji NF9pbml0VEdUKG9wLGluaXQpCi0gICAgc3RydWN0IGtyYl9vcF9kYXRhICogb3AsIHN0cnVjdCBr cmI0X2luaXRfZGF0YSAqIGluaXQKLSNlbmRpZgotewotICAgIHJldHVybigtMSk7Ci19Ci0KLSNp ZmRlZiBDS19BTlNJQwotY2tfa3JiNF9kZXN0cm95KHN0cnVjdCBrcmJfb3BfZGF0YSAqIG9wKQot I2Vsc2UKLWNrX2tyYjRfZGVzdHJveShvcCkgc3RydWN0IGtyYl9vcF9kYXRhICogb3A7Ci0jZW5k aWYKLXsKLSAgICByZXR1cm4oLTEpOwotfQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWNrX2tyYjRf bGlzdF9jcmVkcyhzdHJ1Y3Qga3JiX29wX2RhdGEgKiBvcCkKLSNlbHNlCi1ja19rcmI0X2xpc3Rf Y3JlZHMob3ApIHN0cnVjdCBrcmJfb3BfZGF0YSAqIG9wOwotI2VuZGlmCi17Ci0gICAgcmV0dXJu KC0xKTsKLX0KLSNlbHNlIC8qIENLX0tFUkJFUk9TICovCi1pbnQgY2tfa3JiNF9pbml0VEdUKHZv aWQgKiBhLCB2b2lkICpiKQotewotICAgIHJldHVybigtMSk7Ci19Ci1pbnQgY2tfa3JiNF9kZXN0 cm95KHZvaWQgKmEpCi17Ci0gICAgcmV0dXJuKC0xKTsKLX0KLWludCBja19rcmI0X2xpc3RfY3Jl ZHModm9pZCAqYSkKLXsKLSAgICByZXR1cm4oLTEpOwotfQotI2VuZGlmIC8qIENLX0tFUkJFUk9T ICovCi0jZW5kaWYgLyogS1JCNCAqLwotCi0vKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUg dXNlZCB0byBpbXBsZW1lbnQgdGhlIEtlcm1pdCBTY3JpcHQgTGFuZ3VhZ2UgKi8KLS8qIGZ1bmN0 aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqLwotCi1zdHJ1Y3QgdGt0X2xpc3RfaXRlbSB7Ci0gICAgY2hhciAqIG5hbWU7 Ci0gICAgc3RydWN0IHRrdF9saXN0X2l0ZW0gKiBuZXh0OwotfTsKLQotc3RhdGljIHN0cnVjdCB0 a3RfbGlzdF9pdGVtICogazRfdGt0X2xpc3QgPSBOVUxMOwotCi1pbnQKLSNpZmRlZiBDS19BTlNJ QwotY2tfa3JiNF9nZXRfdGt0cyhWT0lEKQotI2Vsc2UKLWNrX2tyYjRfZ2V0X3RrdHMoKQotI2Vu ZGlmCi17Ci0jaWZkZWYgS1JCNAotICAgIGNoYXIgICAqZmlsZT1OVUxMOwotICAgIGNoYXIgICAg cG5hbWVbQU5BTUVfU1pdOwotICAgIGNoYXIgICAgcGluc3RbSU5TVF9TWl07Ci0gICAgY2hhciAg ICBwcmVhbG1bUkVBTE1fU1pdOwotICAgIGNoYXIgICAgYnVmMVsyMF0sIGJ1ZjJbMjBdOwotICAg IGludCAgICAga19lcnJubzsKLSNpZmRlZiBPUzIKLSAgICBMRUFTSF9DUkVERU5USUFMUyBjcmVk czsKLSNlbHNlIC8qIE9TMiAqLwotICAgIENSRURFTlRJQUxTIGNyZWRzOwotI2VuZGlmIC8qIE9T MiAqLwotICAgIGludCAgICAgdGt0X2NvdW50PTA7Ci0gICAgc3RydWN0ICB0a3RfbGlzdF9pdGVt ICoqIGxpc3QgPSAmazRfdGt0X2xpc3Q7Ci0KLSAgICB3aGlsZSAoIGs0X3RrdF9saXN0ICkgewot ICAgICAgICBzdHJ1Y3QgdGt0X2xpc3RfaXRlbSAqIG5leHQ7Ci0gICAgICAgIG5leHQgPSBrNF90 a3RfbGlzdC0+bmV4dDsKLSAgICAgICAgZnJlZShrNF90a3RfbGlzdC0+bmFtZSk7Ci0gICAgICAg IGZyZWUoazRfdGt0X2xpc3QpOwotICAgICAgICBrNF90a3RfbGlzdCA9IG5leHQ7Ci0gICAgfQot Ci0gICAgaWYgKCAhY2tfa3JiNF9pc19pbnN0YWxsZWQoKSApCi0gICAgICAgIHJldHVybigtMSk7 Ci0KLSAgICBmaWxlID0gdGt0X3N0cmluZygpOwotCi0gICAgLyoKLSAgICAgKiBTaW5jZSBrcmJf Z2V0X3RmX3JlYWxtIHdpbGwgcmV0dXJuIGEgdGlja2V0X2ZpbGUgZXJyb3IsCi0gICAgICogd2Ug d2lsbCBjYWxsIHRmX2luaXQgYW5kIHRmX2Nsb3NlIGZpcnN0IHRvIGZpbHRlciBvdXQKLSAgICAg KiB0aGluZ3MgbGlrZSBubyB0aWNrZXQgZmlsZS4gIE90aGVyd2lzZSwgdGhlIGVycm9yIHRoYXQK LSAgICAgKiB0aGUgdXNlciB3b3VsZCBzZWUgd291bGQgYmUKLSAgICAgKiBrbGlzdDogY2FuJ3Qg ZmluZCByZWFsbSBvZiB0aWNrZXQgZmlsZTogTm8gdGlja2V0IGZpbGUgKHRmX3V0aWwpCi0gICAg ICogaW5zdGVhZCBvZgotICAgICAqIGtsaXN0OiBObyB0aWNrZXQgZmlsZSAodGZfdXRpbCkKLSAg ICAgKi8KLQotICAgIC8qIE9wZW4gdGlja2V0IGZpbGUgKi8KLSAgICBpZiAoa19lcnJubyA9IHRm X2luaXQoZmlsZSwgUl9US1RfRklMKSkgewotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLQot ICAgIC8qIENsb3NlIHRpY2tldCBmaWxlICovCi0gICAgKHZvaWQpIHRmX2Nsb3NlKCk7Ci0KLSAg ICAvKgotICAgICAqIFdlIG11c3QgZmluZCB0aGUgcmVhbG0gb2YgdGhlIHRpY2tldCBmaWxlIGhl cmUgYmVmb3JlIGNhbGxpbmcKLSAgICAgKiB0Zl9pbml0IGJlY2F1c2Ugc2luY2UgdGhlIHJlYWxt IG9mIHRoZSB0aWNrZXQgZmlsZSBpcyBub3QKLSAgICAgKiByZWFsbHkgc3RvcmVkIGluIHRoZSBw cmluY2lwYWwgc2VjdGlvbiBvZiB0aGUgZmlsZSwgdGhlCi0gICAgICogcm91dGluZSB3ZSB1c2Ug bXVzdCBpdHNlbGYgY2FsbCB0Zl9pbml0IGFuZCB0Zl9jbG9zZS4KLSAgICAgKi8KLSAgICBpZiAo KGtfZXJybm8gPSBrcmJfZ2V0X3RmX3JlYWxtKGZpbGUsIHByZWFsbSkpICE9IEFVVEhfU1VDQ0VT UykgewotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLQotICAgIC8qIE9wZW4gdGlja2V0IGZp bGUgKi8KLSAgICBpZiAoa19lcnJubyA9IHRmX2luaXQoZmlsZSwgUl9US1RfRklMKSkgewotICAg ICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICAvKiBHZXQgcHJpbmNpcGFsIG5hbWUgYW5kIGlu c3RhbmNlICovCi0gICAgaWYgKChrX2Vycm5vID0gdGZfZ2V0X3BuYW1lKHBuYW1lKSkgfHwKLSAg ICAgICAgIChrX2Vycm5vID0gdGZfZ2V0X3BpbnN0KHBpbnN0KSkpIHsKLSAgICAgICAgcmV0dXJu KC0xKTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIFlvdSBtYXkgdGhpbmsgdGhhdCB0aGlzIGlz IHRoZSBvYnZpb3VzIHBsYWNlIHRvIGdldCB0aGUKLSAgICAgKiByZWFsbSBvZiB0aGUgdGlja2V0 IGZpbGUsIGJ1dCBpdCBjYW4ndCBiZSBkb25lIGhlcmUgYXMgdGhlCi0gICAgICogcm91dGluZSB0 byBkbyB0aGlzIG11c3Qgb3BlbiB0aGUgdGlja2V0IGZpbGUuICBUaGlzIGlzIHdoeQotICAgICAq IGl0IHdhcyBkb25lIGJlZm9yZSB0Zl9pbml0LgotICAgICAqLwotCi0gICAgd2hpbGUgKChrX2Vy cm5vID0gdGZfZ2V0X2NyZWQoJmNyZWRzKSkgPT0gQVVUSF9TVUNDRVNTKSB7Ci0gICAgICAgIGNo YXIgdGt0X2J1ZlsyNTZdOwotICAgICAgICBja21ha3htc2codGt0X2J1ZixzaXplb2YodGt0X2J1 ZiksCi0gICAgICAgICAgICAgICAgIGNyZWRzLnNlcnZpY2UsIChjcmVkcy5pbnN0YW5jZVswXSA/ ICIuIiA6ICIiKSwgY3JlZHMuaW5zdGFuY2UsCi0gICAgICAgICAgICAgICAgIChjcmVkcy5yZWFs bVswXSA/ICJAIiA6ICIiKSwgY3JlZHMucmVhbG0sCi0gICAgICAgICAgICAgICAgIE5VTEwsTlVM TCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgICAgICAqbGlzdCA9IChzdHJ1Y3QgdGt0 X2xpc3RfaXRlbSAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCB0a3RfbGlzdF9pdGVtKSk7Ci0gICAg ICAgICgqbGlzdCktPm5hbWUgPSBzdHJkdXAodGt0X2J1Zik7Ci0gICAgICAgICgqbGlzdCktPm5l eHQgPSBOVUxMOwotICAgICAgICBsaXN0ID0gJigoKmxpc3QpLT5uZXh0KTsKLSAgICAgICAgdGt0 X2NvdW50Kys7Ci0gICAgfQotCi0gICAgdGZfY2xvc2UoKTsKLSAgICByZXR1cm4odGt0X2NvdW50 KTsKLSNlbHNlIC8qIEtSQjQgKi8KLSAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogS1JCNCAqLwot fQotCi1jaGFyICoKLSNpZmRlZiBDS19BTlNJQwotY2tfa3JiNF9nZXRfbmV4dF90a3QoVk9JRCkK LSNlbHNlCi1ja19rcmI0X2dldF9uZXh0X3RrdCgpCi0jZW5kaWYKLXsKLSNpZmRlZiBLUkI0Ci0g ICAgc3RhdGljIGNoYXIgKiBzPU5VTEw7Ci0gICAgc3RydWN0IHRrdF9saXN0X2l0ZW0gKiBuZXh0 PU5VTEw7Ci0KLSAgICBpZiAoIHMgKSB7Ci0gICAgICAgIGZyZWUocyk7Ci0gICAgICAgIHMgPSBO VUxMOwotICAgIH0KLQotICAgIGlmICggazRfdGt0X2xpc3QgPT0gTlVMTCApCi0gICAgICAgIHJl dHVybihOVUxMKTsKLQotICAgIG5leHQgPSBrNF90a3RfbGlzdC0+bmV4dDsKLSAgICBzID0gazRf dGt0X2xpc3QtPm5hbWU7Ci0gICAgZnJlZShrNF90a3RfbGlzdCk7Ci0gICAgazRfdGt0X2xpc3Qg PSBuZXh0OwotICAgIHJldHVybihzKTsKLSNlbHNlIC8qIEtSQjQgKi8KLSAgICByZXR1cm4oTlVM TCk7Ci0jZW5kaWYgLyogS1JCNCAqLwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotY2tfa3Ji NF90a3RfaXN2YWxpZChjaGFyICogdGt0bmFtZSkKLSNlbHNlCi1ja19rcmI0X3RrdF9pc3ZhbGlk KHRrdG5hbWUpIGNoYXIgKiB0a3RuYW1lOwotI2VuZGlmCi17Ci0jaWZkZWYgS1JCNAotICAgIGNo YXIgICAqZmlsZT1OVUxMOwotICAgIGNoYXIgICAgcG5hbWVbQU5BTUVfU1pdOwotICAgIGNoYXIg ICAgcGluc3RbSU5TVF9TWl07Ci0gICAgY2hhciAgICBwcmVhbG1bUkVBTE1fU1pdOwotICAgIGNo YXIgICAgYnVmMVsyMF0sIGJ1ZjJbMjBdOwotICAgIGludCAgICAga19lcnJubzsKLSAgICB0aW1l X3QgIGlzc3VlX3QsIGV4cGlyZV90LCBub3dfdDsKLSNpZmRlZiBPUzIKLSAgICBMRUFTSF9DUkVE RU5USUFMUyBjcmVkczsKLSNlbHNlIC8qIE9TMiAqLwotICAgIENSRURFTlRJQUxTIGNyZWRzOwot I2VuZGlmIC8qIE9TMiAqLwotCi0gICAgaWYgKCAhY2tfa3JiNF9pc19pbnN0YWxsZWQoKSApCi0g ICAgICAgIHJldHVybigtMSk7Ci0KLSAgICBkZWJ1ZyhGMTEwLCJja19rcmI0X3RrdF9pc3ZhbGlk IiwidGt0X3N0cmluZyIsMCk7Ci0gICAgZmlsZSA9IHRrdF9zdHJpbmcoKTsKLQotICAgIC8qCi0g ICAgICogU2luY2Uga3JiX2dldF90Zl9yZWFsbSB3aWxsIHJldHVybiBhIHRpY2tldF9maWxlIGVy cm9yLAotICAgICAqIHdlIHdpbGwgY2FsbCB0Zl9pbml0IGFuZCB0Zl9jbG9zZSBmaXJzdCB0byBm aWx0ZXIgb3V0Ci0gICAgICogdGhpbmdzIGxpa2Ugbm8gdGlja2V0IGZpbGUuICBPdGhlcndpc2Us IHRoZSBlcnJvciB0aGF0Ci0gICAgICogdGhlIHVzZXIgd291bGQgc2VlIHdvdWxkIGJlCi0gICAg ICoga2xpc3Q6IGNhbid0IGZpbmQgcmVhbG0gb2YgdGlja2V0IGZpbGU6IE5vIHRpY2tldCBmaWxl ICh0Zl91dGlsKQotICAgICAqIGluc3RlYWQgb2YKLSAgICAgKiBrbGlzdDogTm8gdGlja2V0IGZp bGUgKHRmX3V0aWwpCi0gICAgICovCi0KLSAgICAvKiBPcGVuIHRpY2tldCBmaWxlICovCi0gICAg ZGVidWcoRjExMCwiY2tfa3JiNF90a3RfaXN2YWxpZCIsInRmX2luaXQiLDApOwotICAgIGlmIChr X2Vycm5vID0gdGZfaW5pdChmaWxlLCBSX1RLVF9GSUwpKSB7Ci0gICAgICAgIHJldHVybigtMSk7 Ci0gICAgfQotCi0gICAgLyogQ2xvc2UgdGlja2V0IGZpbGUgKi8KLSAgICBkZWJ1ZyhGMTEwLCJj a19rcmI0X3RrdF9pc3ZhbGlkIiwidGZfY2xvc2UiLDApOwotICAgICh2b2lkKSB0Zl9jbG9zZSgp OwotCi0gICAgLyoKLSAgICAgKiBXZSBtdXN0IGZpbmQgdGhlIHJlYWxtIG9mIHRoZSB0aWNrZXQg ZmlsZSBoZXJlIGJlZm9yZSBjYWxsaW5nCi0gICAgICogdGZfaW5pdCBiZWNhdXNlIHNpbmNlIHRo ZSByZWFsbSBvZiB0aGUgdGlja2V0IGZpbGUgaXMgbm90Ci0gICAgICogcmVhbGx5IHN0b3JlZCBp biB0aGUgcHJpbmNpcGFsIHNlY3Rpb24gb2YgdGhlIGZpbGUsIHRoZQotICAgICAqIHJvdXRpbmUg d2UgdXNlIG11c3QgaXRzZWxmIGNhbGwgdGZfaW5pdCBhbmQgdGZfY2xvc2UuCi0gICAgICovCi0g ICAgZGVidWcoRjExMCwiY2tfa3JiNF90a3RfaXN2YWxpZCIsImtyYl9nZXRfdGZfcmVhbG0iLDAp OwotICAgIGlmICgoa19lcnJubyA9IGtyYl9nZXRfdGZfcmVhbG0oZmlsZSwgcHJlYWxtKSkgIT0g QVVUSF9TVUNDRVNTKSB7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotCi0gICAgLyogT3Bl biB0aWNrZXQgZmlsZSAqLwotICAgIGRlYnVnKEYxMTAsImNrX2tyYjRfdGt0X2lzdmFsaWQiLCJ0 Zl9pbml0IiwwKTsKLSAgICBpZiAoa19lcnJubyA9IHRmX2luaXQoZmlsZSwgUl9US1RfRklMKSkg ewotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICAvKiBHZXQgcHJpbmNpcGFsIG5hbWUg YW5kIGluc3RhbmNlICovCi0gICAgZGVidWcoRjExMCwiY2tfa3JiNF90a3RfaXN2YWxpZCIsInRm X2dldF9uYW1lL3RmX2dldF9waW5zdCIsMCk7Ci0gICAgaWYgKChrX2Vycm5vID0gdGZfZ2V0X3Bu YW1lKHBuYW1lKSkgfHwKLSAgICAgICAgIChrX2Vycm5vID0gdGZfZ2V0X3BpbnN0KHBpbnN0KSkp IHsKLQotICAgICAgICAvKiBDbG9zZSB0aWNrZXQgZmlsZSAqLwotICAgICAgICBkZWJ1ZyhGMTEw LCJja19rcmI0X3RrdF9pc3ZhbGlkIiwidGZfY2xvc2UiLDApOwotICAgICAgICAodm9pZCkgdGZf Y2xvc2UoKTsKLQotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLQotICAgIC8qCi0gICAgICog WW91IG1heSB0aGluayB0aGF0IHRoaXMgaXMgdGhlIG9idmlvdXMgcGxhY2UgdG8gZ2V0IHRoZQot ICAgICAqIHJlYWxtIG9mIHRoZSB0aWNrZXQgZmlsZSwgYnV0IGl0IGNhbid0IGJlIGRvbmUgaGVy ZSBhcyB0aGUKLSAgICAgKiByb3V0aW5lIHRvIGRvIHRoaXMgbXVzdCBvcGVuIHRoZSB0aWNrZXQg ZmlsZS4gIFRoaXMgaXMgd2h5Ci0gICAgICogaXQgd2FzIGRvbmUgYmVmb3JlIHRmX2luaXQuCi0g ICAgICovCi0KLSAgICBkZWJ1ZyhGMTEwLCJja19rcmI0X3RrdF9pc3ZhbGlkIiwidGZfZ2V0X2Ny ZWQiLDApOwotICAgIHdoaWxlICgoa19lcnJubyA9IHRmX2dldF9jcmVkKCZjcmVkcykpID09IEFV VEhfU1VDQ0VTUykgewotICAgICAgICBjaGFyIHRrdF9idWZbMjU2XTsKLSAgICAgICAgY2ttYWt4 bXNnKHRrdF9idWYsc2l6ZW9mKHRrdF9idWYpLAotICAgICAgICAgICAgICAgICBjcmVkcy5zZXJ2 aWNlLCAoY3JlZHMuaW5zdGFuY2VbMF0gPyAiLiIgOiAiIiksIGNyZWRzLmluc3RhbmNlLAotICAg ICAgICAgICAgICAgICAoY3JlZHMucmVhbG1bMF0gPyAiQCIgOiAiIiksIGNyZWRzLnJlYWxtLAot ICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAg ICAgICAgaWYgKCAhc3RyY21wKHRrdG5hbWUsdGt0X2J1ZikgKSB7Ci0KLSAgICAgICAgICAgIC8q IHdlIGZvdW5kIHRoZSB0aWNrZXQgd2UgYXJlIGxvb2tpbmcgZm9yICovCi0gICAgICAgICAgICBp c3N1ZV90ID0gY3JlZHMuaXNzdWVfZGF0ZTsKLSAgICAgICAgICAgIGV4cGlyZV90ID0gY3JlZHMu aXNzdWVfZGF0ZQotICAgICAgICAgICAgICAgICsgKCh1bnNpZ25lZCBjaGFyKSBjcmVkcy5saWZl dGltZSkgKiA1ICogNjA7Ci0gICAgICAgICAgICBub3dfdCA9IHRpbWUoMCk7Ci0KLSAgICAgICAg ICAgIC8qIFdlIGFkZCBhIDUgbWludXRlcyBmdWRnZSBmYWN0b3IgdG8gY29tcGVuc2F0ZSBmb3Ig cG90ZW50aWFsICovCi0gICAgICAgICAgICAvKiBjbG9jayBza2V3IGVycm9ycyBiZXR3ZWVuIHRo ZSBLREMgYW5kIEs5NSdzIGhvc3QgT1MgICAgICAgICAqLwotCi0gICAgICAgICAgICBpZiAoIG5v d190ID49IChpc3N1ZV90LTMwMCkgJiYgbm93X3QgPCBleHBpcmVfdCkgewotI2lmZGVmIE9TMgot I2lmZGVmIENIRUNLQUREUlMKLSAgICAgICAgICAgICAgICBpZiAoIGtyYjRfY2hlY2thZGRycyAp IHsKLSAgICAgICAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIgbXlpcGFkZHJbMjBdOyAgICAgICAv KiBGcm9tIGNrY25ldC5jICovCi0gICAgICAgICAgICAgICAgICAgIGlmICggIW15aXBhZGRyWzBd ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGk7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBjaGFyIGJ1Zls2MF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpPTA7aTw2 NDtpKysgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBnZXRsb2NhbGlwYWRk cnMoYnVmLDYwLGkpIDwgMCApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhc3RyY21wKGJ1ZixjcmVkcy5h ZGRyZXNzKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xvc2UgdGlj a2V0IGZpbGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwi Y2tfa3JiNF90a3RfaXN2YWxpZCIsInRmX2Nsb3NlIiwwKTsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHZvaWQpIHRmX2Nsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybigxKTsgLyogVGhleSdyZSB0aGUgc2FtZSAqLwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg ICAgICAgICAgICAgLyogQ2xvc2UgdGlja2V0IGZpbGUgKi8KLSAgICAgICAgICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTAsImNrX2tyYjRfdGt0X2lzdmFsaWQiLCJ0Zl9jbG9zZSIsMCk7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAodm9pZCkgdGZfY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAvKiBUaGV5J3JlIGRpZmZlcmVudCAq LwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBzdHJjbXAobXlpcGFkZHIsY3JlZHMu YWRkcmVzcykgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBDbG9zZSB0aWNrZXQgZmls ZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfa3JiNF90a3RfaXN2 YWxpZCIsInRmX2Nsb3NlIiwwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKSB0Zl9j bG9zZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAg ICAgIC8qIFRoZXkncmUgZGlmZmVyZW50ICovCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBDbG9zZSB0 aWNrZXQgZmlsZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfa3Ji NF90a3RfaXN2YWxpZCIsInRmX2Nsb3NlIiwwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICh2 b2lkKSB0Zl9jbG9zZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKDEpOyAgICAg ICAgICAgICAgICAgIC8qIFRoZXkncmUgdGhlIHNhbWUgKi8KLSAgICAgICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIENsb3Nl IHRpY2tldCBmaWxlICovCi0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX2tyYjRf dGt0X2lzdmFsaWQiLCJ0Zl9jbG9zZSIsMCk7Ci0gICAgICAgICAgICAgICAgICAgICh2b2lkKSB0 Zl9jbG9zZSgpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4oMSk7ICAgICAgICAgICAgICAg ICAgLyogVGhleSdyZSB0aGUgc2FtZSAqLwotICAgICAgICAgICAgICAgIH0KLSNlbHNlIC8qIENI RUNLQUREUlMgKi8KLSAgICAgICAgICAgICAgICAvKiBDbG9zZSB0aWNrZXQgZmlsZSAqLwotICAg ICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX2tyYjRfdGt0X2lzdmFsaWQiLCJ0Zl9jbG9zZSIs MCk7Ci0gICAgICAgICAgICAgICAgKHZvaWQpIHRmX2Nsb3NlKCk7Ci0gICAgICAgICAgICAgICAg cmV0dXJuKDEpOyAgICAgIC8qIHZhbGlkIGJ1dCBubyBpcCBhZGRyZXNzIGNoZWNrICovCi0jZW5k aWYgLyogQ0hFQ0tBRERSUyAqLwotI2Vsc2UgLyogT1MyICovCi0gICAgICAgICAgICAgICAgLyog Q2xvc2UgdGlja2V0IGZpbGUgKi8KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja19rcmI0 X3RrdF9pc3ZhbGlkIiwidGZfY2xvc2UiLDApOwotICAgICAgICAgICAgICAgICh2b2lkKSB0Zl9j bG9zZSgpOwotICAgICAgICAgICAgICAgIHJldHVybigxKTsgICAgICAvKiBWYWxpZCBidXQgbm8g aXAgYWRkcmVzcyBjaGVjayAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgfQotICAg ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogQ2xvc2UgdGlja2V0IGZpbGUgKi8K LSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja19rcmI0X3RrdF9pc3ZhbGlkIiwidGZfY2xv c2UiLDApOwotICAgICAgICAgICAgICAgICh2b2lkKSB0Zl9jbG9zZSgpOwotICAgICAgICAgICAg ICAgIHJldHVybigwKTsgICAgICAvKiBleHBpcmVkIG9yIG90aGVyd2lzZSBpbnZhbGlkICovCi0g ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLyogQ2xvc2UgdGlja2V0IGZpbGUg Ki8KLSAgICBkZWJ1ZyhGMTEwLCJja19rcmI0X3RrdF9pc3ZhbGlkIiwidGZfY2xvc2UiLDApOwot ICAgICh2b2lkKSB0Zl9jbG9zZSgpOwotICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAv KiBjb3VsZCBub3QgZmluZCB0aGUgZGVzaXJlZCB0aWNrZXQgKi8KLSNlbHNlIC8qIEtSQjQgKi8K LSAgICByZXR1cm4oLTEpOwotI2VuZGlmIC8qIEtSQjQgKi8KLX0KLQotaW50Ci0jaWZkZWYgQ0tf QU5TSUMKLWNrX2tyYjRfaXNfdGd0X3ZhbGlkKFZPSUQpCi0jZWxzZQotY2tfa3JiNF9pc190Z3Rf dmFsaWQoKQotI2VuZGlmCi17Ci0jaWZkZWYgS1JCNAotICAgIGNoYXIgdGd0WzI1Nl07Ci0gICAg Y2hhciAqIHM7Ci0gICAgaW50IHJjID0gMDsKLQotICAgIHMgPSBrcmI0X2RfcmVhbG0gPyBrcmI0 X2RfcmVhbG0gOiBja19rcmI0X2dldHJlYWxtKCk7Ci0gICAgY2ttYWttc2codGd0LHNpemVvZih0 Z3QpLCJrcmJ0Z3QuIixzLCJAIixzKTsKLSAgICByYyA9IGNrX2tyYjRfdGt0X2lzdmFsaWQodGd0 KTsKLSAgICBkZWJ1ZyhGMTExLCJja19rcmI0X2lzX3RndF92YWxpZCIsdGd0LHJjKTsKLSAgICBy ZXR1cm4ocmMgPiAwKTsKLSNlbHNlIC8qIEtSQjQgKi8KLSAgICByZXR1cm4oMCk7Ci0jZW5kaWYg LyogS1JCNCAqLwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotY2tfa3JiNF90a3RfdGltZShj aGFyICogdGt0bmFtZSkKLSNlbHNlCi1ja19rcmI0X3RrdF90aW1lKHRrdG5hbWUpIGNoYXIgKiB0 a3RuYW1lOwotI2VuZGlmCi17Ci0jaWZkZWYgS1JCNAotICAgIGNoYXIgICAqZmlsZT1OVUxMOwot ICAgIGNoYXIgICAgcG5hbWVbQU5BTUVfU1pdOwotICAgIGNoYXIgICAgcGluc3RbSU5TVF9TWl07 Ci0gICAgY2hhciAgICBwcmVhbG1bUkVBTE1fU1pdOwotICAgIGNoYXIgICAgYnVmMVsyMF0sIGJ1 ZjJbMjBdOwotICAgIGludCAgICAga19lcnJubzsKLSNpZmRlZiBPUzIKLSAgICBMRUFTSF9DUkVE RU5USUFMUyBjcmVkczsKLSNlbHNlIC8qIE9TMiAqLwotICAgIENSRURFTlRJQUxTIGNyZWRzOwot I2VuZGlmIC8qIE9TMiAqLwotCi0gICAgaWYgKCAhY2tfa3JiNF9pc19pbnN0YWxsZWQoKSApCi0g ICAgICAgIHJldHVybigtMSk7Ci0KLSAgICBmaWxlID0gdGt0X3N0cmluZygpOwotCi0gICAgLyoK LSAgICAgKiBTaW5jZSBrcmJfZ2V0X3RmX3JlYWxtIHdpbGwgcmV0dXJuIGEgdGlja2V0X2ZpbGUg ZXJyb3IsCi0gICAgICogd2Ugd2lsbCBjYWxsIHRmX2luaXQgYW5kIHRmX2Nsb3NlIGZpcnN0IHRv IGZpbHRlciBvdXQKLSAgICAgKiB0aGluZ3MgbGlrZSBubyB0aWNrZXQgZmlsZS4gIE90aGVyd2lz ZSwgdGhlIGVycm9yIHRoYXQKLSAgICAgKiB0aGUgdXNlciB3b3VsZCBzZWUgd291bGQgYmUKLSAg ICAgKiBrbGlzdDogY2FuJ3QgZmluZCByZWFsbSBvZiB0aWNrZXQgZmlsZTogTm8gdGlja2V0IGZp bGUgKHRmX3V0aWwpCi0gICAgICogaW5zdGVhZCBvZgotICAgICAqIGtsaXN0OiBObyB0aWNrZXQg ZmlsZSAodGZfdXRpbCkKLSAgICAgKi8KLQotICAgIC8qIE9wZW4gdGlja2V0IGZpbGUgKi8KLSAg ICBpZiAoa19lcnJubyA9IHRmX2luaXQoZmlsZSwgUl9US1RfRklMKSkgewotICAgICAgICByZXR1 cm4oLTEpOwotICAgIH0KLQotICAgIC8qIENsb3NlIHRpY2tldCBmaWxlICovCi0gICAgKHZvaWQp IHRmX2Nsb3NlKCk7Ci0KLSAgICAvKgotICAgICAqIFdlIG11c3QgZmluZCB0aGUgcmVhbG0gb2Yg dGhlIHRpY2tldCBmaWxlIGhlcmUgYmVmb3JlIGNhbGxpbmcKLSAgICAgKiB0Zl9pbml0IGJlY2F1 c2Ugc2luY2UgdGhlIHJlYWxtIG9mIHRoZSB0aWNrZXQgZmlsZSBpcyBub3QKLSAgICAgKiByZWFs bHkgc3RvcmVkIGluIHRoZSBwcmluY2lwYWwgc2VjdGlvbiBvZiB0aGUgZmlsZSwgdGhlCi0gICAg ICogcm91dGluZSB3ZSB1c2UgbXVzdCBpdHNlbGYgY2FsbCB0Zl9pbml0IGFuZCB0Zl9jbG9zZS4K LSAgICAgKi8KLSAgICBpZiAoKGtfZXJybm8gPSBrcmJfZ2V0X3RmX3JlYWxtKGZpbGUsIHByZWFs bSkpICE9IEFVVEhfU1VDQ0VTUykgewotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLQotICAg IC8qIE9wZW4gdGlja2V0IGZpbGUgKi8KLSAgICBpZiAoa19lcnJubyA9IHRmX2luaXQoZmlsZSwg Ul9US1RfRklMKSkgewotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICAvKiBHZXQgcHJp bmNpcGFsIG5hbWUgYW5kIGluc3RhbmNlICovCi0gICAgaWYgKChrX2Vycm5vID0gdGZfZ2V0X3Bu YW1lKHBuYW1lKSkgfHwKLSAgICAgICAgIChrX2Vycm5vID0gdGZfZ2V0X3BpbnN0KHBpbnN0KSkp IHsKLSAgICAgICAgdGZfY2xvc2UoKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAg ICAvKgotICAgICAqIFlvdSBtYXkgdGhpbmsgdGhhdCB0aGlzIGlzIHRoZSBvYnZpb3VzIHBsYWNl IHRvIGdldCB0aGUKLSAgICAgKiByZWFsbSBvZiB0aGUgdGlja2V0IGZpbGUsIGJ1dCBpdCBjYW4n dCBiZSBkb25lIGhlcmUgYXMgdGhlCi0gICAgICogcm91dGluZSB0byBkbyB0aGlzIG11c3Qgb3Bl biB0aGUgdGlja2V0IGZpbGUuICBUaGlzIGlzIHdoeQotICAgICAqIGl0IHdhcyBkb25lIGJlZm9y ZSB0Zl9pbml0LgotICAgICAqLwotCi0gICAgd2hpbGUgKChrX2Vycm5vID0gdGZfZ2V0X2NyZWQo JmNyZWRzKSkgPT0gQVVUSF9TVUNDRVNTKSB7Ci0gICAgICAgIGNoYXIgdGt0X2J1ZlsyNTZdOwot ICAgICAgICBja21ha3htc2codGt0X2J1ZixzaXplb2YodGt0X2J1ZiksCi0gICAgICAgICAgICAg ICAgIGNyZWRzLnNlcnZpY2UsIChjcmVkcy5pbnN0YW5jZVswXSA/ICIuIiA6ICIiKSwKLSAgICAg ICAgICAgICAgICAgY3JlZHMuaW5zdGFuY2UsCi0gICAgICAgICAgICAgICAgIChjcmVkcy5yZWFs bVswXSA/ICJAIiA6ICIiKSwgY3JlZHMucmVhbG0sCi0gICAgICAgICAgICAgICAgIE5VTEwsTlVM TCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgICAgICBpZiAoICFzdHJjbXAodGt0bmFt ZSx0a3RfYnVmKSApIHsKLSAgICAgICAgICAgIC8qIHdlIGZvdW5kIHRoZSB0aWNrZXQgd2UgYXJl IGxvb2tpbmcgZm9yICovCi0gICAgICAgICAgICBpbnQgbiA9IChjcmVkcy5pc3N1ZV9kYXRlCi0g ICAgICAgICAgICAgICAgICAgICAgKyAoKCh1bnNpZ25lZCBjaGFyKSBjcmVkcy5saWZldGltZSkg KiA1ICogNjApKQotICAgICAgICAgICAgICAgIC0gdGltZSgwKTsKLSAgICAgICAgICAgIHRmX2Ns b3NlKCk7Ci0gICAgICAgICAgICByZXR1cm4obiA8PSAwID8gMCA6IG4pOwotICAgICAgICB9Ci0g ICAgfQotICAgIHRmX2Nsb3NlKCk7Ci0gICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAgIC8q IGNvdWxkIG5vdCBmaW5kIHRoZSBkZXNpcmVkIHRpY2tldCAqLwotI2Vsc2UgLyogS1JCNCAqLwot ICAgIHJldHVybigtMSk7Ci0jZW5kaWYgLyogS1JCNCAqLwotfQotCi1jaGFyICoKLSNpZmRlZiBD S19BTlNJQwotY2tfa3JiNF9nZXRyZWFsbSh2b2lkKQotI2Vsc2UKLWNrX2tyYjRfZ2V0cmVhbG0o KQotI2VuZGlmCi17Ci0jaWZkZWYgS1JCNAotICAgIGNoYXIgICAqZmlsZT1OVUxMOwotICAgIGlu dCAgICAga19lcnJubzsKLSAgICBzdGF0aWMgY2hhciByZWFsbVsyNTZdPSIiOwotICAgIHJlYWxt WzBdPSdcMCc7Ci0KLSAgICBpZiAoICFja19rcmI0X2lzX2luc3RhbGxlZCgpICkKLSAgICAgICAg cmV0dXJuKHJlYWxtKTsKLQotICAgIC8qIFRyeSB0byBnZXQgcmVhbG0gZnJvbSB0aWNrZXQgZmls ZSAqLwotICAgIC8qIElmIGZhaWx1cmUgZ2V0IHRoZSBsb2NhbCByZWFsbSAgICAqLwotCi0gICAg LyoKLSAgICAqIFNpbmNlIGtyYl9nZXRfdGZfcmVhbG0gd2lsbCByZXR1cm4gYSB0aWNrZXRfZmls ZSBlcnJvciwKLSAgICAqIHdlIHdpbGwgY2FsbCB0Zl9pbml0IGFuZCB0Zl9jbG9zZSBmaXJzdCB0 byBmaWx0ZXIgb3V0Ci0gICAgKiB0aGluZ3MgbGlrZSBubyB0aWNrZXQgZmlsZS4KLSAgICAqLwot Ci0gICAgLyogT3BlbiB0aWNrZXQgZmlsZSAqLwotICAgIGZpbGUgPSB0a3Rfc3RyaW5nKCk7Ci0g ICAgaWYgKGZpbGUgPT0gTlVMTCB8fCAhZmlsZVswXSkKLSAgICAgICAgcmV0dXJuKHJlYWxtKTsK LQotICAgIGlmICgoa19lcnJubyA9IHRmX2luaXQoZmlsZSwgUl9US1RfRklMKSkgPT0gS1NVQ0NF U1MpIHsKLSAgICAgICAgLyogQ2xvc2UgdGlja2V0IGZpbGUgKi8KLSAgICAgICAgKHZvaWQpIHRm X2Nsb3NlKCk7Ci0KLSAgICAgICAga19lcnJubyA9IGtyYl9nZXRfdGZfcmVhbG0oZmlsZSwgcmVh bG0pOwotICAgIH0KLSAgICBpZiAoa19lcnJubyAhPSBLU1VDQ0VTUykgewotICAgICAgICBrX2Vy cm5vID0ga3JiX2dldF9scmVhbG0ocmVhbG0sIDEpOwotICAgIH0KLSAgICByZXR1cm4ocmVhbG0p OwotI2Vsc2UgLyogS1JCNCAqLwotICAgIHJldHVybigiIik7Ci0jZW5kaWYgLyogS1JCNCAqLwot fQotCi1jaGFyICoKLSNpZmRlZiBDS19BTlNJQwotY2tfa3JiNF9nZXRwcmluY2lwYWwodm9pZCkK LSNlbHNlCi1ja19rcmI0X2dldHByaW5jaXBhbCgpCi0jZW5kaWYKLXsKLSNpZmRlZiBLUkI0Ci0g ICAgY2hhciAgICpmaWxlPU5VTEw7Ci0gICAgaW50ICAgICBrX2Vycm5vOwotICAgIHN0YXRpYyBj aGFyIHByaW5jaXBhbFsyNTZdPSIiOwotICAgIGNoYXIgICAgICAgIGluc3RhbmNlWzI1Nl09IiI7 Ci0gICAgY2hhciAgICAgICAgcmVhbG1bMjU2XT0iIjsKLSAgICBwcmluY2lwYWxbMF09J1wwJzsK LQotICAgIGlmICggIWNrX2tyYjRfaXNfaW5zdGFsbGVkKCkgKQotICAgICAgICByZXR1cm4ocHJp bmNpcGFsKTsKLQotICAgIC8qIFRyeSB0byBnZXQgcmVhbG0gZnJvbSB0aWNrZXQgZmlsZSAqLwot ICAgIC8qIElmIGZhaWx1cmUgZ2V0IHRoZSBsb2NhbCByZWFsbSAgICAqLwotCi0gICAgLyoKLSAg ICAqIFNpbmNlIGtyYl9nZXRfdGZfcmVhbG0gd2lsbCByZXR1cm4gYSB0aWNrZXRfZmlsZSBlcnJv ciwKLSAgICAqIHdlIHdpbGwgY2FsbCB0Zl9pbml0IGFuZCB0Zl9jbG9zZSBmaXJzdCB0byBmaWx0 ZXIgb3V0Ci0gICAgKiB0aGluZ3MgbGlrZSBubyB0aWNrZXQgZmlsZS4KLSAgICAqLwotCi0gICAg LyogT3BlbiB0aWNrZXQgZmlsZSAqLwotICAgIGZpbGUgPSB0a3Rfc3RyaW5nKCk7Ci0gICAgaWYg KGZpbGUgPT0gTlVMTCB8fCAhZmlsZVswXSkKLSAgICAgICAgcmV0dXJuKHByaW5jaXBhbCk7Ci0K LSAgICBpZiAoKGtfZXJybm8gPSB0Zl9pbml0KGZpbGUsIFJfVEtUX0ZJTCkpID09IEtTVUNDRVNT KSB7Ci0gICAgICAgIC8qIENsb3NlIHRpY2tldCBmaWxlICovCi0gICAgICAgICh2b2lkKSB0Zl9j bG9zZSgpOwotCi0gICAgICAgIGtfZXJybm8gPSBrcmJfZ2V0X3RmX2Z1bGxuYW1lKGZpbGUsIHBy aW5jaXBhbCwgaW5zdGFuY2UsIHJlYWxtKTsKLSAgICB9Ci0gICAgcmV0dXJuKHByaW5jaXBhbCk7 Ci0jZWxzZSAvKiBLUkI0ICovCi0gICAgcmV0dXJuKCIiKTsKLSNlbmRpZiAvKiBLUkI0ICovCi19 Ci0KLXN0YXRpYyBzdHJ1Y3QgdGt0X2xpc3RfaXRlbSAqIGs1X3RrdF9saXN0ID0gTlVMTDsKLQot aW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWNrX2tyYjVfZ2V0X3RrdHMoY2hhciAqIGNjX25hbWUpCi0j ZWxzZQotY2tfa3JiNV9nZXRfdGt0cyhjY19uYW1lKSBjaGFyICogY2NfbmFtZTsKLSNlbmRpZgot ewotI2lmZGVmIEtSQjUKLSNpZm5kZWYgSEVJTURBTAotICAgIGtyYjVfY29udGV4dCBrY29udGV4 dDsKLSAgICBrcmI1X2Vycm9yX2NvZGUgcmV0dmFsOwotICAgIGtyYjVfY2NhY2hlIGNhY2hlID0g TlVMTDsKLSAgICBrcmI1X2NjX2N1cnNvciBjdXI7Ci0gICAga3JiNV9jcmVkcyBjcmVkczsKLSAg ICBrcmI1X3ByaW5jaXBhbCBwcmluYz1OVUxMOwotICAgIGtyYjVfZmxhZ3MgZmxhZ3M9MDsKLSAg ICBrcmI1X2Vycm9yX2NvZGUgY29kZT0wOwotICAgIGludCBleGl0X3N0YXR1cyA9IDA7Ci0KLSAg ICBpbnQgICAgIHRrdF9jb3VudD0wOwotICAgIHN0cnVjdCAgdGt0X2xpc3RfaXRlbSAqKiBsaXN0 ID0gJms1X3RrdF9saXN0OwotCi0gICAgd2hpbGUgKCBrNV90a3RfbGlzdCApIHsKLSAgICAgICAg c3RydWN0IHRrdF9saXN0X2l0ZW0gKiBuZXh0OwotICAgICAgICBuZXh0ID0gazVfdGt0X2xpc3Qt Pm5leHQ7Ci0gICAgICAgIGZyZWUoazVfdGt0X2xpc3QtPm5hbWUpOwotICAgICAgICBmcmVlKGs1 X3RrdF9saXN0KTsKLSAgICAgICAgazVfdGt0X2xpc3QgPSBuZXh0OwotICAgIH0KLQotICAgIGlm ICggIWNrX2tyYjVfaXNfaW5zdGFsbGVkKCkgKQotICAgICAgICByZXR1cm4oLTEpOwotCi0gICAg cmV0dmFsID0ga3JiNV9pbml0X2NvbnRleHQoJmtjb250ZXh0KTsKLSAgICBpZiAocmV0dmFsKSB7 Ci0gICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfZ2V0X3RrdHMgd2hpbGUgaW5pdGlhbGl6aW5n IGtyYjUiLCIiLHJldHZhbCk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotCi0gICAgY29k ZSA9IGs1X2dldF9jY2FjaGUoa2NvbnRleHQsJmNhY2hlLGNjX25hbWUpOwotICAgIGlmIChjb2Rl ICE9IDApIHsKLSAgICAgICAgZGVidWcoRjExMSwiY2tfa3JiNV9nZXRfdGt0cyB3aGlsZSBnZXR0 aW5nIGNjYWNoZSIsCi0gICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlKGNvZGUpLGNvZGUpOwot ICAgICAgICB0a3RfY291bnQgPSAtMTsKLSAgICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7Ci0g ICAgfQotCi0gICAgZmxhZ3MgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHVybnMg b2ZmIE9QRU5DTE9TRSBtb2RlICovCi0gICAgaWYgKChjb2RlID0ga3JiNV9jY19zZXRfZmxhZ3Mo a2NvbnRleHQsIGNhY2hlLCBmbGFncykpKSB7Ci0gICAgICAgIGlmIChjb2RlID09IEVOT0VOVCkg ewotICAgICAgICAgICAgZGVidWcoRjExMSwiY2tfa3JiNV9nZXRfdGt0cyAodGlja2V0IGNhY2hl KSIsCi0gICAgICAgICAgICAgICAgICAga3JiNV9jY19nZXRfbmFtZShrY29udGV4dCwgY2FjaGUp LGNvZGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVidWcoRjExMSwKLSAgICAg ICAgICAgICAgICAgImNrX2tyYjVfZ2V0X3RrdHMgd2hpbGUgc2V0dGluZyBjYWNoZSBmbGFncyAo dGlja2V0IGNhY2hlKSIsCi0gICAgICAgICAgICAgICAgICBrcmI1X2NjX2dldF9uYW1lKGtjb250 ZXh0LCBjYWNoZSksY29kZSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGt0X2NvdW50ID0gLTE7Ci0g ICAgICAgIGdvdG8gZXhpdF9rNV9nZXRfdGt0OwotICAgIH0KLSAgICBpZiAoKGNvZGUgPSBrcmI1 X2NjX2dldF9wcmluY2lwYWwoa2NvbnRleHQsIGNhY2hlLCAmcHJpbmMpKSkgewotICAgICAgICBk ZWJ1ZyhGMTAxLCJja19rcmI1X2dldF90a3RzIHdoaWxlIHJldHJpZXZpbmcgcHJpbmNpcGFsIG5h bWUiLAotICAgICAgICAgICAgICAgIiIsY29kZSk7Ci0gICAgICAgIHRrdF9jb3VudCA9IC0xOwot ICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKLSAgICB9Ci0gICAgaWYgKChjb2RlID0ga3Ji NV91bnBhcnNlX25hbWUoa2NvbnRleHQsIHByaW5jLCAmZGVmbmFtZSkpKSB7Ci0gICAgICAgIGRl YnVnKEYxMDEsImNrX2tyYjVfZ2V0X3RrdHMgd2hpbGUgdW5wYXJzaW5nIHByaW5jaXBhbCBuYW1l IiwKLSAgICAgICAgICAgICAgICIiLGNvZGUpOwotICAgICAgICB0a3RfY291bnQgPSAtMTsKLSAg ICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7Ci0gICAgfQotCi0gICAgaWYgKChjb2RlID0ga3Ji NV9jY19zdGFydF9zZXFfZ2V0KGtjb250ZXh0LCBjYWNoZSwgJmN1cikpKSB7Ci0gICAgICAgIGRl YnVnKEYxMDEsImNrX2tyYjVfZ2V0X3RrdHMgd2hpbGUgc3RhcnRpbmcgdG8gcmV0cmlldmUgdGlj a2V0cyIsCi0gICAgICAgICAgICAgICAiIixjb2RlKTsKLSAgICAgICAgdGt0X2NvdW50ID0gLTE7 Ci0gICAgICAgIGdvdG8gZXhpdF9rNV9nZXRfdGt0OwotICAgIH0KLQotICAgIHdoaWxlICghKGNv ZGUgPSBrcmI1X2NjX25leHRfY3JlZChrY29udGV4dCwgY2FjaGUsICZjdXIsICZjcmVkcykpKSB7 Ci0gICAgICAgIGNoYXIgKnNuYW1lPU5VTEw7Ci0KLSAgICAgICAgcmV0dmFsID0ga3JiNV91bnBh cnNlX25hbWUoa2NvbnRleHQsIGNyZWRzLnNlcnZlciwgJnNuYW1lKTsKLSAgICAgICAgaWYgKHJl dHZhbCkgewotICAgICAgICAgICAgZGVidWcoRjEwMSwKLSAgICAgICAgICAgICAgICAgICJja19r cmI1X2dldF90a3RzIHdoaWxlIHVucGFyc2luZyBzZXJ2ZXIgbmFtZSIsIiIscmV0dmFsKTsKLSAg ICAgICAgICAgIHRrdF9jb3VudCA9IC0xOwotICAgICAgICAgICAgZ290byBleGl0X2s1X2dldF90 a3Q7Ci0gICAgICAgIH0KLQotICAgICAgICAqbGlzdCA9IChzdHJ1Y3QgdGt0X2xpc3RfaXRlbSAq KSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCB0a3RfbGlzdF9pdGVtKSk7Ci0gICAgICAgICgqbGlzdCkt Pm5hbWUgPSBzbmFtZTsKLSAgICAgICAgKCpsaXN0KS0+bmV4dCA9IE5VTEw7Ci0gICAgICAgIGxp c3QgPSAmKCgqbGlzdCktPm5leHQpOwotCi0gICAgICAgIGtyYjVfZnJlZV91bnBhcnNlZF9uYW1l KGtjb250ZXh0LHNuYW1lKTsKLSAgICAgICAga3JiNV9mcmVlX2NyZWRfY29udGVudHMoa2NvbnRl eHQsICZjcmVkcyk7Ci0gICAgICAgIHRrdF9jb3VudCsrOwotICAgIH0KLQotICAgIGlmIChjb2Rl ID09IEtSQjVfQ0NfRU5EKSB7Ci0gICAgICAgIGlmICgoY29kZSA9IGtyYjVfY2NfZW5kX3NlcV9n ZXQoa2NvbnRleHQsIGNhY2hlLCAmY3VyKSkpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImNr X2tyYjVfZ2V0X3RrdHMgd2hpbGUgZmluaXNoaW5nIHRpY2tldCByZXRyaWV2YWwiLAotICAgICAg ICAgICAgICAgICAgICIiLGNvZGUpOwotICAgICAgICAgICAgdGt0X2NvdW50ID0gLTE7Ci0gICAg ICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKLSAgICAgICAgfQotICAgICAgICBmbGFncyA9 IEtSQjVfVENfT1BFTkNMT1NFOyAgICAgIC8qIHR1cm5zIG9uIE9QRU5DTE9TRSBtb2RlICovCi0g ICAgICAgIGlmICgoY29kZSA9IGtyYjVfY2Nfc2V0X2ZsYWdzKGtjb250ZXh0LCBjYWNoZSwgZmxh Z3MpKSkgewotICAgICAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV9nZXRfdGt0cyB3aGlsZSBj bG9zaW5nIGNjYWNoZSIsCi0gICAgICAgICAgICAgICAgICAgIiIsY29kZSk7Ci0gICAgICAgICAg ICB0a3RfY291bnQgPSAtMTsKLSAgICAgICAgICAgIGdvdG8gZXhpdF9rNV9nZXRfdGt0OwotICAg ICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV9nZXRfdGt0 cyB3aGlsZSByZXRyaWV2aW5nIGEgdGlja2V0IiwiIixjb2RlKTsKLSAgICAgICAgdGt0X2NvdW50 ID0gLTE7Ci0gICAgICAgIGdvdG8gZXhpdF9rNV9nZXRfdGt0OwotICAgIH0KLQotICBleGl0X2s1 X2dldF90a3Q6Ci0gICAga3JiNV9mcmVlX3ByaW5jaXBhbChrY29udGV4dCxwcmluYyk7Ci0gICAg a3JiNV9mcmVlX3VucGFyc2VkX25hbWUoa2NvbnRleHQsZGVmbmFtZSk7Ci0gICAga3JiNV9jY19j bG9zZShrY29udGV4dCxjYWNoZSk7Ci0gICAga3JiNV9mcmVlX2NvbnRleHQoa2NvbnRleHQpOwot ICAgIHJldHVybih0a3RfY291bnQpOwotI2Vsc2UgLyogSEVJTURBTCAqLwotICAgIHJldHVybigt MSk7Ci0jZW5kaWYgLyogSEVJTURBTCAqLwotI2Vsc2UgLyogS1JCNSAqLwotICAgIHJldHVybigw KTsKLSNlbmRpZiAvKiBLUkI1ICovCi19Ci0KLWNoYXIgKgotI2lmZGVmIENLX0FOU0lDCi1ja19r cmI1X2dldF9uZXh0X3RrdChWT0lEKQotI2Vsc2UKLWNrX2tyYjVfZ2V0X25leHRfdGt0KCkKLSNl bmRpZgotewotI2lmZGVmIEtSQjUKLSNpZm5kZWYgSEVJTURBTAotICAgIHN0YXRpYyBjaGFyICog cz1OVUxMOwotICAgIHN0cnVjdCB0a3RfbGlzdF9pdGVtICogbmV4dD1OVUxMOwotCi0gICAgaWYg KCBzICkgewotICAgICAgICBmcmVlKHMpOwotICAgICAgICBzID0gTlVMTDsKLSAgICB9Ci0KLSAg ICBpZiAoIGs1X3RrdF9saXN0ID09IE5VTEwgKQotICAgICAgICByZXR1cm4oTlVMTCk7Ci0KLSAg ICBuZXh0ID0gazVfdGt0X2xpc3QtPm5leHQ7Ci0gICAgcyA9IGs1X3RrdF9saXN0LT5uYW1lOwot ICAgIGZyZWUoazVfdGt0X2xpc3QpOwotICAgIGs1X3RrdF9saXN0ID0gbmV4dDsKLSAgICByZXR1 cm4ocyk7Ci0jZWxzZSAvKiBIRUlNREFMICovCi0gICAgcmV0dXJuKCJOb3QgaW1wbGVtZW50ZWQi KTsKLSNlbmRpZiAvKiBIRUlNREFMICovCi0jZWxzZSAvKiBLUkI1ICovCi0gICAgcmV0dXJuKE5V TEwpOwotI2VuZGlmIC8qIEtSQjUgKi8KLX0KLQotY2hhciAqCi0jaWZkZWYgQ0tfQU5TSUMKLWNr X2tyYjVfdGt0X2ZsYWdzKGNoYXIgKiBjY19uYW1lLCBjaGFyICogdGt0bmFtZSkKLSNlbHNlCi1j a19rcmI1X3RrdF9mbGFncyhjY19uYW1lLHRrdG5hbWUpIGNoYXIgKiBjY19uYW1lOyBjaGFyICog dGt0bmFtZTsKLSNlbmRpZgotewotI2lmZGVmIEtSQjUKLSNpZm5kZWYgSEVJTURBTAotICAgIGty YjVfY29udGV4dCBrY29udGV4dDsKLSAgICBrcmI1X2Vycm9yX2NvZGUgcmV0dmFsOwotICAgIGty YjVfY2NhY2hlIGNhY2hlID0gTlVMTDsKLSAgICBrcmI1X2NjX2N1cnNvciBjdXI7Ci0gICAga3Ji NV9jcmVkcyBjcmVkczsKLSAgICBrcmI1X3ByaW5jaXBhbCBwcmluYz1OVUxMOwotICAgIGtyYjVf ZmxhZ3MgZmxhZ3M9MDsKLSAgICBrcmI1X2Vycm9yX2NvZGUgY29kZT0wOwotICAgIGNoYXIgKiBm bGFnX3N0ciA9ICIiOwotCi0gICAgaWYgKCAhY2tfa3JiNV9pc19pbnN0YWxsZWQoKSApCi0gICAg ICAgIHJldHVybigiIik7Ci0KLSAgICByZXR2YWwgPSBrcmI1X2luaXRfY29udGV4dCgma2NvbnRl eHQpOwotICAgIGlmIChyZXR2YWwpIHsKLSAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV90a3Rf ZmxhZ3Mgd2hpbGUgaW5pdGlhbGl6aW5nIGtyYjUiLCIiLHJldHZhbCk7Ci0gICAgICAgIHJldHVy bigiIik7Ci0gICAgfQotCi0gICAgY29kZSA9IGs1X2dldF9jY2FjaGUoa2NvbnRleHQsJmNhY2hl LGNjX25hbWUpOwotICAgIGlmIChjb2RlICE9IDApIHsKLSAgICAgICAgZGVidWcoRjExMSwiY2tf a3JiNV90a3RfaXN2YWxpZCB3aGlsZSBnZXR0aW5nIGNjYWNoZSIsCi0gICAgICAgICAgICAgICBl cnJvcl9tZXNzYWdlKGNvZGUpLGNvZGUpOwotICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsK LSAgICB9Ci0KLSAgICBmbGFncyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0dXJu cyBvZmYgT1BFTkNMT1NFIG1vZGUgKi8KLSAgICBpZiAoKGNvZGUgPSBrcmI1X2NjX3NldF9mbGFn cyhrY29udGV4dCwgY2FjaGUsIGZsYWdzKSkpIHsKLSAgICAgICAgaWYgKGNvZGUgPT0gRU5PRU5U KSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJja19rcmI1X3RrdF9mbGFncyAodGlja2V0IGNh Y2hlKSIsCi0gICAgICAgICAgICAgICAgICAga3JiNV9jY19nZXRfbmFtZShrY29udGV4dCwgY2Fj aGUpLGNvZGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVidWcoRjExMSwKLSAg ICAgICAgICAgICAgICAgImNrX2tyYjVfdGt0X2ZsYWdzIHdoaWxlIHNldHRpbmcgY2FjaGUgZmxh Z3MgKHRpY2tldCBjYWNoZSkiLAotICAgICAgICAgICAgICAgICAga3JiNV9jY19nZXRfbmFtZShr Y29udGV4dCwgY2FjaGUpLGNvZGUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHZhbCA9IC0xOwot ICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKLSAgICB9Ci0gICAgaWYgKChjb2RlID0ga3Ji NV9jY19nZXRfcHJpbmNpcGFsKGtjb250ZXh0LCBjYWNoZSwgJnByaW5jKSkpIHsKLSAgICAgICAg ZGVidWcoRjEwMSwiY2tfa3JiNV90a3RfZmxhZ3Mgd2hpbGUgcmV0cmlldmluZyBwcmluY2lwYWwg bmFtZSIsCi0gICAgICAgICAgICAgICAiIixjb2RlKTsKLSAgICAgICAgcmV0dmFsID0gLTE7Ci0g ICAgICAgIGdvdG8gZXhpdF9rNV9nZXRfdGt0OwotICAgIH0KLSAgICBpZiAoKGNvZGUgPSBrcmI1 X3VucGFyc2VfbmFtZShrY29udGV4dCwgcHJpbmMsICZkZWZuYW1lKSkpIHsKLSAgICAgICAgZGVi dWcoRjEwMSwiY2tfa3JiNV90a3RfZmxhZ3Mgd2hpbGUgdW5wYXJzaW5nIHByaW5jaXBhbCBuYW1l IiwKLSAgICAgICAgICAgICAgICIiLGNvZGUpOwotICAgICAgICByZXR2YWwgPSAtMTsKLSAgICAg ICAgZ290byBleGl0X2s1X2dldF90a3Q7Ci0gICAgfQotCi0gICAgaWYgKChjb2RlID0ga3JiNV9j Y19zdGFydF9zZXFfZ2V0KGtjb250ZXh0LCBjYWNoZSwgJmN1cikpKSB7Ci0gICAgICAgIGRlYnVn KEYxMDEsImNrX2tyYjVfdGt0X2ZsYWdzIHdoaWxlIHN0YXJ0aW5nIHRvIHJldHJpZXZlIHRpY2tl dHMiLAotICAgICAgICAgICAgICAgIiIsY29kZSk7Ci0gICAgICAgIHJldHZhbCA9IC0xOwotICAg ICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKLSAgICB9Ci0KLSAgICBpZiAoKGNvZGUgPSBrcmI1 X3RpbWVvZmRheShrY29udGV4dCwgJm5vdykpKSB7Ci0gICAgICAgIGlmICghc3RhdHVzX29ubHkp Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X3RrdF9mbGFncyB3aGlsZSBnZXR0aW5n IHRpbWUgb2YgZGF5LiIsCi0gICAgICAgICAgICAgICAgICAgIiIsY29kZSk7Ci0gICAgICAgIHJl dHZhbCA9IC0xOwotICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKLSAgICB9Ci0KLSAgICB3 aGlsZSAoIShjb2RlID0ga3JiNV9jY19uZXh0X2NyZWQoa2NvbnRleHQsIGNhY2hlLCAmY3VyLCAm Y3JlZHMpKSkgewotICAgICAgICBjaGFyICpzbmFtZT1OVUxMOwotCi0gICAgICAgIHJldHZhbCA9 IGtyYjVfdW5wYXJzZV9uYW1lKGtjb250ZXh0LCBjcmVkcy5zZXJ2ZXIsICZzbmFtZSk7Ci0gICAg ICAgIGlmIChyZXR2YWwpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsCi0gICAgICAgICAgICAg ICAgICAiY2tfa3JiNV90a3RfZmxhZ3Mgd2hpbGUgdW5wYXJzaW5nIHNlcnZlciBuYW1lIiwiIixy ZXR2YWwpOwotICAgICAgICAgICAgcmV0dmFsID0gLTE7Ci0gICAgICAgICAgICBrcmI1X2ZyZWVf Y3JlZF9jb250ZW50cyhrY29udGV4dCwgJmNyZWRzKTsKLSAgICAgICAgICAgIGdvdG8gZXhpdF9r NV9nZXRfdGt0OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCAhc3RyY21wKHNuYW1lLHRrdG5h bWUpICkgewotICAgICAgICAgICAgLyogd2UgZm91bmQgdGhlIHRpY2tldCB3ZSBhcmUgbG9va2lu ZyBmb3IgKi8KLQotICAgICAgICAgICAgZmxhZ19zdHIgPSBmbGFnc19zdHJpbmcoJmNyZWRzKTsK LQotICAgICAgICAgICAga3JiNV9mcmVlX3VucGFyc2VkX25hbWUoa2NvbnRleHQsc25hbWUpOwot ICAgICAgICAgICAga3JiNV9mcmVlX2NyZWRfY29udGVudHMoa2NvbnRleHQsICZjcmVkcyk7Ci0g ICAgICAgICAgICBjb2RlID0gS1JCNV9DQ19FTkQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg ICAgfQotICAgICAgICBrcmI1X2ZyZWVfdW5wYXJzZWRfbmFtZShrY29udGV4dCxzbmFtZSk7Ci0g ICAgICAgIGtyYjVfZnJlZV9jcmVkX2NvbnRlbnRzKGtjb250ZXh0LCAmY3JlZHMpOwotICAgIH0K LQotICAgIGlmIChjb2RlID09IEtSQjVfQ0NfRU5EKSB7Ci0gICAgICAgIGlmICgoY29kZSA9IGty YjVfY2NfZW5kX3NlcV9nZXQoa2NvbnRleHQsIGNhY2hlLCAmY3VyKSkpIHsKLSAgICAgICAgICAg IGRlYnVnKEYxMDEsImNrX2tyYjVfdGt0X2ZsYWdzIHdoaWxlIGZpbmlzaGluZyB0aWNrZXQgcmV0 cmlldmFsIiwKLSAgICAgICAgICAgICAgICAgICAiIixjb2RlKTsKLSAgICAgICAgICAgIGdvdG8g ZXhpdF9rNV9nZXRfdGt0OwotICAgICAgICB9Ci0gICAgICAgIGZsYWdzID0gS1JCNV9UQ19PUEVO Q0xPU0U7ICAgICAgLyogdHVybnMgb24gT1BFTkNMT1NFIG1vZGUgKi8KLSAgICAgICAgaWYgKChj b2RlID0ga3JiNV9jY19zZXRfZmxhZ3Moa2NvbnRleHQsIGNhY2hlLCBmbGFncykpKSB7Ci0gICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X3RrdF9mbGFncyB3aGlsZSBjbG9zaW5nIGNjYWNo ZSIsCi0gICAgICAgICAgICAgICAgICAgIiIsY29kZSk7Ci0gICAgICAgICAgICBnb3RvIGV4aXRf azVfZ2V0X3RrdDsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlYnVnKEYxMDEs ImNrX2tyYjVfdGt0X2ZsYWdzIHdoaWxlIHJldHJpZXZpbmcgYSB0aWNrZXQiLCIiLGNvZGUpOwot ICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKLSAgICB9Ci0KLSAgZXhpdF9rNV9nZXRfdGt0 OgotICAgIGtyYjVfZnJlZV9wcmluY2lwYWwoa2NvbnRleHQscHJpbmMpOwotICAgIGtyYjVfZnJl ZV91bnBhcnNlZF9uYW1lKGtjb250ZXh0LGRlZm5hbWUpOwotICAgIGtyYjVfY2NfY2xvc2Uoa2Nv bnRleHQsY2FjaGUpOwotICAgIGtyYjVfZnJlZV9jb250ZXh0KGtjb250ZXh0KTsKLSAgICByZXR1 cm4oZmxhZ19zdHIpOwotI2Vsc2UgLyogSEVJTURBTCAqLwotICAgIHJldHVybigiTm90IGltcGxl bWVudGVkIik7Ci0jZW5kaWYgLyogSEVJTURBTCAqLwotI2Vsc2UgLyogS1JCNSAqLwotICAgIHJl dHVybigiIik7Ci0jZW5kaWYgLyogS1JCNSAqLwotfQotCi0KLWludAotI2lmZGVmIENLX0FOU0lD Ci1ja19rcmI1X3RrdF9pc3ZhbGlkKGNoYXIgKiBjY19uYW1lLCBjaGFyICogdGt0bmFtZSkKLSNl bHNlCi1ja19rcmI1X3RrdF9pc3ZhbGlkKGNjX25hbWUsdGt0bmFtZSkgY2hhciAqIGNjX25hbWU7 IGNoYXIgKiB0a3RuYW1lOwotI2VuZGlmCi17Ci0jaWZkZWYgS1JCNQotI2lmbmRlZiBIRUlNREFM Ci0gICAga3JiNV9jb250ZXh0IGtjb250ZXh0PU5VTEw7Ci0gICAga3JiNV9lcnJvcl9jb2RlIHJl dHZhbDsKLSAgICBrcmI1X2NjYWNoZSBjYWNoZSA9IE5VTEw7Ci0gICAga3JiNV9jY19jdXJzb3Ig Y3VyOwotICAgIGtyYjVfY3JlZHMgY3JlZHM7Ci0gICAga3JiNV9wcmluY2lwYWwgcHJpbmM9TlVM TDsKLSAgICBrcmI1X2ZsYWdzIGZsYWdzPTA7Ci0gICAga3JiNV9lcnJvcl9jb2RlIGNvZGU9MDsK LSNpZmRlZiBDSEVDS0FERFJTCi0gICAga3JiNV9hZGRyZXNzICoqICAgICBteUFkZHJzPU5VTEw7 Ci0gICAga3JiNV9hZGRyZXNzICoqICAgICBwPU5VTEw7Ci0gICAgQk9PTCAgICAgICAgICAgICAg ICBBZGRyZm91bmQgPSBGQUxTRTsKLSNlbmRpZiAvKkNIRUNLQUREUlMqLwotCi0gICAgaWYgKCAh Y2tfa3JiNV9pc19pbnN0YWxsZWQoKSApCi0gICAgICAgIHJldHVybigtMSk7Ci0KLSAgICByZXR2 YWwgPSBrcmI1X2luaXRfY29udGV4dCgma2NvbnRleHQpOwotICAgIGlmIChyZXR2YWwpIHsKLSAg ICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV90a3RfaXN2YWxpZCB3aGlsZSBpbml0aWFsaXppbmcg a3JiNSIsIiIscmV0dmFsKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAgICBjb2Rl ID0gazVfZ2V0X2NjYWNoZShrY29udGV4dCwmY2FjaGUsY2NfbmFtZSk7Ci0gICAgaWYgKGNvZGUg IT0gMCkgewotICAgICAgICBkZWJ1ZyhGMTExLCJja19rcmI1X3RrdF9pc3ZhbGlkIHdoaWxlIGdl dHRpbmcgY2NhY2hlIiwKLSAgICAgICAgICAgICAgIGVycm9yX21lc3NhZ2UoY29kZSksY29kZSk7 Ci0gICAgICAgIGdvdG8gZXhpdF9rNV9nZXRfdGt0OwotICAgIH0KLQotICAgIGZsYWdzID0gMDsg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHR1cm5zIG9mZiBPUEVOQ0xPU0UgbW9kZSAqLwot ICAgIGlmICgoY29kZSA9IGtyYjVfY2Nfc2V0X2ZsYWdzKGtjb250ZXh0LCBjYWNoZSwgZmxhZ3Mp KSkgewotICAgICAgICBpZiAoY29kZSA9PSBFTk9FTlQpIHsKLSAgICAgICAgICAgIGRlYnVnKEYx MTEsImNrX2tyYjVfdGt0X2lzdmFsaWQgKHRpY2tldCBjYWNoZSkiLAotICAgICAgICAgICAgICAg ICAgIGtyYjVfY2NfZ2V0X25hbWUoa2NvbnRleHQsIGNhY2hlKSxjb2RlKTsKLSAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsCi0gICAgICAgICAgICAgICAgImNrX2tyYjVf dGt0X2lzdmFsaWQgd2hpbGUgc2V0dGluZyBjYWNoZSBmbGFncyAodGlja2V0IGNhY2hlKSIsCi0g ICAgICAgICAgICAgICAgICBrcmI1X2NjX2dldF9uYW1lKGtjb250ZXh0LCBjYWNoZSksY29kZSk7 Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dmFsID0gLTE7Ci0gICAgICAgIGdvdG8gZXhpdF9rNV9n ZXRfdGt0OwotICAgIH0KLSAgICBpZiAoKGNvZGUgPSBrcmI1X2NjX2dldF9wcmluY2lwYWwoa2Nv bnRleHQsIGNhY2hlLCAmcHJpbmMpKSkgewotICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X3Rr dF9pc3ZhbGlkIHdoaWxlIHJldHJpZXZpbmcgcHJpbmNpcGFsIG5hbWUiLAotICAgICAgICAgICAg ICAgIiIsY29kZSk7Ci0gICAgICAgIHJldHZhbCA9IC0xOwotICAgICAgICBnb3RvIGV4aXRfazVf Z2V0X3RrdDsKLSAgICB9Ci0gICAgaWYgKChjb2RlID0ga3JiNV91bnBhcnNlX25hbWUoa2NvbnRl eHQsIHByaW5jLCAmZGVmbmFtZSkpKSB7Ci0gICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfdGt0 X2lzdmFsaWQgd2hpbGUgdW5wYXJzaW5nIHByaW5jaXBhbCBuYW1lIiwKLSAgICAgICAgICAgICAg ICIiLGNvZGUpOwotICAgICAgICByZXR2YWwgPSAtMTsKLSAgICAgICAgZ290byBleGl0X2s1X2dl dF90a3Q7Ci0gICAgfQotCi0gICAgaWYgKChjb2RlID0ga3JiNV9jY19zdGFydF9zZXFfZ2V0KGtj b250ZXh0LCBjYWNoZSwgJmN1cikpKSB7Ci0gICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfdGt0 X2lzdmFsaWQgd2hpbGUgc3RhcnRpbmcgdG8gcmV0cmlldmUgdGlja2V0cyIsCi0gICAgICAgICAg ICAgICAiIixjb2RlKTsKLSAgICAgICAgcmV0dmFsID0gLTE7Ci0gICAgICAgIGdvdG8gZXhpdF9r NV9nZXRfdGt0OwotICAgIH0KLQotICAgIGlmICgoY29kZSA9IGtyYjVfdGltZW9mZGF5KGtjb250 ZXh0LCAmbm93KSkpIHsKLSAgICAgICAgaWYgKCFzdGF0dXNfb25seSkKLSAgICAgICAgICAgIGRl YnVnKEYxMDEsImNrX2tyYjVfdGt0X2lzdmFsaWQgd2hpbGUgZ2V0dGluZyB0aW1lIG9mIGRheS4i LAotICAgICAgICAgICAgICAgICAgICIiLGNvZGUpOwotICAgICAgICByZXR2YWwgPSAtMTsKLSAg ICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7Ci0gICAgfQotCi0gICAgd2hpbGUgKCEoY29kZSA9 IGtyYjVfY2NfbmV4dF9jcmVkKGtjb250ZXh0LCBjYWNoZSwgJmN1ciwgJmNyZWRzKSkpIHsKLSAg ICAgICAgY2hhciAqc25hbWU9TlVMTDsKLQotICAgICAgICByZXR2YWwgPSBrcmI1X3VucGFyc2Vf bmFtZShrY29udGV4dCwgY3JlZHMuc2VydmVyLCAmc25hbWUpOwotICAgICAgICBpZiAocmV0dmFs KSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLAotICAgICAgICAgICAgICAgICAgImNrX2tyYjVf dGt0X2lzdmFsaWQgd2hpbGUgdW5wYXJzaW5nIHNlcnZlciBuYW1lIiwiIixyZXR2YWwpOwotICAg ICAgICAgICAgcmV0dmFsID0gLTE7Ci0gICAgICAgICAgICBrcmI1X2ZyZWVfY3JlZF9jb250ZW50 cyhrY29udGV4dCwgJmNyZWRzKTsKLSAgICAgICAgICAgIGdvdG8gZXhpdF9rNV9nZXRfdGt0Owot ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCAhc3RyY21wKHNuYW1lLHRrdG5hbWUpICkgewotICAg ICAgICAgICAgLyogd2UgZm91bmQgdGhlIHRpY2tldCB3ZSBhcmUgbG9va2luZyBmb3IgKi8KLQot ICAgICAgICAgICAgLyogV2UgYWRkIGEgNSBtaW51dGVzIGZ1ZGdlIGZhY3RvciB0byBjb21wZW5z YXRlIGZvciBwb3RlbnRpYWwgKi8KLSAgICAgICAgICAgIC8qIGNsb2NrIHNrZXcgZXJyb3JzIGJl dHdlZW4gdGhlIEtEQyBhbmQgSzk1J3MgaG9zdCBPUyAgICAgICAgICovCi0KLSAgICAgICAgICAg IHJldHZhbCA9ICgoY3JlZHMudGltZXMuc3RhcnR0aW1lID4gMCkgJiYKLSAgICAgICAgICAgICAg ICAgICAgICAgbm93ID49IChjcmVkcy50aW1lcy5zdGFydHRpbWUgLSAzMDApICYmCi0gICAgICAg ICAgICAgICAgICAgICAgIG5vdyA8IChjcmVkcy50aW1lcy5lbmR0aW1lICsgMzAwKSAmJgotICAg ICAgICAgICAgICAgICAgICAgICAhKGNyZWRzLnRpY2tldF9mbGFncyAmIFRLVF9GTEdfSU5WQUxJ RCkpOwotCi0jaWZkZWYgQ0hFQ0tBRERSUwotICAgICAgICAgICAgaWYgKCByZXR2YWwgJiYga3Ji NV9jaGVja2FkZHJzICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVkcy5h ZGRyZXNzZXMgJiYgY3JlZHMuYWRkcmVzc2VzWzBdICkgewotICAgICAgICAgICAgICAgIC8qIGlm IHdlIHRoaW5rIGl0IGlzIHZhbGlkLCB0aGVuIGxldHMgY2hlY2sgdGhlIElQIEFkZHJlc3NlcyAq LwotICAgICAgICAgICAgICAgIC8qIHRvIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZCBmb3Igb3VyIGN1 cnJlbnQgY29ubmVjdGlvbi4gICAgICAqLwotICAgICAgICAgICAgICAgIC8qIEFsc28gbWFrZSBz dXJlIGl0J3MgZm9yIHRoZSBjb3JyZWN0IElQIGFkZHJlc3MgKi8KLSAgICAgICAgICAgICAgICBy ZXR2YWwgPSBrcmI1X29zX2xvY2FsYWRkcihrY29udGV4dCwgJm15QWRkcnMpOwotICAgICAgICAg ICAgICAgIGlmIChyZXR2YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgY29tX2VycihOVUxMLCBy ZXR2YWwsICJyZXRyaWV2aW5nIG15IElQIGFkZHJlc3MiKTsKLSAgICAgICAgICAgICAgICAgICAg a3JiNV9mcmVlX3VucGFyc2VkX25hbWUoa2NvbnRleHQsc25hbWUpOwotICAgICAgICAgICAgICAg ICAgICBrcmI1X2ZyZWVfY3JlZF9jb250ZW50cyhrY29udGV4dCwgJmNyZWRzKTsKLSAgICAgICAg ICAgICAgICAgICAgY29kZSA9IEtSQjVfQ0NfRU5EOwotICAgICAgICAgICAgICAgICAgICByZXR2 YWwgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot Ci0gICAgICAgICAgICAgLyogU2VlIGlmIGFueSBvZiBvdXIgYWRkcmVzc2VzIG1hdGNoIGFueSBp biBjYWNoZWQgY3JlZGVudGlhbHMgKi8KLQotICAgICAgICAgICAgICAgIGZvciAoQWRkcmZvdW5k PUZBTFNFLCBwPW15QWRkcnM7Ci0gICAgICAgICAgICAgICAgICAgICAoQWRkcmZvdW5kPT1GQUxT RSkgJiYgKCpwKTsKLSAgICAgICAgICAgICAgICAgICAgIHArKwotICAgICAgICAgICAgICAgICAg ICAgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChrcmI1X2FkZHJlc3Nfc2VhcmNoKGtjb250 ZXh0LCAqcCwgY3JlZHMuYWRkcmVzc2VzKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgQWRk cmZvdW5kID0gVFJVRTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICBrcmI1X2ZyZWVfYWRkcmVzc2VzKGs1X2NvbnRleHQsIG15QWRkcnMp OwotCi0gICAgICAgICAgICAgICAgaWYgKEFkZHJmb3VuZCkgewotICAgICAgICAgICAgICAgICAg ICBrcmI1X2ZyZWVfdW5wYXJzZWRfbmFtZShrY29udGV4dCxzbmFtZSk7Ci0gICAgICAgICAgICAg ICAgICAgIGtyYjVfZnJlZV9jcmVkX2NvbnRlbnRzKGtjb250ZXh0LCAmY3JlZHMpOwotICAgICAg ICAgICAgICAgICAgICBjb2RlID0gS1JCNV9DQ19FTkQ7Ci0gICAgICAgICAgICAgICAgICAgIHJl dHZhbCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGtyYjVfZnJlZV91bnBhcnNlZF9uYW1lKGtjb250 ZXh0LHNuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAga3JiNV9mcmVlX2NyZWRfY29udGVudHMo a2NvbnRleHQsICZjcmVkcyk7Ci0gICAgICAgICAgICAgICAgICAgIGNvZGUgPSBLUkI1X0NDX0VO RDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gMDsKLSAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotI2VuZGlmIC8qIENIRUNL QUREUlMgKi8KLQotICAgICAgICAgICAga3JiNV9mcmVlX3VucGFyc2VkX25hbWUoa2NvbnRleHQs c25hbWUpOwotICAgICAgICAgICAga3JiNV9mcmVlX2NyZWRfY29udGVudHMoa2NvbnRleHQsICZj cmVkcyk7Ci0gICAgICAgICAgICBjb2RlID0gS1JCNV9DQ19FTkQ7Ci0gICAgICAgICAgICBicmVh azsKLSAgICAgICAgfQotICAgICAgICBrcmI1X2ZyZWVfdW5wYXJzZWRfbmFtZShrY29udGV4dCxz bmFtZSk7Ci0gICAgICAgIGtyYjVfZnJlZV9jcmVkX2NvbnRlbnRzKGtjb250ZXh0LCAmY3JlZHMp OwotICAgIH0KLQotICAgIGlmIChjb2RlID09IEtSQjVfQ0NfRU5EKSB7Ci0gICAgICAgIGlmICgo Y29kZSA9IGtyYjVfY2NfZW5kX3NlcV9nZXQoa2NvbnRleHQsIGNhY2hlLCAmY3VyKSkpIHsKLSAg ICAgICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfdGt0X2lzdmFsaWQgd2hpbGUgZmluaXNoaW5n IHRpY2tldCByZXRyaWV2YWwiLAotICAgICAgICAgICAgICAgICAgICIiLGNvZGUpOwotICAgICAg ICAgICAgcmV0dmFsID0gLTE7Ci0gICAgICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKLSAg ICAgICAgfQotICAgICAgICBmbGFncyA9IEtSQjVfVENfT1BFTkNMT1NFOyAgICAgIC8qIHR1cm5z IG9uIE9QRU5DTE9TRSBtb2RlICovCi0gICAgICAgIGlmICgoY29kZSA9IGtyYjVfY2Nfc2V0X2Zs YWdzKGtjb250ZXh0LCBjYWNoZSwgZmxhZ3MpKSkgewotICAgICAgICAgICAgZGVidWcoRjEwMSwi Y2tfa3JiNV90a3RfaXN2YWxpZCB3aGlsZSBjbG9zaW5nIGNjYWNoZSIsCi0gICAgICAgICAgICAg ICAgICAgIiIsY29kZSk7Ci0gICAgICAgICAgICByZXR2YWwgPSAtMTsKLSAgICAgICAgICAgIGdv dG8gZXhpdF9rNV9nZXRfdGt0OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZGVi dWcoRjEwMSwiY2tfa3JiNV90a3RfaXN2YWxpZCB3aGlsZSByZXRyaWV2aW5nIGEgdGlja2V0Iiwi Iixjb2RlKTsKLSAgICAgICAgcmV0dmFsID0gLTE7Ci0gICAgICAgIGdvdG8gZXhpdF9rNV9nZXRf dGt0OwotICAgIH0KLQotICBleGl0X2s1X2dldF90a3Q6Ci0gICAga3JiNV9mcmVlX3ByaW5jaXBh bChrY29udGV4dCxwcmluYyk7Ci0gICAga3JiNV9mcmVlX3VucGFyc2VkX25hbWUoa2NvbnRleHQs ZGVmbmFtZSk7Ci0gICAga3JiNV9jY19jbG9zZShrY29udGV4dCxjYWNoZSk7Ci0gICAga3JiNV9m cmVlX2NvbnRleHQoa2NvbnRleHQpOwotICAgIHJldHVybihyZXR2YWwpOwotI2Vsc2UgLyogSEVJ TURBTCAqLwotICAgIHJldHVybigtMSk7Ci0jZW5kaWYgLyogSEVJTURBTCAqLwotI2Vsc2UgLyog S1JCNSAqLwotICAgIHJldHVybigtMSk7Ci0jZW5kaWYgLyogS1JCNSAqLwotfQotCi1pbnQKLSNp ZmRlZiBDS19BTlNJQwotY2tfa3JiNV9pc190Z3RfdmFsaWQoVk9JRCkKLSNlbHNlCi1ja19rcmI1 X2lzX3RndF92YWxpZCgpCi0jZW5kaWYKLXsKLSNpZmRlZiBLUkI1Ci0jaWZuZGVmIEhFSU1EQUwK LSAgICBjaGFyIHRndFsyNTZdOwotICAgIGNoYXIgKiBzOwotICAgIGludCByYyA9IDA7Ci0KLSAg ICBzID0gY2tfa3JiNV9nZXRyZWFsbShrcmI1X2RfY2MpOwotICAgIGNrbWFrbXNnKHRndCxzaXpl b2YodGd0KSwia3JidGd0LyIscywiQCIscyk7Ci0gICAgcmMgPSBja19rcmI1X3RrdF9pc3ZhbGlk KGtyYjVfZF9jYyx0Z3QpOwotICAgIGRlYnVnKEYxMTEsImNrX2tyYjVfaXNfdGd0X3ZhbGlkIix0 Z3QscmMpOwotICAgIHJldHVybihyYz4wKTsKLSNlbHNlIC8qIEhFSU1EQUwgKi8KLSAgICByZXR1 cm4oLTEpOwotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLSNlbHNlIC8qIEtSQjUgKi8KLSAgICByZXR1 cm4oMCk7Ci0jZW5kaWYgLyogS1JCNSAqLwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotY2tf a3JiNV90a3RfdGltZShjaGFyICogY2NfbmFtZSwgY2hhciAqIHRrdG5hbWUpCi0jZWxzZQotY2tf a3JiNV90a3RfdGltZShjY19uYW1lLCB0a3RuYW1lKSBjaGFyICogY2NfbmFtZTsgY2hhciAqIHRr dG5hbWU7Ci0jZW5kaWYKLXsKLSNpZmRlZiBLUkI1Ci0jaWZuZGVmIEhFSU1EQUwKLSAgICBrcmI1 X2NvbnRleHQga2NvbnRleHQ7Ci0gICAga3JiNV9lcnJvcl9jb2RlIHJldHZhbDsKLSAgICBrcmI1 X2NjYWNoZSBjYWNoZSA9IE5VTEw7Ci0gICAga3JiNV9jY19jdXJzb3IgY3VyOwotICAgIGtyYjVf Y3JlZHMgY3JlZHM7Ci0gICAga3JiNV9wcmluY2lwYWwgcHJpbmM9TlVMTDsKLSAgICBrcmI1X2Zs YWdzIGZsYWdzPTA7Ci0gICAga3JiNV9lcnJvcl9jb2RlIGNvZGU9MDsKLQotICAgIGlmICggIWNr X2tyYjVfaXNfaW5zdGFsbGVkKCkgKQotICAgICAgICByZXR1cm4oLTEpOwotCi0gICAgcmV0dmFs ID0ga3JiNV9pbml0X2NvbnRleHQoJmtjb250ZXh0KTsKLSAgICBpZiAocmV0dmFsKSB7Ci0gICAg ICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfbGlzdF9jcmVkcyB3aGlsZSBpbml0aWFsaXppbmcga3Ji NSIsIiIscmV0dmFsKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAgICBjb2RlID0g azVfZ2V0X2NjYWNoZShrY29udGV4dCwmY2FjaGUsY2NfbmFtZSk7Ci0gICAgaWYgKGNvZGUgIT0g MCkgewotICAgICAgICBkZWJ1ZyhGMTExLCJja19rcmI1X3RrdF90aW1lIHdoaWxlIGdldHRpbmcg Y2NhY2hlIiwKLSAgICAgICAgICAgICAgIGVycm9yX21lc3NhZ2UoY29kZSksY29kZSk7Ci0gICAg ICAgIHJldHZhbCA9IC0xOwotICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKLSAgICB9Ci0K LSAgICBmbGFncyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0dXJucyBvZmYgT1BF TkNMT1NFIG1vZGUgKi8KLSAgICBpZiAoKGNvZGUgPSBrcmI1X2NjX3NldF9mbGFncyhrY29udGV4 dCwgY2FjaGUsIGZsYWdzKSkpIHsKLSAgICAgICAgaWYgKGNvZGUgPT0gRU5PRU5UKSB7Ci0gICAg ICAgICAgICBkZWJ1ZyhGMTExLCJja19rcmI1X2xpc3RfY3JlZHMgKHRpY2tldCBjYWNoZSkiLAot ICAgICAgICAgICAgICAgICAgIGtyYjVfY2NfZ2V0X25hbWUoa2NvbnRleHQsIGNhY2hlKSxjb2Rl KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsCi0gICAgICAgICAg ICAgICAgICJja19rcmI1X2xpc3RfY3JlZHMgd2hpbGUgc2V0dGluZyBjYWNoZSBmbGFncyAodGlj a2V0IGNhY2hlKSIsCi0gICAgICAgICAgICAgICAgICBrcmI1X2NjX2dldF9uYW1lKGtjb250ZXh0 LCBjYWNoZSksY29kZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dmFsID0gLTE7Ci0gICAgICAg IGdvdG8gZXhpdF9rNV9nZXRfdGt0OwotICAgIH0KLSAgICBpZiAoKGNvZGUgPSBrcmI1X2NjX2dl dF9wcmluY2lwYWwoa2NvbnRleHQsIGNhY2hlLCAmcHJpbmMpKSkgewotICAgICAgICBkZWJ1ZyhG MTAxLCJja19rcmI1X2xpc3RfY3JlZHMgd2hpbGUgcmV0cmlldmluZyBwcmluY2lwYWwgbmFtZSIs Ci0gICAgICAgICAgICAgICAiIixjb2RlKTsKLSAgICAgICAgcmV0dmFsID0gLTE7Ci0gICAgICAg IGdvdG8gZXhpdF9rNV9nZXRfdGt0OwotICAgIH0KLSAgICBpZiAoKGNvZGUgPSBrcmI1X3VucGFy c2VfbmFtZShrY29udGV4dCwgcHJpbmMsICZkZWZuYW1lKSkpIHsKLSAgICAgICAgZGVidWcoRjEw MSwiY2tfa3JiNV9saXN0X2NyZWRzIHdoaWxlIHVucGFyc2luZyBwcmluY2lwYWwgbmFtZSIsCi0g ICAgICAgICAgICAgICAiIixjb2RlKTsKLSAgICAgICAgcmV0dmFsID0gLTE7Ci0gICAgICAgIGdv dG8gZXhpdF9rNV9nZXRfdGt0OwotICAgIH0KLQotICAgIGlmICgoY29kZSA9IGtyYjVfY2Nfc3Rh cnRfc2VxX2dldChrY29udGV4dCwgY2FjaGUsICZjdXIpKSkgewotICAgICAgICBkZWJ1ZyhGMTAx LCJja19rcmI1X2xpc3RfY3JlZHMgd2hpbGUgc3RhcnRpbmcgdG8gcmV0cmlldmUgdGlja2V0cyIs Ci0gICAgICAgICAgICAgICAiIixjb2RlKTsKLSAgICAgICAgcmV0dmFsID0gLTE7Ci0gICAgICAg IGdvdG8gZXhpdF9rNV9nZXRfdGt0OwotICAgIH0KLQotICAgIGlmICgoY29kZSA9IGtyYjVfdGlt ZW9mZGF5KGtjb250ZXh0LCAmbm93KSkpIHsKLSAgICAgICAgaWYgKCFzdGF0dXNfb25seSkKLSAg ICAgICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfbGlzdF9jcmVkcyB3aGlsZSBnZXR0aW5nIHRp bWUgb2YgZGF5LiIsCi0gICAgICAgICAgICAgICAgICAgIiIsY29kZSk7Ci0gICAgICAgIGtyYjVf ZnJlZV9jb250ZXh0KGtjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAg ICB3aGlsZSAoIShjb2RlID0ga3JiNV9jY19uZXh0X2NyZWQoa2NvbnRleHQsIGNhY2hlLCAmY3Vy LCAmY3JlZHMpKSkgewotICAgICAgICBjaGFyICpzbmFtZT1OVUxMOwotCi0gICAgICAgIHJldHZh bCA9IGtyYjVfdW5wYXJzZV9uYW1lKGtjb250ZXh0LCBjcmVkcy5zZXJ2ZXIsICZzbmFtZSk7Ci0g ICAgICAgIGlmIChyZXR2YWwpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsCi0gICAgICAgICAg ICAgICAgICAiY2tfa3JiNV9saXN0X2NyZWRzIHdoaWxlIHVucGFyc2luZyBzZXJ2ZXIgbmFtZSIs IiIscmV0dmFsKTsKLSAgICAgICAgICAgIHJldHZhbCA9IC0xOwotICAgICAgICAgICAga3JiNV9m cmVlX3VucGFyc2VkX25hbWUoa2NvbnRleHQsc25hbWUpOwotICAgICAgICAgICAga3JiNV9mcmVl X2NyZWRfY29udGVudHMoa2NvbnRleHQsICZjcmVkcyk7Ci0gICAgICAgICAgICBnb3RvIGV4aXRf azVfZ2V0X3RrdDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggIXN0cmNtcChzbmFtZSx0a3Ru YW1lKSApIHsKLSAgICAgICAgICAgIC8qIHdlIGZvdW5kIHRoZSB0aWNrZXQgd2UgYXJlIGxvb2tp bmcgZm9yICovCi0gICAgICAgICAgICBpbnQgdmFsaWQgPSAoY3JlZHMudGltZXMuc3RhcnR0aW1l ICYmCi0gICAgICAgICAgICAgICAgICAgICAgIG5vdyA+IGNyZWRzLnRpbWVzLnN0YXJ0dGltZSAm JgotICAgICAgICAgICAgICAgICAgICAgICBub3cgPCBjcmVkcy50aW1lcy5lbmR0aW1lICYmCi0g ICAgICAgICAgICAgICAgICAgICAgICEoY3JlZHMudGlja2V0X2ZsYWdzICYgVEtUX0ZMR19JTlZB TElEKSk7Ci0gICAgICAgICAgICBpZiAoIHZhbGlkICkgewotICAgICAgICAgICAgICAgIHJldHZh bCA9IGNyZWRzLnRpbWVzLmVuZHRpbWUgLSBub3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg ICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dmFsID0gMDsKLSAgICAgICAgICAgIGtyYjVfZnJl ZV91bnBhcnNlZF9uYW1lKGtjb250ZXh0LHNuYW1lKTsKLSAgICAgICAgICAgIGtyYjVfZnJlZV9j cmVkX2NvbnRlbnRzKGtjb250ZXh0LCAmY3JlZHMpOwotICAgICAgICAgICAgY29kZSA9IEtSQjVf Q0NfRU5EOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAga3JiNV9mcmVl X3VucGFyc2VkX25hbWUoa2NvbnRleHQsc25hbWUpOwotICAgICAgICBrcmI1X2ZyZWVfY3JlZF9j b250ZW50cyhrY29udGV4dCwgJmNyZWRzKTsKLSAgICB9Ci0KLSAgICBpZiAoY29kZSA9PSBLUkI1 X0NDX0VORCkgewotICAgICAgICBpZiAoKGNvZGUgPSBrcmI1X2NjX2VuZF9zZXFfZ2V0KGtjb250 ZXh0LCBjYWNoZSwgJmN1cikpKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X2xp c3RfY3JlZHMgd2hpbGUgZmluaXNoaW5nIHRpY2tldCByZXRyaWV2YWwiLAotICAgICAgICAgICAg ICAgICAgICIiLGNvZGUpOwotICAgICAgICAgICAgcmV0dmFsID0gLTE7Ci0gICAgICAgICAgICBn b3RvIGV4aXRfazVfZ2V0X3RrdDsKLSAgICAgICAgfQotICAgICAgICBmbGFncyA9IEtSQjVfVENf T1BFTkNMT1NFOyAgICAgIC8qIHR1cm5zIG9uIE9QRU5DTE9TRSBtb2RlICovCi0gICAgICAgIGlm ICgoY29kZSA9IGtyYjVfY2Nfc2V0X2ZsYWdzKGtjb250ZXh0LCBjYWNoZSwgZmxhZ3MpKSkgewot ICAgICAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV9saXN0X2NyZWRzIHdoaWxlIGNsb3Npbmcg Y2NhY2hlIiwKLSAgICAgICAgICAgICAgICAgICAiIixjb2RlKTsKLSAgICAgICAgICAgIHJldHZh bCA9IC0xOwotICAgICAgICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7Ci0gICAgICAgIH0KLSAg ICB9IGVsc2UgewotICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X2xpc3RfY3JlZHMgd2hpbGUg cmV0cmlldmluZyBhIHRpY2tldCIsIiIsY29kZSk7Ci0gICAgICAgIHJldHZhbCA9IC0xOwotICAg ICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKLSAgICB9Ci0KLSAgZXhpdF9rNV9nZXRfdGt0Ogot ICAgIGtyYjVfZnJlZV9wcmluY2lwYWwoa2NvbnRleHQscHJpbmMpOwotICAgIGtyYjVfZnJlZV91 bnBhcnNlZF9uYW1lKGtjb250ZXh0LGRlZm5hbWUpOwotICAgIGtyYjVfY2NfY2xvc2Uoa2NvbnRl eHQsY2FjaGUpOwotICAgIGtyYjVfZnJlZV9jb250ZXh0KGtjb250ZXh0KTsKLSAgICByZXR1cm4o cmV0dmFsKTsKLSNlbHNlIC8qIEhFSU1EQUwgKi8KLSAgICByZXR1cm4oLTEpOwotI2VuZGlmIC8q IEhFSU1EQUwgKi8KLSNlbHNlIC8qIEtSQjUgKi8KLSAgICByZXR1cm4oLTEpOwotI2VuZGlmIC8q IEtSQjUgKi8KLX0KLQotY2hhciAqCi0jaWZkZWYgQ0tfQU5TSUMKLWNrX2tyYjVfZ2V0X2NjX25h bWUodm9pZCkKLSNlbHNlCi1ja19rcmI1X2dldF9jY19uYW1lKCkKLSNlbmRpZgotewotI2lmZGVm IEtSQjUKLSNpZm5kZWYgSEVJTURBTAotICAgIHN0YXRpYyBjaGFyIGNjX25hbWVbQ0tNQVhQQVRI KzFdPSIiOwotICAgIGtyYjVfY29udGV4dCBrY29udGV4dCA9IE5VTEw7Ci0gICAga3JiNV9jY2Fj aGUgY2NhY2hlID0gTlVMTDsKLSAgICBrcmI1X2Vycm9yX2NvZGUgY29kZTsKLSAgICBjaGFyICog cD1OVUxMOwotCi0gICAgY2NfbmFtZVswXSA9ICdcMCc7Ci0KLSAgICBpZiAoICFja19rcmI1X2lz X2luc3RhbGxlZCgpICkKLSAgICAgICAgcmV0dXJuKGNjX25hbWUpOwotCi0gICAgcCA9IGdldGVu digiS1JCNUNDTkFNRSIpOwotICAgIGlmICggIXAgKSB7Ci0gICAgICAgIGNvZGUgPSBrcmI1X2lu aXRfY29udGV4dCgma2NvbnRleHQpOwotICAgICAgICBpZiAoY29kZSkgewotICAgICAgICAgICAg Y29tX2VycigiY2tfa3JiNV9nZXRfY2NfbmFtZSIsY29kZSwid2hpbGUgaW5pdF9jb250ZXh0Iik7 Ci0gICAgICAgICAgICByZXR1cm4oY2NfbmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKChj b2RlID0ga3JiNV9jY19kZWZhdWx0KGtjb250ZXh0LCAmY2NhY2hlKSkpIHsKLSAgICAgICAgICAg IGNvbV9lcnIoImNrX2tyYjVfZ2V0X2NjX25hbWUiLGNvZGUsIndoaWxlIGdldHRpbmcgZGVmYXVs dCBjY2FjaGUiKTsKLSAgICAgICAgICAgIGdvdG8gZXhpdF9rNV9nZXRfY2M7Ci0gICAgICAgIH0K LQotICAgICAgICBja21ha21zZyhjY19uYW1lLHNpemVvZihjY19uYW1lKSwKLSAgICAgICAgICAg ICAgICAgKGNoYXIgKilrcmI1X2NjX2dldF90eXBlKGtjb250ZXh0LGNjYWNoZSksIjoiLAotICAg ICAgICAgICAgICAgICAoY2hhciAqKWtyYjVfY2NfZ2V0X25hbWUoa2NvbnRleHQsY2NhY2hlKSxO VUxMKTsKLSAgICB9IGVsc2UgewotICAgICAgICBja3N0cm5jcHkoY2NfbmFtZSxwLENLTUFYUEFU SCk7Ci0gICAgfQotCi0gICAgaWYgKCAhc3RybmNtcCgiRklMRToiLGNjX25hbWUsNSkgKSB7Ci0g ICAgICAgIGZvciAoIHA9Y2NfbmFtZTsgKnAgOyBwKysgKQotICAgICAgICAgICAgaWYgKCAqcCA9 PSAnXFwnICkgKnAgPSAnLyc7Ci0gICAgfQotCi0gIGV4aXRfazVfZ2V0X2NjOgotICAgIGlmICgg Y2NhY2hlICkKLSAgICAgICAga3JiNV9jY19jbG9zZShrY29udGV4dCxjY2FjaGUpOwotICAgIGlm ICgga2NvbnRleHQgKQotICAgICAgICBrcmI1X2ZyZWVfY29udGV4dChrY29udGV4dCk7Ci0gICAg cmV0dXJuKGNjX25hbWUpOwotI2Vsc2UgLyogSEVJTURBTCAqLwotICAgIHJldHVybigiTm90IGlt cGxlbWVudGVkIik7Ci0jZW5kaWYgLyogSEVJTURBTCAqLwotI2Vsc2UgLyogS1JCNSAqLwotICAg IHJldHVybigiIik7Ci0jZW5kaWYgLyogS1JCNSAqLwotfQotCi1jaGFyICoKLSNpZmRlZiBDS19B TlNJQwotY2tfa3JiNV9nZXRyZWFsbShjaGFyICogY2NfbmFtZSkKLSNlbHNlCi1ja19rcmI1X2dl dHJlYWxtKGNjX25hbWUpIGNoYXIgKiBjY19uYW1lOwotI2VuZGlmCi17Ci0jaWZkZWYgS1JCNQot I2lmbmRlZiBIRUlNREFMCi0gICAgc3RhdGljIGNoYXIgcmVhbG1bMjU2XT0iIjsKLSAgICBrcmI1 X2NvbnRleHQga2NvbnRleHQ7Ci0gICAga3JiNV9jY2FjaGUgY2NhY2hlID0gTlVMTDsKLSAgICBr cmI1X2Vycm9yX2NvZGUgY29kZTsKLSAgICBrcmI1X3ByaW5jaXBhbCBtZT1OVUxMOwotCi0gICAg cmVhbG1bMF0gPSAnXDAnOwotCi0gICAgaWYgKCAhY2tfa3JiNV9pc19pbnN0YWxsZWQoKSApCi0g ICAgICAgIHJldHVybihyZWFsbSk7Ci0KLSAgICBjb2RlID0ga3JiNV9pbml0X2NvbnRleHQoJmtj b250ZXh0KTsKLSAgICBpZiAoY29kZSkgewotICAgICAgICByZXR1cm4ocmVhbG0pOwotICAgIH0K LQotICAgIGNvZGUgPSBrNV9nZXRfY2NhY2hlKGtjb250ZXh0LCZjY2FjaGUsY2NfbmFtZSk7Ci0g ICAgaWYgKGNvZGUgIT0gMCkgewotICAgICAgICBnb3RvIGV4aXRfazVfZ2V0cmVhbG07Ci0gICAg fQotCi0JY29kZSA9IGtyYjVfY2NfZ2V0X3ByaW5jaXBhbChrY29udGV4dCwgY2NhY2hlLCAmbWUp OwotCWlmIChjb2RlKQotCQljb2RlID0ga3JiNV9wYXJzZV9uYW1lKGtjb250ZXh0LCAiZm9vIiwg Jm1lKTsKLSAgICBpZiAoY29kZSkgewotICAgICAgICBnb3RvIGV4aXRfazVfZ2V0cmVhbG07Ci0g ICAgfQotICAgIGlmICgga3JiNV9wcmluY19yZWFsbShrY29udGV4dCwgbWUpLT5sZW5ndGggPCBz aXplb2YocmVhbG0pICkgewotICAgICAgICBtZW1jcHkocmVhbG0sa3JiNV9wcmluY19yZWFsbShr Y29udGV4dCwgbWUpLT5kYXRhLAotICAgICAgICAgICAgICAgIGtyYjVfcHJpbmNfcmVhbG0oa2Nv bnRleHQsIG1lKS0+bGVuZ3RoKTsgICAgICAgIC8qIHNhZmUgKi8KLSAgICAgICByZWFsbVtrcmI1 X3ByaW5jX3JlYWxtKGtjb250ZXh0LCBtZSktPmxlbmd0aF09J1wwJzsKLSAgICB9Ci0gIGV4aXRf azVfZ2V0cmVhbG06Ci0gICAgaWYgKCBtZSApCi0gICAgICAgIGtyYjVfZnJlZV9wcmluY2lwYWwo a2NvbnRleHQsbWUpOwotICAgIGlmICggY2NhY2hlICkKLSAgICAgICAga3JiNV9jY19jbG9zZShr Y29udGV4dCxjY2FjaGUpOwotICAgIGlmIChrY29udGV4dCkKLSAgICAgICAga3JiNV9mcmVlX2Nv bnRleHQoa2NvbnRleHQpOwotICAgIHJldHVybihyZWFsbSk7Ci0jZWxzZSAvKiBIRUlNREFMICov Ci0gICAgcmV0dXJuKCJOb3QgaW1wbGVtZW50ZWQiKTsKLSNlbmRpZiAvKiBIRUlNREFMICovCi0j ZWxzZSAvKiBLUkI1ICovCi0gICAgcmV0dXJuKCIiKTsKLSNlbmRpZiAvKiBLUkI1ICovCi19Ci0K LWNoYXIgKgotI2lmZGVmIENLX0FOU0lDCi1ja19rcmI1X2dldHByaW5jaXBhbChjaGFyICogY2Nf bmFtZSkKLSNlbHNlCi1ja19rcmI1X2dldHByaW5jaXBhbChjY19uYW1lKSBjaGFyICogY2NfbmFt ZTsKLSNlbmRpZgotewotI2lmZGVmIEtSQjUKLSNpZm5kZWYgSEVJTURBTAotICAgIHN0YXRpYyBj aGFyIHByaW5jaXBhbFtVSURCVUZMRU4rMV09IiI7Ci0gICAga3JiNV9jb250ZXh0IGtjb250ZXh0 OwotICAgIGtyYjVfY2NhY2hlIGNjYWNoZSA9IE5VTEw7Ci0gICAga3JiNV9lcnJvcl9jb2RlIGNv ZGU7Ci0gICAga3JiNV9wcmluY2lwYWwgbWU7Ci0gICAgY2hhciAqIHA9TlVMTDsKLSAgICBpbnQg aTsKLQotICAgIHByaW5jaXBhbFswXSA9ICdcMCc7Ci0KLSAgICBpZiAoICFja19rcmI1X2lzX2lu c3RhbGxlZCgpICkKLSAgICAgICAgcmV0dXJuKHByaW5jaXBhbCk7Ci0KLSAgICBjb2RlID0ga3Ji NV9pbml0X2NvbnRleHQoJmtjb250ZXh0KTsKLSAgICBpZiAoY29kZSkgewotICAgICAgICByZXR1 cm4ocHJpbmNpcGFsKTsKLSAgICB9Ci0KLSAgICBjb2RlID0gazVfZ2V0X2NjYWNoZShrY29udGV4 dCwmY2NhY2hlLGNjX25hbWUpOwotICAgIGlmIChjb2RlICE9IDApIHsKLSAgICAgICAgZ290byBl eGl0X2s1X2dldHByaW5jaXBhbDsKLSAgICB9Ci0KLSAgICBpZiAoKGNvZGUgPSBrcmI1X2NjX2dl dF9wcmluY2lwYWwoa2NvbnRleHQsIGNjYWNoZSwgJm1lKSkpIHsKLSAgICAgICAgZ290byBleGl0 X2s1X2dldHByaW5jaXBhbDsKLSAgICB9Ci0KLSAgICBpZiAoKGNvZGUgPSBrcmI1X3VucGFyc2Vf bmFtZSAoa2NvbnRleHQsIG1lLCAmcCkpKSB7Ci0gICAgICAgIGtyYjVfZnJlZV9wcmluY2lwYWwo a2NvbnRleHQsbWUpOwotICAgICAgICBnb3RvIGV4aXRfazVfZ2V0cHJpbmNpcGFsOwotICAgIH0K LQotICAgIGNrc3RybmNweShwcmluY2lwYWwscCxVSURCVUZMRU4pOwotICAgIGkgPSBja2luZGV4 KCJAIixwcmluY2lwYWwsMCwwLDApOwotICAgIGlmIChpKQotICAgICAgcHJpbmNpcGFsW2ktMV0g PSAnXDAnOwotCi0gICAga3JiNV9mcmVlX3VucGFyc2VkX25hbWUoa2NvbnRleHQscCk7Ci0KLSAg ZXhpdF9rNV9nZXRwcmluY2lwYWw6Ci0gICAgaWYgKCBjY2FjaGUgKQotICAgICAgICBrcmI1X2Nj X2Nsb3NlKGtjb250ZXh0LGNjYWNoZSk7Ci0gICAgaWYgKGtjb250ZXh0KQotICAgICAgICBrcmI1 X2ZyZWVfY29udGV4dChrY29udGV4dCk7Ci0gICAgcmV0dXJuKHByaW5jaXBhbCk7Ci0jZWxzZSAv KiBIRUlNREFMICovCi0gICAgcmV0dXJuKCJOb3QgaW1wbGVtZW50ZWQiKTsKLSNlbmRpZiAvKiBI RUlNREFMICovCi0jZWxzZSAvKiBLUkI1ICovCi0gICAgcmV0dXJuKCIiKTsKLSNlbmRpZiAvKiBL UkI1ICovCi19Ci0KLSNpZm5kZWYgQ1JZUFRfRExMCi1pbnQKLWNrX2dldF9jcnlwdF90YWJsZShz dHJ1Y3Qga2V5dGFiICoqIHBUYWJsZSwgaW50ICogcE4pCi17Ci0jaWZkZWYgQ0tfRU5DUllQVElP TgotICAgIHJldHVybihnZXRfY3J5cHRfdGFibGUocFRhYmxlLCBwTikpOwotI2Vsc2UgLyogRU5D UllQVElPTiAqLwotICAgIGludCBpPTA7Ci0jaWZuZGVmIE9TMgotICAgIGNoYXIgKiB0bXBzdHJp bmcgPSBOVUxMOwotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAgaWYgKCAqcFRhYmxlICkKLSAgICB7 Ci0gICAgICAgIGZvciAoIGk9MCA7IGkgPCAqcE4gOyBpKysgKQotICAgICAgICAgICAgZnJlZSgg KCpwVGFibGUpW2ldLmt3ZCApIDsKLSAgICAgICAgZnJlZSAoICpwVGFibGUgKSAgOwotICAgIH0K LSAgICAqcFRhYmxlID0gTlVMTDsKLSAgICAqcE4gPSAwOwotCi0gICAgKnBUYWJsZSA9IG1hbGxv Yyggc2l6ZW9mKHN0cnVjdCBrZXl0YWIpICogMiApIDsKLSAgICBpZiAoICEoKnBUYWJsZSkgKQot ICAgICAgICByZXR1cm4oMCk7Ci0KLSNpZmRlZiBPUzIKLSAgICAoKnBUYWJsZSlbMF0ua3dkID1z dHJkdXAoImF1dG9tYXRpYyIpOwotI2Vsc2UgLyogT1MyICovCi0gICAgbWFrZXN0cigmdG1wc3Ry aW5nLCJhdXRvbWF0aWMiKTsKLSAgICAoKnBUYWJsZSlbMF0ua3dkID0gdG1wc3RyaW5nOwotICAg IHRtcHN0cmluZyA9IE5VTEw7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgKCpwVGFibGUpWzBdLmt3 dmFsID0gRU5DVFlQRV9BTlk7Ci0gICAgKCpwVGFibGUpWzBdLmZsZ3MgPSAwOwotI2lmZGVmIE9T MgotICAgICgqcFRhYmxlKVsxXS5rd2QgPXN0cmR1cCgibm9uZSIpOwotI2Vsc2UgLyogT1MyICov Ci0gICAgbWFrZXN0cigmdG1wc3RyaW5nLCJub25lIik7Ci0gICAgKCpwVGFibGUpWzFdLmt3ZCA9 IHRtcHN0cmluZzsKLSAgICB0bXBzdHJpbmcgPSBOVUxMOwotI2VuZGlmIC8qIE9TMiAqLwotICAg ICgqcFRhYmxlKVsxXS5rd3ZhbCA9IDk5OTsKLSAgICAoKnBUYWJsZSlbMV0uZmxncyA9IDA7Ci0g ICAgKCpwTikgPSAyOwotCi0gICAgcmV0dXJuKDIpOwotI2VuZGlmIC8qIEVOQ1JZUFRJT04gKi8K LX0KLQotVk9JRAotY2tfZW5jcnlwdF9zZW5kX3N1cHBvcnQoKQotewotI2lmZGVmIENLX0VOQ1JZ UFRJT04KLSAgICBlbmNyeXB0X3NlbmRfc3VwcG9ydCgpOwotI2VuZGlmIC8qIEVOQ1JZUFRJT04g Ki8KLX0KLSNlbmRpZiAvKiBDUllQVF9ETEwgKi8KLQotLyoKLSAqCi0gKiBLc3RyZWFtCi0gKgot ICogRW11bGF0ZXMgdGhlIGtzdHJlYW0gcGFja2FnZSBpbiBLZXJiZXJvcyA0Ci0gKgotICovCi0K LWludAota3N0cmVhbV9kZXN0cm95KCkKLXsKLSAgICBpZiAoZ19rc3RyZWFtICE9IE5VTEwpIHsK LSAgICAgICAgYXV0aF9kZXN0cm95KCk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBEZXN0cm95 IGF1dGhvcml6aW5nICovCi0gICAgICAgIGZyZWUoZ19rc3RyZWFtKTsKLSAgICAgICAgZ19rc3Ry ZWFtPU5VTEw7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1WT0lECi0jaWZkZWYgQ0tfQU5T SUMKLWtzdHJlYW1fc2V0X2J1ZmZlcl9tb2RlKGludCBtb2RlKQotI2Vsc2UKLWtzdHJlYW1fc2V0 X2J1ZmZlcl9tb2RlKG1vZGUpIGludCBtb2RlOwotI2VuZGlmCi17Ci19Ci0KLQotaW50Ci0jaWZk ZWYgQ0tfQU5TSUMKLWtzdHJlYW1fY3JlYXRlX2Zyb21fZmQoaW50IGZkLAotICAgICAgICAgICAg ICAgICAgICAgICBrc3RyZWFtX3B0ciBkYXRhKQotI2Vsc2UKLWtzdHJlYW1fY3JlYXRlX2Zyb21f ZmQoZmQsZGF0YSkKLSAgICBpbnQgZmQ7IGtzdHJlYW1fcHRyIGRhdGE7Ci0jZW5kaWYKLXsKLSAg ICBpbnQgbjsKLQotICAgIGdfa3N0cmVhbSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGtzdHJlYW1f aW50KSk7Ci0gICAgaWYgKGdfa3N0cmVhbSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gMDsKLQot ICAgIGdfa3N0cmVhbS0+ZmQgPSBmZDsKLQotICAgIG4gPSBhdXRoX2luaXQoZ19rc3RyZWFtKTsg ICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBhdXRob3JpemluZyAqLwotICAgIGlmIChu KSB7Ci0gICAgICAgIGZyZWUoZ19rc3RyZWFtKTsKLSAgICAgICAgZ19rc3RyZWFtID0gTlVMTDsK LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgZ19rc3RyZWFtLT5lbmNyeXB0ID0gTlVM TDsKLSAgICBnX2tzdHJlYW0tPmRlY3J5cHQgPSBOVUxMOwotICAgIGdfa3N0cmVhbS0+ZW5jcnlw dF90eXBlID0gRU5DVFlQRV9BTlk7Ci0gICAgZ19rc3RyZWFtLT5kZWNyeXB0X3R5cGUgPSBFTkNU WVBFX0FOWTsKLSAgICByZXR1cm4gMTsKLX0KLQotI2lmZGVmIENLX0tFUkJFUk9TCi0jaWZkZWYg UkxPR0NPREUKLXN0YXRpYyBpbnQgZG9fbGVuY2hlY2ssIHVzZV9pdmVjczsKLWV4dGVybiBpbnQg cmxvZ19pbmJhbmQ7Ci0KLSNpZmRlZiBLUkI1Ci12b2lkCi1yY21kX3N0cmVhbV9pbml0X2tyYjUo aW5fa2V5YmxvY2ssIGVuY3J5cHRfZmxhZywgbGVuY2hlY2ssIGFtX2NsaWVudCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgIHByb3RvbnVtKQotICAgICBrcmI1X2tleWJsb2NrICppbl9rZXli bG9jazsKLSAgICAgaW50IGVuY3J5cHRfZmxhZzsKLSAgICAgaW50IGxlbmNoZWNrOwotICAgICBp bnQgYW1fY2xpZW50OwotICAgICBlbnVtIGtyYjVfa2NtZF9wcm90byBwcm90b251bTsKLXsKLSAg ICBrcmI1X2Vycm9yX2NvZGUgc3RhdHVzOwotICAgIHNpemVfdCBibG9ja3NpemU7Ci0KLSAgICBp ZiAoIWVuY3J5cHRfZmxhZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGVzaW5idWYuZGF0YSA9 IGRlc19pbmJ1ZjsKLSAgICBkZXNvdXRidWYuZGF0YSA9IGRlc19vdXRwa3QrNDsgICAgICAvKiBT ZXQgdXAgZGVzIGJ1ZmZlcnMgKi8KLSAgICBrNV9zZXNzaW9uX2tleSA9IGluX2tleWJsb2NrOwot Ci0gICAgZG9fbGVuY2hlY2sgPSBsZW5jaGVjazsKLQotICAgIGlmICggcHJvdG9udW0gPT0gS0NN RF9PTERfUFJPVE9DT0wgKSB7Ci0gICAgICAgIHVzZV9pdmVjcyA9IDA7Ci0gICAgICAgIHJldHVy bjsKLSAgICB9Ci0KLSAgICB1c2VfaXZlY3MgPSAxOwotCi0gICAgaWYgKHN0YXR1cyA9IGtyYjVf Y19ibG9ja19zaXplKGs1X2NvbnRleHQsIGs1X3Nlc3Npb25fa2V5LT5lbmN0eXBlLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYmxvY2tzaXplKSkgewotICAgICAgICAvKiBY WFggd2hhdCBkbyBJIGRvPyAqLwotICAgICAgICBwcmludGYoImZhdGFsIGtlcmJlcm9zIDUgY3J5 cHRvIGxpYnJhcnkgZXJyb3JcbiIpOwotICAgICAgICB0dGNsb3MoMCk7Ci0gICAgICAgIHJldHVy bjsKLSAgICB9Ci0KLSAgICBlbmNpdmVjX2lbMF0ubGVuZ3RoID0gZW5jaXZlY19pWzFdLmxlbmd0 aCA9IAotICAgIGVuY2l2ZWNfb1swXS5sZW5ndGggPSBlbmNpdmVjX29bMV0ubGVuZ3RoID0gYmxv Y2tzaXplOwotCi0gICAgaWYgKChlbmNpdmVjX2lbMF0uZGF0YSA9IG1hbGxvYyhlbmNpdmVjX2lb MF0ubGVuZ3RoICogNCkpID09IE5VTEwpIHsKLSAgICAgICAgLyogWFhYIHdoYXQgZG8gSSBkbz8g Ki8KLSAgICAgICAgcHJpbnRmKCJmYXRhbCBtYWxsb2MgZmFpbGVkXG4iKTsKLSAgICAgICAgdHRj bG9zKDApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZW5jaXZlY19pWzFdLmRhdGEg PSBlbmNpdmVjX2lbMF0uZGF0YSArIGVuY2l2ZWNfaVswXS5sZW5ndGg7Ci0gICAgZW5jaXZlY19v WzBdLmRhdGEgPSBlbmNpdmVjX2lbMV0uZGF0YSArIGVuY2l2ZWNfaVsxXS5sZW5ndGg7Ci0gICAg ZW5jaXZlY19vWzFdLmRhdGEgPSBlbmNpdmVjX29bMF0uZGF0YSArIGVuY2l2ZWNfb1swXS5sZW5n dGg7Ci0KLSAgICAvKiBpcyB0aGVyZSBhIGJldHRlciB3YXkgdG8gaW5pdGlhbGl6ZSB0aGlzPyAq LwotICAgIG1lbXNldChlbmNpdmVjX2lbMF0uZGF0YSwgYW1fY2xpZW50LCBibG9ja3NpemUpOwot ICAgIG1lbXNldChlbmNpdmVjX29bMF0uZGF0YSwgMSAtIGFtX2NsaWVudCwgYmxvY2tzaXplKTsK LSAgICBtZW1zZXQoZW5jaXZlY19pWzFdLmRhdGEsIDIgfCBhbV9jbGllbnQsIGJsb2Nrc2l6ZSk7 Ci0gICAgbWVtc2V0KGVuY2l2ZWNfb1sxXS5kYXRhLCAyIHwgKDEgLSBhbV9jbGllbnQpLCBibG9j a3NpemUpOwotfQotI2VuZGlmIC8qIEtSQjUgKi8KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWNr X2tyYl9ybG9naW4oQ0hBUiAqIGhvc3RuYW1lLCBpbnQgcG9ydCwKLSAgICAgICAgICAgICAgIENI QVIgKiBsb2NhbHVzZXIsIENIQVIgKiByZW1vdGV1c2VyLCBDSEFSICogdGVybV9zcGVlZCwKLSAg ICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqIGxfYWRkciwgc3RydWN0IHNvY2thZGRy X2luICogcl9hZGRyLAotICAgICAgICAgICAgICAgaW50IGt2ZXJzaW9uLCBpbnQgZW5jcnlwdF9m bGFnKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLWNrX2tyYl9ybG9naW4oaG9zdG5hbWUsIHBvcnQs Ci0gICAgICAgICAgICAgICBsb2NhbHVzZXIsIHJlbW90ZXVzZXIsIHRlcm1fc3BlZWQsIGxfYWRk ciwgcl9hZGRyLCBlbmNyeXB0X2ZsYWcpCi0gICAgQ0hBUiAqIGhvc3RuYW1lOyBpbnQgcG9ydDsK LSAgICBDSEFSICogbG9jYWx1c2VyOyBDSEFSICogcmVtb3RldXNlcjsgQ0hBUiAqIHRlcm1fc3Bl ZWQ7Ci0gICAgc3RydWN0IHNvY2thZGRyX2luICogbF9hZGRyOyBzdHJ1Y3Qgc29ja2FkZHJfaW4g KiByX2FkZHI7Ci0gICAgaW50IGt2ZXJzaW9uOyBpbnQgZW5jcnlwdF9mbGFnOwotI2VuZGlmIC8q IENLX0FOU0lDICovCi17Ci0gICAgdW5zaWduZWQgbG9uZyBzdGF0dXM7Ci0gICAgY2hhciAqIHJl YWxtPU5VTEw7Ci0gICAgZXh0ZXJuIGludCB0dHlmZDsKLSAgICBpbnQgYzsKLSAgICBsb25nIG1z Z2xlbjsKLQotICAgIGRlYnVnKEYxMTEsImNrX2tyYl9ybG9naW4iLGhvc3RuYW1lLHBvcnQpOwot Ci0gICAgaWYgKCBrdmVyc2lvbiA9PSA0ICYmICFja19rcmI0X2lzX2luc3RhbGxlZCgpICkgewot ICAgICAgICBwcmludGYoIj9LZXJiZXJvcyA0IGlzIG5vdCBpbnN0YWxsZWRcclxuIik7Ci0gICAg ICAgIHJldHVybigtMSk7Ci0gICAgfSBlbHNlIGlmICgga3ZlcnNpb24gPT0gNSAmJiAhY2tfa3Ji NV9pc19pbnN0YWxsZWQoKSApIHsKLSAgICAgICAgcHJpbnRmKCI/S2VyYmVyb3MgNSBpcyBub3Qg aW5zdGFsbGVkXHJcbiIpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLQotICAgIGlmICgg ZW5jcnlwdF9mbGFnICYmICFja19jcnlwdF9pc19pbnN0YWxsZWQoKSApIHsKLSAgICAgICAgcHJp bnRmKCI/RW5jcnlwdGlvbiBpcyBub3QgaW5zdGFsbGVkXHJcbiIpOwotICAgICAgICByZXR1cm4o LTEpOwotICAgIH0KLQotICAgIGlmICgga3ZlcnNpb24gPT0gNSApIHsKLSNpZmRlZiBLUkI1Ci0g ICAgICAgIGtyYjVfZmxhZ3MgYXV0aG9wdHM9MDsKLSAgICAgICAga3JiNV9jY2FjaGUgY2NhY2hl PU5VTEw7Ci0gICAgICAgIGNoYXIgKmNrc3VtYnVmPU5VTEw7Ci0gICAgICAgIGNoYXIgKnNlcnZp Y2U9TlVMTDsKLSAgICAgICAgY2hhciAqIGtjbWRfdmVyc2lvbj1OVUxMOwotICAgICAgICBlbnVt IGtyYjVfa2NtZF9wcm90byB1c2VfcHJvdG87Ci0gICAgICAgIGtyYjVfZGF0YSBja3N1bWRhdDsK LSAgICAgICAga3JiNV9jcmVkcyAqZ2V0X2NyZWQgPSAwOwotICAgICAgICBrcmI1X2Vycm9yX2Nv ZGUgc3RhdHVzOwotICAgICAgICBrcmI1X2Vycm9yICAgICAgKmVycm9yID0gMDsKLSAgICAgICAg a3JiNV9hcF9yZXBfZW5jX3BhcnQgKnJlcF9yZXQgPSBOVUxMOwotICAgICAgICBrcmI1X2RhdGEg b3V0YnVmOwotICAgICAgICBpbnQgcmM7Ci0gICAgICAgIGtyYjVfaW50MzIgc2Vxbm89MDsKLSAg ICAgICAga3JiNV9pbnQzMiBzZXJ2ZXJfc2Vxbm89MDsKLSAgICAgICAgY2hhciAqKiByZWFsbWxp c3Q9TlVMTDsKLSAgICAgICAgaW50IGJ1ZmxlbjsKLSAgICAgICAgY2hhciB0Z3RbMjU2XTsKLQot ICAgICAgICBkZWJ1ZyhGMTAwLCJja19rcmJfcmxvZ2luIHZlcnNpb24gNSIsIiIsMCk7Ci0KLSAg ICAgICAgcmVhbG0gPSBja19rcmI1X3JlYWxtb2Zob3N0KChjaGFyICopaG9zdG5hbWUpOwotICAg ICAgICBpZiAoIXJlYWxtKSB7Ci0gICAgICAgICAgICBja3N0cm5jcHkoc3RyVG1wLCAiQ2FuJ3Qg ZmluZCByZWFsbSBmb3IgaG9zdCBcIiIsQVVUSFRNUEJMKTsKLSAgICAgICAgICAgIGNrc3RybmNh dChzdHJUbXAsIChjaGFyICopaG9zdG5hbWUsQVVUSFRNUEJMKTsKLSAgICAgICAgICAgIGNrc3Ry bmNhdChzdHJUbXAsICJcIiIsQVVUSFRNUEJMKTsKLSAgICAgICAgICAgIHByaW50ZigiP0tlcmJl cm9zIDUgZXJyb3I6ICVzXHJcbiIsc3RyVG1wKTsKLSAgICAgICAgICAgIGtyYjVfZXJybm8gPSBL UkI1X0VSUl9IT1NUX1JFQUxNX1VOS05PV047Ci0gICAgICAgICAgICBtYWtlc3RyKCZrcmI1X2Vy cm1zZyxzdHJUbXApOwotICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICB9Ci0KLSAgICAg ICAgY2ttYWttc2codGd0LHNpemVvZih0Z3QpLCJrcmJ0Z3QvIixyZWFsbSwiQCIscmVhbG0pOwot ICAgICAgICBkZWJ1ZyhGMTEwLCJja19ybG9nX3Jsb2dpbiBUR1QiLHRndCwwKTsKLSAgICAgICAg aWYgKCBrcmI1X2F1dG9nZXQgJiYKLSAgICAgICAgICAgICAhKChja19rcmI1X3RrdF9pc3ZhbGlk KE5VTEwsdGd0KSA+IDApIHx8Ci0gICAgICAgICAgICAgICAgKGNrX2tyYjVfaXNfdGd0X3ZhbGlk KCkgPiAwKSkgKQotICAgICAgICAgICAgY2tfa3JiNV9hdXRvZ2V0X1RHVChyZWFsbSk7Ci0KLSAg ICAgICAgYnVmbGVuID0gc3RybGVuKChjaGFyICopdGVybV9zcGVlZCkgKyBzdHJsZW4oKGNoYXIg KilyZW1vdGV1c2VyKSArIDY0OwotICAgICAgICBpZiAoKGNrc3VtYnVmID0gbWFsbG9jKGJ1Zmxl bikpID09IDApIHsKLSAgICAgICAgICAgIHByaW50ZigiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9y eSBmb3IgY2hlY2tzdW0gYnVmZmVyLlxyXG4iKTsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0g ICAgICAgIH0KLSAgICAgICAgY2ttYWttc2coY2tzdW1idWYsYnVmbGVuLGNrdWl0b2EoKHVuc2ln bmVkIHNob3J0KSBudG9ocyhwb3J0KSksIjoiLAotCQkgKGNoYXIgKil0ZXJtX3NwZWVkLChjaGFy ICopcmVtb3RldXNlcik7Ci0gICAgICAgIGNrc3VtZGF0LmRhdGEgPSBja3N1bWJ1ZjsKLSAgICAg ICAgY2tzdW1kYXQubGVuZ3RoID0gc3RybGVuKGNrc3VtYnVmKTsKLQotICAgICAgICBzdGF0dXMg PSBrcmI1X2luaXRfY29udGV4dCgmazVfY29udGV4dCk7Ci0gICAgICAgIGlmIChzdGF0dXMpIHsK LSAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX2tyYl9ybG9naW4oKSIsInVuYWJsZSB0byBpbml0 X2NvbnRleHQiLDApOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotCi0gICAg ICAgIGRlc2luYnVmLmRhdGEgPSBkZXNfaW5idWY7Ci0gICAgICAgIGRlc291dGJ1Zi5kYXRhID0g ZGVzX291dHBrdCs0OyAgLyogU2V0IHVwIGRlcyBidWZmZXJzICovCi0KLSAgICAgICAgcmMgPSBr NV9nZXRfY2NhY2hlKGs1X2NvbnRleHQsJmNjYWNoZSxOVUxMKTsKLSAgICAgICAgaWYgKHJjICE9 IDApIHsKLSAgICAgICAgICAgIGNvbV9lcnIoTlVMTCwgcmMsICJ3aGlsZSBnZXR0aW5nIGNjYWNo ZS4iKTsKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgfQotCi0gICAgICAgIHNlcnZp Y2UgPSBrcmI1X2Rfc3J2ID8ga3JiNV9kX3NydiA6IEtSQjVfU0VSVklDRV9OQU1FOwotCi0gICAg ICAgIGlmICghKGdldF9jcmVkID0gKGtyYjVfY3JlZHMgKiljYWxsb2MoMSwgc2l6ZW9mKGtyYjVf Y3JlZHMpKSkpIHsKLSAgICAgICAgICAgIHByaW50ZigiY2tfa3JiX3Jsb2dpbjogbm8gbWVtb3J5 XHJcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAgICAgICBtZW1z ZXQoZ2V0X2NyZWQsMCxzaXplb2Yoa3JiNV9jcmVkcykpOwotICAgICAgICBzdGF0dXMgPSBrcmI1 X3NuYW1lX3RvX3ByaW5jaXBhbChrNV9jb250ZXh0LCAoY2hhciAqKSBob3N0bmFtZSwKLQkJCQkJ IHNlcnZpY2UsIEtSQjVfTlRfU1JWX0hTVCwKLQkJCQkJICZnZXRfY3JlZC0+c2VydmVyKTsKLSAg ICAgICAgaWYgKHN0YXR1cykgewotICAgICAgICAgICAgcHJpbnRmKCJja19rcmJfcmxvZ2luOiBr cmI1X3NuYW1lX3RvX3ByaW5jaXBhbCBmYWlsZWQ6ICVzXHJcbiIsCi0gICAgICAgICAgICAgICAg ICAgICBlcnJvcl9tZXNzYWdlKHN0YXR1cykpOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAg ICAgICAgfQotCi0gICAgICAgIHR0b2MoMCk7Ci0KLSAgICAgICAgaWYgKHN0YXR1cyA9IGtyYjVf Y2NfZ2V0X3ByaW5jaXBhbChrNV9jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNjYWNoZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmZ2V0X2NyZWQtPmNsaWVudCkKLSAgICAgICAgICAgICkgewotICAgICAgICAg ICAgKHZvaWQpIGtyYjVfY2NfY2xvc2UoazVfY29udGV4dCwgY2NhY2hlKTsKLSAgICAgICAgICAg IGtyYjVfZnJlZV9jcmVkcyhrNV9jb250ZXh0LCBnZXRfY3JlZCk7Ci0gICAgICAgICAgICBnb3Rv IGJhZDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChrcmI1X3Jsb2dfdmVyID09IEtDTURfT0xE X1BST1RPQ09MKQotICAgICAgICAgICAgZ2V0X2NyZWQtPmtleWJsb2NrLmVuY3R5cGU9RU5DVFlQ RV9ERVNfQ0JDX0NSQzsKLQotICAgICAgICAvKiBHZXQgdGlja2V0IGZyb20gY3JlZGVudGlhbHMg Y2FjaGUgb3Iga2RjICovCi0gICAgICAgIHN0YXR1cyA9IGtyYjVfZ2V0X2NyZWRlbnRpYWxzKGs1 X2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNjYWNoZSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2NyZWQsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZyZXRfY3JlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwotICAgICAgICBrcmI1X2ZyZWVfY3JlZHMoazVfY29udGV4dCwgZ2V0X2NyZWQp OwotICAgICAgICBnZXRfY3JlZCA9IE5VTEw7Ci0gICAgICAgICh2b2lkKSBrcmI1X2NjX2Nsb3Nl KGs1X2NvbnRleHQsIGNjYWNoZSk7Ci0KLSAgICAgICAgaWYgKHN0YXR1cykgCi0gICAgICAgICAg ICBnb3RvIGJhZDsKLQotICAgICAgICAvKiBSZXNldCBpbnRlcm5hbCBmbGFnczsgdGhlc2Ugc2hv dWxkIG5vdCBiZSBzZXQuICovCi0gICAgICAgIGF1dGhvcHRzICY9ICh+T1BUU19GT1JXQVJEX0NS RURTKTsKLSAgICAgICAgYXV0aG9wdHMgJj0gKH5PUFRTX0ZPUldBUkRBQkxFX0NSRURTKTsKLQot ICAgICAgICBpZiAoa3JiNV9hdXRoX2Nvbl9pbml0KGs1X2NvbnRleHQsICZhdXRoX2NvbnRleHQp KQotICAgICAgICAgICAgZ290byBiYWQ7Ci0KLSAgICAgICAgaWYgKGtyYjVfYXV0aF9jb25fc2V0 ZmxhZ3MoazVfY29udGV4dCwgYXV0aF9jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgS1JCNV9BVVRIX0NPTlRFWFRfUkVUX1RJTUUpKQotICAgICAgICAgICAgZ290 byBiYWQ7Ci0KLSAgICAgICAgLyogT25seSBuZWVkIGxvY2FsIGFkZHJlc3MgZm9yIG1rX2NyZWQo KSB0byBzZW5kIHRvIGtybG9naW5kICovCi0gICAgICAgIGlmICgha3JiNV9kX25vX2FkZHJlc3Nl cykKLSAgICAgICAgICAgIGlmIChzdGF0dXMgPSBrcmI1X2F1dGhfY29uX2dlbmFkZHJzKGs1X2Nv bnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh dXRoX2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdHR5ZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtSQjVfQVVUSF9D T05URVhUX0dFTkVSQVRFX0xPQ0FMX0ZVTExfQUREUgotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICkpCi0gICAgICAgICAgICAgICAgZ290byBiYWQ7Ci0K LSAgICAgICAgLyogSGVyZSBpcyB3aGVyZSB3ZSBzdGFydCB0byBoYW5kbGUgdGhlIG5ldyBwcm90 b2NvbCBpbiBlYXJuZXN0ICovCi0gICAgICAgIGlmICgga3JiNV9ybG9nX3ZlciA9PSBLQ01EX1BS T1RPQ09MX0NPTVBBVF9IQUNLICkgewotICAgICAgICAgICAga3JiNV9ib29sZWFuIGlzX2RlczsK LQotICAgICAgICAgICAgaWYgKHN0YXR1cyA9IGtyYjVfY19lbmN0eXBlX2NvbXBhcmUoIGs1X2Nv bnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RU5DVFlQRV9ERVNfQ0JDX0NSQywKLSNpZmRlZiBIRUlNREFMCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0X2NyZWQtPnNlc3Npb24ua2V5dHlwZSwK LSNlbHNlIC8qIEhFSU1EQUwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZXRfY3JlZC0+a2V5YmxvY2suZW5jdHlwZSwKLSNlbmRpZiAvKiBIRUlN REFMICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JmlzX2RlcykpIHsKLSAgICAgICAgICAgICAgICBrcmI1X2ZyZWVfY3JlZHMoazVfY29udGV4dCwg cmV0X2NyZWQpOwotICAgICAgICAgICAgICAgIHJldF9jcmVkID0gTlVMTDsKLSAgICAgICAgICAg ICAgICBnb3RvIGJhZDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCBpc19kZXMg KSB7Ci0gICAgICAgICAgICAgICAga2NtZF92ZXJzaW9uID0gIktDTURWMC4xIjsKLSAgICAgICAg ICAgICAgICB1c2VfcHJvdG8gPSBLQ01EX09MRF9QUk9UT0NPTDsKLSAgICAgICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICAgICAgYXV0aG9wdHMgPSBBUF9PUFRTX1VTRV9TVUJLRVk7Ci0gICAg ICAgICAgICAgICAga2NtZF92ZXJzaW9uID0gIktDTURWMC4yIjsKLSAgICAgICAgICAgICAgICB1 c2VfcHJvdG8gPSBLQ01EX05FV19QUk9UT0NPTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgIHVzZV9wcm90byA9IGtyYjVfcmxvZ192ZXI7Ci0gICAgICAgICAg ICBzd2l0Y2ggKCBrcmI1X3Jsb2dfdmVyICkgewotICAgICAgICAgICAgY2FzZSBLQ01EX05FV19Q Uk9UT0NPTDoKLSAgICAgICAgICAgICAgICBhdXRob3B0cyA9IEFQX09QVFNfVVNFX1NVQktFWTsK LSAgICAgICAgICAgICAgICBrY21kX3ZlcnNpb24gPSAiS0NNRFYwLjIiOwotICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBLQ01EX09MRF9QUk9UT0NPTDoKLSAgICAgICAg ICAgICAgICBrY21kX3ZlcnNpb24gPSAiS0NNRFYwLjEiOwotICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBnb3RvIGJhZDsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qIGNhbGwgS2VyYmVyb3MgbGlicmFyeSBy b3V0aW5lIHRvIG9idGFpbiBhbiBhdXRoZW50aWNhdG9yLAotICAgICAgICAgICBwYXNzIGl0IG92 ZXIgdGhlIHNvY2tldCB0byB0aGUgc2VydmVyLCBhbmQgb2J0YWluIG11dHVhbAotICAgICAgICAg ICBhdXRoZW50aWNhdGlvbi4KLSAgICAgICAgICovCi0gICAgICAgIHN0YXR1cyA9IGtyYjVfc2Vu ZGF1dGgoazVfY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXV0aF9j b250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrcmI1X3BvaW50ZXIpICZ0 dHlmZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrY21kX3ZlcnNpb24sCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0X2NyZWQtPmNsaWVudCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICByZXRfY3JlZC0+c2VydmVyLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhdXRob3B0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm Y2tzdW1kYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0X2NyZWQsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmZXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlcF9yZXQsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7Ci0gICAgICAgIGtyYjVfZnJlZV9kYXRhX2NvbnRlbnRzKGs1X2NvbnRleHQs JmNrc3VtZGF0KTsKLQotICAgICAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICAgICAgICBpZiAoICFx dWlldCApCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJDb3VsZG4ndCBhdXRoZW50aWNhdGUgdG8g c2VydmVyOiAlc1xyXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZShz dGF0dXMpKTsKLSAgICAgICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgICAgIGlmICgg IXF1aWV0ICkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIlNlcnZlciByZXR1cm5lZCBl cnJvciBjb2RlICVkICglcylcclxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLT5l cnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX21lc3NhZ2UoRVJST1JfVEFCTEVf QkFTRV9rcmI1ICsgZXJyb3ItPmVycm9yKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlcnJv ci0+dGV4dC5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3Ig dGV4dCBzZW50IGZyb20gc2VydmVyOiAlc1xyXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBlcnJvci0+dGV4dC5kYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBrcmI1X2ZyZWVfZXJyb3IoazVfY29udGV4dCwg ZXJyb3IpOwotICAgICAgICAgICAgICAgIGVycm9yID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIGdvdG8gYmFkOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlcF9yZXQpIHsKLSAg ICAgICAgICAgIHNlcnZlcl9zZXFubyA9IHJlcF9yZXQtPnNlcV9udW1iZXI7Ci0gICAgICAgICAg ICBrcmI1X2ZyZWVfYXBfcmVwX2VuY19wYXJ0KGs1X2NvbnRleHQsIHJlcF9yZXQpOwotICAgICAg ICB9Ci0KLSAgICAgICAgKHZvaWQpIHR0b2wocmVtb3RldXNlciwgc3RybGVuKChjaGFyICopcmVt b3RldXNlcikrMSk7Ci0gICAgICAgICh2b2lkKSB0dG9sKHRlcm1fc3BlZWQsIHN0cmxlbigoY2hh ciAqKXRlcm1fc3BlZWQpKzEpOwotICAgICAgICAodm9pZCkgdHRvbChsb2NhbHVzZXIsIHN0cmxl bigoY2hhciAqKWxvY2FsdXNlcikrMSk7Ci0KLSAgICAgICAgaWYgKGZvcndhcmRfZmxhZykgeyAg IC8qIEZvcndhcmQgY3JlZGVudGlhbHMgKGdsb2JhbCkgKi8KLSAgICAgICAgICAgIGlmIChzdGF0 dXMgPSBrcmI1X2Z3ZF90Z3RfY3JlZHMoIGs1X2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoX2NvbnRleHQsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKWhvc3RuYW1lLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0X2NyZWQtPmNsaWVudCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldF9jcmVkLT5zZXJ2 ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvcndhcmRhYmxlX2Zs YWcgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUFRT X0ZPUldBUkRBQkxFX0NSRURTIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmb3V0YnVmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApCi0gICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBw cmludGYoIkVycm9yIGZvcndhcmRpbmcgY3JlZGVudGlhbHM6ICVzXHJcbiIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZShzdGF0dXMpKTsKLSAgICAgICAgICAgICAgICBn b3RvIGJhZDI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qIFNlbmQgZm9yd2FyZGVk IGNyZWRlbnRpYWxzICovCi0gICAgICAgICAgICBzdGF0dXMgPSBrcmI1X3dyaXRlX21lc3NhZ2Uo azVfY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGty YjVfcG9pbnRlcikmdHR5ZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZvdXRidWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK LSAgICAgICAgfQotICAgICAgICBlbHNlIHsgLyogRHVtbXkgd3JpdGUgdG8gc2lnbmFsIG5vIGZv cndhcmRpbmcgKi8KLSAgICAgICAgICBiYWQyOgotICAgICAgICAgICAgb3V0YnVmLmxlbmd0aCA9 IDA7Ci0gICAgICAgICAgICBzdGF0dXMgPSBrcmI1X3dyaXRlX21lc3NhZ2UoazVfY29udGV4dCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtyYjVfcG9pbnRlcikm dHR5ZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRidWYp OwotICAgICAgICB9ICAgICAgIAotCi0gICAgICAgIGlmICgoYyA9IHR0aW5jKDApKSA8IDApIHsK LSAgICAgICAgICAgIGlmIChjPT0tMSkgewotICAgICAgICAgICAgICAgIHBlcnJvcigoY2hhciAq KWhvc3RuYW1lKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRm KCJja19rcmJfcmxvZ2luOiBiYWQgY29ubmVjdGlvbiB3aXRoIHJlbW90ZSBob3N0XHJcbiIpOwot ICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RhdHVzID0gLTE7Ci0gICAgICAgICAgICBnb3Rv IGJhZDsKLSAgICAgICAgfQotICAgICAgICBpZiAoYyAhPSAwKSB7Ci0gICAgICAgICAgICB3aGls ZSAoKGMgPSB0dGluYygxKSkgPj0gMCkgewotICAgICAgICAgICAgICAgICh2b2lkKSBwcmludGYo IiVjIixjKTsKLSAgICAgICAgICAgICAgICBpZiAoYyA9PSAnXG4nKQotICAgICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YXR1cyA9IC0xOwotICAg ICAgICAgICAgZ290byBiYWQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIHN0YXR1cyA9PSAw ICkgeyAgICAgICAgLyogc3VjY2VzcyAqLwotICAgICAgICAgICAga3JiNV9rZXlibG9jayAqIGtl eSA9IDA7Ci0KLSAgICAgICAgICAgIGlmICggdXNlX3Byb3RvID09IEtDTURfTkVXX1BST1RPQ09M ICkgewotICAgICAgICAgICAgICAgIGludCBvbiA9IDE7Ci0gICAgICAgICAgICAgICAgcmxvZ19p bmJhbmQgPSAxOwotICAgICAgICAgICAgICAgIHNldHNvY2tvcHQodHR5ZmQsIFNPTF9TT0NLRVQs IFNPX09PQklOTElORSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopICZvbiwg c2l6ZW9mIG9uKTsKLQotICAgICAgICAgICAgICAgIHN0YXR1cyA9IGtyYjVfYXV0aF9jb25fZ2V0 bG9jYWxzdWJrZXkoIGs1X2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9jb250ZXh0LAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXkpOwotICAgICAgICAgICAg ICAgIGlmICgoc3RhdHVzIHx8ICFrZXkpICYmIGVuY3J5cHRfZmxhZyApCi0gICAgICAgICAgICAg ICAgICAgIGdvdG8gYmFkMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgga2V5ID09 IDAgKSB7Ci0jaWZkZWYgSEVJTURBTAotICAgICAgICAgICAgICAgIGtleSA9ICZyZXRfY3JlZC0+ c2Vzc2lvbjsKLSNlbHNlIC8qIEhFSU1EQUwgKi8KLSAgICAgICAgICAgICAgICBrZXkgPSAmcmV0 X2NyZWQtPmtleWJsb2NrOwotI2VuZGlmIC8qIEhFSU1EQUwgKi8KLSAgICAgICAgICAgIH0KLQot ICAgICAgICAgICAgcmNtZF9zdHJlYW1faW5pdF9rcmI1KGtleSwgZW5jcnlwdF9mbGFnLCAxLCAx LCB1c2VfcHJvdG8pOwotICAgICAgICAgICAgaWYgKCBlbmNyeXB0X2ZsYWcgKQotICAgICAgICAg ICAgICAgIHJsb2dfZW5jcnlwdCA9IDE7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICgwKTsg ICAgIC8qIHN1Y2Nlc3MgKi8KLQotICAgICAgYmFkOgotICAgICAgICBpZiAoIHN0YXR1cyAmJiAh cXVpZXQgKSB7Ci0gICAgICAgICAgICBwcmludGYoIktlcmJlcm9zIGF1dGhlbnRpY2F0aW9uIGVy cm9yOiAlc1xyXG4iLAotICAgICAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlKHN0YXR1cykp OwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZXRfY3JlZCkgewotICAgICAgICAgICAga3JiNV9m cmVlX2NyZWRzKGs1X2NvbnRleHQsIHJldF9jcmVkKTsKLSAgICAgICAgICAgIHJldF9jcmVkID0g TlVMTDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKHN0YXR1cyk7Ci0jZWxzZSAvKiBLUkI1 ICovCi0gICAgICAgIHJldHVybigtMSk7Ci0jZW5kaWYgLyogS1JCNSAqLwotICAgIH0gZWxzZSBp ZiAoa3ZlcnNpb24gPT0gNCkgewotI2lmZGVmIEtSQjQKLSAgICAgICAgY2hhciB0Z3RbNCpSRUFM TV9TWisxXTsKLSAgICAgICAgZGVidWcoRjEwMCwiY2tfa3JiX3Jsb2dpbiB2ZXJzaW9uIDQiLCIi LDApOwotCi0gICAgICAgIHJlYWxtID0gKGNoYXIgKilrcmJfcmVhbG1vZmhvc3QoaG9zdG5hbWUp OwotICAgICAgICBpZiAoIXJlYWxtKSB7Ci0gICAgICAgICAgICBzdHJjcHkoc3RyVG1wLCAiQ2Fu J3QgZmluZCByZWFsbSBmb3IgaG9zdCBcIiIpOwotICAgICAgICAgICAgY2tzdHJuY2F0KHN0clRt cCwgaG9zdG5hbWUsQVVUSFRNUEJMKTsKLSAgICAgICAgICAgIGNrc3RybmNhdChzdHJUbXAsICJc IiIsQVVUSFRNUEJMKTsKLSAgICAgICAgICAgIHByaW50ZigiP0tlcmJlcm9zIDQgZXJyb3I6ICVz XHJcbiIsc3RyVG1wKTsKLSAgICAgICAgICAgIGtyYjRfZXJybm8gPSAwOwotICAgICAgICAgICAg bWFrZXN0cigma3JiNF9lcnJtc2csc3RyVG1wKTsKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAg ICAgICAgfQotCi0gICAgICAgIGNrbWFrbXNnKHRndCxzaXplb2YodGd0KSwia3JidGd0LiIscmVh bG0sIkAiLHJlYWxtKTsKLSAgICAgICAgc3RhdHVzID0gY2tfa3JiNF90a3RfaXN2YWxpZCh0Z3Qp OwotCi0gICAgICAgIGlmICggc3RhdHVzIDw9IDAgJiYga3JiNF9hdXRvZ2V0ICkKLSAgICAgICAg ICAgIGNrX2tyYjRfYXV0b2dldF9UR1QocmVhbG0pOwotCi0gICAgICAgIHR0b2MoMCk7ICAgICAg ICAvKiB3cml0ZSBhIE5VTCAqLwotCi0gICAgICAgIHN0YXR1cyA9IGtyYl9zZW5kYXV0aChlbmNy eXB0X2ZsYWc/S09QVF9ET19NVVRVQUw6MCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0dHlmZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmazRfYXV0aCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBrcmI0X2Rfc3J2ID8ga3JiNF9kX3NydiA6IEtSQjRf U0VSVklDRV9OQU1FLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RuYW1lLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxtLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSBnZXRwaWQoKSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmazRfbXNnX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJmNyZWQsCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZrNF9zY2hlZCwKLSNlbHNlIC8qIEVOQ1JZUFRJT04gKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBOVUxMLAotI2VuZGlmIC8qIEVOQ1JZUFRJT04gKi8KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsX2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcl9hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLQ01EVjAuMSIp OwotICAgICAgICBkZWJ1ZyhGMTExLCJja19rcmJfcmxvZ2luIiwia3JiX3NlbmRhdXRoIixzdGF0 dXMpOwotICAgICAgICBpZiAoc3RhdHVzICE9IEtTVUNDRVNTKSB7Ci0gICAgICAgICAgICBwcmlu dGYoICJrcmJfc2VuZGF1dGggZmFpbGVkOiAlc1xyXG4iLAotICAgICAgICAgICAgICAgICAgICBr cmJfZ2V0X2Vycl90ZXh0X2VudHJ5KHN0YXR1cykKLSAgICAgICAgICAgICAgICAgICAgKTsKLSAg ICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLSAgICAgICAgdHRvbChyZW1vdGV1c2Vy LHN0cmxlbihyZW1vdGV1c2VyKSsxKTsKLSAgICAgICAgdHRvbCh0ZXJtX3NwZWVkLHN0cmxlbih0 ZXJtX3NwZWVkKSsxKTsKLQotICAgICAgcmVyZWFkOgotICAgICAgICBpZiAoKGMgPSB0dGluYygw KSkgPCAwKSB7Ci0gICAgICAgICAgICBwcmludGYoInJjbWQ6IGJhZCBjb25uZWN0aW9uIHdpdGgg cmVtb3RlIGhvc3RcclxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0g ICAgICAgIGRlYnVnKEYxMTEsImNrX2tyYl9ybG9naW4iLCJmaXJzdCBieXRlIixjKTsKLQotICAg ICAgICBpZiAoYyAhPSAwKSB7Ci0gICAgICAgICAgICBjaGFyICpjaGVjayA9ICJsZC5zbzogd2Fy bmluZzoiOwotICAgICAgICAgICAgLyogSWYgcmxvZ2luZCB3YXMgY29tcGlsZWQgb24gU3VuT1M0 LCBhbmQgaXQgc29tZWhvdwotICAgICAgICAgICAgZ290IHRoZSBzaGFyZWQgbGlicmFyeSB2ZXJz aW9uIG51bWJlcnMgd3JvbmcsIGl0Ci0gICAgICAgICAgICBtYXkgZ2l2ZSBhbiBsZC5zbyB3YXJu aW5nIGFib3V0IGFuIG9sZCB2ZXJzaW9uIG9mIGEKLSAgICAgICAgICAgIHNoYXJlZCBsaWJyYXJ5 LiAgSnVzdCBpZ25vcmUgYW55IHN1Y2ggd2FybmluZy4KLSAgICAgICAgICAgIE5vdGUgdGhhdCB0 aGUgd2FybmluZyBpcyBhIGNoYXJhY3RlcmlzdGljIG9mIHRoZQotICAgICAgICAgICAgc2VydmVy OyB3ZSBtYXkgbm90IG91cnNlbHZlcyBiZSBydW5uaW5nIHVuZGVyCi0gICAgICAgICAgICBTdW5P UzQuICAqLwotICAgICAgICAgICAgaWYgKGMgPT0gJ2wnKSB7Ci0gICAgICAgICAgICAgICAgY2hh ciAqcDsKLSAgICAgICAgICAgICAgICBjaGFyIGNjOwotCi0gICAgICAgICAgICAgICAgcCA9ICZj aGVja1sxXTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoKGMgPSB0dGluYygwKSkgPj0gMCkgewot ICAgICAgICAgICAgICAgICAgICBpZiAoKnAgPT0gJ1wwJykgewotICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKGMgPT0gJ1xuJykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm IChjICE9ICpwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICAgICAgICAgICAgKytwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCpwID09ICdcMCcpCi0gICAgICAgICAgICAgICAg ICAgIGdvdG8gcmVyZWFkOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwcmludGYoY2hl Y2spOwotICAgICAgICAgICAgd2hpbGUgKChjID0gdHRpbmMoMSkpID49IDApIHsKLSAgICAgICAg ICAgICAgICBwcmludGYoIiVjIixjKTsKLSAgICAgICAgICAgICAgICBpZiAoYyA9PSAnXG4nKQot ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRl YnVnKEYxMTAsImNrX2tyYl9ybG9naW4iLCJmYXRhbCBlcnJvciAxIiwwKTsKLSAgICAgICAgICAg IHJldHVybigtMSk7Ci0gICAgICAgIH0KLQotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAg aWYgKCBlbmNyeXB0X2ZsYWcgKSB7Ci0gICAgICAgICAgICAvKiBpZiB3ZSBhcmUgZW5jcnlwdGlu ZyB3ZSBuZWVkIHRvIHNldHVwIHRoZSBlbmNyeXB0aW9uICovCi0gICAgICAgICAgICAvKiByb3V0 aW5lcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAg ICAgICAgICBkZXNfa2V5X3NjaGVkKGNyZWQuc2Vzc2lvbiwgazRfc2NoZWQpOwotICAgICAgICAg ICAgcmxvZ19lbmNyeXB0ID0gMTsKLSAgICAgICAgfQotI2VuZGlmIC8qIEVOQ1JZUFRJT04gKi8K LSNlbHNlIC8qIEtSQjQgKi8KLSAgICAgICAgcmV0dXJuKC0xKTsKLSNlbmRpZiAvKiBLUkI0ICov Ci0gICAgfQotICAgIHJldHVybigwKTsgLyogc3VjY2VzcyAqLwotfQotCi0jZGVmaW5lIFNSQU5E ICAgc3JhbmQKLSNkZWZpbmUgUkFORCAgICByYW5kCi0jZGVmaW5lIFJBTkRfVFlQRSAgICAgICBp bnQKLQotc3RhdGljIGxvbmcKLXJhbmRvbV9jb25mb3VuZGVyKHNpemUsIGZpbGxpbikKLXNpemVf dCBzaXplOwotY2hhciAqIGZpbGxpbjsKLXsKLSAgICBzdGF0aWMgaW50IHNlZWRlZCA9IDA7Ci0g ICAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAqcmVhbF9maWxsOwotICAgIFJBTkRfVFlQRSAgIHJ2 YWw7Ci0KLSAgICBpZiAoIXNlZWRlZCkgewotICAgICAgICAvKiB0aW1lKCkgZGVmaW5lZCBpbiA0 LjEyLjIuNCwgYnV0IHJldHVybnMgYSB0aW1lX3QsIHdoaWNoIGlzIGFuCi0gICAgICAgICAgICJh cml0aG1ldGljIHR5cGUiICg0LjEyLjEpICovCi0gICAgICAgIHJ2YWwgPSAoUkFORF9UWVBFKSB0 aW1lKDApOwotICAgICAgICBTUkFORChydmFsKTsKLSAgICAgICAgcnZhbCA9IFJBTkQoKTsKLSAg ICAgICAgcnZhbCBePSBnZXRwaWQoKTsKLSAgICAgICAgU1JBTkQocnZhbCk7Ci0gICAgICAgIHNl ZWRlZCA9IDE7Ci0gICAgfQotCi0gICAgcmVhbF9maWxsID0gKHVuc2lnbmVkIGNoYXIgKilmaWxs aW47Ci0gICAgd2hpbGUgKHNpemUgPiAwKSB7Ci0gICAgICAgIHJ2YWwgPSBSQU5EKCk7Ci0gICAg ICAgICpyZWFsX2ZpbGwgPSBydmFsICYgMHhmZjsKLSAgICAgICAgcmVhbF9maWxsKys7Ci0gICAg ICAgIHNpemUtLTsKLSAgICAgICAgaWYgKHNpemUpIHsKLSAgICAgICAgICAgICpyZWFsX2ZpbGwg PSAocnZhbCA+PiA4KSAmIDB4ZmY7Ci0gICAgICAgICAgICByZWFsX2ZpbGwrKzsKLSAgICAgICAg ICAgIHNpemUtLTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotI2lmZGVm IEtSQjUKLWludAota3JiNV9kZXNfYXZhaWwoZmQpCi0gICAgaW50IGZkOwotewotICAgIHJldHVy bihuc3RvcmVkKTsKLX0KLQotaW50Ci1rcmI1X2Rlc19yZWFkKGZkLCBidWYsIGxlbiwgc2Vjb25k YXJ5KQotICAgIGludCBmZDsKLSAgICByZWdpc3RlciBjaGFyICpidWY7Ci0gICAgaW50IGxlbjsK LSAgICBpbnQgc2Vjb25kYXJ5OwotewotICAgIGludCBucmV0dXJuZWQgPSAwOwotICAgIGxvbmcg bmV0X2xlbixyZF9sZW47Ci0gICAgaW50IGNjOwotICAgIGtyYjVfZXJyb3JfY29kZSBzdGF0dXM7 Ci0gICAgdW5zaWduZWQgY2hhciBjOwotICAgIGtyYjVfZGF0YSBwbGFpbjsKLSAgICBrcmI1X2Vu Y19kYXRhIGNpcGhlcjsKLQotICAgIGRlYnVnKEYxMTEsImtyYjVfZGVzX3JlYWQiLCJsZW4iLGxl bik7Ci0gICAgZGVidWcoRjExMSwia3JiNV9kZXNfcmVhZCIsInJsb2dfZW5jcnlwdCIscmxvZ19l bmNyeXB0KTsKLSAgICBpZiAoICFybG9nX2VuY3J5cHQgKSB7Ci0gICAgICAgIGNjID0gbmV0X3Jl YWQoZmQsIGJ1ZiwgbGVuKTsKLSAgICAgICAgZGVidWcoRjExMSwia3JiNV9kZXNfcmVhZCIsImNo YXJzIHJlYWQiLGNjKTsKLSAgICAgICAgaWYgKCBjYyA8IDAgKQotICAgICAgICAgICAgbmV0Y2xv cygpOwotICAgICAgICByZXR1cm4oY2MpOwotICAgIH0KLQotICAgIGlmIChuc3RvcmVkID49IGxl bikgewotICAgICAgICBpZiAoIGJ1ZiApIHsKLSAgICAgICAgICAgIG1lbWNweShidWYsIHN0b3Jl X3B0ciwgbGVuKTsgICAgICAgIC8qIHNhZmUgKi8KLSAgICAgICAgICAgIHN0b3JlX3B0ciArPSBs ZW47Ci0gICAgICAgICAgICBuc3RvcmVkIC09IGxlbjsKLSAgICAgICAgICAgIHJldHVybihsZW4p OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICB9IGVsc2UgaWYg KG5zdG9yZWQpIHsKLSAgICAgICAgaWYgKCBidWYgKSB7Ci0gICAgICAgICAgICBtZW1jcHkoYnVm LCBzdG9yZV9wdHIsIG5zdG9yZWQpOyAgICAvKiBzYWZlICovCi0gICAgICAgICAgICBucmV0dXJu ZWQgKz0gbnN0b3JlZDsKLSAgICAgICAgICAgIGJ1ZiArPSBuc3RvcmVkOwotICAgICAgICAgICAg bGVuIC09IG5zdG9yZWQ7Ci0gICAgICAgICAgICBuc3RvcmVkID0gMDsKLSAgICAgICAgfQotICAg ICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotCi0gICAgLyogU2VlIHRo ZSBjb21tZW50IGluIHY0X2Rlc19yZWFkLiAqLwotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIGNj ID0gbmV0X3JlYWQoZmQsICZjLCAxKTsKLSAgICAgICAgLyogd2Ugc2hvdWxkIGNoZWNrIGZvciBu b24tYmxvY2tpbmcgaGVyZSwgYnV0IHdlJ2QgaGF2ZQotICAgICAgICB0byBtYWtlIGl0IHNhdmUg cGFydGlhbCByZWFkcyBhcyB3ZWxsLiAqLwotICAgICAgICBpZiAoY2MgPD0gMCkgewotICAgICAg ICAgICAgcmV0dXJuIGNjOyAvKiByZWFkIGVycm9yICovCi0gICAgICAgIH0KLSAgICAgICAgaWYg KGNjID09IDEpIHsKLSAgICAgICAgICAgIGlmIChjID09IDAgfHwgIWRvX2xlbmNoZWNrKSAKLSAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJkX2xlbiA9IGM7 Ci0gICAgaWYgKChjYyA9IG5ldF9yZWFkKGZkLCAmYywgMSkpICE9IDEpIHJldHVybiAwOwotICAg IHJkX2xlbiA9IChyZF9sZW4gPDwgOCkgfCBjOwotICAgIGlmICgoY2MgPSBuZXRfcmVhZChmZCwg JmMsIDEpKSAhPSAxKSByZXR1cm4gMDsKLSAgICByZF9sZW4gPSAocmRfbGVuIDw8IDgpIHwgYzsK LSAgICBpZiAoKGNjID0gbmV0X3JlYWQoZmQsICZjLCAxKSkgIT0gMSkgcmV0dXJuIDA7Ci0gICAg cmRfbGVuID0gKHJkX2xlbiA8PCA4KSB8IGM7Ci0KLSAgICBpZiAoc3RhdHVzID0ga3JiNV9jX2Vu Y3J5cHRfbGVuZ3RoKGs1X2NvbnRleHQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgazVfc2Vzc2lvbl9rZXktPmVuY3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1c2VfaXZlY3MgPyByZF9sZW4gKyA0IDogcmRfbGVuLAotCQkJCSAgICAoc2l6 ZV90ICopJm5ldF9sZW4pKSB7Ci0gICAgICAgIGVycm5vID0gc3RhdHVzOwotICAgICAgICByZXR1 cm4oLTEpOwotICAgIH0KLQotICAgIGlmICgobmV0X2xlbiA8PSAwKSB8fCAobmV0X2xlbiA+IHNp emVvZihkZXNfaW5idWYpKSkgewotICAgICAgICAvKiBwcmVwb3N0ZXJvdXMgbGVuZ3RoOyBhc3N1 bWUgb3V0LW9mLXN5bmM7IG9ubHkKLSAgICAgICAgICAgcmVjb3Vyc2UgaXMgdG8gY2xvc2UgY29u bmVjdGlvbiwgc28gcmV0dXJuIDAgKi8KLSAgICAgICAgcHJpbnRmKCJSZWFkIHNpemUgcHJvYmxl bS5cclxuIik7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0gICAgaWYgKChjYyA9IG5ldF9y ZWFkKGZkLCBkZXNpbmJ1Zi5kYXRhLCBuZXRfbGVuKSkgIT0gbmV0X2xlbiApCi0gICAgewotICAg ICAgICAvKiBwaXBlIG11c3QgaGF2ZSBjbG9zZWQsIHJldHVybiAwICovCi0gICAgICAgIHByaW50 ZiggIlJlYWQgZXJyb3I6IGxlbmd0aCByZWNlaXZlZCAlZCAhPSBleHBlY3RlZCAlZC5cclxuIiwK LSAgICAgICAgICAgICAgICBjYywKLSAgICAgICAgICAgICAgICBuZXRfbGVuCi0gICAgICAgICAg ICAgICAgKTsKLSAgICAgICAgcmV0dXJuKGNjKTsKLSAgICB9Ci0KLQotICAgIC8qIGRlY3J5cHQg aW5mbyAqLwotICAgIGNpcGhlci5lbmN0eXBlID0gRU5DVFlQRV9VTktOT1dOOwotICAgIGNpcGhl ci5jaXBoZXJ0ZXh0Lmxlbmd0aCA9IG5ldF9sZW47Ci0gICAgY2lwaGVyLmNpcGhlcnRleHQuZGF0 YSA9IGRlc2luYnVmLmRhdGE7Ci0gICAgcGxhaW4ubGVuZ3RoID0gc2l6ZW9mKHN0b3JhZ2UpOwot ICAgIHBsYWluLmRhdGEgPSBzdG9yYWdlOwotCi0gICAgaWYgKCBzdGF0dXMgPSBrcmI1X2NfZGVj cnlwdChrNV9jb250ZXh0LCBrNV9zZXNzaW9uX2tleSwgS0NNRF9LRVlVU0FHRSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9pdmVjcyA/IGVuY2l2ZWNfaSArIHNlY29uZGFy eSA6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNpcGhlciwmcGxhaW4p ICkgewotICAgICAgICAvKiBwcm9iYWJseSBvdXQgb2Ygc3luYyAqLwotICAgICAgICBwcmludGYo IkNhbm5vdCBkZWNyeXB0IGRhdGEgZnJvbSBuZXR3b3JrOiAlc1xyXG4iLAotICAgICAgICAgICAg ICAgICBlcnJvcl9tZXNzYWdlKHN0YXR1cykpOwotICAgICAgICBlcnJubyA9IEVJTzsKLSAgICAg ICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgCi0gICAgc3RvcmVfcHRyID0gc3RvcmFnZTsKLSAg ICBuc3RvcmVkID0gcmRfbGVuOwotCi0gICAgaWYgKCB1c2VfaXZlY3MgKSB7Ci0gICAgICAgIGlu dCByZF9sZW4yOwotICAgICAgICByZF9sZW4yID0gc3RvcmFnZVswXSAmIDB4ZmY7Ci0gICAgICAg IHJkX2xlbjIgPDw9IDg7IHJkX2xlbjIgfD0gc3RvcmFnZVsxXSAmIDB4ZmY7Ci0gICAgICAgIHJk X2xlbjIgPDw9IDg7IHJkX2xlbjIgfD0gc3RvcmFnZVsyXSAmIDB4ZmY7Ci0gICAgICAgIHJkX2xl bjIgPDw9IDg7IHJkX2xlbjIgfD0gc3RvcmFnZVszXSAmIDB4ZmY7Ci0gICAgICAgIGlmIChyZF9s ZW4yICE9IHJkX2xlbikgewotICAgICAgICAgICAgLyogY2xlYXJ0ZXh0IGxlbmd0aCB0cmFzaGVk PyAqLwotICAgICAgICAgICAgZXJybm8gPSBFSU87Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0g ICAgICAgIH0KLSAgICAgICAgc3RvcmVfcHRyICs9IDQ7Ci0gICAgfQotCi0gICAgaWYgKCAhYnVm ICkKLSAgICAgICAgcmV0dXJuKDApOwotCi0jaWZkZWYgUkxPR0NPREUgICAgICAgICAgICAgICAg ICAgICAgICAgLyogYmxhaCAqLwotICAgIGlmIChybG9nX2luYmFuZCAmJiAodHRucHJvdG8gPT0g TlBfSzVMT0dJTiB8fCB0dG5wcm90byA9PSBOUF9FSzVMT0dJTikpCi0gICAgewotICAgICAgICBp bnQgaSwgbGVmdCwgbjsKLQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnN0b3JlZDsgaSsrKSB7 Ci0gICAgICAgICAgICBpZiAoc3RvcmVfcHRyW2ldID09ICdcMzc3JyAmJgotICAgICAgICAgICAg ICAgIHN0b3JlX3B0cltpKzFdID09ICdcMzc3JykgewotICAgICAgICAgICAgICAgIGxlZnQgPSBu c3RvcmVkIC0gaTsKLSAgICAgICAgICAgICAgICBuID0gcmxvZ19jdHJsKCZzdG9yZV9wdHJbaV0s IGxlZnQpOwotICAgICAgICAgICAgICAgIGlmIChuIDwgMCkgewotICAgICAgICAgICAgICAgICAg ICBsZWZ0IC09ICgtbik7Ci0gICAgICAgICAgICAgICAgICAgIG5zdG9yZWQgPSBsZWZ0OwotICAg ICAgICAgICAgICAgICAgICAvKiBmbHVzaCBiZWZvcmUsIGFuZCAoLW4pIGJ5dGVzICovCi0gICAg ICAgICAgICAgICAgICAgIGlmIChsZWZ0ID4gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1l bW1vdmUoc3RvcmVfcHRyLCAmc3RvcmVfcHRyW2ktbl0sIGxlZnQpOwotICAgICAgICAgICAgICAg IH0gZWxzZSBpZiAobikgewotICAgICAgICAgICAgICAgICAgICBsZWZ0IC09IG47Ci0gICAgICAg ICAgICAgICAgICAgIG5zdG9yZWQgLT0gbjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxlZnQg PiAwKQotICAgICAgICAgICAgICAgICAgICAgICAgbWVtbW92ZShzdG9yZV9wdHIsICZzdG9yZV9w dHJbbl0sIGxlZnQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg fQotICAgIH0KLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotCi0gICAgaWYgKG5zdG9yZWQgPiBsZW4p IHsKLSAgICAgICAgbWVtY3B5KGJ1Ziwgc3RvcmVfcHRyLCBsZW4pOyAgICAgICAgICAgIC8qIHNh ZmUgKi8KLSAgICAgICAgbnJldHVybmVkICs9IGxlbjsKLSAgICAgICAgc3RvcmVfcHRyICs9IGxl bjsKLSAgICAgICAgbnN0b3JlZCAtPSBsZW47Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbWVtY3B5 KGJ1Ziwgc3RvcmVfcHRyLCBuc3RvcmVkKTsgICAgICAgIC8qIHNhZmUgKi8KLSAgICAgICAgbnJl dHVybmVkICs9IG5zdG9yZWQ7Ci0gICAgICAgIG5zdG9yZWQgPSAwOwotICAgIH0KLSAgICByZXR1 cm4obnJldHVybmVkKTsKLX0KLQotaW50Ci1rcmI1X2Rlc193cml0ZShmZCwgYnVmLCBsZW4sIHNl Y29uZGFyeSkKLSAgICBpbnQgZmQ7Ci0gICAgY2hhciAqYnVmOwotICAgIGludCBsZW47Ci0gICAg aW50IHNlY29uZGFyeTsKLXsKLSAgICBjaGFyIHRtcGJ1ZlsyKlJMT0dfQlVGU0laKzhdOwotICAg IHVuc2lnbmVkIGNoYXIgKmxlbl9idWYgPSAodW5zaWduZWQgY2hhciAqKSB0bXBidWY7Ci0gICAg a3JiNV9lcnJvcl9jb2RlIHN0YXR1czsKLSAgICBrcmI1X2RhdGEgcGxhaW47Ci0gICAga3JiNV9l bmNfZGF0YSBjaXBoZXI7Ci0KLSAgICBkZWJ1ZyhGMTExLCJrcmI1X2Rlc193cml0ZSIsInJsb2df ZW5jcnlwdCIscmxvZ19lbmNyeXB0KTsKLSAgICBpZiAoICFybG9nX2VuY3J5cHQgKSB7Ci0gICAg ICAgIGludCBjYyA9IG5ldF93cml0ZShmZCwgYnVmLCBsZW4pOwotICAgICAgICBkZWJ1ZyhGMTEx LCJuZXRfd3JpdGUiLCJjaGFycyB3cml0dGVuIixjYyk7Ci0gICAgICAgIHJldHVybihjYyAhPSBs ZW4gPyAtMSA6IGxlbik7Ci0gICAgfQotCi0gICAgaWYgKHVzZV9pdmVjcykgewotICAgICAgICB1 bnNpZ25lZCBjaGFyICpsZW5idWYyID0gKHVuc2lnbmVkIGNoYXIgKikgdG1wYnVmOwotICAgICAg ICBpZiAobGVuICsgNCA+IHNpemVvZih0bXBidWYpKQotICAgICAgICAgICAgYWJvcnQgKCk7Ci0g ICAgICAgIGxlbmJ1ZjJbMF0gPSAobGVuICYgMHhmZjAwMDAwMCkgPj4gMjQ7Ci0gICAgICAgIGxl bmJ1ZjJbMV0gPSAobGVuICYgMHhmZjAwMDApID4+IDE2OwotICAgICAgICBsZW5idWYyWzJdID0g KGxlbiAmIDB4ZmYwMCkgPj4gODsKLSAgICAgICAgbGVuYnVmMlszXSA9IChsZW4gJiAweGZmKTsK LSAgICAgICAgbWVtY3B5ICh0bXBidWYgKyA0LCBidWYsIGxlbik7Ci0KLSAgICAgICAgcGxhaW4u ZGF0YSA9IHRtcGJ1ZjsKLSAgICAgICAgcGxhaW4ubGVuZ3RoID0gbGVuICsgNDsKLSAgICB9IGVs c2UgewotICAgICAgICBwbGFpbi5kYXRhID0gYnVmOwotICAgICAgICBwbGFpbi5sZW5ndGggPSBs ZW47Ci0gICAgfQotCi0gICAgY2lwaGVyLmNpcGhlcnRleHQubGVuZ3RoID0gc2l6ZW9mKGRlc19v dXRwa3QpLTQ7Ci0gICAgY2lwaGVyLmNpcGhlcnRleHQuZGF0YSA9IGRlc291dGJ1Zi5kYXRhOwot Ci0gICAgaWYgKCBzdGF0dXMgPSBrcmI1X2NfZW5jcnlwdChrNV9jb250ZXh0LCBrNV9zZXNzaW9u X2tleSwgS0NNRF9LRVlVU0FHRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1c2VfaXZlY3Mg PyBlbmNpdmVjX28gKyBzZWNvbmRhcnkgOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICZw bGFpbiwgJmNpcGhlcikpIHsKLSAgICAgICAgcHJpbnRmKCJXcml0ZSBlbmNyeXB0IHByb2JsZW06 ICVzLlxyXG4iLAotICAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlKHN0YXR1cykpOwotICAg ICAgICBlcnJubyA9IEVJTzsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgZGVzb3V0 YnVmLmxlbmd0aCA9IGNpcGhlci5jaXBoZXJ0ZXh0Lmxlbmd0aDsKLQotICAgIGxlbl9idWYgPSAo dW5zaWduZWQgY2hhciAqKSBkZXNfb3V0cGt0OwotICAgIGxlbl9idWZbMF0gPSAobGVuICYgMHhm ZjAwMDAwMCkgPj4gMjQ7Ci0gICAgbGVuX2J1ZlsxXSA9IChsZW4gJiAweGZmMDAwMCkgPj4gMTY7 Ci0gICAgbGVuX2J1ZlsyXSA9IChsZW4gJiAweGZmMDApID4+IDg7Ci0gICAgbGVuX2J1ZlszXSA9 IChsZW4gJiAweGZmKTsKLQotICAgIGlmIChuZXRfd3JpdGUoZmQsIGRlc19vdXRwa3QsZGVzb3V0 YnVmLmxlbmd0aCs0KQotICAgICAgICAgIT0gZGVzb3V0YnVmLmxlbmd0aCs0KXsKLSAgICAgICAg cHJpbnRmKCJDb3VsZCBub3Qgd3JpdGUgb3V0IGFsbCBkYXRhXHJcbiIpOwotICAgICAgICByZXR1 cm4oLTEpOwotICAgIH0KLSAgICBlbHNlIHJldHVybihsZW4pOwotfQotI2VuZGlmIC8qIEtSQjUg Ki8KLQotI2lmZGVmIEtSQjQKLS8qCi0gKiBOb3RlIHRoYXQgdGhlIGVuY3J5cHRlZCBybG9naW4g cGFja2V0cyB0YWtlIHRoZSBmb3JtIG9mIGEgZm91ci1ieXRlCi0gKiBsZW5ndGggZm9sbG93ZWQg YnkgZW5jcnlwdGVkIGRhdGEuICBPbiB3cml0aW5nIHRoZSBkYXRhIG91dCwgYSBzaWduaWZpY2Fu dAotICogcGVyZm9ybWFuY2UgcGVuYWx0eSBpcyBzdWZmZXJlZCAoYXQgbGVhc3Qgb25lIFJUVCBw ZXIgY2hhcmFjdGVyLCB0d28gaWYgd2UKLSAqIGFyZSB3YWl0aW5nIGZvciBhIHNoZWxsIHRvIGVj aG8pIGJ5IHdyaXRpbmcgdGhlIGRhdGEgc2VwYXJhdGVseSBmcm9tIHRoZQotICogbGVuZ3RoLiAg U28sIHVubGlrZSB0aGUgaW5wdXQgYnVmZmVyLCB3aGljaCBqdXN0IGNvbnRhaW5zIHRoZSBvdXRw dXQKLSAqIGRhdGEsIHRoZSBvdXRwdXQgYnVmZmVyIHJlcHJlc2VudHMgdGhlIGVudGlyZSBwYWNr ZXQuCi0gKi8KLQotaW50Ci1rcmI0X2Rlc19hdmFpbChmZCkKLSAgICBpbnQgZmQ7Ci17Ci0gICAg cmV0dXJuKG5zdG9yZWQpOwotfQotCi1pbnQKLWtyYjRfZGVzX3JlYWQoZmQsIGJ1ZiwgbGVuKQot aW50IGZkOwotcmVnaXN0ZXIgY2hhciAqYnVmOwotaW50IGxlbjsKLXsKLSAgICBpbnQgbnJldHVy bmVkID0gMDsKLSAgICB1bnNpZ25lZCBsb25nIG5ldF9sZW4sIHJkX2xlbjsKLSAgICBpbnQgY2M7 Ci0gICAgdW5zaWduZWQgY2hhciBjOwotICAgIGludCBnb3R6ZXJvID0gMDsKLQotICAgIGRlYnVn KEYxMTEsImtyYjRfZGVzX3JlYWQiLCJybG9nX2VuY3J5cHQiLHJsb2dfZW5jcnlwdCk7Ci0gICAg ZGVidWcoRjExMSwia3JiNF9kZXNfcmVhZCIsImxlbiIsbGVuKTsKLSAgICBpZiAoICFybG9nX2Vu Y3J5cHQgKSB7Ci0gICAgICAgIGNjID0gbmV0X3JlYWQoZmQsIGJ1ZiwgbGVuKTsKLSAgICAgICAg ZGVidWcoRjExMSwia3JiNF9kZXNfcmVhZCIsImNoYXJzIHJlYWQiLGNjKTsKLSAgICAgICAgaWYg KCBjYyA8IDAgKQotICAgICAgICAgICAgbmV0Y2xvcygpOwotICAgICAgICByZXR1cm4oY2MpOwot ICAgIH0KLQotICAgIGlmIChuc3RvcmVkID49IGxlbikgewotICAgICAgICBpZiAoIGJ1ZiApIHsK LSAgICAgICAgICAgIGRlYnVnKEYxMTEsImtyYjRfZGVzX3JlYWQgKG5zdG9yZWQgPj0gbGVuKSIs Im5zdG9yZWQiLG5zdG9yZWQpOwotICAgICAgICAgICAgbWVtY3B5KGJ1Ziwgc3RvcmVfcHRyLCBs ZW4pOyAgICAgICAgLyogc2FmZSAqLwotICAgICAgICAgICAgc3RvcmVfcHRyICs9IGxlbjsKLSAg ICAgICAgICAgIG5zdG9yZWQgLT0gbGVuOwotICAgICAgICAgICAgcmV0dXJuKGxlbik7Ci0gICAg ICAgIH0gZWxzZQotICAgICAgICAgICAgcmV0dXJuKDApOwotICAgIH0gZWxzZSBpZiAobnN0b3Jl ZCkgewotICAgICAgICBpZiAoIGJ1ZiApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImtyYjRf ZGVzX3JlYWQgKG5zdG9yZWQpIiwibnN0b3JlZCIsbnN0b3JlZCk7Ci0gICAgICAgICAgICBtZW1j cHkoYnVmLCBzdG9yZV9wdHIsIG5zdG9yZWQpOyAgICAvKiBzYWZlICovCi0gICAgICAgICAgICBu cmV0dXJuZWQgKz0gbnN0b3JlZDsKLSAgICAgICAgICAgIGJ1ZiArPSBuc3RvcmVkOwotICAgICAg ICAgICAgbGVuIC09IG5zdG9yZWQ7Ci0gICAgICAgICAgICBuc3RvcmVkID0gMDsKLSAgICAgICAg fSBlbHNlCi0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotCi0gICAgLyogV2UncmUgZmV0 Y2hpbmcgdGhlIGxlbmd0aCB3aGljaCBpcyBNU0IgZmlyc3QsIGFuZCB0aGUgTVNCCi0gICAgaGFz IHRvIGJlIHplcm8gdW5sZXNzIHRoZSBjbGllbnQgaXMgc2VuZGluZyBtb3JlIHRoYW4gMl4yNAot ICAgICgxNk0pIGJ5dGVzIGluIGEgc2luZ2xlIHdyaXRlICh3aGljaCBpcyB3aHkgdGhpcyBjb2Rl IGlzIGluCi0gICAgcmxvZ2luIGJ1dCBub3QgcmNwIG9yIHJzaC4pIFRoZSBvbmx5IHJlYXNvbnMg d2UnZCBnZXQgc29tZXRoaW5nCi0gICAgb3RoZXIgdGhhbiB6ZXJvIGFyZToKLSAgICAtLSBjb3Jy dXB0aW9uIG9mIHRoZSB0Y3Agc3RyZWFtICh3aGljaCB3aWxsIHNob3cgdXAgd2hlbgotICAgIGV2 ZXJ5dGhpbmcgZWxzZSBpcyBvdXQgb2Ygc3luYyB0b28pCi0gICAgLS0gdW4tY2F1Z2h0IEJlcmtl bGV5LXN0eWxlICJwc2V1ZG8gb3V0LW9mLWJhbmQgZGF0YSIgd2hpY2gKLSAgICBoYXBwZW5zIGFu eSB0aW1lIHRoZSB1c2VyIGhpdHMgXkMgdHdpY2UuCi0gICAgVGhlIGxhdHRlciBpcyAqdmVyeSog Y29tbW9uLCBhcyBzaG93biBieSBhbiAncmxvZ2luIC14IC1kJwotICAgIHVzaW5nIHRoZSBDTlMg VjQgcmxvZ2luLiAgICAgICAgIE1hcmsgRUljaGluIDEvOTUKLSAgICAqLwotICAgIGRlYnVnKEYx MTAsImtyYjRfZGVzX3JlYWQiLAotICAgICAgICAgICJhYm91dCB0byBjYWxsIG5ldF9yZWFkKCkg dGhpcyB3aWxsIGJsb2NrIiwKLSAgICAgICAgICAwCi0gICAgICAgICAgKTsKLSAgICBkbyB7Ci0g ICAgICAgIGNjID0gbmV0X3JlYWQoZmQsICZjLCAxKTsKLSAgICAgICAgZGVidWcoRjExMSwibmV0 X3JlYWQiLCJjaGFycyByZWFkIixjYyk7Ci0gICAgICAgIGlmIChjYyA8PSAwKSB7Ci0gICAgICAg ICAgICBuZXRjbG9zKCk7Ci0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0gICAg ICAgIGlmIChjYyAhPSAxKSByZXR1cm4gMDsgLyogcmVhZCBlcnJvciAqLwotICAgICAgICBpZiAo Y2MgPT0gMSkgewotICAgICAgICAgICAgaWYgKGMgPT0gMCkgZ290emVybyA9IDE7Ci0gICAgICAg IH0KLSAgICB9IHdoaWxlICghZ290emVybyk7Ci0KLSAgICBkZWJ1ZyhGMTEwLCJrcmI0X2Rlc19y ZWFkIiwiZ290emVybyIsMCk7Ci0gICAgY2MgPSBuZXRfcmVhZChmZCwgJmMsIDEpOwotICAgIGRl YnVnKEYxMTEsIm5ldF9yZWFkIiwiY2hhcnMgcmVhZCIsY2MpOwotICAgIGlmIChjYyA8IDApIHsK LSAgICAgICAgbmV0Y2xvcygpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0gZWxzZSBpZiAo IGNjICE9IDEgKQotICAgICAgICByZXR1cm4oMCk7Ci0gICAgbmV0X2xlbiA9IGM7Ci0gICAgY2Mg PSBuZXRfcmVhZChmZCwgJmMsIDEpOwotICAgIGRlYnVnKEYxMTEsIm5ldF9yZWFkIiwiY2hhcnMg cmVhZCIsY2MpOwotICAgIGlmIChjYyA8IDApIHsKLSAgICAgICAgbmV0Y2xvcygpOwotICAgICAg ICByZXR1cm4oLTEpOwotICAgIH0gZWxzZSBpZiAoIGNjICE9IDEgKQotICAgICAgICByZXR1cm4o MCk7Ci0gICAgbmV0X2xlbiA9IChuZXRfbGVuIDw8IDgpIHwgYzsKLSAgICBkZWJ1ZyhGMTExLCJu ZXRfcmVhZCIsImNoYXJzIHJlYWQiLGNjKTsKLSAgICBjYyA9IG5ldF9yZWFkKGZkLCAmYywgMSk7 Ci0gICAgaWYgKGNjIDwgMCkgewotICAgICAgICBuZXRjbG9zKCk7Ci0gICAgICAgIHJldHVybigt MSk7Ci0gICAgfSBlbHNlIGlmICggY2MgIT0gMSApCi0gICAgICAgIHJldHVybigwKTsKLSAgICBu ZXRfbGVuID0gKG5ldF9sZW4gPDwgOCkgfCBjOwotICAgIGRlYnVnKEYxMTEsImtyYjRfZGVzX3Jl YWQiLCJuZXRfbGVuIixuZXRfbGVuKTsKLQotICAgIC8qIE5vdGU6IG5ldF9sZW4gaXMgdW5zaWdu ZWQgKi8KLSAgICBpZiAobmV0X2xlbiA+IHNpemVvZihkZXNfaW5idWYpKSB7Ci0gICAgICAgIC8q IFhYWCBwcmVwb3N0ZXJvdXMgbGVuZ3RoLCBwcm9iYWJseSBvdXQgb2Ygc3luYy4KLSAgICAgICAg YWN0IGFzIGlmIHBpcGUgY2xvc2VkICovCi0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0gICAg LyogdGhlIHdyaXRlciB0ZWxscyB1cyBob3cgbXVjaCByZWFsIGRhdGEgd2UgYXJlIGdldHRpbmcs IGJ1dAotICAgIHdlIG5lZWQgdG8gcmVhZCB0aGUgcGFkIGJ5dGVzICg4LWJ5dGUgYm91bmRhcnkp ICovCi0jaWZuZGVmIHJvdW5kdXAKLSNkZWZpbmUgcm91bmR1cCh4LHkpICgoKCh4KSsoeSktMSkv KHkpKSooeSkpCi0jZW5kaWYgLyogcm91bmR1cCAqLwotICAgIHJkX2xlbiA9IHJvdW5kdXAobmV0 X2xlbiwgOCk7Ci0gICAgZGVidWcoRjExMSwia3JiNF9kZXNfcmVhZCIsInJkX2xlbiIscmRfbGVu KTsKLSAgICBjYyA9IG5ldF9yZWFkKGZkLCBkZXNfaW5idWYsIHJkX2xlbik7Ci0gICAgZGVidWco RjExMSwibmV0X3JlYWQiLCJjaGFycyByZWFkIixjYyk7Ci0gICAgaWYgKGNjIDwgMCkgewotICAg ICAgICBuZXRjbG9zKCk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfSBlbHNlIGlmICggY2Mg IT0gcmRfbGVuICkKLSAgICAgICAgcmV0dXJuKDApOwotCi0gICAgY2toZXhkdW1wKCJrcmI0X2Rl c19yZWFkIGRlc19pbmJ1ZiIsZGVzX2luYnVmLDgpOwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSNp ZmRlZiBLUkI1MjQKLSAgICAodm9pZCkgZGVzX3BjYmNfZW5jcnlwdChkZXNfaW5idWYsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChuZXRfbGVuIDwgOCkgPyA4IDogbmV0X2xlbiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgazRfc2NoZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWQuc2Vz c2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVDUllQVCk7Ci0jZWxzZSAvKiBL UkI1MjQgKi8KLSAgICAodm9pZCkgZGVzX3BjYmNfZW5jcnlwdCgoQmxvY2sgKilkZXNfaW5idWYs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCbG9jayAqKXN0b3JhZ2UsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChuZXRfbGVuIDwgOCkgPyA4IDogbmV0X2xlbiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgazRfc2NoZWQsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZjcmVkLnNlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFQ1JZ UFQpOwotI2VuZGlmIC8qIEtSQjUyNCAqLwotI2VuZGlmIC8qIEVOQ1JZUFRJT04gKi8KLSAgICBj a2hleGR1bXAoImtyYjRfZGVzX3JlYWQgc3RvcmFnZSIsc3RvcmFnZSw4KTsKLQotICAgIC8qCi0g ICAgKiB3aGVuIHRoZSBjbGVhcnRleHQgYmxvY2sgaXMgPCA4IGJ5dGVzLCBpdCBpcyAicmlnaHQt anVzdGlmaWVkIgotICAgICogaW4gdGhlIGJsb2NrLCBzbyB3ZSBuZWVkIHRvIGFkanVzdCB0aGUg cG9pbnRlciB0byB0aGUgZGF0YQotICAgICovCi0gICAgaWYgKG5ldF9sZW4gPCA4KQotICAgICAg ICBzdG9yZV9wdHIgPSBzdG9yYWdlICsgOCAtIG5ldF9sZW47Ci0gICAgZWxzZQotICAgICAgICBz dG9yZV9wdHIgPSBzdG9yYWdlOwotICAgIG5zdG9yZWQgPSBuZXRfbGVuOwotCi0gICAgaWYgKCAh YnVmICkKLSAgICAgICAgcmV0dXJuKDApOwotCi0gICAgaWYgKG5zdG9yZWQgPiBsZW4pIHsKLSAg ICAgICAgbWVtY3B5KGJ1Ziwgc3RvcmVfcHRyLCBsZW4pOyAgICAgICAgICAgIC8qIHNhZmUgKi8K LSAgICAgICAgbnJldHVybmVkICs9IGxlbjsKLSAgICAgICAgc3RvcmVfcHRyICs9IGxlbjsKLSAg ICAgICAgbnN0b3JlZCAtPSBsZW47Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbWVtY3B5KGJ1Ziwg c3RvcmVfcHRyLCBuc3RvcmVkKTsgICAgICAgIC8qIHNhZmUgKi8KLSAgICAgICAgbnJldHVybmVk ICs9IG5zdG9yZWQ7Ci0gICAgICAgIG5zdG9yZWQgPSAwOwotICAgIH0KLQotICAgIGRlYnVnKEYx MTEsIm5ldF9yZWFkIiwibnJldHVybmVkIixucmV0dXJuZWQpOwotICAgIHJldHVybihucmV0dXJu ZWQpOwotfQotCi1pbnQKLWtyYjRfZGVzX3dyaXRlKGZkLCBidWYsIGxlbikKLWludCBmZDsKLWNo YXIgKmJ1ZjsKLWludCBsZW47Ci17Ci0gICAgc3RhdGljIGNoYXIgZ2FyYmFnZV9idWZbOF07Ci0g ICAgdW5zaWduZWQgY2hhciAqbGVuX2J1ZiA9ICh1bnNpZ25lZCBjaGFyICopIGRlc19vdXRwa3Q7 Ci0gICAgaW50IGNjOwotCi0gICAgZGVidWcoRjExMSwia3JiNF9kZXNfd3JpdGUiLCJybG9nX2Vu Y3J5cHQiLHJsb2dfZW5jcnlwdCk7Ci0gICAgaWYgKCAhcmxvZ19lbmNyeXB0ICkgewotICAgICAg ICBjYyA9IG5ldF93cml0ZShmZCwgYnVmLCBsZW4pOwotICAgICAgICBkZWJ1ZyhGMTExLCJuZXRf d3JpdGUiLCJjaGFycyB3cml0dGVuIixjYyk7Ci0gICAgICAgIHJldHVybihjYyk7Ci0gICAgfQot Ci0gICAgLyoKLSAgICAqIHBjYmNfZW5jcnlwdCBvdXRwdXRzIGluIDgtYnl0ZSAoNjQgYml0KSBp bmNyZW1lbnRzCi0gICAgKgotICAgICogaXQgemVyby1maWxscyB0aGUgY2xlYXJ0ZXh0IHRvIDgt Ynl0ZSBwYWRkaW5nLAotICAgICogc28gaWYgd2UgaGF2ZSBjbGVhcnRleHQgb2YgPCA4IGJ5dGVz LCB3ZSB3YW50Ci0gICAgKiB0byBpbnNlcnQgcmFuZG9tIGdhcmJhZ2UgYmVmb3JlIGl0IHNvIHRo YXQgdGhlIGNpcGhlcnRleHQKLSAgICAqIGRpZmZlcnMgZm9yIGVhY2ggdHJhbnNtaXNzaW9uIG9m IHRoZSBzYW1lIGNsZWFydGV4dC4KLSAgICAqIGlmIGxlbiA8IDggLSBzaXplb2YobG9uZyksIHNp emVvZihsb25nKSBieXRlcyBvZiByYW5kb20KLSAgICAqIGdhcmJhZ2Ugc2hvdWxkIGJlIHN1ZmZp Y2llbnQ7IGxlYXZlIHRoZSByZXN0IGFzLWlzIGluIHRoZSBidWZmZXIuCi0gICAgKiBpZiBsZW4g PiA4IC0gc2l6ZW9mKGxvbmcpLCBqdXN0IGdhcmJhZ2UgZmlsbCB0aGUgcmVzdC4KLSAgICAqLwot ICAgIGlmIChsZW4gPCA4KSB7Ci0gICAgICAgIHJhbmRvbV9jb25mb3VuZGVyKDggLSBsZW4sIGdh cmJhZ2VfYnVmKTsKLSAgICAgICAgLyogdGhpcyAicmlnaHQtanVzdGlmaWVzIiB0aGUgZGF0YSBp biB0aGUgYnVmZmVyICovCi0gICAgICAgICh2b2lkKSBtZW1jcHkoZ2FyYmFnZV9idWYgKyA4IC0g bGVuLCBidWYsIGxlbik7IC8qIHNhZmUgKi8KLSAgICAgICAgY2toZXhkdW1wKCJrcmI0X2Rlc193 cml0ZSBnYXJiYWdlX2J1ZiIsZ2FyYmFnZV9idWYsOCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNr aGV4ZHVtcCgia3JiNF9kZXNfd3JpdGUgYnVmIixidWYsOCk7Ci0jaWZkZWYgQ0tfRU5DUllQVElP TgotI2lmZGVmIEtSQjUyNAotICAgICh2b2lkKSBkZXNfcGNiY19lbmNyeXB0KChsZW4gPCA4KSA/ IGdhcmJhZ2VfYnVmIDogYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNfb3V0 cGt0KzQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsZW4gPCA4KSA/IDggOiBsZW4s Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGs0X3NjaGVkLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjcmVkLnNlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg IEVOQ1JZUFQpOwotI2Vsc2UgLyogS1JCNTI0ICovCi0gICAgKHZvaWQpIGRlc19wY2JjX2VuY3J5 cHQoKEJsb2NrICopKChsZW4gPCA4KSA/IGdhcmJhZ2VfYnVmIDogYnVmKSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKEJsb2NrICopKGRlc19vdXRwa3QrNCksCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChsZW4gPCA4KSA/IDggOiBsZW4sCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGs0X3NjaGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3JlZC5z ZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTkNSWVBUKTsKLSNlbmRpZiAv KiBLUkI1MjQgKi8KLSNlbmRpZiAvKiBFTkNSWVBUSU9OICovCi0gICAgaWYgKCBsZW4gPCA4ICkK LSAgICAgICAgY2toZXhkdW1wKCJrcmI0X2Rlc193cml0ZSAocG9zdCBwY2JjKSBnYXJiYWdlX2J1 ZiIsZ2FyYmFnZV9idWYsOCk7Ci0gICAgZWxzZQotICAgICAgICBja2hleGR1bXAoImtyYjRfZGVz X3dyaXRlIChwb3N0IHBjYmMpIGJ1ZiIsYnVmLDgpOwotICAgIGNraGV4ZHVtcCgia3JiNF9kZXNf d3JpdGUgKGRlc19vdXRwa3QrNCkiLChkZXNfb3V0cGt0KzQpLDgpOwotCi0gICAgLyogdGVsbCB0 aGUgb3RoZXIgZW5kIHRoZSByZWFsIGFtb3VudCwgYnV0IHNlbmQgYW4gOC1ieXRlIHBhZGRlZAot ICAgIHBhY2tldCAqLwotICAgIGxlbl9idWZbMF0gPSAobGVuICYgMHhmZjAwMDAwMCkgPj4gMjQ7 Ci0gICAgbGVuX2J1ZlsxXSA9IChsZW4gJiAweGZmMDAwMCkgPj4gMTY7Ci0gICAgbGVuX2J1Zlsy XSA9IChsZW4gJiAweGZmMDApID4+IDg7Ci0gICAgbGVuX2J1ZlszXSA9IChsZW4gJiAweGZmKTsK LSAgICBja2hleGR1bXAoImtyYjRfZGVzX3dyaXRlIGRlc19vdXRwa3QgbGVuIixkZXNfb3V0cGt0 LDEyKTsKLSAgICBjYyA9IG5ldF93cml0ZShmZCwgZGVzX291dHBrdCwgcm91bmR1cChsZW4sOCkr NCk7Ci0gICAgZGVidWcoRjExMSwibmV0X3dyaXRlIiwiY2hhcnMgd3JpdHRlbiIsY2MpOwotICAg IHJldHVybihsZW4pOwotfQotI2VuZGlmIC8qIEtSQjQgKi8KLSNlbmRpZiAvKiBSTE9HQ09ERSAq LwotCi0jaWZkZWYgS1JCNTI0Ci0jaWZuZGVmIE9TMgotLyogVGhlIGZvbGxvd2luZyBmdW5jdGlv bnMgYXJlIG1pc3NpbmcgZnJvbSB0aGUgY29tcGF0aWJpbGl0eSBsaWJyYXJ5ICovCi1jb25zdCBj aGFyICoKLWtyYl9nZXRfZXJyX3RleHRfZW50cnkocikgaW50IHI7Ci17Ci0gICAgZXh0ZXJuIGNo YXIga3JiX2Vycl90ZXh0W107Ci0gICAgcmV0dXJuKGtyYl9lcnJfdHh0W3JdKTsKLX0KLSNlbmRp ZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBLUkI1MjQgKi8KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAq LwotCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSNpZmRlZiBLUkI1X1UyVQotLyogS2VyYmVyb3MgNSBV c2VyIHRvIFVzZXIgQ2xpZW50ICovCi1pbnQKLWs1X3VzZXJfdG9fdXNlcl9jbGllbnRfYXV0aCgp Ci17Ci0gICAgZXh0ZXJuIGludCB0dHlmZDsKLSAgICByZWdpc3RlciBpbnQgcmV0dmFsLCBpOwot ICAgIGNoYXIgKipzcmVhbG1zOyAgICAgICAgICAgICAvKiByZWFsbShzKSBvZiBzZXJ2ZXIgKi8K LSAgICBjaGFyICpwcmluYzsgICAgICAgICAgICAgICAgLyogcHJpbmNpcGFsIGluIGNyZWRlbnRp YWxzIGNhY2hlICovCi0gICAga3JiNV9jY2FjaGUgY2M7Ci0gICAga3JiNV9jcmVkcyBjcmVkcywg Km5ld19jcmVkczsKLSAgICBrcmI1X2RhdGEgcmVwbHksIG1zZywgbXNndGV4dCwgcHJpbmNfZGF0 YTsKLSAgICBrcmI1X3RpY2tldCAqIHRpY2tldCA9IE5VTEw7Ci0KLSAgICBpZiAocmV0dmFsID0g azVfZ2V0X2NjYWNoZShrNV9jb250ZXh0LCZjYyxOVUxMKSkKLSAgICB7Ci0gICAgICAgIGNvbV9l cnIoInV1LWNsaWVudCIsIHJldHZhbCwgImdldHRpbmcgY3JlZGVudGlhbHMgY2FjaGUiKTsKLSAg ICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAgICBtZW1zZXQgKChjaGFyKikmY3JlZHMsIDAs IHNpemVvZihjcmVkcykpOwotICAgIGlmIChyZXR2YWwgPSBrcmI1X2NjX2dldF9wcmluY2lwYWwo azVfY29udGV4dCwgY2MsICZjcmVkcy5jbGllbnQpKQotICAgIHsKLSAgICAgICAgY29tX2Vycigi dXUtY2xpZW50IiwgcmV0dmFsLCAiZ2V0dGluZyBwcmluY2lwYWwgbmFtZSIpOwotICAgICAgICBy ZXR1cm4oLTEpOwotICAgIH0KLQotICAgIGlmIChyZXR2YWwgPSBrcmI1X2dldF9ob3N0X3JlYWxt KGs1X2NvbnRleHQsIHN6SG9zdE5hbWUsICZzcmVhbG1zKSkKLSAgICB7Ci0gICAgICAgIGNvbV9l cnIoInV1LWNsaWVudCIsIHJldHZhbCwgImdldHRpbmcgcmVhbG1zIGZvciBcIiVzXCIiLCBzekhv c3ROYW1lKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAgICBpZiAocmV0dmFsID0g a3JiNV9idWlsZF9wcmluY2lwYWxfZXh0KGs1X2NvbnRleHQsICZjcmVkcy5zZXJ2ZXIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrcmI1X3ByaW5jX3JlYWxtKGs1 X2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjcmVkcy5jbGllbnQpLT5sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBrcmI1X3ByaW5jX3JlYWxtKGs1X2NvbnRleHQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVkcy5j bGllbnQpLT5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg NiwgImtyYnRndCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBr cmI1X3ByaW5jX3JlYWxtKGs1X2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVkcy5jbGllbnQpLT5sZW5ndGgsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrcmI1X3ByaW5jX3JlYWxtKGs1 X2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjcmVkcy5jbGllbnQpLT5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMCkpCi0gICAgewotICAgICAgICBjb21fZXJyKCJ1dS1jbGllbnQi LCByZXR2YWwsICJzZXR0aW5nIHVwIHRndCBzZXJ2ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm4o LTEpOwotICAgIH0KLQotICAgIC8qIEdldCBUR1QgZnJvbSBjcmVkZW50aWFscyBjYWNoZSAqLwot ICAgIGlmIChyZXR2YWwgPSBrcmI1X2dldF9jcmVkZW50aWFscyhrNV9jb250ZXh0LCBLUkI1X0dD X0NBQ0hFRCwgY2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3Jl ZHMsICZuZXdfY3JlZHMpKQotICAgIHsKLSAgICAgICAgY29tX2VycigidXUtY2xpZW50IiwgcmV0 dmFsLCAiZ2V0dGluZyBUR1QiKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAgICBp ZiAocmV0dmFsID0ga3JiNV91bnBhcnNlX25hbWUoazVfY29udGV4dCwgY3JlZHMuY2xpZW50LCAm cHJpbmMpKSB7Ci0gICAgICAgIGNvbV9lcnIoInV1LWNsaWVudCIsIHJldHZhbCwgInByaW50aW5n IHByaW5jaXBhbCBuYW1lIik7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIGkgPSBz dHJsZW4ocHJpbmMpICsgMTsKLSAgICBwcmluY19kYXRhLmRhdGEgPSBwcmluYzsKLSAgICBwcmlu Y19kYXRhLmxlbmd0aCA9IGk7ICAgICAgICAgICAgICAvKiBpbmNsdWRlIG51bGwgdGVybWluYXRv ciBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIn cyBjb252ZW5pZW5jZSAqLwotICAgIHJldHZhbCA9IGtyYjVfd3JpdGVfbWVzc2FnZShrNV9jb250 ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa3JiNV9wb2ludGVyKSAmdHR5 ZmQsICZwcmluY19kYXRhKTsKLSAgICBpZiAocmV0dmFsKQotICAgIHsKLSAgICAgICAgY29tX2Vy cigidXUtY2xpZW50IiwgcmV0dmFsLCAic2VuZGluZyBwcmluY2lwYWwgbmFtZSB0byBzZXJ2ZXIi KTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAga3JiNV9mcmVlX3VucGFyc2VkX25h bWUoazVfY29udGV4dCxwcmluYyk7Ci0KLSAgICByZXR2YWwgPSBrcmI1X3dyaXRlX21lc3NhZ2Uo azVfY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtyYjVfcG9pbnRl cikgJnR0eWZkLCAmbmV3X2NyZWRzLT50aWNrZXQpOwotICAgIGlmIChyZXR2YWwpCi0gICAgewot ICAgICAgICBjb21fZXJyKCJ1dS1jbGllbnQiLCByZXR2YWwsICJzZW5kaW5nIHRpY2tldCB0byBz ZXJ2ZXIiKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAgICByZXR2YWwgPSBrcmI1 X3JlYWRfbWVzc2FnZShrNV9jb250ZXh0LCAoa3JiNV9wb2ludGVyKSAmdHR5ZmQsICZyZXBseSk7 Ci0gICAgaWYgKHJldHZhbCkKLSAgICB7Ci0gICAgICAgIGNvbV9lcnIoInV1LWNsaWVudCIsIHJl dHZhbCwgInJlYWRpbmcgcmVwbHkgZnJvbSBzZXJ2ZXIiKTsKLSAgICAgICAgcmV0dXJuKC0xKTsK LSAgICB9Ci0KLSAgICBpZiAocmV0dmFsID0ga3JiNV9hdXRoX2Nvbl9pbml0KGs1X2NvbnRleHQs ICZhdXRoX2NvbnRleHQpKSB7Ci0gICAgICAgIGNvbV9lcnIoInV1LWNsaWVudCIsIHJldHZhbCwg ImluaXRpYWxpemluZyB0aGUgYXV0aF9jb250ZXh0Iik7Ci0gICAgICAgIHJldHVybigtMSk7Ci0g ICAgfQotCi0gICAgaWYgKCFrcmI1X2Rfbm9fYWRkcmVzc2VzKSB7Ci0gICAgICBpZiAocmV0dmFs ID0ga3JiNV9hdXRoX2Nvbl9nZW5hZGRycyhrNV9jb250ZXh0LCBhdXRoX2NvbnRleHQsIHR0eWZk LAotICAgICAgICAgICAgICAgICAgICAgICAgS1JCNV9BVVRIX0NPTlRFWFRfR0VORVJBVEVfTE9D QUxfRlVMTF9BRERSIHwKLSAgICAgICAgICAgICAgICAgICAgICAgIEtSQjVfQVVUSF9DT05URVhU X0dFTkVSQVRFX1JFTU9URV9GVUxMX0FERFIpKSB7Ci0gICAgICAgIGNvbV9lcnIoInV1LWNsaWVu dCIsIHJldHZhbCwgImdlbmVyYXRpbmcgYWRkcnMgZm9yIGF1dGhfY29udGV4dCIpOwotICAgICAg ICByZXR1cm4oLTEpOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChyZXR2YWwgPSBrcmI1X2F1 dGhfY29uX3NldGZsYWdzKGs1X2NvbnRleHQsIGF1dGhfY29udGV4dCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBLUkI1X0FVVEhfQ09OVEVYVF9ET19TRVFVRU5DRSkp IHsKLSAgICAgICAgY29tX2VycigidXUtY2xpZW50IiwgcmV0dmFsLCAiaW5pdGlhbGl6aW5nIHRo ZSBhdXRoX2NvbnRleHQgZmxhZ3MiKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAg ICBpZiAocmV0dmFsID0ga3JiNV9hdXRoX2Nvbl9zZXR1c2VydXNlcmtleShrNV9jb250ZXh0LCBh dXRoX2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJm5ld19jcmVkcy0+a2V5YmxvY2spKSB7Ci0gICAgICAgIGNvbV9lcnIoInV1LWNsaWVudCIs IHJldHZhbCwgInNldHRpbmcgdXNlcnVzZXJrZXkgZm9yIGF1dGhjb250ZXh0Iik7Ci0gICAgICAg IHJldHVybigtMSk7Ci0gICAgfQotCi0gICAgLyogcmVhZCB0aGUgYXBfcmVxIHRvIGdldCB0aGUg c2Vzc2lvbiBrZXkgKi8KLSAgICByZXR2YWwgPSBrcmI1X3JkX3JlcShrNV9jb250ZXh0LCAmYXV0 aF9jb250ZXh0LCAmcmVwbHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEws IE5VTEwsICZ0aWNrZXQpOwotICAgIGlmIChyZXR2YWwpIHsKLSAgICAgICAgY29tX2VycigidXUt Y2xpZW50IiwgcmV0dmFsLCAicmVhZGluZyBBUF9SRVEgZnJvbSBzZXJ2ZXIiKTsKLSAgICAgICAg cmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAgICBpZiAoazVfdTJ1X3JlYWRfbXNnKGs1X2NvbnRleHQs Jm1zZykgPCAwKQotICAgICAgICByZXR1cm4oLTEpOwotCi0gICAgaWYgKCBzdHJjbXAoIktlcm1p dCBpbXBsZW1lbnRzIEtlcmJlcm9zIDUgVXNlciB0byBVc2VyIixtc2cuZGF0YSkgKQotICAgICAg ICByZXR1cm4oLTEpOwotICAgIGtyYjVfZnJlZV9kYXRhX2NvbnRlbnRzKGs1X2NvbnRleHQsJm1z Zyk7Ci0KLSAgICBtc2d0ZXh0LmRhdGEgPSAiQXMgZG8gSSEgOi0pIjsKLSAgICBtc2d0ZXh0Lmxl bmd0aCA9IHN0cmxlbihtc2d0ZXh0LmRhdGEpKzE7Ci0KLSAgICBpZiAoazVfdTJ1X3dyaXRlX21z ZyhrNV9jb250ZXh0LCZtc2d0ZXh0KSA8IDApCi0gICAgICAgIHJldHVybigtMSk7Ci0KLSAgICBp ZiAocmV0dmFsID0ga3JiNV91bnBhcnNlX25hbWUoazVfY29udGV4dCwKLSNpZmRlZiBIRUlNREFM Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWNrZXQtPmNsaWVudCwKLSNl bHNlIC8qIEhFSU1EQUwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRp Y2tldC0+ZW5jX3BhcnQyLT5jbGllbnQsCi0jZW5kaWYgLyogSEVJTURBTCAqLwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByaW5jKSkKLSAgICAgICAgY29tX2VycigidXUt Y2xpZW50IiwgcmV0dmFsLCAid2hpbGUgdW5wYXJzaW5nIGNsaWVudCBuYW1lIik7Ci0gICAgZWxz ZSB7Ci0gICAgICAgIGNrc3RybmNweShzelVzZXJOYW1lQXV0aGVudGljYXRlZCxwcmluYyxVSURC VUZMRU4pOwotICAgICAgICB2YWxpZFVzZXIgPSBBVVRIX1ZBTElEOwotICAgICAgICBhdXRoZW50 aWNhdGlvbl92ZXJzaW9uID0gQVVUSFRZUEVfS0VSQkVST1NfVjU7Ci0gICAgICAgIGlmICggIXF1 aWV0ICkKLSAgICAgICAgICAgIHByaW50ZigiUGVlciBuYW1lIGlzIFwiJXNcIlxuIiwgcHJpbmMp OwotICAgICAgICBrcmI1X2ZyZWVfdW5wYXJzZWRfbmFtZShrNV9jb250ZXh0LHByaW5jKTsKLSAg ICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIEtlcmJlcm9zIDUgVXNlciB0byBVc2VyIFNlcnZl ciAqLwotCi1pbnQKLWs1X3VzZXJfdG9fdXNlcl9zZXJ2ZXJfYXV0aCgpCi17Ci0gICAga3JiNV9k YXRhIHBuYW1lX2RhdGEsIHRrdF9kYXRhOwotICAgIGludCByZXR2YWw7Ci0gICAga3JiNV9jcmVk cyBjcmVkcywgKm5ld19jcmVkczsKLSAgICBrcmI1X2NjYWNoZSBjYzsKLSAgICBrcmI1X2RhdGEg bXNnLCBtc2d0ZXh0OwotICAgIGV4dGVybiBpbnQgdHR5ZmQ7Ci0KLSAgICBpZiAocmV0dmFsID0g a3JiNV9yZWFkX21lc3NhZ2UoazVfY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGtyYjVfcG9pbnRlcikgJnR0eWZkLCAmcG5hbWVfZGF0YSkpIHsKLSAgICAgICAg Y29tX2VyciAoInV1LXNlcnZlciIsIHJldHZhbCwgInJlYWRpbmcgcG5hbWUiKTsKLSAgICAgICAg cmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgLyogY2xpZW50IHNlbmRzIGl0IGFscmVhZHkgbnVsbC10 ZXJtaW5hdGVkLiAqLwotICAgIGlmICggIXF1aWV0ICkKLSAgICAgICAgcHJpbnRmICgiUGVlciBu YW1lIGlzIFwiJXNcIi5cbiIsIHBuYW1lX2RhdGEuZGF0YSk7Ci0gICAgY2tzdHJuY3B5KHN6VXNl ck5hbWVBdXRoZW50aWNhdGVkLHBuYW1lX2RhdGEuZGF0YSxVSURCVUZMRU4pOwotICAgIHZhbGlk VXNlciA9IEFVVEhfVkFMSUQ7Ci0gICAgYXV0aGVudGljYXRpb25fdmVyc2lvbiA9IEFVVEhUWVBF X0tFUkJFUk9TX1Y1OwotCi0gICAgaWYgKHJldHZhbCA9IGtyYjVfcmVhZF9tZXNzYWdlKGs1X2Nv bnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrcmI1X3BvaW50ZXIp ICZ0dHlmZCwgJnRrdF9kYXRhKSkgewotICAgICAgICBjb21fZXJyICgidXUtc2VydmVyIiwgcmV0 dmFsLCAicmVhZGluZyB0aWNrZXQgZGF0YSIpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0K LQotICAgIGlmIChyZXR2YWwgPSBrNV9nZXRfY2NhY2hlKGs1X2NvbnRleHQsJmNjLE5VTEwpKQot ICAgIHsKLSAgICAgICAgY29tX2VycigidXUtc2VydmVyIiwgcmV0dmFsLCAiZ2V0dGluZyBjcmVk ZW50aWFscyBjYWNoZSIpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLQotICAgIG1lbXNl dCAoKGNoYXIqKSZjcmVkcywgMCwgc2l6ZW9mKGNyZWRzKSk7Ci0gICAgaWYgKHJldHZhbCA9IGty YjVfY2NfZ2V0X3ByaW5jaXBhbChrNV9jb250ZXh0LCBjYywgJmNyZWRzLmNsaWVudCkpCi0gICAg ewotICAgICAgICBjb21fZXJyKCJ1dS1zZXJ2ZXIiLCByZXR2YWwsICJnZXR0aW5nIHByaW5jaXBh bCBuYW1lIik7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotCi0gICAgaWYgKHJldHZhbCA9 IGtyYjVfcGFyc2VfbmFtZShrNV9jb250ZXh0LCBwbmFtZV9kYXRhLmRhdGEsICZjcmVkcy5zZXJ2 ZXIpKQotICAgIHsKLSAgICAgICAgY29tX2VycigidXUtc2VydmVyIiwgcmV0dmFsLCAicGFyc2lu ZyBjbGllbnQgbmFtZSIpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBjcmVkcy5z ZWNvbmRfdGlja2V0ID0gdGt0X2RhdGE7Ci0KLSAgICBpZiAocmV0dmFsID0ga3JiNV9nZXRfY3Jl ZGVudGlhbHMoazVfY29udGV4dCwgS1JCNV9HQ19VU0VSX1VTRVIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjYywgJmNyZWRzLCAmbmV3X2NyZWRzKSkKLSAgICB7Ci0g ICAgICAgIGNvbV9lcnIoInV1LXNlcnZlciIsIHJldHZhbCwgImdldHRpbmcgdXNlci11c2VyIHRp Y2tldCIpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLQotICAgIC8qIHNlbmQgYSB0aWNr ZXQvYXV0aGVudGljYXRvciB0byB0aGUgb3RoZXIgc2lkZSwgc28gaXQgY2FuIGdldCB0aGUga2V5 Ci0gICAgICAgd2UncmUgdXNpbmcgZm9yIHRoZSBrcmJfc2FmZSBiZWxvdy4gKi8KLQotICAgIGlm IChyZXR2YWwgPSBrcmI1X2F1dGhfY29uX2luaXQoazVfY29udGV4dCwgJmF1dGhfY29udGV4dCkp IHsKLSAgICAgICAgY29tX2VycigidXUtc2VydmVyIiwgcmV0dmFsLCAibWFraW5nIGF1dGhfY29u dGV4dCIpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLQotICAgIGlmIChyZXR2YWwgPSBr cmI1X2F1dGhfY29uX3NldGZsYWdzKGs1X2NvbnRleHQsIGF1dGhfY29udGV4dCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS1JCNV9BVVRIX0NPTlRFWFRfRE9fU0VR VUVOQ0UpKSB7Ci0gICAgICAgIGNvbV9lcnIoInV1LXNlcnZlciIsIHJldHZhbCwgImluaXRpYWxp emluZyB0aGUgYXV0aF9jb250ZXh0IGZsYWdzIik7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAg fQotCi0gICAgaWYgKCFrcmI1X2Rfbm9fYWRkcmVzc2VzKSB7Ci0gICAgICBpZiAocmV0dmFsID0g a3JiNV9hdXRoX2Nvbl9nZW5hZGRycyhrNV9jb250ZXh0LCBhdXRoX2NvbnRleHQsIHR0eWZkLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLUkI1X0FVVEhfQ09OVEVYVF9HRU5FUkFU RV9MT0NBTF9GVUxMX0FERFIgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLUkI1 X0FVVEhfQ09OVEVYVF9HRU5FUkFURV9SRU1PVEVfRlVMTF9BRERSKSkgewotICAgICAgICBjb21f ZXJyKCJ1dS1zZXJ2ZXIiLCByZXR2YWwsICJnZW5lcmF0aW5nIGFkZHJzIGZvciBhdXRoX2NvbnRl eHQiKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmV0 dmFsID0ga3JiNV9hdXRoX2Nvbl9zZXR1c2VydXNlcmtleShrNV9jb250ZXh0LCBhdXRoX2NvbnRl eHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld19j cmVkcy0+a2V5YmxvY2spKSB7Ci0gICAgICAgIGNvbV9lcnIoInV1LXNlcnZlciIsIHJldHZhbCwg InNldHRpbmcgdXNlcnVzZXJrZXkgZm9yIGF1dGhjb250ZXh0Iik7Ci0gICAgICAgIHJldHVybigt MSk7Ci0gICAgfQotCi0gICAgaWYgKHJldHZhbCA9IGtyYjVfbWtfcmVxX2V4dGVuZGVkKGs1X2Nv bnRleHQsICZhdXRoX2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEFQX09QVFNfVVNFX1NFU1NJT05fS0VZIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQVBfT1BUU19NVVRVQUxfUkVRVUlSRUQsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE5VTEwsIG5ld19jcmVkcywgJm1zZykpIHsKLSAgICAgICAgY29t X2VycigidXUtc2VydmVyIiwgcmV0dmFsLCAibWFraW5nIEFQX1JFUSIpOwotICAgICAgICByZXR1 cm4oLTEpOwotICAgIH0KLSAgICByZXR2YWwgPSBrcmI1X3dyaXRlX21lc3NhZ2UoazVfY29udGV4 dCwgKGtyYjVfcG9pbnRlcikgJnR0eWZkLCAmbXNnKTsKLSAgICBpZiAocmV0dmFsKSB7Ci0gICAg ICAgIGNvbV9lcnIoInV1LXNlcnZlciIsIHJldHZhbCwgIndyaXRpbmcgbWVzc2FnZSB0byBjbGll bnQiKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAga3JiNV9mcmVlX2RhdGFfY29u dGVudHMoazVfY29udGV4dCwmbXNnKTsKLQotICAgIG1zZ3RleHQuZGF0YSA9ICJLZXJtaXQgaW1w bGVtZW50cyBLZXJiZXJvcyA1IFVzZXIgdG8gVXNlciI7Ci0gICAgbXNndGV4dC5sZW5ndGggPSBz dHJsZW4obXNndGV4dC5kYXRhKSsxOwotCi0gICAgaWYgKGs1X3UydV93cml0ZV9tc2coazVfY29u dGV4dCwmbXNndGV4dCkgPCAwKQotICAgICAgICByZXR1cm4oLTEpOwotCi0gICAgaWYgKGs1X3Uy dV9yZWFkX21zZyhrNV9jb250ZXh0LCZtc2cpIDwgMCkKLSAgICAgICAgcmV0dXJuKC0xKTsKLQot ICAgIGlmICggc3RyY21wKCJBcyBkbyBJISA6LSkiLG1zZy5kYXRhKSApCi0gICAgICAgIHJldHVy bigtMSk7Ci0gICAga3JiNV9mcmVlX2RhdGFfY29udGVudHMoazVfY29udGV4dCwmbXNnKTsKLQot Ci0gICAgcmV0dXJuKDApOwotfQotCi1pbnQKLWs1X3UydV9yZWFkX21zZyhrcmI1X2NvbnRleHQg Y29udGV4dCwgaW50IGZkLCBrcmI1X2RhdGEgKiBtc2cpCi17Ci0gICAgaW50IHJldHZhbDsKLSAg ICBrcmI1X2RhdGEgcmVwbHk7Ci0KLSAgICByZXR2YWwgPSBrcmI1X3JlYWRfbWVzc2FnZShjb250 ZXh0LCAoa3JiNV9wb2ludGVyKSAmZmQsICZyZXBseSk7Ci0gICAgaWYgKHJldHZhbCkKLSAgICB7 Ci0gICAgICAgIGNvbV9lcnIoInV1LWNsaWVudCIsIHJldHZhbCwgInJlYWRpbmcgcmVwbHkiKTsK LSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSAgICBpZiAocmV0dmFsID0ga3JiNV9yZF9w cml2KGNvbnRleHQsIGF1dGhfY29udGV4dCwgJnJlcGx5LCBtc2csIE5VTEwpKSB7Ci0gICAgICAg IGNvbV9lcnIoInV1LWNsaWVudCIsIHJldHZhbCwgImRlY29kaW5nIHJlcGx5Iik7Ci0gICAgICAg IHJldHVybigtMSk7Ci0gICAgfQotICAgIHJldHVybigwKTsKLX0KLQotaW50Ci1rNV91MnVfd3Jp dGVfbXNnKGtyYjVfY29udGV4dCBjb250ZXh0LCBpbnQgZmQsIGtyYjVfZGF0YSAqIG1zZ3RleHQp Ci17Ci0gICAgaW50IHJldHZhbDsKLSAgICBrcmI1X2RhdGEgbXNnOwotCi0gICAgaWYgKHJldHZh bCA9IGtyYjVfbWtfcHJpdihrNV9jb250ZXh0LCBhdXRoX2NvbnRleHQsIG1zZ3RleHQsICZtc2cs IE5VTEwpKQotICAgIHsKLSAgICAgICAgY29tX2VycigidXUtc2VydmVyIiwgcmV0dmFsLCAiZW5j b2RpbmcgbWVzc2FnZSIpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLQotICAgIHJldHZh bCA9IGtyYjVfd3JpdGVfbWVzc2FnZShrNV9jb250ZXh0LCAoa3JiNV9wb2ludGVyKSAmZmQsICZt c2cpOwotICAgIGtyYjVfZnJlZV9kYXRhX2NvbnRlbnRzKGs1X2NvbnRleHQsJm1zZyk7Ci0gICAg aWYgKHJldHZhbCkKLSAgICB7Ci0gICAgICAgIGNvbV9lcnIoInV1LXNlcnZlciIsIHJldHZhbCwg IndyaXRpbmcgbWVzc2FnZSIpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICByZXR1 cm4oMCk7Ci19Ci0KLWludAota3JiNV91MnVfYXZhaWwoZmQpCi0gICAgaW50IGZkOwotewotICAg IHJldHVybihuc3RvcmVkKTsKLX0KLQotaW50Ci1rcmI1X3UydV9yZWFkKGZkLCBidWYsIGxlbikK LSAgICAgaW50IGZkOwotICAgICByZWdpc3RlciBjaGFyICpidWY7Ci0gICAgIGludCBsZW47Ci17 Ci0gICAgaW50IG5yZXR1cm5lZCA9IDA7Ci0gICAga3JiNV9kYXRhIG1zZzsKLQotICAgIGRlYnVn KEYxMTEsImtyYjVfdTJ1X3JlYWQiLCJsZW4iLGxlbik7Ci0KLSAgICBpZiAoICFidWYgKQotICAg ICAgICByZXR1cm4oMCk7Ci0KLSAgICBpZiAobnN0b3JlZCA+PSBsZW4pIHsKLSAgICAgICAgbWVt Y3B5KGJ1Ziwgc3RvcmVfcHRyLCBsZW4pOyAgICAgICAgLyogc2FmZSAqLwotICAgICAgICBzdG9y ZV9wdHIgKz0gbGVuOwotICAgICAgICBuc3RvcmVkIC09IGxlbjsKLSAgICAgICAgcmV0dXJuKGxl bik7Ci0gICAgfSBlbHNlIGlmIChuc3RvcmVkKSB7Ci0gICAgICAgIG1lbWNweShidWYsIHN0b3Jl X3B0ciwgbnN0b3JlZCk7ICAgIC8qIHNhZmUgKi8KLSAgICAgICAgbnJldHVybmVkICs9IG5zdG9y ZWQ7Ci0gICAgICAgIGJ1ZiArPSBuc3RvcmVkOwotICAgICAgICBsZW4gLT0gbnN0b3JlZDsKLSAg ICAgICAgbnN0b3JlZCA9IDA7Ci0gICAgfQotCi0gICAgaWYgKGs1X3UydV9yZWFkX21zZyhrNV9j b250ZXh0LCBmZCwgJm1zZykgPCAwKQotICAgICAgICByZXR1cm4oLTEpOwotCi0gICAgaWYgKCBt c2cubGVuZ3RoIDw9IGxlbiApIHsKLSAgICAgICAgbWVtY3B5KGJ1ZiwgbXNnLmRhdGEsIG1zZy5s ZW5ndGgpOwotICAgICAgICBucmV0dXJuZWQgKz0gbXNnLmxlbmd0aDsKLSAgICAgICAgbnN0b3Jl ZCA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbWVtY3B5KGJ1ZiwgbXNnLmRhdGEsIGxlbik7 Ci0gICAgICAgIG5yZXR1cm5lZCArPSBsZW47Ci0KLSAgICAgICAgaWYgKCBtc2cubGVuZ3RoIC0g bGVuIDwgc2l6ZW9mKHN0b3JhZ2UpICkgewotICAgICAgICAgICAgc3RvcmVfcHRyID0gc3RvcmFn ZTsKLSAgICAgICAgICAgIG5zdG9yZWQgPSBtc2cubGVuZ3RoIC0gbGVuOwotICAgICAgICAgICAg bWVtY3B5KHN0b3JhZ2UsbXNnLmRhdGErbGVuLG5zdG9yZWQpOwotICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgbnN0b3JlZCA9IDA7Ci0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAg ICB9Ci0gICAgfQotICAgIHJldHVybihucmV0dXJuZWQpOwotfQotCi1pbnQKLWtyYjVfdTJ1X3dy aXRlKGZkLCBidWYsIGxlbikKLSAgICAgaW50IGZkOwotICAgICBjaGFyICpidWY7Ci0gICAgIGlu dCBsZW47Ci17Ci0gICAga3JiNV9kYXRhIG1zZzsKLQotICAgIG1zZy5sZW5ndGggPSBsZW47Ci0g ICAgbXNnLmRhdGEgPSBidWY7Ci0KLSAgICBpZiAoIGs1X3UydV93cml0ZV9tc2coazVfY29udGV4 dCwgZmQsICZtc2cpIDwgMCApCi0gICAgICAgIHJldHVybigtMSk7Ci0gICAgZWxzZQotICAgICAg ICByZXR1cm4obGVuKTsKLX0KLQotI2VuZGlmIC8qIEtSQjVfVTJVICovCi0jZW5kaWYgLyogQ0tf S0VSQkVST1MgKi8KLQotI2lmZGVmIENLX0ZPUldBUkRfWAotLyoKLQotQ29weXJpZ2h0IChjKSAx OTg4ICBYIENvbnNvcnRpdW0KLQotUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBv ZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRv IGRlYWwKLWluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0 aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLXRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwg cHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLWNvcGllcyBvZiB0 aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBp cwotZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u czoKLQotVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3Rp Y2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLWFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlv bnMgb2YgdGhlIFNvZnR3YXJlLgotCi1USEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotSU1QTElFRCwgSU5DTFVE SU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFks Ci1GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAg SU4gTk8gRVZFTlQgU0hBTEwgVEhFCi1YIENPTlNPUlRJVU0gQkUgTElBQkxFIEZPUiBBTlkgQ0xB SU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOCi1BTiBBQ1RJT04gT0Yg Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgot Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdT IElOIFRIRSBTT0ZUV0FSRS4KLQotRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwg dGhlIG5hbWUgb2YgdGhlIFggQ29uc29ydGl1bSBzaGFsbCBub3QgYmUKLXVzZWQgaW4gYWR2ZXJ0 aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFs aW5ncwotaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlv biBmcm9tIHRoZSBYIENvbnNvcnRpdW0uCi0KLSovCi0vKiAgTW9kaWZpZWQgZm9yIHN0YW5kLWFs b25lIGNvbXBpbGluZyBieQotICogIFBldGVyICdMdW5hJyBSdW5lc3RpZyA8cGV0ZXJAcnVuZXN0 aWcuY29tPgotICovCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4K LSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8dGlt ZS5oPgotI2RlZmluZSBUaW1lX3QgdGltZV90Ci0KLXZvaWQKLVhhdURpc3Bvc2VBdXRoIChhdXRo KQotWGF1dGggICAqYXV0aDsKLXsKLSAgICBpZiAoYXV0aCkgewotICAgICAgICBpZiAoYXV0aC0+ YWRkcmVzcykgKHZvaWQpIGZyZWUgKGF1dGgtPmFkZHJlc3MpOwotICAgICAgICBpZiAoYXV0aC0+ bnVtYmVyKSAodm9pZCkgZnJlZSAoYXV0aC0+bnVtYmVyKTsKLSAgICAgICAgaWYgKGF1dGgtPm5h bWUpICh2b2lkKSBmcmVlIChhdXRoLT5uYW1lKTsKLSAgICAgICAgaWYgKGF1dGgtPmRhdGEpIHsK LSAgICAgICAgICAgICh2b2lkKSBiemVybyAoYXV0aC0+ZGF0YSwgYXV0aC0+ZGF0YV9sZW5ndGgp OwotICAgICAgICAgICAgKHZvaWQpIGZyZWUgKGF1dGgtPmRhdGEpOwotICAgICAgICB9Ci0gICAg ICAgIGZyZWUgKChjaGFyICopIGF1dGgpOwotICAgIH0KLSAgICByZXR1cm47Ci19Ci0KLWNoYXIg KgotWGF1RmlsZU5hbWUgKCkKLXsKLSAgICBjaGFyICpzbGFzaERvdFhhdXRob3JpdHkgPSAiLy5Y YXV0aG9yaXR5IjsKLSAgICBjaGFyICAgICpuYW1lOwotICAgIHN0YXRpYyBjaGFyICpidWY9TlVM TDsKLSAgICBzdGF0aWMgaW50ICBic2l6ZT0wOwotICAgIGludCAgICAgc2l6ZSwgbmFtZWxlbjsK LSAgICBleHRlcm4gY2hhciAqIHRuX2Z3ZHhfeGF1dGhvcml0eTsKLQotICAgIGlmICggdG5fZndk eF94YXV0aG9yaXR5ICkKLSAgICAgICAgcmV0dXJuKHRuX2Z3ZHhfeGF1dGhvcml0eSk7Ci0KLSAg ICBpZiAobmFtZSA9IGdldGVudiAoIlhBVVRIT1JJVFkiKSkKLSAgICAgICAgcmV0dXJuKG5hbWUp OwotICAgIG5hbWUgPSB6aG9tZSgpOwotICAgIGlmICggIW5hbWUgKQotICAgICAgICByZXR1cm4o TlVMTCk7Ci0gICAgbmFtZWxlbiA9IHN0cmxlbiAobmFtZSk7Ci0gICAgc2l6ZSA9IG5hbWVsZW4g KyBzdHJsZW4oc2xhc2hEb3RYYXV0aG9yaXR5KSArIDE7Ci0gICAgaWYgKHNpemUgPiBic2l6ZSkg ewotICAgICAgICBpZiAoYnVmKQotICAgICAgICAgICAgZnJlZSAoYnVmKTsKLSAgICAgICAgYnVm ID0gbWFsbG9jICgodW5zaWduZWQpIHNpemUpOwotICAgICAgICBpZiAoIWJ1ZikKLSAgICAgICAg ICAgIHJldHVybiAwOwotICAgICAgICBic2l6ZSA9IHNpemU7Ci0gICAgfQotICAgIGNrc3RybmNw eSAoYnVmLCBuYW1lLCBic2l6ZSk7Ci0gICAgaWYgKCBuYW1lW25hbWVsZW4tMV0gIT0gJy8nCi0j aWZkZWYgT1MyCi0gICAgICAgICAmJiBuYW1lW25hbWVsZW4tMV0gIT0gJ1xcJwotI2VuZGlmIC8q IE9TMiAqLwotICAgICAgICAgKQotICAgICAgICBja3N0cm5jYXQgKGJ1Ziwgc2xhc2hEb3RYYXV0 aG9yaXR5LCBic2l6ZSk7Ci0gICAgZWxzZQotICAgICAgICBja3N0cm5jYXQgKGJ1ZiwgJnNsYXNo RG90WGF1dGhvcml0eVsxXSwgYnNpemUpOwotICAgIHJldHVybihidWYpOwotfQotCi1zdGF0aWMg aW50Ci1iaW5hcnlFcXVhbCAoYSwgYiwgbGVuKQotcmVnaXN0ZXIgY2hhciAgICphLCAqYjsKLXJl Z2lzdGVyIGludCAgICBsZW47Ci17Ci0gICAgd2hpbGUgKGxlbi0tKQotICAgICAgICBpZiAoKmEr KyAhPSAqYisrKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLSNp Zm5kZWYgUl9PSwotI2RlZmluZSBSX09LIDA0Ci0jZW5kaWYgLyogUl9PSyAqLwotCi1YYXV0aCAq Ci1YYXVHZXRBdXRoQnlBZGRyIChmYW1pbHksIGFkZHJlc3NfbGVuZ3RoLCBhZGRyZXNzLAotICAg ICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJfbGVuZ3RoLCBudW1iZXIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgIG5hbWVfbGVuZ3RoLCBuYW1lKQotdW5zaWduZWQgaW50ICAgIGZhbWls eTsKLXVuc2lnbmVkIGludCAgICBhZGRyZXNzX2xlbmd0aDsKLWNvbnN0IGNoYXIgICAgICAqYWRk cmVzczsKLXVuc2lnbmVkIGludCAgICBudW1iZXJfbGVuZ3RoOwotY29uc3QgY2hhciAgICAgICpu dW1iZXI7Ci11bnNpZ25lZCBpbnQgICAgbmFtZV9sZW5ndGg7Ci1jb25zdCBjaGFyICAgICAgKm5h bWU7Ci17Ci0gICAgRklMRSAgICAqYXV0aF9maWxlOwotICAgIGNoYXIgICAgKmF1dGhfbmFtZTsK LSAgICBYYXV0aCAgICplbnRyeTsKLQotICAgIGF1dGhfbmFtZSA9IFhhdUZpbGVOYW1lKCk7Ci0g ICAgaWYgKCFhdXRoX25hbWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChhY2Nlc3MgKGF1 dGhfbmFtZSwgUl9PSykgIT0gMCkgICAgICAgICAgLyogY2hlY2tzIFJFQUwgaWQgKi8KLSAgICAg ICAgcmV0dXJuIDA7Ci0gICAgYXV0aF9maWxlID0gZm9wZW4gKGF1dGhfbmFtZSwgInJiIik7Ci0g ICAgaWYgKCFhdXRoX2ZpbGUpCi0gICAgICAgIHJldHVybiAwOwotICAgIGZvciAoOzspIHsKLSAg ICAgICAgZW50cnkgPSBYYXVSZWFkQXV0aCAoYXV0aF9maWxlKTsKLSAgICAgICAgaWYgKCFlbnRy eSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAvKgotICAgICAgICAgKiBNYXRjaCB3aGVu OgotICAgICAgICAgKiAgIGVpdGhlciBmYW1pbHkgb3IgZW50cnktPmZhbWlseSBhcmUgRmFtaWx5 V2lsZCBvcgotICAgICAgICAgKiAgICBmYW1pbHkgYW5kIGVudHJ5LT5mYW1pbHkgYXJlIHRoZSBz YW1lCi0gICAgICAgICAqICBhbmQKLSAgICAgICAgICogICBlaXRoZXIgYWRkcmVzcyBvciBlbnRy eS0+YWRkcmVzcyBhcmUgZW1wdHkgb3IKLSAgICAgICAgICogICAgYWRkcmVzcyBhbmQgZW50cnkt PmFkZHJlc3MgYXJlIHRoZSBzYW1lCi0gICAgICAgICAqICBhbmQKLSAgICAgICAgICogICBlaXRo ZXIgbnVtYmVyIG9yIGVudHJ5LT5udW1iZXIgYXJlIGVtcHR5IG9yCi0gICAgICAgICAqICAgIG51 bWJlciBhbmQgZW50cnktPm51bWJlciBhcmUgdGhlIHNhbWUKLSAgICAgICAgICogIGFuZAotICAg ICAgICAgKiAgIGVpdGhlciBuYW1lIG9yIGVudHJ5LT5uYW1lIGFyZSBlbXB0eSBvcgotICAgICAg ICAgKiAgICBuYW1lIGFuZCBlbnRyeS0+bmFtZSBhcmUgdGhlIHNhbWUKLSAgICAgICAgICovCi0K LS8qICAgICAgaWYgKChmYW1pbHkgPT0gRmFtaWx5V2lsZCB8fCBlbnRyeS0+ZmFtaWx5ID09IEZh bWlseVdpbGQgfHwKLSAgICAgICAgICAgICAoZW50cnktPmZhbWlseSA9PSBmYW1pbHkgJiYKLSAg ICAgICAgICAgICAgYWRkcmVzc19sZW5ndGggPT0gZW50cnktPmFkZHJlc3NfbGVuZ3RoICYmCi0g ICAgICAgICAgICAgIGJpbmFyeUVxdWFsIChlbnRyeS0+YWRkcmVzcywgYWRkcmVzcywgKGludClh ZGRyZXNzX2xlbmd0aCkpKSAmJgotICAgICAgICAgICAgKG51bWJlcl9sZW5ndGggPT0gMCB8fCBl bnRyeS0+bnVtYmVyX2xlbmd0aCA9PSAwIHx8Ci0gICAgICAgICAgICAgKG51bWJlcl9sZW5ndGgg PT0gZW50cnktPm51bWJlcl9sZW5ndGggJiYKLSAgICAgICAgICAgICAgYmluYXJ5RXF1YWwgKGVu dHJ5LT5udW1iZXIsIG51bWJlciwgKGludCludW1iZXJfbGVuZ3RoKSkpICYmCi0gICAgICAgICAg ICAobmFtZV9sZW5ndGggPT0gMCB8fCBlbnRyeS0+bmFtZV9sZW5ndGggPT0gMCB8fAotICAgICAg ICAgICAgIChlbnRyeS0+bmFtZV9sZW5ndGggPT0gbmFtZV9sZW5ndGggJiYKLSAgICAgICAgICAg ICAgYmluYXJ5RXF1YWwgKGVudHJ5LT5uYW1lLCBuYW1lLCAoaW50KW5hbWVfbGVuZ3RoKSkpKSAq LwotICAgICAgICAvKiB0aGUgb3JpZ2luYWwgbWF0Y2hpbmcgY29kZSBhYm92ZSBkb2Vzbid0IHNl ZW0gdG8gbWVldCB0aGUgbWF0Y2hpbmcKLSAgICAgICAgICogYWxnb3JpdGhtLCBpdCBkb2Vzbid0 IGNoZWNrIGlmICJhZGRyZXNzX2xlbmd0aCA9PSAwIHx8Ci0gICAgICAgICAqIGVudHJ5LT5hZGRy ZXNzX2xlbmd0aCA9PSAwIi4gLyBMdW5hIDIwMDAtMDItMDkKLSAgICAgICAgICovCi0gICAgICAg IGlmICgoZmFtaWx5ID09IEZhbWlseVdpbGQgfHwgZW50cnktPmZhbWlseSA9PSBGYW1pbHlXaWxk IHx8Ci0gICAgICAgICAgICAgIGVudHJ5LT5mYW1pbHkgPT0gZmFtaWx5KSAmJgotICAgICAgICAg ICAgKGFkZHJlc3NfbGVuZ3RoID09IDAgfHwgZW50cnktPmFkZHJlc3NfbGVuZ3RoID09IDAgfHwK LSAgICAgICAgICAgICAgKGFkZHJlc3NfbGVuZ3RoID09IGVudHJ5LT5hZGRyZXNzX2xlbmd0aCAm JgotICAgICAgICAgICAgICBiaW5hcnlFcXVhbCAoZW50cnktPmFkZHJlc3MsIGFkZHJlc3MsIChp bnQpYWRkcmVzc19sZW5ndGgpKSkgJiYKLSAgICAgICAgICAgIChudW1iZXJfbGVuZ3RoID09IDAg fHwgZW50cnktPm51bWJlcl9sZW5ndGggPT0gMCB8fAotICAgICAgICAgICAgIChudW1iZXJfbGVu Z3RoID09IGVudHJ5LT5udW1iZXJfbGVuZ3RoICYmCi0gICAgICAgICAgICAgIGJpbmFyeUVxdWFs IChlbnRyeS0+bnVtYmVyLCBudW1iZXIsIChpbnQpbnVtYmVyX2xlbmd0aCkpKSAmJgotICAgICAg ICAgICAgKG5hbWVfbGVuZ3RoID09IDAgfHwgZW50cnktPm5hbWVfbGVuZ3RoID09IDAgfHwKLSAg ICAgICAgICAgICAoZW50cnktPm5hbWVfbGVuZ3RoID09IG5hbWVfbGVuZ3RoICYmCi0gICAgICAg ICAgICAgIGJpbmFyeUVxdWFsIChlbnRyeS0+bmFtZSwgbmFtZSwgKGludCluYW1lX2xlbmd0aCkp KSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBYYXVEaXNwb3NlQXV0aCAoZW50cnkpOwot ICAgIH0KLSAgICAodm9pZCkgZmNsb3NlIChhdXRoX2ZpbGUpOwotICAgIHJldHVybiBlbnRyeTsK LX0KLQotc3RhdGljIGludAotcmVhZF9zaG9ydCAoc2hvcnRwLCBmaWxlKQotdW5zaWduZWQgc2hv cnQgICpzaG9ydHA7Ci1GSUxFICAgICAgICAgICAgKmZpbGU7Ci17Ci0gICAgdW5zaWduZWQgY2hh ciAgIGZpbGVfc2hvcnRbMl07Ci0KLSAgICBpZiAoZnJlYWQgKChjaGFyICopIGZpbGVfc2hvcnQs IChpbnQpIHNpemVvZiAoZmlsZV9zaG9ydCksIDEsIGZpbGUpICE9IDEpCi0gICAgICAgIHJldHVy biAwOwotICAgICpzaG9ydHAgPSBmaWxlX3Nob3J0WzBdICogMjU2ICsgZmlsZV9zaG9ydFsxXTsK LSAgICByZXR1cm4gMTsKLX0KLQotc3RhdGljIGludAotcmVhZF9jb3VudGVkX3N0cmluZyAoY291 bnRwLCBzdHJpbmdwLCBmaWxlKQotdW5zaWduZWQgc2hvcnQgICpjb3VudHA7Ci1jaGFyICAgICoq c3RyaW5ncDsKLUZJTEUgICAgKmZpbGU7Ci17Ci0gICAgdW5zaWduZWQgc2hvcnQgIGxlbjsKLSAg ICBjaGFyICAgICAgICAgICAgKmRhdGE7Ci0KLSAgICBpZiAocmVhZF9zaG9ydCAoJmxlbiwgZmls ZSkgPT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGxlbiA9PSAwKSB7Ci0gICAgICAg IGRhdGEgPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRhdGEgPSBtYWxsb2MgKCh1bnNpZ25l ZCkgbGVuKTsKLSAgICAgICAgaWYgKCFkYXRhKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg ICAgIGlmIChmcmVhZCAoZGF0YSwgKGludCkgc2l6ZW9mIChjaGFyKSwgKGludCkgbGVuLCBmaWxl KSAhPSBsZW4pIHsKLSAgICAgICAgICAgIGJ6ZXJvIChkYXRhLCBsZW4pOwotICAgICAgICAgICAg ZnJlZSAoZGF0YSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KLSAg ICAqc3RyaW5ncCA9IGRhdGE7Ci0gICAgKmNvdW50cCA9IGxlbjsKLSAgICByZXR1cm4gMTsKLX0K LQotWGF1dGggKgotWGF1UmVhZEF1dGggKGF1dGhfZmlsZSkKLUZJTEUgICAgKmF1dGhfZmlsZTsK LXsKLSAgICBYYXV0aCAgIGxvY2FsOwotICAgIFhhdXRoICAgKnJldDsKLQotICAgIGlmIChyZWFk X3Nob3J0ICgmbG9jYWwuZmFtaWx5LCBhdXRoX2ZpbGUpID09IDApCi0gICAgICAgIHJldHVybiAw OwotICAgIGlmIChyZWFkX2NvdW50ZWRfc3RyaW5nICgmbG9jYWwuYWRkcmVzc19sZW5ndGgsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsb2NhbC5hZGRyZXNzLCBhdXRoX2ZpbGUpID09 IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChyZWFkX2NvdW50ZWRfc3RyaW5nICgmbG9j YWwubnVtYmVyX2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxvY2FsLm51 bWJlciwgYXV0aF9maWxlKSA9PSAwKSB7Ci0gICAgICAgIGlmIChsb2NhbC5hZGRyZXNzKSBmcmVl IChsb2NhbC5hZGRyZXNzKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmIChyZWFk X2NvdW50ZWRfc3RyaW5nICgmbG9jYWwubmFtZV9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZsb2NhbC5uYW1lLCBhdXRoX2ZpbGUpID09IDApIHsKLSAgICAgICAgaWYgKGxv Y2FsLmFkZHJlc3MpIGZyZWUgKGxvY2FsLmFkZHJlc3MpOwotICAgICAgICBpZiAobG9jYWwubnVt YmVyKSBmcmVlIChsb2NhbC5udW1iZXIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAg aWYgKHJlYWRfY291bnRlZF9zdHJpbmcgKCZsb2NhbC5kYXRhX2xlbmd0aCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmxvY2FsLmRhdGEsIGF1dGhfZmlsZSkgPT0gMCkgewotICAgICAg ICBpZiAobG9jYWwuYWRkcmVzcykgZnJlZSAobG9jYWwuYWRkcmVzcyk7Ci0gICAgICAgIGlmIChs b2NhbC5udW1iZXIpIGZyZWUgKGxvY2FsLm51bWJlcik7Ci0gICAgICAgIGlmIChsb2NhbC5uYW1l KSBmcmVlIChsb2NhbC5uYW1lKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldCA9 IChYYXV0aCAqKSBtYWxsb2MgKHNpemVvZiAoWGF1dGgpKTsKLSAgICBpZiAoIXJldCkgewotICAg ICAgICBpZiAobG9jYWwuYWRkcmVzcykgZnJlZSAobG9jYWwuYWRkcmVzcyk7Ci0gICAgICAgIGlm IChsb2NhbC5udW1iZXIpIGZyZWUgKGxvY2FsLm51bWJlcik7Ci0gICAgICAgIGlmIChsb2NhbC5u YW1lKSBmcmVlIChsb2NhbC5uYW1lKTsKLSAgICAgICAgaWYgKGxvY2FsLmRhdGEpIHsKLSAgICAg ICAgICAgIGJ6ZXJvIChsb2NhbC5kYXRhLCBsb2NhbC5kYXRhX2xlbmd0aCk7Ci0gICAgICAgICAg ICBmcmVlIChsb2NhbC5kYXRhKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLSAgICB9 Ci0gICAgKnJldCA9IGxvY2FsOwotICAgIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQKLXdy aXRlX3Nob3J0IChzLCBmaWxlKQotdW5zaWduZWQgc2hvcnQgIHM7Ci1GSUxFICAgICAgICAgICAg KmZpbGU7Ci17Ci0gICAgdW5zaWduZWQgY2hhciAgIGZpbGVfc2hvcnRbMl07Ci0KLSAgICBmaWxl X3Nob3J0WzBdID0gKHMgJiAodW5zaWduZWQpMHhmZjAwKSA+PiA4OwotICAgIGZpbGVfc2hvcnRb MV0gPSBzICYgMHhmZjsKLSAgICBpZiAoZndyaXRlICgoY2hhciAqKSBmaWxlX3Nob3J0LCAoaW50 KSBzaXplb2YgKGZpbGVfc2hvcnQpLCAxLCBmaWxlKSAhPSAxKQotICAgICAgICByZXR1cm4gMDsK LSAgICByZXR1cm4gMTsKLX0KLQotc3RhdGljIGludAotd3JpdGVfY291bnRlZF9zdHJpbmcgKGNv dW50LCBzdHJpbmcsIGZpbGUpCi11bnNpZ25lZCBzaG9ydCAgY291bnQ7Ci1jaGFyICAgICpzdHJp bmc7Ci1GSUxFICAgICpmaWxlOwotewotICAgIGlmICh3cml0ZV9zaG9ydCAoY291bnQsIGZpbGUp ID09IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChmd3JpdGUgKHN0cmluZywgKGludCkg c2l6ZW9mIChjaGFyKSwgKGludCkgY291bnQsIGZpbGUpICE9IGNvdW50KQotICAgICAgICByZXR1 cm4gMDsKLSAgICByZXR1cm4gMTsKLX0KLQotaW50Ci1YYXVXcml0ZUF1dGggKGF1dGhfZmlsZSwg YXV0aCkKLUZJTEUgICAgKmF1dGhfZmlsZTsKLVhhdXRoICAgKmF1dGg7Ci17Ci0gICAgaWYgKHdy aXRlX3Nob3J0IChhdXRoLT5mYW1pbHksIGF1dGhfZmlsZSkgPT0gMCkKLSAgICAgICAgcmV0dXJu IDA7Ci0gICAgaWYgKHdyaXRlX2NvdW50ZWRfc3RyaW5nIChhdXRoLT5hZGRyZXNzX2xlbmd0aCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGgtPmFkZHJlc3MsIGF1dGhfZmlsZSkg PT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKHdyaXRlX2NvdW50ZWRfc3RyaW5nIChh dXRoLT5udW1iZXJfbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aC0+ bnVtYmVyLCBhdXRoX2ZpbGUpID09IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICh3cml0 ZV9jb3VudGVkX3N0cmluZyAoYXV0aC0+bmFtZV9sZW5ndGgsIGF1dGgtPm5hbWUsIGF1dGhfZmls ZSkgPT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKHdyaXRlX2NvdW50ZWRfc3RyaW5n IChhdXRoLT5kYXRhX2xlbmd0aCwgYXV0aC0+ZGF0YSwgYXV0aF9maWxlKSA9PSAwKQotICAgICAg ICByZXR1cm4gMDsKLSAgICByZXR1cm4gMTsKLX0KLQotI2lmZGVmIEtSQjUKLSNpZmRlZiBLNV9Y QVVUSAotLyoKLSAqIGZ1bmN0aW9ucyB0byBlbmNvZGUvZGVjb2RlIEtlcmJlcm9zIFY1IHByaW5j aXBhbHMKLSAqIGludG8gc29tZXRoaW5nIHRoYXQgY2FuIGJlIHJlYXNvbmFibGUgc3Bld2VkIG92 ZXIKLSAqIHRoZSB3aXJlCi0gKgotICogQXV0aG9yOiBUb20gWXUgPHRseXVATUlULkVEVT4KLSAq Ci0gKiBTdGlsbCBuZWVkcyB0byBiZSBmaXhlZCB1cCB3cnQgc2lnbmVkL3Vuc2lnbmVkIGxlbmd0 aHMsIGJ1dCB3ZSdsbCB3b3JyeQotICogYWJvdXQgdGhhdCBsYXRlci4KLSAqLwotCi0vKgotICog WGF1S3JiNUVuY29kZQotICoKLSAqIHRoaXMgZnVuY3Rpb24gZW5jb2RlcyB0aGUgcHJpbmNpcGFs IHBhc3NlZCB0byBpdCBpbiBhIGZvcm1hdCB0aGF0IGNhbgotICogZWFzaWx5IGJlIGRlYWx0IHdp dGggYnkgc3R1ZmZpbmcgaXQgaW50byBhbiBYIHBhY2tldC4gIEVuY29kaW5nIGlzIGFzCi0gKiBm b2xsb3dzOgotICogICBsZW5ndGggY291bnQgb2YgdGhlIHJlYWxtIG5hbWUKLSAqICAgcmVhbG0K LSAqICAgY29tcG9uZW50IGNvdW50Ci0gKiAgIGxlbmd0aCBvZiBjb21wb25lbnQKLSAqICAgYWN0 dWFsIHByaW5jaXBhbCBjb21wb25lbnQKLSAqICAgZXRjLi4uLgotICoKLSAqIE5vdGUgdGhhdCB0 aGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBhIGh1bmsgb2YgbWVtb3J5LCB3aGljaCBtdXN0IGJlCi0g KiBmcmVlZCB0byBhdm9pZCBuYXN0eSBtZW1vcnkgbGVhayB0eXBlIHRoaW5ncy4gIEFsbCBjb3Vu dHMgYXJlCi0gKiBieXRlLXN3YXBwZWQgaWYgbmVlZGVkLiAoZXhjZXB0IGZvciB0aGUgdG90YWwg bGVuZ3RoIHJldHVybmVkKQotICoKLSAqIG5ldmVybWluZC4uLi4gc3R1ZmZpbmcgdGhlIGVuY29k ZWQgcGFja2V0IGluIG5ldCBieXRlIG9yZGVyIGp1c3QgdG8KLSAqIGFsd2F5cyBkbyB0aGUgcmln aHQgdGhpbmcuICBEb24ndCBoYXZlIHRvIGZyb2Igd2l0aCBhbGlnbm1lbnQgdGhhdCB3YXkuCi0g Ki8KLWludAotWGF1S3JiNUVuY29kZShwcmluYywgb3V0YnVmKQotICAgIGtyYjVfcHJpbmNpcGFs IHByaW5jOyAgICAgICAvKiBwcmluY2lwYWwgdG8gZW5jb2RlICovCi0gICAga3JiNV9kYXRhICpv dXRidWY7ICAgICAgICAgIC8qIG91dHB1dCBidWZmZXIgKi8KLXsKLSAgICBDQVJEMTYgaSwgbnVt cGFydHMsIHRvdGxlbiA9IDAsIHBsZW4sIHJsZW47Ci0gICAgY2hhciAqY3AsICpwZGF0YTsKLQot ICAgIHJsZW4gPSBrcmI1X3ByaW5jX3JlYWxtKHByaW5jKS0+bGVuZ3RoOwotICAgIG51bXBhcnRz ID0ga3JiNV9wcmluY19zaXplKHByaW5jKTsKLSAgICB0b3RsZW4gPSAyICsgcmxlbiArIDI7ICAg ICAgLyogaW5jbHVkZSByb29tIGZvciByZWFsbSBsZW5ndGgKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYW5kIGNvbXBvbmVudCBjb3VudCAqLwotICAgIGZvciAoaSA9IDA7IGkg PCBudW1wYXJ0czsgaSsrKQotICAgICAgICB0b3RsZW4gKz0ga3JiNV9wcmluY19jb21wb25lbnQo cHJpbmMsIGkpLT5sZW5ndGggKyAyOwotICAgIC8qIGFkZCAyIGJ5dGVzIGVhY2ggdGltZSBmb3Ig bGVuZ3RoICovCi0gICAgaWYgKChvdXRidWYtPmRhdGEgPSAoY2hhciAqKW1hbGxvYyh0b3RsZW4p KSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgY3AgPSBvdXRidWYtPmRhdGE7Ci0g ICAgKmNwKysgPSAoY2hhcikoKGludCkoMHhmZjAwICYgcmxlbikgPj4gOCk7Ci0gICAgKmNwKysg PSAoY2hhcikoMHgwMGZmICYgcmxlbik7Ci0gICAgbWVtY3B5KGNwLCBrcmI1X3ByaW5jX3JlYWxt KHByaW5jKS0+ZGF0YSwgcmxlbik7ICAgIC8qIHNhZmUgKi8KLSAgICBjcCArPSBybGVuOwotICAg ICpjcCsrID0gKGNoYXIpKChpbnQpKDB4ZmYwMCAmIG51bXBhcnRzKSA+PiA4KTsKLSAgICAqY3Ar KyA9IChjaGFyKSgweDAwZmYgJiBudW1wYXJ0cyk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG51bXBh cnRzOyBpKyspCi0gICAgewotICAgICAgICBwbGVuID0ga3JiNV9wcmluY19jb21wb25lbnQocHJp bmMsIGkpLT5sZW5ndGg7Ci0gICAgICAgIHBkYXRhID0ga3JiNV9wcmluY19jb21wb25lbnQocHJp bmMsIGkpLT5kYXRhOwotICAgICAgICAqY3ArKyA9IChjaGFyKSgoaW50KSgweGZmMDAgJiBwbGVu KSA+PiA4KTsKLSAgICAgICAgKmNwKysgPSAoY2hhcikoMHgwMGZmICYgcGxlbik7Ci0gICAgICAg IG1lbWNweShjcCwgcGRhdGEsIHBsZW4pOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNhZmUg Ki8KLSAgICAgICAgY3AgKz0gcGxlbjsKLSAgICB9Ci0gICAgb3V0YnVmLT5sZW5ndGggPSB0b3Rs ZW47Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBYYXVLcmI1RGVjb2RlCi0gKgotICogVGhp cyBmdW5jdGlvbiBlc3NlbnRpYWxseSByZXZlcnNlcyB3aGF0IFhhdUtyYjVFbmNvZGUgZG9lcy4K LSAqIHJldHVybiB2YWx1ZTogMCBpZiBva2F5LCAtMSBpZiBtYWxsb2MgZmFpbHMsIC0yIGlmIGlu YnVmIGZvcm1hdCBiYWQKLSAqLwotaW50Ci1YYXVLcmI1RGVjb2RlKGluYnVmLCBwcmluYykKLSAg ICBrcmI1X2RhdGEgaW5idWY7Ci0gICAga3JiNV9wcmluY2lwYWwgKnByaW5jOwotewotICAgIENB UkQxNiBpLCBudW1wYXJ0cywgcGxlbiwgcmxlbjsKLSAgICBDQVJEOCAqY3AsICpwZGF0YTsKLQot ICAgIGlmIChpbmJ1Zi5sZW5ndGggPCA0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIC0yOwotICAg IH0KLSAgICAqcHJpbmMgPSAoa3JiNV9wcmluY2lwYWwpbWFsbG9jKHNpemVvZiAoa3JiNV9wcmlu Y2lwYWxfZGF0YSkpOwotICAgIGlmICgqcHJpbmMgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0x OwotICAgIGJ6ZXJvKCpwcmluYywgc2l6ZW9mIChrcmI1X3ByaW5jaXBhbF9kYXRhKSk7Ci0gICAg Y3AgPSAoQ0FSRDggKilpbmJ1Zi5kYXRhOwotICAgIHJsZW4gPSAqY3ArKyA8PCA4OwotICAgIHJs ZW4gfD0gKmNwKys7Ci0gICAgaWYgKGluYnVmLmxlbmd0aCA8IDQgKyAoaW50KXJsZW4gKyAyKQot ICAgIHsKLSAgICAgICAga3JiNV9mcmVlX3ByaW5jaXBhbCgqcHJpbmMpOwotICAgICAgICByZXR1 cm4gLTI7Ci0gICAgfQotICAgIGtyYjVfcHJpbmNfcmVhbG0oKnByaW5jKS0+ZGF0YSA9IChjaGFy ICopbWFsbG9jKHJsZW4pOwotICAgIGlmIChrcmI1X3ByaW5jX3JlYWxtKCpwcmluYyktPmRhdGEg PT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIGtyYjVfZnJlZV9wcmluY2lwYWwoKnByaW5jKTsKLSAg ICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBrcmI1X3ByaW5jX3JlYWxtKCpwcmluYyktPmxl bmd0aCA9IHJsZW47Ci0gICAgbWVtY3B5KGtyYjVfcHJpbmNfcmVhbG0oKnByaW5jKS0+ZGF0YSwg Y3AsIHJsZW4pOyAgIC8qIHNhZmUgKi8KLSAgICBjcCArPSBybGVuOwotICAgIG51bXBhcnRzID0g KmNwKysgPDwgODsKLSAgICBudW1wYXJ0cyB8PSAqY3ArKzsKLSAgICBrcmI1X3ByaW5jX25hbWUo KnByaW5jKSA9Ci0gICAgICAgIChrcmI1X2RhdGEgKiltYWxsb2MobnVtcGFydHMgKiBzaXplb2Yg KGtyYjVfZGF0YSkpOwotICAgIGlmIChrcmI1X3ByaW5jX25hbWUoKnByaW5jKSA9PSBOVUxMKQot ICAgIHsKLSAgICAgICAga3JiNV9mcmVlX3ByaW5jaXBhbCgqcHJpbmMpOwotICAgICAgICByZXR1 cm4gLTE7Ci0gICAgfQotICAgIGtyYjVfcHJpbmNfc2l6ZSgqcHJpbmMpID0gMDsKLSAgICBmb3Ig KGkgPSAwOyBpIDwgbnVtcGFydHM7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChjcCArIDIgPiAo Q0FSRDggKilpbmJ1Zi5kYXRhICsgaW5idWYubGVuZ3RoKQotICAgICAgICB7Ci0gICAgICAgICAg ICBrcmI1X2ZyZWVfcHJpbmNpcGFsKCpwcmluYyk7Ci0gICAgICAgICAgICByZXR1cm4gLTI7Ci0g ICAgICAgIH0KLSAgICAgICAgcGxlbiA9ICpjcCsrIDw8IDg7Ci0gICAgICAgIHBsZW4gfD0gKmNw Kys7Ci0gICAgICAgIGlmIChjcCArIHBsZW4gPiAoQ0FSRDggKilpbmJ1Zi5kYXRhICsgaW5idWYu bGVuZ3RoKQotICAgICAgICB7Ci0gICAgICAgICAgICBrcmI1X2ZyZWVfcHJpbmNpcGFsKCpwcmlu Yyk7Ci0gICAgICAgICAgICByZXR1cm4gLTI7Ci0gICAgICAgIH0KLSAgICAgICAgcGRhdGEgPSAo Q0FSRDggKiltYWxsb2MocGxlbik7Ci0gICAgICAgIGlmIChwZGF0YSA9PSBOVUxMKQotICAgICAg ICB7Ci0gICAgICAgICAgICBrcmI1X2ZyZWVfcHJpbmNpcGFsKCpwcmluYyk7Ci0gICAgICAgICAg ICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAga3JiNV9wcmluY19jb21wb25lbnQoKnBy aW5jLCBpKS0+ZGF0YSA9IChjaGFyICopcGRhdGE7Ci0gICAgICAgIGtyYjVfcHJpbmNfY29tcG9u ZW50KCpwcmluYywgaSktPmxlbmd0aCA9IHBsZW47Ci0gICAgICAgIG1lbWNweShwZGF0YSwgY3As IHBsZW4pOyAgICAgICAgLyogc2FmZSAqLwotICAgICAgICBjcCArPSBwbGVuOwotICAgICAgICBr cmI1X3ByaW5jX3NpemUoKnByaW5jKSsrOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLSNlbmRp ZiAvKiBLNV9YQVVUSCAqLwotI2VuZGlmIC8qIEtSQjUgKi8KLSNlbmRpZiAvKiBDS19GT1JXQVJE X1ggKi8KLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotCi0vKiBDIEsgXyBBIFUgVCBI IF8gSSBOIEkgVAotICogSW5pdGlhbGl6ZSB0aGUgS2VyYmVyb3Mgc3lzdGVtIGZvciBhIHBlbmRp bmcgY29ubmVjdGlvbgotICogICBob3N0bmFtZSAtIGEgcmV2ZXJzZSBETlMgbG9va3VwIG9mIHRo ZSBob3N0bmFtZSB3aGVuIHBvc3NpYmxlCi0gKiAgIGlwYWRkciAgIC0gdGhlIGlwIGFkZHJlc3Mg b2YgdGhlIGhvc3QKLSAqICAgdXNlcm5hbWUgLSB0aGUgbmFtZSB0aGUgdXNlciB3YW50cyB0byBj b25uZWN0IHVuZGVyIG5vdCBuZWNlc3NhcmlseQotICogICAgICAgICAgICAgIHRoZSBzYW1lIGFz IHByaW5jaXBhbAotICogICBzb2NrZXQgICAtIHRoZSBzb2NrZXQgaGFuZGxlICh0dHlmZCBpbiBL ZXJtaXQgc3BlYWspCi0gKgotICogUmV0dXJuczogMSBvbiBzdWNjZXNzIGFuZCAwIG9uIGZhaWx1 cmUKLSAqLwotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotY2tfYXV0aF9pbml0KCBjaGFyICogaG9z dG5hbWUsIGNoYXIgKiBpcGFkZHIsIGNoYXIgKiB1c2VybmFtZSwgaW50IHNvY2tldCApCi0jZWxz ZSAvKiBDS19BTlNJQyAqLwotY2tfYXV0aF9pbml0KCBob3N0bmFtZSwgaXBhZGRyLCB1c2VybmFt ZSwgc29ja2V0ICkKLSAgICBjaGFyICogaG9zdG5hbWU7IGNoYXIgKiBpcGFkZHI7IGNoYXIgKnVz ZXJuYW1lOyBpbnQgc29ja2V0OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0jaWZkZWYgQ0tf QVVUSEVOVElDQVRJT04KLSNpZmRlZiBPUzIKLSAgICBpZiAoICFja19zZWN1cml0eV9sb2FkZGxs KCkgKSB7Ci0gICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9BVVRIRU5USUNBVElPTikgPSBU Tl9OR19SRjsKLSAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID0g VE5fTkdfUkY7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0j ZW5kaWYgLyogQ0tfQVVUSEVOVElDQUlUT04gKi8KLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAg aWYgKCAhIWNrX2NyeXB0X2lzX2luc3RhbGxlZCgpICkgewotICAgICAgICBURUxPUFRfTUVfTU9E RShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsKLSAgICAgICAgVEVMT1BUX1VfTU9ERShU RUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfRU5DUllQ VElPTiAqLwotCi0gICAgaWYgKCFob3N0bmFtZSkgaG9zdG5hbWUgPSAiIjsKLSAgICBpZiAoIWlw YWRkcikgaXBhZGRyID0gIiI7Ci0gICAgaWYgKCF1c2VybmFtZSkgdXNlcm5hbWUgPSAiIjsKLQot ICAgIGRlYnVnKEYxMTAsImNrX2F1dGhfaW5pdCBVc2VybmFtZSIsdXNlcm5hbWUsMCk7Ci0gICAg ZGVidWcoRjExMCwiY2tfYXV0aF9pbml0IEhvc3RuYW1lIixob3N0bmFtZSwwKTsKLSAgICBkZWJ1 ZyhGMTEwLCJja19hdXRoX2luaXQgSXBhZGRyIixpcGFkZHIsMCk7Ci0KLSAgICBja3N0cm5jcHko IHN6VXNlck5hbWUsIHVzZXJuYW1lLCBVSURCVUZMRU4gKTsKLSAgICBja3N0cm5jcHkoIHN6SG9z dE5hbWUsIGhvc3RuYW1lLCBVSURCVUZMRU4gKTsKLSAgICBja3N0cm5jcHkoIHN6SVAsIGlwYWRk ciwgMTYgKTsKLSAgICBzelVzZXJOYW1lUmVxdWVzdGVkWzBdID0gJ1wwJzsKLSAgICBzelVzZXJO YW1lQXV0aGVudGljYXRlZFswXSA9ICdcMCc7Ci0gICAgdmFsaWRVc2VyID0gQVVUSF9SRUpFQ1Q7 Ci0gICAgYWNjZXB0X2NvbXBsZXRlID0gMDsKLSAgICBhdXRoZW50aWNhdGlvbl92ZXJzaW9uID0g QVVUSFRZUEVfTlVMTDsKLQotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0gICAgYXV0aF9ob3cg PSAwOwotICAgIGF1dGhfY3J5cHQgPSAwOwotICAgIGF1dGhfZndkID0gMDsKLSAgICBtdXR1YWxf Y29tcGxldGUgPSAwOwotICAgIGlmICggc3N0ZWxuZXQgKQotICAgICAgICBzdHJfZGF0YVszXSA9 IFRFTFFVQUxfUkVQTFk7Ci0gICAgZWxzZQotICAgICAgICBzdHJfZGF0YVszXSA9IFRFTFFVQUxf SVM7Ci0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLQotI2lmZGVmIENLX1NSUAotICAg IHNycF93YWl0cmVzcCA9IDA7Ci0jZW5kaWYgLyogU1JQICovCi0KLSNpZmRlZiBDS19LRVJCRVJP UwotI2lmZGVmIEtSQjUKLSAgICAvKiBmcmVlIHByZXZpb3VzIHJldF9jcmVkICAqLwotICAgIGlm ICggcmV0X2NyZWQgKSB7Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotI2lmZGVmIEhFSU1EQUwKLSAg ICAgICAgaWYgKCBrNV9zZXNzaW9uX2tleSA9PSAmcmV0X2NyZWQtPnNlc3Npb24pCi0gICAgICAg ICAgICBrNV9zZXNzaW9uX2tleSA9IE5VTEw7Ci0jZWxzZSAvKiBIRUlNREFMICovCi0gICAgICAg IGlmICggazVfc2Vzc2lvbl9rZXkgPT0gJnJldF9jcmVkLT5rZXlibG9jaykKLSAgICAgICAgICAg IGs1X3Nlc3Npb25fa2V5ID0gTlVMTDsKLSNlbmRpZiAvKiBIRUlNREFMICovCi0jZW5kaWYgLyog Q0tfRU5DUllQVElPTiAqLwotICAgICAgICBrcmI1X2ZyZWVfY3JlZHMoazVfY29udGV4dCwgcmV0 X2NyZWQpOwotICAgICAgICByZXRfY3JlZCA9IE5VTEw7Ci0gICAgfQotICAgIGlmIChrNV90aWNr ZXQpIHsKLSAgICAgICAga3JiNV9mcmVlX3RpY2tldChrNV9jb250ZXh0LCBrNV90aWNrZXQpOwot ICAgICAgICBrNV90aWNrZXQgPSBOVUxMOwotICAgIH0KLSAgICAvKiBhbmQgY29udGV4dCAqLwot ICAgIGlmICggazVfY29udGV4dCApIHsKLSAgICAgICAga3JiNV9mcmVlX2NvbnRleHQoazVfY29u dGV4dCk7Ci0gICAgICAgIGs1X2NvbnRleHQgPSBOVUxMOwotICAgIH0KLQotICAgIC8qIGNyZWF0 ZSBrNV9jb250ZXh0ICovCi0gICAga3JiNV9pbml0X2NvbnRleHQoJms1X2NvbnRleHQpOwotI2lm bmRlZiBNSVRfQ1VSUkVOVAotI2lmbmRlZiBOT19LUkI1X0lOSVRfRVRTCi0vKiBUaGlzIHJvdXRp bmUgaXMgYSBuby1vcCBpbiBLZXJiZXJvcyAxLjQueCBhbmQgbGF0ZXIgKi8KLS8qIGFuZCBpbiBz b21lIGluc3RhbGxhdGlvbnMgaXQgY2FuJ3QgYmUgZm91bmQgaW4gd2hpY2ggY2FzZSAqLwotLyog ZGVmaW5lIE5PX0tSQjVfSU5JVF9FVFMgKi8KLSAgICBpZiAoazVfY29udGV4dCkKLSAgICAgICAg a3JiNV9pbml0X2V0cyhrNV9jb250ZXh0KTsKLSNlbmRpZgkvKiBOT19LUkI1X0lOSVRfRVRTICov Ci0jZW5kaWYgLyogTUlUX0NVUlJFTlQgKi8KLSNpZmRlZiBLUkI1MjRfQ09OVgotICAgIGtyYjUy NF9pbml0X2V0cyhrNV9jb250ZXh0KTsKLSNlbmRpZiAvKiBLUkI1MjRfQ09OViAqLwotICAgIG1l bXNldCgmazVfYXV0aCwwLHNpemVvZihrNV9hdXRoKSk7Ci0gICAgaWYgKGF1dGhfY29udGV4dCkg ewotICAgICAgICBrcmI1X2F1dGhfY29uX2ZyZWUoazVfY29udGV4dCwgYXV0aF9jb250ZXh0KTsK LSAgICAgICAgYXV0aF9jb250ZXh0ID0gMDsKLSAgICB9Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgot ICAgIGlmIChrNV9zZXNzaW9uX2tleSkgewotICAgICAgICBrcmI1X2ZyZWVfa2V5YmxvY2soazVf Y29udGV4dCwgazVfc2Vzc2lvbl9rZXkpOwotICAgICAgICBrNV9zZXNzaW9uX2tleSA9IDA7Ci0g ICAgfQotI2VuZGlmIC8qIEVOQ1JZUFRJT04gKi8KLSNpZmRlZiBUTFNfVkVSSUZZCi0gICAga3Ji NV90bHNfdmVyaWZpZWQgPSAwOwotI2VuZGlmIC8qIFRMU19WRVJJRlkgKi8KLSNlbmRpZiAvKiBL UkI1ICovCi0KLSNpZmRlZiBLUkI0Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgIC8qIEluaXRp YWxpemUgYnVmZmVycyB1c2VkIGZvciBhdXRoZW50aWNhdGlvbiAqLwotICAgIG1lbXNldCgmazRf c2Vzc2lvbl9rZXksIDAsIHNpemVvZihrNF9zZXNzaW9uX2tleSkpOwotICAgIG1lbXNldCgmazRf Y2hhbGxlbmdlLCAwLCBzaXplb2YoazRfY2hhbGxlbmdlKSk7Ci0jZW5kaWYgLyogQ0tfRU5DUllQ VElPTiAqLwotI2VuZGlmIC8qIEtSQjQgKi8KLQotI2lmZGVmIFJMT0dDT0RFCi0gICAgcmxvZ19l bmNyeXB0ID0gMDsKLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotICAgIG5zdG9yZWQgPSAwOwotICAg IHN0b3JlX3B0ciA9IHN0b3JhZ2U7Ci0gICAgbWVtc2V0KHN0b3JhZ2UsMCxzaXplb2Yoc3RvcmFn ZSkpOwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0KLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0g ICAga3N0cmVhbV9kZXN0cm95KCk7Ci0gICAgaWYgKCFrc3RyZWFtX2NyZWF0ZV9mcm9tX2ZkKHNv Y2tldCwgTlVMTCkpCi0gICAgICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9O ICovCi0gICAgcmV0dXJuKDEpOwotfQotCi12b2lkCi1hdXRoX2ZpbmlzaGVkKHJlc3VsdCkgaW50 IHJlc3VsdDsgewotICAgIGV4dGVybiBjaGFyIHVpZGJ1ZltdOwotICAgIGV4dGVybiBpbnQgc3N0 ZWxuZXQ7Ci0KLSAgICB2YWxpZFVzZXIgPSByZXN1bHQ7Ci0gICAgc3dpdGNoIChyZXN1bHQpIHsK LSAgICBjYXNlIEFVVEhfUkVKRUNUOiAgICAgICAgICAgLyogUmVqZWN0ZWQgKi8KLSAgICAgICAg aWYgKHNzdGVsbmV0KQotICAgICAgICAgICAgdWlkYnVmWzBdID0gJ1wwJzsKLSAgICAgICAgYXV0 aGVudGljYXRpb25fdmVyc2lvbiA9IEFVVEhUWVBFX05VTEw7Ci0gICAgICAgIGJyZWFrOwotICAg IGNhc2UgQVVUSF9VTktOT1dOOiAgICAgICAgICAvKiBXZSBkb24ndCBrbm93IHdobyBoZSBpcywg YnV0IGhlJ3Mgb2theSAqLwotICAgICAgICBpZiAoc3N0ZWxuZXQpCi0gICAgICAgICAgICBzdHJj cHkodWlkYnVmLCIodW5rbm93bikiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBVVRIX09U SEVSOiAgICAgICAgICAgIC8qIFdlIGtub3cgaGltLCBidXQgbm90IGhpcyBuYW1lICovCi0gICAg ICAgIGlmIChzc3RlbG5ldCkKLSAgICAgICAgICAgIHN0cmNweSh1aWRidWYsIihvdGhlcikiKTsK LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBVVRIX1VTRVI6ICAgICAgICAgICAgIC8qIFdlIGtu b3cgaGUgbmFtZSAqLwotICAgIGNhc2UgQVVUSF9WQUxJRDogICAgICAgICAgICAvKiBXZSBrbm93 IGhpbSwgYW5kIGhlIG5lZWRzIG5vIHBhc3N3b3JkICovCi0gICAgICAgIGlmIChzc3RlbG5ldCkK LSAgICAgICAgICAgIHN0cmNweSh1aWRidWYsc3pVc2VyTmFtZVJlcXVlc3RlZCk7Ci0gICAgICAg IGJyZWFrOwotICAgIH0KLX0KLQotI2lmZGVmIE1BQ09TWAotI2lmZGVmIEtSQjUKLQota3JiNV9l cnJvcl9jb2RlCi1ja19rcmI1X3dyaXRlX21lc3NhZ2Uoa3JiNV9jb250ZXh0IGNvbiwga3JiNV9w b2ludGVyIHB0ciwga3JiNV9kYXRhICpkYXRhKQotewotICAgIGludCBmZCA9ICooKGludCAqKXB0 cik7Ci0gICAgbG9uZyBtc2dsZW47Ci0KLSAgICBtc2dsZW4gPSBodG9ubChkYXRhLT5sZW5ndGgp OwotICAgIGlmIChuZXRfd3JpdGUoZmQsKENIQVIgKikmbXNnbGVuLDQpICE9IDQpIHsKLSAgICAg ICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgaWYgKCBkYXRhLT5sZW5ndGggKSB7Ci0gICAgICAg IGlmIChuZXRfd3JpdGUoZmQsZGF0YS0+ZGF0YSxkYXRhLT5sZW5ndGgpICE9IGRhdGEtPmxlbmd0 aCkgewotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1 cm4oMCk7Ci19Ci0KLWtyYjVfZXJyb3JfY29kZQotY2tfa3JiNV9yZWFkX21lc3NhZ2UoIGtyYjVf Y29udGV4dCBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgIGtyYjVfcG9pbnRlciBwdHIs Ci0gICAgICAgICAgICAgICAgICAgICAga3JiNV9kYXRhICogZGF0YSkKLXsKLSAgICBleHRlcm4g aW50IHR0eWZkOwotICAgIGludCBmZCA9ICooKGludCAqKXB0cik7Ci0gICAgbG9uZyBtc2dsZW47 Ci0gICAgY2hhciAqcDsKLSAgICBpbnQgaSwgcmM7Ci0KLSAgICBpZiAobmV0X3JlYWQoZmQsJm1z Z2xlbiw0KSA8IDApCi0gICAgICAgIHJldHVybigtMSk7Ci0KLSAgICBkYXRhLT5sZW5ndGggPSBu dG9obChtc2dsZW4pOwotICAgIGlmICggZGF0YS0+bGVuZ3RoICkgewotICAgICAgICBkYXRhLT5k YXRhID0gbWFsbG9jKGRhdGEtPmxlbmd0aCk7Ci0KLSAgICAgICAgaSA9IDA7Ci0gICAgICAgIHdo aWxlICggaSA8IGRhdGEtPmxlbmd0aCApIHsKLSAgICAgICAgICAgIGlmICgocmMgPSBuZXRfcmVh ZChmZCwmZGF0YS0+ZGF0YVtpXSwoZGF0YS0+bGVuZ3RoIC0gaSkpKSA8IDApCi0gICAgICAgICAg ICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgIGkgKz0gcmM7Ci0gICAgICAgIH0KLSAgICB9 Ci0gICAgcmV0dXJuKDApOwotfQotI2VuZGlmIC8qIEtSQjUgKi8KLSNlbmRpZiAvKiBNQUNPU1gg Ki8KLSNlbmRpZiAvKiBDS19TRUNVUklUWSAqLwotCi0KCmRpZmYgLS1naXQgYS9ja2VybWl0LTku MC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWF0aC5oIGIvY2tlcm1pdC05LjAuMzAyLWJ1 aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VhdGguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggOTE0YTA2Zi4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05 LjAuMzAyL2NrdWF0aC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjM1ICswLDAgQEAKLS8qICBDIEsg VSBBIFQgSCAuIEggLS0gICJDLUtlcm1pdCB0byBBdXRoZW50aWNhdGlvbiIgaW50ZXJmYWNlICAq LwotCi0vKgotICBBdXRob3I6IEplZmZyZXkgRSBBbHRtYW4gPGphbHRtYW5Ac2VjdXJlLWVuZHBv aW50cy5jb20+LAotICAgICAgICAgICAgU2VjdXJlIEVuZHBvaW50cyBJbmMuLCBOZXcgWW9yayBD aXR5LgotCi0gIENvcHlyaWdodCAoQykgMTk5OSwgMjAwOSwKLSAgICBUcnVzdGVlcyBvZiBDb2x1 bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgotICAgIEFsbCByaWdodHMg cmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCi0gICAg Y29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQg cGVybWlzc2lvbnMuCi0qLwotCi0vKgotICogQmFzZWQgb24gYSBjb25jYXRlbmF0aW9uIG9mIGFs bCBuZWNlc3NhcnkgaW5jbHVkZSBmaWxlcyBkaXN0cmlidXRlZCB3aXRoCi0gKiB0aGUgS2VyYmVy b3MgNSBOVCBBbHBoYSAyIFRlbG5ldCBwYWNrYWdlIGZyb20gTUlULgotICovCi0KLSNpZm5kZWYg S1JCNV9LRVJNSVRfSAotI2RlZmluZSBLUkI1X0tFUk1JVF9ICi0KLSNpZm5kZWYgQk9PTAotI2Rl ZmluZSBCT09MIGludAotI2VuZGlmCi0KLS8qIEhlYWRlciBmaWxlIGZvciBlbmNyeXB0ZWQtc3Ry ZWFtIGxpYnJhcnkuCi0gKiBXcml0dGVuIGJ5IEtlbiBSYWVidXJuIChSYWVidXJuQEN5Z251cy5D T00pLgotICogQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTk0IGJ5IEN5Z251cyBTdXBwb3J0 LgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZAotICogZGlzdHJp YnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2Ug YW5kCi0gKiB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUg YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQg Ym90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kCi0gKiB0aGlzIHBlcm1pc3Npb24gbm90aWNl IGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uCi0gKiBDeWdudXMgU3VwcG9ydCBt YWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mCi0gKiB0aGlz IHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91 dCBleHByZXNzCi0gKiBvciBpbXBsaWVkIHdhcnJhbnR5LgotICovCi0KLSNpZm5kZWYgSzVTVFJF QU1fSAotI2RlZmluZSBLNVNUUkVBTV9ICi0KLXR5cGVkZWYgdm9pZCAqa3N0cmVhbV9wdHI7ICAg ICAgICAgICAgICAgICAgICAgIC8qIERhdGEgc2VuZCBvbiB0aGUga3N0cmVhbSAqLwotc3RydWN0 IGtzdHJlYW1fZGF0YV9ibG9jayB7Ci0gIGtzdHJlYW1fcHRyIHB0cjsKLSAgc2l6ZV90IGxlbmd0 aDsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IGtzdHJlYW1faW50IHsgICAgICAgICAgICAgICAgICAg IC8qIE9iamVjdCB3ZSBwYXNzIGFyb3VuZCAqLwotICAgIGludCBmZDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBPcGVuIHNvY2tldCBkZXNjcmlwdG9yICovCi0gICAg aW50ICgqZW5jcnlwdCkoc3RydWN0IGtzdHJlYW1fZGF0YV9ibG9jayAqLCAvKiBvdXRwdXQgKi8K LSAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3N0cmVhbV9kYXRhX2Jsb2NrICopOyAvKiBpbnB1 dCAqLwotICAgIGludCBlbmNyeXB0X3R5cGU7Ci0gICAgaW50ICgqZGVjcnlwdCkoc3RydWN0IGtz dHJlYW1fZGF0YV9ibG9jayAqLCAvKiBvdXRwdXQgKi8KLSAgICAgICAgICAgICAgICAgICBzdHJ1 Y3Qga3N0cmVhbV9kYXRhX2Jsb2NrICopOyAvKiBpbnB1dCAqLwotICAgIGludCBkZWNyeXB0X3R5 cGU7Ci19ICprc3RyZWFtOwotCi0vKiBQcm90b3R5cGVzICovCi0KLWludCAga3N0cmVhbV9kZXN0 cm95KCk7Ci12b2lkIGtzdHJlYW1fc2V0X2J1ZmZlcl9tb2RlKGludCk7Ci1pbnQgIGtzdHJlYW1f Y3JlYXRlX2Zyb21fZmQoaW50IGZkLCBrc3RyZWFtX3B0cik7Ci1pbnQga3N0cmVhbV93cml0ZSh2 b2lkICosIHNpemVfdCk7Ci1pbnQga3N0cmVhbV9yZWFkKHZvaWQgKiwgc2l6ZV90KTsKLQotI2Vu ZGlmIC8qIEs1U1RSRUFNX0ggKi8KLQotLyoKLSAqIEltcGxlbWVudHMgVGVsbmV0IGF1dGhlbnRp Y2F0aW9uIGFuZCBlbmNyeXB0aW9uCi0gKi8KLQotI2lmbmRlZiBURUxORVRfQVVUSF9ICi0jZGVm aW5lIFRFTE5FVF9BVVRIX0gKLQotaW50IGF1dGhfcGFyc2UodW5zaWduZWQgY2hhciAqLCBpbnQp OwotCi1pbnQgYXV0aF9pbml0KGtzdHJlYW0pOwotCi12b2lkIGF1dGhfZGVzdHJveSh2b2lkKTsK LQotaW50IGF1dGhfZW5jcnlwdChzdHJ1Y3Qga3N0cmVhbV9kYXRhX2Jsb2NrICosIHN0cnVjdCBr c3RyZWFtX2RhdGFfYmxvY2sgKik7Ci0KLWludCBhdXRoX2RlY3J5cHQoc3RydWN0IGtzdHJlYW1f ZGF0YV9ibG9jayAqLCBzdHJ1Y3Qga3N0cmVhbV9kYXRhX2Jsb2NrICopOwotCi1leHRlcm4gQk9P TCBmb3J3YXJkX2ZsYWc7Ci1leHRlcm4gQk9PTCBmb3J3YXJkYWJsZV9mbGFnOwotZXh0ZXJuIEJP T0wgZm9yd2FyZGVkX3RpY2tldHM7Ci0jZW5kaWYgLyogVEVMX0FVVEhfSCAqLwotCi0KLS8qIEMt S2VybWl0IHNwZWNpZmljIGZ1bmN0aW9ucyAqLwotX1BST1RPVFlQKHZvaWQgYXV0aF9maW5pc2hl ZCwoaW50KSk7Ci1fUFJPVE9UWVAoaW50IGNrX2F1dGhfaW5pdCwgKGNoYXIgKiwgY2hhciAqLCBj aGFyICosIGludCkpOwotX1BST1RPVFlQKGludCBja190bl9hdXRoX3ZhbGlkLCAoVk9JRCkpOwot X1BST1RPVFlQKGludCBja190bl9hdXRoX2luX3Byb2dyZXNzLChWT0lEKSk7Ci1fUFJPVE9UWVAo aW50IGNrX3RuX3NiX2F1dGgsIChjaGFyICosIGludCkpOwotX1BST1RPVFlQKGludCBja190bl9z Yl9lbmNyeXB0LCAoY2hhciAqLCBpbnQpKTsKLV9QUk9UT1RZUChpbnQgY2tfdG5fYXV0aF9yZXF1 ZXN0LCAoVk9JRCkpOwotX1BST1RPVFlQKHZvaWQgY2tfdG5fZW5jcnlwdCwgKGNoYXIgKiwgaW50 KSk7Ci1fUFJPVE9UWVAodm9pZCBja190bl9kZWNyeXB0LCAoY2hhciAqLCBpbnQpKTsKLV9QUk9U T1RZUCh2b2lkIGNrX3RuX2VuY3J5cHRfc3RhcnQsIChWT0lEKSk7Ci1fUFJPVE9UWVAodm9pZCBj a190bl9lbmNyeXB0X3N0b3AsIChWT0lEKSk7Ci1fUFJPVE9UWVAoaW50IGNrX3RuX2F1dGhlbnRp Y2F0ZWQsIChWT0lEKSk7Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotX1BST1RPVFlQKGludCBja190 bl9lbmNyeXB0aW5nLCAoVk9JRCkpOwotX1BST1RPVFlQKGludCBja190bl9kZWNyeXB0aW5nLCAo Vk9JRCkpOwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNpZmRlZiBDS19TU0wKLV9QUk9U T1RZUChpbnQgY2tfdG5fdGxzX25lZ290aWF0ZSwgKFZPSUQpKTsKLV9QUk9UT1RZUChpbnQgU2Vu ZFNTTEF1dGhTQiwgKGludCwgdm9pZCAqLCBpbnQpKTsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLQot I2lmZGVmIENLX0tFUkJFUk9TCi0gICAgLyogRGVmaW5lIE1JVF9DVVJSRU5UIHRvIGNvbXBpbGUg dGhlIGNvZGUgZm9yIHVzZSB3aXRoIHZlcnNpb25zIG9mICovCi0gICAgLyogS2VyYmVyb3MgbGF0 ZXIgdGhhbiBLUkI1IDEuMC41LiAgTm90ZS4gIFRoaXMgd2lsbCBub3QgY29tcGlsZSAgICovCi0g ICAgLyogc3VjY2Vzc2Z1bGx5IGluIEtlcm1pdCA5NSBkdWUgdG8gdGhlIHNlZ21lbnRhdGlvbiBv ZiBjcnlwdG8gICAgICovCi0gICAgLyogaW50byBhIHNlcGFyYXRlIERMTC4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSNpZm5kZWYgS1JCNV9JTklUX0VU UwotLyoga3JiNV9pbml0X2V0cygpIGlzIGEgbm8tb3AgaW4gS2VyYmVyb3MgMS40LnggYW5kIGxh dGVyICovCi0vKiBhbmQgaW4gc29tZSBpbnN0YWxsYXRpb25zIGl0IGNhbid0IGJlIGZvdW5kIHNv IG5vdyBieSBkZWZhdWx0ICovCi0vKiB3ZSBkb24ndCB1c2UgaXQuICovCi0jZGVmaW5lIE5PX0tS QjVfSU5JVF9FVFMKLSNlbmRpZgkvKiBLUkI1X0lOSVRfRVRTICovCi0KLSNkZWZpbmUgS1JCX0RF RlRJTSA2MDAgICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IGxpZmV0aW1lIChtaW51dGVzKSAq LwotCi0vKiBLZXJiZXJvcyBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgKi8KLQotc3RydWN0IGtyYl9v cF9kYXRhIHsgICAgICAgICAgICAgICAgICAgIC8qIE9wZXJhdGlvbmFsIGRhdGEgZm9yIGFsbCBh Y3Rpb25zICovCi0gICAgaW50IHZlcnNpb247ICAgICAgICAgICAgICAgICAgICAgICAgLyogS2Vy YmVyb3MgdmVyc2lvbiAgICAqLwotICAgIGNoYXIgKiBjYWNoZTsgICAgICAgICAgICAgICAgICAg ICAgIC8qIEtlcmJlcm9zIGNhY2hlIGZpbGUgKi8KLX07Ci0KLXN0cnVjdCBrcmI0X2luaXRfZGF0 YSB7ICAgICAgICAgICAgICAgICAvKiBJTklUSUFMSVpFIGRhdGEgc3RydWN0dXJlICovCi0gICAg aW50IGxpZmV0aW1lOwotICAgIGNoYXIgKiBwcmluY2lwYWw7ICAgICAgICAgICAgICAgICAgIC8q IFByaW5jaXBhbCBzdHJpbmcgKi8KLSAgICBjaGFyICogaW5zdGFuY2U7Ci0gICAgY2hhciAqIHJl YWxtOyAgICAgICAgICAgICAgICAgICAgICAgLyogUmVhbG0gc3RyaW5nICovCi0gICAgY2hhciAq IHBhc3N3b3JkOyAgICAgICAgICAgICAgICAgICAgLyogS2VyYmVyb3MgcGFzc3dvcmQgKi8KLSAg ICBpbnQgICAgcHJlYXV0aDsgICAgICAgICAgICAgICAgICAgICAvKiBVc2UgcHJlYXV0aCBtb2Rl PyAqLwotICAgIGludCAgICB2ZXJib3NlOyAgICAgICAgICAgICAgICAgICAgIC8qIFZlcmJvc2Ug b3V0cHV0PyAqLwotfTsKLQotI2RlZmluZSBLUkI1X05VTV9PRl9BRERSUyAxNgotc3RydWN0IGty YjVfaW5pdF9kYXRhIHsgICAgICAgICAgICAgICAgIC8qIElOSVRJQUxJWkUgZGF0YSBzdHJ1Y3R1 cmUgKi8KLSAgICBpbnQgZm9yd2FyZGFibGU7ICAgICAgICAgICAgICAgICAgICAvKiBTd2l0Y2gg dmFsdWVzICovCi0gICAgaW50IHByb3hpYWJsZTsgICAgICAgICAgICAgICAgICAgICAgLyogQ29y cmVzcG9uZCB0byBzd2l0Y2ggbmFtZXMuLi4gKi8KLSAgICBpbnQgbGlmZXRpbWU7Ci0gICAgaW50 IHJlbmV3OwotICAgIGludCByZW5ld2FibGU7Ci0gICAgaW50IHZhbGlkYXRlOwotICAgIGNoYXIg KiBwb3N0ZGF0ZTsKLSAgICBjaGFyICogc2VydmljZTsKLSAgICBjaGFyICogcHJpbmNpcGFsOyAg ICAgICAgICAgICAgICAgICAvKiBQcmluY2lwYWwgc3RyaW5nICovCi0gICAgY2hhciAqIGluc3Rh bmNlOwotICAgIGNoYXIgKiByZWFsbTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlYWxtIHN0 cmluZyAqLwotICAgIGNoYXIgKiBwYXNzd29yZDsgICAgICAgICAgICAgICAgICAgIC8qIEtlcmJl cm9zIHBhc3N3b3JkICovCi0gICAgaW50ICAgIHByZWF1dGg7ICAgICAgICAgICAgICAgICAgICAg LyogVXNlIHByZWF1dGggbW9kZT8gKi8KLSAgICBpbnQgICAgdmVyYm9zZTsgICAgICAgICAgICAg ICAgICAgICAvKiBWZXJib3NlIG91dHB1dD8gKi8KLSAgICBpbnQgICAgZ2V0azQ7ICAgICAgICAg ICAgICAgICAgICAgICAvKiBHZXQgSzQgVEdUPyAqLwotICAgIGNoYXIgKiBhZGRyc1tLUkI1X05V TV9PRl9BRERSUysxXTsgIC8qIExpc3Qgb2YgSVAgQWRkcmVzc2VzICovCi0gICAgaW50ICBub19h ZGRyZXNzZXM7ICAgICAgICAgICAgICAgICAgLyogRG8gbm90IGluY2x1ZGUgSVAgQWRkcmVzc2Vz ICovCi19OwotCi1zdHJ1Y3Qga3JiNV9saXN0X2NyZWRfZGF0YSB7ICAgICAgICAgICAgLyogTGlz dCBDcmVkZW50aWFscyBkYXRhICovCi0gICAgaW50IGVuY3J5cHRpb247Ci0gICAgaW50IGZsYWdz OwotICAgIGludCBhZGRyOwotfTsKLQotX1BST1RPVFlQKGludCBja19rcmI1X2F1dG9nZXRfVEdU LCAoY2hhciAqKSk7Ci1fUFJPVE9UWVAoaW50IGNrX2tyYjVfaW5pdFRHVCwgKHN0cnVjdCBrcmJf b3BfZGF0YSAqLHN0cnVjdCBrcmI1X2luaXRfZGF0YSAqLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGtyYjRfaW5pdF9kYXRhICopKTsKLV9QUk9UT1RZUChpbnQgY2tf a3JiNV9kZXN0cm95LCAoc3RydWN0IGtyYl9vcF9kYXRhICopKTsKLV9QUk9UT1RZUChpbnQgY2tf a3JiNV9saXN0X2NyZWRzLCAoc3RydWN0IGtyYl9vcF9kYXRhICosCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3JiNV9saXN0X2NyZWRfZGF0YSAqKSk7Ci1fUFJP VE9UWVAoY2hhciAqIGNrX2tyYjVfZ2V0cmVhbG0sIChjaGFyICopKTsKLV9QUk9UT1RZUChjaGFy ICogY2tfa3JiNV9nZXRwcmluY2lwYWwsIChjaGFyICopKTsKLV9QUk9UT1RZUChjaGFyICogY2tf a3JiNV9nZXRfY2NfbmFtZSwgKFZPSUQpKTsKLQotX1BST1RPVFlQKGludCBja19rcmI0X2F1dG9n ZXRfVEdULCAoY2hhciAqKSk7Ci1fUFJPVE9UWVAoaW50IGNrX2tyYjRfaW5pdFRHVCwgKHN0cnVj dCBrcmJfb3BfZGF0YSAqLHN0cnVjdCBrcmI0X2luaXRfZGF0YSAqKSk7Ci1fUFJPVE9UWVAoaW50 IGNrX2tyYjRfZGVzdHJveSwgKHN0cnVjdCBrcmJfb3BfZGF0YSAqKSk7Ci1fUFJPVE9UWVAoaW50 IGNrX2tyYjRfbGlzdF9jcmVkcywgKHN0cnVjdCBrcmJfb3BfZGF0YSAqKSk7Ci1fUFJPVE9UWVAo Y2hhciAqIGNrX2tyYjRfZ2V0cmVhbG0sIChWT0lEKSk7Ci1fUFJPVE9UWVAoY2hhciAqIGNrX2ty YjRfZ2V0cHJpbmNpcGFsLCAoVk9JRCkpOwotCi1fUFJPVE9UWVAoaW50IGNrX2tyYjRfZ2V0X3Rr dHMsIChWT0lEKSk7Ci1fUFJPVE9UWVAoY2hhciAqIGNrX2tyYjRfZ2V0X25leHRfdGt0LCAoVk9J RCkpOwotX1BST1RPVFlQKGludCBja19rcmI0X3RrdF9pc3ZhbGlkLChjaGFyICopKTsKLV9QUk9U T1RZUChpbnQgY2tfa3JiNF9pc190Z3RfdmFsaWQsKFZPSUQpKTsKLV9QUk9UT1RZUChpbnQgY2tf a3JiNF90a3RfdGltZSwoY2hhciAqKSk7Ci0KLV9QUk9UT1RZUChpbnQgY2tfa3JiNV9nZXRfdGt0 cywgKGNoYXIgKikpOwotX1BST1RPVFlQKGNoYXIgKiBja19rcmI1X2dldF9uZXh0X3RrdCwgKFZP SUQpKTsKLV9QUk9UT1RZUChpbnQgY2tfa3JiNV90a3RfaXN2YWxpZCwoY2hhciAqLGNoYXIgKikp OwotX1BST1RPVFlQKGNoYXIgKiBja19rcmI1X3RrdF9mbGFncywoY2hhciAqLGNoYXIgKikpOwot X1BST1RPVFlQKGludCBja19rcmI1X2lzX3RndF92YWxpZCwoVk9JRCkpOwotX1BST1RPVFlQKGlu dCBja19rcmI1X3RrdF90aW1lLChjaGFyICosY2hhciAqKSk7Ci0KLV9QUk9UT1RZUChpbnQga3Ji NF9kZXNfYXZhaWwsKGludCkpOwotX1BST1RPVFlQKGludCBrcmI0X2Rlc193cml0ZSwoaW50LGNo YXIgKixpbnQpKTsKLV9QUk9UT1RZUChpbnQga3JiNF9kZXNfcmVhZCwgKGludCxjaGFyICosaW50 KSk7Ci1fUFJPVE9UWVAoaW50IGtyYjVfZGVzX2F2YWlsLChpbnQpKTsKLV9QUk9UT1RZUChpbnQg a3JiNV9kZXNfd3JpdGUsKGludCxjaGFyICosaW50LGludCkpOwotX1BST1RPVFlQKGludCBrcmI1 X2Rlc19yZWFkLCAoaW50LGNoYXIgKixpbnQsaW50KSk7Ci1fUFJPVE9UWVAoaW50IGtyYjVfdTJ1 X2F2YWlsLChpbnQpKTsKLV9QUk9UT1RZUChpbnQga3JiNV91MnVfd3JpdGUsKGludCxjaGFyICos aW50KSk7Ci1fUFJPVE9UWVAoaW50IGtyYjVfdTJ1X3JlYWQsIChpbnQsY2hhciAqLGludCkpOwot X1BST1RPVFlQKGludCBrNV91c2VyX3RvX3VzZXJfc2VydmVyX2F1dGgsKFZPSUQpKTsKLV9QUk9U T1RZUChpbnQgazVfdXNlcl90b191c2VyX2NsaWVudF9hdXRoLChWT0lEKSk7Ci0jZW5kaWYgLyog Q0tfS0VSQkVST1MgKi8KLQotX1BST1RPVFlQKGludCBja19rcmI1X2lzX2luc3RhbGxlZCwodm9p ZCkpOwotX1BST1RPVFlQKGludCBja19rcmI0X2lzX2luc3RhbGxlZCwodm9pZCkpOwotX1BST1RP VFlQKGludCBja19zcnBfaXNfaW5zdGFsbGVkLCh2b2lkKSk7Ci1fUFJPVE9UWVAoaW50IGNrX250 bG1faXNfaW5zdGFsbGVkLCh2b2lkKSk7Ci1fUFJPVE9UWVAoaW50IGNrX2NyeXB0X2lzX2luc3Rh bGxlZCwodm9pZCkpOwotX1BST1RPVFlQKGludCBja19zc2xlYXlfaXNfaW5zdGFsbGVkLCh2b2lk KSk7Ci1fUFJPVE9UWVAoaW50IGNrX2dzc2FwaV9pc19pbnN0YWxsZWQsKHZvaWQpKTsKLV9QUk9U T1RZUChpbnQgY2tfa3J5cHRvX2lzX2luc3RhbGxlZCwodm9pZCkpOwotCi1fUFJPVE9UWVAoVk9J RCBja19lbmNyeXB0X3NlbmRfc3VwcG9ydCwoVk9JRCkpOwotX1BST1RPVFlQKGludCBja19nZXRf Y3J5cHRfdGFibGUsKHN0cnVjdCBrZXl0YWIgKiosIGludCAqKSk7Ci1fUFJPVE9UWVAoY2hhciAq IGNrX2tyYjRfcmVhbG1vZmhvc3QsKGNoYXIgKikpOwotX1BST1RPVFlQKGNoYXIgKiBja19rcmI1 X3JlYWxtb2Zob3N0LChjaGFyICopKTsKLQotI2RlZmluZSBGT1JXQVJEICAvKiBhbGxvdyBmb3J3 YXJkaW5nIG9mIGNyZWRlbnRpYWwgKi8KLSNpZmRlZiBGT1JXQVJECi1fUFJPVE9UWVAoaW50IGtl cmJlcm9zNV9mb3J3YXJkLChWT0lEKSk7Ci0jZW5kaWYgLyogRk9SV0FSRCAqLwotCi0jZGVmaW5l IEFVVEhUWVBMU1RTWiA4Ci0jZW5kaWYgLypLUkI1X0tFUk1JVF9IKi8KCmRpZmYgLS1naXQgYS9j a2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWJ3ci50eHQgYi9ja2VybWl0 LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWJ3ci50eHQKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDM4YjA2NGEuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1 aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3Vid3IudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNTM2MyAr MCwwIEBACi0KLSAgIFsxXVRoZSBDb2x1bWJpYSBDcm93biBUaGUgS2VybWl0IFByb2plY3QgfCBD b2x1bWJpYSBVbml2ZXJzaXR5Ci0gICA2MTIgV2VzdCAxMTV0aCBTdHJlZXQsIE5ldyBZb3JrIE5Z IDEwMDI1IFVTQSBvIFsyXWtlcm1pdEBjb2x1bWJpYS5lZHUKLSAgIC4uLnNpbmNlIDE5ODEKLSAg IFszXUhvbWUgWzRdS2VybWl0IDk1IFs1XUMtS2VybWl0IFs2XVNjcmlwdHMgWzddQ3VycmVudCBb OF1OZXcgWzldRkFRCi0gICBbMTBdU3VwcG9ydAotCi1DLUtlcm1pdCBVbml4IEhpbnRzIGFuZCBU aXBzCi0KLSAgICAgRnJhbmsgZGEgQ3J1egotICAgICBbMTFdVGhlIEtlcm1pdCBQcm9qZWN0LCBb MTJdQ29sdW1iaWEgVW5pdmVyc2l0eQotCi0gICBBcyBvZjogQy1LZXJtaXQgOS4wLjMwMiwgMjAg QXVndXN0IDIwMTEKLSAgIFRoaXMgcGFnZSBsYXN0IHVwZGF0ZWQ6IFN1biBBdWcgMjEgMTI6MDg6 NTIgMjAxMSAoTmV3IFlvcmsgVVNBIFRpbWUpCi0KLSAgICAgSUYgWU9VIEFSRSBSRUFESU5HIEEg UExBSU4tVEVYVCB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnQsIG5vdGUgaXQgaXMKLSAgICAgYSBw bGFpbi10ZXh0IGR1bXAgb2YgYSBXZWIgcGFnZS4gWW91IGNhbiB2aXNpdCB0aGUgb3JpZ2luYWwg KGFuZAotICAgICBwb3NzaWJseSBtb3JlIHVwLXRvLWRhdGUpIFdlYiBwYWdlIGhlcmU6Ci0KLSAg WzEzXWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbAotCi0gICAgIFNp bmNlIHRoZSBtYXRlcmlhbCBpbiB0aGlzIGZpbGUgaGFzIGJlZW4gYWNjdW11bGF0aW5nIHNpbmNl IDE5ODUsCi0gICAgIHNvbWUgKG11Y2gpIG9mIGl0IG1pZ2h0IGJlIGRhdGVkLgotCi1Lbm93biBw cm9ibGVtcyB3aXRoIEMtS2VybWl0IDkuMAotCi0gICAgICogRG9tYWluIG5hbWUgcmVzb2x1dGlv biBkb2VzIG5vdCB3b3JrIGluIFNvbGFyaXMgMTAgb3IgMTEgKGZpeGVkIGluCi0gICAgICAgWzE0 XTkuMC4zMDEpLgotICAgICAqIFVVQ1AgbG9ja2ZpbGUgZmFpbHVyZSBpbiBGcmVlQlNEIDggKGZp eGVkIGluIFsxNV05LjAuMzAyKS4KLSAgICAgKiBCdWlsZCBmYWlsdXJlIEZyZWVCU0QgOSAoZml4 ZWQgaW4gWzE2XTkuMC4zMDIpLgotICAgICAqIE9wZW5pbmcgbmV3IFNTSCBzZXNzaW9ucyBhZnRl ciBjbG9zaW5nIHByZXZpb3VzIG9uZXMgc29tZXRpbWVzCi0gICAgICAgZmFpbHMuCi0gICAgICog SGVpbWRhbCBLZXJiZXJvcyBub3Qgc3VwcG9ydGVkLgotCi0gICBbIFsxN11DLUtlcm1pdCBdIFsg WzE4XUluc3RhbGxhdGlvbiBJbnN0cnVjdGlvbnMgXSBbIFsxOV1UVVRPUklBTCBdCi0KLUNPTlRF TlRTCi0KLSAgICAxLiBbMjBdSU5UUk9EVUNUSU9OCi0gICAgMi4gWzIxXVBSRUJVSUxUIEMtS0VS TUlUIEJJTkFSSUVTCi0gICAgMy4gWzIyXVBMQVRGT1JNLVNQRUNJRklDIE5PVEVTCi0gICAgNC4g WzIzXUdFTkVSQUwgVU5JWC1TUEVDSUZJQyBMSU1JVEFUSU9OUyBBTkQgQlVHUwotICAgIDUuIFsy NF1JTklUSUFMSVpBVElPTiBBTkQgQ09NTUFORCBGSUxFUwotICAgIDYuIFsyNV1DT01NVU5JQ0FU SU9OIFNQRUVEIFNFTEVDVElPTgotICAgIDcuIFsyNl1DT01NVU5JQ0FUSU9OUyBBTkQgRElBTElO RwotICAgIDguIFsyN11IQVJEV0FSRSBGTE9XIENPTlRST0wKLSAgICA5LiBbMjhdVEVSTUlOQUwg Q09OTkVDVElPTiBBTkQgS0VZIE1BUFBJTkcKLSAgIDEwLiBbMjldRklMRSBUUkFOU0ZFUgotICAg MTEuIFszMF1FWFRFUk5BTCBGSUxFIFRSQU5TRkVSIFBST1RPQ09MUwotICAgMTIuIFszMV1TRUNV UklUWQotICAgMTMuIFszMl1NSVNDRUxMQU5FT1VTIFVTRVIgUkVQT1JUUwotICAgMTQuIFszM11U SElSRC1QQVJUWSBEUklWRVJTCi0KLSAgIFF1aWNrIExpbmtzOiAgIFsgWzM0XUxpbnV4IF0gWyBb MzVdKkJTRCBdIFtbMzZdTWFjIE9TIFhdIFsgWzM3XUFJWCBdIFsKLSAgIFszOF1IUC1VWCBdIFsg WzM5XVNvbGFyaXMgXSBbIFs0MF1TQ08gXQotCi0xLiBJTlRST0RVQ1RJT04KLQotICAgWyBbNDFd VG9wIF0gWyBbNDJdQ29udGVudHMgXSBbIFs0M11OZXh0IF0KLQotICAgU0VDVElPTiBDT05URU5U UwotCi0gIDEuMS4gWzQ0XURvY3VtZW50YXRpb24KLSAgMS4yLiBbNDVdVGVjaG5pY2FsIFN1cHBv cnQKLSAgMS4zLiBbNDZdVGhlIFllYXIgMjAwMAotICAxLjQuIFs0N11UaGUgRXVybwotCi0gICBU SElTIElTIFdIQVQgVVNFRCBUTyBCRSBDQUxMRUQgdGhlICJiZXdhcmUgZmlsZSIgZm9yIHRoZSBV bml4IHZlcnNpb24KLSAgIG9mIEMtS2VybWl0LCBwcmV2aW91c2x5IGRpc3RyaWJ1dGVkIGFzIGNr dWJ3ci50eHQgYW5kLCBiZWZvcmUgdGhhdCwgYXMKLSAgIGNrdWtlci5id3IsIGFmdGVyIHRoZSBm YXNoaW9uIG9mIG9sZCBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbgotICAgKERFQykgc29m dHdhcmUgcmVsZWFzZXMgdGhhdCBjYW1lIHdpdGggcmVsZWFzZSBub3RlcyAoZGVzY3JpYmluZyB3 aGF0Ci0gICBoYWQgY2hhbmdlZCkgYW5kIGEgImJld2FyZSBmaWxlIiBsaXN0aW5nIGtub3duIGJ1 Z3MsIGxpbWl0YXRpb25zLAotICAgIm5vbi1nb2FscyIsIGFuZCB0aGluZ3MgdG8gd2F0Y2ggb3V0 IGZvci4gVGhlIEMtS2VybWl0IGJld2FyZSBmaWxlIGhhcwotICAgYmVlbiBhY2N1bXVsYXRpbmcg c2luY2UgMTk4NSwgYW5kIGl0IGFwcGxpZXMgdG8gbWFueSBkaWZmZXJlbnQgaGFyZHdhcmUKLSAg IHBsYXRmb3JtcyBhbmQgb3BlcmF0aW5nIHN5c3RlbXMsIGFuZCBtYW55IHZlcnNpb25zIG9mIHRo ZW0sIHNvIGl0IGlzCi0gICBxdWl0ZSBsYXJnZS4gUHJpb3IgdG8gQy1LZXJtaXQgOC4wLCBpdCB3 YXMgZGlzdHJpYnV0ZWQgb25seSBpbgotICAgcGxhaW4tdGV4dCBmb3JtYXQuIE5vdyBpdCBpcyBh dmFpbGFibGUgYXMgYSBXZWIgZG9jdW1lbnQgd2l0aCBsaW5rcywKLSAgIGludGVybmFsIGNyb3Nz IHJlZmVyZW5jZXMsIGFuZCBzbyBvbiwgdG8gbWFrZSBpdCBlYXNpZXIgdG8gdXNlLgotCi0gICBU aGlzIGRvY3VtZW50IGFwcGxpZXMgdG8gVW5peCBDLUtlcm1pdCBpbiBnZW5lcmFsLCBhcyB3ZWxs IGFzIHRvCi0gICBzcGVjaWZpYyBVbml4IHZhcmlhdGlvbnMgbGlrZSBbNDhdTGludXgsIFs0OV1B SVgsIFs1MF1IUC1VWCwKLSAgIFs1MV1Tb2xhcmlzLCBhbmQgc28gb24sIGFuZCBzaG91bGQgYmUg cmVhZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQotICAgWzUyXXBsYXRmb3JtLWluZGVwZW5kZW50 IEMtS2VybWl0IGJld2FyZSBmaWxlLCB3aGljaCBjb250YWlucyBzaW1pbGFyCi0gICBpbmZvcm1h dGlvbiwgYnV0IGFwcGx5aW5nIHRvIGFsbCB2ZXJzaW9ucyBvZiBDLUtlcm1pdCAoVk1TLCBXaW5k b3dzLAotICAgT1MvMiwgQU9TL1ZTLCBWT1MsIGV0YywgYXMgd2VsbCBhcyB0byBVbml4KS4KLQot ICAgVGhlcmUgaXMgbXVjaCBpbiB0aGlzIGRvY3VtZW50IHRoYXQgaXMgKG9ubHkpIG9mIGhpc3Rv cmljYWwgaW50ZXJlc3QuCi0gICBUaGUgbmF2aWdhdGlvbiBsaW5rcyBzaG91bGQgaGVscCB5b3Ug c2tpcCBkaXJlY3RseSB0byB0aGUgc2VjdGlvbnMgdGhhdAotICAgYXJlIHJlbGV2YW50IHRvIHlv dS4gTnVtZXJvdXMgb2Zmc2l0ZSBXZWIgbGlua3MgYXJlIHN1cHBvc2VkIHRvIGxlYWQgdG8KLSAg IGZ1cnRoZXIgaW5mb3JtYXRpb24gYnV0LCBhcyB5b3Uga25vdywgV2ViIGxpbmtzIGdvIHN0YWxl IGZyZXF1ZW50bHkgYW5kCi0gICB3aXRob3V0IHdhcm5pbmcuIElmIHlvdSBjYW4gc3VwcGx5IGFk ZGl0aW9uYWwsIGNvcnJlY3RlZCwgdXBkYXRlZCwgb3IKLSAgIGJldHRlciBXZWIgbGlua3MsIHBs ZWFzZSBmZWVsIGZyZWUgdG8gWzUzXWxldCBtZSBrbm93LgotCi0xLjEuIERvY3VtZW50YXRpb24K LQotICAgWyBbNTRdVG9wIF0gWyBbNTVdQ29udGVudHMgXSBbIFs1Nl1OZXh0IF0KLQotICAgQy1L ZXJtaXQgNi4wIGlzIGRvY3VtZW50ZWQgaW4gdGhlIGJvb2sgWzU3XVVzaW5nIEMtS2VybWl0LCBT ZWNvbmQKLSAgIEVkaXRpb24sIGJ5IEZyYW5rIGRhIENydXogYW5kIENocmlzdGluZSBNLiBHaWFu b25lLCBEaWdpdGFsIFByZXNzLAotICAgQnVybGluZ3RvbiwgTUEsIFVTQSwgSVNCTiAxLTU1NTU4 LTE2NC0xICgxOTk3KSwgNjIyIHBhZ2VzLiBUaGlzIHJlbWFpbnMKLSAgIHRoZSBkZWZpbml0aXZl IEMtS2VybWl0IGRvY3VtZW50YXRpb24uIFVudGlsIHRoZSB0aGlyZCBlZGl0aW9uIGlzCi0gICBw dWJsaXNoZWQgKHNvcnJ5LCB0aGVyZSBpcyBubyBmaXJtIHRpbWVmcmFtZSBmb3IgdGhpcyksIHBs ZWFzZSBhbHNvCi0gICByZWZlciB0bzoKLQotICAgWzU4XVN1cHBsZW1lbnQgdG8gVXNpbmcgQy1L ZXJtaXQsIFNlY29uZCBFZGl0aW9uLCBGb3IgQy1LZXJtaXQgNy4wCi0gICAgICAgICAgVGhvcm91 Z2ggZG9jdW1lbnRhdGlvbiBvZiBmZWF0dXJlcyBuZXcgdG8gdmVyc2lvbiA3LjAuCi0KLSAgIFs1 OV1TdXBwbGVtZW50IHRvIFVzaW5nIEMtS2VybWl0LCBTZWNvbmQgRWRpdGlvbiwgRm9yIEMtS2Vy bWl0IDguMAotICAgICAgICAgIFRob3JvdWdoIGRvY3VtZW50YXRpb24gb2YgZmVhdHVyZXMgbmV3 IHRvIHZlcnNpb24gOC4wLgotCi0gICBbNjBdU3VwcGxlbWVudCB0byBVc2luZyBDLUtlcm1pdCwg U2Vjb25kIEVkaXRpb24sIEZvciBDLUtlcm1pdCA5LjAKLSAgICAgICAgICBUaG9yb3VnaCBkb2N1 bWVudGF0aW9uIG9mIGZlYXR1cmVzIG5ldyB0byB2ZXJzaW9uIDkuMC4KLQotMS4yLiBUZWNobmlj YWwgU3VwcG9ydAotCi0gICBbIFs2MV1Ub3AgXSBbIFs2Ml1Db250ZW50cyBdIFsgWzYzXVNlY3Rp b24gQ29udGVudHMgXSBbIFs2NF1OZXh0IF0gWwotICAgWzY1XVByZXZpb3VzIF0KLQotICAgRm9y IGluZm9ybWF0aW9uIG9uIGhvdyB0byBnZXQgdGVjaG5pY2FsIHN1cHBvcnQsIHBsZWFzZSB2aXNp dDoKLQotICAgIFs2Nl1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc3VwcG9ydC5odG1s Ci0KLTEuMy4gVGhlIFllYXIgMjAwMAotCi0gICBbIFs2N11Ub3AgXSBbIFs2OF1Db250ZW50cyBd IFsgWzY5XVNlY3Rpb24gQ29udGVudHMgXSBbIFs3MF1OZXh0IF0gWwotICAgWzcxXVByZXZpb3Vz IF0KLQotICAgVGhlIFVuaXggdmVyc2lvbiBvZiBDLUtlcm1pdCwgcmVsZWFzZSA2LjAgYW5kIGxh dGVyLCBpcyAiWWVhciAyMDAwCi0gICBjb21wbGlhbnQiLCBidXQgb25seSBpZiB0aGUgdW5kZXJs eWluZyBvcGVyYXRpbmcgc3lzdGVtIGlzIHRvby4gQ29udGFjdAotICAgeW91ciBVbml4IG9wZXJh dGluZyBzeXN0ZW0gdmVuZG9yIHRvIGZpbmQgb3V0IHdoaWNoIG9wZXJhdGluZyBzeXN0ZW0KLSAg IHZlcnNpb25zLCBwYXRjaGVzLCBoYXJkd2FyZSwgYW5kL29yIHVwZGF0ZXMgYXJlIHJlcXVpcmVk LiAoUXVpdGUgYSBmZXcKLSAgIG9sZCBVbml4ZXMgYXJlIHN0aWxsIGluIG9wZXJhdGlvbiBpbiB0 aGUgbmV3IG1pbGxlbml1bSwgYnV0IHdpdGggdGhlaXIKLSAgIGRhdGUgc2V0IDI4IHllYXJzIGlu IHRoZSBwYXN0IHNvIGF0IGxlYXN0IHRoZSBub24teWVhciBwYXJ0cyBvZiB0aGUKLSAgIGNhbGVu ZGFyIGFyZSBjb3JyZWN0LikKLQotICAgQXMgb2YgQy1LZXJtaXQgNi4wICg2IFNlcHRlbWJlciAx OTk2KSwgcG9zdC1taWxsZW5pdW0gZmlsZSBkYXRlcyBhcmUKLSAgIHJlY29nbml6ZWQsIHRyYW5z bWl0dGVkLCByZWNlaXZlZCwgYW5kIHJlcHJvZHVjZWQgY29ycmVjdGx5IGR1cmluZyB0aGUKLSAg IGZpbGUgdHJhbnNmZXIgcHJvY2VzcyBpbiBDLUtlcm1pdCdzIEZpbGUgQXR0cmlidXRlIHBhY2tl dHMuIElmCi0gICBwb3N0LW1pbGxlbml1bSBkYXRlcyBhcmUgbm90IHByb2Nlc3NlZCBjb3JyZWN0 bHkgb24gdGhlIG90aGVyIGVuZCwgZmlsZQotICAgdHJhbnNmZXIgc3RpbGwgdGFrZXMgcGxhY2Us IGJ1dCB0aGUgbW9kaWZpY2F0aW9uIG9yIGNyZWF0aW9uIGRhdGUgb2YKLSAgIHRoZSByZWNlaXZl ZCBmaWxlIG1pZ2h0IGJlIGluY29ycmVjdC4gVGhlIG9ubHkgZXhjZXB0aW9uIHdvdWxkIGJlIGlm Ci0gICB0aGUgImZpbGUgY29sbGlzaW9uIHVwZGF0ZSIgZmVhdHVyZSBpcyBiZWluZyB1c2VkIHRv IHByZXZlbnQKLSAgIHVubmVjZXNzYXJ5IHRyYW5zZmVyIG9mIGZpbGVzIHRoYXQgaGF2ZSBub3Qg Y2hhbmdlZCBzaW5jZSB0aGUgbGFzdCB0aW1lCi0gICBhIHRyYW5zZmVyIHRvb2sgcGxhY2U7IGlu IHRoaXMgY2FzZSwgYSBmaWxlIG1pZ2h0IGJlIHRyYW5zZmVycmVkCi0gICB1bm5lY2Vzc2FyaWx5 LCBvciBpdCBtaWdodCBub3QgYmUgdHJhbnNmZXJyZWQgd2hlbiBpdCBzaG91bGQgaGF2ZSBiZWVu LgotICAgQ29ycmVjdCBvcGVyYXRpb24gb2YgdGhlIHVwZGF0ZSBmZWF0dXJlIGRlcGVuZHMgb24g Ym90aCBLZXJtaXQgcHJvZ3JhbXMKLSAgIGhhdmluZyB0aGUgY29ycmVjdCBkYXRlIGFuZCB0aW1l LgotCi0gICBPZiBzZWNvbmRhcnkgaW1wb3J0YW5jZSBhcmUgdGhlIHRpbWUgc3RhbXBzIGluIHRo ZSB0cmFuc2FjdGlvbiBhbmQvb3IKLSAgIGRlYnVnIGxvZ3MsIGFuZCB0aGUgZGF0ZS1yZWxhdGVk IHNjcmlwdCBwcm9ncmFtbWluZyBjb25zdHJ1Y3RzLCBzdWNoIGFzCi0gICBcdihkYXRlKSwgXHYo bmRhdGUpLCBcdihkYXkpLCBcdihuZGF5KSwgYW5kIHBlcmhhcHMgYWxzbyB0aGUKLSAgIHRpbWUt cmVsYXRlZCBvbmVzLCBcdih0aW1lKSBhbmQgXHYobnRpbWUpLCBpbnNvZmFyIGFzIHRoZXkgbWln aHQgYmUKLSAgIGFmZmVjdGVkIGJ5IHRoZSBkYXRlLiBUaGUgXHYobmRhdGUpIGlzIGEgbnVtZXJp Yy1mb3JtYXQgZGF0ZSBvZiB0aGUKLSAgIGZvcm0geXl5eW1tZGQsIHN1aXRhYmxlIGZvciBib3Ro IGxleGljYWwgYW5kIG51bWVyaWMgY29tcGFyaXNvbiBhbmQKLSAgIHNvcnRpbmc6IGUuZy4gMTk5 NzAyMDggb3IgMjAwMTEyMzEuIElmIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGluZyBzeXN0ZW0KLSAg IHJldHVybnMgdGhlIGNvcnJlY3QgZGF0ZSBpbmZvcm1hdGlvbiwgdGhlc2UgdmFyaWFibGVzIHdp bGwgaGF2ZSB0aGUKLSAgIHByb3BlciB2YWx1ZXMuIElmIG5vdCwgdGhlbiBzY3JpcHRzIHRoYXQg bWFrZSBkZWNpc2lvbnMgYmFzZWQgb24gdGhlc2UKLSAgIHZhcmlhYmxlcyBtaWdodCBub3Qgb3Bl cmF0ZSBjb3JyZWN0bHkuCi0KLSAgIE1vc3QgZGF0ZS1yZWxhdGVkIGNvZGUgaXMgYmFzZWQgdXBv biB0aGUgQyBMaWJyYXJ5IGFzY3RpbWUoKSBzdHJpbmcsCi0gICB3aGljaCBhbHdheXMgaGFzIGEg Zm91ci1kaWdpdCB5ZWFyLiBJbiBVbml4LCB0aGUgb25lIGJpdCBvZiBjb2RlIGluCi0gICBDLUtl cm1pdCB0aGF0IGlzIGFuIGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGUgaXMgc2V2ZXJhbCBjYWxscyB0 bwotICAgbG9jYWx0aW1lKCksIHdoaWNoIHJldHVybnMgYSBwb2ludGVyIHRvIGEgdG0gc3RydWN0 LCBpbiB3aGljaCB0aGUgeWVhcgotICAgaXMgcHJlc3VtZWQgdG8gYmUgZXhwcmVzc2VkIGFzICJ5 ZWFycyBzaW5jZSAxOTAwIi4gVGhlIGNvZGUgZGVwZW5kcyBvbgotICAgdGhpcyBhc3N1bXB0aW9u LiBBbnkgcGxhdGZvcm1zIHRoYXQgdmlvbGF0ZSBpdCB3aWxsIG5lZWQgc3BlY2lhbAotICAgY29k aW5nLiBBcyBvZiB0aGlzIHdyaXRpbmcsIG5vIHN1Y2ggcGxhdGZvcm1zIGFyZSBrbm93bi4KLQot ICAgQ29tbWFuZCBhbmQgc2NyaXB0IHByb2dyYW1taW5nIGZ1bmN0aW9ucyB0aGF0IGRlYWwgd2l0 aCBkYXRlcyB1c2UKLSAgIEMtS2VybWl0IHNwZWNpZmljIGNvZGUgdGhhdCBhbHdheXMgdXNlcyBm dWxsIHllYXJzLgotCi0xLjQuIFRoZSBFdXJvCi0KLSAgIFsgWzcyXVRvcCBdIFsgWzczXUNvbnRl bnRzIF0gWyBbNzRdU2VjdGlvbiBDb250ZW50cyBdIFsgWzc1XVByZXZpb3VzIF0KLQotICAgQy1L ZXJtaXQgNy4wIGFuZCBsYXRlciBzdXBwb3J0IFVuaWNvZGUgKElTTyAxMDY0NiksIElTTyA4ODU5 LTE1IExhdGluCi0gICBBbHBoYWJldCA5LCBQQyBDb2RlIFBhZ2UgODU4LCBXaW5kb3dzIENvZGUg UGFnZXMgMTI1MCBhbmQgMTI1MSwgYW5kCi0gICBwZXJoYXBzIG90aGVyIGNoYXJhY3RlciBzZXRz LCB0aGF0IGVuY29kZSB0aGUgRXVybyBzeW1ib2wsIGFuZCBjYW4KLSAgIHRyYW5zbGF0ZSBhbW9u ZyB0aGVtIGFzIGxvbmcgYXMgbm8gaW50ZXJtZWRpYXRlIGNoYXJhY3Rlci1zZXQgaXMKLSAgIGlu dm9sdmVkIHRoYXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgRXVyby4KLQotMi4gUFJFQlVJTFQgQy1L RVJNSVQgQklOQVJJRVMKLQotICAgWyBbNzZdVG9wIF0gWyBbNzddQ29udGVudHMgXSBbIFs3OF1O ZXh0IF0gWyBbNzldUHJldmlvdXMgXQotCi0gICBJdCBpcyBvZnRlbiBkYW5nZXJvdXMgdG8gcnVu IGEgYmluYXJ5IEMtS2VybWl0IChvciBhbnkgb3RoZXIpIHByb2dyYW0KLSAgIGJ1aWx0IG9uIGEg ZGlmZmVyZW50IGNvbXB1dGVyLiBQYXJ0aWN1bGFybHkgaWYgdGhhdCBjb21wdXRlciBoYWQgYQot ICAgZGlmZmVyZW50IEMgY29tcGlsZXIsIGxpYnJhcmllcywgb3BlcmF0aW5nIHN5c3RlbSB2ZXJz aW9uLCBwcm9jZXNzb3IKLSAgIGZlYXR1cmVzLCBldGMsIGFuZCBlc3BlY2lhbGx5IGlmIHRoZSBw cm9ncmFtIHdhcyBidWlsdCB3aXRoIHNoYXJlZAotICAgbGlicmFyaWVzLCBiZWNhdXNlIGFzIHNv b24gYXMgeW91IHVwZGF0ZSB0aGUgbGlicmFyaWVzIG9uIHlvdXIgc3lzdGVtLAotICAgdGhleSBu byBsb25nZXIgbWF0Y2ggdGhlIG9uZXMgcmVmZXJlbmNlZCBpbiB0aGUgYmluYXJ5LCBhbmQgdGhl IGJpbmFyeQotICAgbWlnaHQgcmVmdXNlIHRvIGxvYWQgd2hlbiB5b3UgcnVuIGl0LCBpbiB3aGlj aCBjYXNlIHlvdSdsbCBzZWUgZXJyb3IKLSAgIG1lc3NhZ2VzIHNpbWlsYXIgdG86Ci0KLSAgQ291 bGQgbm90IGxvYWQgcHJvZ3JhbSBrZXJtaXQKLSAgTWVtYmVyIHNocjQubyBub3QgZm91bmQgb3Ig ZmlsZSBub3QgYW4gYXJjaGl2ZQotICBDb3VsZCBub3QgbG9hZCBsaWJyYXJ5IGxpYmN1cnNlcy5h W3NocjQub10KLSAgRXJyb3Igd2FzOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Ci0KLSAgIChU aGVzZSBzYW1wbGVzIGFyZSBmcm9tIEFJWC4pIFRvIGF2b2lkIHRoaXMgcHJvYmxlbSwgd2UgdHJ5 IHRvIGJ1aWxkCi0gICBDLUtlcm1pdCB3aXRoIHN0YXRpY2FsbHkgbGlua2VkIGxpYnJhcmllcyB3 aGVuZXZlciB3ZSBjYW4sIGJ1dCB0aGlzIGlzCi0gICBpbmNyZWFzaW5nbHkgaW1wb3NzaWJsZSBh cyBzaGFyZWQgbGlicmFyaWVzIGJlY29tZSB0aGUgbm9ybS4KLQotICAgSXQgaXMgb2Z0ZW4gT0sg dG8gcnVuIGEgYmluYXJ5IGJ1aWx0IG9uIGFuIGVhcmxpZXIgT1MgdmVyc2lvbiwgYnV0IGl0Ci0g ICBpcyByYXJlbHkgcG9zc2libGUgKG9yIHNhZmUpIHRvIHJ1biBhIGJpbmFyeSBidWlsdCBvbiBh IGxhdGVyIG9uZSwgZm9yCi0gICBleGFtcGxlIHRvIHJ1biBhIGJpbmFyeSBidWlsdCB1bmRlciBT b2xhcmlzIDggb24gU29sYXJpcyAyLjYuIFNvbWV0aW1lcwotICAgZXZlbiB0aGUgT1Mtb3ItbGli cmFyeSBwYXRjaC9FQ08gbGV2ZWwgbWFrZXMgYSBkaWZmZXJlbmNlLgotCi0gICBBIHBhcnRpY3Vs YXJseSBpbnNpZGlvdXMgcHJvYmxlbSBvY2N1cnMgd2hlbiBhIGJpbmFyeSB3YXMgYnVpbHQgb24g YQotICAgdmVyc2lvbiBvZiB0aGUgT1MgdGhhdCBoYXMgcGF0Y2hlcyBmcm9tIHRoZSB2ZW5kb3Ig KGUuZy4gdG8gbGlicmFyaWVzKTsKLSAgIGluIG1hbnkgY2FzZXMgeW91IHdvbid0IGJlIGFibGUg dG8gcnVuIHN1Y2ggYSBiaW5hcnkgb24gYW4gdW5wYXRjaGVkCi0gICB2ZXJzaW9uIG9mIHRoZSBz YW1lIHBsYXRmb3JtLgotCi0gICBXaGVuIGluIGRvdWJ0LCBidWlsZCBDLUtlcm1pdCBmcm9tIHRo ZSBzb3VyY2UgY29kZSBvbiB0aGUgY29tcHV0ZXIKLSAgIHdoZXJlIGl0IGlzIHRvIGJlIHJ1biAo aWYgcG9zc2libGUhKS4gSWYgbm90LCBhc2sgdXMgZm9yIGEgYmluYXJ5Ci0gICBzcGVjaWZpYyB0 byB5b3VyIGNvbmZpZ3VyYXRpb24uIFdlIG1pZ2h0IGhhdmUgb25lLCBhbmQgaWYgd2UgZG9uJ3Qs IHdlCi0gICBtaWdodCBiZSBhYmxlIHRvIGZpbmQgc29tZWJvZHkgd2hvIHdpbGwgYnVpbGQgb25l IGZvciB5b3UuCi0KLTMuIE5PVEVTIE9OIFNQRUNJRklDIFVOSVggVkVSU0lPTlMKLQotICAgWyBb ODBdVG9wIF0gWyBbODFdQ29udGVudHMgXSBbIFs4Ml1OZXh0IF0gWyBbODNdUHJldmlvdXMgXQot Ci0gICBTRUNUSU9OIENPTlRFTlRTCi0KLSAgMy4wLiAgWzg0XUMtS0VSTUlUIE9OIFBDLUJBU0VE IFVOSVhFUwotICAzLjEuICBbODVdQy1LRVJNSVQgQU5EIEFJWAotICAzLjIuICBbODZdQy1LRVJN SVQgQU5EIEhQLVVYCi0gIDMuMy4gIFs4N11DLUtFUk1JVCBBTkQgTElOVVgKLSAgMy40LiAgWzg4 XUMtS0VSTUlUIEFORCBORVhUU1RFUAotICAzLjUuICBbODldQy1LRVJNSVQgQU5EIFFOWAotICAz LjYuICBbOTBdQy1LRVJNSVQgQU5EIFNDTwotICAzLjcuICBbOTFdQy1LRVJNSVQgQU5EIFNPTEFS SVMKLSAgMy44LiAgWzkyXUMtS0VSTUlUIEFORCBTVU5PUwotICAzLjkuICBbOTNdQy1LRVJNSVQg QU5EIFVMVFJJWAotICAzLjEwLiBbOTRdQy1LRVJNSVQgQU5EIFVOSVhXQVJFCi0gIDMuMTEuIFs5 NV1DLUtFUk1JVCBBTkQgQVBPTExPIFNSMTAKLSAgMy4xMi4gWzk2XUMtS0VSTUlUIEFORCBUQU5E WSBYRU5JWCAzLjAKLSAgMy4xMy4gWzk3XUMtS0VSTUlUIEFORCBPU0YvMSAoRElHSVRBTCBVTklY KSAoVFJVNjQgVU5JWCkKLSAgMy4xNC4gWzk4XUMtS0VSTUlUIEFORCBTR0kgSVJJWAotICAzLjE1 LiBbOTldQy1LRVJNSVQgQU5EIFRIRSBCRUJPWAotICAzLjE2LiBbMTAwXUMtS0VSTUlUIEFORCBE Ry9VWAotICAzLjE3LiBbMTAxXUMtS0VSTUlUIEFORCBTRVFVRU5UIERZTklYCi0gIDMuMTguIFsx MDJdQy1LRVJNSVQgQU5EIHtGUkVFLE9QRU4sTkVUfUJTRAotICAzLjE5LiBbMTAzXUMtS0VSTUlU IEFORCBNQUMgT1MgWAotICAzLjIwLiBbMTA0XUMtS0VSTUlUIEFORCBDT0hFUkVOVAotCi0gICBU aGUgZm9sbG93aW5nIHNlY3Rpb25zIGFwcGx5IHRvIHNwZWNpZmljIFVuaXggdmVyc2lvbnMuIE1v c3Qgb2YgdGhlbQotICAgY29udGFpbiByZWZlcmVuY2VzIHRvIEZBUXMgKEZyZXF1ZW50bHkgQXNr ZWQgUXVlc3Rpb25zKSwgYnV0IHRoZXNlIHRlbmQKLSAgIHRvIGJlIGVwaGVtZXJhbC4gRm9yIHBv c3NpYmx5IG1vcmUgY3VycmVudCBpbmZvcm1hdGlvbiBzZWU6Ci0KLSAgWzEwNV1odHRwOi8vd3d3 LmZhcXMub3JnCi0gIFsxMDZdaHR0cDovL2FwbGF3cmVuY2UuY29tL1VuaXhhcnQvbmV3dG91bml4 Lmh0bWwKLQotICAgT25lIHRocmVhZCB0aGF0IHJ1bnMgdGhyb3VnaCBtYW55IG9mIHRoZW0sIGFu ZCBpbXBsaWNpdGx5IHBlcmhhcHMKLSAgIHRocm91Z2ggYWxsLCBjb25jZXJucyB0aGUgcHJvYmxl bXMgdGhhdCBvY2N1ciB3aGVuIHRyeWluZyB0byBkaWFsIG91dAotICAgb24gYSBzZXJpYWwgZGV2 aWNlIHRoYXQgaXMgKGFsc28pIGVuYWJsZWQgZm9yIGRpYWxpbmcgaW4uIFRoZQotICAgInNvbHV0 aW9ucyIgdG8gdGhpcyBwcm9ibGVtIGFyZSBtYW55LCB2YXJpZWQsIGRpdmVyc2UsIGFuZCB1c3Vh bGx5Ci0gICBncm9zcywgaW52b2x2aW5nIGNvbmZpZ3VyaW5nIHRoZSBkZXZpY2UgZm9yIGJpZGly ZWN0aW9uYWwgdXNlLiBUaGlzIGlzCi0gICBkb25lIGluIGEgaGlnaGx5IE9TLWRlcGVuZGVudCBh bmQgb2Z0ZW4gb2JzY3VyZSBtYW5uZXIsIGFuZCB0aGUgZWZmZWN0cwotICAgKGdvb2Qgb3IgZXZp bCkgYXJlIGFsc28gaGlnaGx5IGRlcGVuZGVudCBvbiB0aGUgcGFydGljdWxhciBPUyAoYW5kCi0g ICBnZXR0eSB2YXJpZXR5LCBldGMpLiBNYW55IGV4YW1wbGVzIGFyZSBnaXZlbiBpbiB0aGUgWzEw N11PUy1zcGVjaWZpYwotICAgc2VjdGlvbnMgYmVsb3cuCi0KLSAgIEFuIGltcG9ydGFudCBwb2lu dCB0byBrZWVwIGluIG1pbmQgaXMgdGhhdCBDLUtlcm1pdCBpcyBhCi0gICBjcm9zcy1wbGF0Zm9y bSwgcG9ydGFibGUgc29mdHdhcmUgcHJvZ3JhbS4gSXQgd2FzIG5vdCBkZXNpZ25lZAotICAgc3Bl Y2lmaWNhbGx5IGFuZCBvbmx5IGZvciB5b3VyIHBhcnRpY3VsYXIgVW5peCB2ZXJzaW9uLCBvciBm b3IgdGhhdAotICAgbWF0dGVyLCBmb3IgVW5peCBpbiBwYXJ0aWN1bGFyIGF0IGFsbC4gSXQgYWxz byBydW5zIG9uIFZNUywgQU9TL1ZTLAotICAgVk9TLCBhbmQgb3RoZXIgbm9uLVVuaXggcGxhdGZv cm1zLiBBbGwgdGhlIFVuaXggdmVyc2lvbnMgb2YgQy1LZXJtaXQKLSAgIHNoYXJlIGNvbW1vbiBp L28gbW9kdWxlcywgd2l0aCBjb21waWxlLXRpbWUgI2lmZGVmIGNvbnN0cnVjdGlvbnMgdXNlZAot ICAgdG8gYWNjb3VudCBmb3IgdGhlIGRpZmZlcmVuY2VzIGFtb25nIHRoZSBtYW55IFVuaXggcHJv ZHVjdHMgYW5kCi0gICByZWxlYXNlcy4gSWYgeW91IHRoaW5rIHRoYXQgQy1LZXJtaXQgaXMgYmVo YXZpbmcgYmFkbHkgb3IgbWlzc2luZwotICAgc29tZXRoaW5nIG9uIHlvdXIgcGFydGljdWxhciBV bml4IHZlcnNpb24sIHlvdSBtaWdodCBiZSByaWdodCAtLSB3ZQotICAgY2FuJ3QgY2xhaW0gdG8g YmUgZXhwZXJ0IGluIGh1bmRyZWRzIG9mIGRpZmZlcmVudCBPUyAvIHZlcnNpb24gLwotICAgaGFy ZHdhcmUgLyBsaWJyYXJ5IGNvbWJpbmF0aW9ucy4gSWYgeW91J3JlIGEgcHJvZ3JhbW1lciwgdGFr ZSBhIGxvb2sgYXQKLSAgIHRoZSBzb3VyY2UgY29kZSBhbmQgWzEwOF1zZW5kIHVzIHlvdXIgc3Vn Z2VzdGVkIGZpeGVzIG9yIGNoYW5nZXMuIE9yCi0gICBlbHNlIGp1c3QgWzEwOV1zZW5kIHVzIGEg cmVwb3J0IGFib3V0IHdoYXQgc2VlbXMgdG8gYmUgd3JvbmcgYW5kIHdlJ2xsCi0gICBzZWUgd2hh dCB3ZSBjYW4gZG8uCi0KLTMuMC4gQy1LRVJNSVQgT04gUEMtQkFTRUQgVU5JWEVTCi0KLSAgIFsg WzExMF1Ub3AgXSBbIFsxMTFdQ29udGVudHMgXSBbIFsxMTJdU2VjdGlvbiBDb250ZW50cyBdIFsg WzExM11OZXh0IF0KLQotICAgQWxzbyBzZWU6IFsxMTRdaHR0cDovL3d3dy5wY3VuaXguY29tLy4K LQotICAgU0VDVElPTiBDT05URU5UUwotCi0gIDMuMC4xLiBbMTE1XUludGVycnVwdCBDb25mbGlj dHMKLSAgMy4wLjIuIFsxMTZdV2luZG93cy1TcGVjaWZpYyBIYXJkd2FyZQotICAzLjAuMy4gWzEx N11Nb2RlbXMKLSAgMy4wLjQuIFsxMThdQ2hhcmFjdGVyIFNldHMKLSAgMy4wLjUuIFsxMTldS2V5 Ym9hcmQsIFNjcmVlbiwgYW5kIE1vdXNlIEFjY2VzcwotICAzLjAuNi4gWzEyMF1MYXB0b3BzCi0K LTMuMC4xLiBJbnRlcnJ1cHQgQ29uZmxpY3RzCi0KLSAgIFsgWzEyMV1Ub3AgXSBbIFsxMjJdQ29u dGVudHMgXSBbIFsxMjNdU2VjdGlvbiBDb250ZW50cyBdIFsgWzEyNF1OZXh0IF0KLQotICAgUENz IGFyZSBub3QgdGhlIGJlc3QgcGxhdGZvcm0gZm9yIHJlYWwgb3BlcmF0aW5nIHN5c3RlbXMgbGlr ZSBVbml4LiBUaGUKLSAgIGFyY2hpdGVjdHVyZSBzdWZmZXJzIGZyb20gbnVtZXJvdXMgZGVmaWNp ZW5jaWVzLCBub3QgdGhlIGxlYXN0IG9mIHdoaWNoCi0gICBpcyB0aGUgc3RpZmxpbmdseSBzbWFs bCBudW1iZXIgb2YgaGFyZHdhcmUgaW50ZXJydXB0cyAoZWl0aGVyIDcgb3IgMTUsCi0gICBtYW55 IG9mIHdoaWNoIGFyZSBwcmVhbGxvY2F0ZWQpLiBUaHVzIGFkZGluZyBkZXZpY2VzLCB1c2luZyBt dWx0aXBsZQotICAgc2VyaWFsIHBvcnRzLCBldGMsIGlzIGFsd2F5cyBhIGNoYWxsZW5nZSBhbmQg b2Z0ZW4gYSBuaWdodG1hcmUuIFRoZQotICAgZnJlZS1mb3ItYWxsIG5hdHVyZSBvZiB0aGUgUEMg bWFya2V0IGFuZCB0aGUgbGFjayBvZiBzdGFuZGFyZHMgY29tYmluZWQKLSAgIHdpdGggdGhlIGRp dmVyc2l0eSBvZiBVbml4IE9TIHZlcnNpb25zIG1ha2UgaXQgZGlmZmljdWx0IHRvIGZpbmQKLSAg IGRyaXZlcnMgZm9yIGFueSBwYXJ0aWN1bGFyIGRldmljZSBvbiBhbnkgcGFydGljdWxhciB2ZXJz aW9uIG9mIFVuaXguCi0KLSAgIE9mIHNwZWNpYWwgaW50ZXJlc3QgdG8gS2VybWl0IHVzZXJzIGlz IHRoZSBmYWN0IHRoYXQgdGhlcmUgaXMgbm8KLSAgIHN0YW5kYXJkIHByb3Zpc2lvbiBpbiB0aGUg UEMgYXJjaGl0ZWN0dXJlIGZvciBtb3JlIHRoYW4gMiBjb21tdW5pY2F0aW9uCi0gICAoc2VyaWFs KSBwb3J0cy4gQ09NMyBhbmQgQ09NNCAob3IgaGlnaGVyKSB3aWxsIG5vdCB3b3JrIHVubGVzcyB5 b3UgKGEpCi0gICBmaW5kIG91dCB0aGUgaGFyZHdhcmUgYWRkcmVzcyBhbmQgaW50ZXJydXB0IGZv ciBlYWNoLCAoYikgZmluZCBvdXQgaG93Ci0gICB0byBwcm92aWRlIHlvdXIgVW5peCB2ZXJzaW9u IHdpdGggdGhpcyBpbmZvcm1hdGlvbiwgYW5kIChjKSBhY3R1YWxseQotICAgc2V0IHVwIHRoZSBj b25maWd1cmF0aW9uIGluIHRoZSBVbml4IHN0YXJ0dXAgZmlsZXMgKG9yIHdoYXRldmVyIG90aGVy Ci0gICBtZXRob2QgaXMgdXNlZCkuIFdhdGNoIG91dCBmb3IgaW50ZXJydXB0IGNvbmZsaWN0cywg ZXNwZWNpYWxseSB3aGVuCi0gICB1c2luZyBhIHNlcmlhbCBtb3VzZSwgYW5kIGRvbid0IGV4cGVj dCB0byBiZSBhYmxlIHRvIHVzZSBtb3JlIHRoYW4gdHdvCi0gICBzZXJpYWwgcG9ydHMuCi0KLSAg IFRoZSB0ZWNobmlxdWVzIGZvciByZXNvbHZpbmcgaW50ZXJydXB0IGNvbmZsaWN0cyBhcmUgZGlm ZmVyZW50IGZvciBlYWNoCi0gICBvcGVyYXRpbmcgc3lzdGVtIChMaW51eCwgTmV0QlNELCBldGMp LiBJbiBnZW5lcmFsLCB0aGVyZSBpcyBhCi0gICBjb25maWd1cmF0aW9uIGZpbGUgc29tZXdoZXJl IHRoYXQgbGlzdHMgQ09NIHBvcnRzLCBzb21ldGhpbmcgbGlrZSB0aGlzOgotCi0gIGNvbTAgICAg YXQgaXNhPyBwb3J0IDB4M2Y4IGlycSA0ICAgICAgIyBET1MgQ09NMQotICBjb20xICAgIGF0IGlz YT8gcG9ydCAweDJmOCBpcnEgMyAgICAgICMgRE9TIENPTTIKLQotICAgVGhlIGFkZHJlc3MgYW5k IElSUSB2YWx1ZXMgaW4gdGhpcyBmaWxlIG11c3QgYWdyZWUgd2l0aCB0aGUgdmFsdWVzIGluCi0g ICB0aGUgUEMgQklPUyBhbmQgd2l0aCB0aGUgcG9ydHMgdGhlbXNlbHZlcywgYW5kIHRoZXJlIG11 c3Qgbm90IGJlIG1vcmUKLSAgIHRoYW4gb25lIGRldmljZSB3aXRoIHRoZSBzYW1lIGludGVycnVw dC4gVW5mb3J0dW5hdGVseSwgZHVlIHRvIHRoZQotICAgc21hbGwgbnVtYmVyIG9mIGF2YWlsYWJs ZSBpbnRlcnJ1cHRzLCBpbnN0YWxsaW5nIG5ldyBkZXZpY2VzIG9uIGEgUEMKLSAgIGFsbW9zdCBh bHdheXMgY3JlYXRlcyBhIGNvbmZsaWN0LiBIZXJlIGlzIGEgdHlwaWNhbCB0YWxlIGZyb20gYSBM aW51eAotICAgdXNlciAoRnJlZCBTbWl0aCkgYWJvdXQgaW5zdGFsbGluZyBhIHRoaXJkIHNlcmlh bCBwb3J0OgotCi0gICAgIC4uLnByb2JsZW1zIGNhbiBjb21lIGZyb20gYSBudW1iZXIgb2YgY2F1 c2VzLiBUaGUgb25lIEkgZm91Z2h0IHdpdGgKLSAgICAgZm9yIHNvbWUgdGltZSwgYW5kIGZpbmFs bHkgY29ucXVlcmVkLCB3YXMgdGhhdCBteSBtb2RlbSBpcyBvbiBhbgotICAgICBhZGQtaW4gc2Vy aWFsIHBvcnQsIGN1YTMvSVJRNS4gQnkgZGVmYXVsdCBJUlE1IGhhcyBhIHZlcnkgbG93Ci0gICAg IHByaW9yaXR5LCBhbmQgZG9lcyBub3QgZ2V0IGVub3VnaCBzZXJ2aWNlIGluIHRpbWVzIHdoZW4g dGhlIHN5c3RlbQotICAgICBpcyBidXN5IHRvIHByZXZlbnQgbG9zaW5nIGRhdGEuIFRoaXMgaW4g dHVybiBjYXVzZXMgbWFueSByZXNlbmRzLgotICAgICBUaGVyZSBhcmUgdHdvICdmaXhlcycgdGhh dCBJIGtub3cgb2YsIG9uZSBpcyB0byByZWxheCBoYXJkIGRpc2sKLSAgICAgaW50ZXJydXB0IGhv Z2dpbmcgYnkgdXNpbmcgdGhlIGNvcnJlY3QgcGFyYW1ldGVyIHRvIGhkcGFybSwgYnV0IEkKLSAg ICAgZG9uJ3QgbGlrZSB0aGF0IG9uZSBiZWNhdXNlIHRoZSBoZHBhcm0gbWFuIHBhZ2UgaW5kaWNh dGVzIGl0IGlzCi0gICAgIHJpc2t5IHRvIHVzZS4gVGhlIG90aGVyIG9uZSwgdGhlIG9uZSBJIHVz ZWQsIHdhcyB0byBnZXQgJ2lycXR1bmUnCi0gICAgIGFuZCB1c2UgaXQgdG8gZ2l2ZSBJUlE1IHRo ZSBoaWdoZXN0IHByaW9yaXR5IGluc3RlYWQgb2YgbmVhcmx5IHRoZQotICAgICBsb3dlc3QuIENv bXBsZXRlbHkgY3VyZWQgdGhlIHByb2JsZW0uCi0KLSAgIEhlcmUncyBhbm90aGVyIG9uZSBmcm9t IGEgbmV3c2dyb3VwIHBvc3Rpbmc6Ci0KLSAgICAgQWZ0ZXIgbXVjaCBoYWlyIHB1bGxpbmcsIEkn dmUgZGlzY292ZXJlZCB3aHkgbXkgc2VyaWFsIHBvcnQgd29uJ3QKLSAgICAgd29yay4gQXBwYXJl bnRseSBteSBbUENdIGhhcyB0aHJlZSBzZXJpYWwgZGV2aWNlcyAodHdvIGNvbW0gcG9ydHMKLSAg ICAgYW5kIGFuIElSIHBvcnQpLCBvZiB3aGljaCBvbmx5IHR3byBhdCBhIHRpbWUgY2FuIGJlIGFj dGl2ZS4gSSBsb29rZWQKLSAgICAgaW4gdGhlIEJJT1Mgc2V0dXAgYW5kIG5vdGljZWQgdGhhdCB0 aGUgSVIgcG9ydCB3YXMgYWN0aXZhdGVkLCBidXQKLSAgICAgZGlkbid0IHJlYWxpemUgYXQgdGhl IHRpbWUgdGhhdCB0aGlzIG1lYW50IHRoYXQgQ09NMiB3YXMgdGhlcmVieQotICAgICBkZS1hY3Rp dmF0ZWQuIEkgdHVybmVkIG9mZiB0aGUgSVIgcG9ydCBhbmQgbm93IHRoZSBzZXJpYWwgcG9ydCB3 b3JrcwotICAgICBhcyBhZHZlcnRpc2VkLgotCi0zLjAuMi4gV2luZG93cy1TcGVjaWZpYyBIYXJk d2FyZQotCi0gICBbIFsxMjVdVG9wIF0gWyBbMTI2XUNvbnRlbnRzIF0gWyBbMTI3XVNlY3Rpb24g Q29udGVudHMgXSBbIFsxMjhdTmV4dCBdCi0gICBbIFsxMjldUHJldmlvdXMgXQotCi0gICBUbyBj b21wbGljYXRlIG1hdHRlcnMsIHRoZSBQQyBwbGF0Zm9ybSBpcyBiZWNvbWluZyBpbmNyZWFzaW5n bHkgYW5kCi0gICBpbmV4b3JhYmx5IFdpbmRvd3Mtb3JpZW50ZWQuIE1vcmUgYW5kIG1vcmUgYWRk LW9uIGRldmljZXMgYXJlICJXaW5kb3dzCi0gICBvbmx5IiAtLSBtZWFuaW5nIHRoZXkgYXJlIGlu Y29tcGxldGUgYW5kIHJlbHkgb24gcHJvcHJpZXRhcnkKLSAgIFdpbmRvd3MtYmFzZWQgc29mdHdh cmUgZHJpdmVycyB0byBkbyB0aGUgam9icyB0aGF0IHlvdSB3b3VsZCBleHBlY3QgdGhlCi0gICBk ZXZpY2UgaXRzZWxmIHRvIGRvLiBQQ01DSUEsIFBDSSwgb3IgIlBsdWctbi1QbGF5IiBkZXZpY2Vz IGFyZSByYXJlbHkKLSAgIHN1cHBvcnRlZCBvbiBQQy1iYXNlZCBVbml4IHZlcnNpb25zIHN1Y2gg YXMgU0NPOyBXaW5tb2RlbXMsCi0gICBXaW5wcmludGVycywgYW5kIHRoZSBsaWtlIGFyZSBub3Qg c3VwcG9ydGVkIG9uIGFueSBVbml4IHZhcmlldHkgKHdpdGgKLSAgIFsxMzBdYSBmZXcgZXhjZXB0 aW9ucykuIFRoZSBzZWxmLXByb2NsYWltZWQgTWljcm9zb2Z0IFBDIDk3IChvciBsYXRlcikKLSAg IHN0YW5kYXJkIG9ubHkgbWFrZXMgbWF0dGVycyB3b3JzZSBzaW5jZSBpdHMgb25seSBwdXJwb3Nl IHRvIGVuc3VyZSB0aGF0Ci0gICBQQ3MgYXJlICJvcHRpbWl6ZWQgdG8gcnVuIFdpbmRvd3MgOTUg YW5kIFdpbmRvd3MgTlQgNC4wIGFuZCBmdXR1cmUKLSAgIHZlcnNpb25zIG9mIHRoZXNlIG9wZXJh dGluZyBzeXN0ZW1zIi4KLQotICAgV2l0aCB0aGUgZXhjZXB0aW9uIG5vdGVkICh0aGUgTHVjZW50 IG1vZGVtLCBwZXJoYXBzIGEgaGFuZGZ1bCBvZiBvdGhlcnMKLSAgIGJ5IHRoZSB0aW1lIHlvdSBy ZWFkIHRoaXMpLCBkcml2ZXJzIGZvciAiV2luIiBkZXZpY2VzIGFyZSBhdmFpbGFibGUKLSAgIG9u bHkgZm9yIFdpbmRvd3MsIHNpbmNlIHRoZSBXaW5kb3dzIG1hcmtldCBkd2FyZnMgdGhhdCBvZiBh bnkKLSAgIHBhcnRpY3VsYXIgVW5peCBicmFuZCwgYW5kIGZvciB0aGF0IG1hdHRlciBhbGwgVW5p eGVzIChvciBmb3IgdGhhdAotICAgbWF0dGVyLCBhbGwgbm9uLVdpbmRvd3Mgb3BlcmF0aW5nIHN5 c3RlbXMpIGNvbWJpbmVkLiBJZiB5b3VyIHZlcnNpb24gb2YKLSAgIFVuaXggKFNDTywgTGludXgs IEJTREksIEZyZWVCU0QsIGV0YykgZG9lcyBub3Qgc3VwcG9ydCBhIHBhcnRpY3VsYXIKLSAgIGRl dmljZSwgdGhlbiBDLUtlcm1pdCBjYW4ndCB1c2UgaXQgZWl0aGVyLiBDLUtlcm1pdCwgbGlrZSBh bnkgVW5peAotICAgYXBwbGljYXRpb24sIG11c3QgYWNjZXNzIGFsbCBkZXZpY2VzIHRocm91Z2gg ZHJpdmVycyBhbmQgbm90IGRpcmVjdGx5Ci0gICBiZWNhdXNlIFVuaXggaXMgYSByZWFsIG9wZXJh dGluZyBzeXN0ZW0uCi0KLSAgIERvbid0IHdhc3RlIHRpbWUgdGhpbmtpbmcgdGhhdCB5b3UsIG9y IGFueWJvZHkgZWxzZSwgY291bGQgd3JpdGUgYQotICAgTGludXggKG9yIG90aGVyIFVuaXgpIGRy aXZlciBmb3IgYSBXaW5tb2RlbSBvciBvdGhlciAiV2luIiBkZXZpY2UuCi0gICBGaXJzdCBvZiBh bGwsIHRoZXNlIGRldmljZXMgZ2VuZXJhbGx5IHJlcXVpcmUgcmVhbHRpbWUgY29udHJvbCwgYnV0 Ci0gICBzaW5jZSBVbml4IGlzIGEgdHJ1ZSBtdWx0aXRhc2tpbmcgb3BlcmF0aW5nIHN5c3RlbSwg cmVhbHRpbWUgZGV2aWNlCi0gICBjb250cm9sIGlzIG5vdCBwb3NzaWJsZSBvdXRzaWRlIHRoZSBr ZXJuZWwuIFNlY29uZCwgdGhlIHNwZWNpZmljYXRpb25zCi0gICBmb3IgdGhlc2UgZGV2aWNlcyBh cmUgc2VjcmV0IGFuZCBwcm9wcmlldGFyeSwgYW5kIGVhY2ggb25lIChhbmQgZWFjaAotICAgdmVy c2lvbiBvZiBlYWNoIG9uZSkgaXMgcG90ZW50aWFsbHkgZGlmZmVyZW50LiBUaGlyZCwgYSBXaW5t b2RlbSBkcml2ZXIKLSAgIHdvdWxkIGJlIGVub3Jtb3VzbHkgY29tcGxleDsgaXQgd291bGQgdGFr ZSB5ZWFycyB0byB3cml0ZSBhbmQgZGVidWcsIGJ5Ci0gICB3aGljaCB0aW1lIGl0IHdvdWxkIGJl IG9ic29sZXRlLgotCi0gICBBIG1vcmUgcmVjZW50IGdlbmVyYXRpb24gb2YgUENzIChjaXJjYSAx OTk5LTIwMDApIGlzIG1hcmtldGVkIGFzCi0gICAiTGVnYWN5IEZyZWUiLiBPbmUgY2FuIG9ubHkg c3BlY3VsYXRlIHdoYXQgdGhhdCBjb3VsZCBtZWFuLiBNb3N0IGxpa2VseQotICAgaXQgbWVhbnMg aXQgd2lsbCBPTkxZIHJ1biB0aGUgdmVyeSBsYXRlc3QgdmVyc2lvbnMgb2YgV2luZG93cywgYW5k IGlzCi0gICBtYWRlIGV4Y2x1c2l2ZWx5IG9mIFdpbm1vZGVtcywgV2lucHJpbnRlcnMsIFdpbm1l bW9yeSwgYW5kIFdpbi1DUFUtZmFucwotICAgKExlZ2FjeSBGcmVlIGlzIGEgY29uY2VwdCBbMTMx XXBpb25lZXJlZCBieSBNaWNyb3NvZnQpLgotCi0gICBCZWZvcmUgeW91IGJ1eSBhIG5ldyBQQyBv ciBhZGQtb24gZXF1aXBtZW50LCBlc3BlY2lhbGx5IHNlcmlhbCBwb3J0cywKLSAgIGludGVybmFs IG1vZGVtcywgb3IgcHJpbnRlcnMsIG1ha2Ugc3VyZSB0aGV5IGFyZSBjb21wYXRpYmxlIHdpdGgg eW91cgotICAgdmVyc2lvbiBvZiBVbml4LiBUaGlzIGlzIGJlY29taW5nIGFuIGV2ZXItZ3JlYXRl ciBjaGFsbGVuZ2U7IG9ubHkgYQotICAgaHVnZSBjb21wYW55IGxpa2UgTWljcm9zb2Z0IGNhbiBh ZmZvcmQgdG8gYmUgY29uc3RhbnRseSBjcmFua2luZyBvdXQKLSAgIGFuZC9vciB2ZXJpZnlpbmcg ZHJpdmVycyBmb3IgdGhlIHRob3VzYW5kcyBvZiB2aWRlbyBib2FyZHMsIHNvdW5kCi0gICBjYXJk cywgbmV0d29yayBhZGFwdGVycywgU0NTSSBhZGFwdGVycywgYnVzZXMsIGV0YywgdGhhdCBzcGV3 IGZvcnRoIGluCi0gICBhbiB1bmNvbnRyb2xsZWQgbWFubmVyIGZyb20gYWxsIGNvcm5lcnMgb2Yg dGhlIHdvcmxkIG9uIGEgZGFpbHkgYmFzaXMuCi0gICBXaXRoIHZlcnkgZmV3IGV4Y2VwdGlvbnMs IG1ha2VycyBvZiBQQ3MgYXNzZW1ibGUgdGhlIHZhcmlvdXMgY29tcG9uZW50cwotICAgYW5kIHRo ZW4gdmVyaWZ5IHRoZW0gb25seSB3aXRoIFdpbmRvd3MsIHdoaWNoIHRoZXkgbXVzdCBkbyBzaW5j ZSB0aGV5Ci0gICBhcmUsIG5vIGRvdWJ0LCBwcmVsb2FkaW5nIHRoZSBQQyB3aXRoIFdpbmRvd3Mu IFRvIGZpbmQgYSBtb2Rlcm4gUEMgdGhhdAotICAgaXMgY2FwYWJsZSBvZiBydW5uaW5nIGEgdmFy aWV0eSBvZiBub24tV2luZG93cyBvcGVyYXRpbmcgc3lzdGVtcyAoZS5nLgotICAgTGludXgsIFND TyBPcGVuU2VydmVyLCBVbml4d2FyZSwgYW5kIFNvbGFyaXMpIGlzIGEgZm9ybWlkYWJsZSBjaGFs bGVuZ2UKLSAgIHJlcXVpcmluZyBjYXJlZnVsIHN0dWR5IG9mIGVhY2ggdmVuZG9yJ3MgImNvbXBh dGliaWxpdHkgbGlzdHMiIGFuZAotICAgcHJlY2lzZSBhdHRlbnRpb24gdG8gZXhhY3QgY29tcG9u ZW50IG1vZGVsIG51bWJlcnMgYW5kIHJldmlzaW9uIGxldmVscy4KLQotMy4wLjMuIE1vZGVtcwot Ci0gICBbIFsxMzJdVG9wIF0gWyBbMTMzXUNvbnRlbnRzIF0gWyBbMTM0XVNlY3Rpb24gQ29udGVu dHMgXSBbIFsxMzVdTmV4dCBdCi0gICBbIFsxMzZdUHJldmlvdXMgXQotCi0gICBFeHRlcm5hbCBt b2RlbXMgYXJlIHJlY29tbWVuZGVkOgotCi0gICAgICogVGhleSBkb24ndCBuZWVkIGFueSBzcGVj aWFsIGRyaXZlcnMuCi0gICAgICogWW91IGNhbiB1c2UgdGhlIGxpZ2h0cyBhbmQgc3BlYWtlciB0 byB0cm91Ymxlc2hvb3QgZGlhbGluZy4KLSAgICAgKiBZb3UgY2FuIHNoYXJlIHRoZW0gYW1vbmcg YWxsIHR5cGVzIG9mIGNvbXB1dGVycy4KLSAgICAgKiBZb3UgY2FuIGVhc2lseSB0dXJuIHRoZW0g b2ZmIGFuZCBvbiB3aGVuIHBvd2VyLWN5Y2xpbmcgc2VlbXMKLSAgICAgICB3YXJyYW50ZWQuCi0g ICAgICogVGhleSBhcmUgbW9yZSBsaWtlbHkgdG8gaGF2ZSBtYW51YWxzLgotCi0gICBJbnRlcm5h bCBQQyBtb2RlbXMgKGV2ZW4gd2hlbiB0aGV5IGFyZSBub3QgV2lubW9kZW1zLCB3aGljaCBpcwot ICAgaW5jcmVhc2luZ2x5IHVubGlrZWx5IGluIG5ldyBQQ3MpIGFyZSBhbHdheXMgdHJvdWJsZSwg ZXNwZWNpYWxseSBpbgotICAgVW5peC4gRXZlbiB3aGVuIHRoZXkgd29yayBmb3IgZGlhbGluZyBv dXQsIHRoZXkgbWlnaHQgbm90IHdvcmsgZm9yCi0gICBkaWFsaW5nIGluLCBldGMuIFByb2JsZW1z IHRoYXQgb2NjdXIgd2hlbiB1c2luZyBhbiBpbnRlcm5hbCBtb2RlbSBjYW4KLSAgIGFsbW9zdCBh bHdheXMgYmUgZWxpbWluYXRlZCBieSBzd2l0Y2hpbmcgdG8gYW4gZXh0ZXJuYWwgb25lLiBFdmVu IHdoZW4KLSAgIGFuIGludGVybmFsIG1vZGVtIGlzIG5vdCBhIFdpbm1vZGVtIG9yIFBsdWctbi1Q bGF5LCBpdCBpcyBvZnRlbiBhCi0gICBuby1uYW1lIG1vZGVsIG9mIHVua25vd24gcXVhbGl0eSAt LSBub3QgdGhlIHNvcnQgb2YgdGhpbmcgeW91IHdhbnQKLSAgIHNpdHRpbmcgZGlyZWN0bHkgb24g eW91ciBjb21wdXRlcidzIGJ1cy4gKEV2ZW4gaWYgaXQgZG9lcyBub3QgY2F1c2UKLSAgIGhhcmR3 YXJlIHByb2JsZW1zLCBpdCBwcm9iYWJseSBjYW1lIHdpdGhvdXQgYSBjb21tYW5kIGxpc3QsIHNv IG5vIFVuaXgKLSAgIHNvZnR3YXJlIHdpbGwga25vdyBob3cgdG8gY29udHJvbCBpdC4pIEZvciBt b3JlIGFib3V0IFVuaXggY29tcGF0aWJsZQotICAgbW9kZW1zLCBzZWU6Ci0KLSAgWzEzN11odHRw Oi8vd3d3LmlkaXIubmV0L35ncm9taXRrYy93aW5tb2RlbS5odG1sCi0KLSAgIFJlbWVtYmVyIHRo YXQgUENzLCBldmVuIG5vdyAtLSBtb3JlIHRoYW4gdHdvIGRlY2FkZXMgYWZ0ZXIgdGhleSB3ZXJl Ci0gICBmaXJzdCBpbnRyb2R1Y2VkIC0tIGFyZSBub3QgKGluIGdlbmVyYWwpIGNhcGFibGUgb2Yg c3VwcG9ydGluZyBtb3JlCi0gICB0aGFuIDIgc2VyaWFsIGRldmljZXMuIEhlcmUncyBhIHNob3J0 IHN1Y2Nlc3Mgc3RvcnkgZnJvbSBhIHJlY2VudAotICAgbmV3c2dyb3VwIHBvc3Rpbmc6ICJJIGhh dmUgYSBEaWFtb25kIFN1cHJhU29uaWMgSUkgZHVhbCBtb2RlbSBpbiBteQotICAgbWFjaGluZS4g V2hhdCBJIGhhZCB0byBlbmQgdXAgZG9pbmcgaXMgYnV5aW5nIGEgUFMvMiBtb3VzZSBhbmQgcG9y dCBhbmQKLSAgIGluc3RhbGwgaXQuIEhhZCB0byBnZXQgcmlkIG9mIG15IHNlcmlhbCBtb3VzZS4g SSBhbHNvIGhhZCB0byBkaXNhYmxlCi0gICBQblAgaW4gbXkgY29tcHV0ZXIgYmlvcy4gSSB3YXMg aGF2aW5nIElSUSBjb25mbGljdHMgYmV0d2VlbiBteSBzZXJpYWwKLSAgIG1vdXNlIGFuZCAnY29t IDMnLiBCb3RoIG1vZGVtcyB3b3JrIGZpbmUgZm9yIG1lLiBNeSBmaXJzdCBtb2RlbSBpcwotICAg dHR5UzAgYW5kIG15IHNlY29uZCBpcyB0dHlTMS4iIFNwZWNpYWwgdGhpcmQtcGFydHkgbXVsdGlw b3J0IGJvYXJkcwotICAgc3VjaCBhcyBbMTM4XURpZ2lCb2FyZCBhcmUgYXZhaWxhYmxlIGZvciBj ZXJ0YWluIFVuaXggcGxhdGZvcm1zCi0gICAodHlwaWNhbGx5IFNDTywgbWF5YmUgTGludXgpIHRo YXQgY29tZSB3aXRoIHNwZWNpYWwgcGxhdGZvcm0tc3BlY2lmaWMKLSAgIGRyaXZlcnMuCi0KLTMu MC40LiBDaGFyYWN0ZXIgU2V0cwotCi0gICBbIFsxMzldVG9wIF0gWyBbMTQwXUNvbnRlbnRzIF0g WyBbMTQxXVNlY3Rpb24gQ29udGVudHMgXSBbIFsxNDJdTmV4dCBdCi0gICBbIFsxNDNdUHJldmlv dXMgXQotCi0gICBQQ3MgZ2VuZXJhbGx5IGhhdmUgUEMgY29kZSBwYWdlcyBzdWNoIGFzIENQNDM3 IG9yIENQODUwLCBhbmQgdGhlc2UgYXJlCi0gICBvZnRlbiB1c2VkIGJ5IFBDLWJhc2VkIFVuaXgg b3BlcmF0aW5nIHN5c3RlbXMsIHBhcnRpY3VsYXJseSBvbiB0aGUKLSAgIGNvbnNvbGUuIFRoZXNl IGFyZSBzdXBwb3J0ZWQgZGlyZWN0bHkgYnkgQy1LZXJtaXQncyBTRVQgRklMRQotICAgQ0hBUkFD VEVSLVNFVCBhbmQgU0VUIFRFUk1JTkFMIENIQVJBQ1RFUi1TRVQgY29tbWFuZHMuIFNvbWUgUEMt YmFzZWQKLSAgIFVuaXggdmVyc2lvbnMsIHN1Y2ggYXMgcmVjZW50IFJlZCBIYXQgTGludXggcmVs ZWFzZXMsIG1pZ2h0IGFsc28KLSAgIHN1cHBvcnQgTWljcm9zb2Z0IFdpbmRvd3MgY29kZSBwYWdl cyBzdWNoIGFzIENQMTI1Miwgb3IgZXZlbiBMYXRpbgotICAgQWxwaGFiZXQgMSBpdHNlbGYgKHBl cmhhcHMgZGlzcGxheWVkIHdpdGggQ1A0MzcgZ2x5cGhzKS4gKEFuZCB3b3JrIGlzCi0gICBpbiBw cm9ncmVzcyB0byBzdXBwb3J0IFVuaWNvZGUgVVRGOCBpbiBMaW51eC4pCi0KLSAgIENlcnRhaW4g V2luZG93cyBjb2RlIHBhZ2VzIGFyZSBub3Qgc3VwcG9ydGVkIGRpcmVjdGx5IGJ5IEMtS2VybWl0 LCBidXQKLSAgIHNpbmNlIHRoZXkgYXJlIElTTyBMYXRpbiBBbHBoYWJldHMgd2l0aCBub25zdGFu ZGFyZCAiZXh0ZW5zaW9ucyIgaW4gdGhlCi0gICBDMSBjb250cm9sIHJhbmdlLCB5b3UgY2FuIHN1 YnN0aXR1dGUgdGhlIGNvcnJlc3BvbmRpbmcgTGF0aW4gYWxwaGFiZXQKLSAgIChvciBvdGhlciBj aGFyYWN0ZXIgc2V0KSBpbiBhbnkgQy1LZXJtaXQgY2hhcmFjdGVyLXNldCByZWxhdGVkCi0gICBj b21tYW5kczoKLQotICBXaW5kb3dzIENvZGUgUGFnZSAgICBTdWJzdGl0dXRpb24KLSAgIENQIDEw MDQgICAgICAgICAgICAgIExhdGluLTEKLSAgIENQIDEwNTEgICAgICAgICAgICAgIEhQIFJvbWFu LTgKLQotICAgT3RoZXIgV2luZG93cyBjb2RlIHBhZ2VzIGFyZSBtb3N0bHkgKG9yIHRvdGFsbHkp IGluY29tcGF0aWJsZSB3aXRoCi0gICB0aGVpciBMYXRpbiBBbHBoYWJldCBjb3VudGVycGFydHMg KGUuZy4gQ1AxMjUwIGFuZCBMYXRpbi0yKSwgYW5kCi0gICBzZXZlcmFsIG9mIHRoZXNlIGFyZSBh bHJlYWR5IHN1cHBvcnRlZCBieSBDLUtlcm1pdCA3LjAgYW5kIGxhdGVyICgxMjUwLAotICAgMTI1 MSwgYW5kIDEyNTIpLgotCi0zLjAuNS4gS2V5Ym9hcmQsIFNjcmVlbiwgYW5kIE1vdXNlIEFjY2Vz cwotCi0gICBbIFsxNDRdVG9wIF0gWyBbMTQ1XUNvbnRlbnRzIF0gWyBbMTQ2XVNlY3Rpb24gQ29u dGVudHMgXSBbIFsxNDddTmV4dCBdCi0gICBbIFsxNDhdUHJldmlvdXMgXQotCi0gICBGaW5hbGx5 LCBub3RlIHRoYXQgYXMgYSByZWFsIG9wZXJhdGluZyBzeXN0ZW0sIFVuaXggKHVubGlrZSBXaW5k b3dzKQotICAgZG9lcyBub3QgcHJvdmlkZSB0aGUgaW50aW1hdGUgY29ubmVjdGlvbiB0byB0aGUg UEMga2V5Ym9hcmQsIHNjcmVlbiwKLSAgIGFuZCBtb3VzZSB0aGF0IHlvdSBtaWdodCBleHBlY3Qu IFVuaXggYXBwbGljYXRpb25zIGNhbiBub3QgInNlZSIgdGhlCi0gICBrZXlib2FyZCwgYW5kIHRo ZXJlZm9yZSBjYW4gbm90IGJlIHByb2dyYW1tZWQgdG8gdW5kZXJzdGFuZCBGLWtleXMsCi0gICBF ZGl0aW5nIGtleXMsIEFycm93IGtleXMsIEFsdC1rZXkgY29tYmluYXRpb25zLCBhbmQgdGhlIGxp a2UuIFRoaXMgaXMKLSAgIGJlY2F1c2U6Ci0KLSAgICBhLiBVbml4IGlzIGEgcG9ydGFibGUgb3Bl cmF0aW5nIHN5c3RlbSwgbm90IG9ubHkgZm9yIFBDczsKLSAgICBiLiBVbml4IHNlc3Npb25zIGNh biBjb21lIGZyb20gYW55d2hlcmUsIG5vdCBqdXN0IHRoZSBQQydzIG93bgotICAgICAgIGtleWJv YXJkIGFuZCBzY3JlZW47IGFuZDoKLSAgICBjLiBldmVuIHRob3VnaCBpdCBtaWdodCBiZSBwb3Nz aWJsZSBmb3IgYW4gYXBwbGljYXRpb24gdGhhdCBhY3R1YWxseQotICAgICAgIGlzIHJ1bm5pbmcg b24gdGhlIFBDJ3Mga2V5Ym9hcmQgYW5kIHNjcmVlbiB0byBhY2Nlc3MgdGhlc2UgZGV2aWNlcwot ICAgICAgIGRpcmVjdGx5LCB0aGVyZSBhcmUgbm8gQVBJcyAob3V0c2lkZSBvZiBYKSBmb3IgdGhp cy4KLQotMy4wLjYuIExhcHRvcHMKLQotICAgWyBbMTQ5XVRvcCBdIFsgWzE1MF1Db250ZW50cyBd IFsgWzE1MV1TZWN0aW9uIENvbnRlbnRzIF0gWwotICAgWzE1Ml1QcmV2aW91cyBdCi0KLSAgIChU byBiZSBmaWxsZWQgaW4gLiAuIC4pCi0KLTMuMS4gQy1LRVJNSVQgQU5EIEFJWAotCi0gICBbIFsx NTNdVG9wIF0gWyBbMTU0XUNvbnRlbnRzIF0gWyBbMTU1XVNlY3Rpb24gQ29udGVudHMgXSBbIFsx NTZdTmV4dCBdCi0gICBbIFsxNTddUHJldmlvdXMgXQotCi0gICBTRUNUSU9OIENPTlRFTlRTCi0K LSAgMy4xLjEuIFsxNThdQUlYOiBHZW5lcmFsCi0gIDMuMS4yLiBbMTU5XUFJWDogTmV0d29yayBD b25uZWN0aW9ucwotICAzLjEuMy4gWzE2MF1BSVg6IFNlcmlhbCBDb25uZWN0aW9ucwotICAzLjEu NC4gWzE2MV1BSVg6IEZpbGUgVHJhbnNmZXIKLSAgMy4xLjUuIFsxNjJdQUlYOiBYdGVybSBLZXkg TWFwCi0KLSAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHNlZToKLSAgICAgKiBbMTYzXWh0 dHA6Ly93d3cuZW1lcnNvbi5lbW9yeS5lZHUvc2VydmljZXMvYWl4LWZhcS8KLSAgICAgKiBbMTY0 XWh0dHA6Ly93d3cuZmFxcy5vcmcvZmFxcy9ieS1uZXdzZ3JvdXAvY29tcC9jb21wLnVuaXguYWl4 Lmh0bWwKLSAgICAgKiBbMTY1XWh0dHA6Ly93d3cuY2lzLm9oaW8tc3RhdGUuZWR1L2h5cGVydGV4 dC9mYXEvdXNlbmV0L2FpeC1mYXEvdG9wCi0gICAgICAgLmh0bWwKLSAgICAgKiBbMTY2XWh0dHA6 Ly9haXhwZHNsaWIuc2Vhcy51Y2xhLmVkdS8KLSAgICAgKiBbMTY3XWh0dHA6Ly93d3cucm9vdHZn Lm5ldCAoQUlYIGhpc3RvcnkpCi0gICAgICogWzE2OF1mdHA6Ly9ydGZtLm1pdC5lZHUvcHViL3Vz ZW5ldC9uZXdzLmFuc3dlcnMvYWl4LWZhcS9wYXJ0MQotICAgICAqIFsxNjldZnRwOi8vbWlycm9y cy5hb2wuY29tL3B1Yi9ydGZtL3VzZW5ldC1ieS1oaWVyYXJjaHkvY29tcC91bml4L2EKLSAgICAg ICBpeAotCi0gICBhbmQvb3IgcmVhZCB0aGUgWzE3MF1jb21wLnVuaXguYWl4IG5ld3Nncm91cC4K LSAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCi0KLTMuMS4xLiBBSVg6IEdlbmVyYWwKLQotICAgWyBbMTcxXVRv cCBdIFsgWzE3Ml1Db250ZW50cyBdIFsgWzE3M11TZWN0aW9uIENvbnRlbnRzIF0gWyBbMTc0XU5l eHQgXQotCi0gICBBYm91dCBBSVggdmVyc2lvbiBudW1iZXJzOiAidW5hbWUgLWEiIHRlbGxzIHRo ZSB0d28tZGlnaXQgdmVyc2lvbgotICAgbnVtYmVyLCBzdWNoIGFzIDMuMiBvciA0LjEuIFRoZSB0 aHJlZS1kaWdpdCBmb3JtIGNhbiBiZSBzZWVuIHdpdGggdGhlCi0gICAib3NsZXZlbCIgY29tbWFu ZCAodGhpcyBpbmZvcm1hdGlvbiBpcyB1bmF2YWlsYWJsZSBhdCB0aGUgQVBJIGxldmVsIGFuZAot ICAgaXMgcmVwb3J0ZWRseSBvYnRhaW5lZCBieSBzY2FubmluZyB0aGUgaW5zdGFsbGVkIHBhdGNo IGxpc3QpLgotICAgU3VwcG9zZWRseSBhbGwgdGhyZWUtZGlnaXQgdmVyc2lvbnMgd2l0aGluIHRo ZSBzYW1lIHR3by1kaWdpdCB2ZXJzaW9uCi0gICAoZS5nLiA0LjMuMSwgNC4zLjIpIGFyZSBiaW5h cnkgY29tcGF0aWJsZTsgaS5lLiBhIGJpbmFyeSBidWlsdCBvbiBhbnkKLSAgIG9uZSBvZiB0aGVt IHNob3VsZCBydW4gb24gYWxsIG90aGVycywgYnV0IHdobyBrbm93cy4gTW9zdCBBSVggYWR2b2Nh dGVzCi0gICB0ZWxsIHlvdSB0aGF0IGFueSBBSVggYmluYXJ5IHdpbGwgcnVuIG9uIGFueSBBSVgg dmVyc2lvbiBncmVhdGVyIHRoYW4KLSAgIG9yIGVxdWFsIHRvIHRoZSBvbmUgdW5kZXIgd2hpY2gg aXQgd2FzIGJ1aWx0LCBidXQgZXhwZXJpZW5jZSB3aXRoCi0gICBDLUtlcm1pdCBzdWdnZXN0cyBv dGhlcndpc2UuIEl0IGlzIGFsd2F5cyBiZXN0IHRvIHJ1biBhIGJpbmFyeSBidWlsdAotICAgdW5k ZXIgeW91ciBleGFjdCBzYW1lIEFJWCB2ZXJzaW9uLCBkb3duIHRvIHRoZSB0aGlyZCBkZWNpbWFs IHBsYWNlLCBpZgotICAgcG9zc2libGUuIElkZWFsbHksIGJ1aWxkIGl0IGZyb20gc291cmNlIGNv ZGUgeW91cnNlbGYuIFllcywgdGhpcyBhZHZpY2UKLSAgIHdvdWxkIGJlIGVhc2llciB0byBmb2xs b3cgaWYgQUlYIGNhbWUgd2l0aCBhIEMgY29tcGlsZXIuCi0gIF9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwotCi0z LjEuMi4gQUlYOiBOZXR3b3JrIENvbm5lY3Rpb25zCi0KLSAgIFsgWzE3NV1Ub3AgXSBbIFsxNzZd Q29udGVudHMgXSBbIFsxNzddU2VjdGlvbiBDb250ZW50cyBdIFsgWzE3OF1OZXh0IF0KLSAgIFsg WzE3OV1QcmV2aW91cyBdCi0KLSAgIEZpbGUgdHJhbnNmZXJzIGludG8gQUlYIDQuMiBvciA0LjMg dGhyb3VnaCB0aGUgQUlYIFRlbG5ldCBvciBSbG9naW4KLSAgIHNlcnZlciBoYXZlIGJlZW4gb2Jz ZXJ2ZWQgdG8gZmFpbCAob3IgYWNjdW11bGF0ZSBodWdlIG51bWJlcnMgb2YKLSAgIGNvcnJlY3Rh YmxlIGVycm9ycywgb3IgZXZlbiBkaXNjb25uZWN0IHRoZSBzZXNzaW9uKSwgd2hlbiBleGFjdGx5 IHRoZQotICAgc2FtZSBraW5kIG9mIHRyYW5zZmVycyBpbnRvIEFJWCA0LjEgd29yayB3aXRob3V0 IGluY2lkZW50LCBhcyBkbyBzdWNoCi0gICB0cmFuc2ZlcnMgaW50byBhbGwgbm9uLUFJWCBwbGF0 Zm9ybXMgb24gdGhlIHNhbWUga2luZCBvZiBjb25uZWN0aW9ucwotICAgKHdpdGggYSBmZXcgZXhj ZXB0aW9ucyBub3RlZCBlbHNld2hlcmUgaW4gdGhpcyBkb2N1bWVudCkuIEFJWCA0LjMuMwotICAg c2VlbXMgdG8gYmUgcGFydGljdWxhcmx5IGZyYWdpbGUgaW4gdGhpcyByZWdhcmQ7IHRoZSB3ZWFr bmVzcyBzZWVtcyB0bwotICAgYmUgaW4gaXRzIHBzZXVkb3Rlcm1pbmFsIChwdHkpIGRyaXZlci4g SGlnaC1zcGVlZCBzdHJlYW1pbmcgdHJhbnNmZXJzCi0gICB3b3JrIHBlcmZlY3RseSwgaG93ZXZl ciwgaWYgdGhlIEFJWCBUZWxuZXQgc2VydmVyIGFuZCBwdHkgZHJpdmVyIGFyZQotICAgcmVtb3Zl ZCBmcm9tIHRoZSBwaWN0dXJlOyBlLmcsIGJ5IHVzaW5nICJzZXQgaG9zdCAqIDMwMDAiIG9uIEFJ WC4KLQotICAgVGhlIHByb2JsZW0gY2FuIGJlIGNvbXBsZXRlbHkgY3VyZWQgYnkgcmVwbGFjaW5n IHRoZSBJQk0gVGVsbmV0IHNlcnZlcgotICAgd2l0aCBbMTgwXU1JVCdzIEtlcmJlcm9zIFRlbG5l dCBzZXJ2ZXIgLS0gZXZlbiBpZiB5b3UgZG9uJ3QgYWN0dWFsbHkKLSAgIHVzZSB0aGUgS2VyYmVy b3MgcGFydC4gRGlhZ25vc2lzOiBBSVggcHNldWRvdGVybWluYWxzICh3aGljaCBhcmUKLSAgIGNv bnRyb2xsZWQgYnkgdGhlIFRlbG5ldCBzZXJ2ZXIgdG8gZ2l2ZSB5b3UgYSBsb2dpbiB0ZXJtaW5h bCBmb3IgeW91cgotICAgc2Vzc2lvbikgaGF2ZSBxdWlya3MgdGhhdCBub3QgZXZlbiBJQk0ga25v d3MgYWJvdXQuIFRoZSBzaXR1YXRpb24gd2l0aAotICAgQUlYIDUueCBpcyBub3Qga25vd24sIGJ1 dCBpZiBpdCBoYXMgdGhlIHNhbWUgcHJvYmxlbSwgdGhlIHNhbWUgY3VyZSBpcwotICAgYXZhaWxh YmxlLgotCi0gICBNZWFud2hpbGUsIHRoZSBvbmx5IHJlbWVkeSB3aGVuIGdvaW5nIHRocm91Z2gg dGhlIElCTSBUZWxuZXQgc2VydmVyIGlzCi0gICB0byBjdXQgYmFjayBvbiBLZXJtaXQncyBwZXJm b3JtYW5jZSBzZXR0aW5ncyB1bnRpbCB5b3UgZmluZCBhCi0gICBjb21iaW5hdGlvbiB0aGF0IHdv cmtzOgotCi0gICAgICogU0VUIFNUUkVBTUlORyBPRkYKLSAgICAgKiBTRVQgV0lORE9XLVNJWkUg c21hbGwtbnVtYmVyCi0gICAgICogU0VUIHsgU0VORCwgUkVDRUlWRSB9IFBBQ0tFVC1MRU5HVEgg c21hbGwtbnVtYmVyCi0gICAgICogU0VUIFBSRUZJWElORyB7IENBVVRJT1VTLCBBTEwgfQotCi0g ICBJbiBzb21lIGNhc2VzLCBzZXZlcmUgY3V0YmFja3MgYXJlIHJlcXVpcmVkLCBlLmcuIHRob3Nl IGltcGxpZWQgYnkgdGhlCi0gICBST0JVU1QgY29tbWFuZC4gQWxzbyBiZSBzdXJlIHRoYXQgdGhl IEFJWCBDLUtlcm1pdCBvbiB0aGUgcmVtb3RlIGVuZAotICAgaGFzICJzZXQgZmxvdyBub25lIiAo d2hpY2ggaXMgdGhlIGRlZmF1bHQpLiBOT1RFOiBNYXliZSB0aGlzIG9uZSBjYW4KLSAgIGFsc28g YmUgYWRkcmVzc2VkIGJ5IHN0YXJ0aW5nIEFJWCB0ZWxuZXRkIHdpdGggdGhlICItYSIgb3B0aW9u LiBUaGUKLSAgIHNpdHVhdGlvbiB3aXRoIFNTSCBjb25uZWN0aW9ucyBpcyBub3Qga25vd24sIGJ1 dCBhbG1vc3QgY2VydGFpbmx5IHRoZQotICAgc2FtZS4KLQotICAgV2hlbiB0aGVzZSBwcm9ibGVt cyBvY2N1ciwgdGhlIHN5c3RlbSBlcnJvciBsb2cgY29udGFpbnM6Ci0KLSAgTEFCRUw6ICAgICAg ICAgIFRUWV9UVFlIT0cKLSAgSURFTlRJRklFUjogICAgIDA4NzNDRjlGCi0gIFR5cGU6ICAgICAg ICAgICBURU1QCi0gIFJlc291cmNlIE5hbWU6ICBwdHMvMQotCi0gIERlc2NyaXB0aW9uCi0gIFRU WUhPRyBPVkVSLVJVTgotCi0gIEZhaWx1cmUgQ2F1c2VzCi0gIEVYQ0VTU0lWRSBMT0FEIE9OIFBS T0NFU1NPUgotCi0gIFJlY29tbWVuZGVkIEFjdGlvbnMKLSAgUkVEVUNFIFNZU1RFTSBMT0FELgot ICBSRURVQ0UgU0VSSUFMIFBPUlQgQkFVRCBSQVRFCi0KLSAgIEJlZm9yZSBsZWF2aW5nIHRoZSB0 b3BpYyBvZiBBSVggcHNldWRvdGVybWluYWxzLCBpdCBpcyB2ZXJ5IGxpa2VseSB0aGF0Ci0gICBL ZXJtaXQncyBQVFkgYW5kIFNTSCBjb21tYW5kcyBkbyBub3Qgd29yayB3ZWxsIGVpdGhlciwgZm9y IHRoZSBzYW1lCi0gICByZWFzb24gdGhhdCBUZWxuZXQgY29ubmVjdGlvbnMgaW50byBBSVggZG9u J3Qgd29yayB3ZWxsLiBBIGJyaWVmIHRlc3QKLSAgIHdpdGggInB0eSBybG9naW4gc29tZWhvc3Qi IGdvdCBhIHBlcmZlY3RseSB1c2FibGUgdGVybWluYWwgKENPTk5FQ1QpCi0gICBzZXNzaW9uLCBi dXQgZmlsZS10cmFuc2ZlciBwcm9ibGVtcyBsaWtlIHRob3NlIGp1c3QgZGVzY3JpYmVkLgotCi0g ICBSZXBvcnRlZGx5LCB0ZWxuZXQgZnJvbSBBSVggNC4xLXBvaW50LXNvbWV0aGluZyB0byBub24t VGVsbmV0IHBvcnRzCi0gICBkb2VzIG5vdCB3b3JrIHVubGVzcyB0aGUgcG9ydCBudW1iZXIgaXMg aW4gdGhlIC9ldGMvc2VydmljZXMgZmlsZTsgaXQncwotICAgbm90IGNsZWFyIGZyb20gdGhlIHJl cG9ydCB3aGV0aGVyIHRoaXMgaXMgYSBwcm9ibGVtIHdpdGggQUlYIFRlbG5ldCAoaW4KLSAgIHdo aWNoIGNhc2UgaXQgd291bGQgbm90IGFmZmVjdCBLZXJtaXQpLCBvciB3aXRoIHRoZSBzb2NrZXRz IGxpYnJhcnkgKGluCi0gICB3aGljaCBjYXNlIGl0IHdvdWxkKS4gVGhlIHB1cnBvcnRlZCBmaXgg aXMgSUJNIEFQQVIgSVg2MTUyMy4KLQotICAgQy1LZXJtaXQgU0VUIEhPU1Qgb3IgVEVMTkVUIGZy b20gb25lIEFJWCAzLjEgKG9yIGVhcmxpZXIpIHN5c3RlbSB0bwotICAgYW5vdGhlciB3b24ndCB3 b3JrIHJpZ2h0IHVubGVzcyB5b3Ugc2V0IHlvdXIgbG9jYWwgdGVybWluYWwgdHlwZSB0bwotICAg c29tZXRoaW5nIG90aGVyIHRoYW4gQUlYVEVSTS4gV2hlbiB5b3VyIHRlcm1pbmFsIHR5cGUgaXMg QUlYVEVSTSwgQUlYCi0gICBURUxORVQgc2VuZHMgdHdvIGVzY2FwZXMgd2hlbmV2ZXIgeW91IHR5 cGUgb25lLCBhbmQgdGhlIEFJWCB0ZWxuZXQKLSAgIHNlcnZlciBzd2FsbG93cyBvbmUgb2YgdGhl bS4gVGhpcyBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlICJoZnQiCi0gICBkZXZpY2UuIFRo aXMgYmVoYXZpb3Igc2VlbXMgdG8gYmUgcmVtb3ZlZCBpbiBBSVggMy4yIGFuZCBsYXRlci4KLSAg X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCi0KLTMuMS4zLiBBSVg6IFNlcmlhbCBDb25uZWN0aW9ucwotCi0gICBb IFsxODFdVG9wIF0gWyBbMTgyXUNvbnRlbnRzIF0gWyBbMTgzXVNlY3Rpb24gQ29udGVudHMgXSBb IFsxODRdTmV4dCBdCi0gICBbIFsxODVdUHJldmlvdXMgXQotCi0gICBJbiBBSVggMywgNCwgb3Ig NSwgQy1LZXJtaXQgd29uJ3QgYmUgYWJsZSB0byAic2V0IGxpbmUgL2Rldi90dHkwIiAob3IKLSAg IGFueSBvdGhlciBkaWFsb3V0IGRldmljZSkgaWYgeW91IGhhdmVuJ3QgaW5zdGFsbGVkICJjdSIg b3IgInV1Y3AiIG9uCi0gICB5b3VyIHN5c3RlbSwgYmVjYXVzZSBpbnN0YWxsaW5nIHRoZXNlIGlz IHdoYXQgY3JlYXRlcyB0aGUgVVVDUCBsb2NrZmlsZQotICAgZGlyZWN0b3J5LiBJZiBTRVQgTElO RSBjb21tYW5kcyBhbHdheXMgcmVzdWx0IGluICJTb3JyeSwgYWNjZXNzIHRvIGxvY2sKLSAgIGRl bmllZCIsIGV2ZW4gd2hlbiBDLUtlcm1pdCBoYXMgYmVlbiBnaXZlbiB0aGUgc2FtZSBvd25lciwg Z3JvdXAsIGFuZAotICAgcGVybWlzc2lvbnMgYXMgY3U6Ci0KLSAgLXItc3IteHIteCAgIDEgdXVj cCAgICAgdXVjcCAgICAgICA2NzIxNiBKdWwgMjcgMTk5OSAgY3UKLQotICAgYW5kIGV2ZW4gd2hl biB5b3UgcnVuIGl0IGFzIHJvb3QsIHRoZW4geW91IG11c3QgZ28gYmFjayBhbmQgaW5zdGFsbAot ICAgImN1IiBmcm9tIHlvdXIgQUlYIGluc3RhbGxhdGlvbiBtZWRpYS4KLQotICAgQWNjb3JkaW5n IHRvIElCTSdzICJGcm9tIFN0cmVuZ3RoIHRvIFN0cmVuZ3RoIiBkb2N1bWVudCAoMjEgQXByaWwK LSAgIDE5OTgpLCBpbiBBSVggNC4yIGFuZCBsYXRlciAiQXN5bmMgc3VwcG9ydHMgc3BlZWRzIG9u IG5hdGl2ZSBzZXJpYWwKLSAgIHBvcnRzIHVwIHRvIDExNS4ya2JwcyIuIEhvd2V2ZXIsIG5vIEFQ SSBpcyBkb2N1bWVudGVkIHRvIGFjaGlldmUgc2VyaWFsCi0gICBzcGVlZHMgaGlnaGVyIHRoYW4g Mzg0MDAgYnBzLiBBcHBhcmVudGx5IHRoZSB3YXkgdG8gZG8gdGhpcyAtLSB3aGljaAotICAgbWln aHQgb3IgbWlnaHQgbm90IHdvcmsgb25seSBvbiB0aGUgSUJNIDEyOC1wb3J0IG11bHRpcGxleGVy IC0tIGlzOgotCi0gIGN4bWEtc3R0eSBmYXN0YmF1ZCAvZGV2L3R0eTAKLQotICAgd2hpY2gsIGFj Y29yZGluZyB0byAibWFuIGN4bWEtc3R0eSI6Ci0KLSAgICAgZmFzdGJhdWQgQWx0ZXJzIHRoZSBi YXVkIHJhdGUgdGFibGUsIHNvIDUwIGJhdWQgYmVjb21lcyA1NzYwMCBiYXVkLgotICAgICAtZmFz dGJhdWQgUmVzdG9yZXMgdGhlIGJhdWQgcmF0ZSB0YWJsZSwgc28gNTc2MDAgYmF1ZCBiZWNvbWVz IDUwCi0gICAgIGJhdWQuCi0KLSAgIFByZXN1bWFibHkgKGJ1dCBub3QgY2VydGFpbmx5KSB0aGlz IGV4dHJhcG9sYXRlcyB0byAxMTAgImJhdWQiIGJlY29tZXMKLSAgIDc2ODAwIGJwcywgYW5kIDE1 MCBiZWNvbWVzIDExNTIwMCBicHMuIFNvIHRvIHVzZSBoaWdoIHNlcmlhbCBzcGVlZHMgaW4KLSAg IEFJWCA0LjIgb3IgNC4zLCB0aGUgdHJpY2sgd291bGQgYmUgdG8gZ2l2ZSB0aGUgImN4bWEtc3R0 eSBmYXN0YmF1ZCIKLSAgIGNvbW1hbmQgZm9yIHRoZSBkZXNpcmVkIHR0eSBkZXZpY2UgYmVmb3Jl IHN0YXJ0aW5nIEtlcm1pdCwgYW5kIHRoZW4gdXNlCi0gICAic2V0IHNwZWVkIDUwIiwgInNldCBz cGVlZCAxMTAiLCBvciAic2V0IHNwZWVkIDE1MCIgdG8gc2VsZWN0IDU2NzAwLAotICAgNzY4MDAs IG9yIDExNTIwMCBicHMuIEl0IGlzIG5vdCBrbm93biB3aGV0aGVyIGN4bWEtc3R0eSByZXF1aXJl cwotICAgcHJpdmlsZWdlLgotCi0gICBBY2NvcmRpbmcgdG8gb25lIHJlcG9ydCwgIkZ1cnRoZXIg aW52ZXN0aWdhdGlvbiB3aXRoIElCTSBzZWVtcyB0bwotICAgaW5kaWNhdGUgdGhhdCB0aGUgb25s eSBoYXJkd2FyZSBjYXBhYmxlIG9mIGRvaW5nIHRoaXMgaXMgdGhlIDEyOC1wb3J0Ci0gICBtdWx0 aXBsZXhvciB3aXRoIG9uZSAob3IgbW9yZSkgb2YgdGhlIDE2IHBvcnQgYnJlYWtvdXQgY2FibGVz IChFbmhhbmNlZAotICAgUmVtb3RlIEFzeW5jIE5vZGUgMTYtUG9ydCBFSUEtMjMyKS4gV2UgYXJl IGxvb2tpbmcgYXQgYWJvdXQgQ0ROJDQsMDAwCi0gICBpbiBoYXJkd2FyZSBqdXN0IHRvIGhhbmcg YSA1NmtiIG1vZGVtIG9uIHRoZXJlLiBPZiBjb3Vyc2UsIHdlIGNhbiB0aGVuCi0gICBoYW5nIDE1 IG1vcmUsIGlmIHdlIHdhbnQuIFRoaXMgaGFyZHdhcmUgY29tYm8gaXMgZGVzY3JpYmVkIHRvIGJl IGdvb2QKLSAgIHRvIDIzMC40a2Jwcy4iCi0KLSAgIEFub3RoZXIgcmVwb3J0IHNheXMgKHF1b3Rl IGZyb20gQUlYIG5ld3Nncm91cCwgTWFyY2ggMTk5OSk6Ci0KLSAgICAgVGhlIG1hY2hpbmUgdHlw ZSBhbmQgdGhlIGFkYXB0ZXIgZGV0ZXJtaW5lIHRoZSBzcGVlZCB0aGF0IG9uZSBjYW4KLSAgICAg YWN0dWFsbHkgcnVuIGF0LiBUaGUgb2xkZXIgbWljcm9jaGFubmVsIG1hY2hpbmVzIGhhdmUgbXVj aCBzbG93ZXIKLSAgICAgY3J5c3RhbCBmcmVxdWVuY2llcyBhbmQgbWF5IG5vdCBnbyBiZXlvbmQg NzYsODAwLiBBIGZlYXR1cmUgcHV0IGludG8KLSAgICAgQUlYIDQyMSBhbGxvd3Mgb25lIHRvIGtl eSBpbiBub24tUE9TSVggYmF1ZCByYXRlcyBhbmQgaWYgdGhlIHVhcnQKLSAgICAgY2FuIHN1cHBv cnQgdGhhdCBzcGVlZCwgaXQgd2lsbCBnZXQgc2V0LiB0aGlzIGFwcGxpZXMgYWxzbyB0byA0M3An cwotICAgICBhbmQgYmV5b25kLiAxMTUyMDAgaXMgdGhlIG1heCBmb3IgdGhlIDQzUCdzIG5hdGl2 ZSBzZXJpYWwgcG9ydC4gQXMKLSAgICAgY3J5dGFsIGZyZXF1ZW5jaWVzIGNvbnRpbnVlIHRvIGlu Y3JlYXNlLCB0aGUgYnVpbHQtaW4gc2VyaWFsIHBvcnRzCi0gICAgIHNwZWVkcyB3aWxsIGltcHJv dmUuIFRvIHVzZSAndXVjcCcgb3IgJ2F0ZScgYXQgdGhlIGhpZ2hlciBiYXVkCi0gICAgIHJhdGVz LCBjb25maWd1cmUgdGhlIHBvcnQgZm9yIHRoZSBkZXNpcmVkIHNwZWVkLCBidXQgc2V0IHRoZSBz cGVlZAotICAgICBvZiB1dWNwIG9yIGF0ZSB0byA1MC4gQW55IG5vbi1QT1NJWCBzcGVlZHMgc2V0 IGluIHRoZSB0dHlzCi0gICAgIGNvbmZpZ3VyYXRpb24gd2lsbCB0aGUgYmUgdXNlZC4gSW4gdGhl IGNhc2Ugb2YgdGhlIDEyOC1wb3J0IGFkYXB0ZXJzCi0gICAgIG9yIHRoZSBJU0EgOC1wb3J0IG9y IFBDSSA4LXBvcnQgYWRhcHRlciwgdGhlcmUgYXJlIG9ubHkgYSBmZXcgaGlnaGVyCi0gICAgIGJh dWQgcmF0ZXMuCi0KLSAgICBhLiBDaGFuZ2UgdGhlIHBvcnQgdG8gZW5hYmxlIGhpZ2ggYmF1ZCBy YXRlczoKLSAgICAgICAgICArIEI1MCBmb3IgNTc2MDAKLSAgICAgICAgICArIEI3NSBmb3IgNzY4 MDAKLSAgICAgICAgICArIEIxMTAgZm9yIDExNTIwMAotICAgICAgICAgICsgQjIwMCBmb3IgMjMw MDAwCi0gICAgYi4gY2hkZXYgLWwgdHR5WCAtYSBmYXN0YmF1ZD1lbmFibGUKLSAgICAgICAgICAr IEZvciB0aGUgMTI4IHBvcnRzIG9yaWdpbmFsIHN0eWxlIHJhbnMsIG9ubHkgNTc2MDAgYnBzIGlz Ci0gICAgICAgICAgICBzdXBwb3J0ZWQuCi0gICAgICAgICAgKyBGb3IgdGhlIG5ldyBlbmhhbmNl ZCBSQU5zLCB1cCB0byAyMzBLYnBzIGlzIHN1cHBvcnRlZC4KLQotICAgSW4gQUlYIDIuMi4xIG9u IHRoZSBSVCBQQyB3aXRoIHRoZSA4LXBvcnQgbXVsdGlwbGV4ZXIsIFNFVCBTUEVFRCAzODQwMAot ICAgZ2l2ZXMgOTYwMCBicHMsIGJ1dCBTRVQgU1BFRUQgMTkyMDAgZ2l2ZXMgMTkyMDAgKG9uIHRo ZSBidWlsdC1pbiBTMQotICAgcG9ydCkuCi0KLSAgIE5vdGUgdGhhdCBzb21lIFJTLzYwMDBzIChl LmcuIHRoZSBJQk0gUG93ZXJTZXJ2ZXIgMzIwKSBoYXZlIG5vbnN0YW5kYXJkCi0gICByZWN0YW5n dWxhciAxMC1waW4gc2VyaWFsIHBvcnRzOyB0aGUgREItMjUgY29ubmVjdG9yIGlzIE5PVCBhIHNl cmlhbAotICAgcG9ydDsgaXQgaXMgYSBwYXJhbGxlbCBwcmludGVyIHBvcnQuIElCTSBjYWJsZXMg YXJlIHJlcXVpcmVkIGZvciB0aGUKLSAgIHNlcmlhbCBwb3J0cywgKFRoZSBJQk0gUlQgUEMgYWxz byBoYWQgcmVjdGFuZ3VsYXIgc2VyaWFsIHBvcnRzIC0tCi0gICBwZXJoYXBzIHRoZSBzYW1lIGFz IHRoZXNlLCBwZXJoYXBzIGRpZmZlcmVudC4pCi0KLSAgIElmIHlvdSBkaWFsIGluIHRvIEFJWCB0 aHJvdWdoIGEgbW9kZW0gdGhhdCBpcyBjb25uZWN0ZWQgZGlyZWN0bHkgdG8gYW4KLSAgIEFJWCBw b3J0IChlLmcuIG9uIHRoZSAxMjgtcG9ydCBtdWx0aXBsZXhlcikgYW5kIGZpbmQgdGhhdCBkYXRh IGlzIGxvc3QsCi0gICBlc3BlY2lhbGx5IHdoZW4gdXBsb2FkaW5nIGZpbGVzIHRvIHRoZSBBSVgg c3lzdGVtIChhbmQgc3lzdGVtIGVycm9yCi0gICBsb2dzIHJlcG9ydCBidWZmZXIgb3ZlcnJ1bnMg b24gdGhlIHBvcnQpOgotCi0gICAgMS4gTWFrZSBzdXJlIHRoZSBwb3J0IGFuZCBtb2RlbSBhcmUg Qk9USCBjb25maWd1cmVkIGZvciBoYXJkd2FyZQotICAgICAgIChSVFMvQ1RTKSBmbG93IGNvbnRy b2wuIFRoZSBwb3J0IGlzIGNvbmZpZ3VyZWQgc29tZXdoZXJlIGluIHRoZQotICAgICAgIHN5c3Rl bSBjb25maWd1cmF0aW9uLCBvdXRzaWRlIG9mIEtlcm1pdC4KLSAgICAyLiBUZWxsIEMtS2VybWl0 IHRvICJzZXQgZmxvdyBrZWVwIjsgZXhwZXJpbWVudGF0aW9uIHNob3dzIHRoYXQgU0VUCi0gICAg ICAgRkxPVyBSVFMvQ1RTIGhhcyBubyBlZmZlY3Qgd2hlbiB1c2VkIGluIHJlbW90ZSBtb2RlIChp LmUuIG9uCi0gICAgICAgL2Rldi90dHksIGFzIG9wcG9zZWQgdG8gYSBzcGVjaWZ5IHBvcnQgZGV2 aWNlKS4KLSAgICAzLiBGaXhlcyBmb3IgYnVncyBpbiB0aGUgb3JpZ2luYWwgQUlYIDQuMiB0dHkg KHNlcmlhbCBpL28pIHN1cHBvcnQgYW5kCi0gICAgICAgb3RoZXIgQUlYIGJ1Z3MgYXJlIGF2YWls YWJsZSBmcm9tIElCTSBhdDoKLSAgWzE4Nl1odHRwOi8vc2VydmljZS5zb2Z0d2FyZS5pYm0uY29t L3JzNjAwMC8KLQotICAgICAgIERvd25sb2FkcyAtPiBTb2Z0d2FyZSBGaXhlcyAtPiBEb3dubG9h ZCBGaXhEaXN0IGdldHMgYW4gYXBwbGljYXRpb24KLSAgICAgICBmb3IgbG9va2luZyB1cCBrbm93 biBwcm9ibGVtcy4KLQotICAgTWFueSBwcm9ibGVtcyByZXBvcnRlZCB3aXRoIGJpZGlyZWN0aW9u YWwgdGVybWluYWwgbGluZXMgb24gQUlYIDMuMi54Ci0gICBvbiB0aGUgUlMvNjAwMC4gV29ya2Fy b3VuZDogZG9uJ3QgdXNlIGJpZGlyZWN0aW9uYWwgdGVybWluYWwgbGluZXMsIG9yCi0gICB3cml0 ZSBhIHNoZWxsLXNjcmlwdCB3cmFwcGVyIGZvciBLZXJtaXQgdGhhdCB0dXJucyBnZXR0eSBvZmYg b24gdGhlCi0gICBsaW5lIGJlZm9yZSBzdGFydGluZyBLZXJtaXQsIG9yIGJlZm9yZSBLZXJtaXQg YXR0ZW1wdHMgdG8gZG8gdGhlIFNFVAotICAgTElORS4gKEJ1dCBub3RlOiBUaGVzZSBwcm9ibGVt cyBNSUdIVCBiZSBmaXhlZCBpbiBDLUtlcm1pdCA2LjAgYW5kCi0gICBsYXRlci4pIFRoZSBjb21t YW5kcyBmb3IgdHVybmluZyBnZXR0eSBvZmYgYW5kIG9uIChyZXNwZWN0aXZlbHkpIGFyZQotICAg L3Vzci9zYmluL3BkaXNhYmxlIGFuZCAvdXNyL3NiaW4vcGVuYWJsZS4KLSAgX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCi0KLTMuMS40LiBBSVg6IEZpbGUgVHJhbnNmZXIKLQotICAgWyBbMTg3XVRvcCBdIFsgWzE4 OF1Db250ZW50cyBdIFsgWzE4OV1TZWN0aW9uIENvbnRlbnRzIF0gWyBbMTkwXU5leHQgXQotICAg WyBbMTkxXVByZXZpb3VzIF0KLQotICAgRXZpZGVudGx5IEFJWCA0LjMgKEkgZG9uJ3Qga25vdyBh Ym91dCBlYXJsaWVyIHZlcnNpb25zKSBkb2VzIG5vdCBhbGxvdwotICAgb3BlbiBmaWxlcyB0byBi ZSBvdmVyd3JpdHRlbi4gVGhpcyBjYW4gY2F1c2UgS2VybWl0IHRyYW5zZmVycyB0byBmYWlsCi0g ICB3aGVuIEZJTEUgQ09MTElTSU9OIGlzIE9WRVJXUklURSwgd2hlcmUgdGhleSBtaWdodCB3b3Jr IG9uIG90aGVyIFVuaXgKLSAgIHZhcmlldGllcyBvciBlYXJsaWVyIEFJWCB2ZXJzaW9ucy4KLQot ICAgVHJhbnNmZXIgb2YgYmluYXJ5IC0tIGFuZCBtYXliZSBldmVuIHRleHQgLS0gZmlsZXMgY2Fu IGZhaWwgaW4gQUlYIGlmCi0gICB0aGUgQUlYIHRlcm1pbmFsIGhhcyBwYXJ0aWN1bGFyIHBvcnQg Y2FuIGhhdmUgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbgotICAgZG9uZSBmb3IgaXQgYnkgdGhl IHR0eSBkcml2ZXIuIFRoZSBmb2xsb3dpbmcgYWR2aWNlIGZyb20gYQotICAga25vd2xlZGdlYWJs ZSBBSVggdXNlcjoKLQotICAgICBbVGhpcyBmZWF0dXJlXSBoYXMgdG8gYmUgY2hlY2tlZCAoYW5k IHNldC9jbGVhcmVkKSB3aXRoIGEgc2VwYXJhdGUKLSAgICAgY29tbWFuZCwgdW5mb3J0dW5hdGVs eSBzdHR5IGRvZXNuJ3QgaGFuZGxlIHRoaXMuIFRvIGNoZWNrOgotCi0gICQgc2V0bWFwcwotICBp bnB1dCBtYXA6IG5vbmUgaW5zdGFsbGVkCi0gIG91dHB1dCBtYXA6IG5vbmUgaW5zdGFsbGVkCi0K LSAgICAgSWYgaXQgc2F5cyBhbnl0aGluZyBvdGhlciB0aGFuICJub25lIGluc3RhbGxlZCIgZm9y IGVpdGhlciBvbmUsIGl0Ci0gICAgIGlzIGxpa2VseSB0byBjYXVzZSBhIHByb2JsZW0gd2l0aCBr ZXJtaXQuIFRvIGdldCByaWQgb2YgaW5zdGFsbGVkCi0gICAgIG1hcHM6Ci0KLSAgJCBzZXRtYXBz IC10IE5PTUFQCi0KLSAgICAgSG93ZXZlciwgSSBzZWVtIHRvIHJlY2FsbCB0aGF0IHdpdGggc29t ZSB2ZXJzaW9ucyBvZiBBSVggYmVmb3JlCi0gICAgIDMuMi41LCBvbmx5IHJvb3QgY291bGQgY2hh bmdlIHRoZSBzZXR0aW5nLiBJJ20gbm90IHN1cmUgd2hhdAotICAgICB2ZXJzaW9ucyAtIGl0IG1p Z2h0IGhhdmUgb25seSBiZWVuIHVuZGVyIEFJWCAzLjEgdGhhdCB0aGlzIHdhcyB0cnVlLgotICAg ICBBdCBsZWFzdCB3aXRoIEFJWCAzLjIuNSBhbiBvcmRpbmFyeSB1c2VyIGNhbiBzZXQgb3IgY2xl YXIgdGhlIG1hcHMuCi0KLSAgIE9uIHRoZSBzYW1lIHByb2JsZW0sIGFub3RoZXIga25vd2xlZGdl YWJsZSBBSVggdXNlciBzYXlzOgotCi0gICAgIFRoZSB3YXkgdG8gZ2V0IGluZm9ybWF0aW9uIG9u IHRoZSBOTFMgbWFwcGluZyB1bmRlciBBSVggKDMuMi41Ci0gICAgIGFueXdheSkgaXMgYXMgZm9s bG93cy4gRnJvbSB0aGUgY29tbWFuZCBsaW5lIHR5cGU6Ci0KLSAgbHNhdHRyIC1sIHR0eSMgLWEg aW1hcCAtYSBvbWFwIC1FIC1ICi0KLSAgICAgUmVwbGFjZSB0aGUgdHR5IG51bWJlciBmb3IgdGhl IG51bWJlciBzaWduIGFib3ZlLiBUaGlzIHdpbGwgZ2l2ZSBhCi0gICAgIGh1bWFuIHJlYWRhYmxl IG91dHB1dCBvZiB0aGUgc2V0dGluZ3MgdGhhdCBsb29rcyBsaWtlIHRoaXM7Ci0KLSAgIyBsc2F0 dHIgLWwgdHR5MiAtYSBpbWFwIC1hIG9tYXAgLUUgLUgKLSAgYXR0cmlidXRlIHZhbHVlIGRlc2Ny aXB0aW9uICAgICB1c2VyX3NldHRhYmxlCi0KLSAgaW1hcCAgICAgIG5vbmUgIElOUFVUIG1hcCBm aWxlICBUcnVlCi0gIG9tYXAgICAgICBub25lICBPVVRQVVQgbWFwIGZpbGUgVHJ1ZQotCi0gICAg IElmIHlvdSBjaGFuZ2UgdGhlIC1IIHRvIGEgLU8sIHlvdSBnZXQgb3V0cHV0IHRoYXQgY2FuIGVh c2lseSBiZQotICAgICBwcm9jZXNzZWQgYnkgYW5vdGhlciBwcm9ncmFtIG9yIGEgc2hlbGwgc2Ny aXB0LCBmb3IgZXhhbXBsZToKLQotICAjIGxzYXR0ciAtbCB0dHkyIC1hIGltYXAgLWEgb21hcCAt RSAtTwotICAjaW1hcDpvbWFwCi0gIG5vbmU6bm9uZQotCi0gICAgIFRvIGNoYW5nZSB0aGUgc2V0 dGluZ3MgZnJvbSB0aGUgY29tbWFuZCBsaW5lLCB0aGUgY2hkZXYgY29tbWFuZCBpcwotICAgICB1 c2VkIHdpdGggdGhlIGZvbGxvd2luZyBzeW50YXguCi0KLSAgY2hkZXYgLWwgdHR5IyAtYSBpbWFw PSdub25lJyAtYSBvbWFwPSdub25lJwotCi0gICAgIEFnYWluIHN1YnN0aXR1dGluZyB0aGUgYXBw cm9wcmlhdGUgdHR5IHBvcnQgbnVtYmVyIGZvciB0aGUgbnVtYmVyCi0gICAgIHNpZ24sICJub25l IiBiZWluZyB0aGUgdmFsdWUgd2Ugd2FudCBmb3IgQy1LZXJtaXQuIE9mIGNvdXJzZSwgdGhlCi0g ICAgIGFib3ZlIGNhbiBhbHNvIGJlIGNoYW5nZWQgYnkgdXNpbmcgdGhlIFNNSVQgdXRpbGl0eSBh bmQgc2VsZWN0aW5nCi0gICAgIGRldmljZXMgLSB0dHkuICguLi5lbmQgcXVvdGUpCi0KLSAgIElu IDIwMDcgSSBub3RpY2VkIHRoZSBmb2xsb3dpbmcgb24gaGlnaC1zcGVlZCBTU0ggY29ubmVjdGlv bnMgKGxvY2FsCi0gICBuZXR3b3JrKSBpbnRvIEFJWCA1LjM6IHN0cmVhbWluZyB0cmFuc2ZlcnMg aW50byBBSVgganVzdCBkb24ndCB3b3JrLgotICAgVGhlIHNhbWUgbWlnaHQgYmUgdHJ1ZSBmb3Ig VGVsbmV0IGNvbm5lY3Rpb25zOyBJIGhhdmUgbm8gd2F5IHRvIGNoZWNrLgotICAgSXQgYXBwZWFy cyB0aGF0IHRoZSBBSVggcHR5IGRyaXZlciBhbmQvb3IgdGhlIFNTSCAoYW5kIHBvc3NpYmx5IFRl bG5ldCkKLSAgIHNlcnZlciBhcmUgbm90IGNhcGFibGUgb2YgcmVjZWl2aW5nIGEgc3RlYWR5IHN0 cmVhbSBvZiBpbmNvbWluZyBkYXRhIGF0Ci0gICBoaWdoIHNwZWVkLiBTb2x1dGlvbjogdW5rbm93 bi4gV29ya2Fyb3VuZDogcHV0ICJzZXQgc3RyZWFtaW5nIG9mZiIgaW4KLSAgIHlvdXIgLmtlcm1y YyBvciAubXlrZXJtcmMgZmlsZSwgc2luY2Ugc3RyZWFtaW5nIGlzIHRoZSBkZWZhdWx0IGZvcgot ICAgbmV0d29yayBjb25uZWN0aW9ucy4KLSAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCi0KLTMuMS41LiBBSVg6 IFh0ZXJtIEtleSBNYXAKLQotICAgWyBbMTkyXVRvcCBdIFsgWzE5M11Db250ZW50cyBdIFsgWzE5 NF1TZWN0aW9uIENvbnRlbnRzIF0gWwotICAgWzE5NV1QcmV2aW91cyBdCi0KLSAgIEhlcmUgaXMg YSBzYW1wbGUgY29uZmlndXJhdGlvbiBmb3Igc2V0dGluZyB1cCBhbiB4dGVybSBrZXlib2FyZCBm b3IKLSAgIFZUMjIwIG9yIGhpZ2hlciB0ZXJtaW5hbCBlbXVsYXRpb24gb24gQUlYLCBjb3VydGVz eSBvZiBCcnVjZSBNb21qaWFuLAotICAgRHJleGVsIEhpbGwsIFBBLiBYdGVybSBjYW4gYmUgc3Rh cnRlZCBsaWtlIHRoaXM6Ci0KLSAgeHRlcm0gJFhURVJNRkxBR1MgK3J3ICtzYiArbHMgJEAgLXRt ICdlcmFzZSBePyBpbnRyIF5jJyAtbmFtZSB2dDIyMCBcCi0gICAgICAgICAgLXRpdGxlIHZ0MjIw IC10biB4dGVybS0yMjAgIiRAIiAmCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBYVGVybSpWVDEw MC5UcmFuc2xhdGlvbnM6ICNvdmVycmlkZSBcblwKLSAgICAgICAgICA8S2V5PkhvbWU6IHN0cmlu ZygweDFiKSBzdHJpbmcoIlszfiIpIFxuIFwKLSAgICAgICAgICA8S2V5PkVuZDogc3RyaW5nKDB4 MWIpIHN0cmluZygiWzR+IikgXG4KLSAgdnQyMjAqVlQxMDAuVHJhbnNsYXRpb25zOiAjb3ZlcnJp ZGUgXG5cCi0gIFNoaWZ0ICAgPEtleT5GMTogc3RyaW5nKCJbMjN+IikgXG4gXAotICBTaGlmdCAg IDxLZXk+RjI6IHN0cmluZygiWzI0fiIpIFxuIFwKLSAgU2hpZnQgICA8S2V5PkYzOiBzdHJpbmco IlsyNX4iKSBcbiBcCi0gIFNoaWZ0ICAgPEtleT5GNDogc3RyaW5nKCJbMjZ+IikgXG4gXAotICBT aGlmdCAgIDxLZXk+RjU6IHN0cmluZygiW0t+IikgXG4gXAotICBTaGlmdCAgIDxLZXk+RjY6IHN0 cmluZygiWzMxfiIpIFxuIFwKLSAgU2hpZnQgICA8S2V5PkY3OiBzdHJpbmcoIlszMX4iKSBcbiBc Ci0gIFNoaWZ0ICAgPEtleT5GODogc3RyaW5nKCJbMzJ+IikgXG4gXAotICBTaGlmdCAgIDxLZXk+ Rjk6IHN0cmluZygiWzMzfiIpIFxuIFwKLSAgU2hpZnQgICA8S2V5PkYxMDogc3RyaW5nKCJbMzR+ IikgXG4gXAotICBTaGlmdCAgIDxLZXk+RjExOiBzdHJpbmcoIlsyOH4iKSBcbiBcCi0gIFNoaWZ0 ICAgPEtleT5GMTI6IHN0cmluZygiWzI5fiIpIFxuIFwKLSAgICAgICAgICA8S2V5PlByaW50OiBz dHJpbmcoMHgxYikgc3RyaW5nKCJbMzJ+IikgXG5cCi0gICAgICAgICAgPEtleT5DYW5jZWw6IHN0 cmluZygweDFiKSBzdHJpbmcoIlszM34iKSBcblwKLSAgICAgICAgICA8S2V5PlBhdXNlOiBzdHJp bmcoMHgxYikgc3RyaW5nKCJbMzR+IikgXG5cCi0gICAgICAgICAgPEtleT5JbnNlcnQ6IHN0cmlu ZygweDFiKSBzdHJpbmcoIlsyfiIpIFxuXAotICAgICAgICAgIDxLZXk+RGVsZXRlOiBzdHJpbmco MHgxYikgc3RyaW5nKCJbM34iKSBcblwKLSAgICAgICAgICA8S2V5PkhvbWU6IHN0cmluZygweDFi KSBzdHJpbmcoIlsxfiIpIFxuXAotICAgICAgICAgIDxLZXk+RW5kOiBzdHJpbmcoMHgxYikgc3Ry aW5nKCJbNH4iKSBcblwKLSAgICAgICAgICA8S2V5PlByaW9yOiBzdHJpbmcoMHgxYikgc3RyaW5n KCJbNX4iKSBcblwKLSAgICAgICAgICA8S2V5Pk5leHQ6IHN0cmluZygweDFiKSBzdHJpbmcoIls2 fiIpIFxuXAotICAgICAgICAgIDxLZXk+QmFja1NwYWNlOiBzdHJpbmcoMHg3ZikgXG5cCi0gICAg ICAgICAgPEtleT5OdW1fTG9jazogc3RyaW5nKDB4MWIpIHN0cmluZygiT1AiKSBcblwKLSAgICAg ICAgICA8S2V5PktQX0RpdmlkZTogc3RyaW5nKDB4MWIpIHN0cmluZygiT2wiKSBcblwKLSAgICAg ICAgICA8S2V5PktQX011bHRpcGx5OiBzdHJpbmcoMHgxYikgc3RyaW5nKCJPbSIpIFxuXAotICAg ICAgICAgIDxLZXk+S1BfU3VidHJhY3Q6IHN0cmluZygweDFiKSBzdHJpbmcoIk9TIikgXG5cCi0g ICAgICAgICAgPEtleT5LUF9BZGQ6IHN0cmluZygweDFiKSBzdHJpbmcoIk9NIikgXG5cCi0gICAg ICAgICAgPEtleT5LUF9FbnRlcjogc3RyaW5nKDB4MWIpIHN0cmluZygiT00iKSBcblwKLSAgICAg ICAgICA8S2V5PktQX0RlY2ltYWw6IHN0cmluZygweDFiKSBzdHJpbmcoIk9uIikgXG5cCi0gICAg ICAgICAgPEtleT5LUF8wOiBzdHJpbmcoMHgxYikgc3RyaW5nKCJPcCIpIFxuXAotICAgICAgICAg IDxLZXk+S1BfMTogc3RyaW5nKDB4MWIpIHN0cmluZygiT3EiKSBcblwKLSAgICAgICAgICA8S2V5 PktQXzI6IHN0cmluZygweDFiKSBzdHJpbmcoIk9yIikgXG5cCi0gICAgICAgICAgPEtleT5LUF8z OiBzdHJpbmcoMHgxYikgc3RyaW5nKCJPcyIpIFxuXAotICAgICAgICAgIDxLZXk+S1BfNDogc3Ry aW5nKDB4MWIpIHN0cmluZygiT3QiKSBcblwKLSAgICAgICAgICA8S2V5PktQXzU6IHN0cmluZygw eDFiKSBzdHJpbmcoIk91IikgXG5cCi0gICAgICAgICAgPEtleT5LUF82OiBzdHJpbmcoMHgxYikg c3RyaW5nKCJPdiIpIFxuXAotICAgICAgICAgIDxLZXk+S1BfNzogc3RyaW5nKDB4MWIpIHN0cmlu ZygiT3ciKSBcblwKLSAgICAgICAgICA8S2V5PktQXzg6IHN0cmluZygweDFiKSBzdHJpbmcoIk94 IikgXG5cCi0gICAgICAgICAgPEtleT5LUF85OiBzdHJpbmcoMHgxYikgc3RyaW5nKCJPeSIpIFxu Ci0KLSAgISAgICAgICA8S2V5PlVwOiBzdHJpbmcoMHgxYikgc3RyaW5nKCJbQSIpIFxuXAotICAh ICAgICAgIDxLZXk+RG93bjogc3RyaW5nKDB4MWIpIHN0cmluZygiW0IiKSBcblwKLSAgISAgICAg ICA8S2V5PlJpZ2h0OiBzdHJpbmcoMHgxYikgc3RyaW5nKCJbQyIpIFxuXAotICAhICAgICAgIDxL ZXk+TGVmdDogc3RyaW5nKDB4MWIpIHN0cmluZygiW0QiKSBcblwKLQotICAqdmlzdWFsQmVsbDog ICAgdHJ1ZQotICAqc2F2ZUxpbmVzOiAgICAgMTAwMAotICAqY3Vyc2VzZW11bDogICAgdHJ1ZQot ICAqc2Nyb2xsS2V5OiAgICAgdHJ1ZQotICAqc2Nyb2xsQmFyOiAgICAgdHJ1ZQotCi0zLjIuIEMt S0VSTUlUIEFORCBIUC1VWAotCi0gICBbIFsxOTZdVG9wIF0gWyBbMTk3XUNvbnRlbnRzIF0gWyBb MTk4XVNlY3Rpb24gQ29udGVudHMgXSBbIFsxOTldTmV4dCBdCi0gICBbIFsyMDBdUHJldmlvdXMg XQotCi0gICBTRUNUSU9OIENPTlRFTlRTCi0KLSAgMy4yLjAuIFsyMDFdQ29tbW9uIFByb2JsZW1z Ci0gIDMuMi4xLiBbMjAyXUJ1aWxkaW5nIEMtS2VybWl0IG9uIEhQLVVYCi0gIDMuMi4yLiBbMjAz XUZpbGUgVHJhbnNmZXIKLSAgMy4yLjMuIFsyMDRdRGlhbGluZyBPdXQgYW5kIFVVQ1AgTG9ja2Zp bGVzIGluIEhQLVVYCi0gIDMuMi40LiBbMjA1XU5vdGVzIG9uIFNwZWNpZmljIEhQLVVYIFJlbGVh c2VzCi0gIDMuMi41LiBbMjA2XUhQLVVYIGFuZCBYLjI1Ci0KLSAgIFJFRkVSRU5DRVMKLQotICAg Rm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24sIHJlYWQgdGhlIFsyMDddY29tcC5zeXMuaHAuaHB1eCBu ZXdzZ3JvdXAuCi0KLSAgIEMtS2VybWl0IGlzIGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhlIEhQLVVY IG9wZXJhdGluZyBzeXN0ZW0gYnkgY29udHJhY3QKLSAgIGJldHdlZW4gSGV3bGV0dCBQYWNrYXJk IGFuZCBDb2x1bWJpYSBVbml2ZXJzaXR5IGZvciBIUC1VWCAxMC4wMCBhbmQKLSAgIGxhdGVyLiBF YWNoIGxldmVsIG9mIEhQLVVYIGluY2x1ZGVzIGEgZnJlc2hseSBidWlsdCBDLUtlcm1pdCBiaW5h cnkgaW4KLSAgIC9iaW4va2VybWl0LCB3aGljaCBzaG91bGQgd29yayBjb3JyZWN0bHkuIEJpbmFy aWVzIGJ1aWx0IGZvciByZWd1bGFyCi0gICBIUC1VWCBtYXkgYmUgdXNlZCBvbiBUcnVzdGVkIEhQ LVVYIGFuZCB2aWNlLXZlcnNhLCBleGNlcHQgZm9yIHVzZSBhcwotICAgSUtTRCBiZWNhdXNlIG9m IHRoZSBkaWZmZXJlbnQgYXV0aGVudGljYXRpb24gbWV0aG9kcy4KLQotICAgTm90ZSB0aGF0IEhQ IGRvZXMgbm90IHVwZGF0ZSBDLUtlcm1pdCB2ZXJzaW9ucyBmb3IgYW55IGJ1dCBpdHMgbW9zdAot ICAgY3VycmVudCBIUC1VWCByZWxlYXNlLiBTbywgZm9yIGV4YW1wbGUsIEhQLVVYIDEwLjIwIGhh cyBDLUtlcm1pdCA2LjA7Ci0gICAxMS4wMCBoYXMgQy1LZXJtaXQgNy4wLCBhbmQgMTEuMjIgaGFz IDguMC4gT2YgY291cnNlLCBhcyB3aXRoIGFsbAotICAgc29mdHdhcmUsIG9sZGVyIEtlcm1pdCB2 ZXJzaW9ucyBoYXZlIGJ1Z3MgKHN1Y2ggYXMgYnVmZmVyIG92ZXJmbG93Ci0gICB2dWxuZXJhYmls aXRpZXMpIHRoYXQgYXJlIGZpeGVkIGluIGxhdGVyIHZlcnNpb25zLiBGcm9tIHRpbWUgdG8gdGlt ZSwKLSAgIEhQIGRpc2NvdmVycyBvbmUgb2YgdGhlc2UgKGxvbmctYWdvIGZpeGVkKSBidWdzIGFu ZCBpc3N1ZXMgYSBzZWN1cml0eQotICAgYWxlcnQgZm9yIHRoZSBvbGRlciBPUydzLCByZWNvbW1l bmRpbmcgc29tZSBkcmFjb25pYW4gbWVhc3VyZSB0byBhdm9pZAotICAgdGhlIHByb2JsZW0uIFRo ZSB0cnVlIGZpeCBpbiBlYWNoIHNpdHVhdGlvbiBpcyB0byBpbnN0YWxsIHRoZSBjdXJyZW50Ci0g ICByZWxlYXNlIG9mIEMtS2VybWl0LgotCi0zLjIuMC4gQ29tbW9uIFByb2JsZW1zCi0KLSAgIFsg WzIwOF1Ub3AgXSBbIFsyMDldQ29udGVudHMgXSBbIFsyMTBdU2VjdGlvbiBDb250ZW50cyBdIFsg WzIxMV1OZXh0IF0KLQotICAgU29tZSBIUCB3b3Jrc3RhdGlvbnMgaGF2ZSBhIEJSRUFLL1JFU0VU IGtleS4gSWYgeW91IGhpdCB0aGlzIGtleSB3aGlsZQotICAgQy1LZXJtaXQgaXMgcnVubmluZywg aXQgbWlnaHQga2lsbCBvciBzdXNwZW5kIHRoZSBDLUtlcm1pdCBwcm9jZXNzLgotICAgQy1LZXJt aXQgYXJtcyBpdHNlbGYgYWdhaW5zdCB0aGVzZSBzaWduYWxzLCBidXQgZXZpZGVudGx5IHRoZQot ICAgQlJFQUsvUkVTRVQga2V5IGlzIC0tIGF0IGxlYXN0IGluIHNvbWUgY2lyY3Vtc3RhbmNlcywg b24gY2VydGFpbiBIUC1VWAotICAgdmVyc2lvbnMgLS0gdG9vIHBvd2VyZnVsIHRvIGJlIGNhdWdo dC4gKFNvbWUgcmVwb3J0IHRoYXQgdGhlIGZpcnN0Ci0gICBCUkVBSy9SRVNFVCBzaG93cyB1cCBh cyBTSUdJTlQgYW5kIGlzIGNhdWdodCBieSBDLUtlcm1pdCdzIGZvcm1lcgotICAgU0lHSU5UIGhh bmRsZXIgZXZlbiB3aGVuIFNJR0lOVCBpcyBjdXJyZW50bHkgc2V0IHRvIFNJR19JR047IHRoZSBz ZWNvbmQKLSAgIGtpbGxzIEtlcm1pdDsgb3RoZXIgcmVwb3J0cyBzdWdnZXN0IHRoZSBmaXJzdCBC UkVBSy9SRVNFVCBzZW5kcyBhCi0gICBTSUdUU1RQIChzdXNwZW5kIHNpZ25hbCkgdG8gS2VybWl0 LCB3aGljaCBpdCBjYXRjaGVzIGFuZCBzdXNwZW5kcwotICAgaXRzZWxmLiBZb3UgY2FuIHRlbGwg Qy1LZXJtaXQgdG8gaWdub3JlIHN1c3BlbmQgc2lnbmFscyB3aXRoIFNFVAotICAgU1VTUEVORCBP RkYuIFlvdSBjYW4gdGVsbCBDLUtlcm1pdCB0byBpZ25vcmUgU0lHSU5UIHdpdGggU0VUIENPTU1B TkQKLSAgIElOVEVSUlVQVElPTiBPRkYuIEl0IGlzIG5vdCBrbm93biB3aGV0aGVyIHRoZXNlIGNv bW1hbmRzIGFsc28gZ3JhbnQKLSAgIGltbXVuaXR5IHRvIHRoZSBCUkVBSy9SRVNFVCBrZXkgKG9u ZSByZXBvcnQgc3RhdGVzIHRoYXQgd2l0aCBTRVQKLSAgIFNVU1BFTkQgT0ZGLCB0aGUgQlJFQUsv UkVTRVQga2V5IGlzIGlnbm9yZWQgdGhlIGZpcnN0IGZvdXIgdGltZXMsIGJ1dAotICAga2lsbHMg S2VybWl0IHRoZSA1dGggdGltZSkuIEluIGFueSBjYXNlOgotCi0gICAgMS4gSWYgdGhpcyBrZXkg aXMgbWFwcGVkIHRvIFNJR0lOVCBvciBTSUdUU1RQLCBDLUtlcm1pdCBjYXRjaGVzIG9yCi0gICAg ICAgaWdub3JlcyBpdCwgZGVwZW5kaW5nIG9uIHdoaWNoIG1vZGUgKENPTk5FQ1QsIGNvbW1hbmQs IGV0YykgS2VybWl0Ci0gICAgICAgaXMgaW4uCi0gICAgMi4gSWYgaXQgY2F1c2VzIEhQLVVYIHRv IGtpbGwgQy1LZXJtaXQsIHRoZXJlIGlzIG5vdGhpbmcgQy1LZXJtaXQgY2FuCi0gICAgICAgZG8g dG8gcHJldmVudCBpdC4KLQotICAgV2hlbiBIUC1VWCBpcyBvbiB0aGUgcmVtb3RlIGVuZCBvZiB0 aGUgY29ubmVjdGlvbiwgaXQgaXMgZXNzZW50aWFsIHRoYXQKLSAgIEhQLVVYIEMtS2VybWl0IGJl IGNvbmZpZ3VyZWQgZm9yIFhvbi9Yb2ZmIGZsb3cgY29udHJvbCAodGhpcyBpcyB0aGUKLSAgIGRl ZmF1bHQsIGJ1dCBpbiBjYXNlIHlvdSBjaGFuZ2UgaXQgYW5kIHRoZW4gZXhwZXJpZW5jZSBmaWxl LXRyYW5zZmVyCi0gICBmYWlsdXJlcywgdGhpcyBpcyBhIGxpa2VseSByZWFzb24pLgotCi0zLjIu MS4gQnVpbGRpbmcgQy1LZXJtaXQgb24gSFAtVVgKLQotICAgWyBbMjEyXVRvcCBdIFsgWzIxM11D b250ZW50cyBdIFsgWzIxNF1TZWN0aW9uIENvbnRlbnRzIF0gWyBbMjE1XU5leHQgXQotICAgWyBb MjE2XVByZXZpb3VzIF0KLQotICAgICBUaGlzIHNlY3Rpb24gYXBwbGllcyBtYWlubHkgdG8gb2xk IChwcmUtMTAuMjApIEhQLVVYIHZlcnNpb24gb24gb2xkLAotICAgICBzbG93LCBhbmQvb3IgbWVt b3J5LWNvbnN0cmFpbmVkIGhhcmR3YXJlLgotCi0gICBEdXJpbmcgdGhlIEMtS2VybWl0IDYuMCBC ZXRhIGN5Y2xlLCBzb21ldGhpbmcgaGFwcGVuZWQgdG8gY2tjcHJvLncgKG9yLAotICAgbW9yZSBw cmVjaXNlbHksIHRoZSBja2Nwcm8uYyBmaWxlIHRoYXQgaXMgZ2VuZXJhdGVkIGZyb20gaXQpIHdo aWNoCi0gICBjYXVzZXMgSFAgb3B0aW1pemluZyBjb21waWxlcnMgdW5kZXIgSFAtVVggdmVyc2lv bnMgNy4wIGFuZCA4LjAKLSAgIChhcHBhcmVudGx5IG9uIGFsbCBwbGF0Zm9ybXMpIGFzIHdlbGwg YXMgdW5kZXIgSFAtVVggOS4wIG9uIE1vdG9yb2xhCi0gICBwbGF0Zm9ybXMgb25seSwgdG8gYmxv dyB1cC4gSW4gdmVyc2lvbnMgNy4wIGFuZCA4LjAgdGhlIHByb2JsZW0gaGFzCi0gICBzcHJlYWQg dG8gb3RoZXIgbW9kdWxlcy4KLQotICAgVGhlIHN5bXB0b21zIHZhcnkgZnJvbSB0aGUgc3lzdGVt IGdyaW5kaW5nIHRvIGEgaGFsdCwgdG8gdGhlIGNvbXBpbGVyCi0gICBjcmFzaGluZywgdG8gdGhl IGNvbXBpbGF0aW9uIG9mIHRoZSBja2Nwcm8uYyBtb2R1bGUgdGFraW5nIHZlcnkgbG9uZwotICAg cGVyaW9kcyBvZiB0aW1lLCBsaWtlIDkgaG91cnMuIFRoaXMgcHJvYmxlbSBpcyBoYW5kbGVkIGJ5 IGNvbXBpbGluZyB0aGUKLSAgIG1vZHVsZXMgdGhhdCB0aWNrbGUgaXQgd2l0aG91dCBvcHRpbWl6 YXRpb247IHRoZSBuZXcgQy1LZXJtaXQgbWFrZWZpbGUKLSAgIHRha2VzIGNhcmUgb2YgdGhpcywg YW5kIHNob3dzIGhvdyB0byBkbyBpdCBpbiBjYXNlIHRoZSBzYW1lIHRoaW5nCi0gICBiZWdpbnMg aGFwcGVuaW5nIHdpdGggb3RoZXIgbW9kdWxlcy4KLQotICAgT24gSFAtVVggOS4wLCBhIGtlcm5l bCBwYXJhbWV0ZXIsIG1heGRzaXogKG1heGltdW0gcHJvY2VzcyBkYXRhIHNlZ21lbnQKLSAgIHNp emUpLCBzZWVtcyB0byBiZSBpbXBvcnRhbnQuIE9uIE1vdG9yb2xhIHN5c3RlbXMsIGl0IGlzIDE2 TUIgYnkKLSAgIGRlZmF1bHQsIHdoZXJlYXMgb24gUklTQyBzeXN0ZW1zIHRoZSBkZWZhdWx0IGlz IG11Y2ggYmlnZ2VyLiBJbmNyZWFzaW5nCi0gICBtYXhkc2l6IHRvIGFib3V0IDgwTUIgc2VlbXMg dG8gbWFrZSB0aGUgcHJvYmxlbSBnbyBhd2F5LCBidXQgb25seSBpZgotICAgdGhlIHN5c3RlbSBh bHNvIGhhcyBhIGxvdCBvZiBwaHlzaWNhbCBtZW1vcnkgLS0gb3RoZXJ3aXNlIGl0IHN3YXBzCi0g ICBpdHNlbGYgdG8gZGVhdGguCi0KLSAgIFRoZSBvcHRpbWl6aW5nIGNvbXBpbGVyIG1pZ2h0IGNv bXBsYWluIGFib3V0ICJzb21lIG9wdGltaXphdGlvbnMKLSAgIHNraXBwZWQiIG9uIGNlcnRhaW4g bW9kdWxlcywgZHVlIHRvIGxhY2sgb2Ygc3BhY2UgYXZhaWxhYmxlIHRvIHRoZQotICAgb3B0aW1p emVyLiBZb3UgY2FuIGluY3JlYXNlIHRoZSBzcGFjZSAodGhlIGluY2FudGF0aW9uIGRlcGVuZHMg b24gdGhlCi0gICBwYXJ0aWN1bGFyIGNvbXBpbGVyIHZlcnNpb24gLS0gc2VlIHRoZSBbMjE3XW1h a2VmaWxlKSwgYnV0IGRvaW5nIHNvCi0gICB0ZW5kcyB0byBtYWtlIHRoZSBjb21waWxhdGlvbnMg dGFrZSBhIG11Y2ggbG9uZ2VyIHRpbWUuIEZvciBleGFtcGxlLAotICAgdGhlICJocHV4MDEwMG8r IiBtYWtlZmlsZSB0YXJnZXQgYWRkcyB0aGUgIitPbm9saW1pdCIgY29tcGlsZXIgZmxhZywKLSAg IGFuZCBhYm91dCBhbiBob3VyIHRvIHRoZSBjb21waWxlIHRpbWUgb24gYW4gSFAtOTAwMC83MzAu IEJ1dCBpdCAqZG9lcyoKLSAgIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSB0aGF0IGlzIGFib3V0IDEw SyBzbWFsbGVyIDotKQotCi0gICBJbiB0aGUgbWFrZWZpbGUsIGFsbCBIUC1VWCBlbnRyaWVzIGF1 dG9tYXRpY2FsbHkgc2tpcCBvcHRpbWl6YXRpb24gb2YKLSAgIHByb2JsZW1hdGljIG1vZHVsZXMu Ci0KLTMuMi4yLiBGaWxlIFRyYW5zZmVyCi0KLSAgIFsgWzIxOF1Ub3AgXSBbIFsyMTldQ29udGVu dHMgXSBbIFsyMjBdU2VjdGlvbiBDb250ZW50cyBdIFsgWzIyMV1OZXh0IF0KLSAgIFsgWzIyMl1Q cmV2aW91cyBdCi0KLSAgIFRlbG5ldCBjb25uZWN0aW9ucyBpbnRvIEhQLVVYIHZlcnNpb25zIHVw IHRvIGFuZCBpbmNsdWRpbmcgMTEuMTEgKGFuZAotICAgcG9zc2libHkgMTEuMjApIHRlbmQgbm90 IHRvIGxlbmQgdGhlbXNlbHZlcyB0byBmaWxlIHRyYW5zZmVyIGR1ZSB0bwotICAgbGltaXRhdGlv bnMsIHJlc3RyaWN0aW9ucywgYW5kL29yIGJ1Z3MgaW4gdGhlIEhQLVVYIFRlbG5ldCBzZXJ2ZXIK LSAgIGFuZC9vciBwc2V1ZG90ZXJtaW5hbCAocHR5KSBkcml2ZXIuCi0KLSAgIEluIEMtS2VybWl0 IDYuMCAoMTk5NikgYW4gdW5leHBlY3RlZCBzbG93bmVzcyB3YXMgbm90ZWQgd2hlbgotICAgdHJh bnNmZXJyaW5nIGZpbGVzIG92ZXIgbG9jYWwgRXRoZXJuZXQgY29ubmVjdGlvbnMgd2hlbiBhbiBI UC1VWCBzeXN0ZW0KLSAgICg5LjA1IG9yIDEwLjAwKSB3YXMgb24gdGhlIHJlbW90ZSBlbmQuIFRo ZSBmb2xsb3dpbmcgZXhwZXJpbWVudCB3YXMKLSAgIGNvbmR1Y3RlZCB0byBkZXRlcm1pbmUgdGhl IGNhdXNlLiBDLUtlcm1pdCA2LjAgd2FzIHVzZWQ7IHRoZSBzaXR1YXRpb24KLSAgIGlzIHNsaWdo dGx5IGJldHRlciB1c2luZyBDLUtlcm1pdCA3LjAncyBzdHJlYW1pbmcgZmVhdHVyZSBhbmQgSFAt VVgKLSAgIDEwLjIwIG9uIHRoZSBmYXIgZW5kLgotCi0gICBUaGUgc3lzdGVtcyB3ZXJlIEhQLVVY IDEwLjAwIChvbiA3MTUvMzMpIGFuZCBTdW5PUyA0LjEuMyAob24gU3BhcmMtMjApLAotICAgYm90 aCBvbiB0aGUgc2FtZSBsb2NhbCAxME1icHMgRXRoZXJuZXQsIHBhY2tldCBsZW5ndGggNDA5Niwg cGFyaXR5Ci0gICBub25lLCBjb250cm9sIHByZWZpeGluZyAiY2F1dGlvdXMiLCB1c2luZyBvbmx5 IGxvY2FsIGRpc2tzIG9uIGVhY2gKLSAgIG1hY2hpbmUgLS0gbm8gTkZTLiBJbiB0aGUgQy1LZXJt aXQgNi4wIChBQ0svTkFLKSBjYXNlLCB0aGUgd2luZG93IHNpemUKLSAgIHdhcyAyMDsgaW4gdGhl IHN0cmVhbWluZyBjYXNlIHRoZXJlIGlzIG5vIHdpbmRvdyBzaXplIChpLmUuIGl0IGlzCi0gICBp bmZpbml0ZSkuIFRoZSB0ZXN0IGZpbGUgd2FzIEMtS2VybWl0IGV4ZWN1dGFibGUsIHRyYW5zZmVy cmVkIGluIGJpbmFyeQotICAgbW9kZS4gQ29uZGl0aW9ucyB3ZXJlIHJlbGF0aXZlbHkgcG9vcjog dGhlIFN1biBhbmQgdGhlIGxvY2FsIG5ldAotICAgaGVhdmlseSBsb2FkZWQ7IHRoZSBIUCBzeXN0 ZW0gaXMgb2xkLCBzbG93LCBhbmQgbWVtb3J5LWNvbnN0cmFpbmVkLgotCi0gICAgICAgICAgICAg ICAgICAgQy1LZXJtaXQgNi4wLi4uICAgIEMtS2VybWl0IDcuMC4uLgotIExvY2FsICAgIFJlbW90 ZSAgIEFDSy9OQUsuLi4uLi4uLiAgICBTdHJlYW1pbmcuLi4uLi4KLSBDbGllbnQgICBTZXJ2ZXIg ICBTZW5kICAgIFJlY2VpdmUgICAgU2VuZCAgICBSZWNlaXZlCi0gIFN1biAgICAgIEhQICAgICAg IDM2ICAgICAgIDE4ICAgICAgICA2NCAgICAgICAxOAotICBIUCAgICAgICBIUCAgICAgICAyNSAg ICAgICAxNSAgICAgICAgMzcgICAgICAgMTYKLSAgSFAgICAgICAgU3VuICAgICAgNzcgICAgICAg ODMgICAgICAgMTE4ICAgICAgIDkyCi0gIFN1biAgICAgIFN1biAgICAgIDYwICAgICAgIDYwICAg ICAgIDE1MyAgICAgIDE1OAotCi0gICBTbyB3aGVuZXZlciBIUCBpcyB0aGUgcmVtb3RlIHdlIGhh dmUgcG9vciBwZXJmb3JtYW5jZS4gV2h5PwotCi0gICAgICogQ2hhbmdpbmcgZmlsZSBkaXNwbGF5 IHRvIENSVCBoYXMgbm8gZWZmZWN0IChzbyBpdCdzIG5vdCB0aGUgY3Vyc2VzCi0gICAgICAgbGli cmFyeSBvbiB0aGUgY2xpZW50IHNpZGUpLgotICAgICAqIENoYW5naW5nIFRDUCBSRUNWLUJVRkZF UiBvciBTRU5ELUJVRkZFUiBoYXMgbGl0dGxlIGVmZmVjdC4KLSAgICAgKiBUZWxsaW5nIHRoZSBj bGllbnQgdG8gbWFrZSBhIGJpbmFyeS1tb2RlIGNvbm5lY3Rpb24gKFNFVCBURUxORVQKLSAgICAg ICBCSU5BUlkgUkVRVUVTVEVELCB3aGljaCBzdWNjZXNzZnVsbHkgbmVnb3RpYXRlcyBhIGJpbmFy eQotICAgICAgIGNvbm5lY3Rpb24pIGhhcyBubyBlZmZlY3Qgb24gdGhyb3VnaHB1dC4KLQotICAg QlVULi4uIElmIEkgc3RhcnQgSFAtVVggQy1LZXJtaXQgYXMgYSBUQ1Agc2VydmljZToKLQotICBz ZXQgaG9zdCAqIDMwMDAKLSAgc2VydmVyCi0KLSAgIGFuZCB0aGVuIGZyb20gdGhlIGNsaWVudCAi c2V0IGhvc3QgeHh4IDMwMDAiLCBJIGdldDoKLQotICAgICAgICAgICAgICAgICAgIEMtS2VybWl0 IDYuMC4uLiAgICBDLUtlcm1pdCA3LjAuLi4KLSBMb2NhbCAgICBSZW1vdGUgICBBQ0svTkFLLi4u Li4uLi4gICAgU3RyZWFtaW5nLi4uLi4uCi0gQ2xpZW50ICAgU2VydmVyICAgU2VuZCAgICBSZWNl aXZlICAgIFNlbmQgICAgUmVjZWl2ZQotICBTdW4gICAgICBIUCAgICAgICA3NyAgICAgICA2NyAg ICAgICAxMDYgICAgICAxMzkKLSAgSFAgICAgICAgSFAgICAgICAgNTAgICAgICAgNTAgICAgICAg IDY0ICAgICAgIDYyCi0gIEhQICAgICAgIFN1biAgICAgIDU3ICAgICAgIDg1ICAgICAgIDE1NSAg ICAgIDEwNQotICBTdW4gICAgICBTdW4gICAgICA1NyAgICAgICA1MCAgICAgICAzMjEgICAgICAz MTQKLQotICAgVGhlcmVmb3JlIHRoZSBIUC1VWCB0ZWxuZXQgc2VydmVyIG9yIHB0eSBkcml2ZXIg c2VlbXMgdG8gYmUgYWRkaW5nIG1vcmUKLSAgIG92ZXJoZWFkIHRoYW4gdGhlIFN1bk9TIG9uZSwg YW5kIG1vc3Qgb3RoZXJzLiBXaGVuIGdvaW5nIHRocm91Z2ggdGhpcwotICAgdHlwZSBvZiBjb25u ZWN0aW9uIChhIHJlbW90ZSB0ZWxuZXQgc2VydmVyKSB0aGVyZSBpcyBsaXR0bGUgS2VybWl0IGNh bgotICAgZG8gaW1wcm92ZSBtYXR0ZXJzLCBzaW5jZSB0aGUgdGVsbmV0IHNlcnZlciBhbmQgcHR5 IGRyaXZlciBhcmUgYmV0d2VlbgotICAgdGhlIHR3byBLZXJtaXRzLCBhbmQgbmVpdGhlciBLZXJt aXQgcHJvZ3JhbSBjYW4gaGF2ZSBhbnkgaW5mbHVlbmNlIG92ZXIKLSAgIHRoZW0gKGV4Y2VwdCBw dXR0aW5nIHRoZSBUZWxuZXQgY29ubmVjdGlvbiBpbiBiaW5hcnkgbW9kZSwgYnV0IHRoYXQKLSAg IGRvZXNuJ3QgaGVscCkuCi0KLSAgIChUaGUgbnVtYmVycyBmb3IgdGhlIEhQLUhQIHRyYW5zZmVy cyBhcmUgbG93ZXIgdGhhbiB0aGUgb3RoZXJzIHNpbmNlCi0gICBib3RoIEtlcm1pdCBwcm9jZXNz ZXMgYXJlIHJ1bm5pbmcgb24gdGhlIHNhbWUgc2xvdyAzM01IeiBDUFUuKQotCi0gICBNYXR0ZXJz IHNlZW0gdG8gaGF2ZSBkZXRlcmlvcmF0ZWQgaW4gSFAtVVggMTEuIE5vdyBmaWxlIHRyYW5zZmVy cyBvdmVyCi0gICBUZWxuZXQgY29ubmVjdGlvbnMgZmFpbCBjb21wbGV0ZWx5LCByYXRoZXIgdGhh biBqdXN0IGJlaW5nIHNsb3cuIEluIHRoZQotICAgZm9sbG93aW5nIHRyaWFsLCBhIFRlbG5ldCBj b25uZWN0aW9uIHdhcyBtYWRlIGZyb20gS2VybWl0IDk1IHRvIEhQLVVYCi0gICAxMS4xMSBvbiBh biBIUC05MDAwLzc4NS9CMjAwMCBvdmVyIGxvY2FsIDEwTWJwcyBFdGhlcm5ldCBydW5uaW5nCi0g ICBDLUtlcm1pdCA4LjAwIGluIHNlcnZlciBtb2RlICh1bmRlciB0aGUgSFAtVVggVGVsbmV0IHNl cnZlcik6Ci0KLSAgICAgICAgICAgICAgICAgICBUZXh0Li4uLi4uLi4gICAgQmluYXJ5Li4uLi4u Ci0gIFN0cmVhbSAgUGt0bGVuICAgR0VUICAgICBTRU5EICAgIEdFVCAgICAgU0VORAotICAgIE9u ICAgICA0MDAwICAgIEZhaWwgICAgRmFpbCAgICBGYWlsICAgIEZhaWwKLSAgICBPZmYgICAgNDAw MCAgICBGYWlsICAgIEZhaWwgICAgRmFpbCAgICBGYWlsCi0gICAgT2ZmICAgIDIwMDAgICAgT0sg ICAgICBGYWlsICAgIE9LICAgICAgRmFpbAotICAgIE9uICAgICAyMDAwICAgIE9LICAgICAgRmFp bCAgICBPSyAgICAgIEZhaWwKLSAgICBPbiAgICAgMzAwMCAgICBGYWlsICAgIEZhaWwgICAgRmFp bCAgICBGYWlsCi0gICAgT24gICAgIDI1MDAgICAgRmFpbCAgICBGYWlsICAgIEZhaWwgICAgRmFp bAotICAgIE9uICAgICAyMDQ3ICAgIE9LICAgICAgRmFpbCAgICBPSyAgICAgIEZhaWwKLSAgICBP biAgICAgMjA0NSAgICBPSyAgICAgIEZhaWwgICAgT0sgICAgICBGYWlsCi0gICAgT2ZmICAgICA1 MDAgICAgT0sgICAgICBPSyAgICAgIE9LICAgICAgT0sKLSAgICBPbiAgICAgIDUwMCAgICBPSyAg ICAgIEZhaWwgICAgT0sgICAgICBGYWlsCi0gICAgT24gICAgICAyNDAgICAgT0sgICAgICBGYWls ICAgIE9LICAgICAgRmFpbAotCi0gICBBcyB5b3UgY2FuIHNlZSwgZG93bmxvYWRzIGFyZSBwcm9i bGVtYXRpYyB1bmxlc3MgdGhlIHJlY2VpdmVyJ3MgS2VybWl0Ci0gICBwYWNrZXQgbGVuZ3RoIGlz IDIwNDUgb3IgbGVzcywgYnV0IHVwbG9hZHMgd29yayBvbmx5IHdpdGggc3RyZWFtaW5nCi0gICBk aXNhYmxlZCBhbmQgdGhlIHBhY2tldCBsZW5ndGggcmVzdHJpY3RlZCB0byA1MDAuIFRvIGZvcmNl IGZpbGUKLSAgIHRyYW5zZmVycyB0byB3b3JrIG9uIHRoaXMgY29ubmVjdGlvbiwgdGhlIGRlc2t0 b3AgS2VybWl0IG11c3QgYmUgdG9sZAotICAgdG86Ci0KLSAgc2V0IHN0cmVhbWluZyBvZmYKLSAg c2V0IHJlY2VpdmUgcGFja2V0LWxlbmd0aCAyMDAwCi0gIHNldCBzZW5kIHBhY2tldC1sZW5ndGgg NTAwCi0KLSAgIEhvd2V2ZXIsIGlmIGEgY29ubmVjdGlvbiBpcyBtYWRlIGJldHdlZW4gdGhlIHNh bWUgdHdvIHByb2dyYW1zIG9uIHRoZQotICAgc2FtZSB0d28gY29tcHV0ZXJzIG92ZXIgdGhlIHNh bWUgbmV0d29yaywgYnV0IHRoaXMgdGltZSBhIGRpcmVjdAotICAgc29ja2V0LXRvLXNvY2tldCBj b25uZWN0aW9uIGJ5cGFzc2luZyB0aGUgSFAtVVggVGVsbmV0IHNlcnZlciBhbmQgcHR5Ci0gICBk cml2ZXIgKHRlbGwgSFAtVVggQy1LZXJtaXQgdG8gInNldCBob3N0IC9zZXJ2ZXIgKiAzMDAwIC9y YXciOyB0ZWxsCi0gICBkZXNrdG9wIGNsaWVudCBwcm9ncmFtIHRvICJzZXQgaG9zdCBibGFoIDMw MDAgL3JhdyIpLCBldmVyeXRoaW5nIHdvcmtzCi0gICBwZXJmZWN0bHkgd2l0aCB0aGUgZGVmYXVs dCBLZXJtaXQgc2V0dGluZ3MgKHN0cmVhbWluZywgNEsgcGFja2V0cywKLSAgIGxpYmVyYWwgY29u dHJvbC1jaGFyYWN0ZXIgdW5wcmVmaXhpbmcsIDgtYml0IHRyYW5zcGFyZW5jeSwgZXRjKToKLQot ICAgICAgICAgICAgICAgICAgIFRleHQuLi4uLi4uLiAgICBCaW5hcnkuLi4uLi4KLSAgU3RyZWFt ICBQa3RsZW4gICBHRVQgICAgIFNFTkQgICAgR0VUICAgICBTRU5ECi0gICAgT24gICAgIDQwMDAg ICAgT0sgICAgICBPSyAgICAgIE9LICAgICAgT0sKLQotICAgQW5kIGluIHRoaXMgY2FzZSwgdHJh bnNmZXIgcmF0ZXMgd2VyZSBhcHByb3hpbWF0ZWx5IDkwMCwwMDAgY3BzLiBUbwotICAgdmVyaWZ5 IHRoYXQgdGhlIGJlaGF2aW9yIHJlcG9ydGVkIGhlcmUgaXMgbm90IGNhdXNlZCBieSB0aGUgbmV3 IEtlcm1pdAotICAgcmVsZWFzZSwgdGhlIHNhbWUgZXhwZXJpbWVudCB3YXMgcGVyZm9ybWVkIG9u IGEgVGVsbmV0IGNvbm5lY3Rpb24gZnJvbQotICAgdGhlIHNhbWUgUEMgb3ZlciB0aGUgc2FtZSBu ZXR3b3JrIHRvIHRoZSBvbGQgNzE1LzMzIHJ1bm5pbmcgSFAtVVggMTAuMjAKLSAgIGFuZCBDLUtl cm1pdCA4LjAwLiBUZXh0IGFuZCBiaW5hcnkgdXBsb2FkcyBhbmQgZG93bmxvYWRzIHdvcmtlZAot ICAgcGVyZmVjdGx5IChhbGJlaXQgc2xvd2x5KSB3aXRoIGFsbCB0aGUgZGVmYXVsdCBzZXR0aW5n cyAtLSBzdHJlYW1pbmcsCi0gICA0SyBwYWNrZXRzLCBldGMuCi0KLTMuMi4zLiBEaWFsaW5nIE91 dCBhbmQgVVVDUCBMb2NrZmlsZXMgaW4gSFAtVVgKLQotICAgWyBbMjIzXVRvcCBdIFsgWzIyNF1D b250ZW50cyBdIFsgWzIyNV1TZWN0aW9uIENvbnRlbnRzIF0gWyBbMjI2XU5leHQgXQotICAgWyBb MjI3XVByZXZpb3VzIF0KLQotICAgSFAgd29ya3N0YXRpb25zIGRvIG5vdCBjb21lIHdpdGggZGlh bG91dCBkZXZpY2VzIGNvbmZpZ3VyZWQ7IHlvdSBoYXZlCi0gICB0byBkbyBpdCB5b3Vyc2VsZiAo YXMgcm9vdCkuIEZpcnN0IGxvb2sgaW4gL2RldiB0byBzZWUgd2hhdCdzIHRoZXJlOwotICAgZm9y IGV4YW1wbGUgaW4gSFAtVVggMTAuMDAgb3IgbGF0ZXI6Ci0KLSAgbHMgLWwgL2Rldi9jdWEqCi0g IGxzIC1sIC9kZXYvdHR5KgotCi0gICBJZiB5b3UgZmluZCBhIHR0eTBwMCBkZXZpY2UgYnV0IG5v IGN1YTBwMCwgeW91J2xsIG5lZWQgdG8gY3JlYXQgb25lIGlmCi0gICB5b3Ugd2FudCB0byBkaWFs IG91dDsgdGhlIHR0eTBwMCBkb2VzIG5vdCB3b3JrIGZvciBkaWFsaW5nIG91dC4gSXQncwotICAg ZWFzeTogc3RhcnQgU0FNOyBpbiB0aGUgbWFpbiBTYW0gd2luZG93LCBkb3VibGUtY2xpY2sgb24g UGVyaXBoZXJhbAotICAgRGV2aWNlLCB0aGVuIGluIHRoZSBQZXJpcGhlcmFsIERldmljZXMgd2lu ZG93LCBkb3VibGUtY2xpY2sgb24KLSAgIFRlcm1pbmFscyBhbmQgTW9kZW1zLiBJbiB0aGUgVGVy bWluYWxzIGFuZCBNb2RlbXMgZGlhbG9nLCBjbGljayBvbgotICAgQWN0aW9ucywgdGhlbiBjaG9v c2UgIkFkZCBtb2RlbSIgYW5kIGZpbGwgaW4gdGhlIGJsYW5rcy4gRm9yIGV4YW1wbGU6Ci0gICBQ b3J0IG51bWJlciAwLCBzcGVlZCA1NzYwMCAoaGlnaGVyIHNwZWVkcyB0ZW5kIG5vdCB0byB3b3Jr IHJlbGlhYmx5KSwKLSAgICJVc2UgZGV2aWNlIGZvciBjYWxsaW5nIG91dCIsIGRvIE5PVCAiUmVj ZWl2ZSBpbmNvbWluZyBjYWxscyIgKHVubGVzcwotICAgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRv aW5nKSwgbGVhdmUgIkNDSVRUIG1vZGVtIiB1bmNoZWNrZWQgdW5sZXNzIHlvdQotICAgcmVhbGx5 IGhhdmUgb25lLCBhbmQgZG8gc2VsZWN0ICJVc2UgaGFyZHdhcmUgZmxvdyBjb250cm9sIChSVFMv Q1RTKSIuCi0gICBUaGVuIGNsaWNrIE9LLiBUaGlzIGNyZWF0ZXMgY3VhMHAwIGFzIHdlbGwgYXMg Y3VsMHAwIGFuZCB0dHlkMHAwCi0KLSAgIElmIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2U6Ci0KLSAg c2V0IGxpbmUgL2Rldi9jdWEwcDAgOyBvciBvdGhlciBkZXZpY2UKLSAgc2V0IHNwZWVkIDExNTIw MCAgICAgOyBvciBvdGhlciBub3JtYWwgc3BlZWQKLQotICAgcHJvZHVjZXMgdGhlIG1lc3NhZ2Ug Ij9VbnN1cHBvcnRlZCBsaW5lIHNwZWVkIi4gVGhpcyBtZWFucyBlaXRoZXIgdGhhdAotICAgdGhl IHBvcnQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGRpYWxvdXQgKGdvIGludG8gU0FNIGFzIGRlc2Ny aWJlZCBhYm92ZQotICAgYW5kIG1ha2Ugc3VyZSAiVXNlIGRldmljZSBmb3IgY2FsbGluZyBvdXQi IGlzIHNlbGVjdGVkKSwgb3IgZWxzZSB0aGF0Ci0gICBzcGVlZCB5b3UgaGF2ZSBnaXZlbiAoc3Vj aCBhcyA0NjA4MDApIGlzIHN1cHBvcnRlZCBieSB0aGUgb3BlcmF0aW5nCi0gICBzeXN0ZW0gYnV0 IG5vdCBieSB0aGUgcGh5c2ljYWwgZGV2aWNlIChpbiB3aGljaCBjYXNlLCB1c2UgYSBsb3dlciBz cGVlZAotICAgbGlrZSA1NzYwMCkuCi0KLSAgIEluIEhQLVVYIDkuMCwgc2VyaWFsIGRldmljZSBu YW1lcyBiZWdhbiB0byBjaGFuZ2UuIFRoZSBvbGRlciBuYW1lcwotICAgbG9va2VkIGxpa2UgIi9k ZXYvY3VhMDAiLCAiL2Rldi90dHkwMSIsIGV0YyAoc29tZXRpbWVzIHdpdGggb25seSBvbmUKLSAg IGRpZ2l0KS4gVGhlIG5ld2VyIG5hbWVzIGhhdmUgdHdvIGRpZ2l0cyB3aXRoIHRoZSBsZXR0ZXIg InAiIGluIGJldHdlZW4uCi0gICBIUC1VWCA4Lnh4IGFuZCBlYXJsaWVyIGhhdmUgdGhlIG9sZGVy IGZvcm0sIEhQLVVYIDEwLjAwIGFuZCBsYXRlciBoYXZlCi0gICB0aGUgbmV3ZXIgZm9ybS4gSFAt VVggOS54eCBoYXMgdGhlIG5ld2VyIGZvcm0gb24gU2VyaWVzIDgwMCBtYWNoaW5lcywKLSAgIGFu ZCB0aGUgb2xkZXIgZm9ybSBvbiBvdGhlciBoYXJkd2FyZSBtb2RlbHMuIFRoZSBzaXR1YXRpb24g aXMKLSAgIHN1bW1hcml6ZWQgaW4gdGhlIGZvbGxvd2luZyB0YWJsZSAodGhlIENvbnZpbyAxMC4w IGNvbHVtbiBhcHBsaWVzIHRvCi0gICBIUC1VWCAxMCBhbmQgMTEpLgotCi0gIENvbnZlcmdlZCBI UC1VWCBTZXJpYWwgSS9PIEZpbGVuYW1lcyA6IFRUWSBNdXggTmFtaW5nCi0gIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQotICBHZW5lcmFsIG1lYW5pbmcgICAgICBPbGQgRm9ybSAgICAgUzgwMCA5LjAgICAgICAgICAg IENvbnZpbyAxMC4wCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICB0dHkqIGhhcmR3aXJlZCBwb3J0cyAgdHR5 PFlZPiAgICAgdHR5PFg+cDxZPiAgICAgICAgIHR0eTxEPnA8cD4KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRpYWc6bXV4PFg+ICAgICAgICBkaWFnOm11eDxEPgotICAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KLSAgdHR5ZCogZGlhbC1pbiBtb2RlbXMgIHR0eWQ8WVk+ICAgIHR0eWQ8WD5wPFk+ ICAgICAgICB0dHlkPEQ+cDxwPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZGlhZzp0dHlkPFg+cDxZPiAgIGRpYWc6dHR5ZDxEPnA8cD4KLSAgLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIGN1 YSogYXV0by1kaWFsIG91dCAgICBjdWE8WVk+ICAgICBjdWE8WD5wPFk+ICAgICAgICAgY3VhPEQ+ cDxwPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlhZzpjdWE8WD5wPFk+ Ci0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQotICBjdWwqIGRpYWwtb3V0ICAgICAgICAgY3VsPFlZPiAgICAgY3Vs PFg+cDxZPiAgICAgICAgIGN1bDxEPnA8cD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRpYWc6Y3VsPFg+cDxZPgotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIDxYPj0gTFUgKExvZ2lj YWwgVW5pdCkgIDxEPj0gRGV2c3BlYyAoZGVjaW1hbCBjYXJkIGluc3RhbmNlKQotICAgPFk+IG9y IDxZWT4gPSBQb3J0ICAgICAgPHA+PSBQb3J0Ci0KLSAgIEZvciBkaWFsaW5nIG91dCwgeW91IHNo b3VsZCB1c2UgdGhlIGN1YSBvciBjdWwgZGV2aWNlcy4gV2hlbiBDLUtlcm1pdCdzCi0gICBDQVJS SUVSIHNldHRpbmcgaXMgQVVUTyBvciBPTiwgQy1LZXJtaXQgc2hvdWxkIHBvcCBiYWNrIHRvIGl0 cyBwcm9tcHQKLSAgIGF1dG9tYXRpY2FsbHkgaWYgdGhlIGNhcnJpZXIgc2lnbmFsIGRyb3BzLCBl LmcuIHdoZW4geW91IGxvZyBvdXQgZnJvbQotICAgdGhlIHJlbW90ZSBjb21wdXRlciBvciBzZXJ2 aWNlLiBJZiB5b3UgdXNlIHRoZSB0dHk8RD5wPGQ+IChlLmcuIHR0eTBwMCkKLSAgIGRldmljZSwg dGhlIGNhcnJpZXIgc2lnbmFsIHNob3VsZCBiZSBpZ25vcmVkLiBUaGUgdHR5PEQ+cDxkPiBkZXZp Y2UKLSAgIHNob3VsZCBiZSB1c2VkIGZvciBkaXJlY3QgY29ubmVjdGlvbnMgd2hlcmUgdGhlIGNh cnJpZXIgc2lnbmFsIGRvZXMgbm90Ci0gICBmb2xsb3cgUlMtMjMyIGNvbnZlbnRpb25zICh1c2Ug dGhlIGN1bCBkZXZpY2UgZm9yIGhhcmR3aXJlZCBjb25uZWN0aW9ucwotICAgdGhyb3VnaCBhIHRy dWUgbnVsbCBtb2RlbSkuIERvIG5vdCB1c2UgdGhlIHR0eWQ8RD5wPGQ+IGRldmljZSBmb3IKLSAg IGRpYWxpbmcgb3V0LgotCi0gICBLZXJtaXQncyBhY2Nlc3MgdG8gc2VyaWFsIGRldmljZXMgaXMg Y29udHJvbGxlZCBieSAiVVVDUCBsb2NrZmlsZXMiLAotICAgd2hpY2ggYXJlIGludGVuZGVkIHRv IHByZXZlbnQgZGlmZmVyZW50IHVzZXJzIHVzaW5nIGRpZmZlcmVudCBzb2Z0d2FyZQotICAgcHJv Z3JhbXMgKEtlcm1pdCwgY3UsIGV0YywgYW5kIFVVQ1AgaXRzZWxmKSBmcm9tIGFjY2Vzc2luZyB0 aGUgc2FtZQotICAgc2VyaWFsIGRldmljZSBhdCB0aGUgc2FtZSB0aW1lLiBXaGVuIGEgZGV2aWNl IGlzIGluIHVzZSBieSBhIHBhcnRpY3VsYXIKLSAgIHVzZXIsIGEgZmlsZSB3aXRoIGEgc3BlY2lh bCBuYW1lIGlzIGNyZWF0ZWQgaW46Ci0KLSAgL3Zhci9zcG9vbC9sb2NrcyAgKEhQLVVYIDEwLjAw IGFuZCBsYXRlcikKLSAgL3Vzci9zcG9vbC91dWNwICAgKEhQLVVYIDkueHggYW5kIGVhcmxpZXIp Ci0KLSAgIFRoZSBmaWxlJ3MgbmFtZSBpbmRpY2F0ZXMgdGhlIGRldmljZSB0aGF0IGlzIGluIHVz ZSwgYW5kIGl0cyBjb250ZW50cwotICAgaW5kaWNhdGVzIHRoZSBwcm9jZXNzIElEIChwaWQpIG9m IHRoZSBwcm9jZXNzIHRoYXQgaXMgdXNpbmcgdGhlIGRldmljZS4KLSAgIFNpbmNlIHNlcmlhbCBk ZXZpY2VzIGFuZCB0aGUgbG9ja3MgZGlyZWN0b3J5IGFyZSBub3QgYm90aCBwdWJsaWNseQotICAg cmVhZGFibGUgYW5kIHdyaXRhYmxlLCBLZXJtaXQgYW5kIG90aGVyIGNvbW11bmljYXRpb24gc29m dHdhcmUgbXVzdCBiZQotICAgaW5zdGFsbGVkIHNldHVpZCB0byB0aGUgb3duZXIgKGJpbikgb2Yg dGhlIHNlcmlhbCBkZXZpY2UgYW5kIHNldGdpZCB0bwotICAgdGhlIGdyb3VwIChkYWVtb24pIG9m IHRoZSAvdmFyL3Nwb29sL2xvY2tzIGRpcmVjdG9yeS4gS2VybWl0J3Mgc2V0dWlkCi0gICBhbmQg c2V0Z2lkIHByaXZpbGVnZXMgYXJlIGVuYWJsZWQgb25seSB3aGVuIG9wZW5pbmcgdGhlIGRldmlj ZSBhbmQKLSAgIGFjY2Vzc2luZyB0aGUgbG9ja2ZpbGVzLgotCi0gICBMZXQncyBzYXkgInVuaXQi IG1lYW5zIGEgc3RyaW5nIG9mIGRlY2ltYWwgZGlnaXRzICh0aGUgaW50ZXJmYWNlCi0gICBpbnN0 YW5jZSBudW1iZXIpIGZvbGxvd2VkIChpbiBIUC1VWCAxMC4wMCBhbmQgbGF0ZXIpIGJ5IHRoZSBs ZXR0ZXIgInAiCi0gICAobG93ZXJjYXNlKSwgZm9sbG93ZWQgYnkgYW5vdGhlciBzdHJpbmcgb2Yg ZGVjaW1hbCBkaWdpdHMgKHRoZSBwb3J0Ci0gICBudW1iZXIgb24gdGhlIGludGVyZmFjZSksIGUu Zy46Ci0KLSAgIjBwMCIsICIwcDEiLCAiMXAwIiwgZXRjICAgICAgIChIUC1VWCAxMC4wMCBhbmQg bGF0ZXIpCi0gICIwcDAiLCAiMHAxIiwgIjFwMCIsIGV0YyAgICAgICAoSFAtVVggOS54eCBvbiBT ZXJpZXMgODAwKQotICAiMDAiLCAgIjAxIiwgICIxMCIsICAiMCIsIGV0YyAgKEhQLVVYIDkueHgg bm90IG9uIFNlcmllcyA4MDApCi0gICIwMCIsICAiMDEiLCAgIjEwIiwgICIwIiwgZXRjICAoSFAt VVggOC54eCBhbmQgZWFybGllcikKLQotICAgVGhlbiBhIG5vcm1hbCBzZXJpYWwgZGV2aWNlIChk cml2ZXIpIG5hbWUgY29uc2lzdHMgb2YgYSBwcmVmaXggKCJ0dHkiLAotICAgInR0eWQiLCAiY3Vh IiwgImN1bCIsIG9yIHBvc3NpYmx5ICJjdWFkIiBvciAiY3VsZCIpIGZvbGxvd2VkIGJ5IGEgdW5p dCwKLSAgIGUuZy4gImN1YTBwMCIuIEtlcm1pdCdzIHRyZWF0bWVudCBvZiBVVUNQIGxvY2tmaWxl cyBpcyBhcyBjbG9zZSBhcwotICAgcG9zc2libGUgdG8gdGhhdCBvZiB0aGUgSFAtVVggImN1IiBw cm9ncmFtLiBIZXJlIGlzIGEgdGFibGUgb2YgdGhlCi0gICBsb2NrZmlsZXMgdGhhdCBLZXJtaXQg Y3JlYXRlcyBmb3IgdW5pdCAwcDA6Ci0KLSAgU2VsZWN0aW9uICAgICAgTG9ja2ZpbGUgMSAgICAg TG9ja2ZpbGUgMgotICAvZGV2L3R0eTBwMCAgICBMQ0suLnR0eTBwMCAgICAobm9uZSkKLSogL2Rl di90dHlkMHAwICAgTENLLi50dHlkMHAwICAgKG5vbmUpCi0gIC9kZXYvY3VhMHAwICAgIExDSy4u Y3VhMHAwICAgIExDSy4udHR5ZDBwMAotICAvZGV2L2N1bDBwMCAgICBMQ0suLmN1bDBwMCAgICBM Q0suLnR0eWQwcDAKLSAgL2Rldi9jdWFkMHAwICAgTENLLi5jdWFkMHAwICAgTENLLi50dHlkMHAw Ci0gIC9kZXYvY3VsZDBwMCAgIExDSy4uY3VsZDBwMCAgIExDSy4udHR5ZDBwMAotICA8b3RoZXI+ ICAgICAgICBMQ0suLjxvdGhlcj4gICAobm9uZSkKLQotICAgKCogPSBEaWFsaW4gZGV2aWNlLCBz aG91bGQgbm90IGJlIHVzZWQuKQotCi0gICBJbiBvdGhlciB3b3JkcywgaWYgdGhlIGRldmljZSBu YW1lIGJlZ2lucyB3aXRoICJjdSIsIGEgc2Vjb25kIGxvY2tmaWxlCi0gICBmb3IgdGhlICJ0dHlk IiBkZXZpY2UsIHNhbWUgdW5pdCwgaXMgY3JlYXRlZCwgd2hpY2ggc2hvdWxkIHByZXZlbnQKLSAg IGRpYWxpbiBhY2Nlc3Mgb24gdGhhdCBkZXZpY2UuCi0KLSAgIFRoZSA8b3RoZXI+IGNhc2UgYWxs b3dzIGZvciBzeW1ib2xpYyBsaW5rcywgZXRjLCBidXQgb2YgY291cnNlIGl0IGlzCi0gICBub3Qg Zm9vbHByb29mIHNpbmNlIHdlIGhhdmUgbm8gd2F5IG9mIHRlbGxpbmcgd2hpY2ggZGV2aWNlIGlz IHJlYWxseQotICAgYmVpbmcgdXNlZC4KLQotICAgV2hlbiBDLUtlcm1pdCB0cmllcyB0byBvcGVu IGEgZGlhbG91dCBkZXZpY2Ugd2hvc2UgbmFtZSBlbmRzIHdpdGggYQotICAgInVuaXQiLCBpdCBz ZWFyY2hlcyB0aGUgbG9ja2ZpbGUgZGlyZWN0b3J5IGZvciBhbGwgcG9zc2libGUgbmFtZXMgZm9y Ci0gICB0aGUgc2FtZSB1bml0LiBGb3IgZXhhbXBsZSwgaWYgdXNlciBzZWxlY3RzIC9kZXYvY3Vs MnAzLCBLZXJtaXQgbG9va3MKLSAgIGZvciBsb2NrZmlsZXMgbmFtZWQ6Ci0KLSAgTENLLi50dHky cDMKLSAgTENLLi50dHlkMnAzCi0gIExDSy4uY3VhMnAzCi0gIExDSy4uY3VsMnAzCi0gIExDSy4u Y3VhZDJwMwotICBMQ0suLmN1bGQycDMKLQotICAgSWYgYW55IG9mIHRoZXNlIGZpbGVzIGFyZSBm b3VuZCwgS2VybWl0IG9wZW5zIHRoZW0gdG8gZmluZCBvdXQgdGhlIElECi0gICAocGlkKSBvZiB0 aGUgcHJvY2VzcyB0aGF0IGNyZWF0ZWQgdGhlbTsgaWYgdGhlIHBpZCBpcyBzdGlsbCB2YWxpZCwg dGhlCi0gICBwcm9jZXNzIGlzIHN0aWxsIGFjdGl2ZSwgYW5kIHNvIHRoZSBTRVQgTElORSBjb21t YW5kIGZhaWxzIGFuZCB0aGUgdXNlcgotICAgaXMgaW5mb3JtZWQgb2YgdGhlIHBpZCBzbyBzL2hl IGNhbiB1c2UgInBzIiB0byBmaW5kIG91dCB3aG8gaXMgdXNpbmcKLSAgIHRoZSBkZXZpY2UuCi0K LSAgIElmIHRoZSBwaWQgaXMgbm90IHZhbGlkLCB0aGUgZmlsZSBpcyBkZWxldGVkLiBJZiBhbGwg c3VjaCBmaWxlcyAoaS5lLgotICAgd2l0aCBzYW1lICJ1bml0IiBkZXNpZ25hdGlvbikgYXJlIHN1 Y2Nlc3NmdWxseSByZW1vdmVkLCB0aGVuIHRoZSBTRVQKLSAgIExJTkUgY29tbWFuZCBzdWNjZWVk czsgdXAgdG8gc2l4IG1lc3NhZ2VzIGFyZSBwcmludGVkIHRlbGxpbmcgdGhlIHVzZXIKLSAgIHdo aWNoICJzdGFsZSBsb2NrZmlsZXMiIGFyZSBiZWluZyByZW1vdmVkLgotCi0gICBXaGVuIHRoZSAi c2V0IGxpbmUiIGNvbW1hbmQgc3VjY2VlZHMgaW4gSFAtVVggMTAuMDAgYW5kIGxhdGVyLCBDLUtl cm1pdAotICAgYWxzbyBjcmVhdGVzIGEgVW5peCBTeXN0ZW0gViBSNCAiYWR2aXNvcnkgbG9jayIg YXMgYSBmdXJ0aGVyIHByZWNhdXRpb24KLSAgIChidXQgbm90IGd1YXJhbnRlZSkgYWdhaW5zdCBh bnkgb3RoZXIgcHJvY2VzcyBvYnRhaW5pbmcgYWNjZXNzIHRvIHRoZQotICAgZGV2aWNlIHdoaWxl IHlvdSBhcmUgdXNpbmcgaXQuCi0KLSAgIElmIHRoZSBzZWxlY3RlZCBkZXZpY2Ugd2FzIGluIHVz ZSBieSAiY3UiLCBLZXJtaXQgY2FuJ3Qgb3BlbiBpdCwKLSAgIGJlY2F1c2UgImN1IiBoYXMgY2hh bmdlZCBpdHMgb3duZXJzaGlwLCBzbyB3ZSBuZXZlciBnZXQgYXMgZmFyIGFzCi0gICBsb29raW5n IGF0IHRoZSBsb2NrZmlsZXMuIEluIHRoZSBub3JtYWwgY2FzZSwgd2UgY2FuJ3QgZXZlbiBsb29r IGF0IHRoZQotICAgZGV2aWNlIHRvIHNlZSB3aG8gdGhlIG93bmVyIGlzIGJlY2F1c2UgaXQgaXMg dmlzaWJsZSBvbmx5IHRvIGl0cwotICAgKHByZXNlbnQpIG93bmVyLiBJbiB0aGlzIGNhc2UsIEtl cm1pdCBzYXlzIChmb3IgZXhhbXBsZSk6Ci0KLSAgL2Rldi9jdWEwcDA6IFBlcm1pc3Npb24gZGVu aWVkCi0KLSAgIFdoZW4gS2VybWl0IHJlbGVhc2VzIGEgZGV2aWNlIGl0IGhhcyBzdWNjZXNzZnVs bHkgb3BlbmVkLCBpdCByZW1vdmVzCi0gICBhbGwgdGhlIGxvY2tmaWxlcyB0aGF0IGl0IGNyZWF0 ZWQuIFRoaXMgYWxzbyBoYXBwZW5zIHdoZW5ldmVyIEtlcm1pdAotICAgZXhpdHMgInVuZGVyIGl0 cyBvd24gcG93ZXIiLgotCi0gICBJZiBLZXJtaXQgaXMga2lsbGVkIHdpdGggYSBkZXZpY2Ugb3Bl biwgdGhlIGxvY2tmaWxlKHMpIGFyZSBsZWZ0Ci0gICBiZWhpbmQuIFRoZSBuZXh0IEtlcm1pdCBw cm9ncmFtIHRoYXQgdHJpZXMgdG8gYXNzaWduIHRoZSBkZXZpY2UsIHVuZGVyCi0gICBhbnkgb2Yg aXRzIHZhcmlvdXMgbmFtZXMsIHdpbGwgYXV0b21hdGljYWxseSBjbGVhbiB1cCB0aGUgc3RhbGUK LSAgIGxvY2tmaWxlcyBiZWNhdXNlIHRoZSBwaWRzIHRoZXkgY29udGFpbiBhcmUgaW52YWxpZC4g VGhlIGJlaGF2aW9yIG9mIGN1Ci0gICBhbmQgb3RoZXIgY29tbXVuaWNhdGlvbiBwcm9ncmFtcyB1 bmRlciB0aGVzZSBjb25kaXRpb25zIHNob3VsZCBiZSB0aGUKLSAgIHNhbWUuCi0KLSAgIEhlcmUs IGJ5IHRoZSB3YXksIGlzIGEgc3VtbWFyeSBvZiB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUg SFAtVVgKLSAgIHBvcnQgZHJpdmVyIHR5cGVzIGZyb20gSm9obiBQZXp6YW5vIG9mIEhQOgotCi0g ICAgIFRoZXJlIGFyZSB0aHJlZSB0eXBlcyBvZiBkZXZpY2UgZmlsZXMgZm9yIGVhY2ggcG9ydC4K LQotICAgICBUaGUgdHR5ZFhYWCBkZXZpY2UgZmlsZSBpcyBkZXNpZ25lZCB0byB3b3JrIGFzIGZv bGxvd3M6Ci0KLSAgICAxLiBUaGUgcHJvY2VzcyB0aGF0IG9wZW5zIGl0IGRvZXMgTk9UIGdldCBj b250cm9sIG9mIHRoZSBwb3J0IHVudGlsIENECi0gICAgICAgaXMgYXNzZXJ0ZWQuIFRoaXMgd2Fz IGludGVudGlvbmFsIChvdmVyIDE1IHllYXJzIGFnbykgdG8gYWxsb3cKLSAgICAgICBnZXR0eSB0 byBvcGVuIHRoZSBwb3J0IGJ1dCBub3QgY29udHJvbCBpdCB1bnRpbCBzb21lb25lIGNhbGxlZCBp bi4KLSAgICAgICBJZiBhIHByb2Nlc3Mgd2FudHMgdG8gdXNlIHRoZSBkaXJlY3Qgb3IgY2FsbG91 dCBkZXZpY2UgZmlsZXMKLSAgICAgICAodHR5WFhYIGFuZCBjdWxYWFggcmVzcGVjdGl2ZWx5KSwg dGhleSB3aWxsIHRoZW4gZ2V0IGNvbnRyb2wgYW5kCi0gICAgICAgZ2V0dHkgd291bGQgYmUgYmxv Y2tlZC4gVGhpcyBlbGltaW5hdGVkIHRoZSBuZWVkIHRvIHVzZSB1dWdldHR5Ci0gICAgICAgKGFu ZCBpdHMgaW5oZXJlbnQgcHJvYmxlbXMgd2l0aCBsb2NrIGZpbGVzKSBmb3IgbW9kZW1zLiBZb3Ug Y2FuIHNlZQotICAgICAgIHRoaXMgZGVtb25zdHJhdGVkIGJ5IHRoZSBmYWN0IHRoYXQgInBzIC1l ZiIgc2hvd3MgYSA/IGluIHRoZSB0dHkKLSAgICAgICBjb2x1bW4gZm9yIHRoZSBnZXR0eSBwcm9j ZXNzIGFzIGdldHR5IGRvZXMgbm90IGhhdmUgdGhlIHBvcnQgeWV0LgotICAgIDIuIE9uY2UgQ0Qg aXMgYXNzZXJ0ZWQsIHRoZSBwb3J0IGlzIGNvbnRyb2xsZWQgYnkgZ2V0dHkgKG9yIHRoZQotICAg ICAgIHByb2Nlc3MgaGFuZGxpbmcgYW4gaW5jb21pbmcgY2FsbCkgaWYgdGhlcmUgd2FzIG5vIHBy b2Nlc3MgdXNpbmcKLSAgICAgICB0aGUgcG9ydC4gVGhlID8gaW4gdGhlICJwcyIgY29tbWFuZCBu b3cgc2hvd3MgdGhlIHBvcnQuIEF0IHRoaXMKLSAgICAgICBwb2ludCwgdGhlIHBvcnQgYWNjZXB0 cyBkYXRhLgotCi0gICAgIFRoZXJlZm9yZSB5b3Ugc2hvdWxkIHVzZSBlaXRoZXIgdGhlIGNhbGxv dXQgY3VsWFhYIGRldmljZSBmaWxlCi0gICAgIChpbW1lZGlhdGUgY29udHJvbCBidXQgbm8gZGF0 YSB1bnRpbCBDRCBpcyBhc3NlcnRlZCkgb3IgdGhlIGRpcmVjdAotICAgICBkZXZpY2UgZmlsZSB0 dHlYWFggd2hpY2ggZ2l2ZXMgaW1tZWRpYXRlIGNvbnRyb2wgYW5kIGltbWVkaWF0ZSBkYXRhCi0g ICAgIGFuZCB3aGljaCBpZ25vcmVzIGJ5IGRlZmF1bHQgbW9kZW0gY29udHJvbCBzaWduYWxzLgot Ci0gICAgIFRoZSB0dHlkWFhYIGRldmljZSBzaG91bGQgYmUgdXNlZCBvbmx5IGZvciBjYWxsaW4g YW5kIG15Ci0gICAgIHJlY29tbWVuZGF0aW9uIGlzIHRvIHVzZSBpdCBvbmx5IGZvciBnZXR0eSBh bmQgdXVnZXR0eS4KLQotMy4yLjQgTm90ZXMgb24gU3BlY2lmaWMgSFAtVVggUmVsZWFzZXMKLQot ICAgU0VDVElPTiBDT05URU5UUwotCi0gIDMuMi40LjEuIFsyMjhdSFAtVVggMTEKLSAgMy4yLjQu Mi4gWzIyOV1IUC1VWCAxMAotICAzLjIuNC4zLiBbMjMwXUhQLVVYIDkKLSAgMy4yLjQuNC4gWzIz MV1IUC1VWCA4Ci0gIDMuMi40LjUuIFsyMzJdSFAtVVggNyBhbmQgRWFybGllcgotCi0zLjIuNC4x LiBIUC1VWCAxMQotCi0gICBbIFsyMzNdVG9wIF0gWyBbMjM0XUNvbnRlbnRzIF0gWyBbMjM1XVNl Y3Rpb24gQ29udGVudHMgXSBbIFsyMzZdTmV4dCBdCi0KLSAgIEFzIG5vdGVkIGluIFsyMzddU2Vj dGlvbiAzLjIuMiwgdGhlIEhQLVVYIDExIFRlbG5ldCBzZXJ2ZXIgYW5kL29yCi0gICBwc2V1ZG90 ZXJtaW5hbCBkcml2ZXIgYXJlIGEgc2VyaW91cyBpbXBlZGltZW50IHRvIGZpbGUgdHJhbnNmZXIg b3ZlcgotICAgVGVsbmV0IGNvbm5lY3Rpb25zIGludG8gSFAtVVguIElmIHlvdSBoYXZlIGEgVGVs bmV0IGNvbm5lY3Rpb24gaW50bwotICAgSFAtVVggMTEsIHRlbGwgeW91ciBkZXNrdG9wIEtlcm1p dCBwcm9ncmFtIHRvOgotCi0gIHNldCBzdHJlYW1pbmcgb2ZmCi0gIHNldCByZWNlaXZlIHBhY2tl dC1sZW5ndGggMjAwMAotICBzZXQgc2VuZCBwYWNrZXQtbGVuZ3RoIDUwMAotCi0gICBGaWxlIHRy YW5zZmVyIHNwZWVkcyBvdmVyIGNvbm5lY3Rpb25zIGZyb20gSFAtVVggMTEgKGRpYWxlZCBvciBU ZWxuZXQpCi0gICBhcmUgbm90IGltcGVkZWQgd2hhdHNvZXZlciwgYW5kIGNhbiBnbyBhdCB3aGF0 ZXZlciBzcGVlZCBpcyBhbGxvd2VkIGJ5Ci0gICB0aGUgY29ubmVjdGlvbiBhbmQgdGhlIEtlcm1p dCBwYXJ0bmVyIG9uIHRoZSBmYXIgZW5kLgotCi0gICBQQS1SSVNDIGJpbmFyaWVzIGZvciBIUC1V WCAxMC4yMCBvciBsYXRlciBzaG91bGQgcnVuIG9uIGFueSBQQS1SSVNDCi0gICBzeXN0ZW0sIFM3 MDAgb3IgUzgwMCwgYXMgbG9uZyBhcyB0aGUgYmluYXJ5IHdhcyBub3QgYnVpbHQgdW5kZXIgYSBs YXRlcgotICAgSFAtVVggdmVyc2lvbiB0aGFuIHRoZSBob3N0IG9wZXJhdGluZyBzeXN0ZW0uIEhQ LVVYIDExLjAwIGFuZCAxMS4xMSBhcmUKLSAgIG9ubHkgZm9yIFBBLVJJU0Mgc3lzdGVtcy4gSFAt VVggMTEuMjAgaXMgb25seSBmb3IgSUE2NCAoc3Vic2VxdWVudAotICAgSFAtVVggcmVsZWFzZXMg d2lsbCBiZSBmb3IgYm90aCBQQS1SSVNDIGFuZCBJQTY0KS4gVG8gY2hlY2sgYmluYXJ5Ci0gICBj b21wYXRpYmlsaXR5LCB0aGUgZm9sbG93aW5nIEMtS2VybWl0IDguMCBiaW5hcmllcyB3ZXJlIHJ1 bgotICAgc3VjY2Vzc2Z1bGx5IG9uIGFuIEhQLTkwMDAvNzg1IHdpdGggSFAtVVggMTEuMTE6Ci0K LSAgICAgKiBNb2RlbCA3eHggSFAtVVggMTAuMjAKLSAgICAgKiBNb2RlbCA4eHggSFAtVVggMTAu MjAKLSAgICAgKiBNb2RlbCA3eHggSFAtVVggMTEuMDAKLSAgICAgKiBNb2RlbCA4eHggSFAtVVgg MTEuMDAKLSAgICAgKiBNb2RlbCA3eHggSFAtVVggMTEuMTEKLSAgICAgKiBNb2RlbCA4eHggSFAt VVggMTEuMTEKLQotICAgQmluYXJpZXMgYnVpbHQgdW5kZXIgc29tZSBvZiB0aGUgZWFybGllciBI UC1VWCByZWxlYXNlcywgc3VjaCBhcyA5LjA1LAotICAgbWlnaHQgYWxzbyB3b3JrLCBidXQgb25s eSBpZiBidWlsdCBmb3IgdGhlIHNhbWUgaGFyZHdhcmUgZmFtaWx5IChlLmcuCi0gICBzNzAwKS4K LQotMy4yLjQuMi4gSFAtVVggMTAKLQotICAgWyBbMjM4XVRvcCBdIFsgWzIzOV1Db250ZW50cyBd IFsgWzI0MF1TZWN0aW9uIENvbnRlbnRzIF0gWyBbMjQxXU5leHQgXQotICAgWyBbMjQyXVByZXZp b3VzIF0KLQotICAgQmVnaW5uaW5nIGluIEhQLVVYIDEwLjEwLCBsaWJjdXJzZXMgaXMgbGlua2Vk IHRvIGxpYnhjdXJzZXMsIHRoZSBuZXcKLSAgIFVOSVg5NSAoWC9PcGVuKSB2ZXJzaW9uIG9mIGN1 cnNlcywgd2hpY2ggaGFzIHNvbWUgc2VyaW91cyBidWdzOyBzb21lCi0gICByb3V0aW5lcywgd2hl biBjYWxsZWQsIHdvdWxkIGhhbmcgYW5kIG5ldmVyIHJldHVybiwgc29tZSB3b3VsZCBkdW1wCi0g ICBjb3JlLiBFdmlkZW50bHkgbGlieGN1cnNlcyBjb250YWlucyBhIHNlbGVjdCgpIHJvdXRpbmUs IGFuZCB3aGVuZXZlcgotICAgQy1LZXJtaXQgY2FsbHMgd2hhdCBpdCB0aGlua3MgaXMgdGhlIHJl Z3VsYXIgKHNvY2tldHMpIHNlbGVjdCgpLCBpdAotICAgZ2V0cyB0aGUgY3Vyc2VzIG9uZSwgY2F1 c2luZyBhIHNlZ21lbnRhdGlvbiBmYXVsdC4gVGhlcmUgaXMgYSBwYXRjaCBmb3IKLSAgIHRoaXMg ZnJvbSBIUCwgUEhDT184MDg2LCAiczcwMF84MDAgMTAuMTAgbGliY3Vyc2VzIHBhdGNoIiwgInNo YXJlZCBsaWIKLSAgIGN1cnNlcyBwcm9ncmFtIGhhbmdzIG9uIDEwLjEwIiwgIjEwLjEwIGVuaGFu Y2VkIFgvT3BlbiBjdXJzZXMgY29yZQotICAgZHVtcHMgZHVlIHRvIHVzaW5nIHdyb25nIHNlbGVj dCBjYWxsIiwgOTYvMDgvMDIgKHlvdSBjYW4gdGVsbCBpZiB0aGUKLSAgIHBhdGNoIGlzIGluc3Rh bGxlZCB3aXRoICJ3aGF0IC91c3IvbGliL2xpYnhjdXJzZXMuMSI7IHRoZSB1bnBhdGNoZWQKLSAg IHZlcnNpb24gaXMgNzYuMjAsIHRoZSBwYXRjaGVkIG9uZSBpcyA3Ni4yMC4xLjIpLiBJdCBoYXMg YmVlbiB2ZXJpZmllZAotICAgdGhhdCBDLUtlcm1pdCB3b3JrcyBPSyB3aXRoIHRoZSBwYXRjaGVk IGxpYnJhcnksIGJ1dCByZXN1bHRzIGFyZSBub3QKLSAgIGRlZmluaXRlIGZvciBIUC1VWCAxMC4y MCBvciBoaWdoZXIuCi0KLSAgIFRvIGVuc3VyZSB0aGF0IEMtS2VybWl0IHdvcmtzIGV2ZW4gb24g bm9uLXBhdGNoZWQgSFAtVVggMTAuMTAgc3lzdGVtcywKLSAgIHNlcGFyYXRlIG1ha2VmaWxlIGVu dHJpZXMgYXJlIHByb3ZpZGVkIGZvciBIUC1VWCAxMC4wMC8xMC4wMSwgMTAuMTAsCi0gICAxMC4y MCwgZXRjLCBpbiB3aGljaCB0aGUgZW50cmllcyBmb3IgMTAuMTAgYW5kIGFib3ZlIGxpbmsgd2l0 aAotICAgbGliSGN1cnNlcywgd2hpY2ggaXMgIkhQIGN1cnNlcyIsIHRoZSBvbmUgdGhhdCB3YXMg dXNlZCBpbiAxMC4wMC8xMC4wMS4KLSAgIEhQLVVYIDExLjIwIGFuZCBsYXRlciwgaG93ZXZlciwg bGluayB3aXRoIGxpYmN1cnNlcywgYXMgbGliSGN1cnNlcwotICAgZGlzYXBwZWFyZWQgaW4gMTEu MjAuCi0KLTMuMi40LjMuIEhQLVVYIDkKLQotICAgWyBbMjQzXVRvcCBdIFsgWzI0NF1Db250ZW50 cyBdIFsgWzI0NV1TZWN0aW9uIENvbnRlbnRzIF0gWyBbMjQ2XU5leHQgXQotICAgWyBbMjQ3XVBy ZXZpb3VzIF0KLQotICAgSFAtVVggOS4wMCBhbmQgOS4wMSBuZWVkIHBhdGNoIFBITkVfMTA1NzIg KG5vdGU6IHRoaXMgcmVwbGFjZXMKLSAgIFBITkVfMzY0MSkgZm9yIGhwdHQwLm8sIGFzaW8wLm8s IGFuZCB0dHljb21uLm8gaW4gbGliaHAtdXguYS4gQ29udGFjdAotICAgSGV3bGV0dCBQYWNrYXJk IGlmIHlvdSBuZWVkIHRoaXMgcGF0Y2guIFdpdGhvdXQgaXQsIHRoZSBkaWFsb3V0IGRldmljZQot ICAgKHR0eSkgd2lsbCBiZSBodW5nIGFmdGVyIGZpcnN0IHVzZTsgc3Vic2VxdWVudCBhdHRlbXB0 cyB0byB1c2Ugd2lsbAotICAgcmV0dXJuIGFuIGVycm9yIGxpa2UgImRldmljZSBidXN5Ii4gKFRo ZXJlIGFyZSBhbHNvIGVxdWl2YWxlbnQgcGF0Y2hlcwotICAgZm9yIHM3MDAgOS4wMyA5LjA1IDku MDcgKFBITkVfMTA1NzMpIGFuZCBzODAwIDkuMDAgOS4wNCAoUEhORV8xMDQxNikuCi0KLSAgIFdo ZW4gQy1LZXJtaXQgaXMgaW4gc2VydmVyIG1vZGUsIGl0IG1pZ2h0IGhhdmUgdHJvdWJsZSBleGVj dXRpbmcgUkVNT1RFCi0gICBIT1NUIGNvbW1hbmRzLiBUaGlzIHByb2JsZW0gaGFwcGVucyB1bmRl ciBIUC1VWCA5LjAwIChNb3Rvcm9sYSkgYW5kCi0gICBIUC1VWCA5LjAxIChSSVNDKSBJRiB0aGUg Qy1TaGVsbCBpcyB0aGUgbG9naW4gc2hlbGwgQU5EIHdpdGggdGhlCi0gICBDLVNoZWxsIFJldmlz aW9uIDcwLjE1LiBCZXN0IHRoaW5nIGlzIHRvIGluc3RhbGwgSFAncyBQYXRjaCBQSENPXzQ5MTkK LSAgIGZvciBTZXJpZXMgMzAwLzQwMCBhbmQgUEhDT181MDE1IGZvciB0aGUgU2VyaWVzIDcwMC84 MDAuIFBIQ09fNTAxNSBpcwotICAgY2FsbGVkICJzNzAwXzgwMCA5LlggY3VtdWxhdGl2ZSBjc2go MSkgcGF0Y2ggd2l0aCBtZW1vcnkgbGVhayBmaXgiCi0gICB3aGljaCB3b3JrcyBmb3IgSFAtVVgg OS4wMCwgOS4wMSwgOS4wMywgOS4wNCwgOS4wNSBhbmQgOS4wNy4gQXQgbGVhc3QKLSAgIHlvdSBu ZWVkIEMtU2hlbGwgUmV2aXNpb24gNzIuMTIhCi0KLSAgIEMtS2VybWl0IHdvcmtzIGZpbmUgLS0g aW5jbHVkaW5nIGl0cyBjdXJzZXMtYmFzZWQgZmlsZS10cmFuc2ZlciBkaXNwbGF5Ci0gICAtLSBv biB0aGUgY29uc29sZSB0ZXJtaW5hbCwgaW4gYSByZW1vdGUgc2Vzc2lvbiAoZS5nLiB3aGVuIGxv Z2dlZCBpbiB0bwotICAgdGhlIEhQIDkwMDAgb24gYSB0ZXJtaW5hbCBwb3J0IG9yIHdoZW4gdGVs bmV0dGVkIG9yIHJsb2dpbidkKSwgYW5kIGluCi0gICBhbiBIUC1WVUUgaHB0ZXJtIHdpbmRvdyBv ciBhbiB4dGVybSB3aW5kb3cuCi0KLTMuMi40LjQuIEhQLVVYIDgKLQotICAgWyBbMjQ4XVRvcCBd IFsgWzI0OV1Db250ZW50cyBdIFsgWzI1MF1TZWN0aW9uIENvbnRlbnRzIF0gWyBbMjUxXU5leHQg XQotICAgWyBbMjUyXVByZXZpb3VzIF0KLQotICAgVG8gbWFrZSBDLUtlcm1pdCB3b3JrIG9uIEhQ LVVYIDguMDUgb24gYSBtb2RlbCA3MjAsIG9idGFpbiBhbmQgaW5zdGFsbAotICAgSFAtVVggcGF0 Y2ggUEhORV8wODk5LiBUaGlzIHBhdGNoIGRlYWxzIHdpdGggYSBsb3Qgb2YgZHJpdmVyIGlzc3Vl cywKLSAgIHBhcnRpY3VsYXJseSByZWxhdGVkIHRvIGNvbW11bmljYXRpb24gYXQgaGlnaGVyIHNw ZWVkcy4KLQotICAgT25lIHVzZXIgcmVwb3J0czoKLQotICAgICBPbiBIUC1VWCA4IERPTidUIGlu c3RhbGwgJ3R0eSBwYXRjaCcgUEhLTF80NjU2LCBpbnN0YWxsIFBIS0xfMzA0NwotICAgICBpbnN0 ZWFkISBZZXN0ZXJkYXkgSSB0cmllZCB0aGlzIGxhdGVzdCB0dHkgcGF0Y2ggUEhLTF80NjU2IGFu ZCBoYWQKLSAgICAgdGVycmlibGUgcHJvYmxlbXMuIFRoaXMgcGF0Y2ggc2hvdWxkIGZpeCBSVFMv Q1RTIHByb2JsZW1zLiBXaXRoIHRleHQKLSAgICAgdHJhbnNmZXIgYWxsIGxvb2tzIG5pY2UuIEJ1 dCB3aGVuIEkgc3dpdGNoZWQgb3ZlciB0byBiaW5hcnkgZmlsZXMKLSAgICAgdGhlIHNlcmlhbCBp bnRlcmZhY2UgcmV0dXJuZWQgb25seSBydWJpc2ggdG8gQy1LZXJtaXQuIEFsbCBzb3J0cyBvZgot ICAgICBwcm90b2NvbCwgQ1JDIGFuZCBwYWNrZWQgZXJyb3JzIEkgaGFkLiBBZnRlciBzZXZlcmFs IHRlc3RzIGFuZCBhZnRlcgotICAgICB1bmluc3RhbGxpbmcgdGhhdCBwYXRjaCwgYWxsIHRyYW5z ZmVycyB3b3JrZWQgZmluZS4gTUIncyBvZiBkYXRhCi0gICAgIHdpdGhvdXQgYW55IGVycm9ycy4g U28ga2VlcCB5b3VyIGZpbmdlcnMgYXdheSBmcm9tIHRoYXQgcGF0Y2guIElmCi0gICAgIGFueWJv ZHkgbmVlZHMgdGhlIFBIS0xfMzA0NyBwYXRjaCBJIGhhdmUgaXQgaGVyZS4gSXQgaXMgbm8gbG9u Z2VyCi0gICAgIGF2YWlsYWJsZSBmcm9tIEhQJ3MgcGF0Y2ggYmFzZS4KLQotMy4yLjQuNS4gSFAt VVggNyBhbmQgRWFybGllcgotCi0gICBbIFsyNTNdVG9wIF0gWyBbMjU0XUNvbnRlbnRzIF0gWyBb MjU1XVNlY3Rpb24gQ29udGVudHMgXSBbCi0gICBbMjU2XVByZXZpb3VzIF0KLQotICAgV2hlbiB0 cmFuc2ZlcnJpbmcgZmlsZXMgaW50byBIUC1VWCA1IG9yIDYgb3ZlciBhIFRlbG5ldCBjb25uZWN0 aW9uLCB5b3UKLSAgIG11c3Qgbm90IHVzZSBzdHJlYW1pbmcsIGFuZCB5b3UgbXVzdCBub3QgdXNl IGEgcGFja2V0IGxlbmd0aCBncmVhdGVyCi0gICB0aGFuIDUxMi4gSG93ZXZlciwgeW91IGNhbiB1 c2Ugc3RyZWFtaW5nIGFuZCBsb25nZXIgcGFja2V0cyB3aGVuCi0gICBzZW5kaW5nIGZpbGVzIGZy b20gSFAtVVggb24gYSBUZWxuZXQgY29ubmVjdGlvbi4gSW4gQy1LZXJtaXQgOC4wLCB0aGUKLSAg IGRlZmF1bHQgcmVjZWl2ZSBwYWNrZXQgbGVuZ3RoIGZvciBIUC1VWCA1IGFuZCA2IHdhcyBjaGFu Z2VkIHRvIDUwMCAoYnV0Ci0gICB5b3UgY2FuIHN0aWxsIGluY3JlYXNlIGl0IHdpdGggU0VUIFJF Q0VJVkUgUEFDS0VULUxFTkdUSCBpZiB5b3Ugd2lzaCwKLSAgIGUuZy4gZm9yIG5vbi1UZWxuZXQg Y29ubmVjdGlvbnMpLiBEaXNhYmxlIHN0cmVhbWluZyB3aXRoIFNFVCBTVFJFQU1JTkcKLSAgIE9G Ri4KLQotICAgVGhlIEhQLVVYIDUuMDAgdmVyc2lvbiBvZiBDLUtlcm1pdCBkb2VzIG5vdCBpbmNs dWRlIHRoZSBmdWxsc2NyZWVuCi0gICBmaWxlLXRyYW5zZmVyIGJlY2F1c2Ugb2YgcHJvYmxlbXMg d2l0aCB0aGUgY3Vyc2VzIGxpYnJhcnkuCi0KLSAgIElmIEhQLVVYIDUuMjEgd2l0aCBXb2xsb25n b25nIFRDUC9JUCBpcyBvbiB0aGUgcmVtb3RlIGVuZCBvZiBhIFRlbG5ldAotICAgY29ubmVjdGlv biwgc3RyZWFtaW5nIHRyYW5zZmVycyB0byBIUC1VWCBpbnZhcmlhYmx5IGZhaWwuIFdvcmthcm91 bmQ6Ci0gICBTRVQgU1RSRUFNSU5HIE9GRi4gUGFja2V0cyBsb25nZXIgdGhhbiBhYm91dCAxMDAw IHNob3VsZCBub3QgYmUgdXNlZC4KLSAgIFRyYW5zZmVycyBmcm9tIHRoZXNlIHN5c3RlbXMsIGhv d2V2ZXIsIGNhbiB1c2Ugc3RyZWFtaW5nIGFuZC9vciBsb25nZXIKLSAgIHBhY2tldHMuCi0KLSAg IFJlcG9ydGVkbHksICJbdGhlcmUgaXNdIGEgYnVnIGluIEMtS2VybWl0IHVzaW5nIEhQLVVYIHZl cnNpb24gNS4yMSBvbgotICAgdGhlIEhQLTkwMDAgc2VyaWVzIDUwMCBjb21wdXRlcnMuIEl0IG9u bHkgb2NjdXJzIHdoZW4gdGhlIGNvbnRyb2xsaW5nCi0gICB0ZXJtaW5hbCBpcyB1c2luZyBhbiBI UC0yNzE0MCBzaXgtcG9ydCBtb2RlbSBtdXguIFRoZSBwcm9ibGVtIGlzIG5vdAotICAgcHJlc2Vu dCBpZiB0aGUgY29udHJvbGxpbmcgdGVybWluYWwgaXMgbG9nZ2VkIGludG8gYW4gSFAtMjcxMzAK LSAgIGVpZ2h0LXBvcnQgbXV4LiBUaGUgc3ltcHRvbSBpcyB0aGF0IGp1c3QgYWZ0ZXIgZGlhbGlu ZyBzdWNjZXNzZnVsbHkgYW5kCi0gICBjb25uZWN0aW5nIEtlcm1pdCBsb2NrcyB1cCBhbmQgdGhl IHBvcnQgaXMgdW51c2FibGUgdW50aWwgYm90aCBmb3JrcyBvZgotICAgS2VybWl0IGFuZCB0aGUg bG9naW4gc2hlbGwgYXJlIGtpbGxlZC4iIChUaGlzIHJlcG9ydCBwcmVkYXRlcyBDLUtlcm1pdAot ICAgNi4wIGFuZCBtaWdodCBubyBsb25nZXIgYXBwbHkuKQotCi0zLjIuNS4gSFAtVVggYW5kIFgu MjUKLQotICAgWyBbMjU3XVRvcCBdIFsgWzI1OF1Db250ZW50cyBdIFsgWzI1OV1TZWN0aW9uIENv bnRlbnRzIF0gWwotICAgWzI2MF1QcmV2aW91cyBdCi0KLSAgIEFsdGhvdWdoIEMtS2VybWl0IHBy ZXNlbnRseSBkb2VzIG5vdCBpbmNsdWRlIGJ1aWx0LWluIHN1cHBvcnQgZm9yIEhQLVVYCi0gICBY LjI1IChhcyBpdCBkb2VzIGZvciB0aGUgU3VuIGFuZCBJQk0gWC4yNSBwcm9kdWN0cyksIGl0IGNh biBzdGlsbCBiZQotICAgdXNlZCB0byBtYWtlIFguMjUgY29ubmVjdGlvbnMgYXMgZm9sbG93czog c3RhcnQgS2VybWl0IGFuZCB0aGVuIHRlbG5ldAotICAgdG8gbG9jYWxob3N0LiBBZnRlciBsb2dn aW5nIGJhY2sgaW4sIHN0YXJ0IHBhZGVtIGFzIHlvdSB3b3VsZCBub3JtYWxseQotICAgZG8gdG8g Y29ubmVjdCBvdmVyIFguMjUuIFBhZGVtIGFjdHMgYXMgYSBwaXBlIGJldHdlZW4gS2VybWl0IGFu ZCBYLjI1LgotICAgSW4gQy1LZXJtaXQgNy4wLCB5b3UgbWlnaHQgYWxzbyBiZSBhYmxlIHRvIGF2 b2lkIHRoZSAidGVsbmV0IGxvY2FsaG9zdCIKLSAgIHN0ZXAgYnkgdXNpbmc6Ci0KLSAgQy1LZXJt aXQ+IHB0eSBwYWRlbSBhZGRyZXNzCi0KLSAgIFRoaXMgd29ya3MgaWYgcGFkZW0gdXNlcyBzdGFu ZGFyZCBpL28gKHdobyBrbm93cz8pLgotCi0zLjMuIEMtS0VSTUlUIEFORCBMSU5VWAotCi0gICBb IFsyNjFdVG9wIF0gWyBbMjYyXUNvbnRlbnRzIF0gWyBbMjYzXVNlY3Rpb24gQ29udGVudHMgXSBb IFsyNjRdTmV4dCBdCi0gICBbIFsyNjVdUHJldmlvdXMgXQotCi0gICBTRUNUSU9OIENPTlRFTlRT Ci0KLSAgMy4zLjEuIFsyNjZdUHJvYmxlbXMgQnVpbGRpbmcgQy1LZXJtaXQgZm9yIExpbnV4Ci0g IDMuMy4yLiBbMjY3XVByb2JsZW1zIHdpdGggU2VyaWFsIERldmljZXMgaW4gTGludXgKLSAgMy4z LjMuIFsyNjhdVGVybWluYWwgRW11bGF0aW9uIGluIExpbnV4Ci0gIDMuMy40LiBbMjY5XURhdGVz IGFuZCBUaW1lcwotICAzLjMuNS4gWzI3MF1TdGFydHVwIEVycm9ycwotICAzLjMuNi4gWzI3MV1U aGUgRnVsbHNjcmVlbiBGaWxlIFRyYW5zZmVyIERpc3BsYXkKLQotICAgICAoQXVndXN0IDIwMTAp IFJlcG9ydGVkbHkgQy1LZXJtaXQgcGFja2FnZXMgZm9yIGNlcnRhaW4gTGludXgKLSAgICAgZGlz dHJpYnV0aW9ucyBzdWNoIGFzIENlbnRvcyBhbmQgVWJ1bnR1IGhhdmUgY2VydGFpbiBmZWF0dXJl cwotICAgICBkaXNhYmxlZCwgZm9yIGV4YW1wbGUgdGhlIFNTSCBjb21tYW5kLCBTRVQgSE9TVCBQ VFkgL1NTSCwgYW5kCi0gICAgIHBlcmhhcHMgYW55dGhpbmcgZWxzZSB0byBkbyB3aXRoIFNTSCBh bmQvb3IgcHNldWRvdGVybWluYWxzIGFuZCB3aG8KLSAgICAga25vd3Mgd2hhdCBlbHNlLiBJZiB5 b3UgZG93bmxvYWQgdGhlIHJlZ3VsYXIgcGFja2FnZSAoInRhcmJhbGwiKQotICAgICBmcm9tIHRo ZSBLZXJtaXQgUHJvamVjdCBhbmQgYnVpbGQgZnJvbSBpdCAoIm1ha2UgbGludXgiKSwgZXZlcnl0 aGluZwotICAgICBpcyBmaW5lLgotCi0gICAgIEMtS2VybWl0IGluIFVidW50dSAxMC4wNCBhbmQg OS4xMCB3YXMgcmVwb3J0ZWQgc2xvdyB0byBzdGFydCBiZWNhdXNlCi0gICAgIGl0IHdhcyB0cnlp bmcgdG8gcmVzb2x2ZSB0aGUgSVAgYWRkcmVzcyAyNTUuMjU1LjI1NS4yNTUuIExhdGVyLCBhbHNv Ci0gICAgIGluIHJlY2VudCBEZWJpYW4gdmVyc2lvbnMuIFRoZSBmb2xsb3dpbmcgaXMgc2VlbiBp biB0aGUgc3RyYWNlOgotCi13cml0ZSgzLCAiUkVTT0xWRS1BRERSRVNTIDI1NS4yNTUuMjU1LjI1 NVxuIiwgMzIpCi0KLSAgICAgVGhpcyBpcyBub3QgS2VybWl0IFByb2plY3QgY29kZS4gVHVybnMg b3V0IHRvIGJlIHNvbWV0aGluZyBpbgotICAgICBnbGliYydzIHJlc29sdmVyLCBhbmQgY2FuIGJl IGZpeGVkIGJ5IGNoYW5naW5nIC9ldGMvbnNzd2l0Y2guY29uZiwKLSAgICAgYnV0IGl0IG1pZ2h0 IGJyZWFrIG90aGVyIHNvZnR3YXJlLCBzdWNoIGFzIFsyNzJdQXZhaGkgb3IgYW55dGhpbmcKLSAg ICAgKHN1Y2ggYXMgR25vbWUsIEphdmEsIG9yIEN1cHMpIHRoYXQgZGVwZW5kcyBvbiBpdC4gSSdt IG5vdCBzdXJlCi0gICAgIHdoZXJlIGl0IGhhcHBlbnM7IEkgZG9uJ3QgdGhpbmsgS2VybWl0IHRy aWVzIHRvIGdldCBpdHMgSVAgYWRkcmVzcwotICAgICBhdCBzdGFydHVwIHRpbWUsIG9ubHkgd2hl biBpdCdzIG5lZWRlZCBvciBhc2tlZCBmb3IsIGUuZy4gd2hlbgotICAgICBtYWtpbmcgYSBjb25u ZWN0aW9uIG9yIGV2YWx1YXRpbmcgXHYoaXBhZGRyZXNzKS4KLQotICAgUkVGRVJFTkNFUwotCi0g ICBGb3IgZnVydGhlciBpbmZvcm1hdGlvbiwgcmVhZCB0aGUgWzI3M11jb21wLm9zLmxpbnV4Lm1p c2MsCi0gICBbMjc0XWNvbXAub3MubGludXguYW5zd2VycywgYW5kIG90aGVyIExpbnV4LW9yaWVu dGVkIG5ld3Nncm91cHMsIGFuZAotICAgc2VlOgotCi0gICBUaGUgTGludXggRG9jdW1lbnQgUHJv amVjdCAoTERQKQotICAgICAgICAgIFsyNzVdaHR0cDovL3d3dy50bGRwLm9yZy8KLQotICAgVGhl IExpbnV4IEZBUQotICAgICAgICAgIFsyNzZdaHR0cDovL3d3dy50bGRwLm9yZy9GQVEvTGludXgt RkFRLmh0bWwKLQotICAgVGhlIExpbnV4IEhPV1RPcyAoZXNwZWNpYWxseSB0aGUgU2VyaWFsIEhP V1RPKQotCi0gICAgIFsyNzddaHR0cDovL3d3dy50bGRwLm9yZy9IT1dUTy9TZXJpYWwtSE9XVE8u aHRtbAotCi0gICAgIFsyNzhdaHR0cDovL3RsZHAub3JnL0hPV1RPL01vZGVtLUhPV1RPLmh0bWwK LQotICAgICBbMjc5XWZ0cDovL3N1bnNpdGUudW5jLmVkdS9wdWIvTGludXgvZG9jcy9IT1dUTwot Ci0gICAgIFsyODBdZnRwOi8vdHN4LTExLm1pdC5lZHUvcHViL2xpbnV4L2RvY3MvSE9XVE8KLQot ICAgICBbMjgxXWh0dHA6Ly93d3cudGxkcC5vcmcvSE9XVE8vCi0KLSAgICAgWzI4Ml1odHRwOi8v d3d3LnRsZHAub3JnL2htaXJyb3JzLmh0bWwKLQotICAgTGludXggVmVuZG9yIFRlY2ggU3VwcG9y dCBQYWdlczoKLQotICAgICBbMjgzXWh0dHA6Ly93d3cucmVkaGF0LmNvbS9hcHBzL3N1cHBvcnQv Ci0KLSAgICAgWzI4NF1odHRwOi8vd3d3LmRlYmlhbi5vcmcvc3VwcG9ydAotCi0gICAgIFsyODVd aHR0cDovL3d3dy5zbGFja3dhcmUuY29tL3N1cHBvcnQvCi0KLSAgICAgWzI4Nl1odHRwOi8vd3d3 LmNhbGRlcmEuY29tL3N1cHBvcnQvCi0KLSAgICAgWzI4N11TVVNFIExpbnV4IFN1cHBvcnQKLQot ICAgICBbMjg4XWh0dHA6Ly93d3cubWFuZHJha2UuY29tL3N1cHBvcnQvCi0KLSAgICAgWzI4OV1o dHRwOi8vd3d3LnR1cmJvbGludXguY29tL3N1cHBvcnQvCi0KLSAgIExpbnV4IFdpbm1vZGVtIFN1 cHBvcnQKLSAgICAgICAgICBbMjkwXWh0dHA6Ly93d3cubGlubW9kZW1zLm9yZy8KLQotICAgQWxz byBzZWUgZ2VuZXJhbCBjb21tZW50cyBvbiBQQy1iYXNlZCBVbml4ZXMgaW4gWzI5MV1TZWN0aW9u IDMuMC4KLQotICAgV2hhdCBMaW51eCB2ZXJzaW9uIGlzIGl0PyAtLSAidW5hbWUgLWEiIHN1cHBs aWVzIG9ubHkga2VybmVsCi0gICBpbmZvcm1hdGlvbiwgYnV0IHRoZXNlIGRheXMgaXQncyB0aGUg ZGlzdHJpYnV0aW9uIHRoYXQgbWF0dGVyczogUmVkIEhhdAotICAgNy4zLCBEZWJpYW4gMi4yLCBT bGFja3dhcmUgOC4wLCBldGMuIFVuZm9ydHVuYXRlbHkgdGhlcmUncyBubwotICAgY29uc2lzdGVu dCB3YXkgdG8gZ2V0IHRoZSBkaXN0cmlidXRpb24gdmVyc2lvbi4gVXN1YWxseSBpdCdzIGluIGEK LSAgIGRpc3RyaWJ1dGlvbi1zcGVjaWZpYyBmaWxlOgotCi0gICAgIFJlZCBIYXQ6ICAgL2V0Yy9p c3N1ZSBvciAvZXRjL3JlZGhhdC1yZWxlYXNlCi0gICAgIERlYmlhbjogICAgL2V0Yy9kZWJpYW5f dmVyc2lvbgotICAgICBTbGFja3dhcmU6IC9ldGMvc2xhY2t3YXJlLXZlcnNpb24gKGF0IGxlYXN0 IGluIGxhdGVyIHZlcnNpb25zKQotCi0gICBEaWQgeW91IGtub3c6IERFQ25ldCBpcyBhdmFpbGFi bGUgZm9yIExpbnV4PyBTZWU6Ci0KLSAgWzI5Ml1odHRwOi8vbGludXguZHJlYW10aW1lLm9yZy9k ZWNuZXQvCi0KLSAgIChCdXQgdGhlcmUgaXMgbm8gc3VwcG9ydCBmb3IgaXQgaW4gQy1LZXJtaXQg LS0gYW55Ym9keSBpbnRlcmVzdGVkIGluCi0gICBhZGRpbmcgaXQsIHBsZWFzZSBbMjkzXWxldCBt ZSBrbm93KS4KLQotICAgQmVmb3JlIHByb2NlZWRpbmcsIGxldCdzIGhhbmRsZSB0aGUgc29tZSBv ZiB0aGUgbW9zdCBmcmVxdWVudGx5IGFza2VkCi0gICBxdWVzdGlvbiBpbiB0aGUgTGludXggbmV3 c2dyb3VwczoKLQotICAgIDEuIE5laXRoZXIgQy1LZXJtaXQgbm9yIGFueSBvdGhlciBMaW51eCBh cHBsaWNhdGlvbiBjYW4gdXNlIFdpbm1vZGVtcywKLSAgICAgICBleGNlcHQgaW4gdGhlIFsyOTRd cmFyZSBjYXNlcyB3aGVyZSBMaW51eCBkcml2ZXJzIGhhdmUgYmVlbiB3cml0dGVuCi0gICAgICAg Zm9yIHRoZW0uIFNlZSBbMjk1XVNlY3Rpb24gMy4wLjIgZm9yIGRldGFpbHMuCi0gICAgMi4gIldo eSBkb2VzIGl0IHRha2Ugc3VjaCBhIGxvbmcgdGltZSB0byBtYWtlIGEgdGVsbmV0IGNvbm5lY3Rp b24gdG8KLSAgICAgICAob3IgZnJvbSkgbXkgTGludXggUEM/IiAodGhpcyBhcHBsaWVzIHRvIEMt S2VybWl0IGFuZCB0byByZWd1bGFyCi0gICAgICAgVGVsbmV0KS4gTW9zdCB0ZWxuZXQgc2VydmVy cyB0aGVzZSBkYXlzIHBlcmZvcm0gcmV2ZXJzZSBETlMgbG9va3VwcwotICAgICAgIG9uIHRoZSBj bGllbnQgKGZvciBzZWN1cml0eSBhbmQvb3IgbG9nZ2luZyByZWFzb25zKS4gSWYgdGhlIFRlbG5l dAotICAgICAgIGNsaWVudCdzIGFkZHJlc3MgY2Fubm90IGJlIGZvdW5kIGJ5IHRoZSBzZXJ2ZXIn cyBsb2NhbCBETlMgc2VydmVyLAotICAgICAgIHRoZSBETlMgcmVxdWVzdCBnb2VzIG91dCB0byB0 aGUgSW50ZXJuZXQgYXQgbGFyZ2UsIGFuZCB0aGlzIGNhbgotICAgICAgIHRha2UgcXVpdGUgc29t ZSB0aW1lLiBUaGUgc29sdXRpb24gdG8gdGhpcyBwcm9ibGVtIGlzIHRvIG1ha2Ugc3VyZQotICAg ICAgIHRoYXQgYm90aCBjbGllbnQgYW5kIGhvc3QgYXJlIHJlZ2lzdGVyZWQgaW4gRE5TLCBhbmQg dGhhdCB0aGUKLSAgICAgICByZWdpc3RyYXRpb25zIGFyZSBleHBvcnRlZC4gQy1LZXJtaXQgaXRz ZWxmIHBlcmZvcm1zIHJldmVyc2UgRE5TCi0gICAgICAgbG9va3VwcyB1bmxlc3MgeW91IHRlbGwg aXQgbm90IHRvOyB0aGlzIGlzIHRvIGFsbG93IEMtS2VybWl0IHRvIGxldAotICAgICAgIHlvdSBr bm93IHdoaWNoIGhvc3QgaXQgaXMgYWN0dWFsbHkgY29ubmVjdGVkIHRvIGluIGNhc2UgeW91IGhh dmUKLSAgICAgICBtYWRlIGEgY29ubmVjdGlvbiB0byBhIGhvc3QgcG9vbCAobXVsdGlob21lZCBo b3N0KS4gWW91IGNhbiBkaXNhYmxlCi0gICAgICAgQy1LZXJtaXQncyByZXZlcnNlIEROUyBsb29r dXAgd2l0aCBTRVQgVENQIFJFVkVSU0UtRE5TLUxPT0tVUCBPRkYuCi0gICAgMy4gKEFueSBxdWVz dGlvbiB0aGF0IGhhcyB0aGUgd29yZCAiVGVsbmV0IiBpbiBpdC4uLikgVGhlIGtuZWUtamVyawot ICAgICAgIHJlYWN0aW9uIGlzICJkb24ndCB1c2UgVGVsbmV0LCB1c2UgU1NIISIgVGhlcmUncyBu b3RoaW5nIHdyb25nIHdpdGgKLSAgICAgICBUZWxuZXQuIEluIGZhY3QgaXQncyBmYXIgc3VwZXJp b3IgdG8gU1NIIGFzIGEgcHJvdG9jb2wgaW4gdGVybXMgb2YKLSAgICAgICBmZWF0dXJlcyBhbmQg ZXh0ZW5zaWJpbGl0eSwgbm90IHRvIG1lbnRpb24gcGxhdGZvcm0gbmV1dHJhbGl0eS4gVGhlCi0g ICAgICAgaXNzdWUgbHVya2luZyBiZWhpbmQgdGhlIGtuZWUtamVyayByZWFjdGlvbiBpcyBzZWN1 cml0eS4gU1NIIGlzCi0gICAgICAgdGhvdWdodCB0byBiZSBzZWN1cmUsIHdoZXJlYXMgVGVsbmV0 IGlzIHRob3VnaHQgdG8gYmUgaW5zZWN1cmUuCi0gICAgICAgVGhpcyBpcyB0cnVlIGZvciBjbGVh ci10ZXh0IFRlbG5ldCAoYmVjYXVzZSBwYXNzd29yZHMgdHJhdmVsIGluIHRoZQotICAgICAgIGNs ZWFyIGFjcm9zcyB0aGUgbmV0d29yayksIGJ1dCBhcHBhcmVudGx5IGZldyBwZW9wbGUgcmVhbGl6 ZSB0aGF0Ci0gICAgICAgWzI5Nl1zZWN1cmUgVGVsbmV0IGNsaWVudHMgYW5kIHNlcnZlcnMgaGF2 ZSBiZWVuIGF2YWlsYWJsZSBmb3IKLSAgICAgICB5ZWFycywgYW5kIHRoZXNlIGFyZSBtb3JlIHNl Y3VyZSB0aGFuIFNTSCAoZm9yIHJlYXNvbnMgZXhwbGFpbmVkCi0gICAgICAgWzI5N11IRVJFKS4K LSAgICA0LiAoQW55IHF1ZXN0aW9uIHRoYXQgaGFzIHRoZSB3b3JkICJGVFAiIGluIGl0Li4uKSBU aGUga25lZS1qZXJrCi0gICAgICAgcmVhY3Rpb24gYmVpbmcgIkRvbid0IHVzZSBGVFAsIHVzZSBT Q1AhIiAob3IgU0ZUUCkuIFNhbWUgYW5zd2VyIGFzCi0gICAgICAgYWJvdmUsIGJ1dCBtb3Jlc28u IFNDUCBhbmQgU0ZUUCBhcmUgbm90IG9ubHkgbm90IHBsYXRmb3JtIG5ldXRyYWwsCi0gICAgICAg dGhleSdyZSBkaXZlcnNpdHktaG9zdGlsZS4gVGhleSB0cmFuc2ZlciBmaWxlcyBvbmx5IGluIGJp bmFyeSBtb2RlLAotICAgICAgIHdoaWNoIG1hbmdsZXMgdGV4dCBmaWxlcyBhY3Jvc3MgZGlmZmVy ZW50IHBsYXRmb3JtcywgdG8gdGhlIHNhbWUKLSAgICAgICBkZWdyZWUgdGhlIHBsYXRmb3JtJ3Mg dGV4dC1maWxlIHJlY29yZCBmb3JtYXQgYW5kIGNoYXJhY3RlciBzZXQKLSAgICAgICBkaWZmZXIu IEFuIGV4dHJlbWUgZXhhbXBsZSB3b3VsZCBiZSBhbiBWYXJpYWJsZS1CbG9jayBmb3JtYXQgRUJD RElDCi0gICAgICAgdGV4dCBmaWxlIG9uIGFuIElCTSBtYWluZnJhbWUsIGJpbmFyeSB0cmFuc2Zl ciBvZiB3aGljaCB0byBVbml4Ci0gICAgICAgd291bGQgZG8geW91IGxpdHRsZSBnb29kIGluZGVl ZC4gRlRQIHdhcyBkZXNpZ25lZCB3aXRoIGRpdmVyc2l0eSBpbgotICAgICAgIG1pbmQgYW5kIHNl Y3VyZSB2ZXJzaW9ucyBhcmUgYXZhaWxhYmxlLgotCi0zLjMuMS4gUHJvYmxlbXMgQnVpbGRpbmcg Qy1LZXJtaXQgZm9yIExpbnV4Ci0KLSAgIFsgWzI5OF1Ub3AgXSBbIFsyOTldQ29udGVudHMgXSBb IFszMDBdU2VjdGlvbiBDb250ZW50cyBdIFsgWzMwMV1OZXh0IF0KLQotICAgTW9kZXJuIExpbnV4 IGRpc3RyaWJ1dGlvbnMgbGlrZSBSZWQgSGF0IGdpdmUgeW91IGEgY2hvaWNlIGF0Ci0gICBpbnN0 YWxsYXRpb24gd2hldGhlciB0byBpbmNsdWRlICJkZXZlbG9wZXIgdG9vbHMiLiBPYnZpb3VzbHks IHlvdSBjYW4ndAotICAgYnVpbGQgQy1LZXJtaXQgb3IgYW55IG90aGVyIEMgcHJvZ3JhbSBmcm9t IHNvdXJjZSBjb2RlIGlmIHlvdSBoYXZlIG5vdAotICAgaW5zdGFsbGVkIHRoZSBkZXZlbG9wZXIg dG9vbHMuIEJ1dCB0byBjb25mdXNlIG1hdHRlcnMsIHlvdSBtaWdodCBhbHNvCi0gICBoYXZlIHRv IGNob29zZSAoc2VwYXJhdGVseSkgdG8gaW5zdGFsbCB0aGUgImN1cnNlcyIgb3IgIm5jdXJzZXMi Ci0gICB0ZXJtaW5hbCBjb250cm9sIGxpYnJhcnk7IHRodXMgaXQgaXMgcG9zc2libGUgdG8gaW5z dGFsbCB0aGUgQyBjb21waWxlcgotICAgYW5kIGxpbmtlciwgYnV0IG9taXQgdGhlIChuKWN1cnNl cyBsaWJyYXJ5IGFuZCBoZWFkZXJzLiBJZiBjdXJzZXMgaXMKLSAgIG5vdCBpbnN0YWxsZWQsIHlv dSB3aWxsIG5vdCBiZSBhYmxlIHRvIGJ1aWxkIGEgdmVyc2lvbiBvZiBDLUtlcm1pdCB0aGF0Ci0g ICBzdXBwb3J0cyB0aGUgZnVsbHNjcmVlbiBmaWxlLXRyYW5zZmVyIGRpc3BsYXksIGluIHdoaWNo IGNhc2UgeW91J2xsCi0gICBuZWVkIHRvIHVzZSB0aGUgImxpbnV4bmMiIG1ha2VmaWxlIHRhcmdl dCAobmMgPSBObyBDdXJzZXMpIG9yIGVsc2UKLSAgIGluc3RhbGwgbmN1cnNlcyBiZWZvcmUgYnVp bGRpbmcuCi0KLSAgIFRoZXJlIGFyZSBhbGwgc29ydHMgb2YgY29uZnVzaW5nIGlzc3VlcyBjYXVz ZWQgYnkgdGhlIG1hbnkgYW5kIHZhcmllZAotICAgTGludXggZGlzdHJpYnV0aW9ucy4gU29tZSBv ZiB0aGUgd29yc3QgaW52b2x2ZSB0aGUgY3Vyc2VzIGxpYnJhcnkgYW5kCi0gICBoZWFkZXIgZmls ZXM6IHdoZXJlIGFyZSB0aGV5LCB3aGF0IGFyZSB0aGV5IGNhbGxlZCwgd2hpY2ggb25lcyBhcmUg dGhleQotICAgcmVhbGx5PyBPdGhlciB2ZXhpbmcgcXVlc3Rpb25zIGludm9sdmUgbGliYzUgdnMg bGliYzYgdnMgZ2xpYmMgdnMKLSAgIGdsaWJjMiAoQyBsaWJyYXJpZXMpLCBnY2MgdnMgZWdjcyB2 cyBsY2MgKGNvbXBpbGVycyksIHBsdXMgdXNpbmcgb3IKLSAgIGF2b2lkaW5nIGZlYXR1cmVzIHRo YXQgd2VyZSBhZGRlZCBpbiBhIGNlcnRhaW4gdmVyc2lvbiBvZiBMaW51eCBvciBhCi0gICBsaWJy YXJ5IG9yIGEgZGlzdHJpYnV0aW9uLCBhbmQgYXJlIG5vdCBhdmFpbGFibGUgaW4gb3RoZXJzLiBB cyBvZgotICAgQy1LZXJtaXQgOC4wLCB0aGVzZSBxdWVzdGlvbnMgc2hvdWxkIGJlIHJlc29sdmVk IGJ5IHRoZSAibGludXgiCi0gICBtYWtlZmlsZSB0YXJnZXQgaXRzZWxmLCB3aGljaCBkb2VzIGEg Yml0IG9mIGxvb2tpbmcgYXJvdW5kIHRvIHNlZQotICAgd2hhdCdzIHdoYXQsIGFuZCB0aGVuIHNl dHMgdGhlIGFwcHJvcHJpYXRlIENGTEFHUy4KLQotMy4zLjIuIFByb2JsZW1zIHdpdGggU2VyaWFs IERldmljZXMgaW4gTGludXgKLQotICAgWyBbMzAyXVRvcCBdIFsgWzMwM11Db250ZW50cyBdIFsg WzMwNF1TZWN0aW9uIENvbnRlbnRzIF0gWyBbMzA1XU5leHQgXQotICAgWyBbMzA2XVByZXZpb3Vz IF0KLQotICAgICBBbHNvIHNlZTogIm1hbiBzZXRzZXJpYWwiLCAibWFuIGlycXR1bmUiLgotICAg ICBBbmQ6IFszMDddU2VjdGlvbnMgMy4wLCBbMzA4XTYsIFszMDldNywgYW5kIFszMTBdOCBvZiB0 aGlzIGRvY3VtZW50LgotCi0gICAgIE5PVEU6IFJlZCBIYXQgTGludXggNy4yIGFuZCBsYXRlciBp bmNsdWRlIGEgbmV3IEFQSSB0aGF0IGFsbG93cwotICAgICBzZXJpYWwtcG9ydCBhcmJpdHJhdGlv biBieSBub24tc2V0dWlkL2dpZCBwcm9ncmFtcy4gVGhpcyBBUEkgaGFzIG5vdAotICAgICB5ZXQg YmVlbiBhZGRlZCB0byBDLUtlcm1pdC4gSWYgQy1LZXJtaXQgaXMgdG8gYmUgdXNlZCBmb3IgZGlh bGluZwotICAgICBvdXQgb24gUmVkIEhhdCA3LjIgb3IgbGF0ZXIsIGl0IG11c3Qgc3RpbGwgYmUg aW5zdGFsbGVkIGFzIGRlc2NyaWJlZAotICAgICBpbiBpbiBTZWN0aW9ucyBbMzExXTEwIGFuZCBb MzEyXTExIG9mIHRoZSBbMzEzXUluc3RhbGxhdGlvbgotICAgICBJbnN0cnVjdGlvbnMuCi0KLSAg IERvbid0IGV4cGVjdCBpdCB0byBiZSBlYXN5LiBRdWVyaWVzIGxpa2UgdGhlIGZvbGxvd2luZyBh cmUgcG9zdGVkIHRvCi0gICB0aGUgTGludXggbmV3c2dyb3VwcyBhbG1vc3QgZGFpbHk6Ci0KLSAg ICAgUHJvYmxlbSBvZiBhIG1ham9yIGtpbmQgd2l0aCBteSBDb21wYXEgUHJlc2FyaW8gMTgwNSBp biB0aGUgc2Vuc2UKLSAgICAgdGhhdCB0aGUgcG5wZHVtcCBkb2Vzbid0IGZpbmQgdGhlIG1vZGVt IGFuZCB0aGUgY29uZmlndXJhdGlvbiB0ZWxscwotICAgICBtZSB0aGF0IHRoZSBtb2RlbSBpcyBi dXN5IHdoZW4gSSBzZXQgZXZlcnl0aGluZyBieSBoYW5kIQotCi0gICAgIEkgaGF2ZSA8c29tZSBy ZWNlbnQgU3VTRSBkaXN0cmlidXRpb24+LCBrZXJuZWwgMi4wLjM1LiBVc2luZyB0aGUKLSAgICAg Q29tcGFxIHRlbGxzIG1lIHRoYXQgdGhlIG1vZGVtICh3aGljaCBpcyBpbnRlcm5hbCkgaXMgb24g Q09NMiwgd2l0aAotICAgICB0aGUgdXN1YWwgSVJRIGFuZCBwb3J0IG51bWJlcnMuIFJ1bm5pbmcg dmFyaW91cyBXaW5kb3dzIGRpYWdub3N0aWNzCi0gICAgIHNob3cgbWUgQVQtc3R5bGUgY29tbWFu ZHMgZXhjaGFuZ2VkIHNvIEkgaGF2ZSBubyByZWFzb24gdG8gYmVsaWV2ZQotICAgICB0aGF0IGl0 IGlzIGEgV2lubW9kZW0uIEFsc28sIHRoZSBkaWFnbm9zdGljcyB1bmRlciBXaW45OCB0ZWxsIG1l Ci0gICAgIHRoYXQgSSBhbSB0YWxraW5nIHRvIGFuIE5TIDE2NTUwQU4uCi0KLSAgIFtFZGl0b3In cyBub3RlOiBUaGlzIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gaXQgaXNuJ3QgYSBXaW5tb2Rl bS5dCi0KLSAgICAgVW5kZXIgTGludXgsIG5vIGpveSB0cnlpbmcgdG8gdGFsayB0byB0aGUgbW9k ZW0gb24gL2Rldi9jdWExIHdoZXRoZXIKLSAgICAgdmlhIG1pbmljb20sIGtwcHAsIG9yIGNoYXQ7 IGtwcHAgYXQgbGVhc3QgdGVsbHMgbWUgdGhhdCB0Y2dldGF0dHIoKQotICAgICBmYWlsZWQuCi0K LSAgICAgVXNhZ2Ugb2Ygc2V0c2VyaWFsOgotCi0gIHNldHNlcmlhbCAvZGV2L2N1YTEgcG9ydCAw eDJGOCBpcnEgMyBhdXRvY29uZmlnCi0gIHNldHNlcmlhbCAtZyAvZGV2L2N1YTEKLQotICAgICB0 ZWxscyBtZSB0aGF0IHRoZSB1YXJ0IGlzICd1bmtub3duJy4gSSBoYXZlIHRyaWVkIHNldHRpbmcg dGhlIFVBUlQKLSAgICAgbWFudWFsbHkgdmlhLiBzZXRzZXJpYWwgdG8gMTY1NTBBLCAxNjU1MCwg YW5kIHRoZSBvdGhlciBvbmUgKDg1NTA/KQotICAgICAoSSBkaWRuJ3QgdHJ5IDE2NTQwKS4gTm9u ZSBvZiB0aGVzZSBtYW51YWwgc2V0dGluZ3MgcmVzdWx0ZWQgaW4gYW55Ci0gICAgIHN1Y2Nlc3Mu Ci0KLSAgICAgQSBsb29rIGF0IHBhc3QgYXJ0aWNsZXMgbGVhZHMgbWUgdG8gaW52ZXN0aWdhdGUg UE5QIGlzc3VlcyBieQotICAgICBjYWxsaW5nIHBucGR1bXAgYnV0IHBucGR1bXAgcmV0dXJucyAi bm8gYm9hcmRzIGZvdW5kIi4gSSBoYXZlIGxvb2tlZAotICAgICBhcm91bmQgb24gbXkgQklPUyAo UGhvZW5peCkgYW5kIHRoZXJlIGlzIG5vdCBtdWNoIGV2aWRlbmNlIG9mIGl0Ci0gICAgIGJlaW5n IFBOUCBhd2FyZS4gSG93ZXZlciBmb3Igd2hhdCBpdCBjYWxscyAiU2VyaWFsIHBvcnQgQSIsIGl0 Ci0gICAgIG9mZmVycyBhIGNob2ljZSBvZiBBdXRvLCBEaXNhYmxlZCBvciBNYW51YWwgc2V0dGlu Z3MgKGN1cnJlbnRseSBzZXQKLSAgICAgdG8gQXV0byksIGJ1dCB1c2luZyB0aGUgQklPUyBpbnRl cmZhY2UgSSB0cmllZCB0byBjaGFuZ2UgdG8gJ21hbnVhbCcKLSAgICAgYW5kIHNhdyB0aGUgZGVm YXVsdCBzZXR0aW5ncyBvZmZlcmVkIHRvIGJlIHdlcmUgMHgzRjggYW5kIElSUSA0Ci0gICAgIChD T00xKS4gVGhlIEJJT1MgbWVudXMgZGlkIG5vdCBnaXZlIG1lIGFueSBjaGFuY2UgdG8gY29uZmln dXJlIENPTTIKLSAgICAgb3IgYW55ICJtb2RlbSIuIEkgZW5kZWQgdXAgbm90IHNhdmluZyBhbnkg QklPUyBjaGFuZ2VzIGluIHRoZSBjb3Vyc2UKLSAgICAgb2YgbXkgaW52ZXN0aWdhdGlvbnMuCi0K LSAgIFlvdSBjYW4gYWxzbyBmaW5kIG91dCBhIGZhaXIgYW1vdW50IGFib3V0IHlvdXIgUEMncyBo YXJkd2FyZQotICAgY29uZmlndXJhdGlvbiBpbiB0aGUgdGV4dCBmaWxlcyBpbiAvcHJvYywgZS5n LjoKLQotICAtci0tci0tci0tICAgIDEgcm9vdCAgICAgICAgICAgIDAgU2VwICA0IDE0OjAwIC9w cm9jL2RldmljZXMKLSAgLXItLXItLXItLSAgICAxIHJvb3QgICAgICAgICAgICAwIFNlcCAgNCAx NDowMCAvcHJvYy9pbnRlcnJ1cHRzCi0gIC1yLS1yLS1yLS0gICAgMSByb290ICAgICAgICAgICAg MCBTZXAgIDQgMTQ6MDAgL3Byb2MvaW9wb3J0cwotICAtci0tci0tci0tICAgIDEgcm9vdCAgICAg ICAgICAgIDAgU2VwICA0IDE0OjAwIC9wcm9jL3BjaQotCi0gICBGcm9tIHRoZSBkaXJlY3Rvcnkg bGlzdGluZyB0aGV5IGxvb2sgbGlrZSBlbXB0eSBmaWxlcywgYnV0IGluIGZhY3QgdGhleQotICAg YXJlIHRleHQgZmlsZXMgdGhhdCB5b3UgImNhdCI6Ci0KLSQgY2F0IC9wcm9jL3BjaQotICAgQnVz ICAwLCBkZXZpY2UgIDE0LCBmdW5jdGlvbiAgMDoKLSAgICAgU2VyaWFsIGNvbnRyb2xsZXI6IFVT IFJvYm90aWNzLzNDb20gNTZLIEZheE1vZGVtIE1vZGVsIDU2MTAgKHJldiAxKS4KLSAgICAgICBJ UlEgMTAuCi0gICAgICAgSS9PIGF0IDB4MTA1MCBbMHgxMDU3XS4KLQotJCBzZXRzZXJpYWwgLWcg L2Rldi90dHlTNAotL2Rldi90dHlTNCwgVUFSVDogMTY1NTBBLCBQb3J0OiAweDEwNTAsIElSUTog MTAKLQotJCBjYXQgL3Byb2MvaW9wb3J0cwotMTA1MC0xMDU3IDogVVMgUm9ib3RpY3MvM0NvbSA1 NksgRmF4TW9kZW0gTW9kZWwgNTYxMAotICAgMTA1MC0xMDU3IDogc2VyaWFsKGF1dG8pCi0KLSQg Y2F0IC9wcm9jL2ludGVycnVwdHMKLSAgICAgICAgICAgIENQVTAKLSAgIDA6ICAgIDcwMzc1MTUg ICAgICAgICAgWFQtUElDICB0aW1lcgotICAgMTogICAgICAgICAgMiAgICAgICAgICBYVC1QSUMg IGtleWJvYXJkCi0gICAyOiAgICAgICAgICAwICAgICAgICAgIFhULVBJQyAgY2FzY2FkZQotICAg NDogICAgICAgICAgMCAgICAgICAgICBYVC1QSUMgIHNlcmlhbAotICAgODogICAgICAgICAgMSAg ICAgICAgICBYVC1QSUMgIHJ0YwotICAgOTogICAgIDIwOTgxMSAgICAgICAgICBYVC1QSUMgIHVz Yi11aGNpLCBldGgwCi0gIDE0OiAgICAgMjgyMDE1ICAgICAgICAgIFhULVBJQyAgaWRlMAotICAx NTogICAgICAgICAgNiAgICAgICAgICBYVC1QSUMgIGlkZTEKLQotICAgV2F0Y2ggb3V0IGZvciBQ Q0ksIFBDTUNJQSBhbmQgUGx1Zy1uLVBsYXkgZGV2aWNlcywgV2lubW9kZW1zLCBhbmQgdGhlCi0g ICBsaWtlIChzZWUgY2F1dGlvbnMgaW4gWzMxNF1TZWN0aW9uIDMuMCBMaW51eCBzdXBwb3J0cyBQ bHVnLW4tUGxheQotICAgZGV2aWNlcyB0byBzb21lIGRlZ3JlZSB2aWEgdGhlIGlzYXBucCBhbmQg cG5wZHVtcCBwcm9ncmFtczsgcmVhZCB0aGUKLSAgIG1hbiBwYWdlcyBmb3IgdGhlbS4gKElmIHlv dSBkb24ndCBoYXZlIHRoZW0sIGxvb2sgb24geW91ciBpbnN0YWxsYXRpb24KLSAgIENEIGZvciBp c2FwbnB0b29sIG9yIGRvd25sb2FkIGl0IGZyb20gc3Vuc2l0ZSBvciBhIHN1bnNpdGUgbWlycm9y IG9yCi0gICBvdGhlciBwb2xpdGljYWxseSBjb3JyZWN0IGxvY2F0aW9uIGR1IGpvdXIpLgotCi0g ICBQQ0kgbW9kZW1zIGRvIG5vdCB1c2Ugc3RhbmRhcmQgQ09NIHBvcnQgYWRkcmVzc2VzLiBUaGUg SS9PIGFkZHJlc3MgYW5kCi0gICBJUlEgYXJlIGFzc2lnbmVkIGJ5IHRoZSBCSU9TLiBBbGwgeW91 IG5lZWQgdG8gZG8gdG8gZ2V0IG9uZSB3b3JraW5nLAotICAgZmluZCBvdXQgdGhlIEkvTyBhZGRy ZXNzIGFuZCBpbnRlcnJ1cHQgbnVtYmVyIHdpdGggKGFzIHJvb3QpICJsc3BjaSAtdgotICAgfCBt b3JlIiBhbmQgdGhlbiBnaXZlIHRoZSByZXN1bHRpbmcgYWRkcmVzcyBhbmQgaW50ZXJydXB0IG51 bWJlciB0bwotICAgc2V0c2VyaWFsLgotCi0gICBFdmVuIHdoZW4geW91IGhhdmUgYSByZWFsIHNl cmlhbCBwb3J0LCBhbHdheXMgYmUgd2FyeSBvZiBpbnRlcnJ1cHQKLSAgIGNvbmZsaWN0cyBhbmQg c2ltaWxhciBQQyBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGlzc3VlczogYSBQQyBpcyBub3QgYQot ICAgcmVhbCBjb21wdXRlciBsaWtlIG90aGVyIFVuaXggd29ya3N0YXRpb25zIC0tIGl0IGlzIGdl bmVyYWxseSBwaWVjZWQKLSAgIHRvZ2V0aGVyIGZyb20gd2hhdGV2ZXIgcmFuZG9tIGNvbXBvbmVu dHMgd2VyZSB0aGUgYmVzdCBiYXJnYWluIG9uIHRoZQotICAgY29tbW9kaXR5IG1hcmtldCB0aGUg d2VlayBpdCB3YXMgYnVpbHQuIE9uY2UgaXQncyBhc3NlbWJsZWQgYW5kIGJveGVkLAotICAgbm90 IGV2ZW4gdGhlIG1hbnVmYWN0dXJlciB3aWxsIHJlbWVtYmVyIHdoYXQgaXQncyBtYWRlIG9mIG9y IGhvdyBpdCB3YXMKLSAgIHB1dCB0b2dldGhlciBiZWNhdXNlIHRoZXkndmUgbW92ZWQgb24gdG8g YSBuZXcgbW9kZWwuIFRoZWlyIGpvYiBpcyB0bwotICAgZ2V0IGl0IChiYXJlbHkpIHdvcmtpbmcg d2l0aCBXaW5kb3dzOyBmb3IgTGludXggYW5kIG90aGVyIE9TJ3MgeW91IGFyZQotICAgb24geW91 ciBvd24uCi0KLSAgICJzZXQgbGluZSAvZGV2L21vZGVtIiBvciAic2V0IGxpbmUgL2Rldi90dHlT MiIsIGV0YywgcmVzdWx0cyBpbiBhbgotICAgZXJyb3IsICIvZGV2L21vZGVtIGlzIG5vdCBhIHR0 eSIuIENhdXNlIHVua25vd24sIGJ1dCBvYnZpb3VzbHkgYSBkcml2ZXIKLSAgIGlzc3VlLCBub3Qg YSBLZXJtaXQgb25lIChLZXJtaXQgdXNlcyAiaXNhdHR5KCkiIHRvIGNoZWNrIHRoYXQgdGhlCi0g ICBkZXZpY2UgaXMgYSB0dHksIHNvIGl0IGtub3dzIGl0IHdpbGwgYmUgYWJsZSB0byBpc3N1ZSBh bGwgdGhlCi0gICB0dHktcmVsYXRlZCBpb2N0bCdzIG9uIGl0LCBsaWtlIHNldHRpbmcgdGhlIHNw ZWVkICYgZmxvdyBjb250cm9sKS4gVHJ5Ci0gICBhIGRpZmZlcmVudCBuYW1lIChpLmUuIGRyaXZl cikgZm9yIHRoZSBzYW1lIHBvcnQsIGUuZy4gInNldCBsaW5lCi0gICAvZGV2L2N1YTIiIG9yIHdo YXRldmVyLgotCi0gICBUbyBmaW5kIHdoYXQgc2VyaWFsIHBvcnRzIHdlcmUgcmVnaXN0ZXJlZCBh dCB0aGUgbW9zdCByZWNlbnQgc3lzdGVtCi0gICBib290LCB0eXBlIChhcyByb290KTogImdyZXAg dHR5IC92YXIvbG9nL2RtZXNnIi4KLQotICAgInNldCBtb2RlbSB0eXBlIHh4eCIgKHdoZXJlIHh4 eCBpcyB0aGUgbmFtZSBvZiBhIG1vZGVtKSBmb2xsb3dlZCBieQotICAgInNldCBsaW5lIC9kZXYv bW9kZW0iIG9yICJzZXQKLSAgIGxpbmUgL2Rldi90dHlTMiIsIGV0YywgaGFuZ3MgKGJ1dCBjYW4g YmUgaW50ZXJydXB0ZWQgd2l0aCBDdHJsLUMpLgotICAgRXhwZXJpbWVudGF0aW9uIHNob3dzIHRo YXQgaWYgdGhlIG1vZGVtIGlzIGNvbmZpZ3VyZWQgdG8gYWx3YXlzIGFzc2VydAotICAgY2Fycmll ciAoJkMwKSB0aGUgc2FtZSBjb21tYW5kIGRvZXMgbm90IGhhbmcuIEFnYWluLCBhIGRyaXZlciBp c3N1ZS4KLSAgIFVzZSAvZGV2L2N1YTIgKG9yIHdoYXRldmVyKSBpbnN0ZWFkLiAoT3Igbm90IC0t IGhvcGVmdWxseSBub25lIG9mIHRoZXNlCi0gICBzeW1wdG9tcyBvY2N1cnMgaW4gQy1LZXJtaXQg Ny4wIG9yIGxhdGVyLikKLQotICAgInNldCBsaW5lIC9kZXYvY3VhMCIgcmVwb3J0cyAiRGV2aWNl IGlzIGJ1c3kiLCBidXQgInNldCBsaW5lCi0gICAvZGV2L3R0eVMwIiB3b3JrcyBPSy4KLQotICAg SW4gc2hvcnQ6IElmIHRoZSBjdWEgZGV2aWNlIGRvZXNuJ3Qgd29yaywgdHJ5IHRoZSBjb3JyZXNw b25kaW5nIHR0eVMKLSAgIGRldmljZS4gSWYgdGhlIHR0eVMgZGV2aWNlIGRvZXNuJ3Qgd29yaywg dHJ5IHRoZSBjb3JyZXNwb25kaW5nIGN1YQotICAgZGV2aWNlIC0tIGJ1dCBub3RlIHRoYXQgTGlu dXggZGV2ZWxvcGVycyBkbyBub3QgcmVjb21tZW5kIHRoaXMsIGFuZCBhcmUKLSAgIHBoYXNpbmcg b3V0IHRoZSBjdWEgZGV2aWNlcy4gRnJvbSAvdXNyL2RvYy9mYXEvaG93dG8vU2VyaWFsLUhPV1RP OgotCi0gICAxMi40LiBXaGF0J3MgVGhlIFJlYWwgRGlmZmVyZW5jZSBCZXR3ZWVuIHRoZSAvZGV2 L2N1YU4gQW5kIC9kZXYvdHR5U04KLSAgICAgICAgICBEZXZpY2VzPwotICAgICAgICAgIFRoZSBv bmx5IGRpZmZlcmVuY2UgaXMgdGhlIHdheSB0aGF0IHRoZSBkZXZpY2VzIGFyZSBvcGVuZWQuIFRo ZQotICAgICAgICAgIGRpYWxpbiBkZXZpY2VzIC9kZXYvdHR5U04gYXJlIG9wZW5lZCBpbiBibG9j a2luZyBtb2RlLCB1bnRpbCBDRAotICAgICAgICAgIGlzIGFzc2VydGVkIChpZSBzb21lb25lIGNv bm5lY3RzKS4gU28sIHdoZW4gc29tZW9uZSB3YW50cyB0byB1c2UKLSAgICAgICAgICB0aGUgL2Rl di9jdWFOIGRldmljZSwgdGhlcmUgaXMgbm8gY29uZmxpY3Qgd2l0aCBhIHByb2dyYW0KLSAgICAg ICAgICB3YXRjaGluZyB0aGUgL2Rldi90dHlTTiBkZXZpY2UgKHVubGVzcyBzb21lb25lIGlzIGNv bm5lY3RlZCBvZgotICAgICAgICAgIGNvdXJzZSkuIFRoZSBtdWx0aXBsZSAvZGV2IGVudHJpZXMs IGFsbG93IG9wZXJhdGlvbiBvZiB0aGUgc2FtZQotICAgICAgICAgIHBoeXNpY2FsIGRldmljZSB3 aXRoIGRpZmZlcmVudCBvcGVyYXRpbmcgY2hhcmFjdGVyaXN0aWNzLiBJdAotICAgICAgICAgIGFs c28gYWxsb3dzIHN0YW5kYXJkIGdldHR5IHByb2dyYW1zIHRvIGNvZXhpc3Qgd2l0aCBhbnkgb3Ro ZXIKLSAgICAgICAgICBzZXJpYWwgcHJvZ3JhbSwgd2l0aG91dCB0aGUgZ2V0dHkgYmVpbmcgcmV0 cm9maXR0ZWQgd2l0aCBsb2NraW5nCi0gICAgICAgICAgb2Ygc29tZSBzb3J0LiBJdCdzIGVzcGVj aWFsbHkgdXNlZnVsIHNpbmNlIHN0YW5kYXJkIFVuaXgga2VybmVsCi0gICAgICAgICAgZmlsZSBs b2NraW5nLCBhbmQgVVVDUCBsb2NraW5nIGFyZSBib3RoIGFkdmlzb3J5IGFuZCBub3QKLSAgICAg ICAgICBtYW5kYXRvcnkuCi0KLSAgIEl0IHdhcyBkaXNjb3ZlcmVkIGR1cmluZyBkZXZlbG9wbWVu dCBvZiBDLUtlcm1pdCA3LjAgdGhhdCByZWJ1aWxkaW5nCi0gICBDLUtlcm1pdCB3aXRoIC1ETk9D T1RGTUMgKE5vIENsb3NlL09wZW4gVG8gRm9yY2UgTW9kZSBDaGFuZ2UpIG1hZGUgdGhlCi0gICBh Zm9yZW1lbnRpb25lZCBwcm9ibGVtIHdpdGggL2Rldi90dHlTMCBnbyBhd2F5LiBJdCBpcyBub3Qg eWV0IGNsZWFyLAotICAgaG93ZXZlciwgd2hhdCBpdHMgYWZmZWN0IG1pZ2h0IGJlIG9uIHRoZSAv ZGV2L2N1YSogZGV2aWNlcy4gQXMgb2YgMTkKLSAgIE1hcmNoIDE5OTgsIHRoaXMgb3B0aW9uIGhh cyBiZWVuIGFkZGVkIHRvIHRoZSBDRkxBR1MgaW4gdGhlIG1ha2VmaWxlCi0gICBlbnRyaWVzIGZv ciBMaW51eCAoIm1ha2UgbGludXgiKS4KLQotICAgTm90ZSB0aGF0IHRoZSBjdWEgZGV2aWNlIGlz IG5vdyAiZGVwcmVjYXRlZCIsIGFuZCBuZXcgZWRpdGlvbnMgb2YgTGludXgKLSAgIHdpbGwgcGhh c2UgKGhhdmUgcGhhc2VkKSBpdCBvdXQgaW4gZmF2b3Igb2YgdGhlIHR0eVMgZGV2aWNlLiBTZWUg KGlmCi0gICBpdCdzIHN0aWxsIHRoZXJlKToKLQotICBbMzE1XWh0dHA6Ly9saW51eHd3dy5kYi5l cmF1LmVkdS9tYWlsX2FyY2hpdmVzL2xpbnV4LWtlcm5lbC9NYXJfOTgvMTQ0MS5odG1sCi0KLSAg IChubywgb2YgY291cnNlIGl0IGlzbid0OyB5b3UnbGwgaGF2ZSB0byB1c2UgeW91ciBpbWFnaW5h dGlvbikuIE9uZSB1c2VyCi0gICByZXBvcnRlZCB0aGF0IEMtS2VybWl0IDcuMCwgd2hlbiBidWls dCB3aXRoIGVnY3MgMS4xLjIgYW5kIHJ1biBvbiBMaW51eAotICAgMi4yLjYgd2l0aCBnbGliYyAy LjEgKGhhcmR3YXJlIHVua25vd24gYnV0IHByb2JhYmx5IGEgUEMpIGR1bXBzIGNvcmUKLSAgIHdo ZW4gZ2l2ZW4gYSAic2V0IGxpbmUgL2Rldi90dHlTMSIgY29tbWFuZC4gV2hlbiByZWJ1aWx0IHdp dGggZ2NjLCBpdAotICAgd29ya3MgZmluZS4KLQotICAgQWxsIHZlcnNpb25zIG9mIExpbnV4IHNl ZW0gdG8gaGF2ZSB0aGUgZm9sbG93aW5nIGRlZmljaWVuY3k6IFdoZW4gYQotICAgbW9kZW0gY2Fs bCBpcyBodW5nIHVwIGFuZCBDRCBkcm9wcywgS2VybWl0IGNhbiBubyBsb25nZXIgcmVhZCB0aGUg bW9kZW0KLSAgIHNpZ25hbHM7IFNIT1cgQ09NTVVOSUNBVElPTlMgc2F5cyAiTW9kZW0gc2lnbmFs cyBub3QgYXZhaWxhYmxlIi4gVGhlCi0gICBUSU9DTUdFVCBpb2N0bCgpIHJldHVybnMgLTEgd2l0 aCBlcnJubyA1ICgiSS9PIEVycm9yIikuCi0KLSAgIFRoZSBMaW51eCB2ZXJzaW9uIG9mIFBPU0lY IHRjc2VuZGJyZWFrKCksIHdoaWNoIGlzIHVzZWQgYnkgQy1LZXJtaXQgdG8KLSAgIHNlbmQgcmVn dWxhciAoMjc1bXNlYykgYW5kIGxvbmcgKDEuNXNlYykgQlJFQUsgc2lnbmFscywgYXBwZWFycyB0 bwotICAgaWdub3JlIGl0cyBhcmd1bWVudCAoZGVzcGl0ZSBpdHMgZGVzY3JpcHRpb24gaW4gdGhl IG1hbiBwYWdlIGFuZCBpbmZvCi0gICB0b3BpYyksIGFuZCBhbHdheXMgc2VuZHMgYSByZWd1bGFy IDI3NW1zZWMgQlJFQUsuIFRoaXMgaGFzIGJlZW4KLSAgIG9ic2VydmVkIGluIExpbnV4IHZlcnNp b25zIHJhbmdpbmcgZnJvbSBEZWJpYW4gMi4xIHRvIFJlZCBIYXQgNy4xLgotCi0zLjMuMy4gVGVy bWluYWwgRW11bGF0aW9uIGluIExpbnV4Ci0KLSAgIFsgWzMxNl1Ub3AgXSBbIFszMTddQ29udGVu dHMgXSBbIFszMThdU2VjdGlvbiBDb250ZW50cyBdIFsgWzMxOV1OZXh0IF0KLSAgIFsgWzMyMF1Q cmV2aW91cyBdCi0KLSAgIEMtS2VybWl0IGlzIG5vdCBhIHRlcm1pbmFsIGVtdWxhdG9yLiBGb3Ig YSBicmllZiBleHBsYW5hdGlvbiBvZiB3aHkKLSAgIG5vdCwgc2VlIFszMjFdU2VjdGlvbiAzLjAu NS4gRm9yIGEgZnVsbGVyIGV4cGxhbmF0aW9uLCBbMzIyXUNsSUNLIEhFUkUuCi0KLSAgIEluIFVu aXgsIHRlcm1pbmFsIGVtdWxhdGlvbiBpcyBzdXBwbGllZCBieSB0aGUgV2luZG93IGluIHdoaWNo IHlvdSBydW4KLSAgIEtlcm1pdDogdGhlIHJlZ3VsYXIgY29uc29sZSBzY3JlZW4sIHdoaWNoIHBy b3ZpZGVzIExpbnV4IENvbnNvbGUKLSAgICJlbXVsYXRpb24iIHZpYSB0aGUgImNvbnNvbGUiIHRl cm1jYXAgZW50cnksIG9yIHVuZGVyIFgtV2luZG93cyBpbiBhbgotICAgeHRlcm0gd2luZG93LCB3 aGljaCBnaXZlcyBWVHh4eCBlbXVsYXRpb24uIEFuIHh0ZXJtIHRoYXQgaW5jbHVkZXMgY29sb3IK LSAgIEFOU0kgYW5kIFZUMjIwIGVtdWxhdGlvbiBpcyBhdmFpbGFibGUgd2l0aCBYZnJlZTg2Ogot Ci0gIFszMjNdaHR0cDovL2RpY2tleS5oaXMuY29tL3h0ZXJtL3h0ZXJtLmh0bWwKLQotICAgQmVm b3JlIHN0YXJ0aW5nIEMtS2VybWl0IGluIGFuIHh0ZXJtIHdpbmRvdywgeW91IG1pZ2h0IG5lZWQg dG8gdGVsbCB0aGUKLSAgIHh0ZXJtIHdpbmRvdydzIHNoZWxsIHRvICJzdHR5IHNhbmUiLgotCi0g ICBUbyBzZXQgdXAgeW91ciBQQyBjb25zb2xlIGtleWJvYXJkIHRvIHNlbmQgVlQyMjAga2V5IHNl cXVlbmNlcyB3aGVuCi0gICB1c2luZyBDLUtlcm1pdCBhcyB5b3VyIGNvbW11bmljYXRpb25zIHBy b2dyYW0gaW4gYW4gWCB0ZXJtaW5hbCB3aW5kb3cKLSAgIChpZiBpdCBkb2Vzbid0IGFscmVhZHkp LCBjcmVhdGUgYSBmaWxlIHNvbWV3aGVyZSAoZS5nLiBpbiAvcm9vdC8pCi0gICBjYWxsZWQgLnht b2RtYXByYywgY29udGFpbmluZyBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nOgotCi0gIGtl eWNvZGUgNzcgID0gS1BfRjEgICAgICAgISBOdW0gTG9jayAgICAgPT4gREVDIEdvbGQgKFBGMSkK LSAga2V5Y29kZSAxMTIgPSBLUF9GMiAgICAgICAhIEtleXBhZCAvICAgICA9PiBERUMgUEYxCi0g IGtleWNvZGUgNjMgID0gS1BfRjMgICAgICAgISBLZXlwYWQgKiAgICAgPT4gREVDIFBGMwotICBr ZXljb2RlIDgyICA9IEtQX0Y0ICAgICAgICEgS2V5cGFkIC0gICAgID0+IERFQyBQRjQKLSAga2V5 Y29kZSAxMTEgPSBIZWxwICAgICAgICAhIFByaW50IFNjcmVlbiA9PiBERUMgSGVscAotICBrZXlj b2RlIDc4ICA9IEYxNiAgICAgICAgICEgU2Nyb2xsIExvY2sgID0+IERFQyBEbwotICBrZXljb2Rl IDExMCA9IEYxNiAgICAgICAgICEgUGF1c2UgICAgICAgID0+IERFQyBEbwotICBrZXljb2RlIDEw NiA9IEZpbmQgICAgICAgICEgSW5zZXJ0ICAgICAgID0+IERFQyBGaW5kCi0gIGtleWNvZGUgOTcg ID0gSW5zZXJ0ICAgICAgISBIb21lICAgICAgICAgPT4gREVDIEluc2VydAotICBrZXljb2RlIDk5 ICA9IDB4MTAwMGZmMDAgICEgUGFnZSBVcCAgICAgID0+IERFQyBSZW1vdmUKLSAga2V5Y29kZSAx MDcgPSBTZWxlY3QgICAgICAhIERlbGV0ZSAgICAgICA9PiBERUMgU2VsZWN0Ci0gIGtleWNvZGUg MTAzID0gUGFnZV9VcCAgICAgISBFbmQgICAgICAgICAgPT4gREVDIFByZXYgU2NyZWVuCi0gIGtl eWNvZGUgMjIgID0gRGVsZXRlICAgICAgISBCYWNrc3BhY2Ugc2VuZHMgRGVsZXRlICgxMjcpCi0K LSAgIFRoZW4gcHV0ICJ4bW9kbWFwIGZpbGVuYW1lIiBpbiB5b3VyIC54aW5pdHJjIGZpbGUgKGlu IHlvdXIgbG9naW4KLSAgIGRpcmVjdG9yeSksIGUuZy4KLQotICB4bW9kbWFwIC9yb290Ly54bW9k bWFwcmMKLQotICAgT2YgY291cnNlIHlvdSBjYW4gbW92ZSB0aGluZ3MgYXJvdW5kLiBVc2UgdGhl IHhldiBwcm9ncmFtIHRvIGZpbmQgb3V0Ci0gICBrZXkgY29kZXMuCi0KLSAgIENvbnNvbGUtbW9k ZSBrZXlzIGFyZSBtYXBwZWQgc2VwYXJhdGVseSB1c2luZyBsb2Fka2V5cywgYW5kIGRpZmZlcmVu dAotICAga2V5Y29kZXMgYXJlIHVzZWQuIEZpbmQgb3V0IHdoYXQgdGhleSBhcmUgd2l0aCBzaG93 a2V5LgotCi0gICBGb3IgYSBtdWNoIG1vcmUgY29tcGxldGUgVlQyMjAvMzIwIGtleSBtYXBwaW5n IGZvciBbMzI0XVhmcmVlODYgeHRlcm0sCi0gICBbMzI1XUNMSUNLIEhFUkUuCi0KLTMuMy40LiBE YXRlcyBhbmQgVGltZXMKLQotICAgWyBbMzI2XVRvcCBdIFsgWzMyN11Db250ZW50cyBdIFsgWzMy OF1TZWN0aW9uIENvbnRlbnRzIF0gWyBbMzI5XU5leHQgXQotICAgWyBbMzMwXVByZXZpb3VzIF0K LQotICAgSWYgQy1LZXJtaXQncyBkYXRlLXRpbWUgKGUuZy4gYXMgc2hvd24gYnkgaXRzIERBVEUg Y29tbWFuZCkgZGlmZmVycwotICAgZnJvbSB0aGUgc3lzdGVtJ3MgZGF0ZSBhbmQgdGltZToKLQot ICAgIGEuIE1ha2Ugc3VyZSB0aGUgbGliYyB0byB3aGljaCBLZXJtaXQgaXMgbGlua2VkIGlzIHNl dCB0byBHTVQgb3IgaXMKLSAgICAgICBub3Qgc2V0IHRvIGFueSB0aW1lIHpvbmUuIFdhdGNoIG91 dCBmb3IgbWl4ZWQgbGliYzUvbGliYzYgc3lzdGVtczsKLSAgICAgICBlYWNoIG11c3QgYmUgc2V0 IGluZGVwZW5kZW50bHkuCi0gICAgYi4gSWYgeW91IGhhdmUgY2hhbmdlZCB5b3VyIFRaIGVudmly b25tZW50IHZhcmlhYmxlLCBtYWtlIHN1cmUgaXQgaXMKLSAgICAgICBleHBvcnRlZC4gVGhpcyBp cyBub3JtYWxseSBkb25lIGluIC9ldGMvcHJvZmlsZSBvciAvZXRjL1RaLgotCi0zLjMuNS4gU3Rh cnR1cCBFcnJvcnMKLQotICAgWyBbMzMxXVRvcCBdIFsgWzMzMl1Db250ZW50cyBdIFsgWzMzM11T ZWN0aW9uIENvbnRlbnRzIF0gWyBbMzM0XU5leHQgXQotICAgWyBbMzM1XVByZXZpb3VzIF0KLQot ICAgQy1LZXJtaXQgc2hvdWxkIHdvcmsgb24gYWxsIHZlcnNpb25zIG9mIExpbnV4IGN1cnJlbnQg dGhyb3VnaCBNYXJjaAotICAgMjAwMywgcHJvdmlkZWQgaXQgd2FzIGJ1aWx0IG9uIHRoZSBzYW1l IHZlcnNpb24geW91IGhhdmUsIHdpdGggdGhlIHNhbWUKLSAgIGxpYnJhcmllcyBhbmQgaGVhZGVy IGZpbGVzIChqdXN0IGdldCB0aGUgc291cmNlIGNvZGUgYW5kICJtYWtlIGxpbnV4IikuCi0gICBC aW5hcmllcyB0ZW5kIG5vdCB0byB0cmF2ZWwgd2VsbCBmcm9tIG9uZSBMaW51eCBtYWNoaW5lIHRv IGFub3RoZXIsIGR1ZQotICAgdG8gdGhlaXIgbWFueSBkaWZmZXJlbmNlcy4gVGhlcmUgaXMgbm8g Z3VhcmFudGVlIHRoYXQgYSBwYXJ0aWN1bGFyCi0gICBDLUtlcm1pdCBiaW5hcnkgd2lsbCBub3Qg c3RvcCB3b3JraW5nIGF0IGEgbGF0ZXIgZGF0ZSwgc2luY2UgTGludXgKLSAgIHRlbmRzIHRvIGNo YW5nZSBvdXQgZnJvbSB1bmRlciBpdHMgYXBwbGljYXRpb25zLiBJZiB0aGF0IGhhcHBlbnMsCi0g ICByZWJ1aWxkIEMtS2VybWl0IGZyb20gc291cmNlLiBJZiBzb21ldGhpbmcgZ29lcyB3cm9uZyB3 aXRoIHRoZSBidWlsZAotICAgcHJvY2VzcywgbG9vayBvbiB0aGUgWzMzNl1DLUtlcm1pdCB3ZWJz aXRlIGZvciBhIG5ld2VyIHZlcnNpb24uIElmIHlvdQotICAgaGF2ZSB0aGUgbGF0ZXN0IHZlcnNp b24sIHRoZW4gWzMzN11yZXBvcnQgdGhlIHByb2JsZW0gdG8gdXMuCi0KLSAgIEluYWJpbGl0eSB0 byB0cmFuc2ZlciBmaWxlcyBpbiBSZWQgSGF0IDcuMjogdGhlIHR5cGljYWwgc3ltcHRvbSB3b3Vs ZAotICAgYmUgaWYgeW91IHN0YXJ0IEtlcm1pdCBhbmQgdGVsbCBpdCB0byBSRUNFSVZFLCBpdCBm YWlscyByaWdodCBhd2F5IHdpdGgKLSAgICI/L2Rldi90dHk6IE5vIHN1Y2ggZGV2aWNlIG9yIGFk ZHJlc3MiIG9yICI/QmFkIGZpbGUgZGVzY3JpcHRvciIuIE9uZQotICAgcmVwb3J0IHNheXMgdGhp cyBpcyBiZWNhdXNlIG9mIGNzaCwgYW5kIGlmIHlvdSBjaGFuZ2UgeW91ciBzaGVsbCB0bwotICAg YmFzaCBvciBvdGhlciBzaGVsbCwgaXQgZG9lc24ndCBoYXBwZW4uIEFub3RoZXIgcmVwb3J0IGNp dGUgYnVncyBpbiBSZWQKLSAgIEhhdCA3LjIgVGVsbmV0ZCAidmVyeSBzZWxkb20gKGlmIGV2ZXIp IHByb3ZpZGluZyBhIGNvbnRyb2xsaW5nIHR0eSwgYW5kCi0gICBsb3RzIG9mIG90aGVyIHBlb3Bs ZSBwaWxlZCBvbiBzYXlpbmcgdGhleSBoYXZlIHRoZSBzYW1lIHByb2JsZW0uIikgQQotICAgdGhp cmQgdGhlb3J5IGlzIHRoYXQgdGhpcyBoYXBwZW5zIG9ubHkgd2hlbiBMaW51eCBoYXMgYmVlbiBp bnN0YWxsZWQKLSAgIHdpdGhvdXQgInZpcnR1YWwgdGVybWluYWwgc3VwcG9ydCIuCi0KLSAgIEEg c2VhcmNoIG9mIFJlZEhhdCdzIGVycmF0YSBwYWdlcyBzaG93cyBhIGJ1ZyBhZHZpc29yeSAoUkhC QS0yMDAxLTE1MykKLSAgIGlzc3VlZCAxMyBOb3ZlbWJlciAyMDAxLCBidXQgdXBkYXRlZCA2IERl Y2VtYmVyLCBhYm91dCB0aGlzIHNhbWUKLSAgIHN5bXB0b20gKGJ1dCB3aXRoIHRjc2ggYW5kIGxv Z2luLikgU2VlbXMgdGhhdCBsb2dpbiB3YXMgbm90IGFsd2F5cwotICAgYXNzaWduaW5nIGEgY29u dHJvbGxpbmcgVFRZIGZvciB0aGUgc2Vzc2lvbiwgd2hpY2ggd291bGQgbWFrZSBtb3N0IHVzZQot ICAgb2YgIi9kZXYvdHR5IiBzb21ld2hhdCBsZXNzIHRoYW4gdXNlZnVsLgotCi0gIFszMzhdaHR0 cDovL3d3dy5yZWRoYXQuY29tL3N1cHBvcnQvZXJyYXRhL1JIQkEtMjAwMS0xNTMuaHRtbAotCi0g ICBRdW90aW5nOiAiRHVlIHRvIHRlcm1pbmFsIGhhbmRsaW5nIHByb2JsZW1zIGluIC9iaW4vbG9n aW4sIHRjc2ggd291bGQKLSAgIG5vdCBmaW5kIHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbCBjb3Jy ZWN0bHksIGFuZCBhIHNoZWxsIGluIHNpbmdsZSB1c2VyCi0gICBtb2RlIHdvdWxkIGV4aGliaXQg c3RyYW5nZSB0ZXJtaW5hbCBpbnB1dCBjaGFyYWN0ZXJpc3RpY3MuIFRoaXMgdXBkYXRlCi0gICBm aXhlcyBib3RoIG9mIHRoZXNlIHByb2JsZW1zLiIKLQotICAgU2luY2UgdGhlIFJlZCBIYXQgNS4x IHJlbGVhc2UgKGNpcmNhIEF1Z3VzdCAxOTk4KSwgdGhlcmUgaGF2ZSBiZWVuCi0gICBudW1lcm91 cyByZXBvcnRzIG9mIHByZWJ1aWx0IExpbnV4IGV4ZWN1dGFibGVzLCBhbmQgcGFydGljdWxhcmx5 IHRoZQotICAgS2VybWl0IFJQTSBmb3IgUmVkIEhhdCBMaW51eCwgbm90IHdvcmtpbmc7IGVpdGhl ciBpdCB3b24ndCBzdGFydCBhdAotICAgYWxsLCBvciBpdCBnaXZlcyBlcnJvciBtZXNzYWdlcyBh Ym91dCAidGVybWluYWwgdHlwZSB1bmtub3duIiBhbmQKLSAgIHJlZnVzZXMgdG8gaW5pdGlhbGl6 ZSBpdHMgY3Vyc2VzIHN1cHBvcnQuIFRoZSBmb2xsb3dpbmcgaXMgZnJvbSB0aGUKLSAgIFszMzld S2VybWl0IG5ld3Nncm91cDoKLQotICAgICBGcm9tOiByY2hhbmRyYUBoYWw5MDAwLmJ1Zi5zZXJ2 dGVjaC5jb20KLSAgICAgTmV3c2dyb3VwczogY29tcC5wcm90b2NvbHMua2VybWl0Lm1pc2MKLSAg ICAgU3ViamVjdDogUmVkIEhhdCBMaW51eC9JbnRlbCA1LjEgYW5kIG5jdXJzZXM6IHN1Z2dlc3Rp b25zCi0gICAgIERhdGU6IDIyIEF1ZyAxOTk4IDE1OjU0OjQ2IEdNVAotICAgICBPcmdhbml6YXRp b246IFZlcmlvIE5ldyBZb3JrCi0gICAgIEtleXdvcmRzOiBSZWRIYXQgUlBNIDUuMQotCi0gICAg IFNldmVyYWwgZmFjdG9ycyBjYW4gaW5mbHVlbmNlIHdoZXRoZXIgImxpbnV4IiBpcyByZWNvZ25p emVkIGFzIGEKLSAgICAgdGVybWluYWwgdHlwZSBvbiBtYW55IExpbnV4IHN5c3RlbXMuCi0KLSAg ICAxLiBZb3VyIHByb2dyYW0sIG9yIHRoZSBsaWJyYXJpZXMgaXQgbGlua2VkIHdpdGggKGlmIHN0 YXRpY2FsbHkKLSAgICAgICBsaW5rZWQpLCBvciB0aGUgbGlicmFyaWVzIGl0IGR5bmFtaWNhbGx5 IGxpbmtzIHdpdGggYXQgcnVudGltZSwgYXJlCi0gICAgICAgbG9va2luZyBmb3IgYW4gZW50cnkg aW4gL2V0Yy90ZXJtY2FwIHRoYXQgaXNuJ3QgdGhlcmUuIChub3QgbGlrZWx5LAotICAgICAgIGJ1 dCBwb3NzaWJsZS4uLiBJIGJlbGlldmUgYnV0IGFtIG5vdCBjZXJ0YWluIHRoYXQgdGhpcyBpcyBh IHZlcnkKLSAgICAgICBvbGQgcHJhY3RpY2UgaW4gdmVyeSBvbGQgW25dY3Vyc2VzIGxpYnJhcnkg aW1wbGVtZW50YXRpb25zIHRvIHVzZSBhCi0gICAgICAgc2luZ2xlIGZpbGUgZm9yIGFsbCB0ZXJt aW5hbCBkZXNjcmlwdGlvbnMuKQotICAgIDIuIFlvdXIgcHJvZ3JhbSwgb3IgdGhlIGxpYnJhcmll cy4uLmFyZSBsb29raW5nIGZvciBhIHRlcm1pbmZvIGZpbGUKLSAgICAgICB0aGF0IGp1c3QgcGxh aW4gaXNuJ3QgdGhlcmUuIChhbHNvIG5vdCBzbyBsaWtlbHksIHNpbmNlIG1hbnkgcGVvcGxlCi0g ICAgICAgaW4gb3RoZXIgcmVjZW50IG1lc3NhZ2UgdGhyZWFkcyBzYWlkIHRoYXQgb3RoZXIgcHJv Z3JhbXMgd29yayBPSykuCi0gICAgMy4gWW91ciBwcm9ncmFtLCBvciB0aGUgbGlicmFyaWVzLi4u YXJlIGxvb2tpbmcgZm9yIGEgdGVybWluZm8gZmlsZQotICAgICAgIHRoYXQgaXMgc3RvcmVkIGF0 IGEgcGF0aG5hbWUgdGhhdCBpc24ndCBleHBlY3RlZCBieSB5b3VyIHByb2dyYW0sCi0gICAgICAg dGhlIGxpYnJhcmllcy0tYW5kIHNvIG9uLiBJIGZvcmdvdCBpZiBJIHJlYWQgdGhpcyBpbiB0aGUg ZXJyYXRhIFdlYgotICAgICAgIHBhZ2Ugb3Igd2hlcmUgZXhhY3RseSBJIGRpc2NvdmVyZWQgdGhp cyAoTmV0c2NhcGUgaW5zdGFsbD8gQWNyb2JhdAotICAgICAgIGluc3RhbGw/KSwgYnV0IGl0IG1h eSBqdXN0IGJlIHRoYXQgb25lIGxpYmMgKGxldCdzIHNheSBmb3Igc2FrZSBvZgotICAgICAgIGFy Z3VtZW50LCBsaWJjNSwgYnV0IEkgZG9uJ3Qga25vdyB0aGlzIHRvIGJlIHRydWUpIGV4cGVjdHMg eW91cgotICAgICAgIHRlcm1pbmZvIHRvIGJlIGluIC91c3Ivc2hhcmUvdGVybWluZm8sIGFuZCB0 aGUgb3RoZXIgKGxldCdzIHNheQotICAgICAgIGxpYmM2L2dsaWJjKSBleHBlY3RzIC91c3IvbGli L3Rlcm1pbmZvLiBJIHJlbWVtYmVyIHRoYXQgdGhlCi0gICAgICAgc3BlY2lmaWMgaW5zdHJ1Y3Rp b25zIGluIHRoaXMgYnVnZml4L3dvcmthcm91bmQgd2VyZSB0byBkbyB0aGUKLSAgICAgICBmb2xs b3dpbmcgb3IgZXF1aXZhbGVudDoKLSAgY2QgL3Vzci9saWIKLSAgbG4gLXMgLi4vc2hhcmUvdGVy bWluZm8gLi90ZXJtaW5mbwotCi0gICAgICAgb3I6Ci0gIGxuIC1zIC91c3Ivc2hhcmUvdGVybWlu Zm8gL3Vzci9saWIvdGVybWluZm8KLQotICAgICBTbyB3aGF0IHRoaXMgc2F5cyBpcyB0aGF0IHRo ZSB0ZXJtaW5mbyBkYXRhYmFzZS9kaXJlY3Rvcnkgc3RydWN0dXJlCi0gICAgIGNhbiBiZSBhY2Nl c3NlZCBieSBlaXRoZXIgcGF0aC4gV2hlbiBzb21ldGhpbmcgZ29lcyB0byByZWZlcmVuY2UKLSAg ICAgL3Vzci9saWIvdGVybWluZm8sIHRoZSBzeW1saW5rIHJlZGlyZWN0cyBpdCB0byBlc3NlbnRp YWxseQotICAgICAvdXNyL3NoYXJlL3Rlcm1pbmZvLCB3aGljaCBpcyB3aGVyZSBpdCByZWFsbHkg cmVzaWRlcyBvbiB5b3VyCi0gICAgIHN5c3RlbS4gSSBwZXJzb25hbGx5IHByZWZlciB3aGVyZXZl ciBwb3NzaWJsZSB0byB1c2UgcmVsYXRpdmUKLSAgICAgc3ltbGlua3MsIGJlY2F1c2UgdGhleSBz dGlsbCBob2xkLCBtb3JlIG9mdGVuIHRoYW4gYnJlYWssIGFjcm9zcwotICAgICBtb3VudCBwb2lu dHMsIHBhcnRpY3VsYXJseSBORlMgbW91bnRzLCB3aGVyZSB0aGUgZGlyZWN0b3J5IHN0cnVjdHVy ZQotICAgICBtYXkgYmUgZGlmZmVyZW50IG9uIHRoZSBkaWZmZXJlbnQgc3lzdGVtcy4KLQotICAg RXZpZGVudGx5IHRoZSB0ZXJtaW5mbyBmaWxlIG1vdmVkIGJldHdlZW4gUmVkIEhhdCA1LjAgYW5k IDUuMSwgYnV0IFJlZAotICAgSGF0IGRpZCBub3QgaW5jbHVkZSBhIGxpbmsgdG8gbGV0IGFwcGxp Y2F0aW9ucyBidWlsdCBwcmlvciB0byA1LjEgZmluZAotICAgaXQuIFVzZXJzIHJlcG9ydGVkIHRo YXQgaW5zdGFsbGluZyB0aGUgbGluayBmaXhlcyB0aGUgcHJvYmxlbS4KLQotMy4zLjYuIFRoZSBG dWxsc2NyZWVuIEZpbGUgVHJhbnNmZXIgRGlzcGxheQotCi0gICBbIFszNDBdVG9wIF0gWyBbMzQx XUNvbnRlbnRzIF0gWyBbMzQyXVNlY3Rpb24gQ29udGVudHMgXSBbCi0gICBbMzQzXVByZXZpb3Vz IF0KLQotICAgU3RhcnRpbmcgd2l0aCBuY3Vyc2VzIHZlcnNpb25zIGRhdGVkIDE5OTgtMTItMTIg KGFib3V0IGEgeWVhciBiZWZvcmUKLSAgIG5jdXJzZXMgNS4wKSwgbmN1cnNlcyBzZXRzIHRoZSB0 ZXJtaW5hbCBmb3IgYnVmZmVyZWQgaS9vLCBidXQKLSAgIHVuZm9ydHVuYXRlbHkgaXMgbm90IGFi bGUgdG8gcmVzdG9yZSBpdCB1cG9uIGV4aXQgZnJvbSBjdXJzZXMgKHZpYQotICAgZW5kd2luKCkp LiBUaHVzIGFmdGVyIGEgZmlsZSB0cmFuc2ZlciB0aGF0IHVzZXMgdGhlIGZ1bGxzY3JlZW4gZmls ZQotICAgdHJhbnNmZXIgZGlzcGxheSwgdGhlIHRlcm1pbmFsIG5vIGxvbmdlciBlY2hvcyBub3Ig cmVzcG9uZHMgaW1tZWRpYXRlbHkKLSAgIHRvIFRhYiwgPywgYW5kIG90aGVyIHNwZWNpYWwgY29t bWFuZCBjaGFyYWN0ZXJzLiBUaGUgc2FtZSB0aGluZyBoYXBwZW5zCi0gICBvbiBvdGhlciBwbGF0 Zm9ybXMgdGhhdCB1c2UgbmN1cnNlcywgZS5nLiBGcmVlQlNELiBXb3JrYXJvdW5kczoKLQotICAg ICAqIFVzZSBTRVQgWEZFUiBESVNQTEFZIEJSSUVGLCBDUlQsIFNFUklBTCwgb3IgTk9ORSBpbnN0 ZWFkIG9mCi0gICAgICAgRlVMTFNDUkVFTjsgb3I6Ci0gICAgICogUmVidWlsZCB3aXRoIEtGTEFH Uz0tRE5PTk9TRVRCVUYgKEMtS2VybWl0IDguMCkKLQotICAgSW4gUmVkIEhhdCA3LjEsIHdoZW4g dXNpbmcgQy1LZXJtaXQgaW4gYSBHbm9tZSB0ZXJtaW5hbCB3aW5kb3csIGl0IHdhcwotICAgbm90 aWNlZCB0aGF0IHdoZW4gdGhlIGZ1bGxzY3JlZW4gZmlsZSB0cmFuc2ZlciBkaXNwbGF5IGV4aXRz ICh2aWEKLSAgIGVuZHdpbigpKSwgdGhlIHByZXZpb3VzIChwcmUtZmlsZS10cmFuc2Zlci1kaXNw bGF5KSBzY3JlZW4gaXMgcmVzdG9yZWQuCi0gICBUaHVzIHlvdSBjYW4ndCBsb29rIGF0IHRoZSBj b21wbGV0ZWQgZGlzcGxheSB0byBzZWUgd2hhdCBoYXBwZW5lZC4gVGhpcwotICAgaXMgYSBldmlk ZW50bHkgYSBuZXcgZmVhdHVyZSBvZiB4dGVybS4gSSBjYW4gb25seSBzcGVjdWxhdGUgdGhhdAot ICAgaW5pdHNjcmVlbigpIGFuZCBlbmR3aW4oKSBtdXN0IHNlbmQgc29tZSBraW5kIG9mIHNwZWNp YWwgZXNjYXBlCi0gICBzZXF1ZW5jZXMgdGhhdCBjb21tYW5kIHh0ZXJtIHRvIHNhdmUgYW5kIHJl c3RvcmUgdGhlIHNjcmVlbi4gVG8gZGVmZWF0Ci0gICB0aGlzIGVmZmVjdCwgdGVsbCBMaW51eCB5 b3UgaGF2ZSBhIHZ0MTAwIG9yIG90aGVyIHh0ZXJtLWNvbXBhdGlibGUKLSAgIHRlcm1pbmFsIHRo YXQgaXMgbm90IGFjdHVhbGx5IGFuIHh0ZXJtLCBvciBlbHNlIHRlbGwgS2VybWl0IHRvIFNFVAot ICAgVFJBTlNGRVIgRElTUExBWSB0byBzb21ldGhpbmcgYmVzaWRlcyBGVUxMU0NSRUVOLgotCi0z LjQuIEMtS0VSTUlUIEFORCBORVhUU1RFUAotCi0gICBbIFszNDRdVG9wIF0gWyBbMzQ1XUNvbnRl bnRzIF0gWyBbMzQ2XVNlY3Rpb24gQ29udGVudHMgXSBbIFszNDddTmV4dCBdCi0gICBbIFszNDhd UHJldmlvdXMgXQotCi0gICBSdW4gQy1LZXJtaXQgaW4gYSBUZXJtaW5hbCwgU3R1YXJ0LCBvciB4 dGVybSB3aW5kb3csIG9yIHdoZW4gbG9nZ2VkIGluCi0gICByZW1vdGVseSB0aHJvdWdoIGEgc2Vy aWFsIHBvcnQgb3IgVEVMTkVUIGNvbm5lY3Rpb24uIEMtS2VybWl0IGRvZXMgbm90Ci0gICB3b3Jr IGNvcnJlY3RseSB3aGVuIGludm9rZWQgZGlyZWN0bHkgZnJvbSB0aGUgTmVYVFNURVAgRmlsZSBW aWV3ZXIgb3IKLSAgIERvY2suIFRoaXMgaXMgYmVjYXVzZSB0aGUgdGVybWluYWwtb3JpZW50ZWQg Z3R0eSwgc3R0eSwgJiBpb2N0bCBjYWxscwotICAgZG9uJ3Qgd29yayBvbiB0aGUgbGl0dGxlIHdp bmRvdyB0aGF0IE5lWFRTVEVQIHBvcHMgdXAgZm9yIG5vbi1OZVhUU1RFUAotICAgYXBwbGljYXRp b25zIGxpa2UgS2VybWl0LiBDQlJFQUsgYW5kIE5vLUVDSE8gc2V0dGluZ3MgZG8gbm90IHRha2UK LSAgIGVmZmVjdCBpbiB0aGUgY29tbWFuZCBwYXJzZXIgLS0gY29tbWFuZHMgYXJlIHBhcnNlZCBz dHJpY3RseSBsaW5lIGF0IGEKLSAgIHRpbWUuICJzZXQgbGluZSAvZGV2L2N1YSIgd29ya3MuIER1 cmluZyBDT05ORUNUIG1vZGUsIHRoZSBjb25zb2xlIHN0YXlzCi0gICBpbiBjb29rZWQgbW9kZSwg c28gY2hhcmFjdGVycyBhcmUgbm90IHRyYW5zbWl0dGVkIHVudGlsIGNhcnJpYWdlIHJldHVybgot ICAgb3IgbGluZWZlZWQgaXMgdHlwZWQsIGFuZCB5b3UgY2FuJ3QgZXNjYXBlIGJhY2suIElmIHlv dSB3YW50IHRvIHJ1bgotICAgS2VybWl0IGRpcmVjdGx5IGZyb20gdGhlIEZpbGUgVmlld2VyLCB0 aGVuIGxhdW5jaCBpdCBmcm9tIGEgc2hlbGwKLSAgIHNjcmlwdCB0aGF0IHB1dHMgaXQgaW4gdGhl IGRlc2lyZWQga2luZCBvZiB3aW5kb3csIHNvbWV0aGluZyBsaWtlIHRoaXMKLSAgIChmb3IgIlRl cm1pbmFsIik6Ci0KLSAgVGVybWluYWwgLUxpbmVzIDI0IC1Db2x1bW5zIDgwIC1XaW5Mb2NYIDEw MCAtV2luTG9jWSAxMDAgJEZPTlQgJEZPTlRTSVpFIFwKLSAgLVNvdXJjZURvdExvZ2luIC1TaGVs bCAvdXNyL2xvY2FsL2Jpbi9rZXJtaXQgJgotCi0gICBDLUtlcm1pdCBkb2VzIG5vdCB3b3JrIGNv cnJlY3RseSBvbiBhIE5lWFQgd2l0aCBOZVhUU1RFUCAzLjAgdG8gd2hpY2gKLSAgIHlvdSBoYXZl IGVzdGFibGlzaGVkIGFuIHJsb2dpbiBjb25uZWN0aW9uLCBkdWUgdG8gYSBidWcgaW4gTmVYVFNU RVAKLSAgIDMuMCwgd2hpY2ggaGFzIGJlZW4gcmVwb3J0ZWQgdG8gTmVYVC4KLQotICAgVGhlIFNF VCBDQVJSSUVSIGNvbW1hbmQgaGFzIG5vIGVmZmVjdCBvbiB0aGUgTmVYVCAtLSB0aGlzIGlzIGEK LSAgIGxpbWl0YXRpb24gb2YgdGhlIE5lWFRTVEVQIHNlcmlhbC1wb3J0IGRldmljZSBkcml2ZXJz LgotCi0gICBIYXJkd2FyZSBmbG93IGNvbnRyb2wgb24gdGhlIE5lWFQgaXMgc2VsZWN0ZWQgbm90 IGJ5ICJzZXQgZmxvdyBydHMvY3RzIgotICAgaW4gS2VybWl0IChzaW5jZSBOZVhUU1RFUCBvZmZl cnMgbm8gQVBJIGZvciB0aGlzKSwgYnV0IHJhdGhlciwgYnkgdXNpbmcKLSAgIGEgc3BlY2lhbGx5 LW5hbWVkIGRyaXZlciBmb3IgdGhlIHNlcmlhbCBkZXZpY2U6IC9kZXYvY3VmYSBpbnN0ZWFkCi0g ICAvZGV2L2N1YTsgL2Rldi9jdWZiIGluc3RlYWQgb2YgL2Rldi9jdWIuIFRoaXMgaXMgYXZhaWxh YmxlIG9ubHkgb24KLSAgIDY4MDQwLWJhc2VkIE5lWFQgbW9kZWxzICh0aGUgc2l0dWF0aW9uIGZv ciBJbnRlbCBOZVhUU1RFUAotICAgaW1wbGVtZW50YXRpb25zIGlzIHVua25vd24pLgotCi0gICBO ZVhULWJ1aWx0IDY4MDMwIGFuZCA2ODA0MCBtb2RlbHMgaGF2ZSBkaWZmZXJlbnQga2luZHMgb2Yg c2VyaWFsCi0gICBpbnRlcmZhY2VzOyB0aGUgNjgwMzAgaGFzIGEgTWFjaW50b3NoLWxpa2UgUlMt NDIyIGludGVyZmFjZSwgd2hpY2gKLSAgIGxhY2tzIFJUUyBhbmQgQ1RTIHNpZ25hbHM7IHRoZSA2 ODA0MCBoYXMgYW4gUlMtNDIzIChSUy0yMzIgY29tcGF0aWJsZSkKLSAgIGludGVyZmFjZSwgd2hp Y2ggc3VwcG9ydHMgdGhlIGNvbW1vbmx5LXVzZWQgbW9kZW0gc2lnbmFscy4gV0FSTklORzogdGhl Ci0gICBjb25uZWN0b3JzIGxvb2sgZXhhY3RseSB0aGUgc2FtZSwgYnV0IHRoZSBwaW5zIGFyZSB1 c2VkIGluIGNvbXBsZXRlbHkKLSAgIERJRkZFUkVOVCB3YXlzIC0tIGRpZmZlcmVudCBjYWJsZXMg YXJlIHJlcXVpcmVkIGZvciB0aGUgdHdvIGtpbmRzIG9mCi0gICBpbnRlcmZhY2VzLgotCi0gICAg IElGIFlPVSBHRVQgTE9UUyBPRiBSRVRSQU5TTUlTU0lPTlMgZHVyaW5nIGZpbGUgdHJhbnNmZXIs IGV2ZW4gd2hlbgotICAgICB1c2luZyBhIC9kZXYvY3VmKiBkZXZpY2UgYW5kIHRoZSBtb2RlbSBp cyBjb3JyZWN0bHkgY29uZmlndXJlZCBmb3IKLSAgICAgUlRTL0NUUyBmbG93IGNvbnRyb2wsIFlP VSBQUk9CQUJMWSBIQVZFIFRIRSBXUk9ORyBLSU5EIE9GIENBQkxFLgotCi0gICBPbiB0aGUgTmVY VCwgS2VybWl0IHJlcG9ydGVkbHkgKGJ5IFRpbWVNb24pIGNhdXNlcyB0aGUga2VybmVsIHRvIHVz ZSBhCi0gICBsb3Qgb2YgQ1BVIHRpbWUgd2hlbiB1c2luZyBhICJzZXQgbGluZSIgY29ubmVjdGlv bi4gVGhhdCdzIGJlY2F1c2UKLSAgIHRoZXJlIGlzIG5vIERNQSBjaGFubmVsIGZvciB0aGUgTmVY VCBzZXJpYWwgcG9ydCwgc28gdGhlIHBvcnQgbXVzdAotICAgaW50ZXJydXB0IHRoZSBrZXJuZWwg Zm9yIGVhY2ggY2hhcmFjdGVyIGluIG9yIG91dC4KLQotICAgT25lIHVzZXIgcmVwb3J0ZWQgdHJv dWJsZSBydW5uaW5nIEMtS2VybWl0IG9uIGEgTmVYVCBmcm9tIHdpdGhpbiBOZVhUJ3MKLSAgIFN1 YnByb2Nlc3MgY2xhc3MgdW5kZXIgTmVYVHN0ZXAgMy4wLCBhbmQvb3Igd2hlbiBybG9naW4nZCBm cm9tIG9uZSBOZVhUCi0gICB0byBhbm90aGVyOiBFcnJvciBvcGVuaW5nIC9kZXYvdHR5OiwgY29u Z206IE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MuCi0gICBEaWFnbm9zaXM6IEJ1ZyBpbiBOZVhU U1RFUCAzLjAsIGN1cmUgdW5rbm93bi4KLQotMy41LiBDLUtFUk1JVCBBTkQgUU5YCi0KLSAgIFsg WzM0OV1Ub3AgXSBbIFszNTBdQ29udGVudHMgXSBbIFszNTFdU2VjdGlvbiBDb250ZW50cyBdIFsg WzM1Ml1OZXh0IF0KLSAgIFsgWzM1M11QcmV2aW91cyBdCi0KLSAgIFNlZSBhbHNvOiBUaGUgWzM1 NF1jb21wLm9zLnFueCBuZXdzZ3JvdXAuCi0KLSAgIFN1cHBvcnQgZm9yIFFOWCA0Lnggd2FzIGFk ZGVkIGluIEMtS2VybWl0IDVBKDE5MCkuIFRoaXMgaXMgYQotICAgZnVsbC1mdW5jdGlvbiBpbXBs ZW1lbnRhdGlvbiwgdGhvcm91Z2hseSB0ZXN0ZWQgb24gUU5YIDQuMjEgYW5kIGxhdGVyLAotICAg YW5kIHZlcmlmaWVkIHRvIHdvcmsgaW4gYm90aCAxNi1iaXQgYW5kIDMyLWJpdCB2ZXJzaW9ucy4g VGhlIDE2LWJpdAotICAgdmVyc2lvbiB3YXMgZHJvcHBlZCBpbiBDLUtlcm1pdCA3LjAgc2luY2Ug aXQgY2FuIG5vIGxvbmdlciBiZSBidWlsdAotICAgc3VjY2Vzc2Z1bGx5IChhZnRlciBzdHJpcHBp bmcgbW9zdCBtb3N0IGZlYXR1cmVzLCBJIHN1Y2NlZWRlZCBpbgotICAgZ2V0dGluZyBpdCB0byBj b21waWxlIGFuZCBsaW5rIHdpdGhvdXQgY29tcGxhaW50LCBidXQgdGhlIGV4ZWN1dGFibGUKLSAg IGp1c3QgYmVlcHMgd2hlbiB5b3UgcnVuIGl0KTsgZm9yIDE2LWJpdCBRTlggNC4yeCwgdXNlIEMt S2VybWl0IDYuMCBvcgotICAgZWFybGllciwgb3IgZWxzZSBbMzU1XUctS2VybWl0LgotCi0gICBU aGUgMzItYml0IHZlcnNpb24gKGFuZCB0aGUgMTYtYml0IHZlcnNpb24gcHJpb3IgdG8gQy1LZXJt aXQgNy4wKQotICAgc3VwcG9ydHMgbW9zdCBvZiBDLUtlcm1pdCdzIGFkdmFuY2VkIGZlYXR1cmVz IGluY2x1ZGluZyBUQ1AvSVAsIGhpZ2gKLSAgIHNlcmlhbCBzcGVlZHMsIGhhcmR3YXJlIGZsb3ct Y29udHJvbCwgbW9kZW0tc2lnbmFsIGF3YXJlbmVzcywgY3Vyc2VzCi0gICBzdXBwb3J0LCBldGMu Ci0KLSAgIEJVRzogSW4gQy1LZXJtaXQgNi4wIG9uIFFOWCA0LjIyIGFuZCBlYXJsaWVyLCB0aGUg ZnVsbHNjcmVlbiBmaWxlCi0gICB0cmFuc2ZlciBkaXNwbGF5IHdvcmtlZCBmaW5lIHRoZSBmaXJz dCB0aW1lLCBidXQgd2FzIGZyYWN0dXJlZCBvbgotICAgc3Vic2VxdWVudCBmaWxlIHRyYW5zZmVy cy4gQ2F1c2UgYW5kIGN1cmUgdW5rbm93bi4gSW4gQy1LZXJtaXQgNy4wIGFuZAotICAgUU5YIDQu MjUsIHRoaXMgbm8gbG9uZ2VyIG9jY3Vycy4gSXQgaXMgbm90IGtub3duIGlmIGl0IHdvdWxkIG9j Y3VyIGluCi0gICBDLUtlcm1pdCA3LjAgb3IgbGF0ZXIgb24gZWFybGllciBRTlggdmVyc2lvbnMu Ci0KLSAgIERpYWxvdXQgZGV2aWNlcyBhcmUgbm9ybWFsbHkgL2Rldi9zZXIxLCAvZGV2L3NlcjIs IC4uLiwgYW5kIGNhbiBiZQotICAgb3BlbmVkIGV4cGxpY2l0bHkgd2l0aCBTRVQgTElORS4gUmVw b3J0ZWRseSwgIi9kZXYvc2VyIiAobm8gdW5pdAotICAgbnVtYmVyKSBvcGVucyB0aGUgZmlyc3Qg YXZhaWxhYmxlIC9kZXYvc2VybiBkZXZpY2UuCi0KLSAgIExpa2UgYWxsIG90aGVyIFVuaXggQy1L ZXJtaXQgaW1wbGVtZW50YXRpb25zLCBRTlggQy1LZXJtaXQgZG9lcyBub3QKLSAgIHByb3ZpZGUg YW55IGtpbmQgb2YgdGVybWluYWwgZW11bGF0aW9uLiBUZXJtaW5hbCBzcGVjaWZpYyBmdW5jdGlv bnMgYXJlCi0gICBwcm92aWRlZCBieSB5b3VyIHRlcm1pbmFsLCB0ZXJtaW5hbCB3aW5kb3cgKGUu Zy4gUU5YIFRlcm1pbmFsIG9yCi0gICB4dGVybSksIG9yIGVtdWxhdG9yLgotCi0gICBRTlggQy1L ZXJtaXQsIGFzIGRpc3RyaWJ1dGVkLCBkb2VzIG5vdCBpbmNsdWRlIHN1cHBvcnQgZm9yIFVVQ1AK LSAgIGxpbmUtbG9ja2luZzsgdGhlIFFOWCBtYWtlZmlsZSBlbnRyaWVzIChxbngzMiBhbmQgcW54 MTYpIGluY2x1ZGUgdGhlCi0gICAtRE5PVVVDUCBzd2l0Y2guIFRoaXMgaXMgYmVjYXVzZSBRTlgs IGFzIGRpc3RyaWJ1dGVkLCBkb2VzIG5vdCBpbmNsdWRlCi0gICBVVUNQLCBhbmQgaXRzIG93biBj b21tdW5pY2F0aW9ucyBzb2Z0d2FyZSAoZS5nLiBxdGVybSkgZG9lcyBub3QgdXNlCi0gICBVVUNQ IGxpbmUgbG9ja2luZy4gSWYgeW91IGhhdmUgYSBVVUNQIHByb2R1Y3QgaW5zdGFsbGVkIG9uIHlv dXIgUU5YCi0gICBzeXN0ZW0sIHJlbW92ZSB0aGUgLUROT1VVQ1Agc3dpdGNoIGZyb20gdGhlIG1h a2VmaWxlIGVudHJ5IGFuZCByZWJ1aWxkLgotICAgVGhlbiBjaGVjayB0byBzZWUgdGhhdCBLZXJt aXQncyBVVUNQIGxvY2tmaWxlIGNvbnZlbnRpb25zIGFyZSB0aGUgc2FtZQotICAgYXMgdGhvc2Ug b2YgeW91ciBVVUNQIHBhY2thZ2U7IGlmIG5vdCwgcmVhZCB0aGUgWzM1Nl1VVUNQIGxvY2tmaWxl Ci0gICBzZWN0aW9uIG9mIHRoZSBbMzU3XUluc3RhbGxhdGlvbiBJbnN0cnVjdGlvbnMgYW5kIG1h a2UgdGhlIG5lY2Vzc2FyeQotICAgY2hhbmdlcyB0byB0aGUgbWFrZWZpbGUgZW50cnkgKGUuZy4g YWRkIC1ESERCVVVDUCkuCi0KLSAgIFFOWCBkb2VzLCBob3dldmVyLCBhbGxvdyBhIHByb2dyYW0g dG8gZ2V0IHRoZSBkZXZpY2Ugb3BlbiBjb3VudC4gVGhpcwotICAgY2FuIG5vdCBiZSBhIHJlbGlh YmxlIGZvcm0gb2YgbG9ja2luZyB1bmxlc3MgYWxsIGFwcGxpY2F0aW9ucyBkbyBpdCwgc28KLSAg IGJ5IGRlZmF1bHQsIEtlcm1pdCB1c2VzIHRoaXMgaW5mb3JtYXRpb24gb25seSBmb3IgcHJpbnRp bmcgYSB3YXJuaW5nCi0gICBtZXNzYWdlIHN1Y2ggYXM6Ci0KLSAgQy1LZXJtaXQ+c2V0IGxpbmUg L2Rldi9zZXIxCi0gIFdBUk5JTkcgLSAiL2Rldi9zZXIxIiBsb29rcyBidXN5Li4uCi0KLSAgIEhv d2V2ZXIsIGlmIHlvdSB3YW50IHRvIHVzZSBpdCBhcyBhIGxvY2ssIHlvdSBjYW4gZG8gc28gd2l0 aDoKLQotICBTRVQgUU5YLVBPUlQtTE9DSyB7IE9OLCBPRkYgfQotCi0gICBUaGlzIGlzIE9GRiBi eSBkZWZhdWx0OyBpZiB5b3Ugc2V0IGluIE9OLCBDLUtlcm1pdCB3aWxsIGZhaWwgdG8gb3Blbgot ICAgYW55IGRpYWxvdXQgZGV2aWNlIHdoZW4gaXRzIG9wZW4gY291bnQgaW5kaWNhdGVzIHRoYXQg YW5vdGhlciBwcm9jZXNzCi0gICBoYXMgaXQgb3Blbi4gU0hPVyBDT01NIChpbiBRTlggb25seSkg ZGlzcGxheXMgdGhlIHNldHRpbmcsIGFuZCBpZiB5b3UKLSAgIGhhdmUgYSBwb3J0IG9wZW4sIGl0 IGFsc28gc2hvd3MgdGhlIG9wZW4gY291bnQuCi0KLSAgIEFzIG9mIEMtS2VybWl0IDguMCwgQy1L ZXJtaXQncyAib3Blbi1jb3VudCIgZm9ybSBvZiBsaW5lIGxvY2tpbmcgd29ya3MKLSAgIG9ubHkg aW4gUU5YNCwgbm90IGluIFFOWDYgKHRoaXMgbWlnaHQgY2hhbmdlIGluIGEgZnV0dXJlIEMtS2Vy bWl0Ci0gICByZWxlYXNlKS4KLQotMy42LiBDLUtFUk1JVCBBTkQgU0NPCi0KLSAgIFsgWzM1OF1U b3AgXSBbIFszNTldQ29udGVudHMgXSBbIFszNjBdU2VjdGlvbiBDb250ZW50cyBdIFsgWzM2MV1O ZXh0IF0KLSAgIFsgWzM2Ml1QcmV2aW91cyBdCi0KLSAgIFNFQ1RJT04gQ09OVEVOVFMKLQotMy42 LjEuIFszNjNdU0NPIFhFTklYCi0zLjYuMi4gWzM2NF1TQ08gVU5JWCBhbmQgT1NSNQotMy42LjMu IFszNjVdVW5peHdhcmUKLTMuNi40LiBbMzY2XU9wZW4gVU5JWCA4Ci0KLSAgIFJFRkVSRU5DRVMK LQotICAgICAqIFRoZSBjb21wLnVuaXguc2NvLiogbmV3c2dyb3Vwcy4KLSAgICAgKiBbMzY3XVNl Y3Rpb24gMy4xMCBiZWxvdyBmb3IgVW5peHdhcmUuCi0gICAgICogVGhlIGZvbGxvd2luZyBGQVFz OgotCi0gICAgICAgIFRoZSBjb21wLnNjby5taXNjIEZBUToKLSAgICAgICAgICAgICAgICBbMzY4 XWh0dHA6Ly9hcGxhd3JlbmNlLmNvbS9TQ09GQVEvCi0KLSAgICAgICAgQ2FsZGVyYSAoU0NPKSBj b21wLnVuaXguc2NvLnByb2dyYW1tZXIgRkFROgotICAgICAgICAgICAgICAgIFszNjldaHR0cDov L3d3dy56ZW5lei5jb20vY2dpLWJpbi9zY29wcm9nZmFxL2ZhcS5wbAotCi0gICAgICAgIFRoZSBV bml4V2FyZSA3L09wZW5VTklYIDggRkFROgotICAgICAgICAgICAgICAgIFszNzBdaHR0cDovL3d3 dy56ZW5lei5jb20vY2dpLWJpbi9zY291dzdmYXEvZmFxLnBsCi0gICAgICAgICAgICAgICAgWzM3 MV1odHRwOi8vemVuZXoucGN1bml4LmNvbS9jZ2ktYmluL3Njb3V3N2ZhcS9mYXEucGwKLQotICAg ICAgICBIaWdoIFNwZWVkIE1vZGVtcyBmb3IgU0NPIFVuaXg6Ci0gICAgICAgICAgICAgICAgWzM3 Ml1odHRwOi8vcGN1bml4LmNvbS9Vbml4YXJ0L21vZGVtcy5odG1sCi0KLSAgICAgICAgVGhlIFVu aXhXYXJlIEZBUQotICAgICAgICAgICAgICAgIFszNzNdaHR0cDovL3d3dy5mcmVlYmlyZC5vcmcv ZmFxLwotCi0gICAgICAgIFRoZSBVbml4V2FyZSAxLnggYW5kIDIuMCBQcm9ncmFtbWVyIEZBUQot ICAgICAgICAgICAgICAgIFszNzRdaHR0cDovL3d3dy5mcmVlYmlyZC5vcmcvZmFxL2RldmVsb3Bl ci5odG1sCi0KLSAgICAgICAgQ2FsZGVyYSBTdXBwb3J0IEtub3dsZWRnZSBCYXNlCi0gICAgICAg ICAgICAgICAgWzM3NV1odHRwOi8vc3VwcG9ydC5jYWxkZXJhLmNvbS9jYWxkZXJhCi0KLSAgICAg ICAgWzM3Nl1odHRwOi8vc3RhZ2UuY2FsZGVyYS5jb20vdGEvCi0gICAgICAgICAgICAgICAgQ2Fs ZGVyYSAoU0NPKSBUZWNobmljYWwgQXJ0aWNsZSBTZWFyY2ggQ2VudGVyCi0KLSAgICAgICAgWzM3 N11odHRwOi8vYXBsYXdyZW5jZS5jb20vbmV3dG9zY28uaHRtbAotICAgICAgICAgICAgICAgIE5l dyB0byBTQ08gKFRvbnkgTGF3cmVuY2UpCi0KLSAgIFRoZSBzYW1lIGNvbW1lbnRzIHJlZ2FyZGlu ZyB0ZXJtaW5hbCBlbXVsYXRpb24gYW5kIGtleSBtYXBwaW5nIGFwcGx5IHRvCi0gICBTQ08gb3Bl cmF0aW5nIHN5c3RlbXMgYXMgdG8gYWxsIG90aGVyIFVuaXhlcy4gQy1LZXJtaXQgaXMgbm90IGEK LSAgIHRlcm1pbmFsIGVtdWxhdG9yLCBhbmQgeW91IGNhbid0IHVzZSBpdCB0byBtYXAgRi1rZXlz LCBBcnJvdyBrZXlzLCBldGMuCi0gICBUaGUgd2F5IHRvIGRvIHRoaXMgaXMgd2l0aCB4bW9kbWFw ICh4dGVybSkgb3IgbG9hZGtleXMgKGNvbnNvbGUpLiBGb3IgYQotICAgYnJpZWYgZXhwbGFuYXRp b24sIHNlZSBbMzc4XVNlY3Rpb24gMy4wLjUuIEZvciBhIGZ1bGxlciBleHBsYW5hdGlvbiwKLSAg IFszNzldQ2xJQ0sgSEVSRS4KLQotICAgQWxzbyBzZWUgZ2VuZXJhbCBjb21tZW50cyBvbiBQQy1i YXNlZCBVbml4ZXMgaW4gWzM4MF1TZWN0aW9uIDMuMC4KLQotMy42LjEuIFNDTyBYRU5JWAotCi0g ICBbIFszODFdVG9wIF0gWyBbMzgyXUNvbnRlbnRzIF0gWyBbMzgzXVNlY3Rpb24gQ29udGVudHMg XSBbIFszODRdTmV4dCBdCi0KLSAgIE9sZCBYZW5peCB2ZXJzaW9ucy4uLiBEaWQgeW91IGtub3c6 IFhlbml4IDMuMCBpcyAqb2xkZXIqIHRoYW4gWGVuaXgKLSAgIDIuMD8KLQotICAgSW4gWGVuaXgg Mi4zLjQgYW5kIHByb2JhYmx5IG90aGVyIFhlbml4IHZlcnNpb25zLCBtb21lbnRhcmlseSBkcm9w cGluZwotICAgRFRSIHRvIGhhbmcgdXAgYSBtb2RlbSBkb2VzIG5vdCB3b3JrLiBEVFIgZ29lcyBk b3duIGJ1dCBkb2VzIG5vdCBjb21lCi0gICB1cCBhZ2Fpbi4gV29ya2Fyb3VuZDogVXNlIFNFVCBN T0RFTSBIQU5HVVAtTUVUSE9EIE1PREVNLUNPTU1BTkQuCi0gICBBbnlib2R5IHdobyB3b3VsZCBs aWtlIHRvIGZpeCB0aGlzIGlzIHdlbGNvbWUgdG8gdGFrZSBhIGxvb2sgYXQKLSAgIHR0aGFuZygp IGluIFszODVdY2t1dGlvLmMuIEFsc286IG1vZGVtIHNpZ25hbHMgY2FuIG5vdCBiZSByZWFkIGlu Ci0gICBYZW5peCwgYW5kIHRoZSBtYXhpbXVtIHNlcmlhbCBzcGVlZCBpcyAzODQwMC4KLQotICAg VGhlcmUgaXMgYWxsIHNvcnRzIG9mIGNvbmZ1c2lvbiBhbW9uZyBTQ08gdmVyc2lvbnMsIHBhcnRp Y3VsYXJseSB3aGVuCi0gICB0aGlyZC0gcGFydHkgY29tbXVuaWNhdGlvbnMgYm9hcmRzIGFuZCBk cml2ZXJzIGFyZSBpbnN0YWxsZWQsIHJlZ2FyZGluZwotICAgbG9ja2ZpbGUgbmFtaW5nIGNvbnZl bnRpb25zLCBhcyB3ZWxsIGFzIGJhc2ljIGZ1bmN0aW9uYWxpdHkuIEFzIGZhciBhcwotICAgbG9j a2ZpbGVzIGdvLCBhbGwgYmV0cyBhcmUgb2ZmIGlmIHlvdSBhcmUgdXNpbmcgYSB0aGlyZC1wYXJ0 eSBtdWx0aXBvcnQKLSAgIGJvYXJkLiBBdCBsZWFzdCB5b3UgaGF2ZSB0aGUgc291cmNlIGNvZGUu IEhvcGVmdWxseSB5b3UgYWxzbyBoYXZlIGEgQwotICAgY29tcGlsZXIgOi0pCi0KLSAgIFhlbml4 IDIuMy4wIGFuZCBsYXRlciBjbGFpbSB0byBzdXBwb3J0IFJUU0ZMT1cgYW5kIENUU0ZMT1csIGJ1 dCB0aGlzIGlzCi0gICBub3QgbW9kZXJuIGJpZGlyZWN0aW9uYWwgaGFyZHdhcmUgZmxvdyBjb250 cm9sOyByYXRoZXIgaXQgaW1wbGVtZW50cwotICAgdGhlIG9yaWdpbmFsIFJTLTIzMiBtZWFuaW5n cyBvZiB0aGVzZSBzaWduYWxzIGZvciB1bmlkaXJlY3Rpb25hbAotICAgaGFsZi1kdXBsZXggbGlu ZSBhY2Nlc3M6IElmIGJvdGggUlRTRkxPVyBhbmQgQ1RTRkxPVyBiaXRzIGFyZSBzZXQsCi0gICBY ZW5peCBhc3NlcnRzIFJUUyB3aGVuIGl0IHdhbnRzIHRvIHNlbmQgZGF0YSBhbmQgd2FpdHMgZm9y IENUUwotICAgYXNzZXJ0aW9uIGJlZm9yZSBpdCBhY3R1YWxseSBzdGFydHMgc2VuZGluZyBkYXRh IChhbHNvLCByZXBvcnRlZGx5LAotICAgZXZlbiB0aGlzIGlzIGJyb2tlbiBpbiBYZW5peCAyLjMu MCBhbmQgMi4zLjEpLgotCi0zLjYuMi4gU0NPIFVOSVggQU5EIE9TUjUKLQotICAgWyBbMzg2XVRv cCBdIFsgWzM4N11Db250ZW50cyBdIFsgWzM4OF1TZWN0aW9uIENvbnRlbnRzIF0gWyBbMzg5XU5l eHQgXQotICAgWyBbMzkwXVByZXZpb3VzIF0KLQotICAgU0NPIHN5c3RlbXMgdGVuZCB0byB1c2Ug ZGlmZmVyZW50IG5hbWVzIChpLmUuIGRyaXZlcnMpIGZvciB0aGUgc2FtZQotICAgZGV2aWNlLiBU eXBpY2FsbHkgL2Rldi90dHkxYSByZWZlcnMgdG8gYSB0ZXJtaW5hbCBkZXZpY2UgdGhhdCBoYXMg bm8KLSAgIG1vZGVtIGNvbnRyb2w7IG9wZW4sIHJlYWQsIHdyaXRlLCBhbmQgY2xvc2Ugb3BlcmF0 aW9ucyBkbyBub3QgZGVwZW5kIG9uCi0gICBjYXJyaWVyLiBPbiB0aGUgb3RoZXIgaGFuZCwgL2Rl di90dHkxQSAoc2FtZSBuYW1lLCBidXQgd2l0aCBmaW5hbAotICAgbGV0dGVyIHVwcGVyIGNhc2Up LCBpcyB0aGUgc2FtZSBkZXZpY2Ugd2l0aCBtb2RlbSBjb250cm9sLCBpbiB3aGljaAotICAgY2Fy cmllciBpcyByZXF1aXJlZCAodGhlIFNFVCBMSU5FIGNvbW1hbmQgZG9lcyBub3QgY29tcGxldGUg dW50aWwKLSAgIGNhcnJpZXIgYXBwZWFycywgcmVhZC93cml0ZSBvcGVyYXRpb25zIGZhaWwgaWYg dGhlcmUgaXMgbm8gY2FycmllciwKLSAgIGV0YykuCi0KLSAgIFNDTyBPcGVuU2VydmVyIDUuMC41 IGFuZCBlYXJsaWVyIGRvIG5vdCBzdXBwb3J0IHRoZSByZWFkaW5nIG9mIG1vZGVtCi0gICBzaWdu YWxzLiBUaHVzICJzaG93IGNvbW0iIGRvZXMgbm90IGxpc3QgbW9kZW0gc2lnbmFscywgYW5kIEMt S2VybWl0Ci0gICBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5IHBvcCBiYWNrIHRvIGl0cyBwcm9tcHQg d2hlbiB0aGUgbW9kZW0gaGFuZ3MgdXAKLSAgIHRoZSBjb25uZWN0aW9uIChkcm9wcyBDRCkuIFRo ZSBpb2N0bCgpIGNhbGwgZm9yIHRoaXMgaXMgc2ltcGx5IG5vdAotICAgaW1wbGVtZW50ZWQsIGF0 IGxlYXN0IG5vdCBpbiB0aGUgc3RhbmRhcmQgZHJpdmVycy4gT1NSNS4wLjYgYXR0ZW1wdHMgdG8K LSAgIGRlYWwgd2l0aCBtb2RlbSBzaWduYWxzIGJ1dCBmYWlsczsgaG93ZXZlciBPU1I1LjAuNmEg YXBwZWFycyB0bwotICAgZnVuY3Rpb24gcHJvcGVybHkuCi0KLSAgIERpYWxpbmcgaXMgbGlrZWx5 IG5vdCB0byB3b3JrIHdlbGwgaW4gU0NPIE9wZW5TZXJ2ZXIgNS4wLnggYmVjYXVzZSBtYW55Ci0g ICBvZiB0aGUgc2VyaWFsLXBvcnQgQVBJcyBzaW1wbHkgZG8gbm90IG9wZXJhdGUgd2hlbiB1c2lu ZyB0aGUgc3RhbmRhcmQKLSAgIGRyaXZlcnMuIEZvciBleGFtcGxlLCBpZiBEVFIgaXMgZHJvcHBl ZCBieSB0aGUgcmVjb21tZW5kZWQgbWV0aG9kCi0gICAoc2V0dGluZyBzcGVlZCB0byAwIGZvciBo YWxmIGEgc2Vjb25kcywgdGhlbiByZXN0b3JpbmcgdGhlIHNwZWVkKSwgRFRSCi0gICBhbmQgUlRT IGdvIGRvd24gYnV0IG5ldmVyIGNvbWUgYmFjayB1cC4gV2hlbiBpbiBkb3VidCBTRVQgTU9ERU0K LSAgIEhBTkdVUC1NRVRIT0QgTU9ERU0tQ09NTUFORCBvciBTRVQgRElBTCBIQU5HVVAgT0ZGLgot Ci0gICBPbiB0aGUgb3RoZXIgaGFuZCwgY2VydGFpbiBmdW5jdGlvbnMgdGhhdCBtaWdodCBub3Qg KGRvIG5vdCkgd29yayByaWdodAotICAgb3IgYXQgYWxsIHdoZW4gdXNpbmcgU0NPIGRyaXZlcnMg KGUuZy4gaGlnaCBzZXJpYWwgc3BlZWRzLCBoYXJkd2FyZQotICAgZmxvdyBjb250cm9sLCBhbmQv b3IgcmVhZGluZyBvZiBtb2RlbSBzaWduYWxzKSBtaWdodCB3b3JrIHJpZ2h0IHdoZW4KLSAgIHVz aW5nIHRoaXJkLXBhcnR5IGRyaXZlcnMuIChFeGFtcGxlOiBoYXJkd2FyZSBmbG93IGNvbnRyb2wg d29ya3MsCi0gICByZXBvcnRlZGx5LCBvbmx5IG9uIHVwcGVyY2FzZSBkZXZpY2UgbGlrZSB0dHkx QSAtLSBub3QgdHR5MWEgLS0gYW5kCi0gICBvbmx5IHdoZW4gQ0xPQ0FMIGlzIGNsZWFyIHdoZW4g dXNpbmcgdGhlIFNDTyBzaW8gZHJpdmVyLCBidXQgdGhlcmUgYXJlCi0gICBubyBzdWNoIHJlc3Ry aWN0aW9ucyBpbiwgZS5nLiwgWzM5MV1EaWdpYm9hcmQgZHJpdmVycykuCi0KLSAgIE9uZSB1c2Vy IHJlcG9ydHMgdGhhdCBoZSBjYW4ndCB0cmFuc2ZlciBsYXJnZSBmaWxlcyB3aXRoIEMtS2VybWl0 IHVuZGVyCi0gICBTQ08gT1NSNS4wLjAgYW5kIDUuMC40IC0tIGFmdGVyIHRoZSBmaXJzdCA1Sywg ZXZlcnl0aGluZyBmYWxscyBhcGFydC4KLSAgIFNhbWUgdGhpbmcgd2l0aG91dCBLZXJtaXQgLS0g ZS5nLiB3aXRoIGZ0cCBvdmVyIGEgUFBQIGNvbm5lY3Rpb24uCi0gICBMYXRlciwgaGUgc2FpZCB0 aGF0IHJlcGxhY2luZyBTQ08ncyBTSU8gZHJpdmVyIHdpdGggRkFTLCBhbiBhbHRlcm5hdGl2ZQot ICAgY29tbXVuaWNhdGlvbnMgZHJpdmVyLCBtYWRlIHRoZSBwcm9ibGVtIGdvIGF3YXk6Ci0KLSAg WzM5Ml1mdHA6Ly9mdHAuZnUtYmVybGluLmRlL3B1Yi91bml4L2RyaXZlci9mYXMKLQotICAgV2l0 aCByZWdhcmQgdG8gYmlkaXJlY3Rpb25hbCBzZXJpYWwgcG9ydHMgb24gT3BlblNlcnZlciA1LjAu NCwgdGhlCi0gICBmb2xsb3dpbmcgYWR2aWNlIGFwcGVhcmVkIG9uIGFuIFNDTy1yZWxhdGVkIG5l d3Nncm91cDoKLQotICAgICBObyBhbW91bnQgb2YgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBp cyBnb2luZyB0byBoZWxwIHlvdSBvbiA1LjAuNAotICAgICB1bmxlc3MgaXQgaW5jbHVkZXMgdGhl IGtsdWRnZSBmb3IgdGhlIHByaW1hcnkgcHJvYmxlbS4gV2l0aCBhbG1vc3QKLSAgICAgZXZlcnkg bW9kZW0sIHRoZSA1LjAuNCBnZXR0eSB3aWxsIGJhcmYgbWVzc2FnZXMgYW5kIG1heSBvciBtYXkg bm90Ci0gICAgIGNvbm5lY3QuIFRoZXJlIGFyZSAyIHNvbHV0aW9ucyBhbmQgb25seSBvbmUgd29y a3Mgb24gNS4wLjQuIEdldCB0aGUKLSAgICAgYXRkaWFsZXIgYmluYXJ5IGZyb20gYSA1LjAuMCBz eXN0ZW0gYW5kIHN1YnN0aXR1dGUgaXQgZm9yIHRoZSBuYXRpdmUKLSAgICAgNS4wLjQgYXRkaWFs ZXIuIFRoZSBvdGhlciBzb2x1dGlvbiBpcyB0byB1cGdyYWRlIHRvIDUuMC41LiBBbmQsIG1vc3QK LSAgICAgb2YgYWxsLCBvbiBhbnkgT3BlblNlcnZlciBwcm9kdWN0cywgZG8gTk9UIHJ1biB0aGUg YmFkbHkgYnJva2VuCi0gICAgIE1vZGVtIE1hbmFnZXIuIENvbmZpZ3VyZSB0aGUgbW9kZW1zIGlu IHRoZSB0aW1lIGhvbm9yZWQgd2F5IHRoYXQKLSAgICAgZGF0ZXMgYmFjayB0byBYZW5peC4KLQot ICAgVXNlIFNDTy1wcm92aWRlZCB1dGlsaXRpZXMgZm9yIHN3aXRjaGluZyB0aGUgZGlyZWN0aW9u YWxpdHkgb2YgYSBtb2RlbQotICAgbGluZSwgc3VjaCBhcyAiZW5hYmxlIiBhbmQgImRpc2FibGUi IGNvbW1hbmRzLiBGb3IgZXhhbXBsZSwgdG8gZGlhbCBvdXQKLSAgIG9uIHR0eTFhLCB3aGljaCBp cyBub3JtYWxseSBzZXQgdXAgZm9yIGxvZ2luczoKLQotICBkaXNhYmxlIHR0eTFhCi0gIGtlcm1p dCAtbCAvZGV2L3R0eTFhCi0gIGVuYWJsZSB0dHkxYQotCi0gICBJZiBhIHR0eSBkZXZpY2UgaXMg bGlzdGVkIGFzIGFuIEFDVSBpbiAvdXNyL2xpYi91dWNwL0RldmljZXMgYW5kIGlzCi0gICBlbmFi bGVkLCBnZXR0eSByZXNldHMgdGhlIG93bmVyc2hpcCBhbmQgcGVybWlzc2lvbnMgdG8gdXVjcC51 dWNwIGFuZAotICAgNjQwIGV2ZXJ5IHRpbWUgdGhlIGRldmljZSBpcyByZWxlYXNlZC4gSWYgeW91 IHdhbnQgdG8gdXNlIHRoZSBkZXZpY2UKLSAgIG9ubHkgZm9yIGRpYWxvdXQsIGFuZCB5b3Ugd2Fu dCB0byBzcGVjaWZ5IG90aGVyIG93bmVycyBvciBwZXJtaXNzaW9ucywKLSAgIHlvdSBzaG91bGQg ZGlzYWJsZSBpdCBpbiAvdXNyL2xpYi91dWNwL0RldmljZXM7IHRoaXMgd2lsbCBwcmV2ZW50IGdl dHR5Ci0gICBmcm9tIGRvaW5nIHRoaW5ncyB0byBpdC4gWW91IHNob3VsZCBhbHNvIGNoYW5nZXMg dGhlIGRldmljZSdzIGZpbGUKLSAgIG1vZGVzIGluIC9ldGMvY29uZi9ub2RlLmQvc2lvIGJ5IGNo YW5naW5nIGZpZWxkcyA1LTcgZm9yIHRoZSBkZXNpcmVkCi0gICBkZXZpY2Uocyk7IHRoaXMgZGV0 ZXJtaW5lcyBob3cgdGhlIGRldmljZXMgYXJlIHNldCBpZiB5b3UgcmVsaW5rIHRoZQotICAga2Vy bmVsLgotCi0gICBPbmUgU0NPIHVzZXIgb2YgQy1LZXJtaXQgNUEoMTkwKSByZXBvcnRlZCB0aGF0 IG9ubHkgb25lIGNvcHkgb2YgS2VybWl0Ci0gICBjYW4gcnVuIGF0IGEgdGltZSB3aGVuIGEgU3Rh bGxpb24gVGVjaG5vbG9naWVzIG11bHRpcG9ydCBib2FyZHMgYXJlCi0gICBpbnN0YWxsZWQuIENh dXNlLCBjdXJlLCBhbmQgcHJlc2VudCBzdGF0dXMgdW5rbm93biAoc2VlIFszOTNdU2VjdGlvbiAx NAotICAgZm9yIG1vcmUgaW5mbyByZWdhcmRpbmcgU3RhbGxpb24pLgotCi0gICBQcmlvciB0byBT Q08gT3BlblNlcnZlciA1LjAuNCwgdGhlIGhpZ2hlc3Qgc2VyaWFsIHBvcnQgc3BlZWQgc3VwcG9y dGVkCi0gICBieSBTQ08gd2FzIDM4NDAwLiBIb3dldmVyLCBpbiBzb21lIFNDTyB2ZXJzaW9ucyAo ZS5nLiBPU1I1KSBpdCBpcwotICAgcG9zc2libGUgdG8gbWFwIHJhcmVseS11c2VkIGxvd2VyIHNw ZWVkcyAobGlrZSA2MDAgYW5kIDE4MDApIHRvIGhpZ2hlcgotICAgb25lcyBsaWtlIDU3NjAwIGFu ZCAxMTUyMDAuIFRvIGZpbmQgb3V0IGhvdywgZ28gdG8KLSAgIFszOTRdaHR0cDovL3d3dy5zY28u Y29tLyBhbmQgc2VhcmNoIGZvciAiMTE1MjAwIi4gSW4gT1NSNS4wLjQsIHNlcmlhbAotICAgc3Bl ZWRzIHVwIHRvIDkyMTYwMCBhcmUgc3VwcG9ydGVkIHRocm91Z2ggdGhlIFBPU0lYIGludGVyZmFj ZTsgQy1LZXJtaXQKLSAgIDYuMS4xOTMgb3IgbGF0ZXIsIHdoZW4gYnVpbHQgZm9yIE9TUjUuMC40 IHVzaW5nIC9iaW4vY2MgKE5PVCB0aGUgVURLLAotICAgd2hpY2ggaGlkZXMgdGhlIGhpZ2gtc3Bl ZWQgZGVmaW5pdGlvbnMgZnJvbSBDUFApLCBzdXBwb3J0cyB0aGVzZQotICAgc3BlZWRzLCBidXQg eW91IG1pZ2h0IGJlIGFibGUgdG8gcnVuIHRoaXMgYmluYXJ5IG9uIGVhcmxpZXIgcmVsZWFzZXMg dG8KLSAgIGdldCB0aGUgaGlnaCBzZXJpYWwgc3BlZWRzLCBkZXBlbmRpbmcgb24gdmFyaW91cyBm YWN0b3JzLCBkZXNjcmliZWQgYnkKLSAgIEJlbGEgTHVia2luIG9mIFNDTzoKLQotICBTZXJpYWwg c3BlZWRzIHVuZGVyIFNDTyBVbml4IC8gT3BlbiBEZXNrdG9wIC8gT3BlblNlcnZlcgotICA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICBU aGlyZCBwYXJ0eSBkcml2ZXJzIChpbnRlbGxpZ2VudCBzZXJpYWwgYm9hcmRzKSBtYXkgcHJvdmlk ZSBhbnkgc3BlZWRzCi0gIHRoZXkgZGVzaXJlOyBtb3N0IHN1cHBvcnQgdXAgdG8gMTE1LjJLYnBz LgotCi0gIFNDTydzICJzaW8iIGRyaXZlciwgd2hpY2ggaXMgdXNlZCB0byBkcml2ZSBzdGFuZGFy ZCBzZXJpYWwgcG9ydHMgd2l0aAotICA4MjUwLzE2NDUwLzE2NTUwIGFuZCBzaW1pbGFyIFVBUlRz LCB3YXMgbGltaXRlZCB0byAzODQwMGJwcyBpbiBvbGRlcgotICByZWxlYXNlcy4gIFN1cHBvcnQg Zm9yIHJhdGVzIHRocm91Z2ggMTE1LjJLYnBzIHdhcyBhZGRlZCBpbiB0aGUKLSAgZm9sbG93aW5n IHJlbGVhc2VzOgotCi0gICAgU0NPIE9wZW5TZXJ2ZXIgUmVsZWFzZSA1LjAuMCAocmVxdWlyZXMg c3VwcGxlbWVudCAicnM0MGIiKQotICAgIFNDTyBPcGVuU2VydmVyIFJlbGVhc2UgNS4wLjIgKHJl cXVpcmVzIHN1cHBsZW1lbnQgInJzNDBhIiBvciAicnM0MGIiKQotICAgIFNDTyBPcGVuU2VydmVy IFJlbGVhc2UgNS4wLjQgb3IgbGF0ZXIKLSAgICBTQ08gSW50ZXJuZXQgRmFzdFN0YXJ0IFJlbGVh c2UgMS4wLjAgb3IgbGF0ZXIKLQotICAgU0NPIHN1cHBsZW1lbnRzIGFyZSBhdCBbMzk1XWZ0cDov L2Z0cC5zY28uY29tLzsgdGhlICJyczQwIiBzZXJpZXMgYXJlCi0gICB1bmRlciBkaXJlY3Rvcnkg L1N1cHBsZW1lbnRzL2ludGVybmV0Ci0KLSAgIEtlcm1pdCBpbmNsdWRlcyB0aGUgaGlnaCBzZXJp YWwgc3BlZWRzIGluIGFsbCBPU1I1IGJ1aWxkcywgYnV0IHRoYXQKLSAgIGRvZXMgbm90IG5lY2Vz c2FyaWx5IG1lYW4gdGhleSB3b3JrLiBGb3IgZXhhbXBsZSwgb24gb3VyIGluLWhvdXNlIDUuMC41 Ci0gICBzeXN0ZW0sIFNFVCBTUEVFRCA1NzYwMCBvciBoaWdoZXIgc2VlbXMgdG8gc3VjY2VlZCAo bm8gZXJyb3Igb2NjdXJzKQotICAgYnV0IHdoZW4gd2UgcmVhZCB0aGUgc3BlZWQgYmFjayB0aGUg ZHJpdmVyIHNheXMgaXQgaXMgNTAuIFNpbWlsYXJseSwKLSAgIDc2ODAwIGJlY29tZXMgNzUsIGFu ZCAxMTUyMDAgYmVjb21lcyAxMTAuIFRlc3Rpbmcgc2hvd3MgdGhlIHJlc3VsdGluZwotICAgc3Bl ZWQgaXMgaW5kZWVkIHRoZSBsb3cgb25lIHdlIHJlYWQgYmFjaywgbm90IHRoZSBoaWdoIG9uZSB3 ZSBhc2tlZAotICAgZm9yLiBNb3JhbDogVXNlIHNwZWVkcyBoaWdoZXIgdGhhbiAzODQwMCB3aXRo IGNhdXRpb24gb24gU0NPIE9TUjUuCi0KLSAgIFJlcG9ydGVkbHksIGlmIHlvdSBoYXZlIGEgc2Ny aXB0IHRoYXQgbWFrZXMgYSBUQ1AvSVAgU0VUIEhPU1QgKGUuZy4KLSAgIFRlbG5ldCkgY29ubmVj dGlvbiB0byBTQ08gMy4ydjQuMiB3aXRoIFRDUC9JUCAxLjIuMSwgYW5kIHRoZW4gZG9lcyB0aGUK LSAgIGZvbGxvd2luZzoKLQotICBzY3JpcHQgJCBleGl0Ci0gIGhhbmd1cAotCi0gICB0aGlzIGNh dXNlcyBhIHBzZXVkb3Rlcm1pbmFsIChwdHkpIHRvIGJlIGNvbnN1bWVkIG9uIHRoZSBTQ08gc3lz dGVtOyBpZgotICAgeW91IGRvIGl0IGVub3VnaCB0aW1lcywgaXQgd2lsbCBydW4gb3V0IG9mIHB0 eXMuIEFuICJleGl0IiBjb21tYW5kIGlzCi0gICBiZWluZyBzZW50IHRvIHRoZSBTQ08gc2hlbGws IGFuZCBhIEhBTkdVUCBjb21tYW5kIGlzIGV4ZWN1dGVkIGxvY2FsbHksCi0gICBzbyB0aGUgY2hh bmNlcyBhcmUgZ29vZCB0aGF0IGJvdGggc2lkZXMgYXJlIHRyeWluZyB0byBjbG9zZSB0aGUKLSAg IGNvbm5lY3Rpb24gYXQgb25jZSwgcGVyaGFwcyBpbmR1Y2luZyBhIHJhY2UgY29uZGl0aW9uIGlu IHdoaWNoIHRoZQotICAgcmVtb3RlIHB0eSBpcyBub3QgcmVsZWFzZWQuIEl0IHdhcyBzcGVjdWxh dGVkIHRoYXQgdGhpcyB3b3VsZCBiZSBmaXhlZAotICAgYnkgYXBwbHlpbmcgU0xTIG5ldDM4MmUs IGJ1dCBpdCBkaWQgbm90LiBNZWFud2hpbGUsIHRoZSB3b3JrYXJvdW5kIGlzCi0gICB0byBpbnNl cnQgYSAicGF1c2UiIGJldHdlZW4gdGhlIFNDUklQVCBhbmQgSEFOR1VQIGNvbW1hbmRzLiAoVGhl Ci0gICBzaXR1YXRpb24gd2l0aCBsYXRlciBTQ08gcmVsZWFzZXMgaXMgbm90IGtub3duLikKLQot ICAgU0NPIFVOSVggYW5kIE9wZW5TZXJ2ZXIgYWxsb3cgdGhlaXIgY29uc29sZSBhbmQvb3IgdGVy bWluYWwgZHJpdmVycyB0bwotICAgYmUgY29uZmlndXJlZCB0byB0cmFuc2xhdGUgY2hhcmFjdGVy IHNldHMgZm9yIHlvdS4gRE9OJ1QgRE8gVEhJUyBXSEVOCi0gICBVU0lORyBLRVJNSVQhIEZpcnN0 IG9mIGFsbCwgeW91IGRvbid0IG5lZWQgaXQgLS0gS2VybWl0IGl0c2VsZiBhbHJlYWR5Ci0gICBk b2VzIHRoaXMgZm9yIHlvdS4gQW5kIHNlY29uZCwgaXQgd2lsbCAoYSkgcHJvYmFibHkgcnVpbiB0 aGUgZm9ybWF0dGluZwotICAgb2YgeW91ciBzY3JlZW5zIChkZXBlbmRpbmcgb24gd2hpY2ggZW11 bGF0aW9uIHlvdSBhcmUgdXNpbmcpOyBhbmQgKGIpCi0gICBpbnRlcmZlcmUgd2l0aCBhbGwgc29y dHMgb2Ygb3RoZXIgdGhpbmdzIC0tIGxlZ2liaWxpdHkgb2Ygbm9uLUFTQ0lJCi0gICB0ZXh0IG9u IHRoZSB0ZXJtaW5hbCBzY3JlZW4sIGZpbGUgdHJhbnNmZXIsIGV0Yy4gVXNlOgotCi0gIG1hcGNo YW4gLW4KLQotICAgdG8gdHVybiBvZmYgdGhpcyBmZWF0dXJlLgotCi0gICBOb3RlIHRoYXQgdGhl cmUgaXMgYSBtdWx0aXR1ZGUgb2YgU0NPIGVudHJpZXMgaW4gdGhlIG1ha2VmaWxlLCBtYW55IG9m Ci0gICB0aGVtIGV4aGliaXRpbmcgYW4gdW51c3VhbGx5IGxhcmdlIG51bWJlciBvZiBjb21waWxl ciBvcHRpb25zLiBTb21lCi0gICBwZW9wbGUgYWN0dWFsbHkgdW5kZXJzdGFuZCBhbGwgb2YgdGhp cy4gUmVwb3J0ZWRseSwgdGhpbmdzIGFyZSBzZXR0bGluZwotICAgZG93biB3aXRoIFNDTyBPcGVu U2VydmVyIDUueCBhbmQgVW5peHdhcmUgNyAoYW5kIE9wZW4gVU5JWCA4IGFuZCB3aG8KLSAgIGtu b3dzIHdoYXQgdGhlIG5leHQgb25lIHdpbGwgYmUgLS0gTGludXggcHJvYmFibHkpIC0tIHRoZSBT Q08gVURLCi0gICBjb21waWxlciBpcyBzYWlkIHRvIGdlbmVyYXRlIGJpbmFyaWVzIHRoYXQgd2ls bCBydW4gb24gZWl0aGVyIHBsYXRmb3JtLAotICAgYnkgZGVmYXVsdCwgYXV0b21hdGljYWxseS4g V2hlbiB1c2luZyBnY2Mgb3IgZWdjcywgb24gdGhlIG90aGVyIGhhbmQsCi0gICBkaWZmZXJlbmNl cyBwZXJzaXN0LCBwbHVzIGlzc3VlcyByZWdhcmRpbmcgdGhlIHR5cGUgb2YgYmluYXJ5IHRoYXQg aXMKLSAgIGdlbmVyYXRlZCAoQ09GRiwgRUxGLCBldGMpLCBhbmQgd2hlcmUgYW5kIGhvdyBpdCBj YW4gcnVuLiBBbGwgb2YgdGhpcwotICAgY291bGQgc3RhbmQgZnVydGhlciBjbGFyaWZpY2F0aW9u IGJ5IFNDTyBleHBlcnRzLgotCi0zLjYuMy4gVW5peHdhcmUKLQotICAgWyBbMzk2XVRvcCBdIFsg WzM5N11Db250ZW50cyBdIFsgWzM5OF1TZWN0aW9uIENvbnRlbnRzIF0gWyBbMzk5XU5leHQgXQot ICAgWyBbNDAwXVByZXZpb3VzIF0KLQotICAgVW5peHdhcmUgY2hhbmdlZCBoYW5kcyBzZXZlcmFs IHRpbWVzIGJlZm9yZSBsYW5kaW5nIGF0IFNDTywgYW5kIHNvIGhhcwotICAgaXRzIFs0MDFdb3du IHNlY3Rpb24gaW4gdGhpcyBkb2N1bWVudC4gKEJyaWVmbHk6IEFUJlQgVU5JWCBTeXN0ZW1zCi0g ICBMYWJvcmF0b3JpZXMgc29sZCB0aGUgcmlnaHRzIHRvIHRoZSBVTklYIG5hbWUgYW5kIHRvIFN5 c3RlbSBWIFI0IChvcgotICAgUjU/KSB0byBOb3ZlbGw7IGxhdGVyIE5vdmVsbCBzcHVuIGl0cyBV TklYIGRpdmlzaW9uIG9mZiBpbnRvIGEgbmV3Ci0gICBjb21wYW55IGNhbGxlZCBVbml2ZWwsIHdo aWNoIGV2ZW50dWFsbHkgd2FzIGJvdWdodCBieSBTQ08sIHdoaWNoIGxhdGVyCi0gICB3YXMgYm91 Z2h0IGJ5IENhbGRlcmEsIHdoaWNoIGxhdGVyIHNvcnQgb2Ygc2VtaS1zcHVuLW9mZiBTQ08uLi4p Ci0KLTMuNi40LiBPcGVuIFVOSVggOAotCi0gICBbIFs0MDJdVG9wIF0gWyBbNDAzXUNvbnRlbnRz IF0gWyBbNDA0XVNlY3Rpb24gQ29udGVudHMgXSBbCi0gICBbNDA1XVByZXZpb3VzIF0KLQotICAg U0NPIHdhcyBib3VnaHQgYnkgQ2FsZGVyYSBpbiAyMDAwIG9yIDIwMDEgYW5kIGV2b2x2ZWQgVW5p eHdhcmUgNy4xIGludG8KLSAgIENhbGRlcmEgT3BlbiBVTklYIDguMDAuIEl0J3MganVzdCBsaWtl IFVuaXh3YXJlIDcuMSBhcyBmYXIgYXMgS2VybWl0IGlzCi0gICBjb25jZXJuZWQgKHRoZSBVbml4 d2FyZSA3LjEgbWFrZWZpbGUgdGFyZ2V0IHdvcmtzIGZvciBPcGVuIFVOSVggOC4wMCwKLSAgIGFu ZCBpbiBmYWN0IGEgVW5peHdhcmUgNy4xIEtlcm1pdCBiaW5hcnkgYnVpbHQgb24gVW5peHdhcmUg Ny4xIHJ1bnMKLSAgIHVuZGVyIE9VODsgYSBzZXBhcmF0ZSBPVTggbWFrZWZpbGUgdGFyZ2V0IGV4 aXN0cyBzaW1wbHkgdG8gZ2VuZXJhdGUgYW4KLSAgIGFwcHJvcHJpYXRlIHByb2dyYW0gc3RhcnR1 cCBoZXJhbGQpLiBPcGVuIFVuaXggaXMgbm93IGRlZnVuY3Q7Ci0gICBzdWJzZXF1ZW50IHJlbGVh c2VzIGFyZSBjYWxsZWQgVW5peFdhcmUgYWdhaW4gKGUuZy4gVW5peFdhcmUgNy4xLjMpLgotCi0z LjcuIEMtS0VSTUlUIEFORCBTT0xBUklTCi0KLSAgIFsgWzQwNl1Ub3AgXSBbIFs0MDddQ29udGVu dHMgXSBbIFs0MDhdU2VjdGlvbiBDb250ZW50cyBdIFsgWzQwOV1OZXh0IF0KLSAgIFsgWzQxMF1Q cmV2aW91cyBdCi0KLSAgIFNFQ1RJT04gQ09OVEVOVFMKLQotMy43LjEuIFs0MTFdU2VyaWFsIFBv cnQgQ29uZmlndXJhdGlvbgotMy43LjIuIFs0MTJdU2VyaWFsIFBvcnQgUHJvYmxlbXMKLTMuNy4z LiBbNDEzXVN1bkxpbmsgWC4yNQotMy43LjQuIFs0MTRdU3VuIFdvcmtzdGF0aW9uIEtleWJvYXJk IE1hcHBpbmcKLTMuNy41LiBbNDE1XVNvbGFyaXMgMi40IGFuZCBFYXJsaWVyCi0KLSAgIFJFRkVS RU5DRVMKLQotICAgICAqIFRoZSBbNDE2XWNvbXAudW5peC5zb2xhcmlzIG5ld3Nncm91cAotICAg ICAqIFs0MTddaHR0cDovL2FjY2VzczEuc3VuLmNvbS8KLSAgICAgKiBbNDE4XWh0dHA6Ly9kb2Nz LnN1bi5jb20vCi0gICAgICogWzQxOV1odHRwOi8vd3d3LnN1bmhlbHAuY29tLwotICAgICAqIFs0 MjBdaHR0cDovL3d3dy53aW5zLnV2YS5ubC9wdWIvc29sYXJpcy9zb2xhcmlzMi8KLSAgICAgKiBb NDIxXWh0dHA6Ly93d3cud2lucy51dmEubmwvY2dpLWJpbi9zZmFxLmNnaQotICAgICAqIFs0MjJd ZnRwOi8vZnRwLndpbnMudXZhLm5sL3B1Yi9zb2xhcmlzCi0gICAgICogWzQyM11odHRwOi8vd3d3 LnNjaWVuY2UudXZhLm5sL3B1Yi9zb2xhcmlzL3NvbGFyaXMyLmh0bWwKLQotICAgQW5kIGFib3V0 IHNlcmlhbCBjb21tdW5pY2F0aW9ucyBpbiBwYXJ0aWN1bGFyLCBzZWUgIkNlbGVzdGUncyBUdXRv cmlhbAotICAgb24gU29sYXJpcyAyLnggTW9kZW1zIGFuZCBUZXJtaW5hbHMiOgotCi0gIFs0MjRd aHR0cDovL3d3dy5zdG9rZWx5LmNvbS8KLQotICAgSW4gcGFydGljdWxhcjoKLQotICBbNDI1XWh0 dHA6Ly93d3cuc3Rva2VseS5jb20vdW5peC5zeXNhZG0ucmVzb3VyY2VzL2ZhcXMuc3VuLmh0bWwK LQotICAgRm9yIFBDLWJhc2VkIFNvbGFyaXMsIGFsc28gc2VlIGdlbmVyYWwgY29tbWVudHMgb24g UEMtYmFzZWQgVW5peGVzIGluCi0gICBbNDI2XVNlY3Rpb24gMy4wLiBEb24ndCBleHBlY3QgU29s YXJpcyBvciBhbnkgb3RoZXIga2luZCBvZiBVbml4IHRvCi0gICB3b3JrIHJpZ2h0IG9uIGEgUEMg dW50aWwgeW91IHJlc29sdmUgYWxsIGludGVycnVwdCBjb25mbGljdHMuIERvbid0Ci0gICBleHBl Y3QgdG8gYmUgYWJsZSB0byB1c2UgQ09NMyBvciBDT000IChvciBldmVuIENPTTIpIHVudGlsIHlv dSBoYXZlCi0gICBjb25maWd1cmVkIHRoZWlyIGFkZHJlc3NlcyBhbmQgaW50ZXJydXB0cy4KLQot My43LjEuIFNlcmlhbCBQb3J0IENvbmZpZ3VyYXRpb24KLQotICAgWyBbNDI3XVRvcCBdIFsgWzQy OF1Db250ZW50cyBdIFsgWzQyOV1TZWN0aW9uIENvbnRlbnRzIF0gWyBbNDMwXVNlY3Rpb24KLSAg IENvbnRlbnRzIF0gWyBbNDMxXU5leHQgXQotCi0gICBZb3VyIHNlcmlhbCBwb3J0IGNhbid0IGJl IHVzZWQgLS0gb3IgYXQgbGVhc3Qgd29uJ3Qgd29yayByaWdodCAtLSB1bnRpbAotICAgaXQgaXMg ZW5hYmxlZCBpbiBTb2xhcmlzLiBGb3IgZXhhbXBsZSwgeW91IGdldCBhIG1lc3NhZ2UgbGlrZSAi U0VSSUFMOgotICAgT3BlcmF0aW9uIHdvdWxkIGJsb2NrIiB3aGVuIGF0dGVtcHRpbmcgdG8gZGlh bC4gVGhpcyBwcm9iYWJseSBpbmRpY2F0ZXMKLSAgIHRoYXQgdGhlIHNlcmlhbCBwb3J0IGhhcyBu b3QgYmVlbiBlbmFibGVkIGZvciB1c2Ugd2l0aCBtb2RlbXMuIFlvdSdsbAotICAgbmVlZCB0byBm b2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiB5b3VyIHN5c3RlbSBzZXR1cCBvciBtYW5hZ2VtZW50 Ci0gICBtYW51YWwsIHN1Y2ggYXMgKGUuZy4pIHRoZSBEZXNrdG9wIFNQQVJDIFN1biBTeXN0ZW0g JiBOZXR3b3JrIE1hbmFnZXIncwotICAgR3VpZGUsIHdoaWNoIHNob3VsZCBjb250YWluIGEgc2Vj dGlvbiAiU2V0dGluZyB1cCBNb2RlbSBTb2Z0d2FyZSI7IHJlYWQKLSAgIGl0IGFuZCBmb2xsb3cg dGhlIGluc3RydWN0aW9ucy4gVGhlc2UgbWlnaHQgKG9yIG1pZ2h0IG5vdCkgaW5jbHVkZQotICAg cnVubmluZyBhIHByb2dyYW0gY2FsbGVkICJlZXByb20iLCBlZGl0aW5nIHNvbWUgc3lzdGVtIGNv bmZpZ3VyYXRpb24KLSAgIGZpbGUgKHN1Y2ggYXMsIGZvciBleGFtcGxlOgotCi0gIC9wbGF0Zm9y bS9pODZwYy9rZXJuZWwvZHJ2L2FzeS5jb25mCi0KLSAgIGFuZCB0aGVuIGRvaW5nIGEgY29uZmln dXJhdGlvbiByZWJvb3QsIG9yIHJ1bm5pbmcgc29tZSBvdGhlciBwcm9ncmFtcwotICAgbGlrZSBk cnZjb25maWcgYW5kIGRldmxpbmtzLiAibWFuIGVlcHJvbSIgZm9yIGRldGFpbHMuCi0KLSAgIEFs c28sIG9uIGNlcnRhaW4gU3VuIG1vZGVscyBsaWtlIElQQywgdGhlIHNlcmlhbCBwb3J0IGhhcmR3 YXJlIG1pZ2h0Ci0gICBuZWVkIHRvIGhhdmUgYSBqdW1wZXIgY2hhbmdlZCB0byBtYWtlIGl0IGFu IFJTLTIzMiBwb3J0IHJhdGhlciB0aGFuCi0gICBSUy00MjMuCi0KLSAgIGVlcHJvbSBhcHBsaWVz IG9ubHkgdG8gcmVhbCBzZXJpYWwgcG9ydHMsIG5vdCB0byAiU3BpZmYiIGRldmljZXMKLSAgIChz ZXJpYWwgcG9ydCBleHBhbmRlciksIGluIHdoaWNoIGNhc2Ugc2V0dXAgd2l0aCBTb2xhcmlzJyBh ZG1pbnRvb2wgaXMKLSAgIHJlcXVpcmVkLgotCi0gICBBbm90aGVyIGNvbW1hbmQgeW91IG1pZ2h0 IG5lZWQgdG8gdXNlIGlzIHBtYWRtLCBlLmcuOgotCi0gIHBtYWRtIC1kIC1wIHpzbW9uIC1zIHR0 eTMKLSAgcG1hZG0gLWUgLXAgenNtb24gLXMgdHR5MwotCi0gICBZb3UgY2FuIHVzZSB0aGUgZm9s bG93aW5nIGNvbW1hbmQgdG8gY2hlY2sgaWYgYSBwcm9jZXNzIGhhcyB0aGUgZGV2aWNlCi0gICBv cGVuOgotCi0gIGZ1c2VyIC1mIC9kZXYvdGVybS8zCi0KLSAgIEluIHNvbWUgY2FzZXMsIGhvd2V2 ZXIgKGFjY29yZGluZyB0byBTdW4gc3VwcG9ydCwgTWF5IDIwMDEpICJJdCBpcwotICAgc3RpbGwg cG9zc2libGUgdGhhdCBhIHpvbWJpZSBwcm9jZXNzIGhhcyBob2xkIG9mIHRoZSBwb3J0IEVWRU4g SUYgdGhlcmUKLSAgIGlzIG5vIGxvY2sgZmlsZSBhbmQgdGhlIGZ1c2VyIGNvbW1hbmQgY29tZXMg dXAgZW1wdHkuIEluIHRoYXQgY2FzZSwgdGhlCi0gICBvbmx5IHdheSB0byByZXNvbHZlIHRoZSBw cm9ibGVtIGlzIGJ5IHJlYm9vdGluZy4iCi0KLSAgIElmIHlvdSBjYW4ndCBlc3RhYmxpc2ggY29t bXVuaWNhdGlvbiB0aHJvdWdoIGEgc2VyaWFsIHBvcnQgdG8gYSBkZXZpY2UKLSAgIHRoYXQgaXMg bm90IGFzc2VydGluZyBDRCAoQ2FycmllciBEZXRlY3QpLCB0cnkgc2V0dGluZyB0aGUgZW52aXJv bm1lbnQKLSAgIHZhcmlhYmxlICJ0dHlhLWlnbm9yZS1jZCIgdG8gInRydWUiIChyZXBsYWNlICJ0 dHlhIiB3aXRoIHRoZSBwb3J0Ci0gICBuYW1lKS4KLQotMy43LjIuIFNlcmlhbCBQb3J0IFByb2Js ZW1zCi0KLSAgIFsgWzQzMl1Ub3AgXSBbIFs0MzNdQ29udGVudHMgXSBbIFs0MzRdU2VjdGlvbiBD b250ZW50cyBdIFsgWzQzNV1OZXh0IF0KLSAgIFsgWzQzNl1QcmV2aW91cyBdCi0KLSAgIEN1cnJl bnQgYWR2aWNlIGZyb20gU3VuIGlzIHRvIGFsd2F5cyB0aGUgL2Rldi9jdWEveCBkZXZpY2VzIGZv ciBkaWFsaW5nCi0gICBvdXQsIHJhdGhlciB0aGFuIHRoZSAvZGV2L3Rlcm0veC4gTmV2ZXJ0aGVs ZXNzLCBpZiB5b3UgaGF2ZSB0cm91YmxlCi0gICBkaWFsaW5nIG91dCB3aXRoIG9uZSwgdHJ5IHRo ZSBvdGhlci4KLQotICAgUmVwb3J0ZWRseSwgaWYgeW91IHN0YXJ0IEMtS2VybWl0IGFuZCAic2V0 IGxpbmUiIHRvIGEgcG9ydCB0aGF0IGhhcyBhCi0gICBtb2RlbSBjb25uZWN0ZWQgdG8gaXQgdGhh dCBpcyBub3QgdHVybmVkIG9uLCBhbmQgdGhlbiAic2V0IGZsb3cKLSAgIHJ0cy9jdHMiLCB0aGVy ZSBtaWdodCBiZSBzb21lICh1bnNwZWNpZmllZCkgZGlmZmljdWx0aWVzIGNsb3NpbmcgdGhlCi0g ICBkZXZpY2UgYmVjYXVzZSB0aGUgQ1RTIHNpZ25hbCBpcyBub3QgY29taW5nIGluIGZyb20gdGhl IG1vZGVtLgotCi0zLjcuMy4gU3VuTGluayBYLjI1Ci0KLSAgIFsgWzQzN11Ub3AgXSBbIFs0Mzhd Q29udGVudHMgXSBbIFs0MzldU2VjdGlvbiBDb250ZW50cyBdIFsgWzQ0MF1OZXh0IF0KLSAgIFsg WzQ0MV1QcmV2aW91cyBdCi0KLSAgIFRoZSBidWlsdC1pbiBTdW5MaW5rIFguMjUgc3VwcG9ydCBm b3IgU29sYXJpcyAyLjMvMi40Li8yNSBhbmQgU3VuTGluawotICAgOC4wMSBvciA5LjAwIHdvcmtz IE9LIHByb3ZpZGVkIHRoZSBYLjI1IHN5c3RlbSBoYXMgYmVlbiBpbnN0YWxsZWQgYW5kCi0gICBp bml0aWFsaXplZCBwcm9wZXJseS4gUGFja2V0IHNpemVzIG1pZ2h0IG5lZWQgdG8gYmUgcmVkdWNl ZCB0byAyNTYsCi0gICBtYXliZSBldmVuIGxlc3MsIGRlcGVuZGluZyBvbiB0aGUgY29uZmlndXJh dGlvbiBvZiB0aGUgWC4yNQotICAgaW5zdGFsbGF0aW9uLiBPbiBvbmUgY29ubmVjdGlvbiB3aGVy ZSBDLUtlcm1pdCA2LjAgd2FzIHRlc3RlZCwgdmVyeQotICAgbGFyZ2UgcGFja2V0cyBhbmQgd2lu ZG93IHNpemVzIGNvdWxkIGJlIHVzZWQgaW4gb25lIGRpcmVjdGlvbiwgYnV0IG9ubHkKLSAgIHZl cnkgc21hbGwgb25lcyB3b3VsZCB3b3JrIGluIHRoZSBvdGhlci4KLQotICAgSW4gYW55IGNhc2Us IGFjY29yZGluZyB0byBTdW4sIEMtS2VybWl0J3MgWC4yNSBzdXBwb3J0IGlzIHN1cGVyZmx1b3Vz Ci0gICB3aXRoIFN1bkxpbmsgOC54IC8gU29sYXJpcyAyLjMuIFF1b3RpbmcgYW4gYW5vbnltb3Vz IFN1biBlbmdpbmVlcjoKLQotICAgICAuLi4gdGhlcmUgaXMgbm93IG5vIG5lZWQgdG8gaW5jbHVk ZSBhbnkgWC4yNSBjb2RlIHdpdGhpbiBrZXJtaXQuIEFzCi0gICAgIG9mIFguMjUgOC4wLjEgd2Ug c3VwcG9ydCB0aGUgdXNlIG9mIGtlcm1pdCwgdXVjcCBhbmQgc2ltaWxhcgotICAgICBwcm90b2Nv bHMgb3ZlciBkZXZpY2VzIG9mIHR5cGUgL2Rldi94dHkuIFRoaXMgZmFjaWxpdHkgd2FzIHRoZXJl IGluCi0gICAgIDguMCwgYW5kIHNob3VsZCBhbHNvIHdvcmsgb24gdGhlIDguMCByZWxlYXNlIGlm IHBhdGNoIDEwMTUyNCBpcwotICAgICBhcHBsaWVkLCBidXQgSSdtIG5vdCAxMDAlIHN1cmUgaXQg d2lsbCB3b3JrIGluIGFsbCBjYXNlcywgd2hpY2ggaXMKLSAgICAgd2h5IHdlIG9ubHkgY2xhaW0g c3VwcG9ydCBmcm9tIDguMC4xIG9ud2FyZHMuCi0KLSAgICAgV2hlbiBjb25maWd1cmluZyBYLjI1 LCBvbiB0aGUgIkFkdmFuY2VkIENvbmZpZ3VyYXRpb24tPlBhcmFtZXRlcnMiCi0gICAgIHNjcmVl biBvZiB0aGUgeDI1dG9vbCB5b3UgY2FuIHNlbGVjdCBhIG51bWJlciBvZiBYVFkgZGV2aWNlcy4g SWYgeW91Ci0gICAgIHNldCB0aGlzIHRvIGJlID4gMSwgcHJlc3MgQXBwbHksIGFuZCByZWJvb3Qs IHlvdSB3aWxsIGdldCBhIG51bWJlcgotICAgICBvZiAvZGV2L3h0eSBlbnRyaWVzIGNyZWF0ZWQu Ci0KLSAgICAgSWdub3JlIC9kZXYveHR5MCwgaXQgaXMgYSBzcGVjaWFsIGNhc2UuIEFsbCB0aGUg b3RoZXJzIGNhbiBiZSB1c2VkCi0gICAgIGV4YWN0bHkgYXMgaWYgdGhleSB3ZXJlIGEgc2VyaWFs IGxpbmUgKGUuZy4gL2Rldi90dHkpIGNvbm5lY3RlZCB0byBhCi0gICAgIG1vZGVtLCBleGNlcHQg dGhhdCBpbnN0ZWFkIG9mIHVzaW5nIEhheWVzLXN0eWxlIGNvbW1hbmRzLCB5b3UgdXNlCi0gICAg IFBBRCBjb21tYW5kcy4KLQotICAgICBGcm9tIGtlcm1pdCB5b3UgY2FuIGRvIGEgJ3NldCBsaW5l JyBjb21tYW5kIHRvLCBzYXksIC9kZXYveHR5MSwgdGhlbgotICAgICBzZXQgeW91ciBkaWFsaW5n IGNvbW1hbmQgdG8gYmUgIkNBTEwgMTIzNDU2NzgiLCBldGMuIEFsbCB0aGUgdXN1YWwKLSAgICAg UEFEIGNvbW1hbmRzIHdpbGwgd29yayAoU0VULCBQQVIsIGV0YykuCi0KLSAgICAgSSBrbm93IG9m IG9uZSBjdXN0b21lciBpbiBBdXN0cmFsaWEgd2hvIGlzIHN1Y2Nlc3NmdWxseSB1c2luZyB0aGlz LAotICAgICB3aXRoIGtlcm1pdCBzY3JpcHRzLCB0byBtYW5hZ2Ugc29tZSBYLjI1LWNvbm5lY3Rl ZCBzd2l0Y2hlcy4gSGUgdXNlZAotICAgICBzdGFuZGFyZCBrZXJtaXQsIGNvbXBpbGVkIGZvciBT b2xhcmlzIDIsIHdpdGggWC4yNSA4LjAgeHR5IGRldmljZXMuCi0KLTMuNy40LiBTdW4gV29ya3N0 YXRpb24gS2V5Ym9hcmQgTWFwcGluZwotCi0gICBbIFs0NDJdVG9wIF0gWyBbNDQzXUNvbnRlbnRz IF0gWyBbNDQ0XVNlY3Rpb24gQ29udGVudHMgXSBbIFs0NDVdTmV4dCBdCi0gICBbIFs0NDZdUHJl dmlvdXMgXQotCi0gICBIaW50cyBmb3IgdXNpbmcgYSBTdW4gd29ya3N0YXRpb24ga2V5Ym9hcmQg Zm9yIFZUIGVtdWxhdGlvbiB3aGVuCi0gICBhY2Nlc3NpbmcgVk1TLCBmcm9tIHRoZSBbNDQ3XWNv bXAub3Mudm1zIG5ld3Nncm91cDoKLQotICAgICBGcm9tOiBKZXJyeSBMZWljaHRlciA8bGVpY2h0 ZXJAc21hcnRzLmNvbT4KLSAgICAgTmV3c2dyb3VwczogY29tcC5vcy52bXMKLSAgICAgU3ViamVj dDogUmU6IFZUMTAwIGtleWJvYXJkIG1hcHBpbmcgdG8gU3VuIFggc2VydmVyCi0gICAgIERhdGU6 IE1vbiwgMTkgQXVnIDE5OTYgMTI6NDQ6MjEgLTA0MDAKLQotICAgICA+IEkgYW0gc3R1Y2sgcmln aHQgbm93IHVzaW5nIGEgU3VuIGtleWJvYXJkICh0eXBlIDUpIG9uIHN5c3RlbXMKLSAgICAgcnVu bmluZyBTdW5PUwotICAgICA+IGFuZCBTb2xhcmlzLiBJIHdvdWxkIGxpa2UgdG8gdXNlIEVWRSBv biBhbiBPcGVuVk1TIGJveCB3aXRoCi0gICAgIGRpc3BsYXkgYmFjayB0bwotICAgICA+IHRoZSBT dW4uIERvZXMgYW55b25lIGtub3cgb2YgYSBrZXlib2FyZCBtYXBwaW5nIChvciBzb21lIG90aGVy Ci0gICAgIHByb2NlZHVyZSkKLSAgICAgPiB3aGljaCB3aWxsIGFsbG93IHRoZSBTdW4ga2V5Ym9h cmQgdG8gYXBwcm94aW1hdGUgYSBWVDEwMC9WVDIyMD8KLQotICAgICBZb3UgY2FuJ3QgZ2V0IGl0 IGV4YWN0bHkgLSBiZWNhdXNlIHRoZSBrZXlwYWQgaGFzIG9uZSBmZXdlciBrZXkgLQotICAgICBi dXQgeW91IGNhbiBjb21lIHByZXR0eSBjbG9zZS4gSGVyZSdzIGEgc2V0IG9mIGtleWRlZnMgSSB1 c2U6Ci0KLSAga2V5Y29kZSAxMDE9S1BfMAotICBrZXljb2RlIDExOT1LUF8xCi0gIGtleWNvZGUg MTIwPUtQXzIKLSAga2V5Y29kZSAxMjE9S1BfMwotICBrZXljb2RlIDk4PUtQXzQKLSAga2V5Y29k ZSA5OT1LUF81Ci0gIGtleWNvZGUgMTAwPUtQXzYKLSAga2V5Y29kZSA3NT1LUF83Ci0gIGtleWNv ZGUgNzY9S1BfOAotICBrZXljb2RlIDc3PUtQXzkKLSAga2V5Y29kZSA1Mj1LUF9GMQotICBrZXlj b2RlIDUzPUtQX0YyCi0gIGtleWNvZGUgNTQ9S1BfRjMKLSAga2V5Y29kZSA1Nz1LUF9EZWNpbWFs Ci0gIGtleWNvZGUgMjg9TGVmdAotICBrZXljb2RlIDI5PVJpZ2h0Ci0gIGtleWNvZGUgMzA9S1Bf U2VwYXJhdG9yCi0gIGtleWNvZGUgMTA1PUtQX0Y0Ci0gIGtleWNvZGUgNzg9S1BfU3VidHJhY3QK LSAga2V5Y29kZSA4PUxlZnQKLSAga2V5Y29kZSAxMD1SaWdodAotICBrZXljb2RlIDMyPVVwCi0g IGtleWNvZGUgMzM9RG93bgotICBrZXljb2RlIDk3PUtQX0VudGVyCi0KLSAgICAgUHV0IHRoaXMg aW4gYSBmaWxlIC0gSSB1c2UgImtleWRlZnMiIGluIG15IGhvbWUgZGlyZWN0b3J5IGFuZCBmZWVk Ci0gICAgIGl0IGludG8geG1vZG1hcDoKLQotICB4bW9kbWFwIC0gPCRIT01FL2tleWRlZnMKLQot ICAgICBUaGlzIHRha2VzIGNhcmUgb2YgdGhlIGFycm93IGtleXMgYW5kIHRoZSAiY2FsY3VsYXRv ciIga2V5IGNsdXN0ZXIuCi0gICAgIFRoZSAiKyIga2V5IHdpbGwgcGxheSB0aGUgcm9sZSBvZiB0 aGUgREVDICIsIiBrZXkuIFRoZSBTdW4gIi0iIGtleQotICAgICB3aWxsIGJlIGxpa2UgdGhlIERF QyAiLSIga2V5LCB0aG91Z2ggaXQncyBpbiBhIHBoeXNpY2FsbHkgZGlmZmVyZW50Ci0gICAgIHBv c2l0aW9uIC0gd2hlcmUgdGhlIERFQyBQRjQga2V5IGlzLiBUaGUgUEY0IGtleSBpcyAuLi4gZGFt biwgSSdtCi0gICAgIG5vdCBzdXJlIHdoZXJlICJrZXkgMTA1IiBpcy4gSSAqdGhpbmsqIGl0IG1h eSBiZSBvbiB0aGUgbGVmdG1vc3Qga2V5Ci0gICAgIG9mIHRoZSBncm91cCBvZiBmb3VyIGp1c3Qg YWJvdmUgdGhlICJjYWxjdWxhdG9yIiBrZXkgY2x1c3Rlci4KLQotICAgICBJIGFsc28gZXhlY3V0 ZSB0aGUgZm9sbG93aW5nICh0aGlzIGlzIGFsbCBpbiBteSB4aW5pdHJjIGZpbGUpOgotCi0gIHht b2RtYXAgLWUgJ2tleXN5bSBLUF9EZWNpbWFsID0gS1BfRGVjaW1hbCcKLSAgeG1vZG1hcCAtZSAn a2V5c3ltIEJhY2tTcGFjZSA9IERlbGV0ZSBCYWNrU3BhY2UnIFwKLSAgICAgICAgICAtZSAna2V5 c3ltIERlbGV0ZSA9IEJhY2tTcGFjZSBEZWxldGUnCi0gIHhtb2RtYXAgLWUgJ2tleXN5bSBLUF9E ZWNpbWFsID0gRGVsZXRlIERlbGV0ZSBLUF9EZWNpbWFsJwotICB4bW9kbWFwIC1lICdhZGQgbW9k MSA9IE1ldGFfUicKLSAgeG1vZG1hcCAtZSAnYWRkIG1vZDEgPSBNZXRhX0wnCi0KLSAgICAgQmV3 YXJlIG9mIG9uZSB0aGluZyBhYm91dCB4bW9kbWFwOiBLZXltYXAgY2hhbmdlcyBhcmUgYXBwbGll ZCB0byB0aGUKLSAgICAgKndob2xlIHdvcmtzdGF0aW9uKiwgbm90IGp1c3QgdG8gaW5kaXZpZHVh bCB3aW5kb3dzLiBUaGVyZSBpcywgaW4KLSAgICAgZmFjdCwgbm8gd2F5IEkga25vdyBvZiB0byBh cHBseSB0aGVtIHRvIGluZGl2aWR1YWwgd2luZG93cy4gVGhlc2UKLSAgICAgZGVmaW5pdGlvbnMg Km1heSogY29uZnVzZSBzb21lIFVuaXggcHJvZ3JhbXMgKGFuZC9vciBzb21lIFVuaXgKLSAgICAg dXNlcnMpLgotCi0gICAgIElmIHlvdSdyZSB1c2luZyBNb3RpZiwgeW91IG1heSBhbHNvIG5lZWQg dG8gYXBwbHkgYmluZGluZ3MgYXQgdGhlCi0gICAgIE1vdGlmIGxldmVsLiBJZiBqdXN0IHVzaW5n IHhtb2RtYXAgZG9lc24ndCB3b3JrLCBJIGNhbiB0cnkgYW5kIGRpZwotICAgICB0aGF0IHN0dWZm IHVwIGZvciB5b3UuCi0KLTMuNy41LiBTb2xhcmlzIFBQUCBDb25uZWN0aW9ucwotCi0gICBbIFs0 NDhdVG9wIF0gWyBbNDQ5XUNvbnRlbnRzIF0gWyBbNDUwXVNlY3Rpb24gQ29udGVudHMgXSBbIFs0 NTFdTmV4dCBdCi0gICBbIFs0NTJdUHJldmlvdXMgXQotCi0gICBUaGUgZm9sbG93aW5nIGlzIGEg cmVwb3J0IGZyb20gYSB1c2VyIG9mIEMtS2VybWl0IDguMCBvbiBTb2xhcmlzIDggYW5kCi0gICA5 LCB3aG8gaGFkIGNvbXBsYWluZWQgdGhhdCB3aGlsZSBLZXJtaXQgZmlsZSB0cmFuc2ZlcnMgd29y a2VkIHBlcmZlY3RseQotICAgb24gZGlyZWN0IChub24tUFBQKSBkaWFsb3V0IGNvbm5lY3Rpb25z LCB0aGV5IGZhaWxlZCBtaXNlcmFibHkgb24gUFBQCi0gICBjb25uZWN0aW9ucy4gV2Ugc3VnZ2Vz dGVkIHRoYXQgdGhlIFBQUCBkaWFsZXIgcHJvYmFibHkgd2FzIG5vdCBzZXR0aW5nCi0gICB0aGUg cG9ydCBhbmQvb3IgbW9kZW0gdXAgaW4gdGhlIHNhbWUgd2F5IHRoYXQgS2VybWl0IGRpZDoKLQot ICAgICBJIHdhbnQgdG8gZ2V0IGJhY2sgb24gdGhpcyBhbmQgdGVsbCB5b3Ugd2hhdCB0aGUgcmVz b2x1dGlvbiB3YXMuIFlvdQotICAgICBwb2ludGVkIG1lIGluIHRoZSBkaXJlY3Rpb24gb2YgZmxv dyBjb250cm9sLCB3aGljaCB0dXJuZWQgb3V0IHRvIGJlCi0gICAgIHRoZSBrZXkuCi0KLSAgICAg U29tZSBkaXNjdXNzaW9uIG9uIHRoZSBjb21wLnVuaXguc29sYXJpcyBuZXdzZ3JvdXAgbGVkIHRv IHNvbWUKLSAgICAgY29tbWVudHMgZnJvbSBHcmVnIEFuZHJld3MgYWJvdXQgdGhlIG5lZWQgdG8g dXNlIHRoZSB1dWNwIGRyaXZlciB0bwotICAgICB0YWxrIHRvIHRoZSBtb2RlbSAoL2Rldi9jdWEv YSkuIEkgaGFkIHRvIHJlbWluZCBHcmVnIHRoYXQgbm8gbWF0dGVyCi0gICAgIHdoYXQgdGhlIG1h bnBhZ2VzIGZvciB0aGUgenMgYW5kIHNlIGRyaXZlcnMgc2F5LCB0aGUgcHBwIHRoYXQgU3VuCi0g ICAgIHJlbGVhc2VkIHdpdGggU29sYXJpcyA4IDcvMDEsIGFuZCBoYXMgaW4gU29sYXJpcyA5LCBp cyBhIHNldHVpZCByb290Ci0gICAgIHByb2dyYW0sIGFuZCBzaW1wbHkgdHJ5aW5nIHRvIG1ha2Ug YSBwcHBkIGNhbGwgZnJvbSB1c2VyIHNwYWNlCi0gICAgIHNwZWNpZnlpbmcgL2Rldi9jdWEvYSB3 b3VsZCBmYWlsIGJlY2F1c2Ugb2YgcGVybWlzc2lvbnMuIEdyZWcKLSAgICAgZmluYWxseSBwdXQg dGhlIHF1ZXN0aW9uIHRvIHRoZSBwcHAgcGVvcGxlLCB3aG8gY2FtZSBiYWNrIHdpdGgKLSAgICAg aW5mb3JtYXRpb24gdGhhdCBpcyBub3QgbGFpZCBvdXQgYW55d2hlcmUgaW4gdGhlIGRvY3MgYXZh aWxhYmxlIGZvcgotICAgICBTb2xhcmlzIHVzZXJzLiBOYW1lbHksIHB1dCAvZGV2L2N1YS9hIGlu IG9uZSBvZiB0aGUgcHJpdmlsZWdlZAotICAgICBvcHRpb25zIGZpbGVzIGluIHRoZSAvZXRjL3Bw cCBkaXJlY3RvcnkuIFRoYXQsIHBsdXMgcmVzZXR0aW5nIHRoZQotICAgICBPQlAgdHR5YS1pZ25v cmUtY2QgZmxhZyAodGhpcyBpcyBTdW4gaGFyZHdhcmUpIHRvIGZhbHNlLCBzZWVtcyB0bwotICAg ICBoYXZlIHNvbHZlZCB0aGUgcHJvYmxlbXMuCi0KLSAgICAgV2hpbGUgSSBub3RlIHRoYXQgSSBo YWQgaW5zdGFsbGVkIEtlcm1pdCBzdWlkIHRvIHV1Y3AgdG8gdXNlCi0gICAgIC9kZXYvY3VhL2Eg b24gdGhpcyBwYXJ0aWN1bGFyIGJveCwgaXQgc2VlbXMgdG8gcnVuIGZpbmUgdGhyb3VnaAotICAg ICAvZGV2L3Rlcm0vYS4gTm90IHNvIHdpdGggcHBwZC4KLQotICAgICBXaXRoIHRoaXMgY2hhbmdl IGluIHBsYWNlLCBJIHNlZW0gdG8gYmUgYWJsZSB0byB1cGxvYWQgYW5kIGRvd25sb2FkCi0gICAg IHRocm91Z2ggdGVsbmV0IHJ1biBvbiBLZXJtaXQgd2l0aCB0aGUgbWF4aW11bSBsZW5ndGggcGFj a2V0cy4gSSBub3RlCi0gICAgIHRoYXQgdGhlIHdpbmRvdyBhbGxvY2F0aW9uIGRpc3BsYXkgZG9l cyBzaG93IFNUUkVBTUlORywgdXNpbmcKLSAgICAgdGVsbmV0LiBSdW5uaW5nIHNzaCBvbiBLZXJt aXQsIEkgc2VlIHRoZSBzdGFuZGFyZCAxIG9mIDMwIHdpbmRvd3MKLSAgICAgZGlzcGxheSwgYW5k IG5vdGUgdGhhdCB0aGVyZSBhcHBlYXJzIHRvIGJlIGEgYnVmZmVyIGxlbmd0aCBsaW1pdAotICAg ICBiZXR3ZWVuIDEwMDAgYW5kIDIwMDAgYnl0ZXMuIFJ1biB3aXRoIDEwMDAsIGFuZCBpdCdzIHRp Y2stdG9jaywKLSAgICAgc29saWQgYXMgYSByb2NrLiBXaXRoIDIwMDAgSSBzZWUgdGltZW91dCBl cnJvcnMgYW5kIFJUUy9DVFMgYWN0aW9uCi0gICAgIG9uIHRoZSBtb2RlbS4KLQotICAgS2VybWl0 J3MgcGFja2V0LWxlbmd0aCBhbmQgb3RoZXIgY29udHJvbHMgbGV0IHlvdSBtYWtlIGFkanVzdG1l bnRzIGxpa2UKLSAgIHRoaXMgdG8gZ2V0IGFyb3VuZCB3aGF0ZXZlciBvYnN0YWNsZXMgbWlnaHQg YmUgdGhyb3duIHVwIC0tIGluIHRoaXMKLSAgIGNhc2UgKHJ1bm5pbmcgS2VybWl0IG92ZXIgc3No KSwgdGhlIHVuZGVybGluZyBTb2xhcmlzIFBUWSBkcml2ZXIuCi0KLTMuNy42LiBTb2xhcmlzIDIu NCBhbmQgRWFybGllcgotCi0gICBbIFs0NTNdVG9wIF0gWyBbNDU0XUNvbnRlbnRzIF0gWyBbNDU1 XVNlY3Rpb24gQ29udGVudHMgXSBbCi0gICBbNDU2XVByZXZpb3VzIF0KLQotICAgQy1LZXJtaXQg Y2FuJ3QgYmUgY29tcGlsZWQgc3VjY2Vzc2Z1bGx5IHVuZGVyIFNvbGFyaXMgMi4zIHVzaW5nCi0g ICBTVU5Xc3BybyBjYyAyLjAuMSB1bmxlc3MgYXQgbGVhc3Qgc29tZSBvZiB0aGUgZm9sbG93aW5n IHBhdGNoZXMgYXJlCi0gICBhcHBsaWVkIHRvIGNjIChpdCBpcyBub3Qga25vd24gd2hpY2ggb25l KHMpLCBpZiBhbnksIGZpeCB0aGUgcHJvYmxlbSk6Ci0KLSAgICAgKiAxMDA5MzUtMDEgU3BhcmND b21waWxlciBDIDIuMC4xOiBiYWQgY29kZSBnZW5lcmF0ZWQgd2hlbiBhZGRyZXNzZXMKLSAgICAg ICBvZiB0d28gZG91YmxlIGFyZ3VtZW50cyBhcmUgaW52b2x2ZWQKLSAgICAgKiAxMDA5NjEtMDUg U1BBUkNjb21waWxlcnMgQyAyLjAuMTogY29uZGl0aW9uYWwgZXhwcmVzc2lvbiB3aXRoCi0gICAg ICAgZnVuY3Rpb24gcmV0dXJuaW5nIHN0cnVjdHVyZSBnaXZlcyB3cm9uZyB2YWx1ZQotICAgICAq IDEwMDk3NC0wMSBTcGFyY1dvcmtzIDIuMC4xOiBkYngganVtYm8gcGF0Y2gKLSAgICAgKiAxMDE0 MjQtMDEgU1BBUkN3b3JrcyAyLjAuMSBtYWtldG9vbCBTRUdWJ3MgaW5zdGFudGx5IG9uIFNvbGFy aXMgMi4zCi0KLSAgIFdpdGggdW5wYXRjaGVkIGNjIDIuMC4xLCB0aGUgc3ltcHRvbSBpcyB0aGF0 IGNlcnRhaW4gbW9kdWxlcyBnZW5lcmF0ZQotICAgdHJ1bmNhdGVkIG9iamVjdCBmaWxlcywgcmVz dWx0aW5nIGluIG1hbnkgdW5yZXNvbHZlZCByZWZlcmVuY2VzIGF0IGxpbmsKLSAgIHRpbWUuCi0K LSAgICAgVGhlIHJlc3Qgb2YgdGhlIHByb2JsZW1zIGluIHRoaXMgc2VjdGlvbiBoYXZlIHRvIGRv IHdpdGgKLSAgICAgYmlkaXJlY3Rpb25hbCB0ZXJtaW5hbCBwb3J0cyBhbmQgdGhlIFNvbGFyaXMg UG9ydCBNb25pdG9yLiBBIGJ1ZyBpbgotICAgICBDLUtlcm1pdCA1QSB0aWNrZWQgYSBidWcgaW4g U29sYXJpcy4gVGhlIEMtS2VybWl0IGJ1ZyB3YXMgZml4ZWQgaW4KLSAgICAgdmVyc2lvbiA2LjAs IGFuZCB0aGUgU29sYXJpcyBidWcgd2FzIGZpeGVkIGluIDIuNCAoSSB0aGluaywgb3IgbWF5YmUK LSAgICAgMi41KS4KLQotICAgUmVwb3J0ZWRseSwgIkMtS2VybWl0IC4uLiBjYXVzZXMgYSBTUEFS Q3N0YXRpb24gcnVubmluZyBTb2xhcmlzIDIuMyB0bwotICAgcGFuaWMgYWZ0ZXIgdGhlIG1vZGVt IGNvbm5lY3RzLiBJIGhhdmUgdHJpZWQgY29tcGlsaW5nIEMtS2VybWl0IHdpdGgKLSAgIFN1bidz IHVuYnVuZGxlZCBDIGNvbXBpbGVyLCB3aXRoIEdDQyBWZXJzaW9ucyAyLjQuNSBhbmQgMi41LjMs IHdpdGgKLSAgIG1ha2UgdGFyZ2V0cyAnc3Vub3M1MScsICdzdW5vczUxdGNwJywgJ3N1bm9zNTFn Y2MnLCBhbmQgZXZlbiAnc3lzNXI0JywKLSAgIGFuZCBlYWNoIHRpbWUgaXQgY29tcGlsZXMgYW5k IHN0YXJ0cyB1cCBjbGVhbmx5LCBidXQgd2l0aG91dCBmYWlsLCBhcwotICAgc29vbiBhcyBJIGRp YWwgdGhlIG51bWJlciBhbmQgZ2V0IGEgJ0NPTk5FQ1QnIG1lc3NhZ2UgZnJvbSB0aGUgbW9kZW0s IEkKLSAgIGdldDoKLQotICBCQUQgVFJBUAotICBrZXJtaXQ6IERhdGEgZmF1bHQKLSAga2VybmVs IHJlYWQgZmF1bHQgYXQgYWRkcj0weDQ1YywgcG1lPTB4MAotICBTeW5jIEVycm9yIFJlZyA4MCA8 SU5WQUxJRD4KLSAgLi4uCi0gIHBhbmljOiBEYXRhIEZhdWx0LgotICAuLi4KLSAgUmVib290aW5n Li4uCi0KLSAgIFRoZSBzYW1lIG1vZGVtIHdvcmtzIGZpbmUgZm9yIFVVQ1AvdGlwIGNhbGxpbmcu IiBBbHNvIChyZXBvcnRlZGx5KSwKLSAgIHRoaXMgb25seSBoYXBwZW5zIGlmIHRoZSBkaWFsb3V0 IHBvcnQgaXMgY29uZmlndXJlZCBhcyBpbi9vdXQgdmlhCi0gICBhZG1pbnRvb2wuIElmIGl0IGlz IGNvbmZpZ3VyZWQgYXMgb3V0LW9ubHksIG5vIHByb2JsZW0uIFRoaXMgaXMgdGhlCi0gICBzYW1l IGRpYWxpbmcgY29kZSB0aGF0IHdvcmtzIG9uIGh1bmRyZWRzIG9mIG90aGVyIFN5c3RlbS1WIGJh c2VkIFVuaXgKLSAgIE9TJ3MuIFNpbmNlIGl0IHNob3VsZCBiZSBpbXBvc3NpYmxlIGZvciBhIHVz ZXIgcHJvZ3JhbSB0byBjcmFzaCB0aGUKLSAgIG9wZXJhdGluZyBzeXN0ZW0sIHRoaXMgcHJvYmxl bSBtdXN0IGJlIGNoYWxrZWQgdXAgdG8gYSBTb2xhcmlzIGJ1Zy4KLSAgIEV2ZW4gaWYgeW91IFNF VCBDQVJSSUVSIE9GRiwgQ09OTkVDVCwgYW5kIGRpYWwgbWFudWFsbHkgYnkgdHlwaW5nCi0gICBB VERUbm5ubm5ubiwgdGhlIHN5c3RlbSBwYW5pY3MgYXMgc29vbiBhcyB0aGUgbW9kZW0gaXNzdWVz IGl0cyBDT05ORUNUCi0gICBtZXNzYWdlLiAoQ2xlYXJseSwgd2hlbiB5b3UgYXJlIGRpYWxpbmcg bWFudWFsbHksIEMtS2VybWl0IGRvZXMgbm90Ci0gICBrbm93IGEgdGhpbmcgYWJvdXQgdGhlIENP Tk5FQ1QgbWVzc2FnZSwgYW5kIHNvIHRoZSBwYW5pYyBpcyBhbG1vc3QKLSAgIGNlcnRhaW5seSBj YXVzZWQgYnkgdGhlIHRyYW5zaXRpb24gb2YgdGhlIENhcnJpZXIgRGV0ZWN0IChDRCkgbGluZSBm cm9tCi0gICBvZmYgdG8gb24uKSBUaGlzIHByb2JsZW0gd2FzIHJlcG9ydGVkIGJ5IG1hbnkgdXNl cnMsIGFsbCBvZiB3aG9tIHNheQotICAgdGhhdCBDLUtlcm1pdCB3b3JrZWQgZmluZSBvbiBTb2xh cmlzIDIuMSBhbmQgMi4yLiBJZiB0aGUgc3BlY3VsYXRpb24KLSAgIGFib3V0IENEIGlzIHRydWUs IHRoZW4gYSBwb3NzaWJsZSB3b3JrYXJvdW5kIG1pZ2h0IGJlIHRvIGNvbmZpZ3VyZSB0aGUKLSAg IG1vZGVtIHRvIGxlYXZlIENEIG9uIChvciBvZmYpIGFsbCB0aGUgdGltZS4gUGVyaGFwcyBieSB0 aGUgdGltZSB5b3UKLSAgIHJlYWQgdGhpcywgYSBwYXRjaCB3aWxsIGhhdmUgYmVlbiBpc3N1ZWQg Zm9yIFNvbGFyaXMgMi4zLgotCi0gICBUaGUgZm9sbG93aW5nIGlzIGZyb20gS2FybCBTLiBNYXJz aCwgU3lzdGVtcyAmIE5ldHdvcmtzIEFkbWluaXN0cmF0b3IsCi0gICBBTUJJWCBTeXN0ZW1zIENv cnAsIFJvY2hlc3RlciwgTlk6Ci0KLSAgICAgRW52aXJvbm1lbnQ6IFNvbGFyaXMgMi4zIFBhdGNo IDEwMTMxOC00NSBDLUtlcm1pdCA1QSgxODkpIChhbmQKLSAgICAgcHJlc3VtYWJseSB0aGlzIGFw cGxpZXMgdG8gMTg4IGFuZCAxOTAgYWxzbykuIGVlcHJvbSBzZXR0aW5nOgotCi0gIHR0eWEtcnRz LWR0ci1vZmY9ZmFsc2UKLSAgdHR5YS1pZ25vcmUtY2Q9ZmFsc2UKLSAgdHR5YS1tb2RlPTE5MjAw LDgsbiw4LC0KLQotICAgICBUbyB1c2UgQy1LZXJtaXQgb24gYSBiaWRpcmVjdGlvbmFsIHBvcnQg aW4gdGhpcyBlbnZpcm9ubWVudCwgZG8gbm90Ci0gICAgIHVzZSBhZG1pbnRvb2wgdG8gY29uZmln dXJlIHRoZSBwb3J0LiBVc2UgYWRtaW50b29sIHRvIGRlbGV0ZSBhbnkKLSAgICAgc2VydmljZXMg cnVubmluZyBvbiB0aGUgcG9ydCBhbmQgdGhlbiBxdWl0IGFkbWludG9vbCBhbmQgaXNzdWUgdGhl Ci0gICAgIGZvbGxvd2luZyBjb21tYW5kOgotCi0gIHBtYWRtIC1hIC1wIHpzbW9uIC1zIHR0eWIg LWkgcm9vdCAtZnUgLXYgMSAtbSAiYHR0eWFkbSAtYiAtZCAvZGV2L3Rlcm0vYiBcCi0gIC1sIGNv bnR0eUggLW0gbGR0ZXJtLHR0Y29tcGF0IC1zIC91c3IvYmluL2xvZ2luIC1TIG5gIgotCi0gICAg IFtOT1RFOiBUaGlzIHdhcyBjb3BpZWQgZnJvbSBhIGJsdXJyeSBmYXgsIHNvIHBsZWFzZSBjaGVj ayBpdAotICAgICBjYXJlZnVsbHldIHdoZXJlOgotCi0gIC1hID0gQWRkIHNlcnZpY2UKLSAgLXAg PSBwbXRhZyAoenNtb24pCi0gIC1zID0gc2VydmljZSB0YWcgKHR0eWIpCi0gIC1pID0gaWQgdG8g YmUgYXNzb2NpYXRlZCB3aXRoIHNlcnZpY2UgdGFnIChyb290KQotICAtZnUgPSBjcmVhdGUgdXRt cCBlbnRyeQotICAtdiA9IHZlcnNpb24gb2YgdHR5YWRtCi0gIC1tID0gcG9ydCBtb25pdG9yLXNw ZWNpZmljIHBvcnRpb24gb2YgdGhlIHBvcnQgbW9uaXRvciBhZG1pbmlzdHJhdGl2ZSBmaWxlCi0g ICAgICAgZW50cnkgZm9yIHRoZSBzZXJ2aWNlCi0gIC1iID0gc2V0IHVwIHBvcnQgZm9yIGJpZGly ZWN0aW9uYWwgdXNlCi0gIC1kID0gZnVsbCBwYXRoIG5hbWUgb2YgZGV2aWNlCi0gIC1sID0gd2hp Y2ggdHR5bGFiZWwgaW4gdGhlIC9ldGMvdHR5ZGVmcyBmaWxlIHRvIHVzZQotICAtbSA9IGEgbGlz dCBvZiBwdXNoYWJsZSBTVFJFQU1TIG1vZHVsZXMKLSAgLXMgPSBwYXRobmFtZSBvZiBzZXJ2aWNl IHRvIGJlIGludm9rZWQgd2hlbiBjb25uZWN0aW9uIHJlcXVlc3QgcmVjZWl2ZWQKLSAgLVMgPSBz b2Z0d2FyZSBjYXJyaWVyIGRldGVjdCBvbiBvciBvZmYgKG4gPSBvZmYpCi0KLSAgICAgIlRoaXMg aXMgZXhhY3RseSBob3cgSSB3YXMgYWJsZSB0byBnZXQgS2VybWl0IHRvIHdvcmsgb24gYQotICAg ICBiaS1kaXJlY3Rpb25hbCBwb3J0IHdpdGhvdXQgY3Jhc2hpbmcgdGhlIHN5c3RlbS4iCi0KLSAg IE9uIHRoZSBTb2xhcmlzIHByb2JsZW0sIGFsc28gc2VlIFN1blNvbHZlIEJ1ZyBJRCAxMTUwNDU3 ICgiVXNpbmcKLSAgIEMtS2VybWl0LCBnZXQgQmFkIFRyYXAgb24gcmVjZWl2aW5nIHByb21wdCBm cm9tIHJlbW90ZSBzeXN0ZW0iKS4KLSAgIEFub3RoZXIgdXNlciByZXBvcnRlZCAiU28sIEkgaGF2 ZSBjb21tdW5pY2F0ZWQgd2l0aCB0aGUgU3VuIHRlY2gKLSAgIHN1cHBvcnQgcGVyc29uIHRoYXQg c3VibWl0dGVkIHRoaXMgYnVnIHJlcG9ydCBbMTE1MDQ1N10uIEFwcGFyZW50bHksCi0gICB0aGlz IGJ1ZyB3YXMgZml4ZWQgdW5kZXIgb25lIG9mIHRoZSBqdW1ibyBrZXJuZWwgcGF0Y2hlcy4gSXQg d291bGQgc2VlbQotICAgdGhhdCB0aGUgZml4IGRpZCBub3QgbGl2ZSBvbiBpbnRvIDEwMTMxOC00 NSwgYXMgdGhpcyBpcyBFWEFDVExZIHRoZQotICAgZXJyb3IgdGhhdCBJIHNlZSB3aGVuIEkgYXR0 ZW1wdCB0byB1c2Uga2VybWl0IG9uIG15IHN5c3RlbS4iCi0KLSAgIExhdGVyIChBdWcgOTQpLi4u IEMtS2VybWl0IGRpYWxvdXQgc3VjY2Vzc2Z1bGx5IHRlc3RlZCBvbiBhIFN1bjRtIHdpdGgKLSAg IGEgaGVhdmlseSBwYXRjaGVkIFNvbGFyaXMgMi4zLiBUaGUgcGF0Y2hlcyBtb3N0IGxpa2VseSB0 byBoYXZlIGJlZW4KLSAgIHJlbGV2YW50OgotCi0gICAgICogMTAxMzE4LTUwOiBTdW5PUyA1LjM6 IEp1bWJvIHBhdGNoIGZvciBrZXJuZWwgKGluY2x1ZGVzIGxpYmMsIGxvY2tkKQotICAgICAqIDEw MTcyMC0wMTogU3VuT1MgNS4zOiB0dHltb24gLSBwcm9tcHQgbm90IGFsd2F5cyB2aXNpYmxlIG9u IGEgbW9kZW0KLSAgICAgICBjb25uZWN0aW9uCi0gICAgICogMTAxODE1LTAxOiBTdW5PUyA1LjM6 IERhdGEgZmF1bHQgaW4gcHV0KCkgTlVMTCBxdWV1ZSBwYXNzZWQgZnJvbQotICAgICAgIHR0eWNv bW1vbl9xZnVsbCgpCi0gICAgICogMTAxMzI4LTAxOiBTdW5PUyA1LjM6IEF1dG9tYXRpb24gc2Ny aXB0IHRvIHByb3Blcmx5IHNldHVwIHR0eSBwb3J0cwotICAgICAgIHByaW9yIHRvIFBDVFMgZXhl Y3V0aW9uCi0KLSAgIFN0aWxsIGxhdGVyIChOb3YgOTQpOiBhbm90aGVyIHVzZXIgKEJvIEt1bGxt YXIgaW4gU3dlZGVuKSByZXBvcnRzIHRoYXQKLSAgIGFmdGVyIHVzaW5nIEMtS2VybWl0IHRvIGRp YWwgb3V0IG9uIGEgYmlkaXJlY3Rpb25hbCBwb3J0LCB0aGUgcG9ydAotICAgbWlnaHQgbm90IGFu c3dlciBzdWJzZXF1ZW50IGluY29taW5nIGNhbGxzLCBhbmQgc2F5cyAidGhlIHByb2JsZW0gaXMK LSAgIGVhc3kgZW5vdWdoIHRvIGZpeCB3aXRoIHRoZSBTZXJpYWwgUG9ydCBNYW5hZ2VyOyBJIGp1 c3QgZGVsZXRlIHRoZQotICAgc2VydmljZSBhbmQgaW5zdGFsbCBpdCBhZ2FpbiB1c2luZyB0aGUg Z3JhcGhpY2FsIGludGVyZmFjZSwgd2hpY2gKLSAgIHVuZGVybmVhdGggdXNlcyBjb21tYW5kcyBs aWtlIHNhY2FkbSBhbmQgcG1hZG0uIiBMYXRlciBCbyByZXBvcnRzLCAiSQotICAgaGF2ZSBmb3Vu ZCB0aGF0IGlmIEkgcnVuIEtlcm1pdCB3aXRoIHRoZSBmb2xsb3dpbmcgc2NyaXB0IHRoZW4gaXQK LSAgIHdvcmtzLiBUaGlzIHNjcmlwdCBpcyBmb3IgL2Rldi9jdWEvYSwgIi1zIGEiIGlzIHRoZSBs YXN0IGEgaW4KLSAgIC9kZXYvY3VhL2E6Ci0KLSAgIyEgL2Jpbi9zaAotICBrZXJtaXQKLSAgc2xl ZXAgMgotICBzdXJ1biBwbWFkbSAtZSAtcCB6c21vbiAtcyBhCi0KLTMuOC4gQy1LRVJNSVQgQU5E IFNVTk9TCi0KLSAgIFsgWzQ1N11Ub3AgXSBbIFs0NThdQ29udGVudHMgXSBbIFs0NTldU2VjdGlv biBDb250ZW50cyBdIFsgWzQ2MF1OZXh0IF0KLSAgIFsgWzQ2MV1QcmV2aW91cyBdCi0KLSAgIEZv ciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBzZWUgIkNlbGVzdGUncyBUdXRvcmlhbCBvbiBTdW5P UyA0LjEuMysKLSAgIE1vZGVtcyBhbmQgVGVybWluYWxzIjoKLQotICBbNDYyXWh0dHA6Ly93d3cu c3Rva2VseS5jb20vCi0KLSAgIEZvciBGQVFzLCBldGMsIGZyb20gU3VuLCBzZWU6Ci0gICAgICog WzQ2M11odHRwOi8vYWNjZXNzMS5zdW4uY29tLwotCi0gICBGb3IgaGlzdG9yeSBvZiBTdW4gbW9k ZWxzIGFuZCBTdW5PUyB2ZXJzaW9ucywgc2VlIChzaG91bGQgYmUgYWxsIHRoZQotICAgc2FtZSk6 Ci0gICAgICogWzQ2NF1odHRwOi8vd3d3Lmx1ZGQubHV0aC5zZS9+YmVhci9wcm9qZWN0L3N1bi9z dW4uaGFyZHdhcmUudHh0Ci0gICAgICogWzQ2NV1mdHA6Ly9mdHAubmV0Y29tLmNvbS9wdWIvcnUv cnViaWNvbi9zdW4uaGR3ci5yZWYKLSAgICAgKiBbNDY2XWZ0cDovL2Z0cC5pbnRuZXQubmV0L3B1 Yi9TVU4vU3VuLUhhcmR3YXJlLVJlZgotCi0gICBTdW4gU1BBUkNzdGF0aW9uIHVzZXJzIHNob3Vs ZCByZWFkIHRoZSBzZWN0aW9uICJTZXR0aW5nIHVwIE1vZGVtCi0gICBTb2Z0d2FyZSIgaW4gdGhl IERlc2t0b3AgU1BBUkMgU3VuIFN5c3RlbSAmIE5ldHdvcmsgTWFuYWdlcidzIEd1aWRlLiBJZgot ICAgeW91IGRvbid0IHNldCB1cCB5b3VyIHNlcmlhbCBwb3J0cyBjb3JyZWN0bHksIEtlcm1pdCAo YW5kIG90aGVyCi0gICBjb21tdW5pY2F0aW9ucyBzb2Z0d2FyZSkgd29uJ3Qgd29yayByaWdodC4K LQotICAgQWxzbywgb24gY2VydGFpbiBTdW4gbW9kZWxzIGxpa2UgSVBDLCB0aGUgc2VyaWFsIHBv cnQgaGFyZHdhcmUgbWlnaHQKLSAgIG5lZWQgdG8gaGF2ZSBhIGp1bXBlciBjaGFuZ2VkIHRvIG1h a2UgaXQgYW4gUlMtMjMyIHBvcnQgcmF0aGVyIHRoYW4KLSAgIFJTLTQyMy4KLQotICAgUmVwb3J0 ZWRseSwgQy1LZXJtaXQgZG9lcyBub3Qgd29yayBjb3JyZWN0bHkgb24gYSBTdW4gU1BBUkNzdGF0 aW9uIGluCi0gICBhbiBPcGVuIFdpbmRvd3Mgd2luZG93IHdpdGggc2Nyb2xsaW5nIGVuYWJsZWQu IERpc2FibGUgc2Nyb2xsaW5nLCBvcgotICAgZWxzZSBpbnZva2UgS2VybWl0IGluIGEgdGVybWlu YWwgZW11bGF0aW9uIHdpbmRvdyAoeHRlcm0sIGNydHRvb2wsCi0gICB2dHRvb2wpIHVuZGVyIFN1 blZpZXcgKHRoaXMgbWlnaHQgYmUgZml4ZWQgaW4gbGF0ZXIgU3VuT1MgcmVsZWFzZXMpLgotCi0g ICBPbiB0aGUgU3VuIHdpdGggT3BlbiBXaW5kb3dzLCBhbiBhZGRpdGlvbmFsIHN5bXB0b20gaGFz IGJlZW4gcmVwb3J0ZWQ6Ci0gICBvdXRib3VuZCBTdW5MaW5rIFguMjUgY29ubmVjdGlvbnMgIm1h Z2ljYWxseSIgdHJhbnNsYXRlIENSIHR5cGVkIGF0IHRoZQotICAga2V5Ym9hcmQgaW50byBMRiBi ZWZvcmUgdHJhbnNtaXNzaW9uIHRvIHRoZSByZW1vdGUgaG9zdC4gVGhpcyBkb2Vzbid0Ci0gICBo YXBwZW4gdW5kZXIgU3VuVmlldy4KLQotICAgU0VUIENBUlJJRVIgT04sIHdoZW4gdXNlZCBvbiB0 aGUgU3VuT1MgNC4xIHZlcnNpb24gb2YgQy1LZXJtaXQKLSAgIChjb21waWxlZCBpbiB0aGUgQlNE IHVuaXZlcnNlKSwgY2F1c2VzIHRoZSBwcm9ncmFtIHRvIGhhbmcKLSAgIHVuaW50ZXJydXB0aWJs eSB3aGVuIFNFVCBMSU5FIGlzIGlzc3VlZCBmb3IgYSBkZXZpY2UgdGhhdCBpcyBub3QKLSAgIGFz c2VydGluZyBjYXJyaWVyLiBXaGVuIEtlcm1pdCBpcyBidWlsdCBpbiB0aGUgU3lzIFYgdW5pdmVy c2Ugb24gdGhlCi0gICBzYW1lIGNvbXB1dGVyLCB0aGVyZSBpcyBubyBwcm9ibGVtIChpdCBjYW4g YmUgaW50ZXJydXB0ZWQgd2l0aCBDdHJsLUMpLgotICAgVGhpcyBpcyBhcHBhcmVudGx5IGEgbGlt aXRhdGlvbiBvZiB0aGUgQlNELXN0eWxlIHR0eSBkcml2ZXIuCi0KLSAgIFN1bk9TIDQuMSBDLUtl cm1pdCBoYXMgYmVlbiBvYnNlcnZlZCB0byBkdW1wIGNvcmUgd2hlbiBydW5uaW5nIGEKLSAgIGNv bXBsaWNhdGVkIHNjcmlwdCBwcm9ncmFtIHVuZGVyIGNyb24uIFRoZSBkdW1wIGludmFyaWFibHkg b2NjdXJzIGluCi0gICB0dG9jKCksIHdoaWxlIHRyeWluZyB0byBvdXRwdXQgYSBjaGFyYWN0ZXIg dG8gYSBUQ1AvSVAgVEVMTkVUCi0gICBjb25uZWN0aW9uLiB0dG9jKCkgY29udGFpbnMgYSB3cml0 ZSgpIGNhbGwsIGFuZCB3aGVuIHRoZSBzeXN0ZW0gb3IgdGhlCi0gICBuZXR3b3JrIGlzIHZlcnkg YnVzeSwgdGhlIHdyaXRlKCkgY2FsbCBjYW4gZ2V0IHN0dWNrIGZvciBsb25nIHBlcmlvZHMKLSAg IG9mIHRpbWUuIFRvIGJyZWFrIG91dCBvZiBkZWFkbG9ja3MgY2F1c2VkIGJ5IHN0dWNrIHdyaXRl KCkgY2FsbHMsIHRoZXJlCi0gICBpcyBhbiBhbGFybSBhcm91bmQgdGhlIHdyaXRlKCkuIEl0IGlz IHBvc3NpYmxlIHRoYXQgdGhlIGNvcmUgZHVtcAotICAgb2NjdXJzIHdoZW4gdGhpcyBhbGFybSBz aWduYWwgaXMgY2F1Z2h0LiAoVGhpcyBvbmUgaGFzIG5vdCBiZWVuCi0gICBvYnNlcnZlZCByZWNl bnRseSAtLSBwb3NzaWJseSBmaXhlZCBpbiBlZGl0IDE5MC4pCi0KLSAgIE9uIFN1biBjb21wdXRl cnMgd2l0aCBTdW5PUyA0LjAgb3IgNC4xLCBTRVQgRkxPVyBSVFMvQ1RTIHdvcmtzIG9ubHkgaWYK LSAgIHRoZSBjYXJyaWVyIHNpZ25hbCBpcyBwcmVzZW50IGZyb20gdGhlIGNvbW11bmljYXRpb24g ZGV2aWNlIGF0IHRoZSB0aW1lCi0gICB3aGVuIEMtS2VybWl0IGVudGVycyBwYWNrZXQgbW9kZSBv ciBDT05ORUNUIG1vZGUuIElmIGNhcnJpZXIgaXMgbm90Ci0gICBzZW5zZWQgKGUuZy4gd2hlbiBk aWFsaW5nKSwgQy1LZXJtaXQgZG9lcyBub3QgYXR0ZW1wdCB0byB0dXJuIG9uCi0gICBSVFMvQ1RT IGZsb3cgY29udHJvbC4gVGhpcyBpcyBiZWNhdXNlIHRoZSBTdW5PUyBzZXJpYWwgZGV2aWNlIGRy aXZlcgotICAgZG9lcyBub3QgYWxsb3cgY2hhcmFjdGVycyB0byBiZSBvdXRwdXQgaWYgUlRTL0NU UyBpcyBzZXQgKENSVFNDVFMpIGJ1dAotICAgY2FycmllciAoYW5kIERTUikgYXJlIG5vdCBwcmVz ZW50LiBXb3JrYXJvdW5kIChtYXliZSk6IFNFVCBDQVJSSUVSIE9GRgotICAgYmVmb3JlIGdpdmlu ZyB0aGUgU0VUIExJTkUgY29tbWFuZCwgZXN0YWJsaXNoIHRoZSBjb25uZWN0aW9uLCB0aGVuIFNF VAotICAgRkxPVyBSVFMvQ1RTCi0KLSAgIEl0IGhhcyBhbHNvIGJlZW4gcmVwb3J0ZWQgdGhhdCBS VFMvQ1RTIGZsb3cgY29udHJvbCB1bmRlciBTdW5PUyA0LjEKLSAgIHRocm91Z2ggNC4xLjMgd29y a3Mgb25seSBvbiBJTlBVVCwgbm90IG9uIG91dHB1dCwgYW5kIHRoYXQgdGhlcmUgaXMgYQotICAg cGF0Y2ggZnJvbSBTdW4gdG8gY29ycmVjdCB0aGlzIHByb2JsZW06IFBhdGNoLUlEIyBUMTAwNTEz LTA0LCAyMCBKdWx5Ci0gICAxOTkzICh0aGlzIHBhdGNoIG1pZ2h0IGFwcGx5IG9ubHkgdG8gU3Vu T1MgNC4xLjMpLiBJdCBtaWdodCBhbHNvIGJlCi0gICBuZWNlc3NhcnkgdG8gY29uZmlndXJlIHRo ZSBlZXByb20gcGFyYW1ldGVycyBvZiB0aGUgc2VyaWFsIHBvcnQ7IGUuZy4KLSAgIGRvIHRoZSBm b2xsb3dpbmcgYXMgcm9vdCBhdCB0aGUgc2hlbGwgcHJvbXB0OgotCi0gIGVlcHJvbSAgdHR5YS1p Z25vcmUtY2Q9ZmFsc2UKLSAgZWVwcm9tICB0dHlhLXJ0cy1kdHItb2ZmPXRydWUKLQotICAgVGhl cmUgaGF2ZSBiZWVuIHJlcG9ydHMgb2YgZmlsZSB0cmFuc2ZlciBmYWlsdXJlcyBvbiBTdW4tMyBz eXN0ZW1zIHdoZW4KLSAgIHVzaW5nIGxvbmcgcGFja2V0cyBhbmQvb3IgbGFyZ2Ugd2luZG93IHNp emVzLiBPbmUgdXNlciBzYXlzIHRoYXQgd2hlbgotICAgdGhpcyBoYXBwZW5zLCB0aGUgY29uc29s ZSBpc3N1ZXMgbWFueSBjb3BpZXMgb2YgdGhpcyBtZXNzYWdlOgotCi0gIGNoYW9zIHZtdW5peDog enMxOiByaW5nIGJ1ZmZlciBvdmVyZmxvdwotCi0gICBUaGlzIG1lYW5zIHRoYXQgU3VuT1MgaXMg bm90IHNjaGVkdWxpbmcgS2VybWl0IGZyZXF1ZW50bHkgZW5vdWdoIHRvCi0gICBzZXJ2aWNlIGlu dGVycnVwdHMgZnJvbSB0aGUgenMgc2VyaWFsIGRldmljZSAoWmlsb2cgODM1MCBTQ0Mgc2VyaWFs Ci0gICBjb21tdW5pY2F0aW9uIHBvcnQpIGJlZm9yZSBpdHMgaW5wdXQgc2lsbyBvdmVyZmxvd3Mu IFdvcmthcm91bmQ6IHVzZQotICAgc21hbGxlciBwYWNrZXRzIGFuZC9vciBhIHNtYWxsZXIgd2lu ZG93IHNpemUsIG9yIHVzZSAibmljZSIgdG8gaW5jcmVhc2UKLSAgIEtlcm1pdCdzIHByaW9yaXR5 LiBVc2UgaGFyZHdhcmUgZmxvdyBjb250cm9sIGlmIGF2YWlsYWJsZSwgb3IgcmVtb3ZlCi0gICBv dGhlciBhY3RpdmUgcHJvY2Vzc2VzIGJlZm9yZSBydW5uaW5nIEtlcm1pdC4KLQotICAgU3VuTGlu ayBYLjI1IHN1cHBvcnQgaW4gQy1LZXJtaXQgNUEoMTkwKSB3YXMgYnVpbHQgYW5kIHRlc3RlZAot ICAgc3VjY2Vzc2Z1bGx5IHVuZGVyIFN1bk9TIDQuMS4zYiBhbmQgU3VuTGluayBYLjI1IDcuMDAu Ci0KLTMuOS4gQy1LRVJNSVQgQU5EIFVMVFJJWAotCi0gICBbIFs0NjddVG9wIF0gWyBbNDY4XUNv bnRlbnRzIF0gWyBbNDY5XVNlY3Rpb24gQ29udGVudHMgXSBbIFs0NzBdTmV4dCBdCi0gICBbIFs0 NzFdUHJldmlvdXMgXQotCi0gICBTZWUgYWxzbzogVGhlIFs0NzJdY29tcC51bml4LnVsdHJpeCBh bmQgWzQ3M11jb21wLnN5cy5kZWMgbmV3c2dyb3Vwcy4KLQotICAgVGhlcmUgaXMgbm8gaGFyZHdh cmUgZmxvdyBjb250cm9sIGluIFVsdHJpeC4gVGhhdCdzIG5vdCBhIEtlcm1pdAotICAgZGVmaWNp ZW5jeSwgYnV0IGFuIFVsdHJpeCBvbmUuCi0KLSAgIFdoZW4gc2VuZGluZyBmaWxlcyB0byBDLUtl cm1pdCBvbiBhIFRlbG5ldCBjb25uZWN0aW9uIHRvIGEgcmVtb3RlCi0gICBVbHRyaXggc3lzdGVt LCB5b3UgbXVzdCBTRVQgUFJFRklYSU5HIEFMTCAob3IgYXQgbGVhc3QgcHJlZml4IG1vcmUKLSAg IGNvbnRyb2wgY2hhcmFjdGVycyB0aGFuIGFyZSBzZWxlY3RlZCBieSBTRVQgUFJFRklYSU5HIENB VVRJT1VTKS4KLQotICAgUmVwb3J0ZWRseSwgREVDIFVMVFJJWCA0LjMgaXMgaW1tdW5lIHRvIEMt S2VybWl0J3MgZGlzYWJsaW5nIG9mCi0gICBTSUdRVUlULCB3aGljaCBpcyB0aGUgc2lnbmFsIHRo YXQgaXMgZ2VuZXJhdGVkIHdoZW4gdGhlIHVzZXIgdHlwZXMKLSAgIEN0cmwtXCwgd2hpY2gga2ls bHMgdGhlIGN1cnJlbnQgcHJvY2VzcyAoaS5lLiBDLUtlcm1pdCkgYW5kIGR1bXBzIGNvcmUuCi0g ICBEaWFnbm9zaXMgYW5kIGN1cmUgdW5rbm93bi4gV29ya2Fyb3VuZDogYmVmb3JlIHN0YXJ0aW5n IEMtS2VybWl0IC0tIG9yCi0gICBmb3IgdGhhdCBtYXR0ZXIsIHdoZW4geW91IGZpcnN0IGxvZyBp biBiZWNhdXNlIHRoaXMgYXBwbGllcyB0byBhbGwKLSAgIHByb2Nlc3Nlcywgbm90IGp1c3QgS2Vy bWl0IC0tIGdpdmUgdGhlIGZvbGxvd2luZyBVbml4IGNvbW1hbmQ6Ci0KLSAgc3R0eSBxdWl0IHVu ZGVmCi0KLSAgIENlcnRhaW4gb3BlcmF0aW9ucyBkcml2ZW4gYnkgUlMtMjMyIG1vZGVtIHNpZ25h bCBkbyBub3Qgd29yayBvbgotICAgREVDc3RhdGlvbnMgb3Igb3RoZXIgREVDIHBsYXRmb3JtcyB3 aG9zZSBzZXJpYWwgaW50ZXJmYWNlcyB1c2UgTU1QCi0gICBjb25uZWN0b3JzIChERUMgdmVyc2lv biBvZiBSSjQ1IHRlbGVwaG9uZSBqYWNrIHdpdGggb2Zmc2V0IHRhYikuIFRoZXNlCi0gICBjb25u ZWN0b3JzIGNvbnZleSBvbmx5IHRoZSBEU1IgYW5kIERUUiBtb2RlbSBzaWduYWxzLCBidXQgbm90 IGNhcnJpZXIKLSAgIChDRCksIFJUUywgQ1RTLCBvciBSSS4gVXNlIFNFVCBDQVJSSUVSIE9GRiB0 byBlbmFibGUgY29tbXVuaWNhdGlvbiwgb3IKLSAgICJob3R3aXJlIiBEU1IgdG8gQ0QuCi0KLSAg IFRoZSBtYXhpbXVtIHNlcmlhbCBzcGVlZCBvbiB0aGUgREVDc3RhdGlvbiA1MDAwIGlzIG5vcm1h bGx5IDE5MjAwLCBidXQKLSAgIHZhcmlvdXMgdHJpY2tzIGFyZSBhdmFpbGFibGUgKG91dHNpZGUg S2VybWl0KSB0byBlbmFibGUgaGlnaGVyIHJhdGVzLgotICAgRm9yIGV4YW1wbGUsIG9uIHRoZSA1 MDAwLzIwMCwgMTkyMDAgY2FuIGJlIHJlbWFwcGVkIChzb21laG93LCBzb21ldGhpbmcKLSAgIHRv IGRvIHdpdGggImEgYml0IGluIHRoZSBTSVIiLCB3aGF0ZXZlciB0aGF0IGlzKSB0byAzODQwMCwg YnV0IGluCi0gICBzb2Z0d2FyZSB5b3UgbXVzdCBzdGlsbCByZWZlciB0byB0aGlzIHNwZWVkIGFz IDE5MjAwOyB5b3UgY2FuJ3QgaGF2ZQotICAgMTkyMDAgYW5kIDM4NDAwIGF2YWlsYWJsZSBhdCB0 aGUgc2FtZSB0aW1lLgotCi0gICAxOTIwMCwgcmVwb3J0ZWRseSwgaXMgYWxzbyB0aGUgaGlnaGVz dCBzcGVlZCBzdXBwb3J0ZWQgYnkgVWx0cml4LCBidXQKLSAgIE5ldEJTRCByZXBvcnRlZGx5IHN1 cHBvcnRzIHNwZWVkcyB1cCB0byA1NzYwMCBvbiB0aGUgREVDc3RhdGlvbiwKLSAgIGFsdGhvdWdo IHdoZXRoZXIgYW5kIGhvdyB3ZWxsIHRoaXMgd29ya3MgaXMgYW5vdGhlciBxdWVzdGlvbi4KLQot ICAgSW4gYW55IGNhc2UsIGdpdmVuIHRoZSBsYWNrIG9mIGhhcmR3YXJlIGZsb3cgY29udHJvbCBp biBVbHRyaXgsIGhpZ2gKLSAgIHNlcmlhbCBzcGVlZHMgYXJlIHByb2JsZW1hdGljIGF0IGJlc3Qu Ci0KLTMuMTAuIEMtS0VSTUlUIEFORCBVTklYV0FSRQotCi0gICBbIFs0NzRdVG9wIF0gWyBbNDc1 XUNvbnRlbnRzIF0gWyBbNDc2XVNlY3Rpb24gQ29udGVudHMgXSBbIFs0NzddTmV4dCBdCi0gICBb IFs0NzhdUHJldmlvdXMgXQotCi0gICBTZWUgYWxzbzoKLSAgICAgKiBUaGUgRnJlZWJpcmQgUHJv amVjdCAoVW5peHdhcmUgc29mdHdhcmUgcmVwb3NpdG9yeSkKLSAgICAgICBbNDc5XWh0dHA6Ly93 d3cuZnJlZWJpcmQub3JnLwotICAgICAqIFRoZSBVbml4V2FyZSBGQVE6IFs0ODBdaHR0cDovL3d3 dy5mcmVlYmlyZC5vcmcvZmFxLwotICAgICAqIFRoZSBmb2xsb3dpbmcgbmV3c2dyb3VwczoKLSAg ICAgICAgICArIFs0ODFdY29tcC51bml4LnVuaXh3YXJlLm1pc2MKLSAgICAgICAgICArIFs0ODJd Y29tcC51bml4LnNjby5taXNjLgotCi0gICBBbHNvIHNlZSBnZW5lcmFsIGNvbW1lbnRzIG9uIFBD LWJhc2VkIFVuaXhlcyBpbiBbNDgzXVNlY3Rpb24gMy4wLiBCeQotICAgdGhlIHdheSwgdGhpcyBz ZWN0aW9uIGlzIHNlcGFyYXRlIGZyb20gdGhlIFNDTyAoQ2FsZGVyYSkgc2VjdGlvbgotICAgYmVj YXVzZSBhdCB0aGUgdGltZSB0aGlzIHNlY3Rpb24gd2FzIHN0YXJ0ZWQsIFVuaXh3YXJlIHdhcyBv d25lZCBieSBhCi0gICBjb21wYW55IGNhbGxlZCBVbml2ZWwuIExhdGVyIGl0IHdhcyBzb2xkIHRv IE5vdmVsbCwgYW5kIHRoZW4gdG8gU0NPLgotICAgU3RpbGwgbGF0ZXIsIFNDTyB3YXMgc29sZCB0 byBDYWxkZXJhLgotCi0gICBJbiBVbml4d2FyZSAyLjAgYW5kIGxhdGVyLCB0aGUgcHJlZmVycmVk IHNlcmlhbCBkZXZpY2UgbmFtZXMgKGRyaXZlcnMpCi0gICBhcmUgL2Rldi90ZXJtLzAwIChldGMp LCByYXRoZXIgdGhhbiAvZGV2L3R0eTAwIChldGMpLiBOb3RlIHRoZQotICAgZm9sbG93aW5nIGNv cnJlc3BvbmRlbmNlIG9mIGRldmljZSBuYW1lcyBhbmQgZHJpdmVyIGNoYXJhY3RlcmlzdGljczoK LQotICBOZXcgbmFtZSAgICAgICBPbGQgbmFtZSAgICAgRGVzY3JpcHRpb24KLSAgL2Rldi90ZXJt LzAwICAgL2Rldi90dHkwMCAgID8/PwotICAvZGV2L3Rlcm0vMDBoICAvZGV2L3R0eTAwaCAgTW9k ZW0gc2lnbmFscyBhbmQgaGFyZHdhcmUgZmxvdyBjb250cm9sCi0gIC9kZXYvdGVybS8wMG0gIC9k ZXYvdHR5MDBtICBNb2RlbSBzaWduYWxzKD8pCi0gIC9kZXYvdGVybS8wMHMgIC9kZXYvdHR5MDBz ICBNb2RlbSBzaWduYWxzIGFuZCBzb2Z0d2FyZSBmbG93IGNvbnRyb2wKLSAgL2Rldi90ZXJtLzAw dCAgL2Rldi90dHkwMHQgID8/PwotCi0gICBMb2NrZmlsZSBuYW1lcyB1c2UgZGV2aWNlLm1ham9y Lm1pbm9yIG51bWJlcnMsIGUuZy46Ci0KLSAgL3Zhci9zcG9vbC9sb2Nrcy9MSy43Njc5LjAwMy4w MDUKLQotICAgVGhlIG1pbm9yIG51bWJlciB2YXJpZXMgYWNjb3JkaW5nIHRvIHRoZSBkZXZpY2Ug bmFtZSBzdWZmaXggKG5vbmUsIGgsCi0gICBtLCBzLCBvciB0KS4gT25seSB0aGUgZGV2aWNlIGFu ZCBtYWpvciBudW1iZXIgYXJlIGNvbXBhcmVkLCBhbmQgdGh1cwotICAgYWxsIG9mIHRoZSBkaWZm ZXJlbnQgbmFtZXMgZm9yIHRoZSBzYW1lIHBoeXNpY2FsIGRldmljZSAoZS5nLiBhbGwgb2YKLSAg IHRob3NlIHNob3duIGluIHRoZSB0YWJsZSBhYm92ZSkgaW50ZXJsb2NrIGVmZmVjdGl2ZWx5Lgot Ci0gICBQcmlvciB0byBVbml4V2FyZSA3LCBzZXJpYWwgc3BlZWRzIGhpZ2hlciB0aGFuIDM4NDAw IGFyZSBub3Qgc3VwcG9ydGVkLgotICAgSW4gVW5peFdhcmUgNywgd2UgYWxzbyBzdXBwb3J0IDU3 NjAwIGFuZCAxMTUyMDAsIHBsdXMgc29tZSB1bmV4cGVjdGVkCi0gICBvbmVzIGxpa2UgMTQ0MDAs IDI4ODAwLCBhbmQgNzY4MDAsIGJ5IHZpcnR1ZSBvZiBhIHN0cmFuZ2UgbmV3Ci0gICBpbnRlcmZh Y2UsIGV2aWRlbnRseSBwZWN1bGlhciB0byBVbml4V2FyZSA3LCBkaXNjb3ZlcmVkIHdoaWxlIGRp Z2dpbmcKLSAgIHRocm91Z2ggdGhlIGhlYWRlciBmaWxlczogdGNzZXRzcGVlZCgpLiBBY2Nlc3Mg dG8gdGhpcyBpbnRlcmZhY2UgaXMKLSAgIGFsbG93ZWQgb25seSBpbiBQT1NJWCBidWlsZHMsIGFu ZCB0aHVzIHRoZSBVbml4V2FyZSA3IHZlcnNpb24gb2YKLSAgIEMtS2VybWl0IGlzIFBPU0lYLWJh c2VkLCB1bmxpa2UgQy1LZXJtaXQgZm9yIFVuaXh3YXJlIDEueCBhbmQgMi54Ci0gICAoc2luY2Ug dGhlIGVhcmxpZXIgVW5peFdhcmUgdmVyc2lvbnMgZGlkIG5vdCBzdXBwb3J0IGhpZ2ggc2VyaWFs Ci0gICBzcGVlZHMsIHBlcmlvZCkuCi0KLSAgIEhPV0VWRVIsIHR1cm5pbmcgb24gUE9TSVggZmVh dHVyZXMgZW5nYWdlcyBhbGwgb2YgdGhlICIjaWYKLSAgICghX1BPU0lYX1NPVVJDRSkiIGNsYXVz ZXMgaW4gdGhlIFVuaXhXYXJlIGhlYWRlciBmaWxlcywgd2hpY2ggaW4gdHVybgotICAgcHJldmVu dCB1cyBmcm9tIGhhdmluZyBtb2RlbSBzaWduYWxzLCBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIGZs b3cKLSAgIGNvbnRyb2wgQVBJcywgc2VsZWN0KCksIGV0YyAtLSBpbiBzaG9ydCwgYWxsIHRoZSBv dGhlciB0aGluZ3Mgd2UgbmVlZAotICAgaW4gY29tbXVuaWNhdGlvbnMgc29mdHdhcmUsIGVzcGVj aWFsbHkgd2hlbiBoaWdoIHNwZWVkcyBhcmUgdXNlZC4gT2gKLSAgIHRoZSBpcm9ueS4gQW5kIHNv IEMtS2VybWl0IG11c3QgYmUgc2hhbWVsZXNzbHkgYnV0Y2hlcmVkIC0tIGFzIGl0IGhhcwotICAg YmVlbiBzbyBtYW55IHRpbWVzIGJlZm9yZSAtLSB0byBhbGxvdyB1cyB0byBoYXZlIHRoZSBuZWVk ZWQgZmVhdHVyZXMKLSAgIGZyb20gdGhlIFBPU0lYIGFuZCBub24tUE9TSVggd29ybGRzLiBTZWUg dGhlIFVOSVhXQVJFUE9TSVggc2VjdGlvbnMgb2YKLSAgIFs0ODRdY2t1dGlvLmMuCi0KLSAgIEFm dGVyIHRoZSBidXRjaGVyeSwgd2Ugd2luZCB1cCB3aXRoIFVuaXh3YXJlIDIueCBoYXZpbmcgZnVs bAotICAgbW9kZW0tc2lnbmFsIGNhcGFiaWxpdHksIGJ1dCBwb2xpdGljYWxseS1jb3JyZWN0IFVu aXh3YXJlIDcueCBsYWNraW5nCi0gICB0aGUgYWJpbGl0eSB0byBhdXRvbWF0aWNhbGx5IGRldGVj dCBhIGJyb2tlbiBjb25uZWN0aW9uIHdoZW4gY2FycmllcgotICAgZHJvcHMuCi0KLSAgIE1lYW53 aGlsZSB0aGUgVW5peHdhcmUgdGNzZXRzcGVlZCgpIGZ1bmN0aW9uIGFsbG93cyBhbnkgbnVtYmVy IGF0IGFsbAotICAgKGFueSBsb25nLCAwIG9yIHBvc2l0aXZlKSBhcyBhbiBhcmd1bWVudCBhbmQg c3VjY2VlZHMgaWYgdGhlIG51bWJlciBpcwotICAgYSBsZWdhbCBiaXQgcmF0ZSBmb3IgdGhlIHNl cmlhbCBkZXZpY2UsIGFuZCBmYWlscyBvdGhlcndpc2UuIFRoZXJlIGlzCi0gICBubyBsaXN0IGFu eXdoZXJlIG9mIGxlZ2FsIHNwZWVkcy4gVGh1cyB0aGUgU0VUIFNQRUVEIGtleXdvcmQgdGFibGUK LSAgICgic2V0IHNwZWVkID8iIHRvIHNlZSBpdCkgaXMgaGFyZHdpcmVkIGJhc2VkIG9uIHRyaWFs IGFuZCBlcnJvciB3aXRoCi0gICBhbGwga25vd24gc2VyaWFsIHNwZWVkcywgdGhlIG1heGltdW0g YmVpbmcgMTE1MjAwLiBIb3dldmVyLCB0byBhbGxvdwotICAgZm9yIHRoZSBwb3NzaWJpbGl0eSB0 aGF0IG90aGVyIHNwZWVkcyBtaWdodCBiZSBhbGxvd2VkIGluIHRoZSBmdXR1cmUKLSAgIChvciB3 aXRoIGRpZmZlcmVudCBwb3J0IGRyaXZlcnMpLCB0aGUgU0VUIFNQRUVEIGNvbW1hbmQgZm9yIFVu aXhXYXJlIDcKLSAgIG9ubHkgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IGFueSBudW1iZXIgYXQgYWxs OyBhIHdhcm5pbmcgaXMgcHJpbnRlZCBpZgotICAgdGhlIG51bWJlciBpcyBub3QgaW4gdGhlIGxp c3QsIGJ1dCB0aGUgbnVtYmVyIGlzIGFjY2VwdGVkIGFueXdheTsgdGhlCi0gICBjb21tYW5kIHN1 Y2NlZWRzIGlmIHRjc2V0c3BlZWQoKSBhY2NlcHRzIHRoZSBudW1iZXIsIGFuZCBmYWlscwotICAg b3RoZXJ3aXNlLgotCi0gICBJbiBDLUtlcm1pdCA4LjAgdGVzdGluZywgaXQgd2FzIG5vdGljZWQg dGhhdCB0aGUgUE9TSVggbWV0aG9kIGZvcgotICAgaGFuZ2luZyB1cCB0aGUgcGhvbmUgYnkgZHJv cHBpbmcgRFRSIChzZXQgc3BlZWQgMCwgcGF1c2UsIHJlc3RvcmUKLSAgIHNwZWVkKSBkaWQgbm90 IGFjdHVhbGx5IGRyb3AgRFRSLiBUaGUgQVBJcyBkbyBub3QgcmV0dXJuIGFueSBlcnJvcgotICAg aW5kaWNhdGlvbiwgYnV0IG5vdGhpbmcgaGFwcGVucy4gSSBjaGFuZ2VkIHR0aGFuZygpIHRvIHNr aXAgdGhlIHNwZWNpYWwKLSAgIGNhc2UgSSBoYWQgbWFkZSBmb3IgVW5peHdhcmUgYW5kIGluc3Rl YWQgZm9sbG93IHRoZSBub3JtYWwgcGF0aDogaWYKLSAgIFRJT0NTRFRSIGlzIGRlZmluZWQgdXNl IHRoYXQsIG90aGVyd2lzZSBibGFoIGJsYWguLi4gSXQgdHVybnMgb3V0Ci0gICBUSU9DU0RUUiAq aXMqIGRlZmluZWQsIGFuZCBpdCB3b3Jrcy4KLQotICAgU28gaW4gVW5peHdhcmUgKGF0IGxlYXN0 IGluIDIuMS4zKSB3ZSBjYW4gcmVhZCBtb2RlbSBzaWduYWxzLCBoYW5ndXAgYnkKLSAgIHRvZ2ds aW5nIERUUiwgYW5kIHNvIG9uLCBCVVQuLi4gQnV0IG9uY2UgdGhlIHJlbW90ZSBoYW5ncyB1cCBh bmQKLSAgIENhcnJpZXIgZHJvcHMsIHRoZSBBUEkgZm9yIHJlYWRpbmcgbW9kZW0gc2lnbmFscyBj ZWFzZXMgdG8gZnVuY3Rpb247Ci0gICBhbHRob3VnaCB0aGUgZGV2aWNlIGlzIHN0aWxsIG9wZW4s IHRoZSBUSU9DTUdFVCBpb2N0bCBhbHdheXMgcmFpc2VzCi0gICBlcnJubyA2ID0gRU5YSU8sICJO byBzdWNoIGRldmljZSBvciBhZGRyZXNzIi4KLQotICAgT2xkIGJ1c2luZXNzOgotCi0gICBVc2lu ZyBDLUtlcm1pdCA2LjAgb24gdGhlIFVuaXhXYXJlIDEuMSBBcHBsaWNhdGlvbiBTZXJ2ZXIsIG9u ZSB1c2VyCi0gICByZXBvcnRlZCBhIHN5c3RlbSBwYW5pYyB3aGVuIHRoZSBmb2xsb3dpbmcgc2Ny aXB0IHByb2dyYW0gaXMgZXhlY3V0ZWQ6Ci0KLSAgc2V0IGxpbmUgL2Rldi90dHk0Ci0gIHNldCBz cGVlZCA5NjAwCi0gIG91dHB1dCBcMTMKLSAgY29ubmVjdAotCi0gICBUaGUgcGFuaWMgZG9lcyBu b3QgaGFwcGVuIGlmIGEgUEFVU0UgaXMgaW5zZXJ0ZWQ6Ci0KLSAgc2V0IGxpbmUgL2Rldi90dHk0 Ci0gIHNldCBzcGVlZCA5NjAwCi0gIHBhdXNlIDEKLSAgb3V0cHV0IFwxMwotICBjb25uZWN0Ci0K LSAgIFRoaXMgaXMgdXNpbmcgYSBTdGFsbGlvbiBFYXN5SU8gY2FyZCBpbnN0YWxsZWQgYXMgYm9h cmQgMCBvbiBJUlEgMTIgb24KLSAgIGEgR2F0ZXdheSAzODYgd2l0aCB0aGUgU3RhbGxpb24tc3Vw cGxpZWQgZHJpdmVyLiBUaGUgcHJvYmxlbSB3YXMKLSAgIHJlcG9ydGVkIHRvIE5vdmVsbCBhbmQg U3RhbGxpb24gYW5kIChyZXBvcnRlZGx5KSBpcyBub3cgZml4ZWQuCi0KLTMuMTEuIEMtS0VSTUlU IEFORCBBUE9MTE8gU1IxMAotCi0gICBbIFs0ODVdVG9wIF0gWyBbNDg2XUNvbnRlbnRzIF0gWyBb NDg3XVNlY3Rpb24gQ29udGVudHMgXSBbIFs0ODhdTmV4dCBdCi0gICBbIFs0ODldUHJldmlvdXMg XQotCi0gICBSZXBvcnRlZGx5LCB2ZXJzaW9uIDVBKDE5MCksIHdoZW4gYnVpbHQgdW5kZXIgQXBv bGxvIFNSMTAgdXNpbmcgIm1ha2UKLSAgIHNyMTAtYnNkIiwgY29tcGlsZXMsIGxpbmtzLCBhbmQg ZXhlY3V0ZXMgT0ssIGJ1dCBsZWF2ZXMgdGhlIHRlcm1pbmFsCi0gICB1bnVzYWJsZSBhZnRlciBp dCBleGl0cyAtLSB0aGUgImNzNyIgb3IgImNzOCIgKGNoYXJhY3RlciBzaXplKQotICAgcGFyYW1l dGVyIGhhcyBiZWNvbWUgY3M1LiBUaGUgdGVybWluYWwgbXVzdCBiZSByZXNldCBmcm9tIGFub3Ro ZXIKLSAgIHRlcm1pbmFsLiBDYXVzZSBhbmQgY3VyZSB1bmtub3duLiBTdWdnZXN0ZWQgd29ya2Fy b3VuZDogV3JhcCBLZXJtaXQgaW4KLSAgIGEgc2hlbGwgc2NyaXB0IHNvbWV0aGluZyBsaWtlOgot Ci0gIGtlcm1pdCBAKgotICBzdHR5IHNhbmUKLQotMy4xMi4gQy1LRVJNSVQgQU5EIFRBTkRZIFhF TklYIDMuMAotCi0gICBbIFs0OTBdVG9wIF0gWyBbNDkxXUNvbnRlbnRzIF0gWyBbNDkyXVNlY3Rp b24gQ29udGVudHMgXSBbIFs0OTNdTmV4dCBdCi0gICBbIFs0OTRdUHJldmlvdXMgXQotCi0gICBD LUtlcm1pdCA3LjAgd2FzIHRvbyBiaWcgdG8gYmUgYnVpbHQgb24gVGFuZHkgWGVuaXgsIGV2ZW4g aW4gYSBtaW5pbXVtCi0gICBjb25maWd1cmF0aW9uOyB2ZXJzaW9uIDYuMCBpcyB0aGUgbGFzdCBv bmUgdGhhdCBmaXRzLgotCi0gICBSZXBvcnRlZGx5LCBpbiBDLUtlcm1pdCA2LjAsIGlmIHlvdSB0 eXBlIGxvdHMgb2YgQ3RybC1DJ3MgZHVyaW5nCi0gICBleGVjdXRpb24gb2YgdGhlIGluaXRpYWxp emF0aW9uIGZpbGUsIGdob3N0IEtlcm1pdCBwcm9jZXNzZXMgd2lsbCBiZQotICAgY3JlYXRlZCwg YW5kIHdpbGwgY29tcGV0ZSBmb3IgdGhlIGtleWJvYXJkLiBUaGV5IGNhbiBvbmx5IGJlIHJlbW92 ZWQKLSAgIHZpYSAia2lsbCAtOSIgZnJvbSBhbm90aGVyIHRlcm1pbmFsLCBvciBieSByZWJvb3Rp bmcuIERpYWdub3NpcyAtLQotICAgc29tZXRoaW5nIHN0cmFuZ2UgaGFwcGVuaW5nIHdpdGggdGhl IFNJR0lOVCBoYW5kbGVyIHdoaWxlIHRoZSBwcm9jZXNzCi0gICBpcyByZWFkaW5nIHRoZSBkaXJl Y3RvcnkgKGl0IHNlZW1zIHRvIG9jY3VyIGR1cmluZyB0aGUgU0VUIFBST01QVAotICAgW1x2KGRp cildIC4uLiBzZXF1ZW5jZSkuIEN1cmU6IHVua25vd24uIFdvcmthcm91bmQ6IGRvbid0IGludGVy cnVwdAotICAgQy1LZXJtaXQgd2hpbGUgaXQgaXMgZXhlY3V0aW5nIGl0cyBpbml0IGZpbGUgb24g dGhlIFRhbmR5IDE2LzYwMDAuCi0KLTMuMTMuIEMtS0VSTUlUIEFORCBPU0YvMSAoRElHSVRBTCBV TklYKSAoVFJVNjQgVU5JWCkKLQotICAgWyBbNDk1XVRvcCBdIFsgWzQ5Nl1Db250ZW50cyBdIFsg WzQ5N11TZWN0aW9uIENvbnRlbnRzIF0gWyBbNDk4XU5leHQgXQotICAgWyBbNDk5XVByZXZpb3Vz IF0KLQotICAgV2hpbGUgcHV0dGluZyB0b2dldGhlciBhbmQgdGVzdGluZyBDLUtlcm1pdCA4LjAs IGl0IHdhcyBkaXNjb3ZlcmVkIHRoYXQKLSAgIGJpbmFyaWVzIGJ1aWx0IGZvciBvbmUgdmVyc2lv biBvZiBUcnU2NCBVbml4IChlLmcuIDQuMEcpIG1pZ2h0IGV4aGliaXQKLSAgIHZlcnkgc3RyYW5n ZSBiZWhhdmlvciBpZiBydW4gb24gYSBkaWZmZXJlbnQgdmVyc2lvbiBvZiBUcnU2NCBVbml4IChl LmcuCi0gICA1LjFBKS4gVGhlIHR5cGljYWwgc3ltcHRvbSB3YXMgdGhhdCBhIHNlY3Rpb24gb2Yg dGhlIGluaXRpYWxpemF0aW9uCi0gICBmaWxlIHdvdWxkIGJlIHNraXBwZWQsIG5vdGFibHkgbG9j YXRpbmcgdGhlIGRpYWxpbmcgYW5kL29yIG5ldHdvcmsKLSAgIGRpcmVjdG9yeSBhcyB3ZWxsIGFz IGZpbmRpbmcgYW5kIGV4ZWN1dGluZyB0aGUgY3VzdG9taXphdGlvbiBmaWxlLAotICAgfi8ubXlr ZXJtcmMuIFRoaXMgcHJvYmxlbSBhbHNvIGlzIHJlcG9ydGVkIHRvIG9jY3VyIG9uIFRydTY0IFVu aXggNS4wCi0gICAoUmV2IDczMikgZXZlbiB3aGVuIHJ1bm5pbmcgYSBDLUtlcm1pdCBiaW5hcnkg dGhhdCB3YXMgYnVpbHQgdGhlcmUuCi0gICBIb3dldmVyLCB0aGUgVHJ1NjQgNS4xQSBiaW5hcnkg d29ya3MgY29ycmVjdGx5IG9uIDUuMC4gR28gZmlndXJlLgotCi0gICBXaGVuIG1ha2luZyBUZWxu ZXQgY29ubmVjdGlvbnMgdG8gYSBEaWdpdGFsIFVuaXggb3IgVHJ1NjQgc3lzdGVtLCBhbmQKLSAg IHlvdXIgVGVsbmV0IGNsaWVudCBmb3J3YXJkcyB5b3VyIHVzZXIgbmFtZSwgdGhlIFRlbG5ldCBz ZXJ2ZXIgZXZpZGVudGx5Ci0gICBzdHVmZnMgdGhlIHVzZXJuYW1lIGludG8gbG9naW4ncyBzdGFu ZGFyZCBpbnB1dCwgYW5kIHlvdSBzZWU6Ci0KLSAgbG9naW46IGl2YW4KLSAgUGFzc3dvcmQ6Ci0K LSAgIFRoaXMgaXMgY2xlYXJseSBnb2luZyB0byBwbGF5IGhhdm9jIHdpdGggc2NyaXB0cyB0aGF0 IGxvb2sgZm9yCi0gICAibG9naW46Ii4gV29ya2Fyb3VuZCAod2hlbiBLZXJtaXQgaXMgeW91ciBU ZWxuZXQgY2xpZW50KTogU0VUIExPR0lOCi0gICBVU0VSIHRvIG5vdGhpbmcsIHRvIHByZXZlbnQg S2VybWl0IGZyb20gc2VuZGluZyB5b3VyIHVzZXIgSUQuCi0KLSAgIEJlZm9yZSB5b3UgY2FuIHVz ZSBhIHNlcmlhbCBwb3J0IG9uIGEgbmV3IERpZ2l0YWwgVW5peCBzeXN0ZW0sIHlvdSBtdXN0Ci0g ICBydW4gdXVjcHNldHVwIHRvIGVuYWJsZSBvciBjb25maWd1cmUgdGhlIHBvcnQuIEV2aWRlbnRs eSB0aGUgL2Rldi90dHkwMAotICAgYW5kIDAxIGRldmljZXMgdGhhdCBhcHBlYXIgaW4gdGhlIGNv bmZpZ3VyYXRpb24gYXJlIG5vdCB1c2FibGU7Ci0gICB1dWNwc2V0dXAgdHVybnMgdGhlbSBpbnRv IC9kZXYvdHR5ZDAwIGFuZCAwMSwgd2hpY2ggYXJlLiBOb3RlIHRoYXQKLSAgIHV1Y3BzZXR1cCBh bmQgb3RoZXIgdXVjcC1mYW1pbHkgcHJvZ3JhbXMgYXJlIHF1aXRlIHByaW1pdGl2ZSAtLSB0aGV5 Ci0gICBvbmx5IGtub3cgYWJvdXQgc3BlZWRzIHVwIHRvIDk2MDAgYnBzIGFuZCB0aGVpciBzZWxl Y3Rpb24gb2YgbW9kZW1zCi0gICBkYXRlcyBmcm9tIHRoZSBlYXJseSAxOTgwcy4gTm9uZSBvZiB0 aGlzIGFmZmVjdHMgS2VybWl0LCB0aG91Z2ggLS0gd2l0aAotICAgQy1LZXJtaXQsIHlvdSBjYW4g dXNlIHNwZWVkcyB1cCB0byAxMTUyMDAgYnBzIChhdCBsZWFzdCBpbiBEVTQuMCBhbmQKLSAgIGxh dGVyKSBhbmQgbW9kZXJuIG1vZGVtcyB3aXRoIGhhcmR3YXJlIGZsb3cgY29udHJvbCBhbmQgYWxs IHRoZSByZXN0LgotCi0gICBSZXBvcnRlZGx5LCBpZiBhIG1vZGVtIGlzIHNldCBmb3IgJlMwIChh c3NlcnQgRFNSIGF0IGFsbCB0aW1lcyksIHRoZQotICAgc3lzdGVtIHJlc2V0cyBvciBkcm9wcyBE VFIgZXZlcnkgMzAgc2Vjb25kczsgcmVwb3J0ZWRseSBERUMgc2F5cyB0byBzZXQKLSAgICZTMS4K LQotICAgRGlnaXRhbCBVbml4IDMuMiBldmlkZW50bHkgd2FudHMgdG8gYmVsaWV2ZSB5b3VyIHRl cm1pbmFsIGlzIG9uZSBsaW5lCi0gICBsb25nZXIgdGhhbiB5b3Ugc2F5IGl0IGlzLCBlLmcuIHdo ZW4gYSAibW9yZSIgb3IgIm1hbiIgY29tbWFuZCBpcwotICAgZ2l2ZW4uIFRoaXMgaXMgaGFzIG5v dGhpbmcgdG8gZG8gd2l0aCBDLUtlcm1pdCwgYnV0IHRlbmRzIHRvIGFubm95Ci0gICB0aG9zZSB3 aG8gdXNlIEtlcm1pdCBvciBvdGhlciB0ZXJtaW5hbCBlbXVsYXRvcnMgdG8gYWNjZXNzIERpZ2l0 YWwgVW5peAotICAgc3lzdGVtcy4gV29ya2Fyb3VuZDogdGVsbCBVbml4IHRvICJzdHR5IHJvd3Mg MjMiIChvciB3aGF0ZXZlcikuCi0KLSAgIFJlcG9ydGVkbHksIHRoZXJlIGlzIHNvbWUgYml6YXJy ZSBiZWhhdmlvciB3aGVuIHRyeWluZyB0byB1c2UgYSB2ZXJzaW9uCi0gICBvZiBDLUtlcm1pdCBi dWlsdCBvbiBvbmUgRGlnaXRhbCBVbml4IDQuMCBzeXN0ZW0gb24gYW5vdGhlciBvbmUsCi0gICBw b3NzaWJseSBkdWUgdG8gZGlmZmVyaW5nIE9TIG9yIGxpYnJhcnkgcmV2aXNpb24gbGV2ZWxzOyBm b3IgZXhhbXBsZSwKLSAgIHRoZSBpbmFiaWxpdHkgdG8gY29ubmVjdCB0byBjZXJ0YWluIFRDUC9J UCBob3N0cy4gU29sdXRpb246IHJlYnVpbGQKLSAgIEMtS2VybWl0IGZyb20gc291cmNlIGNvZGUg b24gdGhlIHN5c3RlbSB3aGVyZSB5b3Ugd2lsbCBiZSB1c2luZyBpdC4KLQotICAgRGlnaXRhbCBV bml4IHRnZXRzdHIoKSBjYXVzZXMgYSBzZWdtZW50YXRpb24gZmF1bHQuIEMtS2VybWl0IDcuMCBh ZGRlZAotICAgI2lmZGVmcyB0byBhdm9pZCBjYWxsaW5nIHRoaXMgcm91dGluZSBpbiBEaWdpdGFs IFVuaXguIEFzIGEgcmVzdWx0LCB0aGUKLSAgIFNDUkVFTiBjb21tYW5kcyBhbHdheXMgc2VuZCBB TlNJIGVzY2FwZSBzZXF1ZW5jZXMgLS0gZXZlbiB0aG91Z2ggY3Vyc2VzCi0gICBrbm93cyB5b3Vy IGFjdHVhbCB0ZXJtaW5hbCB0eXBlLgotCi0gICBSZXBvcnRlZGx5IHRoZSBUcnU2NCBVbml4IDQu MEUgMTA5MSBUZWxuZXQgc2VydmVyIGRvZXMgbm90IHRvbGVyYXRlCi0gICBzdHJlYW1pbmcgdHJh bnNmZXJzIGludG8gaXRzZWxmLCBhdCBsZWFzdCBub3Qgd2hlbiB0aGUgc2VuZGluZyBLZXJtaXQK LSAgIGlzIG9uIHRoZSBzYW1lIGxvY2FsIG5ldHdvcmsuIFNvbHV0aW9uOiB0ZWxsIG9uZSBLZXJt aXQgb3IgdGhlIG90aGVyCi0gICAob3IgYm90aCkgdG8gInNldCBzdHJlYW1pbmcgb2ZmIi4gVGhp cyBtaWdodCBvciBtaWdodCBiZSB0aGUgY2FzZSB3aXRoCi0gICBlYXJsaWVyIGFuZC9vciBsYXRl ciBUcnU2NCwgRGlnaXRhbCBVbml4LCBhbmQgT1NGLzEgcmVsZWFzZXMuCi0KLTMuMTQuIEMtS0VS TUlUIEFORCBTR0kgSVJJWAotCi0gICBbIFs1MDBdVG9wIF0gWyBbNTAxXUNvbnRlbnRzIF0gWyBb NTAyXVNlY3Rpb24gQ29udGVudHMgXSBbIFs1MDNdTmV4dCBdCi0gICBbIFs1MDRdUHJldmlvdXMg XQotCi0gICBTZWUgYWxzbzoKLSAgICAgKiBUaGUgWzUwNV1jb21wLnN5cy5zZ2kubWlzYyBhbmQg WzUwNl1jb21wLnN5cy5zZ2kuYWRtaW4gbmV3c2dyb3Vwcy4KLSAgICAgICBbNTA3XVRoZSBTR0kg d2Vic2l0ZQotICAgICAqIFRoZSBTR0kgRkFROgotICAgICAgICAgICsgWzUwOF1odHRwOi8vd3d3 LXZpei50YW11LmVkdS9+c2dpLWZhcS8KLSAgICAgICAgICArIFs1MDldZnRwOi8vdml6LnRhbXUu ZWR1L3B1Yi9zZ2kvZmFxLwotCi0gICBBYm91dCBJUklYIHZlcnNpb24gbnVtYmVyczogInVuYW1l IC1hIiB0ZWxscyB0aGUgInR3by1kaWdpdCIgdmVyc2lvbgotICAgbnVtYmVyLCBzdWNoIGFzICI1 LjMiIG9yICI2LjUiLiBUaGUgdGhyZWUtZGlnaXQgZm9ybSBjYW4gYmUgc2VlbiB3aXRoCi0gICAi dW5hbWUgLVIiLiAodGhpcyBpbmZvcm1hdGlvbiBpcyB1bmF2YWlsYWJsZSBhdCB0aGUgc2ltcGxl IEFQSSBsZXZlbCkuCi0gICBTdXBwb3NlZGx5IGFsbCB0aHJlZS1kaWdpdCB2ZXJzaW9ucyB3aXRo aW4gdGhlIHNhbWUgdHdvLWRpZ2l0IHZlcnNpb24KLSAgIChlLmcuIDYuNS4yLCA2LjUuMykgYXJl IGJpbmFyeSBjb21wYXRpYmxlOyBpLmUuIGEgYmluYXJ5IGJ1aWx0IG9uIGFueQotICAgb25lIG9m IHRoZW0gc2hvdWxkIHJ1biBvbiBhbGwgb3RoZXJzLiBUaGUgIm0iIHN1ZmZpeCBkZW5vdGVzIGp1 c3QKLSAgIHBhdGNoZXM7IHRoZSAiZiIgc3VmZml4IGluZGljYXRlcyB0aGF0IGZlYXR1cmVzIHdl cmUgYWRkZWQuCi0KLSAgIEFuIElSSVggYmluYXJ5IGJ1aWx0IG9uIGxvd2VyIE1JUFMgbW9kZWwg KEluc3RydWN0aW9uIFNldCBBcmNoaXRlY3R1cmUsCi0gICBJU0EpIGNhbiBydW4gb24gaGlnaGVy IG1vZGVscywgYnV0IG5vdCB2aWNlIHZlcnNhOgotCi0gICAgIE1JUFMxIFIzMDAwIGFuZCBiZWxv dwotICAgICBNSVBTMiBSNDAwMAotICAgICBNSVBTMyBSNHgwMAotICAgICBNSVBTNCBSNTAwMCBh bmQgYWJvdmUKLQotICAgRnVydGhlcm1vcmUsIHRoZXJlIGFyZSBkaWZmZXJlbnQgQXBwbGljYXRp b24gQmluYXJ5IEludGVyZmFjZXMgKEFCSXMpOgotCi0gICAgIENPRkYgICAgMzIgYml0cywgSVJJ WCA1LjMsIDUuMiwgNS4xLCA0LnggYW5kIGJlbG93Ci0gICAgIG8zMiBFTEYgMzIgYml0cywgSVJJ WCA1LjMsIDYuMCAtIDYuNQotICAgICBOMzIgRUxGIDMyIGJpdHMsIElSSVggNi4yIC0gNi41Ci0g ICAgIE42NCBFTEYgNjQgYml0cywgSVJJWCA2LjIgLSA2LjUKLQotICAgVGh1cyBhIHByZWJ1aWx0 IElSSVggYmluYXJ5IHdvcmtzIG9uIGEgcGFydGljdWxhciBtYWNoaW5lIG9ubHkgaWYgKGEpCi0g ICB0aGUgbWFjaGluZSdzIElSSVggdmVyc2lvbiAodG8gb25lIGRlY2ltYWwgcGxhY2UpIGlzIGVx dWFsIHRvIG9yCi0gICBncmVhdGVyIHRoYW4gdGhlIHZlcnNpb24gdW5kZXIgd2hpY2ggdGhlIGJp bmFyeSB3YXMgYnVpbHQ7IChiKSB0aGUKLSAgIG1hY2hpbmUncyBNSVBTIGxldmVsIGlzIGdyZWF0 ZXIgb3IgZXF1YWwgdG8gdGhhdCBvZiB0aGUgYmluYXJ5OyBhbmQgKGMpCi0gICB0aGUgbWFjaGlu ZSBzdXBwb3J0cyB0aGUgQUJJIG9mIHRoZSBiaW5hcnkuIElmIGFsbCB0aHJlZSBjb25kaXRpb25z IGFyZQotICAgbm90IHNhdGlzZmllZCwgb2YgY291cnNlLCB5b3UgY2FuIGJ1aWxkIGEgYmluYXJ5 IHlvdXJzZWxmIGZyb20gc291cmNlCi0gICBjb2RlIHNpbmNlLCB1bmxpa2Ugc29tZSBvdGhlciBV bml4IHZlbmRvcnMsIFNHSSBkb2VzIHN1cHBseSBhIEMKLSAgIGNvbXBpbGVyIGFuZCBsaWJyYXJp ZXMuCi0KLSAgIFNHSSBkaWQgbm90IHN1cHBseSBhbiBBUEkgZm9yIGhhcmR3YXJlIGZsb3cgY29u dHJvbCBwcmlvciB0byBJUklYIDUuMi4KLSAgIEMtS2VybWl0IDYuMSBhbmQgaGlnaGVyIGZvciBJ UklYIDUuMiBhbmQgaGlnaGVyIHN1cHBvcnRzIGhhcmR3YXJlIGZsb3cKLSAgIGNvbnRyb2wgaW4g dGhlIG5vcm1hbCB3YXksIHZpYSAic2V0IGZsb3cgcnRzL2N0cyIuCi0KLSAgIEZvciBoYXJkd2Fy ZSBmbG93IGNvbnRyb2wgb24gZWFybGllciBJUklYIGFuZC9vciBDLUtlcm1pdCB2ZXJzaW9ucywg dXNlCi0gICB0aGUgdHR5ZiogKG1vZGVtIGNvbnRyb2wgQU5EIGhhcmR3YXJlIGZsb3cgY29udHJv bCkgZGV2aWNlcyBhbmQgbm90IHRoZQotICAgdHR5ZCogKGRpcmVjdCkgb3IgdHR5bSogKG1vZGVt IGNvbnRyb2wgYnV0IG5vIGhhcmR3YXJlIGZsb3cgY29udHJvbCkKLSAgIG9uZXMsIGFuZCBvYnRh aW4gdGhlIHByb3BlciAiaGFyZHdhcmUgaGFuZHNoYWtpbmciIGNhYmxlIGZyb20gU0dJLAotICAg d2hpY2ggaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIG9uZXMgZm9yIHRoZSBNYWNpbnRvc2ggYW5k IE5lWFQgZXZlbgotICAgdGhvdWdoIHRoZXkgbG9vayB0aGUgc2FtZSAoIm1hbiBzZXJpYWwiIGZv ciBmdXJ0aGVyIGluZm8pIGFuZCB0ZWxsCi0gICBLZXJtaXQgdG8gInNldCBmbG93IGtlZXAiIGFu ZCAic2V0IG1vZGVtIGZsb3cgcnRzL2N0cyIuCi0KLSAgIFNlcmlhbCBzcGVlZHMgaGlnaGVyIHRo YW4gMzg0MDAgYXJlIGF2YWlsYWJsZSBpbiBJUklYIDYuMiBhbmQgbGF0ZXIsIG9uCi0gICBPLWNs YXNzIG1hY2hpbmVzIChlLmcuIE9yaWdpbiwgT2N0YW5lKSBvbmx5LCBhbmQgYXJlIHN1cHBvcnRl ZCBieQotICAgQy1LZXJtaXQgNy4wIGFuZCBsYXRlci4gQ29tbWFuZHMgc3VjaCBhcyAic2V0IHNw ZWVkIDExNTIwMCIgbWF5IGJlCi0gICBnaXZlbiBvbiBvdGhlciBtb2RlbHMgKGUuZy4gSXJpcywg SW5keSwgSW5kaWdvKSBidXQgd2lsbCBmYWlsIGJlY2F1c2UKLSAgIHRoZSBPUyByZXBvcnRzIGFu IGludmFsaWQgc3BlZWQgZm9yIHRoZSBkZXZpY2UuCi0KLSAgIEV4cGVyaW1lbnRhdGlvbiB3aXRo IGJvdGggSVJJWCA1LjMgYW5kIDYuMiBzaG93cyB0aGF0IHdoZW4gbG9nZ2VkIGluIHRvCi0gICBJ UklYIHZpYSBUZWxuZXQsIHRoYXQgcmVtb3RlLW1vZGUgQy1LZXJtaXQgY2FuJ3Qgc2VuZCBmaWxl cyBpZiB0aGUKLSAgIHBhY2tldCBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIDQwOTY7IHRoZSBUZWxu ZXQgc2VydmVyIGV2aWRlbnRseSBoYXMKLSAgIHRoaXMgcmVzdHJpY3Rpb24gKG9yIGJ1ZyksIHNp bmNlIHRoZXJlIGlzIG5vIHByb2JsZW0gc2VuZGluZyBsb25nCi0gICBwYWNrZXRzIG9uIHNlcmlh bCBvciBybG9naW4gY29ubmVjdGlvbnMuIEhvd2V2ZXIsIGl0IGNhbiByZWNlaXZlIGZpbGVzCi0g ICB3aXRoIG5vIHByb2JsZW0gaWYgdGhlIHBhY2tldCBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIDQw OTYuIEFzIGEKLSAgIHdvcmthcm91bmQsIHRoZSBGQVNUIG1hY3JvIGZvciBJUklYIGluY2x1ZGVz ICJzZXQgc2VuZCBwYWNrZXQtbGVuZ3RoCi0gICA0MDAwIi4gSVJJWCA2LjUuMSBkb2VzIG5vdCBo YXZlIHRoaXMgcHJvYmxlbSwgc28gZXZpZGVudGx5IGl0IHdhcyBmaXhlZAotICAgc29tZSB0aW1l IGFmdGVyIElSSVggNi4yLiBUZXN0cyBzaG93IGZpbGUtdHJhbnNmZXIgc3BlZWRzIGFyZSBiZXR0 ZXIKLSAgIChub3Qgd29yc2UpIHdpdGggOEsgcGFja2V0cyB0aGFuIHdpdGggNEsgcGFja2V0cyBm cm9tIElSSVggNi41LjEuCi0KLSAgIFJlcG9ydGVkbHkgc29tZSBJbmR5cyBoYXZlIGJhZCBzZXJp YWwgcG9ydCBoYXJkd2FyZS4gSVJJWCA1LjIsIGZvcgotICAgZXhhbXBsZSwgbmVlZHMgcGF0Y2gg MTUxIHRvIHdvcmsgYXJvdW5kIHRoaXM7IG9yIHVwZ3JhZGUgdG8gYSBsYXRlcgotICAgcmVsZWFz ZS4gU2ltaWxhcmx5LCBJUklYIDUuMiBoYXMgc2V2ZXJhbCBwcm9ibGVtcyB3aXRoIHNlcmlhbCBp L28sIGZsb3cKLSAgIGNvbnRyb2wsIGV0Yy4gQWdhaW4sIHBhdGNoIG9yIHVwZ3JhZGUuCi0KLSAg IFJlcG9ydGVkbHkgb24gbWFjaGluZXMgd2l0aCBJUklYIDQuMCwgS2VybWl0IGNhbm5vdCBiZSBz dXNwZW5kZWQgYnkKLSAgIHR5cGluZyB0aGUgc3VzcGVuZCAoInN3dGNoIikgY2hhcmFjdGVyIGlm IGl0IHdhcyBzdGFydGVkIGZyb20gY3NoLCBldmVuCi0gICB0aG91Z2ggb3RoZXIgcHJvZ3JhbXMg Y2FuIGJlIHN1c3BlbmRlZCB0aGlzIHdheSwgYW5kIGV2ZW4gdGhvdWdoIHRoZSBaCi0gICBhbmQg U1VTUEVORCBjb21tYW5kcyBzdGlsbCB3b3JrIGNvcnJlY3RseS4gVGhpcyBpcyBldmlkZW50bHkg YmVjYXVzZQotICAgSVJJWCdzIGNzaCBkb2VzIG5vdCBkZWxpdmVyIHRoZSBTSUdUU1RQIHNpZ25h bCB0byBLZXJtaXQuIFRoZSByZWFzb24KLSAgIG90aGVyIHByb2dyYW1zIGNhbiBiZSBzdXNwZW5k ZWQgaW4gdGhlIHNhbWUgZW52aXJvbm1lbnQgaXMgcHJvYmFibHkKLSAgIHRoYXQgdGhleSBkbyBu b3QgdHJhcCBTSUdUU1RQIHRoZW1zZWx2ZXMsIHNvIHRoZSBzaGVsbCBpcyBkb2luZyB0aGUKLSAg IHN1c3BlbmRpbmcgcmF0aGVyIHRoYW4gdGhlIGFwcGxpY2F0aW9uLgotCi0gICBBbHNvIHNlZSBu b3RlcyBhYm91dCBJUklYIDMueCBpbiB0aGUgWzUxMF1DLUtlcm1pdCBmb3IgVW5peAotICAgSW5z dGFsbGF0aW9uIEluc3RydWN0aW9ucy4KLQotICAgSWYgeW91IGhhdmUgcHJvYmxlbXMgbWFraW5n IFRDUC9JUCBjb25uZWN0aW9ucyBpbiB2ZXJzaW9ucyBvZiBJUklYCi0gICBidWlsdCB3aXRoIEdD QyAyLjk1LjIsIHNlZSB0aGUgYnVncyBzZWN0aW9uIG9mOgotCi0gIFs1MTFdaHR0cDovL2ZyZWV3 YXJlLnNnaS5jb20vSW5zdGFsbGFibGUvZ2NjLTIuOTUuMi5odG1sLgotCi0gICBSZXBvcnRlZGx5 LCBpZiB5b3UgYWxsb3cgZ2NjIHRvIGNvbXBpbGUgQy1LZXJtaXQgb24gSXJpeCB5b3Ugc2hvdWxk IGJlCi0gICBhd2FyZSB0aGF0IHRoZXJlIG1pZ2h0IGJlIHByb2JsZW1zIHdpdGggc29tZSBvZiB0 aGUgbmV0d29yayBjb2RlLiBUaGUKLSAgIHNwZWNpZmljcyBhcmUgYXQKLSAgIFs1MTJdaHR0cDov L2ZyZWV3YXJlLnNnaS5jb20vSW5zdGFsbGFibGUvZ2NjLTIuOTUuMi5odG1sOyBzY3JvbGwgZG93 bgotICAgdG8gdGhlICJrbm93biBidWdzIiBzZWN0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGRvY3Vt ZW50LgotCi0zLjE1LiBDLUtFUk1JVCBBTkQgVEhFIEJFQk9YCi0KLSAgIFsgWzUxM11Ub3AgXSBb IFs1MTRdQ29udGVudHMgXSBbIFs1MTVdU2VjdGlvbiBDb250ZW50cyBdIFsgWzUxNl1OZXh0IF0K LSAgIFsgWzUxN11QcmV2aW91cyBdCi0KLSAgIFNlZSBhbHNvOiBUaGUgWzUxOF1jb21wLnN5cy5i ZSBuZXdzZ3JvdXAuCi0KLSAgIFRoZSBCZUJveCBoYXMgYmVlbiBkaXNjb250aW51ZWQgYW5kIEJl T1MgcmVwb3NpdGlvbmVkIGZvciBQQyBwbGF0Zm9ybXMuCi0gICBUaGUgUE9TSVggcGFydHMgb2Yg QmVPUyBhcmUgbm90IGZpbmlzaGVkLCBub3IgaXMgdGhlIHNvY2tldHMgbGlicmFyeSwKLSAgIHRo ZXJlZm9yZSBhIGZ1bGx5IGZ1bmN0aW9uYWwgdmVyc2lvbiBvZiBDLUtlcm1pdCBpcyBub3QgcG9z c2libGUuIEluCi0gICB2ZXJzaW9uIDYuMCBvZiBDLUtlcm1pdCwgd3JpdHRlbiBmb3IgQmVPUyBE UjcsIGl0IHdhcyBwb3NzaWJsZSB0bzoKLQotICAgICAqIHNldCBsaW5lIC9kZXYvc2VyaWFsMiAo YW5kIHByb2JhYmx5IHRoZSBvdGhlciBzZXJpYWwgcG9ydHMpCi0gICAgICogc2V0IHNwZWVkIDEx NTIwMCAoYW5kIGF0IGxlYXN0IHNvbWUgb2YgdGhlIGxvd2VyIGJhdWQgcmF0ZXMpCi0gICAgICog Y29ubmVjdAotICAgICAqIHNldCBtb2RlbSB0eXBlIGhheWVzIChhbmQgbGlrZWx5IG90aGVycywg dG9vKQotICAgICAqIGRpYWwgcGhvbmUtbnVtYmVyCi0gICAgICogc2V0IHNlbmQgcGFja2V0LWxl bmd0aCAyMDQ4IChvdGhlciBsZW5ndGhzIGZvciBib3RoIHNlbmQgYW5kCi0gICAgICAgcmVjZWl2 ZSkKLSAgICAgKiBzZXQgcmVjZWl2ZSBwYWNrZXQgbGVuZ3RoIDIwNDgKLSAgICAgKiBzZXQgZmls ZSB0eXBlIGJpbmFyeSAodGV4dCBtb2RlIHdvcmtzLCB0b28pICh3aXRoIHJlbW90ZSBrZXJtaXQK LSAgICAgICBzZXNzaW9uIGluIHNlcnZlciBtb2RlKQotICAgICAqIHB1dCBiZWRyb3AuanBnCi0g ICAgICogZ2V0IGJlZHJvcC5qcGcKLSAgICAgKiBnZXQgYmVkcm9wLmpwZyBiZWRyb3AuanBnMgot ICAgICAqIGZpbmlzaCwgYnllCi0KLSAgIFRoZSBmb2xsb3dpbmcgZG8gbm90IHdvcms6Ci0gICAg ICoga2VybWl0IGRvZXMgbm90IGRldGVjdCBtb2RlbSBoYW5ndXAKLSAgICAgKiAhL1JVTi9QVVNI IFtjb21tYW5kbGluZSBjb21tYW5kXQotICAgICAqIFJ1bm5pbmcga2VybWl0IGluIHJlbW90ZSBt b2RlCi0gICAgICogVXNpbmcgb3RoZXIgcHJvdG9jb2xzICh4L3kvem1vZGVtKQotICAgICAqIFRD UCBuZXR3b3JraW5nIGludGVyZmFjZSAoQmUncyBUQ1AvSVAgQVBJIGhhcyBhIHdheXMgdG8gZ28s IHN0aWxsKQotCi0gICBDLUtlcm1pdCBkb2VzIG5vdCB3b3JrIG9uIEJlT1MgRFI4IGJlY2F1c2Ug b2YgY2hhbmdlcyBpbiB0aGUgdW5kZXJseWluZwotICAgQVBJcy4gVW5mb3J0dW5hdGVseSBub3Qg ZW5vdWdoIGNoYW5nZXMgd2VyZSBtYWRlIHRvIGFsbG93IHRoZSByZWd1bGFyCi0gICBQT1NJWC1i YXNlZCBDLUtlcm1pdCB0byB3b3JrIGVpdGhlci4gTm90ZTogdGhlIGxhY2sgb2YgYSBmb3JrKCkg c2VydmljZQotICAgcmVxdWlyZXMgdGhlIHNlbGVjdCgpLWJhc2VkIENPTk5FQ1QgbW9kdWxlLCBi dXQgdGhlcmUgaXMgbm8gc2VsZWN0KCkuCi0gICBUaGVyZSBpcyBhIHNlbGVjdCgpIGluIERSOCwg YnV0IGl0IGRvZXNuJ3Qgd29yay4KLQotICAgQy1LZXJtaXQgNy4wIHdhcyBidWlsdCBmb3IgQmVP UyA0LjUgYW5kIHdvcmtzIGluIHJlbW90ZSBtb2RlLiBJdCBkb2VzCi0gICBub3QgaW5jbHVkZSBu ZXR3b3JraW5nIHN1cHBvcnQgc2luY2UgdGhlIEFQSXMgYXJlIHN0aWxsIG5vdCB0aGVyZS4gSXQK LSAgIGlzIG5vdCBrbm93biBpZiBkaWFsaW5nIG91dCB3b3JrcywgYnV0IHByb2JhYmx5IG5vdC4g QmUgZXhwZXJ0cyBhcmUKLSAgIHdlbGNvbWUgdG8gbGVuZCBhIGhhbmQuCi0KLTMuMTYuIEMtS0VS TUlUIEFORCBERy9VWAotCi0gICBbIFs1MTldVG9wIF0gWyBbNTIwXUNvbnRlbnRzIF0gWyBbNTIx XVNlY3Rpb24gQ29udGVudHMgXSBbIFs1MjJdTmV4dCBdCi0gICBbIFs1MjNdUHJldmlvdXMgXQot Ci0gICBTb21lYm9keSBkb3dubG9hZGVkIHRoZSBDLUtlcm1pdCA2LjAgYmluYXJ5IGJ1aWx0IHVu ZGVyIERHL1VYIDUuNDAgYW5kCi0gICByYW4gaXQgdW5kZXIgREcvVVggNS40UjMuMTAgLS0gaXQg d29ya2VkIE9LIGV4Y2VwdCB0aGF0IGZpbGUgZGF0ZXMgZm9yCi0gICBpbmNvbWluZyBmaWxlcyB3 ZXJlIGFsbCB3cml0dGVuIGFzIDEgSmFuIDE5NzAuIENhdXNlIGFuZCBjdXJlIHVua25vd24uCi0g ICBXb3JrYXJvdW5kOiBTRVQgQVRUUklCVVRFIERBVEUgT0ZGLiBCZXR0ZXI6IFVzZSBhIHZlcnNp b24gb2YgQy1LZXJtaXQKLSAgIGJ1aWx0IHVuZGVyIGFuZCBmb3IgREcvVVggNS40UjMuMTAuCi0K LTMuMTcuIEMtS0VSTUlUIEFORCBTRVFVRU5UIERZTklYCi0KLSAgIFsgWzUyNF1Ub3AgXSBbIFs1 MjVdQ29udGVudHMgXSBbIFs1MjZdU2VjdGlvbiBDb250ZW50cyBdIFsgWzUyN11OZXh0IF0KLSAg IFsgWzUyOF1QcmV2aW91cyBdCi0KLSAgIFJlcG9ydGVkbHksIHdoZW4gY29taW5nIGludG8gYSBT ZXF1ZW50IFVuaXggKERZTklYKSBzeXN0ZW0gdGhyb3VnaCBhbgotICAgWC4yNSBjb25uZWN0aW9u LCBLZXJtaXQgZG9lc24ndCB3b3JrIHJpZ2h0IGJlY2F1c2UgdGhlIFNlcXVlbnQncwotICAgRklP TlJFQUQgaW9jdGwgcmV0dXJucyBpbmNvcnJlY3QgZGF0YS4gVG8gd29yayBhcm91bmQsIHVzZSB0 aGUKLSAgIDEtY2hhcmFjdGVyLWF0LWEtdGltZSB2ZXJzaW9uIG9mIG15cmVhZCgpIGluIGNrdXRp by5jIChpLmUuIHVuZGVmaW5lCi0gICBNWVJFQUQgaW4gY2t1dGlvLmMgYW5kIHJlYnVpbGQgdGhl IHByb2dyYW0pLiBUaGlzIGlzIHVuc2F0aXNmeWluZwotICAgYmVjYXVzZSB0d28gdmVyc2lvbnMg b2YgdGhlIHByb2dyYW0gd291bGQgYmUgbmVlZGVkIC0tIG9uZSBmb3IgdXNlIG92ZXIKLSAgIFgu MjUsIGFuZCB0aGUgb3RoZXIgZm9yIHNlcmlhbCBhbmQgVENQL0lQIGNvbm5lY3Rpb25zLgotCi0z LjE4LiBDLUtFUk1JVCBBTkQgRlJFRUJTRCwgT1BFTkJTRCwgYW5kIE5FVEJTRAotCi0gICBbIFs1 MjldVG9wIF0gWyBbNTMwXUNvbnRlbnRzIF0gWyBbNTMxXVNlY3Rpb24gQ29udGVudHMgXSBbIFs1 MzJdTmV4dCBdCi0gICBbIFs1MzNdUHJldmlvdXMgXQotCi0gICBTb21lIE5lYkJTRCB1c2VycyBo YXZlIHJlcG9ydGVkIGRpZmZpY3VsdHkgZXNjYXBpbmcgYmFjayBmcm9tIENPTk5FQ1QKLSAgIG1v ZGUsIHVzdWFsbHkgd2hlbiBydW5uaW5nIE5ldEJTRCBvbiBub24tUEMgaGFyZHdhcmUuIFByb2Jh Ymx5IGEKLSAgIGtleWJvYXJkIGlzc3VlLgotCi0gICBOZXRCU0QgdXNlcnMgaGF2ZSBhbHNvIHJl cG9ydGVkIHRoYXQgQy1LZXJtaXQgZG9lc24ndCBwb3AgYmFjayB0byB0aGUKLSAgIHByb21wdCBp ZiB0aGUgbW9kZW0gZHJvcHMgY2Fycmllci4gVGhpcyBuZWVkcyB0byBiZSBjaGVja2VkIG91dCAm IGZpeGVkCi0gICBpZiBwb3NzaWJsZS4KLQotICAgKEFsbCB0aGUgYWJvdmUgc2VlbXMgdG8gd29y ayBwcm9wZXJseSBpbiBDLUtlcm1pdCA3LjAgYW5kIGxhdGVyLikKLQotMy4xOS4gQy1LRVJNSVQg QU5EIE1BQyBPUyBYCi0KLSAgIFsgWzUzNF1Ub3AgXSBbIFs1MzVdQ29udGVudHMgXSBbIFs1MzZd U2VjdGlvbiBDb250ZW50cyBdIFsgWzUzN11OZXh0IF0KLSAgIFsgWzUzOF1QcmV2aW91cyBdCi0K LSAgIE1hYyBPUyBYIGlzIEFwcGxlJ3MgNC40QlNEIFVuaXggdmFyaWV0eSwgY2xvc2VseSByZWxh dGVkIHRvIEZyZWVCU0QsCi0gICBidXQgZGlmZmVyZW50LiAidW5hbWUgLWEiIGlzIHNpbmd1bGFy bHkgdW5pbmZvcm1hdGl2ZSwgYXMgaW4gTGludXgsCi0gICBnaXZpbmcgb25seSB0aGUgRGFyd2lu IGtlcm5lbCB2ZXJzaW9uIG51bWJlci4gVGhlIHdheSB0byBmaW5kIG91dCB0aGUKLSAgIGFjdHVh bCBNYWMgT1MgWCB2ZXJzaW9uIGlzIHdpdGgKLQotICAgICAvdXNyL2Jpbi9zd192ZXJzIC1wcm9k dWN0TmFtZQotICAgICAvdXNyL2Jpbi9zd192ZXJzIC1wcm9kdWN0VmVyc2lvbgotCi0gICBvcjoK LQotICAgICBmZ3JlcCAtQSAxICdQcm9kdWN0VmVyc2lvbicKLSAgICAgL1N5c3RlbS9MaWJyYXJ5 L0NvcmVTZXJ2aWNlcy9TeXN0ZW1WZXJzaW9uLnBsaXN0Ci0KLSAgIEhlcmUgYXJlIHNvbWUgcG9p bnRzIHRvIGJlIGF3YXJlIG9mOgotCi0gICAgICogQSBiaWcgZ290Y2hhIGZvciBLZXJtaXQgdXNl cnMgaXMgdGhhdCBNYWMgT1MgWCBkb2VzIG5vdCBzdXBwb3J0Ci0gICAgICAgc2VyaWFsIHBvcnRz IGFuZCwgYXMgZmFyIGFzIEkgY2FuIHRlbGwsIGRvZXNuJ3Qgc3VwcG9ydCBpdHMKLSAgICAgICBi dWlsdC1pbiBtb2RlbSBlaXRoZXIsIGZvciBhbnl0aGluZyBvdGhlciB0aGFuIG1ha2luZyBJbnRl cm5ldAotICAgICAgIGNvbm5lY3Rpb25zLiBNYWNpbnRvc2hlcyBjYXBhYmxlIG9mIHJ1bm5pbmcg TWFjIE9TIFgsIHN1Y2ggYXMgdGhlCi0gICAgICAgRzUgYW5kIGxhdGVyLCBjb21lIHdpdGhvdXQg c2VyaWFsIHBvcnRzIGFuZCB3aXRob3V0IGFueSBBUElzIHRvCi0gICAgICAgc3VwcG9ydCB0aGVt LCBhbmQgYWxzbyB3aXRob3V0IHRoZSBVVUNQIGZhbWlseSBvZiBwcm9ncmFtcwotICAgICAgIChp bmNsdWRpbmcgY3UpLCBub3IgYW55IHN0YW5kYXJkIGZvciBzZXJpYWwtcG9ydCBsb2NrZmlsZQot ICAgICAgIGRpcmVjdG9yeS4KLSAgICAgKiBFYXJseSB2ZXJzaW9ucyBvZiBNYWMgT1MgWCBjYW1l IHdpdGhvdXQgQ3Vyc2VzLCBUZXJtbGliLCBvcgotICAgICAgIFRlcm1pbmZvIGxpYnJhcmllcy4g TGF0ZXIgdmVyc2lvbnMgc2VlbSB0byBoYXZlIG5jdXJzZXMgKGl0IHdvdWxkCi0gICAgICAgc2Vl bSB0aGF0IE1hYyBPUyBYIDEwLjMuOSB3YXMgdGhlIGZpcnN0IG1hdHVyZSBhbmQgY29tcGxldGUg dmVyc2lvbgotICAgICAgIG9mIE1hYyBPUyBYKS4gS2VybWl0IHVzZXMgY3Vyc2VzIGZvciBpdHMg ZmlsZS10cmFuc2ZlciBkaXNwbGF5LiBTZWUKLSAgICAgICBlbHNld2hlcmUgYWJvdXQgY3Vyc2Vz LXZzLW5jdXJzZXMgY29uZnVzaW9uLgotICAgICAqIEluIHRoZSBIRlMrIGZpbGUgc3lzdGVtLCBm aWxlbmFtZXMgYXJlIGNhc2UtZm9sZGVkLiBUaHVzICJtYWtlZmlsZSIKLSAgICAgICBhbmQgIk1h a2VmaWxlIiBhcmUgdGhlIHNhbWUgZmlsZS4gU28sIGZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBh cmUKLSAgICAgICBzZW5kaW5nIHR3byBkaXN0aW5jdCBmaWxlcywgRm9vIGFuZCBGT08sIGZyb20g KHNheSkgTGludXggdG8gTWFjIE9TCi0gICAgICAgWC4gVGhpcyB3aWxsIHByb2R1Y2UgYSBmaWxl IGNvbGxpc2lvbiB0aGF0IHdpbGwgYmUgaGFuZGxlZAotICAgICAgIGFjY29yZGluZyB0byBNYWMg T1MgWCBDLUtlcm1pdCdzIEZJTEUgQ09MTElTSU9OIHNldHRpbmcsIHdoaWNoIGJ5Ci0gICAgICAg ZGVmYXVsdCBpcyBCQUNLVVAsIHNvIHRoZSBNYWMgd2lsbCB3aW5kIHVwIHdpdGggZmlsZXMgY2Fs bGVkIEZPTwotICAgICAgIGFuZCBGb28ufjF+LgotICAgICAqIEhTRisgZmlsZXMgdGhhdCBhcmUg Y29tcG9zZWQgb2YgYSByZXNvdXJjZSBmb3JrIGFuZCBhIGRhdGEgZm9yay4uLgotICAgICAgIEkg ZG91YnQgdGhhdCBDLUtlcm1pdCBkb2VzIGFueXRoaW5nIHVzZWZ1bCB3aXRoIHRoZW0uIFRoZXJl IGlzIG5vCi0gICAgICAgY29kZSBpbiBDLUtlcm1pdCBmb3IgdHJhZGl0aW9uYWwgdHdvLWZvcmtl ZCBNYWNpbnRvc2ggZmlsZXMsIGJ1dCBpdAotICAgICAgIGNvdWxkIGJlIGFkZGVkIGlmIHRoZXJl IGlzIGFueSBkZW1hbmQgKGNvZGUgZm9yIHRoaXMgZXhpc3RlZCBpbgotICAgICAgIFs1MzldTWFj IEtlcm1pdCwgdGhlIG9sZCBwcmUtTWFjLU9TLVggTWFjaW50b3NoIHZlcnNpb24gb2YKLSAgICAg ICBDLUtlcm1pdCkuCi0gICAgICogSW4gY2FzZSB5b3Ugd2FudCB0byB0cmFuc2ZlciBhIHRyYWRp dGlvbmFsIE1hY2ludG9zaCB0ZXh0IGZpbGUgKG9yCi0gICAgICAgZGF0YSBmb3JrIG9mIGEgZmls ZSB0aGF0IGlzIHBsYWluIHRleHQpLCB5b3UgY2FuIHVzZSB0aGVzZSBDLUtlcm1pdAotICAgICAg IGNvbW1hbmRzOgotCi1zZXQgZmlsZSBlb2wgY3IKLXNldCBmaWxlIGNoYXJhY3Rlci1zZXQgYXBw bGUtcXVpY2tkcmF3Ci1zZW5kIC90ZXh0IGZpbGVuYW1lCi0KLSAgICAgKiBGaWxlIG9yIHBhdGhu YW1lcyB0aGF0IGluY2x1ZGUgc3BhY2VzIG11c3QgYmUgZW5jbG9zZWQgaW4gZWl0aGVyCi0gICAg ICAgZG91YmxlcXVvdGVzIG9yIGN1cmx5IGJyYWNlcyBpbiBDLUtlcm1pdCBjb21tYW5kcy4KLSAg ICAgKiBNYWMgT1MgWCBjYW4gdXNlIGEgdGhpcmQtcGFydHkgcGFja2FnZSBtYW5hZ2VyIGNhbGxl ZCAiZmluayIuCi0gICAgICAgVmFyaW91cyBmaW5rIHBhY2thZ2VzIGZvciBDLUtlcm1pdCBhcmUg ZmxvYXRpbmcgYXJvdW5kIHRoYXQgYXJlIG5vdAotICAgICAgIHN0YW5kYXJkIHJlbGVhc2VzLiBG b3IgZXhhbXBsZSwgdGhlcmUncyBhIEMtS2VybWl0IDguMC4yMDEgcGFja2FnZQotICAgICAgIGlu IHdoaWNoIEMtS2VybWl0IHdhcyBtb2RpZmllZCAoYXQgbGVhc3QpIHRvIHVzZSBhIFVVQ1AgbG9j a2ZpbGUKLSAgICAgICBkaXJlY3RvcnkgdGhhdCBkb2VzIG5vdCBleGlzdCBvbiB2YW5pbGxhIE1h YyBPUyBYIHN5c3RlbXMuCi0KLU1hYyBPUyBYIGFuZCBTZXJpYWwgUG9ydHMKLQotICAgQXBwbGUg aXMgaW4gdGhlIGZvcmVmcm9udCBvZiBjb21wYW5pZXMgdGhhdCBiZWxpZXZlIHNlcmlhbCBwb3J0 cyBoYXZlCi0gICBubyB1c2UgaW4gdGhlIG1vZGVybiB3b3JsZCBhbmQgc28gaGFzIHNpbXBseSBl bGltaW5hdGVkIGFsbCB0cmFjZXMgb2YKLSAgIHRoZW0gZnJvbSBpdHMgbWFjaGluZXMgYW5kIE9T LiBCdXQgb2YgY291cnNlIHNlcmlhbCBwb3J0cyBhcmUgc3RpbGwKLSAgIG5lZWRlZCB0byBjb25u ZWN0IG5vdCBvbmx5IHRvIGV4dGVybmFsIG1vZGVtcywgYnV0IGFsc28gdG8gdGhlIGNvbnRyb2wK LSAgIHBvcnRzIG9mIGh1YnMsIHJvdXRlcnMsIHRlcm1pbmFsIHNlcnZlcnMsIFBCWHMsIGFuZCBz aW1pbGFyIGRldmljZXMsCi0gICBub3QgdG8gbWVudGlvbiBiYXJjb2RlIHJlYWRlcnMsIFBPUyBz eXN0ZW1zIGFuZCBjb21wb25lbnRzLCBzcGVha2luZwotICAgZGV2aWNlcywgaGFuZCBjYWxjdWxh dG9ycyBzdWNoIGFzIHRoZSBIUDQ4LCBhdXRvbWF0ZWQgZmFjdG9yeS1mbG9vcgotICAgZXF1aXBt ZW50LCBhbmQgc2NpZW50aWZpYywgbWVkaWNhbCwgYW5kIGxhYiBlcXVpcG1lbnQgKHRvIG5hbWUg YSBmZXcpLgotICAgQW1vbmcgd29ya2VycyBpbiB0aGVzZSBhcmVhcywgdGhlcmUgaXMgYSBuZWVk IHRvIGFkZCBzZXJpYWwgcG9ydHMgYmFjawotICAgb250byB0aGlzIHBsYXRmb3JtLCB3aGljaCBp cyBiZWluZyBmaWxsZWQgYnkgdGhpcmQtcGFydHkgcHJvZHVjdHMgc3VjaAotICAgYXMgdGhlIFs1 NDBdS2V5c3BhbiBIaWdoIFNwZWVkIFVTQiBTZXJpYWwgQWRhcHRlciBVU0EtMTlIUywgd2hpY2gg aGFzIGEKLSAgIERCLTkgbWFsZSBjb25uZWN0b3IuIFRvIHVzZSB0aGUgS2V5c3BhbiBkZXZpY2Us IHlvdSBtdXN0IGluc3RhbGwgdGhlCi0gICBhY2NvbXBhbnlpbmcgZGV2aWNlIGRyaXZlcnMsIHdo aWNoIHdpbmRzIHVwIGdpdmluZyB5b3Ugc2VyaWFsIHBvcnRzCi0gICB3aXRoIG5hbWVzIGxpa2Ug L2Rldi9jdS5VU0ExOUgzYjFQMS4xLCAvZGV2L2N1LktleVNlcmlhbDEsCi0gICAvZGV2L3R0eS5L ZXlTZXJpYWwxLgotCi0gICBDLUtlcm1pdCA5LjAgd29ya3MgIm91dCBvZiB0aGUgYm94IiB3aXRo IHRoaXJkLXBhcnR5IHNlcmlhbCBwb3J0cyBvbgotICAgTWFjIE9TIFgsIGJlY2F1c2UgaXQgaXMg YnVpbHQgYnkgZGVmYXVsdCAoIm1ha2UgbWFjb3N4Iikgd2l0aG91dCB0aGUKLSAgICJVVUNQIGxv Y2tmaWxlIiBmZWF0dXJlLiBJZiB5b3UgaGF2ZSBDLUtlcm1pdCA5LjAgb24gYSBwZXJzb25hbAot ICAgTWFjaW50b3NoLCB5b3UgY2FuIHNraXAgdGhlIG5leHQgc2VjdGlvbi4KLQotTWFjIE9TIFgg U2VyaWFsIFBvcnRzIHdpdGggQy1LZXJtaXQgOC4wIGFuZCBlYXJsaWVyCi0KLSAgIEluIGVhcmxp ZXIgdmVyc2lvbnMgb2YgQy1LZXJtaXQsIHlvdSdsbCBuZWVkIHRvIGVpdGhlciBidWlsZCBhIHNw ZWNpYWwKLSAgIC1ETk9VVUNQIHZlcnNpb24sIG9yIGRlYWwgd2l0aCB0aGUgVVVDUCBwb3J0IGNv bnRlbnRpb24gc3l0ZW0gaW4KLSAgIFs1NDFdYWxsIGl0cyBnbG9yeSAodGhpcyBpcyB1c3VhbGx5 IGFuIGV4ZXJjaXNlIGluIGZ1dGlsaXR5IGJlY2F1c2UgYW55Ci0gICBvdGhlciBhcHBsaWNhdGlv bnMgb24geW91ciBNYWMgdGhhdCB1c2UgdGhlIHNlcmlhbCBwb3J0IHdpbGwgbm90Ci0gICBuZWNl c3NhcmlseSBmb2xsb3cgdGhlIHNhbWUgY29udmVudGlvbnMpOgotCi0gICAgMS4gc3UgKG9yIHN1 ZG8gLXMpCi0gICAgICAgY2hncnAgeHh4eCAvdmFyL3Nwb29sL2xvY2sKLSAgICAgICBjaG1vZCBn K3cgL3Zhci9zcG9vbC9sb2NrCi0gICAgICAgY2hncnAgeHh4eCAvZGV2L2N1LioKLSAgICAgICAo d2hlcmUgeHh4eCBpcyB0aGUgbmFtZSBvZiB0aGUgZ3JvdXAgZm9yIHVzZXJzIHRvIHdob20gc2Vy aWFsLXBvcnQKLSAgICAgICBhY2Nlc3MgaXMgdG8gYmUgZ3JhbnRlZCkuIFVzZSAiYWRtaW4iIG9y IG90aGVyIGV4aXN0aW5nIGdyb3VwLCBvcgotICAgICAgIGNyZWF0ZSBhIG5ldyBncm91cCBpZiBk ZXNpcmVkLiBOQjoKLQotICAgICBJbiB0aGUgYWJzZW5jZSBvZiBvZmZpY2lhbCBndWlkYW5jZSBm cm9tIEFwcGxlIG9yIGFueW9uZSBlbHNlLCB3ZQotICAgICBjaG9vc2UgL3Zhci9zcG9vbC9sb2Nr IGFzIHRoZSBsb2NrZmlsZSBkaXJlY3RvcnkgYmVjYXVzZSB0aGlzCi0gICAgIGRpcmVjdG9yeSAo YSkgYWxyZWFkeSBleGlzdHMgb24gdmFuaWxsYSBNYWMgT1MgWCBpbnN0YWxsYXRpb25zLCBhbmQK LSAgICAgKGIpIGl0IGlzIHRoZSBkaXJlY3RvcnkgdXNlZCBmb3Igc2VyaWFsLXBvcnQgbG9ja2Zp bGVzIG9uIG1hbnkgb3RoZXIKLSAgICAgcGxhdGZvcm1zLgotICAgIDIuIFB1dCBhbGwgdXNlcnMg d2hvIG5lZWQgYWNjZXNzIHRvIHRoZSBzZXJpYWwgcG9ydCBpbiB0aGUgc2FtZSBncm91cC4KLSAg ICAzLiBNYWtlIHN1cmUgdGhlIHNlcmlhbCBkZXZpY2UgZmlsZXMgdGhhdCBhcmUgdG8gYmUgdXNl ZCBieSBDLUtlcm1pdAotICAgICAgIGhhdmUgZ3JvdXAgcmVhZC13cml0ZSBwZXJtaXNzaW9uIGFu ZCAoaWYgeW91IGNhcmUpIGxhY2sgd29ybGQKLSAgICAgICByZWFkLXdyaXRlIHBlcm1pc3Npb24s IGUuZy46Ci0KLSAgICAgY2htb2QgZytydyxvLXJ3IC9kZXYvY3UuKgotCi0gICBJZiB5b3UgZG8g dGhlIGFib3ZlLCB0aGVuIHRoZXJlJ3Mgbm8gbmVlZCB0byBiZWNvbWUgcm9vdCB0byB1c2UgS2Vy bWl0LAotICAgb3IgdG8gbWFrZSBLZXJtaXQgc3VpZCBvciBzZ2lkLiBKdXN0IGRvIHRoaXM6Ci0K LWNobW9kIDc3NSB3ZXJtaXQKLW12IHdlcm1pdCAvdXNyL2xvY2FsL2tlcm1pdAotCi0gICAob3Ig d2hhdGV2ZXIgc3BvdCBpcyBtb3JlIGFwcHJvcHJpYXRlLCBlLmcuIC91c3IvYmluLykuIEZvciBn cmVhdGVyCi0gICBkZXRhaWwgYWJvdXQgaW5zdGFsbGF0aW9uLCBbNTQyXUNMSUNLIEhFUkUuCi0K LSAgIEFsdGVybmF0aXZlbHksIHRvIGJ1aWxkIGEgcHJlLTkuMCB2ZXJzaW9uIG9mIEMtS2VybWl0 IHdpdGhvdXQgVVVDUAotICAgbG9ja2ZpbGUgc3VwcG9ydCwgc2V0IHRoZSBOT1VVQ1AgZmxhZzsg ZS5nLiAoZm9yIE1hYyBPUyAxMC40KToKLQotICAgICBtYWtlIG1hY29zeDEwLjQgS0ZMQUdTPS1E Tk9VVUNQCi0KLSAgIFRoaXMgY2lyY3VtdmVudHMgdGhlIFNFVCBQT1JUIGZhaWx1cmUgIj9BY2Nl c3MgdG8gbG9ja2ZpbGUgZGlyZWN0b3J5Ci0gICBkZW5pZWQiLiBCdXQgaXQgYWxzbyBzYWNyaWZp Y2VzIEtlcm1pdCdzIGFiaWxpdHkgdG8gZW5zdXJlIHRoYXQgb25seQotICAgb25lIGNvcHkgb2Yg S2VybWl0IGNhbiBoYXZlIHRoZSBkZXZpY2Ugb3BlbiBhdCBhIHRpbWUsIHNpbmNlIE1hYyBPUyBY Ci0gICBpcyB0aGUgc2FtZSBhcyBhbGwgb3RoZXIgdmFyaWV0aWVzIG9mIFVuaXggaW4gdGhhdCBl eGNsdXNpdmUgYWNjZXNzIHRvCi0gICBzZXJpYWwgcG9ydHMgaXMgbm90IGVuZm9yY2VkIGluIGFu eSB3YXkuIEJ1dCBpZiBpdCdzIGZvciB5b3VyIG93bgotICAgZGVza3RvcCBtYWNoaW5lIHRoYXQg bm9ib2R5IGVsc2UgdXNlcywgYSAtRE5PVVVDUCB2ZXJzaW9uIG1pZ2h0IGJlCi0gICBhZGVxdWF0 ZSBhbmQgcHJlZmVyYWJsZSB0byB0aGUgYWx0ZXJuYXRpdmVzLgotCi0gICBUbyBidWlsZCBDLUtl cm1pdCA5LjAgd2l0aCBVVUNQIHN1cHBvcnQsIGRvOgotCi0gICAgIG1ha2UgbWFjb3N4IEtGTEFH Uz0tVU5PVVVDUAotCi0gICAobm90ZTogIi1VIiwgbm90ICItRCkuCi0KLVJTLTIzMiB2ZXJzdXMg UlMtNDIyCi0KLSAgIE1lYW53aGlsZSwgYmFjayB3aGVuIE1hY3MgaGFkIHNlcmlhbCBwb3J0cywg dGhleSB3ZXJlIG5vdCBSUy0yMzIgKHRoZQotICAgc3RhbmRhcmQgZm9yIGNvbm5lY3RpbmcgY29t cHV0ZXJzIHdpdGggbmVhcmJ5IG1vZGVtcykgYnV0IHJhdGhlciBSUy00MjIKLSAgIG9yIC00MjMg KGEgc3RhbmRhcmQgZm9yIGNvbm5lY3Rpbmcgc2VyaWFsIGRldmljZXMgb3ZlciBsb25nZXIKLSAg IGRpc3RhbmNlcykuIE1hY2ludG9zaCBzZXJpYWwgcG9ydHMgZG8gbm90IHN1cHBvcnQgbW9kZW1z IHdlbGwgYmVjYXVzZQotICAgdGhleSBkbyBub3QgaGF2ZSBlbm91Z2ggd2lyZXMgKG9yIG1vcmUg cHJvcGVybHkgaW4gdGhlIGNhc2UgUlMtNDIyLzQyMywKLSAgIHdpcmUgcGFpcnMpIHRvIGNvbnZl eSBhIHVzZWZ1bCBzdWJzZXQgb2YgbW9kZW0gc2lnbmFscy4KLQotICAgS2V5c3BhbiBhbHNvIHNl bGxzIGEgWzU0M11VU0IgVHdpbiBTZXJpYWwgQWRhcHRlciB0aGF0IGdpdmVzIHlvdSB0d28KLSAg IE1pbmktRGluOCBSUy00MjIgcG9ydHMsIHRoYXQgYXJlIG5vIGJldHRlciAob3Igd29yc2UpIGZv ciBjb21tdW5pY2F0aW5nCi0gICB3aXRoIG1vZGVtcyBvciBzZXJpYWwgZGV2aWNlcyB0aGFuIGEg cmVhbCBNYWMgRGluLTggcG9ydCB3YXMuIEluCi0gICBlc3NlbmNlLCB5b3UgZ2V0IERhdGEgSW4s IERhdGEgT3V0LCBhbmQgdHdvIG1vZGVtIHNpZ25hbHMuIEl0IGxvb2tzIHRvCi0gICBtZSBhcyBp ZiB0aGUgc2lnbmFscyBjaG9zZW4gYnkgS2V5c3BhbiBhcmUgUlRTIGFuZCBDVFMuIFRoaXMgZ2l2 ZXMgeW91Ci0gICBoYXJkd2FyZSBmbG93IGNvbnRyb2wsIGJ1dCBhdCB0aGUgZXhwZW5zZSBvZiBD YXJyaWVyIERldGVjdC4gVGh1cyB0bwotICAgdXNlIEMtS2VybWl0IHdpdGggYSBLZXlzcGFuIFVT QiBzZXJpYWwgcG9ydCwgeW91IG11c3QgdGVsbCBDLUtlcm1pdCB0bzoKLQotc2V0IG1vZGVtIHR5 cGUgbm9uZSAgICAgICAgICAgICAgICA7IChkb24ndCBleHBlY3QgYSBtb2RlbSkKLXNldCBjYXJy aWVyLXdhdGNoIG9mZiAgICAgICAgICAgICAgOyAoaWdub3JlIGNhcnJpZXIgc2lnbmFsKQotc2V0 IHBvcnQgL2Rldi9jdS5VU0ExOUgzYjFQMS4xICAgICA7IChvcGVuIHRoZSBwb3J0KQotc2V0IGZs b3cgcnRzL2N0cyAgICAgICAgICAgICAgICAgICA7ICh0aGlzIGlzIHRoZSBkZWZhdWx0KQotc2V0 IHNwZWVkIDU3NjAwICAgICAgICAgICAgICAgICAgICA7IChvciB3aGF0ZXZlcikKLWNvbm5lY3Qg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAob3IgRElBTCBvciB3aGF0ZXZlcikKLQotICAg VXNlIEN0cmwtXEMgaW4gdGhlIG5vcm1hbCBtYW5uZXIgdG8gZXNjYXBlIGJhY2sgdG8gdGhlIEMt S2VybWl0PgotICAgcHJvbXB0LiBLZXJtaXQgY2FuJ3QgcG9wIGJhY2sgdG8gaXRzIHByb21wdCBh dXRvbWF0aWNhbGx5IHdoZW4gQ2FycmllcgotICAgZHJvcHMgYmVjYXVzZSB0aGVyZSBpcyBubyBD YXJyaWVyIHNpZ25hbCBpbiB0aGUgcGh5c2ljYWwgaW50ZXJmYWNlLgotCi0gICBIZXJlJ3MgYSB0 eXBpY2FsIHNlcXVlbmNlIGZvciBjb25uZWN0aW5nIHRvIENpc2NvIGRldmljZXMgKHVzaW5nIGEK LSAgIG1peHR1cmUgb2YgY29tbWFuZC1saW5lIG9wdGlvbnMgYW5kIGludGVyYWN0aXZlIGNvbW1h bmRzIGF0IHRoZQotICAgcHJvbXB0KToKLQotJCBja2VybWl0IC1sIC9kZXYvY3UuVVNBMTlIM2Ix UDEuMSAtYiA5NjAwCi1DLUtlcm1pdD4gc2V0IGNhcnJpZXItd2F0Y2ggb2ZmCi1DLUtlcm1pdD4g Y29ubmVjdAotCi0gICBJbnN0cnVjdGlvbnMgZm9yIHRoZSBidWlsdC1pbiBtb2RlbSAoaWYgYW55 KSByZW1haW4gdG8gYmUgd3JpdHRlbiBkdWUKLSAgIHRvIGxhY2sgb2Yga25vd2xlZGdlLiBJZiB5 b3UgY2FuIGNvbnRyaWJ1dGUgaW5zdHJ1Y3Rpb25zLCBoaW50cywgb3IKLSAgIHRpcHMsIHBsZWFz ZSBbNTQ0XXNlbmQgdGhlbSBpbi4KLQotMy4yMC4gQy1LRVJNSVQgQU5EIENPSEVSRU5UCi0KLSAg IFsgWzU0NV1Ub3AgXSBbIFs1NDZdQ29udGVudHMgXSBbIFs1NDddU2VjdGlvbiBDb250ZW50cyBd IFsKLSAgIFs1NDhdUHJldmlvdXMgXQotCi0gICBBbHNvIHNlZToKLQotICAgICBbNTQ5XWh0dHA6 Ly93d3cudW5pLWdpZXNzZW4uZGUvZmFxL2FyY2hpdi9jb2hlcmVudC1mYXEuZ2VuZXJhbC9tc2cw MDAKLSAgIDAwLmh0bWwKLQotICAgTWFyayBXaWxsaWFtcyBDT0hFUkVOVCB3YXMgcGVyaGFwcyB0 aGUgZmlyc3QgY29tbWVyY2lhbCBVbml4LWJhc2VkCi0gICBvcGVyYXRpbmcgc3lzdGVtIGZvciBQ Q3MsIGZpcnN0IGFwcGVhcmluZyBhYm91dCAxOTgzIG9yIC04NCBmb3IgdGhlCi0gICBQQy9YVCAo PyksIGFuZCBwb3B1bGFyIHVudGlsIGFib3V0IDE5OTMsIHdoZW4gTGludXggdG9vayBvdmVyLgot ICAgQy1LZXJtaXQsIGFzIG9mIHZlcnNpb24gOC4wLCBpcyBzdGlsbCBjdXJyZW50IGZvciBDT0hF UkVOVCAzODYgNC4yCi0gICAoaS5lLiBvbmx5IGZvciBpMzg2IGFuZCBhYm92ZSkuIEN1cnNlcyBp cyBpbmNsdWRlZCwgYnV0IGxvdHMgb2Ygb3RoZXIKLSAgIGZlYXR1cmVzIGFyZSBvbWl0dGVkIGR1 ZSB0byBsYWNrIG9mIHRoZSBhcHByb3ByaWF0ZSBPUyBmZWF0dXJlcywgQVBJcywKLSAgIGxpYnJh cmllcywgaGFyZHdhcmUsIG9yIGp1c3Qgc3BhY2U6IGUuZy4gVENQL0lQLCBmbG9hdGluZy1wb2lu dAotICAgYXJpdGhtZXRpYywgbGVhcm5lZCBzY3JpcHRzLiBFYXJsaWVyIHZlcnNpb25zIG9mIENP SEVSRU5UIHJhbiBvbiA4MDg2Ci0gICBhbmQgODAyODYsIGJ1dCB0aGVzZSBhcmUgdG8gc21hbGwg dG8gYnVpbGQgb3IgcnVuIEMtS2VybWl0LCBidXQKLSAgIEctS2VybWl0IHNob3VsZCBiZSBPSyAo YXMgbWlnaHQgYmUgYW5jaWVudCB2ZXJzaW9ucyBvZiBDLUtlcm1pdCkuCi0KLSAgIFlvdSBjYW4g YWN0dWFsbHkgYnVpbGQgYSB2ZXJzaW9uIHdpdGggZmxvYXRpbmcgcG9pbnQgc3VwcG9ydCAtLSBq dXN0Ci0gICB0YWtlIC1ETk9GTE9BVCBvdXQgb2YgQ0ZMQUdTIGFuZCBhZGQgLWxtIHRvIExJQlM7 IE5PRkxPQVQgaXMgdGhlCi0gICBkZWZhdWx0IGJlY2F1c2UgQ09IRVJFTlQgdGVuZHMgdG8gcnVu IG9uIG9sZCBQQ3MgdGhhdCBkb24ndCBoYXZlCi0gICBmbG9hdGluZy1wb2ludCBoYXJkd2FyZS4g WW91IGNhbiBhbHNvIGFkZCAiLWYiIHRvIENGTEFHUyB0byBoYXZlIGl0Ci0gICBsaW5rIGluIHRo ZSBmbG9hdGluZy1wb2ludCBlbXVsYXRpb24gbGlicmFyeS4gQWxzbyBJJ20gbm90IHN1cmUgd2h5 Ci0gICAtRE5PTEVBUk4gaXMgaW5jbHVkZWQsIHNpbmNlIGl0IGRlcGVuZHMgb24gc2VsZWN0KCks IHdoaWNoIENPSEVSRU5UCi0gICBoYXMuCi0KLTQuIEdFTkVSQUwgVU5JWC1TUEVDSUZJQyBISU5U UywgTElNSVRBVElPTlMsIEFORCBCVUdTCi0KLSAgIFsgWzU1MF1Ub3AgXSBbIFs1NTFdQ29udGVu dHMgXSBbIFs1NTJdTmV4dCBdIFsgWzU1M11QcmV2aW91cyBdCi0KLTQuMS4gTW9kZW0gU2lnbmFs cwotCi0gICBUaGVyZSBzZWVtcyB0byBiZSBhbiBlc2NhbGF0aW5nIGRlbWFuZCBmb3IgdGhlIGFi aWxpdHkgdG8gY29udHJvbCAiZHVtYgotICAgc2VyaWFsIGRldmljZXMiIChzdWNoIGFzICJzbWFy dGNhcmQgcmVhZGVycyIsIGJhcmNvZGUgcmVhZGVycywgZXRjKSBieQotICAgZXhwbGljaXRseSBt YW5pcHVsYXRpbmcgbW9kZW0gc2lnbmFscywgcGFydGljdWxhcmx5IFJUUy4gVGhpcyBtaWdodAot ICAgaGF2ZSBiZWVuIGVhc3kgdG8gZG8gaW4gRE9TLCB3aGVyZSB0aGVyZSBpcyBubyBvcGVyYXRp bmcgc3lzdGVtCi0gICBzdGFuZGluZyBiZXR3ZWVuIHRoZSBhcHBsaWNhdGlvbiBhbmQgdGhlIHNl cmlhbCBkZXZpY2UsIGJ1dCBpdCBpcwotICAgcHJvYmxlbWF0aWMgaW4gVW5peCwgd2hlcmUgbW9k ZW0gc2lnbmFscyBhcmUgY29udHJvbGxlZCBieSB0aGUgc2VyaWFsCi0gICBkZXZpY2UgZHJpdmVy LiBJZiB0aGUgZHJpdmVyIGRvZXMgbm90IHByb3ZpZGUgYW4gQVBJIGZvciBkb2luZyB0aGlzLAot ICAgdGhlbiB0aGUgYXBwbGljYXRpb24gY2FuJ3QgZG8gaXQuIElmIGl0IGRvZXMgcHJvdmlkZSBh biBBUEksIGV4cGVjdCBpdAotICAgdG8gYmUgdG90YWxseSBkaWZmZXJlbnQgb24gZWFjaCBVbml4 IHBsYXRmb3JtLCBzaW5jZSB0aGVyZSBpcyBubwotICAgc3RhbmRhcmQgZm9yIHRoaXMuCi0KLTQu Mi4gTkZTIFRyb3VibGVzCi0KLSAgIEJlZ2lubmluZyB3aXRoIEMtS2VybWl0IDYuMCwgdGhlIGRl ZmF1bHQgQy1LZXJtaXQgcHJvbXB0IGluY2x1ZGVzIHlvdXIKLSAgIGN1cnJlbnQgKHdvcmtpbmcp IGRpcmVjdG9yeTsgZm9yIGV4YW1wbGU6Ci0KLSAgWy91c3Ivb2xnYV0gQy1LZXJtaXQ+Ci0KLSAg IChJbiBDLUtlcm1pdCA3LjAgdGhlIHNxdWFyZSBicmFjZXMgd2VyZSByZXBsYWNlZCBieSByb3Vu ZCBwYXJlbnRoZXNlcwotICAgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggSVNPIDY0NiBuYXRpb25h bCBjaGFyYWN0ZXIgc2V0cy4pCi0KLSAgIElmIHRoYXQgZGlyZWN0b3J5IGlzIG9uIGFuIE5GUy1t b3VudGVkIGRpc2ssIGFuZCBORlMgc3RvcHMgd29ya2luZyBvcgotICAgdGhlIGRpc2sgYmVjb21l cyB1bmF2YWlsYWJsZSwgQy1LZXJtaXQgd2lsbCBoYW5nIHdhaXRpbmcgZm9yIE5GUyBhbmQvb3IK LSAgIHRoZSBkaXNrIHRvIGNvbWUgYmFjay4gV2hldGhlciB5b3UgY2FuIGludGVycnVwdCBDLUtl cm1pdCB3aGVuIGl0IGlzCi0gICBodW5nIHRoaXMgd2F5IGRlcGVuZHMgb24gdGhlIHNwZWNpZmlj IE9TLiBLZXJtaXQgaGFzIGNhbGxlZCB0aGUKLSAgIG9wZXJhdGluZyBzeXN0ZW1zJ3MgZ2V0Y3dk KCkgZnVuY3Rpb24sIGFuZCBpcyB3YWl0aW5nIGZvciBpdCB0byByZXR1cm4uCi0gICBTb21lIHZl cnNpb25zIG9mIFVuaXggKGUuZy4gSFAtVVggOS54KSBhbGxvdyB0aGlzIGZ1bmN0aW9uIHRvIGJl Ci0gICBpbnRlcnJ1cHRlZCB3aXRoIFNJR0lOVCAoQ3RybC1DKSwgb3RoZXJzIChzdWNoIGFzIEhQ LVVYIDgueCkgZG8gbm90LiBUbwotICAgYXZvaWQgdGhpcyBlZmZlY3QsIHlvdSBjYW4gYWx3YXlz IHVzZSBTRVQgUFJPTVBUIHRvIGNoYW5nZSB5b3VyIHByb21wdAotICAgdG8gc29tZXRoaW5nIHRo YXQgZG9lcyBub3QgaW52b2x2ZSBjYWxsaW5nIGdldGN3ZCgpLCBidXQgaWYgTkZTIGlzIG5vdAot ICAgcmVzcG9uZGluZywgQy1LZXJtaXQgd2lsbCBzdGlsbCBoYW5nIGFueSB0aW1lIHlvdSBnaXZl IGEgY29tbWFuZCB0aGF0Ci0gICByZWZlcnMgdG8gYW4gTkZTLW1vdW50ZWQgZGlyZWN0b3J5LiBB bHNvIG5vdGUgdGhhdCBpbiBzb21lIGNhc2VzLCB0aGUKLSAgIHVuaW50ZXJydXB0aWJpbGl0eSBv ZiBORlMtZGVwZW5kZW50IHN5c3RlbSBvciBsaWJyYXJ5IGNhbGxzIGlzCi0gICBjb25zaWRlcmVk IGEgYnVnLCBhbmQgc29tZXRpbWVzIHRoZXJlIGFyZSBwYXRjaGVzLiBGb3IgSFAtVVgsIGZvcgot ICAgZXhhbXBsZToKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZXBsYWNlZCBieToKLSAgSFAtVVggMTAuMjAgICAgIGxpYmMgICAgUEhD T184NzY0ICAgICAgICAgICAgICAgICAgICAgUEhDT18xNDg5MS9QSENPXzE2NzIzCi0gIEhQLVVY IDEwLjEwICAgICBsaWJjICAgIFBIQ09fODc2MyAgICAgICAgICAgICAgICAgICAgIFBIQ09fMTQy NTQvUEhDT18xNjcyMgotICBIUC1VWCA5LnggICAgICAgbGliYyAgICBQSENPXzc3NDcgICAgICAg UzcwMCAgICAgICAgICBQSENPXzEzMDk1Ci0gIEhQLVVYIDkueCAgICAgICBsaWJjICAgIFBIQ09f Njc3OSAgICAgICBTODAwICAgICAgICAgIFBIQ09fMTExNjIKLQotNC4zLiBDLUtlcm1pdCBhcyBM b2dpbiBTaGVsbAotCi0gICBZb3UgbWlnaHQgaGF2ZSByZWFzb24gdG8gbWFrZSBDLUtlcm1pdCB0 aGUgbG9naW4gc2hlbGwgZm9yIGEgc3BlY2lmaWMKLSAgIHVzZXIsIGJ5IGVudGVyaW5nIHRoZSBw YXRobmFtZSBvZiBLZXJtaXQgKHBvc3NpYmx5IHdpdGggY29tbWFuZC1saW5lCi0gICBzd2l0Y2hl cywgc3VjaCBhcyAteCB0byBwdXQgaXQgaW4gc2VydmVyIG1vZGUpIGludG8gdGhlIHNoZWxsIGZp ZWxkIG9mCi0gICB0aGUgL2V0Yy9wYXNzd2QgZmlsZS4gVGhpcyB3b3JrcyBwcmV0dHkgd2VsbC4g SW4gc29tZSBjYXNlcywgZm9yCi0gICAidWx0aW1hdGUgc2VjdXJpdHkiLCB5b3UgbWlnaHQgd2Fu dCB0byB1c2UgYSB2ZXJzaW9uIGJ1aWx0IHdpdGgKLSAgIC1ETk9QVVNIIChzZWUgdGhlIFs1NTRd Q29uZmlndXJhdGlvbnMgT3B0aW9ucyBkb2N1bWVudCBmb3IgdGhpcywgYnV0Ci0gICBldmVuIGlm IHlvdSBkb24ndCwgdGhlbiBQVVNIaW5nIG9yIHNoZWxsaW5nIG91dCBmcm9tIEMtS2VybWl0IGp1 c3QKLSAgIGJyaW5ncyB1cCBhIG5ldyBjb3B5IG9mIEMtS2VybWl0IChidXQgd2FybmluZzogdGhp cyBkb2VzIG5vdCBwcmV2ZW50Ci0gICB0aGUgdXNlciBmcm9tIGV4cGxpY2l0bHkgcnVubmluZyBh IHNoZWxsOyBlLmcuICJydW4gL2Jpbi9zaCI7IHVzZQotICAgTk9QVVNIIHRvIHByZXZlbnQgdGhp cykuCi0KLTQuNC4gQy1LZXJtaXQgdmVyc3VzIHNjcmVlbiBhbmQgc3BsaXR2dAotCi0gICBDLUtl cm1pdCBmaWxlIHRyYW5zZmVycyB3aWxsIHByb2JhYmx5IG5vdCB3b3JrIGlmIGF0dGVtcHRlZCB0 aHJvdWdoIHRoZQotICAgInNwbGl0dnQiIG9yIEdOVSAic2NyZWVuIiBwcm9ncmFtcyBiZWNhdXNl IHRoZSBzY3JlZW4gb3B0aW1pemF0aW9uIChvcgotICAgYXQgbGVhc3QsIGxpbmUgd3JhcHBpbmcs IGNvbnRyb2wtY2hhcmFjdGVyIGFic29ycHRpb24pIGRvbmUgYnkgdGhpcwotICAgcGFja2FnZSBp bnRlcmZlcmVzIHdpdGggS2VybWl0J3MgcGFja2V0cy4KLQotICAgVGhlIHNhbWUgY2FuIGFwcGx5 IHRvIGFueSBvdGhlciBlbnZpcm9ubWVudCBpbiB3aGljaCB0aGUgdXNlcidzIHNlc3Npb24KLSAg IGlzIGNhcHR1cmVkLCBtb25pdG9yZWQsIHJlY29yZGVkLCBvciBtYW5pcHVsYXRlZC4gRXhhbXBs ZXMgaW5jbHVkZSB0aGUKLSAgICdzY3JpcHQnIHByb2dyYW0gKGZvciBtYWtpbmcgYSB0eXBlc2Ny aXB0IG9mIGEgc2Vzc2lvbiksIHRoZQotICAgQ29tcHV0cm9uaWNzIFBFRUsgcGFja2FnZSBhbmQg cGtzaCAoYXQgbGVhc3QgdmVyc2lvbnMgb2YgaXQgcHJpb3IgdG8KLSAgIDEuOUspLCBhbmQgc28g b24uCi0KLSAgIFlvdSBtaWdodCB0cnkgdGhlIGZvbGxvd2luZyAtLSB3aGF0IHdlIGNhbGwgImRv b21zZGF5IEtlcm1pdCIgLS0KLSAgIHNldHRpbmdzIHRvIHB1c2ggcGFja2V0cyB0aHJvdWdoIGV2 ZW4gdGhlIGRlbnNlc3QgYW5kIG1vc3Qgb2JzdHJ1Y3RpdmUKLSAgIGNvbm5lY3Rpb25zLCBzdWNo IGFzICJzY3JlZW4iIGFuZCAic3BsaXR2dCIgKGFuZCBjZXJ0YWluIGtpbmRzIG9mIDMyNzAKLSAg IHByb3RvY29sIGVtdWxhdG9ycyk6IEdpdmUgdGhlc2UgY29tbWFuZHMgdG8gQk9USCBLZXJtaXQg cHJvZ3JhbXM6Ci0KLSAgU0VUIEZMT1cgTk9ORQotICBTRVQgQ09OVFJPTCBQUkVGSVggQUxMCi0g IFNFVCBSRUNFSVZFIFBBQ0tFVC1MRU5HVEggNzAKLSAgU0VUIFJFQ0VJVkUgU1RBUlQgNjIKLSAg U0VUIFNFTkQgU1RBUlQgNjIKLSAgU0VUIFNFTkQgUEFVU0UgMTAwCi0gIFNFVCBCTE9DSyBCCi0K LSAgIElmIGl0IHdvcmtzLCBpdCB3aWxsIGJlIHNsb3cuCi0KLTQuNS4gQy1LZXJtaXQgdmVyc3Vz IERPUyBFbXVsYXRvcnMKLQotICAgT24gVW5peCB3b3Jrc3RhdGlvbnMgZXF1aXBwZWQgd2l0aCBE T1MgZW11bGF0b3JzIGxpa2UgU29mdFBDLCB3YXRjaCBvdXQKLSAgIGZvciB3aGF0IHRoZXNlIGVt dWxhdG9ycyBkbyB0byB0aGUgc2VyaWFsIHBvcnQgZHJpdmVycy4gQWZ0ZXIgdXNpbmcgYQotICAg RE9TIGVtdWxhdG9yLCBwYXJ0aWN1bGFybHkgaWYgeW91IHVzZSBpdCB0byBydW4gRE9TIGNvbW11 bmljYXRpb25zCi0gICBzb2Z0d2FyZSwgeW91IG1pZ2h0IGhhdmUgdG8gcmVjb25maWd1cmUgdGhl IHNlcmlhbCBwb3J0cyBmb3IgdXNlIGJ5Ci0gICBVbml4LgotCi00LjYuIEMtS2VybWl0IHZlcnN1 cyBKb2IgQ29udHJvbAotCi0gICBJbnRlcnJ1cHRpb24gYnkgQ3RybC1aIG1ha2VzIFVuaXggQy1L ZXJtaXQgdHJ5IHRvIHN1c3BlbmQgaXRzZWxmIHdpdGgKLSAgIGtpbGwoMCxTSUdUU1RQKSwgYnV0 IG9ubHkgb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCBqb2IgY29udHJvbCwgYXMKLSAgIGRldGVy bWluZWQgYnkgd2hldGhlciB0aGUgc3ltYm9sIFNJR1RTVFAgaXMgZGVmaW5lZCAob3Igb24gUE9T SVggb3IKLSAgIFNWUjQgc3lzdGVtcywgaWYgc3ljb25mKF9TQ19KT0JfQ09OVFJPTCkgb3IgX1BP U0lYX0pPQl9DT05UUk9MIGluCi0gICBhZGRpdGlvbiB0byBTSUdUU1RQKS4gSG93ZXZlciwgaWYg S2VybWl0IGlzIHJ1bm5pbmcgdW5kZXIgYSBsb2dpbiBzaGVsbAotICAgKHN1Y2ggYXMgdGhlIG9y aWdpbmFsIEJvdXJuZSBzaGVsbCkgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IGpvYiBjb250cm9sLAot ICAgdGhlIHVzZXIncyBzZXNzaW9uIGhhbmdzIGFuZCBtdXN0IGJlIGxvZ2dlZCBvdXQgZnJvbSBh bm90aGVyIHRlcm1pbmFsLAotICAgb3IgaHVuZyB1cCBvbi4gVGhlcmUgaXMgbm8gd2F5IEtlcm1p dCBjYW4gZGVmZW5kIGl0c2VsZiBhZ2FpbnN0IHRoaXMuCi0gICBJZiB5b3UgdXNlIGEgbm9uLWpv YiBjb250cm9sIHNoZWxsIG9uIGEgY29tcHV0ZXIgdGhhdCBzdXBwb3J0cyBqb2IKLSAgIGNvbnRy b2wsIGdpdmUgYSBjb21tYW5kIGxpa2UgInN0dHkgc3VzcCB1bmRlZiIgdG8gZml4IGl0IHNvIHRo ZSBzdXNwZW5kCi0gICBzaWduYWwgaXMgbm90IGF0dGFjaGVkIHRvIGFueSBwYXJ0aWN1bGFyIGtl eSwgb3IgZ2l2ZSB0aGUgY29tbWFuZCBTRVQKLSAgIFNVU1BFTkQgT0ZGIHRvIEMtS2VybWl0LCBv ciBidWlsZCBDLUtlcm1pdCB3aXRoIC1ETk9KQy4KLQotNC43LiBEYXRlcyBhbmQgVGltZXMKLQot ICAgVW5peCB0aW1lIGNvbnZlcnNpb24gZnVuY3Rpb25zIHR5cGljYWxseSBhcHBseSBsb2NhbGUg cnVsZXMgdG8gcmV0dXJuCi0gICBsb2NhbCB0aW1lIGluIHRlcm1zIG9mIGFueSBzZWFzb25hbCB0 aW1lIHpvbmUgY2hhbmdlIGluIGVmZmVjdCBmb3IgdGhlCi0gICBnaXZlbiBkYXRlLiBUaGUgZGlm ZmRhdGUgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBzYW1lIHRpbWV6b25lIHJ1bGVzCi0gICBh cmUgaW4gZWZmZWN0IGZvciBib3RoIGRhdGVzLCBidXQgYSBkYXRlIHdpdGggdGltZXpvbmUgaW5m b3JtYXRpb24gd2lsbAotICAgYmUgY29udmVydGVkIHRvIHRoZSBsb2NhbCB0aW1lIHpvbmUgaW4g ZWZmZWN0IGF0IHRoZSBnaXZlbiB0aW1lLCBlLmcuLAotICAgYSBHTVQgc3BlY2lmaWNhdGlvbiB3 aWxsIHByb2R1Y2UgZWl0aGVyIGEgU3RhbmRhcmQgVGltZSBvciBEYXlsaWdodAotICAgU2F2aW5n cyBUaW1lLCBkZXBlbmRpbmcgb24gd2hpY2ggYXBwbGllcyBhdCB0aGUgZ2l2ZW4gdGltZS4gQW4g ZXhhbXBsZQotICAgdXNpbmcgdGhlIDIwMDEgc2Vhc29uYWwgY2hhbmdlIGZyb20gRURUICgtMDQw MCkgdG8gRVNUICgtMDUwMCk6Ci0KLSAgQy1LZXJtaXQ+IERBVEUgMjAwMTEwMjggMDU6MDE6MDIg R01UICA7IEVEVAotICAyMDAxMTAyOCAwMTowMTowMgotICBDLUtlcm1pdD4gREFURSAyMDAxMTAy OCAwNjowMTowMiBHTVQgIDsgRVNUCi0gIDIwMDExMDI4IDAxOjAxOjAyCi0gIEMtS2VybWl0Pgot Ci0gICBidXQgdGhlIGltcGxpY2l0IGNoYW5nZSBpbiB0aW1lem9uZSBvZmZzZXQgaXMgbm90IHJl Y29nbml6ZWQ6Ci0KLSAgQy1LZXJtaXQ+IGVjaG8gXGZkaWZmZGF0ZSgyMDAxMTAyOCAwNTowMTow MiBHTVQsIDIwMDExMDI4IDA2OjAxOjAyIEdNVCkKLSAgKzA6MDAKLSAgQy1LZXJtaXQ+Ci0KLSAg IERhdGUvdGltZSBhcml0aG1ldGljLCBvZmZzZXRzLCBkZWx0YSB0aW1lcywgYW5kIHRpbWV6b25l IHN1cHBvcnQgYXJlCi0gICBuZXcgdG8gQy1LZXJtaXQgOC4wLCBhbmQgbWlnaHQgYmUgZXhwZWN0 ZWQgdG8gZXZvbHZlIGFuZCBpbXByb3ZlIGluCi0gICBzdWJzZXF1ZW50IHJlbGVhc2VzLgotCi0g ICBPbiBzb21lIHBsYXRmb3JtcywgZmlsZXMgZG93bmxvYWRlZCB3aXRoIEhUVFAgcmVjZWl2ZSB0 aGUgY3VycmVudAotICAgdGltZXN0YW1wLCByYXRoZXIgdGhhbiB0aGUgSFRUUCAiTGFzdCBNb2Rp ZmllZCIgdGltZSAodGhpcyBjYW4gYmUgZml4ZWQKLSAgIGJ5IGluY2x1ZGluZyB1dGltZS5oLCBl LmcuIGluIFN1bk9TIGFuZCBUcnU2NC4uLikuCi0KLTQuOC4gUHNldWRvdGVybWluYWxzCi0KLSAg IFRoZSBTU0ggYW5kIFBUWSBjb21tYW5kcyB3b3JrIGJ5IGFzc2lnbmluZyBhIHBzZXVkb3Rlcm1p bmFsIGFuZCByZWFkaW5nCi0gICBhbmQgd3JpdGluZyBmcm9tIGl0LiBQZXJmb3JtYW5jZSB2YXJp ZXMgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpYwotICAgcGxhdGZvcm0gcmFuZ2luZyBmcm9tIHZl cnkgZmFzdCB0byB2ZXJ5IGZsb3cuCi0KLSAgIFNTSCBhbmQgUFRZIGNvbW1hbmRzIGNhbiBmYWls IGlmIChhKSBhbGwgcHNldWRvdGVybWluYWxzIGFyZSBpbiB1c2U7IG9yCi0gICAoYikgeW91IGRv IG5vdCBoYXZlIHJlYWQvd3JpdGUgYWNjZXNzIHRvIHRoZSBwc2V1ZG90ZXJtaW5hbCB0aGF0IHdh cwotICAgYXNzaWduZWQuIEFuIGV4YW1wbGUgb2YgKGIpIHdhcyByZXBvcnRlZCB3aXRoIHRoZSBa aXBzbGFjayBTbGFja3dhcmUKLSAgIExpbnV4IGRpc3RyaWJ1dGlvbiwgaW4gd2hpY2ggdGhlIHBz ZXVkb3Rlcm1pbmFscyB3ZXJlIGNyZWF0ZWQgd2l0aAotICAgY3J3LXItLXItLSBwZXJtaXNzaW9u LCBpbnN0ZWFkIG9mIGNydy1ydy1ydy0uCi0KLTQuOS4gTWlzY2VsbGFuZW91cwotCi0gICAgICog UmVwb3J0ZWRseSwgdGhlIFVuaXggQy1LZXJtaXQgc2VydmVyLCB1bmRlciBzb21lIGNvbmRpdGlv bnMsIG9uCi0gICAgICAgY2VydGFpbiBwYXJ0aWN1bGFyIHN5c3RlbXMsIGZhaWxzIHRvIGxvZyBv dXQgaXRzIGxvZ2luIHNlc3Npb24gdXBvbgotICAgICAgIHJlY2VpcHQgb2YgYSBCWUUgY29tbWFu ZC4gQmVmb3JlIHJlbHlpbmcgb24gdGhlIEJZRSBjb21tYW5kCi0gICAgICAgd29ya2luZywgdGVz dCBpdCBhIGZldyB0aW1lcyB0byBtYWtlIHN1cmUgaXQgd29ya3Mgb24geW91ciBzeXN0ZW06Ci0g ICAgICAgdGhlcmUgbWlnaHQgYmUgc3lzdGVtIGNvbmZpZ3VyYXRpb24gb3Igc2VjdXJpdHkgbWVj aGFuaXNtcyB0bwotICAgICAgIHByZXZlbnQgYW4gaW5mZXJpb3IgcHJvY2VzcyAobGlrZSBLZXJt aXQpIGZyb20ga2lsbGluZyBhIHN1cGVyaW9yCi0gICAgICAgb25lIChsaWtlIHRoZSBsb2dpbiBz aGVsbCkuCi0gICAgICogT24gQVQmVCA3MzAwICgzQjEpIG1hY2hpbmVzLCB5b3UgbWlnaHQgaGF2 ZSB0byAic3R0eSBubDEiIGJlZm9yZQotICAgICAgIHN0YXJ0aW5nIEMtS2VybWl0LiBEbyB0aGlz IGlmIGNoYXJhY3RlcnMgYXJlIGxvc3QgZHVyaW5nCi0gICAgICAgY29tbXVuaWNhdGlvbnMgb3Bl cmF0aW9ucy4KLSAgICAgKiBVbmRlciB0aGUgYmFzaCBzaGVsbCAodmVyc2lvbnMgcHJpb3IgdG8g MS4wNyBmcm9tIENXUlUpLCAicHVzaGluZyIKLSAgICAgICB0byBhbiBpbmZlcmlvciBzaGVsbCBh bmQgdGhlbiBleGl0aW5nIGJhY2sgdG8gS2VybWl0IGxlYXZlcyBLZXJtaXQKLSAgICAgICBpbiB0 aGUgYmFja2dyb3VuZCBzdWNoIHRoYXQgaXQgbXVzdCBiZSBleHBsaWNpdGx5IGZnJ2QuIFRoaXMg aXMKLSAgICAgICByZXBvcnRlZGx5IGZpeGVkIGluIHZlcnNpb24gMS4wNyBvZiBiYXNoIChhbmQg ZGVmaW5pdGVseSBpbiBtb2Rlcm4KLSAgICAgICBiYXNoIHZlcnNpb25zKS4KLQotNS4gSU5JVElB TElaQVRJT04gQU5EIENPTU1BTkQgRklMRVMKLQotICAgWyBbNTU1XVRvcCBdIFsgWzU1Nl1Db250 ZW50cyBdIFsgWzU1N11OZXh0IF0gWyBbNTU4XVByZXZpb3VzIF0KLQotICAgQy1LZXJtaXQncyBp bml0aWFsaXphdGlvbiBmaWxlIGZvciBVbml4IGlzIC5rZXJtcmMgKGxvd2VyY2FzZSwgc3RhcnRz Ci0gICB3aXRoIHBlcmlvZCkgaW4geW91ciBob21lIGRpcmVjdG9yeSwgdW5sZXNzIEtlcm1pdCB3 YXMgYnVpbHQgd2l0aCB0aGUKLSAgIHN5c3RlbS13aWRlIGluaXRpYWxpemF0aW9uLWZpbGUgb3B0 aW9uIChzZWUgdGhlIFs1NTldQy1LZXJtaXQgZm9yIFVuaXgKLSAgIEluc3RhbGxhdGlvbiBJbnN0 cnVjdGlvbnMpLgotCi0gICBDLUtlcm1pdCBpZGVudGlmaWVzIHlvdXIgaG9tZSBkaXJlY3Rvcnkg YmFzZWQgb24gdGhlIGVudmlyb25tZW50Ci0gICB2YXJpYWJsZSwgSE9NRS4gTW9zdCBVbml4IHN5 c3RlbXMgc2V0IHRoaXMgdmFyaWFibGUgYXV0b21hdGljYWxseSB3aGVuCi0gICB5b3UgbG9nIGlu LiBJZiBDLUtlcm1pdCBjYW4ndCBmaW5kIHlvdXIgaW5pdGlhbGl6YXRpb24gZmlsZSwgY2hlY2sg eW91cgotICAgSE9NRSB2YXJpYWJsZToKLQotICBlY2hvICRIT01FICAgICAgKGF0IHRoZSBVbml4 IHByb21wdCkKLQotICAgb3I6Ci0KLSAgZWNobyBcJChIT01FKSAgIChhdCB0aGUgQy1LZXJtaXQg cHJvbXB0KQotCi0gICBJZiBIT01FIGlzIG5vdCBkZWZpbmVkLCBvciBpcyBkZWZpbmVkIGluY29y cmVjdGx5LCBhZGQgdGhlIGFwcHJvcHJpYXRlCi0gICBkZWZpbml0aW9uIHRvIHlvdXIgVW5peCAu cHJvZmlsZSBvciAubG9naW4gZmlsZSwgZGVwZW5kaW5nIG9uIHlvdXIKLSAgIHNoZWxsOgotCi0g IHNldGVudiBIT01FIGZ1bGwtcGF0aG5hbWUtb2YteW91ci1ob21lLWRpcmVjdG9yeSAgKEMtU2hl bGwsIC5sb2dpbiBmaWxlKQotCi0gICBvcjoKLQotICBIT01FPWZ1bGwtcGF0aG5hbWUtb2YteW91 ci1ob21lLWRpcmVjdG9yeSAgICAgICAgIChzaCwga3NoLCAucHJvZmlsZSBmaWxlKQotICBleHBv cnQgSE9NRQotCi0gICBOT1RFOiBWYXJpb3VzIG90aGVyIG9wZXJhdGlvbnMgZGVwZW5kIG9uIHRo ZSBjb3JyZWN0IGRlZmluaXRpb24gb2YKLSAgIEhPTUUuIFRoZXNlIGluY2x1ZGUgdGhlICJ0aWxk ZS1leHBhbnNpb24iIGZlYXR1cmUsIHdoaWNoIGFsbG93cyB5b3UgdG8KLSAgIHJlZmVyIHRvIHlv dXIgaG9tZSBkaXJlY3RvcnkgYXMgIn4iIGluIGZpbGVuYW1lcyB1c2VkIGluIEMtS2VybWl0Ci0g ICBjb21tYW5kcywgZS5nLjoKLQotICBzZW5kIH4vLmtlcm1yYwotCi0gICBhcyB3ZWxsIGFzIHRo ZSBcdihob21lKSB2YXJpYWJsZS4KLQotICAgUHJpb3IgdG8gdmVyc2lvbiA1QSgxOTApLCBDLUtl cm1pdCB3b3VsZCBsb29rIGZvciBpdHMgaW5pdGlhbGl6YXRpb24KLSAgIGZpbGUgaW4gdGhlIGN1 cnJlbnQgZGlyZWN0b3J5IGlmIGl0IHdhcyBub3QgZm91bmQgaW4gdGhlIGhvbWUKLSAgIGRpcmVj dG9yeS4gVGhpcyBmZWF0dXJlIHdhcyByZW1vdmVkIGZyb20gNUEoMTkwKSBiZWNhdXNlIGl0IHdh cyBhCi0gICBzZWN1cml0eSByaXNrLiBTb21lIHBlb3BsZSwgaG93ZXZlciwgbGlrZWQgdGhpcyBi ZWhhdmlvciBhbmQgaGFkCi0gICAua2VybXJjIGZpbGVzIGluIGFsbCB0aGVpciBkaXJlY3Rvcmll cyB0aGF0IHdvdWxkIHNldCB1cCB0aGluZ3MKLSAgIGFwcHJvcHJpYXRlbHkgZm9yIHRoZSBmaWxl cyB0aGVyZWluLiBJZiB5b3Ugd2FudCB0aGlzIGJlaGF2aW9yLCB5b3UgY2FuCi0gICBhY2NvbXBs aXNoIGl0IGluIHZhcmlvdXMgd2F5cywgZm9yIGV4YW1wbGU6Ci0KLSAgICAgKiBDcmVhdGUgYSBz aGVsbCBhbGlhcywgZm9yIGV4YW1wbGU6Ci0gIGFsaWFzIGtkPSJrZXJtaXQgLVkgLi8ua2VybXJj IgotCi0gICAgICogQ3JlYXRlIGEgLmtlcm1yYyBmaWxlIGluIHlvdXIgaG9tZSBkaXJlY3Rvcnks IHdob3NlIGNvbnRlbnRzIGFyZToKLSAgdGFrZSAuLy5rZXJtcmMKLQotICAgU3VwcG9zZSB5b3Ug bmVlZCB0byBwYXNzIGEgcGFzc3dvcmQgZnJvbSB0aGUgVW5peCBjb21tYW5kIGxpbmUgdG8gYQot ICAgQy1LZXJtaXQgc2NyaXB0IHByb2dyYW0sIGluIHN1Y2ggYSB3YXkgdGhhdCBpdCBkb2VzIG5v dCBzaG93IHVwIGluICJwcyIKLSAgIG9yICJ3IiBsaXN0aW5ncy4gSGVyZSBpcyBhIG1ldGhvZCAo bm90IGd1YXJhbnRlZWQgdG8gYmUgMTAwJSBzZWN1cmUsCi0gICBidXQgZGVmaW5pdGVseSBtb3Jl IHNlY3VyZSB0aGFuIHRoZSBtb3JlIG9idmlvdXMgbWV0aG9kcyk6Ci0KLSAgZWNobyBteXBhc3N3 b3JkIHwga2VybWl0IG15c2NyaXB0Ci0KLSAgIFRoZSAibXlzY3JpcHQiIGZpbGUgY29udGFpbnMg YWxsIHRoZSBjb21tYW5kcyB0aGF0IG5lZWQgdG8gYmUgZXhlY3V0ZWQKLSAgIGR1cmluZyB0aGUg S2VybWl0IHNlc3Npb24sIHVwIHRvIGFuZCBpbmNsdWRpbmcgRVhJVCwgYW5kIGFsc28gaW5jbHVk ZXMKLSAgIGFuIEFTSyBvciBBU0tRIGNvbW1hbmQgdG8gcmVhZCB0aGUgcGFzc3dvcmQgZnJvbSBz dGFuZGFyZCBpbnB1dCwgd2hpY2gKLSAgIGhhcyBiZWVuIHBpcGVkIGluIGZyb20gdGhlIFVuaXgg J2VjaG8nIGNvbW1hbmQsIGJ1dCBpdCBtdXN0IG5vdCBpbmNsdWRlCi0gICBhIENPTk5FQ1QgY29t bWFuZC4gT25seSAia2VybWl0IG15c2NyaXB0IiBzaG93cyB1cCBpbiB0aGUgcHMgbGlzdGluZy4K LQotNi4gQ09NTVVOSUNBVElPTiBTUEVFRCBTRUxFQ1RJT04KLQotICAgWyBbNTYwXVRvcCBdIFsg WzU2MV1Db250ZW50cyBdIFsgWzU2Ml1OZXh0IF0gWyBbNTYzXVByZXZpb3VzIF0KLQotICAgVmVy c2lvbi03IGJhc2VkIFVuaXggaW1wbGVtZW50YXRpb25zLCBpbmNsdWRpbmcgNC4zIEJTRCBhbmQg ZWFybGllciBhbmQKLSAgIFVuaXggc3lzdGVtcyBiYXNlZCB1cG9uIEJTRCwgdXNlIGEgNC1iaXQg ZmllbGQgdG8gcmVjb3JkIGEgc2VyaWFsCi0gICBkZXZpY2UncyB0ZXJtaW5hbCBzcGVlZC4gVGhp cyBsZWF2ZXMgcm9vbSBmb3IgMTYgc3BlZWRzLCBvZiB3aGljaCB0aGUKLSAgIGZpcnN0IDE0IGFy ZSBub3JtYWxseToKLQotICAgICAwLCA1MCwgNzUsIDExMCwgMTM0LjUsIDE1MCwgMjAwLCAzMDAs IDYwMCwgMTIwMCwgMTgwMCwgMjQwMCwgNDgwMCwKLSAgICAgYW5kIDk2MDAKLQotICAgVGhlIHJl bWFpbmluZyB0d28gYXJlIHVzdWFsbHkgY2FsbGVkIEVYVEEgYW5kIEVYVEIsIGFuZCBhcmUgZGVm aW5lZCBieQotICAgdGhlIHBhcnRpY3VsYXIgVW5peCBpbXBsZW1lbnRhdGlvbi4gQy1LZXJtaXQg ZGV0ZXJtaW5lcyB3aGljaCBzcGVlZHMKLSAgIGFyZSBhdmFpbGFibGUgb24geW91ciBzeXN0ZW0g YmFzZWQgb24gd2hldGhlciBzeW1ib2xzIGZvciB0aGVtIGFyZQotICAgZGVmaW5lZCBpbiB5b3Vy IHRlcm1pbmFsIGRldmljZSBoZWFkZXIgZmlsZXMuIEVYVEEgaXMgZ2VuZXJhbGx5IGFzc3VtZWQK LSAgIHRvIGJlIDE5MjAwIGFuZCBFWFRCIDM4NDAwLCBidXQgdGhlc2UgYXNzdW1wdGlvbnMgbWln aHQgYmUgd3JvbmcsIG9yCi0gICB0aGV5IG1pZ2h0IG5vdCBhcHBseSB0byBhIHBhcnRpY3VsYXIg ZGV2aWNlIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCB0aGVzZQotICAgc3BlZWRzLiBQcmVzdW1hYmx5 LCBpZiB5b3UgdHJ5IHRvIHNldCBhIHNwZWVkIHRoYXQgaXMgbm90IGxlZ2FsIG9uIGEKLSAgIHBh cnRpY3VsYXIgZGV2aWNlLCB0aGUgZHJpdmVyIHdpbGwgcmV0dXJuIGFuIGVycm9yLCBidXQgdGhp cyBjYW4gbm90IGJlCi0gICBndWFyYW50ZWVkLgotCi0gICBPbiB0aGVzZSBzeXN0ZW1zLCBpdCBp cyB1c3VhbGx5IG5vdCBwb3NzaWJsZSB0byBzZWxlY3QgYSBzcGVlZCBvZiAxNDQwMAotICAgYnBz IGZvciB1c2Ugd2l0aCBWLjMyYmlzIG1vZGVtcy4gSW4gdGhhdCBjYXNlLCB1c2UgMTkyMDAgb3Ig Mzg0MDAgYnBzLAotICAgY29uZmlndXJlIHlvdXIgbW9kZW0gdG8gbG9jayBpdHMgaW50ZXJmYWNl IHNwZWVkIGFuZCB0byB1c2UgUlRTL0NUUwotICAgZmxvdyBjb250cm9sLCBhbmQgdGVsbCBDLUtl cm1pdCB0byBTRVQgRkxPVyBSVFMvQ1RTIGFuZCBTRVQgRElBTAotICAgU1BFRUQtTUFUQ0hJTkcg T0ZGLgotCi0gICBUaGUgc2l0dWF0aW9uIGlzIHNpbWlsYXIsIGJ1dCBkaWZmZXJlbnQsIGluIFN5 c3RlbSBWLiBTVklEIFRoaXJkCi0gICBFZGl0aW9uIGxpc3RzIHRoZSBzYW1lIHNwZWVkcywgMCB0 aHJvdWdoIDM4NDAwLgotCi0gICBTb21lIHZlcnNpb25zIG9mIFVuaXgsIGFuZC9vciB0ZXJtaW5h bCBkZXZpY2UgZHJpdmVycyB0aGF0IGNvbWUgd2l0aAotICAgY2VydGFpbiB0aGlyZC1wYXJ0eSBh ZGQtaW4gaGlnaC1zcGVlZCBzZXJpYWwgY29tbXVuaWNhdGlvbiBpbnRlcmZhY2VzLAotICAgdXNl IHRoZSBsb3cgImJhdWQgcmF0ZXMiIHRvIHN0YW5kIGZvciBoaWdoZXIgb25lcy4gRm9yIGV4YW1w bGUsIFNFVAotICAgU1BFRUQgNTAgZ2V0cyB5b3UgNTc2MDAgYnBzOyBTRVQgU1BFRUQgNzUgZ2V0 cyB5b3UgNzY4MDA7IFNFVCBTUEVFRCAxMTAKLSAgIGdldHMgMTE1MjAwLgotCi0gICBTQ08gT0RU IDMuMCBpcyBhbiBleGFtcGxlIHdoZXJlIGEgImJhdWQtcmF0ZS10YWJsZSBwYXRjaCIgY2FuIGJl Ci0gICBhcHBsaWVkIHRoYXQgY2FuIHJvdGF0ZSB0aGUgdHR5IGRyaXZlciBiYXVkIHJhdGUgdGFi bGUgc3VjaCB0aGF0Ci0gICA2MDA9NTc2MDAgYW5kIDE4MDA9MTE1ayBiYXVkLiBTaW1pbGFybHkg Zm9yIERpZ2lib2FyZAotICAgbXVsdGlwb3J0L3BvcnRzZXJ2ZXJzLCB3aGljaCBoYXZlIGEgImZh c3RiYXVkIiBzZXR0aW5nIHRoYXQgZG9lcyB0aGlzLgotICAgTGludXggaGFzIGEgInNldHNlcmlh bCIgY29tbWFuZCB0aGF0IGNhbiBkbyBpdCwgZXRjLgotCi0gICBNb3JlIG1vZGVybiBVbml4ZXMg c3VwcG9ydCBQT1NJWC1iYXNlZCBzcGVlZCBzZXR0aW5nLCBpbiB3aGljaCB0aGUKLSAgIHNlbGVj dGlvbiBvZiBzcGVlZHMgaXMgbm90IGxpbWl0ZWQgYnkgYSA0LWJpdCBmaWVsZC4gQy1LZXJtaXQg Ni4xCi0gICBpbmNvcnBvcmF0ZXMgYSBuZXcgbWVjaGFuaXNtIGZvciBmaW5kaW5nIG91dCAoYXQg Y29tcGlsZSB0aW1lKSB3aGljaAotICAgc2VyaWFsIHNwZWVkcyBhcmUgc3VwcG9ydGVkIGJ5IHRo ZSBvcGVyYXRpbmcgc3lzdGVtIHRoYXQgZG9lcyBub3QKLSAgIGludm9sdmUgZWRpdGluZyBvZiBz b3VyY2UgY29kZSBieSBoYW5kOyBvbiBzeXN0ZW1zIGxpa2UgU29sYXJpcyA1LjEsCi0gICBJUklY IDYuMiwgYW5kIFNDTyBPU1I1LjAuNCwgInNldCBzcGVlZCA/IiB3aWxsIGxpc3Qgc3BlZWRzIHVw IHRvIDQ2MDgwMAotICAgb3IgOTIxNjAwLiBJbiBDLUtlcm1pdCA3LjAgYW5kIGxhdGVyOgotCi0g ICAgMS4gSWYgYSBzeW1ib2wgZm9yIGEgcGFydGljdWxhciBzcGVlZCAoc2F5IEIyMzA0MDAgZm9y IDIzMDQwMCBicHMpCi0gICAgICAgYXBwZWFycyBpbiB3aGF0ZXZlciBoZWFkZXIgZmlsZSBkZWZp bmVzIGFjY2VwdGFibGUgc2VyaWFsIHNwZWVkcwotICAgICAgIChlLmcuIDx0ZXJtYml0cy5oPiBv ciA8c3lzL3Rlcm1pb3MuaD4gb3IgPHN5cy90dHlkZXYuaD4sIGV0YyksIHRoZQotICAgICAgIGNv cnJlc3BvbmRpbmcgc3BlZWQgd2lsbCBhcHBlYXIgaW4gQy1LZXJtaXQncyAic2V0IHNwZWVkID8i IGxpc3QuCi0gICAgMi4gVGhlIGZhY3QgdGhhdCBhIGdpdmVuIHNwZWVkIGlzIGxpc3RlZCBpbiB0 aGUgaGVhZGVyIGZpbGVzIGFuZAotICAgICAgIGFwcGVhcnMgaW4gQy1LZXJtaXQncyBsaXN0IGRv ZXMgbm90IG1lYW4gdGhlIGRyaXZlciB3aWxsIGFjY2VwdCBpdC4KLSAgICAgICBGb3IgZXhhbXBs ZSwgYSBjb21wdXRlciBtaWdodCBoYXZlIHNvbWUgc3RhbmRhcmQgc2VyaWFsIHBvcnRzIHBsdXMK LSAgICAgICBzb21lIGFkZC1vbiBvbmVzIHdpdGggZGlmZmVyZW50IGRyaXZlcnMgdGhhdCBhY2Nl cHQgYSBkaWZmZXJlbnQKLSAgICAgICByZXBlcnRvaXJlIG9mIHNwZWVkcy4KLSAgICAzLiBUaGUg ZmFjdCB0aGF0IGEgZ2l2ZW4gc3BlZWQgaXMgYWNjZXB0ZWQgYnkgdGhlIGRyaXZlciBkb2VzIG5v dAotICAgICAgIGd1YXJhbnRlZSB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBjYW4gYWNjZXB0IGl0 LgotCi0gICBXaGVuIEtlcm1pdCBpcyBnaXZlbiBhICJzZXQgc3BlZWQiIGNvbW1hbmQgZm9yIGEg cGFydGljdWxhciBkZXZpY2UsIHRoZQotICAgdW5kZXJseWluZyBzeXN0ZW0gc2VydmljZSBpcyBj YWxsZWQgdG8gc2V0IHRoZSBzcGVlZDsgaXRzIHJldHVybiBjb2RlCi0gICBpcyBjaGVja2VkIGFu ZCB0aGUgU0VUIFNQRUVEIGNvbW1hbmQgZmFpbHMgaWYgdGhlIHJldHVybiBjb2RlIGluZGljYXRl cwotICAgZmFpbHVyZS4gUmVnYXJkbGVzcyBvZiB0aGUgc3lzdGVtIHNlcnZpY2UgcmV0dXJuIHN0 YXR1cywgdGhlIGRldmljZSdzCi0gICBzcGVlZCBpcyB0aGVuIHJlYWQgYmFjayBhbmQgaWYgaXQg ZG9lcyBub3QgbWF0Y2ggdGhlIHNwZWVkIHRoYXQgd2FzCi0gICByZXF1ZXN0ZWQsIGFuIGVycm9y IG1lc3NhZ2UgaXMgcHJpbnRlZCBhbmQgdGhlIGNvbW1hbmQgZmFpbHMuCi0KLSAgIEV2ZW4gd2hl biB0aGUgY29tbWFuZCBzdWNjZWVkcywgdGhpcyBkb2VzIG5vdCBndWFyYW50ZWUgc3VjY2Vzc2Z1 bAotICAgb3BlcmF0aW9uIGF0IGEgcGFydGljdWxhciBzcGVlZCwgZXNwZWNpYWxseSBhIGhpZ2gg b25lLiBUaGF0IGRlcGVuZHMgb24KLSAgIGVsZWN0cmljaXR5LCBpbmZvcm1hdGlvbiB0aGVvcnks IGV0Yy4gSG93IGxvbmcgaXMgdGhlIGNhYmxlLCB3aGF0IGlzCi0gICBpdHMgY2FwYWNpdGFuY2Us IGhvdyB3ZWxsIGlzIGl0IHNoaWVsZGVkLCBldGMsIG5vdCB0byBtZW50aW9uIHRoYXQKLSAgIGV2 ZXJ5IGNvbm5lY3Rpb24gaGFzIHR3byBlbmRzIGFuZCBpdHMgc3VjY2VzcyBkZXBlbmRzIG9uIGJv dGggb2YgdGhlbS4KLSAgIChXaXRoIHRoZSBvYnZpb3VzIGNhdmVhdHMgYWJvdXQgaW50ZXJuYWwg bW9kZW1zLCBpcyB0aGUgY2FibGUgcmVhbGx5Ci0gICBjb25uZWN0ZWQsIGludGVycnVwdCBjb25m bGljdHMsIGV0YyBldGMgZXRjKS4KLQotICAgTm90ZSwgaW4gcGFydGljdWxhciwgdGhhdCB0aGVy ZSBpcyBhIGNlcnRhaW4gdGhyZXNob2xkIGFib3ZlIHdoaWNoCi0gICBtb2RlbXMgY2FuIG5vdCAi YXV0b2JhdWQiIC0tIGkuZS4gZGV0ZWN0IHRoZSBzZXJpYWwgaW50ZXJmYWNlIHNwZWVkCi0gICB3 aGVuIHlvdSB0eXBlIEFUIChvciB3aGF0ZXZlciBlbHNlIHRoZSBtb2RlbSdzIHJlY29nbml0aW9u IHNlcXVlbmNlCi0gICBtaWdodCBiZSkuIFN1Y2ggbW9kZW1zIG5lZWQgdG8gYmUgZW5nYWdlZCBh dCBhIGxvd2VyIHNwZWVkIChzYXkgMjQwMCBvcgotICAgOTYwMCBvciBldmVuIDExNTIwMCAtLSBh bnkgc3BlZWQgYmVsb3cgdGhlaXIgYXV0b2JhdWQgdGhyZXNob2xkKSBhbmQKLSAgIHRoZW4gbXVz dCBiZSBnaXZlbiBhIG1vZGVtLXNwZWNpZmljIGNvbW1hbmQgKHdoaWNoIGNhbiBiZSBmb3VuZCBp biB0aGUKLSAgIG1vZGVtIG1hbnVhbCkgdG8gY2hhbmdlIHRoZWlyIGludGVyZmFjZSBzcGVlZCB0 byB0aGUgZGVzaXJlZCBoaWdoZXIKLSAgIHNwZWVkLCBhbmQgdGhlbiB0aGUgc29mdHdhcmUgbXVz dCBhbHNvIGJlIHRvbGQgdG8gY2hhbmdlIHRvIHRoZSBuZXcsCi0gICBoaWdoZXIgc3BlZWQuCi0K LSAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCByZWFkIFs1NjRdU2VjdGlvbiA5LjUgb2Yg dGhlIEluc3RhbGxhdGlvbgotICAgSW5zdHJ1Y3Rpb25zLCBwbHVzIGFueSBwbGF0Zm9ybS1zcGVj aWZpYyBub3RlcyBpbiBbNTY1XVNlY3Rpb24gMyBhYm92ZS4KLQotNy4gQ09NTVVOSUNBVElPTlMg QU5EIERJQUxJTkcKLQotICAgWyBbNTY2XVRvcCBdIFsgWzU2N11Db250ZW50cyBdIFsgWzU2OF1O ZXh0IF0gWyBbNTY5XVByZXZpb3VzIF0KLQotNy4xLiBTZXJpYWwgUG9ydHMgYW5kIE1vZGVtcwot Ci0gICBJZiB5b3UgU0VUIExJTkUgdG8gYSBzZXJpYWwgcG9ydCBtb2RlbS1jb250cm9sIGRldmlj ZSB0aGF0IGhhcyBub3RoaW5nCi0gICBwbHVnZ2VkIGluIHRvIGl0LCBvciBoYXMgYSBtb2RlbSBj b25uZWN0ZWQgdGhhdCBpcyBwb3dlcmVkIG9mZiwgYW5kIHlvdQotICAgaGF2ZSBub3QgZ2l2ZW4g YSBwcmlvciBTRVQgTU9ERU0gVFlQRSBvciBTRVQgQ0FSUklFUi1XQVRDSCBPRkYgY29tbWFuZCwK LSAgIHRoZSBTRVQgTElORSBjb21tYW5kIGlzIGxpa2VseSB0byBoYW5nLiBJbiBtb3N0IGNhc2Vz LCB5b3UgY2FuIEN0cmwtQwotICAgb3V0LiBJZiBub3QsIHlvdSdsbCBoYXZlIHRvIGtpbGwgQy1L ZXJtaXQgZnJvbSBhbm90aGVyIHRlcm1pbmFsLgotCi0gICBTaW1pbGFybHksIGlmIHlvdSBnaXZl IGEgU0VUIE1PREVNIFRZUEUgSEFZRVMgKG9yIFVTUiwgb3IgYW55IG90aGVyCi0gICBtb2RlbSB0 eXBlIGJlc2lkZXMgRElSRUNULCBOT05FLCBvciBVTktOT1dOKSBhbmQgdGhlbiBTRVQgTElORSB0 byBhbgotICAgZW1wdHkgcG9ydCwgdGhlIHN1YnNlcXVlbnQgY2xvc2UgKGltcGxpY2l0IG9yIGV4 cGxpY2l0KSBpcyBsaWFibGUgdG8KLSAgIGhhbmcgb3IgZXZlbiBjcmFzaCAodGhyb3VnaCBubyBm YXVsdCBvZiBLZXJtaXQncyAtLSB0aGUgaGFuZ2luZyBvcgotICAgY3Jhc2hpbmcgaXMgaW5zaWRl IGEgc3lzdGVtIGNhbGwgc3VjaCBhcyBjZnNldG9zcGVlZCgpIG9yIGNsb3NlKCkpLgotCi0gICBU aGUgU0VUIENBUlJJRVItV0FUQ0ggY29tbWFuZCB3b3JrcyBhcyBhZHZlcnRpc2VkIG9ubHkgaWYg dGhlCi0gICB1bmRlcmx5aW5nIG9wZXJhdGluZyBzeXN0ZW0gYW5kIGRldmljZSBkcml2ZXJzIHN1 cHBvcnQgdGhpcyBmZWF0dXJlOyBpbgotICAgcGFydGljdWxhciBvbmx5IGlmIGEgcmVhZCgpIG9w ZXJhdGlvbiByZXR1cm5zIGltbWVkaWF0ZWx5IHdpdGggYW4gZXJyb3IKLSAgIGNvZGUgaWYgdGhl IGNhcnJpZXIgc2lnbmFsIGdvZXMgYXdheSBvciwgZmFpbGluZyB0aGF0LCBpZiBDLUtlcm1pdCBj YW4KLSAgIG9idGFpbiB0aGUgbW9kZW0gc2lnbmFscyBmcm9tIHRoZSBkZXZpY2UgZHJpdmVyICh5 b3UgY2FuIHRlbGwgYnkgZ2l2aW5nCi0gICBhICJzZXQgbGluZSIgY29tbWFuZCB0byBhIHNlcmlh bCBkZXZpY2UsIGFuZCB0aGVuIGEgInNob3cKLSAgIGNvbW11bmljYXRpb25zIiBjb21tYW5kIC0t IGlmIG1vZGVtIHNpZ25hbHMgYXJlIG5vdCBsaXN0ZWQsIEMtS2VybWl0Ci0gICB3b24ndCBiZSBh YmxlIHRvIGRldGVjdCBjYXJyaWVyIGxvc3MsIHRoZSBXQUlUIGNvbW1hbmQgd2lsbCBub3Qgd29y aywKLSAgIGV0YykuIE9mIGNvdXJzZSwgdGhlIGRldmljZSBpdHNlbGYgKGUuZy4gbW9kZW0pIG11 c3QgYmUgY29uZmlndXJlZAotICAgYXBwcm9wcmlhdGVseSBhbmQgdGhlIGNhYmxlcyBjb252ZXkg dGhlIGNhcnJpZXIgYW5kIG90aGVyIG5lZWRlZAotICAgc2lnbmFscywgZXRjLgotCi0gICBJZiB5 b3UgZGlhbCBvdXQgZnJvbSBVbml4IHN5c3RlbSwgYnV0IHRoZW4gbm90aWNlIGEgbG90IG9mIHdl aXJkCi0gICBjaGFyYWN0ZXIgc3RyaW5ncyBiZWluZyBzdHVjayBpbnRvIHlvdXIgc2Vzc2lvbiBh dCByYW5kb20gdGltZXMKLSAgIChlc3BlY2lhbGx5IGlmIHRoZXkgbG9vayBsaWtlICsrK0FUUTBI MCBvciBsb2dpbiBiYW5uZXJzIG9yIHByb21wdHMpLAotICAgdGhhdCBtZWFucyB0aGF0IGdldHR5 IGlzIGFsc28gdHJ5aW5nIHRvIGNvbnRyb2wgdGhlIHNhbWUgZGV2aWNlLiBZb3UnbGwKLSAgIG5l ZWQgdG8gZGlhbCBvdXQgb24gYSBkZXZpY2UgdGhhdCBpcyBub3Qgd2FpdGluZyBmb3IgYSBsb2dp biwgb3IgZWxzZQotICAgZGlzYWJsZSBnZXR0eSBvbiB0aGUgZGV2aWNlLgotCi0gICBBcyBvZiB2 ZXJzaW9uIDcuMCwgQy1LZXJtaXQgbWFrZXMgZXhwbGljaXQgY2hlY2tzIGZvciB0aGUgQ2Fycmll cgotICAgRGV0ZWN0IHNpZ25hbCwgYW5kIHNvIGNhdGNoZXMgaHVuZy11cCBjb25uZWN0aW9ucyBt dWNoIGJldHRlciB0aGFuIDYuMAotICAgYW5kIGVhcmxpZXIuIEhvd2V2ZXIsIGl0IHN0aWxsIGNh biBub3QgYmUgZ3VhcmFudGVlZCB0byBjYXRjaCBldmVyeQotICAgZXZlciBDRCBvbi10by1vZmYg dHJhbnNpdGlvbi4gRm9yIGV4YW1wbGUsIHdoZW4gdGhlIEhQLVVYIHZlcnNpb24gb2YKLSAgIEMt S2VybWl0IGlzIGluIENPTk5FQ1QgbW9kZSBvbiBhIGRpYWxlZCBjb25uZWN0aW9uIGFuZCBDQVJS SUVSLVdBVENIIE9OCi0gICBvciBBVVRPLCBhbmQgeW91IHR1cm4gb2ZmIHRoZSBtb2RlbSwgSFAt VVggaXMgc3R1Y2sgaW4gYSByZWFkKCkgdGhhdAotICAgbmV2ZXIgcmV0dXJucy4gKEMtS2VybWl0 IGRvZXMgbm90IHBvcCBiYWNrIHRvIGl0cyBwcm9tcHQgYXV0b21hdGljYWxseSwKLSAgIGJ1dCB5 b3UgY2FuIHN0aWxsIGVzY2FwZSBiYWNrLikKLQotICAgSWYsIG9uIHRoZSBvdGhlciBoYW5kLCB5 b3UgbG9nIG91dCBmcm9tIHRoZSByZW1vdGUgc3lzdGVtLCBhbmQgaXQgaGFuZ3MKLSAgIHVwLCBh bmQgQ0QgZHJvcHMgb24gdGhlIGxvY2FsIG1vZGVtLCBDLUtlcm1pdCBkZXRlY3RzIHRoaXMgYW5k IHBvcHMKLSAgIGJhY2sgdG8gdGhlIHByb21wdCBhcyBpdCBzaG91bGQuIChFdmlkZW50bHkgdGhl cmUgY2FuIGJlIGEgZGlmZmVyZW5jZQotICAgYmV0d2VlbiBDRCBhbmQgRFNSIHR1cm5pbmcgb2Zm IGF0IHRoZSBzYW1lIHRpbWUsIHZlcnN1cyBDRCB0dXJuaW5nIG9mZgotICAgd2hpbGUgRFNSIHN0 YXlzIG9uOyBleHBlcmltZW50YXRpb24gd2l0aCAmUzAvJlMxLyZTMiBvbiB5b3VyIG1vZGVtCi0g ICBtaWdodCBwcm9kdWNlIHRoZSBkZXNpcmVkIHJlc3VsdHMpLgotCi0gICBXaGVuIFVuaXggQy1L ZXJtaXQgZXhpdHMsIGl0IGNsb3NlcyAoYW5kIG11c3QgY2xvc2UpIHRoZSBjb21tdW5pY2F0aW9u cwotICAgZGV2aWNlLiBJZiB5b3Ugd2VyZSBkaWFsZWQgb3V0LCB0aGlzIHdpbGwgbW9zdCBsaWtl bHkgaGFuZyB1cCB0aGUKLSAgIGNvbm5lY3Rpb24uIElmIHlvdSB3YW50IHRvIGdldCBvdXQgb2Yg S2VybWl0IGFuZCBzdGlsbCB1c2UgS2VybWl0J3MKLSAgIGNvbW11bmljYXRpb24gZGV2aWNlLCB5 b3UgaGF2ZSBzZXZlcmFsIGNob2ljZXM6Ci0KLSAgICAxLiBTaGVsbCBvdXQgZnJvbSBLZXJtaXQg b3Igc3VzcGVuZCBLZXJtaXQsIGFuZCByZWZlciB0byB0aGUgZGV2aWNlCi0gICAgICAgbGl0ZXJh bGx5IChhcyBpbiAidGVybSAtYmxhaCAtYmxhaCA8IC9kZXYvY3VhID4gL2Rldi9jdWEiKS4KLSAg ICAyLiBTaGVsbCBvdXQgZnJvbSBLZXJtaXQgYW5kIHVzZSB0aGUgZGV2aWNlJ3MgZmlsZSBkZXNj cmlwdG9yIHdoaWNoCi0gICAgICAgS2VybWl0IG1ha2VzIGF2YWlsYWJsZSB0byB5b3UgaW4gdGhl IFx2KHR0eWZkKSB2YXJpYWJsZS4KLSAgICAzLiBVc2UgQy1LZXJtaXQncyBSRURJUkVDVCBjb21t YW5kLgotICAgIDQuIFVzZSBDLUtlcm1pdCBuZXcgRVhFQyAvUkVESVJFQ1QgY29tbWFuZC4KLQot ICAgSWYgeW91IGFyZSBoYXZpbmcgdHJvdWJsZSBkaWFsaW5nOgotCi0gICAgMS4gTWFrZSBzdXJl IHRoZSBkaWFsb3V0IGxpbmUgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkuIE1vcmUgYWJvdXQgdGhp cwotICAgICAgIGJlbG93LgotICAgIDIuIE1ha2Ugc3VyZSBhbGwgbmVjZXNzYXJ5IHBhdGNoZXMg YXJlIGluc3RhbGxlZCBmb3IgeW91ciBvcGVyYXRpbmcKLSAgICAgICBzeXN0ZW0uCi0gICAgMy4g SWYgeW91IGNhbid0IGRpYWwgb24gYSAiYmlkaXJlY3Rpb25hbCIgbGluZSwgdGhlbiBjb25maWd1 cmUgaXQgZm9yCi0gICAgICAgb3V0Ym91bmQtb25seSAocmVtb3ZlIHRoZSBnZXR0eSkgYW5kIHRy eSBhZ2Fpbi4gKFRoZSBtZWNoYW5pc21zIC0tCi0gICAgICAgaWYgYW55IC0tIGZvciBncmFiYmlu ZyBiaWRpcmVjdGlvbmFsIGxpbmVzIGZvciBkaWFsb3V0IHZhcnkgd2lsZGx5Ci0gICAgICAgYW1v bmcgVW5peCBpbXBsZW1lbnRhdGlvbnMgYW5kIHJlbGVhc2VzLCBhbmQgQy1LZXJtaXQgLS0gd2hp Y2ggcnVucwotICAgICAgIG9uIHdlbGwgb3ZlciAzMDAgZGlmZmVyZW50IFVuaXggdmFyaWF0aW9u cyAtLSBtYWtlcyBubyBlZmZvcnQgdG8KLSAgICAgICBrZWVwIHVwIHdpdGggdGhlbTsgdGhlIHJl Y29tbWVuZGVkIG1ldGhvZCBmb3IgY29waW5nIHdpdGggdGhpcwotICAgICAgIHNpdHVhdGlvbiBp cyB0byB3cmFwIEMtS2VybWl0IGluIGEgc2hlbGwgc2NyaXB0IHRoYXQgdGFrZXMgdGhlCi0gICAg ICAgYXBwcm9wcmlhdGUgYWN0aW9ucy4pCi0gICAgNC4gTWFrZSBzdXJlIEMtS2VybWl0J3MgU0VU IERJQUwgYW5kIFNFVCBNT0RFTSBwYXJhbWV0ZXJzIGFncmVlIHdpdGgKLSAgICAgICB0aGUgbW9k ZW0geW91IGFyZSBhY3R1YWxseSB1c2luZyAtLSBwYXkgcGFydGljdWxhciBhdHRlbnRpb24gdG8g U0VUCi0gICAgICAgRElBTCBTUEVFRC1NQVRDSElORy4KLSAgICA1LiBJZiBNT0RFTSBIQU5HVVAt TUVUSE9EIGlzIHNldCB0byBSUzIzMi1TSUdOQUwsIGNoYW5nZSBpdCB0bwotICAgICAgIE1PREVN LUNPTU1BTkQuIE9yIHZpY2UtdmVyc2EuCi0gICAgNi4gVHJ5IFNFVCBESUFMIEhBTkdVUCBPRkYg YmVmb3JlIHRoZSBESUFMIGNvbW1hbmQuIEFsc28sIFNFVCBESUFMCi0gICAgICAgRElTUExBWSBP TiB0byB3YXRjaCB3aGF0J3MgaGFwcGVuaW5nLiBTZWUgWzU3MF1TZWN0aW9uIDggb2YgdGhlCi0g ICAgICAgWzU3MV1JbnN0YWxsYXRpb24gSW5zdHJ1Y3Rpb25zLgotICAgIDcuIFJlYWQgcGFnZXMg NTAtNjcgb2YgWzU3Ml1Vc2luZyBDLUtlcm1pdC4KLSAgICA4LiBBcyBhIGxhc3QgcmVzb3J0LCBk b24ndCB1c2UgdGhlIERJQUwgY29tbWFuZCBhdCBhbGw7IFNFVCBDQVJSSUVSCi0gICAgICAgT0ZG IGFuZCBDT05ORUNUIHRvIHRoZSBtb2RlbSBhbmQgZGlhbCBpbnRlcmFjdGl2ZWx5LCBvciB3cml0 ZSBhCi0gICAgICAgc2NyaXB0IHByb2dyYW0gdG8gZGlhbCB0aGUgbW9kZW0uCi0KLSAgIE1ha2Ug c3VyZSB5b3VyIGRpYWxvdXQgbGluZSBpcyBjb3JyZWN0bHkgY29uZmlndXJlZCBmb3IgZGlhbGlu ZyBvdXQgKGFzCi0gICBvcHBvc2VkIHRvIGxvZ2luKS4gVGhlIG1ldGhvZCBmb3IgZG9pbmcgdGhp cyBpcyBkaWZmZXJlbnQgZm9yIGVhY2gga2luZAotICAgb2YgVW5peCBzeXN0ZW0uIENvbnN1bHQg eW91ciBzeXN0ZW0gZG9jdW1lbnRhdGlvbiBmb3IgY29uZmlndXJpbmcgbGluZXMKLSAgIGZvciBk aWFsaW5nIG91dCAoZm9yIGV4YW1wbGUsIFN1biBTcGFyY1N0YXRpb24gSVBDIHVzZXJzIHNob3Vs ZCByZWFkCi0gICB0aGUgc2VjdGlvbiAiU2V0dGluZyB1cCBNb2RlbSBTb2Z0d2FyZSIgaW4gdGhl IERlc2t0b3AgU1BBUkMgU3VuIFN5c3RlbQotICAgJiBOZXR3b3JrIE1hbmFnZXIncyBHdWlkZTsg SFAtOTAwMCB3b3Jrc3RhdGlvbiB1c2VycyBzaG91bGQgY29uc3VsdCB0aGUKLSAgIG1hbnVhbCBD b25maWd1cmluZyBIUC1VWCBmb3IgUGVyaXBoZXJhbHMsIGV0YykuCi0KLSAgIFN5bXB0b206IERJ QUwgd29ya3MsIGJ1dCBhIHN1YnNlcXVlbnQgQ09OTkVDVCBjb21tYW5kIGRvZXMgbm90LgotICAg RGlhZ25vc2lzOiB0aGUgbW9kZW0gaXMgbm90IGFzc2VydGluZyBDYXJyaWVyIERldGVjdCAoQ0Qp IGFmdGVyIHRoZQotICAgY29ubmVjdGlvbiBpcyBtYWRlLCBvciB0aGUgY2FibGUgZG9lcyBub3Qg Y29udmV5IHRoZSBDRCBzaWduYWwuIEN1cmU6Ci0gICBSZWNvbmZpZ3VyZSB0aGUgbW9kZW0sIHJl cGxhY2UgdGhlIGNhYmxlLiBXb3JrYXJvdW5kOiBTRVQgQ0FSUklFUiBPRkYKLSAgIChhdCBsZWFz dCBpbiBTeXN0ZW0tViBiYXNlZCBVbml4IHZlcnNpb25zKS4KLQotICAgRm9yIEJlcmtlbGV5LVVu aXgtYmFzZWQgc3lzdGVtcyAoNC4zQlNEIGFuZCBlYXJsaWVyKSwgS2VybWl0IGluY2x1ZGVzCi0g ICBjb2RlIHRvIHVzZSBMUEFTUzggbW9kZSB3aGVuIHBhcml0eSBpcyBub25lLCB3aGljaCBpcyBz dXBwb3NlZCB0byBhbGxvdwotICAgOC1iaXQgZGF0YSBhbmQgWG9uL1hvZmYgZmxvdyBjb250cm9s IGF0IHRoZSBzYW1lIHRpbWUuIEhvd2V2ZXIsIGFzIG9mCi0gICBlZGl0IDE3NCwgdGhpcyBjb2Rl IGlzIGVudGlyZWx5IGRpc2FibGVkIGJlY2F1c2UgaXQgaXMgdW5yZWxpYWJsZTogZXZlbgotICAg dGhvdWdoIHRoZSBob3N0IG9wZXJhdGluZyBzeXN0ZW0gbWlnaHQgKG9yIG1pZ2h0IG5vdCkgc3Vw cG9ydCBMUEFTUzgKLSAgIG1vZGUgY29ycmVjdGx5LCB0aGUgaG9zdCBhY2Nlc3MgcHJvdG9jb2xz ICh0ZXJtaW5hbCBzZXJ2ZXJzLCB0ZWxuZXQsCi0gICBybG9naW4sIGV0YykgZ2VuZXJhbGx5IGhh dmUgbm8gd2F5IG9mIGZpbmRpbmcgb3V0IGFib3V0IGl0IGFuZAotICAgdGhlcmVmb3JlIHJlbmRl ciBpdCBpbmVmZmVjdGl2ZSwgY2F1c2luZyBmaWxlIHRyYW5zZmVyIGZhaWx1cmVzLiBTbyBhcwot ICAgb2YgZWRpdCAxNzQsIEtlcm1pdCBvbmNlIGFnYWluIHVzZXMgcmF3bW9kZSBmb3IgOC1iaXQg ZGF0YSwgYW5kIHNvCi0gICB0aGVyZSBpcyBubyBYb24vWG9mZiBmbG93IGNvbnRyb2wgZHVyaW5n IGZpbGUgdHJhbnNmZXIgb3IgdGVybWluYWwKLSAgIGVtdWxhdGlvbiBpbiB0aGUgQmVya2VsZXkt YmFzZWQgdmVyc2lvbnMgKDQuMyBhbmQgZWFybGllciwgbm90IDQuNCkuCi0KLSAgIEFsc28gb24g QmVya2VsZXktYmFzZWQgc3lzdGVtcyAoNC4zIGFuZCBlYXJsaWVyKSwgdGhlcmUgaXMgYXBwYXJl bnRseQotICAgbm8gd2F5IHRvIGNvbmZpZ3VyZSBhIGRpYWxvdXQgbGluZSBmb3IgcHJvcGVyIGNh cnJpZXIgaGFuZGxpbmcsIGkuZS4KLSAgIGlnbm9yZSBjYXJyaWVyIGR1cmluZyBkaWFsaW5nLCBy ZXF1aXJlIGNhcnJpZXIgdGhlcmVhZnRlciwgZ2V0IGEgZmF0YWwKLSAgIGVycm9yIG9uIGFueSBh dHRlbXB0IHRvIHJlYWQgZnJvbSB0aGUgZGV2aWNlIGFmdGVyIGNhcnJpZXIgZHJvcHMgKHRoaXMK LSAgIGlzIGhhbmRsZWQgbmljZWx5IGluIFN5c3RlbSBWIGJ5IG1hbmlwdWxhdGlvbiBvZiB0aGUg Q0xPQ0FMIGZsYWcpLiBUaGUKLSAgIHN5bXB0b20gaXMgdGhhdCBjYXJyaWVyIGxvc3MgZG9lcyBu b3QgbWFrZSBDLUtlcm1pdCBwb3AgYmFjayB0byB0aGUKLSAgIHByb21wdCBhdXRvbWF0aWNhbGx5 LiBUaGlzIGlzIGV2aWRlbnQgb24gdGhlIE5lWFQsIGZvciBleGFtcGxlLCBidXQgbm90Ci0gICBv biBTdW5PUywgd2hpY2ggc3VwcG9ydHMgdGhlIENMT0NBTCBmbGFnLiBUaGlzIGlzIG5vdCBhIEtl cm1pdCBwcm9ibGVtLAotICAgYnV0IGEgbGltaXRhdGlvbiBvZiB0aGUgdW5kZXJseWluZyBvcGVy YXRpbmcgc3lzdGVtLiBGb3IgZXhhbXBsZSwgdGhlCi0gICBjdSBwcm9ncmFtIG9uIHRoZSBOZVhU IGRvZXNuJ3Qgbm90aWNlIGNhcnJpZXIgbG9zcyBlaXRoZXIsIHdoZXJlYXMgY3UKLSAgIG9uIHRo ZSBTdW4gZG9lcy4KLQotICAgT24gY2VydGFpbiBBVCZUIFVuaXggc3lzdGVtcyBlcXVpcHBlZCB3 aXRoIEFUJlQgbW9kZW1zLCBESUFMIGFuZCBIQU5HVVAKLSAgIGRvbid0IHdvcmsgcmlnaHQuIFdv cmthcm91bmRzOiAoMSkgU0VUIERJQUwgSEFOR1VQIE9GRiBiZWZvcmUKLSAgIGF0dGVtcHRpbmcg dG8gZGlhbDsgKDIpIElmIEhBTkdVUCBkb2Vzbid0IHdvcmssIFNFVCBMSU5FLCBhbmQgdGhlbiBT RVQKLSAgIExJTkUgPGRldmljZT4gdG8gdG90YWxseSBjbG9zZSBhbmQgcmVvcGVuIHRoZSBkZXZp Y2UuIElmIGFsbCBlbHNlCi0gICBmYWlscywgU0VUIENBUlJJRVIgT0ZGLgotCi0gICBDLUtlcm1p dCBkb2VzIG5vdCBjb250YWluIGFueSBwYXJ0aWN1bGFyIHN1cHBvcnQgZm9yIEFUJlQgRGF0YUtp dAotICAgZGV2aWNlcy4gWW91IGNhbiB1c2UgS2VybWl0IHNvZnR3YXJlIHRvIGRpYWwgaW4gdG8g YSBEYXRhS2l0IGxpbmUsIGJ1dAotICAgQy1LZXJtaXQgZG9lcyBub3QgY29udGFpbiB0aGUgc3Bl Y2lhbGl6ZWQgY29kZSByZXF1aXJlZCB0byBkaWFsIG91dAotICAgZnJvbSBhIERhdGFLaXQgbGlu ZS4gSWYgdGhlIFVuaXggc3lzdGVtIGlzIGNvbm5lY3RlZCB0byBEYXRhS2l0IHZpYQotICAgc2Vy aWFsIHBvcnRzLCBkaWFsb3V0IHNob3VsZCB3b3JrIG5vcm1hbGx5IChlLmcuIHNldCBsaW5lIC9k ZXYvdHR5bTEsCi0gICBzZXQgc3BlZWQgMTkyMDAsIGNvbm5lY3QsIGFuZCB0aGVuIHNlZSB0aGUg REVTVElOQVRJT046IHByb21wdCwgZnJvbQotICAgd2hpY2ggeW91IGNhbiBjb25uZWN0IHRvIGFu b3RoZXIgY29tcHV0ZXIgb24gdGhlIERhdGFLaXQgbmV0d29yayBvciB0bwotICAgYW4gb3V0Z29p bmcgbW9kZW0gcG9vbCwgZXRjKS4gQnV0IGlmIHRoZSBVbml4IHN5c3RlbSBpcyBjb25uZWN0ZWQg dG8KLSAgIHRoZSBEYXRhS2l0IG5ldHdvcmsgdGhyb3VnaCB0aGUgc3BlY2lhbCBEYXRhS2l0IGlu dGVyZmFjZSBib2FyZCwgdGhlbgotICAgU0VUIExJTkUgdG8gYSBEYXRhS2l0IHBzZXVkb2Rldmlj ZSAoc3VjaCBhcyAvZGV2L2RrMDMxdCkgd2lsbCBub3Qgd29yawotICAgKHlvdSBtdXN0IHVzZSB0 aGUgRGF0YUtpdCAiZGsiIG9yICJka2N1IiBwcm9ncmFtIGluc3RlYWQpLiBJbiBDLUtlcm1pdAot ICAgNy4wIGFuZCBsYXRlciwgeW91IGNhbiBtYWtlIEtlcm1pdCBjb25uZWN0aW9ucyAidGhvdWdo IiBkayBvciBka2N1Ci0gICB1c2luZyAic2V0IGxpbmUgL3B0eSIuCi0KLSAgIEluIHNvbWUgQlNE LWJhc2VkIFVuaXggQy1LZXJtaXQgdmVyc2lvbnMsIFNFVCBMSU5FIHRvIGEgcG9ydCB0aGF0IGhh cwotICAgbm90aGluZyBwbHVnZ2VkIGluIHRvIGl0IHdpdGggU0VUIENBUlJJRVIgT04gd2lsbCBo YW5nIHRoZSBwcm9ncmFtIChhcwotICAgaXQgc2hvdWxkKSwgYnV0IGl0IGNhbid0IGJlIGludGVy cnVwdGVkIHdpdGggQ3RybC1DLiBUaGUgaW50ZXJydXB0IHRyYXAKLSAgIGlzIGNvcnJlY3RseSBh cm1lZCwgYnV0IGFwcGFyZW50bHkgdGhlIFVuaXggb3BlbigpIGNhbGwgY2Fubm90IGJlCi0gICBp bnRlcnJ1cHRlZCBpbiB0aGlzIGNhc2UuIFdoZW4gU0VUIENBUlJJRVIgaXMgT0ZGIG9yIEFVVE8s IHRoZSBTRVQgTElORQotICAgd2lsbCBldmVudHVhbGx5IHJldHVybiwgYnV0IHRoZW4gdGhlIHBy b2dyYW0gaGFuZ3MgKHVuaW50ZXJydXB0aWJseSkKLSAgIHdoZW4gdGhlIEVYSVQgb3IgUVVJVCBj b21tYW5kIChvciwgcHJlc3VtYWJseSwgYW5vdGhlciBTRVQgTElORQotICAgY29tbWFuZCkgaXMg Z2l2ZW4uIFRoZSBsYXR0ZXIgaXMgcHJvYmFibHkgYmVjYXVzZSBvZiB0aGUgYXR0ZW1wdCB0bwot ICAgaGFuZyB1cCB0aGUgbW9kZW0uIChJbiBlZGl0IDE2OSwgYSB0aW1lb3V0IGFsYXJtIHdhcyBw bGFjZWQgYXJvdW5kIHRoaXMKLSAgIG9wZXJhdGlvbi4pCi0KLSAgIFdpdGggU0VUIERJQUwgSEFO R1VQIE9GRiBpbiBlZmZlY3QsIHRoZSBESUFMIGNvbW1hbmQgbWlnaHQgd29yayBvbmx5Ci0gICBv bmNlLCBidXQgbm90IGFnYWluIG9uIHRoZSBzYW1lIGRldmljZS4gSW4gdGhhdCBjYXNlLCBnaXZl IGEgQ0xPU0UKLSAgIGNvbW1hbmQgdG8gY2xvc2UgdGhlIGRldmljZSwgYW5kIHRoZW4gYW5vdGhl ciBTRVQgTElORSBjb21tYW5kIHRvCi0gICByZS1vcGVuIHRoZSBzYW1lIGRldmljZS4gT3IgcmVi dWlsZCB5b3VyIHZlcnNpb24gb2YgS2VybWl0IHdpdGggdGhlCi0gICAtRENMU09QTiBjb21waWxl LXRpbWUgc3dpdGNoLgotCi0gICBUaGUgRElBTCBjb21tYW5kIHNheXMgIlRvIGNhbmNlbDogVHlw ZSB5b3VyIGludGVycnVwdCBjaGFyYWN0ZXIKLSAgIChub3JtYWxseSBDdHJsLUMpLiIgVGhpcyBp cyBqdXN0IG9uZSBleGFtcGxlIG9mIHdoZXJlIHByb2dyYW0gbWVzc2FnZXMKLSAgIGFuZCBkb2N1 bWVudGF0aW9uIGFzc3VtZSB5b3VyIGludGVycnVwdCBjaGFyYWN0ZXIgaXMgQ3RybC1DLiBCdXQg aXQKLSAgIG1pZ2h0IGJlIHNvbWV0aGluZyBlbHNlLiBJbiBtb3N0IChidXQgbm90IG5lY2Vzc2Fy aWx5IGFsbCkgY2FzZXMsIHRoZQotICAgY2hhcmFjdGVyIHJlZmVycmVkIHRvIGlzIHRoZSBvbmUg dGhhdCBnZW5lcmF0ZXMgdGhlIFNJR0lOVCBzaWduYWwuIElmCi0gICBDdHJsLUMgZG9lc24ndCBh Y3QgYXMgYW4gaW50ZXJydXB0IGNoYXJhY3RlciBmb3IgeW91LCB0eXBlIHRoZSBVbml4Ci0gICBj b21tYW5kICJzdHR5IC1hIiBvciAic3R0eSBhbGwiIG9yICJzdHR5IGV2ZXJ5dGhpbmciIHRvIHNl ZSB3aGF0IHlvdXIKLSAgIGludGVycnVwdCBjaGFyYWN0ZXIgaXMuIChLZXJtaXQgY291bGQgYmUg bWFkZSB0byBmaW5kIG91dCB3aGF0IHRoZQotICAgaW50ZXJydXB0IGNoYXJhY3RlciBpcywgYnV0 IHRoaXMgd291bGQgcmVxdWlyZSBhIGxvdCBvZgotICAgcGxhdGZvcm0tZGVwZW5kZW50IGNvZGlu ZyBhbmQgI2lmZGVmcywgYW5kIGEgbmV3IHJvdXRpbmUgYW5kIGludGVyZmFjZQotICAgYmV0d2Vl biB0aGUgcGxhdGZvcm0tZGVwZW5kZW50IGFuZCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBwYXJ0cyBv ZiB0aGUKLSAgIHByb2dyYW0uKQotCi0gICBJbiBnZW5lcmFsLCB0aGUgaGFuZ3VwIG9wZXJhdGlv biBvbiBhIHNlcmlhbCBjb21tdW5pY2F0aW9uIGRldmljZSBpcwotICAgcHJvbmUgdG8gZmFpbHVy ZS4gQy1LZXJtaXQgdHJpZXMgdG8gc3VwcG9ydCBtYW55LCBtYW55IGRpZmZlcmVudCBraW5kcwot ICAgb2YgY29tcHV0ZXJzLCBhbmQgdGhlcmUgc2VlbXMgdG8gYmUgbm8gcG9ydGFibGUgbWV0aG9k IGZvciBoYW5naW5nIHVwIGEKLSAgIG1vZGVtIGNvbm5lY3Rpb24gKGkuZS4gdHVybmluZyBvZmYg dGhlIFJTLTIzMiBEVFIgc2lnbmFsIGFuZCB0aGVuCi0gICB0dXJuaW5nIGl0IGJhY2sgb24gYWdh aW4pLiBJZiBIQU5HVVAsIERJQUwsIGFuZC9vciBDdHJsLVxIIGRvIG5vdCB3b3JrCi0gICBmb3Ig eW91LCBhbmQgeW91IGFyZSBhIHByb2dyYW1tZXIsIGxvb2sgYXQgdGhlIHR0aGFuZygpIGZ1bmN0 aW9uIGluCi0gICBja3V0aW8uYyBhbmQgc2VlIGlmIHlvdSBjYW4gYWRkIGNvZGUgdG8gbWFrZSBp dCB3b3JrIGNvcnJlY3RseSBmb3IgeW91cgotICAgc3lzdGVtLCBhbmQgc2VuZCB0aGUgY29kZSB0 byB0aGUgYWRkcmVzcyBhYm92ZS4gKE5PVEU6IFRoaXMgcHJvYmxlbSBoYXMKLSAgIGJlZW4gbGFy Z2VseSBzaWRlc3RlcHBlZCBhcyBvZiBlZGl0IDE4OCwgaW4gd2hpY2ggS2VybWl0IGZpcnN0IGF0 dGVtcHRzCi0gICB0byBoYW5nIHVwIHRoZSBtb2RlbSBieSAiZXNjYXBpbmcgYmFjayIgdmlhICsr KyBhbmQgdGhlbiBnaXZpbmcgdGhlCi0gICBtb2RlbSdzIGhhbmd1cCBjb21tYW5kLCBlLmcuIEFU SDAsIHdoZW4gRElBTCBNT0RFTS1IQU5HVVAgaXMgT04sIHdoaWNoCi0gICBpcyB0aGUgZGVmYXVs dCBzZXR0aW5nLikKLQotICAgRXZlbiB3aGVuIEtlcm1pdCdzIG1vZGVtLWNvbnRyb2wgc29mdHdh cmUgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkgZm9yCi0gICB5b3VyIGNvbXB1dGVyLCBpdCBjYW4g b25seSB3b3JrIHJpZ2h0IGlmIHlvdXIgbW9kZW0gaXMgYWxzbyBjb25maWd1cmVkCi0gICB0byBh c3NlcnQgdGhlIENEIHNpZ25hbCB3aGVuIGl0IGlzIGNvbm5lY3RlZCB0byB0aGUgcmVtb3RlIG1v ZGVtIGFuZCB0bwotICAgaGFuZyB1cCB0aGUgY29ubmVjdGlvbiB3aGVuIHlvdXIgY29tcHV0ZXIg ZHJvcHMgdGhlIERUUiBzaWduYWwuIFNvCi0gICBiZWZvcmUgZGVjaWRpbmcgS2VybWl0IGRvZXNu J3Qgd29yayB3aXRoIHlvdXIgbW9kZW0sIGNoZWNrIHlvdXIgbW9kZW0KLSAgIGNvbmZpZ3VyYXRp b24gQU5EIHRoZSBjYWJsZSAoaWYgYW55KSBjb25uZWN0aW5nIHlvdXIgbW9kZW0gdG8gdGhlCi0g ICBjb21wdXRlciAtLSBpdCBzaG91bGQgYmUgYSBzdHJhaWdodC10aHJvdWdoIFs1NzNdbW9kZW0g Y2FibGUgY29uZHVjdGluZwotICAgdGhlIHNpZ25hbHMgRkcsIFNHLCBURCwgUkQsIFJUUywgQ1RT LCBEU1IsIERUUiwgQ0QsIGFuZCBSSS4KLQotICAgTWFueSBVbml4IHN5c3RlbXMga2VlcCBhbGlh c2VzIGZvciBkaWFsb3V0IGRldmljZXM7IGZvciBleGFtcGxlLAotICAgL2Rldi9hY3UgbWlnaHQg YmUgYW4gYWxpYXMgZm9yIC9kZXYvdHR5MDAuIEJ1dCBtb3N0IG9mIHRoZXNlIFVuaXgKLSAgIHN5 c3RlbXMgYWxzbyB1c2UgVVVDUCBsb2NrZmlsZSBjb252ZW50aW9ucyB0aGF0IGRvIG5vdCB0YWtl IHRoaXMKLSAgIGFsaWFzaW5nIGludG8gYWNjb3VudCwgc28gaWYgb25lIHVzZXIgYXNzaWducyAo ZS5nLikgL2Rldi9hY3UsIHRoZW4KLSAgIGFub3RoZXIgdXNlciBjYW4gc3RpbGwgYXNzaWduIHRo ZSBzYW1lIGRldmljZSBieSByZWZlcnJpbmcgdG8gaXRzIG90aGVyCi0gICBuYW1lLiBUaGlzIGlz IG5vdCBhIEtlcm1pdCBwcm9ibGVtIC0tIEtlcm1pdCBtdXN0IGZvbGxvdyB0aGUgbG9ja2ZpbGUK LSAgIGNvbnZlbnRpb25zIHVzZWQgYnkgdGhlIHZlbmRvci1zdXBwbGllZCBzb2Z0d2FyZSAoY3Us IHRpcCwgdXVjcCkuCi0KLSAgIFRoZSBTRVQgRkxPVy1DT05UUk9MIEtFRVAgb3B0aW9uIHNob3Vs ZCBiZSBnaXZlbiAqYmVmb3JlKiBhbnkKLSAgIGNvbW11bmljYXRpb24gKGRpYWxpbmcsIHRlcm1p bmFsIGVtdWxhdGlvbiwgZmlsZSB0cmFuc2ZlciwKLSAgIElOUFVUL09VVFBVVC9UUkFOU01JVCwg ZXRjKSBpcyBhdHRlbXB0ZWQsIGlmIHlvdSB3YW50IEMtS2VybWl0IHRvIHVzZQotICAgYWxsIG9m IHRoZSBkZXZpY2UncyBwcmVleGlzdGluZyBmbG93LWNvbnRyb2wgcmVsYXRlZCBzZXR0aW5ncy4g VGhlCi0gICBkZWZhdWx0IGZsb3ctY29udHJvbCBzZXR0aW5nIGlzIFhPTi9YT0ZGLCBhbmQgaXQg d2lsbCB0YWtlIGVmZmVjdCB3aGVuCi0gICB0aGUgZmlyc3QgY29tbXVuaWNhdGlvbi1yZWxhdGVk IGNvbW1hbmQgaXMgZ2l2ZW4sIGFuZCBhIHN1YnNlcXVlbnQgU0VUCi0gICBGTE9XIEtFRVAgY29t bWFuZCB3aWxsIG5vdCBuZWNlc3NhcmlseSBrbm93IGhvdyB0byByZXN0b3JlICphbGwqIG9mIHRo ZQotICAgZGV2aWNlJ3Mgb3JpZ2luYWwgZmxvdy1jb250cm9sIHNldHRpbmdzLgotCi03LjIuIE5l dHdvcmsgQ29ubmVjdGlvbnMKLQotICAgQy1LZXJtaXQgdHJpZXMgdG8gdXNlIHRoZSA4dGggYml0 IGZvciBkYXRhIHdoZW4gcGFyaXR5IGlzIE5PTkUsIGFuZAotICAgdGhpcyBnZW5lcmFsbHkgd29y a3Mgb24gcmVhbCBVbml4IHRlcm1pbmFsICh0dHkpIGRldmljZXMsIGJ1dCBpdCBvZnRlbgotICAg ZG9lcyBub3Qgd29yayB3aGVuIHRoZSBVbml4IHN5c3RlbSBpcyBhY2Nlc3NlZCBvdmVyIGEgbmV0 d29yayB2aWEKLSAgIHRlbG5ldCBvciBybG9naW4gcHJvdG9jb2xzLCBpbmNsdWRpbmcgKGluIG1h bnkgY2FzZXMpIHRocm91Z2ggdGVybWluYWwKLSAgIHNlcnZlcnMuIEZvciBleGFtcGxlLCBhbiBF bmNvcmUgY29tcHV0ZXIgd2l0aCBBbm5leCB0ZXJtaW5hbCBzZXJ2ZXJzCi0gICBvbmx5IGdpdmVz IGEgNy1iaXQgcGF0aCBpZiB0aGUgcmxvZ2luIHByb3RvY29sIGlzIHNlbGVjdGVkIGluIHRoZQot ICAgdGVybWluYWwgc2VydmVyIGJ1dCBpdCBnaXZlcyB0aGUgZnVsbCA4IGJpdHMgaWYgdGhlIHBy b3ByaWV0YXJ5IFJEUAotICAgcHJvdG9jb2wgaXMgdXNlZC4KLQotICAgSWYgZmlsZSB0cmFuc2Zl ciBkb2VzIG5vdCB3b3JrIHRocm91Z2ggYSBob3N0IHRvIHdoaWNoIHlvdSBoYXZlCi0gICBybG9n aW4nZCwgdXNlICJybG9naW4gLTgiIHJhdGhlciB0aGFuICJybG9naW4iLiBJZiB0aGF0IGRvZXNu J3Qgd29yaywKLSAgIHRlbGwgYm90aCBLZXJtaXQgcHJvZ3JhbXMgdG8gInNldCBwYXJpdHkgc3Bh Y2UiLgotCi0gICBUaGUgRW5jb3JlIFRFTE5FVCBzZXJ2ZXIgZG9lcyBub3QgYWxsb3cgbG9uZyBi dXJzdHMgb2YgaW5wdXQuIFdoZW4geW91Ci0gICBoYXZlIGEgVEVMTkVUIGNvbm5lY3Rpb24gdG8g YW4gRW5jb3JlLCB0ZWxsIEMtS2VybWl0IG9uIHRoZSBFbmNvcmUgdG8KLSAgIFNFVCBSRUNFSVZF IFBBQ0tFVC1MRU5HVEggMjAwIG9yIHRoZXJlYWJvdXRzLgotCi04LiBIQVJEV0FSRSBGTE9XIENP TlRST0wKLQotICAgWyBbNTc0XVRvcCBdIFsgWzU3NV1Db250ZW50cyBdIFsgWzU3Nl1OZXh0IF0g WyBbNTc3XVByZXZpb3VzIF0KLQotICAgU0VUIEZMT1cgUlRTL0NUUyBpcyBhdmFpbGFibGUgaW4g VW5peCBDLUtlcm1pdCBvbmx5IHdoZW4gdGhlIHVuZGVybHlpbmcKLSAgIG9wZXJhdGluZyBzeXN0 ZW0gcHJvdmlkZXMgYW4gQXBwbGljYXRpb24gUHJvZ3JhbSBJbnRlcmZhY2UgKEFQSSkgZm9yCi0g ICB0dXJuaW5nIHRoaXMgZmVhdHVyZSBvbiBhbmQgb2ZmIHVuZGVyIHByb2dyYW0gY29udHJvbCwg d2hpY2ggdHVybnMgb3V0Ci0gICB0byBiZSBhIHJhdGhlciByYXJlIGZlYXR1cmUgYW1vbmcgVW5p eCBzeXN0ZW1zLiBUbyBzZWUgaWYgeW91ciBVbml4Ci0gICBDLUtlcm1pdCB2ZXJzaW9uIHN1cHBv cnRzIGhhcmR3YXJlIGZsb3cgY29udHJvbCwgdHlwZSAic2V0IGZsb3cgPyIgYXQKLSAgIHRoZSBD LUtlcm1pdCBwcm9tcHQsIGFuZCBsb29rIGZvciAicnRzL2N0cyIgYW1vbmcgdGhlIG9wdGlvbnMu IE90aGVyCi0gICBjb21tb24gc2l0dWF0aW9ucyBpbmNsdWRlOgotCi0gICAgMS4gVGhlIEFQSSBp cyBhdmFpbGFibGUsIHNvICJzZXQgZmxvdyBydHMvY3RzIiBhcHBlYXJzIGFzIGEgdmFsaWQKLSAg ICAgICBDLUtlcm1pdCBjb21tYW5kLCBidXQgaXQgZG9lc24ndCBkbyBhbnl0aGluZyBiZWNhdXNl IHRoZSBkZXZpY2UKLSAgICAgICBkcml2ZXIgKHBhcnQgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0p IHdhcyBuZXZlciBjb2RlZCB0byBkbwotICAgICAgIGhhcmR3YXJlIGZsb3cgY29udHJvbC4gVGhp cyBpcyBjb21tb24gYW1vbmcgU3lzdGVtIFYgUjQKLSAgICAgICBpbXBsZW1lbnRhdGlvbnMgKGRl dGFpbHMgYmVsb3cpLgotICAgIDIuIFRoZSBBUEkgaXMgbm90IGF2YWlsYWJsZSwgc28gInNldCBm bG93IHJ0cy9jdHMiIGRvZXMgTk9UIGFwcGVhciBhcwotICAgICAgIGEgdmFsaWQgQy1LZXJtaXQg Y29tbWFuZCwgYnV0IHlvdSBjYW4gc3RpbGwgZ2V0IFJUUy9DVFMgZmxvdwotICAgICAgIGNvbnRy b2wgYnkgc2VsZWN0aW5nIGEgc3BlY2lhbGx5IG5hbWVkIGRldmljZSBpbiB5b3VyIFNFVCBMSU5F Ci0gICAgICAgY29tbWFuZC4gRXhhbXBsZXM6Ci0gICAgICAgICAgKyBOZVhUU1RFUDogL2Rldi9j dWZhIGluc3RlYWQgb2YgL2Rldi9jdWEsIC9kZXYvY3VmYiBpbnN0ZWFkIG9mCi0gICAgICAgICAg ICAvZGV2L2N1YiAoNjgwNDAgb25seTsgIm1hbiB6cyIgZm9yIGZ1cnRoZXIgaW5mbykuCi0gICAg ICAgICAgKyBJUklYOiAvZGV2L3R0eWYyIGluc3RlYWQgb2YgL2Rldi90dHlkMiBvciAvZGV2L3R0 eW0yICgibWFuIDcKLSAgICAgICAgICAgIHNlcmlhbCIpLgotICAgIDMuIFRoZSBBUEkgaXMgYXZh aWxhYmxlLCBkb2Vzbid0IHdvcmssIGJ1dCBhIHdvcmthcm91bmQgYXMgaW4gKDIpIGNhbgotICAg ICAgIGJlIHVzZWQuCi0gICAgNC4gVGhlIEFQSSBpcyBhdmFpbGFibGUsIGJ1dCBLZXJtaXQgZG9l c24ndCBrbm93IGFib3V0IGl0LiBJbiB0aGVzZQotICAgICAgIGNhc2VzLCB5b3UgY2FuIHVzdWFs bHkgdXNlIGFuIHN0dHkgY29tbWFuZCB0byBlbmFibGUgUlRTL0NUUyBvbiB0aGUKLSAgICAgICBk ZXZpY2UsIGUuZy4gInN0dHkgY3J0c2N0cyIgb3IgInN0dHkgY3RzZmxvdyIsICJzdHR5IHJ0c2Zs b3ciLAotICAgICAgIGJlZm9yZSBzdGFydGluZyBLZXJtaXQsIGFuZCB0aGVuIHRlbGwgS2VybWl0 IHRvIFNFVCBGTE9XIEtFRVAuCi0gICAgNS4gTm8gQVBJIGFuZCBubyBzcGVjaWFsIGRldmljZSBk cml2ZXJzLiBIYXJkd2FyZSBmbG93IGNvbnRyb2wgaXMKLSAgICAgICBjb21wbGV0ZWx5IHVuYXZh aWxhYmxlLgotCi0gICBTeXN0ZW0gViBSNCBiYXNlZCBVbml4ZXMgYXJlIHN1cHBvc2VkIHRvIHN1 cHBseSBhIDx0ZXJtaW94Lmg+IGZpbGUsCi0gICB3aGljaCBnaXZlcyBLZXJtaXQgdGhlIG5lY2Vz c2FyeSBpbnRlcmZhY2UgdG8gY29tbWFuZCB0aGUgdGVybWluYWwKLSAgIGRyaXZlciB0byBlbmFi bGUvZGlzYWJsZSBoYXJkd2FyZSBmbG93IGNvbnRyb2wuIFVuZm9ydHVuYXRlbHksIGJ1dAotICAg cHJlZGljdGFibHksIG1hbnkgaW1wbGVtZW50YXRpb25zIG9mIFNWUjQgd2hpbXNpY2FsbHkgcGxh Y2UgdGhpcyBmaWxlCi0gICBpbiAvdXNyL2luY2x1ZGUvc3lzIHJhdGhlciB0aGFuIC91c3IvaW5j bHVkZSAod2hlcmUgU1ZJRCBjbGVhcmx5Ci0gICBzcGVjaWZpZXMgaXQgc2hvdWxkIGJlOyBzZWUg U1ZJRCwgVGhpcmQgRWRpdGlvbiwgVjEsIHRlcm1pb3goQkFfREVWKS4KLSAgIFRodXMgaWYgeW91 IGJ1aWxkIEMtS2VybWl0IHdpdGggYW55IG9mIHRoZSBtYWtlZmlsZSBlbnRyaWVzIHRoYXQKLSAg IGNvbnRhaW4gLURURVJNSU9YIG9yIC1EU1RFUk1JT1ggKHRoZSBsYXR0ZXIgdG8gc2VsZWN0IDxz eXMvdGVybWlveC5oPiksCi0gICBDLUtlcm1pdCB3aWxsIGhhdmUgInNldCBmbG93IHJ0cy9jdHMi IGFuZCBwb3NzaWJseSBvdGhlciBoYXJkd2FyZQotICAgZmxvdy1jb250cm9sIHJlbGF0ZWQgY29t bWFuZHMuIEJVVC4uLiBUaGF0IGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4KLSAgIHRoYXQgdGhl eSB3aWxsIHdvcmsuIEluIHNvbWUgY2FzZXMsIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9ucyBhcmUg c2ltcGx5Ci0gICBub3QgY29kZWQgaW50byB0aGUgb3BlcmF0aW5nIHN5c3RlbS4KLQotICAgV0FS TklORzogV2hlbiBoYXJkd2FyZSBmbG93IGNvbnRyb2wgaXMgYXZhaWxhYmxlLCBhbmQgeW91IGVu YWJsZSBpbgotICAgS2VybWl0IG9uIGEgZGV2aWNlIHRoYXQgaXMgbm90IHJlY2VpdmluZyB0aGUg Q1RTIHNpZ25hbCwgS2VybWl0IGNhbgotICAgaGFuZyB3YWl0aW5nIGZvciBDVFMgdG8gY29tZSB1 cC4gVGhpcyBpcyBtb3N0IGVhc2lseSBzZWVuIHdoZW4gdGhlCi0gICBsb2NhbCBzZXJpYWwgcG9y dCBoYXMgbm90aGluZyBwbHVnZ2VkIGluIHRvIGl0LCBvciBpcyBjb25uZWN0ZWQgdG8gYW4KLSAg IGV4dGVybmFsIG1vZGVtIHRoYXQgaXMgcG93ZXJlZCBvZmYuCi0KLTkuIFRFUk1JTkFMIENPTk5F Q1RJT04gQU5EIEtFWSBNQVBQSU5HCi0KLSAgIFsgWzU3OF1Ub3AgXSBbIFs1NzldQ29udGVudHMg XSBbIFs1ODBdTmV4dCBdIFsgWzU4MV1QcmV2aW91cyBdCi0KLSAgIEMtS2VybWl0IGlzIG5vdCBh IHRlcm1pbmFsIGVtdWxhdG9yLiBSZWZlciB0byBwYWdlIDE0NyBvZiBbNTgyXVVzaW5nCi0gICBD LUtlcm1pdCwgMm5kIEVkaXRpb246ICJNb3N0IHZlcnNpb25zIG9mIEMtS2VybWl0IC0tIFVuaXgs IFZNUywgQU9TL1ZTLAotICAgVk9TLCBldGMgLS0gcHJvdmlkZSB0ZXJtaW5hbCBjb25uZWN0aW9u IHdpdGhvdXQgZW11bGF0aW9uLiBUaGVzZQotICAgdmVyc2lvbnMgYWN0IGFzIGEgJ3NlbWl0cmFu c3BhcmVudCBwaXBlJyBiZXR3ZWVuIHRoZSByZW1vdGUgY29tcHV0ZXIKLSAgIGFuZCB5b3VyIHRl cm1pbmFsLCB0ZXJtaW5hbCBlbXVsYXRvciwgY29uc29sZSBkcml2ZXIsIG9yIHdpbmRvdywgd2hp Y2gKLSAgIGluIHR1cm4gZW11bGF0ZXMgKG9yIGlzKSBhIHNwZWNpZmljIGtpbmQgb2YgdGVybWlu YWwuIiBUaGUgZW52aXJvbm1lbnQKLSAgIGluIHdoaWNoIHlvdSBydW4gQy1LZXJtaXQgaXMgdXAg dG8geW91LgotCi0gICBJZiB5b3UgYXJlIGFuIFggV2luZG93cyB1c2VyLCB5b3Ugc2hvdWxkIGJl IGF3YXJlIG9mIGFuIGFsdGVybmF0aXZlIHRvCi0gICB4dGVybSB0aGF0IHN1cHBvcnRzIFZUMjIw IGVtdWxhdGlvbiwgZnJvbSBUaG9tYXMgRS4gRGlja2V5OgotCi0gIFs1ODNdaHR0cDovL2RpY2tl eS5oaXMuY29tL3h0ZXJtL3h0ZXJtLmh0bWwKLQotICAgVW5peCBDLUtlcm1pdCdzIFNFVCBLRVkg Y29tbWFuZCBjdXJyZW50bHkgY2FuIG5vdCBiZSB1c2VkIHdpdGgga2V5cwotICAgdGhhdCBnZW5l cmF0ZSAid2lkZSIgc2NhbiBjb2RlcyBvciBtdWx0aWJ5dGUgc2VxdWVuY2VzLCBzdWNoIGFzCi0g ICB3b3Jrc3RhdGlvbiBmdW5jdGlvbiBvciBhcnJvdyBrZXlzLCBiZWNhdXNlIFVuaXggQy1LZXJt aXQgZG9lcyBub3QgaGF2ZQotICAgZGlyZWN0IGFjY2VzcyB0byB0aGUga2V5Ym9hcmQuCi0KLSAg IEhvd2V2ZXIsIG1hbnkgVW5peCB3b3Jrc3RhdGlvbnMgYW5kL29yIGNvbnNvbGUgZHJpdmVycyBw cm92aWRlIHRoZWlyCi0gICBvd24ga2V5IG1hcHBpbmcgZmVhdHVyZS4gV2l0aCB4dGVybSwgZm9y IGV4YW1wbGUsIHlvdSBjYW4gdXNlICd4bW9kbWFwJwotICAgKCJtYW4geG1vZG1hcCIgZm9yIGRl dGFpbHMpOyBoZXJlIGlzIGFuIHh0ZXJtIG1hcHBpbmcgdG8gbWFwIHRoZSBTdW4KLSAgIGtleWJv YXJkIHRvIERFQyBWVDIwMCB2YWx1ZXMgZm9yIHVzZSB3aXRoIFZULXRlcm1pbmFsIG9yaWVudGVk Ci0gICBhcHBsaWNhdGlvbnMgbGlrZSBWTVMgRVZFOgotCi0gIGtleWNvZGUgMTAxPUtQXzAKLSAg a2V5Y29kZSAxMTk9S1BfMQotICBrZXljb2RlIDEyMD1LUF8yCi0gIGtleWNvZGUgMTIxPUtQXzMK LSAga2V5Y29kZSA5OD1LUF80Ci0gIGtleWNvZGUgOTk9S1BfNQotICBrZXljb2RlIDEwMD1LUF82 Ci0gIGtleWNvZGUgNzU9S1BfNwotICBrZXljb2RlIDc2PUtQXzgKLSAga2V5Y29kZSA3Nz1LUF85 Ci0gIGtleWNvZGUgNTI9S1BfRjEKLSAga2V5Y29kZSA1Mz1LUF9GMgotICBrZXljb2RlIDU0PUtQ X0YzCi0gIGtleWNvZGUgNTc9S1BfRGVjaW1hbAotICBrZXljb2RlIDI4PUxlZnQKLSAga2V5Y29k ZSAyOT1SaWdodAotICBrZXljb2RlIDMwPUtQX1NlcGFyYXRvcgotICBrZXljb2RlIDEwNT1LUF9G NAotICBrZXljb2RlIDc4PUtQX1N1YnRyYWN0Ci0gIGtleWNvZGUgOD1MZWZ0Ci0gIGtleWNvZGUg MTA9UmlnaHQKLSAga2V5Y29kZSAzMj1VcAotICBrZXljb2RlIDMzPURvd24KLSAga2V5Y29kZSA5 Nz1LUF9FbnRlcgotCi0gICBVc2VycyBvZiBMaW51eCBjb25zb2xlcyBjYW4gdXNlIGxvYWRrZXlz ICgibWFuIGR1bXBrZXlzIGxvYWRrZXlzCi0gICBrZXl0YWJsZXMiIGZvciBkZXRhaWxzLiBUaGUg Zm9ybWF0IHVzZWQgYnkgbG9hZGtleXMgaXMgY29tcGF0aWJsZSB3aXRoCi0gICB0aGF0IHVzZWQg YnkgWG1vZG1hcCwgYWx0aG91Z2ggaXQgaXMgbm90IGRlZmluaXRlbHkgY2VydGFpbiB0aGF0IHRo ZQotICAga2V5Y29kZXMgYXJlIGNvbXBhdGlibGUgZm9yIGRpZmZlcmVudCBrZXlib2FyZCB0eXBl cyAoZS5nLiBTdW4gdnMgSFAgdnMKLSAgIFBDLCBldGMpLgotCi0xMC4gRklMRSBUUkFOU0ZFUgot Ci0gICBbIFs1ODRdVG9wIF0gWyBbNTg1XUNvbnRlbnRzIF0gWyBbNTg2XU5leHQgXSBbIFs1ODdd UHJldmlvdXMgXQotCi0gICBPbiBtb3N0IHBsYXRmb3JtcywgQy1LZXJtaXQgY2FuIG5vdCBoYW5k bGUgZmlsZXMgbG9uZ2VyIHRoYW4gMl4zMSBvcgotICAgMl4zMiBieXRlcyBsb25nLCBiZWNhdXNl IGl0IHVzZXMgdGhlIHRyYWRpdGlvbmFsIGZpbGUgaS9vIEFQSXMgdGhhdCB1c2UKLSAgIDMyLWJp dCB3b3JkcyB0byByZXByZXNlbnQgdGhlIGZpbGUgc2l6ZS4gVG8gYWNjb21tb2RhdGUgbG9uZ2Vy IGZpbGVzLAotICAgd2Ugd291bGQgaGF2ZSB0byBzd2l0Y2ggdG8gYSBuZXcgYW5kIGRpZmZlcmVu dCBBUEkuIFVuZm9ydHVuYXRlbHksIGVhY2gKLSAgIHBsYXRmb3JtIGhhcyBhIGRpZmZlcmVudCBv bmUsIGEgbmlnaHRtYXJlIHRvIGhhbmRsZSBpbiBwb3J0YWJsZSBjb2RlLgotICAgVGhlIEMtS2Vy bWl0IGZpbGUgY29kZSB3YXMgd3JpdHRlbiBpbiB0aGUgZGF5cyBsb25nIGJlZm9yZSBmaWxlcyBs b25nZXIKLSAgIHRoYW4gMkdCIHdlcmUgc3VwcG9ydGVkIG9yIGV2ZW4gY29udGVtcGxhdGVkIGlu IHRoZSBvcGVyYXRpbmcgc3lzdGVtcwotICAgd2hlcmUgQy1LZXJtaXQgcmFuLgotCi0gICBJZiB1 cGxvYWRzIChvciBkb3dubG9hZHMpIGZhaWwgaW1tZWRpYXRlbHksIGdpdmUgdGhlIENBVVRJT1VT IGNvbW1hbmQKLSAgIHRvIEtlcm1pdCBhbmQgdHJ5IGFnYWluLiBJZiB0aGV5IHN0aWxsIGZhaWws IHRoZW4gdHJ5IFNFVCBQUkVGSVhJTkcKLSAgIEFMTC4gSWYgdGhleSBzdGlsbCBmYWlsLCB0cnkg U0VUIFBBUklUWSBTUEFDRS4gSWYgdGhleSBzdGlsbCBmYWlsLCB0cnkKLSAgIFJPQlVTVC4KLQot ICAgSWYgcmVjZXB0aW9uIChwYXJ0aWN1bGFybHkgb2YgbGFyZ2UgZmlsZXMgYW5kL29yIGJpbmFy eSBmaWxlcykgYmVnaW5zCi0gICBzdWNjZXNzZnVsbHkgYnV0IHRoZW4gZmFpbCBjb25zaXN0ZW50 bHkgYWZ0ZXIgYSBjZXJ0YWluIGFtb3VudCBvZiBieXRlcwotICAgaGF2ZSBiZWVuIHNlbnQsIGNo ZWNrOgotCi0gICAgICogWW91ciB1bGltaXQgKCJ1bGltaXQgLWEiKQotICAgICAqIFRoZSBhbW91 bnQgb2YgYXZhaWxhYmxlIHNwYWNlIG9uIHRoZSB0YXJnZXQgZGlzayAoImRmIC4iIG9yICJkZiAt awotICAgICAgIC4iKQotICAgICAqIFlvdXIgcGVyc29uYWwgZGlzayBxdW90YSAocGxhdGZvcm0t IGFuZCBzaXRlLWRlcGVuZGVudCkKLSAgICAgKiBUaGUgbWF4aW11bSBmaWxlIHNpemUgb24gdGhl IHJlY2VpdmVyJ3MgZmlsZSBzeXN0ZW0gKGUuZy4gMkdCIGluCi0gICAgICAgb2xkIHZlcnNpb25z IHRoZSBMaW51eCBWRlMgZmlsZSBzeXN0ZW0sIGFuZC9vciBpbiBhcHBsaWNhdGlvbnMgdGhhdAot ICAgICAgIGhhdmUgbm90IGJlZW4gcmVjb2RlZCB0byB1c2UgbmV3ICJsYXJnZSBmaWxlIiBBUElz KS4KLSAgICAgKiBJZiBpdCdzIGFuIE5GUy1tb3VudGVkIGRpc2sgKGlmIHNvLCB0cnkgdXBsb2Fk aW5nIHRvIGEgbG9jYWwgZGlzaykKLSAgICAgKiBJcyB0aGVyZSBhbiAiaWRsZSBsaW1pdCIgb24g dGhlIHJlY2VpdmluZyBlbmQ/Ci0KLSAgIElmIG5vbmUgb2YgdGhlc2Ugc2VlbSB0byBleHBsYWlu IGl0LCB0aGVuIHRoZSBwcm9ibGVtIGlzIG5vdCBzaXplCi0gICByZWxhdGVkLCBidXQgcmVmbGVj dHMgc29tZSBjbGFzaCBiZXR3ZWVuIHRoZSBmaWxlIGNvbnRlbnRzIGFuZCB0aGUKLSAgIGNoYXJh Y3RlcmlzdGljcyBvZiB0aGUgY29ubmVjdGlvbiwgaW4gd2hpY2ggY2FzZSBmb2xsb3cgdGhlCi0g ICBpbnN0cnVjdGlvbnMgaW4gdGhlIGZpcnN0IHBhcmFncmFwaCBvZiB0aGlzIHNlY3Rpb24uCi0K LSAgIFN1cHBvc2UgdHdvIGNvcGllcyBvZiBLZXJtaXQgYXJlIHJlY2VpdmluZyBmaWxlcyBpbnRv IHRoZSBzYW1lCi0gICBkaXJlY3RvcnksIGFuZCB0aGUgZmlsZXMgaGF2ZSB0aGUgc2FtZSBuYW1l LCBlLmcuICJmb28uYmFyIi4gV2hpY2hldmVyCi0gICBvbmUgc3RhcnRzIGZpcnN0IG9wZW5zIGFu IG91dHB1dCBmaWxlIGNhbGxlZCAiZm9vLmJhciIuIFRoZSBzZWNvbmQgb25lCi0gICBzZWVzIHRo ZXJlIGlzIGFscmVhZHkgYSBmb28uYmFyIGZpbGUsIGFuZCBzbyByZW5hbWVzIHRoZSBleGlzdGlu ZwotICAgZm9vLmJhciB0byBmb28uYmFyLn4xfiAob3Igd2hhdGV2ZXIpLiBXaGVuIHRoZSBmaXJz dCBmaWxlIGhhcyBiZWVuCi0gICByZWNlaXZlZCBjb21wbGV0ZWx5LCBLZXJtaXQgZ29lcyB0byBj aGFuZ2UgaXRzIG1vZGlmaWNhdGlvbiB0aW1lIGFuZAotICAgcGVybWlzc2lvbnMgdG8gdGhvc2Ug Z2l2ZW4gYnkgdGhlIGZpbGUgc2VuZGVyIGluIHRoZSBBdHRyaWJ1dGUgcGFja2V0LgotICAgQnV0 IGluIFVuaXgsIHRoZSBBUElzIGZvciBkb2luZyB0aGlzIHRha2UgYSBmaWxlbmFtZSwgbm90IGEg ZmlsZQotICAgZGVzY3JpcHRvci4gU2luY2UgdGhlIGZpcnN0IEtlcm1pdCdzIGZpbGUgaGFzIGJl ZW4gcmVuYW1lZCwgYW5kIHRoZQotICAgc2Vjb25kIEtlcm1pdCBpcyB1c2luZyB0aGUgb3JpZ2lu YWwgbmFtZSwgdGhlIGZpcnN0IEtlcm1pdCBjaGFuZ2VzIHRoZQotICAgbW9kdGltZSBhbmQgcGVy bWlzc2lvbnMgb2YgdGhlIHNlY29uZCBLZXJtaXQncyBmaWxlLCBub3QgaXRzIG93bi4KLSAgIEFs dGhvdWdoIHRoZXJlIG1pZ2h0IGJlIGEgd2F5IHRvIHdvcmsgYXJvdW5kIHRoaXMgaW4gdGhlIGNv ZGUsIGUuZy4KLSAgIHVzaW5nIGlub2RlIG51bWJlcnMgdG8ga2VlcCB0cmFjayBvZiB3aGljaCBm aWxlIGlzIHdoaWNoLCB0aGlzIHdvdWxkIGJlCi0gICB0cmlja3kgYW5kIG1vc3QgbGlrZWx5IG5v dCB2ZXJ5IHBvcnRhYmxlLiBJdCdzIGJldHRlciB0byBzZXQgdXAgeW91cgotICAgYXBwbGljYXRp b24gdG8gcHJldmVudCBzdWNoIHRoaW5ncyBmcm9tIGhhcHBlbmluZywgd2hpY2ggaXMgZWFzeSBl bm91Z2gKLSAgIHVzaW5nIHRoZSBzY3JpcHQgbGFuZ3VhZ2UsIGZpbGVuYW1lIHRlbXBsYXRlcywg ZXRjLgotCi0gICBTdXBwb3NlIHlvdSBzdGFydCBDLUtlcm1pdCB3aXRoIGEgY29tbWFuZC1saW5l IGFyZ3VtZW50IHRvIHNlbmQgb3IKLSAgIHJlY2VpdmUgYSBmaWxlIChlLmcuICJrZXJtaXQgLXIi KSBhbmQgdGhlbiB0eXBlIEN0cmwtXGMgaW1tZWRpYXRlbHkKLSAgIGFmdGVyd2FyZHMgdG8gZXNj YXBlIGJhY2sgYW5kIGluaXRpYXRlIHRoZSBvdGhlciBlbmQgb2YgdGhlIHRyYW5zZmVyLAotICAg QlVUIHlvdXIgbG9jYWwgS2VybWl0J3MgZXNjYXBlIGNoYXJhY3RlciBpcyBub3QgQ3RybC1cLiBJ biB0aGlzIGNhc2UsCi0gICB0aGUgbG9jYWwgS2VybWl0IHBhc3NlcyB0aGUgQ3RybC1cIHRvIHRo ZSByZW1vdGUgc3lzdGVtLCBhbmQgaWYgdGhpcyBpcwotICAgVW5peCwgQ3RybC1cIGlzIGxpa2Vs eSB0byBiZSBpdHMgU0lHUVVJVCBjaGFyYWN0ZXIsIHdoaWNoIGNhdXNlcyB0aGUKLSAgIGN1cnJl bnQgcHJvZ3JhbSB0byBoYWx0IGFuZCBkdW1wIGNvcmUuIFdlbGwsIGp1c3QgYWJvdXQgdGhlIGZp cnN0IHRoaW5nCi0gICBDLUtlcm1pdCBkb2VzIHdoZW4gaXQgc3RhcnRzIGlzIHRvIGRpc2FibGUg dGhlIFNJR1FVSVQgc2lnbmFsLiBIb3dldmVyLAotICAgaXQgaXMgc3RpbGwgcG9zc2libGUgZm9y IFNJR1FVSVQgdG8gY2F1c2UgS2VybWl0IHRvIHF1aXQgYW5kIGR1bXAgY29yZQotICAgaWYgaXQg aXMgZGVsaXZlcmVkIHdoaWxlIEtlcm1pdCBpcyBiZWluZyBsb2FkZWQgb3Igc3RhcnRlZCwgYmVm b3JlIHRoZQotICAgc2lnbmFsIGNhbiBiZSBkaXNhYmxlZC4gVGhlcmUncyBub3RoaW5nIEtlcm1p dCBpdHNlbGYgY2FuIGRvIGFib3V0Ci0gICB0aGlzLCBidXQgeW91IGNhbiBwcmV2ZW50IGl0IGZy b20gaGFwcGVuaW5nIGJ5IGRpc2FibGluZyBTSUdRVUlUIGluCi0gICB5b3VyIFVuaXggc2Vzc2lv bi4gVGhlIGNvbW1hbmQgaXMgdXN1YWxseSBzb21ldGhpbmcgbGlrZToKLQotICBzdHR5IHF1aXQg dW5kZWYKLQotICAgVW5peCBDLUtlcm1pdCBkb2VzIG5vdCByZWplY3QgaW5jb21pbmcgZmlsZXMg b24gdGhlIGJhc2lzIG9mIHNpemUuCi0gICBUaGVyZSBhcHBlYXJzIHRvIGJlIG5vIGdvb2QgKHJl bGlhYmxlLCBwb3J0YWJsZSkgd2F5IHRvIGRldGVybWluZSBpbgotICAgYWR2YW5jZSBob3cgbXVj aCBkaXNrIHNwYWNlIGlzIGF2YWlsYWJsZSwgZWl0aGVyIG9uIHRoZSBkZXZpY2UsIG9yCi0gICAo d2hlbiBxdW90YXMgb3Igb3RoZXIgbGltaXRzIGFyZSBpbnZvbHZlZCkgdG8gdGhlIHVzZXIuCi0K LSAgIFVuaXggQy1LZXJtaXQgZGlzY2FyZHMgYWxsIGNhcnJpYWdlIHJldHVybnMgZnJvbSBpbmNv bWluZyBmaWxlcyB3aGVuIGluCi0gICB0ZXh0IG1vZGUuCi0KLSAgIElmIEMtS2VybWl0IGhhcyBw cm9ibGVtcyBjcmVhdGluZyBmaWxlcyBpbiB3cml0YWJsZSBkaXJlY3RvcmllcyB3aGVuIGl0Ci0g ICBpcyBpbnN0YWxsZWQgc2V0dWlkIG9yIHNldGdpZCBvbiBCU0QtYmFzZWQgdmVyc2lvbnMgb2Yg VW5peCBzdWNoIGFzCi0gICBOZVhUU1RFUCAzLjAsIGl0IHByb2JhYmx5IG5lZWRzIHRvIGJlIHJl YnVpbHQgd2l0aCB0aGUgLURTV19BQ0NfSUQKLSAgIGNvbXBpbGF0aW9uIHN3aXRjaC4KLQotICAg SWYgeW91IFNFVCBGSUxFIERJU1BMQVkgRlVMTFNDUkVFTiwgYW5kIEMtS2VybWl0IGNvbXBsYWlu cyAiU29ycnksCi0gICB0ZXJtaW5hbCB0eXBlIG5vdCBzdXBwb3J0ZWQiLCBpdCBtZWFucyB0aGF0 IHRoZSB0ZXJtaW5hbCBsaWJyYXJ5Ci0gICAodGVybWNhcCBvciB0ZXJtbGliKSB0aGF0IEMtS2Vy bWl0IHdhcyBidWlsdCB3aXRoIGRvZXMgbm90IGtub3cgYWJvdXQgYQotICAgdGVybWluYWwgd2hv c2UgbmFtZSBpcyB0aGUgY3VycmVudCB2YWx1ZSBvZiB5b3VyIFRFUk0gZW52aXJvbm1lbnQKLSAg IHZhcmlhYmxlLiBJZiB0aGlzIGhhcHBlbnMsIGJ1dCB5b3Ugd2FudCB0byBoYXZlIHRoZSBmdWxs c2NyZWVuIGZpbGUKLSAgIHRyYW5zZmVyIGRpc3BsYXksIEVYSVQgZnJvbSBDLUtlcm1pdCBhbmQg c2V0IGEgVW5peCB0ZXJtaW5hbCB0eXBlIGZyb20KLSAgIGFtb25nIHRoZSBzdXBwb3J0ZWQgdmFs dWVzIHRoYXQgaXMgYWxzbyBzdXBwb3J0ZWQgYnkgeW91ciB0ZXJtaW5hbAotICAgZW11bGF0b3Is IG9yIGVsc2UgaGF2ZSBhbiBlbnRyeSBmb3IgeW91ciB0ZXJtaW5hbCB0eXBlIGFkZGVkIHRvIHRo ZQotICAgc3lzdGVtIHRlcm1jYXAgYW5kL29yIHRlcm1pbmZvIGRhdGFiYXNlLgotCi0gICBJZiB5 b3UgYXR0ZW1wdCB0byBzdXNwZW5kIEMtS2VybWl0IGR1cmluZyBsb2NhbC1tb2RlIGZpbGUgdHJh bnNmZXIgYW5kCi0gICB0aGVuIGNvbnRpbnVlIGl0IGluIHRoZSBiYWNrZ3JvdW5kICh2aWEgYmcp LCBpdCB3aWxsIGJsb2NrIGZvciAidHR5Ci0gICBvdXRwdXQiIGlmIHlvdSBhcmUgdXNpbmcgdGhl IEZVTExTQ1JFRU4gZmlsZSB0cmFuc2ZlciBkaXNwbGF5LiBUaGlzIGlzCi0gICBhcHBhcmVudGx5 IGEgcHJvYmxlbSB3aXRoIGN1cnNlcy4gTW92aW5nIGEgbG9jYWwtbW9kZSBmaWxlIHRyYW5zZmVy Ci0gICBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgd29y a3MgY29ycmVjdGx5LAotICAgaG93ZXZlciwgd2l0aCB0aGUgU0VSSUFMLCBDUlQsIEJSSUVGLCBv ciBOT05FIGZpbGUgdHJhbnNmZXIgZGlzcGxheXMuCi0KLSAgIElmIEMtS2VybWl0J3MgY29tbWFu ZCBwYXJzZXIgbm8gbG9uZ2VyIGVjaG9lcywgb3Igb3RoZXJ3aXNlIGFjdHMKLSAgIHN0cmFuZ2Vs eSwgYWZ0ZXIgcmV0dXJuaW5nIGZyb20gYSBmaWxlIHRyYW5zZmVyIHdpdGggdGhlIGZ1bGxzY3Jl ZW4KLSAgIChjdXJzZXMpIGRpc3BsYXksIGFuZCB0aGUgY3Vyc2VzIGxpYnJhcnkgZm9yIHlvdXIg dmVyc2lvbiBvZiBVbml4Ci0gICBpbmNsdWRlcyB0aGUgbmV3dGVybSgpIGZ1bmN0aW9uLCB0aGVu IHRyeSByZWJ1aWxkaW5nIHlvdXIgdmVyc2lvbiBvZgotICAgQy1LZXJtaXQgd2l0aCAtRENLX05F V1RFUk0uIFNpbWlsYXJseSBpZiBpdCBlY2hvZXMgZG91Ymx5LCB3aGljaCBtaWdodAotICAgZXZl biBoYXBwZW4gZHVyaW5nIGEgc3Vic2VxdWVudCBDT05ORUNUIHNlc3Npb24uIElmIHJlYnVpbGRp bmcgd2l0aAotICAgLURDS19ORVdURVJNIGRvZXNuJ3QgZml4IGl0LCB0aGVuIHRoZXJlIGlzIHNv bWV0aGluZyB2ZXJ5IHN0cmFuZ2UgYWJvdXQKLSAgIHlvdXIgc3lzdGVtJ3MgY3Vyc2VzIGxpYnJh cnksIGFuZCB5b3Ugc2hvdWxkIHByb2JhYmx5IG5vdCB1c2UgaXQuIFRlbGwKLSAgIEMtS2VybWl0 IHRvIFNFVCBGSUxFIERJU1BMQVkgQ1JULCBCUklFRiwgb3IgYW55dGhpbmcgZWxzZSBvdGhlciB0 aGFuCi0gICBGVUxMU0NSRUVOLCBhbmQvb3IgcmVidWlsZCB3aXRob3V0IC1EQ0tfQ1VSU0VTLCBh bmQgd2l0aG91dCBsaW5raW5nCi0gICB3aXRoICh0ZXJtbGliIGFuZCkgY3Vyc2VzLiBOb3RlOiBU aGlzIHByb2JsZW0gc2VlbWVkIHRvIGhhdmUgZXNjYWxhdGVkCi0gICBpbiBDLUtlcm1pdCA3LjAs IGFuZCAtRENLX05FV1RFUk0gaGFkIHRvIGJlIGFkZGVkIHRvIG1hbnkgYnVpbGRzIHRoYXQKLSAg IHByZXZpb3VzbHkgd29ya2VkIHdpdGhvdXQgaXQ6IExpbnV4LCBBSVggNC4xLCBERy9VWCwgZXRj LiBJbiB0aGUgTGludXgKLSAgIGNhc2UsIGl0IGlzIG9idmlvdXNseSBiZWNhdXNlIG9mIGNoYW5n ZXMgaW4gdGhlIChuKWN1cnNlcyBsaWJyYXJ5OyB0aGUKLSAgIGNhdXNlIGluIHRoZSBvdGhlciBj YXNlcyBpcyBub3Qga25vd24uCi0KLSAgIEMtS2VybWl0IGNyZWF0ZXMgYmFja3VwLWZpbGUgbmFt ZXMgKHN1Y2ggYXMgIm9vZmEudHh0Ln4xfiIpIGJhc2VkIG9uCi0gICBpdHMga25vd2xlZGdlIG9m IHRoZSBtYXhpbXVtIGZpbGVuYW1lIGxlbmd0aCBvbiB0aGUgcGxhdGZvcm0gd2hlcmUgaXQKLSAg IGlzIHJ1bm5pbmcsIHdoaWNoIGlzIGxlYXJuZWQgYXQgY29tcGlsZSB0aW1lLCBiYXNlZCBvbiBN QVhOQU1MRU4gb3IKLSAgIGVxdWl2YWxlbnQgc3ltYm9scyBmcm9tIHRoZSBzeXN0ZW0gaGVhZGVy IGZpbGVzLiBCdXQgc3VwcG9zZSBDLUtlcm1pdAotICAgaXMgcmVjZWl2aW5nIGZpbGVzIG9uIGEg VW5peCBwbGF0Zm9ybSB0aGF0IHN1cHBvcnRzIGxvbmcgZmlsZW5hbWVzLCBidXQKLSAgIHRoZSBp bmNvbWluZyBmaWxlcyBhcmUgYmVpbmcgc3RvcmVkIG9uIGFuIE5GUy1tb3VudGVkIGZpbGUgc3lz dGVtIHRoYXQKLSAgIHN1cHBvcnRzIG9ubHkgc2hvcnQgbmFtZXMuIE5GUyBtYXBzIHRoZSBleHRl cm5hbCBzeXN0ZW0gdG8gdGhlIGxvY2FsCi0gICBBUElzLCBzbyBDLUtlcm1pdCBoYXMgbm8gd2F5 IG9mIGtub3dpbmcgdGhhdCBsb25nIG5hbWVzIHdpbGwgYmUKLSAgIHRydW5jYXRlZC4gT3IgdGhh dCBDLUtlcm1pdCBpcyBydW5uaW5nIG9uIGEgdmVyc2lvbiBvZiBVbml4IHRoYXQKLSAgIHN1cHBv cnRzIGJvdGggbG9uZy1uYW1lIGFuZCBzaG9ydC1uYW1lIGZpbGUgc3lzdGVtcyBzaW11bHRhbmVv dXNseQotICAgKHN1Y2ggYXMgSFAtVVggNy4wMCkuIFRoaXMgY2FuIGNhdXNlIHVuZXhwZWN0ZWQg YmVoYXZpb3Igd2hlbiBjcmVhdGluZwotICAgYmFja3VwIGZpbGVzLCBvciB3b3JzZS4gRm9yIGV4 YW1wbGUsIHlvdSBhcmUgc2VuZGluZyBhIGdyb3VwIG9mIGZpbGVzCi0gICB3aG9zZSBuYW1lcyBh cmUgZGlmZmVyZW50aWF0ZWQgb25seSBieSBjaGFyYWN0ZXJzIHBhc3QgdGhlIHBvaW50IGF0Ci0g ICB3aGljaCB0aGV5IHdvdWxkIGJlIHRydW5jYXRlZCwgZWFjaCBmaWxlIHdpbGwgb3ZlcndyaXRl IHRoZSBwcmV2aW91cwotICAgb25lIHVwb24gYXJyaXZhbC4KLQotMTEuIEVYVEVSTkFMIEZJTEUg VFJBTlNGRVIgUFJPVE9DT0xTCi0KLSAgIFsgWzU4OF1Ub3AgXSBbIFs1ODldQ29udGVudHMgXSBb IFs1OTBdTmV4dCBdIFsgWzU5MV1QcmV2aW91cyBdCi0KLSAgIFNFQ1RJT04gQ09OVEVOVFMKLQot ICAxMS4xLiBbNTkyXUMtS2VybWl0IGFzIGFuIEV4dGVybmFsIFByb3RvY29sCi0gIDExLjIuIFs1 OTNdSW52b2tpbmcgRXh0ZXJuYWwgUHJvdG9jb2xzIGZyb20gQy1LZXJtaXQKLQotICAgVW5peCBD LUtlcm1pdCBjYW4gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIG90aGVyIGNvbW11bmljYXRp b25zCi0gICBzb2Z0d2FyZSBpbiB2YXJpb3VzIHdheXMuIEMtS2VybWl0IGNhbiBiZSBpbnZva2Vk IGZyb20gYW5vdGhlcgotICAgY29tbXVuaWNhdGlvbnMgcHJvZ3JhbSBhcyBhbiAiZXh0ZXJuYWwg cHJvdG9jb2wiLCBhbmQgQy1LZXJtaXQgY2FuIGFsc28KLSAgIGludm9rZSBvdGhlciBjb21tdW5p Y2F0aW9uIHNvZnR3YXJlIHRvIHBlcmZvcm0gZXh0ZXJuYWwgcHJvdG9jb2xzLgotCi0gICBUaGlz IHNvcnQgb2Ygb3BlcmF0aW9uIG1ha2VzIHNlbnNlIG9ubHkgd2hlbiB5b3UgYXJlIGRpYWxpbmcg b3V0IGZyb20KLSAgIHlvdXIgVW5peCBzeXN0ZW0gKG9yIG1ha2luZyBhIG5ldHdvcmsgY29ubmVj dGlvbiBmcm9tIGl0KS4gSWYgdGhlIFVuaXgKLSAgIHN5c3RlbSBpcyB0aGUgb25lIHlvdSBoYXZl IGRpYWxlZCBpbiB0bywgeW91IGRvbid0IG5lZWQgYW55IG9mIHRoZXNlCi0gICB0cmlja3MuIEp1 c3QgcnVuIHRoZSBkZXNpcmVkIHNvZnR3YXJlIG9uIHlvdXIgVW5peCBzeXN0ZW0gaW5zdGVhZCBv ZgotICAgS2VybWl0LiBXaGVuIGRpYWxpbmcgb3V0IGZyb20gYSBVbml4IHN5c3RlbSwgdGhlIGRp ZmZpY3VsdHkgaXMgZ2V0dGluZwotICAgdHdvIHByb2dyYW1zIHRvIHNoYXJlIHRoZSBzYW1lIGNv bW11bmljYXRpb24gZGV2aWNlIGluIHNwaXRlIG9mIHRoZQotICAgVW5peCBVVUNQIGxvY2tmaWxl IG1lY2hhbmlzbSwgd2hpY2ggd291bGQgbm9ybWFsbHkgcHJldmVudCBhbnkgc2hhcmluZywKLSAg IGFuZCBwcmV2ZW50aW5nIHRoZSBleHRlcm5hbCBwcm90b2NvbCBmcm9tIGNsb3NpbmcgKGFuZCB0 aGVyZWZvcmUKLSAgIGhhbmdpbmcgdXApIHRoZSBkZXZpY2Ugd2hlbiBpdCBleGl0cyBiYWNrIHRv IHRoZSBwcm9ncmFtIHRoYXQgaW52b2tlZAotICAgaXQuCi0KLTExLjEuIEMtS0VSTUlUIEFTIEFO IEVYVEVSTkFMIFBST1RPQ09MCi0KLSAgIFsgWzU5NF1Ub3AgXSBbIFs1OTVdQ29udGVudHMgXSBb IFs1OTZdU2VjdGlvbiBDb250ZW50cyBdIFsgWzU5N11OZXh0IF0KLQotICAgKFRoaXMgc2VjdGlv biBkZWxldGVkOyBzZWUgWzU5OF1Vc2luZyBDLUtlcm1pdCwgMm5kIEVkLCBDaGFwdGVyIDE0LikK LQotICAgInBjb21tIiBpcyBhIGdlbmVyYWwtcHVycG9zZSB0ZXJtaW5hbCBwcm9ncmFtIHRoYXQg cHJvdmlkZXMgZmlsZQotICAgdHJhbnNmZXIgY2FwYWJpbGl0aWVzIGl0c2VsZiAoWC0gYW5kIFlN T0RFTSB2YXJpYXRpb25zKSBhbmQgdGhlIGFiaWxpdHkKLSAgIHRvIGNhbGwgb24gZXh0ZXJuYWwg cHJvZ3JhbXMgdG8gZG8gZmlsZSB0cmFuc2ZlcnMgKFpNT0RFTSBhbmQgS2VybWl0LAotICAgZm9y IGV4YW1wbGUpLiBZb3UgY2FuIHRlbGwgcGNvbW0gdGhlIGNvbW1hbmQgdG8gc2VuZCBvciByZWNl aXZlIGEgZmlsZQotICAgd2l0aCBhbiBleHRlcm5hbCBwcm90b2NvbDoKLSAgICAgICAgICAgICAg ICAgICAgICAgIFNlbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVjZWl2ZQotICAgICAg ICBaTU9ERU0gICAgICAgICAgc3ogZmlsZW5hbWUgICAgICAgICAgICAgICAgICAgICByegotICAg ICAgICBLZXJtaXQgICAgICAgICAga2VybWl0IC1zIGZpbGVuYW1lICAgICAgICAgICAgICBrZXJt aXQgLXIKLQotICAgcGNvbW0gcnVucyBleHRlcm5hbCBwcm9ncmFtcyBmb3IgZmlsZSB0cmFuc2Zl ciBieSBtYWtpbmcgc3RkaW4gYW5kCi0gICBzdGRvdXQgcG9pbnQgdG8gdGhlIG1vZGVtIHBvcnQs IGFuZCB0aGVuIGV4ZWMtaW5nICIvYmluL3NoIC1jIHh4eCIKLSAgICh3aGVyZSB4eHggaXMgdGhl IGFwcHJvcHJpYXRlIGNvbW1hbmQpLiBIb3dldmVyLCBDLUtlcm1pdCBkb2VzIG5vdAotICAgdHJl YXQgc3RkaW4gYW5kIHN0ZG91dCBhcyB0aGUgY29tbXVuaWNhdGlvbiBkZXZpY2UgdW5sZXNzIHlv dSBpbnN0cnVjdAotICAgaXQ6Ci0KLQotICAgICAgICAgICAgICAgICAgICAgICAgU2VuZCAgICAg ICAgICAgICAgICAgICAgICAgICAgICBSZWNlaXZlCi0gICAgICAgIEtlcm1pdCAgICAgICAgICBr ZXJtaXQgLWwgMCAtcyBmaWxlbmFtZSAgICAgICAgIGtlcm1pdCAtbCAwIC1yCi0KLSAgIFRoZSAi LWwgMCIgb3B0aW9uIG1lYW5zIHRvIHVzZSBmaWxlIGRlc2NyaXB0b3IgMCBmb3IgdGhlIGNvbW11 bmljYXRpb24KLSAgIGRldmljZS4KLQotICAgSW4gZ2VuZXJhbCwgYW55IHByb2dyYW0gY2FuIHBh c3MgYW55IG9wZW4gZmlsZSBkZXNjcmlwdG9yIHRvIEMtS2VybWl0Ci0gICBmb3IgdGhlIGNvbW11 bmljYXRpb24gZGV2aWNlIGluIHRoZSAiLWwiIGNvbW1hbmQtbGluZSBvcHRpb24uIFdoZW4KLSAg IEtlcm1pdCBpcyBnaXZlbiBhIG51bWJlciBhcyB0aGUgYXJndW1lbnQgdG8gdGhlICItbCIgb3B0 aW9uLCBpdCBzaW1wbHkKLSAgIHVzZXMgaXQgYXMgYSBmaWxlIGRlc2NyaXB0b3IsIGFuZCBpdCBk b2VzIG5vdCBhdHRlbXB0IHRvIGNsb3NlIGl0IHVwb24KLSAgIGV4aXQuCi0KLSAgIEhlcmUncyBh bm90aGVyIGV4YW1wbGUsIGZvciBTZXlvbiAoYSBMaW51eCBjb21tdW5pY2F0aW9uIHByb2dyYW0p LgotICAgRmlyc3QgdHJ5IHRoZSB0ZWNobmlxdWUgYWJvdmUuIElmIHRoYXQgd29ya3MsIGZpbmU7 IG90aGVyd2lzZS4uLiBJZgotICAgU2V5b24gZG9lcyBub3QgZ2l2ZSB5b3UgYSB3YXkgdG8gYWNj ZXNzIGFuZCBwYXNzIGFsb25nIHRoZSBmaWxlCi0gICBkZXNjcmlwdG9yLCBidXQgaXQgc3RhcnRz IHVwIHRoZSBLZXJtaXQgcHJvZ3JhbSB3aXRoIGl0cyBzdGFuZGFyZCBpL28KLSAgIHJlZGlyZWN0 ZWQgdG8gaXRzIChTZXlvbidzKSBjb21tdW5pY2F0aW9ucyBmaWxlIGRlc2NyaXB0b3IsIHlvdSBj YW4KLSAgIGFsc28gZXhwZXJpbWVudCB3aXRoIHRoZSBmb2xsb3dpbmcgbWV0aG9kLCB3aGljaCB3 b3JrZWQgaGVyZSBpbiBicmllZgotICAgdGVzdHMgb24gU3VuT1MuIEluc3RlYWQgb2YgaGF2aW5n IFNleW9uIHVzZSAia2VybWl0IC1yIiBvciAia2VybWl0IC1zCi0gICBmaWxlbmFtZSIgYXMgaXRz IEtlcm1pdCBwcm90b2NvbCBjb21tYW5kcywgdXNlIHNvbWV0aGluZyBsaWtlIHRoaXMKLSAgIChl eGFtcGxlcyBhc3N1bWUgQy1LZXJtaXQgNi4wKToKLQotICAgRm9yIHNlcmlhbCBjb25uZWN0aW9u czoKLQotICBrZXJtaXQgLVlxUWwgMCAtciAgICAgICAgICAgICAgICAgICAgIDwtLSB0byByZWNl aXZlCi0gIGtlcm1pdCAtWXFRbCAwIC1zIGZpbGVuYW1lKHMpICAgICAgICAgPC0tIHRvIHNlbmQg b25lIG9yIG1vcmUgZmlsZXMKLQotICAgRm9yIFRlbG5ldCBjb25uZWN0aW9uczoKLQotICBrZXJt aXQgLVlxUUYgMCAtciAgICAgICAgICAgICAgICAgICAgIDwtLSB0byByZWNlaXZlCi0gIGtlcm1p dCAtWXFRRiAwIC1zIGZpbGVuYW1lKHMpICAgICAgICAgPC0tIHRvIHNlbmQgb25lIG9yIG1vcmUg ZmlsZXMKLQotICAgQ29tbWFuZCBsaW5lIG9wdGlvbnM6Ci0KLSAgWSAgICAtIHNraXAgZXhlY3V0 aW5nIHRoZSBpbml0IGZpbGUKLSAgUSAgICAtIHVzZSBmYXN0IGZpbGUgdHJhbnNmZXIgc2V0dGlu Z3MgKGRlZmF1bHQgaW4gOC4wKQotICBsIDAgIC0gdHJhbnNmZXIgZmlsZXMgdXNpbmcgZmlsZSBk ZXNjcmlwdG9yIDAgZm9yIGEgc2VyaWFsIGNvbm5lY3Rpb24KLSAgRiAwICAtIHRyYW5zZmVyIGZp bGVzIHVzaW5nIGZpbGUgZGVzY3JpcHRvciAwIGZvciBhIFRlbG5ldCBjb25uZWN0aW9uCi0gIHEg ICAgLSBxdWlldCAtIG5vIG1lc3NhZ2VzCi0gIHIgICAgLSByZWNlaXZlCi0gIHMgICAgLSBzZW5k Ci0KLTExLjIuIElOVk9LSU5HIEVYVEVSTkFMIFBST1RPQ09MUyBGUk9NIEMtS0VSTUlUCi0KLSAg IFsgWzU5OV1Ub3AgXSBbIFs2MDBdQ29udGVudHMgXSBbIFs2MDFdU2VjdGlvbiBDb250ZW50cyBd IFsKLSAgIFs2MDJdUHJldmlvdXMgXQotCi0gICAgIChUaGlzIHNlY3Rpb24gaXMgb2Jzb2xldGUs IGJ1dCBub3QgdG90YWxseSB1c2VsZXNzLiBTZWUgQ2hhcHRlciAxNAotICAgICBvZiBbNjAzXVVz aW5nIEMtS2VybWl0LCAybmQgRWRpdGlvbikuCi0KLSAgIEFmdGVyIHlvdSBoYXZlIG9wZW5lZCBh IGNvbW11bmljYXRpb24gbGluayB3aXRoIEMtS2VybWl0J3MgU0VUIExJTkUKLSAgIChTRVQgUE9S VCkgb3IgU0VUIEhPU1QgKFRFTE5FVCkgY29tbWFuZCwgQy1LZXJtaXQgbWFrZXMgaXRzIGZpbGUK LSAgIGRlc2NyaXB0b3IgYXZhaWxhYmxlIHRvIHlvdSBpbiB0aGUgXHYodHR5ZmQpIHZhcmlhYmxl IHNvIHlvdSBjYW4gcGFzcwotICAgaXQgYWxvbmcgdG8gb3RoZXIgcHJvZ3JhbXMgdGhhdCB5b3Ug UlVOIGZyb20gQy1LZXJtaXQuIEhlcmUsIGZvcgotICAgZXhhbXBsZSwgQy1LZXJtaXQgcnVucyBp dHNlbGYgYXMgYW4gZXh0ZXJuYWwgcHJvdG9jb2w6Ci0KLSAgQy1LZXJtaXQ+c2V0IG1vZGVtIHR5 cGUgaGF5ZXMKLSAgQy1LZXJtaXQ+c2V0IGxpbmUgL2Rldi9hY3UKLSAgQy1LZXJtaXQ+c2V0IHNw ZWVkIDI0MDAKLSAgQy1LZXJtaXQ+ZGlhbCA3NjU0MzIxCi0gICBDYWxsIGNvbXBsZXRlLgotICBD LUtlcm1pdD5lY2hvIFx2KHR0eWZkKQotICAgMwotICBDLUtlcm1pdD5ydW4ga2VybWl0IC1sIFx2 KHR0eWZkKQotCi0gICBPdGhlciBwcm9ncmFtcyB0aGF0IGFjY2VwdCBvcGVuIGZpbGUgZGVzY3Jp cHRvcnMgb24gdGhlIGNvbW1hbmQgbGluZQotICAgY2FuIGJlIHN0YXJ0ZWQgaW4gdGhlIHNhbWUg d2F5LgotCi0gICBZb3UgY2FuIGFsc28gdXNlIHlvdXIgc2hlbGwncyBpL28gcmVkaXJlY3Rpb24g ZmFjaWxpdGllcyB0byBhc3NpZ24KLSAgIEMtS2VybWl0J3Mgb3BlbiBmaWxlIGRlc2NyaXB0b3Ig KHR0eWZkKSB0byBzdGRpbiBvciBzdGRvdXQuIEZvcgotICAgZXhhbXBsZSwgb2xkIHZlcnNpb25z IG9mIHRoZSBVbml4IFpNT0RFTSBwcm9ncmFtcywgc3ogYW5kIHJ6LCB3aGVuCi0gICBpbnZva2Vk IGFzIGV4dGVybmFsIHByb3RvY29scywgZXhwZWN0IHRvIGZpbmQgdGhlIGNvbW11bmljYXRpb24g ZGV2aWNlCi0gICBhc3NpZ25lZCB0byBzdGRpbiBhbmQgc3Rkb3V0IHdpdGggbm8gb3B0aW9uIGZv ciBzcGVjaWZ5aW5nIGFueSBvdGhlcgotICAgZmlsZSBkZXNjcmlwdG9yIG9uIHRoZSBzeiBvciBy eiBjb21tYW5kIGxpbmUuIEhvd2V2ZXIsIHlvdSBjYW4gc3RpbGwKLSAgIGludm9rZSBzeiBhbmQg cnogYXMgZXh0ZXJpb3IgcHJvdG9jb2xzIGZyb20gQy1LZXJtaXQgaWYgeW91ciBjdXJyZW50Ci0g ICBzaGVsbCAoJFNIRUxMIHZhcmlhYmxlKSBpcyBrc2ggKHRoZSBLb3JuIHNoZWxsKSBvciBiYXNo ICh0aGUKLSAgIEJvdXJuZS1BZ2FpbiBzaGVsbCksIHdoaWNoIGFsbG93cyBhc3NpZ25tZW50IG9m IGFyYml0cmFyeSBmaWxlCi0gICBkZXNjcmlwdG9ycyB0byBzdGRpbiBhbmQgc3Rkb3V0OgotCi0g IEMtS2VybWl0PiBydW4gcnogPCZcdih0dHlmZCkgPiZcdih0dHlmZCkKLQotICAgb3I6Ci0KLSAg Qy1LZXJtaXQ+IHJ1biBzeiBvb2ZhLnppcCA8Jlx2KHR0eWZkKSA+Jlx2KHR0eWZkKQotCi0gICBJ biB2ZXJzaW9uIDVBKDE5MCkgYW5kIGxhdGVyLCB5b3UgY2FuIHVzZSBDLUtlcm1pdCdzIFJFRElS RUNUIGNvbW1hbmQsCi0gICBpZiBpdCBpcyBhdmFpbGFibGUgaW4geW91ciB2ZXJzaW9uIG9mIEMt S2VybWl0LCB0byBhY2NvbXBsaXNoIHRoZSBzYW1lCi0gICB0aGluZyB3aXRob3V0IGdvaW5nIHRo cm91Z2ggdGhlIHNoZWxsOgotCi0gIEMtS2VybWl0PiByZWRpcmVjdCByegotCi0gICBvcjoKLQot ICBDLUtlcm1pdD4gcmVkaXJlY3Qgc3ogb29mYS56aXAKLQotICAgQSBjb21wbGV0ZSBzZXQgb2Yg cnosc3oscmIsc2Iscngsc3ggbWFjcm9zIGZvciBVbml4IEMtS2VybWl0IGlzIGRlZmluZWQKLSAg IGluIHRoZSBmaWxlIGNrdXJ6c3ouaW5pLiBJdCBhdXRvbWF0aWNhbGx5IGNob29zZXMgdGhlIGJl c3QgcmVkaXJlY3Rpb24KLSAgIG1ldGhvZCAoYnV0IGlzIHJlZHVuZGFudCBzaW5jZSBDLUtlcm1p dCA2LjAsIHdoaWNoIG5vdyBoYXMgYnVpbHQtaW4KLSAgIHN1cHBvcnQgZm9yIGV4dGVybmFsIHBy b3RvY29scyB2aWEgaXRzIFNFVCBQUk9UT0NPTCBjb21tYW5kKS4KLQotICAgTm90ZSB0aGF0IGV4 dGVybmFsIHByb3RvY29scyBjYW4gYmUgdXNlZCBvbiBDLUtlcm1pdCBTRVQgTElORSBvciBTRVQK LSAgIEhPU1QgY29ubmVjdGlvbnMgb25seSBpZiB0aGV5IG9wZXJhdGUgdGhyb3VnaCBzdGFuZGFy ZCBpbnB1dCBhbmQKLSAgIHN0YW5kYXJkIG91dHB1dC4gSWYgdGhleSBvcGVuIHRoZWlyIG93biBj b25uZWN0aW9ucywgS2VybWl0IGNhbid0Ci0gICByZWRpcmVjdCB0aGVtIG92ZXIgaXRzIG93biBj b25uZWN0aW9uLgotCi0xMi4gU0VDVVJJVFkKLQotICAgWyBbNjA0XVRvcCBdIFsgWzYwNV1Db250 ZW50cyBdIFsgWzYwNl1OZXh0IF0gWyBbNjA3XVByZXZpb3VzIF0KLQotICAgQXMgb2YgdmVyc2lv biA3LjAsIEMtS2VybWl0IHN1cHBvcnRzIGEgd2lkZSByYW5nZSBvZiBzZWN1cml0eSBvcHRpb25z Ci0gICBmb3IgYXV0aGVudGljYXRpb24gYW5kIGVuY3J5cHRpb246IEtlcmJlcm9zIDQsIEtlcmJl cm9zIDUgLyBHU1NBUEksCi0gICBTU0wvVExTLCBhbmQgU1JQLiBTZWUgdGhlIHNlcGFyYXRlIFs2 MDhdc2VjdXJpdHkgZG9jdW1lbnQgZm9yIGRldGFpbHMuCi0KLTEzLiBNSVNDRUxMQU5FT1VTIFVT RVIgUkVQT1JUUwotCi0gICBbIFs2MDldVG9wIF0gWyBbNjEwXUNvbnRlbnRzIF0gWyBbNjExXU5l eHQgXSBbIFs2MTJdUHJldmlvdXMgXQotCi1EYXRlOiBUaHUsIDEyIE1hciA5MiAxOjU5OjI1IE1F WgotRnJvbTogV2FsdGVyIE1lY2t5IDx3YWx0ZXJAcmVudC1hLWd1cnUuZGU+Ci1TdWJqZWN0OiBI ZWxwLlVuaXguc3cKLVRvOiBzdnI0QHBjc2JzdC5wY3MuY29tLCBzb3VyY2VAdXNsLmNvbQotCi1Q Uk9EVUNUOiAgICAgICAgVW5peAotUkVMRUFTRTogICAgICAgIERlbGwgU1ZSNCBWMi4xIChpcyBV U0wgVjMuMCkKLU1BQ0hJTkU6ICAgICAgICBBVC0zODYKLVBBVEhOQU1FOiAgICAgICAvdXNyL2xp Yi9saWJjLnNvLjEKLSAgICAgICAgICAgICAgICAvdXNyL2Njcy9saWIvbGliYy5hCi1BQlNUUkFD VDogICAgICAgRnVuY3Rpb24gdHR5bmFtZSgpIGRvZXMgbm90IGNsb3NlIGl0cyBmaWxlIGRlc2Ny aXB0b3IKLURFU0NSSVBUSU9OOgotICAgICAgICB0dHluYW1lKDNDKSBvcGVucyAvZGV2IGJ1dCBu ZXZlciBjbG9zZXMgaXQuIFNvIGlmIGl0IGlzIGNhbGxlZAotICAgICAgICBvZnRlbiBlbm91Z2gg dGhlIG9wZW4oMikgaW4gdHR5bmFtZSgpIGZhaWxzLiBCZWNhdXNlIHRoZSBicm9rZW4KLSAgICAg ICAgdHR5bmFtZSgpIGlzIGluIHRoZSBzaGFyZWQgbGliIHRvbyBhbGwgcHJvZ3JhbXMgdXNpbmcg aXQgY2FuCi0gICAgICAgIGZhaWwgaWYgdGhleSBjYWxsIGl0IG9mdGVuIGVub3VnaC4gT25lIGlt cG9ydGFudCBwcm9ncmFtIGlzCi0gICAgICAgIHV1Y2ljbyB3aGljaCBjYWxscyB0dHluYW1lIGZv ciBldmVyeSBmaWxlIGl0IHRyYW5zZmVycy4KLQotCi0gICBIZXJlIGlzIGEgbGl0dGxlIHRlc3Qg cHJvZ3JhbSBpZiB5b3VyIHN5c3RlbSBoYXMgdGhlIGJ1ZzoKLQotI2luY2x1ZGUgPHN0ZGxpYi5o PgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci1tYWluKCkgewotICAgIGludCBpID0gMDsKLSAgICB3aGls ZSAodHR5bmFtZSgwKSAhPSBOVUxMKQotICAgICAgaSsrOwotICAgIHBlcnJvcigidHR5bmFtZSIp OwotICAgIHByaW50ZigiaT0lZFxuIiwgaSk7Ci19Ci0KLSAgIElmIHRoaXMgcHJvZ3JhbSBydW5z IGxvbmdlciB0aGFuIHNvbWUgc2Vjb25kcyB5b3UgZG9uJ3QgaGF2ZSB0aGUgYnVnLgotCi0gICBX T1JLQVJPVU5EOiBOb25lIEZJWDogVmVyeSBlYXN5IGlmIHlvdSBoYXZlIHNvdXJjZSBjb2RlLgot Ci0gICBBbm90aGVyIHVzZXIgcmVwb3J0cyBzb21lIG1vcmUgZXhwbGljaXQgc3ltcHRvbXMgYW5k IHJlY292ZXJpZXM6Ci0KLT4gV2hhdCBoYXBwZW5zIGlzIHdoZW4gaW52b2tpbmcgY2tlcm1pdCB3 ZSBnZXQgb25lIG9mIHRoZSBmb2xsb3dpbmcKLT4gZXJyb3IgbWVzc2FnZXM6Ci0+ICAgWW91IG11 c3Qgc2V0IGxpbmUKLT4gICBOb3QgYSB0dHkKLT4gICBObyBtb3JlIHByb2Nlc3Nlcy4KLT4gT25l IG9mIHRoZSBmb2xsb3dpbmcgdGhyZWUgYWN0aW9ucyBjbGVhcnMgdGhlIHByb2JsZW06Ci0+ICAg c2h1dGRvd24gLXkgLWcwIC1pNgotPiAgIGtpbGwgLTkgdGhlIHR0eW1vbiB3aXRoIHRoZSBoaWdo ZXN0IFBJRAotPiAgIEludm9rZSBzeXNhZG0gYW5kIGRpc2FibGUgdGhlbiBlbmFibGUgdGhlIGxp bmUgeW91IHdhbnQgdG8gdXNlLgotPiBUdXJuaW5nIG9mZiByZXNwYXduIG9mIHNhYyAtdCAzMDAg YW5kIGdvaW5nIHRvIGdldHR5J3MgYW5kIHV1Z2V0dHkncwotPiBkb2VzIG5vdCBoZWxwLgotPgot PiBBbHNvIEMtS2VybWl0IHJlcG9ydHMgIj90aW1lZCBvdXQgY2xvc2luZyAvZGV2L3R0eXh4Ii4K LT4gSWYgdGhpcyBoYXBwZW5zIGFsbCBpcyB3ZWxsLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KLQotICAgKE5vdGU6IHRoZSBmb2xsb3dpbmcgcHJvYmxlbSBhbHNvIG9jY3VycyBv biBTR0kgYW5kIHByb2JhYmx5IG1hbnkgb3RoZXIKLSAgIFVuaXggc3lzdGVtcyk6Ci0KLSAgIEZy b206IEphbWVzIFNwYXRoIDxzcGF0aEBqaHVuaXguaGNmLmpodS5lZHU+Ci0gICBUbzogSW5mby1L ZXJtaXQtUmVxdWVzdEBjdW5peGYuY2MuY29sdW1iaWEuZWR1Ci0gICBEYXRlOiBXZWQsIDkgU2Vw IDE5OTIgMjA6MjA6MjggLTA0MDAKLSAgIFN1YmplY3Q6IEMtS2VybWl0IHZzIHV1Z2V0dHkgKG9y IGluaXQpIG9uIFNwZXJyeSA1MDAwCi0KLSAgIFdlIGhhdmUgc3VjY2Vzc2Z1bGx5IGNvbXBpbGVk IHRoZSBhYm92ZSByZWxlYXNlIG9uIGEgVW5pc3lzL1NwZXJyeQotICAgNTAwMC85NS4gV2UgdXNl ZCB0aGUgc3lzNXIzIG9wdGlvbiwgcmF0aGVyIHRoYW4gc3lzNXIyIHNpbmNlIHdlIGhhdmUKLSAg IFZSMyBydW5uaW5nIG9uIG91ciBzeXN0ZW0uIEluIG9yZGVyIHRvIGFsbG93IGRpYWxvdXQgYWNj ZXNzIHRvCi0gICBub24tc3VwZXJ1c2Vycywgd2UgaGFkIHRvIGRvICJjaG1vZCA2NjYgL2Rldi90 dHkjIyMsIHdoZXJlIGl0IGhhZCBiZWVuCi0gICAtcnctLXctLXctIChvd25lZCBieSB1dWNwKSwg YW5kIHRvIGRvICJjaG1vZCArdyAvdXNyL3Nwb29sL2xvY2tzIi4gV2UKLSAgIGhhdmUgZG9uZSB0 ZXh0IGFuZCBiaW5hcnkgZmlsZSB0cmFuc2ZlcnMgdGhyb3VnaCBsb2NhbCBhbmQgcmVtb3RlCi0g ICBjb25uZWN0aW9ucy4KLQotICAgVGhlIHByb2JsZW0gY29uY2VybmluZyB1dWNwIG93bmVyc2hp cCBhbmQgcGVybWlzc2lvbnMgaXMgd29yc2UgdGhhbiBJCi0gICB0aG91Z2h0IGF0IGZpcnN0LiBB cHBhcmVudGx5IGluaXQgb3IgdXVnZXR0eSBjaGFuZ2VzIHRoZSBmaWxlCi0gICBwZXJtaXNzaW9u cyBhZnRlciBlYWNoIHNlc3Npb24uIFNvIEkgd3JvdGUgdGhlIGZvbGxvd2luZyBDIHByb2dyYW0g dG8KLSAgIG9wZW4gYSBzZXQgb2YgcmVxdWVzdGVkIHR0eSBsaW5lcy4gSSBydW4gdGhpcyBmb3Ig YW55IHJlcXVpcmVkIG91dGdvaW5nCi0gICBsaW5lIHByaW9yIHRvIGEgS2VybWl0IHNlc3Npb24u Ci0KLSAgIC0tLS0tLSBjdXQgaGVyZSAtLS0tLS0tCi0vKiBvcGVudHR5LmMgLS0gZm9yY2UgYWxs b3cgcmVhZCBvbiB0dHkgbGluZXMgZm9yIG1vZGVtIGkvbyAqLwotLyogaWRlYSBmcm9tOiByZXN0 cmljdC5jIC0tIFN5c3RlbSA1IEFkbWluIGJvb2sgVGhvbWFzL0ZhcnJvdyBwLiA2MDUgKi8KLS8q IC9qZXMgamltIHNwYXRoIHtzcGF0aEBqaHVuaXguaGNqLmpodS5lZHUgfSAqLwotLyogMDgtU2Vw LTkyIE5PIENPUFlSSUdIVC4gKi8KLS8qIHRoaXMgbXVzdCBiZSBzdWlkIHRvIG9wZW4gb3RoZXIg dHR5IGxpbmVzICovCi0KLS8qICNkZWZpbmUgREVCVUcgKi8KLSNkZWZpbmUgVFRZICIvZGV2L3R0 eSIKLSNkZWZpbmUgTE9LICIvdXNyL3Nwb29sL2xvY2tzL0xDSy4udHR5IgotI2luY2x1ZGUgPHN0 ZGlvLmg+Ci0KLS8qIGFsbG93YWJsZSBsaW5lczogKi8KLSNkZWZpbmUgVE9UQUxfTElORVMgMwot c3RhdGljIGNoYXIgYWxsb3dhYmxlW1RPVEFMX0xJTkVTXVs0XSA9IHsgIjIwMCIsICIyMDEiLCAi MzAwIiB9Owotc3RhdGljIGludCB0b3RhbD1UT1RBTF9MSU5FUzsKLWludCBhbGxvdzsKLQotLyog c3RhdGVzOiAqLwotI2RlZmluZSBUVFlfVU5ERUYgMAotI2RlZmluZSBUVFlfTE9DSyAgMQotI2Rl ZmluZSBUVFlfT0tBWSAgMgotCi1tYWluKGFyZ2MsIGFyZ3YpCi1pbnQgYXJnYzsgY2hhciAqYXJn dltdOyB7Ci0gICAgY2hhciBkZXZpY2VbNTEyXTsKLSAgICBjaGFyIGxvY2tkZXZbNTEyXTsKLSAg ICBpbnQgaTsKLSAgICBpZiAoYXJnYyA9PSAxKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAi dXNhZ2U6IG9wZW4gMjAwIFsuLi5dXG4iKTsKLSAgICB9Ci0gICAgd2hpbGUgKC0tYXJnYyA+IDAg JiYgKCorK2FyZ3YpICE9IE5VTEwgKSB7Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgZnByaW50Zihz dGRlcnIsICJUUllJTkc6ICVzJXNcbiIsIFRUWSwgKmFyZ3YpOwotI2VuZGlmCi0gICAgICAgIHNw cmludGYoZGV2aWNlLCAiJXMlcyIsIFRUWSwgKmFyZ3YpOwotICAgICAgICBzcHJpbnRmKGxvY2tk ZXYsICIlcyVzIiwgTE9LLCAqYXJndik7Ci0gICAgICAgIGFsbG93ID0gVFRZX1VOREVGOyBpID0g MDsKLSAgICAgICAgd2hpbGUgKGkgPD0gdG90YWwpIHsgLyogbG9vayBhdCBhbGwgZGVmaW5lZCBs aW5lcyAqLwotI2lmZGVmIERFQlVHCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkxPQ0tG SUxFPyAlcz9cbiIsIGxvY2tkZXYpOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAoYWNjZXNzKGxv Y2tkZXYsIDAwKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgYWxsb3c9VFRZX0xPQ0s7Ci0gICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0jaWZkZWYgREVCVUcKLSAgICAgICAg ICAgIGZwcmludGYoc3RkZXJyLCAiRE9FUzolcz09JXM/XG4iLCBhbGxvd2FibGVbaV0sICphcmd2 KTsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKHN0cmNtcChhbGxvd2FibGVbaV0sICphcmd2KSA9 PSAwKQotICAgICAgICAgICAgICBhbGxvdz1UVFlfT0tBWTsKLSAgICAgICAgICAgIGkrKzsKLSAg ICAgICAgfQotI2lmZGVmIERFQlVHCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiYWxsb3c9JWRc biIsIGFsbG93KTsKLSNlbmRpZgotICAgICAgICBzd2l0Y2ggKGFsbG93KSB7Ci0gICAgICAgICAg Y2FzZSBUVFlfVU5ERUY6Ci0gICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJvcGVuOiBub3Qg YWxsb3dlZCBvbiAlc1xuIiwgKmFyZ3YpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg Y2FzZSBUVFlfTE9DSzoKLSAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIm9wZW46IGRldmlj ZSBsb2NrZWQ6ICVzXG4iLCBsb2NrZGV2KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg IGNhc2UgVFRZX09LQVk6Ci0gICAgICAgICAgICAvKiBhdHRlbXB0IHRvIGNoYW5nZSBtb2RlIG9u IGRldmljZSAqLwotICAgICAgICAgICAgaWYgKGNobW9kIChkZXZpY2UsIDAwNjY2KSA8IDApCi0g ICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIm9wZW46IGNhbm5vdCBjaG1vZCBvbiAlc1xu IiwgZGV2aWNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg ICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJvcGVuOiBGQVVMVFxuIik7Ci0gICAgICAgIH0KLSAg ICB9Ci0gICAgZXhpdCAoMCk7Ci19Ci0KLTE0LiBUSElSRC1QQVJUWSBEUklWRVJTCi0KLSAgIFsg WzYxM11Ub3AgXSBbIFs2MTRdQ29udGVudHMgXSBbIFs2MTVdTmV4dCBdIFsgWzYxNl1QcmV2aW91 cyBdCi0KLSAgIFVuaXggdmVyc2lvbnMsIGVzcGVjaWFsbHkgdGhvc2UgZm9yIFBDcyAoU0NPLCBV bml4d2FyZSwgZXRjKSBtaWdodCBiZQotICAgYXVnbWVudGVkIGJ5IHRoaXJkLXBhcnR5IGNvbW11 bmljYXRpb24tYm9hcmQgZHJpdmVycyBmcm9tIERpZ2lib2FyZCwKLSAgIFN0YWxsaW9uLCBldGMu IFRoZXNlIGNhbiBzb21ldGltZXMgY29tcGxpY2F0ZSBtYXR0ZXJzIGZvciBLZXJtaXQKLSAgIGNv bnNpZGVyYWJseSBzaW5jZSBLZXJtaXQgaGFzIG5vIHdheSBvZiBrbm93aW5nIHRoYXQgaXQgaXMg Z29pbmcKLSAgIHRocm91Z2ggYSBwb3NzaWJseSBub25zdGFuZGFyZCBkcml2ZXIuIFZhcmlvdXMg ZXhhbXBsZXMgYXJlIGxpc3RlZCBpbgotICAgdGhlIGVhcmxpZXIgc2VjdGlvbnMgb2YgdGhpcyBk b2N1bWVudDsgc2VhcmNoIGZvciBTdGFsbGlvbiwgRGlnaWJvYXJkLAotICAgZXRjLiBBZGRpdGlv bmFsbHk6Ci0KLSAgICAgKiBUaGUgU3RhbGxpb24gVGVjaG5vbG9naWVzIEVhc3lDb25uZWN0aW9u IHNlcmlhbCBib2FyZCBkcml2ZXIgZG9lcwotICAgICAgIG5vdCBhbHdheXMgcmVwb3J0IHRoZSBz dGF0ZSBvZiBEU1IgYXMgbG93LiBGcm9tIFN0YWxsaW9uIChPY3RvYmVyCi0gICAgICAgMTk5Nyk6 ICJVbmZvcnR1bmF0ZWx5LCB0aGlzIGlzIGEgYnVnIGluIG91ciBkcml2ZXIuIFdlIGhhdmUKLSAg ICAgICBpbXBsZW1lbnRlZCBhbGwgb2YgdGhlIG90aGVyIFRJT01DIGZ1bmN0aW9ucywgZWcgRFRS LCBEQ0QsIFJUUyBhbmQKLSAgICAgICBDVFMsIGJ1dCBub3QgRFNSLiBPdXIgZHJpdmVyIHNob3Vs ZCByZXBvcnQgdGhlIGFjdHVhbCBzdGF0ZSBvZiBEU1IKLSAgICAgICBvbiB0aG9zZSBvZiBvdXIg Y2FyZHMgdGhhdCBoYXZlIGEgRFNSIHNpZ25hbC4gVGhhdCB0aGUgZHJpdmVyCi0gICAgICAgYWx3 YXlzIHJlcG9ydHMgRFNSIGFzIG5vdCBhc3NlcnRlZCAoMCksIGlzIGEgYnVnIGluIHRoZSBkcml2 ZXIuIFRoZQotICAgICAgIGRyaXZlciBzaG91bGQgYmUgZWl0aGVyIHJlcG9ydGluZyB0aGUgc3Rh dGUgb2YgRFNSIGNvcnJlY3RseSBvbgotICAgICAgIHRob3NlIGNhcmRzIHRoYXQgc3VwcG9ydCBE U1Igb3IgYXMgYWx3YXlzIGFzc2VydGVkICgxKSBvbiB0aG9zZQotICAgICAgIGNhcmRzIHRoYXQg ZG8gbm90IGhhdmUgYSBEU1Igc2lnbmFsLiBUaGlzIHdpbGwgYmUgZml4ZWQgaW4gYSBmdXR1cmUK LSAgICAgICB2ZXJzaW9uIG9mIG91ciBkcml2ZXJzOyBhdCB0aGlzIHRpbWUgSSBjYW5ub3Qgc2F5 IHdoZW4gdGhpcyB3aWxsCi0gICAgICAgYmUuIiBBbmQgbGF0ZXIsICJBcyBmYXIgYXMgSSBjYW4g dGVsbCwgd2UgZG9uJ3Qgc3VwcG9ydCB0aGUKLSAgICAgICB0ZXJtaW9zL3Rlcm1pb3ggaW9jdGxz IHRoYXQgcmVsYXRlIHNwZWNpZmljYWxseSB0byBEU1IgYW5kIFJJOyBhbGwKLSAgICAgICB0aGUg cmVzdCBhcmUgc3VwcG9ydGVkLiBUaGlzIHdpbGwsIGFzIEkgbWVudGlvbmVkIGVhcmxpZXIsIGJl IGZpeGVkCi0gICAgICAgaW4gdGhlIG5leHQgcmVsZWFzZSBvZiBvdXIgQVRBIHNvZnR3YXJlLiIK LSAgICAgICAtIFdvcmxkIFdpZGUgRXNjYWxhdGlvbiBTdXBwb3J0LCBTdGFsbGlvbiBUZWNobm9s b2dpZXMsIFRvb3dvbmcKLSAgICAgICBRTEQsIFs2MTddc3VwcG9ydEBzdGFsbGlvbi5vei5hdS4K LQotICAgTGF0ZXIgKERlY2VtYmVyIDE5OTcsIGZyb20gdGhlIHNhbWUgc291cmNlKToKLQotICAg ICAqIFdlIGhhdmUgbm93IHJlbGVhc2VkIGEgbmV3IHZlcnNpb24gb2YgdGhlIEFUQSBzb2Z0d2Fy ZSwgdmVyc2lvbgotICAgICAgIDUuNC4wLiBUaGlzIHZlcnNpb24gZml4ZXMgdGhlIHByb2JsZW0g d2l0aCB0aGUgc3RhdGVzIG9mIHRoZSBEU1IKLSAgICAgICBhbmQgUkkgc2lnbmFscyBhbmQgaG93 IHRoZXkgd2VyZSBiZWluZyByZXBvcnRlZCBieSB0aGUgZHJpdmVyLiBUaGlzCi0gICAgICAgaXMg dGhlIHByb2JsZW0gdGhhdCB5b3UgcmVwb3J0ZWQgaW4gT2N0b2Jlci4gVGhlIERTUiBzaWduYWwg aXMKLSAgICAgICByZXBvcnRlZCBjb3JyZWN0bHkgb24gdGhvc2UgY2FyZHMgdGhhdCBzdXBwb3J0 IHRoZSBEU1Igc2lnbmFsLCBzdWNoCi0gICAgICAgYXMgdGhlIGVhcmx5IHJldmlzaW9uIG9mIHRo ZSBFYXN5SU8gY2FyZCBhbmQgdGhlIEVhc3lDb25uZWN0aW9uIDhENAotICAgICAgIHBhbmVsLCBh bmQgYXMgYWx3YXlzIGFzc2VydGVkIG9uIHRob3NlIGNhcmRzIHRoYXQgZG8gbm90IHN1cHBvcnQK LSAgICAgICB0aGUgRFNSIHNpZ25hbCBpbiB0aGUgaGFyZHdhcmUuIFRoZSBuZXcgZHJpdmVyIGlz IGF2YWlsYWJsZSBmcm9tCi0gICAgICAgb3VyIFdlYiBzaXRlLCBbNjE4XXd3dy5zdGFsbGlvbi5j b20sIGluIHRoZSAvZHJpdmVycy9hdGE1L1VuaXhXYXJlCi0gICAgICAgZGlyZWN0b3J5LgotCi0g ICBbIFs2MTldVG9wIF0gWyBbNjIwXUNvbnRlbnRzIF0gWyBbNjIxXUMtS2VybWl0IEhvbWUgXSBb IFs2MjJdQy1LZXJtaXQKLSAgIDguMCBPdmVydmlldyBdIFsgWzYyM11LZXJtaXQgSG9tZSBdCi0g ICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwotCi0gICAgIEMtS2VybWl0IDguMCBVbml4IEhpbnRzIGFuZCBUaXBzIC8g WzYyNF1UaGUgS2VybWl0IFByb2plY3QgLwotICAgWzYyNV1Db2x1bWJpYSBVbml2ZXJzaXR5IC8g WzYyNl1rZXJtaXRAY29sdW1iaWEuZWR1Ci0KLVJlZmVyZW5jZXMKLQotICAgMS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUvCi0gICAyLiBtYWlsdG86a2VybWl0QGNvbHVtYmlhLmVkdQotICAgMy4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSAgIDQuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9rOTUuaHRtbAotICAgNS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotICAgNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2Nrc2NyaXB0cy5odG1sCi0gICA3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY3VycmVudC5odG1sCi0gICA4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvd2hh dHNuZXcuaHRtbAotICAgOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2ZhcS5odG1s Ci0gIDEwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc3VwcG9ydC5odG1sCi0gIDEx LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvCi0gIDEyLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS8KLSAgMTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bAotICAxNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZGFpbHkuaHRtbAotICAx NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZGFpbHkuaHRtbAotICAxNi4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZGFpbHkuaHRtbAotICAxNy4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotICAxOC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sCi0gIDE5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1dHV0b3IuaHRtbAotICAyMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3gxCi0gIDIxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjeDIKLSAgMjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vi d3IuaHRtbCN4MwotICAyMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3g0Ci0gIDI0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwj eDUKLSAgMjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4Ngot ICAyNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3g3Ci0gIDI3 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDgKLSAgMjguIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4OQotICAyOS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gxMAotICAzMC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gxMQotICAzMS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gxMgotICAzMi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gxMwotICAzMy4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gxNAotICAzNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjMKLSAgMzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xOAotICAzNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3gzLjE5Ci0gIDM3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDMuMQotICAzOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3gzLjIKLSAgMzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCN4My43Ci0gIDQwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjeDMuNgotICA0MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWJ3ci5odG1sI3RvcAotICA0Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3 ci5odG1sI2NvbnRlbnRzCi0gIDQzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjeDIKLSAgNDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3Iu aHRtbCN4MS4xCi0gIDQ1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0 bWwjeDEuMgotICA0Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I3gxLjMKLSAgNDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4 MS40Ci0gIDQ4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMu MwotICA0OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjEK LSAgNTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yCi0g IDUxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNwotICA1 Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sCi0gIDUzLiBtYWls dG86a2VybWl0LXN1cHBvcnRAY29sdW1iaWEuZWR1Ci0gIDU0LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gIDU1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSAgNTYuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MS4yCi0gIDU3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2s2MG1hbnVhbC5odG1sCi0gIDU4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwKLSAgNTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0ODAuaHRtbAotICA2MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ5MC5odG1sCi0gIDYxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjdG9wCi0gIDYyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0 bWwjY29udGVudHMKLSAgNjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3Iu aHRtbCN4MQotICA2NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I3gxLjMKLSAgNjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4 MS4xCi0gIDY2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc3VwcG9ydC5odG1sCi0g IDY3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gIDY4 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSAg NjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MQotICA3MC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gxLjQKLSAgNzEuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MS4yCi0gIDcyLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gIDczLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSAgNzQuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MQotICA3NS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gxLjMKLSAgNzYuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKLSAgNzcuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwotICA3OC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzCi0gIDc5LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDEKLSAgODAuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKLSAgODEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwotICA4Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWJ3ci5odG1sI3g0Ci0gIDgzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDIKLSAgODQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCN4My4wCi0gIDg1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjeDMuMQotICA4Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWJ3ci5odG1sI3gzLjIKLSAgODcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vi d3IuaHRtbCN4My4zCi0gIDg4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjeDMuNAotICA4OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3gzLjUKLSAgOTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCN4My42Ci0gIDkxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwj eDMuNwotICA5Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gz LjgKLSAgOTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My45 Ci0gIDk0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMTAK LSAgOTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xMQot ICA5Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjEyCi0g IDk3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMTMKLSAg OTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xNAotICA5 OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjE1Ci0gMTAw LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMTYKLSAxMDEu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xNwotIDEwMi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjE4Ci0gMTAzLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMTkKLSAxMDQuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yMAotIDEwNS4gaHR0 cDovL3d3dy5mYXFzLm9yZy8KLSAxMDYuIGh0dHA6Ly9hcGxhd3JlbmNlLmNvbS9Vbml4YXJ0L25l d3RvdW5peC5odG1sCi0gMTA3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjeDMKLSAxMDguIG1haWx0bzprZXJtaXQtc3VwcG9ydEBjb2x1bWJpYS5lZHUKLSAxMDku IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zdXBwb3J0Lmh0bWwKLSAxMTAuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKLSAxMTEuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwotIDExMi4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzCi0gMTEzLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMQotIDExNC4gaHR0cDovL3d3dy5w Y3VuaXguY29tLwotIDExNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3gzLjAuMQotIDExNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3gzLjAuMgotIDExNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3gzLjAuMwotIDExOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3gzLjAuNAotIDExOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3gzLjAuNQotIDEyMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3gzLjAuNgotIDEyMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3RvcAotIDEyMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I2NvbnRlbnRzCi0gMTIzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0 bWwjeDMuMAotIDEyNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I3gzLjAuMgotIDEyNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I3RvcAotIDEyNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2Nv bnRlbnRzCi0gMTI3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwj eDMuMAotIDEyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gz LjAuMwotIDEyOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gz LjAuMQotIDEzMC4gaHR0cDovL3d3dy5saW5tb2RlbXMub3JnLwotIDEzMS4gaHR0cDovL3d3dy5t aWNyb3NvZnQuY29tL2h3ZGV2L3BsYXRmb3JtL1BDZGVzaWduL0xSL2RlZmF1bHQuYXNwCi0gMTMy LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gMTMzLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSAxMzQu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4wCi0gMTM1LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMC40Ci0gMTM2LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMC4yCi0gMTM3LiBo dHRwOi8vd3d3LmlkaXIubmV0L35ncm9taXRrYy93aW5tb2RlbS5odG1sCi0gMTM4LiBodHRwOi8v d3d3LmRpZ2kuY29tLwotIDEzOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3 ci5odG1sI3RvcAotIDE0MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI2NvbnRlbnRzCi0gMTQxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjeDMuMAotIDE0Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3gzLjAuNQotIDE0My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3gzLjAuMwotIDE0NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3RvcAotIDE0NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I2NvbnRlbnRzCi0gMTQ2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0 bWwjeDMuMAotIDE0Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I3gzLjAuNgotIDE0OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I3gzLjAuNAotIDE0OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I3RvcAotIDE1MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2Nv bnRlbnRzCi0gMTUxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwj eDMuMAotIDE1Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gz LjAuNQotIDE1My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3Rv cAotIDE1NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRl bnRzCi0gMTU1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMK LSAxNTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yCi0g MTU3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMAotIDE1 OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjEuMQotIDE1 OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjEuMgotIDE2 MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjEuMwotIDE2 MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjEuNAotIDE2 Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjEuNQotIDE2 My4gaHR0cDovL3d3dy5lbWVyc29uLmVtb3J5LmVkdS9zZXJ2aWNlcy9haXgtZmFxLwotIDE2NC4g aHR0cDovL3d3dy5mYXFzLm9yZy9mYXFzL2J5LW5ld3Nncm91cC9jb21wL2NvbXAudW5peC5haXgu aHRtbAotIDE2NS4gaHR0cDovL3d3dy5jaXMub2hpby1zdGF0ZS5lZHUvaHlwZXJ0ZXh0L2ZhcS91 c2VuZXQvYWl4LWZhcS90b3AuaHRtbAotIDE2Ni4gaHR0cDovL2FpeHBkc2xpYi5zZWFzLnVjbGEu ZWR1LwotIDE2Ny4gaHR0cDovL3d3dy5yb290dmcubmV0KEFJWGhpc3RvcnkpLwotIDE2OC4gZnRw Oi8vcnRmbS5taXQuZWR1L3B1Yi91c2VuZXQvbmV3cy5hbnN3ZXJzL2FpeC1mYXEvcGFydDEKLSAx NjkuIGZ0cDovL21pcnJvcnMuYW9sLmNvbS9wdWIvcnRmbS91c2VuZXQtYnktaGllcmFyY2h5L2Nv bXAvdW5peC9haXgKLSAxNzAuIG5ld3M6Y29tcC51bml4LmFpeAotIDE3MS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAotIDE3Mi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCi0gMTczLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMQotIDE3NC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjEuMgotIDE3NS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAotIDE3Ni4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCi0gMTc3LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMQotIDE3OC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjEuMwotIDE3OS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjEuMQotIDE4MC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L3NlY3VyaXR5Lmh0bWwjc2VydmVycwotIDE4MS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAotIDE4Mi4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCi0gMTgzLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMQotIDE4NC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjEuNAotIDE4NS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjEuMgotIDE4Ni4gaHR0cDovL3NlcnZpY2Uuc29m dHdhcmUuaWJtLmNvbS9yczYwMDAvCi0gMTg3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjdG9wCi0gMTg4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjY29udGVudHMKLSAxODkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCN4My4xCi0gMTkwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjeDMuMS41Ci0gMTkxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjeDMuMS4zCi0gMTkyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjdG9wCi0gMTkzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjY29udGVudHMKLSAxOTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCN4My4xCi0gMTk1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjeDMuMS40Ci0gMTk2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjdG9wCi0gMTk3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjY29udGVudHMKLSAxOTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vi d3IuaHRtbCN4MwotIDE5OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3gzLjMKLSAyMDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCN4My4xCi0gMjAxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwj eDMuMi4wCi0gMjAyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwj eDMuMi4xCi0gMjAzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwj eDMuMi4yCi0gMjA0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwj eDMuMi4zCi0gMjA1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwj eDMuMi40Ci0gMjA2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwj eDMuMi41Ci0gMjA3LiBuZXdzOmNvbXAuc3lzLmhwLmhwdXgKLSAyMDguIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKLSAyMDkuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwotIDIxMC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIKLSAyMTEuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yLjEKLSAyMTIuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKLSAyMTMuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwotIDIxNC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIKLSAyMTUuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yLjIKLSAyMTYuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yLjAKLSAyMTcuIGZ0cDovL2tlcm1pdC5jb2x1bWJp YS5lZHUva2VybWl0L2YvbWFrZWZpbGUKLSAyMTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCN0b3AKLSAyMTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCNjb250ZW50cwotIDIyMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3gzLjIKLSAyMjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCN4My4yLjMKLSAyMjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCN4My4yLjEKLSAyMjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCN0b3AKLSAyMjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCNjb250ZW50cwotIDIyNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI3gzLjIKLSAyMjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCN4My4yLjQKLSAyMjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCN4My4yLjIKLSAyMjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCN4My4yLjQuMQotIDIyOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI3gzLjIuNC4yCi0gMjMwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjeDMuMi40LjMKLSAyMzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCN4My4yLjQuNAotIDIzMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuNC41Ci0gMjMzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gMjM0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSAyMzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yCi0gMjM2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDMuMi40LjIKLSAyMzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yLjIKLSAyMzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKLSAyMzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwotIDI0MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuNAotIDI0MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuNC4zCi0gMjQyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMi40LjEKLSAyNDMuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKLSAyNDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwotIDI0NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuNAotIDI0Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuNC40Ci0gMjQ3LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMi40LjIKLSAyNDguIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKLSAyNDkuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwotIDI1MC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuNAotIDI1MS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuNC41Ci0gMjUyLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMi40LjMKLSAyNTMuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKLSAyNTQuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwotIDI1NS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuNAotIDI1Ni4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuNC40Ci0gMjU3LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gMjU4LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSAyNTkuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yCi0gMjYwLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMi40Ci0gMjYxLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gMjYyLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSAyNjMuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MwotIDI2NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjQKLSAyNjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yCi0gMjY2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDMuMy4xCi0gMjY3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDMuMy4yCi0gMjY4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDMuMy4zCi0gMjY5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDMuMy40Ci0gMjcwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDMuMy41Ci0gMjcxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDMuMy42Ci0gMjcyLiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93 aWtpL0F2YWhpXyhzb2Z0d2FyZSkKLSAyNzMuIG5ld3M6Y29tcC5vcy5saW51eC5taXNjCi0gMjc0 LiBuZXdzOmNvbXAub3MubGludXguYW5zd2VycwotIDI3NS4gaHR0cDovL3d3dy50bGRwLm9yZy8K LSAyNzYuIGh0dHA6Ly93d3cudGxkcC5vcmcvRkFRL0xpbnV4LUZBUS5odG1sCi0gMjc3LiBodHRw Oi8vd3d3LnRsZHAub3JnL0hPV1RPL1NlcmlhbC1IT1dUTy5odG1sCi0gMjc4LiBodHRwOi8vdGxk cC5vcmcvSE9XVE8vTW9kZW0tSE9XVE8uaHRtbAotIDI3OS4gZnRwOi8vc3Vuc2l0ZS51bmMuZWR1 L3B1Yi9MaW51eC9kb2NzL0hPV1RPCi0gMjgwLiBmdHA6Ly90c3gtMTEubWl0LmVkdS9wdWIvbGlu dXgvZG9jcy9IT1dUTwotIDI4MS4gaHR0cDovL3d3dy50bGRwLm9yZy9IT1dUTy8KLSAyODIuIGh0 dHA6Ly93d3cudGxkcC5vcmcvaG1pcnJvcnMuaHRtbAotIDI4My4gaHR0cDovL3d3dy5yZWRoYXQu Y29tL2FwcHMvc3VwcG9ydC8KLSAyODQuIGh0dHA6Ly93d3cuZGViaWFuLm9yZy9zdXBwb3J0Ci0g Mjg1LiBodHRwOi8vd3d3LnNsYWNrd2FyZS5jb20vc3VwcG9ydC8KLSAyODYuIGh0dHA6Ly93d3cu Y2FsZGVyYS5jb20vc3VwcG9ydC8KLSAyODcuIGh0dHA6Ly93d3cubm92ZWxsLmNvbS9zdXBwb3J0 L21pY3Jvc2l0ZXMvbWljcm9zaXRlLmRvCi0gMjg4LiBodHRwOi8vd3d3Lm1hbmRyYWtlLmNvbS9z dXBwb3J0LwotIDI4OS4gaHR0cDovL3d3dy50dXJib2xpbnV4LmNvbS9zdXBwb3J0LwotIDI5MC4g aHR0cDovL3d3dy5saW5tb2RlbXMub3JnLwotIDI5MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3gzLjAKLSAyOTIuIGh0dHA6Ly9saW51eC5kcmVhbXRpbWUub3Jn L2RlY25ldC8KLSAyOTMuIG1haWx0bzprZXJtaXQtc3VwcG9ydEBjb2x1bWJpYS5lZHUKLSAyOTQu IGh0dHA6Ly93d3cubGlubW9kZW1zLm9yZy8KLSAyOTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4wLjIKLSAyOTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9zZWN1cml0eS5odG1sI3NlcnZlcnMKLSAyOTcuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9zc2hjbGllbnQuaHRtbAotIDI5OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3RvcAotIDI5OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCi0gMzAwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDMKLSAzMDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCN4My4zLjIKLSAzMDIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCN0b3AKLSAzMDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCNjb250ZW50cwotIDMwNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI3gzLjMKLSAzMDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCN4My4zLjMKLSAzMDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCN4My4zLjEKLSAzMDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCN4My4wCi0gMzA4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjeDYKLSAzMDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3Iu aHRtbCN4NwotIDMxMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I3g4Ci0gMzExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDEw Ci0gMzEyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDExCi0g MzEzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwKLSAzMTQuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4wCi0gMzE1LiBodHRw Oi8vbGludXh3d3cuZGIuZXJhdS5lZHUvbWFpbF9hcmNoaXZlcy9saW51eC1rZXJuZWwvTWFyXzk4 LzE0NDEuaHRtbAotIDMxNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3RvcAotIDMxNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I2NvbnRlbnRzCi0gMzE4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0 bWwjeDMuMwotIDMxOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I3gzLjMuNAotIDMyMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I3gzLjMuMgotIDMyMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I3gzLjAuNQotIDMyMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZmFxLmh0bWwj dGVybQotIDMyMy4gaHR0cDovL2RpY2tleS5oaXMuY29tL3h0ZXJtL3h0ZXJtLmh0bWwKLSAzMjQu IGh0dHA6Ly9kaWNrZXkuaGlzLmNvbS94dGVybS94dGVybS5odG1sCi0gMzI1LiBmdHA6Ly9rZXJt aXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL3htb2RtYXAudHh0Ci0gMzI2LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gMzI3LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSAzMjguIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4zCi0gMzI5LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMy41Ci0gMzMwLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMy4zCi0gMzMxLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gMzMyLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSAzMzMuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4zCi0gMzM0LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMy42Ci0gMzM1LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMy40Ci0gMzM2LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gMzM3LiBtYWlsdG86a2VybWl0LXN1cHBvcnRAY29s dW1iaWEuZWR1Ci0gMzM4LiBodHRwOi8vd3d3LnJlZGhhdC5jb20vc3VwcG9ydC9lcnJhdGEvUkhC QS0yMDAxLTE1My5odG1sCi0gMzM5LiBuZXdzOmNvbXAucHJvdG9jb2xzLmtlcm1pdC5taXNjCi0g MzQwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gMzQx LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSAz NDIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4zCi0gMzQz LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMy41Ci0gMzQ0 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gMzQ1LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSAzNDYu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MwotIDM0Ny4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjUKLSAzNDguIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4zCi0gMzQ5LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gMzUwLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSAzNTEuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MwotIDM1Mi4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjYKLSAzNTMuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My40Ci0gMzU0LiBuZXdzOmNvbXAub3MucW54 Ci0gMzU1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvZ2tlcm1pdC5odG1sCi0gMzU2 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDEwCi0gMzU3LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwKLSAzNTguIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKLSAzNTkuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwotIDM2MC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzCi0gMzYxLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNwotIDM2Mi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjUKLSAzNjMuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My42LjEKLSAzNjQuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My42LjIKLSAzNjUuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My42LjMKLSAzNjYuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My42LjQKLSAzNjcuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xMAotIDM2OC4gaHR0cDovL2FwbGF3cmVuY2Uu Y29tL1NDT0ZBUS8KLSAzNjkuIGh0dHA6Ly93d3cuemVuZXouY29tL2NnaS1iaW4vc2NvcHJvZ2Zh cS9mYXEucGwKLSAzNzAuIGh0dHA6Ly93d3cuemVuZXouY29tL2NnaS1iaW4vc2NvdXc3ZmFxL2Zh cS5wbAotIDM3MS4gaHR0cDovL3plbmV6LnBjdW5peC5jb20vY2dpLWJpbi9zY291dzdmYXEvZmFx LnBsCi0gMzcyLiBodHRwOi8vcGN1bml4LmNvbS9Vbml4YXJ0L21vZGVtcy5odG1sCi0gMzczLiBo dHRwOi8vd3d3LmZyZWViaXJkLm9yZy9mYXEvCi0gMzc0LiBodHRwOi8vd3d3LmZyZWViaXJkLm9y Zy9mYXEvZGV2ZWxvcGVyLmh0bWwKLSAzNzUuIGh0dHA6Ly9zdXBwb3J0LmNhbGRlcmEuY29tL2Nh bGRlcmEKLSAzNzYuIGh0dHA6Ly9zdGFnZS5jYWxkZXJhLmNvbS90YS8KLSAzNzcuIGh0dHA6Ly9h cGxhd3JlbmNlLmNvbS9uZXd0b3Njby5odG1sCi0gMzc4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMC41Ci0gMzc5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tmYXEuaHRtbCN0ZXJtCi0gMzgwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDMuMAotIDM4MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3RvcAotIDM4Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI2NvbnRlbnRzCi0gMzgzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjeDMuNgotIDM4NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI3gzLjYuMQotIDM4NS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJt aXQvYy1rZXJtaXQvY2t1dGlvLmMKLSAzODYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCN0b3AKLSAzODcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCNjb250ZW50cwotIDM4OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI3gzLjYKLSAzODkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCN4My42LjMKLSAzOTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCN4My42LjEKLSAzOTEuIGh0dHA6Ly93d3cuZGlnaS5jb20vCi0gMzkyLiBmdHA6 Ly9mdHAuZnUtYmVybGluLmRlL3B1Yi91bml4L2RyaXZlci9mYXMKLSAzOTMuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MTQKLSAzOTQuIGh0dHA6Ly93d3cuc2Nv LmNvbS8KLSAzOTUuIGZ0cDovL2Z0cC5zY28uY29tLwotIDM5Ni4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAotIDM5Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCi0gMzk4LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNgotIDM5OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjYuNAotIDQwMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjYuMgotIDQwMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjEwCi0gNDAyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gNDAzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSA0MDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCN4My42Ci0gNDA1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDMuNi4zCi0gNDA2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gNDA3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjY29udGVudHMKLSA0MDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCN4MwotIDQwOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI3gzLjgKLSA0MTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCN4My42Ci0gNDExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjeDMuNy4xCi0gNDEyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjeDMuNy4yCi0gNDEzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjeDMuNy4zCi0gNDE0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjeDMuNy40Ci0gNDE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjeDMuNy41Ci0gNDE2LiBuZXdzOmNvbXAudW5peC5zb2xhcmlzCi0gNDE3LiBodHRw Oi8vYWNjZXNzMS5zdW4uY29tLwotIDQxOC4gaHR0cDovL2RvY3Muc3VuLmNvbS8KLSA0MTkuIGh0 dHA6Ly93d3cuc3VuaGVscC5jb20vCi0gNDIwLiBodHRwOi8vd3d3LndpbnMudXZhLm5sL3B1Yi9z b2xhcmlzL3NvbGFyaXMyLwotIDQyMS4gaHR0cDovL3d3dy53aW5zLnV2YS5ubC9jZ2ktYmluL3Nm YXEuY2dpCi0gNDIyLiBmdHA6Ly9mdHAud2lucy51dmEubmwvcHViL3NvbGFyaXMKLSA0MjMuIGh0 dHA6Ly93d3cuc2NpZW5jZS51dmEubmwvcHViL3NvbGFyaXMvc29sYXJpczIuaHRtbAotIDQyNC4g aHR0cDovL3d3dy5zdG9rZWx5LmNvbS8KLSA0MjUuIGh0dHA6Ly93d3cuc3Rva2VseS5jb20vdW5p eC5zeXNhZG0ucmVzb3VyY2VzL2ZhcXMuc3VuLmh0bWwKLSA0MjYuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4wCi0gNDI3LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gNDI4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSA0MjkuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MwotIDQzMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3gzLjcKLSA0MzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCN4My43LjIKLSA0MzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCN0b3AKLSA0MzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCNjb250ZW50cwotIDQzNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3gzLjcKLSA0MzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCN4My43LjMKLSA0MzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCN4My43LjEKLSA0MzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCN0b3AKLSA0MzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCNjb250ZW50cwotIDQzOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI3gzLjcKLSA0NDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCN4My43LjQKLSA0NDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCN4My43LjIKLSA0NDIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCN0b3AKLSA0NDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vi d3IuaHRtbCNjb250ZW50cwotIDQ0NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWJ3ci5odG1sI3gzLjcKLSA0NDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vi d3IuaHRtbCN4My43LjUKLSA0NDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vi d3IuaHRtbCN4My43LjMKLSA0NDcuIG5ld3M6Y29tcC5vcy52bXMKLSA0NDguIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKLSA0NDkuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwotIDQ1MC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjcKLSA0NTEuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My43LjYKLSA0NTIuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My43LjQKLSA0NTMuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKLSA0NTQuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwotIDQ1NS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjcKLSA0NTYuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My43LjUKLSA0NTcuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKLSA0NTguIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwotIDQ1OS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzCi0gNDYwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuOQotIDQ2MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3gzLjcKLSA0NjIuIGh0dHA6Ly93d3cuc3Rva2VseS5jb20vCi0g NDYzLiBodHRwOi8vYWNjZXNzMS5zdW4uY29tLwotIDQ2NC4gaHR0cDovL3d3dy5sdWRkLmx1dGgu c2UvfmJlYXIvcHJvamVjdC9zdW4vc3VuLmhhcmR3YXJlLnR4dAotIDQ2NS4gZnRwOi8vZnRwLm5l dGNvbS5jb20vcHViL3J1L3J1Ymljb24vc3VuLmhkd3IucmVmCi0gNDY2LiBmdHA6Ly9mdHAuaW50 bmV0Lm5ldC9wdWIvU1VOL1N1bi1IYXJkd2FyZS1SZWYKLSA0NjcuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKLSA0NjguIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwotIDQ2OS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzCi0gNDcwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMTAKLSA0NzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCN4My44Ci0gNDcyLiBuZXdzOmNvbXAudW5peC51bHRyaXgKLSA0 NzMuIG5ld3M6Y29tcC5zeXMuZGVjCi0gNDc0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjdG9wCi0gNDc1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjY29udGVudHMKLSA0NzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCN4MwotIDQ3Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWJ3ci5odG1sI3gzLjExCi0gNDc4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjeDMuOQotIDQ3OS4gaHR0cDovL3d3dy5mcmVlYmlyZC5vcmcvCi0gNDgwLiBodHRw Oi8vd3d3LmZyZWViaXJkLm9yZy9mYXEvCi0gNDgxLiBuZXdzOmNvbXAudW5peC51bml4d2FyZS5t aXNjCi0gNDgyLiBuZXdzOmNvbXAudW5peC5zY28ubWlzYwotIDQ4My4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjAKLSA0ODQuIGZ0cDovL2tlcm1pdC5jb2x1 bWJpYS5lZHUva2VybWl0L2YvY2t1dGlvLmMKLSA0ODUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKLSA0ODYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwotIDQ4Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3gzCi0gNDg4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjeDMuMTIKLSA0ODkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCN4My4xMAotIDQ5MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI3RvcAotIDQ5MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWJ3ci5odG1sI2NvbnRlbnRzCi0gNDkyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjeDMKLSA0OTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vi d3IuaHRtbCN4My4xMwotIDQ5NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3 ci5odG1sI3gzLjExCi0gNDk1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjdG9wCi0gNDk2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0 bWwjY29udGVudHMKLSA0OTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3Iu aHRtbCN4MwotIDQ5OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I3gzLjE0Ci0gNDk5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwj eDMuMTIKLSA1MDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0 b3AKLSA1MDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250 ZW50cwotIDUwMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gz Ci0gNTAzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMTUK LSA1MDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xMwot IDUwNS4gbmV3czpjb21wLnN5cy5zZ2kubWlzYwotIDUwNi4gbmV3czpjb21wLnN5cy5zZ2kuYWRt aW4KLSA1MDcuIGh0dHA6Ly93d3cuc2dpLmNvbS8KLSA1MDguIGh0dHA6Ly93d3ctdml6LnRhbXUu ZWR1L35zZ2ktZmFxLwotIDUwOS4gZnRwOi8vdml6LnRhbXUuZWR1L3B1Yi9zZ2kvZmFxLwotIDUx MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sCi0gNTExLiBodHRw Oi8vZnJlZXdhcmUuc2dpLmNvbS9JbnN0YWxsYWJsZS9nY2MtMi45NS4yLmh0bWwKLSA1MTIuIGh0 dHA6Ly9mcmVld2FyZS5zZ2kuY29tL0luc3RhbGxhYmxlL2djYy0yLjk1LjIuaHRtbAotIDUxMy4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAotIDUxNC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCi0gNTE1LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMKLSA1MTYuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xNgotIDUxNy4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjE0Ci0gNTE4LiBuZXdzOmNv bXAuc3lzLmJlCi0gNTE5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0 bWwjdG9wCi0gNTIwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwj Y29udGVudHMKLSA1MjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCN4MwotIDUyMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gz LjE3Ci0gNTIzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMu MTUKLSA1MjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AK LSA1MjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50 cwotIDUyNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzCi0g NTI3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMTgKLSA1 MjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xNgotIDUy OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAotIDUzMC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCi0gNTMx LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMKLSA1MzIuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xOQotIDUzMy4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjE3Ci0gNTM0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gNTM1LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSA1MzYuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MwotIDUzNy4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIwCi0gNTM4LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMTgKLSA1MzkuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9tYWMuaHRtbAotIDU0MC4gaHR0cDovL3d3dy5hbWF6b24uY29t L2dwL3Byb2R1Y3QvQjAwMDBWWUpSWT9pZT1VVEY4JnRhZz1hbGVpZG1vcmVsZG9tLTIwJmxpbmtD b2RlPWFzMiZjYW1wPTE3ODkmY3JlYXRpdmU9MzkwOTU3JmNyZWF0aXZlQVNJTj1CMDAwMFZZSlJZ Ci0gNTQxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDEwCi0g NTQyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwKLSA1NDMuIGh0 dHA6Ly93d3cuYW1hem9uLmNvbS9ncC9wcm9kdWN0L0IwMDBGWDYxTVM/aWU9VVRGOCZ0YWc9YWxl aWRtb3JlbGRvbS0yMCZsaW5rQ29kZT1hczImY2FtcD0xNzg5JmNyZWF0aXZlPTM5MDk1NyZjcmVh dGl2ZUFTSU49QjAwMEZYNjFNUwotIDU0NC4gbWFpbHRvOmtlcm1pdEBjb2x1bWJpYS5lZHUKLSA1 NDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKLSA1NDYu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwotIDU0 Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzCi0gNTQ4LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMTkKLSA1NDkuIGh0 dHA6Ly93d3cudW5pLWdpZXNzZW4uZGUvZmFxL2FyY2hpdi9jb2hlcmVudC1mYXEuZ2VuZXJhbC9t c2cwMDAwMC5odG1sCi0gNTUwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjdG9wCi0gNTUxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0 bWwjY29udGVudHMKLSA1NTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3Iu aHRtbCN4NQotIDU1My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I3gzCi0gNTU0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwKLSA1 NTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKLSA1NTYu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwotIDU1 Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3g2Ci0gNTU4LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDQKLSA1NTkuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbAotIDU2MC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAotIDU2MS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCi0gNTYyLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDcKLSA1NjMuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4NQotIDU2NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWlucy5odG1sIzkuNQotIDU2NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3gzCi0gNTY2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjdG9wCi0gNTY3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjY29udGVudHMKLSA1NjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCN4OAotIDU2OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWJ3ci5odG1sI3g2Ci0gNTcwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5z Lmh0bWwjeDgKLSA1NzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRt bAotIDU3Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrNjBtYW51YWwuaHRtbAot IDU3My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NhYmxlLmh0bWwKLSA1NzQuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKLSA1NzUuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwotIDU3Ni4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3g5Ci0gNTc3LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDcKLSA1NzguIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKLSA1NzkuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwotIDU4MC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gxMAotIDU4MS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3g4Ci0gNTgyLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2s2MG1hbnVhbC5odG1sCi0gNTgzLiBodHRwOi8vZGlja2V5Lmhpcy5jb20v eHRlcm0veHRlcm0uaHRtbAotIDU4NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWJ3ci5odG1sI3RvcAotIDU4NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3 ci5odG1sI2NvbnRlbnRzCi0gNTg2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjeDExCi0gNTg3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjeDkKLSA1ODguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCN0b3AKLSA1ODkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNj b250ZW50cwotIDU5MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I3gxMgotIDU5MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gx MAotIDU5Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gxMS4x Ci0gNTkzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDExLjIK LSA1OTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKLSA1 OTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwot IDU5Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gxMQotIDU5 Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gxMS4yCi0gNTk4 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2s2MG1hbnVhbC5odG1sCi0gNTk5LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCi0gNjAwLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKLSA2MDEuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MTEKLSA2MDIuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MTEuMQotIDYwMy4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrNjBtYW51YWwuaHRtbAotIDYwNC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAotIDYwNS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCi0gNjA2LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDEzCi0gNjA3LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDExCi0gNjA4LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvc2VjdXJpdHkuaHRtbAotIDYwOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAotIDYxMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCi0gNjExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjeDE0Ci0gNjEyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDEyCi0gNjEzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjdG9wCi0gNjE0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjY29udGVudHMKLSA2MTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCN4MTUKLSA2MTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCN4MTQKLSA2MTcuIG1haWx0bzpzdXBwb3J0QHN0YWxsaW9uLm96LmF1Ci0gNjE4 LiBodHRwOi8vd3d3LnN0YWxsaW9uLmNvbS8KLSA2MTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKLSA2MjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwotIDYyMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQuaHRtbAotIDYyMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrODAuaHRtbAotIDYyMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0 bWwKLSA2MjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCi0gNjI1 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS8KLSA2MjYuIG1haWx0bzprZXJtaXRAY29sdW1iaWEu ZWR1CgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9j a3VjbWQuYyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1Y21kLmMK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3MDc3MGUuLjAwMDAwMDAKLS0tIGEvY2tl cm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VjbWQuYworKysgL2Rldi9udWxs CkBAIC0xLDc5MTkgKzAsMCBAQAotI2luY2x1ZGUgImNrY3N5bS5oIgotCi1jaGFyICpjbWR2ID0g IkNvbW1hbmQgcGFja2FnZSA5LjAuMTY4LCAxMiBNYXJjaCAyMDEwIjsKLQotLyogIEMgSyBVIEMg TSBEICAtLSAgSW50ZXJhY3RpdmUgY29tbWFuZCBwYWNrYWdlIGZvciBVbml4ICAqLwotCi0vKiAo SW4gcmVhbGl0eSwgaXQncyBmb3IgYWxsIHBsYXRmb3Jtcywgbm90IGp1c3QgVW5peCkgKi8KLQot LyoKLSAgQXV0aG9yOiBGcmFuayBkYSBDcnV6IChmZGNAY29sdW1iaWEuZWR1KSwKLSAgQ29sdW1i aWEgVW5pdmVyc2l0eSBBY2FkZW1pYyBJbmZvcm1hdGlvbiBTeXN0ZW1zLCBOZXcgWW9yayBDaXR5 LgotCi0gIENvcHlyaWdodCAoQykgMTk4NSwgMjAxMCwKLSAgICBUcnVzdGVlcyBvZiBDb2x1bWJp YSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgotICAgIEFsbCByaWdodHMgcmVz ZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCi0gICAgY29w eXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVy bWlzc2lvbnMuCi0qLwotCi0jZGVmaW5lIFRPS1BSRUNIRUNLCi0KLSNkZWZpbmUgRE9DSEtWQVIK LQotLyogQ29tbWFuZC10ZXJtaW5hbC10by1DLUtlcm1pdCBjaGFyYWN0ZXIgbWFzayAqLwotCi0j aWZkZWYgT1MyCQkJCS8qIEs5NSAqLwotaW50IGNtZG1zayA9IDI1NTsJCQkvKiAoYWx3YXlzIHdh cyAyNTUpICovCi0jZWxzZQkJCQkJLyogQWxsIG90aGVycy4uLiAqLwotaW50IGNtZG1zayA9IDI1 NTsJCQkvKiAzMSBEZWMgMjAwMCAod2FzIDEyNykgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lm ZGVmIEJTX0RJUlNFUAkJCS8qIERpcmVjdG9yeSBzZXBhcmF0b3IgaXMgYmFja3NsYXNoICovCi0j dW5kZWYgQlNfRElSU0VQCi0jZW5kaWYgLyogQlNfRElSU0VQICovCi0KLSNpZmRlZiBPUzIKLSNk ZWZpbmUgQlNfRElSU0VQCi0jZW5kaWYgLyogQlNfRElSU0VQICovCi0KLSNkZWZpbmUgQ0tVQ01E X0MKLQotI2luY2x1ZGUgImNrY2RlYi5oIiAgICAgICAgICAgICAgICAgICAgIC8qIEZvcm1hdHMg Zm9yIGRlYnVnKCksIGV0Yy4gKi8KLSNpbmNsdWRlICJja2NrZXIuaCIJCQkvKiBOZWVkZWQgZm9y IEJJR0JVRk9LIGRlZmluaXRpb24gKi8KLSNpbmNsdWRlICJja2NuZXQuaCIJCQkvKiBOZWVkZWQg Zm9yIHNlcnZlci1zaWRlIFRlbG5ldCAqLwotI2luY2x1ZGUgImNrdWNtZC5oIgkJCS8qIE5lZWRl ZCBmb3IgZXZlcnl0aGluZyAqLwotI2luY2x1ZGUgImNrdXVzci5oIiAgICAgICAgICAgICAgICAg ICAgIC8qIE5lZWRlZCBmb3IgcHJvbXB0IGxlbmd0aCAqLwotCi0jaWZuZGVmIE5PQVJST1dLRVlT Ci0jaWZuZGVmIE5PRVNDU0VRCi0jaWZkZWYgVk1TT1JVTklYCi0jZGVmaW5lIFVTRV9BUlJPV0tF WVMJCQkvKiBVc2UgYXJyb3cga2V5cyBmb3IgY29tbWFuZCByZWNhbGwgKi8KLSNlbmRpZiAvKiBW TVNPUlVOSVggKi8KLSNlbmRpZiAvKiBOT0VTQ1NFUSAqLwotI2VuZGlmIC8qIE5PQVJST1dLRVlT ICovCi0KLSN1bmRlZiBDS1VDTURfQwotCi1fUFJPVE9UWVAoIGludCB1bmhleCwgKGNoYXIpICk7 Ci1fUFJPVE9UWVAoIHN0YXRpYyBWT0lEIGNtZGNscnNjbiwgKHZvaWQpICk7Ci0KLSNpZmRlZiBD S0xFQVJOCi1fUFJPVE9UWVAoIFZPSUQgbGVhcm5jbWQsIChjaGFyICopICk7Ci0jZW5kaWYgLyog Q0tMRUFSTiAqLwotCi1zdGF0aWMgY2hhciAqbW9uYW1lW10gPSB7Ci0gICAgIkphbiIsICJGZWIi LCAiTWFyIiwgIkFwciIsICJNYXkiLCAiSnVuIiwKLSAgICAiSnVsIiwgIkF1ZyIsICJTZXAiLCAi T2N0IiwgIk5vdiIsICJEZWMiCi19OwotCi1zdHJ1Y3Qga2V5dGFiIGNtb250aHNbXSA9IHsKLSAg eyAiYXByaWwiLCAgICAgNCwgMCB9LAotICB7ICJhdWd1c3QiLCAgICA4LCAwIH0sCi0gIHsgImRl Y2VtYmVyIiwgMTIsIDAgfSwKLSAgeyAiZmVicnVhcnkiLCAgMiwgMCB9LAotICB7ICJqYW51YXJ5 IiwgICAxLCAwIH0sCi0gIHsgImp1bHkiLCAgICAgIDcsIDAgfSwKLSAgeyAianVuZSIsICAgICAg NiwgMCB9LAotICB7ICJtYXJjaCIsICAgICAzLCAwIH0sCi0gIHsgIm1heSIsICAgICAgIDUsIDAg fSwKLSAgeyAibm92ZW1iZXIiLCAxMSwgMCB9LAotICB7ICJvY3RvYmVyIiwgIDEwLCAwIH0sCi0g IHsgInNlcHRlbWJlciIsIDksIDAgfQotfTsKLQotI2lmbmRlZiBOT0lDUCAgICAgLyogVGhlIHJl c3Qgb25seSBpZiBpbnRlcmFjdGl2ZSBjb21tYW5kIHBhcnNpbmcgc2VsZWN0ZWQgKi8KLQotI2lm bmRlZiBOT1NQTAotX1BST1RPVFlQKCBpbnQgY2hrdmFyLCAoY2hhciAqKSApOwotZXh0ZXJuIGlu dCBhc2tmbGFnLCBlY2hvc3RhcnM7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmZGVmIENLUk9P VAotZXh0ZXJuIGludCBja3Jvb3RlcnI7Ci0jZW5kaWYgLyogQ0tST09UICovCi0KLSNpZmRlZiBJ S1NECi1leHRlcm4gaW50IGluc2VydmVyOwotI2VuZGlmIC8qIElLU0QgKi8KLQotaW50IGNtZmxk ZmxncyA9IDA7CQkJLyogRmxhZ3MgZm9yIGNtZmxkKCkgKi8KLWludCBjbWt3ZmxncyA9IDA7CQkJ LyogRmxhZ3MgZnJvbSBsYXN0IGtleXdvcmQgcGFyc2UgKi8KLXN0YXRpYyBpbnQgbm9tc2cgPSAw Owotc3RhdGljIGludCBibG9ja2x2bCA9IDA7CQkvKiBCbG9jayBuZXN0aW5nIGxldmVsICovCi1z dGF0aWMgaW50IGxpbmViZWdpbiA9IDA7CQkvKiBGbGFnIGZvciBhdCBzdGFydCBvZiBhIGxpbmUg Ki8KLXN0YXRpYyBpbnQgcXVvdGluZyA9IDE7CQkJLyogUXVvdGluZyBpcyBhbGxvd2VkICovCi1z dGF0aWMgaW50IHN3YXJnID0gMDsJCQkvKiBQYXJzaW5nIGEgc3dpdGNoIGFyZ3VtZW50ICovCi1z dGF0aWMgaW50IHhjbWZkYiA9IDA7CQkJLyogRmxhZyBmb3IgcGFyc2luZyBjaGFpbmVkIGZkYnMu Li4gKi8KLXN0YXRpYyBpbnQgY2hzcmMgPSAwOwkJCS8qIFNvdXJjZSBvZiBjaGFyYWN0ZXIsIDEg PSB0dHkgKi8KLXN0YXRpYyBpbnQgbmV3Y21kID0gMDsJCQkvKiBTZWUgYWRkY21kKCkgKi8KLQot I2lmZGVmIEJTX0RJUlNFUAotc3RhdGljIGludCBkaXJuYW1mbGcgPSAwOwotI2VuZGlmIC8qIEJT X0RJUlNFUCAqLwotCi0vKgotTW9kZWxlZCBhZnRlciB0aGUgREVDU1lTVEVNLTIwIGNvbW1hbmQg cGFyc2VyICh0aGUgQ09NTkQgSlNZUyksIFJJUC4gRmVhdHVyZXM6Ci0KLSAuIHBhcnNlcyBhbmQg dmVyaWZpZXMga2V5d29yZHMsIGZpbGVuYW1lcywgdGV4dCBzdHJpbmdzLCBudW1iZXJzLCBvdGhl ciBkYXRhCi0gLiBkaXNwbGF5cyBhcHByb3ByaWF0ZSBtZW51IG9yIGhlbHAgbWVzc2FnZSB3aGVu IHVzZXIgdHlwZXMgIj8iCi0gLiBkb2VzIGtleXdvcmQgYW5kIGZpbGVuYW1lIGNvbXBsZXRpb24g d2hlbiB1c2VyIHR5cGVzIEVTQyBvciBUQUIKLSAuIGRvZXMgcGFydGlhbCBrZXl3b3JkIGFuZCBm aWxlbmFtZSBjb21wbGV0aW9uCi0gLiBhY2NlcHRzIGFueSB1bmlxdWUgYWJicmV2aWF0aW9uIGZv ciBhIGtleXdvcmQKLSAuIGFsbG93cyBrZXl3b3JkcyB0byBoYXZlIGF0dHJpYnV0ZXMsIGxpa2Ug ImludmlzaWJsZSIgYW5kICJhYmJyZXZpYXRpb24iCi0gLiBjYW4gc3VwcGx5IGRlZmF1bHRzIGZv ciBmaWVsZHMgb21pdHRlZCBieSB1c2VyCi0gLiBwcm92aWRlcyBjb21tYW5kIHJldHJ5IGFuZCBy ZWNhbGwKLSAuIHByb3ZpZGVzIGNoYXJhY3Rlciwgd29yZCwgYW5kIGxpbmUgZGVsZXRpb24gKGJ1 dCBvbmx5IGZyb20gdGhlIGVuZCkKLSAuIGFjY2VwdHMgaW5wdXQgZnJvbSBrZXlib2FyZCwgY29t bWFuZCBmaWxlcywgbWFjcm9zLCBvciByZWRpcmVjdGVkIHN0ZGluCi0gLiBhbGxvd3MgZm9yIGZ1 bGwgb3IgaGFsZiBkdXBsZXggb3BlcmF0aW9uLCBjaGFyYWN0ZXIgb3IgbGluZSBpbnB1dAotIC4g YWxsb3dzIFwtZXNjYXBlcyBmb3Igc3BlY2lhbCBjaGFyYWN0ZXJzCi0gLiBhbGxvd3Mgc3BlY2lm aWNhdGlvbiBvZiBhIHVzZXIgZXhpdCB0byBleHBhbmQgdmFyaWFibGVzLCBldGMuCi0gLiBzZXR0 YWJsZSBwcm9tcHQsIHByb3RlY3RlZCBmcm9tIGRlbGV0aW9uLCBkeW5hbWljYWxseSByZS1ldmFs dWF0ZWQgZWFjaCB0aW1lCi0gLiBhbGxvd3MgY2hhaW5lZCBwYXJzZSBmdW5jdGlvbnMuCi0KLUZ1 bmN0aW9uczoKLSBjbXNldHAgLSBTZXQgcHJvbXB0IChjbXByb20gaXMgcHJvbXB0IHN0cmluZykK LSBjbXNhdnAgLSBTYXZlIGN1cnJlbnQgcHJvbXB0Ci0gY21nZXRwID0gR2V0IGN1cnJlbnQgcHJv bXB0Ci0gcHJvbXB0IC0gSXNzdWUgcHJvbXB0Ci0gY21pbmkgIC0gQ2xlYXIgdGhlIGNvbW1hbmQg YnVmZmVyIChiZWZvcmUgcGFyc2luZyBhIG5ldyBjb21tYW5kKQotIGNtcmVzICAtIFJlc2V0IGNv bW1hbmQgYnVmZmVyIHBvaW50ZXJzIChiZWZvcmUgcmVwYXJzaW5nKQotIGNta2V5ICAtIFBhcnNl IGEga2V5d29yZCBvciB0b2tlbiAoYWxzbyBjbWtleTIpCi0gY21zd2kgIC0gUGFyc2UgYSBzd2l0 Y2gKLSBjbW51bSAgLSBQYXJzZSBhIG51bWJlcgotIGNtaWZpICAtIFBhcnNlIGFuIGlucHV0IGZp bGUgbmFtZQotIGNtb2ZpICAtIFBhcnNlIGFuIG91dHB1dCBmaWxlIG5hbWUgKGFsc28gY21pZmlw LCBjbWlmaTIsIC4uLikKLSBjbWRpciAgLSBQYXJzZSBhIGRpcmVjdG9yeSBuYW1lIChhbHNvIGNt ZGlycCkKLSBjbWZsZCAgLSBQYXJzZSBhbiBhcmJpdHJhcnkgZmllbGQKLSBjbXR4dCAgLSBQYXJz ZSBhIHRleHQgc3RyaW5nCi0gY21kYXRlIC0gUGFyc2UgYSBkYXRlLXRpbWUgc3RyaW5nCi0gY21j Zm0gIC0gUGFyc2UgY29tbWFuZCBjb25maXJtYXRpb24gKGVuZCBvZiBsaW5lKQotIGNtZmRiICAt IFBhcnNlIGFueSBvZiBhIGxpc3Qgb2YgdGhlIGZvcmVnb2luZyAoY2hhaW5lZCBwYXJzZSBmdW5j dGlvbnMpCi0KLVJldHVybiBjb2RlczoKLSAtOTogbGlrZSAtMiBleGNlcHQgdGhpcyBtb2R1bGUg YWxyZWFkeSBwcmludGVkIHRoZSBlcnJvciBtZXNzYWdlCi0gLTM6IG5vIGlucHV0IHByb3ZpZGVk IHdoZW4gcmVxdWlyZWQKLSAtMjogaW5wdXQgd2FzIGludmFsaWQgKGUuZy4gbm90IGEgbnVtYmVy IHdoZW4gYSBudW1iZXIgd2FzIHJlcXVpcmVkKQotIC0xOiByZXBhcnNlIHJlcXVpcmVkICh1c2Vy IGRlbGV0ZWQgaW50byBhIHByZWNlZGluZyBmaWVsZCkKLSAgMCBvciBncmVhdGVyOiBzdWNjZXNz Ci1TZWUgaW5kaXZpZHVhbCBmdW5jdGlvbnMgZm9yIGdyZWF0ZXIgZGV0YWlsLgotCi1CZWZvcmUg dXNpbmcgdGhlc2Ugcm91dGluZXMsIHRoZSBjYWxsZXIgc2hvdWxkICNpbmNsdWRlICJja3VjbWQu aCIgYW5kIHNldCB0aGUKLXByb2dyYW0ncyBwcm9tcHQgYnkgY2FsbGluZyBjbXNldHAoKS4gIElm IHRoZSBmaWxlIHBhcnNpbmcgZnVuY3Rpb25zIGNtaWZpLAotY21vZmksIG9yIGNtZGlyIGFyZSB0 byBiZSB1c2VkLCB0aGlzIG1vZHVsZSBtdXN0IGJlIGxpbmtlZCB3aXRoIGEgY2s/ZmlvIGZpbGUK LXN5c3RlbSBzdXBwb3J0IG1vZHVsZSBmb3IgdGhlIGFwcHJvcHJpYXRlIHN5c3RlbSwgZS5nLiBj a3VmaW8gZm9yIFVuaXguICBJZgotdGhlIGNhbGxlciBwdXRzIHRoZSB0ZXJtaW5hbCBpbiBjaGFy YWN0ZXIgd2FrZXVwICgiY2JyZWFrIikgbW9kZSB3aXRoIG5vIGVjaG8sCi10aGVuIHRoZXNlIGZ1 bmN0aW9ucyB3aWxsIHByb3ZpZGUgbGluZSBlZGl0aW5nIC0tIGNoYXJhY3Rlciwgd29yZCwgYW5k IGxpbmUKLWRlbGV0aW9uLCBhcyB3ZWxsIGFzIGtleXdvcmQgYW5kIGZpbGVuYW1lIGNvbXBsZXRp b24gdXBvbiBFU0MgYW5kIGhlbHAKLXN0cmluZ3MsIGtleXdvcmQsIG9yIGZpbGUgbWVudXMgdXBv biAnPycuICBJZiB0aGUgY2FsbGVyIHB1dHMgdGhlIHRlcm1pbmFsCi1pbnRvIGNoYXJhY3RlciB3 YWtldXAvbm9lY2hvIG1vZGUsIGNhcmUgc2hvdWxkIGJlIHRha2VuIHRvIHJlc3RvcmUgaXQgYmVm b3JlCi1leGl0IGZyb20gb3IgaW50ZXJydXB0aW9uIG9mIHRoZSBwcm9ncmFtLiAgSWYgdGhlIGNo YXJhY3RlciB3YWtldXAgbW9kZSBpcyBub3QKLXNldCwgdGhlIHN5c3RlbSdzIG93biBsaW5lIGVk aXRvciBtYXkgYmUgdXNlZC4KLQotTk9URTogQ29udHJhcnkgdG8gZXhwZWN0YXRpb25zLCBtYW55 ICNpZmRlZidzIGhhdmUgYmVlbiBhZGRlZCB0byB0aGlzIG1vZHVsZS4KLUFueSBvcGVyYXRpb24g cmVxdWlyaW5nIGFuICNpZmRlZiAobGlrZSBjbGVhciBzY3JlZW4sIGdldCBjaGFyYWN0ZXIgZnJv bQota2V5Ym9hcmQsIGVyYXNlIGNoYXJhY3RlciBmcm9tIHNjcmVlbiwgZXRjKSBzaG91bGQgZXZl bnR1YWxseSBiZSB0dXJuZWQgaW50byBhCi1jYWxsIHRvIGEgZnVuY3Rpb24gdGhhdCBpcyBkZWZp bmVkIGluIGNrP3Rpby5jLCBidXQgdGhlbiBhbGwgdGhlIGNrP3Rpby5jCi1tb2R1bGVzIHdvdWxk IGhhdmUgdG8gYmUgY2hhbmdlZC4uLgotKi8KLQotLyogSW5jbHVkZXMgKi8KLQotI2luY2x1ZGUg ImNrY2tlci5oIgotI2luY2x1ZGUgImNrY2FzYy5oIgkJCS8qIEFTQ0lJIGNoYXJhY3RlciBzeW1i b2xzICovCi0jaW5jbHVkZSAiY2t1Y21kLmgiICAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFu ZCBwYXJzaW5nIGRlZmluaXRpb25zICovCi0KLSNpZmRlZiBPU0YxMwotI2lmZGVmIENLX0FOU0lD Ci0jaWZkZWYgX05PX1BST1RPCi0jdW5kZWYgX05PX1BST1RPCi0jZW5kaWYgLyogX05PX1BST1RP ICovCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSNlbmRpZiAvKiBPU0YxMyAqLwotCi0jaWZuZGVm IEhQVVhQUkU2NQotI2luY2x1ZGUgPGVycm5vLmg+CQkJLyogRXJyb3IgbnVtYmVyIHN5bWJvbHMg Ki8KLSNlbHNlCi0jaWZuZGVmIEVSUk5PX0lOQ0xVREVECi0jaW5jbHVkZSA8ZXJybm8uaD4JCQkv KiBFcnJvciBudW1iZXIgc3ltYm9scyAqLwotI2VuZGlmCS8qIEVSUk5PX0lOQ0xVREVEICovCi0j ZW5kaWYJLyogSFBVWFBSRTY1ICovCi0KLSNpZmRlZiBPUzIKLSNpZm5kZWYgTlQKLSNkZWZpbmUg SU5DTF9OT1BNCi0jZGVmaW5lIElOQ0xfVklPCQkJLyogTmVlZGVkIGZvciBja29jb24uaCAqLwot I2luY2x1ZGUgPG9zMi5oPgotI3VuZGVmIENPTU1FTlQKLSNlbHNlCi0jZGVmaW5lIEFQSVJFVCBV TE9ORwotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNlbmRpZiAvKiBOVCAqLwotI2luY2x1ZGUgImNr b2Nvbi5oIgotI2luY2x1ZGUgPGlvLmg+Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBPU0sK LSNkZWZpbmUgY2MgY2NvdW50CQkJLyogT1MtOS82OEsgY29tcGlsZXIgYnVnICovCi0jZW5kaWYg LyogT1NLICovCi0KLSNpZmRlZiBHRU1ET1MJCQkJLyogQXRhcmkgU1QgKi8KLSNpZmRlZiBwdXRj aGFyCi0jdW5kZWYgcHV0Y2hhcgotI2VuZGlmIC8qIHB1dGNoYXIgKi8KLSNkZWZpbmUgcHV0Y2hh cih4KSBjb25vYyh4KQotI2VuZGlmIC8qIEdFTURPUyAqLwotCi0jaWZkZWYgQ0tfQVVUT0RMCi1l eHRlcm4gaW50IGNtZGFkbCwganVzdG9uZTsKLSNlbmRpZiAvKiBDS19BVVRPREwgKi8KLQotZXh0 ZXJuIGludCB0aW1lbGltaXQsIG56eG9wdHMsIG5vcHVzaCwgbm9sb2NhbCwgeGNtZHNyYywga2Vl cGFsbGNoYXJzOwotCi0jaWZkZWYgQ0tTWVNMT0cKLSNpZmRlZiBVTklYCi0jaWZkZWYgQ0tYUFJJ TlRGCQkJLyogT3VyIHByaW50ZiBtYWNybyBjb25mbGljdHMgd2l0aCAqLwotI3VuZGVmIHByaW50 ZgkJCQkvKiB1c2Ugb2YgInByaW50ZiIgaW4gc3lzbG9nLmggKi8KLSNlbmRpZiAvKiBDS1hQUklO VEYgKi8KLSNpZmRlZiBSVEFJWAotI2luY2x1ZGUgPHN5cy9zeXNsb2cuaD4KLSNlbHNlICAvKiBS VEFJWCAqLwotI2luY2x1ZGUgPHN5c2xvZy5oPgotI2VuZGlmIC8qIFJUQUlYICovCi0jaWZkZWYg Q0tYUFJJTlRGCi0jZGVmaW5lIHByaW50ZiBja3hwcmludGYKLSNlbmRpZiAvKiBDS1hQUklOVEYg Ki8KLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLQotLyogTG9jYWwg dmFyaWFibGVzICovCi0KLXN0YXRpYwotaW50IHBzZXRmID0gMCwgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEZsYWcgdGhhdCBwcm9tcHQgaGFzIGJlZW4gc2V0ICovCi0gICAgY2MgPSAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVyIGNvdW50ICovCi0gICAgZHB4 ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRHVwbGV4ICgwID0gZnVsbCkgKi8K LSAgICBpbndvcmQgPSAwOwkJCQkvKiBJbiB0aGUgbWlkZGxlIG9mIGdldHRpbmcgYSB3b3JkICov Ci0KLWNoYXIgKmRmcHJvbSA9ICJDb21tYW5kPyAiOyAgICAgICAgICAgICAvKiBEZWZhdWx0IHBy b21wdCAqLwotI2lmbmRlZiBOT0xBU1RGSUxFCi1jaGFyICpsYXN0ZmlsZSA9IE5VTEw7CQkJLyog TGFzdCBmaWxlc3BlYyAqLwotc3RhdGljIGNoYXIgKnRtcGxhc3RmaWxlID0gTlVMTDsJLyogTGFz dCBmaWxlc3BlYyBjYW5kaWRhdGUgKi8KLSNlbmRpZgkvKiBOT0xBU1RGSUxFICovCi0KLWludCBj bWZsZ3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIGZsYWdzICovCi1p bnQgY21mc2F2OwkJCQkvKiBBIHNhdmVkIHZlcnNpb24gb2YgdGhlbSAqLwotCi1zdGF0aWMgY2hh ciBwdXNoYyA9IE5VTDsKLXN0YXRpYyBjaGFyIGJya2NoYXIgPSBOVUw7Ci0KLSNkZWZpbmUgQ01E RUZBVUxUIDEwMjMKLXN0YXRpYyBjaGFyIGNtZGVmYXVsdFtDTURFRkFVTFQrMV07Ci0KLSNpZmRl ZiBEQ01EQlVGCi1jaGFyICpjbWRidWYgPSBOVUxMOwkJCS8qIENvbW1hbmQgYnVmZmVyICovCi1j aGFyICpzYXZidWYgPSBOVUxMOwkJCS8qIEJ1ZmZlciB0byBzYXZlIGNvcHkgb2YgY29tbWFuZCAq LwotY2hhciAqYXRtYnVmID0gTlVMTDsJCQkvKiBBdG9tIGJ1ZmZlciAtIGZvciBjdXJyZW50IGZp ZWxkICovCi1jaGFyICphdHhidWYgPSBOVUxMOwkJCS8qIEZvciBleHBhbmRpbmcgdGhlIGF0b20g YnVmZmVyICovCi1jaGFyICpwcmV2Y21kID0gTlVMTDsKLXN0YXRpYyBjaGFyICphdHlidWYgPSBO VUxMOwkJLyogRm9yIGNvcHlpbmcgYXRvbSBidWZmZXIgKi8KLXN0YXRpYyBjaGFyICpmaWxidWYg PSBOVUxMOwkJLyogRmlsZSBuYW1lIGJ1ZmZlciAqLwotc3RhdGljIGNoYXIgKmNtcHJvbSA9IE5V TEw7CQkvKiBQcm9ncmFtJ3MgcHJvbXB0ICovCi1zdGF0aWMgY2hhciAqY21wcnh4ID0gTlVMTDsJ CS8qIFByb2dyYW0ncyBwcm9tcHQsIHVuZXZhbHVhdGVkICovCi0KLSNpZmRlZiBDS19SRUNBTEwK LS8qCi0gIENvbW1hbmQgcmVjYWxsIGlzIGF2YWlsYWJsZSBvbmx5IGlmIHdlIGNhbiBtYWtlIHBy b2ZsaWdhdGUgdXNlIG9mIG1hbGxvYygpLgotKi8KLSNkZWZpbmUgUl9NQVggMTAJCQkvKiBIb3cg bWFueSBjb21tYW5kcyB0byBzYXZlICovCi1pbnQgY21fcmVjYWxsID0gUl9NQVg7CQkJLyogU2l6 ZSBvZiBjb21tYW5kIHJlY2FsbCBidWZmZXIgKi8KLWludCBvbl9yZWNhbGwgPSAxOwkJCS8qIFJl Y2FsbCBmZWF0dXJlIGlzIE9OICovCi1zdGF0aWMgaW50IG5vX3JlY2FsbCA9IDA7CQkvKiBSZWNh bGwgT0ZGIGZvciB0aGlzIGNtZCBvbmx5ICovCi1zdGF0aWMgaW50IGZvcmNlX2FkZCA9IDA7CQkv KiBGb3JjZSBjbWQgaW50byByZWNhbGwgYnVmZmVyICovCi1zdGF0aWMgaW50IGxhc3RfcmVjYWxs ID0gLTE7CQkvKiBMYXN0IHJlY2FsbC1yZWxhdGVkIGFjdGlvbiAqLwotLyoKLSAgLTEgPSBub25l Ci0gICAwID0gQ1IgKGEgY29tbWFuZCB3YXMgZW50ZXJlZCkKLSAgIDEgPSBVcAotICAgMiA9IERv d24KLSovCi1pbnQgaW5fcmVjYWxsID0gMDsJCQkvKiBSZWNhbGwgYnVmZmVycyBhcmUgaW5pdCdk ICovCi1zdGF0aWMgaW50Ci0gIGN1cnJlbnQgPSAtMSwJCQkJLyogUG9pbnRlciB0byBjdXJyZW50 IGNvbW1hbmQgKi8KLSAgcmxhc3QgPSAtMTsJCQkJLyogSW5kZXggb2YgbGFzdCBjb21tYW5kIGlu IGJ1ZmZlciAqLwotc3RhdGljIGNoYXIgKipyZWNhbGwgPSBOVUxMOwkJLyogQXJyYXkgb2YgcmVj YWxsIGJ1ZmZlciBwb2ludGVycyAqLwotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotI2Vsc2UgIC8q ICFEQ01EQlVGICovCi1jaGFyIGNtZGJ1ZltDTURCTCs0XTsgICAgICAgICAgICAgICAgICAgLyog Q29tbWFuZCBidWZmZXIgKi8KLWNoYXIgc2F2YnVmW0NNREJMKzRdOyAgICAgICAgICAgICAgICAg ICAvKiBCdWZmZXIgdG8gc2F2ZSBjb3B5IG9mIGNvbW1hbmQgKi8KLWNoYXIgYXRtYnVmW0FUTUJM KzRdOyAgICAgICAgICAgICAgICAgICAvKiBBdG9tIGJ1ZmZlciAqLwotY2hhciBhdHhidWZbQ01E QkwrNF07ICAgICAgICAgICAgICAgICAgIC8qIEZvciBleHBhbmRpbmcgdGhlIGF0b20gYnVmZmVy ICovCi1jaGFyIHByZXZjbWRbQ01EQkwrNF07CQkJLyogRm9yIGRpc3BsYXlpbmcgdGhlIGxhc3Qg Y29tbWFuZCAqLwotc3RhdGljIGNoYXIgYXR5YnVmW0FUTUJMKzRdOwkJLyogRm9yIGNvcHlpbmcg YXRvbSBidWZmZXIgKi8KLXN0YXRpYyBjaGFyIGZpbGJ1ZltBVE1CTCs0XTsJCS8qIEZpbGUgbmFt ZSBidWZmZXIgKi8KLXN0YXRpYyBjaGFyIGNtcHJvbVtQUk9NUFRMKzFdOwkJLyogUHJvZ3JhbSdz IHByb21wdCAqLwotc3RhdGljIGNoYXIgY21wcnh4W1BST01QVEwrMV07CQkvKiBQcm9ncmFtJ3Mg cHJvbXB0LCB1bmV2YWx1YXRlZCAqLwotI2VuZGlmIC8qIERDTURCVUYgKi8KLQotLyogQ29tbWFu ZCBidWZmZXIgcG9pbnRlcnMgKi8KLQotI2RlZmluZSBQUFZMRU4gVk5BTUwJCQkvKiAyMDA4MDMw NSBXb2xmcmFtIFNhbmcgKHdhcyAyNCkgKi8KLWNoYXIgcHB2bmFtYnVmW1BQVkxFTisxXSA9IHsg TlVMLCBOVUwgfTsKLQotY2hhciAqIGNtYnB0ciA9IE5VTEw7CQkJLyogQ3VycmVudCBwb3NpdGlv biAoZm9yIGV4cG9ydCkgKi8KLQotc3RhdGljIGNoYXIgKmJwLCAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEN1cnJlbnQgY29tbWFuZCBidWZmZXIgcG9zaXRpb24gKi8KLSAgICAqcHAsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCBvZiBjdXJyZW50IGZpZWxkICovCi0g ICAgKm5wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3RhcnQgb2YgbmV4dCBm aWVsZCAqLwotCi1zdGF0aWMgaW50IHVuZ3csCQkJLyogRm9yIHVuZ2V0dGluZyB3b3JkcyAqLwot ICAgIGF0eG47CQkJCS8qIEV4cGFuc2lvbiBidWZmZXIgKGF0eGJ1ZikgbGVuZ3RoICovCi0KLSNp ZmRlZiBPUzIKLWV4dGVybiBpbnQgd2lkZXJlc3VsdDsKLSNlbmRpZiAvKiBPUzIgKi8KLQotZXh0 ZXJuIGludCBjbWRfY29scywgY21kX3Jvd3MsIGxvY2FsLCBxdWlldDsKLQotI2lmZGVmIFROQ09E RQotI2lmZGVmIElBQwotI3VuZGVmIElBQwotI2VuZGlmIC8qIElBQyAqLwotI2RlZmluZSBJQUMg MjU1Ci0jZW5kaWYgLyogVE5DT0RFICovCi0KLV9QUk9UT1RZUCggc3RhdGljIGludCBndHdvcmQs IChpbnQpICk7Ci1fUFJPVE9UWVAoIHN0YXRpYyBpbnQgYWRkYnVmLCAoY2hhciAqKSApOwotX1BS T1RPVFlQKCBzdGF0aWMgaW50IHNldGF0bSwgKGNoYXIgKiwgaW50KSApOwotX1BST1RPVFlQKCBz dGF0aWMgVk9JRCBjbWRuZXdsLCAoY2hhcikgKTsKLV9QUk9UT1RZUCggc3RhdGljIFZPSUQgY21k Y2hhcmRlbCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIHN0YXRpYyBWT0lEIGNtZGVjaG8sIChjaGFy LCBpbnQpICk7Ci1fUFJPVE9UWVAoIHN0YXRpYyBpbnQgdGVzdCwgKGludCwgaW50KSApOwotI2lm ZGVmIEdFTURPUwotX1BST1RPVFlQKCBleHRlcm4gY2hhciAqc3RyY2hyLCAoY2hhciAqLCBpbnQp ICk7Ci0jZW5kaWYgLyogR0VNRE9TICovCi0KLWV4dGVybiBjaGFyICogZGZ0dHk7Ci0KLS8qIFRo ZSBmb2xsb3dpbmcgYXJlIGZvciB1c2Ugd2l0aCBjaGFpbmVkIEZEQidzICovCi0KLXN0YXRpYyBp bnQgY3JmbGFnID0gMDsJCQkvKiBDYXJyaWFnZSByZXR1cm4gd2FzIHR5cGVkICovCi1zdGF0aWMg aW50IHFtZmxhZyA9IDA7CQkJLyogUXVlc3Rpb24gbWFyayB3YXMgdHlwZWQgKi8KLXN0YXRpYyBp bnQgZXNmbGFnID0gMDsJCQkvKiBFc2NhcGUgd2FzIHR5cGVkICovCi0KLS8qIERpcmVjdG9yeSBz ZXBhcmF0b3IgKi8KLQotI2lmZGVmIEdFTURPUwotc3RhdGljIGNoYXIgZGlyc2VwID0gJ1xcJzsK LSNlbHNlCi0jaWZkZWYgZGF0YWdlbmVyYWwKLXN0YXRpYyBjaGFyIGRpcnNlcCA9ICc6JzsKLSNl bHNlCi0jaWZkZWYgTUFDCi1zdGF0aWMgY2hhciBkaXJzZXAgPSAnOic7Ci0jZWxzZQotI2lmZGVm IFZNUwotc3RhdGljIGNoYXIgZGlyc2VwID0gJy4nOwotI2Vsc2UKLSNpZmRlZiBTVFJBVFVTCi1z dGF0aWMgY2hhciBkaXJzZXAgPSAnPic7Ci0jZWxzZQotc3RhdGljIGNoYXIgZGlyc2VwID0gJy8n OwkJLyogVU5JWCwgT1MvMiwgT1MtOSwgQW1pZ2EsIGV0Yy4gKi8KLSNlbmRpZiAvKiBTVFJBVFVT ICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogTUFDICovCi0jZW5kaWYgLyogZGF0YWdl bmVyYWwgKi8KLSNlbmRpZiAvKiBHRU1ET1MgKi8KLQotLyogIEggQSBTIE4gTyBQIEEgVCBIICAq LwotCi0vKiAgUmV0dXJucyAwIGlmIGZpbGVzcGVjIHMgaW5jbHVkZXMgYW55IHBhdGggc2VnbWVu dHM7IDEgaWYgaXQgZG9lc24ndC4gKi8KLQotaW50Ci1oYXNub3BhdGgocykgY2hhciAqIHM7IHsK LSAgICBjaGFyICogcCA9IE5VTEw7Ci0gICAgaWYgKCFzKSByZXR1cm4oMCk7Ci0gICAgaWYgKCEq cykgcmV0dXJuKDApOwotICAgIHpzdHJpcChzLCZwKTsKLSAgICByZXR1cm4oY2tzdHJjbXAocyxw LENLTUFYUEFUSCxmaWxlY2FzZSkgPT0gMCA/IDEgOiAwKTsKLX0KLQotLyogIEMgSyBTIFAgUiBF IEEgRCAgLS0gIFByaW50IHN0cmluZyBkb3VibGUtc3BhY2VkICAqLwotCi1zdGF0aWMgY2hhciAq IHNwcnB0ciA9IE5VTEw7Ci0KLXN0YXRpYyBjaGFyICoKLWNrc3ByZWFkKHMpIGNoYXIgKiBzOyB7 Ci0gICAgaW50IG4gPSAwOwotICAgIGNoYXIgKiBwOwotICAgIG4gPSBzdHJsZW4ocyk7Ci0gICAg aWYgKHNwcnB0cikKLSAgICAgIGZyZWUoc3BycHRyKTsKLSAgICBzcHJwdHIgPSBtYWxsb2MobiAr IG4gKyAzKTsKLSAgICBpZiAoc3BycHRyKSB7Ci0JcCA9IHNwcnB0cjsKLQl3aGlsZSAoKnMpIHsK LQkgICAgKnArKyA9ICpzKys7Ci0JICAgICpwKysgPSBTUDsKLQl9Ci0JKnAgPSBOVUw7Ci0gICAg fQotICAgIHJldHVybihzcHJwdHIgPyBzcHJwdHIgOiAiIik7Ci19Ci0KLS8qICBUIEUgUyBUICAt LSAgQml0IHRlc3QgICovCi0KLXN0YXRpYyBpbnQKLXRlc3QoeCxtKSBpbnQgeCwgbTsgeyAvKiAg UmV0dXJucyAxIGlmIGFueSBiaXRzIGZyb20gbSBhcmUgb24gaW4geCwgZWxzZSAwICAqLwotICAg IHJldHVybigoeCAmIG0pID8gMSA6IDApOwotfQotCi0vKiAgSyBXIEQgSCBFIEwgUCAgLS0gIEdp dmVuIGEga2V5d29yZCB0YWJsZSwgcHJpbnQga2V5d29yZHMgaW4gY29sdW1ucy4gICovCi0vKgot ICBDYWxsIHdpdGg6Ci0gICAgcyAgICAgLSBrZXl3b3JkIHRhYmxlCi0gICAgbiAgICAgLSBudW1i ZXIgb2YgZW50cmllcwotICAgIHBhdCAgIC0gcGF0dGVybiAobGVmdCBzdWJzdHJpbmcpIHRoYXQg bXVzdCBtYXRjaCBmb3IgZWFjaCBrZXl3b3JkCi0gICAgcHJlICAgLSBwcmVmaXggdG8gYWRkIHRv IGVhY2gga2V5d29yZAotICAgIHBvc3QgIC0gc3VmZml4IHRvIGFkZCB0byBlYWNoIGtleXdvcmQK LSAgICBvZmYgICAtIG9mZnNldCBvbiBmaXJzdCBzY3JlZW5mdWwsIGFsbG93aW5nIHJvb20gZm9y IGludHJvZHVjdG9yeSB0ZXh0Ci0gICAgeGhscCAgLSAxIHRvIHByaW50IGFueSBDTV9JTlYga2V5 d29yZHMgdGhhdCBhcmUgbm90IGFsc28gYWJicmV2aWF0aW9ucy4KLSAgICAgICAgICAgIDIgdG8g cHJpbnQgQ01fSU5WIGtleXdvcmRzIGlmIENNX0hMUCBhbHNvIHNldAotICAgICAgICAgICAgNCBp ZiBpdCdzIGEgc3dpdGNoIHRhYmxlICh0byBzaG93ICc6JyBpZiBDTV9BUkcpCi0KLSAgQXJyYW5n ZXMga2V5d29yZHMgaW4gY29sdW1ucyB3aXRoIHdpZHRoIGJhc2VkIG9uIGxvbmdlc3Qga2V5d29y ZC4KLSAgRG9lcyAibW9yZT8iIHByb21wdGluZyBhdCBlbmQgb2Ygc2NyZWVuLgotICBVc2VzIGds b2JhbCBjbWRfcm93cyBhbmQgY21kX2NvbHMgZm9yIHNjcmVlbiBzaXplLgotKi8KLVZPSUQKLWt3 ZGhlbHAocyxuLHBhdCxwcmUscG9zdCxvZmYseGhscCkKLSAgICBzdHJ1Y3Qga2V5dGFiIHNbXTsg aW50IG4sIG9mZiwgeGhscDsgY2hhciAqcGF0LCAqcHJlLCAqcG9zdDsKLS8qIGt3ZGhlbHAgKi8g ewotCi0gICAgaW50IHdpZHRoID0gMDsKLSAgICBpbnQgY2M7Ci0gICAgaW50IGNvbHMsIGhlaWdo dCwgaSwgaiwgaywgbGMsIG4yID0gMDsKLSAgICBjaGFyICpiID0gTlVMTCwgKnAsICpxOwotICAg IGNoYXIgKnBhLCAqcHg7Ci0gICAgY2hhciAqKnMyID0gTlVMTDsKLSAgICBjaGFyICp0bXBidWYg PSBOVUxMOwotCi0gICAgY2MgPSBzdHJsZW4ocGF0KTsKLQotICAgIGlmICghcykgcmV0dXJuOwkJ CS8qIE5vdGhpbmcgdG8gZG8gKi8KLSAgICBpZiAobiA8IDEpIHJldHVybjsJCQkvKiBEaXR0byAq LwotICAgIGlmIChvZmYgPCAwKSBvZmYgPSAwOwkJLyogT2Zmc2V0IGZvciBmaXJzdCBwYWdlICov Ci0gICAgaWYgKCFwcmUpIHByZSA9ICIiOwkJCS8qIEhhbmRsZSBudWxsIHN0cmluZyBwb2ludGVy cyAqLwotICAgIGlmICghcG9zdCkgcG9zdCA9ICIiOwotICAgIGxjID0gb2ZmOwkJCQkvKiBTY3Jl ZW4tbGluZSBjb3VudGVyICovCi0KLSAgICBpZiAoeGhscCAmIDQpCQkJLyogRm9yIHN3aXRjaGVz ICovCi0gICAgICB0bXBidWYgPSAoY2hhciAqKW1hbGxvYyhUTVBCVUZTSVorMSk7Ci0KLSAgICBp ZiAoKHMyID0gKGNoYXIgKiopIG1hbGxvYyhuICogc2l6ZW9mKGNoYXIgKikpKSkgewotCWZvciAo aSA9IDA7IGkgPCBuOyBpKyspIHsJLyogRmluZCBsb25nZXN0IGtleXdvcmQgKi8KLQkgICAgczJb aV0gPSBOVUxMOwotCSAgICBpZiAoY2tzdHJjbXAoc1tpXS5rd2QscGF0LGNjLDApKQotCSAgICAg IGNvbnRpbnVlOwotCi0JICAgIGlmIChzW2ldLmZsZ3MgJiBDTV9QU0gJLyogTk9QVVNIIG9yIG5v cHVzaCBzY3JlZW5pbmcgKi8KLSNpZm5kZWYgTk9QVVNICi0JCSYmIG5vcHVzaAotI2VuZGlmIC8q IE5PUFVTSCAqLwotCQkpCi0JICAgICAgY29udGludWU7Ci0JICAgIGlmIChzW2ldLmZsZ3MgJiBD TV9MT0MJLyogTk9MT0NBTCBvciBub2xvY2FsIHNjcmVlbmluZyAqLwotI2lmbmRlZiBOT0xPQ0FM Ci0JCSYmIG5vbG9jYWwKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0JCSkKLQkgICAgICBjb250aW51 ZTsKLQotCSAgICBpZiAoc1tpXS5mbGdzICYgQ01fSU5WKSB7Ci0jaWZkZWYgQ09NTUVOVAotLyog VGhpcyBjb2RlIGRvZXMgbm90IHNob3cgaW52aXNpYmxlIGtleXdvcmRzIGF0IGFsbCBleGNlcHQg Zm9yICJoZWxwID8iICovCi0vKiBhbmQgdGhlbiBvbmx5IGhlbHAgdG9waWNzIChDTV9ITFApIGlu IHRoZSB0b3AtbGV2ZWwga2V5d29yZCBsaXN0LiAqLwotCi0JCWlmICgoeGhscCAmIDIpID09IDAp Ci0JCSAgY29udGludWU7Ci0JCWVsc2UgaWYgKChzW2ldLmZsZ3MgJiBDTV9ITFApID09IDApCi0J CSAgY29udGludWU7Ci0jZWxzZQotLyogVGhpcyBjb2RlIHNob3dzIGludmlzaWJsZSBrZXl3b3Jk cyB0aGF0IGFyZSBub3QgYWxzbyBhYmJyZXZpYXRpb25zIHdoZW4gKi8KLS8qID8gd2FzIHR5cGVk IEFGVEVSIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpZWxkIHNvIHRoZSB1c2VyIGNhbiBmaW5kIG91 dCAqLwotLyogd2hhdCB0aGV5IGFyZSBhbmQgKGZvciBleGFtcGxlKSB3aHkgY29tcGxldGlvbiBk b2Vzbid0IHdvcmsgYXQgdGhpcyBwb2ludCAqLwotCi0JCWlmIChzW2ldLmZsZ3MgJiBDTV9BQlIp Ci0JCSAgY29udGludWU7Ci0JCWVsc2UgaWYgKCh4aGxwICYgMykgPT0gMCkKLQkJICBjb250aW51 ZTsKLQkJZWxzZSBpZiAoKHhobHAgJiAyKSAmJiAoKHNbaV0uZmxncyAmIENNX0hMUCkgPT0gMCkp Ci0JCSAgY29udGludWU7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCSAgICB9Ci0JICAgIGogPSBz dHJsZW4oc1tpXS5rd2QpOwotCSAgICBpZiAoISh4aGxwICYgNCkgfHwgIXRtcGJ1ZikgeyAvKiBS ZWd1bGFyIGtleXdvcmQgdGFibGUgKi8KLQkJczJbbjIrK10gPSBzW2ldLmt3ZDsJLyogQ29weSBw b2ludGVycyB0byB2aXNpYmxlIG9uZXMgKi8KLQkgICAgfSBlbHNlIHsJCQkvKiBTd2l0Y2hlcyAq LwotCQlja21ha21zZyh0bXBidWYsCS8qIE1ha2UgYSBjb3B5IHRoYXQgc2hvd3MgIjoiIGlmICov Ci0JCQkgVE1QQlVGU0laLAkvKiB0aGUgc3dpdGNoIHRha2VzIGFuIGFyZ3VtZW50LiAqLwotCQkJ IHNbaV0ua3dkLAotCQkJIChzW2ldLmZsZ3MgJiBDTV9BUkcpID8gIjoiIDogIiIsCi0JCQkgTlVM TCwKLQkJCSBOVUxMCi0JCQkgKTsKLQkJbWFrZXN0cigmKHMyW24yXSksdG1wYnVmKTsKLQkJaWYg KHNbaV0uZmxncyAmIENNX0FSRykgaisrOwotCQluMisrOwotCSAgICB9Ci0JICAgIGlmIChqID4g d2lkdGgpCi0JICAgICAgd2lkdGggPSBqOwotCX0KLQkvKiBDb2x1bW4gd2lkdGggKi8KLQluID0g bjI7Ci0gICAgfQotICAgIGlmIChzMiAmJiAoYiA9IChjaGFyICopIG1hbGxvYyhjbWRfY29scyAr IDEpKSkgeyAvKiBNYWtlIGEgbGluZSBidWZmZXIgICAqLwotCWNoYXIgKiBieDsKLQlieCA9IGIg KyBjbWRfY29sczsKLQl3aWR0aCArPSAoaW50KXN0cmxlbihwcmUpICsgKGludClzdHJsZW4ocG9z dCkgKyAyOwotCWNvbHMgPSBjbWRfY29scyAvIHdpZHRoOwkvKiBIb3cgbWFueSBjb2x1bW5zPyAq LwotCWlmIChjb2xzIDwgMSkgY29scyA9IDE7Ci0JaGVpZ2h0ID0gbiAvIGNvbHM7CQkvKiBIb3cg bG9uZyBpcyBlYWNoIGNvbHVtbj8gKi8KLQlpZiAobiAlIGNvbHMpIGhlaWdodCsrOwkJLyogQWRk IG9uZSBmb3IgcmVtYWluZGVyLCBpZiBhbnkgKi8KLQotCWZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7 IGkrKykgewkgICAgLyogTG9vcCBmb3IgZWFjaCByb3cgKi8KLQkgICAgZm9yIChqID0gMDsgaiA8 IGNtZF9jb2xzOyBqKyspICAvKiBGaXJzdCBmaWxsIHJvdyB3aXRoIGJsYW5rcyAqLwotCSAgICAg IGJbal0gPSBTUDsKLQkgICAgZm9yIChqID0gMDsgaiA8IGNvbHM7IGorKykgeyAgICAvKiBMb29w IGZvciBlYWNoIGNvbHVtbiBpbiByb3cgKi8KLQkJayA9IGkgKyAoaiAqIGhlaWdodCk7ICAgICAg IC8qIEluZGV4IG9mIG5leHQga2V5d29yZCAqLwotCQlpZiAoayA8IG4pIHsJCSAgICAvKiBJbiBy YW5nZT8gKi8KLQkJICAgIHBhID0gcHJlOwotCQkgICAgcHggPSBwb3N0OwotCQkgICAgcCA9IHMy W2tdOwkJICAgIC8qIFBvaW50IHRvIHZlcmIgbmFtZSAqLwotCQkgICAgcSA9IGIgKyAoaiAqIHdp ZHRoKSArIDE7IC8qIFdoZXJlIHRvIGNvcHkgaXQgdG8gKi8KLQkJICAgIHdoaWxlICgocSA8IGJ4 KSAmJiAoKnErKyA9ICpwYSsrKSkgOyAvKiBDb3B5IHByZWZpeCAqLwotCQkgICAgcS0tOwkJICAg ICAgICAgICAgICAgICAvKiBCYWNrIHVwIG92ZXIgTlVMICovCi0JCSAgICB3aGlsZSAoKHEgPCBi eCkgJiYgKCpxKysgPSAqcCsrKSkgOwkgLyogQ29weSBmaWxlbmFtZSAqLwotCQkgICAgcS0tOwkJ ICAgICAgICAgICAgICAgICAvKiBCYWNrIHVwIG92ZXIgTlVMICovCi0JCSAgICB3aGlsZSAoKHEg PCBieCkgJiYgKCpxKysgPSAqcHgrKykpIDsgLyogQ29weSBzdWZmaXggKi8KLQkJICAgIGlmIChq IDwgY29scyAtIDEpIHsKLQkJCXEtLTsKLQkJCSpxID0gU1A7CS8qIFJlcGxhY2UgdGhlIHNwYWNl ICovCi0JCSAgICB9Ci0JCX0KLQkgICAgfQotCSAgICBwID0gYiArIGNtZF9jb2xzIC0gMTsJLyog TGFzdCBjaGFyIGluIGxpbmUgKi8KLQkgICAgd2hpbGUgKCpwLS0gPT0gU1ApIDsJLyogVHJpbSAq LwotCSAgICAqKHArMikgPSBOVUw7Ci0JICAgIHByaW50ZigiJXNcbiIsYik7CQkvKiBQcmludCB0 aGUgbGluZSAqLwotCSAgICBpZiAoKytsYyA+IChjbWRfcm93cyAtIDIpKSB7IC8qIFNjcmVlbiBm dWxsPyAqLwotCQlpZiAoIWFza21vcmUoKSkJCS8qIERvIG1vcmUtcHJvbXB0aW5nLi4uICovCi0J CSAgZ290byB4a3dkaGVscDsKLQkJZWxzZQotCQkgIGxjID0gMDsKLQkgICAgfQotCX0KLQkvKiBw cmludGYoIlxuIik7ICovCQkvKiBCbGFuayBsaW5lIGF0IGVuZCBvZiByZXBvcnQgKi8KLSAgICB9 IGVsc2UgewkJCQkvKiBNYWxsb2MgZmFpbHVyZSwgbm8gY29sdW1ucyAqLwotCWZvciAoaSA9IDA7 IGkgPCBuOyBpKyspIHsKLQkgICAgaWYgKHNbaV0uZmxncyAmIENNX0lOVikJLyogVXNlIG9yaWdp bmFsIGtleXdvcmQgdGFibGUgKi8KLQkgICAgICBjb250aW51ZTsJCQkvKiBza2lwcGluZyBpbnZp c2libGUgZW50cmllcyAqLwotCSAgICBwcmludGYoIiVzJXMlc1xuIixwcmUsc1tpXS5rd2QscG9z dCk7Ci0JICAgIGlmICgrK2xjID4gKGNtZF9yb3dzIC0gMikpIHsgLyogU2NyZWVuIGZ1bGw/ICov Ci0JCWlmICghYXNrbW9yZSgpKQkJLyogRG8gbW9yZS1wcm9tcHRpbmcuLi4gKi8KLQkJICBnb3Rv IHhrd2RoZWxwOwotCQllbHNlCi0JCSAgbGMgPSAwOwotCSAgICB9Ci0JfQotICAgIH0KLSAgeGt3 ZGhlbHA6Ci0gICAgaWYgKHhobHAgJiA0KSB7Ci0JaWYgKHRtcGJ1ZikgZnJlZSgoY2hhciAqKXRt cGJ1Zik7Ci0JZm9yIChpID0gMDsgaSA8IG47IGkrKykKLQkgIGlmIChzMltpXSkgZnJlZShzMltp XSk7Ci0gICAgfQotICAgIGlmIChzMikgZnJlZShzMik7CQkJLyogRnJlZSBhcnJheSBjb3B5ICov Ci0gICAgaWYgKGIpIGZyZWUoYik7CQkJLyogRnJlZSBsaW5lIGJ1ZmZlciAqLwotICAgIHJldHVy bjsKLX0KLQotLyogIFggRiBJIEwgSCBFIEwgUCAgLS0gIEdpdmVuIGEgZmlsZSBsaXN0LCBwcmlu dCBuYW1lcyBpbiBjb2x1bW5zLiAgKi8KLS8qCi0gIENhbGwgd2l0aDoKLSAgICBuICAgICAtIG51 bWJlciBvZiBlbnRyaWVzCi0gICAgcHJlICAgLSBwcmVmaXggdG8gYWRkIHRvIGVhY2ggZmlsZW5h bWUKLSAgICBwb3N0ICAtIHN1ZmZpeCB0byBhZGQgdG8gZWFjaCBmaWxlbmFtZQotICAgIG9mZiAg IC0gb2Zmc2V0IG9uIGZpcnN0IHNjcmVlbmZ1bCwgYWxsb3dpbmcgcm9vbSBmb3IgaW50cm9kdWN0 b3J5IHRleHQKLSAgICBjbWRpcmZsZyAtIDEgaWYgb25seSBkaXJlY3RvcnkgbmFtZXMgc2hvdWxk IGJlIGxpc3RlZCwgMCB0byBsaXN0IGFsbCBmaWxlcwotICAgIGZzICAgIC0gY2FsbCBmaWxlc2Vs ZWN0KCkgdG8gZGVjaWRlIHdoZXRoZXIgdG8gaW5jbHVkZSBlYWNoIGZpbGUuCi0gICAgVGhlIHJl c3Qgb2YgdGhlIGFyZ3MgYXJlIHRoZSBzYW1lIGFzIGZvciBmaWxlc2VsZWN0KCkuCi0KLSAgQXJy YW5nZXMgZmlsZW5hbWVzIGluIGNvbHVtbnMgd2l0aCB3aWR0aCBiYXNlZCBvbiBsb25nZXN0IGZp bGVuYW1lLgotICBEb2VzICJtb3JlPyIgcHJvbXB0aW5nIGF0IGVuZCBvZiBzY3JlZW4uCi0gIFVz ZXMgZ2xvYmFsIGNtZF9yb3dzIGFuZCBjbWRfY29scyBmb3Igc2NyZWVuIHNpemUuCi0qLwotCi1p bnQKLSNpZmRlZiBDS19BTlNJQwoteGZpbGhlbHAoCi0gICAgaW50IG4sIGNoYXIgKnByZSwgY2hh ciAqcG9zdCwgaW50IG9mZiwgaW50IGNtZGlyZmxhZywKLSAgICBpbnQgZnMsIGNoYXIgKnNhLCBj aGFyICpzYiwgY2hhciAqc25hLCBjaGFyICpzbmIsCi0gICAgQ0tfT0ZGX1QgbWluc2l6LCBDS19P RkZfVCBtYXhzaXosCi0gICAgaW50IG5idSwgaW50IG54bGlzdCwKLSAgICBjaGFyICoqIHhsaXN0 Ci0pCi0jZWxzZQoteGZpbGhlbHAobixwcmUscG9zdCxvZmYsY21kaXJmbGcsCi0JIGZzLHNhLHNi LHNuYSxzbmIsbWluc2l6LG1heHNpeixuYnUsbnhsaXN0LHhsaXN0KQotICAgIGludCBuLCBvZmY7 IGNoYXIgKnByZSwgKnBvc3Q7IGludCBjbWRpcmZsZzsKLSAgICBpbnQgZnM7IGNoYXIgKnNhLCpz Yiwqc25hLCpzbmI7IENLX09GRl9UIG1pbnNpeixtYXhzaXo7Ci0gICAgaW50IG5idSxueGxpc3Q7 IGNoYXIgKiogeGxpc3Q7Ci0jZW5kaWYJLyogQ0tfQU5TSUMgKi8KLSB7Ci0gICAgY2hhciBmaWxi dWZbQ0tNQVhQQVRIICsgMV07CQkvKiBUZW1wIGJ1ZmZlciBmb3Igb25lIGZpbGVuYW1lICovCi0g ICAgaW50IHdpZHRoID0gMDsKLSAgICBpbnQgY29scywgaGVpZ2h0LCBpLCBqLCBrLCBsYywgbjIg PSAwLCByYyA9IDAsIGl0c2FkaXIgPSAwOwotICAgIGNoYXIgKmIgPSBOVUxMLCAqcCwgKnE7Ci0g ICAgY2hhciAqcGEsICpweDsKLSAgICBjaGFyICoqczIgPSBOVUxMOwotI2lmZGVmIFZNUwotICAg IGNoYXIgKiBjZHAgPSB6Z3RkaXIoKTsKLSNlbmRpZiAvKiBWTVMgKi8KLQotICAgIGlmIChuIDwg MSkgcmV0dXJuKDApOwotICAgIGlmIChvZmYgPCAwKSBvZmYgPSAwOwkJLyogT2Zmc2V0IGZvciBm aXJzdCBwYWdlICovCi0gICAgaWYgKCFwcmUpIHByZSA9ICIiOwkJCS8qIEhhbmRsZSBudWxsIHN0 cmluZyBwb2ludGVycyAqLwotICAgIGlmICghcG9zdCkgcG9zdCA9ICIiOwotCi0gICAgbGMgPSBv ZmY7CQkJCS8qIFNjcmVlbi1saW5lIGNvdW50ZXIgKi8KLQotICAgIGlmICgoczIgPSAoY2hhciAq KikgbWFsbG9jKG4gKiBzaXplb2YoY2hhciAqKSkpKSB7Ci0JZm9yIChpID0gMDsgaSA8IG47IGkr KykgewkvKiBMb29wIHRocm91Z2ggZmlsZW5hbWVzICovCi0JICAgIGl0c2FkaXIgPSAwOwotCSAg ICBzMltpXSA9IE5VTEw7CQkvKiBJbml0aWFsaXplIGVhY2ggcG9pbnRlciB0byBOVUxMICovCi0J ICAgIHpuZXh0KGZpbGJ1Zik7CQkvKiBHZXQgbmV4dCBmaWxlbmFtZSAqLwotCSAgICBpZiAoIWZp bGJ1ZlswXSkJCS8qIFNob3VsZG4ndCBoYXBwZW4gKi8KLQkgICAgICBicmVhazsKLSNpZmRlZiBD T01NRU5UCi0JICAgIGl0c2FkaXIgPSBpc2RpcihmaWxidWYpOwkvKiBJcyBpdCBhIGRpcmVjdG9y eT8gKi8KLQkgICAgaWYgKGNtZGlyZmxnICYmICFpdHNhZGlyKQkvKiBObywgbGlzdGluZyBkaXJl Y3RvcmllcyBvbmx5PyAqLwotCSAgICAgIGNvbnRpbnVlOwkJCS8qIFNvIHNraXAgdGhpcyBvbmUu ICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCSAgICBpZiAoZnMpIGlmIChmaWxlc2VsZWN0KGZp bGJ1ZiwKLQkJCSAgIHNhLHNiLHNuYSxzbmIsCi0JCQkgICBtaW5zaXosbWF4c2l6LG5idSxueGxp c3QseGxpc3QpIDwgMSkgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQkgICAgfQot I2lmZGVmIFZNUwotCSAgICBja3N0cm5jcHkoZmlsYnVmLHpyZWxuYW1lKGZpbGJ1ZixjZHApLENL TUFYUEFUSCk7Ci0jZW5kaWYgLyogVk1TICovCi0JICAgIGogPSBzdHJsZW4oZmlsYnVmKTsKLSNp Zm5kZWYgVk1TCi0JICAgIGlmIChpdHNhZGlyICYmIGogPCBDS01BWFBBVEggLSAxICYmIGogPiAw KSB7Ci0JCWlmIChmaWxidWZbai0xXSAhPSBkaXJzZXApIHsKLQkJICAgIGZpbGJ1ZltqKytdID0g ZGlyc2VwOwotCQkgICAgZmlsYnVmW2pdID0gTlVMOwotCQl9Ci0JICAgIH0KLSNlbmRpZiAvKiBW TVMgKi8KLQkgICAgaWYgKCEoczJbbjJdID0gbWFsbG9jKGorMSkpKSB7Ci0JCXByaW50ZigiP01l bW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIpOwotCQlyYyA9IC05OwotCQlnb3RvIHhmaWxoZWxw OwotCSAgICB9Ci0JICAgIGlmIChqIDw9IENLTUFYUEFUSCkgewotCQlzdHJjcHkoczJbbjJdLGZp bGJ1Zik7Ci0JCW4yKys7Ci0JICAgIH0gZWxzZSB7Ci0JCXByaW50ZigiP05hbWUgdG9vIGxvbmcg LSAlc1xuIiwgZmlsYnVmKTsKLQkJcmMgPSAtOTsKLQkJZ290byB4ZmlsaGVscDsKLQkgICAgfQot CSAgICBpZiAoaiA+IHdpZHRoKQkJLyogR2V0IHdpZHRoIG9mIHdpZGVzdCBvbmUgKi8KLQkgICAg ICB3aWR0aCA9IGo7Ci0JfQotCW4gPSBuMjsJCQkJLyogSG93IG1hbnkgd2UgYWN0dWFsbHkgZ290 ICovCi0gICAgfQotICAgIHNoX3NvcnQoczIsTlVMTCxuLDAsMCxmaWxlY2FzZSk7CS8qIEFscGhh YmV0aXplIHRoZSBsaXN0ICovCi0KLSAgICByYyA9IDE7Ci0gICAgaWYgKHMyICYmIChiID0gKGNo YXIgKikgbWFsbG9jKGNtZF9jb2xzICsgMSkpKSB7IC8qIE1ha2UgYSBsaW5lIGJ1ZmZlciAqLwot CWNoYXIgKiBieDsKLQlieCA9IGIgKyBjbWRfY29sczsKLQl3aWR0aCArPSAoaW50KXN0cmxlbihw cmUpICsgKGludClzdHJsZW4ocG9zdCkgKyAyOwotCWNvbHMgPSBjbWRfY29scyAvIHdpZHRoOwkv KiBIb3cgbWFueSBjb2x1bW5zPyAqLwotCWlmIChjb2xzIDwgMSkgY29scyA9IDE7Ci0JaGVpZ2h0 ID0gbiAvIGNvbHM7CQkvKiBIb3cgbG9uZyBpcyBlYWNoIGNvbHVtbj8gKi8KLQlpZiAobiAlIGNv bHMpIGhlaWdodCsrOwkJLyogQWRkIG9uZSBmb3IgcmVtYWluZGVyLCBpZiBhbnkgKi8KLQotCWZv ciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewkgICAgLyogTG9vcCBmb3IgZWFjaCByb3cgKi8K LQkgICAgZm9yIChqID0gMDsgaiA8IGNtZF9jb2xzOyBqKyspICAvKiBGaXJzdCBmaWxsIHJvdyB3 aXRoIGJsYW5rcyAqLwotCSAgICAgIGJbal0gPSBTUDsKLQkgICAgZm9yIChqID0gMDsgaiA8IGNv bHM7IGorKykgeyAgICAvKiBMb29wIGZvciBlYWNoIGNvbHVtbiBpbiByb3cgKi8KLQkJayA9IGkg KyAoaiAqIGhlaWdodCk7ICAgICAgIC8qIEluZGV4IG9mIG5leHQgZmlsZW5hbWUgKi8KLQkJaWYg KGsgPCBuKSB7CQkgICAgLyogSW4gcmFuZ2U/ICovCi0JCSAgICBwYSA9IHByZTsKLQkJICAgIHB4 ID0gcG9zdDsKLQkJICAgIHAgPSBzMltrXTsJCSAgICAgICAgICAgICAgIC8qIFBvaW50IHRvIGZp bGVuYW1lICovCi0JCSAgICBxID0gYiArIChqICogd2lkdGgpICsgMTsgICAgICAgICAgICAgLyog YW5kIGRlc3RpbmF0aW9uICovCi0JCSAgICB3aGlsZSAoKHEgPCBieCkgJiYgKCpxKysgPSAqcGEr KykpIDsgLyogQ29weSBwcmVmaXggKi8KLQkJICAgIHEtLTsJCSAgICAgICAgICAgICAgICAgLyog QmFjayB1cCBvdmVyIE5VTCAqLwotCQkgICAgd2hpbGUgKChxIDwgYngpICYmICgqcSsrID0gKnAr KykpIDsJIC8qIENvcHkgZmlsZW5hbWUgKi8KLQkJICAgIHEtLTsJCSAgICAgICAgICAgICAgICAg LyogQmFjayB1cCBvdmVyIE5VTCAqLwotCQkgICAgd2hpbGUgKChxIDwgYngpICYmICgqcSsrID0g KnB4KyspKSA7IC8qIENvcHkgc3VmZml4ICovCi0JCSAgICBpZiAoaiA8IGNvbHMgLSAxKSB7Ci0J CQlxLS07Ci0JCQkqcSA9IFNQOwkvKiBSZXBsYWNlIHRoZSBzcGFjZSAqLwotCQkgICAgfQotCQl9 Ci0JICAgIH0KLQkgICAgcCA9IGIgKyBjbWRfY29scyAtIDE7CS8qIExhc3QgY2hhciBpbiBsaW5l ICovCi0JICAgIHdoaWxlICgqcC0tID09IFNQKSA7CS8qIFRyaW0gKi8KLQkgICAgKihwKzIpID0g TlVMOwotCSAgICBwcmludGYoIiVzXG4iLGIpOwkJLyogUHJpbnQgdGhlIGxpbmUgKi8KLQkgICAg aWYgKCsrbGMgPiAoY21kX3Jvd3MgLSAyKSkgeyAvKiBTY3JlZW4gZnVsbD8gKi8KLQkJaWYgKCFh c2ttb3JlKCkpIHsJLyogRG8gbW9yZS1wcm9tcHRpbmcuLi4gKi8KLQkJICAgIHJjID0gMDsKLQkJ ICAgIGdvdG8geGZpbGhlbHA7Ci0JCX0gZWxzZQotCQkgIGxjID0gMDsKLQkgICAgfQotCX0KLQlw cmludGYoIlxuIik7CQkJLyogQmxhbmsgbGluZSBhdCBlbmQgb2YgcmVwb3J0ICovCi0JZ290byB4 ZmlsaGVscDsKLSAgICB9IGVsc2UgewkJCQkvKiBNYWxsb2MgZmFpbHVyZSwgbm8gY29sdW1ucyAq LwotCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLQkgICAgem5leHQoZmlsYnVmKTsKLQkgICAg aWYgKCFmaWxidWZbMF0pIGJyZWFrOwotCSAgICBwcmludGYoIiVzJXMlc1xuIixwcmUsZmlsYnVm LHBvc3QpOwotCSAgICBpZiAoKytsYyA+IChjbWRfcm93cyAtIDIpKSB7IC8qIFNjcmVlbiBmdWxs PyAqLwotCQlpZiAoIWFza21vcmUoKSkgewkgLyogRG8gbW9yZS1wcm9tcHRpbmcuLi4gKi8KLQkJ ICAgIHJjID0gMDsKLQkJICAgIGdvdG8geGZpbGhlbHA7Ci0JCX0gZWxzZSBsYyA9IDA7Ci0JICAg IH0KLQl9Ci14ZmlsaGVscDoKLQlpZiAoYikgZnJlZShiKTsKLQlmb3IgKGkgPSAwOyBpIDwgbjI7 IGkrKykKLQkgIGlmIChzMltpXSkgZnJlZShzMltpXSk7Ci0JaWYgKHMyKSBmcmVlKChjaGFyICop czIpOwotCXJldHVybihyYyk7Ci0gICAgfQotfQotCi0vKgotICBTaW1wbGVyIGZyb250IGVuZCBm b3IgeGZpbGhlbHAoKSB3aXRoIHNob3J0ZXIgYXJnIGxpc3Qgd2hlbiBubwotICBmaWxlIHNlbGVj dGlvbiBpcyBuZWVkZWQuCi0qLwotaW50Ci1maWxoZWxwKG4scHJlLHBvc3Qsb2ZmLGNtZGlyZmxn KSBpbnQgbiwgb2ZmOyBjaGFyICpwcmUsICpwb3N0OyBpbnQgY21kaXJmbGc7IHsKLSAgICByZXR1 cm4oeGZpbGhlbHAobixwcmUscG9zdCxvZmYsY21kaXJmbGcsCi0JCSAgICAwLE5VTEwsTlVMTCxO VUxMLE5VTEwsCi0JCSAgICAoQ0tfT0ZGX1QpMCwoQ0tfT0ZGX1QpMCwwLDAsKGNoYXIgKiopTlVM TCkpOwotfQotCi0vKiAgQyBNIFMgRSBUIFUgUCAgLS0gIFNldCB1cCBjb21tYW5kIGJ1ZmZlcnMg ICovCi0KLSNpZmRlZiBEQ01EQlVGCi1pbnQKLWNtc2V0dXAoKSB7Ci0gICAgaWYgKCEoY21kYnVm ID0gbWFsbG9jKENNREJMICsgNCkpKSByZXR1cm4oLTEpOwotICAgIGlmICghKHNhdmJ1ZiA9IG1h bGxvYyhDTURCTCArIDQpKSkgcmV0dXJuKC0xKTsKLSAgICBzYXZidWZbMF0gPSAnXDAnOwotICAg IGlmICghKHByZXZjbWQgPSBtYWxsb2MoQ01EQkwgKyA0KSkpIHJldHVybigtMSk7Ci0gICAgcHJl dmNtZFswXSA9ICdcMCc7Ci0gICAgaWYgKCEoYXRtYnVmID0gbWFsbG9jKEFUTUJMICsgNCkpKSBy ZXR1cm4oLTEpOwotICAgIGlmICghKGF0eGJ1ZiA9IG1hbGxvYyhDTURCTCArIDQpKSkgcmV0dXJu KC0xKTsKLSAgICBpZiAoIShhdHlidWYgPSBtYWxsb2MoQVRNQkwgKyA0KSkpIHJldHVybigtMSk7 Ci0gICAgaWYgKCEoZmlsYnVmID0gbWFsbG9jKEFUTUJMICsgNCkpKSByZXR1cm4oLTEpOwotICAg IGlmICghKGNtcHJvbSA9IG1hbGxvYyhQUk9NUFRMICsgNCkpKSByZXR1cm4oLTEpOwotICAgIGlm ICghKGNtcHJ4eCA9IG1hbGxvYyhQUk9NUFRMICsgNCkpKSByZXR1cm4oLTEpOwotI2lmZGVmIENL X1JFQ0FMTAotICAgIGNtcmluaShjbV9yZWNhbGwpOwotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwot ICAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAvKiBEQ01EQlVGICovCi0KLS8qICBDIE0gUyBFIFQg UCAgLS0gIFNldCB0aGUgcHJvZ3JhbSBwcm9tcHQuICAqLwotCi1WT0lECi1jbXNldHAocykgY2hh ciAqczsgewotICAgIGlmICghcykgcyA9ICIiOwotICAgIGNrc3RybmNweShjbXByeHgscyxQUk9N UFRMKTsKLSAgICBwc2V0ZiA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIHRo YXQgcHJvbXB0IGhhcyBiZWVuIHNldC4gKi8KLX0KLQotLyogIEMgTSBTIEEgViBQICAtLSAgU2F2 ZSBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgcHJvbXB0LiAgKi8KLQotVk9JRAotI2lmZGVmIENLX0FO U0lDCi1jbXNhdnAoY2hhciBzW10sIGludCBuKQotI2Vsc2UKLWNtc2F2cChzLG4pIGNoYXIgc1td OyBpbnQgbjsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogY21zYXZwICovIHsKLSAgICBpZiAo cHNldGYpCQkJCS8qIEJ1dCBub3QgaWYgbm8gcHJvbXB0IGlzIHNldC4gKi8KLSAgICAgIGNrc3Ry bmNweShzLGNtcHJ4eCxuKTsKLX0KLQotY2hhciAqCi1jbWdldHAoKSB7Ci0gICAgcmV0dXJuKGNt cHJ4eCk7Ci19Ci0KLWludAotY21nYnJrKCkgewotICAgIHJldHVybihicmtjaGFyKTsKLX0KLQot aW50Ci1jbWdrd2ZsZ3MoKSB7Ci0gICAgcmV0dXJuKGNta3dmbGdzKTsKLX0KLQotLyogIFAgUiBP IE0gUCBUICAtLSAgSXNzdWUgdGhlIHByb2dyYW0gcHJvbXB0LiAgKi8KLQotVk9JRAotcHJvbXB0 KGYpIHh4X3N0cnAgZjsgewotICAgIGNoYXIgKnN4LCAqc3k7IGludCBuOwotI2lmZGVmIENLX1NT TAotICAgIGV4dGVybiBpbnQgc3NsX2FjdGl2ZV9mbGFnLCB0bHNfYWN0aXZlX2ZsYWc7Ci0jZW5k aWYgLyogQ0tfU1NMICovCi0jaWZkZWYgT1MyCi0gICAgZXh0ZXJuIGludCBkaXNwbGF5X2RlbW87 Ci0KLSAgICAvKiBJZiB0aGVyZSBpcyBhIGRlbW8gc2NyZWVuIHRvIGJlIGRpc3BsYXllZCwgZGlz cGxheSBpdCAqLwotICAgIGlmIChkaXNwbGF5X2RlbW8gJiYgeGNtZHNyYyA9PSAwKSB7Ci0gICAg ICAgIGRlbW9zY3JuKFZDTUQpOwotICAgICAgICBkaXNwbGF5X2RlbW8gPSAwOwotICAgIH0KLSNl bmRpZiAvKiBPUzIgKi8KLQotICAgIGlmIChwc2V0ZiA9PSAwKQkJCS8qIElmIG5vIHByb21wdCBz ZXQsIHNldCBkZWZhdWx0LiAqLwotICAgICAgY21zZXRwKGRmcHJvbSk7Ci0KLSAgICBzeCA9IGNt cHJ4eDsJCQkvKiBVbmV2YWx1YXRlZCBjb3B5ICovCi0gICAgaWYgKGYpIHsJCQkJLyogSWYgY29u dmVyc2lvbiBmdW5jdGlvbiBnaXZlbiAqLwotCXN5ID0gY21wcm9tOwkJCS8qIEV2YWx1YXRlIGl0 ICovCi0jaWZkZWYgQ09NTUVOVAotCWRlYnVnKEYxMDEsInByb21wdCBzeCIsIiIsc3gpOwotCWRl YnVnKEYxMDEsInByb21wdCBzeSIsIiIsc3kpOwotI2VuZGlmCS8qIENPTU1FTlQgKi8KLQluID0g UFJPTVBUTDsKLQlpZiAoKCpmKShzeCwmc3ksJm4pIDwgMCkJLyogSWYgZXZhbHVhdGlvbiBmYWls ZWQgKi8KLQkgIHN4ID0gY21wcnh4OwkJCS8qIHJldmVydCB0byB1bmV2YWx1YXRlZCBjb3B5ICov Ci0JZWxzZSBpZiAoISpjbXByb20pCQkvKiBkaXR0byBpZiBpdCBjYW1lIHVwIGVtcHR5ICovCi0J ICBzeCA9IGNtcHJ4eDsKLQllbHNlCi0JICBzeCA9IGNtcHJvbTsKLSAgICB9IGVsc2UKLSAgICAg IGNrc3RybmNweShjbXByb20sc3gsUFJPTVBUTCk7Ci0gICAgY21wcm9tW1BST01QVEwtMV0gPSBO VUw7Ci0gICAgaWYgKCEqc3gpCQkJCS8qIERvbid0IHByaW50IGlmIGVtcHR5ICovCi0gICAgICBy ZXR1cm47Ci0KLSNpZmRlZiBPU0sKLSAgICBmcHV0cyhzeCwgc3Rkb3V0KTsKLSNlbHNlCi0jaWZk ZWYgTUFDCi0gICAgcHJpbnRmKCIlcyIsIHN4KTsKLSNlbHNlCi0jaWZkZWYgSUtTRAotICAgIGlm IChpbnNlcnZlcikgewkJCS8qIFByaW50IHRoZSBwcm9tcHQuICovCi0gICAgICAgIHR0b2MoQ1Ip OwkJCS8qIElmIFRFTE5FVCBTZXJ2ZXIgKi8KLSAgICAgICAgdHRvYyhOVUwpOwkJCS8qIG11c3Qg Zm9sbG9XIENSIGJ5IE5VTCAqLwotICAgICAgICBwcmludGYoIiVzIixzeCk7Ci0gICAgfSBlbHNl Ci0jZW5kaWYgLyogSUtTRCAqLwotICAgICAgcHJpbnRmKCJcciVzIixzeCk7Ci0jaWZkZWYgQ0tf U1NMCi0gICAgaWYgKCEoc3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykpCi0jZW5k aWYgLyogQ0tfU1NMICovCi0gICAgICBmZmx1c2goc3Rkb3V0KTsJCQkvKiBOb3chICovCi0jZW5k aWYgLyogTUFDICovCi0jZW5kaWYgLyogT1NLICovCi19Ci0KLSNpZm5kZWYgTk9TUEwKLVZPSUQK LXB1c2hjbWQocykgY2hhciAqIHM7IHsJCQkvKiBGb3IgdXNlIHdpdGggSUYgY29tbWFuZC4gKi8K LSAgICBpZiAoIXMpIHMgPSBucDsKLSAgICBja3N0cm5jcHkoc2F2YnVmLHMsQ01EQkwpOwkJLyog U2F2ZSB0aGUgZGVwZW5kZW50IGNsYXVzZSwgICovCi0gICAgY21yZXMoKTsJCQkJLyogYW5kIGNs ZWFyIHRoZSBjb21tYW5kIGJ1ZmZlci4gKi8KLSAgICBkZWJ1ZyhGMTEwLCAicHVzaGNtZCBzYXZi dWYiLCBzYXZidWYsIDApOwotfQotCi1WT0lECi1wdXNocWNtZChzKSBjaGFyICogczsgewkJCS8q IEZvciB1c2Ugd2l0aCBFTFNFIGNvbW1hbmQuICovCi0gICAgY2hhciBjLCAqIHAgPSBzYXZidWY7 CQkvKiBEZXN0ICovCi0gICAgaWYgKCFzKSBzID0gbnA7CQkJLyogU291cmNlICovCi0gICAgd2hp bGUgKCpzKSB7CQkJLyogR2V0IGZpcnN0IG5vbndoaXRlc3BhY2UgY2hhciAqLwotCWlmICgqcyAh PSBTUCkKLQkgIGJyZWFrOwotCWVsc2UKLQkgIHMrKzsKLSAgICB9Ci0gICAgaWYgKCpzICE9ICd7 JykgewkJCS8qIElmIGl0J3Mgbm90ICJ7IiAqLwotCXB1c2hjbWQocyk7CQkJLyogZG8gcmVndWxh ciBwdXNoY21kICovCi0JcmV0dXJuOwotICAgIH0KLSAgICB3aGlsZSAoKGMgPSAqcysrKSkgewkJ LyogT3RoZXJ3aXNlIGluc2VydCBxdW90ZXMgKi8KLQlpZiAoYyA9PSBDTURRKQotCSAgKnArKyA9 IENNRFE7Ci0JKnArKyA9IGM7Ci0gICAgfQotICAgIGNtcmVzKCk7CQkJCS8qIGFuZCBjbGVhciB0 aGUgY29tbWFuZCBidWZmZXIuICovCi0gICAgZGVidWcoRjExMCwgInB1c2hxY21kIHNhdmJ1ZiIs IHNhdmJ1ZiwgMCk7Ci19Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmZGVmIENPTU1FTlQKLS8q IG5vIGxvbmdlciB1c2VkLi4uICovCi1WT0lECi1wb3BjbWQoKSB7Ci0gICAgY2tzdHJuY3B5KGNt ZGJ1ZixzYXZidWYsQ01EQkwpOwkvKiBQdXQgYmFjayB0aGUgc2F2ZWQgbWF0ZXJpYWwgKi8KLSAg ICAqc2F2YnVmID0gJ1wwJzsJCQkvKiBhbmQgY2xlYXIgdGhlIHNhdmUgYnVmZmVyICovCi0gICAg Y21yZXMoKTsKLX0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLS8qICBDIE0gUiBFIFMgIC0tICBS ZXNldCBwb2ludGVycyB0byBiZWdpbm5pbmcgb2YgY29tbWFuZCBidWZmZXIuICAqLwotCi1WT0lE Ci1jbXJlcygpIHsKLSAgICBpbndvcmQgPSAwOwkJCQkvKiBXZSdyZSBub3QgaW4gYSB3b3JkICov Ci0gICAgY2MgPSAwOwkJCQkvKiBDaGFyYWN0ZXIgY291bnQgaXMgemVybyAqLwotCi0vKiBJbml0 aWFsaXplIHBvaW50ZXJzICovCi0KLSAgICBwcCA9IGNtZGJ1ZjsJCQkvKiBCZWdpbm5pbmcgb2Yg Y3VycmVudCBmaWVsZCAqLwotICAgIGJwID0gY21kYnVmOwkJCS8qIEN1cnJlbnQgcG9zaXRpb24g d2l0aGluIGJ1ZmZlciAqLwotICAgIG5wID0gY21kYnVmOwkJCS8qIFdoZXJlIHRvIHN0YXJ0IG5l eHQgZmllbGQgKi8KLQotICAgIGNtZmxkZmxncyA9IDA7Ci0gICAgY21mbGdzID0gLTU7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogUGFyc2Ugbm90IHlldCBzdGFydGVkLiAqLwotICAgIHVuZ3cg PSAwOwkJCQkvKiBEb24ndCBuZWVkIHRvIHVuZ2V0IGEgd29yZC4gKi8KLX0KLQotLyogIEMgTSBJ IE4gSSAgLS0gIENsZWFyIHRoZSBjb21tYW5kIGFuZCBhdG9tIGJ1ZmZlcnMsIHJlc2V0IHBvaW50 ZXJzLiAgKi8KLQotLyoKLVRoZSBhcmd1bWVudCBzcGVjaWZpZXMgd2hvIGlzIHRvIGVjaG8gdGhl IHVzZXIncyB0eXBlaW4gLS0KLSAgMSBtZWFucyB0aGUgY21kIHBhY2thZ2UgZWNob2VzCi0gIDAg c29tZWJvZHkgZWxzZSAoc3lzdGVtLCBmcm9udCBlbmQsIHRlcm1pbmFsKSBlY2hvZXMKLSovCi1W T0lECi1jbWluaShkKSBpbnQgZDsgewotI2lmZGVmIERDTURCVUYKLSAgICBpZiAoIWF0bWJ1ZikK LSAgICAgIGlmIChjbXNldHVwKCk8MCkKLQlmYXRhbCgiZmF0YWwgZXJyb3I6IHVuYWJsZSB0byBh bGxvY2F0ZSBjb21tYW5kIGJ1ZmZlcnMiKTsKLSNlbmRpZiAvKiBEQ01EQlVGICovCi0jaWZkZWYg VVNFX01FTUNQWQotICAgIG1lbXNldChjbWRidWYsMCxDTURCTCk7Ci0gICAgbWVtc2V0KGF0bWJ1 ZiwwLEFUTUJMKTsKLSNlbHNlCi0gICAgZm9yIChicCA9IGNtZGJ1ZjsgYnAgPCBjbWRidWYrQ01E Qkw7IGJwKyspICpicCA9IE5VTDsKLSAgICBmb3IgKGJwID0gYXRtYnVmOyBicCA8IGF0bWJ1ZitB VE1CTDsgYnArKykgKmJwID0gTlVMOwotI2VuZGlmIC8qIFVTRV9NRU1DUFkgKi8KLQotICAgICph dG1idWYgPSAqc2F2YnVmID0gKmF0eGJ1ZiA9ICphdHlidWYgPSAqZmlsYnVmID0gTlVMOwotICAg IGJsb2NrbHZsID0gMDsJCQkvKiBCbG9jayBsZXZlbCBpcyAwICovCi0gICAgbGluZWJlZ2luID0g MTsJCQkvKiBBdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSAqLwotICAgIGRweCA9IGQ7CQkJCS8q IEdsb2JhbCBjb3B5IG9mIHRoZSBlY2hvIGZsYWcgKi8KLSAgICBkZWJ1ZyhGMTAxLCJjbWluaSBk cHgiLCIiLGRweCk7Ci0gICAgY3JmbGFnID0gMDsJCQkJLyogUmVzZXQgZmxhZ3MgKi8KLSAgICBx bWZsYWcgPSAwOwotICAgIGVzZmxhZyA9IDA7Ci0jaWZkZWYgQ0tfUkVDQUxMCi0gICAgbm9fcmVj YWxsID0gMDsJCQkvKiBTdGFydCBvdXQgd2l0aCByZWNhbGwgZW5hYmxlZCAqLwotI2VuZGlmIC8q IENLX1JFQ0FMTCAqLwotICAgIGNtcmVzKCk7CQkJCS8qIFNldHMgYnAgZXRjICovCi0gICAgbmV3 Y21kID0gMTsJCQkJLyogU2VlIGFkZGNtZCgpICovCi19Ci0KLSNpZm5kZWYgTk9TUEwKLS8qCi0g IFRoZSBmb2xsb3dpbmcgYml0cyBhcmUgdG8gYWxsb3cgdGhlIGNvbW1hbmQgcGFja2FnZSB0byBj YWxsIGl0c2VsZgotICBpbiB0aGUgbWlkZGxlIG9mIGEgcGFyc2UuICBUbyBkbyB0aGlzLCBiZWdp biBieSBjYWxsaW5nIGNtcHVzaCwgYW5kCi0gIGVuZCBieSBjYWxsaW5nIGNtcG9wLiAgQXMgeW91 IGNhbiBzZWUsIHRoaXMgaXMgcmF0aGVyIGV4cGVuc2l2ZS4KLSovCi0jaWZkZWYgRENNREJVRgot c3RydWN0IGNtcCB7Ci0gICAgaW50IGlbNV07CQkJCS8qIHN0YWNrIGZvciBpbnRlZ2VycyAqLwot ICAgIGNoYXIgKmNbM107CQkJCS8qIHN0YWNrIGZvciBwb2ludGVycyAqLwotICAgIGNoYXIgKmJb OF07CQkJCS8qIHN0YWNrIGZvciBidWZmZXIgY29udGVudHMgKi8KLX07Ci1zdHJ1Y3QgY21wICpj bXAgPSAwOwotI2Vsc2UKLWludCBjbXBfaVtDTURERVArMV1bNV07CQkJLyogU3RhY2sgZm9yIGlu dGVnZXJzICovCi1jaGFyICpjbXBfY1tDTURERVArMV1bNV07CQkvKiBmb3IgbWlzYyBwb2ludGVy cyAqLwotY2hhciAqY21wX2JbQ01EREVQKzFdWzddOwkJLyogZm9yIGJ1ZmZlciBjb250ZW50cyBw b2ludGVycyAqLwotI2VuZGlmIC8qIERDTURCVUYgKi8KLQotaW50IGNtZGRlcCA9IC0xOwkJCS8q IEN1cnJlbnQgc3RhY2sgZGVwdGggKi8KLQotaW50Ci1jbXB1c2goKSB7CQkJCS8qIFNhdmUgdGhl IGNvbW1hbmQgZW52aXJvbm1lbnQgKi8KLSAgICBjaGFyICpjcDsJCQkJLyogQ2hhcmFjdGVyIHBv aW50ZXIgKi8KLQotICAgIGlmIChjbWRkZXAgPj0gQ01EREVQKQkJLyogRW50ZXIgYSBuZXcgY29t bWFuZCBkZXB0aCAqLwotICAgICAgcmV0dXJuKC0xKTsKLSAgICBjbWRkZXArKzsKLSAgICBkZWJ1 ZyhGMTAxLCImY21wdXNoIHRvIGRlcHRoIiwiIixjbWRkZXApOwotCi0jaWZkZWYgRENNREJVRgot ICAgIC8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgY21wIGlmIG5vdCBhbHJlYWR5IGRvbmUgKi8KLSAg ICBpZiAoIWNtcCAmJiAhKGNtcCA9IChzdHJ1Y3QgY21wICopIG1hbGxvYyhzaXplb2Yoc3RydWN0 IGNtcCkqKENNRERFUCsxKSkpKQotICAgICAgZmF0YWwoImNtcHVzaDogbm8gbWVtb3J5IGZvciBj bXAiKTsKLSAgICBjbXBbY21kZGVwXS5pWzBdID0gY21mbGdzOwkJLyogRmlyc3QgZG8gdGhlIGds b2JhbCBpbnRzICovCi0gICAgY21wW2NtZGRlcF0uaVsxXSA9IGNtZnNhdjsKLSAgICBjbXBbY21k ZGVwXS5pWzJdID0gYXR4bjsKLSAgICBjbXBbY21kZGVwXS5pWzNdID0gdW5ndzsKLQotICAgIGNt cFtjbWRkZXBdLmNbMF0gPSBicDsJCS8qIFRoZW4gdGhlIGdsb2JhbCBwb2ludGVycyAqLwotICAg IGNtcFtjbWRkZXBdLmNbMV0gPSBwcDsKLSAgICBjbXBbY21kZGVwXS5jWzJdID0gbnA7Ci0jZWxz ZQotICAgIGNtcF9pW2NtZGRlcF1bMF0gPSBjbWZsZ3M7CQkvKiBGaXJzdCBkbyB0aGUgZ2xvYmFs IGludHMgKi8KLSAgICBjbXBfaVtjbWRkZXBdWzFdID0gY21mc2F2OwotICAgIGNtcF9pW2NtZGRl cF1bMl0gPSBhdHhuOwotICAgIGNtcF9pW2NtZGRlcF1bM10gPSB1bmd3OwotCi0gICAgY21wX2Nb Y21kZGVwXVswXSA9IGJwOwkJLyogVGhlbiB0aGUgZ2xvYmFsIHBvaW50ZXJzICovCi0gICAgY21w X2NbY21kZGVwXVsxXSA9IHBwOwotICAgIGNtcF9jW2NtZGRlcF1bMl0gPSBucDsKLSNlbmRpZiAv KiBEQ01EQlVGICovCi0KLSAgICAvKiBOb3cgdGhlIGJ1ZmZlcnMgdGhlbXNlbHZlcy4gIEEgbG90 IG9mIHJlcGl0aXRpb3VzIGNvZGUuLi4gKi8KLQotI2lmZGVmIERDTURCVUYKLSAgICBjcCA9IG1h bGxvYygoaW50KXN0cmxlbihjbWRidWYpKzEpOwkvKiAwOiBDb21tYW5kIGJ1ZmZlciAqLwotICAg IGlmIChjcCkgc3RyY3B5KGNwLGNtZGJ1Zik7Ci0gICAgY21wW2NtZGRlcF0uYlswXSA9IGNwOwot ICAgIGlmIChjcCA9PSBOVUxMKSByZXR1cm4oLTEpOwotCi0gICAgY3AgPSBtYWxsb2MoKGludClz dHJsZW4oc2F2YnVmKSsxKTsJLyogMTogU2F2ZSBidWZmZXIgKi8KLSAgICBpZiAoY3ApIHN0cmNw eShjcCxzYXZidWYpOwotICAgIGNtcFtjbWRkZXBdLmJbMV0gPSBjcDsKLSAgICBpZiAoY3AgPT0g TlVMTCkgcmV0dXJuKC0xKTsKLQotICAgIGNtcFtjbWRkZXBdLmJbMl0gPSBOVUxMOwotCi0gICAg Y3AgPSBtYWxsb2MoKGludClzdHJsZW4oYXRtYnVmKSsxKTsJLyogMzogQXRvbSBidWZmZXIgKi8K LSAgICBpZiAoY3ApIHN0cmNweShjcCxhdG1idWYpOwotICAgIGNtcFtjbWRkZXBdLmJbM10gPSBj cDsKLSAgICBpZiAoY3AgPT0gTlVMTCkgcmV0dXJuKC0xKTsKLQotICAgIGNwID0gbWFsbG9jKChp bnQpc3RybGVuKGF0eGJ1ZikrMSk7CS8qIDQ6IEV4cGFuc2lvbiBidWZmZXIgKi8KLSAgICBpZiAo Y3ApIHN0cmNweShjcCxhdHhidWYpOwotICAgIGNtcFtjbWRkZXBdLmJbNF0gPSBjcDsKLSAgICBp ZiAoY3AgPT0gTlVMTCkgcmV0dXJuKC0xKTsKLQotICAgIGNwID0gbWFsbG9jKChpbnQpc3RybGVu KGF0eWJ1ZikrMSk7CS8qIDU6IEF0b20gYnVmZmVyIGNvcHkgKi8KLSAgICBpZiAoY3ApIHN0cmNw eShjcCxhdHlidWYpOwotICAgIGNtcFtjbWRkZXBdLmJbNV0gPSBjcDsKLSAgICBpZiAoY3AgPT0g TlVMTCkgcmV0dXJuKC0xKTsKLQotICAgIGNwID0gbWFsbG9jKChpbnQpc3RybGVuKGZpbGJ1Zikr MSk7CS8qIDY6IEZpbGUgbmFtZSBidWZmZXIgKi8KLSAgICBpZiAoY3ApIHN0cmNweShjcCxmaWxi dWYpOwotICAgIGNtcFtjbWRkZXBdLmJbNl0gPSBjcDsKLSAgICBpZiAoY3AgPT0gTlVMTCkgcmV0 dXJuKC0xKTsKLSNlbHNlCi0gICAgY3AgPSBtYWxsb2MoKGludClzdHJsZW4oY21kYnVmKSsxKTsJ LyogMDogQ29tbWFuZCBidWZmZXIgKi8KLSAgICBpZiAoY3ApIHN0cmNweShjcCxjbWRidWYpOwot ICAgIGNtcF9iW2NtZGRlcF1bMF0gPSBjcDsKLSAgICBpZiAoY3AgPT0gTlVMTCkgcmV0dXJuKC0x KTsKLQotICAgIGNwID0gbWFsbG9jKChpbnQpc3RybGVuKHNhdmJ1ZikrMSk7CS8qIDE6IFNhdmUg YnVmZmVyICovCi0gICAgaWYgKGNwKSBzdHJjcHkoY3Asc2F2YnVmKTsKLSAgICBjbXBfYltjbWRk ZXBdWzFdID0gY3A7Ci0gICAgaWYgKGNwID09IE5VTEwpIHJldHVybigtMSk7Ci0KLSAgICBjbXBf YltjbWRkZXBdWzJdID0gTlVMTDsKLQotICAgIGNwID0gbWFsbG9jKChpbnQpc3RybGVuKGF0bWJ1 ZikrMSk7CS8qIDM6IEF0b20gYnVmZmVyICovCi0gICAgaWYgKGNwKSBzdHJjcHkoY3AsYXRtYnVm KTsKLSAgICBjbXBfYltjbWRkZXBdWzNdID0gY3A7Ci0gICAgaWYgKGNwID09IE5VTEwpIHJldHVy bigtMSk7Ci0KLSAgICBjcCA9IG1hbGxvYygoaW50KXN0cmxlbihhdHhidWYpKzEpOwkvKiA0OiBF eHBhbnNpb24gYnVmZmVyICovCi0gICAgaWYgKGNwKSBzdHJjcHkoY3AsYXR4YnVmKTsKLSAgICBj bXBfYltjbWRkZXBdWzRdID0gY3A7Ci0gICAgaWYgKGNwID09IE5VTEwpIHJldHVybigtMSk7Ci0K LSAgICBjcCA9IG1hbGxvYygoaW50KXN0cmxlbihhdHlidWYpKzEpOwkvKiA1OiBBdG9tIGJ1ZmZl ciBjb3B5ICovCi0gICAgaWYgKGNwKSBzdHJjcHkoY3AsYXR5YnVmKTsKLSAgICBjbXBfYltjbWRk ZXBdWzVdID0gY3A7Ci0gICAgaWYgKGNwID09IE5VTEwpIHJldHVybigtMSk7Ci0KLSAgICBjcCA9 IG1hbGxvYygoaW50KXN0cmxlbihmaWxidWYpKzEpOwkvKiA2OiBGaWxlIG5hbWUgYnVmZmVyICov Ci0gICAgaWYgKGNwKSBzdHJjcHkoY3AsZmlsYnVmKTsKLSAgICBjbXBfYltjbWRkZXBdWzZdID0g Y3A7Ci0gICAgaWYgKGNwID09IE5VTEwpIHJldHVybigtMSk7Ci0jZW5kaWYgLyogRENNREJVRiAq LwotCi0gICAgY21pbmkoZHB4KTsJCQkJLyogSW5pdGl6ZSB0aGUgY29tbWFuZCBwYXJzZXIgKi8K LSAgICByZXR1cm4oMCk7Ci19Ci0KLWludAotY21wb3AoKSB7CQkJCS8qIFJlc3RvcmUgdGhlIGNv bW1hbmQgZW52aXJvbm1lbnQgKi8KLSAgICBpZiAoY21kZGVwIDwgMCkgewotCWRlYnVnKEYxMDAs IiZjbXBvcCBjYWxsZWQgZnJvbSB0b3AgbGV2ZWwiLCIiLDApOwotCXJldHVybigtMSk7CQkJLyog RG9uJ3QgcG9wIHRvbyBtdWNoISAqLwotICAgIH0KLSNpZmRlZiBEQ01EQlVGCi0gICAgY21mbGdz ID0gY21wW2NtZGRlcF0uaVswXTsJCS8qIEZpcnN0IGRvIHRoZSBnbG9iYWwgaW50cyAqLwotICAg IGNtZnNhdiA9IGNtcFtjbWRkZXBdLmlbMV07Ci0gICAgYXR4biA9IGNtcFtjbWRkZXBdLmlbMl07 Ci0gICAgdW5ndyA9IGNtcFtjbWRkZXBdLmlbM107Ci0KLSAgICBicCA9IGNtcFtjbWRkZXBdLmNb MF07CQkvKiBUaGVuIHRoZSBnbG9iYWwgcG9pbnRlcnMgKi8KLSAgICBwcCA9IGNtcFtjbWRkZXBd LmNbMV07Ci0gICAgbnAgPSBjbXBbY21kZGVwXS5jWzJdOwotI2Vsc2UKLSAgICBjbWZsZ3MgPSBj bXBfaVtjbWRkZXBdWzBdOwkJLyogRmlyc3QgZG8gdGhlIGdsb2JhbCBpbnRzICovCi0gICAgY21m c2F2ID0gY21wX2lbY21kZGVwXVsxXTsKLSAgICBhdHhuID0gY21wX2lbY21kZGVwXVsyXTsKLSAg ICB1bmd3ID0gY21wX2lbY21kZGVwXVszXTsKLQotICAgIGJwID0gY21wX2NbY21kZGVwXVswXTsJ CS8qIFRoZW4gdGhlIGdsb2JhbCBwb2ludGVycyAqLwotICAgIHBwID0gY21wX2NbY21kZGVwXVsx XTsKLSAgICBucCA9IGNtcF9jW2NtZGRlcF1bMl07Ci0jZW5kaWYgLyogRENNREJVRiAqLwotCi0g ICAgLyogTm93IHRoZSBidWZmZXJzIHRoZW1zZWx2ZXMuICovCi0gICAgLyogTm90ZTogc3RybmNw eSgpLCBub3QgY2tzdHJuY3B5KCkgLS0gSGVyZSB3ZSBXQU5UIHRoZSBOVUwgcGFkZGluZy4uLiAq LwotCi0jaWZkZWYgRENNREJVRgotICAgIGlmIChjbXBbY21kZGVwXS5iWzBdKSB7Ci0KLQlzdHJu Y3B5KGNtZGJ1ZixjbXBbY21kZGVwXS5iWzBdLENNREJMKTsgLyogMDogQ29tbWFuZCBidWZmZXIg Ki8KLQlmcmVlKGNtcFtjbWRkZXBdLmJbMF0pOwotCWNtcFtjbWRkZXBdLmJbMF0gPSBOVUxMOwot ICAgIH0KLSAgICBpZiAoY21wW2NtZGRlcF0uYlsxXSkgewotCXN0cm5jcHkoc2F2YnVmLGNtcFtj bWRkZXBdLmJbMV0sQ01EQkwpOyAvKiAxOiBTYXZlIGJ1ZmZlciAqLwotCWZyZWUoY21wW2NtZGRl cF0uYlsxXSk7Ci0JY21wW2NtZGRlcF0uYlsxXSA9IE5VTEw7Ci0gICAgfQotICAgIGlmIChjbXBb Y21kZGVwXS5iWzNdKSB7Ci0Jc3RybmNweShhdG1idWYsY21wW2NtZGRlcF0uYlszXSxBVE1CTCk7 IC8qIDM6IEF0b21pYyBidWZmZXIhICovCi0JZnJlZShjbXBbY21kZGVwXS5iWzNdKTsKLQljbXBb Y21kZGVwXS5iWzNdID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKGNtcFtjbWRkZXBdLmJbNF0pIHsK LQlzdHJuY3B5KGF0eGJ1ZixjbXBbY21kZGVwXS5iWzRdLEFUTUJMKTsgLyogNDogZVhwYW5zaW9u IGJ1ZmZlciAqLwotCWZyZWUoY21wW2NtZGRlcF0uYls0XSk7Ci0JY21wW2NtZGRlcF0uYls0XSA9 IE5VTEw7Ci0gICAgfQotICAgIGlmIChjbXBbY21kZGVwXS5iWzVdKSB7Ci0Jc3RybmNweShhdHli dWYsY21wW2NtZGRlcF0uYls1XSxBVE1CTCk7IC8qIDU6IEF0b20gYnVmZmVyIGNvcFkgKi8KLQlm cmVlKGNtcFtjbWRkZXBdLmJbNV0pOwotCWNtcFtjbWRkZXBdLmJbNV0gPSBOVUxMOwotICAgIH0K LSAgICBpZiAoY21wW2NtZGRlcF0uYls2XSkgewotCXN0cm5jcHkoZmlsYnVmLGNtcFtjbWRkZXBd LmJbNl0sQVRNQkwpOyAvKiA2OiBGaWxlbmFtZSBidWZmZXIgKi8KLQlmcmVlKGNtcFtjbWRkZXBd LmJbNl0pOwotCWNtcFtjbWRkZXBdLmJbNl0gPSBOVUxMOwotICAgIH0KLSNlbHNlCi0gICAgaWYg KGNtcF9iW2NtZGRlcF1bMF0pIHsKLQlzdHJuY3B5KGNtZGJ1ZixjbXBfYltjbWRkZXBdWzBdLENN REJMKTsgLyogMDogQ29tbWFuZCBidWZmZXIgKi8KLQlmcmVlKGNtcF9iW2NtZGRlcF1bMF0pOwot CWNtcF9iW2NtZGRlcF1bMF0gPSBOVUxMOwotICAgIH0KLSAgICBpZiAoY21wX2JbY21kZGVwXVsx XSkgewotCXN0cm5jcHkoc2F2YnVmLGNtcF9iW2NtZGRlcF1bMV0sQ01EQkwpOyAvKiAxOiBTYXZl IGJ1ZmZlciAqLwotCWZyZWUoY21wX2JbY21kZGVwXVsxXSk7Ci0JY21wX2JbY21kZGVwXVsxXSA9 IE5VTEw7Ci0gICAgfQotICAgIGlmIChjbXBfYltjbWRkZXBdWzNdKSB7Ci0Jc3RybmNweShhdG1i dWYsY21wX2JbY21kZGVwXVszXSxBVE1CTCk7IC8qIDM6IEF0b21pYyBidWZmZXIhICovCi0JZnJl ZShjbXBfYltjbWRkZXBdWzNdKTsKLQljbXBfYltjbWRkZXBdWzNdID0gTlVMTDsKLSAgICB9Ci0g ICAgaWYgKGNtcF9iW2NtZGRlcF1bNF0pIHsKLQlzdHJuY3B5KGF0eGJ1ZixjbXBfYltjbWRkZXBd WzRdLEFUTUJMKTsgLyogNDogZVhwYW5zaW9uIGJ1ZmZlciAqLwotCWZyZWUoY21wX2JbY21kZGVw XVs0XSk7Ci0JY21wX2JbY21kZGVwXVs0XSA9IE5VTEw7Ci0gICAgfQotICAgIGlmIChjbXBfYltj bWRkZXBdWzVdKSB7Ci0Jc3RybmNweShhdHlidWYsY21wX2JbY21kZGVwXVs1XSxBVE1CTCk7IC8q IDU6IEF0b20gYnVmZmVyIGNvcFkgKi8KLQlmcmVlKGNtcF9iW2NtZGRlcF1bNV0pOwotCWNtcF9i W2NtZGRlcF1bNV0gPSBOVUxMOwotICAgIH0KLSAgICBpZiAoY21wX2JbY21kZGVwXVs2XSkgewot CXN0cm5jcHkoZmlsYnVmLGNtcF9iW2NtZGRlcF1bNl0sQVRNQkwpOyAvKiA2OiBGaWxlbmFtZSBi dWZmZXIgKi8KLQlmcmVlKGNtcF9iW2NtZGRlcF1bNl0pOwotCWNtcF9iW2NtZGRlcF1bNl0gPSBO VUxMOwotICAgIH0KLSNlbmRpZiAvKiBEQ01EQlVGICovCi0KLSAgICBjbWRkZXAtLTsJCQkJLyog UmlzZSwgcmlzZSAqLwotICAgIGRlYnVnKEYxMDEsIiZjbXBvcCB0byBkZXB0aCIsIiIsY21kZGVw KTsKLSAgICByZXR1cm4oY21kZGVwKTsKLX0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZkZWYg Q09NTUVOVAotVk9JRAkJCQkJLyogTm90IHVzZWQgKi8KLXN0cmlwcShzKSBjaGFyICpzOyB7ICAg ICAgICAgICAgICAgICAgICAvKiBGdW5jdGlvbiB0byBzdHJpcCAnXCcgcXVvdGVzICovCi0gICAg Y2hhciAqdDsKLSAgICB3aGlsZSAoKnMpIHsKLSAgICAgICAgaWYgKCpzID09IENNRFEpIHsKLSAg ICAgICAgICAgIGZvciAodCA9IHM7ICp0ICE9ICdcMCc7IHQrKykgKnQgPSAqKHQrMSk7Ci0gICAg ICAgIH0KLSAgICAgICAgcysrOwotICAgIH0KLX0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLS8q IENvbnZlcnQgdGFicyB0byBzcGFjZXMsIG9uZSBmb3Igb25lICovCi1WT0lECi11bnRhYihzKSBj aGFyICpzOyB7Ci0gICAgd2hpbGUgKCpzKSB7Ci0JaWYgKCpzID09IEhUKSAqcyA9IFNQOwotCXMr KzsKLSAgICB9Ci19Ci0KLS8qICBDIE0gTiBVIE0gIC0tICBQYXJzZSBhIG51bWJlciBpbiB0aGUg aW5kaWNhdGVkIHJhZGl4ICAqLwotCi0vKgotIFRoZSByYWRpeCBpcyBzcGVjaWZpZWQgaW4gdGhl IGFyZyBsaXN0LgotIFBhcnNlcyB1bnF1b3RlZCBudW1lcmljIHN0cmluZ3MgaW4gdGhlIGdpdmVu IHJhZGl4LgotIFBhcnNlcyBiYWNrc2xhc2gtcXVvdGVkIG51bWJlcnMgaW4gdGhlIHJhZGl4IGlu ZGljYXRlZCBieSB0aGUgcXVvdGU6Ci0gICBcbm5uID0gXGRubm4gPSBkZWNpbWFsLCBcb25ubiA9 IG9jdGFsLCBceG5uID0gSGV4YWRlY2ltYWwuCi0gSWYgdGhlc2UgZmFpbCwgdGhlbiBpZiBhIHBy ZXByb2Nlc3NpbmcgZnVuY3Rpb24gaXMgc3VwcGxpZWQsIHRoYXQgaXMgYXBwbGllZAotIGFuZCB0 aGVuIGEgc2Vjb25kIGF0dGVtcHQgaXMgbWFkZSB0byBwYXJzZSBhbiB1bnF1b3RlZCBkZWNpbWFs IHN0cmluZy4KLSBBbmQgaWYgdGhhdCBmYWlscywgdGhlIHByZXByb2Nlc3NlZCBzdHJpbmcgaXMg cGFzc2VkIHRvIGFuIGFyaXRobWV0aWMKLSBleHByZXNzaW9uIGV2YWx1YXRvci4KLQotIFJldHVy bnM6Ci0gICAtMyBpZiBubyBpbnB1dCBwcmVzZW50IHdoZW4gcmVxdWlyZWQsCi0gICAtMiBpZiB1 c2VyIHR5cGVkIGFuIGlsbGVnYWwgbnVtYmVyLAotICAgLTEgaWYgcmVwYXJzZSBuZWVkZWQsCi0g ICAgMCBvdGhlcndpc2UsIHdpdGggYXJndW1lbnQgbiBzZXQgdG8gdGhlIG51bWJlciB0aGF0IHdh cyBwYXJzZWQKLSovCi0vKiBUaGlzIGlzIHRoZSB0cmFkaXRpb25hbCBjbW51bSgpIHRoYXQgZ2V0 cyBhbiBpbnQgKi8KLWludAotY21udW0oeGhscCx4ZGVmLHJhZGl4LG4sZikgY2hhciAqeGhscCwg KnhkZWY7IGludCByYWRpeCwgKm47IHh4X3N0cnAgZjsgewotICAgIENLX09GRl9UIHogPSAoQ0tf T0ZGX1QpMCwgY2hlY2s7Ci0gICAgaW50IHg7Ci0gICAgeCA9IGNtbnVtdyh4aGxwLHhkZWYscmFk aXgsJnosZik7Ci0gICAgKm4gPSB6OwotICAgIGNoZWNrID0gKm47Ci0gICAgaWYgKGNoZWNrICE9 IHopIHsKLQlwcmludGYoIj9NYWduaXR1ZGUgb2YgcmVzdWx0IHRvbyBsYXJnZSBmb3IgaW50ZWdl ciAtICVzXG4iLGNrZnN0b2EoeikpOwotCXJldHVybigtOSk7Ci0gICAgfQotICAgIHJldHVybih4 KTsKLX0KLQotLyoKLSAgVGhpcyBpcyB0aGUgbmV3IGNtbnVtKCkgdGhhdCBnZXRzIGEgIndpZGUi IHJlc3VsdCwgd2hhdGV2ZXIgQ0tfT0ZGX1QKLSAgaXMgZGVmaW5lZCB0byBiZSwgbm9ybWFsbHkg MzIgb3IgNjQgYml0cywgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybS4KLSAgZmRjLCAyNCBEZWMg MjAwNS4KLSovCi1pbnQKLWNtbnVtdyh4aGxwLHhkZWYscmFkaXgsbixmKQotICAgIGNoYXIgKnho bHAsICp4ZGVmOyBpbnQgcmFkaXg7IENLX09GRl9UICpuOyB4eF9zdHJwIGY7IHsKLSAgICBpbnQg eDsgY2hhciAqcywgKnpwLCAqenE7Ci0jaWZkZWYgQ09NTUVOVAotICAgIGNoYXIgbGJyYWNlLCBy YnJhY2U7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgaWYgKCF4aGxwKSB4aGxwID0gIiI7 Ci0gICAgaWYgKCF4ZGVmKSB4ZGVmID0gIiI7Ci0KLSNpZmRlZiBDT01NRU5UCi0gICAgaWYgKGNt ZmxkZmxncyAmIDEpIHsKLQlsYnJhY2UgPSAnKCc7Ci0JcmJyYWNlID0gJyknOwotICAgIH0gZWxz ZSB7Ci0JbGJyYWNlID0gJ3snOwotCXJicmFjZSA9ICd9JzsKLSAgICB9Ci0jZW5kaWYgLyogQ09N TUVOVCAqLwotCi0gICAgaWYgKHJhZGl4ICE9IDEwICYmIHJhZGl4ICE9IDgpIHsJLyogSnVzdCBk byBiYXNlcyA4IGFuZCAxMCAqLwotICAgICAgICBwcmludGYoImNtbnVtOiBpbGxlZ2FsIHJhZGl4 IC0gJWRcbiIscmFkaXgpOwotICAgICAgICByZXR1cm4oLTIpOwotICAgIH0gLyogRWFzeSB0byBh ZGQgb3RoZXJzIGJ1dCB0aGVyZSBoYXMgbmV2ZXIgYmVlbiBhIG5lZWQgZm9yIGl0LiAqLwotICAg IHggPSBjbWZsZCh4aGxwLHhkZWYsJnMsKHh4X3N0cnApMCk7Ci0gICAgZGVidWcoRjEwMSwiY21u dW06IGNtZmxkIiwiIix4KTsKLSAgICBpZiAoeCA8IDApIHJldHVybih4KTsJCS8qIFBhcnNlIGEg ZmllbGQgKi8KLSAgICB6cCA9IGF0bWJ1ZjsKLS8qCi0gIEVkaXQgMTkyIC0gQWxsb3cgYW55IG51 bWJlciBmaWVsZCB0byBiZSBicmFjZWQuICBUaGlzIGxldHMgdXMgaW5jbHVkZQotICBzcGFjZXMg aW4gZXhwcmVzc2lvbnMsIGJ1dCBwZXJoYXBzIG1vcmUgaW1wb3J0YW50IGxldHMgdXMgaGF2ZSB1 c2VyLWRlZmluZWQKLSAgZnVuY3Rpb25zIGluIG51bWVyaWMgZmllbGRzLgotKi8KLSAgICB6cCA9 IGJyc3RyaXAoenApOwkJCS8qIFN0cmlwIGJyYWNlcyAqLwotICAgIGlmIChjbWZsZGZsZ3MgJiAx ICYmICp6cCA9PSAnKCcpIHsJLyogUGFyZW5zIHRvby4uICovCi0JeCA9IChpbnQpIHN0cmxlbihh dG1idWYpOwotCWlmICh4ID4gMCkgewotCSAgICBpZiAoKihhdG1idWYreC0xKSA9PSAnKScpIHsK LQkJKihhdG1idWYreC0xKSA9IE5VTDsKLQkJenArKzsKLQkgICAgfQotCX0KLSAgICB9Ci0gICAg aWYgKGNoa251bSh6cCkpIHsJCQkvKiBDaGVjayBmb3IgbnVtYmVyICovCi0JaWYgKHJhZGl4ID09 IDgpIHsJCS8qIElmIGl0J3Mgc3VwcG9zZWQgdG8gYmUgb2N0YWwgKi8KLQkgICAgenAgPSBja3Jh ZGl4KHpwLDgsMTApOwkvKiBjb252ZXJ0IHRvIGRlY2ltYWwgKi8KLQkgICAgaWYgKCF6cCkgcmV0 dXJuKC0yKTsKLQkgICAgaWYgKCFzdHJjbXAoenAsIi0xIikpIHJldHVybigtMik7Ci0JfQotCWVy cm5vID0gMDsJCQkvKiBHb3Qgb25lLCB3ZSdyZSBkb25lLiAqLwotICAgICAgICAqbiA9IGNrYXRv ZnMoenApOwotCWlmIChlcnJubykgewotCSAgICBwZXJyb3IoenApOwotCSAgICByZXR1cm4oLTkp OwotCX0KLQlkZWJ1ZyhGMTAxLCJjbW51bSAxc3QgY2hrbnVtIG9rIiwiIiwqbik7Ci0gICAgICAg IHJldHVybigwKTsKLSAgICB9IGVsc2UgaWYgKCh4ID0geHhlc2MoJnpwKSkgPiAtMSkgewkvKiBD aGVjayBmb3IgYmFja3NsYXNoIGVzY2FwZSAqLwotCi0jaWZuZGVmIE9TMgotCSpuID0geDsKLSNl bHNlCi0JKm4gPSB3aWRlcmVzdWx0OwotI2VuZGlmIC8qIE9TMiAqLwotCi0JZGVidWcoRjEwMSwi Y21udW0geHhlc2Mgb2siLCIiLCpuKTsKLQlyZXR1cm4oKnpwID8gLTIgOiAwKTsKLSAgICB9IGVs c2UgaWYgKGYpIHsJCQkvKiBJZiBjb252ZXJzaW9uIGZ1bmN0aW9uIGdpdmVuICovCi0JenEgPSBh dHhidWY7CQkJLyogVHJ5IHRoYXQgKi8KLQlhdHhuID0gQ01EQkw7Ci0JaWYgKCgqZikoenAsJnpx LCZhdHhuKSA8IDApCS8qIENvbnZlcnQgKi8KLQkgIHJldHVybigtMik7Ci0JenAgPSBhdHhidWY7 Ci0gICAgfQotICAgIGRlYnVnKEYxMTAsImNtbnVtIHpwIDEiLHpwLDApOwotICAgIGlmICghKnpw KSB6cCA9IHhkZWY7CQkvKiBSZXN1bHQgZW1wdHksIHN1YnN0aXR1dGUgZGVmYXVsdCAqLwotICAg IGRlYnVnKEYxMTAsImNtbnVtIHpwIDIiLHpwLDApOwotICAgIGlmIChjaGtudW0oenApKSB7CQkJ LyogQ2hlY2sgYWdhaW4gZm9yIGRlY2ltYWwgbnVtYmVyICovCi0JaWYgKHJhZGl4ID09IDgpIHsJ CS8qIElmIGl0J3Mgc3VwcG9zZWQgdG8gYmUgb2N0YWwgKi8KLQkgICAgenAgPSBja3JhZGl4KHpw LDgsMTApOwkvKiBjb252ZXJ0IHRvIGRlY2ltYWwgKi8KLQkgICAgaWYgKCF6cCkgcmV0dXJuKC0y KTsKLQkgICAgaWYgKCFzdHJjbXAoenAsIi0xIikpIHJldHVybigtMik7Ci0JfQotCWVycm5vID0g MDsKLSAgICAgICAgKm4gPSBja2F0b2ZzKHpwKTsKLQlpZiAoZXJybm8pIHsKLQkgICAgcGVycm9y KHpwKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0JZGVidWcoRjEwMSwiY21udW0gMm5kIGNoa251 bSBvayIsIiIsKm4pOwotICAgICAgICByZXR1cm4oMCk7Ci0jaWZuZGVmIE5PU1BMCi0gICAgfSAg ZWxzZSBpZiAoKHggPSB4eGVzYygmenApKSA+IC0xKSB7IC8qIENoZWNrIGZvciBiYWNrc2xhc2gg ZXNjYXBlICovCi0jaWZuZGVmIE9TMgotCSpuID0geDsKLSNlbHNlCi0JKm4gPSB3aWRlcmVzdWx0 OwotI2VuZGlmIC8qIE9TMiAqLwotCWRlYnVnKEYxMDEsImNtbnVtIHh4ZXNjIDIgb2siLCIiLCpu KTsKLQlyZXR1cm4oKnpwID8gLTIgOiAwKTsKLSAgICB9IGVsc2UgaWYgKGYpIHsJCQkvKiBOb3Qg bnVtZXJpYywgbWF5YmUgYW4gZXhwcmVzc2lvbiAqLwotCWNoYXIgKiBwOwotCXAgPSBldmFsYSh6 cCk7Ci0JaWYgKGNoa251bShwKSkgewotCSAgICBpZiAocmFkaXggPT0gOCkgewkJLyogSWYgaXQn cyBzdXBwb3NlZCB0byBiZSBvY3RhbCAqLwotCQl6cCA9IGNrcmFkaXgoenAsOCwxMCk7CS8qIGNv bnZlcnQgdG8gZGVjaW1hbCAqLwotCQlpZiAoIXpwKSByZXR1cm4oLTIpOwotCQlpZiAoIXN0cmNt cCh6cCwiLTEiKSkgcmV0dXJuKC0yKTsKLQkgICAgfQotCSAgICBlcnJubyA9IDA7Ci0JICAgICpu ID0gY2thdG9mcyhwKTsKLQkgICAgaWYgKGVycm5vKSB7Ci0JCXBlcnJvcihwKTsKLQkJcmV0dXJu KC05KTsKLQkgICAgfQotCSAgICBkZWJ1ZyhGMTAxLCJjbW51bSBleHAgZXZhbCBvayIsIiIsKm4p OwotCSAgICByZXR1cm4oMCk7Ci0JfSBlbHNlIHJldHVybigtMik7Ci0jZW5kaWYgLyogTk9TUEwg Ki8KLSAgICB9IGVsc2UgewkJCQkvKiBOb3QgbnVtZXJpYyAqLwotCXJldHVybigtMik7Ci0gICAg fQotfQotCi0jaWZkZWYgQ0tDSEFOTkVMSU8KLWV4dGVybiBpbnQgel9lcnJvcjsKLSNlbmRpZiAv KiBDS0NIQU5ORUxJTyAqLwotCi0vKiAgQyBNIE8gRiBJICAtLSAgUGFyc2UgdGhlIG5hbWUgb2Yg YW4gb3V0cHV0IGZpbGUgICovCi0KLS8qCi0gRGVwZW5kcyBvbiB0aGUgZXh0ZXJuYWwgZnVuY3Rp b24gemNoa28oKTsgaWYgemNoa28oKSBub3QgYXZhaWxhYmxlLCB1c2UKLSBjbWZsZCgpIHRvIHBh cnNlIG91dHB1dCBmaWxlIG5hbWVzLgotCi0gUmV0dXJuczoKLSAgIC05IGxpa2UgLTIsIGV4Y2Vw dCBtZXNzYWdlIGFscmVhZHkgcHJpbnRlZCwKLSAgIC0zIGlmIG5vIGlucHV0IHByZXNlbnQgd2hl biByZXF1aXJlZCwKLSAgIC0yIGlmIHBlcm1pc3Npb24gd291bGQgYmUgZGVuaWVkIHRvIGNyZWF0 ZSB0aGUgZmlsZSwKLSAgIC0xIGlmIHJlcGFyc2UgbmVlZGVkLAotICAgIDAgb3IgMSBpZiBmaWxl IGNhbiBiZSBjcmVhdGVkLCB3aXRoIHhwIHBvaW50aW5nIHRvIG5hbWUuCi0gICAgMiBpZiBnaXZl biB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBkaXJlY3RvcnkuCi0qLwotaW50Ci1jbW9maSh4aGxw LHhkZWYseHAsZikgY2hhciAqeGhscCwgKnhkZWYsICoqeHA7IHh4X3N0cnAgZjsgewotICAgIGlu dCB4OyBjaGFyICpzLCAqenE7Ci0jaWZkZWYgRE9DSEtWQVIKLSAgICBpbnQgdHJpZXM7Ci0jZW5k aWYgLyogRE9DSEtWQVIgKi8KLSNpZmRlZiBEVElMREUKLSAgICBjaGFyICpkaXJwOwotI2VuZGlm IC8qIERUSUxERSAqLwotCi0gICAgY21mbGRmbGdzID0gMDsKLQotICAgIGlmICgheGhscCkgeGhs cCA9ICIiOwotICAgIGlmICgheGRlZikgeGRlZiA9ICIiOwotCi0gICAgaWYgKCp4aGxwID09IE5V TCkgeGhscCA9ICJPdXRwdXQgZmlsZSI7Ci0gICAgKnhwID0gIiI7Ci0KLSAgICBkZWJ1ZyhGMTEw LCJjbW9maSB4ZGVmIix4ZGVmLDApOwotICAgIHggPSBjbWZsZCh4aGxwLHhkZWYsJnMsKHh4X3N0 cnApMCk7Ci0gICAgZGVidWcoRjExMSwiY21vZmkgY21mbGQgcmV0dXJucyIscyx4KTsKLSAgICBp ZiAoeCA8IDApCi0gICAgICByZXR1cm4oeCk7Ci0KLSAgICBzID0gYnJzdHJpcChzKTsJCQkvKiBT dHJpcCBlbmNsb3NpbmcgYnJhY2VzICovCi0gICAgZGVidWcoRjExMCwiY21vZmkgMS41IixzLDAp OwotCi0jaWZkZWYgRE9DSEtWQVIKLSAgICB0cmllcyA9IDA7Ci0gICAgewotCWNoYXIgKnAgPSBz OwotICAgIC8qCi0gICAgICBUaGlzIGlzIHJlYWxseSB1Z2x5LiAgSWYgd2Ugc2tpcCBjb252ZXJz aW9uIHRoZSBmaXJzdCB0aW1lIHRocm91Z2gsCi0gICAgICB0aGVuIHZhcmlhYmxlIG5hbWVzIGxp a2UgXCVhIHdpbGwgYmUgdXNlZCBhcyBmaWxlbmFtZXMgKGUuZy4gY3JlYXRpbmcKLSAgICAgIGEg ZmlsZSBjYWxsZWQgJUEgaW4gdGhlIHJvb3QgZGlyZWN0b3J5KS4gIElmIHdlIERPTidUIHNraXAg Y29udmVyc2lvbgotICAgICAgdGhlIGZpcnN0IHRpbWUgdGhyb3VnaCwgdGhlbiBzaW5nbGUgYmFj a3NsYXNoZXMgdXNlZCBhcyBkaXJlY3RvcnkKLSAgICAgIHNlcGFyYXRvcnMgaW4gZmlsZW5hbWVz IHdpbGwgYmUgbWlzaW50ZXJwcmV0ZWQgYXMgdmFyaWFibGUgbGVhZC1pbnMuCi0gICAgICBTbyB3 ZSBwcmVzY2FuIHRvIHNlZSBpZiBpdCBoYXMgYW55IHZhcmlhYmxlIHJlZmVyZW5jZXMuICBCdXQg dGhpcwotICAgICAgbW9kdWxlIGlzIG5vdCBzdXBwb3NlZCB0byBrbm93IGFueXRoaW5nIGFib3V0 IHZhcmlhYmxlcywgZnVuY3Rpb25zLAotICAgICAgZXRjLCBzbyB0aGlzIGNvZGUgZG9lcyBub3Qg cmVhbGx5IGJlbG9uZyBoZXJlLCBidXQgcmF0aGVyIGl0IHNob3VsZAotICAgICAgYmUgYXQgdGhl IHNhbWUgbGV2ZWwgYXMgenpzdHJpbmcoKS4KLSAgICAqLwotLyoKLSAgSG1tbSwgdGhpcyBsb29r cyBhIGxvdCBsaWtlIGNoa3ZhcigpIGV4Y2VwdCBpdCB0aGF0IGluY2x1ZGVzIFxubm4gbnVtYmVy Ci0gIGVzY2FwZXMuICBCdXQgd2h5PyAgVGhpcyBtYWtlcyBjb21tYW5kcyBsaWtlICJta2RpciBj OlwxMjMiIGltcG9zc2libGUuCi0gIEFuZCBpbiBmYWN0LCAibWtkaXIgYzpcMTIzIiBjcmVhdGVz IGEgZGlyZWN0b3J5IGNhbGxlZCAiYzp7Ii4gIFdoYXQncyB3b3JzZSwKLSAgcm1kaXIoKSwgd2hp Y2ggKmRvZXMqIGNhbGwgY2hrdmFyKCksIHdvbid0IGxldCB1cyByZW1vdmUgaXQuICBTbyBsZXQn cyBhdAotICBsZWFzdCB0cnkgbWFraW5nIGNtb2ZpKCkgc3ltbWV0cmljYWwgd2l0aCBjbWlmaSgp Li4uCi0qLwotI2lmZGVmIENPTU1FTlQKLQljaGFyICogcTsKLQl3aGlsZSAoICh0cmllcyA9PSAw KSAmJiAocCA9IHN0cmNocihwLENNRFEpKSApIHsKLQkgICAgcSA9ICoocCsxKTsJCQkvKiBDaGFy IGFmdGVyIGJhY2tzbGFzaCAqLwotCSAgICBpZiAoIXEpCQkJLyogTm9uZSwgcXVpdCAqLwotCSAg ICAgIGJyZWFrOwotCSAgICBpZiAoaXN1cHBlcihxKSkJCS8qIElmIGxldHRlciwgY29udmVydCB0 byBsb3dlcmNhc2UgKi8KLQkgICAgICBxID0gdG9sb3dlcihxKTsKLQkgICAgaWYgKGlzZGlnaXQo cSkpIHsJCS8qIElmIGl0J3MgYSBkaWdpdCwgKi8KLQkJdHJpZXMgPSAxOwkJLyogYXNzdW1lIGl0 J3MgYSBiYWNrc2xhc2ggY29kZSAgKi8KLQkJYnJlYWs7Ci0JICAgIH0KLQkgICAgc3dpdGNoIChx KSB7Ci0JICAgICAgY2FzZSBDTURROgkJLyogRG91YmxlIGJhY2tzbGFzaCAqLwotCQl0cmllcyA9 IDE7CQkvKiBzbyBjYWxsIHRoZSBjb252ZXJzaW9uIGZ1bmN0aW9uICovCi0JCWJyZWFrOwotCSAg ICAgIGNhc2UgJyUnOgkJCS8qIFZhcmlhYmxlIG9yIGFycmF5IHJlZmVyZW5jZSAqLwotCSAgICAg IGNhc2UgJyYnOgkJCS8qIG11c3QgYmUgZm9sbG93ZWQgYnkgbGV0dGVyICovCi0JCWlmIChpc2Fs cGhhKCoocCsyKSkgfHwgKCoocCsyKSA+PSAnMCcgJiYgKihwKzIpIDw9ICc5JykpCi0JCSAgdHJp ZXMgPSAxOwotCQlicmVhazsKLQkgICAgICBjYXNlICdtJzogY2FzZSAndic6IGNhc2UgJyQnOiAv KiBcbSgpLCBcdigpLCBcJCgpICovCi0JCWlmICgqKHArMikgPT0gJygnKQotCQkgIGlmIChzdHJj aHIocCsyLCcpJykpCi0JCSAgICB0cmllcyA9IDE7Ci0JCWJyZWFrOwotCSAgICAgIGNhc2UgJ2Yn OgkJCS8qIFxGbmFtZSgpICovCi0JCWlmIChzdHJjaHIocCsyLCcoJykpCi0JCSAgaWYgKHN0cmNo cihwKzIsJyknKSkKLQkJICAgICAgdHJpZXMgPSAxOwotCQlicmVhazsKLQkgICAgICBjYXNlICd7 JzoJCQkvKiBcey4uLn0gKi8KLQkJaWYgKHN0cmNocihwKzIsJ30nKSkKLQkJICB0cmllcyA9IDE7 Ci0JCWJyZWFrOwotCSAgICAgIGNhc2UgJ2QnOiBjYXNlICdvJzoJLyogRGVjaW1hbCBvciBPY3Rh bCBudW1iZXIgKi8KLQkgICAgICAgIGlmIChpc2RpZ2l0KCoocCsyKSkpCi0JCSAgdHJpZXMgPSAx OwotCQlicmVhazsKLQkgICAgICBjYXNlICd4JzoJCQkvKiBIZXggbnVtYmVyICovCi0JCWlmIChp c2RpZ2l0KCoocCsyKSkgfHwKLQkJICAgICgoKihwKzIpID49ICdhJyAmJiAqKHArMikgPD0gJ2Yn KSB8fAotCQkgICAgICgoKihwKzIpID49ICdBJyAmJiAqKHArMikgPD0gJ0YnKSkpKQotCQkgIHRy aWVzID0gMTsKLQkgICAgICBkZWZhdWx0OgotCQlicmVhazsKLQkgICAgfQotCSAgICBwKys7Ci0J fQotI2Vsc2UKLSNpZm5kZWYgTk9TUEwKLQlpZiAoZikgewkJCS8qIElmIGEgY29udmVyc2lvbiBm dW5jdGlvbiBpcyBnaXZlbiAqLwotCSAgICBjaGFyICpzID0gcDsJCS8qIFNlZSBpZiB0aGVyZSBh cmUgYW55IHZhcmlhYmxlcyBpbiAqLwotCSAgICB3aGlsZSAoKnMpIHsJCS8qIHRoZSBzdHJpbmcg YW5kIGlmIHNvLCBleHBhbmQgdGhlbSAqLwotCQlpZiAoY2hrdmFyKHMpKSB7Ci0JCSAgICB0cmll cyA9IDE7Ci0JCSAgICBicmVhazsKLQkJfQotCQlzKys7Ci0JICAgIH0KLQl9Ci0jZW5kaWYgLyog Tk9TUEwgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgfQotI2lmZGVmIE9TMgotb19hZ2Fp bjoKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICBpZiAodHJpZXMgPT0gMSkKLSNlbmRpZiAvKiBET0NI S1ZBUiAqLwotICAgIGlmIChmKSB7CQkJCS8qIElmIGEgY29udmVyc2lvbiBmdW5jdGlvbiBpcyBn aXZlbiAqLwotCXpxID0gYXR4YnVmOwkJCS8qIGRvIHRoZSBjb252ZXJzaW9uLiAqLwotCWF0eG4g PSBDTURCTDsKLQlpZiAoKHggPSAoKmYpKHMsJnpxLCZhdHhuKSkgPCAwKQotCSAgcmV0dXJuKC0y KTsKLQlzID0gYXR4YnVmOwotCWlmICghKnMpCQkJLyogUmVzdWx0IGVtcHR5LCBzdWJzdGl0dXRl IGRlZmF1bHQgKi8KLQkgIHMgPSB4ZGVmOwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJjbW9maSAy IixzLHgpOwotCi0jaWZkZWYgRFRJTERFCi0gICAgZGlycCA9IHRpbGRlX2V4cGFuZChzKTsJCS8q IEV4cGFuZCB0aWxkZSwgaWYgYW55LCAqLwotICAgIGlmICgqZGlycCAhPSAnXDAnKSB7CQkvKiBy aWdodCBpbiB0aGUgYXRvbSBidWZmZXIuICovCi0JaWYgKHNldGF0bShkaXJwLDEpIDwgMCkgewot CSAgICBwcmludGYoIj9OYW1lIHRvbyBsb25nXG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0g ICAgfQotICAgIHMgPSBhdG1idWY7Ci0gICAgZGVidWcoRjExMCwiY21vZmkgMyIscywwKTsKLSNl bmRpZiAvKiBEVElMREUgKi8KLQotICAgIGlmIChpc3dpbGQocykpIHsKLSAgICAgICAgcHJpbnRm KCI/V2lsZGNhcmRzIG5vdCBhbGxvd2VkIC0gJXNcbiIscyk7Ci0gICAgICAgIHJldHVybigtMik7 Ci0gICAgfQotICAgIGRlYnVnKEYxMTAsImNtb2ZpIDQiLHMsMCk7Ci0KLSNpZmRlZiBDS19UTVBE SVIKLSAgICAvKiBpc2RpcigpIGZ1bmN0aW9uIHJlcXVpcmVkIGZvciB0aGlzISAqLwotICAgIGlm IChpc2RpcihzKSkgewotCWRlYnVnKEYxMTAsImNtb2ZpIDU6IGlzIGRpcmVjdG9yeSIscywwKTsK LSAgICAgICAgKnhwID0gczsKLQlyZXR1cm4oMik7Ci0gICAgfQotI2VuZGlmIC8qIENLX1RNUERJ UiAqLwotCi0gICAgaWYgKHN0cmNtcChzLENUVE5BTSkgJiYgKHpjaGtvKHMpIDwgMCkpIHsgLyog T0sgdG8gd3JpdGUgdG8gY29uc29sZSAqLwotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBPUzIKLS8q Ci0gIFdlIGRvbid0IHRyeSBhZ2FpbiBiZWNhdXNlIHdlIGFscmVhZHkgcHJlc2Nhbm5lZCB0aGUg c3RyaW5nIHRvIHNlZSBpZgotICBpZiBpdCBjb250YWluZWQgYW55dGhpbmcgdGhhdCBjb3VsZCBi ZSB1c2VkIGJ5IHp6c3RyaW5nKCkuCi0qLwotCWlmICh0cmllcysrIDwgMSkKLQkgIGdvdG8gb19h Z2FpbjsKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0vKgotICBOb3Rl OiB0aGVyZSBhcmUgY2VydGFpbiBjaXJjdW1zdGFuY2VzIHdoZXJlIHpjaGtvKCkgY2FuIGdpdmUg YSBmYWxzZQotICBwb3NpdGl2ZSwgc28gZG9uJ3QgcmVseSBvbiBpdCB0byBjYXRjaCBldmVyeSBj b25jZWl2YWJsZSBzaXR1YXRpb24gaW4KLSAgd2hpY2ggdGhlIGdpdmVuIG91dHB1dCBmaWxlIGNh bid0IGJlIGNyZWF0ZWQuICBJbiBvdGhlciB3b3Jkcywgd2UgcHJpbnQKLSAgYSBtZXNzYWdlIGFu ZCBmYWlsIGhlcmUgaWYgd2UgS05PVyB0aGUgZmlsZSBjYW4ndCBiZSBjcmVhdGVkLiAgSWYgd2UK LSAgc3VjY2VlZCBidXQgdGhlIGZpbGUgY2FuJ3QgYmUgb3BlbmVkLCB0aGUgY29kZSB0aGF0IHRy aWVzIHRvIG9wZW4gdGhlIGZpbGUKLSAgaGFzIHRvIHByaW50IGEgbWVzc2FnZS4KLSovCi0JZGVi dWcoRjExMCwiY21vZmkgNjogZmFpbHVyZSIscywwKTsKLSNpZmRlZiBDS1JPT1QKLQlpZiAoY2ty b290ZXJyKQotCSAgcHJpbnRmKCI/T2ZmIExpbWl0czogJXNcbiIscyk7Ci0JZWxzZQotI2VuZGlm IC8qIENLUk9PVCAqLwotCSAgcHJpbnRmKCI/V3JpdGUgcGVybWlzc2lvbiBkZW5pZWQgLSAlc1xu IixzKTsKLSNpZmRlZiBDS0NIQU5ORUxJTwotCXpfZXJyb3IgPSBGWF9BQ0M7Ci0jZW5kaWYgLyog Q0tDSEFOTkVMSU8gKi8KLSAgICAgICAgcmV0dXJuKC05KTsKLSAgICB9IGVsc2UgewotCWRlYnVn KEYxMTAsImNtb2ZpIDc6IG9rIixzLDApOwotICAgICAgICAqeHAgPSBzOwotICAgICAgICByZXR1 cm4oeCk7Ci0gICAgfQotfQotCi0vKiAgQyBNIEkgRiBJICAtLSAgUGFyc2UgdGhlIG5hbWUgb2Yg YW4gZXhpc3RpbmcgZmlsZSAgKi8KLQotLyoKLSBUaGlzIGZ1bmN0aW9uIGRlcGVuZHMgb24gdGhl IGV4dGVybmFsIGZ1bmN0aW9uczoKLSAgIHpjaGtpKCkgIC0gQ2hlY2sgaWYgaW5wdXQgZmlsZSBl eGlzdHMgYW5kIGlzIHJlYWRhYmxlLgotICAgenhwYW5kKCkgLSBFeHBhbmQgYSB3aWxkIGZpbGUg c3BlY2lmaWNhdGlvbiBpbnRvIGEgbGlzdC4KLSAgIHpuZXh0KCkgIC0gUmV0dXJuIG5leHQgZmls ZSBuYW1lIGZyb20gbGlzdC4KLSBJZiB0aGVzZSBmdW5jdGlvbnMgYXJlbid0IGF2YWlsYWJsZSwg dGhlbiB1c2UgY21mbGQoKSB0byBwYXJzZSBmaWxlbmFtZXMuCi0qLwotLyoKLSBSZXR1cm5zCi0g ICAtNCBFT0YKLSAgIC0zIGlmIG5vIGlucHV0IHByZXNlbnQgd2hlbiByZXF1aXJlZCwKLSAgIC0y IGlmIGZpbGUgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IHJlYWRhYmxlLAotICAgLTEgaWYgcmVw YXJzZSBuZWVkZWQsCi0gICAgMCBvciAxIG90aGVyd2lzZSwgd2l0aDoKLSAgICAgICAgeHAgcG9p bnRpbmcgdG8gbmFtZSwKLSAgICAgICAgd2lsZCA9IDEgaWYgbmFtZSBjb250YWlucyAnKicgb3Ig Jz8nLCAwIG90aGVyd2lzZS4KLSovCi0KLSNpZmRlZiBDT01NRU5UIC8qIFRoaXMgaG9ycmlibGUg aGFjayBoYXMgYmVlbiByZXBsYWNlZCAtIHNlZSBmdXJ0aGVyIGRvd24gKi8KLS8qCi0gICBDIE0g SSBPIEYgSSAgLS0gIFBhcnNlIGFuIGlucHV0IGZpbGUgT1IgdGhlIG5hbWUgb2YgYSBub25leGlz dGVudCBmaWxlLgotCi0gICBVc2UgdGhpcyB3aGVuIGFuIGV4aXN0aW5nIGZpbGUgaXMgd2FudGVk IChzbyB3ZSBnZXQgaGVscCwgY29tcGxldGlvbiwgZXRjKSwKLSAgIGJ1dCBpZiBhIGZpbGUgb2Yg dGhlIGdpdmVuIG5hbWUgZG9lcyBub3QgZXhpc3QsIHRoZSBuYW1lIG9mIGEgbmV3IGZpbGUgaXMK LSAgIGFjY2VwdGVkLiAgRm9yIGV4YW1wbGUsIHdpdGggdGhlIEVESVQgY29tbWFuZCAoZWRpdCBh biBleGlzdGluZyBmaWxlLCBvcgotICAgY3JlYXRlIGEgbmV3IGZpbGUpLiAgUmV0dXJucyAtOSBp ZiBmaWxlIGRvZXMgbm90IGV4aXN0LiAgSXQgaXMgdXAgdG8gdGhlCi0gICBjYWxsZXIgdG8gY2hl Y2sgY3JlYXRhYmlsaXR5LgotKi8KLXN0YXRpYyBpbnQgbm9tc2cgPSAwOwotaW50Ci1jbWlvZmko eGhscCx4ZGVmLHhwLHdpbGQsZikgY2hhciAqeGhscCwgKnhkZWYsICoqeHA7IGludCAqd2lsZDsg eHhfc3RycCBmOyB7Ci0gICAgaW50IG1zZ3NhdmUsIHg7Ci0gICAgbXNnc2F2ZSA9IG5vbXNnOwot ICAgIG5vbXNnID0gMTsKLSAgICB4ID0gY21pZmkyKHhobHAseGRlZix4cCx3aWxkLDAsTlVMTCxm LDApOwotICAgIG5vbXNnID0gbXNnc2F2ZTsKLSAgICByZXR1cm4oeCk7Ci19Ci0jZW5kaWYJLyog Q09NTUVOVCAqLwotCi1pbnQKLWNtaWZpKHhobHAseGRlZix4cCx3aWxkLGYpIGNoYXIgKnhobHAs ICp4ZGVmLCAqKnhwOyBpbnQgKndpbGQ7IHh4X3N0cnAgZjsgewotICAgIHJldHVybihjbWlmaTIo eGhscCx4ZGVmLHhwLHdpbGQsMCxOVUxMLGYsMCkpOwotfQotLyoKLSAgY21pZmlwKCkgaXMgY2Fs bGVkIHdoZW4gd2Ugd2FudCB0byBzdXBwbHkgYSBwYXRoIG9yIHBhdGggbGlzdCB0byBzZWFyY2gK LSAgaW4gY2FzZSB0aGUgZmlsZW5hbWUgdGhhdCB0aGUgdXNlciBnaXZlcyBpcyAoYSkgbm90IGFi c29sdXRlLCBhbmQgKGIpIGNhbid0Ci0gIGJlIGZvdW5kIGFzIGdpdmVuLiAgVGhlIHBhdGggc3Ry aW5nIGNhbiBiZSB0aGUgbmFtZSBvZiBhIHNpbmdsZSBkaXJlY3RvcnksCi0gIG9yIGEgbGlzdCBv ZiBkaXJlY3RvcmllcyBzZXBhcmF0ZWQgYnkgdGhlIFBBVEhTRVAgY2hhcmFjdGVyLCBkZWZpbmVk IGluCi0gIGNrdWNtZC5oLiAgTG9vayBpbiBja3V1c3IuYyBhbmQgY2t1dXMzLmMgZm9yIGV4YW1w bGVzIG9mIHVzYWdlLgotKi8KLWludAotY21pZmlwKHhobHAseGRlZix4cCx3aWxkLGQscGF0aCxm KQotICAgIGNoYXIgKnhobHAsKnhkZWYsKip4cDsgaW50ICp3aWxkLCBkOyBjaGFyICogcGF0aDsg eHhfc3RycCBmOyB7Ci0gICAgcmV0dXJuKGNtaWZpMih4aGxwLHhkZWYseHAsd2lsZCwwLHBhdGgs ZiwwKSk7Ci19Ci0KLS8qICBDIE0gRCBJIFIgIC0tICBQYXJzZSBhIGRpcmVjdG9yeSBuYW1lICAq LwotCi0vKgotIFRoaXMgZnVuY3Rpb24gZGVwZW5kcyBvbiB0aGUgZXh0ZXJuYWwgZnVuY3Rpb25z OgotICAgaXNkaXIocykgIC0gQ2hlY2sgaWYgc3RyaW5nIHMgaXMgdGhlIG5hbWUgb2YgYSBkaXJl Y3RvcnkKLSAgIHpjaGtpKHMpICAtIENoZWNrIGlmIGlucHV0IGZpbGUgcyBleGlzdHMgYW5kIHdo YXQgdHlwZSBpdCBpcy4KLSBJZiB0aGVzZSBmdW5jdGlvbnMgYXJlbid0IGF2YWlsYWJsZSwgdGhl biB1c2UgY21mbGQoKSB0byBwYXJzZSBkaXIgbmFtZXMuCi0KLSBSZXR1cm5zCi0gICAtOSBGb3Ig YWxsIHNvcnRzIG9mIHJlYXNvbnMsIGFmdGVyIHByaW50aW5nIGFwcHJvcHJpYXRlIGVycm9yIG1l c3NhZ2UuCi0gICAtNCBFT0YKLSAgIC0zIGlmIG5vIGlucHV0IHByZXNlbnQgd2hlbiByZXF1aXJl ZCwKLSAgIC0yIGlmIG91dCBvZiBzcGFjZSBvciBvdGhlciBpbnRlcm5hbCBlcnJvciwKLSAgIC0x IGlmIHJlcGFyc2UgbmVlZGVkLAotICAgIDAgb3IgMSwgd2l0aCB4cCBwb2ludGluZyB0byBuYW1l LCBpZiBkaXJlY3Rvcnkgc3BlY2lmaWVkLAotKi8KLWludAotY21kaXIoeGhscCx4ZGVmLHhwLGYp IGNoYXIgKnhobHAsICp4ZGVmLCAqKnhwOyB4eF9zdHJwIGY7IHsKLSAgICBpbnQgd2lsZDsKLSAg ICByZXR1cm4oY21pZmkyKHhobHAseGRlZix4cCwmd2lsZCwwLE5VTEwsZiwxKSk7Ci19Ci0KLS8q IExpa2UgQ01ESVIgYnV0IGluY2x1ZGVzIFBBVEggc2VhcmNoICovCi0KLWludAotY21kaXJwKHho bHAseGRlZix4cCxwYXRoLGYpIGNoYXIgKnhobHAsICp4ZGVmLCAqKnhwOyBjaGFyICogcGF0aDsg eHhfc3RycCBmOyB7Ci0gICAgaW50IHdpbGQ7Ci0gICAgcmV0dXJuKGNtaWZpMih4aGxwLHhkZWYs eHAsJndpbGQsMCxwYXRoLGYsMSkpOwotfQotCi0vKgotICBjbWlmaTIoKSBpcyB0aGUgYmFzZSBm aWxlbmFtZSBwYXJzZXIgY2FsbGVkIGJ5IGNtaWZpLCBjbWlmaXAsIGNtZGlyLCBldGMuCi0gIFVz ZSBpdCBkaXJlY3RseSB3aGVuIHlvdSBhbHNvIHdhbnQgdG8gcGFyc2UgYSBkaXJlY3Rvcnkgb3Ig ZGV2aWNlCi0gIG5hbWUgYXMgYW4gaW5wdXQgZmlsZSwgYXMgaW4gdGhlIERJUkVDVE9SWSBjb21t YW5kLiAgQ2FsbCB3aXRoOgotICAgIHhobHAgIC0tIGhlbHAgbWVzc2FnZSBvbiA/Ci0gICAgeGRl ZiAgLS0gZGVmYXVsdCByZXNwb25zZQotICAgIHhwICAgIC0tIHBvaW50ZXIgdG8gcmVzdWx0IChp biBvdXIgc3BhY2UsIG11c3QgYmUgY29waWVkIGZyb20gaGVyZSkKLSAgICB3aWxkICAtLSBmbGFn IHNldCB1cG9uIHJldHVybiB0byBpbmRpY2F0ZSBpZiBmaWxlc3BlYyB3YXMgd2lsZAotICAgIGQg ICAgIC0tIDAgdG8gcGFyc2UgZmlsZXMsIDEgdG8gcGFyc2UgZmlsZXMgb3IgZGlyZWN0b3JpZXMK LSAgICAgICAgICAgICBBZGQgMiB0byBpbmhpYml0IGZvbGxvd2luZyBvZiBzeW1saW5rcy4KLSAg ICBwYXRoICAtLSBzZWFyY2ggcGF0aCBmb3IgZmlsZXMKLSAgICBmICAgICAtLSBwb2ludGVyIHRv IHN0cmluZyBwcm9jZXNzaW5nIGZ1bmN0aW9uIChlLmcuIHRvIGV2YWx1YXRlIHZhcmlhYmxlcykK LSAgICBkaXJmbGcgLS0gMSB0byBwYXJzZSAqb25seSogZGlyZWN0b3JpZXMsIDAgb3RoZXJ3aXNl Ci0qLwotaW50Ci1jbWlmaTIoeGhscCx4ZGVmLHhwLHdpbGQsZCxwYXRoLGYsZGlyZmxnKQotICAg IGNoYXIgKnhobHAsKnhkZWYsKip4cDsgaW50ICp3aWxkLCBkOyBjaGFyICogcGF0aDsgeHhfc3Ry cCBmOyBpbnQgZGlyZmxnOyB7Ci0gICAgZXh0ZXJuIGludCByZWN1cnNpdmUsIGRpcmFjdGl2ZSwg Y2RhY3RpdmUsIGRibHF1bzsKLSAgICBpbnQgaSwgeCwgaXRzYWRpciwgeGMsIGV4cGFuZGVkID0g MCwgbmZpbGVzID0gMCwgY2hpbGRyZW4gPSAtMTsKLSAgICBpbnQgcWZsYWcgPSAwOwotICAgIGxv bmcgeTsKLSAgICBDS19PRkZfVCBmaWxlc2l6ZTsKLSAgICBjaGFyICpzcCA9IE5VTEwsICp6cSwg Km5wID0gTlVMTDsKLSAgICBjaGFyICpzdiA9IE5VTEwsICpwID0gTlVMTDsKLSNpZmRlZiBEVElM REUKLSAgICBjaGFyICpkaXJwOwotI2VuZGlmIC8qIERUSUxERSAqLwotCi0jaWZuZGVmIE5PUEFS VElBTAotI2lmbmRlZiBPUzIKLSNpZmRlZiBPU0sKLSAgICAvKiBUaGlzIGxhcmdlIGFycmF5IGlz IGR5bmFtaWMgZm9yIE9TLTkgLS0gc2hvdWxkIGRvIGZvciBvdGhlcnMgdG9vLi4uICovCi0gICAg ZXh0ZXJuIGNoYXIgKiptdGNoczsKLSNlbHNlCi0jaWZkZWYgVU5JWAotICAgIC8qIE9LLCBmb3Ig VU5JWCB0b28gKi8KLSAgICBleHRlcm4gY2hhciAqKm10Y2hzOwotI2Vsc2UKLSNpZmRlZiBWTVMK LSAgICBleHRlcm4gY2hhciAqKm10Y2hzOwotI2Vsc2UKLSAgICBleHRlcm4gY2hhciAqbXRjaHNb XTsKLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogT1NLICov Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9QQVJUSUFMICovCi0KLSAgICBpZiAoIXho bHApIHhobHAgPSAiIjsKLSAgICBpZiAoIXhkZWYpIHhkZWYgPSAiIjsKLQotI2lmbmRlZiBOT0xB U1RGSUxFCi0gICAgbWFrZXN0cigmdG1wbGFzdGZpbGUsTlVMTCk7Ci0jZW5kaWYJLyogTk9MQVNU RklMRSAqLwotICAgIG56eG9wdHMgPSAwOwkJCS8qIHp4cGFuZCgpIG9wdGlvbnMgKi8KLSAgICBk ZWJ1ZyhGMTAxLCJjbWlmaSBkIiwiIixkKTsKLSAgICBpZiAoZCAmIDIpIHsJCQkvKiBkICYgMiBt ZWFucyBkb24ndCBmb2xsb3cgc3ltbGlua3MgKi8KLQlkIF49IDI7Ci0Jbnp4b3B0cyA9IFpYX05P TElOS1M7Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsImNtaWZpIG56eG9wdHMiLCIiLG56eG9wdHMp OwotICAgIGNtZmxkZmxncyA9IDA7Ci0gICAgaWYgKHBhdGgpCi0gICAgICBpZiAoISpwYXRoKQot CXBhdGggPSBOVUxMOwotICAgIGlmIChwYXRoKSB7CQkJCS8qIE1ha2UgYSBjb3B5IHdlIGNhbiBw b2tlICovCi0JeCA9IHN0cmxlbihwYXRoKTsKLQlucCA9IChjaGFyICopIG1hbGxvYyh4ICsgMSk7 Ci0JaWYgKG5wKSB7Ci0JICAgIHN0cmNweShucCwgcGF0aCk7Ci0JICAgIHBhdGggPSBzcCA9IG5w OwotCX0KLSAgICB9Ci0gICAgZGVidWcoRjExMCwiY21pZmkyIHBhdGgiLHBhdGgsMCk7Ci0KLSAg ICBja3N0cm5jcHkoY21kZWZhdWx0LHhkZWYsQ01ERUZBVUxUKTsgLyogQ29weSBkZWZhdWx0ICov Ci0gICAgeGRlZiA9IGNtZGVmYXVsdDsKLQotICAgIGlud29yZCA9IDA7CQkJCS8qIEluaXRpYWxp emUgY291bnRzICYgcG9pbnRlcnMgKi8KLSAgICBjYyA9IDA7Ci0gICAgeGMgPSAwOwotICAgICp4 cCA9ICIiOwkJCQkvKiBQb2ludGVyIHRvIHJlc3VsdCBzdHJpbmcgKi8KLSAgICBpZiAoKHggPSBj bWZsZ3MpICE9IDEpIHsgICAgICAgICAgICAvKiBBbHJlYWR5IGNvbmZpcm1lZD8gKi8KLSNpZmRl ZiBCU19ESVJTRVAKLQlkaXJuYW1mbGcgPSAxOwotICAgICAgICB4ID0gZ3R3b3JkKDApOwkJCS8q IE5vLCBnZXQgYSB3b3JkICovCi0JZGlybmFtZmxnID0gMDsKLSNlbHNlCi0gICAgICAgIHggPSBn dHdvcmQoMCk7ICAgICAgICAgICAgICAgICAgLyogTm8sIGdldCBhIHdvcmQgKi8KLSNlbmRpZiAv KiBCU19ESVJTRVAgKi8KLSAgICB9IGVsc2UgewkJCQkvKiBJZiBzbywgdXNlIGRlZmF1bHQsIGlm IGFueS4gKi8KLSAgICAgICAgaWYgKHNldGF0bSh4ZGVmLDEpIDwgMCkgewotCSAgICBwcmludGYo Ij9EZWZhdWx0IG5hbWUgdG9vIGxvbmdcbiIpOwotCSAgICBpZiAobnApIGZyZWUobnApOwotCSAg ICByZXR1cm4oLTkpOwotCX0KLSAgICB9Ci0gIGlfcGF0aDoKLSAgICAqeHAgPSBhdG1idWY7ICAg ICAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byByZXN1bHQuICovCi0KLSAgICB3aGlsZSAo MSkgewotICAgICAgICB4YyArPSBjYzsgICAgICAgICAgICAgICAgICAgICAgIC8qIENvdW50IHRo aXMgY2hhcmFjdGVyLiAqLwotICAgICAgICBkZWJ1ZyhGMTExLCJjbWlmaSBndHdvcmQiLGF0bWJ1 Zix4Yyk7Ci0JZGVidWcoRjEwMSwiY21pZmkgc3dpdGNoIHgiLCIiLHgpOwotICAgICAgICBzd2l0 Y2ggKHgpIHsJCQkvKiB4ID0gZ3R3b3JkKCkgcmV0dXJuIGNvZGUgKi8KLQkgIGNhc2UgLTEwOgot CSAgICBpZiAoZ3RpbWVyKCkgPiB0aW1lbGltaXQpIHsKLSNpZmRlZiBJS1NECi0gICAgICAgICAg ICAgICAgaWYgKGluc2VydmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiXHJcbklL U0QgSURMRSBUSU1FT1VUOiAlZCBzZWNcclxuIiwgdGltZWxpbWl0KTsKLSAgICAgICAgICAgICAg ICAgICAgZG9leGl0KEdPT0RfRVhJVCwwKTsKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyog SUtTRCAqLwotCQkvKiBpZiAoIXF1aWV0KSBwcmludGYoIj9UaW1lZCBvdXRcbiIpOyAqLwotCQly ZXR1cm4oLTEwKTsKLQkgICAgfSBlbHNlIHsKLQkJeCA9IGd0d29yZCgwKTsKLQkJY29udGludWU7 Ci0JICAgIH0KLQkgIGNhc2UgLTk6Ci0JICAgIHByaW50ZigiQ29tbWFuZCBvciBmaWVsZCB0b28g bG9uZ1xuIik7Ci0JICBjYXNlIC00OgkJCS8qIEVPRiAqLwotCSAgY2FzZSAtMjoJCQkvKiBPdXQg b2Ygc3BhY2UuICovCi0JICBjYXNlIC0xOgkJCS8qIFJlcGFyc2UgbmVlZGVkICovCi0JICAgIGlm IChucCkgZnJlZShucCk7Ci0JICAgIHJldHVybih4KTsKLQkgIGNhc2UgMToJCQkvKiBDUiAqLwot CSAgY2FzZSAwOgkJCS8qIFNQICovCi0JICAgIGlmICh4YyA9PSAwKQkJLyogSWYgbm8gaW5wdXQu Li4gKi8KLQkgICAgICAqeHAgPSB4ZGVmOwkJLyogc3Vic3RpdHV0ZSB0aGUgZGVmYXVsdCAqLwot I2lmbmRlZiBOT0xBU1RGSUxFCi0JICAgIG1ha2VzdHIoJnRtcGxhc3RmaWxlLCp4cCk7CS8qIE1h a2UgYSBjb3B5IGJlZm9yZSBic3RyaXBwaW5nICovCi0jZW5kaWYJLyogI2lmbmRlZiBOT0xBU1RG SUxFICovCi0JICAgICp4cCA9IGJyc3RyaXAoKnhwKTsJCS8qIFN0cmlwIGJyYWNlcyAqLwotCSAg ICBpZiAoKip4cCA9PSBOVUwpIHsJCS8qIDEyIG1hciAyMDAxICovCi0JCWlmIChucCkgZnJlZShu cCk7Ci0JCXJldHVybigtMyk7Ci0JICAgIH0KLQkgICAgZGVidWcoRjExMCwiY21pZmkgYnJzdHJp cCIsKnhwLDApOwotI2lmbmRlZiBOT1NQTAotCSAgICBpZiAoZikgewkJCS8qIElmIGEgY29udmVy c2lvbiBmdW5jdGlvbiBpcyBnaXZlbiAqLwotI2lmZGVmIERPQ0hLVkFSCi0JCWNoYXIgKnMgPSAq eHA7CQkvKiBTZWUgaWYgdGhlcmUgYXJlIGFueSB2YXJpYWJsZXMgaW4gKi8KLQkJaW50IHg7Ci0J CXdoaWxlICgqcykgewkJLyogdGhlIHN0cmluZyBhbmQgaWYgc28sIGV4cGFuZCB0aGVtICovCi0J CSAgICB4ID0gY2hrdmFyKHMpOwotCQkgICAgLyogZGVidWcoRjExMSwiY21pZmkgY2hrdmFyIiwq eHAseCk7ICovCi0JCSAgICBpZiAoeCkgewotI2VuZGlmIC8qIERPQ0hLVkFSICovCi0JCQl6cSA9 IGF0eGJ1ZjsKLQkJCWF0eG4gPSBDTURCTDsKLQkJCWlmICgoKmYpKCp4cCwmenEsJmF0eG4pIDwg MCkgewotCQkJICAgIGlmIChucCkgZnJlZShucCk7Ci0JCQkgICAgcmV0dXJuKC0yKTsKLQkJCX0K LQkJCSp4cCA9IGF0eGJ1ZjsKLQkJCWlmICghYXR4YnVmWzBdKQotCQkJICAqeHAgPSB4ZGVmOwot I2lmZGVmIERPQ0hLVkFSCi0JCQlicmVhazsKLQkJICAgIH0KLQkJICAgIHMrKzsKLQkJfQotI2Vu ZGlmIC8qIERPQ0hLVkFSICovCi0JICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCSAgICBpZiAo Kip4cCA9PSBOVUwpIHsJCS8qIDEyIG1hciAyMDAxICovCi0JCWlmIChucCkgZnJlZShucCk7Ci0J CXJldHVybigtMyk7Ci0JICAgIH0KLSNpZmRlZiBEVElMREUKLQkgICAgaWYgKGRpcmZsZykgewot CQlkaXJwID0gdGlsZGVfZXhwYW5kKCp4cCk7IC8qIEV4cGFuZCB0aWxkZSwgaWYgYW55LCAqLwot CQlpZiAoKmRpcnAgIT0gJ1wwJykgewkvKiBpbiB0aGUgYXRvbSBidWZmZXIuICovCi0JCSAgICBp ZiAoc2V0YXRtKGRpcnAsMSkgPCAwKSB7Ci0JCQlwcmludGYoIkV4cGFuZGVkIG5hbWUgdG9vIGxv bmdcbiIpOwotCQkJaWYgKG5wKSBmcmVlKG5wKTsKLQkJCXJldHVybigtOSk7Ci0JCSAgICB9Ci0J CX0KLQkJKnhwID0gYXRtYnVmOwotCQlkZWJ1ZyhGMTEwLCJjbWlmaSB0aWxkZV9leHBhbmQiLCp4 cCwwKTsKLQkgICAgfQotI2VuZGlmIC8qIERUSUxERSAqLwotCSAgICBpZiAoIXN2KSB7CQkJLyog T25seSBkbyB0aGlzIG9uY2UgKi8KLQkJc3YgPSBtYWxsb2MoKGludClzdHJsZW4oKnhwKSsxKTsg LyogTWFrZSBhIHNhZmUgY29weSAqLwotCQlpZiAoIXN2KSB7Ci0JCSAgICBwcmludGYoIj9jbWlm aTogbWFsbG9jIGVycm9yXG4iKTsKLQkJICAgIGlmIChucCkgZnJlZShucCk7Ci0JCSAgICByZXR1 cm4oLTkpOwotCQl9Ci0JCXN0cmNweShzdiwqeHApOwotCQlkZWJ1ZyhGMTEwLCJjbWlmaSBzdiIs c3YsMCk7Ci0JICAgIH0KLQotLyogVGhpcyBpcyB0byBnZXQgYXJvdW5kICJjZCAvIiBmYWlsaW5n IGJlY2F1c2UgInRvbyBtYW55IGRpcmVjdG9yaWVzIG1hdGNoIiAqLwotCi0JICAgIGV4cGFuZGVk ID0gMDsJCS8qIERpZG4ndCBjYWxsIHp4cGFuZCAqLwotI2lmZGVmIGRhdGFnZW5lcmFsCi0JICAg IGRlYnVnKEYxMTAsImNtaWZpIGlzZGlyIDEiLCp4cCwwKTsKLQkgICAgewotCQlpbnQgeTsgY2hh ciAqczsKLQkJcyA9ICp4cDsKLQkJeSA9IHN0cmxlbihzKTsKLQkJaWYgKHkgPiAxICYmCi0JCSAg ICAoc1t5LTFdID09ICc6JyB8fAotCQkgICAgIHNbeS0xXSA9PSAnXicgfHwKLQkJICAgICBzW3kt MV0gPT0gJz0nKQotCQkgICAgKQotCQkgIHNbeS0xXSA9IE5VTDsKLQkgICAgfQotCSAgICBkZWJ1 ZyhGMTEwLCJjbWlmaSBpc2RpciAyIiwqeHAsMCk7Ci0jZW5kaWYgLyogIGRhdGFnZW5lcmFsICov Ci0KLSNpZmRlZiBWTVMKLQkgICAgaWYgKGRpcmZsZykgewotCQlpZiAoIXN0cmNtcCgqeHAsIi4u IikpIHsgLyogRm9yIFVOSVhlcnMuLi4gKi8KLQkJICAgIHNldGF0bSgiLSIsMCk7Ci0JCSAgICAq eHAgPSBhdG1idWY7Ci0JCX0gZWxzZSBpZiAoIXN0cmNtcCgqeHAsIi4iKSkgewotCQkgICAgc2V0 YXRtKCJbXSIsMCk7Ci0JCSAgICAqeHAgPSBhdG1idWY7Ci0JCX0KLQkgICAgfQotI2VuZGlmIC8q IFZNUyAqLwotCSAgICBpdHNhZGlyID0gaXNkaXIoKnhwKTsJLyogSXMgaXQgYSBkaXJlY3Rvcnk/ ICovCi0JICAgIGRlYnVnKEYxMTEsImNtaWZpIGl0c2FkaXIiLCp4cCxpdHNhZGlyKTsKLSNpZmRl ZiBWTVMKLQkgICAgLyogSWYgdGhleSBzYWlkICJibGFoIiB3aGVyZSAiYmxhaC5kaXIiIGlzIGEg ZGlyZWN0b3J5Li4uICovCi0JICAgIC8qIGNoYW5nZSBpdCB0byBbLmJsYWhdLiAqLwotCSAgICBp ZiAoIWl0c2FkaXIpIHsKLQkJY2hhciB0bXBidWZbNjAwXTsKLQkJaW50IGZsYWcgPSAwOyBjaGFy IGMsICogcDsKLQkJcCA9ICp4cDsKLQkJd2hpbGUgKChjID0gKnArKykgJiYgIWZsYWcpCi0JCSAg aWYgKGNrc3RyY2hyKCIuW106Kj88PiIsYykpCi0JCSAgICBmbGFnID0gMTsKLQkJZGVidWcoRjEx MSwiY21pZmkgVk1TIGRpcm5hbWUgZmxhZyIsKnhwLGZsYWcpOwotCQlpZiAoIWZsYWcpIHsKLQkJ ICAgIGNrbWFrbXNnKHRtcGJ1ZixUTVBCVUZTSVosIlsuIiwqeHAsIl0iLE5VTEwpOwotCQkgICAg aXRzYWRpciA9IGlzZGlyKHRtcGJ1Zik7Ci0JCSAgICBpZiAoaXRzYWRpcikgewotCQkJc2V0YXRt KHRtcGJ1ZiwwKTsKLQkJCSp4cCA9IGF0bWJ1ZjsKLQkJICAgIH0KLQkJICAgIGRlYnVnKEYxMTEs ImNtaWZpIFZNUyBkaXJuYW1lIGZsYWcgaXRzYWRpciIsKnhwLGl0c2FkaXIpOwotCQl9Ci0JICAg IH0gZWxzZSBpZiAoaXRzYWRpciA9PSAxICYmICooeHBbMF0pID09ICcuJyAmJiAqKHhwWzFdKSkg ewotCQljaGFyICpwOwotCQlpZiAocCA9IG1hbGxvYyhjYyArIDQpKSB7Ci0JCSAgICBja21ha21z ZyhwLGNjKzQsIlsiLCp4cCwiXSIsTlVMTCk7Ci0JCSAgICBzZXRhdG0ocCwwKTsKLQkJICAgICp4 cCA9IGF0bWJ1ZjsKLQkJICAgIGRlYnVnKEYxMTAsImNtZGlyIC5mb28iLCp4cCwwKTsKLQkJICAg IGZyZWUocCk7Ci0JCX0KLQkgICAgfSBlbHNlIGlmIChpdHNhZGlyID09IDIgJiYgIWRpcmFjdGl2 ZSkgewotCQlpbnQgeDsJCQkvKiBbRk9PXUJBUi5ESVIgaW5zdGVhZCBvZiBbRk9PLkJBUl0gKi8K LQkJY2hhciAqcDsKLQkJcCA9IG1hbGxvYyhjYyArIDQpOwotCQlpZiAocCkgewotCQkgICAgeCA9 IGN2dGRpcigqeHAscCxBVE1CTCk7IC8qIENvbnZlcnQgdG8gW0ZPTy5CQVJdICovCi0JCSAgICBp ZiAoeCA+IDApIHsKLQkJCXNldGF0bShwLDApOwotCQkJKnhwID0gYXRtYnVmOwotCQkJZGVidWco RjExMCwiY21kaXIgY3Z0ZGlyIiwqeHAsMCk7Ci0JCSAgICB9Ci0JCSAgICBmcmVlKHApOwotCQl9 Ci0JICAgIH0KLSNlbmRpZiAvKiBWTVMgKi8KLQotCSAgICBkZWJ1ZyhGMTAxLCJjbWlmaSBkaXJm bGciLCIiLGRpcmZsZyk7Ci0JICAgIGlmIChkaXJmbGcpIHsJCS8qIFBhcnNpbmcgYSBkaXJlY3Rv cnkgbmFtZT8gKi8KLQkJLyogWWVzLCBkb2VzIGl0IGNvbnRhaW4gd2lsZGNhcmRzPyAqLwotCQlp ZiAoaXN3aWxkKCp4cCkgfHwKLQkJICAgIChkaXJhY3RpdmUgJiYgKCFzdHJjbXAoKnhwLCIuIikg IHx8ICFzdHJjbXAoKnhwLCIuLiIpKSkKLQkJICAgICkgewotCQkgICAgbnp4b3B0cyB8PSBaWF9E SVJPTkxZOyAvKiBNYXRjaCBvbmx5IGRpcmVjdG9yeSBuYW1lcyAqLwotCQkgICAgaWYgKG1hdGNo ZG90KSAgbnp4b3B0cyB8PSBaWF9NQVRDSERPVDsKLQkJICAgIGlmIChyZWN1cnNpdmUpIG56eG9w dHMgfD0gWlhfUkVDVVJTRTsKLQkJICAgIGRlYnVnKEYxMTEsImNtaWZpIG56eG9wdHMgMiIsKnhw LG56eG9wdHMpOwotCQkgICAgeSA9IG56eHBhbmQoKnhwLG56eG9wdHMpOwotCQkgICAgZGVidWco RjExMSwiY21pZmkgbnp4cGFuZCAyIiwqeHAseSk7Ci0JCSAgICBuZmlsZXMgPSB5OwotCQkgICAg ZXhwYW5kZWQgPSAxOwotCQl9IGVsc2UgewotI2lmZGVmIFZNUwotLyoKLSAgVGhpcyBpcyB0byBh bGxvdyAoZS5nLikgImNkIGZvbyIsIHdoZXJlIEZPTy5ESVI7MSBpcyBpbiB0aGUKLSAgY3VycmVu dCBkaXJlY3RvcnkuCi0qLwotCQkgICAgZGVidWcoRjExMSwiY21kaXIgaXRzYWRpciIsKnhwLGl0 c2FkaXIpOwotCQkgICAgaWYgKCFpdHNhZGlyKSB7Ci0JCQljaGFyICpzOwotCQkJaW50IG47Ci0J CQlzID0gKnhwOwotCQkJbiA9IHN0cmxlbihzKTsKLQkJCWlmIChuID4gMCAmJgotI2lmZGVmIENP TU1FTlQKLQkJCSAgICAqcyAhPSAnWycgJiYgc1tuLTFdICE9ICddJyAmJgotCQkJICAgICpzICE9 ICc8JyAmJiBzW24tMV0gIT0gJz4nICYmCi0jZWxzZQotCQkJICAgIGNraW5kZXgoIlsiLHMsMCww LDEpID09IDAgJiYKLQkJCSAgICBja2luZGV4KCI8IixzLDAsMCwxKSA9PSAwICYmCi0jZW5kaWYg LyogQ09NTUVOVCAqLwotCQkJICAgIHNbbi0xXSAhPSAnOicpIHsKLQkJCSAgICBjaGFyICogZGly YnVmID0gTlVMTDsKLQkJCSAgICBkaXJidWYgPSAoY2hhciAqKW1hbGxvYyhuKzQpOwotCQkJICAg IGlmIChkaXJidWYpIHsKLQkJCQlpZiAoKnMgPT0gJy4nKQotCQkJCSAgY2ttYWttc2coZGlyYnVm LG4rNCwiWyIscywiXSIsTlVMTCk7Ci0JCQkJZWxzZQotCQkJCSAgY2ttYWttc2coZGlyYnVmLG4r NCwiWy4iLHMsIl0iLE5VTEwpOwotCQkJCWl0c2FkaXIgPSBpc2RpcihkaXJidWYpOwotCQkJCWRl YnVnKEYxMTEsImNtZGlyIGRpcmJ1ZiIsZGlyYnVmLGl0c2FkaXIpOwotCQkJCWlmIChpdHNhZGly KSB7Ci0JCQkJICAgIHNldGF0bShkaXJidWYsMCk7Ci0JCQkJICAgICp4cCA9IGF0bWJ1ZjsKLQkJ CQkgICAgZGVidWcoRjExMCwiY21kaXIgbmV3ICp4cCIsKnhwLDApOwotCQkJCX0KLQkJCQlmcmVl KGRpcmJ1Zik7Ci0JCQkgICAgfQotCi0vKiBUaGlzIGlzIHRvIGFsbG93IENEUEFUSCB0byB3b3Jr IGluIFZNUy4uLiAqLwotCi0JCQl9IGVsc2UgaWYgKG4gPiAwKSB7Ci0JCQkgICAgY2hhciAqIHA7 IGludCBpLCBqLCBrLCBkOwotCQkJICAgIGNoYXIgcmJbMl0gPSAiXSI7Ci0JCQkgICAgaWYgKHAg PSBtYWxsb2MoeCArIDgpKSB7Ci0JCQkJY2tzdHJuY3B5KHAsKnhwLHgrOCk7Ci0JCQkJaSA9IGNr aW5kZXgoIi4iLHAsLTEsMSwxKTsKLQkJCQlkID0gY2tpbmRleCgiLmRpciIscCwwLDAsMCk7Ci0J CQkJaiA9IGNraW5kZXgoIl0iLHAsLTEsMSwxKTsKLQkJCQlpZiAoaiA9PSAwKSB7Ci0JCQkJICAg IGogPSBja2luZGV4KCI+IixwLC0xLDEsMSk7Ci0JCQkJICAgIHJiWzBdID0gJz4nOwotCQkJCX0K LQkJCQlrID0gY2tpbmRleCgiOiIscCwtMSwxLDEpOwotCQkJCWlmIChpIDwgaiB8fCBpIDwgaykg aSA9IDA7Ci0JCQkJaWYgKGQgPCBqIHx8IGQgPCBrKSBkID0gMDsKLQkJCQkvKiBDaGFuZ2UgW0ZP T11CQVIgb3IgW0ZPT11CQVIuRElSICovCi0JCQkJLyogdG8gW0ZPTy5CQVJdICovCi0JCQkJaWYg KGogPiAwICYmIGogPCBuKSB7Ci0JCQkJICAgIHBbai0xXSA9ICcuJzsKLQkJCQkgICAgaWYgKGQg PiAwKSBwW2QtMV0gPSBOVUw7Ci0JCQkJICAgIGNrc3RybmNhdChwLHJiLHgrOCk7Ci0JCQkJICAg IGRlYnVnKEYxMTAsImNtZGlyIHh4eCIscCwwKTsKLQkJCQl9Ci0JCQkJaXRzYWRpciA9IGlzZGly KHApOwotCQkJCWRlYnVnKEYxMTEsImNtZGlyIHAiLHAsaXRzYWRpcik7Ci0JCQkJaWYgKGl0c2Fk aXIpIHsKLQkJCQkgICAgc2V0YXRtKHAsMCk7Ci0JCQkJICAgICp4cCA9IGF0bWJ1ZjsKLQkJCQkg ICAgZGVidWcoRjExMCwiY21kaXIgbmV3ICp4cCIsKnhwLDApOwotCQkJCX0KLQkJCQlmcmVlKHAp OwotCQkJICAgIH0KLQkJCX0KLQkJICAgIH0KLSNlbmRpZiAvKiBWTVMgKi8KLQkJICAgIHkgPSAo IWl0c2FkaXIpID8gMCA6IDE7Ci0JCSAgICBkZWJ1ZyhGMTExLCJjbWlmaSB5IGl0c2FkaXIiLCp4 cCx5KTsKLQkJfQotCSAgICB9IGVsc2UgewkJCS8qIFBhcnNpbmcgYSBmaWxlbmFtZS4gKi8KLQkJ ZGVidWcoRjExMCwiY21pZmkgKnhwIHByZS16eHBhbmQiLCp4cCwwKTsKLSNpZm5kZWYgQ09NTUVO VAotCQluenhvcHRzIHw9IChkID09IDApID8gWlhfRklMT05MWSA6IDA7IC8qIFNvIGFsd2F5cyBl eHBhbmQuICovCi0JCWlmIChtYXRjaGRvdCkgIG56eG9wdHMgfD0gWlhfTUFUQ0hET1Q7Ci0JCWlm IChyZWN1cnNpdmUpIG56eG9wdHMgfD0gWlhfUkVDVVJTRTsKLQkJeSA9IG56eHBhbmQoKnhwLG56 eG9wdHMpOwotI2Vsc2UKLS8qIEhlcmUgd2UncmUgdHJ5aW5nIHRvIGZpeCBhIHByb2JsZW0gaW4g d2hpY2ggYSBkaXJlY3RvcnkgbmFtZSBpcyBhY2NlcHRlZCAqLwotLyogYXMgYSBmaWxlbmFtZSwg YnV0IHRoaXMgYnJlYWtzIHRvbyBtYW55IG90aGVyIHRoaW5ncy4gKi8KLQkJLyogbnp4b3B0cyA9 IDA7ICovCi0JCWlmICghZCkgewotCQkgICAgaWYgKGl0c2FkaXIgJiAhaXN3aWxkKCp4cCkpIHsK LQkJCWRlYnVnKEYxMDAsImNtaWZpIGRpciB3aGVuIGZpbG9ubHkiLCIiLDApOwotCQkJcHJpbnRm KCI/Tm90IGEgcmVndWxhciBmaWxlOiBcIiVzXCJcbiIsKnhwKTsKLQkJCWlmIChzdikgZnJlZShz dik7Ci0JCQlpZiAobnApIGZyZWUobnApOwotCQkJcmV0dXJuKC05KTsKLQkJICAgIH0gZWxzZSB7 Ci0JCQluenhvcHRzIHw9IFpYX0ZJTE9OTFk7Ci0JCQlpZiAobWF0Y2hkb3QpICBuenhvcHRzIHw9 IFpYX01BVENIRE9UOwotCQkJaWYgKHJlY3Vyc2l2ZSkgbnp4b3B0cyB8PSBaWF9SRUNVUlNFOwot CQkJeSA9IG56eHBhbmQoKnhwLG56eG9wdHMpOwotCQkgICAgfQotCQl9Ci0jZW5kaWYgLyogQ09N TUVOVCAqLwotCQluZmlsZXMgPSB5OwotCQlkZWJ1ZyhGMTExLCJjbWlmaSB5IG56eHBhbmQiLCp4 cCx5KTsKLQkJZGVidWcoRjExMSwiY21pZmkgeSBhdG1idWYiLGF0bWJ1ZixpdHNhZGlyKTsKLQkJ ZXhwYW5kZWQgPSAxOwotCSAgICB9Ci0JICAgIC8qIGRvbXlkaXIoKSBjYWxscyB6eHJld2luZCgp IHNvIHdlIE1VU1QgY2FsbCBuenhwYW5kKCkgaGVyZSAqLwotCSAgICBpZiAoIWV4cGFuZGVkICYm IGRpcmFjdGl2ZSkgewotCQlkZWJ1ZyhGMTEwLCJjbWlmaSBkaXJhY3RpdmUgY2F0Y2gtYWxsIHp4 cGFuZCIsKnhwLDApOwotCQluenhvcHRzIHw9IChkID09IDApID8gWlhfRklMT05MWSA6IChkaXJm bGcgPyBaWF9ESVJPTkxZIDogMCk7Ci0JCWlmIChtYXRjaGRvdCkgIG56eG9wdHMgfD0gWlhfTUFU Q0hET1Q7Ci0JCWlmIChyZWN1cnNpdmUpIG56eG9wdHMgfD0gWlhfUkVDVVJTRTsKLQkJeSA9IG56 eHBhbmQoKnhwLG56eG9wdHMpOwotCQlkZWJ1ZyhGMTExLCJjbWlmaSBkaXJhY3RpdmUgbnp4cGFu ZCIsKnhwLHkpOwotCQluZmlsZXMgPSB5OwotCQlleHBhbmRlZCA9IDE7Ci0JICAgIH0KLQkgICAg KndpbGQgPSAoaXN3aWxkKHN2KSB8fCAoeSA+IDEpKSAmJiAoaXRzYWRpciA9PSAwKTsKLQotI2lm ZGVmIFJFQ1VSU0lWRQotCSAgICBpZiAoISp3aWxkKSAqd2lsZCA9IHJlY3Vyc2l2ZTsKLSNlbmRp ZiAvKiBSRUNVUlNJVkUgKi8KLQotCSAgICBkZWJ1ZyhGMTExLCJjbWlmaSBzdiB3aWxkIixzdiwq d2lsZCk7Ci0JICAgIGRlYnVnKEYxMDEsImNtaWZpIHkiLCIiLHkpOwotCSAgICBpZiAoZGlyZmxn ICYmICp3aWxkICYmIGNkYWN0aXZlKSB7Ci0JCWlmICh5ID4gMSkgewotCQkgICAgcHJpbnRmKCI/ V2lsZGNhcmQgbWF0Y2hlcyBtb3JlIHRoYW4gb25lIGRpcmVjdG9yeVxuIik7Ci0JCSAgICBpZiAo c3YpIGZyZWUoc3YpOwotCQkgICAgaWYgKG5wKSBmcmVlKG5wKTsKLQkJICAgIHJldHVybigtOSk7 Ci0JCX0gZWxzZSB7Ci0JCSAgICB6bmV4dCgqeHApOwotCQl9Ci0JICAgIH0KLQkgICAgaWYgKGl0 c2FkaXIgJiYgZCAmJiAhZGlyZmxnKSB7IC8qIEl0J3MgYSBkaXJlY3RvcnkgYW5kIG5vdCB3aWxk ICovCi0JCWlmIChzdikgZnJlZShzdik7CS8qIGFuZCBpdCdzIG9rIHRvIHBhcnNlIGRpcmVjdG9y aWVzICovCi0JCWlmIChucCkgZnJlZShucCk7Ci0jaWZuZGVmIE5PTEFTVEZJTEUKLQkJbWFrZXN0 cigmbGFzdGZpbGUsdG1wbGFzdGZpbGUpOwotI2VuZGlmCS8qIE5PTEFTVEZJTEUgKi8KLQkJcmV0 dXJuKHgpOwotCSAgICB9Ci0JICAgIGlmICh5ID09IDApIHsJCS8qIEZpbGUgd2FzIG5vdCBmb3Vu ZCAqLwotCQlpbnQgZG9zZWFyY2ggPSAwOwotCQlkb3NlYXJjaCA9IChwYXRoICE9IE5VTEwpOyAv KiBBIHNlYXJjaCBwYXRoIHdhcyBnaXZlbiAqLwotCQlpZiAoZG9zZWFyY2gpIHsKLQkJICAgIGRv c2VhcmNoID0gaGFzbm9wYXRoKHN2KTsgLyogRmlsZW5hbWUgaW5jbHVkZXMgbm8gcGF0aCAqLwot CQkgICAgZGVidWcoRjExMSwiY21pZmlwIGhhc25vcGF0aCIsc3YsZG9zZWFyY2gpOwotCQl9Ci0J CWlmIChkb3NlYXJjaCkgewkJLyogU2VhcmNoIHRoZSBwYXRoLi4uICovCi0JCSAgICBjaGFyICog cHRyID0gcGF0aDsKLQkJICAgIGNoYXIgYzsKLQkJICAgIHdoaWxlICgxKSB7Ci0JCQljID0gKnB0 cjsKLQkJCWlmIChjID09IFBBVEhTRVAgfHwgYyA9PSBOVUwpIHsKLQkJCSAgICBpZiAoISpwYXRo KSB7Ci0JCQkJcGF0aCA9IE5VTEw7Ci0JCQkJYnJlYWs7Ci0JCQkgICAgfQotCQkJICAgICpwdHIg PSBOVUw7Ci0jaWZkZWYgVU5JWAotLyogQnkgZGVmaW5pdGlvbiBvZiBDRFBBVEgsIGFuIGVtcHR5 IG1lbWJlciBkZW5vdGVzIHRoZSBjdXJyZW50IGRpcmVjdG9yeSAqLwotCQkJICAgIGlmICghKnBh dGgpCi0JCQkgICAgICBja3N0cm5jcHkoYXRtYnVmLCIuIixBVE1CTCk7Ci0JCQkgICAgZWxzZQot I2VuZGlmIC8qIFVOSVggKi8KLQkJCSAgICAgIGNrc3RybmNweShhdG1idWYscGF0aCxBVE1CTCk7 Ci0jaWZkZWYgVk1TCi0JCQkgICAgYXRtYnVmW0FUTUJMXSA9IE5VTDsKLS8qIElmIHdlIGhhdmUg YSBsb2dpY2FsIG5hbWUsIGV2YWx1YXRlIGl0IHJlY3Vyc2l2ZWx5ICovCi0JCQkgICAgaWYgKCoo cHRyLTEpID09ICc6JykgeyAvKiBMb2dpY2FsIG5hbWUgZW5kcyBpbiA6ICovCi0JCQkJY2hhciAq cDsgaW50IG47Ci0JCQkJd2hpbGUgKCgobiA9IHN0cmxlbihhdG1idWYpKSAgPiAwKSAmJgotCQkJ CSAgICAgICBhdG1idWZbbi0xXSA9PSAnOicpIHsKLQkJCQkgICAgYXRtYnVmW24tMV0gPSBOVUw7 Ci0JCQkJICAgIGZvciAocCA9IGF0bWJ1ZjsgKnA7IHArKykKLQkJCQkgICAgICBpZiAoaXNsb3dl cigqcCkpICpwID0gdG91cHBlcigqcCk7Ci0JCQkJICAgIGRlYnVnKEYxMTEsImNtZGlyIENEUEFU SCBMTiAxIixhdG1idWYsbik7Ci0JCQkJICAgIHAgPSBnZXRlbnYoYXRtYnVmKTsKLQkJCQkgICAg ZGVidWcoRjExMCwiY21kaXIgQ0RQQVRIIExOIDIiLHAsMCk7Ci0JCQkJICAgIGlmICghcCkKLQkJ CQkgICAgICBicmVhazsKLQkJCQkgICAgc3RybmNweShhdG1idWYscCxBVE1CTCk7Ci0JCQkJICAg IGF0bWJ1ZltBVE1CTF0gPSBOVUw7Ci0JCQkJfQotCQkJICAgIH0KLSNlbHNlCi0jaWZkZWYgT1My Ci0JCQkgICAgaWYgKCoocHRyLTEpICE9ICdcXCcgJiYgKihwdHItMSkgIT0gJy8nKQotCQkJICAg ICAgY2tzdHJuY2F0KGF0bWJ1ZiwiXFwiLEFUTUJMKTsKLSNlbHNlCi0jaWZkZWYgVU5JWAotCQkJ ICAgIGlmICgqKHB0ci0xKSAhPSAnLycpCi0JCQkgICAgICBja3N0cm5jYXQoYXRtYnVmLCIvIixB VE1CTCk7Ci0jZWxzZQotI2lmZGVmIGRhdGFnZW5lcmFsCi0JCQkgICAgaWYgKCoocHRyLTEpICE9 ICc6JykKLQkJCSAgICAgIGNrc3RybmNhdChhdG1idWYsIjoiLEFUTUJMKTsKLSNlbmRpZiAvKiBk YXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRp ZiAvKiBWTVMgKi8KLQkJCSAgICBja3N0cm5jYXQoYXRtYnVmLHN2LEFUTUJMKTsKLQkJCSAgICBk ZWJ1ZyhGMTEwLCJjbWlmaXAgYWRkIHBhdGgiLGF0bWJ1ZiwwKTsKLQkJCSAgICBpZiAoYyA9PSBQ QVRIU0VQKSBwdHIrKzsKLQkJCSAgICBwYXRoID0gcHRyOwotCQkJICAgIGJyZWFrOwotCQkJfQot CQkJcHRyKys7Ci0JCSAgICB9Ci0JCSAgICB4ID0gMTsKLQkJICAgIGlud29yZCA9IDA7Ci0JCSAg ICBjYyA9IDA7Ci0JCSAgICB4YyA9IChpbnQpIHN0cmxlbihhdG1idWYpOwotCQkgICAgKnhwID0g IiI7Ci0JCSAgICBnb3RvIGlfcGF0aDsKLQkJfQotCQlpZiAoZCkgewotCQkgICAgaWYgKHN2KSBm cmVlKHN2KTsKLQkJICAgIGlmIChucCkgZnJlZShucCk7Ci0JCSAgICByZXR1cm4oLTIpOwotCQl9 IGVsc2UgewotCQkgICAgaWYgKCFub21zZykgewotI2lmZGVmIENLUk9PVAotCQkJaWYgKGNrcm9v dGVycikKLQkJCSAgcHJpbnRmKCI/T2ZmIExpbWl0czogJXNcbiIsc3YpOwotCQkJZWxzZQotI2Vu ZGlmIC8qIENLUk9PVCAqLwotCQkJICBpZiAoIXF1aWV0KQotCQkJICAgIHByaW50ZigiP05vICVz IG1hdGNoIC0gJXNcbiIsCi0JCQkJIGRpcmZsZyA/ICJkaXJlY3RvcmllcyIgOiAiZmlsZXMiLCBz dik7Ci0JCSAgICB9Ci0JCSAgICBpZiAoc3YpIGZyZWUoc3YpOwotCQkgICAgaWYgKG5wKSBmcmVl KG5wKTsKLQkJICAgIHJldHVybigtOSk7Ci0JCX0KLQkgICAgfSBlbHNlIGlmICh5IDwgMCkgewot I2lmZGVmIENLUk9PVAotCQlpZiAoY2tyb290ZXJyKQotCQkgIHByaW50ZigiP09mZiBMaW1pdHM6 ICVzXG4iLHN2KTsKLQkJZWxzZQotI2VuZGlmIC8qIENLUk9PVCAqLwotCQkgIHByaW50ZigiP1Rv byBtYW55ICVzIG1hdGNoIC0gJXNcbiIsCi0JCQkgZGlyZmxnID8gImRpcmVjdG9yaWVzIiA6ICJm aWxlcyIsIHN2KTsKLQkJaWYgKHN2KSBmcmVlKHN2KTsKLQkJaWYgKG5wKSBmcmVlKG5wKTsKLQkJ cmV0dXJuKC05KTsKLQkgICAgfSBlbHNlIGlmICgqd2lsZCB8fCB5ID4gMSkgewotCQlpZiAoc3Yp IGZyZWUoc3YpOwotCQlpZiAobnApIGZyZWUobnApOwotI2lmbmRlZiBOT0xBU1RGSUxFCi0JCW1h a2VzdHIoJmxhc3RmaWxlLHRtcGxhc3RmaWxlKTsKLSNlbmRpZgkvKiBOT0xBU1RGSUxFICovCi0J CXJldHVybih4KTsKLQkgICAgfQotCi0JICAgIC8qIElmIG5vdCB3aWxkLCBzZWUgaWYgaXQgZXhp c3RzIGFuZCBpcyByZWFkYWJsZS4gKi8KLQotCSAgICBkZWJ1ZyhGMTExLCJjbWlmaSBzdiBub3Qg d2lsZCIsc3YsKndpbGQpOwotCSAgICBpZiAoZXhwYW5kZWQpCi0JICAgICAgem5leHQoKnhwKTsJ CS8qIEdldCBmaXJzdCAob25seT8pIG1hdGNoaW5nIGZpbGUgKi8KLQkgICAgaWYgKGRpcmZsZykJ CQkvKiBNYXliZSB3aWxkIGFuZCBleHBhbmRlZCAqLwotCSAgICAgIGl0c2FkaXIgPSBpc2Rpcigq eHApOwkvKiBzbyBkbyB0aGlzIGFnYWluLiAqLwotCSAgICBmaWxlc2l6ZSA9IGRpcmZsZyA/IGl0 c2FkaXIgOiB6Y2hraSgqeHApOyAvKiBDaGVjayBhY2Nlc3NpYmlsaXR5ICovCi0JICAgIGlmIChl eHBhbmRlZCkgewotI2lmZGVmIFpYUkVXSU5ECi0JCW5maWxlcyA9IHp4cmV3aW5kKCk7CS8qIFJl d2luZCBzbyBuZXh0IHpuZXh0KCkgZ2V0cyAxc3QgKi8KLSNlbHNlCi0KLQkJbnp4b3B0cyB8PSBk aXJmbGcgPyBaWF9ESVJPTkxZIDogMDsKLQkJaWYgKG1hdGNoZG90KSAgbnp4b3B0cyB8PSBaWF9N QVRDSERPVDsKLQkJaWYgKHJlY3Vyc2l2ZSkgbnp4b3B0cyB8PSBaWF9SRUNVUlNFOwotCQluZmls ZXMgPSBuenhwYW5kKCp4cCxuenhvcHRzKTsKLSNlbmRpZiAvKiBaWFJFV0lORCAqLwotCSAgICB9 Ci0JICAgIGRlYnVnKEYxMTEsImNtaWZpIG5maWxlcyIsKnhwLG5maWxlcyk7Ci0JICAgIGRlYnVn KEYxMDEsImNtaWZpIGZpbGVzaXplIiwiIixmaWxlc2l6ZSk7Ci0JICAgIGZyZWUoc3YpOwkJCS8q IGRvbmUgd2l0aCB0aGlzICovCi0JICAgIHN2ID0gTlVMTDsKLQkgICAgaWYgKGRpcmZsZyAmJiAh ZmlsZXNpemUpIHsKLQkJcHJpbnRmKCI/Tm90IGEgZGlyZWN0b3J5IC0gJXNcbiIsKnhwKTsKLSNp ZmRlZiBDS0NIQU5ORUxJTwotCQl6X2Vycm9yID0gRlhfQUNDOwotI2VuZGlmIC8qIENLQ0hBTk5F TElPICovCi0JCXJldHVybigtOSk7Ci0JICAgIH0gZWxzZSBpZiAoZmlsZXNpemUgPT0gKENLX09G Rl9UKS0zKSB7Ci0JCWlmICgheGNtZmRiKSB7Ci0JCSAgICBpZiAoZGlyYWN0aXZlKQotCQkgICAg ICAvKiBEb24ndCBzaG93IGZpbGVuYW1lIGlmIHdlJ3JlIG5vdCBhbGxvd2VkIHRvIHNlZSBpdCAq LwotCQkgICAgICBwcmludGYoIj9SZWFkIHBlcm1pc3Npb24gZGVuaWVkXG4iKTsKLQkJICAgIGVs c2UKLQkJICAgICAgcHJpbnRmKCI/UmVhZCBwZXJtaXNzaW9uIGRlbmllZCAtICVzXG4iLCp4cCk7 Ci0JCX0KLQkJaWYgKG5wKSBmcmVlKG5wKTsKLSNpZmRlZiBDS0NIQU5ORUxJTwotCQl6X2Vycm9y ID0gRlhfQUNDOwotI2VuZGlmIC8qIENLQ0hBTk5FTElPICovCi0JCXJldHVybih4Y21mZGIgPyAt NiA6IC05KTsKLQkgICAgfSBlbHNlIGlmIChmaWxlc2l6ZSA9PSAoQ0tfT0ZGX1QpLTIpIHsKLQkJ aWYgKCFyZWN1cnNpdmUpIHsKLQkJICAgIGlmIChucCkgZnJlZShucCk7Ci0JCSAgICBpZiAoZCkg ewotI2lmbmRlZiBOT0xBU1RGSUxFCi0JCQltYWtlc3RyKCZsYXN0ZmlsZSx0bXBsYXN0ZmlsZSk7 Ci0jZW5kaWYJLyogTk9MQVNURklMRSAqLwotCQkJcmV0dXJuKDApOwotCQkgICAgfQotCQkgICAg aWYgKCF4Y21mZGIpCi0JCSAgICAgIHByaW50ZigiP0ZpbGUgbm90IHJlYWRhYmxlIC0gJXNcbiIs KnhwKTsKLSNpZmRlZiBDS0NIQU5ORUxJTwotCQkgICAgel9lcnJvciA9IEZYX0FDQzsKLSNlbmRp ZiAvKiBDS0NIQU5ORUxJTyAqLwotCQkgICAgcmV0dXJuKHhjbWZkYiA/IC02IDogLTkpOwotCQl9 Ci0JICAgIH0gZWxzZSBpZiAoZmlsZXNpemUgPCAoQ0tfT0ZGX1QpMCkgewotCQlpZiAobnApIGZy ZWUobnApOwotCQlpZiAoIW5vbXNnICYmICF4Y21mZGIpCi0JCSAgcHJpbnRmKCI/RmlsZSBub3Qg Zm91bmQgLSAlc1xuIiwqeHApOwotI2lmZGVmIENLQ0hBTk5FTElPCi0JCXpfZXJyb3IgPSBGWF9G TkY7Ci0jZW5kaWYgLyogQ0tDSEFOTkVMSU8gKi8KLQkJcmV0dXJuKHhjbWZkYiA/IC02IDogLTkp OwotCSAgICB9Ci0JICAgIGlmIChucCkgZnJlZShucCk7Ci0jaWZuZGVmIE5PTEFTVEZJTEUKLQkg ICAgbWFrZXN0cigmbGFzdGZpbGUsdG1wbGFzdGZpbGUpOwotI2VuZGlmCS8qIE5PTEFTVEZJTEUg Ki8KLQkgICAgcmV0dXJuKHgpOwotCi0jaWZuZGVmIE1BQwotCSAgY2FzZSAyOgkJCS8qIEVTQyAq LwotCSAgICBkZWJ1ZyhGMTAxLCJjbWlmaSBlc2MsIHhjIiwiIix4Yyk7Ci0JICAgIGlmICh4YyA9 PSAwKSB7Ci0JCWlmICgqeGRlZikgewotCQkgICAgcHJpbnRmKCIlcyAiLHhkZWYpOyAvKiBJZiBh dCBiZWdpbm5pbmcgb2YgZmllbGQgKi8KLSNpZmRlZiBHRU1ET1MKLQkJICAgIGZmbHVzaChzdGRv dXQpOwotI2VuZGlmIC8qIEdFTURPUyAqLwotCQkgICAgaW53b3JkID0gY21mbGdzID0gMDsKLQkJ ICAgIGFkZGJ1Zih4ZGVmKTsJLyogU3VwcGx5IGRlZmF1bHQuICovCi0JCSAgICBpZiAoc2V0YXRt KHhkZWYsMCkgPCAwKSB7Ci0JCQlwcmludGYoIkRlZmF1bHQgbmFtZSB0b28gbG9uZ1xuIik7Ci0J CQlpZiAobnApIGZyZWUobnApOwotCQkJcmV0dXJuKC05KTsKLQkJICAgIH0KLQkJfSBlbHNlIHsJ CS8qIE5vIGRlZmF1bHQgKi8KLQkJICAgIGJsZWVwKEJQX1dBUk4pOwotCQl9Ci0JCWJyZWFrOwot CSAgICB9Ci0JICAgIGlmICgqKnhwID09ICd7JykgewkJLyogRGlkIHVzZXIgdHlwZSBvcGVuaW5n IGJyYWNlLi4uICovCi0JCSp4cCA9ICp4cCArIDE7Ci0JCXhjLS07Ci0JCWNjLS07Ci0JCXFmbGFn ID0gJ30nOwotCSAgICB9IGVsc2UgaWYgKGRibHF1byAmJiAqKnhwID09ICciJykgewkvKiBvciBk b3VibGVxdW90ZT8gKi8KLQkJKnhwID0gKnhwICsgMTsJCS8qIElmIHNvIGlnbm9yZSBpdCBhbmQg c3BhY2UgcGFzdCBpdCAqLwotCQl4Yy0tOwotCQljYy0tOwotCQlxZmxhZyA9ICciJzsKLQkgICAg fQotI2lmbmRlZiBOT1NQTAotCSAgICBpZiAoZikgewkJCS8qIElmIGEgY29udmVyc2lvbiBmdW5j dGlvbiBpcyBnaXZlbiAqLwotI2lmZGVmIERPQ0hLVkFSCi0JCWNoYXIgKnMgPSAqeHA7CQkvKiBT ZWUgaWYgdGhlcmUgYXJlIGFueSB2YXJpYWJsZXMgaW4gKi8KLQkJd2hpbGUgKCpzKSB7CQkvKiB0 aGUgc3RyaW5nIGFuZCBpZiBzbywgZXhwYW5kIGl0LiAgKi8KLQkJICAgIGlmIChjaGt2YXIocykp IHsKLSNlbmRpZiAvKiBET0NIS1ZBUiAqLwotCQkJenEgPSBhdHhidWY7Ci0JCQlhdHhuID0gQ01E Qkw7Ci0JCQlpZiAoKHggPSAoKmYpKCp4cCwmenEsJmF0eG4pKSA8IDApIHsKLQkJCSAgICBpZiAo bnApIGZyZWUobnApOwotCQkJICAgIHJldHVybigtMik7Ci0JCQl9Ci0jaWZkZWYgRE9DSEtWQVIK LQkJICAgIC8qIHJlZHVjZSBjYyBieSBudW1iZXIgb2YgXFwgY29uc3VtZWQgYnkgY29udmVyc2lv biAqLwotCQkgICAgLyogZnVuY3Rpb24gKG5lZWRlZCBmb3IgT1MvMiwgd2hlcmUgXCBpcyBwYXRo IHNlcGFyYXRvcikgKi8KLQkJCWNjIC09IChzdHJsZW4oKnhwKSAtIHN0cmxlbihhdHhidWYpKTsK LSNlbmRpZiAvKiBET0NIS1ZBUiAqLwotCQkJKnhwID0gYXR4YnVmOwotCQkJaWYgKCFhdHhidWZb MF0pIHsgLyogUmVzdWx0IGVtcHR5LCB1c2UgZGVmYXVsdCAqLwotCQkJICAgICp4cCA9IHhkZWY7 Ci0JCQkgICAgY2MgPSBzdHJsZW4oeGRlZik7Ci0JCQl9Ci0jaWZkZWYgRE9DSEtWQVIKLQkJCWJy ZWFrOwotCQkgICAgfQotCQkgICAgcysrOwotCQl9Ci0jZW5kaWYgLyogRE9DSEtWQVIgKi8KLQkg ICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZmRlZiBEVElMREUKLQkgICAgaWYgKGRpcmZs ZyAmJiAqKCp4cCkgPT0gJ34nKSB7Ci0JCWRlYnVnKEYxMTEsImNtaWZpIHRpbGRlX2V4cGFuZCBB IiwqeHAsY2MpOwotCQlkaXJwID0gdGlsZGVfZXhwYW5kKCp4cCk7IC8qIEV4cGFuZCB0aWxkZSwg aWYgYW55Li4uICovCi0JCWlmICghZGlycCkgZGlycCA9ICIiOwotCQlpZiAoKmRpcnApIHsKLQkJ ICAgIGludCBpLCB4eDsKLQkJICAgIGNoYXIgKiBzcDsKLQkJICAgIHhjID0gY2M7CQkvKiBMZW5n dGggb2YgfnRoaW5nICovCi0JCSAgICB4eCA9IHNldGF0bShkaXJwLDApOyAvKiBDb3B5IGV4cGFu c2lvbiB0byBhdG9tIGJ1ZmZlciAqLwotCQkgICAgZGVidWcoRjExMSwiY21pZmkgdGlsZGVfZXhw YW5kIEIiLGF0bWJ1ZixjYyk7Ci0JCSAgICBpZiAoeHggPCAwKSB7Ci0JCQlwcmludGYoIkV4cGFu ZGVkIG5hbWUgdG9vIGxvbmdcbiIpOwotCQkJaWYgKG5wKSBmcmVlKG5wKTsKLQkJCXJldHVybigt OSk7Ci0JCSAgICB9Ci0JCSAgICBkZWJ1ZyhGMTExLCJjbWlmaSB0aWxkZV9leHBhbmQgeGMiLCIi LHhjKTsKLQkJICAgIGZvciAoaSA9IDA7IGkgPCB4YzsgaSsrKSB7Ci0JCQljbWRjaGFyZGVsKCk7 CS8qIEJhY2sgdXAgb3ZlciB+dGhpbmcgKi8KLQkJCWJwLS07Ci0JCSAgICB9Ci0JCSAgICB4YyA9 IGNjOwkJLyogSG93IG1hbnkgbmV3IG9uZXMgd2UganVzdCBnb3QgKi8KLQkJICAgIHNwID0gYXRt YnVmOwotCQkgICAgcHJpbnRmKCIlcyIsc3ApOwkvKiBQcmludCB0aGVtICovCi0JCSAgICB3aGls ZSAoKCpicCsrID0gKnNwKyspKSA7CS8qIENvcHkgdG8gY29tbWFuZCBidWZmZXIgKi8KLQkJICAg IGJwLS07CSAgICAJICAgICAgICAvKiBCYWNrIHVwIG92ZXIgTlVMICovCi0JCX0KLQkJKnhwID0g YXRtYnVmOwotCSAgICB9Ci0jZW5kaWYgLyogRFRJTERFICovCi0KLQkgICAgc3AgPSAqeHAgKyBj YzsKLQotI2lmZGVmIFVOSVhPUk9TSwotCSAgICBpZiAoIXN0cmNtcChhdG1idWYsIi4uIikpIHsK LQkJcHJpbnRmKCIgIik7Ci0JCWNrc3RybmNhdChjbWRidWYsIiAiLENNREJMKTsKLQkJY2MrKzsK LQkJYnArKzsKLQkJKndpbGQgPSAwOwotCQkqeHAgPSBhdG1idWY7Ci0JCWJyZWFrOwotCSAgICB9 IGVsc2UgaWYgKCFzdHJjbXAoYXRtYnVmLCIuIikpIHsKLQkJYmxlZXAoQlBfV0FSTik7Ci0JCWlm IChucCkgZnJlZShucCk7Ci0JCXJldHVybigtMSk7Ci0JICAgIH0gZWxzZSB7Ci0JCS8qIFRoaXMg cGF0Y2hlcyBhIGdsaXRjaCB3aGVuIHVzZXIgdHlwZXMgIi4vZm9vPEVTQz4iICovCi0JCS8qIGlu IHdoaWNoIHRoZSBuZXh0IHR3byBjaGFycyBhcmUgb21pdHRlZCBmcm9tIHRoZSAqLwotCQkvKiBl eHBhbnNpb24uICBUaGVyZSBzaG91bGQgYmUgYSBiZXR0ZXIgZml4LCBob3dldmVyLCAqLwotCQkv KiBzaW5jZSB0aGVyZSBpcyBubyBwcm9ibGVtIHdpdGggIi4uL2ZvbzxFU0M+Ii4gKi8KLQkJY2hh ciAqcCA9ICp4cDsKLQkJaWYgKCpwID09ICcuJyAmJiAqKHArMSkgPT0gJy8nKQotCQkgIGNjIC09 IDI7Ci0JICAgIH0KLSNlbmRpZiAvKiBVTklYT1JPU0sgKi8KLQotI2lmZGVmIGRhdGFnZW5lcmFs Ci0JICAgICpzcCsrID0gJysnOwkJLyogRGF0YSBHZW5lcmFsIEFPUyB3aWxkY2FyZCAqLwotI2Vs c2UKLQkgICAgKnNwKysgPSAnKic7CQkvKiBPdGhlcnMgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJh bCAqLwotCSAgICAqc3AtLSA9ICdcMCc7Ci0jaWZkZWYgR0VNRE9TCi0JICAgIGlmICghc3RyY2hy KCp4cCwgJy4nKSkJLyogYWJkZS5lIC0+IGFiY2RlLmUqICovCi0JICAgICAgc3RyY2F0KCp4cCwg Ii4qIik7CS8qIGFiYyAtPiBhYmMqLiogKi8KLSNlbmRpZiAvKiBHRU1ET1MgKi8KLQkgICAgLyog QWRkIHdpbGRjYXJkIGFuZCBleHBhbmQgbGlzdC4gKi8KLSNpZmRlZiBDT01NRU5UCi0JICAgIC8q IFRoaXMga2lsbHMgcGFydGlhbCBjb21wbGV0aW9uIHdoZW4gRVNDIGdpdmVuIGluIHBhdGggc2Vn bWVudCAqLwotCSAgICBuenhvcHRzIHw9IGRpcmZsZyA/IFpYX0RJUk9OTFkgOiAoZCA/IDAgOiBa WF9GSUxPTkxZKTsKLSNlbHNlCi0JICAgIC8qIG56eG9wdHMgPSAwOyAqLwotI2VuZGlmIC8qIENP TU1FTlQgKi8KLQkgICAgaWYgKG1hdGNoZG90KSAgbnp4b3B0cyB8PSBaWF9NQVRDSERPVDsKLQkg ICAgaWYgKHJlY3Vyc2l2ZSkgbnp4b3B0cyB8PSBaWF9SRUNVUlNFOwotCSAgICB5ID0gbnp4cGFu ZCgqeHAsbnp4b3B0cyk7Ci0JICAgIG5maWxlcyA9IHk7Ci0JICAgIGRlYnVnKEYxMTEsImNtaWZp IG56eHBhbmQiLCp4cCx5KTsKLQkgICAgaWYgKHkgPiAwKSB7Ci0jaWZkZWYgT1MyCi0gICAgICAg ICAgICAgICAgem5leHQoZmlsYnVmKTsJCS8qIEdldCBmaXJzdCAqLwotI2lmZGVmIFpYUkVXSU5E Ci0JCXp4cmV3aW5kKCk7CQkvKiBNdXN0ICJyZXdpbmQiICovCi0jZWxzZQotCQluenhwYW5kKCp4 cCxueHpvcHRzKTsKLSNlbmRpZiAvKiBaWFJFV0lORCAqLwotI2Vsc2UgIC8qIE5vdCBPUzIgKi8K LSAgICAgICAgICAgICAgICBja3N0cm5jcHkoZmlsYnVmLG10Y2hzWzBdLENLTUFYUEFUSCk7Ci0j ZW5kaWYgLyogT1MyICovCi0JICAgIH0gZWxzZQotCSAgICAgICpmaWxidWYgPSAnXDAnOwotCSAg ICBmaWxidWZbQ0tNQVhQQVRIXSA9IE5VTDsKLQkgICAgKnNwID0gJ1wwJzsJCQkvKiBSZW1vdmUg d2lsZGNhcmQuICovCi0JICAgIGRlYnVnKEYxMTEsImNtaWZpIGZpbGJ1ZiIsZmlsYnVmLHkpOwot CSAgICBkZWJ1ZyhGMTExLCJjbWlmaSAqeHAiLCp4cCxjYyk7Ci0KLQkgICAgKndpbGQgPSAoeSA+ IDEpOwotCSAgICBpZiAoeSA9PSAwKSB7Ci0JCWlmICghbm9tc2cpIHsKLSNpZmRlZiBDS1JPT1QK LQkJICAgIGlmIChja3Jvb3RlcnIpCi0JCSAgICAgIHByaW50ZigiP09mZiBMaW1pdHM6ICVzXG4i LGF0bWJ1Zik7Ci0JCSAgICBlbHNlCi0jZW5kaWYgLyogQ0tST09UICovCi0JCSAgICAgIHByaW50 ZigiP05vICVzIG1hdGNoIC0gJXNcbiIsCi0JCQkgICBkaXJmbGcgPyAiZGlyZWN0b3JpZXMiIDog ImZpbGVzIiwgYXRtYnVmKTsKLQkJICAgIGlmIChucCkgZnJlZShucCk7Ci0JCSAgICByZXR1cm4o LTkpOwotCQl9IGVsc2UgewotCQkgICAgYmxlZXAoQlBfV0FSTik7Ci0JCSAgICBpZiAobnApIGZy ZWUobnApOwotCQkgICAgcmV0dXJuKC0xKTsKLQkJfQotCSAgICB9IGVsc2UgaWYgKHkgPCAwKSB7 Ci0jaWZkZWYgQ0tST09UCi0JCWlmIChja3Jvb3RlcnIpCi0JCSAgcHJpbnRmKCI/T2ZmIExpbWl0 czogJXNcbiIsYXRtYnVmKTsKLQkJZWxzZQotI2VuZGlmIC8qIENLUk9PVCAqLwotCQkgIHByaW50 ZigiP1RvbyBtYW55ICVzIG1hdGNoIC0gJXNcbiIsCi0JCQkgZGlyZmxnID8gImRpcmVjdG9yaWVz IiA6ICJmaWxlcyIsIGF0bWJ1Zik7Ci0JCWlmIChucCkgZnJlZShucCk7Ci0JCXJldHVybigtOSk7 Ci0JICAgIH0gZWxzZSBpZiAoeSA+IDEJCS8qIE5vdCB1bmlxdWUgKi8KLSNpZm5kZWYgVk1TCi0J CSAgICAgICB8fCAoeSA9PSAxICYmIGlzZGlyKGZpbGJ1ZikpIC8qIFVuaXF1ZSBkaXJlY3Rvcnkg Ki8KLSNlbmRpZiAvKiBWTVMgKi8KLQkJICAgICAgICkgewotI2lmbmRlZiBOT1BBUlRJQUwKLS8q IFBhcnRpYWwgZmlsZW5hbWUgY29tcGxldGlvbiAqLwotCQlpbnQgaiwgazsgY2hhciBjOwotCQlr ID0gMDsKLQkJZGVidWcoRjExMSwiY21pZmkgcGFydGlhbCIsZmlsYnVmLGNjKTsKLSNpZmRlZiBP UzIKLQkJewotCQkgICAgaW50IGN1ciA9IDAsCi0JCSAgICBsZW4gPSAwLAotCQkgICAgbGVuMiA9 IDAsCi0JCSAgICBtaW4gPSBzdHJsZW4oZmlsYnVmKSwKLQkJICAgIGZvdW5kID0gMDsKLQkJICAg IGNoYXIgbG9jYWxmbltDS01BWFBBVEgrMV07Ci0KLQkJICAgIGxlbiA9IG1pbjsKLQkJICAgIGZv ciAoaiA9IDE7IGogPD0geTsgaisrKSB7Ci0JCQl6bmV4dChsb2NhbGZuKTsKLQkJCWlmIChkaXJm bGcgJiYgIWlzZGlyKGxvY2FsZm4pKQotCQkJICBjb250aW51ZTsKLQkJCWZvdW5kID0gMTsKLQkJ CWxlbjIgPSBzdHJsZW4obG9jYWxmbik7Ci0JCQlmb3IgKGN1ciA9IGNjOwotCQkJICAgICBjdXIg PCBsZW4gJiYgY3VyIDwgbGVuMiAmJiBjdXIgPD0gbWluOwotCQkJICAgICBjdXIrKwotCQkJICAg ICApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPUy8yIG9yIFdpbmRvd3MsIGNh c2UgZG9lc24ndCBtYXR0ZXIgKi8KLQkJCSAgICBpZiAodG9sb3dlcihmaWxidWZbY3VyXSkgIT0g dG9sb3dlcihsb2NhbGZuW2N1cl0pKQotCQkJICAgICAgYnJlYWs7Ci0JCQl9Ci0JCQlpZiAoY3Vy IDwgbWluKQotCQkJICBtaW4gPSBjdXI7Ci0JCSAgICB9Ci0JCSAgICBpZiAoIWZvdW5kKQotCQkg ICAgICBtaW4gPSBjYzsKLQkJICAgIGZpbGJ1ZlttaW5dID0gTlVMOwotCQkgICAgaWYgKG1pbiA+ IGNjKQotCQkgICAgICBrKys7Ci0JCX0KLSNlbHNlIC8qIE9TMiAqLwotCQlmb3IgKGkgPSBjYzsg KGMgPSBmaWxidWZbaV0pOyBpKyspIHsKLQkJICAgIGZvciAoaiA9IDE7IGogPCB5OyBqKyspCi0J CSAgICAgIGlmIChtdGNoc1tqXVtpXSAhPSBjKSBicmVhazsKLQkJICAgIGlmIChqID09IHkpIGsr KzsKLQkJICAgIGVsc2UgZmlsYnVmW2ldID0gZmlsYnVmW2krMV0gPSBOVUw7Ci0JCX0KLSNlbmRp ZiAvKiBPUzIgKi8KLQotCi0jaWZuZGVmIFZNUwotCQkvKiBpc2RpcigpIGZ1bmN0aW9uIHJlcXVp cmVkIGZvciB0aGlzISAqLwotCQlpZiAoeSA9PSAxICYmIGlzZGlyKGZpbGJ1ZikpIHsgLyogRG9u dCB3ZSBhbHJlYWR5IGtub3cgdGhpcz8gKi8KLQkJICAgIGludCBsZW47Ci0JCSAgICBsZW4gPSBz dHJsZW4oZmlsYnVmKTsKLQkJICAgIGlmIChsZW4gPiAwICYmIGxlbiA8IEFUTUJMIC0gMSkgewot CQkJaWYgKGZpbGJ1ZltsZW4tMV0gIT0gZGlyc2VwKSB7Ci0JCQkgICAgZmlsYnVmW2xlbl0gPSBk aXJzZXA7Ci0JCQkgICAgZmlsYnVmW2xlbisxXSA9IE5VTDsKLQkJCX0KLQkJICAgIH0KLS8qCi0g IEF0IHRoaXMgcG9pbnQsIGJlZm9yZSBqdXN0IGRvaW5nIHBhcnRpYWwgY29tcGxldGlvbiwgd2Ug c2hvdWxkIGxvb2sgZmlyc3QgdG8KLSAgc2VlIGlmIHRoZSBnaXZlbiBkaXJlY3RvcnkgZG9lcyBp bmRlZWQgaGF2ZSBhbnkgc3ViZGlyZWN0b3JpZXMgKGRpcmZsZykgb3IKLSAgZmlsZXMgKCFkaXJm bGcpOyBpZiBpdCBkb2Vzbid0IHdlIHNob3VsZCBkbyBmdWxsIGNvbXBsZXRpb24uICBPdGhlcndp c2UsIHRoZQotICByZXN1bHQgbG9va3MgZnVubnkgdG8gdGhlIHVzZXIgYW5kICI/IiBibG93cyB1 cCB0aGUgY29tbWFuZCBmb3Igbm8gZ29vZAotICByZWFzb24uCi0qLwotCQkgICAgewotCQkJaW50 IGZsYWdzID0gMDsKLQkJCWZpbGJ1ZltsZW4rMV0gPSAnKic7Ci0JCQlmaWxidWZbbGVuKzJdID0g TlVMOwotCQkJaWYgKGRpcmZsZykgZmxhZ3MgPSBaWF9ESVJPTkxZOwotCQkJY2hpbGRyZW4gPSBu enhwYW5kKGZpbGJ1ZixmbGFncyk7Ci0JCQlkZWJ1ZyhGMTExLCJjbWlmaSBjaGlsZHJlbiIsZmls YnVmLGNoaWxkcmVuKTsKLQkJCWZpbGJ1ZltsZW4rMV0gPSBOVUw7Ci0JCQluenhwYW5kKGZpbGJ1 ZixmbGFncyk7IC8qIFJlc3RvcmUgcHJldmlvdXMgbGlzdCAqLwotCQkJaWYgKGNoaWxkcmVuID09 IDApCi0JCQkgIGdvdG8gTk9TVUJESVJTOwotCQkgICAgfQotCQkgICAgaWYgKGxlbiArIDEgPiBj YykKLQkJICAgICAgaysrOwotCQl9Ci0gICAgICAgICAgICAgICAgLyogQWRkIGRvdWJsZXF1b3Rl cyBpZiB0aGVyZSBhcmUgc3BhY2VzIGluIHRoZSBuYW1lICovCi0JCXsKLQkJICAgIGludCB4Owot CQkgICAgaWYgKHFmbGFnKSB7Ci0JCQl4ID0gKHFmbGFnID09ICd9Jyk7IC8qIChvciBicmFjZXMp ICovCi0JCSAgICB9IGVsc2UgewotCQkJeCA9ICFkYmxxdW87Ci0JCSAgICB9Ci0JCSAgICBpZiAo ZmlsYnVmWzBdICE9ICciJyAmJiBmaWxidWZbMF0gIT0gJ3snKQotCQkgICAgICBrID0gZHF1b3Rl KGZpbGJ1ZixBVE1CTCx4KTsKLQkJfQotI2VuZGlmIC8qIFZNUyAqLwotCQlkZWJ1ZyhGMTExLCJj bWlmaSBSRVBBSU5UIGZpbGJ1ZiIsZmlsYnVmLGspOwotCQlpZiAoayA+IDApIHsJCS8qIEdvdCBt b3JlIGNoYXJhY3RlcnMgKi8KLQkJICAgIGRlYnVnKEYxMDEsImNtaWZpIFJFUEFJTlQgY2MiLCIi LGNjKTsKLQkJICAgIGRlYnVnKEYxMDEsImNtaWZpIFJFUEFJTlQgeGMiLCIiLHhjKTsKLQkJICAg IGRlYnVnKEYxMTAsImNtaWZpIFJFUEFJTlQgYnAtY2MiLGJwLWNjLDApOwotCQkgICAgZGVidWco RjExMCwiY21pZmkgUkVQQUlOVCBicC14YyIsYnAteGMsMCk7Ci0JCSAgICBzcCA9IGZpbGJ1ZiAr IGNjOwkvKiBQb2ludCB0byBuZXcgb25lcyAqLwotCQkgICAgaWYgKHFmbGFnIHx8IHN0cm5jbXAo ZmlsYnVmLGJwLWNjLGNjKSkgeyAvKiBSZXBhaW50PyAqLwotCQkJaW50IHg7Ci0JCQl4ID0gY2M7 Ci0JCQlpZiAocWZsYWcpIHgrKzsKLQkJCWZvciAoaSA9IDA7IGkgPCB4OyBpKyspIHsKLQkJCSAg ICBjbWRjaGFyZGVsKCk7IC8qIEJhY2sgdXAgb3ZlciBvbGQgcGFydGlhbCBzcGVjICovCi0JCQkg ICAgYnAtLTsKLQkJCX0KLQkJCXNwID0gZmlsYnVmOwkvKiBQb2ludCB0byBuZXcgd29yZCBzdGFy dCAqLwotCQkJZGVidWcoRjExMCwiY21pZmkgZXJhc2Ugb2siLHNwLDApOwotCQkgICAgfQotCQkg ICAgY2MgPSBrOwkJLyogSG93IG1hbnkgbmV3IG9uZXMgd2UganVzdCBnb3QgKi8KLQkJICAgIHBy aW50ZigiJXMiLHNwKTsJLyogUHJpbnQgdGhlbSAqLwotCQkgICAgd2hpbGUgKCgqYnArKyA9ICpz cCsrKSkgOwkvKiBDb3B5IHRvIGNvbW1hbmQgYnVmZmVyICovCi0JCSAgICBicC0tOwkgICAgCSAg ICAgICAgLyogQmFjayB1cCBvdmVyIE5VTCAqLwotCQkgICAgZGVidWcoRjExMCwiY21pZmkgcGFy dGlhbCBjbWRidWYiLGNtZGJ1ZiwwKTsKLQkJICAgIGlmIChzZXRhdG0oZmlsYnVmLDApIDwgMCkg ewotCQkJcHJpbnRmKCI/UGFydGlhbCBuYW1lIHRvbyBsb25nXG4iKTsKLQkJCWlmIChucCkgZnJl ZShucCk7Ci0JCQlyZXR1cm4oLTkpOwotCQkgICAgfQotCQkgICAgZGVidWcoRjExMSwiY21pZmkg cGFydGlhbCBhdG1idWYiLGF0bWJ1ZixjYyk7Ci0JCSAgICAqeHAgPSBhdG1idWY7Ci0JCX0KLSNl bmRpZiAvKiBOT1BBUlRJQUwgKi8KLQkJYmxlZXAoQlBfV0FSTik7Ci0JICAgIH0gZWxzZSB7CQkJ LyogVW5pcXVlLCBjb21wbGV0ZSBpdC4gICovCi0jaWZuZGVmIFZNUwotI2lmZGVmIENLX1RNUERJ UgotCQkvKiBpc2RpcigpIGZ1bmN0aW9uIHJlcXVpcmVkIGZvciB0aGlzISAqLwotCSAgICAgIE5P U1VCRElSUzoKLQkJZGVidWcoRjExMSwiY21pZmkgdW5pcXVlIixmaWxidWYsY2hpbGRyZW4pOwot CQlpZiAoaXNkaXIoZmlsYnVmKSAmJiBjaGlsZHJlbiA+IDApIHsKLQkJICAgIGludCBsZW47Ci0J CSAgICBsZW4gPSBzdHJsZW4oZmlsYnVmKTsKLQkJICAgIGlmIChsZW4gPiAwICYmIGxlbiA8IEFU TUJMIC0gMSkgewotCQkJaWYgKGZpbGJ1ZltsZW4tMV0gIT0gZGlyc2VwKSB7Ci0JCQkgICAgZmls YnVmW2xlbl0gPSBkaXJzZXA7Ci0JCQkgICAgZmlsYnVmW2xlbisxXSA9IE5VTDsKLQkJCX0KLQkJ ICAgIH0KLQkJICAgIHNwID0gZmlsYnVmICsgY2M7Ci0JCSAgICBibGVlcChCUF9XQVJOKTsKLQkJ ICAgIHByaW50ZigiJXMiLHNwKTsKLQkJICAgIGNjKys7Ci0JCSAgICB3aGlsZSAoKCpicCsrID0g KnNwKyspKSA7Ci0JCSAgICBicC0tOwotCQkgICAgaWYgKHNldGF0bShmaWxidWYsMCkgPCAwKSB7 Ci0JCQlwcmludGYoIj9EaXJlY3RvcnkgbmFtZSB0b28gbG9uZ1xuIik7Ci0JCQlpZiAobnApIGZy ZWUobnApOwotCQkJcmV0dXJuKC05KTsKLQkJICAgIH0KLQkJICAgIGRlYnVnKEYxMTEsImNtaWZp IGRpcmVjdG9yeSBhdG1idWYiLGF0bWJ1ZixjYyk7Ci0JCSAgICAqeHAgPSBhdG1idWY7Ci0JCX0g ZWxzZSB7CQkvKiBOb3QgYSBkaXJlY3Rvcnkgb3IgZGlyZmxnICovCi0jZW5kaWYgLyogQ0tfVE1Q RElSICovCi0jZW5kaWYgLyogVk1TICovCi0jaWZuZGVmIFZNUwkJCQkvKiBWTVMgZGlyIG5hbWVz IGFyZSBzcGVjaWFsICovCi0jaWZuZGVmIGRhdGFnZW5lcmFsCQkJLyogVlMgZGlybmFtZXMgbXVz dCBub3QgZW5kIGluICI6IiAqLwotCQkgICAgaWYgKGRpcmZsZykgewotCQkJaW50IGxlbjsKLQkJ CWxlbiA9IHN0cmxlbihmaWxidWYpOwotCQkJaWYgKGxlbiA+IDAgJiYgbGVuIDwgQVRNQkwgLSAx KSB7Ci0JCQkgICAgaWYgKGZpbGJ1ZltsZW4tMV0gIT0gZGlyc2VwKSB7Ci0JCQkJZmlsYnVmW2xl bl0gPSBkaXJzZXA7Ci0JCQkJZmlsYnVmW2xlbisxXSA9IE5VTDsKLQkJCSAgICB9Ci0JCQl9Ci0J CSAgICB9Ci0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQkJICAg IHNwID0gZmlsYnVmICsgY2M7CS8qIFBvaW50IHBhc3Qgd2hhdCB1c2VyIHR5cGVkLiAqLwotCQkg ICAgewotCQkJaW50IHg7Ci0JCQlpZiAocWZsYWcpIHsKLQkJCSAgICB4ID0gKHFmbGFnID09ICd9 Jyk7Ci0JCQl9IGVsc2UgewotCQkJICAgIHggPSAhZGJscXVvOwotCQkJfQotCQkJaWYgKGZpbGJ1 ZlswXSAhPSAnIicgJiYgZmlsYnVmWzBdICE9ICd7JykKLQkJCSAgZHF1b3RlKGZpbGJ1ZixBVE1C TCx4KTsKLQkJICAgIH0KLQkJICAgIGlmIChxZmxhZyB8fCBzdHJuY21wKGZpbGJ1ZixicC1jYyxj YykpIHsgLyogUmVwYWludD8gKi8KLQkJCWludCB4OwotCQkJeCA9IGNjOwotCQkJaWYgKHFmbGFn KSB4Kys7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgeDsgaSsrKSB7Ci0JCQkgICAgY21kY2hhcmRlbCgp OyAvKiBCYWNrIHVwIG92ZXIgb2xkIHBhcnRpYWwgc3BlYyAqLwotCQkJICAgIGJwLS07Ci0JCQl9 Ci0JCQlzcCA9IGZpbGJ1ZjsJLyogUG9pbnQgdG8gbmV3IHdvcmQgc3RhcnQgKi8KLQkJCWRlYnVn KEYxMTEsImNtaWZpIGFmdGVyIGVyYXNlIHNwPSIsc3AsY2MpOwotCQkgICAgfQotCQkgICAgcHJp bnRmKCIlcyAiLHNwKTsJLyogUHJpbnQgdGhlIGNvbXBsZXRlZCBuYW1lLiAqLwotI2lmZGVmIEdF TURPUwotCQkgICAgZmZsdXNoKHN0ZG91dCk7Ci0jZW5kaWYgLyogR0VNRE9TICovCi0JCSAgICBh ZGRidWYoc3ApOwkJLyogQWRkIHRoZSBjaGFyYWN0ZXJzIHRvIGNtZGJ1Zi4gKi8KLQkJICAgIGlm IChzZXRhdG0oZmlsYnVmLDApIDwgMCkgeyAvKiBBbmQgdG8gYXRtYnVmLiAqLwotCQkJcHJpbnRm KCI/Q29tcGxldGVkIG5hbWUgdG9vIGxvbmdcbiIpOwotCQkJaWYgKG5wKSBmcmVlKG5wKTsKLQkJ CXJldHVybigtOSk7Ci0JCSAgICB9Ci0JCSAgICBpbndvcmQgPSBjbWZsZ3MgPSAwOwotCQkgICAg KnhwID0gYnJzdHJpcChhdG1idWYpOyAvKiBSZXR1cm4gcG9pbnRlciB0byBhdG1idWYuICovCi0J CSAgICBpZiAoZGlyZmxnICYmICFpc2RpcigqeHApKSB7Ci0JCQlwcmludGYoIj9Ob3QgYSBkaXJl Y3RvcnkgLSAlc1xuIiwgZmlsYnVmKTsKLQkJCWlmIChucCkgZnJlZShucCk7Ci0JCQlyZXR1cm4o LTkpOwotCQkgICAgfQotCQkgICAgaWYgKG5wKSBmcmVlKG5wKTsKLSNpZm5kZWYgTk9MQVNURklM RQotCQkgICAgbWFrZXN0cigmbGFzdGZpbGUsdG1wbGFzdGZpbGUpOwotI2VuZGlmCS8qIE5PTEFT VEZJTEUgKi8KLQkJICAgIHJldHVybigwKTsKLSNpZm5kZWYgVk1TCi0jaWZkZWYgQ0tfVE1QRElS Ci0JCX0KLSNlbmRpZiAvKiBDS19UTVBESVIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQkgICAgfQot CSAgICBicmVhazsKLQotCSAgY2FzZSAzOgkJCS8qIFF1ZXN0aW9uIG1hcmsgLSBmaWxlIG1lbnUg d2FudGVkICovCi0JICAgIGlmICgqeGhscCA9PSBOVUwpCi0JICAgICAgcHJpbnRmKGRpcmZsZyA/ ICIgRGlyZWN0b3J5IG5hbWUiIDogIiBJbnB1dCBmaWxlIHNwZWNpZmljYXRpb24iKTsKLQkgICAg ZWxzZQotCSAgICAgIHByaW50ZigiICVzIix4aGxwKTsKLSNpZmRlZiBHRU1ET1MKLQkgICAgZmZs dXNoKHN0ZG91dCk7Ci0jZW5kaWYgLyogR0VNRE9TICovCi0JICAgIC8qIElmIHVzZXIgdHlwZWQg YW4gb3BlbmluZyBxdW90ZSBvciBicmFjZSwganVzdCBza2lwIHBhc3QgaXQgKi8KLQotCSAgICBp ZiAoKip4cCA9PSAnIicgfHwgKip4cCA9PSAneycpIHsKLQkJKnhwID0gKnhwICsgMTsKLQkJeGMt LTsKLQkJY2MtLTsKLQkgICAgfQotI2lmbmRlZiBOT1NQTAotCSAgICBpZiAoZikgewkJCS8qIElm IGEgY29udmVyc2lvbiBmdW5jdGlvbiBpcyBnaXZlbiAqLwotI2lmZGVmIERPQ0hLVkFSCi0JCWNo YXIgKnMgPSAqeHA7CQkvKiBTZWUgaWYgdGhlcmUgYXJlIGFueSB2YXJpYWJsZXMgaW4gKi8KLQkJ d2hpbGUgKCpzKSB7CQkvKiB0aGUgc3RyaW5nIGFuZCBpZiBzbywgZXhwYW5kIHRoZW0gKi8KLQkJ ICAgIGlmIChjaGt2YXIocykpIHsKLSNlbmRpZiAvKiBET0NIS1ZBUiAqLwotCQkJenEgPSBhdHhi dWY7Ci0JCQlhdHhuID0gQ01EQkw7Ci0JCQlpZiAoKHggPSAoKmYpKCp4cCwmenEsJmF0eG4pKSA8 IDApIHsKLQkJCSAgICBpZiAobnApIGZyZWUobnApOwotCQkJICAgIHJldHVybigtMik7Ci0JCQl9 Ci0jaWZkZWYgRE9DSEtWQVIKLQkJICAgIC8qIHJlZHVjZSBjYyBieSBudW1iZXIgb2YgXFwgY29u c3VtZWQgYnkgY29udmVyc2lvbiAqLwotCQkgICAgLyogZnVuY3Rpb24gKG5lZWRlZCBmb3IgT1Mv Miwgd2hlcmUgXCBpcyBwYXRoIHNlcGFyYXRvcikgKi8KLQkJCWNjIC09IChzdHJsZW4oKnhwKSAt IHN0cmxlbihhdHhidWYpKTsKLSNlbmRpZiAvKiBET0NIS1ZBUiAqLwotCQkJKnhwID0gYXR4YnVm OwotI2lmZGVmIERPQ0hLVkFSCi0JCQlicmVhazsKLQkJICAgIH0KLQkJICAgIHMrKzsKLQkJfQot I2VuZGlmIC8qIERPQ0hLVkFSICovCi0JICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCSAgICBk ZWJ1ZyhGMTExLCJjbWlmaSA/ICp4cCwgY2MiLCp4cCxjYyk7Ci0JICAgIHNwID0gKnhwICsgY2M7 CQkvKiBJbnNlcnQgIioiIGF0IGVuZCAqLwotI2lmZGVmIGRhdGFnZW5lcmFsCi0JICAgICpzcCsr ID0gJysnOwkJLyogSW5zZXJ0ICssIHRoZSBERyB3aWxkIGNhcmQgKi8KLSNlbHNlCi0JICAgICpz cCsrID0gJyonOwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0JICAgICpzcC0tID0gJ1wwJzsK LSNpZmRlZiBHRU1ET1MKLQkgICAgaWYgKCEgc3RyY2hyKCp4cCwgJy4nKSkJLyogYWJkZS5lIC0+ IGFiY2RlLmUqICovCi0JICAgICAgc3RyY2F0KCp4cCwgIi4qIik7CS8qIGFiYyAtPiBhYmMqLiog Ki8KLSNlbmRpZiAvKiBHRU1ET1MgKi8KLQkgICAgZGVidWcoRjExMCwiY21pZmkgPyB3aWxkIiwq eHAsMCk7Ci0KLQkgICAgbnp4b3B0cyB8PSBkaXJmbGcgPyBaWF9ESVJPTkxZIDogKGQgPyAwIDog WlhfRklMT05MWSk7Ci0KLQkgICAgZGVidWcoRjEwMSwiY21pZmkgbWF0Y2hkb3QiLCIiLG1hdGNo ZG90KTsKLQkgICAgaWYgKG1hdGNoZG90KSAgbnp4b3B0cyB8PSBaWF9NQVRDSERPVDsKLQkgICAg aWYgKHJlY3Vyc2l2ZSkgbnp4b3B0cyB8PSBaWF9SRUNVUlNFOwotCSAgICB5ID0gbnp4cGFuZCgq eHAsbnp4b3B0cyk7Ci0JICAgIG5maWxlcyA9IHk7Ci0JICAgICpzcCA9ICdcMCc7Ci0JICAgIGlm ICh5ID09IDApIHsKLQkJaWYgKG5vbXNnKSB7Ci0JCSAgICBwcmludGYoIjogJXNcbiIsYXRtYnVm KTsKLQkJICAgIHByaW50ZigiJXMlcyIsY21wcm9tLGNtZGJ1Zik7Ci0JCSAgICBmZmx1c2goc3Rk b3V0KTsKLQkJICAgIGlmIChucCkgZnJlZShucCk7Ci0JCSAgICByZXR1cm4oLTEpOwotCQl9IGVs c2UgewotI2lmZGVmIENLUk9PVAotCQkgICAgaWYgKGNrcm9vdGVycikKLQkJICAgICAgcHJpbnRm KCI/T2ZmIExpbWl0czogJXNcbiIsYXRtYnVmKTsKLQkJICAgIGVsc2UKLSNlbmRpZiAvKiBDS1JP T1QgKi8KLQkJICAgICAgcHJpbnRmKCI/Tm8gJXMgbWF0Y2ggLSAlc1xuIiwKLQkJCSAgICAgZGly ZmxnID8gImRpcmVjdG9yaWVzIiA6ICJmaWxlcyIsIGF0bWJ1Zik7Ci0JCSAgICBpZiAobnApIGZy ZWUobnApOwotCQkgICAgcmV0dXJuKC05KTsKLQkJfQotCSAgICB9IGVsc2UgaWYgKHkgPCAwKSB7 Ci0jaWZkZWYgQ0tST09UCi0JCWlmIChja3Jvb3RlcnIpCi0JCSAgcHJpbnRmKCI/T2ZmIExpbWl0 czogJXNcbiIsYXRtYnVmKTsKLQkJZWxzZQotI2VuZGlmIC8qIENLUk9PVCAqLwotCQkgIHByaW50 ZigiP1RvbyBtYW55ICVzIG1hdGNoIC0gJXNcbiIsCi0JCQkgZGlyZmxnID8gImRpcmVjdG9yaWVz IiA6ICJmaWxlcyIsIGF0bWJ1Zik7Ci0JCWlmIChucCkgZnJlZShucCk7Ci0JCXJldHVybigtOSk7 Ci0JICAgIH0gZWxzZSB7Ci0JCXByaW50ZigiLCBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiIpOwot CQlpZiAoZmlsaGVscCgoaW50KXksIiIsIiIsMSxkaXJmbGcpIDwgMCkgewotCQkgICAgaWYgKG5w KSBmcmVlKG5wKTsKLQkJICAgIHJldHVybigtOSk7Ci0JCX0KLQkgICAgfQotCSAgICBwcmludGYo IiVzJXMiLGNtcHJvbSxjbWRidWYpOwotCSAgICBmZmx1c2goc3Rkb3V0KTsKLQkgICAgYnJlYWs7 Ci0jZW5kaWYgLyogTUFDICovCi0JfQotI2lmZGVmIEJTX0RJUlNFUAotICAgICAgICBkaXJuYW1m bGcgPSAxOwotICAgICAgICB4ID0gZ3R3b3JkKDApOyAgICAgICAgICAgICAgICAgIC8qIE5vLCBn ZXQgYSB3b3JkICovCi0JZGlybmFtZmxnID0gMDsKLSNlbHNlCi0gICAgICAgIHggPSBndHdvcmQo MCk7ICAgICAgICAgICAgICAgICAgLyogTm8sIGdldCBhIHdvcmQgKi8KLSNlbmRpZiAvKiBCU19E SVJTRVAgKi8KLQkqeHAgPSBhdG1idWY7Ci0gICAgfQotfQotCi0vKiAgQyBNIEYgTCBEICAtLSAg UGFyc2UgYW4gYXJiaXRyYXJ5IGZpZWxkICAqLwotLyoKLSAgUmV0dXJuczoKLSAgICAtMyBpZiBu byBpbnB1dCBwcmVzZW50IHdoZW4gcmVxdWlyZWQsCi0gICAgLTIgaWYgZmllbGQgdG9vIGJpZyBm b3IgYnVmZmVyLAotICAgIC0xIGlmIHJlcGFyc2UgbmVlZGVkLAotICAgICAwIG90aGVyd2lzZSwg eHAgcG9pbnRpbmcgdG8gc3RyaW5nIHJlc3VsdC4KLQotICBOT1RFOiBHbG9iYWwgZmxhZyBrZWVw YWxsY2hhcnMgc2F5cyB3aGV0aGVyIHRoaXMgcm91dGluZSBzaG91bGQgYnJlYWsgb24gQ1IKLSAg b3IgTEY6IG5lZWRlZCBmb3IgTUlOUFVUIHRhcmdldHMgYW5kIERFQ0xBUkUgaW5pdGlhbGl6ZXJz LCB3aGVyZSB3ZSB3YW50IHRvCi0gIGtlZXAgY29udHJvbCBjaGFyYWN0ZXJzIGlmIHRoZSB1c2Vy IHNwZWNpZmllcyB0aGVtIChNYXJjaCAyMDAzKS4gIEl0IG1pZ2h0Ci0gIGhhdmUgYmVlbiBiZXR0 ZXIgdG8gY2hhbmdlIHRoZSBjYWxsaW5nIHNlcXVlbmNlIGJ1dCB0aGF0IHdhcyBub3QgcHJhY3Rp Y2FsLgotKi8KLWludAotY21mbGQoeGhscCx4ZGVmLHhwLGYpIGNoYXIgKnhobHAsICp4ZGVmLCAq KnhwOyB4eF9zdHJwIGY7IHsKLSAgICBpbnQgeCwgeGM7Ci0gICAgY2hhciAqenE7Ci0KLSAgICBp bndvcmQgPSAwOwkJCQkvKiBJbml0aWFsaXplIGNvdW50cyAmIHBvaW50ZXJzICovCi0gICAgY2Mg PSAwOwotICAgIHhjID0gMDsKLSAgICAqeHAgPSAiIjsKLQotICAgIGRlYnVnKEYxMTAsImNtZmxk IHhkZWYgMSIseGRlZiwwKTsKLQotICAgIGlmICgheGhscCkgeGhscCA9ICIiOwotICAgIGlmICgh eGRlZikgeGRlZiA9ICIiOwotICAgIGNrc3RybmNweShjbWRlZmF1bHQseGRlZixDTURFRkFVTFQp OyAvKiBDb3B5IGRlZmF1bHQgKi8KLSAgICB4ZGVmID0gY21kZWZhdWx0OwotCi0gICAgZGVidWco RjExMSwiY21mbGQgeGRlZiAyIix4ZGVmLGNtZmxncyk7Ci0gICAgZGVidWcoRjExMSwiY21mbGQg YXRtYnVmIDEiLGF0bWJ1Zix4Yyk7Ci0KLSAgICBpZiAoKHggPSBjbWZsZ3MpICE9IDEpIHsgICAg ICAgICAgICAvKiBBbHJlYWR5IGNvbmZpcm1lZD8gKi8KLSAgICAgICAgeCA9IGd0d29yZCgwKTsg ICAgICAgICAgICAgICAgICAvKiBObywgZ2V0IGEgd29yZCAqLwotICAgIH0gZWxzZSB7Ci0JaWYg KHNldGF0bSh4ZGVmLDApIDwgMCkgewkvKiBJZiBzbywgdXNlIGRlZmF1bHQsIGlmIGFueS4gKi8K LQkgICAgcHJpbnRmKCI/RGVmYXVsdCB0b28gbG9uZ1xuIik7Ci0JICAgIHJldHVybigtOSk7Ci0J fQotICAgIH0KLSAgICAqeHAgPSBhdG1idWY7ICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2lu dCB0byByZXN1bHQuICovCi0gICAgZGVidWcoRjExMSwiY21mbGQgYXRtYnVmIDIiLGF0bWJ1Zixj bWZsZ3MpOwotCi0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgeGMgKz0gY2M7ICAgICAgICAgICAg ICAgICAgICAgICAvKiBDb3VudCB0aGUgY2hhcmFjdGVycy4gKi8KLSAgICAgICAgZGVidWcoRjEx MSwiY21mbGQgZ3R3b3JkIixhdG1idWYseGMpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJjbWZsZCB4 IiwiIix4KTsKLSAgICAgICAgc3dpdGNoICh4KSB7Ci0JICBjYXNlIC05OgotCSAgICBwcmludGYo IkNvbW1hbmQgb3IgZmllbGQgdG9vIGxvbmdcbiIpOwotCSAgY2FzZSAtNDoJCQkvKiBFT0YgKi8K LQkgIGNhc2UgLTM6CQkJLyogRW1wdHkuICovCi0JICBjYXNlIC0yOgkJCS8qIE91dCBvZiBzcGFj ZS4gKi8KLQkgIGNhc2UgLTE6CQkJLyogUmVwYXJzZSBuZWVkZWQgKi8KLQkgICAgcmV0dXJuKHgp OwotCSAgY2FzZSAxOgkJCS8qIENSICovCi0JICBjYXNlIDA6CQkJLyogU1AgKi8KLQkgICAgZGVi dWcoRjExMSwiY21mbGQgMSIsYXRtYnVmLHhjKTsKLQkgICAgaWYgKHhjID09IDApIHsJCS8qIElm IG5vIGlucHV0LCByZXR1cm4gZGVmYXVsdC4gKi8KLQkJaWYgKHNldGF0bSh4ZGVmLDApIDwgMCkg ewotCQkgICAgcHJpbnRmKCI/RGVmYXVsdCB0b28gbG9uZ1xuIik7Ci0JCSAgICByZXR1cm4oLTkp OwotCQl9Ci0JICAgIH0KLQkgICAgKnhwID0gYXRtYnVmOwkJLyogUG9pbnQgdG8gd2hhdCB3ZSBn b3QuICovCi0JICAgIGRlYnVnKEYxMTEsImNtZmxkIDIiLGF0bWJ1ZiwoKGYpID8gMSA6IDApKTsK LQkgICAgaWYgKGYpIHsJCQkvKiBJZiBhIGNvbnZlcnNpb24gZnVuY3Rpb24gaXMgZ2l2ZW4gKi8K LQkJenEgPSBhdHhidWY7CQkvKiBlbXBsb3kgaXQgbm93LiAqLwotCQlhdHhuID0gQ01EQkw7Ci0J CWlmICgoKmYpKCp4cCwmenEsJmF0eG4pIDwgMCkKLQkJICByZXR1cm4oLTIpOwotCQlkZWJ1ZyhG MTExLCJjbWZsZCAzIixhdHhidWYseGMpOwotCQkvKiBSZXBsYWNlIGJ5IG5ldyB2YWx1ZSAtLSBm b3IgTUlOUFVUIG9ubHkga2VlcCBhbGwgY2hhcnMgKi8KLQkJaWYgKHNldGF0bShhdHhidWYsa2Vl cGFsbGNoYXJzID8gMzoxKSA8IDApIHsgLyogMTYgTWFyIDIwMDMgKi8KLQkJICAgIHByaW50Zigi VmFsdWUgdG9vIGxvbmdcbiIpOwotCQkgICAgcmV0dXJuKC05KTsKLQkJfQotCQkqeHAgPSBhdG1i dWY7Ci0JICAgIH0KLQkgICAgZGVidWcoRjExMSwiY21mbGQgNCIsYXRtYnVmLHhjKTsKLQkgICAg aWYgKCoqeHAgPT0gTlVMKSB7CQkvKiBJZiB2YXJpYWJsZSBldmFsdWF0ZXMgdG8gbnVsbCAqLwot CQlpZiAoc2V0YXRtKHhkZWYsMCkgPCAwKSB7Ci0JCSAgICBwcmludGYoIj9EZWZhdWx0IHRvbyBs b25nXG4iKTsKLQkJICAgIHJldHVybigtOSk7Ci0JCX0KLQkJaWYgKCoqeHAgPT0gTlVMKSB4ID0g LTM7IC8qIElmIHN0aWxsIGVtcHR5LCByZXR1cm4gLTMuICovCi0JICAgIH0KLQkgICAgZGVidWco RjExMSwiY21mbGQgcmV0dXJucyIsKnhwLHgpOwotCSAgICByZXR1cm4oeCk7Ci0JICBjYXNlIDI6 CQkJLyogRVNDICovCi0JICAgIGlmICh4YyA9PSAwICYmICp4ZGVmKSB7Ci0JCXByaW50ZigiJXMg Iix4ZGVmKTsgLyogSWYgYXQgYmVnaW5uaW5nIG9mIGZpZWxkLCAqLwotI2lmZGVmIEdFTURPUwot CQlmZmx1c2goc3Rkb3V0KTsKLSNlbmRpZiAvKiBHRU1ET1MgKi8KLQkJYWRkYnVmKHhkZWYpOwkJ LyogU3VwcGx5IGRlZmF1bHQuICovCi0JCWlud29yZCA9IGNtZmxncyA9IDA7Ci0JCWlmIChzZXRh dG0oeGRlZiwwKSA8IDApIHsKLQkJICAgIHByaW50ZigiP0RlZmF1bHQgdG9vIGxvbmdcbiIpOwot CQkgICAgcmV0dXJuKC05KTsKLQkJfSBlbHNlCQkJLyogUmV0dXJuIGFzIGlmIHdob2xlIGZpZWxk ICovCi0JCSAgcmV0dXJuKDApOwkJLyogdHlwZWQsIGZvbGxvd2VkIGJ5IHNwYWNlLiAqLwotCSAg ICB9IGVsc2UgewotCQlibGVlcChCUF9XQVJOKTsKLQkgICAgfQotCSAgICBicmVhazsKLQkgIGNh c2UgMzoJCQkvKiBRdWVzdGlvbiBtYXJrICovCi0JICAgIGRlYnVnKEYxMTAsImNtZmxkIFFVRVNU SU9OTUFSSyIsY21kYnVmLDApOwotCSAgICBpZiAoKnhobHAgPT0gTlVMKQotCSAgICAgIHByaW50 ZigiIFBsZWFzZSBjb21wbGV0ZSB0aGlzIGZpZWxkIik7Ci0JICAgIGVsc2UKLQkgICAgICBwcmlu dGYoIiAlcyIseGhscCk7Ci0JICAgIHByaW50ZigiXG4lcyVzIixjbXByb20sY21kYnVmKTsKLQkg ICAgZmZsdXNoKHN0ZG91dCk7Ci0JICAgIGJyZWFrOwotICAgICAgICB9Ci0JZGVidWcoRjExMSwi Y21mbGQgZ3R3b3JkIEEgeCIsY21kYnVmLHgpOwotCXggPSBndHdvcmQoMCk7Ci0JZGVidWcoRjEx MSwiY21mbGQgZ3R3b3JkIEIgeCIsY21kYnVmLHgpOwotICAgIH0KLX0KLQotCi0vKiAgQyBNIFQg WCBUICAtLSAgR2V0IGEgdGV4dCBzdHJpbmcsIGluY2x1ZGluZyBjb25maXJtYXRpb24gICovCi0K LS8qCi0gIFByaW50IGhlbHAgbWVzc2FnZSAneGhscCcgaWYgPyB0eXBlZCwgc3VwcGx5IGRlZmF1 bHQgJ3hkZWYnIGlmIG51bGwKLSAgc3RyaW5nIHR5cGVkLiAgUmV0dXJuczoKLQotICAgLTEgaWYg cmVwYXJzZSBuZWVkZWQgb3IgYnVmZmVyIG92ZXJmbG93cy4KLSAgICAxIG90aGVyd2lzZS4KLQot ICB3aXRoIGNtZmxncyBzZXQgdG8gcmV0dXJuIGNvZGUsIGFuZCB4cCBwb2ludGluZyB0byByZXN1 bHQgc3RyaW5nLgotKi8KLWludAotY210eHQoeGhscCx4ZGVmLHhwLGYpIGNoYXIgKnhobHA7IGNo YXIgKnhkZWY7IGNoYXIgKip4cDsgeHhfc3RycCBmOyB7Ci0KLSAgICBpbnQgeCwgaTsKLSAgICBj aGFyICp4eCwgKnpxOwotICAgIHN0YXRpYyBpbnQgeGM7Ci0KLSAgICBpZiAoIXhobHApIHhobHAg PSAiIjsKLSAgICBpZiAoIXhkZWYpIHhkZWYgPSAiIjsKLQotICAgIGNtZmxkZmxncyA9IDA7Ci0K LSAgICBjbWRlZmF1bHRbMF0gPSBOVUw7Ci0gICAgaWYgKCp4ZGVmKQotICAgICAgY2tzdHJuY3B5 KGNtZGVmYXVsdCx4ZGVmLENNREVGQVVMVCk7IC8qIENvcHkgZGVmYXVsdCAqLwotICAgIHhkZWYg PSBjbWRlZmF1bHQ7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJjbXR4dCBjbWZsZ3MiLCIiLGNtZmxncyk7 Ci0gICAgaW53b3JkID0gMDsJCQkJLyogU3RhcnQgYXRtYnVmIGNvdW50ZXIgb2ZmIGF0IDAgKi8K LSAgICBjYyA9IDA7Ci0gICAgaWYgKGNtZmxncyA9PSAtMSkgeyAgICAgICAgICAgICAgICAgLyog SWYgcmVwYXJzaW5nLCAqLwotCSp4cCA9IHBwOwotICAgICAgICB4YyA9IChpbnQpc3RybGVuKCp4 cCk7CQkvKiBnZXQgYmFjayB0aGUgdG90YWwgdGV4dCBsZW5ndGgsICovCi0JYnAgPSAqeHA7CQkJ LyogYW5kIGJhY2sgdXAgdGhlIHBvaW50ZXJzLiAqLwotCW5wID0gKnhwOwotCXBwID0gKnhwOwot ICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG90aGVyd2lzZSwgKi8K LQkvKiBkZWJ1ZyhGMTAwLCJjbXR4dDogZnJlc2ggc3RhcnQiLCIiLDApOyAqLwotICAgICAgICAq eHAgPSAiIjsgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YXJ0IGZyZXNoLiAqLwotICAgICAg ICB4YyA9IDA7Ci0gICAgfQotICAgICphdG1idWYgPSBOVUw7ICAgICAgICAgICAgICAgICAgICAg IC8qIEFuZCBlbXB0eSB0aGUgYXRvbSBidWZmZXIuICovCi0gICAgcnRpbWVyKCk7CQkJCS8qIFJl c2V0IHRpbWVyICovCi0gICAgaWYgKCh4ID0gY21mbGdzKSAhPSAxKSB7Ci0JaW50IGRvbmUgPSAw OwotCXdoaWxlICghZG9uZSkgewotCSAgICB4ID0gZ3R3b3JkKDApOwkJLyogR2V0IGZpcnN0IHdv cmQuICovCi0JICAgICp4cCA9IHBwOwkJCS8qIFNhdmUgcG9pbnRlciB0byBpdC4gKi8KLQkgICAg LyogZGVidWcoRjExMSwiY210eHQ6IiwqeHAsY2MpOyAqLwotCSAgICBpZiAoeCA9PSAtMTApIHsK LQkJaWYgKGd0aW1lcigpID4gdGltZWxpbWl0KSB7Ci0JCSAgICAvKiBpZiAoIXF1aWV0KSBwcmlu dGYoIj9UaW1lZCBvdXRcbiIpOyAqLwotCQkgICAgcmV0dXJuKHgpOwotCQl9Ci0JICAgIH0gZWxz ZQotCSAgICAgIGRvbmUgPSAxOwotCX0KLSAgICB9Ci0gICAgd2hpbGUgKDEpIHsJCQkJLyogTG9v cCBmb3IgZWFjaCB3b3JkIGluIHRleHQuICovCi0gICAgICAgIHhjICs9IGNjOyAgICAgICAgICAg ICAgICAgICAgICAgLyogQ2hhciBjb3VudCBmb3IgYWxsIHdvcmRzLiAqLwotICAgICAgICAvKiBk ZWJ1ZyhGMTExLCJjbXR4dCBndHdvcmQiLGF0bWJ1Zix4Yyk7ICovCi0gICAgICAgIC8qIGRlYnVn KEYxMDEsImNtdHh0IHgiLCIiLHgpOyAqLwotICAgICAgICBzd2l0Y2ggKHgpIHsKLQkgIGNhc2Ug LTEwOgotCSAgICBpZiAoZ3RpbWVyKCkgPiB0aW1lbGltaXQpIHsKLSNpZmRlZiBJS1NECi0gICAg ICAgICAgICAgICAgZXh0ZXJuIGludCBpbnNlcnZlcjsKLSAgICAgICAgICAgICAgICBpZiAoaW5z ZXJ2ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcclxuSUtTRCBJRExFIFRJTUVP VVQ6ICVkIHNlY1xyXG4iLCB0aW1lbGltaXQpOwotICAgICAgICAgICAgICAgICAgICBkb2V4aXQo R09PRF9FWElULDApOwotICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0JCS8q IGlmICghcXVpZXQpIHByaW50ZigiP1RpbWVkIG91dFxuIik7ICovCi0JCXJldHVybigtMTApOwot CSAgICB9IGVsc2UgewotCQl4ID0gZ3R3b3JkKDApOwotCQljb250aW51ZTsKLQkgICAgfQotCSAg Y2FzZSAtOToJCQkvKiBCdWZmZXIgb3ZlcmZsb3cgKi8KLQkgICAgcHJpbnRmKCJDb21tYW5kIG9y IGZpZWxkIHRvbyBsb25nXG4iKTsKLQkgIGNhc2UgLTQ6CQkJLyogRU9GICovCi0jaWZkZWYgTUFD Ci0JICBjYXNlIC0zOgkJCS8qIFF1aXQvVGltZW91dCAqLwotI2VuZGlmIC8qIE1BQyAqLwotCSAg Y2FzZSAtMjoJCQkvKiBPdmVyZmxvdyAqLwotCSAgY2FzZSAtMToJCQkvKiBEZWxldGlvbiAqLwot CSAgICByZXR1cm4oeCk7Ci0JICBjYXNlIDA6CQkJLyogU3BhY2UgKi8KLQkgICAgeGMrKzsJCQkv KiBKdXN0IGNvdW50IGl0ICovCi0JICAgIGJyZWFrOwotCSAgY2FzZSAxOgkJCS8qIENSIG9yIExG ICovCi0JICAgIGlmICh4YyA9PSAwKSAqeHAgPSB4ZGVmOwotCSAgICBpZiAoZikgewkJCS8qIElm IGEgY29udmVyc2lvbiBmdW5jdGlvbiBpcyBnaXZlbiAqLwotCQljaGFyICogc3ggPSBhdHhidWY7 Ci0JCXpxID0gYXR4YnVmOwkJLyogUG9pbnQgdG8gdGhlIGV4cGFuc2lvbiBidWZmZXIgKi8KLQkJ YXR4biA9IENNREJMOwkJLyogc3BlY2lmeSBpdHMgbGVuZ3RoICovCi0JCS8qIGRlYnVnKEYxMTEs ImNtdHh0IGNhbGxpbmcgKCpmKSIsKnhwLGF0eGJ1Zik7ICovCi0JCWlmICgoeCA9ICgqZikoKnhw LCZ6cSwmYXR4bikpIDwgMCkgcmV0dXJuKC0yKTsKLQkJc3ggPSBhdHhidWY7Ci0jaWZuZGVmIENP TU1FTlQKLQkJY2MgPSAwOwotCQl3aGlsZSAoKnN4KyspIGNjKys7CS8qIChmYXN0ZXIgdGhhbiBj YWxsaW5nIHN0cmxlbikgKi8KLSNlbHNlCi0JCWNjID0gKGludClzdHJsZW4oYXR4YnVmKTsKLSNl bmRpZiAvKiBDT01NRU5UICovCi0JCS8qIFNob3VsZCBiZSBlcXVhbCB0byAoQ01EQkwgLSBhdHhu KSBidXQgaXNuJ3QgYWx3YXlzLiAqLwotCQkvKiBXaHkgbm90PyAqLwotCQlpZiAoY2MgPCAxKSB7 CQkvKiBOb3RoaW5nIGluIGV4cGFuc2lvbiBidWZmZXI/ICovCi0JCSAgICAqeHAgPSB4ZGVmOwkJ LyogUG9pbnQgdG8gZGVmYXVsdCBzdHJpbmcgaW5zdGVhZC4gKi8KLSNpZm5kZWYgQ09NTUVOVAot CQkgICAgc3ggPSB4ZGVmOwotCQkgICAgd2hpbGUgKCpzeCsrKSBjYysrOwkvKiAoZmFzdGVyIHRo YW4gY2FsbGluZyBzdHJsZW4pICovCi0jZWxzZQotCQkgICAgY2MgPSBzdHJsZW4oeGRlZik7Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotCQl9IGVsc2UgewkJLyogRXhwYW5zaW9uIGZ1bmN0aW9uIGdv dCBzb21ldGhpbmcgKi8KLQkJICAgICp4cCA9IGF0eGJ1ZjsJLyogcmV0dXJuIHBvaW50ZXIgdG8g aXQuICovCi0JCX0KLQkJZGVidWcoRjExMSwiY210eHQgKCpmKSIsKnhwLGNjKTsKLQkgICAgfSBl bHNlIHsJCQkvKiBObyBleHBhbnNpb24gZnVuY3Rpb24gKi8KLSNpZm5kZWYgQ09NTUVOVAotCQkv KiBBdm9pZCBhIHN0cmxlbigpIGNhbGwgKi8KLQkJeHggPSAqeHA7Ci0JCWNjID0gMDsKLQkJd2hp bGUgKCp4eCsrKSBjYysrOwotI2Vsc2UKLQkJLyogTk8hICB4YyBpcyBhcHBhcmVudGx5IG5vdCBh bHdheXMgc2V0IGFwcHJvcHJpYXRlbHkgKi8KLQkJY2MgPSB4YzsKLSNlbmRpZiAvKiBDT01NRU5U ICovCi0JICAgIH0KLQkgICAgeHggPSAqeHA7Ci0jaWZkZWYgQ09NTUVOVAotCSAgICAvKiBzdHJs ZW4oKSBubyBsb25nZXIgbmVlZGVkICovCi0JICAgIGZvciAoaSA9IChpbnQpc3RybGVuKHh4KSAt IDE7IGkgPiAwOyBpLS0pCi0jZWxzZQotCSAgICBmb3IgKGkgPSBjYyAtIDE7IGkgPiAwOyBpLS0p Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCSAgICAgIGlmICh4eFtpXSAhPSBTUCkJCS8qIFRyaW0g dHJhaWxpbmcgYmxhbmtzICovCi0JCWJyZWFrOwotCSAgICAgIGVsc2UKLQkJeHhbaV0gPSBOVUw7 Ci0JICAgIHJldHVybih4KTsKLQkgIGNhc2UgMjoJCQkvKiBFU0MgKi8KLQkgICAgaWYgKHhjID09 IDApIHsJCS8qIE5vdGhpbmcgdHlwZWQgeWV0ICovCi0JCWlmICgqeGRlZikgewkJLyogSGF2ZSBh IGRlZmF1bHQgZm9yIHRoaXMgZmllbGQ/ICovCi0JCSAgICBwcmludGYoIiVzICIseGRlZik7CS8q IFllcywgc3VwcGx5IGl0ICovCi0JCSAgICBpbndvcmQgPSBjbWZsZ3MgPSAwOwotI2lmZGVmIEdF TURPUwotCQkgICAgZmZsdXNoKHN0ZG91dCk7Ci0jZW5kaWYgLyogR0VNRE9TICovCi0JCSAgICBj YyA9IGFkZGJ1Zih4ZGVmKTsKLQkJfSBlbHNlIGJsZWVwKEJQX1dBUk4pOwkvKiBObyBkZWZhdWx0 ICovCi0JICAgIH0gZWxzZSB7CQkJLyogQWxyZWFkeSBpbiBmaWVsZCAqLwotCQlpbnQgeDsgY2hh ciAqcDsKLQkJeCA9IHN0cmxlbihhdG1idWYpOwotCQlpZiAoY2tzdHJjbXAoYXRtYnVmLHhkZWYs eCwwKSkgeyAgICAvKiBNYXRjaGVzIGRlZmF1bHQ/ICovCi0JCSAgICBibGVlcChCUF9XQVJOKTsJ ICAgICAgICAgICAgLyogTm8gKi8KLQkJfSBlbHNlIGlmICgoaW50KXN0cmxlbih4ZGVmKSA+IHgp IHsgLyogWWVzICovCi0JCSAgICBwID0geGRlZiArIHg7Ci0JCSAgICBwcmludGYoIiVzICIsIHAp OwotI2lmZGVmIEdFTURPUwotCQkgICAgZmZsdXNoKHN0ZG91dCk7Ci0jZW5kaWYgLyogR0VNRE9T ICovCi0JCSAgICBhZGRidWYocCk7Ci0JCSAgICBpbndvcmQgPSBjbWZsZ3MgPSAwOwotCQkgICAg ZGVidWcoRjExMCwiY210eHQ6IGFkZGJ1ZiIsY21kYnVmLDApOwotCQl9IGVsc2UgewotCQkgICAg YmxlZXAoQlBfV0FSTik7Ci0JCX0KLQkgICAgfQotCSAgICBicmVhazsKLQkgIGNhc2UgMzoJCQkv KiBRdWVzdGlvbiBNYXJrICovCi0JICAgIGlmICgqeGhscCA9PSBOVUwpCi0JICAgICAgcHJpbnRm KCIgVGV4dCBzdHJpbmciKTsKLQkgICAgZWxzZQotCSAgICAgIHByaW50ZigiICVzIix4aGxwKTsK LQkgICAgcHJpbnRmKCJcbiVzJXMiLGNtcHJvbSxjbWRidWYpOwotCSAgICBmZmx1c2goc3Rkb3V0 KTsKLQkgICAgYnJlYWs7Ci0JICBkZWZhdWx0OgotCSAgICBwcmludGYoIj9VbmV4cGVjdGVkIHJl dHVybiBjb2RlIGZyb20gZ3R3b3JkKCkgLSAlZFxuIix4KTsKLQkgICAgcmV0dXJuKC0yKTsKLSAg ICAgICAgfQotICAgICAgICB4ID0gZ3R3b3JkKDApOwotICAgIH0KLX0KLQotLyogIEMgTSBLIEUg WSAgLS0gIFBhcnNlIGEga2V5d29yZCAgKi8KLQotLyoKLSBDYWxsIHdpdGg6Ci0gICB0YWJsZSAg ICAtLSAga2V5d29yZCB0YWJsZSwgaW4gJ3N0cnVjdCBrZXl0YWInIGZvcm1hdDsKLSAgIG4gICAg ICAgIC0tICBudW1iZXIgb2YgZW50cmllcyBpbiB0YWJsZTsKLSAgIHhobHAgICAgIC0tICBwb2lu dGVyIHRvIGhlbHAgc3RyaW5nOwotICAgeGRlZiAgICAgLS0gIHBvaW50ZXIgdG8gZGVmYXVsdCBr ZXl3b3JkOwotICAgZiAgICAgICAgLS0gIHN0cmluZyBwcmVwcm9jZXNzaW5nIGZ1bmN0aW9uIChl LmcuIHRvIGV2YWx1YXRlIHZhcmlhYmxlcykKLSAgIHBtc2cgICAgIC0tICAwID0gZG9uJ3QgcHJp bnQgZXJyb3IgbWVzc2FnZXMKLSAgICAgICAgICAgICAgICAxID0gcHJpbnQgZXJyb3IgbWVzc2Fn ZXMKLSAgICAgICAgICAgICAgICAyID0gaW5jbHVkZSBDTV9ITFAga2V5d29yZHMgZXZlbiBpZiBp bnZpc2libGUKLSAgICAgICAgICAgICAgICAzID0gMSsyCi0gICAgICAgICAgICAgICAgNCA9IHBh cnNlIGEgc3dpdGNoIChrZXl3b3JkIHBvc3NpYmx5IGVuZGluZyBpbiA6IG9yID0pCi0gICAgICAg ICAgICAgICAgOCA9IGRvbid0IHN0cmlwIGNvbW1lbnRzICh1c2VkLCBlLmcuLCBmb3IgImhlbHAg IyIpCi0gUmV0dXJuczoKLSAgIC0zICAgICAgIC0tICBubyBpbnB1dCBzdXBwbGllZCBhbmQgbm8g ZGVmYXVsdCBhdmFpbGFibGUKLSAgIC0yICAgICAgIC0tICBpbnB1dCBkb2Vzbid0IHVuaXF1ZWx5 IG1hdGNoIGEga2V5d29yZCBpbiB0aGUgdGFibGUKLSAgIC0xICAgICAgIC0tICB1c2VyIGRlbGV0 ZWQgdG9vIG11Y2gsIGNvbW1hbmQgcmVwYXJzZSByZXF1aXJlZAotICAgIG4gPj0gMCAgLS0gIHZh bHVlIGFzc29jaWF0ZWQgd2l0aCBrZXl3b3JkCi0qLwotCi0vKgotICBGcm9udCBlbmRzIGZvciBj bWtleTIoKTogCi0gIGNta2V5KCkgIC0gVGhlIG5vcm1hbCBrZXl3b3JkIHBhcnNlcgotICBjbWtl eXgoKSAtIExpa2UgY21rZXkoKSBidXQgc3VwcHJlc3NlcyBlcnJvciBtZXNzYWdlcwotICBjbXN3 aSgpICAtIFN3aXRjaCBwYXJzZXIKLSovCi1pbnQKLWNta2V5KHRhYmxlLG4seGhscCx4ZGVmLGYp Ci0vKiBjbWtleSAqLyAgc3RydWN0IGtleXRhYiB0YWJsZVtdOyBpbnQgbjsgY2hhciAqeGhscCwg KnhkZWY7IHh4X3N0cnAgZjsgewotICAgIHJldHVybihjbWtleTIodGFibGUsbix4aGxwLHhkZWYs IiIsZiwxKSk7Ci19Ci1pbnQKLWNta2V5eCh0YWJsZSxuLHhobHAseGRlZixmKQotLyogY21rZXl4 ICovICBzdHJ1Y3Qga2V5dGFiIHRhYmxlW107IGludCBuOyBjaGFyICp4aGxwLCAqeGRlZjsgeHhf c3RycCBmOyB7Ci0gICAgcmV0dXJuKGNta2V5Mih0YWJsZSxuLHhobHAseGRlZiwiIixmLDApKTsK LX0KLWludAotY21zd2kodGFibGUsbix4aGxwLHhkZWYsZikKLS8qIGNtc3dpICovICBzdHJ1Y3Qg a2V5dGFiIHRhYmxlW107IGludCBuOyBjaGFyICp4aGxwLCAqeGRlZjsgeHhfc3RycCBmOyB7Ci0g ICAgcmV0dXJuKGNta2V5Mih0YWJsZSxuLHhobHAseGRlZiwiIixmLDQpKTsKLX0KLQotaW50Ci1j bWtleTIodGFibGUsbix4aGxwLHhkZWYsdG9rLGYscG1zZykKLSAgICBzdHJ1Y3Qga2V5dGFiIHRh YmxlW107Ci0gICAgaW50IG47Ci0gICAgY2hhciAqeGhscCwgKnhkZWY7Ci0gICAgY2hhciAqdG9r OwotICAgIHh4X3N0cnAgZjsKLSAgICBpbnQgcG1zZzsKLXsgLyogY21rZXkyICovCi0gICAgZXh0 ZXJuIGludCBoYXZldG9rZW47Ci0gICAgaW50IGksIHRsLCB5LCB6ID0gMCwgenosIHhjLCB3b3Jk bGVuID0gMCwgY21zd2l0Y2g7Ci0gICAgY2hhciAqeHAsICp6cTsKLQotICAgIGlmICgheGhscCkg eGhscCA9ICIiOwotICAgIGlmICgheGRlZikgeGRlZiA9ICIiOwotCi0gICAgY21mbGRmbGdzID0g MDsKLSAgICBpZiAoIXRhYmxlKSB7Ci0JcHJpbnRmKCI/S2V5d29yZCB0YWJsZSBtaXNzaW5nXG4i KTsKLQlyZXR1cm4oLTkpOwotICAgIH0KLSAgICB0bCA9IChpbnQpc3RybGVuKHRvayk7Ci0KLSAg ICBpbndvcmQgPSB4YyA9IGNjID0gMDsJCS8qIENsZWFyIGNoYXJhY3RlciBjb3VudGVycy4gKi8K LSAgICBjbXN3aXRjaCA9IHBtc2cgJiA0OwkJLyogRmxhZyBmb3IgcGFyc2luZyBhIHN3aXRjaCAq LwotCi0gICAgZGVidWcoRjEwMSwiY21rZXk6IHBtc2ciLCIiLHBtc2cpOwotICAgIGRlYnVnKEYx MDEsImNta2V5OiBjbWZsZ3MiLCIiLGNtZmxncyk7Ci0gICAgZGVidWcoRjEwMSwiY21rZXk6IGNt c3dpdGNoIiwiIixjbXN3aXRjaCk7Ci0gICAgLyogZGVidWcoRjEwMSwiY21rZXk6IGNtZGJ1ZiIs IiIsY21kYnVmKTsqLwotCi0gICAgcHB2bmFtYnVmWzBdID0gTlVMOwotCi0gICAgaWYgKCh6eiA9 IGNtZmxncykgPT0gMSkgewkJLyogQ29tbWFuZCBhbHJlYWR5IGVudGVyZWQ/ICovCi0JaWYgKHNl dGF0bSh4ZGVmLDApIDwgMCkgewkvKiBZZXMsIGNvcHkgZGVmYXVsdCBpbnRvIGF0b20gYnVmICov Ci0JICAgIHByaW50ZigiP0RlZmF1bHQgdG9vIGxvbmdcbiIpOwotCSAgICByZXR1cm4oLTkpOwot CX0KLSAgICAgICAgcnRpbWVyKCk7CQkJIC8qIFJlc2V0IHRpbWVyICovCi0gICAgfSBlbHNlIHsJ CQkJIC8qIE90aGVyd2lzZSBnZXQgYSBjb21tYW5kIHdvcmQgKi8KLSAgICAgICAgcnRpbWVyKCk7 CQkJIC8qIFJlc2V0IHRpbWVyICovCi0JaWYgKHBtc2cgJiA4KQkJCSAvKiA4IGlzIGZvciBwYXJz aW5nIEhFTFAgdG9rZW5zICovCi0JICB6eiA9IGd0d29yZCg0KTsKLQllbHNlCi0JICB6eiA9IGd0 d29yZCgocG1zZyA9PSA0KSA/IDEgOiAwKTsKLSAgICB9Ci0KLSAgICBkZWJ1ZyhGMTAxLCJjbWtl eSB0YWJsZSBsZW5ndGgiLCIiLG4pOwotICAgIGRlYnVnKEYxMDEsImNta2V5IGNtZmxncyIsIiIs Y21mbGdzKTsKLSAgICBkZWJ1ZyhGMTAxLCJjbWtleSBjYyIsIiIsY2MpOwotCi0gICAgd2hpbGUg KDEpIHsKLQl4YyArPSBjYzsKLQlkZWJ1ZyhGMTExLCJjbWtleSBndHdvcmQgeGMiLGF0bWJ1Zix4 Yyk7Ci0JZGVidWcoRjEwMSwiY21rZXkgZ3R3b3JkIHp6IiwiIix6eik7Ci0KLQlzd2l0Y2ggKHp6 KSB7Ci0JICBjYXNlIC0xMDoJCQkvKiBUaW1lb3V0ICovCi0JICAgIGlmIChndGltZXIoKSA8IHRp bWVsaW1pdCkgewotCQlpZiAocG1zZyAmIDgpCQkvKiA4IGlzIGZvciBwYXJzaW5nIEhFTFAgdG9r ZW5zICovCi0JCSAgenogPSBndHdvcmQoNCk7Ci0JCWVsc2UKLQkJICB6eiA9IGd0d29yZCgocG1z ZyA9PSA0KSA/IDEgOiAwKTsKLQkJY29udGludWU7Ci0JICAgIH0gZWxzZSB7Ci0jaWZkZWYgSUtT RAotICAgICAgICAgICAgICAgIGV4dGVybiBpbnQgaW5zZXJ2ZXI7Ci0gICAgICAgICAgICAgICAg aWYgKGluc2VydmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiXHJcbklLU0QgSURM RSBUSU1FT1VUOiAlZCBzZWNcclxuIiwgdGltZWxpbWl0KTsKLSAgICAgICAgICAgICAgICAgICAg ZG9leGl0KEdPT0RfRVhJVCwwKTsKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogSUtTRCAq LwotCQlyZXR1cm4oLTEwKTsKLSAgICAgICAgICAgIH0KLQkgIGNhc2UgLTU6Ci0JICAgIHJldHVy bihjbWZsZ3MgPSAwKTsKLQkgIGNhc2UgLTk6Ci0JICAgIHByaW50ZigiQ29tbWFuZCBvciBmaWVs ZCB0b28gbG9uZ1xuIik7Ci0JICBjYXNlIC00OgkJCS8qIEVPRiAqLwotCSAgY2FzZSAtMzoJCQkv KiBOdWxsIENvbW1hbmQvUXVpdC9UaW1lb3V0ICovCi0JICBjYXNlIC0yOgkJCS8qIEJ1ZmZlciBv dmVyZmxvdyAqLwotCSAgY2FzZSAtMToJCQkvKiBPciB1c2VyIGRpZCBzb21lIGRlbGV0aW5nLiAq LwotCSAgICByZXR1cm4oY21mbGdzID0genopOwotCi0KLQkgIGNhc2UgMToJCQkvKiBDUiAqLwot CSAgY2FzZSAwOgkJCS8qIFVzZXIgdGVybWluYXRlZCB3b3JkIHdpdGggc3BhY2UgKi8KLQkgIGNh c2UgNDoJCQkvKiBvciBzd2l0Y2ggZW5kaW5nIGluIDogb3IgPSAqLwotCSAgICB3b3JkbGVuID0g Y2M7CQkvKiBMZW5ndGggaWYgbm8gY29udmVyc2lvbiAqLwotCSAgICBpZiAoY2MgPT0gMCkgewkJ LyogU3VwcGx5IGRlZmF1bHQgaWYgd2UgZ290IG5vdGhpbmcgKi8KLQkJaWYgKCh3b3JkbGVuID0g c2V0YXRtKHhkZWYsKHp6ID09IDQpID8gMiA6IDApKSA8IDApIHsKLQkJICAgIHByaW50ZigiP0Rl ZmF1bHQgdG9vIGxvbmdcbiIpOwotCQkgICAgcmV0dXJuKC05KTsKLQkJfQotCSAgICB9Ci0JICAg IGlmICh6eiA9PSAxICYmIGNjID09IDApCS8qIFJlcXVpcmVkIGZpZWxkIG1pc3NpbmcgKi8KLQkg ICAgICByZXR1cm4oLTMpOwotCi0JICAgIGlmIChmKSB7CQkJLyogSWYgYSBjb252ZXJzaW9uIGZ1 bmN0aW9uIGlzIGdpdmVuICovCi0JCWNoYXIgKiBwMjsKLQkJenEgPSBhdHhidWY7CQkvKiBhcHBs eSBpdCAqLwotCQlwMiA9IGF0eGJ1ZjsKLQkJYXR4biA9IENNREJMOwotCQlpZiAoKCpmKShhdG1i dWYsJnpxLCZhdHhuKSA8IDApIHJldHVybigtMik7Ci0JCWRlYnVnKEYxMTAsImNta2V5IGF0eGJ1 ZiBhZnRlciAqZiIsYXR4YnVmLDApOwotCQlpZiAoISpwMikJCS8qIFN1cHBseSBkZWZhdWx0IGlm IHdlIGdvdCBub3RoaW5nICovCi0JCSAgcDIgPSB4ZGVmOwotCQlja3N0cm5jcHkocHB2bmFtYnVm LGF0bWJ1ZixQUFZMRU4pOwotCQlpZiAoKHdvcmRsZW4gPSBzZXRhdG0ocDIsKHp6ID09IDQpID8g MiA6IDApKSA8IDApIHsKLQkJICAgIHByaW50ZigiRXZhbHVhdGVkIGtleXdvcmQgdG9vIGxvbmdc biIpOwotCQkgICAgcmV0dXJuKC05KTsKLQkJfQotI2lmZGVmIE1fVU5HVwotCQkvKgotCQkgIFRo aXMgYml0IGxldHMgdXMgc2F2ZSBtb3JlIHRoYW4gb25lICJ3b3JkIi4KLQkJICBGb3IgZXhhbXBs ZSwgImRlZmluZSBcJXggZWNobyBvbmUgdHdvIHRocmVlIiwgIlwleCIuCi0JCSAgSXQgd29ya3Mg dG9vLCBidXQgaXQgYnJlYWtzIGxhYmVscywgYW5kIHRoZXJlZm9yZQotCQkgIFdISUxFIGFuZCBG T1IgbG9vcHMsIGV0Yy4KLQkJKi8KLQkJaWYgKHAyW3dvcmRsZW5dID49IFNQKSB7Ci0JCSAgICBw MiArPSB3b3JkbGVuOwotCQkgICAgd2hpbGUgKCpwMiA9PSBTUCkgcDIrKzsKLQkJICAgIGlmICgq cDIpIHsKLQkJCXVuZ3dvcmQoKTsKLQkJCXBwID0gcDI7Ci0JCSAgICB9Ci0JCX0KLSNlbmRpZiAv KiBNX1VOR1cgKi8KLQkgICAgfQotI2lmZGVmIENPTU1FTlQJCQkJLyogXl5eICovCi0JICAgIGlm IChjbXN3aXRjaCAmJiAqYXRtYnVmICE9ICcvJykgewotCQlpZiAocG1zZyAmIDEpIHsKLQkJICAg IGJsZWVwKEJQX0ZBSUwpOwotICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9Ob3QgYSBzd2l0 Y2ggLSAlc1xuIixhdG1idWYpOwotCQl9Ci0JCWNtZmxncyA9IC0yOwotCQlyZXR1cm4oLTYpOwot CSAgICB9Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwotCSAgICBpZiAoY21zd2l0Y2gpIHsKLQkJaW50 IGk7Ci0JCWZvciAoaSA9IDA7IGkgPCB3b3JkbGVuOyBpKyspIHsKLQkJICAgIGlmIChhdG1idWZb aV0gPT0gJzonIHx8IGF0bWJ1ZltpXSA9PSAnPScpIHsKLQkJCWJya2NoYXIgPSBhdG1idWZbaV07 Ci0JCQlhdG1idWZbaV0gPSBOVUw7Ci0JCQlicmVhazsKLQkJICAgIH0KLQkJfQotCSAgICB9Ci0K LSNpZmRlZiBUT0tQUkVDSEVDSwotLyogVGhpcyB3YXMgYW4gZWZmZWN0aXZlIG9wdGltaXphdGlv biBidXQgaXQgYnJlYWtzIHNvbWV0aW1lcyBvbiBsYWJlbHMuICovCi0JICAgIGlmICh0bCAmJiAh aXNhbHBoYShhdG1idWZbMF0pKSB7IC8qIFByZWNoZWNrIGZvciB0b2tlbiAqLwotCQlmb3IgKGkg PSAwOyBpIDwgdGw7IGkrKykgeyAvKiBTYXZlIGZ1bmN0aW9uIGNhbGwgdG8gY2tzdHJjaHIgKi8K LQkJICAgIGlmICh0b2tbaV0gPT0gYXRtYnVmWzBdKSB7Ci0JCQlkZWJ1ZyhGMDAwLCJjbWtleSB0 b2tlbjoiLGF0bWJ1ZiwqYXRtYnVmKTsKLQkJCXVuZ3dvcmQoKTsgIC8qIFB1dCBiYWNrIHRoZSBm b2xsb3dpbmcgd29yZCAqLwotCQkJcmV0dXJuKC01KTsgLyogU3BlY2lhbCByZXR1cm4gY29kZSBm b3IgdG9rZW4gKi8KLQkJICAgIH0KLQkJfQotCSAgICB9Ci0jZW5kaWYgLyogVE9LUFJFQ0hFQ0sg Ki8KLQotCSAgICB5ID0gbG9va3VwKHRhYmxlLGF0bWJ1ZixuLCZ6KTsgLyogTG9vayB1cCB3b3Jk IGluIHRoZSB0YWJsZSAqLwotCSAgICBkZWJ1ZyhGMTExLCJjbWtleSBsb29rdXAiLGF0bWJ1Zix5 KTsKLQkgICAgZGVidWcoRjEwMSwiY21rZXkgenoiLCIiLHp6KTsKLQkgICAgZGVidWcoRjEwMSwi Y21rZXkgY21mbGdzIiwiIixjbWZsZ3MpOwotCSAgICBkZWJ1ZyhGMTAxLCJjbWtleSBjcmZsYWci LCIiLGNyZmxhZyk7Ci0JICAgIHN3aXRjaCAoeSkgewotCSAgICAgIGNhc2UgLTM6CQkJLyogTm90 aGluZyB0byBsb29rIHVwICovCi0JCWJyZWFrOwotCSAgICAgIGNhc2UgLTI6CQkJLyogQW1iaWd1 b3VzICovCi0JCWNtZmxncyA9IC0yOwotCQlpZiAocG1zZyAmIDEpIHsKLQkJICAgIGJsZWVwKEJQ X0ZBSUwpOwotICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9BbWJpZ3VvdXMgLSAlc1xuIixh dG1idWYpOwotCQkgICAgcmV0dXJuKC05KTsKLQkJfQotCQlyZXR1cm4oLTIpOwotCSAgICAgIGNh c2UgLTE6CQkJLyogTm90IGZvdW5kIGF0IGFsbCAqLwotI2lmbmRlZiBUT0tQUkVDSEVDSwotCQlp ZiAodGwpIHsKLQkJICAgIGZvciAoaSA9IDA7IGkgPCB0bDsgaSsrKSAvKiBDaGVjayBmb3IgdG9r ZW4gKi8KLQkJICAgICAgaWYgKHRva1tpXSA9PSAqYXRtYnVmKSB7IC8qIEdvdCBvbmUgKi8KLQkJ CSAgZGVidWcoRjAwMCwiY21rZXkgdG9rZW46IixhdG1idWYsKmF0bWJ1Zik7Ci0JCQkgIHVuZ3dv cmQoKTsgIC8qIFB1dCBiYWNrIHRoZSBmb2xsb3dpbmcgd29yZCAqLwotCQkJICByZXR1cm4oLTUp OyAvKiBTcGVjaWFsIHJldHVybiBjb2RlIGZvciB0b2tlbiAqLwotCQkgICAgICB9Ci0JCX0KLSNl bmRpZiAvKiBUT0tQUkVDSEVDSyAqLwotCi0JCWlmICh0bCA9PSAwKSB7CQkvKiBObyB0b2tlbnMg d2VyZSBpbmNsdWRlZCAqLwotI2lmZGVmIE9TMgotCQkgICAgLyogSW4gT1MvMiBhbmQgV2luZG93 cywgYWxsb3cgZm9yIGEgZGlzayBsZXR0ZXIgbGlrZSBET1MgKi8KLQkJICAgIGlmIChpc2FscGhh KCphdG1idWYpICYmICooYXRtYnVmKzEpID09ICc6JykKLQkJICAgICAgcmV0dXJuKC03KTsKLSNl bmRpZiAvKiBPUzIgKi8KLQkJICAgIGlmICgocG1zZyAmIDEpICYmICFxdWlldCkgewotCQkJYmxl ZXAoQlBfRkFJTCk7Ci0JCQlwcmludGYoIj9ObyBrZXl3b3JkcyBtYXRjaCAtICVzXG4iLGF0bWJ1 Zik7IC8qIGNta2V5ICovCi0JCSAgICB9Ci0JCSAgICByZXR1cm4oY21mbGdzID0gLTkpOwotCQl9 IGVsc2UgewotCQkgICAgaWYgKGNtZmxncyA9PSAxIHx8IGNtc3dpdGNoKSAvKiBjbWtleTIgb3Ig Y21zd2kgKi8KLQkJICAgICAgcmV0dXJuKGNtZmxncyA9IC02KTsKLQkJICAgIGVsc2UKLQkJICAg ICAgcmV0dXJuKGNtZmxncyA9IC0yKTsKLQkJICAgIC8qIFRoZSAtNiBjb2RlIGlzIHRvIGxldCBj YWxsZXIgdHJ5IGFub3RoZXIgdGFibGUgKi8KLQkJfQotCQlicmVhazsKLQkgICAgICBkZWZhdWx0 OgotI2lmZGVmIENLX1JFQ0FMTAotCQlpZiAodGVzdCh0YWJsZVt6XS5mbGdzLENNX05PUikpIG5v X3JlY2FsbCA9IDE7Ci0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0JCWlmICh6eiA9PSA0KQotCQkg IHN3YXJnID0gMTsKLQkJY21rd2ZsZ3MgPSB0YWJsZVt6XS5mbGdzOwotCQlicmVhazsKLQkgICAg fQotCSAgICByZXR1cm4oeSk7Ci0KLQkgIGNhc2UgMjoJCQkvKiBVc2VyIHRlcm1pbmF0ZWQgd29y ZCB3aXRoIEVTQyAqLwotCSAgICBkZWJ1ZyhGMTAxLCJjbWtleSBFc2MgY2MiLCIiLGNjKTsKLSAg ICAgICAgICAgIGlmIChjYyA9PSAwKSB7Ci0JCWlmICgqeGRlZiAhPSBOVUwpIHsgICAgIC8qIE5v dGhpbmcgaW4gYXRtYnVmICovCi0JCSAgICBwcmludGYoIiVzICIseGRlZik7IC8qIFN1cHBseSBk ZWZhdWx0IGlmIGFueSAqLwotI2lmZGVmIEdFTURPUwotCQkgICAgZmZsdXNoKHN0ZG91dCk7Ci0j ZW5kaWYgLyogR0VNRE9TICovCi0JCSAgICBhZGRidWYoeGRlZik7Ci0JCSAgICBpZiAoc2V0YXRt KHhkZWYsMCkgPCAwKSB7Ci0JCQlwcmludGYoIj9EZWZhdWx0IHRvbyBsb25nXG4iKTsKLQkJCXJl dHVybigtOSk7Ci0JCSAgICB9Ci0JCSAgICBpbndvcmQgPSBjbWZsZ3MgPSAwOwotCQkgICAgZGVi dWcoRjExMSwiY21rZXk6IGRlZmF1bHQiLGF0bWJ1ZixjYyk7Ci0JCX0gZWxzZSB7Ci0JCSAgICBk ZWJ1ZyhGMTAxLCJjbWtleSBFc2MgcG1zZyIsIiIsMCk7Ci0jaWZkZWYgQ09NTUVOVAotLyoKLSAg Q2hhaW5lZCBGREJzLi4uICBUaGUgaWRlYSBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gbWlnaHQgbm90 IGhhdmUgYSBkZWZhdWx0LAotICBidXQgdGhlIG5leHQgb25lIG1pZ2h0LiAgQnV0IGlmIGl0IGRv ZXNuJ3QsIHRoZXJlIGlzIG5vIHdheSB0byBjb21lIGJhY2sgdG8KLSAgdGhpcyBvbmUuICBUbyBi ZSByZXZpc2l0ZWQgbGF0ZXIuLi4KLSovCi0JCSAgICBpZiAoeGNtZmRiKQkJLyogQ2hhaW5lZCBm ZGIgLS0gdHJ5IG5leHQgb25lICovCi0JCSAgICAgIHJldHVybigtMyk7Ci0jZW5kaWYgLyogQ09N TUVOVCAqLwotCQkgICAgaWYgKHBtc2cgJiAoMXw0KSkgewkvKiBTbyBmb3Igbm93IGp1c3QgYmVl cCAqLwotCQkJYmxlZXAoQlBfV0FSTik7Ci0JCSAgICB9Ci0JCSAgICBicmVhazsKLQkJfQotICAg ICAgICAgICAgfQotCSAgICBpZiAoZikgewkJCS8qIElmIGEgY29udmVyc2lvbiBmdW5jdGlvbiBp cyBnaXZlbiAqLwotCQljaGFyICogcHA7Ci0JCXpxID0gYXR4YnVmOwkJLyogYXBwbHkgaXQgKi8K LQkJcHAgPSBhdHhidWY7Ci0JCWF0eG4gPSBDTURCTDsKLQkJaWYgKCgqZikoYXRtYnVmLCZ6cSwm YXR4bikgPCAwKQotCQkgIHJldHVybigtMik7Ci0JCWlmICghKnBwKQotCQkgIHBwID0geGRlZjsK LQkJaWYgKHNldGF0bShwcCwwKSA8IDApIHsKLQkJICAgIHByaW50ZigiRXZhbHVhdGVkIGtleXdv cmQgdG9vIGxvbmdcbiIpOwotCQkgICAgcmV0dXJuKC05KTsKLQkJfQotCSAgICB9Ci0JICAgIHkg PSBsb29rdXAodGFibGUsYXRtYnVmLG4sJnopOyAvKiBTb21ldGhpbmcgaW4gYXRtYnVmICovCi0J ICAgIGRlYnVnKEYxMTEsImNta2V5IGxvb2t1cCB5IixhdG1idWYseSk7Ci0JICAgIGRlYnVnKEYx MTEsImNta2V5IGxvb2t1cCB6IixhdG1idWYseik7Ci0JICAgIGlmICh5ID09IC0yICYmIHogPj0g MCAmJiB6IDwgbikgeyAvKiBBbWJpZ3VvdXMgKi8KLSNpZm5kZWYgTk9QQVJUSUFMCi0JCWludCBq LCBrLCBsZW4gPSA5OTk5OwkvKiBEbyBwYXJ0aWFsIGNvbXBsZXRpb24gKi8KLQkJLyogU2tpcCBw YXN0IGFueSBhYmJyZXZpYXRpb25zIGluIHRoZSB0YWJsZSAqLwotCQlmb3IgKCA7IHogPCBuOyB6 KyspIHsKLQkJICAgIGlmICgodGFibGVbel0uZmxncyAmIENNX0FCUikgPT0gMCkKLQkJICAgICAg YnJlYWs7Ci0JCSAgICBpZiAoISh0YWJsZVt6XS5mbGdzICYgQ01fSExQKSB8fCAocG1zZyAmIDIp KQotCQkgICAgICBicmVhazsKLQkJfQotCQlkZWJ1ZyhGMTExLCJjbWtleSBwYXJ0aWFsIHoiLGF0 bWJ1Zix6KTsKLQkJZGVidWcoRjExMSwiY21rZXkgcGFydGlhbCBuIixhdG1idWYsbik7Ci0JCWZv ciAoaiA9IHorMTsgaiA8IG47IGorKykgewotCQkgICAgZGVidWcoRjExMSwiY21rZXkgcGFydGlh bCBqIix0YWJsZVtqXS5rd2Qsaik7Ci0JCSAgICBpZiAoY2tzdHJjbXAoYXRtYnVmLHRhYmxlW2pd Lmt3ZCxjYywwKSkKLQkJICAgICAgYnJlYWs7Ci0JCSAgICBpZiAodGFibGVbal0uZmxncyAmIENN X0FCUikKLQkJICAgICAgY29udGludWU7Ci0JCSAgICBpZiAoKHRhYmxlW2pdLmZsZ3MgJiBDTV9I TFApICYmICEocG1zZyAmIDIpKQotCQkgICAgICBjb250aW51ZTsKLQkJICAgIGsgPSBja3N0cnBy ZSh0YWJsZVt6XS5rd2QsdGFibGVbal0ua3dkKTsKLQkJICAgIGRlYnVnKEYxMTEsImNta2V5IHBh cnRpYWwgayIsdGFibGVbel0ua3dkLGspOwotCQkgICAgaWYgKGsgPCBsZW4pCi0JCSAgICAgIGxl biA9IGs7IC8qIExlbmd0aCBvZiBsb25nZXN0IGNvbW1vbiBwcmVmaXggKi8KLQkJfQotCQlkZWJ1 ZyhGMTExLCJjbWtleSBwYXJ0aWFsIGxlbiIsdGFibGVbel0ua3dkLGxlbik7Ci0JCWlmIChsZW4g IT0gOTk5OSAmJiBsZW4gPiBjYykgewotCQkgICAgY2tzdHJuY2F0KGF0bWJ1Zix0YWJsZVt6XS5r d2QrY2MsQVRNQkwpOwotCQkgICAgYXRtYnVmW2xlbl0gPSBOVUw7Ci0JCSAgICBwcmludGYoIiVz IixhdG1idWYrY2MpOwotCQkgICAgY2tzdHJuY2F0KGNtZGJ1ZixhdG1idWYrY2MsQ01EQkwpOwot CQkgICAgeGMgKz0gKGxlbiAtIGNjKTsKLQkJICAgIGNjID0gbGVuOwotCQl9Ci0jZW5kaWYgLyog Tk9QQVJUSUFMICovCi0JCWJsZWVwKEJQX1dBUk4pOwotCQlicmVhazsKLQkgICAgfSBlbHNlIGlm ICh5ID09IC0zKSB7Ci0JCWJsZWVwKEJQX1dBUk4pOwotCQlicmVhazsKLQkgICAgfSBlbHNlIGlm ICh5ID09IC0xKSB7CS8qIE5vdCBmb3VuZCAqLwotCQlpZiAoKHBtc2cgJiAxKSAmJiAhcXVpZXQp IHsKLQkJICAgIGJsZWVwKEJQX0ZBSUwpOwotCQkgICAgcHJpbnRmKCI/Tm8ga2V5d29yZHMgbWF0 Y2ggLSBcIiVzXCJcbiIsYXRtYnVmKTsKLQkJfQotCQljbWZsZ3MgPSAtMjsKLQkJcmV0dXJuKC05 KTsKLQkgICAgfQotLyoKLSAgSWYgd2UgZm91bmQgaXQsIGJ1dCBpdCdzIGEgaGVscC1vbmx5IGtl eXdvcmQgYW5kIHRoZSAiaGVscCIgYml0IGlzIG5vdAotICBzZXQgaW4gcG1zZywgdGhlbiBub3Qg Zm91bmQuCi0qLwotCSAgICBkZWJ1ZyhGMTAxLCJjbWtleSBmbGdzIiwiIix0YWJsZVt6XS5mbGdz KTsKLQkgICAgaWYgKHRlc3QodGFibGVbel0uZmxncyxDTV9ITFApICYmICgocG1zZyAmIDIpID09 IDApKSB7Ci0JCWlmICgocG1zZyAmIDEpICYmICFxdWlldCkgewotCQkgICAgYmxlZXAoQlBfRkFJ TCk7Ci0JCSAgICBwcmludGYoIj9ObyBrZXl3b3JkcyBtYXRjaCAtICVzXG4iLGF0bWJ1Zik7Ci0J CX0KLQkJY21mbGdzID0gLTI7Ci0JCXJldHVybigtOSk7Ci0JICAgIH0KLS8qCi0gIFNlZSBpZiB0 aGUga2V5d29yZCBqdXN0IGZvdW5kIGhhcyB0aGUgQ01fQUJSIGJpdCBzZXQgaW4gaXRzIGZsZ3Mg ZmllbGQsIGFuZAotICBpZiBzbywgc2VhcmNoIGZvcndhcmRzIGluIHRoZSB0YWJsZSBmb3IgYSBr ZXl3b3JkIHRoYXQgaGFzIHRoZSBzYW1lIGt3dmFsCi0gIGJ1dCBkb2VzIG5vdCBoYXZlIENNX0FC UiAob3IgQ01fSU5WPykgc2V0LCBhbmQgdGhlbiBleHBhbmQgdXNpbmcgdGhlIGZ1bGwKLSAga2V5 d29yZC4gIFdBUk5JTkc6IFRoaXMgYXNzdW1lcyB0aGF0IChhKSBrZXl3b3JkcyBhcmUgaW4gYWxw aGFiZXRpY2FsIG9yZGVyLAotICBhbmQgKGIpIHRoZSBDTV9BQlIgYml0IGlzIHNldCBvbmx5IGlm IHRoZSB0aGUgYWJicmV2aWF0ZWQga2V5d29yZCBpcyBhIHRydWUKLSAgYWJicmV2aWF0aW9uIChs ZWZ0IHN1YnN0cmluZykgb2YgdGhlIGZ1bGwga2V5d29yZC4KLSovCi0JICAgIGlmICh0ZXN0KHRh YmxlW3pdLmZsZ3MsQ01fQUJSKSkgewotCQlpbnQgeno7Ci0JCWZvciAoenogPSB6KzE7IHp6IDwg bjsgenorKykKLQkJICBpZiAoKHRhYmxlW3p6XS5rd3ZhbCA9PSB0YWJsZVt6XS5rd3ZhbCkgJiYK LQkJICAgICAgKCF0ZXN0KHRhYmxlW3p6XS5mbGdzLENNX0FCUikpICYmCi0JCSAgICAgICghdGVz dCh0YWJsZVt6el0uZmxncyxDTV9JTlYpKSkgewotCQkgICAgICB6ID0geno7Ci0JCSAgICAgIGJy ZWFrOwotCQkgIH0KLQkgICAgfQotCSAgICB4cCA9IHRhYmxlW3pdLmt3ZCArIGNjOwotCSAgICBp ZiAoY21zd2l0Y2ggJiYgdGVzdCh0YWJsZVt6XS5mbGdzLENNX0FSRykpIHsKLSNpZmRlZiBWTVMK LQkJcHJpbnRmKCIlcz0iLHhwKTsKLQkJYnJrY2hhciA9ICc9JzsKLSNlbHNlCi0JCXByaW50Zigi JXM6Iix4cCk7Ci0JCWJya2NoYXIgPSAnOic7Ci0jZW5kaWYgLyogVk1TICovCi0JICAgIH0gZWxz ZSB7Ci0JCXByaW50ZigiJXMgIix4cCk7Ci0JCWJya2NoYXIgPSBTUDsKLQkgICAgfQotI2lmZGVm IENLX1JFQ0FMTAotCSAgICBpZiAodGVzdCh0YWJsZVt6XS5mbGdzLENNX05PUikpIG5vX3JlY2Fs bCA9IDE7Ci0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0JICAgIGNta3dmbGdzID0gdGFibGVbel0u ZmxnczsKLSNpZmRlZiBHRU1ET1MKLQkgICAgZmZsdXNoKHN0ZG91dCk7Ci0jZW5kaWYgLyogR0VN RE9TICovCi0JICAgIGFkZGJ1Zih4cCk7Ci0JICAgIGlmIChjbXN3aXRjaCAmJiB0ZXN0KHRhYmxl W3pdLmZsZ3MsQ01fQVJHKSkgewotCQlicC0tOwkJCS8qIFJlcGxhY2UgdHJhaWxpbmcgc3BhY2Ug d2l0aCA6ICovCi0jaWZkZWYgVk1TCi0JCSpicCsrID0gJz0nOwotI2Vsc2UKLQkJKmJwKysgPSAn Oic7Ci0jZW5kaWYgLyogVk1TICovCi0JCSpicCA9IE5VTDsKLQkJbnAgPSBicDsKLQkJc3dhcmcg PSAxOwotCSAgICB9Ci0JICAgIGlud29yZCA9IDA7Ci0JICAgIGNtZmxncyA9IDA7Ci0JICAgIGRl YnVnKEYxMTAsImNta2V5OiBhZGRidWYiLGNtZGJ1ZiwwKTsKLQkgICAgcmV0dXJuKHkpOwotCi0J ICBjYXNlIDM6CQkJLyogVXNlciB0eXBlZCAiPyIgKi8KLQkgICAgaWYgKGYpIHsJCQkvKiBJZiBh IGNvbnZlcnNpb24gZnVuY3Rpb24gaXMgZ2l2ZW4gKi8KLQkJY2hhciAqIHBwOwotCQl6cSA9IGF0 eGJ1ZjsJCS8qIGRvIHRoZSBjb252ZXJzaW9uIG5vdy4gKi8KLQkJcHAgPSBhdHhidWY7Ci0JCWF0 eG4gPSBDTURCTDsKLQkJaWYgKCgqZikoYXRtYnVmLCZ6cSwmYXR4bikgPCAwKSByZXR1cm4oLTIp OwotCQlpZiAoc2V0YXRtKHBwLDApIDwgMCkgewotCQkgICAgcHJpbnRmKCI/RXZhbHVhdGVkIGtl eXdvcmQgdG9vIGxvbmdcbiIpOwotCQkgICAgcmV0dXJuKC05KTsKLQkJfQotCSAgICB9Ci0JICAg IHkgPSBsb29rdXAodGFibGUsYXRtYnVmLG4sJnopOyAvKiBMb29rIHVwIHdoYXQgd2UgaGF2ZSBz byBmYXIuICovCi0JICAgIGlmICh5ID09IC0xKSB7Ci0JCS8qCi0JCSAgU3RyaWN0bHkgc3BlYWtp bmcgaWYgdGhlIG1haW4ga2V5d29yZCB0YWJsZSBzZWFyY2ggZmFpbHMsCi0JCSAgdGhlbiB3ZSBz aG91bGQgbG9vayBpbiB0aGUgdG9rZW4gdGFibGUgaWYgb25lIGlzIGdpdmVuLgotCQkgIEJ1dCBp biBwcmFjdGljZSwgdG9rZW5zIGFyZSBhbHNvIGluY2x1ZGVkIGluIHRoZSBtYWluCi0JCSAga2V5 d29yZCB0YWJsZS4KLQkJKi8KLQkJY21mbGdzID0gLTI7Ci0JCWlmICgocG1zZyAmIDEpICYmICFx dWlldCkgewotCQkgICAgYmxlZXAoQlBfRkFJTCk7Ci0JCSAgICBwcmludGYoIiBObyBrZXl3b3Jk cyBtYXRjaFxuIik7Ci0JCSAgICByZXR1cm4oLTkpOwotCQl9Ci0JCXJldHVybigtMik7Ci0JICAg IH0KLSNpZm5kZWYgQ09NTUVOVAotCSAgICAvKiBUaGlzIGlzIHRvIGFsbG93ID8taGVscCB0byB3 b3JrIGltbWVkaWF0ZWx5IGFmdGVyIGEgdG9rZW4gKi8KLQkgICAgLyogd2l0aG91dCBoYXZpbmcg dG8gdHlwZSBhbiBpbnRlcm1lZGlhdGUgc3BhY2UgKi8KLQkgICAgaWYgKHRsKSB7Ci0JCWZvciAo aSA9IDA7IGkgPCB0bDsgaSsrKSAvKiBDaGVjayBmb3IgdG9rZW4gKi8KLQkJICBpZiAodG9rW2ld ID09ICphdG1idWYpIHsgLyogR290IG9uZSAqLwotCQkgICAgICBkZWJ1ZyhGMDAwLCJjbWtleSB0 b2tlbjoiLGF0bWJ1ZiwqYXRtYnVmKTsKLQkJICAgICAgdW5nd29yZCgpOwkvKiBQdXQgYmFjayB0 aGUgZm9sbG93aW5nIHdvcmQgKi8KLQkJICAgICAgY21mbGdzID0gMzsJLyogRm9yY2UgaGVscCBu ZXh0IHRpbWUgYXJvdW5kICovCi0JCSAgICAgIHJldHVybigtNSk7CS8qIFNwZWNpYWwgcmV0dXJu IGNvZGUgZm9yIHRva2VuICovCi0JCSAgfQotCSAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwot Ci0JICAgIGlmICgqeGhscCA9PSBOVUwpCi0JICAgICAgcHJpbnRmKCIgT25lIG9mIHRoZSBmb2xs b3dpbmc6XG4iKTsKLQkgICAgZWxzZQotCSAgICAgIHByaW50ZigiICVzLCBvbmUgb2YgdGhlIGZv bGxvd2luZzpcbiIseGhscCk7Ci0JICAgIHsKLQkJaW50IHg7Ci0JCXggPSBwbXNnICYgKDJ8NCk7 CS8qIFNlZSBrd2RoZWxwKCkgY29tbWVudHMgKi8KLQkJaWYgKGF0bWJ1ZlswXSkJCS8qIElmIG5v dCBhdCBiZWdpbm5pbmcgb2YgZmllbGQgKi8KLQkJICB4IHw9IDE7CQkvKiBhbHNvIHNob3cgaW52 aXNpYmxlcyAqLwotCQlrd2RoZWxwKHRhYmxlLG4sYXRtYnVmLCIiLCIiLDEseCk7Ci0JICAgIH0K LSNpZm5kZWYgTk9TUEwKLQkgICAgaWYgKCFoYXZldG9rZW4pIHsKLQkJZXh0ZXJuIGludCB0b3Bj bWQ7Ci0JCWlmICh0bCA+IDAgJiYgdG9wY21kICE9IFhYSExQKSAvKiBUaGlzIGlzIGJhZC4uLiAq LwotCQkgIHByaW50Zigib3IgYSBtYWNybyBuYW1lIChcImRvID9cIiBmb3IgYSBsaXN0KSAiKTsK LQkgICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0JICAgIGlmICgqYXRtYnVmID09IE5VTCAmJiAh aGF2ZXRva2VuKSB7Ci0JCWlmICh0bCA9PSAxKQotCQkgIHByaW50Zigib3IgdGhlIHRva2VuICVj XG4iLCp0b2spOwotCQllbHNlIGlmICh0bCA+IDEpCi0JCSAgcHJpbnRmKCJvciBvbmUgb2YgdGhl IHRva2VuczogJXNcbiIsY2tzcHJlYWQodG9rKSk7Ci0JICAgIH0KLQkgICAgcHJpbnRmKCIlcyVz IiwgY21wcm9tLCBjbWRidWYpOwotCSAgICBmZmx1c2goc3Rkb3V0KTsKLQkgICAgYnJlYWs7Ci0K LQkgIGRlZmF1bHQ6Ci0JICAgIHByaW50ZigiXG4lZCAtIFVuZXhwZWN0ZWQgcmV0dXJuIGNvZGUg ZnJvbSBndHdvcmRcbiIsenopOwotCSAgICByZXR1cm4oY21mbGdzID0gLTIpOwotCX0KLQl6eiA9 IChwbXNnICYgOCkgPyBndHdvcmQoNCkgOiBndHdvcmQoKHBtc2cgPT0gNCkgPyAxIDogMCk7Ci0J ZGVidWcoRjExMSwiY21rZXkgZ3R3b3JkIHp6IixhdG1idWYsenopOwotICAgIH0KLX0KLQotaW50 Ci1jaGt0b2sodGxpc3QpIGNoYXIgKnRsaXN0OyB7Ci0gICAgY2hhciAqcDsKLSAgICBwID0gdGxp c3Q7Ci0gICAgd2hpbGUgKCpwICE9IE5VTCAmJiAqcCAhPSAqYXRtYnVmKSBwKys7Ci0gICAgcmV0 dXJuKCgqcCkgPyAoaW50KSAqcCA6IDApOwotfQotCi0vKiBSb3V0aW5lcyBmb3IgcGFyc2luZyBh bmQgY29udmVydGluZyBkYXRlcyBhbmQgdGltZXMgKi8KLQotI2RlZmluZSBpc2RhdGVzZXAoYykg KGNrc3RyY2hyKCIgLS8uXyIsYykpCi0KLSNkZWZpbmUgQ01EQVRFQlVGIDEwMjQKLWNoYXIgY21k YXRlYnVmW0NNREFURUJVRis0XSA9IHsgTlVMLCBOVUwgfTsKLXN0YXRpYyBjaGFyICogY21kYXRl YnAgPSBjbWRhdGVidWY7Ci1jaGFyICogY21kYXRlbXNnID0gTlVMTDsKLQotc3RhdGljIHN0cnVj dCBrZXl0YWIgdGltZXVuaXRzW10gPSB7Ci0gICAgeyAiZGF5cyIsICAgVFVfREFZUywgICAwIH0s Ci0gICAgeyAibW9udGhzIiwgVFVfTU9OVEhTLCAwIH0sCi0gICAgeyAid2Vla3MiLCAgVFVfV0VF S1MsICAwIH0sCi0gICAgeyAid2tzIiwgICAgVFVfV0VFS1MsICAwIH0sCi0gICAgeyAieWVhcnMi LCAgVFVfWUVBUlMsICAwIH0sCi0gICAgeyAieXJzIiwgICAgVFVfWUVBUlMsICAwIH0KLX07Ci1z dGF0aWMgaW50IG51bml0cyA9IChzaXplb2YodGltZXVuaXRzKSAvIHNpemVvZihzdHJ1Y3Qga2V5 dGFiKSk7Ci0KLSNkZWZpbmUgU1lNX05PVyAgMAotI2RlZmluZSBTWU1fVE9EQSAxCi0jZGVmaW5l IFNZTV9UT01PIDIKLSNkZWZpbmUgU1lNX1lFU1QgMwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBz eW1kYXl0YWJbXSA9IHsKLSAgICB7ICJub3ciLCAgICAgICBTWU1fTk9XLCAgMCB9LAotICAgIHsg InRvZGF5IiwgICAgIFNZTV9UT0RBLCAwIH0sCi0gICAgeyAidG9tb3Jyb3ciLCAgU1lNX1RPTU8s IDAgfSwKLSAgICB7ICJ5ZXN0ZXJkYXkiLCBTWU1fWUVTVCwgMCB9Ci19Owotc3RhdGljIGludCBu c3ltZGF5cyA9IChzaXplb2Yoc3ltZGF5dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0K LXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGRheXNvZndlZWtbXSA9IHsKLSAgICB7ICJGcmlkYXkiLCAg ICA1LCAwIH0sCi0gICAgeyAiTW9uZGF5IiwgICAgMSwgMCB9LAotICAgIHsgIlNhdHVyZGF5Iiwg IDYsIDAgfSwKLSAgICB7ICJTdW5kYXkiLCAgICAwLCAwIH0sCi0gICAgeyAiVGh1cnNkYXkiLCAg NCwgMCB9LAotICAgIHsgIlR1ZXNkYXkiLCAgIDIsIDAgfSwKLSAgICB7ICJXZWRuZXNkYXkiLCAz LCAwIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHVzYXR6W10gPSB7CS8qIFJGQyA4MjIg dGltZXpvbmVzICAqLwotICAgIHsgImNkdCIsICA1LCAwIH0sCQkJLyogVmFsdWVzIGFyZSBHTVQg b2Zmc2V0cyAqLwotICAgIHsgImNzdCIsICA2LCAwIH0sCi0gICAgeyAiZWR0IiwgIDQsIDAgfSwK LSAgICB7ICJlc3QiLCAgNSwgMCB9LAotICAgIHsgImdtdCIsICAwLCAwIH0sCi0gICAgeyAibWR0 IiwgIDYsIDAgfSwKLSAgICB7ICJtc3QiLCAgNywgMCB9LAotICAgIHsgInBkdCIsICA3LCAwIH0s Ci0gICAgeyAicHN0IiwgIDgsIDAgfSwKLSAgICB7ICJ1dGMiLCAgMCwgMCB9LAotICAgIHsgInp1 bHUiLCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IG51c2F0eiA9IChzaXplb2YodXNhdHopIC8gc2l6 ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotCi0vKiAgQyBNIEMgViBUIEQgQSBUIEUgIC0tICBDb252 ZXJ0cyBmcmVlLWZvcm0gZGF0ZSB0byBzdGFuZGFyZCBmb3JtLiAgKi8KLQotLyoKLSAgIENhbGwg d2l0aAotICAgICBzID0gcG9pbnRlciB0byBmcmVlLWZvcm1hdCBkYXRlLCB0aW1lLCBvciBkYXRl IGFuZCB0aW1lLgotICAgICB0ID0gMDogcmV0dXJuIHRpbWUgb25seSBpZiB0aW1lIHdhcyBnaXZl biBpbiBzLgotICAgICB0ID0gMTogYWx3YXlzIHJldHVybiB0aW1lICgwMDowMDowMCBpZiBubyB0 aW1lIGdpdmVuIGluIHMpLgotICAgICB0ID0gMjogYWxsb3cgdGltZSB0byBiZSA+IDI0OjAwOjAw LgotICAgUmV0dXJuczoKLSAgICAgTlVMTCBvbiBmYWlsdXJlOwotICAgICBQb2ludGVyIHRvICJ5 eXl5bW1kZCBoaDptbTpzcyIgKGxvY2FsIGRhdGUtdGltZSkgb24gc3VjY2Vzcy4KLSovCi0KLS8q Ci0gIEJlZm9yZSBmaW5hbCByZWxlYXNlIHRoZSBmb2xsb3dpbmcgbG9uZyBsaW5lcyBzaG91bGQg YmUgd3JhcHBlZC4KLSAgVW50aWwgdGhlbiB3ZSBsZWF2ZSB0aGVtIGxvbmcgc2luY2Ugd3JhcHBp bmcgdGhlbSB3cmVja3MgRU1BQ1MncwotICBDIGluZGVudGF0aW9uLgotKi8KLQotLyogYXNjdGlt ZSBwYXR0ZXJuICovCi1zdGF0aWMgY2hhciAqIGF0cDEgPSAiW0EtWl1bYS16XVthLXpdIFtBLVpd W2Etel1bYS16XSBbIDAtOV1bMC05XSBbMC05XVswLTldOlswLTldWzAtOV06WzAtOV1bMC05XSBb MC05XVswLTldWzAtOV1bMC05XSI7Ci0KLS8qIGFzY3RpbWUgcGF0dGVybiB3aXRoIHRpbWV6b25l ICovCi1zdGF0aWMgY2hhciAqIGF0cDIgPSAiW0EtWl1bYS16XVthLXpdIFtBLVpdW2Etel1bYS16 XSBbIDAtOV1bMC05XSBbMC05XVswLTldOlswLTldWzAtOV06WzAtOV1bMC05XSBbQS1aXVtBLVpd W0EtWl0gWzAtOV1bMC05XVswLTldWzAtOV0iOwotCi0jZGVmaW5lIERBVEVCVUZMRU4gMTI3Ci0j ZGVmaW5lIFlZWVlNTUREIDEyCi0KLSNkZWZpbmUgaXNsZWFwKHkpICgoKHkpICUgNCA9PSAwICYm ICh5KSAlIDEwMCAhPSAwKSB8fCAoeSkgJSA0MDAgPT0gMCkKLXN0YXRpYyBpbnQgbWRheXNbMTNd ID0geyAwLCAzMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxIH07 Ci0KLSNkZWZpbmUgTkVFRF9EQVlTIDEKLSNkZWZpbmUgTkVFRF9IUlMgIDIKLSNkZWZpbmUgTkVF RF9NSU5TIDMKLSNkZWZpbmUgTkVFRF9TRUNTIDQKLSNkZWZpbmUgTkVFRF9GUkFDIDUKLQotI2Rl ZmluZSBERUxUQUJVRiAyNTYKLXN0YXRpYyBjaGFyIGRlbHRhYnVmW0RFTFRBQlVGXTsKLXN0YXRp YyBjaGFyICogZGVsdGFicCA9IGRlbHRhYnVmOwotCi1jaGFyICoKLWNtZGVsdGEoeXksIG1vLCBk ZCwgaGgsIG1tLCBzcywgc2lnbiwgZHl5LCBkbW8sIGRkZCwgZGhoLCBkbW0sIGRzcykKLSAgICBp bnQgeXksIG1vLCBkZCwgaGgsIG1tLCBzcywgc2lnbiwgZHl5LCBkbW8sIGRkZCwgZGhoLCBkbW0s IGRzczsKLS8qIGNtZGVsdGEgKi8gewotICAgIGludCB6eXksIHptbywgemRkLCB6aGgsIHptbSwg enNzOwotICAgIGxvbmcgdDEsIHQyLCB0MywgdDQ7Ci0gICAgbG9uZyBkMSA9IDAsIGQyLCBkMzsK LSAgICBjaGFyIGRhdGVidWZbREFURUJVRkxFTisxXTsKLQotI2lmZGVmIERFQlVHCi0gICAgaWYg KGRlYmxvZykgewotCWRlYnVnKEYxMDEsImNtZGVsdGEgeXkiLCIiLHl5KTsKLQlkZWJ1ZyhGMTAx LCJjbWRlbHRhIG1vIiwiIixtbyk7Ci0JZGVidWcoRjEwMSwiY21kZWx0YSBkZCIsIiIsZGQpOwot CWRlYnVnKEYxMDEsImNtZGVsdGEgaGgiLCIiLGhoKTsKLQlkZWJ1ZyhGMTAxLCJjbWRlbHRhIG1t IiwiIixtbSk7Ci0JZGVidWcoRjEwMSwiY21kZWx0YSBzcyIsIiIsc3MpOwotCWRlYnVnKEYxMDEs ImNtZGVsdGEgc2lnbiIsIiIsc2lnbik7Ci0JZGVidWcoRjEwMSwiY21kZWx0YSBkeXkiLCIiLGR5 eSk7Ci0JZGVidWcoRjEwMSwiY21kZWx0YSBkbW8iLCIiLGRtbyk7Ci0JZGVidWcoRjEwMSwiY21k ZWx0YSBkZGQiLCIiLGRkZCk7Ci0JZGVidWcoRjEwMSwiY21kZWx0YSBkaGgiLCIiLGRoaCk7Ci0J ZGVidWcoRjEwMSwiY21kZWx0YSBkbW0iLCIiLGRtbSk7Ci0JZGVidWcoRjEwMSwiY21kZWx0YSBk c3MiLCIiLGRzcyk7Ci0gICAgfQotI2VuZGlmIC8qIERFQkxPRyAqLwotCi0gICAgaWYgKHl5IDwg MCB8fCB5eSA+IDk5OTkpIHsKLQltYWtlc3RyKCZjbWRhdGVtc2csIkJhc2UgeWVhciBvdXQgb2Yg cmFuZ2UiKTsKLQlkZWJ1ZyhGMTExLCJjbWRlbHRhIixjbWRhdGVtc2csLTEpOwotCXJldHVybihO VUxMKTsKLSAgICB9Ci0gICAgaWYgKG1vIDwgMSB8fCBtbyA+IDEyKSB7Ci0JbWFrZXN0cigmY21k YXRlbXNnLCJCYXNlIG1vbnRoIG91dCBvZiByYW5nZSIpOwotCWRlYnVnKEYxMTEsImNtZGVsdGEi LGNtZGF0ZW1zZywtMSk7Ci0JcmV0dXJuKE5VTEwpOwotICAgIH0KLSAgICBpZiAoZGQgPCAxIHx8 IGRkID4gbWRheXNbbW9dKSB7Ci0JbWFrZXN0cigmY21kYXRlbXNnLCJCYXNlIGRheSBvdXQgb2Yg cmFuZ2UiKTsKLQlkZWJ1ZyhGMTExLCJjbWRlbHRhIixjbWRhdGVtc2csLTEpOwotCXJldHVybihO VUxMKTsKLSAgICB9Ci0gICAgaWYgKGhoIDwgMCB8fCBoaCA+IDIzKSB7Ci0JbWFrZXN0cigmY21k YXRlbXNnLCJCYXNlIGhvdXIgb3V0IG9mIHJhbmdlIik7Ci0JZGVidWcoRjExMSwiY21kZWx0YSIs Y21kYXRlbXNnLC0xKTsKLQlyZXR1cm4oTlVMTCk7Ci0gICAgfQotICAgIGlmIChtbSA8IDAgfHwg bW0gPiA1OSkgewotCW1ha2VzdHIoJmNtZGF0ZW1zZywiQmFzZSBtaW51dGUgb3V0IG9mIHJhbmdl Iik7Ci0JZGVidWcoRjExMSwiY21kZWx0YSIsY21kYXRlbXNnLC0xKTsKLQlyZXR1cm4oTlVMTCk7 Ci0gICAgfQotICAgIGlmIChzcyA8IDAgfHwgc3MgPiA2MCkgewotCW1ha2VzdHIoJmNtZGF0ZW1z ZywiQmFzZSBzZWNvbmQgb3V0IG9mIHJhbmdlIik7Ci0JZGVidWcoRjExMSwiY21kZWx0YSIsY21k YXRlbXNnLC0xKTsKLQlyZXR1cm4oTlVMTCk7Ci0gICAgfQotICAgIHNpZ24gPSAoc2lnbiA8IDAp ID8gLTEgOiAxOwotICAgIGlmIChkbW8gIT0gMCkgewotICAgICAgICBpZiAoc2lnbiA+IDApIHsK LSAgICAgICAgICAgIG1vICs9IChzaWduICogZG1vKTsKLSAgICAgICAgICAgIGlmIChtbyA+IDEy KSB7Ci0gICAgICAgICAgICAgICAgeXkgKz0gbW8gLyAxMjsKLSAgICAgICAgICAgICAgICBtbyA9 IG1vICUgMTI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoc2lnbiA8IDApIHsK LSAgICAgICAgICAgIHdoaWxlIChkbW8gPiAxMikgewotICAgICAgICAgICAgICAgIHl5LS07Ci0g ICAgICAgICAgICAgICAgZG1vIC09IDEyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg KGRtbyA8IG1vKSB7Ci0gICAgICAgICAgICAgICAgbW8gLT0gZG1vOwotICAgICAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgICAgICB5eS0tOwotICAgICAgICAgICAgICAgIG1vID0gMTIgLSAo ZG1vIC0gbW8pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChkeXkg IT0gMCkgewotCXl5ICs9IChzaWduICogZHl5KTsKLQlpZiAoeXkgPiA5OTk5IHx8IHl5IDwgMCkg ewotCSAgICBtYWtlc3RyKCZjbWRhdGVtc2csIlJlc3VsdCB5ZWFyIG91dCBvZiByYW5nZSIpOwot CSAgICBkZWJ1ZyhGMTExLCJjbWRlbHRhIixjbWRhdGVtc2csLTEpOwotCSAgICByZXR1cm4oTlVM TCk7Ci0JfQotICAgIH0KLSAgICBzcHJpbnRmKGRhdGVidWYsIiUwNGQlMDJkJTAyZCAlMDJkOiUw MmQ6JTAyZCIseXksbW8sZGQsaGgsbW0sc3MpOwotICAgIGQxID0gbWpkKGRhdGVidWYpOwotICAg IGRlYnVnKEYxMTEsImNtZGVsdGEgbWpkIixkYXRlYnVmLGQxKTsgICAgCi0KLSAgICB0MSA9IGho ICogMzYwMCArIG1tICogNjAgKyBzczsJLyogQmFzZSB0aW1lIHRvIHNlY3Mgc2luY2UgbWlkbmln aHQgKi8KLSAgICB0MiA9IGRoaCAqIDM2MDAgKyBkbW0gKiA2MCArIGRzczsJLyogRGVsdGEgdGlt ZSwgZGl0dG8gKi8KLSAgICB0MyA9IHQxICsgKHNpZ24gKiB0Mik7CQkvKiBHZXQgc3VtIChvciBk aWZmZXJlbmNlKSAqLwotICAgIAotICAgIGQyID0gKHNpZ24gKiBkZGQpOwkJCS8qIERlbHRhIGRh eXMgKi8KLSAgICBkMiArPSB0MyAvIDg2NDAwTDsKLQotICAgIHQ0ID0gdDMgJSA4NjQwMEw7CQkJ LyogRnJhY3Rpb25hbCBwYXJ0IG9mIGRheSAqLwotICAgIGlmICh0NCA8IDApIHsJCQkvKiBJZiBu ZWdhdGl2ZSAqLwotCWQyLS07CQkJCS8qIG9uZSBsZXNzIGRlbHRhIGRheSAqLwotCXQ0ICs9IDg2 NDAwTDsJCQkvKiBnZXQgcG9zaXRpdmUgc2Vjb25kcyAqLwotICAgIH0KLSAgICBoaCA9IChpbnQp ICh0NCAvIDM2MDBMKTsKLSAgICBtbSA9IChpbnQpICh0NCAlIDM2MDBMKSAvIDYwOwotICAgIHNz ID0gKGludCkgKHQ0ICUgMzYwMEwpICUgNjA7Ci0KLSAgICBzcHJpbnRmKGRhdGVidWYsIiVzICUw MmQ6JTAyZDolMDJkIiwgbWpkMmRhdGUoZDErZDIpLGhoLG1tLHNzKTsKLSAgICB7Ci0JaW50IGxl biwgaywgbjsKLQljaGFyICogcDsKLQlsZW4gPSBzdHJsZW4oZGF0ZWJ1Zik7Ci0JayA9IGRlbHRh YnAgLSAoY2hhciAqKWRlbHRhYnVmOwkvKiBTcGFjZSB1c2VkICovCi0JbiA9IERFTFRBQlVGIC0g ayAtIDE7CQkvKiBTcGFjZSBsZWZ0ICovCi0JaWYgKG4gPCBsZW4pIHsJCQkvKiBOb3QgZW5vdWdo PyAqLwotCSAgICBkZWx0YWJwID0gZGVsdGFidWY7CQkvKiBXcmFwIGFyb3VuZCAqLwotCSAgICBu ID0gREVMVEFCVUY7Ci0JfQotCWNrc3RybmNweShkZWx0YWJwLGRhdGVidWYsbik7Ci0JcCA9IGRl bHRhYnA7Ci0JZGVsdGFicCArPSBsZW4gKyAxOwotCXJldHVybihwKTsKLSAgICB9Ci19Ci0KLQot LyogQ29udmVydCBEZWx0YSBUaW1lIHRvIFNlY29uZHMgKi8KLQotaW50Ci1kZWx0YTJzZWMocyxy ZXN1bHQpIGNoYXIgKiBzOyBsb25nICogcmVzdWx0OyB7Ci0gICAgbG9uZyBkZGF5cyA9IDBMLCB6 ejsKLSAgICBpbnQgZHNpZ24gPSAxLCBkaG91cnMgPSAwLCBkbWlucyA9IDAsIGRzZWNzID0gMCwg dW5pdHM7Ci0gICAgaW50IHN0YXRlID0gTkVFRF9EQVlTOwotICAgIGNoYXIgKnAsICpwMiwgKnAz LCBjID0gMDsKLSAgICBjaGFyIGJ1Zls2NF07Ci0KLSAgICBpZiAoIXMpIHMgPSAiIjsKLSAgICBp ZiAoISpzKQotICAgICAgcmV0dXJuKC0xKTsKLSAgICBpZiAoKGludClzdHJsZW4ocykgPiA2MykK LSAgICAgIHJldHVybigtMSk7Ci0gICAgY2tzdHJuY3B5KGJ1ZixzLDY0KTsKLSAgICBwID0gYnVm OwotCi0gICAgaWYgKCpwICE9ICcrJyAmJiAqcCAhPSAnLScpCi0gICAgICByZXR1cm4oLTEpOwot Ci0gICAgaWYgKCpwKysgPT0gJy0nKQotICAgICAgZHNpZ24gPSAtMTsKLSAgICB3aGlsZSAoKnAg PT0gU1ApCQkJLyogU2tpcCBpbnRlcnZlbmluZyBzcGFjZXMgKi8KLSAgICAgIHArKzsKLQotICAg IHdoaWxlIChzdGF0ZSkgewkJCS8qIEZTQSB0byBwYXJzZSBkZWx0YSB0aW1lICovCi0JaWYgKHN0 YXRlIDwgMCB8fCAhaXNkaWdpdCgqcCkpCi0JICByZXR1cm4oLTEpOwotCXAyID0gcDsJCQkJLyog R2V0IG5leHQgbnVtZXJpYyBmaWVsZCAqLwotCXdoaWxlIChpc2RpZ2l0KCpwMikpCi0JICBwMisr OwotCWMgPSAqcDI7CQkJLyogQW5kIGJyZWFrIGNoYXJhY3RlciAqLwotCSpwMiA9IE5VTDsJCQkv KiBUZXJtaW5hdGUgdGhlIG51bWJlciAqLwotCXN3aXRjaCAoc3RhdGUpIHsJCS8qIEludGVycHJl dCBhY2NvcmRpbmcgdG8gc3RhdGUgKi8KLQkgIGNhc2UgTkVFRF9EQVlTOgkJLyogSW5pdGlhbCAq LwotCSAgICBpZiAoKGMgPT0gJy0nKSB8fAkJLyogVk1TIGZvcm1hdCAqLwotCQkoKGMgPT0gJ2Qn IHx8IGMgPT0gJ0QnKQotCQkgJiYgIWlzYWxwaGEoKihwMisxKSkpKSB7IC8qIERheXMgKi8KLQkJ ZGRheXMgPSBhdG9sKHApOwotCQlpZiAoISoocDIrMSkpCQkJCi0JCSAgc3RhdGUgPSAwOwotCQll bHNlCQkJLyogaWYgYW55dGhpbmcgaXMgbGVmdCAqLwotCQkgIHN0YXRlID0gTkVFRF9IUlM7CS8q IG5vdyB3ZSB3YW50IGhvdXJzLiAqLwotCSAgICB9IGVsc2UgaWYgKGMgPT0gJzonKSB7CS8qIGRl bGltaXRlciBpcyBjb2xvbiAqLwotCQlkaG91cnMgPSBhdG9pKHApOwkvKiBzbyBpdCdzIGhvdXJz ICovCi0JCXN0YXRlID0gTkVFRF9NSU5TOwkvKiBub3cgd2Ugd2FudCBtaW51dGVzICovCi0JICAg IH0gZWxzZSBpZiAoIWMpIHsJCS8qIGVuZCBvZiBzdHJpbmcgKi8KLQkJZGhvdXJzID0gYXRvaShw KTsJLyogaXQncyBzdGlsbCBob3VycyAqLwotCQlzdGF0ZSA9IDA7CQkvKiBhbmQgd2UncmUgZG9u ZSAqLwotCSAgICB9IGVsc2UgaWYgKGlzYWxwaGEoYykgfHwgYyA9PSBTUCkgewotCQlpZiAoYyA9 PSBTUCkgewkJLyogSXQncyBhIGtleXdvcmQ/ICovCi0JCSAgICBwMisrOwkJLyogU2tpcCBzcGFj ZXMgKi8KLQkJICAgIHdoaWxlICgqcDIgPT0gU1ApCi0JCSAgICAgIHAyKys7Ci0JCX0gZWxzZSB7 CQkvKiBvciByZXBsYWNlIGZpcnN0IGxldHRlciAqLwotCQkgICAgKnAyID0gYzsKLQkJfQotCQlw MyA9IHAyOwkJLyogcDIgcG9pbnRzIHRvIGJlZ2lubmluZyBvZiBrZXl3b3JkICovCi0JCXdoaWxl IChpc2FscGhhKCpwMykpCS8qIEZpbmQgZW5kIG9mIGtleXdvcmQgKi8KLQkJICBwMysrOwotCQlj ID0gKnAzOwkJLyogTlVMIGl0IG91dCBzbyB3ZSBjYW4gbG9vayBpdCB1cCAqLwotCQlpZiAoKnAz KQkJLyogcDMgcG9pbnRzIHRvIGtleXdvcmQgdGVybWluYXRvciAqLwotCQkgICpwMyA9IE5VTDsK LQkJaWYgKCh1bml0cyA9IGxvb2t1cCh0aW1ldW5pdHMscDIsbnVuaXRzLE5VTEwpKSA8IDApCi0J CSAgcmV0dXJuKC0xKTsKLQkJKnAyID0gTlVMOwkJLyogUmUtdGVybWluYXRlIHRoZSBudW1iZXIg Ki8KLQkJKnAzID0gYzsKLQkJd2hpbGUgKCpwMyA9PSBTUCkJLyogUG9pbnQgYXQgZmllbGQgYWZ0 ZXIgdW5pdHMgKi8KLQkJICBwMysrOwotCQlwMiA9IHAzOwotCQlzd2l0Y2ggKHVuaXRzKSB7Ci0J CSAgY2FzZSBUVV9EQVlTOgotCQkgICAgZGRheXMgPSBhdG9sKHApOwotCQkgICAgYnJlYWs7Ci0J CSAgZGVmYXVsdDoKLQkJICAgIHJldHVybigtMSk7Ci0JCX0KLQkJaWYgKCpwMikgewotCQkgICAg c3RhdGUgPSBORUVEX0hSUzsKLQkJICAgIHAyLS07Ci0JCX0gZWxzZQotCQkgIHN0YXRlID0gMDsK LQkgICAgfSBlbHNlIHsJCQkvKiBBbnl0aGluZyBlbHNlICovCi0JCXN0YXRlID0gLTE7CQkvKiBp cyBhbiBlcnJvciAqLwotCSAgICB9Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBORUVEX0hSUzoJCS8q IExvb2tpbmcgZm9yIGhvdXJzICovCi0JICAgIGlmIChjID09ICc6JykgewotCQlkaG91cnMgPSBh dG9pKHApOwotCQlzdGF0ZSA9IE5FRURfTUlOUzsKLQkgICAgfSBlbHNlIGlmICghYykgewotCQlk aG91cnMgPSBhdG9pKHApOwotCQlzdGF0ZSA9IDA7Ci0JICAgIH0gZWxzZSB7Ci0JCXN0YXRlID0g LTE7Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0JICBjYXNlIE5FRURfTUlOUzoJCS8qIExvb2tpbmcg Zm9yIG1pbnV0ZXMgKi8KLQkgICAgaWYgKGMgPT0gJzonKSB7Ci0JCWRtaW5zID0gYXRvaShwKTsK LQkJc3RhdGUgPSBORUVEX1NFQ1M7Ci0JICAgIH0gZWxzZSBpZiAoIWMpIHsKLQkJZG1pbnMgPSBh dG9pKHApOwotCQlzdGF0ZSA9IDA7Ci0JICAgIH0gZWxzZSB7Ci0JCXN0YXRlID0gLTE7Ci0JICAg IH0KLQkgICAgYnJlYWs7Ci0JICBjYXNlIE5FRURfU0VDUzoJCS8qIExvb2tpbmcgZm9yIHNlY29u ZHMgKi8KLQkgICAgaWYgKGMgPT0gJy4nKSB7Ci0JCWRzZWNzID0gYXRvaShwKTsKLQkJc3RhdGUg PSBORUVEX0ZSQUM7Ci0JICAgIH0gZWxzZSBpZiAoIWMpIHsKLQkJZHNlY3MgPSBhdG9pKHApOwot CQlzdGF0ZSA9IDA7Ci0JICAgIH0gZWxzZSB7Ci0JCXN0YXRlID0gLTE7Ci0JICAgIH0KLQkgICAg YnJlYWs7Ci0JICBjYXNlIE5FRURfRlJBQzoJCS8qIEZyYWN0aW9uIG9mIHNlY29uZCAqLwotCSAg ICBpZiAoIWMgJiYgcmRpZ2l0cyhwKSkgewotCQlpZiAoKnAgPiAnNCcpCi0JCSAgZHNlY3MrKzsK LQkJc3RhdGUgPSAwOwotCSAgICB9IGVsc2UgewotCQlzdGF0ZSA9IC0xOwotCSAgICB9Ci0JICAg IGJyZWFrOwotCX0KLQlpZiAoYykJCQkJLyogbmV4dCBmaWVsZCBpZiBhbnkgKi8KLQkgIHAgPSBw MiArIDE7Ci0gICAgfQotICAgIGlmIChzdGF0ZSA8IDApCi0gICAgICByZXR1cm4oLTEpOwotCi0g ICAgLyogaWYgZGF5cyA+IDI0ODU0IGFuZCBzaXplb2YobG9uZykgPT0gMzIgd2Ugb3ZlcmZsb3cg Ki8KLQotICAgIHp6ID0gZGRheXMgKiA4NjQwMEw7Ci0gICAgaWYgKHp6IDwgMEwpCQkJLyogVGhp cyBjYXRjaGVzIGl0ICovCi0gICAgICByZXR1cm4oLTIpOwotICAgIHp6ICs9IGRob3VycyAqIDM2 MDBMICsgZG1pbnMgKiA2MEwgKyBkc2VjczsKLSAgICB6eiAqPSBkc2lnbjsKLSAgICAqcmVzdWx0 ID0geno7Ci0gICAgcmV0dXJuKDApOwotfQotCi0KLWNoYXIgKgotY21jdnRkYXRlKHMsdCkgY2hh ciAqIHM7IGludCB0OyB7Ci0gICAgaW50IHgsIGksIGosIGssIGhoLCBtbSwgc3MsIGZmLCBwbWZs YWcgPSAwLCBub2RhdGUgPSAwLCBsZW4sIGRvdzsKLSAgICBpbnQgdW5pdHMsIGlzZ210ID0gMCwg Z210c2lnbiA9IDAsIGQgPSAwLCBzdGF0ZSA9IDAsIG5kYXk7Ci0gICAgaW50IGtuID0gMCwgZnRb OF0sIGlzbGV0dGVyID0gMCwgZjJsZW4gPSAwOwotCi0gICAgaW50IHpoaCA9IDA7CQkJLyogVGlt ZXpvbmUgYWRqdXN0bWVudHMgKi8KLSAgICBpbnQgem1tID0gMDsKLSAgICBpbnQgemRkID0gMDsK LQotICAgIGludCBkc2lnbiA9IDE7CQkJLyogRGVsdGEtdGltZSBhZGp1c3RtZW50cyAqLwotICAg IGludCBkZGF5cyA9IDA7Ci0gICAgaW50IGRtb250aHMgPSAwOwotICAgIGludCBkeWVhcnMgPSAw OwotICAgIGludCBkaG91cnMgPSAwOwotICAgIGludCBkbWlucyA9IDA7Ci0gICAgaW50IGRzZWNz ID0gMDsKLSAgICBpbnQgaGF2ZWRlbHRhID0gMDsKLQotICAgIGNoYXIgKiBmbGRbOF0sICogcCA9 ICIiLCAqIHAyLCAqIHAzOyAvKiBBc3NvcnRlZCBidWZmZXJzIGFuZCBwb2ludGVycyAgKi8KLSAg ICBjaGFyICogczIsICogczM7Ci0gICAgY2hhciAqIHllYXIgPSBOVUxMLCAqIG1vbnRoID0gTlVM TCwgKiBkYXkgPSBOVUxMOwotICAgIGNoYXIgKiBob3VyID0gIjAwIiwgKiBtaW4gPSAiMDAiLCAq IHNlYyA9ICIwMCI7Ci0gICAgY2hhciBkYXRlc2VwID0gMDsKLSAgICBjaGFyIHRtcGJ1Zls4XTsK LSAgICBjaGFyIHhidWZbREFURUJVRkxFTisxXTsKLSAgICBjaGFyIHlidWZbREFURUJVRkxFTisx XTsKLSAgICBjaGFyIHpidWZbREFURUJVRkxFTisxXTsKLSAgICBjaGFyIHl5eXltbWRkW1lZWVlN TUREXTsKLSAgICBjaGFyIGRidWZbMjZdOwotICAgIGNoYXIgZGF5YnVmWzNdOwotICAgIGNoYXIg bW9uYnVmWzNdOwotICAgIGNoYXIgeWVhcmJ1Zls1XTsKLSAgICBjaGFyIHRpbWJ1ZlsxNl0sICp0 YiwgY2M7Ci0gICAgY2hhciAqIGRwID0gTlVMTDsJCQkvKiBSZXN1bHQgcG9pbnRlciAqLwotCi0g ICAgaWYgKCFzKSBzID0gIiI7Ci0gICAgdG1wYnVmWzBdID0gTlVMOwotCi0gICAgd2hpbGUgKCpz ID09IFNQKSBzKys7CQkvKiBHb2JibGUgYW55IGxlYWRpbmcgYmxhbmtzICovCi0gICAgaWYgKGlz YWxwaGEoKnMpKQkJCS8qIFJlbWVtYmVyIGlmIDFzdCBjaGFyIGlzIGEgbGV0dGVyICovCi0gICAg ICBpc2xldHRlciA9IDE7Ci0KLSAgICBsZW4gPSBzdHJsZW4ocyk7Ci0gICAgZGVidWcoRjExMCwi Y21jdnRkYXRlIixzLGxlbik7Ci0gICAgaWYgKGxlbiA9PSAwKSB7CQkJLyogTm8gYXJnIC0gcmV0 dXJuIGN1cnJlbnQgZGF0ZS10aW1lICovCi0JZHAgPSBja2RhdGUoKTsKLQlnb3RvIHhjdnRkYXRl OwotICAgIH0KLSAgICBpZiAobGVuID4gREFURUJVRkxFTikgewkJLyogQ2hlY2sgbGVuZ3RoIG9m IGFyZyAqLwotCW1ha2VzdHIoJmNtZGF0ZW1zZywiRGF0ZS10aW1lIHN0cmluZyB0b28gbG9uZyIp OwotCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKLQlyZXR1cm4oTlVMTCk7 Ci0gICAgfQotICAgIGhoID0gMDsJCQkJLyogSW5pdCB0aW1lIHRvIDAwOjAwOjAwLjAgKi8KLSAg ICBtbSA9IDA7Ci0gICAgc3MgPSAwOwotICAgIGZmID0gMDsKLSAgICB6dGltZSgmcCk7Ci0gICAg aWYgKCFwKQotICAgICAgcCAgPSAiIjsKLSAgICBpZiAoKnApIHsJCQkJLyogSW5pdCB0aW1lIHRv IGN1cnJlbnQgdGltZSAqLwotCXggPSBja3N0cm5jcHkoZGJ1ZixwLDI2KTsKLQlpZiAoeCA+IDE3 KSB7Ci0JICAgIGhoID0gYXRvaSgmZGJ1ZlsxMV0pOwotCSAgICBtbSA9IGF0b2koJmRidWZbMTRd KTsKLQkgICAgc3MgPSBhdG9pKCZkYnVmWzE3XSk7Ci0JfQotICAgIH0KLSAgICBja3N0cm5jcHko eXl5eW1tZGQsenpuZGF0ZSgpLFlZWVlNTUREKTsgLyogSW5pdCBkYXRlIHRvIGN1cnJlbnQgZGF0 ZSAqLwotICAgIGNrc3RybmNweSh5ZWFyYnVmLHl5eXltbWRkLDUpOwotICAgIGNrc3RybmNweSht b25idWYsJnl5eXltbWRkWzRdLDMpOwotICAgIGNrc3RybmNweShkYXlidWYsJnl5eXltbWRkWzZd LDMpOwotICAgIHllYXIgPSB5ZWFyYnVmOwotICAgIG1vbnRoID0gbW9uYnVmOwotICAgIGRheSA9 IGRheWJ1ZjsKLSAgICBuZGF5ID0gYXRvaShkYXlidWYpOwotICAgIGNrc3RybmNweSh4YnVmLHMs REFURUJVRkxFTik7CS8qIE1ha2UgYSBsb2NhbCBjb3B5IHdlIGNhbiBwb2tlICovCi0gICAgcyA9 IHhidWY7CQkJCS8qIFBvaW50IHRvIGl0ICovCi0gICAgc1tsZW5dID0gTlVMOwotICAgIGlmIChz WzBdID09ICc6JykgewotCXAgPSBzOwotCWdvdG8gZG90aW1lOwotICAgIH0KLSAgICAvKiBTcGVj aWFsIHByZXNldCBmb3JtYXRzLi4uICovCi0KLSAgICBpZiAobGVuID49IDE0KSB7CQkJLyogRlRQ IE1EVE0gYWxsLW51bWVyaWMgZGF0ZSAqLwotCWNoYXIgYzsKLQljID0gc1sxNF07CQkJLyogZS5n LiAxOTk4MDYxNTEwMDA0NS4wMTQgKi8KLQlzWzE0XSA9IE5VTDsKLQl4ID0gcmRpZ2l0cyhzKTsK LQlzWzE0XSA9IGM7Ci0JaWYgKHgpIHsKLQkgICAgY2tzdHJuY3B5KHl5eXltbWRkLHMsOCsxKTsK LQkgICAgeWVhciA9IE5VTEw7Ci0JICAgIHAgPSAmc1s4XTsKLQkgICAgZ290byBkb3RpbWU7Ci0J fQotICAgIH0KLSAgICB4ID0gMDsJCQkJLyogQmVjb21lcyA+IDAgZm9yIGFzY3RpbWUgZm9ybWF0 ICovCi0gICAgaWYgKGlzYWxwaGEoc1swXSkpIHsKLQlpZiAobGVuID09IDI0KSB7CQkvKiBBc2N0 aW1lIGZvcm1hdD8gKi8KLQkgICAgLyogU2F0IEp1bCAxNCAxNTo1NzozMiAyMDAxICovCi0JICAg IHggPSBja21hdGNoKGF0cDEscywwLDApOwotCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgYXNj dGltZSIscyx4KTsKLQl9IGVsc2UgaWYgKGxlbiA9PSAyOCkgewkJLyogT3IgQXNjdGltZSBwbHVz IHRpbWV6b25lPyAqLwotCSAgICAvKiBTYXQgSnVsIDE0IDE1OjE1OjM5IEVEVCAyMDAxICovCi0J ICAgIHggPSBja21hdGNoKGF0cDIscywwLDApOwotCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUg YXNjdGltZSt0aW1lem9uZSIscyx4KTsKLQl9Ci0gICAgfQotICAgIGlmICh4ID4gMCkgewkJCS8q IEFzY3RpbWUgZm9ybWF0ICovCi0gICAgICAgIGludCB4eDsKLSAgICAgICAgc3RybmNweSh5ZWFy YnVmLHMgKyBsZW4gLSA0LDQpOwotICAgICAgICB5ZWFyYnVmWzRdID0gTlVMOwotICAgICAgICBm b3IgKGkgPSAwOyBpIDwgMzsgaSsrKQotICAgICAgICAgIHRtcGJ1ZltpXSA9IHNbaSs0XTsKLSAg ICAgICAgdG1wYnVmWzNdID0gTlVMOwotCWlmICgoeHggPSBsb29rdXAoY21vbnRocyx0bXBidWYs MTIsTlVMTCkpIDwgMCkgewotCSAgICBtYWtlc3RyKCZjbWRhdGVtc2csIkludmFsaWQgbW9udGgi KTsKLQkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOwotCSAgICByZXR1 cm4oTlVMTCk7Ci0JfQotICAgICAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgYXNjdGltZSBtb250 aCIsIiIseHgpOwotICAgICAgICBtb25idWZbMF0gPSAoeHggLyAxMCkgKyAnMCc7IAotICAgICAg ICBtb25idWZbMV0gPSAoeHggJSAxMCkgKyAnMCc7IAotICAgICAgICBtb25idWZbMl0gPSBOVUw7 Ci0gICAgICAgIGRheWJ1ZlswXSA9IChzWzhdID09ICcgJyA/ICcwJyA6IHNbOF0pOwotICAgICAg ICBkYXlidWZbMV0gPSBzWzldOwotICAgICAgICBkYXlidWZbMl0gPSBOVUw7Ci0JeGJ1ZlswXSA9 IFNQOwotICAgICAgICBmb3IgKGkgPSAxMTsgaSA8IDE5OyBpKyspCi0gICAgICAgICAgeGJ1Zltp LTEwXSA9IHNbaV07Ci0gICAgICAgIHhidWZbOV0gPSBOVUw7Ci0JY2ttYWttc2coemJ1ZiwxOCx5 ZWFyYnVmLG1vbmJ1ZixkYXlidWYseGJ1Zik7Ci0JZGVidWcoRjExMCwiY21jdnRkYXRlIGFzY3Rp bWUgb2siLHpidWYsMCk7Ci0JaWYgKGxlbiA9PSAyNCkgewotCSAgICBkcCA9IHpidWY7Ci0JICAg IGdvdG8geGN2dGRhdGU7Ci0JfSBlbHNlIHsKLQkgICAgaW50IG47Ci0JICAgIG4gPSBja21ha21z Zyh5YnVmLERBVEVCVUZMRU4tNCx6YnVmLCIgIixOVUxMLE5VTEwpOwotCSAgICB5YnVmW24rK10g PSBzWzIwXTsKLQkgICAgeWJ1ZltuKytdID0gc1syMV07Ci0JICAgIHlidWZbbisrXSA9IHNbMjJd OwotCSAgICB5YnVmW24rK10gPSBOVUw7Ci0JICAgIGNrc3RybmNweSh4YnVmLHlidWYsREFURUJV RkxFTik7Ci0JICAgIHMgPSB4YnVmOwotCSAgICBpc2xldHRlciA9IDA7Ci0JfQotICAgIH0KLQot LyogQ2hlY2sgZm9yIGRheSBvZiB3ZWVrICovCi0KLSAgICBwID0gczsKLSAgICB3aGlsZSAoKnAg PT0gU1ApIHArKzsKLSAgICBkb3cgPSAtMTsKLSAgICBpZiAoKnApIHsKLQlwMiA9IHA7Ci0JY2Mg PSBOVUw7Ci0Jd2hpbGUgKDEpIHsKLQkgICAgaWYgKCpwMiA9PSAnLCcgfHwgKnAyID09IFNQIHx8 ICEqcDIpIHsKLQkJY2MgPSAqcDI7CQkvKiBTYXZlIGJyZWFrIGNoYXIgKi8KLQkJKnAyID0gTlVM OwkJLyogTlVMIGl0IG91dCAqLwotCQlwMyA9IHAyOwkJLyogUmVtZW1iZXIgdGhpcyBzcG90ICov Ci0JCWlmICgoZG93ID0gbG9va3VwKGRheXNvZndlZWsscCw3LE5VTEwpKSA+IC0xKSB7Ci0JCSAg ICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgZG93IixwLGRvdyk7Ci0JCSAgICBzID0gcDI7Ci0JCSAg ICBpZiAoY2MgPT0gJywnIHx8IGNjID09IFNQKSB7IC8qIFBvaW50IHRvIG5leHQgZmllbGQgKi8K LQkJCXMrKzsKLQkJCXdoaWxlICgqcyA9PSBTUCkgcysrOwotCQkgICAgfQotCQkgICAgcCA9IHM7 Ci0JCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgZG93IG5ldyBwIixwLGRvdyk7Ci0JCSAgICBi cmVhazsKLQkJfSBlbHNlIGlmIChpc2FscGhhKCpwKSAmJiBjYyA9PSAnLCcpIHsKLQkJICAgIG1h a2VzdHIoJmNtZGF0ZW1zZywiVW5yZWNvZ25pemVkIGRheSBvZiB3ZWVrIik7Ci0JCSAgICBkZWJ1 ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7Ci0JCSAgICByZXR1cm4oTlVMTCk7Ci0J CX0gZWxzZSB7Ci0JCSAgICAqcDMgPSBjYzsKLQkJICAgIGJyZWFrOwotCQl9Ci0JICAgIH0KLQkg ICAgcDIrKzsKLQl9Ci0gICAgfQotICAgIGxlbiA9IHN0cmxlbihzKTsJCS8qIFVwZGF0ZSBsZW5n dGggKi8KLSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgcyIscyxsZW4pOwotCi0gICAgZGVidWco RjExMSwiY21jdnRkYXRlIGRvdyIscyxkb3cpOwotICAgIGlmIChkb3cgPiAtMSkgewkJCS8qIEhh dmUgYSBkYXktb2Ytd2VlayBudW1iZXIgKi8KLQlsb25nIHp6OyBpbnQgbiwgajsKLQl6eiA9IG1q ZCh6em5kYXRlKCkpOwkJLyogR2V0IHRvZGF5J3MgTUpEICovCi0JZGVidWcoRjExMSwiY21jdnRk YXRlIHp6IiwiIix6eik7Ci0JaiA9ICgoKGludCkoenogJSA3TCkpICsgMykgJSA3OyAvKiBUb2Rh eSdzIGRheS1vZi13ZWVrIG51bWJlciAqLwotCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBqIiwiIixq KTsKLQloaCA9IDA7CQkJCS8qIEluaXQgdGltZSB0byBtaWRuaWdodCAqLwotCW1tID0gMDsKLQlz cyA9IDA7Ci0JaWYgKGogPT0gZG93KSB7Ci0JICAgIGNrc3RybmNweSh5eXl5bW1kZCx6em5kYXRl KCksWVlZWU1NREQpOwotCSAgICB5ZWFyID0gTlVMTDsKLQl9IGVsc2UgewotCSAgICBuID0gZG93 IC0gajsJCS8qIERheXMgZnJvbSBub3cgKi8KLQkgICAgaWYgKGRvdyA8IGopCi0JICAgICAgbiAr PSA3OwotCSAgICBpZiAobiA8IDApIG4gKz0gNzsJCS8qIEFkZCB0byBNSkQgKi8KLQkgICAgenog Kz0gbjsKLQkgICAgY2tzdHJuY3B5KHl5eXltbWRkLG1qZDJkYXRlKHp6KSxZWVlZTU1ERCk7IC8q IE5ldyBkYXRlICovCi0JICAgIHllYXIgPSBOVUxMOwotCX0KLQlkZWJ1ZyhGMTExLCJjbWN2dGRh dGUgQSIseXl5eW1tZGQsbGVuKTsKLQlpZiAobGVuID09IDApIHsJCQkvKiBObyBtb3JlIGZpZWxk cyBhZnRlciB0aGlzICovCi0JICAgIGNrbWFrbXNnKHpidWYsMTgseXl5eW1tZGQsIiAwMDowMDow MCIsTlVMTCxOVUxMKTsKLQkgICAgZHAgPSB6YnVmOwotCSAgICBnb3RvIHhjdnRkYXRlOwotCX0K LQlpc2xldHRlciA9IDA7Ci0JaWYgKHJkaWdpdHMocCkgJiYgbGVuIDwgOCkJLyogTmV4dCBmaWVs ZCBpcyB0aW1lPyAqLwotCSAgZ290byBkb3RpbWU7CQkJLyogSWYgc28gZ28gc3RyYWlnaHQgdG8g dGltZSBzZWN0aW9uICovCi0JaWYgKGlzZGlnaXQoKnApKSB7Ci0JICAgIGlmICgqKHArMSkgPT0g JzonKQotCSAgICAgIGdvdG8gZG90aW1lOwotCSAgICBlbHNlIGlmIChpc2RpZ2l0KCoocCsxKSkg JiYgKCoocCsyKSA9PSAnOicpKQotCSAgICAgIGdvdG8gZG90aW1lOwotCX0KLSAgICB9Ci0gICAg ZGVidWcoRjExMSwiY21jdnRkYXRlIEIgcyIscyxkb3cpOwotICAgIGRlYnVnKEYxMTEsImNtY3Z0 ZGF0ZSBCIHAiLHAsZG93KTsKLQotICAgIGlmICgqcyA9PSAnKycgfHwgKnMgPT0gJy0nKSB7CS8q IERlbHRhIHRpbWUgb25seSAtIHNraXAgYWhlYWQuICovCi0JcCA9IHM7Ci0JZ290byBkZWx0YTsK LSAgICB9Ci0jaWZkZWYgQ09NTUVOVAotLyoKLSAgV2hhdCBpcyB0aGUgcHVycG9zZSBvZiB0aGlz PyAgSXQgYnJlYWtzIHBhcnNpbmcgb2YgZW1haWwgZGF0ZXMgbGlrZQotICAiV2VkLCAxMyBGZWIg MjAwMiAxNzo0MzowMiAtMDgwMCAoUFNUKSIuICBSZW1vdmluZyB0aGlzIGNvZGUgZml4ZXMgdGhl Ci0gIHByb2JsZW0gYW5kIEtlcm1pdCBzdGlsbCBwYXNzZXMgdGhlICdkYXRlcycgc2NyaXB0Lgot ICAtIGZkYywgU2F0IE5vdiAyNiAxMDo1Mjo0NSAyMDA1LgotKi8KLSAgICBpZiAoZG93ID4gLTEp IHsKLQkvKiBEYXkgb2Ygd2VlayBnaXZlbiBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBpcyBu b3QgYSB0aW1lICovCi0JLyogb3IgYSBkZWx0YSBzbyBpdCBjYW4ndCBiZSB2YWxpZCAqLwotCW1h a2VzdHIoJmNtZGF0ZW1zZywiSW52YWxpZCB0b2tlbnMgYWZ0ZXIgZGF5IG9mIHdlZWsiKTsKLQlk ZWJ1ZyhGMTExLCJjbWN2dGRhdGUgZmFpbCIsY21kYXRlbXNnLC0xKTsKLQlyZXR1cm4oTlVMTCk7 Ci0gICAgfQotI2VuZGlmCS8qIENPTU1FTlQgKi8KLQotICAgIC8qIEhhbmRsZSAidG9kYXkiLCAi eWVzdGVyZGF5IiwgInRvbW9ycm93IiwgYW5kICsvLSBuIHVuaXRzICovCi0KLSAgICBpZiAoY2tz dHJjaHIoIlR0WXlObiIsc1swXSkpIHsKLQlpbnQgaSwgaywgbiwgbWludXMgPSAwOwotCWNoYXIg YzsKLQlsb25nIGpkOwotCWpkID0gbWpkKGNrZGF0ZSgpKTsKLQlkZWJ1ZyhGMTExLCJjbWN2dGRh dGUgbWpkIixzLGpkKTsKLQotCS8qIFN5bWJvbGljIGRhdGU6IFRPREFZLCBUT01PUlJPVywgZXRj Li4uPyAqLwotCi0JczIgPSBzOwkJCQkvKiBGaW5kIGVuZCBvZiBrZXl3b3JkICovCi0JaSA9IDA7 Ci0Jd2hpbGUgKGlzYWxwaGEoKnMyKSkgewkJLyogYW5kIGdldCBpdHMgbGVuZ3RoICovCi0JICAg IGkrKzsKLQkgICAgczIrKzsKLQl9Ci0JYyA9ICpzMjsJCQkvKiBaYXAgYnV0IHNhdmUgZGVsaW1p dGVyICovCi0JKnMyID0gTlVMOwotCWsgPSBsb29rdXAoc3ltZGF5dGFiLHMsbnN5bWRheXMsTlVM TCk7IC8qIExvb2sgdXAga2V5d29yZCAqLwotCSpzMiA9IGM7CQkJLyogUmVwbGFjZSBkZWxpbWl0 ZXIgKi8KLQlpZiAoayA8IDApCQkJLyogS2V5d29yZCBub3QgZm91bmQgKi8KLQkgIGdvdG8gbm9y bWFsOwotCXMzID0gJnNbaV07Ci0Jd2hpbGUgKCpzMyA9PSBTUCkJCS8qIFNraXAgd2hpdGVzcGFj ZSAqLwotCSAgczMrKzsKLQlpZiAoKnMzID09ICdfJyB8fCAqczMgPT0gJzonKQotCSAgczMrKzsK LQotCXN3aXRjaCAoaykgewkJCS8qIEhhdmUga2V5d29yZCAqLwotCSAgY2FzZSBTWU1fTk9XOgkJ CS8qIE5PVyAqLwotCSAgICBja3N0cm5jcHkoeWJ1Zixja2RhdGUoKSxEQVRFQlVGTEVOKTsKLQkg ICAgY2tzdHJuY3B5KHl5eXltbWRkLHlidWYsWVlZWU1NREQpOwotCSAgICB5ZWFyID0gTlVMTDsK LQkgICAgaWYgKCpzMykgewkJCS8qIE5vIG92ZXJ3cml0aW5nIGN1cnJlbnQgdGltZS4gKi8KLQkJ Y2tzdHJuY2F0KHlidWYsIiAiLERBVEVCVUZMRU4pOwotCQlja3N0cm5jYXQoeWJ1ZixzMyxEQVRF QlVGTEVOKTsKLQkgICAgfQotCSAgICBicmVhazsKLQkgIGRlZmF1bHQ6CQkJLyogWWVzdGVyZGF5 LCBUb2RheSwgYW5kIFRvbW9ycm93ICovCi0JICAgIGlmIChrID09IFNZTV9UT01PKSB7CS8qIFRP TU9SUk9XICovCi0JCXN0cm5jcHkoeWJ1ZixtamQyZGF0ZShqZCsxKSw4KTsKLQkgICAgfSBlbHNl IGlmIChrID09IFNZTV9ZRVNUKSB7CS8qIFlFU1RFUkRBWSAqLwotCQlzdHJuY3B5KHlidWYsbWpk MmRhdGUoamQtMSksOCk7Ci0JICAgIH0gZWxzZSB7CQkJLyogVE9EQVkgKi8KLQkJc3RybmNweSh5 YnVmLGNrZGF0ZSgpLDgpOwotCSAgICB9Ci0JICAgIHN0cm5jcHkoeWJ1Zis4LCIgMDA6MDA6MDAi LERBVEVCVUZMRU4tOCk7IC8qIERlZmF1bHQgdGltZSBpcyAwICovCi0JICAgIGNrc3RybmNweSh5 eXl5bW1kZCx5YnVmLFlZWVlNTUREKTsKLQkgICAgeWVhciA9IE5VTEw7Ci0JICAgIGlmICgqczMp IHsJCQkvKiBJZiBzb21ldGhpbmcgZm9sbG93cyBrZXl3b3JkLi4uICovCi0JCWlmIChpc2RpZ2l0 KCpzMykpIHsJLyogVGltZSAtIG92ZXJ3cml0ZSBkZWZhdWx0IHRpbWUgKi8KLQkJICAgIHN0cm5j cHkoeWJ1Zis4LHMraSxEQVRFQlVGTEVOLTgpOwotCQl9IGVsc2UgewkJLyogU29tZXRoaW5nIGVs c2UsIGtlZXAgZGVmYXVsdCB0aW1lICovCi0JCSAgICBja3N0cm5jYXQoeWJ1ZiwiICIsREFURUJV RkxFTik7IC8qIGFuZCBhcHBlbmQgKi8KLQkJICAgIGNrc3RybmNhdCh5YnVmLHMzLERBVEVCVUZM RU4pOyAvKiB3aGF0ZXZlciB3ZSBoYXZlICovCi0JCX0KLQkgICAgfQotCX0KLQlzID0geWJ1ZjsJ CQkvKiBQb2ludCB0byByZXdyaXR0ZW4gZGF0ZS10aW1lICovCi0JbGVuID0gc3RybGVuKHMpOwkJ LyogVXBkYXRlIGxlbmd0aCAqLwotCWlzbGV0dGVyID0gMDsJCQkvKiBDYW5jZWwgdGhpcyAqLwot ICAgIH0KLQotLyogUmVndWxhciBmcmVlLWZvcm1hdCBub24tc3ltYm9saWMgZGF0ZSAqLwotCi0g IG5vcm1hbDoKLQotICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBOT1JNQUwiLHMsbGVuKTsKLSAg ICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgZG93IixzLGRvdyk7Ci0gICAgaWYgKHl5eXltbWRkWzBd ICYmICF5ZWFyKSB7Ci0JY2tzdHJuY3B5KHllYXJidWYseXl5eW1tZGQsNSk7Ci0JY2tzdHJuY3B5 KG1vbmJ1ZiwmeXl5eW1tZGRbNF0sMyk7Ci0JY2tzdHJuY3B5KGRheWJ1ZiwmeXl5eW1tZGRbNl0s Myk7Ci0JeWVhciA9IHllYXJidWY7Ci0JbW9udGggPSBtb25idWY7Ci0JZGF5ID0gZGF5YnVmOwot CW5kYXkgPSBhdG9pKGRheWJ1Zik7Ci0gICAgfQotICAgIGlmIChpc2RpZ2l0KHNbMF0pKSB7CQkv KiBUaW1lIHdpdGhvdXQgZGF0ZT8gKi8KLQlwID0gczsKLQlpZiAoc1sxXSA9PSAnOicpIHsKLQkg ICAgZGVidWcoRjExMSwiY21jdnRkYXRlIE5PUk1BTCBYMSIscyxsZW4pOwotCSAgICBnb3RvIGRv dGltZTsKLQl9IGVsc2UgaWYgKGxlbiA+IDEgJiYgaXNkaWdpdChzWzFdKSAmJiBzWzJdID09ICc6 JykgewotCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgTk9STUFMIFgyIixzLGxlbik7Ci0JICAg IGdvdG8gZG90aW1lOwotCX0gZWxzZSBpZiAocmRpZ2l0cyhzKSAmJiBsZW4gPCA4KSB7Ci0JICAg IGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBOT1JNQUwgWDMiLHMsbGVuKTsKLQkgICAgZ290byBkb3Rp bWU7Ci0JfQotICAgIH0KLSAgICBpZiAobGVuID49IDggJiYgaXNkaWdpdCgqcykpIHsJLyogQ2hl Y2sgZmlyc3QgZm9yIHl5eXltbWRkKiAqLwotCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBOT1JNQUwg QSIscyxsZW4pOwotCWNjID0gc1s4XTsKLQlzWzhdID0gTlVMOwkJCS8qIElzb2xhdGUgZmlyc3Qg OCBjaGFyYWN0ZXJzICovCi0JaWYgKHJkaWdpdHMocykpIHsKLQkgICAgLyogSGF2ZSB2YWxpZCB0 aW1lIHNlcGFyYXRvcj8gKi8KLQkgICAgcDIgPSBjYyA/IGNrc3RyY2hyKCIgVHRfLToiLGNjKSA6 IE5VTEw7Ci0JICAgIGlmICghY2MgfHwgcDIpIHsKLQkJY2tzdHJuY3B5KHl5eXltbWRkLHMsWVlZ WU1NREQpOwkvKiBWYWxpZCBzZXBhcmF0b3IgKi8KLQkJeWVhciA9IE5VTEw7Ci0JCXMgKz0gODsJ CQkgICAgICAgIC8qIG9yIHRpbWUgbm90IGdpdmVuICovCi0JCWlmIChjYykgcysrOwkJICAgICAg ICAvKiBLZWVwIGRhdGUgKi8KLQkJcCA9IHM7CQkJICAgICAgICAvKiBhbmQgZ28gaGFuZGxlIHRp bWUgKi8KLQkJZ290byBkb3RpbWU7Ci0JICAgIH0gZWxzZSBpZiAoIXAyKSB7Ci0JCWlmIChpc2Rp Z2l0KGNjKSkKLQkJICBtYWtlc3RyKCZjbWRhdGVtc2csIk51bWVyaWMgZGF0ZSB0b28gbG9uZyIp OwotCQllbHNlCi0JCSAgbWFrZXN0cigmY21kYXRlbXNnLCJJbnZhbGlkIGRhdGUtdGltZSBzZXBh cmF0b3IiKTsKLQkJZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOwotCQlyZXR1 cm4oTlVMTCk7Ci0JICAgIH0KLQl9Ci0Jc1s4XSA9IGNjOwkJCS8qIFB1dCB0aGlzIGJhY2shICov Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBOT1JNQUwgbm9uLXl5eXltbWRkIixz LGxlbik7Ci0KLSAgICAvKiBGcmVlLWZvcm1hdCBkYXRlIC0tIGZpZ3VyZSBpdCBvdXQgKi8KLQot I2lmZGVmIENPTU1FTlQKLSAgICBpZiAoKnMgJiYgIWlzZGlnaXQoKnMpKSB7Ci0JbWFrZXN0cigm Y21kYXRlbXNnLCJVbnJlY29nbml6ZWQgd29yZCBpbiBkYXRlIik7Ci0JZGVidWcoRjExMSwiY21j dnRkYXRlIixjbWRhdGVtc2csLTEpOwotCXJldHVybihOVUxMKTsKLSAgICB9Ci0jZW5kaWYgLyog Q09NTUVOVCAqLwotICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspCQkvKiBGaWVsZCB0eXBlcyAq LwotICAgICAgZnRbaV0gPSAtMTsKLSAgICBmbGRbaSA9IDBdID0gKHAgPSBzKTsJCS8qIEZpcnN0 IGZpZWxkICovCi0gICAgd2hpbGUgKCpwKSB7CQkJLyogR2V0IG5leHQgdHdvIGZpZWxkcyAqLwot CWlmIChpc2RhdGVzZXAoKnApKSB7CQkvKiBIYXZlIGEgZGF0ZSBzZXBhcmF0b3IgKi8KLQkgICAg aWYgKGkgPT0gMCkgewotCQlkYXRlc2VwID0gKnA7Ci0JICAgIH0gZWxzZSBpZiAoaSA9PSAxICYm ICpwICE9IGRhdGVzZXApIHsKLQkJbWFrZXN0cigmY21kYXRlbXNnLCJJbmNvbnNpc3RlbnQgZGF0 ZSBzZXBhcmF0b3JzIik7Ci0JCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsK LQkJcmV0dXJuKE5VTEwpOwotCSAgICB9Ci0JICAgICpwKysgPSBOVUw7CQkJLyogUmVwbGFjZSBi eSBOVUwgKi8KLQkgICAgaWYgKCpwKSB7CQkJLyogTm93IHdlJ3JlIGF0IHRoZSBuZXh0IGZpZWxk ICovCi0JCXdoaWxlICgqcCA9PSBTUCkgcCsrOwkvKiBTa2lwIGxlYWRpbmcgc3BhY2VzICovCi0J CWlmICghKnApIGJyZWFrOwkJLyogTWFrZSBzdXJlIHdlIHN0aWxsIGhhdmUgc29tZXRoaW5nICov Ci0JCWlmIChpID09IDIpCQkvKiBMYXN0IG9uZT8gKi8KLQkJICBicmVhazsKLQkJZmxkWysraV0g PSBwOwkJLyogTm8sIHJlY29yZCBwb2ludGVyIHRvIHRoaXMgb25lICovCi0JICAgIH0gZWxzZSB7 Ci0JCWJyZWFrOwotCSAgICB9CSAgICAKLQl9IGVsc2UgaWYgKCgqcCA9PSAnVCcgfHwgKnAgPT0g J3QnKSAmJiBpc2RpZ2l0KCoocCsxKSkpIHsgLyogVGltZSAqLwotCSAgICAqcCsrID0gTlVMOwot CSAgICBicmVhazsKLQl9IGVsc2UgaWYgKCpwID09ICc6JykgewotCSAgICBpZiAoaSA9PSAwICYm IHAgPT0gcykgewotCQlub2RhdGUgPSAxOwotCQlicmVhazsKLQkgICAgfSBlbHNlIGlmIChpICE9 IDApIHsJLyogQWZ0ZXIgYSBkYXRlICovCi0JCWlmIChpID09IDIpIHsJCS8qIE9LIGFzIGRhdGUt dGltZSBzZXBhcmF0b3IgKFZNUykgKi8KLQkJICAgICpwKysgPSBOVUw7Ci0JCSAgICBicmVhazsK LQkJfQotCQlpZiAoaSA8IDIpCi0JCSAgbWFrZXN0cigmY21kYXRlbXNnLCJUb28gZmV3IGZpZWxk cyBpbiBkYXRlIik7Ci0JCWVsc2UKLQkJICBtYWtlc3RyKCZjbWRhdGVtc2csIk1pc3BsYWNlZCB0 aW1lIHNlcGFyYXRvciIpOwotCQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7 Ci0JCXJldHVybihOVUxMKTsKLQkgICAgfQotCSAgICBub2RhdGUgPSAxOwkJCS8qIE9yIHdpdGhv dXQgYSBkYXRlICovCi0JICAgIGJyZWFrOwotCX0KLQlwKys7Ci0gICAgfQotICAgIGlmIChwID4g cyAmJiBpID09IDApCQkvKiBNYWtlIHN1cmUgd2UgaGF2ZSBhIGRhdGUgKi8KLSAgICAgIG5vZGF0 ZSA9IDE7CQkJLyogTm8gZGF0ZS4gKi8KLQotICAgIGlmIChub2RhdGUgJiYgZG93ID4gLTEpIHsJ CS8qIEhhdmUgaW1wbGllZCBkYXRlIGZyb20gRE9XPyAqLwotCWdvdG8gZG90aW1lOwkJCS8qIFVz ZSwgdXNlIHRoYXQsIGdvIGRvIHRpbWUuICovCi0KLSAgICB9IGVsc2UgaWYgKG5vZGF0ZSkgewkJ LyogTm8gZGF0ZSBhbmQgbm8gaW1wbGllZCBkYXRlICovCi0JY2hhciAqdG1wID0gTlVMTDsJCS8q IFN1YnN0aXR1dGUgdG9kYXkncyBkYXRlICovCi0JenRpbWUoJnRtcCk7Ci0JaWYgKCF0bXApCi0J ICB0bXAgID0gIiI7Ci0JaWYgKCEqdG1wKSB7Ci0JICAgIG1ha2VzdHIoJmNtZGF0ZW1zZywiUHJv YmxlbSBzdXBwbHlpbmcgY3VycmVudCBkYXRlIik7Ci0JICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0 ZSIsY21kYXRlbXNnLC0xKTsKLQkgICAgcmV0dXJuKE5VTEwpOwotCX0KLQlja3N0cm5jcHkoZGJ1 Zix0bXAsMjYpOwkJLyogUmVmb3JtYXQgKi8KLQlpZiAoZGJ1Zls4XSA9PSBTUCkgZGJ1Zls4XSA9 ICcwJzsKLQlmbGRbMF0gPSBkYnVmKzg7CQkvKiBkZCAqLwotCWRidWZbMTBdID0gTlVMOwotCWZs ZFsxXSA9IGRidWYrNDsJCS8qIG1tbSAqLwotCWRidWZbN10gPSBOVUw7Ci0JZmxkWzJdID0gZGJ1 ZisyMDsJCS8qIHl5eXkgKi8KLQlkYnVmWzI0XSA9IE5VTDsKLQloaCA9IGF0b2koJmRidWZbMTFd KTsKLQltbSA9IGF0b2koJmRidWZbMTRdKTsKLQlzcyA9IGF0b2koJmRidWZbMTddKTsKLQlwID0g czsJCQkJLyogQmFjayB1cCBzb3VyY2UgcG9pbnRlciB0byByZXBhcnNlICovCi0gICAgfSBlbHNl IGlmIChpIDwgMikgewotCW1ha2VzdHIoJmNtZGF0ZW1zZywiVG9vIGZldyBmaWVsZHMgaW4gZGF0 ZSIpOwotCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKLQlyZXR1cm4oTlVM TCk7Ci0gICAgfQotICAgIC8qIEhhdmUgdGhyZWUgZGF0ZSBmaWVsZHMgLSBzZWUgd2hhdCB0aGV5 IGFyZSAqLwotCi0gICAgZm9yIChrID0gMCwgaiA9IDA7IGogPCAzOyBqKyspIHsJLyogR2V0IG51 bWJlciBvZiBub24tbnVtZXJpYyBmaWVsZHMgKi8KLQlmdFtqXSA9IHJkaWdpdHMoZmxkW2pdKTsK LQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgZmxkIixmbGRbal0saik7Ci0JaWYgKGZ0W2pdID09IDAp Ci0JICBrKys7Ci0gICAgfQotICAgIGtuID0gazsJCQkJLyogSG93IG1hbnkgbnVtZXJpYyBmaWVs ZHMgKi8KLSAgICBtb250aCA9IE5VTEw7CQkJLyogU3RyaWtlIG91dCBkZWZhdWx0IHZhbHVlcyAq LwotICAgIHllYXIgPSBOVUxMOwotICAgIGRheSA9IE5VTEw7Ci0KLSAgICBpZiAoayA9PSAyICYm IGZ0WzJdID4gMCkgewkJLyogSnVsIDIwLCAyMDAxICovCi0JaW50IHh4OwotCXh4ID0gc3RybGVu KGZsZFsxXSk7Ci0JcDMgPSBmbGRbMV07Ci0JaWYgKHh4ID4gMCkgaWYgKHAzW3h4LTFdID09ICcs JykgewotCSAgICBwM1t4eC0xXSA9IE5VTDsKLQkgICAgaWYgKHJkaWdpdHMocDMpKSB7Ci0JCWsg PSAxOwkKLQkJZnRbMV0gPSAxOwotCSAgICB9IGVsc2UgcDNbeHgtMV0gPSAnLCc7Ci0JfQotICAg IH0KLSAgICBpZiAoayA+IDEpIHsJCQkvKiBXZSBjYW4gaGF2ZSBvbmx5IG9uZSBub24tbnVtZXJp YyAqLwotCWlmIChub2RhdGUpCi0JICBtYWtlc3RyKCZjbWRhdGVtc2csIlVucmVjb2duaXplZCB3 b3JkIGluIGRhdGUiKTsgCi0JZWxzZSBpZiAoIWZ0WzJdICYmIGlzZGlnaXQoKihmbGRbMl0pKSkK LQkgIG1ha2VzdHIoJmNtZGF0ZW1zZywiSW52YWxpZCBkYXRlLXRpbWUgc2VwYXJhdG9yIik7IAot CWVsc2UKLQkgIG1ha2VzdHIoJmNtZGF0ZW1zZywiVG9vIG1hbnkgbm9uLW51bWVyaWMgZmllbGRz IGluIGRhdGUiKTsKLQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7Ci0JcmV0 dXJuKE5VTEwpOwotICAgIH0KLSAgICBpZiAoIWZ0WzBdKSB7Ci0JayA9IDA7Ci0gICAgfSBlbHNl IGlmICghZnRbMV0pIHsKLQlrID0gMTsKLSAgICB9IGVsc2UgaWYgKCFmdFsyXSkgewotCW1ha2Vz dHIoJmNtZGF0ZW1zZywiTm9uLWRpZ2l0IGluIHRoaXJkIGRhdGUgZmllbGQiKTsKLQlkZWJ1ZyhG MTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7Ci0JcmV0dXJuKE5VTEwpOwotICAgIH0gZWxz ZQotICAgICAgayA9IC0xOwotCi0gICAgaWYgKGsgPiAtMSkgewotCWlmICgoeCA9IGxvb2t1cChj bW9udGhzLGZsZFtrXSwxMixOVUxMKSkgPCAwKSB7Ci0JICAgIG1ha2VzdHIoJmNtZGF0ZW1zZywi VW5rbm93biBtb250aCIpOwotCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywt MSk7Ci0JICAgIHJldHVybihOVUxMKTsKLQl9Ci0Jc3ByaW50Zih0bXBidWYsIiUwMmQiLHgpOwot CW1vbnRoID0gdG1wYnVmOwotICAgIH0KLSAgICBmMmxlbiA9IHN0cmxlbihmbGRbMl0pOwkJLyog TGVuZ3RoIG9mIDNyZCBmaWVsZCAqLwotCi0gICAgaWYgKGsgPT0gMCkgewkJCS8qIG1vbnRobmFt ZSBkZCwgeXl5eSAqLwotCWRheSA9IGZsZFsxXTsKLQl5ZWFyID0gZmxkWzJdOwotICAgIH0gZWxz ZSBpZiAoKChpbnQpc3RybGVuKGZsZFswXSkgPT0gNCkpIHsgLyogeXl5eS14eC1kZCAqLwotCXll YXIgPSBmbGRbMF07Ci0JZGF5ID0gZmxkWzJdOwotCWlmICghbW9udGgpCi0JICBtb250aCA9IGZs ZFsxXTsJCS8qIHl5eXktbW0tZGQgKi8KLSAgICB9IGVsc2UgaWYgKGYybGVuID09IDQpIHsJCS8q IHh4LXh4LXl5eXkgKi8KLQl5ZWFyID0gZmxkWzJdOwotCWlmIChtb250aCkgewkJCS8qIGRkLW5h bWUteXl5eSAqLwotCSAgICBkYXkgPSBmbGRbMF07Ci0JfSBlbHNlIHsJCQkvKiB4eC14eC15eXl5 ICovCi0JICAgIGludCBmMCwgZjE7Ci0JICAgIGYwID0gYXRvaShmbGRbMF0pOwotCSAgICBmMSA9 IGF0b2koZmxkWzFdKTsKLQkgICAgaWYgKCgoZjAgPiAxMikgJiYgKGYxIDw9IDEyKSkgfHwgKGYx IDw9IDEyICYmIGYwID09IGYxKSkgewotCQlkYXkgPSBmbGRbMF07CQkvKiBtbS1kZC15eXl5ICov Ci0JCW1vbnRoID0gZmxkWzFdOwotCSAgICB9IGVsc2UgaWYgKChmMCA8PSAxMikgJiYgKGYxID4g MTIpKSB7Ci0JCWlmICghcmRpZ2l0cyhmbGRbMV0pKSB7Ci0JCSAgICBtYWtlc3RyKCZjbWRhdGVt c2csIkRheSBub3QgbnVtZXJpYyIpOwotCQkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRh dGVtc2csLTEpOwotCQkgICAgcmV0dXJuKE5VTEwpOwotCQl9IGVsc2UgewotCQkgICAgZGF5ID0g ZmxkWzFdOwkvKiBkZC1tbS15eXl5ICovCi0JCX0KLQkJbW9udGggPSBmbGRbMF07Ci0JICAgIH0g ZWxzZSB7Ci0JCWlmICghZjAgfHwgIWYxKQotCQkgIG1ha2VzdHIoJmNtZGF0ZW1zZywiRGF5IG9y IG1vbnRoIG91dCBvZiByYW5nZSIpOwotCQllbHNlCi0JCSAgbWFrZXN0cigmY21kYXRlbXNnLCJE YXkgYW5kIG1vbnRoIGFyZSBhbWJpZ3VvdXMiKTsKLQkJZGVidWcoRjExMSwiY21jdnRkYXRlIixj bWRhdGVtc2csLTEpOwotCQlyZXR1cm4oTlVMTCk7Ci0JICAgIH0KLQl9Ci0gICAgfSBlbHNlIGlm ICgoZjJsZW4gPCA0KSAmJgkJLyogZGQgbW1tIHl5IChSRkM4MjIpICovCi0JICAgICAgICFyZGln aXRzKGZsZFsxXSkgJiYJLyogbWlkZGxlIGZpZWxkIGlzIG1vbnRobmFtZSAqLwotCSAgICAgICBy ZGlnaXRzKGZsZFsyXSkpIHsKLQlpbnQgdG1weWVhcjsKLQlkYXkgPSBmbGRbMF07Ci0JaWYgKCFm bGRbMl1bMV0pIHsKLQkgICAgbWFrZXN0cigmY21kYXRlbXNnLCJUb28gZmV3IGRpZ2l0cyBpbiB5 ZWFyIik7Ci0JICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKLQkgICAg cmV0dXJuKE5VTEwpOwotCX0KLQl0bXB5ZWFyID0gYXRvaShmbGRbMl0pOwotCWlmICh0bXB5ZWFy IDwgNTApCQkvKiBSRkMgMjgyMiB3aW5kb3dpbmcgKi8KLQkgIHRtcHllYXIgKz0gMjAwMDsKLQll bHNlCQkJCS8qIFRoaXMgaW5jbHVkZXMgMy1kaWdpdCB5ZWFycy4gKi8KLQkgIHRtcHllYXIgKz0g MTkwMDsKLQl5ZWFyID0gY2tpdG9hKHRtcHllYXIpOwotCi0gICAgfSBlbHNlIGlmICgoZjJsZW4g PCA0KSAmJiAoayA8IDApICYmICgoaW50KXN0cmxlbihmbGRbMF0pIDwgNCkpIHsKLQltYWtlc3Ry KCZjbWRhdGVtc2csIkFtYmlndW91cyBudW1lcmljIGRhdGUiKTsKLQlkZWJ1ZyhGMTExLCJjbWN2 dGRhdGUiLGNtZGF0ZW1zZywtMSk7Ci0JcmV0dXJuKE5VTEwpOwotICAgIH0gZWxzZSBpZiAoKGYy bGVuID4gNCkgJiYgZnRbMl0pIHsKLQltYWtlc3RyKCZjbWRhdGVtc2csIlRvbyBtYW55IGRpZ2l0 cyBpbiB5ZWFyIik7Ci0JZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOwotCXJl dHVybihOVUxMKTsKLSAgICB9IGVsc2UgewotCW1ha2VzdHIoJmNtZGF0ZW1zZywiVW5leHBlY3Rl ZCBkYXRlIGZvcm1hdCIpOwotCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsK LQlyZXR1cm4oTlVMTCk7Ci0gICAgfQotICAgIHggPSBhdG9pKG1vbnRoKTsKLSAgICBzcHJpbnRm KHRtcGJ1ZiwiJTAyZCIseCk7CQkvKiAyLWRpZ2l0IG51bWVyaWMgbW9udGggKi8KLQotLyoKLSAg IHN0YXRlID0gMSA9IGhvdXJzCi0gICBzdGF0ZSA9IDIgPSBtaW51dGVzCi0gICBzdGF0ZSA9IDMg PSBzZWNvbmRzCi0gICBzdGF0ZSA9IDQgPSBmcmFjdGlvbnMgb2Ygc2Vjb25kcwotKi8KLQotICBk b3RpbWU6Ci0gICAgaWYgKGlzbGV0dGVyICYmIChzID09IHApKSB7Ci0JbWFrZXN0cigmY21kYXRl bXNnLCJVbmtub3duIGRhdGUtdGltZSB3b3JkIik7Ci0JZGVidWcoRjExMSwiY21jdnRkYXRlIixj bWRhdGVtc2csLTEpOwotCXJldHVybihOVUxMKTsKLSAgICB9Ci0gICAgaWYgKCF5ZWFyICYmIHl5 eXltbWRkWzBdKSB7Ci0JZGVidWcoRjExMCwiY21jdnRkYXRlIGRvdGltZSB5eXl5bW1kZCIseXl5 eW1tZGQsMCk7Ci0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLQkgIHllYXJidWZbaV0gPSB5eXl5 bW1kZFtpXTsKLQl5ZWFyYnVmWzRdID0gTlVMOwotCW1vbmJ1ZlswXSA9IHl5eXltbWRkWzRdOwot CW1vbmJ1ZlsxXSA9IHl5eXltbWRkWzVdOwotCW1vbmJ1ZlsyXSA9IE5VTDsKLQlkYXlidWZbMF0g PSB5eXl5bW1kZFs2XTsKLQlkYXlidWZbMV0gPSB5eXl5bW1kZFs3XTsKLQlkYXlidWZbMl0gPSBO VUw7Ci0JZGF5ID0gZGF5YnVmOwotCW5kYXkgPSBhdG9pKGRheWJ1Zik7Ci0JbW9udGggPSBtb25i dWY7Ci0JeWVhciA9IHllYXJidWY7Ci0gICAgfQotICAgIGlmICgheWVhcikgewotCW1ha2VzdHIo JmNtZGF0ZW1zZywiSW50ZXJuYWwgZXJyb3IgLSBkYXRlIG5vdCBkZWZhdWx0ZWQiKTsKLQlkZWJ1 ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7Ci0JcmV0dXJuKE5VTEwpOwotICAgIH0K LSAgICAvKiBHZXQgaGVyZSB3aXRoIGRheSwgbW9udGgsIGFuZCB5ZWFyIHNldCAqLwotICAgIGRl YnVnKEYxMTAsImNtY3Z0ZGF0ZSBkb3RpbWUgZGF5IixkYXksMCk7Ci0gICAgZGVidWcoRjExMCwi Y21jdnRkYXRlIGRvdGltZSBtb250aCIsbW9udGgsMCk7Ci0gICAgZGVidWcoRjExMCwiY21jdnRk YXRlIGRvdGltZSB5ZWFyIix5ZWFyLDApOwotICAgIGRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSBkb3Rp bWUgcyIscywwKTsKLSAgICBkZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgZG90aW1lIHAiLHAsMCk7Ci0g ICAgeCA9IGF0b2kobW9udGgpOwotICAgIGlmICh4ID4gMTIgfHwgeCA8IDEpIHsKLQltYWtlc3Ry KCZjbWRhdGVtc2csIk1vbnRoIG91dCBvZiByYW5nZSIpOwotCWRlYnVnKEYxMTEsImNtY3Z0ZGF0 ZSIsY21kYXRlbXNnLC0xKTsKLQlyZXR1cm4oTlVMTCk7Ci0gICAgfQotICAgIG5kYXkgID0gYXRv aShkYXkpOwotICAgIGkgPSBtZGF5c1t4XTsKLSAgICBpZiAoeCA9PSAyKSBpZiAoaXNsZWFwKGF0 b2koeWVhcikpKSBpKys7Ci0gICAgaWYgKG5kYXkgPiBpIHx8IG5kYXkgPCAxKSB7Ci0JbWFrZXN0 cigmY21kYXRlbXNnLCJEYXkgb3V0IG9mIHJhbmdlIik7Ci0JZGVidWcoRjExMSwiY21jdnRkYXRl IixjbWRhdGVtc2csLTEpOwotCXJldHVybihOVUxMKTsKLSAgICB9Ci0gICAgaWYgKCEqcCAmJiB0 ID09IDApIHsKLQlzcHJpbnRmKHpidWYsIiUwNGQlMDJkJTAyZCIsYXRvaSh5ZWFyKSxhdG9pKG1v bnRoKSxuZGF5KTsJCi0JZHAgPSB6YnVmOwotCWdvdG8geGN2dGRhdGU7Ci0gICAgfQotICAgIGlm ICgqcCA9PSAnKycgfHwgKnAgPT0gJy0nKSB7CS8qIEdNVCBvZmZzZXQgd2l0aG91dCBhIHRpbWUg Ki8KLQloaCA9IDA7CQkJCS8qIHNvIGRlZmF1bHQgdGltZSB0byAwMDowMDowMCAqLwotCW1tID0g MDsKLQlzcyA9IDA7Ci0JZ290byBjbXRpbWV6b25lOwkJLyogYW5kIGdvIGRvIHRpbWV6b25lICov Ci0gICAgfQotICAgIGlmICgqcCAmJiAhaXNkaWdpdCgqcCkgJiYgKnAgIT0gJzonKSB7Ci0JbWFr ZXN0cigmY21kYXRlbXNnLCJJbnZhbGlkIHRpbWUiKTsKLQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUi LGNtZGF0ZW1zZywtMSk7Ci0JcmV0dXJuKE5VTEwpOwotICAgIH0KLSAgICBzcHJpbnRmKHl5eXlt bWRkLCIlcyVzJTAyZCIseWVhcixtb250aCxuZGF5KTsgLyogZm9yIHR6IGNhbGN1bGF0aW9ucy4u LiAqLwotCi0gICAgc3RhdGUgPSAxOwkJCQkvKiBJbml0aWFsaXplIHRpbWUtcGFyc2luZyBGU0Eg Ki8KLSAgICBoaCA9IDA7CQkJCS8qIGhvdXJzICovCi0gICAgbW0gPSAwOwkJCQkvKiBtaW51dGVz ICovCi0gICAgc3MgPSAwOwkJCQkvKiBzZWNvbmRzICovCi0gICAgZmYgPSAtMTsJCQkJLyogZnJh Y3Rpb24gKi8KLSAgICBkID0gMDsJCQkJLyogRGlnaXQgY291bnRlciAqLwotICAgIHAyID0gcDsJ CQkJLyogUHJlbGltaW5hcnkgZGlnaXQgY291bnQuLi4gKi8KLSAgICB3aGlsZSAoaXNkaWdpdCgq cDIpKSB7Ci0JZCsrOwotCXAyKys7Ci0gICAgfQotICAgIGlmIChkID4gNikgewotCW1ha2VzdHIo JmNtZGF0ZW1zZywiVG9vIG1hbnkgdGltZSBkaWdpdHMiKTsKLQlkZWJ1ZyhGMTExLCJjbWN2dGRh dGUiLGNtZGF0ZW1zZywtMSk7Ci0JcmV0dXJuKE5VTEwpOwotICAgIH0KLSAgICBkID0gKGQgJiAx ICYmICpwMiAhPSAnOicpID8gMSA6IDA7CS8qIE9kZCBpbXBsaWVzIGxlYWRpbmcgJzAnICovCi0K LSAgICB3aGlsZSAoKnApIHsJCQkvKiBHZXQgdGhlIHRpbWUsIGlmIGFueSAqLwotCWlmIChpc2Rp Z2l0KCpwKSkgewkJLyogZGlnaXQgKi8KLQkgICAgaWYgKGQrKyA+IDEpIHsKLQkJc3RhdGUrKzsK LQkJZCA9IDE7Ci0JICAgIH0KLQkgICAgc3dpdGNoIChzdGF0ZSkgewotCSAgICAgIGNhc2UgMToJ CQkvKiBIb3VycyAqLwotCQloaCA9IGhoICogMTAgKyAoKnAgLSAnMCcpOwotCQlicmVhazsKLQkg ICAgICBjYXNlIDI6CQkJLyogTWludXRlcyAqLwotCQltbSA9IG1tICogMTAgKyAoKnAgLSAnMCcp OwotCQlicmVhazsKLQkgICAgICBjYXNlIDM6CQkJLyogU2Vjb25kcyAqLwotCQlzcyA9IHNzICog MTAgKyAoKnAgLSAnMCcpOwotCQlicmVhazsKLQkgICAgICBjYXNlIDQ6CQkJLyogRnJhY3Rpb24g b2Ygc2Vjb25kICovCi0JCWlmIChmZiA8IDApCi0JCSAgZmYgPSAoKnAgPiAnNCcpID8gMSA6IDA7 Ci0JCWJyZWFrOwotCSAgICB9Ci0JfSBlbHNlIGlmICgqcCA9PSAnOicpIHsJCS8qIENvbG9uICov Ci0JICAgIHN0YXRlKys7Ci0JICAgIGQgPSAwOwotCSAgICBpZiAoc3RhdGUgPiAzKSB7Ci0JCW1h a2VzdHIoJmNtZGF0ZW1zZywiVG9vIG1hbnkgdGltZSBmaWVsZHMiKTsKLQkJZGVidWcoRjExMSwi Y21jdnRkYXRlIixjbWRhdGVtc2csLTEpOwotCQlyZXR1cm4oTlVMTCk7Ci0JICAgIH0KLQl9IGVs c2UgaWYgKCpwID09ICcuJykgewotCSAgICBpZiAoc3RhdGUgPT0gMykgewotCQlzdGF0ZSA9IDQ7 Ci0JCWQgPSAwOwotCSAgICB9IGVsc2UgewotCQltYWtlc3RyKCZjbWRhdGVtc2csIkltcHJvcGVy IGZyYWN0aW9uIik7Ci0JCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKLQkJ cmV0dXJuKE5VTEwpOwotCSAgICB9Ci0JfSBlbHNlIGlmICgqcCA9PSBTUCkgewkJLyogU3BhY2Ug Ki8KLQkgICAgd2hpbGUgKCpwICYmICgqcCA9PSBTUCkpCS8qIHBvc2l0aW9uIHRvIGZpcnN0IG5v bnNwYWNlICovCi0JICAgICAgcCsrOwotCSAgICBicmVhazsKLQl9IGVsc2UgaWYgKGlzYWxwaGEo KnApKSB7CS8qIEFNL1BNL1ogb3IgdGltZXpvbmUgKi8KLQkgICAgYnJlYWs7Ci0JfSBlbHNlIGlm ICgqcCA9PSAnKycgfHwgKnAgPT0gJy0nKSB7IC8qIEdNVCBvZmZzZXQgKi8KLQkgICAgYnJlYWs7 Ci0JfSBlbHNlIHsKLQkgICAgbWFrZXN0cigmY21kYXRlbXNnLCJJbnZhbGlkIHRpbWUgY2hhcmFj dGVycyIpOwotCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7Ci0JICAg IHJldHVybihOVUxMKTsKLQl9Ci0JcCsrOwotICAgIH0KLSAgICBpZiAoISpwKQkJCQkvKiBJZiBu b3RoaW5nIGxlZnQgKi8KLSAgICAgIGdvdG8geGNtZGF0ZTsJCQkvKiBnbyBmaW5pc2ggdXAgKi8K LQotICAgIC8qIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBISCwgTU0sIFNTLCBhbmQgRkYgKi8KLSAg ICAvKiBOb3cgaGFuZGxlIHRoZSByZXN0OiBBTSwgUE0sIGFuZC9vciB0aW1lem9uZSBpbmZvICov Ci0KLSAgICBpZiAoIWNrc3RyY21wKHAsImFtIiwyLDApKSB7CS8qIEFNL1BNLi4uICovCi0JcG1m bGFnID0gMDsKLQlwICs9IDI7Ci0gICAgfSBlbHNlIGlmICghY2tzdHJjbXAocCwiYS5tLiIsNCww KSkgewotCXBtZmxhZyA9IDA7Ci0JcCArPSA0OwotICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKHAs InBtIiwyLDApKSB7Ci0JcG1mbGFnID0gMTsKLQlwICs9IDI7Ci0gICAgfSBlbHNlIGlmICghY2tz dHJjbXAocCwicC5tLiIsNCwwKSkgewotCXBtZmxhZyA9IDE7Ci0JcCArPSA0OwotICAgIH0KLSAg ICBpZiAocG1mbGFnICYmIGhoIDwgMTIpCQkvKiBJZiBQTSB3YXMgZ2l2ZW4gKi8KLSAgICAgIGho ICs9IDEyOwkJCQkvKiBhZGQgMTIgdG8gdGhlIGhvdXIgKi8KLQotICAgIC8qIE5vdyBoYW5kbGUg dGltZXpvbmUgKi8KLQotICBjbXRpbWV6b25lOgotICAgIGRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSB0 aW1lem9uZSIscCwwKTsKLQotICAgIHpoaCA9IDA7CQkJCS8qIEdNVCBvZmZzZXQgSEggKi8KLSAg ICB6bW0gPSAwOwkJCQkvKiBHTVQgb2Zmc2V0IE1NICovCi0gICAgZ210c2lnbiA9IDA7CQkJLyog U2lnbiBvZiBHTVQgb2Zmc2V0ICovCi0gICAgaXNnbXQgPSAwOwkJCQkvKiAxIGlmIHRpbWUgaXMg R01UICovCi0KLSAgICB3aGlsZSAoKnAgJiYgKnAgPT0gU1ApCQkvKiBHb2JibGUgc3BhY2VzICov Ci0gICAgICBwKys7Ci0gICAgaWYgKCEqcCkJCQkJLyogSWYgbm90aGluZyBsZWZ0ICovCi0gICAg ICBnb3RvIHhjbWRhdGU7CQkJLyogd2UncmUgZG9uZSAqLwotCi0gICAgaWYgKGlzYWxwaGEoKnAp KSB7CQkJLyogU29tZXRoaW5nIGxlZnQgKi8KLQlpbnQgem9uZSA9IDA7CQkJLyogQWxwaGFiZXRp YyBtdXN0IGJlIHRpbWV6b25lICovCi0JcDIgPSBwOwkJCQkvKiBJc29sYXRlIHRpbWV6b25lICov Ci0JcCsrOwotCXdoaWxlIChpc2FscGhhKCpwKSkKLQkgIHArKzsKLQlwMyA9IHA7Ci0JY2MgPSAq cDsKLQkqcCA9IE5VTDsKLQlwID0gcDI7CQkJCS8qIEhhdmUgdGltZXpvbmUsIGxvb2sgaXQgdXAg Ki8KLQl6b25lID0gbG9va3VwKHVzYXR6LHAsbnVzYXR6LE5VTEwpOwotCWRlYnVnKEYxMTEsImNt Y3Z0ZGF0ZSB0aW1lem9uZSBhbHBoYSIscCx6b25lKTsKLQotCWlmICh6b25lIDwgMCkgewkJCS8q IE5vdCBmb3VuZCAqLwotCSAgICBtYWtlc3RyKCZjbWRhdGVtc2csIlVua25vd24gdGltZXpvbmUi KTsKLQkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOwotCSAgICByZXR1 cm4oTlVMTCk7Ci0JfQotCWlzZ210Kys7CQkJLyogQWxsIGRhdGVzIGFyZSBHTVQgZnJvbSBoZXJl IGRvd24gKi8KLQlpZiAoem9uZSAhPSAwKSB7CQkvKiBCdXQgbm90IHRoaXMgb25lIHNvIG1ha2Ug aXQgR01UICovCi0JICAgIGhoICs9IHpvbmU7CQkJLyogUkZDIDgyMiB0aW1lem9uZTogRVNUIGV0 YyAqLwotCSAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgaGggKyB6b25lIiwiIixoaCk7Ci0JICAg IGlmIChoaCA+IDIzKSB7CQkvKiBPZmZzZXQgY3Jvc3NlcyBkYXRlIGJvdW5kYXJ5ICovCi0JCWlu dCBpOwotCQlsb25nIGpkOwotCQlqZCA9IG1qZCh5eXl5bW1kZCk7CS8qIEdldCBNSkQgKi8KLQkJ amQgKz0gaGggLyAyNDsJCS8qIEFkZCBuZXcgZGF5KHMpICovCi0JCWhoID0gaGggJSAyNDsJCS8q IGFuZCBjb252ZXJ0IGJhY2sgdG8geXl5eW1tZGQgKi8KLQkJY2tzdHJuY3B5KHl5eXltbWRkLG1q ZDJkYXRlKGpkKSxZWVlZTU1ERCk7Ci0JCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSB6b25lLWFkanVz dGVkIGRhdGUiLHl5eXltbWRkLGhoKTsKLQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLQkJICB5 ZWFyYnVmW2ldID0geXl5eW1tZGRbaV07Ci0JCXllYXJidWZbNF0gPSBOVUw7Ci0JCW1vbmJ1Zlsw XSA9IHl5eXltbWRkWzRdOwotCQltb25idWZbMV0gPSB5eXl5bW1kZFs1XTsKLQkJbW9uYnVmWzJd ID0gTlVMOwotCQlkYXlidWZbMF0gPSB5eXl5bW1kZFs2XTsKLQkJZGF5YnVmWzFdID0geXl5eW1t ZGRbN107Ci0JCWRheWJ1ZlsyXSA9IE5VTDsKLQkJZGF5ID0gZGF5YnVmOwotCQluZGF5ID0gYXRv aShkYXlidWYpOwotCQltb250aCA9IG1vbmJ1ZjsKLQkJeWVhciA9IHllYXJidWY7Ci0JICAgIH0K LQl9Ci0JcCA9IHAzOwkJCQkvKiBQdXQgYmFjayB3aGF0ZXZlciB3ZSBwb2tlZCBhYm92ZSAqLwot CSpwID0gY2M7Ci0KLSAgICB9IGVsc2UgaWYgKCpwID09ICcrJyB8fCAqcCA9PSAnLScpIHsgLyog R01UL1VUQyBvZmZzZXQgKi8KLQlwMyA9IHA7Ci0JZGVidWcoRjExMCwiY21jdnRkYXRlIHRpbWV6 b25lIEdNVCBvZmZzZXQiLHAsMCk7Ci0JZ210c2lnbiA9ICgqcCA9PSAnKycpID8gLTEgOiAxOwot CWlzZ210Kys7Ci0JcCsrOwotCXdoaWxlICgqcCA9PSBTUCkgcCsrOwotCWQgPSAwOwotCXAyID0g cDsKLQl3aGlsZSAoaXNkaWdpdCgqcCkpIHsJCS8qIENvdW50IGRpZ2l0cyAqLwotCSAgICBkKys7 Ci0JICAgIHArKzsKLQl9Ci0JaWYgKGQgIT0gNCkgewkJCS8qIFN0cmljdCBSRkMgWzJdODIyICov Ci0JICAgIGlzZ210ID0gMDsJCQkvKiBJZiBub3QgZXhhY3RseSA0IGRpZ2l0cyAqLwotCSAgICBw ID0gcDM7CQkJLyogaXQncyBub3QgYSBHTVQgb2Zmc2V0LiAqLwotCSAgICBnb3RvIGRlbHRhOwkJ CS8qIFNvIHRyZWF0IGl0IGFzIGEgZGVsdGEgdGltZS4gKi8KLQl9Ci0JZCA9IChkICYgMSAmJiAq cCAhPSAnOicpID8gMSA6IDA7IC8qIE9kZCBpbXBsaWVzIGxlYWRpbmcgJzAnICovCi0JcCA9IHAy OwotCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBHTVQgb2Zmc2V0IHNpZ24iLHAsZ210c2lnbik7Ci0J ZGVidWcoRjEwMSwiY21jdnRkYXRlIEdNVCBvZmZzZXQgZCIsIiIsZCk7Ci0Jc3RhdGUgPSAxOwot CXdoaWxlICgqcCkgewotCSAgICBpZiAoaXNkaWdpdCgqcCkpIHsJCS8qIGRpZ2l0ICovCi0JCWlm IChkKysgPiAxKSB7Ci0JCSAgICBzdGF0ZSsrOwotCQkgICAgZCA9IDE7Ci0JCX0KLQkJc3dpdGNo IChzdGF0ZSkgewotCQkgIGNhc2UgMToKLQkJICAgIHpoaCA9IHpoaCAqIDEwICsgKCpwIC0gJzAn KTsKLQkJICAgIGJyZWFrOwotCQkgIGNhc2UgMjoKLQkJICAgIHptbSA9IHptbSAqIDEwICsgKCpw IC0gJzAnKTsKLQkJICAgIGJyZWFrOwotCQkgIGRlZmF1bHQ6CQkvKiBJZ25vcmUgc2Vjb25kcyBv ciBmcmFjdGlvbnMgKi8KLQkJICAgIGJyZWFrOwotCQl9CQkJCi0JICAgIH0gZWxzZSBpZiAoKnAg PT0gJzonKSB7CS8qIENvbG9uICovCi0JCXN0YXRlKys7Ci0JCWQgPSAwOwotCSAgICB9IGVsc2Ug aWYgKCpwID09IFNQIHx8ICpwID09ICcoJykgewotCQlicmVhazsKLQkgICAgfSBlbHNlIHsKLQkJ cCA9IHAzOwkJCS8qIE1heWJlIGl0J3Mgbm90IGEgR01UIG9mZnNldC4gKi8KLQkJZ290byBkZWx0 YTsJCS8qIFNvIHRyZWF0IGl0IGFzIGEgZGVsdGEgdGltZS4gKi8KLQkgICAgfQotCSAgICBwKys7 Ci0JfQotICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgc291cmNlIHN0cmluZyBhZnRl ciB0aW1lem9uZSIscCwwKTsKLQotICAgIGlmICgqcCkgewkJCQkvKiBBbnl0aGluZyBsZWZ0PyAq LwotCXAyID0gcDsKLQl3aGlsZSAoKnAyID09IFNQKQkJLyogU2tpcCBwYXN0IHNwYWNlcyAqLwot CSAgcDIrKzsKLQlpZiAoKnAyID09ICcoJykgewkJLyogUkZDLTgyMiBjb21tZW50PyAqLwotCSAg ICBpbnQgcGMgPSAxOwkJCS8qIHBhcmVuIGNvdW50ZXIgKi8KLQkgICAgcDIrKzsKLQkgICAgd2hp bGUgKCpwMikgewotCQlpZiAoKnAyID09ICcpJykgewotCQkgICAgaWYgKC0tcGMgPT0gMCkgewot CQkJcDIrKzsKLQkJCWJyZWFrOwotCQkgICAgfQotCQl9IGVsc2UgaWYgKCpwMiA9PSAnKScpIHsK LQkJICAgIHBjKys7Ci0JCX0KLQkJcDIrKzsKLQkgICAgfQkJCi0JICAgIHdoaWxlICgqcDIgPT0g U1ApCQkvKiBTa2lwIHBhc3Qgc3BhY2VzICovCi0JICAgICAgcDIrKzsKLQkgICAgaWYgKCEqcDIp CQkJLyogQW55dGhpbmcgbGVmdD8gKi8KLQkgICAgICAqcCA9IE5VTDsJCQkvKiBObywgZXJhc2Ug Y29tbWVudCAqLwotCX0KLQlpZiAoISpwMikJCQkvKiBBbnl0aGluZyBsZWZ0PyAqLwotCSAgZ290 byB4Y21kYXRlOwkJCS8qIE5vLCBkb25lLiAqLwotCXAgPSBwMjsKLQotICAgICAgZGVsdGE6Ci0J ZGVidWcoRjExMCwiY21jdnRkYXRlIGRlbHRhIHl5eXltbWRkIix5eXl5bW1kZCwwKTsKLQlkZWJ1 ZyhGMTEwLCJjbWN2dGRhdGUgZGVsdGEgeWVhciIseWVhciwwKTsKLQlkZWJ1ZyhGMTEwLCJjbWN2 dGRhdGUgZGVsdGEgcCIscCwwKTsKLQotCWlmICgqcCA9PSAnKycgfHwgKnAgPT0gJy0nKSB7CS8q IERlbHRhIHRpbWUgKi8KLQkgICAgaW50IHN0YXRlID0gTkVFRF9EQVlTOwkvKiBTdGFydCBvZmYg bG9va2luZyBmb3IgZGF5cyAqLwotCSAgICBjaGFyIGMgPSAwOwotCSAgICBkc2lnbiA9IDE7CQkJ LyogR2V0IHNpZ24gKi8KLQkgICAgaWYgKCpwKysgPT0gJy0nKQotCSAgICAgIGRzaWduID0gLTE7 Ci0JICAgIHdoaWxlICgqcCA9PSBTUCkJCS8qIFNraXAgaW50ZXJ2ZW5pbmcgc3BhY2VzICovCi0J ICAgICAgcCsrOwotCSAgICB3aGlsZSAoc3RhdGUpIHsJCS8qIEZTQSB0byBwYXJzZSBkZWx0YSB0 aW1lICovCi0JCWlmIChzdGF0ZSA8IDAgfHwgIWlzZGlnaXQoKnApKSB7Ci0JCSAgICBtYWtlc3Ry KCZjbWRhdGVtc2csIkludmFsaWQgZGVsdGEgdGltZSIpOwotCQkgICAgZGVidWcoRjExMSwiY21j dnRkYXRlIixjbWRhdGVtc2csLTEpOwotCQkgICAgcmV0dXJuKE5VTEwpOwotCQl9Ci0JCXAyID0g cDsJCQkvKiBHZXQgbmV4dCBudW1lcmljIGZpZWxkICovCi0JCXdoaWxlIChpc2RpZ2l0KCpwMikp Ci0JCSAgcDIrKzsKLQkJYyA9ICpwMjsJCS8qIEFuZCBicmVhayBjaGFyYWN0ZXIgKi8KLQkJKnAy ID0gTlVMOwkJLyogVGVybWluYXRlIHRoZSBudW1iZXIgKi8KLQotCQlzd2l0Y2ggKHN0YXRlKSB7 CS8qIEludGVycHJldCBhY2NvcmRpbmcgdG8gc3RhdGUgKi8KLQkJICBjYXNlIE5FRURfREFZUzoJ LyogSW5pdGlhbCAqLwotCQkgICAgaWYgKChjID09ICctJykgfHwJLyogVk1TIGZvcm1hdCAqLwot CQkJKChjID09ICdkJyB8fCBjID09ICdEJykKLQkJCSAmJiAhaXNhbHBoYSgqKHAyKzEpKSkpIHsg LyogRGF5cyAqLwotCQkJZGRheXMgPSBhdG9pKHApOwotCQkJaWYgKCEqKHAyKzEpKQkJCQotCQkJ ICBzdGF0ZSA9IDA7Ci0JCQllbHNlCQkgICAgICAvKiBpZiBhbnl0aGluZyBpcyBsZWZ0ICovCi0J CQkgIHN0YXRlID0gTkVFRF9IUlM7ICAgLyogbm93IHdlIHdhbnQgaG91cnMuICovCi0JCSAgICB9 IGVsc2UgaWYgKChjID09ICdXJyB8fCBjID09ICd3JykgJiYgIWlzYWxwaGEoKihwMisxKSkpIHsK LQkJCWRkYXlzID0gYXRvaShwKSAqIDc7ICAgLyogd2Vla3MuLi4gKi8KLQkJCWlmICghKihwMisx KSkJCQkKLQkJCSAgc3RhdGUgPSAwOwotCQkJZWxzZQotCQkJICBzdGF0ZSA9IE5FRURfSFJTOwot CQkgICAgfSBlbHNlIGlmICgoYyA9PSAnTScgfHwgYyA9PSAnbScpICYmICFpc2FscGhhKCoocDIr MSkpKSB7Ci0JCQlkbW9udGhzID0gYXRvaShwKTsgLyogbW9udGhzLi4uICovCi0JCQlpZiAoISoo cDIrMSkpCQkJCi0JCQkgIHN0YXRlID0gMDsKLQkJCWVsc2UKLQkJCSAgc3RhdGUgPSBORUVEX0hS UzsKLQkJICAgIH0gZWxzZSBpZiAoKGMgPT0gJ1knIHx8IGMgPT0gJ3knKSAmJiAhaXNhbHBoYSgq KHAyKzEpKSkgewotCQkJZHllYXJzID0gYXRvaShwKTsgLyogeWVhcnMuLi4gKi8KLQkJCWlmICgh KihwMisxKSkJCQkKLQkJCSAgc3RhdGUgPSAwOwotCQkJZWxzZQotCQkJICBzdGF0ZSA9IE5FRURf SFJTOwotCQkgICAgfSBlbHNlIGlmIChjID09ICc6JykgeyAvKiBkZWxpbWl0ZXIgaXMgY29sb24g Ki8KLQkJCWRob3VycyA9IGF0b2kocCk7ICAvKiBzbyBpdCdzIGhvdXJzICovCi0JCQlzdGF0ZSA9 IE5FRURfTUlOUzsgLyogbm93IHdlIHdhbnQgbWludXRlcyAqLwotCQkgICAgfSBlbHNlIGlmICgh YykgeyAgICAgICAvKiBlbmQgb2Ygc3RyaW5nICovCi0JCQlkaG91cnMgPSBhdG9pKHApOyAgLyog aXQncyBzdGlsbCBob3VycyAqLwotCQkJc3RhdGUgPSAwOyAgICAgICAgIC8qIGFuZCB3ZSdyZSBk b25lICovCi0JCSAgICB9IGVsc2UgaWYgKGlzYWxwaGEoYykgfHwgYyA9PSBTUCkgewotCQkJaWYg KGMgPT0gU1ApIHsJLyogSXQncyBhIGtleXdvcmQ/ICovCi0JCQkgICAgcDIrKzsJLyogU2tpcCBz cGFjZXMgKi8KLQkJCSAgICB3aGlsZSAoKnAyID09IFNQKQotCQkJICAgICAgcDIrKzsKLQkJCX0g ZWxzZSB7CS8qIG9yIHJlcGxhY2UgZmlyc3QgbGV0dGVyICovCi0JCQkgICAgKnAyID0gYzsKLQkJ CX0KLQkJCXAzID0gcDI7CS8qIHAyIHBvaW50cyB0byBiZWdpbm5pbmcgb2Yga2V5d29yZCAqLwot CQkJd2hpbGUgKGlzYWxwaGEoKnAzKSkgLyogRmluZCBlbmQgb2Yga2V5d29yZCAqLwotCQkJICBw MysrOwotCQkJYyA9ICpwMzsJLyogTlVMIGl0IG91dCBzbyB3ZSBjYW4gbG9vayBpdCB1cCAqLwot CQkJaWYgKCpwMykJLyogcDMgcG9pbnRzIHRvIGtleXdvcmQgdGVybWluYXRvciAqLwotCQkJICAq cDMgPSBOVUw7Ci0JCQl1bml0cyA9IGxvb2t1cCh0aW1ldW5pdHMscDIsbnVuaXRzLE5VTEwpOwot CQkJaWYgKHVuaXRzIDwgMCkgewotCQkJICAgIG1ha2VzdHIoJmNtZGF0ZW1zZywiSW52YWxpZCB1 bml0cyBpbiBkZWx0YSB0aW1lIik7Ci0JCQkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRh dGVtc2csLTEpOwotCQkJICAgIHJldHVybihOVUxMKTsKLQkJCX0KLQkJCSpwMiA9IE5VTDsJLyog UmUtdGVybWluYXRlIHRoZSBudW1iZXIgKi8KLQkJCSpwMyA9IGM7Ci0JCQl3aGlsZSAoKnAzID09 IFNQKSAvKiBQb2ludCBhdCBmaWVsZCBhZnRlciB1bml0cyAqLwotCQkJICBwMysrOwotCQkJcDIg PSBwMzsKLQkJCXN3aXRjaCAodW5pdHMpIHsKLQkJCSAgY2FzZSBUVV9EQVlTOgotCQkJICAgIGRk YXlzID0gYXRvaShwKTsKLQkJCSAgICBicmVhazsKLQkJCSAgY2FzZSBUVV9XRUVLUzoKLQkJCSAg ICBkZGF5cyA9IGF0b2kocCkgKiA3OwotCQkJICAgIGJyZWFrOwotCQkJICBjYXNlIFRVX01PTlRI UzoKLQkJCSAgICBkbW9udGhzID0gYXRvaShwKTsKLQkJCSAgICBicmVhazsKLQkJCSAgY2FzZSBU VV9ZRUFSUzoKLQkJCSAgICBkeWVhcnMgPSBhdG9pKHApOwotCQkJICAgIGJyZWFrOwotCQkJfQot CQkJaWYgKCpwMikgewotCQkJICAgIHN0YXRlID0gTkVFRF9IUlM7Ci0JCQkgICAgcDItLTsKLQkJ CX0gZWxzZQotCQkJICBzdGF0ZSA9IDA7Ci0KLQkJICAgIH0gZWxzZSB7CQkvKiBBbnl0aGluZyBl bHNlICovCi0JCQlzdGF0ZSA9IC0xOwkvKiBpcyBhbiBlcnJvciAqLwotCQkgICAgfQotCQkgICAg YnJlYWs7Ci0JCSAgY2FzZSBORUVEX0hSUzoJLyogTG9va2luZyBmb3IgaG91cnMgKi8KLQkJICAg IGRlYnVnKEYwMDAsImNtY3Z0ZGF0ZSBORUVEX0hSUyIscCxjKTsKLQkJICAgIGlmIChjID09ICc6 JykgewotCQkJZGhvdXJzID0gYXRvaShwKTsKLQkJCXN0YXRlID0gTkVFRF9NSU5TOwotCQkgICAg fSBlbHNlIGlmICghYykgewotCQkJZGhvdXJzID0gYXRvaShwKTsKLQkJCXN0YXRlID0gMDsKLQkJ ICAgIH0gZWxzZSB7Ci0JCQlzdGF0ZSA9IC0xOwotCQkgICAgfQotCQkgICAgYnJlYWs7Ci0JCSAg Y2FzZSBORUVEX01JTlM6CS8qIExvb2tpbmcgZm9yIG1pbnV0ZXMgKi8KLQkJICAgIGlmIChjID09 ICc6JykgewotCQkJZG1pbnMgPSBhdG9pKHApOwotCQkJc3RhdGUgPSBORUVEX1NFQ1M7Ci0JCSAg ICB9IGVsc2UgaWYgKCFjKSB7Ci0JCQlkbWlucyA9IGF0b2kocCk7Ci0JCQlzdGF0ZSA9IDA7Ci0J CSAgICB9IGVsc2UgewotCQkJc3RhdGUgPSAtMTsKLQkJICAgIH0KLQkJICAgIGJyZWFrOwotCQkg IGNhc2UgTkVFRF9TRUNTOgkvKiBMb29raW5nIGZvciBzZWNvbmRzICovCi0JCSAgICBpZiAoYyA9 PSAnLicpIHsKLQkJCWRzZWNzID0gYXRvaShwKTsKLQkJCXN0YXRlID0gTkVFRF9GUkFDOwotCQkg ICAgfSBlbHNlIGlmICghYykgewotCQkJZHNlY3MgPSBhdG9pKHApOwotCQkJc3RhdGUgPSAwOwot CQkgICAgfSBlbHNlIHsKLQkJCXN0YXRlID0gLTE7Ci0JCSAgICB9Ci0JCSAgICBicmVhazsKLQkJ ICBjYXNlIE5FRURfRlJBQzoJLyogRnJhY3Rpb24gb2Ygc2Vjb25kICovCi0JCSAgICBpZiAoIWMg JiYgcmRpZ2l0cyhwKSkgewotCQkJaWYgKCpwID4gJzQnKQotCQkJICBkc2VjcysrOwotCQkJc3Rh dGUgPSAwOwotCQkgICAgfSBlbHNlIHsKLQkJCXN0YXRlID0gLTE7Ci0JCSAgICB9Ci0JCSAgICBi cmVhazsKLQkJfQotCQlpZiAoYykJCQkvKiBuZXh0IGZpZWxkIGlmIGFueSAqLwotCQkgIHAgPSBw MiArIDE7Ci0JICAgIH0KLQkgICAgaGF2ZWRlbHRhID0gMTsKLQotCX0gZWxzZSB7Ci0JICAgIG1h a2VzdHIoJmNtZGF0ZW1zZywiRXh0cmFuZW91cyBtYXRlcmlhbCBhdCBlbmQiKTsKLQkgICAgZGVi dWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOwotCSAgICByZXR1cm4oTlVMTCk7Ci0J fQotICAgIH0KLQotIHhjbWRhdGU6Ci0KLSAgICBpZiAoKHQgIT0gMiAmJiBoaCA+IDI0KSB8fCBo aCA8IDApIHsgLyogSG91ciByYW5nZSBjaGVjayAqLwotCW1ha2VzdHIoJmNtZGF0ZW1zZywiSW52 YWxpZCBob3VycyIpOwotCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKLQly ZXR1cm4oTlVMTCk7Ci0gICAgfQotICAgIGlmIChtbSA+IDU5KSB7CQkJLyogTWludXRlIHJhbmdl IGNoZWNrICovCi0JbWFrZXN0cigmY21kYXRlbXNnLCJJbnZhbGlkIG1pbnV0ZXMiKTsKLQlkZWJ1 ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7Ci0JcmV0dXJuKE5VTEwpOwotICAgIH0K LSAgICBpZiAoZmYgPiAwKSB7CQkJLyogRnJhY3Rpb24gb2Ygc2Vjb25kPyAqLwotCWlmIChzcyA8 IDU5KSB7Ci0JICAgIHNzKys7Ci0JICAgIGZmID0gMDsKLQl9IGVsc2UgaWYgKG1tIDwgNTkpIHsK LQkgICAgc3MgPSAwOwotCSAgICBtbSsrOwotCSAgICBmZiA9IDA7Ci0JfSBlbHNlIGlmIChoaCA8 IDI0KSB7Ci0JICAgIHNzID0gMDsKLQkgICAgbW0gPSAwOwotCSAgICBoaCsrOwotCSAgICBmZiA9 IDA7Ci0JfQotCS8qIE11c3QgYWRkIGEgZGF5IC0tIGxlYXZlIGZmIGF0IDEuLi4gKi8KLQkvKiAo RE8gU09NRVRISU5HIEFCT1VUIFRISVMgTEFURVIpICovCi0gICAgfQotICAgIGlmIChzcyA+IDYw KSB7CQkJLyogU2Vjb25kcyByYW5nZSBjaGVjayAqLwotCW1ha2VzdHIoJmNtZGF0ZW1zZywiSW52 YWxpZCBzZWNvbmRzIik7IC8qIDYwIGlzIG9rIGJlY2F1c2Ugb2YgKi8KLQlkZWJ1ZyhGMTExLCJj bWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7ICAvKiBMZWFwIFNlY29uZC4gKi8KLQlyZXR1cm4oTlVM TCk7Ci0gICAgfQotICAgIGlmICgobW0gPCAwIHx8IHNzIDwgMCkgfHwKLQkodCAhPSAyICYmIChz cyA+IDAgfHwgbW0gPiAwKSAmJiBoaCA+IDIzKSkgewotCW1ha2VzdHIoJmNtZGF0ZW1zZywiSW52 YWxpZCBtaW51dGVzIG9yIHNlY29uZHMiKTsKLQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0 ZW1zZywtMSk7Ci0JcmV0dXJuKE5VTEwpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJjbWN2dGRh dGUgeWVhciIseWVhciwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgbW9udGgiLG1vbnRo LDApOwotICAgIGRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBuZGF5IiwiIixuZGF5KTsKLSAgICBkZWJ1 ZyhGMTAxLCJjbWN2dGRhdGUgaGgiLCIiLGhoKTsKLSAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUg bW0iLCIiLG1tKTsKLSAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgc3MiLCIiLHNzKTsKLSAgICBk ZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgZ210c2lnbiIsIiIsZ210c2lnbik7Ci0gICAgZGVidWcoRjEw MSwiY21jdnRkYXRlIHpoaCIsIiIsemhoKTsKLSAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgem1t IiwiIix6bW0pOwotICAgIGRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBpc2dtdCIsIiIsaXNnbXQpOwot Ci0jaWZkZWYgWkxPQ0FMVElNRQotLyogSGFuZGxlIHRpbWV6b25lIC0tIGZpcnN0IGNvbnZlcnQg dG8gR01UICovCi0KLSAgICB6ZGQgPSAwOwkJCQkvKiBEYXlzIGNoYW5nZWQgKi8KLSAgICBpZiAo aXNnbXQgJiYgKHptbSB8fCB6aGgpKSB7CS8qIElmIEdNVCBvZmZzZXQgZ2l2ZW4gKi8KLQlsb25n IHNlYzEsIHNlYzIsIHp6OwotCXNlYzEgPSBzcyArIDYwICogbW0gKyAzNjAwICogaGg7Ci0Jc2Vj MiA9IGdtdHNpZ24gKiAoNjAgKiB6bW0gKyAzNjAwICogemhoKTsKLQlzZWMxICs9IHNlYzI7Ci0J aWYgKHNlYzEgPCAwKSB7Ci0JICAgIHNlYzEgPSAwIC0gc2VjMTsKLQkgICAgemRkID0gMEwgLSAo c2VjMSAvIDg2NDAwTCk7Ci0JICAgIHNlYzEgPSBzZWMxICUgODY0MDBMOwotCX0gZWxzZSBpZiAo c2VjMSA+IDg2NDAwTCkgewotCSAgICB6ZGQgPSBzZWMxIC8gODY0MDBMOwotCSAgICBzZWMxID0g c2VjMSAlIDg2NDAwTDsKLQl9Ci0Jc3MgPSBzZWMxICUgNjA7Ci0JenogPSBzZWMxIC8gNjA7Ci0J bW0gPSB6eiAlIDYwOwotCWhoID0genogLyA2MDsKLQlkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgTkVX IGhoIiwiIixoaCk7Ci0JZGVidWcoRjEwMSwiY21jdnRkYXRlIE5FVyBtbSIsIiIsbW0pOwotCWRl YnVnKEYxMDEsImNtY3Z0ZGF0ZSBORVcgZGQiLCIiLHpkZCk7Ci0KLS8qIEF0IHRoaXMgcG9pbnQg aGg6bW06c3MgaXMgaW4gR01UIGFuZCB6ZGQgaXMgdGhlIGNhbGVuZGFyIGFkanVzdG1lbnQgKi8K LQotICAgIH0KLSNlbmRpZiAvKiBaTE9DQUxUSU1FICovCi0KLSAgICBpZiAoeXl5eW1tZGRbMF0g JiYgIXllYXIpIHsKLQlja3N0cm5jcHkoeWVhcmJ1Zix5eXl5bW1kZCw1KTsKLQlja3N0cm5jcHko bW9uYnVmLCZ5eXl5bW1kZFs0XSwzKTsKLQlja3N0cm5jcHkoZGF5YnVmLCZ5eXl5bW1kZFs2XSwz KTsKLQl5ZWFyID0geWVhcmJ1ZjsKLQltb250aCA9IG1vbmJ1ZjsKLQlkYXkgPSBkYXlidWY7Ci0J bmRheSA9IGF0b2koZGF5YnVmKTsKLSAgICB9Ci0gICAgc3ByaW50Zih6YnVmLCIlMDRkJTAyZCUw MmQgJTAyZDolMDJkOiUwMmQiLCAvKiBTQUZFICovCi0JICAgIGF0b2koeWVhciksYXRvaShtb250 aCksbmRheSxoaCxtbSxzcwotCSAgICApOwotICAgIGRwID0gemJ1ZjsKLQotI2lmZGVmIFpMT0NB TFRJTUUKLSAgICAvKiBOb3cgY29udmVydCBmcm9tIEdNVCB0byBsb2NhbCB0aW1lICovCi0KLSAg ICBpZiAoaXNnbXQpIHsJCQkvKiBJZiBHTVQgY29udmVydCB0byBsb2NhbCB0aW1lICovCi0JZGVi dWcoRjExMCwiY21jdnRkYXRlIEdNVCAxIixkcCwwKTsKLQlpZiAoemRkKSB7CQkJLyogQXBwbHkg YW55IGNhbGVuZGFyIGFkanVzdG1lbnQgKi8KLQkgICAgbG9uZyB6ejsKLQkgICAgenogPSBtamQo ZHApICsgemRkOwotCSAgICBzcHJpbnRmKHpidWYsIiVzICUwMmQ6JTAyZDolMDJkIixtamQyZGF0 ZSh6eiksaGgsbW0sc3MpOwotCX0KLQlkZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgR01UIDIiLGRwLDAp OwotCWlmICgocCA9IHpsb2NhbHRpbWUoZHApKSkgewotCSAgICBkZWJ1ZyhGMTEwLCJjbWN2dGRh dGUgYXNjdGltZSB6bG9jYWx0aW1lIixwLDApOwotCSAgICBpZiAocCkgY2tzdHJuY3B5KHpidWYs cCwxOCk7Ci0JfQotCWRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSBHTVQgMyIsZHAsMCk7Ci0JZm9yIChp ID0gMDsgaSA8IDQ7IGkrKykKLQkgIHllYXJidWZbaV0gPSBkcFtpXTsKLQl5ZWFyYnVmWzRdID0g TlVMOwotCW1vbmJ1ZlswXSA9IGRwWzRdOwotCW1vbmJ1ZlsxXSA9IGRwWzVdOwotCW1vbmJ1Zlsy XSA9IE5VTDsKLQlkYXlidWZbMF0gPSBkcFs2XTsKLQlkYXlidWZbMV0gPSBkcFs3XTsKLQlkYXli dWZbMl0gPSBOVUw7Ci0JZGF5ID0gZGF5YnVmOwotCW5kYXkgPSBhdG9pKGRheWJ1Zik7Ci0JbW9u dGggPSBtb25idWY7Ci0JeWVhciA9IHllYXJidWY7Ci0JaGggPSBhdG9pKCZkcFs5XSk7Ci0JbW0g PSBhdG9pKCZkcFsxMl0pOwotCXNzID0gYXRvaSgmZHBbMTVdKTsKLSAgICB9Ci0jZW5kaWYgLyog WkxPQ0FMVElNRSAqLwotCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKSB7Ci0JZGVidWco RjEwMSwiY21jdnRkYXRlIGhvdXIiLCIiLGhoKTsKLQlkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgbWlu dXRlIiwiIixtbSk7Ci0JZGVidWcoRjEwMSwiY21jdnRkYXRlIHNlY29uZCIsIiIsc3MpOwotICAg IH0KLSNlbmRpZiAvKiBERUJMT0cgKi8KLQotICAgIG1ha2VzdHIoJmNtZGF0ZW1zZyxOVUxMKTsK LSAgICBpZiAoaGF2ZWRlbHRhKSB7Ci0jaWZkZWYgREVCVUcKLQlpZiAoZGVibG9nKSB7Ci0JICAg IGRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSBiYXNlICIsZHAsMCk7Ci0JICAgIGRlYnVnKEYxMDEsImNt Y3Z0ZGF0ZSBkZWx0YSBzaWduIiwiIixkc2lnbik7Ci0JICAgIGRlYnVnKEYxMDEsImNtY3Z0ZGF0 ZSBkZWx0YSB5cnMgIiwiIixkeWVhcnMpOwotCSAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgZGVs dGEgbW9zICIsIiIsZG1vbnRocyk7Ci0JICAgIGRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBkZWx0YSBk YXlzIiwiIixkZGF5cyk7Ci0JICAgIGRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBkZWx0YSBocnMgIiwi IixkaG91cnMpOwotCSAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgZGVsdGEgbWlucyIsIiIsZG1p bnMpOwotCSAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgZGVsdGEgc2VjcyIsIiIsZHNlY3MpOwot CX0KLSNlbmRpZiAvKiBERUJMT0cgKi8KLQlpZiAoIShkcCA9IGNtZGVsdGEoYXRvaSh5ZWFyKSwK LQkJICAgIGF0b2kobW9udGgpLAotCQkgICAgbmRheSwgaGgsIG1tLCBzcywKLQkJICAgIGRzaWdu LCBkeWVhcnMsIGRtb250aHMsIGRkYXlzLCBkaG91cnMsIGRtaW5zLCBkc2VjcykpKSB7Ci0JICAg IGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKLQkgICAgcmV0dXJuKE5VTEwp OwotCX0KLSAgICB9Ci0KLSAgeGN2dGRhdGU6CQkJCS8qIEV4aXQgcG9pbnQgZm9yIHN1Y2Nlc3Mg Ki8KLSAgICB7Ci0JaW50IGxlbiwgaywgbjsKLQljaGFyICogcDsKLQlkZWJ1ZyhGMTEwLCJjbWN2 dGRhdGUgeGN2dGRhdGUgZHAiLGRwLDApOwotCWlmICghZHApIGRwID0gIiI7CQkvKiBTaG91bGRu J3QgaGFwcGVuICovCi0JaWYgKCEqZHApIHJldHVybihOVUxMKTsJCS8qIC4uLiAqLwotCWxlbiA9 IHN0cmxlbihkcCk7Ci0JZGVidWcoRjExMSwiY21jdnRkYXRlIHJlc3VsdCIsZHAsbGVuKTsKLQlr ID0gY21kYXRlYnAgLSAoY2hhciAqKWNtZGF0ZWJ1ZjsgLyogU3BhY2UgdXNlZCAqLwotCW4gPSBD TURBVEVCVUYgLSBrIC0gMTsJCS8qIFNwYWNlIGxlZnQgKi8KLQlpZiAobiA8IGxlbikgewkJCS8q IE5vdCBlbm91Z2g/ICovCi0JICAgIGNtZGF0ZWJwID0gY21kYXRlYnVmOwkvKiBXcmFwIGFyb3Vu ZCAqLwotCSAgICBuID0gQ01EQVRFQlVGOwotCX0KLQlja3N0cm5jcHkoY21kYXRlYnAsZHAsbik7 Ci0JcCA9IGNtZGF0ZWJwOwotCWNtZGF0ZWJwICs9IGxlbiArIDE7Ci0JcmV0dXJuKHApOwotICAg IH0KLX0KLQotaW50Ci1jbXZkYXRlKGQpIGNoYXIgKiBkOyB7CQkJLyogVmVyaWZ5IGRhdGUtdGlt ZSAqLwotICAgIGludCBpOwotICAgIGlmICghZCkgcmV0dXJuKDApOwotICAgIGlmICgoaW50KXN0 cmxlbihkKSAhPSAxNykgcmV0dXJuKDApOwotICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsg aWYgKCFpc2RpZ2l0KGRbaV0pKSByZXR1cm4oMCk7IH0KLSAgICBpZiAoIWlzZGlnaXQoZFs5XSkg IHx8ICFpc2RpZ2l0KGRbMTBdKSB8fAotCSFpc2RpZ2l0KGRbMTJdKSB8fCAhaXNkaWdpdChkWzEz XSkgfHwKLQkhaXNkaWdpdChkWzE1XSkgfHwgIWlzZGlnaXQoZFsxNl0pKQotICAgICAgcmV0dXJu KDApOwotICAgIGlmICghY2tzdHJjaHIoIiBUdF8tOiIsZFs4XSkpIHJldHVybigwKTsKLSAgICBp ZiAoZFsxMV0gIT0gJzonICYmIGRbMTRdICE9ICc6JykgcmV0dXJuKDApOwotICAgIHJldHVybigx KTsKLX0KLQotLyogYyBtIGQgaSBmIGYgZCBhIHQgZSAgLS0gIEdldCBkaWZmZXJlbmNlIGJldHdl ZW4gdHdvIGRhdGUtdGltZXMgKi8KLQotY2hhciAqCi1jbWRpZmZkYXRlKGQxLGQyKSBjaGFyICog ZDEsICogZDI7IHsKLSAgICBjaGFyIGQxYnVmWzldLCBkMmJ1Zls5XTsKLSAgICBjaGFyIHgxYnVm WzE4XSwgeDJidWZbMThdOwotICAgIGNoYXIgKiBwOwotCi0gICAgaW50IGhoMSA9IDAsIG1tMSA9 IDAsIHNzMSA9IDA7Ci0gICAgaW50IGhoMiA9IDAsIG1tMiA9IDAsIHNzMiA9IDA7Ci0gICAgaW50 IGhoLCBtbSwgc3M7Ci0gICAgaW50IHNpZ247Ci0gICAgbG9uZyBqZDEsIGpkMiwgamQsIGYxLCBm MiwgZng7Ci0gICAgc3RhdGljIGNoYXIgcmVzdWx0WzI0XSwgKnJwOwotCi0gICAgZGVidWcoRjEx MCwiY21kaWZmZGF0ZSBkMSBBIixkMSwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJjbWRpZmZkYXRlIGQy IEEiLGQyLDApOwotCi0gICAgaWYgKCEocCA9IGNtY3Z0ZGF0ZShkMSwxKSkpCQkvKiBDb252ZXJ0 IGRhdGVzIHRvIHN0YW5kYXJkIGZvcm1hdCAqLwotICAgICAgcmV0dXJuKE5VTEwpOwotICAgIGNr c3RybmNweSh4MWJ1ZixwLDE4KTsKLSAgICBkMSA9IHgxYnVmOwotCi0gICAgaWYgKCEocCA9IGNt Y3Z0ZGF0ZShkMiwxKSkpCi0gICAgICByZXR1cm4oTlVMTCk7Ci0gICAgY2tzdHJuY3B5KHgyYnVm LHAsMTgpOwotICAgIGQyID0geDJidWY7Ci0KLSAgICBkZWJ1ZyhGMTEwLCJjbWRpZmZkYXRlIGQx IEIiLGQxLDApOwotICAgIGRlYnVnKEYxMTAsImNtZGlmZmRhdGUgZDIgQiIsZDIsMCk7Ci0gICAg aWYgKCFjbXZkYXRlKGQxKSB8fCAhY212ZGF0ZShkMikpCi0gICAgICByZXR1cm4oTlVMTCk7Ci0K LSAgICBoaDEgPSBhdG9pKCZkMVs5XSk7CQkJLyogR2V0IGhvdXJzLCBtaW51dGVzLCBhbmQgc2Vj b25kcyAqLwotICAgIG1tMSA9IGF0b2koJmQxWzEyXSk7CQkvKiBmb3IgZmlyc3QgZGF0ZSAqLwot ICAgIHNzMSA9IGF0b2koJmQxWzE1XSk7Ci0gICAgY2tzdHJuY3B5KGQxYnVmLGQxLDkpOwotCi0g ICAgaGgyID0gYXRvaSgmZDJbOV0pOwkJCS8qIGRpdHRvIGZvciBzZWNvbmQgZGF0ZSAqLwotICAg IG1tMiA9IGF0b2koJmQyWzEyXSk7Ci0gICAgc3MyID0gYXRvaSgmZDJbMTVdKTsKLSAgICBja3N0 cm5jcHkoZDJidWYsZDIsOSk7Ci0gICAgCi0gICAgamQxID0gbWpkKGQxYnVmKTsJCQkvKiBHZXQg dGhlIHR3byBKdWxpYW4gZGF0ZXMgKi8KLSAgICBqZDIgPSBtamQoZDJidWYpOwotICAgIGYxID0g c3MxICsgNjAgKiBtbTEgKyAzNjAwICogaGgxOwkvKiBDb252ZXJ0IGZpcnN0IHRpbWUgdG8gc2Vj b25kcyAqLwotCi0gICAgZjIgPSBzczIgKyA2MCAqIG1tMiArIDM2MDAgKiBoaDI7CS8qIERpdHRv IGZvciBzZWNvbmQgdGltZSAqLwotICAgIGRlYnVnKEYxMDEsImNtZGlmZmRhdGUgamQxIiwiIixq ZDEpOwotICAgIGRlYnVnKEYxMDEsImNtZGlmZmRhdGUgZjEiLCIiLGYxKTsKLSAgICBkZWJ1ZyhG MTAxLCJjbWRpZmZkYXRlIGpkMiIsIiIsamQyKTsKLSAgICBkZWJ1ZyhGMTAxLCJjbWRpZmZkYXRl IGYyIiwiIixmMik7Ci0gIAotICAgIGlmIChqZDIgPiBqZDEgfHwgKGpkMSA9PSBqZDIgJiYgZjIg PiBmMSkpIHsKLSAgICAgICAgc2lnbiA9IC0xOyAKLSAgICAgICAgaWYgKGYxID4gZjIpIHtqZDIt LTsgZjIgKz0gODY0MDBMO30KLSAgICAgICAgamQgPSBqZDIgLSBqZDE7Ci0gICAgICAgIGZ4ID0g ZjIgLSBmMTsKLSAgICB9IGVsc2UgewotICAgICAgICBzaWduID0gMTsKLSAgICAgICAgaWYgKGYy ID4gZjEpIHtqZDEtLTsgZjEgKz0gODY0MDBMO30KLSAgICAgICAgamQgPSBqZDEgLSBqZDI7Ci0g ICAgICAgIGZ4ID0gZjEgLSBmMjsKLSAgICB9Ci0gICAgZGVidWcoRjExMSwiY21kaWZmZGF0ZSBz aWduIGpkIixzaWduPDA/Ii0iOiIrIixqZCk7Ci0gICAgZGVidWcoRjEwMSwiY21kaWZmZGF0ZSBm eCIsIiIsZngpOwotICAKLSAgICBoaCA9IChpbnQpIChmeCAvIDM2MDBMKTsJCS8qIENvbnZlcnQg c2Vjb25kcyB0byBoaDptbTpzcyAqLwotCi0gICAgbW0gPSAoaW50KSAoZnggJSAzNjAwTCkgLyA2 MEw7Ci0gICAgc3MgPSAoaW50KSAoZnggJSAzNjAwTCkgJSA2MEw7Ci0KLSAgICBycCA9IHJlc3Vs dDsJCQkvKiBGb3JtYXQgdGhlIHJlc3VsdCAqLwotICAgICpycCsrID0gKHNpZ24gPCAwKSA/ICct JyA6ICcrJzsKLSAgICBpZiAoamQgIT0gMCAmJiBoaCttbStzcyA9PSAwKSB7Ci0Jc3ByaW50Zihy cCwiJWxkZCIsamQpOwotICAgIH0gZWxzZSBpZiAoamQgPT0gMCkgewotCWlmIChzcyA9PSAwKQot CSAgc3ByaW50ZihycCwiJWQ6JTAyZCIsaGgsbW0pOwotCWVsc2UKLQkgIHNwcmludGYocnAsIiVk OiUwMmQ6JTAyZCIsaGgsbW0sc3MpOwotICAgIH0gZWxzZSB7Ci0JaWYgKHNzID09IDApCi0JICBz cHJpbnRmKHJwLCIlbGRkJWQ6JTAyZCIsamQsaGgsbW0pOwotCWVsc2UKLQkgIHNwcmludGYocnAs IiVsZGQlZDolMDJkOiUwMmQiLGpkLGhoLG1tLHNzKTsKLSAgICB9Ci0gICAgZGVidWcoRjExMCwi Y21kaWZmZGF0ZSByZXN1bHQiLHJlc3VsdCwwKTsKLSAgICByZXR1cm4oKGNoYXIgKilyZXN1bHQp OwotfQotCi0jaWZuZGVmIE5PU1BMCi0vKiBzIGggdSBmIGYgbCBlIGQgYSB0IGUgIC0tICBSZWFy cmFuZ2UgZGF0ZSBzdHJpbmcgKi8KLQotLyoKLSAgQ2FsbCB3aXRoOgotICAgIEEgZGF0ZSBzdHJp bmcgaW4gc3RhbmRhcmQgZm9ybWF0OiB5eXl5bW1kZCBoaDptbTpzcyAodGltZSBvcHRpb25hbCku Ci0gICAgT3B0aW9uczoKLSAgICAgIDE6IFJlZm9ybWF0IGRhdGUgdG8geXl5eS1tbW0tZGQgKG1t bSA9IEVuZ2xpc2ggbW9udGggYWJicmV2aWF0aW9uKS4KLSAgICAgIDI6IFJlZm9ybWF0IGRhdGUg dG8gZGQtbW1tLXl5eXkgKG1tbSA9IEVuZ2xpc2ggbW9udGggYWJicmV2aWF0aW9uKS4KLSAgICAg IDM6IFJlZm9ybWF0IGFzIG51bWVyaWMgeXl5eW1tZGRoaG1tc3MuCi0gICAgICA0OiBSZWZvcm1h dCBpbiBhc2N0aW1lKCkgZm9ybWF0IFNhdCBOb3YgMjYgMTE6MTA6MzQgMjAwNQotICAgIFJldHVy bnM6Ci0gICAgICBQb2ludGVyIHRvIHJlc3VsdCBpZiBhcmdzIHZhbGlkLCBvdGhlcndpc2Ugb3Jp Z2luYWwgYXJnIHBvaW50ZXIuCi0qLwotY2hhciAqCi1zaHVmZmxlZGF0ZShwLG9wdCkgY2hhciAq IHA7IGludCBvcHQ7IHsKLSAgICBleHRlcm4gY2hhciAqIHdrZGF5c1tdOwotICAgIGludCBsZW47 Ci0gICAgY2hhciBpYnVmWzMyXTsKLSAgICBzdGF0aWMgY2hhciBvYnVmWzQ4XTsKLSAgICBjaGFy IGM7Ci0gICAgaW50IHl5LCBkZCwgbW07Ci0KLSAgICBpZiAoIXApIHAgPSAiIjsKLSAgICBpZiAo ISpwKSBwID0gY2tkYXRlKCk7Ci0gICAgaWYgKG9wdCA8IDEgfHwgb3B0ID4gNCkKLSAgICAgIHJl dHVybihwKTsKLSAgICBsZW4gPSBzdHJsZW4ocCk7Ci0gICAgaWYgKGxlbiA8IDggfHwgbGVuID4g MzEpIHJldHVybihwKTsKLSAgICBpZiAob3B0ID09IDQpIHsJCQkvKiBBc2N0aW1lIGZvcm1hdCAo MjYgTm92IDIwMDUpICovCi0JY2hhciBjLCAqIHM7Ci0JbG9uZyB6OyBpbnQgazsKLQlja3N0cm5j cHkoaWJ1ZixwLDMxKTsKLQlrID0gbGVuOwotCXdoaWxlIChrID49IDAgJiYgaWJ1ZltrXSA9PSBD UiB8fCBpYnVmW2tdID09IExGKQotCSAgaWJ1ZltrLS1dID0gTlVMOwotCXdoaWxlIChrID49IDAg JiYgaWJ1ZltrXSA9PSBTUCB8fCBpYnVmW2tdID09IEhUKQotCSAgaWJ1ZltrLS1dID0gTlVMOwot CWlmIChrIDwgOSkgY2tzdHJuY3B5KCZpYnVmWzhdLCIgMDA6MDA6MDAiLDkpOwotCXAgPSBpYnVm OwotICAgICAgICB6ID0gbWpkKHApOyAgICAgICAgICAgICAgICAgICAgIC8qIENvbnZlcnQgdG8g bW9kaWZpZWQgSnVsaWFuIGRhdGUgKi8KLSAgICAgICAgeiA9IHogJSA3TDsKLSAgICAgICAgaWYg KHogPCAwKSB7Ci0gICAgICAgICAgICB6ID0gMCAtIHo7Ci0gICAgICAgICAgICBrID0gNiAtICgo aW50KXogKyAzKSAlIDc7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBrID0gKChpbnQp eiArIDMpICUgNzsJLyogRGF5IG9mIHdlZWsgKi8KLSAgICAgICAgfQotCXMgPSB3a2RheXNba107 Ci0gICAgICAgIG9idWZbMF0gPSBzWzBdOwkJCS8qIERheSBvZiB3ZWVrICovCi0gICAgICAgIG9i dWZbMV0gPSBzWzFdOwotICAgICAgICBvYnVmWzJdID0gc1syXTsKLSAgICAgICAgb2J1ZlszXSA9 IFNQOwkJCS8qIFNwYWNlICovCi0JYyA9IHBbNl07Ci0gICAgICAgIHBbNl0gPSBOVUw7Ci0JbW0g PSBhdG9pKCZpYnVmWzRdKTsJCS8qIE1vbnRoICovCi0JcyA9IG1vbmFtZVttbS0xXTsJCS8qIE5h bWUgb2YgbW9udGggKi8KLQlwWzZdID0gYzsKLQotICAgICAgICBvYnVmWzRdID0gc1swXTsJCQkv KiBNb250aCAqLwotICAgICAgICBvYnVmWzVdID0gc1sxXTsKLSAgICAgICAgb2J1Zls2XSA9IHNb Ml07Ci0gICAgICAgIG9idWZbN10gPSBTUDsJCQkvKiBTcGFjZSAqLwotCWlmIChwWzZdID09ICcw JykJCS8qIERhdGUgb2YgbW9udGggKi8KLQkgIG9idWZbOF0gPSBTUDsKLQllbHNlCi0JICBvYnVm WzhdID0gcFs2XTsKLSAgICAgICAgb2J1Zls5XSA9IHBbN107Ci0JY2tzdHJuY3B5KCZvYnVmWzEw XSwmcFs4XSwxMCk7CS8qIFRpbWUgKi8KLSAgICAgICAgb2J1ZlsxOV0gPSBTUDsJCQkvKiBTcGFj ZSAqLwotCW9idWZbMjBdID0gcFswXTsJCS8qIFllYXIgKi8KLQlvYnVmWzIxXSA9IHBbMV07Ci0J b2J1ZlsyMl0gPSBwWzJdOwotCW9idWZbMjNdID0gcFszXTsKLQlvYnVmWzI0XSA9IE5VTDsKLQly ZXR1cm4oKGNoYXIgKilvYnVmKTsKLSAgICB9Ci0gICAgaWYgKG9wdCA9PSAzKSB7Ci0JY2tzdHJu Y3B5KG9idWYscCw0OCk7Ci0JLyogeXl5eW1tZGQgaGg6bW06c3MgKi8KLQkvKiAwMTIzNDU2Nzg5 MDEyMzQ1NiAqLwotCS8qIHl5eXltbWRkaGhtbXNzICAgICovCi0Jb2J1Zls4XSA9IG9idWZbOV07 Ci0Jb2J1Zls5XSA9IG9idWZbMTBdOwotCW9idWZbMTBdID0gb2J1ZlsxMl07Ci0Jb2J1ZlsxMV0g PSBvYnVmWzEzXTsKLQlvYnVmWzEyXSA9IG9idWZbMTVdOwotCW9idWZbMTNdID0gb2J1ZlsxNl07 Ci0Jb2J1ZlsxNF0gPSBOVUw7Ci0JcmV0dXJuKChjaGFyICopb2J1Zik7Ci0gICAgfQotICAgIGNr c3RybmNweShpYnVmLHAsMzIpOwotICAgIGMgPSBpYnVmWzRdOwkJCS8qIFdhcm5pbmc6IG5vdCBZ MTBLIGNvbXBsaWFudCAqLwotICAgIGlidWZbNF0gPSBOVUw7Ci0gICAgaWYgKCFyZGlnaXRzKGli dWYpKQotICAgICAgcmV0dXJuKHApOwotICAgIHl5ID0gYXRvaShpYnVmKTsKLSAgICBpZiAoeXkg PCAxIHx8IHl5ID4gOTk5OSkKLSAgICAgIHJldHVybihwKTsKLSAgICBpYnVmWzRdID0gYzsKLSAg ICBjID0gaWJ1Zls2XTsKLSAgICBpYnVmWzZdID0gTlVMOwotICAgIGlmICghcmRpZ2l0cygmaWJ1 Zls0XSkpCi0gICAgICByZXR1cm4ocCk7Ci0gICAgbW0gPSBhdG9pKCZpYnVmWzRdKTsKLSAgICBp ZiAobW0gPCAxIHx8IG1tID4gMTIpCi0gICAgICByZXR1cm4ocCk7Ci0gICAgaWJ1Zls2XSA9IGM7 Ci0gICAgYyA9IGlidWZbOF07Ci0gICAgaWJ1Zls4XSA9IE5VTDsKLSAgICBpZiAoIXJkaWdpdHMo JmlidWZbNl0pKQotICAgICAgcmV0dXJuKHApOwotICAgIGRkID0gYXRvaSgmaWJ1Zls2XSk7Ci0g ICAgaWJ1Zls4XSA9IGM7Ci0gICAgaWYgKGRkIDwgMSB8fCBtbSA+IDMxKQotICAgICAgcmV0dXJu KHApOwotICAgIC8qIElHTk9SRSBXQVJOSU5HUyBBQk9VVCBtb25hbWVbXSBSRUZTIE9VVCBPRiBS QU5HRSAtIGl0J3MgcHJlY2hlY2tlZC4gKi8KLSAgICBzd2l0Y2ggKG9wdCkgewotICAgICAgY2Fz ZSAxOgotCXNwcmludGYob2J1ZiwiJTA0ZC0lcy0lMDJkJXMiLHl5LG1vbmFtZVttbS0xXSxkZCwm aWJ1Zls4XSk7Ci0JYnJlYWs7Ci0gICAgICBjYXNlIDI6Ci0Jc3ByaW50ZihvYnVmLCIlMDJkLSVz LSUwNGQlcyIsZGQsbW9uYW1lW21tLTFdLHl5LCZpYnVmWzhdKTsKLSAgICB9Ci0gICAgcmV0dXJu KChjaGFyICopb2J1Zik7Ci19Ci0jZW5kaWYJLyogTk9TUEwgKi8KLQotLyogIEMgSyBDIFYgVCBE IEEgVCBFICAtLSAgTGlrZSBjbWN2dGRhdGUoKSwgYnV0IHJldHVybnMgc3RyaW5nLiAgKi8KLS8q ICBGb3IgdXNlIGJ5IGRhdGUtcmVsYXRlZCBmdW5jdGlvbnMgKi8KLS8qICBTZWUgY2FsbGluZyBj b252ZW50aW9ucyBmb3IgY21jdnRkYXRlKCkgYWJvdmUuICovCi0KLWNoYXIgKgotY2tjdnRkYXRl KHAsdCkgY2hhciAqIHA7IGludCB0OyB7Ci0gICAgY2hhciAqIHM7Ci0gICAgaWYgKCEocyA9IGNt Y3Z0ZGF0ZShwLHQpKSkKLSAgICAgIHJldHVybigiPEJBRF9EQVRFX09SX1RJTUU+Iik7CS8qIFxm YmxhaCgpIGVycm9yIG1lc3NhZ2UgKi8KLSAgICBlbHNlCi0gICAgICByZXR1cm4ocyk7Ci19Ci0K LQotLyogIEMgTSBEIEEgVCBFICAtLSAgUGFyc2UgYSBkYXRlIGFuZC9vciB0aW1lICAqLwotCi0v KgotICBBY2NlcHRzIGRhdGUgaW4gdmFyaW91cyBmb3JtYXRzLiAgSWYgdGhlIGRhdGUgaXMgcmVj b2duaXplZCwKLSAgdGhpcyByb3V0aW5lIHJldHVybnMgMCBvciBncmVhdGVyIHdpdGggdGhlIHJl c3VsdCBzdHJpbmcgcG9pbnRlcgotICBwb2ludGluZyB0byBhIGJ1ZmZlciBjb250YWluaW5nIHRo ZSBkYXRlIGFzICJ5eXl5bW1kZCBoaDptbTpzcyIuCi0qLwotaW50Ci1jbWRhdGUoeGhscCx4ZGVm LHhwLHF1aWV0LGYpIGNoYXIgKnhobHAsICp4ZGVmLCAqKnhwOyBpbnQgcXVpZXQ7IHh4X3N0cnAg ZjsgewotICAgIGludCB4LCByYzsKLSAgICBjaGFyICpvLCAqcywgKnpxLCAqZHA7Ci0KLSAgICBj bWZsZGZsZ3MgPSAwOwotICAgIGlmICgheGhscCkgeGhscCA9ICIiOwotICAgIGlmICgheGRlZikg eGRlZiA9ICIiOwotICAgIGlmICghKnhobHApIHhobHAgPSAiRGF0ZSBhbmQvb3IgdGltZSI7Ci0g ICAgKnhwID0gIiI7Ci0KLSAgICByYyA9IGNtZmxkKHhobHAseGRlZiwmcywoeHhfc3RycCkwKTsK LSAgICBkZWJ1ZyhGMTAxLCJjbWRhdGUgY21mbGQgcmMiLCIiLHJjKTsKLSAgICBpZiAocmMgPCAw KQotICAgICAgcmV0dXJuKHJjKTsKLSAgICBkZWJ1ZyhGMTEwLCJjbWRhdGUgMSIscywwKTsKLSAg ICBvID0gczsJCQkJLyogUmVtZW1iZXIgd2hhdCB0aGV5IHR5cGVkLiAqLwotICAgIHMgPSBicnN0 cmlwKHMpOwotICAgIGRlYnVnKEYxMTAsImNtZGF0ZSAyIixzLDApOwotCi0gICAgeCA9IDA7Ci0g ICAgaWYgKGYpIHsJCQkJLyogSWYgYSBjb252ZXJzaW9uIGZ1bmN0aW9uIGlzIGdpdmVuICovCi0J Y2hhciAqIHBwOwotCXpxID0gYXR4YnVmOwkJCS8qIGRvIHRoZSBjb252ZXJzaW9uLiAqLwotCXBw ID0gYXR4YnVmOwotCWF0eG4gPSBDTURCTDsKLQlpZiAoKHggPSAoKmYpKHMsJnpxLCZhdHhuKSkg PCAwKSByZXR1cm4oLTIpOwotCWlmICghKnBwKQotCSAgcHAgPSB4ZGVmOwotCWlmIChzZXRhdG0o cHAsMCkgPCAwKSB7Ci0JICAgIGlmICghcXVpZXQpIHByaW50ZigiP0V2YWx1YXRlZCBkYXRlIHRv byBsb25nXG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0JcyA9IGF0eGJ1ZjsKLSAgICB9Ci0g ICAgZHAgPSBjbWN2dGRhdGUocywxKTsKLSAgICBpZiAoIWRwKSB7Ci0JaWYgKCFxdWlldCkgcHJp bnRmKCI/JXNcbiIsY21kYXRlbXNnKTsKLQlyZXR1cm4oLTkpOwotICAgIH0KLSAgICAqeHAgPSBk cDsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLSNpZmRlZiBDS19SRUNBTEwJCQkvKiBDb21tYW5kLXJl Y2FsbCBmdW5jdGlvbnMgKi8KLQotLyogIEMgTSBSIEkgTiBJICAtLSAgSW5pdGlhbGl6ZSBvciBj aGFuZ2Ugc2l6ZSBvZiBjb21tYW5kIHJlY2FsbCBidWZmZXIgKi8KLQotaW50Ci1jbXJpbmkobikg aW50IG47IHsKLSAgICBpbnQgaTsKLSAgICBpZiAocmVjYWxsICYmIGluX3JlY2FsbCkgewkJLyog RnJlZSBvbGQgc3RvcmFnZSwgaWYgYW55ICovCi0JZm9yIChpID0gMDsgaSA8IGNtX3JlY2FsbDsg aSsrKSB7Ci0JICAgIGlmIChyZWNhbGxbaV0pIHsKLQkJZnJlZShyZWNhbGxbaV0pOwotCQlyZWNh bGxbaV0gPSBOVUxMOwotCSAgICB9Ci0JfQotCWZyZWUocmVjYWxsKTsKLQlyZWNhbGwgPSBOVUxM OwotICAgIH0KLSAgICBjbV9yZWNhbGwgPSBuOwkJCS8qIFNldCBuZXcgc2l6ZSAqLwotICAgIHJs YXN0ID0gY3VycmVudCA9IC0xOwkJLyogSW5pdGlhbGl6ZSBwb2ludGVycyAqLwotICAgIGlmIChu ID4gMCkgewotCXJlY2FsbCA9IChjaGFyICoqKW1hbGxvYygoY21fcmVjYWxsICsgMSkgKiBzaXpl b2YoY2hhciAqKSk7Ci0JaWYgKCFyZWNhbGwpCi0JICByZXR1cm4oMSk7Ci0JZm9yIChpID0gMDsg aSA8IGNtX3JlY2FsbDsgaSsrKSB7Ci0JICAgIHJlY2FsbFtpXSA9IE5VTEw7Ci0JfQotCWluX3Jl Y2FsbCA9IDE7CQkJLyogUmVjYWxsIGJ1ZmZlcnMgaW5pdCdkICovCi0gICAgfQotICAgIHJldHVy bigwKTsKLX0KLQotLyogIEMgTSBBIEQgRCBOIEUgWCBUICAtLSAgRm9yY2UgYWRkaXRpb24gb2Yg bmV4dCBjb21tYW5kICovCi0KLVZPSUQKLWNtYWRkbmV4dCgpIHsKLSAgICBpZiAob25fcmVjYWxs ICYmIGluX3JlY2FsbCkgewkvKiBFdmVuIGlmIGl0IGRvZXNuJ3QgY29tZSAqLwotCWZvcmNlX2Fk ZCA9IDE7CQkJLyogZnJvbSB0aGUga2V5Ym9hcmQgKi8KLQluZXdjbWQgPSAxOwotCW5vX3JlY2Fs bCA9IDA7Ci0gICAgfQotfQotCi0vKiAgQyBNIEcgRSBUIEMgTSBEICAtLSAgRmluZCBtb3N0IHJl Y2VudCBtYXRjaGluZyBjb21tYW5kICAqLwotCi1jaGFyICoKLWNtZ2V0Y21kKHMpIGNoYXIgKiBz OyB7Ci0gICAgaW50IGk7Ci0gICAgZm9yIChpID0gY3VycmVudDsgaSA+PSAwOyBpLS0pIHsJLyog U2VhcmNoIGJhY2t3YXJkIHRocnUgaGlzdG9yeSBsaXN0ICovCi0JaWYgKCFyZWNhbGxbaV0pIGNv bnRpbnVlOwkvKiBUaGlzIG9uZSdzIG51bGwsIHNraXAgaXQgKi8KLQlpZiAoY2ttYXRjaChzLHJl Y2FsbFtpXSwwLDEpKQkvKiBNYXRjaD8gKi8KLQkgIHJldHVybihyZWNhbGxbaV0pOwkJLyogWWVz LCByZXR1cm4gcG9pbnRlciAqLwotICAgIH0KLSAgICByZXR1cm4oTlVMTCk7CQkJLyogTm8gbWF0 Y2gsIHJldHVybiBOVUxMIHBvaW50ZXIgKi8KLX0KLSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLQot LyogIEEgRCBEIEMgTSBEICAtLSAgQWRkIGEgY29tbWFuZCB0byB0aGUgcmVjYWxsIGJ1ZmZlciAg Ki8KLQotVk9JRAotYWRkY21kKHMpIGNoYXIgKiBzOyB7Ci0gICAgaW50IGxlbiA9IDAsIG5xID0g MDsKLSAgICBjaGFyICogcDsKLSNpZmRlZiBDS0xFQVJOCi0gICAgZXh0ZXJuIGludCBsZWFybmlu ZzsKLSNlbmRpZiAvKiBDS0xFQVJOICovCi0KLSAgICBpZiAoeGNtZHNyYykJCQkvKiBPbmx5IGZv ciBpbnRlcmFjdGl2ZSBjb21tYW5kcyAqLwotICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFuZXdj bWQpCQkJLyogVGhlIGNvbW1hbmQgaGFzIGJlZW4gaGVyZSBhbHJlYWR5ICovCi0gICAgICByZXR1 cm47CQkJCS8qIHNvIGlnbm9yZSBpdC4gKi8KLSAgICBuZXdjbWQgPSAwOwkJCQkvKiBJdCdzIG5l dyBidXQgZG8gdGhpcyBvbmx5IG9uY2UuICovCi0KLSAgICBpZiAoIXMpIHMgPSBjbWRidWY7Ci0g ICAgaWYgKHNbMF0pCi0gICAgICBsZW4gPSBzdHJsZW4ocyk7Ci0KLSAgICBpZiAobGVuIDwgMSkJ CQkvKiBEb24ndCBzYXZlIGVtcHR5IGNvbW1hbmRzICovCi0gICAgICByZXR1cm47Ci0KLSAgICBw ID0gczsKLSAgICB3aGlsZSAoKnApIHsgaWYgKCpwKysgPT0gJz8nKSBucSsrOyB9IC8qIENvdW50 IHF1ZXN0aW9uIG1hcmtzICovCi0KLSNpZmRlZiBDS0xFQVJOCi0gICAgaWYgKGxlYXJuaW5nKQkJ CS8qIElmIGEgbGVhcm5lZCBzY3JpcHQgaXMgYWN0aXZlICovCi0gICAgICBsZWFybmNtZChzKTsJ CQkvKiByZWNvcmQgdGhpcyBjb21tYW5kLiAqLwotI2VuZGlmIC8qIENLTEVBUk4gKi8KLQotICAg IGRlYnVnKEYwMTAsIkNNRChQKSIscywwKTsJCS8qIE1heWJlIHJlY29yZCBpdCBpbiB0aGUgZGVi dWcgbG9nICovCi0KLSNpZmRlZiBDS1NZU0xPRwotICAgIGlmIChja3hsb2dnaW5nKSB7CQkJLyog TWF5YmUgcmVjb3JkIGl0IGluIHN5c2xvZyAqLwotCWlmIChja3hzeXNsb2cgPj0gU1lTTEdfQ1gg fHwgY2t4c3lzbG9nID49IFNZU0xHX0NNKQotCSAgY2tzeXNsb2coU1lTTEdfQ1gsIDEsICJjb21t YW5kIiwgcywgTlVMTCk7Ci0gICAgfQotI2VuZGlmIC8qIENLU1lTTE9HICovCi0KLSNpZmRlZiBD S19SRUNBTEwKLSAgICBsYXN0X3JlY2FsbCA9IDA7Ci0KLSAgICBpZiAob25fcmVjYWxsICYmCQkJ LyogQ29tbWFuZCByZWNhbGwgaXMgb24/ICovCi0JY21fcmVjYWxsID4gMCAmJgkJLyogUmVjYWxs IGJ1ZmZlciBzaXplIGlzID4gMD8gKi8KLQkhbm9fcmVjYWxsKSB7CQkJLyogTm90IG5vdCBzYXZp bmcgdGhpcyBjb21tYW5kPyAqLwotCi0JaWYgKCFmb3JjZV9hZGQgJiYgcmxhc3QgPiAtMSkJLyog SWYgcHJldmlvdXMgY29tbWFuZCB3YXMgaWRlbnRpY2FsICovCi0JICBpZiAoIXN0cmNtcChzLHJl Y2FsbFtybGFzdF0pKSAvKiBkb24ndCBhZGQgYW5vdGhlciBjb3B5ICovCi0JICAgIHJldHVybjsK LQotCWZvcmNlX2FkZCA9IDA7CQkJLyogUmVzZXQgbm93IGluIGNhc2UgaXQgd2FzIHNldCAqLwot Ci0gICAgICAgIGlmIChybGFzdCA+PSBjbV9yZWNhbGwgLSAxKSB7CS8qIFJlY2FsbCBidWZmZXIg ZnVsbD8gKi8KLQkgICAgaW50IGk7Ci0JICAgIGlmIChyZWNhbGxbMF0pIHsJCS8qIERpc2NhcmQg b2xkZXN0IGNvbW1hbmQgKi8KLQkJZnJlZShyZWNhbGxbMF0pOwotCQlyZWNhbGxbMF0gPSBOVUxM OwotCSAgICB9Ci0JICAgIGZvciAoaSA9IDA7IGkgPCBybGFzdDsgaSsrKSB7ICAvKiBUaGUgcmVz dCAqLwotCQlyZWNhbGxbaV0gPSByZWNhbGxbaSsxXTsgICAvKiBtb3ZlIGJhY2sgKi8KLQkgICAg fQotCSAgICBybGFzdC0tOwkJCS8qIE5vdyB3ZSBoYXZlIG9uZSBsZXNzICovCi0JfQotICAgICAg ICBybGFzdCsrOwkJCS8qIEluZGV4IG9mIGxhc3QgY29tbWFuZCBpbiBidWZmZXIgKi8KLQljdXJy ZW50ID0gcmxhc3Q7CQkvKiBBbHNvIG5vdyB0aGUgY3VycmVudCBjb21tYW5kICovCi0JaWYgKGN1 cnJlbnQgPj0gY21fcmVjYWxsKSB7CS8qIFNob3VsZG4ndCBoYXBwZW4gKi8KLQkgICAgcHJpbnRm KCI/Q29tbWFuZCBoaXN0b3J5IGVycm9yXG4iKTsJLyogYnV0IGlmIGl0IGRvZXMgKi8KLQkgICAg b25fcmVjYWxsID0gMDsJCSAgICAgICAgLyogdHVybiBvZmYgY29tbWFuZCBzYXZpbmcgKi8KLSNp ZmRlZiBDT01NRU5UCi0JfSBlbHNlIGlmIChucSA+IDApIHsJCS8qIEhhdmUgYXQgbGVhc3Qgb25l IHF1ZXN0aW9uIG1hcmsgKi8KLQkgICAgcmVjYWxsW2N1cnJlbnRdID0gbWFsbG9jKGxlbitucSsx KTsKLQkgICAgaWYgKHJlY2FsbFtjdXJyZW50XSkgewotCQlwID0gcmVjYWxsW2N1cnJlbnRdOwot CQl3aGlsZSAoKnMpIHsKLQkJICAgIGlmICgqcyA9PSAnPycpCi0JCSAgICAgICpwKysgPSAnXFwn OwotCQkgICAgKnArKyA9ICpzKys7Ci0JCX0KLQkJKnAgPSBOVUw7Ci0JICAgIH0KLSNlbmRpZiAv KiBDT01NRU5UICovCi0JfSBlbHNlIHsJCQkvKiBOb3JtYWwgY2FzZSwganVzdCBjb3B5ICovCi0J ICAgIHJlY2FsbFtjdXJyZW50XSA9IG1hbGxvYyhsZW4rMSk7Ci0JICAgIGlmIChyZWNhbGxbY3Vy cmVudF0pCi0JICAgICAgY2tzdHJuY3B5KHJlY2FsbFtjdXJyZW50XSxzLGxlbisxKTsKLQl9Ci0g ICAgfQotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotfQotCi0KLSNpZmRlZiBDS19SRUNBTEwKLQot LyogQyBNIEggSSBTIFQgTyBSIFkgKi8KLQotVk9JRAotY21oaXN0b3J5KCkgewotICAgIGludCBp LCBsYyA9IDE7Ci0gICAgZm9yIChpID0gMDsgaSA8PSBjdXJyZW50OyBpKyspIHsKLQlwcmludGYo IiAlc1xuIiwgcmVjYWxsW2ldKTsKLQlpZiAoKytsYyA+IChjbWRfcm93cyAtIDIpKSB7CS8qIFNj cmVlbiBmdWxsPyAqLwotCSAgICBpZiAoIWFza21vcmUoKSkJCS8qIERvIG1vcmUtcHJvbXB0aW5n Li4uICovCi0JICAgICAgYnJlYWs7Ci0JICAgIGVsc2UKLQkgICAgICBsYyA9IDA7Ci0JfQotICAg IH0KLX0KLQotaW50Ci1zYXZoaXN0b3J5KHMsZGlzcCkgY2hhciAqczsgaW50IGRpc3A7IHsKLSAg ICBGSUxFICogZnA7Ci0gICAgaW50IGk7Ci0KLSAgICBmcCA9IGZvcGVuKHMsIGRpc3AgPyAiYSIg OiAidyIpOwotICAgIGlmICghZnApIHsKLQlwZXJyb3Iocyk7Ci0JcmV0dXJuKDApOwotICAgIH0K LSAgICBmb3IgKGkgPSAwOyBpIDw9IGN1cnJlbnQ7IGkrKykKLSAgICAgIGZwcmludGYoZnAsIiVz XG4iLCByZWNhbGxbaV0pOwotICAgIGZjbG9zZShmcCk7Ci0gICAgcmV0dXJuKDEpOwotfQotI2Vu ZGlmIC8qIENLX1JFQ0FMTCAqLwotCi0jaWZkZWYgQ09NTUVOVAotLyogYXBwYXJlbnRseSBub3Qg dXNlZCAqLwotaW50Ci1jbWdldGxjKHMpIGNoYXIgKiBzOyB7CQkJLyogR2V0IGxlYWRpbmcgY2hh ciAqLwotICAgIGNoYXIgYzsKLSAgICB3aGlsZSAoKGMgPSAqcysrKSA8PSBTUCkgewotCWlmICgh YykKLQkgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4oYyk7Ci19Ci0jZW5kaWYgLyogQ09NTUVO VCAqLwotCi0KLS8qICBDIE0gQyBGIE0gIC0tICBQYXJzZSBjb21tYW5kIGNvbmZpcm1hdGlvbiAo ZW5kIG9mIGxpbmUpICAqLwotCi0vKgotIFJldHVybnMKLSAgIC0yOiBVc2VyIHR5cGVkIGFueXRo aW5nIGJ1dCB3aGl0ZXNwYWNlIG9yIG5ld2xpbmUKLSAgIC0xOiBSZXBhcnNlIG5lZWRlZAotICAg IDA6IENvbmZpcm1hdGlvbiB3YXMgcmVjZWl2ZWQKLSovCi1pbnQKLWNtY2ZtKCkgewotICAgIGlu dCB4LCB4YzsKLSAgICBkZWJ1ZyhGMTAxLCJjbWNmbTogY21mbGdzIiwiIixjbWZsZ3MpOwotICAg IGRlYnVnKEYxMTAsImNtY2ZtOiBhdG1idWYiLGF0bWJ1ZiwwKTsKLSAgICBpbndvcmQgPSB4YyA9 IGNjID0gMDsKLQotICAgIHNldGF0bSgiIiwwKTsJCQkvKiAoUHJvYmFibHkgdW5uZWNlc3Nhcnkp ICovCi0KLSAgICB3aGlsZSAoY21mbGdzICE9IDEpIHsKLSAgICAgICAgeCA9IGd0d29yZCgwKTsK LSAgICAgICAgeGMgKz0gY2M7Ci0KLSAgICAgICAgc3dpdGNoICh4KSB7Ci0JICBjYXNlIC05Ogot CSAgICBwcmludGYoIkNvbW1hbmQgb3IgZmllbGQgdG9vIGxvbmdcbiIpOwotCSAgY2FzZSAtNDoJ CQkvKiBFT0YgKi8KLQkgIGNhc2UgLTI6Ci0JICBjYXNlIC0xOgotCSAgICByZXR1cm4oeCk7Ci0J ICBjYXNlIDE6CQkJLyogRW5kIG9mIGxpbmUgKi8KLQkgICAgaWYgKHhjID4gMCkgewotCQlpZiAo eGNtZmRiKSB7Ci0JCSAgICByZXR1cm4oLTYpOwotCQl9IGVsc2UgewotCQkgICAgcHJpbnRmKCI/ Tm90IGNvbmZpcm1lZCAtICVzXG4iLGF0bWJ1Zik7Ci0JCSAgICByZXR1cm4oLTkpOwotCQl9Ci0J ICAgIH0gZWxzZQotCSAgICAgIGJyZWFrOwkJCS8qIEZpbmlzaCB1cCBiZWxvdyAqLwotCSAgY2Fz ZSAyOgkJCS8qIEVTQyAqLwotCSAgICBpZiAoeGMgPT0gMCkgewotCQlibGVlcChCUF9XQVJOKTsK LQkJY29udGludWU7CQkvKiBvciBmYWxsIHRocnUuICovCi0JICAgIH0KLQkgIGNhc2UgMDoJCQkv KiBTcGFjZSAqLwotCSAgICBpZiAoeGMgPT0gMCkJCS8qIElmIG5vIGNoYXJzIHR5cGVkLCBjb250 aW51ZSwgKi8KLQkgICAgICBjb250aW51ZTsJCQkvKiBlbHNlIGZhbGwgdGhydS4gKi8KLQkgICAg LyogZWxzZSBmYWxsIHRocnUuLi4gKi8KLQotCSAgY2FzZSAzOgkJCS8qIFF1ZXN0aW9uIG1hcmsg Ki8KLQkgICAgaWYgKHhjID4gMCkgewotCQlpZiAoeGNtZmRiKSB7Ci0JCSAgICByZXR1cm4oLTYp OwotCQl9IGVsc2UgewotCQkgICAgcHJpbnRmKCI/Tm90IGNvbmZpcm1lZCAtICVzXG4iLGF0bWJ1 Zik7Ci0JCSAgICByZXR1cm4oLTkpOwotCQl9Ci0JICAgIH0KLQkgICAgcHJpbnRmKAotCSAgICAg ICAiXG4gUHJlc3MgdGhlIFJldHVybiBvciBFbnRlciBrZXkgdG8gY29uZmlybSB0aGUgY29tbWFu ZFxuIik7Ci0JICAgIHByaW50ZigiJXMlcyIsY21wcm9tLGNtZGJ1Zik7Ci0JICAgIGZmbHVzaChz dGRvdXQpOwotCSAgICBjb250aW51ZTsKLQl9Ci0gICAgfQotICAgIGRlYm9rID0gMTsKLSAgICBy ZXR1cm4oMCk7Ci19Ci0KLQotLyogVGhlIGZvbGxvd2luZyBtYXRlcmlhbCBzdXBwb3J0cyBjaGFp bmVkIHBhcnNpbmcgZnVuY3Rpb25zLiAqLwotLyogU2VlIGNrdWNtZC5oIGZvciBGREIgYW5kIE9G REIgZGVmaW5pdGlvbnMuICovCi0KLXN0cnVjdCBPRkRCIGNtcmVzdWx0ID0gewkJLyogVW5pdmVy c2FsIGNtZmRiIHJlc3VsdCBob2xkZXIgKi8KLSAgICBOVUxMLAkJCQkvKiBBZGRyZXNzIG9mIHN1 Y2NlZWRpbmcgRkRCIHN0cnVjdCAqLwotICAgIDAsCQkJCQkvKiBGdW5jdGlvbiBjb2RlICovCi0g ICAgTlVMTCwJCQkJLyogU3RyaW5nIHJlc3VsdCAqLwotICAgIDAsCQkJCQkvKiBJbnRlZ2VyIHJl c3VsdCAqLwotICAgIChDS19PRkZfVCkwCQkJCS8qIFdpZGUgcmVzdWx0ICovCi19OwotCi1WT0lE Ci1jbWZkYmkocCxmYyxzMSxzMixzMyxuMSxuMixmLGssbnh0KQkvKiBJbml0aWFsaXplIGFuIEZE QiAqLwotICAgIHN0cnVjdCBGREIgKiBwOwotICAgIGludCBmYzsKLSAgICBjaGFyICogczEsICog czIsICogczM7Ci0gICAgaW50IG4xLCBuMjsKLSAgICB4eF9zdHJwIGY7Ci0gICAgc3RydWN0IGtl eXRhYiAqIGs7Ci0gICAgc3RydWN0IEZEQiAqIG54dDsgewotCi0gICAgcC0+ZmNvZGUgPSBmYzsK LSAgICBwLT5obHBtc2cgPSBzMTsKLSAgICBwLT5kZmx0ID0gczI7Ci0gICAgcC0+c2RhdGEgPSBz MzsKLSAgICBwLT5uZGF0YTEgPSBuMTsKLSAgICBwLT5uZGF0YTIgPSBuMjsKLSAgICBwLT5zcGYg PSBmOwotICAgIHAtPmt3ZHRibCA9IGs7Ci0gICAgcC0+bnh0ZmRiID0gbnh0OwotfQotCi0vKiAg QyBNIEYgRCBCICAtLSAgUGFyc2UgYSBmaWVsZCB3aXRoIHNldmVyYWwgcG9zc2libGUgZnVuY3Rp b25zICAqLwotCi1pbnQKLWNtZmRiKGZkYmluKSBzdHJ1Y3QgRkRCICogZmRiaW47IHsKLSNpZm5k ZWYgTk9TUEwKLSAgICBleHRlcm4gaW50IHhfaWZudW07ICAgICAgICAgICAgICAgICAvKiBJRiBO VU1FUklDIC0gZGlzYWJsZXMgd2FybmluZ3MgKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgIHN0 cnVjdCBGREIgKiBpbiA9IGZkYmluOwotICAgIHN0cnVjdCBPRkRCICogb3V0ID0gJmNtcmVzdWx0 OwotICAgIGludCB4ID0gMCwgbiwgcjsKLSAgICBDS19PRkZfVCB3ID0gKENLX09GRl9UKTA7Ci0g ICAgY2hhciAqcywgKnhwLCAqbSA9IE5VTEw7Ci0gICAgaW50IGVycmJpdHMgPSAwOwotCi0gICAg eHAgPSBicDsKLQotICAgIG91dC0+ZmNvZGUgPSAtMTsJCQkvKiBJbml0aWFsaXplIG91dHB1dCBz dHJ1Y3QgKi8KLSAgICBvdXQtPmZkYmFkZHIgPSBOVUxMOwotICAgIG91dC0+c3Jlc3VsdCA9IE5V TEw7Ci0gICAgb3V0LT5ucmVzdWx0ID0gMDsKLS8qCi0gIEN1cnJlbnRseSB3ZSBtYWtlIG9uZSB0 cmlwIHRocm91Z2ggdGhlIEZEQnMuICBTbyBpZiB0aGUgdXNlciB0eXBlcyBFc2Mgb3IKLSAgVGFi IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBmaWVsZCwgb25seSB0aGUgZmlyc3QgRkRCIGlzIGV4YW1p bmVkIGZvciBhCi0gIGRlZmF1bHQuICBJZiB0aGUgdXNlciB0eXBlcyA/LCBoZWxwIGlzIGdpdmVu IG9ubHkgZm9yIG9uZSBGREIuICBXZSBzaG91bGQKLSAgc2VhcmNoIHRocm91Z2ggdGhlIEZEQnMg Zm9yIGFsbCBtYXRjaGluZyBwb3NzaWJpbGl0aWVzIC0tIGFuZCBpbiBwYXJ0aWN1bGFyCi0gIGRp c3BsYXkgdGhlIHBlcnRpbmVudCBjb250ZXh0LXNlbnNpdGl2ZSBoZWxwIGZvciBlYWNoIGZ1bmN0 aW9uLCByYXRoZXIgdGhhbgotICB0aGUgb25seSB0aGUgZmlyc3Qgb25lIHRoYXQgd29ya3MsIGFu ZCB0aGVuIHJld2luZCB0aGUgRkRCIHBvaW50ZXIgc28gd2UKLSAgYXJlIG5vdCBsb2NrZWQgb3V0 IG9mIHRoZSBlYXJsaWVyIG9uZXMuCi0qLwotICAgIGNtZmxkZmxncyA9IDA7Ci0gICAgd2hpbGUg KDEpIHsJCQkJLyogTG9vcCB0aHJvdWdoIHRoZSBjaGFpbiBvZiBGREJzICovCi0Jbm9tc2cgPSAx OwotCXhjbWZkYiA9IDE7Ci0JcyA9IE5VTEw7Ci0JbiA9IDA7Ci0JZGVidWcoRjEwMSwiY21mZGIg aW4tPmZjb2RlIiwiIixpbi0+ZmNvZGUpOwotCXN3aXRjaCAoaW4tPmZjb2RlKSB7CQkvKiBDdXJy ZW50IHBhcnNpbmcgZnVuY3Rpb24gY29kZSAqLwotCSAgY2FzZSBfQ01OVU06Ci0JICAgIHIgPSBp bi0+bmRhdGExOwotCSAgICBpZiAociAhPSAxMCAmJiByICE9IDgpIHIgPSAxMDsKLSNpZm5kZWYg Tk9TUEwKLSAgICAgICAgICAgIHhfaWZudW0gPSAxOyAgICAgICAgICAgICAgICAvKiBEaXNhYmxl cyB3YXJuaW5nIG1lc3NhZ2VzICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLQkgICAgeCA9IGNtbnVt KGluLT5obHBtc2csaW4tPmRmbHQsciwmbixpbi0+c3BmKTsKLSNpZm5kZWYgTk9TUEwKLSAgICAg ICAgICAgIHhfaWZudW0gPSAwOwotI2VuZGlmIC8qIE5PU1BMICovCi0JICAgIGRlYnVnKEYxMDEs ImNtZmRiIGNtbnVtIiwiIix4KTsKLQkgICAgaWYgKHggPCAwKSBlcnJiaXRzIHw9IDE7Ci0JICAg IGJyZWFrOwotCSAgY2FzZSBfQ01OVVc6CQkJLyogV2lkZSBjbW51bSAtIDI0IERlYyAyMDA1ICov Ci0JICAgIHIgPSBpbi0+bmRhdGExOwotCSAgICBpZiAociAhPSAxMCAmJiByICE9IDgpIHIgPSAx MDsKLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgICAgIHhfaWZudW0gPSAxOyAgICAgICAgICAgICAg ICAvKiBEaXNhYmxlcyB3YXJuaW5nIG1lc3NhZ2VzICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLQkg ICAgeCA9IGNtbnVtdyhpbi0+aGxwbXNnLGluLT5kZmx0LHIsJncsaW4tPnNwZik7Ci0jaWZuZGVm IE5PU1BMCi0gICAgICAgICAgICB4X2lmbnVtID0gMDsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCSAg ICBkZWJ1ZyhGMTAxLCJjbWZkYiBjbW51bXciLCIiLHcpOwotCSAgICBpZiAoeCA8IDApIGVycmJp dHMgfD0gMTsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIF9DTU9GSToKLQkgICAgeCA9IGNtb2ZpKGlu LT5obHBtc2csaW4tPmRmbHQsJnMsaW4tPnNwZik7Ci0JICAgIGRlYnVnKEYxMDEsImNtZmRiIGNt b2ZpIiwiIix4KTsKLQkgICAgaWYgKHggPCAwKSBlcnJiaXRzIHw9IDI7Ci0JICAgIGJyZWFrOwot CSAgY2FzZSBfQ01JRkk6Ci0JICAgIHggPSBjbWlmaTIoaW4tPmhscG1zZywKLQkJICAgICAgIGlu LT5kZmx0LAotCQkgICAgICAgJnMsCi0JCSAgICAgICAmbiwKLQkJICAgICAgIGluLT5uZGF0YTEs Ci0JCSAgICAgICBpbi0+c2RhdGEsCi0JCSAgICAgICBpbi0+c3BmLAotCQkgICAgICAgaW4tPm5k YXRhMgotCQkgICAgICAgKTsKLQkgICAgZGVidWcoRjEwMSwiY21mZGIgY21pZmkyIHgiLCIiLHgp OwotCSAgICBkZWJ1ZyhGMTAxLCJjbWZkYiBjbWlmaTIgbiIsIiIsbik7Ci0JICAgIGlmICh4IDwg MCkgZXJyYml0cyB8PSA0OwotCSAgICBicmVhazsKLQkgIGNhc2UgX0NNRkxEOgotCSAgICBjbWZs ZGZsZ3MgPSBpbi0+bmRhdGExOwotCSAgICB4ID0gY21mbGQoaW4tPmhscG1zZyxpbi0+ZGZsdCwm cyxpbi0+c3BmKTsKLQkgICAgZGVidWcoRjEwMSwiY21mZGIgY21mbGQiLCIiLHgpOwotCSAgICBp ZiAoeCA8IDApIGVycmJpdHMgfD0gODsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIF9DTVRYVDoKLQkg ICAgeCA9IGNtdHh0KGluLT5obHBtc2csaW4tPmRmbHQsJnMsaW4tPnNwZik7Ci0JICAgIGRlYnVn KEYxMDEsImNtZmRiIGNtdHh0IiwiIix4KTsKLQkgICAgaWYgKHggPCAwKSBlcnJiaXRzIHw9IDE2 OwotCSAgICBicmVhazsKLQkgIGNhc2UgX0NNS0VZOgotCSAgICB4ID0gY21rZXkyKGluLT5rd2R0 YmwsCi0JCSAgICAgICBpbi0+bmRhdGExLAotCQkgICAgICAgaW4tPmhscG1zZyxpbi0+ZGZsdCxp bi0+c2RhdGEsaW4tPnNwZixpbi0+bmRhdGEyKTsKLQkgICAgZGVidWcoRjEwMSwiY21mZGIgY21r ZXkiLCIiLHgpOwotCSAgICBpZiAoeCA8IDApIGVycmJpdHMgfD0gKChpbi0+bmRhdGEyICYgNCkg PyAzMiA6IDY0KTsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIF9DTUNGTToKLQkgICAgeCA9IGNtY2Zt KCk7Ci0JICAgIGRlYnVnKEYxMDEsImNtZmRiIGNtY2ZtIiwiIix4KTsKLQkgICAgaWYgKHggPCAw KSBlcnJiaXRzIHw9IDEyODsKLQkgICAgYnJlYWs7Ci0JICBkZWZhdWx0OgotCSAgICBkZWJ1ZyhG MTAxLCJjbWZkYiAtIHVuZXhwZWN0ZWQgZnVuY3Rpb24gY29kZSIsIiIsaW4tPmZjb2RlKTsKLQkg ICAgcHJpbnRmKCI/Y21mZGIgLSB1bmV4cGVjdGVkIGZ1bmN0aW9uIGNvZGU6ICVkXG4iLGluLT5m Y29kZSk7Ci0JfQotCWRlYnVnKEYxMDEsImNtZmRiIHgiLCIiLHgpOwotCWRlYnVnKEYxMDEsImNt ZmRiIGNtZmxncyIsIiIsY21mbGdzKTsKLQlkZWJ1ZyhGMTAxLCJjbWZkYiBjcmZsYWciLCIiLGNy ZmxhZyk7Ci0JZGVidWcoRjEwMSwiY21mZGIgcW1mbGFnIiwiIixxbWZsYWcpOwotCWRlYnVnKEYx MDEsImNtZmRiIGVzZmxhZyIsIiIsZXNmbGFnKTsKLQotCWlmICh4ID4gLTEpIHsJCQkvKiBTdWNj ZXNzICovCi0JICAgIG91dC0+ZmNvZGUgPSBpbi0+ZmNvZGU7CS8qIEZpbGwgaW4gb3V0cHV0IHN0 cnVjdCAqLwotCSAgICBvdXQtPmZkYmFkZHIgPSBpbjsKLQkgICAgb3V0LT5zcmVzdWx0ID0gczsK LQkgICAgb3V0LT5ucmVzdWx0ID0gKGluLT5mY29kZSA9PSBfQ01LRVkpID8geCA6IG47Ci0JICAg IG91dC0+d3Jlc3VsdCA9IHc7Ci0JICAgIG91dC0+a2ZsYWdzID0gKGluLT5mY29kZSA9PSBfQ01L RVkpID8gY21rd2ZsZ3MgOiAwOwotCSAgICBkZWJ1ZyhGMTExLCJjbWZkYiBvdXQtPm5yZXN1bHQi LG91dC0+c3Jlc3VsdCxvdXQtPm5yZXN1bHQpOwotCSAgICBkZWJ1ZyhGMTExLCJjbWZkYiBvdXQt PndyZXN1bHQiLG91dC0+c3Jlc3VsdCxvdXQtPndyZXN1bHQpOwotCSAgICBub21zZyA9IDA7Ci0J ICAgIHhjbWZkYiA9IDA7Ci0JICAgIC8qIGRlYnVnKEYxMTEsImNtZmRiIGNtZGJ1ZiAmIGNyZmxh ZyIsY21kYnVmLGNyZmxhZyk7ICovCi0JICAgIGlmIChjcmZsYWcpIHsKLQkJY21mbGdzID0gMTsK LQkgICAgfQotCSAgICByZXR1cm4oeCk7CQkJLyogYW5kIHJldHVybiAqLwotCX0KLQlpbiA9IGlu LT5ueHRmZGI7CQkvKiBGYWlsZWQsIGdldCBuZXh0IHBhcnNpbmcgZnVuY3Rpb24gKi8KLQlub21z ZyA9IDA7Ci0JeGNtZmRiID0gMDsKLQlpZiAoIWluKSB7CQkJLyogTm8gbW9yZSAqLwotCSAgICBk ZWJ1ZyhGMTAxLCJjbWZkYiBmYWlsdXJlIHgiLCIiLHgpOwotCSAgICBkZWJ1ZyhGMTAxLCJjbWZk YiBmYWlsdXJlIGVycmJpdHMiLCIiLGVycmJpdHMpOwotCSAgICBpZiAoeCA9PSAtNikKLQkgICAg ICB4ID0gLTk7Ci0JICAgIGlmICh4ID09IC05KSB7Ci0jaWZkZWYgQ0tST09UCi0JCWlmIChja3Jv b3RlcnIpCi0JCSAgbSA9ICJPZmYgTGltaXRzIjsKLQkJZWxzZQotI2VuZGlmIC8qIENLUk9PVCAq LwotCQkvKiBNYWtlIGluZm9ybWF0aXZlIG1lc3NhZ2VzIGZvciBhIGZldyBjb21tb24gY2FzZXMg Ki8KLQkJc3dpdGNoIChlcnJiaXRzKSB7Ci0JCSAgY2FzZSA0KzMyOiBtID0gIkRvZXMgbm90IG1h dGNoIGZpbGVuYW1lIG9yIHN3aXRjaCI7IGJyZWFrOwotCQkgIGNhc2UgNCs2NDogbSA9ICJEb2Vz IG5vdCBtYXRjaCBmaWxlbmFtZSBvciBrZXl3b3JkIjsgYnJlYWs7Ci0JCSAgY2FzZSAxKzMyOiBt ID0gIk5vdCBhIG51bWJlciBvciB2YWxpZCBrZXl3b3JkIjsgYnJlYWs7Ci0JCSAgY2FzZSAxKzY0 OiBtID0gIk5vdCBhIG51bWJlciBvciB2YWxpZCBzd2l0Y2giOyBicmVhazsKLQkJICBkZWZhdWx0 OiBtID0gIk5vdCB2YWxpZCBpbiB0aGlzIHBvc2l0aW9uIjsKLQkJfQotCQlwcmludGYoIj8lczog XCIlc1wiXG4iLG0sIGF0bWJ1Zik7Ci0JICAgIH0KLQkgICAgcmV0dXJuKHgpOwotCX0KLQlpZiAo eCAhPSAtMiAmJiB4ICE9IC02ICYmIHggIT0gLTkgJiYgeCAhPSAtMykgLyogRWRpdGluZyBvciBz b21lc3VjaCAqLwotCSAgcmV0dXJuKHgpOwkJCS8qIEdvIGJhY2sgYW5kIHJlcGFyc2UgKi8KLQlw cCA9IG5wID0gYnAgPSB4cDsJCS8qIEJhY2sgdXAgcG9pbnRlcnMgKi8KLQljbWZsZ3MgPSAtMTsJ CQkvKiBGb3JjZSBhIHJlcGFyc2UgKi8KLQotI2lmbmRlZiBOT1NQTAotCWlmICghYXNrZmxhZykg ewkJCS8qIElmIG5vdCBleGVjdXRpbmcgQVNLLWNsYXNzIGNtZC4uLiAqLwotI2VuZGlmIC8qIE5P U1BMICovCi0JICAgIGlmIChjcmZsYWcpIHsJCS8qIElmIENSIHdhcyB0eXBlZCwgcHV0IGl0IGJh Y2sgKi8KLQkJcHVzaGMgPSBMRjsJCS8qIEJ1dCBhcyBhIGxpbmVmZWVkICovCi0JICAgIH0gZWxz ZSBpZiAocW1mbGFnKSB7CS8qIERpdHRvIGZvciBRdWVzdGlvbiBtYXJrICovCi0JCXB1c2hjID0g Jz8nOwotCSAgICB9IGVsc2UgaWYgKGVzZmxhZykgewkvKiBhbmQgRXNjYXBlIG9yIFRhYiAqLwot CQlwdXNoYyA9IEVTQzsKLQkgICAgfQotI2lmbmRlZiBOT1NQTAotCX0KLSNlbmRpZiAvKiBOT1NQ TCAqLwotICAgIH0KLX0KLQotLyoKLSAgIEMgTSBJIE8gRiBJICAtLSAgUGFyc2UgYW4gaW5wdXQg ZmlsZSBPUiB0aGUgbmFtZSBvZiBhIG5vbmV4aXN0ZW50IGZpbGUuCi0KLSAgIFJlcGxhY2VzIHRo ZSBjb21tZW50ZWQtb3V0IHZlcnNpb24gYWJvdmUuICBUaGlzIG9uZSBhY3R1YWxseSB3b3JrcyBh bmQKLSAgIGhhcyB0aGUgZXhwZWN0ZWQgc3RyYWlnaHRmb3J3YXJkIGludGVyZmFjZS4KLSovCi1p bnQKLWNtaW9maSh4aGxwLHhkZWYseHAsd2lsZCxmKSBjaGFyICp4aGxwLCAqeGRlZiwgKip4cDsg aW50ICp3aWxkOyB4eF9zdHJwIGY7IHsKLSAgICBpbnQgeDsKLSAgICBzdHJ1Y3QgRkRCIGYxLCBm MjsKLSAgICBjbWZkYmkoJmYxLF9DTUlGSSx4aGxwLHhkZWYsIiIsMCwwLGYsTlVMTCwmZjIpOwot ICAgIGNtZmRiaSgmZjIsX0NNT0ZJLCIiLCIiLCIiLDAsMCxmLE5VTEwsTlVMTCk7Ci0gICAgeCA9 IGNtZmRiKCZmMSk7Ci0gICAgaWYgKHggPCAwKSB7Ci0JaWYgKHggPT0gLTMpIHsKLQkgICAgeCA9 IC05OwotCSAgICBwcmludGYoIj9GaWxlbmFtZSByZXF1aXJlZFxuIik7Ci0JfQotICAgIH0KLSAg ICAqd2lsZCA9IGNtcmVzdWx0Lm5yZXN1bHQ7Ci0gICAgKnhwID0gY21yZXN1bHQuc3Jlc3VsdDsK LSAgICByZXR1cm4oeCk7Ci19Ci0KLS8qICBHIFQgVyBPIFIgRCAgLS0gIEdldHMgYSAid29yZCIg ZnJvbSB0aGUgY29tbWFuZCBpbnB1dCBzdHJlYW0gICovCi0KLS8qCi1Vc2FnZTogcmV0Y29kZSA9 IGd0d29yZChicmspOwotICBicmsgPSAwIGZvciBub3JtYWwgd29yZCBicmVha3MgKHNwYWNlLCBD UiwgRXNjLCA/KQotICBicmsgPSAxIHRvIGFkZCAnOicgYW5kICc9JyAoZm9yIHBhcnNpbmcgc3dp dGNoZXMpLiAgVGhlc2UgY2hhcmFjdGVycwotICAgICAgICBhY3QgYXMgYnJlYWsgY2hhcmFjdGVy cyBvbmx5IGlmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGZpZWxkCi0gICAgICAgIGlzIHNs YXNoICgnLycpLCBpLmUuIHN3aXRjaCBpbnRyb2R1Y2VyLgotICBicmsgPSA0IHRvIG5vdCBzdHJp cCBjb21tZW50cyAodXNlZCBvbmx5IGZvciAiaGVscCAjIiBhbmQgImhlbHAgOyIpLgotCi1SZXR1 cm5zOgotLTEwIFRpbWVsaW1pdCBzZXQgYW5kIHRpbWVkIG91dAotIC05IGlmIGlucHV0IHdhcyB0 b28gbG9uZwotIC00IGlmIGVuZCBvZiBmaWxlIChlLmcuIHBpcGUgYnJva2VuKQotIC0zIGlmIG51 bGwgZmllbGQKLSAtMiBpZiBjb21tYW5kIGJ1ZmZlciBvdmVyZmxvd3MKLSAtMSBpZiB1c2VyIGRp ZCBzb21lIGRlbGV0aW5nCi0gIDAgaWYgd29yZCB0ZXJtaW5hdGVzIHdpdGggU1Agb3IgdGFiCi0g IDEgaWYgLi4uIENSCi0gIDIgaWYgLi4uIEVTQwotICAzIGlmIC4uLiA/IChxdWVzdGlvbiBtYXJr KQotICA0IGlmIC4uLiA6IG9yID0gYW5kIGNhbGxlZCB3aXRoIGJyayAhPSAwCi0KLVdpdGg6Ci0g IHBwIHBvaW50aW5nIHRvIGJlZ2lubmluZyBvZiB3b3JkIGluIGJ1ZmZlcgotICBicCBwb2ludGlu ZyB0byBhZnRlciBjdXJyZW50IHBvc2l0aW9uCi0gIGF0bWJ1ZiBjb250YWluaW5nIGEgY29weSBv ZiB0aGUgd29yZAotICBjYyBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0 aGUgd29yZCBjb3BpZWQgdG8gYXRtYnVmCi0qLwotCi1pbnQKLXVuZ3dvcmQoKSB7CQkJCS8qIFVu Z2V0IGEgd29yZCAqLwotICAgIGRlYnVnKEYxMDEsInVuZ3dvcmQgY21mbGdzIiwiIixjbWZsZ3Mp OwotICAgIGlmICh1bmd3KSByZXR1cm4oMCk7Ci0gICAgY21mc2F2ID0gY21mbGdzOwotICAgIHVu Z3cgPSAxOwotICAgIGNtZmxncyA9IDA7Ci0gICAgcmV0dXJuKDApOwotfQotCi0vKiBVbi11bi1n ZXQgd29yZC4gIFVuZG8gdW5nd29yZCgpIGlmIGl0IGhhcyBiZWVuIGRvbmUuICovCi0KLVZPSUQK LXVudW5ndygpIHsKLSAgICBkZWJ1ZyhGMDEwLCJ1bnVuZ3cgYXRtYnVmIixhdG1idWYsMCk7Ci0g ICAgaWYgKHVuZ3cpIHsKLQl1bmd3ID0gMDsKLQljbWZsZ3MgPSBjbWZzYXY7Ci0JYXRtYnVmWzBd ID0gTlVMOwotICAgIH0KLX0KLQotc3RhdGljIGludAotZ3R3b3JkKGJyaykgaW50IGJyazsgewot ICAgIGludCBjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgY2hhciAq LwotICAgIGludCBxdW90ZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIHF1 b3RlIGNoYXJhY3RlciAqLwotICAgIGludCBlY2hvZiA9IDA7ICAgICAgICAgICAgICAgICAgICAg IC8qIEZsYWcgZm9yIHdoZXRoZXIgdG8gZWNobyAqLwotICAgIGludCBjb21tZW50ID0gMDsJCQkv KiBGbGFnIGZvciBpbiBjb21tZW50ICovCi0gICAgY2hhciAqY3AgPSBOVUxMOwkJCS8qIENvbW1l bnQgcG9pbnRlciAqLwotICAgIGludCBlaW50ciA9IDA7CQkJLyogRmxhZyBmb3Igc3lzY2FsbCBp bnRlcnJ1cHRlZCAqLwotICAgIGludCBicmFjZWx2bCA9IDA7CQkJLyogbmVzdGVkIGJyYWNlIGNv dW50ZXIgW2pyc10gKi8KLSAgICBpbnQgaXNjb250ZCA9IDA7CQkJLyogRmxhZyBmb3IgY29udGlu dWF0aW9uICovCi0gICAgaW50IHJlYWx0dHkgPSAwOwkJCS8qIFN0ZGluIGlzIHJlYWxseSBhIHR0 eSAqLwotICAgIGNoYXIgZmlyc3RuYiAgPSBOVUw7Ci0gICAgY2hhciBsYXN0Y2hhciA9IE5VTDsK LSAgICBjaGFyIHByZXZjaGFyID0gTlVMOwotICAgIGNoYXIgbGJyYWNlLCByYnJhY2U7Ci0gICAg aW50IGRxID0gMDsJCQkJLyogRG91YmxlcXVvdGUgZmxhZyAqLwotICAgIGludCBkcW4gPSAwOwkJ CS8qIGFuZCBjb3VudCAqLwotICAgIGludCBpc2VzYyA9IDA7Ci0KLSNpZmRlZiBSVFUKLSAgICBl eHRlcm4gaW50IHJ0dV9idWc7Ci0jZW5kaWYgLyogUlRVICovCi0KLSNpZmRlZiBJS1NECi0gICAg ZXh0ZXJuIGludCBpbnNlcnZlcjsKLSNlbmRpZiAvKiBJS1NEICovCi0gICAgZXh0ZXJuIGludCBr c3RhcnRhY3RpdmU7Ci0KLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgIGV4dGVybiBpbnQgdGVybXR5 cGU7ICAgICAgICAgICAgICAgIC8qIERHIHRlcm1pbmFsIHR5cGUgZmxhZyAqLwotICAgIGV4dGVy biBpbnQgY29uX3JlYWRzX210OyAgICAgICAgICAgIC8qIENvbnNvbGUgcmVhZCBhc3luY2ggaXMg YWN0aXZlICovCi0gICAgaWYgKGNvbl9yZWFkc19tdCkgY29ubm9pX210KCk7ICAgICAgLyogVGFz ayB3b3VsZCBpbnRlcmZlcmUgdy9jb25zIHJlYWQgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAq LwotCi0jaWZkZWYgQ09NTUVOVAotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewotCWRl YnVnKEYxMDEsImd0d29yZCBicmsiLCIiLGJyayk7Ci0JZGVidWcoRjEwMSwiZ3R3b3JkIGNtZmxk ZmxncyIsIiIsY21mbGRmbGdzKTsKLQlkZWJ1ZyhGMTAxLCJndHdvcmQgc3dhcmciLCIiLHN3YXJn KTsKLQlkZWJ1ZyhGMTAxLCJndHdvcmQgZHB4IiwiIixkcHgpOwotCWRlYnVnKEYxMDEsImd0d29y ZCBlY2hvZiIsIiIsZWNob2YpOwotI2lmbmRlZiBOT1NQTAotCWRlYnVnKEYxMDEsImd0d29yZCBh c2tmbGFnIiwiIixhc2tmbGFnKTsKLQlkZWJ1ZyhGMTAxLCJndHdvcmQgdGltZWxpbWl0IiwiIix0 aW1lbGltaXQpOwotI2lmbmRlZiBOT0xPQ0FMCi0jaWZuZGVmIE5PWEZFUgotI2lmZGVmIENLX0FV VE9ETAotCWRlYnVnKEYxMDEsImd0d29yZCBjbWRhZGwiLCIiLGNtZGFkbCk7Ci0jZW5kaWYgLyog Q0tfQVVUT0RMICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwot I2VuZGlmIC8qIE5PU1BMICovCi0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0jZW5kaWYgLyog Q09NTUVOVCAqLwotCi0gICAgcmVhbHR0eSA9IGlzX2FfdHR5KDApOwkJLyogU3RkaW4gaXMgcmVh bGx5IGEgdHR5PyAqLwotCi0gICAgaWYgKGNtZmxkZmxncyAmIDEpIHsKLQlsYnJhY2UgPSAnKCc7 Ci0JcmJyYWNlID0gJyknOwotICAgIH0gZWxzZSB7Ci0JbGJyYWNlID0gJ3snOwotCXJicmFjZSA9 ICd9JzsKLSAgICB9Ci0gICAgY3JmbGFnID0gMDsKLSAgICBxbWZsYWcgPSAwOwotICAgIGVzZmxh ZyA9IDA7Ci0KLSAgICBpZiAoc3dhcmcpIHsJCQkvKiBObyBsZWFkaW5nIHNwYWNlIGZvciBzd2l0 Y2ggYXJncyAqLwotCWlud29yZCA9IDE7Ci0Jc3dhcmcgPSAwOwotICAgIH0KLSAgICBpZiAodW5n dykgewkJCQkvKiBIYXZlIGEgd29yZCBzYXZlZD8gKi8KLSNpZmRlZiBNX1VOR1cKLQkvKiBFeHBl cmltZW50YWwgY29kZSB0byBhbGxvdyB1bmdldHRpbmcgbXVsdGlwbGUgd29yZHMuICovCi0JLyog U2VlIGNvbW1lbnRzIGluIGNrbWtleTIoKSBhYm92ZS4gKi8KLQlpbnQgeDsKLQlpZiAobnAgPiBw cCkgcHAgPSBucDsKLQl3aGlsZSAoKnBwID09IFNQKSBwcCsrOwotCWlmICghKnBwKSB7Ci0JICAg IHVuZ3cgPSAwOwotCSAgICBjbWZsZ3MgPSBjbWZzYXY7Ci0JfSBlbHNlIHsKLQkgICAgaWYgKCh4 ID0gc2V0YXRtKHBwLDIpKSA8IDApIHsKLQkJcHJpbnRmKCI/U2F2ZWQgd29yZCB0b28gbG9uZ1xu Iik7Ci0JCXJldHVybigtOSk7Ci0JICAgIH0KLQkgICAgaWYgKHBwW3hdID49IFNQKSB7Ci0JCWNo YXIgKnAyOwotCQlwMiA9IHBwOwotCQlwMiArPSB4OwotCQl3aGlsZSAoKnAyID09IFNQKSBwMisr OwotCQlpZiAoKnAyKSB7Ci0JCSAgICBucCA9IHAyOwotCQkgICAgdW5nd29yZCgpOwotCQl9Ci0J ICAgIH0gZWxzZSB7Ci0JCXVuZ3cgPSAwOwotCQljbWZsZ3MgPSBjbWZzYXY7Ci0JCWRlYnVnKEYw MTAsImd0d29yZCB1bmd3IHJldHVybiBhdG1idWYiLGF0bWJ1ZiwwKTsKLQkgICAgfQotCX0KLQly ZXR1cm4oY21mbGdzKTsKLSNlbHNlCi0JLyoKLQkgICBZb3Ugd291bGQgdGhpbmsgdGhlIGZvbGxv d2luZyBzaG91bGQgYmU6Ci0gICAgICAgICAgICAgd2hpbGUgKCpwcCA9PSBTUCkgcHArKzsKLSAg ICAgICAgICAgYnV0IHlvdSB3b3VsZCBiZSB3cm9uZyAtLSBtYWtpbmcgdGhpcyBjaGFuZ2UgYnJl YWtzIEdPVE8uCi0gICAgICAgICovCi0Jd2hpbGUgKCpwcCsrID09IFNQKSA7Ci0JaWYgKHNldGF0 bShwcCwyKSA8IDApIHsKLQkgICAgcHJpbnRmKCI/U2F2ZWQgd29yZCB0b28gbG9uZ1xuIik7Ci0J ICAgIHJldHVybigtOSk7Ci0JfQotCXVuZ3cgPSAwOwotCWNtZmxncyA9IGNtZnNhdjsKLQlkZWJ1 ZyhGMDEwLCJndHdvcmQgdW5ndyByZXR1cm4gYXRtYnVmIixhdG1idWYsMCk7Ci0JcmV0dXJuKGNt Zmxncyk7Ci0jZW5kaWYgLyogTV9VTkdXICovCi0gICAgfQotICAgIHBwID0gbnA7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IG9mIGN1cnJlbnQgZmllbGQgKi8KLQotI2lmZGVm IENPTU1FTlQKLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsKLQlkZWJ1ZyhGMTEwLCJn dHdvcmQgY21kYnVmIixjbWRidWYsMCk7Ci0JZGVidWcoRjExMCwiZ3R3b3JkIGJwIixicCwwKTsK LQlkZWJ1ZyhGMTEwLCJndHdvcmQgcHAiLHBwLDApOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAq LwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB7Ci0JLyogSWYgd2UgYXJlIHJlcGFyc2luZyB3 ZSBoYXZlIHRvIHJlY291bnQgYW55IGJyYWNlcyBvciBkb3VibGVxdW90ZXMgKi8KLQljaGFyICog cCA9IHBwOwotCWNoYXIgYzsKLQlpZiAoKnAgPT0gJyInKQotCSAgZHErKzsKLQl3aGlsZSAoKGMg PSAqcCsrKSkKLQkgIGlmIChjID09IGxicmFjZSkKLQkgICAgYnJhY2VsdmwrKzsKLQkgIGVsc2Ug aWYgKGMgPT0gcmJyYWNlKQotCSAgICBicmFjZWx2bC0tOwotCSAgZWxzZSBpZiAoZHEgJiYgYyA9 PSAnIicpCi0JICAgIGRxbisrOwotICAgIH0KLSAgICB3aGlsZSAoYnAgPCBjbWRidWYrQ01EQkwp IHsgICAgICAgICAvKiBCaWcgZ2V0LWEtY2hhcmFjdGVyIGxvb3AgKi8KLQllY2hvZiA9IDA7CQkJ LyogQXNzdW1lIHdlIGRvbid0IGVjaG8gYmVjYXVzZSAqLwotCWNoc3JjID0gMDsJCQkvKiBjaGFy YWN0ZXIgY2FtZSBmcm9tIHJlcGFyc2UgYnVmLiAqLwotI2lmZGVmIEJTX0RJUlNFUAotQ01ESVJQ QVJTRToKLSNlbmRpZiAvKiBCU19ESVJTRVAgKi8KLQotCWMgPSAqYnA7Ci0gICAgICAgIGlmICgh YykgewkJCS8qIElmIG5vIGNoYXIgd2FpdGluZyBpbiByZXBhcnNlIGJ1ZiAqLwotCSAgICBpZiAo KGRweAotI2lmbmRlZiBOT1NQTAotCQkgfHwgZWNob3N0YXJzCi0jZW5kaWYgLyogTk9TUEwgKi8K LQkJICkgJiYgKCFwdXNoYwotI2lmbmRlZiBOT1NQTAotCQkJfHwgYXNrZmxhZwotI2VuZGlmIC8q IE5PU1BMICovCi0JCQkpKQkJLyogR2V0IGZyb20gdHR5LCBzZXQgZWNobyBmbGFnICovCi0JICAg ICAgZWNob2YgPSAxOwotCSAgICBjID0gY21kZ2V0Yyh0aW1lbGltaXQpOwkvKiBSZWFkIGEgY29t bWFuZCBjaGFyYWN0ZXIuICovCi0jaWZkZWYgREVCVUcKLQkgICAgZGVidWcoRjEwMSwiZ3R3b3Jk IGMiLCIiLGMpOwotI2VuZGlmIC8qIERFQlVHICovCi0KLQkgICAgaWYgKHRpbWVsaW1pdCAmJiBj IDwgLTEpIHsJLyogVGltZWQgb3V0ICovCi0JCXJldHVybigtMTApOwotCSAgICB9Ci0KLSNpZm5k ZWYgTk9YRkVSCi0vKgotICBUaGUgZm9sbG93aW5nIGFsbG93cyBwYWNrZXQgcmVjb2duaXRpb24g aW4gdGhlIGNvbW1hbmQgcGFyc2VyLgotICBQcmVzZW50bHkgaXQgd29ya3Mgb25seSBmb3IgS2Vy bWl0IHBhY2tldHMsIGFuZCBpZiBvdXIgY3VycmVudCBwcm90b2NvbAotICBoYXBwZW5zIHRvIGJl IGFueXRoaW5nIGJlc2lkZXMgS2VybWl0LCB3ZSBzaW1wbHkgZm9yY2UgaXQgdG8gS2VybWl0Lgot ICBXZSBkb24ndCB1c2UgdGhlIEFQQyBtZWNoYW5pc20gaGVyZSBmb3IgbWVjaGFuaWNhbCByZWFz b25zLCBhbmQgYWxzbwotICBiZWNhdXNlIHRoaXMgd2F5LCBpdCB3b3JrcyBldmVuIHdpdGggbWlu aW1hbGx5IGNvbmZpZ3VyZWQgaW50ZXJhY3RpdmUKLSAgdmVyc2lvbnMuICBBZGQgWm1vZGVtIGxh dGVyLi4uCi0qLwotI2lmZGVmIENLX0FVVE9ETAotCSAgICBpZiAoKCFsb2NhbCAmJiBjbWRhZGwp CS8qIEF1dG9kb3dubG9hZCBlbmFibGVkPyAqLwotI2lmZGVmIElLU19PUFRJT04KLQkJfHwgVEVM T1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydAotI2VuZGlmIC8qIElLU19PUFRJ T04gKi8KLQkJKSB7Ci0JCWludCBrOwotCQlrID0ga3N0YXJ0KChDSEFSKWMpOwkvKiBLZXJtaXQg UyBvciBJIHBhY2tldD8gKi8KLQkJaWYgKGspIHsKLQkJICAgIGludCBrc2lnbiA9IDA7Ci0JCSAg ICBpZiAoayA8IDApIHsJLyogTWludXMtUHJvdG9jb2w/ICovCi0jaWZkZWYgTk9TRVJWRVIKLQkJ CWdvdG8gbm9zZXJ2ZXI7CS8qIE5lZWQgc2VydmVyIG1vZGUgZm9yIHRoaXMgKi8KLSNlbHNlCi0J CQlrc2lnbiA9IDE7CS8qIFJlbWVtYmVyICovCi0JCQlrID0gMCAtIGs7CS8qIENvbnZlcnQgdG8g YWN0dWFsIHByb3RvY29sICovCi0JCQlqdXN0b25lID0gMTsJLyogRmxhZyBmb3IgcHJvdG9jb2wg bW9kdWxlICovCi0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLQkJICAgIH0gZWxzZQotCQkgICAgICBq dXN0b25lID0gMDsKLQkJICAgIGstLTsJCS8qIEFkanVzdCBrc3RhcnQncyByZXR1cm4gdmFsdWUg Ki8KLQkJICAgIGlmIChrID09IFBST1RPX0spIHsKLQkJCWV4dGVybiBpbnQgcHJvdG9jb2wsIGdf cHJvdG87Ci0JCQlleHRlcm4gQ0hBUiBzc3RhdGU7Ci0JCQlnX3Byb3RvID0gcHJvdG9jb2w7Ci0J CQlwcm90b2NvbCA9IFBST1RPX0s7IC8qIENydWRlLi4uICovCi0JCQlzc3RhdGUgPSBrc2lnbiA/ ICd4JyA6ICd2JzsKLQkJCWNtZGJ1ZlswXSA9IE5VTDsKLQkJCXJldHVybigtMyk7Ci0JCSAgICB9 Ci0JCX0KLQkgICAgfQotI2lmZGVmIE5PU0VSVkVSCi0JICBub3NlcnZlcjoKLSNlbmRpZiAvKiBO T1NFUlZFUiAqLwotI2VuZGlmIC8qIENLX0FVVE9ETCAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwot Ci0JICAgIGNoc3JjID0gMTsJCQkvKiBSZW1lbWJlciBjaGFyYWN0ZXIgc291cmNlIGlzIHR0eS4g Ki8KLQkgICAgYnJrY2hhciA9IGM7Ci0KLSNpZmRlZiBJS1NECi0gICAgICAgICAgICBpZiAoaW5z ZXJ2ZXIgJiYgYyA8IDApIHsgICAgLyogRW5kIG9mIHNlc3Npb24/ICovCi0gICAgICAgICAgICAg ICAgZGVidWcoRjExMSwiZ3R3b3JkIGMgPCAwIiwiZXhpdGluZyIsYyk7Ci0gICAgICAgICAgICAg ICAgcmV0dXJuKC00KTsgICAgICAgICAgICAgLyogQ2xlYW51cCBhbmQgdGVybWluYXRlICovCi0g ICAgICAgICAgICB9Ci0jZW5kaWYgLyogSUtTRCAqLwotCi0jaWZkZWYgT1MyCi0gICAgICAgICAg IGlmIChjIDwgMCkgewkJCS8qIEVycm9yICovCi0JICAgICAgIGlmIChjID09IC0zKSB7CQkvKiBF bXB0eSB3b3JkPyAqLwotCQkgICBpZiAoYmxvY2tsdmwgPiAwKQkvKiBJbiBhIGJsb2NrICovCi0J CSAgICAgY29udGludWU7CQkvKiBzbyBrZWVwIGxvb2tpbmcgZm9yIGJsb2NrIGVuZCAqLwotCQkg ICBlbHNlCi0JCSAgICAgcmV0dXJuKC0zKTsJLyogT3RoZXJ3aXNlIHNheSB3ZSBnb3Qgbm90aGlu ZyAqLwotCSAgICAgICB9IGVsc2UgewkJCS8qIE5vdCBlbXB0eSB3b3JkICovCi0JCSAgIHJldHVy bigtNCk7CQkvKiBTbyBzb21lIGtpbmQgb2YgaS9vIGVycm9yICovCi0JICAgICAgIH0KLSAgICAg ICAgICAgfQotI2Vsc2UKLSNpZmRlZiBNQUMKLQkgICBpZiAoYyA9PSAtMykJCQkvKiBFbXB0eSB3 b3JkLi4uICovCi0JICAgICBpZiAoYmxvY2tsdmwgPiAwKQotCSAgICAgICBjb250aW51ZTsKLQkg ICAgIGVsc2UKLQkgICAgICAgcmV0dXJuKC0zKTsKLSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAv KiBPUzIgKi8KLQkgICBpZiAoYyA9PSBFT0YpIHsJCS8qIFRoaXMgY2FuIGhhcHBlbiBpZiBzdGRp biBub3QgdHR5LiAqLwotI2lmZGVmIEVJTlRSCi0vKgotICBTb21lIG9wZXJhdGluZyBhbmQvb3Ig QyBydW50aW1lIHN5c3RlbXMgcmV0dXJuIEVJTlRSIGZvciBubyBnb29kIHJlYXNvbiwKLSAgd2hl biB0aGUgZW5kIG9mIHRoZSBzdGFuZGFyZCBpbnB1dCAiZmlsZSIgaXMgZW5jb3VudGVyZWQuICBJ biBjYXNlcyBsaWtlCi0gIHRoaXMsIHdlIGdldCBpbnRvIGFuIGluZmluaXRlIGxvb3A7IGhlbmNl IHRoZSBlaW50ciBjb3VudGVyLCB3aGljaCBpcyByZXNldAotICB0byAwIHVwb24gZWFjaCBjYWxs IHRvIHRoaXMgcm91dGluZS4KLSovCi0JCWRlYnVnKEYxMDEsImd0d29yZCBFT0YiLCIiLGVycm5v KTsKLQkJaWYgKGVycm5vID09IEVJTlRSICYmICsrZWludHIgPCA0KSAvKiBXaGVuIGJnJ2QgcHJv Y2VzcyBpcyAqLwotCQkgIGNvbnRpbnVlOwkJLyogZmcnZCBhZ2Fpbi4gKi8KLSNlbmRpZiAvKiBF SU5UUiAqLwotCQlyZXR1cm4oLTQpOwotCSAgICB9Ci0JICAgIGMgJj0gY21kbXNrOwkJLyogU3Ry aXAgYW55IHBhcml0eSBiaXQgKi8KLQl9CQkJCS8qIGlmIGRlc2lyZWQuICovCi0KLS8qIE5vdyB3 ZSBoYXZlIHRoZSBuZXh0IGNoYXJhY3RlciAqLwotCi0JaXNlc2MgPSAoYyA9PSBFU0MpOwkJLyog QSByZWFsIEVTQz8gKi8KLQotCWlmICghZmlyc3RuYiAmJiBjID4gU1ApIHsJLyogRmlyc3Qgbm9u YmxhbmsgKi8KLQkgICAgZmlyc3RuYiA9IGM7Ci0JICAgIGlmIChjID09ICciJykJCS8qIFN0YXJ0 cyB3aXRoIGRvdWJsZXF1b3RlICovCi0JICAgICAgZHEgPSAxOwotCX0KLQlpZiAoYyA9PSAnIicp CQkJLyogQ291bnQgZG91YmxlcXVvdGVzICovCi0JICBkcW4rKzsKLQotCWlmIChxdW90ZSAmJiAo YyA9PSBDUiB8fCBjID09IExGKSkgeyAvKiBFbnRlciBrZXkgZm9sbG93aW5nIHF1b3RlICovCi0J ICAgICpicCsrID0gQ01EUTsJCS8qIERvdWJsZSBpdCAqLwotCSAgICAqYnAgPSBOVUw7Ci0JICAg IHF1b3RlID0gMDsKLQl9Ci0gICAgICAgIGlmIChxdW90ZSA9PSAwKSB7CQkvKiBJZiB0aGlzIGlz IG5vdCBhIHF1b3RlZCBjaGFyYWN0ZXIgKi8KLQkgICAgc3dpdGNoIChjKSB7Ci0JICAgICAgY2Fz ZSBDTURROgkJLyogR290IHRoZSBxdW90ZSBjaGFyYWN0ZXIgaXRzZWxmICovCi0JCWlmICghY29t bWVudCAmJiBxdW90aW5nKQotCQkgIHF1b3RlID0gMTsJCS8qIEZsYWcgaXQgaWYgbm90IGluIGEg Y29tbWVudCAqLwotCQlicmVhazsKLQkgICAgICBjYXNlIEZGOgkJCS8qIEZvcm1mZWVkLiAqLwot ICAgICAgICAgICAgICAgIGMgPSBOTDsgICAgICAgICAgICAgICAgIC8qIFJlcGxhY2Ugd2l0aCBu ZXdsaW5lICovCi0JCWNtZGNscnNjbigpOwkJLyogQ2xlYXIgdGhlIHNjcmVlbiAqLwotCQlicmVh azsKLQkgICAgICBjYXNlIEhUOgkJCS8qIEhvcml6b250YWwgVGFiICovCi0JCWlmIChjb21tZW50 KQkJLyogSWYgaW4gY29tbWVudCwgKi8KLQkJICBjID0gU1A7CQkvKiBzdWJzdGl0dXRlIHNwYWNl ICovCi0JCWVsc2UJCQkvKiBvdGhlcndpc2UgKi8KLQkJICBjID0gRVNDOwkJLyogc3Vic3RpdHV0 ZSBFU0MgKGZvciBjb21wbGV0aW9uKSAqLwotCQlicmVhazsKLQkgICAgICBjYXNlICc7JzoJCQkv KiBUcmFpbGluZyBjb21tZW50ICovCi0JICAgICAgY2FzZSAnIyc6Ci0JCWlmICghIChicmsgJiA0 KSApIHsJLyogSWYgbm90IGtlZXBpbmcgY29tbWVudHMgKi8KLQkJICAgIGlmIChpbndvcmQgPT0g MCAmJiBxdW90aW5nKSB7IC8qIElmIG5vdCBpbiBhIHdvcmQgKi8KLQkJCWNvbW1lbnQgPSAxOwkv KiBzdGFydCBhIGNvbW1lbnQuICovCi0JCQljcCA9IGJwOwkvKiByZW1lbWJlciB3aGVyZSBpdCBz dGFydHMuICovCi0JCSAgICB9Ci0JCX0KLQkJYnJlYWs7Ci0JICAgIH0KLQkgICAgaWYgKCFrc3Rh cnRhY3RpdmUgJiYJLyogTm90IGluIHBvc3NpYmxlIEtlcm1pdCBwYWNrZXQgKi8KLQkJIWNvbW1l bnQgJiYgYyA9PSBTUCkgewkvKiBTcGFjZSBub3QgaW4gY29tbWVudCAqLwotICAgICAgICAgICAg ICAgICpicCsrID0gKGNoYXIpIGM7CS8qIGRlcG9zaXQgaW4gYnVmZmVyIGlmIG5vdCBhbHJlYWR5 ICovCi0JCS8qIGRlYnVnKEYxMDEsImd0d29yZCBlY2hvZiAyIiwiIixlY2hvZik7ICovCi0jaWZk ZWYgQkVCT1gKLSAgICAgICAgICAgICAgICBpZiAoZWNob2YpIHsKLQkJICAgIGNtZGVjaG8oKGNo YXIpIGMsIDApOyAvKiBFY2hvIHdoYXQgd2FzIHR5cGVkLiAqLwotICAgICAgICAgICAgICAgICAg ICBmZmx1c2goc3Rkb3V0KTsKLSAgICAgICAgICAgICAgICAgICAgZmZsdXNoKHN0ZGVycik7Ci0g ICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgICBpZiAoZWNob2YpIHsKLQkJ ICAgIGNtZGVjaG8oKGNoYXIpIGMsIDApOyAvKiBFY2hvIHdoYXQgd2FzIHR5cGVkLiAqLwotCQkg ICAgaWYgKHRpbWVsaW1pdCkKLQkJICAgICAgZmZsdXNoKHN0ZG91dCk7Ci0JCX0KLSNlbmRpZiAv KiBCRUJPWCAqLwotICAgICAgICAgICAgICAgIGlmIChpbndvcmQgPT0gMCkgeyAgICAgIC8qIElm IGxlYWRpbmcsIGdvYmJsZSBpdC4gKi8KLSAgICAgICAgICAgICAgICAgICAgcHArKzsKLSAgICAg ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAg ICAgICAgICAgLyogSWYgdGVybWluYXRpbmcsIHJldHVybi4gKi8KLQkJICAgIGlmICgoIWRxICYm ICgoKnBwICE9IGxicmFjZSkgfHwgKGJyYWNlbHZsID09IDApKSkgfHwKLQkJCShkcSAmJiBkcW4g PiAxICYmICooYnAtMikgPT0gJyInKSkgewotCQkJbnAgPSBicDsKLQkJCWNtYnB0ciA9IG5wOwot CQkJaWYgKHNldGF0bShwcCwwKSA8IDApIHsKLQkJCSAgICBwcmludGYoIj9GaWVsZCB0b28gbG9u ZyBlcnJvciAxXG4iKTsKLQkJCSAgICBkZWJ1ZyhGMTExLCJndHdvcmQgdG9vIGxvbmcgIzEiLHBw LHN0cmxlbihwcCkpOwotCQkJICAgIHJldHVybigtOSk7Ci0JCQl9Ci0JCQlicmtjaGFyID0gYzsK LQkJCWlud29yZCA9IGNtZmxncyA9IDA7Ci0JCQlyZXR1cm4oMCk7Ci0JCSAgICB9Ci0gICAgICAg ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIGlmIChjID09IGxicmFjZSkgewotCQlicmFjZWx2bCsrOwotCQkvKiBkZWJ1 ZyhGMTAxLCJndHdvcmQgYnJhY2VsdmwrKyIsIiIsYnJhY2VsdmwpOyAqLwotCSAgICB9Ci0gICAg ICAgICAgICBpZiAoYyA9PSByYnJhY2UgJiYgYnJhY2VsdmwgPiAwKSB7Ci0gICAgICAgICAgICAg ICAgYnJhY2VsdmwtLTsKLQkJLyogZGVidWcoRjEwMSwiZ3R3b3JkIGJyYWNlbHZsLS0iLCIiLGJy YWNlbHZsKTsgKi8KLSAgICAgICAgICAgICAgICBpZiAobGluZWJlZ2luKQotCQkgIGJsb2NrbHZs LS07Ci0gICAgICAgICAgICB9Ci0JICAgIGlmICgoYyA9PSAnPScgfHwgYyA9PSAnOicpICYmCi0J CS8qIF5eXiAqLwotCQkha3N0YXJ0YWN0aXZlICYmICFjb21tZW50ICYmIGJyayAvKiAmJiAoZmly c3RuYiA9PSAnLycpICovCi0JCSkgewotICAgICAgICAgICAgICAgICpicCsrID0gKGNoYXIpIGM7 CS8qIFN3aXRjaCBhcmd1bWVudCBzZXBhcmF0b3IgKi8KLQkJLyogZGVidWcoRjExMSwiZ3R3b3Jk IHN3aXRjaCBhcmdzZXAiLGNtZGJ1ZixicmspOyAqLwotI2lmZGVmIEJFQk9YCi0gICAgICAgICAg ICAgICAgaWYgKGVjaG9mKSB7Ci0JCSAgICBjbWRlY2hvKChjaGFyKSBjLCAwKTsgLyogRWNobyB3 aGF0IHdhcyB0eXBlZC4gKi8KLSAgICAgICAgICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7Ci0g ICAgICAgICAgICAgICAgICAgIGZmbHVzaChzdGRlcnIpOwotICAgICAgICAgICAgICAgIH0KLSNl bHNlCi0JCWlmIChlY2hvZikgewotCQkgICAgY21kZWNobygoY2hhcikgYywgMCk7IC8qIEVjaG8g d2hhdCB3YXMgdHlwZWQuICovCi0JCSAgICBpZiAodGltZWxpbWl0KQotCQkgICAgICBmZmx1c2go c3Rkb3V0KTsKLQkJfQotI2VuZGlmIC8qIEJFQk9YICovCi0JCWlmICgoKnBwICE9IGxicmFjZSkg fHwgKGJyYWNlbHZsID09IDApKSB7Ci0JCSAgICBucCA9IGJwOwotCQkgICAgY21icHRyID0gbnA7 Ci0JCSAgICBpZiAoc2V0YXRtKHBwLDIpIDwgMCkgeyAvKiBeXl4gKi8KLQkJCXByaW50ZigiP0Zp ZWxkIHRvbyBsb25nIGVycm9yIDFcbiIpOwotCQkJZGVidWcoRjExMSwiZ3R3b3JkIHRvbyBsb25n ICMxIixwcCxzdHJsZW4ocHApKTsKLQkJCXJldHVybigtOSk7Ci0JCSAgICB9Ci0JCSAgICBpbndv cmQgPSBjbWZsZ3MgPSAwOwotCQkgICAgYnJrY2hhciA9IGM7Ci0JCSAgICByZXR1cm4oNCk7Ci0J CX0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjID09IExGIHx8IGMgPT0gQ1IpIHsJ LyogQ1Igb3IgTEYuICovCi0JCWlmIChlY2hvZikgewotICAgICAgICAgICAgICAgICAgICBjbWRu ZXdsKChjaGFyKWMpOwkvKiBlY2hvIGl0LiAqLwotI2lmZGVmIEJFQk9YCi0gICAgICAgICAgICAg ICAgICAgIGZmbHVzaChzdGRvdXQpOwotICAgICAgICAgICAgICAgICAgICBmZmx1c2goc3RkZXJy KTsKLSNlbmRpZiAvKiBCRUJPWCAqLwotICAgICAgICAgICAgICAgIH0KLQkJewotCQkgICAgLyog VHJpbSB0cmFpbGluZyBjb21tZW50IGFuZCB3aGl0ZXNwYWNlICovCi0JCSAgICBjaGFyICpxcTsK LQkJICAgIGlmIChjb21tZW50KSB7CS8qIEVyYXNlIGNvbW1lbnQgKi8KLQkJCXdoaWxlIChicCA+ PSBjcCkgLyogQmFjayB0byBjb21tZW50IHBvaW50ZXIgKi8KLQkJCSAgKmJwLS0gPSBOVUw7Ci0J CQlicCsrOwotCQkJcHAgPSBicDsJLyogQWRqdXN0IG90aGVyIHBvaW50ZXJzICovCi0JCQlpbndv cmQgPSAwOwkvKiBhbmQgZmxhZ3MgKi8KLQkJCWNvbW1lbnQgPSAwOwotCQkJY3AgPSBOVUxMOwot CQkgICAgfQotCQkgICAgcXEgPSBpbndvcmQgPyBwcCA6IChjaGFyICopY21kYnVmOwotCQkgICAg LyogRXJhc2UgdHJhaWxpbmcgd2hpdGVzcGFjZSAqLwotCQkgICAgd2hpbGUgKGJwID4gcXEgJiYg KCooYnAtMSkgPT0gU1AgfHwgKihicC0xKSA9PSBIVCkpIHsKLQkJCWJwLS07Ci0JCQkvKiBkZWJ1 ZyhGMDAwLCJlcmFzaW5nIiwiIiwqYnApOyAqLwotCQkJKmJwID0gTlVMOwotCQkgICAgfQotCQkg ICAgbGFzdGNoYXIgPSAoYnAgPiBxcSkgPyAqKGJwLTEpIDogTlVMOwotCQkgICAgcHJldmNoYXIg PSAoYnAgPiBxcSsxKSA/ICooYnAtMikgOiBOVUw7Ci0JCX0KLQkJaWYgKGxpbmViZWdpbiAmJiBi bG9ja2x2bCA+IDApIC8qIEJsYW5rIGxpbmUgaW4gey4uLn0gYmxvY2sgKi8KLQkJICBjb250aW51 ZTsKLQotCQlsaW5lYmVnaW4gPSAxOwkJLyogQXQgYmVnaW5uaW5nIG9mIG5leHQgbGluZSAqLwot CQlpc2NvbnRkID0gcHJldmNoYXIgIT0gQ01EUSAmJgotCQkgIChsYXN0Y2hhciA9PSAnLScgfHwg bGFzdGNoYXIgPT0gbGJyYWNlKTsKLQkJZGVidWcoRjEwMSwiZ3R3b3JkIGlzY29udGQiLCIiLGlz Y29udGQpOwotCi0gICAgICAgICAgICAgICAgaWYgKGlzY29udGQpIHsJCS8qIElmIGxpbmUgaXMg Y29udGludWVkLi4uICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChjaHNyYykgewkvKiBJZiBy ZWFkaW5nIGZyb20gdHR5LCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCooYnAtMSkg PT0gbGJyYWNlKSB7IC8qIENoZWNrIGZvciAiYmVnaW4gYmxvY2siICovCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgKmJwKysgPSBTUDsJLyogSW5zZXJ0IGEgc3BhY2UgZm9yIG5lYXRuZXNz ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tsdmwrKzsJLyogQ291bnQgYmxv Y2sgbmVzdGluZyBsZXZlbCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsJLyog T3IgaHlwaGVuICovCi0JCQkgICAgYnAtLTsJLyogT3ZlcndyaXRlIHRoZSBoeXBoZW4gKi8KLSAg ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICpicCA9IE5V TDsJLyogZXJhc2UgdGhlIGRhc2gsICovCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51 ZTsJLyogYW5kIGdvIGJhY2sgZm9yIG5leHQgY2hhciBub3cuICovCi0gICAgICAgICAgICAgICAg ICAgIH0KLQkJfSBlbHNlIGlmIChibG9ja2x2bCA+IDApIHsgLyogTm8gY29udGludWF0aW9uIGNo YXJhY3RlciAqLwotCQkgICAgaWYgKGNoc3JjKSB7CS8qIEJ1dCB3ZSdyZSBpbiBhICJibG9jayIg Ki8KLQkJCSpicCsrID0gJywnOwkvKiBBZGQgY29tbWEgKi8KLQkJCSpicCA9IE5VTDsKLQkJCWNv bnRpbnVlOwotCQkgICAgfQotCQl9IGVsc2UgewkJLyogTm8gY29udGludWF0aW9uLCBlbmQgb2Yg Y29tbWFuZC4gKi8KLQkJICAgICpicCA9IE5VTDsJCS8qIFRlcm1pbmF0ZSB0aGUgY29tbWFuZCBz dHJpbmcuICovCi0JCSAgICBpZiAoY29tbWVudCkgewkvKiBJZiB3ZSdyZSBpbiBhIGNvbW1lbnQs ICovCi0JCQljb21tZW50ID0gMDsJLyogU2F5IHdlJ3JlIG5vdCBhbnkgbW9yZSwgKi8KLQkJCSpj cCA9IE5VTDsJLyogY3V0IGl0IG9mZi4gKi8KLQkJICAgIH0KLQkJICAgIG5wID0gYnA7CQkvKiBX aGVyZSB0byBzdGFydCBuZXh0IGZpZWxkLiAqLwotCQkgICAgY21icHRyID0gbnA7Ci0JCSAgICBp ZiAoc2V0YXRtKHBwLDApIDwgMCkgeyAvKiBDb3B5IGZpZWxkIHRvIGF0b20gYnVmZmVyICovCi0J CQlkZWJ1ZyhGMTExLCJndHdvcmQgdG9vIGxvbmcgIzIiLHBwLHN0cmxlbihwcCkpOwotCQkJcHJp bnRmKCI/RmllbGQgdG9vIGxvbmcgZXJyb3IgMlxuIik7Ci0JCQlyZXR1cm4oLTkpOwotCQkgICAg fQotCQkgICAgaW53b3JkID0gMDsJCS8qIE5vdCBpbiBhIHdvcmQgYW55IG1vcmUuICovCi0JCSAg ICBjcmZsYWcgPSAxOwotICAgICAgICAgICAgICAgICAgICAvKiBkZWJ1ZyhGMTEwLCJndHdvcmQi LCJjcmZsYWcgaXMgc2V0IiwwKTsgKi8KLSNpZmRlZiBDS19SRUNBTEwKLQkJICAgIGN1cnJlbnQg PSBybGFzdDsKLSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLQkJICAgIGNtZmxncyA9IDE7Ci0JCSAg ICBpZiAoIXhjbWRzcmMKLSNpZmRlZiBDS19SRUNBTEwKLQkJCXx8IGZvcmNlX2FkZAotI2VuZGlm IC8qIENLX1JFQ0FMTCAqLwotCQkJKQotICAJCSAgICAgIGFkZGNtZChjbWRidWYpOwotCQkgICAg cmV0dXJuKGNtZmxncyk7Ci0JCX0KLSAgICAgICAgICAgIH0KLS8qCi0gIFRoaXMgc2VjdGlvbiBo YW5kbGVzIGludGVyYWN0aXZlIGhlbHAsIGNvbXBsZXRpb24sIGVkaXRpbmcsIGFuZCBoaXN0b3J5 LgotICBSZWFycmFuZ2VkIGFzIGEgc3dpdGNoIHN0YXRlbWVudCBleGVjdXRlZCBvbmx5IGlmIHdl J3JlIGF0IHRvcCBsZXZlbCBzaW5jZQotICB0aGVyZSBpcyBubyBuZWVkIGZvciBhbnkgb2YgdGhp cyB3aXRoaW4gY29tbWFuZCBmaWxlcyBhbmQgbWFjcm9zOiBBdWcgMjAwMC4KLSAgSnVuIDIwMDE6 IEV2ZW4gaWYgYXQgdG9wIGxldmVsLCBza2lwIHRoaXMgaWYgdGhlIGNoYXJhY3RlciB3YXMgZmV0 Y2hlZCBmcm9tCi0gIHRoZSByZXBhcnNlIG9yIHJlY2FsbCBidWZmZXIsIG9yIGlmIHN0ZGluIGlz IHJlZGlyZWN0ZWQuCi0qLwotCSAgICBpZiAoKHhjbWRzcmMgPT0gMAkJLyogT25seSBhdCB0b3Ag bGV2ZWwgKi8KLSNpZm5kZWYgTk9TUEwKLQkJfHwgYXNrZmxhZwkJLyogb3IgdXNlciBpcyB0eXBp bmcgQVNLIHJlc3BvbnNlICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLQkJICkgJiYgY2hzcmMgIT0g MCAmJiByZWFsdHR5KSB7IC8qIGZyb20gdGhlIHJlYWwga2V5Ym9hcmQgKi8KLQotLyogVXNlIEFO U0kgLyBWVDEwMCB1cCBhbmQgZG93biBhcnJvdyBrZXlzIGZvciBjb21tYW5kIHJlY2FsbC4gICov Ci0KLQkJaWYgKGlzZXNjICYmICgKLSNpZmRlZiBJS1NECi0JCSAgICBpbnNlcnZlcgotI2Vsc2UK LQkJICAgIDAKLSNlbmRpZiAvKiBJS1NEICovCi0jaWZkZWYgVVNFX0FSUk9XS0VZUwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfHwgMQotI2VuZGlmIC8qIFVTRV9BUlJPV0tFWVMgKi8K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgICAgKSB7 CQkvKiBBIHJlYWwgRVNDIHdhcyB0eXBlZCAqLwotCQkgICAgaW50IHg7Ci0JCSAgICBtc2xlZXAo MjAwKTsJLyogV2FpdCAxLzUgc2VjICovCi0JCSAgICB4ID0gY21kY29uY2hrKCk7CS8qIFdhcyBp dCBmb2xsb3dlZCBieSBhbnl0aGluZz8gKi8KLQkJICAgIGRlYnVnKEYxMDEsIkFycm93a2V5IEVT QyBjbWRjb25jaGsiLCIiLHgpOwotCi0JCSAgICBpZiAoeCA+IDEpIHsJLyogSWYgZm9sbG93ZWQg YnkgYXQgbGVhc3QgMiBjaGFycyAqLwotCQkJaW50IGMyOwotCQkJYzIgPSBjbWRnZXRjKDApOyAv KiBHZXQgdGhlIGZpcnN0IG9uZSAqLwotCQkJZGVidWcoRjEwMSwiQXJyb3drZXkgRVNDIGMyIiwi IixjMik7Ci0KLQkJCWlmIChjMiAhPSAnWycgJiYgYzIgIT0gJ08nKSB7IC8qIElmIG5vdCBbIG9y IE8gKi8KLQkJCSAgICBwdXNoYyA9IGMyOwkvKiBQdXNoIGl0IGFuZCB0YWtlIHRoZSBFU0Mgc29s byAqLwotCQkJfSBlbHNlIHsKLQkJCSAgICBjMiA9IGNtZGdldGMoMCk7IC8qIEdldCB0aGUgc2Vj b25kIG9uZSAqLwotCQkJICAgIGRlYnVnKEYxMDEsIkFycm93a2V5IEVTQyBjMyIsIiIsYzIpOwot CQkJICAgIHN3aXRjaCAoYzIpIHsKLSNpZm5kZWYgTk9SRUNBTEwKLQkJCSAgICAgIGNhc2UgJ0En OgkvKiBVcCAqLwotCQkJCWMgPSBCRUw7Ci0JCQkJYyA9IENfVVA7Ci0JCQkJYnJlYWs7Ci0JCQkg ICAgICBjYXNlICdCJzoJLyogRG93biAqLwotCQkJCWMgPSBCRUw7Ci0JCQkJYyA9IENfRE47Ci0J CQkJYnJlYWs7Ci0JCQkgICAgICBjYXNlICdDJzoJLyogUmlnaHQgKi8KLQkJCSAgICAgIGNhc2Ug J0QnOgkvKiBMZWZ0ICovCi0jZWxzZQotCQkJICAgICAgZGVmYXVsdDoKLSNlbmRpZiAvKiBOT1JF Q0FMTCAqLwotCQkJCWMgPSBCRUw7IC8qIFdlIGRvbid0IHVzZSB0aGVzZSB5ZXQgKi8KLQkJCQli cmVhazsKLQkJCSAgICB9Ci0JCQl9Ci0JCSAgICB9Ci0JCX0KLQotCQlzd2l0Y2ggKGMpIHsKLQkJ ICBjYXNlICc/JzoJCS8qID8tSGVscCAqLwotI2lmbmRlZiBOT1NQTAotCQkgICAgaWYgKGFza2Zs YWcpCS8qIE5vIGhlbHAgaW4gQVNLIHJlc3BvbnNlICovCi0JCSAgICAgIGJyZWFrOwotI2VuZGlm IC8qIE5PU1BMICovCi0JCSAgICBpZiAocXVvdGluZwotCQkJJiYgIWtzdGFydGFjdGl2ZQotCQkJ JiYgIWNvbW1lbnQKLQkJCSkgewotCQkJY21kZWNobygoY2hhcikgYywgMCk7Ci0JCQkqYnAgPSBO VUw7Ci0JCQlpZiAoc2V0YXRtKHBwLDApIDwgMCkgewotCQkJICAgIGRlYnVnKEYxMTEsImd0d29y ZCB0b28gbG9uZyA/IixwcCxzdHJsZW4ocHApKTsKLQkJCSAgICBwcmludGYoIj9Ub28gbG9uZ1xu Iik7Ci0JCQkgICAgcmV0dXJuKC05KTsKLQkJCX0KLQkJCXFtZmxhZyA9IDE7Ci0JCQlyZXR1cm4o Y21mbGdzID0gMyk7Ci0JCSAgICB9Ci0KLQkJICBjYXNlIEVTQzoJCS8qIEVzYyBvciBUYWIgY29t cGxldGlvbiAqLwotCQkgICAgaWYgKCFjb21tZW50KSB7Ci0JCQkqYnAgPSBOVUw7Ci0JCQlpZiAo c2V0YXRtKHBwLDApIDwgMCkgewotCQkJICAgIGRlYnVnKEYxMTEsImd0d29yZCB0b28gbG9uZyBF c2MiLHBwLHN0cmxlbihwcCkpOwotCQkJICAgIHByaW50ZigiP1RvbyBsb25nXG4iKTsKLQkJCSAg ICByZXR1cm4oLTkpOwotCQkJfQotCQkJZXNmbGFnID0gMTsKLQkJCXJldHVybihjbWZsZ3MgPSAy KTsKLQkJICAgIH0gZWxzZSB7Ci0JCQlibGVlcChCUF9XQVJOKTsKLQkJCWNvbnRpbnVlOwotCQkg ICAgfQotCi0JCSAgY2FzZSBCUzoJCS8qIENoYXJhY3RlciBkZWxldGlvbiAqLwotCQkgIGNhc2Ug UlVCOgotCQkgICAgaWYgKGJwID4gY21kYnVmKSB7CS8qIElmIHN0aWxsIGluIGJ1ZmZlci4uLiAq LwotCQkJY21kY2hhcmRlbCgpOwkvKiBlcmFzZSBpdC4gKi8KLQkJCWJwLS07CQkvKiBwb2ludCBi ZWhpbmQgaXQsICovCi0JCQlpZiAoKmJwID09IGxicmFjZSkgYnJhY2VsdmwtLTsgLyogQWRqdXN0 IGJyYWNlIGNvdW50ICovCi0JCQlpZiAoKmJwID09IHJicmFjZSkgYnJhY2VsdmwrKzsKLQkJCWlm ICgoKmJwID09IFNQKSAmJiAvKiBGbGFnIGlmIGN1cnJlbnQgZmllbGQgZ29uZSAqLwotCQkJICAg ICgqcHAgIT0gbGJyYWNlIHx8IGJyYWNlbHZsID09IDApKQotCQkJICBpbndvcmQgPSAwOwotCQkJ KmJwID0gTlVMOwkvKiBFcmFzZSBjaGFyYWN0ZXIgZnJvbSBidWZmZXIuICovCi0JCSAgICB9IGVs c2UgewkJLyogT3RoZXJ3aXNlLCAqLwotCQkJYmxlZXAoQlBfV0FSTik7Ci0JCQljbXJlcygpOwkv KiBhbmQgc3RhcnQgcGFyc2luZyBhIG5ldyBjb21tYW5kLiAqLwotCQkJKmJwID0gKmF0bWJ1ZiA9 IE5VTDsKLQkJICAgIH0KLQkJICAgIGlmIChwcCA8IGJwKQotCQkgICAgICBjb250aW51ZTsKLQkJ ICAgIGVsc2UKLQkJICAgICAgcmV0dXJuKGNtZmxncyA9IC0xKTsKLQotCQkgIGNhc2UgTERFTDoJ CS8qIF5VLCBsaW5lIGRlbGV0aW9uICovCi0JCSAgICB3aGlsZSAoKGJwLS0pID4gY21kYnVmKSB7 Ci0JCQljbWRjaGFyZGVsKCk7Ci0JCQkqYnAgPSBOVUw7Ci0JCSAgICB9Ci0JCSAgICBjbXJlcygp OwkJLyogUmVzdGFydCB0aGUgY29tbWFuZC4gKi8KLQkJICAgICpicCA9ICphdG1idWYgPSBOVUw7 Ci0JCSAgICBpbndvcmQgPSAwOwotCQkgICAgcmV0dXJuKGNtZmxncyA9IC0xKTsKLQotCQkgIGNh c2UgV0RFTDoJCS8qIF5XLCB3b3JkIGRlbGV0aW9uICovCi0JCSAgICBpZiAoYnAgPD0gY21kYnVm KSB7CS8qIEJlZXAgaWYgbm90aGluZyB0byBkZWxldGUgKi8KLQkJCWJsZWVwKEJQX1dBUk4pOwot CQkJY21yZXMoKTsKLQkJCSpicCA9ICphdG1idWYgPSBOVUw7Ci0JCQlyZXR1cm4oY21mbGdzID0g LTEpOwotCQkgICAgfQotCQkgICAgYnAtLTsKLQkJICAgIC8qIEJhY2sgdXAgb3ZlciBhbnkgdHJh aWxpbmcgbm9uYWxwaGFudW1zICovCi0JCSAgICAvKiBUaGlzIGlzIGRlcGVuZGVudCBvbiBBU0NJ SSBjb2xsYXRpbmcgc2VxdWVuY2UgKi8KLQkJICAgIC8qIGJ1dCBpc2FscGhhbnVtKCkgaXMgbm90 IGF2YWlsYWJsZSBldmVyeXdoZXJlLiAqLwotCQkgICAgZm9yICggOwotCQkJIChicCA+PSBjbWRi dWYpICYmCi0JCQkgKCgqYnAgPCAnMCcpIHx8Ci0JCQkgKCgqYnAgPiAnOScpICYmICgqYnAgPCAn QCcpKSB8fAotCQkJICgoKmJwID4gJ1onKSAmJiAoKmJwIDwgJ2EnKSkgfHwKLQkJCSAoKmJwID4g J3onKSk7Ci0JCQkgYnAtLQotCQkJICkgewotCQkJY21kY2hhcmRlbCgpOwotCQkJKmJwID0gTlVM OwotCQkgICAgfQotCQkgICAgLyogTm93IGRlbGV0ZSBiYWNrIHRvIHJpZ2h0bW9zdCByZW1haW5p bmcgbm9uYWxwaGFudW0gKi8KLQkJICAgIGZvciAoIDsgKGJwID49IGNtZGJ1ZikgJiYgKCpicCkg OyBicC0tKSB7Ci0JCQlpZiAoKCpicCA8ICcwJykgfHwKLQkJCSAgICAoKmJwID4gJzknICYmICpi cCA8ICdAJykgfHwKLQkJCSAgICAoKmJwID4gJ1onICYmICpicCA8ICdhJykgfHwKLQkJCSAgICAo KmJwID4gJ3onKSkKLQkJCSAgYnJlYWs7Ci0JCQljbWRjaGFyZGVsKCk7Ci0JCQkqYnAgPSBOVUw7 Ci0JCSAgICB9Ci0JCSAgICBicCsrOwotCQkgICAgaW53b3JkID0gMDsKLQkJICAgIHJldHVybihj bWZsZ3MgPSAtMSk7Ci0KLQkJICBjYXNlIFJESVM6IHsJCS8qIF5SLCByZWRpc3BsYXkgKi8KLQkJ ICAgICAgY2hhciAqY3B4OyBjaGFyIGN4OwotCQkgICAgICAqYnAgPSBOVUw7Ci0JCSAgICAgIHBy aW50ZigiXG4lcyIsY21wcm9tKTsKLQkJICAgICAgY3B4ID0gY21kYnVmOwotCQkgICAgICB3aGls ZSAoKGN4ID0gKmNweCsrKSkgewotCQkJICBjbWRlY2hvKGN4LDApOwotCQkgICAgICB9Ci0JCSAg ICAgIGZmbHVzaChzdGRvdXQpOwotCQkgICAgICBjb250aW51ZTsKLQkJICB9Ci0jaWZuZGVmIE5P TEFTVEZJTEUKLQkJICBjYXNlIFZUOgotCQkgICAgaWYgKGxhc3RmaWxlKSB7Ci0JCQlwcmludGYo IiVzICIsbGFzdGZpbGUpOwotI2lmZGVmIEdFTURPUwotCQkJZmZsdXNoKHN0ZG91dCk7Ci0jZW5k aWYgLyogR0VNRE9TICovCi0JCQlpbndvcmQgPSBjbWZsZ3MgPSAwOwotCQkJYWRkYnVmKGxhc3Rm aWxlKTsJLyogU3VwcGx5IGRlZmF1bHQuICovCi0JCQlpZiAoc2V0YXRtKGxhc3RmaWxlLDApIDwg MCkgewotCQkJICAgIHByaW50ZigiTGFzdCBuYW1lIHRvbyBsb25nXG4iKTsKLQkJCSAgICBpZiAo bnApIGZyZWUobnApOwotCQkJICAgIHJldHVybigtOSk7Ci0JCQl9Ci0JCSAgICB9IGVsc2UgewkJ LyogTm8gZGVmYXVsdCAqLwotCQkJYmxlZXAoQlBfV0FSTik7Ci0JCSAgICB9Ci0JCSAgICByZXR1 cm4oMCk7Ci0jZW5kaWYJLyogTk9MQVNURklMRSAqLwotCQl9Ci0KLSNpZmRlZiBDS19SRUNBTEwK LQkJaWYgKG9uX3JlY2FsbCAmJgkvKiBSZWFkaW5nIGNvbW1hbmRzIGZyb20ga2V5Ym9hcmQ/ICov Ci0JCSAgICAoY21fcmVjYWxsID4gMCkgJiYJLyogU2F2aW5nIGNvbW1hbmRzPyAqLwotCQkgICAg KGMgPT0gQ19VUCB8fCBjID09IENfVVAyKSkgeyAvKiBHbyB1cCBvbmUgKi8KLQkJICAgIGlmIChs YXN0X3JlY2FsbCA9PSAyICYmIGN1cnJlbnQgPiAwKQotCQkgICAgICBjdXJyZW50LS07Ci0JCSAg ICBpZiAoY3VycmVudCA8IDApIHsJLyogTm93aGVyZSB0byBnbywgKi8KLQkJCWJsZWVwKEJQX1dB Uk4pOwotCQkJY29udGludWU7Ci0JCSAgICB9Ci0JCSAgICBpZiAocmVjYWxsW2N1cnJlbnRdKSB7 IC8qIFdlIGhhdmUgYSBwcmV2aW91cyBjb21tYW5kICovCi0JCQl3aGlsZSAoKGJwLS0pID4gY21k YnVmKSB7IC8qIEVyYXNlIGN1cnJlbnQgbGluZSAqLwotCQkJICAgIGNtZGNoYXJkZWwoKTsKLQkJ CSAgICAqYnAgPSBOVUw7Ci0JCQl9Ci0JCQlja3N0cm5jcHkoY21kYnVmLHJlY2FsbFtjdXJyZW50 XSxDTURCTCk7Ci0jaWZkZWYgT1NLCi0JCQlmZmx1c2goc3Rkb3V0KTsKLQkJCXdyaXRlKGZpbGVu byhzdGRvdXQpLCAiXHIiLCAxKTsKLQkJCXByaW50ZigiJXMlcyIsY21wcm9tLGNtZGJ1Zik7Ci0j ZWxzZQotCQkJcHJpbnRmKCJcciVzJXMiLGNtcHJvbSxjbWRidWYpOwotI2VuZGlmIC8qIE9TSyAq LwotCQkJY3VycmVudC0tOwotCQkgICAgfQotCQkgICAgbGFzdF9yZWNhbGwgPSAxOwotCQkgICAg cmV0dXJuKGNtZmxncyA9IC0xKTsgLyogRm9yY2UgYSByZXBhcnNlICovCi0JCX0KLQkJaWYgKG9u X3JlY2FsbCAmJgkvKiBSZWFkaW5nIGNvbW1hbmRzIGZyb20ga2V5Ym9hcmQ/ICovCi0JCSAgICAo Y21fcmVjYWxsID4gMCkgJiYJLyogU2F2aW5nIGNvbW1hbmRzPyAqLwotCQkgICAgKGMgPT0gQ19E TikpIHsJLyogRG93biBvbmUgKi8KLQkJICAgIGludCB4ID0gMTsKLQkJICAgIGlmIChsYXN0X3Jl Y2FsbCA9PSAxKQotCQkgICAgICB4Kys7Ci0JCSAgICBpZiAoY3VycmVudCArIHggPiBybGFzdCkg eyAvKiBBbHJlYWR5IGF0IGJvdHRvbSwgYmVlcCAqLwotCQkJYmxlZXAoQlBfV0FSTik7Ci0JCQlj b250aW51ZTsKLQkJICAgIH0KLQkJICAgIGN1cnJlbnQgKz0geDsJLyogT0sgdG8gZ28gZG93biAq LwotCQkgICAgaWYgKHJlY2FsbFtjdXJyZW50XSkgewotCQkJd2hpbGUgKChicC0tKSA+IGNtZGJ1 ZikgeyAvKiBFcmFzZSBjdXJyZW50IGxpbmUgKi8KLQkJCSAgICBjbWRjaGFyZGVsKCk7Ci0JCQkg ICAgKmJwID0gTlVMOwotCQkJfQotCQkJY2tzdHJuY3B5KGNtZGJ1ZixyZWNhbGxbY3VycmVudF0s Q01EQkwpOwotI2lmZGVmIE9TSwotCQkJZmZsdXNoKHN0ZG91dCk7Ci0JCQl3cml0ZShmaWxlbm8o c3Rkb3V0KSwgIlxyIiwgMSk7Ci0JCQlwcmludGYoIiVzJXMiLGNtcHJvbSxjbWRidWYpOwotI2Vs c2UKLQkJCXByaW50ZigiXHIlcyVzIixjbXByb20sY21kYnVmKTsKLSNlbmRpZiAvKiBPU0sgKi8K LQkJCWxhc3RfcmVjYWxsID0gMjsKLQkJCXJldHVybihjbWZsZ3MgPSAtMSk7IC8qIEZvcmNlIHJl cGFyc2UgKi8KLQkJICAgIH0KLQkJfQotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotCSAgICB9Ci0K LQkgICAgaWYgKGMgPCBTUCAmJiBxdW90ZSA9PSAwKSB7IC8qIEFueSBvdGhlciB1bnF1b3RlZCBj b250cm9sIGNoYXIgKi8KLQkJaWYgKCFjaHNyYykgewkJLyogSWYgY21kIGZpbGUsIHBvaW50IHBh c3QgaXQgKi8KLQkJICAgIGJwKys7Ci0JCX0gZWxzZSB7Ci0JCSAgICBibGVlcChCUF9XQVJOKTsK LQkJfQotCQljb250aW51ZTsJCS8qIGNvbnRpbnVlLCBkb24ndCBwdXQgaW4gYnVmZmVyICovCi0J ICAgIH0KLQkgICAgbGluZWJlZ2luID0gMDsJCS8qIE5vdCBhdCBiZWdpbm5pbmcgb2YgbGluZSAq LwotI2lmZGVmIEJFQk9YCi0JICAgIGlmIChlY2hvZikgewotICAgICAgICAgICAgICAgIGNtZGVj aG8oKGNoYXIpIGMsIDApOwkvKiBFY2hvIHdoYXQgd2FzIHR5cGVkLiAqLwotICAgICAgICAgICAg ICAgIGZmbHVzaCAoc3Rkb3V0KTsKLSAgICAgICAgICAgICAgICBmZmx1c2goc3RkZXJyKTsKLSAg ICAgICAgICAgIH0KLSNlbHNlCi0jaWZkZWYgTk9TUEwKLSAgICAgICAgICAgIGlmIChlY2hvZiB8 fCBjaHNyYykKLSNlbHNlCi0gICAgICAgICAgICBpZiAoZWNob2YgfHwgKGVjaG9zdGFycyAmJiBj aHNyYykpCi0jZW5kaWYJLyogTk9TUEwgKi8KLQkgICAgICBjbWRlY2hvKChjaGFyKSBjLCAwKTsJ LyogRWNobyB3aGF0IHdhcyB0eXBlZC4gKi8KLSNlbmRpZiAvKiBCRUJPWCAqLwotICAgICAgICB9 IGVsc2UgewkJCS8qIFRoaXMgY2hhcmFjdGVyIHdhcyBxdW90ZWQuICovCi0JICAgIGludCBxZiA9 IDE7Ci0JICAgIHF1b3RlID0gMDsJCQkvKiBVbnNldCB0aGUgcXVvdGUgZmxhZy4gKi8KLQkgICAg LyogZGVidWcoRjAwMCwiZ3R3b3JkIHF1b3RlIDAiLCIiLGMpOyAqLwotCSAgICAvKiBRdW90ZSBj aGFyYWN0ZXIgYXQgdGhpcyBsZXZlbCBpcyBvbmx5IGZvciBTUCwgPywgYW5kIGNvbnRyb2xzICov Ci0gICAgICAgICAgICAvKiBJZiBhbnl0aGluZyBlbHNlIHdhcyBxdW90ZWQsIGxlYXZlIHF1b3Rl IGluLCBhbmQgbGV0ICovCi0JICAgIC8qIHRoZSBjb21tYW5kLXNwZWNpZmljIHBhcnNpbmcgcm91 dGluZXMgaGFuZGxlIGl0LCBlLmcuIFwwMDcgKi8KLQkgICAgaWYgKGMgPiAzMiAmJiBjICE9ICc/ JyAmJiBjICE9IFJVQiAmJiBjaHNyYyAhPSAwKSB7Ci0JCS8qIGRlYnVnKEYwMDAsImd0d29yZCBx dW90ZSAxIiwiIixjKTsgKi8KLQkJKmJwKysgPSBDTURROwkJLyogRGVwb3NpdCBcIGlmIGl0IGNh bWUgZnJvbSB0dHkgKi8KLQkJcWYgPSAwOwkJCS8qIGFuZCBkb24ndCBlcmFzZSBpdCBmcm9tIHNj cmVlbiAqLwotCQlsaW5lYmVnaW4gPSAwOwkJLyogTm90IGF0IGJlZ2lubmluZyBvZiBsaW5lICov Ci0jaWZkZWYgQlNfRElSU0VQCi0vKgotICBUaGlzIGlzIGEgaGFjayB0byBoYW5kbGUgImNkIFwi IG9yICJjZCBmb29cIiBvbiBPUy8yIGFuZCBzaW1pbGFyIHN5c3RlbXMuCi0gIElmIHdlIHdlcmUg Y2FsbGVkIGZyb20gY21kaXIoKSBhbmQgdGhlIHByZXZpb3VzIGNoYXJhY3RlciB3YXMgdGhlIHF1 b3RlCi0gIGNoYXJhY3RlciwgaS5lLiBiYWNrc2xhc2gsIGFuZCB0aGlzIGNoYXJhY3RlciBpcyB0 aGUgY29tbWFuZCB0ZXJtaW5hdG9yLAotICB0aGVuIHdlIHN0dWZmIGFuIGV4dHJhIGJhY2tzbGFz aCBpbnRvIHRoZSBidWZmZXIgd2l0aG91dCBlY2hvaW5nLCB0aGVuCi0gIHdlIHN0dWZmIHRoZSBj YXJyaWFnZSByZXR1cm4gYmFjayBpbiBhZ2FpbiwgYW5kIGdvIGJhY2sgYW5kIHByb2Nlc3MgaXQs Ci0gIHRoaXMgdGltZSB3aXRoIHRoZSBxdW90ZSBmbGFnIG9mZi4KLSovCi0JICAgIH0gZWxzZSBp ZiAoZGlybmFtZmxnICYmIChjID09IENSIHx8IGMgPT0gTEYgfHwgYyA9PSBTUCkpIHsKLQkJLyog ZGVidWcoRjAwMCwiZ3R3b3JkIHF1b3RlIDIiLCIiLGMpOyAqLwotCQkqYnArKyA9IENNRFE7Ci0J CWxpbmViZWdpbiA9IDA7CQkvKiBOb3QgYXQgYmVnaW5uaW5nIG9mIGxpbmUgKi8KLQkJKmJwID0g KGMgPT0gU1AgPyBTUCA6IENSKTsKLQkJZ290byBDTURJUlBBUlNFOwotI2VuZGlmIC8qIEJTX0RJ UlNFUCAqLwotCSAgICB9Ci0jaWZkZWYgQkVCT1gKLQkgICAgaWYgKGVjaG9mKSB7Ci0gICAgICAg ICAgICAgICAgY21kZWNobygoY2hhcikgYywgcWYpOwkvKiBFY2hvIHdoYXQgd2FzIHR5cGVkLiAq LwotICAgICAgICAgICAgICAgIGZmbHVzaCAoc3Rkb3V0KTsKLSAgICAgICAgICAgICAgICBmZmx1 c2goc3RkZXJyKTsKLSAgICAgICAgICAgIH0KLSNlbHNlCi0JICAgIGlmIChlY2hvZikgY21kZWNo bygoY2hhcikgYywgcWYpOyAvKiBOb3cgZWNobyBxdW90ZWQgY2hhcmFjdGVyICovCi0jZW5kaWYg LyogQkVCT1ggKi8KLQkgICAgLyogZGVidWcoRjExMSwiZ3R3b3JkIHF1b3RlIixjbWRidWYsYyk7 ICovCi0JfQotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgaWYgKGVjaG9mKSBjbWRlY2hvKChjaGFy KSBjLHF1b3RlKTsgLyogRWNobyB3aGF0IHdhcyB0eXBlZC4gKi8KLSNlbmRpZiAvKiBDT01NRU5U ICovCi0gICAgICAgIGlmICghY29tbWVudCkgaW53b3JkID0gMTsJLyogRmxhZyB3ZSdyZSBpbiBh IHdvcmQuICovCi0JaWYgKHF1b3RlKSBjb250aW51ZTsJCS8qIERvbid0IGRlcG9zaXQgcXVvdGUg Y2hhcmFjdGVyLiAqLwotICAgICAgICBpZiAoYyAhPSBOTCkgewkJCS8qIERlcG9zaXQgY29tbWFu ZCBjaGFyYWN0ZXIuICovCi0JICAgICpicCsrID0gKGNoYXIpIGM7CQkvKiBhbmQgbWFrZSBzdXJl IHRoZXJlIGlzIGEgTlVMICovCi0jaWZkZWYgQ09NTUVOVAotCSAgICAqYnAgPSBOVUw7CQkJLyog YWZ0ZXIgaXQgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0JfQotICAgIH0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBiaWcgd2hpbGUgKi8KLSAgICBibGVlcChC UF9XQVJOKTsKLSAgICBwcmludGYoIj9Db21tYW5kIHRvbyBsb25nLCBtYXhpbXVtIGxlbmd0aDog JWQuXG4iLENNREJMKTsKLSAgICBjbWZsZ3MgPSAtMjsKLSAgICByZXR1cm4oLTkpOwotfQotCi0v KiBVdGlsaXR5IGZ1bmN0aW9ucyAqLwotCi0vKiBBIEQgRCBCIFUgRiAgLS0gQWRkIHRoZSBzdHJp bmcgcG9pbnRlZCB0byBieSBjcCB0byB0aGUgY29tbWFuZCBidWZmZXIgICovCi0KLXN0YXRpYyBp bnQKLWFkZGJ1ZihjcCkgY2hhciAqY3A7IHsKLSAgICBpbnQgbGVuID0gMDsKLSAgICB3aGlsZSAo KCpjcCAhPSBOVUwpICYmIChicCA8IGNtZGJ1ZitDTURCTCkpIHsKLSAgICAgICAgKmJwKysgPSAq Y3ArKzsgICAgICAgICAgICAgICAgICAvKiBDb3B5IGFuZCAqLwotICAgICAgICBsZW4rKzsgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIGNvdW50IHRoZSBjaGFyYWN0ZXJzLiAqLwotICAgIH0K LSAgICAqYnArKyA9IFNQOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQdXQgYSBzcGFjZSBh dCB0aGUgZW5kICovCi0gICAgKmJwID0gTlVMOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyog VGVybWluYXRlIHdpdGggYSBudWxsICovCi0gICAgbnAgPSBicDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogVXBkYXRlIHRoZSBuZXh0LWZpZWxkIHBvaW50ZXIgKi8KLSAgICBjbWJwdHIg PSBucDsKLSAgICByZXR1cm4obGVuKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4g dGhlIGxlbmd0aCAqLwotfQotCi0vKiAgUyBFIFQgQSBUIE0gIC0tICBEZXBvc2l0IGEgdG9rZW4g aW4gdGhlIGF0b20gYnVmZmVyLiAgKi8KLS8qCi0gIEJyZWFrIG9uIHNwYWNlLCBuZXdsaW5lLCBj YXJyaWFnZSByZXR1cm4sIG9yIE5VTC4KLSAgQ2FsbCB3aXRoOgotICAgIGNwID0gUG9pbnRlciB0 byBzdHJpbmcgdG8gY29weSB0byBhdG9tIGJ1ZmZlci4KLSAgICBmY29kZSA9IDAgbWVhbnMgYnJl YWsgb24gd2hpdGVzcGFjZSBvciBFT0wuCi0gICAgZmNvZGUgPSAxIG1lYW5zIGRvbid0IGJyZWFr IG9uIHNwYWNlLgotICAgIGZjb2RlID0gMiBtZWFucyBicmVhayBvbiBzcGFjZSwgJzonLCBvciAn PScuCi0gICAgZmNvZGUgPSAzIG1lYW5zIGNvcHkgdGhlIHdob2xlIHN0cmluZy4KLSAgTnVsbC10 ZXJtaW5hdGUgdGhlIHJlc3VsdC4KLSAgUmV0dXJuIGxlbmd0aCBvZiB0b2tlbiwgYW5kIGFsc28g c2V0IGdsb2JhbCAiY2MiIHRvIHRoaXMgbGVuZ3RoLgotICBSZXR1cm4gLTEgaWYgdG9rZW4gd2Fz IHRvbyBsb25nLgotKi8KLXN0YXRpYyBpbnQKLXNldGF0bShjcCxmY29kZSkgY2hhciAqY3A7IGlu dCBmY29kZTsgewotICAgIGNoYXIgKmFwLCAqeHAsICpkcXAgPSBOVUxMLCBsYnJhY2UsIHJicmFj ZTsKLSAgICBpbnQgYnJhY2VsdmwgPSAwLCBkcSA9IDA7Ci0KLSAgICByZWdpc3RlciBjaGFyICog czsKLSAgICByZWdpc3RlciBpbnQgbiA9IDA7Ci0KLSAgICBpZiAoY21mbGRmbGdzICYgMSkgewkJ LyogSGFuZGxlIGdyb3VwaW5nICovCi0JbGJyYWNlID0gJygnOwotCXJicmFjZSA9ICcpJzsKLSAg ICB9IGVsc2UgewotCWxicmFjZSA9ICd7JzsKLQlyYnJhY2UgPSAnfSc7Ci0gICAgfQotICAgIGNj ID0gMDsJCQkJLyogQ2hhcmFjdGVyIGNvdW50ZXIgKi8KLSAgICBhcCA9IGF0bWJ1ZjsJCQkvKiBB ZGRyZXNzIG9mIGF0b20gYnVmZmVyICovCi0KLSAgICBzID0gY3A7Ci0KLSAgICB3aGlsZSAoKnMr KykgbisrOwkJCS8qIFNhdmUgYSBjYWxsIHRvIHN0cmxlbiAqLwotCi0gICAgaWYgKG4gPiBBVE1C TCkgewotCXByaW50ZigiP0NvbW1hbmQgYnVmZmVyIG92ZXJmbG93XG4iKTsKLQlyZXR1cm4oLTEp OwotICAgIH0KLSAgICAvKiBkZWJ1ZyhGMTExLCJzZXRhdG0iLGNwLG4pOyAqLwotICAgIGlmIChj cCA9PSBhcCkgewkJCS8qIEluIGNhc2Ugc291cmNlIGlzIGF0b20gYnVmZmVyICovCi0JeHAgPSBh dHlidWY7CQkJLyogbWFrZSBhIGNvcHkgKi8KLSNpZmRlZiBDT01NRU5UCi0Jc3RybmNweSh4cCxh cCxBVE1CTCk7CQkvKiBzbyB3ZSBjYW4gY29weSBpdCBiYWNrLCBlZGl0ZWQuICovCi0JY3AgPSB4 cDsKLSNlbHNlCi0JcyA9IGFwOwotCXdoaWxlICgoKnhwKysgPSAqcysrKSkgOwkvKiBXZSBhbHJl YWR5IGtub3cgaXQncyBiaWcgZW5vdWdoICovCi0JY3AgPSB4cCA9IGF0eWJ1ZjsKLSNlbmRpZiAv KiBDT01NRU5UICovCi0gICAgfQotICAgICphcCA9IE5VTDsJCQkJLyogWmVybyB0aGUgYXRvbSBi dWZmZXIgKi8KLSAgICBpZiAoZmNvZGUgPT0gMSkgewkJCS8qIFRyaW0gdHJhaWxpbmcgYmxhbmtz ICovCi0Jd2hpbGUgKC0tbiA+PSAwICYmIGNwW25dID09IFNQKQotCSAgOwotCWNwW24rMV0gPSBO VUw7Ci0gICAgfQotICAgIHdoaWxlICgqY3AgPT0gU1ApIHsJCQkvKiBUcmltIGxlYWRpbmcgc3Bh Y2VzICovCi0JY3ArKzsKLQluLS07Ci0gICAgfQotICAgIGlmICgqY3AgPT0gJyInKSB7CQkJLyog U3RhcnRzIHdpdGggZG91YmxlcXVvdGU/ICovCi0JZHEgPSAxOwotCWRxcCA9IGNwOwotICAgIH0K LSAgICB3aGlsZSAoKmNwKSB7Ci0gICAgICAgIGlmICgqY3AgPT0gbGJyYWNlKQotCSAgYnJhY2Vs dmwrKzsKLSAgICAgICAgZWxzZSBpZiAoKmNwID09IHJicmFjZSkKLQkgIGJyYWNlbHZsLS07Ci0J aWYgKGJyYWNlbHZsIDwgMCkKLQkgIGJyYWNlbHZsID0gMDsKLQlpZiAoYnJhY2VsdmwgPT0gMCkg ewotCSAgICBpZiAoZHEpIHsKLQkJaWYgKCpjcCA9PSBTUCB8fCAqY3AgPT0gSFQpIHsKLQkJICAg IGlmIChjcCA+IGRxcCsxKSB7Ci0JCQlpZiAoKihjcC0xKSA9PSAnIicgJiYgKihjcC0yKSAhPSBD TURRKSB7Ci0JCQkgICAgYnJlYWs7Ci0JCQl9Ci0JCSAgICB9Ci0JCX0KLQkgICAgfSBlbHNlIGlm ICgoKmNwID09IFNQIHx8ICpjcCA9PSBIVCkgJiYgZmNvZGUgIT0gMSAmJiBmY29kZSAhPSAzKQot CSAgICAgIGJyZWFrOwotCSAgICBpZiAoKGZjb2RlID09IDIpICYmICgqY3AgPT0gJz0nIHx8ICpj cCA9PSAnOicpKSBicmVhazsKLQkgICAgaWYgKChmY29kZSAhPSAzKSAmJiAoKmNwID09IExGIHx8 ICpjcCA9PSBDUikpIGJyZWFrOwotCX0KLSAgICAgICAgKmFwKysgPSAqY3ArKzsKLSAgICAgICAg Y2MrKzsKLSAgICB9Ci0gICAgKmFwID0gTlVMOwkJCQkvKiBUZXJtaW5hdGUgdGhlIHN0cmluZy4g Ki8KLSAgICAvKiBkZWJ1ZyhGMTExLCJzZXRhdG0gcmVzdWx0IixhdG1idWYsY2MpOyAqLwotICAg IHJldHVybihjYyk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBsZW5ndGguICov Ci19Ci0KLS8qCi0gIFRoZXNlIGZ1bmN0aW9ucyBhdHRlbXB0IHRvIGhpZGUgc3lzdGVtIGRlcGVu ZGVuY2llcyBmcm9tIHRoZSBtYWlubGluZQotICBjb2RlIGluIGd0d29yZCgpLiAgRHVtbXkgYXJn IGZvciBjbWRnZXRjKCkgbmVlZGVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGgKLSAgY29uaW5jKCks IHR0aW5jKCksIGV0Yywgc2luY2UgYSBwb2ludGVyIHRvIHRoaXMgcm91dGluZSBjYW4gYmUgcGFz c2VkIGluCi0gIHBsYWNlIG9mIHRob3NlIHRvIHRuX2Rvb3AoKS4KLQotICBObyBsb25nZXIgc3Rh dGljLiAgVXNlZCBieSBhc2ttb3JlKCkuICBGcmkgQXVnIDIwIDE1OjAzOjM0IDE5OTkuCi0qLwot I2RlZmluZSBDTURfQ09OSU5DCQkJLyogSG93IHdlIGdldCBrZXlib2FyZCBjaGFycyAqLwotCi1p bnQKLWNtZGdldGModGltZWxpbWl0KSBpbnQgdGltZWxpbWl0OyB7CS8qIEdldCBhIGNoYXJhY3Rl ciBmcm9tIHRoZSB0dHkuICovCi0gICAgaW50IGM7Ci0jaWZkZWYgSUtTRAotICAgIGV4dGVybiBp bnQgaW5zZXJ2ZXI7Ci0jZW5kaWYgLyogSUtTRCAqLwotI2lmZGVmIENLX0xPR0lOCi0gICAgZXh0 ZXJuIGludCB4X2xvZ2dlZDsKLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotI2lmZGVmIFROQ09ERQot ICAgIHN0YXRpYyBpbnQgZ290X2NyID0gMDsKLSAgICBleHRlcm4gaW50IGNreGVjaDsKLSAgICBp bnQgdHggPSAwLCBpc190biA9IDA7Ci0jZW5kaWYgLyogVE5DT0RFICovCi0KLSAgICBpZiAocHVz aGMKLSNpZm5kZWYgTk9TUEwKLQkmJiAhYXNrZmxhZwotI2VuZGlmIC8qIE5PU1BMICovCi0JKSB7 Ci0gICAgICAgIGRlYnVnKEYxMTEsImNtZGdldGMoKSIsInB1c2hjIixwdXNoYyk7Ci0JYyA9IHB1 c2hjOwotCXB1c2hjID0gTlVMOwotCWlmICh4Y21mZGIgJiYgYyA9PSAnPycpCQkvKiBEb24ndCBl Y2hvID8gdHdpY2UgaWYgY2hhaW5pbmcuICovCi0JICBjbWRjaGFyZGVsKCk7Ci0JcmV0dXJuKGMp OwotICAgIH0KLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgIHsKLQljaGFyIGNoOwotCWMgPSBkZ25j aW5iKDAsJmNoLDEpOwkJLyogLTEgaXMgRU9GLCAtMiBUTywKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKiAtYyBpcyBBT1MvVlMgZXJyb3IgKi8KLQlpZiAoYyA9PSAt MikgewkJCS8qIHRpbWVvdXQgd2FzIGVuYWJsZWQ/ICovCi0JICAgIHJlc3RvKGNoYW5uZWwoMCkp OwkJLyogcmVzZXQgdGltZW91dHMgKi8KLQkgICAgYyA9IGRnbmNpbmIoMCwmY2gsMSk7CS8qIHJl dHJ5IHRoaXMgbm93ISAqLwotCX0KLQlpZiAoYyA8IDApIHJldHVybigtNCk7CQkvKiBFT0Ygb3Ig c29tZSBlcnJvciAqLwotCWVsc2UgYyA9IChpbnQpIGNoICYgMDE3NzsJLyogR2V0IGNoYXIgd2l0 aG91dCBwYXJpdHkgKi8KLS8qCWVjaG9mID0gMTsgKi8KLSAgICB9Ci0jZWxzZSAvKiBOb3QgZGF0 YWdlbmVyYWwgKi8KLSNpZm5kZWYgTUlOSVgyCi0gICAgaWYgKAotI2lmZGVmIElLU0QKLQkoIWxv Y2FsICYmIGluc2VydmVyKSB8fAotI2VuZGlmIC8qIElLU0QgKi8KLQl0aW1lbGltaXQgPiAwKSB7 Ci0jaWZkZWYgVE5DT0RFCi0gICAgICAgICAgR0VUTkVYVENIOgotICAgICAgICAgICAgaXNfdG4g PSAhcHVzaGMgJiYgIWxvY2FsICYmIHNzdGVsbmV0OwotI2VuZGlmIC8qIFROQ09ERSAqLwotI2lm ZGVmIENPTU1FTlQKLQkgICAgYyA9IGNvbmluYyh0aW1lbGltaXQgPiAwID8gMSA6IDApOwotI2Vs c2UgLyogQ09NTUVOVCAqLwotCSAgICAvKiBUaGlzIGlzIGxpa2VseSB0byBicmVhayB0aGUgYXNr dGltZW91dC4uLiAqLwotCSAgICBjID0gY29uaW5jKHRpbWVsaW1pdCk7Ci0jZW5kaWYgLyogQ09N TUVOVCAqLwotCSAgICAvKiBkZWJ1ZyhGMTAxLCJjbWRnZXRjIGNvbmluYyIsIiIsYyk7ICovCi0j aWZkZWYgVE5DT0RFCi0gICAgICAgICAgICBpZiAoYyA+PSAwICYmIGlzX3RuKSB7CS8qIFNlcnZl ci1zaWRlIFRlbG5ldCAqLwotICAgICAgICAgICAgICAgIHN3aXRjaCAoYykgewotCQkgIGNhc2Ug SUFDOgotICAgICAgICAgICAgICAgICAgICAvKiBkZWJ1ZyhGMTExLCJndHdvcmQgSUFDIiwiYyIs Yyk7ICovCi0gICAgICAgICAgICAgICAgICAgIGdvdF9jciA9IDA7Ci0gICAgICAgICAgICAgICAg ICAgIGlmICgodHggPSB0bl9kb29wKChDSEFSKShjICYgMHhmZiksY2t4ZWNoLGNvbmluYykpID09 IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gR0VUTkVYVENIOwotICAgICAgICAg ICAgICAgICAgICB9IGVsc2UgaWYgKHR4IDw9IC0xKSB7IC8qIEkvTyBlcnJvciAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgLyogSWYgdGhlcmUgd2FzIGEgZmF0YWwgSS9PIGVycm9yIHRoZW4g dHRjbG9zKCkgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhhcyBiZWVuIGNhbGxl ZCBhbmQgdGhlIG5leHQgR0VUTkVYVENIIGF0dGVtcHQgICovCi0gICAgICAgICAgICAgICAgICAg ICAgICAvKiB3aWxsIGJlICFpc190biBzaW5jZSB0dGNsb3MoKSBzZXRzIHNzdGVsbmV0ID0gMCAq LwotICAgICAgICAgICAgICAgICAgICAgICAgZG9leGl0KEJBRF9FWElULC0xKTsgLyogKG9yIHJl dHVybigtNCk/ICovCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHggPT0gMSkgeyAv KiBFQ0hPIGNoYW5nZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgY2t4ZWNoID0gZHB4ID0g MTsgLyogR2V0IG5leHQgY2hhciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBHRVRO RVhUQ0g7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHggPT0gMikgeyAvKiBFQ0hP IGNoYW5nZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgY2t4ZWNoID0gZHB4ID0gMDsgLyog R2V0IG5leHQgY2hhciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBHRVRORVhUQ0g7 Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHggPT0gMykgeyAvKiBRdW90ZWQgSUFD ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBjID0gMjU1OwkvKiBwcm9jZWVlZCB3aXRoIGl0 LiAqLwotICAgICAgICAgICAgICAgICAgICB9Ci0jaWZkZWYgSUtTX09QVElPTgotICAgICAgICAg ICAgICAgICAgICBlbHNlIGlmICh0eCA9PSA0KSB7CS8qIElLUyBTdGF0ZSBDaGFuZ2UgKi8KLSAg ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gR0VUTkVYVENIOwotICAgICAgICAgICAgICAgICAg ICB9Ci0jZW5kaWYgLyogSUtTX09QVElPTiAqLwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlm ICh0eCA9PSA2KSB7CS8qIFJlbW90ZSBMb2dvdXQgKi8KLQkJCWRvZXhpdChHT09EX0VYSVQsMCk7 Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0JCQlnb3RvIEdFVE5FWFRDSDsJLyogVW5r bm93biwgZ2V0IG5leHQgY2hhciAqLwotCQkgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVh azsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICAgICAgICBjYXNlIENSOgotICAgICAgICAg ICAgICAgICAgICBpZiAoIVRFTE9QVF9VKFRFTE9QVF9CSU5BUlkpKSB7Ci0JCQlpZiAoZ290X2Ny KSB7Ci0JCQkgICAgLyogVGhpcyBtZWFucyB0aGUgc2VuZGVyIGlzIHZpb2xhdGluZyBUZWxuZXQg ICAqLwotCQkJICAgIC8qIHByb3RvY29sIGJlY2F1c2Ugd2UgcmVjZWl2ZWQgdHdvIENScyBpbiBh ICAgKi8KLQkJCSAgICAvKiByb3cgd2l0aG91dCBnZXR0aW5nIGVpdGhlciBMRiBvciBOVUwuICAg ICAgICovCi0JCQkgICAgLyogVGhpcyB3aWxsIG5vdCBzb2x2ZSB0aGUgcHJvYmxlbSBidXQgaXQg ICAgICAqLwotCQkJICAgIC8qIHdpbGwgYXQgbGVhc3QgYWxsb3cgdHdvIENScyB0byBkbyBzb21l dGhpbmcgKi8KLQkJCSAgICAvKiB3aGVyZWFzIGJlZm9yZSB0aGUgdXNlciB3b3VsZCBoYXZlIHRv IGd1ZXNzICovCi0JCQkgICAgLyogdG8gc2VuZCBMRiBvciBOVUwgYWZ0ZXIgdGhlIENSLiAgICAg ICAgICAgICAqLwotCQkJICAgIGRlYnVnKEYxMDAsImd0d29yZCBDUiB0ZWxuZXQgZXJyb3IiLCIi LDApOwotCQkJICAgIGMgPSBMRjsKLQkJCX0gZWxzZSB7Ci0JCQkgICAgZGVidWcoRjEwMCwiZ3R3 b3JkIHNraXBwaW5nIENSIiwiIiwwKTsKLQkJCSAgICBnb3RfY3IgPSAxOwkvKiBSZW1lbWJlciBh IENSIHdhcyByZWNlaXZlZCAqLwotCQkJICAgIGdvdG8gR0VUTkVYVENIOwotCQkJfQotICAgICAg ICAgICAgICAgICAgICB9IGVsc2UgewotCQkJZGVidWcoRjEwMCwiZ3R3b3JkIENSIHRvIExGIiwi IiwwKTsKLQkJCWMgPSBMRjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgTEY6Ci0gICAgICAgICAgICAgICAg ICAgIGlmICghVEVMT1BUX1UoVEVMT1BUX0JJTkFSWSkpIHsKLQkJCWdvdF9jciA9IDA7Ci0JCQlk ZWJ1ZyhGMTAwLCJndHdvcmQgTEYiLCIiLDApOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug ewotCQkJaWYgKGdvdF9jcikgewotCQkJICAgIGdvdF9jciA9IDA7Ci0JCQkgICAgZGVidWcoRjEw MCwiZ3R3b3JkIHNraXBwaW5nIExGIiwiIiwwKTsKLQkJCSAgICBnb3RvIEdFVE5FWFRDSDsKLQkJ CX0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgICAgICAgIGNhc2UgTlVMOgotICAgICAgICAgICAgICAgICAgICBpZiAoIVRFTE9Q VF9VKFRFTE9QVF9CSU5BUlkpICYmIGdvdF9jcikgewotCQkJYyA9IExGOwotCQkJZGVidWcoRjEw MCwiZ3R3b3JkIE5VTCB0byBMRiIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7 Ci0JCQlkZWJ1ZyhGMTAwLCJndHdvcmQgTlVMIiwiIiwwKTsKLSAgICAgICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgICAgICBnb3RfY3IgPSAwOwotICAgICAgICAgICAgICAgICAgICBi cmVhazsKLSNlbHNlIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgICAgICAgIGNhc2UgQ1I6Ci0g ICAgICAgICAgICAgICAgICAgIGlmICggIVRFTE9QVF9VKFRFTE9QVF9CSU5BUlkpICYmIGdvdF9j ciApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgbWVhbnMgdGhlIHNlbmRlciBp cyB2aW9sYXRpbmcgVGVsbmV0ICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3Rv Y29sIGJlY2F1c2Ugd2UgcmVjZWl2ZWQgdHdvIENScyBpbiBhICAgKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgIC8qIHJvdyB3aXRob3V0IGdldHRpbmcgZWl0aGVyIExGIG9yIE5VTC4gICAgICAg Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgd2lsbCBub3Qgc29sdmUgdGhlIHBy b2JsZW0gYnV0IGl0ICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdpbGwgYXQg bGVhc3QgYWxsb3cgdHdvIENScyB0byBkbyBzb21ldGhpbmcgKi8KLSAgICAgICAgICAgICAgICAg ICAgICAgIC8qIHdoZXJlYXMgYmVmb3JlIHRoZSB1c2VyIHdvdWxkIGhhdmUgdG8gZ3Vlc3MgKi8K LSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRvIHNlbmQgTEYgb3IgTlVMIGFmdGVyIHRoZSBD Ui4gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsImd0 d29yZCBDUiB0ZWxuZXQgZXJyb3IiLCIiLDApOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgICAgICAgICAgICAgZ290X2NyID0gMTsJLyogUmVtZW1iZXIgYSBDUiB3 YXMgcmVjZWl2ZWQgKi8KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg ICAvKiBkZWJ1ZyhGMTAwLCJndHdvcmQgQ1IgdG8gTEYiLCIiLDApOyAqLwotICAgICAgICAgICAg ICAgICAgICBjID0gTEY7Ci0JCSAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgTEY6 Ci0gICAgICAgICAgICAgICAgICAgIGlmIChnb3RfY3IpIHsKLSAgICAgICAgICAgICAgICAgICAg ICAgIGdvdF9jciA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWJ1ZyhGMTAwLCJn dHdvcmQgc2tpcHBpbmcgTEYiLCIiLDApOyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgZ290 byBHRVRORVhUQ0g7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQkJICAgIGJyZWFrOwotICAgICAg ICAgICAgICAgICAgY2FzZSBOVUw6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChnb3RfY3IpIHsK LSAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9jciA9IDA7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAvKiBkZWJ1ZyhGMTAwLCJndHdvcmQgc2tpcHBpbmcgTlVMIiwiIiwwKTsgKi8KLSAgICAg ICAgICAgICAgICAgICAgICAgIGdvdG8gR0VUTkVYVENIOwotI2lmZGVmIENPTU1FTlQKLSAgICAg ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAw LCJndHdvcmQgTlVMIiwiIiwwKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ09NTUVOVCAq LwotI2lmZGVmIElLU0QKLQkJICBjYXNlIEVUWDoJCS8qIEN0cmwtQy4uLiAqLwotICAgICAgICAg ICAgICAgICAgY2FzZSBFT1Q6CQkvKiBFT1QgPSBFT0YgKi8KLSAgICAgICAgICAgICAgICAgICAg ICBpZiAoaW5zZXJ2ZXIKLSNpZmRlZiBDS19MT0dJTgotCQkJICAmJiAheF9sb2dnZWQKLSNlbmRp ZiAvKiBDS19MT0dJTiAqLwotCQkJICApCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy bigtNCk7Ci0JCSAgICBicmVhazsKLSNlbmRpZiAvKiBJS1NEICovCi0JCSAgZGVmYXVsdDoKLSAg ICAgICAgICAgICAgICAgICAgICBnb3RfY3IgPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIH0KLSNlbmRpZiAvKiBUTkNPREUgKi8KLSAgICB9IGVsc2UgewotI2lmZGVmIE9TMgot CWMgPSBjb25pbmMoMCk7Ci0jZWxzZSAvKiBPUzIgKi8KLSNpZmRlZiBDTURfQ09OSU5DCi0jdW5k ZWYgQ01EX0NPTklOQwotI2VuZGlmIC8qIENNRF9DT05JTkMgKi8KLQljID0gZ2V0Y2hhcigpOwot I2VuZGlmIC8qIE9TMiAqLwotICAgIH0KLSNlbHNlICAvKiBNSU5JWDIgKi8KLSN1bmRlZiBnZXRj Ci0jaWZkZWYgQ01EX0NPTklOQwotI3VuZGVmIENNRF9DT05JTkMKLSNlbmRpZiAvKiBDTURfQ09O SU5DICovCi0gICAgYyA9IGdldGMoc3RkaW4pOwotICAgIC8qIGRlYnVnKEYxMDEsImNtZGdldGMg Z2V0YyIsIiIsYyk7ICovCi0jZW5kaWYgLyogTUlOSVgyICovCi0jaWZkZWYgUlRVCi0gICAgaWYg KHJ0dV9idWcpIHsKLSNpZmRlZiBDTURfQ09OSU5DCi0jdW5kZWYgQ01EX0NPTklOQwotI2VuZGlm IC8qIENNRF9DT05JTkMgKi8KLQljID0gZ2V0Y2hhcigpOwkJCS8qIFJUVSBkb2Vzbid0IGRpc2Nh cmQgdGhlIF5aICovCi0JcnR1X2J1ZyA9IDA7Ci0gICAgfQotI2VuZGlmIC8qIFJUVSAqLwotI2Vu ZGlmIC8qIGRhdGFnZW5lcmFsICovCi0gICAgcmV0dXJuKGMpOwkJCQkvKiBSZXR1cm4gd2hhdCB3 ZSBnb3QgKi8KLX0KLQotLyogI2lmZGVmIFVTRV9BUlJPV0tFWVMgKi8KLQotLyogTWVjaGFuaXNt IHRvIHVzZSBmb3IgcGVla2luZyBpbnRvIHN0ZGluIGJ1ZmZlciAqLwotCi0jaWZuZGVmIFVTRV9G SUxFX0NOVAkJCS8qIHN0ZGluLT5fX2NudCAqLwotI2lmbmRlZiBVU0VfRklMRV9fQ05UCQkJLyog Tm90ZTogdHdvIHVuZGVyc2NvcmVzICovCi0jaWZkZWYgSFBVWAkJCQkvKiBIUFVYIDctMTEgKi8K LSNpZm5kZWYgSFBVWDUKLSNpZm5kZWYgSFBVWDYKLSNkZWZpbmUgVVNFX0ZJTEVfX0NOVAotI2Vu ZGlmIC8qIEhQVVg2ICovCi0jZW5kaWYgLyogSFBVWDUgKi8KLSNlbHNlCi0jaWZkZWYgQU5ZU0NP CQkJCS8qIFNDTyBVTklYLCBPU1I1LCBVbml4d2FyZSwgZXRjICovCi0jaWZuZGVmIE9MRF9VTklY V0FSRQkJCS8qIEJ1dCBub3QgVW5peHdhcmUgMS54IG9yIDIuMCAqLwotI2lmbmRlZiBVTklYV0FS RTIJCQkvKiBvciAyLjEuMCAqLwotI2RlZmluZSBVU0VfRklMRV9fQ05UCi0jZW5kaWYgLyogVU5J WFdBUkUyICovCi0jZW5kaWYgLyogT0xEX1VOSVhXQVJFICovCi0jZW5kaWYgLyogQU5ZU0NPICov Ci0jZW5kaWYgLyogSFBVWCAqLwotI2VuZGlmIC8qIFVTRV9GSUxFX19DTlQgKi8KLSNlbmRpZiAv KiBVU0VfRklMRV9DTlQgKi8KLQotI2lmbmRlZiBVU0VfRklMRV9SCQkJLyogc3RkaW4tPl9yICov Ci0jaWZuZGVmIFVTRV9GSUxFX0NOVAotI2lmbmRlZiBVU0VfRklMRV9fQ05UCi0jaWZkZWYgQlNE NDQJCQkJLyoge0ZyZWUsT3BlbixOZXR9QlNELCBCU0RJICovCi0jZGVmaW5lIFVTRV9GSUxFX1IK LSNlbmRpZiAvKiBCU0Q0NCAqLwotI2VuZGlmIC8qIFVTRV9GSUxFX19DTlQgKi8KLSNlbmRpZiAv KiBVU0VfRklMRV9DTlQgKi8KLSNlbmRpZiAvKiBVU0VfRklMRV9SICovCi0KLSNpZm5kZWYgVVNF X0ZJTEVfUgkJCS8qIHN0ZGluLT5fY250ICovCi0jaWZuZGVmIFVTRV9GSUxFX0NOVAotI2lmbmRl ZiBVU0VfRklMRV9fQ05UCi0jZGVmaW5lIFVTRV9GSUxFX0NOVAkJCS8qIEV2ZXJ5Ym9keSBlbHNl IChidXQgTGludXgpICovCi0jZW5kaWYgLyogVVNFX0ZJTEVfX0NOVCAqLwotI2VuZGlmIC8qIFVT RV9GSUxFX0NOVCAqLwotI2VuZGlmIC8qIFVTRV9GSUxFX1IgKi8KLQotCi0vKgotICBjIG0gZCBj IG8gbiBjIGggawotCi0gIEhvdyBtYW55IGNoYXJhY3RlcnMgYXJlIHdhaXRpbmcgdG8gYmUgcmVh ZCBhdCB0aGUgY29uc29sZT8gIE5vcm1hbGx5Ci0gIGNvbmNoaygpIHdvdWxkIHRlbGwgdXMsIGJ1 dCBpbiBVbml4IGFuZCBWTVMgY21kZ2V0YygpIHVzZXMgc3RkaW8gZ2V0Y2hhcigpLAotICB0aHVz IGJ5cGFzc2luZyBjb25pbmMoKS9jb25jaGsoKSwgc28gd2UgaGF2ZSB0byBwZWVrIGludG8gdGhl IHN0ZGluIGJ1ZmZlciwKLSAgd2hpY2ggaXMgdG90YWxseSBub25wb3J0YWJsZS4gIFdoaWNoIGlz IHdoeSB0aGlzIHJvdXRpbmUgaXMsIGF0IGxlYXN0IGZvcgotICBub3csIHVzZWQgb25seSBmb3Ig Y2hlY2tpbmcgZm9yIGFycm93LWtleSBzZXF1ZW5jZXMgZnJvbSB0aGUga2V5Ym9hcmQgYWZ0ZXIK LSAgYW4gRVNDIHdhcyByZWFkLiAgV291bGRuJ3QgaXQgYmUgbmljZSBpZiB0aGUgc3RkaW8gcGFj a2FnZSBoYWQgYSBmdW5jdGlvbgotICB0aGF0IHJldHVybmVkIHRoZSBudW1iZXIgb2YgYnl0ZXMg d2FpdGluZyB0byBiZSByZWFkIGZyb20gaXRzIGJ1ZmZlcj8KLSAgUmV0dXJucyAwIG9yIGdyZWF0 ZXIgYWx3YXlzLgotKi8KLWludAotY21kY29uY2hrKCkgewotICAgIGludCB4ID0gMCwgeTsKLSAg ICB5ID0gcHVzaGMgPyAxIDogMDsJCQkvKiBIYXZlIGNvbW1hbmQgY2hhcmFjdGVyIHB1c2hlZD8g Ki8KLSNpZmRlZiBPUzIKLSAgICB4ID0gY29uY2hrKCk7CQkJLyogQ2hlY2sgZGV2aWNlLWRyaXZl ciBidWZmZXIgKi8KLSAgICBpZiAoeCA8IDApIHggPSAwOwotI2Vsc2UgLyogT1MyICovCi0jaWZk ZWYgQ01EX0NPTklOQwkJCS8qIFNlZSBjbWRnZXRjKCkgKi8KLSAgICB4ID0gY29uY2hrKCk7CQkJ LyogQ2hlY2sgZGV2aWNlLWRyaXZlciBidWZmZXIgKi8KLSAgICBpZiAoeCA8IDApIHggPSAwOwot I2Vsc2UgIC8qIENNRF9DT05JTkMgKi8KLQotLyogSGVyZSB3ZSBtdXN0IGxvb2sgaW5zaWRlIHRo ZSBzdGRpbiBidWZmZXIgLSBoaWdobHkgcGxhdGZvcm0gZGVwZW5kZW50ICovCi0KLSNpZmRlZiBf SU9fRU9GX1NFRU4JCQkvKiBMaW51eCAqLwotICAgIHggPSAoaW50KSAoKHN0ZGluLT5fSU9fcmVh ZF9lbmQpIC0gKHN0ZGluLT5fSU9fcmVhZF9wdHIpKTsKLSAgICBkZWJ1ZyhGMTAxLCJjbWRjb25j aGsgX0lPX2ZpbGVfZmxhZ3MiLCIiLHgpOwotI2Vsc2UgIC8qIF9JT19maWxlX2ZsYWdzICovCi0j aWZkZWYgVVNFX0ZJTEVfQ05UCQkJLyogVHJhZGl0aW9uYWwgKi8KLSNpZmRlZiBWTVMKLSAgICBk ZWJ1ZyhGMTAxLCJjbWRjb25jaGsgKCpzdGRpbiktPl9jbnQiLCIiLCgqc3RkaW4pLT5fY250KTsK LSAgICB4ID0gKCpzdGRpbiktPl9jbnQ7Ci0jZWxzZQotI2lmZGVmIE5PQVJST1dLRVlTCi0gICAg ZGVidWcoRjEwMSwiY21kY29uY2hrIE5PQVJST1dLRVlTIHgiLCIiLDApOwotI2Vsc2UKLSAgICBk ZWJ1ZyhGMTAxLCJjbWRjb25jaGsgc3RkaW4tPl9jbnQiLCIiLHN0ZGluLT5fY250KTsKLSAgICB4 ID0gc3RkaW4tPl9jbnQ7Ci0jZW5kaWYgLyogTk9BUlJPV0tFWVMgKi8KLSNlbmRpZiAvKiBWTVMg Ki8KLSAgICBpZiAoeCA9PSAwKSB4ID0gY29uY2hrKCk7Ci0gICAgaWYgKHggPCAwKSB4ID0gMDsK LSNlbHNlICAvKiBVU0VfRklMRV9DTlQgKi8KLSNpZmRlZiBVU0VfRklMRV9fQ05UCQkJLyogSFAt VVggKi8KLSAgICBkZWJ1ZyhGMTAxLCJjbWRjb25jaGsgc3RkaW4tPl9fY250IiwiIixzdGRpbi0+ X19jbnQpOwotICAgIHggPSBzdGRpbi0+X19jbnQ7Ci0gICAgaWYgKHggPT0gMCkgeCA9IGNvbmNo aygpOwotICAgIGlmICh4IDwgMCkgeCA9IDA7Ci0jZWxzZSAgLyogVVNFX0ZJTEVfQ05UICovCi0j aWZkZWYgVVNFX0ZJTEVfUgkJCS8qIEZyZWVCU0QsIE9wZW5CU0QsIGV0YyAqLwotICAgIGRlYnVn KEYxMDEsImNtZGNvbmNoayBzdGRpbi0+X3IiLCIiLHN0ZGluLT5fcik7Ci0gICAgeCA9IHN0ZGlu LT5fcjsKLSAgICBpZiAoeCA9PSAwKSB4ID0gY29uY2hrKCk7Ci0gICAgaWYgKHggPCAwKSB4ID0g MDsKLQotICAgIC8qIEZpbGwgaW4gYW55IG90aGVycyBoZXJlLi4uICovCi0KLSNlbmRpZiAvKiBV U0VfRklMRV9SICovCi0jZW5kaWYgLyogVVNFX0ZJTEVfX0NOVCAqLwotI2VuZGlmIC8qIFVTRV9G SUxFX0NOVCAqLwotI2VuZGlmIC8qIF9JT19maWxlX2ZsYWdzICovCi0jZW5kaWYgLyogQ01EX0NP TklOQyAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgIHJldHVybih4ICsgeSk7Ci19Ci0vKiAjZW5k aWYgKi8gLyogVVNFX0FSUk9XS0VZUyAqLwotCi0KLXN0YXRpYyBWT0lECi1jbWRjbHJzY24oKSB7 CQkJCS8qIENsZWFyIHRoZSBzY3JlZW4gKi8KLSAgICBja19jbHMoKTsKLX0KLQotc3RhdGljIFZP SUQJCQkJLyogV2hhdCB0byBlY2hvIGF0IGVuZCBvZiBjb21tYW5kICovCi0jaWZkZWYgQ0tfQU5T SUMKLWNtZG5ld2woY2hhciBjKQotI2Vsc2UKLWNtZG5ld2woYykgY2hhciBjOwotI2VuZGlmIC8q IENLX0FOU0lDICovCi0vKiBjbWRuZXdsICovIHsKLSNpZmRlZiBPUzIKLSNpZmRlZiBJS1NECi0g ICAgZXh0ZXJuIGludCBpbnNlcnZlcjsKLSAgICBpZiAoaW5zZXJ2ZXIgJiYgYyA9PSBMRikKLSAg ICAgIHB1dGNoYXIoQ1IpOwotI2VuZGlmIC8qIElLU0QgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQot ICAgIHB1dGNoYXIoYyk7CQkJCS8qIGMgaXMgdGhlIHRlcm1pbmF0aW5nIGNoYXJhY3RlciAqLwot Ci0jaWZkZWYgV0lOVENQCQkJCS8qIHdoYXQgaXMgdGhpcyBkb2luZyBoZXJlPyAqLwotICAgIGlm IChjID09IENSKSBwdXRjaGFyKE5MKTsKLSNlbmRpZiAvKiBXSU5UQ1AgKi8KLQotLyoKLSAgQS5B LiBDaGVybm92LCB3aG8gc2VudCBpbiBjaGFuZ2VzIGZvciBGcmVlQlNELCBzYWlkIHdlIGFsc28g bmVlZGVkIHRoaXMKLSAgZm9yIFNWT1JQT1NJWCBiZWNhdXNlICJzZXR1cCB0ZXJtaW5hbCBieSB0 ZXJtaW9zIGFuZCBjdXJzZXMgZG9lcwotICBub3QgY29udmVydCBcciB0byBcbiwgc28gYWRkaXRp b25hbCBcbiBuZWVkZWQgaW4gbmV3bGluZSBmdW5jdGlvbi4iICBCdXQKLSAgaXQgaXMgYWxzbyB2 ZXJ5IGxpa2VseSB0byByZXN1bHQgaW4gdW53YW50ZWQgYmxhbmsgbGluZXMuCi0qLwotI2lmZGVm IEJTRDQ0Ci0gICAgaWYgKGMgPT0gQ1IpIHB1dGNoYXIoTkwpOwotI2VuZGlmIC8qIEJTRDQ0ICov Ci0KLSNpZmRlZiBDT01NRU5UCi0gICAgLyogT1MyIG5vIGxvbmdlciBuZWVkcyB0aGlzIGFzIGFs bCBDUiBhcmUgY29udmVydGVkIHRvIE5MIGluIGNvbmluYygpICovCi0gICAgLyogVGhpcyBlbGlt aW5hdGVzIHRoZSB1Z2x5IGV4dHJhIGJsYW5rIGxpbmVzIGRpc2N1c3NlZCBhYm92ZS4gICAgICAg ICovCi0jaWZkZWYgT1MyCi0gICAgaWYgKGMgPT0gQ1IpIHB1dGNoYXIoTkwpOwotI2VuZGlmIC8q IE9TMiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNpZmRlZiBhZWdpcwotICAgIGlmIChjID09 IENSKSBwdXRjaGFyKE5MKTsKLSNlbmRpZiAvKiBhZWdpcyAqLwotI2lmZGVmIEFNSUdBCi0gICAg aWYgKGMgPT0gQ1IpIHB1dGNoYXIoTkwpOwotI2VuZGlmIC8qIEFNSUdBICovCi0jaWZkZWYgZGF0 YWdlbmVyYWwKLSAgICBpZiAoYyA9PSBDUikgcHV0Y2hhcihOTCk7Ci0jZW5kaWYgLyogZGF0YWdl bmVyYWwgKi8KLSNpZmRlZiBHRU1ET1MKLSAgICBpZiAoYyA9PSBDUikgcHV0Y2hhcihOTCk7Ci0j ZW5kaWYgLyogR0VNRE9TICovCi0jaWZkZWYgU1RSQVRVUwotICAgIGlmIChjID09IENSKSBwdXRj aGFyKE5MKTsKLSNlbmRpZiAvKiBTVFJBVFVTICovCi19Ci0KLXN0YXRpYyBWT0lECi1jbWRjaGFy ZGVsKCkgewkJCQkvKiBFcmFzZSBhIGNoYXJhY3RlciBmcm9tIHRoZSBzY3JlZW4gKi8KLSNpZm5k ZWYgTk9TUEwKLSAgICBpZiAoIWVjaG9zdGFycykKLSNlbmRpZgkvKiBOT1NQTCAqLwotICAgICAg aWYgKCFkcHgpIHJldHVybjsKLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgIC8qIERHICdcYicgaXMg RU0gKF55IG9yIFwwMzEpICovCi0gICAgaWYgKHRlcm10eXBlID09IDEpCi0gICAgICAvKiBFcmFz ZSBhIGNoYXJhY3RlciBmcm9tIG5vbi1ERyBzY3JlZW4sICovCi0gICAgICBkZ25jb3ViKDEsIlww MTAgXDAxMCIsMyk7Ci0gICAgZWxzZQotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0gICAgICBw cmludGYoIlxiIFxiIik7Ci0jaWZkZWYgR0VNRE9TCi0gICAgZmZsdXNoKHN0ZG91dCk7Ci0jZWxz ZQotI2lmZGVmIEJFQk9YCi0gICAgZmZsdXNoKHN0ZG91dCk7Ci0jZW5kaWYgLyogQkVCT1ggKi8K LSNlbmRpZiAvKiBHRU1ET1MgKi8KLX0KLQotc3RhdGljIFZPSUQKLSNpZmRlZiBDS19BTlNJQwot Y21kZWNobyhjaGFyIGMsIGludCBxdW90ZSkKLSNlbHNlCi1jbWRlY2hvKGMscXVvdGUpIGNoYXIg YzsgaW50IHF1b3RlOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIGNtZGVjaG8gKi8KLSNp ZmRlZiBOT1NQTAotICAgIGlmICghZHB4KSByZXR1cm47Ci0jZWxzZQotICAgIGlmICghZWNob3N0 YXJzKSB7Ci0JaWYgKCFkcHgpIHJldHVybjsKLSAgICB9IGVsc2UgewotCWMgPSAoY2hhcillY2hv c3RhcnM7Ci0gICAgfQotI2VuZGlmCS8qIE5PU1BMICovCi0gICAgLyogRWNobyB0dHkgaW5wdXQg Y2hhcmFjdGVyIGMgKi8KLSAgICBpZiAocXVvdGUpIHsKLQlwdXRjaGFyKEJTKTsKLQlwdXRjaGFy KFNQKTsKLQlwdXRjaGFyKEJTKTsKLSNpZmRlZiBpc3ByaW50Ci0JcHV0Y2hhcigoQ0hBUikgKGlz cHJpbnQoYykgPyBjIDogJ14nICkpOwotI2Vsc2UKLQlwdXRjaGFyKChDSEFSKSAoKGMgPj0gU1Ag JiYgYyA8IERFTCkgPyBjIDogJ14nKSk7Ci0jZW5kaWYgLyogaXNwcmludCAqLwotICAgIH0gZWxz ZSB7Ci0JcHV0Y2hhcihjKTsKLSAgICB9Ci0jaWZkZWYgT1MyCi0gICAgaWYgKHF1b3RlPT0xICYm IGM9PUNSKSBwdXRjaGFyKChDSEFSKSBOTCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgaWYgKHRp bWVsaW1pdCkKLSAgICAgIGZmbHVzaChzdGRvdXQpOwotfQotCi0vKiBSZXR1cm4gcG9pbnRlciB0 byBjdXJyZW50IHBvc2l0aW9uIGluIGNvbW1hbmQgYnVmZmVyLiAqLwotCi1jaGFyICoKLWNtcGVl aygpIHsKLSAgICByZXR1cm4obnApOwotfQotI2VuZGlmIC8qIE5PSUNQICovCi0KLQotI2lmZGVm IE5PSUNQCi0jaW5jbHVkZSAiY2tjZGViLmgiCi0jaW5jbHVkZSAiY2t1Y21kLmgiCi0jaW5jbHVk ZSAiY2tjYXNjLmgiCi0jZW5kaWYgLyogTk9JQ1AgKi8KLQotLyogIFggWCBFIFMgQyAgLS0gIElu dGVycHJldHMgYmFja3NsYXNoIGNvZGVzICAqLwotLyogIFJldHVybnMgdGhlIGludCB2YWx1ZSBv ZiB0aGUgYmFja3NsYXNoIGNvZGUgaWYgaXQgaXMgPiAtMSBhbmQgPCAyNTYgKi8KLS8qICBhbmQg dXBkYXRlcyB0aGUgc3RyaW5nIHBvaW50ZXIgdG8gZmlyc3QgY2hhcmFjdGVyIGFmdGVyIGJhY2tz bGFzaCBjb2RlLiAqLwotLyogIElmIHRoZSBhcmd1bWVudCBpcyBpbnZhbGlkLCBsZWF2ZXMgcG9p bnRlciB1bmNoYW5nZWQgYW5kIHJldHVybnMgLTEuICovCi0KLWludAoteHhlc2MocykgY2hhciAq KnM7IHsJCQkvKiBFeHBhbmQgYmFja3NsYXNoIGVzY2FwZXMgKi8KLSAgICBpbnQgeCwgeSwgYnJh Y2UsIHJhZGl4OwkJLyogUmV0dXJucyB0aGUgaW50IHZhbHVlICovCi0gICAgY2hhciBoZCA9ICc5 JzsJCQkvKiBIaWdoZXN0IGRpZ2l0IGluIHJhZGl4ICovCi0gICAgY2hhciAqcDsKLQotICAgIHAg PSAqczsJCQkJLyogcG9pbnRlciB0byBiZWdpbm5pbmcgKi8KLSAgICBpZiAoIXApIHJldHVybigt MSk7CQkJLyogd2F0Y2ggb3V0IGZvciBudWxsIHBvaW50ZXIgKi8KLSAgICB4ID0gKnArKzsJCQkJ LyogY2hhcmFjdGVyIGF0IGJlZ2lubmluZyAqLwotICAgIGlmICh4ICE9IENNRFEpIHJldHVybigt MSk7CQkvKiBtYWtlIHN1cmUgaXQncyBhIGJhY2tzbGFzaCBjb2RlICovCi0KLSAgICB4ID0gKnA7 CQkJCS8qIGl0IGlzLCBnZXQgdGhlIG5leHQgY2hhcmFjdGVyICovCi0gICAgaWYgKHggPT0gJ3sn KSB7CQkJLyogYnJhY2tldGVkIHF1YW50aXR5PyAqLwotCXArKzsJCQkJLyogYmVnaW4gcGFzdCBi cmFja2V0ICovCi0JeCA9ICpwOwotCWJyYWNlID0gMTsKLSAgICB9IGVsc2UgYnJhY2UgPSAwOwot ICAgIHN3aXRjaCAoeCkgewkJCS8qIFN0YXJ0IGludGVycHJldGluZyAqLwotICAgICAgY2FzZSAn ZCc6CQkJCS8qIERlY2ltYWwgcmFkaXggaW5kaWNhdG9yICovCi0gICAgICBjYXNlICdEJzoKLQlw Kys7CQkJCS8qIEp1c3QgcG9pbnQgcGFzdCBpdCBhbmQgZmFsbCB0aHJ1ICovCi0gICAgICBjYXNl ICcwJzoJCQkJLyogU3RhcnRzIHdpdGggZGlnaXQgKi8KLSAgICAgIGNhc2UgJzEnOgotICAgICAg Y2FzZSAnMic6ICBjYXNlICczJzogIGNhc2UgJzQnOiAgY2FzZSAnNSc6Ci0gICAgICBjYXNlICc2 JzogIGNhc2UgJzcnOiAgY2FzZSAnOCc6ICBjYXNlICc5JzoKLQlyYWRpeCA9IDEwOwkJCS8qIERl Y2ltYWwgKi8KLQloZCA9ICc5JzsJCQkvKiBoaWdoZXN0IHZhbGlkIGRpZ2l0ICovCi0JYnJlYWs7 Ci0gICAgICBjYXNlICdvJzoJCQkJLyogU3RhcnRzIHdpdGggbyBvciBPICovCi0gICAgICBjYXNl ICdPJzoKLQlyYWRpeCA9IDg7CQkJLyogT2N0YWwgKi8KLQloZCA9ICc3JzsJCQkvKiBoaWdoZXN0 IHZhbGlkIGRpZ2l0ICovCi0JcCsrOwkJCQkvKiBwb2ludCBwYXN0IHJhZGl4IGluZGljYXRvciAq LwotCWJyZWFrOwotICAgICAgY2FzZSAneCc6CQkJCS8qIFN0YXJ0cyB3aXRoIHggb3IgWCAqLwot ICAgICAgY2FzZSAnWCc6Ci0JcmFkaXggPSAxNjsJCQkvKiBIZXhhZGVjaW1hbCAqLwotCXArKzsJ CQkJLyogcG9pbnQgcGFzdCByYWRpeCBpbmRpY2F0b3IgKi8KLQlicmVhazsKLSAgICAgIGRlZmF1 bHQ6CQkJCS8qIEFsbCBvdGhlcnMgKi8KLSNpZmRlZiBDT01NRU5UCi0JKnMgPSBwKzE7CQkJLyog VHJlYXQgYXMgcXVvdGUgb2YgbmV4dCBjaGFyICovCi0JcmV0dXJuKCpwKTsKLSNlbHNlCi0JcmV0 dXJuKC0xKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgfQotICAgIC8qIEZvciBPUy8yLCB0 aGVyZSBhcmUgIndpZGUiIGNoYXJhY3RlcnMgcmVxdWlyZWQgZm9yIHRoZSBrZXlib2FyZAotICAg ICAqIGJpbmRpbmcsIGkuZSBcNjQ0IGFuZCBzaW1pbGFyIGNvZGVzIGxhcmdlciB0aGFuIDI1NSAo Ynl0ZSkuCi0gICAgICogRm9yIHRoaXMgcHVycG9zZSwgZ2l2ZSB1cCBjaGVja2luZyBmb3IgPCAy NTYuIElmIHNvbWVvbmUgbWVhbnMKLSAgICAgKiBcMjY2IHNob3VsZCByZXN1bHQgaW4gXDI2IGZv bGxvd2VkIGJ5IGEgIjYiIGNoYXJhY3RlciwgaGUgc2hvdWxkCi0gICAgICogYWx3YXlzIHdyaXRl IFx7MjZ9NiBhbnl3YXkuICBOb3csIHJldHVybiBvbmx5IHRoZSBsb3dlciBieXRlIG9mCi0gICAg ICogdGhlIHJlc3VsdCwgaS5lLiAxMCwgYnV0IGVhdCB1cCB0aGUgd2hvbGUgXDI2NiBzZXF1ZW5j ZSBhbmQKLSAgICAgKiBwdXQgdGhlIHdpZGUgcmVzdWx0IDI2NiBpbnRvIGEgZ2xvYmFsIHZhcmlh YmxlLiAgWWVzLCB0aGF0J3Mgbm90Ci0gICAgICogdGhlIG1vc3QgYmVhdXRpZnVsIHByb2dyYW1t aW5nIHN0eWxlIGJ1dCByZXF1aXJlcyB0aGUgbGVhc3QKLSAgICAgKiBhbW91bnQgb2YgY2hhbmdl cyB0byBvdGhlciByb3V0aW5lcy4KLSAgICAgKi8KLSAgICBpZiAoKnAgPT0gJ3snKSB7CQkJLyog U3VuIE1heSAxMSAyMDowMDo0MCAyMDAzICovCi0JYnJhY2UgPSAxOwkJCS8qIEFsbG93IHt9IGFm dGVyIHJhZGl4IGluZGljYXRvciAqLwotCXArKzsKLSAgICB9Ci0gICAgaWYgKHJhZGl4IDw9IDEw KSB7CQkJLyogTnVtYmVyIGluIHJhZGl4IDggb3IgMTAgKi8KLQlmb3IgKCB4ID0geSA9IDA7Ci0g CSAgICAgICgqcCkgJiYgKCpwID49ICcwJykgJiYgKCpwIDw9IGhkKQotI2lmZGVmIE9TMgotICAg ICAgICAgICAgICAgICAgICYmICh5IDwgNSkgJiYgKHgqcmFkaXggPCBLTVNJWkUpOwotICAgICAg ICAgICAgICAvKiB0aGUgbWF4aW11bSBuZWVkZWQgdmFsdWUgXDgxOTYgaXMgNCBkaWdpdHMgbG9u ZyAqLwotICAgICAgICAgICAgICAvKiB3aGlsZSBhcyBvY3RhbCBpdCByZXF1aXJlcyBcMTM3Nywg aS5lLiA1IGRpZ2l0cyAqLwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAmJiAoeSA8IDMpICYm ICh4KnJhZGl4IDwgMjU2KTsKLSNlbmRpZiAvKiBPUzIgKi8KLQkgICAgICBwKysseSsrKSB7Ci0J ICAgIHggPSB4ICogcmFkaXggKyAoaW50KSAqcCAtIDQ4OwotCX0KLSNpZmRlZiBPUzIKLSAgICAg ICAgd2lkZXJlc3VsdCA9IHg7CQkJLyogUmVtZW1iZXIgd2lkZSByZXN1bHQgKi8KLSAgICAgICAg eCAmPSAyNTU7Ci0jZW5kaWYgLyogT1MyICovCi0JaWYgKHkgPT0gMCB8fCB4ID4gMjU1KSB7CS8q IE5vIHZhbGlkIGRpZ2l0cz8gKi8KLQkgICAgKnMgPSBwOwkJCS8qIHBvaW50IGFmdGVyIGl0ICov Ci0JICAgIHJldHVybigtMSk7CQkJLyogcmV0dXJuIGZhaWx1cmUuICovCi0JfQotICAgIH0gZWxz ZSBpZiAocmFkaXggPT0gMTYpIHsJCS8qIFNwZWNpYWwgY2FzZSBmb3IgaGV4ICovCi0JaWYgKCh4 ID0gdW5oZXgoKnArKykpIDwgMCkgeyAqcyA9IHAgLSAxOyByZXR1cm4oLTEpOyB9Ci0JaWYgKCh5 ID0gdW5oZXgoKnArKykpIDwgMCkgeyAqcyA9IHAgLSAyOyByZXR1cm4oLTEpOyB9Ci0JeCA9ICgo eCA8PCA0KSAmIDB4RjApIHwgKHkgJiAweDBGKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgd2lkZXJl c3VsdCA9IHg7Ci0gICAgICAgIGlmICgoeSA9IHVuaGV4KCpwKSkgPj0gMCkgewotICAgICAgICAg ICBwKys7Ci0JICAgd2lkZXJlc3VsdCA9ICgoeCA8PCA0KSAmIDB4RkYwKSB8ICh5ICYgMHgwRik7 Ci0gICAgICAgICAgIHggPSB3aWRlcmVzdWx0ICYgMjU1OwotICAgICAgICB9Ci0jZW5kaWYgLyog T1MyICovCi0gICAgfSBlbHNlIHggPSAtMTsKLSAgICBpZiAoYnJhY2UgJiYgKnAgPT0gJ30nICYm IHggPiAtMSkJLyogUG9pbnQgcGFzdCBjbG9zaW5nIGJyYWNlLCBpZiBhbnkgKi8KLSAgICAgIHAr KzsKLSAgICAqcyA9IHA7CQkJCS8qIFBvaW50IHRvIG5leHQgY2hhciBhZnRlciBzZXF1ZW5jZSAq LwotICAgIHJldHVybih4KTsJCQkJLyogUmV0dXJuIHZhbHVlIG9mIHNlcXVlbmNlICovCi19Ci0K LWludAkJCQkJLyogQ29udmVydCBoZXggc3RyaW5nIHRvIGludCAqLwotI2lmZGVmIENLX0FOU0lD Ci11bmhleChjaGFyIHgpCi0jZWxzZQotdW5oZXgoeCkgY2hhciB4OwotI2VuZGlmIC8qIENLX0FO U0lDICovCi0vKiB1bmhleCAqLyB7Ci0KLSAgICBpZiAoeCA+PSAnMCcgJiYgeCA8PSAnOScpCQkv KiAwLTkgaXMgb2Zmc2V0IGJ5IGhleCAzMCAqLwotICAgICAgcmV0dXJuKHggLSAweDMwKTsKLSAg ICBlbHNlIGlmICh4ID49ICdBJyAmJiB4IDw9ICdGJykJLyogQS1GIG9mZnNldCBieSBoZXggMzcg Ki8KLSAgICAgIHJldHVybih4IC0gMHgzNyk7Ci0gICAgZWxzZSBpZiAoeCA+PSAnYScgJiYgeCA8 PSAnZicpCS8qIGEtZiBvZmZzZXQgYnkgaGV4IDU3ICovCi0gICAgICByZXR1cm4oeCAtIDB4NTcp OwkJCS8qIChvYnZpb3VzbHkgQVNDSUkgZGVwZW5kZW50KSAqLwotICAgIGVsc2UgcmV0dXJuKC0x KTsKLX0KLQotLyogIEwgTyBPIEsgVSBQICAtLSAgTG9va3VwIHRoZSBzdHJpbmcgaW4gdGhlIGdp dmVuIGFycmF5IG9mIHN0cmluZ3MgICovCi0KLS8qCi0gIENhbGwgdGhpcyB3YXk6ICB2ID0gbG9v a3VwKHRhYmxlLHdvcmQsbiwmeCk7Ci0KLSAgICB0YWJsZSAtIGEgJ3N0cnVjdCBrZXl0YWInIHRh YmxlLgotICAgIHdvcmQgIC0gdGhlIHRhcmdldCBzdHJpbmcgdG8gbG9vayB1cCBpbiB0aGUgdGFi bGUuCi0gICAgbiAgICAgLSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSB0YWJsZS4KLSAg ICB4ICAgICAtIGFkZHJlc3Mgb2YgYW4gaW50ZWdlciBmb3IgcmV0dXJuaW5nIHRoZSB0YWJsZSBh cnJheSBpbmRleCwKLQkgICAgb3IgTlVMTCBpZiB5b3UgZG9uJ3QgbmVlZCBhIHRhYmxlIGluZGV4 LgotCi0gIFRoZSBrZXl3b3JkIHRhYmxlIG11c3QgYmUgYXJyYW5nZWQgaW4gYXNjZW5kaW5nIGFs cGhhYmV0aWNhbCBvcmRlcjsKLSAgYWxwaGFiZXRpYyBjYXNlIGRvZXNuJ3QgbWF0dGVyIGJ1dCBs ZXR0ZXJzIGFyZSB0cmVhdGVkIGFzIGxvd2VyY2FzZQotICBmb3IgcHVycG9zZXMgb2Ygb3JkZXJp bmc7IHRodXMgIl4iIGFuZCAiXyIgY29tZSAqYmVmb3JlKiB0aGUgbGV0dGVycywKLSAgbm90IGFm dGVyIHRoZW0uCi0KLSAgUmV0dXJucyB0aGUga2V5d29yZCdzIGFzc29jaWF0ZWQgdmFsdWUgKHpl cm8gb3IgZ3JlYXRlcikgaWYgZm91bmQsCi0gIHdpdGggdGhlIHZhcmlhYmxlIHggc2V0IHRvIHRo ZSBrZXl3b3JkLXRhYmxlIGluZGV4LiAgSWYgaXMgbG9va3VwKCkKLSAgaXMgbm90IHN1Y2Nlc3Nm dWwsIGl0IHJldHVybnM6Ci0KLSAgIC0zIGlmIG5vdGhpbmcgdG8gbG9vayB1cCAodGFyZ2V0IHdh cyBudWxsKSwKLSAgIC0yIGlmIGFtYmlndW91cywKLSAgIC0xIGlmIG5vdCBmb3VuZC4KLQotICBB IG1hdGNoIGlzIHN1Y2Nlc3NmdWwgaWYgdGhlIHRhcmdldCBtYXRjaGVzIGEga2V5d29yZCBleGFj dGx5LCBvciBpZgotICB0aGUgdGFyZ2V0IGlzIGEgcHJlZml4IG9mIGV4YWN0bHkgb25lIGtleXdv cmQuICBJdCBpcyBhbWJpZ3VvdXMgaWYgdGhlCi0gIHRhcmdldCBtYXRjaGVzIHR3byBvciBtb3Jl IGtleXdvcmRzIGZyb20gdGhlIHRhYmxlLgotCi0gIExvb2t1cCgpIGlzIHRoZSBjcml0aWNhbCBy b3V0aW5lIGluIHNjcmlwdHMgYW5kIHNvIGlzIG9wdGltaXplZCB3aXRoIGEKLSAgc2ltcGxlIHN0 YXRpYyBjYWNoZSBwbHVzIHNvbWUgb3RoZXIgdHJpY2tzLiAgTWF5YmUgaXQgY291bGQgYmUgaW1w cm92ZWQKLSAgZnVydGhlciB3aXRoIGJpbmFyeSBzZWFyY2ggb3IgaGFzaCB0ZWNobmlxdWVzIGJ1 dCBJIGRvdWJ0IGl0IHNpbmNlIG1vc3QKLSAga2V5d29yZCB0YWJsZXMgYXJlIGZhaXJseSBzaG9y dC4KLSovCi0KLSNpZmRlZiBVU0VfTFVDQUNIRQkJCS8qIExvb2t1cCBjYWNoZSAqLwotZXh0ZXJu IGludCBsdXNpemU7CQkJLyogKGluaXRpYWxpemVkIGluIGNrdXVzNS5jKSAqLwotZXh0ZXJuIGNo YXIgKiBsdWNtZFtdOwotZXh0ZXJuIGludCBsdXZhbFtdOwotZXh0ZXJuIGludCBsdWlkeFtdOwot ZXh0ZXJuIHN0cnVjdCBrZXl0YWIgKiBsdXRhYltdOwotbG9uZyBsdWhpdHMgPSAwTDsKLWxvbmcg bHVjYWxscyA9IDBMOwotbG9uZyB4eGhpdHMgPSAwTDsKLWxvbmcgbHVsb29wID0gMEw7Ci0jZW5k aWYgLyogVVNFX0xVQ0FDSEUgKi8KLQotaW50Ci1sb29rdXAodGFibGUsY21kLG4seCkgY2hhciAq Y21kOyBzdHJ1Y3Qga2V5dGFiIHRhYmxlW107IGludCBuLCAqeDsgewotCi0gICAgcmVnaXN0ZXIg aW50IGksIG07Ci0gICAgaW50IHYsIGxlbiwgY21kbGVuID0gMDsKLSAgICBjaGFyIGMgPSBOVUws IGMxLCAqczsKLQotLyogR2V0IDFzdCBjaGFyIG9mIHNlYXJjaCBvYmplY3QsIGlmIGl0J3MgbnVs bCByZXR1cm4gLTMuICovCi0KLSAgICBpZiAoIWNtZCB8fCBuIDwgMSkJCQkvKiBEZWZlbnNlIGRl IG51bGxhcmcgKi8KLSAgICAgIHJldHVybigtMyk7Ci0gICAgYzEgPSAqY21kOwkJCQkvKiBGaXJz dCBjaGFyYWN0ZXIgKi8KLSAgICBpZiAoIWMxKQkJCQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgb25l ICovCi0gICAgICByZXR1cm4oLTMpOwotICAgIGlmIChpc3VwcGVyKGMxKSkJCQkvKiBJZiBsZXR0 ZXIgbWFrZSBpdCBsb3dlcmNhc2UgKi8KLSAgICAgIGMxID0gdG9sb3dlcihjMSk7Ci0KLSNpZmRl ZiBVU0VfTFVDQUNIRQkJCS8qIGxvb2t1cCgpIGNhY2hlICovCi0gICAgbSA9IGx1c2l6ZTsKLSAg ICBsdWNhbGxzKys7CQkJCS8qIENvdW50IHRoaXMgbG9va3VwKCkgY2FsbCAqLwotICAgIGZvciAo aSA9IDA7IGkgPCBtOyBpKyspIHsJCS8qIExvb3AgdGhydSBjYWNoZSAqLwotCWlmICgqKGx1Y21k W2ldKSA9PSBjMSkgewkvKiBTYW1lIGFzIDFzdCBjaGFyIG9mIHNlYXJjaCBpdGVtPyAqLwotCSAg ICBpZiAobHV0YWJbaV0gPT0gdGFibGUpIHsJLyogWWVzIC0gc2FtZSB0YWJsZSB0b28/ICovCi0J CWlmICghc3RyY21wKGNtZCxsdWNtZFtpXSkpIHsgLyogWWVzIC0gY29tcGFyZSAqLwotCQkgICAg aWYgKHgpICp4ID0gbHVpZHhbaV07ICAgIC8qIE1hdGNoIC0gcmV0dXJuIGluZGV4ICovCi0JCSAg ICBsdWhpdHMrKzsgICAgICAgICAgICAgICAgLyogQ291bnQgY2FjaGUgaGl0ICovCi0JCSAgICBy ZXR1cm4obHV2YWxbaV0pOyAgICAgICAgLyogUmV0dXJuIGFzc29jaWF0ZWQgdmFsdWUgKi8KLQkJ fQotCSAgICB9Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBVU0VfTFVDQUNIRSAqLwotCi0vKiBOb3Qg bnVsbCwgbm90IGluIGNhY2hlLCBsb29rIGl0IHVwICovCi0KLSAgICBzID0gY21kOwotICAgIHdo aWxlICgqcysrKSBjbWRsZW4rKzsJCS8qIExlbmd0aCBvZiB0YXJnZXQgKi8KLS8qCi0gIFF1aWNr IGJpbmFyeSBzZWFyY2ggdG8gZmluZCBsYXN0IHRhYmxlIGVudHJ5IHdob3NlIGZpcnN0IGNoYXJh Y3RlciBpcwotICBsZXhpY2FsbHkgbGVzcyB0aGFuIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhl IHNlYXJjaCBvYmplY3QuICBUaGlzIGlzCi0gIHRoZSBzdGFydGluZyBwb2ludCBvZiB0aGUgbmV4 dCBsb29wLCB3aGljaCBtdXN0IGdvIGluIHNlcXVlbmNlIHNpbmNlIGl0Ci0gIGNvbXBhcmVzIGFk amFjZW50IHRhYmxlIGVudHJpZXMuCi0qLwotICAgIGlmIChuIDwgNSkgewkJCS8qIE5vdCB3b3J0 aCBpdCBmb3Igc21hbGwgdGFibGVzICovCi0JaSA9IDA7Ci0gICAgfSBlbHNlIHsKLQlpbnQgbG8g PSAwOwotCWludCBoaSA9IG47Ci0JaW50IGNvdW50ID0gMDsKLQl3aGlsZSAobG8rMiA8IGhpICYm ICsrY291bnQgPCAxMikgewotCSAgICBpID0gbG8gKyAoKGhpIC0gbG8pIC8gMik7Ci0JICAgIGMg PSAqKHRhYmxlW2ldLmt3ZCk7Ci0JICAgIGlmIChpc3VwcGVyKGMpKSBjID0gdG9sb3dlcihjKTsK LQkgICAgaWYgKGMgPCBjMSkgewotCQlsbyA9IGk7Ci0JICAgIH0gZWxzZSB7Ci0JCWhpID0gaTsK LQkgICAgfQotCX0KLQlpID0gKGMgPCBjMSkgPyBsbysxIDogbG87Ci0jaWZkZWYgVVNFX0xVQ0FD SEUKLQlpZiAoaSA+IDApIHh4aGl0cysrOwotI2VuZGlmIC8qIFVTRV9MVUNBQ0hFICovCi0gICAg fQotICAgIGZvciAoIDsgaSA8IG4tMTsgaSsrKSB7Ci0jaWZkZWYgVVNFX0xVQ0FDSEUKLQlsdWxv b3ArKzsKLSNlbmRpZiAvKiBVU0VfTFVDQUNIRSAqLwotCXYgPSAwOwotCWMgPSAqKHRhYmxlW2ld Lmt3ZCk7Ci0JaWYgKGMpIHsKLQkgICAgaWYgKGlzdXBwZXIoYykpIGMgPSB0b2xvd2VyKGMpOwot Ci0JICAgIC8qIFRoZSBmb2xsb3dpbmcgaXMgYSBiaWcgcGVyZm9ybWFuY2UgYm9vc3RlciBidXQg bWFrZXMgaXQgKi8KLQkgICAgLyogYWJzb2x1dGVseSBlc3NlbnRpYWwgdGhhdCBhbGwgbG9va3Vw KCkgdGFibGVzIGFyZSBpbiBvcmRlci4gKi8KLQotCSAgICBpZiAoYyA+IGMxKQkJCS8qIExlYXZl IGVhcmx5IGlmIHBhc3Qgb3VyIG1hcmsgKi8KLQkgICAgICByZXR1cm4oLTEpOwotCi0jaWZkZWYg REVCVUcKLQkgICAgLyogVXNlIExPRyBERUJVRyB0byBjaGVjayAqLwotCi0JICAgIGlmIChkZWJs b2cpIHsKLQkJaWYgKGNrc3RyY21wKHRhYmxlW2ldLmt3ZCx0YWJsZVtpKzFdLmt3ZCwwLDApID4g MCkgewotCQkgICAgcHJpbnRmKCJUQUJMRSBPVVQgT0YgT1JERVIgWyVzXSBbJXNdXG4iLAotCQkJ ICAgdGFibGVbaV0ua3dkLHRhYmxlW2krMV0ua3dkKTsKLQotCQl9Ci0JICAgIH0KLSNlbmRpZiAv KiBERUJVRyAqLwotCi0JICAgIGlmIChjID09IGMxKSB7Ci0JCWxlbiA9IDA7Ci0JCXMgPSB0YWJs ZVtpXS5rd2Q7Ci0JCXdoaWxlICgqcysrKSBsZW4rKzsKLQkJaWYgKChsZW4gPT0gY21kbGVuICYm ICFja3N0cmNtcCh0YWJsZVtpXS5rd2QsY21kLGxlbiwwKSkgfHwKLQkJICAgICgodiA9ICFja3N0 cmNtcCh0YWJsZVtpXS5rd2QsY21kLGNtZGxlbiwwKSkgJiYKLQkJICAgICBja3N0cmNtcCh0YWJs ZVtpKzFdLmt3ZCxjbWQsY21kbGVuLDApKSkgewotCQkgICAgaWYgKHgpICp4ID0gaTsKLQkJICAg IHJldHVybih0YWJsZVtpXS5rd3ZhbCk7Ci0JCX0KLQkgICAgfSBlbHNlIHYgPSAwOwotCX0KLSAg ICAgICAgaWYgKHYpIHsJCQkvKiBBbWJpZ3VvdXMgKi8KLQkgICAgaWYgKHgpICp4ID0gaTsJCS8q IFNldCBpbmRleCBvZiBmaXJzdCBtYXRjaCAqLwotCSAgICByZXR1cm4oLTIpOwotCX0KLSAgICB9 Ci0KLS8qIExhc3QgKG9yIG9ubHkpIGVsZW1lbnQgKi8KLQotICAgIGlmICghY2tzdHJjbXAodGFi bGVbbi0xXS5rd2QsY21kLGNtZGxlbiwwKSkgewotICAgICAgICBpZiAoeCkgKnggPSBuLTE7Ci0J LyogZGVidWcoRjExMSwibG9va3VwIix0YWJsZVtpXS5rd2QsdGFibGUpOyAqLwotICAgICAgICBy ZXR1cm4odGFibGVbbi0xXS5rd3ZhbCk7Ci0gICAgfSBlbHNlIHJldHVybigtMSk7Ci19Ci0KLS8q Ci0gIHggbCBvIG8gayB1IHAKLQotICBMaWtlIGxvb2t1cCwgYnV0IHJlcXVpcmVzIGEgZnVsbCAo YnV0IGNhc2UtaW5kZXBlbmRlbnQpIG1hdGNoCi0gIGFuZCBkb2VzIE5PVCByZXF1aXJlIHRoZSB0 YWJsZSB0byBiZSBpbiBvcmRlci4KLSovCi1pbnQKLXhsb29rdXAodGFibGUsY21kLG4seCkgc3Ry dWN0IGtleXRhYiB0YWJsZVtdOyBjaGFyICpjbWQ7IGludCBuLCAqeDsgewotICAgIHJlZ2lzdGVy IGludCBpOwotICAgIGludCBsZW4sIGNtZGxlbiwgb25lID0gMDsKLSAgICByZWdpc3RlciBjaGFy IGMsIGMyLCAqIHMsICogczI7Ci0KLSAgICBpZiAoIWNtZCkgY21kID0gIiI7CQkJLyogQ2hlY2sg YXJncyAqLwotICAgIGlmICghKmNtZCB8fCBuIDwgMSkgcmV0dXJuKC0zKTsKLQotICAgIGMgPSAq Y21kOwkJCQkvKiBGaXJzdCBjaGFyIG9mIHN0cmluZyB0byBsb29rIHVwICovCi0gICAgaWYgKCEq KGNtZCsxKSkgewkJCS8qIFNwZWNpYWwgaGFuZGxpbmcgZm9yIDEtY2hhciBuYW1lcyAqLwotCWNt ZGxlbiA9IDE7Ci0JaWYgKGlzdXBwZXIoYykpCi0JICBjID0gdG9sb3dlcihjKTsKLQlvbmUgPSAx OwotICAgIH0gZWxzZSB7Ci0JY21kbGVuID0gMDsKLQlzID0gY21kOwotCXdoaWxlICgqcysrKSBj bWRsZW4rKzsKLQljID0gKmNtZDsKLQlpZiAoaXN1cHBlcihjKSkKLQkgIGMgPSB0b2xvd2VyKGMp OwotICAgIH0KLSAgICBpZiAoY21kbGVuIDwgMSkKLSAgICAgIHJldHVybigtMyk7Ci0KLSAgICBm b3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0JcyA9IHRhYmxlW2ldLmt3ZDsJCS8qIFRoaXMgZW50 cnkgKi8KLQlpZiAoIXMpIHMgPSAiIjsKLQlpZiAoISpzKSBjb250aW51ZTsJCS8qIEVtcHR5IHRh YmxlIGVudHJ5ICovCi0JYzIgPSAqczsKLQlpZiAoaXN1cHBlcihjMikpIGMyID0gdG9sb3dlcihj Mik7Ci0JaWYgKGMgIT0gYzIpIGNvbnRpbnVlOwkJLyogRmlyc3QgY2hhciBkb2Vzbid0IG1hdGNo ICovCi0JaWYgKG9uZSkgewkJCS8qIE5hbWUgaXMgb25lIGNoYXIgbG9uZyAqLwotCSAgICBpZiAo ISoocysxKSkgewotCQlpZiAoeCkgKnggPSBpOwotICAgICAgICAgICAgICAgICpjbWQgPSBjOyAK LQkJcmV0dXJuKHRhYmxlW2ldLmt3dmFsKTsJLyogU28gaXMgdGFibGUgZW50cnkgKi8KLQkgICAg fQotCX0gZWxzZSB7CQkJLyogT3RoZXJ3aXNlIGRvIHN0cmluZyBjb21wYXJpc29uICovCi0JICAg IHMyID0gczsKLQkgICAgbGVuID0gMDsKLQkgICAgd2hpbGUgKCpzMisrKSBsZW4rKzsKLQkgICAg aWYgKGxlbiA9PSBjbWRsZW4gJiYgIWNrc3RyY21wKHMsY21kLC0xLDApKSB7Ci0JCWlmICh4KSAq eCA9IGk7Ci0JCXJldHVybih0YWJsZVtpXS5rd3ZhbCk7Ci0JICAgIH0KLQl9Ci0gICAgfQotICAg IHJldHVybigtMSk7Ci19Ci0KLS8qIFJldmVyc2UgbG9va3VwICovCi0KLWNoYXIgKgotcmxvb2t1 cCh0YWJsZSxuLHgpIHN0cnVjdCBrZXl0YWIgdGFibGVbXTsgaW50IG4sIHg7IHsKLSAgICBpbnQg aTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgIGlmICh0YWJsZVtpXS5r d3ZhbCA9PSB4KQotCSAgcmV0dXJuKHRhYmxlW2ldLmt3ZCk7Ci0gICAgfQotICAgIHJldHVybihO VUxMKTsKLX0KLQotI2lmbmRlZiBOT0lDUAotaW50Ci1jbWRzcXVvKHgpIGludCB4OyB7Ci0gICAg cXVvdGluZyA9IHg7Ci0gICAgcmV0dXJuKDEpOwotfQotCi1pbnQKLWNtZGdxdW8oKSB7Ci0gICAg cmV0dXJuKHF1b3RpbmcpOwotfQotI2VuZGlmIC8qIE5PSUNQICovCgpkaWZmIC0tZ2l0IGEvY2tl cm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VjbWQuYy5nbGliYzJfMjggYi9j a2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWNtZC5jLmdsaWJjMl8yOApk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc0ZGMyZC4uMDAwMDAwMAotLS0gYS9ja2Vy bWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWNtZC5jLmdsaWJjMl8yOAorKysg L2Rldi9udWxsCkBAIC0xLDc5MTkgKzAsMCBAQAotI2luY2x1ZGUgImNrY3N5bS5oIgotCi1jaGFy ICpjbWR2ID0gIkNvbW1hbmQgcGFja2FnZSA5LjAuMTY4LCAxMiBNYXJjaCAyMDEwIjsKLQotLyog IEMgSyBVIEMgTSBEICAtLSAgSW50ZXJhY3RpdmUgY29tbWFuZCBwYWNrYWdlIGZvciBVbml4ICAq LwotCi0vKiAoSW4gcmVhbGl0eSwgaXQncyBmb3IgYWxsIHBsYXRmb3Jtcywgbm90IGp1c3QgVW5p eCkgKi8KLQotLyoKLSAgQXV0aG9yOiBGcmFuayBkYSBDcnV6IChmZGNAY29sdW1iaWEuZWR1KSwK LSAgQ29sdW1iaWEgVW5pdmVyc2l0eSBBY2FkZW1pYyBJbmZvcm1hdGlvbiBTeXN0ZW1zLCBOZXcg WW9yayBDaXR5LgotCi0gIENvcHlyaWdodCAoQykgMTk4NSwgMjAxMCwKLSAgICBUcnVzdGVlcyBv ZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgotICAgIEFsbCBy aWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhl Ci0gICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1l ciBhbmQgcGVybWlzc2lvbnMuCi0qLwotCi0jZGVmaW5lIFRPS1BSRUNIRUNLCi0KLSNkZWZpbmUg RE9DSEtWQVIKLQotLyogQ29tbWFuZC10ZXJtaW5hbC10by1DLUtlcm1pdCBjaGFyYWN0ZXIgbWFz ayAqLwotCi0jaWZkZWYgT1MyCQkJCS8qIEs5NSAqLwotaW50IGNtZG1zayA9IDI1NTsJCQkvKiAo YWx3YXlzIHdhcyAyNTUpICovCi0jZWxzZQkJCQkJLyogQWxsIG90aGVycy4uLiAqLwotaW50IGNt ZG1zayA9IDI1NTsJCQkvKiAzMSBEZWMgMjAwMCAod2FzIDEyNykgKi8KLSNlbmRpZiAvKiBPUzIg Ki8KLQotI2lmZGVmIEJTX0RJUlNFUAkJCS8qIERpcmVjdG9yeSBzZXBhcmF0b3IgaXMgYmFja3Ns YXNoICovCi0jdW5kZWYgQlNfRElSU0VQCi0jZW5kaWYgLyogQlNfRElSU0VQICovCi0KLSNpZmRl ZiBPUzIKLSNkZWZpbmUgQlNfRElSU0VQCi0jZW5kaWYgLyogQlNfRElSU0VQICovCi0KLSNkZWZp bmUgQ0tVQ01EX0MKLQotI2luY2x1ZGUgImNrY2RlYi5oIiAgICAgICAgICAgICAgICAgICAgIC8q IEZvcm1hdHMgZm9yIGRlYnVnKCksIGV0Yy4gKi8KLSNpbmNsdWRlICJja2NrZXIuaCIJCQkvKiBO ZWVkZWQgZm9yIEJJR0JVRk9LIGRlZmluaXRpb24gKi8KLSNpbmNsdWRlICJja2NuZXQuaCIJCQkv KiBOZWVkZWQgZm9yIHNlcnZlci1zaWRlIFRlbG5ldCAqLwotI2luY2x1ZGUgImNrdWNtZC5oIgkJ CS8qIE5lZWRlZCBmb3IgZXZlcnl0aGluZyAqLwotI2luY2x1ZGUgImNrdXVzci5oIiAgICAgICAg ICAgICAgICAgICAgIC8qIE5lZWRlZCBmb3IgcHJvbXB0IGxlbmd0aCAqLwotCi0jaWZuZGVmIE5P QVJST1dLRVlTCi0jaWZuZGVmIE5PRVNDU0VRCi0jaWZkZWYgVk1TT1JVTklYCi0jZGVmaW5lIFVT RV9BUlJPV0tFWVMJCQkvKiBVc2UgYXJyb3cga2V5cyBmb3IgY29tbWFuZCByZWNhbGwgKi8KLSNl bmRpZiAvKiBWTVNPUlVOSVggKi8KLSNlbmRpZiAvKiBOT0VTQ1NFUSAqLwotI2VuZGlmIC8qIE5P QVJST1dLRVlTICovCi0KLSN1bmRlZiBDS1VDTURfQwotCi1fUFJPVE9UWVAoIGludCB1bmhleCwg KGNoYXIpICk7Ci1fUFJPVE9UWVAoIHN0YXRpYyBWT0lEIGNtZGNscnNjbiwgKHZvaWQpICk7Ci0K LSNpZmRlZiBDS0xFQVJOCi1fUFJPVE9UWVAoIFZPSUQgbGVhcm5jbWQsIChjaGFyICopICk7Ci0j ZW5kaWYgLyogQ0tMRUFSTiAqLwotCi1zdGF0aWMgY2hhciAqbW9uYW1lW10gPSB7Ci0gICAgIkph biIsICJGZWIiLCAiTWFyIiwgIkFwciIsICJNYXkiLCAiSnVuIiwKLSAgICAiSnVsIiwgIkF1ZyIs ICJTZXAiLCAiT2N0IiwgIk5vdiIsICJEZWMiCi19OwotCi1zdHJ1Y3Qga2V5dGFiIGNtb250aHNb XSA9IHsKLSAgeyAiYXByaWwiLCAgICAgNCwgMCB9LAotICB7ICJhdWd1c3QiLCAgICA4LCAwIH0s Ci0gIHsgImRlY2VtYmVyIiwgMTIsIDAgfSwKLSAgeyAiZmVicnVhcnkiLCAgMiwgMCB9LAotICB7 ICJqYW51YXJ5IiwgICAxLCAwIH0sCi0gIHsgImp1bHkiLCAgICAgIDcsIDAgfSwKLSAgeyAianVu ZSIsICAgICAgNiwgMCB9LAotICB7ICJtYXJjaCIsICAgICAzLCAwIH0sCi0gIHsgIm1heSIsICAg ICAgIDUsIDAgfSwKLSAgeyAibm92ZW1iZXIiLCAxMSwgMCB9LAotICB7ICJvY3RvYmVyIiwgIDEw LCAwIH0sCi0gIHsgInNlcHRlbWJlciIsIDksIDAgfQotfTsKLQotI2lmbmRlZiBOT0lDUCAgICAg LyogVGhlIHJlc3Qgb25seSBpZiBpbnRlcmFjdGl2ZSBjb21tYW5kIHBhcnNpbmcgc2VsZWN0ZWQg Ki8KLQotI2lmbmRlZiBOT1NQTAotX1BST1RPVFlQKCBpbnQgY2hrdmFyLCAoY2hhciAqKSApOwot ZXh0ZXJuIGludCBhc2tmbGFnLCBlY2hvc3RhcnM7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lm ZGVmIENLUk9PVAotZXh0ZXJuIGludCBja3Jvb3RlcnI7Ci0jZW5kaWYgLyogQ0tST09UICovCi0K LSNpZmRlZiBJS1NECi1leHRlcm4gaW50IGluc2VydmVyOwotI2VuZGlmIC8qIElLU0QgKi8KLQot aW50IGNtZmxkZmxncyA9IDA7CQkJLyogRmxhZ3MgZm9yIGNtZmxkKCkgKi8KLWludCBjbWt3Zmxn cyA9IDA7CQkJLyogRmxhZ3MgZnJvbSBsYXN0IGtleXdvcmQgcGFyc2UgKi8KLXN0YXRpYyBpbnQg bm9tc2cgPSAwOwotc3RhdGljIGludCBibG9ja2x2bCA9IDA7CQkvKiBCbG9jayBuZXN0aW5nIGxl dmVsICovCi1zdGF0aWMgaW50IGxpbmViZWdpbiA9IDA7CQkvKiBGbGFnIGZvciBhdCBzdGFydCBv ZiBhIGxpbmUgKi8KLXN0YXRpYyBpbnQgcXVvdGluZyA9IDE7CQkJLyogUXVvdGluZyBpcyBhbGxv d2VkICovCi1zdGF0aWMgaW50IHN3YXJnID0gMDsJCQkvKiBQYXJzaW5nIGEgc3dpdGNoIGFyZ3Vt ZW50ICovCi1zdGF0aWMgaW50IHhjbWZkYiA9IDA7CQkJLyogRmxhZyBmb3IgcGFyc2luZyBjaGFp bmVkIGZkYnMuLi4gKi8KLXN0YXRpYyBpbnQgY2hzcmMgPSAwOwkJCS8qIFNvdXJjZSBvZiBjaGFy YWN0ZXIsIDEgPSB0dHkgKi8KLXN0YXRpYyBpbnQgbmV3Y21kID0gMDsJCQkvKiBTZWUgYWRkY21k KCkgKi8KLQotI2lmZGVmIEJTX0RJUlNFUAotc3RhdGljIGludCBkaXJuYW1mbGcgPSAwOwotI2Vu ZGlmIC8qIEJTX0RJUlNFUCAqLwotCi0vKgotTW9kZWxlZCBhZnRlciB0aGUgREVDU1lTVEVNLTIw IGNvbW1hbmQgcGFyc2VyICh0aGUgQ09NTkQgSlNZUyksIFJJUC4gRmVhdHVyZXM6Ci0KLSAuIHBh cnNlcyBhbmQgdmVyaWZpZXMga2V5d29yZHMsIGZpbGVuYW1lcywgdGV4dCBzdHJpbmdzLCBudW1i ZXJzLCBvdGhlciBkYXRhCi0gLiBkaXNwbGF5cyBhcHByb3ByaWF0ZSBtZW51IG9yIGhlbHAgbWVz c2FnZSB3aGVuIHVzZXIgdHlwZXMgIj8iCi0gLiBkb2VzIGtleXdvcmQgYW5kIGZpbGVuYW1lIGNv bXBsZXRpb24gd2hlbiB1c2VyIHR5cGVzIEVTQyBvciBUQUIKLSAuIGRvZXMgcGFydGlhbCBrZXl3 b3JkIGFuZCBmaWxlbmFtZSBjb21wbGV0aW9uCi0gLiBhY2NlcHRzIGFueSB1bmlxdWUgYWJicmV2 aWF0aW9uIGZvciBhIGtleXdvcmQKLSAuIGFsbG93cyBrZXl3b3JkcyB0byBoYXZlIGF0dHJpYnV0 ZXMsIGxpa2UgImludmlzaWJsZSIgYW5kICJhYmJyZXZpYXRpb24iCi0gLiBjYW4gc3VwcGx5IGRl ZmF1bHRzIGZvciBmaWVsZHMgb21pdHRlZCBieSB1c2VyCi0gLiBwcm92aWRlcyBjb21tYW5kIHJl dHJ5IGFuZCByZWNhbGwKLSAuIHByb3ZpZGVzIGNoYXJhY3Rlciwgd29yZCwgYW5kIGxpbmUgZGVs ZXRpb24gKGJ1dCBvbmx5IGZyb20gdGhlIGVuZCkKLSAuIGFjY2VwdHMgaW5wdXQgZnJvbSBrZXli b2FyZCwgY29tbWFuZCBmaWxlcywgbWFjcm9zLCBvciByZWRpcmVjdGVkIHN0ZGluCi0gLiBhbGxv d3MgZm9yIGZ1bGwgb3IgaGFsZiBkdXBsZXggb3BlcmF0aW9uLCBjaGFyYWN0ZXIgb3IgbGluZSBp bnB1dAotIC4gYWxsb3dzIFwtZXNjYXBlcyBmb3Igc3BlY2lhbCBjaGFyYWN0ZXJzCi0gLiBhbGxv d3Mgc3BlY2lmaWNhdGlvbiBvZiBhIHVzZXIgZXhpdCB0byBleHBhbmQgdmFyaWFibGVzLCBldGMu Ci0gLiBzZXR0YWJsZSBwcm9tcHQsIHByb3RlY3RlZCBmcm9tIGRlbGV0aW9uLCBkeW5hbWljYWxs eSByZS1ldmFsdWF0ZWQgZWFjaCB0aW1lCi0gLiBhbGxvd3MgY2hhaW5lZCBwYXJzZSBmdW5jdGlv bnMuCi0KLUZ1bmN0aW9uczoKLSBjbXNldHAgLSBTZXQgcHJvbXB0IChjbXByb20gaXMgcHJvbXB0 IHN0cmluZykKLSBjbXNhdnAgLSBTYXZlIGN1cnJlbnQgcHJvbXB0Ci0gY21nZXRwID0gR2V0IGN1 cnJlbnQgcHJvbXB0Ci0gcHJvbXB0IC0gSXNzdWUgcHJvbXB0Ci0gY21pbmkgIC0gQ2xlYXIgdGhl IGNvbW1hbmQgYnVmZmVyIChiZWZvcmUgcGFyc2luZyBhIG5ldyBjb21tYW5kKQotIGNtcmVzICAt IFJlc2V0IGNvbW1hbmQgYnVmZmVyIHBvaW50ZXJzIChiZWZvcmUgcmVwYXJzaW5nKQotIGNta2V5 ICAtIFBhcnNlIGEga2V5d29yZCBvciB0b2tlbiAoYWxzbyBjbWtleTIpCi0gY21zd2kgIC0gUGFy c2UgYSBzd2l0Y2gKLSBjbW51bSAgLSBQYXJzZSBhIG51bWJlcgotIGNtaWZpICAtIFBhcnNlIGFu IGlucHV0IGZpbGUgbmFtZQotIGNtb2ZpICAtIFBhcnNlIGFuIG91dHB1dCBmaWxlIG5hbWUgKGFs c28gY21pZmlwLCBjbWlmaTIsIC4uLikKLSBjbWRpciAgLSBQYXJzZSBhIGRpcmVjdG9yeSBuYW1l IChhbHNvIGNtZGlycCkKLSBjbWZsZCAgLSBQYXJzZSBhbiBhcmJpdHJhcnkgZmllbGQKLSBjbXR4 dCAgLSBQYXJzZSBhIHRleHQgc3RyaW5nCi0gY21kYXRlIC0gUGFyc2UgYSBkYXRlLXRpbWUgc3Ry aW5nCi0gY21jZm0gIC0gUGFyc2UgY29tbWFuZCBjb25maXJtYXRpb24gKGVuZCBvZiBsaW5lKQot IGNtZmRiICAtIFBhcnNlIGFueSBvZiBhIGxpc3Qgb2YgdGhlIGZvcmVnb2luZyAoY2hhaW5lZCBw YXJzZSBmdW5jdGlvbnMpCi0KLVJldHVybiBjb2RlczoKLSAtOTogbGlrZSAtMiBleGNlcHQgdGhp cyBtb2R1bGUgYWxyZWFkeSBwcmludGVkIHRoZSBlcnJvciBtZXNzYWdlCi0gLTM6IG5vIGlucHV0 IHByb3ZpZGVkIHdoZW4gcmVxdWlyZWQKLSAtMjogaW5wdXQgd2FzIGludmFsaWQgKGUuZy4gbm90 IGEgbnVtYmVyIHdoZW4gYSBudW1iZXIgd2FzIHJlcXVpcmVkKQotIC0xOiByZXBhcnNlIHJlcXVp cmVkICh1c2VyIGRlbGV0ZWQgaW50byBhIHByZWNlZGluZyBmaWVsZCkKLSAgMCBvciBncmVhdGVy OiBzdWNjZXNzCi1TZWUgaW5kaXZpZHVhbCBmdW5jdGlvbnMgZm9yIGdyZWF0ZXIgZGV0YWlsLgot Ci1CZWZvcmUgdXNpbmcgdGhlc2Ugcm91dGluZXMsIHRoZSBjYWxsZXIgc2hvdWxkICNpbmNsdWRl ICJja3VjbWQuaCIgYW5kIHNldCB0aGUKLXByb2dyYW0ncyBwcm9tcHQgYnkgY2FsbGluZyBjbXNl dHAoKS4gIElmIHRoZSBmaWxlIHBhcnNpbmcgZnVuY3Rpb25zIGNtaWZpLAotY21vZmksIG9yIGNt ZGlyIGFyZSB0byBiZSB1c2VkLCB0aGlzIG1vZHVsZSBtdXN0IGJlIGxpbmtlZCB3aXRoIGEgY2s/ ZmlvIGZpbGUKLXN5c3RlbSBzdXBwb3J0IG1vZHVsZSBmb3IgdGhlIGFwcHJvcHJpYXRlIHN5c3Rl bSwgZS5nLiBja3VmaW8gZm9yIFVuaXguICBJZgotdGhlIGNhbGxlciBwdXRzIHRoZSB0ZXJtaW5h bCBpbiBjaGFyYWN0ZXIgd2FrZXVwICgiY2JyZWFrIikgbW9kZSB3aXRoIG5vIGVjaG8sCi10aGVu IHRoZXNlIGZ1bmN0aW9ucyB3aWxsIHByb3ZpZGUgbGluZSBlZGl0aW5nIC0tIGNoYXJhY3Rlciwg d29yZCwgYW5kIGxpbmUKLWRlbGV0aW9uLCBhcyB3ZWxsIGFzIGtleXdvcmQgYW5kIGZpbGVuYW1l IGNvbXBsZXRpb24gdXBvbiBFU0MgYW5kIGhlbHAKLXN0cmluZ3MsIGtleXdvcmQsIG9yIGZpbGUg bWVudXMgdXBvbiAnPycuICBJZiB0aGUgY2FsbGVyIHB1dHMgdGhlIHRlcm1pbmFsCi1pbnRvIGNo YXJhY3RlciB3YWtldXAvbm9lY2hvIG1vZGUsIGNhcmUgc2hvdWxkIGJlIHRha2VuIHRvIHJlc3Rv cmUgaXQgYmVmb3JlCi1leGl0IGZyb20gb3IgaW50ZXJydXB0aW9uIG9mIHRoZSBwcm9ncmFtLiAg SWYgdGhlIGNoYXJhY3RlciB3YWtldXAgbW9kZSBpcyBub3QKLXNldCwgdGhlIHN5c3RlbSdzIG93 biBsaW5lIGVkaXRvciBtYXkgYmUgdXNlZC4KLQotTk9URTogQ29udHJhcnkgdG8gZXhwZWN0YXRp b25zLCBtYW55ICNpZmRlZidzIGhhdmUgYmVlbiBhZGRlZCB0byB0aGlzIG1vZHVsZS4KLUFueSBv cGVyYXRpb24gcmVxdWlyaW5nIGFuICNpZmRlZiAobGlrZSBjbGVhciBzY3JlZW4sIGdldCBjaGFy YWN0ZXIgZnJvbQota2V5Ym9hcmQsIGVyYXNlIGNoYXJhY3RlciBmcm9tIHNjcmVlbiwgZXRjKSBz aG91bGQgZXZlbnR1YWxseSBiZSB0dXJuZWQgaW50byBhCi1jYWxsIHRvIGEgZnVuY3Rpb24gdGhh dCBpcyBkZWZpbmVkIGluIGNrP3Rpby5jLCBidXQgdGhlbiBhbGwgdGhlIGNrP3Rpby5jCi1tb2R1 bGVzIHdvdWxkIGhhdmUgdG8gYmUgY2hhbmdlZC4uLgotKi8KLQotLyogSW5jbHVkZXMgKi8KLQot I2luY2x1ZGUgImNrY2tlci5oIgotI2luY2x1ZGUgImNrY2FzYy5oIgkJCS8qIEFTQ0lJIGNoYXJh Y3RlciBzeW1ib2xzICovCi0jaW5jbHVkZSAiY2t1Y21kLmgiICAgICAgICAgICAgICAgICAgICAg LyogQ29tbWFuZCBwYXJzaW5nIGRlZmluaXRpb25zICovCi0KLSNpZmRlZiBPU0YxMwotI2lmZGVm IENLX0FOU0lDCi0jaWZkZWYgX05PX1BST1RPCi0jdW5kZWYgX05PX1BST1RPCi0jZW5kaWYgLyog X05PX1BST1RPICovCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSNlbmRpZiAvKiBPU0YxMyAqLwot Ci0jaWZuZGVmIEhQVVhQUkU2NQotI2luY2x1ZGUgPGVycm5vLmg+CQkJLyogRXJyb3IgbnVtYmVy IHN5bWJvbHMgKi8KLSNlbHNlCi0jaWZuZGVmIEVSUk5PX0lOQ0xVREVECi0jaW5jbHVkZSA8ZXJy bm8uaD4JCQkvKiBFcnJvciBudW1iZXIgc3ltYm9scyAqLwotI2VuZGlmCS8qIEVSUk5PX0lOQ0xV REVEICovCi0jZW5kaWYJLyogSFBVWFBSRTY1ICovCi0KLSNpZmRlZiBPUzIKLSNpZm5kZWYgTlQK LSNkZWZpbmUgSU5DTF9OT1BNCi0jZGVmaW5lIElOQ0xfVklPCQkJLyogTmVlZGVkIGZvciBja29j b24uaCAqLwotI2luY2x1ZGUgPG9zMi5oPgotI3VuZGVmIENPTU1FTlQKLSNlbHNlCi0jZGVmaW5l IEFQSVJFVCBVTE9ORwotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNlbmRpZiAvKiBOVCAqLwotI2lu Y2x1ZGUgImNrb2Nvbi5oIgotI2luY2x1ZGUgPGlvLmg+Ci0jZW5kaWYgLyogT1MyICovCi0KLSNp ZmRlZiBPU0sKLSNkZWZpbmUgY2MgY2NvdW50CQkJLyogT1MtOS82OEsgY29tcGlsZXIgYnVnICov Ci0jZW5kaWYgLyogT1NLICovCi0KLSNpZmRlZiBHRU1ET1MJCQkJLyogQXRhcmkgU1QgKi8KLSNp ZmRlZiBwdXRjaGFyCi0jdW5kZWYgcHV0Y2hhcgotI2VuZGlmIC8qIHB1dGNoYXIgKi8KLSNkZWZp bmUgcHV0Y2hhcih4KSBjb25vYyh4KQotI2VuZGlmIC8qIEdFTURPUyAqLwotCi0jaWZkZWYgQ0tf QVVUT0RMCi1leHRlcm4gaW50IGNtZGFkbCwganVzdG9uZTsKLSNlbmRpZiAvKiBDS19BVVRPREwg Ki8KLQotZXh0ZXJuIGludCB0aW1lbGltaXQsIG56eG9wdHMsIG5vcHVzaCwgbm9sb2NhbCwgeGNt ZHNyYywga2VlcGFsbGNoYXJzOwotCi0jaWZkZWYgQ0tTWVNMT0cKLSNpZmRlZiBVTklYCi0jaWZk ZWYgQ0tYUFJJTlRGCQkJLyogT3VyIHByaW50ZiBtYWNybyBjb25mbGljdHMgd2l0aCAqLwotI3Vu ZGVmIHByaW50ZgkJCQkvKiB1c2Ugb2YgInByaW50ZiIgaW4gc3lzbG9nLmggKi8KLSNlbmRpZiAv KiBDS1hQUklOVEYgKi8KLSNpZmRlZiBSVEFJWAotI2luY2x1ZGUgPHN5cy9zeXNsb2cuaD4KLSNl bHNlICAvKiBSVEFJWCAqLwotI2luY2x1ZGUgPHN5c2xvZy5oPgotI2VuZGlmIC8qIFJUQUlYICov Ci0jaWZkZWYgQ0tYUFJJTlRGCi0jZGVmaW5lIHByaW50ZiBja3hwcmludGYKLSNlbmRpZiAvKiBD S1hQUklOVEYgKi8KLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLQot LyogTG9jYWwgdmFyaWFibGVzICovCi0KLXN0YXRpYwotaW50IHBzZXRmID0gMCwgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEZsYWcgdGhhdCBwcm9tcHQgaGFzIGJlZW4gc2V0ICovCi0gICAg Y2MgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVyIGNvdW50ICov Ci0gICAgZHB4ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRHVwbGV4ICgwID0g ZnVsbCkgKi8KLSAgICBpbndvcmQgPSAwOwkJCQkvKiBJbiB0aGUgbWlkZGxlIG9mIGdldHRpbmcg YSB3b3JkICovCi0KLWNoYXIgKmRmcHJvbSA9ICJDb21tYW5kPyAiOyAgICAgICAgICAgICAvKiBE ZWZhdWx0IHByb21wdCAqLwotI2lmbmRlZiBOT0xBU1RGSUxFCi1jaGFyICpsYXN0ZmlsZSA9IE5V TEw7CQkJLyogTGFzdCBmaWxlc3BlYyAqLwotc3RhdGljIGNoYXIgKnRtcGxhc3RmaWxlID0gTlVM TDsJLyogTGFzdCBmaWxlc3BlYyBjYW5kaWRhdGUgKi8KLSNlbmRpZgkvKiBOT0xBU1RGSUxFICov Ci0KLWludCBjbWZsZ3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIGZs YWdzICovCi1pbnQgY21mc2F2OwkJCQkvKiBBIHNhdmVkIHZlcnNpb24gb2YgdGhlbSAqLwotCi1z dGF0aWMgY2hhciBwdXNoYyA9IE5VTDsKLXN0YXRpYyBjaGFyIGJya2NoYXIgPSBOVUw7Ci0KLSNk ZWZpbmUgQ01ERUZBVUxUIDEwMjMKLXN0YXRpYyBjaGFyIGNtZGVmYXVsdFtDTURFRkFVTFQrMV07 Ci0KLSNpZmRlZiBEQ01EQlVGCi1jaGFyICpjbWRidWYgPSBOVUxMOwkJCS8qIENvbW1hbmQgYnVm ZmVyICovCi1jaGFyICpzYXZidWYgPSBOVUxMOwkJCS8qIEJ1ZmZlciB0byBzYXZlIGNvcHkgb2Yg Y29tbWFuZCAqLwotY2hhciAqYXRtYnVmID0gTlVMTDsJCQkvKiBBdG9tIGJ1ZmZlciAtIGZvciBj dXJyZW50IGZpZWxkICovCi1jaGFyICphdHhidWYgPSBOVUxMOwkJCS8qIEZvciBleHBhbmRpbmcg dGhlIGF0b20gYnVmZmVyICovCi1jaGFyICpwcmV2Y21kID0gTlVMTDsKLXN0YXRpYyBjaGFyICph dHlidWYgPSBOVUxMOwkJLyogRm9yIGNvcHlpbmcgYXRvbSBidWZmZXIgKi8KLXN0YXRpYyBjaGFy ICpmaWxidWYgPSBOVUxMOwkJLyogRmlsZSBuYW1lIGJ1ZmZlciAqLwotc3RhdGljIGNoYXIgKmNt cHJvbSA9IE5VTEw7CQkvKiBQcm9ncmFtJ3MgcHJvbXB0ICovCi1zdGF0aWMgY2hhciAqY21wcnh4 ID0gTlVMTDsJCS8qIFByb2dyYW0ncyBwcm9tcHQsIHVuZXZhbHVhdGVkICovCi0KLSNpZmRlZiBD S19SRUNBTEwKLS8qCi0gIENvbW1hbmQgcmVjYWxsIGlzIGF2YWlsYWJsZSBvbmx5IGlmIHdlIGNh biBtYWtlIHByb2ZsaWdhdGUgdXNlIG9mIG1hbGxvYygpLgotKi8KLSNkZWZpbmUgUl9NQVggMTAJ CQkvKiBIb3cgbWFueSBjb21tYW5kcyB0byBzYXZlICovCi1pbnQgY21fcmVjYWxsID0gUl9NQVg7 CQkJLyogU2l6ZSBvZiBjb21tYW5kIHJlY2FsbCBidWZmZXIgKi8KLWludCBvbl9yZWNhbGwgPSAx OwkJCS8qIFJlY2FsbCBmZWF0dXJlIGlzIE9OICovCi1zdGF0aWMgaW50IG5vX3JlY2FsbCA9IDA7 CQkvKiBSZWNhbGwgT0ZGIGZvciB0aGlzIGNtZCBvbmx5ICovCi1zdGF0aWMgaW50IGZvcmNlX2Fk ZCA9IDA7CQkvKiBGb3JjZSBjbWQgaW50byByZWNhbGwgYnVmZmVyICovCi1zdGF0aWMgaW50IGxh c3RfcmVjYWxsID0gLTE7CQkvKiBMYXN0IHJlY2FsbC1yZWxhdGVkIGFjdGlvbiAqLwotLyoKLSAg LTEgPSBub25lCi0gICAwID0gQ1IgKGEgY29tbWFuZCB3YXMgZW50ZXJlZCkKLSAgIDEgPSBVcAot ICAgMiA9IERvd24KLSovCi1pbnQgaW5fcmVjYWxsID0gMDsJCQkvKiBSZWNhbGwgYnVmZmVycyBh cmUgaW5pdCdkICovCi1zdGF0aWMgaW50Ci0gIGN1cnJlbnQgPSAtMSwJCQkJLyogUG9pbnRlciB0 byBjdXJyZW50IGNvbW1hbmQgKi8KLSAgcmxhc3QgPSAtMTsJCQkJLyogSW5kZXggb2YgbGFzdCBj b21tYW5kIGluIGJ1ZmZlciAqLwotc3RhdGljIGNoYXIgKipyZWNhbGwgPSBOVUxMOwkJLyogQXJy YXkgb2YgcmVjYWxsIGJ1ZmZlciBwb2ludGVycyAqLwotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwot I2Vsc2UgIC8qICFEQ01EQlVGICovCi1jaGFyIGNtZGJ1ZltDTURCTCs0XTsgICAgICAgICAgICAg ICAgICAgLyogQ29tbWFuZCBidWZmZXIgKi8KLWNoYXIgc2F2YnVmW0NNREJMKzRdOyAgICAgICAg ICAgICAgICAgICAvKiBCdWZmZXIgdG8gc2F2ZSBjb3B5IG9mIGNvbW1hbmQgKi8KLWNoYXIgYXRt YnVmW0FUTUJMKzRdOyAgICAgICAgICAgICAgICAgICAvKiBBdG9tIGJ1ZmZlciAqLwotY2hhciBh dHhidWZbQ01EQkwrNF07ICAgICAgICAgICAgICAgICAgIC8qIEZvciBleHBhbmRpbmcgdGhlIGF0 b20gYnVmZmVyICovCi1jaGFyIHByZXZjbWRbQ01EQkwrNF07CQkJLyogRm9yIGRpc3BsYXlpbmcg dGhlIGxhc3QgY29tbWFuZCAqLwotc3RhdGljIGNoYXIgYXR5YnVmW0FUTUJMKzRdOwkJLyogRm9y IGNvcHlpbmcgYXRvbSBidWZmZXIgKi8KLXN0YXRpYyBjaGFyIGZpbGJ1ZltBVE1CTCs0XTsJCS8q IEZpbGUgbmFtZSBidWZmZXIgKi8KLXN0YXRpYyBjaGFyIGNtcHJvbVtQUk9NUFRMKzFdOwkJLyog UHJvZ3JhbSdzIHByb21wdCAqLwotc3RhdGljIGNoYXIgY21wcnh4W1BST01QVEwrMV07CQkvKiBQ cm9ncmFtJ3MgcHJvbXB0LCB1bmV2YWx1YXRlZCAqLwotI2VuZGlmIC8qIERDTURCVUYgKi8KLQot LyogQ29tbWFuZCBidWZmZXIgcG9pbnRlcnMgKi8KLQotI2RlZmluZSBQUFZMRU4gVk5BTUwJCQkv KiAyMDA4MDMwNSBXb2xmcmFtIFNhbmcgKHdhcyAyNCkgKi8KLWNoYXIgcHB2bmFtYnVmW1BQVkxF TisxXSA9IHsgTlVMLCBOVUwgfTsKLQotY2hhciAqIGNtYnB0ciA9IE5VTEw7CQkJLyogQ3VycmVu dCBwb3NpdGlvbiAoZm9yIGV4cG9ydCkgKi8KLQotc3RhdGljIGNoYXIgKmJwLCAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEN1cnJlbnQgY29tbWFuZCBidWZmZXIgcG9zaXRpb24gKi8KLSAgICAq cHAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCBvZiBjdXJyZW50IGZp ZWxkICovCi0gICAgKm5wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3RhcnQg b2YgbmV4dCBmaWVsZCAqLwotCi1zdGF0aWMgaW50IHVuZ3csCQkJLyogRm9yIHVuZ2V0dGluZyB3 b3JkcyAqLwotICAgIGF0eG47CQkJCS8qIEV4cGFuc2lvbiBidWZmZXIgKGF0eGJ1ZikgbGVuZ3Ro ICovCi0KLSNpZmRlZiBPUzIKLWV4dGVybiBpbnQgd2lkZXJlc3VsdDsKLSNlbmRpZiAvKiBPUzIg Ki8KLQotZXh0ZXJuIGludCBjbWRfY29scywgY21kX3Jvd3MsIGxvY2FsLCBxdWlldDsKLQotI2lm ZGVmIFROQ09ERQotI2lmZGVmIElBQwotI3VuZGVmIElBQwotI2VuZGlmIC8qIElBQyAqLwotI2Rl ZmluZSBJQUMgMjU1Ci0jZW5kaWYgLyogVE5DT0RFICovCi0KLV9QUk9UT1RZUCggc3RhdGljIGlu dCBndHdvcmQsIChpbnQpICk7Ci1fUFJPVE9UWVAoIHN0YXRpYyBpbnQgYWRkYnVmLCAoY2hhciAq KSApOwotX1BST1RPVFlQKCBzdGF0aWMgaW50IHNldGF0bSwgKGNoYXIgKiwgaW50KSApOwotX1BS T1RPVFlQKCBzdGF0aWMgVk9JRCBjbWRuZXdsLCAoY2hhcikgKTsKLV9QUk9UT1RZUCggc3RhdGlj IFZPSUQgY21kY2hhcmRlbCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIHN0YXRpYyBWT0lEIGNtZGVj aG8sIChjaGFyLCBpbnQpICk7Ci1fUFJPVE9UWVAoIHN0YXRpYyBpbnQgdGVzdCwgKGludCwgaW50 KSApOwotI2lmZGVmIEdFTURPUwotX1BST1RPVFlQKCBleHRlcm4gY2hhciAqc3RyY2hyLCAoY2hh ciAqLCBpbnQpICk7Ci0jZW5kaWYgLyogR0VNRE9TICovCi0KLWV4dGVybiBjaGFyICogZGZ0dHk7 Ci0KLS8qIFRoZSBmb2xsb3dpbmcgYXJlIGZvciB1c2Ugd2l0aCBjaGFpbmVkIEZEQidzICovCi0K LXN0YXRpYyBpbnQgY3JmbGFnID0gMDsJCQkvKiBDYXJyaWFnZSByZXR1cm4gd2FzIHR5cGVkICov Ci1zdGF0aWMgaW50IHFtZmxhZyA9IDA7CQkJLyogUXVlc3Rpb24gbWFyayB3YXMgdHlwZWQgKi8K LXN0YXRpYyBpbnQgZXNmbGFnID0gMDsJCQkvKiBFc2NhcGUgd2FzIHR5cGVkICovCi0KLS8qIERp cmVjdG9yeSBzZXBhcmF0b3IgKi8KLQotI2lmZGVmIEdFTURPUwotc3RhdGljIGNoYXIgZGlyc2Vw ID0gJ1xcJzsKLSNlbHNlCi0jaWZkZWYgZGF0YWdlbmVyYWwKLXN0YXRpYyBjaGFyIGRpcnNlcCA9 ICc6JzsKLSNlbHNlCi0jaWZkZWYgTUFDCi1zdGF0aWMgY2hhciBkaXJzZXAgPSAnOic7Ci0jZWxz ZQotI2lmZGVmIFZNUwotc3RhdGljIGNoYXIgZGlyc2VwID0gJy4nOwotI2Vsc2UKLSNpZmRlZiBT VFJBVFVTCi1zdGF0aWMgY2hhciBkaXJzZXAgPSAnPic7Ci0jZWxzZQotc3RhdGljIGNoYXIgZGly c2VwID0gJy8nOwkJLyogVU5JWCwgT1MvMiwgT1MtOSwgQW1pZ2EsIGV0Yy4gKi8KLSNlbmRpZiAv KiBTVFJBVFVTICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogTUFDICovCi0jZW5kaWYg LyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBHRU1ET1MgKi8KLQotLyogIEggQSBTIE4gTyBQ IEEgVCBIICAqLwotCi0vKiAgUmV0dXJucyAwIGlmIGZpbGVzcGVjIHMgaW5jbHVkZXMgYW55IHBh dGggc2VnbWVudHM7IDEgaWYgaXQgZG9lc24ndC4gKi8KLQotaW50Ci1oYXNub3BhdGgocykgY2hh ciAqIHM7IHsKLSAgICBjaGFyICogcCA9IE5VTEw7Ci0gICAgaWYgKCFzKSByZXR1cm4oMCk7Ci0g ICAgaWYgKCEqcykgcmV0dXJuKDApOwotICAgIHpzdHJpcChzLCZwKTsKLSAgICByZXR1cm4oY2tz dHJjbXAocyxwLENLTUFYUEFUSCxmaWxlY2FzZSkgPT0gMCA/IDEgOiAwKTsKLX0KLQotLyogIEMg SyBTIFAgUiBFIEEgRCAgLS0gIFByaW50IHN0cmluZyBkb3VibGUtc3BhY2VkICAqLwotCi1zdGF0 aWMgY2hhciAqIHNwcnB0ciA9IE5VTEw7Ci0KLXN0YXRpYyBjaGFyICoKLWNrc3ByZWFkKHMpIGNo YXIgKiBzOyB7Ci0gICAgaW50IG4gPSAwOwotICAgIGNoYXIgKiBwOwotICAgIG4gPSBzdHJsZW4o cyk7Ci0gICAgaWYgKHNwcnB0cikKLSAgICAgIGZyZWUoc3BycHRyKTsKLSAgICBzcHJwdHIgPSBt YWxsb2MobiArIG4gKyAzKTsKLSAgICBpZiAoc3BycHRyKSB7Ci0JcCA9IHNwcnB0cjsKLQl3aGls ZSAoKnMpIHsKLQkgICAgKnArKyA9ICpzKys7Ci0JICAgICpwKysgPSBTUDsKLQl9Ci0JKnAgPSBO VUw7Ci0gICAgfQotICAgIHJldHVybihzcHJwdHIgPyBzcHJwdHIgOiAiIik7Ci19Ci0KLS8qICBU IEUgUyBUICAtLSAgQml0IHRlc3QgICovCi0KLXN0YXRpYyBpbnQKLXRlc3QoeCxtKSBpbnQgeCwg bTsgeyAvKiAgUmV0dXJucyAxIGlmIGFueSBiaXRzIGZyb20gbSBhcmUgb24gaW4geCwgZWxzZSAw ICAqLwotICAgIHJldHVybigoeCAmIG0pID8gMSA6IDApOwotfQotCi0vKiAgSyBXIEQgSCBFIEwg UCAgLS0gIEdpdmVuIGEga2V5d29yZCB0YWJsZSwgcHJpbnQga2V5d29yZHMgaW4gY29sdW1ucy4g ICovCi0vKgotICBDYWxsIHdpdGg6Ci0gICAgcyAgICAgLSBrZXl3b3JkIHRhYmxlCi0gICAgbiAg ICAgLSBudW1iZXIgb2YgZW50cmllcwotICAgIHBhdCAgIC0gcGF0dGVybiAobGVmdCBzdWJzdHJp bmcpIHRoYXQgbXVzdCBtYXRjaCBmb3IgZWFjaCBrZXl3b3JkCi0gICAgcHJlICAgLSBwcmVmaXgg dG8gYWRkIHRvIGVhY2gga2V5d29yZAotICAgIHBvc3QgIC0gc3VmZml4IHRvIGFkZCB0byBlYWNo IGtleXdvcmQKLSAgICBvZmYgICAtIG9mZnNldCBvbiBmaXJzdCBzY3JlZW5mdWwsIGFsbG93aW5n IHJvb20gZm9yIGludHJvZHVjdG9yeSB0ZXh0Ci0gICAgeGhscCAgLSAxIHRvIHByaW50IGFueSBD TV9JTlYga2V5d29yZHMgdGhhdCBhcmUgbm90IGFsc28gYWJicmV2aWF0aW9ucy4KLSAgICAgICAg ICAgIDIgdG8gcHJpbnQgQ01fSU5WIGtleXdvcmRzIGlmIENNX0hMUCBhbHNvIHNldAotICAgICAg ICAgICAgNCBpZiBpdCdzIGEgc3dpdGNoIHRhYmxlICh0byBzaG93ICc6JyBpZiBDTV9BUkcpCi0K LSAgQXJyYW5nZXMga2V5d29yZHMgaW4gY29sdW1ucyB3aXRoIHdpZHRoIGJhc2VkIG9uIGxvbmdl c3Qga2V5d29yZC4KLSAgRG9lcyAibW9yZT8iIHByb21wdGluZyBhdCBlbmQgb2Ygc2NyZWVuLgot ICBVc2VzIGdsb2JhbCBjbWRfcm93cyBhbmQgY21kX2NvbHMgZm9yIHNjcmVlbiBzaXplLgotKi8K LVZPSUQKLWt3ZGhlbHAocyxuLHBhdCxwcmUscG9zdCxvZmYseGhscCkKLSAgICBzdHJ1Y3Qga2V5 dGFiIHNbXTsgaW50IG4sIG9mZiwgeGhscDsgY2hhciAqcGF0LCAqcHJlLCAqcG9zdDsKLS8qIGt3 ZGhlbHAgKi8gewotCi0gICAgaW50IHdpZHRoID0gMDsKLSAgICBpbnQgY2M7Ci0gICAgaW50IGNv bHMsIGhlaWdodCwgaSwgaiwgaywgbGMsIG4yID0gMDsKLSAgICBjaGFyICpiID0gTlVMTCwgKnAs ICpxOwotICAgIGNoYXIgKnBhLCAqcHg7Ci0gICAgY2hhciAqKnMyID0gTlVMTDsKLSAgICBjaGFy ICp0bXBidWYgPSBOVUxMOwotCi0gICAgY2MgPSBzdHJsZW4ocGF0KTsKLQotICAgIGlmICghcykg cmV0dXJuOwkJCS8qIE5vdGhpbmcgdG8gZG8gKi8KLSAgICBpZiAobiA8IDEpIHJldHVybjsJCQkv KiBEaXR0byAqLwotICAgIGlmIChvZmYgPCAwKSBvZmYgPSAwOwkJLyogT2Zmc2V0IGZvciBmaXJz dCBwYWdlICovCi0gICAgaWYgKCFwcmUpIHByZSA9ICIiOwkJCS8qIEhhbmRsZSBudWxsIHN0cmlu ZyBwb2ludGVycyAqLwotICAgIGlmICghcG9zdCkgcG9zdCA9ICIiOwotICAgIGxjID0gb2ZmOwkJ CQkvKiBTY3JlZW4tbGluZSBjb3VudGVyICovCi0KLSAgICBpZiAoeGhscCAmIDQpCQkJLyogRm9y IHN3aXRjaGVzICovCi0gICAgICB0bXBidWYgPSAoY2hhciAqKW1hbGxvYyhUTVBCVUZTSVorMSk7 Ci0KLSAgICBpZiAoKHMyID0gKGNoYXIgKiopIG1hbGxvYyhuICogc2l6ZW9mKGNoYXIgKikpKSkg ewotCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsJLyogRmluZCBsb25nZXN0IGtleXdvcmQgKi8K LQkgICAgczJbaV0gPSBOVUxMOwotCSAgICBpZiAoY2tzdHJjbXAoc1tpXS5rd2QscGF0LGNjLDAp KQotCSAgICAgIGNvbnRpbnVlOwotCi0JICAgIGlmIChzW2ldLmZsZ3MgJiBDTV9QU0gJLyogTk9Q VVNIIG9yIG5vcHVzaCBzY3JlZW5pbmcgKi8KLSNpZm5kZWYgTk9QVVNICi0JCSYmIG5vcHVzaAot I2VuZGlmIC8qIE5PUFVTSCAqLwotCQkpCi0JICAgICAgY29udGludWU7Ci0JICAgIGlmIChzW2ld LmZsZ3MgJiBDTV9MT0MJLyogTk9MT0NBTCBvciBub2xvY2FsIHNjcmVlbmluZyAqLwotI2lmbmRl ZiBOT0xPQ0FMCi0JCSYmIG5vbG9jYWwKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0JCSkKLQkgICAg ICBjb250aW51ZTsKLQotCSAgICBpZiAoc1tpXS5mbGdzICYgQ01fSU5WKSB7Ci0jaWZkZWYgQ09N TUVOVAotLyogVGhpcyBjb2RlIGRvZXMgbm90IHNob3cgaW52aXNpYmxlIGtleXdvcmRzIGF0IGFs bCBleGNlcHQgZm9yICJoZWxwID8iICovCi0vKiBhbmQgdGhlbiBvbmx5IGhlbHAgdG9waWNzIChD TV9ITFApIGluIHRoZSB0b3AtbGV2ZWwga2V5d29yZCBsaXN0LiAqLwotCi0JCWlmICgoeGhscCAm IDIpID09IDApCi0JCSAgY29udGludWU7Ci0JCWVsc2UgaWYgKChzW2ldLmZsZ3MgJiBDTV9ITFAp ID09IDApCi0JCSAgY29udGludWU7Ci0jZWxzZQotLyogVGhpcyBjb2RlIHNob3dzIGludmlzaWJs ZSBrZXl3b3JkcyB0aGF0IGFyZSBub3QgYWxzbyBhYmJyZXZpYXRpb25zIHdoZW4gKi8KLS8qID8g d2FzIHR5cGVkIEFGVEVSIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpZWxkIHNvIHRoZSB1c2VyIGNh biBmaW5kIG91dCAqLwotLyogd2hhdCB0aGV5IGFyZSBhbmQgKGZvciBleGFtcGxlKSB3aHkgY29t cGxldGlvbiBkb2Vzbid0IHdvcmsgYXQgdGhpcyBwb2ludCAqLwotCi0JCWlmIChzW2ldLmZsZ3Mg JiBDTV9BQlIpCi0JCSAgY29udGludWU7Ci0JCWVsc2UgaWYgKCh4aGxwICYgMykgPT0gMCkKLQkJ ICBjb250aW51ZTsKLQkJZWxzZSBpZiAoKHhobHAgJiAyKSAmJiAoKHNbaV0uZmxncyAmIENNX0hM UCkgPT0gMCkpCi0JCSAgY29udGludWU7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCSAgICB9Ci0J ICAgIGogPSBzdHJsZW4oc1tpXS5rd2QpOwotCSAgICBpZiAoISh4aGxwICYgNCkgfHwgIXRtcGJ1 ZikgeyAvKiBSZWd1bGFyIGtleXdvcmQgdGFibGUgKi8KLQkJczJbbjIrK10gPSBzW2ldLmt3ZDsJ LyogQ29weSBwb2ludGVycyB0byB2aXNpYmxlIG9uZXMgKi8KLQkgICAgfSBlbHNlIHsJCQkvKiBT d2l0Y2hlcyAqLwotCQlja21ha21zZyh0bXBidWYsCS8qIE1ha2UgYSBjb3B5IHRoYXQgc2hvd3Mg IjoiIGlmICovCi0JCQkgVE1QQlVGU0laLAkvKiB0aGUgc3dpdGNoIHRha2VzIGFuIGFyZ3VtZW50 LiAqLwotCQkJIHNbaV0ua3dkLAotCQkJIChzW2ldLmZsZ3MgJiBDTV9BUkcpID8gIjoiIDogIiIs Ci0JCQkgTlVMTCwKLQkJCSBOVUxMCi0JCQkgKTsKLQkJbWFrZXN0cigmKHMyW24yXSksdG1wYnVm KTsKLQkJaWYgKHNbaV0uZmxncyAmIENNX0FSRykgaisrOwotCQluMisrOwotCSAgICB9Ci0JICAg IGlmIChqID4gd2lkdGgpCi0JICAgICAgd2lkdGggPSBqOwotCX0KLQkvKiBDb2x1bW4gd2lkdGgg Ki8KLQluID0gbjI7Ci0gICAgfQotICAgIGlmIChzMiAmJiAoYiA9IChjaGFyICopIG1hbGxvYyhj bWRfY29scyArIDEpKSkgeyAvKiBNYWtlIGEgbGluZSBidWZmZXIgICAqLwotCWNoYXIgKiBieDsK LQlieCA9IGIgKyBjbWRfY29sczsKLQl3aWR0aCArPSAoaW50KXN0cmxlbihwcmUpICsgKGludClz dHJsZW4ocG9zdCkgKyAyOwotCWNvbHMgPSBjbWRfY29scyAvIHdpZHRoOwkvKiBIb3cgbWFueSBj b2x1bW5zPyAqLwotCWlmIChjb2xzIDwgMSkgY29scyA9IDE7Ci0JaGVpZ2h0ID0gbiAvIGNvbHM7 CQkvKiBIb3cgbG9uZyBpcyBlYWNoIGNvbHVtbj8gKi8KLQlpZiAobiAlIGNvbHMpIGhlaWdodCsr OwkJLyogQWRkIG9uZSBmb3IgcmVtYWluZGVyLCBpZiBhbnkgKi8KLQotCWZvciAoaSA9IDA7IGkg PCBoZWlnaHQ7IGkrKykgewkgICAgLyogTG9vcCBmb3IgZWFjaCByb3cgKi8KLQkgICAgZm9yIChq ID0gMDsgaiA8IGNtZF9jb2xzOyBqKyspICAvKiBGaXJzdCBmaWxsIHJvdyB3aXRoIGJsYW5rcyAq LwotCSAgICAgIGJbal0gPSBTUDsKLQkgICAgZm9yIChqID0gMDsgaiA8IGNvbHM7IGorKykgeyAg ICAvKiBMb29wIGZvciBlYWNoIGNvbHVtbiBpbiByb3cgKi8KLQkJayA9IGkgKyAoaiAqIGhlaWdo dCk7ICAgICAgIC8qIEluZGV4IG9mIG5leHQga2V5d29yZCAqLwotCQlpZiAoayA8IG4pIHsJCSAg ICAvKiBJbiByYW5nZT8gKi8KLQkJICAgIHBhID0gcHJlOwotCQkgICAgcHggPSBwb3N0OwotCQkg ICAgcCA9IHMyW2tdOwkJICAgIC8qIFBvaW50IHRvIHZlcmIgbmFtZSAqLwotCQkgICAgcSA9IGIg KyAoaiAqIHdpZHRoKSArIDE7IC8qIFdoZXJlIHRvIGNvcHkgaXQgdG8gKi8KLQkJICAgIHdoaWxl ICgocSA8IGJ4KSAmJiAoKnErKyA9ICpwYSsrKSkgOyAvKiBDb3B5IHByZWZpeCAqLwotCQkgICAg cS0tOwkJICAgICAgICAgICAgICAgICAvKiBCYWNrIHVwIG92ZXIgTlVMICovCi0JCSAgICB3aGls ZSAoKHEgPCBieCkgJiYgKCpxKysgPSAqcCsrKSkgOwkgLyogQ29weSBmaWxlbmFtZSAqLwotCQkg ICAgcS0tOwkJICAgICAgICAgICAgICAgICAvKiBCYWNrIHVwIG92ZXIgTlVMICovCi0JCSAgICB3 aGlsZSAoKHEgPCBieCkgJiYgKCpxKysgPSAqcHgrKykpIDsgLyogQ29weSBzdWZmaXggKi8KLQkJ ICAgIGlmIChqIDwgY29scyAtIDEpIHsKLQkJCXEtLTsKLQkJCSpxID0gU1A7CS8qIFJlcGxhY2Ug dGhlIHNwYWNlICovCi0JCSAgICB9Ci0JCX0KLQkgICAgfQotCSAgICBwID0gYiArIGNtZF9jb2xz IC0gMTsJLyogTGFzdCBjaGFyIGluIGxpbmUgKi8KLQkgICAgd2hpbGUgKCpwLS0gPT0gU1ApIDsJ LyogVHJpbSAqLwotCSAgICAqKHArMikgPSBOVUw7Ci0JICAgIHByaW50ZigiJXNcbiIsYik7CQkv KiBQcmludCB0aGUgbGluZSAqLwotCSAgICBpZiAoKytsYyA+IChjbWRfcm93cyAtIDIpKSB7IC8q IFNjcmVlbiBmdWxsPyAqLwotCQlpZiAoIWFza21vcmUoKSkJCS8qIERvIG1vcmUtcHJvbXB0aW5n Li4uICovCi0JCSAgZ290byB4a3dkaGVscDsKLQkJZWxzZQotCQkgIGxjID0gMDsKLQkgICAgfQot CX0KLQkvKiBwcmludGYoIlxuIik7ICovCQkvKiBCbGFuayBsaW5lIGF0IGVuZCBvZiByZXBvcnQg Ki8KLSAgICB9IGVsc2UgewkJCQkvKiBNYWxsb2MgZmFpbHVyZSwgbm8gY29sdW1ucyAqLwotCWZv ciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLQkgICAgaWYgKHNbaV0uZmxncyAmIENNX0lOVikJLyog VXNlIG9yaWdpbmFsIGtleXdvcmQgdGFibGUgKi8KLQkgICAgICBjb250aW51ZTsJCQkvKiBza2lw cGluZyBpbnZpc2libGUgZW50cmllcyAqLwotCSAgICBwcmludGYoIiVzJXMlc1xuIixwcmUsc1tp XS5rd2QscG9zdCk7Ci0JICAgIGlmICgrK2xjID4gKGNtZF9yb3dzIC0gMikpIHsgLyogU2NyZWVu IGZ1bGw/ICovCi0JCWlmICghYXNrbW9yZSgpKQkJLyogRG8gbW9yZS1wcm9tcHRpbmcuLi4gKi8K LQkJICBnb3RvIHhrd2RoZWxwOwotCQllbHNlCi0JCSAgbGMgPSAwOwotCSAgICB9Ci0JfQotICAg IH0KLSAgeGt3ZGhlbHA6Ci0gICAgaWYgKHhobHAgJiA0KSB7Ci0JaWYgKHRtcGJ1ZikgZnJlZSgo Y2hhciAqKXRtcGJ1Zik7Ci0JZm9yIChpID0gMDsgaSA8IG47IGkrKykKLQkgIGlmIChzMltpXSkg ZnJlZShzMltpXSk7Ci0gICAgfQotICAgIGlmIChzMikgZnJlZShzMik7CQkJLyogRnJlZSBhcnJh eSBjb3B5ICovCi0gICAgaWYgKGIpIGZyZWUoYik7CQkJLyogRnJlZSBsaW5lIGJ1ZmZlciAqLwot ICAgIHJldHVybjsKLX0KLQotLyogIFggRiBJIEwgSCBFIEwgUCAgLS0gIEdpdmVuIGEgZmlsZSBs aXN0LCBwcmludCBuYW1lcyBpbiBjb2x1bW5zLiAgKi8KLS8qCi0gIENhbGwgd2l0aDoKLSAgICBu ICAgICAtIG51bWJlciBvZiBlbnRyaWVzCi0gICAgcHJlICAgLSBwcmVmaXggdG8gYWRkIHRvIGVh Y2ggZmlsZW5hbWUKLSAgICBwb3N0ICAtIHN1ZmZpeCB0byBhZGQgdG8gZWFjaCBmaWxlbmFtZQot ICAgIG9mZiAgIC0gb2Zmc2V0IG9uIGZpcnN0IHNjcmVlbmZ1bCwgYWxsb3dpbmcgcm9vbSBmb3Ig aW50cm9kdWN0b3J5IHRleHQKLSAgICBjbWRpcmZsZyAtIDEgaWYgb25seSBkaXJlY3RvcnkgbmFt ZXMgc2hvdWxkIGJlIGxpc3RlZCwgMCB0byBsaXN0IGFsbCBmaWxlcwotICAgIGZzICAgIC0gY2Fs bCBmaWxlc2VsZWN0KCkgdG8gZGVjaWRlIHdoZXRoZXIgdG8gaW5jbHVkZSBlYWNoIGZpbGUuCi0g ICAgVGhlIHJlc3Qgb2YgdGhlIGFyZ3MgYXJlIHRoZSBzYW1lIGFzIGZvciBmaWxlc2VsZWN0KCku Ci0KLSAgQXJyYW5nZXMgZmlsZW5hbWVzIGluIGNvbHVtbnMgd2l0aCB3aWR0aCBiYXNlZCBvbiBs b25nZXN0IGZpbGVuYW1lLgotICBEb2VzICJtb3JlPyIgcHJvbXB0aW5nIGF0IGVuZCBvZiBzY3Jl ZW4uCi0gIFVzZXMgZ2xvYmFsIGNtZF9yb3dzIGFuZCBjbWRfY29scyBmb3Igc2NyZWVuIHNpemUu Ci0qLwotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwoteGZpbGhlbHAoCi0gICAgaW50IG4sIGNoYXIg KnByZSwgY2hhciAqcG9zdCwgaW50IG9mZiwgaW50IGNtZGlyZmxhZywKLSAgICBpbnQgZnMsIGNo YXIgKnNhLCBjaGFyICpzYiwgY2hhciAqc25hLCBjaGFyICpzbmIsCi0gICAgQ0tfT0ZGX1QgbWlu c2l6LCBDS19PRkZfVCBtYXhzaXosCi0gICAgaW50IG5idSwgaW50IG54bGlzdCwKLSAgICBjaGFy ICoqIHhsaXN0Ci0pCi0jZWxzZQoteGZpbGhlbHAobixwcmUscG9zdCxvZmYsY21kaXJmbGcsCi0J IGZzLHNhLHNiLHNuYSxzbmIsbWluc2l6LG1heHNpeixuYnUsbnhsaXN0LHhsaXN0KQotICAgIGlu dCBuLCBvZmY7IGNoYXIgKnByZSwgKnBvc3Q7IGludCBjbWRpcmZsZzsKLSAgICBpbnQgZnM7IGNo YXIgKnNhLCpzYiwqc25hLCpzbmI7IENLX09GRl9UIG1pbnNpeixtYXhzaXo7Ci0gICAgaW50IG5i dSxueGxpc3Q7IGNoYXIgKiogeGxpc3Q7Ci0jZW5kaWYJLyogQ0tfQU5TSUMgKi8KLSB7Ci0gICAg Y2hhciBmaWxidWZbQ0tNQVhQQVRIICsgMV07CQkvKiBUZW1wIGJ1ZmZlciBmb3Igb25lIGZpbGVu YW1lICovCi0gICAgaW50IHdpZHRoID0gMDsKLSAgICBpbnQgY29scywgaGVpZ2h0LCBpLCBqLCBr LCBsYywgbjIgPSAwLCByYyA9IDAsIGl0c2FkaXIgPSAwOwotICAgIGNoYXIgKmIgPSBOVUxMLCAq cCwgKnE7Ci0gICAgY2hhciAqcGEsICpweDsKLSAgICBjaGFyICoqczIgPSBOVUxMOwotI2lmZGVm IFZNUwotICAgIGNoYXIgKiBjZHAgPSB6Z3RkaXIoKTsKLSNlbmRpZiAvKiBWTVMgKi8KLQotICAg IGlmIChuIDwgMSkgcmV0dXJuKDApOwotICAgIGlmIChvZmYgPCAwKSBvZmYgPSAwOwkJLyogT2Zm c2V0IGZvciBmaXJzdCBwYWdlICovCi0gICAgaWYgKCFwcmUpIHByZSA9ICIiOwkJCS8qIEhhbmRs ZSBudWxsIHN0cmluZyBwb2ludGVycyAqLwotICAgIGlmICghcG9zdCkgcG9zdCA9ICIiOwotCi0g ICAgbGMgPSBvZmY7CQkJCS8qIFNjcmVlbi1saW5lIGNvdW50ZXIgKi8KLQotICAgIGlmICgoczIg PSAoY2hhciAqKikgbWFsbG9jKG4gKiBzaXplb2YoY2hhciAqKSkpKSB7Ci0JZm9yIChpID0gMDsg aSA8IG47IGkrKykgewkvKiBMb29wIHRocm91Z2ggZmlsZW5hbWVzICovCi0JICAgIGl0c2FkaXIg PSAwOwotCSAgICBzMltpXSA9IE5VTEw7CQkvKiBJbml0aWFsaXplIGVhY2ggcG9pbnRlciB0byBO VUxMICovCi0JICAgIHpuZXh0KGZpbGJ1Zik7CQkvKiBHZXQgbmV4dCBmaWxlbmFtZSAqLwotCSAg ICBpZiAoIWZpbGJ1ZlswXSkJCS8qIFNob3VsZG4ndCBoYXBwZW4gKi8KLQkgICAgICBicmVhazsK LSNpZmRlZiBDT01NRU5UCi0JICAgIGl0c2FkaXIgPSBpc2RpcihmaWxidWYpOwkvKiBJcyBpdCBh IGRpcmVjdG9yeT8gKi8KLQkgICAgaWYgKGNtZGlyZmxnICYmICFpdHNhZGlyKQkvKiBObywgbGlz dGluZyBkaXJlY3RvcmllcyBvbmx5PyAqLwotCSAgICAgIGNvbnRpbnVlOwkJCS8qIFNvIHNraXAg dGhpcyBvbmUuICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCSAgICBpZiAoZnMpIGlmIChmaWxl c2VsZWN0KGZpbGJ1ZiwKLQkJCSAgIHNhLHNiLHNuYSxzbmIsCi0JCQkgICBtaW5zaXosbWF4c2l6 LG5idSxueGxpc3QseGxpc3QpIDwgMSkgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK LQkgICAgfQotI2lmZGVmIFZNUwotCSAgICBja3N0cm5jcHkoZmlsYnVmLHpyZWxuYW1lKGZpbGJ1 ZixjZHApLENLTUFYUEFUSCk7Ci0jZW5kaWYgLyogVk1TICovCi0JICAgIGogPSBzdHJsZW4oZmls YnVmKTsKLSNpZm5kZWYgVk1TCi0JICAgIGlmIChpdHNhZGlyICYmIGogPCBDS01BWFBBVEggLSAx ICYmIGogPiAwKSB7Ci0JCWlmIChmaWxidWZbai0xXSAhPSBkaXJzZXApIHsKLQkJICAgIGZpbGJ1 ZltqKytdID0gZGlyc2VwOwotCQkgICAgZmlsYnVmW2pdID0gTlVMOwotCQl9Ci0JICAgIH0KLSNl bmRpZiAvKiBWTVMgKi8KLQkgICAgaWYgKCEoczJbbjJdID0gbWFsbG9jKGorMSkpKSB7Ci0JCXBy aW50ZigiP01lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIpOwotCQlyYyA9IC05OwotCQlnb3Rv IHhmaWxoZWxwOwotCSAgICB9Ci0JICAgIGlmIChqIDw9IENLTUFYUEFUSCkgewotCQlzdHJjcHko czJbbjJdLGZpbGJ1Zik7Ci0JCW4yKys7Ci0JICAgIH0gZWxzZSB7Ci0JCXByaW50ZigiP05hbWUg dG9vIGxvbmcgLSAlc1xuIiwgZmlsYnVmKTsKLQkJcmMgPSAtOTsKLQkJZ290byB4ZmlsaGVscDsK LQkgICAgfQotCSAgICBpZiAoaiA+IHdpZHRoKQkJLyogR2V0IHdpZHRoIG9mIHdpZGVzdCBvbmUg Ki8KLQkgICAgICB3aWR0aCA9IGo7Ci0JfQotCW4gPSBuMjsJCQkJLyogSG93IG1hbnkgd2UgYWN0 dWFsbHkgZ290ICovCi0gICAgfQotICAgIHNoX3NvcnQoczIsTlVMTCxuLDAsMCxmaWxlY2FzZSk7 CS8qIEFscGhhYmV0aXplIHRoZSBsaXN0ICovCi0KLSAgICByYyA9IDE7Ci0gICAgaWYgKHMyICYm IChiID0gKGNoYXIgKikgbWFsbG9jKGNtZF9jb2xzICsgMSkpKSB7IC8qIE1ha2UgYSBsaW5lIGJ1 ZmZlciAqLwotCWNoYXIgKiBieDsKLQlieCA9IGIgKyBjbWRfY29sczsKLQl3aWR0aCArPSAoaW50 KXN0cmxlbihwcmUpICsgKGludClzdHJsZW4ocG9zdCkgKyAyOwotCWNvbHMgPSBjbWRfY29scyAv IHdpZHRoOwkvKiBIb3cgbWFueSBjb2x1bW5zPyAqLwotCWlmIChjb2xzIDwgMSkgY29scyA9IDE7 Ci0JaGVpZ2h0ID0gbiAvIGNvbHM7CQkvKiBIb3cgbG9uZyBpcyBlYWNoIGNvbHVtbj8gKi8KLQlp ZiAobiAlIGNvbHMpIGhlaWdodCsrOwkJLyogQWRkIG9uZSBmb3IgcmVtYWluZGVyLCBpZiBhbnkg Ki8KLQotCWZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewkgICAgLyogTG9vcCBmb3IgZWFj aCByb3cgKi8KLQkgICAgZm9yIChqID0gMDsgaiA8IGNtZF9jb2xzOyBqKyspICAvKiBGaXJzdCBm aWxsIHJvdyB3aXRoIGJsYW5rcyAqLwotCSAgICAgIGJbal0gPSBTUDsKLQkgICAgZm9yIChqID0g MDsgaiA8IGNvbHM7IGorKykgeyAgICAvKiBMb29wIGZvciBlYWNoIGNvbHVtbiBpbiByb3cgKi8K LQkJayA9IGkgKyAoaiAqIGhlaWdodCk7ICAgICAgIC8qIEluZGV4IG9mIG5leHQgZmlsZW5hbWUg Ki8KLQkJaWYgKGsgPCBuKSB7CQkgICAgLyogSW4gcmFuZ2U/ICovCi0JCSAgICBwYSA9IHByZTsK LQkJICAgIHB4ID0gcG9zdDsKLQkJICAgIHAgPSBzMltrXTsJCSAgICAgICAgICAgICAgIC8qIFBv aW50IHRvIGZpbGVuYW1lICovCi0JCSAgICBxID0gYiArIChqICogd2lkdGgpICsgMTsgICAgICAg ICAgICAgLyogYW5kIGRlc3RpbmF0aW9uICovCi0JCSAgICB3aGlsZSAoKHEgPCBieCkgJiYgKCpx KysgPSAqcGErKykpIDsgLyogQ29weSBwcmVmaXggKi8KLQkJICAgIHEtLTsJCSAgICAgICAgICAg ICAgICAgLyogQmFjayB1cCBvdmVyIE5VTCAqLwotCQkgICAgd2hpbGUgKChxIDwgYngpICYmICgq cSsrID0gKnArKykpIDsJIC8qIENvcHkgZmlsZW5hbWUgKi8KLQkJICAgIHEtLTsJCSAgICAgICAg ICAgICAgICAgLyogQmFjayB1cCBvdmVyIE5VTCAqLwotCQkgICAgd2hpbGUgKChxIDwgYngpICYm ICgqcSsrID0gKnB4KyspKSA7IC8qIENvcHkgc3VmZml4ICovCi0JCSAgICBpZiAoaiA8IGNvbHMg LSAxKSB7Ci0JCQlxLS07Ci0JCQkqcSA9IFNQOwkvKiBSZXBsYWNlIHRoZSBzcGFjZSAqLwotCQkg ICAgfQotCQl9Ci0JICAgIH0KLQkgICAgcCA9IGIgKyBjbWRfY29scyAtIDE7CS8qIExhc3QgY2hh ciBpbiBsaW5lICovCi0JICAgIHdoaWxlICgqcC0tID09IFNQKSA7CS8qIFRyaW0gKi8KLQkgICAg KihwKzIpID0gTlVMOwotCSAgICBwcmludGYoIiVzXG4iLGIpOwkJLyogUHJpbnQgdGhlIGxpbmUg Ki8KLQkgICAgaWYgKCsrbGMgPiAoY21kX3Jvd3MgLSAyKSkgeyAvKiBTY3JlZW4gZnVsbD8gKi8K LQkJaWYgKCFhc2ttb3JlKCkpIHsJLyogRG8gbW9yZS1wcm9tcHRpbmcuLi4gKi8KLQkJICAgIHJj ID0gMDsKLQkJICAgIGdvdG8geGZpbGhlbHA7Ci0JCX0gZWxzZQotCQkgIGxjID0gMDsKLQkgICAg fQotCX0KLQlwcmludGYoIlxuIik7CQkJLyogQmxhbmsgbGluZSBhdCBlbmQgb2YgcmVwb3J0ICov Ci0JZ290byB4ZmlsaGVscDsKLSAgICB9IGVsc2UgewkJCQkvKiBNYWxsb2MgZmFpbHVyZSwgbm8g Y29sdW1ucyAqLwotCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLQkgICAgem5leHQoZmlsYnVm KTsKLQkgICAgaWYgKCFmaWxidWZbMF0pIGJyZWFrOwotCSAgICBwcmludGYoIiVzJXMlc1xuIixw cmUsZmlsYnVmLHBvc3QpOwotCSAgICBpZiAoKytsYyA+IChjbWRfcm93cyAtIDIpKSB7IC8qIFNj cmVlbiBmdWxsPyAqLwotCQlpZiAoIWFza21vcmUoKSkgewkgLyogRG8gbW9yZS1wcm9tcHRpbmcu Li4gKi8KLQkJICAgIHJjID0gMDsKLQkJICAgIGdvdG8geGZpbGhlbHA7Ci0JCX0gZWxzZSBsYyA9 IDA7Ci0JICAgIH0KLQl9Ci14ZmlsaGVscDoKLQlpZiAoYikgZnJlZShiKTsKLQlmb3IgKGkgPSAw OyBpIDwgbjI7IGkrKykKLQkgIGlmIChzMltpXSkgZnJlZShzMltpXSk7Ci0JaWYgKHMyKSBmcmVl KChjaGFyICopczIpOwotCXJldHVybihyYyk7Ci0gICAgfQotfQotCi0vKgotICBTaW1wbGVyIGZy b250IGVuZCBmb3IgeGZpbGhlbHAoKSB3aXRoIHNob3J0ZXIgYXJnIGxpc3Qgd2hlbiBubwotICBm aWxlIHNlbGVjdGlvbiBpcyBuZWVkZWQuCi0qLwotaW50Ci1maWxoZWxwKG4scHJlLHBvc3Qsb2Zm LGNtZGlyZmxnKSBpbnQgbiwgb2ZmOyBjaGFyICpwcmUsICpwb3N0OyBpbnQgY21kaXJmbGc7IHsK LSAgICByZXR1cm4oeGZpbGhlbHAobixwcmUscG9zdCxvZmYsY21kaXJmbGcsCi0JCSAgICAwLE5V TEwsTlVMTCxOVUxMLE5VTEwsCi0JCSAgICAoQ0tfT0ZGX1QpMCwoQ0tfT0ZGX1QpMCwwLDAsKGNo YXIgKiopTlVMTCkpOwotfQotCi0vKiAgQyBNIFMgRSBUIFUgUCAgLS0gIFNldCB1cCBjb21tYW5k IGJ1ZmZlcnMgICovCi0KLSNpZmRlZiBEQ01EQlVGCi1pbnQKLWNtc2V0dXAoKSB7Ci0gICAgaWYg KCEoY21kYnVmID0gbWFsbG9jKENNREJMICsgNCkpKSByZXR1cm4oLTEpOwotICAgIGlmICghKHNh dmJ1ZiA9IG1hbGxvYyhDTURCTCArIDQpKSkgcmV0dXJuKC0xKTsKLSAgICBzYXZidWZbMF0gPSAn XDAnOwotICAgIGlmICghKHByZXZjbWQgPSBtYWxsb2MoQ01EQkwgKyA0KSkpIHJldHVybigtMSk7 Ci0gICAgcHJldmNtZFswXSA9ICdcMCc7Ci0gICAgaWYgKCEoYXRtYnVmID0gbWFsbG9jKEFUTUJM ICsgNCkpKSByZXR1cm4oLTEpOwotICAgIGlmICghKGF0eGJ1ZiA9IG1hbGxvYyhDTURCTCArIDQp KSkgcmV0dXJuKC0xKTsKLSAgICBpZiAoIShhdHlidWYgPSBtYWxsb2MoQVRNQkwgKyA0KSkpIHJl dHVybigtMSk7Ci0gICAgaWYgKCEoZmlsYnVmID0gbWFsbG9jKEFUTUJMICsgNCkpKSByZXR1cm4o LTEpOwotICAgIGlmICghKGNtcHJvbSA9IG1hbGxvYyhQUk9NUFRMICsgNCkpKSByZXR1cm4oLTEp OwotICAgIGlmICghKGNtcHJ4eCA9IG1hbGxvYyhQUk9NUFRMICsgNCkpKSByZXR1cm4oLTEpOwot I2lmZGVmIENLX1JFQ0FMTAotICAgIGNtcmluaShjbV9yZWNhbGwpOwotI2VuZGlmIC8qIENLX1JF Q0FMTCAqLwotICAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAvKiBEQ01EQlVGICovCi0KLS8qICBD IE0gUyBFIFQgUCAgLS0gIFNldCB0aGUgcHJvZ3JhbSBwcm9tcHQuICAqLwotCi1WT0lECi1jbXNl dHAocykgY2hhciAqczsgewotICAgIGlmICghcykgcyA9ICIiOwotICAgIGNrc3RybmNweShjbXBy eHgscyxQUk9NUFRMKTsKLSAgICBwc2V0ZiA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBGbGFnIHRoYXQgcHJvbXB0IGhhcyBiZWVuIHNldC4gKi8KLX0KLQotLyogIEMgTSBTIEEgViBQ ICAtLSAgU2F2ZSBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgcHJvbXB0LiAgKi8KLQotVk9JRAotI2lm ZGVmIENLX0FOU0lDCi1jbXNhdnAoY2hhciBzW10sIGludCBuKQotI2Vsc2UKLWNtc2F2cChzLG4p IGNoYXIgc1tdOyBpbnQgbjsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogY21zYXZwICovIHsK LSAgICBpZiAocHNldGYpCQkJCS8qIEJ1dCBub3QgaWYgbm8gcHJvbXB0IGlzIHNldC4gKi8KLSAg ICAgIGNrc3RybmNweShzLGNtcHJ4eCxuKTsKLX0KLQotY2hhciAqCi1jbWdldHAoKSB7Ci0gICAg cmV0dXJuKGNtcHJ4eCk7Ci19Ci0KLWludAotY21nYnJrKCkgewotICAgIHJldHVybihicmtjaGFy KTsKLX0KLQotaW50Ci1jbWdrd2ZsZ3MoKSB7Ci0gICAgcmV0dXJuKGNta3dmbGdzKTsKLX0KLQot LyogIFAgUiBPIE0gUCBUICAtLSAgSXNzdWUgdGhlIHByb2dyYW0gcHJvbXB0LiAgKi8KLQotVk9J RAotcHJvbXB0KGYpIHh4X3N0cnAgZjsgewotICAgIGNoYXIgKnN4LCAqc3k7IGludCBuOwotI2lm ZGVmIENLX1NTTAotICAgIGV4dGVybiBpbnQgc3NsX2FjdGl2ZV9mbGFnLCB0bHNfYWN0aXZlX2Zs YWc7Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0jaWZkZWYgT1MyCi0gICAgZXh0ZXJuIGludCBkaXNw bGF5X2RlbW87Ci0KLSAgICAvKiBJZiB0aGVyZSBpcyBhIGRlbW8gc2NyZWVuIHRvIGJlIGRpc3Bs YXllZCwgZGlzcGxheSBpdCAqLwotICAgIGlmIChkaXNwbGF5X2RlbW8gJiYgeGNtZHNyYyA9PSAw KSB7Ci0gICAgICAgIGRlbW9zY3JuKFZDTUQpOwotICAgICAgICBkaXNwbGF5X2RlbW8gPSAwOwot ICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgIGlmIChwc2V0ZiA9PSAwKQkJCS8qIElmIG5v IHByb21wdCBzZXQsIHNldCBkZWZhdWx0LiAqLwotICAgICAgY21zZXRwKGRmcHJvbSk7Ci0KLSAg ICBzeCA9IGNtcHJ4eDsJCQkvKiBVbmV2YWx1YXRlZCBjb3B5ICovCi0gICAgaWYgKGYpIHsJCQkJ LyogSWYgY29udmVyc2lvbiBmdW5jdGlvbiBnaXZlbiAqLwotCXN5ID0gY21wcm9tOwkJCS8qIEV2 YWx1YXRlIGl0ICovCi0jaWZkZWYgQ09NTUVOVAotCWRlYnVnKEYxMDEsInByb21wdCBzeCIsIiIs c3gpOwotCWRlYnVnKEYxMDEsInByb21wdCBzeSIsIiIsc3kpOwotI2VuZGlmCS8qIENPTU1FTlQg Ki8KLQluID0gUFJPTVBUTDsKLQlpZiAoKCpmKShzeCwmc3ksJm4pIDwgMCkJLyogSWYgZXZhbHVh dGlvbiBmYWlsZWQgKi8KLQkgIHN4ID0gY21wcnh4OwkJCS8qIHJldmVydCB0byB1bmV2YWx1YXRl ZCBjb3B5ICovCi0JZWxzZSBpZiAoISpjbXByb20pCQkvKiBkaXR0byBpZiBpdCBjYW1lIHVwIGVt cHR5ICovCi0JICBzeCA9IGNtcHJ4eDsKLQllbHNlCi0JICBzeCA9IGNtcHJvbTsKLSAgICB9IGVs c2UKLSAgICAgIGNrc3RybmNweShjbXByb20sc3gsUFJPTVBUTCk7Ci0gICAgY21wcm9tW1BST01Q VEwtMV0gPSBOVUw7Ci0gICAgaWYgKCEqc3gpCQkJCS8qIERvbid0IHByaW50IGlmIGVtcHR5ICov Ci0gICAgICByZXR1cm47Ci0KLSNpZmRlZiBPU0sKLSAgICBmcHV0cyhzeCwgc3Rkb3V0KTsKLSNl bHNlCi0jaWZkZWYgTUFDCi0gICAgcHJpbnRmKCIlcyIsIHN4KTsKLSNlbHNlCi0jaWZkZWYgSUtT RAotICAgIGlmIChpbnNlcnZlcikgewkJCS8qIFByaW50IHRoZSBwcm9tcHQuICovCi0gICAgICAg IHR0b2MoQ1IpOwkJCS8qIElmIFRFTE5FVCBTZXJ2ZXIgKi8KLSAgICAgICAgdHRvYyhOVUwpOwkJ CS8qIG11c3QgZm9sbG9XIENSIGJ5IE5VTCAqLwotICAgICAgICBwcmludGYoIiVzIixzeCk7Ci0g ICAgfSBlbHNlCi0jZW5kaWYgLyogSUtTRCAqLwotICAgICAgcHJpbnRmKCJcciVzIixzeCk7Ci0j aWZkZWYgQ0tfU1NMCi0gICAgaWYgKCEoc3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxh ZykpCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICBmZmx1c2goc3Rkb3V0KTsJCQkvKiBOb3ch ICovCi0jZW5kaWYgLyogTUFDICovCi0jZW5kaWYgLyogT1NLICovCi19Ci0KLSNpZm5kZWYgTk9T UEwKLVZPSUQKLXB1c2hjbWQocykgY2hhciAqIHM7IHsJCQkvKiBGb3IgdXNlIHdpdGggSUYgY29t bWFuZC4gKi8KLSAgICBpZiAoIXMpIHMgPSBucDsKLSAgICBja3N0cm5jcHkoc2F2YnVmLHMsQ01E QkwpOwkJLyogU2F2ZSB0aGUgZGVwZW5kZW50IGNsYXVzZSwgICovCi0gICAgY21yZXMoKTsJCQkJ LyogYW5kIGNsZWFyIHRoZSBjb21tYW5kIGJ1ZmZlci4gKi8KLSAgICBkZWJ1ZyhGMTEwLCAicHVz aGNtZCBzYXZidWYiLCBzYXZidWYsIDApOwotfQotCi1WT0lECi1wdXNocWNtZChzKSBjaGFyICog czsgewkJCS8qIEZvciB1c2Ugd2l0aCBFTFNFIGNvbW1hbmQuICovCi0gICAgY2hhciBjLCAqIHAg PSBzYXZidWY7CQkvKiBEZXN0ICovCi0gICAgaWYgKCFzKSBzID0gbnA7CQkJLyogU291cmNlICov Ci0gICAgd2hpbGUgKCpzKSB7CQkJLyogR2V0IGZpcnN0IG5vbndoaXRlc3BhY2UgY2hhciAqLwot CWlmICgqcyAhPSBTUCkKLQkgIGJyZWFrOwotCWVsc2UKLQkgIHMrKzsKLSAgICB9Ci0gICAgaWYg KCpzICE9ICd7JykgewkJCS8qIElmIGl0J3Mgbm90ICJ7IiAqLwotCXB1c2hjbWQocyk7CQkJLyog ZG8gcmVndWxhciBwdXNoY21kICovCi0JcmV0dXJuOwotICAgIH0KLSAgICB3aGlsZSAoKGMgPSAq cysrKSkgewkJLyogT3RoZXJ3aXNlIGluc2VydCBxdW90ZXMgKi8KLQlpZiAoYyA9PSBDTURRKQot CSAgKnArKyA9IENNRFE7Ci0JKnArKyA9IGM7Ci0gICAgfQotICAgIGNtcmVzKCk7CQkJCS8qIGFu ZCBjbGVhciB0aGUgY29tbWFuZCBidWZmZXIuICovCi0gICAgZGVidWcoRjExMCwgInB1c2hxY21k IHNhdmJ1ZiIsIHNhdmJ1ZiwgMCk7Ci19Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmZGVmIENP TU1FTlQKLS8qIG5vIGxvbmdlciB1c2VkLi4uICovCi1WT0lECi1wb3BjbWQoKSB7Ci0gICAgY2tz dHJuY3B5KGNtZGJ1ZixzYXZidWYsQ01EQkwpOwkvKiBQdXQgYmFjayB0aGUgc2F2ZWQgbWF0ZXJp YWwgKi8KLSAgICAqc2F2YnVmID0gJ1wwJzsJCQkvKiBhbmQgY2xlYXIgdGhlIHNhdmUgYnVmZmVy ICovCi0gICAgY21yZXMoKTsKLX0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLS8qICBDIE0gUiBF IFMgIC0tICBSZXNldCBwb2ludGVycyB0byBiZWdpbm5pbmcgb2YgY29tbWFuZCBidWZmZXIuICAq LwotCi1WT0lECi1jbXJlcygpIHsKLSAgICBpbndvcmQgPSAwOwkJCQkvKiBXZSdyZSBub3QgaW4g YSB3b3JkICovCi0gICAgY2MgPSAwOwkJCQkvKiBDaGFyYWN0ZXIgY291bnQgaXMgemVybyAqLwot Ci0vKiBJbml0aWFsaXplIHBvaW50ZXJzICovCi0KLSAgICBwcCA9IGNtZGJ1ZjsJCQkvKiBCZWdp bm5pbmcgb2YgY3VycmVudCBmaWVsZCAqLwotICAgIGJwID0gY21kYnVmOwkJCS8qIEN1cnJlbnQg cG9zaXRpb24gd2l0aGluIGJ1ZmZlciAqLwotICAgIG5wID0gY21kYnVmOwkJCS8qIFdoZXJlIHRv IHN0YXJ0IG5leHQgZmllbGQgKi8KLQotICAgIGNtZmxkZmxncyA9IDA7Ci0gICAgY21mbGdzID0g LTU7ICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFyc2Ugbm90IHlldCBzdGFydGVkLiAqLwot ICAgIHVuZ3cgPSAwOwkJCQkvKiBEb24ndCBuZWVkIHRvIHVuZ2V0IGEgd29yZC4gKi8KLX0KLQot LyogIEMgTSBJIE4gSSAgLS0gIENsZWFyIHRoZSBjb21tYW5kIGFuZCBhdG9tIGJ1ZmZlcnMsIHJl c2V0IHBvaW50ZXJzLiAgKi8KLQotLyoKLVRoZSBhcmd1bWVudCBzcGVjaWZpZXMgd2hvIGlzIHRv IGVjaG8gdGhlIHVzZXIncyB0eXBlaW4gLS0KLSAgMSBtZWFucyB0aGUgY21kIHBhY2thZ2UgZWNo b2VzCi0gIDAgc29tZWJvZHkgZWxzZSAoc3lzdGVtLCBmcm9udCBlbmQsIHRlcm1pbmFsKSBlY2hv ZXMKLSovCi1WT0lECi1jbWluaShkKSBpbnQgZDsgewotI2lmZGVmIERDTURCVUYKLSAgICBpZiAo IWF0bWJ1ZikKLSAgICAgIGlmIChjbXNldHVwKCk8MCkKLQlmYXRhbCgiZmF0YWwgZXJyb3I6IHVu YWJsZSB0byBhbGxvY2F0ZSBjb21tYW5kIGJ1ZmZlcnMiKTsKLSNlbmRpZiAvKiBEQ01EQlVGICov Ci0jaWZkZWYgVVNFX01FTUNQWQotICAgIG1lbXNldChjbWRidWYsMCxDTURCTCk7Ci0gICAgbWVt c2V0KGF0bWJ1ZiwwLEFUTUJMKTsKLSNlbHNlCi0gICAgZm9yIChicCA9IGNtZGJ1ZjsgYnAgPCBj bWRidWYrQ01EQkw7IGJwKyspICpicCA9IE5VTDsKLSAgICBmb3IgKGJwID0gYXRtYnVmOyBicCA8 IGF0bWJ1ZitBVE1CTDsgYnArKykgKmJwID0gTlVMOwotI2VuZGlmIC8qIFVTRV9NRU1DUFkgKi8K LQotICAgICphdG1idWYgPSAqc2F2YnVmID0gKmF0eGJ1ZiA9ICphdHlidWYgPSAqZmlsYnVmID0g TlVMOwotICAgIGJsb2NrbHZsID0gMDsJCQkvKiBCbG9jayBsZXZlbCBpcyAwICovCi0gICAgbGlu ZWJlZ2luID0gMTsJCQkvKiBBdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSAqLwotICAgIGRweCA9 IGQ7CQkJCS8qIEdsb2JhbCBjb3B5IG9mIHRoZSBlY2hvIGZsYWcgKi8KLSAgICBkZWJ1ZyhGMTAx LCJjbWluaSBkcHgiLCIiLGRweCk7Ci0gICAgY3JmbGFnID0gMDsJCQkJLyogUmVzZXQgZmxhZ3Mg Ki8KLSAgICBxbWZsYWcgPSAwOwotICAgIGVzZmxhZyA9IDA7Ci0jaWZkZWYgQ0tfUkVDQUxMCi0g ICAgbm9fcmVjYWxsID0gMDsJCQkvKiBTdGFydCBvdXQgd2l0aCByZWNhbGwgZW5hYmxlZCAqLwot I2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotICAgIGNtcmVzKCk7CQkJCS8qIFNldHMgYnAgZXRjICov Ci0gICAgbmV3Y21kID0gMTsJCQkJLyogU2VlIGFkZGNtZCgpICovCi19Ci0KLSNpZm5kZWYgTk9T UEwKLS8qCi0gIFRoZSBmb2xsb3dpbmcgYml0cyBhcmUgdG8gYWxsb3cgdGhlIGNvbW1hbmQgcGFj a2FnZSB0byBjYWxsIGl0c2VsZgotICBpbiB0aGUgbWlkZGxlIG9mIGEgcGFyc2UuICBUbyBkbyB0 aGlzLCBiZWdpbiBieSBjYWxsaW5nIGNtcHVzaCwgYW5kCi0gIGVuZCBieSBjYWxsaW5nIGNtcG9w LiAgQXMgeW91IGNhbiBzZWUsIHRoaXMgaXMgcmF0aGVyIGV4cGVuc2l2ZS4KLSovCi0jaWZkZWYg RENNREJVRgotc3RydWN0IGNtcCB7Ci0gICAgaW50IGlbNV07CQkJCS8qIHN0YWNrIGZvciBpbnRl Z2VycyAqLwotICAgIGNoYXIgKmNbM107CQkJCS8qIHN0YWNrIGZvciBwb2ludGVycyAqLwotICAg IGNoYXIgKmJbOF07CQkJCS8qIHN0YWNrIGZvciBidWZmZXIgY29udGVudHMgKi8KLX07Ci1zdHJ1 Y3QgY21wICpjbXAgPSAwOwotI2Vsc2UKLWludCBjbXBfaVtDTURERVArMV1bNV07CQkJLyogU3Rh Y2sgZm9yIGludGVnZXJzICovCi1jaGFyICpjbXBfY1tDTURERVArMV1bNV07CQkvKiBmb3IgbWlz YyBwb2ludGVycyAqLwotY2hhciAqY21wX2JbQ01EREVQKzFdWzddOwkJLyogZm9yIGJ1ZmZlciBj b250ZW50cyBwb2ludGVycyAqLwotI2VuZGlmIC8qIERDTURCVUYgKi8KLQotaW50IGNtZGRlcCA9 IC0xOwkJCS8qIEN1cnJlbnQgc3RhY2sgZGVwdGggKi8KLQotaW50Ci1jbXB1c2goKSB7CQkJCS8q IFNhdmUgdGhlIGNvbW1hbmQgZW52aXJvbm1lbnQgKi8KLSAgICBjaGFyICpjcDsJCQkJLyogQ2hh cmFjdGVyIHBvaW50ZXIgKi8KLQotICAgIGlmIChjbWRkZXAgPj0gQ01EREVQKQkJLyogRW50ZXIg YSBuZXcgY29tbWFuZCBkZXB0aCAqLwotICAgICAgcmV0dXJuKC0xKTsKLSAgICBjbWRkZXArKzsK LSAgICBkZWJ1ZyhGMTAxLCImY21wdXNoIHRvIGRlcHRoIiwiIixjbWRkZXApOwotCi0jaWZkZWYg RENNREJVRgotICAgIC8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgY21wIGlmIG5vdCBhbHJlYWR5IGRv bmUgKi8KLSAgICBpZiAoIWNtcCAmJiAhKGNtcCA9IChzdHJ1Y3QgY21wICopIG1hbGxvYyhzaXpl b2Yoc3RydWN0IGNtcCkqKENNRERFUCsxKSkpKQotICAgICAgZmF0YWwoImNtcHVzaDogbm8gbWVt b3J5IGZvciBjbXAiKTsKLSAgICBjbXBbY21kZGVwXS5pWzBdID0gY21mbGdzOwkJLyogRmlyc3Qg ZG8gdGhlIGdsb2JhbCBpbnRzICovCi0gICAgY21wW2NtZGRlcF0uaVsxXSA9IGNtZnNhdjsKLSAg ICBjbXBbY21kZGVwXS5pWzJdID0gYXR4bjsKLSAgICBjbXBbY21kZGVwXS5pWzNdID0gdW5ndzsK LQotICAgIGNtcFtjbWRkZXBdLmNbMF0gPSBicDsJCS8qIFRoZW4gdGhlIGdsb2JhbCBwb2ludGVy cyAqLwotICAgIGNtcFtjbWRkZXBdLmNbMV0gPSBwcDsKLSAgICBjbXBbY21kZGVwXS5jWzJdID0g bnA7Ci0jZWxzZQotICAgIGNtcF9pW2NtZGRlcF1bMF0gPSBjbWZsZ3M7CQkvKiBGaXJzdCBkbyB0 aGUgZ2xvYmFsIGludHMgKi8KLSAgICBjbXBfaVtjbWRkZXBdWzFdID0gY21mc2F2OwotICAgIGNt cF9pW2NtZGRlcF1bMl0gPSBhdHhuOwotICAgIGNtcF9pW2NtZGRlcF1bM10gPSB1bmd3OwotCi0g ICAgY21wX2NbY21kZGVwXVswXSA9IGJwOwkJLyogVGhlbiB0aGUgZ2xvYmFsIHBvaW50ZXJzICov Ci0gICAgY21wX2NbY21kZGVwXVsxXSA9IHBwOwotICAgIGNtcF9jW2NtZGRlcF1bMl0gPSBucDsK LSNlbmRpZiAvKiBEQ01EQlVGICovCi0KLSAgICAvKiBOb3cgdGhlIGJ1ZmZlcnMgdGhlbXNlbHZl cy4gIEEgbG90IG9mIHJlcGl0aXRpb3VzIGNvZGUuLi4gKi8KLQotI2lmZGVmIERDTURCVUYKLSAg ICBjcCA9IG1hbGxvYygoaW50KXN0cmxlbihjbWRidWYpKzEpOwkvKiAwOiBDb21tYW5kIGJ1ZmZl ciAqLwotICAgIGlmIChjcCkgc3RyY3B5KGNwLGNtZGJ1Zik7Ci0gICAgY21wW2NtZGRlcF0uYlsw XSA9IGNwOwotICAgIGlmIChjcCA9PSBOVUxMKSByZXR1cm4oLTEpOwotCi0gICAgY3AgPSBtYWxs b2MoKGludClzdHJsZW4oc2F2YnVmKSsxKTsJLyogMTogU2F2ZSBidWZmZXIgKi8KLSAgICBpZiAo Y3ApIHN0cmNweShjcCxzYXZidWYpOwotICAgIGNtcFtjbWRkZXBdLmJbMV0gPSBjcDsKLSAgICBp ZiAoY3AgPT0gTlVMTCkgcmV0dXJuKC0xKTsKLQotICAgIGNtcFtjbWRkZXBdLmJbMl0gPSBOVUxM OwotCi0gICAgY3AgPSBtYWxsb2MoKGludClzdHJsZW4oYXRtYnVmKSsxKTsJLyogMzogQXRvbSBi dWZmZXIgKi8KLSAgICBpZiAoY3ApIHN0cmNweShjcCxhdG1idWYpOwotICAgIGNtcFtjbWRkZXBd LmJbM10gPSBjcDsKLSAgICBpZiAoY3AgPT0gTlVMTCkgcmV0dXJuKC0xKTsKLQotICAgIGNwID0g bWFsbG9jKChpbnQpc3RybGVuKGF0eGJ1ZikrMSk7CS8qIDQ6IEV4cGFuc2lvbiBidWZmZXIgKi8K LSAgICBpZiAoY3ApIHN0cmNweShjcCxhdHhidWYpOwotICAgIGNtcFtjbWRkZXBdLmJbNF0gPSBj cDsKLSAgICBpZiAoY3AgPT0gTlVMTCkgcmV0dXJuKC0xKTsKLQotICAgIGNwID0gbWFsbG9jKChp bnQpc3RybGVuKGF0eWJ1ZikrMSk7CS8qIDU6IEF0b20gYnVmZmVyIGNvcHkgKi8KLSAgICBpZiAo Y3ApIHN0cmNweShjcCxhdHlidWYpOwotICAgIGNtcFtjbWRkZXBdLmJbNV0gPSBjcDsKLSAgICBp ZiAoY3AgPT0gTlVMTCkgcmV0dXJuKC0xKTsKLQotICAgIGNwID0gbWFsbG9jKChpbnQpc3RybGVu KGZpbGJ1ZikrMSk7CS8qIDY6IEZpbGUgbmFtZSBidWZmZXIgKi8KLSAgICBpZiAoY3ApIHN0cmNw eShjcCxmaWxidWYpOwotICAgIGNtcFtjbWRkZXBdLmJbNl0gPSBjcDsKLSAgICBpZiAoY3AgPT0g TlVMTCkgcmV0dXJuKC0xKTsKLSNlbHNlCi0gICAgY3AgPSBtYWxsb2MoKGludClzdHJsZW4oY21k YnVmKSsxKTsJLyogMDogQ29tbWFuZCBidWZmZXIgKi8KLSAgICBpZiAoY3ApIHN0cmNweShjcCxj bWRidWYpOwotICAgIGNtcF9iW2NtZGRlcF1bMF0gPSBjcDsKLSAgICBpZiAoY3AgPT0gTlVMTCkg cmV0dXJuKC0xKTsKLQotICAgIGNwID0gbWFsbG9jKChpbnQpc3RybGVuKHNhdmJ1ZikrMSk7CS8q IDE6IFNhdmUgYnVmZmVyICovCi0gICAgaWYgKGNwKSBzdHJjcHkoY3Asc2F2YnVmKTsKLSAgICBj bXBfYltjbWRkZXBdWzFdID0gY3A7Ci0gICAgaWYgKGNwID09IE5VTEwpIHJldHVybigtMSk7Ci0K LSAgICBjbXBfYltjbWRkZXBdWzJdID0gTlVMTDsKLQotICAgIGNwID0gbWFsbG9jKChpbnQpc3Ry bGVuKGF0bWJ1ZikrMSk7CS8qIDM6IEF0b20gYnVmZmVyICovCi0gICAgaWYgKGNwKSBzdHJjcHko Y3AsYXRtYnVmKTsKLSAgICBjbXBfYltjbWRkZXBdWzNdID0gY3A7Ci0gICAgaWYgKGNwID09IE5V TEwpIHJldHVybigtMSk7Ci0KLSAgICBjcCA9IG1hbGxvYygoaW50KXN0cmxlbihhdHhidWYpKzEp OwkvKiA0OiBFeHBhbnNpb24gYnVmZmVyICovCi0gICAgaWYgKGNwKSBzdHJjcHkoY3AsYXR4YnVm KTsKLSAgICBjbXBfYltjbWRkZXBdWzRdID0gY3A7Ci0gICAgaWYgKGNwID09IE5VTEwpIHJldHVy bigtMSk7Ci0KLSAgICBjcCA9IG1hbGxvYygoaW50KXN0cmxlbihhdHlidWYpKzEpOwkvKiA1OiBB dG9tIGJ1ZmZlciBjb3B5ICovCi0gICAgaWYgKGNwKSBzdHJjcHkoY3AsYXR5YnVmKTsKLSAgICBj bXBfYltjbWRkZXBdWzVdID0gY3A7Ci0gICAgaWYgKGNwID09IE5VTEwpIHJldHVybigtMSk7Ci0K LSAgICBjcCA9IG1hbGxvYygoaW50KXN0cmxlbihmaWxidWYpKzEpOwkvKiA2OiBGaWxlIG5hbWUg YnVmZmVyICovCi0gICAgaWYgKGNwKSBzdHJjcHkoY3AsZmlsYnVmKTsKLSAgICBjbXBfYltjbWRk ZXBdWzZdID0gY3A7Ci0gICAgaWYgKGNwID09IE5VTEwpIHJldHVybigtMSk7Ci0jZW5kaWYgLyog RENNREJVRiAqLwotCi0gICAgY21pbmkoZHB4KTsJCQkJLyogSW5pdGl6ZSB0aGUgY29tbWFuZCBw YXJzZXIgKi8KLSAgICByZXR1cm4oMCk7Ci19Ci0KLWludAotY21wb3AoKSB7CQkJCS8qIFJlc3Rv cmUgdGhlIGNvbW1hbmQgZW52aXJvbm1lbnQgKi8KLSAgICBpZiAoY21kZGVwIDwgMCkgewotCWRl YnVnKEYxMDAsIiZjbXBvcCBjYWxsZWQgZnJvbSB0b3AgbGV2ZWwiLCIiLDApOwotCXJldHVybigt MSk7CQkJLyogRG9uJ3QgcG9wIHRvbyBtdWNoISAqLwotICAgIH0KLSNpZmRlZiBEQ01EQlVGCi0g ICAgY21mbGdzID0gY21wW2NtZGRlcF0uaVswXTsJCS8qIEZpcnN0IGRvIHRoZSBnbG9iYWwgaW50 cyAqLwotICAgIGNtZnNhdiA9IGNtcFtjbWRkZXBdLmlbMV07Ci0gICAgYXR4biA9IGNtcFtjbWRk ZXBdLmlbMl07Ci0gICAgdW5ndyA9IGNtcFtjbWRkZXBdLmlbM107Ci0KLSAgICBicCA9IGNtcFtj bWRkZXBdLmNbMF07CQkvKiBUaGVuIHRoZSBnbG9iYWwgcG9pbnRlcnMgKi8KLSAgICBwcCA9IGNt cFtjbWRkZXBdLmNbMV07Ci0gICAgbnAgPSBjbXBbY21kZGVwXS5jWzJdOwotI2Vsc2UKLSAgICBj bWZsZ3MgPSBjbXBfaVtjbWRkZXBdWzBdOwkJLyogRmlyc3QgZG8gdGhlIGdsb2JhbCBpbnRzICov Ci0gICAgY21mc2F2ID0gY21wX2lbY21kZGVwXVsxXTsKLSAgICBhdHhuID0gY21wX2lbY21kZGVw XVsyXTsKLSAgICB1bmd3ID0gY21wX2lbY21kZGVwXVszXTsKLQotICAgIGJwID0gY21wX2NbY21k ZGVwXVswXTsJCS8qIFRoZW4gdGhlIGdsb2JhbCBwb2ludGVycyAqLwotICAgIHBwID0gY21wX2Nb Y21kZGVwXVsxXTsKLSAgICBucCA9IGNtcF9jW2NtZGRlcF1bMl07Ci0jZW5kaWYgLyogRENNREJV RiAqLwotCi0gICAgLyogTm93IHRoZSBidWZmZXJzIHRoZW1zZWx2ZXMuICovCi0gICAgLyogTm90 ZTogc3RybmNweSgpLCBub3QgY2tzdHJuY3B5KCkgLS0gSGVyZSB3ZSBXQU5UIHRoZSBOVUwgcGFk ZGluZy4uLiAqLwotCi0jaWZkZWYgRENNREJVRgotICAgIGlmIChjbXBbY21kZGVwXS5iWzBdKSB7 Ci0KLQlzdHJuY3B5KGNtZGJ1ZixjbXBbY21kZGVwXS5iWzBdLENNREJMKTsgLyogMDogQ29tbWFu ZCBidWZmZXIgKi8KLQlmcmVlKGNtcFtjbWRkZXBdLmJbMF0pOwotCWNtcFtjbWRkZXBdLmJbMF0g PSBOVUxMOwotICAgIH0KLSAgICBpZiAoY21wW2NtZGRlcF0uYlsxXSkgewotCXN0cm5jcHkoc2F2 YnVmLGNtcFtjbWRkZXBdLmJbMV0sQ01EQkwpOyAvKiAxOiBTYXZlIGJ1ZmZlciAqLwotCWZyZWUo Y21wW2NtZGRlcF0uYlsxXSk7Ci0JY21wW2NtZGRlcF0uYlsxXSA9IE5VTEw7Ci0gICAgfQotICAg IGlmIChjbXBbY21kZGVwXS5iWzNdKSB7Ci0Jc3RybmNweShhdG1idWYsY21wW2NtZGRlcF0uYlsz XSxBVE1CTCk7IC8qIDM6IEF0b21pYyBidWZmZXIhICovCi0JZnJlZShjbXBbY21kZGVwXS5iWzNd KTsKLQljbXBbY21kZGVwXS5iWzNdID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKGNtcFtjbWRkZXBd LmJbNF0pIHsKLQlzdHJuY3B5KGF0eGJ1ZixjbXBbY21kZGVwXS5iWzRdLEFUTUJMKTsgLyogNDog ZVhwYW5zaW9uIGJ1ZmZlciAqLwotCWZyZWUoY21wW2NtZGRlcF0uYls0XSk7Ci0JY21wW2NtZGRl cF0uYls0XSA9IE5VTEw7Ci0gICAgfQotICAgIGlmIChjbXBbY21kZGVwXS5iWzVdKSB7Ci0Jc3Ry bmNweShhdHlidWYsY21wW2NtZGRlcF0uYls1XSxBVE1CTCk7IC8qIDU6IEF0b20gYnVmZmVyIGNv cFkgKi8KLQlmcmVlKGNtcFtjbWRkZXBdLmJbNV0pOwotCWNtcFtjbWRkZXBdLmJbNV0gPSBOVUxM OwotICAgIH0KLSAgICBpZiAoY21wW2NtZGRlcF0uYls2XSkgewotCXN0cm5jcHkoZmlsYnVmLGNt cFtjbWRkZXBdLmJbNl0sQVRNQkwpOyAvKiA2OiBGaWxlbmFtZSBidWZmZXIgKi8KLQlmcmVlKGNt cFtjbWRkZXBdLmJbNl0pOwotCWNtcFtjbWRkZXBdLmJbNl0gPSBOVUxMOwotICAgIH0KLSNlbHNl Ci0gICAgaWYgKGNtcF9iW2NtZGRlcF1bMF0pIHsKLQlzdHJuY3B5KGNtZGJ1ZixjbXBfYltjbWRk ZXBdWzBdLENNREJMKTsgLyogMDogQ29tbWFuZCBidWZmZXIgKi8KLQlmcmVlKGNtcF9iW2NtZGRl cF1bMF0pOwotCWNtcF9iW2NtZGRlcF1bMF0gPSBOVUxMOwotICAgIH0KLSAgICBpZiAoY21wX2Jb Y21kZGVwXVsxXSkgewotCXN0cm5jcHkoc2F2YnVmLGNtcF9iW2NtZGRlcF1bMV0sQ01EQkwpOyAv KiAxOiBTYXZlIGJ1ZmZlciAqLwotCWZyZWUoY21wX2JbY21kZGVwXVsxXSk7Ci0JY21wX2JbY21k ZGVwXVsxXSA9IE5VTEw7Ci0gICAgfQotICAgIGlmIChjbXBfYltjbWRkZXBdWzNdKSB7Ci0Jc3Ry bmNweShhdG1idWYsY21wX2JbY21kZGVwXVszXSxBVE1CTCk7IC8qIDM6IEF0b21pYyBidWZmZXIh ICovCi0JZnJlZShjbXBfYltjbWRkZXBdWzNdKTsKLQljbXBfYltjbWRkZXBdWzNdID0gTlVMTDsK LSAgICB9Ci0gICAgaWYgKGNtcF9iW2NtZGRlcF1bNF0pIHsKLQlzdHJuY3B5KGF0eGJ1ZixjbXBf YltjbWRkZXBdWzRdLEFUTUJMKTsgLyogNDogZVhwYW5zaW9uIGJ1ZmZlciAqLwotCWZyZWUoY21w X2JbY21kZGVwXVs0XSk7Ci0JY21wX2JbY21kZGVwXVs0XSA9IE5VTEw7Ci0gICAgfQotICAgIGlm IChjbXBfYltjbWRkZXBdWzVdKSB7Ci0Jc3RybmNweShhdHlidWYsY21wX2JbY21kZGVwXVs1XSxB VE1CTCk7IC8qIDU6IEF0b20gYnVmZmVyIGNvcFkgKi8KLQlmcmVlKGNtcF9iW2NtZGRlcF1bNV0p OwotCWNtcF9iW2NtZGRlcF1bNV0gPSBOVUxMOwotICAgIH0KLSAgICBpZiAoY21wX2JbY21kZGVw XVs2XSkgewotCXN0cm5jcHkoZmlsYnVmLGNtcF9iW2NtZGRlcF1bNl0sQVRNQkwpOyAvKiA2OiBG aWxlbmFtZSBidWZmZXIgKi8KLQlmcmVlKGNtcF9iW2NtZGRlcF1bNl0pOwotCWNtcF9iW2NtZGRl cF1bNl0gPSBOVUxMOwotICAgIH0KLSNlbmRpZiAvKiBEQ01EQlVGICovCi0KLSAgICBjbWRkZXAt LTsJCQkJLyogUmlzZSwgcmlzZSAqLwotICAgIGRlYnVnKEYxMDEsIiZjbXBvcCB0byBkZXB0aCIs IiIsY21kZGVwKTsKLSAgICByZXR1cm4oY21kZGVwKTsKLX0KLSNlbmRpZiAvKiBOT1NQTCAqLwot Ci0jaWZkZWYgQ09NTUVOVAotVk9JRAkJCQkJLyogTm90IHVzZWQgKi8KLXN0cmlwcShzKSBjaGFy ICpzOyB7ICAgICAgICAgICAgICAgICAgICAvKiBGdW5jdGlvbiB0byBzdHJpcCAnXCcgcXVvdGVz ICovCi0gICAgY2hhciAqdDsKLSAgICB3aGlsZSAoKnMpIHsKLSAgICAgICAgaWYgKCpzID09IENN RFEpIHsKLSAgICAgICAgICAgIGZvciAodCA9IHM7ICp0ICE9ICdcMCc7IHQrKykgKnQgPSAqKHQr MSk7Ci0gICAgICAgIH0KLSAgICAgICAgcysrOwotICAgIH0KLX0KLSNlbmRpZiAvKiBDT01NRU5U ICovCi0KLS8qIENvbnZlcnQgdGFicyB0byBzcGFjZXMsIG9uZSBmb3Igb25lICovCi1WT0lECi11 bnRhYihzKSBjaGFyICpzOyB7Ci0gICAgd2hpbGUgKCpzKSB7Ci0JaWYgKCpzID09IEhUKSAqcyA9 IFNQOwotCXMrKzsKLSAgICB9Ci19Ci0KLS8qICBDIE0gTiBVIE0gIC0tICBQYXJzZSBhIG51bWJl ciBpbiB0aGUgaW5kaWNhdGVkIHJhZGl4ICAqLwotCi0vKgotIFRoZSByYWRpeCBpcyBzcGVjaWZp ZWQgaW4gdGhlIGFyZyBsaXN0LgotIFBhcnNlcyB1bnF1b3RlZCBudW1lcmljIHN0cmluZ3MgaW4g dGhlIGdpdmVuIHJhZGl4LgotIFBhcnNlcyBiYWNrc2xhc2gtcXVvdGVkIG51bWJlcnMgaW4gdGhl IHJhZGl4IGluZGljYXRlZCBieSB0aGUgcXVvdGU6Ci0gICBcbm5uID0gXGRubm4gPSBkZWNpbWFs LCBcb25ubiA9IG9jdGFsLCBceG5uID0gSGV4YWRlY2ltYWwuCi0gSWYgdGhlc2UgZmFpbCwgdGhl biBpZiBhIHByZXByb2Nlc3NpbmcgZnVuY3Rpb24gaXMgc3VwcGxpZWQsIHRoYXQgaXMgYXBwbGll ZAotIGFuZCB0aGVuIGEgc2Vjb25kIGF0dGVtcHQgaXMgbWFkZSB0byBwYXJzZSBhbiB1bnF1b3Rl ZCBkZWNpbWFsIHN0cmluZy4KLSBBbmQgaWYgdGhhdCBmYWlscywgdGhlIHByZXByb2Nlc3NlZCBz dHJpbmcgaXMgcGFzc2VkIHRvIGFuIGFyaXRobWV0aWMKLSBleHByZXNzaW9uIGV2YWx1YXRvci4K LQotIFJldHVybnM6Ci0gICAtMyBpZiBubyBpbnB1dCBwcmVzZW50IHdoZW4gcmVxdWlyZWQsCi0g ICAtMiBpZiB1c2VyIHR5cGVkIGFuIGlsbGVnYWwgbnVtYmVyLAotICAgLTEgaWYgcmVwYXJzZSBu ZWVkZWQsCi0gICAgMCBvdGhlcndpc2UsIHdpdGggYXJndW1lbnQgbiBzZXQgdG8gdGhlIG51bWJl ciB0aGF0IHdhcyBwYXJzZWQKLSovCi0vKiBUaGlzIGlzIHRoZSB0cmFkaXRpb25hbCBjbW51bSgp IHRoYXQgZ2V0cyBhbiBpbnQgKi8KLWludAotY21udW0oeGhscCx4ZGVmLHJhZGl4LG4sZikgY2hh ciAqeGhscCwgKnhkZWY7IGludCByYWRpeCwgKm47IHh4X3N0cnAgZjsgewotICAgIENLX09GRl9U IHogPSAoQ0tfT0ZGX1QpMCwgY2hlY2s7Ci0gICAgaW50IHg7Ci0gICAgeCA9IGNtbnVtdyh4aGxw LHhkZWYscmFkaXgsJnosZik7Ci0gICAgKm4gPSB6OwotICAgIGNoZWNrID0gKm47Ci0gICAgaWYg KGNoZWNrICE9IHopIHsKLQlwcmludGYoIj9NYWduaXR1ZGUgb2YgcmVzdWx0IHRvbyBsYXJnZSBm b3IgaW50ZWdlciAtICVzXG4iLGNrZnN0b2EoeikpOwotCXJldHVybigtOSk7Ci0gICAgfQotICAg IHJldHVybih4KTsKLX0KLQotLyoKLSAgVGhpcyBpcyB0aGUgbmV3IGNtbnVtKCkgdGhhdCBnZXRz IGEgIndpZGUiIHJlc3VsdCwgd2hhdGV2ZXIgQ0tfT0ZGX1QKLSAgaXMgZGVmaW5lZCB0byBiZSwg bm9ybWFsbHkgMzIgb3IgNjQgYml0cywgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybS4KLSAgZmRj LCAyNCBEZWMgMjAwNS4KLSovCi1pbnQKLWNtbnVtdyh4aGxwLHhkZWYscmFkaXgsbixmKQotICAg IGNoYXIgKnhobHAsICp4ZGVmOyBpbnQgcmFkaXg7IENLX09GRl9UICpuOyB4eF9zdHJwIGY7IHsK LSAgICBpbnQgeDsgY2hhciAqcywgKnpwLCAqenE7Ci0jaWZkZWYgQ09NTUVOVAotICAgIGNoYXIg bGJyYWNlLCByYnJhY2U7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgaWYgKCF4aGxwKSB4 aGxwID0gIiI7Ci0gICAgaWYgKCF4ZGVmKSB4ZGVmID0gIiI7Ci0KLSNpZmRlZiBDT01NRU5UCi0g ICAgaWYgKGNtZmxkZmxncyAmIDEpIHsKLQlsYnJhY2UgPSAnKCc7Ci0JcmJyYWNlID0gJyknOwot ICAgIH0gZWxzZSB7Ci0JbGJyYWNlID0gJ3snOwotCXJicmFjZSA9ICd9JzsKLSAgICB9Ci0jZW5k aWYgLyogQ09NTUVOVCAqLwotCi0gICAgaWYgKHJhZGl4ICE9IDEwICYmIHJhZGl4ICE9IDgpIHsJ LyogSnVzdCBkbyBiYXNlcyA4IGFuZCAxMCAqLwotICAgICAgICBwcmludGYoImNtbnVtOiBpbGxl Z2FsIHJhZGl4IC0gJWRcbiIscmFkaXgpOwotICAgICAgICByZXR1cm4oLTIpOwotICAgIH0gLyog RWFzeSB0byBhZGQgb3RoZXJzIGJ1dCB0aGVyZSBoYXMgbmV2ZXIgYmVlbiBhIG5lZWQgZm9yIGl0 LiAqLwotICAgIHggPSBjbWZsZCh4aGxwLHhkZWYsJnMsKHh4X3N0cnApMCk7Ci0gICAgZGVidWco RjEwMSwiY21udW06IGNtZmxkIiwiIix4KTsKLSAgICBpZiAoeCA8IDApIHJldHVybih4KTsJCS8q IFBhcnNlIGEgZmllbGQgKi8KLSAgICB6cCA9IGF0bWJ1ZjsKLS8qCi0gIEVkaXQgMTkyIC0gQWxs b3cgYW55IG51bWJlciBmaWVsZCB0byBiZSBicmFjZWQuICBUaGlzIGxldHMgdXMgaW5jbHVkZQot ICBzcGFjZXMgaW4gZXhwcmVzc2lvbnMsIGJ1dCBwZXJoYXBzIG1vcmUgaW1wb3J0YW50IGxldHMg dXMgaGF2ZSB1c2VyLWRlZmluZWQKLSAgZnVuY3Rpb25zIGluIG51bWVyaWMgZmllbGRzLgotKi8K LSAgICB6cCA9IGJyc3RyaXAoenApOwkJCS8qIFN0cmlwIGJyYWNlcyAqLwotICAgIGlmIChjbWZs ZGZsZ3MgJiAxICYmICp6cCA9PSAnKCcpIHsJLyogUGFyZW5zIHRvby4uICovCi0JeCA9IChpbnQp IHN0cmxlbihhdG1idWYpOwotCWlmICh4ID4gMCkgewotCSAgICBpZiAoKihhdG1idWYreC0xKSA9 PSAnKScpIHsKLQkJKihhdG1idWYreC0xKSA9IE5VTDsKLQkJenArKzsKLQkgICAgfQotCX0KLSAg ICB9Ci0gICAgaWYgKGNoa251bSh6cCkpIHsJCQkvKiBDaGVjayBmb3IgbnVtYmVyICovCi0JaWYg KHJhZGl4ID09IDgpIHsJCS8qIElmIGl0J3Mgc3VwcG9zZWQgdG8gYmUgb2N0YWwgKi8KLQkgICAg enAgPSBja3JhZGl4KHpwLDgsMTApOwkvKiBjb252ZXJ0IHRvIGRlY2ltYWwgKi8KLQkgICAgaWYg KCF6cCkgcmV0dXJuKC0yKTsKLQkgICAgaWYgKCFzdHJjbXAoenAsIi0xIikpIHJldHVybigtMik7 Ci0JfQotCWVycm5vID0gMDsJCQkvKiBHb3Qgb25lLCB3ZSdyZSBkb25lLiAqLwotICAgICAgICAq biA9IGNrYXRvZnMoenApOwotCWlmIChlcnJubykgewotCSAgICBwZXJyb3IoenApOwotCSAgICBy ZXR1cm4oLTkpOwotCX0KLQlkZWJ1ZyhGMTAxLCJjbW51bSAxc3QgY2hrbnVtIG9rIiwiIiwqbik7 Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9IGVsc2UgaWYgKCh4ID0geHhlc2MoJnpwKSkgPiAt MSkgewkvKiBDaGVjayBmb3IgYmFja3NsYXNoIGVzY2FwZSAqLwotCi0jaWZuZGVmIE9TMgotCSpu ID0geDsKLSNlbHNlCi0JKm4gPSB3aWRlcmVzdWx0OwotI2VuZGlmIC8qIE9TMiAqLwotCi0JZGVi dWcoRjEwMSwiY21udW0geHhlc2Mgb2siLCIiLCpuKTsKLQlyZXR1cm4oKnpwID8gLTIgOiAwKTsK LSAgICB9IGVsc2UgaWYgKGYpIHsJCQkvKiBJZiBjb252ZXJzaW9uIGZ1bmN0aW9uIGdpdmVuICov Ci0JenEgPSBhdHhidWY7CQkJLyogVHJ5IHRoYXQgKi8KLQlhdHhuID0gQ01EQkw7Ci0JaWYgKCgq ZikoenAsJnpxLCZhdHhuKSA8IDApCS8qIENvbnZlcnQgKi8KLQkgIHJldHVybigtMik7Ci0JenAg PSBhdHhidWY7Ci0gICAgfQotICAgIGRlYnVnKEYxMTAsImNtbnVtIHpwIDEiLHpwLDApOwotICAg IGlmICghKnpwKSB6cCA9IHhkZWY7CQkvKiBSZXN1bHQgZW1wdHksIHN1YnN0aXR1dGUgZGVmYXVs dCAqLwotICAgIGRlYnVnKEYxMTAsImNtbnVtIHpwIDIiLHpwLDApOwotICAgIGlmIChjaGtudW0o enApKSB7CQkJLyogQ2hlY2sgYWdhaW4gZm9yIGRlY2ltYWwgbnVtYmVyICovCi0JaWYgKHJhZGl4 ID09IDgpIHsJCS8qIElmIGl0J3Mgc3VwcG9zZWQgdG8gYmUgb2N0YWwgKi8KLQkgICAgenAgPSBj a3JhZGl4KHpwLDgsMTApOwkvKiBjb252ZXJ0IHRvIGRlY2ltYWwgKi8KLQkgICAgaWYgKCF6cCkg cmV0dXJuKC0yKTsKLQkgICAgaWYgKCFzdHJjbXAoenAsIi0xIikpIHJldHVybigtMik7Ci0JfQot CWVycm5vID0gMDsKLSAgICAgICAgKm4gPSBja2F0b2ZzKHpwKTsKLQlpZiAoZXJybm8pIHsKLQkg ICAgcGVycm9yKHpwKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0JZGVidWcoRjEwMSwiY21udW0g Mm5kIGNoa251bSBvayIsIiIsKm4pOwotICAgICAgICByZXR1cm4oMCk7Ci0jaWZuZGVmIE5PU1BM Ci0gICAgfSAgZWxzZSBpZiAoKHggPSB4eGVzYygmenApKSA+IC0xKSB7IC8qIENoZWNrIGZvciBi YWNrc2xhc2ggZXNjYXBlICovCi0jaWZuZGVmIE9TMgotCSpuID0geDsKLSNlbHNlCi0JKm4gPSB3 aWRlcmVzdWx0OwotI2VuZGlmIC8qIE9TMiAqLwotCWRlYnVnKEYxMDEsImNtbnVtIHh4ZXNjIDIg b2siLCIiLCpuKTsKLQlyZXR1cm4oKnpwID8gLTIgOiAwKTsKLSAgICB9IGVsc2UgaWYgKGYpIHsJ CQkvKiBOb3QgbnVtZXJpYywgbWF5YmUgYW4gZXhwcmVzc2lvbiAqLwotCWNoYXIgKiBwOwotCXAg PSBldmFsYSh6cCk7Ci0JaWYgKGNoa251bShwKSkgewotCSAgICBpZiAocmFkaXggPT0gOCkgewkJ LyogSWYgaXQncyBzdXBwb3NlZCB0byBiZSBvY3RhbCAqLwotCQl6cCA9IGNrcmFkaXgoenAsOCwx MCk7CS8qIGNvbnZlcnQgdG8gZGVjaW1hbCAqLwotCQlpZiAoIXpwKSByZXR1cm4oLTIpOwotCQlp ZiAoIXN0cmNtcCh6cCwiLTEiKSkgcmV0dXJuKC0yKTsKLQkgICAgfQotCSAgICBlcnJubyA9IDA7 Ci0JICAgICpuID0gY2thdG9mcyhwKTsKLQkgICAgaWYgKGVycm5vKSB7Ci0JCXBlcnJvcihwKTsK LQkJcmV0dXJuKC05KTsKLQkgICAgfQotCSAgICBkZWJ1ZyhGMTAxLCJjbW51bSBleHAgZXZhbCBv ayIsIiIsKm4pOwotCSAgICByZXR1cm4oMCk7Ci0JfSBlbHNlIHJldHVybigtMik7Ci0jZW5kaWYg LyogTk9TUEwgKi8KLSAgICB9IGVsc2UgewkJCQkvKiBOb3QgbnVtZXJpYyAqLwotCXJldHVybigt Mik7Ci0gICAgfQotfQotCi0jaWZkZWYgQ0tDSEFOTkVMSU8KLWV4dGVybiBpbnQgel9lcnJvcjsK LSNlbmRpZiAvKiBDS0NIQU5ORUxJTyAqLwotCi0vKiAgQyBNIE8gRiBJICAtLSAgUGFyc2UgdGhl IG5hbWUgb2YgYW4gb3V0cHV0IGZpbGUgICovCi0KLS8qCi0gRGVwZW5kcyBvbiB0aGUgZXh0ZXJu YWwgZnVuY3Rpb24gemNoa28oKTsgaWYgemNoa28oKSBub3QgYXZhaWxhYmxlLCB1c2UKLSBjbWZs ZCgpIHRvIHBhcnNlIG91dHB1dCBmaWxlIG5hbWVzLgotCi0gUmV0dXJuczoKLSAgIC05IGxpa2Ug LTIsIGV4Y2VwdCBtZXNzYWdlIGFscmVhZHkgcHJpbnRlZCwKLSAgIC0zIGlmIG5vIGlucHV0IHBy ZXNlbnQgd2hlbiByZXF1aXJlZCwKLSAgIC0yIGlmIHBlcm1pc3Npb24gd291bGQgYmUgZGVuaWVk IHRvIGNyZWF0ZSB0aGUgZmlsZSwKLSAgIC0xIGlmIHJlcGFyc2UgbmVlZGVkLAotICAgIDAgb3Ig MSBpZiBmaWxlIGNhbiBiZSBjcmVhdGVkLCB3aXRoIHhwIHBvaW50aW5nIHRvIG5hbWUuCi0gICAg MiBpZiBnaXZlbiB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBkaXJlY3RvcnkuCi0qLwotaW50Ci1j bW9maSh4aGxwLHhkZWYseHAsZikgY2hhciAqeGhscCwgKnhkZWYsICoqeHA7IHh4X3N0cnAgZjsg ewotICAgIGludCB4OyBjaGFyICpzLCAqenE7Ci0jaWZkZWYgRE9DSEtWQVIKLSAgICBpbnQgdHJp ZXM7Ci0jZW5kaWYgLyogRE9DSEtWQVIgKi8KLSNpZmRlZiBEVElMREUKLSAgICBjaGFyICpkaXJw OwotI2VuZGlmIC8qIERUSUxERSAqLwotCi0gICAgY21mbGRmbGdzID0gMDsKLQotICAgIGlmICgh eGhscCkgeGhscCA9ICIiOwotICAgIGlmICgheGRlZikgeGRlZiA9ICIiOwotCi0gICAgaWYgKCp4 aGxwID09IE5VTCkgeGhscCA9ICJPdXRwdXQgZmlsZSI7Ci0gICAgKnhwID0gIiI7Ci0KLSAgICBk ZWJ1ZyhGMTEwLCJjbW9maSB4ZGVmIix4ZGVmLDApOwotICAgIHggPSBjbWZsZCh4aGxwLHhkZWYs JnMsKHh4X3N0cnApMCk7Ci0gICAgZGVidWcoRjExMSwiY21vZmkgY21mbGQgcmV0dXJucyIscyx4 KTsKLSAgICBpZiAoeCA8IDApCi0gICAgICByZXR1cm4oeCk7Ci0KLSAgICBzID0gYnJzdHJpcChz KTsJCQkvKiBTdHJpcCBlbmNsb3NpbmcgYnJhY2VzICovCi0gICAgZGVidWcoRjExMCwiY21vZmkg MS41IixzLDApOwotCi0jaWZkZWYgRE9DSEtWQVIKLSAgICB0cmllcyA9IDA7Ci0gICAgewotCWNo YXIgKnAgPSBzOwotICAgIC8qCi0gICAgICBUaGlzIGlzIHJlYWxseSB1Z2x5LiAgSWYgd2Ugc2tp cCBjb252ZXJzaW9uIHRoZSBmaXJzdCB0aW1lIHRocm91Z2gsCi0gICAgICB0aGVuIHZhcmlhYmxl IG5hbWVzIGxpa2UgXCVhIHdpbGwgYmUgdXNlZCBhcyBmaWxlbmFtZXMgKGUuZy4gY3JlYXRpbmcK LSAgICAgIGEgZmlsZSBjYWxsZWQgJUEgaW4gdGhlIHJvb3QgZGlyZWN0b3J5KS4gIElmIHdlIERP TidUIHNraXAgY29udmVyc2lvbgotICAgICAgdGhlIGZpcnN0IHRpbWUgdGhyb3VnaCwgdGhlbiBz aW5nbGUgYmFja3NsYXNoZXMgdXNlZCBhcyBkaXJlY3RvcnkKLSAgICAgIHNlcGFyYXRvcnMgaW4g ZmlsZW5hbWVzIHdpbGwgYmUgbWlzaW50ZXJwcmV0ZWQgYXMgdmFyaWFibGUgbGVhZC1pbnMuCi0g ICAgICBTbyB3ZSBwcmVzY2FuIHRvIHNlZSBpZiBpdCBoYXMgYW55IHZhcmlhYmxlIHJlZmVyZW5j ZXMuICBCdXQgdGhpcwotICAgICAgbW9kdWxlIGlzIG5vdCBzdXBwb3NlZCB0byBrbm93IGFueXRo aW5nIGFib3V0IHZhcmlhYmxlcywgZnVuY3Rpb25zLAotICAgICAgZXRjLCBzbyB0aGlzIGNvZGUg ZG9lcyBub3QgcmVhbGx5IGJlbG9uZyBoZXJlLCBidXQgcmF0aGVyIGl0IHNob3VsZAotICAgICAg YmUgYXQgdGhlIHNhbWUgbGV2ZWwgYXMgenpzdHJpbmcoKS4KLSAgICAqLwotLyoKLSAgSG1tbSwg dGhpcyBsb29rcyBhIGxvdCBsaWtlIGNoa3ZhcigpIGV4Y2VwdCBpdCB0aGF0IGluY2x1ZGVzIFxu bm4gbnVtYmVyCi0gIGVzY2FwZXMuICBCdXQgd2h5PyAgVGhpcyBtYWtlcyBjb21tYW5kcyBsaWtl ICJta2RpciBjOlwxMjMiIGltcG9zc2libGUuCi0gIEFuZCBpbiBmYWN0LCAibWtkaXIgYzpcMTIz IiBjcmVhdGVzIGEgZGlyZWN0b3J5IGNhbGxlZCAiYzp7Ii4gIFdoYXQncyB3b3JzZSwKLSAgcm1k aXIoKSwgd2hpY2ggKmRvZXMqIGNhbGwgY2hrdmFyKCksIHdvbid0IGxldCB1cyByZW1vdmUgaXQu ICBTbyBsZXQncyBhdAotICBsZWFzdCB0cnkgbWFraW5nIGNtb2ZpKCkgc3ltbWV0cmljYWwgd2l0 aCBjbWlmaSgpLi4uCi0qLwotI2lmZGVmIENPTU1FTlQKLQljaGFyICogcTsKLQl3aGlsZSAoICh0 cmllcyA9PSAwKSAmJiAocCA9IHN0cmNocihwLENNRFEpKSApIHsKLQkgICAgcSA9ICoocCsxKTsJ CQkvKiBDaGFyIGFmdGVyIGJhY2tzbGFzaCAqLwotCSAgICBpZiAoIXEpCQkJLyogTm9uZSwgcXVp dCAqLwotCSAgICAgIGJyZWFrOwotCSAgICBpZiAoaXN1cHBlcihxKSkJCS8qIElmIGxldHRlciwg Y29udmVydCB0byBsb3dlcmNhc2UgKi8KLQkgICAgICBxID0gdG9sb3dlcihxKTsKLQkgICAgaWYg KGlzZGlnaXQocSkpIHsJCS8qIElmIGl0J3MgYSBkaWdpdCwgKi8KLQkJdHJpZXMgPSAxOwkJLyog YXNzdW1lIGl0J3MgYSBiYWNrc2xhc2ggY29kZSAgKi8KLQkJYnJlYWs7Ci0JICAgIH0KLQkgICAg c3dpdGNoIChxKSB7Ci0JICAgICAgY2FzZSBDTURROgkJLyogRG91YmxlIGJhY2tzbGFzaCAqLwot CQl0cmllcyA9IDE7CQkvKiBzbyBjYWxsIHRoZSBjb252ZXJzaW9uIGZ1bmN0aW9uICovCi0JCWJy ZWFrOwotCSAgICAgIGNhc2UgJyUnOgkJCS8qIFZhcmlhYmxlIG9yIGFycmF5IHJlZmVyZW5jZSAq LwotCSAgICAgIGNhc2UgJyYnOgkJCS8qIG11c3QgYmUgZm9sbG93ZWQgYnkgbGV0dGVyICovCi0J CWlmIChpc2FscGhhKCoocCsyKSkgfHwgKCoocCsyKSA+PSAnMCcgJiYgKihwKzIpIDw9ICc5Jykp Ci0JCSAgdHJpZXMgPSAxOwotCQlicmVhazsKLQkgICAgICBjYXNlICdtJzogY2FzZSAndic6IGNh c2UgJyQnOiAvKiBcbSgpLCBcdigpLCBcJCgpICovCi0JCWlmICgqKHArMikgPT0gJygnKQotCQkg IGlmIChzdHJjaHIocCsyLCcpJykpCi0JCSAgICB0cmllcyA9IDE7Ci0JCWJyZWFrOwotCSAgICAg IGNhc2UgJ2YnOgkJCS8qIFxGbmFtZSgpICovCi0JCWlmIChzdHJjaHIocCsyLCcoJykpCi0JCSAg aWYgKHN0cmNocihwKzIsJyknKSkKLQkJICAgICAgdHJpZXMgPSAxOwotCQlicmVhazsKLQkgICAg ICBjYXNlICd7JzoJCQkvKiBcey4uLn0gKi8KLQkJaWYgKHN0cmNocihwKzIsJ30nKSkKLQkJICB0 cmllcyA9IDE7Ci0JCWJyZWFrOwotCSAgICAgIGNhc2UgJ2QnOiBjYXNlICdvJzoJLyogRGVjaW1h bCBvciBPY3RhbCBudW1iZXIgKi8KLQkgICAgICAgIGlmIChpc2RpZ2l0KCoocCsyKSkpCi0JCSAg dHJpZXMgPSAxOwotCQlicmVhazsKLQkgICAgICBjYXNlICd4JzoJCQkvKiBIZXggbnVtYmVyICov Ci0JCWlmIChpc2RpZ2l0KCoocCsyKSkgfHwKLQkJICAgICgoKihwKzIpID49ICdhJyAmJiAqKHAr MikgPD0gJ2YnKSB8fAotCQkgICAgICgoKihwKzIpID49ICdBJyAmJiAqKHArMikgPD0gJ0YnKSkp KQotCQkgIHRyaWVzID0gMTsKLQkgICAgICBkZWZhdWx0OgotCQlicmVhazsKLQkgICAgfQotCSAg ICBwKys7Ci0JfQotI2Vsc2UKLSNpZm5kZWYgTk9TUEwKLQlpZiAoZikgewkJCS8qIElmIGEgY29u dmVyc2lvbiBmdW5jdGlvbiBpcyBnaXZlbiAqLwotCSAgICBjaGFyICpzID0gcDsJCS8qIFNlZSBp ZiB0aGVyZSBhcmUgYW55IHZhcmlhYmxlcyBpbiAqLwotCSAgICB3aGlsZSAoKnMpIHsJCS8qIHRo ZSBzdHJpbmcgYW5kIGlmIHNvLCBleHBhbmQgdGhlbSAqLwotCQlpZiAoY2hrdmFyKHMpKSB7Ci0J CSAgICB0cmllcyA9IDE7Ci0JCSAgICBicmVhazsKLQkJfQotCQlzKys7Ci0JICAgIH0KLQl9Ci0j ZW5kaWYgLyogTk9TUEwgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgfQotI2lmZGVmIE9T Mgotb19hZ2FpbjoKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICBpZiAodHJpZXMgPT0gMSkKLSNlbmRp ZiAvKiBET0NIS1ZBUiAqLwotICAgIGlmIChmKSB7CQkJCS8qIElmIGEgY29udmVyc2lvbiBmdW5j dGlvbiBpcyBnaXZlbiAqLwotCXpxID0gYXR4YnVmOwkJCS8qIGRvIHRoZSBjb252ZXJzaW9uLiAq LwotCWF0eG4gPSBDTURCTDsKLQlpZiAoKHggPSAoKmYpKHMsJnpxLCZhdHhuKSkgPCAwKQotCSAg cmV0dXJuKC0yKTsKLQlzID0gYXR4YnVmOwotCWlmICghKnMpCQkJLyogUmVzdWx0IGVtcHR5LCBz dWJzdGl0dXRlIGRlZmF1bHQgKi8KLQkgIHMgPSB4ZGVmOwotICAgIH0KLSAgICBkZWJ1ZyhGMTEx LCJjbW9maSAyIixzLHgpOwotCi0jaWZkZWYgRFRJTERFCi0gICAgZGlycCA9IHRpbGRlX2V4cGFu ZChzKTsJCS8qIEV4cGFuZCB0aWxkZSwgaWYgYW55LCAqLwotICAgIGlmICgqZGlycCAhPSAnXDAn KSB7CQkvKiByaWdodCBpbiB0aGUgYXRvbSBidWZmZXIuICovCi0JaWYgKHNldGF0bShkaXJwLDEp IDwgMCkgewotCSAgICBwcmludGYoIj9OYW1lIHRvbyBsb25nXG4iKTsKLQkgICAgcmV0dXJuKC05 KTsKLQl9Ci0gICAgfQotICAgIHMgPSBhdG1idWY7Ci0gICAgZGVidWcoRjExMCwiY21vZmkgMyIs cywwKTsKLSNlbmRpZiAvKiBEVElMREUgKi8KLQotICAgIGlmIChpc3dpbGQocykpIHsKLSAgICAg ICAgcHJpbnRmKCI/V2lsZGNhcmRzIG5vdCBhbGxvd2VkIC0gJXNcbiIscyk7Ci0gICAgICAgIHJl dHVybigtMik7Ci0gICAgfQotICAgIGRlYnVnKEYxMTAsImNtb2ZpIDQiLHMsMCk7Ci0KLSNpZmRl ZiBDS19UTVBESVIKLSAgICAvKiBpc2RpcigpIGZ1bmN0aW9uIHJlcXVpcmVkIGZvciB0aGlzISAq LwotICAgIGlmIChpc2RpcihzKSkgewotCWRlYnVnKEYxMTAsImNtb2ZpIDU6IGlzIGRpcmVjdG9y eSIscywwKTsKLSAgICAgICAgKnhwID0gczsKLQlyZXR1cm4oMik7Ci0gICAgfQotI2VuZGlmIC8q IENLX1RNUERJUiAqLwotCi0gICAgaWYgKHN0cmNtcChzLENUVE5BTSkgJiYgKHpjaGtvKHMpIDwg MCkpIHsgLyogT0sgdG8gd3JpdGUgdG8gY29uc29sZSAqLwotI2lmZGVmIENPTU1FTlQKLSNpZmRl ZiBPUzIKLS8qCi0gIFdlIGRvbid0IHRyeSBhZ2FpbiBiZWNhdXNlIHdlIGFscmVhZHkgcHJlc2Nh bm5lZCB0aGUgc3RyaW5nIHRvIHNlZSBpZgotICBpZiBpdCBjb250YWluZWQgYW55dGhpbmcgdGhh dCBjb3VsZCBiZSB1c2VkIGJ5IHp6c3RyaW5nKCkuCi0qLwotCWlmICh0cmllcysrIDwgMSkKLQkg IGdvdG8gb19hZ2FpbjsKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0v KgotICBOb3RlOiB0aGVyZSBhcmUgY2VydGFpbiBjaXJjdW1zdGFuY2VzIHdoZXJlIHpjaGtvKCkg Y2FuIGdpdmUgYSBmYWxzZQotICBwb3NpdGl2ZSwgc28gZG9uJ3QgcmVseSBvbiBpdCB0byBjYXRj aCBldmVyeSBjb25jZWl2YWJsZSBzaXR1YXRpb24gaW4KLSAgd2hpY2ggdGhlIGdpdmVuIG91dHB1 dCBmaWxlIGNhbid0IGJlIGNyZWF0ZWQuICBJbiBvdGhlciB3b3Jkcywgd2UgcHJpbnQKLSAgYSBt ZXNzYWdlIGFuZCBmYWlsIGhlcmUgaWYgd2UgS05PVyB0aGUgZmlsZSBjYW4ndCBiZSBjcmVhdGVk LiAgSWYgd2UKLSAgc3VjY2VlZCBidXQgdGhlIGZpbGUgY2FuJ3QgYmUgb3BlbmVkLCB0aGUgY29k ZSB0aGF0IHRyaWVzIHRvIG9wZW4gdGhlIGZpbGUKLSAgaGFzIHRvIHByaW50IGEgbWVzc2FnZS4K LSovCi0JZGVidWcoRjExMCwiY21vZmkgNjogZmFpbHVyZSIscywwKTsKLSNpZmRlZiBDS1JPT1QK LQlpZiAoY2tyb290ZXJyKQotCSAgcHJpbnRmKCI/T2ZmIExpbWl0czogJXNcbiIscyk7Ci0JZWxz ZQotI2VuZGlmIC8qIENLUk9PVCAqLwotCSAgcHJpbnRmKCI/V3JpdGUgcGVybWlzc2lvbiBkZW5p ZWQgLSAlc1xuIixzKTsKLSNpZmRlZiBDS0NIQU5ORUxJTwotCXpfZXJyb3IgPSBGWF9BQ0M7Ci0j ZW5kaWYgLyogQ0tDSEFOTkVMSU8gKi8KLSAgICAgICAgcmV0dXJuKC05KTsKLSAgICB9IGVsc2Ug ewotCWRlYnVnKEYxMTAsImNtb2ZpIDc6IG9rIixzLDApOwotICAgICAgICAqeHAgPSBzOwotICAg ICAgICByZXR1cm4oeCk7Ci0gICAgfQotfQotCi0vKiAgQyBNIEkgRiBJICAtLSAgUGFyc2UgdGhl IG5hbWUgb2YgYW4gZXhpc3RpbmcgZmlsZSAgKi8KLQotLyoKLSBUaGlzIGZ1bmN0aW9uIGRlcGVu ZHMgb24gdGhlIGV4dGVybmFsIGZ1bmN0aW9uczoKLSAgIHpjaGtpKCkgIC0gQ2hlY2sgaWYgaW5w dXQgZmlsZSBleGlzdHMgYW5kIGlzIHJlYWRhYmxlLgotICAgenhwYW5kKCkgLSBFeHBhbmQgYSB3 aWxkIGZpbGUgc3BlY2lmaWNhdGlvbiBpbnRvIGEgbGlzdC4KLSAgIHpuZXh0KCkgIC0gUmV0dXJu IG5leHQgZmlsZSBuYW1lIGZyb20gbGlzdC4KLSBJZiB0aGVzZSBmdW5jdGlvbnMgYXJlbid0IGF2 YWlsYWJsZSwgdGhlbiB1c2UgY21mbGQoKSB0byBwYXJzZSBmaWxlbmFtZXMuCi0qLwotLyoKLSBS ZXR1cm5zCi0gICAtNCBFT0YKLSAgIC0zIGlmIG5vIGlucHV0IHByZXNlbnQgd2hlbiByZXF1aXJl ZCwKLSAgIC0yIGlmIGZpbGUgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IHJlYWRhYmxlLAotICAg LTEgaWYgcmVwYXJzZSBuZWVkZWQsCi0gICAgMCBvciAxIG90aGVyd2lzZSwgd2l0aDoKLSAgICAg ICAgeHAgcG9pbnRpbmcgdG8gbmFtZSwKLSAgICAgICAgd2lsZCA9IDEgaWYgbmFtZSBjb250YWlu cyAnKicgb3IgJz8nLCAwIG90aGVyd2lzZS4KLSovCi0KLSNpZmRlZiBDT01NRU5UIC8qIFRoaXMg aG9ycmlibGUgaGFjayBoYXMgYmVlbiByZXBsYWNlZCAtIHNlZSBmdXJ0aGVyIGRvd24gKi8KLS8q Ci0gICBDIE0gSSBPIEYgSSAgLS0gIFBhcnNlIGFuIGlucHV0IGZpbGUgT1IgdGhlIG5hbWUgb2Yg YSBub25leGlzdGVudCBmaWxlLgotCi0gICBVc2UgdGhpcyB3aGVuIGFuIGV4aXN0aW5nIGZpbGUg aXMgd2FudGVkIChzbyB3ZSBnZXQgaGVscCwgY29tcGxldGlvbiwgZXRjKSwKLSAgIGJ1dCBpZiBh IGZpbGUgb2YgdGhlIGdpdmVuIG5hbWUgZG9lcyBub3QgZXhpc3QsIHRoZSBuYW1lIG9mIGEgbmV3 IGZpbGUgaXMKLSAgIGFjY2VwdGVkLiAgRm9yIGV4YW1wbGUsIHdpdGggdGhlIEVESVQgY29tbWFu ZCAoZWRpdCBhbiBleGlzdGluZyBmaWxlLCBvcgotICAgY3JlYXRlIGEgbmV3IGZpbGUpLiAgUmV0 dXJucyAtOSBpZiBmaWxlIGRvZXMgbm90IGV4aXN0LiAgSXQgaXMgdXAgdG8gdGhlCi0gICBjYWxs ZXIgdG8gY2hlY2sgY3JlYXRhYmlsaXR5LgotKi8KLXN0YXRpYyBpbnQgbm9tc2cgPSAwOwotaW50 Ci1jbWlvZmkoeGhscCx4ZGVmLHhwLHdpbGQsZikgY2hhciAqeGhscCwgKnhkZWYsICoqeHA7IGlu dCAqd2lsZDsgeHhfc3RycCBmOyB7Ci0gICAgaW50IG1zZ3NhdmUsIHg7Ci0gICAgbXNnc2F2ZSA9 IG5vbXNnOwotICAgIG5vbXNnID0gMTsKLSAgICB4ID0gY21pZmkyKHhobHAseGRlZix4cCx3aWxk LDAsTlVMTCxmLDApOwotICAgIG5vbXNnID0gbXNnc2F2ZTsKLSAgICByZXR1cm4oeCk7Ci19Ci0j ZW5kaWYJLyogQ09NTUVOVCAqLwotCi1pbnQKLWNtaWZpKHhobHAseGRlZix4cCx3aWxkLGYpIGNo YXIgKnhobHAsICp4ZGVmLCAqKnhwOyBpbnQgKndpbGQ7IHh4X3N0cnAgZjsgewotICAgIHJldHVy bihjbWlmaTIoeGhscCx4ZGVmLHhwLHdpbGQsMCxOVUxMLGYsMCkpOwotfQotLyoKLSAgY21pZmlw KCkgaXMgY2FsbGVkIHdoZW4gd2Ugd2FudCB0byBzdXBwbHkgYSBwYXRoIG9yIHBhdGggbGlzdCB0 byBzZWFyY2gKLSAgaW4gY2FzZSB0aGUgZmlsZW5hbWUgdGhhdCB0aGUgdXNlciBnaXZlcyBpcyAo YSkgbm90IGFic29sdXRlLCBhbmQgKGIpIGNhbid0Ci0gIGJlIGZvdW5kIGFzIGdpdmVuLiAgVGhl IHBhdGggc3RyaW5nIGNhbiBiZSB0aGUgbmFtZSBvZiBhIHNpbmdsZSBkaXJlY3RvcnksCi0gIG9y IGEgbGlzdCBvZiBkaXJlY3RvcmllcyBzZXBhcmF0ZWQgYnkgdGhlIFBBVEhTRVAgY2hhcmFjdGVy LCBkZWZpbmVkIGluCi0gIGNrdWNtZC5oLiAgTG9vayBpbiBja3V1c3IuYyBhbmQgY2t1dXMzLmMg Zm9yIGV4YW1wbGVzIG9mIHVzYWdlLgotKi8KLWludAotY21pZmlwKHhobHAseGRlZix4cCx3aWxk LGQscGF0aCxmKQotICAgIGNoYXIgKnhobHAsKnhkZWYsKip4cDsgaW50ICp3aWxkLCBkOyBjaGFy ICogcGF0aDsgeHhfc3RycCBmOyB7Ci0gICAgcmV0dXJuKGNtaWZpMih4aGxwLHhkZWYseHAsd2ls ZCwwLHBhdGgsZiwwKSk7Ci19Ci0KLS8qICBDIE0gRCBJIFIgIC0tICBQYXJzZSBhIGRpcmVjdG9y eSBuYW1lICAqLwotCi0vKgotIFRoaXMgZnVuY3Rpb24gZGVwZW5kcyBvbiB0aGUgZXh0ZXJuYWwg ZnVuY3Rpb25zOgotICAgaXNkaXIocykgIC0gQ2hlY2sgaWYgc3RyaW5nIHMgaXMgdGhlIG5hbWUg b2YgYSBkaXJlY3RvcnkKLSAgIHpjaGtpKHMpICAtIENoZWNrIGlmIGlucHV0IGZpbGUgcyBleGlz dHMgYW5kIHdoYXQgdHlwZSBpdCBpcy4KLSBJZiB0aGVzZSBmdW5jdGlvbnMgYXJlbid0IGF2YWls YWJsZSwgdGhlbiB1c2UgY21mbGQoKSB0byBwYXJzZSBkaXIgbmFtZXMuCi0KLSBSZXR1cm5zCi0g ICAtOSBGb3IgYWxsIHNvcnRzIG9mIHJlYXNvbnMsIGFmdGVyIHByaW50aW5nIGFwcHJvcHJpYXRl IGVycm9yIG1lc3NhZ2UuCi0gICAtNCBFT0YKLSAgIC0zIGlmIG5vIGlucHV0IHByZXNlbnQgd2hl biByZXF1aXJlZCwKLSAgIC0yIGlmIG91dCBvZiBzcGFjZSBvciBvdGhlciBpbnRlcm5hbCBlcnJv ciwKLSAgIC0xIGlmIHJlcGFyc2UgbmVlZGVkLAotICAgIDAgb3IgMSwgd2l0aCB4cCBwb2ludGlu ZyB0byBuYW1lLCBpZiBkaXJlY3Rvcnkgc3BlY2lmaWVkLAotKi8KLWludAotY21kaXIoeGhscCx4 ZGVmLHhwLGYpIGNoYXIgKnhobHAsICp4ZGVmLCAqKnhwOyB4eF9zdHJwIGY7IHsKLSAgICBpbnQg d2lsZDsKLSAgICByZXR1cm4oY21pZmkyKHhobHAseGRlZix4cCwmd2lsZCwwLE5VTEwsZiwxKSk7 Ci19Ci0KLS8qIExpa2UgQ01ESVIgYnV0IGluY2x1ZGVzIFBBVEggc2VhcmNoICovCi0KLWludAot Y21kaXJwKHhobHAseGRlZix4cCxwYXRoLGYpIGNoYXIgKnhobHAsICp4ZGVmLCAqKnhwOyBjaGFy ICogcGF0aDsgeHhfc3RycCBmOyB7Ci0gICAgaW50IHdpbGQ7Ci0gICAgcmV0dXJuKGNtaWZpMih4 aGxwLHhkZWYseHAsJndpbGQsMCxwYXRoLGYsMSkpOwotfQotCi0vKgotICBjbWlmaTIoKSBpcyB0 aGUgYmFzZSBmaWxlbmFtZSBwYXJzZXIgY2FsbGVkIGJ5IGNtaWZpLCBjbWlmaXAsIGNtZGlyLCBl dGMuCi0gIFVzZSBpdCBkaXJlY3RseSB3aGVuIHlvdSBhbHNvIHdhbnQgdG8gcGFyc2UgYSBkaXJl Y3Rvcnkgb3IgZGV2aWNlCi0gIG5hbWUgYXMgYW4gaW5wdXQgZmlsZSwgYXMgaW4gdGhlIERJUkVD VE9SWSBjb21tYW5kLiAgQ2FsbCB3aXRoOgotICAgIHhobHAgIC0tIGhlbHAgbWVzc2FnZSBvbiA/ Ci0gICAgeGRlZiAgLS0gZGVmYXVsdCByZXNwb25zZQotICAgIHhwICAgIC0tIHBvaW50ZXIgdG8g cmVzdWx0IChpbiBvdXIgc3BhY2UsIG11c3QgYmUgY29waWVkIGZyb20gaGVyZSkKLSAgICB3aWxk ICAtLSBmbGFnIHNldCB1cG9uIHJldHVybiB0byBpbmRpY2F0ZSBpZiBmaWxlc3BlYyB3YXMgd2ls ZAotICAgIGQgICAgIC0tIDAgdG8gcGFyc2UgZmlsZXMsIDEgdG8gcGFyc2UgZmlsZXMgb3IgZGly ZWN0b3JpZXMKLSAgICAgICAgICAgICBBZGQgMiB0byBpbmhpYml0IGZvbGxvd2luZyBvZiBzeW1s aW5rcy4KLSAgICBwYXRoICAtLSBzZWFyY2ggcGF0aCBmb3IgZmlsZXMKLSAgICBmICAgICAtLSBw b2ludGVyIHRvIHN0cmluZyBwcm9jZXNzaW5nIGZ1bmN0aW9uIChlLmcuIHRvIGV2YWx1YXRlIHZh cmlhYmxlcykKLSAgICBkaXJmbGcgLS0gMSB0byBwYXJzZSAqb25seSogZGlyZWN0b3JpZXMsIDAg b3RoZXJ3aXNlCi0qLwotaW50Ci1jbWlmaTIoeGhscCx4ZGVmLHhwLHdpbGQsZCxwYXRoLGYsZGly ZmxnKQotICAgIGNoYXIgKnhobHAsKnhkZWYsKip4cDsgaW50ICp3aWxkLCBkOyBjaGFyICogcGF0 aDsgeHhfc3RycCBmOyBpbnQgZGlyZmxnOyB7Ci0gICAgZXh0ZXJuIGludCByZWN1cnNpdmUsIGRp cmFjdGl2ZSwgY2RhY3RpdmUsIGRibHF1bzsKLSAgICBpbnQgaSwgeCwgaXRzYWRpciwgeGMsIGV4 cGFuZGVkID0gMCwgbmZpbGVzID0gMCwgY2hpbGRyZW4gPSAtMTsKLSAgICBpbnQgcWZsYWcgPSAw OwotICAgIGxvbmcgeTsKLSAgICBDS19PRkZfVCBmaWxlc2l6ZTsKLSAgICBjaGFyICpzcCA9IE5V TEwsICp6cSwgKm5wID0gTlVMTDsKLSAgICBjaGFyICpzdiA9IE5VTEwsICpwID0gTlVMTDsKLSNp ZmRlZiBEVElMREUKLSAgICBjaGFyICpkaXJwOwotI2VuZGlmIC8qIERUSUxERSAqLwotCi0jaWZu ZGVmIE5PUEFSVElBTAotI2lmbmRlZiBPUzIKLSNpZmRlZiBPU0sKLSAgICAvKiBUaGlzIGxhcmdl IGFycmF5IGlzIGR5bmFtaWMgZm9yIE9TLTkgLS0gc2hvdWxkIGRvIGZvciBvdGhlcnMgdG9vLi4u ICovCi0gICAgZXh0ZXJuIGNoYXIgKiptdGNoczsKLSNlbHNlCi0jaWZkZWYgVU5JWAotICAgIC8q IE9LLCBmb3IgVU5JWCB0b28gKi8KLSAgICBleHRlcm4gY2hhciAqKm10Y2hzOwotI2Vsc2UKLSNp ZmRlZiBWTVMKLSAgICBleHRlcm4gY2hhciAqKm10Y2hzOwotI2Vsc2UKLSAgICBleHRlcm4gY2hh ciAqbXRjaHNbXTsKLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYg LyogT1NLICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9QQVJUSUFMICovCi0KLSAg ICBpZiAoIXhobHApIHhobHAgPSAiIjsKLSAgICBpZiAoIXhkZWYpIHhkZWYgPSAiIjsKLQotI2lm bmRlZiBOT0xBU1RGSUxFCi0gICAgbWFrZXN0cigmdG1wbGFzdGZpbGUsTlVMTCk7Ci0jZW5kaWYJ LyogTk9MQVNURklMRSAqLwotICAgIG56eG9wdHMgPSAwOwkJCS8qIHp4cGFuZCgpIG9wdGlvbnMg Ki8KLSAgICBkZWJ1ZyhGMTAxLCJjbWlmaSBkIiwiIixkKTsKLSAgICBpZiAoZCAmIDIpIHsJCQkv KiBkICYgMiBtZWFucyBkb24ndCBmb2xsb3cgc3ltbGlua3MgKi8KLQlkIF49IDI7Ci0Jbnp4b3B0 cyA9IFpYX05PTElOS1M7Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsImNtaWZpIG56eG9wdHMiLCIi LG56eG9wdHMpOwotICAgIGNtZmxkZmxncyA9IDA7Ci0gICAgaWYgKHBhdGgpCi0gICAgICBpZiAo ISpwYXRoKQotCXBhdGggPSBOVUxMOwotICAgIGlmIChwYXRoKSB7CQkJCS8qIE1ha2UgYSBjb3B5 IHdlIGNhbiBwb2tlICovCi0JeCA9IHN0cmxlbihwYXRoKTsKLQlucCA9IChjaGFyICopIG1hbGxv Yyh4ICsgMSk7Ci0JaWYgKG5wKSB7Ci0JICAgIHN0cmNweShucCwgcGF0aCk7Ci0JICAgIHBhdGgg PSBzcCA9IG5wOwotCX0KLSAgICB9Ci0gICAgZGVidWcoRjExMCwiY21pZmkyIHBhdGgiLHBhdGgs MCk7Ci0KLSAgICBja3N0cm5jcHkoY21kZWZhdWx0LHhkZWYsQ01ERUZBVUxUKTsgLyogQ29weSBk ZWZhdWx0ICovCi0gICAgeGRlZiA9IGNtZGVmYXVsdDsKLQotICAgIGlud29yZCA9IDA7CQkJCS8q IEluaXRpYWxpemUgY291bnRzICYgcG9pbnRlcnMgKi8KLSAgICBjYyA9IDA7Ci0gICAgeGMgPSAw OwotICAgICp4cCA9ICIiOwkJCQkvKiBQb2ludGVyIHRvIHJlc3VsdCBzdHJpbmcgKi8KLSAgICBp ZiAoKHggPSBjbWZsZ3MpICE9IDEpIHsgICAgICAgICAgICAvKiBBbHJlYWR5IGNvbmZpcm1lZD8g Ki8KLSNpZmRlZiBCU19ESVJTRVAKLQlkaXJuYW1mbGcgPSAxOwotICAgICAgICB4ID0gZ3R3b3Jk KDApOwkJCS8qIE5vLCBnZXQgYSB3b3JkICovCi0JZGlybmFtZmxnID0gMDsKLSNlbHNlCi0gICAg ICAgIHggPSBndHdvcmQoMCk7ICAgICAgICAgICAgICAgICAgLyogTm8sIGdldCBhIHdvcmQgKi8K LSNlbmRpZiAvKiBCU19ESVJTRVAgKi8KLSAgICB9IGVsc2UgewkJCQkvKiBJZiBzbywgdXNlIGRl ZmF1bHQsIGlmIGFueS4gKi8KLSAgICAgICAgaWYgKHNldGF0bSh4ZGVmLDEpIDwgMCkgewotCSAg ICBwcmludGYoIj9EZWZhdWx0IG5hbWUgdG9vIGxvbmdcbiIpOwotCSAgICBpZiAobnApIGZyZWUo bnApOwotCSAgICByZXR1cm4oLTkpOwotCX0KLSAgICB9Ci0gIGlfcGF0aDoKLSAgICAqeHAgPSBh dG1idWY7ICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byByZXN1bHQuICovCi0KLSAg ICB3aGlsZSAoMSkgewotICAgICAgICB4YyArPSBjYzsgICAgICAgICAgICAgICAgICAgICAgIC8q IENvdW50IHRoaXMgY2hhcmFjdGVyLiAqLwotICAgICAgICBkZWJ1ZyhGMTExLCJjbWlmaSBndHdv cmQiLGF0bWJ1Zix4Yyk7Ci0JZGVidWcoRjEwMSwiY21pZmkgc3dpdGNoIHgiLCIiLHgpOwotICAg ICAgICBzd2l0Y2ggKHgpIHsJCQkvKiB4ID0gZ3R3b3JkKCkgcmV0dXJuIGNvZGUgKi8KLQkgIGNh c2UgLTEwOgotCSAgICBpZiAoZ3RpbWVyKCkgPiB0aW1lbGltaXQpIHsKLSNpZmRlZiBJS1NECi0g ICAgICAgICAgICAgICAgaWYgKGluc2VydmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50 ZigiXHJcbklLU0QgSURMRSBUSU1FT1VUOiAlZCBzZWNcclxuIiwgdGltZWxpbWl0KTsKLSAgICAg ICAgICAgICAgICAgICAgZG9leGl0KEdPT0RfRVhJVCwwKTsKLSAgICAgICAgICAgICAgICB9Ci0j ZW5kaWYgLyogSUtTRCAqLwotCQkvKiBpZiAoIXF1aWV0KSBwcmludGYoIj9UaW1lZCBvdXRcbiIp OyAqLwotCQlyZXR1cm4oLTEwKTsKLQkgICAgfSBlbHNlIHsKLQkJeCA9IGd0d29yZCgwKTsKLQkJ Y29udGludWU7Ci0JICAgIH0KLQkgIGNhc2UgLTk6Ci0JICAgIHByaW50ZigiQ29tbWFuZCBvciBm aWVsZCB0b28gbG9uZ1xuIik7Ci0JICBjYXNlIC00OgkJCS8qIEVPRiAqLwotCSAgY2FzZSAtMjoJ CQkvKiBPdXQgb2Ygc3BhY2UuICovCi0JICBjYXNlIC0xOgkJCS8qIFJlcGFyc2UgbmVlZGVkICov Ci0JICAgIGlmIChucCkgZnJlZShucCk7Ci0JICAgIHJldHVybih4KTsKLQkgIGNhc2UgMToJCQkv KiBDUiAqLwotCSAgY2FzZSAwOgkJCS8qIFNQICovCi0JICAgIGlmICh4YyA9PSAwKQkJLyogSWYg bm8gaW5wdXQuLi4gKi8KLQkgICAgICAqeHAgPSB4ZGVmOwkJLyogc3Vic3RpdHV0ZSB0aGUgZGVm YXVsdCAqLwotI2lmbmRlZiBOT0xBU1RGSUxFCi0JICAgIG1ha2VzdHIoJnRtcGxhc3RmaWxlLCp4 cCk7CS8qIE1ha2UgYSBjb3B5IGJlZm9yZSBic3RyaXBwaW5nICovCi0jZW5kaWYJLyogI2lmbmRl ZiBOT0xBU1RGSUxFICovCi0JICAgICp4cCA9IGJyc3RyaXAoKnhwKTsJCS8qIFN0cmlwIGJyYWNl cyAqLwotCSAgICBpZiAoKip4cCA9PSBOVUwpIHsJCS8qIDEyIG1hciAyMDAxICovCi0JCWlmIChu cCkgZnJlZShucCk7Ci0JCXJldHVybigtMyk7Ci0JICAgIH0KLQkgICAgZGVidWcoRjExMCwiY21p ZmkgYnJzdHJpcCIsKnhwLDApOwotI2lmbmRlZiBOT1NQTAotCSAgICBpZiAoZikgewkJCS8qIElm IGEgY29udmVyc2lvbiBmdW5jdGlvbiBpcyBnaXZlbiAqLwotI2lmZGVmIERPQ0hLVkFSCi0JCWNo YXIgKnMgPSAqeHA7CQkvKiBTZWUgaWYgdGhlcmUgYXJlIGFueSB2YXJpYWJsZXMgaW4gKi8KLQkJ aW50IHg7Ci0JCXdoaWxlICgqcykgewkJLyogdGhlIHN0cmluZyBhbmQgaWYgc28sIGV4cGFuZCB0 aGVtICovCi0JCSAgICB4ID0gY2hrdmFyKHMpOwotCQkgICAgLyogZGVidWcoRjExMSwiY21pZmkg Y2hrdmFyIiwqeHAseCk7ICovCi0JCSAgICBpZiAoeCkgewotI2VuZGlmIC8qIERPQ0hLVkFSICov Ci0JCQl6cSA9IGF0eGJ1ZjsKLQkJCWF0eG4gPSBDTURCTDsKLQkJCWlmICgoKmYpKCp4cCwmenEs JmF0eG4pIDwgMCkgewotCQkJICAgIGlmIChucCkgZnJlZShucCk7Ci0JCQkgICAgcmV0dXJuKC0y KTsKLQkJCX0KLQkJCSp4cCA9IGF0eGJ1ZjsKLQkJCWlmICghYXR4YnVmWzBdKQotCQkJICAqeHAg PSB4ZGVmOwotI2lmZGVmIERPQ0hLVkFSCi0JCQlicmVhazsKLQkJICAgIH0KLQkJICAgIHMrKzsK LQkJfQotI2VuZGlmIC8qIERPQ0hLVkFSICovCi0JICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwot CSAgICBpZiAoKip4cCA9PSBOVUwpIHsJCS8qIDEyIG1hciAyMDAxICovCi0JCWlmIChucCkgZnJl ZShucCk7Ci0JCXJldHVybigtMyk7Ci0JICAgIH0KLSNpZmRlZiBEVElMREUKLQkgICAgaWYgKGRp cmZsZykgewotCQlkaXJwID0gdGlsZGVfZXhwYW5kKCp4cCk7IC8qIEV4cGFuZCB0aWxkZSwgaWYg YW55LCAqLwotCQlpZiAoKmRpcnAgIT0gJ1wwJykgewkvKiBpbiB0aGUgYXRvbSBidWZmZXIuICov Ci0JCSAgICBpZiAoc2V0YXRtKGRpcnAsMSkgPCAwKSB7Ci0JCQlwcmludGYoIkV4cGFuZGVkIG5h bWUgdG9vIGxvbmdcbiIpOwotCQkJaWYgKG5wKSBmcmVlKG5wKTsKLQkJCXJldHVybigtOSk7Ci0J CSAgICB9Ci0JCX0KLQkJKnhwID0gYXRtYnVmOwotCQlkZWJ1ZyhGMTEwLCJjbWlmaSB0aWxkZV9l eHBhbmQiLCp4cCwwKTsKLQkgICAgfQotI2VuZGlmIC8qIERUSUxERSAqLwotCSAgICBpZiAoIXN2 KSB7CQkJLyogT25seSBkbyB0aGlzIG9uY2UgKi8KLQkJc3YgPSBtYWxsb2MoKGludClzdHJsZW4o KnhwKSsxKTsgLyogTWFrZSBhIHNhZmUgY29weSAqLwotCQlpZiAoIXN2KSB7Ci0JCSAgICBwcmlu dGYoIj9jbWlmaTogbWFsbG9jIGVycm9yXG4iKTsKLQkJICAgIGlmIChucCkgZnJlZShucCk7Ci0J CSAgICByZXR1cm4oLTkpOwotCQl9Ci0JCXN0cmNweShzdiwqeHApOwotCQlkZWJ1ZyhGMTEwLCJj bWlmaSBzdiIsc3YsMCk7Ci0JICAgIH0KLQotLyogVGhpcyBpcyB0byBnZXQgYXJvdW5kICJjZCAv IiBmYWlsaW5nIGJlY2F1c2UgInRvbyBtYW55IGRpcmVjdG9yaWVzIG1hdGNoIiAqLwotCi0JICAg IGV4cGFuZGVkID0gMDsJCS8qIERpZG4ndCBjYWxsIHp4cGFuZCAqLwotI2lmZGVmIGRhdGFnZW5l cmFsCi0JICAgIGRlYnVnKEYxMTAsImNtaWZpIGlzZGlyIDEiLCp4cCwwKTsKLQkgICAgewotCQlp bnQgeTsgY2hhciAqczsKLQkJcyA9ICp4cDsKLQkJeSA9IHN0cmxlbihzKTsKLQkJaWYgKHkgPiAx ICYmCi0JCSAgICAoc1t5LTFdID09ICc6JyB8fAotCQkgICAgIHNbeS0xXSA9PSAnXicgfHwKLQkJ ICAgICBzW3ktMV0gPT0gJz0nKQotCQkgICAgKQotCQkgIHNbeS0xXSA9IE5VTDsKLQkgICAgfQot CSAgICBkZWJ1ZyhGMTEwLCJjbWlmaSBpc2RpciAyIiwqeHAsMCk7Ci0jZW5kaWYgLyogIGRhdGFn ZW5lcmFsICovCi0KLSNpZmRlZiBWTVMKLQkgICAgaWYgKGRpcmZsZykgewotCQlpZiAoIXN0cmNt cCgqeHAsIi4uIikpIHsgLyogRm9yIFVOSVhlcnMuLi4gKi8KLQkJICAgIHNldGF0bSgiLSIsMCk7 Ci0JCSAgICAqeHAgPSBhdG1idWY7Ci0JCX0gZWxzZSBpZiAoIXN0cmNtcCgqeHAsIi4iKSkgewot CQkgICAgc2V0YXRtKCJbXSIsMCk7Ci0JCSAgICAqeHAgPSBhdG1idWY7Ci0JCX0KLQkgICAgfQot I2VuZGlmIC8qIFZNUyAqLwotCSAgICBpdHNhZGlyID0gaXNkaXIoKnhwKTsJLyogSXMgaXQgYSBk aXJlY3Rvcnk/ICovCi0JICAgIGRlYnVnKEYxMTEsImNtaWZpIGl0c2FkaXIiLCp4cCxpdHNhZGly KTsKLSNpZmRlZiBWTVMKLQkgICAgLyogSWYgdGhleSBzYWlkICJibGFoIiB3aGVyZSAiYmxhaC5k aXIiIGlzIGEgZGlyZWN0b3J5Li4uICovCi0JICAgIC8qIGNoYW5nZSBpdCB0byBbLmJsYWhdLiAq LwotCSAgICBpZiAoIWl0c2FkaXIpIHsKLQkJY2hhciB0bXBidWZbNjAwXTsKLQkJaW50IGZsYWcg PSAwOyBjaGFyIGMsICogcDsKLQkJcCA9ICp4cDsKLQkJd2hpbGUgKChjID0gKnArKykgJiYgIWZs YWcpCi0JCSAgaWYgKGNrc3RyY2hyKCIuW106Kj88PiIsYykpCi0JCSAgICBmbGFnID0gMTsKLQkJ ZGVidWcoRjExMSwiY21pZmkgVk1TIGRpcm5hbWUgZmxhZyIsKnhwLGZsYWcpOwotCQlpZiAoIWZs YWcpIHsKLQkJICAgIGNrbWFrbXNnKHRtcGJ1ZixUTVBCVUZTSVosIlsuIiwqeHAsIl0iLE5VTEwp OwotCQkgICAgaXRzYWRpciA9IGlzZGlyKHRtcGJ1Zik7Ci0JCSAgICBpZiAoaXRzYWRpcikgewot CQkJc2V0YXRtKHRtcGJ1ZiwwKTsKLQkJCSp4cCA9IGF0bWJ1ZjsKLQkJICAgIH0KLQkJICAgIGRl YnVnKEYxMTEsImNtaWZpIFZNUyBkaXJuYW1lIGZsYWcgaXRzYWRpciIsKnhwLGl0c2FkaXIpOwot CQl9Ci0JICAgIH0gZWxzZSBpZiAoaXRzYWRpciA9PSAxICYmICooeHBbMF0pID09ICcuJyAmJiAq KHhwWzFdKSkgewotCQljaGFyICpwOwotCQlpZiAocCA9IG1hbGxvYyhjYyArIDQpKSB7Ci0JCSAg ICBja21ha21zZyhwLGNjKzQsIlsiLCp4cCwiXSIsTlVMTCk7Ci0JCSAgICBzZXRhdG0ocCwwKTsK LQkJICAgICp4cCA9IGF0bWJ1ZjsKLQkJICAgIGRlYnVnKEYxMTAsImNtZGlyIC5mb28iLCp4cCww KTsKLQkJICAgIGZyZWUocCk7Ci0JCX0KLQkgICAgfSBlbHNlIGlmIChpdHNhZGlyID09IDIgJiYg IWRpcmFjdGl2ZSkgewotCQlpbnQgeDsJCQkvKiBbRk9PXUJBUi5ESVIgaW5zdGVhZCBvZiBbRk9P LkJBUl0gKi8KLQkJY2hhciAqcDsKLQkJcCA9IG1hbGxvYyhjYyArIDQpOwotCQlpZiAocCkgewot CQkgICAgeCA9IGN2dGRpcigqeHAscCxBVE1CTCk7IC8qIENvbnZlcnQgdG8gW0ZPTy5CQVJdICov Ci0JCSAgICBpZiAoeCA+IDApIHsKLQkJCXNldGF0bShwLDApOwotCQkJKnhwID0gYXRtYnVmOwot CQkJZGVidWcoRjExMCwiY21kaXIgY3Z0ZGlyIiwqeHAsMCk7Ci0JCSAgICB9Ci0JCSAgICBmcmVl KHApOwotCQl9Ci0JICAgIH0KLSNlbmRpZiAvKiBWTVMgKi8KLQotCSAgICBkZWJ1ZyhGMTAxLCJj bWlmaSBkaXJmbGciLCIiLGRpcmZsZyk7Ci0JICAgIGlmIChkaXJmbGcpIHsJCS8qIFBhcnNpbmcg YSBkaXJlY3RvcnkgbmFtZT8gKi8KLQkJLyogWWVzLCBkb2VzIGl0IGNvbnRhaW4gd2lsZGNhcmRz PyAqLwotCQlpZiAoaXN3aWxkKCp4cCkgfHwKLQkJICAgIChkaXJhY3RpdmUgJiYgKCFzdHJjbXAo KnhwLCIuIikgIHx8ICFzdHJjbXAoKnhwLCIuLiIpKSkKLQkJICAgICkgewotCQkgICAgbnp4b3B0 cyB8PSBaWF9ESVJPTkxZOyAvKiBNYXRjaCBvbmx5IGRpcmVjdG9yeSBuYW1lcyAqLwotCQkgICAg aWYgKG1hdGNoZG90KSAgbnp4b3B0cyB8PSBaWF9NQVRDSERPVDsKLQkJICAgIGlmIChyZWN1cnNp dmUpIG56eG9wdHMgfD0gWlhfUkVDVVJTRTsKLQkJICAgIGRlYnVnKEYxMTEsImNtaWZpIG56eG9w dHMgMiIsKnhwLG56eG9wdHMpOwotCQkgICAgeSA9IG56eHBhbmQoKnhwLG56eG9wdHMpOwotCQkg ICAgZGVidWcoRjExMSwiY21pZmkgbnp4cGFuZCAyIiwqeHAseSk7Ci0JCSAgICBuZmlsZXMgPSB5 OwotCQkgICAgZXhwYW5kZWQgPSAxOwotCQl9IGVsc2UgewotI2lmZGVmIFZNUwotLyoKLSAgVGhp cyBpcyB0byBhbGxvdyAoZS5nLikgImNkIGZvbyIsIHdoZXJlIEZPTy5ESVI7MSBpcyBpbiB0aGUK LSAgY3VycmVudCBkaXJlY3RvcnkuCi0qLwotCQkgICAgZGVidWcoRjExMSwiY21kaXIgaXRzYWRp ciIsKnhwLGl0c2FkaXIpOwotCQkgICAgaWYgKCFpdHNhZGlyKSB7Ci0JCQljaGFyICpzOwotCQkJ aW50IG47Ci0JCQlzID0gKnhwOwotCQkJbiA9IHN0cmxlbihzKTsKLQkJCWlmIChuID4gMCAmJgot I2lmZGVmIENPTU1FTlQKLQkJCSAgICAqcyAhPSAnWycgJiYgc1tuLTFdICE9ICddJyAmJgotCQkJ ICAgICpzICE9ICc8JyAmJiBzW24tMV0gIT0gJz4nICYmCi0jZWxzZQotCQkJICAgIGNraW5kZXgo IlsiLHMsMCwwLDEpID09IDAgJiYKLQkJCSAgICBja2luZGV4KCI8IixzLDAsMCwxKSA9PSAwICYm Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCQkJICAgIHNbbi0xXSAhPSAnOicpIHsKLQkJCSAgICBj aGFyICogZGlyYnVmID0gTlVMTDsKLQkJCSAgICBkaXJidWYgPSAoY2hhciAqKW1hbGxvYyhuKzQp OwotCQkJICAgIGlmIChkaXJidWYpIHsKLQkJCQlpZiAoKnMgPT0gJy4nKQotCQkJCSAgY2ttYWtt c2coZGlyYnVmLG4rNCwiWyIscywiXSIsTlVMTCk7Ci0JCQkJZWxzZQotCQkJCSAgY2ttYWttc2co ZGlyYnVmLG4rNCwiWy4iLHMsIl0iLE5VTEwpOwotCQkJCWl0c2FkaXIgPSBpc2RpcihkaXJidWYp OwotCQkJCWRlYnVnKEYxMTEsImNtZGlyIGRpcmJ1ZiIsZGlyYnVmLGl0c2FkaXIpOwotCQkJCWlm IChpdHNhZGlyKSB7Ci0JCQkJICAgIHNldGF0bShkaXJidWYsMCk7Ci0JCQkJICAgICp4cCA9IGF0 bWJ1ZjsKLQkJCQkgICAgZGVidWcoRjExMCwiY21kaXIgbmV3ICp4cCIsKnhwLDApOwotCQkJCX0K LQkJCQlmcmVlKGRpcmJ1Zik7Ci0JCQkgICAgfQotCi0vKiBUaGlzIGlzIHRvIGFsbG93IENEUEFU SCB0byB3b3JrIGluIFZNUy4uLiAqLwotCi0JCQl9IGVsc2UgaWYgKG4gPiAwKSB7Ci0JCQkgICAg Y2hhciAqIHA7IGludCBpLCBqLCBrLCBkOwotCQkJICAgIGNoYXIgcmJbMl0gPSAiXSI7Ci0JCQkg ICAgaWYgKHAgPSBtYWxsb2MoeCArIDgpKSB7Ci0JCQkJY2tzdHJuY3B5KHAsKnhwLHgrOCk7Ci0J CQkJaSA9IGNraW5kZXgoIi4iLHAsLTEsMSwxKTsKLQkJCQlkID0gY2tpbmRleCgiLmRpciIscCww LDAsMCk7Ci0JCQkJaiA9IGNraW5kZXgoIl0iLHAsLTEsMSwxKTsKLQkJCQlpZiAoaiA9PSAwKSB7 Ci0JCQkJICAgIGogPSBja2luZGV4KCI+IixwLC0xLDEsMSk7Ci0JCQkJICAgIHJiWzBdID0gJz4n OwotCQkJCX0KLQkJCQlrID0gY2tpbmRleCgiOiIscCwtMSwxLDEpOwotCQkJCWlmIChpIDwgaiB8 fCBpIDwgaykgaSA9IDA7Ci0JCQkJaWYgKGQgPCBqIHx8IGQgPCBrKSBkID0gMDsKLQkJCQkvKiBD aGFuZ2UgW0ZPT11CQVIgb3IgW0ZPT11CQVIuRElSICovCi0JCQkJLyogdG8gW0ZPTy5CQVJdICov Ci0JCQkJaWYgKGogPiAwICYmIGogPCBuKSB7Ci0JCQkJICAgIHBbai0xXSA9ICcuJzsKLQkJCQkg ICAgaWYgKGQgPiAwKSBwW2QtMV0gPSBOVUw7Ci0JCQkJICAgIGNrc3RybmNhdChwLHJiLHgrOCk7 Ci0JCQkJICAgIGRlYnVnKEYxMTAsImNtZGlyIHh4eCIscCwwKTsKLQkJCQl9Ci0JCQkJaXRzYWRp ciA9IGlzZGlyKHApOwotCQkJCWRlYnVnKEYxMTEsImNtZGlyIHAiLHAsaXRzYWRpcik7Ci0JCQkJ aWYgKGl0c2FkaXIpIHsKLQkJCQkgICAgc2V0YXRtKHAsMCk7Ci0JCQkJICAgICp4cCA9IGF0bWJ1 ZjsKLQkJCQkgICAgZGVidWcoRjExMCwiY21kaXIgbmV3ICp4cCIsKnhwLDApOwotCQkJCX0KLQkJ CQlmcmVlKHApOwotCQkJICAgIH0KLQkJCX0KLQkJICAgIH0KLSNlbmRpZiAvKiBWTVMgKi8KLQkJ ICAgIHkgPSAoIWl0c2FkaXIpID8gMCA6IDE7Ci0JCSAgICBkZWJ1ZyhGMTExLCJjbWlmaSB5IGl0 c2FkaXIiLCp4cCx5KTsKLQkJfQotCSAgICB9IGVsc2UgewkJCS8qIFBhcnNpbmcgYSBmaWxlbmFt ZS4gKi8KLQkJZGVidWcoRjExMCwiY21pZmkgKnhwIHByZS16eHBhbmQiLCp4cCwwKTsKLSNpZm5k ZWYgQ09NTUVOVAotCQluenhvcHRzIHw9IChkID09IDApID8gWlhfRklMT05MWSA6IDA7IC8qIFNv IGFsd2F5cyBleHBhbmQuICovCi0JCWlmIChtYXRjaGRvdCkgIG56eG9wdHMgfD0gWlhfTUFUQ0hE T1Q7Ci0JCWlmIChyZWN1cnNpdmUpIG56eG9wdHMgfD0gWlhfUkVDVVJTRTsKLQkJeSA9IG56eHBh bmQoKnhwLG56eG9wdHMpOwotI2Vsc2UKLS8qIEhlcmUgd2UncmUgdHJ5aW5nIHRvIGZpeCBhIHBy b2JsZW0gaW4gd2hpY2ggYSBkaXJlY3RvcnkgbmFtZSBpcyBhY2NlcHRlZCAqLwotLyogYXMgYSBm aWxlbmFtZSwgYnV0IHRoaXMgYnJlYWtzIHRvbyBtYW55IG90aGVyIHRoaW5ncy4gKi8KLQkJLyog bnp4b3B0cyA9IDA7ICovCi0JCWlmICghZCkgewotCQkgICAgaWYgKGl0c2FkaXIgJiAhaXN3aWxk KCp4cCkpIHsKLQkJCWRlYnVnKEYxMDAsImNtaWZpIGRpciB3aGVuIGZpbG9ubHkiLCIiLDApOwot CQkJcHJpbnRmKCI/Tm90IGEgcmVndWxhciBmaWxlOiBcIiVzXCJcbiIsKnhwKTsKLQkJCWlmIChz dikgZnJlZShzdik7Ci0JCQlpZiAobnApIGZyZWUobnApOwotCQkJcmV0dXJuKC05KTsKLQkJICAg IH0gZWxzZSB7Ci0JCQluenhvcHRzIHw9IFpYX0ZJTE9OTFk7Ci0JCQlpZiAobWF0Y2hkb3QpICBu enhvcHRzIHw9IFpYX01BVENIRE9UOwotCQkJaWYgKHJlY3Vyc2l2ZSkgbnp4b3B0cyB8PSBaWF9S RUNVUlNFOwotCQkJeSA9IG56eHBhbmQoKnhwLG56eG9wdHMpOwotCQkgICAgfQotCQl9Ci0jZW5k aWYgLyogQ09NTUVOVCAqLwotCQluZmlsZXMgPSB5OwotCQlkZWJ1ZyhGMTExLCJjbWlmaSB5IG56 eHBhbmQiLCp4cCx5KTsKLQkJZGVidWcoRjExMSwiY21pZmkgeSBhdG1idWYiLGF0bWJ1ZixpdHNh ZGlyKTsKLQkJZXhwYW5kZWQgPSAxOwotCSAgICB9Ci0JICAgIC8qIGRvbXlkaXIoKSBjYWxscyB6 eHJld2luZCgpIHNvIHdlIE1VU1QgY2FsbCBuenhwYW5kKCkgaGVyZSAqLwotCSAgICBpZiAoIWV4 cGFuZGVkICYmIGRpcmFjdGl2ZSkgewotCQlkZWJ1ZyhGMTEwLCJjbWlmaSBkaXJhY3RpdmUgY2F0 Y2gtYWxsIHp4cGFuZCIsKnhwLDApOwotCQluenhvcHRzIHw9IChkID09IDApID8gWlhfRklMT05M WSA6IChkaXJmbGcgPyBaWF9ESVJPTkxZIDogMCk7Ci0JCWlmIChtYXRjaGRvdCkgIG56eG9wdHMg fD0gWlhfTUFUQ0hET1Q7Ci0JCWlmIChyZWN1cnNpdmUpIG56eG9wdHMgfD0gWlhfUkVDVVJTRTsK LQkJeSA9IG56eHBhbmQoKnhwLG56eG9wdHMpOwotCQlkZWJ1ZyhGMTExLCJjbWlmaSBkaXJhY3Rp dmUgbnp4cGFuZCIsKnhwLHkpOwotCQluZmlsZXMgPSB5OwotCQlleHBhbmRlZCA9IDE7Ci0JICAg IH0KLQkgICAgKndpbGQgPSAoaXN3aWxkKHN2KSB8fCAoeSA+IDEpKSAmJiAoaXRzYWRpciA9PSAw KTsKLQotI2lmZGVmIFJFQ1VSU0lWRQotCSAgICBpZiAoISp3aWxkKSAqd2lsZCA9IHJlY3Vyc2l2 ZTsKLSNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KLQotCSAgICBkZWJ1ZyhGMTExLCJjbWlmaSBzdiB3 aWxkIixzdiwqd2lsZCk7Ci0JICAgIGRlYnVnKEYxMDEsImNtaWZpIHkiLCIiLHkpOwotCSAgICBp ZiAoZGlyZmxnICYmICp3aWxkICYmIGNkYWN0aXZlKSB7Ci0JCWlmICh5ID4gMSkgewotCQkgICAg cHJpbnRmKCI/V2lsZGNhcmQgbWF0Y2hlcyBtb3JlIHRoYW4gb25lIGRpcmVjdG9yeVxuIik7Ci0J CSAgICBpZiAoc3YpIGZyZWUoc3YpOwotCQkgICAgaWYgKG5wKSBmcmVlKG5wKTsKLQkJICAgIHJl dHVybigtOSk7Ci0JCX0gZWxzZSB7Ci0JCSAgICB6bmV4dCgqeHApOwotCQl9Ci0JICAgIH0KLQkg ICAgaWYgKGl0c2FkaXIgJiYgZCAmJiAhZGlyZmxnKSB7IC8qIEl0J3MgYSBkaXJlY3RvcnkgYW5k IG5vdCB3aWxkICovCi0JCWlmIChzdikgZnJlZShzdik7CS8qIGFuZCBpdCdzIG9rIHRvIHBhcnNl IGRpcmVjdG9yaWVzICovCi0JCWlmIChucCkgZnJlZShucCk7Ci0jaWZuZGVmIE5PTEFTVEZJTEUK LQkJbWFrZXN0cigmbGFzdGZpbGUsdG1wbGFzdGZpbGUpOwotI2VuZGlmCS8qIE5PTEFTVEZJTEUg Ki8KLQkJcmV0dXJuKHgpOwotCSAgICB9Ci0JICAgIGlmICh5ID09IDApIHsJCS8qIEZpbGUgd2Fz IG5vdCBmb3VuZCAqLwotCQlpbnQgZG9zZWFyY2ggPSAwOwotCQlkb3NlYXJjaCA9IChwYXRoICE9 IE5VTEwpOyAvKiBBIHNlYXJjaCBwYXRoIHdhcyBnaXZlbiAqLwotCQlpZiAoZG9zZWFyY2gpIHsK LQkJICAgIGRvc2VhcmNoID0gaGFzbm9wYXRoKHN2KTsgLyogRmlsZW5hbWUgaW5jbHVkZXMgbm8g cGF0aCAqLwotCQkgICAgZGVidWcoRjExMSwiY21pZmlwIGhhc25vcGF0aCIsc3YsZG9zZWFyY2gp OwotCQl9Ci0JCWlmIChkb3NlYXJjaCkgewkJLyogU2VhcmNoIHRoZSBwYXRoLi4uICovCi0JCSAg ICBjaGFyICogcHRyID0gcGF0aDsKLQkJICAgIGNoYXIgYzsKLQkJICAgIHdoaWxlICgxKSB7Ci0J CQljID0gKnB0cjsKLQkJCWlmIChjID09IFBBVEhTRVAgfHwgYyA9PSBOVUwpIHsKLQkJCSAgICBp ZiAoISpwYXRoKSB7Ci0JCQkJcGF0aCA9IE5VTEw7Ci0JCQkJYnJlYWs7Ci0JCQkgICAgfQotCQkJ ICAgICpwdHIgPSBOVUw7Ci0jaWZkZWYgVU5JWAotLyogQnkgZGVmaW5pdGlvbiBvZiBDRFBBVEgs IGFuIGVtcHR5IG1lbWJlciBkZW5vdGVzIHRoZSBjdXJyZW50IGRpcmVjdG9yeSAqLwotCQkJICAg IGlmICghKnBhdGgpCi0JCQkgICAgICBja3N0cm5jcHkoYXRtYnVmLCIuIixBVE1CTCk7Ci0JCQkg ICAgZWxzZQotI2VuZGlmIC8qIFVOSVggKi8KLQkJCSAgICAgIGNrc3RybmNweShhdG1idWYscGF0 aCxBVE1CTCk7Ci0jaWZkZWYgVk1TCi0JCQkgICAgYXRtYnVmW0FUTUJMXSA9IE5VTDsKLS8qIElm IHdlIGhhdmUgYSBsb2dpY2FsIG5hbWUsIGV2YWx1YXRlIGl0IHJlY3Vyc2l2ZWx5ICovCi0JCQkg ICAgaWYgKCoocHRyLTEpID09ICc6JykgeyAvKiBMb2dpY2FsIG5hbWUgZW5kcyBpbiA6ICovCi0J CQkJY2hhciAqcDsgaW50IG47Ci0JCQkJd2hpbGUgKCgobiA9IHN0cmxlbihhdG1idWYpKSAgPiAw KSAmJgotCQkJCSAgICAgICBhdG1idWZbbi0xXSA9PSAnOicpIHsKLQkJCQkgICAgYXRtYnVmW24t MV0gPSBOVUw7Ci0JCQkJICAgIGZvciAocCA9IGF0bWJ1ZjsgKnA7IHArKykKLQkJCQkgICAgICBp ZiAoaXNsb3dlcigqcCkpICpwID0gdG91cHBlcigqcCk7Ci0JCQkJICAgIGRlYnVnKEYxMTEsImNt ZGlyIENEUEFUSCBMTiAxIixhdG1idWYsbik7Ci0JCQkJICAgIHAgPSBnZXRlbnYoYXRtYnVmKTsK LQkJCQkgICAgZGVidWcoRjExMCwiY21kaXIgQ0RQQVRIIExOIDIiLHAsMCk7Ci0JCQkJICAgIGlm ICghcCkKLQkJCQkgICAgICBicmVhazsKLQkJCQkgICAgc3RybmNweShhdG1idWYscCxBVE1CTCk7 Ci0JCQkJICAgIGF0bWJ1ZltBVE1CTF0gPSBOVUw7Ci0JCQkJfQotCQkJICAgIH0KLSNlbHNlCi0j aWZkZWYgT1MyCi0JCQkgICAgaWYgKCoocHRyLTEpICE9ICdcXCcgJiYgKihwdHItMSkgIT0gJy8n KQotCQkJICAgICAgY2tzdHJuY2F0KGF0bWJ1ZiwiXFwiLEFUTUJMKTsKLSNlbHNlCi0jaWZkZWYg VU5JWAotCQkJICAgIGlmICgqKHB0ci0xKSAhPSAnLycpCi0JCQkgICAgICBja3N0cm5jYXQoYXRt YnVmLCIvIixBVE1CTCk7Ci0jZWxzZQotI2lmZGVmIGRhdGFnZW5lcmFsCi0JCQkgICAgaWYgKCoo cHRyLTEpICE9ICc6JykKLQkJCSAgICAgIGNrc3RybmNhdChhdG1idWYsIjoiLEFUTUJMKTsKLSNl bmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBPUzIg Ki8KLSNlbmRpZiAvKiBWTVMgKi8KLQkJCSAgICBja3N0cm5jYXQoYXRtYnVmLHN2LEFUTUJMKTsK LQkJCSAgICBkZWJ1ZyhGMTEwLCJjbWlmaXAgYWRkIHBhdGgiLGF0bWJ1ZiwwKTsKLQkJCSAgICBp ZiAoYyA9PSBQQVRIU0VQKSBwdHIrKzsKLQkJCSAgICBwYXRoID0gcHRyOwotCQkJICAgIGJyZWFr OwotCQkJfQotCQkJcHRyKys7Ci0JCSAgICB9Ci0JCSAgICB4ID0gMTsKLQkJICAgIGlud29yZCA9 IDA7Ci0JCSAgICBjYyA9IDA7Ci0JCSAgICB4YyA9IChpbnQpIHN0cmxlbihhdG1idWYpOwotCQkg ICAgKnhwID0gIiI7Ci0JCSAgICBnb3RvIGlfcGF0aDsKLQkJfQotCQlpZiAoZCkgewotCQkgICAg aWYgKHN2KSBmcmVlKHN2KTsKLQkJICAgIGlmIChucCkgZnJlZShucCk7Ci0JCSAgICByZXR1cm4o LTIpOwotCQl9IGVsc2UgewotCQkgICAgaWYgKCFub21zZykgewotI2lmZGVmIENLUk9PVAotCQkJ aWYgKGNrcm9vdGVycikKLQkJCSAgcHJpbnRmKCI/T2ZmIExpbWl0czogJXNcbiIsc3YpOwotCQkJ ZWxzZQotI2VuZGlmIC8qIENLUk9PVCAqLwotCQkJICBpZiAoIXF1aWV0KQotCQkJICAgIHByaW50 ZigiP05vICVzIG1hdGNoIC0gJXNcbiIsCi0JCQkJIGRpcmZsZyA/ICJkaXJlY3RvcmllcyIgOiAi ZmlsZXMiLCBzdik7Ci0JCSAgICB9Ci0JCSAgICBpZiAoc3YpIGZyZWUoc3YpOwotCQkgICAgaWYg KG5wKSBmcmVlKG5wKTsKLQkJICAgIHJldHVybigtOSk7Ci0JCX0KLQkgICAgfSBlbHNlIGlmICh5 IDwgMCkgewotI2lmZGVmIENLUk9PVAotCQlpZiAoY2tyb290ZXJyKQotCQkgIHByaW50ZigiP09m ZiBMaW1pdHM6ICVzXG4iLHN2KTsKLQkJZWxzZQotI2VuZGlmIC8qIENLUk9PVCAqLwotCQkgIHBy aW50ZigiP1RvbyBtYW55ICVzIG1hdGNoIC0gJXNcbiIsCi0JCQkgZGlyZmxnID8gImRpcmVjdG9y aWVzIiA6ICJmaWxlcyIsIHN2KTsKLQkJaWYgKHN2KSBmcmVlKHN2KTsKLQkJaWYgKG5wKSBmcmVl KG5wKTsKLQkJcmV0dXJuKC05KTsKLQkgICAgfSBlbHNlIGlmICgqd2lsZCB8fCB5ID4gMSkgewot CQlpZiAoc3YpIGZyZWUoc3YpOwotCQlpZiAobnApIGZyZWUobnApOwotI2lmbmRlZiBOT0xBU1RG SUxFCi0JCW1ha2VzdHIoJmxhc3RmaWxlLHRtcGxhc3RmaWxlKTsKLSNlbmRpZgkvKiBOT0xBU1RG SUxFICovCi0JCXJldHVybih4KTsKLQkgICAgfQotCi0JICAgIC8qIElmIG5vdCB3aWxkLCBzZWUg aWYgaXQgZXhpc3RzIGFuZCBpcyByZWFkYWJsZS4gKi8KLQotCSAgICBkZWJ1ZyhGMTExLCJjbWlm aSBzdiBub3Qgd2lsZCIsc3YsKndpbGQpOwotCSAgICBpZiAoZXhwYW5kZWQpCi0JICAgICAgem5l eHQoKnhwKTsJCS8qIEdldCBmaXJzdCAob25seT8pIG1hdGNoaW5nIGZpbGUgKi8KLQkgICAgaWYg KGRpcmZsZykJCQkvKiBNYXliZSB3aWxkIGFuZCBleHBhbmRlZCAqLwotCSAgICAgIGl0c2FkaXIg PSBpc2RpcigqeHApOwkvKiBzbyBkbyB0aGlzIGFnYWluLiAqLwotCSAgICBmaWxlc2l6ZSA9IGRp cmZsZyA/IGl0c2FkaXIgOiB6Y2hraSgqeHApOyAvKiBDaGVjayBhY2Nlc3NpYmlsaXR5ICovCi0J ICAgIGlmIChleHBhbmRlZCkgewotI2lmZGVmIFpYUkVXSU5ECi0JCW5maWxlcyA9IHp4cmV3aW5k KCk7CS8qIFJld2luZCBzbyBuZXh0IHpuZXh0KCkgZ2V0cyAxc3QgKi8KLSNlbHNlCi0KLQkJbnp4 b3B0cyB8PSBkaXJmbGcgPyBaWF9ESVJPTkxZIDogMDsKLQkJaWYgKG1hdGNoZG90KSAgbnp4b3B0 cyB8PSBaWF9NQVRDSERPVDsKLQkJaWYgKHJlY3Vyc2l2ZSkgbnp4b3B0cyB8PSBaWF9SRUNVUlNF OwotCQluZmlsZXMgPSBuenhwYW5kKCp4cCxuenhvcHRzKTsKLSNlbmRpZiAvKiBaWFJFV0lORCAq LwotCSAgICB9Ci0JICAgIGRlYnVnKEYxMTEsImNtaWZpIG5maWxlcyIsKnhwLG5maWxlcyk7Ci0J ICAgIGRlYnVnKEYxMDEsImNtaWZpIGZpbGVzaXplIiwiIixmaWxlc2l6ZSk7Ci0JICAgIGZyZWUo c3YpOwkJCS8qIGRvbmUgd2l0aCB0aGlzICovCi0JICAgIHN2ID0gTlVMTDsKLQkgICAgaWYgKGRp cmZsZyAmJiAhZmlsZXNpemUpIHsKLQkJcHJpbnRmKCI/Tm90IGEgZGlyZWN0b3J5IC0gJXNcbiIs KnhwKTsKLSNpZmRlZiBDS0NIQU5ORUxJTwotCQl6X2Vycm9yID0gRlhfQUNDOwotI2VuZGlmIC8q IENLQ0hBTk5FTElPICovCi0JCXJldHVybigtOSk7Ci0JICAgIH0gZWxzZSBpZiAoZmlsZXNpemUg PT0gKENLX09GRl9UKS0zKSB7Ci0JCWlmICgheGNtZmRiKSB7Ci0JCSAgICBpZiAoZGlyYWN0aXZl KQotCQkgICAgICAvKiBEb24ndCBzaG93IGZpbGVuYW1lIGlmIHdlJ3JlIG5vdCBhbGxvd2VkIHRv IHNlZSBpdCAqLwotCQkgICAgICBwcmludGYoIj9SZWFkIHBlcm1pc3Npb24gZGVuaWVkXG4iKTsK LQkJICAgIGVsc2UKLQkJICAgICAgcHJpbnRmKCI/UmVhZCBwZXJtaXNzaW9uIGRlbmllZCAtICVz XG4iLCp4cCk7Ci0JCX0KLQkJaWYgKG5wKSBmcmVlKG5wKTsKLSNpZmRlZiBDS0NIQU5ORUxJTwot CQl6X2Vycm9yID0gRlhfQUNDOwotI2VuZGlmIC8qIENLQ0hBTk5FTElPICovCi0JCXJldHVybih4 Y21mZGIgPyAtNiA6IC05KTsKLQkgICAgfSBlbHNlIGlmIChmaWxlc2l6ZSA9PSAoQ0tfT0ZGX1Qp LTIpIHsKLQkJaWYgKCFyZWN1cnNpdmUpIHsKLQkJICAgIGlmIChucCkgZnJlZShucCk7Ci0JCSAg ICBpZiAoZCkgewotI2lmbmRlZiBOT0xBU1RGSUxFCi0JCQltYWtlc3RyKCZsYXN0ZmlsZSx0bXBs YXN0ZmlsZSk7Ci0jZW5kaWYJLyogTk9MQVNURklMRSAqLwotCQkJcmV0dXJuKDApOwotCQkgICAg fQotCQkgICAgaWYgKCF4Y21mZGIpCi0JCSAgICAgIHByaW50ZigiP0ZpbGUgbm90IHJlYWRhYmxl IC0gJXNcbiIsKnhwKTsKLSNpZmRlZiBDS0NIQU5ORUxJTwotCQkgICAgel9lcnJvciA9IEZYX0FD QzsKLSNlbmRpZiAvKiBDS0NIQU5ORUxJTyAqLwotCQkgICAgcmV0dXJuKHhjbWZkYiA/IC02IDog LTkpOwotCQl9Ci0JICAgIH0gZWxzZSBpZiAoZmlsZXNpemUgPCAoQ0tfT0ZGX1QpMCkgewotCQlp ZiAobnApIGZyZWUobnApOwotCQlpZiAoIW5vbXNnICYmICF4Y21mZGIpCi0JCSAgcHJpbnRmKCI/ RmlsZSBub3QgZm91bmQgLSAlc1xuIiwqeHApOwotI2lmZGVmIENLQ0hBTk5FTElPCi0JCXpfZXJy b3IgPSBGWF9GTkY7Ci0jZW5kaWYgLyogQ0tDSEFOTkVMSU8gKi8KLQkJcmV0dXJuKHhjbWZkYiA/ IC02IDogLTkpOwotCSAgICB9Ci0JICAgIGlmIChucCkgZnJlZShucCk7Ci0jaWZuZGVmIE5PTEFT VEZJTEUKLQkgICAgbWFrZXN0cigmbGFzdGZpbGUsdG1wbGFzdGZpbGUpOwotI2VuZGlmCS8qIE5P TEFTVEZJTEUgKi8KLQkgICAgcmV0dXJuKHgpOwotCi0jaWZuZGVmIE1BQwotCSAgY2FzZSAyOgkJ CS8qIEVTQyAqLwotCSAgICBkZWJ1ZyhGMTAxLCJjbWlmaSBlc2MsIHhjIiwiIix4Yyk7Ci0JICAg IGlmICh4YyA9PSAwKSB7Ci0JCWlmICgqeGRlZikgewotCQkgICAgcHJpbnRmKCIlcyAiLHhkZWYp OyAvKiBJZiBhdCBiZWdpbm5pbmcgb2YgZmllbGQgKi8KLSNpZmRlZiBHRU1ET1MKLQkJICAgIGZm bHVzaChzdGRvdXQpOwotI2VuZGlmIC8qIEdFTURPUyAqLwotCQkgICAgaW53b3JkID0gY21mbGdz ID0gMDsKLQkJICAgIGFkZGJ1Zih4ZGVmKTsJLyogU3VwcGx5IGRlZmF1bHQuICovCi0JCSAgICBp ZiAoc2V0YXRtKHhkZWYsMCkgPCAwKSB7Ci0JCQlwcmludGYoIkRlZmF1bHQgbmFtZSB0b28gbG9u Z1xuIik7Ci0JCQlpZiAobnApIGZyZWUobnApOwotCQkJcmV0dXJuKC05KTsKLQkJICAgIH0KLQkJ fSBlbHNlIHsJCS8qIE5vIGRlZmF1bHQgKi8KLQkJICAgIGJsZWVwKEJQX1dBUk4pOwotCQl9Ci0J CWJyZWFrOwotCSAgICB9Ci0JICAgIGlmICgqKnhwID09ICd7JykgewkJLyogRGlkIHVzZXIgdHlw ZSBvcGVuaW5nIGJyYWNlLi4uICovCi0JCSp4cCA9ICp4cCArIDE7Ci0JCXhjLS07Ci0JCWNjLS07 Ci0JCXFmbGFnID0gJ30nOwotCSAgICB9IGVsc2UgaWYgKGRibHF1byAmJiAqKnhwID09ICciJykg ewkvKiBvciBkb3VibGVxdW90ZT8gKi8KLQkJKnhwID0gKnhwICsgMTsJCS8qIElmIHNvIGlnbm9y ZSBpdCBhbmQgc3BhY2UgcGFzdCBpdCAqLwotCQl4Yy0tOwotCQljYy0tOwotCQlxZmxhZyA9ICci JzsKLQkgICAgfQotI2lmbmRlZiBOT1NQTAotCSAgICBpZiAoZikgewkJCS8qIElmIGEgY29udmVy c2lvbiBmdW5jdGlvbiBpcyBnaXZlbiAqLwotI2lmZGVmIERPQ0hLVkFSCi0JCWNoYXIgKnMgPSAq eHA7CQkvKiBTZWUgaWYgdGhlcmUgYXJlIGFueSB2YXJpYWJsZXMgaW4gKi8KLQkJd2hpbGUgKCpz KSB7CQkvKiB0aGUgc3RyaW5nIGFuZCBpZiBzbywgZXhwYW5kIGl0LiAgKi8KLQkJICAgIGlmIChj aGt2YXIocykpIHsKLSNlbmRpZiAvKiBET0NIS1ZBUiAqLwotCQkJenEgPSBhdHhidWY7Ci0JCQlh dHhuID0gQ01EQkw7Ci0JCQlpZiAoKHggPSAoKmYpKCp4cCwmenEsJmF0eG4pKSA8IDApIHsKLQkJ CSAgICBpZiAobnApIGZyZWUobnApOwotCQkJICAgIHJldHVybigtMik7Ci0JCQl9Ci0jaWZkZWYg RE9DSEtWQVIKLQkJICAgIC8qIHJlZHVjZSBjYyBieSBudW1iZXIgb2YgXFwgY29uc3VtZWQgYnkg Y29udmVyc2lvbiAqLwotCQkgICAgLyogZnVuY3Rpb24gKG5lZWRlZCBmb3IgT1MvMiwgd2hlcmUg XCBpcyBwYXRoIHNlcGFyYXRvcikgKi8KLQkJCWNjIC09IChzdHJsZW4oKnhwKSAtIHN0cmxlbihh dHhidWYpKTsKLSNlbmRpZiAvKiBET0NIS1ZBUiAqLwotCQkJKnhwID0gYXR4YnVmOwotCQkJaWYg KCFhdHhidWZbMF0pIHsgLyogUmVzdWx0IGVtcHR5LCB1c2UgZGVmYXVsdCAqLwotCQkJICAgICp4 cCA9IHhkZWY7Ci0JCQkgICAgY2MgPSBzdHJsZW4oeGRlZik7Ci0JCQl9Ci0jaWZkZWYgRE9DSEtW QVIKLQkJCWJyZWFrOwotCQkgICAgfQotCQkgICAgcysrOwotCQl9Ci0jZW5kaWYgLyogRE9DSEtW QVIgKi8KLQkgICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZmRlZiBEVElMREUKLQkgICAg aWYgKGRpcmZsZyAmJiAqKCp4cCkgPT0gJ34nKSB7Ci0JCWRlYnVnKEYxMTEsImNtaWZpIHRpbGRl X2V4cGFuZCBBIiwqeHAsY2MpOwotCQlkaXJwID0gdGlsZGVfZXhwYW5kKCp4cCk7IC8qIEV4cGFu ZCB0aWxkZSwgaWYgYW55Li4uICovCi0JCWlmICghZGlycCkgZGlycCA9ICIiOwotCQlpZiAoKmRp cnApIHsKLQkJICAgIGludCBpLCB4eDsKLQkJICAgIGNoYXIgKiBzcDsKLQkJICAgIHhjID0gY2M7 CQkvKiBMZW5ndGggb2YgfnRoaW5nICovCi0JCSAgICB4eCA9IHNldGF0bShkaXJwLDApOyAvKiBD b3B5IGV4cGFuc2lvbiB0byBhdG9tIGJ1ZmZlciAqLwotCQkgICAgZGVidWcoRjExMSwiY21pZmkg dGlsZGVfZXhwYW5kIEIiLGF0bWJ1ZixjYyk7Ci0JCSAgICBpZiAoeHggPCAwKSB7Ci0JCQlwcmlu dGYoIkV4cGFuZGVkIG5hbWUgdG9vIGxvbmdcbiIpOwotCQkJaWYgKG5wKSBmcmVlKG5wKTsKLQkJ CXJldHVybigtOSk7Ci0JCSAgICB9Ci0JCSAgICBkZWJ1ZyhGMTExLCJjbWlmaSB0aWxkZV9leHBh bmQgeGMiLCIiLHhjKTsKLQkJICAgIGZvciAoaSA9IDA7IGkgPCB4YzsgaSsrKSB7Ci0JCQljbWRj aGFyZGVsKCk7CS8qIEJhY2sgdXAgb3ZlciB+dGhpbmcgKi8KLQkJCWJwLS07Ci0JCSAgICB9Ci0J CSAgICB4YyA9IGNjOwkJLyogSG93IG1hbnkgbmV3IG9uZXMgd2UganVzdCBnb3QgKi8KLQkJICAg IHNwID0gYXRtYnVmOwotCQkgICAgcHJpbnRmKCIlcyIsc3ApOwkvKiBQcmludCB0aGVtICovCi0J CSAgICB3aGlsZSAoKCpicCsrID0gKnNwKyspKSA7CS8qIENvcHkgdG8gY29tbWFuZCBidWZmZXIg Ki8KLQkJICAgIGJwLS07CSAgICAJICAgICAgICAvKiBCYWNrIHVwIG92ZXIgTlVMICovCi0JCX0K LQkJKnhwID0gYXRtYnVmOwotCSAgICB9Ci0jZW5kaWYgLyogRFRJTERFICovCi0KLQkgICAgc3Ag PSAqeHAgKyBjYzsKLQotI2lmZGVmIFVOSVhPUk9TSwotCSAgICBpZiAoIXN0cmNtcChhdG1idWYs Ii4uIikpIHsKLQkJcHJpbnRmKCIgIik7Ci0JCWNrc3RybmNhdChjbWRidWYsIiAiLENNREJMKTsK LQkJY2MrKzsKLQkJYnArKzsKLQkJKndpbGQgPSAwOwotCQkqeHAgPSBhdG1idWY7Ci0JCWJyZWFr OwotCSAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXRtYnVmLCIuIikpIHsKLQkJYmxlZXAoQlBfV0FS Tik7Ci0JCWlmIChucCkgZnJlZShucCk7Ci0JCXJldHVybigtMSk7Ci0JICAgIH0gZWxzZSB7Ci0J CS8qIFRoaXMgcGF0Y2hlcyBhIGdsaXRjaCB3aGVuIHVzZXIgdHlwZXMgIi4vZm9vPEVTQz4iICov Ci0JCS8qIGluIHdoaWNoIHRoZSBuZXh0IHR3byBjaGFycyBhcmUgb21pdHRlZCBmcm9tIHRoZSAq LwotCQkvKiBleHBhbnNpb24uICBUaGVyZSBzaG91bGQgYmUgYSBiZXR0ZXIgZml4LCBob3dldmVy LCAqLwotCQkvKiBzaW5jZSB0aGVyZSBpcyBubyBwcm9ibGVtIHdpdGggIi4uL2ZvbzxFU0M+Ii4g Ki8KLQkJY2hhciAqcCA9ICp4cDsKLQkJaWYgKCpwID09ICcuJyAmJiAqKHArMSkgPT0gJy8nKQot CQkgIGNjIC09IDI7Ci0JICAgIH0KLSNlbmRpZiAvKiBVTklYT1JPU0sgKi8KLQotI2lmZGVmIGRh dGFnZW5lcmFsCi0JICAgICpzcCsrID0gJysnOwkJLyogRGF0YSBHZW5lcmFsIEFPUyB3aWxkY2Fy ZCAqLwotI2Vsc2UKLQkgICAgKnNwKysgPSAnKic7CQkvKiBPdGhlcnMgKi8KLSNlbmRpZiAvKiBk YXRhZ2VuZXJhbCAqLwotCSAgICAqc3AtLSA9ICdcMCc7Ci0jaWZkZWYgR0VNRE9TCi0JICAgIGlm ICghc3RyY2hyKCp4cCwgJy4nKSkJLyogYWJkZS5lIC0+IGFiY2RlLmUqICovCi0JICAgICAgc3Ry Y2F0KCp4cCwgIi4qIik7CS8qIGFiYyAtPiBhYmMqLiogKi8KLSNlbmRpZiAvKiBHRU1ET1MgKi8K LQkgICAgLyogQWRkIHdpbGRjYXJkIGFuZCBleHBhbmQgbGlzdC4gKi8KLSNpZmRlZiBDT01NRU5U Ci0JICAgIC8qIFRoaXMga2lsbHMgcGFydGlhbCBjb21wbGV0aW9uIHdoZW4gRVNDIGdpdmVuIGlu IHBhdGggc2VnbWVudCAqLwotCSAgICBuenhvcHRzIHw9IGRpcmZsZyA/IFpYX0RJUk9OTFkgOiAo ZCA/IDAgOiBaWF9GSUxPTkxZKTsKLSNlbHNlCi0JICAgIC8qIG56eG9wdHMgPSAwOyAqLwotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLQkgICAgaWYgKG1hdGNoZG90KSAgbnp4b3B0cyB8PSBaWF9NQVRD SERPVDsKLQkgICAgaWYgKHJlY3Vyc2l2ZSkgbnp4b3B0cyB8PSBaWF9SRUNVUlNFOwotCSAgICB5 ID0gbnp4cGFuZCgqeHAsbnp4b3B0cyk7Ci0JICAgIG5maWxlcyA9IHk7Ci0JICAgIGRlYnVnKEYx MTEsImNtaWZpIG56eHBhbmQiLCp4cCx5KTsKLQkgICAgaWYgKHkgPiAwKSB7Ci0jaWZkZWYgT1My Ci0gICAgICAgICAgICAgICAgem5leHQoZmlsYnVmKTsJCS8qIEdldCBmaXJzdCAqLwotI2lmZGVm IFpYUkVXSU5ECi0JCXp4cmV3aW5kKCk7CQkvKiBNdXN0ICJyZXdpbmQiICovCi0jZWxzZQotCQlu enhwYW5kKCp4cCxueHpvcHRzKTsKLSNlbmRpZiAvKiBaWFJFV0lORCAqLwotI2Vsc2UgIC8qIE5v dCBPUzIgKi8KLSAgICAgICAgICAgICAgICBja3N0cm5jcHkoZmlsYnVmLG10Y2hzWzBdLENLTUFY UEFUSCk7Ci0jZW5kaWYgLyogT1MyICovCi0JICAgIH0gZWxzZQotCSAgICAgICpmaWxidWYgPSAn XDAnOwotCSAgICBmaWxidWZbQ0tNQVhQQVRIXSA9IE5VTDsKLQkgICAgKnNwID0gJ1wwJzsJCQkv KiBSZW1vdmUgd2lsZGNhcmQuICovCi0JICAgIGRlYnVnKEYxMTEsImNtaWZpIGZpbGJ1ZiIsZmls YnVmLHkpOwotCSAgICBkZWJ1ZyhGMTExLCJjbWlmaSAqeHAiLCp4cCxjYyk7Ci0KLQkgICAgKndp bGQgPSAoeSA+IDEpOwotCSAgICBpZiAoeSA9PSAwKSB7Ci0JCWlmICghbm9tc2cpIHsKLSNpZmRl ZiBDS1JPT1QKLQkJICAgIGlmIChja3Jvb3RlcnIpCi0JCSAgICAgIHByaW50ZigiP09mZiBMaW1p dHM6ICVzXG4iLGF0bWJ1Zik7Ci0JCSAgICBlbHNlCi0jZW5kaWYgLyogQ0tST09UICovCi0JCSAg ICAgIHByaW50ZigiP05vICVzIG1hdGNoIC0gJXNcbiIsCi0JCQkgICBkaXJmbGcgPyAiZGlyZWN0 b3JpZXMiIDogImZpbGVzIiwgYXRtYnVmKTsKLQkJICAgIGlmIChucCkgZnJlZShucCk7Ci0JCSAg ICByZXR1cm4oLTkpOwotCQl9IGVsc2UgewotCQkgICAgYmxlZXAoQlBfV0FSTik7Ci0JCSAgICBp ZiAobnApIGZyZWUobnApOwotCQkgICAgcmV0dXJuKC0xKTsKLQkJfQotCSAgICB9IGVsc2UgaWYg KHkgPCAwKSB7Ci0jaWZkZWYgQ0tST09UCi0JCWlmIChja3Jvb3RlcnIpCi0JCSAgcHJpbnRmKCI/ T2ZmIExpbWl0czogJXNcbiIsYXRtYnVmKTsKLQkJZWxzZQotI2VuZGlmIC8qIENLUk9PVCAqLwot CQkgIHByaW50ZigiP1RvbyBtYW55ICVzIG1hdGNoIC0gJXNcbiIsCi0JCQkgZGlyZmxnID8gImRp cmVjdG9yaWVzIiA6ICJmaWxlcyIsIGF0bWJ1Zik7Ci0JCWlmIChucCkgZnJlZShucCk7Ci0JCXJl dHVybigtOSk7Ci0JICAgIH0gZWxzZSBpZiAoeSA+IDEJCS8qIE5vdCB1bmlxdWUgKi8KLSNpZm5k ZWYgVk1TCi0JCSAgICAgICB8fCAoeSA9PSAxICYmIGlzZGlyKGZpbGJ1ZikpIC8qIFVuaXF1ZSBk aXJlY3RvcnkgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQkJICAgICAgICkgewotI2lmbmRlZiBOT1BB UlRJQUwKLS8qIFBhcnRpYWwgZmlsZW5hbWUgY29tcGxldGlvbiAqLwotCQlpbnQgaiwgazsgY2hh ciBjOwotCQlrID0gMDsKLQkJZGVidWcoRjExMSwiY21pZmkgcGFydGlhbCIsZmlsYnVmLGNjKTsK LSNpZmRlZiBPUzIKLQkJewotCQkgICAgaW50IGN1ciA9IDAsCi0JCSAgICBsZW4gPSAwLAotCQkg ICAgbGVuMiA9IDAsCi0JCSAgICBtaW4gPSBzdHJsZW4oZmlsYnVmKSwKLQkJICAgIGZvdW5kID0g MDsKLQkJICAgIGNoYXIgbG9jYWxmbltDS01BWFBBVEgrMV07Ci0KLQkJICAgIGxlbiA9IG1pbjsK LQkJICAgIGZvciAoaiA9IDE7IGogPD0geTsgaisrKSB7Ci0JCQl6bmV4dChsb2NhbGZuKTsKLQkJ CWlmIChkaXJmbGcgJiYgIWlzZGlyKGxvY2FsZm4pKQotCQkJICBjb250aW51ZTsKLQkJCWZvdW5k ID0gMTsKLQkJCWxlbjIgPSBzdHJsZW4obG9jYWxmbik7Ci0JCQlmb3IgKGN1ciA9IGNjOwotCQkJ ICAgICBjdXIgPCBsZW4gJiYgY3VyIDwgbGVuMiAmJiBjdXIgPD0gbWluOwotCQkJICAgICBjdXIr KwotCQkJICAgICApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPUy8yIG9yIFdp bmRvd3MsIGNhc2UgZG9lc24ndCBtYXR0ZXIgKi8KLQkJCSAgICBpZiAodG9sb3dlcihmaWxidWZb Y3VyXSkgIT0gdG9sb3dlcihsb2NhbGZuW2N1cl0pKQotCQkJICAgICAgYnJlYWs7Ci0JCQl9Ci0J CQlpZiAoY3VyIDwgbWluKQotCQkJICBtaW4gPSBjdXI7Ci0JCSAgICB9Ci0JCSAgICBpZiAoIWZv dW5kKQotCQkgICAgICBtaW4gPSBjYzsKLQkJICAgIGZpbGJ1ZlttaW5dID0gTlVMOwotCQkgICAg aWYgKG1pbiA+IGNjKQotCQkgICAgICBrKys7Ci0JCX0KLSNlbHNlIC8qIE9TMiAqLwotCQlmb3Ig KGkgPSBjYzsgKGMgPSBmaWxidWZbaV0pOyBpKyspIHsKLQkJICAgIGZvciAoaiA9IDE7IGogPCB5 OyBqKyspCi0JCSAgICAgIGlmIChtdGNoc1tqXVtpXSAhPSBjKSBicmVhazsKLQkJICAgIGlmIChq ID09IHkpIGsrKzsKLQkJICAgIGVsc2UgZmlsYnVmW2ldID0gZmlsYnVmW2krMV0gPSBOVUw7Ci0J CX0KLSNlbmRpZiAvKiBPUzIgKi8KLQotCi0jaWZuZGVmIFZNUwotCQkvKiBpc2RpcigpIGZ1bmN0 aW9uIHJlcXVpcmVkIGZvciB0aGlzISAqLwotCQlpZiAoeSA9PSAxICYmIGlzZGlyKGZpbGJ1Zikp IHsgLyogRG9udCB3ZSBhbHJlYWR5IGtub3cgdGhpcz8gKi8KLQkJICAgIGludCBsZW47Ci0JCSAg ICBsZW4gPSBzdHJsZW4oZmlsYnVmKTsKLQkJICAgIGlmIChsZW4gPiAwICYmIGxlbiA8IEFUTUJM IC0gMSkgewotCQkJaWYgKGZpbGJ1ZltsZW4tMV0gIT0gZGlyc2VwKSB7Ci0JCQkgICAgZmlsYnVm W2xlbl0gPSBkaXJzZXA7Ci0JCQkgICAgZmlsYnVmW2xlbisxXSA9IE5VTDsKLQkJCX0KLQkJICAg IH0KLS8qCi0gIEF0IHRoaXMgcG9pbnQsIGJlZm9yZSBqdXN0IGRvaW5nIHBhcnRpYWwgY29tcGxl dGlvbiwgd2Ugc2hvdWxkIGxvb2sgZmlyc3QgdG8KLSAgc2VlIGlmIHRoZSBnaXZlbiBkaXJlY3Rv cnkgZG9lcyBpbmRlZWQgaGF2ZSBhbnkgc3ViZGlyZWN0b3JpZXMgKGRpcmZsZykgb3IKLSAgZmls ZXMgKCFkaXJmbGcpOyBpZiBpdCBkb2Vzbid0IHdlIHNob3VsZCBkbyBmdWxsIGNvbXBsZXRpb24u ICBPdGhlcndpc2UsIHRoZQotICByZXN1bHQgbG9va3MgZnVubnkgdG8gdGhlIHVzZXIgYW5kICI/ IiBibG93cyB1cCB0aGUgY29tbWFuZCBmb3Igbm8gZ29vZAotICByZWFzb24uCi0qLwotCQkgICAg ewotCQkJaW50IGZsYWdzID0gMDsKLQkJCWZpbGJ1ZltsZW4rMV0gPSAnKic7Ci0JCQlmaWxidWZb bGVuKzJdID0gTlVMOwotCQkJaWYgKGRpcmZsZykgZmxhZ3MgPSBaWF9ESVJPTkxZOwotCQkJY2hp bGRyZW4gPSBuenhwYW5kKGZpbGJ1ZixmbGFncyk7Ci0JCQlkZWJ1ZyhGMTExLCJjbWlmaSBjaGls ZHJlbiIsZmlsYnVmLGNoaWxkcmVuKTsKLQkJCWZpbGJ1ZltsZW4rMV0gPSBOVUw7Ci0JCQluenhw YW5kKGZpbGJ1ZixmbGFncyk7IC8qIFJlc3RvcmUgcHJldmlvdXMgbGlzdCAqLwotCQkJaWYgKGNo aWxkcmVuID09IDApCi0JCQkgIGdvdG8gTk9TVUJESVJTOwotCQkgICAgfQotCQkgICAgaWYgKGxl biArIDEgPiBjYykKLQkJICAgICAgaysrOwotCQl9Ci0gICAgICAgICAgICAgICAgLyogQWRkIGRv dWJsZXF1b3RlcyBpZiB0aGVyZSBhcmUgc3BhY2VzIGluIHRoZSBuYW1lICovCi0JCXsKLQkJICAg IGludCB4OwotCQkgICAgaWYgKHFmbGFnKSB7Ci0JCQl4ID0gKHFmbGFnID09ICd9Jyk7IC8qIChv ciBicmFjZXMpICovCi0JCSAgICB9IGVsc2UgewotCQkJeCA9ICFkYmxxdW87Ci0JCSAgICB9Ci0J CSAgICBpZiAoZmlsYnVmWzBdICE9ICciJyAmJiBmaWxidWZbMF0gIT0gJ3snKQotCQkgICAgICBr ID0gZHF1b3RlKGZpbGJ1ZixBVE1CTCx4KTsKLQkJfQotI2VuZGlmIC8qIFZNUyAqLwotCQlkZWJ1 ZyhGMTExLCJjbWlmaSBSRVBBSU5UIGZpbGJ1ZiIsZmlsYnVmLGspOwotCQlpZiAoayA+IDApIHsJ CS8qIEdvdCBtb3JlIGNoYXJhY3RlcnMgKi8KLQkJICAgIGRlYnVnKEYxMDEsImNtaWZpIFJFUEFJ TlQgY2MiLCIiLGNjKTsKLQkJICAgIGRlYnVnKEYxMDEsImNtaWZpIFJFUEFJTlQgeGMiLCIiLHhj KTsKLQkJICAgIGRlYnVnKEYxMTAsImNtaWZpIFJFUEFJTlQgYnAtY2MiLGJwLWNjLDApOwotCQkg ICAgZGVidWcoRjExMCwiY21pZmkgUkVQQUlOVCBicC14YyIsYnAteGMsMCk7Ci0JCSAgICBzcCA9 IGZpbGJ1ZiArIGNjOwkvKiBQb2ludCB0byBuZXcgb25lcyAqLwotCQkgICAgaWYgKHFmbGFnIHx8 IHN0cm5jbXAoZmlsYnVmLGJwLWNjLGNjKSkgeyAvKiBSZXBhaW50PyAqLwotCQkJaW50IHg7Ci0J CQl4ID0gY2M7Ci0JCQlpZiAocWZsYWcpIHgrKzsKLQkJCWZvciAoaSA9IDA7IGkgPCB4OyBpKysp IHsKLQkJCSAgICBjbWRjaGFyZGVsKCk7IC8qIEJhY2sgdXAgb3ZlciBvbGQgcGFydGlhbCBzcGVj ICovCi0JCQkgICAgYnAtLTsKLQkJCX0KLQkJCXNwID0gZmlsYnVmOwkvKiBQb2ludCB0byBuZXcg d29yZCBzdGFydCAqLwotCQkJZGVidWcoRjExMCwiY21pZmkgZXJhc2Ugb2siLHNwLDApOwotCQkg ICAgfQotCQkgICAgY2MgPSBrOwkJLyogSG93IG1hbnkgbmV3IG9uZXMgd2UganVzdCBnb3QgKi8K LQkJICAgIHByaW50ZigiJXMiLHNwKTsJLyogUHJpbnQgdGhlbSAqLwotCQkgICAgd2hpbGUgKCgq YnArKyA9ICpzcCsrKSkgOwkvKiBDb3B5IHRvIGNvbW1hbmQgYnVmZmVyICovCi0JCSAgICBicC0t OwkgICAgCSAgICAgICAgLyogQmFjayB1cCBvdmVyIE5VTCAqLwotCQkgICAgZGVidWcoRjExMCwi Y21pZmkgcGFydGlhbCBjbWRidWYiLGNtZGJ1ZiwwKTsKLQkJICAgIGlmIChzZXRhdG0oZmlsYnVm LDApIDwgMCkgewotCQkJcHJpbnRmKCI/UGFydGlhbCBuYW1lIHRvbyBsb25nXG4iKTsKLQkJCWlm IChucCkgZnJlZShucCk7Ci0JCQlyZXR1cm4oLTkpOwotCQkgICAgfQotCQkgICAgZGVidWcoRjEx MSwiY21pZmkgcGFydGlhbCBhdG1idWYiLGF0bWJ1ZixjYyk7Ci0JCSAgICAqeHAgPSBhdG1idWY7 Ci0JCX0KLSNlbmRpZiAvKiBOT1BBUlRJQUwgKi8KLQkJYmxlZXAoQlBfV0FSTik7Ci0JICAgIH0g ZWxzZSB7CQkJLyogVW5pcXVlLCBjb21wbGV0ZSBpdC4gICovCi0jaWZuZGVmIFZNUwotI2lmZGVm IENLX1RNUERJUgotCQkvKiBpc2RpcigpIGZ1bmN0aW9uIHJlcXVpcmVkIGZvciB0aGlzISAqLwot CSAgICAgIE5PU1VCRElSUzoKLQkJZGVidWcoRjExMSwiY21pZmkgdW5pcXVlIixmaWxidWYsY2hp bGRyZW4pOwotCQlpZiAoaXNkaXIoZmlsYnVmKSAmJiBjaGlsZHJlbiA+IDApIHsKLQkJICAgIGlu dCBsZW47Ci0JCSAgICBsZW4gPSBzdHJsZW4oZmlsYnVmKTsKLQkJICAgIGlmIChsZW4gPiAwICYm IGxlbiA8IEFUTUJMIC0gMSkgewotCQkJaWYgKGZpbGJ1ZltsZW4tMV0gIT0gZGlyc2VwKSB7Ci0J CQkgICAgZmlsYnVmW2xlbl0gPSBkaXJzZXA7Ci0JCQkgICAgZmlsYnVmW2xlbisxXSA9IE5VTDsK LQkJCX0KLQkJICAgIH0KLQkJICAgIHNwID0gZmlsYnVmICsgY2M7Ci0JCSAgICBibGVlcChCUF9X QVJOKTsKLQkJICAgIHByaW50ZigiJXMiLHNwKTsKLQkJICAgIGNjKys7Ci0JCSAgICB3aGlsZSAo KCpicCsrID0gKnNwKyspKSA7Ci0JCSAgICBicC0tOwotCQkgICAgaWYgKHNldGF0bShmaWxidWYs MCkgPCAwKSB7Ci0JCQlwcmludGYoIj9EaXJlY3RvcnkgbmFtZSB0b28gbG9uZ1xuIik7Ci0JCQlp ZiAobnApIGZyZWUobnApOwotCQkJcmV0dXJuKC05KTsKLQkJICAgIH0KLQkJICAgIGRlYnVnKEYx MTEsImNtaWZpIGRpcmVjdG9yeSBhdG1idWYiLGF0bWJ1ZixjYyk7Ci0JCSAgICAqeHAgPSBhdG1i dWY7Ci0JCX0gZWxzZSB7CQkvKiBOb3QgYSBkaXJlY3Rvcnkgb3IgZGlyZmxnICovCi0jZW5kaWYg LyogQ0tfVE1QRElSICovCi0jZW5kaWYgLyogVk1TICovCi0jaWZuZGVmIFZNUwkJCQkvKiBWTVMg ZGlyIG5hbWVzIGFyZSBzcGVjaWFsICovCi0jaWZuZGVmIGRhdGFnZW5lcmFsCQkJLyogVlMgZGly bmFtZXMgbXVzdCBub3QgZW5kIGluICI6IiAqLwotCQkgICAgaWYgKGRpcmZsZykgewotCQkJaW50 IGxlbjsKLQkJCWxlbiA9IHN0cmxlbihmaWxidWYpOwotCQkJaWYgKGxlbiA+IDAgJiYgbGVuIDwg QVRNQkwgLSAxKSB7Ci0JCQkgICAgaWYgKGZpbGJ1ZltsZW4tMV0gIT0gZGlyc2VwKSB7Ci0JCQkJ ZmlsYnVmW2xlbl0gPSBkaXJzZXA7Ci0JCQkJZmlsYnVmW2xlbisxXSA9IE5VTDsKLQkJCSAgICB9 Ci0JCQl9Ci0JCSAgICB9Ci0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBWTVMg Ki8KLQkJICAgIHNwID0gZmlsYnVmICsgY2M7CS8qIFBvaW50IHBhc3Qgd2hhdCB1c2VyIHR5cGVk LiAqLwotCQkgICAgewotCQkJaW50IHg7Ci0JCQlpZiAocWZsYWcpIHsKLQkJCSAgICB4ID0gKHFm bGFnID09ICd9Jyk7Ci0JCQl9IGVsc2UgewotCQkJICAgIHggPSAhZGJscXVvOwotCQkJfQotCQkJ aWYgKGZpbGJ1ZlswXSAhPSAnIicgJiYgZmlsYnVmWzBdICE9ICd7JykKLQkJCSAgZHF1b3RlKGZp bGJ1ZixBVE1CTCx4KTsKLQkJICAgIH0KLQkJICAgIGlmIChxZmxhZyB8fCBzdHJuY21wKGZpbGJ1 ZixicC1jYyxjYykpIHsgLyogUmVwYWludD8gKi8KLQkJCWludCB4OwotCQkJeCA9IGNjOwotCQkJ aWYgKHFmbGFnKSB4Kys7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgeDsgaSsrKSB7Ci0JCQkgICAgY21k Y2hhcmRlbCgpOyAvKiBCYWNrIHVwIG92ZXIgb2xkIHBhcnRpYWwgc3BlYyAqLwotCQkJICAgIGJw LS07Ci0JCQl9Ci0JCQlzcCA9IGZpbGJ1ZjsJLyogUG9pbnQgdG8gbmV3IHdvcmQgc3RhcnQgKi8K LQkJCWRlYnVnKEYxMTEsImNtaWZpIGFmdGVyIGVyYXNlIHNwPSIsc3AsY2MpOwotCQkgICAgfQot CQkgICAgcHJpbnRmKCIlcyAiLHNwKTsJLyogUHJpbnQgdGhlIGNvbXBsZXRlZCBuYW1lLiAqLwot I2lmZGVmIEdFTURPUwotCQkgICAgZmZsdXNoKHN0ZG91dCk7Ci0jZW5kaWYgLyogR0VNRE9TICov Ci0JCSAgICBhZGRidWYoc3ApOwkJLyogQWRkIHRoZSBjaGFyYWN0ZXJzIHRvIGNtZGJ1Zi4gKi8K LQkJICAgIGlmIChzZXRhdG0oZmlsYnVmLDApIDwgMCkgeyAvKiBBbmQgdG8gYXRtYnVmLiAqLwot CQkJcHJpbnRmKCI/Q29tcGxldGVkIG5hbWUgdG9vIGxvbmdcbiIpOwotCQkJaWYgKG5wKSBmcmVl KG5wKTsKLQkJCXJldHVybigtOSk7Ci0JCSAgICB9Ci0JCSAgICBpbndvcmQgPSBjbWZsZ3MgPSAw OwotCQkgICAgKnhwID0gYnJzdHJpcChhdG1idWYpOyAvKiBSZXR1cm4gcG9pbnRlciB0byBhdG1i dWYuICovCi0JCSAgICBpZiAoZGlyZmxnICYmICFpc2RpcigqeHApKSB7Ci0JCQlwcmludGYoIj9O b3QgYSBkaXJlY3RvcnkgLSAlc1xuIiwgZmlsYnVmKTsKLQkJCWlmIChucCkgZnJlZShucCk7Ci0J CQlyZXR1cm4oLTkpOwotCQkgICAgfQotCQkgICAgaWYgKG5wKSBmcmVlKG5wKTsKLSNpZm5kZWYg Tk9MQVNURklMRQotCQkgICAgbWFrZXN0cigmbGFzdGZpbGUsdG1wbGFzdGZpbGUpOwotI2VuZGlm CS8qIE5PTEFTVEZJTEUgKi8KLQkJICAgIHJldHVybigwKTsKLSNpZm5kZWYgVk1TCi0jaWZkZWYg Q0tfVE1QRElSCi0JCX0KLSNlbmRpZiAvKiBDS19UTVBESVIgKi8KLSNlbmRpZiAvKiBWTVMgKi8K LQkgICAgfQotCSAgICBicmVhazsKLQotCSAgY2FzZSAzOgkJCS8qIFF1ZXN0aW9uIG1hcmsgLSBm aWxlIG1lbnUgd2FudGVkICovCi0JICAgIGlmICgqeGhscCA9PSBOVUwpCi0JICAgICAgcHJpbnRm KGRpcmZsZyA/ICIgRGlyZWN0b3J5IG5hbWUiIDogIiBJbnB1dCBmaWxlIHNwZWNpZmljYXRpb24i KTsKLQkgICAgZWxzZQotCSAgICAgIHByaW50ZigiICVzIix4aGxwKTsKLSNpZmRlZiBHRU1ET1MK LQkgICAgZmZsdXNoKHN0ZG91dCk7Ci0jZW5kaWYgLyogR0VNRE9TICovCi0JICAgIC8qIElmIHVz ZXIgdHlwZWQgYW4gb3BlbmluZyBxdW90ZSBvciBicmFjZSwganVzdCBza2lwIHBhc3QgaXQgKi8K LQotCSAgICBpZiAoKip4cCA9PSAnIicgfHwgKip4cCA9PSAneycpIHsKLQkJKnhwID0gKnhwICsg MTsKLQkJeGMtLTsKLQkJY2MtLTsKLQkgICAgfQotI2lmbmRlZiBOT1NQTAotCSAgICBpZiAoZikg ewkJCS8qIElmIGEgY29udmVyc2lvbiBmdW5jdGlvbiBpcyBnaXZlbiAqLwotI2lmZGVmIERPQ0hL VkFSCi0JCWNoYXIgKnMgPSAqeHA7CQkvKiBTZWUgaWYgdGhlcmUgYXJlIGFueSB2YXJpYWJsZXMg aW4gKi8KLQkJd2hpbGUgKCpzKSB7CQkvKiB0aGUgc3RyaW5nIGFuZCBpZiBzbywgZXhwYW5kIHRo ZW0gKi8KLQkJICAgIGlmIChjaGt2YXIocykpIHsKLSNlbmRpZiAvKiBET0NIS1ZBUiAqLwotCQkJ enEgPSBhdHhidWY7Ci0JCQlhdHhuID0gQ01EQkw7Ci0JCQlpZiAoKHggPSAoKmYpKCp4cCwmenEs JmF0eG4pKSA8IDApIHsKLQkJCSAgICBpZiAobnApIGZyZWUobnApOwotCQkJICAgIHJldHVybigt Mik7Ci0JCQl9Ci0jaWZkZWYgRE9DSEtWQVIKLQkJICAgIC8qIHJlZHVjZSBjYyBieSBudW1iZXIg b2YgXFwgY29uc3VtZWQgYnkgY29udmVyc2lvbiAqLwotCQkgICAgLyogZnVuY3Rpb24gKG5lZWRl ZCBmb3IgT1MvMiwgd2hlcmUgXCBpcyBwYXRoIHNlcGFyYXRvcikgKi8KLQkJCWNjIC09IChzdHJs ZW4oKnhwKSAtIHN0cmxlbihhdHhidWYpKTsKLSNlbmRpZiAvKiBET0NIS1ZBUiAqLwotCQkJKnhw ID0gYXR4YnVmOwotI2lmZGVmIERPQ0hLVkFSCi0JCQlicmVhazsKLQkJICAgIH0KLQkJICAgIHMr KzsKLQkJfQotI2VuZGlmIC8qIERPQ0hLVkFSICovCi0JICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAq LwotCSAgICBkZWJ1ZyhGMTExLCJjbWlmaSA/ICp4cCwgY2MiLCp4cCxjYyk7Ci0JICAgIHNwID0g KnhwICsgY2M7CQkvKiBJbnNlcnQgIioiIGF0IGVuZCAqLwotI2lmZGVmIGRhdGFnZW5lcmFsCi0J ICAgICpzcCsrID0gJysnOwkJLyogSW5zZXJ0ICssIHRoZSBERyB3aWxkIGNhcmQgKi8KLSNlbHNl Ci0JICAgICpzcCsrID0gJyonOwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0JICAgICpzcC0t ID0gJ1wwJzsKLSNpZmRlZiBHRU1ET1MKLQkgICAgaWYgKCEgc3RyY2hyKCp4cCwgJy4nKSkJLyog YWJkZS5lIC0+IGFiY2RlLmUqICovCi0JICAgICAgc3RyY2F0KCp4cCwgIi4qIik7CS8qIGFiYyAt PiBhYmMqLiogKi8KLSNlbmRpZiAvKiBHRU1ET1MgKi8KLQkgICAgZGVidWcoRjExMCwiY21pZmkg PyB3aWxkIiwqeHAsMCk7Ci0KLQkgICAgbnp4b3B0cyB8PSBkaXJmbGcgPyBaWF9ESVJPTkxZIDog KGQgPyAwIDogWlhfRklMT05MWSk7Ci0KLQkgICAgZGVidWcoRjEwMSwiY21pZmkgbWF0Y2hkb3Qi LCIiLG1hdGNoZG90KTsKLQkgICAgaWYgKG1hdGNoZG90KSAgbnp4b3B0cyB8PSBaWF9NQVRDSERP VDsKLQkgICAgaWYgKHJlY3Vyc2l2ZSkgbnp4b3B0cyB8PSBaWF9SRUNVUlNFOwotCSAgICB5ID0g bnp4cGFuZCgqeHAsbnp4b3B0cyk7Ci0JICAgIG5maWxlcyA9IHk7Ci0JICAgICpzcCA9ICdcMCc7 Ci0JICAgIGlmICh5ID09IDApIHsKLQkJaWYgKG5vbXNnKSB7Ci0JCSAgICBwcmludGYoIjogJXNc biIsYXRtYnVmKTsKLQkJICAgIHByaW50ZigiJXMlcyIsY21wcm9tLGNtZGJ1Zik7Ci0JCSAgICBm Zmx1c2goc3Rkb3V0KTsKLQkJICAgIGlmIChucCkgZnJlZShucCk7Ci0JCSAgICByZXR1cm4oLTEp OwotCQl9IGVsc2UgewotI2lmZGVmIENLUk9PVAotCQkgICAgaWYgKGNrcm9vdGVycikKLQkJICAg ICAgcHJpbnRmKCI/T2ZmIExpbWl0czogJXNcbiIsYXRtYnVmKTsKLQkJICAgIGVsc2UKLSNlbmRp ZiAvKiBDS1JPT1QgKi8KLQkJICAgICAgcHJpbnRmKCI/Tm8gJXMgbWF0Y2ggLSAlc1xuIiwKLQkJ CSAgICAgZGlyZmxnID8gImRpcmVjdG9yaWVzIiA6ICJmaWxlcyIsIGF0bWJ1Zik7Ci0JCSAgICBp ZiAobnApIGZyZWUobnApOwotCQkgICAgcmV0dXJuKC05KTsKLQkJfQotCSAgICB9IGVsc2UgaWYg KHkgPCAwKSB7Ci0jaWZkZWYgQ0tST09UCi0JCWlmIChja3Jvb3RlcnIpCi0JCSAgcHJpbnRmKCI/ T2ZmIExpbWl0czogJXNcbiIsYXRtYnVmKTsKLQkJZWxzZQotI2VuZGlmIC8qIENLUk9PVCAqLwot CQkgIHByaW50ZigiP1RvbyBtYW55ICVzIG1hdGNoIC0gJXNcbiIsCi0JCQkgZGlyZmxnID8gImRp cmVjdG9yaWVzIiA6ICJmaWxlcyIsIGF0bWJ1Zik7Ci0JCWlmIChucCkgZnJlZShucCk7Ci0JCXJl dHVybigtOSk7Ci0JICAgIH0gZWxzZSB7Ci0JCXByaW50ZigiLCBvbmUgb2YgdGhlIGZvbGxvd2lu ZzpcbiIpOwotCQlpZiAoZmlsaGVscCgoaW50KXksIiIsIiIsMSxkaXJmbGcpIDwgMCkgewotCQkg ICAgaWYgKG5wKSBmcmVlKG5wKTsKLQkJICAgIHJldHVybigtOSk7Ci0JCX0KLQkgICAgfQotCSAg ICBwcmludGYoIiVzJXMiLGNtcHJvbSxjbWRidWYpOwotCSAgICBmZmx1c2goc3Rkb3V0KTsKLQkg ICAgYnJlYWs7Ci0jZW5kaWYgLyogTUFDICovCi0JfQotI2lmZGVmIEJTX0RJUlNFUAotICAgICAg ICBkaXJuYW1mbGcgPSAxOwotICAgICAgICB4ID0gZ3R3b3JkKDApOyAgICAgICAgICAgICAgICAg IC8qIE5vLCBnZXQgYSB3b3JkICovCi0JZGlybmFtZmxnID0gMDsKLSNlbHNlCi0gICAgICAgIHgg PSBndHdvcmQoMCk7ICAgICAgICAgICAgICAgICAgLyogTm8sIGdldCBhIHdvcmQgKi8KLSNlbmRp ZiAvKiBCU19ESVJTRVAgKi8KLQkqeHAgPSBhdG1idWY7Ci0gICAgfQotfQotCi0vKiAgQyBNIEYg TCBEICAtLSAgUGFyc2UgYW4gYXJiaXRyYXJ5IGZpZWxkICAqLwotLyoKLSAgUmV0dXJuczoKLSAg ICAtMyBpZiBubyBpbnB1dCBwcmVzZW50IHdoZW4gcmVxdWlyZWQsCi0gICAgLTIgaWYgZmllbGQg dG9vIGJpZyBmb3IgYnVmZmVyLAotICAgIC0xIGlmIHJlcGFyc2UgbmVlZGVkLAotICAgICAwIG90 aGVyd2lzZSwgeHAgcG9pbnRpbmcgdG8gc3RyaW5nIHJlc3VsdC4KLQotICBOT1RFOiBHbG9iYWwg ZmxhZyBrZWVwYWxsY2hhcnMgc2F5cyB3aGV0aGVyIHRoaXMgcm91dGluZSBzaG91bGQgYnJlYWsg b24gQ1IKLSAgb3IgTEY6IG5lZWRlZCBmb3IgTUlOUFVUIHRhcmdldHMgYW5kIERFQ0xBUkUgaW5p dGlhbGl6ZXJzLCB3aGVyZSB3ZSB3YW50IHRvCi0gIGtlZXAgY29udHJvbCBjaGFyYWN0ZXJzIGlm IHRoZSB1c2VyIHNwZWNpZmllcyB0aGVtIChNYXJjaCAyMDAzKS4gIEl0IG1pZ2h0Ci0gIGhhdmUg YmVlbiBiZXR0ZXIgdG8gY2hhbmdlIHRoZSBjYWxsaW5nIHNlcXVlbmNlIGJ1dCB0aGF0IHdhcyBu b3QgcHJhY3RpY2FsLgotKi8KLWludAotY21mbGQoeGhscCx4ZGVmLHhwLGYpIGNoYXIgKnhobHAs ICp4ZGVmLCAqKnhwOyB4eF9zdHJwIGY7IHsKLSAgICBpbnQgeCwgeGM7Ci0gICAgY2hhciAqenE7 Ci0KLSAgICBpbndvcmQgPSAwOwkJCQkvKiBJbml0aWFsaXplIGNvdW50cyAmIHBvaW50ZXJzICov Ci0gICAgY2MgPSAwOwotICAgIHhjID0gMDsKLSAgICAqeHAgPSAiIjsKLQotICAgIGRlYnVnKEYx MTAsImNtZmxkIHhkZWYgMSIseGRlZiwwKTsKLQotICAgIGlmICgheGhscCkgeGhscCA9ICIiOwot ICAgIGlmICgheGRlZikgeGRlZiA9ICIiOwotICAgIGNrc3RybmNweShjbWRlZmF1bHQseGRlZixD TURFRkFVTFQpOyAvKiBDb3B5IGRlZmF1bHQgKi8KLSAgICB4ZGVmID0gY21kZWZhdWx0OwotCi0g ICAgZGVidWcoRjExMSwiY21mbGQgeGRlZiAyIix4ZGVmLGNtZmxncyk7Ci0gICAgZGVidWcoRjEx MSwiY21mbGQgYXRtYnVmIDEiLGF0bWJ1Zix4Yyk7Ci0KLSAgICBpZiAoKHggPSBjbWZsZ3MpICE9 IDEpIHsgICAgICAgICAgICAvKiBBbHJlYWR5IGNvbmZpcm1lZD8gKi8KLSAgICAgICAgeCA9IGd0 d29yZCgwKTsgICAgICAgICAgICAgICAgICAvKiBObywgZ2V0IGEgd29yZCAqLwotICAgIH0gZWxz ZSB7Ci0JaWYgKHNldGF0bSh4ZGVmLDApIDwgMCkgewkvKiBJZiBzbywgdXNlIGRlZmF1bHQsIGlm IGFueS4gKi8KLQkgICAgcHJpbnRmKCI/RGVmYXVsdCB0b28gbG9uZ1xuIik7Ci0JICAgIHJldHVy bigtOSk7Ci0JfQotICAgIH0KLSAgICAqeHAgPSBhdG1idWY7ICAgICAgICAgICAgICAgICAgICAg ICAvKiBQb2ludCB0byByZXN1bHQuICovCi0gICAgZGVidWcoRjExMSwiY21mbGQgYXRtYnVmIDIi LGF0bWJ1ZixjbWZsZ3MpOwotCi0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgeGMgKz0gY2M7ICAg ICAgICAgICAgICAgICAgICAgICAvKiBDb3VudCB0aGUgY2hhcmFjdGVycy4gKi8KLSAgICAgICAg ZGVidWcoRjExMSwiY21mbGQgZ3R3b3JkIixhdG1idWYseGMpOwotICAgICAgICBkZWJ1ZyhGMTAx LCJjbWZsZCB4IiwiIix4KTsKLSAgICAgICAgc3dpdGNoICh4KSB7Ci0JICBjYXNlIC05OgotCSAg ICBwcmludGYoIkNvbW1hbmQgb3IgZmllbGQgdG9vIGxvbmdcbiIpOwotCSAgY2FzZSAtNDoJCQkv KiBFT0YgKi8KLQkgIGNhc2UgLTM6CQkJLyogRW1wdHkuICovCi0JICBjYXNlIC0yOgkJCS8qIE91 dCBvZiBzcGFjZS4gKi8KLQkgIGNhc2UgLTE6CQkJLyogUmVwYXJzZSBuZWVkZWQgKi8KLQkgICAg cmV0dXJuKHgpOwotCSAgY2FzZSAxOgkJCS8qIENSICovCi0JICBjYXNlIDA6CQkJLyogU1AgKi8K LQkgICAgZGVidWcoRjExMSwiY21mbGQgMSIsYXRtYnVmLHhjKTsKLQkgICAgaWYgKHhjID09IDAp IHsJCS8qIElmIG5vIGlucHV0LCByZXR1cm4gZGVmYXVsdC4gKi8KLQkJaWYgKHNldGF0bSh4ZGVm LDApIDwgMCkgewotCQkgICAgcHJpbnRmKCI/RGVmYXVsdCB0b28gbG9uZ1xuIik7Ci0JCSAgICBy ZXR1cm4oLTkpOwotCQl9Ci0JICAgIH0KLQkgICAgKnhwID0gYXRtYnVmOwkJLyogUG9pbnQgdG8g d2hhdCB3ZSBnb3QuICovCi0JICAgIGRlYnVnKEYxMTEsImNtZmxkIDIiLGF0bWJ1ZiwoKGYpID8g MSA6IDApKTsKLQkgICAgaWYgKGYpIHsJCQkvKiBJZiBhIGNvbnZlcnNpb24gZnVuY3Rpb24gaXMg Z2l2ZW4gKi8KLQkJenEgPSBhdHhidWY7CQkvKiBlbXBsb3kgaXQgbm93LiAqLwotCQlhdHhuID0g Q01EQkw7Ci0JCWlmICgoKmYpKCp4cCwmenEsJmF0eG4pIDwgMCkKLQkJICByZXR1cm4oLTIpOwot CQlkZWJ1ZyhGMTExLCJjbWZsZCAzIixhdHhidWYseGMpOwotCQkvKiBSZXBsYWNlIGJ5IG5ldyB2 YWx1ZSAtLSBmb3IgTUlOUFVUIG9ubHkga2VlcCBhbGwgY2hhcnMgKi8KLQkJaWYgKHNldGF0bShh dHhidWYsa2VlcGFsbGNoYXJzID8gMzoxKSA8IDApIHsgLyogMTYgTWFyIDIwMDMgKi8KLQkJICAg IHByaW50ZigiVmFsdWUgdG9vIGxvbmdcbiIpOwotCQkgICAgcmV0dXJuKC05KTsKLQkJfQotCQkq eHAgPSBhdG1idWY7Ci0JICAgIH0KLQkgICAgZGVidWcoRjExMSwiY21mbGQgNCIsYXRtYnVmLHhj KTsKLQkgICAgaWYgKCoqeHAgPT0gTlVMKSB7CQkvKiBJZiB2YXJpYWJsZSBldmFsdWF0ZXMgdG8g bnVsbCAqLwotCQlpZiAoc2V0YXRtKHhkZWYsMCkgPCAwKSB7Ci0JCSAgICBwcmludGYoIj9EZWZh dWx0IHRvbyBsb25nXG4iKTsKLQkJICAgIHJldHVybigtOSk7Ci0JCX0KLQkJaWYgKCoqeHAgPT0g TlVMKSB4ID0gLTM7IC8qIElmIHN0aWxsIGVtcHR5LCByZXR1cm4gLTMuICovCi0JICAgIH0KLQkg ICAgZGVidWcoRjExMSwiY21mbGQgcmV0dXJucyIsKnhwLHgpOwotCSAgICByZXR1cm4oeCk7Ci0J ICBjYXNlIDI6CQkJLyogRVNDICovCi0JICAgIGlmICh4YyA9PSAwICYmICp4ZGVmKSB7Ci0JCXBy aW50ZigiJXMgIix4ZGVmKTsgLyogSWYgYXQgYmVnaW5uaW5nIG9mIGZpZWxkLCAqLwotI2lmZGVm IEdFTURPUwotCQlmZmx1c2goc3Rkb3V0KTsKLSNlbmRpZiAvKiBHRU1ET1MgKi8KLQkJYWRkYnVm KHhkZWYpOwkJLyogU3VwcGx5IGRlZmF1bHQuICovCi0JCWlud29yZCA9IGNtZmxncyA9IDA7Ci0J CWlmIChzZXRhdG0oeGRlZiwwKSA8IDApIHsKLQkJICAgIHByaW50ZigiP0RlZmF1bHQgdG9vIGxv bmdcbiIpOwotCQkgICAgcmV0dXJuKC05KTsKLQkJfSBlbHNlCQkJLyogUmV0dXJuIGFzIGlmIHdo b2xlIGZpZWxkICovCi0JCSAgcmV0dXJuKDApOwkJLyogdHlwZWQsIGZvbGxvd2VkIGJ5IHNwYWNl LiAqLwotCSAgICB9IGVsc2UgewotCQlibGVlcChCUF9XQVJOKTsKLQkgICAgfQotCSAgICBicmVh azsKLQkgIGNhc2UgMzoJCQkvKiBRdWVzdGlvbiBtYXJrICovCi0JICAgIGRlYnVnKEYxMTAsImNt ZmxkIFFVRVNUSU9OTUFSSyIsY21kYnVmLDApOwotCSAgICBpZiAoKnhobHAgPT0gTlVMKQotCSAg ICAgIHByaW50ZigiIFBsZWFzZSBjb21wbGV0ZSB0aGlzIGZpZWxkIik7Ci0JICAgIGVsc2UKLQkg ICAgICBwcmludGYoIiAlcyIseGhscCk7Ci0JICAgIHByaW50ZigiXG4lcyVzIixjbXByb20sY21k YnVmKTsKLQkgICAgZmZsdXNoKHN0ZG91dCk7Ci0JICAgIGJyZWFrOwotICAgICAgICB9Ci0JZGVi dWcoRjExMSwiY21mbGQgZ3R3b3JkIEEgeCIsY21kYnVmLHgpOwotCXggPSBndHdvcmQoMCk7Ci0J ZGVidWcoRjExMSwiY21mbGQgZ3R3b3JkIEIgeCIsY21kYnVmLHgpOwotICAgIH0KLX0KLQotCi0v KiAgQyBNIFQgWCBUICAtLSAgR2V0IGEgdGV4dCBzdHJpbmcsIGluY2x1ZGluZyBjb25maXJtYXRp b24gICovCi0KLS8qCi0gIFByaW50IGhlbHAgbWVzc2FnZSAneGhscCcgaWYgPyB0eXBlZCwgc3Vw cGx5IGRlZmF1bHQgJ3hkZWYnIGlmIG51bGwKLSAgc3RyaW5nIHR5cGVkLiAgUmV0dXJuczoKLQot ICAgLTEgaWYgcmVwYXJzZSBuZWVkZWQgb3IgYnVmZmVyIG92ZXJmbG93cy4KLSAgICAxIG90aGVy d2lzZS4KLQotICB3aXRoIGNtZmxncyBzZXQgdG8gcmV0dXJuIGNvZGUsIGFuZCB4cCBwb2ludGlu ZyB0byByZXN1bHQgc3RyaW5nLgotKi8KLWludAotY210eHQoeGhscCx4ZGVmLHhwLGYpIGNoYXIg KnhobHA7IGNoYXIgKnhkZWY7IGNoYXIgKip4cDsgeHhfc3RycCBmOyB7Ci0KLSAgICBpbnQgeCwg aTsKLSAgICBjaGFyICp4eCwgKnpxOwotICAgIHN0YXRpYyBpbnQgeGM7Ci0KLSAgICBpZiAoIXho bHApIHhobHAgPSAiIjsKLSAgICBpZiAoIXhkZWYpIHhkZWYgPSAiIjsKLQotICAgIGNtZmxkZmxn cyA9IDA7Ci0KLSAgICBjbWRlZmF1bHRbMF0gPSBOVUw7Ci0gICAgaWYgKCp4ZGVmKQotICAgICAg Y2tzdHJuY3B5KGNtZGVmYXVsdCx4ZGVmLENNREVGQVVMVCk7IC8qIENvcHkgZGVmYXVsdCAqLwot ICAgIHhkZWYgPSBjbWRlZmF1bHQ7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJjbXR4dCBjbWZsZ3MiLCIi LGNtZmxncyk7Ci0gICAgaW53b3JkID0gMDsJCQkJLyogU3RhcnQgYXRtYnVmIGNvdW50ZXIgb2Zm IGF0IDAgKi8KLSAgICBjYyA9IDA7Ci0gICAgaWYgKGNtZmxncyA9PSAtMSkgeyAgICAgICAgICAg ICAgICAgLyogSWYgcmVwYXJzaW5nLCAqLwotCSp4cCA9IHBwOwotICAgICAgICB4YyA9IChpbnQp c3RybGVuKCp4cCk7CQkvKiBnZXQgYmFjayB0aGUgdG90YWwgdGV4dCBsZW5ndGgsICovCi0JYnAg PSAqeHA7CQkJLyogYW5kIGJhY2sgdXAgdGhlIHBvaW50ZXJzLiAqLwotCW5wID0gKnhwOwotCXBw ID0gKnhwOwotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG90aGVy d2lzZSwgKi8KLQkvKiBkZWJ1ZyhGMTAwLCJjbXR4dDogZnJlc2ggc3RhcnQiLCIiLDApOyAqLwot ICAgICAgICAqeHAgPSAiIjsgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YXJ0IGZyZXNoLiAq LwotICAgICAgICB4YyA9IDA7Ci0gICAgfQotICAgICphdG1idWYgPSBOVUw7ICAgICAgICAgICAg ICAgICAgICAgIC8qIEFuZCBlbXB0eSB0aGUgYXRvbSBidWZmZXIuICovCi0gICAgcnRpbWVyKCk7 CQkJCS8qIFJlc2V0IHRpbWVyICovCi0gICAgaWYgKCh4ID0gY21mbGdzKSAhPSAxKSB7Ci0JaW50 IGRvbmUgPSAwOwotCXdoaWxlICghZG9uZSkgewotCSAgICB4ID0gZ3R3b3JkKDApOwkJLyogR2V0 IGZpcnN0IHdvcmQuICovCi0JICAgICp4cCA9IHBwOwkJCS8qIFNhdmUgcG9pbnRlciB0byBpdC4g Ki8KLQkgICAgLyogZGVidWcoRjExMSwiY210eHQ6IiwqeHAsY2MpOyAqLwotCSAgICBpZiAoeCA9 PSAtMTApIHsKLQkJaWYgKGd0aW1lcigpID4gdGltZWxpbWl0KSB7Ci0JCSAgICAvKiBpZiAoIXF1 aWV0KSBwcmludGYoIj9UaW1lZCBvdXRcbiIpOyAqLwotCQkgICAgcmV0dXJuKHgpOwotCQl9Ci0J ICAgIH0gZWxzZQotCSAgICAgIGRvbmUgPSAxOwotCX0KLSAgICB9Ci0gICAgd2hpbGUgKDEpIHsJ CQkJLyogTG9vcCBmb3IgZWFjaCB3b3JkIGluIHRleHQuICovCi0gICAgICAgIHhjICs9IGNjOyAg ICAgICAgICAgICAgICAgICAgICAgLyogQ2hhciBjb3VudCBmb3IgYWxsIHdvcmRzLiAqLwotICAg ICAgICAvKiBkZWJ1ZyhGMTExLCJjbXR4dCBndHdvcmQiLGF0bWJ1Zix4Yyk7ICovCi0gICAgICAg IC8qIGRlYnVnKEYxMDEsImNtdHh0IHgiLCIiLHgpOyAqLwotICAgICAgICBzd2l0Y2ggKHgpIHsK LQkgIGNhc2UgLTEwOgotCSAgICBpZiAoZ3RpbWVyKCkgPiB0aW1lbGltaXQpIHsKLSNpZmRlZiBJ S1NECi0gICAgICAgICAgICAgICAgZXh0ZXJuIGludCBpbnNlcnZlcjsKLSAgICAgICAgICAgICAg ICBpZiAoaW5zZXJ2ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcclxuSUtTRCBJ RExFIFRJTUVPVVQ6ICVkIHNlY1xyXG4iLCB0aW1lbGltaXQpOwotICAgICAgICAgICAgICAgICAg ICBkb2V4aXQoR09PRF9FWElULDApOwotICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBJS1NE ICovCi0JCS8qIGlmICghcXVpZXQpIHByaW50ZigiP1RpbWVkIG91dFxuIik7ICovCi0JCXJldHVy bigtMTApOwotCSAgICB9IGVsc2UgewotCQl4ID0gZ3R3b3JkKDApOwotCQljb250aW51ZTsKLQkg ICAgfQotCSAgY2FzZSAtOToJCQkvKiBCdWZmZXIgb3ZlcmZsb3cgKi8KLQkgICAgcHJpbnRmKCJD b21tYW5kIG9yIGZpZWxkIHRvbyBsb25nXG4iKTsKLQkgIGNhc2UgLTQ6CQkJLyogRU9GICovCi0j aWZkZWYgTUFDCi0JICBjYXNlIC0zOgkJCS8qIFF1aXQvVGltZW91dCAqLwotI2VuZGlmIC8qIE1B QyAqLwotCSAgY2FzZSAtMjoJCQkvKiBPdmVyZmxvdyAqLwotCSAgY2FzZSAtMToJCQkvKiBEZWxl dGlvbiAqLwotCSAgICByZXR1cm4oeCk7Ci0JICBjYXNlIDA6CQkJLyogU3BhY2UgKi8KLQkgICAg eGMrKzsJCQkvKiBKdXN0IGNvdW50IGl0ICovCi0JICAgIGJyZWFrOwotCSAgY2FzZSAxOgkJCS8q IENSIG9yIExGICovCi0JICAgIGlmICh4YyA9PSAwKSAqeHAgPSB4ZGVmOwotCSAgICBpZiAoZikg ewkJCS8qIElmIGEgY29udmVyc2lvbiBmdW5jdGlvbiBpcyBnaXZlbiAqLwotCQljaGFyICogc3gg PSBhdHhidWY7Ci0JCXpxID0gYXR4YnVmOwkJLyogUG9pbnQgdG8gdGhlIGV4cGFuc2lvbiBidWZm ZXIgKi8KLQkJYXR4biA9IENNREJMOwkJLyogc3BlY2lmeSBpdHMgbGVuZ3RoICovCi0JCS8qIGRl YnVnKEYxMTEsImNtdHh0IGNhbGxpbmcgKCpmKSIsKnhwLGF0eGJ1Zik7ICovCi0JCWlmICgoeCA9 ICgqZikoKnhwLCZ6cSwmYXR4bikpIDwgMCkgcmV0dXJuKC0yKTsKLQkJc3ggPSBhdHhidWY7Ci0j aWZuZGVmIENPTU1FTlQKLQkJY2MgPSAwOwotCQl3aGlsZSAoKnN4KyspIGNjKys7CS8qIChmYXN0 ZXIgdGhhbiBjYWxsaW5nIHN0cmxlbikgKi8KLSNlbHNlCi0JCWNjID0gKGludClzdHJsZW4oYXR4 YnVmKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0JCS8qIFNob3VsZCBiZSBlcXVhbCB0byAoQ01E QkwgLSBhdHhuKSBidXQgaXNuJ3QgYWx3YXlzLiAqLwotCQkvKiBXaHkgbm90PyAqLwotCQlpZiAo Y2MgPCAxKSB7CQkvKiBOb3RoaW5nIGluIGV4cGFuc2lvbiBidWZmZXI/ICovCi0JCSAgICAqeHAg PSB4ZGVmOwkJLyogUG9pbnQgdG8gZGVmYXVsdCBzdHJpbmcgaW5zdGVhZC4gKi8KLSNpZm5kZWYg Q09NTUVOVAotCQkgICAgc3ggPSB4ZGVmOwotCQkgICAgd2hpbGUgKCpzeCsrKSBjYysrOwkvKiAo ZmFzdGVyIHRoYW4gY2FsbGluZyBzdHJsZW4pICovCi0jZWxzZQotCQkgICAgY2MgPSBzdHJsZW4o eGRlZik7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCQl9IGVsc2UgewkJLyogRXhwYW5zaW9uIGZ1 bmN0aW9uIGdvdCBzb21ldGhpbmcgKi8KLQkJICAgICp4cCA9IGF0eGJ1ZjsJLyogcmV0dXJuIHBv aW50ZXIgdG8gaXQuICovCi0JCX0KLQkJZGVidWcoRjExMSwiY210eHQgKCpmKSIsKnhwLGNjKTsK LQkgICAgfSBlbHNlIHsJCQkvKiBObyBleHBhbnNpb24gZnVuY3Rpb24gKi8KLSNpZm5kZWYgQ09N TUVOVAotCQkvKiBBdm9pZCBhIHN0cmxlbigpIGNhbGwgKi8KLQkJeHggPSAqeHA7Ci0JCWNjID0g MDsKLQkJd2hpbGUgKCp4eCsrKSBjYysrOwotI2Vsc2UKLQkJLyogTk8hICB4YyBpcyBhcHBhcmVu dGx5IG5vdCBhbHdheXMgc2V0IGFwcHJvcHJpYXRlbHkgKi8KLQkJY2MgPSB4YzsKLSNlbmRpZiAv KiBDT01NRU5UICovCi0JICAgIH0KLQkgICAgeHggPSAqeHA7Ci0jaWZkZWYgQ09NTUVOVAotCSAg ICAvKiBzdHJsZW4oKSBubyBsb25nZXIgbmVlZGVkICovCi0JICAgIGZvciAoaSA9IChpbnQpc3Ry bGVuKHh4KSAtIDE7IGkgPiAwOyBpLS0pCi0jZWxzZQotCSAgICBmb3IgKGkgPSBjYyAtIDE7IGkg PiAwOyBpLS0pCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCSAgICAgIGlmICh4eFtpXSAhPSBTUCkJ CS8qIFRyaW0gdHJhaWxpbmcgYmxhbmtzICovCi0JCWJyZWFrOwotCSAgICAgIGVsc2UKLQkJeHhb aV0gPSBOVUw7Ci0JICAgIHJldHVybih4KTsKLQkgIGNhc2UgMjoJCQkvKiBFU0MgKi8KLQkgICAg aWYgKHhjID09IDApIHsJCS8qIE5vdGhpbmcgdHlwZWQgeWV0ICovCi0JCWlmICgqeGRlZikgewkJ LyogSGF2ZSBhIGRlZmF1bHQgZm9yIHRoaXMgZmllbGQ/ICovCi0JCSAgICBwcmludGYoIiVzICIs eGRlZik7CS8qIFllcywgc3VwcGx5IGl0ICovCi0JCSAgICBpbndvcmQgPSBjbWZsZ3MgPSAwOwot I2lmZGVmIEdFTURPUwotCQkgICAgZmZsdXNoKHN0ZG91dCk7Ci0jZW5kaWYgLyogR0VNRE9TICov Ci0JCSAgICBjYyA9IGFkZGJ1Zih4ZGVmKTsKLQkJfSBlbHNlIGJsZWVwKEJQX1dBUk4pOwkvKiBO byBkZWZhdWx0ICovCi0JICAgIH0gZWxzZSB7CQkJLyogQWxyZWFkeSBpbiBmaWVsZCAqLwotCQlp bnQgeDsgY2hhciAqcDsKLQkJeCA9IHN0cmxlbihhdG1idWYpOwotCQlpZiAoY2tzdHJjbXAoYXRt YnVmLHhkZWYseCwwKSkgeyAgICAvKiBNYXRjaGVzIGRlZmF1bHQ/ICovCi0JCSAgICBibGVlcChC UF9XQVJOKTsJICAgICAgICAgICAgLyogTm8gKi8KLQkJfSBlbHNlIGlmICgoaW50KXN0cmxlbih4 ZGVmKSA+IHgpIHsgLyogWWVzICovCi0JCSAgICBwID0geGRlZiArIHg7Ci0JCSAgICBwcmludGYo IiVzICIsIHApOwotI2lmZGVmIEdFTURPUwotCQkgICAgZmZsdXNoKHN0ZG91dCk7Ci0jZW5kaWYg LyogR0VNRE9TICovCi0JCSAgICBhZGRidWYocCk7Ci0JCSAgICBpbndvcmQgPSBjbWZsZ3MgPSAw OwotCQkgICAgZGVidWcoRjExMCwiY210eHQ6IGFkZGJ1ZiIsY21kYnVmLDApOwotCQl9IGVsc2Ug ewotCQkgICAgYmxlZXAoQlBfV0FSTik7Ci0JCX0KLQkgICAgfQotCSAgICBicmVhazsKLQkgIGNh c2UgMzoJCQkvKiBRdWVzdGlvbiBNYXJrICovCi0JICAgIGlmICgqeGhscCA9PSBOVUwpCi0JICAg ICAgcHJpbnRmKCIgVGV4dCBzdHJpbmciKTsKLQkgICAgZWxzZQotCSAgICAgIHByaW50ZigiICVz Iix4aGxwKTsKLQkgICAgcHJpbnRmKCJcbiVzJXMiLGNtcHJvbSxjbWRidWYpOwotCSAgICBmZmx1 c2goc3Rkb3V0KTsKLQkgICAgYnJlYWs7Ci0JICBkZWZhdWx0OgotCSAgICBwcmludGYoIj9VbmV4 cGVjdGVkIHJldHVybiBjb2RlIGZyb20gZ3R3b3JkKCkgLSAlZFxuIix4KTsKLQkgICAgcmV0dXJu KC0yKTsKLSAgICAgICAgfQotICAgICAgICB4ID0gZ3R3b3JkKDApOwotICAgIH0KLX0KLQotLyog IEMgTSBLIEUgWSAgLS0gIFBhcnNlIGEga2V5d29yZCAgKi8KLQotLyoKLSBDYWxsIHdpdGg6Ci0g ICB0YWJsZSAgICAtLSAga2V5d29yZCB0YWJsZSwgaW4gJ3N0cnVjdCBrZXl0YWInIGZvcm1hdDsK LSAgIG4gICAgICAgIC0tICBudW1iZXIgb2YgZW50cmllcyBpbiB0YWJsZTsKLSAgIHhobHAgICAg IC0tICBwb2ludGVyIHRvIGhlbHAgc3RyaW5nOwotICAgeGRlZiAgICAgLS0gIHBvaW50ZXIgdG8g ZGVmYXVsdCBrZXl3b3JkOwotICAgZiAgICAgICAgLS0gIHN0cmluZyBwcmVwcm9jZXNzaW5nIGZ1 bmN0aW9uIChlLmcuIHRvIGV2YWx1YXRlIHZhcmlhYmxlcykKLSAgIHBtc2cgICAgIC0tICAwID0g ZG9uJ3QgcHJpbnQgZXJyb3IgbWVzc2FnZXMKLSAgICAgICAgICAgICAgICAxID0gcHJpbnQgZXJy b3IgbWVzc2FnZXMKLSAgICAgICAgICAgICAgICAyID0gaW5jbHVkZSBDTV9ITFAga2V5d29yZHMg ZXZlbiBpZiBpbnZpc2libGUKLSAgICAgICAgICAgICAgICAzID0gMSsyCi0gICAgICAgICAgICAg ICAgNCA9IHBhcnNlIGEgc3dpdGNoIChrZXl3b3JkIHBvc3NpYmx5IGVuZGluZyBpbiA6IG9yID0p Ci0gICAgICAgICAgICAgICAgOCA9IGRvbid0IHN0cmlwIGNvbW1lbnRzICh1c2VkLCBlLmcuLCBm b3IgImhlbHAgIyIpCi0gUmV0dXJuczoKLSAgIC0zICAgICAgIC0tICBubyBpbnB1dCBzdXBwbGll ZCBhbmQgbm8gZGVmYXVsdCBhdmFpbGFibGUKLSAgIC0yICAgICAgIC0tICBpbnB1dCBkb2Vzbid0 IHVuaXF1ZWx5IG1hdGNoIGEga2V5d29yZCBpbiB0aGUgdGFibGUKLSAgIC0xICAgICAgIC0tICB1 c2VyIGRlbGV0ZWQgdG9vIG11Y2gsIGNvbW1hbmQgcmVwYXJzZSByZXF1aXJlZAotICAgIG4gPj0g MCAgLS0gIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBrZXl3b3JkCi0qLwotCi0vKgotICBGcm9udCBl bmRzIGZvciBjbWtleTIoKTogCi0gIGNta2V5KCkgIC0gVGhlIG5vcm1hbCBrZXl3b3JkIHBhcnNl cgotICBjbWtleXgoKSAtIExpa2UgY21rZXkoKSBidXQgc3VwcHJlc3NlcyBlcnJvciBtZXNzYWdl cwotICBjbXN3aSgpICAtIFN3aXRjaCBwYXJzZXIKLSovCi1pbnQKLWNta2V5KHRhYmxlLG4seGhs cCx4ZGVmLGYpCi0vKiBjbWtleSAqLyAgc3RydWN0IGtleXRhYiB0YWJsZVtdOyBpbnQgbjsgY2hh ciAqeGhscCwgKnhkZWY7IHh4X3N0cnAgZjsgewotICAgIHJldHVybihjbWtleTIodGFibGUsbix4 aGxwLHhkZWYsIiIsZiwxKSk7Ci19Ci1pbnQKLWNta2V5eCh0YWJsZSxuLHhobHAseGRlZixmKQot LyogY21rZXl4ICovICBzdHJ1Y3Qga2V5dGFiIHRhYmxlW107IGludCBuOyBjaGFyICp4aGxwLCAq eGRlZjsgeHhfc3RycCBmOyB7Ci0gICAgcmV0dXJuKGNta2V5Mih0YWJsZSxuLHhobHAseGRlZiwi IixmLDApKTsKLX0KLWludAotY21zd2kodGFibGUsbix4aGxwLHhkZWYsZikKLS8qIGNtc3dpICov ICBzdHJ1Y3Qga2V5dGFiIHRhYmxlW107IGludCBuOyBjaGFyICp4aGxwLCAqeGRlZjsgeHhfc3Ry cCBmOyB7Ci0gICAgcmV0dXJuKGNta2V5Mih0YWJsZSxuLHhobHAseGRlZiwiIixmLDQpKTsKLX0K LQotaW50Ci1jbWtleTIodGFibGUsbix4aGxwLHhkZWYsdG9rLGYscG1zZykKLSAgICBzdHJ1Y3Qg a2V5dGFiIHRhYmxlW107Ci0gICAgaW50IG47Ci0gICAgY2hhciAqeGhscCwgKnhkZWY7Ci0gICAg Y2hhciAqdG9rOwotICAgIHh4X3N0cnAgZjsKLSAgICBpbnQgcG1zZzsKLXsgLyogY21rZXkyICov Ci0gICAgZXh0ZXJuIGludCBoYXZldG9rZW47Ci0gICAgaW50IGksIHRsLCB5LCB6ID0gMCwgenos IHhjLCB3b3JkbGVuID0gMCwgY21zd2l0Y2g7Ci0gICAgY2hhciAqeHAsICp6cTsKLQotICAgIGlm ICgheGhscCkgeGhscCA9ICIiOwotICAgIGlmICgheGRlZikgeGRlZiA9ICIiOwotCi0gICAgY21m bGRmbGdzID0gMDsKLSAgICBpZiAoIXRhYmxlKSB7Ci0JcHJpbnRmKCI/S2V5d29yZCB0YWJsZSBt aXNzaW5nXG4iKTsKLQlyZXR1cm4oLTkpOwotICAgIH0KLSAgICB0bCA9IChpbnQpc3RybGVuKHRv ayk7Ci0KLSAgICBpbndvcmQgPSB4YyA9IGNjID0gMDsJCS8qIENsZWFyIGNoYXJhY3RlciBjb3Vu dGVycy4gKi8KLSAgICBjbXN3aXRjaCA9IHBtc2cgJiA0OwkJLyogRmxhZyBmb3IgcGFyc2luZyBh IHN3aXRjaCAqLwotCi0gICAgZGVidWcoRjEwMSwiY21rZXk6IHBtc2ciLCIiLHBtc2cpOwotICAg IGRlYnVnKEYxMDEsImNta2V5OiBjbWZsZ3MiLCIiLGNtZmxncyk7Ci0gICAgZGVidWcoRjEwMSwi Y21rZXk6IGNtc3dpdGNoIiwiIixjbXN3aXRjaCk7Ci0gICAgLyogZGVidWcoRjEwMSwiY21rZXk6 IGNtZGJ1ZiIsIiIsY21kYnVmKTsqLwotCi0gICAgcHB2bmFtYnVmWzBdID0gTlVMOwotCi0gICAg aWYgKCh6eiA9IGNtZmxncykgPT0gMSkgewkJLyogQ29tbWFuZCBhbHJlYWR5IGVudGVyZWQ/ICov Ci0JaWYgKHNldGF0bSh4ZGVmLDApIDwgMCkgewkvKiBZZXMsIGNvcHkgZGVmYXVsdCBpbnRvIGF0 b20gYnVmICovCi0JICAgIHByaW50ZigiP0RlZmF1bHQgdG9vIGxvbmdcbiIpOwotCSAgICByZXR1 cm4oLTkpOwotCX0KLSAgICAgICAgcnRpbWVyKCk7CQkJIC8qIFJlc2V0IHRpbWVyICovCi0gICAg fSBlbHNlIHsJCQkJIC8qIE90aGVyd2lzZSBnZXQgYSBjb21tYW5kIHdvcmQgKi8KLSAgICAgICAg cnRpbWVyKCk7CQkJIC8qIFJlc2V0IHRpbWVyICovCi0JaWYgKHBtc2cgJiA4KQkJCSAvKiA4IGlz IGZvciBwYXJzaW5nIEhFTFAgdG9rZW5zICovCi0JICB6eiA9IGd0d29yZCg0KTsKLQllbHNlCi0J ICB6eiA9IGd0d29yZCgocG1zZyA9PSA0KSA/IDEgOiAwKTsKLSAgICB9Ci0KLSAgICBkZWJ1ZyhG MTAxLCJjbWtleSB0YWJsZSBsZW5ndGgiLCIiLG4pOwotICAgIGRlYnVnKEYxMDEsImNta2V5IGNt ZmxncyIsIiIsY21mbGdzKTsKLSAgICBkZWJ1ZyhGMTAxLCJjbWtleSBjYyIsIiIsY2MpOwotCi0g ICAgd2hpbGUgKDEpIHsKLQl4YyArPSBjYzsKLQlkZWJ1ZyhGMTExLCJjbWtleSBndHdvcmQgeGMi LGF0bWJ1Zix4Yyk7Ci0JZGVidWcoRjEwMSwiY21rZXkgZ3R3b3JkIHp6IiwiIix6eik7Ci0KLQlz d2l0Y2ggKHp6KSB7Ci0JICBjYXNlIC0xMDoJCQkvKiBUaW1lb3V0ICovCi0JICAgIGlmIChndGlt ZXIoKSA8IHRpbWVsaW1pdCkgewotCQlpZiAocG1zZyAmIDgpCQkvKiA4IGlzIGZvciBwYXJzaW5n IEhFTFAgdG9rZW5zICovCi0JCSAgenogPSBndHdvcmQoNCk7Ci0JCWVsc2UKLQkJICB6eiA9IGd0 d29yZCgocG1zZyA9PSA0KSA/IDEgOiAwKTsKLQkJY29udGludWU7Ci0JICAgIH0gZWxzZSB7Ci0j aWZkZWYgSUtTRAotICAgICAgICAgICAgICAgIGV4dGVybiBpbnQgaW5zZXJ2ZXI7Ci0gICAgICAg ICAgICAgICAgaWYgKGluc2VydmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiXHJc bklLU0QgSURMRSBUSU1FT1VUOiAlZCBzZWNcclxuIiwgdGltZWxpbWl0KTsKLSAgICAgICAgICAg ICAgICAgICAgZG9leGl0KEdPT0RfRVhJVCwwKTsKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYg LyogSUtTRCAqLwotCQlyZXR1cm4oLTEwKTsKLSAgICAgICAgICAgIH0KLQkgIGNhc2UgLTU6Ci0J ICAgIHJldHVybihjbWZsZ3MgPSAwKTsKLQkgIGNhc2UgLTk6Ci0JICAgIHByaW50ZigiQ29tbWFu ZCBvciBmaWVsZCB0b28gbG9uZ1xuIik7Ci0JICBjYXNlIC00OgkJCS8qIEVPRiAqLwotCSAgY2Fz ZSAtMzoJCQkvKiBOdWxsIENvbW1hbmQvUXVpdC9UaW1lb3V0ICovCi0JICBjYXNlIC0yOgkJCS8q IEJ1ZmZlciBvdmVyZmxvdyAqLwotCSAgY2FzZSAtMToJCQkvKiBPciB1c2VyIGRpZCBzb21lIGRl bGV0aW5nLiAqLwotCSAgICByZXR1cm4oY21mbGdzID0genopOwotCi0KLQkgIGNhc2UgMToJCQkv KiBDUiAqLwotCSAgY2FzZSAwOgkJCS8qIFVzZXIgdGVybWluYXRlZCB3b3JkIHdpdGggc3BhY2Ug Ki8KLQkgIGNhc2UgNDoJCQkvKiBvciBzd2l0Y2ggZW5kaW5nIGluIDogb3IgPSAqLwotCSAgICB3 b3JkbGVuID0gY2M7CQkvKiBMZW5ndGggaWYgbm8gY29udmVyc2lvbiAqLwotCSAgICBpZiAoY2Mg PT0gMCkgewkJLyogU3VwcGx5IGRlZmF1bHQgaWYgd2UgZ290IG5vdGhpbmcgKi8KLQkJaWYgKCh3 b3JkbGVuID0gc2V0YXRtKHhkZWYsKHp6ID09IDQpID8gMiA6IDApKSA8IDApIHsKLQkJICAgIHBy aW50ZigiP0RlZmF1bHQgdG9vIGxvbmdcbiIpOwotCQkgICAgcmV0dXJuKC05KTsKLQkJfQotCSAg ICB9Ci0JICAgIGlmICh6eiA9PSAxICYmIGNjID09IDApCS8qIFJlcXVpcmVkIGZpZWxkIG1pc3Np bmcgKi8KLQkgICAgICByZXR1cm4oLTMpOwotCi0JICAgIGlmIChmKSB7CQkJLyogSWYgYSBjb252 ZXJzaW9uIGZ1bmN0aW9uIGlzIGdpdmVuICovCi0JCWNoYXIgKiBwMjsKLQkJenEgPSBhdHhidWY7 CQkvKiBhcHBseSBpdCAqLwotCQlwMiA9IGF0eGJ1ZjsKLQkJYXR4biA9IENNREJMOwotCQlpZiAo KCpmKShhdG1idWYsJnpxLCZhdHhuKSA8IDApIHJldHVybigtMik7Ci0JCWRlYnVnKEYxMTAsImNt a2V5IGF0eGJ1ZiBhZnRlciAqZiIsYXR4YnVmLDApOwotCQlpZiAoISpwMikJCS8qIFN1cHBseSBk ZWZhdWx0IGlmIHdlIGdvdCBub3RoaW5nICovCi0JCSAgcDIgPSB4ZGVmOwotCQlja3N0cm5jcHko cHB2bmFtYnVmLGF0bWJ1ZixQUFZMRU4pOwotCQlpZiAoKHdvcmRsZW4gPSBzZXRhdG0ocDIsKHp6 ID09IDQpID8gMiA6IDApKSA8IDApIHsKLQkJICAgIHByaW50ZigiRXZhbHVhdGVkIGtleXdvcmQg dG9vIGxvbmdcbiIpOwotCQkgICAgcmV0dXJuKC05KTsKLQkJfQotI2lmZGVmIE1fVU5HVwotCQkv KgotCQkgIFRoaXMgYml0IGxldHMgdXMgc2F2ZSBtb3JlIHRoYW4gb25lICJ3b3JkIi4KLQkJICBG b3IgZXhhbXBsZSwgImRlZmluZSBcJXggZWNobyBvbmUgdHdvIHRocmVlIiwgIlwleCIuCi0JCSAg SXQgd29ya3MgdG9vLCBidXQgaXQgYnJlYWtzIGxhYmVscywgYW5kIHRoZXJlZm9yZQotCQkgIFdI SUxFIGFuZCBGT1IgbG9vcHMsIGV0Yy4KLQkJKi8KLQkJaWYgKHAyW3dvcmRsZW5dID49IFNQKSB7 Ci0JCSAgICBwMiArPSB3b3JkbGVuOwotCQkgICAgd2hpbGUgKCpwMiA9PSBTUCkgcDIrKzsKLQkJ ICAgIGlmICgqcDIpIHsKLQkJCXVuZ3dvcmQoKTsKLQkJCXBwID0gcDI7Ci0JCSAgICB9Ci0JCX0K LSNlbmRpZiAvKiBNX1VOR1cgKi8KLQkgICAgfQotI2lmZGVmIENPTU1FTlQJCQkJLyogXl5eICov Ci0JICAgIGlmIChjbXN3aXRjaCAmJiAqYXRtYnVmICE9ICcvJykgewotCQlpZiAocG1zZyAmIDEp IHsKLQkJICAgIGJsZWVwKEJQX0ZBSUwpOwotICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9O b3QgYSBzd2l0Y2ggLSAlc1xuIixhdG1idWYpOwotCQl9Ci0JCWNtZmxncyA9IC0yOwotCQlyZXR1 cm4oLTYpOwotCSAgICB9Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwotCSAgICBpZiAoY21zd2l0Y2gp IHsKLQkJaW50IGk7Ci0JCWZvciAoaSA9IDA7IGkgPCB3b3JkbGVuOyBpKyspIHsKLQkJICAgIGlm IChhdG1idWZbaV0gPT0gJzonIHx8IGF0bWJ1ZltpXSA9PSAnPScpIHsKLQkJCWJya2NoYXIgPSBh dG1idWZbaV07Ci0JCQlhdG1idWZbaV0gPSBOVUw7Ci0JCQlicmVhazsKLQkJICAgIH0KLQkJfQot CSAgICB9Ci0KLSNpZmRlZiBUT0tQUkVDSEVDSwotLyogVGhpcyB3YXMgYW4gZWZmZWN0aXZlIG9w dGltaXphdGlvbiBidXQgaXQgYnJlYWtzIHNvbWV0aW1lcyBvbiBsYWJlbHMuICovCi0JICAgIGlm ICh0bCAmJiAhaXNhbHBoYShhdG1idWZbMF0pKSB7IC8qIFByZWNoZWNrIGZvciB0b2tlbiAqLwot CQlmb3IgKGkgPSAwOyBpIDwgdGw7IGkrKykgeyAvKiBTYXZlIGZ1bmN0aW9uIGNhbGwgdG8gY2tz dHJjaHIgKi8KLQkJICAgIGlmICh0b2tbaV0gPT0gYXRtYnVmWzBdKSB7Ci0JCQlkZWJ1ZyhGMDAw LCJjbWtleSB0b2tlbjoiLGF0bWJ1ZiwqYXRtYnVmKTsKLQkJCXVuZ3dvcmQoKTsgIC8qIFB1dCBi YWNrIHRoZSBmb2xsb3dpbmcgd29yZCAqLwotCQkJcmV0dXJuKC01KTsgLyogU3BlY2lhbCByZXR1 cm4gY29kZSBmb3IgdG9rZW4gKi8KLQkJICAgIH0KLQkJfQotCSAgICB9Ci0jZW5kaWYgLyogVE9L UFJFQ0hFQ0sgKi8KLQotCSAgICB5ID0gbG9va3VwKHRhYmxlLGF0bWJ1ZixuLCZ6KTsgLyogTG9v ayB1cCB3b3JkIGluIHRoZSB0YWJsZSAqLwotCSAgICBkZWJ1ZyhGMTExLCJjbWtleSBsb29rdXAi LGF0bWJ1Zix5KTsKLQkgICAgZGVidWcoRjEwMSwiY21rZXkgenoiLCIiLHp6KTsKLQkgICAgZGVi dWcoRjEwMSwiY21rZXkgY21mbGdzIiwiIixjbWZsZ3MpOwotCSAgICBkZWJ1ZyhGMTAxLCJjbWtl eSBjcmZsYWciLCIiLGNyZmxhZyk7Ci0JICAgIHN3aXRjaCAoeSkgewotCSAgICAgIGNhc2UgLTM6 CQkJLyogTm90aGluZyB0byBsb29rIHVwICovCi0JCWJyZWFrOwotCSAgICAgIGNhc2UgLTI6CQkJ LyogQW1iaWd1b3VzICovCi0JCWNtZmxncyA9IC0yOwotCQlpZiAocG1zZyAmIDEpIHsKLQkJICAg IGJsZWVwKEJQX0ZBSUwpOwotICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9BbWJpZ3VvdXMg LSAlc1xuIixhdG1idWYpOwotCQkgICAgcmV0dXJuKC05KTsKLQkJfQotCQlyZXR1cm4oLTIpOwot CSAgICAgIGNhc2UgLTE6CQkJLyogTm90IGZvdW5kIGF0IGFsbCAqLwotI2lmbmRlZiBUT0tQUkVD SEVDSwotCQlpZiAodGwpIHsKLQkJICAgIGZvciAoaSA9IDA7IGkgPCB0bDsgaSsrKSAvKiBDaGVj ayBmb3IgdG9rZW4gKi8KLQkJICAgICAgaWYgKHRva1tpXSA9PSAqYXRtYnVmKSB7IC8qIEdvdCBv bmUgKi8KLQkJCSAgZGVidWcoRjAwMCwiY21rZXkgdG9rZW46IixhdG1idWYsKmF0bWJ1Zik7Ci0J CQkgIHVuZ3dvcmQoKTsgIC8qIFB1dCBiYWNrIHRoZSBmb2xsb3dpbmcgd29yZCAqLwotCQkJICBy ZXR1cm4oLTUpOyAvKiBTcGVjaWFsIHJldHVybiBjb2RlIGZvciB0b2tlbiAqLwotCQkgICAgICB9 Ci0JCX0KLSNlbmRpZiAvKiBUT0tQUkVDSEVDSyAqLwotCi0JCWlmICh0bCA9PSAwKSB7CQkvKiBO byB0b2tlbnMgd2VyZSBpbmNsdWRlZCAqLwotI2lmZGVmIE9TMgotCQkgICAgLyogSW4gT1MvMiBh bmQgV2luZG93cywgYWxsb3cgZm9yIGEgZGlzayBsZXR0ZXIgbGlrZSBET1MgKi8KLQkJICAgIGlm IChpc2FscGhhKCphdG1idWYpICYmICooYXRtYnVmKzEpID09ICc6JykKLQkJICAgICAgcmV0dXJu KC03KTsKLSNlbmRpZiAvKiBPUzIgKi8KLQkJICAgIGlmICgocG1zZyAmIDEpICYmICFxdWlldCkg ewotCQkJYmxlZXAoQlBfRkFJTCk7Ci0JCQlwcmludGYoIj9ObyBrZXl3b3JkcyBtYXRjaCAtICVz XG4iLGF0bWJ1Zik7IC8qIGNta2V5ICovCi0JCSAgICB9Ci0JCSAgICByZXR1cm4oY21mbGdzID0g LTkpOwotCQl9IGVsc2UgewotCQkgICAgaWYgKGNtZmxncyA9PSAxIHx8IGNtc3dpdGNoKSAvKiBj bWtleTIgb3IgY21zd2kgKi8KLQkJICAgICAgcmV0dXJuKGNtZmxncyA9IC02KTsKLQkJICAgIGVs c2UKLQkJICAgICAgcmV0dXJuKGNtZmxncyA9IC0yKTsKLQkJICAgIC8qIFRoZSAtNiBjb2RlIGlz IHRvIGxldCBjYWxsZXIgdHJ5IGFub3RoZXIgdGFibGUgKi8KLQkJfQotCQlicmVhazsKLQkgICAg ICBkZWZhdWx0OgotI2lmZGVmIENLX1JFQ0FMTAotCQlpZiAodGVzdCh0YWJsZVt6XS5mbGdzLENN X05PUikpIG5vX3JlY2FsbCA9IDE7Ci0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0JCWlmICh6eiA9 PSA0KQotCQkgIHN3YXJnID0gMTsKLQkJY21rd2ZsZ3MgPSB0YWJsZVt6XS5mbGdzOwotCQlicmVh azsKLQkgICAgfQotCSAgICByZXR1cm4oeSk7Ci0KLQkgIGNhc2UgMjoJCQkvKiBVc2VyIHRlcm1p bmF0ZWQgd29yZCB3aXRoIEVTQyAqLwotCSAgICBkZWJ1ZyhGMTAxLCJjbWtleSBFc2MgY2MiLCIi LGNjKTsKLSAgICAgICAgICAgIGlmIChjYyA9PSAwKSB7Ci0JCWlmICgqeGRlZiAhPSBOVUwpIHsg ICAgIC8qIE5vdGhpbmcgaW4gYXRtYnVmICovCi0JCSAgICBwcmludGYoIiVzICIseGRlZik7IC8q IFN1cHBseSBkZWZhdWx0IGlmIGFueSAqLwotI2lmZGVmIEdFTURPUwotCQkgICAgZmZsdXNoKHN0 ZG91dCk7Ci0jZW5kaWYgLyogR0VNRE9TICovCi0JCSAgICBhZGRidWYoeGRlZik7Ci0JCSAgICBp ZiAoc2V0YXRtKHhkZWYsMCkgPCAwKSB7Ci0JCQlwcmludGYoIj9EZWZhdWx0IHRvbyBsb25nXG4i KTsKLQkJCXJldHVybigtOSk7Ci0JCSAgICB9Ci0JCSAgICBpbndvcmQgPSBjbWZsZ3MgPSAwOwot CQkgICAgZGVidWcoRjExMSwiY21rZXk6IGRlZmF1bHQiLGF0bWJ1ZixjYyk7Ci0JCX0gZWxzZSB7 Ci0JCSAgICBkZWJ1ZyhGMTAxLCJjbWtleSBFc2MgcG1zZyIsIiIsMCk7Ci0jaWZkZWYgQ09NTUVO VAotLyoKLSAgQ2hhaW5lZCBGREJzLi4uICBUaGUgaWRlYSBpcyB0aGF0IHRoaXMgZnVuY3Rpb24g bWlnaHQgbm90IGhhdmUgYSBkZWZhdWx0LAotICBidXQgdGhlIG5leHQgb25lIG1pZ2h0LiAgQnV0 IGlmIGl0IGRvZXNuJ3QsIHRoZXJlIGlzIG5vIHdheSB0byBjb21lIGJhY2sgdG8KLSAgdGhpcyBv bmUuICBUbyBiZSByZXZpc2l0ZWQgbGF0ZXIuLi4KLSovCi0JCSAgICBpZiAoeGNtZmRiKQkJLyog Q2hhaW5lZCBmZGIgLS0gdHJ5IG5leHQgb25lICovCi0JCSAgICAgIHJldHVybigtMyk7Ci0jZW5k aWYgLyogQ09NTUVOVCAqLwotCQkgICAgaWYgKHBtc2cgJiAoMXw0KSkgewkvKiBTbyBmb3Igbm93 IGp1c3QgYmVlcCAqLwotCQkJYmxlZXAoQlBfV0FSTik7Ci0JCSAgICB9Ci0JCSAgICBicmVhazsK LQkJfQotICAgICAgICAgICAgfQotCSAgICBpZiAoZikgewkJCS8qIElmIGEgY29udmVyc2lvbiBm dW5jdGlvbiBpcyBnaXZlbiAqLwotCQljaGFyICogcHA7Ci0JCXpxID0gYXR4YnVmOwkJLyogYXBw bHkgaXQgKi8KLQkJcHAgPSBhdHhidWY7Ci0JCWF0eG4gPSBDTURCTDsKLQkJaWYgKCgqZikoYXRt YnVmLCZ6cSwmYXR4bikgPCAwKQotCQkgIHJldHVybigtMik7Ci0JCWlmICghKnBwKQotCQkgIHBw ID0geGRlZjsKLQkJaWYgKHNldGF0bShwcCwwKSA8IDApIHsKLQkJICAgIHByaW50ZigiRXZhbHVh dGVkIGtleXdvcmQgdG9vIGxvbmdcbiIpOwotCQkgICAgcmV0dXJuKC05KTsKLQkJfQotCSAgICB9 Ci0JICAgIHkgPSBsb29rdXAodGFibGUsYXRtYnVmLG4sJnopOyAvKiBTb21ldGhpbmcgaW4gYXRt YnVmICovCi0JICAgIGRlYnVnKEYxMTEsImNta2V5IGxvb2t1cCB5IixhdG1idWYseSk7Ci0JICAg IGRlYnVnKEYxMTEsImNta2V5IGxvb2t1cCB6IixhdG1idWYseik7Ci0JICAgIGlmICh5ID09IC0y ICYmIHogPj0gMCAmJiB6IDwgbikgeyAvKiBBbWJpZ3VvdXMgKi8KLSNpZm5kZWYgTk9QQVJUSUFM Ci0JCWludCBqLCBrLCBsZW4gPSA5OTk5OwkvKiBEbyBwYXJ0aWFsIGNvbXBsZXRpb24gKi8KLQkJ LyogU2tpcCBwYXN0IGFueSBhYmJyZXZpYXRpb25zIGluIHRoZSB0YWJsZSAqLwotCQlmb3IgKCA7 IHogPCBuOyB6KyspIHsKLQkJICAgIGlmICgodGFibGVbel0uZmxncyAmIENNX0FCUikgPT0gMCkK LQkJICAgICAgYnJlYWs7Ci0JCSAgICBpZiAoISh0YWJsZVt6XS5mbGdzICYgQ01fSExQKSB8fCAo cG1zZyAmIDIpKQotCQkgICAgICBicmVhazsKLQkJfQotCQlkZWJ1ZyhGMTExLCJjbWtleSBwYXJ0 aWFsIHoiLGF0bWJ1Zix6KTsKLQkJZGVidWcoRjExMSwiY21rZXkgcGFydGlhbCBuIixhdG1idWYs bik7Ci0JCWZvciAoaiA9IHorMTsgaiA8IG47IGorKykgewotCQkgICAgZGVidWcoRjExMSwiY21r ZXkgcGFydGlhbCBqIix0YWJsZVtqXS5rd2Qsaik7Ci0JCSAgICBpZiAoY2tzdHJjbXAoYXRtYnVm LHRhYmxlW2pdLmt3ZCxjYywwKSkKLQkJICAgICAgYnJlYWs7Ci0JCSAgICBpZiAodGFibGVbal0u ZmxncyAmIENNX0FCUikKLQkJICAgICAgY29udGludWU7Ci0JCSAgICBpZiAoKHRhYmxlW2pdLmZs Z3MgJiBDTV9ITFApICYmICEocG1zZyAmIDIpKQotCQkgICAgICBjb250aW51ZTsKLQkJICAgIGsg PSBja3N0cnByZSh0YWJsZVt6XS5rd2QsdGFibGVbal0ua3dkKTsKLQkJICAgIGRlYnVnKEYxMTEs ImNta2V5IHBhcnRpYWwgayIsdGFibGVbel0ua3dkLGspOwotCQkgICAgaWYgKGsgPCBsZW4pCi0J CSAgICAgIGxlbiA9IGs7IC8qIExlbmd0aCBvZiBsb25nZXN0IGNvbW1vbiBwcmVmaXggKi8KLQkJ fQotCQlkZWJ1ZyhGMTExLCJjbWtleSBwYXJ0aWFsIGxlbiIsdGFibGVbel0ua3dkLGxlbik7Ci0J CWlmIChsZW4gIT0gOTk5OSAmJiBsZW4gPiBjYykgewotCQkgICAgY2tzdHJuY2F0KGF0bWJ1Zix0 YWJsZVt6XS5rd2QrY2MsQVRNQkwpOwotCQkgICAgYXRtYnVmW2xlbl0gPSBOVUw7Ci0JCSAgICBw cmludGYoIiVzIixhdG1idWYrY2MpOwotCQkgICAgY2tzdHJuY2F0KGNtZGJ1ZixhdG1idWYrY2Ms Q01EQkwpOwotCQkgICAgeGMgKz0gKGxlbiAtIGNjKTsKLQkJICAgIGNjID0gbGVuOwotCQl9Ci0j ZW5kaWYgLyogTk9QQVJUSUFMICovCi0JCWJsZWVwKEJQX1dBUk4pOwotCQlicmVhazsKLQkgICAg fSBlbHNlIGlmICh5ID09IC0zKSB7Ci0JCWJsZWVwKEJQX1dBUk4pOwotCQlicmVhazsKLQkgICAg fSBlbHNlIGlmICh5ID09IC0xKSB7CS8qIE5vdCBmb3VuZCAqLwotCQlpZiAoKHBtc2cgJiAxKSAm JiAhcXVpZXQpIHsKLQkJICAgIGJsZWVwKEJQX0ZBSUwpOwotCQkgICAgcHJpbnRmKCI/Tm8ga2V5 d29yZHMgbWF0Y2ggLSBcIiVzXCJcbiIsYXRtYnVmKTsKLQkJfQotCQljbWZsZ3MgPSAtMjsKLQkJ cmV0dXJuKC05KTsKLQkgICAgfQotLyoKLSAgSWYgd2UgZm91bmQgaXQsIGJ1dCBpdCdzIGEgaGVs cC1vbmx5IGtleXdvcmQgYW5kIHRoZSAiaGVscCIgYml0IGlzIG5vdAotICBzZXQgaW4gcG1zZywg dGhlbiBub3QgZm91bmQuCi0qLwotCSAgICBkZWJ1ZyhGMTAxLCJjbWtleSBmbGdzIiwiIix0YWJs ZVt6XS5mbGdzKTsKLQkgICAgaWYgKHRlc3QodGFibGVbel0uZmxncyxDTV9ITFApICYmICgocG1z ZyAmIDIpID09IDApKSB7Ci0JCWlmICgocG1zZyAmIDEpICYmICFxdWlldCkgewotCQkgICAgYmxl ZXAoQlBfRkFJTCk7Ci0JCSAgICBwcmludGYoIj9ObyBrZXl3b3JkcyBtYXRjaCAtICVzXG4iLGF0 bWJ1Zik7Ci0JCX0KLQkJY21mbGdzID0gLTI7Ci0JCXJldHVybigtOSk7Ci0JICAgIH0KLS8qCi0g IFNlZSBpZiB0aGUga2V5d29yZCBqdXN0IGZvdW5kIGhhcyB0aGUgQ01fQUJSIGJpdCBzZXQgaW4g aXRzIGZsZ3MgZmllbGQsIGFuZAotICBpZiBzbywgc2VhcmNoIGZvcndhcmRzIGluIHRoZSB0YWJs ZSBmb3IgYSBrZXl3b3JkIHRoYXQgaGFzIHRoZSBzYW1lIGt3dmFsCi0gIGJ1dCBkb2VzIG5vdCBo YXZlIENNX0FCUiAob3IgQ01fSU5WPykgc2V0LCBhbmQgdGhlbiBleHBhbmQgdXNpbmcgdGhlIGZ1 bGwKLSAga2V5d29yZC4gIFdBUk5JTkc6IFRoaXMgYXNzdW1lcyB0aGF0IChhKSBrZXl3b3JkcyBh cmUgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLAotICBhbmQgKGIpIHRoZSBDTV9BQlIgYml0IGlzIHNl dCBvbmx5IGlmIHRoZSB0aGUgYWJicmV2aWF0ZWQga2V5d29yZCBpcyBhIHRydWUKLSAgYWJicmV2 aWF0aW9uIChsZWZ0IHN1YnN0cmluZykgb2YgdGhlIGZ1bGwga2V5d29yZC4KLSovCi0JICAgIGlm ICh0ZXN0KHRhYmxlW3pdLmZsZ3MsQ01fQUJSKSkgewotCQlpbnQgeno7Ci0JCWZvciAoenogPSB6 KzE7IHp6IDwgbjsgenorKykKLQkJICBpZiAoKHRhYmxlW3p6XS5rd3ZhbCA9PSB0YWJsZVt6XS5r d3ZhbCkgJiYKLQkJICAgICAgKCF0ZXN0KHRhYmxlW3p6XS5mbGdzLENNX0FCUikpICYmCi0JCSAg ICAgICghdGVzdCh0YWJsZVt6el0uZmxncyxDTV9JTlYpKSkgewotCQkgICAgICB6ID0geno7Ci0J CSAgICAgIGJyZWFrOwotCQkgIH0KLQkgICAgfQotCSAgICB4cCA9IHRhYmxlW3pdLmt3ZCArIGNj OwotCSAgICBpZiAoY21zd2l0Y2ggJiYgdGVzdCh0YWJsZVt6XS5mbGdzLENNX0FSRykpIHsKLSNp ZmRlZiBWTVMKLQkJcHJpbnRmKCIlcz0iLHhwKTsKLQkJYnJrY2hhciA9ICc9JzsKLSNlbHNlCi0J CXByaW50ZigiJXM6Iix4cCk7Ci0JCWJya2NoYXIgPSAnOic7Ci0jZW5kaWYgLyogVk1TICovCi0J ICAgIH0gZWxzZSB7Ci0JCXByaW50ZigiJXMgIix4cCk7Ci0JCWJya2NoYXIgPSBTUDsKLQkgICAg fQotI2lmZGVmIENLX1JFQ0FMTAotCSAgICBpZiAodGVzdCh0YWJsZVt6XS5mbGdzLENNX05PUikp IG5vX3JlY2FsbCA9IDE7Ci0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0JICAgIGNta3dmbGdzID0g dGFibGVbel0uZmxnczsKLSNpZmRlZiBHRU1ET1MKLQkgICAgZmZsdXNoKHN0ZG91dCk7Ci0jZW5k aWYgLyogR0VNRE9TICovCi0JICAgIGFkZGJ1Zih4cCk7Ci0JICAgIGlmIChjbXN3aXRjaCAmJiB0 ZXN0KHRhYmxlW3pdLmZsZ3MsQ01fQVJHKSkgewotCQlicC0tOwkJCS8qIFJlcGxhY2UgdHJhaWxp bmcgc3BhY2Ugd2l0aCA6ICovCi0jaWZkZWYgVk1TCi0JCSpicCsrID0gJz0nOwotI2Vsc2UKLQkJ KmJwKysgPSAnOic7Ci0jZW5kaWYgLyogVk1TICovCi0JCSpicCA9IE5VTDsKLQkJbnAgPSBicDsK LQkJc3dhcmcgPSAxOwotCSAgICB9Ci0JICAgIGlud29yZCA9IDA7Ci0JICAgIGNtZmxncyA9IDA7 Ci0JICAgIGRlYnVnKEYxMTAsImNta2V5OiBhZGRidWYiLGNtZGJ1ZiwwKTsKLQkgICAgcmV0dXJu KHkpOwotCi0JICBjYXNlIDM6CQkJLyogVXNlciB0eXBlZCAiPyIgKi8KLQkgICAgaWYgKGYpIHsJ CQkvKiBJZiBhIGNvbnZlcnNpb24gZnVuY3Rpb24gaXMgZ2l2ZW4gKi8KLQkJY2hhciAqIHBwOwot CQl6cSA9IGF0eGJ1ZjsJCS8qIGRvIHRoZSBjb252ZXJzaW9uIG5vdy4gKi8KLQkJcHAgPSBhdHhi dWY7Ci0JCWF0eG4gPSBDTURCTDsKLQkJaWYgKCgqZikoYXRtYnVmLCZ6cSwmYXR4bikgPCAwKSBy ZXR1cm4oLTIpOwotCQlpZiAoc2V0YXRtKHBwLDApIDwgMCkgewotCQkgICAgcHJpbnRmKCI/RXZh bHVhdGVkIGtleXdvcmQgdG9vIGxvbmdcbiIpOwotCQkgICAgcmV0dXJuKC05KTsKLQkJfQotCSAg ICB9Ci0JICAgIHkgPSBsb29rdXAodGFibGUsYXRtYnVmLG4sJnopOyAvKiBMb29rIHVwIHdoYXQg d2UgaGF2ZSBzbyBmYXIuICovCi0JICAgIGlmICh5ID09IC0xKSB7Ci0JCS8qCi0JCSAgU3RyaWN0 bHkgc3BlYWtpbmcgaWYgdGhlIG1haW4ga2V5d29yZCB0YWJsZSBzZWFyY2ggZmFpbHMsCi0JCSAg dGhlbiB3ZSBzaG91bGQgbG9vayBpbiB0aGUgdG9rZW4gdGFibGUgaWYgb25lIGlzIGdpdmVuLgot CQkgIEJ1dCBpbiBwcmFjdGljZSwgdG9rZW5zIGFyZSBhbHNvIGluY2x1ZGVkIGluIHRoZSBtYWlu Ci0JCSAga2V5d29yZCB0YWJsZS4KLQkJKi8KLQkJY21mbGdzID0gLTI7Ci0JCWlmICgocG1zZyAm IDEpICYmICFxdWlldCkgewotCQkgICAgYmxlZXAoQlBfRkFJTCk7Ci0JCSAgICBwcmludGYoIiBO byBrZXl3b3JkcyBtYXRjaFxuIik7Ci0JCSAgICByZXR1cm4oLTkpOwotCQl9Ci0JCXJldHVybigt Mik7Ci0JICAgIH0KLSNpZm5kZWYgQ09NTUVOVAotCSAgICAvKiBUaGlzIGlzIHRvIGFsbG93ID8t aGVscCB0byB3b3JrIGltbWVkaWF0ZWx5IGFmdGVyIGEgdG9rZW4gKi8KLQkgICAgLyogd2l0aG91 dCBoYXZpbmcgdG8gdHlwZSBhbiBpbnRlcm1lZGlhdGUgc3BhY2UgKi8KLQkgICAgaWYgKHRsKSB7 Ci0JCWZvciAoaSA9IDA7IGkgPCB0bDsgaSsrKSAvKiBDaGVjayBmb3IgdG9rZW4gKi8KLQkJICBp ZiAodG9rW2ldID09ICphdG1idWYpIHsgLyogR290IG9uZSAqLwotCQkgICAgICBkZWJ1ZyhGMDAw LCJjbWtleSB0b2tlbjoiLGF0bWJ1ZiwqYXRtYnVmKTsKLQkJICAgICAgdW5nd29yZCgpOwkvKiBQ dXQgYmFjayB0aGUgZm9sbG93aW5nIHdvcmQgKi8KLQkJICAgICAgY21mbGdzID0gMzsJLyogRm9y Y2UgaGVscCBuZXh0IHRpbWUgYXJvdW5kICovCi0JCSAgICAgIHJldHVybigtNSk7CS8qIFNwZWNp YWwgcmV0dXJuIGNvZGUgZm9yIHRva2VuICovCi0JCSAgfQotCSAgICB9Ci0jZW5kaWYgLyogQ09N TUVOVCAqLwotCi0JICAgIGlmICgqeGhscCA9PSBOVUwpCi0JICAgICAgcHJpbnRmKCIgT25lIG9m IHRoZSBmb2xsb3dpbmc6XG4iKTsKLQkgICAgZWxzZQotCSAgICAgIHByaW50ZigiICVzLCBvbmUg b2YgdGhlIGZvbGxvd2luZzpcbiIseGhscCk7Ci0JICAgIHsKLQkJaW50IHg7Ci0JCXggPSBwbXNn ICYgKDJ8NCk7CS8qIFNlZSBrd2RoZWxwKCkgY29tbWVudHMgKi8KLQkJaWYgKGF0bWJ1ZlswXSkJ CS8qIElmIG5vdCBhdCBiZWdpbm5pbmcgb2YgZmllbGQgKi8KLQkJICB4IHw9IDE7CQkvKiBhbHNv IHNob3cgaW52aXNpYmxlcyAqLwotCQlrd2RoZWxwKHRhYmxlLG4sYXRtYnVmLCIiLCIiLDEseCk7 Ci0JICAgIH0KLSNpZm5kZWYgTk9TUEwKLQkgICAgaWYgKCFoYXZldG9rZW4pIHsKLQkJZXh0ZXJu IGludCB0b3BjbWQ7Ci0JCWlmICh0bCA+IDAgJiYgdG9wY21kICE9IFhYSExQKSAvKiBUaGlzIGlz IGJhZC4uLiAqLwotCQkgIHByaW50Zigib3IgYSBtYWNybyBuYW1lIChcImRvID9cIiBmb3IgYSBs aXN0KSAiKTsKLQkgICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0JICAgIGlmICgqYXRtYnVmID09 IE5VTCAmJiAhaGF2ZXRva2VuKSB7Ci0JCWlmICh0bCA9PSAxKQotCQkgIHByaW50Zigib3IgdGhl IHRva2VuICVjXG4iLCp0b2spOwotCQllbHNlIGlmICh0bCA+IDEpCi0JCSAgcHJpbnRmKCJvciBv bmUgb2YgdGhlIHRva2VuczogJXNcbiIsY2tzcHJlYWQodG9rKSk7Ci0JICAgIH0KLQkgICAgcHJp bnRmKCIlcyVzIiwgY21wcm9tLCBjbWRidWYpOwotCSAgICBmZmx1c2goc3Rkb3V0KTsKLQkgICAg YnJlYWs7Ci0KLQkgIGRlZmF1bHQ6Ci0JICAgIHByaW50ZigiXG4lZCAtIFVuZXhwZWN0ZWQgcmV0 dXJuIGNvZGUgZnJvbSBndHdvcmRcbiIsenopOwotCSAgICByZXR1cm4oY21mbGdzID0gLTIpOwot CX0KLQl6eiA9IChwbXNnICYgOCkgPyBndHdvcmQoNCkgOiBndHdvcmQoKHBtc2cgPT0gNCkgPyAx IDogMCk7Ci0JZGVidWcoRjExMSwiY21rZXkgZ3R3b3JkIHp6IixhdG1idWYsenopOwotICAgIH0K LX0KLQotaW50Ci1jaGt0b2sodGxpc3QpIGNoYXIgKnRsaXN0OyB7Ci0gICAgY2hhciAqcDsKLSAg ICBwID0gdGxpc3Q7Ci0gICAgd2hpbGUgKCpwICE9IE5VTCAmJiAqcCAhPSAqYXRtYnVmKSBwKys7 Ci0gICAgcmV0dXJuKCgqcCkgPyAoaW50KSAqcCA6IDApOwotfQotCi0vKiBSb3V0aW5lcyBmb3Ig cGFyc2luZyBhbmQgY29udmVydGluZyBkYXRlcyBhbmQgdGltZXMgKi8KLQotI2RlZmluZSBpc2Rh dGVzZXAoYykgKGNrc3RyY2hyKCIgLS8uXyIsYykpCi0KLSNkZWZpbmUgQ01EQVRFQlVGIDEwMjQK LWNoYXIgY21kYXRlYnVmW0NNREFURUJVRis0XSA9IHsgTlVMLCBOVUwgfTsKLXN0YXRpYyBjaGFy ICogY21kYXRlYnAgPSBjbWRhdGVidWY7Ci1jaGFyICogY21kYXRlbXNnID0gTlVMTDsKLQotc3Rh dGljIHN0cnVjdCBrZXl0YWIgdGltZXVuaXRzW10gPSB7Ci0gICAgeyAiZGF5cyIsICAgVFVfREFZ UywgICAwIH0sCi0gICAgeyAibW9udGhzIiwgVFVfTU9OVEhTLCAwIH0sCi0gICAgeyAid2Vla3Mi LCAgVFVfV0VFS1MsICAwIH0sCi0gICAgeyAid2tzIiwgICAgVFVfV0VFS1MsICAwIH0sCi0gICAg eyAieWVhcnMiLCAgVFVfWUVBUlMsICAwIH0sCi0gICAgeyAieXJzIiwgICAgVFVfWUVBUlMsICAw IH0KLX07Ci1zdGF0aWMgaW50IG51bml0cyA9IChzaXplb2YodGltZXVuaXRzKSAvIHNpemVvZihz dHJ1Y3Qga2V5dGFiKSk7Ci0KLSNkZWZpbmUgU1lNX05PVyAgMAotI2RlZmluZSBTWU1fVE9EQSAx Ci0jZGVmaW5lIFNZTV9UT01PIDIKLSNkZWZpbmUgU1lNX1lFU1QgMwotCi1zdGF0aWMgc3RydWN0 IGtleXRhYiBzeW1kYXl0YWJbXSA9IHsKLSAgICB7ICJub3ciLCAgICAgICBTWU1fTk9XLCAgMCB9 LAotICAgIHsgInRvZGF5IiwgICAgIFNZTV9UT0RBLCAwIH0sCi0gICAgeyAidG9tb3Jyb3ciLCAg U1lNX1RPTU8sIDAgfSwKLSAgICB7ICJ5ZXN0ZXJkYXkiLCBTWU1fWUVTVCwgMCB9Ci19Owotc3Rh dGljIGludCBuc3ltZGF5cyA9IChzaXplb2Yoc3ltZGF5dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5 dGFiKSk7Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGRheXNvZndlZWtbXSA9IHsKLSAgICB7ICJG cmlkYXkiLCAgICA1LCAwIH0sCi0gICAgeyAiTW9uZGF5IiwgICAgMSwgMCB9LAotICAgIHsgIlNh dHVyZGF5IiwgIDYsIDAgfSwKLSAgICB7ICJTdW5kYXkiLCAgICAwLCAwIH0sCi0gICAgeyAiVGh1 cnNkYXkiLCAgNCwgMCB9LAotICAgIHsgIlR1ZXNkYXkiLCAgIDIsIDAgfSwKLSAgICB7ICJXZWRu ZXNkYXkiLCAzLCAwIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHVzYXR6W10gPSB7CS8q IFJGQyA4MjIgdGltZXpvbmVzICAqLwotICAgIHsgImNkdCIsICA1LCAwIH0sCQkJLyogVmFsdWVz IGFyZSBHTVQgb2Zmc2V0cyAqLwotICAgIHsgImNzdCIsICA2LCAwIH0sCi0gICAgeyAiZWR0Iiwg IDQsIDAgfSwKLSAgICB7ICJlc3QiLCAgNSwgMCB9LAotICAgIHsgImdtdCIsICAwLCAwIH0sCi0g ICAgeyAibWR0IiwgIDYsIDAgfSwKLSAgICB7ICJtc3QiLCAgNywgMCB9LAotICAgIHsgInBkdCIs ICA3LCAwIH0sCi0gICAgeyAicHN0IiwgIDgsIDAgfSwKLSAgICB7ICJ1dGMiLCAgMCwgMCB9LAot ICAgIHsgInp1bHUiLCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IG51c2F0eiA9IChzaXplb2YodXNh dHopIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotCi0vKiAgQyBNIEMgViBUIEQgQSBUIEUg IC0tICBDb252ZXJ0cyBmcmVlLWZvcm0gZGF0ZSB0byBzdGFuZGFyZCBmb3JtLiAgKi8KLQotLyoK LSAgIENhbGwgd2l0aAotICAgICBzID0gcG9pbnRlciB0byBmcmVlLWZvcm1hdCBkYXRlLCB0aW1l LCBvciBkYXRlIGFuZCB0aW1lLgotICAgICB0ID0gMDogcmV0dXJuIHRpbWUgb25seSBpZiB0aW1l IHdhcyBnaXZlbiBpbiBzLgotICAgICB0ID0gMTogYWx3YXlzIHJldHVybiB0aW1lICgwMDowMDow MCBpZiBubyB0aW1lIGdpdmVuIGluIHMpLgotICAgICB0ID0gMjogYWxsb3cgdGltZSB0byBiZSA+ IDI0OjAwOjAwLgotICAgUmV0dXJuczoKLSAgICAgTlVMTCBvbiBmYWlsdXJlOwotICAgICBQb2lu dGVyIHRvICJ5eXl5bW1kZCBoaDptbTpzcyIgKGxvY2FsIGRhdGUtdGltZSkgb24gc3VjY2Vzcy4K LSovCi0KLS8qCi0gIEJlZm9yZSBmaW5hbCByZWxlYXNlIHRoZSBmb2xsb3dpbmcgbG9uZyBsaW5l cyBzaG91bGQgYmUgd3JhcHBlZC4KLSAgVW50aWwgdGhlbiB3ZSBsZWF2ZSB0aGVtIGxvbmcgc2lu Y2Ugd3JhcHBpbmcgdGhlbSB3cmVja3MgRU1BQ1MncwotICBDIGluZGVudGF0aW9uLgotKi8KLQot LyogYXNjdGltZSBwYXR0ZXJuICovCi1zdGF0aWMgY2hhciAqIGF0cDEgPSAiW0EtWl1bYS16XVth LXpdIFtBLVpdW2Etel1bYS16XSBbIDAtOV1bMC05XSBbMC05XVswLTldOlswLTldWzAtOV06WzAt OV1bMC05XSBbMC05XVswLTldWzAtOV1bMC05XSI7Ci0KLS8qIGFzY3RpbWUgcGF0dGVybiB3aXRo IHRpbWV6b25lICovCi1zdGF0aWMgY2hhciAqIGF0cDIgPSAiW0EtWl1bYS16XVthLXpdIFtBLVpd W2Etel1bYS16XSBbIDAtOV1bMC05XSBbMC05XVswLTldOlswLTldWzAtOV06WzAtOV1bMC05XSBb QS1aXVtBLVpdW0EtWl0gWzAtOV1bMC05XVswLTldWzAtOV0iOwotCi0jZGVmaW5lIERBVEVCVUZM RU4gMTI3Ci0jZGVmaW5lIFlZWVlNTUREIDEyCi0KLSNkZWZpbmUgaXNsZWFwKHkpICgoKHkpICUg NCA9PSAwICYmICh5KSAlIDEwMCAhPSAwKSB8fCAoeSkgJSA0MDAgPT0gMCkKLXN0YXRpYyBpbnQg bWRheXNbMTNdID0geyAwLCAzMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwg MzAsIDMxIH07Ci0KLSNkZWZpbmUgTkVFRF9EQVlTIDEKLSNkZWZpbmUgTkVFRF9IUlMgIDIKLSNk ZWZpbmUgTkVFRF9NSU5TIDMKLSNkZWZpbmUgTkVFRF9TRUNTIDQKLSNkZWZpbmUgTkVFRF9GUkFD IDUKLQotI2RlZmluZSBERUxUQUJVRiAyNTYKLXN0YXRpYyBjaGFyIGRlbHRhYnVmW0RFTFRBQlVG XTsKLXN0YXRpYyBjaGFyICogZGVsdGFicCA9IGRlbHRhYnVmOwotCi1jaGFyICoKLWNtZGVsdGEo eXksIG1vLCBkZCwgaGgsIG1tLCBzcywgc2lnbiwgZHl5LCBkbW8sIGRkZCwgZGhoLCBkbW0sIGRz cykKLSAgICBpbnQgeXksIG1vLCBkZCwgaGgsIG1tLCBzcywgc2lnbiwgZHl5LCBkbW8sIGRkZCwg ZGhoLCBkbW0sIGRzczsKLS8qIGNtZGVsdGEgKi8gewotICAgIGludCB6eXksIHptbywgemRkLCB6 aGgsIHptbSwgenNzOwotICAgIGxvbmcgdDEsIHQyLCB0MywgdDQ7Ci0gICAgbG9uZyBkMSA9IDAs IGQyLCBkMzsKLSAgICBjaGFyIGRhdGVidWZbREFURUJVRkxFTisxXTsKLQotI2lmZGVmIERFQlVH Ci0gICAgaWYgKGRlYmxvZykgewotCWRlYnVnKEYxMDEsImNtZGVsdGEgeXkiLCIiLHl5KTsKLQlk ZWJ1ZyhGMTAxLCJjbWRlbHRhIG1vIiwiIixtbyk7Ci0JZGVidWcoRjEwMSwiY21kZWx0YSBkZCIs IiIsZGQpOwotCWRlYnVnKEYxMDEsImNtZGVsdGEgaGgiLCIiLGhoKTsKLQlkZWJ1ZyhGMTAxLCJj bWRlbHRhIG1tIiwiIixtbSk7Ci0JZGVidWcoRjEwMSwiY21kZWx0YSBzcyIsIiIsc3MpOwotCWRl YnVnKEYxMDEsImNtZGVsdGEgc2lnbiIsIiIsc2lnbik7Ci0JZGVidWcoRjEwMSwiY21kZWx0YSBk eXkiLCIiLGR5eSk7Ci0JZGVidWcoRjEwMSwiY21kZWx0YSBkbW8iLCIiLGRtbyk7Ci0JZGVidWco RjEwMSwiY21kZWx0YSBkZGQiLCIiLGRkZCk7Ci0JZGVidWcoRjEwMSwiY21kZWx0YSBkaGgiLCIi LGRoaCk7Ci0JZGVidWcoRjEwMSwiY21kZWx0YSBkbW0iLCIiLGRtbSk7Ci0JZGVidWcoRjEwMSwi Y21kZWx0YSBkc3MiLCIiLGRzcyk7Ci0gICAgfQotI2VuZGlmIC8qIERFQkxPRyAqLwotCi0gICAg aWYgKHl5IDwgMCB8fCB5eSA+IDk5OTkpIHsKLQltYWtlc3RyKCZjbWRhdGVtc2csIkJhc2UgeWVh ciBvdXQgb2YgcmFuZ2UiKTsKLQlkZWJ1ZyhGMTExLCJjbWRlbHRhIixjbWRhdGVtc2csLTEpOwot CXJldHVybihOVUxMKTsKLSAgICB9Ci0gICAgaWYgKG1vIDwgMSB8fCBtbyA+IDEyKSB7Ci0JbWFr ZXN0cigmY21kYXRlbXNnLCJCYXNlIG1vbnRoIG91dCBvZiByYW5nZSIpOwotCWRlYnVnKEYxMTEs ImNtZGVsdGEiLGNtZGF0ZW1zZywtMSk7Ci0JcmV0dXJuKE5VTEwpOwotICAgIH0KLSAgICBpZiAo ZGQgPCAxIHx8IGRkID4gbWRheXNbbW9dKSB7Ci0JbWFrZXN0cigmY21kYXRlbXNnLCJCYXNlIGRh eSBvdXQgb2YgcmFuZ2UiKTsKLQlkZWJ1ZyhGMTExLCJjbWRlbHRhIixjbWRhdGVtc2csLTEpOwot CXJldHVybihOVUxMKTsKLSAgICB9Ci0gICAgaWYgKGhoIDwgMCB8fCBoaCA+IDIzKSB7Ci0JbWFr ZXN0cigmY21kYXRlbXNnLCJCYXNlIGhvdXIgb3V0IG9mIHJhbmdlIik7Ci0JZGVidWcoRjExMSwi Y21kZWx0YSIsY21kYXRlbXNnLC0xKTsKLQlyZXR1cm4oTlVMTCk7Ci0gICAgfQotICAgIGlmICht bSA8IDAgfHwgbW0gPiA1OSkgewotCW1ha2VzdHIoJmNtZGF0ZW1zZywiQmFzZSBtaW51dGUgb3V0 IG9mIHJhbmdlIik7Ci0JZGVidWcoRjExMSwiY21kZWx0YSIsY21kYXRlbXNnLC0xKTsKLQlyZXR1 cm4oTlVMTCk7Ci0gICAgfQotICAgIGlmIChzcyA8IDAgfHwgc3MgPiA2MCkgewotCW1ha2VzdHIo JmNtZGF0ZW1zZywiQmFzZSBzZWNvbmQgb3V0IG9mIHJhbmdlIik7Ci0JZGVidWcoRjExMSwiY21k ZWx0YSIsY21kYXRlbXNnLC0xKTsKLQlyZXR1cm4oTlVMTCk7Ci0gICAgfQotICAgIHNpZ24gPSAo c2lnbiA8IDApID8gLTEgOiAxOwotICAgIGlmIChkbW8gIT0gMCkgewotICAgICAgICBpZiAoc2ln biA+IDApIHsKLSAgICAgICAgICAgIG1vICs9IChzaWduICogZG1vKTsKLSAgICAgICAgICAgIGlm IChtbyA+IDEyKSB7Ci0gICAgICAgICAgICAgICAgeXkgKz0gbW8gLyAxMjsKLSAgICAgICAgICAg ICAgICBtbyA9IG1vICUgMTI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoc2ln biA8IDApIHsKLSAgICAgICAgICAgIHdoaWxlIChkbW8gPiAxMikgewotICAgICAgICAgICAgICAg IHl5LS07Ci0gICAgICAgICAgICAgICAgZG1vIC09IDEyOwotICAgICAgICAgICAgfQotICAgICAg ICAgICAgaWYgKGRtbyA8IG1vKSB7Ci0gICAgICAgICAgICAgICAgbW8gLT0gZG1vOwotICAgICAg ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB5eS0tOwotICAgICAgICAgICAgICAgIG1v ID0gMTIgLSAoZG1vIC0gbW8pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAg IGlmIChkeXkgIT0gMCkgewotCXl5ICs9IChzaWduICogZHl5KTsKLQlpZiAoeXkgPiA5OTk5IHx8 IHl5IDwgMCkgewotCSAgICBtYWtlc3RyKCZjbWRhdGVtc2csIlJlc3VsdCB5ZWFyIG91dCBvZiBy YW5nZSIpOwotCSAgICBkZWJ1ZyhGMTExLCJjbWRlbHRhIixjbWRhdGVtc2csLTEpOwotCSAgICBy ZXR1cm4oTlVMTCk7Ci0JfQotICAgIH0KLSAgICBzcHJpbnRmKGRhdGVidWYsIiUwNGQlMDJkJTAy ZCAlMDJkOiUwMmQ6JTAyZCIseXksbW8sZGQsaGgsbW0sc3MpOwotICAgIGQxID0gbWpkKGRhdGVi dWYpOwotICAgIGRlYnVnKEYxMTEsImNtZGVsdGEgbWpkIixkYXRlYnVmLGQxKTsgICAgCi0KLSAg ICB0MSA9IGhoICogMzYwMCArIG1tICogNjAgKyBzczsJLyogQmFzZSB0aW1lIHRvIHNlY3Mgc2lu Y2UgbWlkbmlnaHQgKi8KLSAgICB0MiA9IGRoaCAqIDM2MDAgKyBkbW0gKiA2MCArIGRzczsJLyog RGVsdGEgdGltZSwgZGl0dG8gKi8KLSAgICB0MyA9IHQxICsgKHNpZ24gKiB0Mik7CQkvKiBHZXQg c3VtIChvciBkaWZmZXJlbmNlKSAqLwotICAgIAotICAgIGQyID0gKHNpZ24gKiBkZGQpOwkJCS8q IERlbHRhIGRheXMgKi8KLSAgICBkMiArPSB0MyAvIDg2NDAwTDsKLQotICAgIHQ0ID0gdDMgJSA4 NjQwMEw7CQkJLyogRnJhY3Rpb25hbCBwYXJ0IG9mIGRheSAqLwotICAgIGlmICh0NCA8IDApIHsJ CQkvKiBJZiBuZWdhdGl2ZSAqLwotCWQyLS07CQkJCS8qIG9uZSBsZXNzIGRlbHRhIGRheSAqLwot CXQ0ICs9IDg2NDAwTDsJCQkvKiBnZXQgcG9zaXRpdmUgc2Vjb25kcyAqLwotICAgIH0KLSAgICBo aCA9IChpbnQpICh0NCAvIDM2MDBMKTsKLSAgICBtbSA9IChpbnQpICh0NCAlIDM2MDBMKSAvIDYw OwotICAgIHNzID0gKGludCkgKHQ0ICUgMzYwMEwpICUgNjA7Ci0KLSAgICBzcHJpbnRmKGRhdGVi dWYsIiVzICUwMmQ6JTAyZDolMDJkIiwgbWpkMmRhdGUoZDErZDIpLGhoLG1tLHNzKTsKLSAgICB7 Ci0JaW50IGxlbiwgaywgbjsKLQljaGFyICogcDsKLQlsZW4gPSBzdHJsZW4oZGF0ZWJ1Zik7Ci0J ayA9IGRlbHRhYnAgLSAoY2hhciAqKWRlbHRhYnVmOwkvKiBTcGFjZSB1c2VkICovCi0JbiA9IERF TFRBQlVGIC0gayAtIDE7CQkvKiBTcGFjZSBsZWZ0ICovCi0JaWYgKG4gPCBsZW4pIHsJCQkvKiBO b3QgZW5vdWdoPyAqLwotCSAgICBkZWx0YWJwID0gZGVsdGFidWY7CQkvKiBXcmFwIGFyb3VuZCAq LwotCSAgICBuID0gREVMVEFCVUY7Ci0JfQotCWNrc3RybmNweShkZWx0YWJwLGRhdGVidWYsbik7 Ci0JcCA9IGRlbHRhYnA7Ci0JZGVsdGFicCArPSBsZW4gKyAxOwotCXJldHVybihwKTsKLSAgICB9 Ci19Ci0KLQotLyogQ29udmVydCBEZWx0YSBUaW1lIHRvIFNlY29uZHMgKi8KLQotaW50Ci1kZWx0 YTJzZWMocyxyZXN1bHQpIGNoYXIgKiBzOyBsb25nICogcmVzdWx0OyB7Ci0gICAgbG9uZyBkZGF5 cyA9IDBMLCB6ejsKLSAgICBpbnQgZHNpZ24gPSAxLCBkaG91cnMgPSAwLCBkbWlucyA9IDAsIGRz ZWNzID0gMCwgdW5pdHM7Ci0gICAgaW50IHN0YXRlID0gTkVFRF9EQVlTOwotICAgIGNoYXIgKnAs ICpwMiwgKnAzLCBjID0gMDsKLSAgICBjaGFyIGJ1Zls2NF07Ci0KLSAgICBpZiAoIXMpIHMgPSAi IjsKLSAgICBpZiAoISpzKQotICAgICAgcmV0dXJuKC0xKTsKLSAgICBpZiAoKGludClzdHJsZW4o cykgPiA2MykKLSAgICAgIHJldHVybigtMSk7Ci0gICAgY2tzdHJuY3B5KGJ1ZixzLDY0KTsKLSAg ICBwID0gYnVmOwotCi0gICAgaWYgKCpwICE9ICcrJyAmJiAqcCAhPSAnLScpCi0gICAgICByZXR1 cm4oLTEpOwotCi0gICAgaWYgKCpwKysgPT0gJy0nKQotICAgICAgZHNpZ24gPSAtMTsKLSAgICB3 aGlsZSAoKnAgPT0gU1ApCQkJLyogU2tpcCBpbnRlcnZlbmluZyBzcGFjZXMgKi8KLSAgICAgIHAr KzsKLQotICAgIHdoaWxlIChzdGF0ZSkgewkJCS8qIEZTQSB0byBwYXJzZSBkZWx0YSB0aW1lICov Ci0JaWYgKHN0YXRlIDwgMCB8fCAhaXNkaWdpdCgqcCkpCi0JICByZXR1cm4oLTEpOwotCXAyID0g cDsJCQkJLyogR2V0IG5leHQgbnVtZXJpYyBmaWVsZCAqLwotCXdoaWxlIChpc2RpZ2l0KCpwMikp Ci0JICBwMisrOwotCWMgPSAqcDI7CQkJLyogQW5kIGJyZWFrIGNoYXJhY3RlciAqLwotCSpwMiA9 IE5VTDsJCQkvKiBUZXJtaW5hdGUgdGhlIG51bWJlciAqLwotCXN3aXRjaCAoc3RhdGUpIHsJCS8q IEludGVycHJldCBhY2NvcmRpbmcgdG8gc3RhdGUgKi8KLQkgIGNhc2UgTkVFRF9EQVlTOgkJLyog SW5pdGlhbCAqLwotCSAgICBpZiAoKGMgPT0gJy0nKSB8fAkJLyogVk1TIGZvcm1hdCAqLwotCQko KGMgPT0gJ2QnIHx8IGMgPT0gJ0QnKQotCQkgJiYgIWlzYWxwaGEoKihwMisxKSkpKSB7IC8qIERh eXMgKi8KLQkJZGRheXMgPSBhdG9sKHApOwotCQlpZiAoISoocDIrMSkpCQkJCi0JCSAgc3RhdGUg PSAwOwotCQllbHNlCQkJLyogaWYgYW55dGhpbmcgaXMgbGVmdCAqLwotCQkgIHN0YXRlID0gTkVF RF9IUlM7CS8qIG5vdyB3ZSB3YW50IGhvdXJzLiAqLwotCSAgICB9IGVsc2UgaWYgKGMgPT0gJzon KSB7CS8qIGRlbGltaXRlciBpcyBjb2xvbiAqLwotCQlkaG91cnMgPSBhdG9pKHApOwkvKiBzbyBp dCdzIGhvdXJzICovCi0JCXN0YXRlID0gTkVFRF9NSU5TOwkvKiBub3cgd2Ugd2FudCBtaW51dGVz ICovCi0JICAgIH0gZWxzZSBpZiAoIWMpIHsJCS8qIGVuZCBvZiBzdHJpbmcgKi8KLQkJZGhvdXJz ID0gYXRvaShwKTsJLyogaXQncyBzdGlsbCBob3VycyAqLwotCQlzdGF0ZSA9IDA7CQkvKiBhbmQg d2UncmUgZG9uZSAqLwotCSAgICB9IGVsc2UgaWYgKGlzYWxwaGEoYykgfHwgYyA9PSBTUCkgewot CQlpZiAoYyA9PSBTUCkgewkJLyogSXQncyBhIGtleXdvcmQ/ICovCi0JCSAgICBwMisrOwkJLyog U2tpcCBzcGFjZXMgKi8KLQkJICAgIHdoaWxlICgqcDIgPT0gU1ApCi0JCSAgICAgIHAyKys7Ci0J CX0gZWxzZSB7CQkvKiBvciByZXBsYWNlIGZpcnN0IGxldHRlciAqLwotCQkgICAgKnAyID0gYzsK LQkJfQotCQlwMyA9IHAyOwkJLyogcDIgcG9pbnRzIHRvIGJlZ2lubmluZyBvZiBrZXl3b3JkICov Ci0JCXdoaWxlIChpc2FscGhhKCpwMykpCS8qIEZpbmQgZW5kIG9mIGtleXdvcmQgKi8KLQkJICBw MysrOwotCQljID0gKnAzOwkJLyogTlVMIGl0IG91dCBzbyB3ZSBjYW4gbG9vayBpdCB1cCAqLwot CQlpZiAoKnAzKQkJLyogcDMgcG9pbnRzIHRvIGtleXdvcmQgdGVybWluYXRvciAqLwotCQkgICpw MyA9IE5VTDsKLQkJaWYgKCh1bml0cyA9IGxvb2t1cCh0aW1ldW5pdHMscDIsbnVuaXRzLE5VTEwp KSA8IDApCi0JCSAgcmV0dXJuKC0xKTsKLQkJKnAyID0gTlVMOwkJLyogUmUtdGVybWluYXRlIHRo ZSBudW1iZXIgKi8KLQkJKnAzID0gYzsKLQkJd2hpbGUgKCpwMyA9PSBTUCkJLyogUG9pbnQgYXQg ZmllbGQgYWZ0ZXIgdW5pdHMgKi8KLQkJICBwMysrOwotCQlwMiA9IHAzOwotCQlzd2l0Y2ggKHVu aXRzKSB7Ci0JCSAgY2FzZSBUVV9EQVlTOgotCQkgICAgZGRheXMgPSBhdG9sKHApOwotCQkgICAg YnJlYWs7Ci0JCSAgZGVmYXVsdDoKLQkJICAgIHJldHVybigtMSk7Ci0JCX0KLQkJaWYgKCpwMikg ewotCQkgICAgc3RhdGUgPSBORUVEX0hSUzsKLQkJICAgIHAyLS07Ci0JCX0gZWxzZQotCQkgIHN0 YXRlID0gMDsKLQkgICAgfSBlbHNlIHsJCQkvKiBBbnl0aGluZyBlbHNlICovCi0JCXN0YXRlID0g LTE7CQkvKiBpcyBhbiBlcnJvciAqLwotCSAgICB9Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBORUVE X0hSUzoJCS8qIExvb2tpbmcgZm9yIGhvdXJzICovCi0JICAgIGlmIChjID09ICc6JykgewotCQlk aG91cnMgPSBhdG9pKHApOwotCQlzdGF0ZSA9IE5FRURfTUlOUzsKLQkgICAgfSBlbHNlIGlmICgh YykgewotCQlkaG91cnMgPSBhdG9pKHApOwotCQlzdGF0ZSA9IDA7Ci0JICAgIH0gZWxzZSB7Ci0J CXN0YXRlID0gLTE7Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0JICBjYXNlIE5FRURfTUlOUzoJCS8q IExvb2tpbmcgZm9yIG1pbnV0ZXMgKi8KLQkgICAgaWYgKGMgPT0gJzonKSB7Ci0JCWRtaW5zID0g YXRvaShwKTsKLQkJc3RhdGUgPSBORUVEX1NFQ1M7Ci0JICAgIH0gZWxzZSBpZiAoIWMpIHsKLQkJ ZG1pbnMgPSBhdG9pKHApOwotCQlzdGF0ZSA9IDA7Ci0JICAgIH0gZWxzZSB7Ci0JCXN0YXRlID0g LTE7Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0JICBjYXNlIE5FRURfU0VDUzoJCS8qIExvb2tpbmcg Zm9yIHNlY29uZHMgKi8KLQkgICAgaWYgKGMgPT0gJy4nKSB7Ci0JCWRzZWNzID0gYXRvaShwKTsK LQkJc3RhdGUgPSBORUVEX0ZSQUM7Ci0JICAgIH0gZWxzZSBpZiAoIWMpIHsKLQkJZHNlY3MgPSBh dG9pKHApOwotCQlzdGF0ZSA9IDA7Ci0JICAgIH0gZWxzZSB7Ci0JCXN0YXRlID0gLTE7Ci0JICAg IH0KLQkgICAgYnJlYWs7Ci0JICBjYXNlIE5FRURfRlJBQzoJCS8qIEZyYWN0aW9uIG9mIHNlY29u ZCAqLwotCSAgICBpZiAoIWMgJiYgcmRpZ2l0cyhwKSkgewotCQlpZiAoKnAgPiAnNCcpCi0JCSAg ZHNlY3MrKzsKLQkJc3RhdGUgPSAwOwotCSAgICB9IGVsc2UgewotCQlzdGF0ZSA9IC0xOwotCSAg ICB9Ci0JICAgIGJyZWFrOwotCX0KLQlpZiAoYykJCQkJLyogbmV4dCBmaWVsZCBpZiBhbnkgKi8K LQkgIHAgPSBwMiArIDE7Ci0gICAgfQotICAgIGlmIChzdGF0ZSA8IDApCi0gICAgICByZXR1cm4o LTEpOwotCi0gICAgLyogaWYgZGF5cyA+IDI0ODU0IGFuZCBzaXplb2YobG9uZykgPT0gMzIgd2Ug b3ZlcmZsb3cgKi8KLQotICAgIHp6ID0gZGRheXMgKiA4NjQwMEw7Ci0gICAgaWYgKHp6IDwgMEwp CQkJLyogVGhpcyBjYXRjaGVzIGl0ICovCi0gICAgICByZXR1cm4oLTIpOwotICAgIHp6ICs9IGRo b3VycyAqIDM2MDBMICsgZG1pbnMgKiA2MEwgKyBkc2VjczsKLSAgICB6eiAqPSBkc2lnbjsKLSAg ICAqcmVzdWx0ID0geno7Ci0gICAgcmV0dXJuKDApOwotfQotCi0KLWNoYXIgKgotY21jdnRkYXRl KHMsdCkgY2hhciAqIHM7IGludCB0OyB7Ci0gICAgaW50IHgsIGksIGosIGssIGhoLCBtbSwgc3Ms IGZmLCBwbWZsYWcgPSAwLCBub2RhdGUgPSAwLCBsZW4sIGRvdzsKLSAgICBpbnQgdW5pdHMsIGlz Z210ID0gMCwgZ210c2lnbiA9IDAsIGQgPSAwLCBzdGF0ZSA9IDAsIG5kYXk7Ci0gICAgaW50IGtu ID0gMCwgZnRbOF0sIGlzbGV0dGVyID0gMCwgZjJsZW4gPSAwOwotCi0gICAgaW50IHpoaCA9IDA7 CQkJLyogVGltZXpvbmUgYWRqdXN0bWVudHMgKi8KLSAgICBpbnQgem1tID0gMDsKLSAgICBpbnQg emRkID0gMDsKLQotICAgIGludCBkc2lnbiA9IDE7CQkJLyogRGVsdGEtdGltZSBhZGp1c3RtZW50 cyAqLwotICAgIGludCBkZGF5cyA9IDA7Ci0gICAgaW50IGRtb250aHMgPSAwOwotICAgIGludCBk eWVhcnMgPSAwOwotICAgIGludCBkaG91cnMgPSAwOwotICAgIGludCBkbWlucyA9IDA7Ci0gICAg aW50IGRzZWNzID0gMDsKLSAgICBpbnQgaGF2ZWRlbHRhID0gMDsKLQotICAgIGNoYXIgKiBmbGRb OF0sICogcCA9ICIiLCAqIHAyLCAqIHAzOyAvKiBBc3NvcnRlZCBidWZmZXJzIGFuZCBwb2ludGVy cyAgKi8KLSAgICBjaGFyICogczIsICogczM7Ci0gICAgY2hhciAqIHllYXIgPSBOVUxMLCAqIG1v bnRoID0gTlVMTCwgKiBkYXkgPSBOVUxMOwotICAgIGNoYXIgKiBob3VyID0gIjAwIiwgKiBtaW4g PSAiMDAiLCAqIHNlYyA9ICIwMCI7Ci0gICAgY2hhciBkYXRlc2VwID0gMDsKLSAgICBjaGFyIHRt cGJ1Zls4XTsKLSAgICBjaGFyIHhidWZbREFURUJVRkxFTisxXTsKLSAgICBjaGFyIHlidWZbREFU RUJVRkxFTisxXTsKLSAgICBjaGFyIHpidWZbREFURUJVRkxFTisxXTsKLSAgICBjaGFyIHl5eXlt bWRkW1lZWVlNTUREXTsKLSAgICBjaGFyIGRidWZbMjZdOwotICAgIGNoYXIgZGF5YnVmWzNdOwot ICAgIGNoYXIgbW9uYnVmWzNdOwotICAgIGNoYXIgeWVhcmJ1Zls1XTsKLSAgICBjaGFyIHRpbWJ1 ZlsxNl0sICp0YiwgY2M7Ci0gICAgY2hhciAqIGRwID0gTlVMTDsJCQkvKiBSZXN1bHQgcG9pbnRl ciAqLwotCi0gICAgaWYgKCFzKSBzID0gIiI7Ci0gICAgdG1wYnVmWzBdID0gTlVMOwotCi0gICAg d2hpbGUgKCpzID09IFNQKSBzKys7CQkvKiBHb2JibGUgYW55IGxlYWRpbmcgYmxhbmtzICovCi0g ICAgaWYgKGlzYWxwaGEoKnMpKQkJCS8qIFJlbWVtYmVyIGlmIDFzdCBjaGFyIGlzIGEgbGV0dGVy ICovCi0gICAgICBpc2xldHRlciA9IDE7Ci0KLSAgICBsZW4gPSBzdHJsZW4ocyk7Ci0gICAgZGVi dWcoRjExMCwiY21jdnRkYXRlIixzLGxlbik7Ci0gICAgaWYgKGxlbiA9PSAwKSB7CQkJLyogTm8g YXJnIC0gcmV0dXJuIGN1cnJlbnQgZGF0ZS10aW1lICovCi0JZHAgPSBja2RhdGUoKTsKLQlnb3Rv IHhjdnRkYXRlOwotICAgIH0KLSAgICBpZiAobGVuID4gREFURUJVRkxFTikgewkJLyogQ2hlY2sg bGVuZ3RoIG9mIGFyZyAqLwotCW1ha2VzdHIoJmNtZGF0ZW1zZywiRGF0ZS10aW1lIHN0cmluZyB0 b28gbG9uZyIpOwotCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKLQlyZXR1 cm4oTlVMTCk7Ci0gICAgfQotICAgIGhoID0gMDsJCQkJLyogSW5pdCB0aW1lIHRvIDAwOjAwOjAw LjAgKi8KLSAgICBtbSA9IDA7Ci0gICAgc3MgPSAwOwotICAgIGZmID0gMDsKLSAgICB6dGltZSgm cCk7Ci0gICAgaWYgKCFwKQotICAgICAgcCAgPSAiIjsKLSAgICBpZiAoKnApIHsJCQkJLyogSW5p dCB0aW1lIHRvIGN1cnJlbnQgdGltZSAqLwotCXggPSBja3N0cm5jcHkoZGJ1ZixwLDI2KTsKLQlp ZiAoeCA+IDE3KSB7Ci0JICAgIGhoID0gYXRvaSgmZGJ1ZlsxMV0pOwotCSAgICBtbSA9IGF0b2ko JmRidWZbMTRdKTsKLQkgICAgc3MgPSBhdG9pKCZkYnVmWzE3XSk7Ci0JfQotICAgIH0KLSAgICBj a3N0cm5jcHkoeXl5eW1tZGQsenpuZGF0ZSgpLFlZWVlNTUREKTsgLyogSW5pdCBkYXRlIHRvIGN1 cnJlbnQgZGF0ZSAqLwotICAgIGNrc3RybmNweSh5ZWFyYnVmLHl5eXltbWRkLDUpOwotICAgIGNr c3RybmNweShtb25idWYsJnl5eXltbWRkWzRdLDMpOwotICAgIGNrc3RybmNweShkYXlidWYsJnl5 eXltbWRkWzZdLDMpOwotICAgIHllYXIgPSB5ZWFyYnVmOwotICAgIG1vbnRoID0gbW9uYnVmOwot ICAgIGRheSA9IGRheWJ1ZjsKLSAgICBuZGF5ID0gYXRvaShkYXlidWYpOwotICAgIGNrc3RybmNw eSh4YnVmLHMsREFURUJVRkxFTik7CS8qIE1ha2UgYSBsb2NhbCBjb3B5IHdlIGNhbiBwb2tlICov Ci0gICAgcyA9IHhidWY7CQkJCS8qIFBvaW50IHRvIGl0ICovCi0gICAgc1tsZW5dID0gTlVMOwot ICAgIGlmIChzWzBdID09ICc6JykgewotCXAgPSBzOwotCWdvdG8gZG90aW1lOwotICAgIH0KLSAg ICAvKiBTcGVjaWFsIHByZXNldCBmb3JtYXRzLi4uICovCi0KLSAgICBpZiAobGVuID49IDE0KSB7 CQkJLyogRlRQIE1EVE0gYWxsLW51bWVyaWMgZGF0ZSAqLwotCWNoYXIgYzsKLQljID0gc1sxNF07 CQkJLyogZS5nLiAxOTk4MDYxNTEwMDA0NS4wMTQgKi8KLQlzWzE0XSA9IE5VTDsKLQl4ID0gcmRp Z2l0cyhzKTsKLQlzWzE0XSA9IGM7Ci0JaWYgKHgpIHsKLQkgICAgY2tzdHJuY3B5KHl5eXltbWRk LHMsOCsxKTsKLQkgICAgeWVhciA9IE5VTEw7Ci0JICAgIHAgPSAmc1s4XTsKLQkgICAgZ290byBk b3RpbWU7Ci0JfQotICAgIH0KLSAgICB4ID0gMDsJCQkJLyogQmVjb21lcyA+IDAgZm9yIGFzY3Rp bWUgZm9ybWF0ICovCi0gICAgaWYgKGlzYWxwaGEoc1swXSkpIHsKLQlpZiAobGVuID09IDI0KSB7 CQkvKiBBc2N0aW1lIGZvcm1hdD8gKi8KLQkgICAgLyogU2F0IEp1bCAxNCAxNTo1NzozMiAyMDAx ICovCi0JICAgIHggPSBja21hdGNoKGF0cDEscywwLDApOwotCSAgICBkZWJ1ZyhGMTExLCJjbWN2 dGRhdGUgYXNjdGltZSIscyx4KTsKLQl9IGVsc2UgaWYgKGxlbiA9PSAyOCkgewkJLyogT3IgQXNj dGltZSBwbHVzIHRpbWV6b25lPyAqLwotCSAgICAvKiBTYXQgSnVsIDE0IDE1OjE1OjM5IEVEVCAy MDAxICovCi0JICAgIHggPSBja21hdGNoKGF0cDIscywwLDApOwotCSAgICBkZWJ1ZyhGMTExLCJj bWN2dGRhdGUgYXNjdGltZSt0aW1lem9uZSIscyx4KTsKLQl9Ci0gICAgfQotICAgIGlmICh4ID4g MCkgewkJCS8qIEFzY3RpbWUgZm9ybWF0ICovCi0gICAgICAgIGludCB4eDsKLSAgICAgICAgc3Ry bmNweSh5ZWFyYnVmLHMgKyBsZW4gLSA0LDQpOwotICAgICAgICB5ZWFyYnVmWzRdID0gTlVMOwot ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQotICAgICAgICAgIHRtcGJ1ZltpXSA9IHNb aSs0XTsKLSAgICAgICAgdG1wYnVmWzNdID0gTlVMOwotCWlmICgoeHggPSBsb29rdXAoY21vbnRo cyx0bXBidWYsMTIsTlVMTCkpIDwgMCkgewotCSAgICBtYWtlc3RyKCZjbWRhdGVtc2csIkludmFs aWQgbW9udGgiKTsKLQkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOwot CSAgICByZXR1cm4oTlVMTCk7Ci0JfQotICAgICAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgYXNj dGltZSBtb250aCIsIiIseHgpOwotICAgICAgICBtb25idWZbMF0gPSAoeHggLyAxMCkgKyAnMCc7 IAotICAgICAgICBtb25idWZbMV0gPSAoeHggJSAxMCkgKyAnMCc7IAotICAgICAgICBtb25idWZb Ml0gPSBOVUw7Ci0gICAgICAgIGRheWJ1ZlswXSA9IChzWzhdID09ICcgJyA/ICcwJyA6IHNbOF0p OwotICAgICAgICBkYXlidWZbMV0gPSBzWzldOwotICAgICAgICBkYXlidWZbMl0gPSBOVUw7Ci0J eGJ1ZlswXSA9IFNQOwotICAgICAgICBmb3IgKGkgPSAxMTsgaSA8IDE5OyBpKyspCi0gICAgICAg ICAgeGJ1ZltpLTEwXSA9IHNbaV07Ci0gICAgICAgIHhidWZbOV0gPSBOVUw7Ci0JY2ttYWttc2co emJ1ZiwxOCx5ZWFyYnVmLG1vbmJ1ZixkYXlidWYseGJ1Zik7Ci0JZGVidWcoRjExMCwiY21jdnRk YXRlIGFzY3RpbWUgb2siLHpidWYsMCk7Ci0JaWYgKGxlbiA9PSAyNCkgewotCSAgICBkcCA9IHpi dWY7Ci0JICAgIGdvdG8geGN2dGRhdGU7Ci0JfSBlbHNlIHsKLQkgICAgaW50IG47Ci0JICAgIG4g PSBja21ha21zZyh5YnVmLERBVEVCVUZMRU4tNCx6YnVmLCIgIixOVUxMLE5VTEwpOwotCSAgICB5 YnVmW24rK10gPSBzWzIwXTsKLQkgICAgeWJ1ZltuKytdID0gc1syMV07Ci0JICAgIHlidWZbbisr XSA9IHNbMjJdOwotCSAgICB5YnVmW24rK10gPSBOVUw7Ci0JICAgIGNrc3RybmNweSh4YnVmLHli dWYsREFURUJVRkxFTik7Ci0JICAgIHMgPSB4YnVmOwotCSAgICBpc2xldHRlciA9IDA7Ci0JfQot ICAgIH0KLQotLyogQ2hlY2sgZm9yIGRheSBvZiB3ZWVrICovCi0KLSAgICBwID0gczsKLSAgICB3 aGlsZSAoKnAgPT0gU1ApIHArKzsKLSAgICBkb3cgPSAtMTsKLSAgICBpZiAoKnApIHsKLQlwMiA9 IHA7Ci0JY2MgPSBOVUw7Ci0Jd2hpbGUgKDEpIHsKLQkgICAgaWYgKCpwMiA9PSAnLCcgfHwgKnAy ID09IFNQIHx8ICEqcDIpIHsKLQkJY2MgPSAqcDI7CQkvKiBTYXZlIGJyZWFrIGNoYXIgKi8KLQkJ KnAyID0gTlVMOwkJLyogTlVMIGl0IG91dCAqLwotCQlwMyA9IHAyOwkJLyogUmVtZW1iZXIgdGhp cyBzcG90ICovCi0JCWlmICgoZG93ID0gbG9va3VwKGRheXNvZndlZWsscCw3LE5VTEwpKSA+IC0x KSB7Ci0JCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgZG93IixwLGRvdyk7Ci0JCSAgICBzID0g cDI7Ci0JCSAgICBpZiAoY2MgPT0gJywnIHx8IGNjID09IFNQKSB7IC8qIFBvaW50IHRvIG5leHQg ZmllbGQgKi8KLQkJCXMrKzsKLQkJCXdoaWxlICgqcyA9PSBTUCkgcysrOwotCQkgICAgfQotCQkg ICAgcCA9IHM7Ci0JCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgZG93IG5ldyBwIixwLGRvdyk7 Ci0JCSAgICBicmVhazsKLQkJfSBlbHNlIGlmIChpc2FscGhhKCpwKSAmJiBjYyA9PSAnLCcpIHsK LQkJICAgIG1ha2VzdHIoJmNtZGF0ZW1zZywiVW5yZWNvZ25pemVkIGRheSBvZiB3ZWVrIik7Ci0J CSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7Ci0JCSAgICByZXR1cm4o TlVMTCk7Ci0JCX0gZWxzZSB7Ci0JCSAgICAqcDMgPSBjYzsKLQkJICAgIGJyZWFrOwotCQl9Ci0J ICAgIH0KLQkgICAgcDIrKzsKLQl9Ci0gICAgfQotICAgIGxlbiA9IHN0cmxlbihzKTsJCS8qIFVw ZGF0ZSBsZW5ndGggKi8KLSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgcyIscyxsZW4pOwotCi0g ICAgZGVidWcoRjExMSwiY21jdnRkYXRlIGRvdyIscyxkb3cpOwotICAgIGlmIChkb3cgPiAtMSkg ewkJCS8qIEhhdmUgYSBkYXktb2Ytd2VlayBudW1iZXIgKi8KLQlsb25nIHp6OyBpbnQgbiwgajsK LQl6eiA9IG1qZCh6em5kYXRlKCkpOwkJLyogR2V0IHRvZGF5J3MgTUpEICovCi0JZGVidWcoRjEx MSwiY21jdnRkYXRlIHp6IiwiIix6eik7Ci0JaiA9ICgoKGludCkoenogJSA3TCkpICsgMykgJSA3 OyAvKiBUb2RheSdzIGRheS1vZi13ZWVrIG51bWJlciAqLwotCWRlYnVnKEYxMTEsImNtY3Z0ZGF0 ZSBqIiwiIixqKTsKLQloaCA9IDA7CQkJCS8qIEluaXQgdGltZSB0byBtaWRuaWdodCAqLwotCW1t ID0gMDsKLQlzcyA9IDA7Ci0JaWYgKGogPT0gZG93KSB7Ci0JICAgIGNrc3RybmNweSh5eXl5bW1k ZCx6em5kYXRlKCksWVlZWU1NREQpOwotCSAgICB5ZWFyID0gTlVMTDsKLQl9IGVsc2UgewotCSAg ICBuID0gZG93IC0gajsJCS8qIERheXMgZnJvbSBub3cgKi8KLQkgICAgaWYgKGRvdyA8IGopCi0J ICAgICAgbiArPSA3OwotCSAgICBpZiAobiA8IDApIG4gKz0gNzsJCS8qIEFkZCB0byBNSkQgKi8K LQkgICAgenogKz0gbjsKLQkgICAgY2tzdHJuY3B5KHl5eXltbWRkLG1qZDJkYXRlKHp6KSxZWVlZ TU1ERCk7IC8qIE5ldyBkYXRlICovCi0JICAgIHllYXIgPSBOVUxMOwotCX0KLQlkZWJ1ZyhGMTEx LCJjbWN2dGRhdGUgQSIseXl5eW1tZGQsbGVuKTsKLQlpZiAobGVuID09IDApIHsJCQkvKiBObyBt b3JlIGZpZWxkcyBhZnRlciB0aGlzICovCi0JICAgIGNrbWFrbXNnKHpidWYsMTgseXl5eW1tZGQs IiAwMDowMDowMCIsTlVMTCxOVUxMKTsKLQkgICAgZHAgPSB6YnVmOwotCSAgICBnb3RvIHhjdnRk YXRlOwotCX0KLQlpc2xldHRlciA9IDA7Ci0JaWYgKHJkaWdpdHMocCkgJiYgbGVuIDwgOCkJLyog TmV4dCBmaWVsZCBpcyB0aW1lPyAqLwotCSAgZ290byBkb3RpbWU7CQkJLyogSWYgc28gZ28gc3Ry YWlnaHQgdG8gdGltZSBzZWN0aW9uICovCi0JaWYgKGlzZGlnaXQoKnApKSB7Ci0JICAgIGlmICgq KHArMSkgPT0gJzonKQotCSAgICAgIGdvdG8gZG90aW1lOwotCSAgICBlbHNlIGlmIChpc2RpZ2l0 KCoocCsxKSkgJiYgKCoocCsyKSA9PSAnOicpKQotCSAgICAgIGdvdG8gZG90aW1lOwotCX0KLSAg ICB9Ci0gICAgZGVidWcoRjExMSwiY21jdnRkYXRlIEIgcyIscyxkb3cpOwotICAgIGRlYnVnKEYx MTEsImNtY3Z0ZGF0ZSBCIHAiLHAsZG93KTsKLQotICAgIGlmICgqcyA9PSAnKycgfHwgKnMgPT0g Jy0nKSB7CS8qIERlbHRhIHRpbWUgb25seSAtIHNraXAgYWhlYWQuICovCi0JcCA9IHM7Ci0JZ290 byBkZWx0YTsKLSAgICB9Ci0jaWZkZWYgQ09NTUVOVAotLyoKLSAgV2hhdCBpcyB0aGUgcHVycG9z ZSBvZiB0aGlzPyAgSXQgYnJlYWtzIHBhcnNpbmcgb2YgZW1haWwgZGF0ZXMgbGlrZQotICAiV2Vk LCAxMyBGZWIgMjAwMiAxNzo0MzowMiAtMDgwMCAoUFNUKSIuICBSZW1vdmluZyB0aGlzIGNvZGUg Zml4ZXMgdGhlCi0gIHByb2JsZW0gYW5kIEtlcm1pdCBzdGlsbCBwYXNzZXMgdGhlICdkYXRlcycg c2NyaXB0LgotICAtIGZkYywgU2F0IE5vdiAyNiAxMDo1Mjo0NSAyMDA1LgotKi8KLSAgICBpZiAo ZG93ID4gLTEpIHsKLQkvKiBEYXkgb2Ygd2VlayBnaXZlbiBmb2xsb3dlZCBieSBzb21ldGhpbmcg dGhhdCBpcyBub3QgYSB0aW1lICovCi0JLyogb3IgYSBkZWx0YSBzbyBpdCBjYW4ndCBiZSB2YWxp ZCAqLwotCW1ha2VzdHIoJmNtZGF0ZW1zZywiSW52YWxpZCB0b2tlbnMgYWZ0ZXIgZGF5IG9mIHdl ZWsiKTsKLQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgZmFpbCIsY21kYXRlbXNnLC0xKTsKLQlyZXR1 cm4oTlVMTCk7Ci0gICAgfQotI2VuZGlmCS8qIENPTU1FTlQgKi8KLQotICAgIC8qIEhhbmRsZSAi dG9kYXkiLCAieWVzdGVyZGF5IiwgInRvbW9ycm93IiwgYW5kICsvLSBuIHVuaXRzICovCi0KLSAg ICBpZiAoY2tzdHJjaHIoIlR0WXlObiIsc1swXSkpIHsKLQlpbnQgaSwgaywgbiwgbWludXMgPSAw OwotCWNoYXIgYzsKLQlsb25nIGpkOwotCWpkID0gbWpkKGNrZGF0ZSgpKTsKLQlkZWJ1ZyhGMTEx LCJjbWN2dGRhdGUgbWpkIixzLGpkKTsKLQotCS8qIFN5bWJvbGljIGRhdGU6IFRPREFZLCBUT01P UlJPVywgZXRjLi4uPyAqLwotCi0JczIgPSBzOwkJCQkvKiBGaW5kIGVuZCBvZiBrZXl3b3JkICov Ci0JaSA9IDA7Ci0Jd2hpbGUgKGlzYWxwaGEoKnMyKSkgewkJLyogYW5kIGdldCBpdHMgbGVuZ3Ro ICovCi0JICAgIGkrKzsKLQkgICAgczIrKzsKLQl9Ci0JYyA9ICpzMjsJCQkvKiBaYXAgYnV0IHNh dmUgZGVsaW1pdGVyICovCi0JKnMyID0gTlVMOwotCWsgPSBsb29rdXAoc3ltZGF5dGFiLHMsbnN5 bWRheXMsTlVMTCk7IC8qIExvb2sgdXAga2V5d29yZCAqLwotCSpzMiA9IGM7CQkJLyogUmVwbGFj ZSBkZWxpbWl0ZXIgKi8KLQlpZiAoayA8IDApCQkJLyogS2V5d29yZCBub3QgZm91bmQgKi8KLQkg IGdvdG8gbm9ybWFsOwotCXMzID0gJnNbaV07Ci0Jd2hpbGUgKCpzMyA9PSBTUCkJCS8qIFNraXAg d2hpdGVzcGFjZSAqLwotCSAgczMrKzsKLQlpZiAoKnMzID09ICdfJyB8fCAqczMgPT0gJzonKQot CSAgczMrKzsKLQotCXN3aXRjaCAoaykgewkJCS8qIEhhdmUga2V5d29yZCAqLwotCSAgY2FzZSBT WU1fTk9XOgkJCS8qIE5PVyAqLwotCSAgICBja3N0cm5jcHkoeWJ1Zixja2RhdGUoKSxEQVRFQlVG TEVOKTsKLQkgICAgY2tzdHJuY3B5KHl5eXltbWRkLHlidWYsWVlZWU1NREQpOwotCSAgICB5ZWFy ID0gTlVMTDsKLQkgICAgaWYgKCpzMykgewkJCS8qIE5vIG92ZXJ3cml0aW5nIGN1cnJlbnQgdGlt ZS4gKi8KLQkJY2tzdHJuY2F0KHlidWYsIiAiLERBVEVCVUZMRU4pOwotCQlja3N0cm5jYXQoeWJ1 ZixzMyxEQVRFQlVGTEVOKTsKLQkgICAgfQotCSAgICBicmVhazsKLQkgIGRlZmF1bHQ6CQkJLyog WWVzdGVyZGF5LCBUb2RheSwgYW5kIFRvbW9ycm93ICovCi0JICAgIGlmIChrID09IFNZTV9UT01P KSB7CS8qIFRPTU9SUk9XICovCi0JCXN0cm5jcHkoeWJ1ZixtamQyZGF0ZShqZCsxKSw4KTsKLQkg ICAgfSBlbHNlIGlmIChrID09IFNZTV9ZRVNUKSB7CS8qIFlFU1RFUkRBWSAqLwotCQlzdHJuY3B5 KHlidWYsbWpkMmRhdGUoamQtMSksOCk7Ci0JICAgIH0gZWxzZSB7CQkJLyogVE9EQVkgKi8KLQkJ c3RybmNweSh5YnVmLGNrZGF0ZSgpLDgpOwotCSAgICB9Ci0JICAgIHN0cm5jcHkoeWJ1Zis4LCIg MDA6MDA6MDAiLERBVEVCVUZMRU4tOCk7IC8qIERlZmF1bHQgdGltZSBpcyAwICovCi0JICAgIGNr c3RybmNweSh5eXl5bW1kZCx5YnVmLFlZWVlNTUREKTsKLQkgICAgeWVhciA9IE5VTEw7Ci0JICAg IGlmICgqczMpIHsJCQkvKiBJZiBzb21ldGhpbmcgZm9sbG93cyBrZXl3b3JkLi4uICovCi0JCWlm IChpc2RpZ2l0KCpzMykpIHsJLyogVGltZSAtIG92ZXJ3cml0ZSBkZWZhdWx0IHRpbWUgKi8KLQkJ ICAgIHN0cm5jcHkoeWJ1Zis4LHMraSxEQVRFQlVGTEVOLTgpOwotCQl9IGVsc2UgewkJLyogU29t ZXRoaW5nIGVsc2UsIGtlZXAgZGVmYXVsdCB0aW1lICovCi0JCSAgICBja3N0cm5jYXQoeWJ1Ziwi ICIsREFURUJVRkxFTik7IC8qIGFuZCBhcHBlbmQgKi8KLQkJICAgIGNrc3RybmNhdCh5YnVmLHMz LERBVEVCVUZMRU4pOyAvKiB3aGF0ZXZlciB3ZSBoYXZlICovCi0JCX0KLQkgICAgfQotCX0KLQlz ID0geWJ1ZjsJCQkvKiBQb2ludCB0byByZXdyaXR0ZW4gZGF0ZS10aW1lICovCi0JbGVuID0gc3Ry bGVuKHMpOwkJLyogVXBkYXRlIGxlbmd0aCAqLwotCWlzbGV0dGVyID0gMDsJCQkvKiBDYW5jZWwg dGhpcyAqLwotICAgIH0KLQotLyogUmVndWxhciBmcmVlLWZvcm1hdCBub24tc3ltYm9saWMgZGF0 ZSAqLwotCi0gIG5vcm1hbDoKLQotICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBOT1JNQUwiLHMs bGVuKTsKLSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgZG93IixzLGRvdyk7Ci0gICAgaWYgKHl5 eXltbWRkWzBdICYmICF5ZWFyKSB7Ci0JY2tzdHJuY3B5KHllYXJidWYseXl5eW1tZGQsNSk7Ci0J Y2tzdHJuY3B5KG1vbmJ1ZiwmeXl5eW1tZGRbNF0sMyk7Ci0JY2tzdHJuY3B5KGRheWJ1ZiwmeXl5 eW1tZGRbNl0sMyk7Ci0JeWVhciA9IHllYXJidWY7Ci0JbW9udGggPSBtb25idWY7Ci0JZGF5ID0g ZGF5YnVmOwotCW5kYXkgPSBhdG9pKGRheWJ1Zik7Ci0gICAgfQotICAgIGlmIChpc2RpZ2l0KHNb MF0pKSB7CQkvKiBUaW1lIHdpdGhvdXQgZGF0ZT8gKi8KLQlwID0gczsKLQlpZiAoc1sxXSA9PSAn OicpIHsKLQkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIE5PUk1BTCBYMSIscyxsZW4pOwotCSAg ICBnb3RvIGRvdGltZTsKLQl9IGVsc2UgaWYgKGxlbiA+IDEgJiYgaXNkaWdpdChzWzFdKSAmJiBz WzJdID09ICc6JykgewotCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgTk9STUFMIFgyIixzLGxl bik7Ci0JICAgIGdvdG8gZG90aW1lOwotCX0gZWxzZSBpZiAocmRpZ2l0cyhzKSAmJiBsZW4gPCA4 KSB7Ci0JICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBOT1JNQUwgWDMiLHMsbGVuKTsKLQkgICAg Z290byBkb3RpbWU7Ci0JfQotICAgIH0KLSAgICBpZiAobGVuID49IDggJiYgaXNkaWdpdCgqcykp IHsJLyogQ2hlY2sgZmlyc3QgZm9yIHl5eXltbWRkKiAqLwotCWRlYnVnKEYxMTEsImNtY3Z0ZGF0 ZSBOT1JNQUwgQSIscyxsZW4pOwotCWNjID0gc1s4XTsKLQlzWzhdID0gTlVMOwkJCS8qIElzb2xh dGUgZmlyc3QgOCBjaGFyYWN0ZXJzICovCi0JaWYgKHJkaWdpdHMocykpIHsKLQkgICAgLyogSGF2 ZSB2YWxpZCB0aW1lIHNlcGFyYXRvcj8gKi8KLQkgICAgcDIgPSBjYyA/IGNrc3RyY2hyKCIgVHRf LToiLGNjKSA6IE5VTEw7Ci0JICAgIGlmICghY2MgfHwgcDIpIHsKLQkJY2tzdHJuY3B5KHl5eXlt bWRkLHMsWVlZWU1NREQpOwkvKiBWYWxpZCBzZXBhcmF0b3IgKi8KLQkJeWVhciA9IE5VTEw7Ci0J CXMgKz0gODsJCQkgICAgICAgIC8qIG9yIHRpbWUgbm90IGdpdmVuICovCi0JCWlmIChjYykgcysr OwkJICAgICAgICAvKiBLZWVwIGRhdGUgKi8KLQkJcCA9IHM7CQkJICAgICAgICAvKiBhbmQgZ28g aGFuZGxlIHRpbWUgKi8KLQkJZ290byBkb3RpbWU7Ci0JICAgIH0gZWxzZSBpZiAoIXAyKSB7Ci0J CWlmIChpc2RpZ2l0KGNjKSkKLQkJICBtYWtlc3RyKCZjbWRhdGVtc2csIk51bWVyaWMgZGF0ZSB0 b28gbG9uZyIpOwotCQllbHNlCi0JCSAgbWFrZXN0cigmY21kYXRlbXNnLCJJbnZhbGlkIGRhdGUt dGltZSBzZXBhcmF0b3IiKTsKLQkJZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEp OwotCQlyZXR1cm4oTlVMTCk7Ci0JICAgIH0KLQl9Ci0Jc1s4XSA9IGNjOwkJCS8qIFB1dCB0aGlz IGJhY2shICovCi0gICAgfQotICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBOT1JNQUwgbm9uLXl5 eXltbWRkIixzLGxlbik7Ci0KLSAgICAvKiBGcmVlLWZvcm1hdCBkYXRlIC0tIGZpZ3VyZSBpdCBv dXQgKi8KLQotI2lmZGVmIENPTU1FTlQKLSAgICBpZiAoKnMgJiYgIWlzZGlnaXQoKnMpKSB7Ci0J bWFrZXN0cigmY21kYXRlbXNnLCJVbnJlY29nbml6ZWQgd29yZCBpbiBkYXRlIik7Ci0JZGVidWco RjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOwotCXJldHVybihOVUxMKTsKLSAgICB9Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspCQkvKiBGaWVs ZCB0eXBlcyAqLwotICAgICAgZnRbaV0gPSAtMTsKLSAgICBmbGRbaSA9IDBdID0gKHAgPSBzKTsJ CS8qIEZpcnN0IGZpZWxkICovCi0gICAgd2hpbGUgKCpwKSB7CQkJLyogR2V0IG5leHQgdHdvIGZp ZWxkcyAqLwotCWlmIChpc2RhdGVzZXAoKnApKSB7CQkvKiBIYXZlIGEgZGF0ZSBzZXBhcmF0b3Ig Ki8KLQkgICAgaWYgKGkgPT0gMCkgewotCQlkYXRlc2VwID0gKnA7Ci0JICAgIH0gZWxzZSBpZiAo aSA9PSAxICYmICpwICE9IGRhdGVzZXApIHsKLQkJbWFrZXN0cigmY21kYXRlbXNnLCJJbmNvbnNp c3RlbnQgZGF0ZSBzZXBhcmF0b3JzIik7Ci0JCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRl bXNnLC0xKTsKLQkJcmV0dXJuKE5VTEwpOwotCSAgICB9Ci0JICAgICpwKysgPSBOVUw7CQkJLyog UmVwbGFjZSBieSBOVUwgKi8KLQkgICAgaWYgKCpwKSB7CQkJLyogTm93IHdlJ3JlIGF0IHRoZSBu ZXh0IGZpZWxkICovCi0JCXdoaWxlICgqcCA9PSBTUCkgcCsrOwkvKiBTa2lwIGxlYWRpbmcgc3Bh Y2VzICovCi0JCWlmICghKnApIGJyZWFrOwkJLyogTWFrZSBzdXJlIHdlIHN0aWxsIGhhdmUgc29t ZXRoaW5nICovCi0JCWlmIChpID09IDIpCQkvKiBMYXN0IG9uZT8gKi8KLQkJICBicmVhazsKLQkJ ZmxkWysraV0gPSBwOwkJLyogTm8sIHJlY29yZCBwb2ludGVyIHRvIHRoaXMgb25lICovCi0JICAg IH0gZWxzZSB7Ci0JCWJyZWFrOwotCSAgICB9CSAgICAKLQl9IGVsc2UgaWYgKCgqcCA9PSAnVCcg fHwgKnAgPT0gJ3QnKSAmJiBpc2RpZ2l0KCoocCsxKSkpIHsgLyogVGltZSAqLwotCSAgICAqcCsr ID0gTlVMOwotCSAgICBicmVhazsKLQl9IGVsc2UgaWYgKCpwID09ICc6JykgewotCSAgICBpZiAo aSA9PSAwICYmIHAgPT0gcykgewotCQlub2RhdGUgPSAxOwotCQlicmVhazsKLQkgICAgfSBlbHNl IGlmIChpICE9IDApIHsJLyogQWZ0ZXIgYSBkYXRlICovCi0JCWlmIChpID09IDIpIHsJCS8qIE9L IGFzIGRhdGUtdGltZSBzZXBhcmF0b3IgKFZNUykgKi8KLQkJICAgICpwKysgPSBOVUw7Ci0JCSAg ICBicmVhazsKLQkJfQotCQlpZiAoaSA8IDIpCi0JCSAgbWFrZXN0cigmY21kYXRlbXNnLCJUb28g ZmV3IGZpZWxkcyBpbiBkYXRlIik7Ci0JCWVsc2UKLQkJICBtYWtlc3RyKCZjbWRhdGVtc2csIk1p c3BsYWNlZCB0aW1lIHNlcGFyYXRvciIpOwotCQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0 ZW1zZywtMSk7Ci0JCXJldHVybihOVUxMKTsKLQkgICAgfQotCSAgICBub2RhdGUgPSAxOwkJCS8q IE9yIHdpdGhvdXQgYSBkYXRlICovCi0JICAgIGJyZWFrOwotCX0KLQlwKys7Ci0gICAgfQotICAg IGlmIChwID4gcyAmJiBpID09IDApCQkvKiBNYWtlIHN1cmUgd2UgaGF2ZSBhIGRhdGUgKi8KLSAg ICAgIG5vZGF0ZSA9IDE7CQkJLyogTm8gZGF0ZS4gKi8KLQotICAgIGlmIChub2RhdGUgJiYgZG93 ID4gLTEpIHsJCS8qIEhhdmUgaW1wbGllZCBkYXRlIGZyb20gRE9XPyAqLwotCWdvdG8gZG90aW1l OwkJCS8qIFVzZSwgdXNlIHRoYXQsIGdvIGRvIHRpbWUuICovCi0KLSAgICB9IGVsc2UgaWYgKG5v ZGF0ZSkgewkJLyogTm8gZGF0ZSBhbmQgbm8gaW1wbGllZCBkYXRlICovCi0JY2hhciAqdG1wID0g TlVMTDsJCS8qIFN1YnN0aXR1dGUgdG9kYXkncyBkYXRlICovCi0JenRpbWUoJnRtcCk7Ci0JaWYg KCF0bXApCi0JICB0bXAgID0gIiI7Ci0JaWYgKCEqdG1wKSB7Ci0JICAgIG1ha2VzdHIoJmNtZGF0 ZW1zZywiUHJvYmxlbSBzdXBwbHlpbmcgY3VycmVudCBkYXRlIik7Ci0JICAgIGRlYnVnKEYxMTEs ImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKLQkgICAgcmV0dXJuKE5VTEwpOwotCX0KLQlja3N0 cm5jcHkoZGJ1Zix0bXAsMjYpOwkJLyogUmVmb3JtYXQgKi8KLQlpZiAoZGJ1Zls4XSA9PSBTUCkg ZGJ1Zls4XSA9ICcwJzsKLQlmbGRbMF0gPSBkYnVmKzg7CQkvKiBkZCAqLwotCWRidWZbMTBdID0g TlVMOwotCWZsZFsxXSA9IGRidWYrNDsJCS8qIG1tbSAqLwotCWRidWZbN10gPSBOVUw7Ci0JZmxk WzJdID0gZGJ1ZisyMDsJCS8qIHl5eXkgKi8KLQlkYnVmWzI0XSA9IE5VTDsKLQloaCA9IGF0b2ko JmRidWZbMTFdKTsKLQltbSA9IGF0b2koJmRidWZbMTRdKTsKLQlzcyA9IGF0b2koJmRidWZbMTdd KTsKLQlwID0gczsJCQkJLyogQmFjayB1cCBzb3VyY2UgcG9pbnRlciB0byByZXBhcnNlICovCi0g ICAgfSBlbHNlIGlmIChpIDwgMikgewotCW1ha2VzdHIoJmNtZGF0ZW1zZywiVG9vIGZldyBmaWVs ZHMgaW4gZGF0ZSIpOwotCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKLQly ZXR1cm4oTlVMTCk7Ci0gICAgfQotICAgIC8qIEhhdmUgdGhyZWUgZGF0ZSBmaWVsZHMgLSBzZWUg d2hhdCB0aGV5IGFyZSAqLwotCi0gICAgZm9yIChrID0gMCwgaiA9IDA7IGogPCAzOyBqKyspIHsJ LyogR2V0IG51bWJlciBvZiBub24tbnVtZXJpYyBmaWVsZHMgKi8KLQlmdFtqXSA9IHJkaWdpdHMo ZmxkW2pdKTsKLQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgZmxkIixmbGRbal0saik7Ci0JaWYgKGZ0 W2pdID09IDApCi0JICBrKys7Ci0gICAgfQotICAgIGtuID0gazsJCQkJLyogSG93IG1hbnkgbnVt ZXJpYyBmaWVsZHMgKi8KLSAgICBtb250aCA9IE5VTEw7CQkJLyogU3RyaWtlIG91dCBkZWZhdWx0 IHZhbHVlcyAqLwotICAgIHllYXIgPSBOVUxMOwotICAgIGRheSA9IE5VTEw7Ci0KLSAgICBpZiAo ayA9PSAyICYmIGZ0WzJdID4gMCkgewkJLyogSnVsIDIwLCAyMDAxICovCi0JaW50IHh4OwotCXh4 ID0gc3RybGVuKGZsZFsxXSk7Ci0JcDMgPSBmbGRbMV07Ci0JaWYgKHh4ID4gMCkgaWYgKHAzW3h4 LTFdID09ICcsJykgewotCSAgICBwM1t4eC0xXSA9IE5VTDsKLQkgICAgaWYgKHJkaWdpdHMocDMp KSB7Ci0JCWsgPSAxOwkKLQkJZnRbMV0gPSAxOwotCSAgICB9IGVsc2UgcDNbeHgtMV0gPSAnLCc7 Ci0JfQotICAgIH0KLSAgICBpZiAoayA+IDEpIHsJCQkvKiBXZSBjYW4gaGF2ZSBvbmx5IG9uZSBu b24tbnVtZXJpYyAqLwotCWlmIChub2RhdGUpCi0JICBtYWtlc3RyKCZjbWRhdGVtc2csIlVucmVj b2duaXplZCB3b3JkIGluIGRhdGUiKTsgCi0JZWxzZSBpZiAoIWZ0WzJdICYmIGlzZGlnaXQoKihm bGRbMl0pKSkKLQkgIG1ha2VzdHIoJmNtZGF0ZW1zZywiSW52YWxpZCBkYXRlLXRpbWUgc2VwYXJh dG9yIik7IAotCWVsc2UKLQkgIG1ha2VzdHIoJmNtZGF0ZW1zZywiVG9vIG1hbnkgbm9uLW51bWVy aWMgZmllbGRzIGluIGRhdGUiKTsKLQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywt MSk7Ci0JcmV0dXJuKE5VTEwpOwotICAgIH0KLSAgICBpZiAoIWZ0WzBdKSB7Ci0JayA9IDA7Ci0g ICAgfSBlbHNlIGlmICghZnRbMV0pIHsKLQlrID0gMTsKLSAgICB9IGVsc2UgaWYgKCFmdFsyXSkg ewotCW1ha2VzdHIoJmNtZGF0ZW1zZywiTm9uLWRpZ2l0IGluIHRoaXJkIGRhdGUgZmllbGQiKTsK LQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7Ci0JcmV0dXJuKE5VTEwpOwot ICAgIH0gZWxzZQotICAgICAgayA9IC0xOwotCi0gICAgaWYgKGsgPiAtMSkgewotCWlmICgoeCA9 IGxvb2t1cChjbW9udGhzLGZsZFtrXSwxMixOVUxMKSkgPCAwKSB7Ci0JICAgIG1ha2VzdHIoJmNt ZGF0ZW1zZywiVW5rbm93biBtb250aCIpOwotCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNt ZGF0ZW1zZywtMSk7Ci0JICAgIHJldHVybihOVUxMKTsKLQl9Ci0Jc3ByaW50Zih0bXBidWYsIiUw MmQiLHgpOwotCW1vbnRoID0gdG1wYnVmOwotICAgIH0KLSAgICBmMmxlbiA9IHN0cmxlbihmbGRb Ml0pOwkJLyogTGVuZ3RoIG9mIDNyZCBmaWVsZCAqLwotCi0gICAgaWYgKGsgPT0gMCkgewkJCS8q IG1vbnRobmFtZSBkZCwgeXl5eSAqLwotCWRheSA9IGZsZFsxXTsKLQl5ZWFyID0gZmxkWzJdOwot ICAgIH0gZWxzZSBpZiAoKChpbnQpc3RybGVuKGZsZFswXSkgPT0gNCkpIHsgLyogeXl5eS14eC1k ZCAqLwotCXllYXIgPSBmbGRbMF07Ci0JZGF5ID0gZmxkWzJdOwotCWlmICghbW9udGgpCi0JICBt b250aCA9IGZsZFsxXTsJCS8qIHl5eXktbW0tZGQgKi8KLSAgICB9IGVsc2UgaWYgKGYybGVuID09 IDQpIHsJCS8qIHh4LXh4LXl5eXkgKi8KLQl5ZWFyID0gZmxkWzJdOwotCWlmIChtb250aCkgewkJ CS8qIGRkLW5hbWUteXl5eSAqLwotCSAgICBkYXkgPSBmbGRbMF07Ci0JfSBlbHNlIHsJCQkvKiB4 eC14eC15eXl5ICovCi0JICAgIGludCBmMCwgZjE7Ci0JICAgIGYwID0gYXRvaShmbGRbMF0pOwot CSAgICBmMSA9IGF0b2koZmxkWzFdKTsKLQkgICAgaWYgKCgoZjAgPiAxMikgJiYgKGYxIDw9IDEy KSkgfHwgKGYxIDw9IDEyICYmIGYwID09IGYxKSkgewotCQlkYXkgPSBmbGRbMF07CQkvKiBtbS1k ZC15eXl5ICovCi0JCW1vbnRoID0gZmxkWzFdOwotCSAgICB9IGVsc2UgaWYgKChmMCA8PSAxMikg JiYgKGYxID4gMTIpKSB7Ci0JCWlmICghcmRpZ2l0cyhmbGRbMV0pKSB7Ci0JCSAgICBtYWtlc3Ry KCZjbWRhdGVtc2csIkRheSBub3QgbnVtZXJpYyIpOwotCQkgICAgZGVidWcoRjExMSwiY21jdnRk YXRlIixjbWRhdGVtc2csLTEpOwotCQkgICAgcmV0dXJuKE5VTEwpOwotCQl9IGVsc2UgewotCQkg ICAgZGF5ID0gZmxkWzFdOwkvKiBkZC1tbS15eXl5ICovCi0JCX0KLQkJbW9udGggPSBmbGRbMF07 Ci0JICAgIH0gZWxzZSB7Ci0JCWlmICghZjAgfHwgIWYxKQotCQkgIG1ha2VzdHIoJmNtZGF0ZW1z ZywiRGF5IG9yIG1vbnRoIG91dCBvZiByYW5nZSIpOwotCQllbHNlCi0JCSAgbWFrZXN0cigmY21k YXRlbXNnLCJEYXkgYW5kIG1vbnRoIGFyZSBhbWJpZ3VvdXMiKTsKLQkJZGVidWcoRjExMSwiY21j dnRkYXRlIixjbWRhdGVtc2csLTEpOwotCQlyZXR1cm4oTlVMTCk7Ci0JICAgIH0KLQl9Ci0gICAg fSBlbHNlIGlmICgoZjJsZW4gPCA0KSAmJgkJLyogZGQgbW1tIHl5IChSRkM4MjIpICovCi0JICAg ICAgICFyZGlnaXRzKGZsZFsxXSkgJiYJLyogbWlkZGxlIGZpZWxkIGlzIG1vbnRobmFtZSAqLwot CSAgICAgICByZGlnaXRzKGZsZFsyXSkpIHsKLQlpbnQgdG1weWVhcjsKLQlkYXkgPSBmbGRbMF07 Ci0JaWYgKCFmbGRbMl1bMV0pIHsKLQkgICAgbWFrZXN0cigmY21kYXRlbXNnLCJUb28gZmV3IGRp Z2l0cyBpbiB5ZWFyIik7Ci0JICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0x KTsKLQkgICAgcmV0dXJuKE5VTEwpOwotCX0KLQl0bXB5ZWFyID0gYXRvaShmbGRbMl0pOwotCWlm ICh0bXB5ZWFyIDwgNTApCQkvKiBSRkMgMjgyMiB3aW5kb3dpbmcgKi8KLQkgIHRtcHllYXIgKz0g MjAwMDsKLQllbHNlCQkJCS8qIFRoaXMgaW5jbHVkZXMgMy1kaWdpdCB5ZWFycy4gKi8KLQkgIHRt cHllYXIgKz0gMTkwMDsKLQl5ZWFyID0gY2tpdG9hKHRtcHllYXIpOwotCi0gICAgfSBlbHNlIGlm ICgoZjJsZW4gPCA0KSAmJiAoayA8IDApICYmICgoaW50KXN0cmxlbihmbGRbMF0pIDwgNCkpIHsK LQltYWtlc3RyKCZjbWRhdGVtc2csIkFtYmlndW91cyBudW1lcmljIGRhdGUiKTsKLQlkZWJ1ZyhG MTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7Ci0JcmV0dXJuKE5VTEwpOwotICAgIH0gZWxz ZSBpZiAoKGYybGVuID4gNCkgJiYgZnRbMl0pIHsKLQltYWtlc3RyKCZjbWRhdGVtc2csIlRvbyBt YW55IGRpZ2l0cyBpbiB5ZWFyIik7Ci0JZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2cs LTEpOwotCXJldHVybihOVUxMKTsKLSAgICB9IGVsc2UgewotCW1ha2VzdHIoJmNtZGF0ZW1zZywi VW5leHBlY3RlZCBkYXRlIGZvcm1hdCIpOwotCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRl bXNnLC0xKTsKLQlyZXR1cm4oTlVMTCk7Ci0gICAgfQotICAgIHggPSBhdG9pKG1vbnRoKTsKLSAg ICBzcHJpbnRmKHRtcGJ1ZiwiJTAyZCIseCk7CQkvKiAyLWRpZ2l0IG51bWVyaWMgbW9udGggKi8K LQotLyoKLSAgIHN0YXRlID0gMSA9IGhvdXJzCi0gICBzdGF0ZSA9IDIgPSBtaW51dGVzCi0gICBz dGF0ZSA9IDMgPSBzZWNvbmRzCi0gICBzdGF0ZSA9IDQgPSBmcmFjdGlvbnMgb2Ygc2Vjb25kcwot Ki8KLQotICBkb3RpbWU6Ci0gICAgaWYgKGlzbGV0dGVyICYmIChzID09IHApKSB7Ci0JbWFrZXN0 cigmY21kYXRlbXNnLCJVbmtub3duIGRhdGUtdGltZSB3b3JkIik7Ci0JZGVidWcoRjExMSwiY21j dnRkYXRlIixjbWRhdGVtc2csLTEpOwotCXJldHVybihOVUxMKTsKLSAgICB9Ci0gICAgaWYgKCF5 ZWFyICYmIHl5eXltbWRkWzBdKSB7Ci0JZGVidWcoRjExMCwiY21jdnRkYXRlIGRvdGltZSB5eXl5 bW1kZCIseXl5eW1tZGQsMCk7Ci0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLQkgIHllYXJidWZb aV0gPSB5eXl5bW1kZFtpXTsKLQl5ZWFyYnVmWzRdID0gTlVMOwotCW1vbmJ1ZlswXSA9IHl5eXlt bWRkWzRdOwotCW1vbmJ1ZlsxXSA9IHl5eXltbWRkWzVdOwotCW1vbmJ1ZlsyXSA9IE5VTDsKLQlk YXlidWZbMF0gPSB5eXl5bW1kZFs2XTsKLQlkYXlidWZbMV0gPSB5eXl5bW1kZFs3XTsKLQlkYXli dWZbMl0gPSBOVUw7Ci0JZGF5ID0gZGF5YnVmOwotCW5kYXkgPSBhdG9pKGRheWJ1Zik7Ci0JbW9u dGggPSBtb25idWY7Ci0JeWVhciA9IHllYXJidWY7Ci0gICAgfQotICAgIGlmICgheWVhcikgewot CW1ha2VzdHIoJmNtZGF0ZW1zZywiSW50ZXJuYWwgZXJyb3IgLSBkYXRlIG5vdCBkZWZhdWx0ZWQi KTsKLQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7Ci0JcmV0dXJuKE5VTEwp OwotICAgIH0KLSAgICAvKiBHZXQgaGVyZSB3aXRoIGRheSwgbW9udGgsIGFuZCB5ZWFyIHNldCAq LwotICAgIGRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSBkb3RpbWUgZGF5IixkYXksMCk7Ci0gICAgZGVi dWcoRjExMCwiY21jdnRkYXRlIGRvdGltZSBtb250aCIsbW9udGgsMCk7Ci0gICAgZGVidWcoRjEx MCwiY21jdnRkYXRlIGRvdGltZSB5ZWFyIix5ZWFyLDApOwotICAgIGRlYnVnKEYxMTAsImNtY3Z0 ZGF0ZSBkb3RpbWUgcyIscywwKTsKLSAgICBkZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgZG90aW1lIHAi LHAsMCk7Ci0gICAgeCA9IGF0b2kobW9udGgpOwotICAgIGlmICh4ID4gMTIgfHwgeCA8IDEpIHsK LQltYWtlc3RyKCZjbWRhdGVtc2csIk1vbnRoIG91dCBvZiByYW5nZSIpOwotCWRlYnVnKEYxMTEs ImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKLQlyZXR1cm4oTlVMTCk7Ci0gICAgfQotICAgIG5k YXkgID0gYXRvaShkYXkpOwotICAgIGkgPSBtZGF5c1t4XTsKLSAgICBpZiAoeCA9PSAyKSBpZiAo aXNsZWFwKGF0b2koeWVhcikpKSBpKys7Ci0gICAgaWYgKG5kYXkgPiBpIHx8IG5kYXkgPCAxKSB7 Ci0JbWFrZXN0cigmY21kYXRlbXNnLCJEYXkgb3V0IG9mIHJhbmdlIik7Ci0JZGVidWcoRjExMSwi Y21jdnRkYXRlIixjbWRhdGVtc2csLTEpOwotCXJldHVybihOVUxMKTsKLSAgICB9Ci0gICAgaWYg KCEqcCAmJiB0ID09IDApIHsKLQlzcHJpbnRmKHpidWYsIiUwNGQlMDJkJTAyZCIsYXRvaSh5ZWFy KSxhdG9pKG1vbnRoKSxuZGF5KTsJCi0JZHAgPSB6YnVmOwotCWdvdG8geGN2dGRhdGU7Ci0gICAg fQotICAgIGlmICgqcCA9PSAnKycgfHwgKnAgPT0gJy0nKSB7CS8qIEdNVCBvZmZzZXQgd2l0aG91 dCBhIHRpbWUgKi8KLQloaCA9IDA7CQkJCS8qIHNvIGRlZmF1bHQgdGltZSB0byAwMDowMDowMCAq LwotCW1tID0gMDsKLQlzcyA9IDA7Ci0JZ290byBjbXRpbWV6b25lOwkJLyogYW5kIGdvIGRvIHRp bWV6b25lICovCi0gICAgfQotICAgIGlmICgqcCAmJiAhaXNkaWdpdCgqcCkgJiYgKnAgIT0gJzon KSB7Ci0JbWFrZXN0cigmY21kYXRlbXNnLCJJbnZhbGlkIHRpbWUiKTsKLQlkZWJ1ZyhGMTExLCJj bWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7Ci0JcmV0dXJuKE5VTEwpOwotICAgIH0KLSAgICBzcHJp bnRmKHl5eXltbWRkLCIlcyVzJTAyZCIseWVhcixtb250aCxuZGF5KTsgLyogZm9yIHR6IGNhbGN1 bGF0aW9ucy4uLiAqLwotCi0gICAgc3RhdGUgPSAxOwkJCQkvKiBJbml0aWFsaXplIHRpbWUtcGFy c2luZyBGU0EgKi8KLSAgICBoaCA9IDA7CQkJCS8qIGhvdXJzICovCi0gICAgbW0gPSAwOwkJCQkv KiBtaW51dGVzICovCi0gICAgc3MgPSAwOwkJCQkvKiBzZWNvbmRzICovCi0gICAgZmYgPSAtMTsJ CQkJLyogZnJhY3Rpb24gKi8KLSAgICBkID0gMDsJCQkJLyogRGlnaXQgY291bnRlciAqLwotICAg IHAyID0gcDsJCQkJLyogUHJlbGltaW5hcnkgZGlnaXQgY291bnQuLi4gKi8KLSAgICB3aGlsZSAo aXNkaWdpdCgqcDIpKSB7Ci0JZCsrOwotCXAyKys7Ci0gICAgfQotICAgIGlmIChkID4gNikgewot CW1ha2VzdHIoJmNtZGF0ZW1zZywiVG9vIG1hbnkgdGltZSBkaWdpdHMiKTsKLQlkZWJ1ZyhGMTEx LCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7Ci0JcmV0dXJuKE5VTEwpOwotICAgIH0KLSAgICBk ID0gKGQgJiAxICYmICpwMiAhPSAnOicpID8gMSA6IDA7CS8qIE9kZCBpbXBsaWVzIGxlYWRpbmcg JzAnICovCi0KLSAgICB3aGlsZSAoKnApIHsJCQkvKiBHZXQgdGhlIHRpbWUsIGlmIGFueSAqLwot CWlmIChpc2RpZ2l0KCpwKSkgewkJLyogZGlnaXQgKi8KLQkgICAgaWYgKGQrKyA+IDEpIHsKLQkJ c3RhdGUrKzsKLQkJZCA9IDE7Ci0JICAgIH0KLQkgICAgc3dpdGNoIChzdGF0ZSkgewotCSAgICAg IGNhc2UgMToJCQkvKiBIb3VycyAqLwotCQloaCA9IGhoICogMTAgKyAoKnAgLSAnMCcpOwotCQli cmVhazsKLQkgICAgICBjYXNlIDI6CQkJLyogTWludXRlcyAqLwotCQltbSA9IG1tICogMTAgKyAo KnAgLSAnMCcpOwotCQlicmVhazsKLQkgICAgICBjYXNlIDM6CQkJLyogU2Vjb25kcyAqLwotCQlz cyA9IHNzICogMTAgKyAoKnAgLSAnMCcpOwotCQlicmVhazsKLQkgICAgICBjYXNlIDQ6CQkJLyog RnJhY3Rpb24gb2Ygc2Vjb25kICovCi0JCWlmIChmZiA8IDApCi0JCSAgZmYgPSAoKnAgPiAnNCcp ID8gMSA6IDA7Ci0JCWJyZWFrOwotCSAgICB9Ci0JfSBlbHNlIGlmICgqcCA9PSAnOicpIHsJCS8q IENvbG9uICovCi0JICAgIHN0YXRlKys7Ci0JICAgIGQgPSAwOwotCSAgICBpZiAoc3RhdGUgPiAz KSB7Ci0JCW1ha2VzdHIoJmNtZGF0ZW1zZywiVG9vIG1hbnkgdGltZSBmaWVsZHMiKTsKLQkJZGVi dWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOwotCQlyZXR1cm4oTlVMTCk7Ci0JICAg IH0KLQl9IGVsc2UgaWYgKCpwID09ICcuJykgewotCSAgICBpZiAoc3RhdGUgPT0gMykgewotCQlz dGF0ZSA9IDQ7Ci0JCWQgPSAwOwotCSAgICB9IGVsc2UgewotCQltYWtlc3RyKCZjbWRhdGVtc2cs IkltcHJvcGVyIGZyYWN0aW9uIik7Ci0JCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNn LC0xKTsKLQkJcmV0dXJuKE5VTEwpOwotCSAgICB9Ci0JfSBlbHNlIGlmICgqcCA9PSBTUCkgewkJ LyogU3BhY2UgKi8KLQkgICAgd2hpbGUgKCpwICYmICgqcCA9PSBTUCkpCS8qIHBvc2l0aW9uIHRv IGZpcnN0IG5vbnNwYWNlICovCi0JICAgICAgcCsrOwotCSAgICBicmVhazsKLQl9IGVsc2UgaWYg KGlzYWxwaGEoKnApKSB7CS8qIEFNL1BNL1ogb3IgdGltZXpvbmUgKi8KLQkgICAgYnJlYWs7Ci0J fSBlbHNlIGlmICgqcCA9PSAnKycgfHwgKnAgPT0gJy0nKSB7IC8qIEdNVCBvZmZzZXQgKi8KLQkg ICAgYnJlYWs7Ci0JfSBlbHNlIHsKLQkgICAgbWFrZXN0cigmY21kYXRlbXNnLCJJbnZhbGlkIHRp bWUgY2hhcmFjdGVycyIpOwotCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywt MSk7Ci0JICAgIHJldHVybihOVUxMKTsKLQl9Ci0JcCsrOwotICAgIH0KLSAgICBpZiAoISpwKQkJ CQkvKiBJZiBub3RoaW5nIGxlZnQgKi8KLSAgICAgIGdvdG8geGNtZGF0ZTsJCQkvKiBnbyBmaW5p c2ggdXAgKi8KLQotICAgIC8qIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBISCwgTU0sIFNTLCBhbmQg RkYgKi8KLSAgICAvKiBOb3cgaGFuZGxlIHRoZSByZXN0OiBBTSwgUE0sIGFuZC9vciB0aW1lem9u ZSBpbmZvICovCi0KLSAgICBpZiAoIWNrc3RyY21wKHAsImFtIiwyLDApKSB7CS8qIEFNL1BNLi4u ICovCi0JcG1mbGFnID0gMDsKLQlwICs9IDI7Ci0gICAgfSBlbHNlIGlmICghY2tzdHJjbXAocCwi YS5tLiIsNCwwKSkgewotCXBtZmxhZyA9IDA7Ci0JcCArPSA0OwotICAgIH0gZWxzZSBpZiAoIWNr c3RyY21wKHAsInBtIiwyLDApKSB7Ci0JcG1mbGFnID0gMTsKLQlwICs9IDI7Ci0gICAgfSBlbHNl IGlmICghY2tzdHJjbXAocCwicC5tLiIsNCwwKSkgewotCXBtZmxhZyA9IDE7Ci0JcCArPSA0Owot ICAgIH0KLSAgICBpZiAocG1mbGFnICYmIGhoIDwgMTIpCQkvKiBJZiBQTSB3YXMgZ2l2ZW4gKi8K LSAgICAgIGhoICs9IDEyOwkJCQkvKiBhZGQgMTIgdG8gdGhlIGhvdXIgKi8KLQotICAgIC8qIE5v dyBoYW5kbGUgdGltZXpvbmUgKi8KLQotICBjbXRpbWV6b25lOgotICAgIGRlYnVnKEYxMTAsImNt Y3Z0ZGF0ZSB0aW1lem9uZSIscCwwKTsKLQotICAgIHpoaCA9IDA7CQkJCS8qIEdNVCBvZmZzZXQg SEggKi8KLSAgICB6bW0gPSAwOwkJCQkvKiBHTVQgb2Zmc2V0IE1NICovCi0gICAgZ210c2lnbiA9 IDA7CQkJLyogU2lnbiBvZiBHTVQgb2Zmc2V0ICovCi0gICAgaXNnbXQgPSAwOwkJCQkvKiAxIGlm IHRpbWUgaXMgR01UICovCi0KLSAgICB3aGlsZSAoKnAgJiYgKnAgPT0gU1ApCQkvKiBHb2JibGUg c3BhY2VzICovCi0gICAgICBwKys7Ci0gICAgaWYgKCEqcCkJCQkJLyogSWYgbm90aGluZyBsZWZ0 ICovCi0gICAgICBnb3RvIHhjbWRhdGU7CQkJLyogd2UncmUgZG9uZSAqLwotCi0gICAgaWYgKGlz YWxwaGEoKnApKSB7CQkJLyogU29tZXRoaW5nIGxlZnQgKi8KLQlpbnQgem9uZSA9IDA7CQkJLyog QWxwaGFiZXRpYyBtdXN0IGJlIHRpbWV6b25lICovCi0JcDIgPSBwOwkJCQkvKiBJc29sYXRlIHRp bWV6b25lICovCi0JcCsrOwotCXdoaWxlIChpc2FscGhhKCpwKSkKLQkgIHArKzsKLQlwMyA9IHA7 Ci0JY2MgPSAqcDsKLQkqcCA9IE5VTDsKLQlwID0gcDI7CQkJCS8qIEhhdmUgdGltZXpvbmUsIGxv b2sgaXQgdXAgKi8KLQl6b25lID0gbG9va3VwKHVzYXR6LHAsbnVzYXR6LE5VTEwpOwotCWRlYnVn KEYxMTEsImNtY3Z0ZGF0ZSB0aW1lem9uZSBhbHBoYSIscCx6b25lKTsKLQotCWlmICh6b25lIDwg MCkgewkJCS8qIE5vdCBmb3VuZCAqLwotCSAgICBtYWtlc3RyKCZjbWRhdGVtc2csIlVua25vd24g dGltZXpvbmUiKTsKLQkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOwot CSAgICByZXR1cm4oTlVMTCk7Ci0JfQotCWlzZ210Kys7CQkJLyogQWxsIGRhdGVzIGFyZSBHTVQg ZnJvbSBoZXJlIGRvd24gKi8KLQlpZiAoem9uZSAhPSAwKSB7CQkvKiBCdXQgbm90IHRoaXMgb25l IHNvIG1ha2UgaXQgR01UICovCi0JICAgIGhoICs9IHpvbmU7CQkJLyogUkZDIDgyMiB0aW1lem9u ZTogRVNUIGV0YyAqLwotCSAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgaGggKyB6b25lIiwiIixo aCk7Ci0JICAgIGlmIChoaCA+IDIzKSB7CQkvKiBPZmZzZXQgY3Jvc3NlcyBkYXRlIGJvdW5kYXJ5 ICovCi0JCWludCBpOwotCQlsb25nIGpkOwotCQlqZCA9IG1qZCh5eXl5bW1kZCk7CS8qIEdldCBN SkQgKi8KLQkJamQgKz0gaGggLyAyNDsJCS8qIEFkZCBuZXcgZGF5KHMpICovCi0JCWhoID0gaGgg JSAyNDsJCS8qIGFuZCBjb252ZXJ0IGJhY2sgdG8geXl5eW1tZGQgKi8KLQkJY2tzdHJuY3B5KHl5 eXltbWRkLG1qZDJkYXRlKGpkKSxZWVlZTU1ERCk7Ci0JCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSB6 b25lLWFkanVzdGVkIGRhdGUiLHl5eXltbWRkLGhoKTsKLQkJZm9yIChpID0gMDsgaSA8IDQ7IGkr KykKLQkJICB5ZWFyYnVmW2ldID0geXl5eW1tZGRbaV07Ci0JCXllYXJidWZbNF0gPSBOVUw7Ci0J CW1vbmJ1ZlswXSA9IHl5eXltbWRkWzRdOwotCQltb25idWZbMV0gPSB5eXl5bW1kZFs1XTsKLQkJ bW9uYnVmWzJdID0gTlVMOwotCQlkYXlidWZbMF0gPSB5eXl5bW1kZFs2XTsKLQkJZGF5YnVmWzFd ID0geXl5eW1tZGRbN107Ci0JCWRheWJ1ZlsyXSA9IE5VTDsKLQkJZGF5ID0gZGF5YnVmOwotCQlu ZGF5ID0gYXRvaShkYXlidWYpOwotCQltb250aCA9IG1vbmJ1ZjsKLQkJeWVhciA9IHllYXJidWY7 Ci0JICAgIH0KLQl9Ci0JcCA9IHAzOwkJCQkvKiBQdXQgYmFjayB3aGF0ZXZlciB3ZSBwb2tlZCBh Ym92ZSAqLwotCSpwID0gY2M7Ci0KLSAgICB9IGVsc2UgaWYgKCpwID09ICcrJyB8fCAqcCA9PSAn LScpIHsgLyogR01UL1VUQyBvZmZzZXQgKi8KLQlwMyA9IHA7Ci0JZGVidWcoRjExMCwiY21jdnRk YXRlIHRpbWV6b25lIEdNVCBvZmZzZXQiLHAsMCk7Ci0JZ210c2lnbiA9ICgqcCA9PSAnKycpID8g LTEgOiAxOwotCWlzZ210Kys7Ci0JcCsrOwotCXdoaWxlICgqcCA9PSBTUCkgcCsrOwotCWQgPSAw OwotCXAyID0gcDsKLQl3aGlsZSAoaXNkaWdpdCgqcCkpIHsJCS8qIENvdW50IGRpZ2l0cyAqLwot CSAgICBkKys7Ci0JICAgIHArKzsKLQl9Ci0JaWYgKGQgIT0gNCkgewkJCS8qIFN0cmljdCBSRkMg WzJdODIyICovCi0JICAgIGlzZ210ID0gMDsJCQkvKiBJZiBub3QgZXhhY3RseSA0IGRpZ2l0cyAq LwotCSAgICBwID0gcDM7CQkJLyogaXQncyBub3QgYSBHTVQgb2Zmc2V0LiAqLwotCSAgICBnb3Rv IGRlbHRhOwkJCS8qIFNvIHRyZWF0IGl0IGFzIGEgZGVsdGEgdGltZS4gKi8KLQl9Ci0JZCA9IChk ICYgMSAmJiAqcCAhPSAnOicpID8gMSA6IDA7IC8qIE9kZCBpbXBsaWVzIGxlYWRpbmcgJzAnICov Ci0JcCA9IHAyOwotCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBHTVQgb2Zmc2V0IHNpZ24iLHAsZ210 c2lnbik7Ci0JZGVidWcoRjEwMSwiY21jdnRkYXRlIEdNVCBvZmZzZXQgZCIsIiIsZCk7Ci0Jc3Rh dGUgPSAxOwotCXdoaWxlICgqcCkgewotCSAgICBpZiAoaXNkaWdpdCgqcCkpIHsJCS8qIGRpZ2l0 ICovCi0JCWlmIChkKysgPiAxKSB7Ci0JCSAgICBzdGF0ZSsrOwotCQkgICAgZCA9IDE7Ci0JCX0K LQkJc3dpdGNoIChzdGF0ZSkgewotCQkgIGNhc2UgMToKLQkJICAgIHpoaCA9IHpoaCAqIDEwICsg KCpwIC0gJzAnKTsKLQkJICAgIGJyZWFrOwotCQkgIGNhc2UgMjoKLQkJICAgIHptbSA9IHptbSAq IDEwICsgKCpwIC0gJzAnKTsKLQkJICAgIGJyZWFrOwotCQkgIGRlZmF1bHQ6CQkvKiBJZ25vcmUg c2Vjb25kcyBvciBmcmFjdGlvbnMgKi8KLQkJICAgIGJyZWFrOwotCQl9CQkJCi0JICAgIH0gZWxz ZSBpZiAoKnAgPT0gJzonKSB7CS8qIENvbG9uICovCi0JCXN0YXRlKys7Ci0JCWQgPSAwOwotCSAg ICB9IGVsc2UgaWYgKCpwID09IFNQIHx8ICpwID09ICcoJykgewotCQlicmVhazsKLQkgICAgfSBl bHNlIHsKLQkJcCA9IHAzOwkJCS8qIE1heWJlIGl0J3Mgbm90IGEgR01UIG9mZnNldC4gKi8KLQkJ Z290byBkZWx0YTsJCS8qIFNvIHRyZWF0IGl0IGFzIGEgZGVsdGEgdGltZS4gKi8KLQkgICAgfQot CSAgICBwKys7Ci0JfQotICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgc291cmNlIHN0 cmluZyBhZnRlciB0aW1lem9uZSIscCwwKTsKLQotICAgIGlmICgqcCkgewkJCQkvKiBBbnl0aGlu ZyBsZWZ0PyAqLwotCXAyID0gcDsKLQl3aGlsZSAoKnAyID09IFNQKQkJLyogU2tpcCBwYXN0IHNw YWNlcyAqLwotCSAgcDIrKzsKLQlpZiAoKnAyID09ICcoJykgewkJLyogUkZDLTgyMiBjb21tZW50 PyAqLwotCSAgICBpbnQgcGMgPSAxOwkJCS8qIHBhcmVuIGNvdW50ZXIgKi8KLQkgICAgcDIrKzsK LQkgICAgd2hpbGUgKCpwMikgewotCQlpZiAoKnAyID09ICcpJykgewotCQkgICAgaWYgKC0tcGMg PT0gMCkgewotCQkJcDIrKzsKLQkJCWJyZWFrOwotCQkgICAgfQotCQl9IGVsc2UgaWYgKCpwMiA9 PSAnKScpIHsKLQkJICAgIHBjKys7Ci0JCX0KLQkJcDIrKzsKLQkgICAgfQkJCi0JICAgIHdoaWxl ICgqcDIgPT0gU1ApCQkvKiBTa2lwIHBhc3Qgc3BhY2VzICovCi0JICAgICAgcDIrKzsKLQkgICAg aWYgKCEqcDIpCQkJLyogQW55dGhpbmcgbGVmdD8gKi8KLQkgICAgICAqcCA9IE5VTDsJCQkvKiBO bywgZXJhc2UgY29tbWVudCAqLwotCX0KLQlpZiAoISpwMikJCQkvKiBBbnl0aGluZyBsZWZ0PyAq LwotCSAgZ290byB4Y21kYXRlOwkJCS8qIE5vLCBkb25lLiAqLwotCXAgPSBwMjsKLQotICAgICAg ZGVsdGE6Ci0JZGVidWcoRjExMCwiY21jdnRkYXRlIGRlbHRhIHl5eXltbWRkIix5eXl5bW1kZCww KTsKLQlkZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgZGVsdGEgeWVhciIseWVhciwwKTsKLQlkZWJ1ZyhG MTEwLCJjbWN2dGRhdGUgZGVsdGEgcCIscCwwKTsKLQotCWlmICgqcCA9PSAnKycgfHwgKnAgPT0g Jy0nKSB7CS8qIERlbHRhIHRpbWUgKi8KLQkgICAgaW50IHN0YXRlID0gTkVFRF9EQVlTOwkvKiBT dGFydCBvZmYgbG9va2luZyBmb3IgZGF5cyAqLwotCSAgICBjaGFyIGMgPSAwOwotCSAgICBkc2ln biA9IDE7CQkJLyogR2V0IHNpZ24gKi8KLQkgICAgaWYgKCpwKysgPT0gJy0nKQotCSAgICAgIGRz aWduID0gLTE7Ci0JICAgIHdoaWxlICgqcCA9PSBTUCkJCS8qIFNraXAgaW50ZXJ2ZW5pbmcgc3Bh Y2VzICovCi0JICAgICAgcCsrOwotCSAgICB3aGlsZSAoc3RhdGUpIHsJCS8qIEZTQSB0byBwYXJz ZSBkZWx0YSB0aW1lICovCi0JCWlmIChzdGF0ZSA8IDAgfHwgIWlzZGlnaXQoKnApKSB7Ci0JCSAg ICBtYWtlc3RyKCZjbWRhdGVtc2csIkludmFsaWQgZGVsdGEgdGltZSIpOwotCQkgICAgZGVidWco RjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOwotCQkgICAgcmV0dXJuKE5VTEwpOwotCQl9 Ci0JCXAyID0gcDsJCQkvKiBHZXQgbmV4dCBudW1lcmljIGZpZWxkICovCi0JCXdoaWxlIChpc2Rp Z2l0KCpwMikpCi0JCSAgcDIrKzsKLQkJYyA9ICpwMjsJCS8qIEFuZCBicmVhayBjaGFyYWN0ZXIg Ki8KLQkJKnAyID0gTlVMOwkJLyogVGVybWluYXRlIHRoZSBudW1iZXIgKi8KLQotCQlzd2l0Y2gg KHN0YXRlKSB7CS8qIEludGVycHJldCBhY2NvcmRpbmcgdG8gc3RhdGUgKi8KLQkJICBjYXNlIE5F RURfREFZUzoJLyogSW5pdGlhbCAqLwotCQkgICAgaWYgKChjID09ICctJykgfHwJLyogVk1TIGZv cm1hdCAqLwotCQkJKChjID09ICdkJyB8fCBjID09ICdEJykKLQkJCSAmJiAhaXNhbHBoYSgqKHAy KzEpKSkpIHsgLyogRGF5cyAqLwotCQkJZGRheXMgPSBhdG9pKHApOwotCQkJaWYgKCEqKHAyKzEp KQkJCQotCQkJICBzdGF0ZSA9IDA7Ci0JCQllbHNlCQkgICAgICAvKiBpZiBhbnl0aGluZyBpcyBs ZWZ0ICovCi0JCQkgIHN0YXRlID0gTkVFRF9IUlM7ICAgLyogbm93IHdlIHdhbnQgaG91cnMuICov Ci0JCSAgICB9IGVsc2UgaWYgKChjID09ICdXJyB8fCBjID09ICd3JykgJiYgIWlzYWxwaGEoKihw MisxKSkpIHsKLQkJCWRkYXlzID0gYXRvaShwKSAqIDc7ICAgLyogd2Vla3MuLi4gKi8KLQkJCWlm ICghKihwMisxKSkJCQkKLQkJCSAgc3RhdGUgPSAwOwotCQkJZWxzZQotCQkJICBzdGF0ZSA9IE5F RURfSFJTOwotCQkgICAgfSBlbHNlIGlmICgoYyA9PSAnTScgfHwgYyA9PSAnbScpICYmICFpc2Fs cGhhKCoocDIrMSkpKSB7Ci0JCQlkbW9udGhzID0gYXRvaShwKTsgLyogbW9udGhzLi4uICovCi0J CQlpZiAoISoocDIrMSkpCQkJCi0JCQkgIHN0YXRlID0gMDsKLQkJCWVsc2UKLQkJCSAgc3RhdGUg PSBORUVEX0hSUzsKLQkJICAgIH0gZWxzZSBpZiAoKGMgPT0gJ1knIHx8IGMgPT0gJ3knKSAmJiAh aXNhbHBoYSgqKHAyKzEpKSkgewotCQkJZHllYXJzID0gYXRvaShwKTsgLyogeWVhcnMuLi4gKi8K LQkJCWlmICghKihwMisxKSkJCQkKLQkJCSAgc3RhdGUgPSAwOwotCQkJZWxzZQotCQkJICBzdGF0 ZSA9IE5FRURfSFJTOwotCQkgICAgfSBlbHNlIGlmIChjID09ICc6JykgeyAvKiBkZWxpbWl0ZXIg aXMgY29sb24gKi8KLQkJCWRob3VycyA9IGF0b2kocCk7ICAvKiBzbyBpdCdzIGhvdXJzICovCi0J CQlzdGF0ZSA9IE5FRURfTUlOUzsgLyogbm93IHdlIHdhbnQgbWludXRlcyAqLwotCQkgICAgfSBl bHNlIGlmICghYykgeyAgICAgICAvKiBlbmQgb2Ygc3RyaW5nICovCi0JCQlkaG91cnMgPSBhdG9p KHApOyAgLyogaXQncyBzdGlsbCBob3VycyAqLwotCQkJc3RhdGUgPSAwOyAgICAgICAgIC8qIGFu ZCB3ZSdyZSBkb25lICovCi0JCSAgICB9IGVsc2UgaWYgKGlzYWxwaGEoYykgfHwgYyA9PSBTUCkg ewotCQkJaWYgKGMgPT0gU1ApIHsJLyogSXQncyBhIGtleXdvcmQ/ICovCi0JCQkgICAgcDIrKzsJ LyogU2tpcCBzcGFjZXMgKi8KLQkJCSAgICB3aGlsZSAoKnAyID09IFNQKQotCQkJICAgICAgcDIr KzsKLQkJCX0gZWxzZSB7CS8qIG9yIHJlcGxhY2UgZmlyc3QgbGV0dGVyICovCi0JCQkgICAgKnAy ID0gYzsKLQkJCX0KLQkJCXAzID0gcDI7CS8qIHAyIHBvaW50cyB0byBiZWdpbm5pbmcgb2Yga2V5 d29yZCAqLwotCQkJd2hpbGUgKGlzYWxwaGEoKnAzKSkgLyogRmluZCBlbmQgb2Yga2V5d29yZCAq LwotCQkJICBwMysrOwotCQkJYyA9ICpwMzsJLyogTlVMIGl0IG91dCBzbyB3ZSBjYW4gbG9vayBp dCB1cCAqLwotCQkJaWYgKCpwMykJLyogcDMgcG9pbnRzIHRvIGtleXdvcmQgdGVybWluYXRvciAq LwotCQkJICAqcDMgPSBOVUw7Ci0JCQl1bml0cyA9IGxvb2t1cCh0aW1ldW5pdHMscDIsbnVuaXRz LE5VTEwpOwotCQkJaWYgKHVuaXRzIDwgMCkgewotCQkJICAgIG1ha2VzdHIoJmNtZGF0ZW1zZywi SW52YWxpZCB1bml0cyBpbiBkZWx0YSB0aW1lIik7Ci0JCQkgICAgZGVidWcoRjExMSwiY21jdnRk YXRlIixjbWRhdGVtc2csLTEpOwotCQkJICAgIHJldHVybihOVUxMKTsKLQkJCX0KLQkJCSpwMiA9 IE5VTDsJLyogUmUtdGVybWluYXRlIHRoZSBudW1iZXIgKi8KLQkJCSpwMyA9IGM7Ci0JCQl3aGls ZSAoKnAzID09IFNQKSAvKiBQb2ludCBhdCBmaWVsZCBhZnRlciB1bml0cyAqLwotCQkJICBwMysr OwotCQkJcDIgPSBwMzsKLQkJCXN3aXRjaCAodW5pdHMpIHsKLQkJCSAgY2FzZSBUVV9EQVlTOgot CQkJICAgIGRkYXlzID0gYXRvaShwKTsKLQkJCSAgICBicmVhazsKLQkJCSAgY2FzZSBUVV9XRUVL UzoKLQkJCSAgICBkZGF5cyA9IGF0b2kocCkgKiA3OwotCQkJICAgIGJyZWFrOwotCQkJICBjYXNl IFRVX01PTlRIUzoKLQkJCSAgICBkbW9udGhzID0gYXRvaShwKTsKLQkJCSAgICBicmVhazsKLQkJ CSAgY2FzZSBUVV9ZRUFSUzoKLQkJCSAgICBkeWVhcnMgPSBhdG9pKHApOwotCQkJICAgIGJyZWFr OwotCQkJfQotCQkJaWYgKCpwMikgewotCQkJICAgIHN0YXRlID0gTkVFRF9IUlM7Ci0JCQkgICAg cDItLTsKLQkJCX0gZWxzZQotCQkJICBzdGF0ZSA9IDA7Ci0KLQkJICAgIH0gZWxzZSB7CQkvKiBB bnl0aGluZyBlbHNlICovCi0JCQlzdGF0ZSA9IC0xOwkvKiBpcyBhbiBlcnJvciAqLwotCQkgICAg fQotCQkgICAgYnJlYWs7Ci0JCSAgY2FzZSBORUVEX0hSUzoJLyogTG9va2luZyBmb3IgaG91cnMg Ki8KLQkJICAgIGRlYnVnKEYwMDAsImNtY3Z0ZGF0ZSBORUVEX0hSUyIscCxjKTsKLQkJICAgIGlm IChjID09ICc6JykgewotCQkJZGhvdXJzID0gYXRvaShwKTsKLQkJCXN0YXRlID0gTkVFRF9NSU5T OwotCQkgICAgfSBlbHNlIGlmICghYykgewotCQkJZGhvdXJzID0gYXRvaShwKTsKLQkJCXN0YXRl ID0gMDsKLQkJICAgIH0gZWxzZSB7Ci0JCQlzdGF0ZSA9IC0xOwotCQkgICAgfQotCQkgICAgYnJl YWs7Ci0JCSAgY2FzZSBORUVEX01JTlM6CS8qIExvb2tpbmcgZm9yIG1pbnV0ZXMgKi8KLQkJICAg IGlmIChjID09ICc6JykgewotCQkJZG1pbnMgPSBhdG9pKHApOwotCQkJc3RhdGUgPSBORUVEX1NF Q1M7Ci0JCSAgICB9IGVsc2UgaWYgKCFjKSB7Ci0JCQlkbWlucyA9IGF0b2kocCk7Ci0JCQlzdGF0 ZSA9IDA7Ci0JCSAgICB9IGVsc2UgewotCQkJc3RhdGUgPSAtMTsKLQkJICAgIH0KLQkJICAgIGJy ZWFrOwotCQkgIGNhc2UgTkVFRF9TRUNTOgkvKiBMb29raW5nIGZvciBzZWNvbmRzICovCi0JCSAg ICBpZiAoYyA9PSAnLicpIHsKLQkJCWRzZWNzID0gYXRvaShwKTsKLQkJCXN0YXRlID0gTkVFRF9G UkFDOwotCQkgICAgfSBlbHNlIGlmICghYykgewotCQkJZHNlY3MgPSBhdG9pKHApOwotCQkJc3Rh dGUgPSAwOwotCQkgICAgfSBlbHNlIHsKLQkJCXN0YXRlID0gLTE7Ci0JCSAgICB9Ci0JCSAgICBi cmVhazsKLQkJICBjYXNlIE5FRURfRlJBQzoJLyogRnJhY3Rpb24gb2Ygc2Vjb25kICovCi0JCSAg ICBpZiAoIWMgJiYgcmRpZ2l0cyhwKSkgewotCQkJaWYgKCpwID4gJzQnKQotCQkJICBkc2Vjcysr OwotCQkJc3RhdGUgPSAwOwotCQkgICAgfSBlbHNlIHsKLQkJCXN0YXRlID0gLTE7Ci0JCSAgICB9 Ci0JCSAgICBicmVhazsKLQkJfQotCQlpZiAoYykJCQkvKiBuZXh0IGZpZWxkIGlmIGFueSAqLwot CQkgIHAgPSBwMiArIDE7Ci0JICAgIH0KLQkgICAgaGF2ZWRlbHRhID0gMTsKLQotCX0gZWxzZSB7 Ci0JICAgIG1ha2VzdHIoJmNtZGF0ZW1zZywiRXh0cmFuZW91cyBtYXRlcmlhbCBhdCBlbmQiKTsK LQkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOwotCSAgICByZXR1cm4o TlVMTCk7Ci0JfQotICAgIH0KLQotIHhjbWRhdGU6Ci0KLSAgICBpZiAoKHQgIT0gMiAmJiBoaCA+ IDI0KSB8fCBoaCA8IDApIHsgLyogSG91ciByYW5nZSBjaGVjayAqLwotCW1ha2VzdHIoJmNtZGF0 ZW1zZywiSW52YWxpZCBob3VycyIpOwotCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNn LC0xKTsKLQlyZXR1cm4oTlVMTCk7Ci0gICAgfQotICAgIGlmIChtbSA+IDU5KSB7CQkJLyogTWlu dXRlIHJhbmdlIGNoZWNrICovCi0JbWFrZXN0cigmY21kYXRlbXNnLCJJbnZhbGlkIG1pbnV0ZXMi KTsKLQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7Ci0JcmV0dXJuKE5VTEwp OwotICAgIH0KLSAgICBpZiAoZmYgPiAwKSB7CQkJLyogRnJhY3Rpb24gb2Ygc2Vjb25kPyAqLwot CWlmIChzcyA8IDU5KSB7Ci0JICAgIHNzKys7Ci0JICAgIGZmID0gMDsKLQl9IGVsc2UgaWYgKG1t IDwgNTkpIHsKLQkgICAgc3MgPSAwOwotCSAgICBtbSsrOwotCSAgICBmZiA9IDA7Ci0JfSBlbHNl IGlmIChoaCA8IDI0KSB7Ci0JICAgIHNzID0gMDsKLQkgICAgbW0gPSAwOwotCSAgICBoaCsrOwot CSAgICBmZiA9IDA7Ci0JfQotCS8qIE11c3QgYWRkIGEgZGF5IC0tIGxlYXZlIGZmIGF0IDEuLi4g Ki8KLQkvKiAoRE8gU09NRVRISU5HIEFCT1VUIFRISVMgTEFURVIpICovCi0gICAgfQotICAgIGlm IChzcyA+IDYwKSB7CQkJLyogU2Vjb25kcyByYW5nZSBjaGVjayAqLwotCW1ha2VzdHIoJmNtZGF0 ZW1zZywiSW52YWxpZCBzZWNvbmRzIik7IC8qIDYwIGlzIG9rIGJlY2F1c2Ugb2YgKi8KLQlkZWJ1 ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7ICAvKiBMZWFwIFNlY29uZC4gKi8KLQly ZXR1cm4oTlVMTCk7Ci0gICAgfQotICAgIGlmICgobW0gPCAwIHx8IHNzIDwgMCkgfHwKLQkodCAh PSAyICYmIChzcyA+IDAgfHwgbW0gPiAwKSAmJiBoaCA+IDIzKSkgewotCW1ha2VzdHIoJmNtZGF0 ZW1zZywiSW52YWxpZCBtaW51dGVzIG9yIHNlY29uZHMiKTsKLQlkZWJ1ZyhGMTExLCJjbWN2dGRh dGUiLGNtZGF0ZW1zZywtMSk7Ci0JcmV0dXJuKE5VTEwpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTEw LCJjbWN2dGRhdGUgeWVhciIseWVhciwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgbW9u dGgiLG1vbnRoLDApOwotICAgIGRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBuZGF5IiwiIixuZGF5KTsK LSAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgaGgiLCIiLGhoKTsKLSAgICBkZWJ1ZyhGMTAxLCJj bWN2dGRhdGUgbW0iLCIiLG1tKTsKLSAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgc3MiLCIiLHNz KTsKLSAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgZ210c2lnbiIsIiIsZ210c2lnbik7Ci0gICAg ZGVidWcoRjEwMSwiY21jdnRkYXRlIHpoaCIsIiIsemhoKTsKLSAgICBkZWJ1ZyhGMTAxLCJjbWN2 dGRhdGUgem1tIiwiIix6bW0pOwotICAgIGRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBpc2dtdCIsIiIs aXNnbXQpOwotCi0jaWZkZWYgWkxPQ0FMVElNRQotLyogSGFuZGxlIHRpbWV6b25lIC0tIGZpcnN0 IGNvbnZlcnQgdG8gR01UICovCi0KLSAgICB6ZGQgPSAwOwkJCQkvKiBEYXlzIGNoYW5nZWQgKi8K LSAgICBpZiAoaXNnbXQgJiYgKHptbSB8fCB6aGgpKSB7CS8qIElmIEdNVCBvZmZzZXQgZ2l2ZW4g Ki8KLQlsb25nIHNlYzEsIHNlYzIsIHp6OwotCXNlYzEgPSBzcyArIDYwICogbW0gKyAzNjAwICog aGg7Ci0Jc2VjMiA9IGdtdHNpZ24gKiAoNjAgKiB6bW0gKyAzNjAwICogemhoKTsKLQlzZWMxICs9 IHNlYzI7Ci0JaWYgKHNlYzEgPCAwKSB7Ci0JICAgIHNlYzEgPSAwIC0gc2VjMTsKLQkgICAgemRk ID0gMEwgLSAoc2VjMSAvIDg2NDAwTCk7Ci0JICAgIHNlYzEgPSBzZWMxICUgODY0MDBMOwotCX0g ZWxzZSBpZiAoc2VjMSA+IDg2NDAwTCkgewotCSAgICB6ZGQgPSBzZWMxIC8gODY0MDBMOwotCSAg ICBzZWMxID0gc2VjMSAlIDg2NDAwTDsKLQl9Ci0Jc3MgPSBzZWMxICUgNjA7Ci0JenogPSBzZWMx IC8gNjA7Ci0JbW0gPSB6eiAlIDYwOwotCWhoID0genogLyA2MDsKLQlkZWJ1ZyhGMTAxLCJjbWN2 dGRhdGUgTkVXIGhoIiwiIixoaCk7Ci0JZGVidWcoRjEwMSwiY21jdnRkYXRlIE5FVyBtbSIsIiIs bW0pOwotCWRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBORVcgZGQiLCIiLHpkZCk7Ci0KLS8qIEF0IHRo aXMgcG9pbnQgaGg6bW06c3MgaXMgaW4gR01UIGFuZCB6ZGQgaXMgdGhlIGNhbGVuZGFyIGFkanVz dG1lbnQgKi8KLQotICAgIH0KLSNlbmRpZiAvKiBaTE9DQUxUSU1FICovCi0KLSAgICBpZiAoeXl5 eW1tZGRbMF0gJiYgIXllYXIpIHsKLQlja3N0cm5jcHkoeWVhcmJ1Zix5eXl5bW1kZCw1KTsKLQlj a3N0cm5jcHkobW9uYnVmLCZ5eXl5bW1kZFs0XSwzKTsKLQlja3N0cm5jcHkoZGF5YnVmLCZ5eXl5 bW1kZFs2XSwzKTsKLQl5ZWFyID0geWVhcmJ1ZjsKLQltb250aCA9IG1vbmJ1ZjsKLQlkYXkgPSBk YXlidWY7Ci0JbmRheSA9IGF0b2koZGF5YnVmKTsKLSAgICB9Ci0gICAgc3ByaW50Zih6YnVmLCIl MDRkJTAyZCUwMmQgJTAyZDolMDJkOiUwMmQiLCAvKiBTQUZFICovCi0JICAgIGF0b2koeWVhciks YXRvaShtb250aCksbmRheSxoaCxtbSxzcwotCSAgICApOwotICAgIGRwID0gemJ1ZjsKLQotI2lm ZGVmIFpMT0NBTFRJTUUKLSAgICAvKiBOb3cgY29udmVydCBmcm9tIEdNVCB0byBsb2NhbCB0aW1l ICovCi0KLSAgICBpZiAoaXNnbXQpIHsJCQkvKiBJZiBHTVQgY29udmVydCB0byBsb2NhbCB0aW1l ICovCi0JZGVidWcoRjExMCwiY21jdnRkYXRlIEdNVCAxIixkcCwwKTsKLQlpZiAoemRkKSB7CQkJ LyogQXBwbHkgYW55IGNhbGVuZGFyIGFkanVzdG1lbnQgKi8KLQkgICAgbG9uZyB6ejsKLQkgICAg enogPSBtamQoZHApICsgemRkOwotCSAgICBzcHJpbnRmKHpidWYsIiVzICUwMmQ6JTAyZDolMDJk IixtamQyZGF0ZSh6eiksaGgsbW0sc3MpOwotCX0KLQlkZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgR01U IDIiLGRwLDApOwotCWlmICgocCA9IHpsb2NhbHRpbWUoZHApKSkgewotCSAgICBkZWJ1ZyhGMTEw LCJjbWN2dGRhdGUgYXNjdGltZSB6bG9jYWx0aW1lIixwLDApOwotCSAgICBpZiAocCkgY2tzdHJu Y3B5KHpidWYscCwxOCk7Ci0JfQotCWRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSBHTVQgMyIsZHAsMCk7 Ci0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLQkgIHllYXJidWZbaV0gPSBkcFtpXTsKLQl5ZWFy YnVmWzRdID0gTlVMOwotCW1vbmJ1ZlswXSA9IGRwWzRdOwotCW1vbmJ1ZlsxXSA9IGRwWzVdOwot CW1vbmJ1ZlsyXSA9IE5VTDsKLQlkYXlidWZbMF0gPSBkcFs2XTsKLQlkYXlidWZbMV0gPSBkcFs3 XTsKLQlkYXlidWZbMl0gPSBOVUw7Ci0JZGF5ID0gZGF5YnVmOwotCW5kYXkgPSBhdG9pKGRheWJ1 Zik7Ci0JbW9udGggPSBtb25idWY7Ci0JeWVhciA9IHllYXJidWY7Ci0JaGggPSBhdG9pKCZkcFs5 XSk7Ci0JbW0gPSBhdG9pKCZkcFsxMl0pOwotCXNzID0gYXRvaSgmZHBbMTVdKTsKLSAgICB9Ci0j ZW5kaWYgLyogWkxPQ0FMVElNRSAqLwotCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKSB7 Ci0JZGVidWcoRjEwMSwiY21jdnRkYXRlIGhvdXIiLCIiLGhoKTsKLQlkZWJ1ZyhGMTAxLCJjbWN2 dGRhdGUgbWludXRlIiwiIixtbSk7Ci0JZGVidWcoRjEwMSwiY21jdnRkYXRlIHNlY29uZCIsIiIs c3MpOwotICAgIH0KLSNlbmRpZiAvKiBERUJMT0cgKi8KLQotICAgIG1ha2VzdHIoJmNtZGF0ZW1z ZyxOVUxMKTsKLSAgICBpZiAoaGF2ZWRlbHRhKSB7Ci0jaWZkZWYgREVCVUcKLQlpZiAoZGVibG9n KSB7Ci0JICAgIGRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSBiYXNlICIsZHAsMCk7Ci0JICAgIGRlYnVn KEYxMDEsImNtY3Z0ZGF0ZSBkZWx0YSBzaWduIiwiIixkc2lnbik7Ci0JICAgIGRlYnVnKEYxMDEs ImNtY3Z0ZGF0ZSBkZWx0YSB5cnMgIiwiIixkeWVhcnMpOwotCSAgICBkZWJ1ZyhGMTAxLCJjbWN2 dGRhdGUgZGVsdGEgbW9zICIsIiIsZG1vbnRocyk7Ci0JICAgIGRlYnVnKEYxMDEsImNtY3Z0ZGF0 ZSBkZWx0YSBkYXlzIiwiIixkZGF5cyk7Ci0JICAgIGRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBkZWx0 YSBocnMgIiwiIixkaG91cnMpOwotCSAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgZGVsdGEgbWlu cyIsIiIsZG1pbnMpOwotCSAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgZGVsdGEgc2VjcyIsIiIs ZHNlY3MpOwotCX0KLSNlbmRpZiAvKiBERUJMT0cgKi8KLQlpZiAoIShkcCA9IGNtZGVsdGEoYXRv aSh5ZWFyKSwKLQkJICAgIGF0b2kobW9udGgpLAotCQkgICAgbmRheSwgaGgsIG1tLCBzcywKLQkJ ICAgIGRzaWduLCBkeWVhcnMsIGRtb250aHMsIGRkYXlzLCBkaG91cnMsIGRtaW5zLCBkc2Vjcykp KSB7Ci0JICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKLQkgICAgcmV0 dXJuKE5VTEwpOwotCX0KLSAgICB9Ci0KLSAgeGN2dGRhdGU6CQkJCS8qIEV4aXQgcG9pbnQgZm9y IHN1Y2Nlc3MgKi8KLSAgICB7Ci0JaW50IGxlbiwgaywgbjsKLQljaGFyICogcDsKLQlkZWJ1ZyhG MTEwLCJjbWN2dGRhdGUgeGN2dGRhdGUgZHAiLGRwLDApOwotCWlmICghZHApIGRwID0gIiI7CQkv KiBTaG91bGRuJ3QgaGFwcGVuICovCi0JaWYgKCEqZHApIHJldHVybihOVUxMKTsJCS8qIC4uLiAq LwotCWxlbiA9IHN0cmxlbihkcCk7Ci0JZGVidWcoRjExMSwiY21jdnRkYXRlIHJlc3VsdCIsZHAs bGVuKTsKLQlrID0gY21kYXRlYnAgLSAoY2hhciAqKWNtZGF0ZWJ1ZjsgLyogU3BhY2UgdXNlZCAq LwotCW4gPSBDTURBVEVCVUYgLSBrIC0gMTsJCS8qIFNwYWNlIGxlZnQgKi8KLQlpZiAobiA8IGxl bikgewkJCS8qIE5vdCBlbm91Z2g/ICovCi0JICAgIGNtZGF0ZWJwID0gY21kYXRlYnVmOwkvKiBX cmFwIGFyb3VuZCAqLwotCSAgICBuID0gQ01EQVRFQlVGOwotCX0KLQlja3N0cm5jcHkoY21kYXRl YnAsZHAsbik7Ci0JcCA9IGNtZGF0ZWJwOwotCWNtZGF0ZWJwICs9IGxlbiArIDE7Ci0JcmV0dXJu KHApOwotICAgIH0KLX0KLQotaW50Ci1jbXZkYXRlKGQpIGNoYXIgKiBkOyB7CQkJLyogVmVyaWZ5 IGRhdGUtdGltZSAqLwotICAgIGludCBpOwotICAgIGlmICghZCkgcmV0dXJuKDApOwotICAgIGlm ICgoaW50KXN0cmxlbihkKSAhPSAxNykgcmV0dXJuKDApOwotICAgIGZvciAoaSA9IDA7IGkgPCA4 OyBpKyspIHsgaWYgKCFpc2RpZ2l0KGRbaV0pKSByZXR1cm4oMCk7IH0KLSAgICBpZiAoIWlzZGln aXQoZFs5XSkgIHx8ICFpc2RpZ2l0KGRbMTBdKSB8fAotCSFpc2RpZ2l0KGRbMTJdKSB8fCAhaXNk aWdpdChkWzEzXSkgfHwKLQkhaXNkaWdpdChkWzE1XSkgfHwgIWlzZGlnaXQoZFsxNl0pKQotICAg ICAgcmV0dXJuKDApOwotICAgIGlmICghY2tzdHJjaHIoIiBUdF8tOiIsZFs4XSkpIHJldHVybigw KTsKLSAgICBpZiAoZFsxMV0gIT0gJzonICYmIGRbMTRdICE9ICc6JykgcmV0dXJuKDApOwotICAg IHJldHVybigxKTsKLX0KLQotLyogYyBtIGQgaSBmIGYgZCBhIHQgZSAgLS0gIEdldCBkaWZmZXJl bmNlIGJldHdlZW4gdHdvIGRhdGUtdGltZXMgKi8KLQotY2hhciAqCi1jbWRpZmZkYXRlKGQxLGQy KSBjaGFyICogZDEsICogZDI7IHsKLSAgICBjaGFyIGQxYnVmWzldLCBkMmJ1Zls5XTsKLSAgICBj aGFyIHgxYnVmWzE4XSwgeDJidWZbMThdOwotICAgIGNoYXIgKiBwOwotCi0gICAgaW50IGhoMSA9 IDAsIG1tMSA9IDAsIHNzMSA9IDA7Ci0gICAgaW50IGhoMiA9IDAsIG1tMiA9IDAsIHNzMiA9IDA7 Ci0gICAgaW50IGhoLCBtbSwgc3M7Ci0gICAgaW50IHNpZ247Ci0gICAgbG9uZyBqZDEsIGpkMiwg amQsIGYxLCBmMiwgZng7Ci0gICAgc3RhdGljIGNoYXIgcmVzdWx0WzI0XSwgKnJwOwotCi0gICAg ZGVidWcoRjExMCwiY21kaWZmZGF0ZSBkMSBBIixkMSwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJjbWRp ZmZkYXRlIGQyIEEiLGQyLDApOwotCi0gICAgaWYgKCEocCA9IGNtY3Z0ZGF0ZShkMSwxKSkpCQkv KiBDb252ZXJ0IGRhdGVzIHRvIHN0YW5kYXJkIGZvcm1hdCAqLwotICAgICAgcmV0dXJuKE5VTEwp OwotICAgIGNrc3RybmNweSh4MWJ1ZixwLDE4KTsKLSAgICBkMSA9IHgxYnVmOwotCi0gICAgaWYg KCEocCA9IGNtY3Z0ZGF0ZShkMiwxKSkpCi0gICAgICByZXR1cm4oTlVMTCk7Ci0gICAgY2tzdHJu Y3B5KHgyYnVmLHAsMTgpOwotICAgIGQyID0geDJidWY7Ci0KLSAgICBkZWJ1ZyhGMTEwLCJjbWRp ZmZkYXRlIGQxIEIiLGQxLDApOwotICAgIGRlYnVnKEYxMTAsImNtZGlmZmRhdGUgZDIgQiIsZDIs MCk7Ci0gICAgaWYgKCFjbXZkYXRlKGQxKSB8fCAhY212ZGF0ZShkMikpCi0gICAgICByZXR1cm4o TlVMTCk7Ci0KLSAgICBoaDEgPSBhdG9pKCZkMVs5XSk7CQkJLyogR2V0IGhvdXJzLCBtaW51dGVz LCBhbmQgc2Vjb25kcyAqLwotICAgIG1tMSA9IGF0b2koJmQxWzEyXSk7CQkvKiBmb3IgZmlyc3Qg ZGF0ZSAqLwotICAgIHNzMSA9IGF0b2koJmQxWzE1XSk7Ci0gICAgY2tzdHJuY3B5KGQxYnVmLGQx LDkpOwotCi0gICAgaGgyID0gYXRvaSgmZDJbOV0pOwkJCS8qIGRpdHRvIGZvciBzZWNvbmQgZGF0 ZSAqLwotICAgIG1tMiA9IGF0b2koJmQyWzEyXSk7Ci0gICAgc3MyID0gYXRvaSgmZDJbMTVdKTsK LSAgICBja3N0cm5jcHkoZDJidWYsZDIsOSk7Ci0gICAgCi0gICAgamQxID0gbWpkKGQxYnVmKTsJ CQkvKiBHZXQgdGhlIHR3byBKdWxpYW4gZGF0ZXMgKi8KLSAgICBqZDIgPSBtamQoZDJidWYpOwot ICAgIGYxID0gc3MxICsgNjAgKiBtbTEgKyAzNjAwICogaGgxOwkvKiBDb252ZXJ0IGZpcnN0IHRp bWUgdG8gc2Vjb25kcyAqLwotCi0gICAgZjIgPSBzczIgKyA2MCAqIG1tMiArIDM2MDAgKiBoaDI7 CS8qIERpdHRvIGZvciBzZWNvbmQgdGltZSAqLwotICAgIGRlYnVnKEYxMDEsImNtZGlmZmRhdGUg amQxIiwiIixqZDEpOwotICAgIGRlYnVnKEYxMDEsImNtZGlmZmRhdGUgZjEiLCIiLGYxKTsKLSAg ICBkZWJ1ZyhGMTAxLCJjbWRpZmZkYXRlIGpkMiIsIiIsamQyKTsKLSAgICBkZWJ1ZyhGMTAxLCJj bWRpZmZkYXRlIGYyIiwiIixmMik7Ci0gIAotICAgIGlmIChqZDIgPiBqZDEgfHwgKGpkMSA9PSBq ZDIgJiYgZjIgPiBmMSkpIHsKLSAgICAgICAgc2lnbiA9IC0xOyAKLSAgICAgICAgaWYgKGYxID4g ZjIpIHtqZDItLTsgZjIgKz0gODY0MDBMO30KLSAgICAgICAgamQgPSBqZDIgLSBqZDE7Ci0gICAg ICAgIGZ4ID0gZjIgLSBmMTsKLSAgICB9IGVsc2UgewotICAgICAgICBzaWduID0gMTsKLSAgICAg ICAgaWYgKGYyID4gZjEpIHtqZDEtLTsgZjEgKz0gODY0MDBMO30KLSAgICAgICAgamQgPSBqZDEg LSBqZDI7Ci0gICAgICAgIGZ4ID0gZjEgLSBmMjsKLSAgICB9Ci0gICAgZGVidWcoRjExMSwiY21k aWZmZGF0ZSBzaWduIGpkIixzaWduPDA/Ii0iOiIrIixqZCk7Ci0gICAgZGVidWcoRjEwMSwiY21k aWZmZGF0ZSBmeCIsIiIsZngpOwotICAKLSAgICBoaCA9IChpbnQpIChmeCAvIDM2MDBMKTsJCS8q IENvbnZlcnQgc2Vjb25kcyB0byBoaDptbTpzcyAqLwotCi0gICAgbW0gPSAoaW50KSAoZnggJSAz NjAwTCkgLyA2MEw7Ci0gICAgc3MgPSAoaW50KSAoZnggJSAzNjAwTCkgJSA2MEw7Ci0KLSAgICBy cCA9IHJlc3VsdDsJCQkvKiBGb3JtYXQgdGhlIHJlc3VsdCAqLwotICAgICpycCsrID0gKHNpZ24g PCAwKSA/ICctJyA6ICcrJzsKLSAgICBpZiAoamQgIT0gMCAmJiBoaCttbStzcyA9PSAwKSB7Ci0J c3ByaW50ZihycCwiJWxkZCIsamQpOwotICAgIH0gZWxzZSBpZiAoamQgPT0gMCkgewotCWlmIChz cyA9PSAwKQotCSAgc3ByaW50ZihycCwiJWQ6JTAyZCIsaGgsbW0pOwotCWVsc2UKLQkgIHNwcmlu dGYocnAsIiVkOiUwMmQ6JTAyZCIsaGgsbW0sc3MpOwotICAgIH0gZWxzZSB7Ci0JaWYgKHNzID09 IDApCi0JICBzcHJpbnRmKHJwLCIlbGRkJWQ6JTAyZCIsamQsaGgsbW0pOwotCWVsc2UKLQkgIHNw cmludGYocnAsIiVsZGQlZDolMDJkOiUwMmQiLGpkLGhoLG1tLHNzKTsKLSAgICB9Ci0gICAgZGVi dWcoRjExMCwiY21kaWZmZGF0ZSByZXN1bHQiLHJlc3VsdCwwKTsKLSAgICByZXR1cm4oKGNoYXIg KilyZXN1bHQpOwotfQotCi0jaWZuZGVmIE5PU1BMCi0vKiBzIGggdSBmIGYgbCBlIGQgYSB0IGUg IC0tICBSZWFycmFuZ2UgZGF0ZSBzdHJpbmcgKi8KLQotLyoKLSAgQ2FsbCB3aXRoOgotICAgIEEg ZGF0ZSBzdHJpbmcgaW4gc3RhbmRhcmQgZm9ybWF0OiB5eXl5bW1kZCBoaDptbTpzcyAodGltZSBv cHRpb25hbCkuCi0gICAgT3B0aW9uczoKLSAgICAgIDE6IFJlZm9ybWF0IGRhdGUgdG8geXl5eS1t bW0tZGQgKG1tbSA9IEVuZ2xpc2ggbW9udGggYWJicmV2aWF0aW9uKS4KLSAgICAgIDI6IFJlZm9y bWF0IGRhdGUgdG8gZGQtbW1tLXl5eXkgKG1tbSA9IEVuZ2xpc2ggbW9udGggYWJicmV2aWF0aW9u KS4KLSAgICAgIDM6IFJlZm9ybWF0IGFzIG51bWVyaWMgeXl5eW1tZGRoaG1tc3MuCi0gICAgICA0 OiBSZWZvcm1hdCBpbiBhc2N0aW1lKCkgZm9ybWF0IFNhdCBOb3YgMjYgMTE6MTA6MzQgMjAwNQot ICAgIFJldHVybnM6Ci0gICAgICBQb2ludGVyIHRvIHJlc3VsdCBpZiBhcmdzIHZhbGlkLCBvdGhl cndpc2Ugb3JpZ2luYWwgYXJnIHBvaW50ZXIuCi0qLwotY2hhciAqCi1zaHVmZmxlZGF0ZShwLG9w dCkgY2hhciAqIHA7IGludCBvcHQ7IHsKLSAgICBleHRlcm4gY2hhciAqIHdrZGF5c1tdOwotICAg IGludCBsZW47Ci0gICAgY2hhciBpYnVmWzMyXTsKLSAgICBzdGF0aWMgY2hhciBvYnVmWzQ4XTsK LSAgICBjaGFyIGM7Ci0gICAgaW50IHl5LCBkZCwgbW07Ci0KLSAgICBpZiAoIXApIHAgPSAiIjsK LSAgICBpZiAoISpwKSBwID0gY2tkYXRlKCk7Ci0gICAgaWYgKG9wdCA8IDEgfHwgb3B0ID4gNCkK LSAgICAgIHJldHVybihwKTsKLSAgICBsZW4gPSBzdHJsZW4ocCk7Ci0gICAgaWYgKGxlbiA8IDgg fHwgbGVuID4gMzEpIHJldHVybihwKTsKLSAgICBpZiAob3B0ID09IDQpIHsJCQkvKiBBc2N0aW1l IGZvcm1hdCAoMjYgTm92IDIwMDUpICovCi0JY2hhciBjLCAqIHM7Ci0JbG9uZyB6OyBpbnQgazsK LQlja3N0cm5jcHkoaWJ1ZixwLDMxKTsKLQlrID0gbGVuOwotCXdoaWxlIChrID49IDAgJiYgaWJ1 ZltrXSA9PSBDUiB8fCBpYnVmW2tdID09IExGKQotCSAgaWJ1ZltrLS1dID0gTlVMOwotCXdoaWxl IChrID49IDAgJiYgaWJ1ZltrXSA9PSBTUCB8fCBpYnVmW2tdID09IEhUKQotCSAgaWJ1ZltrLS1d ID0gTlVMOwotCWlmIChrIDwgOSkgY2tzdHJuY3B5KCZpYnVmWzhdLCIgMDA6MDA6MDAiLDkpOwot CXAgPSBpYnVmOwotICAgICAgICB6ID0gbWpkKHApOyAgICAgICAgICAgICAgICAgICAgIC8qIENv bnZlcnQgdG8gbW9kaWZpZWQgSnVsaWFuIGRhdGUgKi8KLSAgICAgICAgeiA9IHogJSA3TDsKLSAg ICAgICAgaWYgKHogPCAwKSB7Ci0gICAgICAgICAgICB6ID0gMCAtIHo7Ci0gICAgICAgICAgICBr ID0gNiAtICgoaW50KXogKyAzKSAlIDc7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBr ID0gKChpbnQpeiArIDMpICUgNzsJLyogRGF5IG9mIHdlZWsgKi8KLSAgICAgICAgfQotCXMgPSB3 a2RheXNba107Ci0gICAgICAgIG9idWZbMF0gPSBzWzBdOwkJCS8qIERheSBvZiB3ZWVrICovCi0g ICAgICAgIG9idWZbMV0gPSBzWzFdOwotICAgICAgICBvYnVmWzJdID0gc1syXTsKLSAgICAgICAg b2J1ZlszXSA9IFNQOwkJCS8qIFNwYWNlICovCi0JYyA9IHBbNl07Ci0gICAgICAgIHBbNl0gPSBO VUw7Ci0JbW0gPSBhdG9pKCZpYnVmWzRdKTsJCS8qIE1vbnRoICovCi0JcyA9IG1vbmFtZVttbS0x XTsJCS8qIE5hbWUgb2YgbW9udGggKi8KLQlwWzZdID0gYzsKLQotICAgICAgICBvYnVmWzRdID0g c1swXTsJCQkvKiBNb250aCAqLwotICAgICAgICBvYnVmWzVdID0gc1sxXTsKLSAgICAgICAgb2J1 Zls2XSA9IHNbMl07Ci0gICAgICAgIG9idWZbN10gPSBTUDsJCQkvKiBTcGFjZSAqLwotCWlmIChw WzZdID09ICcwJykJCS8qIERhdGUgb2YgbW9udGggKi8KLQkgIG9idWZbOF0gPSBTUDsKLQllbHNl Ci0JICBvYnVmWzhdID0gcFs2XTsKLSAgICAgICAgb2J1Zls5XSA9IHBbN107Ci0JY2tzdHJuY3B5 KCZvYnVmWzEwXSwmcFs4XSwxMCk7CS8qIFRpbWUgKi8KLSAgICAgICAgb2J1ZlsxOV0gPSBTUDsJ CQkvKiBTcGFjZSAqLwotCW9idWZbMjBdID0gcFswXTsJCS8qIFllYXIgKi8KLQlvYnVmWzIxXSA9 IHBbMV07Ci0Jb2J1ZlsyMl0gPSBwWzJdOwotCW9idWZbMjNdID0gcFszXTsKLQlvYnVmWzI0XSA9 IE5VTDsKLQlyZXR1cm4oKGNoYXIgKilvYnVmKTsKLSAgICB9Ci0gICAgaWYgKG9wdCA9PSAzKSB7 Ci0JY2tzdHJuY3B5KG9idWYscCw0OCk7Ci0JLyogeXl5eW1tZGQgaGg6bW06c3MgKi8KLQkvKiAw MTIzNDU2Nzg5MDEyMzQ1NiAqLwotCS8qIHl5eXltbWRkaGhtbXNzICAgICovCi0Jb2J1Zls4XSA9 IG9idWZbOV07Ci0Jb2J1Zls5XSA9IG9idWZbMTBdOwotCW9idWZbMTBdID0gb2J1ZlsxMl07Ci0J b2J1ZlsxMV0gPSBvYnVmWzEzXTsKLQlvYnVmWzEyXSA9IG9idWZbMTVdOwotCW9idWZbMTNdID0g b2J1ZlsxNl07Ci0Jb2J1ZlsxNF0gPSBOVUw7Ci0JcmV0dXJuKChjaGFyICopb2J1Zik7Ci0gICAg fQotICAgIGNrc3RybmNweShpYnVmLHAsMzIpOwotICAgIGMgPSBpYnVmWzRdOwkJCS8qIFdhcm5p bmc6IG5vdCBZMTBLIGNvbXBsaWFudCAqLwotICAgIGlidWZbNF0gPSBOVUw7Ci0gICAgaWYgKCFy ZGlnaXRzKGlidWYpKQotICAgICAgcmV0dXJuKHApOwotICAgIHl5ID0gYXRvaShpYnVmKTsKLSAg ICBpZiAoeXkgPCAxIHx8IHl5ID4gOTk5OSkKLSAgICAgIHJldHVybihwKTsKLSAgICBpYnVmWzRd ID0gYzsKLSAgICBjID0gaWJ1Zls2XTsKLSAgICBpYnVmWzZdID0gTlVMOwotICAgIGlmICghcmRp Z2l0cygmaWJ1Zls0XSkpCi0gICAgICByZXR1cm4ocCk7Ci0gICAgbW0gPSBhdG9pKCZpYnVmWzRd KTsKLSAgICBpZiAobW0gPCAxIHx8IG1tID4gMTIpCi0gICAgICByZXR1cm4ocCk7Ci0gICAgaWJ1 Zls2XSA9IGM7Ci0gICAgYyA9IGlidWZbOF07Ci0gICAgaWJ1Zls4XSA9IE5VTDsKLSAgICBpZiAo IXJkaWdpdHMoJmlidWZbNl0pKQotICAgICAgcmV0dXJuKHApOwotICAgIGRkID0gYXRvaSgmaWJ1 Zls2XSk7Ci0gICAgaWJ1Zls4XSA9IGM7Ci0gICAgaWYgKGRkIDwgMSB8fCBtbSA+IDMxKQotICAg ICAgcmV0dXJuKHApOwotICAgIC8qIElHTk9SRSBXQVJOSU5HUyBBQk9VVCBtb25hbWVbXSBSRUZT IE9VVCBPRiBSQU5HRSAtIGl0J3MgcHJlY2hlY2tlZC4gKi8KLSAgICBzd2l0Y2ggKG9wdCkgewot ICAgICAgY2FzZSAxOgotCXNwcmludGYob2J1ZiwiJTA0ZC0lcy0lMDJkJXMiLHl5LG1vbmFtZVtt bS0xXSxkZCwmaWJ1Zls4XSk7Ci0JYnJlYWs7Ci0gICAgICBjYXNlIDI6Ci0Jc3ByaW50ZihvYnVm LCIlMDJkLSVzLSUwNGQlcyIsZGQsbW9uYW1lW21tLTFdLHl5LCZpYnVmWzhdKTsKLSAgICB9Ci0g ICAgcmV0dXJuKChjaGFyICopb2J1Zik7Ci19Ci0jZW5kaWYJLyogTk9TUEwgKi8KLQotLyogIEMg SyBDIFYgVCBEIEEgVCBFICAtLSAgTGlrZSBjbWN2dGRhdGUoKSwgYnV0IHJldHVybnMgc3RyaW5n LiAgKi8KLS8qICBGb3IgdXNlIGJ5IGRhdGUtcmVsYXRlZCBmdW5jdGlvbnMgKi8KLS8qICBTZWUg Y2FsbGluZyBjb252ZW50aW9ucyBmb3IgY21jdnRkYXRlKCkgYWJvdmUuICovCi0KLWNoYXIgKgot Y2tjdnRkYXRlKHAsdCkgY2hhciAqIHA7IGludCB0OyB7Ci0gICAgY2hhciAqIHM7Ci0gICAgaWYg KCEocyA9IGNtY3Z0ZGF0ZShwLHQpKSkKLSAgICAgIHJldHVybigiPEJBRF9EQVRFX09SX1RJTUU+ Iik7CS8qIFxmYmxhaCgpIGVycm9yIG1lc3NhZ2UgKi8KLSAgICBlbHNlCi0gICAgICByZXR1cm4o cyk7Ci19Ci0KLQotLyogIEMgTSBEIEEgVCBFICAtLSAgUGFyc2UgYSBkYXRlIGFuZC9vciB0aW1l ICAqLwotCi0vKgotICBBY2NlcHRzIGRhdGUgaW4gdmFyaW91cyBmb3JtYXRzLiAgSWYgdGhlIGRh dGUgaXMgcmVjb2duaXplZCwKLSAgdGhpcyByb3V0aW5lIHJldHVybnMgMCBvciBncmVhdGVyIHdp dGggdGhlIHJlc3VsdCBzdHJpbmcgcG9pbnRlcgotICBwb2ludGluZyB0byBhIGJ1ZmZlciBjb250 YWluaW5nIHRoZSBkYXRlIGFzICJ5eXl5bW1kZCBoaDptbTpzcyIuCi0qLwotaW50Ci1jbWRhdGUo eGhscCx4ZGVmLHhwLHF1aWV0LGYpIGNoYXIgKnhobHAsICp4ZGVmLCAqKnhwOyBpbnQgcXVpZXQ7 IHh4X3N0cnAgZjsgewotICAgIGludCB4LCByYzsKLSAgICBjaGFyICpvLCAqcywgKnpxLCAqZHA7 Ci0KLSAgICBjbWZsZGZsZ3MgPSAwOwotICAgIGlmICgheGhscCkgeGhscCA9ICIiOwotICAgIGlm ICgheGRlZikgeGRlZiA9ICIiOwotICAgIGlmICghKnhobHApIHhobHAgPSAiRGF0ZSBhbmQvb3Ig dGltZSI7Ci0gICAgKnhwID0gIiI7Ci0KLSAgICByYyA9IGNtZmxkKHhobHAseGRlZiwmcywoeHhf c3RycCkwKTsKLSAgICBkZWJ1ZyhGMTAxLCJjbWRhdGUgY21mbGQgcmMiLCIiLHJjKTsKLSAgICBp ZiAocmMgPCAwKQotICAgICAgcmV0dXJuKHJjKTsKLSAgICBkZWJ1ZyhGMTEwLCJjbWRhdGUgMSIs cywwKTsKLSAgICBvID0gczsJCQkJLyogUmVtZW1iZXIgd2hhdCB0aGV5IHR5cGVkLiAqLwotICAg IHMgPSBicnN0cmlwKHMpOwotICAgIGRlYnVnKEYxMTAsImNtZGF0ZSAyIixzLDApOwotCi0gICAg eCA9IDA7Ci0gICAgaWYgKGYpIHsJCQkJLyogSWYgYSBjb252ZXJzaW9uIGZ1bmN0aW9uIGlzIGdp dmVuICovCi0JY2hhciAqIHBwOwotCXpxID0gYXR4YnVmOwkJCS8qIGRvIHRoZSBjb252ZXJzaW9u LiAqLwotCXBwID0gYXR4YnVmOwotCWF0eG4gPSBDTURCTDsKLQlpZiAoKHggPSAoKmYpKHMsJnpx LCZhdHhuKSkgPCAwKSByZXR1cm4oLTIpOwotCWlmICghKnBwKQotCSAgcHAgPSB4ZGVmOwotCWlm IChzZXRhdG0ocHAsMCkgPCAwKSB7Ci0JICAgIGlmICghcXVpZXQpIHByaW50ZigiP0V2YWx1YXRl ZCBkYXRlIHRvbyBsb25nXG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0JcyA9IGF0eGJ1ZjsK LSAgICB9Ci0gICAgZHAgPSBjbWN2dGRhdGUocywxKTsKLSAgICBpZiAoIWRwKSB7Ci0JaWYgKCFx dWlldCkgcHJpbnRmKCI/JXNcbiIsY21kYXRlbXNnKTsKLQlyZXR1cm4oLTkpOwotICAgIH0KLSAg ICAqeHAgPSBkcDsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLSNpZmRlZiBDS19SRUNBTEwJCQkvKiBD b21tYW5kLXJlY2FsbCBmdW5jdGlvbnMgKi8KLQotLyogIEMgTSBSIEkgTiBJICAtLSAgSW5pdGlh bGl6ZSBvciBjaGFuZ2Ugc2l6ZSBvZiBjb21tYW5kIHJlY2FsbCBidWZmZXIgKi8KLQotaW50Ci1j bXJpbmkobikgaW50IG47IHsKLSAgICBpbnQgaTsKLSAgICBpZiAocmVjYWxsICYmIGluX3JlY2Fs bCkgewkJLyogRnJlZSBvbGQgc3RvcmFnZSwgaWYgYW55ICovCi0JZm9yIChpID0gMDsgaSA8IGNt X3JlY2FsbDsgaSsrKSB7Ci0JICAgIGlmIChyZWNhbGxbaV0pIHsKLQkJZnJlZShyZWNhbGxbaV0p OwotCQlyZWNhbGxbaV0gPSBOVUxMOwotCSAgICB9Ci0JfQotCWZyZWUocmVjYWxsKTsKLQlyZWNh bGwgPSBOVUxMOwotICAgIH0KLSAgICBjbV9yZWNhbGwgPSBuOwkJCS8qIFNldCBuZXcgc2l6ZSAq LwotICAgIHJsYXN0ID0gY3VycmVudCA9IC0xOwkJLyogSW5pdGlhbGl6ZSBwb2ludGVycyAqLwot ICAgIGlmIChuID4gMCkgewotCXJlY2FsbCA9IChjaGFyICoqKW1hbGxvYygoY21fcmVjYWxsICsg MSkgKiBzaXplb2YoY2hhciAqKSk7Ci0JaWYgKCFyZWNhbGwpCi0JICByZXR1cm4oMSk7Ci0JZm9y IChpID0gMDsgaSA8IGNtX3JlY2FsbDsgaSsrKSB7Ci0JICAgIHJlY2FsbFtpXSA9IE5VTEw7Ci0J fQotCWluX3JlY2FsbCA9IDE7CQkJLyogUmVjYWxsIGJ1ZmZlcnMgaW5pdCdkICovCi0gICAgfQot ICAgIHJldHVybigwKTsKLX0KLQotLyogIEMgTSBBIEQgRCBOIEUgWCBUICAtLSAgRm9yY2UgYWRk aXRpb24gb2YgbmV4dCBjb21tYW5kICovCi0KLVZPSUQKLWNtYWRkbmV4dCgpIHsKLSAgICBpZiAo b25fcmVjYWxsICYmIGluX3JlY2FsbCkgewkvKiBFdmVuIGlmIGl0IGRvZXNuJ3QgY29tZSAqLwot CWZvcmNlX2FkZCA9IDE7CQkJLyogZnJvbSB0aGUga2V5Ym9hcmQgKi8KLQluZXdjbWQgPSAxOwot CW5vX3JlY2FsbCA9IDA7Ci0gICAgfQotfQotCi0vKiAgQyBNIEcgRSBUIEMgTSBEICAtLSAgRmlu ZCBtb3N0IHJlY2VudCBtYXRjaGluZyBjb21tYW5kICAqLwotCi1jaGFyICoKLWNtZ2V0Y21kKHMp IGNoYXIgKiBzOyB7Ci0gICAgaW50IGk7Ci0gICAgZm9yIChpID0gY3VycmVudDsgaSA+PSAwOyBp LS0pIHsJLyogU2VhcmNoIGJhY2t3YXJkIHRocnUgaGlzdG9yeSBsaXN0ICovCi0JaWYgKCFyZWNh bGxbaV0pIGNvbnRpbnVlOwkvKiBUaGlzIG9uZSdzIG51bGwsIHNraXAgaXQgKi8KLQlpZiAoY2tt YXRjaChzLHJlY2FsbFtpXSwwLDEpKQkvKiBNYXRjaD8gKi8KLQkgIHJldHVybihyZWNhbGxbaV0p OwkJLyogWWVzLCByZXR1cm4gcG9pbnRlciAqLwotICAgIH0KLSAgICByZXR1cm4oTlVMTCk7CQkJ LyogTm8gbWF0Y2gsIHJldHVybiBOVUxMIHBvaW50ZXIgKi8KLX0KLSNlbmRpZiAvKiBDS19SRUNB TEwgKi8KLQotLyogIEEgRCBEIEMgTSBEICAtLSAgQWRkIGEgY29tbWFuZCB0byB0aGUgcmVjYWxs IGJ1ZmZlciAgKi8KLQotVk9JRAotYWRkY21kKHMpIGNoYXIgKiBzOyB7Ci0gICAgaW50IGxlbiA9 IDAsIG5xID0gMDsKLSAgICBjaGFyICogcDsKLSNpZmRlZiBDS0xFQVJOCi0gICAgZXh0ZXJuIGlu dCBsZWFybmluZzsKLSNlbmRpZiAvKiBDS0xFQVJOICovCi0KLSAgICBpZiAoeGNtZHNyYykJCQkv KiBPbmx5IGZvciBpbnRlcmFjdGl2ZSBjb21tYW5kcyAqLwotICAgICAgcmV0dXJuOwotCi0gICAg aWYgKCFuZXdjbWQpCQkJLyogVGhlIGNvbW1hbmQgaGFzIGJlZW4gaGVyZSBhbHJlYWR5ICovCi0g ICAgICByZXR1cm47CQkJCS8qIHNvIGlnbm9yZSBpdC4gKi8KLSAgICBuZXdjbWQgPSAwOwkJCQkv KiBJdCdzIG5ldyBidXQgZG8gdGhpcyBvbmx5IG9uY2UuICovCi0KLSAgICBpZiAoIXMpIHMgPSBj bWRidWY7Ci0gICAgaWYgKHNbMF0pCi0gICAgICBsZW4gPSBzdHJsZW4ocyk7Ci0KLSAgICBpZiAo bGVuIDwgMSkJCQkvKiBEb24ndCBzYXZlIGVtcHR5IGNvbW1hbmRzICovCi0gICAgICByZXR1cm47 Ci0KLSAgICBwID0gczsKLSAgICB3aGlsZSAoKnApIHsgaWYgKCpwKysgPT0gJz8nKSBucSsrOyB9 IC8qIENvdW50IHF1ZXN0aW9uIG1hcmtzICovCi0KLSNpZmRlZiBDS0xFQVJOCi0gICAgaWYgKGxl YXJuaW5nKQkJCS8qIElmIGEgbGVhcm5lZCBzY3JpcHQgaXMgYWN0aXZlICovCi0gICAgICBsZWFy bmNtZChzKTsJCQkvKiByZWNvcmQgdGhpcyBjb21tYW5kLiAqLwotI2VuZGlmIC8qIENLTEVBUk4g Ki8KLQotICAgIGRlYnVnKEYwMTAsIkNNRChQKSIscywwKTsJCS8qIE1heWJlIHJlY29yZCBpdCBp biB0aGUgZGVidWcgbG9nICovCi0KLSNpZmRlZiBDS1NZU0xPRwotICAgIGlmIChja3hsb2dnaW5n KSB7CQkJLyogTWF5YmUgcmVjb3JkIGl0IGluIHN5c2xvZyAqLwotCWlmIChja3hzeXNsb2cgPj0g U1lTTEdfQ1ggfHwgY2t4c3lzbG9nID49IFNZU0xHX0NNKQotCSAgY2tzeXNsb2coU1lTTEdfQ1gs IDEsICJjb21tYW5kIiwgcywgTlVMTCk7Ci0gICAgfQotI2VuZGlmIC8qIENLU1lTTE9HICovCi0K LSNpZmRlZiBDS19SRUNBTEwKLSAgICBsYXN0X3JlY2FsbCA9IDA7Ci0KLSAgICBpZiAob25fcmVj YWxsICYmCQkJLyogQ29tbWFuZCByZWNhbGwgaXMgb24/ICovCi0JY21fcmVjYWxsID4gMCAmJgkJ LyogUmVjYWxsIGJ1ZmZlciBzaXplIGlzID4gMD8gKi8KLQkhbm9fcmVjYWxsKSB7CQkJLyogTm90 IG5vdCBzYXZpbmcgdGhpcyBjb21tYW5kPyAqLwotCi0JaWYgKCFmb3JjZV9hZGQgJiYgcmxhc3Qg PiAtMSkJLyogSWYgcHJldmlvdXMgY29tbWFuZCB3YXMgaWRlbnRpY2FsICovCi0JICBpZiAoIXN0 cmNtcChzLHJlY2FsbFtybGFzdF0pKSAvKiBkb24ndCBhZGQgYW5vdGhlciBjb3B5ICovCi0JICAg IHJldHVybjsKLQotCWZvcmNlX2FkZCA9IDA7CQkJLyogUmVzZXQgbm93IGluIGNhc2UgaXQgd2Fz IHNldCAqLwotCi0gICAgICAgIGlmIChybGFzdCA+PSBjbV9yZWNhbGwgLSAxKSB7CS8qIFJlY2Fs bCBidWZmZXIgZnVsbD8gKi8KLQkgICAgaW50IGk7Ci0JICAgIGlmIChyZWNhbGxbMF0pIHsJCS8q IERpc2NhcmQgb2xkZXN0IGNvbW1hbmQgKi8KLQkJZnJlZShyZWNhbGxbMF0pOwotCQlyZWNhbGxb MF0gPSBOVUxMOwotCSAgICB9Ci0JICAgIGZvciAoaSA9IDA7IGkgPCBybGFzdDsgaSsrKSB7ICAv KiBUaGUgcmVzdCAqLwotCQlyZWNhbGxbaV0gPSByZWNhbGxbaSsxXTsgICAvKiBtb3ZlIGJhY2sg Ki8KLQkgICAgfQotCSAgICBybGFzdC0tOwkJCS8qIE5vdyB3ZSBoYXZlIG9uZSBsZXNzICovCi0J fQotICAgICAgICBybGFzdCsrOwkJCS8qIEluZGV4IG9mIGxhc3QgY29tbWFuZCBpbiBidWZmZXIg Ki8KLQljdXJyZW50ID0gcmxhc3Q7CQkvKiBBbHNvIG5vdyB0aGUgY3VycmVudCBjb21tYW5kICov Ci0JaWYgKGN1cnJlbnQgPj0gY21fcmVjYWxsKSB7CS8qIFNob3VsZG4ndCBoYXBwZW4gKi8KLQkg ICAgcHJpbnRmKCI/Q29tbWFuZCBoaXN0b3J5IGVycm9yXG4iKTsJLyogYnV0IGlmIGl0IGRvZXMg Ki8KLQkgICAgb25fcmVjYWxsID0gMDsJCSAgICAgICAgLyogdHVybiBvZmYgY29tbWFuZCBzYXZp bmcgKi8KLSNpZmRlZiBDT01NRU5UCi0JfSBlbHNlIGlmIChucSA+IDApIHsJCS8qIEhhdmUgYXQg bGVhc3Qgb25lIHF1ZXN0aW9uIG1hcmsgKi8KLQkgICAgcmVjYWxsW2N1cnJlbnRdID0gbWFsbG9j KGxlbitucSsxKTsKLQkgICAgaWYgKHJlY2FsbFtjdXJyZW50XSkgewotCQlwID0gcmVjYWxsW2N1 cnJlbnRdOwotCQl3aGlsZSAoKnMpIHsKLQkJICAgIGlmICgqcyA9PSAnPycpCi0JCSAgICAgICpw KysgPSAnXFwnOwotCQkgICAgKnArKyA9ICpzKys7Ci0JCX0KLQkJKnAgPSBOVUw7Ci0JICAgIH0K LSNlbmRpZiAvKiBDT01NRU5UICovCi0JfSBlbHNlIHsJCQkvKiBOb3JtYWwgY2FzZSwganVzdCBj b3B5ICovCi0JICAgIHJlY2FsbFtjdXJyZW50XSA9IG1hbGxvYyhsZW4rMSk7Ci0JICAgIGlmIChy ZWNhbGxbY3VycmVudF0pCi0JICAgICAgY2tzdHJuY3B5KHJlY2FsbFtjdXJyZW50XSxzLGxlbisx KTsKLQl9Ci0gICAgfQotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotfQotCi0KLSNpZmRlZiBDS19S RUNBTEwKLQotLyogQyBNIEggSSBTIFQgTyBSIFkgKi8KLQotVk9JRAotY21oaXN0b3J5KCkgewot ICAgIGludCBpLCBsYyA9IDE7Ci0gICAgZm9yIChpID0gMDsgaSA8PSBjdXJyZW50OyBpKyspIHsK LQlwcmludGYoIiAlc1xuIiwgcmVjYWxsW2ldKTsKLQlpZiAoKytsYyA+IChjbWRfcm93cyAtIDIp KSB7CS8qIFNjcmVlbiBmdWxsPyAqLwotCSAgICBpZiAoIWFza21vcmUoKSkJCS8qIERvIG1vcmUt cHJvbXB0aW5nLi4uICovCi0JICAgICAgYnJlYWs7Ci0JICAgIGVsc2UKLQkgICAgICBsYyA9IDA7 Ci0JfQotICAgIH0KLX0KLQotaW50Ci1zYXZoaXN0b3J5KHMsZGlzcCkgY2hhciAqczsgaW50IGRp c3A7IHsKLSAgICBGSUxFICogZnA7Ci0gICAgaW50IGk7Ci0KLSAgICBmcCA9IGZvcGVuKHMsIGRp c3AgPyAiYSIgOiAidyIpOwotICAgIGlmICghZnApIHsKLQlwZXJyb3Iocyk7Ci0JcmV0dXJuKDAp OwotICAgIH0KLSAgICBmb3IgKGkgPSAwOyBpIDw9IGN1cnJlbnQ7IGkrKykKLSAgICAgIGZwcmlu dGYoZnAsIiVzXG4iLCByZWNhbGxbaV0pOwotICAgIGZjbG9zZShmcCk7Ci0gICAgcmV0dXJuKDEp OwotfQotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotCi0jaWZkZWYgQ09NTUVOVAotLyogYXBwYXJl bnRseSBub3QgdXNlZCAqLwotaW50Ci1jbWdldGxjKHMpIGNoYXIgKiBzOyB7CQkJLyogR2V0IGxl YWRpbmcgY2hhciAqLwotICAgIGNoYXIgYzsKLSAgICB3aGlsZSAoKGMgPSAqcysrKSA8PSBTUCkg ewotCWlmICghYykKLQkgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4oYyk7Ci19Ci0jZW5kaWYg LyogQ09NTUVOVCAqLwotCi0KLS8qICBDIE0gQyBGIE0gIC0tICBQYXJzZSBjb21tYW5kIGNvbmZp cm1hdGlvbiAoZW5kIG9mIGxpbmUpICAqLwotCi0vKgotIFJldHVybnMKLSAgIC0yOiBVc2VyIHR5 cGVkIGFueXRoaW5nIGJ1dCB3aGl0ZXNwYWNlIG9yIG5ld2xpbmUKLSAgIC0xOiBSZXBhcnNlIG5l ZWRlZAotICAgIDA6IENvbmZpcm1hdGlvbiB3YXMgcmVjZWl2ZWQKLSovCi1pbnQKLWNtY2ZtKCkg ewotICAgIGludCB4LCB4YzsKLSAgICBkZWJ1ZyhGMTAxLCJjbWNmbTogY21mbGdzIiwiIixjbWZs Z3MpOwotICAgIGRlYnVnKEYxMTAsImNtY2ZtOiBhdG1idWYiLGF0bWJ1ZiwwKTsKLSAgICBpbndv cmQgPSB4YyA9IGNjID0gMDsKLQotICAgIHNldGF0bSgiIiwwKTsJCQkvKiAoUHJvYmFibHkgdW5u ZWNlc3NhcnkpICovCi0KLSAgICB3aGlsZSAoY21mbGdzICE9IDEpIHsKLSAgICAgICAgeCA9IGd0 d29yZCgwKTsKLSAgICAgICAgeGMgKz0gY2M7Ci0KLSAgICAgICAgc3dpdGNoICh4KSB7Ci0JICBj YXNlIC05OgotCSAgICBwcmludGYoIkNvbW1hbmQgb3IgZmllbGQgdG9vIGxvbmdcbiIpOwotCSAg Y2FzZSAtNDoJCQkvKiBFT0YgKi8KLQkgIGNhc2UgLTI6Ci0JICBjYXNlIC0xOgotCSAgICByZXR1 cm4oeCk7Ci0JICBjYXNlIDE6CQkJLyogRW5kIG9mIGxpbmUgKi8KLQkgICAgaWYgKHhjID4gMCkg ewotCQlpZiAoeGNtZmRiKSB7Ci0JCSAgICByZXR1cm4oLTYpOwotCQl9IGVsc2UgewotCQkgICAg cHJpbnRmKCI/Tm90IGNvbmZpcm1lZCAtICVzXG4iLGF0bWJ1Zik7Ci0JCSAgICByZXR1cm4oLTkp OwotCQl9Ci0JICAgIH0gZWxzZQotCSAgICAgIGJyZWFrOwkJCS8qIEZpbmlzaCB1cCBiZWxvdyAq LwotCSAgY2FzZSAyOgkJCS8qIEVTQyAqLwotCSAgICBpZiAoeGMgPT0gMCkgewotCQlibGVlcChC UF9XQVJOKTsKLQkJY29udGludWU7CQkvKiBvciBmYWxsIHRocnUuICovCi0JICAgIH0KLQkgIGNh c2UgMDoJCQkvKiBTcGFjZSAqLwotCSAgICBpZiAoeGMgPT0gMCkJCS8qIElmIG5vIGNoYXJzIHR5 cGVkLCBjb250aW51ZSwgKi8KLQkgICAgICBjb250aW51ZTsJCQkvKiBlbHNlIGZhbGwgdGhydS4g Ki8KLQkgICAgLyogZWxzZSBmYWxsIHRocnUuLi4gKi8KLQotCSAgY2FzZSAzOgkJCS8qIFF1ZXN0 aW9uIG1hcmsgKi8KLQkgICAgaWYgKHhjID4gMCkgewotCQlpZiAoeGNtZmRiKSB7Ci0JCSAgICBy ZXR1cm4oLTYpOwotCQl9IGVsc2UgewotCQkgICAgcHJpbnRmKCI/Tm90IGNvbmZpcm1lZCAtICVz XG4iLGF0bWJ1Zik7Ci0JCSAgICByZXR1cm4oLTkpOwotCQl9Ci0JICAgIH0KLQkgICAgcHJpbnRm KAotCSAgICAgICAiXG4gUHJlc3MgdGhlIFJldHVybiBvciBFbnRlciBrZXkgdG8gY29uZmlybSB0 aGUgY29tbWFuZFxuIik7Ci0JICAgIHByaW50ZigiJXMlcyIsY21wcm9tLGNtZGJ1Zik7Ci0JICAg IGZmbHVzaChzdGRvdXQpOwotCSAgICBjb250aW51ZTsKLQl9Ci0gICAgfQotICAgIGRlYm9rID0g MTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLQotLyogVGhlIGZvbGxvd2luZyBtYXRlcmlhbCBzdXBw b3J0cyBjaGFpbmVkIHBhcnNpbmcgZnVuY3Rpb25zLiAqLwotLyogU2VlIGNrdWNtZC5oIGZvciBG REIgYW5kIE9GREIgZGVmaW5pdGlvbnMuICovCi0KLXN0cnVjdCBPRkRCIGNtcmVzdWx0ID0gewkJ LyogVW5pdmVyc2FsIGNtZmRiIHJlc3VsdCBob2xkZXIgKi8KLSAgICBOVUxMLAkJCQkvKiBBZGRy ZXNzIG9mIHN1Y2NlZWRpbmcgRkRCIHN0cnVjdCAqLwotICAgIDAsCQkJCQkvKiBGdW5jdGlvbiBj b2RlICovCi0gICAgTlVMTCwJCQkJLyogU3RyaW5nIHJlc3VsdCAqLwotICAgIDAsCQkJCQkvKiBJ bnRlZ2VyIHJlc3VsdCAqLwotICAgIChDS19PRkZfVCkwCQkJCS8qIFdpZGUgcmVzdWx0ICovCi19 OwotCi1WT0lECi1jbWZkYmkocCxmYyxzMSxzMixzMyxuMSxuMixmLGssbnh0KQkvKiBJbml0aWFs aXplIGFuIEZEQiAqLwotICAgIHN0cnVjdCBGREIgKiBwOwotICAgIGludCBmYzsKLSAgICBjaGFy ICogczEsICogczIsICogczM7Ci0gICAgaW50IG4xLCBuMjsKLSAgICB4eF9zdHJwIGY7Ci0gICAg c3RydWN0IGtleXRhYiAqIGs7Ci0gICAgc3RydWN0IEZEQiAqIG54dDsgewotCi0gICAgcC0+ZmNv ZGUgPSBmYzsKLSAgICBwLT5obHBtc2cgPSBzMTsKLSAgICBwLT5kZmx0ID0gczI7Ci0gICAgcC0+ c2RhdGEgPSBzMzsKLSAgICBwLT5uZGF0YTEgPSBuMTsKLSAgICBwLT5uZGF0YTIgPSBuMjsKLSAg ICBwLT5zcGYgPSBmOwotICAgIHAtPmt3ZHRibCA9IGs7Ci0gICAgcC0+bnh0ZmRiID0gbnh0Owot fQotCi0vKiAgQyBNIEYgRCBCICAtLSAgUGFyc2UgYSBmaWVsZCB3aXRoIHNldmVyYWwgcG9zc2li bGUgZnVuY3Rpb25zICAqLwotCi1pbnQKLWNtZmRiKGZkYmluKSBzdHJ1Y3QgRkRCICogZmRiaW47 IHsKLSNpZm5kZWYgTk9TUEwKLSAgICBleHRlcm4gaW50IHhfaWZudW07ICAgICAgICAgICAgICAg ICAvKiBJRiBOVU1FUklDIC0gZGlzYWJsZXMgd2FybmluZ3MgKi8KLSNlbmRpZiAvKiBOT1NQTCAq LwotICAgIHN0cnVjdCBGREIgKiBpbiA9IGZkYmluOwotICAgIHN0cnVjdCBPRkRCICogb3V0ID0g JmNtcmVzdWx0OwotICAgIGludCB4ID0gMCwgbiwgcjsKLSAgICBDS19PRkZfVCB3ID0gKENLX09G Rl9UKTA7Ci0gICAgY2hhciAqcywgKnhwLCAqbSA9IE5VTEw7Ci0gICAgaW50IGVycmJpdHMgPSAw OwotCi0gICAgeHAgPSBicDsKLQotICAgIG91dC0+ZmNvZGUgPSAtMTsJCQkvKiBJbml0aWFsaXpl IG91dHB1dCBzdHJ1Y3QgKi8KLSAgICBvdXQtPmZkYmFkZHIgPSBOVUxMOwotICAgIG91dC0+c3Jl c3VsdCA9IE5VTEw7Ci0gICAgb3V0LT5ucmVzdWx0ID0gMDsKLS8qCi0gIEN1cnJlbnRseSB3ZSBt YWtlIG9uZSB0cmlwIHRocm91Z2ggdGhlIEZEQnMuICBTbyBpZiB0aGUgdXNlciB0eXBlcyBFc2Mg b3IKLSAgVGFiIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBmaWVsZCwgb25seSB0aGUgZmlyc3QgRkRC IGlzIGV4YW1pbmVkIGZvciBhCi0gIGRlZmF1bHQuICBJZiB0aGUgdXNlciB0eXBlcyA/LCBoZWxw IGlzIGdpdmVuIG9ubHkgZm9yIG9uZSBGREIuICBXZSBzaG91bGQKLSAgc2VhcmNoIHRocm91Z2gg dGhlIEZEQnMgZm9yIGFsbCBtYXRjaGluZyBwb3NzaWJpbGl0aWVzIC0tIGFuZCBpbiBwYXJ0aWN1 bGFyCi0gIGRpc3BsYXkgdGhlIHBlcnRpbmVudCBjb250ZXh0LXNlbnNpdGl2ZSBoZWxwIGZvciBl YWNoIGZ1bmN0aW9uLCByYXRoZXIgdGhhbgotICB0aGUgb25seSB0aGUgZmlyc3Qgb25lIHRoYXQg d29ya3MsIGFuZCB0aGVuIHJld2luZCB0aGUgRkRCIHBvaW50ZXIgc28gd2UKLSAgYXJlIG5vdCBs b2NrZWQgb3V0IG9mIHRoZSBlYXJsaWVyIG9uZXMuCi0qLwotICAgIGNtZmxkZmxncyA9IDA7Ci0g ICAgd2hpbGUgKDEpIHsJCQkJLyogTG9vcCB0aHJvdWdoIHRoZSBjaGFpbiBvZiBGREJzICovCi0J bm9tc2cgPSAxOwotCXhjbWZkYiA9IDE7Ci0JcyA9IE5VTEw7Ci0JbiA9IDA7Ci0JZGVidWcoRjEw MSwiY21mZGIgaW4tPmZjb2RlIiwiIixpbi0+ZmNvZGUpOwotCXN3aXRjaCAoaW4tPmZjb2RlKSB7 CQkvKiBDdXJyZW50IHBhcnNpbmcgZnVuY3Rpb24gY29kZSAqLwotCSAgY2FzZSBfQ01OVU06Ci0J ICAgIHIgPSBpbi0+bmRhdGExOwotCSAgICBpZiAociAhPSAxMCAmJiByICE9IDgpIHIgPSAxMDsK LSNpZm5kZWYgTk9TUEwKLSAgICAgICAgICAgIHhfaWZudW0gPSAxOyAgICAgICAgICAgICAgICAv KiBEaXNhYmxlcyB3YXJuaW5nIG1lc3NhZ2VzICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLQkgICAg eCA9IGNtbnVtKGluLT5obHBtc2csaW4tPmRmbHQsciwmbixpbi0+c3BmKTsKLSNpZm5kZWYgTk9T UEwKLSAgICAgICAgICAgIHhfaWZudW0gPSAwOwotI2VuZGlmIC8qIE5PU1BMICovCi0JICAgIGRl YnVnKEYxMDEsImNtZmRiIGNtbnVtIiwiIix4KTsKLQkgICAgaWYgKHggPCAwKSBlcnJiaXRzIHw9 IDE7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBfQ01OVVc6CQkJLyogV2lkZSBjbW51bSAtIDI0IERl YyAyMDA1ICovCi0JICAgIHIgPSBpbi0+bmRhdGExOwotCSAgICBpZiAociAhPSAxMCAmJiByICE9 IDgpIHIgPSAxMDsKLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgICAgIHhfaWZudW0gPSAxOyAgICAg ICAgICAgICAgICAvKiBEaXNhYmxlcyB3YXJuaW5nIG1lc3NhZ2VzICovCi0jZW5kaWYgLyogTk9T UEwgKi8KLQkgICAgeCA9IGNtbnVtdyhpbi0+aGxwbXNnLGluLT5kZmx0LHIsJncsaW4tPnNwZik7 Ci0jaWZuZGVmIE5PU1BMCi0gICAgICAgICAgICB4X2lmbnVtID0gMDsKLSNlbmRpZiAvKiBOT1NQ TCAqLwotCSAgICBkZWJ1ZyhGMTAxLCJjbWZkYiBjbW51bXciLCIiLHcpOwotCSAgICBpZiAoeCA8 IDApIGVycmJpdHMgfD0gMTsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIF9DTU9GSToKLQkgICAgeCA9 IGNtb2ZpKGluLT5obHBtc2csaW4tPmRmbHQsJnMsaW4tPnNwZik7Ci0JICAgIGRlYnVnKEYxMDEs ImNtZmRiIGNtb2ZpIiwiIix4KTsKLQkgICAgaWYgKHggPCAwKSBlcnJiaXRzIHw9IDI7Ci0JICAg IGJyZWFrOwotCSAgY2FzZSBfQ01JRkk6Ci0JICAgIHggPSBjbWlmaTIoaW4tPmhscG1zZywKLQkJ ICAgICAgIGluLT5kZmx0LAotCQkgICAgICAgJnMsCi0JCSAgICAgICAmbiwKLQkJICAgICAgIGlu LT5uZGF0YTEsCi0JCSAgICAgICBpbi0+c2RhdGEsCi0JCSAgICAgICBpbi0+c3BmLAotCQkgICAg ICAgaW4tPm5kYXRhMgotCQkgICAgICAgKTsKLQkgICAgZGVidWcoRjEwMSwiY21mZGIgY21pZmky IHgiLCIiLHgpOwotCSAgICBkZWJ1ZyhGMTAxLCJjbWZkYiBjbWlmaTIgbiIsIiIsbik7Ci0JICAg IGlmICh4IDwgMCkgZXJyYml0cyB8PSA0OwotCSAgICBicmVhazsKLQkgIGNhc2UgX0NNRkxEOgot CSAgICBjbWZsZGZsZ3MgPSBpbi0+bmRhdGExOwotCSAgICB4ID0gY21mbGQoaW4tPmhscG1zZyxp bi0+ZGZsdCwmcyxpbi0+c3BmKTsKLQkgICAgZGVidWcoRjEwMSwiY21mZGIgY21mbGQiLCIiLHgp OwotCSAgICBpZiAoeCA8IDApIGVycmJpdHMgfD0gODsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIF9D TVRYVDoKLQkgICAgeCA9IGNtdHh0KGluLT5obHBtc2csaW4tPmRmbHQsJnMsaW4tPnNwZik7Ci0J ICAgIGRlYnVnKEYxMDEsImNtZmRiIGNtdHh0IiwiIix4KTsKLQkgICAgaWYgKHggPCAwKSBlcnJi aXRzIHw9IDE2OwotCSAgICBicmVhazsKLQkgIGNhc2UgX0NNS0VZOgotCSAgICB4ID0gY21rZXky KGluLT5rd2R0YmwsCi0JCSAgICAgICBpbi0+bmRhdGExLAotCQkgICAgICAgaW4tPmhscG1zZyxp bi0+ZGZsdCxpbi0+c2RhdGEsaW4tPnNwZixpbi0+bmRhdGEyKTsKLQkgICAgZGVidWcoRjEwMSwi Y21mZGIgY21rZXkiLCIiLHgpOwotCSAgICBpZiAoeCA8IDApIGVycmJpdHMgfD0gKChpbi0+bmRh dGEyICYgNCkgPyAzMiA6IDY0KTsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIF9DTUNGTToKLQkgICAg eCA9IGNtY2ZtKCk7Ci0JICAgIGRlYnVnKEYxMDEsImNtZmRiIGNtY2ZtIiwiIix4KTsKLQkgICAg aWYgKHggPCAwKSBlcnJiaXRzIHw9IDEyODsKLQkgICAgYnJlYWs7Ci0JICBkZWZhdWx0OgotCSAg ICBkZWJ1ZyhGMTAxLCJjbWZkYiAtIHVuZXhwZWN0ZWQgZnVuY3Rpb24gY29kZSIsIiIsaW4tPmZj b2RlKTsKLQkgICAgcHJpbnRmKCI/Y21mZGIgLSB1bmV4cGVjdGVkIGZ1bmN0aW9uIGNvZGU6ICVk XG4iLGluLT5mY29kZSk7Ci0JfQotCWRlYnVnKEYxMDEsImNtZmRiIHgiLCIiLHgpOwotCWRlYnVn KEYxMDEsImNtZmRiIGNtZmxncyIsIiIsY21mbGdzKTsKLQlkZWJ1ZyhGMTAxLCJjbWZkYiBjcmZs YWciLCIiLGNyZmxhZyk7Ci0JZGVidWcoRjEwMSwiY21mZGIgcW1mbGFnIiwiIixxbWZsYWcpOwot CWRlYnVnKEYxMDEsImNtZmRiIGVzZmxhZyIsIiIsZXNmbGFnKTsKLQotCWlmICh4ID4gLTEpIHsJ CQkvKiBTdWNjZXNzICovCi0JICAgIG91dC0+ZmNvZGUgPSBpbi0+ZmNvZGU7CS8qIEZpbGwgaW4g b3V0cHV0IHN0cnVjdCAqLwotCSAgICBvdXQtPmZkYmFkZHIgPSBpbjsKLQkgICAgb3V0LT5zcmVz dWx0ID0gczsKLQkgICAgb3V0LT5ucmVzdWx0ID0gKGluLT5mY29kZSA9PSBfQ01LRVkpID8geCA6 IG47Ci0JICAgIG91dC0+d3Jlc3VsdCA9IHc7Ci0JICAgIG91dC0+a2ZsYWdzID0gKGluLT5mY29k ZSA9PSBfQ01LRVkpID8gY21rd2ZsZ3MgOiAwOwotCSAgICBkZWJ1ZyhGMTExLCJjbWZkYiBvdXQt Pm5yZXN1bHQiLG91dC0+c3Jlc3VsdCxvdXQtPm5yZXN1bHQpOwotCSAgICBkZWJ1ZyhGMTExLCJj bWZkYiBvdXQtPndyZXN1bHQiLG91dC0+c3Jlc3VsdCxvdXQtPndyZXN1bHQpOwotCSAgICBub21z ZyA9IDA7Ci0JICAgIHhjbWZkYiA9IDA7Ci0JICAgIC8qIGRlYnVnKEYxMTEsImNtZmRiIGNtZGJ1 ZiAmIGNyZmxhZyIsY21kYnVmLGNyZmxhZyk7ICovCi0JICAgIGlmIChjcmZsYWcpIHsKLQkJY21m bGdzID0gMTsKLQkgICAgfQotCSAgICByZXR1cm4oeCk7CQkJLyogYW5kIHJldHVybiAqLwotCX0K LQlpbiA9IGluLT5ueHRmZGI7CQkvKiBGYWlsZWQsIGdldCBuZXh0IHBhcnNpbmcgZnVuY3Rpb24g Ki8KLQlub21zZyA9IDA7Ci0JeGNtZmRiID0gMDsKLQlpZiAoIWluKSB7CQkJLyogTm8gbW9yZSAq LwotCSAgICBkZWJ1ZyhGMTAxLCJjbWZkYiBmYWlsdXJlIHgiLCIiLHgpOwotCSAgICBkZWJ1ZyhG MTAxLCJjbWZkYiBmYWlsdXJlIGVycmJpdHMiLCIiLGVycmJpdHMpOwotCSAgICBpZiAoeCA9PSAt NikKLQkgICAgICB4ID0gLTk7Ci0JICAgIGlmICh4ID09IC05KSB7Ci0jaWZkZWYgQ0tST09UCi0J CWlmIChja3Jvb3RlcnIpCi0JCSAgbSA9ICJPZmYgTGltaXRzIjsKLQkJZWxzZQotI2VuZGlmIC8q IENLUk9PVCAqLwotCQkvKiBNYWtlIGluZm9ybWF0aXZlIG1lc3NhZ2VzIGZvciBhIGZldyBjb21t b24gY2FzZXMgKi8KLQkJc3dpdGNoIChlcnJiaXRzKSB7Ci0JCSAgY2FzZSA0KzMyOiBtID0gIkRv ZXMgbm90IG1hdGNoIGZpbGVuYW1lIG9yIHN3aXRjaCI7IGJyZWFrOwotCQkgIGNhc2UgNCs2NDog bSA9ICJEb2VzIG5vdCBtYXRjaCBmaWxlbmFtZSBvciBrZXl3b3JkIjsgYnJlYWs7Ci0JCSAgY2Fz ZSAxKzMyOiBtID0gIk5vdCBhIG51bWJlciBvciB2YWxpZCBrZXl3b3JkIjsgYnJlYWs7Ci0JCSAg Y2FzZSAxKzY0OiBtID0gIk5vdCBhIG51bWJlciBvciB2YWxpZCBzd2l0Y2giOyBicmVhazsKLQkJ ICBkZWZhdWx0OiBtID0gIk5vdCB2YWxpZCBpbiB0aGlzIHBvc2l0aW9uIjsKLQkJfQotCQlwcmlu dGYoIj8lczogXCIlc1wiXG4iLG0sIGF0bWJ1Zik7Ci0JICAgIH0KLQkgICAgcmV0dXJuKHgpOwot CX0KLQlpZiAoeCAhPSAtMiAmJiB4ICE9IC02ICYmIHggIT0gLTkgJiYgeCAhPSAtMykgLyogRWRp dGluZyBvciBzb21lc3VjaCAqLwotCSAgcmV0dXJuKHgpOwkJCS8qIEdvIGJhY2sgYW5kIHJlcGFy c2UgKi8KLQlwcCA9IG5wID0gYnAgPSB4cDsJCS8qIEJhY2sgdXAgcG9pbnRlcnMgKi8KLQljbWZs Z3MgPSAtMTsJCQkvKiBGb3JjZSBhIHJlcGFyc2UgKi8KLQotI2lmbmRlZiBOT1NQTAotCWlmICgh YXNrZmxhZykgewkJCS8qIElmIG5vdCBleGVjdXRpbmcgQVNLLWNsYXNzIGNtZC4uLiAqLwotI2Vu ZGlmIC8qIE5PU1BMICovCi0JICAgIGlmIChjcmZsYWcpIHsJCS8qIElmIENSIHdhcyB0eXBlZCwg cHV0IGl0IGJhY2sgKi8KLQkJcHVzaGMgPSBMRjsJCS8qIEJ1dCBhcyBhIGxpbmVmZWVkICovCi0J ICAgIH0gZWxzZSBpZiAocW1mbGFnKSB7CS8qIERpdHRvIGZvciBRdWVzdGlvbiBtYXJrICovCi0J CXB1c2hjID0gJz8nOwotCSAgICB9IGVsc2UgaWYgKGVzZmxhZykgewkvKiBhbmQgRXNjYXBlIG9y IFRhYiAqLwotCQlwdXNoYyA9IEVTQzsKLQkgICAgfQotI2lmbmRlZiBOT1NQTAotCX0KLSNlbmRp ZiAvKiBOT1NQTCAqLwotICAgIH0KLX0KLQotLyoKLSAgIEMgTSBJIE8gRiBJICAtLSAgUGFyc2Ug YW4gaW5wdXQgZmlsZSBPUiB0aGUgbmFtZSBvZiBhIG5vbmV4aXN0ZW50IGZpbGUuCi0KLSAgIFJl cGxhY2VzIHRoZSBjb21tZW50ZWQtb3V0IHZlcnNpb24gYWJvdmUuICBUaGlzIG9uZSBhY3R1YWxs eSB3b3JrcyBhbmQKLSAgIGhhcyB0aGUgZXhwZWN0ZWQgc3RyYWlnaHRmb3J3YXJkIGludGVyZmFj ZS4KLSovCi1pbnQKLWNtaW9maSh4aGxwLHhkZWYseHAsd2lsZCxmKSBjaGFyICp4aGxwLCAqeGRl ZiwgKip4cDsgaW50ICp3aWxkOyB4eF9zdHJwIGY7IHsKLSAgICBpbnQgeDsKLSAgICBzdHJ1Y3Qg RkRCIGYxLCBmMjsKLSAgICBjbWZkYmkoJmYxLF9DTUlGSSx4aGxwLHhkZWYsIiIsMCwwLGYsTlVM TCwmZjIpOwotICAgIGNtZmRiaSgmZjIsX0NNT0ZJLCIiLCIiLCIiLDAsMCxmLE5VTEwsTlVMTCk7 Ci0gICAgeCA9IGNtZmRiKCZmMSk7Ci0gICAgaWYgKHggPCAwKSB7Ci0JaWYgKHggPT0gLTMpIHsK LQkgICAgeCA9IC05OwotCSAgICBwcmludGYoIj9GaWxlbmFtZSByZXF1aXJlZFxuIik7Ci0JfQot ICAgIH0KLSAgICAqd2lsZCA9IGNtcmVzdWx0Lm5yZXN1bHQ7Ci0gICAgKnhwID0gY21yZXN1bHQu c3Jlc3VsdDsKLSAgICByZXR1cm4oeCk7Ci19Ci0KLS8qICBHIFQgVyBPIFIgRCAgLS0gIEdldHMg YSAid29yZCIgZnJvbSB0aGUgY29tbWFuZCBpbnB1dCBzdHJlYW0gICovCi0KLS8qCi1Vc2FnZTog cmV0Y29kZSA9IGd0d29yZChicmspOwotICBicmsgPSAwIGZvciBub3JtYWwgd29yZCBicmVha3Mg KHNwYWNlLCBDUiwgRXNjLCA/KQotICBicmsgPSAxIHRvIGFkZCAnOicgYW5kICc9JyAoZm9yIHBh cnNpbmcgc3dpdGNoZXMpLiAgVGhlc2UgY2hhcmFjdGVycwotICAgICAgICBhY3QgYXMgYnJlYWsg Y2hhcmFjdGVycyBvbmx5IGlmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGZpZWxkCi0gICAg ICAgIGlzIHNsYXNoICgnLycpLCBpLmUuIHN3aXRjaCBpbnRyb2R1Y2VyLgotICBicmsgPSA0IHRv IG5vdCBzdHJpcCBjb21tZW50cyAodXNlZCBvbmx5IGZvciAiaGVscCAjIiBhbmQgImhlbHAgOyIp LgotCi1SZXR1cm5zOgotLTEwIFRpbWVsaW1pdCBzZXQgYW5kIHRpbWVkIG91dAotIC05IGlmIGlu cHV0IHdhcyB0b28gbG9uZwotIC00IGlmIGVuZCBvZiBmaWxlIChlLmcuIHBpcGUgYnJva2VuKQot IC0zIGlmIG51bGwgZmllbGQKLSAtMiBpZiBjb21tYW5kIGJ1ZmZlciBvdmVyZmxvd3MKLSAtMSBp ZiB1c2VyIGRpZCBzb21lIGRlbGV0aW5nCi0gIDAgaWYgd29yZCB0ZXJtaW5hdGVzIHdpdGggU1Ag b3IgdGFiCi0gIDEgaWYgLi4uIENSCi0gIDIgaWYgLi4uIEVTQwotICAzIGlmIC4uLiA/IChxdWVz dGlvbiBtYXJrKQotICA0IGlmIC4uLiA6IG9yID0gYW5kIGNhbGxlZCB3aXRoIGJyayAhPSAwCi0K LVdpdGg6Ci0gIHBwIHBvaW50aW5nIHRvIGJlZ2lubmluZyBvZiB3b3JkIGluIGJ1ZmZlcgotICBi cCBwb2ludGluZyB0byBhZnRlciBjdXJyZW50IHBvc2l0aW9uCi0gIGF0bWJ1ZiBjb250YWluaW5n IGEgY29weSBvZiB0aGUgd29yZAotICBjYyBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgY2hhcmFj dGVycyBpbiB0aGUgd29yZCBjb3BpZWQgdG8gYXRtYnVmCi0qLwotCi1pbnQKLXVuZ3dvcmQoKSB7 CQkJCS8qIFVuZ2V0IGEgd29yZCAqLwotICAgIGRlYnVnKEYxMDEsInVuZ3dvcmQgY21mbGdzIiwi IixjbWZsZ3MpOwotICAgIGlmICh1bmd3KSByZXR1cm4oMCk7Ci0gICAgY21mc2F2ID0gY21mbGdz OwotICAgIHVuZ3cgPSAxOwotICAgIGNtZmxncyA9IDA7Ci0gICAgcmV0dXJuKDApOwotfQotCi0v KiBVbi11bi1nZXQgd29yZC4gIFVuZG8gdW5nd29yZCgpIGlmIGl0IGhhcyBiZWVuIGRvbmUuICov Ci0KLVZPSUQKLXVudW5ndygpIHsKLSAgICBkZWJ1ZyhGMDEwLCJ1bnVuZ3cgYXRtYnVmIixhdG1i dWYsMCk7Ci0gICAgaWYgKHVuZ3cpIHsKLQl1bmd3ID0gMDsKLQljbWZsZ3MgPSBjbWZzYXY7Ci0J YXRtYnVmWzBdID0gTlVMOwotICAgIH0KLX0KLQotc3RhdGljIGludAotZ3R3b3JkKGJyaykgaW50 IGJyazsgewotICAgIGludCBjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEN1cnJl bnQgY2hhciAqLwotICAgIGludCBxdW90ZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIEZs YWcgZm9yIHF1b3RlIGNoYXJhY3RlciAqLwotICAgIGludCBlY2hvZiA9IDA7ICAgICAgICAgICAg ICAgICAgICAgIC8qIEZsYWcgZm9yIHdoZXRoZXIgdG8gZWNobyAqLwotICAgIGludCBjb21tZW50 ID0gMDsJCQkvKiBGbGFnIGZvciBpbiBjb21tZW50ICovCi0gICAgY2hhciAqY3AgPSBOVUxMOwkJ CS8qIENvbW1lbnQgcG9pbnRlciAqLwotICAgIGludCBlaW50ciA9IDA7CQkJLyogRmxhZyBmb3Ig c3lzY2FsbCBpbnRlcnJ1cHRlZCAqLwotICAgIGludCBicmFjZWx2bCA9IDA7CQkJLyogbmVzdGVk IGJyYWNlIGNvdW50ZXIgW2pyc10gKi8KLSAgICBpbnQgaXNjb250ZCA9IDA7CQkJLyogRmxhZyBm b3IgY29udGludWF0aW9uICovCi0gICAgaW50IHJlYWx0dHkgPSAwOwkJCS8qIFN0ZGluIGlzIHJl YWxseSBhIHR0eSAqLwotICAgIGNoYXIgZmlyc3RuYiAgPSBOVUw7Ci0gICAgY2hhciBsYXN0Y2hh ciA9IE5VTDsKLSAgICBjaGFyIHByZXZjaGFyID0gTlVMOwotICAgIGNoYXIgbGJyYWNlLCByYnJh Y2U7Ci0gICAgaW50IGRxID0gMDsJCQkJLyogRG91YmxlcXVvdGUgZmxhZyAqLwotICAgIGludCBk cW4gPSAwOwkJCS8qIGFuZCBjb3VudCAqLwotICAgIGludCBpc2VzYyA9IDA7Ci0KLSNpZmRlZiBS VFUKLSAgICBleHRlcm4gaW50IHJ0dV9idWc7Ci0jZW5kaWYgLyogUlRVICovCi0KLSNpZmRlZiBJ S1NECi0gICAgZXh0ZXJuIGludCBpbnNlcnZlcjsKLSNlbmRpZiAvKiBJS1NEICovCi0gICAgZXh0 ZXJuIGludCBrc3RhcnRhY3RpdmU7Ci0KLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgIGV4dGVybiBp bnQgdGVybXR5cGU7ICAgICAgICAgICAgICAgIC8qIERHIHRlcm1pbmFsIHR5cGUgZmxhZyAqLwot ICAgIGV4dGVybiBpbnQgY29uX3JlYWRzX210OyAgICAgICAgICAgIC8qIENvbnNvbGUgcmVhZCBh c3luY2ggaXMgYWN0aXZlICovCi0gICAgaWYgKGNvbl9yZWFkc19tdCkgY29ubm9pX210KCk7ICAg ICAgLyogVGFzayB3b3VsZCBpbnRlcmZlcmUgdy9jb25zIHJlYWQgKi8KLSNlbmRpZiAvKiBkYXRh Z2VuZXJhbCAqLwotCi0jaWZkZWYgQ09NTUVOVAotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxv ZykgewotCWRlYnVnKEYxMDEsImd0d29yZCBicmsiLCIiLGJyayk7Ci0JZGVidWcoRjEwMSwiZ3R3 b3JkIGNtZmxkZmxncyIsIiIsY21mbGRmbGdzKTsKLQlkZWJ1ZyhGMTAxLCJndHdvcmQgc3dhcmci LCIiLHN3YXJnKTsKLQlkZWJ1ZyhGMTAxLCJndHdvcmQgZHB4IiwiIixkcHgpOwotCWRlYnVnKEYx MDEsImd0d29yZCBlY2hvZiIsIiIsZWNob2YpOwotI2lmbmRlZiBOT1NQTAotCWRlYnVnKEYxMDEs Imd0d29yZCBhc2tmbGFnIiwiIixhc2tmbGFnKTsKLQlkZWJ1ZyhGMTAxLCJndHdvcmQgdGltZWxp bWl0IiwiIix0aW1lbGltaXQpOwotI2lmbmRlZiBOT0xPQ0FMCi0jaWZuZGVmIE5PWEZFUgotI2lm ZGVmIENLX0FVVE9ETAotCWRlYnVnKEYxMDEsImd0d29yZCBjbWRhZGwiLCIiLGNtZGFkbCk7Ci0j ZW5kaWYgLyogQ0tfQVVUT0RMICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0jZW5kaWYgLyogTk9M T0NBTCAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0j ZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgcmVhbHR0eSA9IGlzX2FfdHR5KDApOwkJLyogU3Rk aW4gaXMgcmVhbGx5IGEgdHR5PyAqLwotCi0gICAgaWYgKGNtZmxkZmxncyAmIDEpIHsKLQlsYnJh Y2UgPSAnKCc7Ci0JcmJyYWNlID0gJyknOwotICAgIH0gZWxzZSB7Ci0JbGJyYWNlID0gJ3snOwot CXJicmFjZSA9ICd9JzsKLSAgICB9Ci0gICAgY3JmbGFnID0gMDsKLSAgICBxbWZsYWcgPSAwOwot ICAgIGVzZmxhZyA9IDA7Ci0KLSAgICBpZiAoc3dhcmcpIHsJCQkvKiBObyBsZWFkaW5nIHNwYWNl IGZvciBzd2l0Y2ggYXJncyAqLwotCWlud29yZCA9IDE7Ci0Jc3dhcmcgPSAwOwotICAgIH0KLSAg ICBpZiAodW5ndykgewkJCQkvKiBIYXZlIGEgd29yZCBzYXZlZD8gKi8KLSNpZmRlZiBNX1VOR1cK LQkvKiBFeHBlcmltZW50YWwgY29kZSB0byBhbGxvdyB1bmdldHRpbmcgbXVsdGlwbGUgd29yZHMu ICovCi0JLyogU2VlIGNvbW1lbnRzIGluIGNrbWtleTIoKSBhYm92ZS4gKi8KLQlpbnQgeDsKLQlp ZiAobnAgPiBwcCkgcHAgPSBucDsKLQl3aGlsZSAoKnBwID09IFNQKSBwcCsrOwotCWlmICghKnBw KSB7Ci0JICAgIHVuZ3cgPSAwOwotCSAgICBjbWZsZ3MgPSBjbWZzYXY7Ci0JfSBlbHNlIHsKLQkg ICAgaWYgKCh4ID0gc2V0YXRtKHBwLDIpKSA8IDApIHsKLQkJcHJpbnRmKCI/U2F2ZWQgd29yZCB0 b28gbG9uZ1xuIik7Ci0JCXJldHVybigtOSk7Ci0JICAgIH0KLQkgICAgaWYgKHBwW3hdID49IFNQ KSB7Ci0JCWNoYXIgKnAyOwotCQlwMiA9IHBwOwotCQlwMiArPSB4OwotCQl3aGlsZSAoKnAyID09 IFNQKSBwMisrOwotCQlpZiAoKnAyKSB7Ci0JCSAgICBucCA9IHAyOwotCQkgICAgdW5nd29yZCgp OwotCQl9Ci0JICAgIH0gZWxzZSB7Ci0JCXVuZ3cgPSAwOwotCQljbWZsZ3MgPSBjbWZzYXY7Ci0J CWRlYnVnKEYwMTAsImd0d29yZCB1bmd3IHJldHVybiBhdG1idWYiLGF0bWJ1ZiwwKTsKLQkgICAg fQotCX0KLQlyZXR1cm4oY21mbGdzKTsKLSNlbHNlCi0JLyoKLQkgICBZb3Ugd291bGQgdGhpbmsg dGhlIGZvbGxvd2luZyBzaG91bGQgYmU6Ci0gICAgICAgICAgICAgd2hpbGUgKCpwcCA9PSBTUCkg cHArKzsKLSAgICAgICAgICAgYnV0IHlvdSB3b3VsZCBiZSB3cm9uZyAtLSBtYWtpbmcgdGhpcyBj aGFuZ2UgYnJlYWtzIEdPVE8uCi0gICAgICAgICovCi0Jd2hpbGUgKCpwcCsrID09IFNQKSA7Ci0J aWYgKHNldGF0bShwcCwyKSA8IDApIHsKLQkgICAgcHJpbnRmKCI/U2F2ZWQgd29yZCB0b28gbG9u Z1xuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotCXVuZ3cgPSAwOwotCWNtZmxncyA9IGNtZnNh djsKLQlkZWJ1ZyhGMDEwLCJndHdvcmQgdW5ndyByZXR1cm4gYXRtYnVmIixhdG1idWYsMCk7Ci0J cmV0dXJuKGNtZmxncyk7Ci0jZW5kaWYgLyogTV9VTkdXICovCi0gICAgfQotICAgIHBwID0gbnA7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IG9mIGN1cnJlbnQgZmllbGQgKi8K LQotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsKLQlkZWJ1 ZyhGMTEwLCJndHdvcmQgY21kYnVmIixjbWRidWYsMCk7Ci0JZGVidWcoRjExMCwiZ3R3b3JkIGJw IixicCwwKTsKLQlkZWJ1ZyhGMTEwLCJndHdvcmQgcHAiLHBwLDApOwotICAgIH0KLSNlbmRpZiAv KiBERUJVRyAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB7Ci0JLyogSWYgd2UgYXJlIHJl cGFyc2luZyB3ZSBoYXZlIHRvIHJlY291bnQgYW55IGJyYWNlcyBvciBkb3VibGVxdW90ZXMgKi8K LQljaGFyICogcCA9IHBwOwotCWNoYXIgYzsKLQlpZiAoKnAgPT0gJyInKQotCSAgZHErKzsKLQl3 aGlsZSAoKGMgPSAqcCsrKSkKLQkgIGlmIChjID09IGxicmFjZSkKLQkgICAgYnJhY2VsdmwrKzsK LQkgIGVsc2UgaWYgKGMgPT0gcmJyYWNlKQotCSAgICBicmFjZWx2bC0tOwotCSAgZWxzZSBpZiAo ZHEgJiYgYyA9PSAnIicpCi0JICAgIGRxbisrOwotICAgIH0KLSAgICB3aGlsZSAoYnAgPCBjbWRi dWYrQ01EQkwpIHsgICAgICAgICAvKiBCaWcgZ2V0LWEtY2hhcmFjdGVyIGxvb3AgKi8KLQllY2hv ZiA9IDA7CQkJLyogQXNzdW1lIHdlIGRvbid0IGVjaG8gYmVjYXVzZSAqLwotCWNoc3JjID0gMDsJ CQkvKiBjaGFyYWN0ZXIgY2FtZSBmcm9tIHJlcGFyc2UgYnVmLiAqLwotI2lmZGVmIEJTX0RJUlNF UAotQ01ESVJQQVJTRToKLSNlbmRpZiAvKiBCU19ESVJTRVAgKi8KLQotCWMgPSAqYnA7Ci0gICAg ICAgIGlmICghYykgewkJCS8qIElmIG5vIGNoYXIgd2FpdGluZyBpbiByZXBhcnNlIGJ1ZiAqLwot CSAgICBpZiAoKGRweAotI2lmbmRlZiBOT1NQTAotCQkgfHwgZWNob3N0YXJzCi0jZW5kaWYgLyog Tk9TUEwgKi8KLQkJICkgJiYgKCFwdXNoYwotI2lmbmRlZiBOT1NQTAotCQkJfHwgYXNrZmxhZwot I2VuZGlmIC8qIE5PU1BMICovCi0JCQkpKQkJLyogR2V0IGZyb20gdHR5LCBzZXQgZWNobyBmbGFn ICovCi0JICAgICAgZWNob2YgPSAxOwotCSAgICBjID0gY21kZ2V0Yyh0aW1lbGltaXQpOwkvKiBS ZWFkIGEgY29tbWFuZCBjaGFyYWN0ZXIuICovCi0jaWZkZWYgREVCVUcKLQkgICAgZGVidWcoRjEw MSwiZ3R3b3JkIGMiLCIiLGMpOwotI2VuZGlmIC8qIERFQlVHICovCi0KLQkgICAgaWYgKHRpbWVs aW1pdCAmJiBjIDwgLTEpIHsJLyogVGltZWQgb3V0ICovCi0JCXJldHVybigtMTApOwotCSAgICB9 Ci0KLSNpZm5kZWYgTk9YRkVSCi0vKgotICBUaGUgZm9sbG93aW5nIGFsbG93cyBwYWNrZXQgcmVj b2duaXRpb24gaW4gdGhlIGNvbW1hbmQgcGFyc2VyLgotICBQcmVzZW50bHkgaXQgd29ya3Mgb25s eSBmb3IgS2VybWl0IHBhY2tldHMsIGFuZCBpZiBvdXIgY3VycmVudCBwcm90b2NvbAotICBoYXBw ZW5zIHRvIGJlIGFueXRoaW5nIGJlc2lkZXMgS2VybWl0LCB3ZSBzaW1wbHkgZm9yY2UgaXQgdG8g S2VybWl0LgotICBXZSBkb24ndCB1c2UgdGhlIEFQQyBtZWNoYW5pc20gaGVyZSBmb3IgbWVjaGFu aWNhbCByZWFzb25zLCBhbmQgYWxzbwotICBiZWNhdXNlIHRoaXMgd2F5LCBpdCB3b3JrcyBldmVu IHdpdGggbWluaW1hbGx5IGNvbmZpZ3VyZWQgaW50ZXJhY3RpdmUKLSAgdmVyc2lvbnMuICBBZGQg Wm1vZGVtIGxhdGVyLi4uCi0qLwotI2lmZGVmIENLX0FVVE9ETAotCSAgICBpZiAoKCFsb2NhbCAm JiBjbWRhZGwpCS8qIEF1dG9kb3dubG9hZCBlbmFibGVkPyAqLwotI2lmZGVmIElLU19PUFRJT04K LQkJfHwgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydAotI2VuZGlmIC8q IElLU19PUFRJT04gKi8KLQkJKSB7Ci0JCWludCBrOwotCQlrID0ga3N0YXJ0KChDSEFSKWMpOwkv KiBLZXJtaXQgUyBvciBJIHBhY2tldD8gKi8KLQkJaWYgKGspIHsKLQkJICAgIGludCBrc2lnbiA9 IDA7Ci0JCSAgICBpZiAoayA8IDApIHsJLyogTWludXMtUHJvdG9jb2w/ICovCi0jaWZkZWYgTk9T RVJWRVIKLQkJCWdvdG8gbm9zZXJ2ZXI7CS8qIE5lZWQgc2VydmVyIG1vZGUgZm9yIHRoaXMgKi8K LSNlbHNlCi0JCQlrc2lnbiA9IDE7CS8qIFJlbWVtYmVyICovCi0JCQlrID0gMCAtIGs7CS8qIENv bnZlcnQgdG8gYWN0dWFsIHByb3RvY29sICovCi0JCQlqdXN0b25lID0gMTsJLyogRmxhZyBmb3Ig cHJvdG9jb2wgbW9kdWxlICovCi0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLQkJICAgIH0gZWxzZQot CQkgICAgICBqdXN0b25lID0gMDsKLQkJICAgIGstLTsJCS8qIEFkanVzdCBrc3RhcnQncyByZXR1 cm4gdmFsdWUgKi8KLQkJICAgIGlmIChrID09IFBST1RPX0spIHsKLQkJCWV4dGVybiBpbnQgcHJv dG9jb2wsIGdfcHJvdG87Ci0JCQlleHRlcm4gQ0hBUiBzc3RhdGU7Ci0JCQlnX3Byb3RvID0gcHJv dG9jb2w7Ci0JCQlwcm90b2NvbCA9IFBST1RPX0s7IC8qIENydWRlLi4uICovCi0JCQlzc3RhdGUg PSBrc2lnbiA/ICd4JyA6ICd2JzsKLQkJCWNtZGJ1ZlswXSA9IE5VTDsKLQkJCXJldHVybigtMyk7 Ci0JCSAgICB9Ci0JCX0KLQkgICAgfQotI2lmZGVmIE5PU0VSVkVSCi0JICBub3NlcnZlcjoKLSNl bmRpZiAvKiBOT1NFUlZFUiAqLwotI2VuZGlmIC8qIENLX0FVVE9ETCAqLwotI2VuZGlmIC8qIE5P WEZFUiAqLwotCi0JICAgIGNoc3JjID0gMTsJCQkvKiBSZW1lbWJlciBjaGFyYWN0ZXIgc291cmNl IGlzIHR0eS4gKi8KLQkgICAgYnJrY2hhciA9IGM7Ci0KLSNpZmRlZiBJS1NECi0gICAgICAgICAg ICBpZiAoaW5zZXJ2ZXIgJiYgYyA8IDApIHsgICAgLyogRW5kIG9mIHNlc3Npb24/ICovCi0gICAg ICAgICAgICAgICAgZGVidWcoRjExMSwiZ3R3b3JkIGMgPCAwIiwiZXhpdGluZyIsYyk7Ci0gICAg ICAgICAgICAgICAgcmV0dXJuKC00KTsgICAgICAgICAgICAgLyogQ2xlYW51cCBhbmQgdGVybWlu YXRlICovCi0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogSUtTRCAqLwotCi0jaWZkZWYgT1MyCi0g ICAgICAgICAgIGlmIChjIDwgMCkgewkJCS8qIEVycm9yICovCi0JICAgICAgIGlmIChjID09IC0z KSB7CQkvKiBFbXB0eSB3b3JkPyAqLwotCQkgICBpZiAoYmxvY2tsdmwgPiAwKQkvKiBJbiBhIGJs b2NrICovCi0JCSAgICAgY29udGludWU7CQkvKiBzbyBrZWVwIGxvb2tpbmcgZm9yIGJsb2NrIGVu ZCAqLwotCQkgICBlbHNlCi0JCSAgICAgcmV0dXJuKC0zKTsJLyogT3RoZXJ3aXNlIHNheSB3ZSBn b3Qgbm90aGluZyAqLwotCSAgICAgICB9IGVsc2UgewkJCS8qIE5vdCBlbXB0eSB3b3JkICovCi0J CSAgIHJldHVybigtNCk7CQkvKiBTbyBzb21lIGtpbmQgb2YgaS9vIGVycm9yICovCi0JICAgICAg IH0KLSAgICAgICAgICAgfQotI2Vsc2UKLSNpZmRlZiBNQUMKLQkgICBpZiAoYyA9PSAtMykJCQkv KiBFbXB0eSB3b3JkLi4uICovCi0JICAgICBpZiAoYmxvY2tsdmwgPiAwKQotCSAgICAgICBjb250 aW51ZTsKLQkgICAgIGVsc2UKLQkgICAgICAgcmV0dXJuKC0zKTsKLSNlbmRpZiAvKiBNQUMgKi8K LSNlbmRpZiAvKiBPUzIgKi8KLQkgICBpZiAoYyA9PSBFT0YpIHsJCS8qIFRoaXMgY2FuIGhhcHBl biBpZiBzdGRpbiBub3QgdHR5LiAqLwotI2lmZGVmIEVJTlRSCi0vKgotICBTb21lIG9wZXJhdGlu ZyBhbmQvb3IgQyBydW50aW1lIHN5c3RlbXMgcmV0dXJuIEVJTlRSIGZvciBubyBnb29kIHJlYXNv biwKLSAgd2hlbiB0aGUgZW5kIG9mIHRoZSBzdGFuZGFyZCBpbnB1dCAiZmlsZSIgaXMgZW5jb3Vu dGVyZWQuICBJbiBjYXNlcyBsaWtlCi0gIHRoaXMsIHdlIGdldCBpbnRvIGFuIGluZmluaXRlIGxv b3A7IGhlbmNlIHRoZSBlaW50ciBjb3VudGVyLCB3aGljaCBpcyByZXNldAotICB0byAwIHVwb24g ZWFjaCBjYWxsIHRvIHRoaXMgcm91dGluZS4KLSovCi0JCWRlYnVnKEYxMDEsImd0d29yZCBFT0Yi LCIiLGVycm5vKTsKLQkJaWYgKGVycm5vID09IEVJTlRSICYmICsrZWludHIgPCA0KSAvKiBXaGVu IGJnJ2QgcHJvY2VzcyBpcyAqLwotCQkgIGNvbnRpbnVlOwkJLyogZmcnZCBhZ2Fpbi4gKi8KLSNl bmRpZiAvKiBFSU5UUiAqLwotCQlyZXR1cm4oLTQpOwotCSAgICB9Ci0JICAgIGMgJj0gY21kbXNr OwkJLyogU3RyaXAgYW55IHBhcml0eSBiaXQgKi8KLQl9CQkJCS8qIGlmIGRlc2lyZWQuICovCi0K LS8qIE5vdyB3ZSBoYXZlIHRoZSBuZXh0IGNoYXJhY3RlciAqLwotCi0JaXNlc2MgPSAoYyA9PSBF U0MpOwkJLyogQSByZWFsIEVTQz8gKi8KLQotCWlmICghZmlyc3RuYiAmJiBjID4gU1ApIHsJLyog Rmlyc3Qgbm9uYmxhbmsgKi8KLQkgICAgZmlyc3RuYiA9IGM7Ci0JICAgIGlmIChjID09ICciJykJ CS8qIFN0YXJ0cyB3aXRoIGRvdWJsZXF1b3RlICovCi0JICAgICAgZHEgPSAxOwotCX0KLQlpZiAo YyA9PSAnIicpCQkJLyogQ291bnQgZG91YmxlcXVvdGVzICovCi0JICBkcW4rKzsKLQotCWlmIChx dW90ZSAmJiAoYyA9PSBDUiB8fCBjID09IExGKSkgeyAvKiBFbnRlciBrZXkgZm9sbG93aW5nIHF1 b3RlICovCi0JICAgICpicCsrID0gQ01EUTsJCS8qIERvdWJsZSBpdCAqLwotCSAgICAqYnAgPSBO VUw7Ci0JICAgIHF1b3RlID0gMDsKLQl9Ci0gICAgICAgIGlmIChxdW90ZSA9PSAwKSB7CQkvKiBJ ZiB0aGlzIGlzIG5vdCBhIHF1b3RlZCBjaGFyYWN0ZXIgKi8KLQkgICAgc3dpdGNoIChjKSB7Ci0J ICAgICAgY2FzZSBDTURROgkJLyogR290IHRoZSBxdW90ZSBjaGFyYWN0ZXIgaXRzZWxmICovCi0J CWlmICghY29tbWVudCAmJiBxdW90aW5nKQotCQkgIHF1b3RlID0gMTsJCS8qIEZsYWcgaXQgaWYg bm90IGluIGEgY29tbWVudCAqLwotCQlicmVhazsKLQkgICAgICBjYXNlIEZGOgkJCS8qIEZvcm1m ZWVkLiAqLwotICAgICAgICAgICAgICAgIGMgPSBOTDsgICAgICAgICAgICAgICAgIC8qIFJlcGxh Y2Ugd2l0aCBuZXdsaW5lICovCi0JCWNtZGNscnNjbigpOwkJLyogQ2xlYXIgdGhlIHNjcmVlbiAq LwotCQlicmVhazsKLQkgICAgICBjYXNlIEhUOgkJCS8qIEhvcml6b250YWwgVGFiICovCi0JCWlm IChjb21tZW50KQkJLyogSWYgaW4gY29tbWVudCwgKi8KLQkJICBjID0gU1A7CQkvKiBzdWJzdGl0 dXRlIHNwYWNlICovCi0JCWVsc2UJCQkvKiBvdGhlcndpc2UgKi8KLQkJICBjID0gRVNDOwkJLyog c3Vic3RpdHV0ZSBFU0MgKGZvciBjb21wbGV0aW9uKSAqLwotCQlicmVhazsKLQkgICAgICBjYXNl ICc7JzoJCQkvKiBUcmFpbGluZyBjb21tZW50ICovCi0JICAgICAgY2FzZSAnIyc6Ci0JCWlmICgh IChicmsgJiA0KSApIHsJLyogSWYgbm90IGtlZXBpbmcgY29tbWVudHMgKi8KLQkJICAgIGlmIChp bndvcmQgPT0gMCAmJiBxdW90aW5nKSB7IC8qIElmIG5vdCBpbiBhIHdvcmQgKi8KLQkJCWNvbW1l bnQgPSAxOwkvKiBzdGFydCBhIGNvbW1lbnQuICovCi0JCQljcCA9IGJwOwkvKiByZW1lbWJlciB3 aGVyZSBpdCBzdGFydHMuICovCi0JCSAgICB9Ci0JCX0KLQkJYnJlYWs7Ci0JICAgIH0KLQkgICAg aWYgKCFrc3RhcnRhY3RpdmUgJiYJLyogTm90IGluIHBvc3NpYmxlIEtlcm1pdCBwYWNrZXQgKi8K LQkJIWNvbW1lbnQgJiYgYyA9PSBTUCkgewkvKiBTcGFjZSBub3QgaW4gY29tbWVudCAqLwotICAg ICAgICAgICAgICAgICpicCsrID0gKGNoYXIpIGM7CS8qIGRlcG9zaXQgaW4gYnVmZmVyIGlmIG5v dCBhbHJlYWR5ICovCi0JCS8qIGRlYnVnKEYxMDEsImd0d29yZCBlY2hvZiAyIiwiIixlY2hvZik7 ICovCi0jaWZkZWYgQkVCT1gKLSAgICAgICAgICAgICAgICBpZiAoZWNob2YpIHsKLQkJICAgIGNt ZGVjaG8oKGNoYXIpIGMsIDApOyAvKiBFY2hvIHdoYXQgd2FzIHR5cGVkLiAqLwotICAgICAgICAg ICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICAgICAgICAgICAgICAgICAgZmZsdXNoKHN0 ZGVycik7Ci0gICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgICBpZiAoZWNo b2YpIHsKLQkJICAgIGNtZGVjaG8oKGNoYXIpIGMsIDApOyAvKiBFY2hvIHdoYXQgd2FzIHR5cGVk LiAqLwotCQkgICAgaWYgKHRpbWVsaW1pdCkKLQkJICAgICAgZmZsdXNoKHN0ZG91dCk7Ci0JCX0K LSNlbmRpZiAvKiBCRUJPWCAqLwotICAgICAgICAgICAgICAgIGlmIChpbndvcmQgPT0gMCkgeyAg ICAgIC8qIElmIGxlYWRpbmcsIGdvYmJsZSBpdC4gKi8KLSAgICAgICAgICAgICAgICAgICAgcHAr KzsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNl IHsgICAgICAgICAgICAgICAgLyogSWYgdGVybWluYXRpbmcsIHJldHVybi4gKi8KLQkJICAgIGlm ICgoIWRxICYmICgoKnBwICE9IGxicmFjZSkgfHwgKGJyYWNlbHZsID09IDApKSkgfHwKLQkJCShk cSAmJiBkcW4gPiAxICYmICooYnAtMikgPT0gJyInKSkgewotCQkJbnAgPSBicDsKLQkJCWNtYnB0 ciA9IG5wOwotCQkJaWYgKHNldGF0bShwcCwwKSA8IDApIHsKLQkJCSAgICBwcmludGYoIj9GaWVs ZCB0b28gbG9uZyBlcnJvciAxXG4iKTsKLQkJCSAgICBkZWJ1ZyhGMTExLCJndHdvcmQgdG9vIGxv bmcgIzEiLHBwLHN0cmxlbihwcCkpOwotCQkJICAgIHJldHVybigtOSk7Ci0JCQl9Ci0JCQlicmtj aGFyID0gYzsKLQkJCWlud29yZCA9IGNtZmxncyA9IDA7Ci0JCQlyZXR1cm4oMCk7Ci0JCSAgICB9 Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjID09IGxicmFjZSkgewotCQlicmFjZWx2bCsrOwot CQkvKiBkZWJ1ZyhGMTAxLCJndHdvcmQgYnJhY2VsdmwrKyIsIiIsYnJhY2VsdmwpOyAqLwotCSAg ICB9Ci0gICAgICAgICAgICBpZiAoYyA9PSByYnJhY2UgJiYgYnJhY2VsdmwgPiAwKSB7Ci0gICAg ICAgICAgICAgICAgYnJhY2VsdmwtLTsKLQkJLyogZGVidWcoRjEwMSwiZ3R3b3JkIGJyYWNlbHZs LS0iLCIiLGJyYWNlbHZsKTsgKi8KLSAgICAgICAgICAgICAgICBpZiAobGluZWJlZ2luKQotCQkg IGJsb2NrbHZsLS07Ci0gICAgICAgICAgICB9Ci0JICAgIGlmICgoYyA9PSAnPScgfHwgYyA9PSAn OicpICYmCi0JCS8qIF5eXiAqLwotCQkha3N0YXJ0YWN0aXZlICYmICFjb21tZW50ICYmIGJyayAv KiAmJiAoZmlyc3RuYiA9PSAnLycpICovCi0JCSkgewotICAgICAgICAgICAgICAgICpicCsrID0g KGNoYXIpIGM7CS8qIFN3aXRjaCBhcmd1bWVudCBzZXBhcmF0b3IgKi8KLQkJLyogZGVidWcoRjEx MSwiZ3R3b3JkIHN3aXRjaCBhcmdzZXAiLGNtZGJ1ZixicmspOyAqLwotI2lmZGVmIEJFQk9YCi0g ICAgICAgICAgICAgICAgaWYgKGVjaG9mKSB7Ci0JCSAgICBjbWRlY2hvKChjaGFyKSBjLCAwKTsg LyogRWNobyB3aGF0IHdhcyB0eXBlZC4gKi8KLSAgICAgICAgICAgICAgICAgICAgZmZsdXNoKHN0 ZG91dCk7Ci0gICAgICAgICAgICAgICAgICAgIGZmbHVzaChzdGRlcnIpOwotICAgICAgICAgICAg ICAgIH0KLSNlbHNlCi0JCWlmIChlY2hvZikgewotCQkgICAgY21kZWNobygoY2hhcikgYywgMCk7 IC8qIEVjaG8gd2hhdCB3YXMgdHlwZWQuICovCi0JCSAgICBpZiAodGltZWxpbWl0KQotCQkgICAg ICBmZmx1c2goc3Rkb3V0KTsKLQkJfQotI2VuZGlmIC8qIEJFQk9YICovCi0JCWlmICgoKnBwICE9 IGxicmFjZSkgfHwgKGJyYWNlbHZsID09IDApKSB7Ci0JCSAgICBucCA9IGJwOwotCQkgICAgY21i cHRyID0gbnA7Ci0JCSAgICBpZiAoc2V0YXRtKHBwLDIpIDwgMCkgeyAvKiBeXl4gKi8KLQkJCXBy aW50ZigiP0ZpZWxkIHRvbyBsb25nIGVycm9yIDFcbiIpOwotCQkJZGVidWcoRjExMSwiZ3R3b3Jk IHRvbyBsb25nICMxIixwcCxzdHJsZW4ocHApKTsKLQkJCXJldHVybigtOSk7Ci0JCSAgICB9Ci0J CSAgICBpbndvcmQgPSBjbWZsZ3MgPSAwOwotCQkgICAgYnJrY2hhciA9IGM7Ci0JCSAgICByZXR1 cm4oNCk7Ci0JCX0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjID09IExGIHx8IGMg PT0gQ1IpIHsJLyogQ1Igb3IgTEYuICovCi0JCWlmIChlY2hvZikgewotICAgICAgICAgICAgICAg ICAgICBjbWRuZXdsKChjaGFyKWMpOwkvKiBlY2hvIGl0LiAqLwotI2lmZGVmIEJFQk9YCi0gICAg ICAgICAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOwotICAgICAgICAgICAgICAgICAgICBmZmx1 c2goc3RkZXJyKTsKLSNlbmRpZiAvKiBCRUJPWCAqLwotICAgICAgICAgICAgICAgIH0KLQkJewot CQkgICAgLyogVHJpbSB0cmFpbGluZyBjb21tZW50IGFuZCB3aGl0ZXNwYWNlICovCi0JCSAgICBj aGFyICpxcTsKLQkJICAgIGlmIChjb21tZW50KSB7CS8qIEVyYXNlIGNvbW1lbnQgKi8KLQkJCXdo aWxlIChicCA+PSBjcCkgLyogQmFjayB0byBjb21tZW50IHBvaW50ZXIgKi8KLQkJCSAgKmJwLS0g PSBOVUw7Ci0JCQlicCsrOwotCQkJcHAgPSBicDsJLyogQWRqdXN0IG90aGVyIHBvaW50ZXJzICov Ci0JCQlpbndvcmQgPSAwOwkvKiBhbmQgZmxhZ3MgKi8KLQkJCWNvbW1lbnQgPSAwOwotCQkJY3Ag PSBOVUxMOwotCQkgICAgfQotCQkgICAgcXEgPSBpbndvcmQgPyBwcCA6IChjaGFyICopY21kYnVm OwotCQkgICAgLyogRXJhc2UgdHJhaWxpbmcgd2hpdGVzcGFjZSAqLwotCQkgICAgd2hpbGUgKGJw ID4gcXEgJiYgKCooYnAtMSkgPT0gU1AgfHwgKihicC0xKSA9PSBIVCkpIHsKLQkJCWJwLS07Ci0J CQkvKiBkZWJ1ZyhGMDAwLCJlcmFzaW5nIiwiIiwqYnApOyAqLwotCQkJKmJwID0gTlVMOwotCQkg ICAgfQotCQkgICAgbGFzdGNoYXIgPSAoYnAgPiBxcSkgPyAqKGJwLTEpIDogTlVMOwotCQkgICAg cHJldmNoYXIgPSAoYnAgPiBxcSsxKSA/ICooYnAtMikgOiBOVUw7Ci0JCX0KLQkJaWYgKGxpbmVi ZWdpbiAmJiBibG9ja2x2bCA+IDApIC8qIEJsYW5rIGxpbmUgaW4gey4uLn0gYmxvY2sgKi8KLQkJ ICBjb250aW51ZTsKLQotCQlsaW5lYmVnaW4gPSAxOwkJLyogQXQgYmVnaW5uaW5nIG9mIG5leHQg bGluZSAqLwotCQlpc2NvbnRkID0gcHJldmNoYXIgIT0gQ01EUSAmJgotCQkgIChsYXN0Y2hhciA9 PSAnLScgfHwgbGFzdGNoYXIgPT0gbGJyYWNlKTsKLQkJZGVidWcoRjEwMSwiZ3R3b3JkIGlzY29u dGQiLCIiLGlzY29udGQpOwotCi0gICAgICAgICAgICAgICAgaWYgKGlzY29udGQpIHsJCS8qIElm IGxpbmUgaXMgY29udGludWVkLi4uICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChjaHNyYykg ewkvKiBJZiByZWFkaW5nIGZyb20gdHR5LCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYg KCooYnAtMSkgPT0gbGJyYWNlKSB7IC8qIENoZWNrIGZvciAiYmVnaW4gYmxvY2siICovCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgKmJwKysgPSBTUDsJLyogSW5zZXJ0IGEgc3BhY2UgZm9y IG5lYXRuZXNzICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tsdmwrKzsJLyog Q291bnQgYmxvY2sgbmVzdGluZyBsZXZlbCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgfSBl bHNlIHsJLyogT3IgaHlwaGVuICovCi0JCQkgICAgYnAtLTsJLyogT3ZlcndyaXRlIHRoZSBoeXBo ZW4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg ICpicCA9IE5VTDsJLyogZXJhc2UgdGhlIGRhc2gsICovCi0gICAgICAgICAgICAgICAgICAgICAg ICBjb250aW51ZTsJLyogYW5kIGdvIGJhY2sgZm9yIG5leHQgY2hhciBub3cuICovCi0gICAgICAg ICAgICAgICAgICAgIH0KLQkJfSBlbHNlIGlmIChibG9ja2x2bCA+IDApIHsgLyogTm8gY29udGlu dWF0aW9uIGNoYXJhY3RlciAqLwotCQkgICAgaWYgKGNoc3JjKSB7CS8qIEJ1dCB3ZSdyZSBpbiBh ICJibG9jayIgKi8KLQkJCSpicCsrID0gJywnOwkvKiBBZGQgY29tbWEgKi8KLQkJCSpicCA9IE5V TDsKLQkJCWNvbnRpbnVlOwotCQkgICAgfQotCQl9IGVsc2UgewkJLyogTm8gY29udGludWF0aW9u LCBlbmQgb2YgY29tbWFuZC4gKi8KLQkJICAgICpicCA9IE5VTDsJCS8qIFRlcm1pbmF0ZSB0aGUg Y29tbWFuZCBzdHJpbmcuICovCi0JCSAgICBpZiAoY29tbWVudCkgewkvKiBJZiB3ZSdyZSBpbiBh IGNvbW1lbnQsICovCi0JCQljb21tZW50ID0gMDsJLyogU2F5IHdlJ3JlIG5vdCBhbnkgbW9yZSwg Ki8KLQkJCSpjcCA9IE5VTDsJLyogY3V0IGl0IG9mZi4gKi8KLQkJICAgIH0KLQkJICAgIG5wID0g YnA7CQkvKiBXaGVyZSB0byBzdGFydCBuZXh0IGZpZWxkLiAqLwotCQkgICAgY21icHRyID0gbnA7 Ci0JCSAgICBpZiAoc2V0YXRtKHBwLDApIDwgMCkgeyAvKiBDb3B5IGZpZWxkIHRvIGF0b20gYnVm ZmVyICovCi0JCQlkZWJ1ZyhGMTExLCJndHdvcmQgdG9vIGxvbmcgIzIiLHBwLHN0cmxlbihwcCkp OwotCQkJcHJpbnRmKCI/RmllbGQgdG9vIGxvbmcgZXJyb3IgMlxuIik7Ci0JCQlyZXR1cm4oLTkp OwotCQkgICAgfQotCQkgICAgaW53b3JkID0gMDsJCS8qIE5vdCBpbiBhIHdvcmQgYW55IG1vcmUu ICovCi0JCSAgICBjcmZsYWcgPSAxOwotICAgICAgICAgICAgICAgICAgICAvKiBkZWJ1ZyhGMTEw LCJndHdvcmQiLCJjcmZsYWcgaXMgc2V0IiwwKTsgKi8KLSNpZmRlZiBDS19SRUNBTEwKLQkJICAg IGN1cnJlbnQgPSBybGFzdDsKLSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLQkJICAgIGNtZmxncyA9 IDE7Ci0JCSAgICBpZiAoIXhjbWRzcmMKLSNpZmRlZiBDS19SRUNBTEwKLQkJCXx8IGZvcmNlX2Fk ZAotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotCQkJKQotICAJCSAgICAgIGFkZGNtZChjbWRidWYp OwotCQkgICAgcmV0dXJuKGNtZmxncyk7Ci0JCX0KLSAgICAgICAgICAgIH0KLS8qCi0gIFRoaXMg c2VjdGlvbiBoYW5kbGVzIGludGVyYWN0aXZlIGhlbHAsIGNvbXBsZXRpb24sIGVkaXRpbmcsIGFu ZCBoaXN0b3J5LgotICBSZWFycmFuZ2VkIGFzIGEgc3dpdGNoIHN0YXRlbWVudCBleGVjdXRlZCBv bmx5IGlmIHdlJ3JlIGF0IHRvcCBsZXZlbCBzaW5jZQotICB0aGVyZSBpcyBubyBuZWVkIGZvciBh bnkgb2YgdGhpcyB3aXRoaW4gY29tbWFuZCBmaWxlcyBhbmQgbWFjcm9zOiBBdWcgMjAwMC4KLSAg SnVuIDIwMDE6IEV2ZW4gaWYgYXQgdG9wIGxldmVsLCBza2lwIHRoaXMgaWYgdGhlIGNoYXJhY3Rl ciB3YXMgZmV0Y2hlZCBmcm9tCi0gIHRoZSByZXBhcnNlIG9yIHJlY2FsbCBidWZmZXIsIG9yIGlm IHN0ZGluIGlzIHJlZGlyZWN0ZWQuCi0qLwotCSAgICBpZiAoKHhjbWRzcmMgPT0gMAkJLyogT25s eSBhdCB0b3AgbGV2ZWwgKi8KLSNpZm5kZWYgTk9TUEwKLQkJfHwgYXNrZmxhZwkJLyogb3IgdXNl ciBpcyB0eXBpbmcgQVNLIHJlc3BvbnNlICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLQkJICkgJiYg Y2hzcmMgIT0gMCAmJiByZWFsdHR5KSB7IC8qIGZyb20gdGhlIHJlYWwga2V5Ym9hcmQgKi8KLQot LyogVXNlIEFOU0kgLyBWVDEwMCB1cCBhbmQgZG93biBhcnJvdyBrZXlzIGZvciBjb21tYW5kIHJl Y2FsbC4gICovCi0KLQkJaWYgKGlzZXNjICYmICgKLSNpZmRlZiBJS1NECi0JCSAgICBpbnNlcnZl cgotI2Vsc2UKLQkJICAgIDAKLSNlbmRpZiAvKiBJS1NEICovCi0jaWZkZWYgVVNFX0FSUk9XS0VZ UwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgMQotI2VuZGlmIC8qIFVTRV9BUlJP V0tFWVMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAg ICAgICAgKSB7CQkvKiBBIHJlYWwgRVNDIHdhcyB0eXBlZCAqLwotCQkgICAgaW50IHg7Ci0JCSAg ICBtc2xlZXAoMjAwKTsJLyogV2FpdCAxLzUgc2VjICovCi0JCSAgICB4ID0gY21kY29uY2hrKCk7 CS8qIFdhcyBpdCBmb2xsb3dlZCBieSBhbnl0aGluZz8gKi8KLQkJICAgIGRlYnVnKEYxMDEsIkFy cm93a2V5IEVTQyBjbWRjb25jaGsiLCIiLHgpOwotCi0JCSAgICBpZiAoeCA+IDEpIHsJLyogSWYg Zm9sbG93ZWQgYnkgYXQgbGVhc3QgMiBjaGFycyAqLwotCQkJaW50IGMyOwotCQkJYzIgPSBjbWRn ZXRjKDApOyAvKiBHZXQgdGhlIGZpcnN0IG9uZSAqLwotCQkJZGVidWcoRjEwMSwiQXJyb3drZXkg RVNDIGMyIiwiIixjMik7Ci0KLQkJCWlmIChjMiAhPSAnWycgJiYgYzIgIT0gJ08nKSB7IC8qIElm IG5vdCBbIG9yIE8gKi8KLQkJCSAgICBwdXNoYyA9IGMyOwkvKiBQdXNoIGl0IGFuZCB0YWtlIHRo ZSBFU0Mgc29sbyAqLwotCQkJfSBlbHNlIHsKLQkJCSAgICBjMiA9IGNtZGdldGMoMCk7IC8qIEdl dCB0aGUgc2Vjb25kIG9uZSAqLwotCQkJICAgIGRlYnVnKEYxMDEsIkFycm93a2V5IEVTQyBjMyIs IiIsYzIpOwotCQkJICAgIHN3aXRjaCAoYzIpIHsKLSNpZm5kZWYgTk9SRUNBTEwKLQkJCSAgICAg IGNhc2UgJ0EnOgkvKiBVcCAqLwotCQkJCWMgPSBCRUw7Ci0JCQkJYyA9IENfVVA7Ci0JCQkJYnJl YWs7Ci0JCQkgICAgICBjYXNlICdCJzoJLyogRG93biAqLwotCQkJCWMgPSBCRUw7Ci0JCQkJYyA9 IENfRE47Ci0JCQkJYnJlYWs7Ci0JCQkgICAgICBjYXNlICdDJzoJLyogUmlnaHQgKi8KLQkJCSAg ICAgIGNhc2UgJ0QnOgkvKiBMZWZ0ICovCi0jZWxzZQotCQkJICAgICAgZGVmYXVsdDoKLSNlbmRp ZiAvKiBOT1JFQ0FMTCAqLwotCQkJCWMgPSBCRUw7IC8qIFdlIGRvbid0IHVzZSB0aGVzZSB5ZXQg Ki8KLQkJCQlicmVhazsKLQkJCSAgICB9Ci0JCQl9Ci0JCSAgICB9Ci0JCX0KLQotCQlzd2l0Y2gg KGMpIHsKLQkJICBjYXNlICc/JzoJCS8qID8tSGVscCAqLwotI2lmbmRlZiBOT1NQTAotCQkgICAg aWYgKGFza2ZsYWcpCS8qIE5vIGhlbHAgaW4gQVNLIHJlc3BvbnNlICovCi0JCSAgICAgIGJyZWFr OwotI2VuZGlmIC8qIE5PU1BMICovCi0JCSAgICBpZiAocXVvdGluZwotCQkJJiYgIWtzdGFydGFj dGl2ZQotCQkJJiYgIWNvbW1lbnQKLQkJCSkgewotCQkJY21kZWNobygoY2hhcikgYywgMCk7Ci0J CQkqYnAgPSBOVUw7Ci0JCQlpZiAoc2V0YXRtKHBwLDApIDwgMCkgewotCQkJICAgIGRlYnVnKEYx MTEsImd0d29yZCB0b28gbG9uZyA/IixwcCxzdHJsZW4ocHApKTsKLQkJCSAgICBwcmludGYoIj9U b28gbG9uZ1xuIik7Ci0JCQkgICAgcmV0dXJuKC05KTsKLQkJCX0KLQkJCXFtZmxhZyA9IDE7Ci0J CQlyZXR1cm4oY21mbGdzID0gMyk7Ci0JCSAgICB9Ci0KLQkJICBjYXNlIEVTQzoJCS8qIEVzYyBv ciBUYWIgY29tcGxldGlvbiAqLwotCQkgICAgaWYgKCFjb21tZW50KSB7Ci0JCQkqYnAgPSBOVUw7 Ci0JCQlpZiAoc2V0YXRtKHBwLDApIDwgMCkgewotCQkJICAgIGRlYnVnKEYxMTEsImd0d29yZCB0 b28gbG9uZyBFc2MiLHBwLHN0cmxlbihwcCkpOwotCQkJICAgIHByaW50ZigiP1RvbyBsb25nXG4i KTsKLQkJCSAgICByZXR1cm4oLTkpOwotCQkJfQotCQkJZXNmbGFnID0gMTsKLQkJCXJldHVybihj bWZsZ3MgPSAyKTsKLQkJICAgIH0gZWxzZSB7Ci0JCQlibGVlcChCUF9XQVJOKTsKLQkJCWNvbnRp bnVlOwotCQkgICAgfQotCi0JCSAgY2FzZSBCUzoJCS8qIENoYXJhY3RlciBkZWxldGlvbiAqLwot CQkgIGNhc2UgUlVCOgotCQkgICAgaWYgKGJwID4gY21kYnVmKSB7CS8qIElmIHN0aWxsIGluIGJ1 ZmZlci4uLiAqLwotCQkJY21kY2hhcmRlbCgpOwkvKiBlcmFzZSBpdC4gKi8KLQkJCWJwLS07CQkv KiBwb2ludCBiZWhpbmQgaXQsICovCi0JCQlpZiAoKmJwID09IGxicmFjZSkgYnJhY2VsdmwtLTsg LyogQWRqdXN0IGJyYWNlIGNvdW50ICovCi0JCQlpZiAoKmJwID09IHJicmFjZSkgYnJhY2Vsdmwr KzsKLQkJCWlmICgoKmJwID09IFNQKSAmJiAvKiBGbGFnIGlmIGN1cnJlbnQgZmllbGQgZ29uZSAq LwotCQkJICAgICgqcHAgIT0gbGJyYWNlIHx8IGJyYWNlbHZsID09IDApKQotCQkJICBpbndvcmQg PSAwOwotCQkJKmJwID0gTlVMOwkvKiBFcmFzZSBjaGFyYWN0ZXIgZnJvbSBidWZmZXIuICovCi0J CSAgICB9IGVsc2UgewkJLyogT3RoZXJ3aXNlLCAqLwotCQkJYmxlZXAoQlBfV0FSTik7Ci0JCQlj bXJlcygpOwkvKiBhbmQgc3RhcnQgcGFyc2luZyBhIG5ldyBjb21tYW5kLiAqLwotCQkJKmJwID0g KmF0bWJ1ZiA9IE5VTDsKLQkJICAgIH0KLQkJICAgIGlmIChwcCA8IGJwKQotCQkgICAgICBjb250 aW51ZTsKLQkJICAgIGVsc2UKLQkJICAgICAgcmV0dXJuKGNtZmxncyA9IC0xKTsKLQotCQkgIGNh c2UgTERFTDoJCS8qIF5VLCBsaW5lIGRlbGV0aW9uICovCi0JCSAgICB3aGlsZSAoKGJwLS0pID4g Y21kYnVmKSB7Ci0JCQljbWRjaGFyZGVsKCk7Ci0JCQkqYnAgPSBOVUw7Ci0JCSAgICB9Ci0JCSAg ICBjbXJlcygpOwkJLyogUmVzdGFydCB0aGUgY29tbWFuZC4gKi8KLQkJICAgICpicCA9ICphdG1i dWYgPSBOVUw7Ci0JCSAgICBpbndvcmQgPSAwOwotCQkgICAgcmV0dXJuKGNtZmxncyA9IC0xKTsK LQotCQkgIGNhc2UgV0RFTDoJCS8qIF5XLCB3b3JkIGRlbGV0aW9uICovCi0JCSAgICBpZiAoYnAg PD0gY21kYnVmKSB7CS8qIEJlZXAgaWYgbm90aGluZyB0byBkZWxldGUgKi8KLQkJCWJsZWVwKEJQ X1dBUk4pOwotCQkJY21yZXMoKTsKLQkJCSpicCA9ICphdG1idWYgPSBOVUw7Ci0JCQlyZXR1cm4o Y21mbGdzID0gLTEpOwotCQkgICAgfQotCQkgICAgYnAtLTsKLQkJICAgIC8qIEJhY2sgdXAgb3Zl ciBhbnkgdHJhaWxpbmcgbm9uYWxwaGFudW1zICovCi0JCSAgICAvKiBUaGlzIGlzIGRlcGVuZGVu dCBvbiBBU0NJSSBjb2xsYXRpbmcgc2VxdWVuY2UgKi8KLQkJICAgIC8qIGJ1dCBpc2FscGhhbnVt KCkgaXMgbm90IGF2YWlsYWJsZSBldmVyeXdoZXJlLiAqLwotCQkgICAgZm9yICggOwotCQkJIChi cCA+PSBjbWRidWYpICYmCi0JCQkgKCgqYnAgPCAnMCcpIHx8Ci0JCQkgKCgqYnAgPiAnOScpICYm ICgqYnAgPCAnQCcpKSB8fAotCQkJICgoKmJwID4gJ1onKSAmJiAoKmJwIDwgJ2EnKSkgfHwKLQkJ CSAoKmJwID4gJ3onKSk7Ci0JCQkgYnAtLQotCQkJICkgewotCQkJY21kY2hhcmRlbCgpOwotCQkJ KmJwID0gTlVMOwotCQkgICAgfQotCQkgICAgLyogTm93IGRlbGV0ZSBiYWNrIHRvIHJpZ2h0bW9z dCByZW1haW5pbmcgbm9uYWxwaGFudW0gKi8KLQkJICAgIGZvciAoIDsgKGJwID49IGNtZGJ1Zikg JiYgKCpicCkgOyBicC0tKSB7Ci0JCQlpZiAoKCpicCA8ICcwJykgfHwKLQkJCSAgICAoKmJwID4g JzknICYmICpicCA8ICdAJykgfHwKLQkJCSAgICAoKmJwID4gJ1onICYmICpicCA8ICdhJykgfHwK LQkJCSAgICAoKmJwID4gJ3onKSkKLQkJCSAgYnJlYWs7Ci0JCQljbWRjaGFyZGVsKCk7Ci0JCQkq YnAgPSBOVUw7Ci0JCSAgICB9Ci0JCSAgICBicCsrOwotCQkgICAgaW53b3JkID0gMDsKLQkJICAg IHJldHVybihjbWZsZ3MgPSAtMSk7Ci0KLQkJICBjYXNlIFJESVM6IHsJCS8qIF5SLCByZWRpc3Bs YXkgKi8KLQkJICAgICAgY2hhciAqY3B4OyBjaGFyIGN4OwotCQkgICAgICAqYnAgPSBOVUw7Ci0J CSAgICAgIHByaW50ZigiXG4lcyIsY21wcm9tKTsKLQkJICAgICAgY3B4ID0gY21kYnVmOwotCQkg ICAgICB3aGlsZSAoKGN4ID0gKmNweCsrKSkgewotCQkJICBjbWRlY2hvKGN4LDApOwotCQkgICAg ICB9Ci0JCSAgICAgIGZmbHVzaChzdGRvdXQpOwotCQkgICAgICBjb250aW51ZTsKLQkJICB9Ci0j aWZuZGVmIE5PTEFTVEZJTEUKLQkJICBjYXNlIFZUOgotCQkgICAgaWYgKGxhc3RmaWxlKSB7Ci0J CQlwcmludGYoIiVzICIsbGFzdGZpbGUpOwotI2lmZGVmIEdFTURPUwotCQkJZmZsdXNoKHN0ZG91 dCk7Ci0jZW5kaWYgLyogR0VNRE9TICovCi0JCQlpbndvcmQgPSBjbWZsZ3MgPSAwOwotCQkJYWRk YnVmKGxhc3RmaWxlKTsJLyogU3VwcGx5IGRlZmF1bHQuICovCi0JCQlpZiAoc2V0YXRtKGxhc3Rm aWxlLDApIDwgMCkgewotCQkJICAgIHByaW50ZigiTGFzdCBuYW1lIHRvbyBsb25nXG4iKTsKLQkJ CSAgICBpZiAobnApIGZyZWUobnApOwotCQkJICAgIHJldHVybigtOSk7Ci0JCQl9Ci0JCSAgICB9 IGVsc2UgewkJLyogTm8gZGVmYXVsdCAqLwotCQkJYmxlZXAoQlBfV0FSTik7Ci0JCSAgICB9Ci0J CSAgICByZXR1cm4oMCk7Ci0jZW5kaWYJLyogTk9MQVNURklMRSAqLwotCQl9Ci0KLSNpZmRlZiBD S19SRUNBTEwKLQkJaWYgKG9uX3JlY2FsbCAmJgkvKiBSZWFkaW5nIGNvbW1hbmRzIGZyb20ga2V5 Ym9hcmQ/ICovCi0JCSAgICAoY21fcmVjYWxsID4gMCkgJiYJLyogU2F2aW5nIGNvbW1hbmRzPyAq LwotCQkgICAgKGMgPT0gQ19VUCB8fCBjID09IENfVVAyKSkgeyAvKiBHbyB1cCBvbmUgKi8KLQkJ ICAgIGlmIChsYXN0X3JlY2FsbCA9PSAyICYmIGN1cnJlbnQgPiAwKQotCQkgICAgICBjdXJyZW50 LS07Ci0JCSAgICBpZiAoY3VycmVudCA8IDApIHsJLyogTm93aGVyZSB0byBnbywgKi8KLQkJCWJs ZWVwKEJQX1dBUk4pOwotCQkJY29udGludWU7Ci0JCSAgICB9Ci0JCSAgICBpZiAocmVjYWxsW2N1 cnJlbnRdKSB7IC8qIFdlIGhhdmUgYSBwcmV2aW91cyBjb21tYW5kICovCi0JCQl3aGlsZSAoKGJw LS0pID4gY21kYnVmKSB7IC8qIEVyYXNlIGN1cnJlbnQgbGluZSAqLwotCQkJICAgIGNtZGNoYXJk ZWwoKTsKLQkJCSAgICAqYnAgPSBOVUw7Ci0JCQl9Ci0JCQlja3N0cm5jcHkoY21kYnVmLHJlY2Fs bFtjdXJyZW50XSxDTURCTCk7Ci0jaWZkZWYgT1NLCi0JCQlmZmx1c2goc3Rkb3V0KTsKLQkJCXdy aXRlKGZpbGVubyhzdGRvdXQpLCAiXHIiLCAxKTsKLQkJCXByaW50ZigiJXMlcyIsY21wcm9tLGNt ZGJ1Zik7Ci0jZWxzZQotCQkJcHJpbnRmKCJcciVzJXMiLGNtcHJvbSxjbWRidWYpOwotI2VuZGlm IC8qIE9TSyAqLwotCQkJY3VycmVudC0tOwotCQkgICAgfQotCQkgICAgbGFzdF9yZWNhbGwgPSAx OwotCQkgICAgcmV0dXJuKGNtZmxncyA9IC0xKTsgLyogRm9yY2UgYSByZXBhcnNlICovCi0JCX0K LQkJaWYgKG9uX3JlY2FsbCAmJgkvKiBSZWFkaW5nIGNvbW1hbmRzIGZyb20ga2V5Ym9hcmQ/ICov Ci0JCSAgICAoY21fcmVjYWxsID4gMCkgJiYJLyogU2F2aW5nIGNvbW1hbmRzPyAqLwotCQkgICAg KGMgPT0gQ19ETikpIHsJLyogRG93biBvbmUgKi8KLQkJICAgIGludCB4ID0gMTsKLQkJICAgIGlm IChsYXN0X3JlY2FsbCA9PSAxKQotCQkgICAgICB4Kys7Ci0JCSAgICBpZiAoY3VycmVudCArIHgg PiBybGFzdCkgeyAvKiBBbHJlYWR5IGF0IGJvdHRvbSwgYmVlcCAqLwotCQkJYmxlZXAoQlBfV0FS Tik7Ci0JCQljb250aW51ZTsKLQkJICAgIH0KLQkJICAgIGN1cnJlbnQgKz0geDsJLyogT0sgdG8g Z28gZG93biAqLwotCQkgICAgaWYgKHJlY2FsbFtjdXJyZW50XSkgewotCQkJd2hpbGUgKChicC0t KSA+IGNtZGJ1ZikgeyAvKiBFcmFzZSBjdXJyZW50IGxpbmUgKi8KLQkJCSAgICBjbWRjaGFyZGVs KCk7Ci0JCQkgICAgKmJwID0gTlVMOwotCQkJfQotCQkJY2tzdHJuY3B5KGNtZGJ1ZixyZWNhbGxb Y3VycmVudF0sQ01EQkwpOwotI2lmZGVmIE9TSwotCQkJZmZsdXNoKHN0ZG91dCk7Ci0JCQl3cml0 ZShmaWxlbm8oc3Rkb3V0KSwgIlxyIiwgMSk7Ci0JCQlwcmludGYoIiVzJXMiLGNtcHJvbSxjbWRi dWYpOwotI2Vsc2UKLQkJCXByaW50ZigiXHIlcyVzIixjbXByb20sY21kYnVmKTsKLSNlbmRpZiAv KiBPU0sgKi8KLQkJCWxhc3RfcmVjYWxsID0gMjsKLQkJCXJldHVybihjbWZsZ3MgPSAtMSk7IC8q IEZvcmNlIHJlcGFyc2UgKi8KLQkJICAgIH0KLQkJfQotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwot CSAgICB9Ci0KLQkgICAgaWYgKGMgPCBTUCAmJiBxdW90ZSA9PSAwKSB7IC8qIEFueSBvdGhlciB1 bnF1b3RlZCBjb250cm9sIGNoYXIgKi8KLQkJaWYgKCFjaHNyYykgewkJLyogSWYgY21kIGZpbGUs IHBvaW50IHBhc3QgaXQgKi8KLQkJICAgIGJwKys7Ci0JCX0gZWxzZSB7Ci0JCSAgICBibGVlcChC UF9XQVJOKTsKLQkJfQotCQljb250aW51ZTsJCS8qIGNvbnRpbnVlLCBkb24ndCBwdXQgaW4gYnVm ZmVyICovCi0JICAgIH0KLQkgICAgbGluZWJlZ2luID0gMDsJCS8qIE5vdCBhdCBiZWdpbm5pbmcg b2YgbGluZSAqLwotI2lmZGVmIEJFQk9YCi0JICAgIGlmIChlY2hvZikgewotICAgICAgICAgICAg ICAgIGNtZGVjaG8oKGNoYXIpIGMsIDApOwkvKiBFY2hvIHdoYXQgd2FzIHR5cGVkLiAqLwotICAg ICAgICAgICAgICAgIGZmbHVzaCAoc3Rkb3V0KTsKLSAgICAgICAgICAgICAgICBmZmx1c2goc3Rk ZXJyKTsKLSAgICAgICAgICAgIH0KLSNlbHNlCi0jaWZkZWYgTk9TUEwKLSAgICAgICAgICAgIGlm IChlY2hvZiB8fCBjaHNyYykKLSNlbHNlCi0gICAgICAgICAgICBpZiAoZWNob2YgfHwgKGVjaG9z dGFycyAmJiBjaHNyYykpCi0jZW5kaWYJLyogTk9TUEwgKi8KLQkgICAgICBjbWRlY2hvKChjaGFy KSBjLCAwKTsJLyogRWNobyB3aGF0IHdhcyB0eXBlZC4gKi8KLSNlbmRpZiAvKiBCRUJPWCAqLwot ICAgICAgICB9IGVsc2UgewkJCS8qIFRoaXMgY2hhcmFjdGVyIHdhcyBxdW90ZWQuICovCi0JICAg IGludCBxZiA9IDE7Ci0JICAgIHF1b3RlID0gMDsJCQkvKiBVbnNldCB0aGUgcXVvdGUgZmxhZy4g Ki8KLQkgICAgLyogZGVidWcoRjAwMCwiZ3R3b3JkIHF1b3RlIDAiLCIiLGMpOyAqLwotCSAgICAv KiBRdW90ZSBjaGFyYWN0ZXIgYXQgdGhpcyBsZXZlbCBpcyBvbmx5IGZvciBTUCwgPywgYW5kIGNv bnRyb2xzICovCi0gICAgICAgICAgICAvKiBJZiBhbnl0aGluZyBlbHNlIHdhcyBxdW90ZWQsIGxl YXZlIHF1b3RlIGluLCBhbmQgbGV0ICovCi0JICAgIC8qIHRoZSBjb21tYW5kLXNwZWNpZmljIHBh cnNpbmcgcm91dGluZXMgaGFuZGxlIGl0LCBlLmcuIFwwMDcgKi8KLQkgICAgaWYgKGMgPiAzMiAm JiBjICE9ICc/JyAmJiBjICE9IFJVQiAmJiBjaHNyYyAhPSAwKSB7Ci0JCS8qIGRlYnVnKEYwMDAs Imd0d29yZCBxdW90ZSAxIiwiIixjKTsgKi8KLQkJKmJwKysgPSBDTURROwkJLyogRGVwb3NpdCBc IGlmIGl0IGNhbWUgZnJvbSB0dHkgKi8KLQkJcWYgPSAwOwkJCS8qIGFuZCBkb24ndCBlcmFzZSBp dCBmcm9tIHNjcmVlbiAqLwotCQlsaW5lYmVnaW4gPSAwOwkJLyogTm90IGF0IGJlZ2lubmluZyBv ZiBsaW5lICovCi0jaWZkZWYgQlNfRElSU0VQCi0vKgotICBUaGlzIGlzIGEgaGFjayB0byBoYW5k bGUgImNkIFwiIG9yICJjZCBmb29cIiBvbiBPUy8yIGFuZCBzaW1pbGFyIHN5c3RlbXMuCi0gIElm IHdlIHdlcmUgY2FsbGVkIGZyb20gY21kaXIoKSBhbmQgdGhlIHByZXZpb3VzIGNoYXJhY3RlciB3 YXMgdGhlIHF1b3RlCi0gIGNoYXJhY3RlciwgaS5lLiBiYWNrc2xhc2gsIGFuZCB0aGlzIGNoYXJh Y3RlciBpcyB0aGUgY29tbWFuZCB0ZXJtaW5hdG9yLAotICB0aGVuIHdlIHN0dWZmIGFuIGV4dHJh IGJhY2tzbGFzaCBpbnRvIHRoZSBidWZmZXIgd2l0aG91dCBlY2hvaW5nLCB0aGVuCi0gIHdlIHN0 dWZmIHRoZSBjYXJyaWFnZSByZXR1cm4gYmFjayBpbiBhZ2FpbiwgYW5kIGdvIGJhY2sgYW5kIHBy b2Nlc3MgaXQsCi0gIHRoaXMgdGltZSB3aXRoIHRoZSBxdW90ZSBmbGFnIG9mZi4KLSovCi0JICAg IH0gZWxzZSBpZiAoZGlybmFtZmxnICYmIChjID09IENSIHx8IGMgPT0gTEYgfHwgYyA9PSBTUCkp IHsKLQkJLyogZGVidWcoRjAwMCwiZ3R3b3JkIHF1b3RlIDIiLCIiLGMpOyAqLwotCQkqYnArKyA9 IENNRFE7Ci0JCWxpbmViZWdpbiA9IDA7CQkvKiBOb3QgYXQgYmVnaW5uaW5nIG9mIGxpbmUgKi8K LQkJKmJwID0gKGMgPT0gU1AgPyBTUCA6IENSKTsKLQkJZ290byBDTURJUlBBUlNFOwotI2VuZGlm IC8qIEJTX0RJUlNFUCAqLwotCSAgICB9Ci0jaWZkZWYgQkVCT1gKLQkgICAgaWYgKGVjaG9mKSB7 Ci0gICAgICAgICAgICAgICAgY21kZWNobygoY2hhcikgYywgcWYpOwkvKiBFY2hvIHdoYXQgd2Fz IHR5cGVkLiAqLwotICAgICAgICAgICAgICAgIGZmbHVzaCAoc3Rkb3V0KTsKLSAgICAgICAgICAg ICAgICBmZmx1c2goc3RkZXJyKTsKLSAgICAgICAgICAgIH0KLSNlbHNlCi0JICAgIGlmIChlY2hv ZikgY21kZWNobygoY2hhcikgYywgcWYpOyAvKiBOb3cgZWNobyBxdW90ZWQgY2hhcmFjdGVyICov Ci0jZW5kaWYgLyogQkVCT1ggKi8KLQkgICAgLyogZGVidWcoRjExMSwiZ3R3b3JkIHF1b3RlIixj bWRidWYsYyk7ICovCi0JfQotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgaWYgKGVjaG9mKSBjbWRl Y2hvKChjaGFyKSBjLHF1b3RlKTsgLyogRWNobyB3aGF0IHdhcyB0eXBlZC4gKi8KLSNlbmRpZiAv KiBDT01NRU5UICovCi0gICAgICAgIGlmICghY29tbWVudCkgaW53b3JkID0gMTsJLyogRmxhZyB3 ZSdyZSBpbiBhIHdvcmQuICovCi0JaWYgKHF1b3RlKSBjb250aW51ZTsJCS8qIERvbid0IGRlcG9z aXQgcXVvdGUgY2hhcmFjdGVyLiAqLwotICAgICAgICBpZiAoYyAhPSBOTCkgewkJCS8qIERlcG9z aXQgY29tbWFuZCBjaGFyYWN0ZXIuICovCi0JICAgICpicCsrID0gKGNoYXIpIGM7CQkvKiBhbmQg bWFrZSBzdXJlIHRoZXJlIGlzIGEgTlVMICovCi0jaWZkZWYgQ09NTUVOVAotCSAgICAqYnAgPSBO VUw7CQkJLyogYWZ0ZXIgaXQgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0JfQotICAgIH0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBiaWcgd2hpbGUgKi8KLSAg ICBibGVlcChCUF9XQVJOKTsKLSAgICBwcmludGYoIj9Db21tYW5kIHRvbyBsb25nLCBtYXhpbXVt IGxlbmd0aDogJWQuXG4iLENNREJMKTsKLSAgICBjbWZsZ3MgPSAtMjsKLSAgICByZXR1cm4oLTkp OwotfQotCi0vKiBVdGlsaXR5IGZ1bmN0aW9ucyAqLwotCi0vKiBBIEQgRCBCIFUgRiAgLS0gQWRk IHRoZSBzdHJpbmcgcG9pbnRlZCB0byBieSBjcCB0byB0aGUgY29tbWFuZCBidWZmZXIgICovCi0K LXN0YXRpYyBpbnQKLWFkZGJ1ZihjcCkgY2hhciAqY3A7IHsKLSAgICBpbnQgbGVuID0gMDsKLSAg ICB3aGlsZSAoKCpjcCAhPSBOVUwpICYmIChicCA8IGNtZGJ1ZitDTURCTCkpIHsKLSAgICAgICAg KmJwKysgPSAqY3ArKzsgICAgICAgICAgICAgICAgICAvKiBDb3B5IGFuZCAqLwotICAgICAgICBs ZW4rKzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvdW50IHRoZSBjaGFyYWN0ZXJzLiAq LwotICAgIH0KLSAgICAqYnArKyA9IFNQOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQdXQg YSBzcGFjZSBhdCB0aGUgZW5kICovCi0gICAgKmJwID0gTlVMOyAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogVGVybWluYXRlIHdpdGggYSBudWxsICovCi0gICAgbnAgPSBicDsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogVXBkYXRlIHRoZSBuZXh0LWZpZWxkIHBvaW50ZXIgKi8KLSAg ICBjbWJwdHIgPSBucDsKLSAgICByZXR1cm4obGVuKTsgICAgICAgICAgICAgICAgICAgICAgICAv KiBSZXR1cm4gdGhlIGxlbmd0aCAqLwotfQotCi0vKiAgUyBFIFQgQSBUIE0gIC0tICBEZXBvc2l0 IGEgdG9rZW4gaW4gdGhlIGF0b20gYnVmZmVyLiAgKi8KLS8qCi0gIEJyZWFrIG9uIHNwYWNlLCBu ZXdsaW5lLCBjYXJyaWFnZSByZXR1cm4sIG9yIE5VTC4KLSAgQ2FsbCB3aXRoOgotICAgIGNwID0g UG9pbnRlciB0byBzdHJpbmcgdG8gY29weSB0byBhdG9tIGJ1ZmZlci4KLSAgICBmY29kZSA9IDAg bWVhbnMgYnJlYWsgb24gd2hpdGVzcGFjZSBvciBFT0wuCi0gICAgZmNvZGUgPSAxIG1lYW5zIGRv bid0IGJyZWFrIG9uIHNwYWNlLgotICAgIGZjb2RlID0gMiBtZWFucyBicmVhayBvbiBzcGFjZSwg JzonLCBvciAnPScuCi0gICAgZmNvZGUgPSAzIG1lYW5zIGNvcHkgdGhlIHdob2xlIHN0cmluZy4K LSAgTnVsbC10ZXJtaW5hdGUgdGhlIHJlc3VsdC4KLSAgUmV0dXJuIGxlbmd0aCBvZiB0b2tlbiwg YW5kIGFsc28gc2V0IGdsb2JhbCAiY2MiIHRvIHRoaXMgbGVuZ3RoLgotICBSZXR1cm4gLTEgaWYg dG9rZW4gd2FzIHRvbyBsb25nLgotKi8KLXN0YXRpYyBpbnQKLXNldGF0bShjcCxmY29kZSkgY2hh ciAqY3A7IGludCBmY29kZTsgewotICAgIGNoYXIgKmFwLCAqeHAsICpkcXAgPSBOVUxMLCBsYnJh Y2UsIHJicmFjZTsKLSAgICBpbnQgYnJhY2VsdmwgPSAwLCBkcSA9IDA7Ci0KLSAgICByZWdpc3Rl ciBjaGFyICogczsKLSAgICByZWdpc3RlciBpbnQgbiA9IDA7Ci0KLSAgICBpZiAoY21mbGRmbGdz ICYgMSkgewkJLyogSGFuZGxlIGdyb3VwaW5nICovCi0JbGJyYWNlID0gJygnOwotCXJicmFjZSA9 ICcpJzsKLSAgICB9IGVsc2UgewotCWxicmFjZSA9ICd7JzsKLQlyYnJhY2UgPSAnfSc7Ci0gICAg fQotICAgIGNjID0gMDsJCQkJLyogQ2hhcmFjdGVyIGNvdW50ZXIgKi8KLSAgICBhcCA9IGF0bWJ1 ZjsJCQkvKiBBZGRyZXNzIG9mIGF0b20gYnVmZmVyICovCi0KLSAgICBzID0gY3A7Ci0KLSAgICB3 aGlsZSAoKnMrKykgbisrOwkJCS8qIFNhdmUgYSBjYWxsIHRvIHN0cmxlbiAqLwotCi0gICAgaWYg KG4gPiBBVE1CTCkgewotCXByaW50ZigiP0NvbW1hbmQgYnVmZmVyIG92ZXJmbG93XG4iKTsKLQly ZXR1cm4oLTEpOwotICAgIH0KLSAgICAvKiBkZWJ1ZyhGMTExLCJzZXRhdG0iLGNwLG4pOyAqLwot ICAgIGlmIChjcCA9PSBhcCkgewkJCS8qIEluIGNhc2Ugc291cmNlIGlzIGF0b20gYnVmZmVyICov Ci0JeHAgPSBhdHlidWY7CQkJLyogbWFrZSBhIGNvcHkgKi8KLSNpZmRlZiBDT01NRU5UCi0Jc3Ry bmNweSh4cCxhcCxBVE1CTCk7CQkvKiBzbyB3ZSBjYW4gY29weSBpdCBiYWNrLCBlZGl0ZWQuICov Ci0JY3AgPSB4cDsKLSNlbHNlCi0JcyA9IGFwOwotCXdoaWxlICgoKnhwKysgPSAqcysrKSkgOwkv KiBXZSBhbHJlYWR5IGtub3cgaXQncyBiaWcgZW5vdWdoICovCi0JY3AgPSB4cCA9IGF0eWJ1ZjsK LSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgfQotICAgICphcCA9IE5VTDsJCQkJLyogWmVybyB0 aGUgYXRvbSBidWZmZXIgKi8KLSAgICBpZiAoZmNvZGUgPT0gMSkgewkJCS8qIFRyaW0gdHJhaWxp bmcgYmxhbmtzICovCi0Jd2hpbGUgKC0tbiA+PSAwICYmIGNwW25dID09IFNQKQotCSAgOwotCWNw W24rMV0gPSBOVUw7Ci0gICAgfQotICAgIHdoaWxlICgqY3AgPT0gU1ApIHsJCQkvKiBUcmltIGxl YWRpbmcgc3BhY2VzICovCi0JY3ArKzsKLQluLS07Ci0gICAgfQotICAgIGlmICgqY3AgPT0gJyIn KSB7CQkJLyogU3RhcnRzIHdpdGggZG91YmxlcXVvdGU/ICovCi0JZHEgPSAxOwotCWRxcCA9IGNw OwotICAgIH0KLSAgICB3aGlsZSAoKmNwKSB7Ci0gICAgICAgIGlmICgqY3AgPT0gbGJyYWNlKQot CSAgYnJhY2VsdmwrKzsKLSAgICAgICAgZWxzZSBpZiAoKmNwID09IHJicmFjZSkKLQkgIGJyYWNl bHZsLS07Ci0JaWYgKGJyYWNlbHZsIDwgMCkKLQkgIGJyYWNlbHZsID0gMDsKLQlpZiAoYnJhY2Vs dmwgPT0gMCkgewotCSAgICBpZiAoZHEpIHsKLQkJaWYgKCpjcCA9PSBTUCB8fCAqY3AgPT0gSFQp IHsKLQkJICAgIGlmIChjcCA+IGRxcCsxKSB7Ci0JCQlpZiAoKihjcC0xKSA9PSAnIicgJiYgKihj cC0yKSAhPSBDTURRKSB7Ci0JCQkgICAgYnJlYWs7Ci0JCQl9Ci0JCSAgICB9Ci0JCX0KLQkgICAg fSBlbHNlIGlmICgoKmNwID09IFNQIHx8ICpjcCA9PSBIVCkgJiYgZmNvZGUgIT0gMSAmJiBmY29k ZSAhPSAzKQotCSAgICAgIGJyZWFrOwotCSAgICBpZiAoKGZjb2RlID09IDIpICYmICgqY3AgPT0g Jz0nIHx8ICpjcCA9PSAnOicpKSBicmVhazsKLQkgICAgaWYgKChmY29kZSAhPSAzKSAmJiAoKmNw ID09IExGIHx8ICpjcCA9PSBDUikpIGJyZWFrOwotCX0KLSAgICAgICAgKmFwKysgPSAqY3ArKzsK LSAgICAgICAgY2MrKzsKLSAgICB9Ci0gICAgKmFwID0gTlVMOwkJCQkvKiBUZXJtaW5hdGUgdGhl IHN0cmluZy4gKi8KLSAgICAvKiBkZWJ1ZyhGMTExLCJzZXRhdG0gcmVzdWx0IixhdG1idWYsY2Mp OyAqLwotICAgIHJldHVybihjYyk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBs ZW5ndGguICovCi19Ci0KLS8qCi0gIFRoZXNlIGZ1bmN0aW9ucyBhdHRlbXB0IHRvIGhpZGUgc3lz dGVtIGRlcGVuZGVuY2llcyBmcm9tIHRoZSBtYWlubGluZQotICBjb2RlIGluIGd0d29yZCgpLiAg RHVtbXkgYXJnIGZvciBjbWRnZXRjKCkgbmVlZGVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGgKLSAg Y29uaW5jKCksIHR0aW5jKCksIGV0Yywgc2luY2UgYSBwb2ludGVyIHRvIHRoaXMgcm91dGluZSBj YW4gYmUgcGFzc2VkIGluCi0gIHBsYWNlIG9mIHRob3NlIHRvIHRuX2Rvb3AoKS4KLQotICBObyBs b25nZXIgc3RhdGljLiAgVXNlZCBieSBhc2ttb3JlKCkuICBGcmkgQXVnIDIwIDE1OjAzOjM0IDE5 OTkuCi0qLwotI2RlZmluZSBDTURfQ09OSU5DCQkJLyogSG93IHdlIGdldCBrZXlib2FyZCBjaGFy cyAqLwotCi1pbnQKLWNtZGdldGModGltZWxpbWl0KSBpbnQgdGltZWxpbWl0OyB7CS8qIEdldCBh IGNoYXJhY3RlciBmcm9tIHRoZSB0dHkuICovCi0gICAgaW50IGM7Ci0jaWZkZWYgSUtTRAotICAg IGV4dGVybiBpbnQgaW5zZXJ2ZXI7Ci0jZW5kaWYgLyogSUtTRCAqLwotI2lmZGVmIENLX0xPR0lO Ci0gICAgZXh0ZXJuIGludCB4X2xvZ2dlZDsKLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotI2lmZGVm IFROQ09ERQotICAgIHN0YXRpYyBpbnQgZ290X2NyID0gMDsKLSAgICBleHRlcm4gaW50IGNreGVj aDsKLSAgICBpbnQgdHggPSAwLCBpc190biA9IDA7Ci0jZW5kaWYgLyogVE5DT0RFICovCi0KLSAg ICBpZiAocHVzaGMKLSNpZm5kZWYgTk9TUEwKLQkmJiAhYXNrZmxhZwotI2VuZGlmIC8qIE5PU1BM ICovCi0JKSB7Ci0gICAgICAgIGRlYnVnKEYxMTEsImNtZGdldGMoKSIsInB1c2hjIixwdXNoYyk7 Ci0JYyA9IHB1c2hjOwotCXB1c2hjID0gTlVMOwotCWlmICh4Y21mZGIgJiYgYyA9PSAnPycpCQkv KiBEb24ndCBlY2hvID8gdHdpY2UgaWYgY2hhaW5pbmcuICovCi0JICBjbWRjaGFyZGVsKCk7Ci0J cmV0dXJuKGMpOwotICAgIH0KLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgIHsKLQljaGFyIGNoOwot CWMgPSBkZ25jaW5iKDAsJmNoLDEpOwkJLyogLTEgaXMgRU9GLCAtMiBUTywKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAtYyBpcyBBT1MvVlMgZXJyb3IgKi8KLQlp ZiAoYyA9PSAtMikgewkJCS8qIHRpbWVvdXQgd2FzIGVuYWJsZWQ/ICovCi0JICAgIHJlc3RvKGNo YW5uZWwoMCkpOwkJLyogcmVzZXQgdGltZW91dHMgKi8KLQkgICAgYyA9IGRnbmNpbmIoMCwmY2gs MSk7CS8qIHJldHJ5IHRoaXMgbm93ISAqLwotCX0KLQlpZiAoYyA8IDApIHJldHVybigtNCk7CQkv KiBFT0Ygb3Igc29tZSBlcnJvciAqLwotCWVsc2UgYyA9IChpbnQpIGNoICYgMDE3NzsJLyogR2V0 IGNoYXIgd2l0aG91dCBwYXJpdHkgKi8KLS8qCWVjaG9mID0gMTsgKi8KLSAgICB9Ci0jZWxzZSAv KiBOb3QgZGF0YWdlbmVyYWwgKi8KLSNpZm5kZWYgTUlOSVgyCi0gICAgaWYgKAotI2lmZGVmIElL U0QKLQkoIWxvY2FsICYmIGluc2VydmVyKSB8fAotI2VuZGlmIC8qIElLU0QgKi8KLQl0aW1lbGlt aXQgPiAwKSB7Ci0jaWZkZWYgVE5DT0RFCi0gICAgICAgICAgR0VUTkVYVENIOgotICAgICAgICAg ICAgaXNfdG4gPSAhcHVzaGMgJiYgIWxvY2FsICYmIHNzdGVsbmV0OwotI2VuZGlmIC8qIFROQ09E RSAqLwotI2lmZGVmIENPTU1FTlQKLQkgICAgYyA9IGNvbmluYyh0aW1lbGltaXQgPiAwID8gMSA6 IDApOwotI2Vsc2UgLyogQ09NTUVOVCAqLwotCSAgICAvKiBUaGlzIGlzIGxpa2VseSB0byBicmVh ayB0aGUgYXNrdGltZW91dC4uLiAqLwotCSAgICBjID0gY29uaW5jKHRpbWVsaW1pdCk7Ci0jZW5k aWYgLyogQ09NTUVOVCAqLwotCSAgICAvKiBkZWJ1ZyhGMTAxLCJjbWRnZXRjIGNvbmluYyIsIiIs Yyk7ICovCi0jaWZkZWYgVE5DT0RFCi0gICAgICAgICAgICBpZiAoYyA+PSAwICYmIGlzX3RuKSB7 CS8qIFNlcnZlci1zaWRlIFRlbG5ldCAqLwotICAgICAgICAgICAgICAgIHN3aXRjaCAoYykgewot CQkgIGNhc2UgSUFDOgotICAgICAgICAgICAgICAgICAgICAvKiBkZWJ1ZyhGMTExLCJndHdvcmQg SUFDIiwiYyIsYyk7ICovCi0gICAgICAgICAgICAgICAgICAgIGdvdF9jciA9IDA7Ci0gICAgICAg ICAgICAgICAgICAgIGlmICgodHggPSB0bl9kb29wKChDSEFSKShjICYgMHhmZiksY2t4ZWNoLGNv bmluYykpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gR0VUTkVYVENIOwot ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR4IDw9IC0xKSB7IC8qIEkvTyBlcnJvciAq LwotICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgdGhlcmUgd2FzIGEgZmF0YWwgSS9PIGVy cm9yIHRoZW4gdHRjbG9zKCkgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhhcyBi ZWVuIGNhbGxlZCBhbmQgdGhlIG5leHQgR0VUTkVYVENIIGF0dGVtcHQgICovCi0gICAgICAgICAg ICAgICAgICAgICAgICAvKiB3aWxsIGJlICFpc190biBzaW5jZSB0dGNsb3MoKSBzZXRzIHNzdGVs bmV0ID0gMCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgZG9leGl0KEJBRF9FWElULC0xKTsg LyogKG9yIHJldHVybigtNCk/ICovCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHgg PT0gMSkgeyAvKiBFQ0hPIGNoYW5nZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgY2t4ZWNo ID0gZHB4ID0gMTsgLyogR2V0IG5leHQgY2hhciAqLwotICAgICAgICAgICAgICAgICAgICAgICAg Z290byBHRVRORVhUQ0g7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHggPT0gMikg eyAvKiBFQ0hPIGNoYW5nZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgY2t4ZWNoID0gZHB4 ID0gMDsgLyogR2V0IG5leHQgY2hhciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBH RVRORVhUQ0g7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHggPT0gMykgeyAvKiBR dW90ZWQgSUFDICovCi0gICAgICAgICAgICAgICAgICAgICAgICBjID0gMjU1OwkvKiBwcm9jZWVl ZCB3aXRoIGl0LiAqLwotICAgICAgICAgICAgICAgICAgICB9Ci0jaWZkZWYgSUtTX09QVElPTgot ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0eCA9PSA0KSB7CS8qIElLUyBTdGF0ZSBDaGFu Z2UgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gR0VUTkVYVENIOwotICAgICAgICAg ICAgICAgICAgICB9Ci0jZW5kaWYgLyogSUtTX09QVElPTiAqLwotICAgICAgICAgICAgICAgICAg ICBlbHNlIGlmICh0eCA9PSA2KSB7CS8qIFJlbW90ZSBMb2dvdXQgKi8KLQkJCWRvZXhpdChHT09E X0VYSVQsMCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0JCQlnb3RvIEdFVE5FWFRD SDsJLyogVW5rbm93biwgZ2V0IG5leHQgY2hhciAqLwotCQkgICAgfQotICAgICAgICAgICAgICAg ICAgICBicmVhazsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICAgICAgICBjYXNlIENSOgot ICAgICAgICAgICAgICAgICAgICBpZiAoIVRFTE9QVF9VKFRFTE9QVF9CSU5BUlkpKSB7Ci0JCQlp ZiAoZ290X2NyKSB7Ci0JCQkgICAgLyogVGhpcyBtZWFucyB0aGUgc2VuZGVyIGlzIHZpb2xhdGlu ZyBUZWxuZXQgICAqLwotCQkJICAgIC8qIHByb3RvY29sIGJlY2F1c2Ugd2UgcmVjZWl2ZWQgdHdv IENScyBpbiBhICAgKi8KLQkJCSAgICAvKiByb3cgd2l0aG91dCBnZXR0aW5nIGVpdGhlciBMRiBv ciBOVUwuICAgICAgICovCi0JCQkgICAgLyogVGhpcyB3aWxsIG5vdCBzb2x2ZSB0aGUgcHJvYmxl bSBidXQgaXQgICAgICAqLwotCQkJICAgIC8qIHdpbGwgYXQgbGVhc3QgYWxsb3cgdHdvIENScyB0 byBkbyBzb21ldGhpbmcgKi8KLQkJCSAgICAvKiB3aGVyZWFzIGJlZm9yZSB0aGUgdXNlciB3b3Vs ZCBoYXZlIHRvIGd1ZXNzICovCi0JCQkgICAgLyogdG8gc2VuZCBMRiBvciBOVUwgYWZ0ZXIgdGhl IENSLiAgICAgICAgICAgICAqLwotCQkJICAgIGRlYnVnKEYxMDAsImd0d29yZCBDUiB0ZWxuZXQg ZXJyb3IiLCIiLDApOwotCQkJICAgIGMgPSBMRjsKLQkJCX0gZWxzZSB7Ci0JCQkgICAgZGVidWco RjEwMCwiZ3R3b3JkIHNraXBwaW5nIENSIiwiIiwwKTsKLQkJCSAgICBnb3RfY3IgPSAxOwkvKiBS ZW1lbWJlciBhIENSIHdhcyByZWNlaXZlZCAqLwotCQkJICAgIGdvdG8gR0VUTkVYVENIOwotCQkJ fQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotCQkJZGVidWcoRjEwMCwiZ3R3b3JkIENS IHRvIExGIiwiIiwwKTsKLQkJCWMgPSBMRjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgTEY6Ci0gICAgICAg ICAgICAgICAgICAgIGlmICghVEVMT1BUX1UoVEVMT1BUX0JJTkFSWSkpIHsKLQkJCWdvdF9jciA9 IDA7Ci0JCQlkZWJ1ZyhGMTAwLCJndHdvcmQgTEYiLCIiLDApOwotICAgICAgICAgICAgICAgICAg ICB9IGVsc2UgewotCQkJaWYgKGdvdF9jcikgewotCQkJICAgIGdvdF9jciA9IDA7Ci0JCQkgICAg ZGVidWcoRjEwMCwiZ3R3b3JkIHNraXBwaW5nIExGIiwiIiwwKTsKLQkJCSAgICBnb3RvIEdFVE5F WFRDSDsKLQkJCX0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgTlVMOgotICAgICAgICAgICAgICAgICAgICBp ZiAoIVRFTE9QVF9VKFRFTE9QVF9CSU5BUlkpICYmIGdvdF9jcikgewotCQkJYyA9IExGOwotCQkJ ZGVidWcoRjEwMCwiZ3R3b3JkIE5VTCB0byBMRiIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgICAg IH0gZWxzZSB7Ci0JCQlkZWJ1ZyhGMTAwLCJndHdvcmQgTlVMIiwiIiwwKTsKLSAgICAgICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBnb3RfY3IgPSAwOwotICAgICAgICAgICAg ICAgICAgICBicmVhazsKLSNlbHNlIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgICAgICAgIGNh c2UgQ1I6Ci0gICAgICAgICAgICAgICAgICAgIGlmICggIVRFTE9QVF9VKFRFTE9QVF9CSU5BUlkp ICYmIGdvdF9jciApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgbWVhbnMgdGhl IHNlbmRlciBpcyB2aW9sYXRpbmcgVGVsbmV0ICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAg IC8qIHByb3RvY29sIGJlY2F1c2Ugd2UgcmVjZWl2ZWQgdHdvIENScyBpbiBhICAgKi8KLSAgICAg ICAgICAgICAgICAgICAgICAgIC8qIHJvdyB3aXRob3V0IGdldHRpbmcgZWl0aGVyIExGIG9yIE5V TC4gICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgd2lsbCBub3Qgc29s dmUgdGhlIHByb2JsZW0gYnV0IGl0ICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIC8q IHdpbGwgYXQgbGVhc3QgYWxsb3cgdHdvIENScyB0byBkbyBzb21ldGhpbmcgKi8KLSAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHdoZXJlYXMgYmVmb3JlIHRoZSB1c2VyIHdvdWxkIGhhdmUgdG8g Z3Vlc3MgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRvIHNlbmQgTEYgb3IgTlVMIGFm dGVyIHRoZSBDUi4gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVn KEYxMDAsImd0d29yZCBDUiB0ZWxuZXQgZXJyb3IiLCIiLDApOwotICAgICAgICAgICAgICAgICAg ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZ290X2NyID0gMTsJLyogUmVtZW1i ZXIgYSBDUiB3YXMgcmVjZWl2ZWQgKi8KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgICAgICAvKiBkZWJ1ZyhGMTAwLCJndHdvcmQgQ1IgdG8gTEYiLCIiLDApOyAqLwotICAg ICAgICAgICAgICAgICAgICBjID0gTEY7Ci0JCSAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg IGNhc2UgTEY6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChnb3RfY3IpIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGdvdF9jciA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWJ1 ZyhGMTAwLCJndHdvcmQgc2tpcHBpbmcgTEYiLCIiLDApOyAqLwotICAgICAgICAgICAgICAgICAg ICAgICAgZ290byBHRVRORVhUQ0g7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQkJICAgIGJyZWFr OwotICAgICAgICAgICAgICAgICAgY2FzZSBOVUw6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChn b3RfY3IpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9jciA9IDA7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAvKiBkZWJ1ZyhGMTAwLCJndHdvcmQgc2tpcHBpbmcgTlVMIiwiIiwwKTsg Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gR0VUTkVYVENIOwotI2lmZGVmIENPTU1F TlQKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTAwLCJndHdvcmQgTlVMIiwiIiwwKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyog Q09NTUVOVCAqLwotI2lmZGVmIElLU0QKLQkJICBjYXNlIEVUWDoJCS8qIEN0cmwtQy4uLiAqLwot ICAgICAgICAgICAgICAgICAgY2FzZSBFT1Q6CQkvKiBFT1QgPSBFT0YgKi8KLSAgICAgICAgICAg ICAgICAgICAgICBpZiAoaW5zZXJ2ZXIKLSNpZmRlZiBDS19MT0dJTgotCQkJICAmJiAheF9sb2dn ZWQKLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotCQkJICApCi0gICAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybigtNCk7Ci0JCSAgICBicmVhazsKLSNlbmRpZiAvKiBJS1NEICovCi0JCSAgZGVm YXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICBnb3RfY3IgPSAwOwotICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBUTkNPREUgKi8KLSAgICB9IGVsc2UgewotI2lm ZGVmIE9TMgotCWMgPSBjb25pbmMoMCk7Ci0jZWxzZSAvKiBPUzIgKi8KLSNpZmRlZiBDTURfQ09O SU5DCi0jdW5kZWYgQ01EX0NPTklOQwotI2VuZGlmIC8qIENNRF9DT05JTkMgKi8KLQljID0gZ2V0 Y2hhcigpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgIH0KLSNlbHNlICAvKiBNSU5JWDIgKi8KLSN1 bmRlZiBnZXRjCi0jaWZkZWYgQ01EX0NPTklOQwotI3VuZGVmIENNRF9DT05JTkMKLSNlbmRpZiAv KiBDTURfQ09OSU5DICovCi0gICAgYyA9IGdldGMoc3RkaW4pOwotICAgIC8qIGRlYnVnKEYxMDEs ImNtZGdldGMgZ2V0YyIsIiIsYyk7ICovCi0jZW5kaWYgLyogTUlOSVgyICovCi0jaWZkZWYgUlRV Ci0gICAgaWYgKHJ0dV9idWcpIHsKLSNpZmRlZiBDTURfQ09OSU5DCi0jdW5kZWYgQ01EX0NPTklO QwotI2VuZGlmIC8qIENNRF9DT05JTkMgKi8KLQljID0gZ2V0Y2hhcigpOwkJCS8qIFJUVSBkb2Vz bid0IGRpc2NhcmQgdGhlIF5aICovCi0JcnR1X2J1ZyA9IDA7Ci0gICAgfQotI2VuZGlmIC8qIFJU VSAqLwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0gICAgcmV0dXJuKGMpOwkJCQkvKiBSZXR1 cm4gd2hhdCB3ZSBnb3QgKi8KLX0KLQotLyogI2lmZGVmIFVTRV9BUlJPV0tFWVMgKi8KLQotLyog TWVjaGFuaXNtIHRvIHVzZSBmb3IgcGVla2luZyBpbnRvIHN0ZGluIGJ1ZmZlciAqLwotCi0jaWZu ZGVmIFVTRV9GSUxFX0NOVAkJCS8qIHN0ZGluLT5fX2NudCAqLwotI2lmbmRlZiBVU0VfRklMRV9f Q05UCQkJLyogTm90ZTogdHdvIHVuZGVyc2NvcmVzICovCi0jaWZkZWYgSFBVWAkJCQkvKiBIUFVY IDctMTEgKi8KLSNpZm5kZWYgSFBVWDUKLSNpZm5kZWYgSFBVWDYKLSNkZWZpbmUgVVNFX0ZJTEVf X0NOVAotI2VuZGlmIC8qIEhQVVg2ICovCi0jZW5kaWYgLyogSFBVWDUgKi8KLSNlbHNlCi0jaWZk ZWYgQU5ZU0NPCQkJCS8qIFNDTyBVTklYLCBPU1I1LCBVbml4d2FyZSwgZXRjICovCi0jaWZuZGVm IE9MRF9VTklYV0FSRQkJCS8qIEJ1dCBub3QgVW5peHdhcmUgMS54IG9yIDIuMCAqLwotI2lmbmRl ZiBVTklYV0FSRTIJCQkvKiBvciAyLjEuMCAqLwotI2RlZmluZSBVU0VfRklMRV9fQ05UCi0jZW5k aWYgLyogVU5JWFdBUkUyICovCi0jZW5kaWYgLyogT0xEX1VOSVhXQVJFICovCi0jZW5kaWYgLyog QU5ZU0NPICovCi0jZW5kaWYgLyogSFBVWCAqLwotI2VuZGlmIC8qIFVTRV9GSUxFX19DTlQgKi8K LSNlbmRpZiAvKiBVU0VfRklMRV9DTlQgKi8KLQotI2lmbmRlZiBVU0VfRklMRV9SCQkJLyogc3Rk aW4tPl9yICovCi0jaWZuZGVmIFVTRV9GSUxFX0NOVAotI2lmbmRlZiBVU0VfRklMRV9fQ05UCi0j aWZkZWYgQlNENDQJCQkJLyoge0ZyZWUsT3BlbixOZXR9QlNELCBCU0RJICovCi0jZGVmaW5lIFVT RV9GSUxFX1IKLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2VuZGlmIC8qIFVTRV9GSUxFX19DTlQgKi8K LSNlbmRpZiAvKiBVU0VfRklMRV9DTlQgKi8KLSNlbmRpZiAvKiBVU0VfRklMRV9SICovCi0KLSNp Zm5kZWYgVVNFX0ZJTEVfUgkJCS8qIHN0ZGluLT5fY250ICovCi0jaWZuZGVmIFVTRV9GSUxFX0NO VAotI2lmbmRlZiBVU0VfRklMRV9fQ05UCi0jZGVmaW5lIFVTRV9GSUxFX0NOVAkJCS8qIEV2ZXJ5 Ym9keSBlbHNlIChidXQgTGludXgpICovCi0jZW5kaWYgLyogVVNFX0ZJTEVfX0NOVCAqLwotI2Vu ZGlmIC8qIFVTRV9GSUxFX0NOVCAqLwotI2VuZGlmIC8qIFVTRV9GSUxFX1IgKi8KLQotCi0vKgot ICBjIG0gZCBjIG8gbiBjIGggawotCi0gIEhvdyBtYW55IGNoYXJhY3RlcnMgYXJlIHdhaXRpbmcg dG8gYmUgcmVhZCBhdCB0aGUgY29uc29sZT8gIE5vcm1hbGx5Ci0gIGNvbmNoaygpIHdvdWxkIHRl bGwgdXMsIGJ1dCBpbiBVbml4IGFuZCBWTVMgY21kZ2V0YygpIHVzZXMgc3RkaW8gZ2V0Y2hhcigp LAotICB0aHVzIGJ5cGFzc2luZyBjb25pbmMoKS9jb25jaGsoKSwgc28gd2UgaGF2ZSB0byBwZWVr IGludG8gdGhlIHN0ZGluIGJ1ZmZlciwKLSAgd2hpY2ggaXMgdG90YWxseSBub25wb3J0YWJsZS4g IFdoaWNoIGlzIHdoeSB0aGlzIHJvdXRpbmUgaXMsIGF0IGxlYXN0IGZvcgotICBub3csIHVzZWQg b25seSBmb3IgY2hlY2tpbmcgZm9yIGFycm93LWtleSBzZXF1ZW5jZXMgZnJvbSB0aGUga2V5Ym9h cmQgYWZ0ZXIKLSAgYW4gRVNDIHdhcyByZWFkLiAgV291bGRuJ3QgaXQgYmUgbmljZSBpZiB0aGUg c3RkaW8gcGFja2FnZSBoYWQgYSBmdW5jdGlvbgotICB0aGF0IHJldHVybmVkIHRoZSBudW1iZXIg b2YgYnl0ZXMgd2FpdGluZyB0byBiZSByZWFkIGZyb20gaXRzIGJ1ZmZlcj8KLSAgUmV0dXJucyAw IG9yIGdyZWF0ZXIgYWx3YXlzLgotKi8KLWludAotY21kY29uY2hrKCkgewotICAgIGludCB4ID0g MCwgeTsKLSAgICB5ID0gcHVzaGMgPyAxIDogMDsJCQkvKiBIYXZlIGNvbW1hbmQgY2hhcmFjdGVy IHB1c2hlZD8gKi8KLSNpZmRlZiBPUzIKLSAgICB4ID0gY29uY2hrKCk7CQkJLyogQ2hlY2sgZGV2 aWNlLWRyaXZlciBidWZmZXIgKi8KLSAgICBpZiAoeCA8IDApIHggPSAwOwotI2Vsc2UgLyogT1My ICovCi0jaWZkZWYgQ01EX0NPTklOQwkJCS8qIFNlZSBjbWRnZXRjKCkgKi8KLSAgICB4ID0gY29u Y2hrKCk7CQkJLyogQ2hlY2sgZGV2aWNlLWRyaXZlciBidWZmZXIgKi8KLSAgICBpZiAoeCA8IDAp IHggPSAwOwotI2Vsc2UgIC8qIENNRF9DT05JTkMgKi8KLQotLyogSGVyZSB3ZSBtdXN0IGxvb2sg aW5zaWRlIHRoZSBzdGRpbiBidWZmZXIgLSBoaWdobHkgcGxhdGZvcm0gZGVwZW5kZW50ICovCi0K LSNpZmRlZiBfSU9fZmlsZV9mbGFncwkJCS8qIExpbnV4ICovCi0gICAgeCA9IChpbnQpICgoc3Rk aW4tPl9JT19yZWFkX2VuZCkgLSAoc3RkaW4tPl9JT19yZWFkX3B0cikpOwotICAgIGRlYnVnKEYx MDEsImNtZGNvbmNoayBfSU9fZmlsZV9mbGFncyIsIiIseCk7Ci0jZWxzZSAgLyogX0lPX2ZpbGVf ZmxhZ3MgKi8KLSNpZmRlZiBVU0VfRklMRV9DTlQJCQkvKiBUcmFkaXRpb25hbCAqLwotI2lmZGVm IFZNUwotICAgIGRlYnVnKEYxMDEsImNtZGNvbmNoayAoKnN0ZGluKS0+X2NudCIsIiIsKCpzdGRp biktPl9jbnQpOwotICAgIHggPSAoKnN0ZGluKS0+X2NudDsKLSNlbHNlCi0jaWZkZWYgTk9BUlJP V0tFWVMKLSAgICBkZWJ1ZyhGMTAxLCJjbWRjb25jaGsgTk9BUlJPV0tFWVMgeCIsIiIsMCk7Ci0j ZWxzZQotICAgIGRlYnVnKEYxMDEsImNtZGNvbmNoayBzdGRpbi0+X2NudCIsIiIsc3RkaW4tPl9j bnQpOwotICAgIHggPSBzdGRpbi0+X2NudDsKLSNlbmRpZiAvKiBOT0FSUk9XS0VZUyAqLwotI2Vu ZGlmIC8qIFZNUyAqLwotICAgIGlmICh4ID09IDApIHggPSBjb25jaGsoKTsKLSAgICBpZiAoeCA8 IDApIHggPSAwOwotI2Vsc2UgIC8qIFVTRV9GSUxFX0NOVCAqLwotI2lmZGVmIFVTRV9GSUxFX19D TlQJCQkvKiBIUC1VWCAqLwotICAgIGRlYnVnKEYxMDEsImNtZGNvbmNoayBzdGRpbi0+X19jbnQi LCIiLHN0ZGluLT5fX2NudCk7Ci0gICAgeCA9IHN0ZGluLT5fX2NudDsKLSAgICBpZiAoeCA9PSAw KSB4ID0gY29uY2hrKCk7Ci0gICAgaWYgKHggPCAwKSB4ID0gMDsKLSNlbHNlICAvKiBVU0VfRklM RV9DTlQgKi8KLSNpZmRlZiBVU0VfRklMRV9SCQkJLyogRnJlZUJTRCwgT3BlbkJTRCwgZXRjICov Ci0gICAgZGVidWcoRjEwMSwiY21kY29uY2hrIHN0ZGluLT5fciIsIiIsc3RkaW4tPl9yKTsKLSAg ICB4ID0gc3RkaW4tPl9yOwotICAgIGlmICh4ID09IDApIHggPSBjb25jaGsoKTsKLSAgICBpZiAo eCA8IDApIHggPSAwOwotCi0gICAgLyogRmlsbCBpbiBhbnkgb3RoZXJzIGhlcmUuLi4gKi8KLQot I2VuZGlmIC8qIFVTRV9GSUxFX1IgKi8KLSNlbmRpZiAvKiBVU0VfRklMRV9fQ05UICovCi0jZW5k aWYgLyogVVNFX0ZJTEVfQ05UICovCi0jZW5kaWYgLyogX0lPX2ZpbGVfZmxhZ3MgKi8KLSNlbmRp ZiAvKiBDTURfQ09OSU5DICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgcmV0dXJuKHggKyB5KTsK LX0KLS8qICNlbmRpZiAqLyAvKiBVU0VfQVJST1dLRVlTICovCi0KLQotc3RhdGljIFZPSUQKLWNt ZGNscnNjbigpIHsJCQkJLyogQ2xlYXIgdGhlIHNjcmVlbiAqLwotICAgIGNrX2NscygpOwotfQot Ci1zdGF0aWMgVk9JRAkJCQkvKiBXaGF0IHRvIGVjaG8gYXQgZW5kIG9mIGNvbW1hbmQgKi8KLSNp ZmRlZiBDS19BTlNJQwotY21kbmV3bChjaGFyIGMpCi0jZWxzZQotY21kbmV3bChjKSBjaGFyIGM7 Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGNtZG5ld2wgKi8gewotI2lmZGVmIE9TMgotI2lm ZGVmIElLU0QKLSAgICBleHRlcm4gaW50IGluc2VydmVyOwotICAgIGlmIChpbnNlcnZlciAmJiBj ID09IExGKQotICAgICAgcHV0Y2hhcihDUik7Ci0jZW5kaWYgLyogSUtTRCAqLwotI2VuZGlmIC8q IE9TMiAqLwotCi0gICAgcHV0Y2hhcihjKTsJCQkJLyogYyBpcyB0aGUgdGVybWluYXRpbmcgY2hh cmFjdGVyICovCi0KLSNpZmRlZiBXSU5UQ1AJCQkJLyogd2hhdCBpcyB0aGlzIGRvaW5nIGhlcmU/ ICovCi0gICAgaWYgKGMgPT0gQ1IpIHB1dGNoYXIoTkwpOwotI2VuZGlmIC8qIFdJTlRDUCAqLwot Ci0vKgotICBBLkEuIENoZXJub3YsIHdobyBzZW50IGluIGNoYW5nZXMgZm9yIEZyZWVCU0QsIHNh aWQgd2UgYWxzbyBuZWVkZWQgdGhpcwotICBmb3IgU1ZPUlBPU0lYIGJlY2F1c2UgInNldHVwIHRl cm1pbmFsIGJ5IHRlcm1pb3MgYW5kIGN1cnNlcyBkb2VzCi0gIG5vdCBjb252ZXJ0IFxyIHRvIFxu LCBzbyBhZGRpdGlvbmFsIFxuIG5lZWRlZCBpbiBuZXdsaW5lIGZ1bmN0aW9uLiIgIEJ1dAotICBp dCBpcyBhbHNvIHZlcnkgbGlrZWx5IHRvIHJlc3VsdCBpbiB1bndhbnRlZCBibGFuayBsaW5lcy4K LSovCi0jaWZkZWYgQlNENDQKLSAgICBpZiAoYyA9PSBDUikgcHV0Y2hhcihOTCk7Ci0jZW5kaWYg LyogQlNENDQgKi8KLQotI2lmZGVmIENPTU1FTlQKLSAgICAvKiBPUzIgbm8gbG9uZ2VyIG5lZWRz IHRoaXMgYXMgYWxsIENSIGFyZSBjb252ZXJ0ZWQgdG8gTkwgaW4gY29uaW5jKCkgKi8KLSAgICAv KiBUaGlzIGVsaW1pbmF0ZXMgdGhlIHVnbHkgZXh0cmEgYmxhbmsgbGluZXMgZGlzY3Vzc2VkIGFi b3ZlLiAgICAgICAgKi8KLSNpZmRlZiBPUzIKLSAgICBpZiAoYyA9PSBDUikgcHV0Y2hhcihOTCk7 Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2lmZGVmIGFlZ2lzCi0g ICAgaWYgKGMgPT0gQ1IpIHB1dGNoYXIoTkwpOwotI2VuZGlmIC8qIGFlZ2lzICovCi0jaWZkZWYg QU1JR0EKLSAgICBpZiAoYyA9PSBDUikgcHV0Y2hhcihOTCk7Ci0jZW5kaWYgLyogQU1JR0EgKi8K LSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgIGlmIChjID09IENSKSBwdXRjaGFyKE5MKTsKLSNlbmRp ZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2lmZGVmIEdFTURPUwotICAgIGlmIChjID09IENSKSBwdXRj aGFyKE5MKTsKLSNlbmRpZiAvKiBHRU1ET1MgKi8KLSNpZmRlZiBTVFJBVFVTCi0gICAgaWYgKGMg PT0gQ1IpIHB1dGNoYXIoTkwpOwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLX0KLQotc3RhdGljIFZP SUQKLWNtZGNoYXJkZWwoKSB7CQkJCS8qIEVyYXNlIGEgY2hhcmFjdGVyIGZyb20gdGhlIHNjcmVl biAqLwotI2lmbmRlZiBOT1NQTAotICAgIGlmICghZWNob3N0YXJzKQotI2VuZGlmCS8qIE5PU1BM ICovCi0gICAgICBpZiAoIWRweCkgcmV0dXJuOwotI2lmZGVmIGRhdGFnZW5lcmFsCi0gICAgLyog REcgJ1xiJyBpcyBFTSAoXnkgb3IgXDAzMSkgKi8KLSAgICBpZiAodGVybXR5cGUgPT0gMSkKLSAg ICAgIC8qIEVyYXNlIGEgY2hhcmFjdGVyIGZyb20gbm9uLURHIHNjcmVlbiwgKi8KLSAgICAgIGRn bmNvdWIoMSwiXDAxMCBcMDEwIiwzKTsKLSAgICBlbHNlCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwg Ki8KLSAgICAgIHByaW50ZigiXGIgXGIiKTsKLSNpZmRlZiBHRU1ET1MKLSAgICBmZmx1c2goc3Rk b3V0KTsKLSNlbHNlCi0jaWZkZWYgQkVCT1gKLSAgICBmZmx1c2goc3Rkb3V0KTsKLSNlbmRpZiAv KiBCRUJPWCAqLwotI2VuZGlmIC8qIEdFTURPUyAqLwotfQotCi1zdGF0aWMgVk9JRAotI2lmZGVm IENLX0FOU0lDCi1jbWRlY2hvKGNoYXIgYywgaW50IHF1b3RlKQotI2Vsc2UKLWNtZGVjaG8oYyxx dW90ZSkgY2hhciBjOyBpbnQgcXVvdGU7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogY21k ZWNobyAqLwotI2lmZGVmIE5PU1BMCi0gICAgaWYgKCFkcHgpIHJldHVybjsKLSNlbHNlCi0gICAg aWYgKCFlY2hvc3RhcnMpIHsKLQlpZiAoIWRweCkgcmV0dXJuOwotICAgIH0gZWxzZSB7Ci0JYyA9 IChjaGFyKWVjaG9zdGFyczsKLSAgICB9Ci0jZW5kaWYJLyogTk9TUEwgKi8KLSAgICAvKiBFY2hv IHR0eSBpbnB1dCBjaGFyYWN0ZXIgYyAqLwotICAgIGlmIChxdW90ZSkgewotCXB1dGNoYXIoQlMp OwotCXB1dGNoYXIoU1ApOwotCXB1dGNoYXIoQlMpOwotI2lmZGVmIGlzcHJpbnQKLQlwdXRjaGFy KChDSEFSKSAoaXNwcmludChjKSA/IGMgOiAnXicgKSk7Ci0jZWxzZQotCXB1dGNoYXIoKENIQVIp ICgoYyA+PSBTUCAmJiBjIDwgREVMKSA/IGMgOiAnXicpKTsKLSNlbmRpZiAvKiBpc3ByaW50ICov Ci0gICAgfSBlbHNlIHsKLQlwdXRjaGFyKGMpOwotICAgIH0KLSNpZmRlZiBPUzIKLSAgICBpZiAo cXVvdGU9PTEgJiYgYz09Q1IpIHB1dGNoYXIoKENIQVIpIE5MKTsKLSNlbmRpZiAvKiBPUzIgKi8K LSAgICBpZiAodGltZWxpbWl0KQotICAgICAgZmZsdXNoKHN0ZG91dCk7Ci19Ci0KLS8qIFJldHVy biBwb2ludGVyIHRvIGN1cnJlbnQgcG9zaXRpb24gaW4gY29tbWFuZCBidWZmZXIuICovCi0KLWNo YXIgKgotY21wZWVrKCkgewotICAgIHJldHVybihucCk7Ci19Ci0jZW5kaWYgLyogTk9JQ1AgKi8K LQotCi0jaWZkZWYgTk9JQ1AKLSNpbmNsdWRlICJja2NkZWIuaCIKLSNpbmNsdWRlICJja3VjbWQu aCIKLSNpbmNsdWRlICJja2Nhc2MuaCIKLSNlbmRpZiAvKiBOT0lDUCAqLwotCi0vKiAgWCBYIEUg UyBDICAtLSAgSW50ZXJwcmV0cyBiYWNrc2xhc2ggY29kZXMgICovCi0vKiAgUmV0dXJucyB0aGUg aW50IHZhbHVlIG9mIHRoZSBiYWNrc2xhc2ggY29kZSBpZiBpdCBpcyA+IC0xIGFuZCA8IDI1NiAq LwotLyogIGFuZCB1cGRhdGVzIHRoZSBzdHJpbmcgcG9pbnRlciB0byBmaXJzdCBjaGFyYWN0ZXIg YWZ0ZXIgYmFja3NsYXNoIGNvZGUuICovCi0vKiAgSWYgdGhlIGFyZ3VtZW50IGlzIGludmFsaWQs IGxlYXZlcyBwb2ludGVyIHVuY2hhbmdlZCBhbmQgcmV0dXJucyAtMS4gKi8KLQotaW50Ci14eGVz YyhzKSBjaGFyICoqczsgewkJCS8qIEV4cGFuZCBiYWNrc2xhc2ggZXNjYXBlcyAqLwotICAgIGlu dCB4LCB5LCBicmFjZSwgcmFkaXg7CQkvKiBSZXR1cm5zIHRoZSBpbnQgdmFsdWUgKi8KLSAgICBj aGFyIGhkID0gJzknOwkJCS8qIEhpZ2hlc3QgZGlnaXQgaW4gcmFkaXggKi8KLSAgICBjaGFyICpw OwotCi0gICAgcCA9ICpzOwkJCQkvKiBwb2ludGVyIHRvIGJlZ2lubmluZyAqLwotICAgIGlmICgh cCkgcmV0dXJuKC0xKTsJCQkvKiB3YXRjaCBvdXQgZm9yIG51bGwgcG9pbnRlciAqLwotICAgIHgg PSAqcCsrOwkJCQkvKiBjaGFyYWN0ZXIgYXQgYmVnaW5uaW5nICovCi0gICAgaWYgKHggIT0gQ01E USkgcmV0dXJuKC0xKTsJCS8qIG1ha2Ugc3VyZSBpdCdzIGEgYmFja3NsYXNoIGNvZGUgKi8KLQot ICAgIHggPSAqcDsJCQkJLyogaXQgaXMsIGdldCB0aGUgbmV4dCBjaGFyYWN0ZXIgKi8KLSAgICBp ZiAoeCA9PSAneycpIHsJCQkvKiBicmFja2V0ZWQgcXVhbnRpdHk/ICovCi0JcCsrOwkJCQkvKiBi ZWdpbiBwYXN0IGJyYWNrZXQgKi8KLQl4ID0gKnA7Ci0JYnJhY2UgPSAxOwotICAgIH0gZWxzZSBi cmFjZSA9IDA7Ci0gICAgc3dpdGNoICh4KSB7CQkJLyogU3RhcnQgaW50ZXJwcmV0aW5nICovCi0g ICAgICBjYXNlICdkJzoJCQkJLyogRGVjaW1hbCByYWRpeCBpbmRpY2F0b3IgKi8KLSAgICAgIGNh c2UgJ0QnOgotCXArKzsJCQkJLyogSnVzdCBwb2ludCBwYXN0IGl0IGFuZCBmYWxsIHRocnUgKi8K LSAgICAgIGNhc2UgJzAnOgkJCQkvKiBTdGFydHMgd2l0aCBkaWdpdCAqLwotICAgICAgY2FzZSAn MSc6Ci0gICAgICBjYXNlICcyJzogIGNhc2UgJzMnOiAgY2FzZSAnNCc6ICBjYXNlICc1JzoKLSAg ICAgIGNhc2UgJzYnOiAgY2FzZSAnNyc6ICBjYXNlICc4JzogIGNhc2UgJzknOgotCXJhZGl4ID0g MTA7CQkJLyogRGVjaW1hbCAqLwotCWhkID0gJzknOwkJCS8qIGhpZ2hlc3QgdmFsaWQgZGlnaXQg Ki8KLQlicmVhazsKLSAgICAgIGNhc2UgJ28nOgkJCQkvKiBTdGFydHMgd2l0aCBvIG9yIE8gKi8K LSAgICAgIGNhc2UgJ08nOgotCXJhZGl4ID0gODsJCQkvKiBPY3RhbCAqLwotCWhkID0gJzcnOwkJ CS8qIGhpZ2hlc3QgdmFsaWQgZGlnaXQgKi8KLQlwKys7CQkJCS8qIHBvaW50IHBhc3QgcmFkaXgg aW5kaWNhdG9yICovCi0JYnJlYWs7Ci0gICAgICBjYXNlICd4JzoJCQkJLyogU3RhcnRzIHdpdGgg eCBvciBYICovCi0gICAgICBjYXNlICdYJzoKLQlyYWRpeCA9IDE2OwkJCS8qIEhleGFkZWNpbWFs ICovCi0JcCsrOwkJCQkvKiBwb2ludCBwYXN0IHJhZGl4IGluZGljYXRvciAqLwotCWJyZWFrOwot ICAgICAgZGVmYXVsdDoJCQkJLyogQWxsIG90aGVycyAqLwotI2lmZGVmIENPTU1FTlQKLQkqcyA9 IHArMTsJCQkvKiBUcmVhdCBhcyBxdW90ZSBvZiBuZXh0IGNoYXIgKi8KLQlyZXR1cm4oKnApOwot I2Vsc2UKLQlyZXR1cm4oLTEpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB9Ci0gICAgLyog Rm9yIE9TLzIsIHRoZXJlIGFyZSAid2lkZSIgY2hhcmFjdGVycyByZXF1aXJlZCBmb3IgdGhlIGtl eWJvYXJkCi0gICAgICogYmluZGluZywgaS5lIFw2NDQgYW5kIHNpbWlsYXIgY29kZXMgbGFyZ2Vy IHRoYW4gMjU1IChieXRlKS4KLSAgICAgKiBGb3IgdGhpcyBwdXJwb3NlLCBnaXZlIHVwIGNoZWNr aW5nIGZvciA8IDI1Ni4gSWYgc29tZW9uZSBtZWFucwotICAgICAqIFwyNjYgc2hvdWxkIHJlc3Vs dCBpbiBcMjYgZm9sbG93ZWQgYnkgYSAiNiIgY2hhcmFjdGVyLCBoZSBzaG91bGQKLSAgICAgKiBh bHdheXMgd3JpdGUgXHsyNn02IGFueXdheS4gIE5vdywgcmV0dXJuIG9ubHkgdGhlIGxvd2VyIGJ5 dGUgb2YKLSAgICAgKiB0aGUgcmVzdWx0LCBpLmUuIDEwLCBidXQgZWF0IHVwIHRoZSB3aG9sZSBc MjY2IHNlcXVlbmNlIGFuZAotICAgICAqIHB1dCB0aGUgd2lkZSByZXN1bHQgMjY2IGludG8gYSBn bG9iYWwgdmFyaWFibGUuICBZZXMsIHRoYXQncyBub3QKLSAgICAgKiB0aGUgbW9zdCBiZWF1dGlm dWwgcHJvZ3JhbW1pbmcgc3R5bGUgYnV0IHJlcXVpcmVzIHRoZSBsZWFzdAotICAgICAqIGFtb3Vu dCBvZiBjaGFuZ2VzIHRvIG90aGVyIHJvdXRpbmVzLgotICAgICAqLwotICAgIGlmICgqcCA9PSAn eycpIHsJCQkvKiBTdW4gTWF5IDExIDIwOjAwOjQwIDIwMDMgKi8KLQlicmFjZSA9IDE7CQkJLyog QWxsb3cge30gYWZ0ZXIgcmFkaXggaW5kaWNhdG9yICovCi0JcCsrOwotICAgIH0KLSAgICBpZiAo cmFkaXggPD0gMTApIHsJCQkvKiBOdW1iZXIgaW4gcmFkaXggOCBvciAxMCAqLwotCWZvciAoIHgg PSB5ID0gMDsKLSAJICAgICAgKCpwKSAmJiAoKnAgPj0gJzAnKSAmJiAoKnAgPD0gaGQpCi0jaWZk ZWYgT1MyCi0gICAgICAgICAgICAgICAgICAgJiYgKHkgPCA1KSAmJiAoeCpyYWRpeCA8IEtNU0la RSk7Ci0gICAgICAgICAgICAgIC8qIHRoZSBtYXhpbXVtIG5lZWRlZCB2YWx1ZSBcODE5NiBpcyA0 IGRpZ2l0cyBsb25nICovCi0gICAgICAgICAgICAgIC8qIHdoaWxlIGFzIG9jdGFsIGl0IHJlcXVp cmVzIFwxMzc3LCBpLmUuIDUgZGlnaXRzICovCi0jZWxzZQotICAgICAgICAgICAgICAgICAgICYm ICh5IDwgMykgJiYgKHgqcmFkaXggPCAyNTYpOwotI2VuZGlmIC8qIE9TMiAqLwotCSAgICAgIHAr Kyx5KyspIHsKLQkgICAgeCA9IHggKiByYWRpeCArIChpbnQpICpwIC0gNDg7Ci0JfQotI2lmZGVm IE9TMgotICAgICAgICB3aWRlcmVzdWx0ID0geDsJCQkvKiBSZW1lbWJlciB3aWRlIHJlc3VsdCAq LwotICAgICAgICB4ICY9IDI1NTsKLSNlbmRpZiAvKiBPUzIgKi8KLQlpZiAoeSA9PSAwIHx8IHgg PiAyNTUpIHsJLyogTm8gdmFsaWQgZGlnaXRzPyAqLwotCSAgICAqcyA9IHA7CQkJLyogcG9pbnQg YWZ0ZXIgaXQgKi8KLQkgICAgcmV0dXJuKC0xKTsJCQkvKiByZXR1cm4gZmFpbHVyZS4gKi8KLQl9 Ci0gICAgfSBlbHNlIGlmIChyYWRpeCA9PSAxNikgewkJLyogU3BlY2lhbCBjYXNlIGZvciBoZXgg Ki8KLQlpZiAoKHggPSB1bmhleCgqcCsrKSkgPCAwKSB7ICpzID0gcCAtIDE7IHJldHVybigtMSk7 IH0KLQlpZiAoKHkgPSB1bmhleCgqcCsrKSkgPCAwKSB7ICpzID0gcCAtIDI7IHJldHVybigtMSk7 IH0KLQl4ID0gKCh4IDw8IDQpICYgMHhGMCkgfCAoeSAmIDB4MEYpOwotI2lmZGVmIE9TMgotICAg ICAgICB3aWRlcmVzdWx0ID0geDsKLSAgICAgICAgaWYgKCh5ID0gdW5oZXgoKnApKSA+PSAwKSB7 Ci0gICAgICAgICAgIHArKzsKLQkgICB3aWRlcmVzdWx0ID0gKCh4IDw8IDQpICYgMHhGRjApIHwg KHkgJiAweDBGKTsKLSAgICAgICAgICAgeCA9IHdpZGVyZXN1bHQgJiAyNTU7Ci0gICAgICAgIH0K LSNlbmRpZiAvKiBPUzIgKi8KLSAgICB9IGVsc2UgeCA9IC0xOwotICAgIGlmIChicmFjZSAmJiAq cCA9PSAnfScgJiYgeCA+IC0xKQkvKiBQb2ludCBwYXN0IGNsb3NpbmcgYnJhY2UsIGlmIGFueSAq LwotICAgICAgcCsrOwotICAgICpzID0gcDsJCQkJLyogUG9pbnQgdG8gbmV4dCBjaGFyIGFmdGVy IHNlcXVlbmNlICovCi0gICAgcmV0dXJuKHgpOwkJCQkvKiBSZXR1cm4gdmFsdWUgb2Ygc2VxdWVu Y2UgKi8KLX0KLQotaW50CQkJCQkvKiBDb252ZXJ0IGhleCBzdHJpbmcgdG8gaW50ICovCi0jaWZk ZWYgQ0tfQU5TSUMKLXVuaGV4KGNoYXIgeCkKLSNlbHNlCi11bmhleCh4KSBjaGFyIHg7Ci0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLS8qIHVuaGV4ICovIHsKLQotICAgIGlmICh4ID49ICcwJyAmJiB4 IDw9ICc5JykJCS8qIDAtOSBpcyBvZmZzZXQgYnkgaGV4IDMwICovCi0gICAgICByZXR1cm4oeCAt IDB4MzApOwotICAgIGVsc2UgaWYgKHggPj0gJ0EnICYmIHggPD0gJ0YnKQkvKiBBLUYgb2Zmc2V0 IGJ5IGhleCAzNyAqLwotICAgICAgcmV0dXJuKHggLSAweDM3KTsKLSAgICBlbHNlIGlmICh4ID49 ICdhJyAmJiB4IDw9ICdmJykJLyogYS1mIG9mZnNldCBieSBoZXggNTcgKi8KLSAgICAgIHJldHVy bih4IC0gMHg1Nyk7CQkJLyogKG9idmlvdXNseSBBU0NJSSBkZXBlbmRlbnQpICovCi0gICAgZWxz ZSByZXR1cm4oLTEpOwotfQotCi0vKiAgTCBPIE8gSyBVIFAgIC0tICBMb29rdXAgdGhlIHN0cmlu ZyBpbiB0aGUgZ2l2ZW4gYXJyYXkgb2Ygc3RyaW5ncyAgKi8KLQotLyoKLSAgQ2FsbCB0aGlzIHdh eTogIHYgPSBsb29rdXAodGFibGUsd29yZCxuLCZ4KTsKLQotICAgIHRhYmxlIC0gYSAnc3RydWN0 IGtleXRhYicgdGFibGUuCi0gICAgd29yZCAgLSB0aGUgdGFyZ2V0IHN0cmluZyB0byBsb29rIHVw IGluIHRoZSB0YWJsZS4KLSAgICBuICAgICAtIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhl IHRhYmxlLgotICAgIHggICAgIC0gYWRkcmVzcyBvZiBhbiBpbnRlZ2VyIGZvciByZXR1cm5pbmcg dGhlIHRhYmxlIGFycmF5IGluZGV4LAotCSAgICBvciBOVUxMIGlmIHlvdSBkb24ndCBuZWVkIGEg dGFibGUgaW5kZXguCi0KLSAgVGhlIGtleXdvcmQgdGFibGUgbXVzdCBiZSBhcnJhbmdlZCBpbiBh c2NlbmRpbmcgYWxwaGFiZXRpY2FsIG9yZGVyOwotICBhbHBoYWJldGljIGNhc2UgZG9lc24ndCBt YXR0ZXIgYnV0IGxldHRlcnMgYXJlIHRyZWF0ZWQgYXMgbG93ZXJjYXNlCi0gIGZvciBwdXJwb3Nl cyBvZiBvcmRlcmluZzsgdGh1cyAiXiIgYW5kICJfIiBjb21lICpiZWZvcmUqIHRoZSBsZXR0ZXJz LAotICBub3QgYWZ0ZXIgdGhlbS4KLQotICBSZXR1cm5zIHRoZSBrZXl3b3JkJ3MgYXNzb2NpYXRl ZCB2YWx1ZSAoemVybyBvciBncmVhdGVyKSBpZiBmb3VuZCwKLSAgd2l0aCB0aGUgdmFyaWFibGUg eCBzZXQgdG8gdGhlIGtleXdvcmQtdGFibGUgaW5kZXguICBJZiBpcyBsb29rdXAoKQotICBpcyBu b3Qgc3VjY2Vzc2Z1bCwgaXQgcmV0dXJuczoKLQotICAgLTMgaWYgbm90aGluZyB0byBsb29rIHVw ICh0YXJnZXQgd2FzIG51bGwpLAotICAgLTIgaWYgYW1iaWd1b3VzLAotICAgLTEgaWYgbm90IGZv dW5kLgotCi0gIEEgbWF0Y2ggaXMgc3VjY2Vzc2Z1bCBpZiB0aGUgdGFyZ2V0IG1hdGNoZXMgYSBr ZXl3b3JkIGV4YWN0bHksIG9yIGlmCi0gIHRoZSB0YXJnZXQgaXMgYSBwcmVmaXggb2YgZXhhY3Rs eSBvbmUga2V5d29yZC4gIEl0IGlzIGFtYmlndW91cyBpZiB0aGUKLSAgdGFyZ2V0IG1hdGNoZXMg dHdvIG9yIG1vcmUga2V5d29yZHMgZnJvbSB0aGUgdGFibGUuCi0KLSAgTG9va3VwKCkgaXMgdGhl IGNyaXRpY2FsIHJvdXRpbmUgaW4gc2NyaXB0cyBhbmQgc28gaXMgb3B0aW1pemVkIHdpdGggYQot ICBzaW1wbGUgc3RhdGljIGNhY2hlIHBsdXMgc29tZSBvdGhlciB0cmlja3MuICBNYXliZSBpdCBj b3VsZCBiZSBpbXByb3ZlZAotICBmdXJ0aGVyIHdpdGggYmluYXJ5IHNlYXJjaCBvciBoYXNoIHRl Y2huaXF1ZXMgYnV0IEkgZG91YnQgaXQgc2luY2UgbW9zdAotICBrZXl3b3JkIHRhYmxlcyBhcmUg ZmFpcmx5IHNob3J0LgotKi8KLQotI2lmZGVmIFVTRV9MVUNBQ0hFCQkJLyogTG9va3VwIGNhY2hl ICovCi1leHRlcm4gaW50IGx1c2l6ZTsJCQkvKiAoaW5pdGlhbGl6ZWQgaW4gY2t1dXM1LmMpICov Ci1leHRlcm4gY2hhciAqIGx1Y21kW107Ci1leHRlcm4gaW50IGx1dmFsW107Ci1leHRlcm4gaW50 IGx1aWR4W107Ci1leHRlcm4gc3RydWN0IGtleXRhYiAqIGx1dGFiW107Ci1sb25nIGx1aGl0cyA9 IDBMOwotbG9uZyBsdWNhbGxzID0gMEw7Ci1sb25nIHh4aGl0cyA9IDBMOwotbG9uZyBsdWxvb3Ag PSAwTDsKLSNlbmRpZiAvKiBVU0VfTFVDQUNIRSAqLwotCi1pbnQKLWxvb2t1cCh0YWJsZSxjbWQs bix4KSBjaGFyICpjbWQ7IHN0cnVjdCBrZXl0YWIgdGFibGVbXTsgaW50IG4sICp4OyB7Ci0KLSAg ICByZWdpc3RlciBpbnQgaSwgbTsKLSAgICBpbnQgdiwgbGVuLCBjbWRsZW4gPSAwOwotICAgIGNo YXIgYyA9IE5VTCwgYzEsICpzOwotCi0vKiBHZXQgMXN0IGNoYXIgb2Ygc2VhcmNoIG9iamVjdCwg aWYgaXQncyBudWxsIHJldHVybiAtMy4gKi8KLQotICAgIGlmICghY21kIHx8IG4gPCAxKQkJCS8q IERlZmVuc2UgZGUgbnVsbGFyZyAqLwotICAgICAgcmV0dXJuKC0zKTsKLSAgICBjMSA9ICpjbWQ7 CQkJCS8qIEZpcnN0IGNoYXJhY3RlciAqLwotICAgIGlmICghYzEpCQkJCS8qIE1ha2Ugc3VyZSB0 aGVyZSBpcyBvbmUgKi8KLSAgICAgIHJldHVybigtMyk7Ci0gICAgaWYgKGlzdXBwZXIoYzEpKQkJ CS8qIElmIGxldHRlciBtYWtlIGl0IGxvd2VyY2FzZSAqLwotICAgICAgYzEgPSB0b2xvd2VyKGMx KTsKLQotI2lmZGVmIFVTRV9MVUNBQ0hFCQkJLyogbG9va3VwKCkgY2FjaGUgKi8KLSAgICBtID0g bHVzaXplOwotICAgIGx1Y2FsbHMrKzsJCQkJLyogQ291bnQgdGhpcyBsb29rdXAoKSBjYWxsICov Ci0gICAgZm9yIChpID0gMDsgaSA8IG07IGkrKykgewkJLyogTG9vcCB0aHJ1IGNhY2hlICovCi0J aWYgKCoobHVjbWRbaV0pID09IGMxKSB7CS8qIFNhbWUgYXMgMXN0IGNoYXIgb2Ygc2VhcmNoIGl0 ZW0/ICovCi0JICAgIGlmIChsdXRhYltpXSA9PSB0YWJsZSkgewkvKiBZZXMgLSBzYW1lIHRhYmxl IHRvbz8gKi8KLQkJaWYgKCFzdHJjbXAoY21kLGx1Y21kW2ldKSkgeyAvKiBZZXMgLSBjb21wYXJl ICovCi0JCSAgICBpZiAoeCkgKnggPSBsdWlkeFtpXTsgICAgLyogTWF0Y2ggLSByZXR1cm4gaW5k ZXggKi8KLQkJICAgIGx1aGl0cysrOyAgICAgICAgICAgICAgICAvKiBDb3VudCBjYWNoZSBoaXQg Ki8KLQkJICAgIHJldHVybihsdXZhbFtpXSk7ICAgICAgICAvKiBSZXR1cm4gYXNzb2NpYXRlZCB2 YWx1ZSAqLwotCQl9Ci0JICAgIH0KLQl9Ci0gICAgfQotI2VuZGlmIC8qIFVTRV9MVUNBQ0hFICov Ci0KLS8qIE5vdCBudWxsLCBub3QgaW4gY2FjaGUsIGxvb2sgaXQgdXAgKi8KLQotICAgIHMgPSBj bWQ7Ci0gICAgd2hpbGUgKCpzKyspIGNtZGxlbisrOwkJLyogTGVuZ3RoIG9mIHRhcmdldCAqLwot LyoKLSAgUXVpY2sgYmluYXJ5IHNlYXJjaCB0byBmaW5kIGxhc3QgdGFibGUgZW50cnkgd2hvc2Ug Zmlyc3QgY2hhcmFjdGVyIGlzCi0gIGxleGljYWxseSBsZXNzIHRoYW4gdGhlIGZpcnN0IGNoYXJh Y3RlciBvZiB0aGUgc2VhcmNoIG9iamVjdC4gIFRoaXMgaXMKLSAgdGhlIHN0YXJ0aW5nIHBvaW50 IG9mIHRoZSBuZXh0IGxvb3AsIHdoaWNoIG11c3QgZ28gaW4gc2VxdWVuY2Ugc2luY2UgaXQKLSAg Y29tcGFyZXMgYWRqYWNlbnQgdGFibGUgZW50cmllcy4KLSovCi0gICAgaWYgKG4gPCA1KSB7CQkJ LyogTm90IHdvcnRoIGl0IGZvciBzbWFsbCB0YWJsZXMgKi8KLQlpID0gMDsKLSAgICB9IGVsc2Ug ewotCWludCBsbyA9IDA7Ci0JaW50IGhpID0gbjsKLQlpbnQgY291bnQgPSAwOwotCXdoaWxlIChs bysyIDwgaGkgJiYgKytjb3VudCA8IDEyKSB7Ci0JICAgIGkgPSBsbyArICgoaGkgLSBsbykgLyAy KTsKLQkgICAgYyA9ICoodGFibGVbaV0ua3dkKTsKLQkgICAgaWYgKGlzdXBwZXIoYykpIGMgPSB0 b2xvd2VyKGMpOwotCSAgICBpZiAoYyA8IGMxKSB7Ci0JCWxvID0gaTsKLQkgICAgfSBlbHNlIHsK LQkJaGkgPSBpOwotCSAgICB9Ci0JfQotCWkgPSAoYyA8IGMxKSA/IGxvKzEgOiBsbzsKLSNpZmRl ZiBVU0VfTFVDQUNIRQotCWlmIChpID4gMCkgeHhoaXRzKys7Ci0jZW5kaWYgLyogVVNFX0xVQ0FD SEUgKi8KLSAgICB9Ci0gICAgZm9yICggOyBpIDwgbi0xOyBpKyspIHsKLSNpZmRlZiBVU0VfTFVD QUNIRQotCWx1bG9vcCsrOwotI2VuZGlmIC8qIFVTRV9MVUNBQ0hFICovCi0JdiA9IDA7Ci0JYyA9 ICoodGFibGVbaV0ua3dkKTsKLQlpZiAoYykgewotCSAgICBpZiAoaXN1cHBlcihjKSkgYyA9IHRv bG93ZXIoYyk7Ci0KLQkgICAgLyogVGhlIGZvbGxvd2luZyBpcyBhIGJpZyBwZXJmb3JtYW5jZSBi b29zdGVyIGJ1dCBtYWtlcyBpdCAqLwotCSAgICAvKiBhYnNvbHV0ZWx5IGVzc2VudGlhbCB0aGF0 IGFsbCBsb29rdXAoKSB0YWJsZXMgYXJlIGluIG9yZGVyLiAqLwotCi0JICAgIGlmIChjID4gYzEp CQkJLyogTGVhdmUgZWFybHkgaWYgcGFzdCBvdXIgbWFyayAqLwotCSAgICAgIHJldHVybigtMSk7 Ci0KLSNpZmRlZiBERUJVRwotCSAgICAvKiBVc2UgTE9HIERFQlVHIHRvIGNoZWNrICovCi0KLQkg ICAgaWYgKGRlYmxvZykgewotCQlpZiAoY2tzdHJjbXAodGFibGVbaV0ua3dkLHRhYmxlW2krMV0u a3dkLDAsMCkgPiAwKSB7Ci0JCSAgICBwcmludGYoIlRBQkxFIE9VVCBPRiBPUkRFUiBbJXNdIFsl c11cbiIsCi0JCQkgICB0YWJsZVtpXS5rd2QsdGFibGVbaSsxXS5rd2QpOwotCi0JCX0KLQkgICAg fQotI2VuZGlmIC8qIERFQlVHICovCi0KLQkgICAgaWYgKGMgPT0gYzEpIHsKLQkJbGVuID0gMDsK LQkJcyA9IHRhYmxlW2ldLmt3ZDsKLQkJd2hpbGUgKCpzKyspIGxlbisrOwotCQlpZiAoKGxlbiA9 PSBjbWRsZW4gJiYgIWNrc3RyY21wKHRhYmxlW2ldLmt3ZCxjbWQsbGVuLDApKSB8fAotCQkgICAg KCh2ID0gIWNrc3RyY21wKHRhYmxlW2ldLmt3ZCxjbWQsY21kbGVuLDApKSAmJgotCQkgICAgIGNr c3RyY21wKHRhYmxlW2krMV0ua3dkLGNtZCxjbWRsZW4sMCkpKSB7Ci0JCSAgICBpZiAoeCkgKngg PSBpOwotCQkgICAgcmV0dXJuKHRhYmxlW2ldLmt3dmFsKTsKLQkJfQotCSAgICB9IGVsc2UgdiA9 IDA7Ci0JfQotICAgICAgICBpZiAodikgewkJCS8qIEFtYmlndW91cyAqLwotCSAgICBpZiAoeCkg KnggPSBpOwkJLyogU2V0IGluZGV4IG9mIGZpcnN0IG1hdGNoICovCi0JICAgIHJldHVybigtMik7 Ci0JfQotICAgIH0KLQotLyogTGFzdCAob3Igb25seSkgZWxlbWVudCAqLwotCi0gICAgaWYgKCFj a3N0cmNtcCh0YWJsZVtuLTFdLmt3ZCxjbWQsY21kbGVuLDApKSB7Ci0gICAgICAgIGlmICh4KSAq eCA9IG4tMTsKLQkvKiBkZWJ1ZyhGMTExLCJsb29rdXAiLHRhYmxlW2ldLmt3ZCx0YWJsZSk7ICov Ci0gICAgICAgIHJldHVybih0YWJsZVtuLTFdLmt3dmFsKTsKLSAgICB9IGVsc2UgcmV0dXJuKC0x KTsKLX0KLQotLyoKLSAgeCBsIG8gbyBrIHUgcAotCi0gIExpa2UgbG9va3VwLCBidXQgcmVxdWly ZXMgYSBmdWxsIChidXQgY2FzZS1pbmRlcGVuZGVudCkgbWF0Y2gKLSAgYW5kIGRvZXMgTk9UIHJl cXVpcmUgdGhlIHRhYmxlIHRvIGJlIGluIG9yZGVyLgotKi8KLWludAoteGxvb2t1cCh0YWJsZSxj bWQsbix4KSBzdHJ1Y3Qga2V5dGFiIHRhYmxlW107IGNoYXIgKmNtZDsgaW50IG4sICp4OyB7Ci0g ICAgcmVnaXN0ZXIgaW50IGk7Ci0gICAgaW50IGxlbiwgY21kbGVuLCBvbmUgPSAwOwotICAgIHJl Z2lzdGVyIGNoYXIgYywgYzIsICogcywgKiBzMjsKLQotICAgIGlmICghY21kKSBjbWQgPSAiIjsJ CQkvKiBDaGVjayBhcmdzICovCi0gICAgaWYgKCEqY21kIHx8IG4gPCAxKSByZXR1cm4oLTMpOwot Ci0gICAgYyA9ICpjbWQ7CQkJCS8qIEZpcnN0IGNoYXIgb2Ygc3RyaW5nIHRvIGxvb2sgdXAgKi8K LSAgICBpZiAoISooY21kKzEpKSB7CQkJLyogU3BlY2lhbCBoYW5kbGluZyBmb3IgMS1jaGFyIG5h bWVzICovCi0JY21kbGVuID0gMTsKLQlpZiAoaXN1cHBlcihjKSkKLQkgIGMgPSB0b2xvd2VyKGMp OwotCW9uZSA9IDE7Ci0gICAgfSBlbHNlIHsKLQljbWRsZW4gPSAwOwotCXMgPSBjbWQ7Ci0Jd2hp bGUgKCpzKyspIGNtZGxlbisrOwotCWMgPSAqY21kOwotCWlmIChpc3VwcGVyKGMpKQotCSAgYyA9 IHRvbG93ZXIoYyk7Ci0gICAgfQotICAgIGlmIChjbWRsZW4gPCAxKQotICAgICAgcmV0dXJuKC0z KTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLQlzID0gdGFibGVbaV0ua3dkOwkJ LyogVGhpcyBlbnRyeSAqLwotCWlmICghcykgcyA9ICIiOwotCWlmICghKnMpIGNvbnRpbnVlOwkJ LyogRW1wdHkgdGFibGUgZW50cnkgKi8KLQljMiA9ICpzOwotCWlmIChpc3VwcGVyKGMyKSkgYzIg PSB0b2xvd2VyKGMyKTsKLQlpZiAoYyAhPSBjMikgY29udGludWU7CQkvKiBGaXJzdCBjaGFyIGRv ZXNuJ3QgbWF0Y2ggKi8KLQlpZiAob25lKSB7CQkJLyogTmFtZSBpcyBvbmUgY2hhciBsb25nICov Ci0JICAgIGlmICghKihzKzEpKSB7Ci0JCWlmICh4KSAqeCA9IGk7Ci0gICAgICAgICAgICAgICAg KmNtZCA9IGM7IAotCQlyZXR1cm4odGFibGVbaV0ua3d2YWwpOwkvKiBTbyBpcyB0YWJsZSBlbnRy eSAqLwotCSAgICB9Ci0JfSBlbHNlIHsJCQkvKiBPdGhlcndpc2UgZG8gc3RyaW5nIGNvbXBhcmlz b24gKi8KLQkgICAgczIgPSBzOwotCSAgICBsZW4gPSAwOwotCSAgICB3aGlsZSAoKnMyKyspIGxl bisrOwotCSAgICBpZiAobGVuID09IGNtZGxlbiAmJiAhY2tzdHJjbXAocyxjbWQsLTEsMCkpIHsK LQkJaWYgKHgpICp4ID0gaTsKLQkJcmV0dXJuKHRhYmxlW2ldLmt3dmFsKTsKLQkgICAgfQotCX0K LSAgICB9Ci0gICAgcmV0dXJuKC0xKTsKLX0KLQotLyogUmV2ZXJzZSBsb29rdXAgKi8KLQotY2hh ciAqCi1ybG9va3VwKHRhYmxlLG4seCkgc3RydWN0IGtleXRhYiB0YWJsZVtdOyBpbnQgbiwgeDsg ewotICAgIGludCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgaWYg KHRhYmxlW2ldLmt3dmFsID09IHgpCi0JICByZXR1cm4odGFibGVbaV0ua3dkKTsKLSAgICB9Ci0g ICAgcmV0dXJuKE5VTEwpOwotfQotCi0jaWZuZGVmIE5PSUNQCi1pbnQKLWNtZHNxdW8oeCkgaW50 IHg7IHsKLSAgICBxdW90aW5nID0geDsKLSAgICByZXR1cm4oMSk7Ci19Ci0KLWludAotY21kZ3F1 bygpIHsKLSAgICByZXR1cm4ocXVvdGluZyk7Ci19Ci0jZW5kaWYgLyogTk9JQ1AgKi8KCmRpZmYg LS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWNtZC5oIGIv Y2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VjbWQuaApkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggN2NkNGNlZC4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4z MDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWNtZC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzEy ICswLDAgQEAKLS8qICBDIEsgVSBDIE0gRCAuIEggIC0tICBIZWFkZXIgZmlsZSBmb3IgVW5peCBj bWQgcGFja2FnZSAgKi8KLQotLyoKLSAgQXV0aG9yOiBGcmFuayBkYSBDcnV6IDxmZGNAY29sdW1i aWEuZWR1PgotICBDb2x1bWJpYSBVbml2ZXJzaXR5IEtlcm1pdCBQcm9qZWN0LCBOZXcgWW9yayBD aXR5LgotCi0gIENvcHlyaWdodCAoQykgMTk4NSwgMjAwOSwKLSAgICBUcnVzdGVlcyBvZiBDb2x1 bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgotICAgIEFsbCByaWdodHMg cmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCi0gICAg Y29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQg cGVybWlzc2lvbnMuCi0qLwotCi0jaWZuZGVmIENLVUNNRF9ICi0jZGVmaW5lIENLVUNNRF9ICi0K LS8qIENvbW1hbmQgcmVjYWxsICovCi0KLSNpZmRlZiBwZHAxMQkJCQkvKiBOb3QgZW5vdWdoIHJv b20gZm9yIHRoaXMgKi8KLSNpZm5kZWYgTk9SRUNBTEwKLSNkZWZpbmUgTk9SRUNBTEwKLSNlbmRp ZiAvKiBOT1JFQ0FMTCAqLwotI2VuZGlmIC8qIHBkcDExICovCi0KLSNpZmRlZiBEWU5BTUlDCQkJ CS8qIER5bmFtaWMgY29tbWFuZCBidWZmZXJzICovCi0vKgotICBVc2UgbWFsbG9jKCkgdG8gYWxs b2NhdGUgdGhlIG1hbnkgY29tbWFuZC1yZWxhdGVkIGJ1ZmZlcnMgaW4gY2t1Y21kLmMuCi0qLwot I2lmbmRlZiBEQ01EQlVGCi0jaWZuZGVmIE5PUkVDQUxMCi0jZGVmaW5lIE5PUkVDQUxMCi0jZW5k aWYgLyogTk9SRUNBTEwgKi8KLSNlbmRpZiAvKiBEQ01EQlVGICovCi0KLSNpZm5kZWYgTk9SRUNB TEwKLSNkZWZpbmUgQ0tfUkVDQUxMCi0jZWxzZQotI2lmZGVmIENLX1JFQ0FMTAotI3VuZGVmIENL X1JFQ0FMTAotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotI2VuZGlmIC8qIE5PUkVDQUxMICovCi0j ZWxzZQotI2lmbmRlZiBOT1JFQ0FMTAotI2RlZmluZSBOT1JFQ0FMTAotI2VuZGlmIC8qICBOT1JF Q0FMTCAqLwotI2VuZGlmIC8qIERZTkFNSUMgKi8KLQotI2lmZGVmIE5PUkVDQUxMCi0jaWZkZWYg Q0tfUkVDQUxMCi0jdW5kZWYgQ0tfUkVDQUxMCi0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0jZW5k aWYgLyogTk9SRUNBTEwgKi8KLQotI2lmZGVmIE5PUkVDQUxMCi0jaWZuZGVmIE5PQVJST1dLRVlT Ci0jZGVmaW5lIE5PQVJST1dLRVlTCi0jZW5kaWYgLyogTk9BUlJPV0tFWVMgKi8KLSNlbmRpZiAv KiBOT1JFQ0FMTCAqLwotCi0vKiBTcGVjaWFsIGdldGNoYXJzICovCi0KLSNpZmRlZiBWTVMKLSNp ZmRlZiBnZXRjaGFyCQkJCS8qIFRoaXMgaXMgZm9yIFZNUyBHQ0MgKi8KLSN1bmRlZiBnZXRjaGFy Ci0jZW5kaWYgLyogZ2V0Y2hhciAqLwotI2RlZmluZSBnZXRjaGFyKCkgICB2bXNfZ2V0Y2hhcigp Ci1pbnQgdm1zX2dldGNoYXIodm9pZCk7Ci0jZW5kaWYgLyogVk1TICovCi0KLSNpZmRlZiBhZWdp cwotI3VuZGVmIGdldGNoYXIKLSNkZWZpbmUgZ2V0Y2hhcigpICAgY29uaW5jKDApCi0jZW5kaWYg LyogYWVnaXMgKi8KLQotI2lmZGVmIEFNSUdBCi0jdW5kZWYgZ2V0Y2hhcgotI2RlZmluZSBnZXRj aGFyKCkgY29uaW5jKDApCi0jZW5kaWYgLyogQU1JR0EgKi8KLQotI2lmZGVmIFBsYW45Ci0jdW5k ZWYgZ2V0Y2hhcgotI2RlZmluZSBnZXRjaGFyKCkgY29uaW5jKDApCi0jdW5kZWYgcHV0Y2hhcgot I2RlZmluZSBwdXRjaGFyKGMpIGNvbm9jKGMpCi0jdW5kZWYgcHJpbnRmCi0jZGVmaW5lIHByaW50 ZiBjb25wcmludAotI2VuZGlmIC8qIFBsYW45ICovCi0KLS8qIFNpemVzIG9mIHRoaW5ncyAqLwot Ci0jaWZuZGVmIENNRERFUAotI2lmZGVmIEJJR0JVRk9LCi0jZGVmaW5lIENNRERFUCAgNjQJCQkv KiBNYXhpbXVtIGNvbW1hbmQgcmVjdXJzaW9uIGRlcHRoICovCi0jZWxzZQotI2RlZmluZSBDTURE RVAgIDIwCi0jZW5kaWYgLyogQklHQlVGT0sgKi8KLSNlbmRpZiAvKiBDTURERVAgKi8KLSNkZWZp bmUgSExQTFcgICA3OAkJCS8qIFdpZHRoIG9mID8taGVscCBsaW5lICovCi0jZGVmaW5lIEhMUENX ICAgMTkJCQkvKiBXaWR0aCBvZiA/LWhlbHAgY29sdW1uICovCi0jZGVmaW5lIEhMUEJMICAxMDAJ CQkvKiBIZWxwIHN0cmluZyBidWZmZXIgbGVuZ3RoICovCi0jaWZkZWYgQklHQlVGT0sKLSNkZWZp bmUgQVRNQkwgMTAyMzgJCQkvKiBDb21tYW5kIGF0b20gYnVmZmVyIGxlbmd0aCovCi0jZWxzZQot I2lmZGVmIE5PU1BMCi0jZGVmaW5lIEFUTUJMICAyNTYKLSNlbHNlCi0jZGVmaW5lIEFUTUJMICAx MDI0Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSNlbmRpZiAvKiBCSUdCVUZPSyAqLwotCi0jaWZuZGVm IENNREJMCi0jaWZkZWYgTk9TUEwKLS8qIE5vIHNjcmlwdCBwcm9ncmFtbWluZyBsYW5ndWFnZSwg c2F2ZSBzb21lIHNwYWNlICovCi0jZGVmaW5lIENNREJMIDYwOAkJCS8qIENvbW1hbmQgYnVmZmVy IGxlbmd0aCAqLwotI2Vsc2UKLSNpZmRlZiBCSUdCVUZPSwotI2RlZmluZSBDTURCTCAzMjc2Mwot I2Vsc2UKLSNkZWZpbmUgQ01EQkwgNDA5MgotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5P U1BMICovCi0jZW5kaWYgLyogQ01EQkwgKi8KLQotLyogU3BlY2lhbCBjaGFyYWN0ZXJzICovCi0K LSNkZWZpbmUgUkRJUyAwMDIyCQkJLyogUmVkaXNwbGF5ICAgKF5SKSAqLwotI2RlZmluZSBMREVM IDAwMjUJCQkvKiBEZWxldGUgbGluZSAoXlUpICovCi0jZGVmaW5lIFdERUwgMDAyNwkJCS8qIERl bGV0ZSB3b3JkICheVykgKi8KLSNpZmRlZiBDS19SRUNBTEwKLSNkZWZpbmUgQ19VUCAwMDIwCQkJ LyogR28gVXAgaW4gcmVjYWxsIGJ1ZmZlciAoXlApICovCi0jZGVmaW5lIENfVVAyIDAwMDIJCQkv KiBBbHRlcm5hdGUgR28gVXAgKF5CKSBmb3IgVk1TICovCi0jZGVmaW5lIENfRE4gMDAxNgkJCS8q IEdvIERvd24gaW4gcmVjYWxsIGJ1ZmZlciAoXk4pICovCi0jZW5kaWYgLyogQ0tfUkVDQUxMICov Ci0KLS8qIEtleXdvcmQgZmxhZ3MgKGJpdHMsIHBvd2VycyBvZiAyKSAqLwotCi0jZGVmaW5lIENN X0lOViAxCQkJLyogSW52aXNpYmxlIGtleXdvcmQgKi8KLSNkZWZpbmUgQ01fQUJSIDIJCQkvKiBB YmJyZXZpYXRpb24gZm9yIGFub3RoZXIga2V5d29yZCAqLwotI2RlZmluZSBDTV9ITFAgNAkJCS8q IEhlbHAtb25seSBrZXl3b3JkICovCi0jZGVmaW5lIENNX0FSRyA4CQkJLyogQW4gYXJndW1lbnQg aXMgcmVxdWlyZWQgKi8KLSNkZWZpbmUgQ01fTk9SIDE2CQkJLyogTm8gcmVjYWxsIGZvciB0aGlz IGNvbW1hbmQgKi8KLSNkZWZpbmUgQ01fUFJFIDMyCQkJLyogTG9uZy1mb3JtIGNtZGxpbmUgYXJn IGZvciBwcmVzY2FuICovCi0jZGVmaW5lIENNX1BTSCA2NAkJCS8qIENvbW1hbmQgZGlzYWJsZWQg aWYgbm9wdXNoICovCi0jZGVmaW5lIENNX0xPQyAxMjgJCQkvKiBDb21tYW5kIGRpc2FibGVkIGlm IG5vbG9jYWwgKi8KLQotLyoKLSAgQSBsb25nLWZvcm0gY29tbWFuZCBsaW5lIG9wdGlvbiBpcyBh IGtleXdvcmQgdXNpbmcgdGhlIHJlZ3VsYXIgc3RydWN0IGtleXRhYgotICBhbmQgbG9va3VwIG1l Y2hhbmlzbXMuICBGbGFncyB0aGF0IG1ha2Ugc2Vuc2UgaW4gdGhpcyBjb250ZXh0IGFyZSBDTV9B UkcsCi0gIGluZGljYXRpbmcgdGhpcyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQgKG9wZXJh bmQpLCBhbmQgQ01fUFJFLCB3aGljaAotICBtZWFucyB0aGlzIG9wdGlvbiBtdXN0IGJlIHByb2Nl c3NlZCBiZWZvcmUgdGhlIGluaXRpYWxpemF0aW9uIGZpbGUuICBUaGUKLSAgYWJzZW5jZSBvZiBD TV9QUkUgbWVhbnMgdGhlIG9wdGlvbiBpcyB0byBiZSBwcm9jZXNzZWQgYWZ0ZXIgdGhlCi0gIGlu aXRpYWxpemF0aW9uIGZpbGUgaW4gdGhlIG5vcm1hbCBtYW5uZXIuCi0qLwotCi0vKiBUb2tlbiBm bGFncyAobnVtYmVycykgKi8KLQotI2RlZmluZSBDTVRfQ09NIDAJCQkvKiBDb21tZW50ICg7IG9y ICMpICovCi0jZGVmaW5lIENNVF9TSEUgMQkJCS8qIFNoZWxsIGVzY2FwZSAoISkgKi8KLSNkZWZp bmUgQ01UX0xCTCAyCQkJLyogTGFiZWwgKDopICovCi0jZGVmaW5lIENNVF9GSUwgMwkJCS8qIElu ZGlyZWN0IGZpbGVzcGVjIChAKSAobm90IHVzZWQpICovCi0KLS8qIFBhdGggc2VwYXJhdG9yIGZv ciBwYXRoIHNlYXJjaGVzICovCi0KLSNpZmRlZiBPUzIKLSNkZWZpbmUgUEFUSFNFUCAnOycKLSNl bHNlCi0jaWZkZWYgVU5JWAotI2RlZmluZSBQQVRIU0VQICc6JwotI2Vsc2UKLSNkZWZpbmUgUEFU SFNFUCAnLCcKLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogT1MyICovCi0KLSNpZm5kZWYg Q0tfS0VZVEFCCi0jZGVmaW5lIENLX0tFWVRBQgotCi0vKiBLZXl3b3JkIFRhYmxlIFRlbXBsYXRl IHBlcmhhcHMgYWxyZWFkeSBkZWZpbmVkIGluIGNrY2RlYi5oICovCi0KLXN0cnVjdCBrZXl0YWIg ewkJCQkvKiBLZXl3b3JkIHRhYmxlICovCi0gICAgY2hhciAqa3dkOwkJCQkvKiBQb2ludGVyIHRv IGtleXdvcmQgc3RyaW5nICovCi0gICAgaW50IGt3dmFsOwkJCQkvKiBBc3NvY2lhdGVkIHZhbHVl ICovCi0gICAgaW50IGZsZ3M7CQkJCS8qIEZsYWdzIChhcyBkZWZpbmVkIGFib3ZlKSAqLwotfTsK LSNlbmRpZiAvKiBDS19LRVlUQUIgKi8KLQotLyogU3RyaW5nIHByZXByb2Nlc3NpbmcgZnVuY3Rp b24gKi8KLQotI2lmZGVmIENLX0FOU0lDCQkJCS8qIEFOU0kgQyAqLwotI2lmZGVmIE1fU1lTVgkJ CQkvKiBTQ08gTWljcm9zb2Z0IEMgd2FudHMgbm8gYXJncyAqLwotdHlwZWRlZiBpbnQgKCp4eF9z dHJwKSgpOwotI2Vsc2UKLXR5cGVkZWYgaW50ICgqeHhfc3RycCkoY2hhciAqLCBjaGFyICoqLCBp bnQgKik7Ci0jZW5kaWYgLyogTV9TWVNWICovCi0jZWxzZQkJCQkJLyogTm90IEFOU0kgQyAqLwot dHlwZWRlZiBpbnQgKCp4eF9zdHJwKSgpOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0KLS8qIEZM RERCIHN0cnVjdCAqLwotCi10eXBlZGVmIHN0cnVjdCBGREIgewotICAgIGludCBmY29kZTsJCQkJ LyogRnVuY3Rpb24gY29kZSAqLwotICAgIGNoYXIgKiBobHBtc2c7CQkJLyogSGVscCBtZXNzYWdl ICovCi0gICAgY2hhciAqIGRmbHQ7CQkJLyogRGVmYXVsdCAqLwotICAgIGNoYXIgKiBzZGF0YTsJ CQkvKiBBZGRpdGlvbmFsIHN0cmluZyBkYXRhICovCi0gICAgaW50IG5kYXRhMTsJCQkJLyogQWRk aXRpb25hbCBudW1lcmljIGRhdGEgMSAqLwotICAgIGludCBuZGF0YTI7CQkJCS8qIEFkZGl0aW9u YWwgbnVtZXJpYyBkYXRhIDIgKi8KLSAgICB4eF9zdHJwIHNwZjsJCQkvKiBTdHJpbmcgcHJvY2Vz c2luZyBmdW5jdGlvbiAqLwotICAgIHN0cnVjdCBrZXl0YWIgKiBrd2R0Ymw7CQkvKiBLZXl3b3Jk IHRhYmxlICovCi0gICAgc3RydWN0IEZEQiAqIG54dGZkYjsJCS8qIFBvaW50ZXIgdG8gbmV4dCBh bHRlcm5hdGl2ZSAqLwotfSBmZGI7Ci0KLXR5cGVkZWYgc3RydWN0IE9GREIgewotICAgIHN0cnVj dCBGREIgKiBmZGJhZGRyOwkJLyogQWRkcmVzcyBvZiBzdWNjZWVkaW5nIEZEQiBzdHJ1Y3QgKi8K LSAgICBpbnQgZmNvZGU7CQkJCS8qIEZ1bmN0aW9uIGNvZGUgKi8KLSAgICBjaGFyICogc3Jlc3Vs dDsJCQkvKiBTdHJpbmcgcmVzdWx0ICovCi0gICAgaW50IG5yZXN1bHQ7CQkJLyogSW50ZWdlciBy ZXN1bHQgKi8KLSAgICBpbnQga2ZsYWdzOwkJCQkvKiBLZXl3b3JkIGZsYWdzIGlmIGFueSAqLwot ICAgIENLX09GRl9UIHdyZXN1bHQ7CQkJLyogTG9uZyBpbnRlZ2VyICgid2lkZSIpIHJlc3VsdCAq LwotfSBvZmRiOwotCi0jaWZuZGVmIENLVUNNRF9DCi1leHRlcm4gc3RydWN0IE9GREIgY21yZXN1 bHQ7Ci0jZW5kaWYgLyogQ0tVQ01EX0MgKi8KLQotLyogQ29kZXMgZm9yIHByaW1hcnkgcGFyc2lu ZyBmdW5jdGlvbiAgKi8KLQotI2RlZmluZSBfQ01OVU0gMAkJCS8qIE51bWJlciAqLwotI2RlZmlu ZSBfQ01PRkkgMQkJCS8qIE91dHB1dCBmaWxlICovCi0jZGVmaW5lIF9DTUlGSSAyCQkJLyogSW5w dXQgZmlsZSAqLwotI2RlZmluZSBfQ01GTEQgMwkJCS8qIEFyYml0cmFyeSBmaWVsZCAqLwotI2Rl ZmluZSBfQ01UWFQgNAkJCS8qIFRleHQgc3RyaW5nICovCi0jZGVmaW5lIF9DTUtFWSA1CQkJLyog S2V5d29yZCAqLwotI2RlZmluZSBfQ01DRk0gNgkJCS8qIENvbmZpcm1hdGlvbiAqLwotI2RlZmlu ZSBfQ01EQVQgNwkJCS8qIERhdGUvdGltZSAqLwotI2RlZmluZSBfQ01OVVcgOAkJCS8qIFdpZGUg dmVyc2lvbiBvZiBjbW51bSAqLwotCi0vKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCi0KLV9QUk9U T1RZUCggaW50IHh4ZXNjLCAoY2hhciAqKikgKTsKLV9QUk9UT1RZUCggaW50IGNtcmluaSwgKGlu dCkgKTsKLV9QUk9UT1RZUCggVk9JRCBjbXNldHAsIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIFZP SUQgY21zYXZwLCAoY2hhciBbXSwgaW50KSApOwotX1BST1RPVFlQKCBjaGFyICogY21nZXRwLCAo dm9pZCkgKTsKLV9QUk9UT1RZUCggVk9JRCBwcm9tcHQsICh4eF9zdHJwKSApOwotX1BST1RPVFlQ KCBWT0lEIHB1c2hjbWQsIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIFZPSUQgY21yZXMsICh2b2lk KSApOwotX1BST1RPVFlQKCBWT0lEIGNtaW5pLCAoaW50KSApOwotX1BST1RPVFlQKCBpbnQgY21n YnJrLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IGNtZ2t3ZmxncywgKHZvaWQpICk7Ci1fUFJP VE9UWVAoIGludCBjbXB1c2gsICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgY21wb3AsICh2b2lk KSApOwotX1BST1RPVFlQKCBWT0lEIHVudGFiLCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBpbnQg Y21udW0sIChjaGFyICosIGNoYXIgKiwgaW50LCBpbnQgKiwgeHhfc3RycCApICk7Ci1fUFJPVE9U WVAoIGludCBjbW51bXcsIChjaGFyICosIGNoYXIgKiwgaW50LCBDS19PRkZfVCAqLCB4eF9zdHJw ICkgKTsKLV9QUk9UT1RZUCggaW50IGNtb2ZpLCAoY2hhciAqLCBjaGFyICosIGNoYXIgKiosIHh4 X3N0cnAgKSApOwotX1BST1RPVFlQKCBpbnQgY21pZmksIChjaGFyICosIGNoYXIgKiwgY2hhciAq KiwgaW50ICosIHh4X3N0cnAgKSApOwotX1BST1RPVFlQKCBpbnQgY21pb2ZpLCAoY2hhciAqLCBj aGFyICosIGNoYXIgKiosIGludCAqLCB4eF9zdHJwICkgKTsKLV9QUk9UT1RZUCggaW50IGNtaWZp cCwoY2hhciAqLCBjaGFyICosIGNoYXIgKiosIGludCAqLCBpbnQsIGNoYXIgKiwgeHhfc3RycCAp KTsKLV9QUk9UT1RZUCggaW50IGNtaWZpMiwoY2hhciAqLGNoYXIgKixjaGFyICoqLGludCAqLGlu dCxjaGFyICoseHhfc3RycCxpbnQgKSk7Ci1fUFJPVE9UWVAoIGludCBjbWRpciwgKGNoYXIgKiwg Y2hhciAqLCBjaGFyICoqLCB4eF9zdHJwICkgKTsKLV9QUk9UT1RZUCggaW50IGNtZGlycCwgKGNo YXIgKiwgY2hhciAqLCBjaGFyICoqLCBjaGFyICosIHh4X3N0cnAgKSApOwotX1BST1RPVFlQKCBp bnQgY21mbGQsIChjaGFyICosIGNoYXIgKiwgY2hhciAqKiwgeHhfc3RycCApICk7Ci1fUFJPVE9U WVAoIGludCBjbXR4dCwgKGNoYXIgKiwgY2hhciAqLCBjaGFyICoqLCB4eF9zdHJwICkgKTsKLV9Q Uk9UT1RZUCggaW50IGNta2V5LCAgKHN0cnVjdCBrZXl0YWIgW10sIGludCwgY2hhciAqLCBjaGFy ICosIHh4X3N0cnApICk7Ci1fUFJPVE9UWVAoIGludCBjbWtleXgsIChzdHJ1Y3Qga2V5dGFiIFtd LCBpbnQsIGNoYXIgKiwgY2hhciAqLCB4eF9zdHJwKSApOwotX1BST1RPVFlQKCBpbnQgY21rZXky LChzdHJ1Y3Qga2V5dGFiIFtdLGludCxjaGFyICosY2hhciAqLGNoYXIgKix4eF9zdHJwLGludCkp OwotX1BST1RPVFlQKCBpbnQgY21zd2ksICAoc3RydWN0IGtleXRhYiBbXSwgaW50LCBjaGFyICos IGNoYXIgKiwgeHhfc3RycCkgKTsKLV9QUk9UT1RZUCggaW50IGNtZGF0ZSwoY2hhciAqLCBjaGFy ICosIGNoYXIgKiosIGludCwgeHhfc3RycCkgKTsKLV9QUk9UT1RZUCggY2hhciAqIGNtcGVlaywg KHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBjbWZkYiwgKHN0cnVjdCBGREIgKikgKTsKLV9QUk9U T1RZUCggVk9JRCBjbWZkYmksIChzdHJ1Y3QgRkRCICosCi0JCQlpbnQsIGNoYXIgKiwgY2hhciAq LCBjaGFyICosIGludCwgaW50LCB4eF9zdHJwLAotCQkJc3RydWN0IGtleXRhYiAqLCBzdHJ1Y3Qg RkRCICopICk7Ci1fUFJPVE9UWVAoIGludCBjaGt0b2ssIChjaGFyICopICk7Ci1fUFJPVE9UWVAo IGludCBjbWNmbSwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBsb29rdXAsIChzdHJ1Y3Qga2V5 dGFiIFtdLCBjaGFyICosIGludCwgaW50ICopICk7Ci1fUFJPVE9UWVAoIFZPSUQga3dkaGVscCwg KHN0cnVjdCBrZXl0YWJbXSxpbnQsY2hhciAqLGNoYXIgKixjaGFyICosaW50LGludCkgKTsKLV9Q Uk9UT1RZUCggaW50IHVuZ3dvcmQsICh2b2lkKSApOwotX1BST1RPVFlQKCBWT0lEIHVudW5ndywg KHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBjbWRzcXVvLCAoaW50KSApOwotX1BST1RPVFlQKCBp bnQgY21kZ3F1bywgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiBja2N2dGRhdGUsIChjaGFy ICosIGludCkgKTsKLV9QUk9UT1RZUCggaW50IGNtZGdldGMsIChpbnQpKTsKLSNpZm5kZWYgTk9B UlJPV0tFWVMKLV9QUk9UT1RZUCggaW50IGNtZGNvbmNoaywgKHZvaWQpICk7Ci0jZW5kaWYgLyog Tk9BUlJPV0tFWVMgKi8KLQotI2lmZGVmIENLX1JFQ0FMTAotX1BST1RPVFlQKCBjaGFyICogY21n ZXRjbWQsIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIFZPSUQgYWRkY21kLCAoY2hhciAqKSApOwot X1BST1RPVFlQKCBWT0lEIGNtYWRkbmV4dCwgKHZvaWQpICk7Ci0jZW5kaWYgLyogQ0tfUkVDQUxM ICovCi1fUFJPVE9UWVAoIGNoYXIgKiBjbWN2dGRhdGUsIChjaGFyICosIGludCkgKTsKLV9QUk9U T1RZUCggY2hhciAqIGNtZGlmZmRhdGUsIChjaGFyICosIGNoYXIgKikgKTsKLV9QUk9UT1RZUCgg Y2hhciAqIGNtZGVsdGEsIChpbnQsCi0JCQkgICAgaW50LGludCxpbnQsaW50LGludCxpbnQsaW50 LGludCxpbnQsaW50LGludCxpbnQgKSk7Ci1fUFJPVE9UWVAoIGNoYXIgKiBzaHVmZmxlZGF0ZSwg KGNoYXIgKiwgaW50KSApOwotX1BST1RPVFlQKCBpbnQgZmlsaGVscCwgKGludCwgY2hhciAqLCBj aGFyICosIGludCwgaW50KSApOwotX1BST1RPVFlQKCBpbnQgeGZpbGhlbHAsIChpbnQsIGNoYXIg KiwgY2hhciAqLCBpbnQsIGludCwKLQkJCSAgaW50LAotCQkJICBjaGFyICosIGNoYXIgKiwgY2hh ciAqLCBjaGFyICosCi0JCQkgIENLX09GRl9ULCBDS19PRkZfVCwKLQkJCSAgaW50LCBpbnQsCi0J CQkgIGNoYXIgKiopICk7Ci1fUFJPVE9UWVAoIGludCBkZWx0YTJzZWMsIChjaGFyICosIGxvbmcg KikgKTsKLQotI2lmZGVmIERDTURCVUYKLV9QUk9UT1RZUCggaW50IGNtc2V0dXAsICh2b2lkKSAp OwotI2VuZGlmIC8qIERDTURCVUYgKi8KLQotI2VuZGlmIC8qIENLVUNNRF9IICovCi0KLS8qIEVu ZCBvZiBja3VjbWQuaCAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2Vy bWl0LTkuMC4zMDIvY2t1Y25zLmMgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAu MzAyL2NrdWNucy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzcxOTdjLi4wMDAw MDAwCi0tLSBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1Y25zLmMK KysrIC9kZXYvbnVsbApAQCAtMSwyNzIwICswLDAgQEAKLSNpbmNsdWRlICJja2NzeW0uaCIKLWNo YXIgKmNvbm52ID0gIkNPTk5FQ1QgQ29tbWFuZCBmb3IgVU5JWDpzZWxlY3QoKSwgOS4wLjEzOSwg MSBNYXIgMjAxMCI7Ci0KLS8qICBDIEsgVSBDIE4gUyAgLS0gIFRlcm1pbmFsIGNvbm5lY3Rpb24g dG8gcmVtb3RlIHN5c3RlbSwgZm9yIFVOSVggICovCi0vKgotICBBdXRob3I6IEZyYW5rIGRhIENy dXogPGZkY0Bjb2x1bWJpYS5lZHU+LAotICBDb2x1bWJpYSBVbml2ZXJzaXR5IEFjYWRlbWljIElu Zm9ybWF0aW9uIFN5c3RlbXMsIE5ldyBZb3JrIENpdHkuCi0KLSAgQ29weXJpZ2h0IChDKSAxOTg1 LCAyMDEwLAotICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkg b2YgTmV3IFlvcmsuCi0gICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQg Q09QWUlORy5UWFQgZmlsZSBvciB0aGUKLSAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFp LmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KLSovCi0KLS8qCi0gIFRo aXMgdmVyc2lvbiBvZiB0aGUgVU5JWCBDT05ORUNUIG1vZHVsZSB1c2VzIHNlbGVjdCgpLCB3aGlj aCBpcyByZXF1aXJlZCBmb3IKLSAgS2VyYmVyb3MgZW5jcnlwdGlvbi4gIFRodXMgaXQgY2FuIGJl IHVzZWQgb25seSBvbiBVTklYIHN5c3RlbXMgdGhhdCBzdXBwb3J0Ci0gIHNlbGVjdCgpIG9uIGJv dGggVENQL0lQIGFuZCBzZXJpYWwgY29ubmVjdGlvbnMuICBBIHNlcGFyYXRlIG1vZHVsZSB0aGF0 IHVzZXMKLSAgYSBjb21wbGV0ZWx5IHBvcnRhYmxlIGZvcmsoKSBzdHJ1Y3R1cmUgY2FuIGJlIHVz ZWQgb24gc3lzdGVtcyB3aGVyZSBzZWxlY3QoKQotICBpcyBub3QgYXZhaWxhYmxlIG9yIGRvZXMg bm90IHdvcmsgYXMgcmVxdWlyZWQuCi0qLwotCi0jaW5jbHVkZSAiY2tjZGViLmgiCQkJLyogQ29t bW9uIHRoaW5ncyBmaXJzdCAqLwotCi0jaWZuZGVmIE5PTE9DQUwKLQotI2lmZGVmIE9TRjEzCi0j aWZkZWYgQ0tfQU5TSUMKLSNpZmRlZiBfTk9fUFJPVE8KLSN1bmRlZiBfTk9fUFJPVE8KLSNlbmRp ZiAvKiBfTk9fUFJPVE8gKi8KLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotI2VuZGlmIC8qIE9TRjEz ICovCi0KLSNpbmNsdWRlIDxlcnJuby5oPgkJCS8qIEVycm9yIG51bWJlcnMgKi8KLQotI2lmbmRl ZiBOT1RJTUVICi0jaW5jbHVkZSA8dGltZS5oPgkJCS8qIEZvciBGRF9ibGFoICovCi0jaWZkZWYg U1lTVElNRUgJCQkJLyogKElSSVggNS4zKSAqLwotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5k aWYgLyogU1lTVElNRUggKi8KLSNlbmRpZiAvKiBOT1RJTUVIICovCi0KLSNpZmRlZiBCU0Q0MkhB Q0sJCQkvKiBXaHkgaXMgdGhpcyBuZWNlc3Nhcnk/ICovCi0jaWZuZGVmIERDTFRJTUVWQUwKLSNk ZWZpbmUgRENMVElNRVZBTAotI2VuZGlmIC8qIERDTFRJTUVWQUwgKi8KLSNlbmRpZiAvKiBCU0Q0 MkhBQ0sgKi8KLQotLyogS2VybWl0LXNwZWNpZmljIGluY2x1ZGVzICovCi0KLSNpbmNsdWRlICJj a2Nhc2MuaCIJCQkvKiBBU0NJSSBjaGFyYWN0ZXJzICovCi0jaW5jbHVkZSAiY2tja2VyLmgiCQkJ LyogS2VybWl0IHRoaW5ncyAqLwotI2luY2x1ZGUgImNrdWNtZC5oIgkJCS8qIEZvciB4eGVzYygp IHByb3RvdHlwZSAqLwotI2luY2x1ZGUgImNrY25ldC5oIgkJCS8qIE5ldHdvcmsgc3ltYm9scyAq LwotI2lmbmRlZiBOT0NTRVRTCi0jaW5jbHVkZSAiY2tjeGxhLmgiCQkJLyogQ2hhcmFjdGVyIHNl dCB0cmFuc2xhdGlvbiAqLwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQotI2lmZGVmIEJFQk9YCi0j aW5jbHVkZSA8a2VybmVsL09TLmg+Ci0jaW5jbHVkZSA8c29ja2V0Lmg+Ci0jaW5jbHVkZSA8c3Rk aW8uaD4KLSNlbmRpZiAvKiBCRUJPWCAqLwotCi0jaW5jbHVkZSA8c2lnbmFsLmg+CQkJLyogU2ln bmFscyAqLwotCi0vKiBBbGwgdGhlIGZvbGxvd2luZyBpcyBmb3Igc2VsZWN0KCkuLi4gKi8KLQot I2lmZGVmIENLVElETEUJCQkJLyogVGltZW91dHMgb25seSBmb3IgU0VUIFRFUk0gSURMRSAqLwot Ci0jaWZuZGVmIERDTFRJTUVWQUwKLSNpZmRlZiBVTklYV0FSRQotI2lmbmRlZiBVVzcKLSNkZWZp bmUgRENMVElNRVZBTAotI2VuZGlmIC8qIFVXNyAqLwotI2VuZGlmIC8qIFVOSVhXQVJFICovCi0j ZW5kaWYgLyogRENMVElNRVZBTCAqLwotCi0jaWZkZWYgRENMVElNRVZBTAkJCS8qIERlY2xhcmUg dGltZXZhbCBvdXJzZWx2ZXMgKi8KLXN0cnVjdCB0aW1ldmFsIHsKLSAgICBsb25nIHR2X3NlYzsK LSAgICBsb25nIHR2X3VzZWM7Ci19OwotI2Vsc2UgIC8qICFEQ0xUSU1FVkFMICovCi0jaWZuZGVm IE5PU1lTVElNRUJICi0jaWZkZWYgU1lTVElNRUJICi0jaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0j ZW5kaWYgLyogU1lTVElNRUJIICovCi0jZW5kaWYgLyogTk9TWVNUSU1FQkggKi8KLSNlbmRpZiAv KiBEQ0xUSU1FVkFMICovCi0jZW5kaWYgLyogQ0tUSURMRSAqLwotCi0jaWZuZGVmIFNDT19PU1I1 MDQKLSNpZmRlZiBTRUxFQ1RfSAotI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KLSNlbmRpZiAvKiBT RUxFQ1RfSCAqLwotI2VuZGlmIC8qIFNDT19PU1I1MDQgKi8KLQotI2lmbmRlZiBGRF9TRVRTSVpF Ci0jaWZkZWYgQ0tfRk9SV0FSRF9YCi0jZGVmaW5lIEZEX1NFVFNJWkUgMjU2Ci0jZWxzZQotI2Rl ZmluZSBGRF9TRVRTSVpFIDMyCi0jZW5kaWYgLyogQ0tfRk9SV0FSRF9YICovCi0jZW5kaWYgLyog RkRfU0VUU0laRSAqLwotCi0jaWZkZWYgSFBVWAotI2lmbmRlZiBIUFVYMTAKLSNpZm5kZWYgSFBV WDExMDAKLS8qIFRoZSB0aHJlZSBpbnRlcmlvciBhcmdzIHRvIHNlbGVjdCgpIGFyZSAoaW50ICop IHJhdGhlciB0aGFuIChmZF9zZXQgKikgKi8KLSNpZm5kZWYgSU5UU0VMRUNUCi0jZGVmaW5lIElO VFNFTEVDVAotI2VuZGlmIC8qIElOVFNFTEVDVCAqLwotI2VuZGlmIC8qIEhQVVgxMTAwICovCi0j ZW5kaWYgLyogSFBVWDEwICovCi0jZW5kaWYgLyogSFBVWCAqLwotCi0vKiBJbnRlcm5hbCBmdW5j dGlvbiBwcm90b3R5cGVzICovCi0KLSNpZmRlZiBORVdGVFAKLSNlbmRpZiAvKiBORVdGVFAgKi8K LV9QUk9UT1RZUCggVk9JRCB0dGZsdXgsICh2b2lkKSApOwotX1BST1RPVFlQKCBWT0lEIGRvZXNj LCAoY2hhcikgKTsKLV9QUk9UT1RZUCggaW50IGhjb25uZSwgKHZvaWQpICk7Ci0jaWZuZGVmIE5P U0hPVwotX1BST1RPVFlQKCBWT0lEIHNob21kbSwgKHZvaWQpICk7Ci0jZW5kaWYgLyogTk9TSE9X ICovCi1fUFJPVE9UWVAoIHN0YXRpYyBpbnQga2JnZXQsICh2b2lkKSApOwotX1BST1RPVFlQKCBz dGF0aWMgaW50IGNrY3B1dGYsICh2b2lkKSApOwotCi0vKiBFeHRlcm5hbCB2YXJpYWJsZXMgKi8K LQotZXh0ZXJuIHN0cnVjdCBja19wIHB0YWJbXTsKLQotZXh0ZXJuIGludCBsb2NhbCwgZXNjYXBl LCBkdXBsZXgsIHBhcml0eSwgZmxvdywgc2VzbG9nLCBzZXNzZnQsIGRlYnNlcywKLSBtZG10eXAs IHR0bnByb3RvLCBjbWFzaywgY21kbXNrLCBuZXR3b3JrLCBuZXR0eXBlLCBzb3NpLCB0bmxtLAot IHhpdHN0YSwgd2hhdCwgdHR5ZmQsIHR0cGlwZSwgcXVpZXQsIGJhY2tncmQsIHBmbGFnLCB0dF9j cmQsIHR0X2xmZCwKLSB0bl9ubG0sIHR0ZmRmbGcsCi0gdHRfZXNjYXBlLCBqdXN0b25lLCBjYXJy aWVyLCB0dHB0eSwgaHdwYXJpdHk7Ci0KLSNpZm5kZWYgTk9ESUFMCi1leHRlcm4gaW50IGRpYWxt aHUsIGRpYWxzdGE7Ci0jZW5kaWYgLyogTk9ESUFMICovCi0KLSNpZmRlZiBDS0xFQVJOCi1leHRl cm4gRklMRSAqIGxlYXJuZnA7Ci1leHRlcm4gaW50IGxlYXJuaW5nOwotc3RhdGljIFVMT05HIGxl YXJudDE7Ci1zdGF0aWMgY2hhciBsZWFybmJ1ZltMRUFSTkJVRlNJWl0gPSB7IE5VTCwgTlVMIH07 Ci1zdGF0aWMgaW50ICBsZWFybmJjID0gMDsKLXN0YXRpYyBpbnQgIGxlYXJuYnAgPSAwOwotc3Rh dGljIGludCAgbGVhcm5zdCA9IDA7Ci0jZW5kaWYgLyogQ0tMRUFSTiAqLwotCi1leHRlcm4gbG9u ZyBzcGVlZDsKLWV4dGVybiBjaGFyIHR0bmFtZVtdLCBzZXNmaWxbXSwgbXlob3N0W10sICpjY250 YWJbXTsKLSNpZmRlZiBUTkNPREUKLWV4dGVybiBpbnQgdG5fYl9ubG0sIHRuX3JlbV9lY2hvOwot I2VuZGlmIC8qIFROQ09ERSAqLwotCi0jaWZkZWYgQ0tfVFJJR0dFUgotZXh0ZXJuIGNoYXIgKiB0 dF90cmlnZ2VyW10sICogdHJpZ2dlcnZhbDsKLSNlbmRpZiAvKiBDS19UUklHR0VSICovCi0KLSNp ZmRlZiBDS1RJRExFCi1leHRlcm4gaW50IHR0X2lkbGVsaW1pdCwgdHRfaWRsZWFjdDsKLWV4dGVy biBjaGFyICogdHRfaWRsZXN0cjsKLXN0YXRpYyBpbnQgaWRsZWxpbWl0ID0gMDsKLSNlbmRpZiAv KiBDS1RJRExFICovCi1leHRlcm4gaW50IGN4X3N0YXR1czsJCQkvKiBDT05ORUNUIHN0YXR1cyBj b2RlICovCi0KLWV4dGVybiBpbnQgbm9wdXNoOwotCi0jaWZkZWYgQ0tfQVBDCi1leHRlcm4gaW50 IGFwY2FjdGl2ZTsJCQkvKiBBcHBsaWNhdGlvbiBQcm9ncmFtIENvbW1hbmQgKEFQQykgKi8KLWV4 dGVybiBpbnQgYXBjc3RhdHVzOwkJCS8qIGl0ZW1zIC4uLiAqLwotc3RhdGljIGludCBhcGNsZW5n dGggPSAwOwotI2lmZGVmIERDTURCVUYKLWV4dGVybiBjaGFyICphcGNidWY7Ci0jZWxzZQotZXh0 ZXJuIGNoYXIgYXBjYnVmW107Ci0jZW5kaWYgLyogRENNREJVRiAqLwotc3RhdGljIGludCBhcGNi dWZsZW4gPSBBUENCVUZMRU4gLSAyOwotZXh0ZXJuIGludCBwcm90b2NvbDsKLSNlbmRpZiAvKiBD S19BUEMgKi8KLSNpZm5kZWYgTk9YRkVSCi1leHRlcm4gaW50IGF1dG9kbDsJCQkvKiBBdXRvIGRv d25sb2FkICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZmRlZiBDS19BVVRPREwKLWV4dGVy biBDSEFSIGtzYnVmW107Ci1leHRlcm4gQ0hBUiBzdGNocjsKLWV4dGVybiBpbnQga3N0YXJ0YWN0 aXZlOwotI2VuZGlmIC8qIENLX0FVVE9ETCAqLwotCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotZXh0 ZXJuIGludCBtZV9hdXRoOwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLQotI2lmZGVmIENL X1hZWgotI2lmZGVmIFhZWl9JTlRFUk5BTAotc3RhdGljIGludCB6bWRsb2sgPSAxOwkJCS8qIFpt b2RlbSBhdXRvZG93bmxvYWRzIGF2YWlsYWJsZSAqLwotI2Vsc2UKLXN0YXRpYyBpbnQgem1kbG9r ID0gMDsJCQkvKiBEZXBlbmRzIG9uIGV4dGVybmFsIHByb3RvY29sIGRlZiAqLwotI2VuZGlmIC8q IFhZWl9JTlRFUk5BTCAqLwotI2Vsc2UKLXN0YXRpYyBpbnQgem1kbG9rID0gMDsJCQkvKiBOb3Qg YXZhaWxhYmxlIGF0IGFsbCAqLwotI2VuZGlmIC8qIENLX1hZWiAqLwotCi0jaWZuZGVmIE5PU0VU S0VZCQkJLyogS2V5Ym9hcmQgbWFwcGluZyAqLwotZXh0ZXJuIEtFWSAqa2V5bWFwOwkJCS8qIFNp bmdsZS1jaGFyYWN0ZXIga2V5IG1hcCAqLwotZXh0ZXJuIE1BQ1JPICptYWNyb3RhYjsJCQkvKiBL ZXkgbWFjcm8gcG9pbnRlciB0YWJsZSAqLwotc3RhdGljIE1BQ1JPIGttcHRyID0gTlVMTDsJCS8q IFBvaW50ZXIgdG8gY3VycmVudCBrZXkgbWFjcm8gKi8KLSNlbmRpZiAvKiBOT1NFVEtFWSAqLwot Ci0vKiBHbG9iYWwgdmFyaWFibGVzIGxvY2FsIHRvIHRoaXMgbW9kdWxlICovCi0KLXN0YXRpYyBp bnQKLSAgYWN0aXZlID0gMCwKLSAgcXVpdG5vdyA9IDAsCQkJCS8qIDxlc2MtY2hhcj5RIHdhcyB0 eXBlZCAqLwotICBkb2hhbmd1cCA9IDAsCQkJCS8qIDxlc2MtY2hhcj5IIHdhcyB0eXBlZCAqLwot ICBpbnNoaWZ0ID0gMCwJCQkJLyogU08vU0kgc2hpZnQgc3RhdGVzICovCi0gIG91dHNoaWZ0ID0g MDsKLQotc3RhdGljIGNoYXIgZWNidWZbMTBdLCAqZWNicDsJCS8qIEVzY2FwZSBjaGFyIGJ1ZmZl ciAmIHBvaW50ZXIgKi8KLQotI2lmZGVmIENLX1NNQUxMCi0jZGVmaW5lIElCVUZMIDE1MzYJCQkv KiBJbnB1dCBidWZmZXIgbGVuZ3RoICovCi0jZWxzZQotI2RlZmluZSBJQlVGTCA0MDk2Ci0jZW5k aWYgLyogQ0tfU01BTEwgKi8KLQotc3RhdGljIGludCBvYmMgPSAwOwkJCS8qIE91dHB1dCBidWZm ZXIgY291bnQgKi8KLQotI2lmbmRlZiBPWE9TCi0jZGVmaW5lIE9CVUZMIDEwMjQJCQkvKiBPdXRw dXQgYnVmZmVyIGxlbmd0aCAqLwotI2Vsc2UKLSNkZWZpbmUgT0JVRkwgSUJVRkwKLSNlbmRpZiAv KiBPWE9TICovCi0KLSNpZmRlZiBCSUdCVUZPSwotI2RlZmluZSBUTVBMRU4gNDA5NgkJCS8qIFRl bXBvcmFyeSBtZXNzYWdlIGJ1ZmZlciBsZW5ndGggKi8KLSNlbHNlCi0jZGVmaW5lIFRNUExFTiAy MDAKLSNlbmRpZiAvKiBCSUdCVUZPSyAqLwotCi0jaWZkZWYgRFlOQU1JQwotc3RhdGljIGNoYXIg KmlidWYgPSBOVUxMLCAqb2J1ZiA9IE5VTEwsICp0ZW1wID0gTlVMTDsgLyogQnVmZmVycyAqLwot I2Vsc2UKLXN0YXRpYyBjaGFyIGlidWZbSUJVRkxdLCBvYnVmW09CVUZMXSwgdGVtcFtUTVBMRU5d OwotI2VuZGlmIC8qIERZTkFNSUMgKi8KLQotI2lmZGVmIFROQ09ERQotc3RhdGljIGNoYXIgdG5v cHRbNF07Ci0jZW5kaWYgLyogVE5DT0RFICovCi0KLSNpZmRlZiBEWU5BTUlDCi1zdGF0aWMgY2hh ciAqaWJwOwkJCS8qIElucHV0IGJ1ZmZlciBwb2ludGVyICovCi0jZWxzZQotc3RhdGljIGNoYXIg KmlicCA9IGlidWY7CQkvKiBJbnB1dCBidWZmZXIgcG9pbnRlciAqLwotI2VuZGlmIC8qRFlOQU1J QyAqLwotc3RhdGljIGludCBpYmMgPSAwOwkJCS8qIElucHV0IGJ1ZmZlciBjb3VudCAqLwotCi0j aWZkZWYgRFlOQU1JQwotc3RhdGljIGNoYXIgKm9icDsJCQkvKiBPdXRwdXQgYnVmZmVyIHBvaW50 ZXIgKi8KLSNlbHNlCi1zdGF0aWMgY2hhciAqb2JwID0gb2J1ZjsJCS8qIE91dHB1dCBidWZmZXIg cG9pbnRlciAqLwotI2VuZGlmIC8qIERZTkFNSUMgKi8KLQotLyogQ2hhcmFjdGVyLXNldCBpdGVt cyAqLwotCi1zdGF0aWMgaW50IHVuaWNvZGUgPSAwOwotCi0jaWZuZGVmIE5PQ1NFVFMKLSNpZmRl ZiBDS19BTlNJQyAvKiBBTlNJIEMgcHJvdG90eXBlcy4uLiAqLwotZXh0ZXJuIENIQVIgKCp4bHNb TUFYVENTRVRTKzFdW01BWEZDU0VUUysxXSkoQ0hBUik7IC8qIENoYXJhY3RlciBzZXQgKi8KLWV4 dGVybiBDSEFSICgqeGxyW01BWFRDU0VUUysxXVtNQVhGQ1NFVFMrMV0pKENIQVIpOyAvKiB0cmFu c2xhdGlvbiBmdW5jdGlvbnMgKi8KLXN0YXRpYyBDSEFSICgqc3hvKShDSEFSKTsJLyogTG9jYWwg dHJhbnNsYXRpb24gZnVuY3Rpb25zICovCi1zdGF0aWMgQ0hBUiAoKnJ4bykoQ0hBUik7CS8qIGZv ciBvdXRwdXQgKHNlbmRpbmcpIHRlcm1pbmFsIGNoYXJzICovCi1zdGF0aWMgQ0hBUiAoKnN4aSko Q0hBUik7CS8qIGFuZCBmb3IgaW5wdXQgKHJlY2VpdmluZykgdGVybWluYWwgY2hhcnMuICovCi1z dGF0aWMgQ0hBUiAoKnJ4aSkoQ0hBUik7Ci0jZWxzZSAvKiBOb3QgQU5TSSBDLi4uICovCi1leHRl cm4gQ0hBUiAoKnhsc1tNQVhUQ1NFVFMrMV1bTUFYRkNTRVRTKzFdKSgpOwkvKiBDaGFyYWN0ZXIg c2V0ICovCi1leHRlcm4gQ0hBUiAoKnhscltNQVhUQ1NFVFMrMV1bTUFYRkNTRVRTKzFdKSgpOwkv KiB0cmFuc2xhdGlvbiBmdW5jdGlvbnMuICovCi1zdGF0aWMgQ0hBUiAoKnN4bykoKTsJCS8qIExv Y2FsIHRyYW5zbGF0aW9uIGZ1bmN0aW9ucyAqLwotc3RhdGljIENIQVIgKCpyeG8pKCk7CQkvKiBm b3Igb3V0cHV0IChzZW5kaW5nKSB0ZXJtaW5hbCBjaGFycyAqLwotc3RhdGljIENIQVIgKCpzeGkp KCk7CQkvKiBhbmQgZm9yIGlucHV0IChyZWNlaXZpbmcpIHRlcm1pbmFsIGNoYXJzLiAqLwotc3Rh dGljIENIQVIgKCpyeGkpKCk7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLWV4dGVybiBpbnQgbGFu Z3VhZ2U7CQkvKiBDdXJyZW50IGxhbmd1YWdlLiAqLwotc3RhdGljIGludCBsYW5nc3Y7CQkvKiBG b3IgcmVtZW1iZXJpbmcgbGFuZ3VhZ2Ugc2V0dGluZy4gKi8KLWV4dGVybiBzdHJ1Y3QgY3NpbmZv IGZjc2luZm9bXTsgLyogRmlsZSBjaGFyYWN0ZXIgc2V0IGluZm8uICovCi1leHRlcm4gaW50IHRj c3IsIHRjc2w7CQkvKiBUZXJtaW5hbCBjaGFyYWN0ZXIgc2V0cywgcmVtb3RlICYgbG9jYWwuICov Ci1zdGF0aWMgaW50IHRjczsJCQkvKiBJbnRlcm1lZGlhdGUgKCJ0cmFuc2ZlciIpIGNoYXJhY3Rl ciBzZXQuICovCi1zdGF0aWMgaW50IHRjc3NpemUgPSAwOwkJLyogU2l6ZSBvZiB0Y3MgKi8KLSNp ZmRlZiBVTklDT0RFCQkJCS8qIFVURi04IHN1cHBvcnQgKi8KLSNpZmRlZiBDS19BTlNJQwotZXh0 ZXJuIGludCAoKnhsX3VmY1tNQVhGQ1NFVFMrMV0pKFVTSE9SVCk7ICAvKiBVbmljb2RlIHRvIEZD UyAqLwotZXh0ZXJuIFVTSE9SVCAoKnhsX2ZjdVtNQVhGQ1NFVFMrMV0pKENIQVIpOyAvKiBGQ1Mg dG8gVW5pY29kZSAqLwotZXh0ZXJuIGludCAoKnh1ZikoVVNIT1JUKTsJCS8qIFRyYW5zbGF0aW9u IGZ1bmN0aW9uIFVDUyB0byBGQ1MgKi8KLWV4dGVybiBVU0hPUlQgKCp4ZnUpKENIQVIpOwkJLyog VHJhbnNsYXRpb24gZnVuY3Rpb24gRkNTIHRvIFVDUyAqLwotI2Vsc2UKLWV4dGVybiBpbnQgKCp4 bF91ZmNbTUFYRkNTRVRTKzFdKSgpOwotZXh0ZXJuIFVTSE9SVCAoKnhsX2ZjdVtNQVhGQ1NFVFMr MV0pKCk7Ci1leHRlcm4gaW50ICgqeHVmKSgpOwotZXh0ZXJuIFVTSE9SVCAoKnhmdSkoKTsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSNlbmRpZiAvKiBOT0NT RVRTICovCi0KLXN0YXRpYyBpbnQgcHJpbnRpbmcgPSAwOwotCi0vKgotICBXZSBkbyBub3QgbmVl ZCB0byBwYXJzZSBhbmQgcmVjb2duaXplIGVzY2FwZSBzZXF1ZW5jZXMgaWYgd2UgYXJlIGJlaW5n IGJ1aWx0Ci0gIHdpdGhvdXQgY2hhcmFjdGVyLXNldCBzdXBwb3J0IEFORCB3aXRob3V0IEFQQyBz dXBwb3J0LgotKi8KLSNpZmRlZiBOT0VTQ1NFUQotI2lmZGVmIFhQUklOVAotI3VuZGVmIFhQUklO VAotI2VuZGlmIC8qIFhQUklOVCAqLwotCi0jZWxzZSAgLyogTk9FU0NTRVEgbm90IGRlZmluZWQg ZnJvbSBvdXRzaWRlICovCi0KLSNpZmRlZiBOT0NTRVRTCQkJCS8qIE5vIGNoYXJhY3RlciBzZXRz ICovCi0jaWZuZGVmIENLX0FQQwkJCQkvKiBObyBBUEMgKi8KLSNpZm5kZWYgWFBSSU5UCQkJCS8q IE5vIHRyYW5zcGFyZW50IHByaW50aW5nICovCi0jZGVmaW5lIE5PRVNDU0VRCQkJLyogU28gbm8g ZXNjYXBlIHNlcXVlbmNlIHJlY29nbml6ZXIgKi8KLSNlbmRpZiAvKiBYUFJJTlQgKi8KLSNlbmRp ZiAvKiBDS19BUEMgKi8KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0jZW5kaWYgLyogTk9FU0NTRVEg Ki8KLQotLyogaW5lc2NbXSBhbmQgb2xkZXNjW10gbWFkZSBnbG9iYWwgMjAxMC8wMy8wMSBmb3Ig SU5QVVQgY29tbWFuZCAqLwotCi1zdGF0aWMgaW50IGVzY3NlcSA9IDA7CQkJLyogMSA9IFJlY29n bml6ZXIgaXMgYWN0aXZlICovCi0vKiBzdGF0aWMgKi8gaW50IGluZXNjWzJdID0geyAwLCAwIH07 CS8qIFN0YXRlIG9mIHNlcXVlbmNlIHJlY29nbml6ZXIgKi8KLS8qIHN0YXRpYyAqLyBpbnQgb2xk ZXNjWzJdID0geyAtMSwgLTEgfTsgLyogUHJldmlvdXMgc3RhdGUgb2YgcmVjb2duaXplciAqLwot Ci0jaWZkZWYgTk9FU0NTRVEKLSNkZWZpbmUgRVNfTk9STUFMIDAJCQkvKiBOb3JtYWwsIG5vdCBp biBhbiBlc2NhcGUgc2VxdWVuY2UgKi8KLSNkZWZpbmUgY2hrYWVzKHgseSkgMAotI2Vsc2UKLS8q Ci0gIEFzIG9mIEMtS2VybWl0IDVBKDE3OCksIHRoZSBDT05ORUNUIGNvbW1hbmQgc2tpcHMgcGFz dCBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMKLSAgdG8gYXZvaWQgdHJhbnNsYXRpbmcgdGhlIGNoYXJh Y3RlcnMgd2l0aGluIHRoZW0uICBUaGlzIGFsbG93cyB0aGUgQ09OTkVDVAotICBjb21tYW5kIHRv IHdvcmsgY29ycmVjdGx5IHdpdGggYSBob3N0IHRoYXQgdXNlcyBhIDctYml0IElTTyA2NDYgbmF0 aW9uYWwKLSAgY2hhcmFjdGVyIHNldCwgaW4gd2hpY2ggY2hhcmFjdGVycyBsaWtlICdbJyB3b3Vs ZCBub3JtYWxseSBiZSBjb252ZXJ0ZWQgdG8KLSAgYWNjZW50ZWQgbGV0dGVycywgcnVpbmluZyB0 aGUgdGVybWluYWwncyBpbnRlcnByZXRhdGlvbiAoYW5kIGdlbmVyYXRpb24pCi0gIG9mIGVzY2Fw ZSBzZXF1ZW5jZXMuCi0KLSAgQXMgb2YgNUEoMTkwKSwgdGhlIENPTk5FQ1QgY29tbWFuZCByZXNw b25kcyB0byBBUEMgZXNjYXBlIHNlcXVlbmNlcwotICAoRVNDIF8gdGV4dCBFU0MgXCkgaWYgdGhl IHVzZXIgU0VUcyBURVJNSU5BTCBBUEMgT04gb3IgVU5DSEVDS0VELCBhbmQgdGhlCi0gIHByb2dy YW0gd2FzIGJ1aWx0IHdpdGggQ0tfQVBDIGRlZmluZWQuCi0KLSAgTm9uLUFOU0kvSVNPLWNvbXBs aWFudCBlc2NhcGUgc2VxdWVuY2VzIGFyZSBub3QgaGFuZGxlZC4gKi8KLQotLyogU3RhdGVzIGZv ciB0aGUgZXNjYXBlLXNlcXVlbmNlIHJlY29nbml6ZXIuICovCi0KLSNkZWZpbmUgRVNfTk9STUFM IDAJCQkvKiBOb3JtYWwsIG5vdCBpbiBhbiBlc2NhcGUgc2VxdWVuY2UgKi8KLSNkZWZpbmUgRVNf R09URVNDIDEJCQkvKiBDdXJyZW50IGNoYXJhY3RlciBpcyBFU0MgKi8KLSNkZWZpbmUgRVNfRVND U0VRIDIJCQkvKiBJbnNpZGUgYW4gZXNjYXBlIHNlcXVlbmNlICovCi0jZGVmaW5lIEVTX0dPVENT SSAzCQkJLyogSW5zaWRlIGEgY29udHJvbCBzZXF1ZW5jZSAqLwotI2RlZmluZSBFU19TVFJJTkcg NAkJCS8qIEluc2lkZSBEQ1MsT1NDLFBNLCBvciBBUEMgc3RyaW5nICovCi0jZGVmaW5lIEVTX1RF Uk1JTiA1CQkJLyogMXN0IGNoYXIgb2Ygc3RyaW5nIHRlcm1pbmF0b3IgKi8KLQotLyoKLSAgQU5T SSBlc2NhcGUgc2VxdWVuY2UgaGFuZGxpbmcuICBPbmx5IHRoZSA3LWJpdCBmb3JtIGlzIHRyZWF0 ZWQsIGJlY2F1c2UKLSAgdHJhbnNsYXRpb24gaXMgbm90IGEgcHJvYmxlbSBpbiB0aGUgOC1iaXQg ZW52aXJvbm1lbnQsIGluIHdoaWNoIGFsbCBHTAotICBjaGFyYWN0ZXJzIGFyZSBBU0NJSSBhbmQg bm8gdHJhbnNsYXRpb24gdGFrZXMgcGxhY2UuICBTbyB3ZSBkb24ndCBjaGVjawotICBmb3IgdGhl IDgtYml0IHNpbmdsZS1jaGFyYWN0ZXIgdmVyc2lvbnMgb2YgQ1NJLCBEQ1MsIE9TQywgQVBDLCBv ciBTVC4KLSAgSGVyZSBpcyB0aGUgQU5TSSBzZXF1ZW5jZSByZWNvZ25pemVyIHN0YXRlIHRhYmxl LCBmb2xsb3dlZCBieSB0aGUgY29kZQotICB0aGF0IGltcGxlbWVudHMgaXQuCi0KLSAgRGVmaW5p dGlvbnM6Ci0gICAgQ0FOID0gQ2FuY2VsICAgICAgICAgICAgICAgICAgICAgICAwMS8wOCAgICAg ICAgIEN0cmwtWAotICAgIFNVQiA9IFN1YnN0aXR1dGUgICAgICAgICAgICAgICAgICAgMDEvMTAg ICAgICAgICBDdHJsLVoKLSAgICBEQ1MgPSBEZXZpY2UgQ29udHJvbCBTZXF1ZW5jZSAgICAgIDAx LzExIDA1LzAwICAgRVNDIFAKLSAgICBDU0kgPSBDb250cm9sIFNlcXVlbmNlIEludHJvZHVjZXIg IDAxLzExIDA1LzExICAgRVNDIFsKLSAgICBTVCAgPSBTdHJpbmcgVGVybWluYXRvciAgICAgICAg ICAgIDAxLzExIDA1LzEyICAgRVNDIFwKLSAgICBPU0MgPSBPcGVyYXRpbmcgU3lzdGVtIENvbW1h bmQgICAgIDAxLzExIDA1LzEzICAgRVNDIF0KLSAgICBQTSAgPSBQcml2YWN5IE1lc3NhZ2UgICAg ICAgICAgICAgIDAxLzExIDA1LzE0ICAgRVNDIF4KLSAgICBBUEMgPSBBcHBsaWNhdGlvbiBQcm9n cmFtIENvbW1hbmQgIDAxLzExIDA1LzE1ICAgRVNDIF8KLQotICBBTlNJIGVzY2FwZSBzZXF1ZW5j ZSByZWNvZ25pemVyOgotCi0gICAgU3RhdGUgICAgSW5wdXQgIE5ldyBTdGF0ZSAgOyBDb21tZW50 YXJ5Ci0KLSAgICBOT1JNQUwgICAoc3RhcnQpICAgICAgICAgICA7IFN0YXJ0IGluIE5PUk1BTCBz dGF0ZQotCi0gICAgKGFueSkgICAgQ0FOICAgIE5PUk1BTCAgICAgOyBeWCBjYW5jZWxzCi0gICAg KGFueSkgICAgU1VCICAgIE5PUk1BTCAgICAgOyBeWiBjYW5jZWxzCi0KLSAgICBOT1JNQUwgICBF U0MgICAgR09URVNDICAgICA7IEJlZ2luIGVzY2FwZSBzZXF1ZW5jZQotICAgIE5PUk1BTCAgIG90 aGVyICAgICAgICAgICAgIDsgTk9STUFMIGNvbnRyb2wgb3IgZ3JhcGhpYyBjaGFyYWN0ZXIKLQot ICAgIEdPVEVTQyAgIEVTQyAgICAgICAgICAgICAgIDsgU3RhcnQgYWdhaW4KLSAgICBHT1RFU0Mg ICBbICAgICAgR09UQ1NJICAgICA7IENTSQotICAgIEdPVEVTQyAgIFAgICAgICBTVFJJTkcgICAg IDsgRENTIGludHJvZHVjZXIsIGNvbnN1bWUgdGhyb3VnaCBTVAotICAgIEdPVEVTQyAgIF0gICAg ICBTVFJJTkcgICAgIDsgT1NDIGludHJvZHVjZXIsIGNvbnN1bWUgdGhyb3VnaCBTVAotICAgIEdP VEVTQyAgIF4gICAgICBTVFJJTkcgICAgIDsgUE0gIGludHJvZHVjZXIsIGNvbnN1bWUgdGhyb3Vn aCBTVAotICAgIEdPVEVTQyAgIF8gICAgICBTVFJJTkcgICAgIDsgQVBDIGludHJvZHVjZXIsIGNv bnN1bWUgdGhyb3VnaCBTVAotICAgIEdPVEVTQyAgIDAuLn4gICBOT1JNQUwgICAgIDsgMDMvMDAg dGhyb3VnaCAxNy8xNCA9IEZpbmFsIGNoYXJhY3RlcgotICAgIEdPVEVTQyAgIG90aGVyICBFU0NT RVEgICAgIDsgSW50ZXJtZWRpYXRlIG9yIGlnbm9yZWQgY29udHJvbCBjaGFyYWN0ZXIKLQotICAg IEVTQ1NFUSAgIEVTQyAgICBHT1RFU0MgICAgIDsgU3RhcnQgYWdhaW4KLSAgICBFU0NTRVEgICAw Li5+ICAgTk9STUFMICAgICA7IDAzLzAwIHRocm91Z2ggMTcvMTQgPSBGaW5hbCBjaGFyYWN0ZXIK LSAgICBFU0NTRVEgICBvdGhlciAgICAgICAgICAgICA7IEludGVybWVkaWF0ZSBvciBpZ25vcmVk IGNvbnRyb2wgY2hhcmFjdGVyCi0KLSAgICBHT1RDU0kgICBFU0MgICAgR09URVNDICAgICA7IFN0 YXJ0IGFnYWluCi0gICAgR09UQ1NJICAgQC4ufiAgIE5PUk1BTCAgICAgOyAwNC8wMCB0aHJvdWdo IDE3LzE0ID0gRmluYWwgY2hhcmFjdGVyCi0gICAgR09UQ1NJICAgb3RoZXIgICAgICAgICAgICAg OyBJbnRlcm1lZGlhdGUgY2hhciBvciBpZ25vcmVkIGNvbnRyb2wgY2hhcgotCi0gICAgU1RSSU5H ICAgRVNDICAgIFRFUk1JTiAgICAgOyBNYXliZSBoYXZlIFNUCi0gICAgU1RSSU5HICAgb3RoZXIg ICAgICAgICAgICAgOyBDb25zdW1lIGFsbCBlbHNlCi0KLSAgICBURVJNSU4gICBcICAgICAgTk9S TUFMICAgICA7IEVuZCBvZiBzdHJpbmcKLSAgICBURVJNSU4gICBvdGhlciAgU1RSSU5HICAgICA7 IFN0aWxsIGluIHN0cmluZwotKi8KLQotI2lmZGVmIFhQUklOVAkJCQkvKiBUcmFuc3BhcmVudCBw cmludCBzdXBwb3J0ICovCi0vKgotICBXZSBjYW4ndCBqdXN0IHByaW50IGVhY2ggYnl0ZSBhcyBp dCBjb21lcyBpbiBiZWNhdXNlIHRoZW4gdGhlIHByaW50ZXItb2ZmCi0gIHNlcXVlbmNlIHdvdWxk IGJlIHNlbnQgdG8gdGhlIHByaW50ZXIuICBUaHVzIHdlIGhhdmUgdG8gYnVmZmVyIHVwIGVzY2Fw ZQotICBzZXF1ZW5jZXMgYW5kIHByaW50IHRoZW0gb25seSB3aGVuIHRoZXkgYXJlIGNvbXBsZXRl IEFORCB3ZSBrbm93IHRoZXkgYXJlCi0gIG5vdCB0aGUgcHJpbnRlci1vZmYgc2VxdWVuY2UuICBB bGwgcHJpbnRpbmcgaXMgZG9uZSB2aWEgenNvdXR4KFpNRklMRSxzLG4pLgotICBUaGlzIGFsbG93 cyBmb3Igc3RyaW5ncyB0aGF0IGNvbnRhaW4gTlVMcy4gIERvbid0IG1peCBjYWxscyB0byB6c291 dHgoKSB3aXRoCi0gIGNhbGxzIHRvIHpjaG91dCgpLCBvciB0aGUgb3V0cHV0IHdpbGwgYmUgc2Ny YW1ibGVkLiAgQWxzbyBub3RlIHRoYXQgd2hlbgotICBwcmludGluZyBhIHNhdmVkLXVwIGVzY2Fw ZSBzZXF1ZW5jZSwgd2UgbmV2ZXIgcHJpbnQgaXRzIGZpbmFsIGNoYXJhY3RlcgotICBiZWNhdXNl IHRoYXQgd2lsbCBiZSBwcmludGVkIGluIHRoZSBtYWlubGluZSBjb2RlLCB1cG9uIHJldHVybiBm cm9tCi0gIGNoa2FlcygpLiAgTm90ZSB0aGF0IHRoZSBwcmludGVyLW9uIHNlcXVlbmNlIGlzIHBh c3NlZCB0byB0aGUgc2NyZWVuOyB0aGlzCi0gIGlzIHVuYXZvaWRhYmxlLCBzaW5jZSB3ZSBkb24n dCBrbm93IHdoYXQgaXQgaXMgdW50aWwgYWZ0ZXIgd2UgZ2V0IHRvIHRoZQotICBlbmQsIGFuZCBm b3Igc2NyZWVuIGRpc3BsYXkgcHVycG9zZXMgd2UgY2FuJ3QgYnVmZmVyIHVwIGVzY2FwZSBzZXF1 ZW5jZXMKLSAgZm9yIG51bWVyb3VzIHJlYXNvbnMuICBUaGVyZWZvcmUgd2UgYWxzbyBtdXN0IG91 dHB1dCB0aGUgcHJpbnRlci1vZmYKLSAgc2VxdWVuY2UsIG90aGVyd2lzZSBhIHJlYWwgdGVybWlu YWwgb3IgZW11bGF0b3Igd2lsbCBiZSBzdHVjayBpbiBwcmludCBtb2RlLgotKi8KLWV4dGVybiBp bnQgdHRfcHJpbnQ7Ci0jZGVmaW5lIEVTQ0JVRkxFTiA2Mwotc3RhdGljIGNoYXIgZXNjYnVmW0VT Q0JVRkxFTisxXSA9IHsgTlVMLCBOVUwgfTsKLXN0YXRpYyBpbnQgZXNjYnVmYyA9IDA7Ci1zdGF0 aWMgaW50IGRvbnRwcmludCA9IDA7Ci0KLVZPSUQKLXByaW50b24oKSB7CQkJCS8qIFR1cm4gcHJp bnRpbmcgb24gKi8KLSAgICBpbnQgeCwgcHA7Ci0gICAgY2hhciAqIHA7Ci0gICAgZXh0ZXJuIGlu dCBwcmludHBpcGUsIG5vcHJpbnRlcjsKLSAgICBleHRlcm4gY2hhciAqIHByaW50ZXJuYW1lOwot Ci0gICAgaWYgKG5vcHJpbnRlcikgewotCWRlYnVnKEYxMTAsIlBSSU5URVIgT04gTk9QUklOVEVS IiwiIiwwKTsKLQlyZXR1cm47Ci0gICAgfQotICAgIHAgPSBwcmludGVybmFtZTsKLSAgICBwcCA9 IHByaW50cGlwZTsKLSAgICBpZiAoIXApIHAgPSAiIjsKLSAgICBpZiAoISpwKSB7Ci0jaWZkZWYg QU5ZQlNECi0JcCA9ICJscHIiOwotI2Vsc2UKLQlwID0gImxwIjsKLSNlbmRpZiAvKiBBTllCU0Qg Ki8KLQlwcCA9IDE7Ci0JZGVidWcoRjExMCwiUFJJTlRFUiBERUZBVUxUIixwLDApOwotICAgIH0K LSAgICBkZWJ1ZyhGMTExLCJQUklOVEVSIE9OIixwLHBwKTsKLSAgICBpZiAocHApIHsJCQkJLyog UHJpbnRpbmcgdG8gcGlwZSAqLwotCXggPSB6eGNtZChaTUZJTEUscCk7Ci0gICAgfSBlbHNlIHsJ CQkJLyogQXBwZW5kIHRvIGZpbGUgKi8KLQlzdHJ1Y3QgZmlsaW5mbyB4eDsKLQl4eC5icyA9IDA7 IHh4LmNzID0gMDsgeHgucmwgPSAwOyB4eC5vcmcgPSAwOyB4eC5jYyA9IDA7Ci0JeHgudHlwID0g MDsgeHguZHNwID0gWFlGWl9BOyB4eC5vc19zcGVjaWZpYyA9IE5VTDsKLQl4eC5sYmxvcHRzID0g MDsKLQl4ID0gem9wZW5vKFpNRklMRSxwLE5VTEwsJnh4KTsKLSAgICB9Ci0gICAgZGVidWcoRjEw MSwiUFJJTlRFUiBPUEVOIiwiIix4KTsKLSAgICBwcmludGluZyA9IDE7Ci19Ci0KLVZPSUQKLXBy aW50b2ZmKCkgewkJCQkvKiBUdXJuIHByaW50aW5nIG9mZiAqLwotICAgIGludCB4OwotICAgIGV4 dGVybiBpbnQgbm9wcmludGVyOwotICAgIGlmIChub3ByaW50ZXIpIHsKLQlwcmludGluZyA9IDA7 Ci0JZGVidWcoRjEwMCwiUFJJTlRFUiBPRkYgTk9QUklOVEVSIiwiIiwwKTsKLQlyZXR1cm47Ci0g ICAgfQotICAgIGRlYnVnKEYxMDAsIlBSSU5URVIgT0ZGIiwiIiwwKTsKLSAgICBpZiAocHJpbnRp bmcpIHsKLQl4ID0gemNsb3NlKFpNRklMRSk7Ci0JZGVidWcoRjEwMSwiUFJJTlRFUiBDTE9TRSIs IiIseCk7Ci0JcHJpbnRpbmcgPSAwOwotICAgIH0KLX0KLSNlbmRpZiAvKiBYUFJJTlQgKi8KLQot LyoKLSAgQyBIIEsgQSBFIFMgIC0tICBDaGVjayBBTlNJIEVzY2FwZSBTZXF1ZW5jZS4KLQotICBD YWxsIHdpdGggRUFDSCBjaGFyYWN0ZXIgaW4gaW5wdXQgc3RyZWFtLgotICBzcmMgPSAwIG1lYW5z IGMgaXMgaW5jb21pbmcgZnJvbSByZW1vdGU7IDEgPSBjaGFyIGZyb20ga2V5Ym9hcmQuCi0gIFNl dHMgZ2xvYmFsIGluZXNjW3NyY10gdmFyaWFibGUgYWNjb3JkaW5nIHRvIGVzY2FwZSBzZXF1ZW5j ZSBzdGF0ZS4KLSAgUmV0dXJucyAwIG5vcm1hbGx5LCAxIGlmIGFuIEFQQyBzZXF1ZW5jZSBpcyB0 byBiZSBleGVjdXRlZC4KLSAgSGFuZGxlcyB0cmFuc3BhcmVudCBwcmludGluZyBpbnRlcm5hbGx5 LgotKi8KLWludAotI2lmZGVmIENLX0FOU0lDCi1jaGthZXMoY2hhciBjLCBpbnQgc3JjKQotI2Vs c2UKLWNoa2FlcyhjLHNyYykgY2hhciBjOyBpbnQgc3JjOwotI2VuZGlmIC8qIENLX0FOU0lDICov Ci0vKiBjaGthZXMgKi8gewotCi0gICAgZGVidWcoRjExMSwiY2hrYWVzIGVudHJ5IGluZXNjIixj a2l0b2Eoc3JjKSxpbmVzY1tzcmNdKTsKLSAgICBkZWJ1ZyhGMTAxLCJjaGthZXMgYyIsIiIsYyk7 Ci0KLSAgICBpZiAoc3JjIDwgMCB8fCBzcmMgPiAxKQkJLyogRG9uJ3QgYWxsb3cgYmFkIGFyZ3Mu ICovCi0gICAgICByZXR1cm4oMCk7Ci0KLSAgICBvbGRlc2Nbc3JjXSA9IGluZXNjW3NyY107CQkv KiBSZW1lbWJlciBwcmV2aW91cyBzdGF0ZSAqLwotCi0jaWZkZWYgWFBSSU5UCi0gICAgaWYgKGlu ZXNjW3NyY10gJiYgIXNyYykgewkJLyogU2F2ZSB1cCBlc2NhcGUgc2VxIGZvciBwcmludGluZyAg Ki8KLQlpZiAoIWMpIHJldHVybigwKTsJCS8qIElnbm9yZSBOVUxzICovCi0JaWYgKGVzY2J1ZmMg PCBFU0NCVUZMRU4pIHsKLQkgICAgZXNjYnVmW2VzY2J1ZmMrK10gPSBjOwotCSAgICBlc2NidWZb ZXNjYnVmY10gPSBOVUw7Ci0JICAgIGRlYnVnKEYxMTEsIkVTQ0JVRiAxIixlc2NidWYsZXNjYnVm Yyk7Ci0JfSBlbHNlIHsJCQkvKiBCdWZmZXIgb3ZlcnJ1biAqLwotCSAgICBpZiAocHJpbnRpbmcg JiYgZXNjYnVmYykJLyogUHJpbnQgd2hhdCdzIHRoZXJlIHNvIGZhciAqLwotCSAgICAgIHpzb3V0 eChaTUZJTEUsZXNjYnVmLGVzY2J1ZmMpOwotCSAgICBlc2NidWZjID0gMTsJCS8qIGNsZWFyIGl0 IG91dCAqLwotCSAgICBlc2NidWZbMF0gPSBjOwkJLyogYW5kIHN0YXJ0IG9mZiBmcmVzaCBidWZm ZXIgKi8KLQkgICAgZXNjYnVmWzFdID0gTlVMOwkJLyogd2l0aCB0aGlzIGNoYXJhY3Rlci4gKi8K LQl9Ci0gICAgfQotI2VuZGlmIC8qIFhQUklOVCAqLwotCi0gICAgaWYgKGMgPT0gQ0FOIHx8IGMg PT0gU1VCKSB7CQkvKiBDQU4gYW5kIFNVQiBjYW5jZWwgYW55IHNlcXVlbmNlICovCi0jaWZkZWYg WFBSSU5UCi0JaWYgKCFzcmMpIHsKLQkgICAgaWYgKHByaW50aW5nICYmIGVzY2J1ZmMgPiAxKQot CSAgICAgIHpzb3V0eChaTUZJTEUsZXNjYnVmLGVzY2J1ZmMtMSk7Ci0JICAgIGVzY2J1ZmMgPSAw OwkJLyogQ2xlYXIgYnVmZmVyICovCi0JICAgIGVzY2J1ZlswXSA9IE5VTDsKLQl9Ci0jZW5kaWYg LyogWFBSSU5UICovCi0JaW5lc2Nbc3JjXSA9IEVTX05PUk1BTDsKLSAgICB9IGVsc2UJCQkJLyog T3RoZXJ3aXNlICovCi0KLSAgICAgIHN3aXRjaCAoaW5lc2Nbc3JjXSkgewkJLyogZW50ZXIgc3Rh dGUgc3dpdGNoZXIgKi8KLQljYXNlIEVTX05PUk1BTDoJCQkvKiBOT1JNQUwgc3RhdGUgKi8KLQkg IGlmIChjID09IEVTQykgewkJLyogR290IGFuIEVTQyAqLwotCSAgICAgIGluZXNjW3NyY10gPSBF U19HT1RFU0M7CS8qIENoYW5nZSBzdGF0ZSB0byBHT1RFU0MgKi8KLSNpZmRlZiBYUFJJTlQKLQkg ICAgICBpZiAoIXNyYykgewotCQkgIGVzY2J1ZmMgPSAxOwkJLyogQ2xlYXIgZXNjYXBlIHNlcXVl bmNlIGJ1ZmZlciAqLwotCQkgIGVzY2J1ZlswXSA9IGM7CS8qIGFuZCBkZXBvc2l0IHRoZSBFU0Mg Ki8KLQkJICBlc2NidWZbMV0gPSBOVUw7Ci0JCSAgZGVidWcoRjExMSwiRVNDQlVGIDIiLGVzY2J1 Zixlc2NidWZjKTsKLQkgICAgICB9Ci0jZW5kaWYgLyogWFBSSU5UICovCi0JICB9Ci0JICBicmVh azsJCQkvKiBPdGhlcndpc2Ugc3RheSBpbiBOT1JNQUwgc3RhdGUgKi8KLQotCWNhc2UgRVNfR09U RVNDOgkJCS8qIEdPVEVTQyBzdGF0ZSAtIHByZXYgY2hhciB3YXMgRVNDKi8KLQkgIGlmIChjID09 ICdbJykgewkJLyogTGVmdCBicmFja2V0IGFmdGVyIEVTQyBpcyBDU0kgKi8KLQkgICAgICBpbmVz Y1tzcmNdID0gRVNfR09UQ1NJOwkvKiBDaGFuZ2UgdG8gR09UQ1NJIHN0YXRlICovCi0JICB9IGVs c2UgaWYgKGMgPT0gJ1AnIHx8IChjID4gMDEzNCAmJiBjIDwgMDE0MCkpIHsgLyogUCwgXSwgXiwg b3IgXyAqLwotCSAgICAgIGluZXNjW3NyY10gPSBFU19TVFJJTkc7CS8qIFN3aXRjaCB0byBTVFJJ TkctYWJzb3JwdGlvbiBzdGF0ZSAqLwotI2lmZGVmIFhQUklOVAotCSAgICAgIGRlYnVnKEYxMTEs IkVTQ0JVRiBTVFJJTkciLGVzY2J1Zixlc2NidWZjKTsKLSNlbmRpZiAvKiBYUFJJTlQgKi8KLSNp ZmRlZiBDS19BUEMKLQkgICAgICAvKiBJZiBBUEMgbm90IGRpc2FibGVkICovCi0JICAgICAgaWYg KCFzcmMgJiYgYyA9PSAnXycgJiYgKGFwY3N0YXR1cyAmIEFQQ19PTikpIHsKLQkJICBkZWJ1ZyhG MTAwLCJDT05ORUNUIEFQQyBiZWdpbiIsIiIsMCk7Ci0JCSAgYXBjYWN0aXZlID0gQVBDX1JFTU9U RTsgLyogU2V0IEFQQy1BY3RpdmUgZmxhZyAqLwotCQkgIGFwY2xlbmd0aCA9IDA7CS8qIGFuZCBy ZXNldCBBUEMgYnVmZmVyIHBvaW50ZXIgKi8KLQkgICAgICB9Ci0jZW5kaWYgLyogQ0tfQVBDICov Ci0JICB9IGVsc2UgaWYgKGMgPiAwNTcgJiYgYyA8IDAxNzcpIHsgLyogRmluYWwgY2hhcmFjdGVy ICcwJyB0aHJ1ICd+JyAqLwotCSAgICAgIGluZXNjW3NyY10gPSBFU19OT1JNQUw7CS8qIEJhY2sg dG8gbm9ybWFsICovCi0jaWZkZWYgWFBSSU5UCi0JICAgICAgaWYgKCFzcmMpIHsKLQkJICBpZiAo cHJpbnRpbmcgJiYgZXNjYnVmYyA+IDEpIHsKLQkJICAgICAgLyogRHVtcCBlc2Mgc2VxIGJ1ZiB0 byBwcmludGVyICovCi0JCSAgICAgIHpzb3V0eChaTUZJTEUsZXNjYnVmLGVzY2J1ZmMtMSk7Ci0J CSAgICAgIGRlYnVnKEYxMTEsIkVTQ0JVRiBQUklOVCAxIixlc2NidWYsZXNjYnVmYyk7Ci0JCSAg fQotCi0JCSAgZXNjYnVmYyA9IDA7CQkvKiBDbGVhciBwYXJhbWV0ZXIgYnVmZmVyICovCi0JCSAg ZXNjYnVmWzBdID0gTlVMOwotCSAgICAgIH0KLSNlbmRpZiAvKiBYUFJJTlQgKi8KLQkgIH0gZWxz ZSBpZiAoYyAhPSBFU0MpIHsJLyogRVNDIGluIGFuIGVzY2FwZSBzZXF1ZW5jZS4uLiAqLwotCSAg ICAgIGluZXNjW3NyY10gPSBFU19FU0NTRVE7CS8qIHN0YXJ0cyBhIG5ldyBlc2NhcGUgc2VxdWVu Y2UgKi8KLQkgIH0KLQkgIGJyZWFrOwkJCS8qIEludGVybWVkaWF0ZSBvciBpZ25vcmVkIGN0cmwg Y2hhciAqLwotCi0JY2FzZSBFU19FU0NTRVE6CQkJLyogRVNDU0VRIC0tIGluIGFuIGVzY2FwZSBz ZXF1ZW5jZSAqLwotCSAgaWYgKGMgPiAwNTcgJiYgYyA8IDAxNzcpIHsJLyogRmluYWwgY2hhcmFj dGVyICcwJyB0aHJ1ICd+JyAqLwotCSAgICAgIGluZXNjW3NyY10gPSBFU19OT1JNQUw7CS8qIFJl dHVybiB0byBOT1JNQUwgc3RhdGUuICovCi0jaWZkZWYgWFBSSU5UCi0JICAgICAgaWYgKCFzcmMp IHsKLQkJICBpZiAocHJpbnRpbmcgJiYgZXNjYnVmYyA+IDEpIHsKLQkJICAgICAgenNvdXR4KFpN RklMRSxlc2NidWYsZXNjYnVmYy0xKTsKLQkJICAgICAgZGVidWcoRjExMSwiRVNDQlVGIFBSSU5U IDIiLGVzY2J1Zixlc2NidWZjKTsKLQkJICB9Ci0JCSAgZXNjYnVmYyA9IDA7CQkvKiBDbGVhciBl c2NzZXEgYnVmZmVyICovCi0JCSAgZXNjYnVmWzBdID0gTlVMOwotCSAgICAgIH0KLSNlbmRpZiAv KiBYUFJJTlQgKi8KLQkgIH0gZWxzZSBpZiAoYyA9PSBFU0MpIHsJLyogRVNDIC4uLiAqLwotCSAg ICAgIGluZXNjW3NyY10gPSBFU19HT1RFU0M7CS8qIHN0YXJ0cyBhIG5ldyBlc2NhcGUgc2VxdWVu Y2UgKi8KLQkgIH0KLQkgIGJyZWFrOwkJCS8qIEludGVybWVkaWF0ZSBvciBpZ25vcmVkIGN0cmwg Y2hhciAqLwotCi0JY2FzZSBFU19HT1RDU0k6CQkJLyogR09UQ1NJIC0tIEluIGEgY29udHJvbCBz ZXF1ZW5jZSAqLwotCSAgaWYgKGMgPiAwNzcgJiYgYyA8IDAxNzcpIHsJLyogRmluYWwgY2hhcmFj dGVyICdAJyB0aHJ1ICd+JyAqLwotI2lmZGVmIFhQUklOVAotCSAgICAgIGlmICghc3JjICYmIHR0 X3ByaW50KSB7CS8qIFByaW50ZXIgZW5hYmxlZD8gKi8KLQkJICBpZiAoYyA9PSAnaScpIHsJLyog RmluYWwgY2hhciBpcyAiaSI/ICovCi0JCSAgICAgIGNoYXIgKiBwID0gKGNoYXIgKikgKGVzY2J1 ZiArIGVzY2J1ZmMgLSA0KTsKLQkJICAgICAgaWYgKCFzdHJuY21wKHAsICJcMDMzWzVpIiwgNCkp IHsgLyogVHVybiBwcmludGVyIG9uICovCi0JCQkgIHByaW50b24oKTsKLQkJICAgICAgfSBlbHNl IGlmICghc3RybmNtcChwLCAiXDAzM1s0aSIsIDQpKSB7IC8qIE9yIG9mZi4uLiAqLwotCQkJICBp bnQgaTsKLQkJCSAgcHJpbnRvZmYoKTsJCQkvKiBUdXJuIG9mZiBwcmludGVyLiAqLwotCQkJICBk b250cHJpbnQgPSAxOwotCQkJICBmb3IgKGkgPSAwOyBpIDwgZXNjYnVmYzsgaSsrKQkvKiBBbmQg b3V0cHV0IHRoZSAqLwotCQkJICAgIGNrY3B1dGMoZXNjYnVmW2ldKTsgICAgICAgICAvKiBzZXF1 ZW5jZS4gKi8KLQkJICAgICAgfSBlbHNlIGlmIChwcmludGluZyAmJiBlc2NidWZjID4gMSkgewot CQkJICB6c291dHgoWk1GSUxFLGVzY2J1Zixlc2NidWZjLTEpOwotCQkJICBkZWJ1ZyhGMDExLCJF U0NCVUYgUFJJTlQgMyIsZXNjYnVmLGVzY2J1ZmMpOwotCQkgICAgICB9Ci0JCSAgfSBlbHNlIGlm IChwcmludGluZyAmJiBlc2NidWZjID4gMSkgewotCQkgICAgICB6c291dHgoWk1GSUxFLGVzY2J1 Zixlc2NidWZjLTEpOwotCQkgICAgICBkZWJ1ZyhGMTExLCJFU0NCVUYgUFJJTlQgNCIsZXNjYnVm LGVzY2J1ZmMpOwotCQkgIH0KLQkgICAgICB9Ci0JICAgICAgaWYgKCFzcmMpIHsKLQkJICBlc2Ni dWZjID0gMDsJCS8qIENsZWFyIGVzYyBzZXF1ZW5jZSBidWZmZXIgKi8KLQkJICBlc2NidWZbMF0g PSBOVUw7Ci0JICAgICAgfQotI2VuZGlmIC8qIFhQUklOVCAqLwotCSAgICAgIGluZXNjW3NyY10g PSBFU19OT1JNQUw7CS8qIFJldHVybiB0byBOT1JNQUwuICovCi0JICB9IGVsc2UgaWYgKGMgPT0g RVNDKSB7CS8qIEVTQyAuLi4gKi8KLQkgICAgICBpbmVzY1tzcmNdID0gRVNfR09URVNDOwkvKiBz dGFydHMgb3Zlci4gKi8KLQkgIH0KLQkgIGJyZWFrOwotCi0JY2FzZSBFU19TVFJJTkc6CQkJLyog SW5zaWRlIGEgc3RyaW5nICovCi0JICBpZiAoYyA9PSBFU0MpCQkJLyogRVNDIG1heSBiZSAxc3Qg Y2hhciBvZiB0ZXJtaW5hdG9yICovCi0JICAgIGluZXNjW3NyY10gPSBFU19URVJNSU47CS8qIEdv IHNlZS4gKi8KLSNpZmRlZiBDS19BUEMKLQkgIGVsc2UgaWYgKGFwY2FjdGl2ZSkgewkJLyogSWYg aW4gQVBDICovCi0JICAgICAgaWYgKGFwY2xlbmd0aCA8IGFwY2J1ZmxlbikgeyAvKiBhbmQgdGhl cmUgaXMgcm9vbS4uLiAqLwotCQkgIGFwY2J1ZlthcGNsZW5ndGgrK10gPSBjOyAvKiBkZXBvc2l0 IHRoaXMgY2hhcmFjdGVyLiAqLwotCSAgICAgIH0gZWxzZSB7CQkJLyogQnVmZmVyIG92ZXJydW4g Ki8KLQkJICBhcGNhY3RpdmUgPSAwOwkvKiBEaXNjYXJkIHdoYXQgd2UgZ290ICovCi0JCSAgYXBj bGVuZ3RoID0gMDsJLyogYW5kIGdvIGJhY2sgdG8gbm9ybWFsICovCi0JCSAgYXBjYnVmWzBdID0g MDsJLyogTm90IHByZXR0eSwgYnV0IHdoYXQgZWxzZSAqLwotCQkgIGluZXNjW3NyY10gPSBFU19O T1JNQUw7IC8qIGNhbiB3ZSBkbz8gIChTVCBtaWdodCBub3QgY29tZSkgKi8KLQkgICAgICB9Ci0J ICB9Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0JICBicmVhazsJCQkvKiBBYnNvcmIgYWxsIG90aGVy IGNoYXJhY3RlcnMuICovCi0KLQljYXNlIEVTX1RFUk1JTjoJCQkvKiBNYXliZSBhIHN0cmluZyB0 ZXJtaW5hdG9yICovCi0JICBpZiAoYyA9PSAnXFwnKSB7CQkvKiB3aGljaCBtdXN0IGJlIGJhY2tz bGFzaCAqLwotCSAgICAgIGluZXNjW3NyY10gPSBFU19OT1JNQUw7CS8qIElmIHNvLCBiYWNrIHRv IE5PUk1BTCAqLwotI2lmZGVmIFhQUklOVAotCSAgICAgIGlmICghc3JjKSB7Ci0JCSAgaWYgKHBy aW50aW5nICYmIGVzY2J1ZmMgPiAxKSB7IC8qIElmIHByaW50aW5nLi4uICovCi0JCSAgICAgIC8q IFByaW50IGVzYyBzZXEgYnVmZmVyICovCi0JCSAgICAgIHpzb3V0eChaTUZJTEUsZXNjYnVmLGVz Y2J1ZmMtMSk7Ci0JCSAgICAgIGRlYnVnKEYxMTEsIkVTQ0JVRiBQUklOVCA1Iixlc2NidWYsZXNj YnVmYyk7Ci0JCSAgfQotCQkgIGVzY2J1ZmMgPSAwOwkJLyogQ2xlYXIgZXNjc2VxIGJ1ZmZlciAq LwotCQkgIGVzY2J1ZlswXSA9IE5VTDsKLQkgICAgICB9Ci0jZW5kaWYgLyogWFBSSU5UICovCi0j aWZkZWYgQ0tfQVBDCi0JICAgICAgaWYgKCFzcmMgJiYgYXBjYWN0aXZlKSB7CS8qIElmIGl0IHdh cyBhbiBBUEMgc3RyaW5nLCAqLwotCQkgIGRlYnVnKEYxMDEsIkNPTk5FQ1QgQVBDIHRlcm1pbmF0 ZWQiLCIiLGMpOwotCQkgIGFwY2J1ZlthcGNsZW5ndGhdID0gTlVMOyAvKiB0ZXJtaW5hdGUgaXQg YW5kIHRoZW4gLi4uICovCi0JCSAgcmV0dXJuKDEpOwotCSAgICAgIH0KLSNlbmRpZiAvKiBDS19B UEMgKi8KLQkgIH0gZWxzZSB7CQkJLyogSXQncyBub3QgYSBiYWNrc2xhc2ggc28uLi4gKi8KLQkg ICAgICBpbmVzY1tzcmNdID0gRVNfU1RSSU5HOwkvKiBiYWNrIHRvIHN0cmluZyBhYnNvcnB0aW9u LiAqLwotI2lmZGVmIENLX0FQQwotCSAgICAgIGlmIChhcGNhY3RpdmUpIHsJCS8qIEluIEFQQyBz dHJpbmcgKi8KLQkJICBpZiAoYXBjbGVuZ3RoKzEgPCBhcGNidWZsZW4pIHsgLyogSWYgZW5vdWdo IHJvb20gKi8KLQkJICAgICAgYXBjYnVmW2FwY2xlbmd0aCsrXSA9IEVTQzsgLyogZGVwb3NpdCB0 aGUgRXNjICovCi0JCSAgICAgIGFwY2J1ZlthcGNsZW5ndGgrK10gPSBjOyAgIC8qIGFuZCB0aGlz IGNoYXJhY3RlciB0b28uICovCi0JCSAgfSBlbHNlIHsJCS8qIEJ1ZmZlciBvdmVycnVuICovCi0J CSAgICAgIGFwY2FjdGl2ZSA9IDA7Ci0JCSAgICAgIGFwY2xlbmd0aCA9IDA7Ci0JCSAgICAgIGFw Y2J1ZlswXSA9IDA7Ci0JCSAgICAgIGluZXNjW3NyY10gPSBFU19OT1JNQUw7Ci0JCSAgfQotCSAg ICAgIH0KLSNlbmRpZiAvKiBDS19BUEMgKi8KLQkgIH0KLSAgICAgIH0JLyogc3dpdGNoKCkgKi8K LSAgICBkZWJ1ZyhGMTExLCJjaGthZXMgZXhpdCBpbmVzYyIsY2tpdG9hKHNyYyksaW5lc2Nbc3Jj XSk7Ci0gICAgcmV0dXJuKDApOwotfQotI2VuZGlmIC8qIE5PRVNDU0VRICovCi0KLVZPSUQKLSNp ZmRlZiBDS19BTlNJQwotTE9HQ0hBUihjaGFyIGMpCi0jZWxzZQotTE9HQ0hBUihjKSBjaGFyIGM7 Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIExPR0NIQVIgKi8geyAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBMb2cgY2hhcmFjdGVyIGMgdG8gc2Vzc2lvbiBsb2cgKi8KLSAgICAvKiBidXQg c2tpcCBvdmVyIGVzY2FwZSBzZXF1ZW5jZXMgaWYgc2Vzc2lvbiBsb2cgaXMgdGV4dCAqLwotICAg IGlmIChlc2NzZXEpIHsKLQlpZiAoKHNlc3NmdCA9PSBYWUZUX1QpICYmIChkZWJzZXMgPT0gMCkg JiYKLQkgICAgKGluZXNjWzBdICE9IEVTX05PUk1BTCB8fCBvbGRlc2NbMF0gIT0gRVNfTk9STUFM KSkKLQkgIHJldHVybjsKLSAgICB9Ci0gICAgbG9nY2hhcihjKTsKLX0KLQotLyogIEMgSyBDIFAg VSBUIEMgIC0tICBDLUtlcm1pdCBDT05ORUNUIFB1dCBDaGFyYWN0ZXIgdG8gU2NyZWVuICAqLwot LyoKLSAgT3V0cHV0IGlzIGJ1ZmZlcmVkIHRvIGF2b2lkIHNsb3cgc2NyZWVuIHdyaXRlcyBvbiBm YXN0IGNvbm5lY3Rpb25zLgotKi8KLXN0YXRpYyBpbnQKLWNrY3B1dGYoKSB7CQkJCS8qIER1bXAg dGhlIGNvbnNvbGUgb3V0cHV0IGJ1ZmZlciAqLwotICAgIGludCB4ID0gMDsKLSAgICBpZiAob2Jj ID4gMCkJCQkvKiBJZiB3ZSBoYXZlIGFueSBjaGFyYWN0ZXJzLCAqLwotICAgICAgeCA9IGNvbnhv KG9iYyxvYnVmKTsJCS8qIGR1bXAgdGhlbSwgKi8KLSAgICBvYnAgPSBvYnVmOwkJCQkvKiByZXNl dCB0aGUgcG9pbnRlciAqLwotICAgIG9iYyA9IDA7CQkJCS8qIGFuZCB0aGUgY291bnRlci4gKi8K LSAgICByZXR1cm4oeCk7CQkJCS8qIFJldHVybiBjb254bydzIHJldHVybiBjb2RlICovCi19Ci0K LS8qCi0gIE5PVEU6IFRoaXMgaXMgcHJvYmFibHkgdGhlIHJpZ2h0IHBsYWNlIGZvciBjaGFyYWN0 ZXItc2V0IHRyYW5zbGF0aW9uLAotICByYXRoZXIgdGhhbiBkb3duIGJlbG93IGluIHRoZSBtYWlu bGluZSBjb2RlLiAgY2tjcHV0YygpIHdvdWxkIGFjdCBsaWtlCi0gIHhwbmJ5dGUoKSBpbiBja2Nm bnMuYywgYW5kIGNrY2dldGMoKSB3b3VsZCBhY3QgbGlrZSB4Z25ieXRlKCkuICBUaGlzCi0gIHdv dWxkIHNoaWVsZCB0aGUgcmVzdCBvZiB0aGUgY29kZSBmcm9tIGFsbCB0aGUgY29tcGxleGl0aWVz IG9mIG1hbnktdG8tb25lCi0gIGFuZCBvbmUtdG8tbWFueSBjb252ZXJzaW9ucywgYW5kIHdvdWxk IGFsbG93IGhhbmRsaW5nIG9mIEthbmppIGFuZCBvdGhlcgotICBDSksgc2V0cyBhbG9uZyB3aXRo IFVURi04IGFuZCB0aGUgcmVzdC4KLSovCi1pbnQKLWNrY3B1dGMoYykgaW50IGM7IHsKLSAgICBp bnQgeDsKLQotICAgICpvYnArKyA9IGMgJiAweGZmOwkJCS8qIERlcG9zaXQgdGhlIGNoYXJhY3Rl ciAqLwotICAgIG9iYysrOwkJCQkvKiBDb3VudCBpdCAqLwotICAgIGlmIChpYmMgPT0gMCB8fAkJ CS8qIElmIGlucHV0IGJ1ZmZlciBhYm91dCBlbXB0eSAqLwotCW9iYyA9PSBPQlVGTCkgewkJCS8q IG9yIG91dHB1dCBidWZmZXIgZnVsbCAqLwotCWRlYnVnKEYxMDEsIkNPTk5FQ1QgQ0tDUFVUQyBv YmMiLCIiLG9iYyk7Ci0JeCA9IGNvbnhvKG9iYyxvYnVmKTsJCS8qIGR1bXAgdGhlIGJ1ZmZlciwg Ki8KLQlvYnAgPSBvYnVmOwkJCS8qIHJlc2V0IHRoZSBwb2ludGVyICovCi0Jb2JjID0gMDsJCQkv KiBhbmQgdGhlIGNvdW50ZXIuICovCi0JcmV0dXJuKHgpOwkJCS8qIFJldHVybiBjb254bydzIHJl dHVybiBjb2RlICovCi0gICAgfSBlbHNlIHJldHVybigwKTsKLX0KLQotLyogIEMgSyBDIEcgRSBU IEMgIC0tICBDLUtlcm1pdCBDT05ORUNUIEdldCBDaGFyYWN0ZXIgICovCi0vKgotICBCdWZmZXJl ZCByZWFkIGZyb20gY29tbXVuaWNhdGlvbiBkZXZpY2UuCi0gIFJldHVybnMgdGhlIG5leHQgY2hh cmFjdGVyLCByZWZpbGxpbmcgdGhlIGJ1ZmZlciBpZiBuZWNlc3NhcnkuCi0gIE9uIGVycm9yLCBy ZXR1cm5zIHR0aW5jJ3MgcmV0dXJuIGNvZGUgKHNlZSB0dGluYygpIGRlc2NyaXB0aW9uKS4KLSAg RHVtbXkgYXJndW1lbnQgZm9yIGNvbXBhdGlibGUgY2FsbGluZyBjb252ZW50aW9ucyB3aXRoIHR0 aW5jKCkKLSAgc28gYSBwb2ludGVyIHRvIHRoaXMgZnVuY3Rpb24gY2FuIGJlIHBhc3NlZCB0byB0 bl9kb29wKCkuCi0qLwotaW50Ci1ja2NnZXRjKGR1bW15KSBpbnQgZHVtbXk7IHsKLSAgICBpbnQg YywgbjsKLSNpZmRlZiBDS19TU0wKLSAgICBleHRlcm4gaW50IHNzbF9hY3RpdmVfZmxhZywgdGxz X2FjdGl2ZV9mbGFnOwotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0jaWZkZWYgQ0tfRU5DUllQVElP TgotICAgIC8qIE5vIGJ1ZmZlcmluZyBmb3IgcG9zc2libHkgZW5jcnlwdGVkIGNvbm5lY3Rpb25z ICovCi0gICAgaWYgKG5ldHdvcmsgJiYgSVNfVEVMTkVUKCkgJiYgVEVMT1BUX01FKFRFTE9QVF9B VVRIRU5USUNBVElPTikpCi0gICAgICByZXR1cm4odHRpbmMoMCkpOwotI2VuZGlmIC8qIENLX0VO Q1JZUFRJT04gKi8KLSNpZmRlZiBDS19TU0wKLSAgICBpZiAoc3NsX2FjdGl2ZV9mbGFnIHx8IHRs c19hY3RpdmVfZmxhZykKLSAgICAgICAgcmV0dXJuKHR0aW5jKDApKTsKLSNlbmRpZiAvKiBDS19T U0wgKi8KLQotICAgIGlmIChpYmMgPCAxKSB7CQkJLyogTmVlZCB0byByZWZpbGwgYnVmZmVyPyAq LwotCWliYyA9IDA7CQkJLyogWWVzLCByZXNldCBjb3VudCAqLwotCWlicCA9IGlidWY7CQkJLyog YW5kIGJ1ZmZlciBwb2ludGVyICovCi0JYyA9IHR0aW5jKDApOwkJCS8qIFJlYWQgb25lIGNoYXJh Y3RlciwgYmxvY2tpbmcgKi8KLQlpZiAoYyA8IDApIHsJCQkvKiBJZiBlcnJvciwgcmV0dXJuIGVy cm9yIGNvZGUgKi8KLQkgICAgcmV0dXJuKGMpOwotCX0gZWxzZSB7CQkJLyogT3RoZXJ3aXNlLCBn b3Qgb25lIGNoYXJhY3RlciAqLwotCSAgICAqaWJwKysgPSBjOwkJCS8qIEFkdmFuY2UgYnVmZmVy IHBvaW50ZXIgKi8KLQkgICAgaWJjKys7CQkJLyogYW5kIGNvdW50LiAqLwotCX0KLQlpZiAoKG4g PSB0dGNoaygpKSA+IDApIHsJLyogQW55IG1vcmUgd2FpdGluZz8gKi8KLQkgICAgaWYgKG4gPiAo SUJVRkwgLSBpYmMpKQkvKiBHZXQgdGhlbSBhbGwgYXQgb25jZS4gKi8KLQkgICAgICBuID0gSUJV RkwgLSBpYmM7CQkvKiBEb24ndCBvdmVyZmxvdyBidWZmZXIgKi8KLQkgICAgICBpZiAoKG4gPSB0 dHhpbihuLChDSEFSICopaWJwKSkgPiAwKSB7Ci0JCSAgaWJjICs9IG47CQkvKiBBZHZhbmNlIGNv dW50ZXIgKi8KLSAgICAgICAgICAgICAgfQotCX0gZWxzZSBpZiAobiA8IDApIHsJCS8qIEVycm9y PyAqLwotCSAgICByZXR1cm4obik7CQkJLyogUmV0dXJuIHRoZSBlcnJvciBjb2RlICovCi0JfQot CWlicCA9IGlidWY7CQkJLyogUG9pbnQgdG8gYmVnaW5uaW5nIG9mIGJ1ZmZlciAqLwotICAgIH0K LSAgICBjID0gKmlicCsrICYgMHhmZjsJCQkvKiBHZXQgbmV4dCBjaGFyYWN0ZXIgZnJvbSBidWZm ZXIgKi8KLSAgICBpYmMtLTsJCQkJLyogUmVkdWNlIGJ1ZmZlciBjb3VudCAqLwotICAgIC8qIGRl YnVnKEYwMDAsIkNLQ0dFVEMiLCIiLGMpOyAqLwotICAgIHJldHVybihjKTsJCQkJLyogUmV0dXJu IHRoZSBjaGFyYWN0ZXIgKi8KLX0KLQotLyoKLSAgIEtleWJvYXJkIGhhbmRsaW5nLCBidWZmZXJl ZCBmb3Igc3BlZWQsIHdoaWNoIGlzIG5lZWRlZCB3aGVuIEMtS2VybWl0IGlzCi0gICBpbiBDT05O RUNUIG1vZGUgYmV0d2VlbiB0d28gb3RoZXIgY29tcHV0ZXJzIHRoYXQgYXJlIHRyYW5zZmVycmlu ZyBkYXRhLgotKi8KLXN0YXRpYyBjaGFyICprYnA7CQkJLyogS2V5Ym9hcmQgaW5wdXQgYnVmZmVy IHBvaW50ZXIgKi8KLXN0YXRpYyBpbnQga2JjOwkJCQkvKiBLZXlib2FyZCBpbnB1dCBidWZmZXIg Y291bnQgKi8KLQotI2lmZGVmIENLX1NNQUxMCQkJCS8qIEtleWJvYXJkIGlucHV0IGJ1ZmZlciBs ZW5ndGggKi8KLSNkZWZpbmUgS0JVRkwgMzIJCQkvKiBTbWFsbCBmb3IgUERQLTExIFVOSVggKi8K LSNlbHNlCi0jZGVmaW5lIEtCVUZMIDI1NwkJCS8qIFJlZ3VsYXIga2VybmVsIHNpemUgZm9yIG90 aGVycyAqLwotI2VuZGlmIC8qIENLX1NNQUxMICovCi0KLSNpZmRlZiBEWU5BTUlDCi1zdGF0aWMg Y2hhciAqa2J1ZiA9IE5VTEw7Ci0jZWxzZQotc3RhdGljIGNoYXIga2J1ZltLQlVGTF07Ci0jZW5k aWYgLyogRFlOQU1JQyAqLwotCi0vKiBNYWNybyBmb3IgcmVhZGluZyBrZXlzdHJva2VzLiAqLwot Ci0jZGVmaW5lIENPTkdLUygpICgoKC0ta2JjKT49MCkgPyAoKGludCkoKmticCsrKSAmIDAzNzcp IDoga2JnZXQoKSkKLQotLyoKLSAgTm90ZSB0aGF0IHdlIGNhbGwgcmVhZCgpIGRpcmVjdGx5IGhl cmUsIG5vcm1hbGx5IGEgbm8tbm8sIGJ1dCBpbiB0aGlzIGNhc2UKLSAgd2Uga25vdyBpdCdzIFVO SVggYW5kIHdlJ3JlIG9ubHkgZG9pbmcgd2hhdCBjb25pbmMoMCkgd291bGQgaGF2ZSBkb25lLAot ICBleGNlcHQgd2UncmUgcmVhZGluZyBhIGJsb2NrIG9mIGNoYXJhY3RlcnMgcmF0aGVyIHRoYW4g anVzdCBvbmUuICBUaGVyZSBpcywKLSAgYXQgcHJlc2VudCwgbm8gY29ueGluKCkgYW5hbG9nIHRv IHR0eGluKCkgZm9yIGNodW5rIHJlYWRzLCBhbmQgaW5zdGl0dXRpbmcKLSAgb25lIHdvdWxkIG9u bHkgYWRkIGZ1bmN0aW9uLWNhbGwgb3ZlcmhlYWQgYXMgaXQgd291bGQgb25seSBiZSBhIHdyYXBw ZXIgZm9yCi0gIGEgcmVhZCgpIGNhbGwgYW55d2F5LgotCi0gIEFub3RoZXIgbm90ZTogV2Ugc3Rp Y2sgaW4gdGhpcyByZWFkKCkgdGlsbCB0aGUgdXNlciB0eXBlcyBzb21ldGhpbmcuCi0gIEJ1dCB3 ZSBrbm93IHRoZXkgYWxyZWFkeSBkaWQsIHNpbmNlIHNlbGVjdCgpIHNhaWQgc28uICBUaGVyZWZv cmUgc29tZXRoaW5nCi0gIHdvdWxkIG5lZWQgdG8gYmUgbWlnaHR5IHdyb25nIGJlZm9yZSB3ZSBn ZXQgc3R1Y2sgaGVyZS4KLSovCi1zdGF0aWMgaW50CQkJCS8qIEtleWJvYXJkIGJ1ZmZlciBmaWxs ZXIgKi8KLWtiZ2V0KCkgewotI2lmZGVmIEVJTlRSCi0gICAgaW50IHRyaWVzID0gMTA7CQkJLyog SWYgcmVhZCgpIGlzIGludGVycnVwdGVkLCAqLwotICAgIGludCBvayA9IDA7Ci0gICAgd2hpbGUg KHRyaWVzLS0gPiAwKSB7CQkvKiB0cnkgYSBmZXcgdGltZXMuLi4gKi8KLSNlbmRpZiAvKiBFSU5U UiAqLwotCWtiYyA9IGNvbmNoaygpOwkJCS8qIEhvdyBtYW55IGNoYXJzIHdhaXRpbmc/ICovCi0J ZGVidWcoRjEwMSwia2JnZXQga2JjIiwiIixrYmMpOwotCWlmIChrYmMgPCAxKQotCSAga2JjID0g MTsJCQkvKiBJZiBub25lIG9yIGR1bm5vLCB3YWl0IGZvciBvbmUuICovCi0JZWxzZSBpZiAoa2Jj ID4gS0JVRkwpCQkvKiBJZiB0b28gbWFueSwgKi8KLQkgIGtiYyA9IEtCVUZMOwkJCS8qIG9ubHkg cmVhZCB0aGlzIG1hbnkuICovCi0JaWYgKChrYmMgPSByZWFkKDAsIGtidWYsIGtiYykpIDwgMSkg eyAvKiBOb3cgcmVhZCBpdC90aGVtLiAqLwotCSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGtiZ2V0 IGVycm5vIiwiIixlcnJubyk7CS8qIEdvdCBhbiBlcnJvci4gKi8KLSNpZmRlZiBFSU5UUgotCSAg ICBpZiAoZXJybm8gPT0gRUlOVFIpCQkvKiBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbC4gKi8KLQkg ICAgICBjb250aW51ZTsJCQkvKiBUcnkgYWdhaW4sIHVwIHRvIGxpbWl0LiAqLwotCSAgICBlbHNl CQkJLyogU29tZXRoaW5nIGVsc2UuICovCi0jZW5kaWYgLyogRUlOVFIgKi8KLQkgICAgICByZXR1 cm4oLTEpOwkJLyogUGFzcyBhbG9uZyByZWFkKCkgZXJyb3IuICovCi0JfQotI2lmZGVmIEVJTlRS Ci0JZWxzZSB7IG9rID0gMTsgYnJlYWs7IH0KLSAgICB9Ci0gICAgaWYgKCFvaykgcmV0dXJuKC0x KTsKLSNlbmRpZiAvKiBFSU5UUiAqLwotICAgIGticCA9IGtidWY7CQkJCS8qIEFkanVzdCBidWZm ZXIgcG9pbnRlciwgKi8KLSAgICBrYmMtLTsJCQkJLyogY291bnQsICovCi0gICAgcmV0dXJuKChp bnQpKCprYnArKykgJiAwMzc3KTsJLyogYW5kIHJldHVybiBmaXJzdCBjaGFyYWN0ZXIuICovCi19 Ci0KLSNpZmRlZiBCRUJPWAotLyoKLSAqIENyZWF0ZVNvY2tldFBhaXIgLS0KLSAqCi0gKglUaGlz IHByb2NlZHVyZSBjcmVhdGVzIGEgY29ubmVjdGVkIHNvY2tldCBwYWlyCi0gKgotICogUmVzdWx0 czoKLSAqCTAgaWYgT0ssIHRoZSBlcnJvciBpZiBub3QgT0suCi0gKgotICogU2lkZSBlZmZlY3Rz OgotICoJTm9uZQotICovCi1pbnQKLXNvY2tldHBhaXIoaW50ICpwYWlyKSB7Ci0gICAgaW50IHNl cnZzb2NrOwotICAgIGludCB2YWw7Ci0gICAgc3RydWN0IHNvY2thZGRyX2luIHNlcnZfYWRkciwg Y2xpX2FkZHI7Ci0gICAgZXh0ZXJuIGNoYXIgbXlpcGFkZHJbXTsKLQotICAgIGRlYnVnKEYxMTAs InNvY2tldHBhaXIiLG15aXBhZGRyLDApOwotCi0gICAgaWYgKG15aXBhZGRyWzBdID09IDApCi0g ICAgICBnZXRsb2NhbGlwYWRkcigpOwotCi0gICAgc2VydnNvY2sgPSBzb2NrZXQoQUZfSU5FVCwg U09DS19TVFJFQU0sIDApOwotICAgIGlmIChzZXJ2c29jayA9PSAwKSB7Ci0JcmV0dXJuIGhfZXJy bm87Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsInNvY2tldHBhaXIiLCJzb2NrZXQiLHNlcnZzb2Nr KTsKLQotICAgIG1lbXNldCgmc2Vydl9hZGRyLCAwLCBzaXplb2Yoc2Vydl9hZGRyKSk7Ci0gICAg c2Vydl9hZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotICAgIHNlcnZfYWRkci5zaW5fYWRkci5z X2FkZHIgPSBodG9ubChJTkFERFJfQU5ZKTsKLSAgICBzZXJ2X2FkZHIuc2luX3BvcnQgPSBodG9u cygwKTsKLQotICAgIHZhbCA9IHNpemVvZihzZXJ2X2FkZHIpOwotICAgIGlmIChiaW5kKHNlcnZz b2NrLCAoc3RydWN0IHNvY2thZGRyICopICZzZXJ2X2FkZHIsIHZhbCkgPCAwKSB7Ci0JY2xvc2Vz b2NrZXQoc2VydnNvY2spOwotCXJldHVybiBoX2Vycm5vOwotICAgIH0KLSAgICBkZWJ1ZyhGMTEx LCJzb2NrZXRwYWlyIiwiYmluZCIsMCk7Ci0KLSAgICBsaXN0ZW4oc2VydnNvY2ssIDEpOwotICAg IGRlYnVnKEYxMTEsInNvY2tldHBhaXIiLCJsaXN0ZW4iLDApOwotCi0gICAgaWYgKGdldHNvY2tu YW1lKHNlcnZzb2NrLCAoc3RydWN0IHNvY2thZGRyICopICZzZXJ2X2FkZHIsICZ2YWwpIDwgMCkg ewotCWNsb3Nlc29ja2V0KHNlcnZzb2NrKTsKLQlyZXR1cm4gaF9lcnJubzsKLSAgICB9Ci0gICAg ZGVidWcoRjExMSwic29ja2V0cGFpciIsImdldHNvY2tuYW1lIiwwKTsKLQotICAgIHBhaXJbMF0g PSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApOwotICAgIGlmIChwYWlyWzBdID09IDAp IHsKLQljbG9zZXNvY2tldChzZXJ2c29jayk7Ci0JcmV0dXJuIGhfZXJybm87Ci0gICAgfQotICAg IGRlYnVnKEYxMTEsInNvY2tldHBhaXIiLCJzb2NrZXQiLHBhaXJbMF0pOwotCi0gICAgbWVtc2V0 KCZjbGlfYWRkciwgMCwgc2l6ZW9mKGNsaV9hZGRyKSk7Ci0gICAgY2xpX2FkZHIuc2luX2ZhbWls eSA9IEFGX0lORVQ7Ci0gICAgY2xpX2FkZHIuc2luX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyKG15 aXBhZGRyWzBdP215aXBhZGRyOiIxMjcuMC4wLjEiKTsKLSAgICBjbGlfYWRkci5zaW5fcG9ydCA9 IHNlcnZfYWRkci5zaW5fcG9ydDsKLQotICAgIGlmIChjb25uZWN0KHBhaXJbMF0sKHN0cnVjdCBz b2NrYWRkciAqKSAmY2xpX2FkZHIsIHNpemVvZihjbGlfYWRkcikpIDwgMCkgewotCWNsb3Nlc29j a2V0KHBhaXJbMF0pOwotCWNsb3Nlc29ja2V0KHNlcnZzb2NrKTsKLQlyZXR1cm4gaF9lcnJubzsK LSAgICB9Ci0gICAgZGVidWcoRjExMSwic29ja2V0cGFpciIsImNvbm5lY3QiLDApOwotCi0gICAg cGFpclsxXSA9IGFjY2VwdChzZXJ2c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmc2Vydl9hZGRy LCAmdmFsKTsKLSAgICBpZiAocGFpclsxXSA9PSAwKSB7Ci0JY2xvc2Vzb2NrZXQocGFpclswXSk7 Ci0JY2xvc2Vzb2NrZXQoc2VydnNvY2spOwotCXJldHVybiBoX2Vycm5vOwotICAgIH0KLSAgICBk ZWJ1ZyhGMTExLCJzb2NrZXRwYWlyIiwiYWNjZXB0IixwYWlyWzFdKTsKLQotICAgIGNsb3Nlc29j a2V0KHNlcnZzb2NrKTsKLSAgICBkZWJ1ZyhGMTExLCJzb2NrZXRwYWlyIiwiY2xvc2Vzb2NrZXQi LDApOwotICAgIHJldHVybiAwOwotfQotCi1sb25nCi1rYmRyZWFkKHZvaWQgKiBwYXJhbSkgewot ICAgIGludCBzb2NrID0gKGludCkgcGFyYW07Ci0gICAgY2hhciBjaDsKLSAgICBpbnQgcmMgPSAw OwotCi0gICAgZGVidWcoRjExMSwia2JkcmVhZCIsInNvY2siLHNvY2spOwotCi0gICAgd2hpbGUg KHJjID49IDApIHsKLQlyYyA9IHJlYWQoZmlsZW5vKHN0ZGluKSwgJmNoLCAxKTsgLyogUmVhZCBh IGNoYXJhY3Rlci4gKi8KLQlpZiAocmMgPiAwKSB7Ci0JICAgIHJjID0gc2VuZChzb2NrLCZjaCwx LDApOwotCSAgICAvKiBkZWJ1ZyhGMDAwLCJrYmRyZWFkIiwic2VuZCgpIixjaCk7ICovCi0JICAg IHByaW50ZigiXHJcbmdvdDogJWMgcmMgPSAlZFxyXG4iLGNoLHJjKTsKLQl9IGVsc2UKLQkgIG1z bGVlcCgxMDApOwotICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJrYmRyZWFkIiwidGVybWluYXRpbmci LDApOwotICAgIHJldHVybihyYyk7Ci19Ci0jZW5kaWYgLyogQkVCT1ggKi8KLQotI2lmZGVmIENL TEVBUk4KLXN0YXRpYyBWT0lECi1sZWFybmNoYXIoYykgaW50IGM7IHsJCQkvKiBMZWFybmVkIHNj cmlwdCBrZXlib2FyZCBjaGFyYWN0ZXIgKi8KLSAgICBpbnQgY2M7Ci0gICAgY2hhciB4YnVmWzhd OwotCi0gICAgaWYgKCFsZWFybmluZyB8fCAhbGVhcm5mcCkKLSAgICAgIHJldHVybjsKLQotICAg IHN3aXRjaCAobGVhcm5zdCkgewkJCS8qIExlYXJuIHN0YXRlLi4uICovCi0gICAgICBjYXNlIDA6 CQkJCS8qIE5ldXRyYWwgKi8KLSAgICAgIGNhc2UgMToJCQkJLyogTmV0ICovCi0JaWYgKGxlYXJu YmMgPiAwKSB7CQkvKiBIYXZlIG5ldCBjaGFyYWN0ZXJzPyAqLwotCSAgICBjaGFyIGJ1ZltMRUFS TkJVRlNJWl07Ci0JICAgIGludCBpLCBqLCBuOwotCSAgICBVTE9ORyB0OwotCi0JICAgIHQgPSAo VUxPTkcpIHRpbWUoMCk7CS8qIENhbGN1bGF0ZSBJTlBVVCB0aW1lb3V0ICovCi0JICAgIGogPSB0 IC0gbGVhcm50MTsKLQkgICAgaiArPSAoaiAvIDQpID4gMCA/IChqIC8gNCkgOiAxOyAvKiBBZGQg c29tZSBzbG9wICovCi0JICAgIGlmIChqIDwgMikgaiA9IDI7CQkgICAgLyogMiBzZWNvbmRzIG1p bmltdW0gKi8KLQotCSAgICBmcHV0cygiXG5JTlBVVCAiLGxlYXJuZnApOwkvKiBHaXZlIElOUFVU IGNvbW1hbmQgZm9yIHRoZW0gKi8KLQkgICAgZnB1dHMoY2tpdG9hKGopLGxlYXJuZnApOwotCSAg ICBmcHV0cygiIHsiLGxlYXJuZnApOwotCSAgICBsZWFybnQxID0gdDsKLQotCSAgICBuID0gTEVB Uk5CVUZTSVo7Ci0JICAgIGlmIChsZWFybmJjIDwgTEVBUk5CVUZTSVopIHsgIC8qIENpcmN1bGFy IGJ1ZmZlciAqLwotCQluID0gbGVhcm5iYzsJCSAgLyogIGhhc24ndCB3cmFwcGVkIHlldC4gKi8K LQkJbGVhcm5icCA9IDA7Ci0JICAgIH0KLQkgICAgaiA9IDA7CQkJLyogQ29weSB0byBsaW5lYXIg YnVmZmVyICovCi0JICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsJLyogTnVtYmVyIG9mIGNo YXJzIGluIGNpcmN1bGFyIGJ1ZiAqLwotCi0JCWNjID0gbGVhcm5idWZbKGxlYXJuYnAgKyBpKSAl IExFQVJOQlVGU0laXTsKLQotCQkvKiBMYXRlciBhY2NvdW50IGZvciBwcm9tcHRzIHRoYXQgZW5k IHdpdGggYSBuZXdsaW5lPyAqLwotCi0JCWlmIChjYyA9PSBDUiAmJiBqID4gMCkgewotCQkgICAg aWYgKGJ1ZltqLTFdICE9IExGKQotCQkgICAgICBqID0gMDsKLQkJfQotCQlidWZbaisrXSA9IGNj OwotCSAgICB9Ci0JICAgIGZvciAoaSA9IDA7IGkgPCBqOyBpKyspIHsJLyogTm93IGNvcHkgb3V0 IHRoZSBidWZmZXIgKi8KLQkJY2MgPSBidWZbaV07CQkvKiBpbnRlcnByZXRpbmcgY29udHJvbCBj aGFycyAqLwotCQlpZiAoY2MgPT0gMCkgewkJLyogV2UgZG9uJ3QgSU5QVVQgTlVMcyAqLwotCQkg ICAgY29udGludWU7Ci0JCX0gZWxzZSBpZiAoY2MgPCBTUCB8fAkvKiBDb250cm9scyBuZWVkIHF1 b3RpbmcgKi8KLQkJCSAgIChjYyA+IDEyNiAmJiBjYyA8IDE2MCkpIHsKLQkJICAgIGNrbWFrbXNn KHhidWYsOCwiXFx7Iixja2l0b2EoKGludCljYyksIn0iLE5VTEwpOwotCQkgICAgZnB1dHMoeGJ1 ZixsZWFybmZwKTsKLQkJfSBlbHNlIHsJCS8qIFBsYWluIGNoYXJhY3RlciAqLwotCQkgICAgcHV0 YyhjYyxsZWFybmZwKTsKLQkJfQotCSAgICB9Ci0JICAgIGZwdXRzKCJ9XG5JRiBGQUlMIFNUT1Ag MSBJTlBVVCB0aW1lb3V0IixsZWFybmZwKTsKLQkgICAgbGVhcm5iYyA9IDA7Ci0JfQotCWxlYXJu YnAgPSAwOwotCWZwdXRzKCJcblBBVVNFIDFcbk9VVFBVVCAiLGxlYXJuZnApOyAvKiBFbWl0IE9V VFBVVCBhbmQgZmFsbCB0aHJ1ICovCi0KLSAgICAgIGNhc2UgMjoJCQkJLyogQWxyZWFkeSBpbiBL ZXlib2FyZCBzdGF0ZSAqLwotCWlmIChjID09IDApIHsKLQkgICAgZnB1dHMoIlxcTiIsbGVhcm5m cCk7Ci0JfSBlbHNlIGlmIChjID09IC03KSB7Ci0JICAgIGZwdXRzKCJcXEIiLGxlYXJuZnApOwot CX0gZWxzZSBpZiAoYyA9PSAtOCkgewotCSAgICBmcHV0cygiXFxMIixsZWFybmZwKTsKLQl9IGVs c2UgaWYgKGMgPCBTUCB8fCAoYyA+IDEyNiAmJiBjIDwgMTYwKSkgewotCSAgICBja21ha21zZyh4 YnVmLDgsIlxceyIsY2tpdG9hKChpbnQpYyksIn0iLE5VTEwpOwotCSAgICBmcHV0cyh4YnVmLGxl YXJuZnApOwotCX0gZWxzZSB7Ci0JICAgIHB1dGMoYyxsZWFybmZwKTsKLQl9Ci0gICAgfQotfQot I2VuZGlmIC8qIENLTEVBUk4gKi8KLQotc3RhdGljIGludCBwcmludGJhciA9IDA7Ci0KLSNkZWZp bmUgT1VUWEJVRlNJWiAxNQotc3RhdGljIENIQVIgaW54YnVmW09VVFhCVUZTSVorMV07CS8qIEhv c3QtdG8tc2NyZWVuIGV4cGFuc2lvbiBidWZmZXIgKi8KLXN0YXRpYyBpbnQgaW54Y291bnQgPSAw OwkJLyogYW5kIGNvdW50ICovCi1zdGF0aWMgQ0hBUiBvdXR4YnVmW09VVFhCVUZTSVorMV07CS8q IEtleWJvYXJkLXRvLWhvc3QgZXhwYW5zaW9uIGJ1ZiAqLwotc3RhdGljIGludCBvdXR4Y291bnQg PSAwOwkJLyogYW5kIGNvdW50ICovCi0KLWludAotY29uZWN0KCkgewotICAgIGludCByYyA9IDA7 CQkJCS8qIFJldHVybiBjb2RlOiAwID0gZmFpbCwgMSA9IE9LICovCi0gICAgaW50IGksIHggPSAw LCBwcmV2ID0gLTE7CQkvKiBSZWFzb24gY29kZSBpbiBjeF9zdGF0dXMgKi8KLSNpZmRlZiBDS0xF QVJOCi0gICAgaW50IGNyZmxhZyA9IDA7Ci0jZW5kaWYgLyogQ0tMRUFSTiAqLwotICAgIHJlZ2lz dGVyIGludCBjID0gLTEsIGMyLCBjc2F2ZTsJLyogQ2hhcmFjdGVycyAqLwotI2lmZGVmIFROQ09E RQotICAgIGludCB0eDsJCQkJLyogRm9yIFRlbG5ldCBuZWdvdGlhdGlvbnMgKi8KLSNlbmRpZiAv KiBUTkNPREUgKi8KLSAgICBpbnQgYXBjcmMgPSAwOwkJCS8qIEZvciBBUEMgYW5kIHRyYW5zcGFy ZW50IHByaW50ICovCi0gICAgaW50IG4sIGtiaW4sIHNjcm5vdXQ7CQkvKiBzZWxlY3QoKSBpdGVt cy4uLiAqLwotICAgIGZkX3NldCBpbiwgb3V0LCBlcnI7CQkvKiBGaWxlIGRlc2NyaXB0b3Igc2V0 cyAqLwotICAgIGludCBnb3RuZXQgPSAwOwkJCS8qIEZsYWcgZm9yIG5ldCByZWFkeSB0byByZWFk ICovCi0gICAgaW50IGdvdGtiZCA9IDA7CQkJLyogRmxhZyBmb3Iga2V5Ym9hcmQgcmVhZHkgdG8g cmVhZCAqLwotICAgIGludCBvbGRwcnQgPSAwOwkJCS8qIFVzZWQgd2l0aCBwcmludGluZyAqLwot ICAgIGludCBtc2dmbGcgPSAwOwotICAgIGNoYXIgY2J1ZlsyXTsJCQkvKiBEaXR0byAqLwotCi0j aWZkZWYgQkVCT1gKLSAgICBpbnQgdGlkID0gMDsJCQkvKiBUaHJlYWQgSUQgKi8KLSAgICBpbnQg cGFpclsyXTsJCQkvKiBTb2NrZXQgUGFpciAqLwotICAgIENIQVIgY2g7Ci0gICAgQ0hBUiBidWZb NjRdOwotI2VuZGlmIC8qIEJFQk9YICovCi0KLSAgICBjeF9zdGF0dXMgPSBDU1hfSU5URVJOQUw7 Ci0gICAgZGVib2sgPSAxOwotCi0jaWZkZWYgQkVCT1gKLSAgICB7Ci0JLyogQ3JlYXRlIGEgc29j a2V0IHBhaXIgdG8gYmUgdXNlZCBmb3IgdGhlIGtleWJvYXJkIGlucHV0ICovCi0JaWYgKHNvY2tl dHBhaXIocGFpcikpIHsKLQkgICAgZGVidWcoRjExMCwiY29uZWN0IiwidW5hYmxlIHRvIGNyZWF0 ZSBzb2NrZXQgcGFpciIsMCk7Ci0JICAgIHJldHVybigtMSk7Ci0JfQotCWRlYnVnKEYxMTEsImNv bm5lY3QiLCJzb2NrZXQgcGFpclswXSIscGFpclswXSk7Ci0JZGVidWcoRjExMSwiY29ubmVjdCIs InNvY2tldCBwYWlyWzFdIixwYWlyWzFdKTsKLQotCS8qIEFzc2lnbiBvbmUgZW5kIG9mIHRoZSBz b2NrZXQgdG8ga2JpbiAqLwotCWtiaW4gPSBwYWlyWzBdOwotICAgICAgICB0aWQgPSBzcGF3bl90 aHJlYWQoa2JkcmVhZCwKLQkJCSAgICJLYmQgdG8gU29ja2V0IFBhaXIiLAotCQkJICAgIEJfTk9S TUFMX1BSSU9SSVRZLAotCQkJICAgKHZvaWQgKilwYWlyWzFdCi0JCQkgICApOwotICAgICAgICBy ZXN1bWVfdGhyZWFkKHRpZCk7Ci0JZGVidWcoRjExMCwiY29ubmVjdCIsInRpZCIsdGlkKTsKLSAg ICB9Ci0jZWxzZSAvKiBCRUJPWCAqLwotICAgIGtiaW4gPSBmaWxlbm8oc3RkaW4pOwkJLyogc3Rk aW4gZmlsZSBkZXNjcmlwdG9yICovCi0jZW5kaWYgLyogQkVCT1ggKi8KLQotICAgIHNjcm5vdXQg PSBmaWxlbm8oc3Rkb3V0KTsJCS8qIHN0ZG91dCBmaWxlIGRlc2NyaXB0b3IgKi8KLQotI2lmZGVm IENLX1RSSUdHRVIKLSAgICBtYWtlc3RyKCZ0cmlnZ2VydmFsLE5VTEwpOwkJLyogUmVzZXQgdHJp Z2dlciAqLwotI2VuZGlmIC8qIENLX1RSSUdHRVIgKi8KLQotI2lmZGVmIFhQUklOVAotICAgIGVz Y2J1ZmMgPSAwOwkJCS8qIFJlc2V0IGVzYy1zZXF1ZW5jZSBidWZmZXIgKi8KLSAgICBlc2NidWZb MF0gPSBOVUw7Ci0jZW5kaWYgLyogWFBSSU5UICovCi0gICAgY2J1ZlsxXSA9IE5VTDsKLQotICAg IHR0aW1vZmYoKTsJCQkJLyogVHVybiBvZmYgYW55IHRpbWVyIGludGVycnVwdHMgKi8KLSAgICBp ZiAoIWxvY2FsKSB7CQkJLyogQmUgc3VyZSB3ZSdyZSBub3QgaW4gcmVtb3RlIG1vZGUgKi8KLSNp ZmRlZiBORVRDT05OCi0jaWZkZWYgTkVXRlRQCi0JaWYgKGZ0cGlzY29ubmVjdGVkKCkpCi0JICBw cmludGYoIlNvcnJ5LCB5b3UgY2FuJ3QgQ09OTkVDVCB0byBhbiBGVFAgc2VydmVyXG4iKTsKLQll bHNlCi0jZW5kaWYgLyogTkVXRlRQICovCi0JICBwcmludGYoIlNvcnJ5LCB5b3UgbXVzdCBTRVQg TElORSBvciBTRVQgSE9TVCBmaXJzdFxuIik7Ci0jZWxzZQotCXByaW50ZigiU29ycnksIHlvdSBt dXN0IFNFVCBMSU5FIGZpcnN0XG4iKTsKLSNlbmRpZiAvKiBORVRDT05OICovCi0JcmV0dXJuKDAp OwotICAgIH0KLSAgICBpZiAoc3BlZWQgPCAwTCAmJiBuZXR3b3JrID09IDAgJiYgdHRmZGZsZyA9 PSAwKSB7Ci0JcHJpbnRmKCJTb3JyeSwgeW91IG11c3QgU0VUIFNQRUVEIGZpcnN0XG4iKTsKLQly ZXR1cm4oMCk7Ci0gICAgfQotI2lmZGVmIFRDUFNPQ0tFVAotICAgIGlmIChuZXR3b3JrICYmICF0 dHBpcGUgJiYgKG5ldHR5cGUgIT0gTkVUX1RDUEIgJiYgbmV0dHlwZSAhPSBORVRfUFRZKSkgewot CXByaW50ZigiU29ycnksIG5ldHdvcmsgdHlwZSBub3Qgc3VwcG9ydGVkXG4iKTsKLQlyZXR1cm4o MCk7Ci0gICAgfQotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotCi0jaWZkZWYgRFlOQU1JQwotICAg IGlmICghaWJ1ZikgewotCWlmICghKGlidWYgPSBtYWxsb2MoSUJVRkwrMSkpKSB7IC8qIEFsbG9j YXRlIGlucHV0IGxpbmUgYnVmZmVyICovCi0JICAgIHByaW50ZigiU29ycnksIENPTk5FQ1QgaW5w dXQgYnVmZmVyIGNhbid0IGJlIGFsbG9jYXRlZFxuIik7Ci0JICAgIHJldHVybigwKTsKLQl9IGVs c2UgewotCSAgICBpYnAgPSBpYnVmOwotCSAgICBpYmMgPSAwOwotCX0KLSAgICB9Ci0gICAgaWYg KCFvYnVmKSB7Ci0JaWYgKCEob2J1ZiA9IG1hbGxvYyhPQlVGTCsxKSkpIHsgLyogQWxsb2NhdGUg b3V0cHV0IGxpbmUgYnVmZmVyICovCi0JICAgIHByaW50ZigiU29ycnksIENPTk5FQ1Qgb3V0cHV0 IGJ1ZmZlciBjYW4ndCBiZSBhbGxvY2F0ZWRcbiIpOwotCSAgICByZXR1cm4oMCk7Ci0JfSBlbHNl IHsKLQkgICAgb2JwID0gb2J1ZjsKLQkgICAgb2JjID0gMDsKLQl9Ci0gICAgfQotICAgIGlmICgh a2J1ZikgewotCWlmICghKGtidWYgPSBtYWxsb2MoS0JVRkwrMSkpKSB7IC8qIEFsbG9jYXRlIGtl eWJvYXJkIGlucHV0IGJ1ZmZlciAqLwotCSAgICBwcmludGYoIlNvcnJ5LCBDT05ORUNUIGtleWJv YXJkIGJ1ZmZlciBjYW4ndCBiZSBhbGxvY2F0ZWRcbiIpOwotCSAgICByZXR1cm4oMCk7Ci0JfQot ICAgIH0KLSAgICBpZiAoIXRlbXApIHsKLQlpZiAoISh0ZW1wID0gbWFsbG9jKFRNUExFTisxKSkp IHsgLyogQWxsb2NhdGUgdGVtcG9yYXJ5IGJ1ZmZlciAqLwotCSAgICBwcmludGYoIlNvcnJ5LCBD T05ORUNUIHRlbXBvcmFyeSBidWZmZXIgY2FuJ3QgYmUgYWxsb2NhdGVkXG4iKTsKLQkgICAgcmV0 dXJuKDApOwotCX0KLSAgICB9Ci0jZWxzZQotICAgIG9icCA9IG9idWY7Ci0gICAgb2JjID0gMDsK LSNlbmRpZiAvKiBEWU5BTUlDICovCi0KLSAgICBrYnAgPSBrYnVmOwkJCQkvKiBBbHdheXMgY2xl YXIgdGhlc2UuICovCi0gICAgKmticCA9IE5VTDsJCQkJLyogTm8gbmVlZCB0byBwcmVzZXJ2ZSB0 aGVtIGJldHdlZW4gKi8KLSAgICBrYmMgPSAwOwkJCQkvKiBDT05ORUNUIHNlc3Npb25zLiAqLwot Ci0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKSB7Ci0JZGVidWcoRjEwMSwiQ09OTkVDVCBj b25lY3QgZW50cnkgdHR5ZmQiLCIiLHR0eWZkKTsKLQlkZWJ1ZyhGMTAxLCJDT05ORUNUIGNvbmVj dCBlbnRyeSBpYmMiLCIiLGliYyk7Ci0JZGVidWcoRjEwMSwiQ09OTkVDVCBjb25lY3QgZW50cnkg b2JjIiwiIixvYmMpOwotCWRlYnVnKEYxMDEsIkNPTk5FQ1QgY29uZWN0IGVudHJ5IGtiYyIsIiIs a2JjKTsKLSNpZmRlZiBDS19UUklHR0VSCi0JZGVidWcoRjExMCwiQ09OTkVDVCBjb25lY3QgdHJp Z2dlciIsdHRfdHJpZ2dlclswXSwwKTsKLSNlbmRpZiAvKiBDS19UUklHR0VSICovCi0JaWYgKHR0 eWZkID4gLTEpIHsKLQkgICAgbiA9IHR0Y2hrKCk7Ci0JICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1Qg Y29uZWN0IGVudHJ5IHR0Y2hrIiwiIixuKTsKLQl9Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICov Ci0KLSAgICBpZiAodHR5ZmQgPCAwKSB7CQkJLyogSWYgY29tbXVuaWNhdGlvbiBkZXZpY2Ugbm90 IG9wZW4gKi8KLSNpZmRlZiBUVExFQlVGCi0gICAgICAgIGludCBuID0gbGVfaW5idWYoKTsKLSAg ICAgICAgZGVidWcoRjExMSwiQ09OTkVDVCBsZV9pbmJ1ZigpIiwidHR5ZmQgPCAwIixuKTsKLSAg ICAgICAgaWYgKG4gPiAwKSB7Ci0gICAgICAgICAgICB3aGlsZSAobi0tKSB7Ci0gICAgICAgICAg ICAgICAgQ0hBUiBjaDsKLSAgICAgICAgICAgICAgICBsZV9nZXRjaGFyKCZjaCk7Ci0gICAgICAg ICAgICAgICAgY29ub2MoY2gpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuKDAp OwotICAgICAgICB9Ci0jZW5kaWYgLyogVFRMRUJVRiAqLwotCi0JZGVidWcoRjEwMSwiQ09OTkVD VCB0dG5wcm90byIsIiIsdHRucHJvdG8pOwotCWRlYnVnKEYxMTEsIkNPTk5FQ1Qgb3BlbmluZyIs dHRuYW1lLDApOyAvKiBPcGVuIGl0IG5vdyAqLwotCWlmICh0dG9wZW4odHRuYW1lLAotCQkgICAm bG9jYWwsCi0JCSAgIG5ldHdvcmsgPyAtbmV0dHlwZSA6IG1kbXR5cCwKLQkJICAgMAotCQkgICAp IDwgMCkgewotCSAgICBja21ha21zZyh0ZW1wLFRNUExFTiwiU29ycnksIGNhbid0IG9wZW4gIix0 dG5hbWUsTlVMTCxOVUxMKTsKLQkgICAgcGVycm9yKHRlbXApOwotCSAgICBkZWJ1ZyhGMTEwLCJD T05ORUNUIG9wZW4gZmFpbHVyZSIsdHRuYW1lLDApOwotCSAgICByZXR1cm4oMCk7Ci0JfQotCi0j aWZkZWYgSUtTX09QVElPTgotCS8qIElmIHBlZXIgaXMgaW4gS2VybWl0IHNlcnZlciBtb2RlLCBy ZXR1cm4gbm93LiAqLwotCWlmIChURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnVfc3Rh cnQpIHsKLQkgICAgY3hfc3RhdHVzID0gQ1NYX0lLU0Q7Ci0JICAgIHJldHVybigwKTsKLQl9Ci0j ZW5kaWYgLyogSUtTX09QVElPTiAqLwotICAgIH0KLSAgICBkb2hhbmd1cCA9IDA7CQkJLyogSGFu Z3VwIG5vdCByZXF1ZXN0ZWQgeWV0ICovCi0KLSAgICBtc2dmbGcgPSAhcXVpZXQKLSNpZmRlZiBD S19BUEMKLSAgICAgICYmICFhcGNhY3RpdmUKLSNlbmRpZiAvKiBDS19BUEMgKi8KLQk7Ci0KLSAg ICBpZiAobXNnZmxnKSB7Ci0jaWZkZWYgTkVUQ09OTgotCWlmIChuZXR3b3JrKSB7Ci0jaWZkZWYg Q0tfRU5DUllQVElPTgotCSAgICBleHRlcm4gaW50IG1lX2VuY3J5cHQsIHVfZW5jcnlwdDsKLQkg ICAgaWYgKGNrX3RuX2VuY3J5cHRpbmcoKSAmJiBja190bl9kZWNyeXB0aW5nKCkpCi0JICAgICAg cHJpbnRmKCJTRUNVUkUgY29ubmVjdGlvbiB0byBob3N0ICVzIix0dG5hbWUpOwotCSAgICBlbHNl Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotCSAgICAgIGlmICh0dHBpcGUgfHwgdHRwdHkp Ci0JCXByaW50ZigiQ29ubmVjdGluZyB2aWEgY29tbWFuZCBcIiVzXCIiLHR0bmFtZSk7Ci0JICAg ICAgZWxzZQotCQlwcmludGYoIkNvbm5lY3RpbmcgdG8gaG9zdCAlcyIsdHRuYW1lKTsKLQl9IGVs c2UgewotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQkgICAgcHJpbnRmKCJDb25uZWN0aW5nIHRvICVz Iix0dG5hbWUpOwotCSAgICBpZiAoc3BlZWQgPiAtMUwpIHByaW50ZigiLCBzcGVlZCAlbGQiLHNw ZWVkKTsKLSNpZmRlZiBORVRDT05OCi0JfQotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQlpZiAodHRf ZXNjYXBlKSB7Ci0JICAgIHByaW50ZigiXHJcbiIpOwotCSAgICBzaG9lc2MoZXNjYXBlKTsKLQkg ICAgcHJpbnRmKCJUeXBlIHRoZSBlc2NhcGUgY2hhcmFjdGVyIGZvbGxvd2VkIGJ5IEMgdG8gZ2V0 IGJhY2ssXHJcbiIpOwotCSAgICBwcmludGYoIm9yIGZvbGxvd2VkIGJ5ID8gdG8gc2VlIG90aGVy IG9wdGlvbnMuXHJcbiIpOwotCX0gZWxzZSB7Ci0JICAgIHByaW50ZigiLlxyXG5cbkVTQ0FQRSBD SEFSQUNURVIgSVMgRElTQUJMRURcclxuXG4iKTsKLQl9Ci0JaWYgKHNlc2xvZykgewotCSAgICBl eHRlcm4gaW50IHNsb2d0czsKLQkgICAgY2hhciAqIHMgPSAiIjsKLQkgICAgc3dpdGNoIChzZXNz ZnQpIHsKLQkgICAgICBjYXNlIFhZRlRfRDoKLQkJcyA9ICJkZWJ1ZyI7IGJyZWFrOwotCSAgICAg IGNhc2UgWFlGVF9UOgotCQlzID0gc2xvZ3RzID8gInRpbWVzdGFtcGVkLXRleHQiIDogInRleHQi OyBicmVhazsKLQkgICAgICBkZWZhdWx0OgotCQlzID0gImJpbmFyeSI7Ci0JICAgIH0KLQkgICAg cHJpbnRmKCJTZXNzaW9uIExvZzogJXMsICVzICglZCkgXHJcbiIsc2VzZmlsLHMsc2Vzc2Z0KTsK LQl9Ci0JaWYgKGRlYnNlcykgcHJpbnRmKCJEZWJ1Z2dpbmcgRGlzcGxheS4uLilcclxuIik7Ci0g ICAgfQotCi0vKiBDb25kaXRpb24gY29uc29sZSB0ZXJtaW5hbCBhbmQgY29tbXVuaWNhdGlvbiBs aW5lICovCi0KLSAgICBpZiAoY29uYmluKChjaGFyKWVzY2FwZSkgPCAwKSB7Ci0JcHJpbnRmKCJT b3JyeSwgY2FuJ3QgY29uZGl0aW9uIGNvbnNvbGUgdGVybWluYWxcbiIpOwotCWZmbHVzaChzdGRv dXQpOwotCXJldHVybigwKTsKLSAgICB9Ci0gICAgZGVidWcoRjEwMSwiQ09OTkVDVCBjbWFzayIs IiIsY21hc2spOwotICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1QgY21kbXNrIiwiIixjbWRtc2spOwot ICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1Qgc3BlZWQgYmVmb3JlIHR0dnQiLCIiLHNwZWVkKTsKLSAg ICBpZiAoKG4gPSB0dHZ0KHNwZWVkLGZsb3cpKSA8IDApIHsJLyogRW50ZXIgInZpcnR1YWwgdGVy bWluYWwiIG1vZGUgKi8KLQlpZiAoIW5ldHdvcmspIHsKLQkgICAgZGVidWcoRjEwMSwiQ09OTkVD VCB0dHZ0IiwiIixuKTsKLQkgICAgdHRoYW5nKCk7CQkJLyogSGFuZyB1cCBhbmQgY2xvc2UgdGhl IGRldmljZS4gKi8KLQkgICAgdHRjbG9zKDApOwotCSAgICBkb2xvZ2VuZCgpOwotCSAgICBpZiAo dHRvcGVuKHR0bmFtZSwJCS8qIE9wZW4gaXQgYWdhaW4uLi4gKi8KLQkJICAgICAgICZsb2NhbCwK LQkJICAgICAgIG5ldHdvcmsgPyAtbmV0dHlwZSA6IG1kbXR5cCwKLQkJICAgICAgIDAKLQkJICAg ICAgICkgPCAwKSB7Ci0JCWN4X3N0YXR1cyA9IENTWF9JTlRFUk5BTDsKLQkJY2ttYWttc2codGVt cCxUTVBMRU4sIlNvcnJ5LCBjYW4ndCByZW9wZW4gIix0dG5hbWUsTlVMTCxOVUxMKTsKLQkJcGVy cm9yKHRlbXApOwotCQlyZXR1cm4oMCk7Ci0JICAgIH0KLSNpZmRlZiBJS1NfT1BUSU9OCi0JICAg IGlmIChURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnVfc3RhcnQpIHsKLQkJY3hfc3Rh dHVzID0gQ1NYX0lLU0Q7Ci0JCXJldHVybigwKTsKLQkgICAgfQotI2VuZGlmIC8qIElLU19PUFRJ T04gKi8KLQotCSAgICBpZiAodHR2dChzcGVlZCxmbG93KSA8IDApIHsJLyogVHJ5IHZpcnR1YWwg dGVybWluYWwgbW9kZSBhZ2Fpbi4gKi8KLQkJY29ucmVzKCk7CQkvKiBGYWlsdXJlIHRoaXMgdGlt ZSBpcyBmYXRhbC4gKi8KLQkJcHJpbnRmKCJTb3JyeSwgQ2FuJ3QgY29uZGl0aW9uIGNvbW11bmlj YXRpb24gbGluZVxuIik7Ci0JCWN4X3N0YXR1cyA9IENTWF9JTlRFUk5BTDsKLQkJcmV0dXJuKDAp OwotCSAgICB9Ci0JfQotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIHR0dnQgb2ssIGVz Y2FwZSIsIiIsZXNjYXBlKTsKLQotICAgIC8qIERlc3BpdGUgdHR2dCgpIHRoaXMgaXMgc3RpbGwg bmVlZGVkIGluIEhQLVVYICovCi0gICAgLyogYmVjYXVzZSBvZiB0aGUgSFAtOTAwMCA8UkVTRVQ+ IGtleS4qLwotCi0gICAgc2lnbmFsKFNJR0lOVCwgU0lHX0lHTik7Ci0gICAgc2lnbmFsKFNJR1FV SVQsIFNJR19JR04pOwotCi0gICAgZGVidWcoRjEwMSwiQ09OTkVDVCBjYXJyaWVyLXdhdGNoIiwi IixjYXJyaWVyKTsKLSAgICBpZiAoKCFuZXR3b3JrIAotI2lmZGVmIFROX0NPTVBPUlQKLSAgICAg ICAgfHwgaXN0bmNvbXBvcnQoKQotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLQkpICYmIChjYXJy aWVyICE9IENBUl9PRkYpKSB7Ci0JaW50IHg7Ci0JeCA9IHR0Z21kbSgpOwotCWRlYnVnKEYxMDAs IkNPTk5FQ1QgdHRnbWRtIiwiIix4KTsKLQlpZiAoKHggPiAtMSkgJiYgISh4ICYgQk1fRENEKSkg ewotI2lmbmRlZiBOT0hJTlRTCi0JICAgIGV4dGVybiBpbnQgaGludHM7Ci0jZW5kaWYgLyogTk9I SU5UUyAqLwotCSAgICBkZWJ1ZyhGMTAwLCJDT05ORUNUIHR0Z21kbSBDRCB0ZXN0IGZhaWxzIiwi Iix4KTsKLQkgICAgY29ucmVzKCk7Ci0JICAgIHByaW50ZigiP0NhcnJpZXIgcmVxdWlyZWQgYnV0 IG5vdCBkZXRlY3RlZC5cbiIpOwotI2lmbmRlZiBOT0hJTlRTCi0JICAgIGN4X3N0YXR1cyA9IENT WF9DQVJSSUVSOwotCSAgICBpZiAoIWhpbnRzKQotCSAgICAgIHJldHVybigwKTsKLQkgICAgcHJp bnRmKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7Ci0JICAgIHByaW50 ZigiIEhpbnQ6IFRvIENPTk5FQ1QgdG8gYSBzZXJpYWwgZGV2aWNlIHRoYXRcbiIpOwotCSAgICBw cmludGYoIiBpcyBub3QgcHJlc2VudGluZyB0aGUgQ2FycmllciBEZXRlY3Qgc2lnbmFsLFxuIik7 Ci0JICAgIHByaW50ZigiIGZpcnN0IHRlbGwgQy1LZXJtaXQgdG86XG5cbiIpOwotCSAgICBwcmlu dGYoIiAgIFNFVCBDQVJSSUVSLVdBVENIIE9GRlxuXG4iKTsKLQkgICAgcHJpbnRmKCIqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4iKTsKLSNlbmRpZiAvKiBOT0hJTlRTICov Ci0JICAgIHJldHVybigwKTsKLQl9Ci0JZGVidWcoRjEwMCwiQ09OTkVDVCB0dGdtZG0gb2siLCIi LDApOwotICAgIH0KLQotICAgIC8qIE5vdyB3ZSBhcmUgY29ubmVjdGVkLiAqLwotCi0gICAgaWYg KG1zZ2ZsZyB8fCBwcmludGJhcikKLSAgICAgIHByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4iKTsKLSAgICBmZmx1c2goc3Rkb3V0 KTsKLQotI2lmbmRlZiBOT0NTRVRTCi0vKiBTZXQgdXAgY2hhcmFjdGVyIHNldCB0cmFuc2xhdGlv bnMgKi8KLQotICAgIHVuaWNvZGUgPSAwOwkJCS8qIEFzc3VtZSBVbmljb2RlIHdvbid0IGJlIGlu dm9sdmVkICovCi0gICAgdGNzID0gMDsJCQkJLyogIlRyYW5zZmVyIiBvciAiT3RoZXIiIGNoYXJz ZXQgKi8KLSAgICBzeG8gPSByeG8gPSBOVUxMOwkJCS8qIEluaXRpYWxpemUgYnl0ZS10by1ieXRl IGZ1bmN0aW9ucyAqLwotICAgIHN4aSA9IHJ4aSA9IE5VTEw7Ci0KLSAgICBpZiAodGNzciAhPSB0 Y3NsKSB7CQkJLyogUmVtb3RlIGFuZCBsb2NhbCBzZXRzIGRpZmZlci4uLiAqLwotI2lmZGVmIFVO SUNPREUKLQlpZiAodGNzciA9PSBGQ19VVEY4IHx8CQkvKiBSZW1vdGUgY2hhcnNldCBpcyBVVEYt OCAqLwotCSAgICB0Y3NsID09IEZDX1VURjgpIHsJCS8qIG9yIGxvY2FsIG9uZSBpcy4gKi8KLQkg ICAgeHVmID0geGxfdWZjW3Rjc2xdOwkJLyogSW5jb21pbmcgVW5pY29kZSB0byBsb2NhbCAqLwot CSAgICBpZiAoeHVmIHx8IHRjc2wgPT0gRkNfVVRGOCkgewotCQl0Y3MgPSAodGNzciA9PSBGQ19V VEY4KSA/IHRjc2wgOiB0Y3NyOyAvKiBUaGUgIm90aGVyIiBzZXQgKi8KLQkJeGZ1ID0geGxfZmN1 W3Rjc107CS8qIExvY2FsIGJ5dGUgdG8gcmVtb3RlIFVuaWNvZGUgKi8KLQkJaWYgKHhmdSkKLQkJ ICB1bmljb2RlID0gKHRjc3IgPT0gRkNfVVRGOCkgPyAxIDogMjsKLQkgICAgfQotCSAgICB0Y3Nz aXplID0gZmNzaW5mb1t0Y3NdLnNpemU7IC8qIFNpemUgb2Ygb3RoZXIgY2hhcmFjdGVyIHNldC4g Ki8KLQl9IGVsc2UgewotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQkgICAgdGNzID0gZ2V0dGNzKHRj c3IsdGNzbCk7CS8qIEdldCBpbnRlcm1lZGlhdGUgc2V0LiAqLwotCSAgICBzeG8gPSB4bHNbdGNz XVt0Y3NsXTsJLyogdHJhbnNsYXRpb24gZnVuY3Rpb24gKi8KLQkgICAgcnhvID0geGxyW3Rjc11b dGNzcl07CS8qIHBvaW50ZXJzIGZvciBvdXRwdXQgZnVuY3Rpb25zICovCi0JICAgIHN4aSA9IHhs c1t0Y3NdW3Rjc3JdOwkvKiBhbmQgZm9yIGlucHV0IGZ1bmN0aW9ucy4gKi8KLQkgICAgcnhpID0g eGxyW3Rjc11bdGNzbF07Ci0jaWZkZWYgVU5JQ09ERQotCX0KLSNlbmRpZiAvKiBVTklDT0RFICov Ci0gICAgfQotLyoKLSAgVGhpcyBpcyB0byBwcmV2ZW50IHVzZSBvZiB6bXN0dWZmKCkgYW5kIHpk c3R1ZmYoKSBieSB0cmFuc2xhdGlvbiBmdW5jdGlvbnMuCi0gIFRoZXkgb25seSB3b3JrIHdpdGgg ZGlzayBpL28sIG5vdCB3aXRoIGNvbW11bmljYXRpb24gaS9vLiAgTHVja2lseSBSdXNzaWFuCi0g IHRyYW5zbGF0aW9uIGZ1bmN0aW9ucyBkb24ndCBkbyBhbnkgc3R1ZmZpbmcuLi4KLSovCi0gICAg bGFuZ3N2ID0gbGFuZ3VhZ2U7Ci0jaWZuZGVmIE5PQ1lSSUwKLSAgICBpZiAobGFuZ3VhZ2UgIT0g TF9SVVNTSUFOKQotI2VuZGlmIC8qIE5PQ1lSSUwgKi8KLSAgICAgIGxhbmd1YWdlID0gTF9VU0FT Q0lJOwotCi0jaWZkZWYgQ09NTUVOVAotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewot CWRlYnVnKEYxMDEsIkNPTk5FQ1QgdGNzIiwiIix0Y3MpOwotCWRlYnVnKEYxMDEsIkNPTk5FQ1Qg dGNzbCIsIiIsdGNzbCk7Ci0JZGVidWcoRjEwMSwiQ09OTkVDVCB0Y3NyIiwiIix0Y3NyKTsKLQlk ZWJ1ZyhGMTAxLCJDT05ORUNUIGZjc2luZm9bdGNzbF0uc2l6ZSIsIiIsZmNzaW5mb1t0Y3NsXS5z aXplKTsKLQlkZWJ1ZyhGMTAxLCJDT05ORUNUIGZjc2luZm9bdGNzcl0uc2l6ZSIsIiIsZmNzaW5m b1t0Y3NyXS5zaXplKTsKLQlkZWJ1ZyhGMTAxLCJDT05ORUNUIHVuaWNvZGUiLCIiLHVuaWNvZGUp OwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2lm ZGVmIENLX1hZWgotI2lmbmRlZiBYWVpfSU5URVJOQUwKLSAgICB7Ci0JZXh0ZXJuIGludCBiaW5h cnk7CQkvKiBTZWUgYWJvdXQgWk1PREVNIGF1dG9kb3dubG9hZHMgKi8KLQljaGFyICogczsKLQlz ID0gYmluYXJ5ID8gcHRhYltQUk9UT19aXS5wX2JfcmNtZCA6IHB0YWJbUFJPVE9fWl0ucF90X3Jj bWQ7Ci0JaWYgKCFzKSBzID0gIiI7Ci0Jem1kbG9rID0gKCpzICE9IE5VTCk7CQkvKiBPSyBpZiB3 ZSBoYXZlIGV4dGVybmFsIGNvbW1hbmRzICovCi0gICAgfQotI2VuZGlmIC8qIFhZWl9JTlRFUk5B TCAqLwotI2VuZGlmIC8qIENLX1hZWiAqLwotCi0jaWZuZGVmIE5PRVNDU0VRCi0vKgotICBXZSBu ZWVkIHRvIGFjdGl2YXRlIHRoZSBlc2NhcGUtc2VxdWVuY2UgcmVjb2duaXRpb24gZmVhdHVyZSB3 aGVuOgotICAgKGEpIHRyYW5zbGF0aW9uIGlzIGVsZWN0ZWQsIEFORAotICAgKGIpIHRoZSBsb2Nh bCBhbmQvb3IgcmVtb3RlIHNldCBpcyBhIDctYml0IHNldCBvdGhlciB0aGFuIFVTIEFTQ0lJOwot ICBPcjoKLSAgIFNFVCBTRVNTSU9OLUxPRyBpcyBURVhUIChzbyB3ZSBjYW4gc3RyaXAgZXNjYXBl IHNlcXVlbmNlcyBvdXQgb2YgdGhlIGxvZyk7Ci0gIE9yOgotICAgU0VUIFRFUk1JTkFMIEFQQyBp cyBub3QgT0ZGIChoYW5kbGVkIGluIHRoZSBuZXh0IHN0YXRlbWVudCkuCi0qLwotICAgIGVzY3Nl cSA9ICh0Y3MgIT0gVENfVFJBTlNQKSAmJgkvKiBOb3QgdHJhbnNwYXJlbnQgKi8KLSAgICAgIChm Y3NpbmZvW3Rjc2xdLnNpemUgPT0gMTI4IHx8IGZjc2luZm9bdGNzcl0uc2l6ZSA9PSAxMjgpICYm IC8qIDcgYml0cyAqLwotCShmY3NpbmZvW3Rjc2xdLmNvZGUgIT0gRkNfVVNBU0NJSSk7IC8qIEJ1 dCBub3QgQVNDSUkgKi8KLSNlbmRpZiAvKiBOT0VTQ1NFUSAqLwotI2VuZGlmIC8qIE5PQ1NFVFMg Ki8KLQotI2lmbmRlZiBOT0VTQ1NFUQotICAgIGlmICghZXNjc2VxKSB7CQkJLyogMjAwOS8xMC8y MiAqLwotCWlmIChzZXNsb2cgJiYgIXNlc3NmdCkKLQkgIGVzY3NlcSA9IDE7Ci0gICAgfQotI2lm ZGVmIENLX0FQQwotICAgIGVzY3NlcSA9IGVzY3NlcSB8fCAoYXBjc3RhdHVzICYgQVBDX09OKTsK LSAgICBhcGNhY3RpdmUgPSAwOwkJCS8qIEFuIEFQQyBjb21tYW5kIGlzIG5vdCBhY3RpdmUgKi8K LSAgICBhcGNsZW5ndGggPSAwOwkJCS8qIC4uLiAqLwotI2VuZGlmIC8qIENLX0FQQyAqLwotI2lm ZGVmIFhQUklOVAotICAgIGVzY3NlcSB8PSB0dF9wcmludDsKLSNlbmRpZiAvKiBYUFJJTlQgKi8K LSAgICAvKiBJbml0aWFsIHN0YXRlIG9mIHJlY29nbml6ZXIgKi8KLSAgICBpbmVzY1swXSA9IEVT X05PUk1BTDsJCS8qIFJlbW90ZSB0byBzY3JlZW4gKi8KLSAgICBpbmVzY1sxXSA9IEVTX05PUk1B TDsJCS8qIEtleWJvYXJkIHRvIHJlbW90ZSAqLwotICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1QgZXNj c2VxIiwiIixlc2NzZXEpOwotI2VuZGlmIC8qIE5PRVNDU0VRICovCi0KLSAgICBpZiAodHR5ZmQg PiAtMSkgewkJCS8qIChqdXN0IGluIGNhc2UuLi4pICovCi0Jd2hhdCA9IFdfQ09OTkVDVDsJCS8q IEtlZXAgdHJhY2sgb2Ygd2hhdCB3ZSdyZSBkb2luZyAqLwotCWFjdGl2ZSA9IDE7Ci0gICAgfQot I2lmZGVmIENLTEVBUk4KLSAgICBpZiAobGVhcm5pbmcpIHsJCQkvKiBMZWFybmVkIHNjcmlwdCBh Y3RpdmUuLi4gKi8KLQlsZWFybmJwID0gMDsJCQkvKiBJTlBVVCBidWZmZXIgcG9pbnRlciAqLwot CWxlYXJuYmMgPSAwOwkJCS8qIElOUFVUIGJ1ZmZlciBjb3VudCAqLwotCWxlYXJuc3QgPSAwOwkJ CS8qIFN0YXRlICgwID0gbmV1dHJhbCwgbm9uZSkgKi8KLQlsZWFybnQxID0gKFVMT05HKSB0aW1l KDApOwotICAgIH0KLSNlbmRpZiAvKiBDS0xFQVJOICovCi0KLSNpZmRlZiBDS1RJRExFCi0gICAg aWRsZWxpbWl0ID0gdHRfaWRsZWxpbWl0OwotI2VuZGlmIC8qIENLVElETEUgKi8KLQotICAgIHdo aWxlIChhY3RpdmUpIHsJCQkvKiBCaWcgbG9vcC4uLiAqLwotCWRlYnVnKEYxMDAsIkNPTk5FQ1Qg dG9wIG9mIGxvb3AiLCIiLDApOwotCUZEX1pFUk8oJmluKTsJCQkvKiBDbGVhciBzZWxlY3QoKSBz dHJ1Y3RzICovCi0JRkRfWkVSTygmb3V0KTsKLQlGRF9aRVJPKCZlcnIpOwotCWdvdGtiZCA9IDA7 Ci0JZ290bmV0ID0gdHRwZWVrKCk7CQkvKiBTb21ldGhpbmcgc2l0dGluZyBpbiBja3V0aW8gYnVm ICovCi0JZGVidWcoRjEwMSwiQ09OTkVDVCB0dHBlZWsiLCIiLGdvdG5ldCk7Ci0KLQlpZiAoCi0j aWZuZGVmIE5PU0VUS0VZCi0JICAgICFrbXB0cgkJCS8qIENoZWNrIGZvciBrZXkgbWFjcm8gYWN0 aXZlICovCi0jZWxzZQotCSAgICAxCi0jZW5kaWYgLyogTk9TRVRLRVkgKi8KLQkgICAgKSB7Ci0J ICAgIGlmIChvYmMpIHsJCQkvKiBObyBrZXkgbWFjcm8gLSBzZXQgdXAgZm9yIHNlbGVjdCAqLwot CQlGRF9TRVQodHR5ZmQsICZvdXQpOwkvKiBIYXZlIHN0dWZmIHRvIHNlbmQgdG8gbmV0ICovCi0J ICAgIH0gZWxzZSB7Ci0JCUZEX1NFVChrYmluLCAmaW4pOwkvKiBOZWVkIHRvIHJlYWQgc3R1ZmYg ZnJvbSBrZXlib2FyZCAqLwotCSAgICB9Ci0jaWZkZWYgQkVCT1gKLQkgICAgaWYgKCEoaWJjIHx8 IGdvdG5ldCA+IDApKQotCQlGRF9TRVQodHR5ZmQsICZpbik7CS8qIE5lZWQgdG8gcmVhZCBzdHVm ZiBmcm9tIG5ldCAqLwotI2Vsc2UgLyogQkVCT1ggKi8KLQkgICAgaWYgKGliYyB8fCBnb3RuZXQg PiAwKSB7Ci0JCUZEX1NFVChzY3Jub3V0LCAmb3V0KTsJLyogSGF2ZSBzdHVmZiB0byBwdXQgb24g c2NyZWVuICovCi0JICAgIH0gZWxzZSB7Ci0JCUZEX1NFVCh0dHlmZCwgJmluKTsJLyogTmVlZCB0 byByZWFkIHN0dWZmIGZyb20gbmV0ICovCi0JICAgIH0KLSNlbmRpZiAvKiBCRUJPWCAqLwotICAg ICAgICAgICAgRkRfU0VUKHR0eWZkLCAmZXJyKTsKLSNpZmRlZiBDS19GT1JXQVJEX1gKLSAgICAg ICAgICAgIGZ3ZHhfaW5pdF9mZF9zZXQoJmluKTsKLSNlbmRpZiAvKiBDS19GT1JXQVJEX1ggKi8K LQotCSAgICAvKiBXYWl0IHRpbGwgdGhlIGZpcnN0IG9uZSBvZiB0aGUgYWJvdmUgaXMgcmVhZHkg Zm9yIGkvbyAqLwotCSAgICAvKiBvciBURVJNIElETEUtU0VORCBpcyBhY3RpdmUgYW5kIHdlIHRp bWUgb3V0LiAqLwotCi0JICAgIGVycm5vID0gMDsKLSNpZmRlZiBDS1RJRExFCi0JICAgIC8qIFRo aXMgcmVhbGx5IGNvdWxkIGJlIG1vdmVkIG91dCBvZiB0aGUgbG9vcC4uLiAqLwotCSAgICBpZiAo aWRsZWxpbWl0KSB7CQkvKiBJZGxlIHRpbWVvdXQgc2V0ICovCi0JCXN0cnVjdCB0aW1ldmFsIHR2 OwotCQlpZiAoaWRsZWxpbWl0ID4gMCkgewkvKiBQb3NpdGl2ZSA9IHNlYyAqLwotCQkgICAgdHYu dHZfc2VjID0gKGxvbmcpIGlkbGVsaW1pdDsKLQkJICAgIHR2LnR2X3VzZWMgPSAwTDsKLQkJfSBl bHNlIHsJCS8qIE5lZ2F0aXZlID0gbWlsbGlzZWMgKi8KLQkJICAgIGxvbmcgdSA9ICgwIC0gaWRs ZWxpbWl0KTsKLQkJICAgIHR2LnR2X3NlYyA9IHUgLyAxMDAwTDsKLQkJICAgIHR2LnR2X3VzZWMg PSAoKHUgJSAxMDAwTCkgKiAxMDAwTCk7Ci0JCX0KLSNpZmRlZiBJTlRTRUxFQ1QKLQkJYyA9IHNl bGVjdChGRF9TRVRTSVpFLChpbnQgKikmaW4sKGludCAqKSZvdXQsKGludCAqKSZlcnIsICZ0dik7 Ci0jZWxzZQotCQljID0gc2VsZWN0KEZEX1NFVFNJWkUsICZpbiwgJm91dCwgJmVyciwgJnR2KTsK LSNlbmRpZiAvKiBJTlRTRUxFQ1QgKi8KLQkgICAgfSBlbHNlCi0jZW5kaWYgLyogQ0tUSURMRSAq LwotI2lmZGVmIElOVFNFTEVDVAotCSAgICAgIGMgPSBzZWxlY3QoRkRfU0VUU0laRSwgKGludCAq KSZpbiwgKGludCAqKSZvdXQsIChpbnQgKikmZXJyLCAwKTsKLSNlbHNlCi0JICAgICAgYyA9IHNl bGVjdChGRF9TRVRTSVpFLCAmaW4sICZvdXQsICZlcnIsIDApOwotI2VuZGlmIC8qIElOVFNFTEVD VCAqLwotCSAgICBpZiAoYyA8IDEpIHsKLSNpZmRlZiBDS1RJRExFCi0JCWlmIChjID09IDApIHsJ CS8qIFRpbWVvdXQgKi8KLQkJICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1Qgc2VsZWN0KCkgdGltZW91 dCIsIiIsdHRfaWRsZWFjdCk7Ci0JCSAgICBzd2l0Y2ggKHR0X2lkbGVhY3QpIHsKLQkJICAgICAg Y2FzZSBJRExFX0hBTkc6IHsJLyogSGFuZyB1cCAqLwotCQkJICBpbnQgeCA9IDA7Ci0jaWZuZGVm IE5PRElBTAotCQkJICBpZiAoZGlhbG1odSkKLQkJCSAgICB4ID0gbWRtaHVwKCk7Ci0JCQkgIGlm ICh4IDwgMSkKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLQkJCSAgICB0dGhhbmcoKTsJLyogZmFsbCB0 aHJ1IGRlbGliZXJhdGVseS4uLiAqLwotCQkgICAgICB9Ci0JCSAgICAgIGNhc2UgSURMRV9SRVQ6 CS8qIFJldHVybiB0byBjb21tYW5kIG1vZGUgKi8KLQkJCWN4X3N0YXR1cyA9IENTWF9JRExFOwot CQkJYWN0aXZlID0gMDsKLQkJCWNvbnRpbnVlOwotCQkgICAgICBjYXNlIElETEVfT1VUOgkvKiBP VVRQVVQgYSBzdHJpbmcgKi8KLQkJCWlmICh0dF9pZGxlc3RyKSB7Ci0JCQkgICAgaW50IGxlbiA9 IHN0cmxlbih0dF9pZGxlc3RyKTsKLQkJCSAgICBpZiAobGVuID4gMCkKLQkJCSAgICAgIHR0b2wo KENIQVIgKil0dF9pZGxlc3RyLGxlbik7Ci0JCQkgICAgZWxzZQotCQkJICAgICAgdHRvYyhOVUwp OyAvKiBObyBzdHJpbmcsIHNlbmQgYSBOVUwgKi8KLQkJCX0gZWxzZQotCQkJICB0dG9jKE5VTCk7 CS8qIE5vIHN0cmluZywgc2VuZCBhIE5VTCAqLwotCQkJY29udGludWU7Ci0JCSAgICAgIGNhc2Ug SURMRV9FWElUOgkvKiBFeGl0IGZyb20gS2VybWl0ICovCi0JCQlkb2V4aXQoR09PRF9FWElULHhp dHN0YSk7Ci0jaWZkZWYgVE5DT0RFCi0JCSAgICAgIGNhc2UgSURMRV9UQVlUOgkvKiBTZW5kIFRl bG5ldCBBcmUgWW91IFRoZXJlPyAqLwotCQkJaWYgKG5ldHdvcmsgJiYgSVNfVEVMTkVUKCkpIHsK LQkJCSAgICB0bm9wdFswXSA9IChDSEFSKSBJQUM7Ci0JCQkgICAgdG5vcHRbMV0gPSAoQ0hBUikg VE5fQVlUOwotCQkJICAgIHRub3B0WzJdID0gTlVMOwotCQkJICAgIGlmICh0dG9sKChDSEFSICop dG5vcHQsMikgPCAwKQotCQkJICAgICAgYWN0aXZlID0gMDsKLQkJCX0KLQkJCWNvbnRpbnVlOwot Ci0JCSAgICAgIGNhc2UgSURMRV9UTk9QOgkvKiBTZW5kIFRlbG5ldCBOT1AgKi8KLQkJCWlmIChu ZXR3b3JrICYmIElTX1RFTE5FVCgpKSB7Ci0JCQkgICAgdG5vcHRbMF0gPSAoQ0hBUikgSUFDOwot CQkJICAgIHRub3B0WzFdID0gKENIQVIpIFROX05PUDsKLQkJCSAgICB0bm9wdFsyXSA9IE5VTDsK LQkJCSAgICBpZiAodHRvbCgoQ0hBUiAqKXRub3B0LDIpIDwgMCkKLQkJCSAgICAgIGFjdGl2ZSA9 IDA7Ci0JCQl9Ci0JCQljb250aW51ZTsKLSNlbmRpZiAvKiBUTkNPREUgKi8KLQkJICAgIH0KLQkJ fQotI2VuZGlmIC8qIENLVElETEUgKi8KLQotCQlkZWJ1ZyhGMTAxLCJDT05ORUNUIHNlbGVjdCgp IGVycm5vIiwiIixlcnJubyk7Ci0JCS8qIEEgdG9vLWJpZyBmaXJzdCBhcmcgdG8gc2VsZWN0KCkg Z2V0cyBFQkFERiAqLwotI2lmZGVmIEVJTlRSCi0JCWlmIChjID09IC0xKSB7Ci0JCSAgICBpZiAo ZXJybm8gPT0gRUlOVFIpIHsKLQkJCWNvbnRpbnVlOwotCQkgICAgfQotCQl9Ci0jZW5kaWYgLyog RUlOVFIgKi8KLQkJc2xlZXAoMSk7Ci0JCWNvbnRpbnVlOwotCSAgICB9Ci0jaWZuZGVmIEJFQk9Y Ci0jaWZkZWYgREVCVUcKLQkgICAgaWYgKEZEX0lTU0VUKHNjcm5vdXQsICZvdXQpKSB7Ci0JCWRl YnVnKEYxMDAsIkNPTk5FQ1QgU0VMRUNUIHNjcm5vdXQiLCIiLDApOwotCSAgICB9Ci0jZW5kaWYg LyogREVCVUcgKi8KLSNlbmRpZiAvKiBCRUJPWCAqLwotCi0jaWZkZWYgQ0tfRk9SV0FSRF9YCi0g ICAgICAgICAgICBmd2R4X2NoZWNrX3NvY2tldHMoJmluKTsKLSNlbmRpZiAvKiBDS19GT1JXQVJE X1ggKi8KLQotCSAgICBpZiAoRkRfSVNTRVQodHR5ZmQsICZpbikpIHsJLyogUmVhZCBmcm9tIG5l dD8gKi8KLQkJZGVidWcoRjExMCwiQ09OTkVDVCBTRUxFQ1QgdHR5ZmQiLCJpbiIsMCk7Ci0JCUZE X0NMUih0dHlmZCwgJmluKTsKLQkJZ290bmV0ID0gMTsJCS8qIE5ldCBpcyByZWFkeSAqLwotCSAg ICB9Ci0JICAgIGlmIChGRF9JU1NFVChrYmluLCAmaW4pKSB7CS8qIFJlYWQgZnJvbSBrZXlib2Fy ZD8gKi8KLQkJZGVidWcoRjEwMCwiQ09OTkVDVCBTRUxFQ1Qga2JpbiIsIiIsMCk7Ci0JCUZEX0NM UihrYmluLCAmaW4pOwotCQlnb3RrYmQgPSAxOwkJLyogS2V5Ym9hcmQgaXMgcmVhZHkgKi8KLQkg ICAgfQotICAgICAgICAgICAgaWYgKEZEX0lTU0VUKHR0eWZkLCAmZXJyKSkgewotCQlkZWJ1ZyhG MTEwLCJDT05ORUNUIFNFTEVDVCB0dHlmZCIsImVyciIsMCk7Ci0JCUZEX0NMUih0dHlmZCwgJmVy cik7Ci0jaWZkZWYgTkVUUFRZCi0jaWZkZWYgSEFWRV9QVFlUUkFQCi0JCS8qIFNwZWNpYWwgaGFu ZGxpbmcgZm9yIEhQLVVYIHB0eSBpL28gKi8KLSAgICAgICAgICAgICAgICBpZiAodHRwdHkpIHsK LSAgICAgICAgICAgICAgICAgICAgaWYgKHB0eV90cmFwX2hhbmRsZXIodHR5ZmQpID4gMCkgewot ICAgICAgICAgICAgICAgICAgICAgICAgdHRjbG9zKDApOwotICAgICAgICAgICAgICAgICAgICAg ICAgZ290byBjb25yZXQxOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBIQVZFX1BUWVRSQVAg Ki8KLSNlbmRpZiAvKiBORVRQVFkgKi8KLQkJZ290bmV0ID0gMTsJCS8qIE5ldCBpcyByZWFkeSAo ZG9uJ3Qgc2V0IGlmIHB0eSkgKi8KLSAgICAgICAgICAgIH0KLQl9Ci0jaWZkZWYgREVCVUcKLQlp ZiAoZGVibG9nKSB7Ci0JICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1QgZ290a2JkIiwiIixnb3RrYmQp OwotCSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGtiYyIsIiIsa2JjKTsKLSNpZmRlZiBDT01NRU5U Ci0jaWZuZGVmIE5PU0VUS0VZCi0JICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1Qga21wdHIiLCIiLGtt cHRyKTsKLSNlbmRpZiAvKiBOT1NFVEtFWSAqLwotI2VuZGlmCS8qIENPTU1FTlQgKi8KLQl9Ci0j ZW5kaWYgLyogREVCVUcgKi8KLQotCXdoaWxlIChnb3RrYmQgfHwga2JjID4gMAkvKiBJZiB3ZSBo YXZlIGtleWJvYXJkIGNoYXJzICovCi0jaWZuZGVmIE5PU0VUS0VZCi0JICAgICAgIHx8IGttcHRy Ci0jZW5kaWYgLyogTk9TRVRLRVkgKi8KLQkgICAgICAgKSB7Ci0jaWZuZGVmIE5PU0VUS0VZCi0J ICAgIGlmIChrbXB0cikgewkJLyogSGF2ZSBjdXJyZW50IG1hY3JvPyAqLwotCQlkZWJ1ZyhGMTAw LCJDT05ORUNUIGttcHRyIG5vbiBOVUxMIiwiIiwwKTsKLQkJaWYgKChjID0gKENIQVIpICprbXB0 cisrKSA9PSBOVUwpIHsgLyogR2V0IGNoYXIgZnJvbSBpdCAqLwotCQkgICAgZGVidWcoRjEwMCwi Q09OTkVDVCBtYWNybyBlbXB0eSwgY29udGludWluZyIsIiIsMCk7Ci0JCSAgICBrbXB0ciA9IE5V TEw7CS8qIElmIG5vIG1vcmUgY2hhcnMsICAqLwotCQkgICAgY29udGludWU7CQkvKiBSZXNldCBw b2ludGVyIGFuZCBjb250aW51ZSAqLwotCQl9Ci0JCWRlYnVnKEYwMDAsIkNPTk5FQ1QgY2hhciBm cm9tIG1hY3JvIiwiIixjKTsKLQkgICAgfSBlbHNlIHsJCQkvKiBObyBtYWNyby4uLiAqLwotI2Vu ZGlmIC8qIE5PU0VUS0VZICovCi0jaWZkZWYgQkVCT1gKLQkJewotCQkgICAgaW50IHJjID0gMDsK LQkJICAgIGlmICgocmMgPSByZWN2KGtiaW4sYnVmLDEsMCkpID4gMCkKLQkJICAgICAgYyA9IGJ1 ZlswXTsKLQkJICAgIGVsc2UKLQkJICAgICAgYyA9IC0xOwotCQkgICAgZGVidWcoRjExMSwicmVj diIsInJjIixyYyk7Ci0JCSAgICBwcmludGYoIlxyXG5yZWN2OiAlYyByYz0lZFxyXG4iLGJ1Zlsw XSxyYyk7Ci0JCX0KLSNlbHNlIC8qIEJFQk9YICovCi0JCWMgPSBDT05HS1MoKTsJCS8qIFllcywg cmVhZCBmcm9tIGtleWJvYXJkICovCi0jZW5kaWYgLyogQkVCT1ggKi8KLQkJZ290a2JkID0gMDsJ CS8qIFR1cm4gb2ZmIHNlbGVjdCgpIHJlc3VsdCBmbGFnICovCi0jaWZuZGVmIE5PU0VUS0VZCi0J ICAgIH0KLSNlbmRpZiAvKiBOT1NFVEtFWSAqLwotCSAgICBpZiAoYyA9PSAtMSkgewotI2lmZGVm IEVJTlRSCi0JCWlmIChlcnJubyA9PSBFSU5UUikKLQkJICBjb250aW51ZTsKLSNlbmRpZiAvKiBF SU5UUiAqLwotCQljeF9zdGF0dXMgPSBDU1hfSU9FUlJPUjsKLQkJY29ub2MoQkVMKTsKLQkJZ290 byBjb25yZXQwOwotCSAgICB9Ci0JICAgIGMgJj0gY21kbXNrOwkJLyogRG8gYW55IHJlcXVlc3Rl ZCBtYXNraW5nICovCi0KLSNpZm5kZWYgTk9TRVRLRVkKLS8qCi0gIE5vdGU6IGttcHRyIGlzIE5V TEwgaWYgd2UgZ290IGNoYXJhY3RlciBjIGZyb20gdGhlIGtleWJvYXJkLCBhbmQgaXQgaXMKLSAg bm90IE5VTEwgaWYgaXQgY2FtZSBmcm9tIGEgbWFjcm8uICBJbiB0aGUgbGF0dGVyIGNhc2UsIHdl IG11c3QgYXZvaWQKLSAgZXhwYW5kaW5nIGl0IGFnYWluLgotKi8KLQkgICAgaWYgKCFrbXB0ciAm JiBtYWNyb3RhYltjXSkgeyAvKiBNYWNybyBkZWZpbml0aW9uIGZvciBjPyAqLwotCQlkZWJ1ZyhG MDAwLCJDT05ORUNUIG1hY3JvIGtleSIsbWFjcm90YWJbY10sYyk7Ci0JCWttcHRyID0gbWFjcm90 YWJbY107CS8qIFllcywgc2V0IHVwIG1hY3JvIHBvaW50ZXIgKi8KLQkJY29udGludWU7CQkvKiBh bmQgcmVzdGFydCB0aGUgbG9vcCwgKi8KLQkgICAgfSBlbHNlIGMgPSBrZXltYXBbY107CS8qIGVs c2UgdXNlIHNpbmdsZS1jaGFyIGtleW1hcCAqLwotI2VuZGlmIC8qIE5PU0VUS0VZICovCi0JICAg IGlmICgKLSNpZm5kZWYgTk9TRVRLRVkKLQkJIWttcHRyICYmCi0jZW5kaWYgLyogTk9TRVRLRVkg Ki8KLQkJKHR0X2VzY2FwZSAmJiAoKGMgJiAweGZmKSA9PSBlc2NhcGUpKSkgeyAvKiBFc2NhcGUg Y2hhcj8gKi8KLQkJZGVidWcoRjAwMCwiQ09OTkVDVCBnb3QgZXNjYXBlIiwiIixjKTsKLSNpZmRl ZiBCRUJPWAotCQlpZiAocmVjdihrYmluLGJ1ZiwxLDApPj0wKQotCQkgIGMgPSBidWZbMF07Ci0J CWVsc2UKLQkJICBjID0gLTE7Ci0jZWxzZSAvKiBCRUJPWCAqLwotCQljID0gQ09OR0tTKCkgJiAw eDdmOwkvKiBSZWFkIGFyZ3VtZW50ICovCi0jZW5kaWYgLyogQkVCT1ggKi8KLQkJZG9lc2MoKGNo YXIpIGMpOwkvKiBIYW5kbGUgaXQgKi8KLQkJY29udGludWU7CQkvKiBCYWNrIHRvIGxvb3AgKi8K LQkgICAgfQotCSAgICBjc2F2ZSA9IGM7CQkJLyogU2F2ZSBpdCBiZWZvcmUgdHJhbnNsYXRpb24g Ki8KLQkgICAgCQkJCS8qIGZvciBsb2NhbCBlY2hvaW5nLiAqLwotI2lmZGVmIENLTEVBUk4KLQkg ICAgY3JmbGFnID0gKGMgPT0gQ1IpOwkJLyogUmVtZW1iZXIgaWYgaXQgd2FzIENSLiAqLwotI2Vu ZGlmIC8qIENLTEVBUk4gKi8KLQotI2lmbmRlZiBOT0NTRVRTCi0JICAgIGlmIChpbmVzY1sxXSA9 PSBFU19OT1JNQUwpIHsgLyogSWYgbm90IGluc2lkZSBlc2NhcGUgc2VxLi4gKi8KLQkJLyogVHJh bnNsYXRlIGNoYXJhY3RlciBzZXRzICovCi0jaWZkZWYgVU5JQ09ERQotCQlpbnQgeDsKLQkJaWYg KHVuaWNvZGUgPT0gMSkgewkvKiBSZW1vdGUgaXMgVVRGLTggKi8KLQkJICAgIG91dHhjb3VudCA9 IGJfdG9fdSgoQ0hBUiljLG91dHhidWYsT1VUWEJVRlNJWix0Y3NzaXplKTsKLQkJICAgIG91dHhi dWZbb3V0eGNvdW50XSA9IE5VTDsKLQkJfSBlbHNlIGlmICh1bmljb2RlID09IDIpIHsgLyogTG9j YWwgaXMgVVRGLTggKi8KLQkJICAgIAotCQkgICAgeCA9IHVfdG9fYigoQ0hBUiljKTsKLQkJICAg IGlmICh4IDwgMCkKLQkJICAgICAgY29udGludWU7Ci0JCSAgICBvdXR4YnVmWzBdID0gKHVuc2ln bmVkKSh4ICYgMHhmZik7Ci0JCSAgICBvdXR4Y291bnQgPSAxOwotCQkgICAgb3V0eGJ1ZltvdXR4 Y291bnRdID0gTlVMOwotCQl9IGVsc2UgewotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQkJICAgIGlm IChzeG8pIGMgPSAoKnN4bykoKGNoYXIpYyk7IC8qIExvY2FsLWludGVybWVkaWF0ZSAqLwotCQkg ICAgaWYgKHJ4bykgYyA9ICgqcnhvKSgoY2hhciljKTsgLyogSW50ZXJtZWRpYXRlLXJlbW90ZSAq LwotCQkgICAgb3V0eGJ1ZlswXSA9IGM7Ci0JCSAgICBvdXR4Y291bnQgPSAxOwotCQkgICAgb3V0 eGJ1ZltvdXR4Y291bnRdID0gTlVMOwotI2lmZGVmIFVOSUNPREUKLQkJfQotI2VuZGlmIC8qIFVO SUNPREUgKi8KLQkgICAgfSBlbHNlIHsKLQkJb3V0eGJ1ZlswXSA9IGM7Ci0JCW91dHhjb3VudCA9 IDE7Ci0JCW91dHhidWZbb3V0eGNvdW50XSA9IE5VTDsKLQkgICAgfQotCSAgICBpZiAoZXNjc2Vx KQotCSAgICAgIGFwY3JjID0gY2hrYWVzKChjaGFyKWMsMSk7Ci0jZWxzZSAgLyogTk9DU0VUUyAq LwotCSAgICBvdXR4YnVmWzBdID0gYzsKLQkgICAgb3V0eGNvdW50ID0gMTsKLQkgICAgb3V0eGJ1 ZltvdXR4Y291bnRdID0gTlVMOwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQotCSAgICBkZWJ1ZyhG MTExLCJPVVRYQlVGIixvdXR4YnVmLG91dHhjb3VudCk7Ci0KLQkgICAgZm9yIChpID0gMDsgaSA8 IG91dHhjb3VudDsgaSsrKSB7Ci0JCWMgPSBvdXR4YnVmW2ldOwotLyoKLSBJZiBTaGlmdC1Jbi9T aGlmdC1PdXQgaXMgc2VsZWN0ZWQgYW5kIHdlIGhhdmUgYSA3LWJpdCBjb25uZWN0aW9uLAotIGhh bmRsZSBzaGlmdGluZyBoZXJlLgotKi8KLQkJaWYgKHNvc2kpIHsJCQkgLyogU2hpZnQtSW4vT3V0 IHNlbGVjdGVkPyAqLwotCQkgICAgaWYgKGNtYXNrID09IDAxNzcpIHsJIC8qIEluIDctYml0IGVu dmlyb25tZW50PyAqLwotCQkJaWYgKGMgJiAwMjAwKSB7CQkgLyogOC1iaXQgY2hhcmFjdGVyPyAq LwotCQkJICAgIGlmIChvdXRzaGlmdCA9PSAwKSB7IC8qIElmIG5vdCBzaGlmdGVkLCAqLwotCQkJ CXR0b2MoZG9wYXIoU08pKTsgLyogc2hpZnQuICovCi0JCQkJb3V0c2hpZnQgPSAxOwotCQkJICAg IH0KLQkJCX0gZWxzZSB7Ci0JCQkgICAgaWYgKG91dHNoaWZ0ID09IDEpIHsgLyogNy1iaXQgY2hh cmFjdGVyICovCi0JCQkJdHRvYyhkb3BhcihTSSkpOyAvKiBJZiBzaGlmdGVkLCAqLwotCQkJCW91 dHNoaWZ0ID0gMDsgICAgLyogdW5zaGlmdC4gKi8KLQkJCSAgICB9Ci0JCQl9Ci0JCSAgICB9Ci0J CSAgICBpZiAoYyA9PSBTTykgb3V0c2hpZnQgPSAxOyAvKiBVc2VyIHR5cGVkIFNPICovCi0JCSAg ICBpZiAoYyA9PSBTSSkgb3V0c2hpZnQgPSAwOyAvKiBVc2VyIHR5cGVkIFNJICovCi0JCX0KLQkJ YyAmPSBjbWFzazsJCS8qIEFwcGx5IEtlcm1pdC10by1ob3N0IG1hc2sgbm93LiAqLwotCQlpZiAo YyA9PSAnXDAxNScpIHsJLyogQ2FycmlhZ2UgUmV0dXJuICovCi0JCSAgICBpbnQgc3R1ZmYgPSAt MTsKLQkJICAgIGlmICh0bmxtKSB7CQkvKiBURVJNSU5BTCBORVdMSU5FIE9OICovCi0JCQlzdHVm ZiA9IExGOyAJLyogU3R1ZmYgTEYgKi8KLSNpZmRlZiBUTkNPREUKLQkJICAgIH0gZWxzZSBpZiAo bmV0d29yayAmJiAvKiBURUxORVQgTkVXTElORSBPTi9PRkYvUkFXICovCi0JCQkgICAgICAgSVNf VEVMTkVUKCkpIHsKLQkJCXN3aXRjaCAoIVRFTE9QVF9NRShURUxPUFRfQklOQVJZKSA/IHRuX25s bSA6IHRuX2JfbmxtKXsKLQkJCSAgY2FzZSBUTkxfQ1JMRjoKLQkJCSAgICBzdHVmZiA9IExGOwot CQkJICAgIGJyZWFrOwotCQkJICBjYXNlIFROTF9DUk5VTDoKLQkJCSAgICBzdHVmZiA9IE5VTDsK LQkJCSAgICBicmVhazsKLQkJCX0KLSNlbmRpZiAvKiBUTkNPREUgKi8KLQkJICAgIH0KLQkJICAg IGlmIChzdHVmZiA+IC0xKSB7Ci0JCQl0dG9jKGRvcGFyKCdcMDE1JykpOwkvKiBTZW5kIENSICov Ci0JCQlpZiAoZHVwbGV4KSBjb25vYygnXDAxNScpOyAvKiBNYXliZSBlY2hvIENSICovCi0JCQlj ID0gc3R1ZmY7CS8qIENoYXIgdG8gc3R1ZmYgKi8KLQkJCWNzYXZlID0gYzsKLQkJICAgIH0KLQkJ fQotI2lmZGVmIFROQ09ERQotLyogSWYgdXNlciB0eXBlcyB0aGUgMHhmZiBjaGFyYWN0ZXIgKFRF TE5FVCBJQUMpLCBpdCBtdXN0IGJlIGRvdWJsZWQuICovCi0JCWVsc2UJCS8qIE5vdCBDUiAqLwot CQkgIGlmICgoZG9wYXIoKENIQVIpIGMpID09IElBQykgJiYgLyogSUFDICgweGZmKSAqLwotCQkg ICAgICBuZXR3b3JrICYmIElTX1RFTE5FVCgpKSB7IC8qIFNlbmQgb25lIG5vdyAqLwotCQkgICAg ICB0dG9jKChjaGFyKUlBQyk7IC8qIGFuZCB0aGUgb3RoZXIgb25lIGp1c3QgYmVsb3cuICovCi0J CSAgfQotI2VuZGlmIC8qIFROQ09ERSAqLwotCQkvKiBTZW5kIHRoZSBjaGFyYWN0ZXIgKi8KLQot CQl4ID0gdHRvYygoY2hhcilkb3BhcigoQ0hBUikgYykpOwotCQlpZiAoeCA+IC0xKSB7Ci0jaWZk ZWYgQ0tMRUFSTgotCQkgICAgaWYgKGxlYXJuaW5nKSB7CS8qIExlYXJuZWQgc2NyaXB0IGFjdGl2 ZSAqLwotCQkJaWYgKGNyZmxhZykgewkvKiBVc2VyIHR5cGVkIENSICovCi0JCQkgICAgbGVhcm5j aGFyKENSKTsgLyogSGFuZGxlIENSICovCi0JCQkgICAgbGVhcm5zdCA9IDA7ICAgLyogU2hpZnQg dG8gTmV1dHJhbCAqLwotCQkJfSBlbHNlIHsKLQkJCSAgICBsZWFybmNoYXIoYyk7ICAvKiBOb3Qg Q1IgKi8KLQkJCSAgICBsZWFybnN0ID0gMjsgICAvKiBDaGFuZ2Ugc3RhdGUgdG8gS2V5Ym9hcmQg Ki8KLQkJCX0KLQkJICAgIH0KLSNlbmRpZiAvKiBDS0xFQVJOICovCi0JCSAgICBpZiAoZHVwbGV4 KSB7CS8qIElmIGhhbGYgZHVwbGV4LCBtdXN0IGVjaG8gKi8KLQkJCWlmIChkZWJzZXMpCi0JCQkg IGNvbm9sKGRiY2hyKGNzYXZlKSk7IC8qIHRoZSBvcmlnaW5hbCBjaGFyICovCi0JCQllbHNlCQkv KiBub3QgdGhlIHRyYW5zbGF0ZWQgb25lICovCi0JCQkgIGNvbm9jKChjaGFyKWNzYXZlKTsKLQkJ CWlmIChzZXNsb2cpIHsJLyogQW5kIG1heWJlIGxvZyBpdCB0b28gKi8KLQkJCSAgICBjMiA9IGNz YXZlOwotCQkJICAgIGlmIChzZXNzZnQgPT0gMCAmJiBjc2F2ZSA9PSAnXHInKQotCQkJICAgICAg YzIgPSAnXG4nOwotCQkJICAgIExPR0NIQVIoKGNoYXIpYzIpOwotCQkJfQotCQkgICAgfQotCQl9 IGVsc2UgewotCQkgICAgcGVycm9yKCJcclxuQ2FuJ3Qgc2VuZCBjaGFyYWN0ZXIiKTsKLQkJICAg IGN4X3N0YXR1cyA9IENTWF9JT0VSUk9SOwotCQkgICAgYWN0aXZlID0gMDsKLQkJICAgIGJyZWFr OwotCQl9Ci0JICAgIH0KLQl9Ci0JaWYgKEZEX0lTU0VUKHR0eWZkLCAmb3V0KSkgewotCSAgICBG RF9DTFIodHR5ZmQsICZvdXQpOwotCX0KLQl3aGlsZSAoZ290bmV0ID4gMCB8fCBpYmMgPiAwKSB7 Ci0JICAgIGdvdG5ldCA9IDA7Ci0JICAgIHByZXYgPSBjOwotCSAgICBjID0gY2tjZ2V0YygwKTsJ CS8qIEdldCBuZXh0IGNoYXJhY3RlciAqLwotCSAgICBpZiAoYyA8IDApIHsJCS8qIEZhaWxlZC4u LiAqLwotCQlja2NwdXRmKCk7CQkvKiBGbHVzaCBDT05ORUNUIG91dHB1dCBidWZmZXIgKi8KLQkJ aWYgKG1zZ2ZsZykgewotCQkgICAgcHJpbnRmKCJcclxuQ29tbXVuaWNhdGlvbnMgZGlzY29ubmVj dCAiKTsKLSNpZmRlZiBDT01NRU5UCi0JCSAgICBpZiAoYyA9PSAtMwotI2lmZGVmIHVsdHJpeAot LyogVGhpcyBoYXBwZW5zIG9uIFVsdHJpeCBpZiB0aGVyZSdzIG5vIGNhcnJpZXIgKi8KLQkJCSYm IGVycm5vICE9IEVJTwotI2VuZGlmIC8qIHVsdHJpeCAqLwotI2lmZGVmIFVURUsKLS8qIFRoaXMg aGFwcGVucyBvbiBVVEVLIGlmIHRoZXJlJ3Mgbm8gY2FycmllciAqLwotCQkJJiYgZXJybm8gIT0g RVdPVUxEQkxPQ0sKLSNlbmRpZiAvKiBVVEVLICovCi0JCQkpCi0JCSAgICAgIHBlcnJvcigiXHJc bkNhbid0IHJlYWQgY2hhcmFjdGVyIik7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCQl9Ci0jaWZk ZWYgTk9TRVRCVUYKLQkJZmZsdXNoKHN0ZG91dCk7Ci0jZW5kaWYgLyogTk9TRVRCVUYgKi8KLQkJ ZG9sb2dlbmQoKTsKLQkJdHRoYW5nKCk7CQkvKiBIYW5nIHVwIHRoZSBjb25uZWN0aW9uICovCi0J CWRlYnVnKEYxMTEsIkNPTk5FQ1QgaS9vIGVycm9yIDEiLGNrX2VycnN0cigpLGVycm5vKTsKLQkJ Y3hfc3RhdHVzID0gQ1NYX0hPU1RESVNDOwotCQlnb3RvIGNvbnJldDA7Ci0JICAgIH0KLSNpZmRl ZiBUTkNPREUKLQkgICAgdHggPSAwOwotCSAgICBpZiAoKGMgPT0gTlVMKSAmJiBuZXR3b3JrICYm IElTX1RFTE5FVCgpKSB7Ci0JCWlmIChwcmV2ID09IENSKSB7ICAgIC8qIERpc2NhcmQgPE5VTD4g b2YgPENSPjxOVUw+IGlmIHBlZXIgKi8KLQkJICAgIGlmICghVEVMT1BUX1UoVEVMT1BUX0JJTkFS WSkpIHsgIC8qIG5vdCBpbiBiaW5hcnkgbW9kZSAqLwotCQkJZGVidWcoRjExMSwiQ09OTkVDVCBO VUwiLGNraXRvYShwcmV2KSxjKTsKLQkJCWNrY3B1dGYoKTsJLyogRmx1c2ggc2NyZWVuIG91dHB1 dCBidWZmZXIgKi8KLQkJCWJyZWFrOwotCQkgICAgfQotCQl9Ci0JICAgIH0KLQkgICAgZGVidWco RjExMSwiQ09OTkVDVCIsImMiLGMpOwotCSAgICBkZWJ1ZyhGMTExLCJDT05ORUNUIiwibmV0d29y ayIsbmV0d29yayk7Ci0JICAgIGRlYnVnKEYxMTEsIkNPTk5FQ1QiLCJJU19URUxORVQiLElTX1RF TE5FVCgpKTsKLQkgICAgaWYgKChjID09IElBQykgJiYgbmV0d29yayAmJiBJU19URUxORVQoKSkg ewotI2lmZGVmIENLX0VOQ1JZUFRJT04KLQkJaW50IHhfYXV0aCA9IFRFTE9QVF9NRShURUxPUFRf QVVUSEVOVElDQVRJT04pOwotI2Vsc2UKLQkJaW50IHhfYXV0aCA9IDA7Ci0jZW5kaWYgLyogQ0tf RU5DUllQVElPTiAqLwotCQlpbnQgbWVfYmluID0gVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpOwot CQlpbnQgdV9iaW4gPSBURUxPUFRfVShURUxPUFRfQklOQVJZKTsKLQkJZGVidWcoRjEwMCwiQ09O TkVDVCBnb3QgSUFDIiwiIiwwKTsKLQkJY2tjcHV0ZigpOwkJLyogRHVtcCBzY3JlZW4tb3V0cHV0 IGJ1ZmZlciAqLwotCQlpZiAoKHR4ID0gdG5fZG9vcCgoQ0hBUikoYyAmIDB4ZmYpLGR1cGxleCxj a2NnZXRjKSkgPT0gMCkgewotCQkgICAgaWYgKG1lX2JpbiAhPSBURUxPUFRfTUUoVEVMT1BUX0JJ TkFSWSkpIHsKLQkJCW1lX2JpbiA9IFRFTE9QVF9NRShURUxPUFRfQklOQVJZKTsKLQkJICAgIH0g ZWxzZSBpZiAodV9iaW4gIT0gVEVMT1BUX1UoVEVMT1BUX0JJTkFSWSkpIHsKLQkJCXVfYmluID0g VEVMT1BUX1UoVEVMT1BUX0JJTkFSWSk7Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotLyoKLSAgSGVy ZSB3ZSBoYXZlIHRvIHB1c2ggYmFjayBhbnkgYnl0ZXMgd2UgaGF2ZSByZWFkIHVzaW5nIGJsb2Nr IHJlYWRzLCBzbyB3ZQotICBjYW4gcmVhZCB0aGVtIGFnYWluIHVzaW5nIHNpbmdsZS1jaGFyYWN0 ZXIgcmVhZHMsIHNvIHRoZXkgY2FuIGJlIGRlY3J5cHRlZAotICBpbiBjYXNlIHRoZXJlIHdhcyBh IHN3aXRjaCB0byBlbmNyeXB0aW9uIGluIHRoZSBibG9jay4gIE5vdGUgdGhhdCB3ZSBjYW4ndAot ICBoYW5kbGUgc3dpdGNoZXMgaW4gdGhlIGVuY3J5cHRpb24gc3RhdGUgaXRzZWxmIHRoaXMgd2F5 IC0tIHdoaWNoIHdvdWxkIGJlCi0gIG5pY2UsIHNpbmNlIGl0IHdvdWxkIGVsaW1pbmF0ZSB0aGUg bmVlZCBmb3Igc2luZ2xlLWNoYXJhY3RlciByZWFkcy4gIFdoeT8KLSAgQmVjYXVzZSBpZiBhIHNl cmllcyBvZiBjaGFyYWN0ZXJzIGhhcyBhbHJlYWR5IGJlZW4gZGVjcnlwdGVkIHRoYXQgc2hvdWxk bid0Ci0gIGhhdmUgYmVlbiwgdGhlbiAoYSkgaXQncyBydWluZWQsIGFuZCAoYikgc28gaXMgdGhl IHN0YXRlIG9mIHRoZSBkZWNyeXB0aW9uCi0gIG1hY2hpbmUuICBUb28gYmFkLgotKi8KLQkJICAg IH0gZWxzZSBpZiAoVEVMT1BUX01FKFRFTE9QVF9BVVRIRU5USUNBVElPTikgIT0gMCAmJgotCQkJ ICAgICAgIFRFTE9QVF9NRShURUxPUFRfQVVUSEVOVElDQVRJT04pICE9IHhfYXV0aAotCQkJICAg ICAgICkgewotCQkJaWYgKHR0cHVzaGJhY2soKENIQVIgKilpYnAsaWJjKSA+IC0xKSB7Ci0JCQkg ICAgaWJjID0gMDsKLQkJCSAgICBpYnAgPSBpYnVmOwotCQkJfQotI2VuZGlmIC8qIENLX0VOQ1JZ UFRJT04gKi8KLQkJICAgIH0KLQkJICAgIGNvbnRpbnVlOwotCQl9IGVsc2UgaWYgKHR4ID09IC0x KSB7CS8qIEkvTyBlcnJvciAqLwotCQkgICAgaWYgKG1zZ2ZsZykKLQkJICAgICAgcHJpbnRmKCJc clxuQ29tbXVuaWNhdGlvbnMgZGlzY29ubmVjdCAiKTsKLSNpZmRlZiBOT1NFVEJVRgotCQkgICAg ZmZsdXNoKHN0ZG91dCk7Ci0jZW5kaWYgLyogTk9TRVRCVUYgKi8KLQkJICAgIGRvbG9nZW5kKCk7 Ci0JCSAgICBkZWJ1ZyhGMTExLCJDT05ORUNUIGkvbyBlcnJvciAyIixja19lcnJzdHIoKSxlcnJu byk7Ci0JCSAgICBjeF9zdGF0dXMgPSBDU1hfSU9FUlJPUjsKLQkJICAgIGdvdG8gY29ucmV0MDsK LQkJfSBlbHNlIGlmICh0eCA9PSAtMikgewkvKiBJL08gZXJyb3IgKi8KLQkJICAgIGlmIChtc2dm bGcpCi0JCSAgICAgIHByaW50ZigiXHJcbkNvbm5lY3Rpb24gY2xvc2VkIGJ5IHBlZXIiKTsKLSNp ZmRlZiBOT1NFVEJVRgotCQkgICAgZmZsdXNoKHN0ZG91dCk7Ci0jZW5kaWYgLyogTk9TRVRCVUYg Ki8KLQkJICAgIGRvbG9nZW5kKCk7Ci0JCSAgICBkZWJ1ZyhGMTExLCJDT05ORUNUIGkvbyBlcnJv ciAzIixja19lcnJzdHIoKSxlcnJubyk7Ci0JCSAgICBjeF9zdGF0dXMgPSBDU1hfSU9FUlJPUjsK LQkJICAgIGdvdG8gY29ucmV0MDsKLQkJfSBlbHNlIGlmICh0eCA9PSAtMykgewkvKiBJL08gZXJy b3IgKi8KLQkJICAgIGlmIChtc2dmbGcpCi0JCSAgICAgIHByaW50ZigiXHJcbkNvbm5lY3Rpb24g Y2xvc2VkIGR1ZSB0byB0ZWxuZXQgcG9saWN5Iik7Ci0jaWZkZWYgTk9TRVRCVUYKLQkJICAgIGZm bHVzaChzdGRvdXQpOwotI2VuZGlmIC8qIE5PU0VUQlVGICovCi0JCSAgICBkb2xvZ2VuZCgpOwot CQkgICAgZGVidWcoRjExMSwiQ09OTkVDVCBpL28gZXJyb3IgNCIsY2tfZXJyc3RyKCksZXJybm8p OwotCQkgICAgY3hfc3RhdHVzID0gQ1NYX0lPRVJST1I7Ci0JCSAgICBnb3RvIGNvbnJldDA7Ci0J CX0gZWxzZSBpZiAoKHR4ID09IDEpICYmICghZHVwbGV4KSkgeyAvKiBFQ0hPIGNoYW5nZSAqLwot CQkgICAgZHVwbGV4ID0gMTsJCS8qIFR1cm4gb24gbG9jYWwgZWNobyAqLwotCQkgICAgY29udGlu dWU7Ci0JCX0gZWxzZSBpZiAoKHR4ID09IDIpICYmIChkdXBsZXgpKSB7IC8qIEVDSE8gY2hhbmdl ICovCi0JCSAgICBkdXBsZXggPSAwOwotCQkgICAgY29udGludWU7Ci0JCX0gZWxzZSBpZiAodHgg PT0gMykgewkvKiBRdW90ZWQgSUFDICovCi0JCSAgICBjID0gcGFyaXR5ID8gMTI3IDogMjU1Owot CQl9Ci0jaWZkZWYgSUtTX09QVElPTgotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR4ID09IDQp IHsgICAvKiBJS1MgU3RhdGUgQ2hhbmdlICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChURUxP UFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnVfc3RhcnQgJiYKLQkJCSF0Y3BfaW5jb21pbmcK LQkJCSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLyogaGVyZSB3ZSBuZWVkIHRvIHByaW50 IGEgbXNnIHRoYXQgdGhlIG90aGVyICovCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBzaWRl IGlzIGluIFNFUlZFUiBtb2RlIGFuZCB0aGF0IFJFTU9URSAgICAgKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgIC8qIGNvbW1hbmRzIHNob3VsZCBiZSB1c2VkLiAgQW5kIENPTk5FQ1QgbW9kZSAq LwotICAgICAgICAgICAgICAgICAgICAgICAgLyogc2hvdWxkIGJlIGVuZGVkLiAgICAgICAgICAg ICAgICAgICAgICAgICAgICovCi0JCQljeF9zdGF0dXMgPSBDU1hfSUtTRDsKLQkJCWFjdGl2ZSA9 IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyog SUtTX09QVElPTiAqLwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR4ID09IDYpIHsKLSAgICAg ICAgICAgICAgICAgICAgLyogRE8gTE9HT1VUIHdhcyByZWNlaXZlZCAqLwotCQkgICAgaWYgKG1z Z2ZsZykKLQkJICAgICAgcHJpbnRmKCJcclxuUmVtb3RlIExvZ291dCAiKTsKLSNpZmRlZiBOT1NF VEJVRgotCQkgICAgZmZsdXNoKHN0ZG91dCk7Ci0jZW5kaWYgLyogTk9TRVRCVUYgKi8KLQkJICAg IGRlYnVnKEYxMDAsIkNPTk5FQ1QgUmVtb3RlIExvZ291dCIsIiIsMCk7Ci0JCSAgICBjeF9zdGF0 dXMgPSBDU1hfVFJJR0dFUjsKLQkJICAgIGdvdG8gY29ucmV0MDsKLSAgICAgICAgICAgICAgICB9 IGVsc2UKLQkJICBjb250aW51ZTsJCS8qIE5lZ290aWF0aW9uIE9LLCBnZXQgbmV4dCBjaGFyLiAq LwotCSAgICB9IGVsc2UgaWYgKHBhcml0eSkKLQkgICAgICBjICY9IDB4N2Y7Ci0KLQkgICAgLyog SSdtIGVjaG9pbmcgZm9yIHRoZSByZW1vdGUgKi8KLSAgICAgICAgICAgIGlmIChURUxPUFRfTUUo VEVMT1BUX0VDSE8pICYmIHRuX3JlbV9lY2hvKQotCSAgICAgIHR0b2MoKGNoYXIpYyk7Ci0jZW5k aWYgLyogVE5DT0RFICovCi0KLSNpZmRlZiBDS0xFQVJOCi0JIC8qIExlYXJuZWQgc2NyaXB0OiBS ZWNvcmQgaW5jb21pbmcgY2hhcnMgaWYgbm90IGluIEtleWJvYXJkIHN0YXRlICovCi0KLQkgICAg aWYgKGxlYXJuaW5nICYmIGxlYXJuc3QgIT0gMikgeyAvKiBMZWFybmVkIHNjcmlwdCBhY3RpdmUg Ki8KLQkJbGVhcm5idWZbbGVhcm5icCsrXSA9IGM7ICAgIC8qIFNhdmUgZm9yIElOUFVUIGNvbW1h bmQgKi8KLQkJaWYgKGxlYXJuYnAgPj0gTEVBUk5CVUZTSVopIC8qIGluIGNpcmN1bGFyIGJ1ZmZl ciAqLwotCQkgIGxlYXJuYnAgPSAwOyAgICAgICAgICAgICAgLyogd3JhcHBpbmcgaWYgYXQgZW5k LiAqLwotCQlsZWFybmJjKys7ICAgICAgICAgICAgICAgICAgLyogQ291bnQgdGhpcyBieXRlLiAq LwotCQlsZWFybnN0ID0gMTsgICAgICAgICAgICAgICAgLyogU3RhdGUgaXMgTmV0LiAqLwotCSAg ICB9Ci0jZW5kaWYgLyogQ0tMRUFSTiAqLwotCi0JICAgIGlmIChkZWJzZXMpIHsJCS8qIE91dHB1 dCBjaGFyYWN0ZXIgdG8gc2NyZWVuICovCi0JCWNoYXIgKnM7CQkvKiBEZWJ1Z2dpbmcgZGlzcGxh eS4uLiAqLwotCQlzID0gZGJjaHIoYyk7CQkvKiBNYWtlIGNoYXIgaW50byBzdHJpbmcgKi8KLQkJ d2hpbGUgKCpzKSB7CQkvKiBPdXRwdXQgZWFjaCBjaGFyIGZyb20gc3RyaW5nICovCi0JCSAgICBj a2NwdXRjKCpzKTsKLQkJICAgIGlmIChzZXNsb2cpCQkvKiBBbmQgbWF5YmUgbG9nIGl0LiAqLwot CQkgICAgICBMT0dDSEFSKChjaGFyKSpzKTsKLQkJICAgIHMrKzsKLQkJfQotCSAgICB9IGVsc2Ug ewkJCS8qIFJlZ3VsYXIgZGlzcGxheSAuLi4gKi8KLQkJYyAmPSBjbWFzazsJCS8qIEFwcGx5IEtl cm1pdC10by1yZW1vdGUgbWFzayAqLwotCQlpZiAoc2VzbG9nICYmIHNlc3NmdCkJLyogSWYgYmlu YXJ5IHNlc3Npb24gbG9nICovCi0JCSAgTE9HQ0hBUigoY2hhciljKTsJLyogbG9nIHRoZSBjaGFy YWN0ZXIgbm93LiAqLwotI2lmbmRlZiBOT1hGRVIKLSNpZmRlZiBDS19BVVRPREwKLS8qCi0gIEF1 dG9kb3dubG9hZC4gIENoZWNrIGZvciBLZXJtaXQgUyBwYWNrZXQgcHJpb3IgdG8gdHJhbnNsYXRp b24sIHNpbmNlIHRoYXQKLSAgY2FuIGNoYW5nZSB0aGUgcGFja2V0IGFuZCBtYWtlIGl0IHVucmVj b2duaXphYmxlIChhcyB3aGVuIHRoZSB0ZXJtaW5hbAotICBjaGFyYWN0ZXIgc2V0IGlzIGFuIElT TyA2NDYgb25lKS4uLiAgRGl0dG8gZm9yIFptb2RlbSBzdGFydCBwYWNrZXQuCi0qLwotCQlpZiAo YXV0b2RsCQkvKiBBdXRvZG93bmxvYWQgZW5hYmxlZD8gKi8KLSNpZmRlZiBJS1NfT1BUSU9OCi0J CSAgICB8fCBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0Ci0jZW5kaWYg LyogSUtTX09QVElPTiAqLwotCQkgICAgKSB7Ci0JCSAgICBpbnQgayA9IDA7Ci0KLQkJICAgIGlm IChrc3RhcnRhY3RpdmUgfHwgYyA9PSBzdGNociAvKiBLZXJtaXQgUyBvciBJIHBhY2tldD8gKi8K LSNpZmRlZiBDT01NRU5UCi0JCQl8fCBhZGxfa21vZGUgPT0gQURMU1RSIC8qIE5vdCB1c2VkIGlu IEMtS2VybWl0ICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCQkJKQotCQkgICAgICBrID0ga3N0 YXJ0KChDSEFSKWMpOwotI2lmZGVmIENLX1hZWgotCQkgICAgaWYgKCFrICYmIHptZGxvaykJLyog T3IgYW4gInN6IiBzdGFydD8gKi8KLQkJICAgICAgayA9IHpzdGFydCgoQ0hBUiljKTsKLSNlbmRp ZiAvKiBDS19YWVogKi8KLQkJICAgIGlmIChrKSB7Ci0JCQlpbnQga3NpZ24gPSAwOwotCQkJZGVi dWcoRjEwMSwiQ09OTkVDVCBhdXRvZG93bmxvYWQgayIsIiIsayk7Ci0JCQlpZiAoayA8IDApIHsg LyogTWludXMtUHJvdG9jb2w/ICovCi0jaWZkZWYgTk9TRVJWRVIKLQkJCSAgICBnb3RvIG5vc2Vy dmVyOyAvKiBOZWVkIHNlcnZlciBtb2RlIGZvciB0aGlzICovCi0jZWxzZQotCQkJICAgIGtzaWdu ID0gMTsgLyogUmVtZW1iZXIgKi8KLQkJCSAgICBrID0gMCAtIGs7IC8qIENvbnZlcnQgdG8gYWN0 dWFsIHByb3RvY29sICovCi0JCQkgICAganVzdG9uZSA9IDE7IC8qIEZsYWcgZm9yIHByb3RvY29s IG1vZHVsZSAqLwotI2VuZGlmIC8qIE5PU0VSVkVSICovCi0JCQl9IGVsc2UKLQkJCSAganVzdG9u ZSA9IDA7Ci0JCQlrLS07CQkvKiBBZGp1c3QgW2t6XXN0YXJ0J3MgcmV0dXJuIHZhbHVlICovCi0J CQlpZiAoayA9PSBQUk9UT19LCi0jaWZkZWYgQ0tfWFlaCi0JCQkgICAgfHwgayA9PSBQUk9UT19a Ci0jZW5kaWYgLyogQ0tfWFlaICovCi0JCQkgICAgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogRGFtYWdlIHRoZSBwYWNrZXQgc28gdGhhdCBpdCBkb2Vzbid0IHRyaWdnZXIgKi8K LQkJCSAgICAvKiBhdXRvZG93bmxvYWQgZGV0ZWN0aW9uIGRvd25zdHJlYW0uICovCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPT0gUFJPVE9fSykgewotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgaSwgbGVuID0gc3RybGVuKChjaGFyICopa3NidWYpOwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0J CQkJICBja2NwdXRjKEJTKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0jaWZkZWYg Q0tfWFlaCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQotCQkJCSAgY2tjcHV0YyhDQU4pOwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19YWVogKi8KLQotI2lmbmRlZiBOT0lD UAotCQkJICAgIC8qIHNwcmludGYgaXMgc2FmZSBoZXJlIChidWlsdGluIGtleXdvcmRzKSAqLwot CQkJICAgIHNwcmludGYoYXBjYnVmLAotCQkJCSAgICAic2V0IHByb3RvICVzLCAlcywgc2V0IHBy b3RvICVzIiwKLQkJCQkgICAgcHRhYltrXS5wX25hbWUsCi0JCQkJICAgIGtzaWduID8gInNlcnZl ciIgOiAicmVjZWl2ZSIsCi0JCQkJICAgIHB0YWJbcHJvdG9jb2xdLnBfbmFtZQotCQkJCSAgICAp OwotCQkJICAgIGFwY2xlbmd0aCA9IHN0cmxlbihhcGNidWYpOwotCQkJICAgIGRlYnVnKEYxMTEs IkNPTk5FQ1Qga3NidWYiLGtzYnVmLGspOwotCQkJICAgIGRlYnVnKEYxMTAsIkNPTk5FQ1QgYXV0 b2Rvd25sb2FkIixhcGNidWYsMCk7Ci0JCQkgICAgYXBjYWN0aXZlID0gQVBDX0xPQ0FMOwotCQkJ ICAgIGNrY3B1dGYoKTsJLyogRm9yY2Ugc2NyZWVuIHVwZGF0ZSAqLwotCQkJICAgIGN4X3N0YXR1 cyA9IENTWF9BUEM7Ci0JCQkgICAgZ290byBjb25yZXQxOwotI2Vsc2UKLS8qCi0gIEhlcmUncyBh bm90aGVyIHdheSB0aGF0IGRvZXNuJ3QgcmVxdWlyZSBBUEMsIGJ1dCB0aGVuIHdlJ2xsIGhhdmUg dG8gY2hhbmdlCi0gIGFsbCB0aGUgb3RoZXIgQ09OTkVDVCBtb2R1bGVzLCBhbmQgdGhlbiB0aGUg bWFpbmxpbmUgY29kZSB0aGF0IGNhbGxzIHRoZW0uCi0qLwotCQkJICAgIHsKLQkJCQlleHRlcm4g Y2hhciBzc3RhdGU7Ci0JCQkJc3N0YXRlID0ga3NpZ24gPyAneCcgOiAndic7Ci0JCQkJcHJvdG8o KTsKLQkJCSAgICB9Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLQkJCX0KLQkJICAgIH0KLQkJfQotI2lm ZGVmIE5PU0VSVkVSCi0JICAgICAgbm9zZXJ2ZXI6Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLQot I2VuZGlmIC8qIENLX0FVVE9ETCAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCQlpZiAoc29zaSkg ewkJLyogSGFuZGxlIFNJL1NPICovCi0JCSAgICBpZiAoYyA9PSBTTykgewkvKiBTaGlmdCBPdXQg Ki8KLQkJCWluc2hpZnQgPSAxOwotCQkJY29udGludWU7Ci0JCSAgICB9IGVsc2UgaWYgKGMgPT0g U0kpIHsgLyogU2hpZnQgSW4gKi8KLQkJCWluc2hpZnQgPSAwOwotCQkJY29udGludWU7Ci0JCSAg ICB9Ci0JCSAgICBpZiAoaW5zaGlmdCkgYyB8PSAwMjAwOwotCQl9Ci0JCWlueGJ1ZlswXSA9IGM7 CQkvKiBJbiBjYXNlIHRoZXJlIGlzIG5vIHRyYW5zbGF0aW9uICovCi0JCWlueGNvdW50ID0gMTsJ CS8qIC4uLiAqLwotI2lmbmRlZiBOT0NTRVRTCi0JCWlmIChpbmVzY1swXSA9PSBFU19OT1JNQUwg LyogSWYgbm90IGluIGFuIGVzY2FwZSBzZXF1ZW5jZSAqLwotCQkgICAgJiYgIXByaW50aW5nCS8q IGFuZCBub3QgaW4gdHJhbnNwYXJlbnQgcHJpbnQgKi8KLQkJICAgICkgewkJCS8qIFRyYW5zbGF0 ZSBjaGFyYWN0ZXIgc2V0cyAqLwotI2lmZGVmIFVOSUNPREUKLQkJICAgIGludCB4OwotCQkgICAg aWYgKHVuaWNvZGUgPT0gMSkgewkvKiBSZW1vdGUgaXMgVVRGLTggKi8KLQkJCXggPSB1X3RvX2Io KENIQVIpYyk7Ci0JCQlpZiAoeCA9PSAtMSkKLQkJCSAgY29udGludWU7Ci0JCQllbHNlIGlmICh4 ID09IC0yKSB7IC8qIExTIG9yIFBTICovCi0JCQkgICAgaW54YnVmWzBdID0gQ1I7Ci0JCQkgICAg aW54YnVmWzFdID0gTEY7Ci0JCQkgICAgaW54Y291bnQgPSAyOwotCQkJfSBlbHNlIGlmICh4ID09 IC05KSB7IC8qIFVURi04IGVycm9yICovCi0JCQkgICAgaW54YnVmWzBdID0gJz8nOwotCQkJICAg IGlueGJ1ZlsxXSA9IHVfdG9fYjIoKTsKLQkJCSAgICBpbnhjb3VudCA9IDI7Ci0JCQl9IGVsc2Ug ewotCQkJICAgIGlueGJ1ZlswXSA9ICh1bnNpZ25lZCkoeCAmIDB4ZmYpOwotCQkJfQotCQkJYyA9 IGlueGJ1ZlswXTsKLQkJICAgIH0gZWxzZSBpZiAodW5pY29kZSA9PSAyKSB7IC8qIExvY2FsIGlz IFVURi04ICovCi0JCQlpbnhjb3VudCA9IGJfdG9fdSgoQ0hBUiljLGlueGJ1ZixPVVRYQlVGU0la LHRjc3NpemUpOwotCQkJYyA9IGlueGJ1ZlswXTsKLQkJICAgIH0gZWxzZSB7Ci0jZW5kaWYgLyog VU5JQ09ERSAqLwotCQkJaWYgKHN4aSkgYyA9ICgqc3hpKSgoQ0hBUiljKTsKLQkJCWlmIChyeGkp IGMgPSAoKnJ4aSkoKENIQVIpYyk7Ci0JCQlpbnhidWZbMF0gPSBjOwotI2lmZGVmIFVOSUNPREUK LQkJICAgIH0KLSNlbmRpZiAvKiBVTklDT0RFICovCi0JCX0KLSNlbmRpZiAvKiBOT0NTRVRTICov Ci0KLSNpZm5kZWYgTk9FU0NTRVEKLQkJaWYgKGVzY3NlcSkgewkJLyogSWYgaGFuZGxpbmcgZXNj YXBlIHNlcXVlbmNlcyAqLwotCQkgICAgb2xkcHJ0ID0gcHJpbnRpbmc7CSAgICAgLyogcmVtZW1i ZXIgcHJpbnRlciBzdGF0ZSAqLwotCQkgICAgYXBjcmMgPSBjaGthZXMoKGNoYXIpYywwKTsgLyog YW5kIHVwZGF0ZSBlc2NzZXEgc3RhdGUuICovCi0JCSAgICBpZiAocHJpbnRpbmcgJiYgIW9sZHBy dCkgLyogSWYgcHJpbnRlciB3YXMgdHVybmVkIG9uICovCi0JCSAgICAgIGNvbnRpbnVlOwkJLyog ZG9uJ3QgcHJpbnQgZmluYWwgY2hhciBvZiBlc2NzZXEgKi8KLQkJfQotI2lmZGVmIENLX0FQQwot LyoKLSAgSWYgd2UgYXJlIGhhbmRsaW5nIEFQQ3MsIHdlIGhhdmUgc2V2ZXJhbCBwb3NzaWJpbGl0 aWVzIGF0IHRoaXMgcG9pbnQ6Ci0gICAxLiBPcmRpbmFyeSBjaGFyYWN0ZXIgdG8gYmUgd3JpdHRl biB0byB0aGUgc2NyZWVuLgotICAgMi4gQW4gRXNjOyB3ZSBjYW4ndCB3cml0ZSBpdCBiZWNhdXNl IGl0IG1pZ2h0IGJlIHRoZSBiZWdpbm5pbmcgb2YgYW4gQVBDLgotICAgMy4gVGhlIGNoYXJhY3Rl ciBmb2xsb3dpbmcgYW4gRXNjLCBpbiB3aGljaCBjYXNlIHdlIHdyaXRlIEVzYywgdGhlbiBjaGFy LAotICAgICAgYnV0IG9ubHkgaWYgd2UgaGF2ZSBub3QganVzdCBlbnRlcmVkIGFuIEFQQyBzZXF1 ZW5jZS4KLSovCi0JCWlmIChlc2NzZXEgJiYgKGFwY3N0YXR1cyAmIEFQQ19PTikpIHsKLQkJICAg IGlmIChpbmVzY1swXSA9PSBFU19HT1RFU0MpIC8qIERvbid0IHdyaXRlIEVTQyB5ZXQgKi8KLQkJ ICAgICAgY29udGludWU7Ci0JCSAgICBlbHNlIGlmIChvbGRlc2NbMF0gPT0gRVNfR09URVNDICYm ICFhcGNhY3RpdmUpIHsKLQkJCWNrY3B1dGMoRVNDKTsJLyogV3JpdGUgc2F2ZWQgRVNDICovCi0J CQlpZiAoc2VzbG9nICYmICFzZXNzZnQpIExPR0NIQVIoKGNoYXIpRVNDKTsKLQkJICAgIH0gZWxz ZSBpZiAoYXBjcmMpIHsJLyogV2UgaGF2ZSBhbiBBUEMgKi8KLQkJCWRlYnVnKEYxMTEsIkNPTk5F Q1QgQVBDIGNvbXBsZXRlIixhcGNidWYsYXBjbGVuZ3RoKTsKLQkJCWNrY3B1dGYoKTsJLyogRm9y Y2Ugc2NyZWVuIHVwZGF0ZSAqLwotCQkJY3hfc3RhdHVzID0gQ1NYX0FQQzsKLQkJCWdvdG8gY29u cmV0MTsKLQkJICAgIH0KLQkJfQotI2VuZGlmIC8qIENLX0FQQyAqLwotI2VuZGlmIC8qIE5PRVND U0VRICovCi0KLQkJZGVidWcoRjExMSwiSU5YQlVGIixpbnhidWYsaW54Y291bnQpOwotCQlmb3Ig KGkgPSAwOyBpIDwgaW54Y291bnQ7IGkrKykgeyAvKiBMb29wIHRocnUgKi8KLQkJICAgIGMgPSBp bnhidWZbaV07CS8qIGlucHV0IGV4cGFuc2lvbiBidWZmZXIuLi4gKi8KLQkJICAgIGlmICgKLSNp ZmRlZiBDS19BUEMKLQkJCSFhcGNhY3RpdmUgJiYJLyogRG9uJ3QgZGlzcGxheSBBUEMgc2VxdWVu Y2VzICovCi0jZW5kaWYgLyogQ0tfQVBDICovCi0JCQkhcHJpbnRpbmcJLyogb3IgdHJhbnNwYXJl bnQgcHJpbnQgbWF0ZXJpYWwgKi8KLQotCQkJKSB7Ci0JCQljICY9IGNtZG1zazsJLyogQXBwbHkg Y29tbWFuZCBtYXNrLiAqLwotCi0JCQkvKiBIYW5kbGUgYmFyZSBjYXJyaWFnZSByZXR1cm5zIGFu ZCBsaW5lZmVlZHMgKi8KLQotCQkJaWYgKGMgPT0gQ1IgJiYgdHRfY3JkKSB7IC8qIFNFVCBURVJN IENSLURJU1BMQSBDUkxGPyAqLwotCQkJICAgIGNrY3B1dGMoYyk7CS8qIFllcywgb3V0cHV0IENS ICovCi0JCQkgICAgaWYgKHNlc2xvZyAmJiAhc2Vzc2Z0KSBMT0dDSEFSKChjaGFyKWMpOwotCQkJ ICAgIGMgPSBMRjsJLyogYW5kIGluc2VydCBhIGxpbmVmZWVkICovCi0JCQl9Ci0JCQlpZiAoYyA9 PSBMRiAmJiB0dF9sZmQpIHsgLyogU0VUIFRFUk0gQ1ItRElTUExBIENSTEY/ICovCi0JCQkgICAg Y2tjcHV0YyhDUik7IC8qIFllcywgb3V0cHV0IENSICovCi0JCQkgICAgaWYgKHNlc2xvZyAmJiAh c2Vzc2Z0KSBMT0dDSEFSKChjaGFyKUNSKTsKLQkJCX0KLSNpZm5kZWYgTk9FU0NTRVEKLQkJCWlm IChkb250cHJpbnQpCXsgLyogRG8gdHJhbnNwYXJlbnQgcHJpbnRpbmcuICovCi0JCQkgICAgZG9u dHByaW50ID0gMDsKLQkJCSAgICBjb250aW51ZTsKLQkJCX0gZWxzZQotI2VuZGlmCS8qIE5PRVND U0VRICovCi0JCQlja2NwdXRjKGMpOwkvKiBXcml0ZSBjaGFyYWN0ZXIgdG8gc2NyZWVuICovCi0J CSAgICB9Ci0JCSAgICBpZiAoc2VzbG9nICYmICFzZXNzZnQpIHsgLyogSGFuZGxlIHNlc3Npb24g bG9nLiAqLwotCQkJTE9HQ0hBUigoY2hhciljKTsKLQkJICAgIH0KLSNpZmRlZiBYUFJJTlQKLQkJ ICAgIGlmIChwcmludGluZyAmJiAhaW5lc2NbMF0pIHsKLQkJCS8qIHpjaG91dCgpIGNhbid0IGJl IHVzZWQgYmVjYXVzZSAqLwotCQkJLyogaXQncyBidWZmZXJlZCBkaWZmZXJlbnRseS4gKi8KLQkJ CWNidWZbMF0gPSBjOwotCQkJenNvdXR4KFpNRklMRSwoY2hhciAqKWNidWYsMSk7Ci0JCSAgICB9 Ci0jZW5kaWYgLyogWFBSSU5UICovCi0KLSNpZmRlZiBDS19UUklHR0VSCi0JCSAgICAvKiBDaGVj ayBmb3IgdHJpZ2dlciBzdHJpbmcgKi8KLQkJICAgIGlmICh0dF90cmlnZ2VyWzBdKSB7Ci0JCQlp bnQgaTsKLQkJCWlmICgoaSA9IGF1dG9leGl0Y2hrKChDSEFSKWMpKSA+IC0xKSB7Ci0JCQkgICAg bWFrZXN0cigmdHJpZ2dlcnZhbCx0dF90cmlnZ2VyW2ldKTsKLQkJCSAgICBja2NwdXRmKCk7CS8q IEZvcmNlIHNjcmVlbiB1cGRhdGUgKi8KLSNpZmRlZiBOT1NFVEJVRgotCQkJICAgIGZmbHVzaChz dGRvdXQpOyAvKiBJIG1lYW4gcmVhbGx5IGZvcmNlIGl0ICovCi0jZW5kaWYgLyogTk9TRVRCVUYg Ki8KLQkJCSAgICBjeF9zdGF0dXMgPSBDU1hfVFJJR0dFUjsKLQkJCSAgICBnb3RvIGNvbnJldDE7 Ci0JCQl9Ci0JCSAgICB9Ci0jZW5kaWYgLyogQ0tfVFJJR0dFUiAqLwotCQl9Ci0JICAgIH0KLQl9 Ci0jaWZuZGVmIEJFQk9YCi0JaWYgKEZEX0lTU0VUKHNjcm5vdXQsICZvdXQpKSB7Ci0JICAgIEZE X0NMUihzY3Jub3V0LCAmb3V0KTsKLQl9Ci0jZW5kaWYgLyogQkVCT1ggKi8KLSAgICB9IC8qIEVu ZCBvZiBiaWcgbG9vcCAqLwotICBjb25yZXQxOgkJCQkvKiBDb21lIGhlcmUgdG8gc3VjY2VlZCAq LwotICAgIHJjID0gMTsKLSAgY29ucmV0MDoJCQkJLyogQ29tbW9uIGV4aXQgcG9pbnQgKi8KLSNp ZmRlZiBCRUJPWAotICAgIHsKLQlsb25nIHJldF92YWw7Ci0JY2xvc2Vzb2NrZXQocGFpclswXSk7 Ci0JY2xvc2Vzb2NrZXQocGFpclsxXSk7Ci0JeCA9IGtpbGwodGlkLFNJR0tJTExUSFIpOwkvKiBL aWxsIHRocmVhZCAqLwotCXdhaXRfZm9yX3RocmVhZCAodGlkLCAmcmV0X3ZhbCk7Ci0gICAgfQot I2VuZGlmIC8qIEJFQk9YICovCi0KLSNpZmRlZiBDS0xFQVJOCi0gICAgaWYgKGxlYXJuaW5nICYm IGxlYXJuZnApCi0gICAgICBmcHV0cygiXG4iLGxlYXJuZnApOwotI2VuZGlmIC8qIENLTEVBUk4g Ki8KLQotICAgIGNvbnJlcygpOwotICAgIGlmIChkb2hhbmd1cCA+IDApIHsKLSNpZmRlZiBORVRD T05OCi0JaWYgKG5ldHdvcmsKLSNpZmRlZiBUTkNPREUKLQkgICAgJiYgIVRFTE9QVF9NRShURUxP UFRfQ09NUE9SVCkKLSNlbmRpZiAvKiBUTkNPREUgKi8KLQkgICAgKQotCSAgdHRjbG9zKDApOwot I2VuZGlmIC8qIE5FVENPTk4gKi8KLQotI2lmbmRlZiBDT01NRU5UCi0vKgotICBUaGlzIGlzIGJh ZCBiZWNhdXNlIGlmIHRoZXkgc2FpZCBTRVQgTU9ERU0gSEFOR1VQLU1FVEhPRCBNT0RFTS1DT01N QU5ELAotICB0aGV5IG1lYW4gaXQgLS0gd2Ugc2hvdWxkbid0IGZhbGwgYmFjayBvbiB0dGhhbmco KSBpZiBtZG1odXAoKSBmYWlscywKLSAgYmVjYXVzZSBtYXliZSB0aGV5IGhhdmUgc29tZSBzcGVj aWFsIGtpbmQgb2YgY29ubmVjdGlvbi4gIE9uIHRoZSBvdGhlcgotICBoYW5kLCBtYWtpbmcgdGhp cyBjaGFuZ2UgcHJldmVudHMgZGlhbGluZyBmcm9tIHdvcmtpbmcgYXQgYWxsIGluIHNvbWUKLSAg Y2FzZXMuICBGdXJ0aGVyIHN0dWR5IG5lZWRlZC4KLSovCi0jaWZuZGVmIE5PRElBTAotCWlmIChk b2hhbmd1cCA+IDEpCQkvKiBVc2VyIGFza2VkIGZvciBpdCAqLwotCSAgaWYgKG1kbWh1cCgpIDwg MSkJCS8qIE1heWJlIGhhbmcgdXAgdmlhIG1vZGVtICovCi0jZW5kaWYgLyogTk9ESUFMICovCi0J ICAgIHR0aGFuZygpOwkJCS8qIEFuZCBtYWtlIHN1cmUgd2UgZG9uJ3QgaGFuZyB1cCAqLwotI2Vs c2UKLQlpZiAoIW5ldHdvcmspIHsJCQkvKiBTZXJpYWwgY29ubmVjdGlvbi4gKi8KLSNpZm5kZWYg Tk9ESUFMCi0JICAgIGlmIChkaWFsbWh1KQkJLyogSGFuZyB1cCB0aGUgd2F5IHRoZXkgc2FpZCB0 by4gKi8KLQkgICAgICBtZG1odXAoKTsKLQkgICAgZWxzZQotI2VuZGlmIC8qIE5PRElBTCAqLwot CSAgICAgIHR0aGFuZygpOwotCX0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0JZG9sb2dlbmQoKTsK LQlkb2hhbmd1cCA9IDA7CQkJLyogYWdhaW4gdW5sZXNzIHJlcXVlc3RlZCBhZ2Fpbi4gKi8KLSAg ICB9Ci0gICAgaWYgKHF1aXRub3cpCQkJLyogRXhpdCBub3cgaWYgcmVxdWVzdGVkLiAqLwotICAg ICAgZG9leGl0KEdPT0RfRVhJVCx4aXRzdGEpOwotICAgIGlmIChtc2dmbGcKLSNpZmRlZiBDS19B UEMKLQkmJiAhYXBjYWN0aXZlCi0jZW5kaWYgLyogQ0tfQVBDICovCi0JKQotICAgICAgcHJpbnRm KCIoQmFjayBhdCAlcykiLCAqbXlob3N0ID8gbXlob3N0IDogImxvY2FsIFVOSVggc3lzdGVtIik7 Ci0jaWZkZWYgQ0tfQVBDCi0gICAgaWYgKCFhcGNhY3RpdmUpCi0jZW5kaWYgLyogQ0tfQVBDICov Ci0gICAgICBwcmludGYoIlxuIik7Ci0gICAgd2hhdCA9IFdfTk9USElORzsJCQkvKiBTbyBjb25z b2xlIG1vZGVzIHNldCByaWdodC4gKi8KLSNpZm5kZWYgTk9DU0VUUwotICAgIGxhbmd1YWdlID0g bGFuZ3N2OwkJCS8qIFJlc3RvcmUgbGFuZ3VhZ2UgKi8KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0j aWZkZWYgQ0tfQVBDCi0gICAgZGVidWcoRjEwMSwiQ09OTkVDVCBleGl0IGFwY2FjdGl2ZSIsIiIs YXBjYWN0aXZlKTsKLSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGV4aXQganVzdG9uZSIsIiIsanVz dG9uZSk7Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0gICAgaWYgKG1zZ2ZsZykgewotI2lmZGVmIENL X0FQQwotCWlmIChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMKQotCSAgcHJpbnRmKCJcbiIpOwotI2Vu ZGlmIC8qIENLX0FQQyAqLwotCXByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0JcHJpbnRiYXIgPSAxOwotICAgIH0gZWxzZQot CXByaW50YmFyID0gMDsKLSAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICByZXR1cm4ocmMpOwotfQot Ci0vKiAgSCBDIE8gTiBOIEUgIC0tICBHaXZlIGhlbHAgbWVzc2FnZSBmb3IgY29ubmVjdC4gICov Ci0KLSNkZWZpbmUgQ1hNX1NFUiAxCQkJLyogU2VyaWFsIGNvbm5lY3Rpb25zIG9ubHkgKi8KLSNk ZWZpbmUgQ1hNX05FVCAyCQkJLyogTmV0d29yayBvbmx5IChidXQgbm90IFRlbG5ldCkgKi8KLSNk ZWZpbmUgQ1hNX1RFTCA0CQkJLyogVGVsbmV0IG9ubHkgKi8KLQotc3RhdGljIHN0cnVjdCBobXNn dGFiIHsKLSAgICBjaGFyICogaG1zZzsKLSAgICBpbnQgaGZsYWdzOwotfSBobHBtc2dbXSA9IHsK LSAgICB7IiAgPyBvciBIIGZvciB0aGlzIG1lc3NhZ2UiLCAgICAgICAgICAgICAgICAwfSwKLSAg ICB7IiAgMCAoemVybykgdG8gc2VuZCB0aGUgTlVMICgwKSBjaGFyYWN0ZXIiLCAwfSwKLSAgICB7 IiAgQiB0byBzZW5kIGEgQlJFQUsgc2lnbmFsICgwLjI3NXNlYykiLCAgQ1hNX1NFUn0sCi0jaWZk ZWYgTkVUQ09OTgotICAgIHsiICBCIHRvIHNlbmQgYSBuZXR3b3JrIEJSRUFLIiwgICAgICAgICAg ICBDWE1fTkVUfSwKLSAgICB7IiAgQiB0byBzZW5kIGEgVGVsbmV0IEJSRUFLIiwgICAgICAgICAg ICAgQ1hNX1RFTH0sCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotI2lmZGVmIENLX0xCUksKLSAgICB7 IiAgTCB0byBzZW5kIGEgTG9uZyBCUkVBSyAoMS41c2VjKSIsICAgICAgQ1hNX1NFUn0sCi0jZW5k aWYgLyogQ0tfTEJSSyAqLwotI2lmZGVmIE5FVENPTk4KLSAgICB7IiAgSSB0byBzZW5kIGEgbmV0 d29yayBpbnRlcnJ1cHQgcGFja2V0IiwgQ1hNX05FVH0sCi0gICAgeyIgIEkgdG8gc2VuZCBhIFRl bG5ldCBJbnRlcnJ1cHQgcmVxdWVzdCIsIENYTV9URUx9LAotI2lmZGVmIFROQ09ERQotICAgIHsi ICBBIHRvIHNlbmQgVGVsbmV0IEFyZS1Zb3UtVGhlcmU/IiwgICAgICBDWE1fVEVMfSwKLSNlbmRp ZiAvKiBUTkNPREUgKi8KLSNlbmRpZiAvKiBORVRDT05OICovCi0gICAgeyIgIFUgdG8gaGFuZ3Vw IGFuZCBjbG9zZSB0aGUgY29ubmVjdGlvbiIsIDB9LAotICAgIHsiICBRIHRvIGhhbmd1cCBhbmQg cXVpdCBLZXJtaXQiLCAgICAgICAgICAwfSwKLSAgICB7IiAgUyBmb3Igc3RhdHVzIiwgICAgICAg ICAgICAgICAgICAgICAgICAgMH0sCi0jaWZkZWYgTk9QVVNICi0gICAgeyIgICEgdG8gcHVzaCB0 byBsb2NhbCBzaGVsbCAoZGlzYWJsZWQpIiwgIDB9LAotICAgIHsiICBaIHRvIHN1c3BlbmQgKGRp c2FibGVkKSIsICAgICAgICAgICAgICAwfSwKLSNlbHNlCi0gICAgeyIgICEgdG8gcHVzaCB0byBs b2NhbCBzaGVsbCIsICAgICAgICAgICAgIDB9LAotI2lmZGVmIE5PSkMKLSAgICB7IiAgWiB0byBz dXNwZW5kIChkaXNhYmxlZCkiLCAgICAgICAgICAgICAgMH0sCi0jZWxzZQotICAgIHsiICBaIHRv IHN1c3BlbmQiLCAgICAgICAgICAgICAgICAgICAgICAgICAwfSwKLSNlbmRpZiAvKiBOT0pDICov Ci0jZW5kaWYgLyogTk9QVVNIICovCi0gICAgeyIgIFxcIGJhY2tzbGFzaCBjb2RlOiIsICAgICAg ICAgICAgICAgICAgIDB9LAotICAgIHsiICAgIFxcbm5uICBkZWNpbWFsIGNoYXJhY3RlciBjb2Rl IiwgICAgICAwfSwKLSAgICB7IiAgICBcXE9ubm4gb2N0YWwgY2hhcmFjdGVyIGNvZGUiLCAgICAg ICAgMH0sCi0gICAgeyIgICAgXFxYaGggIGhleGFkZWNpbWFsIGNoYXJhY3RlciBjb2RlOyIsIDB9 LAotICAgIHsiICAgIHRlcm1pbmF0ZSB3aXRoIENhcnJpYWdlIFJldHVybi4iLCAgICAwfSwKLSAg ICB7IiAgVHlwZSB0aGUgZXNjYXBlIGNoYXJhY3RlciBhZ2FpbiB0byBzZW5kIHRoZSBlc2NhcGUg Y2hhcmFjdGVyIGl0c2VsZiwiLAotICAgICAgIDB9LAotICAgIHsiICBvciBwcmVzcyB0aGUgc3Bh Y2UtYmFyIHRvIHJlc3VtZSB0aGUgQ09OTkVDVCBzZXNzaW9uLiIsIDB9LAotICAgIHtOVUxMLCAw fQotfTsKLQotaW50Ci1oY29ubmUoKSB7Ci0gICAgaW50IGMsIGksIGN4dHlwZTsKLSAgICBpZiAo bmV0d29yaykKLSAgICAgIGN4dHlwZSA9IElTX1RFTE5FVCgpID8gQ1hNX1RFTCA6IENYTV9ORVQ7 Ci0gICAgZWxzZQotICAgICAgY3h0eXBlID0gQ1hNX1NFUjsKLQotICAgIGNvbm9sKCJcclxuLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4iKTsK LSAgICBjb25vbGwoIlByZXNzOiIpOwotICAgIGNvbm9sKCIgIEMgdG8gcmV0dXJuIHRvICIpOwot ICAgIGNvbm9sbCgqbXlob3N0ID8gbXlob3N0IDogInRoZSBDLUtlcm1pdCBwcm9tcHQiKTsKLSAg ICBmb3IgKGkgPSAwOyBobHBtc2dbaV0uaG1zZzsgaSsrKSB7Ci0JaWYgKCEoaGxwbXNnW2ldLmhm bGFncykgfHwgKGhscG1zZ1tpXS5oZmxhZ3MgPT0gY3h0eXBlKSkKLQkgIGNvbm9sbChobHBtc2db aV0uaG1zZyk7Ci0gICAgfQotICAgIGNvbm9sKCJQcmVzcyBhIGtleT4iKTsJCS8qIFByb21wdCBm b3IgY29tbWFuZC4gKi8KLSAgICBjID0gQ09OR0tTKCkgJiAwMTc3OwkJLyogR2V0IGNoYXJhY3Rl ciwgc3RyaXAgYW55IHBhcml0eS4gKi8KLSAgICAvKiBObyBrZXkgbWFwcGluZyBvciB0cmFuc2xh dGlvbiBoZXJlICovCi0gICAgaWYgKGMgIT0gQ01EUSkKLSAgICAgIGNvbm9sbCgiIik7Ci0gICAg Y29ub2xsKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tIik7Ci0gICAgcmV0dXJuKGMpOwkJCQkvKiBSZXR1cm4gaXQuICovCi19Ci0KLQotLyogIEQg TyBFIFMgQyAgLS0gIFByb2Nlc3MgYW4gZXNjYXBlIGNoYXJhY3RlciBhcmd1bWVudCAgKi8KLQot Vk9JRAotI2lmZGVmIENLX0FOU0lDCi1kb2VzYyhjaGFyIGMpCi0jZWxzZQotZG9lc2MoYykgY2hh ciBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBkb2VzYyAqLyB7Ci0gICAgQ0hBUiBkOwot Ci0gICAgZGVidWcoRjEwMSwiQ09OTkVDVCBkb2VzYyIsIiIsYyk7Ci0gICAgd2hpbGUgKDEpIHsK LQlpZiAoYyA9PSBlc2NhcGUpIHsJCS8qIFNlbmQgZXNjYXBlIGNoYXJhY3RlciAqLwotCSAgICBk ID0gZG9wYXIoKENIQVIpIGMpOyB0dG9jKChjaGFyKSBkKTsgcmV0dXJuOwotICAgIAl9IGVsc2UJ CQkJLyogT3IgZWxzZSBsb29rIGl0IHVwIGJlbG93LiAqLwotCSAgICBpZiAoaXN1cHBlcihjKSkg YyA9IHRvbG93ZXIoYyk7Ci0KLQlzd2l0Y2goYykgewotCi0JICBjYXNlICdjJzoJCQkvKiBFc2Nh cGUgYmFjayB0byBwcm9tcHQgKi8KLQkgIGNhc2UgJ1wwMyc6Ci0JICAgIGN4X3N0YXR1cyA9IENT WF9FU0NBUEU7Ci0jaWZkZWYgTk9JQ1AKLQkgICAgY29ub2xsKCIiKTsKLQkgICAgY29ub2xsKCIi KTsKLQkgICAgY29ub2xsKAotIiAgV0FSTklORzogVGhpcyB2ZXJzaW9uIG9mIEMtS2VybWl0IGhh cyBubyBjb21tYW5kIHByb2Nlc3NvciB0byBlc2NhcGUiCi0JCSAgICk7Ci0JICAgIGNvbm9sbCgK LSIgIGJhY2sgdG8uICBUbyByZXR1cm4gdG8geW91ciBsb2NhbCBzeXN0ZW0sIGxvZyBvdXQgZnJv bSB0aGUgcmVtb3RlIGFuZC9vciIKLQkJICAgKTsKLQkgICAgY29ub2xsKAotIiAgdXNlIHRoZSBl c2NhcGUgY2hhcmFjdGVyIGZvbGxvd2VkIGJ5IHRoZSBsZXR0ZXIgVSB0byBjbG9zZSAoaGFuZyBV cCkgdGhlIgotCQkgICApOwotCSAgICBjb25vbGwoCi0iICBjb25uZWN0aW9uLiAgUmVzdW1pbmcg eW91ciBzZXNzaW9uLi4uIgotCQkgICApOwotCSAgICBjb25vbGwoIiIpOwotCSAgICByZXR1cm47 Ci0jZWxzZQotCSAgICBhY3RpdmUgPSAwOyBjb25vbCgiXHJcbiIpOyByZXR1cm47Ci0jZW5kaWYg LyogTk9JQ1AgKi8KLQotCSAgY2FzZSAnYic6CQkJLyogU2VuZCBhIEJSRUFLIHNpZ25hbCAqLwot CSAgY2FzZSAnXDAyJzoKLSNpZmRlZiBDS0xFQVJOCi0JICAgIGxlYXJuY2hhcigtNyk7Ci0jZW5k aWYgLyogQ0tMRUFSTiAqLwotCSAgICB0dHNuZGIoKTsgcmV0dXJuOwotCi0jaWZkZWYgTkVUQ09O TgotCSAgY2FzZSAnaSc6CQkJLyogU2VuZCBJbnRlcnJ1cHQgKi8KLQkgIGNhc2UgJ1wwMTEnOgot I2lmZGVmIFRDUFNPQ0tFVAotCSAgICBpZiAobmV0d29yayAmJiBJU19URUxORVQoKSkgeyAvKiBU RUxORVQgKi8KLQkJdGVtcFswXSA9IChDSEFSKSBJQUM7CS8qIEkgQW0gYSBDb21tYW5kICovCi0J CXRlbXBbMV0gPSAoQ0hBUikgVE5fSVA7CS8qIEludGVycnVwdCBQcm9jZXNzICovCi0JCXRlbXBb Ml0gPSBOVUw7Ci0JCXR0b2woKENIQVIgKil0ZW1wLDIpOwotCSAgICB9IGVsc2UKLSNlbmRpZiAv KiBUQ1BTT0NLRVQgKi8KLQkgICAgICBjb25vYyhCRUwpOwotCSAgICByZXR1cm47Ci0KLSNpZmRl ZiBUQ1BTT0NLRVQKLQkgIGNhc2UgJ2EnOgkJCS8qICJBcmUgWW91IFRoZXJlPyIgKi8KLQkgIGNh c2UgJ1wwMSc6Ci0JICAgIGlmIChuZXR3b3JrICYmIElTX1RFTE5FVCgpKSB7Ci0JCXRlbXBbMF0g PSAoQ0hBUikgSUFDOwkvKiBJIEFtIGEgQ29tbWFuZCAqLwotCQl0ZW1wWzFdID0gKENIQVIpIFRO X0FZVDsgLyogQXJlIFlvdSBUaGVyZT8gKi8KLQkJdGVtcFsyXSA9IE5VTDsKLQkJdHRvbCgoQ0hB UiAqKXRlbXAsMik7Ci0JICAgIH0gZWxzZSBjb25vYyhCRUwpOwotCSAgICByZXR1cm47Ci0jZW5k aWYgLyogVENQU09DS0VUICovCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotCi0jaWZkZWYgQ0tfTEJS SwotCSAgY2FzZSAnbCc6CQkJLyogU2VuZCBhIExvbmcgQlJFQUsgc2lnbmFsICovCi0jaWZkZWYg Q0tMRUFSTgotCSAgICBsZWFybmNoYXIoLTgpOwotI2VuZGlmIC8qIENLTEVBUk4gKi8KLQkgICAg dHRzbmRsYigpOyByZXR1cm47Ci0jZW5kaWYgLyogQ0tfTEJSSyAqLwotCi0JICBjYXNlICd1JzoJ CQkvKiBIYW5ndXAgKi8KLSAgICAgICAvKiBjYXNlICdcMDEwJzogKi8JCS8qIE5vLCB0b28gZGFu Z2Vyb3VzICovCi0JICAgIGN4X3N0YXR1cyA9IENTWF9VU0VSRElTQzsKLQkgICAgZG9oYW5ndXAg PSAyOyBhY3RpdmUgPSAwOyBjb25vbCgiXHJcbkhhbmdpbmcgdXAgIik7IHJldHVybjsKLQotCSAg Y2FzZSAncSc6CQkJLyogUXVpdCAqLwotCSAgICBjeF9zdGF0dXMgPSBDU1hfVVNFUkRJU0M7Ci0J ICAgIGRvaGFuZ3VwID0gMjsgcXVpdG5vdyA9IDE7IGFjdGl2ZSA9IDA7IGNvbm9sKCJcclxuIik7 IHJldHVybjsKLQotCSAgY2FzZSAncyc6CQkJLyogU3RhdHVzICovCi0JICAgIGNvbm9sbCgiIik7 Ci0JICAgIGNvbm9sbCgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSIpOwotI2lmZGVmIFBUWU9SUElQRQotCSAgICBpZiAodHRwaXBlKQotCSAgICAg IGNrbWFrbXNnKHRlbXAsVE1QTEVOLCIgUGlwZTogXCIiLHR0bmFtZSwiXCIiLE5VTEwpOwotCSAg ICBlbHNlIGlmICh0dHB0eSkKLQkgICAgICBja21ha21zZyh0ZW1wLFRNUExFTiwiIFB0eTogXCIi LHR0bmFtZSwiXCIiLE5VTEwpOwotCSAgICBlbHNlCi0jZW5kaWYgLyogUFRZT1JQSVBFICovCi0J ICAgICAgY2ttYWttc2codGVtcCwKLQkJICAgICAgIFRNUExFTiwKLQkJICAgICAgICIgIiwKLQkJ ICAgICAgIChuZXR3b3JrID8gIkhvc3QiIDogIkRldmljZSIpLAotCQkgICAgICAgIjogIiwKLQkJ ICAgICAgIHR0bmFtZQotCQkgICAgICAgKTsKLQkgICAgY29ub2xsKHRlbXApOwotCi0JICAgIC8q IFRoZSBmb2xsb3dpbmcgc3ByaW50ZidzIGFyZSBzYWZlLCB0ZW1wW10gc2l6ZSBpcyBhdCBsZWFz dCAyMDAgKi8KLQotCSAgICBpZiAoIW5ldHdvcmsgJiYgc3BlZWQgPj0gMEwpIHsKLQkJc3ByaW50 Zih0ZW1wLCJTcGVlZCAlbGQiLCBzcGVlZCk7Ci0JCWNvbm9sbCh0ZW1wKTsKLQkgICAgfQotCSAg ICBzcHJpbnRmKHRlbXAsIiBUZXJtaW5hbCBlY2hvOiAlcyIsIGR1cGxleCA/ICJsb2NhbCIgOiAi cmVtb3RlIik7Ci0JICAgIGNvbm9sbCh0ZW1wKTsKLQkgICAgc3ByaW50Zih0ZW1wLCIgVGVybWlu YWwgYnl0ZXNpemU6ICVkIiwgKGNtYXNrID09IDAxNzcpID8gNyA6IDgpOwotCSAgICBjb25vbGwo dGVtcCk7Ci0JICAgIHNwcmludGYodGVtcCwiIENvbW1hbmQgYnl0ZXNpemU6ICVkIiwgKGNtZG1z ayA9PSAwMTc3KSA/IDcgOiA4KTsKLQkgICAgY29ub2xsKHRlbXApOwotICAgICAgICAgICAgaWYg KGh3cGFyaXR5KQotICAgICAgICAgICAgICBzcHJpbnRmKHRlbXAsIiBQYXJpdHlbaGFyZHdhcmVd OiAlcyIscGFybmFtKGh3cGFyaXR5KSk7Ci0gICAgICAgICAgICBlbHNlCSAgICAKLSAgICAgICAg ICAgICAgc3ByaW50Zih0ZW1wLCIgUGFyaXR5OiAlcyIsIHBhcm5hbShwYXJpdHkpKTsKLQkgICAg Y29ub2xsKHRlbXApOwotI2lmbmRlZiBOT1hGRVIKLQkgICAgc3ByaW50Zih0ZW1wLCIgQXV0b2Rv d25sb2FkOiAlcyIsIGF1dG9kbCA/ICJvbiIgOiAib2ZmIik7Ci0JICAgIGNvbm9sbCh0ZW1wKTsK LSNlbmRpZiAvKiBOT1hGRVIgKi8KLQkgICAgY2ttYWttc2codGVtcCwJCS8qICh3b3VsZCBub3Qg YmUgc2FmZSBmb3Igc3ByaW50ZikgKi8KLQkJICAgICBUTVBMRU4sCi0JCSAgICAgIiBTZXNzaW9u IGxvZzogIiwKLQkJICAgICAqc2VzZmlsID8gc2VzZmlsIDogIihub25lKSIsCi0JCSAgICAgTlVM TCwKLQkJICAgICBOVUxMCi0JCSAgICAgKTsKLQkgICAgY29ub2xsKHRlbXApOwotI2lmbmRlZiBO T1NIT1cKLQkgICAgaWYgKCFuZXR3b3JrKSBzaG9tZG0oKTsKLSNlbmRpZiAvKiBOT1NIT1cgKi8K LSNpZmRlZiBDS0xPR0RJQUwKLQkgICAgewotCQlsb25nIHo7Ci0JCXogPSBkb2xvZ3Nob3coMCk7 Ci0JCWlmICh6ID4gLTFMKSB7Ci0JCSAgICBzcHJpbnRmKHRlbXAsIiBFbGFwc2VkIHRpbWU6ICVz IixoaG1tc3MoeikpOwotCQkgICAgY29ub2xsKHRlbXApOwotCQl9Ci0JICAgIH0KLSNlbmRpZiAv KiBDS0xPR0RJQUwgKi8KLQkgICAgY29ub2xsKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7Ci0JICAgIHJldHVybjsKLQotCSAgY2FzZSAnaCc6 CQkJLyogSGVscCAqLwotCSAgY2FzZSAnPyc6CQkJLyogSGVscCAqLwotCSAgICBjID0gaGNvbm5l KCk7IGNvbnRpbnVlOwotCi0JICBjYXNlICcwJzoJCQkvKiBTZW5kIGEgbnVsbCAqLwotCSAgICBj ID0gJ1wwJzsgZCA9IGRvcGFyKChDSEFSKSBjKTsgdHRvYygoY2hhcikgZCk7IHJldHVybjsKLQot CSAgY2FzZSAneic6IGNhc2UgJ1wwMzInOgkvKiBTdXNwZW5kICovCi0jaWZuZGVmIE5PUFVTSAot CSAgICBpZiAoIW5vcHVzaCkKLQkgICAgICBzdHB0cmFwKDApOwotCSAgICBlbHNlCi0JICAgICAg Y29ub2MoQkVMKTsKLSNlbHNlCi0JICAgIGNvbm9jKEJFTCk7Ci0jZW5kaWYgLyogTk9QVVNIICov Ci0JICAgIHJldHVybjsKLQotCSAgY2FzZSAnQCc6CQkJLyogU3RhcnQgaW5mZXJpb3IgY29tbWFu ZCBwcm9jZXNzb3IgKi8KLQkgIGNhc2UgJyEnOgotI2lmbmRlZiBOT1BVU0gKLQkgICAgaWYgKCFu b3B1c2gpIHsKLQkJY29ucmVzKCk7CQkgICAgICAvKiBQdXQgY29uc29sZSBiYWNrIHRvIG5vcm1h bCAqLwotCQl6c2hjbWQoIiIpOwkJICAgICAgLyogRm9yayBhIHNoZWxsLiAqLwotCQlpZiAoY29u YmluKChjaGFyKWVzY2FwZSkgPCAwKSB7Ci0JCSAgICBjeF9zdGF0dXMgPSBDU1hfSU5URVJOQUw7 Ci0JCSAgICBwcmludGYoIkVycm9yIHJlc3VtaW5nIENPTk5FQ1Qgc2Vzc2lvblxuIik7Ci0JCSAg ICBhY3RpdmUgPSAwOwotCQl9Ci0JICAgIH0gZWxzZSBjb25vYyhCRUwpOwotI2Vsc2UKLQkgICAg Y29ub2MoQkVMKTsKLSNlbmRpZiAvKiBOT1BVU0ggKi8KLQkgICAgcmV0dXJuOwotCi0JICBjYXNl IFNQOgkJCS8qIFNwYWNlLCBpZ25vcmUgKi8KLQkgICAgcmV0dXJuOwotCi0JICBkZWZhdWx0OgkJ CS8qIE90aGVyICovCi0JICAgIGlmIChjID09IENNRFEpIHsJCS8qIEJhY2tzbGFzaCBlc2NhcGUg Ki8KLQkJaW50IHg7Ci0JCWVjYnAgPSBlY2J1ZjsKLQkJKmVjYnArKyA9IGM7Ci0JCXdoaWxlICgo KGMgPSAoQ09OR0tTKCkgJiBjbWRtc2spKSAhPSAnXHInKSAmJiAoYyAhPSAnXG4nKSkKLQkJICAq ZWNicCsrID0gYzsKLQkJKmVjYnAgPSBOVUw7IGVjYnAgPSBlY2J1ZjsKLQkJeCA9IHh4ZXNjKCZl Y2JwKTsJLyogSW50ZXJwcmV0IGl0ICovCi0JCWlmICh4ID49IDApIHsJCS8qIE5vIGtleSBtYXBw aW5nIGhlcmUgKi8KLQkJICAgIGMgPSBkb3BhcigoQ0hBUikgeCk7Ci0JCSAgICB0dG9jKChjaGFy KSBjKTsKLQkJICAgIHJldHVybjsKLQkJfSBlbHNlIHsJCS8qIEludmFsaWQgYmFja3NsYXNoIGNv ZGUuICovCi0JCSAgICBjb25vYyhCRUwpOwotCQkgICAgcmV0dXJuOwotCQl9Ci0JICAgIH0KLQkg ICAgY29ub2MoQkVMKTsgcmV0dXJuOyAJLyogSW52YWxpZCBlc2MgYXJnLCBiZWVwICovCi0gICAg CX0KLSAgICB9Ci19Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQt OS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1Y29uLmMgYi9ja2VybWl0LTkuMC4zMDIt YnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWNvbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCA1MGNlYjdlLi4wMDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0 LTkuMC4zMDIvY2t1Y29uLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjkwICswLDAgQEAKLSNpbmNs dWRlICJja2NzeW0uaCIKLQotY2hhciAqY29ubnYgPSAiQ09OTkVDVCBDb21tYW5kIGZvciBVTklY OmZvcmsoKSwgOS4wLjExNywgMTQgSnVsIDIwMTEiOwotCi0vKiAgQyBLIFUgQyBPIE4gIC0tICBU ZXJtaW5hbCBjb25uZWN0aW9uIHRvIHJlbW90ZSBzeXN0ZW0sIGZvciBVTklYICAqLwotLyoKLSAg QXV0aG9yOiBGcmFuayBkYSBDcnV6IDxmZGNAY29sdW1iaWEuZWR1PiwKLSAgQ29sdW1iaWEgVW5p dmVyc2l0eSBBY2FkZW1pYyBJbmZvcm1hdGlvbiBTeXN0ZW1zLCBOZXcgWW9yayBDaXR5LgotCi0g IENvcHlyaWdodCAoQykgMTk4NSwgMjAxMSwKLSAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2 ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgotICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQu ICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCi0gICAgY29weXJpZ2h0 IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lv bnMuCi0KLSAgTk9URTogVGhpcyBtb2R1bGUgaGFzIGJlZW4gc3VwZXJzZWRlZCBvbiBtb3N0IHBs YXRmb3JtcyBieSBja3VjbnMuYywgd2hpY2gKLSAgdXNlcyBzZWxlY3QoKSByYXRoZXIgdGhhbiBm b3JrKCkgZm9yIG11bHRpcGxleGluZyBpdHMgaS9vLiAgVGhpcyBtb2R1bGUKLSAgaXMgc3RpbGwg bmVlZGVkIGZvciBwbGF0Zm9ybXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBzZWxlY3QoKSwgYW5kIGFs c28gZm9yCi0gIGl0cyBYLjI1IHN1cHBvcnQuICBBbHRob3VnaCB0aGUgdHdvIG1vZHVsZXMgc2hh cmUgbGFyZ2UgYW1vdW50cyBvZiBjb2RlLAotICB0aGVpciBzdHJ1Y3R1cmUgaXMgcmFkaWNhbGx5 IGRpZmZlcmVudCBhbmQgdGhlcmVmb3JlIGF0dGVtcHRzIGF0IG1lcmdpbmcKLSAgdGhlbSBoYXZl IHNvIGZhciBiZWVuIHVuc3VjY2Vzc2Z1bC4gIChOb3ZlbWJlciAxOTk4LikKLQotICBTcGVjaWFs IHRoYW5rcyB0byBFZHVhcmQgVm9waWNrYSwgUHJhZ3VlIFVuaXZlcnNpdHkgb2YgRWNvbm9taWNz LAotICBDemVjaCBSZXB1YmxpYywgZm9yIHZhbHVhYmxlIGNvbnRyaWJ1dGlvbnMgdG8gdGhpcyBt b2R1bGUgaW4gSnVseSAxOTk0LAotICBhbmQgdG8gTmVhbCBQLiBNdXJwaHkgb2YgdGhlIE1vdG9y b2xhIENlbGx1bGFyIEluZnJhc3RydWN0dXJlIEdyb3VwIGluIDE5OTYKLSAgZm9yIHJlYXJyYW5n aW5nIHRoZSBjb2RlIHRvIGFsbG93IG9wZXJhdGlvbiBvbiB0aGUgQmVCb3gsIHlldCBzdGlsbCB3 b3JrCi0gIGluIHJlZ3VsYXIgVU5JWC4KLSovCi0jaW5jbHVkZSAiY2tjZGViLmgiCQkJLyogQ29t bW9uIHRoaW5ncyBmaXJzdCAqLwotCi0jaWZuZGVmIE5PTE9DQUwKLQotI2lmZGVmIEJFT1NPUkJF Qk9YCi1zdGF0aWMgZG91YmxlIHRpbWVfc3RhcnRlZCA9IDAuMDsKLSNpbmNsdWRlIDxrZXJuZWwv T1MuaD4KLV9QUk9UT1RZUCggc3RhdGljIGxvbmcgY29uY2xkLCAodm9pZCAqKSApOwotI2Vsc2UK LV9QUk9UT1RZUCggc3RhdGljIFZPSUQgY29uY2xkLCAodm9pZCkgKTsKLSNlbmRpZiAvKiBCRU9T T1JCRUJPWCAqLwotCi0jaWZkZWYgTkVYVAotI3VuZGVmIE5TSUcKLSNpbmNsdWRlIDxzeXMvd2Fp dC5oPgkJCS8qIEZvciB3YWl0KCkgKi8KLSNlbmRpZiAvKiBORVhUICovCi0KLSNpbmNsdWRlIDxz aWduYWwuaD4JCQkvKiBTaWduYWxzICovCi0KLSNpZm5kZWYgSFBVWFBSRTY1Ci0jaW5jbHVkZSA8 ZXJybm8uaD4JCQkvKiBFcnJvciBudW1iZXIgc3ltYm9scyAqLwotI2Vsc2UKLSNpZm5kZWYgRVJS Tk9fSU5DTFVERUQKLSNpbmNsdWRlIDxlcnJuby5oPgkJCS8qIEVycm9yIG51bWJlciBzeW1ib2xz ICovCi0jZW5kaWYJLyogRVJSTk9fSU5DTFVERUQgKi8KLSNlbmRpZgkvKiBIUFVYUFJFNjUgKi8K LQotI2lmZGVmIFpJTE9HCQkJCS8qIExvbmdqdW1wcyAqLwotI2luY2x1ZGUgPHNldHJldC5oPgot I2Vsc2UKLSNpbmNsdWRlIDxzZXRqbXAuaD4KLSNlbmRpZiAvKiBaSUxPRyAqLwotI2luY2x1ZGUg ImNrY3NpZy5oIgotCi0vKiBLZXJtaXQtc3BlY2lmaWMgaW5jbHVkZXMgKi8KLQotI2luY2x1ZGUg ImNrY2FzYy5oIgkJCS8qIEFTQ0lJIGNoYXJhY3RlcnMgKi8KLSNpbmNsdWRlICJja2NrZXIuaCIJ CQkvKiBLZXJtaXQgdGhpbmdzICovCi0jaW5jbHVkZSAiY2t1Y21kLmgiCQkJLyogRm9yIHh4ZXNj KCkgcHJvdG90eXBlICovCi0jaW5jbHVkZSAiY2tjbmV0LmgiCQkJLyogTmV0d29yayBzeW1ib2xz ICovCi0jaWZuZGVmIE5PQ1NFVFMKLSNpbmNsdWRlICJja2N4bGEuaCIJCQkvKiBDaGFyYWN0ZXIg c2V0IHRyYW5zbGF0aW9uICovCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi0vKiBJbnRlcm5hbCBm dW5jdGlvbiBwcm90b3R5cGVzICovCi0KLV9QUk9UT1RZUCggVk9JRCB0dGZsdXgsICh2b2lkKSAp OwotX1BST1RPVFlQKCBWT0lEIGRvZXNjLCAoY2hhcikgKTsKLV9QUk9UT1RZUCggVk9JRCBsb2dj aGFyLCAoY2hhcikgKTsKLV9QUk9UT1RZUCggaW50IGhjb25uZSwgKHZvaWQpICk7Ci0jaWZuZGVm IE5PU0hPVwotX1BST1RPVFlQKCBWT0lEIHNob21kbSwgKHZvaWQpICk7Ci0jZW5kaWYgLyogTk9T SE9XICovCi1fUFJPVE9UWVAoIHN0YXRpYyBpbnQga2JnZXQsICh2b2lkKSApOwotX1BST1RPVFlQ KCBzdGF0aWMgaW50IHBpcGVtc2csIChpbnQpICk7Ci1fUFJPVE9UWVAoIHN0YXRpYyBpbnQgY2tj cHV0ZiwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIHN0YXRpYyBWT0lEIGNrX3NuZG1zZywgKHZvaWQp ICk7Ci0vKgotICBGb3IgaW50ZXItZm9yayBzaWduYWxpbmcuICBOb3JtYWxseSB3ZSB1c2UgU0lH VVNSMSwgZXhjZXB0IG9uIFNDTywgd2hlcmUKLSAgd2UgdXNlIFNJR1VTUjIgYmVjYXVzZSBTSUdV U1IxIGlzIHVzZWQgYnkgdGhlIHN5c3RlbS4gIFlvdSBjYW4gZGVmaW5lCi0gIENLX0ZPUktfU0lH IHRvIGJlIHdoYXRldmVyIG90aGVyIHNpZ25hbCB5b3UgbWlnaHQgd2FudCB0byB1c2UgYXQgY29t cGlsZQotICB0aW1lLiAgV2UgZG9uJ3QgdXNlIFNJR1VTUjIgZXZlcnl3aGVyZSBiZWNhdXNlIGlu IHNvbWUgc3lzdGVtcywgbGlrZQotICBVbml4V2FyZSwgdGhlIGRlZmF1bHQgYWN0aW9uIGZvciBT SUdVU1IyIGlzIHRvIGtpbGwgdGhlIHByb2Nlc3MgdGhhdCBnZXRzIGl0LgotKi8KLSNpZm5kZWYg Q0tfRk9SS19TSUcKLQotI2lmbmRlZiBTSUdVU1IxCQkJCS8qIFVzZXItZGVmaW5lZCBzaWduYWxz ICovCi0jZGVmaW5lIFNJR1VTUjEgMzAKLSNlbmRpZiAvKiBTSUdVU1IxICovCi0KLSNpZm5kZWYg U0lHVVNSMgotI2RlZmluZSBTSUdVU1IyIDMxCi0jZW5kaWYgLyogU0lHVVNSMiAqLwotCi0jaWZk ZWYgTV9VTklYCi0jZGVmaW5lIENLX0ZPUktfU0lHIFNJR1VTUjIJCS8qIFNDTyAtIHVzZSBTSUdV U1IyICovCi0jZWxzZQotI2RlZmluZSBDS19GT1JLX1NJRyBTSUdVU1IxCQkvKiBPdGhlcnMgLSB1 c2UgU0lHVVNSMSAqLwotI2VuZGlmIC8qIE1fVU5JWCAqLwotCi0jZW5kaWYgLyogQ0tfRk9SS19T SUcgKi8KLQotLyogRXh0ZXJuYWwgdmFyaWFibGVzICovCi0KLWV4dGVybiBzdHJ1Y3QgY2tfcCBw dGFiW107Ci0KLWV4dGVybiBpbnQgbG9jYWwsIGVzY2FwZSwgZHVwbGV4LCBwYXJpdHksIGZsb3cs IHNlc2xvZywgc2Vzc2Z0LCBkZWJzZXMsCi0gbWRtdHlwLCB0dG5wcm90bywgY21hc2ssIGNtZG1z aywgbmV0d29yaywgbmV0dHlwZSwgZGVibG9nLCBzb3NpLCB0bmxtLAotIHhpdHN0YSwgd2hhdCwg dHR5ZmQsIHR0cGlwZSwgcXVpZXQsIGJhY2tncmQsIHBmbGFnLCB0dF9jcmQsIHR0X2xmZCwKLSB0 bl9ubG0sIHR0ZmRmbGcsCi0gdHRfZXNjYXBlLCBqdXN0b25lLCBjYXJyaWVyLCBod3Bhcml0eTsK LQotZXh0ZXJuIGxvbmcgc3BlZWQ7Ci1leHRlcm4gY2hhciB0dG5hbWVbXSwgc2VzZmlsW10sIG15 aG9zdFtdLCAqY2NudGFiW107Ci0jaWZkZWYgVE5DT0RFCi1leHRlcm4gaW50IHRuX2JfbmxtLCB0 bl9yZW1fZWNobzsKLSNlbmRpZiAvKiBUTkNPREUgKi8KLQotI2lmZGVmIENLX1RSSUdHRVIKLWV4 dGVybiBjaGFyICogdHRfdHJpZ2dlcltdLCAqIHRyaWdnZXJ2YWw7Ci0jZW5kaWYgLyogQ0tfVFJJ R0dFUiAqLwotCi1leHRlcm4gaW50IG5vcHVzaDsKLQotI2lmZGVmIENLX0FQQwotZXh0ZXJuIGlu dCBhcGNhY3RpdmU7CQkJLyogQXBwbGljYXRpb24gUHJvZ3JhbSBDb21tYW5kIChBUEMpICovCi1l eHRlcm4gaW50IGFwY3N0YXR1czsJCQkvKiBpdGVtcyAuLi4gKi8KLXN0YXRpYyBpbnQgYXBjbGVu Z3RoID0gMDsKLSNpZmRlZiBEQ01EQlVGCi1leHRlcm4gY2hhciAqYXBjYnVmOwotI2Vsc2UKLWV4 dGVybiBjaGFyIGFwY2J1ZltdOwotI2VuZGlmIC8qIERDTURCVUYgKi8KLXN0YXRpYyBpbnQgYXBj YnVmbGVuID0gQVBDQlVGTEVOIC0gMjsKLWV4dGVybiBpbnQgcHJvdG9jb2w7CQkJLyogQXV0byBk b3dubG9hZCAqLwotI2VuZGlmIC8qIENLX0FQQyAqLwotCi1leHRlcm4gaW50IGF1dG9kbDsKLSNp ZmRlZiBDS19BVVRPREwKLWV4dGVybiBDSEFSIGtzYnVmW107Ci0jZW5kaWYgLyogQ0tfQVVUT0RM ICovCi0KLSNpZmRlZiBDS19YWVoKLSNpZmRlZiBYWVpfSU5URVJOQUwKLXN0YXRpYyBpbnQgem1k bG9rID0gMTsJCQkvKiBabW9kZW0gYXV0b2Rvd25sb2FkcyBhdmFpbGFibGUgKi8KLSNlbHNlCi1z dGF0aWMgaW50IHptZGxvayA9IDA7CQkJLyogRGVwZW5kcyBvbiBleHRlcm5hbCBwcm90b2NvbCBk ZWYgKi8KLSNlbmRpZiAvKiBYWVpfSU5URVJOQUwgKi8KLSNlbHNlCi1zdGF0aWMgaW50IHptZGxv ayA9IDA7CQkJLyogTm90IGF2YWlsYWJsZSBhdCBhbGwgKi8KLSNlbmRpZiAvKiBDS19YWVogKi8K LQotI2lmbmRlZiBOT1NFVEtFWQkJCS8qIEtleWJvYXJkIG1hcHBpbmcgKi8KLWV4dGVybiBLRVkg KmtleW1hcDsJCQkvKiBTaW5nbGUtY2hhcmFjdGVyIGtleSBtYXAgKi8KLWV4dGVybiBNQUNSTyAq bWFjcm90YWI7CQkJLyogS2V5IG1hY3JvIHBvaW50ZXIgdGFibGUgKi8KLXN0YXRpYyBNQUNSTyBr bXB0ciA9IE5VTEw7CQkvKiBQb2ludGVyIHRvIGN1cnJlbnQga2V5IG1hY3JvICovCi0jZW5kaWYg LyogTk9TRVRLRVkgKi8KLQotLyogR2xvYmFsIHZhcmlhYmxlcyBsb2NhbCB0byB0aGlzIG1vZHVs ZSAqLwotCi1zdGF0aWMgaW50Ci0gIHF1aXRub3cgPSAwLAkJCQkvKiA8ZXNjLWNoYXI+USB3YXMg dHlwZWQgKi8KLSAgamJzZXQgPSAwLAkJCQkvKiBGbGFnIHdoZXRoZXIgam1wIGJ1ZiBpcyBzZXQu ICovCi0gIGRvaGFuZ3VwID0gMCwJCQkJLyogPGVzYy1jaGFyPkggd2FzIHR5cGVkICovCi0gIHNq dmFsLAkJCQkvKiBTZXRqdW1wIHJldHVybiB2YWx1ZSAqLwotICBnb3RlcnIgPSAwLAkJCQkvKiBG b3JrL3BpcGUgY3JlYXRpb24gZXJyb3IgZmxhZyAqLwotICBpbnNoaWZ0ID0gMCwJCQkJLyogU08v U0kgc2hpZnQgc3RhdGVzICovCi0gIG91dHNoaWZ0ID0gMDsKLQotaW50IGFjdGl2ZSA9IDA7CQkJ CS8qIExvd2VyIGZvcmsgYWN0aXZlIGZsYWcgKi8KLQotc3RhdGljIFBJRF9UIHBhcmVudF9pZCA9 IChQSURfVCkwOwkvKiBQcm9jZXNzIElEIG9mIGtleWJvYXJkIGZvcmsgKi8KLQotc3RhdGljIGNo YXIgZWNidWZbMTBdLCAqZWNicDsJCS8qIEVzY2FwZSBjaGFyIGJ1ZmZlciAmIHBvaW50ZXIgKi8K LQotI2lmZGVmIENLX1NNQUxMCi0jZGVmaW5lIElCVUZMIDE1MzYJCQkvKiBJbnB1dCBidWZmZXIg bGVuZ3RoICovCi0jZWxzZQotI2RlZmluZSBJQlVGTCA0MDk2Ci0jZW5kaWYgLyogQ0tfU01BTEwg Ki8KLQotc3RhdGljIGludCBvYmMgPSAwOwkJCS8qIE91dHB1dCBidWZmZXIgY291bnQgKi8KLQot I2lmbmRlZiBPWE9TCi0jZGVmaW5lIE9CVUZMIDEwMjQJCQkvKiBPdXRwdXQgYnVmZmVyIGxlbmd0 aCAqLwotI2Vsc2UKLSNkZWZpbmUgT0JVRkwgSUJVRkwKLSNlbmRpZiAvKiBPWE9TICovCi0KLSNp ZmRlZiBCSUdCVUZPSwotI2RlZmluZSBUTVBMRU4gNDA5NgkJCS8qIFRlbXBvcmFyeSBtZXNzYWdl IGJ1ZmZlciBsZW5ndGggKi8KLSNlbHNlCi0jZGVmaW5lIFRNUExFTiAyMDAKLSNlbmRpZiAvKiBC SUdCVUZPSyAqLwotCi0jaWZkZWYgRFlOQU1JQwotc3RhdGljIGNoYXIgKmlidWYgPSBOVUxMLCAq b2J1ZiA9IE5VTEwsICp0ZW1wID0gTlVMTDsgLyogQnVmZmVycyAqLwotI2Vsc2UKLXN0YXRpYyBj aGFyIGlidWZbSUJVRkxdLCBvYnVmW09CVUZMXSwgdGVtcFtUTVBMRU5dOwotI2VuZGlmIC8qIERZ TkFNSUMgKi8KLQotI2lmZGVmIERZTkFNSUMKLXN0YXRpYyBjaGFyICppYnA7CQkJLyogSW5wdXQg YnVmZmVyIHBvaW50ZXIgKi8KLSNlbHNlCi1zdGF0aWMgY2hhciAqaWJwID0gaWJ1ZjsJCS8qIElu cHV0IGJ1ZmZlciBwb2ludGVyICovCi0jZW5kaWYgLypEWU5BTUlDICovCi1zdGF0aWMgaW50IGli YyA9IDA7CQkJLyogSW5wdXQgYnVmZmVyIGNvdW50ICovCi0KLSNpZmRlZiBEWU5BTUlDCi1zdGF0 aWMgY2hhciAqb2JwOwkJCS8qIE91dHB1dCBidWZmZXIgcG9pbnRlciAqLwotI2Vsc2UKLXN0YXRp YyBjaGFyICpvYnAgPSBvYnVmOwkJLyogT3V0cHV0IGJ1ZmZlciBwb2ludGVyICovCi0jZW5kaWYg LyogRFlOQU1JQyAqLwotCi0vKiBYLjI1IGl0ZW1zICovCi0KLSNpZmRlZiBBTllYMjUKLXN0YXRp YyBjaGFyICpwOwkJCQkvKiBHZW5lcmFsIHB1cnBvc2UgcG9pbnRlciAqLwotY2hhciB4MjVpYnVm W01BWElYMjVdOwkJCS8qIElucHV0IGJ1ZmZlciAqLwotY2hhciB4MjVvYnVmW01BWE9YMjVdOwkJ CS8qIE91dHB1dCBidWZmZXIgKi8KLWludCBpYnVmbDsJCQkJLyogTGVuZ3RoIG9mIGlucHV0IGJ1 ZmZlciAqLwotaW50IG9idWZsOwkJCQkvKiBMZW5ndGggb2Ygb3V0cHV0IGJ1ZmZlciAqLwotdW5z aWduZWQgY2hhciB0b3NlbmQgPSAwOwotaW50IGxpbmtpZCwgbGNuOwotc3RhdGljIGludCBkb3gy NWNsciA9IDA7Ci0jaWZuZGVmIElCTVgyNQotZXh0ZXJuIENIQVIgcGFkcGFybXNbXTsKLSNlbmRp ZiAvKiBJQk1YMjUgKi8KLSNlbmRpZiAvKiBBTllYMjUgKi8KLQotc3RhdGljIGludCB4cGlwZVsy XSA9IHstMSwgLTF9OwkvKiBQaXBlIGRlc2NyaXB0b3IgZm9yIGNoaWxkLXBhcmVudCBtZXNzYWdl cyAqLwotc3RhdGljIFBJRF9UIHBpZCA9IChQSURfVCkgMDsJLyogUHJvY2VzcyBJRCBvZiBjaGls ZCAqLwotCi0vKiBDaGFyYWN0ZXItc2V0IGl0ZW1zICovCi0KLXN0YXRpYyBpbnQgdW5pY29kZSA9 IDA7Ci0KLXN0YXRpYyBpbnQgZXNjc2VxID0gMDsJCQkvKiAxID0gUmVjb2duaXplciBpcyBhY3Rp dmUgKi8KLWludCBpbmVzYyA9IDA7CQkJCS8qIFN0YXRlIG9mIHNlcXVlbmNlIHJlY29nbml6ZXIg Ki8KLWludCBvbGRlc2MgPSAtMTsJCQkvKiBQcmV2aW91cyBzdGF0ZSBvZiByZWNvZ25pemVyICov Ci0KLSNkZWZpbmUgT1VUWEJVRlNJWiAxNQotc3RhdGljIENIQVIgaW54YnVmW09VVFhCVUZTSVor MV07CS8qIEhvc3QtdG8tc2NyZWVuIGV4cGFuc2lvbiBidWZmZXIgKi8KLXN0YXRpYyBpbnQgaW54 Y291bnQgPSAwOwkJLyogYW5kIGNvdW50ICovCi1zdGF0aWMgQ0hBUiBvdXR4YnVmW09VVFhCVUZT SVorMV07CS8qIEtleWJvYXJkLXRvLWhvc3QgZXhwYW5zaW9uIGJ1ZiAqLwotc3RhdGljIGludCBv dXR4Y291bnQgPSAwOwkJLyogYW5kIGNvdW50ICovCi0KLSNpZm5kZWYgTk9DU0VUUwotI2lmZGVm IENLX0FOU0lDIC8qIEFOU0kgQyBwcm90b3R5cGVzLi4uICovCi1leHRlcm4gQ0hBUiAoKnhsc1tN QVhUQ1NFVFMrMV1bTUFYRkNTRVRTKzFdKShDSEFSKTsgLyogQ2hhcmFjdGVyIHNldCAqLwotZXh0 ZXJuIENIQVIgKCp4bHJbTUFYVENTRVRTKzFdW01BWEZDU0VUUysxXSkoQ0hBUik7IC8qIHRyYW5z bGF0aW9uIGZ1bmN0aW9ucyAqLwotc3RhdGljIENIQVIgKCpzeG8pKENIQVIpOwkvKiBMb2NhbCB0 cmFuc2xhdGlvbiBmdW5jdGlvbnMgKi8KLXN0YXRpYyBDSEFSICgqcnhvKShDSEFSKTsJLyogZm9y IG91dHB1dCAoc2VuZGluZykgdGVybWluYWwgY2hhcnMgKi8KLXN0YXRpYyBDSEFSICgqc3hpKShD SEFSKTsJLyogYW5kIGZvciBpbnB1dCAocmVjZWl2aW5nKSB0ZXJtaW5hbCBjaGFycy4gKi8KLXN0 YXRpYyBDSEFSICgqcnhpKShDSEFSKTsKLSNlbHNlIC8qIE5vdCBBTlNJIEMuLi4gKi8KLWV4dGVy biBDSEFSICgqeGxzW01BWFRDU0VUUysxXVtNQVhGQ1NFVFMrMV0pKCk7CS8qIENoYXJhY3RlciBz ZXQgKi8KLWV4dGVybiBDSEFSICgqeGxyW01BWFRDU0VUUysxXVtNQVhGQ1NFVFMrMV0pKCk7CS8q IHRyYW5zbGF0aW9uIGZ1bmN0aW9ucy4gKi8KLXN0YXRpYyBDSEFSICgqc3hvKSgpOwkJLyogTG9j YWwgdHJhbnNsYXRpb24gZnVuY3Rpb25zICovCi1zdGF0aWMgQ0hBUiAoKnJ4bykoKTsJCS8qIGZv ciBvdXRwdXQgKHNlbmRpbmcpIHRlcm1pbmFsIGNoYXJzICovCi1zdGF0aWMgQ0hBUiAoKnN4aSko KTsJCS8qIGFuZCBmb3IgaW5wdXQgKHJlY2VpdmluZykgdGVybWluYWwgY2hhcnMuICovCi1zdGF0 aWMgQ0hBUiAoKnJ4aSkoKTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotZXh0ZXJuIGludCBsYW5n dWFnZTsJCS8qIEN1cnJlbnQgbGFuZ3VhZ2UuICovCi1zdGF0aWMgaW50IGxhbmdzdjsJCS8qIEZv ciByZW1lbWJlcmluZyBsYW5ndWFnZSBzZXR0aW5nLiAqLwotZXh0ZXJuIHN0cnVjdCBjc2luZm8g ZmNzaW5mb1tdOyAvKiBGaWxlIGNoYXJhY3RlciBzZXQgaW5mby4gKi8KLWV4dGVybiBpbnQgdGNz ciwgdGNzbDsJCS8qIFRlcm1pbmFsIGNoYXJhY3RlciBzZXRzLCByZW1vdGUgJiBsb2NhbC4gKi8K LXN0YXRpYyBpbnQgdGNzOwkJCS8qIEludGVybWVkaWF0ZSAoInRyYW5zZmVyIikgY2hhcmFjdGVy IHNldC4gKi8KLXN0YXRpYyBpbnQgdGNzc2l6ZSA9IDA7CQkvKiBTaXplIG9mIHRjcyAqLwotI2lm ZGVmIFVOSUNPREUJCQkJLyogVVRGLTggc3VwcG9ydCAqLwotI2lmZGVmIENLX0FOU0lDCi1leHRl cm4gaW50ICgqeGxfdWZjW01BWEZDU0VUUysxXSkoVVNIT1JUKTsgIC8qIFVuaWNvZGUgdG8gRkNT ICovCi1leHRlcm4gVVNIT1JUICgqeGxfZmN1W01BWEZDU0VUUysxXSkoQ0hBUik7IC8qIEZDUyB0 byBVbmljb2RlICovCi1leHRlcm4gaW50ICgqeHVmKShVU0hPUlQpOwkJLyogVHJhbnNsYXRpb24g ZnVuY3Rpb24gVUNTIHRvIEZDUyAqLwotZXh0ZXJuIFVTSE9SVCAoKnhmdSkoQ0hBUik7CQkvKiBU cmFuc2xhdGlvbiBmdW5jdGlvbiBGQ1MgdG8gVUNTICovCi0jZWxzZQotZXh0ZXJuIGludCAoKnhs X3VmY1tNQVhGQ1NFVFMrMV0pKCk7Ci1leHRlcm4gVVNIT1JUICgqeGxfZmN1W01BWEZDU0VUUysx XSkoKTsKLWV4dGVybiBpbnQgKCp4dWYpKCk7Ci1leHRlcm4gVVNIT1JUICgqeGZ1KSgpOwotI2Vu ZGlmIC8qIENLX0FOU0lDICovCi0jZW5kaWYgLyogVU5JQ09ERSAqLwotI2VuZGlmIC8qIE5PQ1NF VFMgKi8KLQotLyoKLSAgV2UgZG8gbm90IG5lZWQgdG8gcGFyc2UgYW5kIHJlY29nbml6ZSBlc2Nh cGUgc2VxdWVuY2VzIGlmIHdlIGFyZSBiZWluZyBidWlsdAotICB3aXRob3V0IGNoYXJhY3Rlci1z ZXQgc3VwcG9ydCBBTkQgd2l0aG91dCBBUEMgc3VwcG9ydC4KLSovCi0jaWZkZWYgTk9DU0VUUwkJ CQkvKiBObyBjaGFyYWN0ZXIgc2V0cyAqLwotI2lmbmRlZiBDS19BUEMJCQkJLyogTm8gQVBDICov Ci0jaWZuZGVmIE5PRVNDU0VRCi0jZGVmaW5lIE5PRVNDU0VRCQkJLyogU28gbm8gZXNjYXBlIHNl cXVlbmNlIHJlY29nbml6ZXIgKi8KLSNlbmRpZiAvKiBOT0VTQ1NFUSAqLwotI2VuZGlmIC8qIENL X0FQQyAqLwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQotLyogQ2hpbGQgcHJvY2VzcyBldmVudHMg YW5kIG1lc3NhZ2VzICovCi0KLSNkZWZpbmUgQ0VWX05PICAwCQkJLyogTm8gZXZlbnQgKi8KLSNk ZWZpbmUgQ0VWX0hVUCAxCQkJLyogQ29tbXVuaWNhdGlvbnMgaGFuZ3VwICovCi0jZGVmaW5lIENF Vl9QQUQgMgkJCS8qIFguMjUgLSBjaGFuZ2UgUEFEIHBhcmFtZXRlcnMgKi8KLSNkZWZpbmUgQ0VW X0RVUCAzCQkJLyogVG9nZ2xlIGR1cGxleCAqLwotI2RlZmluZSBDRVZfQVBDIDQJCQkvKiBFeGVj dXRlIEFQQyAqLwotI2lmZGVmIFROQ09ERQotI2RlZmluZSBDRVZfTUVCSU4gNQkJCS8qIENoYW5n ZSBvZiBtZV9iaW5hcnkgKi8KLSNkZWZpbmUgQ0VWX1VCSU4gNgkJCS8qIENoYW5nZSBvZiB1X2Jp bmFyeSAqLwotI2VuZGlmIC8qIFROQ09ERSAqLwotI2RlZmluZSBDRVZfQURMIDcJCQkvKiBBdXRv ZG93bmxvYWQgKi8KLSNkZWZpbmUgQ0VWX0FVTCA4CQkJLyogQXV0b3VwbG9hZCAqLwotI2RlZmlu ZSBDRVZfVFJJIDkJCQkvKiBUcmlnZ2VyIHN0cmluZyAqLwotCi0jaWZkZWYgTk9FU0NTRVEKLSNk ZWZpbmUgY2hrYWVzKHgpIDAKLSNlbHNlCi0vKgotICBBcyBvZiBlZGl0IDE3OCwgdGhlIENPTk5F Q1QgY29tbWFuZCBza2lwcyBwYXN0IEFOU0kgZXNjYXBlIHNlcXVlbmNlcyB0bwotICBhdm9pZCB0 cmFuc2xhdGluZyB0aGUgY2hhcmFjdGVycyB3aXRoaW4gdGhlbS4gIFRoaXMgYWxsb3dzIHRoZSBD T05ORUNUCi0gIGNvbW1hbmQgdG8gd29yayBjb3JyZWN0bHkgd2l0aCBhIGhvc3QgdGhhdCB1c2Vz IGEgNy1iaXQgSVNPIDY0NiBuYXRpb25hbAotICBjaGFyYWN0ZXIgc2V0LCBpbiB3aGljaCBjaGFy YWN0ZXJzIGxpa2UgJ1snIHdvdWxkIG5vcm1hbGx5IGJlIHRyYW5zbGF0ZWQKLSAgaW50byBhY2Nl bnRlZCBjaGFyYWN0ZXJzLCBydWluaW5nIHRoZSB0ZXJtaW5hbCdzIGludGVycHJldGF0aW9uIChh bmQKLSAgZ2VuZXJhdGlvbikgb2YgZXNjYXBlIHNlcXVlbmNlcy4KLQotICBBcyBvZiBlZGl0IDE5 MCwgdGhlIENPTk5FQ1QgY29tbWFuZCByZXNwb25kcyB0byBBUEMgZXNjYXBlIHNlcXVlbmNlcwot ICAoRVNDIF8gdGV4dCBFU0MgXCkgaWYgdGhlIHVzZXIgU0VUcyBURVJNSU5BTCBBUEMgT04gb3Ig VU5DSEVDS0VELCBhbmQgdGhlCi0gIHByb2dyYW0gd2FzIGJ1aWx0IHdpdGggQ0tfQVBDIGRlZmlu ZWQuCi0KLSAgTm9uLUFOU0kvSVNPLWNvbXBsaWFudCBlc2NhcGUgc2VxdWVuY2VzIGFyZSBub3Qg aGFuZGxlZC4KLSovCi0KLS8qIFN0YXRlcyBmb3IgdGhlIGVzY2FwZS1zZXF1ZW5jZSByZWNvZ25p emVyLiAqLwotCi0jZGVmaW5lIEVTX05PUk1BTCAwCQkJLyogTm9ybWFsLCBub3QgaW4gYW4gZXNj YXBlIHNlcXVlbmNlICovCi0jZGVmaW5lIEVTX0dPVEVTQyAxCQkJLyogQ3VycmVudCBjaGFyYWN0 ZXIgaXMgRVNDICovCi0jZGVmaW5lIEVTX0VTQ1NFUSAyCQkJLyogSW5zaWRlIGFuIGVzY2FwZSBz ZXF1ZW5jZSAqLwotI2RlZmluZSBFU19HT1RDU0kgMwkJCS8qIEluc2lkZSBhIGNvbnRyb2wgc2Vx dWVuY2UgKi8KLSNkZWZpbmUgRVNfU1RSSU5HIDQJCQkvKiBJbnNpZGUgRENTLE9TQyxQTSwgb3Ig QVBDIHN0cmluZyAqLwotI2RlZmluZSBFU19URVJNSU4gNQkJCS8qIDFzdCBjaGFyIG9mIHN0cmlu ZyB0ZXJtaW5hdG9yICovCi0KLS8qCi0gIEFOU0kgZXNjYXBlIHNlcXVlbmNlIGhhbmRsaW5nLiAg T25seSB0aGUgNy1iaXQgZm9ybSBpcyB0cmVhdGVkLCBiZWNhdXNlCi0gIHRyYW5zbGF0aW9uIGlz IG5vdCBhIHByb2JsZW0gaW4gdGhlIDgtYml0IGVudmlyb25tZW50LCBpbiB3aGljaCBhbGwgR0wK LSAgY2hhcmFjdGVycyBhcmUgQVNDSUkgYW5kIG5vIHRyYW5zbGF0aW9uIHRha2VzIHBsYWNlLiAg U28gd2UgZG9uJ3QgY2hlY2sKLSAgZm9yIHRoZSA4LWJpdCBzaW5nbGUtY2hhcmFjdGVyIHZlcnNp b25zIG9mIENTSSwgRENTLCBPU0MsIEFQQywgb3IgU1QuCi0gIEhlcmUgaXMgdGhlIEFOU0kgc2Vx dWVuY2UgcmVjb2duaXplciBzdGF0ZSB0YWJsZSwgZm9sbG93ZWQgYnkgdGhlIGNvZGUKLSAgdGhh dCBpbXBsZW1lbnRzIGl0LgotCi0gIERlZmluaXRpb25zOgotICAgIENBTiA9IENhbmNlbCAgICAg ICAgICAgICAgICAgICAgICAgMDEvMDggICAgICAgICBDdHJsLVgKLSAgICBTVUIgPSBTdWJzdGl0 dXRlICAgICAgICAgICAgICAgICAgIDAxLzEwICAgICAgICAgQ3RybC1aCi0gICAgRENTID0gRGV2 aWNlIENvbnRyb2wgU2VxdWVuY2UgICAgICAwMS8xMSAwNS8wMCAgIEVTQyBQCi0gICAgQ1NJID0g Q29udHJvbCBTZXF1ZW5jZSBJbnRyb2R1Y2VyICAwMS8xMSAwNS8xMSAgIEVTQyBbCi0gICAgU1Qg ID0gU3RyaW5nIFRlcm1pbmF0b3IgICAgICAgICAgICAwMS8xMSAwNS8xMiAgIEVTQyBcCi0gICAg T1NDID0gT3BlcmF0aW5nIFN5c3RlbSBDb21tYW5kICAgICAwMS8xMSAwNS8xMyAgIEVTQyBdCi0g ICAgUE0gID0gUHJpdmFjeSBNZXNzYWdlICAgICAgICAgICAgICAwMS8xMSAwNS8xNCAgIEVTQyBe Ci0gICAgQVBDID0gQXBwbGljYXRpb24gUHJvZ3JhbSBDb21tYW5kICAwMS8xMSAwNS8xNSAgIEVT QyBfCi0KLSAgQU5TSSBlc2NhcGUgc2VxdWVuY2UgcmVjb2duaXplcjoKLQotICAgIFN0YXRlICAg IElucHV0ICBOZXcgU3RhdGUgIDsgQ29tbWVudGFyeQotCi0gICAgTk9STUFMICAgKHN0YXJ0KSAg ICAgICAgICAgOyBTdGFydCBpbiBOT1JNQUwgc3RhdGUKLQotICAgIChhbnkpICAgIENBTiAgICBO T1JNQUwgICAgIDsgXlggY2FuY2VscwotICAgIChhbnkpICAgIFNVQiAgICBOT1JNQUwgICAgIDsg XlogY2FuY2VscwotCi0gICAgTk9STUFMICAgRVNDICAgIEdPVEVTQyAgICAgOyBCZWdpbiBlc2Nh cGUgc2VxdWVuY2UKLSAgICBOT1JNQUwgICBvdGhlciAgICAgICAgICAgICA7IE5PUk1BTCBjb250 cm9sIG9yIGdyYXBoaWMgY2hhcmFjdGVyCi0KLSAgICBHT1RFU0MgICBFU0MgICAgICAgICAgICAg ICA7IFN0YXJ0IGFnYWluCi0gICAgR09URVNDICAgWyAgICAgIEdPVENTSSAgICAgOyBDU0kKLSAg ICBHT1RFU0MgICBQICAgICAgU1RSSU5HICAgICA7IERDUyBpbnRyb2R1Y2VyLCBjb25zdW1lIHRo cm91Z2ggU1QKLSAgICBHT1RFU0MgICBdICAgICAgU1RSSU5HICAgICA7IE9TQyBpbnRyb2R1Y2Vy LCBjb25zdW1lIHRocm91Z2ggU1QKLSAgICBHT1RFU0MgICBeICAgICAgU1RSSU5HICAgICA7IFBN ICBpbnRyb2R1Y2VyLCBjb25zdW1lIHRocm91Z2ggU1QKLSAgICBHT1RFU0MgICBfICAgICAgU1RS SU5HICAgICA7IEFQQyBpbnRyb2R1Y2VyLCBjb25zdW1lIHRocm91Z2ggU1QKLSAgICBHT1RFU0Mg ICAwLi5+ICAgTk9STUFMICAgICA7IDAzLzAwIHRocm91Z2ggMTcvMTQgPSBGaW5hbCBjaGFyYWN0 ZXIKLSAgICBHT1RFU0MgICBvdGhlciAgRVNDU0VRICAgICA7IEludGVybWVkaWF0ZSBvciBpZ25v cmVkIGNvbnRyb2wgY2hhcmFjdGVyCi0KLSAgICBFU0NTRVEgICBFU0MgICAgR09URVNDICAgICA7 IFN0YXJ0IGFnYWluCi0gICAgRVNDU0VRICAgMC4ufiAgIE5PUk1BTCAgICAgOyAwMy8wMCB0aHJv dWdoIDE3LzE0ID0gRmluYWwgY2hhcmFjdGVyCi0gICAgRVNDU0VRICAgb3RoZXIgICAgICAgICAg ICAgOyBJbnRlcm1lZGlhdGUgb3IgaWdub3JlZCBjb250cm9sIGNoYXJhY3RlcgotCi0gICAgR09U Q1NJICAgRVNDICAgIEdPVEVTQyAgICAgOyBTdGFydCBhZ2FpbgotICAgIEdPVENTSSAgIEAuLn4g ICBOT1JNQUwgICAgIDsgMDQvMDAgdGhyb3VnaCAxNy8xNCA9IEZpbmFsIGNoYXJhY3RlcgotICAg IEdPVENTSSAgIG90aGVyICAgICAgICAgICAgIDsgSW50ZXJtZWRpYXRlIGNoYXIgb3IgaWdub3Jl ZCBjb250cm9sIGNoYXIKLQotICAgIFNUUklORyAgIEVTQyAgICBURVJNSU4gICAgIDsgTWF5YmUg aGF2ZSBTVAotICAgIFNUUklORyAgIG90aGVyICAgICAgICAgICAgIDsgQ29uc3VtZSBhbGwgZWxz ZQotCi0gICAgVEVSTUlOICAgXCAgICAgIE5PUk1BTCAgICAgOyBFbmQgb2Ygc3RyaW5nCi0gICAg VEVSTUlOICAgb3RoZXIgIFNUUklORyAgICAgOyBTdGlsbCBpbiBzdHJpbmcKLSovCi0vKgotICBj aGthZXMoKSAtLSBDaGVjayBBTlNJIEVzY2FwZSBTZXF1ZW5jZS4KLSAgQ2FsbCB3aXRoIEVBQ0gg Y2hhcmFjdGVyIGluIGlucHV0IHN0cmVhbS4KLSAgU2V0cyBnbG9iYWwgaW5lc2MgdmFyaWFibGUg YWNjb3JkaW5nIHRvIGVzY2FwZSBzZXF1ZW5jZSBzdGF0ZS4KLSAgUmV0dXJucyAwIG5vcm1hbGx5 LCAxIGlmIGFuIEFQQyBzZXF1ZW5jZSBpcyB0byBiZSBleGVjdXRlZC4KLSovCi1pbnQKLSNpZmRl ZiBDS19BTlNJQwotY2hrYWVzKGNoYXIgYykKLSNlbHNlCi1jaGthZXMoYykgY2hhciBjOwotI2Vu ZGlmIC8qIENLX0FOU0lDICovCi0vKiBjaGthZXMgKi8gewotCi0gICAgb2xkZXNjID0gaW5lc2M7 CQkJLyogUmVtZW1iZXIgcHJldmlvdXMgc3RhdGUgKi8KLSAgICBpZiAoYyA9PSBDQU4gfHwgYyA9 PSBTVUIpCQkvKiBDQU4gYW5kIFNVQiBjYW5jZWwgYW55IHNlcXVlbmNlICovCi0gICAgICBpbmVz YyA9IEVTX05PUk1BTDsKLSAgICBlbHNlCQkJCS8qIE90aGVyd2lzZSAqLwotICAgICAgc3dpdGNo IChpbmVzYykgewkJCS8qIGVudGVyIHN0YXRlIHN3aXRjaGVyICovCi0KLQljYXNlIEVTX05PUk1B TDoJCQkvKiBOT1JNQUwgc3RhdGUgKi8KLQkgIGlmIChjID09IEVTQykJCQkvKiBHb3QgYW4gRVND ICovCi0JICAgIGluZXNjID0gRVNfR09URVNDOwkJLyogQ2hhbmdlIHN0YXRlIHRvIEdPVEVTQyAq LwotCSAgYnJlYWs7CQkJLyogT3RoZXJ3aXNlIHN0YXkgaW4gTk9STUFMIHN0YXRlICovCi0KLQlj YXNlIEVTX0dPVEVTQzoJCQkvKiBHT1RFU0Mgc3RhdGUgKi8KLQkgIGlmIChjID09ICdbJykJCQkv KiBMZWZ0IGJyYWNrZXQgYWZ0ZXIgRVNDIGlzIENTSSAqLwotCSAgICBpbmVzYyA9IEVTX0dPVENT STsJCS8qIENoYW5nZSB0byBHT1RDU0kgc3RhdGUgKi8KLQkgIGVsc2UgaWYgKGMgPT0gJ1AnIHx8 IChjID4gMDEzNCAmJiBjIDwgMDE0MCkpIHsgLyogUCwgWywgXiwgb3IgXyAqLwotCSAgICAgIGlu ZXNjID0gRVNfU1RSSU5HOwkvKiBTd2l0Y2ggdG8gU1RSSU5HLWFic29ycHRpb24gc3RhdGUgKi8K LSNpZmRlZiBDS19BUEMKLQkgICAgICBpZiAoYyA9PSAnXycgJiYgcGlkID09IDAgJiYgLyogQVBD IGhhbmRsZWQgaW4gY2hpbGQgb25seSAqLwotCQkgIChhcGNzdGF0dXMgJiBBUENfT04pKSB7IC8q IGFuZCBvbmx5IGlmIG5vdCBkaXNhYmxlZC4gKi8KLQkJICBkZWJ1ZyhGMTAwLCJDT05ORUNUIEFQ QyBiZWdpbiIsIiIsMCk7Ci0JCSAgYXBjYWN0aXZlID0gQVBDX1JFTU9URTsgLyogU2V0IEFQQy1B Y3RpdmUgZmxhZyAqLwotCQkgIGFwY2xlbmd0aCA9IDA7CS8qIGFuZCByZXNldCBBUEMgYnVmZmVy IHBvaW50ZXIgKi8KLQkgICAgICB9Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0JICB9IGVsc2UgaWYg KGMgPiAwNTcgJiYgYyA8IDAxNzcpIC8qIEZpbmFsIGNoYXJhY3RlciAnMCcgdGhydSAnficgKi8K LQkgICAgaW5lc2MgPSBFU19OT1JNQUw7CQkvKiBCYWNrIHRvIG5vcm1hbCAqLwotCSAgZWxzZSBp ZiAoYyAhPSBFU0MpCQkvKiBFU0MgaW4gYW4gZXNjYXBlIHNlcXVlbmNlLi4uICovCi0JICAgIGlu ZXNjID0gRVNfRVNDU0VROwkJLyogc3RhcnRzIGEgbmV3IGVzY2FwZSBzZXF1ZW5jZSAqLwotCSAg YnJlYWs7CQkJLyogSW50ZXJtZWRpYXRlIG9yIGlnbm9yZWQgY3RybCBjaGFyICovCi0KLQljYXNl IEVTX0VTQ1NFUToJCQkvKiBFU0NTRVEgLS0gaW4gYW4gZXNjYXBlIHNlcXVlbmNlICovCi0JICBp ZiAoYyA+IDA1NyAmJiBjIDwgMDE3NykJLyogRmluYWwgY2hhcmFjdGVyICcwJyB0aHJ1ICd+JyAq LwotCSAgICBpbmVzYyA9IEVTX05PUk1BTDsJCS8qIFJldHVybiB0byBOT1JNQUwgc3RhdGUuICov Ci0JICBlbHNlIGlmIChjID09IEVTQykJCS8qIEVTQyAuLi4gKi8KLQkgICAgaW5lc2MgPSBFU19H T1RFU0M7CQkvKiBzdGFydHMgYSBuZXcgZXNjYXBlIHNlcXVlbmNlICovCi0JICBicmVhazsJCQkv KiBJbnRlcm1lZGlhdGUgb3IgaWdub3JlZCBjdHJsIGNoYXIgKi8KLQotCWNhc2UgRVNfR09UQ1NJ OgkJCS8qIEdPVENTSSAtLSBJbiBhIGNvbnRyb2wgc2VxdWVuY2UgKi8KLQkgIGlmIChjID4gMDc3 ICYmIGMgPCAwMTc3KQkvKiBGaW5hbCBjaGFyYWN0ZXIgJ0AnIHRocnUgJ34nICovCi0JICAgIGlu ZXNjID0gRVNfTk9STUFMOwkJLyogUmV0dXJuIHRvIE5PUk1BTC4gKi8KLQkgIGVsc2UgaWYgKGMg PT0gRVNDKQkJLyogRVNDIC4uLiAqLwotCSAgICBpbmVzYyA9IEVTX0dPVEVTQzsJCS8qIHN0YXJ0 cyBvdmVyLiAqLwotCSAgYnJlYWs7CQkJLyogSW50ZXJtZWRpYXRlIG9yIGlnbm9yZWQgY3RybCBj aGFyICovCi0KLQljYXNlIEVTX1NUUklORzoJCQkvKiBJbnNpZGUgYSBzdHJpbmcgKi8KLQkgIGlm IChjID09IEVTQykJCQkvKiBFU0MgbWF5IGJlIDFzdCBjaGFyIG9mIHRlcm1pbmF0b3IgKi8KLQkg ICAgaW5lc2MgPSBFU19URVJNSU47CQkvKiBHbyBzZWUuICovCi0jaWZkZWYgQ0tfQVBDCi0JICBl bHNlIGlmIChhcGNhY3RpdmUgJiYgKGFwY2xlbmd0aCA8IGFwY2J1ZmxlbikpIC8qIElmIGluIEFQ QywgKi8KLQkgICAgYXBjYnVmW2FwY2xlbmd0aCsrXSA9IGM7CS8qIGRlcG9zaXQgdGhpcyBjaGFy YWN0ZXIuICovCi0JICBlbHNlIHsJCQkvKiBCdWZmZXIgb3ZlcnJ1biAqLwotCSAgICAgIGFwY2Fj dGl2ZSA9IDA7CQkvKiBEaXNjYXJkIHdoYXQgd2UgZ290ICovCi0JICAgICAgYXBjbGVuZ3RoID0g MDsJCS8qIGFuZCBnbyBiYWNrIHRvIG5vcm1hbCAqLwotCSAgICAgIGFwY2J1ZlswXSA9IDA7CQkv KiBOb3QgcHJldHR5LCBidXQgd2hhdCBlbHNlICovCi0JICAgICAgaW5lc2MgPSBFU19OT1JNQUw7 CS8qIGNhbiB3ZSBkbz8gIChTVCBtaWdodCBub3QgY29tZSkgKi8KLQkgIH0KLSNlbmRpZiAvKiBD S19BUEMgKi8KLQkgIGJyZWFrOwkJCS8qIEFic29yYiBhbGwgb3RoZXIgY2hhcmFjdGVycy4gKi8K LQotCWNhc2UgRVNfVEVSTUlOOgkJCS8qIE1heSBoYXZlIGEgc3RyaW5nIHRlcm1pbmF0b3IgKi8K LQkgIGlmIChjID09ICdcXCcpIHsJCS8qIHdoaWNoIG11c3QgYmUgYmFja3NsYXNoICovCi0JICAg ICAgaW5lc2MgPSBFU19OT1JNQUw7CS8qIElmIHNvLCBiYWNrIHRvIE5PUk1BTCAqLwotI2lmZGVm IENLX0FQQwotCSAgICAgIGlmIChhcGNhY3RpdmUpIHsJCS8qIElmIGl0IHdhcyBhbiBBUEMgc3Ry aW5nLCAqLwotCQkgIGRlYnVnKEYxMDEsIkNPTk5FQ1QgQVBDIHRlcm1pbmF0ZWQiLCIiLGMpOwot CQkgIGFwY2J1ZlthcGNsZW5ndGhdID0gTlVMOyAvKiB0ZXJtaW5hdGUgaXQgYW5kIHRoZW4gLi4u ICovCi0JCSAgcmV0dXJuKDEpOwotCSAgICAgIH0KLSNlbmRpZiAvKiBDS19BUEMgKi8KLQkgIH0g ZWxzZSB7CQkJLyogT3RoZXJ3aXNlICovCi0JICAgICAgaW5lc2MgPSBFU19TVFJJTkc7CS8qIEJh Y2sgdG8gc3RyaW5nIGFic29ycHRpb24uICovCi0jaWZkZWYgQ0tfQVBDCi0JICAgICAgaWYgKGFw Y2FjdGl2ZSAmJiAoYXBjbGVuZ3RoKzEgPCBhcGNidWZsZW4pKSB7IC8qIEluIEFQQyBzdHJpbmcg Ki8KLQkJICBhcGNidWZbYXBjbGVuZ3RoKytdID0gRVNDOyAvKiBkZXBvc2l0IHRoZSBFc2MgY2hh cmFjdGVyICovCi0JCSAgYXBjYnVmW2FwY2xlbmd0aCsrXSA9IGM7ICAgLyogYW5kIHRoaXMgY2hh cmFjdGVyIHRvbyAqLwotCSAgICAgIH0KLSNlbmRpZiAvKiBDS19BUEMgKi8KLQkgIH0KLSAgICAg IH0KLSAgICByZXR1cm4oMCk7Ci19Ci0jZW5kaWYgLyogTk9FU0NTRVEgKi8KLQotLyogQ29ubmVj dCBzdGF0ZSBwYXJlbnQvY2hpbGQgY29tbXVuaWNhdGlvbiBzaWduYWwgaGFuZGxlcnMgKi8KLQot LyogUm91dGluZXMgdXNlZCBieSB0aGUgY2hpbGQgcHJvY2VzcyAqLwotCi1zdGF0aWMgaW50Ci1w aXBlbXNnKG4pIGludCBuOyB7CQkJLyogU2VuZCBtZXNzYWdlIElEIHRvIHBhcmVudCAqLwotICAg IGludCBjb2RlID0gbiAmIDI1NTsKLSAgICByZXR1cm4od3JpdGUoeHBpcGVbMV0sICZjb2RlLCBz aXplb2YoY29kZSkpKTsKLX0KLQotLyogRW52aXJvbm1lbnQgcG9pbnRlciBmb3IgQ0tfRk9SS19T SUcgc2lnbmFsIGhhbmRsaW5nIGluIGNoaWxkLi4uICovCi0KLSNpZmRlZiBDS19QT1NJWF9TSUcK LXN0YXRpYyBzaWdqbXBfYnVmIHNpZ19lbnY7Ci0jZWxzZQotc3RhdGljIGptcF9idWYgc2lnX2Vu djsKLSNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KLQotc3RhdGljIFNJR1RZUAkJCQkvKiBDS19G T1JLX1NJRyBoYW5kbGluZyBpbiBjaGlsZCAuLi4gKi8KLWZvcmtpbnQoZm9vKSBpbnQgZm9vOyB7 Ci0gICAgLyogSXQgaXMgaW1wb3J0YW50IHRvIGRpc2FibGUgQ0tfRk9SS19TSUcgYmVmb3JlIGxv bmdqbXAgKi8KLSAgICBzaWduYWwoQ0tfRk9SS19TSUcsIFNJR19JR04pOwkvKiBTZXQgdG8gaWdu b3JlIENLX0ZPUktfU0lHICovCi0gICAgZGVidWcoRjEwMCwiQ09OTkVDVCBmb3JraW50IC0gQ0tf Rk9SS19TSUciLCAiIiwgMCk7Ci0gICAgLyogRm9yY2UgcmV0dXJuIGZyb20gY2tfc25kbXNnKCkg Ki8KLSAgICBja2xvbmdqbXAoc2lnX2VudiwgMSk7Ci0gICAgLyogTk9UUkVBQ0hFRCAqLwotfQot Ci1zdGF0aWMgVk9JRAotY2tfc25kbXNnKCkgewkJCQkvKiBFeGVjdXRlZCBieSBjaGlsZCBvbmx5 IC4uLiAqLwotICAgIGRlYnVnKEYxMDAsIkNPTk5FQ1QgY2tfc25kbXNnLCBhY3RpdmUiLCAiIiwg YWN0aXZlKTsKLSAgICBpZiAoCi0jaWZkZWYgQ0tfUE9TSVhfU0lHCi0Jc2lnc2V0am1wKHNpZ19l bnYsMSkKLSNlbHNlCi0Jc2V0am1wKHNpZ19lbnYpCi0jZW5kaWYgLyogQ0tfUE9TSVhfU0lHICov Ci0JPT0gMCkgewotCWRlYnVnKEYxMDAsIkNPTk5FQ1QgY2tfc25kbXNnIHNpZ25hbGluZyBwYXJl bnQiLCIiLDApOwotICAgICAgICBzaWduYWwoQ0tfRk9SS19TSUcsIGZvcmtpbnQpOwkvKiBTZXQg dXAgc2lnbmFsIGhhbmRsZXIgKi8KLSAgICAgICAga2lsbChwYXJlbnRfaWQsIENLX0ZPUktfU0lH KTsJLyogS2ljayB0aGUgcGFyZW50ICovCi0JZGVidWcoRjEwMCwiY2tfc25kbXNnIHBhdXNpbmci LCIiLDApOwotICAgICAgICBmb3IgKDs7KSBwYXVzZSgpOwkJLyogV2FpdCBmb3IgQ0tfRk9SS19T SUcgb3IgU0lHS0lMTCAqLwotCS8qIE5PVFJFQUNIRUQgKi8KLSAgICB9Ci0gICAgLyogV2UgY29t ZSBoZXJlIGZyb20gZm9ya2ludCgpIHZpYSBbc2lnXWNrbG9uZ2ptcChzaWdfZW52LDEpICovCi0g ICAgZGVidWcoRjEwMCwiQ09OTkVDVCBja19zbmRtc2cgaXMgcGFyZW50IC0gcmV0dXJuaW5nIiwg IiIsIDApOwotfQotCi0vKiBSb3V0aW5lcyB1c2VkIGJ5IHRoZSBwYXJlbnQgcHJvY2VzcyAqLwot Ci0jaWZkZWYgQ0tfUE9TSVhfU0lHCQkgLyogRW52aXJvbm1lbnQgcG9pbnRlciBmb3IgQ09OTkVD VCBlcnJvcnMgKi8KLXN0YXRpYyBzaWdqbXBfYnVmIGNvbl9lbnY7Ci0jZWxzZQotc3RhdGljIGpt cF9idWYgY29uX2VudjsKLSNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KLS8qCi0gIHBpcGVpbnQo KSBoYW5kbGVzIENLX0ZPUktfU0lHIHNpZ25hbHMgZnJvbSB0aGUgbG93ZXIgKHBvcnQpIGZvcmsu Ci0gIEl0IHJlYWRzIGEgZnVuY3Rpb24gY29kZSBmcm9tIHRoZSBwaXBlIHRoYXQgY29ubmVjdHMg dGhlIHR3byBmb3JrcywKLSAgdGhlbiByZWFkcyBhZGRpdGlvbmFsIGRhdGEgZnJvbSB0aGUgcGlw ZSwgdGhlbiBoYW5kbGVzIGl0LgotKi8KLXN0YXRpYyBTSUdUWVAKLXBpcGVpbnQoYXJnKSBpbnQg YXJnOyB7CQkJLyogRHVtbXkgYXJndW1lbnQgKi8KLSAgICBpbnQgY29kZSwgY3gsIHgsIGkgLyog LCBuICovIDsKLQotI2lmbmRlZiBOT0NDVFJBUAotICAgIGV4dGVybiBja2ptcGJ1ZiBjbWpidWY7 Ci0jZW5kaWYgLyogTk9DQ1RSQVAgKi8KLSAgICAvKgotICAgICAgSU1QT1JUQU5UOiBBdCB0aGlz IHBvaW50LCB0aGUgY2hpbGQgZm9yayBpcyB3YWl0aW5nIGZvciBDS19GT1JLX1NJRwotICAgICAg KGV2ZW50dWFsbHkgZm9yIFNJR0tJTEwpIGluc2lkZSBvZiBja19zbmRtc2coKS4gIFNvIHdlIGNh bid0IGdldCBhbnkKLSAgICAgIHN1YnNlcXVlbnQgQ0tfRk9SS19TSUcgZnJvbSBjaGlsZCBiZWZv cmUgd2Ugc2VuZCBpdCBDS19GT1JLX1NJRy4KLSAgICAqLwotICAgIHNpZ25hbChDS19GT1JLX1NJ RywgU0lHX0lHTik7CS8qIElnbm9yZSBDS19GT1JLX1NJRyBub3cgKi8KLSAgICBkZWJ1ZyhGMTAx LCJDT05ORUNUIHBpcGVpbnQgYXJnIiwiIixhcmcpOwotCi0gICAgcmVhZCh4cGlwZVswXSwgJmNv ZGUsIHNpemVvZihjb2RlKSk7IC8qIEdldCBmdW5jdGlvbiBjb2RlIGZyb20gcGlwZSAqLwotICAg IGRlYnVnKEYxMDEsIkNPTk5FQ1QgcGlwZWludCBjb2RlIiwiIixjb2RlKTsKLSAgICBjeCA9IGNv ZGUgJiAyNTU7CQkJLyogOC1iaXQgdmVyc2lvbiBvZiBmdW5jdGlvbiBjb2RlICovCi0KLSNpZm5k ZWYgTk9DQ1RSQVAKLSNpZm5kZWYgTk9JQ1AKLSNkZWZpbmUgVVNFQ0NKTVBCVUYKLSNlbmRpZiAv KiBOT0lDUCAqLwotI2VuZGlmIC8qIE5PQ0NUUkFQICovCi0vKgotICBSZWFkIGluZm8gcGFzc2Vk IGJhY2sgdXAgdG8gdXMgYnkgdGhlIGxvd2VyIGZvcmssIGRlcGVuZGluZyBvbiB0aGUgZnVuY3Rp b24KLSAgcmVxdWVzdGVkLiAgVGhlIHNhbWUgbnVtYmVyIG9mIGl0ZW1zIG11c3QgYmUgcmVhZCBm cm9tIHRoZSBwaXBlIGluIHRoZSBzYW1lCi0gIG9yZGVyIGFzIHRoZSBsb3dlciBmb3JrIHB1dCB0 aGVtIHRoZXJlLiAgVHJ5aW5nIHRvIHJlYWQgc29tZXRoaW5nIHRoYXQncyBub3QKLSAgdGhlcmUg bWFrZXMgdGhlIHByb2dyYW0gaGFuZyB1bmludGVycnVwdGlibHkuICBQYXkgY2xvc2UgYXR0ZW50 aW9uIC0tIG5vdGljZQotICBob3cgd2UgZmFsbCB0aHJvdWdoIHNvbWUgb2YgdGhlIGNhc2VzIHJh dGhlciB0aGFuIGJyZWFrOyB0aGF0J3MgZGVsaWJlcmF0ZS4KLSovCi0gICAgc3dpdGNoIChjeCkg ewotI2lmZGVmIENLX1RSSUdHRVIKLSAgICAgIGNhc2UgQ0VWX1RSSToJCQkvKiBUcmlnZ2VyIHN0 cmluZyAqLwotCWRlYnVnKEYxMDAsIkNPTk5FQ1QgdHJpZ2dlciIsIiIsMCk7Ci0JcmVhZCh4cGlw ZVswXSwgKGNoYXIgKikmaSwgc2l6ZW9mKGkpKTsgLyogVHJpZ2dlciBpbmRleCAqLwotCWRlYnVn KEYxMDEsIkNPTk5FQ1QgdHJpZ2dlciBpbmRleCIsIiIsaSk7Ci0JbWFrZXN0cigmdHJpZ2dlcnZh bCx0dF90cmlnZ2VyW2ldKTsgLyogTWFrZSBhIGNvcHkgb2YgdGhlIHRyaWdnZXIgKi8KLQlkZWJ1 ZyhGMTEwLCJDT05ORUNUIHRyaWdnZXJ2YWwiLHRyaWdnZXJ2YWwsMCk7Ci0JcmVhZCh4cGlwZVsw XSwgKGNoYXIgKikmaWJjLCBzaXplb2YoaWJjKSk7IC8qIENvcHkgY2hpbGQncyAqLwotCWRlYnVn KEYxMDEsIkNPTk5FQ1QgdHJpZ2dlciBpYmMgKHVwcGVyKSIsIiIsaWJjKTsgLyogaW5wdXQgYnVm ZmVyLiAqLwotCWlmIChpYmMgPiAwKSB7Ci0JICAgIHJlYWQoeHBpcGVbMF0sIChjaGFyICopJmli cCwgc2l6ZW9mKGlicCkpOwotCSAgICByZWFkKHhwaXBlWzBdLCBpYnAsIGliYyk7Ci0JfQotCS8q IEZhbGwgdGhydS4uLiAqLwotCi0jZW5kaWYgLyogQ0tfVFJJR0dFUiAqLwotCi0gICAgICBjYXNl IENFVl9IVVA6Ci0vKgotICBUaGUgQ0VWX0hVUCBjYXNlIGlzIGV4ZWN1dGVkIHdoZW4gdGhlIG90 aGVyIHNpZGUgaGFzIGh1bmcgdXAgb24gdXMuCi0gIEluIHNvbWUgY2FzZXMsIHRoaXMgaGFwcGVu cyBiZWZvcmUgd2UgaGF2ZSBoYWQgYSBjaGFuY2UgdG8gZXhlY3V0ZSB0aGUKLSAgc2V0am1wKGNv bl9lbnYsMSkgY2FsbCwgYW5kIGluIHRoYXQgY2FzZSB3ZSdkIGJldHRlciBub3QgdGFrZSB0aGUg bG9uZ2ptcCEKLSAgQSBnb29kIGV4YW1wbGUgaXMgd2hlbiB5b3UgVEVMTkVUIHRvIHBvcnQgMTMg b24gdGhlIGxvY2FsIGhvc3Q7IGl0IHByaW50cwotICBpdHMgYXNjdGltZSgpIHN0cmluZyAoMjYg Y2hhcnMpIGFuZCB0aGVuIGNsb3NlcyB0aGUgY29ubmVjdGlvbi4KLSovCi0jaWZkZWYgQ0tfVFJJ R0dFUgotCWlmIChjeCA9PSBDRVZfVFJJKQotCSAgc2p2YWwgPSBDRVZfVFJJOwkJLyogU2V0IGds b2JhbCB2YXJpYWJsZS4gKi8KLQllbHNlCi0jZW5kaWYgLyogQ0tfVFJJR0dFUiAqLwotCSAgc2p2 YWwgPSBDRVZfSFVQOwotCWlmIChqYnNldCkgewkJCS8qIGptcF9idWYgaXMgaW5pdGlhbGl6ZWQg Ki8KLQkgICAgY2tsb25nam1wKGNvbl9lbnYsc2p2YWwpOwkvKiBzbyBkbyB0aGUgcmlnaHQgdGhp bmcuICovCi0JfSBlbHNlIHsKLQkgICAgaW50IHggPSAwOwotI2lmZGVmIFVTRUNDSk1QQlVGCi0J ICAgIC8qIGptcF9idWYgbm90IGluaXQnZCB5ZXQgYSBjbG9zZSBhcHByb3hpbWF0aW9uLi4uICov Ci0jaWZkZWYgQ0tfVFJJR0dFUgotCSAgICBpZiAoY3ggPT0gQ0VWX0hVUCkKLSNlbmRpZiAvKiBD S19UUklHR0VSICovCi0JICAgICAgdHRjbG9zKDApOwkJLyogQ2xvc2Ugb3VyIGVuZCBvZiB0aGUg Y29ubmVjdGlvbiAqLwotCSAgICBpZiAocGlkKSB7Ci0JCWRlYnVnKEYxMDEsIkNPTk5FQ1QgdHJp Z2dlciBraWxsaW5nIHBpZCIsIiIscGlkKTsKLSNpZmRlZiBCRU9TT1JCRUJPWAotCQl7Ci0JCSAg ICBsb25nIHJldF92YWw7Ci0JCSAgICB4ID0ga2lsbChwaWQsU0lHS0lMTFRIUik7CS8qIEtpbGwg bG93ZXIgZm9yayAqLwotCQkgICAgd2FpdF9mb3JfdGhyZWFkIChwaWQsICZyZXRfdmFsKTsKLQkJ fQotI2Vsc2UKLSNpZmRlZiBQbGFuOQotCQl4ID0ga2lsbChwaWQsIFNJR0tJTEwpOyAvKiAoc2hv dWxkIGFsd2F5cyB1c2UgdGhpcyByZWFsbHkpICovCi0jZWxzZQotCQl4ID0ga2lsbChwaWQsOSk7 CS8qIEtpbGwgbG93ZXIgZm9yayAoaGlzdG9yeSkgKi8KLSNlbmRpZiAvKiBQbGFuOSAqLwotCQl3 YWl0KChXQUlUX1QgKikwKTsJLyogV2FpdCB0aWxsIGdvbmUuICovCi0JCWlmICh4IDwgMCkgewot CQkgICAgcHJpbnRmKCJFUlJPUjogRmFpbHVyZSB0byBraWxsIHBpZCAlbGQ6ICVzLCBlcnJubz0l ZFxuIiwKLQkJCSAgIChsb25nKSBwaWQsIGNrX2VycnN0cigpLCBlcnJubyk7Ci0JCSAgICBkZWJ1 ZyhGMTExLCJDT05ORUNUIGVycm9yIGtpbGxpbmcgc3RhbGUgcGlkIiwKLQkJCSAgY2tfZXJyc3Ry KCksZXJybm8pOwotCQl9Ci0JCXBpZCA9IChQSURfVCkgMDsKLSNlbmRpZiAvKiBCRU9TT1JCRUJP WCAqLwotCSAgICB9Ci0JICAgIGNvbnJlcygpOwkJCS8qIFJlc2V0IHRoZSBjb25zb2xlLiAqLwot CSAgICBpZiAoIXF1aWV0KSB7Ci0JCXByaW50ZigiXHJcbihCYWNrIGF0ICVzKVxyXG4iLAotCQkg ICAgICAgKm15aG9zdCA/IG15aG9zdCA6Ci0jaWZkZWYgVU5JWAotCQkgICAgICAgImxvY2FsIFVO SVggc3lzdGVtIgotI2Vsc2UKLQkJICAgICAgICJsb2NhbCBzeXN0ZW0iCi0jZW5kaWYgLyogVU5J WCAqLwotCQkgICAgICAgKTsKLQkgICAgfQotCSAgICB3aGF0ID0gV19OT1RISU5HOwkJLyogU28g Y29uc29sZSBtb2RlcyBhcmUgc2V0IHJpZ2h0LiAqLwotCSAgICBwcmludGYoIlxyXG4iKTsJCS8q IHByZXZlbnQgcHJvbXB0LXN0b21waW5nICovCi0JICAgIGNrbG9uZ2ptcChjbWpidWYsMCk7CS8q IERvIHdoYXQgdGhlIEN0cmwtQyBoYW5kbGVyIGRvZXMgKi8KLSNlbHNlCi0JICAgIHByaW50Zigi XHJcbkxvbmdqdW1wIGZhaWx1cmUgLSBmYXRhbFxyXG4iKTsKLQkgICAgZG9leGl0KEdPT0RfRVhJ VCwtMSk7CS8qIEJldHRlciB0aGFuIGR1bXBpbmcgY29yZS4uLiAqLwotI2VuZGlmIC8qIFVTRUND Sk1QQlVGICovCi0JfQotI2lmZGVmIFVTRUNDSk1QQlVGCi0jdW5kZWYgVVNFQ0NKTVBCVUYKLSNl bmRpZiAvKiBVU0VDQ0pNUEJVRiAqLwotCi0gICAgICBjYXNlIENFVl9EVVA6CQkJLyogQ2hpbGQg c2VuZHMgZHVwbGV4IGNoYW5nZSAqLwotCXJlYWQoeHBpcGVbMF0sIChjaGFyICopJmR1cGxleCwg c2l6ZW9mKGR1cGxleCkpOwotCWRlYnVnKEYxMDEsIkNPTk5FQ1QgcGlwZWludCBkdXBsZXgiLCIi LGR1cGxleCk7Ci0JYnJlYWs7Ci0jaWZkZWYgVE5DT0RFCi0gICAgICBjYXNlIENFVl9NRUJJTjoJ CQkvKiBDaGlsZCBzZW5kcyBtZV9iaW5hcnkgY2hhbmdlICovCi0JcmVhZCh4cGlwZVswXSwKLQkg ICAgIChjaGFyICopJlRFTE9QVF9NRShURUxPUFRfQklOQVJZKSwKLQkgICAgIHNpemVvZihURUxP UFRfTUUoVEVMT1BUX0JJTkFSWSkpCi0JICAgICApOwotCWRlYnVnKEYxMDEsIkNPTk5FQ1QgcGlw ZWludCBtZV9iaW5hcnkiLCIiLFRFTE9QVF9NRShURUxPUFRfQklOQVJZKSk7Ci0JYnJlYWs7Ci0g ICAgICBjYXNlIENFVl9VQklOOgkJCS8qIENoaWxkIHNlbmRzIHVfYmluYXJ5IGNoYW5nZSAqLwot CXJlYWQoeHBpcGVbMF0sCi0JICAgICAoY2hhciAqKSZURUxPUFRfVShURUxPUFRfQklOQVJZKSwK LQkgICAgIHNpemVvZihURUxPUFRfVShURUxPUFRfQklOQVJZKSkKLQkgICAgICk7Ci0JZGVidWco RjEwMSwiQ09OTkVDVCBwaXBlaW50IHVfYmluYXJ5IiwiIixURUxPUFRfVShURUxPUFRfQklOQVJZ KSk7Ci0JYnJlYWs7Ci0jZW5kaWYgLyogVE5DT0RFICovCi0KLSNpZmRlZiBDS19BUEMKLSAgICAg IGNhc2UgQ0VWX0FVTDoJCQkvKiBBdXRvdXBsb2FkICovCi0JanVzdG9uZSA9IDE7Ci0JZGVidWco RjEwMCwiQ09OTkVDVCBhdXRvdXBsb2FkIGF0IHBhcmVudCIsIiIsMCk7Ci0jaWZkZWYgQ0tfQVVU T0RMCi0gICAgICBjYXNlIENFVl9BREw6CQkJLyogQXV0b2Rvd25sb2FkICovCi0JYXBjYWN0aXZl ID0gQVBDX0xPQ0FMOwotCWlmICghanVzdG9uZSkgZGVidWcoRjEwMCwiQ09OTkVDVCBhdXRvZG93 bmxvYWQgYXQgcGFyZW50IiwiIiwwKTsKLQkvKiBDb3B5IGNoaWxkJ3MgS2VybWl0IHBhY2tldCBp ZiBhbnkgKi8KLQlyZWFkKHhwaXBlWzBdLCAoY2hhciAqKSZ4LCBzaXplb2YoeCkpOwotCWRlYnVn KEYxMDEsIkNPTk5FQ1QgdHJpZ2dlciBpYmMgKHVwcGVyKSIsIiIsaWJjKTsKLQlpZiAoeCA+IDAp Ci0JICByZWFkKHhwaXBlWzBdLCAoY2hhciAqKWtzYnVmLCB4KzEpOwotI2VuZGlmIC8qIENLX0FV VE9ETCAqLwotICAgICAgY2FzZSBDRVZfQVBDOgkJCS8qIEFwcGxpY2F0aW9uIFByb2dyYW0gQ29t bWFuZCAqLwotCXJlYWQoeHBpcGVbMF0sIChjaGFyICopJmFwY2xlbmd0aCwgc2l6ZW9mKGFwY2xl bmd0aCkpOwotCXJlYWQoeHBpcGVbMF0sIGFwY2J1ZiwgYXBjbGVuZ3RoKzEpOyAvKiBJbmNsdWRl IHRyYWlsaW5nIHplcm8gYnl0ZSAqLwotCWRlYnVnKEYxMTEsIkNPTk5FQ1QgQVBDIGF0IHBhcmVu dCIsYXBjYnVmLGFwY2xlbmd0aCk7Ci0JcmVhZCh4cGlwZVswXSwgKGNoYXIgKikmaWJjLCBzaXpl b2YoaWJjKSk7IC8qIENvcHkgY2hpbGQncyAqLwotCWlmIChpYmMgPiAwKSB7CQkJCSAgIC8qIGlu cHV0IGJ1ZmZlci4gKi8KLQkgICAgcmVhZCh4cGlwZVswXSwgKGNoYXIgKikmaWJwLCBzaXplb2Yo aWJwKSk7Ci0JICAgIHJlYWQoeHBpcGVbMF0sIGlicCwgaWJjKTsKLQl9Ci0Jb2JjID0gMDsgb2Jw ID0gb2J1ZjsgKm9idWYgPSBOVUw7IC8qIEJlY2F1c2UgcG9ydCBmb3JrIGZsdXNoZWQgKi8KLQlz anZhbCA9IENFVl9BUEM7Ci0JY2tsb25nam1wKGNvbl9lbnYsc2p2YWwpOwotCS8qIE5PVFJFQUNI RUQgKi8KLSNlbmRpZiAvKiBDS19BUEMgKi8KLQotI2lmZGVmIFNVTlgyNQotICAgICAgY2FzZSBD RVZfUEFEOgkJCS8qIFguMjUgUEFEIHBhcmFtZXRlciBjaGFuZ2UgKi8KLQlkZWJ1ZyhGMTAwLCJD T05ORUNUIHBpcGVpbnQgUEFEIGNoYW5nZSIsIiIsMCk7Ci0JcmVhZCh4cGlwZVswXSxwYWRwYXJt cyxNQVhQQURQQVJNUyk7Ci0Jc2p2YWwgPSBDRVZfUEFEOwkJLyogU2V0IGdsb2JhbCB2YXJpYWJs ZS4gKi8KLSNpZmRlZiBDT01NRU5UCQkJCS8qIFdlIG1pZ2h0IG5vdCBuZWVkIHRvIGRvIHRoaXMu Li4gKi8KLQlja2xvbmdqbXAoY29uX2VudixzanZhbCk7Ci0JLyogTk9UUkVBQ0hFRCAqLwotI2Vs c2UgIC8qIENPTU1FTlQgKi8KLQlicmVhazsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZW5kaWYg LyogU1VOWDI1ICovCi0gICAgfQotICAgIHNpZ25hbChDS19GT1JLX1NJRywgcGlwZWludCk7CS8q IFNldCB1cCBzaWduYWwgaGFuZGxlciAqLwotICAgIGtpbGwocGlkLCBDS19GT1JLX1NJRyk7CQkv KiBTaWduYWwgdGhlIHBvcnQgZm9yayAuLi4gKi8KLX0KLQotLyogIEMgSyBDIFAgVSBUIEMgIC0t ICBDLUtlcm1pdCBDT05ORUNUIFB1dCBDaGFyYWN0ZXIgdG8gU2NyZWVuICAqLwotLyoKLSAgT3V0 cHV0IGlzIGJ1ZmZlcmVkIHRvIGF2b2lkIHNsb3cgc2NyZWVuIHdyaXRlcyBvbiBmYXN0IGNvbm5l Y3Rpb25zLgotICBOT1RFOiBUaGVzZSBjb3VsZCAoZWFzaWx5PykgYmVjb21lIG1hY3JvcyAuLi4K LSovCi1zdGF0aWMgaW50Ci1ja2NwdXRmKCkgewkJCQkvKiBEdW1wIHRoZSBvdXRwdXQgYnVmZmVy ICovCi0gICAgaW50IHggPSAwOwotICAgIGlmIChvYmMgPiAwKQkJCS8qIElmIHdlIGhhdmUgYW55 IGNoYXJhY3RlcnMsICovCi0gICAgICB4ID0gY29ueG8ob2JjLG9idWYpOwkJLyogZHVtcCB0aGVt LCAqLwotICAgIG9icCA9IG9idWY7CQkJCS8qIHJlc2V0IHRoZSBwb2ludGVyICovCi0gICAgb2Jj ID0gMDsJCQkJLyogYW5kIHRoZSBjb3VudGVyLiAqLwotICAgIHJldHVybih4KTsJCQkJLyogUmV0 dXJuIGNvbnhvJ3MgcmV0dXJuIGNvZGUgKi8KLX0KLQotaW50Ci1ja2NwdXRjKGMpIGludCBjOyB7 Ci0gICAgaW50IHg7Ci0KLSAgICAqb2JwKysgPSBjICYgMHhmZjsJCQkvKiBEZXBvc2l0IHRoZSBj aGFyYWN0ZXIgKi8KLSAgICBvYmMrKzsJCQkJLyogQ291bnQgaXQgKi8KLSAgICBpZiAoaWJjID09 IDAgfHwJCQkvKiBJZiBpbnB1dCBidWZmZXIgYWJvdXQgZW1wdHkgKi8KLQlvYmMgPT0gT0JVRkwp IHsJCQkvKiBvciBvdXRwdXQgYnVmZmVyIGZ1bGwgKi8KLQlkZWJ1ZyhGMTAxLCJDT05ORUNUIENL Q1BVVEMgb2JjIiwiIixvYmMpOwotCXggPSBjb254byhvYmMsb2J1Zik7CQkvKiBkdW1wIHRoZSBi dWZmZXIsICovCi0Jb2JwID0gb2J1ZjsJCQkvKiByZXNldCB0aGUgcG9pbnRlciAqLwotCW9iYyA9 IDA7CQkJLyogYW5kIHRoZSBjb3VudGVyLiAqLwotCXJldHVybih4KTsJCQkvKiBSZXR1cm4gY29u eG8ncyByZXR1cm4gY29kZSAqLwotICAgIH0gZWxzZSByZXR1cm4oMCk7Ci19Ci0KLS8qICBDIEsg QyBHIEUgVCBDICAtLSAgQy1LZXJtaXQgQ09OTkVDVCBHZXQgQ2hhcmFjdGVyICAqLwotLyoKLSAg QnVmZmVyZWQgcmVhZCBmcm9tIGNvbW11bmljYXRpb24gZGV2aWNlLgotICBSZXR1cm5zIHRoZSBu ZXh0IGNoYXJhY3RlciwgcmVmaWxsaW5nIHRoZSBidWZmZXIgaWYgbmVjZXNzYXJ5LgotICBPbiBl cnJvciwgcmV0dXJucyB0dGluYydzIHJldHVybiBjb2RlIChzZWUgdHRpbmMoKSBkZXNjcmlwdGlv bikuCi0gIER1bW15IGFyZ3VtZW50IGZvciBjb21wYXRpYmxlIGNhbGxpbmcgY29udmVudGlvbnMg d2l0aCB0dGluYygpLgotICBOT1RFOiBXZSBkb24ndCBoYXZlIGEgbWFjcm8gZm9yIHRoaXMgYmVj YXVzZSB3ZSBoYXZlIHRvIHBhc3MKLSAgYSBwb2ludGVyIHRvIHRoaXMgZnVuY3Rpb24gYXMgYW4g YXJndW1lbnQgdG8gdG5fZG9vcCgpLgotKi8KLWludAotY2tjZ2V0YyhkdW1teSkgaW50IGR1bW15 OyB7Ci0gICAgaW50IGMsIG47Ci0jaWZkZWYgQ0tfU1NMCi0gICAgZXh0ZXJuIGludCBzc2xfYWN0 aXZlX2ZsYWcsIHRsc19hY3RpdmVfZmxhZzsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLQotI2lmZGVm IENLX0VOQ1JZUFRJT04KLSAgICAvKiBObyBidWZmZXJpbmcgZm9yIHBvc3NpYmx5IGVuY3J5cHRl ZCBjb25uZWN0aW9ucyAqLwotICAgIGlmIChuZXR3b3JrICYmIElTX1RFTE5FVCgpICYmIFRFTE9Q VF9NRShURUxPUFRfQVVUSEVOVElDQVRJT04pKQotICAgICAgcmV0dXJuKHR0aW5jKDApKTsKLSNl bmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKHNzbF9hY3Rp dmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpCi0gICAgICAgIHJldHVybih0dGluYygwKSk7Ci0j ZW5kaWYgLyogQ0tfU1NMICovCi0jaWZkZWYgQ09NTUVOVAotLyogdG9vIG11Y2ggKi8KLSAgICBk ZWJ1ZyhGMTAxLCJDT05ORUNUIENLQ0dFVEMgMSBpYmMiLCIiLGliYyk7IC8qIExvZyAqLwotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLSAgICBpZiAoaWJjIDwgMSkgewkJCS8qIE5lZWQgdG8gcmVmaWxs IGJ1ZmZlcj8gKi8KLQlpYmMgPSAwOwkJCS8qIFllcywgcmVzZXQgY291bnQgKi8KLQlpYnAgPSBp YnVmOwkJCS8qIGFuZCBidWZmZXIgcG9pbnRlciAqLwotCS8qIGRlYnVnKEYxMDAsIkNPTk5FQ1Qg Q0tDR0VUQyAxIGNhbGxpbmcgdHRpbmMoMCkiLCIiLDApOyAqLwotI2lmZGVmIENPTU1FTlQKLS8q Ci0gIFRoaXMgY2hlY2sgaXMgbm90IHdvcnRoIHRoZSBvdmVyaGVhZC4gIFNjZW5hcmlvOiB0dGNo aygpIHJldHVybnMgMCwgc28gd2UKLSAgZmFsbCB0aHJvdWdoIHRvIHRoZSBibG9ja2luZyB0dGlu YygpLiAgV2hpbGUgaW4gdHRpbmMoKSwgdGhlIGNvbm5lY3Rpb24gaXMKLSAgbG9zdC4gIEJ1dCB0 aGUgcmVhZCgpIHRoYXQgdHRpbmMoKSBjYWxscyBkb2VzIG5vdCBub3RpY2UsIGFuZCBuZXZlciBy ZXR1cm5zLgotICBUaGlzIGhhcHBlbnMgYXQgbGVhc3QgaW4gSFAtVVgsIGFuZCBjYW4gYmUgc2Vl biB3aGVuIHdlIHR1cm4gb2ZmIHRoZSBtb2RlbS4KLSovCi0JaWYgKCFuZXR3b3JrICYmIChjYXJy aWVyICE9IENBUl9PRkYpKQotCSAgaWYgKChuID0gdHRjaGsoKSkgPCAwKQkvKiBNYWtlIHN1cmUg Y29ubmVjdGlvbiBpcyBub3QgbG9zdCAqLwotCSAgICByZXR1cm4obik7Ci0jZW5kaWYgLyogQ09N TUVOVCAqLwotCWMgPSB0dGluYygwKTsJCQkvKiBSZWFkIG9uZSBjaGFyYWN0ZXIsIGJsb2NraW5n ICovCi0JLyogZGVidWcoRjEwMSwiQ09OTkVDVCBDS0NHRVRDIDEgdHRpbmMoMCkiLCIiLGMpOyAq LwotCWlmIChjIDwgMCkgewkJCS8qIElmIGVycm9yLCByZXR1cm4gZXJyb3IgY29kZSAqLwotCSAg ICByZXR1cm4oYyk7Ci0JfSBlbHNlIHsJCQkvKiBPdGhlcndpc2UsIGdvdCBvbmUgY2hhcmFjdGVy ICovCi0JICAgICppYnArKyA9IGM7CQkJLyogQWR2YW5jZSBidWZmZXIgcG9pbnRlciAqLwotCSAg ICBpYmMrKzsJCQkvKiBhbmQgY291bnQuICovCi0JfQotCWlmICgobiA9IHR0Y2hrKCkpID4gMCkg ewkvKiBBbnkgbW9yZSB3YWl0aW5nPyAqLwotCSAgICBpZiAobiA+IChJQlVGTCAtIGliYykpCS8q IEdldCB0aGVtIGFsbCBhdCBvbmNlLiAqLwotCSAgICAgIG4gPSBJQlVGTCAtIGliYzsJCS8qIERv bid0IG92ZXJmbG93IGJ1ZmZlciAqLwotCSAgICBpZiAoKG4gPSB0dHhpbihuLChDSEFSICopaWJw KSkgPiAwKSB7Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotCQlpZiAoVEVMT1BUX1UoVEVMT1BUX0VO Q1JZUFRJT04pKQotCQkgIGNrX3RuX2RlY3J5cHQoaWJwLG4pOwotI2VuZGlmIC8qIENLX0VOQ1JZ UFRJT04gKi8KLQkJaWJjICs9IG47CQkJLyogQWR2YW5jZSBjb3VudGVyICovCi0JICAgIH0KLQl9 IGVsc2UgaWYgKG4gPCAwKSB7CQkvKiBFcnJvcj8gKi8KLQkgICAgcmV0dXJuKG4pOwkJCS8qIFJl dHVybiB0aGUgZXJyb3IgY29kZSAqLwotCX0KLQlkZWJ1ZyhGMTAxLCJDT05ORUNUIENLQ0dFVEMg MiBpYmMiLCIiLGliYyk7IC8qIExvZyBob3cgbWFueSAqLwotCWlicCA9IGlidWY7CQkJLyogUG9p bnQgdG8gYmVnaW5uaW5nIG9mIGJ1ZmZlciAqLwotICAgIH0KLSAgICBjID0gKmlicCsrICYgMHhm ZjsJCQkvKiBHZXQgbmV4dCBjaGFyYWN0ZXIgZnJvbSBidWZmZXIgKi8KLSAgICBpYmMtLTsJCQkJ LyogUmVkdWNlIGJ1ZmZlciBjb3VudCAqLwotICAgIHJldHVybihjKTsJCQkJLyogUmV0dXJuIHRo ZSBjaGFyYWN0ZXIgKi8KLX0KLQotLyoKLSAgIEtleWJvYXJkIGhhbmRsaW5nLCBidWZmZXJlZCBm b3Igc3BlZWQsIHdoaWNoIGlzIG5lZWRlZCB3aGVuIEMtS2VybWl0IGlzCi0gICBpbiBDT05ORUNU IG1vZGUgYmV0d2VlbiB0d28gb3RoZXIgY29tcHV0ZXJzIHRoYXQgYXJlIHRyYW5zZmVycmluZyBk YXRhLgotKi8KLXN0YXRpYyBjaGFyICprYnA7CQkJLyogS2V5Ym9hcmQgaW5wdXQgYnVmZmVyIHBv aW50ZXIgKi8KLXN0YXRpYyBpbnQga2JjOwkJCQkvKiBLZXlib2FyZCBpbnB1dCBidWZmZXIgY291 bnQgKi8KLQotI2lmZGVmIENLX1NNQUxMCQkJCS8qIEtleWJvYXJkIGlucHV0IGJ1ZmZlciBsZW5n dGggKi8KLSNkZWZpbmUgS0JVRkwgMzIJCQkvKiBTbWFsbCBmb3IgUERQLTExIFVOSVggKi8KLSNl bHNlCi0jZGVmaW5lIEtCVUZMIDI1NwkJCS8qIFJlZ3VsYXIga2VybmVsIHNpemUgZm9yIG90aGVy cyAqLwotI2VuZGlmIC8qIENLX1NNQUxMICovCi0KLSNpZmRlZiBEWU5BTUlDCi1zdGF0aWMgY2hh ciAqa2J1ZiA9IE5VTEw7Ci0jZWxzZQotc3RhdGljIGNoYXIga2J1ZltLQlVGTF07Ci0jZW5kaWYg LyogRFlOQU1JQyAqLwotCi0vKiBNYWNybyBmb3IgcmVhZGluZyBrZXlzdHJva2VzLiAqLwotCi0j ZGVmaW5lIENPTkdLUygpICgoKC0ta2JjKT49MCkgPyAoKGludCkoKmticCsrKSAmIDAzNzcpIDog a2JnZXQoKSkKLQotLyoKLSAgTm90ZSB0aGF0IHdlIGNhbGwgcmVhZCgpIGRpcmVjdGx5IGhlcmUs IG5vcm1hbGx5IGEgbm8tbm8sIGJ1dCBpbiB0aGlzIGNhc2UKLSAgd2Uga25vdyBpdCdzIFVOSVgg YW5kIHdlJ3JlIG9ubHkgZG9pbmcgd2hhdCBjb25pbmMoMCkgd291bGQgaGF2ZSBkb25lLAotICBl eGNlcHQgd2UncmUgcmVhZGluZyBhIGJsb2NrIG9mIGNoYXJhY3RlcnMgcmF0aGVyIHRoYW4ganVz dCBvbmUuICBUaGVyZSBpcywKLSAgYXQgcHJlc2VudCwgbm8gY29ueGluKCkgYW5hbG9nIHRvIHR0 eGluKCkgZm9yIGNodW5rIHJlYWRzLCBhbmQgaW5zdGl0dXRpbmcKLSAgb25lIHdvdWxkIG9ubHkg YWRkIGZ1bmN0aW9uLWNhbGwgb3ZlcmhlYWQgYXMgaXQgd291bGQgb25seSBiZSBhIHdyYXBwZXIg Zm9yCi0gIGEgcmVhZCgpIGNhbGwgYW55d2F5LgotKi8KLS8qCi0gIEFub3RoZXIgbm90ZTogV2Ug c3RpY2sgaW4gdGhpcyByZWFkKCkgdGlsbCB0aGUgdXNlciB0eXBlcyBzb21ldGhpbmcuCi0gIEJ1 dCB0aGUgb3RoZXIgKGxvd2VyKSBmb3JrIGlzIHJ1bm5pbmcgdG9vLCBhbmQgb24gVEVMTkVUIGNv bm5lY3Rpb25zLAotICBpdCB3aWxsIHNpZ25hbCB1cyB0byBpbmRpY2F0ZSBlY2hvLWNoYW5nZSBu ZWdvdGlhdGlvbnMsIGFuZCB0aGlzIGNhbgotICBpbnRlcnJ1cHQgdGhlIHJlYWQoKS4gIFNvbWUg VU5JWGVzIGF1dG9tYXRpY2FsbHkgcmVzdGFydCB0aGUgaW50ZXJydXB0ZWQKLSAgc3lzdGVtIGNh bGwsIG90aGVycyByZXR1cm4gZnJvbSBpdCB3aXRoIGVycm5vID09IEVJTlRSLgotKi8KLXN0YXRp YyBpbnQJCQkJLyogS2V5Ym9hcmQgYnVmZmVyIGZpbGxlciAqLwota2JnZXQoKSB7Ci0jaWZkZWYg RUlOVFIKLSAgICBpbnQgdHJpZXMgPSAxMDsJCQkvKiBJZiByZWFkKCkgaXMgaW50ZXJydXB0ZWQs ICovCi0gICAgaW50IG9rID0gMDsKLSAgICB3aGlsZSAodHJpZXMtLSA+IDApIHsJCS8qIHRyeSBh IGZldyB0aW1lcy4uLiAqLwotI2VuZGlmIC8qIEVJTlRSICovCi0JaWYgKChrYmMgPSBjb25jaGso KSkgPCAxKQkvKiBIb3cgbWFueSBjaGFycyB3YWl0aW5nPyAqLwotCSAga2JjID0gMTsJCQkvKiBJ ZiBub25lIG9yIGR1bm5vLCB3YWl0IGZvciBvbmUuICovCi0JZWxzZSBpZiAoa2JjID4gS0JVRkwp CQkvKiBJZiB0b28gbWFueSwgKi8KLQkgIGtiYyA9IEtCVUZMOwkJCS8qIG9ubHkgcmVhZCB0aGlz IG1hbnkuICovCi0JaWYgKChrYmMgPSByZWFkKDAsIGtidWYsIGtiYykpIDwgMSkgeyAvKiBOb3cg cmVhZCBpdC90aGVtLiAqLwotCSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGtiZ2V0IGVycm5vIiwi IixlcnJubyk7CS8qIEdvdCBhbiBlcnJvci4gKi8KLSNpZmRlZiBFSU5UUgotCSAgICBpZiAoZXJy bm8gPT0gRUlOVFIpCQkvKiBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbC4gKi8KLQkgICAgICBjb250 aW51ZTsJCQkvKiBUcnkgYWdhaW4sIHVwIHRvIGxpbWl0LiAqLwotCSAgICBlbHNlCQkJLyogU29t ZXRoaW5nIGVsc2UuICovCi0jZW5kaWYgLyogRUlOVFIgKi8KLQkgICAgICByZXR1cm4oLTEpOwkJ LyogUGFzcyBhbG9uZyByZWFkKCkgZXJyb3IuICovCi0JfQotI2lmZGVmIEVJTlRSCi0JZWxzZSB7 IG9rID0gMTsgYnJlYWs7IH0KLSAgICB9Ci0gICAgaWYgKCFvaykgcmV0dXJuKC0xKTsKLSNlbmRp ZiAvKiBFSU5UUiAqLwotICAgIGticCA9IGtidWY7CQkJCS8qIEFkanVzdCBidWZmZXIgcG9pbnRl ciwgKi8KLSAgICBrYmMtLTsJCQkJLyogY291bnQsICovCi0gICAgcmV0dXJuKChpbnQpKCprYnAr KykgJiAwMzc3KTsJLyogYW5kIHJldHVybiBmaXJzdCBjaGFyYWN0ZXIuICovCi19Ci0KLS8qICBD IE8gTiBDIEwgRCAtLSAgSW50ZXJhY3RpdmUgdGVybWluYWwgY29ubmVjdGlvbiBjaGlsZCBmdW5j dGlvbiAqLwotCi1zdGF0aWMKLSNpZmRlZiBCRU9TT1JCRUJPWAotbG9uZwotI2Vsc2UKLVZPSUQK LSNlbmRpZiAvKiBCRU9TT1JCRUJPWCAqLwotY29uY2xkICgKLSNpZmRlZiBCRU9TT1JCRUJPWAot ICAgICAgIHZvaWQgKmJldm9pZAotI2VuZGlmIC8qIEJFT1NPUkJFQk9YICovCi0gICAgICAgKSB7 Ci0gICAgaW50CW47CQkJLyogR2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIgKi8KLSAgICBpbnQgaTsJ CQkvKiBGb3IgbG9vcHMuLi4gKi8KLSAgICBpbnQgYyA9IC0xOwkJCS8qIGMgaXMgYSBjaGFyYWN0 ZXIsIGJ1dCBtdXN0IGJlIHNpZ25lZAotCQkJCSAgIGludGVnZXIgdG8gcGFzcyB0aHJ1IC0xLCB3 aGljaCBpcyB0aGUKLQkJCQkgICBtb2RlbSBkaXNjb25uZWN0aW9uIHNpZ25hbCwgYW5kIGlzCi0J CQkJICAgZGlmZmVyZW50IGZyb20gdGhlIGNoYXJhY3RlciAwMzc3ICovCi0gICAgaW50IHByZXY7 Ci0jaWZkZWYgVE5DT0RFCi0gICAgaW50IHR4OwkJCS8qIHRuX2Rvb3AoKSByZXR1cm4gY29kZSAq LwotI2VuZGlmIC8qIFROQ09ERSAqLwotI2lmZGVmIENLX1RSSUdHRVIKLSAgICBpbnQgaXg7CQkJ CS8qIFRyaWdnZXIgaW5kZXggKi8KLSNlbmRpZiAvKiBDS19UUklHR0VSICovCi0jaWZuZGVmIE5P RVNDU0VRCi0gICAgaW50IGFwY3JjOwotI2VuZGlmIC8qIE5PRVNDU0VRICovCi0KLSNpZmRlZiBD T01NRU5UCi0gICAgaW50IGNvbnJldCA9IDA7CQkJLyogUmV0dXJuIHZhbHVlIGZyb20gY29uZWN0 KCkgKi8KLSAgICBqYmNoa3N1bSA9IC0xTDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgamJz ZXQgPSAwOwkJCQkvKiBqbXBfYnVmIG5vdCBzZXQgeWV0LCBkb24ndCB1c2UgaXQgKi8KLSAgICBk ZWJ1ZyhGMTAxLCJDT05ORUNUIGNvbmNsZCBlbnRyeSIsIiIsQ0tfRk9SS19TSUcpOwotIAkvKiAq KiogKi8JCS8qIEluZmVyaW9yIHJlYWRzLCBwcmludHMgcG9ydCBpbnB1dCAqLwotCi0gICAgaWYg KHByaXZfY2FuKCkpIHsJCQkvKiBDYW5jZWwgYWxsIHByaXZzICovCi0JcHJpbnRmKCI/c2V0dWlk IGVycm9yIC0gZmF0YWxcbiIpOwotCWRvZXhpdChCQURfRVhJVCwtMSk7Ci0gICAgfQotICAgIHNp Z25hbChTSUdJTlQsIFNJR19JR04pOwkJLyogSW4gY2FzZSB0aGVzZSBoYXZlbid0IGJlZW4gKi8K LSAgICBzaWduYWwoU0lHUVVJVCwgU0lHX0lHTik7CQkvKiBpbmhlcml0ZWQgZnJvbSBhYm92ZS4u LiAqLwotICAgIHNpZ25hbChDS19GT1JLX1NJRywgU0lHX0lHTik7CS8qIENLX0ZPUktfU0lHIG5v dCBleHBlY3RlZCB5ZXQgKi8KLQotICAgIGluc2hpZnQgPSBvdXRzaGlmdCA9IDA7CQkvKiBJbml0 aWFsIFNPL1NJIHNoaWZ0IHN0YXRlLiAqLwotICAgIHsJCQkJCS8qIFdhaXQgZm9yIHBhcmVudCdz IHNldHVwICovCi0JaW50IGk7Ci0Jd2hpbGUgKChpID0gcmVhZCh4cGlwZVswXSwgJmMsIDEpKSA8 PSAwKSB7Ci0JICAgIGlmIChpIDwgMCkgewotCQlkZWJ1ZyhGMTAxLCJDT05ORUNUIGNvbmNsZCBz ZXR1cCBlcnJvciIsIiIsaSk7Ci0JCWRlYnVnKEYxMTEsIkNPTk5FQ1QgY29uY2xkIHNldHVwIGVy cm9yIixja19lcnJzdHIoKSxlcnJubyk7Ci0JCXBpcGVtc2coQ0VWX0hVUCk7CS8qIFJlYWQgZXJy b3IgLSBoYW5ndXAgKi8KLQkJY2tfc25kbXNnKCk7CQkvKiBTZW5kIGFuZCB3YWl0IHRvIGJlIGtp bGxlZCAqLwotCQkvKiBOT1RSRUFDSEVEICovCi0JICAgIH0gLyogUmVzdGFydCBpbnRlcnJ1cHRl ZCByZWFkKCkgKi8KLQl9Ci0gICAgfQotICAgIGNsb3NlKHhwaXBlWzBdKTsgeHBpcGVbMF0gPSAt MTsJLyogQ2hpbGQgLSBwcmV2ZW50IGZ1dHVyZSByZWFkcyAqLwotI2lmZGVmIERFQlVHCi0gICAg aWYgKGRlYmxvZykgewotCWRlYnVnKEYxMDAsIkNPTk5FQ1Qgc3RhcnRpbmcgcG9ydCBmb3JrIiwi IiwwKTsKLQlkZWJ1ZyhGMTAxLCJDT05ORUNUIHBvcnQgZm9yayBpYmMiLCIiLGliYyk7Ci0JZGVi dWcoRjEwMSwiQ09OTkVDVCBwb3J0IGZvcmsgb2JjIiwiIixvYmMpOwotICAgIH0KLSNlbmRpZiAv KiBERUJVRyAqLwotICAgIHdoYXQgPSBXX0NPTk5FQ1Q7Ci0KLSAgICB3aGlsZSAoMSkgewkJCQkv KiBGcmVzaCByZWFkLCB3YWl0IGZvciBhIGNoYXJhY3Rlci4gKi8KLSNpZmRlZiBBTllYMjUKLQlp ZiAobmV0d29yayAmJiAobmV0dHlwZSA9PSBORVRfU1gyNSkpIHsKLQkgICAgYnplcm8oeDI1aWJ1 ZixzaXplb2YoeDI1aWJ1ZikpIDsKLQkgICAgaWYgKChpYnVmbCA9IHR0eGluKE1BWElYMjUsKENI QVIgKil4MjVpYnVmKSkgPCAwKSB7Ci0jaWZuZGVmIElCTVgyNQotCQlpZiAoaWJ1ZmwgPT0gLTIp IHsgIC8qIFBBRCBwYXJtcyBjaGFuZ2VzICovCi0JCSAgICBwaXBlbXNnKENFVl9QQUQpOwotCQkg ICAgd3JpdGUoeHBpcGVbMV0scGFkcGFybXMsTUFYUEFEUEFSTVMpOwotCQkgICAgY2tfc25kbXNn KCk7Ci0JCX0gZWxzZSB7Ci0jZW5kaWYgLyogSUJNWDI1ICovCi0JCSAgICBpZiAoIXF1aWV0KQot CQkgICAgICBwcmludGYoIlxyXG5Db21tdW5pY2F0aW9ucyBkaXNjb25uZWN0ICIpOwotCQkgICAg ZG9sb2dlbmQoKTsKLQkJICAgIHBpcGVtc2coQ0VWX0hVUCk7Ci0JCSAgICBja19zbmRtc2coKTsJ CS8qIFdhaXQgdG8gYmUga2lsbGVkICovCi0JCSAgICAvKiBOT1RSRUFDSEVEICovCi0jaWZuZGVm IElCTVgyNQotICAJCX0KLSNlbmRpZiAvKiBJQk1YMjUgKi8KLQkJLyogcGF1c2UoKTsgPC0tLSBT SE9VTEQgQkUgT0JTT0xFVEUgTk9XISAqLwotCQkvKiBCRUNBVVNFIHBhdXNlKCkgaXMgZG9uZSBp bnNpZGUgb2YgY2tfc25kbXNnKCkgKi8KLQkgICAgfQotCSAgICBpZiAoZGVic2VzKSB7CQkvKiBE ZWJ1Z2dpbmcgb3V0cHV0ICovCi0JCXAgPSB4MjVpYnVmIDsKLQkJd2hpbGUgKGlidWZsLS0pIHsg YyA9ICpwKys7IGNvbm9sKGRiY2hyKGMpKTsgfQotCSAgICB9IGVsc2UgewotCQlpZiAoc2VzbG9n ICYmIHNlc3NmdCkJLyogQmluYXJ5IHNlc3Npb24gbG9nICovCi0JCSAgbG9nY2hhcigoY2hhcilj KTsJLyogTG9nIGNoYXIgYmVmb3JlIHRyYW5zbGF0aW9uICovCi0KLQkJaWYgKHNvc2kKLSNpZm5k ZWYgTk9DU0VUUwotCQkgICAgfHwgdGNzbCAhPSB0Y3NyCi0jZW5kaWYgLyogTk9DU0VUUyAqLwot CQkgICAgKSB7IC8qIENoYXJhY3RlciBhdCBhIHRpbWUgKi8KLQkJICAgIGZvciAoaSA9IDE7IGkg PCBpYnVmbDsgaSsrKSB7Ci0JCQljID0geDI1aWJ1ZltpXSAmIGNtYXNrOwotCQkJaWYgKHNvc2kp IHsgLyogSGFuZGxlIFNJL1NPICovCi0JCQkgICAgaWYgKGMgPT0gU08pIHsKLQkJCQlpbnNoaWZ0 ID0gMTsKLQkJCQljb250aW51ZTsKLQkJCSAgICB9IGVsc2UgaWYgKGMgPT0gU0kpIHsKLQkJCQlp bnNoaWZ0ID0gMDsKLQkJCQljb250aW51ZTsKLQkJCSAgICB9Ci0JCQkgICAgaWYgKGluc2hpZnQp Ci0JCQkgICAgICBjIHw9IDAyMDA7Ci0JCQl9Ci0jaWZuZGVmIE5PQ1NFVFMKLQkJCWlmIChpbmVz YyA9PSBFU19OT1JNQUwpIHsKLSNpZmRlZiBVTklDT0RFCi0JCQkgICAgaW50IHg7Ci0JCQkgICAg aWYgKHVuaWNvZGUgPT0gMSkgewkvKiBSZW1vdGUgaXMgVVRGLTggKi8KLQkJCQl4ID0gdV90b19i KChDSEFSKWMpOwotCQkJICAgICAgICBpZiAoeCA9PSAtMSkKLQkJCQkgIGNvbnRpbnVlOwotCQkJ CWVsc2UgaWYgKHggPT0gLTIpIHsgLyogTFMgb3IgUFMgKi8KLQkJCQkgICAgaW54YnVmWzBdID0g Q1I7Ci0JCQkJICAgIGlueGJ1ZlsxXSA9IExGOwotCQkJCSAgICBpbnhjb3VudCA9IDI7Ci0JCQkJ fSBlbHNlIHsKLQkJCQkgICAgaW54YnVmWzBdID0gKHVuc2lnbmVkKSh4ICYgMHhmZik7Ci0JCQkJ fQotCQkJCWMgPSBpbnhidWZbMF07Ci0JCQkgICAgfSBlbHNlIGlmICh1bmljb2RlID09IDIpIHsg LyogTG9jYWwgaXMgVVRGLTggKi8KLQkJCQlpbnhjb3VudCA9Ci0JCQkJICBiX3RvX3UoKENIQVIp YyxpbnhidWYsT1VUWEJVRlNJWix0Y3NzaXplKTsKLQkJCQljID0gaW54YnVmWzBdOwotCQkJICAg IH0gZWxzZSB7Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotCQkJCWlmIChzeGkpIGMgPSAoKnN4aSko KENIQVIpYyk7Ci0JCQkJaWYgKHJ4aSkgYyA9ICgqcnhpKSgoQ0hBUiljKTsKLQkJCQlpbnhidWZb MF0gPSBjOwotI2lmZGVmIFVOSUNPREUKLQkJCSAgICB9Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwot CQkJfQotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQkJCWMgJj0gY21kbXNrOyAvKiBBcHBseSBjb21t YW5kIG1hc2suICovCi0JCQljb25vYyhjKTsgICAgLyogT3V0cHV0IHRvIHNjcmVlbiAqLwotCQkJ aWYgKHNlc2xvZyAmJiAhc2Vzc2Z0KSAvKiBhbmQgc2Vzc2lvbiBsb2cgKi8KLQkJCSAgbG9nY2hh cihjKTsKLQkJICAgIH0KLQkJfSBlbHNlIHsJCS8qIEFsbCBhdCBvbmNlICovCi0JCSAgICBmb3Ig KGkgPSAxOyBpIDwgaWJ1Zmw7IGkrKykKLQkJICAgICAgeDI1aWJ1ZltpXSAmPSAoY21hc2sgJiBj bWRtc2spOwotCQkgICAgY29ueG8oaWJ1ZmwseDI1aWJ1Zik7Ci0JCSAgICBpZiAoc2VzbG9nKSB6 c291dHgoWlNGSUxFLHgyNWlidWYsaWJ1ZmwpOwotCQl9Ci0JICAgIH0KLQkgICAgY29udGludWU7 Ci0KLQl9IGVsc2UgewkJCS8qIE5vdCBYLjI1Li4uICovCi0jZW5kaWYgLyogQU5ZWDI1ICovCi0v KgotICBHZXQgdGhlIG5leHQgY29tbXVuaWNhdGlvbiBsaW5lIGNoYXJhY3RlciBmcm9tIG91ciBp bnRlcm5hbCBidWZmZXIuCi0gIElmIHRoZSBidWZmZXIgaXMgZW1wdHksIHJlZmlsbCBpdC4KLSov Ci0JICAgIHByZXYgPSBjOwkJCS8qIFJlbWVtYmVyIHByZXZpb3VzIGNoYXJhY3RlciAqLwotCSAg ICBjID0gY2tjZ2V0YygwKTsJCS8qIEdldCBuZXh0IGNoYXJhY3RlciAqLwotCSAgICAvKiBkZWJ1 ZyhGMTAxLCJDT05ORUNUIGMiLCIiLGMpOyAqLwotCSAgICBpZiAoYyA8IDApIHsJCS8qIEZhaWxl ZC4uLiAqLwotCQlkZWJ1ZyhGMTAxLCJDT05ORUNUIGRpc2Nvbm5lY3QgaWJjIiwiIixpYmMpOwot CQlkZWJ1ZyhGMTAxLCJDT05ORUNUIGRpc2Nvbm5lY3Qgb2JjIiwiIixvYmMpOwotCQlja2NwdXRm KCk7CQkvKiBGbHVzaCBDT05ORUNUIG91dHB1dCBidWZmZXIgKi8KLQkJaWYgKCFxdWlldCkgewot CQkgICAgcHJpbnRmKCJcclxuQ29tbXVuaWNhdGlvbnMgZGlzY29ubmVjdCAiKTsKLSNpZmRlZiBD T01NRU5UCi0JCSAgICBpZiAoIGMgPT0gLTMKLSNpZmRlZiB1bHRyaXgKLS8qIFRoaXMgaGFwcGVu cyBvbiBVbHRyaXggaWYgdGhlcmUncyBubyBjYXJyaWVyICovCi0JCQkmJiBlcnJubyAhPSBFSU8K LSNlbmRpZiAvKiB1bHRyaXggKi8KLSNpZmRlZiBVVEVLCi0vKiBUaGlzIGhhcHBlbnMgb24gVVRF SyBpZiB0aGVyZSdzIG5vIGNhcnJpZXIgKi8KLQkJCSYmIGVycm5vICE9IEVXT1VMREJMT0NLCi0j ZW5kaWYgLyogVVRFSyAqLwotCQkJKQotCQkgICAgICBwZXJyb3IoIlxyXG5DYW4ndCByZWFkIGNo YXJhY3RlciIpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkJfQotI2lmZGVmIE5PU0VUQlVGCi0J CWZmbHVzaChzdGRvdXQpOwotI2VuZGlmIC8qIE5PU0VUQlVGICovCi0JCXR0aGFuZygpOwkJLyog SGFuZyB1cCB0aGUgY29ubmVjdGlvbiAqLwotCQlkZWJ1ZyhGMTExLCJDT05ORUNUIGNvbmNsZCBp L28gZXJyb3IiLGNrX2VycnN0cigpLGVycm5vKTsKLQkJcGlwZW1zZyhDRVZfSFVQKTsKLQkJY2tf c25kbXNnKCk7CQkvKiBXYWl0IHRvIGJlIGtpbGxlZCAqLwotCSAgICB9Ci0jaWZkZWYgQ09NTUVO VAotLyogdG9vIG11Y2guLi4gKi8KLQkgICAgZGVidWcoRjEwMSwiQ09OTkVDVCAqKiBQT1JUIiwi IixjKTsgLyogR290IGNoYXJhY3RlciBjIE9LLiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNp ZmRlZiBUTkNPREUKLQkgICAgLyogSGFuZGxlIFRFTE5FVCBuZWdvdGlhdGlvbnMuLi4gKi8KLQot CSAgICBpZiAoKGMgPT0gTlVMKSAmJiBuZXR3b3JrICYmIElTX1RFTE5FVCgpKSB7Ci0JCWlmIChw cmV2ID09IENSKQkJLyogRGlzY2FyZCA8TlVMPiBvZiA8Q1I+PE5VTD4gKi8KLQkJICBpZiAoIVRF TE9QVF9VKFRFTE9QVF9CSU5BUlkpKQotCQkgICAgY29udGludWU7Ci0JICAgIH0KLQkgICAgaWYg KChjID09IElBQykgJiYgbmV0d29yayAmJiBJU19URUxORVQoKSkgewotCQlpbnQgbWVfYmluID0g VEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpOwotCQlpbnQgdV9iaW4gPSBURUxPUFRfVShURUxPUFRf QklOQVJZKTsKLQkJZGVidWcoRjEwMCwiQ09OTkVDVCBnb3QgSUFDIiwiIiwwKTsKLQkJY2tjcHV0 ZigpOwkJLyogRHVtcCBzY3JlZW4tb3V0cHV0IGJ1ZmZlciAqLwotCQlpZiAoKHR4ID0gdG5fZG9v cCgoQ0hBUikoYyAmIDB4ZmYpLGR1cGxleCxja2NnZXRjKSkgPT0gMCkgewotCQkgICAgaWYgKG1l X2JpbiAhPSBURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkpIHsKLQkJCWRlYnVnKEYxMDEsCi0JCQkg ICAgICAiQ09OTkVDVCBURUxORVQgbWVfYmluIiwKLQkJCSAgICAgICIiLAotCQkJICAgICAgVEVM T1BUX01FKFRFTE9QVF9CSU5BUlkpCi0JCQkgICAgICApOwotCQkJcGlwZW1zZyhDRVZfTUVCSU4p OyAvKiBUZWxsIHBhcmVudCAqLwotCQkJd3JpdGUoeHBpcGVbMV0sCi0JCQkgICAgICAmVEVMT1BU X01FKFRFTE9QVF9CSU5BUlkpLAotCQkJICAgICAgc2l6ZW9mKFRFTE9QVF9NRShURUxPUFRfQklO QVJZKSkKLQkJCSAgICAgICk7Ci0JCQlja19zbmRtc2coKTsJLyogVGVsbCB0aGUgcGFyZW50IGZv cmsgKi8KLQkJICAgIH0gZWxzZSBpZiAodV9iaW4gIT0gVEVMT1BUX1UoVEVMT1BUX0JJTkFSWSkp IHsKLQkJCWRlYnVnKEYxMDEsCi0JCQkgICAgICAiQ09OTkVDVCBURUxORVQgdV9iaW4iLAotCQkJ ICAgICAgIiIsCi0JCQkgICAgICBURUxPUFRfVShURUxPUFRfQklOQVJZKQotCQkJICAgICAgKTsK LQkJCXBpcGVtc2coQ0VWX1VCSU4pOyAvKiBUZWxsIHBhcmVudCAqLwotCQkJd3JpdGUoeHBpcGVb MV0sCi0JCQkgICAgICAmVEVMT1BUX1UoVEVMT1BUX0JJTkFSWSksCi0JCQkgICAgICBzaXplb2Yo VEVMT1BUX1UoVEVMT1BUX0JJTkFSWSkpCi0JCQkgICAgICApOwotCQkJY2tfc25kbXNnKCk7CS8q IFRlbGwgdGhlIHBhcmVudCBmb3JrICovCi0JCSAgICB9Ci0JCSAgICBjb250aW51ZTsKLQkJfSBl bHNlIGlmICh0eCA9PSAtMSkgewkvKiBJL08gZXJyb3IgKi8KLQkJICAgIGlmICghcXVpZXQpCi0J CSAgICAgIHByaW50ZigiXHJcbkNvbW11bmljYXRpb25zIGRpc2Nvbm5lY3QgIik7Ci0jaWZkZWYg Tk9TRVRCVUYKLQkJICAgIGZmbHVzaChzdGRvdXQpOwotI2VuZGlmIC8qIE5PU0VUQlVGICovCi0J CSAgICBkb2xvZ2VuZCgpOwotCQkgICAgZGVidWcoRjExMSwiQ09OTkVDVCBjb25jbGQgaS9vIGVy cm9yIDIiLGNrX2VycnN0cigpLGVycm5vKTsKLQkJICAgIHBpcGVtc2coQ0VWX0hVUCk7Ci0JCSAg ICBja19zbmRtc2coKTsJLyogV2FpdCB0byBiZSBraWxsZWQgKi8KLQkJICAgIC8qIE5PVFJFQUNI RUQgKi8KLQkJfSBlbHNlIGlmICh0eCA9PSAtMykgewkvKiBJL08gZXJyb3IgKi8KLQkJICAgIGlm ICghcXVpZXQpCi0JCSAgICAgIHByaW50ZigiXHJcbkNvbm5lY3Rpb24gY2xvc2VkIGR1ZSB0byB0 ZWxuZXQgcG9saWN5ICIpOwotI2lmZGVmIE5PU0VUQlVGCi0JCSAgICBmZmx1c2goc3Rkb3V0KTsK LSNlbmRpZiAvKiBOT1NFVEJVRiAqLwotCQkgICAgZG9sb2dlbmQoKTsKLQkJICAgIGRlYnVnKEYx MTEsIkNPTk5FQ1QgY29uY2xkIGkvbyBlcnJvciAyIixja19lcnJzdHIoKSxlcnJubyk7Ci0JCSAg ICBwaXBlbXNnKENFVl9IVVApOwotCQkgICAgY2tfc25kbXNnKCk7CS8qIFdhaXQgdG8gYmUga2ls bGVkICovCi0JCSAgICAvKiBOT1RSRUFDSEVEICovCi0JCX0gZWxzZSBpZiAodHggPT0gLTIpIHsJ LyogSS9PIGVycm9yICovCi0JCSAgICBpZiAoIXF1aWV0KQotCQkgICAgICBwcmludGYoIlxyXG5D b25uZWN0aW9uIGNsb3NlZCBieSBwZWVyICIpOwotI2lmZGVmIE5PU0VUQlVGCi0JCSAgICBmZmx1 c2goc3Rkb3V0KTsKLSNlbmRpZiAvKiBOT1NFVEJVRiAqLwotCQkgICAgZG9sb2dlbmQoKTsKLQkJ ICAgIGRlYnVnKEYxMTEsIkNPTk5FQ1QgY29uY2xkIGkvbyBlcnJvciAyIixja19lcnJzdHIoKSxl cnJubyk7Ci0JCSAgICBwaXBlbXNnKENFVl9IVVApOwotCQkgICAgY2tfc25kbXNnKCk7CS8qIFdh aXQgdG8gYmUga2lsbGVkICovCi0JCSAgICAvKiBOT1RSRUFDSEVEICovCi0JCX0gZWxzZSBpZiAo KHR4ID09IDEpICYmICghZHVwbGV4KSkgeyAvKiBFQ0hPIGNoYW5nZSAqLwotCQkgICAgZHVwbGV4 ID0gMTsJCS8qIFR1cm4gb24gbG9jYWwgZWNobyAqLwotCQkgICAgZGVidWcoRjEwMSwiQ09OTkVD VCBURUxORVQgZHVwbGV4IGNoYW5nZSIsIiIsZHVwbGV4KTsKLQkJICAgIHBpcGVtc2coQ0VWX0RV UCk7CS8qIFRlbGwgcGFyZW50ICovCi0JCSAgICB3cml0ZSh4cGlwZVsxXSwgJmR1cGxleCwgc2l6 ZW9mKGR1cGxleCkpOwotCQkgICAgY2tfc25kbXNnKCk7CS8qIFRlbGwgdGhlIHBhcmVudCBmb3Jr ICovCi0JCSAgICBjb250aW51ZTsKLQkJfSBlbHNlIGlmICgodHggPT0gMikgJiYgKGR1cGxleCkp IHsgLyogRUNITyBjaGFuZ2UgKi8KLQkJICAgIGR1cGxleCA9IDA7Ci0JCSAgICBkZWJ1ZyhGMTAx LCJDT05ORUNUIFRFTE5FVCBkdXBsZXggY2hhbmdlIiwiIixkdXBsZXgpOwotCQkgICAgcGlwZW1z ZyhDRVZfRFVQKTsKLQkJICAgIHdyaXRlKHhwaXBlWzFdLCAmZHVwbGV4LCBzaXplb2YoZHVwbGV4 KSk7Ci0JCSAgICBja19zbmRtc2coKTsKLQkJICAgIGNvbnRpbnVlOwotCQl9IGVsc2UgaWYgKHR4 ID09IDMpIHsgLyogUXVvdGVkIElBQyAqLwotCQkgICAgYyA9IHBhcml0eSA/IDEyNyA6IDI1NTsK LQkJfQotI2lmZGVmIElLU19PUFRJT04KLSAgICAgICAgICAgICAgICBlbHNlIGlmICh0eCA9PSA0 KSB7ICAgLyogSUtTIFN0YXRlIENoYW5nZSAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoVEVM T1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0ICYmCi0JCQkhdGNwX2luY29taW5n Ci0JCQkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhlcmUgd2UgbmVlZCB0byBwcmlu dCBhIG1zZyB0aGF0IHRoZSBvdGhlciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgLyogc2lk ZSBpcyBpbiBTRVJWRVIgbW9kZSBhbmQgdGhhdCBSRU1PVEUgICAgICovCi0gICAgICAgICAgICAg ICAgICAgICAgICAvKiBjb21tYW5kcyBzaG91bGQgYmUgdXNlZC4gIEFuZCBDT05ORUNUIG1vZGUg Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNob3VsZCBiZSBlbmRlZC4gICAgICAgICAg ICAgICAgICAgICAgICAgICAqLwotCQkJYWN0aXZlID0gMDsKLQkJICAgIH0KLQkJfQotI2VuZGlm IC8qIElLU19PUFRJT04gKi8KLSAgICAgICAgICAgICAgICBlbHNlIGlmICh0eCA9PSA2KSB7Ci0g ICAgICAgICAgICAgICAgICAgIC8qIERPIExPR09VVCByZWNlaXZlZCAqLwotCQkgICAgaWYgKCFx dWlldCkKLQkJICAgICAgcHJpbnRmKCJcclxuUmVtb3RlIExvZ291dCAiKTsKLSNpZmRlZiBOT1NF VEJVRgotCQkgICAgZmZsdXNoKHN0ZG91dCk7Ci0jZW5kaWYgLyogTk9TRVRCVUYgKi8KLQkJICAg IGRlYnVnKEYxMDAsIkNPTk5FQ1QgUmVtb3RlIExvZ291dCIsIiIsMCk7Ci0JCSAgICBwaXBlbXNn KENFVl9IVVApOwotCQkgICAgY2tfc25kbXNnKCk7CS8qIFdhaXQgdG8gYmUga2lsbGVkICovCi0J CSAgICAvKiBOT1RSRUFDSEVEICovCi0gICAgICAgICAgICAgICAgfSBlbHNlCi0JCSAgY29udGlu dWU7CQkvKiBOZWdvdGlhdGlvbiBPSywgZ2V0IG5leHQgY2hhci4gKi8KLQotCSAgICB9IGVsc2Ug aWYgKHBhcml0eSkKLQkgICAgICBjICY9IDB4N2Y7Ci0KLSAgICAgICAgICAgIGlmIChURUxPUFRf TUUoVEVMT1BUX0VDSE8pICYmIHRuX3JlbV9lY2hvKQotICAgICAgICAgICAgICAgIHR0b2MoYyk7 ICAgICAgICAgICAgICAgIC8qIEknbSBlY2hvaW5nIGZvciB0aGUgcmVtb3RlICovCi0jZW5kaWYg LyogVE5DT0RFICovCi0KLQkgICAgaWYgKGRlYnNlcykgewkJLyogT3V0cHV0IGNoYXJhY3RlciB0 byBzY3JlZW4gKi8KLQkJY2hhciAqczsJCS8qIERlYnVnZ2luZyBkaXNwbGF5Li4uICovCi0JCXMg PSBkYmNocihjKTsKLQkJd2hpbGUgKCpzKQotCQkgIGNrY3B1dGMoKnMrKyk7Ci0JICAgIH0gZWxz ZSB7CQkJLyogUmVndWxhciBkaXNwbGF5IC4uLiAqLwotCQljICY9IGNtYXNrOwkJLyogQXBwbHkg S2VybWl0LXRvLXJlbW90ZSBtYXNrICovCi0jaWZkZWYgQ0tfQVVUT0RMCi0vKgotICBBdXRvZG93 bmxvYWQuICBDaGVjayBmb3IgS2VybWl0IFMgcGFja2V0IHByaW9yIHRvIHRyYW5zbGF0aW9uLCBz aW5jZSB0aGF0Ci0gIGNhbiBjaGFuZ2UgdGhlIHBhY2tldCBhbmQgbWFrZSBpdCB1bnJlY29nbml6 YWJsZSAoYXMgd2hlbiB0aGUgdGVybWluYWwKLSAgY2hhcmFjdGVyIHNldCBpcyBhbiBJU08gNjQ2 IG9uZSkuLi4gIERpdHRvIGZvciBabW9kZW0gc3RhcnQgcGFja2V0LgotKi8KLQkJaWYgKGF1dG9k bAkJLyogQXV0b2Rvd25sb2FkIGVuYWJsZWQ/ICovCi0jaWZkZWYgSUtTX09QVElPTgotCQkgICAg fHwgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydAotI2VuZGlmIC8qIElL U19PUFRJT04gKi8KLQkJICAgICkgewotCQkgICAgaW50IGs7Ci0JCSAgICBrID0ga3N0YXJ0KChD SEFSKWMpOyAvKiBLZXJtaXQgUyBvciBJIHBhY2tldD8gKi8KLSNpZmRlZiBDS19YWVoKLQkJICAg IGlmICghayAmJiB6bWRsb2spCS8qIE9yIGFuICJzeiIgc3RhcnQ/ICovCi0JCSAgICAgIGsgPSB6 c3RhcnQoKENIQVIpYyk7Ci0jZW5kaWYgLyogQ0tfWFlaICovCi0JCSAgICBpZiAoaykgewotCQkJ aW50IGtzaWduID0gMDsKLQkJCWRlYnVnKEYxMDEsIkNPTk5FQ1QgYXV0b2Rvd25sb2FkIGsiLCIi LGspOwotCQkJaWYgKGsgPCAwKSB7IC8qIE1pbnVzLVByb3RvY29sPyAqLwotI2lmZGVmIE5PU0VS VkVSCi0JCQkgICAgZ290byBub3NlcnZlcjsgLyogTmVlZCBzZXJ2ZXIgbW9kZSBmb3IgdGhpcyAq LwotI2Vsc2UKLQkJCSAgICBrc2lnbiA9IDE7IC8qIFJlbWVtYmVyICovCi0JCQkgICAgayA9IDAg LSBrOyAvKiBDb252ZXJ0IHRvIGFjdHVhbCBwcm90b2NvbCAqLwotCQkJICAgIGp1c3RvbmUgPSAx OyAvKiBGbGFnIGZvciBwcm90b2NvbCBtb2R1bGUgKi8KLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwot CQkJfSBlbHNlCi0JCQkgIGp1c3RvbmUgPSAwOwotCQkJay0tOwkJLyogQWRqdXN0IFtrel1zdGFy dCdzIHJldHVybiB2YWx1ZSAqLwotCQkJaWYgKGsgPT0gUFJPVE9fSwotI2lmZGVmIENLX1hZWgot CQkJICAgIHx8IGsgPT0gUFJPVE9fWgotI2VuZGlmIC8qIENLX1hZWiAqLwotCQkJICAgICkgewot Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm93IGRhbWFnZSB0aGUgcGFja2V0IHNv IHRoYXQgaXQgZG9lcyBub3QgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRy aWdnZXIgYXV0b2Rvd25sb2FkIGRldGVjdGlvbiBvbiBzdWJzcXVlbnQgKi8KLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBsaW5rcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICovCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9PSBQUk9UT19L KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpLCBsZW4gPSBzdHJsZW4o KGNoYXIqKWtzYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0g MDsgaSA8IGxlbjsgaSsrKQotCQkJCSAgY2tjcHV0YyhCUyk7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgfQotI2lmZGVmIENLX1hZWgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs c2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykKLQkJCQkgIGNrY3B1 dGMoQ0FOKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfWFla ICovCi0JCQkgICAgLyogTm90aWZ5IHBhcmVudCAqLwotCQkJICAgIHBpcGVtc2coanVzdG9uZSA/ IENFVl9BVUwgOiBDRVZfQURMKTsKLS8qCi0gIFNlbmQgb3VyIG1lbW9yeSBiYWNrIHVwIHRvIHRo ZSB0b3AgZm9yayB0aHJ1IHRoZSBwaXBlLgotICBDQVJFRlVMIC0tIFdyaXRlIHRoaXMgc3R1ZmYg aW4gdGhlIHNhbWUgb3JkZXIgaXQgaXMgdG8gYmUgcmVhZCEKLSovCi0JCQkgICAgLyogQ29weSBv dXIgS2VybWl0IHBhY2tldCB0byB0aGUgcGFyZW50IGZvcmsgKi8KLQkJCSAgICBuID0gKGludCkg c3RybGVuKChjaGFyICopa3NidWYpOwotCQkJICAgIHdyaXRlKHhwaXBlWzFdLCAoY2hhciAqKSZu LCBzaXplb2YobikpOwotCQkJICAgIGlmIChuID4gMCkKLQkJCSAgICAgIHdyaXRlKHhwaXBlWzFd LCAoY2hhciAqKWtzYnVmLCBuKzEpOwotCQkJICAgIGRlYnVnKEYxMTEsIkNPTk5FQ1QgYXV0b2Rv d25sb2FkIGtzYnVmIixrc2J1ZixuKTsKLQkJCSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGF1dG9k b3dubG9hZCBqdXN0b25lIiwiIiwKLQkJCQkgIGp1c3RvbmUpOwotCQkJICAgIC8qIENvbnN0cnVj dCB0aGUgQVBDIGNvbW1hbmQgKi8KLQkJCSAgICBzcHJpbnRmKGFwY2J1ZiwKLQkJCQkgICAgInNl dCBwcm90byAlcywgJXMsIHNldCBwcm90byAlcyIsCi0JCQkJICAgIHB0YWJba10ucF9uYW1lLAot CQkJCSAgICBrc2lnbiA/ICJzZXJ2ZXIiIDogInJlY2VpdmUiLAotCQkJCSAgICBwdGFiW3Byb3Rv Y29sXS5wX25hbWUKLQkJCQkgICAgKTsKLQkJCSAgICBhcGNsZW5ndGggPSBzdHJsZW4oYXBjYnVm KTsKLQkJCSAgICBkZWJ1ZyhGMTExLCJDT05ORUNUIGtzYnVmIixrc2J1ZixrKTsKLQkJCSAgICBk ZWJ1ZyhGMTEwLCJDT05ORUNUIGF1dG9kb3dubG9hZCIsYXBjYnVmLDApOwotCQkJICAgIGFwY2Fj dGl2ZSA9IEFQQ19MT0NBTDsKLQkJCSAgICBja2NwdXRmKCk7CS8qIEZvcmNlIHNjcmVlbiB1cGRh dGUgKi8KLQotCQkJICAgIC8qIFdyaXRlIGJ1ZmZlciBpbmNsdWRpbmcgdHJhaWxpbmcgTlVMIGJ5 dGUgKi8KLQkJCSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIHdyaXRlIHhwaXBlIGFwY2xlbmd0aCIs IiIsCi0JCQkJICBhcGNsZW5ndGgpOwotCQkJICAgIHdyaXRlKHhwaXBlWzFdLAotCQkJCSAgKGNo YXIgKikmYXBjbGVuZ3RoLAotCQkJCSAgc2l6ZW9mKGFwY2xlbmd0aCkKLQkJCQkgICk7Ci0JCQkg ICAgZGVidWcoRjExMCwiQ09OTkVDVCB3cml0ZSB4cGlwZSBhcGNidWYiLGFwY2J1ZiwwKTsKLQkJ CSAgICB3cml0ZSh4cGlwZVsxXSwgYXBjYnVmLCBhcGNsZW5ndGgrMSk7Ci0KLQkJCSAgICAvKiBD b3B5IG91ciBpbnB1dCBidWZmZXIgdG8gdGhlIHBhcmVudCBmb3JrICovCi0KLQkJCSAgICBkZWJ1 ZyhGMTAxLCJDT05ORUNUIGF1dG9kb3dubG9hZCBjb21wbGV0ZSBpYmMiLAotCQkJCSAgIiIsaWJj KTsKLQkJCSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGF1dG9kb3dubG9hZCBjb21wbGV0ZSBvYmMi LAotCQkJCSAgIiIsb2JjKTsKLQkJCSAgICB3cml0ZSh4cGlwZVsxXSwgKGNoYXIgKikmaWJjLCBz aXplb2YoaWJjKSk7Ci0JCQkgICAgaWYgKGliYyA+IDApIHsKLQkJCQl3cml0ZSh4cGlwZVsxXSwg KGNoYXIgKikmaWJwLCBzaXplb2YoaWJwKSk7Ci0JCQkJd3JpdGUoeHBpcGVbMV0sIGlicCwgaWJj KTsKLQkJCSAgICB9Ci0JCQkgICAgY2tfc25kbXNnKCk7IC8qIFdhaXQgdG8gYmUga2lsbGVkICov Ci0JCQkgICAgLyogTk9UUkVBQ0hFRCAqLwotCQkJfQotCQkgICAgfQotCQl9Ci0jaWZkZWYgTk9T RVJWRVIKLQkgICAgICBub3NlcnZlcjoKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotI2VuZGlmIC8q IENLX0FVVE9ETCAqLwotCQlpZiAoc29zaSkgewkJLyogSGFuZGxlIFNJL1NPICovCi0JCSAgICBp ZiAoYyA9PSBTTykgewkvKiBTaGlmdCBPdXQgKi8KLQkJCWluc2hpZnQgPSAxOwotCQkJY29udGlu dWU7Ci0JCSAgICB9IGVsc2UgaWYgKGMgPT0gU0kpIHsgLyogU2hpZnQgSW4gKi8KLQkJCWluc2hp ZnQgPSAwOwotCQkJY29udGludWU7Ci0JCSAgICB9Ci0JCSAgICBpZiAoaW5zaGlmdCkgYyB8PSAw MjAwOwotCQl9Ci0JCWlueGJ1ZlswXSA9IGM7CQkvKiBJbiBjYXNlIHRoZXJlIGlzIG5vIHRyYW5z bGF0aW9uICovCi0JCWlueGNvdW50ID0gMTsJCS8qIC4uLiAqLwotI2lmbmRlZiBOT0NTRVRTCi0J CWlmIChpbmVzYyA9PSBFU19OT1JNQUwpCXsgLyogSWYgbm90IGluIGFuIGVzY2FwZSBzZXF1ZW5j ZSAqLwotI2lmZGVmIFVOSUNPREUKLQkJICAgIGludCB4OwkJLyogVHJhbnNsYXRlIGNoYXJhY3Rl ciBzZXRzICovCi0JCSAgICBDSEFSIGNoOwotCQkgICAgY2ggPSBjOwotCQkgICAgaWYgKHVuaWNv ZGUgPT0gMSkgewkvKiBSZW1vdGUgaXMgVVRGLTggKi8KLQkJCXggPSB1X3RvX2IoY2gpOwotCQkJ aWYgKHggPCAwKQotCQkJICBjb250aW51ZTsKLQkJCWlueGJ1ZlswXSA9ICh1bnNpZ25lZCkoeCAm IDB4ZmYpOwotCQkJYyA9IGlueGJ1ZlswXTsKLQkJICAgIH0gZWxzZSBpZiAodW5pY29kZSA9PSAy KSB7IC8qIExvY2FsIGlzIFVURi04ICovCi0JCQlpbnhjb3VudCA9IGJfdG9fdShjaCxpbnhidWYs T1VUWEJVRlNJWix0Y3NzaXplKTsKLQkJCWMgPSBpbnhidWZbMF07Ci0JCSAgICB9IGVsc2Ugewot I2VuZGlmIC8qIFVOSUNPREUgKi8KLQkJCWlmIChzeGkpIGMgPSAoKnN4aSkoKENIQVIpYyk7Ci0J CQlpZiAocnhpKSBjID0gKCpyeGkpKChDSEFSKWMpOwotCQkJaW54YnVmWzBdID0gYzsKLSNpZmRl ZiBVTklDT0RFCi0JCSAgICB9Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotCQl9Ci0jZW5kaWYgLyog Tk9DU0VUUyAqLwotCi0jaWZuZGVmIE5PRVNDU0VRCi0JCWlmIChlc2NzZXEpCQkvKiBJZiBoYW5k bGluZyBlc2NhcGUgc2VxdWVuY2VzICovCi0JCSAgYXBjcmMgPSBjaGthZXMoKGNoYXIpYyk7IC8q IHVwZGF0ZSBvdXIgc3RhdGUgKi8KLSNpZmRlZiBDS19BUEMKLS8qCi0gIElmIHdlIGFyZSBoYW5k bGluZyBBUENzLCB3ZSBoYXZlIHNldmVyYWwgcG9zc2liaWxpdGllcyBhdCB0aGlzIHBvaW50Ogot ICAgMS4gT3JkaW5hcnkgY2hhcmFjdGVyIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHNjcmVlbi4KLSAg IDIuIEFuIEVzYzsgd2UgY2FuJ3Qgd3JpdGUgaXQgYmVjYXVzZSBpdCBtaWdodCBiZSB0aGUgYmVn aW5uaW5nIG9mIGFuIEFQQy4KLSAgIDMuIFRoZSBjaGFyYWN0ZXIgZm9sbG93aW5nIGFuIEVzYywg aW4gd2hpY2ggY2FzZSB3ZSB3cml0ZSBFc2MsIHRoZW4gY2hhciwKLSAgICAgIGJ1dCBvbmx5IGlm IHdlIGhhdmUgbm90IGp1c3QgZW50ZXJlZCBhbiBBUEMgc2VxdWVuY2UuCi0qLwotCQlpZiAoZXNj c2VxICYmIChhcGNzdGF0dXMgJiBBUENfT04pKSB7Ci0JCSAgICBpZiAoaW5lc2MgPT0gRVNfR09U RVNDKQkvKiBEb24ndCB3cml0ZSBFU0MgeWV0ICovCi0JCSAgICAgIGNvbnRpbnVlOwotCQkgICAg ZWxzZSBpZiAob2xkZXNjID09IEVTX0dPVEVTQyAmJiAhYXBjYWN0aXZlKSB7Ci0JCQlja2NwdXRj KEVTQyk7CS8qIFdyaXRlIHNhdmVkIEVTQyAqLwotCQkJaWYgKHNlc2xvZyAmJiAhc2Vzc2Z0KQot CQkJICBsb2djaGFyKChjaGFyKUVTQyk7Ci0JCSAgICB9IGVsc2UgaWYgKGFwY3JjKSB7CS8qIFdl IGhhdmUgYW4gQVBDICovCi0JCQlkZWJ1ZyhGMTExLCJDT05ORUNUIEFQQyBjb21wbGV0ZSIsYXBj YnVmLGFwY2xlbmd0aCk7Ci0JCQlja2NwdXRmKCk7CQkvKiBGb3JjZSBzY3JlZW4gdXBkYXRlICov Ci0JCQlwaXBlbXNnKENFVl9BUEMpOwkvKiBOb3RpZnkgcGFyZW50ICovCi0JCQl3cml0ZSh4cGlw ZVsxXSwKLQkJCSAgICAgIChjaGFyICopJmFwY2xlbmd0aCwKLQkJCSAgICAgIHNpemVvZihhcGNs ZW5ndGgpCi0JCQkgICAgICApOwotCQkJLyogV3JpdGUgYnVmZmVyIGluY2x1ZGluZyB0cmFpbGlu ZyBOVUwgYnl0ZSAqLwotCi0JCQl3cml0ZSh4cGlwZVsxXSwgYXBjYnVmLCBhcGNsZW5ndGgrMSk7 Ci0KLQkJCS8qIENvcHkgb3VyIGlucHV0IGJ1ZmZlciB0byB0aGUgcGFyZW50IGZvcmsgKi8KLQot CQkJZGVidWcoRjEwMSwiQ09OTkVDVCBBUEMgY29tcGxldGUgaWJjIiwiIixpYmMpOwotCQkJZGVi dWcoRjEwMSwiQ09OTkVDVCBBUEMgY29tcGxldGUgb2JjIiwiIixvYmMpOwotCQkJd3JpdGUoeHBp cGVbMV0sIChjaGFyICopJmliYywgc2l6ZW9mKGliYykpOwotCQkJaWYgKGliYyA+IDApIHsKLQkJ CSAgICB3cml0ZSh4cGlwZVsxXSwgKGNoYXIgKikmaWJwLCBzaXplb2YoaWJwKSk7Ci0JCQkgICAg d3JpdGUoeHBpcGVbMV0sIGlicCwgaWJjKTsKLQkJCX0KLQkJCWNrX3NuZG1zZygpOwkvKiBXYWl0 IHRvIGJlIGtpbGxlZCAqLwotCQkJLyogTk9UUkVBQ0hFRCAqLwotCQkgICAgfQotCQl9Ci0jZW5k aWYgLyogQ0tfQVBDICovCi0jZW5kaWYgLyogTk9FU0NTRVEgKi8KLQotCQlmb3IgKGkgPSAwOyBp IDwgaW54Y291bnQ7IGkrKykgeyAvKiBMb29wIHRocnUgKi8KLQkJICAgIGMgPSBpbnhidWZbaV07 CS8qIGlucHV0IGV4cGFuc2lvbiBidWZmZXIuLi4gKi8KLQkJICAgIGlmICgKLSNpZmRlZiBDS19B UEMKLQkJCSFhcGNhY3RpdmUJLyogSWdub3JlIEFQQyBzZXF1ZW5jZXMgKi8KLSNlbHNlCi0JCQkx Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0JCQkpIHsKLQkJCWMgJj0gY21kbXNrOwkvKiBBcHBseSBj b21tYW5kIG1hc2suICovCi0JCQlpZiAoYyA9PSBDUiAmJiB0dF9jcmQpIHsgLyogU0VUIFRFUk0g Q1ItRElTUExBIENSTEY/ICovCi0JCQkgICAgY2tjcHV0YyhjKTsJLyogWWVzLCBvdXRwdXQgQ1Ig Ki8KLQkJCSAgICBpZiAoc2VzbG9nICYmICFzZXNzZnQpCi0JCQkgICAgICBsb2djaGFyKChjaGFy KWMpOwotCQkJICAgIGMgPSBMRjsJLyogYW5kIGluc2VydCBhIGxpbmVmZWVkICovCi0JCQl9Ci0J CQlpZiAoYyA9PSBMRiAmJiB0dF9sZmQpIHsgLyogU0VUIFRFUk0gQ1ItRElTUExBIENSTEY/ICov Ci0JCQkgICAgY2tjcHV0YyhDUik7IC8qIFllcywgb3V0cHV0IENSICovCi0JCQkgICAgaWYgKHNl c2xvZyAmJiAhc2Vzc2Z0KSBsb2djaGFyKChjaGFyKUNSKTsKLQkJCX0KLQkJCWNrY3B1dGMoYyk7 CS8qIFdyaXRlIGNoYXJhY3RlciB0byBzY3JlZW4gKi8KLQkJICAgIH0KLQkJICAgIGlmIChzZXNs b2cgJiYgIXNlc3NmdCkgLyogSGFuZGxlIHNlc3Npb24gbG9nICovCi0JCSAgICAgIGxvZ2NoYXIo KGNoYXIpYyk7Ci0jaWZkZWYgQ0tfVFJJR0dFUgotCQkgICAgLyogQ2hlY2sgZm9yIHRyaWdnZXIg c3RyaW5nICovCi0JCSAgICBpZiAodHRfdHJpZ2dlclswXSkgaWYgKChpeCA9IGF1dG9leGl0Y2hr KChDSEFSKWMpKSA+IC0xKSB7Ci0JCQlja2NwdXRmKCk7CS8qIEZvcmNlIHNjcmVlbiB1cGRhdGUg Ki8KLSNpZmRlZiBOT1NFVEJVRgotCQkJZmZsdXNoKHN0ZG91dCk7CS8qIEkgbWVhbiByZWFsbHkg Zm9yY2UgaXQgKi8KLSNlbmRpZiAvKiBOT1NFVEJVRiAqLwotCQkJcGlwZW1zZyhDRVZfVFJJKTsg LyogU2VuZCB1cCB0cmlnZ2VyIGluZGljYXRpb24gKi8KLQkJCXdyaXRlKHhwaXBlWzFdLCAoY2hh ciAqKSZpeCwgc2l6ZW9mKGl4KSk7IC8qIGluZGV4ICovCi0JCQl3cml0ZSh4cGlwZVsxXSwgKGNo YXIgKikmaWJjLCBzaXplb2YoaWJjKSk7Ci0JCQlpZiAoaWJjID4gMCkgewotCQkJICAgIHdyaXRl KHhwaXBlWzFdLCAoY2hhciAqKSZpYnAsIHNpemVvZihpYnApKTsKLQkJCSAgICB3cml0ZSh4cGlw ZVsxXSwgaWJwLCBpYmMpOwotCQkJfQotCQkJZGVidWcoRjEwMCwiQ09OTkVDVCBjb25jbGQgdHJp Z2dlciIsIiIsMCk7Ci0JCQlja19zbmRtc2coKTsJLyogV2FpdCB0byBiZSBraWxsZWQgKi8KLQkJ CWFjdGl2ZSA9IDA7CS8qIFNob3VsZG4ndCBiZSBuZWNlc3NhcnkuLi4gKi8KLQkJCWJyZWFrOwot CQkgICAgfQotCQkgICAgLyogTk9UUkVBQ0hFRCAqLwotI2VuZGlmIC8qIENLX1RSSUdHRVIgKi8K LQkJfQotCSAgICB9Ci0jaWZkZWYgQU5ZWDI1Ci0JfQotI2VuZGlmIC8qIEFOWVgyNSAqLwotICAg IH0KLX0KLQotCi0vKiAgQyBPIE4gRSBDIFQgIC0tICBJbnRlcmFjdGl2ZSB0ZXJtaW5hbCBjb25u ZWN0aW9uICAqLwotCi1pbnQKLWNvbmVjdCgpIHsKLSAgICBpbnQJbjsJCQkvKiBHZW5lcmFsIHB1 cnBvc2UgY291bnRlciAqLwotICAgIGludCBpOwkJCS8qIEZvciBsb29wcy4uLiAqLwotICAgIGlu dCBjOwkJCS8qIGMgaXMgYSBjaGFyYWN0ZXIsIGJ1dCBtdXN0IGJlIHNpZ25lZAotCQkJCSAgIGlu dGVnZXIgdG8gcGFzcyB0aHJ1IC0xLCB3aGljaCBpcyB0aGUKLQkJCQkgICBtb2RlbSBkaXNjb25u ZWN0aW9uIHNpZ25hbCwgYW5kIGlzCi0JCQkJICAgZGlmZmVyZW50IGZyb20gdGhlIGNoYXJhY3Rl ciAwMzc3ICovCi0gICAgaW50IGMyOwkJCS8qIEEgY29weSBvZiBjICovCi0gICAgaW50IGNzYXZl OwkJCS8qIEFub3RoZXIgY29weSBvZiBjICovCi0jaWZuZGVmIE5PRVNDU0VRCi0gICAgaW50IGFw Y3JjOwotI2VuZGlmIC8qIE5PRVNDU0VRICovCi0KLSAgICBpbnQgY29ucmV0ID0gMDsJCQkvKiBS ZXR1cm4gdmFsdWUgZnJvbSBjb25lY3QoKSAqLwotICAgIGludCBtc2dmbGcgPSAwOwotICAgIC8q IGpiY2hrc3VtID0gLTFMOyAqLwotICAgIGpic2V0ID0gMDsJCQkJLyogam1wX2J1ZiBub3Qgc2V0 IHlldCwgZG9uJ3QgdXNlIGl0ICovCi0gICAgZGVib2sgPSAxOwotCi0gICAgZGVidWcoRjEwMSwi Q09OTkVDVCBmb3JrIHNpZ25hbCIsIiIsQ0tfRk9SS19TSUcpOwotICAgIGRlYnVnKEYxMDEsIkNP Tk5FQ1QgZW50cnkgcGlkIiwiIixwaWQpOwotCi0gICAgbXNnZmxnID0gIXF1aWV0Ci0jaWZkZWYg Q0tfQVBDCi0gICAgICAmJiAhYXBjYWN0aXZlCi0jZW5kaWYgLyogQ0tfQVBDICovCi0JOwotLyoK LSAgVGhlIGZvbGxvd2luZyBpcyB0byBoYW5kbGUgYSBmb3JrIGxlZnQgYmVoaW5kIGlmIHdlIGV4 aXQgQ09OTkVDVCBtb2RlCi0gIHdpdGhvdXQga2lsbGluZyBpdCwgYW5kIHRoZW4gcmV0dXJuIHRv IENPTk5FQ1QgbW9kZS4gIFRoaXMgaGFwcGVuZWQgaW4KLSAgSFAtVVgsIHdoZXJlIHRoZSBSZXNl dCBrZXkgd291bGQgcmFpc2UgU0lHSU5UIGV2ZW4gdGhvdWdoIFNJR0lOVCB3YXMgc2V0IHRvCi0g IFNJR19JR04uICBUaGUgY29kZSBiZWxvdyBmaXhlcyB0aGUgc3ltcHRvbTsgdGhlIHJlYWwgZml4 IGlzIGluIHRoZSBtYWluCi0gIFNJR0lOVCBoYW5kbGVyIChpZiBTSUdJTlQgc2hvd3MgdXAgZHVy aW5nIENPTk5FQ1QsIGp1c3QgcmV0dXJuIHJhdGhlciB0aGFuCi0gIHRha2luZyB0aGUgbG9uZ2pt cCkuCi0qLwotICAgIGlmIChwaWQpIHsJCQkJLyogVGhpcyBzaG91bGQgYmUgMCAqLwotCWludCB4 ID0gMDsKLQlkZWJ1ZyhGMTAxLCJDT05ORUNUIGVudHJ5IGtpbGxpbmcgc3RhbGUgcGlkIiwiIixw aWQpOwotCXByaW50ZigiV0FSTklORzogT2xkIENPTk5FQ1QgZm9yayBzZWVtcyB0byBiZSBhY3Rp dmUuXG4iKTsKLQlwcmludGYoIkF0dGVtcHRpbmcgdG8gcmVtb3ZlIGl0Li4uIik7Ci0jaWZkZWYg QkVPU09SQkVCT1gKLQl7Ci0JICAgIGxvbmcgcmV0X3ZhbDsKLQkgICAgeCA9IGtpbGwocGlkLFNJ R0tJTExUSFIpOyAvKiBLaWxsIGxvd2VyIGZvcmsgKi8KLQkgICAgd2FpdF9mb3JfdGhyZWFkIChw aWQsICZyZXRfdmFsKTsKLQl9Ci0jZWxzZQotI2lmZGVmIFBsYW45Ci0JeCA9IGtpbGwocGlkLFNJ R0tJTEwpOwkJLyogS2lsbCBsb3dlciBmb3JrICovCi0jZWxzZQotCXggPSBraWxsKHBpZCw5KTsK LSNlbmRpZiAvKiBQbGFuOSAqLwotI2VuZGlmIC8qIEJFT1NPUkJFQk9YICovCi0Jd2FpdCgoV0FJ VF9UICopMCk7CQkvKiBXYWl0IHRpbGwgZ29uZS4gKi8KLQlpZiAoeCA8IDApIHsKLQkgICAgcHJp bnRmKCJFUlJPUjogRmFpbHVyZSB0byBraWxsIHBpZCAlZDogJXMsIGVycm5vPSVkXG4iLAotCQkg ICAoaW50KSBwaWQsIGNrX2VycnN0cigpLCBlcnJubyk7Ci0JICAgIGRlYnVnKEYxMTEsIkNPTk5F Q1QgZXJyb3Iga2lsbGluZyBzdGFsZSBwaWQiLGNrX2VycnN0cigpLHBpZCk7Ci0JfQotCXBpZCA9 IChQSURfVCkgMDsKLQlwcmludGYoIlxuIik7Ci0gICAgfQotICAgIHNpZ25hbChDS19GT1JLX1NJ RywgU0lHX0lHTik7CS8qIEluaXRpYWwgQ0tfRk9SS19TSUcgaGFuZGxpbmcsICovCi0vKgotICBU aGUgZm9sbG93aW5nIHR0aW1vZmYoKSBjYWxsIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5LCBidXQg ZXZpZGVudGx5IHRoZXJlCi0gIGFyZSBjYXNlcyB3aGVyZSBhIHRpbWVyIGlzIGxlZnQgYWN0aXZl IGFuZCB0aGVuIGdvZXMgb2ZmLCB0YWtpbmcgYSBsb25nam1wCi0gIHRvIG5vd2hlcmUgYWZ0ZXIg dGhlIHByb2dyYW0ncyBzdGFjayBoYXMgY2hhbmdlZC4gIEluIGFueSBjYXNlLCB0aGlzIGlzCi0g IHNhZmUgYmVjYXVzZSB0aGUgQ09OTkVDVCBtb2R1bGUgdXNlcyBubyB0aW1lciBvZiBhbnkga2lu ZCwgYW5kIG5vIG90aGVyIHRpbWVyCi0gIHNob3VsZCBiZSBhcm1lZCB3aGlsZSBLZXJtaXQgaXMg aW4gQ09OTkVDVCBtb2RlLgotKi8KLSAgICB0dGltb2ZmKCk7CQkJCS8qIFR1cm4gb2ZmIGFueSB0 aW1lciBpbnRlcnJ1cHRzICovCi0KLSNpZmRlZiBDS19UUklHR0VSCi0gICAgbWFrZXN0cigmdHJp Z2dlcnZhbCxOVUxMKTsJCS8qIFJlc2V0IHRyaWdnZXIgKi8KLSNlbmRpZiAvKiBDS19UUklHR0VS ICovCi0KLSAgICBpZiAoIWxvY2FsKSB7Ci0jaWZkZWYgTkVUQ09OTgotCXByaW50ZigiU29ycnks IHlvdSBtdXN0IFNFVCBMSU5FIG9yIFNFVCBIT1NUIGZpcnN0XG4iKTsKLSNlbHNlCi0JcHJpbnRm KCJTb3JyeSwgeW91IG11c3QgU0VUIExJTkUgZmlyc3RcbiIpOwotI2VuZGlmIC8qIE5FVENPTk4g Ki8KLQlnb3RvIGNvbnJldDA7Ci0gICAgfQotICAgIGlmIChzcGVlZCA8IDBMICYmIG5ldHdvcmsg PT0gMCAmJiB0dGZkZmxnID09IDApIHsKLQlwcmludGYoIlNvcnJ5LCB5b3UgbXVzdCBTRVQgU1BF RUQgZmlyc3RcbiIpOwotCWdvdG8gY29ucmV0MDsKLSAgICB9Ci0jaWZkZWYgVENQU09DS0VUCi0g ICAgaWYgKG5ldHdvcmsgJiYgKG5ldHR5cGUgIT0gTkVUX1RDUEIpCi0jaWZkZWYgU1VOWDI1Ci0g ICAgICAgICYmIChuZXR0eXBlICE9IE5FVF9TWDI1KQotI2VuZGlmIC8qIFNVTlgyNSAqLwotI2lm ZGVmIElCTVgyNQotCSYmIChuZXR0eXBlICE9IE5FVF9JWDI1KQotI2VuZGlmIC8qIElCTVgyNSAq LwotI2lmZGVmIE5FVENNRAotICAgICAgICAmJiAobmV0dHlwZSAhPSBORVRfQ01EKQotI2VuZGlm IC8qIE5FVENNRCAqLwotI2lmZGVmIE5FVFBUWQotICAgICAgICYmIChuZXR0eXBlICE9IE5FVF9Q VFkpCi0jZW5kaWYgLyogTkVUUFRZICovCi0gICAgKSB7Ci0JcHJpbnRmKCJTb3JyeSwgbmV0d29y ayB0eXBlIG5vdCBzdXBwb3J0ZWRcbiIpOwotCWdvdG8gY29ucmV0MDsKLSAgICB9Ci0jZW5kaWYg LyogVENQU09DS0VUICovCi0KLSNpZmRlZiBEWU5BTUlDCi0gICAgaWYgKCFpYnVmKSB7Ci0JaWYg KCEoaWJ1ZiA9IG1hbGxvYyhJQlVGTCsxKSkpIHsgLyogQWxsb2NhdGUgaW5wdXQgbGluZSBidWZm ZXIgKi8KLQkgICAgcHJpbnRmKCJTb3JyeSwgQ09OTkVDVCBpbnB1dCBidWZmZXIgY2FuJ3QgYmUg YWxsb2NhdGVkXG4iKTsKLQkgICAgZ290byBjb25yZXQwOwotCX0gZWxzZSB7Ci0JICAgIGlicCA9 IGlidWY7Ci0JICAgIGliYyA9IDA7Ci0JfQotICAgIH0KLSAgICBpZiAoIW9idWYpIHsKLQlpZiAo IShvYnVmID0gbWFsbG9jKE9CVUZMKzEpKSkgeyAgICAvKiBBbGxvY2F0ZSBvdXRwdXQgbGluZSBi dWZmZXIgKi8KLQkgICAgcHJpbnRmKCJTb3JyeSwgQ09OTkVDVCBvdXRwdXQgYnVmZmVyIGNhbid0 IGJlIGFsbG9jYXRlZFxuIik7Ci0JICAgIGdvdG8gY29ucmV0MDsKLQl9IGVsc2UgewotCSAgICBv YnAgPSBvYnVmOwotCSAgICBvYmMgPSAwOwotCX0KLSAgICB9Ci0gICAgaWYgKCFrYnVmKSB7Ci0J aWYgKCEoa2J1ZiA9IG1hbGxvYyhLQlVGTCsxKSkpIHsgLyogQWxsb2NhdGUga2V5Ym9hcmQgaW5w dXQgYnVmZmVyICovCi0JICAgIHByaW50ZigiU29ycnksIENPTk5FQ1Qga2V5Ym9hcmQgYnVmZmVy IGNhbid0IGJlIGFsbG9jYXRlZFxuIik7Ci0JICAgIGdvdG8gY29ucmV0MDsKLQl9Ci0gICAgfQot ICAgIGlmICghdGVtcCkgewotCWlmICghKHRlbXAgPSBtYWxsb2MoVE1QTEVOKzEpKSkgeyAvKiBB bGxvY2F0ZSB0ZW1wb3JhcnkgYnVmZmVyICovCi0JICAgIHByaW50ZigiU29ycnksIENPTk5FQ1Qg dGVtcG9yYXJ5IGJ1ZmZlciBjYW4ndCBiZSBhbGxvY2F0ZWRcbiIpOwotCSAgICBnb3RvIGNvbnJl dDA7Ci0JfQotICAgIH0KLSNlbHNlCi0jaWZkZWYgQ09NTUVOVAotICAgIGlicCA9IGlidWY7Ci0g ICAgaWJjID0gMDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgb2JwID0gb2J1ZjsKLSAgICBv YmMgPSAwOwotI2VuZGlmIC8qIERZTkFNSUMgKi8KLQotICAgIGticCA9IGtidWY7CQkJCS8qIEFs d2F5cyBjbGVhciB0aGVzZS4gKi8KLSAgICAqa2JwID0gTlVMOwkJCQkvKiBObyBuZWVkIHRvIHBy ZXNlcnZlIHRoZW0gYmV0d2VlbiAqLwotICAgIGtiYyA9IDA7CQkJCS8qIENPTk5FQ1Qgc2Vzc2lv bnMuICovCi0KLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsKLQlkZWJ1ZyhGMTAxLCJD T05ORUNUIGNvbmVjdCBlbnRyeSB0dHlmZCIsIiIsdHR5ZmQpOwotCWRlYnVnKEYxMDEsIkNPTk5F Q1QgY29uZWN0IGVudHJ5IGliYyIsIiIsaWJjKTsKLQlkZWJ1ZyhGMTAxLCJDT05ORUNUIGNvbmVj dCBlbnRyeSBvYmMiLCIiLG9iYyk7Ci0JZGVidWcoRjEwMSwiQ09OTkVDVCBjb25lY3QgZW50cnkg a2JjIiwiIixrYmMpOwotI2lmZGVmIENLX1RSSUdHRVIKLQlkZWJ1ZyhGMTEwLCJDT05ORUNUIGNv bmVjdCB0cmlnZ2VyIix0dF90cmlnZ2VyWzBdLDApOwotI2VuZGlmIC8qIENLX1RSSUdHRVIgKi8K LQlpZiAodHR5ZmQgPiAtMSkgewotCSAgICBuID0gdHRjaGsoKTsKLQkgICAgZGVidWcoRjEwMSwi Q09OTkVDVCBjb25lY3QgZW50cnkgdHRjaGsiLCIiLG4pOwotCX0KLSAgICB9Ci0jZW5kaWYgLyog REVCVUcgKi8KLQotICAgIGlmICh0dHlmZCA8IDApIHsJCQkvKiBJZiBjb21tdW5pY2F0aW9uIGRl dmljZSBub3Qgb3BlbiAqLwotCWRlYnVnKEYxMDEsIkNPTk5FQ1QgdHRucHJvdG8iLCIiLHR0bnBy b3RvKTsKLQlkZWJ1ZyhGMTExLCJDT05ORUNUIG9wZW5pbmciLHR0bmFtZSwwKTsgLyogT3BlbiBp dCBub3cgKi8KLQlpZiAodHRvcGVuKHR0bmFtZSwKLQkJICAgJmxvY2FsLAotCQkgICBuZXR3b3Jr ID8gLW5ldHR5cGUgOiBtZG10eXAsCi0JCSAgIDAKLQkJICAgKSA8IDApIHsKLQkgICAgY2ttYWtt c2codGVtcCxUTVBMRU4sIlNvcnJ5LCBjYW4ndCBvcGVuICIsdHRuYW1lLE5VTEwsTlVMTCk7Ci0J ICAgIHBlcnJvcih0ZW1wKTsKLQkgICAgZGVidWcoRjExMCwiQ09OTkVDVCBvcGVuIGZhaWx1cmUi LHR0bmFtZSwwKTsKLQkgICAgZ290byBjb25yZXQwOwotCX0KLSNpZmRlZiBJS1NfT1BUSU9OCi0J LyogSWYgcGVlciBpcyBpbiBLZXJtaXQgc2VydmVyIG1vZGUsIHJldHVybiBub3cuICovCi0JaWYg KFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQudV9zdGFydCkKLQkgIHJldHVybigwKTsK LSNlbmRpZiAvKiBJS1NfT1BUSU9OICovCi0gICAgfQotICAgIGRvaGFuZ3VwID0gMDsJCQkvKiBI YW5ndXAgbm90IHJlcXVlc3RlZCB5ZXQgKi8KLSNpZmRlZiBBTllYMjUKLSAgICBkb3gyNWNsciA9 IDA7CQkJLyogWC4yNSBjbGVhciBub3QgcmVxdWVzdGVkIHlldCAqLwotI2VuZGlmIC8qIEFOWVgy NSAqLwotCi0gICAgaWYgKG1zZ2ZsZykgewotI2lmZGVmIE5FVENPTk4KLQlpZiAobmV0d29yaykg ewotCSAgICBpZiAodHRwaXBlKQotCSAgICAgIHByaW50ZigiQ29ubmVjdGluZyB2aWEgY29tbWFu ZCBcIiVzXCIiLHR0bmFtZSk7Ci0JICAgIGVsc2UKLQkgICAgICBwcmludGYoIkNvbm5lY3Rpbmcg dG8gaG9zdCAlcyIsdHRuYW1lKTsKLSNpZmRlZiBBTllYMjUKLQkgICAgaWYgKG5ldHR5cGUgPT0g TkVUX1NYMjUgfHwgbmV0dHlwZSA9PSBORVRfSVgyNSkKLQkgICAgICBwcmludGYoIiwgTGluayBJ RCAlZCwgTENOICVkIixsaW5raWQsbGNuKTsKLSNlbmRpZiAvKiBBTllYMjUgKi8KLQl9IGVsc2Ug ewotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQkgICAgcHJpbnRmKCJDb25uZWN0aW5nIHRvICVzIix0 dG5hbWUpOwotCSAgICBpZiAoc3BlZWQgPiAtMUwpIHByaW50ZigiLCBzcGVlZCAlbGQiLHNwZWVk KTsKLSNpZmRlZiBORVRDT05OCi0JfQotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQlpZiAodHRfZXNj YXBlKSB7Ci0JICAgIHByaW50ZigiXHJcbiIpOwotCSAgICBzaG9lc2MoZXNjYXBlKTsKLQkgICAg cHJpbnRmKCJUeXBlIHRoZSBlc2NhcGUgY2hhcmFjdGVyIGZvbGxvd2VkIGJ5IEMgdG8gZ2V0IGJh Y2ssXHJcbiIpOwotCSAgICBwcmludGYoIm9yIGZvbGxvd2VkIGJ5ID8gdG8gc2VlIG90aGVyIG9w dGlvbnMuXHJcbiIpOwotCX0gZWxzZSB7Ci0JICAgIHByaW50ZigiLlxyXG5cbkVTQ0FQRSBDSEFS QUNURVIgSVMgRElTQUJMRURcclxuXG4iKTsKLQl9Ci0JaWYgKHNlc2xvZykgewotCSAgICBleHRl cm4gaW50IHNsb2d0czsKLQkgICAgY2hhciAqIHMgPSAiIjsKLQkgICAgc3dpdGNoIChzZXNzZnQp IHsKLQkgICAgICBjYXNlIFhZRlRfRDoKLQkJcyA9ICJkZWJ1ZyI7IGJyZWFrOwotCSAgICAgIGNh c2UgWFlGVF9UOgotCQlzID0gc2xvZ3RzID8gInRpbWVzdGFtcGVkLXRleHQiIDogInRleHQiOyBi cmVhazsKLQkgICAgICBkZWZhdWx0OgotCQlzID0gImJpbmFyeSI7Ci0JICAgIH0KLQkgICAgcHJp bnRmKCJTZXNzaW9uIExvZzogJXMsICVzXHJcbiIsc2VzZmlsLHMpOwotCX0KLQlpZiAoZGVic2Vz KSBwcmludGYoIkRlYnVnZ2luZyBEaXNwbGF5Li4uKVxyXG4iKTsKLSAgICAgICAgcHJpbnRmKCIt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiIp OwotCWZmbHVzaChzdGRvdXQpOwotICAgIH0KLQotLyogQ29uZGl0aW9uIGNvbnNvbGUgdGVybWlu YWwgYW5kIGNvbW11bmljYXRpb24gbGluZSAqLwotCi0gICAgaWYgKGNvbmJpbigoY2hhcillc2Nh cGUpIDwgMCkgewotCXByaW50ZigiU29ycnksIGNhbid0IGNvbmRpdGlvbiBjb25zb2xlIHRlcm1p bmFsXG4iKTsKLQlnb3RvIGNvbnJldDA7Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1Qg Y21hc2siLCIiLGNtYXNrKTsKLSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGNtZG1zayIsIiIsY21k bXNrKTsKLSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIHNwZWVkIGJlZm9yZSB0dHZ0IiwiIixzcGVl ZCk7Ci0gICAgaWYgKChuID0gdHR2dChzcGVlZCxmbG93KSkgPCAwKSB7CS8qIEVudGVyICJ2aXJ0 dWFsIHRlcm1pbmFsIiBtb2RlICovCi0JaWYgKCFuZXR3b3JrKSB7Ci0JICAgIGRlYnVnKEYxMDEs IkNPTk5FQ1QgdHR2dCIsIiIsbik7Ci0JICAgIHR0aGFuZygpOwkJCS8qIEhhbmcgdXAgYW5kIGNs b3NlIHRoZSBkZXZpY2UuICovCi0JICAgIHR0Y2xvcygwKTsKLQkgICAgZG9sb2dlbmQoKTsKLQkg ICAgaWYgKHR0b3Blbih0dG5hbWUsCQkvKiBPcGVuIGl0IGFnYWluLi4uICovCi0JCSAgICAgICAm bG9jYWwsCi0JCSAgICAgICBuZXR3b3JrID8gLW5ldHR5cGUgOiBtZG10eXAsCi0JCSAgICAgICAw Ci0JCSAgICAgICApIDwgMCkgewotCQlja21ha21zZyh0ZW1wLFRNUExFTiwiU29ycnksIGNhbid0 IHJlb3BlbiAiLHR0bmFtZSxOVUxMLE5VTEwpOwotCQlwZXJyb3IodGVtcCk7Ci0JCWdvdG8gY29u cmV0MDsKLQkgICAgfQotI2lmZGVmIElLU19PUFRJT04KLQkgICAgaWYgKFRFTE9QVF9TQihURUxP UFRfS0VSTUlUKS5rZXJtaXQudV9zdGFydCkKLQkgICAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyog SUtTX09QVElPTiAqLwotCSAgICBpZiAodHR2dChzcGVlZCxmbG93KSA8IDApIHsJLyogVHJ5IHZp cnR1YWwgdGVybWluYWwgbW9kZSBhZ2Fpbi4gKi8KLQkJY29ucmVzKCk7CQkvKiBGYWlsdXJlIHRo aXMgdGltZSBpcyBmYXRhbC4gKi8KLQkJcHJpbnRmKCJTb3JyeSwgQ2FuJ3QgY29uZGl0aW9uIGNv bW11bmljYXRpb24gbGluZVxuIik7Ci0JCWdvdG8gY29ucmV0MDsKLQkgICAgfQotCX0KLSAgICB9 Ci0gICAgZGVidWcoRjEwMSwiQ09OTkVDVCB0dHZ0IG9rLCBlc2NhcGUiLCIiLGVzY2FwZSk7Ci0K LSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGNhcnJpZXItd2F0Y2giLCIiLGNhcnJpZXIpOwotICAg IGlmICgoIW5ldHdvcmsgCi0jaWZkZWYgVE5fQ09NUE9SVAotCSAgfHwgaXN0bmNvbXBvcnQoKQot I2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLQkgKSAmJiAoY2FycmllciAhPSBDQVJfT0ZGKSkgewot CWludCB4OwotCXggPSB0dGdtZG0oKTsKLQlkZWJ1ZyhGMTAwLCJDT05ORUNUIHR0Z21kbSIsIiIs eCk7Ci0JaWYgKCh4ID4gLTEpICYmICEoeCAmIEJNX0RDRCkpIHsKLSNpZm5kZWYgTk9ISU5UUwot CSAgICBleHRlcm4gaW50IGhpbnRzOwotI2VuZGlmIC8qIE5PSElOVFMgKi8KLQkgICAgZGVidWco RjEwMCwiQ09OTkVDVCB0dGdtZG0gQ0QgdGVzdCBmYWlscyIsIiIseCk7Ci0JICAgIGNvbnJlcygp OwotCSAgICBwcmludGYoIj9DYXJyaWVyIHJlcXVpcmVkIGJ1dCBub3QgZGV0ZWN0ZWQuXG4iKTsK LSNpZm5kZWYgTk9ISU5UUwotCSAgICBpZiAoIWhpbnRzKQotCSAgICAgIHJldHVybigwKTsKLQkg ICAgcHJpbnRmKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7Ci0JICAg IHByaW50ZigiIEhpbnQ6IFRvIENPTk5FQ1QgdG8gYSBzZXJpYWwgZGV2aWNlIHRoYXRcbiIpOwot CSAgICBwcmludGYoIiBpcyBub3QgcHJlc2VudGluZyB0aGUgQ2FycmllciBEZXRlY3Qgc2lnbmFs LFxuIik7Ci0JICAgIHByaW50ZigiIGZpcnN0IHRlbGwgQy1LZXJtaXQgdG86XG5cbiIpOwotCSAg ICBwcmludGYoIiAgIFNFVCBDQVJSSUVSLVdBVENIIE9GRlxuXG4iKTsKLQkgICAgcHJpbnRmKCIq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4iKTsKLSNlbmRpZiAvKiBOT0hJ TlRTICovCi0JICAgIGdvdG8gY29ucmV0MDsKLQl9Ci0JZGVidWcoRjEwMCwiQ09OTkVDVCB0dGdt ZG0gb2siLCIiLDApOwotICAgIH0KLSNpZm5kZWYgTk9DU0VUUwotLyogU2V0IHVwIGNoYXJhY3Rl ciBzZXQgdHJhbnNsYXRpb25zICovCi0KLSAgICB1bmljb2RlID0gMDsJCQkvKiBBc3N1bWUgVW5p Y29kZSB3b24ndCBiZSBpbnZvbHZlZCAqLwotICAgIHRjcyA9IDA7CQkJCS8qICJUcmFuc2ZlciIg b3IgIk90aGVyIiBjaGFyc2V0ICovCi0gICAgc3hvID0gcnhvID0gTlVMTDsJCQkvKiBJbml0aWFs aXplIGJ5dGUtdG8tYnl0ZSBmdW5jdGlvbnMgKi8KLSAgICBzeGkgPSByeGkgPSBOVUxMOwotICAg IGlmICh0Y3NyICE9IHRjc2wpIHsJCQkvKiBSZW1vdGUgYW5kIGxvY2FsIHNldHMgZGlmZmVyLi4u ICovCi0jaWZkZWYgVU5JQ09ERQotCWlmICh0Y3NyID09IEZDX1VURjggfHwJCS8qIFJlbW90ZSBj aGFyc2V0IGlzIFVURi04ICovCi0JICAgIHRjc2wgPT0gRkNfVVRGOCkgewkJLyogb3IgbG9jYWwg b25lIGlzLiAqLwotCSAgICB4dWYgPSB4bF91ZmNbdGNzbF07CQkvKiBJbmNvbWluZyBVbmljb2Rl IHRvIGxvY2FsICovCi0JICAgIGlmICh4dWYgfHwgdGNzbCA9PSBGQ19VVEY4KSB7Ci0JCXRjcyA9 ICh0Y3NyID09IEZDX1VURjgpID8gdGNzbCA6IHRjc3I7IC8qIFRoZSAib3RoZXIiIHNldCAqLwot CQl4ZnUgPSB4bF9mY3VbdGNzXTsJLyogTG9jYWwgYnl0ZSB0byByZW1vdGUgVW5pY29kZSAqLwot CQlpZiAoeGZ1KQotCQkgIHVuaWNvZGUgPSAodGNzciA9PSBGQ19VVEY4KSA/IDEgOiAyOwotCSAg ICB9Ci0JICAgIHRjc3NpemUgPSBmY3NpbmZvW3Rjc10uc2l6ZTsgLyogU2l6ZSBvZiBvdGhlciBj aGFyYWN0ZXIgc2V0LiAqLwotCX0gZWxzZSB7Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotCSAgICB0 Y3MgPSBnZXR0Y3ModGNzcix0Y3NsKTsJLyogR2V0IGludGVybWVkaWF0ZSBzZXQuICovCi0JICAg IHN4byA9IHhsc1t0Y3NdW3Rjc2xdOwkvKiB0cmFuc2xhdGlvbiBmdW5jdGlvbiAqLwotCSAgICBy eG8gPSB4bHJbdGNzXVt0Y3NyXTsJLyogcG9pbnRlcnMgZm9yIG91dHB1dCBmdW5jdGlvbnMgKi8K LQkgICAgc3hpID0geGxzW3Rjc11bdGNzcl07CS8qIGFuZCBmb3IgaW5wdXQgZnVuY3Rpb25zLiAq LwotCSAgICByeGkgPSB4bHJbdGNzXVt0Y3NsXTsKLSNpZmRlZiBVTklDT0RFCi0JfQotI2VuZGlm IC8qIFVOSUNPREUgKi8KLSAgICB9Ci0vKgotICBUaGlzIGlzIHRvIHByZXZlbnQgdXNlIG9mIHpt c3R1ZmYoKSBhbmQgemRzdHVmZigpIGJ5IHRyYW5zbGF0aW9uIGZ1bmN0aW9ucy4KLSAgVGhleSBv bmx5IHdvcmsgd2l0aCBkaXNrIGkvbywgbm90IHdpdGggY29tbXVuaWNhdGlvbiBpL28uICBMdWNr aWx5IFJ1c3NpYW4KLSAgdHJhbnNsYXRpb24gZnVuY3Rpb25zIGRvbid0IGRvIGFueSBzdHVmZmlu Zy4uLgotKi8KLSAgICBsYW5nc3YgPSBsYW5ndWFnZTsKLSNpZm5kZWYgTk9DWVJJTAotICAgIGlm IChsYW5ndWFnZSAhPSBMX1JVU1NJQU4pCi0jZW5kaWYgLyogTk9DWVJJTCAqLwotICAgICAgbGFu Z3VhZ2UgPSBMX1VTQVNDSUk7Ci0KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgREVCVUcKLSAgICBp ZiAoZGVibG9nKSB7Ci0JZGVidWcoRjEwMSwiQ09OTkVDVCB0Y3MiLCIiLHRjcyk7Ci0JZGVidWco RjEwMSwiQ09OTkVDVCB0Y3NsIiwiIix0Y3NsKTsKLQlkZWJ1ZyhGMTAxLCJDT05ORUNUIHRjc3Ii LCIiLHRjc3IpOwotCWRlYnVnKEYxMDEsIkNPTk5FQ1QgZmNzaW5mb1t0Y3NsXS5zaXplIiwiIixm Y3NpbmZvW3Rjc2xdLnNpemUpOwotCWRlYnVnKEYxMDEsIkNPTk5FQ1QgZmNzaW5mb1t0Y3NyXS5z aXplIiwiIixmY3NpbmZvW3Rjc3JdLnNpemUpOwotCWRlYnVnKEYxMDEsIkNPTk5FQ1QgdW5pY29k ZSIsIiIsdW5pY29kZSk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0jZW5kaWYgLyogQ09N TUVOVCAqLwotCi0jaWZkZWYgQ0tfWFlaCi0jaWZuZGVmIFhZWl9JTlRFUk5BTAotICAgIHsKLQll eHRlcm4gaW50IGJpbmFyeTsJCS8qIFNlZSBhYm91dCBaTU9ERU0gYXV0b2Rvd25sb2FkcyAqLwot CWNoYXIgKiBzOwotCXMgPSBiaW5hcnkgPyBwdGFiW1BST1RPX1pdLnBfYl9yY21kIDogcHRhYltQ Uk9UT19aXS5wX3RfcmNtZDsKLQlpZiAoIXMpIHMgPSAiIjsKLQl6bWRsb2sgPSAoKnMgIT0gTlVM KTsJCS8qIE9LIGlmIHdlIGhhdmUgZXh0ZXJuYWwgY29tbWFuZHMgKi8KLSAgICB9Ci0jZW5kaWYg LyogWFlaX0lOVEVSTkFMICovCi0jZW5kaWYgLyogQ0tfWFlaICovCi0KLSNpZm5kZWYgTk9FU0NT RVEKLS8qCi0gIFdlIG5lZWQgdG8gYWN0aXZhdGUgdGhlIGVzY2FwZS1zZXF1ZW5jZSByZWNvZ25p dGlvbiBmZWF0dXJlIHdoZW46Ci0gICAoYSkgdHJhbnNsYXRpb24gaXMgZWxlY3RlZCwgQU5ECi0g ICAoYikgdGhlIGxvY2FsIGFuZC9vciByZW1vdGUgc2V0IGlzIGEgNy1iaXQgc2V0IG90aGVyIHRo YW4gVVMgQVNDSUkuCi0gIE9yOgotICAgU0VUIFRFUk1JTkFMIEFQQyBpcyBub3QgT0ZGIChoYW5k bGVkIGluIHRoZSBuZXh0IHN0YXRlbWVudCkuCi0qLwotICAgIGVzY3NlcSA9ICh0Y3MgIT0gVENf VFJBTlNQKSAmJgkvKiBOb3QgdHJhbnNwYXJlbnQgKi8KLSAgICAgIChmY3NpbmZvW3Rjc2xdLnNp emUgPT0gMTI4IHx8IGZjc2luZm9bdGNzcl0uc2l6ZSA9PSAxMjgpICYmIC8qIDcgYml0cyAqLwot CShmY3NpbmZvW3Rjc2xdLmNvZGUgIT0gRkNfVVNBU0NJSSk7IC8qIEJ1dCBub3QgQVNDSUkgKi8K LSNlbmRpZiAvKiBOT0VTQ1NFUSAqLwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQotI2lmbmRlZiBO T0VTQ1NFUQotI2lmZGVmIENLX0FQQwotICAgIGVzY3NlcSA9IGVzY3NlcSB8fCAoYXBjc3RhdHVz ICYgQVBDX09OKTsKLSAgICBhcGNhY3RpdmUgPSAwOwkJCS8qIEFuIEFQQyBjb21tYW5kIGlzIG5v dCBhY3RpdmUgKi8KLSAgICBhcGNsZW5ndGggPSAwOwkJCS8qIC4uLiAqLwotI2VuZGlmIC8qIENL X0FQQyAqLwotICAgIGluZXNjID0gRVNfTk9STUFMOwkJCS8qIEluaXRpYWwgc3RhdGUgb2YgcmVj b2duaXplciAqLwotICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1QgZXNjc2VxIiwiIixlc2NzZXEpOwot I2VuZGlmIC8qIE5PRVNDU0VRICovCi0KLSAgICBwYXJlbnRfaWQgPSBnZXRwaWQoKTsJCS8qIEdl dCBwYXJlbnQncyBwaWQgZm9yIHNpZ25hbGxpbmcgKi8KLSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNU IHBhcmVudCBwaWQiLCIiLHBhcmVudF9pZCk7Ci0KLSAgICBpZiAoeHBpcGVbMF0gPiAtMSkJCQkv KiBJZiBvbGQgcGlwZSBoYW5naW5nIGFyb3VuZCwgY2xvc2UgKi8KLSAgICAgIGNsb3NlKHhwaXBl WzBdKTsKLSAgICB4cGlwZVswXSA9IC0xOwotICAgIGlmICh4cGlwZVsxXSA+IC0xKQotICAgICAg Y2xvc2UoeHBpcGVbMV0pOwotICAgIHhwaXBlWzFdID0gLTE7Ci0gICAgZ290ZXJyID0gMDsJCQkJ LyogRXJyb3IgZmxhZyBmb3IgcGlwZSAmIGZvcmsgKi8KLSAgICBpZiAocGlwZSh4cGlwZSkgIT0g MCkgewkJLyogQ3JlYXRlIG5ldyBwaXBlIHRvIHBhc3MgaW5mbyAqLwotCXBlcnJvcigiQ2FuJ3Qg bWFrZSBwaXBlIik7CS8qIGJldHdlZW4gZm9ya3MuICovCi0JZGVidWcoRjEwMSwiQ09OTkVDVCBw aXBlIGVycm9yIiwiIixlcnJubyk7Ci0JZ290ZXJyID0gMTsKLSAgICB9IGVsc2UKLSNpZmRlZiBC RU9TT1JCRUJPWAotICAgIHsKLSAgICAgICAgcGlkID0gc3Bhd25fdGhyZWFkKGNvbmNsZCwgIkxv d2VyIEZvcmsiLCBCX05PUk1BTF9QUklPUklUWSwgTlVMTCk7Ci0gICAgICAgIHJlc3VtZV90aHJl YWQocGlkKTsKLSAgICB9Ci0jZWxzZQotICAgIGlmICgocGlkID0gZm9yaygpKSA9PSAoUElEX1Qp IC0xKSB7IC8qIFBpcGUgT0ssIG1ha2UgcG9ydCBmb3JrLiAqLwotCXBlcnJvcigiQ2FuJ3QgbWFr ZSBwb3J0IGZvcmsiKTsKLQlkZWJ1ZyhGMTAxLCJDT05ORUNUIGZvcmsgZXJyb3IiLCIiLGVycm5v KTsKLQlnb3RlcnIgPSAxOwotICAgIH0KLSNlbmRpZiAvKiBCRU9TT1JCRUJPWCAqLwotICAgIGRl YnVnKEYxMDEsIkNPTk5FQ1QgY3JlYXRlZCBmb3JrLCBwaWQiLCIiLHBpZCk7Ci0gICAgaWYgKGdv dGVycikgewkJCS8qIEZhaWxlZCB0byBtYWtlIHBpcGUgb3IgZm9yayAqLwotCWNvbnJlcygpOwkJ CS8qIFJlc2V0IHRoZSBjb25zb2xlLiAqLwotCWlmIChtc2dmbGcpIHsKLQkgICAgcHJpbnRmKCJc clxuQ29tbXVuaWNhdGlvbnMgZGlzY29ubmVjdCAoQmFjayBhdCAlcylcclxuIiwKLQkJICAgKm15 aG9zdCA/Ci0JCSAgIG15aG9zdCA6Ci0jaWZkZWYgVU5JWAotCQkgICAibG9jYWwgVU5JWCBzeXN0 ZW0iCi0jZWxzZQotCQkgICAibG9jYWwgc3lzdGVtIgotI2VuZGlmIC8qIFVOSVggKi8KLQkJICAg KTsKLQl9Ci0JcHJpbnRmKCJcbiIpOwotCXdoYXQgPSBXX05PVEhJTkc7CQkvKiBTbyBjb25zb2xl IG1vZGVzIGFyZSBzZXQgcmlnaHQuICovCi0jaWZuZGVmIE5PQ1NFVFMKLQlsYW5ndWFnZSA9IGxh bmdzdjsJCS8qIFJlc3RvcmUgbGFuZ3VhZ2UgKi8KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0JcGFy ZW50X2lkID0gKFBJRF9UKSAwOwkJLyogQ2xlYW4gdXAgKi8KLQlnb3RvIGNvbnJldDE7Ci0gICAg fQotICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1QgZm9yayBwaWQiLCIiLHBpZCk7Ci0KLS8qIFVwcGVy IGZvcmsgKEtFWUIgZm9yaykgcmVhZHMga2V5c3Ryb2tlcyBhbmQgc2VuZHMgdGhlbSBvdXQuICov Ci0KLSAgICBpZiAocGlkKSB7CQkJCS8qIHBpZCAhPSAwLCBzbyBJIGFtIHRoZSB1cHBlciBmb3Jr LiAqLwotLyoKLSAgQmVmb3JlIGRvaW5nIGFueXRoaW5nIHNpZ25pZmljYW50LCB0aGUgY2hpbGQg Zm9yayBtdXN0IHdhaXQgZm9yIGEgZ28tYWhlYWQKLSAgY2hhcmFjdGVyIGZyb20geHBpcGVbMF0u ICBCZWZvcmUgc3RhcnRpbmcgdG8gd2FpdCwgd2UgaGF2ZSBlbm91Z2ggdGltZSB0bwotICBjbGVh ciBidWZmZXJzIGFuZCBzZXQgdXAgdGhlIHNpZ25hbCBoYW5kbGVyLiAgV2hlbiBkb25lIHdpdGgg dGhpcywgd2Ugd2lsbAotICBhbGxvdyB0aGUgY2hpbGQgdG8gY29udGludWUgYnkgc2F0aXNmeWlu ZyBpdHMgcGVuZGluZyByZWFkLgotCi0gIFJlbWVtYmVyIHRoZSBjaGlsZCBhbmQgcGFyZW50IGhh dmUgc2VwYXJhdGUgYWRkcmVzcyBzcGFjZS4gIFRoZSBjaGlsZCBoYXMKLSAgaXRzIG93biBjb3B5 IG9mIGlucHV0IGJ1ZmZlcnMsIHNvIHdlIG11c3QgY2xlYXIgdGhlIGlucHV0IGJ1ZmZlcnMgaW4g dGhlCi0gIHBhcmVudC4gIE90aGVyd2lzZSBzdHJhbmdlIGVmZmVjdHMgbWF5IG9jY3VyLCBsaWtl IGNodW5rcyBvZiBjaGFyYWN0ZXJzCi0gIHJlcGVhdGVkbHkgZWNob2VkIG9uIHRlcm1pbmFsIHNj cmVlbi4gIFRoZSBjaGlsZCBwcm9jZXNzIGlzIGRlc2lnbmVkIHRvCi0gIGVtcHR5IGl0cyBpbnB1 dCBidWZmZXJzIGJ5IHJlYWRpbmcgYWxsIGF2YWlsYWJsZSBjaGFyYWN0ZXJzIGFuZCBlaXRoZXIK LSAgZWNob2luZyB0aGVtIG9uIHRoZSB0ZXJtaW5hbCBzY3JlZW4gb3Igc2F2aW5nIHRoZW0gZm9y IGZ1dHVyZSB1c2UgaW4gdGhlCi0gIHBhcmVudC4gIFRoZSBsYXR0ZXIgY2FzZSBoYXBwZW5zIGR1 cmluZyBBUEMgcHJvY2Vzc2luZyAtIHNlZSB0aGUgY29kZSBhcm91bmQKLSAgQ0VWX0FQQyBvY2N1 cnJlbmNlcyB0byBzZWUgaG93IHRoZSBjaGlsZCBwYXNzZXMgaXRzIGlidWYgZXRjIHRvIHBhcmVu dCB2aWEKLSAgeHBpcGUsIGZvciBwcmVzZXJ2YXRpb24gdW50aWwgdGhlIG5leHQgZW50cnkgdG8g dGhpcyBtb2R1bGUsIHRvIGVuc3VyZSB0aGF0Ci0gIG5vIGNoYXJhY3RlcnMgYXJlIGxvc3QgYmV0 d2VlbiBDT05ORUNUIHNlc3Npb25zLgotKi8KLQotLyoKLSAgVGhpcyBvbmUgbmVlZHMgYSBiaXQg b2YgZXh0cmEgZXhwbGFuYXRpb24uLi4gIEluIGFkZGl0aW9uIHRvIHRoZSBDT05ORUNUCi0gIG1v ZHVsZSdzIG93biBidWZmZXJzLCB3aGljaCBhcmUgY29tbXVuaWNhdGVkIGFuZCBzeW5jaHJvbml6 ZWQgdmlhIHhwaXBlLAotICB0aGUgbG93LWxldmVsIFVOSVggY29tbXVuaWNhdGlvbiByb3V0aW5l cyAodHRpbmMsIHR0eGluLCBldGMpIGFyZSBhbHNvCi0gIGJ1ZmZlcmVkLCBzdGF0aWNhbGx5LCBp biB0aGUgY2t1dGlvLmMgbW9kdWxlLiAgQnV0IHdoZW4gdGhlIHR3byBDT05ORUNUCi0gIGZvcmtz IHNwbGl0IG9mZiwgdGhlIGxvd2VyIGZvcmsgaXMgdXBkYXRpbmcgdGhpcyBidWZmZXIncyBwb2lu dGVycyBhbmQKLSAgY291bnRzLCBidXQgdGhlIHVwcGVyIGZvcmsgbmV2ZXIgZmluZHMgb3V0IGFi b3V0IGl0IGFuZCBzdGlsbCBoYXMgdGhlIG9sZAotICBvbmVzLiAgVGhlIGZvbGxvd2luZyBVTklY LXNwZWNpZmljIGNhbGwgdG8gdGhlIGNrdXRpby5jIG1vZHVsZSB0YWtlcyBjYXJlCi0gIG9mIHRo aXMuLi4gIFdpdGhvdXQgaXQsIHdlIGdldCBkdWFsIGVjaG9pbmcgb2YgaW5jb21pbmcgY2hhcmFj dGVycy4KLSovCi0JdHRmbHV4KCk7Ci0vKgotICBBdCB0aGlzIHBvaW50LCBwZXJoYXBzIHlvdSBh cmUgd29uZGVyaW5nIHdoeSB3ZSB1c2UgZm9ya3MgYXQgYWxsLiAgSXQgaXMKLSAgc2ltcGx5IGJl Y2F1c2UgdGhlcmUgaXMgbm8gb3RoZXIgbWV0aG9kIHBvcnRhYmxlIGFtb25nIGFsbCBVTklYIHZh cmlhdGlvbnMuCi0gIE5vdCB0aHJlYWRzLCBub3Qgc2VsZWN0KCksIC4uLiAgKFllcywgc2VsZWN0 KCkgaXMgbW9yZSBjb21tb24gbm93OyBpdCBtaWdodAotICBhY3R1YWxseSBiZSB3b3J0aCB3cml0 aW5nIGEgdmFyaWF0aW9uIG9mIHRoaXMgbW9kdWxlIHRoYXQgd29ya3MgbGlrZSBCU0QKLSAgVGVs bmV0LCBvbmUgZm9yaywgZHJpdmVuIGJ5IHNlbGVjdCgpKS4KLSovCi0JaWJwID0gaWJ1ZjsJCQkv KiBDbGVhciBpYnVmW10uICovCi0JaWJjID0gMDsJCQkvKiBDaGlsZCBub3cgaGFzIGl0cyBvd24g Y29weSAqLwotCXNpZ25hbChDS19GT1JLX1NJRywgcGlwZWludCk7CS8qIEhhbmRsZXIgZm9yIG1l c3NhZ2VzIGZyb20gY2hpbGQuICovCi0Jd3JpdGUoeHBpcGVbMV0sIGlidWYsIDEpOwkvKiBBbGxv dyBjaGlsZCB0byBwcm9jZWVkICovCi0JY2xvc2UoeHBpcGVbMV0pOyB4cGlwZVsxXSA9IC0xOyAv KiBQYXJlbnQgLSBwcmV2ZW50IGZ1dHVyZSB3cml0ZXMgKi8KLQotCXdoYXQgPSBXX0NPTk5FQ1Q7 CQkvKiBLZWVwIHRyYWNrIG9mIHdoYXQgd2UncmUgZG9pbmcgKi8KLQlhY3RpdmUgPSAxOwotCWRl YnVnKEYxMDEsIkNPTk5FQ1Qga2V5Ym9hcmQgZm9yayBkdXBsZXgiLCIiLGR1cGxleCk7Ci0vKgot ICBDYXRjaCBjb21tdW5pY2F0aW9uIGVycm9ycyBvciBtb2RlIGNoYW5nZXMgaW4gbG93ZXIgZm9y ay4KLQotICBOb3RlOiBTb21lIEMgY29tcGlsZXJzIChlLmcuIENyYXkgVU5JQ09TKSBpbnRlcnBy ZXQgdGhlIEFOU0kgQyBzdGFuZGFyZAotICBhYm91dCBzZXRqbXAoKSBpbiBhIHdheSB0aGF0IGRp c2FsbG93cyBjb25zdHJ1Y3Rpb25zIGxpa2U6Ci0KLSAgICAgICAgaWYgKCh2YXIgPSBbc2lnXXNl dGptcChlbnYpKSA9PSAwKSAuLi4KLQotICB3aGljaCBwcmV2ZW50cyB0aGUgdmFsdWUgcmV0dXJu ZWQgYnkgY2tsb25nam1wKCkgZnJvbSBiZWluZyB1c2VkIGF0IGFsbC4KLSAgU28gdGhlIHNpZ25h bCBoYW5kbGVycyBzZXQgYSBnbG9iYWwgdmFyaWFibGUsIHNqdmFsLCBpbnN0ZWFkLgotKi8KLQlp ZiAoCi0jaWZkZWYgQ0tfUE9TSVhfU0lHCi0JICAgIHNpZ3NldGptcChjb25fZW52LDEpCi0jZWxz ZQotCSAgICBzZXRqbXAoY29uX2VudikKLSNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KLQkgICAg PT0gMCkgewkJCS8qIE5vcm1hbCBlbnRyeS4uLiAqLwotCSAgICBqYnNldCA9IDE7CQkJLyogTm93 IHdlIGhhdmUgYSBsb25nam1wIGJ1ZmZlciAqLwotCSAgICBzanZhbCA9IENFVl9OTzsJCS8qIElu aXRpYWxpemUgc2V0am1wIHJldHVybiBjb2RlLiAqLwotCi0JICAgIGRlYnVnKEYxMDEsIkNPTk5F Q1Qgc2V0am1wIG5vcm1hbCBlbnRyeSIsIiIsc2p2YWwpOwotCi0jaWZkZWYgQU5ZWDI1Ci0JICAg IGlmIChuZXR3b3JrICYmIChuZXR0eXBlID09IE5FVF9TWDI1IHx8IG5ldHR5cGUgPT0gTkVUX0lY MjUpKSB7Ci0JCW9idWZsID0gMDsKLQkJYnplcm8gKHgyNW9idWYsc2l6ZW9mKHgyNW9idWYpKTsK LQkgICAgfQotI2VuZGlmIC8qIEFOWVgyNSAqLwotLyoKLSAgSGVyZSBpcyB0aGUgYmlnIGxvb3Ag dGhhdCBnZXRzIGNoYXJhY3RlcnMgZnJvbSB0aGUga2V5Ym9hcmQgYW5kIHNlbmRzIHRoZW0KLSAg b3V0IHRoZSBjb21tdW5pY2F0aW9uIGRldmljZS4gIFRoZXJlIGFyZSB0d28gY29tcG9uZW50cyB0 byB0aGUgY29tbXVuaWNhdGlvbgotICBwYXRoOiB0aGUgY29ubmVjdGlvbiBmcm9tIHRoZSBrZXli b2FyZCB0byBDLUtlcm1pdCwgYW5kIGZyb20gQy1LZXJtaXQgdG8KLSAgdGhlIHJlbW90ZSBjb21w dXRlci4gIFRoZSB0cmVhdG1lbnQgb2YgdGhlIDh0aCBiaXQgb2Yga2V5Ym9hcmQgY2hhcmFjdGVy cwotICBpcyBnb3Zlcm5lZCBieSBTRVQgQ09NTUFORCBCWVRFU0laRSAoY21kbXNrKS4gIFRoZSB0 cmVhdG1lbnQgb2YgdGhlIDh0aCBiaXQKLSAgb2YgY2hhcmFjdGVycyBzZW50IHRvIHRoZSByZW1v dGUgaXMgZ292ZXJuZWQgYnkgU0VUIFRFUk1JTkFMIEJZVEVTSVpFCi0gIChjbWFzaykuICAgVGhp cyBkaXN0aW5jdGlvbiB3YXMgaW50cm9kdWNlZCBpbiBlZGl0IDVBKDE2NCkuCi0qLwotCSAgICB3 aGlsZSAoYWN0aXZlKSB7Ci0jaWZuZGVmIE5PU0VUS0VZCi0JCWlmIChrbXB0cikgewkJLyogSGF2 ZSBjdXJyZW50IG1hY3JvPyAqLwotCQkgICAgZGVidWcoRjEwMCwiQ09OTkVDVCBrbXB0ciBub24g TlVMTCIsIiIsMCk7Ci0JCSAgICBpZiAoKGMgPSAoQ0hBUikgKmttcHRyKyspID09IE5VTCkgeyAv KiBHZXQgY2hhciBmcm9tIGl0ICovCi0JCQlrbXB0ciA9IE5VTEw7CS8qIElmIG5vIG1vcmUgY2hh cnMsICAqLwotCQkJZGVidWcoRjEwMCwiQ09OTkVDVCBtYWNybyBlbXB0eSwgY29udGludWluZyIs IiIsMCk7Ci0JCQljb250aW51ZTsJLyogcmVzZXQgcG9pbnRlciBhbmQgY29udGludWUgKi8KLQkJ ICAgIH0KLQkJICAgIGRlYnVnKEYwMDAsIkNPTk5FQ1QgY2hhciBmcm9tIG1hY3JvIiwiIixjKTsK LQkJfSBlbHNlCQkJLyogTm8gbWFjcm8uLi4gKi8KLSNlbmRpZiAvKiBOT1NFVEtFWSAqLwotCQkg IGMgPSBDT05HS1MoKTsJCS8qIFJlYWQgZnJvbSBrZXlib2FyZCAqLwotCi0jaWZkZWYgQ09NTUVO VAotLyogdG9vIG11Y2guLi4gKi8KLQkJZGVidWcoRjEwMSwiQ09OTkVDVCAqKiBLRVlCIiwiIixj KTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICAgICAgaWYgKGMgPT0gLTEpIHsJ CS8qIElmIHJlYWQoKSBnb3QgYW4gZXJyb3IuLi4gKi8KLQkJICAgIGRlYnVnKEYxMDEsIkNPTk5F Q1Qga2V5Ym9hcmQgcmVhZCBlcnJubyIsIiIsZXJybm8pOwotI2lmZGVmIENPTU1FTlQKLS8qCi0g VGhpcyBzZWVtcyB0byBjYXVzZSBwcm9ibGVtcy4gIElmIHJlYWQoKSByZXR1cm5zIC0xLCB0aGUg c2lnbmFsIGhhcyBhbHJlYWR5Ci0gYmVlbiBkZWxpdmVyZWQsIGFuZCBub3RoaW5nIHdpbGwgd2Fr ZSB1cCB0aGUgcGF1c2UoKS4KLSovCi0JCSAgICBwYXVzZSgpOwkJLyogV2FpdCBmb3IgdHJhbnNt aXR0ZXIgdG8gZmluaXNoLiAqLwotI2Vsc2UKLSNpZmRlZiBBOTg2Ci0vKgotICBPbiBBbHRvcyBt YWNoaW5lcyB3aXRoIFhlbml4IDMuMCwgcHJlc3NpbmcgREVMIGluIGNvbm5lY3QgbW9kZSBicmlu Z3MgdXMKLSAgaGVyZSAocmVhc29uIHVua25vd24pLiAgVGhlIGNvbnNvbGUgbGluZSBkaXNjaXBs aW5lIGF0IHRoaXMgcG9pbnQgaGFzCi0gIGludHIgPSBeQy4gIFRoZSBjb21tdW5pY2F0aW9ucyB0 dHkgaGFzIGludHIgPSBERUwgYnV0IHdlIGdldCBoZXJlIGFmdGVyCi0gIHByZXNzaW5nIERFTCBv biB0aGUga2V5Ym9hcmQsIGV2ZW4gd2hlbiB0aGUgcmVtb3RlIHN5c3RlbSBoYXMgYmVlbiBzZXQg bm90Ci0gIHRvIGVjaG8uICBXaXRoIEE5ODYgZGVmaW5lZCwgd2Ugc3RheSBpbiB0aGUgcmVhZCBs b29wIGFuZCBiZWVwIG9ubHkgaWYgdGhlCi0gIG9mZmVuZGluZyBjaGFyYWN0ZXIgaXMgbm90IERF TC4KLSovCi0JCSAgICBpZiAoKGMgJiAxMjcpICE9IDEyNykgY29ub2MoQkVMKTsKLSNlbHNlCi0j aWZkZWYgRUlOVFIKLS8qCi0gICBUaGlzIGNhbiBiZSBjYXVzZWQgYnkgdGhlIG90aGVyIGZvcmsg c2lnbmFsbGluZyB0aGlzIG9uZSBhYm91dAotICAgYW4gZWNob2luZyBjaGFuZ2UgZHVyaW5nIFRF TE5FVCBuZWdvdGlhdGlvbnMuCi0qLwotCQkgICAgaWYgKGVycm5vID09IEVJTlRSKQotCQkgICAg ICBjb250aW51ZTsKLSNlbmRpZiAvKiBFSU5UUiAqLwotCQkgICAgY29ub2MoQkVMKTsJCS8qIE90 aGVyd2lzZSwgYmVlcCAqLwotCQkgICAgYWN0aXZlID0gMDsJCS8qIGFuZCB0ZXJtaW5hdGUgdGhl IHJlYWQgbG9vcCAqLwotCQkgICAgY29udGludWU7Ci0jZW5kaWYgLyogQTk4NiAqLwotI2VuZGlm IC8qIENPTU1FTlQgKi8KLQkJfQotCQljICY9IGNtZG1zazsJCS8qIERvIGFueSByZXF1ZXN0ZWQg bWFza2luZyAqLwotI2lmbmRlZiBOT1NFVEtFWQotLyoKLSAgTm90ZToga21wdHIgaXMgTlVMTCBp ZiB3ZSBnb3QgY2hhcmFjdGVyIGMgZnJvbSB0aGUga2V5Ym9hcmQsIGFuZCBpdCBpcwotICBub3Qg TlVMTCBpZiBpdCBjYW1lIGZyb20gYSBtYWNyby4gIEluIHRoZSBsYXR0ZXIgY2FzZSwgd2UgbXVz dCBhdm9pZAotICBleHBhbmRpbmcgaXQgYWdhaW4uCi0qLwotCQlpZiAoIWttcHRyICYmIG1hY3Jv dGFiW2NdKSB7IC8qIE1hY3JvIGRlZmluaXRpb24gZm9yIGM/ICovCi0JCSAgICBrbXB0ciA9IG1h Y3JvdGFiW2NdOyAgICAgLyogWWVzLCBzZXQgdXAgbWFjcm8gcG9pbnRlciAqLwotCQkgICAgY29u dGludWU7CQkgICAgIC8qIGFuZCByZXN0YXJ0IHRoZSBsb29wLCAqLwotCQl9IGVsc2UgYyA9IGtl eW1hcFtjXTsJICAgICAvKiBlbHNlIHVzZSBzaW5nbGUtY2hhciBrZXltYXAgKi8KLSNlbmRpZiAv KiBOT1NFVEtFWSAqLwotCQlpZiAoCi0jaWZuZGVmIE5PU0VUS0VZCi0JCSAgICAha21wdHIgJiYK LSNlbmRpZiAvKiBOT1NFVEtFWSAqLwotCQkgICAgKHR0X2VzY2FwZSAmJiAoYyAmIDB4ZmYpID09 IGVzY2FwZSkpIHsgLyogRXNjYXBlIGNoYXI/ICovCi0JCSAgICBkZWJ1ZyhGMDAwLCJDT05ORUNU IGdvdCBlc2NhcGUiLCIiLGMpOwotCQkgICAgYyA9IENPTkdLUygpICYgMDE3NzsgLyogR290IGVz YywgZ2V0IGl0cyBhcmcgKi8KLQkJICAgIC8qIE5vIGtleSBtYXBwaW5nIGhlcmUgKi8KLQkJICAg IGRvZXNjKChjaGFyKSBjKTsJLyogTm93IHByb2Nlc3MgaXQgKi8KLQotCQl9IGVsc2UgewkJLyog SXQncyBub3QgdGhlIGVzY2FwZSBjaGFyYWN0ZXIgKi8KLQkJICAgIGNzYXZlID0gYzsJCS8qIFNh dmUgaXQgYmVmb3JlIHRyYW5zbGF0aW9uICovCi0JCQkJCS8qIGZvciBsb2NhbCBlY2hvaW5nLiAq LwotI2lmbmRlZiBOT0NTRVRTCi0JCSAgICBpZiAoaW5lc2MgPT0gRVNfTk9STUFMKSB7IC8qIElm IG5vdCBpbnNpZGUgZXNjYXBlIHNlcS4uICovCi0JCQkvKiBUcmFuc2xhdGUgY2hhcmFjdGVyIHNl dHMgKi8KLSNpZmRlZiBVTklDT0RFCi0JCQlpbnQgeDsKLQkJCUNIQVIgY2g7Ci0JCQljaCA9IGM7 Ci0JCQlpZiAodW5pY29kZSA9PSAxKSB7IC8qIFJlbW90ZSBpcyBVVEYtOCAqLwotCQkJICAgIG91 dHhjb3VudCA9IGJfdG9fdShjaCxvdXR4YnVmLE9VVFhCVUZTSVosdGNzc2l6ZSk7Ci0JCQkgICAg b3V0eGJ1ZltvdXR4Y291bnRdID0gTlVMOwotCQkJfSBlbHNlIGlmICh1bmljb2RlID09IDIpIHsg LyogTG9jYWwgaXMgVVRGLTggKi8KLQkJCSAgICB4ID0gdV90b19iKGNoKTsgLyogU28gdHJhbnNs YXRlIHRvIHJlbW90ZSBieXRlICovCi0JCQkgICAgaWYgKHggPCAwKQotCQkJICAgICAgY29udGlu dWU7Ci0JCQkgICAgb3V0eGJ1ZlswXSA9ICh1bnNpZ25lZCkoeCAmIDB4ZmYpOwotCQkJICAgIG91 dHhjb3VudCA9IDE7Ci0JCQkgICAgb3V0eGJ1ZltvdXR4Y291bnRdID0gTlVMOwotCQkJfSBlbHNl IHsKLSNlbmRpZiAvKiBVTklDT0RFICovCi0JCQkgICAgLyogTG9jYWwtdG8taW50ZXJtZWRpYXRl ICovCi0JCQkgICAgaWYgKHN4bykgYyA9ICgqc3hvKSgoY2hhciljKTsKLQkJCSAgICAvKiBJbnRl cm1lZGlhdGUtdG8tcmVtb3RlICovCi0JCQkgICAgaWYgKHJ4bykgYyA9ICgqcnhvKSgoY2hhcilj KTsKLQkJCSAgICBvdXR4YnVmWzBdID0gYzsKLQkJCSAgICBvdXR4Y291bnQgPSAxOwotCQkJICAg IG91dHhidWZbb3V0eGNvdW50XSA9IE5VTDsKLSNpZmRlZiBVTklDT0RFCi0JCQl9Ci0jZW5kaWYg LyogVU5JQ09ERSAqLwotCQkgICAgfQotCQkgICAgaWYgKGVzY3NlcSkKLQkJICAgICAgYXBjcmMg PSBjaGthZXMoKGNoYXIpYyk7Ci0jZWxzZQotCQkgICAgb3V0eGJ1ZlswXSA9IGM7Ci0JCSAgICBv dXR4Y291bnQgPSAxOwotCQkgICAgb3V0eGJ1ZltvdXR4Y291bnRdID0gTlVMOwotI2VuZGlmIC8q IE5PQ1NFVFMgKi8KLQkJICAgIGZvciAoaSA9IDA7IGkgPCBvdXR4Y291bnQ7IGkrKykgewotCQkJ YyA9IG91dHhidWZbaV07Ci0vKgotIElmIFNoaWZ0LUluL1NoaWZ0LU91dCBpcyBzZWxlY3RlZCBh bmQgd2UgaGF2ZSBhIDctYml0IGNvbm5lY3Rpb24sCi0gaGFuZGxlIHNoaWZ0aW5nIGhlcmUuCi0q LwotCQkJaWYgKHNvc2kpIHsJLyogU2hpZnQtSW4vT3V0IHNlbGVjdGVkPyAqLwotCQkJICAgIGlm IChjbWFzayA9PSAwMTc3KSB7IC8qIEluIDctYml0IGVudmlyb25tZW50PyAqLwotCQkJCWlmIChj ICYgMDIwMCkgewkvKiA4LWJpdCBjaGFyYWN0ZXI/ICovCi0JCQkJICAgIGlmIChvdXRzaGlmdCA9 PSAwKSB7IC8qIElmIG5vdCBzaGlmdGVkLCAqLwotCQkJCQl0dG9jKGRvcGFyKFNPKSk7IC8qIHNo aWZ0LiAqLwotCQkJCQlvdXRzaGlmdCA9IDE7Ci0JCQkJICAgIH0KLQkJCQl9IGVsc2UgewotCQkJ CSAgICBpZiAob3V0c2hpZnQgPT0gMSkgeyAvKiA3LWJpdCBjaGFyYWN0ZXIgKi8KLQkJCQkJdHRv Yyhkb3BhcihTSSkpOyAvKiBJZiBzaGlmdGVkLCAqLwotCQkJCQlvdXRzaGlmdCA9IDA7ICAgIC8q IHVuc2hpZnQuICovCi0JCQkJICAgIH0KLQkJCQl9Ci0JCQkgICAgfQotCQkJICAgIGlmIChjID09 IFNPKSBvdXRzaGlmdCA9IDE7ICAgLyogVXNlciB0eXBlZCBTTyAqLwotCQkJICAgIGlmIChjID09 IFNJKSBvdXRzaGlmdCA9IDA7ICAgLyogVXNlciB0eXBlZCBTSSAqLwotCQkJfQotCQkJYyAmPSBj bWFzazsJLyogQXBwbHkgS2VybWl0LXRvLWhvc3QgbWFzayBub3cuICovCi0jaWZkZWYgU1VOWDI1 Ci0JCQlpZiAobmV0d29yayAmJiBuZXR0eXBlID09IE5FVF9TWDI1KSB7Ci0JCQkgICAgaWYgKHBh ZHBhcm1zW1BBRF9FQ0hPXSkgewotCQkJCWlmIChkZWJzZXMpCi0JCQkJICBjb25vbChkYmNocihj KSkgOwotCQkJCWVsc2UKLQkJCQkgIGlmICgoYyAhPSBwYWRwYXJtc1tQQURfQ0hBUl9ERUxFVEVf Q0hBUl0pICYmCi0JCQkJICAgIChjICE9IHBhZHBhcm1zW1BBRF9CVUZGRVJfREVMRVRFX0NIQVJd KSAmJgotCQkJCSAgICAoYyAhPSBwYWRwYXJtc1tQQURfQlVGRkVSX0RJU1BMQVlfQ0hBUl0pKQot CQkJCSAgICBjb25vYyhjKSA7Ci0JCQkJaWYgKHNlc2xvZyAmJiAhc2Vzc2Z0KQotCQkJCSAgbG9n Y2hhcihjKTsKLQkJCSAgICB9Ci0JCQkgICAgaWYgKGMgPT0gQ1IgJiYgKHBhZHBhcm1zW1BBRF9M Rl9BRlRFUl9DUl0gPT0gNCB8fAotCQkJCQkgICAgcGFkcGFybXNbUEFEX0xGX0FGVEVSX0NSXSA9 PSA1KSkgewotCQkJCWlmIChkZWJzZXMpCi0JCQkJICBjb25vbChkYmNocihMRikpIDsKLQkJCQll bHNlCi0JCQkJICBjb25vYyhMRikgOwotCQkJCWlmIChzZXNsb2cgJiYgIXNlc3NmdCkKLQkJCQkg IGxvZ2NoYXIoTEYpOwotCQkJICAgIH0KLQkJCSAgICBpZiAoYyA9PSBwYWRwYXJtc1tQQURfQlJF QUtfQ0hBUkFDVEVSXSkgewotCQkJCWJyZWFrYWN0KCk7Ci0JCQkgICAgfSBlbHNlIGlmIChwYWRw YXJtc1tQQURfREFUQV9GT1JXQVJEX1RJTUVPVVRdKSB7Ci0JCQkJdG9zZW5kID0gMTsKLQkJCQl4 MjVvYnVmIFtvYnVmbCsrXSA9IGM7Ci0JCQkgICAgfSBlbHNlIGlmICgoKGMgPT0gcGFkcGFybXNb UEFEX0NIQVJfREVMRVRFX0NIQVJdKXx8Ci0JCQkJICAgICAoYyA9PSBwYWRwYXJtc1tQQURfQlVG RkVSX0RFTEVURV9DSEFSXSkgfHwKLQkJCQkgICAgIChjID09IHBhZHBhcm1zW1BBRF9CVUZGRVJf RElTUExBWV9DSEFSXSkpCi0JCQkJICAgICAgICYmIChwYWRwYXJtc1tQQURfRURJVElOR10pKSB7 Ci0JCQkJaWYgKGMgPT0gcGFkcGFybXNbUEFEX0NIQVJfREVMRVRFX0NIQVJdKSB7Ci0JCQkJICAg IGlmIChvYnVmbCA+IDApIHsKLQkJCQkJY29ub2woIlxiIFxiIik7IG9idWZsLS07Ci0JCQkJICAg IH0gZWxzZSB7fQotCQkJCX0gZWxzZSBpZgotCQkJCSAgKGMgPT0gcGFkcGFybXNbUEFEX0JVRkZF Ul9ERUxFVEVfQ0hBUl0pIHsKLQkJCQkgICAgICBjb25vbCAoIlxyXG5QQUQgQnVmZmVyIERlbGV0 ZWRcclxuIik7Ci0JCQkJICAgICAgb2J1ZmwgPSAwOwotCQkJCX0gZWxzZSBpZgotCQkJCSAgKGM9 PXBhZHBhcm1zW1BBRF9CVUZGRVJfRElTUExBWV9DSEFSXSkgewotCQkJCSAgICAgIGNvbm9sKCJc clxuIik7Ci0JCQkJICAgICAgY29ub2woeDI1b2J1Zik7Ci0JCQkJICAgICAgY29ub2woIlxyXG4i KTsKLQkJCQl9IGVsc2Uge30KLQkJCSAgICB9IGVsc2UgewotCQkJCXgyNW9idWYgW29idWZsKytd ID0gYzsKLQkJCQlpZiAob2J1ZmwgPT0gTUFYT1gyNSkgdG9zZW5kID0gMTsKLQkJCQllbHNlIGlm IChjID09IENSKSB0b3NlbmQgPSAxOwotCQkJICAgIH0KLQkJCSAgICBpZiAodG9zZW5kKSB7Ci0J CQkJaWYgKHR0b2woKENIQVIgKil4MjVvYnVmLG9idWZsKSA8IDApIHsKLQkJCQkgICAgcGVycm9y ICgiXHJcbkNhbid0IHNlbmQgY2hhcmFjdGVycyIpOwotCQkJCSAgICBhY3RpdmUgPSAwOwotCQkJ CX0gZWxzZSB7Ci0JCQkJICAgIGJ6ZXJvICh4MjVvYnVmLHNpemVvZih4MjVvYnVmKSk7Ci0JCQkJ ICAgIG9idWZsID0gMDsKLQkJCQkgICAgdG9zZW5kID0gMDsKLQkJCQl9Ci0JCQkgICAgfSBlbHNl IHt9OwotCQkJfSBlbHNlIHsKLSNlbmRpZiAvKiBTVU5YMjUgKi8KLQkJCSAgICBpZiAoYyA9PSAn XDAxNScpIHsgLyogQ2FycmlhZ2UgUmV0dXJuICovCi0JCQkJaW50IHN0dWZmID0gLTE7Ci0JCQkJ aWYgKHRubG0pIHsgLyogVEVSTUlOQUwgTkVXTElORSBPTiAqLwotCQkJCSAgICBzdHVmZiA9IExG OwkvKiBTdHVmZiBMRiAqLwotI2lmZGVmIFROQ09ERQotCQkJCX0gZWxzZSBpZiAobmV0d29yayAm JiAvKiBURUxORVQgTkVXTElORSAqLwotCQkJCQkgICBJU19URUxORVQoKSkgewotCQkJCSAgICBz d2l0Y2ggKCFURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkgPwotCQkJCQkgICAgdG5fbmxtIDoKLQkJ CQkJICAgIHRuX2JfbmxtCi0JCQkJCSAgICApIHsKLQkJCQkgICAgICBjYXNlIFROTF9DUkxGOgot CQkJCQlzdHVmZiA9IExGOwotCQkJCQlicmVhazsKLQkJCQkgICAgICBjYXNlIFROTF9DUk5VTDoK LQkJCQkJc3R1ZmYgPSBOVUw7Ci0JCQkJCWJyZWFrOwotCQkJCSAgICB9Ci0jZW5kaWYgLyogVE5D T0RFICovCi0JCQkJfQotCQkJCWlmIChzdHVmZiA+IC0xKSB7Ci0JCQkJICAgIHR0b2MoZG9wYXIo J1wwMTUnKSk7IC8qIFNlbmQgQ1IgKi8KLQkJCQkgICAgaWYgKGR1cGxleCkgY29ub2MoJ1wwMTUn KTsgLyogRWNobyBDUiAqLwotCQkJCSAgICBjID0gc3R1ZmY7IC8qIENoYXIgdG8gc3R1ZmYgKi8K LQkJCQkgICAgY3NhdmUgPSBjOwotCQkJCX0KLQkJCSAgICB9Ci0jaWZkZWYgVE5DT0RFCi0vKiBJ ZiB1c2VyIHR5cGVzIHRoZSAweGZmIGNoYXJhY3RlciAoVEVMTkVUIElBQyksIGl0IG11c3QgYmUg ZG91YmxlZC4gKi8KLQkJCSAgICBlbHNlCS8qIE5vdCBDUiAqLwotCQkJICAgICAgaWYgKChkb3Bh cigoQ0hBUikgYykgPT0gSUFDKSAmJiAvKiBJQUMgKDB4ZmYpICovCi0JCQkJICBuZXR3b3JrICYm IElTX1RFTE5FVCgpKSB7Ci0JCQkJICAvKiBTZW5kIG9uZSBjb3B5IG5vdyAqLwotCQkJCSAgLyog YW5kIHRoZSBvdGhlciBvbmUganVzdCBiZWxvdy4gKi8KLQkJCQkgIHR0b2MoKGNoYXIpSUFDKTsK LQkJCSAgICAgIH0KLSNlbmRpZiAvKiBUTkNPREUgKi8KLQkJCSAgICAvKiBTZW5kIHRoZSBjaGFy YWN0ZXIgKi8KLQotCQkJICAgIGlmICh0dG9jKChjaGFyKWRvcGFyKChDSEFSKSBjKSkgPiAtMSkg ewotCQkJCWlmIChkdXBsZXgpIHsJLyogSWYgaGFsZiBkdXBsZXgsIG11c3QgZWNobyAqLwotCQkJ CSAgICBpZiAoZGVic2VzKQotCQkJCSAgICAgIGNvbm9sKGRiY2hyKGNzYXZlKSk7IC8qIG9yaWdp bmFsIGNoYXIgKi8KLQkJCQkgICAgZWxzZSAvKiBub3QgdGhlIHRyYW5zbGF0ZWQgb25lICovCi0J CQkJICAgICAgY29ub2MoKGNoYXIpY3NhdmUpOwotCQkJCSAgICBpZiAoc2VzbG9nKSB7IC8qIEFu ZCBtYXliZSBsb2cgaXQgdG9vICovCi0JCQkJCWMyID0gY3NhdmU7Ci0JCQkJCWlmIChzZXNzZnQg PT0gMCAmJiBjc2F2ZSA9PSAnXHInKQotCQkJCQkgIGMyID0gJ1xuJzsKLQkJCQkJbG9nY2hhcigo Y2hhciljMik7Ci0JCQkJICAgIH0KLQkJCQl9Ci0JCQkgICAgfSBlbHNlIHsKLQkJCQlwZXJyb3Io IlxyXG5DYW4ndCBzZW5kIGNoYXJhY3RlciIpOwotCQkJCWFjdGl2ZSA9IDA7Ci0JCQkgICAgfQot I2lmZGVmIFNVTlgyNQotCQkJfQotI2VuZGlmIC8qIFNVTlgyNSAqLwotCQkgICAgfSAvKiBmb3Iu Li4gKi8KLQkJfQotCSAgICB9Ci0KLQkgICAgLyogbm93IGFjdGl2ZSA9PSAwICovCi0gICAgICAg ICAgICBzaWduYWwoQ0tfRk9SS19TSUcsIFNJR19JR04pOyAvKiBUdXJuIG9mZiBDS19GT1JLX1NJ RyAqLwotCSAgICBzanZhbCA9IENFVl9OTzsJCS8qIFNldCB0byBoYW5ndXAgKi8KLQl9CQkJCS8q IENvbWUgaGVyZSBvbiB0ZXJtaW5hdGlvbiBvZiBjaGlsZCAqLwotCi0vKiBja2xvbmdqbXAoKSBl eGVjdXRlZCBpbiBwaXBlaW50KCkgKHBhcmVudCBvbmx5ISkgY29tZXMgaGVyZSAqLwotCi0vKgot ICBOb3cgdGhlIGNoaWxkIGZvcmsgaXMgZ29uZSBvciBpcyB3YWl0aW5nIGZvciBDS19GT1JLX1NJ RyBpbiBja19zbmRtc2coKS4KLSAgU28gd2UgY2FuJ3QgZ2V0IChpbiB0aGUgcGFyZW50KSBhbnkg c3Vic2VxdWVudCBDS19GT1JLX1NJRyBzaWduYWxzIHVudGlsCi0gIHdlIHNpZ25hbCB0aGUgY2hp bGQgd2l0aCBDS19GT1JLX1NJRy4KLSovCi0JZGVidWcoRjEwMCwiQ09OTkVDVCBzaWduYWxpbmcg cG9ydCBmb3JrIiwiIiwwKTsKLQlzaWduYWwoQ0tfRk9SS19TSUcsIFNJR19JR04pOwkvKiBUdXJu IHRoaXMgb2ZmICovCi0JZGVidWcoRjEwMSwiQ09OTkVDVCBraWxsaW5nIHBvcnQgZm9yayIsIiIs cGlkKTsKLQlpZiAocGlkKSB7Ci0JICAgIGludCB4ID0gMDsKLSNpZmRlZiBCRU9TT1JCRUJPWAot CSAgICB7Ci0JCWxvbmcgcmV0X3ZhbDsKLQkJeCA9IGtpbGwocGlkLFNJR0tJTExUSFIpOyAvKiBL aWxsIGxvd2VyIGZvcmsgKi8KLQkJd2FpdF9mb3JfdGhyZWFkKHBpZCwgJnJldF92YWwpOwotCSAg ICB9Ci0jZWxzZQotI2lmZGVmIFBsYW45Ci0JICAgIHggPSBraWxsKHBpZCxTSUdLSUxMKTsJLyog S2lsbCBsb3dlciBmb3JrICovCi0jZWxzZQotCSAgICB4ID0ga2lsbChwaWQsOSk7Ci0jZW5kaWYg LyogUGxhbjkgKi8KLSNlbmRpZiAvKiBCRU9TT1JCRUJPWCAqLwotCSAgICB3YWl0KChXQUlUX1Qg KikwKTsJCS8qIFdhaXQgdGlsbCBnb25lLiAqLwotCSAgICBpZiAoeCA8IDApIHsKLQkJcHJpbnRm KCJXQVJOSU5HOiBGYWlsdXJlIHRvIGtpbGwgZm9yaywgcGlkICVkOiAlcywgZXJybm89JWRcbiIs Ci0JCSAgICAgICAoaW50KSBwaWQsIGNrX2VycnN0cigpLCBlcnJubyk7Ci0JCWRlYnVnKEYxMTEs IkNPTk5FQ1QgZXJyb3Iga2lsbGluZyBwaWQiLGNrX2VycnN0cigpLGVycm5vKTsKLQkgICAgfQot CSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGtpbGxlZCBwb3J0IGZvcmsiLCIiLHBpZCk7Ci0JICAg IHBpZCA9IChQSURfVCkgMDsKLQl9Ci0JaWYgKHNqdmFsID09IENFVl9IVVApIHsJCS8qIFJlYWQg ZXJyb3Igb24gY29tbSBkZXZpY2UgKi8KLQkgICAgZG9oYW5ndXAgPSAxOwkJLyogc28gd2Ugd2Fu dCB0byBoYW5nIHVwIG91ciBzaWRlICovCi0jaWZkZWYgTkVUQ09OTgotCSAgICBpZiAobmV0d29y aykgewkJLyogYW5kL29yIGNsb3NlIG5ldHdvcmsgY29ubmVjdGlvbiAqLwotCQl0dGNsb3MoMCk7 Ci0JCWRvbG9nZW5kKCk7Ci0jaWZkZWYgU1VOWDI1Ci0JCWlmIChuZXR0eXBlID09IE5FVF9TWDI1 KSAvKiBJZiBYLjI1LCByZXN0b3JlIHRoZSBQQUQgcGFyYW1zICovCi0JCSAgaW5pdHBhZCgpOwot I2VuZGlmIC8qIFNVTlgyNSAqLwotCSAgICB9Ci0jZW5kaWYgLyogTkVUQ09OTiAqLwotCX0KLSNp ZmRlZiBDS19BUEMKLQlpZiAoc2p2YWwgPT0gQ0VWX0FQQykgewkJLyogQXBwbGljYXRpb24gUHJv Z3JhbSBDb21tYW5kIHJlYydkICovCi0JICAgIGFwY2FjdGl2ZSA9IEFQQ19SRU1PVEU7CS8qIEZs YWcgQVBDIGFzIGFjdGl2ZSAqLwotCSAgICBhY3RpdmUgPSAwOwkJCS8qIEZsYWcgQ09OTkVDVCBh cyBpbmFjdGl2ZSAqLwotCX0KLSNlbmRpZiAvKiBDS19BUEMgKi8KLQljb25yZXMoKTsJCQkvKiBS ZXNldCB0aGUgY29uc29sZS4gKi8KLQlpZiAoZG9oYW5ndXAgPiAwKSB7CQkvKiBJZiBoYW5ndXAg cmVxdWVzdGVkLCBkbyB0aGF0LiAqLwotI2lmbmRlZiBOT0RJQUwKLQkgICAgaWYgKGRvaGFuZ3Vw ID4gMSkJCS8qIFVzZXIgYXNrZWQgZm9yIGl0ICovCi0JICAgICAgaWYgKG1kbWh1cCgpIDwgMSkJ CS8qIE1heWJlIGhhbmcgdXAgdmlhIG1vZGVtICovCi0jZW5kaWYgLyogTk9ESUFMICovCi0JCXR0 aGFuZygpOwkJLyogQW5kIG1ha2Ugc3VyZSB3ZSBkb24ndCBoYW5nIHVwICovCi0JICAgIGRvaGFu Z3VwID0gMDsJCS8qIGFnYWluIHVubGVzcyByZXF1ZXN0ZWQgYWdhaW4uICovCi0JfQotCi0jaWZk ZWYgQ09NTUVOVAotI2lmZGVmIE5FVENPTk4KLSNpZmRlZiBTSUdQSVBFCi0JaWYgKG5ldHdvcmsg JiYgc2lncGlwaCkJCS8qIFJlc3RvcmUgcHJldmlvdXMgU0lHUElQRSBoYW5kbGVyICovCi0JICAo Vk9JRCkgc2lnbmFsKFNJR1BJUEUsIHNpZ3BpcGgpOwotI2VuZGlmIC8qIFNJR1BJUEUgKi8KLSNl bmRpZiAvKiBORVRDT05OICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0jaWZkZWYgQU5ZWDI1 Ci0JaWYgKGRveDI1Y2xyKSB7CQkJLyogSWYgWC4yNSBDbGVhciByZXF1ZXN0ZWQgKi8KLQkgICAg eDI1Y2xlYXIoKTsJCQkvKiBkbyB0aGF0LiAqLwotI2lmbmRlZiBJQk1YMjUKLQkgICAgaW5pdHBh ZCgpOwotI2VuZGlmIC8qIElCTVgyNSAqLwotCSAgICBkb3gyNWNsciA9IDA7CQkvKiBCdXQgb25s eSBvbmNlLiAqLwotCX0KLSNlbmRpZiAvKiBBTllYMjUgKi8KLQotCWlmIChxdWl0bm93KSBkb2V4 aXQoR09PRF9FWElULHhpdHN0YSk7IC8qIEV4aXQgbm93IGlmIHJlcXVlc3RlZC4gKi8KLSAgCWlm IChtc2dmbGcpCi0JICBwcmludGYoIihCYWNrIGF0ICVzKSIsICpteWhvc3QgPyBteWhvc3QgOiAi bG9jYWwgVU5JWCBzeXN0ZW0iKTsKLSNpZmRlZiBDS19BUEMKLSAgICAgICAgaWYgKCFhcGNhY3Rp dmUpCi0jZW5kaWYgLyogQ0tfQVBDICovCi0JICBwcmludGYoIlxuIik7Ci0Jd2hhdCA9IFdfTk9U SElORzsJCS8qIFNvIGNvbnNvbGUgbW9kZXMgc2V0IHJpZ2h0LiAqLwotI2lmbmRlZiBOT0NTRVRT Ci0JbGFuZ3VhZ2UgPSBsYW5nc3Y7CQkvKiBSZXN0b3JlIGxhbmd1YWdlICovCi0jZW5kaWYgLyog Tk9DU0VUUyAqLwotCXBhcmVudF9pZCA9IChQSURfVCkgMDsKLQlnb3RvIGNvbnJldDE7Ci0KLSAg ICB9Ci0jaWZuZGVmIEJFT1NPUkJFQk9YCi0gICAgZWxzZSB7CS8qICoqKiAqLwkJLyogSW5mZXJp b3IgcmVhZHMsIHByaW50cyBwb3J0IGlucHV0ICovCi0gICAgICAgIGNvbmNsZCgvKiAodm9pZCAq KSZwaWQgKi8pOwotICAgIH0KLSNlbmRpZiAvKiBCRU9TT1JCRUJPWCAqLwotCi1jb25yZXQxOgot ICAgIGNvbnJldCA9IDE7Ci1jb25yZXQwOgotICAgIHNpZ25hbChDS19GT1JLX1NJRywgU0lHX0lH Tik7CS8qIEluIGNhc2UgdGhpcyB3YXNuJ3QgZG9uZSBhbHJlYWR5ICovCi0gICAgZGVidWcoRjEw MSwiQ09OTkVDVCBjb25lY3QgZXhpdCBpYmMiLCIiLGliYyk7Ci0gICAgZGVidWcoRjEwMSwiQ09O TkVDVCBjb25lY3QgZXhpdCBvYmMiLCIiLG9iYyk7Ci0gICAgY2xvc2UoeHBpcGVbMF0pOyB4cGlw ZVswXSA9IC0xOwkvKiBDbG9zZSB0aGUgcGlwZSAqLwotICAgIGNsb3NlKHhwaXBlWzFdKTsgeHBp cGVbMV0gPSAtMTsKLSAgICBpZiAobXNnZmxnKSB7Ci0jaWZkZWYgQ0tfQVBDCi0JaWYgKGFwY2Fj dGl2ZSA9PSBBUENfTE9DQUwpCi0JICBwcmludGYoIlxuIik7Ci0jZW5kaWYgLyogQ0tfQVBDICov Ci0JcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tXHJcbiIpOwotICAgIH0KLSAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICByZXR1cm4oY29u cmV0KTsKLX0KLQotCi0vKiAgSCBDIE8gTiBOIEUgIC0tICBHaXZlIGhlbHAgbWVzc2FnZSBmb3Ig Y29ubmVjdC4gICovCi0KLWludAotaGNvbm5lKCkgewotICAgIGludCBjOwotICAgIHN0YXRpYyBj aGFyICpobHBtc2dbXSA9IHsKLSJcclxuICA/IGZvciB0aGlzIG1lc3NhZ2UiLAotIlxyXG4gIDAg KHplcm8pIHRvIHNlbmQgYSBudWxsIiwKLSJcclxuICBCIHRvIHNlbmQgYSBCUkVBSyIsCi0jaWZk ZWYgQ0tfTEJSSwotIlxyXG4gIEwgdG8gc2VuZCBhIExvbmcgQlJFQUsiLAotI2VuZGlmIC8qIENL X0xCUksgKi8KLSNpZmRlZiBORVRDT05OCi0iXHJcbiAgSSB0byBzZW5kIGEgbmV0d29yayBpbnRl cnJ1cHQgcGFja2V0IiwKLSNpZmRlZiBUQ1BTT0NLRVQKLSJcclxuICBBIHRvIHNlbmQgQXJlIFlv dSBUaGVyZT8iLAotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2lmZGVmIEFOWVgyNQotIlxyXG4g IFIgdG8gcmVzZXQgWC4yNSB2aXJ0dWFsIGNpcmN1aXQiLAotI2VuZGlmIC8qIEFOWVgyNSAqLwot I2VuZGlmIC8qIE5FVENPTk4gKi8KLSJcclxuICBVIHRvIGhhbmd1cCBhbmQgY2xvc2UgdGhlIGNv bm5lY3Rpb24iLAotIlxyXG4gIFEgdG8gaGFuZ3VwIGFuZCBxdWl0IEtlcm1pdCIsCi0iXHJcbiAg UyBmb3Igc3RhdHVzIiwKLSNpZmRlZiBOT1BVU0gKLSJcclxuICAhIHRvIHB1c2ggdG8gbG9jYWwg c2hlbGwgKGRpc2FibGVkKSIsCi0iXHJcbiAgWiB0byBzdXNwZW5kIChkaXNhYmxlZCkiLAotI2Vs c2UKLSJcclxuICAhIHRvIHB1c2ggdG8gbG9jYWwgc2hlbGwiLAotI2lmZGVmIE5PSkMKLSJcclxu ICBaIHRvIHN1c3BlbmQgKGRpc2FibGVkKSIsCi0jZWxzZQotIlxyXG4gIFogdG8gc3VzcGVuZCIs Ci0jZW5kaWYgLyogTk9KQyAqLwotI2VuZGlmIC8qIE5PUFVTSCAqLwotIlxyXG4gIFxcIGJhY2tz bGFzaCBjb2RlOiIsCi0iXHJcbiAgICBcXG5ubiAgZGVjaW1hbCBjaGFyYWN0ZXIgY29kZSIsCi0i XHJcbiAgICBcXE9ubm4gb2N0YWwgY2hhcmFjdGVyIGNvZGUiLAotIlxyXG4gICAgXFxYaGggIGhl eGFkZWNpbWFsIGNoYXJhY3RlciBjb2RlIiwKLSJcclxuICAgIHRlcm1pbmF0ZSB3aXRoIGNhcnJp YWdlIHJldHVybi4iLAotIlxyXG4gVHlwZSB0aGUgZXNjYXBlIGNoYXJhY3RlciBhZ2FpbiB0byBz ZW5kIHRoZSBlc2NhcGUgY2hhcmFjdGVyLCBvciIsCi0iXHJcbiBwcmVzcyB0aGUgc3BhY2UtYmFy IHRvIHJlc3VtZSB0aGUgQ09OTkVDVCBjb21tYW5kLlxyXG4iLAotIiIgfTsKLQotICAgIGNvbm9s KCJcclxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSIpOwotICAgIGNvbm9sKCJcclxuUHJlc3MgQyB0byByZXR1cm4gdG8gIik7Ci0gICAgY29ub2wo Km15aG9zdCA/IG15aG9zdCA6ICJ0aGUgQy1LZXJtaXQgcHJvbXB0Iik7Ci0gICAgY29ub2woIiwg b3I6Iik7Ci0gICAgY29ub2xhKGhscG1zZyk7CQkJLyogUHJpbnQgdGhlIGhlbHAgbWVzc2FnZS4g Ki8KLSAgICBjb25vbCgiQ29tbWFuZD4iKTsJCQkvKiBQcm9tcHQgZm9yIGNvbW1hbmQuICovCi0g ICAgYyA9IENPTkdLUygpICYgMDE3NzsJCS8qIEdldCBjaGFyYWN0ZXIsIHN0cmlwIGFueSBwYXJp dHkuICovCi0gICAgLyogTm8ga2V5IG1hcHBpbmcgb3IgdHJhbnNsYXRpb24gaGVyZSAqLwotICAg IGlmIChjICE9IENNRFEpCi0gICAgICBjb25vbGwoIiIpOwotICAgIGNvbm9sbCgiLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotICAgcmV0dXJu KGMpOwkJCQkvKiBSZXR1cm4gaXQuICovCi19Ci0KLQotLyogIEQgTyBFIFMgQyAgLS0gIFByb2Nl c3MgYW4gZXNjYXBlIGNoYXJhY3RlciBhcmd1bWVudCAgKi8KLQotVk9JRAotI2lmZGVmIENLX0FO U0lDCi1kb2VzYyhjaGFyIGMpCi0jZWxzZQotZG9lc2MoYykgY2hhciBjOwotI2VuZGlmIC8qIENL X0FOU0lDICovCi0vKiBkb2VzYyAqLyB7Ci0gICAgQ0hBUiBkOwotCi0gICAgZGVidWcoRjEwMSwi Q09OTkVDVCBkb2VzYyIsIiIsYyk7Ci0gICAgd2hpbGUgKDEpIHsKLQlpZiAoYyA9PSBlc2NhcGUp IHsJCS8qIFNlbmQgZXNjYXBlIGNoYXJhY3RlciAqLwotCSAgICBkID0gZG9wYXIoKENIQVIpIGMp OyB0dG9jKChjaGFyKSBkKTsgcmV0dXJuOwotICAgIAl9IGVsc2UJCQkJLyogT3IgZWxzZSBsb29r IGl0IHVwIGJlbG93LiAqLwotCSAgICBpZiAoaXN1cHBlcihjKSkgYyA9IHRvbG93ZXIoYyk7Ci0K LQlzd2l0Y2goYykgewotCi0JY2FzZSAnYyc6CQkJLyogRXNjYXBlIGJhY2sgdG8gcHJvbXB0ICov Ci0JY2FzZSAnXDAzJzoKLQkgICAgYWN0aXZlID0gMDsgY29ub2woIlxyXG4iKTsgcmV0dXJuOwot Ci0JY2FzZSAnYic6CQkJLyogU2VuZCBhIEJSRUFLIHNpZ25hbCAqLwotCWNhc2UgJ1wwMic6Ci0J ICAgIHR0c25kYigpOyByZXR1cm47Ci0KLSNpZmRlZiBORVRDT05OCi0JY2FzZSAnaSc6CQkJLyog U2VuZCBJbnRlcnJ1cHQgKi8KLQljYXNlICdcMDExJzoKLSNpZmRlZiBUQ1BTT0NLRVQKLSNpZm5k ZWYgSVAKLSNkZWZpbmUgSVAgMjQ0Ci0jZW5kaWYgLyogSVAgKi8KLQkgICAgaWYgKG5ldHdvcmsg JiYgSVNfVEVMTkVUKCkpIHsgLyogVEVMTkVUICovCi0JCXRlbXBbMF0gPSAoQ0hBUikgSUFDOwkv KiBJIEFtIGEgQ29tbWFuZCAqLwotCQl0ZW1wWzFdID0gKENIQVIpIElQOwkvKiBJbnRlcnJ1cHQg UHJvY2VzcyAqLwotCQl0ZW1wWzJdID0gTlVMOwotCQl0dG9sKChDSEFSICopdGVtcCwyKTsKLQkg ICAgfSBlbHNlCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0jaWZkZWYgU1VOWDI1Ci0JICAgIGlm IChuZXR3b3JrICYmIChuZXR0eXBlID09IE5FVF9TWDI1KSkgewotCQkoVk9JRCkgeDI1aW50cigw KTsJICAgICAgICAgICAgLyogWC4yNSBpbnRlcnJ1cHQgcGFja2V0ICovCi0JCWNvbm9sKCJcclxu Iik7Ci0JICAgIH0gZWxzZQotI2VuZGlmIC8qIFNVTlgyNSAqLwotCSAgICAgIGNvbm9jKEJFTCk7 Ci0JICAgIHJldHVybjsKLQotI2lmZGVmIFRDUFNPQ0tFVAotCWNhc2UgJ2EnOgkJCS8qICJBcmUg WW91IFRoZXJlPyIgKi8KLQljYXNlICdcMDEnOgotI2lmbmRlZiBBWVQKLSNkZWZpbmUgQVlUIDI0 NgotI2VuZGlmIC8qIEFZVCAqLwotCSAgICBpZiAobmV0d29yayAmJiBJU19URUxORVQoKSkgewot CQl0ZW1wWzBdID0gKENIQVIpIElBQzsJLyogSSBBbSBhIENvbW1hbmQgKi8KLQkJdGVtcFsxXSA9 IChDSEFSKSBBWVQ7CS8qIEFyZSBZb3UgVGhlcmU/ICovCi0JCXRlbXBbMl0gPSBOVUw7Ci0JCXR0 b2woKENIQVIgKil0ZW1wLDIpOwotCSAgICB9IGVsc2UgY29ub2MoQkVMKTsKLQkgICAgcmV0dXJu OwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQotI2lmZGVm IENLX0xCUksKLQljYXNlICdsJzoJCQkvKiBTZW5kIGEgTG9uZyBCUkVBSyBzaWduYWwgKi8KLQkg ICAgdHRzbmRsYigpOyByZXR1cm47Ci0jZW5kaWYgLyogQ0tfTEJSSyAqLwotCi0JY2FzZSAndSc6 CQkJLyogSGFuZ3VwICovCi0gICAgIC8qCWNhc2UgJ1wwMTAnOiAqLwkJCS8qIE5vLCB0b28gZGFu Z2Vyb3VzICovCi0jaWZkZWYgQU5ZWDI1Ci0gICAgICAgICAgICBpZiAobmV0d29yayAmJiAobmV0 dHlwZSA9PSBORVRfU1gyNSB8fCBuZXR0eXBlID09IE5FVF9JWDI1KSkKLQkgICAgICBkb3gyNWNs ciA9IDE7Ci0gICAgICAgICAgICBlbHNlCi0jZW5kaWYgLyogQU5ZWDI1ICovCi0JICAgIGRvaGFu Z3VwID0gMjsgYWN0aXZlID0gMDsgY29ub2woIlxyXG5IYW5naW5nIHVwICIpOyByZXR1cm47Ci0K LSNpZmRlZiBBTllYMjUKLSAgICAgICAgY2FzZSAncic6ICAgICAgICAgICAgICAgICAgICAgICAv KiBSZXNldCB0aGUgWC4yNSB2aXJ0dWFsIGNpcmN1aXQgKi8KLSAgICAgICAgY2FzZSAnXDAyMic6 Ci0gICAgICAgICAgICBpZiAobmV0d29yayAmJiAobmV0dHlwZSA9PSBORVRfU1gyNSB8fCBuZXR0 eXBlID09IE5FVF9JWDI1KSkKLQkJKFZPSUQpIHgyNXJlc2V0KDAsMCk7Ci0gICAgICAgICAgICBj b25vbCgiXHJcbiIpOwotCSAgICByZXR1cm47Ci0jZW5kaWYgLyogQU5ZWDI1ICovCi0KLQljYXNl ICdxJzoJCQkvKiBRdWl0ICovCi0JICAgIGRvaGFuZ3VwID0gMjsgcXVpdG5vdyA9IDE7IGFjdGl2 ZSA9IDA7IGNvbm9sKCJcclxuIik7IHJldHVybjsKLQotCWNhc2UgJ3MnOgkJCS8qIFN0YXR1cyAq LwotCSAgICBjb25vbGwoIiIpOwotCSAgICBjb25vbGwoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLSNpZmRlZiBORVRDTUQKLQkgICAgaWYg KHR0cGlwZSkKLQkgICAgICBja21ha21zZyh0ZW1wLFRNUExFTiwiIFBpcGU6IFwiIix0dG5hbWUs IlwiIixOVUxMKTsKLQkgICAgZWxzZQotI2VuZGlmIC8qIE5FVENNRCAqLwotCSAgICAgIGNrbWFr bXNnKHRlbXAsCi0JCSAgICAgICBUTVBMRU4sCi0JCSAgICAgICAiICIsCi0JCSAgICAgICAobmV0 d29yayA/ICJIb3N0IiA6ICJEZXZpY2UiKSwKLQkJICAgICAgICI6ICIsCi0JCSAgICAgICB0dG5h bWUKLQkJICAgICAgICk7Ci0JICAgIGNvbm9sbCh0ZW1wKTsKLQkgICAgaWYgKCFuZXR3b3JrICYm IHNwZWVkID49IDBMKSB7Ci0JCXNwcmludGYodGVtcCwiU3BlZWQgJWxkIiwgc3BlZWQpOwotCQlj b25vbGwodGVtcCk7Ci0JICAgIH0KLQkgICAgc3ByaW50Zih0ZW1wLCIgVGVybWluYWwgZWNobzog JXMiLCBkdXBsZXggPyAibG9jYWwiIDogInJlbW90ZSIpOwotCSAgICBjb25vbGwodGVtcCk7Ci0J ICAgIHNwcmludGYodGVtcCwiIFRlcm1pbmFsIGJ5dGVzaXplOiAlZCIsIChjbWFzayAgPT0gMDE3 NykgPyA3IDogOCk7Ci0JICAgIGNvbm9sbCh0ZW1wKTsKLQkgICAgc3ByaW50Zih0ZW1wLCIgQ29t bWFuZCBieXRlc2l6ZTogJWQiLCAoY21kbXNrID09IDAxNzcpID8gNyA6IDggKTsKLQkgICAgY29u b2xsKHRlbXApOwotICAgICAgICAgICAgaWYgKGh3cGFyaXR5KQotICAgICAgICAgICAgICBzcHJp bnRmKHRlbXAsIiBQYXJpdHlbaGFyZHdhcmVdOiAlcyIscGFybmFtKChjaGFyKWh3cGFyaXR5KSk7 Ci0gICAgICAgICAgICBlbHNlCSAgICAKLSAgCSAgICAgIHNwcmludGYodGVtcCwiIFBhcml0eTog JXMiLCBwYXJuYW0oKGNoYXIpcGFyaXR5KSk7Ci0JICAgIGNvbm9sbCh0ZW1wKTsKLQkgICAgc3By aW50Zih0ZW1wLCIgQXV0b2Rvd25sb2FkOiAlcyIsIGF1dG9kbCA/ICJvbiIgOiAib2ZmIik7Ci0J ICAgIGNvbm9sbCh0ZW1wKTsKLQkgICAgY2ttYWttc2codGVtcCwJCS8qICh3b3VsZCBub3QgYmUg c2FmZSBmb3Igc3ByaW50ZikgKi8KLQkJICAgICBUTVBMRU4sCi0JCSAgICAgIiBTZXNzaW9uIGxv ZzogIiwKLQkJICAgICAqc2VzZmlsID8gc2VzZmlsIDogIihub25lKSIsCi0JCSAgICAgTlVMTCwK LQkJICAgICBOVUxMCi0JCSAgICAgKTsKLQkgICAgY29ub2xsKHRlbXApOwotI2lmbmRlZiBOT1NI T1cKLQkgICAgaWYgKCFuZXR3b3JrKSBzaG9tZG0oKTsKLSNlbmRpZiAvKiBOT1NIT1cgKi8KLSNp ZmRlZiBDS0xPR0RJQUwKLQkgICAgewotCQlsb25nIHo7Ci0JCXogPSBkb2xvZ3Nob3coMCk7Ci0J CWlmICh6ID4gLTFMKSB7Ci0JCSAgICBzcHJpbnRmKHRlbXAsIiBFbGFwc2VkIHRpbWU6ICVzIixo aG1tc3MoeikpOwotCQkgICAgY29ub2xsKHRlbXApOwotCQl9Ci0JICAgIH0KLSNlbmRpZiAvKiBD S0xPR0RJQUwgKi8KLQkgICAgY29ub2xsKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7Ci0JICAgIHJldHVybjsKLQotCWNhc2UgJ2gnOgkJCS8q IEhlbHAgKi8KLQljYXNlICc/JzoJCQkvKiBIZWxwICovCi0JICAgIGMgPSBoY29ubmUoKTsgY29u dGludWU7Ci0KLQljYXNlICcwJzoJCQkvKiBTZW5kIGEgbnVsbCAqLwotCSAgICBjID0gJ1wwJzsg ZCA9IGRvcGFyKChDSEFSKSBjKTsgdHRvYygoY2hhcikgZCk7IHJldHVybjsKLQotCWNhc2UgJ3on OiBjYXNlICdcMDMyJzoJCS8qIFN1c3BlbmQgKi8KLSNpZm5kZWYgTk9QVVNICi0JICAgIGlmICgh bm9wdXNoKQotCSAgICAgIHN0cHRyYXAoMCk7Ci0JICAgIGVsc2UKLQkgICAgICBjb25vYyhCRUwp OwotI2Vsc2UKLQkgICAgY29ub2MoQkVMKTsKLSNlbmRpZiAvKiBOT1BVU0ggKi8KLQkgICAgcmV0 dXJuOwotCi0JY2FzZSAnQCc6CQkJLyogU3RhcnQgaW5mZXJpb3IgY29tbWFuZCBwcm9jZXNzb3Ig Ki8KLQljYXNlICchJzoKLSNpZm5kZWYgTk9QVVNICi0JICAgIGlmICghbm9wdXNoKSB7Ci0JCWNv bnJlcygpOwkJICAgICAgLyogUHV0IGNvbnNvbGUgYmFjayB0byBub3JtYWwgKi8KLQkJenNoY21k KCIiKTsJCSAgICAgIC8qIEZvcmsgYSBzaGVsbC4gKi8KLQkJaWYgKGNvbmJpbigoY2hhcillc2Nh cGUpIDwgMCkgewotCQkgICAgcHJpbnRmKCJFcnJvciByZXN1bWluZyBDT05ORUNUIHNlc3Npb25c biIpOwotCQkgICAgYWN0aXZlID0gMDsKLQkJfQotCSAgICB9IGVsc2UgY29ub2MoQkVMKTsKLSNl bHNlCi0JICAgIGNvbm9jKEJFTCk7Ci0jZW5kaWYgLyogTk9QVVNIICovCi0JICAgIHJldHVybjsK LQotCWNhc2UgU1A6CQkJLyogU3BhY2UsIGlnbm9yZSAqLwotCSAgICByZXR1cm47Ci0KLQlkZWZh dWx0OgkJCS8qIE90aGVyICovCi0JICAgIGlmIChjID09IENNRFEpIHsJCS8qIEJhY2tzbGFzaCBl c2NhcGUgKi8KLQkJaW50IHg7Ci0JCWVjYnAgPSBlY2J1ZjsKLQkJKmVjYnArKyA9IGM7Ci0JCXdo aWxlICgoKGMgPSAoQ09OR0tTKCkgJiBjbWRtc2spKSAhPSAnXHInKSAmJiAoYyAhPSAnXG4nKSkK LQkJICAqZWNicCsrID0gYzsKLQkJKmVjYnAgPSBOVUw7IGVjYnAgPSBlY2J1ZjsKLQkJeCA9IHh4 ZXNjKCZlY2JwKTsJLyogSW50ZXJwcmV0IGl0ICovCi0JCWlmICh4ID49IDApIHsJCS8qIE5vIGtl eSBtYXBwaW5nIGhlcmUgKi8KLQkJICAgIGMgPSBkb3BhcigoQ0hBUikgeCk7Ci0JCSAgICB0dG9j KChjaGFyKSBjKTsKLQkJICAgIHJldHVybjsKLQkJfSBlbHNlIHsJCS8qIEludmFsaWQgYmFja3Ns YXNoIGNvZGUuICovCi0JCSAgICBjb25vYyhCRUwpOwotCQkgICAgcmV0dXJuOwotCQl9Ci0JICAg IH0KLQkgICAgY29ub2MoQkVMKTsgcmV0dXJuOyAJLyogSW52YWxpZCBlc2MgYXJnLCBiZWVwICov Ci0gICAgCX0KLSAgICB9Ci19Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwoKZGlmZiAtLWdpdCBhL2Nr ZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1ZGlhLmMgYi9ja2VybWl0LTku MC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWRpYS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCA1ODdhMGQxLi4wMDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9j a2VybWl0LTkuMC4zMDIvY2t1ZGlhLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MjQ5ICswLDAgQEAK LSNpbmNsdWRlICJja2NzeW0uaCIKLWNoYXIgKmRpYWx2ID0gIkRpYWwgQ29tbWFuZCwgOS4wLjE2 MCwgMTYgT2N0IDIwMDkiOwotCi0vKiAgQyBLIFUgRCBJIEEJIC0tICBNb2R1bGUgZm9yIGF1dG9t YXRpYyBtb2RlbSBkaWFsaW5nLiAqLwotCi0vKgotICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMDks Ci0gICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcg WW9yay4KLSAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5H LlRYVCBmaWxlIG9yIHRoZQotICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1 bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgotKi8KLQotLyoKLSAgQXV0aG9yczoK LQotICBPcmlnaW5hbCAodmVyc2lvbiAxLCAxOTg1KSBhdXRob3I6IEhlcm0gRmlzY2hlciwgRW5j aW5vLCBDQS4KLSAgQ29udHJpYnV0ZWQgdG8gQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiAxOTg1IGZv ciBpbmNsdXNpb24gaW4gQy1LZXJtaXQgNC4wLgotICBBdXRob3IgYW5kIG1haW50YWluZXIgc2lu Y2UgMTk4NTogRnJhbmsgZGEgQ3J1eiwgQ29sdW1iaWEgVW5pdmVyc2l0eSwKLSAgZmRjQGNvbHVt YmlhLmVkdS4KLQotICBDb250cmlidXRpb25zIGJ5IG1hbnkgb3RoZXJzIHRocm91Z2hvdXQgdGhl IHllYXJzLCBpbmNsdWRpbmc6IEplZmZyZXkKLSAgQWx0bWFuLCBNYXJrIEJlcnJ5bWFuLCBGZXJu YW5kbyBDYWJyYWwsIEpvaG4gQ2htaWVsZXdza2ksIEpvZSBEb3VwbmlrLAotICBSaWNoYXJkIEhp bGwsIExhcnJ5IEphY29icywgRXJpYyBKb25lcywgVG9tIEtsb29zLCBCb2IgTGFyc29uLCBQZXRl ciBNYXV6ZXksCi0gIEpvZSBPcm9zdCwgS2V2aW4gTydHb3JtYW4sIEthaSBVd2UgUm9tbWVsLCBE YW4gU2NodWxsbWFuLCBXYXJyZW4gVHVja2VyLCBhbmQKLSAgbWFueSBvdGhlcnMuCi0qLwotCi0v KgotICBFbnRyeSBwb2ludHM6Ci0gICAgY2tkaWFsKGNoYXIgKiBudW1iZXIpICAgRGlhbCBhIG51 bWJlciBvciBhbnN3ZXIgYSBjYWxsCi0gICAgZGlhbGh1cCgpICAgICAgICAgICAgICAgSGFuZyB1 cCBhIGRpYWxlZCBjb25uZWN0aW9uCi0gICAgbWRtaHVwKCkgICAgICAgICAgICAgICAgVXNlIG1v ZGVtIGNvbW1hbmRzIHRvIGhhbmcgdXAKLQotICBBbGwgb3RoZXIgcm91dGluZXMgYXJlIHN0YXRp Yy4KLSAgRG9uJ3QgY2FsbCBkaWFsaHVwKCkgb3IgbWRtaHVwKCkgd2l0aG91dCBmaXJzdCBjYWxs aW5nIGNrZGlhbCgpLgotKi8KLQotLyoKLSAgVGhpcyBtb2R1bGUgY2FsbHMgZXh0ZXJuYWxseSBk ZWZpbmVkIHN5c3RlbS1kZXBlbmRlbnQgZnVuY3Rpb25zIGZvcgotICBjb21tdW5pY2F0aW9ucyBp L28sIGFzIGRlc2NyaWJlZCBpbiBDS0NQTE0uRE9DLCB0aGUgQy1LZXJtaXQgUHJvZ3JhbSBMb2dp YwotICBNYW51YWwsIGFuZCB0aHVzIHNob3VsZCBiZSBwb3J0YWJsZSB0byBhbGwgc3lzdGVtcyB0 aGF0IGltcGxlbWVudCB0aG9zZQotICBmdW5jdGlvbnMsIGFuZCB3aGVyZSBhbGFybSgpIGFuZCBz aWduYWwoKSB3b3JrLgotCi0gIEhPVyBUTyBBREQgU1VQUE9SVCBGT1IgQU5PVEhFUiBNT0RFTToK LQotICAxLiBJbiBja3V1c3IuaCwgZGVmaW5lIGEgbW9kZW0tdHlwZSBudW1iZXIgc3ltYm9sIChu X1hYWCkgZm9yIHRoZSBuZXcgbW9kZW0sCi0gICAgIHRoZSBuZXh0IGhpZ2hlc3Qgb25lLgotCi0g IDIuIEluIGNrdXVzci5oLCBhZGp1c3QgTUFYX01ETSB0byB0aGUgbmV3IG51bWJlciBvZiBtb2Rl bSB0eXBlcy4KLQotVGhlIHJlbWFpbmluZyBzdGVwcyBhcmUgaW4gdGhpcyBtb2R1bGU6Ci0KLSAg My4gQ3JlYXRlIGEgTURNSU5GIHN0cnVjdHVyZSBmb3IgaXQuICBOT1RFOiBUaGUgd2FrZV9zdHIg c2hvdWxkIGluY2x1ZGUKLSAgICAgYWxsIGludmFyaWFudCBzZXR1cCBpbmZvLCBlLmcuIGVuYWJs ZSByZXN1bHQgY29kZXMsIEJSRUFLIHRyYW5zcGFyZW5jeSwKLSAgICAgbW9kdWxhdGlvbiBuZWdv dGlhdGlvbiwgZXRjLiAgU2VlIGNrY2tlci5oIGZvciBNRE1JTkYgc3RydWN0IGRlZmluaXRpb24u Ci0KLSAgNC4gQWRkIHRoZSBhZGRyZXNzIG9mIHRoZSBNRE1JTkYgc3RydWN0dXJlIHRvIHRoZSBt b2RlbXBbXSBhcnJheSwKLSAgICAgYWNjb3JkaW5nIHRvIHRoZSBudW1lcmljYWwgdmFsdWUgb2Yg dGhlIG1vZGVtLXR5cGUgbnVtYmVyLgotCi0gIDUuIEFkZCB0aGUgdXNlci12aXNpYmxlIChTRVQg TU9ERU0pIG5hbWUgYW5kIGNvcnJlc3BvbmRpbmcgbW9kZW0gbnVtYmVyCi0gICAgIHRvIHRoZSBt ZG10YWJbXSBhcnJheSwgaW4gYWxwaGFiZXRpY2FsIG9yZGVyIGJ5IG1vZGVtLW5hbWUgc3RyaW5n LgotCi0gIDYuIElmIHRoaXMgZmFsbHMgaW50byBhIGNsYXNzIGxpa2UgaXNfcm9ja3dlbGwsIGlz X3N1cHJhLCBldGMsIGFkZCB0aGUgbmV3Ci0gICAgIG9uZSB0byB0aGUgZGVmaW5pdGlvbiBvZiB0 aGUgY2xhc3MuCi0KLSAgNy4gQWRqdXN0IHRoZSBnZXRocm4oKSByb3V0aW5lIHRvIGFjY291bnQg Zm9yIGFueSBzcGVjaWFsIG51bWVyaWMgcmVzdWx0Ci0gICAgIGNvZGVzIChpZiBpdCdzIGEgSGF5 ZXMgY29tcGF0aWJsZSBtb2RlbSkuCi0KLSAgOC4gUmVhZCB0aHJvdWdoIHRoZSBjb2RlIGFuZCBh ZGQgYW55IG1vZGVtLXNwZWNpZmljIHNlY3Rpb25zIGFzIG5lY2Vzc2FyeS4KLSAgICAgRm9yIG1v c3QgbW9kZXJuIEhheWVzLWNvbXBhdGlibGUgbW9kZW1zLCBubyBzcGVjaWZpYyBjb2RlIHdpbGwg YmUKLSAgICAgbmVlZGVkLgotCi0gIE5PVEU6IFRoZSBNSU5JRElBTCBzeW1ib2wgaXMgdXNlZCB0 byBidWlsZCB0aGlzIG1vZHVsZSB0byBpbmNsdWRlIHN1cHBvcnQKLSAgZm9yIG9ubHkgYSBtaW5p bXVtIG51bWJlciBvZiBzdGFuZGFyZCBhbmQvb3IgZ2VuZXJhbGx5IHVzZWZ1bCBtb2RlbSB0eXBl cywKLSAgbmFtZWx5IEhheWVzIDEyMDAgYW5kIDI0MDAsIElUVS1UIChDQ0lUVCkgVi4yNWJpcyBh bmQgVi4yNXRlciAoVi4yNTApLAotICBHZW5lcmljLUhpZ2gtU3BlZWQsICJVbmtub3duIiwgYW5k IE5vbmUuICBXaGVuIGFkZGluZyBzdXBwb3J0IGZvciBhIG5ldwotICBtb2RlbSB0eXBlLCBrZWVw IGl0IG91dHNpZGUgb2YgdGhlIE1JTklESUFMIHNlY3Rpb25zIHVubGVzcyBpdCBkZXNlcnZlcyB0 bwotICBiZSBpbiBpdC4KLSovCi0KLSNpbmNsdWRlICJja2NkZWIuaCIKLSNpZm5kZWYgTk9MT0NB TAotI2lmbmRlZiBOT0RJQUwKLSNpZm5kZWYgTk9JQ1AKLQotI2lmbmRlZiBDS19BVERUCi0jZGVm aW5lIENLX0FURFQKLSNlbmRpZiAvKiBDS19BVERUICovCi0KLSNpZm5kZWYgTk9PTERNT0RFTVMg ICAgICAgIC8qIFVubGVzcyBpbnN0cnVjdGVkIG90aGVyd2lzZSwgKi8KLSNkZWZpbmUgT0xETU9E RU1TICAgICAgICAgIC8qIGtlZXAgc3VwcG9ydCBmb3Igb2xkIG1vZGVtcy4gKi8KLSNlbmRpZiAv KiBOT09MRE1PREVNUyAqLwotCi0jaWZuZGVmIE1fT0xECQkgICAvKiBIaWRlIG9sZCBtb2RlbSBr ZXl3b3JkcyBpbiBTRVQgTU9ERU0gdGFibGUuICovCi0jZGVmaW5lIE1fT0xEIDAJCSAgIC8qIERl ZmluZSBhcyBDTV9JTlYgdG8gbWFrZSB0aGVtIGludmlzaWJsZS4gKi8KLSNlbmRpZiAvKiBNX09M RCAqLwotCi0jaWZuZGVmIE1fQUxJQVMKLSNkZWZpbmUgTV9BTElBUyA2NAotI2VuZGlmIC8qIE1f QUxJQVMgKi8KLQotI2lmbmRlZiBNQUMKLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNlbmRpZiAvKiBN QUMgKi8KLSNpbmNsdWRlICJja2Nhc2MuaCIKLSNpbmNsdWRlICJja2NrZXIuaCIKLSNpbmNsdWRl ICJja3VjbWQuaCIKLSNpbmNsdWRlICJja2NuZXQuaCIKLSNpbmNsdWRlICJja3V1c3IuaCIKLQot I2lmZGVmIE9TMk9OTFkKLSNkZWZpbmUgSU5DTF9WSU8JCQkvKiBOZWVkZWQgZm9yIGNrb2Nvbi5o ICovCi0jaW5jbHVkZSA8b3MyLmg+Ci0jdW5kZWYgQ09NTUVOVAotI2luY2x1ZGUgImNrb2Nvbi5o IgotI2VuZGlmIC8qIE9TMk9OTFkgKi8KLQotI2lmZGVmIE5UCi0jaW5jbHVkZSA8d2luZG93cy5o PgotI2luY2x1ZGUgPHRhcGkuaD4KLSNpbmNsdWRlICJja253aW4uaCIKLSNpbmNsdWRlICJja250 YXAuaCIKLSNlbmRpZiAvKiBOVCAqLwotI2lmZGVmIE9TMgotI2luY2x1ZGUgImNrb3dpbi5oIgot I2VuZGlmIC8qIE9TMiAqLwotCi0jaWZuZGVmIFpJTE9HCi0jaWZkZWYgTlQKLSNpbmNsdWRlIDxz ZXRqbXBleC5oPgotI2Vsc2UgLyogTlQgKi8KLSNpbmNsdWRlIDxzZXRqbXAuaD4KLSNlbmRpZiAv KiBOVCAqLwotI2Vsc2UKLSNpbmNsdWRlIDxzZXRyZXQuaD4KLSNlbmRpZiAvKiBaSUxPRyAqLwot Ci0jaW5jbHVkZSAiY2tjc2lnLmgiICAgICAgICAvKiBDLUtlcm1pdCBzaWduYWwgcHJvY2Vzc2lu ZyAqLwotCi0jaWZkZWYgTUFDCi0jZGVmaW5lIHNpZ25hbCBtc2lnbmFsCi0jZGVmaW5lIFNJR1RZ UCBsb25nCi0jZGVmaW5lIGFsYXJtIG1hbGFybQotI2RlZmluZSBTSUdfSUdOIDAKLSNkZWZpbmUg U0lHQUxSTSAxCi0jZGVmaW5lIFNJR0lOVCAgMgotU0lHVFlQICgqbXNpZ25hbChpbnQgdHlwZSwg U0lHVFlQICgqZnVuYykoaW50KSkpKGludCk7Ci0jZW5kaWYgLyogTUFDICovCi0KLSNpZmRlZiBB TUlHQQotI2RlZmluZSBzaWduYWwgYXNpZ25hbAotI2RlZmluZSBhbGFybSBhYWxhcm0KLSNkZWZp bmUgU0lHQUxSTSAoX05VTVNJRysxKQotI2RlZmluZSBTSUdUWVAgdm9pZAotU0lHVFlQICgqYXNp Z25hbChpbnQgdHlwZSwgU0lHVFlQICgqZnVuYykoaW50KSkpKGludCk7Ci11bnNpZ25lZCBhYWxh cm0odW5zaWduZWQpOwotI2VuZGlmIC8qIEFNSUdBICovCi0KLSNpZmRlZiBTVFJBVFVTCi0vKgot ICBWT1MgZG9lc24ndCBoYXZlIGFsYXJtKCksIGJ1dCBpdCBkb2VzIGhhdmUgc29tZSB0aGluZ3Mg d2UgY2FuIHdvcmsgd2l0aC4KLSAgSG93ZXZlciwgd2UgaGF2ZSB0byBjYXRjaCBhbGwgdGhlIHNp Z25hbHMgaW4gb25lIHBsYWNlIHRvIGRvIHRoaXMsIHNvCi0gIHdlIGludGVyY2VwdCB0aGUgc2ln bmFsKCkgcm91dGluZSBhbmQgY2FsbCBpdCBmcm9tIG91ciBvd24gcmVwbGFjZW1lbnQuCi0qLwot I2RlZmluZSBzaWduYWwgdnNpZ25hbAotI2RlZmluZSBhbGFybSB2YWxhcm0KLVNJR1RZUCAoKnZz aWduYWwoaW50IHR5cGUsIFNJR1RZUCAoKmZ1bmMpKGludCkpKShpbnQpOwotaW50IHZhbGFybShp bnQgaW50ZXJ2YWwpOwotI2lmZGVmIHB1dGNoYXIKLSN1bmRlZiBwdXRjaGFyCi0jZW5kaWYgLyog cHV0Y2hhciAqLwotI2RlZmluZSBwdXRjaGFyKHgpIGNvbm9jKHgpCi0jaWZkZWYgZ2V0Y2hhcgot I3VuZGVmIGdldGNoYXIKLSNlbmRpZiAvKiBnZXRjaGFyICovCi0jZGVmaW5lIGdldGNoYXIoeCkg Y29uaW5jKDApCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotCi0jaWZkZWYgT1MyCi0jaWZkZWYgcHV0 Y2hhcgotI3VuZGVmIHB1dGNoYXIKLSNlbmRpZiAvKiBwdXRjaGFyICovCi0jZGVmaW5lIHB1dGNo YXIoeCkgY29ub2MoeCkKLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmbmRlZiBOT0hJTlRTCi1leHRl cm4gaW50IGhpbnRzOwotI2VuZGlmIC8qIE5PSElOVFMgKi8KLQotI2lmZGVmIENLX1RBUEkKLWV4 dGVybiBpbnQgdHR0YXBpOwotZXh0ZXJuIGludCB0YXBpcGFzczsKLSNlbmRpZiAvKiBDS19UQVBJ ICovCi0KLSNpZmRlZiBDS0xPR0RJQUwKLWV4dGVybiBpbnQgZGlhbG9nOwotI2VuZGlmIC8qIENL TE9HRElBTCAqLwotCi1jaGFyICogZGlhbG1zZ1tdID0gewkJCS8qIERJQUwgc3RhdHVzIHN0cmlu Z3MgKi8KLQotICAgIC8qIEtleWVkIHRvIG51bWJlcnMgZGVmaW5lZCBpbiBja2NrZXIuaCAtLSBr ZWVwIGluIHN5bmMhICovCi0KLSAgICAiRElBTCBzdWNjZWVkZWQiLAkJCSAgICAvKiAgMCBESUFf T0sgKi8KLSAgICAiTW9kZW0gdHlwZSBub3Qgc3BlY2lmaWVkIiwJCSAgICAvKiAgMSBESUFfTk9N TyAqLwotICAgICJDb21tdW5pY2F0aW9uIGRldmljZSBub3Qgc3BlY2lmaWVkIiwgICAvKiAgMiBE SUFfTk9MSSAqLwotICAgICJDb21tdW5pY2F0aW9uIGRldmljZSBjYW4ndCBiZSBvcGVuZWQiLCAv KiAgMyBESUFfT1BFTiAqLwotICAgICJTcGVlZCBub3Qgc3BlY2lmaWVkIiwJCSAgICAvKiAgNCBE SUFfTk9TUCAqLwotICAgICJQcmUtRElBTCBoYW5ndXAgZmFpbGVkIiwJCSAgICAvKiAgNSBESUFf SEFORyAqLwotICAgICJJbnRlcm5hbCBlcnJvciIsCQkJICAgIC8qICA2IERJQV9JRSAgICovCi0g ICAgIkRldmljZSBpbnB1dC9vdXRwdXQgZXJyb3IiLAkgICAgLyogIDcgRElBX0lPICAgKi8KLSAg ICAiRElBTCBUSU1FT1VUIGV4cGlyZWQiLAkJICAgIC8qICA4IERJQV9USU1PICovCi0gICAgIklu dGVycnVwdGVkIGJ5IHVzZXIiLAkJICAgIC8qICA5IERJQV9JTlRSICovCi0gICAgIk1vZGVtIG5v dCByZWFkeSIsCQkJICAgIC8qIDEwIERJQV9OUkRZICovCi0gICAgIlBhcnRpYWwgZGlhbCBPSyIs CQkJICAgIC8qIDExIERJQV9QQVJUICovCi0gICAgIkRpYWwgZGlyZWN0b3J5IGxvb2t1cCBlcnJv ciIsCSAgICAvKiAxMiBESUFfRElSICAqLwotICAgICJIYW5ndXAgT0siLAkJCSAgICAvKiAxMyBE SUFfSFVQICAqLwotICAgIE5VTEwsCQkJCSAgICAvKiAxNCAodW5kZWYpICAqLwotICAgIE5VTEws CQkJCSAgICAvKiAxNSAodW5kZWYpICAqLwotICAgIE5VTEwsCQkJCSAgICAvKiAxNiAodW5kZWYp ICAqLwotICAgIE5VTEwsCQkJCSAgICAvKiAxNyAodW5kZWYpICAqLwotICAgIE5VTEwsCQkJCSAg ICAvKiAxOCAodW5kZWYpICAqLwotICAgICJObyByZXNwb25zZSBmcm9tIG1vZGVtIiwJCSAgICAv KiAxOSBESUFfTlJTUCAqLwotICAgICJNb2RlbSBjb21tYW5kIGVycm9yIiwJCSAgICAvKiAyMCBE SUFfRVJSICAqLwotICAgICJGYWlsdXJlIHRvIGluaXRpYWxpemUgbW9kZW0iLAkgICAgLyogMjEg RElBX05PSU4gKi8KLSAgICAiUGhvbmUgYnVzeSIsCQkJICAgIC8qIDIyIERJQV9CVVNZICovCi0g ICAgIk5vIGNhcnJpZXIiLAkJCSAgICAvKiAyMyBESUFfTk9DQSAqLwotICAgICJObyBkaWFsdG9u ZSIsCQkJICAgIC8qIDI0IERJQV9OT0RUICovCi0gICAgIkluY29taW5nIGNhbGwiLAkJCSAgICAv KiAyNSBESUFfUklORyAqLwotICAgICJObyBhbnN3ZXIiLAkJCSAgICAvKiAyNiBESUFfTk9BTiAq LwotICAgICJEaXNjb25uZWN0ZWQiLAkJCSAgICAvKiAyNyBESUFfRElTQyAqLwotICAgICJBbnN3 ZXJlZCBieSB2b2ljZSIsCQkgICAgLyogMjggRElBX1ZPSUMgKi8KLSAgICAiQWNjZXNzIGRlbmll ZCAvIGZvcmJpZGRlbiBjYWxsIiwJICAgIC8qIDI5IERJQV9OT0FDICovCi0gICAgIkJsYWNrbGlz dGVkIiwJCQkgICAgLyogMzAgRElBX0JMQ0sgKi8KLSAgICAiRGVsYXllZCIsICAgIAkJCSAgICAv KiAzMSBESUFfREVMQSAqLwotICAgICJGYXggY29ubmVjdGlvbiIsCQkJICAgIC8qIDMyIERJQV9G QVggICovCi0gICAgIkRpZ2l0YWwgbGluZSIsCQkJICAgIC8qIDMzIERJQV9ESUdJICovCi0gICAg IlRBUEkgZGlhbGluZyBmYWlsdXJlIiwJICAgICAgICAgICAgLyogMzQgRElBX1RBUEkgKi8KLSAg ICBOVUxMCQkJCSAgICAvKiAzNCAqLwotfTsKLQotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBOT1NQ TAotc3RhdGljCi0jZW5kaWYgLyogTk9TUEwgKi8KLWNoYXIgbW9kZW1tc2dbMTI4XSA9IHsgTlVM LCBOVUwgfTsJLyogRElBTCByZXNwb25zZSBmcm9tIG1vZGVtICovCi0jZW5kaWYgLyogQ09NTUVO VCAqLwotCi0jaWZkZWYgTlRTSUcKLWV4dGVybiBpbnQgVGxzSW5kZXg7Ci0jZW5kaWYgLyogTlRT SUcgKi8KLQotaW50IG1kbXR5cCA9IG5fR0VORVJJQzsJCQkvKiBEZWZhdWx0IG1vZGVtIHR5cGUg Ki8KLWludCBtZG1zZXQgPSAwOwkJCQkvKiBVc2VyIGV4cGxpY2l0bHkgc2V0IGEgbW9kZW0gdHlw ZSAqLwotCi1pbnQJCQkJCS8qIFNFVCBESUFMIHBhcmFtZXRlcnMgKi8KLSAgZGlhbGhuZyA9IDEs CQkJCS8qIERJQUwgSEFOR1VQLCBkZWZhdWx0IGlzIE9OICovCi0gIGRpYWxkcHkgPSAwLAkJCQkv KiBESUFMIERJU1BMQVksIGRlZmF1bHQgaXMgT0ZGICovCi0gIG1kbXNwZCAgPSAwLAkJCQkvKiBE SUFMIFNQRUVELU1BVENISU5HICgwID0gT0ZGKSAqLwotICBtZG1zcGsgID0gMSwJCQkJLyogTU9E RU0gU1BFQUtFUiAqLwotICBtZG12b2wgID0gMiwJCQkJLyogTU9ERU0gVk9MVU1FICovCi0gIGRp YWx0bW8gPSAwLAkJCQkvKiBESUFMIFRJTUVPVVQgKi8KLSAgZGlhbGF0bW8gPSAtMSwJCQkvKiBB TlNXRVIgVElNRU9VVCAqLwotICBkaWFsa3NwID0gMCwJCQkJLyogRElBTCBLRVJNSVQtU1BPT0Ys IDAgPSBPRkYgKi8KLSAgZGlhbGlkdCA9IDAsCQkJCS8qIERJQUwgSUdOT1JFLURJQUxUT05FICov Ci0jaWZuZGVmIENLX1JUU0NUUwotICAvKiBJZiB3ZSBjYW4ndCBkbyBSVFMvQ1RTIHRoZW4gdGhl cmUncyBubyBmbG93IGNvbnRyb2wgYXQgZmlyc3QuICAqLwotICAvKiBTbyB3ZSBtaWdodCBlYXNp bHkgbG9zZSB0aGUgZWNobyB0byB0aGUgaW5pdCBzdHJpbmcgYW5kIHRoZSBPSyAqLwotICAvKiBh bmQgdGhlbiBnaXZlICJObyByZXNwb25zZSBmcm9tIG1vZGVtIiBlcnJvcnMuICovCi0gIGRpYWxw YWNlID0gMTUwLAkJCS8qIERJQUwgUEFDSU5HICovCi0jZWxzZQotICBkaWFscGFjZSA9IC0xLAot I2VuZGlmIC8qIENLX1JUU0NUUyAqLwotCi0gIC8qIDAgPSBSUzIzMiAoZHJvcCBEVFIpOyAxID0g TU9ERU0tQ09NTUFORCAoZS5nLiA8c2VjPisrKzxzZWM+QVRIMCkgKi8KLSAgZGlhbG1odSA9IERF Rk1ETUhVUDsJCQkvKiBNT0RFTSBIQU5HVVAtTUVUSE9EICovCi0KLWludAotICBkaWFsZWMgPSAx LAkJCQkvKiBESUFMIEVSUk9SLUNPUlJFQ1RJT04gKi8KLSAgZGlhbGRjID0gMSwJCQkJLyogRElB TCBDT01QUkVTU0lPTiAgKi8KLSNpZmRlZiBWTVMKLSAgLyogVk1TIGNhbiBvbmx5IHVzZSBYb24v WG9mZiAqLwotICBkaWFsZmMgPSBGTE9fWE9OWCwJCQkvKiBESUFMIEZMT1ctQ09OVFJPTCAqLwot I2Vsc2UKLSAgZGlhbGZjID0gRkxPX0FVVE8sCi0jZW5kaWYgLyogVk1TICovCi0gIGRpYWxtdGgg PSBYWURNX0QsCQkJLyogRElBTCBNRVRIT0QgKFRvbmUsIFB1bHNlLCBEZWZhbHQpICovCi0gIGRp YWxtYXV0byA9IDEsCQkJLyogRElBTCBNRVRIT0QgaXMgQVVUTyAqLwotICBkaWFsZXNjID0gMDsJ CQkJLyogRElBTCBFU0NBUEUgKi8KLQotaW50IHRlbGVwaG9ueSA9IDA7CQkJLyogQ29tbWFuZC1s aW5lICctVCcgb3B0aW9uICovCi0KLWxvbmcgZGlhbG1heCA9IDBMLAkJCS8qIE1vZGVtJ3MgbWF4 IGludGVyZmFjZSBzcGVlZCAqLwotICBkaWFsY2FwYXMgID0gMEw7CQkJLyogTW9kZW0ncyBjYXBh YmlsaXRpZXMgKi8KLQotaW50IGRpYWxzdGEgPSBESUFfVU5LOwkJCS8qIERldGFpbGVkIHJldHVy biBjb2RlIChja3V1c3IuaCkgKi8KLQotI2lmZGVmIENPTU1FTlQKLWludCBhbnNfY2lkID0gMDsJ CQkvKiBTRVQgQU5TV0VSIHBhcmFtZXRlcnMgKi8KLWludCBhbnNfcmluZ3MgPSAwOwkJCS8qIChu b3QgdXNlZCB5ZXQuLi4pICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi1pbnQgaXNfcm9ja3dl bGwgPSAwOwotaW50IGlzX21vdG9yb2xhID0gMDsKLWludCBpc19zdXByYSA9IDA7Ci1pbnQgaXNf aGF5ZXNoaXNwZCA9IDA7Ci0KLS8qIERpYWxpbmcgZGlyZWN0b3J5IGxpc3QgKi8KLQotY2hhciAq ZGlhbGRpcltNQVhERElSXTsJCQkvKiBESUFMIERJUkVDVE9SWSBmaWxlbmFtZSBhcnJheSAqLwot aW50ICAgbmRpYWxkaXIgPSAwOwkJCS8qIEhvdyBtYW55IGRpYWwgZGlyZWN0b3JpZXMgKi8KLQot LyogVXNlciBvdmVycmlkZXMgZm9yIGJ1aWx0LWluIG1vZGVtIGNvbW1hbmRzICovCi0KLWNoYXIg KmRpYWxpbmkgPSBOVUxMOwkJCS8qIE1PREVNIElOSVQtU1RSSU5HIG5vbmUgKi8KLWNoYXIgKmRp YWxtc3RyID0gTlVMTDsJCQkvKiBNT0RFTSBESUFMTU9ERS1TVFJJTkcgKi8KLWNoYXIgKmRpYWxt cHJtdCA9IE5VTEw7CQkJLyogTU9ERU0gRElBTE1PREUtUFJPTVBUICovCi1jaGFyICpkaWFsY21k ID0gTlVMTDsJCQkvKiBNT0RFTSBESUFMLUNPTU1BTkQsIGRlZmF1bHQgbm9uZSAqLwotY2hhciAq ZGlhbG5hbWUgID0gTlVMTDsJCQkvKiBEZXNjcmlwdGl2ZSBuYW1lIGZvciBtb2RlbSAqLwotY2hh ciAqZGlhbGRjb24gID0gTlVMTDsJCQkvKiBEQyBPTiBjb21tYW5kICovCi1jaGFyICpkaWFsZGNv ZmYgPSBOVUxMOwkJCS8qIERDIE9GRiBjb21tYW5kICovCi1jaGFyICpkaWFsZWNvbiAgPSBOVUxM OwkJCS8qIEVDIE9OIGNvbW1hbmQgKi8KLWNoYXIgKmRpYWxlY29mZiA9IE5VTEw7CQkJLyogRUMg T0ZGIGNvbW1hbmQgKi8KLWNoYXIgKmRpYWxhYW9uICA9IE5VTEw7CQkJLyogQXV0b2Fuc3dlciBP TiBjb21tYW5kICovCi1jaGFyICpkaWFsYWFvZmYgPSBOVUxMOwkJCS8qIEF1dG9hbnN3ZXIgT0ZG IGNvbW1hbmQgKi8KLWNoYXIgKmRpYWxoY21kICA9IE5VTEw7CQkJLyogSGFuZ3VwIGNvbW1hbmQg Ki8KLWNoYXIgKmRpYWxod2ZjICA9IE5VTEw7CQkJLyogSGFyZHdhcmUgZmxvdyBjb250cm9sIGNv bW1hbmQgKi8KLWNoYXIgKmRpYWxzd2ZjICA9IE5VTEw7CQkJLyogKExvY2FsKSBzb2Z0d2FyZSBm LmMuIGNvbW1hbmQgKi8KLWNoYXIgKmRpYWxub2ZjICA9IE5VTEw7CQkJLyogTm8gKExvY2FsKSBm bG93IGNvbnRyb2wgY29tbWFuZCAqLwotY2hhciAqZGlhbHRvbmUgID0gTlVMTDsJCQkvKiBDb21t YW5kIHRvIGZvcmNlIHRvbmUgZGlhbGluZyAqLwotY2hhciAqZGlhbHB1bHNlID0gTlVMTDsJCQkv KiAgLi50byBmb3JjZSBwdWxzZSBkaWFsaW5nICovCi1jaGFyICpkaWFseDMgICAgPSBOVUxMOwkJ CS8qIElnbm9yZSBkaWFsdG9uZSAqLwotY2hhciAqbWRtbmFtZSAgID0gTlVMTDsKLWNoYXIgKmRp YWxzcG9uICA9IE5VTEw7CQkJLyogU3BlYWtlciBPbiBjb21tYW5kICovCi1jaGFyICpkaWFsc3Bv ZmYgPSBOVUxMOwkJCS8qIFNwZWFrZXIgT2ZmIGNvbW1hbmQgKi8KLWNoYXIgKmRpYWx2b2wxICA9 IE5VTEw7CQkJLyogVm9sdW1lIExvdyBjb21tYW5kICovCi1jaGFyICpkaWFsdm9sMiAgPSBOVUxM OwkJCS8qIFZvbHVtZSBNZWRpdW0gY29tbWFuZCAqLwotY2hhciAqZGlhbHZvbDMgID0gTlVMTDsJ CQkvKiBWb2x1bWUgSGlnaCBjb21tYW5kICovCi1jaGFyICpkaWFsaW5pMiAgPSBOVUxMOwkJCS8q IFNlY29uZCBpbml0IHN0cmluZyAqLwotCi0vKiBQaG9uZSBudW1iZXIgb3B0aW9ucyAqLwotCi1j aGFyICpkaWFsbnByID0gTlVMTDsJCQkvKiBESUFMIFBSRUZJWCwgZGl0dG8gKi8KLWNoYXIgKmRp YWxsYWMgPSBOVUxMOwkJCS8qIERJQUwgTE9DQUwtQVJFQS1DT0RFLCBkaXR0byAqLwotY2hhciAq ZGlhbGxjYyA9IE5VTEw7CQkJLyogRElBTCBMT0NBTC1DT1VOVFJZLUNPREUsIGRpdHRvICovCi1j aGFyICpkaWFsaXhwID0gTlVMTDsJCQkvKiBESUFMIElOVEwtUFJFRklYICovCi1jaGFyICpkaWFs aXhzID0gTlVMTDsJCQkvKiBESUFMIElOVEwtU1VGRklYICovCi1jaGFyICpkaWFsbGRwID0gTlVM TDsJCQkvKiBESUFMIExELVBSRUZJWCAqLwotY2hhciAqZGlhbGxkcyA9IE5VTEw7CQkJLyogRElB TCBMRC1TVUZGSVggKi8KLWNoYXIgKmRpYWxsY3AgPSBOVUxMOwkJCS8qIERJQUwgTE9DQUwtUFJF RklYICovCi1jaGFyICpkaWFsbGNzID0gTlVMTDsJCQkvKiBESUFMIExPQ0FMLVNVRkZJWCAqLwot Y2hhciAqZGlhbHB4aSA9IE5VTEw7CQkJLyogRElBTCBQQlgtSU5URVJOQUwtUFJFRklYICovCi1j aGFyICpkaWFscHhvID0gTlVMTDsJCQkvKiBESUFMIFBCWC1PVVRTSURFLVBSRUZJWCAqLwotY2hh ciAqZGlhbHNmeCA9IE5VTEw7CQkJLyogRElBTCBTVUZGSVggKi8KLWNoYXIgKmRpYWx0ZnAgPSBO VUxMOwkJCS8qIERJQUwgVE9MTC1GUkVFLVBSRUZJWCAqLwotCi1jaGFyICpjYWxsaWRfZGF0ZSA9 IE5VTEw7CQkvKiBDYWxsZXIgSUQgc3RyaW5ncyAqLwotY2hhciAqY2FsbGlkX3RpbWUgPSBOVUxM OwotY2hhciAqY2FsbGlkX25hbWUgPSBOVUxMOwotY2hhciAqY2FsbGlkX25tYnIgPSBOVUxMOwot Y2hhciAqY2FsbGlkX21lc2cgPSBOVUxMOwotCi1leHRlcm4gY2hhciAqIGRfbmFtZTsKLWV4dGVy biBjaGFyICogZGlhbHRmY1tdOwkJLyogRElBTCBUT0xMLUZSRUUtQVJFQS1DT0RFICovCi1leHRl cm4gY2hhciAqIGRpYWxweHhbXTsJCS8qIERJQUwgUEJYLUVYQ0hBTkdFICovCi1leHRlcm4gaW50 IG50b2xsZnJlZTsKLWV4dGVybiBpbnQgbmRpYWxweHg7Ci0KLWV4dGVybiBjaGFyICogZGlhbHB1 Y2NbXTsJCS8qIERJQUwgUHVsc2UgY291bnRyaWVzICovCi1leHRlcm4gaW50IG5kaWFscHVjYzsK LWV4dGVybiBjaGFyICogZGlhbHRvY2NbXTsJCS8qIERJQUwgVG9uZSBjb3VudHJpZXMgKi8KLWV4 dGVybiBpbnQgbmRpYWx0b2NjOwotCi1jaGFyICpkaWFsbWFjICAgPSBOVUxMOwkJCS8qIERJQUwg bWFjcm8gKi8KLQotLyogQ291bnRyaWVzIHdoZXJlIHB1bHNlIGRpYWxpbmcgbXVzdCBiZSB1c2Vk ICh0b25lIGlzIG5vdCBhdmFpbGFibGUpICovCi1zdGF0aWMgY2hhciAqIHB1bHNlY2NbXSA9IHsg TlVMTCB9OwkvKiAoVW5rbm93biBhdCBwcmVzZW50KSAqLwotCi0vKiBDb3VudHJpZXMgd2hlcmUg dG9uZSBkaWFsaW5nIG1heSBzYWZlbHkgYmUgdGhlIGRlZmF1bHQuICovCi0vKiAiKyIgbWFya3Mg Y291bnRyaWVzIHdoZXJlIHB1bHNlIGlzIGFsc28gYWxsb3dlZC4gKi8KLS8qIEJvdGggUHVsc2Ug YW5kIFRvbmUgYXJlIGFsbG93ZWQgaW4gQXVzdHJpYSAmIFN3aXR6ZXJsYW5kIGJ1dCBpdCBpcyBu b3QgKi8KLS8qIHlldCBrbm93biBpZiBUb25lIGlzIHVuaXZlcnNhbGx5IGluIHRob3NlIGNvdW50 cmllcy4gKi8KLXN0YXRpYyBjaGFyICogdG9uZWNjW10gPSB7Ci0gICAgIjEiLAkJCQkvKiArIE5v cnRoIEFtZXJpY2FuIE51bWJlcmluZyBQbGFuICovCi0gICAgIjMxIiwJCQkJLyogICBOZXRoZXJs YW5kcyAqLwotICAgICIzMiIsCQkJCS8qICAgQmVsZ2l1bSAqLwotICAgICIzMyIsCQkJCS8qICAg RnJhbmNlICovCi0gICAgIjM1MiIsCQkJCS8qICAgTHV4ZW1ib3VyZyAqLwotICAgICIzNTMiLAkJ CQkvKiAgIElyZWxhbmQgKi8KLSAgICAiMzU0IiwJCQkJLyogICBJY2VsYW5kICovCi0gICAgIjM1 OCIsCQkJCS8qICAgRmlubGFuZCAqLwotICAgICIzOSIsCQkJCS8qICAgSXRhbHkgKi8KLSAgICAi NDQiLAkJCQkvKiArIFVLICovCi0gICAgIjQ1IiwJCQkJLyogICBEZW5tYXJrICovCi0gICAgIjQ2 IiwJCQkJLyogICBTd2VkZW4gKi8KLSAgICAiNDciLAkJCQkvKiAgIE5vcndheSAqLwotICAgICI0 OSIsCQkJCS8qICsgR2VybWFueSAqLwotICAgIE5VTEwKLX07Ci0KLSNpZm5kZWYgTUlOSURJQUwK LS8qCi0gIFRlbGViaXQgbW9kZWwgY29kZXM6Ci0KLSAgQVRJICBNb2RlbCBOdW1iZXJzICAgICAg ICAgICBFeGFtcGxlcwotICAtLS0gIC0tLS0tLS0tLS0tLS0gICAgICAgICAgIC0tLS0tLS0tCi0g IDEyMyAgICAgICAgICAgICAgICAgICAgICAgICAgVGVsZWJpdCBpbiAidG90YWwgSGF5ZXMtMTIw MCIgZW11bGF0aW9uIG1vZGUKLSAgOTYwICAgICAgICAgICAgICAgICAgICAgICAgICBUZWxlYml0 IGluIENvbnZlbnRpb25hbCBDb21tYW5kIChIYXllcykgbW9kZQotICA5NjEgIFJBMTJDICAgICAg ICAgICAgICAgICAgIElCTSBQQyBpbnRlcm5hbCBvcmlnaW5hbCBUcmFpbGJsYXplcgotICA5NjIg IFJBMTJFICAgICAgICAgICAgICAgICAgIEV4dGVybmFsIG9yaWdpbmFsIFRyYWlsYmxhemVyCi0g IDk2MyAgUk0xMkMgICAgICAgICAgICAgICAgICAgUmFja21vdW50IG9yaWdpbmFsIFRyYWlsYmxh emVyCi0gIDk2NCAgVDE4UEMgICAgICAgICAgICAgICAgICAgSUJNIFBDIGludGVybmFsIFRyYWls YmxhemVyLVBsdXMgKFRCKykKLSAgOTY1ICBUMThTQSwgVDJTQUEsIFQyU0FTICAgICBFeHRlcm5h bCBUQissIFQxNjAwLCBUMjAwMCwgVDMwMDAsIFdCLCBhbmQgbGF0ZXIKLSAgOTY2ICBUMThSTU0g ICAgICAgICAgICAgICAgICBSYWNrbW91bnQgVEIrCi0gIDk2NyAgVDJNQyAgICAgICAgICAgICAg ICAgICAgSUJNIFBTLzIgaW50ZXJuYWwgVEIrCi0gIDk2OCAgVDEwMDAgICAgICAgICAgICAgICAg ICAgRXh0ZXJuYWwgVDEwMDAKLSAgOTY5ICA/ICAgICAgICAgICAgICAgICAgICAgICBRYmxhemVy Ci0gIDk3MCAgICAgICAgICAgICAgICAgICAgICAgICAgUWJsYXplciBQbHVzCi0gIDk3MSAgVDI1 MDAgICAgICAgICAgICAgICAgICAgRXh0ZXJuYWwgVDI1MDAKLSAgOTcyICBUMjUwMCAgICAgICAg ICAgICAgICAgICBSYWNrbW91bnQgVDI1MDAKLSovCi0KLS8qIFRlbGViaXQgbW9kZWwgY29kZXMg Ki8KLQotI2RlZmluZSBUQl9VTksgIDAJCQkvKiBVbmtub3duIFRlbGViaXQgbW9kZWwgKi8KLSNk ZWZpbmUgVEJfQkxBWiAxCQkJLyogT3JpZ2luYWwgVHJhaWxCbGF6ZXIgKi8KLSNkZWZpbmUgVEJf UExVUwkyCQkJLyogVHJhaWxCbGF6ZXIgUGx1cyAqLwotI2RlZmluZSBUQl8xMDAwIDMJCQkvKiBU MTAwMCAqLwotI2RlZmluZSBUQl8xNTAwIDQJCQkvKiBUMTUwMCAqLwotI2RlZmluZSBUQl8xNjAw IDUJCQkvKiBUMTYwMCAqLwotI2RlZmluZSBUQl8yMDAwIDYJCQkvKiBUMjAwMCAqLwotI2RlZmlu ZSBUQl8yNTAwIDcJCQkvKiBUMjUwMCAqLwotI2RlZmluZSBUQl8zMDAwIDgJCQkvKiBUMzAwMCAq LwotI2RlZmluZSBUQl9RQkxBIDkJCQkvKiBRYmxhemVyICovCi0jZGVmaW5lIFRCX1dCTEEgMTAJ CQkvKiBXb3JsZEJsYXplciAqLwotI2RlZmluZSBUQl9fTUFYIDEwCQkJLyogSGlnaGVzdCBudW1i ZXIgKi8KLQotY2hhciAqdGJfbmFtZVtdID0gewkJCS8qIEFycmF5IG9mIG1vZGVsIG5hbWVzICov Ci0gICAgIlVua25vd24iLAkJCQkvKiBUQl9VTksgICovCi0gICAgIlRyYWlsQmxhemVyIiwJCQkv KiBUQl9CTEFaICovCi0gICAgIlRyYWlsQmxhemVyLVBsdXMiLAkJCS8qIFRCX1BMVVMgKi8KLSAg ICAiVDEwMDAiLAkJCQkvKiBUQl8xMDAwICovCi0gICAgIlQxNTAwIiwJCQkJLyogVEJfMTUwMCAq LwotICAgICJUMTYwMCIsCQkJCS8qIFRCXzE2MDAgKi8KLSAgICAiVDIwMDAiLAkJCQkvKiBUQl8y MDAwICovCi0gICAgIlQyNTAwIiwJCQkJLyogVEJfMjUwMCAqLwotICAgICJUMzAwMCIsCQkJCS8q IFRCXzMwMDAgKi8KLSAgICAiUWJsYXplciIsCQkJCS8qIFRCX1FCTEEgKi8KLSAgICAiV29ybGRC bGF6ZXIiLAkJCS8qIFRCX1dCTEEgKi8KLSAgICAiIgotfTsKLSNlbmRpZiAvKiBNSU5JRElBTCAq LwotCi1leHRlcm4gaW50IGZsb3csIGxvY2FsLCBtZG10eXAsIHF1aWV0LCBiYWNrZ3JkLCBwYXJp dHksIHNlc2xvZywgbmV0d29yazsKLWV4dGVybiBpbnQgY2FycmllciwgZHVwbGV4LCBtZG1zYXYs IHJlbGlhYmxlLCBzZXRyZWxpYWJsZTsKLWV4dGVybiBpbnQgdHRucHJvdG8sIG5ldHR5cGU7Ci1l eHRlcm4gbG9uZyBzcGVlZDsKLWV4dGVybiBjaGFyIHR0bmFtZVtdLCBzZXNmaWxbXTsKLSNpZm5k ZWYgTk9YRkVSCi1leHRlcm4gQ0hBUiBzdGNocjsKLWV4dGVybiBpbnQgaW50ZXJydXB0ZWQ7Ci0j ZW5kaWYgLyogTk9YRkVSICovCi0KLS8qICBGYWlsdXJlIGNvZGVzICAqLwotCi0jZGVmaW5lIEZf VElNRQkJMQkJLyogdGltZW91dCAqLwotI2RlZmluZSBGX0lOVAkJMgkJLyogaW50ZXJydXB0ICov Ci0jZGVmaW5lIEZfTU9ERU0JCTMJCS8qIG1vZGVtLWRldGVjdGVkIGZhaWx1cmUgKi8KLSNkZWZp bmUgRl9NSU5JVAkJNAkJLyogY2Fubm90IGluaXRpYWxpemUgbW9kZW0gKi8KLQotI2lmbmRlZiBD S19UQVBJCi1zdGF0aWMKLSNlbmRpZiAvKiBDS19UQVBJICovCi0jaWZkZWYgT1MyCi0gdm9sYXRp bGUKLSNlbmRpZiAvKiBPUzIgKi8KLSBpbnQgZmFpbF9jb2RlID0gIDA7CQkJLyogRGVmYXVsdCBm YWlsdXJlIHJlYXNvbi4gKi8KLQotc3RhdGljIGludCB4cmVkaWFsID0gMDsKLXN0YXRpYyBpbnQg ZnVuY19jb2RlOwkJCS8qIDAgPSBkaWFsaW5nLCBub256ZXJvID0gYW5zd2VyaW5nICovCi1zdGF0 aWMgaW50IHBhcnRpYWw7Ci1zdGF0aWMgaW50IG15bWRtdHlwID0gMDsKLQotI2RlZmluZSBEV19O T1RISU5HICAgICAgMAkJLyogV2hhdCB3ZSBhcmUgZG9pbmcgKi8KLSNkZWZpbmUgRFdfSU5JVCAg ICAgICAgIDEKLSNkZWZpbmUgRFdfRElBTCAgICAgICAgIDIKLQotc3RhdGljIGludCBkaWFsX3do YXQgPSBEV19OT1RISU5HOwkvKiBOb3RoaW5nIGF0IGZpcnN0LiAqLwotc3RhdGljIGludCBub252 ZXJiYWwgPSAwOwkJLyogSGF5ZXMgaW4gbnVtZXJpYyByZXNwb25zZSBtb2RlICovCi1zdGF0aWMg TURNSU5GICogbXA7Ci1zdGF0aWMgQ0hBUiBlc2NidWZbNl07Ci1zdGF0aWMgbG9uZyBtZG1jYXBh czsKLQotX1BST1RPVFlQIChzdGF0aWMgVk9JRCBkcmVzZXQsICh2b2lkKSApOwotX1BST1RPVFlQ IChzdGF0aWMgaW50ICgqeHhfb2spLCAoaW50LGludCkgKTsKLV9QUk9UT1RZUCAoc3RhdGljIGlu dCBkZGluYywgKGludCkgKTsKLV9QUk9UT1RZUCAoaW50IGRpYWxodXAsICh2b2lkKSApOwotX1BS T1RPVFlQIChpbnQgZ2V0b2ssIChpbnQsaW50KSApOwotX1BST1RPVFlQIChjaGFyICogY2tfdGlt ZSwgKHZvaWQpICk7Ci1fUFJPVE9UWVAgKHN0YXRpYyBWT0lEIHR0c2xvdywgKGNoYXIgKiwgaW50 KSApOwotI2lmZGVmIENPTU1FTlQKLV9QUk9UT1RZUCAoc3RhdGljIFZPSUQgeGNweSwgKGNoYXIg KiwgY2hhciAqLCB1bnNpZ25lZCBpbnQpICk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotX1BST1RP VFlQIChzdGF0aWMgVk9JRCB3YWl0Zm9yLCAoY2hhciAqKSApOwotX1BST1RPVFlQIChzdGF0aWMg Vk9JRCBkaWFsb2MsIChjaGFyKSApOwotX1BST1RPVFlQIChzdGF0aWMgaW50IGRpZHdlZ2V0LCAo Y2hhciAqLCBjaGFyICopICk7Ci1fUFJPVE9UWVAgKHN0YXRpYyBWT0lEIHNwZGNoZywgKGxvbmcp ICk7Ci1fUFJPVE9UWVAgKHN0YXRpYyBpbnQgZGlhbGZhaWwsIChpbnQpICk7Ci1fUFJPVE9UWVAg KHN0YXRpYyBWT0lEIGdldGhydywgKHZvaWQpICk7Ci1fUFJPVE9UWVAgKHN0YXRpYyBWT0lEIGdl dGhybiwgKHZvaWQpICk7Ci0KLWludCBkaWFsdWR0ID0gbl9VREVGOwkJCS8qIE51bWJlciBvZiB1 c2VyLWRlZmluZWQgdHlwZSAqLwotCi0vKiBCRUdJTiBNRE1JTkYgU1RSVUNUIERFRklOSVRJT05T ICovCi0KLS8qCi0gIERlY2xhcmUgc3RydWN0dXJlcyBjb250YWluaW5nIG1vZGVtLXNwZWNpZmlj IGluZm9ybWF0aW9uLgotICBSRU1FTUJFUiB0aGF0IG9ubHkgdGhlIGZpcnN0IFNFVkVOIGNoYXJh Y3RlcnMgb2YgdGhlc2UgbmFtZXMgYXJlCi0gIGd1YXJhbnRlZWQgdG8gYmUgdW5pcXVlLgotCi0g IEZpcnN0IGRlY2xhcmUgdGhlIHRocmVlIHR5cGVzIHRoYXQgYXJlIGFsbG93ZWQgZm9yIE1JTklE SUFMIHZlcnNpb25zLgotKi8KLXN0YXRpYwotTURNSU5GIENDSVRUID0JCQkJLyogQ0NJVFQgLyBJ VFUtVCBWLjI1YmlzIGF1dG9kaWFsZXIgKi8KLS8qCi0gIEFjY29yZGluZyB0byBWLjI1YmlzOgot ICAuIEV2ZW4gcGFyaXR5IGlzIHJlcXVpcmVkIGZvciBnaXZpbmcgY29tbWFuZHMgdG8gdGhlIG1v ZGVtLgotICAuIENvbW1hbmRzIG1pZ2h0IG9yIG1pZ2h0IG5vdCBlY2hvLgotICAuIFJlc3BvbnNl cyAoIkluZGljYXRpb25zIikgZnJvbSB0aGUgbW9kZW0gYXJlIHRlcm1pbmF0ZWQgYnkgQ1IgYW5k IExGLgotICAuIENhbGwgc2V0dXAgaXMgYWNjb21wbGlzaGVkIGJ5OgotICAgIC0gRFRFIHJhaXNl cyBEVFIgKFYuMjQgY2lyY3VpdCAxMDgpICAgICAgICAgICAgICBbdHRvcGVuKCkgZG9lcyB0aGlz XQotICAgIC0gTW9kZW0gcmFpc2VzIENUUyAoVi4yNCBjaXJjdWl0IDEwNikgICAgICAgICAgICBb Qy1LZXJtaXQgaWdub3JlcyB0aGlzXQotICAgIC0gRFRFIGlzc3VlcyBhIGNhbGwgcmVxdWVzdCBj b21tYW5kICgiQ1JOIikKLSAgICAtIE1vZGVtIHJlc3BvbmRzIHdpdGggIlZBTCIgKCJjb21tYW5k IGFjY2VwdGVkIikKLSAgICAtIElmIHRoZSBjYWxsIGlzIGNvbXBsZXRlZDoKLSAgICAgICAgbW9k ZW0gcmVzcG9uZHMgd2l0aCAiQ05YIiAoImNhbGwgY29ubmVjdGVkIik7Ci0gICAgICAgIG1vZGVt IHR1cm5zIENUUyAoMTA2KSBPRkY7Ci0gICAgICAgIG1vZGVtIHR1cm5zIERTUiAoMTA3KSBPTjsK LSAgICAgIGVsc2U6Ci0gICAgICAgIG1vZGVtIHJlc3BvbmRzIHdpdGggIkNGSSA8cGFyYW1ldGVy PiIgKCJjYWxsIGZhaWx1cmUgaW5kaWNhdGlvbiIpLgotICAuIFRvIGNsZWFyIGEgY2FsbCwgdGhl IERURSB0dXJucyBEVFIgKDEwOCkgT0ZGLgotICAuIFRoZXJlIGlzIG5vIG1lbnRpb24gb2YgdGhl IENhcnJpZXIgRGV0ZWN0IGNpcmN1aXQgKDEwOSkgaW4gdGhlIHN0YW5kYXJkLgotICAuIFRoZXJl IGlzIG5vIHByb3Zpc2lvbiBmb3IgImVzY2FwaW5nIGJhY2siIHRvIHRoZSBtb2RlbSdzIGNvbW1h bmQgbW9kZS4KLQotICBJdCBpcyBub3Qga25vd24gd2hldGhlciB0aGVyZSBleGlzdHMgaW4gcmVh bCBsaWZlIGEgcHVyZSBWLjI1YmlzIG1vZGVtLgotICBJZiB0aGVyZSBpcywgdGhpcyBjb2RlIGhh cyBuZXZlciBiZWVuIHRlc3RlZCBvbiBpdC4gIFNlZSB0aGUgRGlnaXRlbCBlbnRyeS4KLSovCi0g ICAgewotICAgICJBbnkgQ0NJVFQgLyBJVFUtVCBWLjI1YmlzIGNvbmZvcm1hbnQgbW9kZW0iLAot ICAgICIiLAkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiIiwJCQkvKiB0b25lIGNvbW1hbmQg Ki8KLSAgICA0MCwJCQkvKiBkaWFsX3RpbWUgLS0gcHJvZ3JhbW1hYmxlIC0tICovCi0gICAgIiw6 IiwJCS8qIHBhdXNlX2NoYXJzIC0tICIsIiB3YWl0cyBmb3IgcHJvZ3JhbW1hYmxlIHRpbWUgKi8K LSAgICAgICAgICAgICAgICAgICAgICAgIC8qICI6IiB3YWl0cyBmb3IgZGlhbCB0b25lICovCi0g ICAgMTAsCQkJLyogcGF1c2VfdGltZSAoc2Vjb25kcywganVzdCBhIGd1ZXNzKSAqLwotICAgICIi LAkJCS8qIHdha2Vfc3RyIChub25lKSAqLwotICAgIDIwMCwJCS8qIHdha2VfcmF0ZSAobXNlYykg Ki8KLSAgICAiVkFMIiwJCS8qIHdha2VfcHJvbXB0ICovCi0gICAgIiIsCQkJLyogZG1vZGVfc3Ry IChub25lKSAqLwotICAgICIiLAkJCS8qIGRtb2RlX3Byb21wdCAobm9uZSkgKi8KLSAgICAiQ1JO JXNcMDE1IiwgICAgICAgIC8qIGRpYWxfc3RyICovCi0gICAgMjAwLAkJLyogZGlhbF9yYXRlICht c2VjKSAqLwotICAgIDAsCQkJLyogTm8gZXNjX3RpbWUgKi8KLSAgICAwLAkJCS8qIE5vIGVzY19j aGFyICAqLwotICAgICIiLAkJCS8qIE5vIGh1cF9zdHIgICovCi0gICAgIiIsCQkJLyogaHdmY19z dHIgKi8KLSAgICAiIiwJCQkvKiBzd2ZjX3N0ciAqLwotICAgICIiLAkJCS8qIG5vZmNfc3RyICov Ci0gICAgIiIsCQkJLyogZWNfb25fc3RyICovCi0gICAgIiIsCQkJLyogZWNfb2ZmX3N0ciAqLwot ICAgICIiLAkJCS8qIGRjX29uX3N0ciAqLwotICAgICIiLAkJCS8qIGRjX29mZl9zdHIgKi8KLSAg ICAiQ0lDXDAxNSIsCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiRElDXDAxNSIsCQkvKiBhYV9vZmZf c3RyICovCi0gICAgIiIsCQkJLyogc2Jfb25fc3RyICovCi0gICAgIiIsCQkJLyogc2Jfb2ZmX3N0 ciAqLwotICAgICIiLAkJCS8qIHNwX29mZl9zdHIgKi8KLSAgICAiIiwJCQkvKiBzcF9vbl9zdHIg Ki8KLSAgICAiIiwJCQkvKiB2b2wxX3N0ciAqLwotICAgICIiLAkJCS8qIHZvbDJfc3RyICovCi0g ICAgIiIsCQkJLyogdm9sM19zdHIgKi8KLSAgICAiIiwJCQkvKiBpZ25vcmVkdCAqLwotICAgICIi LAkJCS8qIGluaTIgKi8KLSAgICAwTCwJCQkvKiBtYXhfc3BlZWQgKi8KLSAgICBDS0RfVjI1LAkJ LyogY2FwYXMgKi8KLSAgICBOVUxMCQkvKiBObyBva19mbiAgICAqLwotfTsKLQotc3RhdGljCi1N RE1JTkYgSEFZRVMgPQkJCQkvKiBIYXllcyAyNDAwIGFuZCBjb21wYXRpYmxlIG1vZGVtcyAqLwot ICAgIHsKLSAgICAiSGF5ZXMgU21hcnRtb2RlbSAyNDAwIGFuZCBjb21wYXRpYmxlcyIsCi0gICAg IkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIkFUVFwwMTUiLAkJCQkvKiB0 b25lIGNvbW1hbmQgKi8KLSAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAgICIsIiwJCQkJ LyogcGF1c2VfY2hhcnMgKi8KLSAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLwotI2lmZGVmIE9T MgotICAgICJBVEUxUTBWMSZTMCZDMSZEMlwwMTUiLAkJLyogd2FrZV9zdHIgKi8KLSNlbHNlCi0j aWZkZWYgVk1TCi0gICAgIkFUUTAmUzFcMDE1IiwJCQkvKiB3YWtlX3N0ciAqLwotI2Vsc2UKLSAg ICAiQVRRMFwwMTUiLAkJCQkvKiB3YWtlX3N0ciAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlm IC8qIE9TMiAqLwotICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KLSAgICAiT0tcMDE1IiwJCQkJ Lyogd2FrZV9wcm9tcHQgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLwotICAgICIiLAkJ CQkJLyogZG1vZGVfcHJvbXB0ICovCi0gICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIsIHVz ZXIgc3VwcGxpZXMgRCBvciBUICovCi0gICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLwotICAgIDEx MDAsCQkJCS8qIGVzY190aW1lICovCi0gICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLwotICAgICJB VFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCi0gICAgIiIsCQkJCQkvKiBod2ZjX3N0ciAqLwot ICAgICIiLAkJCQkJLyogc3dmY19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIG5vZmNfc3RyICovCi0g ICAgIiIsCQkJCQkvKiBlY19vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGVjX29mZl9zdHIgKi8K LSAgICAiIiwJCQkJCS8qIGRjX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogZGNfb2ZmX3N0ciAq LwotICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiQVRTMD0wXDAxNSIs CQkJLyogYWFfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCi0gICAgIiIs CQkJCQkvKiBzYl9vZmZfc3RyICovCi0gICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3RyICov Ci0gICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAgICJBVEwxXDAxNSIsCQkJ CS8qIHZvbDFfc3RyICovCi0gICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KLSAgICAi QVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLwotICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9y ZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgMjQwMEwsCQkJCS8qIG1heF9zcGVl ZCAqLwotICAgIENLRF9BVCwJCQkJLyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBva19mbiAq LwotfTsKLQotLyoKLSAgVGhlIGludGVudCBvZiB0aGUgInVua25vd24iIG1vZGVtIGlzIHRvIGFs bG93IEtFUk1JVCB0byBzdXBwb3J0Ci0gIHVua25vd24gbW9kZW1zIGJ5IGhhdmluZyB0aGUgdXNl ciB0eXBlIHRoZSBlbnRpcmUgYXV0b2RpYWwgc2VxdWVuY2UKLSAgKHBvc3NpYmx5IGluY2x1ZGlu ZyBjb250cm9sIGNoYXJhY3RlcnMsIGV0Yy4pIGFzIHRoZSAicGhvbmUgbnVtYmVyIi4KLSAgVGhl IHByb3RvY29sIGFuZCBvdGhlciBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhpcyBtb2RlbSBhcmUgdW5r bm93biwgd2l0aAotICBzb21lICJyZWFzb25hYmxlIiB2YWx1ZXMgYmVpbmcgY2hvc2VuIGZvciBz b21lIG9mIHRoZW0uICBUaGUgb25seSB3YXkgdG8KLSAgZGV0ZWN0IGlmIGEgY29ubmVjdGlvbiBp cyBtYWRlIGlzIHRvIGxvb2sgZm9yIGNhcnJpZXIuCi0qLwotc3RhdGljCi1NRE1JTkYgVU5LTk9X TiA9CQkJLyogSW5mb3JtYXRpb24gZm9yICJVbmtub3duIiBtb2RlbSAqLwotICAgIHsKLSAgICAi VW5rbm93biIsCQkJCS8qIG5hbWUgKi8KLSAgICAiIiwJCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8K LSAgICAiIiwJCQkJCS8qIHRvbmUgY29tbWFuZCAqLwotICAgIDMwLAkJCQkJLyogZGlhbF90aW1l ICovCi0gICAgIiIsCQkJCQkvKiBwYXVzZV9jaGFycyAqLwotICAgIDAsCQkJCQkvKiBwYXVzZV90 aW1lICovCi0gICAgIiIsCQkJCQkvKiB3YWtlX3N0ciAqLwotICAgIDAsCQkJCQkvKiB3YWtlX3Jh dGUgKi8KLSAgICAiIiwJCQkJCS8qIHdha2VfcHJvbXB0ICovCi0gICAgIiIsCQkJCQkvKiBkbW9k ZV9zdHIgKi8KLSAgICBOVUxMLAkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KLSAgICAiJXNcMDE1IiwJ CQkJLyogZGlhbF9zdHIgKi8KLSAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCi0gICAgMCwJCQkJ CS8qIGVzY190aW1lICovCi0gICAgMCwJCQkJCS8qIGVzY19jaGFyICovCi0gICAgIiIsCQkJCQkv KiBodXBfc3RyICovCi0gICAgIiIsCQkJCQkvKiBod2ZjX3N0ciAqLwotICAgICIiLAkJCQkJLyog c3dmY19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIG5vZmNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBl Y19vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGVjX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8q IGRjX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogZGNfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJ LyogYWFfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBhYV9vZmZfc3RyICovCi0gICAgIiIsCQkJ CQkvKiBzYl9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KLSAgICAiIiwJ CQkJCS8qIHNwX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNwX29uX3N0ciAqLwotICAgICIi LAkJCQkJLyogdm9sMV9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHZvbDJfc3RyICovCi0gICAgIiIs CQkJCQkvKiB2b2wzX3N0ciAqLwotICAgICIiLAkJCQkJLyogaWdub3JlZHQgKi8KLSAgICAiIiwJ CQkJCS8qIGluaTIgKi8KLSAgICAwTCwJCQkJCS8qIG1heF9zcGVlZCAqLwotICAgIDAsCQkJCQkv KiBjYXBhcyAqLwotICAgIE5VTEwJCQkJLyogb2tfZm4gKi8KLX07Ci0KLSNpZm5kZWYgTUlOSURJ QUwKLXN0YXRpYwotTURNSU5GIEFUVElTTiA9CQkJCS8qIEFUJlQgSVNOIE5ldHdvcmsgKi8KLSAg ICB7Ci0gICAgIiIsCQkJCQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIiIsCQkJCQkvKiB0b25l IGNvbW1hbmQgKi8KLSAgICAiQVQmVCBJU04gTmV0d29yayIsCi0gICAgMzAsCQkJCQkvKiBEaWFs IHRpbWUgKi8KLSAgICAiIiwJCQkJCS8qIFBhdXNlIGNoYXJhY3RlcnMgKi8KLSAgICAwLAkJCQkJ LyogUGF1c2UgdGltZSAqLwotICAgICJcMDE1XDAxNVwwMTVcMDE1IiwJCQkvKiBXYWtlIHN0cmlu ZyAqLwotICAgIDkwMCwJCQkJLyogV2FrZSByYXRlICovCi0gICAgIkRJQUwiLAkJCQkvKiBXYWtl IHByb21wdCAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkvKiBk bW9kZV9wcm9tcHQgKi8KLSAgICAiJXNcMDE1IiwJCQkJLyogZGlhbF9zdHIgKi8KLSAgICAwLAkJ CQkJLyogZGlhbF9yYXRlICovCi0gICAgMCwJCQkJCS8qIGVzY190aW1lICovCi0gICAgMCwJCQkJ CS8qIGVzY19jaGFyICovCi0gICAgIiIsCQkJCQkvKiBodXBfc3RyICovCi0gICAgIiIsCQkJCQkv KiBod2ZjX3N0ciAqLwotICAgICIiLAkJCQkJLyogc3dmY19zdHIgKi8KLSAgICAiIiwJCQkJCS8q IG5vZmNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBlY19vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8q IGVjX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRjX29uX3N0ciAqLwotICAgICIiLAkJCQkJ LyogZGNfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogYWFfb25fc3RyICovCi0gICAgIiIsCQkJ CQkvKiBhYV9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KLSAgICAiIiwJ CQkJCS8qIHNiX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNwX29mZl9zdHIgKi8KLSAgICAi IiwJCQkJCS8qIHNwX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogdm9sMV9zdHIgKi8KLSAgICAi IiwJCQkJCS8qIHZvbDJfc3RyICovCi0gICAgIiIsCQkJCQkvKiB2b2wzX3N0ciAqLwotICAgICIi LAkJCQkJLyogaWdub3JlZHQgKi8KLSAgICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICAwTCwJCQkJ CS8qIG1heF9zcGVlZCAqLwotICAgIDAsCQkJCQkvKiBjYXBhcyAqLwotICAgIE5VTEwJCQkJLyog b2tfZm4gKi8KLX07Ci0KLXN0YXRpYwotTURNSU5GIEFUVE1PREVNID0JLyogaW5mb3JtYXRpb24g Zm9yIEFUJlQgc3dpdGNoZWQtbmV0d29yayBtb2RlbXMgKi8KLQkJCS8qICJOdW1iZXIiIGZvbGxv d2luZyAiZGlhbCIgY2FuIGluY2x1ZGU6IHAncyBhbmQKLQkJCSAqIHQncyB0byBpbmRpY2F0ZSBw dWxzZSBvciB0b25lIChkZWZhdWx0KSBkaWFsaW5nLAotCQkJICogKyBmb3Igd2FpdCBmb3IgZGlh bCB0b25lLCAsIGZvciBwYXVzZSwgciBmb3IKLQkJCSAqIGxhc3QgbnVtYmVyIGRpYWxlZCwgYW5k LCBleGNlcHQgZm9yIDIyMjRCLCBzb21lCi0JCQkgKiBjb21tYS1kZWxpbWl0ZWQgb3B0aW9ucyBs aWtlIG8xMj15LCBiZWZvcmUgbnVtYmVyLgotCi0gKiAiSW1wb3J0YW50IiBvcHRpb25zIGZvciB0 aGUgbW9kZW1zOgotICoKLSAqCUFsbDoJCUV4Y2VwdCBmb3IgMjIyNEIsIGVuYWJsZSBvcHRpb24g MTIgZm9yICJ0cmFuc3BhcmVudAotICoJCQlkYXRhLCIgbzEyPXkuICBJZiBhIGNvbXB1dGVyIHBv cnQgdXNlZCBmb3IgYm90aAotICoJCQlpbmNvbWluZyBhbmQgb3V0Z29pbmcgY2FsbHMgaXMgY29u bmVjdGVkIHRvIHRoZQotICoJCQltb2RlbSwgZGlzYWJsZSAiZW50ZXIgaW50ZXJhY3RpdmUgbW9k ZSBvbiBjYXJyaWFnZQotICoJCQlyZXR1cm4sIiBFSUNSLiAgVGhlIEtlcm1pdCAiZGlhbCIgY29t bWFuZCBjYW4KLSAqCQkJZnVuY3Rpb24gd2l0aCBFSUEgbGVhZHMgc3RhbmRhcmQsIEVJQVMuCi0g KgotICoJMjIxMkM6CQlJbnRlcm5hbCBoYXJkd2FyZSBzd2l0Y2hlcyBhdCB0aGVpciBkZWZhdWx0 Ci0gKgkJCXBvc2l0aW9ucyAoZm91ciByb2NrZXJzIGRvd24gYXdheSBmcm9tIG51bWJlcnMpCi0g KgkJCXVubGVzcyBFSUNSIGlzIG5vdCB3YW50ZWQgKHJvY2tlciBkb3duIGF0IHRoZSA0KS4KLSAq CQkJRm9yIEVJQVMsIHJvY2tlciBkb3duIGF0IHRoZSAxLgotICoKLSAqCTIyMjRCOgkJRnJvbnQt cGFuZWwgc3dpdGNoIHBvc2l0aW9uIDEgbXVzdCBiZSB1cCAoYXQgdGhlIDEsCi0gKgkJCWNsb3Nl ZCkuICBEaXNhYmxlIEVJQ1Igd2l0aCBwb3NpdGlvbiAyIGRvd24uCi0gKgkJCUZvciBFSUFTLCBw b3NpdGlvbiA0IGRvd24uCi0gKgkJCUFsbCBzd2l0Y2hlcyBvbiB0aGUgYmFjayBwYW5lbCBkb3du LgotICoKLSAqCTIyMjRDRU86CUFsbCBmcm9udC1wYW5lbCBzd2l0Y2hlcyBkb3duIGV4Y2VwdCBl aXRoZXIgNSBvciA2LgotICoJCQlFbmFibGUgaW50ZXJhY3RpdmUgZmxvdyBjb250cm9sIHdpdGgg bzE2PXkuCi0gKgkJCVNlbGVjdCBub3JtYWwgYXN5bmNocm9ub3VzIG1vZGUgd2l0aCBvMzQ9MCAo emVybykuCi0gKgkJCURpc2FibGUgRUlDUiB3aXRoIHBvc2l0aW9uIDMgdXAuICBGb3IgRUlBUywg MSB1cC4KLSAqCQkJUmVzZXQgdGhlIG1vZGVtIGFmdGVyIGNoYW5naW5nIHN3aXRjaGVzLgotICoK LSAqCTIyOTZBOgkJSWYgb3B0aW9uIDAwICh6ZXJvcykgaXMgcHJlc2VudCwgdXNlIG8wMD0wLgot ICoJCQlFbmFibGUgaW50ZXJhY3RpdmUgZmxvdyBjb250cm9sIHdpdGggbzE2PXkuCi0gKgkJCVNl bGVjdCBub3JtYWwgYXN5bmNocm9ub3VzIG1vZGUgd2l0aCBvMzQ9MCAoemVybykuCi0gKiAgICAg ICAgICAgICAgICAgICAgICAoYXZhaWxhYmxlIGluIE1pY3JvY29tIE5ldHdvcmtpbmcgdmVyc2lv biwgYnV0Ci0gKiAgICAgICAgICAgICAgICAgICAgICBub3QgbmVjZXNzYXJpbHkgb3RoZXIgbW9k ZWxzIG9mIHRoZSAyMjk2QSkuCi0gKgkJCUVuYWJsZSBtb2RlbS1wb3J0IGZsb3cgY29udHJvbCAo aWYgYXZhaWxhYmxlKSB3aXRoCi0gKiAJCQlvNDI9eS4gIEVuYWJsZSBhc3luY2hyb25vdXMgb3Bl cmF0aW9uIHdpdGggbzUwPXkuCi0gKiAJCQlEaXNhYmxlIEVJQ1Igd2l0aCBvNjk9bi4gIEZvciBF SUFTLCBvNjY9biwgdXNpbmcKLSAqIAkJCWZyb250IHBhbmVsLgotICovCi0gICAgewotICAgIkFU JlQgc3dpdGNoZWQtbmV0d29yayBtb2RlbXMiLAotICAgICIiLAkJCQkJLyogcHVsc2UgY29tbWFu ZCAqLwotICAgICIiLAkJCQkJLyogdG9uZSBjb21tYW5kICovCi0gICAgMjAsCQkJCQkvKiBkaWFs X3RpbWUgKi8KLSAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCi0gICAgMiwJCQkJCS8qIHBh dXNlX3RpbWUgKi8KLSAgICAiKyIsCQkJCS8qIHdha2Vfc3RyICovCi0gICAgMCwJCQkJCS8qIHdh a2VfcmF0ZSAqLwotICAgICIiLAkJCQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAiIiwJCQkJCS8q IGRtb2RlX3N0ciAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCi0gICAgImF0JXNc MDE1IiwJCQkJLyogZGlhbF9zdHIgKi8KLSAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCi0gICAg MCwJCQkJCS8qIGVzY190aW1lICovCi0gICAgMCwJCQkJCS8qIGVzY19jaGFyICovCi0gICAgIiIs CQkJCQkvKiBodXBfc3RyICovCi0gICAgIiIsCQkJCQkvKiBod2ZjX3N0ciAqLwotICAgICIiLAkJ CQkJLyogc3dmY19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIG5vZmNfc3RyICovCi0gICAgIiIsCQkJ CQkvKiBlY19vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGVjX29mZl9zdHIgKi8KLSAgICAiIiwJ CQkJCS8qIGRjX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogZGNfb2ZmX3N0ciAqLwotICAgICIi LAkJCQkJLyogYWFfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBhYV9vZmZfc3RyICovCi0gICAg IiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KLSAg ICAiIiwJCQkJCS8qIHNwX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNwX29uX3N0ciAqLwot ICAgICIiLAkJCQkJLyogdm9sMV9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHZvbDJfc3RyICovCi0g ICAgIiIsCQkJCQkvKiB2b2wzX3N0ciAqLwotICAgICIiLAkJCQkJLyogaWdub3JlZHQgKi8KLSAg ICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICAwTCwJCQkJCS8qIG1heF9zcGVlZCAqLwotICAgIENL RF9BVCwJCQkJLyogY2FwYXMgKi8KLSAgICBOVUxMCQkJCS8qIG9rX2ZuICovCi19OwotCi1zdGF0 aWMKLU1ETUlORiBBVFREVERNID0gLyogQVQmVCBEaWdpdGFsIFRlcm1pbmFsIERhdGEgTW9kdWxl ICAqLwotCQkgLyogRm9yIGRpYWxpbmc6IEtZQkQgc3dpdGNoIGRvd24sIG90aGVycyB1c3VhbGx5 IHVwLiAqLwotICAgIHsKLSAgICAiQVQmVCBEaWdpdGFsIFRlcm1pbmFsIERhdGEgTW9kdWxlIiwK LSAgICAiIiwJCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiIiwJCQkJCS8qIHRvbmUgY29t bWFuZCAqLwotICAgIDIwLAkJCQkJLyogZGlhbF90aW1lICovCi0gICAgIiIsCQkJCQkvKiBwYXVz ZV9jaGFycyAqLwotICAgIDAsCQkJCQkvKiBwYXVzZV90aW1lICovCi0gICAgIiIsCQkJCQkvKiB3 YWtlX3N0ciAqLwotICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KLSAgICAiIiwJCQkJCS8qIHdh a2VfcHJvbXB0ICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KLSAgICAiIiwJCQkJCS8q IGRtb2RlX3Byb21wdCAqLwotICAgICIlc1wwMTUiLAkJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAs CQkJCQkvKiBkaWFsX3JhdGUgKi8KLSAgICAwLAkJCQkJLyogZXNjX3RpbWUgKi8KLSAgICAwLAkJ CQkJLyogZXNjX2NoYXIgKi8KLSAgICAiIiwJCQkJCS8qIGh1cF9zdHIgKi8KLSAgICAiIiwJCQkJ CS8qIGh3ZmNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzd2ZjX3N0ciAqLwotICAgICIiLAkJCQkJ Lyogbm9mY19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGVjX29uX3N0ciAqLwotICAgICIiLAkJCQkJ LyogZWNfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogZGNfb25fc3RyICovCi0gICAgIiIsCQkJ CQkvKiBkY19vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiIiwJ CQkJCS8qIGFhX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLwotICAgICIi LAkJCQkJLyogc2Jfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAg ICIiLAkJCQkJLyogc3Bfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiB2b2wxX3N0ciAqLwotICAg ICIiLAkJCQkJLyogdm9sMl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHZvbDNfc3RyICovCi0gICAg IiIsCQkJCQkvKiBpZ25vcmVkdCAqLwotICAgICIiLAkJCQkJLyogaW5pMiAqLwotICAgIDBMLAkJ CQkJLyogbWF4X3NwZWVkICovCi0gICAgMCwJCQkJCS8qIGNhcGFzICovCi0gICAgTlVMTAkJCQkv KiBva19mbiAqLwotfTsKLQotc3RhdGljCi1NRE1JTkYgRElHSVRFTCA9ICAgICAgICAvKiBEaWdp dGVsIERULTIyIENDSVRUIHZhcmlhbnQgdXNlZCBpbiBCcmF6aWwgKi8KLS8qCi0gIEF0dGVtcHRz IHRvIGFkaGVyZSBzdHJpY3RseSB0byB0aGUgVi4yNWJpcyBzcGVjaWZpY2F0aW9uIGRvIG5vdCBw cm9kdWNlIGdvb2QKLSAgcmVzdWx0cyBpbiByZWFsIGxpZmUuICBUaGUgbW9kZW0gZm9yIHdoaWNo IHRoaXMgY29kZSB3YXMgZGV2ZWxvcGVkOiAoYSkKLSAgaWdub3JlcyBwYXJpdHk7IChiKSBzb21l dGltZXMgdGVybWluYXRlcyByZXNwb25zZXMgd2l0aCBMRiBDUiBpbnN0ZWFkIG9mIENSCi0gIExG OyAoYykgaGFzIGEgSGF5ZXMtbGlrZSBlc2NhcGUgc2VxdWVuY2U7IChkKSBzdXBwb3J0cyBhIGhh bmd1cCAoIkhVUCIpCi0gIGNvbW1hbmQuICBJbmZvcm1hdGlvbiBmcm9tIEZlcm5hbmRvIENhYnJh bCBpbiBCcmFzaWxpYS4KLSovCi0gICAgewotICAgICJEaWdpdGVsIERULTIyIENDSVRUIGRpYWxl ciIsCi0gICAgIiIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiIiwJCQkJLyogdG9uZSBj b21tYW5kICovCi0gICAgNDAsCQkJCS8qIGRpYWxfdGltZSAtLSBwcm9ncmFtbWFibGUgLS0gKi8K LSAgICAiLDoiLAkJLyogcGF1c2VfY2hhcnMgLS0gIiwiIHdhaXRzIGZvciBwcm9ncmFtbWFibGUg dGltZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgLyogIjoiIHdhaXRzIGZvciBkaWFsIHRv bmUgKi8KLSAgICAxMCwJCQkvKiBwYXVzZV90aW1lIChzZWNvbmRzLCBqdXN0IGEgZ3Vlc3MpICov Ci0gICAgIkhVUFwwMTUiLCAgICAgICAgICAvKiB3YWtlX3N0ciAoTm90IFN0YW5kYXJkIENDSVRU KSAqLwotICAgIDIwMCwJCS8qIHdha2VfcmF0ZSAobXNlYykgKi8KLSAgICAiVkFMIiwJCS8qIHdh a2VfcHJvbXB0ICovCi0gICAgIiIsCQkJLyogZG1vZGVfc3RyIChub25lKSAqLwotICAgICIiLAkJ CS8qIGRtb2RlX3Byb21wdCAobm9uZSkgKi8KLSAgICAiQ1JOJXNcMDE1IiwgICAgICAgIC8qIGRp YWxfc3RyICovCi0gICAgMjAwLAkJLyogZGlhbF9yYXRlIChtc2VjKSAqLwotICAgIDExMDAsCQkv KiBlc2NfdGltZSAoTm90IFN0YW5kYXJkIENDSVRUKSAqLwotICAgIDQzLAkJCS8qIGVzY19jaGFy ICAoTm90IFN0YW5kYXJkIENDSVRUKSAqLwotICAgICJIVVBcMDE1IiwJCS8qIGh1cF9zdHIgIChO b3QgU3RhbmRhcmQgQ0NJVFQpICovCi0gICAgIiIsCQkJCQkvKiBod2ZjX3N0ciAqLwotICAgICIi LAkJCQkJLyogc3dmY19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIG5vZmNfc3RyICovCi0gICAgIiIs CQkJCQkvKiBlY19vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGVjX29mZl9zdHIgKi8KLSAgICAi IiwJCQkJCS8qIGRjX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogZGNfb2ZmX3N0ciAqLwotICAg ICJDSUNcMDE1IiwJCQkJLyogYWFfb25fc3RyICovCi0gICAgIkRJQ1wwMTUiLAkJCQkvKiBhYV9v ZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNi X29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNwX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8q IHNwX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogdm9sMV9zdHIgKi8KLSAgICAiIiwJCQkJCS8q IHZvbDJfc3RyICovCi0gICAgIiIsCQkJCQkvKiB2b2wzX3N0ciAqLwotICAgICIiLAkJCQkJLyog aWdub3JlZHQgKi8KLSAgICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICAwTCwJCQkJCS8qIG1heF9z cGVlZCAqLwotICAgIENLRF9WMjUsCQkJCS8qIGNhcGFzICovCi0gICAgZ2V0b2sJCQkJLyogb2tf Zm4gKi8KLX07Ci0KLXN0YXRpYwotTURNSU5GIEhfMTIwMCA9CQkvKiBIYXllcyAxMjAwIGFuZCBj b21wYXRpYmxlIG1vZGVtcyAqLwotICAgIHsKLSAgICAiSGF5ZXMgU21hcnRtb2RlbSAxMjAwIGFu ZCBjb21wYXRpYmxlcyIsCi0gICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCi0g ICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KLSAgICAzNSwJCQkJCS8qIGRpYWxf dGltZSAqLwotICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KLSAgICAyLAkJCQkJLyogcGF1 c2VfdGltZSAqLwotI2lmZGVmIE9TMgotICAgICJBVEUxUTBWMVwwMTUiLAkJCS8qIHdha2Vfc3Ry ICovCi0jZWxzZQotICAgICJBVFEwXDAxNSIsCQkJCS8qIHdha2Vfc3RyICovCi0jZW5kaWYgLyog T1MyICovCi0gICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLwotICAgICJPS1wwMTUiLAkJCQkvKiB3 YWtlX3Byb21wdCAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkv KiBkbW9kZV9wcm9tcHQgKi8KLSAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLwotICAg IDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KLSAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLwotICAg IDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KLSAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAq LwotICAgICIiLAkJCQkJLyogaHdmY19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHN3ZmNfc3RyICov Ci0gICAgIiIsCQkJCQkvKiBub2ZjX3N0ciAqLwotICAgICIiLAkJCQkJLyogZWNfb25fc3RyICov Ci0gICAgIiIsCQkJCQkvKiBlY19vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkY19vbl9zdHIg Ki8KLSAgICAiIiwJCQkJCS8qIGRjX29mZl9zdHIgKi8KLSAgICAiQVRTMD0xXDAxNSIsCQkJLyog YWFfb25fc3RyICovCi0gICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KLSAgICAi IiwJCQkJCS8qIHNiX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLwotICAg ICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLwotICAgICJBVE0wXDAxNSIsCQkJCS8qIHNw X29mZl9zdHIgKi8KLSAgICAiQVRMMVwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLwotICAgICJBVEwy XDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCi0gICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIg Ki8KLSAgICAiIiwJCQkJCS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0g ICAgMTIwMEwsCQkJCS8qIG1heF9zcGVlZCAqLwotICAgIENLRF9BVCwJCQkJLyogY2FwYXMgKi8K LSAgICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsKLQotc3RhdGljCi1NRE1JTkYgSF9VTFRSQSA9 CQkJLyogSGF5ZXMgaGlnaC1zcGVlZCAqLwotICAgIHsKLSAgICAiSGF5ZXMgVWx0cmEvT3B0aW1h L0FjY3VyYSA5Ni8xNDQvMjg4IiwgLyogVSxPLEEgKi8KLSAgICAiQVRQXDAxNSIsCQkJCS8qIHB1 bHNlIGNvbW1hbmQgKi8KLSAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLwotICAg IDM1LAkJCQkJLyogZGlhbF90aW1lICovCi0gICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLwot ICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCi0jaWZkZWYgT1MyCi0gICAgIkFURTFRMFYxWDRO MVkwJlMwJkMxJkQyUzM3PTBTODI9MTI4XDAxNSIsIC8qIHdha2Vfc3RyICovCi0jZWxzZQotI2lm ZGVmIFZNUwotICAgICJBVFEwWDROMVkwJlMxUzM3PTBTODI9MTI4XDAxNSIsCS8qIHdha2Vfc3Ry ICovCi0jZWxzZQotICAgICJBVFEwWDROMVkwUzM3PTBTODI9MTI4XDAxNSIsCS8qIHdha2Vfc3Ry ICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgMCwJCQkJCS8qIHdh a2VfcmF0ZSAqLwotICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLwotICAgICIiLAkJ CQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KLSAgICAi QVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8K LSAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLwotICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8K LSAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAgICJBVCZLM1wwMTUiLAkJCS8q IGh3ZmNfc3RyICovICAgLyogT0sgZm9yIFUsTyAqLwotICAgICJBVCZLNFwwMTUiLAkJCS8qIHN3 ZmNfc3RyICovICAgLyogT0sgZm9yIFUsTyAqLwotICAgICJBVCZLMFwwMTUiLAkJCS8qIG5vZmNf c3RyICovICAgLyogT0sgZm9yIFUsTyAqLwotICAgICJBVCZRNVMzNj03UzQ4PTdcMDE1IiwJCS8q IGVjX29uX3N0ciAqLyAgLyogT0sgZm9yIFUsTyAqLwotICAgICJBVCZRMFwwMTUiLAkJCS8qIGVj X29mZl9zdHIgKi8gLyogT0sgZm9yIFUsTyAqLwotICAgICJBVFM0Nj0yXDAxNSIsCQkJLyogZGNf b25fc3RyICovCi0gICAgIkFUUzQ2PTBcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCi0gICAgIkFU UzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLwotICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9v ZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNi X29mZl9zdHIgKi8KLSAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KLSAgICAiQVRN MFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIkFUTDFcMDE1IiwJCQkJLyogdm9sMV9z dHIgKi8KLSAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLwotICAgICJBVEwzXDAxNSIs CQkJCS8qIHZvbDNfc3RyICovCi0gICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8KLSAg ICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICAxMTUyMDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8gIC8q ICh2YXJpZXMpICovCi0gICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0Rf U1csIC8qIGNhcGFzICovCi0gICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KLX07Ci0KLXN0YXRpYwot TURNSU5GIEhfQUNDVVJBID0JCQkvKiBIYXllcyBBY2N1cmEgKi8KLSAgICB7CQkJCQkvKiBHVUVT U0lORyBJVCdTIExJS0UgVUxUUkEgJiBPUFRJTUEgKi8KLSAgICAiSGF5ZXMgQWNjdXJhIiwKLSAg ICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiQVRUXDAxNSIsCQkJCS8q IHRvbmUgY29tbWFuZCAqLwotICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCi0gICAgIiwiLAkJ CQkvKiBwYXVzZV9jaGFycyAqLwotICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCi0jaWZkZWYg T1MyCi0gICAgIkFURTFRMFYxWDROMVkwJlMwJkMxJkQyUzM3PTBcMDE1IiwJLyogd2FrZV9zdHIg Ki8KLSNlbHNlCi0jaWZkZWYgVk1TCi0gICAgIkFUUTBYNE4xWTAmUzFTMzc9MFwwMTUiLAkJLyog d2FrZV9zdHIgKi8KLSNlbHNlCi0gICAgIkFUUTBYNE4xWTBTMzc9MFwwMTUiLAkJLyogd2FrZV9z dHIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAwLAkJCQkJLyog d2FrZV9yYXRlICovCi0gICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCi0gICAgIiIs CQkJCQkvKiBkbW9kZV9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLwotICAg ICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCi0gICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAq LwotICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCi0gICAgNDMsCQkJCQkvKiBlc2NfY2hhciAq LwotICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCi0gICAgIkFUJkszXDAxNSIsCQkJ LyogaHdmY19zdHIgKi8KLSAgICAiQVQmSzRcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLwotICAgICJB VCZLMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCi0gICAgIkFUJlE1UzM2PTdTNDg9N1wwMTUiLAkJ LyogZWNfb25fc3RyICovCi0gICAgIkFUJlEwXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLwotICAg ICJBVFM0Nj0yXDAxNSIsCQkJLyogZGNfb25fc3RyICovCi0gICAgIkFUUzQ2PTBcMDE1IiwJCQkv KiBkY19vZmZfc3RyICovCi0gICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLwotICAg ICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vbl9z dHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KLSAgICAiQVRNMVwwMTUiLAkJCQkv KiBzcF9vbl9zdHIgKi8KLSAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAg IkFUTDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KLSAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wy X3N0ciAqLwotICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIkFUWDNcMDE1 IiwJCQkJLyogaWdub3JlZHQgKi8KLSAgICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICAxMTUyMDBM LAkJCQkvKiBtYXhfc3BlZWQgKi8gIC8qICh2YXJpZXMpICovCi0gICAgQ0tEX0FUfENLRF9TQnxD S0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8qIGNhcGFzICovCi0gICAgZ2V0b2sJCQkJLyog b2tfZm4gKi8KLX07Ci0KLXN0YXRpYwotTURNSU5GIFBQSSA9CQkJCS8qIFByYWN0aWNhbCBQZXJp cGhlcmFscyAgKi8KLSAgICB7Ci0gICAgIlByYWN0aWNhbCBQZXJpcGhlcmFscyBWLjIyYmlzIG9y IGhpZ2hlciB3aXRoIFYuNDIgYW5kIFYuNDJiaXMiLAotICAgICJBVFBcMDE1IiwJCQkJLyogcHVs c2UgY29tbWFuZCAqLwotICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCi0gICAg MzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KLSAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCi0g ICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KLSNpZmRlZiBDT01NRU5UCi0vKiBJbiBuZXdlciBt b2RlbHMgUzgyIChCUkVBSyBoYW5kbGluZykgd2FzIGVsaW1pbmF0ZWQsIGNhdXNpbmcgYW4gZXJy b3IuICovCi0jaWZkZWYgT1MyCi0gICAgIkFUUTBYNE4xJlMwJkMxJkQyUzM3PTBTODI9MTI4XDAx NSIsIC8qIHdha2Vfc3RyICovCi0jZWxzZQotICAgICJBVFEwWDROMVMzNz0wUzgyPTEyOFwwMTUi LAkJLyogd2FrZV9zdHIgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbHNlIC8qIFNvIG5vdyB3ZSB1 c2UgWTAgaW5zdGVhZCAqLwotI2lmZGVmIE9TMgotICAgICJBVEUxUTBWMVg0TjEmUzAmQzEmRDJZ MFMzNz0wXDAxNSIsCS8qIHdha2Vfc3RyICovCi0jZWxzZQotI2lmZGVmIFZNUwotICAgICJBVFEw WDROMVkwJlMxUzM3PTBcMDE1IiwJCS8qIHdha2Vfc3RyICovCi0jZWxzZQotICAgICJBVFEwWDRO MVkwUzM3PTBcMDE1IiwJCS8qIHdha2Vfc3RyICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYg LyogT1MyICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUg Ki8KLSAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAiIiwJCQkJCS8qIGRt b2RlX3N0ciAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCi0gICAgIkFURCVzXDAx NSIsCQkJLyogZGlhbF9zdHIgKi8KLSAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCi0gICAgMTEw MCwJCQkJLyogZXNjX3RpbWUgKi8KLSAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCi0gICAgIkFU UTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KLSAgICAiQVQmSzNcMDE1IiwJCQkvKiBod2ZjX3N0 ciAqLwotICAgICJBVCZLNFwwMTUiLAkJCS8qIHN3ZmNfc3RyICovCi0gICAgIkFUJkswXDAxNSIs CQkJLyogbm9mY19zdHIgKi8KLSAgICAiQVQmUTVTMzY9N1M0OD03XDAxNSIsCQkvKiBlY19vbl9z dHIgKi8KLSAgICAiQVQmUTBTMzY9MFM0OD0xMjhcMDE1IiwJCS8qIGVjX29mZl9zdHIgKi8KLSAg ICAiQVRTNDY9MlwwMTUiLAkJCS8qIGRjX29uX3N0ciAqLwotICAgICJBVFM0Nj0wXDAxNSIsCQkJ LyogZGNfb2ZmX3N0ciAqLwotICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KLSAg ICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb25f c3RyICAqLwotICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAgKi8KLSAgICAiQVRNMVwwMTUiLAkJ CQkvKiBzcF9vbl9zdHIgKi8KLSAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCi0g ICAgIkFUTDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KLSAgICAiQVRMMlwwMTUiLAkJCQkvKiB2 b2wyX3N0ciAqLwotICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIkFUWDNc MDE1IiwJCQkJLyogaWdub3JlZHQgKi8KLSAgICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICAxMTUy MDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8 Q0tEX0hXfENLRF9TVywgLyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsK LQotc3RhdGljCi1NRE1JTkYgREFUQVBPUlQgPQkJCS8qIEFUJlQgRGF0YXBvcnQgICovCi0gICAg ewotICAgICJBVCZUIC8gUGFyYWR5bmUgRGF0YVBvcnQgVi4zMiBvciBoaWdoZXIiLAotICAgICJB VFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLwotICAgICJBVFRcMDE1IiwJCQkJLyogdG9u ZSBjb21tYW5kICovCi0gICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KLSAgICAiLCIsCQkJCS8q IHBhdXNlX2NoYXJzICovCi0gICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KLSAgICAvKgotICAg ICAgIE5vdGU6IFM0MT0wICh1c2UgaGlnaGVzdCBtb2R1bGF0aW9uKSBvbWl0dGVkLCBzaW5jZSBp dCBpcyBub3QKLSAgICAgICBzdXBwb3J0ZWQgb24gdGhlIFYuMzIgYW5kIGxvd2VyIG1vZGVscy4g IFNvIGxldCdzIG5vdCB0b3VjaCBpdC4KLSAgICAqLwotI2lmZGVmIE9TMgotICAgICJBVFEwRTFW MVg2JlMwJkMxJkQyJlEwWTBcXEs1Uzc4PTBcMDE1IiwgLyogd2FrZV9zdHIgKi8KLSNlbHNlCi0j aWZkZWYgVk1TCi0gICAgIkFUUTBFMVg2JlMxJlEwWTBcXEs1Uzc4PTBcMDE1IiwJLyogd2FrZV9z dHIgKi8KLSNlbHNlCi0gICAgIkFUUTBFMVg2JlEwWTBcXEs1Uzc4PTBcMDE1IiwJCS8qIHdha2Vf c3RyICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgMCwJCQkJCS8q IHdha2VfcmF0ZSAqLwotICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLwotICAgICIi LAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KLSAg ICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUg Ki8KLSAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLwotICAgIDQzLAkJCQkJLyogZXNjX2NoYXIg Ki8KLSAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAgICJBVFxcUTNcMDE1IiwJ CQkvKiBod2ZjX3N0ciAqLwotICAgICJBVFxcUTFcXFgwXDAxNSIsCQkJLyogc3dmY19zdHIgKi8K LSAgICAiQVRcXFEwXDAxNSIsCQkJLyogbm9mY19zdHIgKi8KLSAgICAiQVRcXE43XDAxNSIsCQkJ LyogZWNfb25fc3RyICovCi0gICAgIkFUXFxOMFwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KLSAg ICAiQVQlQzFcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KLSAgICAiQVQlQzBcMDE1IiwJCQkvKiBk Y19vZmZfc3RyICovCi0gICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLwotICAgICJB VFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIg Ki8KLSAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KLSAgICAiQVRNMVwwMTUiLAkJCQkvKiBz cF9vbl9zdHIgKi8KLSAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIkFU TDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KLSAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0 ciAqLwotICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIkFUWDNcMDE1IiwJ CQkJLyogaWdub3JlZHQgKi8KLSAgICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICA1NzYwMEwsCQkJ CS8qIG1heF9zcGVlZCAqLwotICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8 Q0tEX1NXLCAvKiBjYXBhcyAqLwotICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCi19OwotCi1zdGF0 aWMKLU1ETUlORiBVQ09NX0FUID0JCQkvKiBNaWNyb2NvbSBEZXNrUG9ydGUgRkFTVCBFUyAyOC44 ICovCi0gICAgewotICAgICJNaWNyb2NvbSBEZXNrUG9ydGUgRkFTVCAyOC44IiwKLSAgICAiQVRQ XDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUg Y29tbWFuZCAqLwotICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCi0gICAgIiwiLAkJCQkvKiBw YXVzZV9jaGFycyAqLwotICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCi0jaWZkZWYgT1MyCi0g ICAgIkFURTFRMFYxWDRcXE4wRjAmUzAmQzEmRDJcXEs1XDAxNSIsIC8qIHdha2Vfc3RyICovCi0j ZWxzZQotI2lmZGVmIFZNUwotICAgICJBVFEwWDRGMCZTMVxcSzVcMDE1IiwJCS8qIHdha2Vfc3Ry ICovCi0jZWxzZQotICAgICJBVFEwWDRGMFxcSzVcMDE1IiwJCQkvKiB3YWtlX3N0ciAqLwotI2Vu ZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUg Ki8KLSAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAiIiwJCQkJCS8qIGRt b2RlX3N0ciAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCi0gICAgIkFURCVzXDAx NSIsCQkJLyogZGlhbF9zdHIgKi8KLSAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCi0gICAgMTEw MCwJCQkJLyogZXNjX3RpbWUgKi8KLSAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCi0gICAgIkFU UTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KLSAgICAiQVRcXFEzXDAxNSIsCQkJLyogaHdmY19z dHIgKi8KLSAgICAiQVRcXFExXDAxNSIsCQkJLyogc3dmY19zdHIgKi8KLSAgICAiQVRcXEgwXFxR MFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCi0gICAgIkFUXFxOM1wwMTUiLAkJCS8qIGVjX29uX3N0 ciAqLwotICAgICJBVFxcTjBcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCi0gICAgIkFUJUMzXDAx NSIsCQkJLyogZGNfb25fc3RyICovCi0gICAgIkFUJUMwXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAq LwotICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiQVRTMD0wXDAxNSIs CQkJLyogYWFfb2ZmX3N0ciAqLwotICAgICJBVC1KMFwwMTUiLAkJCS8qIHNiX29uX3N0ciAqLwot ICAgICJBVC1KMVwwMTUiLAkJCS8qIHNiX29mZl9zdHIgKi8KLSAgICAiQVRNMVwwMTUiLAkJCQkv KiBzcF9vbl9zdHIgKi8KLSAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAg IkFUTDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KLSAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wy X3N0ciAqLwotICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIkFUWDNcMDE1 IiwJCQkJLyogaWdub3JlZHQgKi8KLSAgICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICAxMTUyMDBM LAkJCQkvKiBtYXhfc3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tE X0hXfENLRF9TVywgLyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsKLQot c3RhdGljCi1NRE1JTkYgWk9PTSA9CQkJCS8qIFpvb20gVGVsZXBob25pY3MgVi4zMmJpcyAgKi8K LSAgICB7Ci0gICAgIlpvb20gVGVsZXBob25pY3MgVi4zMmJpcyIsCi0gICAgIkFUUFwwMTUiLAkJ CQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQg Ki8KLSAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAgICIsIiwJCQkJLyogcGF1c2VfY2hh cnMgKi8KLSAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLwotI2lmZGVmIE9TMgotICAgICJBVEUx UTBWMU4xVzFYNCZTMCZDMSZEMlM4Mj0xMjhTOTU9NDdcMDE1IiwgLyogd2FrZV9zdHIgKi8KLSNl bHNlCi0jaWZkZWYgVk1TCi0gICAgIkFUUTBFMU4xVzFYNCZTMVM4Mj0xMjhTOTU9NDdcMDE1IiwJ Lyogd2FrZV9zdHIgKi8KLSNlbHNlCi0gICAgIkFUUTBFMU4xVzFYNFM4Mj0xMjhTOTU9NDdcMDE1 IiwJLyogd2FrZV9zdHIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAg ICAwLAkJCQkJLyogd2FrZV9yYXRlICovCi0gICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0 ICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3By b21wdCAqLwotICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCi0gICAgMCwJCQkJCS8q IGRpYWxfcmF0ZSAqLwotICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCi0gICAgNDMsCQkJCQkv KiBlc2NfY2hhciAqLwotICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCi0gICAgIkFU JkszXDAxNSIsCQkJLyogaHdmY19zdHIgKi8KLSAgICAiQVQmSzRcMDE1IiwJCQkvKiBzd2ZjX3N0 ciAqLwotICAgICJBVCZLMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCi0gICAgIkFUJlE1UzM2PTdT NDg9N1wwMTUiLAkJLyogZWNfb25fc3RyICovCi0gICAgIkFUJlEwXDAxNSIsCQkJLyogZWNfb2Zm X3N0ciAqLwotICAgICJBVFM0Nj0xMzhcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KLSAgICAiQVRT NDY9MTM2XDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLwotICAgICJBVFMwPTFcMDE1IiwJCQkvKiBh YV9vbl9zdHIgKi8KLSAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLwotICAgICIi LAkJCQkJLyogc2Jfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCi0gICAg IkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3RyICovCi0gICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bf b2ZmX3N0ciAqLwotICAgICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIkFUTDJc MDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KLSAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAq LwotICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmky ICovCi0gICAgNTc2MDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NCfENL RF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBv a19mbiAqLwotfTsKLQotc3RhdGljCi1NRE1JTkYgWllYRUwgPQkJCQkvKiBaeVhFTCBVLVNlcmll cyAqLwotICAgIHsKLSAgICAiWnlYRUwgVS1TZXJpZXMgVi4zMmJpcyBvciBoaWdoZXIiLAotICAg ICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLwotICAgICJBVFRcMDE1IiwJCQkJLyog dG9uZSBjb21tYW5kICovCi0gICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KLSAgICAiLCIsCQkJ CS8qIHBhdXNlX2NoYXJzICovCi0gICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KLSNpZmRlZiBP UzIKLSAgICAiQVRFMVEwVjEmUzAmQzEmRDImTjBYNSZZMVwwMTUiLAkvKiB3YWtlX3N0ciAqLwot I2Vsc2UKLSNpZmRlZiBWTVMKLSAgICAiQVRRMEUxJlMxJk4wWDUmWTFcMDE1IiwJCS8qIHdha2Vf c3RyICovCi0jZWxzZQotICAgICJBVFEwRTEmTjBYNSZZMVwwMTUiLAkJLyogd2FrZV9zdHIgKi8K LSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAwLAkJCQkJLyogd2FrZV9y YXRlICovCi0gICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCi0gICAgIiIsCQkJCQkv KiBkbW9kZV9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLwotICAgICJBVEQl c1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCi0gICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLwotICAg IDExMDAsCQkJCS8qIGVzY190aW1lICovCi0gICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLwotICAg ICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCi0gICAgIkFUJkgzXDAxNSIsCQkJLyogaHdm Y19zdHIgKi8KLSAgICAiQVQmSDRcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLwotICAgICJBVCZIMFww MTUiLAkJCS8qIG5vZmNfc3RyICovCi0gICAgIkFUJkszXDAxNSIsCQkJLyogZWNfb25fc3RyICov Ci0gICAgIkFUJkswXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLwotICAgICJBVCZLNFwwMTUiLAkJ CS8qIGRjX29uX3N0ciAqLwotICAgICJBVCZLM1wwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KLSAg ICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCi0gICAgIkFUUzA9MFwwMTUiLAkJCS8q IGFhX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLwotICAgICIiLAkJCQkJ Lyogc2Jfb2ZmX3N0ciAqLwotICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLwotICAg ICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KLSAgICAiQVRMMVwwMTUiLAkJCQkvKiB2 b2wxX3N0ciAqLwotICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCi0gICAgIkFUTDNc MDE1IiwJCQkJLyogdm9sM19zdHIgKi8KLSAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVkdCAq LwotICAgICIiLAkJCQkJLyogaW5pMiAqLwotICAgIDU3NjAwTCwJCQkJLyogbWF4X3NwZWVkICov Ci0gICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8qIGNhcGFz ICovCi0gICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KLX07Ci0KLXN0YXRpYwotTURNSU5GIFpPTFRS SVggPQkJCS8qIFpvbHRyaXggKi8KLSAgICB7Ci0gICAgIlpvbHRyaXggVi4zMmJpcyBhbmQgVi4z NCBtb2RlbXMgd2l0aCBSb2Nrd2VsbCBBQ0kgY2hpcHNldCIsCi0gICAgIkFUUFwwMTUiLAkJCQkv KiBwdWxzZSBjb21tYW5kICovCi0gICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8K LSAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMg Ki8KLSAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLwotI2lmZGVmIE9TMgotICAgIkFURTFRMFYx RjBXMVg0WTAmUzAmQzEmRDJcXEs1UzgyPTEyOFM5NT00MVwwMTUiLCAvKiB3YWtlX3N0ciAqLwot I2Vsc2UKLSNpZmRlZiBWTVMKLSAgICJBVFEwRTFGMFcxWDRZMCZTMVxcSzVTODI9MTI4Uzk1PTQx XDAxNSIsIC8qIHdha2Vfc3RyICovCi0jZWxzZQotICAgIkFUUTBFMUYwVzFYNFkwXFxLNVM4Mj0x MjhTOTU9NDFcMDE1IiwgLyogd2FrZV9zdHIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAv KiBPUzIgKi8KLSAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCi0gICAgIk9LXDAxNSIsCQkJCS8q IHdha2VfcHJvbXB0ICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KLSAgICAiIiwJCQkJ CS8qIGRtb2RlX3Byb21wdCAqLwotICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCi0g ICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLwotICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCi0g ICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLwotICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3Ry ICovCi0gICAgIkFUJkszXDAxNSIsCQkJLyogaHdmY19zdHIgKi8KLSAgICAiQVQmSzRTMzI9MTdT MzM9MTlcMDE1IiwJCS8qIHN3ZmNfc3RyICovCi0gICAgIkFUJkswXDAxNSIsCQkJLyogbm9mY19z dHIgKi8KLSAgICAiQVRcXE4zXDAxNSIsCQkJLyogZWNfb25fc3RyICovCi0gICAgIkFUXFxOMVww MTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KLSAgICAiQVRTNDY9MTM4JUMzXDAxNSIsCQkJLyogZGNf b25fc3RyICovCi0gICAgIkFUUzQ2PTEzNiVDMFwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KLSAg ICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCi0gICAgIkFUUzA9MFwwMTUiLAkJCS8q IGFhX29mZl9zdHIgKi8KLSAgICAiQVRcXE4wXDAxNSIsCQkJLyogc2Jfb25fc3RyICovCi0gICAg IkFUJlEwXDAxNSIsCQkJLyogc2Jfb2ZmX3N0ciAqLwotICAgICJBVE0xXDAxNSIsCQkJCS8qIHNw X29uX3N0ciAqLwotICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KLSAgICAiQVRM MVwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLwotICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3Ry ICovCi0gICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KLSAgICAiQVRYM1wwMTUiLAkJ CQkvKiBpZ25vcmVkdCAqLwotICAgICIiLAkJCQkJLyogaW5pMiAqLwotICAgIDU3NjAwTCwJCQkJ LyogbWF4X3NwZWVkICovCi0gICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xD S0RfU1csIC8qIGNhcGFzICovCi0gICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KLX07Ci0KLXN0YXRp YwotTURNSU5GIE1PVE9ST0xBID0gewkJCS8qIE1vdG9yb2xhIEZhc1RhbGsgSUkgb3IgTGlmZXN0 eWxlICovCi0vKgotICAiXEUiIGFuZCAiXFgiIGNvbW1hbmRzIHJlbW92ZWQgLSBNb3Rvcm9sYSBM aWZlc3R5bGUgZG9lc24ndCBoYXZlIHRoZW0uCi0gICAgIFxFMCA9IERvbid0IGVjaG8gd2hpbGUg b25saW5lCi0gICAgIFxYMCA9IFByb2Nlc3MgWG9uL1hvZmYgYnV0IGRvbid0IHBhc3MgdGhyb3Vn aAotKi8KLSAgICAiTW90b3JvbGEgRmFzVGFsayBJSSBvciBMaWZlc3R5bGUiLAkvKiBOYW1lICov Ci0gICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIkFUVFwwMTUiLAkJ CQkvKiB0b25lIGNvbW1hbmQgKi8KLSAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAgICIs IiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KLSAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLwotI2lm ZGVmIE9TMgotICAgICJBVEUxUTBWMVg0JlMwJkMxJkQyXFxLNVxcVjFcMDE1IiwJLyogd2FrZV9z dHIgKi8KLSNlbHNlCi0jaWZkZWYgVk1TCi0gICAgIkFUUTBFMVg0JlMxXFxLNVxcVjFcMDE1IiwJ CS8qIHdha2Vfc3RyICovCi0jZWxzZQotICAgICJBVFEwRTFYNFxcSzVcXFYxXDAxNSIsCQkvKiB3 YWtlX3N0ciAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgIDAsCQkJ CQkvKiB3YWtlX3JhdGUgKi8KLSAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KLSAg ICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICov Ci0gICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KLSAgICAwLAkJCQkJLyogZGlhbF9y YXRlICovCi0gICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KLSAgICA0MywJCQkJCS8qIGVzY19j aGFyICovCi0gICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KLSAgICAiQVRcXFEzXDAx NSIsCQkJLyogaHdmY19zdHIgKi8KLSAgICAiQVRcXFExXDAxNSIsCQkJLyogc3dmY19zdHIgKi8K LSAgICAiQVRcXFEwXDAxNSIsCQkJLyogbm9mY19zdHIgKi8KLSAgICAiQVRcXE42XDAxNSIsCQkJ LyogZWNfb25fc3RyICovCi0gICAgIkFUXFxOMVwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KLSAg ICAiQVQlQzFcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KLSAgICAiQVQlQzBcMDE1IiwJCQkvKiBk Y19vZmZfc3RyICovCi0gICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLwotICAgICJB VFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCi0gICAgIkFUXFxKMFwwMTUiLAkJCS8qIHNi X29uX3N0ciAqLwotICAgICJBVFxcSjFcMDE1IiwJCQkvKiBzYl9vZmZfc3RyICovCi0gICAgIkFU TTFcMDE1IiwJCQkJLyogc3Bfb25fc3RyICovCi0gICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2Zm X3N0ciAqLwotICAgICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIkFUTDJcMDE1 IiwJCQkJLyogdm9sMl9zdHIgKi8KLSAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLwot ICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICov Ci0gICAgNTc2MDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NCfENLRF9F Q3xDS0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBva19m biAqLwotfTsKLQotc3RhdGljCi1NRE1JTkYgQk9DQSA9CQkJCS8qIEJvY2EgKi8KLSAgICB7Ci0g ICAgIkJPQ0EgMTQuNCBGYXhtb2RlbSIsCi0gICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21t YW5kICovCi0gICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KLSAgICAzNSwJCQkJ CS8qIGRpYWxfdGltZSAqLwotICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KLSAgICAyLAkJ CQkJLyogcGF1c2VfdGltZSAqLwotI2lmZGVmIE9TMgotICAgICJBVEUxUTBWMUYxTjFXMSZTMCZD MSZEMlxcSzVTMzc9MTFTODI9MTI4Uzk1PTQ3WDRcMDE1IiwgLyogd2FrZV9zdHIgKi8KLSNlbHNl Ci0jaWZkZWYgVk1TCi0gICAgIkFUUTBFMUYxTjFXMSZTMVxcSzVTMzc9MTFTODI9MTI4Uzk1PTQ3 WDRcMDE1IiwgLyogd2FrZV9zdHIgKi8KLSNlbHNlCi0gICAgIkFUUTBFMUYxTjFXMVxcSzVTMzc9 MTFTODI9MTI4Uzk1PTQ3WDRcMDE1IiwgLyogd2FrZV9zdHIgKi8KLSNlbmRpZiAvKiBWTVMgKi8K LSNlbmRpZiAvKiBPUzIgKi8KLSAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCi0gICAgIk9LXDAx NSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KLSAg ICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLwotICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxf c3RyICovCi0gICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLwotICAgIDExMDAsCQkJCS8qIGVzY190 aW1lICovCi0gICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLwotICAgICJBVFEwSDBcMDE1IiwJCQkv KiBodXBfc3RyICovCi0gICAgIkFUJkszXDAxNSIsCQkJLyogaHdmY19zdHIgKi8KLSAgICAiQVQm SzRcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLwotICAgICJBVCZLMFwwMTUiLAkJCS8qIG5vZmNfc3Ry ICovCi0gICAgIkFUXFxOM1MzNj03UzQ4PTdcMDE1IiwJCS8qIGVjX29uX3N0ciAqLwotICAgICJB VFxcTjFcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCi0gICAgIkFUUzQ2PTEzOFwwMTUiLAkJCS8q IGRjX29uX3N0ciAqLwotICAgICJBVFM0Nj0xMzZcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCi0g ICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLwotICAgICJBVFMwPTBcMDE1IiwJCQkv KiBhYV9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KLSAgICAiIiwJCQkJ CS8qIHNiX29mZl9zdHIgKi8KLSAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KLSAg ICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIkFUTDFcMDE1IiwJCQkJLyog dm9sMV9zdHIgKi8KLSAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLwotICAgICJBVEwz XDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQg Ki8KLSAgICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICA1NzYwMEwsCQkJCS8qIG1heF9zcGVlZCAq LwotICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBjYXBh cyAqLwotICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCi19OwotCi1zdGF0aWMKLU1ETUlORiBJTlRF TCA9CQkJCS8qIEludGVsICovCi0gICAgewotICAgICJJbnRlbCBIaWdoLVNwZWVkIEZheG1vZGVt IiwKLSAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiQVRUXDAxNSIs CQkJCS8qIHRvbmUgY29tbWFuZCAqLwotICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCi0gICAg IiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLwotICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCi0j aWZkZWYgT1MyCi0gICAgIkFURTFRMFYxWTBYNCZTMCZDMSZEMlxcSzFcXFYyUzI1PTUwXDAxNSIs IC8qIHdha2Vfc3RyICovCi0jZWxzZQotI2lmZGVmIFZNUwotICAgICJBVFEwRTFZMFg0JlMxXFxL MVxcVjJTMjU9NTBcMDE1IiwJLyogd2FrZV9zdHIgKi8KLSNlbHNlCi0gICAgIkFUUTBFMVkwWDRc XEsxXFxWMlMyNT01MFwwMTUiLAkvKiB3YWtlX3N0ciAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2Vu ZGlmIC8qIE9TMiAqLwotICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KLSAgICAiT0tcMDE1IiwJ CQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAiQVRCMStGQ0xBU1M9MFwwMTUiLAkJLyogZG1vZGVf c3RyICovCi0gICAgIk9LXDAxNSIsCQkJCS8qIGRtb2RlX3Byb21wdCAqLwotICAgICJBVEQlc1ww MTUiLAkJCS8qIGRpYWxfc3RyICovCi0gICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLwotICAgIDEx MDAsCQkJCS8qIGVzY190aW1lICovCi0gICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLwotICAgICJB VFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCi0gICAgIkFUXFxHMVxcUTNcMDE1IiwJCQkvKiBo d2ZjX3N0ciAqLwotICAgICJBVFxcRzFcXFExXFxYMFwwMTUiLAkJLyogc3dmY19zdHIgKi8KLSAg ICAiQVRcXEcwXDAxNSIsCQkJLyogbm9mY19zdHIgKi8KLSAgICAiQVRcXEowXFxOM1wiSDNcMDE1 IiwJCS8qIGVjX29uX3N0ciAqLwotICAgICJBVFxcTjFcMDE1IiwJCQkvKiBlY19vZmZfc3RyICov Ci0gICAgIkFUJUMxXDAxNSIsCQkJLyogZGNfb25fc3RyICovCi0gICAgIkFUJUMwXDAxNSIsCQkJ LyogZGNfb2ZmX3N0ciAqLwotICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KLSAg ICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb25f c3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCi0gICAgIkFUTTFcMDE1IiwJCQkJ Lyogc3Bfb25fc3RyICovCi0gICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAg ICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIkFUTDJcMDE1IiwJCQkJLyogdm9s Ml9zdHIgKi8KLSAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLwotICAgICJBVFgzXDAx NSIsCQkJCS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgNTc2MDBM LAkJCQkvKiBtYXhfc3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tE X0hXfENLRF9TVywgLyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsKLQot c3RhdGljCi1NRE1JTkYgTVVMVElURUNIID0JCQkvKiBNdWx0aXRlY2ggKi8KLSAgICB7Ci0gICAg Ik11bHRpdGVjaCBNVDE0MzIgb3IgTVQyODM0IFNlcmllcyIsCi0gICAgIkFUUFwwMTUiLAkJCQkv KiBwdWxzZSBjb21tYW5kICovCi0gICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8K LSAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMg Ki8KLSAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLwotLyogI1AwICg9IG5vIHBhcml0eSkgaXMg bm90IGxpc3RlZCBpbiB0aGUgbWFudWFsIGZvciBuZXdlciBtb2RlbHMgKi8KLS8qIHNvIGl0IGhh cyBiZWVuIHJlbW92ZWQgZnJvbSBhbGwgdGhyZWUgY29waWVzIG9mIHRoZSBNdWx0aXRlY2ggd2Fr ZV9zdHIgKi8KLSNpZmRlZiBPUzIKLSAgICAiQVRFMVEwVjFYNCZTMCZDMSZEMiZFOCZRMFwwMTUi LAkvKiB3YWtlX3N0ciAqLwotI2Vsc2UKLSNpZmRlZiBWTVMKLSAgICAiQVRRMEUxWDQmUzEmRTgm UTBcMDE1IiwJCS8qIHdha2Vfc3RyICovCi0jZWxzZQotICAgICJBVFEwRTFYNCZFOCZRMFwwMTUi LAkJLyogd2FrZV9zdHIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAg ICAwLAkJCQkJLyogd2FrZV9yYXRlICovCi0gICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0 ICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3By b21wdCAqLwotICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCi0gICAgMCwJCQkJCS8q IGRpYWxfcmF0ZSAqLwotICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCi0gICAgNDMsCQkJCQkv KiBlc2NfY2hhciAqLwotICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCi0gICAgIkFU JkU0JkU3JkU4JkUxMSZFMTNcMDE1IiwJCS8qIGh3ZmNfc3RyICovCi0gICAgIkFUJkU1JkU2JkU4 JkUxMSZFMTNcMDE1IiwJCS8qIHN3ZmNfc3RyICovCi0gICAgIkFUJkUzJkU3JkU4JkUxMCZFMTJc MDE1IiwJCS8qIG5vZmNfc3RyICovCi0gICAgIkFUJkUxXDAxNSIsCQkJLyogZWNfb25fc3RyICov Ci0gICAgIkFUJkUwXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLwotICAgICJBVCZFMTVcMDE1IiwJ CQkvKiBkY19vbl9zdHIgKi8KLSAgICAiQVQmRTE0XDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLwot ICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiQVRTMD0wXDAxNSIsCQkJ LyogYWFfb2ZmX3N0ciAqLwotICAgICJBVCRCQTBcMDE1IiwJCQkvKiBzYl9vbl9zdHIgKD0gImJh dWQgYWRqdXN0IG9mZiIpICovCi0gICAgIkFUJEJBMVwwMTUiLAkJCS8qIHNiX29mZl9zdHIgKi8K LSAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KLSAgICAiQVRNMFwwMTUiLAkJCQkv KiBzcF9vZmZfc3RyICovCi0gICAgIkFUTDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KLSAgICAi QVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLwotICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNf c3RyICovCi0gICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8KLSAgICAiIiwJCQkJCS8q IGluaTIgKi8KLSAgICA1NzYwMEwsCQkJCS8qIG1heF9zcGVlZCAqLwotICAgIENLRF9BVHxDS0Rf U0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBjYXBhcyAqLwotICAgIGdldG9rCQkJ CS8qIG9rX2ZuICovCi19OwotCi1zdGF0aWMKLU1ETUlORiBTVVBSQSA9CQkJCS8qIFN1cHJhICov Ci0gICAgewotICAgICJTdXByYUZBWE1vZGVtIDE0NCBvciAyODgiLAotICAgICJBVFBcMDE1IiwJ CQkJLyogcHVsc2UgY29tbWFuZCAqLwotICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5k ICovCi0gICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KLSAgICAiLCIsCQkJCS8qIHBhdXNlX2No YXJzICovCi0gICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KLSNpZmRlZiBPUzIKLSAgICAiQVRR MEUxVjFOMVcwWDRZMCZTMCZDMSZEMlxcSzVTODI9MTI4XDAxNSIsIC8qIHdha2Vfc3RyICovCi0j ZWxzZQotI2lmZGVmIFZNUwotICAgICJBVFEwRTFOMVcwWDRZMCZTMVxcSzVTODI9MTI4XDAxNSIs CS8qIHdha2Vfc3RyICovCi0jZWxzZQotICAgICJBVFEwRTFOMVcwWDRZMFxcSzVTODI9MTI4XDAx NSIsCS8qIHdha2Vfc3RyICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0g ICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLwotICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21w dCAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9w cm9tcHQgKi8KLSAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJCQkv KiBkaWFsX3JhdGUgKi8KLSAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLwotICAgIDQzLAkJCQkJ LyogZXNjX2NoYXIgKi8KLSAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAgICJB VCZLM1wwMTUiLAkJCS8qIGh3ZmNfc3RyICovCi0gICAgIkFUJks0XDAxNSIsCQkJLyogc3dmY19z dHIgKi8KLSAgICAiQVQmSzBcMDE1IiwJCQkvKiBub2ZjX3N0ciAqLwotICAgICJBVCZRNVxcTjNT NDg9N1wwMTUiLAkJLyogZWNfb25fc3RyICovCi0gICAgIkFUJlEwXFxOMVwwMTUiLAkJCS8qIGVj X29mZl9zdHIgKi8KLSAgICAiQVQlQzFTNDY9MTM4XDAxNSIsCQkJLyogZGNfb25fc3RyICovCi0g ICAgIkFUJUMwUzQ2PTEzNlwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KLSAgICAiQVRTMD0xXDAx NSIsCQkJLyogYWFfb25fc3RyICovCi0gICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIg Ki8KLSAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0 ciAqLwotICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLwotICAgICJBVE1cMDE1IiwJ CQkJLyogc3Bfb2ZmX3N0ciAqLwotICAgICJBVExcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KLSAg ICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLwotICAgICJBVEwzXDAxNSIsCQkJCS8qIHZv bDNfc3RyICovCi0gICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8KLSAgICAiIiwJCQkJ CS8qIGluaTIgKi8KLSAgICA1NzYwMEwsCQkJCS8qIG1heF9zcGVlZCAqLwotICAgIENLRF9BVHxD S0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBjYXBhcyAqLwotICAgIGdldG9r CQkJCS8qIG9rX2ZuICovCi19OwotCi1zdGF0aWMKLU1ETUlORiBTVVBSQVggPQkJCQkvKiBTdXBy YSBFeHByZXNzICovCi0gICAgewotICAgICJEaWFtb25kIFN1cHJhIEV4cHJlc3MgVi45MCIsCi0g ICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIkFUVFwwMTUiLAkJCQkv KiB0b25lIGNvbW1hbmQgKi8KLSAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAgICIsIiwJ CQkJLyogcGF1c2VfY2hhcnMgKi8KLSAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLwotI2lmZGVm IE9TMgotICAgICJBVFEwRTFWMVcwWDQmQzEmRDImUzBcXEs1XDAxNSIsCS8qIHdha2Vfc3RyICov Ci0jZWxzZQotI2lmZGVmIFZNUwotICAgICJBVFEwRTFXMFg0JlMxXFxLNVwwMTUiLAkJLyogd2Fr ZV9zdHIgKi8KLSNlbHNlCi0gICAgIkFUUTBFMVcwWDRcXEs1XDAxNSIsCQkvKiB3YWtlX3N0ciAq LwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgIDAsCQkJCQkvKiB3YWtl X3JhdGUgKi8KLSAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAiIiwJCQkJ CS8qIGRtb2RlX3N0ciAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCi0gICAgIkFU RCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KLSAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCi0g ICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KLSAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCi0g ICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KLSAgICAiQVQmSzNcMDE1IiwJCQkvKiBo d2ZjX3N0ciAqLwotICAgICJBVCZLNFwwMTUiLAkJCS8qIHN3ZmNfc3RyICovCi0gICAgIkFUJksw XDAxNSIsCQkJLyogbm9mY19zdHIgKi8KLSAgICAiQVRcXE4zXDAxNSIsCQkJLyogZWNfb25fc3Ry ICovCi0gICAgIkFUXFxOMVwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KLSAgICAiQVQlQzJcMDE1 IiwJCQkvKiBkY19vbl9zdHIgKi8KLSAgICAiQVQlQzBcMDE1IiwJCQkvKiBkY19vZmZfc3RyICov Ci0gICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLwotICAgICJBVFMwPTBcMDE1IiwJ CQkvKiBhYV9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KLSAgICAiIiwJ CQkJCS8qIHNiX29mZl9zdHIgKi8KLSAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8K LSAgICAiQVRNXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KLSAgICAiQVRMXDAxNSIsCQkJCS8q IHZvbDFfc3RyICovCi0gICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KLSAgICAiQVRM M1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLwotICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0 ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgMjMwNDAwTCwJCQkJLyogbWF4X3NwZWVk ICovCi0gICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8qIGNh cGFzICovCi0gICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KLX07Ci0KLXN0YXRpYwotTURNSU5GIE1B WFRFQ0ggPQkJCS8qIE1heFRlY2ggKi8KLSAgICB7Ci0gICAgIk1heFRlY2ggWE0yODhFQSBvciBH VkMgRkFYTW9kZW0iLAotICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLwotICAg ICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCi0gICAgMzUsCQkJCQkvKiBkaWFsX3Rp bWUgKi8KLSAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCi0gICAgMiwJCQkJCS8qIHBhdXNl X3RpbWUgKi8KLSNpZmRlZiBPUzIKLSAgICAiQVRRMEUxVjFYNFkwJlMwJkMxJkQyJkwwJk0wXFxL NVwwMTUiLCAvKiB3YWtlX3N0ciAqLwotI2Vsc2UKLSNpZmRlZiBWTVMKLSAgICAiQVRRMEUxWDRZ MCZMMCZNMCZTMVxcSzVcMDE1IiwJLyogd2FrZV9zdHIgKi8KLSNlbHNlCi0gICAgIkFUUTBFMVg0 WTAmTDAmTTBcXEs1XDAxNSIsCQkvKiB3YWtlX3N0ciAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2Vu ZGlmIC8qIE9TMiAqLwotICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KLSAgICAiT0tcMDE1IiwJ CQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLwotICAgICIi LAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCi0gICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIg Ki8KLSAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCi0gICAgMTEwMCwJCQkJLyogZXNjX3RpbWUg Ki8KLSAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCi0gICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1 cF9zdHIgKi8KLSAgICAiQVRcXFEzXDAxNSIsCQkJLyogaHdmY19zdHIgKi8KLSAgICAiQVRcXFEx XFxYMFwwMTUiLAkJCS8qIHN3ZmNfc3RyICovCi0gICAgIkFUXFxRMFwwMTUiLAkJCS8qIG5vZmNf c3RyICovCi0gICAgIkFUXFxONlwwMTUiLAkJCS8qIGVjX29uX3N0ciAqLwotICAgICJBVFxcTjBc MDE1IiwJCQkvKiBlY19vZmZfc3RyICovCi0gICAgIkFUXFxONiVDMVwwMTUiLAkJCS8qIGRjX29u X3N0ciAqLwotICAgICJBVFxcTjYlQzBcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCi0gICAgIkFU UzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLwotICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9v ZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNi X29mZl9zdHIgKi8KLSAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KLSAgICAiQVRN MFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIkFUTDFcMDE1IiwJCQkJLyogdm9sMV9z dHIgKi8KLSAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLwotICAgICJBVEwzXDAxNSIs CQkJCS8qIHZvbDNfc3RyICovCi0gICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8KLSAg ICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICAxMTUyMDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KLSAg ICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2FwYXMgKi8K LSAgICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsKLQotc3RhdGljCi1NRE1JTkYgUk9MTSA9CQkv KiBJQk0gLyBTaWVtZW5zIC8gUm9sbSA4MDAwLCA5MDAwLCA5NzUxIENCWCBEQ00gKi8KLSAgICB7 Ci0gICAgIklCTS9TaWVtZW5zL1JvbG0gQ0JYIERhdGEgQ29tbXVuaWNhdGlvbnMgTW9kdWxlIiwK LSAgICAiIiwJCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiIiwJCQkJCS8qIHRvbmUgY29t bWFuZCAqLwotICAgIDYwLAkJCQkJLyogZGlhbF90aW1lICovCi0gICAgIiIsCQkJCQkvKiBwYXVz ZV9jaGFycyAqLwotICAgIDAsCQkJCQkvKiBwYXVzZV90aW1lICovCi0gICAgIlwwMTVcMDE1IiwJ CQkJLyogd2FrZV9zdHIgKi8KLSAgICA1MCwJCQkJCS8qIHdha2VfcmF0ZSAqLwotICAgICJNT0RJ Rlk/IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLwot ICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCi0gICAgIkNBTEwgJXNcMDE1IiwJCQkvKiBk aWFsX3N0ciAqLwotICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KLSAgICAwLAkJCQkJLyogZXNj X3RpbWUgKi8KLSAgICAwLAkJCQkJLyogZXNjX2NoYXIgKi8KLSAgICAiIiwJCQkJCS8qIGh1cF9z dHIgKi8KLSAgICAiIiwJCQkJCS8qIGh3ZmNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzd2ZjX3N0 ciAqLwotICAgICIiLAkJCQkJLyogbm9mY19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGVjX29uX3N0 ciAqLwotICAgICIiLAkJCQkJLyogZWNfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogZGNfb25f c3RyICovCi0gICAgIiIsCQkJCQkvKiBkY19vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBhYV9v bl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGFhX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNi X29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyog c3Bfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc3Bfb25fc3RyICovCi0gICAgIiIsCQkJCQkv KiB2b2wxX3N0ciAqLwotICAgICIiLAkJCQkJLyogdm9sMl9zdHIgKi8KLSAgICAiIiwJCQkJCS8q IHZvbDNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBpZ25vcmVkdCAqLwotICAgICIiLAkJCQkJLyog aW5pMiAqLwotICAgIDE5MjAwTCwJCQkJLyogbWF4X3NwZWVkICovCi0gICAgMCwJCQkJCS8qIGNh cGFzICovCi0gICAgTlVMTAkJCQkvKiBva19mbiAqLwotfTsKLQotc3RhdGljCi1NRE1JTkYgVVNS ID0JCQkJLyogVVNSIENvdXJpZXIgYW5kIFNwb3J0c3RlciBtb2RlbXMgKi8KLSAgICB7Ci0gICAg IlVTIFJvYm90aWNzIENvdXJpZXIsIFNwb3J0c3Rlciwgb3IgY29tcGF0aWJsZSIsCi0gICAgIkFU UFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIkFUVFwwMTUiLAkJCQkvKiB0b25l IGNvbW1hbmQgKi8KLSAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAgICIsIiwJCQkJLyog cGF1c2VfY2hhcnMgKi8KLSAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLwotI2lmZGVmIE9TMgot ICAgICJBVFEwRTFWMVg0JkEzJlMwJkMxJkQyJk4wJlkzUzE0PTBcMDE1IiwgLyogd2FrZV9zdHIg Ki8KLSNlbHNlCi0jaWZkZWYgU1VOT1M0Ci0gICAgIkFUUTBYNCZBMyZTMCZOMCZZM1MxND0wXDAx NSIsCS8qIHdha2Vfc3RyIC0tIG5lZWRzICZTMCBpbiBTdW5PUyAqLwotI2Vsc2UKLSNpZmRlZiBW TVMKLSAgICAiQVRRMFg0JkEzJlMxJk4wJlkzUzE0PTBcMDE1IiwJLyogd2FrZV9zdHIgLS0gbmVl ZHMgJlMxIGluIFZNUyAqLwotI2Vsc2UKLSAgICAiQVRRMFg0JkEzJk4wJlkzUzE0PTBcMDE1IiwJ CS8qIHdha2Vfc3RyICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogU1VOT1M0ICovCi0j ZW5kaWYgLyogT1MyICovCi0gICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLwotICAgICJPS1wwMTUi LAkJCQkvKiB3YWtlX3Byb21wdCAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAg IiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KLSAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0 ciAqLwotICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KLSAgICAxMTAwLAkJCQkvKiBlc2NfdGlt ZSAqLwotICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KLSAgICAiQVRRMEgwXDAxNSIsCQkJLyog aHVwX3N0ciAqLwotICAgICJBVCZIMSZSMiZJMFwwMTUiLAkJCS8qIGh3ZmNfc3RyICovCi0gICAg IkFUJkgyJlIxJkkyXDAxNSIsCQkJLyogc3dmY19zdHIgKi8KLSAgICAiQVQmSDAmUjEmSTBcMDE1 IiwJCQkvKiBub2ZjX3N0ciAqLwotICAgICJBVCZNNCZCMVwwMTUiLAkJCS8qIGVjX29uX3N0ciAq LwotICAgICJBVCZNMFwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KLSAgICAiQVQmSzFcMDE1IiwJ CQkvKiBkY19vbl9zdHIgKi8KLSAgICAiQVQmSzBcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCi0g ICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLwotICAgICJBVFMwPTBcMDE1IiwJCQkv KiBhYV9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KLSAgICAiIiwJCQkJ CS8qIHNiX29mZl9zdHIgKi8KLSAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KLSAg ICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIkFUTDFcMDE1IiwJCQkJLyog dm9sMV9zdHIgKi8KLSAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLwotICAgICJBVEwz XDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQg Ki8KLSAgICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICAxMTUyMDBMLAkJCQkvKiBtYXhfc3BlZWQg Ki8KLSAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2Fw YXMgKi8KLSAgICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsKLQotCi1zdGF0aWMKLU1ETUlORiBV U1JYMiA9CQkJCS8qIFVTUiBYSi1DQzE1NjAgWDIgNTZLICovCi0gICAgewotICAgICJVUyBSb2Jv dGljcyAvIE1lZ2FoZXJ0eiBDQy9YSi1DQzE1NjAgWDIiLAotICAgICJBVFBcMDE1IiwJCQkJLyog cHVsc2UgY29tbWFuZCAqLwotICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCi0g ICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KLSAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICov Ci0gICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KLSNpZmRlZiBPUzIKLSAgICAiQVRRMEUxVjFY NCZBMyZTMCZCMiZDMSZEMiZOMFwwMTUiLAkvKiB3YWtlX3N0ciAqLwotI2Vsc2UKLSNpZmRlZiBW TVMKLSAgICAiQVRRMFg0JkEzJkIyJk4wJlMxXDAxNSIsCQkvKiB3YWtlX3N0ciAqLwotI2Vsc2UK LSAgICAiQVRRMFg0JkEzJkIyJk4wXDAxNSIsCQkvKiB3YWtlX3N0ciAqLwotI2VuZGlmIC8qIFZN UyAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KLSAgICAi T0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAq LwotICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCi0gICAgIkFURCVzXDAxNSIsCQkJLyog ZGlhbF9zdHIgKi8KLSAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCi0gICAgMTEwMCwJCQkJLyog ZXNjX3RpbWUgKi8KLSAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCi0gICAgIkFUUTBIMFwwMTUi LAkJCS8qIGh1cF9zdHIgKi8KLSAgICAiQVQmSDEmSTBcMDE1IiwJCQkvKiBod2ZjX3N0ciAqLwot ICAgICJBVCZIMiZJMlwwMTUiLAkJCS8qIHN3ZmNfc3RyICovCi0gICAgIkFUJkgwJkkwXDAxNSIs CQkJLyogbm9mY19zdHIgKi8KLSAgICAiQVQmTTRcMDE1IiwJCQkvKiBlY19vbl9zdHIgKi8KLSAg ICAiQVQmTTBcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCi0gICAgIkFUJksxXDAxNSIsCQkJLyog ZGNfb25fc3RyICovCi0gICAgIkFUJkswXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLwotICAgICJB VFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFf b2ZmX3N0ciAqLwotICAgICJBVCZCMVwwMTUiLAkJCS8qIHNiX29uX3N0ciAqLwotICAgICJBVCZC MFwwMTUiLAkJCS8qIHNiX29mZl9zdHIgKi8KLSAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9z dHIgKi8KLSAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIkFUTDFcMDE1 IiwJCQkJLyogdm9sMV9zdHIgKi8KLSAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLwot ICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIkFUWDNcMDE1IiwJCQkJLyog aWdub3JlZHQgKi8KLSAgICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICAxMTUyMDBMLAkJCQkvKiBt YXhfc3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9T VywgLyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsKLQotc3RhdGljCi1N RE1JTkYgT0xEVEIgPQkJCQkvKiBPbGQgVGVsZWJpdHMgKi8KLSAgICB7Ci0gICAgIlRlbGViaXQg VHJhaWxCbGF6ZXIsIFQxMDAwLCBUMTUwMCwgVDIwMDAsIFQyNTAwIiwKLSAgICAiQVRQXDAxNSIs CQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFu ZCAqLwotICAgIDYwLAkJCQkJLyogZGlhbF90aW1lICovCi0gICAgIiwiLAkJCQkvKiBwYXVzZV9j aGFycyAqLwotICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCi0jaWZkZWYgT1MyCi0gICAgIlww MjFBQUFBQVRRMEUxVjFYMSZTMCZDMSZEMlMxMj01MFM1MD0wUzU0PTNcMDE1IiwgLyogd2FrZV9z dHIuICovCi0jZWxzZQotI2lmZGVmIFZNUwotICAgICJcMDIxQUFBQUFUUTBYMVMxMj01MFM1MD0w UzU0PTNcMDE1IiwgLyogd2FrZV9zdHIuICovCi0jZWxzZQotICAgICJcMDIxQUFBQUFUUTBYMSZT MVMxMj01MFM1MD0wUzU0PTNcMDE1IiwgLyogd2FrZV9zdHIuICovCi0jZW5kaWYgLyogVk1TICov Ci0jZW5kaWYgLyogT1MyICovCi0gICAgMTAwLAkJCQkvKiB3YWtlX3JhdGUgPSAxMDAgbXNlYyAq LwotICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLwotICAgICIiLAkJCQkJLyogZG1v ZGVfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KLSAgICAiQVREJXNcMDE1 IiwJCQkvKiBkaWFsX3N0ciwgTm90ZTogbm8gVCBvciBQICovCi0gICAgODAsCQkJCQkvKiBkaWFs X3JhdGUgKi8KLSAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAoZ3VhcmQgdGltZSkgKi8KLSAgICA0 MywJCQkJCS8qIGVzY19jaGFyICovCi0gICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8K LSAgICAiQVRTNTg9MlM2OD0yXDAxNSIsCQkJLyogaHdmY19zdHIgKi8KLSAgICAiQVRTNTg9M1M2 OD0zUzY5PTBcMDE1IiwJCS8qIHN3ZmNfc3RyICovCi0gICAgIkFUUzU4PTBTNjg9MFwwMTUiLAkJ CS8qIG5vZmNfc3RyICovCi0gICAgIkFUUzY2PTFTOTU9MlwwMTUiLAkJCS8qIGVjX29uX3N0ciAq LwotICAgICJBVFM5NT0wXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLwotICAgICJBVFMxMTA9MVM5 Nj0xXDAxNSIsCQkvKiBkY19vbl9zdHIgKi8KLSAgICAiQVRTMTEwPTBTOTY9MFwwMTUiLAkJLyog ZGNfb2ZmX3N0ciAqLwotICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAi QVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb25fc3Ry ICovCi0gICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCi0gICAgIkFUTTFcMDE1IiwJCQkJLyog c3Bfb25fc3RyICovCi0gICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAgICJB VEwxXDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9z dHIgKi8KLSAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLwotICAgICJBVFgzXDAxNSIs CQkJCS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgMTkyMDBMLAkJ CQkvKiBtYXhfc3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hX fENLRF9TV3xDS0RfVEJ8Q0tEX0tTLCAvKiBjYXBhcyAqLwotICAgIGdldG9rCQkJCS8qIG9rX2Zu ICovCi19OwotCi1zdGF0aWMKLU1ETUlORiBORVdUQiA9CQkJCS8qIE5ldyBUZWxlYml0cyAqLwot ICAgIHsKLSAgICAiVGVsZWJpdCBUMTYwMCwgVDMwMDAsIFFCbGF6ZXIsIFdvcmxkQmxhemVyLCBl dGMuIiwKLSAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiQVRUXDAx NSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLwotICAgIDYwLAkJCQkJLyogZGlhbF90aW1lICovCi0g ICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLwotICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICov Ci0jaWZkZWYgT1MyCi0gICAgIlwwMjFBQUFBQVRRMEUxVjFYMiZTMCZDMSZEMlMxMj01MFM1MD0w UzYxPTBTNjM9MFwwMTUiLCAvKiB3YWtlX3N0ci4gKi8KLSNlbHNlCi0jaWZkZWYgVk1TCi0gICAg IlwwMjFBQUFBQVRRMFgyJlMxUzEyPTUwUzUwPTBTNjE9MFM2Mz0wXDAxNSIsIC8qIHdha2Vfc3Ry LiAqLwotI2Vsc2UKLSAgICAiXDAyMUFBQUFBVFEwWDJTMTI9NTBTNTA9MFM2MT0wUzYzPTBcMDE1 IiwgLyogd2FrZV9zdHIuICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0g ICAgMTAwLAkJCQkvKiB3YWtlX3JhdGUgPSAxMDAgbXNlYyAqLwotICAgICJPS1wwMTUiLAkJCQkv KiB3YWtlX3Byb21wdCAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJ CQkvKiBkbW9kZV9wcm9tcHQgKi8KLSAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciwgTm90 ZTogbm8gVCBvciBQICovCi0gICAgODAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KLSAgICAxMTAwLAkJ CQkvKiBlc2NfdGltZSAoZ3VhcmQgdGltZSkgKi8KLSAgICA0MywJCQkJCS8qIGVzY19jaGFyICov Ci0gICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KLSAgICAiQVRTNTg9MlM2OD0yXDAx NSIsCQkJLyogaHdmY19zdHIgKi8KLSAgICAiQVRTNTg9M1M2OD0zXDAxNSIsCQkJLyogc3dmY19z dHIgKi8KLSAgICAiQVRTNTg9MFM2OD0wXDAxNSIsCQkJLyogbm9mY19zdHIgKi8KLSAgICAiQVRT MTgwPTNcMDE1IiwJCQkvKiBlY19vbl9zdHIgKi8KLSAgICAiQVRTMTgwPTBcMDE1IiwJCQkvKiBl Y19vZmZfc3RyICovCi0gICAgIkFUUzE5MD0xXDAxNSIsCQkJLyogZGNfb25fc3RyICovCi0gICAg IkFUUzE5MD0wXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLwotICAgICJBVFMwPTFcMDE1IiwJCQkv KiBhYV9vbl9zdHIgKi8KLSAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLwotICAg ICIiLAkJCQkJLyogc2Jfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCi0g ICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3RyICovCi0gICAgIkFUTTBcMDE1IiwJCQkJLyog c3Bfb2ZmX3N0ciAqLwotICAgICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIkFU TDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KLSAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0 ciAqLwotICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBp bmkyICovCi0gICAgMzg0MDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NC fENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TV3xDS0RfVEJ8Q0tEX0tTLCAvKiBjYXBhcyAqLwot ICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCi19OwotI2VuZGlmIC8qIE1JTklESUFMICovCi0KLXN0 YXRpYwotTURNSU5GIERVTU1ZID0gLyogZHVtbXkgaW5mb3JtYXRpb24gZm9yIG1vZGVtcyB0aGF0 IGFyZSBoYW5kbGVkIGVsc2V3aGVyZSAqLwotICAgIHsKLSAgICAiKGR1bW15KSIsCi0gICAgIiIs CQkJCQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIiIsCQkJCQkvKiB0b25lIGNvbW1hbmQgKi8K LSAgICAzMCwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAgICIiLAkJCQkJLyogcGF1c2VfY2hhcnMg Ki8KLSAgICAwLAkJCQkJLyogcGF1c2VfdGltZSAqLwotICAgICIiLAkJCQkJLyogd2FrZV9zdHIg Ki8KLSAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCi0gICAgIiIsCQkJCQkvKiB3YWtlX3Byb21w dCAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgTlVMTCwJCQkJLyogZG1vZGVf cHJvbXB0ICovCi0gICAgIiVzXDAxNSIsCQkJCS8qIGRpYWxfc3RyICovCi0gICAgMCwJCQkJCS8q IGRpYWxfcmF0ZSAqLwotICAgIDAsCQkJCQkvKiBlc2NfdGltZSAqLwotICAgIDAsCQkJCQkvKiBl c2NfY2hhciAqLwotICAgICIiLAkJCQkJLyogaHVwX3N0ciAqLwotICAgICIiLAkJCQkJLyogaHdm Y19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHN3ZmNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBub2Zj X3N0ciAqLwotICAgICIiLAkJCQkJLyogZWNfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBlY19v ZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkY19vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRj X29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGFhX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyog YWFfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCi0gICAgIiIsCQkJCQkv KiBzYl9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIiIsCQkJ CQkvKiBzcF9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIiIsCQkJ CQkvKiB2b2wyX3N0ciAqLwotICAgICIiLAkJCQkJLyogdm9sM19zdHIgKi8KLSAgICAiIiwJCQkJ CS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgMEwsCQkJCQkvKiBt YXhfc3BlZWQgKi8KLSAgICAwLAkJCQkJLyogY2FwYXMgKi8KLSAgICBOVUxMCQkJCS8qIG9rX2Zu ICovCi19OwotCi0jaWZuZGVmIE1JTklESUFMCi1zdGF0aWMKLU1ETUlORiBSV1YzMiA9CQkJCS8q IEdlbmVyaWMgUm9ja3dlbGwgVi4zMiAqLwotICAgIHsKLSAgICAiR2VuZXJpYyBSb2Nrd2VsbCBW LjMyIG1vZGVtIiwJLyogQVRJMywgQVRJNCwgYW5kIEFUSTYgZm9yIGRldGFpbHMgKi8KLSAgICAi QVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiQVRUXDAxNSIsCQkJCS8qIHRv bmUgY29tbWFuZCAqLwotICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCi0gICAgIiwiLAkJCQkv KiBwYXVzZV9jaGFycyAqLwotICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCi0jaWZkZWYgT1My Ci0gICAgIkFUUTBFMVYxWDRZMCZTMCZDMSZEMiVFMlxcSzUrRkNMQVNTPTBOMVMzNz0wXDAxNSIs IC8qIHdha2Vfc3RyICovCi0jZWxzZQotI2lmZGVmIFZNUwotICAgICJBVFEwWDRZMCZTMSVFMlxc SzUrRkNMQVNTPTBOMVMzNz0wXDAxNSIsIC8qIHdha2Vfc3RyICovCi0jZWxzZQotICAgICJBVFEw WDRZMCVFMlxcSzUrRkNMQVNTPTBOMVMzNz0wXDAxNSIsIC8qIHdha2Vfc3RyICovCi0jZW5kaWYg LyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLwot ICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLwotICAgICIiLAkJCQkJLyogZG1vZGVf c3RyICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KLSAgICAiQVREJXNcMDE1IiwJ CQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KLSAgICAxMTAwLAkJ CQkvKiBlc2NfdGltZSAqLwotICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KLSAgICAiQVRRMEgw XDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAgICJBVCZLM1wwMTUiLAkJCS8qIGh3ZmNfc3RyICov Ci0gICAgIkFUJks0UzMyPTE3UzMzPTE5XDAxNSIsCQkvKiBzd2ZjX3N0ciAqLwotICAgICJBVCZL MFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCi0gICAgIkFUJlE2XDAxNSIsCQkJLyogZWNfb25fc3Ry ICovCi0gICAgIkFUJlEwXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLwotICAgICJBVCVDMVwwMTUi LAkJCS8qIGRjX29uX3N0ciAqLwotICAgICJBVCVDMFwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8K LSAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCi0gICAgIkFUUzA9MFwwMTUiLAkJ CS8qIGFhX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLwotICAgICIiLAkJ CQkJLyogc2Jfb2ZmX3N0ciAqLwotICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLwot ICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KLSAgICAiQVRMMVwwMTUiLAkJCQkv KiB2b2wxX3N0ciAqLwotICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCi0gICAgIkFU TDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KLSAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVk dCAqLwotICAgICIiLAkJCQkJLyogaW5pMiAqLwotICAgIDU3NjAwTCwJCQkJLyogbWF4X3NwZWVk ICovCi0gICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8qIGNh cGFzICovCi0gICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KLX07Ci0KLXN0YXRpYwotTURNSU5GIFJX VjMyQiA9CQkJCS8qIEdlbmVyaWMgUm9ja3dlbGwgVi4zMmJpcyAqLwotICAgIHsKLSAgICAiR2Vu ZXJpYyBSb2Nrd2VsbCBWLjMyYmlzIG1vZGVtIiwJLyogQVRJMywgQVRJNCwgYW5kIEFUSTYgZm9y IGRldGFpbHMgKi8KLSAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAi QVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLwotICAgIDM1LAkJCQkJLyogZGlhbF90aW1l ICovCi0gICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLwotICAgIDIsCQkJCQkvKiBwYXVzZV90 aW1lICovCi0jaWZkZWYgT1MyCi0gICAgIkFUUTBFMVYxWDRZMCZTMCZDMSZEMiVFMlxcSzUrRkNM QVNTPTBOMVMzNz0wXDAxNSIsIC8qIHdha2Vfc3RyICovCi0jZWxzZQotI2lmZGVmIFZNUwotICAg ICJBVFEwWDRZMCZTMSVFMlxcSzUrRkNMQVNTPTBOMVMzNz0wXDAxNSIsIC8qIHdha2Vfc3RyICov Ci0jZWxzZQotICAgICJBVFEwWDRZMCVFMlxcSzUrRkNMQVNTPTBOMVMzNz0wXDAxNSIsIC8qIHdh a2Vfc3RyICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgMCwJCQkJ CS8qIHdha2VfcmF0ZSAqLwotICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLwotICAg ICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8K LSAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJCQkvKiBkaWFsX3Jh dGUgKi8KLSAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLwotICAgIDQzLAkJCQkJLyogZXNjX2No YXIgKi8KLSAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAgICJBVCZLM1wwMTUi LAkJCS8qIGh3ZmNfc3RyICovCi0gICAgIkFUJks0UzMyPTE3UzMzPTE5XDAxNSIsCQkvKiBzd2Zj X3N0ciAqLwotICAgICJBVCZLMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCi0gICAgIkFUJlE1XDAx NSIsCQkJLyogZWNfb25fc3RyICovCi0gICAgIkFUJlEwXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAq LwotICAgICJBVFMlQzFcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KLSAgICAiQVRTJUMwXDAxNSIs CQkJLyogZGNfb2ZmX3N0ciAqLwotICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8K LSAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jf b25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCi0gICAgIkFUTTFcMDE1IiwJ CQkJLyogc3Bfb25fc3RyICovCi0gICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLwot ICAgICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIkFUTDJcMDE1IiwJCQkJLyog dm9sMl9zdHIgKi8KLSAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLwotICAgICJBVFgz XDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgNTc2 MDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8 Q0tEX0hXfENLRF9TVywgLyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsK LQotc3RhdGljCi1NRE1JTkYgUldWMzQgPQkJCQkvKiBHZW5lcmljIFJvY2t3ZWxsIFYuMzQgRGF0 YS9GYXggKi8KLSAgICB7Ci0gICAgIkdlbmVyaWMgUm9ja3dlbGwgVi4zNCBtb2RlbSIsCS8qIEFU STMsIEFUSTQsIGFuZCBBVEk2IGZvciBkZXRhaWxzICovCi0gICAgIkFUUFwwMTUiLAkJCQkvKiBw dWxzZSBjb21tYW5kICovCi0gICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KLSAg ICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8K LSAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLwotI2lmZGVmIE9TMgotICAgICJBVFEwVjFYNFkw JkMxJkQyJlMwJUUyXFxLNStGQ0xBU1M9MFwwMTUiLCAvKiB3YWtlX3N0ciAqLwotI2Vsc2UKLSNp ZmRlZiBWTVMKLSAgICAiQVRRMFYxWDRZMCZDMSZEMiZTMSVFMlxcSzUrRkNMQVNTPTBcMDE1Iiwg Lyogd2FrZV9zdHIgKi8KLSNlbHNlCi0gICAgIkFUUTBWMVg0WTAmQzEmRDIlRTJcXEs1K0ZDTEFT Uz0wXDAxNSIsIC8qIHdha2Vfc3RyICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1My ICovCi0gICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLwotICAgICJPS1wwMTUiLAkJCQkvKiB3YWtl X3Byb21wdCAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkvKiBk bW9kZV9wcm9tcHQgKi8KLSAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAs CQkJCQkvKiBkaWFsX3JhdGUgKi8KLSAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLwotICAgIDQz LAkJCQkJLyogZXNjX2NoYXIgKi8KLSAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLwot ICAgICJBVCZLM1wwMTUiLAkJCS8qIGh3ZmNfc3RyICovCi0gICAgIkFUJks0UzMyPTE3UzMzPTE5 XDAxNSIsCQkvKiBzd2ZjX3N0ciAqLwotICAgICJBVCZLMFwwMTUiLAkJCS8qIG5vZmNfc3RyICov Ci0gICAgIkFUJlE1XDAxNSIsCQkJLyogZWNfb25fc3RyICovCi0gICAgIkFUJlEwXDAxNSIsCQkJ LyogZWNfb2ZmX3N0ciAqLwotICAgICJBVFMlQzNcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KLSAg ICAiQVRTJUMwXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLwotICAgICJBVFMwPTFcMDE1IiwJCQkv KiBhYV9vbl9zdHIgKi8KLSAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLwotICAg ICIiLAkJCQkJLyogc2Jfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCi0g ICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3RyICovCi0gICAgIkFUTTBcMDE1IiwJCQkJLyog c3Bfb2ZmX3N0ciAqLwotICAgICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIkFU TDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KLSAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0 ciAqLwotICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBp bmkyICovCi0gICAgMTE1MjAwTCwJCQkJLyogbWF4X3NwZWVkICovCi0gICAgQ0tEX0FUfENLRF9T QnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8qIGNhcGFzICovCi0gICAgZ2V0b2sJCQkJ Lyogb2tfZm4gKi8KLX07Ci0KLXN0YXRpYwotTURNSU5GIFJXVjkwID0JCQkJLyogR2VuZXJpYyBS b2Nrd2VsbCBWLjkwIERhdGEvRmF4ICovCi0gICAgewotICAgICJHZW5lcmljIFJvY2t3ZWxsIFYu OTAgNTZLIG1vZGVtIiwJLyogQVRJMywgQVRJNCwgYW5kIEFUSTYgZm9yIGRldGFpbHMgKi8KLSAg ICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiQVRUXDAxNSIsCQkJCS8q IHRvbmUgY29tbWFuZCAqLwotICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCi0gICAgIiwiLAkJ CQkvKiBwYXVzZV9jaGFycyAqLwotICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCi0jaWZkZWYg T1MyCi0gICAgIkFUUTBWMU4xWDRZMCZDMSZEMiZTMCVFMlxcSzUrRkNMQVNTPTBTMzc9MFwwMTUi LCAvKiBLOTUgKi8KLSNlbHNlCi0jaWZkZWYgVk1TCi0gICAgIkFUUTBWMU4xWDRZMCZDMSZEMiZT MSVFMlxcSzUrRkNMQVNTPTBTMzc9MFwwMTUiLCAvKiB3YWtlX3N0ciAqLwotI2Vsc2UKLSAgICAi QVRRMFYxTjFYNFkwJkMxJkQyJUUyXFxLNStGQ0xBU1M9MFMzNz0wXDAxNSIsIC8qIHdha2Vfc3Ry ICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgMCwJCQkJCS8qIHdh a2VfcmF0ZSAqLwotICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLwotICAgICIiLAkJ CQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KLSAgICAi QVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8K LSAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLwotICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8K LSAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAgICJBVCZLM1wwMTUiLAkJCS8q IGh3ZmNfc3RyICovCi0gICAgIkFUJks0UzMyPTE3UzMzPTE5XDAxNSIsCQkvKiBzd2ZjX3N0ciAq LwotICAgICJBVCZLMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCi0gICAgIkFUJlE1XDAxNSIsCQkJ LyogZWNfb25fc3RyICovCi0gICAgIkFUJlEwXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLwotICAg ICJBVCVDM1wwMTUiLAkJCS8qIGRjX29uX3N0ciAqLwotICAgICJBVCVDMFwwMTUiLAkJCS8qIGRj X29mZl9zdHIgKi8KLSAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCi0gICAgIkFU UzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAq LwotICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLwotICAgICJBVE0xXDAxNSIsCQkJCS8qIHNw X29uX3N0ciAqLwotICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KLSAgICAiQVRM MVwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLwotICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3Ry ICovCi0gICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KLSAgICAiQVRYM1wwMTUiLAkJ CQkvKiBpZ25vcmVkdCAqLwotICAgICIiLAkJCQkJLyogaW5pMiAqLwotICAgIDExNTIwMEwsCQkJ CS8qIG1heF9zcGVlZCAqLwotICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8 Q0tEX1NXLCAvKiBjYXBhcyAqLwotICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCi19OwotCi1zdGF0 aWMKLU1ETUlORiBNV0FWRSA9CQkJCS8qIElCTSBNd2F2ZSAqLwotICAgIHsKLSAgICAiSUJNIE13 YXZlIEFkYXB0ZXIiLAotICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLwotICAg ICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCi0gICAgMzUsCQkJCQkvKiBkaWFsX3Rp bWUgKi8KLSAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCi0gICAgMiwJCQkJCS8qIHBhdXNl X3RpbWUgKi8KLSNpZmRlZiBPUzIKLSAgICAiQVRRMEUxVjFYNFkwJlMwJkMxJkQyJk0wJlEwJk4x XFxLM1xcVDAlRTJTMjg9MFwwMTUiLCAvKiB3YWtlX3N0ciAqLwotI2Vsc2UKLSNpZmRlZiBWTVMK LSAgICAiQVRRMFg0WTAmTTAmUzEmUTAmTjEmUzBcXEszXFxUMCVFMlMyOD0wXDAxNSIsIC8qIHdh a2Vfc3RyICovCi0jZWxzZQotICAgICJBVFEwWDRZMCZNMCZRMCZOMSZTMFxcSzNcXFQwJUUyUzI4 PTBcMDE1IiwgLyogd2FrZV9zdHIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzIg Ki8KLSAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCi0gICAgIk9LXDAxNSIsCQkJCS8qIHdha2Vf cHJvbXB0ICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRt b2RlX3Byb21wdCAqLwotICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCi0gICAgMCwJ CQkJCS8qIGRpYWxfcmF0ZSAqLwotICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCi0gICAgNDMs CQkJCQkvKiBlc2NfY2hhciAqLwotICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCi0g ICAgIkFUXFxRM1wwMTUiLAkJCS8qIGh3ZmNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzd2ZjX3N0 ciAoaXQgZG9lc24ndCEpICovCi0gICAgIkFUXFxRMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCi0g ICAgIkFUXFxON1wwMTUiLAkJCS8qIGVjX29uX3N0ciAqLwotICAgICJBVFxcTjBcMDE1IiwJCQkv KiBlY19vZmZfc3RyICovCi0gICAgIkFUJUMxXCJIM1wwMTUiLAkJCS8qIGRjX29uX3N0ciAqLwot ICAgICJBVCVDMFwiSDBcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCi0gICAgIkFUUzA9MVwwMTUi LAkJCS8qIGFhX29uX3N0ciAqLwotICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICov Ci0gICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIg Ki8KLSAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KLSAgICAiQVRNMFwwMTUiLAkJ CQkvKiBzcF9vZmZfc3RyICovCi0gICAgIkFUTDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KLSAg ICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLwotICAgICJBVEwzXDAxNSIsCQkJCS8qIHZv bDNfc3RyICovCi0gICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8KLSAgICAiIiwJCQkJ CS8qIGluaTIgKi8KLSAgICA1NzYwMEwsCQkJCS8qIG1heF9zcGVlZCAqLwotICAgIENLRF9BVHxD S0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFcsIC8qIGNhcGFzICovCi0gICAgZ2V0b2sJCQkJLyog b2tfZm4gKi8KLX07Ci0KLXN0YXRpYwotTURNSU5GIFRFTEVQQVRIID0JCQkvKiBHYXRld2F5IDIw MDAgVGVsZXBhdGggKi8KLSAgICB7Ci0gICAgIkdhdGV3YXkgMjAwMCBUZWxlcGF0aCBJSSAyOC44 IiwKLSAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiQVRUXDAxNSIs CQkJCS8qIHRvbmUgY29tbWFuZCAqLwotICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCi0gICAg IiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLwotICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCi0j aWZkZWYgT1MyCi0gICAgIkFUUTBFMVYxWDQmUzAmQzEmRDImTjAmWTIjQ0xTPTBTMTM9MFMxNT0w UzE5PTBcMDE1IiwgLyogd2FrZV9zdHIgKi8KLSNlbHNlCi0jaWZkZWYgVk1TCi0gICAgIkFUUTBY NCZOMCZTMSZZMSNDTFM9MFMxMz0wUzE1PTBTMTk9MFwwMTUiLCAvKiB3YWtlX3N0ciAqLwotI2Vs c2UKLSAgICAiQVRRMFg0Jk4wJlkxI0NMUz0wUzEzPTBTMTU9MFMxOT0wXDAxNSIsIC8qIHdha2Vf c3RyICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgMCwJCQkJCS8q IHdha2VfcmF0ZSAqLwotICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLwotICAgICIi LAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KLSAg ICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUg Ki8KLSAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLwotICAgIDQzLAkJCQkJLyogZXNjX2NoYXIg Ki8KLSAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAgICJBVCZIMSZSMlwwMTUi LAkJCS8qIGh3ZmNfc3RyICovCi0gICAgIkFUJkgyJkkyUzIyPTE3UzIzPTE5XDAxNSIsCQkvKiBz d2ZjX3N0ciAqLwotICAgICJBVCZIMCZJMCZSMVwwMTUiLAkJCS8qIG5vZmNfc3RyICovCi0gICAg IkFUJk00JkIxXDAxNSIsCQkJLyogZWNfb25fc3RyIC0tIGFsc28gZml4ZXMgc3BlZWQgKi8KLSAg ICAiQVQmTTBcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCi0gICAgIkFUJksxXDAxNSIsCQkJLyog ZGNfb25fc3RyICovCi0gICAgIkFUJkswXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLwotICAgICJB VFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFf b2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBz Yl9vZmZfc3RyICovCi0gICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3RyICovCi0gICAgIkFU TTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAgICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFf c3RyICovCi0gICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KLSAgICAiQVRMM1wwMTUi LAkJCQkvKiB2b2wzX3N0ciAqLwotICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCi0g ICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgNTc2MDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KLSAg ICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2FwYXMgKi8K LSAgICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsKLQotc3RhdGljCi1NRE1JTkYgQ0FSRElOQUwg PQkJCS8qIENhcmRpbmFsIC0gYmFzZWQgb24gUm9ja3dlbGwgVi4zNCAqLwotICAgIHsKLSAgICAi Q2FyZGluYWwgTVZQMjg4WCBTZXJpZXMiLAkJLyogQVRJMywgQVRJNCwgYW5kIEFUSTYgZm9yIGRl dGFpbHMgKi8KLSAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiQVRU XDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLwotICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICov Ci0gICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLwotICAgIDIsCQkJCQkvKiBwYXVzZV90aW1l ICovCi0jaWZkZWYgT1MyCi0gICAgIkFUUTBFMVYxWDRXMVkwJUUyJlMwJkMxJkQyXFxLNStGQ0xB U1M9MCtNUz0xMSwxXDAxNSIsIC8qIHdha2Vfc3RyICovCi0jZWxzZQotI2lmZGVmIFZNUwotICAg ICJBVFEwWDRXMVkwJlMxJUUyXFxLNStGQ0xBU1M9MCtNUz0xMSwxXDAxNSIsIC8qIHdha2Vfc3Ry ICovCi0jZWxzZQotICAgICJBVFEwWDRXMVkwJUUyXFxLNStGQ0xBU1M9MCtNUz0xMSwxXDAxNSIs IC8qIHdha2Vfc3RyICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0gICAg MCwJCQkJCS8qIHdha2VfcmF0ZSAqLwotICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAq LwotICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9t cHQgKi8KLSAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJCQkvKiBk aWFsX3JhdGUgKi8KLSAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLwotICAgIDQzLAkJCQkJLyog ZXNjX2NoYXIgKi8KLSAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAgICJBVCZL M1wwMTUiLAkJCS8qIGh3ZmNfc3RyICovCi0gICAgIkFUJks0UzMyPTE3UzMzPTE5XDAxNSIsCQkv KiBzd2ZjX3N0ciAqLwotICAgICJBVCZLMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCi0gICAgIkFU JlE1UzM2PTdTNDg9N1xcTjNcMDE1IiwJCS8qIGVjX29uX3N0ciAqLwotICAgICJBVCZRMFM0OD0x MjhcXE4xXDAxNSIsCQkvKiBlY19vZmZfc3RyICovCi0gICAgIkFUUzQ2PTEzOCVDMVwwMTUiLAkJ CS8qIGRjX29uX3N0ciAqLwotICAgICJBVFM0Nj0xMzYlQzBcMDE1IiwJCQkvKiBkY19vZmZfc3Ry ICovCi0gICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLwotICAgICJBVFMwPTBcMDE1 IiwJCQkvKiBhYV9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KLSAgICAi IiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KLSAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIg Ki8KLSAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIkFUTDFcMDE1IiwJ CQkJLyogdm9sMV9zdHIgKi8KLSAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLwotICAg ICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIkFUWDNcMDE1IiwJCQkJLyogaWdu b3JlZHQgKi8KLSAgICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICAxMTUyMDBMLAkJCQkvKiBtYXhf c3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywg LyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsKLQotc3RhdGljCi1NRE1J TkYgTFVDRU5UID0JCQkJLyogTHVjZW50IFZlbnVzIG9yIERhdGEvRmF4IG1vZGVtICovCi0gICAg ewotICAgICJMdWNlbnQgVmVudXMgY2hpcHNldCIsCi0gICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxz ZSBjb21tYW5kICovCi0gICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KLSAgICAz NSwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KLSAg ICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLwotI2lmZGVmIE9TMgotICAgICJBVFEwVjFOMVg0WTAm QzEmRDImUzAlRTJcXEs1K0ZDTEFTUz0wUzM3PTBcMDE1IiwgLyogSzk1ICovCi0jZWxzZQotI2lm ZGVmIFZNUwotICAgICJBVFEwVjFOMVg0WTAmQzEmRDImUzElRTJcXEs1K0ZDTEFTUz0wUzM3PTBc MDE1IiwgLyogVk1TICovCi0jZWxzZQotICAgICJBVFEwVjFOMVg0WTAmQzEmRDIlRTJcXEs1K0ZD TEFTUz0wUzM3PTBcMDE1IiwgLyogQWxsIG90aGVycyAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2Vu ZGlmIC8qIE9TMiAqLwotICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KLSAgICAiT0tcMDE1IiwJ CQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLwotICAgICIi LAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCi0gICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIg Ki8KLSAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCi0gICAgMTEwMCwJCQkJLyogZXNjX3RpbWUg Ki8KLSAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCi0gICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1 cF9zdHIgKi8KLSAgICAiQVQmSzNcMDE1IiwJCQkvKiBod2ZjX3N0ciAqLwotICAgICJBVCZLNFMz Mj0xN1MzMz0xOVwwMTUiLAkJLyogc3dmY19zdHIgKi8KLSAgICAiQVQmSzBcMDE1IiwJCQkvKiBu b2ZjX3N0ciAqLwotICAgICJBVCZRNVwwMTUiLAkJCS8qIGVjX29uX3N0ciAqLwotICAgICJBVCZR MFwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KLSAgICAiQVQlQzFcMDE1IiwJCQkvKiBkY19vbl9z dHIgKi8KLSAgICAiQVQlQzBcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCi0gICAgIkFUUzA9MVww MTUiLAkJCS8qIGFhX29uX3N0ciAqLwotICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3Ry ICovCi0gICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29mZl9z dHIgKi8KLSAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KLSAgICAiQVRNMFwwMTUi LAkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIkFUTDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8K LSAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLwotICAgICJBVEwzXDAxNSIsCQkJCS8q IHZvbDNfc3RyICovCi0gICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8KLSAgICAiIiwJ CQkJCS8qIGluaTIgKi8KLSAgICAxMTUyMDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KLSAgICBDS0Rf QVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2FwYXMgKi8KLSAgICBn ZXRvawkJCQkvKiBva19mbiAqLwotfTsKLQotc3RhdGljCi1NRE1JTkYgQ09ORVhBTlQgPQkJCS8q IENvbmV4YW50IGZhbWlseSAqLwotICAgIHsKLSAgICAiQ29uZXhhbnQgZmFtaWx5IG9mIG1vZGVt cyIsCi0gICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIkFUVFwwMTUi LAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KLSAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAg ICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KLSAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLwot I2lmZGVmIE9TMgotICAgICJBVFEwVjFYNCZDMSZEMiZTMCVFMStGQ0xBU1M9MFwwMTUiLCAvKiBL OTUgKi8KLSNlbHNlCi0jaWZkZWYgVk1TCi0gICAgIkFUUTBWMVg0JkMxJkQyJlMxJUUxK0ZDTEFT Uz0wXDAxNSIsIC8qIFZNUyAqLwotI2Vsc2UKLSAgICAiQVRRMFYxWDQmQzEmRDIlRTErRkNMQVNT PTBcMDE1IiwgLyogVU5JWCBldGMgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzIg Ki8KLSAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCi0gICAgIk9LXDAxNSIsCQkJCS8qIHdha2Vf cHJvbXB0ICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRt b2RlX3Byb21wdCAqLwotICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCi0gICAgMCwJ CQkJCS8qIGRpYWxfcmF0ZSAqLwotICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCi0gICAgNDMs CQkJCQkvKiBlc2NfY2hhciAqLwotICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCi0g ICAgIkFUJkszXDAxNSIsCQkJLyogaHdmY19zdHIgKi8KLSAgICAiQVQmSzRTMzI9MTdTMzM9MTlc MDE1IiwJCS8qIHN3ZmNfc3RyICovCi0gICAgIkFUJkswXDAxNSIsCQkJLyogbm9mY19zdHIgKi8K LSAgICAiQVQmUTVcMDE1IiwJCQkvKiBlY19vbl9zdHIgKi8KLSAgICAiQVQmUTBcMDE1IiwJCQkv KiBlY19vZmZfc3RyICovCi0gICAgIkFUJUMzXDAxNSIsCQkJLyogZGNfb25fc3RyICovCi0gICAg IkFUJUMwXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLwotICAgICJBVFMwPTFcMDE1IiwJCQkvKiBh YV9vbl9zdHIgKi8KLSAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLwotICAgICIi LAkJCQkJLyogc2Jfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCi0gICAg IkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3RyICovCi0gICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bf b2ZmX3N0ciAqLwotICAgICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIkFUTDJc MDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KLSAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAq LwotICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmky ICovCi0gICAgMTE1MjAwTCwJCQkJLyogbWF4X3NwZWVkICovCi0gICAgQ0tEX0FUfENLRF9TQnxD S0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8qIGNhcGFzICovCi0gICAgZ2V0b2sJCQkJLyog b2tfZm4gKi8KLX07Ci0KLXN0YXRpYwotTURNSU5GIFBDVEVMID0JCQkJLyogUENUZWwgY2hpcHNl dCAqLwotICAgIHsKLSAgICAiUENUZWwgY2hpcHNldCIsCi0gICAgIkFUUFwwMTUiLAkJCQkvKiBw dWxzZSBjb21tYW5kICovCi0gICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KLSAg ICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8K LSAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLwotI2lmZGVmIE9TMgotICAgICJBVFEwVjFOMVg0 WTAmQzEmRDImUzAlRTJcXEs1UzM3PTBcMDE1IiwgLyogSzk1ICovCi0jZWxzZQotI2lmZGVmIFZN UwotICAgICJBVFEwVjFOMVg0WTAmQzEmRDImUzElRTJcXEs1UzM3PTBcMDE1IiwgLyogVk1TICov Ci0jZWxzZQotICAgICJBVFEwVjFOMVg0WTAmQzEmRDIlRTJcXEs1UzM3PTBcMDE1IiwgLyogVU5J WCBldGMgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAwLAkJCQkJ Lyogd2FrZV9yYXRlICovCi0gICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCi0gICAg IiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLwot ICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCi0gICAgMCwJCQkJCS8qIGRpYWxfcmF0 ZSAqLwotICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCi0gICAgNDMsCQkJCQkvKiBlc2NfY2hh ciAqLwotICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCi0gICAgIkFUJkszXDAxNSIs CQkJLyogaHdmY19zdHIgKi8KLSAgICAiQVQmSzRTMzI9MTdTMzM9MTlcMDE1IiwJCS8qIHN3ZmNf c3RyICovCi0gICAgIkFUJkswXDAxNSIsCQkJLyogbm9mY19zdHIgKi8KLSAgICAiQVRcXE4zXDAx NSIsCQkJLyogZWNfb25fc3RyICovCi0gICAgIkFUXFxOMFwwMTUiLAkJCS8qIGVjX29mZl9zdHIg Ki8KLSAgICAiQVQlQzFcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KLSAgICAiQVQlQzBcMDE1IiwJ CQkvKiBkY19vZmZfc3RyICovCi0gICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLwot ICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9v bl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KLSAgICAiQVRNMVwwMTUiLAkJ CQkvKiBzcF9vbl9zdHIgKi8KLSAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCi0g ICAgIkFUTDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KLSAgICAiQVRMMlwwMTUiLAkJCQkvKiB2 b2wyX3N0ciAqLwotICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIkFUWDNc MDE1IiwJCQkJLyogaWdub3JlZHQgKi8KLSAgICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICAxMTUy MDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8 Q0tEX0hXfENLRF9TVywgLyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsK LQotc3RhdGljCi1NRE1JTkYgWk9PTVYzNCA9CQkJLyogWm9vbSBUZWxlcGhvbmljcyBWLjM0ICAq LwotICAgIHsKLSAgICAiWm9vbSBUZWxlcGhvbmljcyBWLjM0IiwKLSAgICAiQVRQXDAxNSIsCQkJ CS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAq LwotICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCi0gICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFy cyAqLwotICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCi0jaWZkZWYgT1MyCi0gICAgIkFUUTBW MU4xVzFYNCZTMCZDMSZEMlM4Mj0xMjhcMDE1IiwgLyogd2FrZV9zdHIgKi8KLSNlbHNlCi0jaWZk ZWYgVk1TCi0gICAgIkFUUTBWMU4xVzFYNCZTMVM4Mj0xMjhcMDE1IiwJLyogd2FrZV9zdHIgKi8K LSNlbHNlCi0gICAgIkFUUTBWMU4xVzFYNFM4Mj0xMjhTMDE1IiwJCS8qIHdha2Vfc3RyICovCi0j ZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgMCwJCQkJCS8qIHdha2VfcmF0 ZSAqLwotICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLwotICAgICIiLAkJCQkJLyog ZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KLSAgICAiQVREJXNc MDE1IiwJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KLSAgICAx MTAwLAkJCQkvKiBlc2NfdGltZSAqLwotICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KLSAgICAi QVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAgICJBVCZLM1wwMTUiLAkJCS8qIGh3ZmNf c3RyICovCi0gICAgIkFUJks0XDAxNVMzMj0xN1MzMz0xOSIsCQkvKiBzd2ZjX3N0ciAqLwotICAg ICJBVCZLMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCi0gICAgIkFUJlE1XDAxNSIsCQkJLyogZWNf b25fc3RyICovCi0gICAgIkFUJlEwXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLwotICAgICJBVFMl QzNcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KLSAgICAiQVRTJUMwXDAxNSIsCQkJLyogZGNfb2Zm X3N0ciAqLwotICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiQVRTMD0w XDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCi0g ICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCi0gICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25f c3RyICovCi0gICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAgICJBVEwxXDAx NSIsCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8K LSAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLwotICAgICJBVFgzXDAxNSIsCQkJCS8q IGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgNTc2MDBMLAkJCQkvKiBt YXhfc3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9T VywgLyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsKLQotc3RhdGljCi1N RE1JTkYgWk9PTVY5MCA9CQkJLyogWk9PTSBWLjkwICovCi0gICAgewotICAgICJab29tIFYuOTAg NTZLIiwKLSAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiQVRUXDAx NSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLwotICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCi0g ICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLwotICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICov Ci0jaWZkZWYgT1MyCi0gICAgIkFUUTBWMU4xWDRZMCZDMSZEMiZTMCVFMlxcSzUrRkNMQVNTPTBT Mzc9MFwwMTUiLCAvKiBLOTUgKi8KLSNlbHNlCi0jaWZkZWYgVk1TCi0gICAgIkFUUTBWMU4xWDRZ MCZDMSZEMiZTMSVFMlxcSzUrRkNMQVNTPTBTMzc9MFwwMTUiLCAvKiBWTVMgKi8KLSNlbHNlCi0g ICAgIkFUUTBWMU4xWDRZMCZDMSZEMiVFMlxcSzUrRkNMQVNTPTBTMzc9MFwwMTUiLCAvKiBBbGwg b3RoZXJzICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgMCwJCQkJ CS8qIHdha2VfcmF0ZSAqLwotICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLwotICAg ICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8K LSAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJCQkvKiBkaWFsX3Jh dGUgKi8KLSAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLwotICAgIDQzLAkJCQkJLyogZXNjX2No YXIgKi8KLSAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAgICJBVCZLM1wwMTUi LAkJCS8qIGh3ZmNfc3RyICovCi0gICAgIkFUJks0UzMyPTE3UzMzPTE5XDAxNSIsCQkvKiBzd2Zj X3N0ciAqLwotICAgICJBVCZLMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCi0gICAgIkFUJlE1XDAx NSIsCQkJLyogZWNfb25fc3RyICovCi0gICAgIkFUJlEwXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAq LwotICAgICJBVCVDMVwwMTUiLAkJCS8qIGRjX29uX3N0ciAqLwotICAgICJBVCVDMFwwMTUiLAkJ CS8qIGRjX29mZl9zdHIgKi8KLSAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCi0g ICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29u X3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLwotICAgICJBVE0xXDAxNSIsCQkJ CS8qIHNwX29uX3N0ciAqLwotICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KLSAg ICAiQVRMMVwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLwotICAgICJBVEwyXDAxNSIsCQkJCS8qIHZv bDJfc3RyICovCi0gICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KLSAgICAiQVRYM1ww MTUiLAkJCQkvKiBpZ25vcmVkdCAqLwotICAgICIiLAkJCQkJLyogaW5pMiAqLwotICAgIDExNTIw MEwsCQkJCS8qIG1heF9zcGVlZCAqLwotICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xD S0RfSFd8Q0tEX1NXLCAvKiBjYXBhcyAqLwotICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCi19Owot Ci1zdGF0aWMKLU1ETUlORiBaT09NVjkyID0JCQkvKiBaT09NIFYuOTIgKi8KLSAgICB7Ci0gICAg Ilpvb20gVi45MiB3aXRoIFYuNDQgY29tcHJlc3Npb24iLAotICAgICJBVFBcMDE1IiwJCQkJLyog cHVsc2UgY29tbWFuZCAqLwotICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCi0g ICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KLSAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICov Ci0gICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KLSNpZmRlZiBPUzIKLSAgICAiQVRRMFYxTjFY NFkwJkMxJkQyJlMwJUUyXFxLNStGQ0xBU1M9MFMzNz0wK01TPVY5MlwwMTUiLCAvKiBLOTUgKi8K LSNlbHNlCi0jaWZkZWYgVk1TCi0gICAgIkFUUTBWMU4xWDRZMCZDMSZEMiZTMSVFMlxcSzUrRkNM QVNTPTBTMzc9MCtNUz1WOTJcMDE1IiwgLyogVk1TICovCi0jZWxzZQotICAgICJBVFEwVjFOMVg0 WTAmQzEmRDIlRTJcXEs1K0ZDTEFTUz0wUzM3PTArTVM9VjkyXDAxNSIsIC8qIEFsbCBvdGhlcnMg Ki8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAwLAkJCQkJLyogd2Fr ZV9yYXRlICovCi0gICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCi0gICAgIiIsCQkJ CQkvKiBkbW9kZV9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLwotICAgICJB VEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCi0gICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLwot ICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCi0gICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLwot ICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCi0gICAgIkFUJkszXDAxNSIsCQkJLyog aHdmY19zdHIgKi8KLSAgICAiQVQmSzRTMzI9MTdTMzM9MTlcMDE1IiwJCS8qIHN3ZmNfc3RyICov Ci0gICAgIkFUJkswXDAxNSIsCQkJLyogbm9mY19zdHIgKi8KLSAgICAiQVQmUTVcMDE1IiwJCQkv KiBlY19vbl9zdHIgKi8KLSAgICAiQVQmUTBcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCi0gICAg IkFUJUMxK0RDUz0xLDFcMDE1IiwJCS8qIGRjX29uX3N0ciAqLwotICAgICJBVCVDMFwwMTUiLAkJ CS8qIGRjX29mZl9zdHIgKi8KLSAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCi0g ICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29u X3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLwotICAgICJBVE0xXDAxNSIsCQkJ CS8qIHNwX29uX3N0ciAqLwotICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KLSAg ICAiQVRMMVwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLwotICAgICJBVEwyXDAxNSIsCQkJCS8qIHZv bDJfc3RyICovCi0gICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KLSAgICAiQVRYM1ww MTUiLAkJCQkvKiBpZ25vcmVkdCAqLwotICAgICIiLAkJCQkJLyogaW5pMiAqLwotICAgIDExNTIw MEwsCQkJCS8qIG1heF9zcGVlZCAqLwotICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xD S0RfSFd8Q0tEX1NXLCAvKiBjYXBhcyAqLwotICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCi19Owot Ci0KLS8qCi0gIE5vdyB0aGUgIm9sZCIgbW9kZW1zLCBhbGwgZ3JvdXBlZCB0b2dldGhlciwgYW5k IGFsc28gd2l0aGluCi0gICJpZiBub3QgZGVmaW5lZCBNSU5JRElBTCIuLi4KLSovCi0jaWZkZWYg T0xETU9ERU1TCi0KLXN0YXRpYwotTURNSU5GIENFUk1FVEVLID0JLyogSW5mb3JtYXRpb24gZm9y ICJDZXJtZXRlayBJbmZvLU1hdGUgMjEyIEEiIG1vZGVtICovCi0gICAgewotICAgICJDZXJtZXRl ayBJbmZvLU1hdGUgMjEyIEEiLAotICAgICIiLAkJCQkJLyogcHVsc2UgY29tbWFuZCAqLwotICAg ICIiLAkJCQkJLyogdG9uZSBjb21tYW5kICovCi0gICAgMjAsCQkJCQkvKiBkaWFsX3RpbWUgKi8K LSAgICAiQmJQcFR0IiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KLSAgICAwLAkJCQkJLyogcGF1c2Vf dGltZSAqLwotICAgICIgIFhZXDAxNlJcMDE1IiwJCQkvKiB3YWtlX3N0ciAqLwotICAgIDIwMCwJ CQkJLyogd2FrZV9yYXRlICovCi0gICAgIiIsCQkJCQkvKiB3YWtlX3Byb21wdCAqLwotICAgICIi LAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgTlVMTCwJCQkJLyogZG1vZGVfcHJvbXB0ICovCi0g ICAgIlwwMTZEICclcydcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLwotICAgIDIwMCwJCQkJLyogZGlh bF9yYXRlICovCi0gICAgMCwJCQkJCS8qIGVzY190aW1lICovCi0gICAgMCwJCQkJCS8qIGVzY19j aGFyICovCi0gICAgIiIsCQkJCQkvKiBodXBfc3RyICovCi0gICAgIiIsCQkJCQkvKiBod2ZjX3N0 ciAqLwotICAgICIiLAkJCQkJLyogc3dmY19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIG5vZmNfc3Ry ICovCi0gICAgIiIsCQkJCQkvKiBlY19vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGVjX29mZl9z dHIgKi8KLSAgICAiIiwJCQkJCS8qIGRjX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogZGNfb2Zm X3N0ciAqLwotICAgICIiLAkJCQkJLyogYWFfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBhYV9v ZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNi X29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNwX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8q IHNwX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogdm9sMV9zdHIgKi8KLSAgICAiIiwJCQkJCS8q IHZvbDJfc3RyICovCi0gICAgIiIsCQkJCQkvKiB2b2wzX3N0ciAqLwotICAgICIiLAkJCQkJLyog aWdub3JlZHQgKi8KLSAgICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICAxMjAwTCwJCQkJLyogbWF4 X3NwZWVkICovCi0gICAgMCwJCQkJCS8qIGNhcGFzICovCi0gICAgTlVMTAkJCQkvKiBva19mbiAq LwotfTsKLQotc3RhdGljCi1NRE1JTkYgREYwMyA9CQkvKiBpbmZvcm1hdGlvbiBmb3IgIkRFQyBE RjAzLUFDIiBtb2RlbSAqLwotICAgIHsKLSAgICAiRGlnaXRhbCBERjAzLUFDIiwKLSAgICAiIiwJ CQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiIiwJCQkJCS8qIHRvbmUgY29tbWFuZCAqLwot ICAgIDI3LAkJCQkJLyogZGlhbF90aW1lICovCi0gICAgIj0iLAkJCQkvKiBwYXVzZV9jaGFycyAq LwotICAgIDE1LAkJCQkJLyogcGF1c2VfdGltZSAqLwotICAgICJcMDAxXDAwMiIsCQkJCS8qIHdh a2Vfc3RyICovCi0gICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLwotICAgICIiLAkJCQkJLyogd2Fr ZV9wcm9tcHQgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLwotICAgIE5VTEwsCQkJCS8q IGRtb2RlX3Byb21wdCAqLwotICAgICIlcyIsCQkJCS8qIGRpYWxfc3RyICovCi0gICAgMCwJCQkJ CS8qIGRpYWxfcmF0ZSAqLwotICAgIDAsCQkJCQkvKiBlc2NfdGltZSAqLwotICAgIDAsCQkJCQkv KiBlc2NfY2hhciAqLwotICAgICIiLAkJCQkJLyogaHVwX3N0ciAqLwotICAgICIiLAkJCQkJLyog aHdmY19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHN3ZmNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBu b2ZjX3N0ciAqLwotICAgICIiLAkJCQkJLyogZWNfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBl Y19vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkY19vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8q IGRjX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGFhX29uX3N0ciAqLwotICAgICIiLAkJCQkJ LyogYWFfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCi0gICAgIiIsCQkJ CQkvKiBzYl9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIiIs CQkJCQkvKiBzcF9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIiIs CQkJCQkvKiB2b2wyX3N0ciAqLwotICAgICIiLAkJCQkJLyogdm9sM19zdHIgKi8KLSAgICAiIiwJ CQkJCS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgMEwsCQkJCQkv KiBtYXhfc3BlZWQgKi8KLSAgICAwLAkJCQkJLyogY2FwYXMgKi8KLSAgICBOVUxMCQkJCS8qIG9r X2ZuICovCi19OwotCi1zdGF0aWMKLU1ETUlORiBERjEwMCA9CQkvKiBpbmZvcm1hdGlvbiBmb3Ig IkRFQyBERjEwMC1zZXJpZXMiIG1vZGVtICovCi0JCQkvKgotCQkJICogVGhlIHRlbGVwaG9uZSAi bnVtYmVyIiBjYW4gaW5jbHVkZSAiUCJzIGFuZC9vciAiVCJzCi0JCQkgKiB3aXRoaW4gaXQgdG8g aW5kaWNhdGUgdGhhdCBzdWJzZXF1ZW50IGRpZ2l0cyBhcmUKLQkJCSAqIHRvIGJlIGRpYWxlZCB1 c2luZyBwdWxzZSBvciB0b25lIGRpYWxpbmcuICBUaGUKLQkJCSAqIG1vZGVtIGRlZmF1bHRzIHRv IHB1bHNlIGRpYWxpbmcuICBZb3UgbWF5IG1vZGlmeQotCQkJICogdGhlIGRpYWwgc3RyaW5nIGJl bG93IHRvIGV4cGxpY2l0bHkgZGVmYXVsdCBhbGwKLQkJCSAqIGRpYWxpbmcgdG8gcHVsc2Ugb3Ig dG9uZSwgYnV0IGRvaW5nIHNvIHByZXZlbnRzCi0JCQkgKiB0aGUgdXNlIG9mIHBob25lIG51bWJl cnMgdGhhdCB5b3UgbWF5IGhhdmUgc3RvcmVkCi0JCQkgKiBpbiB0aGUgbW9kZW0ncyBtZW1vcnku Ci0JCQkgKi8KLSAgICB7Ci0gICAgIkRpZ2l0YWwgREYtMTAwIiwKLSAgICAiIiwJCQkJCS8qIHB1 bHNlIGNvbW1hbmQgKi8KLSAgICAiIiwJCQkJCS8qIHRvbmUgY29tbWFuZCAqLwotICAgIDMwLAkJ CQkJLyogZGlhbF90aW1lICovCi0gICAgIj0iLAkJCQkvKiBwYXVzZV9jaGFycyAqLwotICAgIDE1 LAkJCQkJLyogcGF1c2VfdGltZSAqLwotICAgICJcMDAxIiwJCQkJLyogd2FrZV9zdHIgKi8KLSAg ICAwLAkJCQkJLyogd2FrZV9yYXRlICovCi0gICAgIiIsCQkJCQkvKiB3YWtlX3Byb21wdCAqLwot ICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgTlVMTCwJCQkJLyogZG1vZGVfcHJvbXB0 ICovCi0gICAgIiVzIyIsCQkJCS8qIGRpYWxfc3RyICovCi0gICAgMCwJCQkJCS8qIGRpYWxfcmF0 ZSAqLwotICAgIDAsCQkJCQkvKiBlc2NfdGltZSAqLwotICAgIDAsCQkJCQkvKiBlc2NfY2hhciAq LwotICAgICIiLAkJCQkJLyogaHVwX3N0ciAqLwotICAgICIiLAkJCQkJLyogaHdmY19zdHIgKi8K LSAgICAiIiwJCQkJCS8qIHN3ZmNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBub2ZjX3N0ciAqLwot ICAgICIiLAkJCQkJLyogZWNfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBlY19vZmZfc3RyICov Ci0gICAgIiIsCQkJCQkvKiBkY19vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRjX29mZl9zdHIg Ki8KLSAgICAiIiwJCQkJCS8qIGFhX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogYWFfb2ZmX3N0 ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vZmZf c3RyICovCi0gICAgIiIsCQkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzcF9v bl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIiIsCQkJCQkvKiB2b2wy X3N0ciAqLwotICAgICIiLAkJCQkJLyogdm9sM19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGlnbm9y ZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgMEwsCQkJCQkvKiBtYXhfc3BlZWQg Ki8KLSAgICAwLAkJCQkJLyogY2FwYXMgKi8KLSAgICBOVUxMCQkJCS8qIG9rX2ZuICovCi19Owot Ci1zdGF0aWMKLU1ETUlORiBERjIwMCA9CQkvKiBpbmZvcm1hdGlvbiBmb3IgIkRFQyBERjIwMC1z ZXJpZXMiIG1vZGVtICovCi0JCQkvKgotCQkJICogVGhlIHRlbGVwaG9uZSAibnVtYmVyIiBjYW4g aW5jbHVkZSAiUCJzIGFuZC9vciAiVCJzCi0JCQkgKiB3aXRoaW4gaXQgdG8gaW5kaWNhdGUgdGhh dCBzdWJzZXF1ZW50IGRpZ2l0cyBhcmUKLQkJCSAqIHRvIGJlIGRpYWxlZCB1c2luZyBwdWxzZSBv ciB0b25lIGRpYWxpbmcuICBUaGUKLQkJCSAqIG1vZGVtIGRlZmF1bHRzIHRvIHB1bHNlIGRpYWxp bmcuICBZb3UgbWF5IG1vZGlmeQotCQkJICogdGhlIGRpYWwgc3RyaW5nIGJlbG93IHRvIGV4cGxp Y2l0bHkgZGVmYXVsdCBhbGwKLQkJCSAqIGRpYWxpbmcgdG8gcHVsc2Ugb3IgdG9uZSwgYnV0IGRv aW5nIHNvIHByZXZlbnRzCi0JCQkgKiB0aGUgdXNlIG9mIHBob25lIG51bWJlcnMgdGhhdCB5b3Ug bWF5IGhhdmUgc3RvcmVkCi0JCQkgKiBpbiB0aGUgbW9kZW0ncyBtZW1vcnkuCi0JCQkgKi8KLSAg ICB7Ci0gICAgIkRpZ2l0YWwgREYtMjAwIiwKLSAgICAiIiwJCQkvKiBwdWxzZSBjb21tYW5kICov Ci0gICAgIiIsCQkJLyogdG9uZSBjb21tYW5kICovCi0gICAgMzAsCQkJLyogZGlhbF90aW1lICov Ci0gICAgIj1XIiwJCS8qIHBhdXNlX2NoYXJzICovCS8qID06IHNlY29uZCB0b25lOyBXOiA1IHNl Y3MgKi8KLSAgICAxNSwJCQkvKiBwYXVzZV90aW1lICovCS8qIHdvcnN0IGNhc2UgKi8KLSAgICAi XDAwMiIsCQkvKiB3YWtlX3N0ciAqLwkJLyogYWxsb3cgc3RvcmVkIG51bWJlciB1c2FnZSAqLwot ICAgIDAsCQkJLyogd2FrZV9yYXRlICovCi0gICAgIiIsCQkJLyogd2FrZV9wcm9tcHQgKi8KLSAg ICAiIiwJCQkvKiBkbW9kZV9zdHIgKi8KLSAgICBOVUxMLAkJLyogZG1vZGVfcHJvbXB0ICovCi0j aWZkZWYgQ09NTUVOVAotICAgICIlcyEiLAkJLyogZGlhbF9zdHIgKi8KLSNlbHNlCi0gICAgIiAg IGQgJXNcMDE1IiwKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgMCwJCQkJCS8qIGRpYWxfcmF0 ZSAqLwotICAgIDAsCQkJCQkvKiBlc2NfdGltZSAqLwotICAgIDAsCQkJCQkvKiBlc2NfY2hhciAq LwotICAgICIiLAkJCQkJLyogaHVwX3N0ciAqLwotICAgICIiLAkJCQkJLyogaHdmY19zdHIgKi8K LSAgICAiIiwJCQkJCS8qIHN3ZmNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBub2ZjX3N0ciAqLwot ICAgICIiLAkJCQkJLyogZWNfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBlY19vZmZfc3RyICov Ci0gICAgIiIsCQkJCQkvKiBkY19vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRjX29mZl9zdHIg Ki8KLSAgICAiIiwJCQkJCS8qIGFhX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogYWFfb2ZmX3N0 ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vZmZf c3RyICovCi0gICAgIiIsCQkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzcF9v bl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIiIsCQkJCQkvKiB2b2wy X3N0ciAqLwotICAgICIiLAkJCQkJLyogdm9sM19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGlnbm9y ZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgMEwsCQkJCQkvKiBtYXhfc3BlZWQg Ki8KLSAgICAwLAkJCQkJLyogY2FwYXMgKi8KLSAgICBOVUxMCQkJCS8qIG9rX2ZuICovCi19Owot Ci1zdGF0aWMKLU1ETUlORiBHREMgPQkJLyogaW5mb3JtYXRpb24gZm9yICJHZW5lcmFsRGF0YUNv bW0gMjEyQS9FRCIgbW9kZW0gKi8KLSAgICB7Ci0gICAgIkdlbmVyYWxEYXRhQ29tbSAyMTJBL0VE IiwKLSAgICAiIiwJCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiIiwJCQkJCS8qIHRvbmUg Y29tbWFuZCAqLwotICAgIDMyLAkJCQkJLyogZGlhbF90aW1lICovCi0gICAgIiUiLAkJCQkvKiBw YXVzZV9jaGFycyAqLwotICAgIDMsCQkJCQkvKiBwYXVzZV90aW1lICovCi0gICAgIlwwMTVcMDE1 IiwJCQkJLyogd2FrZV9zdHIgKi8KLSAgICA1MDAsCQkJCS8qIHdha2VfcmF0ZSAqLwotICAgICIk IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAiRFwwMTUiLAkJCQkvKiBkbW9kZV9zdHIgKi8K LSAgICAiOiIsCQkJCS8qIGRtb2RlX3Byb21wdCAqLwotICAgICJUJXNcMDE1IiwJCQkJLyogZGlh bF9zdHIgKi8KLSAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCi0gICAgMCwJCQkJCS8qIGVzY190 aW1lICovCi0gICAgMCwJCQkJCS8qIGVzY19jaGFyICovCi0gICAgIiIsCQkJCQkvKiBodXBfc3Ry ICovCi0gICAgIiIsCQkJCQkvKiBod2ZjX3N0ciAqLwotICAgICIiLAkJCQkJLyogc3dmY19zdHIg Ki8KLSAgICAiIiwJCQkJCS8qIG5vZmNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBlY19vbl9zdHIg Ki8KLSAgICAiIiwJCQkJCS8qIGVjX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRjX29uX3N0 ciAqLwotICAgICIiLAkJCQkJLyogZGNfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogYWFfb25f c3RyICovCi0gICAgIiIsCQkJCQkvKiBhYV9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9v bl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNw X29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNwX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyog dm9sMV9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHZvbDJfc3RyICovCi0gICAgIiIsCQkJCQkvKiB2 b2wzX3N0ciAqLwotICAgICIiLAkJCQkJLyogaWdub3JlZHQgKi8KLSAgICAiIiwJCQkJCS8qIGlu aTIgKi8KLSAgICAxMjAwTCwJCQkJLyogbWF4X3NwZWVkICovCi0gICAgMCwJCQkJCS8qIGNhcGFz ICovCi0gICAgTlVMTAkJCQkvKiBva19mbiAqLwotfTsKLQotc3RhdGljCi1NRE1JTkYgUEVOUklM ID0JCS8qIGluZm9ybWF0aW9uIGZvciAiUGVucmlsIiBtb2RlbSAqLwotICAgIHsKLSAgICAiUGVu cmlsIG1vZGVtIiwKLSAgICAiIiwJCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiIiwJCQkJ CS8qIHRvbmUgY29tbWFuZCAqLwotICAgIDUwLAkJCQkJLyogZGlhbF90aW1lICovCi0gICAgIiIs CQkJCQkvKiBwYXVzZV9jaGFycyAqLwotICAgIDAsCQkJCQkvKiBwYXVzZV90aW1lICovCi0gICAg IlwwMTVcMDE1IiwJCQkJLyogd2FrZV9zdHIgKi8KLSAgICAzMDAsCQkJCS8qIHdha2VfcmF0ZSAq LwotICAgICI+IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAia1wwMTUiLAkJCQkvKiBkbW9k ZV9zdHIgKi8KLSAgICAiOiIsCQkJCS8qIGRtb2RlX3Byb21wdCAqLwotICAgICIlc1wwMTUiLAkJ CQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KLSAgICAwLAkJCQkJ LyogZXNjX3RpbWUgKi8KLSAgICAwLAkJCQkJLyogZXNjX2NoYXIgKi8KLSAgICAiIiwJCQkJCS8q IGh1cF9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGh3ZmNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBz d2ZjX3N0ciAqLwotICAgICIiLAkJCQkJLyogbm9mY19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGVj X29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogZWNfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyog ZGNfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBkY19vZmZfc3RyICovCi0gICAgIiIsCQkJCQkv KiBhYV9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGFhX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJ CS8qIHNiX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLwotICAgICIiLAkJ CQkJLyogc3Bfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc3Bfb25fc3RyICovCi0gICAgIiIs CQkJCQkvKiB2b2wxX3N0ciAqLwotICAgICIiLAkJCQkJLyogdm9sMl9zdHIgKi8KLSAgICAiIiwJ CQkJCS8qIHZvbDNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBpZ25vcmVkdCAqLwotICAgICIiLAkJ CQkJLyogaW5pMiAqLwotICAgIDBMLAkJCQkJLyogbWF4X3NwZWVkICovCi0gICAgMCwJCQkJCS8q IGNhcGFzICovCi0gICAgTlVMTAkJCQkvKiBva19mbiAqLwotfTsKLQotc3RhdGljCi1NRE1JTkYg UkFDQUwgPQkJCQkvKiBSYWNhbCBWYWRpYyBWQTQ0OTJFICovCi0gICAgewotICAgICJSYWNhbCBW YWRpYyBWQTQ0OTJFIiwKLSAgICAiIiwJCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiIiwJ CQkJCS8qIHRvbmUgY29tbWFuZCAqLwotICAgIDM1LAkJCS8qIGRpYWxfdGltZSAobWFudWFsIHNh eXMgbW9kZW0gaXMgaGFyZHdpcmVkIHRvIDYwKSAqLwotICAgICJLayIsCQkJCS8qIHBhdXNlX2No YXJzICovCi0gICAgNSwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KLSAgICAiXDAwNVwwMTUiLAkJCQkv KiB3YWtlX3N0ciwgXkVeTSAqLwotICAgIDUwLAkJCQkJLyogd2FrZV9yYXRlICovCi0gICAgIioi LAkJCQkvKiB3YWtlX3Byb21wdCAqLwotICAgICJEXDAxNSIsCQkJCS8qIGRtb2RlX3N0ciAqLwot ICAgICI/IiwJCQkJLyogZG1vZGVfcHJvbXB0ICovCi0gICAgIiVzXDAxNSIsCQkJCS8qIGRpYWxf c3RyICovCi0gICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLwotICAgIDExMDAsCQkJCS8qIGVzY190 aW1lICovCi0gICAgNSwJCQkJCS8qIGVzY19jaGFyLCBeRSAqLwotICAgICJcMDAzXDAwNCIsCQkJ CS8qIGh1cF9zdHIsIF5DXkQgKi8KLSAgICAwLAkJCQkJLyogaHdmY19zdHIgKi8KLSAgICAiIiwJ CQkJCS8qIHN3ZmNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBub2ZjX3N0ciAqLwotICAgICIiLAkJ CQkJLyogZWNfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBlY19vZmZfc3RyICovCi0gICAgIiIs CQkJCQkvKiBkY19vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRjX29mZl9zdHIgKi8KLSAgICAi IiwJCQkJCS8qIGFhX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogYWFfb2ZmX3N0ciAqLwotICAg ICIiLAkJCQkJLyogc2Jfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCi0g ICAgIiIsCQkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzcF9vbl9zdHIgKi8K LSAgICAiIiwJCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIiIsCQkJCQkvKiB2b2wyX3N0ciAqLwot ICAgICIiLAkJCQkJLyogdm9sM19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGlnbm9yZWR0ICovCi0g ICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgMEwsCQkJCQkvKiBtYXhfc3BlZWQgKi8KLSAgICAw LAkJCQkJLyogY2FwYXMgKi8KLSAgICBOVUxMCQkJCS8qIG9rX2ZuICovCi19OwotCi1zdGF0aWMK LU1ETUlORiBWRU5URUwgPQkJCQkvKiBJbmZvcm1hdGlvbiBmb3IgVmVuLVRlbCBtb2RlbSAqLwot ICAgIHsKLSAgICAiVmVuLVRlbCIsCi0gICAgIiIsCQkJCQkvKiBwdWxzZSBjb21tYW5kICovCi0g ICAgIiIsCQkJCQkvKiB0b25lIGNvbW1hbmQgKi8KLSAgICAyMCwJCQkJCS8qIGRpYWxfdGltZSAq LwotICAgICIlIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KLSAgICA1LAkJCQkJLyogcGF1c2VfdGlt ZSAqLwotICAgICJcMDE1XDAxNVwwMTUiLAkJCS8qIHdha2Vfc3RyICovCi0gICAgMzAwLAkJCQkv KiB3YWtlX3JhdGUgKi8KLSAgICAiJCIsCQkJCS8qIHdha2VfcHJvbXB0ICovCi0gICAgIktcMDE1 IiwJCQkJLyogZG1vZGVfc3RyICh3YXMgIiIpICovCi0gICAgIk51bWJlciB0byBjYWxsOiAiLAkJ CS8qIGRtb2RlX3Byb21wdCAod2FzIE5VTEwpICovCi0gICAgIiVzXDAxNSIsCQkJCS8qIGRpYWxf c3RyICh3YXMgIjxLJXNccj4iKSAqLwotICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KLSAgICAw LAkJCQkJLyogZXNjX3RpbWUgKi8KLSAgICAwLAkJCQkJLyogZXNjX2NoYXIgKi8KLSAgICAiIiwJ CQkJCS8qIGh1cF9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGh3ZmNfc3RyICovCi0gICAgIiIsCQkJ CQkvKiBzd2ZjX3N0ciAqLwotICAgICIiLAkJCQkJLyogbm9mY19zdHIgKi8KLSAgICAiIiwJCQkJ CS8qIGVjX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogZWNfb2ZmX3N0ciAqLwotICAgICIiLAkJ CQkJLyogZGNfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBkY19vZmZfc3RyICovCi0gICAgIiIs CQkJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGFhX29mZl9zdHIgKi8KLSAgICAi IiwJCQkJCS8qIHNiX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLwotICAg ICIiLAkJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc3Bfb25fc3RyICovCi0g ICAgIiIsCQkJCQkvKiB2b2wxX3N0ciAqLwotICAgICIiLAkJCQkJLyogdm9sMl9zdHIgKi8KLSAg ICAiIiwJCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBpZ25vcmVkdCAqLwotICAg ICIiLAkJCQkJLyogaW5pMiAqLwotICAgIDBMLAkJCQkJLyogbWF4X3NwZWVkICovCi0gICAgMCwJ CQkJCS8qIGNhcGFzICovCi0gICAgTlVMTAkJCQkvKiBva19mbiAqLwotfTsKLQotc3RhdGljCi1N RE1JTkYgQ09OQ09SRCA9CS8qIEluZm8gZm9yIENvbmRvciBDRFMgMjIwIDI0MDBiIG1vZGVtICov Ci0gICAgewotICAgICJDb25jb3JkIENvbmRvciBDRFMgMjIwIDI0MDBiIiwKLSAgICAiIiwJCQkJ CS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiIiwJCQkJCS8qIHRvbmUgY29tbWFuZCAqLwotICAg IDM1LAkJCQkJLyogZGlhbF90aW1lICovCi0gICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLwot ICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCi0gICAgIlwwMTVcMDE1IiwJCQkJLyogd2FrZV9z dHIgKi8KLSAgICAyMCwJCQkJCS8qIHdha2VfcmF0ZSAqLwotICAgICJDRFMgPiIsCQkJCS8qIHdh a2VfcHJvbXB0ICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KLSAgICBOVUxMLAkJCQkv KiBkbW9kZV9wcm9tcHQgKi8KLSAgICAiPEQgTSVzXDAxNT4iLAkJCS8qIGRpYWxfc3RyICovCi0g ICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLwotICAgIDAsCQkJCQkvKiBlc2NfdGltZSAqLwotICAg IDAsCQkJCQkvKiBlc2NfY2hhciAqLwotICAgICIiLAkJCQkJLyogaHVwX3N0ciAqLwotICAgICIi LAkJCQkJLyogaHdmY19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHN3ZmNfc3RyICovCi0gICAgIiIs CQkJCQkvKiBub2ZjX3N0ciAqLwotICAgICIiLAkJCQkJLyogZWNfb25fc3RyICovCi0gICAgIiIs CQkJCQkvKiBlY19vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkY19vbl9zdHIgKi8KLSAgICAi IiwJCQkJCS8qIGRjX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGFhX29uX3N0ciAqLwotICAg ICIiLAkJCQkJLyogYWFfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCi0g ICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzcF9vZmZfc3RyICov Ci0gICAgIiIsCQkJCQkvKiBzcF9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHZvbDFfc3RyICov Ci0gICAgIiIsCQkJCQkvKiB2b2wyX3N0ciAqLwotICAgICIiLAkJCQkJLyogdm9sM19zdHIgKi8K LSAgICAiIiwJCQkJCS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAg MjQwMEwsCQkJCS8qIG1heF9zcGVlZCAqLwotICAgIDAsCQkJCQkvKiBjYXBhcyAqLwotICAgIE5V TEwJCQkJLyogb2tfZm4gKi8KLX07Ci0jZW5kaWYgLyogT0xETU9ERU1TICovCi0KLXN0YXRpYwot TURNSU5GIE1JQ1JPQ09NID0JLyogTWljcm9jb20gbW9kZW1zIGluIG5hdGl2ZSBTWCBtb2RlICov Ci0JCQkvKiAobG9uZyBhbnN3ZXIgb25seSkgKi8KLXsKLSAgICAiTWljcm9jb20gTU5QIG1vZGVt cyBpbiBTWCBjb21tYW5kIG1vZGUiLAotICAgICJEUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5k ICovCi0gICAgIkRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLwotICAgIDM1LAkJCQkJLyog ZGlhbF90aW1lICovCi0gICAgIiwhQCIsCQkvKiBwYXVzZV9jaGFycyAoISBhbmQgQCBhcmVuJ3Qg cHVyZSBwYXVzZXMpICovCi0gICAgMywJCQkJCS8qIHBhdXNlX3RpbWUgKi8KLS8qCi0gIFRoZSBm b2xsb3dpbmcgc2V0cyA4IGJpdHMsIG5vIHBhcml0eSwgQlJFQUsgcGFzc3RocnUsIGFuZCBTRTAg ZGlzYWJsZXMgdGhlCi0gIGVzY2FwZSBjaGFyYWN0ZXIsIHdoaWNoIGlzIGEgc2luZ2xlIGNoYXJh Y3RlciB3aXRoIG5vIGd1YXJkIHRpbWUsIHRvdGFsbHkKLSAgdW5zYWZlLCBzbyB3ZSBoYXZlIG5v IGNob2ljZSBidXQgdG8gZGlzYWJsZSBpdC4gIEVzcGVjaWFsbHkgc2luY2UsIGJ5Ci0gIGRlZmF1 bHQsIGl0IGlzIEN0cmwtQSwgd2hpY2ggaXMgS2VybWl0J3MgcGFja2V0LXN0YXJ0IGNoYXJhY3Rl ci4gIFdlIHdvdWxkCi0gIGNoYW5nZSBpdCB0byBzb21ldGhpbmcgZWxzZSwgd2hpY2ggd291bGQg ZW5hYmxlICJtZG1odXAoKSIsIGJ1dCB0aGUgdXNlcgotICB3b3VsZG4ndCBrbm93IGFib3V0IGl0 LiAgVmVyeSBiYWQuICBOb3RlOiBTRTEgc2V0cyBpdCB0byBDdHJsLUEsIFNFMgotICBzZXRzIGl0 IHRvIEN0cmwtQiwgZXRjICgxLi4zMSBhbGxvd2VkKS4gIEFsc28gU0UvUSBzZXRzIGl0IHRvICJR Ii4KLSovCi0gICAgIlNFMDtTMVA0O1NCUks1XDAxNSIsCQkvKiB3YWtlX3N0ciAqLwotICAgIDEw MCwJCQkJLyogd2FrZV9yYXRlICovCi0gICAgIiEiLAkJCQkvKiB3YWtlX3Byb21wdCAqLwotICAg ICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgTlVMTCwJCQkJLyogZG1vZGVfcHJvbXB0ICov Ci0gICAgIkQlc1wwMTUiLAkJCQkvKiBkaWFsX3N0ciAtIG51bWJlciB1cCB0byAzOSBjaGFycyAq LwotICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KLSAgICAwLAkJCQkJLyogZXNjX3RpbWUgKi8K LSAgICAwLAkJCQkJLyogZXNjX2NoYXIgLSB3ZSBjYW4ndCB1c2UgdGhpcyAqLwotICAgICIiLAkJ CQkJLyogaHVwX3N0ciAtIGl0J3MgIkgiIGJ1dCBjYW4ndCB1c2UgKi8KLSAgICAiU0YxM1wwMTUi LAkJCQkvKiBod2ZjX3N0ciAqLwotICAgICJTRjExXDAxNSIsCQkJCS8qIHN3ZmNfc3RyICovCi0g ICAgIlNGMTBcMDE1IiwJCQkJLyogbm9mY19zdHIgKi8KLSAgICAiQkFPRkY7U01BVVRcMDE1IiwJ CQkvKiBlY19vbl9zdHIgKi8KLSAgICAiQkFPTjtTTURJUlwwMTUiLAkJCS8qIGVjX29mZl9zdHIg Ki8KLSAgICAiQ09NUDFcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KLSAgICAiQ09NUDBcMDE1IiwJ CQkvKiBkY19vZmZfc3RyICovCi0gICAgIkFBIiwJCQkJLyogYWFfb25fc3RyICovCi0gICAgIiIs CQkJCQkvKiBhYV9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KLSAgICAi IiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KLSAgICAiU0EyIiwJCQkJLyogc3Bfb2ZmX3N0ciAqLwot ICAgICJTQTAiLAkJCQkvKiBzcF9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHZvbDFfc3RyICov Ci0gICAgIiIsCQkJCQkvKiB2b2wyX3N0ciAqLwotICAgICIiLAkJCQkJLyogdm9sM19zdHIgKi8K LSAgICAiIiwJCQkJCS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAg MEwsCQkJCQkvKiBtYXhfc3BlZWQgKi8KLSAgICBDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8 Q0tEX1NXfENLRF9LUywgLyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsK LQotc3RhdGljCi1NRE1JTkYgTUlDUk9MSU5LID0JCQkvKiBNaWNyb0xpbmsgLi4uICovCi0gICAg ewkJCQkJLyogMTQuNFRRLFRMLFBDOzI4LjhUUSxUUVY7MjQ0MFQvVFIgKi8KLSAgICAiRUxTQSBN aWNyb0xpbmsgMTQuNCwgMjguOCwgMzMuNiBvciA1NksiLCAvKiBFTFNBIEdtYkgsIEFhY2hlbiAq LwotICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLwotICAgICJBVFRcMDE1IiwJ CQkJLyogdG9uZSBjb21tYW5kICovCi0gICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KLSAgICAi LCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCi0gICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KLSNp ZmRlZiBPUzIKLSAgICAiQVRRMEUxVjFYNCZTMFxcRDAmQzEmRDJcXEs1XDAxNSIsCS8qIHdha2Vf c3RyICovCi0jZWxzZQotI2lmZGVmIFZNUwotICAgICJBVFEwWDQmUzFcXEs1XDAxNSIsCQkvKiB3 YWtlX3N0ciAqLwotI2Vsc2UKLSAgICAiQVRRMFg0XFxLNVwwMTUiLAkJCS8qIHdha2Vfc3RyICov Ci0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgMCwJCQkJCS8qIHdha2Vf cmF0ZSAqLwotICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLwotICAgICIiLAkJCQkJ LyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KLSAgICAiQVRE JXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KLSAg ICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLwotICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KLSAg ICAiQVRRMEhcMDE1IiwJCQkvKiBodXBfc3RyICovCi0gICAgIkFUXFxRM1wwMTUiLAkJCS8qIGh3 ZmNfc3RyICovCi0gICAgIkFUXFxRMVxcWDBcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLwotICAgICJB VFxcUTBcMDE1IiwJCQkvKiBub2ZjX3N0ciAqLwotICAgICJBVFxcTjNcMDE1IiwJCQkvKiBlY19v bl9zdHIgKi8KLSAgICAiQVRcXE4wXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLwotICAgICJBVCVD M1wwMTUiLAkJCS8qIGRjX29uX3N0ciAqLwotICAgICJBVCVDMFwwMTUiLAkJCS8qIGRjX29mZl9z dHIgKi8KLSAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCi0gICAgIkFUUzA9MFww MTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KLSAgICAiXFxKMCIsCQkJCS8qIHNiX29uX3N0ciAoPykg Ki8KLSAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KLSAgICAiQVRNMVwwMTUiLAkJCQkvKiBz cF9vbl9zdHIgKi8KLSAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIkFU TDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KLSAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0 ciAqLwotICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIkFUWDNcMDE1IiwJ CQkJLyogaWdub3JlZHQgKi8KLSAgICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICA1NzYwMEwsCQkJ CS8qIG1heF9zcGVlZCAqLwotICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8 Q0tEX1NXLCAvKiBjYXBhcyAqLwotICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCi19OwotCi1zdGF0 aWMKLU1ETUlORiBVTElOS1YyNTAgPQkJCS8qIE1pY3JvTGluayBWLjI1MCAqLwotICAgIHsJCQkJ CS8qIDU2S2ZsZXgsIFYuOTA7IFYuMjUwIGNvbW1hbmQgc2V0ICovCi0gICAgIkVMU0EgTWljcm9M aW5rIDU2SyBWLjI1MCIsCQkvKiBFTFNBIEdtYkgsIEFhY2hlbiAqLwotICAgICJBVFBcMDE1IiwJ CQkJLyogcHVsc2UgY29tbWFuZCAqLwotICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5k ICovCi0gICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KLSAgICAiLCIsCQkJCS8qIHBhdXNlX2No YXJzICovCi0gICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KLSNpZmRlZiBPUzIKLSAgICAvKiBc RDAgPSBEU1IgJiBDVFMgYWx3YXlzIG9uIGJ1dCBod2ZjIG92ZXJyaWRlcyBvbiBDVFMuICovCi0g ICAgIkFUUTBFMVYxWDQmUzBcXEQwJkMxJkQyXDAxNSIsCS8qIHdha2Vfc3RyICovCi0jZWxzZQot I2lmZGVmIFZNUwotICAgICJBVFEwWDQmUzFcMDE1IiwJCQkvKiB3YWtlX3N0ciAqLwotI2Vsc2UK LSAgICAiQVRRMFg0XDAxNSIsCQkJLyogd2FrZV9zdHIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNl bmRpZiAvKiBPUzIgKi8KLSAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCi0gICAgIk9LXDAxNSIs CQkJCS8qIHdha2VfcHJvbXB0ICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KLSAgICAi IiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLwotICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3Ry ICovCi0gICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLwotICAgIDExMDAsCQkJCS8qIGVzY190aW1l ICovCi0gICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLwotICAgICJBVFEwSDBcMDE1IiwJCQkvKiBo dXBfc3RyICovCi0gICAgIkFUK0lGQz0yLDJcMDE1IiwJCQkvKiBod2ZjX3N0ciAqLwotICAgICJB VCtJRkM9MSwxXDAxNSIsCQkJLyogc3dmY19zdHIgKi8KLSAgICAiQVQrSUZDPTAsMFwwMTUiLAkJ CS8qIG5vZmNfc3RyICovCi0gICAgIkFUK0VTPTMsMFwwMTUiLAkJCS8qIGVjX29uX3N0ciAqLwot ICAgICJBVCtFUz0xLDBcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCi0gICAgIkFUK0RTPTMsMCwy MDQ4LDMyXDAxNSIsCQkvKiBkY19vbl9zdHIgKi8KLSAgICAiQVQrRFM9MCwwXDAxNSIsCQkJLyog ZGNfb2ZmX3N0ciAqLwotCi0gICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLwotICAg ICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vbl9z dHIgKD8pICovCi0gICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCi0gICAgIkFUTTFcMDE1IiwJ CQkJLyogc3Bfb25fc3RyICovCi0gICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLwot ICAgICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIkFUTDJcMDE1IiwJCQkJLyog dm9sMl9zdHIgKi8KLSAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLwotICAgICJBVFgz XDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgNTc2 MDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8 Q0tEX0hXfENLRF9TVywgLyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsK LSNlbmRpZiAvKiBNSU5JRElBTCAqLwotCi1zdGF0aWMKLU1ETUlORiBJVFVUVjI1MCA9CQkJLyog SVRVLVQgVi4yNTAgY29uZm9ybWluZyBtb2RlbSAqLwotewotICAgICJBbnkgSVRVLVQgVi4yNXRl ci9WLjI1MCBjb25mb3JtYW50IG1vZGVtIiwKLSAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNv bW1hbmQgKi8KLSAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLwotICAgIDM1LAkJ CQkJLyogZGlhbF90aW1lICovCi0gICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLwotICAgIDIs CQkJCQkvKiBwYXVzZV90aW1lICovCi0gICAgIkFUUTBFMVYxWDQmQzEmRDJcMDE1IiwJCS8qIHdh a2Vfc3RyIChubyAmU24gaW4gVi4yNSkgKi8KLSAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCi0g ICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9z dHIgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLwotICAgICJBVEQlc1wwMTUiLAkJ CS8qIGRpYWxfc3RyICovCi0gICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLwotICAgIDExMDAsCQkJ CS8qIGVzY190aW1lICovCi0gICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLwotICAgICJBVFEwSDBc MDE1IiwJCQkvKiBodXBfc3RyICovCi0gICAgIkFUK0lGQz0yLDJcMDE1IiwJCQkvKiBod2ZjX3N0 ciAqLwotICAgICJBVCtJRkM9MSwxXDAxNSIsCQkJLyogc3dmY19zdHIgKi8KLSAgICAiQVQrSUZD PTAsMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCi0gICAgIkFUK0VTPTMsMCwyOytFQj0xLDAsMzBc MDE1IiwJLyogZWNfb25fc3RyICovCi0gICAgIkFUK0VTPTBcMDE1IiwJCQkvKiBlY19vZmZfc3Ry ICovCi0gICAgIkFUK0RTPTMsMFwwMTUiLAkJCS8qIGRjX29uX3N0ciAqLwotICAgICJBVCtEUz0w LDBcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCi0gICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29u X3N0ciAqLwotICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCi0gICAgIiIsCQkJ CQkvKiBzYl9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KLSAgICAiQVRN MVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KLSAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZf c3RyICovCi0gICAgIkFUTDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KLSAgICAiQVRMMlwwMTUi LAkJCQkvKiB2b2wyX3N0ciAqLwotICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCi0g ICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8KLSAgICAiIiwJCQkJCS8qIGluaTIgKi8K LSAgICA1NzYwMEwsCQkJCS8qIG1heF9zcGVlZCAqLwotICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VD fENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBjYXBhcyAqLwotICAgIGdldG9rCQkJCS8qIG9rX2Zu ICovCi19OwotCi0jaWZuZGVmIENLX1RBUEkKLXN0YXRpYwotI2VuZGlmIC8qIENLX1RBUEkgKi8K LU1ETUlORiBHRU5FUklDID0JCQkvKiBHZW5lcmljIGhpZ2ggc3BlZWQgLi4uICovCi0gICAgewot ICAgICJHZW5lcmljIGhpZ2gtc3BlZWQgQVQgY29tbWFuZCBzZXQiLAotICAgICJBVFBcMDE1IiwJ CQkJLyogcHVsc2UgY29tbWFuZCAqLwotICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5k ICovCi0gICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KLSAgICAiLCIsCQkJCS8qIHBhdXNlX2No YXJzICovCi0gICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KLSAgICAiIiwJCQkJCS8qIHdha2Vf c3RyICovCi0gICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLwotICAgICIiLAkJCQkJLyogd2FrZV9w cm9tcHQgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLwotICAgICIiLAkJCQkJLyogZG1v ZGVfcHJvbXB0ICovCi0gICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KLSAgICAwLAkJ CQkJLyogZGlhbF9yYXRlICovCi0gICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KLSAgICA0MywJ CQkJCS8qIGVzY19jaGFyICovCi0gICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KLSAg ICAiIiwJCQkJCS8qIGh3ZmNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzd2ZjX3N0ciAqLwotICAg ICIiLAkJCQkJLyogbm9mY19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGVjX29uX3N0ciAqLwotICAg ICIiLAkJCQkJLyogZWNfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogZGNfb25fc3RyICovCi0g ICAgIiIsCQkJCQkvKiBkY19vZmZfc3RyICovCi0gICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29u X3N0ciAqLwotICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCi0gICAgIiIsCQkJ CQkvKiBzYl9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KLSAgICAiIiwJ CQkJCS8qIHNwX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAgICIi LAkJCQkJLyogdm9sMV9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHZvbDJfc3RyICovCi0gICAgIiIs CQkJCQkvKiB2b2wzX3N0ciAqLwotICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCi0g ICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgMTE1MjAwLAkJCQkvKiBtYXhfc3BlZWQgKi8KLSAg ICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXLCAvKiBjYXBhcyAqLwotICAgIGdl dG9rCQkJCS8qIG9rX2ZuICovCi19OwotCi0jaWZuZGVmIE1JTklESUFMCi1zdGF0aWMKLU1ETUlO RiBYSkFDSyA9CQkJCS8qIE1lZ2FoZXJ0eiBYLUphY2sgKi8KLSAgICB7Ci0gICAgIk1lZ2FoZXJ0 eiBYLUphY2sgWEozMTQ0IC8gQ0M2MTQ0IiwKLSAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNv bW1hbmQgKi8KLSAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLwotICAgIDM1LAkJ CQkJLyogZGlhbF90aW1lICovCi0gICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLwotICAgIDIs CQkJCQkvKiBwYXVzZV90aW1lICovCi0jaWZkZWYgT1MyCi0gICAgIkFUUTBFMVYxWDROMSZDMSZE MlxcSzVcMDE1IiwJLyogd2FrZV9zdHIgKi8KLSNlbHNlCi0gICAgIkFUUTBYNE4xXFxLNVwwMTUi LAkJCS8qIHdha2Vfc3RyICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgMCwJCQkJCS8qIHdha2Vf cmF0ZSAqLwotICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLwotICAgICIiLAkJCQkJ LyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KLSAgICAiQVRE JXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KLSAg ICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLwotICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KLSAg ICAiQVRRMEhcMDE1IiwJCQkvKiBodXBfc3RyICovCi0gICAgIkFUJkszXDAxNSIsCQkJLyogaHdm Y19zdHIgKi8KLSAgICAiQVQmSzRcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLwotICAgICJBVCZLMFww MTUiLAkJCS8qIG5vZmNfc3RyICovCi0gICAgIkFUXFxOMyZRNVwwMTUiLAkJCS8qIGVjX29uX3N0 ciAqLwotICAgICJBVFxcTjEmUTBcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCi0gICAgIkFUJUMz XDAxNSIsCQkJLyogZGNfb25fc3RyICovCi0gICAgIkFUJUMwXDAxNSIsCQkJLyogZGNfb2ZmX3N0 ciAqLwotICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiQVRTMD0wXDAx NSIsCQkJLyogYWFfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCi0gICAg IiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCi0gICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3Ry ICovCi0gICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAgICJBVEwxXDAxNSIs CQkJCS8qIHZvbDFfc3RyICovCi0gICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KLSAg ICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLwotICAgICJBVFgzXDAxNSIsCQkJCS8qIGln bm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgNTc2MDBMLAkJCQkvKiBtYXhf c3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywg LyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsKLQotc3RhdGljCi1NRE1J TkYgU1BJUklUSUkgPQkJCS8qIFF1aWNrQ29tbSBTcGlyaXQgSUkgKi8KLSAgICB7Ci0gICAgIlF1 aWNrQ29tbSBTcGlyaXQgSUkiLAotICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAq LwotICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCi0gICAgMzUsCQkJCQkvKiBk aWFsX3RpbWUgKi8KLSAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCi0gICAgMiwJCQkJCS8q IHBhdXNlX3RpbWUgKi8KLSAgICAiQVQmRlwwMTUiLAkJCQkvKiB3YWtlX3N0ciAqLwotICAgIDAs CQkJCQkvKiB3YWtlX3JhdGUgKi8KLSAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8K LSAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0 ICovCi0gICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KLSAgICAwLAkJCQkJLyogZGlh bF9yYXRlICovCi0gICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KLSAgICA0MywJCQkJCS8qIGVz Y19jaGFyICovCi0gICAgIkFUUTBIXDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAgICJBVCpGM1ww MTUiLAkJCS8qIGh3ZmNfc3RyICovCi0gICAgIkFUKkYyXDAxNSIsCQkJLyogc3dmY19zdHIgKi8K LSAgICAiQVQqRjBcMDE1IiwJCQkvKiBub2ZjX3N0ciAqLwotICAgICJBVCpFNlwwMTUiLAkJCS8q IGVjX29uX3N0ciAqLwotICAgICJBVCpFMFwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KLSAgICAi QVQqRTlcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KLSAgICAiQVQqRTBcMDE1IiwJCQkvKiBkY19v ZmZfc3RyICovCi0gICAgIkFUUzA9MlwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLwotICAgICJBVFMw PTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8K LSAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KLSAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9v bl9zdHIgKi8KLSAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIkFUTDFc MDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KLSAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAq LwotICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIkFUWDNcMDE1IiwJCQkJ LyogaWdub3JlZHQgKi8KLSAgICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICA1NzYwMEwsCQkJCS8q IG1heF9zcGVlZCAqLwotICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tE X1NXLCAvKiBjYXBhcyAqLwotICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCi19OwotCi1zdGF0aWMK LU1ETUlORiBNT05UQU5BID0gewkJCS8qIE1vdG9yb2xhIE1vbnRhbmEgKi8KLSAgICAiTW90b3Jv bGEgTW9udGFuYSIsCQkJLyogTmFtZSAqLwotICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29t bWFuZCAqLwotICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCi0gICAgMzUsCQkJ CQkvKiBkaWFsX3RpbWUgKi8KLSAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCi0gICAgMiwJ CQkJCS8qIHBhdXNlX3RpbWUgKi8KLSNpZmRlZiBPUzIKLSAgICAiQVRRMEUxVjFYNCZTMCZDMSZE MlxcSzVcXFYxXDAxNSIsCS8qIHdha2Vfc3RyICovCi0jZWxzZQotI2lmZGVmIFZNUwotICAgICJB VFEwRTFYNCZTMVxcSzVcXFYxXDAxNSIsCQkvKiB3YWtlX3N0ciAqLwotI2Vsc2UKLSAgICAiQVRR MEUxWDRcXEs1XFxWMVwwMTUiLAkJLyogd2FrZV9zdHIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNl bmRpZiAvKiBPUzIgKi8KLSAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCi0gICAgIk9LXDAxNSIs CQkJCS8qIHdha2VfcHJvbXB0ICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KLSAgICAi IiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLwotICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3Ry ICovCi0gICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLwotICAgIDExMDAsCQkJCS8qIGVzY190aW1l ICovCi0gICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLwotICAgICJBVFEwSDBcMDE1IiwJCQkvKiBo dXBfc3RyICovCi0gICAgIkFUXFxRM1wwMTUiLAkJCS8qIGh3ZmNfc3RyICovCi0gICAgIkFUXFxR MVwwMTUiLAkJCS8qIHN3ZmNfc3RyICovCi0gICAgIkFUXFxRMFwwMTUiLAkJCS8qIG5vZmNfc3Ry ICovCi0gICAgIkFUXFxONFwwMTUiLAkJCS8qIGVjX29uX3N0ciAqLwotICAgICJBVFxcTjFcMDE1 IiwJCQkvKiBlY19vZmZfc3RyICovCi0gICAgIkFUJUMxXDAxNSIsCQkJLyogZGNfb25fc3RyICov Ci0gICAgIkFUJUMwXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLwotICAgICJBVFMwPTFcMDE1IiwJ CQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLwot ICAgICJBVFxcSjBcMDE1IiwJCQkvKiBzYl9vbl9zdHIgKi8KLSAgICAiQVRcXEoxXDAxNSIsCQkJ Lyogc2Jfb2ZmX3N0ciAqLwotICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLwotICAg ICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KLSAgICAiQVRMMVwwMTUiLAkJCQkvKiB2 b2wxX3N0ciAqLwotICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCi0gICAgIkFUTDNc MDE1IiwJCQkJLyogdm9sM19zdHIgKi8KLSAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVkdCAq LwotICAgICIiLAkJCQkJLyogaW5pMiAqLwotICAgIDU3NjAwTCwJCQkJLyogbWF4X3NwZWVkICov Ci0gICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8qIGNhcGFz ICovCi0gICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KLX07Ci0KLXN0YXRpYwotTURNSU5GIENPTVBB USA9IHsJCQkvKiBDb21wYXEgRGF0YStGYXggTW9kZW0gKi8KLSAgICAiQ29tcGFxIERhdGErRmF4 IE1vZGVtIiwJCS8qIE5hbWUgKi8KLSAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQg Ki8KLSAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLwotICAgIDM1LAkJCQkJLyog ZGlhbF90aW1lICovCi0gICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLwotICAgIDIsCQkJCQkv KiBwYXVzZV90aW1lICovCi0jaWZkZWYgT1MyCi0gICAgIkFUUTBFMVYxWDQmUzAmQzEmRDJcMDE1 IiwJCS8qIHdha2Vfc3RyICovCi0jZWxzZQotI2lmZGVmIFZNUwotICAgICJBVFEwRTFYNCZTMVww MTUiLAkJCS8qIHdha2Vfc3RyICovCi0jZWxzZQotICAgICJBVFEwRTFYNFwwMTUiLAkJCS8qIHdh a2Vfc3RyICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgMCwJCQkJ CS8qIHdha2VfcmF0ZSAqLwotICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLwotICAg ICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8K LSAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJCQkvKiBkaWFsX3Jh dGUgKi8KLSAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLwotICAgIDQzLAkJCQkJLyogZXNjX2No YXIgKi8KLSAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAgICJBVFxcUTNcMDE1 IiwJCQkvKiBod2ZjX3N0ciAoc2FtZSBhcyAmSzMpICovCi0gICAgIkFUXFxRMVwwMTUiLAkJCS8q IHN3ZmNfc3RyIChzYW1lIGFzICZLNCkgKi8KLSAgICAiQVRcXFEwXDAxNSIsCQkJLyogbm9mY19z dHIgKHNhbWUgYXMgJkswKSAqLwotICAgICJBVFxcTjNcMDE1IiwJCQkvKiBlY19vbl9zdHIgKi8K LSAgICAiQVRcXE4wXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLwotICAgICJBVCVDMVwwMTUiLAkJ CS8qIGRjX29uX3N0ciAqLwotICAgICJBVCVDMFwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KLSAg ICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCi0gICAgIkFUUzA9MFwwMTUiLAkJCS8q IGFhX29mZl9zdHIgKi8KLSAgICAiQVRcXE4zXDAxNSIsCQkJLyogc2Jfb25fc3RyICovCi0gICAg IkFUXFxOMVwwMTUiLAkJCS8qIHNiX29mZl9zdHIgKi8KLSAgICAiQVRNMVwwMTUiLAkJCQkvKiBz cF9vbl9zdHIgKi8KLSAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIkFU TDBcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KLSAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0 ciAqLwotICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIkFUWDNcMDE1IiwJ CQkJLyogaWdub3JlZHQgKi8KLSAgICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICAxMTUyMDBMLAkJ CQkvKiBtYXhfc3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hX fENLRF9TVywgLyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsKLQotCi1z dGF0aWMKLU1ETUlORiBGVUpJVFNVID0gewkJCS8qIEZ1aml0c3UgKi8KLSAgICAiRnVqaXRzdSBG YXgvTW9kZW0gQWRhcHRlciIsCS8qIE5hbWUgKi8KLSAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNl IGNvbW1hbmQgKi8KLSAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLwotICAgIDM1 LAkJCQkJLyogZGlhbF90aW1lICovCi0gICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLwotICAg IDIsCQkJCQkvKiBwYXVzZV90aW1lICovCi0jaWZkZWYgT1MyCi0gICAgIkFUUTBFMVYxWDQmUzAm QzEmRDJcXEs1XFxOM1wwMTUiLAkvKiB3YWtlX3N0ciAqLwotI2Vsc2UKLSNpZmRlZiBWTVMKLSAg ICAiQVRRMEUxWDQmUzFcXEs1XFxOM1wwMTUiLAkJLyogd2FrZV9zdHIgKi8KLSNlbHNlCi0gICAg IkFUUTBFMVg0XFxLNVxcTjNcMDE1IiwJCS8qIHdha2Vfc3RyICovCi0jZW5kaWYgLyogVk1TICov Ci0jZW5kaWYgLyogT1MyICovCi0gICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLwotICAgICJPS1ww MTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0g ICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KLSAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFs X3N0ciAqLwotICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KLSAgICAxMTAwLAkJCQkvKiBlc2Nf dGltZSAqLwotICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KLSAgICAiQVRRMEgwXDAxNSIsCQkJ LyogaHVwX3N0ciAqLwotICAgICJBVCZLM1xcUTNcMDE1IiwJCQkvKiBod2ZjX3N0ciAqLwotICAg ICJBVCZLNFxcUTFcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLwotICAgICJBVCZLMFxcUTBcMDE1IiwJ CQkvKiBub2ZjX3N0ciAqLwotICAgICJBVFxcTjNcMDE1IiwJCQkvKiBlY19vbl9zdHIgKi8KLSAg ICAiQVRcXE4wXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLwotICAgICJBVCVDMSIsCQkJCS8qIGRj X29uX3N0ciAqLwotICAgICJBVCVDMCIsCQkJCS8qIGRjX29mZl9zdHIgKi8KLSAgICAiQVRTMD0x XDAxNSIsCQkJLyogYWFfb25fc3RyICovCi0gICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9z dHIgKi8KLSAgICAiQVRcXEowXDAxNSIsCQkJLyogc2Jfb25fc3RyICovCi0gICAgIkFUXFxKMVww MTUiLAkJCS8qIHNiX29mZl9zdHIgKi8KLSAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIg Ki8KLSAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIkFUTDFcMDE1IiwJ CQkJLyogdm9sMV9zdHIgKi8KLSAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLwotICAg ICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIkFUWDNcMDE1IiwJCQkJLyogaWdu b3JlZHQgKi8KLSAgICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICAxMTUyMDBMLAkJCQkvKiBtYXhf c3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywg LyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsKLQotc3RhdGljCi1NRE1J TkYgTUhaQVRUID0JCQkJLyogTWVnYWhlcnR6IEFUJlQgVi4zNCAqLwotICAgIHsKLSAgICAiTWVn YWhlcnR6IEFUJlQgVi4zNCIsCi0gICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICov Ci0gICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KLSAgICAzNSwJCQkJCS8qIGRp YWxfdGltZSAqLwotICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KLSAgICAyLAkJCQkJLyog cGF1c2VfdGltZSAqLwotI2lmZGVmIE9TMgotICAgICJBVFEwRTFWMVg0TjEmQzEmRDJcXEs1XDAx NSIsCS8qIHdha2Vfc3RyICovCi0jZWxzZQotICAgICJBVFEwWDROMVxcSzVcMDE1IiwJCQkvKiB3 YWtlX3N0ciAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8K LSAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2Rl X3N0ciAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCi0gICAgIkFURCVzXDAxNSIs CQkJLyogZGlhbF9zdHIgKi8KLSAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCi0gICAgMTEwMCwJ CQkJLyogZXNjX3RpbWUgKi8KLSAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCi0gICAgIkFUUTBI XDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAgICJBVCZLM1wwMTUiLAkJCS8qIGh3ZmNfc3RyICov Ci0gICAgIkFUJks0XDAxNSIsCQkJLyogc3dmY19zdHIgKi8KLSAgICAiQVQmSzBcMDE1IiwJCQkv KiBub2ZjX3N0ciAqLwotICAgICJBVFxcTjNcMDE1IiwJCQkvKiBlY19vbl9zdHIgKi8KLSAgICAi QVRcXE4wXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLwotICAgICJBVCVDMVwiSDNcMDE1IiwJCQkv KiBkY19vbl9zdHIgKi8KLSAgICAiQVQlQzBcIkgwXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLwot ICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiQVRTMD0wXDAxNSIsCQkJ LyogYWFfb2ZmX3N0ciAqLwotICAgICJBVFxcSjBcMDE1IiwJCQkvKiBzYl9vbl9zdHIgKi8KLSAg ICAiQVRcXEoxXDAxNSIsCQkJLyogc2Jfb2ZmX3N0ciAqLwotICAgICJBVE0xXDAxNSIsCQkJCS8q IHNwX29uX3N0ciAqLwotICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KLSAgICAi QVRMMVwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLwotICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJf c3RyICovCi0gICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KLSAgICAiQVRYM1wwMTUi LAkJCQkvKiBpZ25vcmVkdCAqLwotICAgICIiLAkJCQkJLyogaW5pMiAqLwotICAgIDExNTIwMEws CQkJCS8qIG1heF9zcGVlZCAqLwotICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0Rf SFd8Q0tEX1NXLCAvKiBjYXBhcyAqLwotICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCi19OwotCi1z dGF0aWMKLU1ETUlORiBTVVBSQVNPTiA9CQkJLyogU3VwcmFTb25pYyAqLwotICAgIHsKLSAgICAi RGlhbW9uZCBTdXByYVNvbmljIDI4OFYrIiwJCS8qIERpYW1vbmQgTXVsdGltZWRpYSBTeXN0ZW1z IEluYyAqLwotICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLwotICAgICJBVFRc MDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCi0gICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8K LSAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCi0gICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUg Ki8KLSNpZmRlZiBPUzIKLSAgICAiQVRRMEUxVjFOMVcwWDRZMCZTMCZDMSZEMlwwMTUiLAkvKiB3 YWtlX3N0ciAqLwotI2Vsc2UKLSNpZmRlZiBWTVMKLSAgICAiQVRRMEUxTjFXMFg0WTAmUzFcMDE1 IiwJCS8qIHdha2Vfc3RyICovCi0jZWxzZQotICAgICJBVFEwRTFOMVcwWDRZMFwwMTUiLAkJLyog d2FrZV9zdHIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAwLAkJ CQkJLyogd2FrZV9yYXRlICovCi0gICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCi0g ICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAq LwotICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCi0gICAgMCwJCQkJCS8qIGRpYWxf cmF0ZSAqLwotICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCi0gICAgNDMsCQkJCQkvKiBlc2Nf Y2hhciAqLwotICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCi0gICAgIkFUJkszXDAx NSIsCQkJLyogaHdmY19zdHIgKi8KLSAgICAiQVQmSzRcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLwot ICAgICJBVCZLXDAxNSIsCQkJCS8qIG5vZmNfc3RyICovCi0gICAgIkFUJlE1XFxOM1M0OD03XDAx NSIsCQkvKiBlY19vbl9zdHIgKi8KLSAgICAiQVQmUTBcXE4xXDAxNSIsCQkJLyogZWNfb2ZmX3N0 ciAqLwotICAgICJBVCVDM1M0Nj0xMzhcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KLSAgICAiQVQl QzBTNDY9MTM2XDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLwotICAgICJBVFMwPTFcMDE1IiwJCQkv KiBhYV9vbl9zdHIgKi8KLSAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLwotICAg ICIiLAkJCQkJLyogc2Jfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCi0g ICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3RyICovCi0gICAgIkFUTVwwMTUiLAkJCQkvKiBz cF9vZmZfc3RyICovCi0gICAgIkFUTFwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLwotICAgICJBVEwy XDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCi0gICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIg Ki8KLSAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVkdCAqLwotICAgICIiLAkJCQkJLyogaW5p MiAqLwotICAgIDExNTIwMEwsCQkJCS8qIG1heF9zcGVlZCAqLwotICAgIENLRF9BVHxDS0RfU0J8 Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBjYXBhcyAqLwotICAgIGdldG9rCQkJCS8q IG9rX2ZuICovCi19OwotCi1zdGF0aWMKLU1ETUlORiBCRVNUREFUQSA9CQkJLyogQmVzdCBEYXRh ICovCi0gICAgewotICAgICJCZXN0IERhdGEgRmF4IE1vZGVtIiwJCS8qIEJlc3QgRGF0YSBGYXgg TW9kZW0gKi8KLSAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiQVRU XDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLwotICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICov Ci0gICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLwotICAgIDIsCQkJCQkvKiBwYXVzZV90aW1l ICovCi0jaWZkZWYgT1MyCi0gICAgIkFUUTBFMVYxTjFXMFg0WTAmUzAmQzEmRDJcMDE1IiwJLyog d2FrZV9zdHIgKi8KLSNlbHNlCi0jaWZkZWYgVk1TCi0gICAgIkFUUTBFMU4xVzBYNFkwJlMxXDAx NSIsCQkvKiB3YWtlX3N0ciAqLwotI2Vsc2UKLSAgICAiQVRRMEUxTjFXMFg0WTBcMDE1IiwJCS8q IHdha2Vfc3RyICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgMCwJ CQkJCS8qIHdha2VfcmF0ZSAqLwotICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLwot ICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQg Ki8KLSAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJCQkvKiBkaWFs X3JhdGUgKi8KLSAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLwotICAgIDQzLAkJCQkJLyogZXNj X2NoYXIgKi8KLSAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAgICJBVCZLM1ww MTUiLAkJCS8qIGh3ZmNfc3RyICovCi0gICAgIkFUJks0XDAxNSIsCQkJLyogc3dmY19zdHIgKi8K LSAgICAiQVQmS1wwMTUiLAkJCQkvKiBub2ZjX3N0ciAqLwotICAgICJBVCZRNlxcTjNcMDE1IiwJ CQkvKiBlY19vbl9zdHIgKi8KLSAgICAiQVQmUTBcXE4xXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAq LwotICAgICJBVCVDM1wwMTUiLAkJCS8qIGRjX29uX3N0ciAqLwotICAgICJBVCVDMFwwMTUiLAkJ CS8qIGRjX29mZl9zdHIgKi8KLSAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCi0g ICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KLSAgICAiQVRcXE4zXDAxNSIsCQkJ Lyogc2Jfb25fc3RyICovCi0gICAgIkFUXFxOMFwwMTUiLAkJCS8qIHNiX29mZl9zdHIgKi8KLSAg ICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KLSAgICAiQVRNMFwwMTUiLAkJCQkvKiBz cF9vZmZfc3RyICovCi0gICAgIkFUTDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KLSAgICAiQVRM MlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLwotICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3Ry ICovCi0gICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8KLSAgICAiIiwJCQkJCS8qIGlu aTIgKi8KLSAgICA1NzYwMEwsCQkJCS8qIG1heF9zcGVlZCAqLwotICAgIENLRF9BVHxDS0RfU0J8 Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBjYXBhcyAqLwotICAgIGdldG9rCQkJCS8q IG9rX2ZuICovCi19OwotCi1zdGF0aWMKLU1ETUlORiBBVFQxOTAwID0JCQkvKiBBVCZUIFNlY3Vy ZSBEYXRhIFNUVSBJSUkgMTkwMCAqLwotICAgIHsKLSAgICAiQVQmVCBTZWN1cmUgRGF0YSBTVFUg SUlJIE1vZGVsIDE5MDAiLCAvKiBuYW1lICovCi0gICAgIiIsCQkJCQkvKiBwdWxzZSBjb21tYW5k ICovCi0gICAgIiIsCQkJCQkvKiB0b25lIGNvbW1hbmQgKi8KLSAgICAzNSwJCQkJCS8qIGRpYWxf dGltZSAqLwotICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KLSAgICAyLAkJCQkJLyogcGF1 c2VfdGltZSAqLwotI2lmZGVmIE9TMgotICAgICJBVFEwRTFWMVg0XDAxNSIsCQkJLyogd2FrZV9z dHIgKi8KLSNlbHNlCi0gICAgIkFUUTBFMVg0XDAxNSIsCQkJLyogd2FrZV9zdHIgKi8KLSNlbmRp ZiAvKiBPUzIgKi8KLSAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCi0gICAgIk9LXDAxNSIsCQkJ CS8qIHdha2VfcHJvbXB0ICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KLSAgICAiIiwJ CQkJCS8qIGRtb2RlX3Byb21wdCAqLwotICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICov Ci0gICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLwotICAgIDExMDAsCQkJCS8qIGVzY190aW1lICov Ci0gICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLwotICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBf c3RyICovCi0gICAgIiIsCQkJCQkvKiBod2ZjX3N0ciAqLwotICAgICIiLAkJCQkJLyogc3dmY19z dHIgKi8KLSAgICAiIiwJCQkJCS8qIG5vZmNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBlY19vbl9z dHIgKi8KLSAgICAiIiwJCQkJCS8qIGVjX29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRjX29u X3N0ciAqLwotICAgICIiLAkJCQkJLyogZGNfb2ZmX3N0ciAqLwotICAgICJBVFMwPTFcMDE1IiwJ CQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLwot ICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICov Ci0gICAgIiIsCQkJCQkvKiBzcF9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNwX29mZl9zdHIg Ki8KLSAgICAiIiwJCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIiIsCQkJCQkvKiB2b2wyX3N0ciAq LwotICAgICIiLAkJCQkJLyogdm9sM19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGlnbm9yZWR0ICov Ci0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgOTYwMEwsCQkJCS8qIG1heF9zcGVlZCAqLwot ICAgIENLRF9BVHxDS0RfU0J8Q0tEX0hXLAkJLyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBv a19mbiAqLwotfTsKLQotLyoKLSAgRXhwZXJpbWVudGF0aW9uIHNob3dlZCB0aGF0IGhhcmRseSBh bnkgb2YgdGhlIGRvY3VtZW50ZWQgY29tbWFuZHMgZGlkCi0gIGFueXRoaW5nIG90aGVyIHRoYXQg cHJpbnQgRVJST1IuICBBdCBmaXJzdCB0aGVyZSB3YXMgbm8gY29tbXVuaWNhdGlvbiBhdAotICBh bGwgYXQgOTYwMCBicHMgLS0gdHVybnMgb3V0IHRoZSBpbnRlcmZhY2Ugc3BlZWQgd2FzIHN0dWNr IGF0IDI0MDAuCi0gIEFUUzI4PTEzMCAoZ2l2ZW4gYXQgMjQwMCBicHMpIGFsbG93ZWQgaXQgdG8g d29yayBhdCA5NjAwLgotKi8KLXN0YXRpYwotTURNSU5GIEFUVDE5MTAgPQkJCS8qIEFUJlQgU2Vj dXJlIERhdGEgU1RVIElJSSAxOTEwICovCi0gICAgewkJCQkJLyogQWRkcyBWLjMyYmlzLCBWLjQy LCBWLjQyYmlzICovCi0gICAgIkFUJlQgU2VjdXJlIERhdGEgU1RVIElJSSBNb2RlbCAxOTEwIiwg LyogbmFtZSAqLwotCi0vKiBCZWxpZXZlIGl0IG9yIG5vdCwgIkFUVCIgYW5kICJBVFAiIHJlc3Vs dCBpbiBFUlJPUiAqLwotCi0gICAgIiIsCQkJCQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIiIs CQkJCQkvKiB0b25lIGNvbW1hbmQgKi8KLSAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAg ICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KLSAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLwot I2lmZGVmIE9TMgotICAgICJBVFEwRTFWMVg0XDAxNSIsCQkJLyogd2FrZV9zdHIgKi8KLSNlbHNl Ci0gICAgIkFUUTBFMVg0XDAxNSIsCQkJLyogd2FrZV9zdHIgKi8KLSNlbmRpZiAvKiBPUzIgKi8K LSAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCi0gICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJv bXB0ICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2Rl X3Byb21wdCAqLwotICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCi0gICAgMCwJCQkJ CS8qIGRpYWxfcmF0ZSAqLwotICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCi0gICAgNDMsCQkJ CQkvKiBlc2NfY2hhciAqLwotICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCi0gICAg IiIsCQkJCQkvKiBod2ZjX3N0ciAqLwotICAgICIiLAkJCQkJLyogc3dmY19zdHIgKi8KLSAgICAi IiwJCQkJCS8qIG5vZmNfc3RyICovCi0jaWZkZWYgQ09NTUVOVAotLyogVGhlc2UgYXJlIGV2aWRl bnRseSByZWFkLW9ubHkgcmVnaXN0ZXJzICovCi0gICAgIkFUUzQ2PTEzOFM0Nz0wXDAxNSIsCQkv KiBlY19vbl9zdHIgKi8KLSAgICAiQVRTNDY9MTM4UzQ3PTEyOFwwMTUiLAkJLyogZWNfb2ZmX3N0 ciAqLwotICAgICJBVFM0Nj0xMzhTNDc9MFwwMTUiLAkJLyogZGNfb25fc3RyICovCi0gICAgIkFU UzQ2PTEzOFM0Nz0xMjhcMDE1IiwJCS8qIGRjX29mZl9zdHIgKi8KLSNlbHNlCi0gICAgIiIsCi0g ICAgIiIsCi0gICAgIiIsCi0gICAgIiIsCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICJBVFMw PTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2Zm X3N0ciAqLwotICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCi0gICAgIiIsCQkJCQkvKiBzYl9v ZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzcF9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNw X29mZl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIiIsCQkJCQkvKiB2 b2wyX3N0ciAqLwotICAgICIiLAkJCQkJLyogdm9sM19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGln bm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0gICAgOTYwMEwsCQkJCS8qIG1heF9z cGVlZCAqLwotICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFcsCS8qIGNhcGFz ICovCi0gICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KLX07Ci0KLXN0YXRpYwotTURNSU5GIEtFRVBJ TlRPVUNIID0JCQkvKiBBVCZUIEtlZXBpblRvdWNoIENhcmQgTW9kZW0gKi8KLSAgICB7Ci0gICAg IkFUJlQgS2VlcGluVG91Y2ggVi4zMmJpcyBDYXJkIE1vZGVtIiwgLyogTmFtZSAqLwotICAgICJB VFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLwotICAgICJBVFRcMDE1IiwJCQkJLyogdG9u ZSBjb21tYW5kICovCi0gICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KLSAgICAiLCIsCQkJCS8q IHBhdXNlX2NoYXJzICovCi0gICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KLSNpZmRlZiBPUzIK LS8qIFRoaXMgdXNlZCB0byBpbmNsdWRlICZDMSZTMCZEMitRMCBidXQgdGhhdCBnaXZlcyBFUlJP UiAqLwotICAgICJBVFEwRTFWMVg0JlMwJkMxJkQyXFxLNVwwMTUiLAkvKiB3YWtlX3N0ciAqLwot I2Vsc2UKLSNpZmRlZiBWTVMKLSAgICAiQVRRMEUxWDQmUzFcXEs1XDAxNSIsCQkvKiB3YWtlX3N0 ciAqLwotI2Vsc2UKLSAgICAiQVRRMEUxWDRcXEs1XDAxNSIsCQkJLyogd2FrZV9zdHIgKi8KLSNl bmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAwLAkJCQkJLyogd2FrZV9yYXRl ICovCi0gICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCi0gICAgIiIsCQkJCQkvKiBk bW9kZV9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLwotICAgICJBVEQlc1ww MTUiLAkJCS8qIGRpYWxfc3RyICovCi0gICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLwotICAgIDEx MDAsCQkJCS8qIGVzY190aW1lICovCi0gICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLwotICAgICJB VFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCi0gICAgIkFUXFxRM1wwMTUiLAkJCS8qIGh3ZmNf c3RyICovCi0gICAgIkFUXFxRMVxcWDBcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLwotICAgICJBVFxc UTBcMDE1IiwJCQkvKiBub2ZjX3N0ciAqLwotICAgICJBVFxcTjMtSjFcMDE1IiwJCQkvKiBlY19v bl9zdHIgKi8KLSAgICAiQVRcXE4xXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLwotICAgICJBVCVD M1wiSDNcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KLSAgICAiQVQlQzBcIkgwXDAxNSIsCQkJLyog ZGNfb2ZmX3N0ciAqLwotICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KLSAgICAi QVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLwotICAgICJBVE4wXFxKMFwwMTUiLAkJCS8q IHNiX29uX3N0ciAqLwotICAgICJBVE4xXFxKMVwwMTUiLAkJCS8qIHNiX29mZl9zdHIgKi8KLSAg ICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KLSAgICAiQVRNMFwwMTUiLAkJCQkvKiBz cF9vZmZfc3RyICovCi0gICAgIiIsCQkJCQkvKiB2b2wxX3N0ciAqLwotICAgICIiLAkJCQkJLyog dm9sMl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIkFUWDNcMDE1IiwJ CQkJLyogaWdub3JlZHQgKi8KLSAgICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICA1NzYwMEwsCQkJ CS8qIG1heF9zcGVlZCAqLwotICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8 Q0tEX1NXLCAvKiBjYXBhcyAqLwotICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCi19OwotCi1zdGF0 aWMKLU1ETUlORiBST0xNX0FUID0JCS8qIFJvbG0gZGF0YSBwaG9uZSB3aXRoIEFUIGNvbW1hbmQg c2V0ICovCi0gICAgewotICAgICJSb2xtIDI0NFBDIG9yIDYwMCBTZXJpZXMgd2l0aCBBVCBDb21t YW5kIFNldCIsCi0gICAgIiIsCQkJCQkvKiBwdWxzZSBjb21tYW5kICovCi0gICAgIiIsCQkJCQkv KiB0b25lIGNvbW1hbmQgKi8KLSAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAgICIsIiwJ CQkJLyogcGF1c2VfY2hhcnMgKi8KLSAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLwotI2lmZGVm IE9TMgotICAgICJBVEUxUTBWMVwwMTUiLAkJCS8qIHdha2Vfc3RyICovCi0jZWxzZQotICAgICJB VFEwXDAxNSIsCQkJCS8qIHdha2Vfc3RyICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgMCwJCQkJ CS8qIHdha2VfcmF0ZSAqLwotICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLwotICAg ICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8K LSAgICAiQVREVCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgLS0gYWx3YXlzIFRvbmUgKi8KLSAgICAw LAkJCQkJLyogZGlhbF9yYXRlICovCi0gICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KLSAgICA0 MywJCQkJCS8qIGVzY19jaGFyICovCi0gICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8K LSAgICAiIiwJCQkJCS8qIGh3ZmNfc3RyICovCi0gICAgIiIsCQkJCQkvKiBzd2ZjX3N0ciAqLwot ICAgICIiLAkJCQkJLyogbm9mY19zdHIgKi8KLSAgICAiIiwJCQkJCS8qIGVjX29uX3N0ciAqLwot ICAgICIiLAkJCQkJLyogZWNfb2ZmX3N0ciAqLwotICAgICIiLAkJCQkJLyogZGNfb25fc3RyICov Ci0gICAgIiIsCQkJCQkvKiBkY19vZmZfc3RyICovCi0gICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFh X29uX3N0ciAqLwotICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCi0gICAgIiIs CQkJCQkvKiBzYl9vbl9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KLSAgICAi IiwJCQkJCS8qIHNwX29uX3N0ciAqLwotICAgICIiLAkJCQkJLyogc3Bfb2ZmX3N0ciAqLwotICAg ICIiLAkJCQkJLyogdm9sMV9zdHIgKi8KLSAgICAiIiwJCQkJCS8qIHZvbDJfc3RyICovCi0gICAg IiIsCQkJCQkvKiB2b2wzX3N0ciAqLwotICAgICIiLAkJCQkJLyogaWdub3JlZHQgKi8KLSAgICAi IiwJCQkJCS8qIGluaTIgKi8KLSAgICAxOTIwMEwsCQkJCS8qIG1heF9zcGVlZCAqLwotICAgIENL RF9BVCwJCQkJLyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsKLQotc3Rh dGljCi1NRE1JTkYgQVRMQVMgPQkJCQkvKiBBdGxhcyAvIE5ld2NvbSBpeGZDIDMzLjYgKi8KLSAg ICB7Ci0gICAgIkF0bGFzIC8gTmV3Y29tIDMzNjAwaXhmQyBEYXRhL0ZheCBNb2RlbSIsIC8qIE5h bWUgKi8KLSAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiQVRUXDAx NSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLwotICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCi0g ICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLwotICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICov Ci0jaWZkZWYgT1MyCi0gICAgIkFUWjAmRlEwVjEmQzEmRDJcMDE1IiwJCS8qIHdha2Vfc3RyICov Ci0jZWxzZQotICAgICJBVFowJkZRMFYxXDAxNSIsCQkJLyogd2FrZV9zdHIgKi8KLSNlbmRpZiAv KiBPUzIgKi8KLSAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCi0gICAgIk9LXDAxNSIsCQkJCS8q IHdha2VfcHJvbXB0ICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KLSAgICAiIiwJCQkJ CS8qIGRtb2RlX3Byb21wdCAqLwotICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCi0g ICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLwotICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCi0g ICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLwotICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3Ry ICovCi0gICAgIkFUJkszXDAxNSIsCQkJLyogaHdmY19zdHIgKi8KLSAgICAiQVQmSzRcMDE1IiwJ CQkvKiBzd2ZjX3N0ciAqLwotICAgICJBVCZLMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCi0gICAg IkFUXCJIM1wwMTUiLAkJCS8qIGVjX29uX3N0ciAqLwotICAgICJBVFwiSDBcMDE1IiwJCQkvKiBl Y19vZmZfc3RyICovCi0gICAgIkFUJUMxXDAxNSIsCQkJLyogZGNfb25fc3RyICovCi0gICAgIkFU JUMwXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLwotICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9v bl9zdHIgKi8KLSAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLwotICAgICJBVE4w XFxKMFwwMTUiLAkJCS8qIHNiX29uX3N0ciAqLwotICAgICJBVE4xXFxKMVwwMTUiLAkJCS8qIHNi X29mZl9zdHIgKi8KLSAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KLSAgICAiQVRN MFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIkFUTDFcMDE1IiwJCQkJLyogdm9sMV9z dHIgKi8KLSAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLwotICAgICJBVEwzXDAxNSIs CQkJCS8qIHZvbDNfc3RyICovCi0gICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8KLSAg ICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICAxMTUyMDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KLSAg ICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2FwYXMgKi8K LSAgICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsKLQotc3RhdGljCi1NRE1JTkYgQ09ERVggPSB7 CQkJLyogTW90b3JvbGEgQ29kZXggKi8KLSAgICAiTW90b3JvbGEgQ29kZXggMzI2WCBTZXJpZXMi LAkvKiBOYW1lIC0gQVQmViB0byBzZWUgc2V0dGluZ3MgKi8KLSAgICAiQVRQXDAxNSIsCQkJCS8q IHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLwot ICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCi0gICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAq LwotICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCi0jaWZkZWYgT1MyCi0gICAgLyogJk0wPUFz eW5jIChub3Qgc3luYykgKi8KLSAgICAvKiAqTU0wPUF1dG9tYXRpYyBtb2R1bGF0aW9uIG5lZ290 aWF0aW9uICovCi0gICAgLyogKkRFMjI9QXV0b21hdGljIGRhdGEgcmF0ZSAqLwotICAgICJBVFpR MEUxVjFYNFkwKkRFMjIqTU0wJkMxJk0wJlMwJkQyXDAxNSIsIC8qIHdha2Vfc3RyICovCi0jZWxz ZQotI2lmZGVmIFZNUwotICAgICJBVFpRMEUxVjFYNFkwKkRFMjIqTU0wJkMxJk0wJlMxXDAxNSIs IC8qIHdha2Vfc3RyICovCi0jZWxzZQotICAgICJBVFpRMEUxVjFYNFkwKkRFMjIqTU0wJkMxJk0w XDAxNSIsCS8qIHdha2Vfc3RyICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICov Ci0gICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLwotICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3By b21wdCAqLwotICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCi0gICAgIiIsCQkJCQkvKiBkbW9k ZV9wcm9tcHQgKi8KLSAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJ CQkvKiBkaWFsX3JhdGUgKi8KLSAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLwotICAgIDQzLAkJ CQkJLyogZXNjX2NoYXIgKi8KLSAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAg ICJBVCpNRjEqRkwzXDAxNSIsCQkJLyogaHdmY19zdHIgKi8KLSAgICAiQVQqTUYxKkZMMVwwMTUi LAkJCS8qIHN3ZmNfc3RyICovCi0gICAgIkFUKk1GMCpGTDBcMDE1IiwJCQkvKiBub2ZjX3N0ciAq LwotICAgICJBVCpFQzAqU00zKlNDMFwwMTUiLAkJLyogZWNfb25fc3RyICovCi0gICAgIkFUKlNN MFwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KLSAgICAiQVQqREMxXDAxNSIsCQkJLyogZGNfb25f c3RyICovCi0gICAgIkFUKkRDMFwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KLSAgICAiQVQqQUE1 UzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLwotICAgICJBVCpBQTVTMD0wXDAxNSIsCQkJLyog YWFfb2ZmX3N0ciAqLwotICAgICJBVCpTQzFcMDE1IiwJCQkvKiBzYl9vbl9zdHIgKi8KLSAgICAi QVQqU0MwXDAxNSIsCQkJLyogc2Jfb2ZmX3N0ciAqLwotICAgICJBVE0xXDAxNSIsCQkJCS8qIHNw X29uX3N0ciAqLwotICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KLSAgICAiQVRM MVwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLwotICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3Ry ICovCi0gICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KLSAgICAiQVRYMypCRDJcMDE1 IiwJCQkvKiBpZ25vcmVkdCAqLwotICAgICIiLAkJCQkJLyogaW5pMiAqLwotICAgIDExNTIwMEws CQkJCS8qIG1heF9zcGVlZCAqLwotICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0Rf SFd8Q0tEX1NXLCAvKiBjYXBhcyAqLwotICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCi19OwotCi1z dGF0aWMKLU1ETUlORiBNVDU2MzRaUFggPQkJCS8qIE11bHRpdGVjaCAqLwotICAgIHsKLSAgICAi TXVsdGl0ZWNoIE1UNTYzNFpQWCIsCQkvKiBuYW1lICovCi0gICAgIkFUUFwwMTUiLAkJCQkvKiBw dWxzZSBjb21tYW5kICovCi0gICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KLSAg ICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLwotICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8K LSAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLwotI2lmZGVmIE9TMgotICAgICJBVEUxUTBWMVg0 JlMwJkMxJkQyJlEwXDAxNSIsCS8qIHdha2Vfc3RyICovCi0jZWxzZQotI2lmZGVmIFZNUwotICAg ICJBVFEwRTFYNCZTMSZRMFwwMTUiLAkJLyogd2FrZV9zdHIgKi8KLSNlbHNlCi0gICAgIkFUUTBF MVg0JlEwXDAxNSIsCQkJLyogd2FrZV9zdHIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAv KiBPUzIgKi8KLSAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCi0gICAgIk9LXDAxNSIsCQkJCS8q IHdha2VfcHJvbXB0ICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KLSAgICAiIiwJCQkJ CS8qIGRtb2RlX3Byb21wdCAqLwotICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCi0g ICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLwotICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCi0g ICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLwotICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3Ry ICovCi0gICAgIkFUJkszXDAxNSIsCQkJLyogaHdmY19zdHIgKi8KLSAgICAiQVQmSzRcMDE1IiwJ CQkvKiBzd2ZjX3N0ciAqLwotICAgICJBVCZLMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCi0gICAg IkFUXFxOM1wwMTUiLAkJCS8qIGVjX29uX3N0ciAqLwotICAgICJBVFxcTjFcMDE1IiwJCQkvKiBl Y19vZmZfc3RyICovCi0gICAgIkFUJUMxXDAxNSIsCQkJLyogZGNfb25fc3RyICovCi0gICAgIkFU JUMwXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLwotICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9v bl9zdHIgKi8KLSAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLwotICAgICJBVFxc SjBcMDE1IiwJCQkvKiBzYl9vbl9zdHIgKi8KLSAgICAiQVRcXEoxXDAxNSIsCQkJLyogc2Jfb2Zm X3N0ciAoTk9UIFNVUFBPUlRFRCkgKi8KLSAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIg Ki8KLSAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCi0gICAgIkFUTDFcMDE1IiwJ CQkJLyogdm9sMV9zdHIgKi8KLSAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLwotICAg ICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCi0gICAgIkFUWDNcMDE1IiwJCQkJLyogaWdu b3JlZHQgKi8KLSAgICAiIiwJCQkJCS8qIGluaTIgKi8KLSAgICAxMTUyMDBMLAkJCQkvKiBtYXhf c3BlZWQgKi8KLSAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywg LyogY2FwYXMgKi8KLSAgICBnZXRvawkJCQkvKiBva19mbiAqLwotfTsKLQotc3RhdGljCi1NRE1J TkYgTU9UU001NiA9CQkJLyogTW90b3JvbGEgU001NiBDaGlwc2V0ICovCi0gICAgewotICAgICJN b3Rvcm9sYSBTTTU2IFYuOTAgY2hpcHNldCIsCS8qIG5hbWUgKi8KLSAgICAiQVRQXDAxNSIsCQkJ CS8qIHB1bHNlIGNvbW1hbmQgKi8KLSAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAq LwotICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCi0gICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFy cyAqLwotICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCi0jaWZkZWYgT1MyCi0gICAgIkFUUTBW MVg0JlMwJkMxJkQyKk1NMTZcMDE1IiwJLyogd2FrZV9zdHIgKi8KLSNlbHNlCi0jaWZkZWYgVk1T Ci0gICAgIkFUUTBWMVg0JlMxJkMxJkQyKk1NMTZcMDE1IiwJLyogd2FrZV9zdHIgKi8KLSNlbHNl Ci0gICAgIkFUUTBWMVg0JkMxJkQyKk1NMTZcMDE1IiwJCS8qIHdha2Vfc3RyICovCi0jZW5kaWYg LyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLwot ICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLwotICAgICIiLAkJCQkJLyogZG1vZGVf c3RyICovCi0gICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KLSAgICAiQVREJXNcMDE1IiwJ CQkvKiBkaWFsX3N0ciAqLwotICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KLSAgICAxMTAwLAkJ CQkvKiBlc2NfdGltZSAqLwotICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KLSAgICAiQVRRMEgw XDAxNSIsCQkJLyogaHVwX3N0ciAqLwotICAgICJBVFxcUTNcMDE1IiwJCQkvKiBod2ZjX3N0ciAq LwotICAgICJBVFxcUTFcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLwotICAgICJBVFxcUTBcMDE1IiwJ CQkvKiBub2ZjX3N0ciAqLwotICAgICJBVFxcTjdcMDE1IiwJCQkvKiBlY19vbl9zdHIgKi8KLSAg ICAiQVRcXE4xXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLwotICAgICJBVCVDMVwwMTUiLAkJCS8q IGRjX29uX3N0ciAqLwotICAgICJBVCVDMFwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KLSAgICAi QVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCi0gICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFh X29mZl9zdHIgKi8KLSAgICAiQVRcXEowXDAxNSIsCQkJLyogc2Jfb25fc3RyICovCi0gICAgIkFU XFxKMVwwMTUiLAkJCS8qIHNiX29mZl9zdHIgKE5PVCBTVVBQT1JURUQpICovCi0gICAgIkFUTTFc MDE1IiwJCQkJLyogc3Bfb25fc3RyICovCi0gICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0 ciAqLwotICAgICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCi0gICAgIkFUTDJcMDE1IiwJ CQkJLyogdm9sMl9zdHIgKi8KLSAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLwotICAg ICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCi0gICAgIiIsCQkJCQkvKiBpbmkyICovCi0g ICAgMTE1MjAwTCwJCQkJLyogbWF4X3NwZWVkICovCi0gICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8 Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8qIGNhcGFzICovCi0gICAgZ2V0b2sJCQkJLyogb2tfZm4g Ki8KLX07Ci0jZW5kaWYgLyogTUlOSURJQUwgKi8KLQotLyogRU5EIE1ETUlORiBTVFJVQ1QgREVG SU5JVElPTlMgKi8KLQotLyoKLSAgVGFibGUgdG8gY29udmVydCBtb2RlbSBudW1iZXJzIHRvIE1E TUlORiBzdHJ1Y3QgcG9pbnRlcnMuCi0gIFRoZSBlbnRyaWVzIE1VU1QgYmUgaW4gYXNjZW5kaW5n IG9yZGVyIGJ5IG1vZGVtIG51bWJlciwgd2l0aG91dCBhbnkKLSAgImdhcHMiIGluIHRoZSBudW1i ZXJzLCBhbmQgc3RhcnRpbmcgZnJvbSBvbmUgKDEpLgotKi8KLQotTURNSU5GICptb2RlbXBbXSA9 IHsKLSNpZmRlZiBNSU5JRElBTAotICAgIE5VTEwsCQkJCS8qICAwICovCi0gICAgJkNDSVRULAkJ CQkvKiAgMSAqLwotICAgICZIQVlFUywJCQkJLyogIDIgKi8KLSAgICAmVU5LTk9XTiwJCQkJLyog IDMgKi8KLSAgICAmRFVNTVksCQkJCS8qICA0ICovCi0gICAgJkdFTkVSSUMsCQkJCS8qICA1ICov Ci0gICAgJklUVVRWMjUwCQkJCS8qICA2ICovCi0jZWxzZSAgLyogTm90IE1JTklESUFMICovCi0g ICAgTlVMTCwJCQkJLyogIDAgKi8KLSAgICAmQVRURFRETSwJCQkJLyogIDEgKi8KLSAgICAmQVRU SVNOLAkJCQkvKiAgMiAqLwotICAgICZBVFRNT0RFTSwJCQkJLyogIDMgKi8KLSAgICAmQ0NJVFQs CQkJCS8qICA0ICovCi0jaWZkZWYgT0xETU9ERU1TCi0gICAgJkNFUk1FVEVLLAkJCQkvKiAgNSAq LwotICAgICZERjAzLAkJCQkvKiAgNiAqLwotICAgICZERjEwMCwJCQkJLyogIDcgKi8KLSAgICAm REYyMDAsCQkJCS8qICA4ICovCi0gICAgJkdEQywJCQkJLyogIDkgKi8KLSNlbHNlCi0gICAgTlVM TCwKLSAgICBOVUxMLAotICAgIE5VTEwsCi0gICAgTlVMTCwKLSAgICBOVUxMLAotI2VuZGlmIC8q IE9MRE1PREVNUyAqLwotICAgICZIQVlFUywJCQkJLyogMTAgKi8KLSNpZmRlZiBPTERNT0RFTVMK LSAgICAmUEVOUklMLAkJCQkvKiAxMSAqLwotICAgICZSQUNBTCwJCQkJLyogMTIgKi8KLSNlbHNl Ci0gICAgTlVMTCwKLSAgICBOVUxMLAotI2VuZGlmIC8qIE9MRE1PREVNUyAqLwotICAgICZVTktO T1dOLAkJCQkvKiAxMyAqLwotI2lmZGVmIE9MRE1PREVNUwotICAgICZWRU5URUwsCQkJCS8qIDE0 ICovCi0gICAgJkNPTkNPUkQsCQkJCS8qIDE1ICovCi0jZWxzZQotICAgIE5VTEwsCi0gICAgTlVM TCwKLSNlbmRpZiAvKiBPTERNT0RFTVMgKi8KLSAgICAmRFVNTVksCQkJCS8qIDE2ICovCi0gICAg JlJPTE0sCQkJCS8qIDE3ICovCi0jaWZkZWYgT0xETU9ERU1TCi0gICAgJk1JQ1JPQ09NLAkJCQkv KiAxOCAqLwotI2Vsc2UKLSAgICBOVUxMLAotI2VuZGlmIC8qIE9MRE1PREVNUyAqLwotICAgICZV U1IsCQkJCS8qIDE5IFVTUiBDb3VyaWVyIGFuZCBTcG9ydHN0ZXIgKi8KLSAgICAmT0xEVEIsCQkJ CS8qIDIwIE9sZCBUZWxlYml0cyAqLwotICAgICZESUdJVEVMLAkJCQkvKiAyMSBEaWdpdGVsIEND SVRUICovCi0gICAgJkhfMTIwMCwJCQkJLyogMjIgSGF5ZXMgMTIwMCAqLwotICAgICZIX1VMVFJB LAkJCQkvKiAyMyBIYXllcyBVbHRyYSAqLwotICAgICZIX0FDQ1VSQSwJCQkJLyogMjQgSGF5ZXMg T3B0aW1hICovCi0gICAgJlBQSSwJCQkJLyogMjUgUFBJICovCi0gICAgJkRBVEFQT1JULAkJCQkv KiAyNiBEYXRhcG9ydCAqLwotICAgICZCT0NBLAkJCQkvKiAyNyBCb2NhICovCi0gICAgJk1PVE9S T0xBLAkJCQkvKiAyOCBNb3Rvcm9sYSBVRFMgTU9UT1JPTEEgKi8KLSAgICBOVUxMLAkJCQkvKiAy OSBEaWdpY29tbSAqLwotICAgIE5VTEwsCQkJCS8qIDMwIER5bmFsaW5rICovCi0gICAgJklOVEVM LAkJCQkvKiAzMSBJbnRlbCAqLwotICAgICZVQ09NX0FULAkJCQkvKiAzMiBNaWNyb2NvbSBpbiBB VCBtb2RlICovCi0gICAgJk1VTFRJVEVDSCwJCQkJLyogMzMgTXVsdGl0ZWNoICovCi0gICAgJlNV UFJBLAkJCQkvKiAzNCBTdXByYSAqLwotICAgICZaT0xUUklYLAkJCQkvKiAzNSBab2x0cml4ICov Ci0gICAgJlpPT00sCQkJCS8qIDM2IFpvb20gKi8KLSAgICAmWllYRUwsCQkJCS8qIDM3IFp5WEVM ICovCi0gICAgJkRVTU1ZLAkJCQkvKiAzOCBUQVBJICovCi0gICAgJk5FV1RCLAkJCQkvKiAzOSBO ZXctVGVsZWJpdCAqLwotICAgICZNQVhURUNILAkJCQkvKiA0MCBNYXhUZWNoICovCi0gICAgJkRV TU1ZLAkJCQkvKiA0MSBVc2VyLWRlZmluZWQgKi8KLSAgICAmUldWMzIsCQkJCS8qIDQyIFJvY2t3 ZWxsIFYuMzIgKi8KLSAgICAmUldWMzJCLAkJCQkvKiA0MyBSb2Nrd2VsbCBWLjMyYmlzICovCi0g ICAgJlJXVjM0LAkJCQkvKiA0NCBSb2Nrd2VsbCBWLjM0ICovCi0gICAgJk1XQVZFLAkJCQkvKiA0 NSBJQk0gTXdhdmUgKi8KLSAgICAmVEVMRVBBVEgsCQkJCS8qIDQ2IEdhdGV3YXkgMjAwMCBUZWxl cGF0aCBJSSAyOC44ICovCi0gICAgJk1JQ1JPTElOSywJCQkJLyogNDcgTWljcm9MaW5rIG1vZGVt cyAqLwotICAgICZDQVJESU5BTCwJCQkJLyogNDggQ2FyZGluYWwgKi8KLSAgICAmR0VORVJJQywJ CQkJLyogNDkgR2VuZXJpYyBoaWdoLXNwZWVkICovCi0gICAgJlhKQUNLLAkJCQkvKiA1MCBNZWdh aGVydHotWGphY2sgKi8KLSAgICAmU1BJUklUSUksCQkJCS8qIDUxIFF1aWNrQ29tbSBTcGlyaXQg SUkgKi8KLSAgICAmTU9OVEFOQSwJCQkJLyogNTIgTW90b3JvbGEgTW9udGFuYSAqLwotICAgICZD T01QQVEsCQkJCS8qIDUzIENvbXBhcSBEYXRhK0ZheCAqLwotICAgICZGVUpJVFNVLAkJCQkvKiA1 NCBGdWppdHN1ICovCi0gICAgJk1IWkFUVCwJCQkJLyogNTUgTWVnYWhlcnR6IEFUJlQgVi4zNCAq LwotICAgICZTVVBSQVNPTiwJCQkJLyogNTYgU3VwcmFzb25pYyAqLwotICAgICZCRVNUREFUQSwJ CQkJLyogNTcgQmVzdCBEYXRhICovCi0gICAgJkFUVDE5MDAsCQkJCS8qIDU4IEFUJlQgU2VjdXJl IERhdGEgU1RVIElJSSAxOTAwICovCi0gICAgJkFUVDE5MTAsCQkJCS8qIDU5IEFUJlQgU2VjdXJl IERhdGEgU1RVIElJSSAxOTEwICovCi0gICAgJktFRVBJTlRPVUNILAkJCS8qIDYwIEFUJlQgS2Vl cGluVG91Y2ggKi8KLSAgICAmVVNSWDIsCQkJCS8qIDYxIFVTUiBYSi0xNTYwIFgyICovCi0gICAg JlJPTE1fQVQsCQkJCS8qIDYyIFJvbG0gd2l0aCBBVCBjb21tYW5kIHNldCAqLwotICAgICZBVExB UywJCQkJLyogNjMgQXRsYXMgLyBOZXdjb20gKi8KLSAgICAmQ09ERVgsCQkJCS8qIDY0IE1vdG9y b2xhIENvZGV4ICovCi0gICAgJk1UNTYzNFpQWCwJCQkJLyogNjUgTXVsdGl0ZWNoIE1UNTYzNFpQ WCAqLwotICAgICZVTElOS1YyNTAsCQkJCS8qIDY2IE1pY3JvbGluayBWLjI1MCA1NksgKi8KLSAg ICAmSVRVVFYyNTAsCQkJCS8qIDY3IEdlbmVyaWMgSVRVLVQgVi4yNTAgKi8KLSAgICAmUldWOTAs CQkJCS8qIDY4IFJvY2t3ZWxsIFYuOTAgNTZLICovCi0gICAgJlNVUFJBWCwJCQkJLyogNjkgRGlh bW9uZCBTdXByYSBFeHByZXNzIFYuOTAgKi8KLSAgICAmTFVDRU5ULAkJCQkvKiA3MCBMdWNlbnQg VmVudXMgY2hpcHNldCAqLwotICAgICZQQ1RFTCwJCQkJLyogNzEgUENUZWwgKi8KLSAgICAmQ09O RVhBTlQsCQkJCS8qIDcyIENvbmV4YW50ICovCi0gICAgJlpPT01WMzQsCQkJCS8qIDczIFpvb20g Vi4zNCAqLwotICAgICZaT09NVjkwLAkJCQkvKiA3NCBab29tIFYuOTAgKi8KLSAgICAmWk9PTVY5 MiwJCQkJLyogNzUgWm9vbSBWLjkyICovCi0gICAgJk1PVFNNNTYJCQkJLyogNzYgTW90b3JvbGEg U001NiBjaGlwc2V0ICovCi0jZW5kaWYgLyogTUlOSURJQUwgKi8KLX07Ci0vKgotICogRGVjbGFy ZSBtb2RlbSBuYW1lcyBhbmQgYXNzb2NpYXRlZCBudW1iZXJzIGZvciBjb21tYW5kIHBhcnNpbmcs Ci0gKiBhbmQgYWxzbyBmb3IgZG9pbmcgbnVtYmVyLXRvLW5hbWUgdHJhbnNsYXRpb24uCi0gKgot ICogVGhlIGVudHJpZXMgbXVzdCBiZSBpbiBhbHBoYWJldGljYWwgb3JkZXIgYnkgbW9kZW0gbmFt ZS4KLSAqLwotc3RydWN0IGtleXRhYiBtZG10YWJbXSA9IHsKLSNpZm5kZWYgTUlOSURJQUwKLSAg ICAiM2NvbS11c3ItbWVnYWhlcnR6LTU2ayIsIG5fVVNSWDIsICBDTV9JTlYsCi0gICAgImFjZXIt djkwIiwgICAgICAgICBuX1JXVjkwLCAgICAgICAgTV9BTElBUywKLSAgICAiYXRsYXMtbmV3Y29t LTMzNjAwaWZ4QyIsIG5fQVRMQVMsICAwLAotICAgICJhdHQtMTkwMC1zdHUtaWlpIiwgbl9BVFQx OTAwLCAgICAgIDAsCi0gICAgImF0dC0xOTEwLXN0dS1paWkiLCBuX0FUVDE5MTAsICAgICAgMCwK LSAgICAiYXR0LTczMDAiLAkJbl9BVFRVUEMsCTAsCi0gICAgImF0dC1kYXRhcG9ydCIsCW5fREFU QVBPUlQsCTAsCi0gICAgImF0dC1kdGRtIiwJCW5fQVRURFRETSwJMCwKLSAgICAiYXR0LWlzbiIs ICAgICAgICAgIG5fQVRUSVNOLCAgICAgICAwLAotICAgICJhdHQta2VlcGludG91Y2giLCAgbl9L RUVQSU5UT1VDSCwgIDAsCi0gICAgImF0dC1zd2l0Y2hlZC1uZXQiLCBuX0FUVE1PREVNLAkwLAot Ci0gICAgImF0dDczMDAiLAkJbl9BVFRVUEMsCUNNX0lOViwJLyogb2xkIG5hbWUgKi8KLSAgICAi YXR0ZHRkbSIsCQluX0FUVERURE0sCUNNX0lOViwJLyogb2xkIG5hbWUgKi8KLSAgICAiYXR0aXNu IiwgICAgICAgICAgIG5fQVRUSVNOLCAgICAgICBDTV9JTlYsCS8qIG9sZCBuYW1lICovCi0gICAg ImF0dG1vZGVtIiwJCW5fQVRUTU9ERU0sCUNNX0lOViwJLyogb2xkIG5hbWUgKi8KLQotICAgICJi ZXN0ZGF0YSIsICAgICAgICAgbl9CRVNUREFUQSwgICAgIDAsCi0gICAgImJvY2EiLAkJbl9CT0NB LAkJMCwKLSAgICAiY2FyZGluYWwiLCAgICAgICAgIG5fQ0FSRElOQUwsICAgICAwLAotI2VuZGlm IC8qIE1JTklESUFMICovCi0gICAgImNjaXR0LXYyNWJpcyIsCW5fQ0NJVFQsCUNNX0lOViwgLyog TmFtZSBjaGFuZ2VkIHRvIElUVS1UICovCi0jaWZuZGVmIE1JTklESUFMCi0jaWZkZWYgT0xETU9E RU1TCi0gICAgImNlcm1ldGVrIiwJCW5fQ0VSTUVURUssCU1fT0xELAotI2VuZGlmIC8qIE9MRE1P REVNUyAqLwotICAgICJjb21wYXEiLCAgICAgICAgICAgbl9DT01QQVEsICAgICAgIDAsCi0jaWZk ZWYgT0xETU9ERU1TCi0gICAgImNvbmNvcmQiLAkJbl9DT05DT1JELAlNX09MRCwKLSNlbmRpZiAv KiBPTERNT0RFTVMgKi8KLSAgICAiY29uZXhhbnQiLCAgICAgICAgIG5fQ09ORVhBTlQsICAgICAw LAotICAgICJjb3VyaWVyIiwgICAgICAgICAgbl9VU1IsICAgICAgICAgIENNX0lOViwKLSAgICAi ZGF0YXBvcnQiLAkJbl9EQVRBUE9SVCwJQ01fSU5WLAkvKiA9PSBhdHQtZGF0YXBvcnQgKi8KLSNp ZmRlZiBPTERNT0RFTVMKLSAgICAiZGYwMy1hYyIsCQluX0RGMDMsCQlNX09MRCwKLSAgICAiZGYx MDAtc2VyaWVzIiwJbl9ERjEwMCwJTV9PTEQsCi0gICAgImRmMjAwLXNlcmllcyIsCW5fREYyMDAs CU1fT0xELAotI2VuZGlmIC8qIE9MRE1PREVNUyAqLwotICAgICJkaWdpdGVsLWR0MjIiLAluX0RJ R0lURUwsCTAsCi0jZW5kaWYgLyogTUlOSURJQUwgKi8KLSAgICAiZGlyZWN0IiwJCTAsCQlDTV9J TlYsCS8qIFN5bm9ueW0gZm9yIE5PTkUgKi8KLSNpZm5kZWYgTUlOSURJQUwKLSAgICAiZnVqaXRz dSIsICAgICAgICAgIG5fRlVKSVRTVSwgICAgICAwLAotICAgICJnYXRld2F5LXRlbGVwYXRoIiwg bl9URUxFUEFUSCwgICAgIDAsCi0jaWZkZWYgT0xETU9ERU1TCi0gICAgImdkYy0yMTJhL2VkIiwJ bl9HREMsCQlNX09MRCwKLSAgICAiZ2UiLCAgICAgICAgICAgICAgIG5fR0VORVJJQywJQ01fSU5W fENNX0FCUiwKLSAgICAiZ2VuIiwgICAgICAgICAgICAgIG5fR0VORVJJQywJQ01fSU5WfENNX0FC UiwKLSAgICAiZ2VuZGF0YWNvbW0iLAluX0dEQywJCUNNX0lOViwJLyogU3lub255bSBmb3IgR0RD ICovCi0jZW5kaWYgLyogT0xETU9ERU1TICovCi0jZW5kaWYgLyogTUlOSURJQUwgKi8KLSAgICAi Z2VuZSIsICAgICAgICAgICAgIG5fR0VORVJJQywgICAgICBDTV9JTlZ8Q01fQUJSLAotICAgICJn ZW5lcmljIiwgICAgICAgICAgbl9HRU5FUklDLCAgICAgIDAsCi0gICAgImdlbmVyaWMtaGlnaC1z cGVlZCIsbl9HRU5FUklDLCAgICAgQ01fSU5WLAotICAgICJoIiwgCSAgIAluX0hBWUVTLAlDTV9J TlZ8Q01fQUJSLAotICAgICJoYSIsIAkgICAJbl9IQVlFUywJQ01fSU5WfENNX0FCUiwKLSAgICAi aGF5IiwgICAgCQluX0hBWUVTLAlDTV9JTlZ8Q01fQUJSLAotICAgICJoYXllIiwgCSAgIAluX0hB WUVTLAlDTV9JTlZ8Q01fQUJSLAotICAgICJoYXllcyIsICAgIAluX0hBWUVTLAlDTV9JTlZ8Q01f QUJSLCAvKiBIYXllcyAyNDAwICovCi0jaWZuZGVmIE1JTklESUFMCi0gICAgImhheWVzLTEyMDAi LAluX0hfMTIwMCwJMCwKLSNlbmRpZiAvKiBNSU5JRElBTCAqLwotICAgICJoYXllcy0yNDAwIiwJ bl9IQVlFUywJMCwKLSNpZm5kZWYgTUlOSURJQUwKLSAgICAiaGF5ZXMtaGlnaC1zcGVlZCIsIG5f SF9BQ0NVUkEsICAgICAwLAotICAgICJoYXllcy1hY2N1cmEiLCAgICAgbl9IX0FDQ1VSQSwgICAg IENNX0lOViwKLSAgICAiaGF5ZXMtb3B0aW1hIiwgICAgIG5fSF9BQ0NVUkEsICAgICBDTV9JTlYs Ci0gICAgImhheWVzLXVsdHJhIiwJbl9IX1VMVFJBLAlDTV9JTlYsCi0gICAgImhzdC1jb3VyaWVy IiwgICAgICBuX1VTUiwgICAgICAgICAgQ01fSU5WLAkvKiBTeW5vbnltIGZvciBDT1VSSUVSICov Ci0gICAgImludGVsIiwJCW5fSU5URUwsICAgICAgICAwLAotI2VuZGlmIC8qIE1JTklESUFMICov Ci0KLSAgICAiaXR1LXQtdjI1MCIsICAgICAgIG5fSVRVVFYyNTAsICAgICAwLAotICAgICJpdHUt dC12MjViaXMiLAluX0NDSVRULAkwLAkvKiBOZXcgbmFtZSBmb3IgQ0NJVFQgKi8KLSAgICAiaXR1 LXQtdjI1dGVyL3YyNTAiLG5fSVRVVFYyNTAsICAgICBDTV9JTlYsCi0KLSNpZm5kZWYgTUlOSURJ QUwKLSAgICAibHVjZW50IiwgICAgICAgICAgIG5fTFVDRU5ULCAgICAgIDAsCi0gICAgIm1heHRl Y2giLAkJbl9NQVhURUNILCAgICAgMCwKLQotICAgICJtZWdhaGVydHotYXR0LXYzNCIsICAgIG5f TUhaQVRULCAgMCwgLyogTWVnYWhlcnR6ZXMgKi8KLSAgICAibWVnYWhlcnR6LXhqYWNrIiwgICAg ICBuX1hKQUNLLCAgIENNX0lOVnxDTV9BQlIsCi0gICAgIm1lZ2FoZXJ0ei14amFjay0zMy42Iiwg bl9YSkFDSywgICAwLAotICAgICJtZWdhaGVydHoteGphY2stNTZrIiwgIG5fVVNSWDIsICAgMCwg LyogM0NPTS9VU1IvTWVnYWhlcnR6IDMzLjYgUEMgQ2FyZCAqLwotCi0gICAgIm1pIiwJCW5fTUlD Uk9DT00sCUNNX0lOVnxDTV9BQlIsCi0gICAgIm1pYyIsCQluX01JQ1JPQ09NLAlDTV9JTlZ8Q01f QUJSLAotICAgICJtaWNyIiwJCW5fTUlDUk9DT00sCUNNX0lOVnxDTV9BQlIsCi0gICAgIm1pY3Jv IiwJCW5fTUlDUk9DT00sCUNNX0lOVnxDTV9BQlIsCi0gICAgIm1pY3JvYyIsCQluX01JQ1JPQ09N LAlDTV9JTlZ8Q01fQUJSLAotICAgICJtaWNyb2NvIiwJCW5fTUlDUk9DT00sCUNNX0lOVnxDTV9B QlIsCi0gICAgIm1pY3JvY29tIiwJCW5fTUlDUk9DT00sCUNNX0lOVnxDTV9BQlIsCi0gICAgIm1p Y3JvY29tLWF0LW1vZGUiLAluX1VDT01fQVQsCTAsIC8qIE1pY3JvY29tIERlc2tQb3J0ZSwgZXRj ICovCi0gICAgIm1pY3JvY29tLXN4LW1vZGUiLAluX01JQ1JPQ09NLAkwLCAvKiBNaWNyb2NvbSBB WCxRWCxTWCwgbmF0aXZlIG1vZGUgKi8KLSAgICAibWljcm9saW5rIiwgICAgICAgIG5fTUlDUk9M SU5LLCAgICAwLAotICAgICJtaWNyb2xpbmstdjI1MCIsICAgbl9VTElOS1YyNTAsICAgIDAsCi0g ICAgIm1vdG9yb2xhLWNvZGV4IiwgICBuX0NPREVYLCAgICAgICAgMCwKLSAgICAibW90b3JvbGEt ZmFzdGFsayIsIG5fTU9UT1JPTEEsCTAsCi0gICAgIm1vdG9yb2xhLWxpZmVzdHlsZSIsbl9NT1RP Uk9MQSwJMCwKLSAgICAibW90b3JvbGEtbW9udGFuYSIsIG5fTU9OVEFOQSwJMCwKLSAgICAibW90 b3JvbGEtc201Ni12OTAiLG5fTU9UU001NiwJMCwKLSAgICAibXQ1NjM0enB4IiwgICAgICAgIG5f TVQ1NjM0WlBYLCAgICAwLAotICAgICJtdWx0aXRlY2giLAluX01VTFRJLAkwLAotICAgICJtd2F2 ZSIsCQluX01XQVZFLAkwLAotI2VuZGlmIC8qIE1JTklESUFMICovCi0gICAgIm5vbmUiLCAgICAg ICAgICAgICAwLCAgICAgICAgICAgICAgMCwKLSNpZm5kZWYgTUlOSURJQUwKLSNpZm5kZWYgT0xE VEJDT0RFCi0gICAgIm9sZC10ZWxlYml0IiwgICAgICBuX1RFTEVCSVQsICAgICAgMCwKLSNlbmRp ZiAvKiBPTERUQkNPREUgKi8KLSAgICAicGN0ZWwiLCAgICAgICAgICAgIG5fUENURUwsICAgICAg ICAwLAotI2lmZGVmIE9MRE1PREVNUwotICAgICJwZW5yaWwiLAkJbl9QRU5SSUwsCU1fT0xELAot I2VuZGlmIC8qIE9MRE1PREVNUyAqLwotICAgICJwcGkiLCAgICAgICAgICAgICAgbl9QUEksCQkw LAotI2lmZGVmIE9MRE1PREVNUwotICAgICJyYWNhbHZhZGljIiwJbl9SQUNBTCwJTV9PTEQsCi0j ZW5kaWYgLyogT0xETU9ERU1TICovCi0gICAgInJvY2t3ZWxsLXYzMiIsCW5fUldWMzIsCTAsCi0g ICAgInJvY2t3ZWxsLXYzMmJpcyIsCW5fUldWMzJCLAkwLAotICAgICJyb2Nrd2VsbC12MzQiLAlu X1JXVjM0LAkwLAotICAgICJyb2Nrd2VsbC12OTAiLAluX1JXVjkwLAkwLAotICAgICJyb2xtIiwg ICAgICAgICAgICAgbl9ST0xNLAkJQ01fSU5WfENNX0FCUiwKLSAgICAicm9sbS0yNDRwYyIsICAg ICAgIG5fUk9MTUFULCAgICAgICAwLAotICAgICJyb2xtLTYwMC1zZXJpZXMiLCAgbl9ST0xNQVQs ICAgICAgIDAsCi0gICAgInJvbG0tZGNtIiwJCW5fUk9MTSwJCTAsCi0gICAgInNtYXJ0bGluay12 OTAiLCAgICBuX1VTUiwgICAgICAgICAgTV9BTElBUywKLSAgICAic3Bpcml0LWlpIiwgICAgICAg IG5fU1BJUklUSUksICAgICAwLAotICAgICJzcG9ydHN0ZXIiLCAgICAgICAgbl9VU1IsICAgICAg ICAgIE1fQUxJQVMsCi0gICAgInN1cCIsCSAgICAgICAgbl9TVVBSQSwJQ01fSU5WfENNX0FCUiwK LSAgICAic3VwciIsCSAgICAgICAgbl9TVVBSQSwJQ01fSU5WfENNX0FCUiwKLSAgICAic3VwcmEi LAkgICAgICAgIG5fU1VQUkEsCUNNX0lOVnxDTV9BQlIsCi0gICAgInN1cHJhLWV4cHJlc3Mtdjkw IixuX1NVUFJBWCwgICAgICAgMCwKLSAgICAic3VwcmFmYXhtb2RlbSIsCW5fU1VQUkEsCTAsCi0g ICAgInN1cHJhc29uaWMiLAluX1NVUFJBU09OLAkwLAotI2lmZGVmIENLX1RBUEkKLSAgICAidGFw aSIsCQluX1RBUEksCQkwLAotI2VuZGlmIC8qIENLX1RBUEkgKi8KLSAgICAidGUiLCAgICAgICAg ICAgICAgIG5fVEJORVcsICAgICAgICBDTV9JTlZ8Q01fQUJSLAotICAgICJ0ZWwiLCAgICAgICAg ICAgICAgbl9UQk5FVywgICAgICAgIENNX0lOVnxDTV9BQlIsCi0gICAgInRlbGViaXQiLCAgICAg ICAgICBuX1RCTkVXLCAgICAgICAgMCwKLSAgICAidGVsZXBhdGgiLCAgICAgICAgIG5fVEVMRVBB VEgsICAgICBDTV9JTlYsCi0jZW5kaWYgLyogTUlOSURJQUwgKi8KLSAgICAidW5rbm93biIsCQlu X1VOS05PV04sCTAsCi0gICAgInVzZXItZGVmaW5lZCIsICAgICBuX1VERUYsCQkwLAotI2lmbmRl ZiBNSU5JRElBTAotCi0gICAgInVzciIsICAgICAgICAgICAgICAgbl9VU1IsICAgICAgICAgQ01f SU5WfENNX0FCUiwKLSAgICAidXNyLTIxMmEiLAkJIG5fSEFZRVMsCUNNX0lOVnxNX0FMSUFTLAot ICAgICJ1c3ItY291cmllciIsICAgICAgIG5fVVNSLCAgICAgICAgIENNX0lOViwKLSAgICAidXNy LW1lZ2FoZXJ0ei01NmsiLCBuX1VTUlgyLCAgICAgICAwLAotICAgICJ1c3Itc3BvcnRzdGVyIiwg ICAgIG5fVVNSLCAgICAgICAgIENNX0lOViwKLSAgICAidXNyLXhqMTU2MC14MiIsICAgICBuX1VT UlgyLCAgICAgICBDTV9JTlYsCi0gICAgInVzcm9ib3RpY3MiLCAgICAgICAgbl9VU1IsICAgICAg ICAgMCwKLQotICAgICJ2MjViaXMiLAkJbl9DQ0lUVCwJQ01fSU5WLCAvKiBOYW1lIGNoYW5nZWQg dG8gSVRVLVQgKi8KLSNpZmRlZiBPTERNT0RFTVMKLSAgICAidmVudGVsIiwJCW5fVkVOVEVMLAlN X09MRCwKLSNlbmRpZiAvKiBPTERNT0RFTVMgKi8KLSAgICAiem9sdHJpeC12MzQiLAluX1pPTFRS SVgsCTAsCi0gICAgInpvbHRyaXgtaHNwLXY5MCIsICBuX1BDVEVMLCAgICAgICAgTV9BTElBUywK LSAgICAiem9sdHJpeC1oY2YtdjkwIiwgIG5fSVRVVFYyNTAsICAgICAwLAotICAgICJ6b28iLAkJ bl9aT09NLAkJQ01fSU5WfENNX0FCUiwKLSAgICAiem9vbSIsCQluX1pPT00sCQlDTV9JTlZ8Q01f QUJSLAotICAgICJ6b29tLXYzMmJpcyIsCW5fWk9PTSwJCTAsCi0gICAgInpvb20tdjM0IiwJCW5f Wk9PTVYzNCwJMCwKLSAgICAiem9vbS12OTAiLAkJbl9aT09NVjkwLAkwLAotICAgICJ6b29tLXY5 MiIsCQluX1pPT01WOTIsCTAsCi0gICAgInp5eGVsIiwJCW5fWllYRUwsCTAsCi0jZW5kaWYgLyog TUlOSURJQUwgKi8KLSAgICAiIiwgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAwCi19 OwotaW50IG5tZG0gPSAoc2l6ZW9mKG1kbXRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0g MTsgLyogTnVtYmVyIG9mIG1vZGVtcyAqLwotCi0jZGVmaW5lIENPTk5FQ1RFRCAxCQkJLyogRm9y IGNvbXBsZXRpb24gc3RhdHVzICovCi0jZGVmaW5lIERfRkFJTEVEICAyCi0jZGVmaW5lIERfUEFS VElBTCAzCi0KLXN0YXRpYyBpbnQgdHJpZXMgPSAwOwotc3RhdGljIGludCBtZG1lY2hvID0gMDsJ CQkvKiBBc3N1bWUgbW9kZW0gZG9lcyBub3QgZWNobyAqLwotCi1zdGF0aWMgY2hhciAqcDsJCQkJ LyogRm9yIGNvbW1hbmQgc3RyaW5ncyAmIG1lc3NhZ2VzICovCi0KLSNkZWZpbmUgTEJVRkwgMjAw Ci1zdGF0aWMgY2hhciBsYnVmW0xCVUZMKzRdOwotY2hhciBtb2RlbW1zZ1tMQlVGTCs0XSA9IHsg TlVMLCBOVUwgfTsJLyogRElBTCByZXNwb25zZSBmcm9tIG1vZGVtICovCi0KLSNpZmRlZiBEWU5B TUlDCi0jZGVmaW5lIFJCVUZMIDI1Ngotc3RhdGljIGNoYXIgKnJidWYgPSBOVUxMOwotI2Vsc2UK LSNkZWZpbmUgUkJVRkwgNjMKLXN0YXRpYyBjaGFyIHJidWZbUkJVRkwrMV07Ci0jZW5kaWYgLyog RFlOQU1JQyAqLwotCi0jaWZkZWYgRFlOQU1JQwotI2RlZmluZSBGVUxMTlVNTCAyNTYKLWNoYXIg KmZidWYgPSBOVUxMOwkJCS8qIEZvciBmdWxsIChwcmVmaXhlZCkgcGhvbmUgbnVtYmVyICovCi0j ZWxzZQotI2RlZmluZSBGVUxMTlVNTCAxMDAKLWNoYXIgZmJ1ZltGVUxMTlVNTF07Ci0jZW5kaWYg LyogRFlOQU1JQyAqLwotCi1zdGF0aWMgY2tqbXBidWYgc2pidWY7Ci0KLSNpZmRlZiBDS19BTlNJ Qwotc3RhdGljIFNJR1RZUCAoKnNhdmFscm0pKGludCk7CS8qIEZvciBzYXZpbmcgYWxhcm0gaGFu ZGxlciAqLwotc3RhdGljIFNJR1RZUCAoKnNhdmludCkoaW50KTsJLyogRm9yIHNhdmluZyBpbnRl cnJ1cHQgaGFuZGxlciAqLwotI2Vsc2UKLXN0YXRpYyBTSUdUWVAgKCpzYXZhbHJtKSgpOwkvKiBG b3Igc2F2aW5nIGFsYXJtIGhhbmRsZXIgKi8KLXN0YXRpYyBTSUdUWVAgKCpzYXZpbnQpKCk7CS8q IEZvciBzYXZpbmcgaW50ZXJydXB0IGhhbmRsZXIgKi8KLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot Ci0jaWZkZWYgQ0tMT0dESUFMCi1zdGF0aWMgVk9JRAotZG9sb2dkaWFsKHMpIGNoYXIgKnM7IHsK LSAgICBjaGFyIGJ1ZjJbMTZdOwotICAgIGNoYXIgKiByID0gTlVMTDsKLSAgICBpbnQgeCwgbSwg bjsKLSAgICBleHRlcm4gY2hhciBjeGxvZ2J1ZltdLCB1aWRidWZbXSwgbXlob3N0W107Ci0KLSAg ICBpZiAoIXMpIHMgPSAiIjsKLSAgICBpZiAoKHggPSBzdHJsZW4ocykpID4gMCkgewkJLyogUmVw bGFjZSBzcGFjZXMgYnkgdW5kZXJzY29yZXMgKi8KLQlyID0gKGNoYXIgKiltYWxsb2MoeCsxKTsK LQlpZiAocikgewotCSAgICBpbnQgaTsKLQkgICAgZm9yIChpID0gMDsgaSA8PSB4OyBpKyspIHsK LQkJaWYgKHNbaV0gIT0gMCAmJiBzW2ldIDw9IFNQKQotCQkgIHJbaV0gPSAnXyc7Ci0JCWVsc2UK LQkJICByW2ldID0gc1tpXTsKLQkgICAgfQotCSAgICBzID0gcjsKLQl9Ci0gICAgfQotICAgIHAg PSBja2RhdGUoKTsKLSAgICBuID0gY2tzdHJuY3B5KGN4bG9nYnVmLHAsQ1hMT0dCVUZMKTsKLSAg ICBpZiAoIXVpZGJ1ZlswXSkgewotCWRlYnVnKEYxMDAsImRvbG9nZGlhbCB1aWRidWYgZW1wdHki LCIiLDApOwotCWNrc3RybmNweSh1aWRidWYsKGNoYXIgKil3aG9hbWkoKSxVSURCVUZMRU4pOwot ICAgIH0KLSAgICBtID0gc3RybGVuKHVpZGJ1Zikrc3RybGVuKG15aG9zdCkrc3RybGVuKHR0bmFt ZSkrc3RybGVuKHMpK3N0cmxlbihidWYyKSszMjsKLSAgICBpZiAobittIDwgQ1hMT0dCVUZMLTEp IHsKLQlwID0gY3hsb2didWYrbjsKLQlpZiAoZGlhbGxjYyAmJiBkaWFsbGFjKSB7Ci0JICAgIGJ1 ZjJbMF0gPSAnKyc7Ci0JICAgIGNrbWFrbXNnKCZidWYyWzFdLDE1LGRpYWxsY2MsIigiLGRpYWxs YWMsIikiKTsKLQl9IGVsc2UgewotCSAgICBja3N0cm5jcHkoYnVmMiwiVW5rbm93biIsMTYpOwot CX0KLQlzcHJpbnRmKHAsIiAlcyAlcyBUPURJQUwgSD0lcyBEPSVzIE49JXMgTz0lcyAiLAkvKiBz YWZlIChwcmVjaGVja2VkKSAqLwotCQl1aWRidWYsCi0JCWNrZ2V0cGlkKCksCi0JCW15aG9zdCwK LQkJdHRuYW1lLAotCQlzLAotCQlidWYyCi0JCSk7Ci0JZGVidWcoRjExMCwiZG9sb2dkaWFsIGN4 bG9nYnVmIixjeGxvZ2J1ZiwwKTsKLSAgICB9IGVsc2UKLSAgICAgIHNwcmludGYocCwiTE9HRElB TCBCVUZGRVIgT1ZFUkZMT1ciKTsKLSAgICBpZiAocikgZnJlZShyKTsKLX0KLSNlbmRpZiAvKiBD S0xPR0RJQUwgKi8KLQotI2lmbmRlZiBNSU5JRElBTAotCi0jaWZkZWYgQ09NTUVOVAotc3RhdGlj IFZPSUQKLXhjcHkodG8sZnJvbSxsZW4pCQkvKiBDb3B5IHRoZSBnaXZlbiBudW1iZXIgb2YgYnl0 ZXMgKi8KLSAgICByZWdpc3RlciBjaGFyICp0bywgKmZyb207Ci0gICAgcmVnaXN0ZXIgdW5zaWdu ZWQgaW50IGxlbjsgewotCXdoaWxlIChsZW4tLSkgKnRvKysgPSAqZnJvbSsrOwotfQotI2VuZGlm IC8qIENPTU1FTlQgKi8KLSNlbmRpZiAvKiBNSU5JRElBTCAqLwotCi1zdGF0aWMgU0lHVFlQCi0j aWZkZWYgQ0tfQU5TSUMKLWRpYWx0aW1lKGludCBmb28pCQkJLyogVGltZXIgaW50ZXJydXB0IGhh bmRsZXIgKi8KLSNlbHNlCi1kaWFsdGltZShmb28pIGludCBmb287CQkJLyogVGltZXIgaW50ZXJy dXB0IGhhbmRsZXIgKi8KLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogZGlhbHRpbWUgKi8gewot Ci0gICAgZmFpbF9jb2RlID0gRl9USU1FOwkJCS8qIEZhaWx1cmUgcmVhc29uID0gdGltZW91dCAq LwotICAgIGRlYnVnKEYxMDAsImRpYWx0aW1lIGNhdWdodCBTSUdBTFJNIiwiIiwwKTsKLSNpZmRl ZiBCRUJPWAotI2lmZGVmIEJFX0RSXzcKLSAgICBhbGFybV9leHBpcmVkKCk7Ci0jZW5kaWYgLyog QkVfRFJfNyAqLwotI2VuZGlmIC8qIEJFQk9YICovCi0jaWZkZWYgT1MyCi0gICAgc2lnbmFsKFNJ R0FMUk0sIGRpYWx0aW1lKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSNpZmRlZiBfX0VNWF9fCi0gICAg c2lnbmFsKFNJR0FMUk0sIFNJR19BQ0spOwkJLyogTmVlZGVkIGZvciBPUy8yICovCi0jZW5kaWYg LyogX19FTVhfXyAqLwotCi0jaWZkZWYgT1NLCQkJCS8qIE9TLTkgKi8KLS8qCi0gIFdlIGFyZSBp biBhbiBpbnRlcmNlcHQgcm91dGluZSBidXQgZG8gbm90IHBlcmZvcm0gYSBGJFJURSAoZG9uZSBp bXBsaWNpdGx5Ci0gIGJ5IFJUUyksIHNvIHdlIGhhdmUgdG8gZGVjcmVtZW50IHRoZSBzaWdtYXNr IGFzIEYkUlRFIGRvZXMuICBXYXJuaW5nOgotICBsb25nanVtcCBvbmx5IHJlc3RvcmVzIHRoZSBD UFUgcmVnaXN0ZXJzLCBOT1QgdGhlIEZQVSByZWdpc3RlcnMuICBTbywgZG9uJ3QKLSAgdXNlIEZQ VSBhdCBhbGwgb3IgYXQgbGVhc3QgZG9uJ3QgdXNlIGNvbW1vbiBGUFUgKGRvdWJsZSBvciBmbG9h dCkgcmVnaXN0ZXIKLSAgdmFyaWFibGVzLgotKi8KLSAgICBzaWdtYXNrKC0xKTsKLSNlbmRpZiAv KiBPU0sgKi8KLQotI2lmZGVmIE5UU0lHCi0gICAgaWYgKGZvbyA9PSBTSUdBTFJNKQotICAgICAg UG9zdEFsYXJtU2lnU2VtKCk7Ci0gICAgZWxzZQotICAgICAgUG9zdEN0cmxDU2VtKCk7Ci0jZWxz ZSAvKiBOVFNJRyAqLwotI2lmZGVmIE5UCi0gICAgY2tsb25nam1wKGNramFkZHIoc2pidWYpLDEp OwotI2Vsc2UgLyogTlQgKi8KLSAgICBja2xvbmdqbXAoc2pidWYsMSk7Ci0jZW5kaWYgLyogTlQg Ki8KLSNlbmRpZiAvKiBOVFNJRyAqLwotICAgIC8qIE5PVFJFQUNIRUQgKi8KLSAgICBTSUdSRVRV Uk47Ci19Ci0KLXN0YXRpYyBTSUdUWVAKLSNpZmRlZiBDS19BTlNJQwotZGlhbGludChpbnQgZm9v KQkJCS8qIEtleWJvYXJkIGludGVycnVwdCBoYW5kbGVyICovCi0jZWxzZQotZGlhbGludChmb28p IGludCBmb287Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGRpYWxpbnQgKi8gewotICAgIGZh aWxfY29kZSA9IEZfSU5UOwotICAgIGRlYnVnKEYxMDAsImRpYWxpbnQgY2F1Z2h0IFNJR0lOVCIs IiIsMCk7Ci0jaWZkZWYgT1MyCi0gICAgc2lnbmFsKFNJR0lOVCwgZGlhbGludCk7Ci0gICAgZGVi dWcoRjEwMCwiZGlhbGludCgpIFNJR0lOVCBjYXVnaHQgLS0gZGlhbGludCByZXN0b3JlZCIsIiIs MCkgOwotI2VuZGlmIC8qIE9TMiAqLwotI2lmZGVmIF9fRU1YX18KLSAgICBzaWduYWwoU0lHSU5U LCBTSUdfQUNLKTsJCS8qIE5lZWRlZCBmb3IgT1MvMiAqLwotI2VuZGlmIC8qIF9fRU1YX18gKi8K LSNpZmRlZiBPU0sJCQkJLyogT1MtOSwgc2VlIGNvbW1lbnQgaW4gZGlhbHRpbWUoKSAqLwotICAg IHNpZ21hc2soLTEpOwotI2VuZGlmIC8qIE9TSyAqLwotI2lmZGVmIE5UU0lHCi0gICAgUG9zdEN0 cmxDU2VtKCkgOwotI2lmZGVmIENLX1RBUEkKLSAgICBQb3N0VEFQSUNvbm5lY3RTZW0oKTsKLSAg ICBQb3N0VEFQSUFuc3dlclNlbSgpOwotI2VuZGlmIC8qIENLX1RBUEkgKi8KLSNlbHNlIC8qIE5U U0lHICovCi0jaWZkZWYgTlQKLSAgICBja2xvbmdqbXAoY2tqYWRkcihzamJ1ZiksMSk7Ci0jZWxz ZSAvKiBOVCAqLwotICAgIGNrbG9uZ2ptcChzamJ1ZiwxKTsKLSNlbmRpZiAvKiBOVCAqLwotI2Vu ZGlmIC8qIE5UICovCi0gICAgU0lHUkVUVVJOOwotfQotCi0vKgotICBSb3V0aW5lIHRvIHJlYWQg YSBjaGFyYWN0ZXIgZnJvbSBjb21tdW5pY2F0aW9uIGRldmljZSwgaGFuZGxpbmcgVEVMTkVUCi0g IHByb3RvY29sIG5lZ290aWF0aW9ucyBpbiBjYXNlIHdlJ3JlIGNvbm5lY3RlZCB0byB0aGUgbW9k ZW0gdGhyb3VnaCBhCi0gIFRDUC9JUCBURUxORVQgbW9kZW0gc2VydmVyLgotKi8KLXN0YXRpYyBp bnQKLWRkaW5jKG4pIGludCBuOyB7Ci0jaWZkZWYgVE5DT0RFCi0gICAgaW50IGMgPSAwOwotICAg IGludCBkb25lID0gMDsKLSAgICBkZWJ1ZyhGMTAxLCJkZGluYyBlbnRyeSBuIiwiIixuKTsKLSAg ICB3aGlsZSAoIWRvbmUpIHsKLQljID0gdHRpbmMobik7Ci0JLyogZGVidWcoRjAwMCwiZGRpbmMi LCIiLGMpOyAqLwotCWlmIChjIDwgMCkgcmV0dXJuKGMpOwotI2lmbmRlZiBPUzIKLQlpZiAoKGMg PT0gSUFDKSAmJiBuZXR3b3JrICYmIElTX1RFTE5FVCgpKSB7Ci0JICAgIHN3aXRjaCAodG5fZG9v cCgoQ0hBUikoYyAmIDB4ZmYpLGR1cGxleCx0dGluYykpIHsKLQkgICAgICBjYXNlIDI6IGR1cGxl eCA9IDA7IGNvbnRpbnVlOwotCSAgICAgIGNhc2UgMTogZHVwbGV4ID0gMTsKLQkgICAgICBkZWZh dWx0OiBjb250aW51ZTsKLQkgICAgfQotCX0gZWxzZSBkb25lID0gMTsKLSNlbHNlIC8qIE9TMiAq LwotCWRvbmUgPSAhKGMgPT0gSUFDICYmIG5ldHdvcmsgJiYgSVNfVEVMTkVUKCkpOwotCXNjcmlw dHdydGJ1ZihjKTsJLyogVEVMTkVUIG5lZ290aWF0aW9ucyBoYW5kbGVkIGJ5IGVtdWxhdG9yICov Ci0jZW5kaWYgLyogT1MyICovCi0gICAgfQotICAgIHJldHVybihjICYgMHhmZik7Ci0jZWxzZSAg LyogVE5DT0RFICovCi0gICAgcmV0dXJuKHR0aW5jKG4pKTsKLSNlbmRpZiAvKiBUTkNPREUgKi8K LX0KLQotc3RhdGljIFZPSUQKLXR0c2xvdyhzLG1pbGxpc2VjKSBjaGFyICpzOyBpbnQgbWlsbGlz ZWM7IHsgLyogT3V0cHV0IHMtbC1vLXctbC15ICovCi0jaWZkZWYgVENQU09DS0VUCi0gICAgZXh0 ZXJuIGludCB0bl9ubG0sIHRuX2JfbmxtOwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotICAgIGRl YnVnKEYxMTEsInR0c2xvdyIscyxtaWxsaXNlYyk7Ci0gICAgaWYgKGRpYWxkcHkgJiYgKGR1cGxl eCB8fCAhbWRtZWNobykpIHsgLyogRWNobyB0aGUgY29tbWFuZCBpbiBjYXNlIG1vZGVtICovCi0J cHJpbnRmKCIlc1xuIixzKTsJCS8qIGlzbid0IGVjaG9pbmcgY29tbWFuZHMuICovCi0jaWZkZWYg T1MyCi0JewotCSAgICBjaGFyICpzMiA9IHM7CQkvKiBFY2hvIHRvIGVtdWxhdG9yICovCi0JICAg IHdoaWxlICgqczIpIHsKLQkJc2NyaXB0d3J0YnVmKChVU0hPUlQpKnMyKyspOwotCSAgICB9Ci0J ICAgIHNjcmlwdHdydGJ1ZigoVVNIT1JUKUNSKTsKLQkgICAgc2NyaXB0d3J0YnVmKChVU0hPUlQp TEYpOwotCX0KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB9Ci0gICAgZm9yICg7ICpzOyBzKyspIHsK LQl0dG9jKCpzKTsKLSNpZmRlZiBUQ1BTT0NLRVQKLQlpZiAoKnMgPT0gQ1IgJiYgbmV0d29yayAm JiBJU19URUxORVQoKSkgewotCSAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfQklOQVJZKSAmJiB0 bl9ubG0gIT0gVE5MX0NSKQotCSAgICAgIHR0b2MoKGNoYXIpKCh0bl9ubG0gPT0gVE5MX0NSTEYp ID8gTEYgOiBOVUwpKTsKLQkgICAgZWxzZSBpZiAoVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpICYm Ci0JCSAgICAgKHRuX2JfbmxtID09IFROTF9DUkxGIHx8IHRuX2JfbmxtID09IFROTF9DUk5VTCkp Ci0JICAgICAgdHRvYygoY2hhcikoKHRuX2JfbmxtID09IFROTF9DUkxGKSA/IExGIDogTlVMKSk7 Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLQlpZiAobWlsbGlzZWMgPiAwKQot CSAgbXNsZWVwKG1pbGxpc2VjKTsKLSAgICB9Ci19Ci0KLS8qCi0gKiBXYWl0IGZvciBhIHN0cmlu ZyBvZiBjaGFyYWN0ZXJzLgotICoKLSAqIFRoZSBjaGFyYWN0ZXJzIGFyZSB3YWl0ZWQgZm9yIGlu ZGl2aWR1YWxseSwgYW5kIG90aGVyIGNoYXJhY3RlcnMgbWF5Ci0gKiBiZSByZWNlaXZlZCAiaW4g YmV0d2VlbiIuICBUaGlzIG1lcmVseSBndWFyYW50ZWVzIHRoYXQgdGhlIGNoYXJhY3RlcnMKLSAq IEFSRSByZWNlaXZlZCwgYW5kIGluIHRoZSBvcmRlciBzcGVjaWZpZWQuCi0gKi8KLXN0YXRpYyBW T0lECi13YWl0Zm9yKHMpIGNoYXIgKnM7IHsKLSAgICBDSEFSIGMsIHg7Ci0gICAgd2hpbGUgKChj ID0gKnMrKykpIHsJCS8qIHdoaWxlIG1vcmUgY2hhcmFjdGVycyByZW1haW4uLi4gKi8KLQlkbyB7 CQkJCS8qIHdhaXQgZm9yIHRoZSBjaGFyYWN0ZXIgKi8KLQkgICAgeCA9IChDSEFSKSAoZGRpbmMo MCkgJiAwMTc3KTsKLQkgICAgZGVidWcoRjAwMCwiZGlhbCB3YWl0Zm9yIGdvdCIsIiIseCk7Ci0J ICAgIGlmIChkaWFsZHB5KSB7Ci0JCWlmICh4ICE9IExGKSBjb25vYyh4KTsKLQkJaWYgKHggPT0g Q1IpIGNvbm9jKExGKTsKLQkgICAgfQotCX0gd2hpbGUgKHggIT0gYyk7Ci0gICAgfQotfQotCi1z dGF0aWMgaW50Ci1kaWR3ZWdldChzLHIpIGNoYXIgKnMsICpyOyB7CS8qIExvb2tzIGluIHN0cmlu ZyBzIGZvciByZXNwb25zZSByICovCi0gICAgaW50IGxyID0gKGludClzdHJsZW4ocik7CS8qICAw IG1lYW5zIG5vdCBmb3VuZCwgMSBtZWFucyBmb3VuZCBpdCAqLwotICAgIGludCBpOwotICAgIGRl YnVnKEYxMTAsImRpZHdlZ2V0IixyLDApOwotICAgIGRlYnVnKEYxMTAsIiBpbiIscywwKTsKLSAg ICBmb3IgKGkgPSAoaW50KXN0cmxlbihzKS1scjsgaSA+PSAwOyBpLS0pCi0JaWYgKCBzW2ldID09 IHJbMF0gKSBpZiAoICFzdHJuY21wKHMraSxyLGxyKSApIHJldHVybiggMSApOwotICAgIHJldHVy biggMCApOwotfQotCi0KLS8qIFIgRSBTIEUgVCAtLSBSZXNldCBhbGFybXMsIGV0Yy4gb24gZXhp dC4gKi8KLQotc3RhdGljIFZPSUQKLWRyZXNldCgpIHsKLSAgICBkZWJ1ZyhGMTAwLCJkcmVzZXQg cmVzZXR0aW5nIGFsYXJtIGFuZCBzaWduYWwgaGFuZGxlcnMiLCIiLDApOwotICAgIGFsYXJtKDAp OwotICAgIHNpZ25hbChTSUdBTFJNLHNhdmFscm0pOwkJLyogcmVzdG9yZSBhbGFybSBoYW5kbGVy ICovCi0gICAgc2lnbmFsKFNJR0lOVCxzYXZpbnQpOwkJLyogcmVzdG9yZSBpbnRlcnJ1cHQgaGFu ZGxlciAqLwotICAgIGRlYnVnKEYxMDAsImRyZXNldCBhbGFybSBhbmQgc2lnbmFsIGhhbmRsZXJz IHJlc2V0IiwiIiwwKTsKLX0KLQotLyoKLSAgQ2FsbCB0aGlzIHJvdXRpbmUgd2hlbiB0aGUgbW9k ZW0gcmVwb3J0cyB0aGF0IGl0IGhhcyBjb25uZWN0ZWQgYXQgYSBjZXJ0YWluCi0gIHNwZWVkLCBn aXZpbmcgdGhhdCBzcGVlZCBhcyB0aGUgYXJndW1lbnQuICBJZiB0aGUgY29ubmVjdGlvbiBzcGVl ZCBpcyBub3QKLSAgdGhlIHNhbWUgYXMgS2VybWl0J3MgY3VycmVudCBjb21tdW5pY2F0aW9uIHNw ZWVkLCBBTkQgdGhlIG1vZGVtIGludGVyZmFjZQotICBzcGVlZCBpcyBub3QgbG9ja2VkIChpLmUu IERJQUwgU1BFRUQtTUFUQ0hJTkcgaXMgbm90IE9OKSwgdGhlbiBjaGFuZ2UgdGhlCi0gIGRldmlj ZSBzcGVlZCB0byB0aGUgb25lIGdpdmVuLgotKi8KLXN0YXRpYyBWT0lECi0jaWZkZWYgQ0tfQU5T SUMKLXNwZGNoZyhsb25nIHMpCi0jZWxzZQotc3BkY2hnKHMpIGxvbmcgczsKLSNlbmRpZiAvKiBD S19BTlNJQyAqLwotLyogc3BkY2hnICovIHsKLSAgICBpbnQgczI7Ci0gICAgaWYgKCFtZG1zcGQp CQkJLyogSWYgbW9kZW0gaW50ZXJmYWNlIHNwZWVkIGxvY2tlZCwgKi8KLSAgICAgIHJldHVybjsJ CQkJLyogIGRvbid0IGRvIHRoaXMuICovCi0gICAgaWYgKHNwZWVkICE9IHMpIHsJCQkvKiBTcGVl ZHMgZGlmZmVyPyAqLwotCXMyID0gcyAvIDEwTDsJCQkvKiBDb252ZXJ0IHRvIGNwcyBleHByZXNz ZWQgYXMgaW50ICovCi0JaWYgKHR0c3NwZChzMikgPCAwKSB7CQkvKiBDaGFuZ2Ugc3BlZWQuICov Ci0JICAgIHByaW50ZigiIFdBUk5JTkcgLSBzcGVlZCBjaGFuZ2UgdG8gJWxkIGZhaWxlZC5cclxu IixzKTsKLQl9IGVsc2UgewotCSAgICBwcmludGYoIiBTcGVlZCBjaGFuZ2VkIHRvICVsZC5cclxu IixzKTsKLQkgICAgc3BlZWQgPSBzOwkJCS8qIFVwZGF0ZSBnbG9iYWwgc3BlZWQgdmFyaWFibGUg Ki8KLQl9Ci0gICAgfQotfQotCi0vKgotICBEaXNwbGF5IGFsbCBjaGFyYWN0ZXJzIHJlY2VpdmVk IGZyb20gbW9kZW0gZGlhbGVyIHRocm91Z2ggdGhpcyByb3V0aW5lLAotICBmb3IgY29uc2lzdGVu dCBoYW5kbGluZyBvZiBjYXJyaWFnZSByZXR1cm5zIGFuZCBsaW5lZmVlZHMuCi0qLwotc3RhdGlj IFZPSUQKLSNpZmRlZiBDS19BTlNJQwotZGlhbG9jKGNoYXIgYykKLSNlbHNlCi1kaWFsb2MoYykg Y2hhciBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIGRpYWxvYyAqLwkJCQkvKiBEaWFs IE91dHB1dCBDaGFyYWN0ZXIgKi8KLSAgICBpZiAoZGlhbGRweSkgewotCWlmIChjICE9IExGKSBj b25vYyhjKTsJCS8qIERvbid0IGVjaG8gTEYgKi8KLQlpZiAoYyA9PSBDUikgY29ub2MoTEYpOwkJ LyogRWNobyBDUiBhcyBDUkxGICovCi0gICAgfQotfQotCi0jaWZuZGVmIE5PU1BMCi1jaGFyICoK LWdldGRtKHgpIGludCB4OyB7CQkJLyogUmV0dXJuIGRpYWwgbW9kaWZpZXIgKi8KLSAgICBNRE1J TkYgKiBtcDsKLSAgICBpbnQgbTsKLSAgICBpbnQgaXNoYXllcyA9IDA7Ci0gICAgbSA9IG1kbXR5 cDsKLSAgICBpZiAobSA8IDEpCi0gICAgICBpZiAobWRtc2F2ID4gLTEpCi0JbSA9IG1kbXNhdjsK LSAgICBpZiAobSA8IDEpCi0gICAgICByZXR1cm4oIiIpOwotI2lmbmRlZiBNSU5JRElBTAotICAg IGlmIChtID09IG5fVEFQSSkKLSAgICAgIG0gPSBuX0hBWUVTOwotI2VuZGlmIC8qIE1JTklESUFM ICovCi0gICAgbXAgPSBtb2RlbXBbbV07Ci0gICAgaXNoYXllcyA9IChkaWFsY2FwYXMgPyBkaWFs Y2FwYXMgOiBtcC0+Y2FwYXMpICYgQ0tEX0FUOwotICAgIHN3aXRjaCAoeCkgewotICAgICAgY2Fz ZSBWTl9ETV9MUDoKLQlyZXR1cm4oaXNoYXllcyA/ICIsIiA6ICIiKTsKLSAgICAgIGNhc2UgVk5f RE1fU1A6Ci0jaWZkZWYgTUlOSURJQUwKLQlyZXR1cm4oIiIpOwotI2Vsc2UKLQlyZXR1cm4obSA9 PSBuX1VTUiA/ICIvIiA6ICIiKTsKLSNlbmRpZiAvKiBNSU5JRElBTCAqLwotICAgICAgY2FzZSBW Tl9ETV9QRDoKLQlyZXR1cm4oaXNoYXllcyA/ICJQIiA6ICIiKTsKLSAgICAgIGNhc2UgVk5fRE1f VEQ6Ci0JcmV0dXJuKGlzaGF5ZXMgPyAiVCIgOiAiIik7Ci0gICAgICBjYXNlIFZOX0RNX1dBOgot CXJldHVybihpc2hheWVzID8gIkAiIDogIiIpOwotICAgICAgY2FzZSBWTl9ETV9XRDoKLQlyZXR1 cm4oaXNoYXllcyA/ICJXIiA6ICIiKTsKLSAgICAgIGNhc2UgVk5fRE1fUkM6Ci0JcmV0dXJuKGlz aGF5ZXMgPyAiOyIgOiAiIik7Ci0gICAgICBjYXNlIFZOX0RNX0hGOgotCXJldHVybihpc2hheWVz ID8gIiEiIDogIiIpOwotICAgICAgY2FzZSBWTl9ETV9XQjoKLQlyZXR1cm4oaXNoYXllcyA/ICIk IiA6ICIiKTsKLSAgICB9Ci0gICAgcmV0dXJuKCIiKTsKLX0KLSNlbmRpZiAvKiBOT1NQTCAqLwot Ci1zdGF0aWMgVk9JRAotZ2V0ZGlhbG10aCgpIHsKLSAgICBpZiAoZGlhbG1hdXRvICYmIGRpYWxs Y2MpIHsJCS8qIElmIERJQUwgTUVUSE9EIEFVVE8uLi4gKi8KLQlpbnQgaTsJCQkJLyogYW5kIHdl IGtub3cgb3VyIGFyZWEgY29kZS4uLiAqLwotCWZvciAoaSA9IDA7IGkgPCBuZGlhbHRvY2M7IGkr KykgeyAvKiBGaXJzdCBjaGVjayBUb25lIGNvdW50cmllcyBsaXN0ICovCi0JICAgIGlmICghc3Ry Y21wKGRpYWx0b2NjW2ldLGRpYWxsY2MpKSB7Ci0JCWRpYWxtdGggPSBYWURNX1Q7Ci0JCWJyZWFr OwotCSAgICB9Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBuZGlhbHB1Y2M7IGkrKykgeyAvKiBUaGVu IFB1bHNlIGNvdW50cmllcyBsaXN0ICovCi0JICAgIGlmICghc3RyY21wKGRpYWxwdWNjW2ldLGRp YWxsY2MpKSB7Ci0JCWRpYWxtdGggPSBYWURNX1A7Ci0JCWJyZWFrOwotCSAgICB9Ci0JfQotICAg IH0KLX0KLQotVk9JRAkJCQkvKiBHZXQgZGlhbGluZyBkZWZhdWx0cyBmcm9tIGVudmlyb25tZW50 ICovCi1nZXRkaWFsZW52KCkgewotICAgIGNoYXIgKnAgPSBOVUxMOwotICAgIGludCBpLCB4Owot Ci0gICAgbWFrZXN0cigmcCxnZXRlbnYoIktfRElBTF9ESVJFQ1RPUlkiKSk7Ci0gICAgaWYgKHAp IHsKLQlpbnQgaTsKLQl4d29yZHMocCwoTUFYRERJUiAtIDIpLGRpYWxkaXIsMCk7Ci0JZm9yIChp ID0gMDsgaSA8IChNQVhERElSIC0gMSk7IGkrKykgewotCSAgICBpZiAoIWRpYWxkaXJbaSsxXSkK LQkgICAgICBicmVhazsKLQkgICAgZWxzZQotCSAgICAgIGRpYWxkaXJbaV0gPSBkaWFsZGlyW2kr MV07Ci0JfQotCW5kaWFsZGlyID0gaTsKLSAgICB9Ci0gICAgeG1ha2VzdHIoJmRpYWxsY2MsZ2V0 ZW52KCJLX0NPVU5UUllDT0RFIikpOyAvKiBNeSBjb3VudHJ5IGNvZGUgKi8KLSAgICB4bWFrZXN0 cigmZGlhbGl4cCxnZXRlbnYoIktfTERfUFJFRklYIikpOyAgIC8qIE15IGxvbmctZGlzdGFuY2Ug cHJlZml4ICovCi0gICAgeG1ha2VzdHIoJmRpYWxsZHAsZ2V0ZW52KCJLX0lOVExfUFJFRklYIikp OyAvKiBNeSBpbnRlcm5hdGlvbmFsIHByZWZpeCAqLwotICAgIHhtYWtlc3RyKCZkaWFsbGRwLGdl dGVudigiS19URl9QUkVGSVgiKSk7ICAgLyogTnkgVG9sbC1mcmVlIHByZWZpeCAqLwotCi0jaWZu ZGVmIE5PSUNQCi0gICAgcCA9IGdldGVudigiS19ESUFMX01FVEhPRCIpOwkvKiBMb2NhbCBkaWFs IG1ldGhvZCAqLwotICAgIGlmIChwKSBpZiAoKnApIHsKLQlleHRlcm4gc3RydWN0IGtleXRhYiBk aWFsX21bXTsKLQlleHRlcm4gaW50IG5kaWFsX207Ci0JaSA9IGxvb2t1cChkaWFsX20scCxuZGlh bF9tLCZ4KTsKLQlpZiAoaSA+IC0xKSB7Ci0JICAgIGlmIChpID09IFhZRE1fQSkgewotCQlkaWFs bWF1dG8gPSAxOwotCQlkaWFsbXRoID0gWFlETV9EOwotCSAgICB9IGVsc2UgewotCQlkaWFsbWF1 dG8gPSAwOwotCQlkaWFsbXRoID0gaTsKLQkgICAgfQotCX0KLSAgICB9Ci0jZW5kaWYgLyogTk9J Q1AgKi8KLQotICAgIHAgPSBOVUxMOwotICAgIHhtYWtlc3RyKCZwLGdldGVudigiS19URl9BUkVB Q09ERSIpKTsgLyogVG9sbC1mcmVlIGFyZWFjb2RlcyAqLwotICAgIGlmIChwKSB7Ci0JaW50IGk7 Ci0JeHdvcmRzKHAsNyxkaWFsdGZjLDApOwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkg ICAgaWYgKCFkaWFsdGZjW2krMV0pCi0JICAgICAgYnJlYWs7Ci0JICAgIGVsc2UKLQkgICAgICBk aWFsdGZjW2ldID0gZGlhbHRmY1tpKzFdOwotCX0KLQludG9sbGZyZWUgPSBpOwotCWZyZWUocCk7 Ci0gICAgfQotICAgIGZvciAoaSA9IDA7IGkgPCBNQVhUUENDOyBpKyspIHsJLyogQ2xlYXIgVG9u ZS9QdWxzZSBjb3VudHJ5IGxpc3RzICovCi0JZGlhbHRvY2NbaV0gPSBOVUxMOwotCWRpYWxwdWNj W2ldID0gTlVMTDsKLSAgICB9Ci0gICAgZm9yIChpID0gMDsgaSA8IE1BWFRQQ0M7IGkrKykgewkv KiBJbml0IFRvbmUgY291bnRyeSBsaXN0ICovCi0JaWYgKHRvbmVjY1tpXSkKLQkgIG1ha2VzdHIo JihkaWFsdG9jY1tpXSksdG9uZWNjW2ldKTsKLQllbHNlCi0JICBicmVhazsKLSAgICB9Ci0gICAg bmRpYWx0b2NjID0gaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgTUFYVFBDQzsgaSsrKSB7CS8qIElu aXQgUHVsc2UgY291bnRyeSBsaXN0ICovCi0JaWYgKHB1bHNlY2NbaV0pCi0JICBtYWtlc3RyKCYo ZGlhbHB1Y2NbaV0pLHB1bHNlY2NbaV0pOwotCWVsc2UKLQkgIGJyZWFrOwotICAgIH0KLSAgICBu ZGlhbHB1Y2MgPSBpOwotCi0gICAgaWYgKGRpYWxsY2MpIHsJCQkvKiBIYXZlIGNvdW50cnkgY29k ZSAqLwotCWlmICghc3RyY21wKGRpYWxsY2MsIjEiKSkgewkvKiBJZiBpdCdzIDEgKi8KLQkgICAg aWYgKCFkaWFsbGRwKQkJLyogU2V0IHRoZXNlIHByZWZpeGVzLi4uICovCi0JICAgICAgbWFrZXN0 cigmZGlhbGxkcCwiMSIpOwotCSAgICBpZiAoIWRpYWx0ZnApCi0JICAgICAgbWFrZXN0cigmZGlh bHRmcCwiMSIpOwotCSAgICBpZiAoIWRpYWxpeHApCi0JICAgICAgbWFrZXN0cigmZGlhbGl4cCwi MDExIik7Ci0JICAgIGlmIChudG9sbGZyZWUgPT0gMCkgewkvKiBUb2xsLWZyZWUgYXJlYSBjb2Rl cyAqLwotCQlpZiAoKGRpYWx0ZmNbMF0gPSBtYWxsb2MoNCkpKSB7Ci0JCSAgICBja3N0cm5jcHko ZGlhbHRmY1swXSwiODAwIiw0KTsgLyogMTk3MC1zb21ldGhpbmcgKi8KLQkJICAgIG50b2xsZnJl ZSsrOwotCQkgICAgaWYgKChkaWFsdGZjWzFdID0gbWFsbG9jKDQpKSkgewotCQkJY2tzdHJuY3B5 KGRpYWx0ZmNbMV0sIjg4OCIsNCk7IC8qIDE5OTYgKi8KLQkJCW50b2xsZnJlZSsrOwotCQkJaWYg KChkaWFsdGZjWzJdID0gbWFsbG9jKDQpKSkgewotCQkJICAgIGNrc3RybmNweShkaWFsdGZjWzJd LCI4NzciLDQpOyAvKiA1IEFwcmlsIDE5OTggKi8KLQkJCSAgICBudG9sbGZyZWUrKzsKLQkJCSAg ICBpZiAoKGRpYWx0ZmNbM10gPSBtYWxsb2MoNCkpKSB7Ci0JCQkJY2tzdHJuY3B5KGRpYWx0ZmNb M10sIjg2NiIsNCk7IC8qIDIwMDA/ICovCi0JCQkJbnRvbGxmcmVlKys7Ci0JCQkgICAgfQotCQkJ fQotCQkgICAgfQotCQl9Ci0JICAgIH0KLQl9IGVsc2UgaWYgKCFzdHJjbXAoZGlhbGxjYywiMzU4 IikgJiYKLQkJICAgKChpbnQpIHN0cmNtcCh6em5kYXRlKCksIjE5OTYxMDExIikgPiAwKQotCQkg ICApIHsJCQkvKiBGaW5sYW5kICovCi0JICAgIGlmICghZGlhbGxkcCkJCS8qIExvbmctZGlzdGFu Y2UgcHJlZml4ICovCi0JICAgICAgbWFrZXN0cigmZGlhbGxkcCwiOSIpOwotCSAgICBpZiAoIWRp YWxpeHApIAkJLyogSW50ZXJuYXRpb25hbCBkaWFsaW5nIHByZWZpeCAqLwotCSAgICAgIG1ha2Vz dHIoJmRpYWxpeHAsIjk5MCIpOwotCX0gZWxzZSB7CQkJLyogTm90IE5BTlAgb3IgRmlubGFuZCAq LwotCSAgICBpZiAoIWRpYWxsZHApCi0JICAgICAgbWFrZXN0cigmZGlhbGxkcCwiMCIpOwotCSAg ICBpZiAoIWRpYWxpeHApCi0JICAgICAgbWFrZXN0cigmZGlhbGl4cCwiMDAiKTsKLQl9Ci0gICAg fQotICAgIHhtYWtlc3RyKCZkaWFsbGFjLGdldGVudigiS19BUkVBQ09ERSIpKTsKLSAgICB4bWFr ZXN0cigmZGlhbHB4byxnZXRlbnYoIktfUEJYX09DUCIpKTsKLSAgICB4bWFrZXN0cigmZGlhbHB4 aSxnZXRlbnYoIktfUEJYX0lDUCIpKTsKLSAgICBwID0gZ2V0ZW52KCJLX1BCWF9YQ0giKTsKLSNp ZmRlZiBDT01NRU5UCi0gICAgeG1ha2VzdHIoJmRpYWxweHgscCk7Ci0jZWxzZQotICAgIGlmIChw KSBpZiAoKnApIHsKLQljaGFyICogcyA9IE5VTEw7Ci0JY2hhciAqIHBwW01BWFBCWEVYQ0grMl07 Ci0JbWFrZXN0cigmcyxwKTsJCQkvKiBNYWtlIGEgY29weSBmb3IgcG9raW5nICovCi0JaWYgKHMp IHsKLQkgICAgeHdvcmRzKHMsTUFYUEJYRVhDSCsxLHBwLDApOyAvKiBOb3RlOiBwcFtdIGlzIDEt YmFzZWQuICovCi0JICAgIGZvciAoaSA9IDA7IGkgPD0gTUFYUEJYRVhDSDsgaSsrKSB7Ci0gICAg ICAgICAgICAgICAgaWYgKCFwcFtpKzFdKSBicmVhazsKLQkJbWFrZXN0cigmKGRpYWxweHhbaV0p LHBwW2krMV0pOwotCQluZGlhbHB4eCsrOwotCSAgICB9Ci0JICAgIG1ha2VzdHIoJnMsTlVMTCk7 CQkvKiBGcmVlIHBva2VkIGNvcHkgKi8KLQl9Ci0gICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8K LX0KLQotc3RhdGljIGludAotZGlhbGZhaWwoeCkgaW50IHg7IHsKLSAgICBjaGFyICogczsKLQot ICAgIGZhaWxfY29kZSA9IHg7Ci0gICAgZGVidWcoRjEwMSwiY2t1ZGlhbCBkaWFsZmFpbCIsIiIs eCk7Ci0gICAgZHJlc2V0KCk7CQkJCS8qIFJlc2V0IGFsYXJtIGFuZCBzaWduYWwgaGFuZGxlcnMg Ki8KLQotICAgIHByaW50ZigiJXMgRmFpbHVyZTogIiwgZnVuY19jb2RlID09IDAgPyAiRElBTCIg OiAiQU5TV0VSIik7Ci0gICAgaWYgKGRpYWxkcHkpIHsJCQkvKiBJZiBzaG93aW5nIHByb2dyZXNz ICovCi0gICAgICAgZGVidWcoRjEwMCwiZGlhbCBkaXNwbGF5IGlzIG9uIiwiIiwwKTsKLQlwID0g Y2tfdGltZSgpOwkJCS8qIGdldCBjdXJyZW50IHRpbWU7ICovCi0JaWYgKCpwKSBwcmludGYoIiVz OiAiLHApOwotICAgIH0KLSAgICBzd2l0Y2ggKGZhaWxfY29kZSkgewkJLyogVHlwZSBvZiBmYWls dXJlICovCi0gICAgICBjYXNlIEZfVElNRTogCQkJLyogVGltZW91dCAqLwotCWlmIChkaWFsX3do YXQgPT0gRFdfSU5JVCkKLQkgIHByaW50ZiAoIlRpbWVkIG91dCB3aGlsZSB0cnlpbmcgdG8gaW5p dGlhbGl6ZSBtb2RlbS5cbiIpOwotCWVsc2UgaWYgKGRpYWxfd2hhdCA9PSBEV19ESUFMKQotCSAg cHJpbnRmICgiJXMgaW50ZXJ2YWwgZXhwaXJlZC5cbiIsCi0JCSAgZnVuY19jb2RlID09IDAgPyAi RElBTCBUSU1FT1VUIiA6ICJBTlNXRVIgdGltZW91dCIpOwotCWVsc2UKLQkgIHByaW50ZigiVGlt ZW91dC5cbiIpOwotCWZmbHVzaChzdGRvdXQpOwotCWlmIChtZG1jYXBhcyAmIENLRF9BVCkKLQkg IHR0b2MoJ1wwMTUnKTsJCQkvKiBTZW5kIENSIHRvIGludGVycnVwdCBkaWFsaW5nICovCi0JLyog U29tZSBIYXllcyBtb2RlbXMgZG9uJ3QgZmFpbCB3aXRoIEJVU1kgb24gYnVzeSBsaW5lcyAqLwot CWRpYWxzdGEgPSBESUFfVElNTzsKLQlkZWJ1ZyhGMTEwLCJkaWFsIiwidGltZW91dCIsMCk7Ci0J YnJlYWs7Ci0KLSAgICAgIGNhc2UgRl9JTlQ6CQkJLyogRGlhbGluZyBpbnRlcnJ1cHRlZCAqLwot CXByaW50ZiAoIkludGVycnVwdGVkLlxuIik7Ci0JZmZsdXNoKHN0ZG91dCk7Ci0jaWZuZGVmIE5P WEZFUgotCWludGVycnVwdGVkID0gMTsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQlkZWJ1ZyhGMTEx LCJkaWFsIiwiaW50ZXJydXB0ZWQiLG1kbWNhcGFzICYgQ0tEX0FUKTsKLQlpZiAobWRtY2FwYXMg JiBDS0RfQVQpCi0JICB0dG9jKCdcMDE1Jyk7CQkJLyogU2VuZCBDUiB0byBpbnRlcnJ1cHQgZGlh bGluZyAqLwotCWRpYWxzdGEgPSBESUFfSU5UUjsKLQlicmVhazsKLQotICAgIGNhc2UgRl9NT0RF TToJCQkvKiBNb2RlbSBkZXRlY3RlZCBhIGZhaWx1cmUgKi8KLSAgICAgICAgIGRlYnVnKEYxMTEs ImRpYWxmYWlsKCkiLCJsYnVmIixsYnVmKTsKLSAgICAgICAgIGlmIChsYnVmICYmICpsYnVmKSB7 Ci0gICAgICAgICAgICBwcmludGYoIiBcIiIpOwotICAgICAgICAgICAgZm9yIChzID0gbGJ1Zjsg KnM7IHMrKykKLSAgICAgICAgICAgICAgIGlmIChpc3ByaW50KCpzKSkKLSAgICAgICAgICAgICAg ICAgIHB1dGNoYXIoKnMpOwkJLyogRGlzcGxheSBwcmludGFibGUgcmVhc29uICovCi0gICAgICAg ICAgICBwcmludGYgKCJcIiIpOwotICAgICAgICAgfSBlbHNlIHByaW50ZihmdW5jX2NvZGUgPT0g MCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAiIENhbGwgbm90IGNvbXBsZXRlZC4iIDoKLSAg ICAgICAgICAgICAgICAgICAgICAgICIgQ2FsbCBkaWQgbm90IGNvbWUgaW4uIgotICAgICAgICAg ICAgICAgICAgICAgICAgKTsKLQlwcmludGYoIlxuIik7Ci0JZGVidWcoRjExMCwiZGlhbCIsbGJ1 ZiwwKTsKLQlpZiAoZGlhbHN0YSA8IDApIGRpYWxzdGEgPSBESUFfVU5TUDsKLQlicmVhazsKLQot ICAgICAgY2FzZSBGX01JTklUOgkJCS8qIEZhaWx1cmUgdG8gaW5pdGlhbGl6ZSBtb2RlbSAqLwot CXByaW50ZiAoIkVycm9yIGluaXRpYWxpemluZyBtb2RlbS5cbiIpOwotCWRlYnVnKEYxMTAsImRp YWwiLCJtb2RlbSBpbml0IiwwKTsKLQlkaWFsc3RhID0gRElBX05PSU47Ci0JYnJlYWs7Ci0KLSAg ICBkZWZhdWx0OgotCXByaW50ZigidW5rbm93blxuIik7Ci0JZGVidWcoRjExMCwiZGlhbCIsInVu a25vd24iLDApOwotCWZmbHVzaChzdGRvdXQpOwotCWlmIChtZG1jYXBhcyAmIENLRF9BVCkKLQkg IHR0b2MoJ1wwMTUnKTsJCQkvKiBTZW5kIENSIHRvIGludGVycnVwdCBkaWFsaW5nICovCi0JZGlh bHN0YSA9IERJQV9JTlRSOwotICAgIH0KLQotI2lmZGVmIERZTkFNSUMKLSAgICBpZiAocmJ1Zikg ZnJlZShyYnVmKTsgcmJ1ZiA9IE5VTEw7Ci0gICAgaWYgKGZidWYpIGZyZWUoZmJ1Zik7IGZidWYg PSBOVUxMOwotI2VuZGlmIC8qIERZTkFNSUMgKi8KLQotICAgIGlmIChkaWFsc3RhIDwgMCkgZGlh bHN0YSA9IERJQV9VRVJSOyAvKiBTZXQgZmFpbHVyZSBjb2RlICovCi0gICAgcmV0dXJuKDApOwkJ CQkvKiBSZXR1cm4gemVybyAoaW1wb3J0YW50KSAqLwotfQotCi0vKiAgQyBLIEQgSSBBIEwJIC0t ICBEaWFsIHVwIHRoZSByZW1vdGUgc3lzdGVtICovCi0KLS8qIFJldHVybnMgMSBpZiBjYWxsIGNv bXBsZXRlZCwgMCBvdGhlcndpc2UgKi8KLQotc3RhdGljIGludCBtZG13YWl0LCBtZG1zdGF0ID0g MDsKLSNpZm5kZWYgQ0tfVEFQSQotc3RhdGljCi0jZW5kaWYgLyogQ0tfVEFQSSAqLwotaW50IHdh aXRjdDsKLWludCBtZG13YWl0ZCA9IDEwIDsJCQkvKiBkaWFsdG1vIC8gbWRtd2FpdCBkaWZmZXJl bmNlICovCi1zdGF0aWMgY2hhciBjOwotc3RhdGljIGNoYXIgKnRlbG5icjsKLQotc3RhdGljIGlu dCB3ciA9IDA7CQkJLyogd3IgPSB3YWtlIHJhdGUgKi8KLXN0YXRpYyBjaGFyICogd3M7CQkJLyog d3MgPSB3YWtlIHN0cmluZyAqLwotc3RhdGljIGNoYXIgKiB4bnVtID0gTlVMTDsKLXN0YXRpYyBp bnQgaW5pdGVkID0gMDsKLQotc3RhdGljIFNJR1RZUAotI2lmZGVmIENLX0FOU0lDCi1fZG9kaWFs KHZvaWQgKiB0aHJlYWRpbmZvKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLV9kb2RpYWwodGhyZWFk aW5mbykgVk9JRCAqIHRocmVhZGluZm87Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIF9kb2Rp YWwgKi8gewotICAgIGNoYXIgYzI7Ci0gICAgY2hhciAqZGNtZCwgKnMsICpmbG9jbWQgPSBOVUxM OwotICAgIGludCB4ID0gMCwgbiA9IEZfVElNRTsKLQotI2lmZGVmIE5UU0lHCi0gICAgc2lnbmFs KCBTSUdJTlQsIGRpYWxpbnQgKTsKLSAgICBpZiAodGhyZWFkaW5mbykgewkJCS8qIFRocmVhZCBs b2NhbCBzdG9yYWdlLi4uICovCi0JVGxzU2V0VmFsdWUoVGxzSW5kZXgsdGhyZWFkaW5mbyk7Ci0g ICAgfQotI2VuZGlmIC8qIE5UU0lHICovCi0KLSAgICBkY21kID0gZGlhbGNtZCA/IGRpYWxjbWQg OiBtcC0+ZGlhbF9zdHI7Ci0gICAgaWYgKChpbnQpc3RybGVuKGRjbWQpICsgKGludClzdHJsZW4o dGVsbmJyKSA+IChMQlVGTCAtIDIpKSB7Ci0JcHJpbnRmKCJESUFMIGNvbW1hbmQgKyBwaG9uZSBu dW1iZXIgdG9vIGxvbmchXG4iKTsKLQlkcmVzZXQoKTsKLSNpZmRlZiBEWU5BTUlDCi0JaWYgKHJi dWYpIGZyZWUocmJ1Zik7IHJidWYgPSBOVUxMOwotCWlmIChmYnVmKSBmcmVlKGZidWYpOyBmYnVm ID0gTlVMTDsKLSNlbmRpZiAvKiBEWU5BTUlDICovCi0jaWZkZWYgTlRTSUcKLQlja1RocmVhZEVu ZCh0aHJlYWRpbmZvKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotCVNJR1JFVFVSTjsJIC8qIE5vIGNv bnZlcnNhdGlvbiB3aXRoIG1vZGVtIHRvIGNvbXBsZXRlIGRpYWxpbmcgKi8KLSAgICB9Ci0gICAg bWFrZXN0cigmeG51bSx0ZWxuYnIpOwotCi0gICAgZ2V0ZGlhbG10aCgpOwkJCS8qIEdldCBkaWFs IG1ldGhvZCAqLwotCi0jaWZkZWYgQ0tfQVREVAotICAgIC8qIENvbWJpbmUgdGhlIFNFVCBESUFM IE1FVEhPRCBjb21tYW5kIHdpdGggdGhlIERJQUwgY29tbWFuZCBzdHJpbmcgKi8KLSAgICBpZiAo IWRpYWxjbWQgJiYJCQkvKiBVc2luZyBkZWZhdWx0IERJQUwgY29tbWFuZCAqLwotCShtZG1jYXBh cyAmIENLRF9BVCkgJiYJCS8qIEFUIGNvbW1hbmQgc2V0IG9ubHkgKi8KLQkoKGRpYWxtdGggPT0g WFlETV9UICYmICFkaWFsdG9uZSkgfHwgLyogYW5kIHVzaW5nIGRlZmF1bHQgKi8KLQkgKGRpYWxt dGggPT0gWFlETV9QICYmICFkaWFscHVsc2UpKSkgeyAvKiBtb2RlbSBjb21tYW5kcy4uLiAqLwot CWNoYXIgYzsKLQlkZWJ1ZyhGMTEwLCJkaWFsIGF0ZHQgeG51bSAxIix4bnVtLDApOwotCXMgPSBk Y21kOwotCWRlYnVnKEYxMTAsImRpYWwgYXRkdCBzIixzLDApOwotCWlmICgqdGVsbmJyICE9ICdU JyAmJgotCSAgICAqdGVsbmJyICE9ICdQJyAmJgotCSAgICAqdGVsbmJyICE9ICd0JyAmJgotCSAg ICAqdGVsbmJyICE9ICdwJyAmJgotCSAgICAhY2tzdHJjbXAocywiYXRkIiwzLDApICYmCi0JICAg IHNbM10gIT0gJ1QnICYmCi0JICAgIHNbM10gIT0gJ1AnICYmCi0JICAgIHNbM10gIT0gJ3QnICYm Ci0JICAgIHNbM10gIT0gJ3AnKSB7Ci0JICAgIGNoYXIgeGJ1ZlsyMDBdOwotCSAgICBjID0gKGRp YWxtdGggPT0gWFlETV9UKSA/ICdUJyA6ICdQJzsKLQkgICAgaWYgKGlzbG93ZXIoc1swXSkpCi0J ICAgICAgYyA9IHRvbG93ZXIoYyk7Ci0JICAgIGlmICgoaW50KXN0cmxlbih0ZWxuYnIpIDwgMTk5 KSB7Ci0JCXNwcmludGYoeGJ1ZiwiJWMlcyIsYyx0ZWxuYnIpOwotCQltYWtlc3RyKCZ4bnVtLHhi dWYpOwotCSAgICB9Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBDS19BVERUICovCi0gICAgZGVidWco RjExMSwiX2RvZGlhbCIseG51bSx4cmVkaWFsKTsKLQotICAgIC8qIEhhbmcgdXAgdGhlIG1vZGVt IChpbiBjYXNlIGl0IHdhc24ndCAib24gaG9vayIpICovCi0gICAgLyogQnV0IG9ubHkgaWYgU0VU IERJQUwgSEFOR1VQIE9OLi4uICovCi0KLSAgICBpZiAoIXhyZWRpYWwpIHsJCQkvKiBNb2RlbSBu b3QgaW5pdGFsaXplZCB5ZXQuICovCi0JaW5pdGVkID0gMDsKLSAgICB9Ci0gICAgaWYgKCF4cmVk aWFsIHx8ICFpbml0ZWQpIHsKLQlpZiAoZGlhbGh1cCgpIDwgMCkgewkJLyogSGFuZ3VwIGZpcnN0 ICovCi0JICAgIGRlYnVnKEYxMDAsIl9kb2RpYWwgZGlhbGh1cCBmYWlsZWQiLCIiLDApOwotI2lm bmRlZiBNSU5JRElBTAotCSAgICBpZiAobWRtY2FwYXMgJiBDS0RfVEIpCS8qIFRlbGViaXRzIG1p Z2h0IG5lZWQgYSBCUkVBSyAqLwotCSAgICAgIHR0c25kYigpOwkJCS8qICBmaXJzdC4gKi8KLSNl bmRpZiAvKiBNSU5JRElBTCAqLwotCSAgICBpZiAoZGlhbGhuZyAmJiBkaWFsc3RhICE9IERJQV9Q QVJUKSB7IC8qIElmIGhhbmd1cCBmYWlsZWQsICovCi0JCXR0Y2xvcygwKTsJCS8qIGNsb3NlIGFu ZCByZW9wZW4gdGhlIGRldmljZS4gKi8KLQkJaWYgKHR0b3Blbih0dG5hbWUsJmxvY2FsLG15bWRt dHlwLDApIDwgMCkgewotCQkgICAgcHJpbnRmKCJTb3JyeSwgQ2FuJ3QgaGFuZyB1cCBjb21tdW5p Y2F0aW9uIGRldmljZS5cbiIpOwotCQkgICAgcHJpbnRmKCJUcnkgJ3NldCBsaW5lICVzJyBhZ2Fp bi5cbiIsdHRuYW1lKTsKLQkJICAgIGRpYWxzdGEgPSBESUFfSEFORzsKLSNpZmRlZiBEWU5BTUlD Ci0JCSAgICBpZiAocmJ1ZikgZnJlZShyYnVmKTsgcmJ1ZiA9IE5VTEw7Ci0JCSAgICBpZiAoZmJ1 ZikgZnJlZShmYnVmKTsgZmJ1ZiA9IE5VTEw7Ci0jZW5kaWYgLyogRFlOQU1JQyAqLwotCQkgICAg ZHJlc2V0KCk7Ci0jaWZkZWYgTlRTSUcKLQkJICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOwot I2VuZGlmIC8qIE5UU0lHICovCi0JCSAgICBTSUdSRVRVUk47Ci0JCX0KLQkgICAgfQotCX0KLQlp bml0ZWQgPSAwOwkJCS8qIFdlIGh1bmcgdXAgc28gbXVzdCByZWluaXQgKi8KLSAgICB9Ci0jaWZu ZGVmIE1JTklESUFMCi0gICAgLyogRG9uJ3Qgc3RhcnQgdGFsa2luZyB0byBSb2xtIHRvbyBzb29u ICovCi0gICAgaWYgKG15bWRtdHlwID09IG5fUk9MTSAmJiBkaWFsc3RhICE9IERJQV9QQVJUKQot ICAgICAgbXNsZWVwKDUwMCk7Ci0jZW5kaWYgLyogTUlOSURJQUwgKi8KLQotICAgIGlmIChkaWFs c3RhICE9IERJQV9QQVJUCQkvKiBTb21lIGluaXRpYWwgc2V0dXBzLiAqLwotI2lmbmRlZiBNSU5J RElBTAotCSYmIG15bWRtdHlwICE9IG5fQVRUVVBDCi0jZW5kaWYgLyogTUlOSURJQUwgKi8KLQkp IHsKLQlmYWlsX2NvZGUgPSBGX01JTklUOwkJLyogRGVmYXVsdCBmYWlsdXJlIGNvZGUgKi8KLQlk aWFsX3doYXQgPSBEV19JTklUOwkJLyogV2hhdCBJJ20gRG9pbmcgTm93ICAgKi8KLQlpZiAoZGlh bGRweSkgewkJCS8qIElmIHNob3dpbmcgcHJvZ3Jlc3MsICovCi0JICAgIHAgPSBja190aW1lKCk7 CQkvKiBnZXQgdGltZXN0YW1wLiAgICovCi0JICAgIGlmICghaW5pdGVkKQotCSAgICAgIGlmICgq cCkKLQkJcHJpbnRmKCIgSW5pdGlhbGl6aW5nOiAlcy4uLlxuIixwKTsKLQl9Ci0gICAgfQotI2lm bmRlZiBNSU5JRElBTAotI2lmZGVmIEFUVDczMDAKLSAgICBpZiAobXltZG10eXAgPT0gbl9BVFRV UEMpIHsKLS8qCi0gIEZvciBBVFQ3MzAwL1VuaXggUEMncyB3aXRoIHRoZWlyIHNwZWNpYWwgaW50 ZXJuYWwgbW9kZW0uICBXaG9sZSBkaWFsaW5nCi0gIHByb2Nlc3MgaXMgaGFuZGxlZCByaWdodCBo ZXJlLCBhbiBleGNlcHRpb24gdG8gdGhlIG5vcm1hbCBzdHJ1Y3R1cmUuCi0gIFRpbWVvdXQgYW5k IHVzZXIgaW50ZXJydXB0cyBhcmUgZW5hYmxlZCBkdXJpbmcgZGlhbGluZy4gIGF0dGRpYWwoKSBp cyBpbgotICBmaWxlIGNrdXRpby5jLiAgLSBqcmQKLSovCi0gICAgICAgIF9QUk9UT1RZUCggaW50 IGF0dGRpYWwsIChjaGFyICosIGxvbmcsIGNoYXIgKikgKTsKLQlmYWlsX2NvZGUgPSBGX01PREVN OwkJLyogRGVmYXVsdCBmYWlsdXJlIGNvZGUgKi8KLQlkaWFsX3doYXQgPSBEV19ESUFMOwotCWlm IChkaWFsZHB5KSB7CQkJLyogSWYgc2hvd2luZyBwcm9ncmVzcyAqLwotCSAgICBwID0gY2tfdGlt ZSgpOwkJLyogZ2V0IGN1cnJlbnQgdGltZTsgKi8KLQkgICAgaWYgKCpwKQotCSAgICAgIHByaW50 ZigiIERpYWxpbmc6ICVzLi4uXG4iLHApOwotCX0KLQlhbGFybSh3YWl0Y3QpOwkJCS8qIFNldCBh bGFybSAqLwotCWlmIChhdHRkaWFsKHR0bmFtZSxzcGVlZCx0ZWxuYnIpKSB7IC8qIGRpYWwgaW50 ZXJuYWwgbW9kZW0gKi8KLQkgICAgZHJlc2V0KCk7CQkJLyogcmVzZXQgYWxhcm1zLCBldGMuICov Ci0JICAgIHByaW50ZigiIENhbGwgZmFpbGVkLlxyXG4iKTsKLQkgICAgZGlhbGh1cCgpOwkgICAg ICAgIAkvKiBIYW5ndXAgdGhlIGNhbGwgKi8KLSNpZmRlZiBEWU5BTUlDCi0JICAgIGlmIChyYnVm KSBmcmVlKHJidWYpOyByYnVmID0gTlVMTDsKLQkgICAgaWYgKGZidWYpIGZyZWUoZmJ1Zik7IGZi dWYgPSBOVUxMOwotI2VuZGlmIC8qIERZTkFNSUMgKi8KLQkgICAgZGlhbHN0YSA9IERJQV9VRVJS OwotI2lmZGVmIE5UU0lHCi0JICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOwotI2VuZGlmIC8q IE5UU0lHICovCi0JICAgIFNJR1JFVFVSTjsJCQkvKiByZXR1cm4gZmFpbHVyZSAqLwotCX0KLQlk cmVzZXQoKTsJCQkvKiByZXNldCBhbGFybXMsIGV0Yy4gKi8KLQl0dHBrdChzcGVlZCxGTE9fRElB WCxwYXJpdHkpOwkvKiBjYW5jZWwgZGlhbGluZyBpb2N0bCAqLwotCWlmICghcXVpZXQgJiYgIWJh Y2tncmQpIHsKLQkgICAgaWYgKGRpYWxkcHkpIHsKLQkJcHJpbnRmKCJcbiIpOwotCQlwcmludGYo IiBDYWxsIGNvbXBsZXRlLlxyXG4iKTsKLQkgICAgfSBlbHNlIGlmIChtb2RlbW1zZ1swXSkKLQkJ cHJpbnRmKCIgQ2FsbCBjb21wbGV0ZTogXCIlc1wiLlxyXG4iLChjaGFyICopbW9kZW1tc2cpOwot CSAgICBlbHNlCi0JICAgICAgcHJpbnRmKCIgQ2FsbCBjb21wbGV0ZS5cclxuIik7Ci0JfQotI2lm ZGVmIENLTE9HRElBTAotCWRvbG9nZGlhbCh0ZWxuYnIpOwotI2VuZGlmIC8qIENLTE9HRElBTCAq LwotCi0JZGlhbHN0YSA9IERJQV9PSzsKLSNpZmRlZiBEWU5BTUlDCi0JaWYgKHJidWYpIGZyZWUo cmJ1Zik7IHJidWYgPSBOVUxMOwotCWlmIChmYnVmKSBmcmVlKGZidWYpOyBmYnVmID0gTlVMTDsK LSNlbmRpZiAvKiBEWU5BTUlDICovCi0jaWZkZWYgTlRTSUcKLQlja1RocmVhZEVuZCh0aHJlYWRp bmZvKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotCVNJR1JFVFVSTjsJLyogTm8gY29udmVyc2F0aW9u IHdpdGggbW9kZW0gdG8gY29tcGxldGUgZGlhbGluZyAqLwotICAgIH0gZWxzZQotI2VuZGlmIC8q IEFUVDczMDAgKi8KLSNpZmRlZiBDS19UQVBJCi0gICAgICBpZiAodHR0YXBpICYmICF0YXBpcGFz cykgewkvKiBUQVBJIERpYWxpbmcgKi8KLQkgIHN3aXRjaCAoZnVuY19jb2RlKSB7Ci0JICAgIGNh c2UgMDoJCQkvKiBEaWFsICovCi0JICAgICAgaWYgKGNrdGFwaWRpYWwodGVsbmJyKSkgewotCQkg IGZhaWxfY29kZSA9IDA7Ci0JCSAgaWYgKHBhcnRpYWwpIHsKLQkJICAgICAgZGlhbHN0YSA9IERJ QV9QQVJUOwotCQkgIH0gZWxzZSB7Ci0JCSAgICAgIGRpYWxzdGEgPSBESUFfT0s7Ci0JCSAgICAg IHNwZWVkID0gdHRnc3BkKCk7Ci0JCSAgfQotCSAgICAgIH0gZWxzZSB7Ci0JCSAgaWYgKGRpYWxz dGEgPT0gRElBX1BBUlQpCi0JCSAgICBja3RhcGloYW5ndXAoKTsKLQkJICBpZiAoIWZhaWxfY29k ZSkKLQkJICAgIGZhaWxfY29kZSA9IEZfTU9ERU07Ci0JCSAgZGlhbHN0YSA9IERJQV9UQVBJOwot CSAgICAgIH0KLQkgICAgICBicmVhazsKLQkgICAgY2FzZSAxOiB7CQkJLyogQW5zd2VyICovCi0J CWxvbmcgc3RydHRpbWUgPSB0aW1lKChsb25nICopTlVMTCk7Ci0JCWxvbmcgZGlmZiA9IDA7Ci0J CWRvIHsKLQkJICAgIGlmIChkaWFsYXRtbyA+IDApIHsKLQkJCXN0cnR0aW1lICs9IGRpZmY7Ci0J CQl3YWl0Y3QgICAtPSBkaWZmOwotCQkgICAgfQotCQkgICAgZmFpbF9jb2RlID0gMDsKLQkJICAg IGlmIChja3RhcGlhbnN3ZXIoKSkgeyAvKiBTVUNDRVNTICovCi0JCQlkaWFsc3RhID0gRElBX09L OwotCQkJc3BlZWQgPSB0dGdzcGQoKTsKLQkJCWJyZWFrOwotCQkgICAgfSBlbHNlIHsJCS8qIEZB SUxVUkUgKi8KLQkJCWlmIChmYWlsX2NvZGUpIHsKLQkJCSAgICBkaWFsc3RhID0gRElBX1RBUEk7 Ci0JCQkgICAgYnJlYWs7Ci0JCQl9IGVsc2UgewotCQkJICAgIGZhaWxfY29kZSA9IEZfTU9ERU07 Ci0JCQkgICAgZGlhbHN0YSA9IERJQV9UQVBJOwotCQkJfQotCQkgICAgfQotCQkgICAgaWYgKGRp YWxhdG1vID4gMCkgewotCQkJZGlmZiA9IHRpbWUoKGxvbmcgKilOVUxMKSAtIHN0cnR0aW1lOwot CQkgICAgfQotCQl9IHdoaWxlICgoZGlhbGF0bW8gPiAwKSA/IChkaWZmIDwgd2FpdGN0KSA6IDEp OwotCQlicmVhazsKLQkgICAgfQotCSAgfQotI2lmZGVmIE5UU0lHCi0JICBja1RocmVhZEVuZCh0 aHJlYWRpbmZvKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotCSAgU0lHUkVUVVJOOwotICAgICAgfSBl bHNlCi0jZW5kaWYgLyogQ0tfVEFQSSAqLwotI2VuZGlmIC8qIE1JTklESUFMICovCi0KLS8qIE1v ZGVtcyB3aXRoIEFUIGNvbW1hbmQgc2V0Li4uICovCi0KLSAgICAgIGlmICgobWRtY2FwYXMgJiBD S0RfQVQpICYmIGRpYWxzdGEgIT0gRElBX1BBUlQpIHsKLQotCSAgaWYgKGRpYWxwYWNlID4gLTEp CQkvKiBTZXQgaW50ZXJjaGFyYWN0ZXIgcGFjaW5nICovCi0JICAgIHdyID0gZGlhbHBhY2U7Ci0J ICBlbHNlCi0JICAgIHdyID0gbXAtPndha2VfcmF0ZTsKLQotCSAgaWYgKGRpYWxpbmkpCQkJLyog R2V0IHdha2V1cC9pbml0IHN0cmluZyAqLwotCSAgICB3cyA9IGRpYWxpbmk7Ci0JICBlbHNlCi0J ICAgIHdzID0gbXAtPndha2Vfc3RyOwotI2lmZGVmIENPTU1FTlQKLQkgIGlmICghd3MpIHdzID0g IlwwMTUiOwkJLyogSWYgbm9uZSwgdXNlIENSICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0J ICAvKiBGaXJzdCBnZXQgdGhlIG1vZGVtJ3MgYXR0ZW50aW9uIGFuZCBlbmFibGUgcmVzdWx0IGNv ZGVzICovCi0KLQkgIGZvciAodHJpZXMgPSAwOyB0cmllcyA8IDU7IHRyaWVzKyspIHsgLyogU2Vu ZCBzaG9ydCBjb21tYW5kICovCi0JICAgICAgaWYgKHRyaWVzID4gMCkgewotCQkgIHR0b2MoJ1ww MTUnKTsJCS8qIEFUIG11c3QgZ28gZmlyc3QgZm9yIHNwZWVkICovCi0JCSAgbXNsZWVwKHdyKTsJ CS8qIGRldGVjdGlvbi4gKi8KLQkgICAgICB9Ci0JICAgICAgaWYgKG15bWRtdHlwID09IG5fR0VO RVJJQykgLyogRm9yY2Ugd29yZCByZXN1bHQgY29kZXMgKi8KLQkJdHRzbG93KCJBVFEwVjFcMDE1 Iix3cik7IC8qIGZvciBnZW5lcmljIG1vZGVtIHR5cGUgKi8KLQkgICAgICBlbHNlCi0JCXR0c2xv dygiQVRRMFwwMTUiLHdyKTsKLQkgICAgICBtZG1zdGF0ID0gZ2V0b2sodHJpZXMgPCAyID8gMiA6 IHRyaWVzLCAxKTsgLyogR2V0IHJlc3BvbnNlICovCi0JICAgICAgaWYgKG1kbXN0YXQgPiAwKSBi cmVhazsJLyogT0sgLSBkb25lICovCi0JICAgICAgaWYgKGRpYWxkcHkgJiYgdHJpZXMgPiAwKSB7 Ci0JCSAgcHJpbnRmKCJcclxuIE5vIHJlc3BvbnNlIGZyb20gbW9kZW0iKTsKLQkJICBpZiAodHJp ZXMgPT0gNCkgewotCQkgICAgICBwcmludGYoIi5cclxuIik7Ci0JCSAgICAgIGRpYWxzdGEgPSBE SUFfTlJTUDsKLSNpZmRlZiBEWU5BTUlDCi0JCSAgICAgIGlmIChyYnVmKSBmcmVlKHJidWYpOyBy YnVmID0gTlVMTDsKLQkJICAgICAgaWYgKGZidWYpIGZyZWUoZmJ1Zik7IGZidWYgPSBOVUxMOwot I2VuZGlmIC8qIERZTkFNSUMgKi8KLSNpZmRlZiBOVFNJRwotCQkgICAgICBja1RocmVhZEVuZCh0 aHJlYWRpbmZvKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotCQkgICAgICBTSUdSRVRVUk47CS8qIHJl dHVybiBmYWlsdXJlICovCi0JCSAgfQotCQkgIHByaW50ZigiLCByZXRyeWluZyVzLi4uXHJcbiIs Ci0JCQkgKHRyaWVzID4gMSkgPyAiIGFnYWluIiA6ICIiKTsKLQkJICBmZmx1c2goc3Rkb3V0KTsK LQkgICAgICB9Ci0JICAgICAgdHRmbHVpKCk7Ci0JICAgICAgc3dpdGNoICh0cmllcykgewotCQlj YXNlIDA6IG1zbGVlcCgxMDApOyBicmVhazsKLQkJY2FzZSAxOiB0dHNuZGIoKTsgYnJlYWs7Ci0J CWRlZmF1bHQ6Ci0JCSAgaWYgKG5ldHdvcmspIHsKLQkJICAgICAgdHRzbmRiKCk7Ci0JCSAgfSBl bHNlIHsKLQkJICAgICAgaWYgKHRyaWVzID09IDIpIHsKLQkJCSAgdHRoYW5nKCk7Ci0JCQkgIHR0 Zmx1aSgpOwotCQkgICAgICB9IGVsc2UgewotCQkJICBtZG1odXAoKTsKLQkJICAgICAgfQotCQkg ICAgICBpbml0ZWQgPSAwOwotCQkgIH0KLQkgICAgICB9Ci0JICAgICAgZmZsdXNoKHN0ZG91dCk7 Ci0JICB9Ci0JICBkZWJ1ZyhGMTAxLCJfZG9kaWFsIEFUUTAgbWRtc3RhdCIsIiIsbWRtc3RhdCk7 Ci0KLQkgIGlmICh4cmVkaWFsICYmIGluaXRlZCkgewkvKiBSZWRpYWxpbmcuLi4gKi8KLQkgICAg ICB0dG9jKCdcMDE1Jyk7CQkvKiBDYW5jZWwgcHJldmlvdXMgKi8KLQkgICAgICBtc2xlZXAoMjUw KTsJCS8qIFdhaXQgYSBiaXQgKi8KLSNpZmRlZiBDT01NRU5UCi0vKiBUaGlzIHdhc24ndCB0aGUg cHJvYmxlbS4uLiAqLwotCSAgICAgIHR0Zmx1aSgpOwkJCS8qIENsZWFyIG91dCBzdHVmZiBmcm9t IG1vZGVtIHNldHVwICovCi0JICAgICAgdHRzbG93KCJBVFM3PTYwXDAxNSIsd3IpOwkvKiBSZWRv IGNhcnJpZXIgd2FpdCAqLwotCSAgICAgIGdldG9rKDQsMSk7CQkvKiBHZXQgcmVzcG9uc2UgKi8K LSNlbmRpZiAvKiBDT01NRU5UICovCi0JICAgICAgYWxhcm0oMCk7CQkJLyogSnVzdCBpbiBjYXNl Li4uICovCi0JICAgICAgdHRmbHVpKCk7CQkJLyogQ2xlYXIgb3V0IHN0dWZmIGZyb20gbW9kZW0g c2V0dXAgKi8KLQkgICAgICBnb3RvIFJFRElBTDsJCS8qIFNraXAgc2V0dXAgLSB3ZSBhbHJlYWR5 IGRpZCBpdCAqLwotCSAgfQotLyoKLSAgRG8gZmxvdyBjb250cm9sIG5leHQgYmVjYXVzZSBhIGxv bmcgaW5pdCBzdHJpbmcgZWNob2luZyBiYWNrIGNvdWxkCi0gIGNhdXNlIGRhdGEgb3ZlcnJ1bnMs IGNhdXNpbmcgdXMgdG8gbWlzcyB0aGUgT0ssIG9yICh3b3JzZSkgdG8gZ2V0IG91dAotICBvZiBz eW5jIGVudGlyZWx5LgotKi8KLQkgIHggPSAwOwkJCS8qIFVzZXIgc2FpZCBTRVQgRElBTCBGTE9X IFJUUy9DVFMgKi8KLQkgIGlmIChkaWFsZmMgPT0gRkxPX1JUU0MgfHwJLyogRXZlbiBpZiBLZXJt aXQncyBGTE9XIGlzbid0Li4uICAqLwotCSAgICAgIChkaWFsZmMgPT0gRkxPX0FVVE8gJiYgZmxv dyA9PSBGTE9fUlRTQykpIHsKLQkgICAgICBpZiAoZGlhbGh3ZmMpIHsJCS8qIFVzZXItZGVmaW5l ZCBIV0ZDIHN0cmluZyAqLwotCQkgIGlmICgqZGlhbGh3ZmMpIHsKLQkJICAgICAgeCA9IDE7Ci0J CSAgICAgIGZsb2NtZCA9IGRpYWxod2ZjOwotCQkgIH0KLQkgICAgICB9IGVsc2UgaWYgKChtZG1j YXBhcyAmIENLRF9IVykgJiYgKihtcC0+aHdmY19zdHIpKSB7Ci0JCSAgeCA9IDE7Ci0JCSAgZmxv Y21kID0gbXAtPmh3ZmNfc3RyOwotCSAgICAgIH0KLQkgIH0gZWxzZSBpZiAoZGlhbGZjID09IEZM T19YT05YIHx8IC8qIFVzZXIgc2FpZCBTRVQgRElBTCBGTE9XIFNPRlQgKi8KLQkJICAgICAoZGlh bGZjID09IEZMT19BVVRPICYmIGZsb3cgPT0gRkxPX1hPTlgpKSB7Ci0JICAgICAgaWYgKGRpYWxz d2ZjKSB7Ci0JCSAgaWYgKCpkaWFsc3dmYykgewotCQkgICAgICB4ID0gMTsKLQkJICAgICAgZmxv Y21kID0gZGlhbHN3ZmM7Ci0JCSAgfQotCSAgICAgIH0gZWxzZSBpZiAoKG1kbWNhcGFzICYgQ0tE X1NXKSAmJiAqKG1wLT5zd2ZjX3N0cikpIHsKLQkJICB4ID0gMTsKLQkJICBmbG9jbWQgPSBtcC0+ c3dmY19zdHI7Ci0JICAgICAgfQotCSAgfSBlbHNlIGlmIChkaWFsZmMgPT0gRkxPX05PTkUpIHsg LyogVXNlciBzYWlkIFNFVCBESUFMIEZMT1cgTk9ORSAqLwotCSAgICAgIGlmIChkaWFsbm9mYykg ewotCQkgIGlmICgqZGlhbG5vZmMpIHsKLQkJICAgICAgeCA9IDE7Ci0JCSAgICAgIGZsb2NtZCA9 IGRpYWxub2ZjOwotCQkgIH0KLQkgICAgICB9IGVsc2UgaWYgKG1wLT5ub2ZjX3N0ciAmJiAqKG1w LT5ub2ZjX3N0cikpIHsKLQkJICB4ID0gMTsKLQkJICBmbG9jbWQgPSBtcC0+bm9mY19zdHI7Ci0J ICAgICAgfQotCSAgfQotCSAgaWYgKHgpIHsJCQkvKiBTZW5kIHRoZSBmbG93IGNvbnRyb2wgY29t bWFuZCAqLwotCSAgICAgIGRlYnVnKEYxMTAsIl9kb2RpYWwgZmxvY21kIixmbG9jbWQsMCk7Ci0J ICAgICAgZm9yICh0cmllcyA9IDQ7IHRyaWVzID4gMDsgdHJpZXMtLSkgeyAvKiBTZW5kIHRoZSBj b21tYW5kICovCi0JCSAgdHRzbG93KGZsb2NtZCx3cik7Ci0JCSAgbWRtc3RhdCA9IGdldG9rKDUs MSk7Ci0JCSAgaWYgKG1kbXN0YXQgPiAwKSBicmVhazsKLQkJICBpZiAoZGlhbGRweSAmJiB0cmll cyA+IDEpCi0JCSAgICBwcmludGYoIiBObyByZXNwb25zZSBmcm9tIG1vZGVtLCByZXRyeWluZyVz Li4uXG4iLAotCQkJICAgKHRyaWVzIDwgNCkgPyAiIGFnYWluIiA6ICIiKTsKLQkgICAgICB9Ci0K LSNpZmRlZiBDS19UVFNFVEZMT1cKLSNpZmRlZiBDS19SVFNDVFMKLS8qCi0gIFNvIGZhciBvbmx5 IGNrdXRpby5jIGhhcyB0dHNldGZsb3coKS4KLSAgV2UgaGF2ZSBqdXN0IHRvbGQgdGhlIG1vZGVt IHRvIHR1cm4gb24gUlRTL0NUUyBmbG93IGNvbnRyb2wgYW5kIHRoZSBtb2RlbQotICBoYXMgc2Fp ZCBPSy4gIEJ1dCB3ZSBvdXJzZWx2ZXMgaGF2ZSBub3QgdHVybmVkIGl0IG9uIHlldCBiZWNhdXNl IG9mIHRoZQotICBkaXNndXN0aW5nIHR0cGt0KC4uLkZMT19ESUFMLi4uKSBoYWNrLiAgU28gbm93 LCBpZiB0aGUgY29tcHV0ZXIgZG9lcyBub3QKLSAgaGFwcGVuIHRvIGJlIGFzc2VydGluZyBSVFMs IHRoZSBtb2RlbSB3aWxsIG5vIGxvbmdlciBzZW5kIGNoYXJhY3RlcnMgdG8gaXQuCi0gIFNvIGF0 IEVYQUNUTFkgVEhJUyBQT0lOVCwgd2UgbXVzdCBlbmFibGUgUlRTL0NUUyBpbiB0aGUgZGV2aWNl IGRyaXZlci4KLSovCi0JICAgICAgaWYgKGRpYWxmYyA9PSBGTE9fUlRTQyB8fAotCQkgIChkaWFs ZmMgPT0gRkxPX0FVVE8gJiYgZmxvdyA9PSBGTE9fUlRTQykpIHsKLQkJICB0dHNldGZsb3coRkxP X1JUU0MpOwotCSAgICAgIH0KLSNlbmRpZiAvKiBDS19SVFNDVFMgKi8KLSNlbmRpZiAvKiBDS19U VFNFVEZMT1cgKi8KLQkgIH0KLQkgIHR0Zmx1aSgpOwkJCS8qIENsZWFyIG91dCBzdHVmZiBmcm9t IG1vZGVtIHNldHVwICovCi0JICBtc2xlZXAoMjUwKTsKLQotCSAgaWYgKCF3cykgZ290byB4ZGlh bGVjOwkvKiBObyBpbml0IHN0cmluZyAqLwotCSAgaWYgKCEqd3MpIGdvdG8geGRpYWxlYzsKLQot CSAgZm9yICh0cmllcyA9IDQ7IHRyaWVzID4gMDsgdHJpZXMtLSkgeyAvKiBTZW5kIGluaXQgc3Ry aW5nICovCi0JICAgICAgdHRzbG93KHdzLHdyKTsKLQkgICAgICBtZG1zdGF0ID0gZ2V0b2soNCwx KTsJLyogR2V0IHJlc3BvbnNlICovCi0JICAgICAgaWYgKG1kbXN0YXQgPiAwKSBicmVhazsKLQkg ICAgICBpZiAoZGlhbGRweSAmJiB0cmllcyA+IDEpCi0JCXByaW50ZigiIE5vIHJlc3BvbnNlIGZy b20gbW9kZW0sIHJldHJ5aW5nJXMuLi5cbiIsCi0JCSAgICAgICAodHJpZXMgPCA0KSA/ICIgYWdh aW4iIDogIiIpOwotCSAgfQotCSAgZGVidWcoRjEwMSwiX2RvZGlhbCB3YWtlX3N0ciBtZG1zdGF0 IiwiIixtZG1zdGF0KTsKLQotCSAgaWYgKG1kbXN0YXQgPCAxKSB7CQkvKiBJbml0aWFsaXplZCBP Sz8gKi8KLQkgICAgICBkaWFsZmFpbChGX01JTklUKTsJLyogTm8sIGZhaWwuICovCi0jaWZkZWYg TlRTSUcKLQkgICAgICBja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKLSNlbmRpZiAvKiBOVFNJRyAq LwotCSAgICAgIFNJR1JFVFVSTjsKLQkgIH0KLQotI2lmbmRlZiBNSU5JRElBTAotICAgIH0gZWxz ZSBpZiAobXltZG10eXAgPT0gbl9BVFREVERNICYmIGRpYWxzdGEgIT0gRElBX1BBUlQpIHsgLyog QVQmVCAuLi4gKi8KLQl0dHNuZGIoKTsJCQkvKiBTZW5kIEJSRUFLICovCi0jZW5kaWYgLyogTUlO SURJQUwgKi8KLQotICAgIH0gZWxzZSBpZiAoZGlhbHN0YSAhPSBESUFfUEFSVCkgeyAvKiBBbGwg b3RoZXJzICovCi0KLQkvKiBQbGFjZSBtb2RlbSBpbnRvIGNvbW1hbmQgbW9kZSAqLwotCi0Jd3Mg PSBkaWFsaW5pID8gZGlhbGluaSA6IG1wLT53YWtlX3N0cjsKLQlpZiAod3MgJiYgKGludClzdHJs ZW4od3MpID4gMCkgewotCSAgICBkZWJ1ZyhGMTExLCJfZG9kaWFsIGRlZmF1bHQsIHdha2Ugc3Ry aW5nIiwgd3MsIHdyKTsKLQkgICAgdHRzbG93KHdzLCB3cik7Ci0JfSBlbHNlIGRlYnVnKEYxMDAs Il9kb2RpYWwgbm8gd2FrZV9zdHIiLCIiLDApOwotCWlmIChtcC0+d2FrZV9wcm9tcHQgJiYgKGlu dClzdHJsZW4obXAtPndha2VfcHJvbXB0KSA+IDApIHsKLQkgICAgZGVidWcoRjExMCwiX2RvZGlh bCBkZWZhdWx0LCB3YWl0aW5nIGZvciB3YWtlX3Byb21wdCIsCi0JCSAgbXAtPndha2VfcHJvbXB0 LDApOwotCSAgICBhbGFybSgxMCk7Ci0JICAgIHdhaXRmb3IobXAtPndha2VfcHJvbXB0KTsKLQkg ICAgYWxhcm0oMCk7Ci0JfSBlbHNlIGRlYnVnKEYxMDAsIl9kb2RpYWwgbm8gd2FrZV9wcm9tcHQi LCIiLDApOwotICAgIH0KLQotLyogSGFuZGxlIGVycm9yIGNvcnJlY3Rpb24sIGRhdGEgY29tcHJl c3Npb24sIGFuZCBmbG93IGNvbnRyb2wuLi4gKi8KLQotICB4ZGlhbGVjOgotCi0gICAgaWYgKGRp YWxzdGEgIT0gRElBX1BBUlQpIHsKLQlhbGFybSgwKTsJCQkvKiBUdXJuIG9mZiBhbGFybSAqLwot CWRlYnVnKEYxMDAsIl9kb2RpYWwgZ290IHdha2UgcHJvbXB0IiwiIiwwKTsKLQltc2xlZXAoNTAw KTsJCQkvKiBBbGxvdyBzZXR0bGluZyB0aW1lICovCi0KLQkvKiBFbmFibGUvZGlzYWJsZSBlcnJv ci1jb3JyZWN0aW9uICovCi0KLQl4ID0gMDsKLQlpZiAoZGlhbGVjKSB7CQkJLyogRElBTCBFUlJP Ui1DT1JSRUNUSU9OIGlzIE9OICovCi0JICAgIGlmIChkaWFsZWNvbikgewkJLyogU0VUIERJQUwg U1RSSU5HIEVSUk9SLUNPUlJFQ1RJT04gKi8KLQkJaWYgKCpkaWFsZWNvbikgewotCQkgICAgeCA9 IDE7Ci0JCSAgICB0dHNsb3coZGlhbGVjb24sIHdyKTsKLQkJfQotCSAgICB9IGVsc2UgaWYgKCht ZG1jYXBhcyAmIENLRF9FQykgJiYgKihtcC0+ZWNfb25fc3RyKSkgewotCQl4ID0gMTsKLQkJdHRz bG93KG1wLT5lY19vbl9zdHIsIHdyKTsKLQkgICAgfQotI2lmZGVmIENPTU1FTlQKLQkgICAgZWxz ZSBwcmludGYoCi0JCSAgIldBUk5JTkcgLSBJIGRvbid0IGtub3cgaG93IHRvIHR1cm4gb24gRUMg Zm9yIHRoaXMgbW9kZW1cbiIKLQkJICAgICApOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQl9IGVs c2UgewotCSAgICBpZiAoZGlhbGVjb2ZmKSB7CQkvKiBESUFMIEVSUk9SLUNPUlJFQ1RJT04gT0ZG ICovCi0JCWlmICgqZGlhbGVjb2ZmKSB7Ci0JCSAgICB4ID0gMTsKLQkJICAgIHR0c2xvdyhkaWFs ZWNvZmYsIHdyKTsKLQkJfQotCSAgICB9IGVsc2UgaWYgKChtZG1jYXBhcyAmIENLRF9FQykgJiYg KihtcC0+ZWNfb2ZmX3N0cikpIHsKLQkJeCA9IDE7Ci0JCXR0c2xvdyhtcC0+ZWNfb2ZmX3N0ciwg d3IpOwotCSAgICB9Ci0jaWZkZWYgQ09NTUVOVAotCSAgICBlbHNlIHByaW50ZigKLQkJICAiV0FS TklORyAtIEkgZG9uJ3Qga25vdyBob3cgdG8gdHVybiBvZmYgRUMgZm9yIHRoaXMgbW9kZW1cbiIK LQkJICAgICApOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQl9Ci0JLyogZGVidWcoRjEwMSwiY2t1 ZGlhIHh4X29rIiwiIix4eF9vayk7ICovCi0JaWYgKHggJiYgeHhfb2spIHsJCQkvKiBMb29rIGZv ciBPSyByZXNwb25zZSAqLwotCSAgICBkZWJ1ZyhGMTAwLCJja3VkaWEgY2FsbGluZyB4eF9vayBm b3IgRUMiLCIiLDApOwotCSAgICB4ID0gKCp4eF9vaykoNSwxKTsKLQkgICAgZGVidWcoRjEwMSwi Y2t1ZGlhIHh4X29rIiwiIix4KTsKLQkgICAgaWYgKHggPCAwKSB7Ci0JCXByaW50ZigiV0FSTklO RyAtIFRyb3VibGUgZW5hYmxpbmcgZXJyb3ItY29ycmVjdGlvbi5cbiIpOwotCQlwcmludGYoCi0i IExpa2VseSBjYXVzZTogWW91ciBtb2RlbSBpcyBhbiBSUEkgbW9kZWwsIHdoaWNoIGRvZXMgbm90 IGhhdmUgYnVpbHQtaW5cbiIpOwotCQlwcmludGYoIiBlcnJvciBjb3JyZWN0aW9uIGFuZCBkYXRh IGNvbXByZXNzaW9uLiIpOwotCSAgICB9Ci0JfQotCi0JLyogRW5hYmxlL2Rpc2FibGUgZGF0YSBj b21wcmVzc2lvbiAqLwotCi0JaWYgKHggPiAwKSB4ID0gMDsKLQlpZiAoZGlhbGRjKSB7Ci0JICAg IGlmICh4IDwgMCB8fCAhZGlhbGVjKSB7Ci0JCXByaW50ZigKLSJXQVJOSU5HIC0gWW91IGNhbid0 IGhhdmUgY29tcHJlc3Npb24gd2l0aG91dCBlcnJvciBjb3JyZWN0aW9uLlxuIik7Ci0JICAgIH0g ZWxzZSBpZiAoZGlhbGRjb24pIHsJLyogU0VUIERJQUwgU1RSSU5HIC4uLiAqLwotCQlpZiAoKmRp YWxkY29uKSB7Ci0JCSAgICB4ID0gMTsKLQkJICAgIHR0c2xvdyhkaWFsZGNvbiwgd3IpOwotCQl9 Ci0JICAgIH0gZWxzZSBpZiAoKG1kbWNhcGFzICYgQ0tEX0RDKSAmJiAqKG1wLT5kY19vbl9zdHIp KSB7Ci0JCXggPSAxOwotCQl0dHNsb3cobXAtPmRjX29uX3N0ciwgd3IpOwotCSAgICB9Ci0jaWZk ZWYgQ09NTUVOVAotCSAgICBlbHNlIHByaW50ZigKLQkJICAiV0FSTklORyAtIEkgZG9uJ3Qga25v dyBob3cgdG8gdHVybiBvbiBEQyBmb3IgdGhpcyBtb2RlbVxuIgotCQkJICApOwotI2VuZGlmIC8q IENPTU1FTlQgKi8KLQl9IGVsc2UgewotCSAgICBpZiAoZGlhbGRjb2ZmKSB7Ci0JCWlmICgqZGlh bGRjb2ZmKSB7Ci0JCSAgICB4ID0gMTsKLQkJICAgIHR0c2xvdyhkaWFsZGNvZmYsIHdyKTsKLQkJ fQotCSAgICB9IGVsc2UgaWYgKChtZG1jYXBhcyAmIENLRF9EQykgJiYgKihtcC0+ZGNfb2ZmX3N0 cikpIHsKLQkJeCA9IDE7Ci0JCXR0c2xvdyhtcC0+ZGNfb2ZmX3N0ciwgd3IpOwotCSAgICB9Ci0j aWZkZWYgQ09NTUVOVAotCSAgICBlbHNlIHByaW50ZigKLSJXQVJOSU5HIC0gSSBkb24ndCBrbm93 IGhvdyB0byB0dXJuIG9mZiBjb21wcmVzc2lvbiBmb3IgdGhpcyBtb2RlbVxuIgotCQkJICApOwot I2VuZGlmIC8qIENPTU1FTlQgKi8KLQl9Ci0JaWYgKHggJiYgeHhfb2spIHsJCQkvKiBMb29rIGZv ciBPSyByZXNwb25zZSAqLwotCSAgICB4ID0gKCp4eF9vaykoNSwxKTsKLQkgICAgaWYgKHggPCAw KSBwcmludGYoIldBUk5JTkcgLSBUcm91YmxlIGVuYWJsaW5nIGNvbXByZXNzaW9uXG4iKTsKLQl9 Ci0gICAgfQotCi0jaWZuZGVmIE5PWEZFUgotI2lmbmRlZiBNSU5JRElBTAotICAgIGlmIChtZG1j YXBhcyAmIENLRF9LUyAmJiBkaWFsc3RhICE9IERJQV9QQVJUKSB7IC8qIEtlcm1pdCBzcG9vZiAq LwotCWludCByOwkJCQkvKiBSZWdpc3RlciAqLwotCWNoYXIgdGJjbWRidWZbNjRdOwkJLyogQ29t bWFuZCBidWZmZXIgKi8KLQlzd2l0Y2ggKG15bWRtdHlwKSB7Ci0KLQkgIGNhc2Ugbl9NSUNST0NP TToJCS8qIE1pY3JvY29tcyBpbiBTWCBtb2RlICovCi0gIAkgICAgaWYgKGRpYWxrc3ApCi0JICAg ICAgc3ByaW50Zih0YmNtZGJ1ZiwiQVBNMTtLTUMlZFwwMTUiLHN0Y2hyKTsJLyogc2FmZSAqLwot CSAgICBlbHNlCi0JICAgICAgc3ByaW50Zih0YmNtZGJ1ZiwiQVBNMFwwMTUiKTsgLyogc2FmZSAq LwotICAJICAgIHR0c2xvdyh0YmNtZGJ1ZiwgTUlDUk9DT00ud2FrZV9yYXRlKTsKLSAgCSAgICBh bGFybSgzKTsKLQkgICAgd2FpdGZvcihtcC0+d2FrZV9wcm9tcHQpOwotCSAgICBhbGFybSgwKTsK LQkgICAgYnJlYWs7Ci0KLQkgIGNhc2Ugbl9URUxFQklUOgkJLyogT2xkIGFuZCBuZXcgVGVsZWJp dHMgKi8KLQkgIGNhc2Ugbl9UQk5FVzoKLQkgICAgaWYgKCFkaWFsa3NwKSB7Ci0JCXNwcmludGYo dGJjbWRidWYsIkFUUzExMT0wXDAxNSIpOyAvKiBzYWZlICovCi0JICAgIH0gZWxzZSB7Ci0JCXN3 aXRjaCAocGFyaXR5KSB7CS8qIFMxMTEgdmFsdWUgZGVwZW5kcyBvbiBwYXJpdHkgKi8KLQkJICBj YXNlICdlJzogciA9IDEyOyBicmVhazsKLQkJICBjYXNlICdtJzogciA9IDEzOyBicmVhazsKLQkJ ICBjYXNlICdvJzogciA9IDExOyBicmVhazsKLQkJICBjYXNlICdzJzogciA9IDE0OyBicmVhazsK LQkJICBjYXNlIDA6Ci0JCSAgZGVmYXVsdDogIHIgPSAxMDsgYnJlYWs7Ci0JCX0KLQkJc3ByaW50 Zih0YmNtZGJ1ZiwiQVRTMTExPSVkIFMxMTI9JWRcMDE1IixyLHN0Y2hyKTsgLyogc2FmZSAqLwot CSAgICB9Ci0JICAgIHR0c2xvdyh0YmNtZGJ1Ziwgd3IpOwotCi0vKiBOb3QgYWxsIFRlbGViaXQg bW9kZWxzIGhhdmUgdGhlIEtlcm1pdCBzcG9vZiwgc28gaWdub3JlIHJlc3BvbnNlLiAqLwotCi0J ICAgIGlmICh4eF9vaykgewkJLyogR2V0IG1vZGVtJ3MgcmVzcG9uc2UgKi8KLQkJeCA9ICgqeHhf b2spKDUsMSk7Ci0JICAgIH0KLQl9Ci0gICAgfQotI2VuZGlmIC8qIE1JTklESUFMICovCi0jZW5k aWYgLyogTk9YRkVSICovCi0KLSAgICAvKiBTcGVha2VyICovCi0KLSAgICBpZiAobXltZG10eXAg IT0gbl9HRU5FUklDICYmCi0JKG1kbWNhcGFzICYgQ0tEX0FUKSAmJiAoZGlhbHN0YSAhPSBESUFf UEFSVCkgJiYKLQkhZGlhbHNwb24gJiYgIWRpYWxzcG9mZiAmJgotCSFkaWFsdm9sMSAmJiAhZGlh bHZvbDIgJiYhZGlhbHZvbDMpIHsKLQkvKiBBVCBjb21tYW5kIHNldCBhbmQgY29tbWFuZHMgaGF2 ZSBub3QgYmVlbiBjdXN0b21pemVkICovCi0JLyogc28gY29tYmluZSBzcGVha2VyIGFuZCB2b2x1 bWUgY29tbWFuZHMuICovCi0JaWYgKG1kbXNwaykKLQkgIHNwcmludGYobGJ1ZiwiQVRNMUwlZCVj IixtZG12b2wsMTMpOyAvKiBzYWZlICovCi0JZWxzZQotCSAgc3ByaW50ZihsYnVmLCJBVE0wJWMi LDEzKTsJLyogc2FmZSAqLwotCXR0c2xvdyhsYnVmLHdyKTsJCS8qIFNlbmQgY29tbWFuZCAqLwot CWdldG9rKDUsMSk7CQkJLyogR2V0IGJ1dCBpZ25vcmUgcmVzcG9uc2UgKi8KLSAgICB9IGVsc2Ug aWYgKGRpYWxzdGEgIT0gRElBX1BBUlQpIHsJLyogQ3VzdG9taXplZCBvciBub3QgQVQgY29tbWFu ZHMgKi8KLQl4ID0gMDsJCQkJLyogRG8gaXQgdGhlIGhhcmQgd2F5ICovCi0JaWYgKG1kbXNwaykg ewotCSAgICBpZiAoZGlhbHNwb24pIHsKLQkJaWYgKCpkaWFsc3BvbikgewotCQkgICAgeCA9IDE7 Ci0JCSAgICB0dHNsb3coZGlhbHNwb24sd3IpOwotCQl9Ci0JICAgIH0gZWxzZSB7Ci0gICAgICAg ICAgICAgICAgaWYgKG1wLT5zcF9vbl9zdHJbMF0pIHsKLQkJICAgIHggPSAxOwotCQkgICAgdHRz bG93KG1wLT5zcF9vbl9zdHIsd3IpOwotCQl9Ci0JICAgIH0KLQl9IGVsc2UgewotCSAgICAvKiBz ID0gZGlhbHNwb2ZmID8gZGlhbHNwb2ZmIDogbXAtPnNwX29mZl9zdHI7ICovCi0JICAgIGlmIChk aWFsc3BvZmYpIHsKLQkJaWYgKCpkaWFsc3BvZmYpIHsKLQkJICAgIHggPSAxOwotCQkgICAgdHRz bG93KGRpYWxzcG9mZix3cik7Ci0JCX0KLQkgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBp ZiAobXAtPnNwX29mZl9zdHJbMF0pIHsKLQkJICAgIHggPSAxOwotCQkgICAgdHRzbG93KG1wLT5z cF9vZmZfc3RyLHdyKTsKLQkJfQotCSAgICB9Ci0JfQotCWlmICh4KSB7Ci0JICAgIGlmICh4eF9v aykJCQkvKiBHZXQgcmVzcG9uc2UgKi8KLQkgICAgICB4ID0gKCp4eF9vaykoNSwxKTsKLQkgICAg aWYgKHggJiYgbWRtc3BrKSB7CQkvKiBHb29kIHJlc3BvbnNlIGFuZCBzcGVha2VyIG9uPyAqLwot CQlzd2l0Y2ggKG1kbXZvbCkgewkvKiBZZXMsIHNlbmQgdm9sdW1lIGNvbW1hbmQuICovCi0JCSAg Y2FzZSAwOgotCQkgIGNhc2UgMToKLQkJICAgIHMgPSBkaWFsdm9sMSA/IGRpYWx2b2wxIDogbXAt PnZvbDFfc3RyOyBicmVhazsKLQkJICBjYXNlIDI6Ci0JCSAgICBzID0gZGlhbHZvbDIgPyBkaWFs dm9sMiA6IG1wLT52b2wyX3N0cjsgYnJlYWs7Ci0JCSAgY2FzZSAzOgotCQkgICAgcyA9IGRpYWx2 b2wzID8gZGlhbHZvbDMgOiBtcC0+dm9sM19zdHI7IGJyZWFrOwotCQkgIGRlZmF1bHQ6Ci0JCSAg ICBzID0gTlVMTDsKLQkJfQotCQlpZiAocykgaWYgKCpzKSB7CS8qIFNlbmQgdm9sdW1lIGNvbW1h bmQuICovCi0JCSAgICB0dHNsb3cocywgd3IpOwotCQkgICAgaWYgKHh4X29rKQkJLyogR2V0IHJl c3BvbnNlIGJ1dCBpZ25vcmUgaXQgKi8KLQkJICAgICAgKCp4eF9vaykoNSwxKTsKLQkJfQotCSAg ICB9Ci0JfQotICAgIH0KLQotI2lmbmRlZiBDS19BVERUCi0gICAgLyogRGlhbGluZyBNZXRob2Qg Ki8KLQotICAgIGlmIChkaWFsbXRoICYmIGRpYWxzdGEgIT0gRElBX1BBUlQpIHsgLyogSWYgZGlh bGluZyBtZXRob2Qgc3BlY2lmaWVkLi4uICovCi0JY2hhciAqcyA9ICIiOwkJCS8qIERvIGl0IGhl cmUuLi4gKi8KLQotCWlmIChkaWFsbXRoID09IFhZRE1fVCAmJiBkaWFsdG9uZSkgLyogVG9uZSAq LwotCSAgcyA9IGRpYWx0b25lOwotCWVsc2UgaWYgKGRpYWxtdGggPT0gWFlETV9QICYmIGRpYWxw dWxzZSkgLyogUHVsc2UgKi8KLQkgIHMgPSBkaWFscHVsc2U7Ci0JaWYgKHMpIGlmICgqcykgewot CSAgICB0dHNsb3cocywgd3IpOwotCSAgICBpZiAoeHhfb2spCQkJLyogR2V0IG1vZGVtJ3MgcmVz cG9uc2UgKi8KLQkgICAgICAoKnh4X29rKSg1LDEpOwkJLyogKGJ1dCBpZ25vcmUgaXQuLi4pICov Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBDS19BVERUICovCi0KLSAgICBpZiAoZGlhbGlkdCkgewkJ CS8qIElnbm9yZSBkaWFsdG9uZT8gKi8KLQljaGFyICpzID0gIiI7Ci0JcyA9IGRpYWx4MyA/IGRp YWx4MyA6IG1wLT5pZ25vcmVkdDsKLQlpZiAocykgaWYgKCpzKSB7Ci0JICAgIHR0c2xvdyhzLCB3 cik7Ci0JICAgIGlmICh4eF9vaykJCQkvKiBHZXQgbW9kZW0ncyByZXNwb25zZSAqLwotCSAgICAg ICgqeHhfb2spKDUsMSk7CQkvKiAoYnV0IGlnbm9yZSBpdC4uLikgKi8KLQl9Ci0gICAgfQotICAg IHsKLQljaGFyICpzID0gIiI7CQkJLyogTGFzdC1taW51dGUgaW5pdCBzdHJpbmc/ICovCi0JcyA9 IGRpYWxpbmkyID8gZGlhbGluaTIgOiBtcC0+aW5pMjsKLQlpZiAocykgaWYgKCpzKSB7Ci0JICAg IHR0c2xvdyhzLCB3cik7Ci0JICAgIGlmICh4eF9vaykJCQkvKiBHZXQgbW9kZW0ncyByZXNwb25z ZSAqLwotCSAgICAgICgqeHhfb2spKDUsMSk7CQkvKiAoYnV0IGlnbm9yZSBpdC4uLikgKi8KLQl9 Ci0gICAgfQotICAgIGlmIChmdW5jX2NvZGUgPT0gMSkgewkJLyogQU5TV0VSIChub3QgRElBTCkg Ki8KLQljaGFyICpzOwotCXMgPSBkaWFsYWFvbiA/IGRpYWxhYW9uIDogbXAtPmFhX29uX3N0cjsK LQlpZiAoIXMpIHMgPSAiIjsKLQlpZiAoKnMpIHsKLQkgICAgLyogSGVyZSB3ZSB3b3VsZCBoYW5k bGUgY2FsbGVyIElEICovCi0JICAgIHR0c2xvdyhzLCAoZGlhbHBhY2UgPiAtMSkgPyB3ciA6IG1w LT5kaWFsX3JhdGUpOwotCSAgICBpZiAoeHhfb2spCQkJLyogR2V0IG1vZGVtJ3MgcmVzcG9uc2Ug Ki8KLQkgICAgICAoKnh4X29rKSg1LDEpOwkJLyogKGJ1dCBpZ25vcmUgaXQuLi4pICovCi0JfSBl bHNlIHsKLQkgICAgcHJpbnRmKAotIldBUk5JTkcgLSBJIGRvbid0IGtub3cgaG93IHRvIGVuYWJs ZSBhdXRvYW5zd2VyIGZvciB0aGlzIG1vZGVtLlxuIgotCQkgICApOwotCX0gLyogQW5kIHNraXAg YWxsIHRoZSBwaG9uZS1udW1iZXIgJiBkaWFsaW5nIHN0dWZmLi4uICovCi0JYWxhcm0od2FpdGN0 KTsJCQkvKiBUaGlzIG11Y2ggdGltZSBhbGxvd2VkLiAqLwotCWRlYnVnKEYxMDEsIl9kb2RpYWwg QU5TV0VSIHdhaXRjdCIsIiIsd2FpdGN0KTsKLQotICAgIH0gZWxzZSB7CQkJCS8qIERJQUwgKG5v dCBBTlNXRVIpICovCi0KLQlpZiAoZGlhbHN0YSAhPSBESUFfUEFSVCkgewkvKiBMYXN0IGRpYWwg d2FzIG5vdCBwYXJ0aWFsICovCi0KLQkgICAgY2hhciAqcyA9ICIiOwotI2lmZGVmIENPTU1FTlQK LQkgICAgcyA9IGRpYWxhYW9mZiA/IGRpYWxhYW9mZiA6IG1wLT5hYV9vZmZfc3RyOwotI2VuZGlm IC8qIENPTU1FTlQgKi8KLQkgICAgaWYgKHMpIGlmICgqcykgewotCQl0dHNsb3cocywgKGRpYWxw YWNlID4gLTEpID8gd3IgOiBtcC0+ZGlhbF9yYXRlKTsKLQkJaWYgKHh4X29rKQkJLyogR2V0IG1v ZGVtJ3MgcmVzcG9uc2UgKi8KLQkJICAoKnh4X29rKSg1LDEpOwkvKiAoYnV0IGlnbm9yZSBpdC4u LikgKi8KLQkgICAgfQotCi0JICAgIC8qIFB1dCBtb2RlbSBpbnRvIGRpYWxpbmcgbW9kZSwgaWYg dGhlIG1vZGVtIHJlcXVpcmVzIGl0LiAqLwotCi0JICAgIGlmIChtcC0+ZG1vZGVfc3RyICYmICoo bXAtPmRtb2RlX3N0cikpIHsKLQkJdHRzbG93KG1wLT5kbW9kZV9zdHIsIChkaWFscGFjZSA+IC0x KSA/IHdyIDogbXAtPmRpYWxfcmF0ZSk7Ci0JCXNhdmFscm0gPSBzaWduYWwoU0lHQUxSTSxkaWFs dGltZSk7Ci0JCWFsYXJtKDEwKTsKLQkJLyogV2FpdCBmb3IgcHJvbXB0LCBpZiBhbnkgZXhwZWN0 ZWQgKi8KLQkJaWYgKG1wLT5kbW9kZV9wcm9tcHQgJiYgKihtcC0+ZG1vZGVfcHJvbXB0KSkgewot CQkgICAgd2FpdGZvcihtcC0+ZG1vZGVfcHJvbXB0KTsKLQkJICAgIG1zbGVlcCgzMDApOwotCQl9 Ci0JCWFsYXJtKDApOwkJLyogVHVybiBvZmYgYWxhcm0gb24gZGlhbGluZyBwcm9tcHRzICovCi0J CXNpZ25hbChTSUdBTFJNLHNhdmFscm0pOyAvKiBSZXN0b3JlIGFsYXJtICovCi0JICAgIH0KLQl9 Ci0JLyogQVQtQ29tbWFuZC1TZXQgbm9uLUdlbmVyaWMgbW9kZW0gKi8KLQlpZiAobWRtY2FwYXMg JiBDS0RfQVQgJiYgbXltZG10eXAgIT0gbl9HRU5FUklDICYmCi0JICAgIGRpYWxzdGEgIT0gRElB X1BBUlQpIHsKLQkgICAgaWYgKG1kbXdhaXQgPiAyNTUpCQkvKiBJZiBsYXJnZXIgdGhhbiBtYXhp bXVtLCAqLwotCSAgICAgIG1kbXdhaXQgPSAyNTU7CQkvKiBtYWtlIGl0IG1heGltdW0uICovCi0J ICAgIGlmIChkaWFsZXNjID4gMCAmJgkJLyogTW9kZW0gZXNjYXBlIGNoYXJhY3RlciBpcyBzZXQg Ki8KLQkJZGlhbG1odSA+IDApIHsJCS8qIEhhbmd1cCBtZXRob2QgaXMgbW9kZW0gY29tbWFuZCAq LwotCQlpbnQgeCA9IGRpYWxlc2M7Ci0JCWlmIChkaWFsZXNjIDwgMCB8fCBkaWFsZXNjID4gMTI3 KQotCQkgIHggPSAxMjg7Ci0JCXNwcmludGYobGJ1ZiwKLQkJCSJBVFMyPSVkUzc9JWRcMDE1IiwK LQkJCWRpYWxlc2MgPyB4IDogbXAtPmVzY19jaGFyLCBtZG13YWl0KTsgLyogc2FmZSAqLwotCSAg ICB9IGVsc2UKLQkgICAgICBzcHJpbnRmKGxidWYsIkFUUzc9JWQlYyIsbWRtd2FpdCwxMyk7IC8q IHNhZmUgKi8KLQkgICAgdHRzbG93KGxidWYsd3IpOwkJLyogU2V0IGl0LiAqLwotCSAgICBtZG1z dGF0ID0gZ2V0b2soNSwxKTsJLyogR2V0IHJlc3BvbnNlIGZyb20gbW9kZW0gKi8KLQkgICAgLyog SWYgaXQgZ2V0cyBhbiBlcnJvciwgZ28gYWhlYWQgYW55d2F5ICovCi0JICAgIGRlYnVnKEYxMDEs Il9kb2RpYWwgUzcgbWRtc3RhdCIsIiIsbWRtc3RhdCk7Ci0JfQotCXR0Zmx1aSgpOwkJCS8qIENs ZWFyIG91dCBzdHVmZiBmcm9tIG1vZGVtIHNldHVwICovCi0JaW5pdGVkID0gMTsJCQkvKiBSZW1l bWJlciBtb2RlbSBpcyBpbml0aWFsaXplZCAqLwotCi0gICAgICBSRURJQUw6Ci0JaWYgKChpbnQp c3RybGVuKGRjbWQpICsgKGludClzdHJsZW4oeG51bSkgPiBMQlVGTCkKLQkgIGNrc3RybmNweShs YnVmLCJOVU1CRVIgVE9PIExPTkchIixMQlVGTCk7Ci0JZWxzZQotCSAgc3ByaW50ZihsYnVmLCBk Y21kLCB4bnVtKTsJLyogc2FmZSAocHJlY2hlY2tlZCkgKi8KLQlkZWJ1ZyhGMTEwLCJkaWFsaW5n IixsYnVmLDApOwotCS8qIFNlbmQgdGhlIGRpYWxpbmcgc3RyaW5nICovCi0JdHRzbG93KGxidWYs ZGlhbHBhY2UgPiAtMSA/IHdyIDogbXAtPmRpYWxfcmF0ZSk7Ci0KLQlmYWlsX2NvZGUgPSBGX01P REVNOwkJLyogTmV3IGRlZmF1bHQgZmFpbHVyZSBjb2RlIGNoYW5nZXMgKi8KLQlkaWFsX3doYXQg PSBEV19ESUFMOwkJLyogYW5kIG91ciBzdGF0ZSwgdG9vLiAqLwotCWlmIChkaWFsZHB5KSB7CQkJ LyogSWYgc2hvd2luZyBwcm9ncmVzcyAqLwotCSAgICBwID0gY2tfdGltZSgpOwkJLyogZ2V0IGN1 cnJlbnQgdGltZTsgKi8KLQkgICAgaWYgKCpwKSBwcmludGYoIiBEaWFsaW5nOiAlcy4uLlxuIixw KTsKLSNpZmRlZiBWTVMKLQkgICAgcHJpbnRmKCIgXG4iKTsKLQkgICAgZmZsdXNoKHN0ZG91dCk7 Ci0jZW5kaWYgLyogVk1TICovCi0JfQotCWFsYXJtKHdhaXRjdCk7CQkJLyogVGhpcyBtdWNoIHRp bWUgYWxsb3dlZC4gKi8KLQlkZWJ1ZyhGMTAxLCJfZG9kaWFsIHdhaXRjdCIsIiIsd2FpdGN0KTsK LQotI2lmbmRlZiBNSU5JRElBTAotI2lmZGVmIE9MRE1PREVNUwotCXN3aXRjaCAobXltZG10eXAp IHsKLQkgIGNhc2Ugbl9SQUNBTDoJCQkvKiBBY2tub3dsZWRnZSBkaWFsaW5nIHN0cmluZyAqLwot CSAgICBzbGVlcCgzKTsKLQkgICAgdHRmbHVpKCk7Ci0JICAgIHR0b2MoJ1wwMTUnKTsKLQkgICAg YnJlYWs7Ci0JICBjYXNlIG5fVkVOVEVMOgotCSAgICB3YWl0Zm9yKCJcMDEyXDAxMiIpOwkvKiBJ Z25vcmUgdGhlIGZpcnN0IHR3byBzdHJpbmdzICovCi0JICAgIGJyZWFrOwotCSAgZGVmYXVsdDoK LQkgICAgYnJlYWs7Ci0JfQotI2VuZGlmIC8qIE9MRE1PREVNUyAqLwotI2VuZGlmIC8qIE1JTklE SUFMICovCi0gICAgfQotCi0vKiBDaGVjayBmb3IgY29ubmVjdGlvbiAqLwotCi0gICAgbWRtc3Rh dCA9IDA7CQkJLyogTm8gc3RhdHVzIHlldCAqLwotICAgIGxidWZbMF0gPSBOVUw7CQkJLyogRGVm YXVsdCByZWFzb24gZm9yIGZhaWx1cmUgKi8KLSAgICBkZWJ1ZyhGMTAxLCJkaWFsIGF3YWl0aW5n IHJlc3BvbnNlLCBteW1kbXR5cCIsIiIsbXltZG10eXApOwotCi0jaWZuZGVmIE5PU1BMCi0gICAg bW9kZW1tc2dbMF0gPSBOVUw7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICB3aGlsZSAobWRtc3Rh dCA9PSAwKSB7CQkvKiBUaWxsIHdlIGdldCBhIHJlc3VsdCBvciB0aW1lIG91dCAqLwotCi0JaWYg KChtZG1jYXBhcyAmIENLRF9BVCkgJiYgbm9udmVyYmFsKSB7IC8qIEFUIGNvbW1hbmQgc2V0ICov Ci0JICAgIGdldGhybigpOwkJCS8qIEluIGRpZ2l0IHJlc3VsdCBtb2RlICovCi0JICAgIGlmIChw YXJ0aWFsICYmIGRpYWxzdGEgPT0gRElBX0VSUikgewotCQkvKgotCQkgICBJZiB3ZSBnZXQgYW4g ZXJyb3IgaGVyZSwgdGhlIHBob25lIGlzIHN0aWxsCi0JCSAgIG9mZiBob29rIHNvIHdlIGhhdmUg dG8gaGFuZyBpdCB1cC4KLQkJKi8KLQkJZGlhbGh1cCgpOwotCQlkaWFsc3RhID0gRElBX0VSUjsJ LyogKGJlY2F1c2UgZGlhbGh1cCgpIGNoYW5nZXMgaXQpICovCi0JICAgIH0KLQkgICAgY29udGlu dWU7Ci0KLQl9IGVsc2UgaWYgKG15bWRtdHlwID09IG5fVU5LTk9XTikgeyAvKiBVbmtub3duIG1v ZGVtIHR5cGUgKi8KLQkgICAgaW50IHgsIHkgPSB3YWl0Y3Q7Ci0JICAgIG1kbXN0YXQgPSBEX0ZB SUxFRDsJCS8qIEFzc3VtZSBmYWlsdXJlLiAqLwotCSAgICB3aGlsZSAoeS0tID4gLTEpIHsKLQkJ eCA9IHR0Y2hrKCk7Ci0JCWlmICh4ID4gMCkgewotCQkgICAgaWYgKHggPiBMQlVGTCkgeCA9IExC VUZMOwotCQkgICAgeCA9IHR0eGluKHgsKENIQVIgKilsYnVmKTsKLQkJICAgIGlmICgoeCA+IDAp ICYmIGRpYWxkcHkpIGNvbm9sKGxidWYpOwotCQl9IGVsc2UgaWYgKG5ldHdvcmsgCi0jaWZkZWYg VE5fQ09NUE9SVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIWlzdG5jb21wb3J0KCkK LSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB4 IDwgMCkgeyAvKiBDb25uZWN0aW9uIGRyb3BwZWQgKi8KLQkJICAgIGluaXRlZCA9IDA7Ci0jaWZk ZWYgTlRTSUcKLQkJICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOwotI2VuZGlmIC8qIE5UU0lH ICovCi0JCSAgICBkaWFsc3RhID0gRElBX0lPOwkvKiBDYWxsIGl0IGFuIEkvTyBlcnJvciAqLwot I2lmZGVmIERZTkFNSUMKLQkJICAgIGlmIChyYnVmKSBmcmVlKHJidWYpOyByYnVmID0gTlVMTDsK LQkJICAgIGlmIChmYnVmKSBmcmVlKGZidWYpOyBmYnVmID0gTlVMTDsKLSNlbmRpZiAvKiBEWU5B TUlDICovCi0JCSAgICBTSUdSRVRVUk47Ci0JCX0KLQkJeCA9IHR0Z21kbSgpOwkJLyogVHJ5IHRv IHJlYWQgbW9kZW0gc2lnbmFscyAqLwotCQlpZiAoeCA8IDApIGJyZWFrOwkvKiBDYW4ndCwgZmFp bC4gKi8KLQkJaWYgKHggJiBCTV9EQ0QpIHsJLyogR290IHNpZ25hbHMgT0suICBDYXJyaWVyIHBy ZXNlbnQ/ICovCi0JCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOyAvKiBZZXMsIGRvbmUuICovCi0J CSAgICBicmVhazsKLQkJfQkJCS8qIE5vLCBrZWVwIHdhaXRpbmcuICovCi0JCXNsZWVwKDEpOwot CSAgICB9Ci0JICAgIGNvbnRpbnVlOwotCX0KLQotCWZvciAobiA9IC0xOyBuIDwgTEJVRkwtMTsg KSB7CS8qIEFjY3VtdWxhdGUgbW9kZW0gcmVzcG9uc2UgKi8KLQkgICAgaW50IHh4OwotCSAgICBj MiA9IChjaGFyKSAoeHggPSBkZGluYygwKSk7IC8qIFJlYWQgYSBjaGFyYWN0ZXIsIGJsb2NraW5n ICovCi0JICAgIGlmICh4eCA8IDEpCQkJLyogSWdub3JlIE5VTHMgYW5kIGVycm9ycyAqLwotCSAg ICAgIGNvbnRpbnVlOwkJCS8qIChUaW1lb3V0IHdpbGwgaGFuZGxlIGVycm9ycykgKi8KLQkgICAg ZWxzZQkJCS8qIFJlYWwgY2hhcmFjdGVyLCBrZWVwIGl0ICovCi0JICAgICAgbGJ1ZlsrK25dID0g KGNoYXIpIChjMiAmIDAxNzcpOwotCSAgICBkaWFsb2MobGJ1ZltuXSk7CQkvKiBNYXliZSBlY2hv IGl0ICAqLwotCSAgICBpZiAobWRtY2FwYXMgJiBDS0RfVjI1KSB7CS8qIFYuMjViaXMgZGlhbGlu Zy4uLiAqLwotLyoKLSAgVGhpcyBhc3N1bWVzIHRoYXQgVi4yNWJpcyBpbmRpY2F0aW9ucyBhcmUg YWxsIGF0IGxlYXN0IDMgY2hhcmFjdGVycyBsb25nCi0gIGFuZCBhcmUgdGVybWluYXRlZCBieSBl aXRoZXIgQ1JMRiBvciBMRkNSLgotKi8KLQkJaWYgKG15bWRtdHlwID09IG5fQ0NJVFQpIHsKLQkJ ICAgIGlmIChuIDwgMykgY29udGludWU7Ci0JCSAgICBpZiAoKGxidWZbbl0gPT0gQ1IpICYmIChs YnVmW24tMV0gPT0gTEYpKSBicmVhazsKLQkJICAgIGlmICgobGJ1ZltuXSA9PSBMRikgJiYgKGxi dWZbbi0xXSA9PSBDUikpIGJyZWFrOwotCQl9Ci0jaWZuZGVmIE1JTklESUFMCi0JCWVsc2UgaWYg KG15bWRtdHlwID09IG5fRElHSVRFTCkgewotCQkgICAgaWYgKCgobGJ1ZltuXSA9PSBDUikgJiYg KGxidWZbbi0xXSA9PSBMRikpIHx8Ci0JCQkoKGxidWZbbl0gPT0gTEYpICYmIChsYnVmW24tMV0g PT0gQ1IpKSkKLQkJICAgICAgYnJlYWs7Ci0JCSAgICBlbHNlCi0JCSAgICAgIGNvbnRpbnVlOwot CQl9Ci0jZW5kaWYgLyogTUlOSURJQUwgKi8KLQkgICAgfSBlbHNlIHsJCQkvKiBBbGwgb3RoZXJz LCBicmVhayBvbiBDUiBvciBMRiAqLwotCQlpZiAoIGxidWZbbl0gPT0gQ1IgfHwgbGJ1ZltuXSA9 PSBMRiApIGJyZWFrOwotCSAgICB9Ci0JfQotCWxidWZbKytuXSA9ICdcMCc7CQkvKiBUZXJtaW5h dGUgcmVzcG9uc2UgZnJvbSBtb2RlbSAqLwotCWRlYnVnKEYxMTEsIl9kb2RpYWwgbW9kZW0gcmVz cG9uc2UiLGxidWYsbik7Ci0jaWZuZGVmIE5PU1BMCi0JY2tzdHJuY3B5KG1vZGVtbXNnLGxidWYs TEJVRkwpOwkvKiBDYWxsIHJlc3VsdCBtZXNzYWdlICovCi0JbGJ1Zls3OV0gPSBOVUw7Ci0Jewot CSAgICBpbnQgeDsJCQkvKiBTdHJpcCBqdW5rIGZyb20gZW5kICovCi0JICAgIHggPSAoaW50KXN0 cmxlbihtb2RlbW1zZykgLSAxOwotCSAgICB3aGlsZSAoeCA+IC0xKSB7Ci0JCWlmIChtb2RlbW1z Z1t4XSA8IChjaGFyKSAzMykKLQkJICBtb2RlbW1zZ1t4XSA9IE5VTDsKLQkJZWxzZQotCQkgIGJy ZWFrOwotCQl4LS07Ci0JICAgIH0KLQl9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQlpZiAobWRtY2Fw YXMgJiBDS0RfQVQpIHsJLyogSGF5ZXMgQVQgY29tbWFuZCBzZXQgKi8KLQkgICAgZ2V0aHJ3KCk7 CQkJLyogaW4gd29yZCByZXN1bHQgbW9kZSAqLwotCSAgICBpZiAocGFydGlhbCAmJiBkaWFsc3Rh ID09IERJQV9FUlIpIHsKLQkJZGlhbGh1cCgpOwotCQlkaWFsc3RhID0gRElBX0VSUjsJLyogKGJl Y2F1c2UgZGlhbGh1cCgpIGNoYW5nZXMgaXQpICovCi0JICAgIH0KLQkgICAgY29udGludWU7Ci0J fSBlbHNlIGlmIChtZG1jYXBhcyAmIENLRF9WMjUpIHsgLyogQ0NJVFQgY29tbWFuZCBzZXQgKi8K LQkgICAgaWYgKGRpZHdlZ2V0KGxidWYsIlZBTCIpKSB7IC8qIERpYWwgY29tbWFuZCBjb25maXJt YXRpb24gKi8KLSNpZm5kZWYgTUlOSURJQUwKLQkJaWYgKG15bWRtdHlwID09IG5fQ0NJVFQpCi0j ZW5kaWYgLyogTUlOSURJQUwgKi8KLQkJICBjb250aW51ZTsJCS8qIEdvIGJhY2sgYW5kIHJlYWQg bW9yZSAqLwotI2lmbmRlZiBNSU5JRElBTAotLyogRGlnaXRlbCBkb2Vzbid0IGdpdmUgYW4gZXhw bGljaXQgY29ubmVjdCBjb25maXJtYXRpb24gbWVzc2FnZSAqLwotCQllbHNlIHsKLQkJICAgIGlu dCBuOwotCQkgICAgZm9yIChuID0gLTE7IG4gPCBMQlVGTC0xOyApIHsKLQkJCWxidWZbKytuXSA9 IGMyID0gKGNoYXIpIChkZGluYygwKSAmIDAxNzcpOwotCQkJZGlhbG9jKGxidWZbbl0pOwotCQkJ aWYgKCgobGJ1ZltuXSA9PSBDUikgJiYgKGxidWZbbi0xXSA9PSBMRikpIHx8Ci0JCQkgICAgKChs YnVmW25dID09IExGKSAmJiAobGJ1ZltuLTFdID09IENSKSkpCi0JCQkgIGJyZWFrOwotCQkgICAg fQotCQkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsgLyogQXNzdW1lIHdlJ3JlIGNvbm5lY3RlZCAq LwotCQkgICAgaWYgKGRpYWxkcHkgJiYgY2FycmllciAhPSBDQVJfT0ZGKSB7Ci0jaWZkZWYgVE5f Q09NUE9SVAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzdG5jb21wb3J0KCkpIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRlYnVnKEYxMDAsIlROIENvbSBQb3J0IERDRCB3YWl0Li4uIiwiIiwwKTsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChuID0gdHRnbWRtKCkpID49IDApIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobiAmIEJNX0RDRCkpCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBtc2xlZXAoNTAwKTsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRuY193YWl0KAotCQkJCQkoQ0hBUiAqKSJfZG9kaWFsIHdhaXRpbmcg Zm9yIERDRCIsMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSNl bmRpZiAvKiBUTl9DT01QT1JUICovCi0JCQkgIHNsZWVwKDEpOyAJLyogV2FpdCBhIHNlY29uZCAq LwotCQkJbiA9IHR0Z21kbSgpOwkvKiBUcnkgdG8gcmVhZCBtb2RlbSBzaWduYWxzICovCi0JCQlp ZiAoKG4gPiAtMSkgJiYgKChuICYgQk1fRENEKSA9PSAwKSkKLQkJCSAgcHJpbnRmKCJXQVJOSU5H IC0gbm8gY2FycmllclxuIik7Ci0JCSAgICB9Ci0JCX0KLSNlbmRpZiAvKiBNSU5JRElBTCAqLwot Ci0JCS8qIFN0YW5kYXJkIFYuMjViaXMgc3R1ZmYgKi8KLQotCSAgICB9IGVsc2UgaWYgKGRpZHdl Z2V0KGxidWYsIkNOWCIpKSB7IC8qIENvbm5lY3RlZCAqLwotCQltZG1zdGF0ID0gQ09OTkVDVEVE OwotCSAgICB9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsICJJTlYiKSkgewotCQltZG1zdGF0ID0g RF9GQUlMRUQ7CS8qIENvbW1hbmQgZXJyb3IgKi8KLQkJZGlhbHN0YSA9IERJQV9FUlI7Ci0JCWNr c3RybmNweShsYnVmLCJJTlYiLExCVUZMKTsKLQotCSAgICB9IGVsc2UgaWYgKGRpZHdlZ2V0KGxi dWYsIkNGSSIpKSB7IC8qIENhbGwgRmFpbHVyZSAqLwotCi0JCWlmIChkaWR3ZWdldChsYnVmLCJB QiIpKSB7IC8qIEludGVycHJldCByZWFzb24gY29kZSAqLwotCQkgICAgY2tzdHJuY3B5KGxidWYs IkFCOiBUaW1lZCBvdXQiLExCVUZMKTsKLQkJICAgIGRpYWxzdGEgPSBESUFfVElNTzsKLQkJfSBl bHNlIGlmIChkaWR3ZWdldChsYnVmLCJDQiIpKSB7Ci0JCSAgICBja3N0cm5jcHkobGJ1ZiwiQ0I6 IExvY2FsIERDRSBCdXN5IixMQlVGTCk7Ci0JCSAgICBkaWFsc3RhID0gRElBX05SRFk7Ci0JCX0g ZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiRVQiKSkgewotCQkgICAgY2tzdHJuY3B5KGxidWYsIkVU OiBCdXN5IixMQlVGTCk7Ci0JCSAgICBkaWFsc3RhID0gRElBX0JVU1k7Ci0JCX0gZWxzZSBpZiAo ZGlkd2VnZXQobGJ1ZiwgIk5TIikpIHsKLQkJICAgIGNrc3RybmNweShsYnVmLCJOUzogTnVtYmVy IG5vdCBzdG9yZWQiLExCVUZMKTsKLQkJICAgIGRpYWxzdGEgPSBESUFfRVJSOwotCQl9IGVsc2Ug aWYgKGRpZHdlZ2V0KGxidWYsIk5UIikpIHsKLQkJICAgIGNrc3RybmNweShsYnVmLCJOVDogTm8g YW5zd2VyIixMQlVGTCk7Ci0JCSAgICBkaWFsc3RhID0gRElBX05PQU47Ci0JCX0gZWxzZSBpZiAo ZGlkd2VnZXQobGJ1ZiwiUlQiKSkgewotCQkgICAgY2tzdHJuY3B5KGxidWYsIlJUOiBSaW5nIHRv bmUiLExCVUZMKTsKLQkJICAgIGRpYWxzdGEgPSBESUFfUklORzsKLQkJfSBlbHNlIGlmIChkaWR3 ZWdldChsYnVmLCJQViIpKSB7Ci0JCSAgICBja3N0cm5jcHkobGJ1ZiwiUFY6IFBhcmFtZXRlciB2 YWx1ZSBlcnJvciIsTEJVRkwpOwotCQkgICAgZGlhbHN0YSA9IERJQV9FUlI7Ci0JCX0gZWxzZSBp ZiAoZGlkd2VnZXQobGJ1ZiwiUFMiKSkgewotCQkgICAgY2tzdHJuY3B5KGxidWYsIlBTOiBQYXJh bWV0ZXIgc3ludGF4IGVycm9yIixMQlVGTCk7Ci0JCSAgICBkaWFsc3RhID0gRElBX0VSUjsKLQkJ fSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJNUyIpKSB7Ci0JCSAgICBja3N0cm5jcHkobGJ1Ziwi TVM6IE1lc3NhZ2Ugc3ludGF4IGVycm9yIixMQlVGTCk7Ci0JCSAgICBkaWFsc3RhID0gRElBX0VS UjsKLQkJfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJDVSIpKSB7Ci0JCSAgICBja3N0cm5jcHko bGJ1ZiwiQ1U6IENvbW1hbmQgdW5rbm93biIsTEJVRkwpOwotCQkgICAgZGlhbHN0YSA9IERJQV9F UlI7Ci0JCX0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiRkMiKSkgewotCQkgICAgY2tzdHJuY3B5 KGxidWYsIkZDOiBGb3JiaWRkZW4gY2FsbCIsTEJVRkwpOwotCQkgICAgZGlhbHN0YSA9IERJQV9O T0FDOwotCQl9Ci0JCW1kbXN0YXQgPSBEX0ZBSUxFRDsKLQkgICAgfSBlbHNlIGlmIChkaWR3ZWdl dChsYnVmLCJJTkMiKSkgeyAvKiBJbmNvbWluZyBDYWxsICovCi0JCWNrc3RybmNweShsYnVmLCJJ TkM6IEluY29taW5nIGNhbGwiLExCVUZMKTsKLQkJZGlhbHN0YSA9IERJQV9SSU5HOwotCQltZG1z dGF0ID0gRF9GQUlMRUQ7Ci0JICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiRExDIikpIHsg LyogRGVsYXllZCBDYWxsICovCi0JCWNrc3RybmNweShsYnVmLCJETEM6IERlbGF5ZWQgY2FsbCIs TEJVRkwpOwotCQlkaWFsc3RhID0gRElBX05PQU47Ci0JCW1kbXN0YXQgPSBEX0ZBSUxFRDsKLQkg ICAgfSBlbHNlCQkJLyogUmVzcG9uc2Ugd2FzIHByb2JhYmx5IGFuIGVjaG8uICovCi0jaWZuZGVm IE1JTklESUFMCi0JICAgICAgaWYgKG15bWRtdHlwID09IG5fQ0NJVFQpCi0jZW5kaWYgLyogTUlO SURJQUwgKi8KLQkJY29udGludWU7Ci0jaWZuZGVmIE1JTklESUFMCi0JICAgICAgZWxzZQkJCS8q IERpZ2l0ZWw6IElmIG5vIGVycm9yLCBjb25uZWN0LiAqLwotCQltZG1zdGF0ID0gQ09OTkVDVEVE OwotI2VuZGlmIC8qIE1JTklESUFMICovCi0JICAgIGJyZWFrOwotCi0JfSBlbHNlIGlmIChuKSB7 CQkJLyogTm9uLUhheWVzLWNvbXBhdGlibGVzLi4uICovCi0JICAgIHN3aXRjaCAobXltZG10eXAp IHsKLSNpZm5kZWYgTUlOSURJQUwKLQkgICAgICBjYXNlIG5fQVRUTU9ERU06Ci0JCS8qIENhcmVm dWwgLSAiQ29ubmVjdGVkIiAvICJOb3QgQ29ubmVjdGVkIiAqLwotCQlpZiAoZGlkd2VnZXQobGJ1 ZiwiQnVzeSIpKSB7Ci0JCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JCSAgICBkaWFsc3RhID0g RElBX0JVU1k7Ci0JCX0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiTm90IGNvbm5lY3RlZCIpIHx8 Ci0JCQkgICBkaWR3ZWdldChsYnVmLCJOb3QgQ29ubmVjdGVkIikpIHsKLQkJICAgIG1kbXN0YXQg PSBEX0ZBSUxFRDsKLQkJICAgIGRpYWxzdGEgPSBESUFfTk9DQTsKLQkJfSBlbHNlIGlmIChkaWR3 ZWdldChsYnVmLCJObyBkaWFsIHRvbmUiKSB8fAotCQkJICAgZGlkd2VnZXQobGJ1ZiwiTm8gRGlh bCBUb25lIikpIHsKLQkJICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKLQkJICAgIGRpYWxzdGEgPSBE SUFfTk9EVDsKLQkJfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJObyBhbnN3ZXIiKSB8fAotCQkJ ICAgZGlkd2VnZXQobGJ1ZiwiTm8gQW5zd2VyIikpIHsKLQkJICAgIG1kbXN0YXQgPSBEX0ZBSUxF RDsKLQkJICAgIGRpYWxzdGEgPSBESUFfTk9BTjsKLQkJfSBlbHNlIGlmIChkaWR3ZWdldChsYnVm LCJBbnN3ZXJlZCIpIHx8Ci0JCQkgICBkaWR3ZWdldChsYnVmLCJDb25uZWN0ZWQiKSkgewotCQkg ICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkJICAgIGRpYWxzdGEgPSBESUFfT0s7Ci0JCX0KLQkJ YnJlYWs7Ci0KLQkgICAgICBjYXNlIG5fQVRUSVNOOgotCQlpZiAoZGlkd2VnZXQobGJ1ZiwiQU5T V0VSRUQiKSkgewotCQkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkJICAgIGRpYWxzdGEgPSBE SUFfT0s7Ci0JCX0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiQlVTWSIpKSB7Ci0JCSAgICBtZG1z dGF0ID0gRF9GQUlMRUQ7Ci0JCSAgICBkaWFsc3RhID0gRElBX0JVU1k7Ci0JCX0gZWxzZSBpZiAo ZGlkd2VnZXQobGJ1ZiwiRElTQ09OTkVDVCIpKSB7Ci0JCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7 Ci0JCSAgICBkaWFsc3RhID0gRElBX0RJU0M7Ci0JCX0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1Ziwi Tk8gQU5TV0VSIikpIHsKLQkJICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKLQkJICAgIGRpYWxzdGEg PSBESUFfTk9BTjsKLQkJfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJXUk9ORyBBRERSRVNTIikp IHsKLQkJICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKLQkJICAgIGRpYWxzdGEgPSBESUFfTk9BQzsK LQkJfQotCQlicmVhazsKLQotCSAgICAgIGNhc2Ugbl9BVFREVERNOgotCQlpZiAoZGlkd2VnZXQo bGJ1ZiwiQU5TV0VSRUQiKSkgewotCQkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkJfSBlbHNl IGlmIChkaWR3ZWdldChsYnVmLCJCVVNZIikpIHsKLQkJICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsK LQkJICAgIGRpYWxzdGEgPSBESUFfQlVTWTsKLQkJfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJD SEVDSyBPUFRJT05TIikpIHsKLQkJICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKLQkJICAgIGRpYWxz dGEgPSBESUFfRVJSOwotCQl9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkRJU0NPTk5FQ1RFRCIp KSB7Ci0JCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JCSAgICBkaWFsc3RhID0gRElBX0RJU0M7 Ci0JCX0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiREVOSUVEIikpIHsKLQkJICAgIG1kbXN0YXQg PSBEX0ZBSUxFRDsKLQkJICAgIGRpYWxzdGEgPSBESUFfTk9BQzsKLQkJfQotI2lmZGVmIERFQlVH Ci0jaWZkZWYgQVRUNjMwMAotCQkvKiBIb3JyaWJsZSBoYWNrIGxvc3QgaW4gaGlzdG9yeS4gKi8K LQkJZWxzZSBpZiAoZGVibG9nICYmIGRpZHdlZ2V0KGxidWYsIn5+IikpCi0JCSAgbWRtc3RhdCA9 IENPTk5FQ1RFRDsKLSNlbmRpZiAvKiBBVFQ2MzAwICovCi0jZW5kaWYgLyogREVCVUcgKi8KLQkJ YnJlYWs7Ci0KLSNpZmRlZiBPTERNT0RFTVMKLQkgICAgICBjYXNlIG5fQ0VSTUVURUs6Ci0JCWlm IChkaWR3ZWdldChsYnVmLCJcMDE2QSIpKSB7Ci0JCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOwot CQkgICAgdHRzbG93KCJcMDE2VSAxXDAxNSIsMjAwKTsgLyogTWFrZSB0cmFuc3BhcmVudCovCi0J CX0KLQkJYnJlYWs7Ci0KLQkgICAgICBjYXNlIG5fREYwMzoKLQkJLyogQmVjYXVzZSByZXNwb25z ZSBsYWNrcyBDUiBvciBOTCAuIC4gLiAqLwotCQljID0gKGNoYXIpIChkZGluYygwKSAmIDAxNzcp OwotCQlkaWFsb2MoYyk7Ci0JCWRlYnVnKEYwMDAsImRpYWwgZGYwMyBnb3QiLCIiLGMpOwotCQlp ZiAoIGMgPT0gJ0EnICkgbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkJaWYgKCBjID09ICdCJyApIG1k bXN0YXQgPSBEX0ZBSUxFRDsKLQkJYnJlYWs7Ci0KLQkgICAgICBjYXNlIG5fREYxMDA6CSAgICAg LyogREYxMDAgaGFzIHNob3J0IHJlc3BvbnNlIGNvZGVzICovCi0JCWlmIChzdHJjbXAobGJ1Ziwi QSIpID09IDApIHsKLQkJICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7IC8qIEF0dGFjaGVkICovCi0J CSAgICBkaWFsc3RhID0gRElBX09LOwotCQl9IGVsc2UgaWYgKHN0cmNtcChsYnVmLCJOIikgPT0g MCkgewotCQkgICAgbWRtc3RhdCA9IERfRkFJTEVEOwotCQkgICAgZGlhbHN0YSA9IERJQV9OT0FO OyAvKiBObyBhbnN3ZXIgb3Igbm8gZGlhbHRvbmUgKi8KLQkJfSBlbHNlIGlmIChzdHJjbXAobGJ1 ZiwiRSIpID09IDAgfHwgLyogRXJyb3IgKi8KLQkJCSAgIHN0cmNtcChsYnVmLCJSIikgPT0gMCkg eyAvKiAiUmVhZHkiICg/KSAqLwotCQkgICAgbWRtc3RhdCA9IERfRkFJTEVEOwotCQkgICAgZGlh bHN0YSA9IERJQV9FUlI7CS8qIENvbW1hbmQgZXJyb3IgKi8KLQkJfQotCQkvKiBvdGhlcndpc2Ug ZmFsbCB0aHJ1Li4uICovCi0KLQkgICAgICBjYXNlIG5fREYyMDA6Ci0JCWlmIChkaWR3ZWdldChs YnVmLCJBdHRhY2hlZCIpKSB7Ci0JCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOwotCQkgICAgZGlh bHN0YSA9IERJQV9PSzsKLQkJICAgIC8qCi0JCSAgICAgKiBUaGUgREYxMDAgd2lsbCByZXNwb25k IHdpdGggIkF0dGFjaGVkIiBldmVuIGlmIERUUgotCQkgICAgICogYW5kL29yIGNhcnJpZXIgYXJl IG5vdCBwcmVzZW50LglBbm90aGVyIHJlYXNvbiB0bwotCQkgICAgICogKGFsc28pIHdhaXQgZm9y IGNhcnJpZXI/Ci0JCSAgICAgKi8KLQkJfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJCdXN5Iikp IHsKLQkJICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKLQkJICAgIGRpYWxzdGEgPSBESUFfQlVTWTsK LQkJfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJEaXNjb25uZWN0ZWQiKSkgewotCQkgICAgbWRt c3RhdCA9IERfRkFJTEVEOwotCQkgICAgZGlhbHN0YSA9IERJQV9ESVNDOwotCQl9IGVsc2UgaWYg KGRpZHdlZ2V0KGxidWYsIkVycm9yIikpIHsKLQkJICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKLQkJ ICAgIGRpYWxzdGEgPSBESUFfRVJSOwotCQl9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIk5vIGFu c3dlciIpKSB7Ci0JCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JCSAgICBkaWFsc3RhID0gRElB X05PQU47Ci0JCX0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiTm8gZGlhbCB0b25lIikpIHsKLQkJ ICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKLQkJICAgIGRpYWxzdGEgPSBESUFfTk9EVDsKLQkJfSBl bHNlIGlmIChkaWR3ZWdldChsYnVmLCJTcGVlZDopIikpIHsKLQkJICAgIG1kbXN0YXQgPSBEX0ZB SUxFRDsKLQkJICAgIGRpYWxzdGEgPSBESUFfRVJSOwotCQl9Ci0JCS8qCi0JCSAqIEl0IGFwcGVh cnMgdGhhdCB0aGUgIlNwZWVkOi4uLiIgcmVzcG9uc2UgY29tZXMgYWZ0ZXIgYW4KLQkJICogIkF0 dGFjaGVkIiByZXNwb25zZSwgc28gdGhpcyBpcyBuZXZlciBzZWVuLiAgSE9XRVZFUiwKLQkJICog aXQgd291bGQgYmUgdmVyeSBoYW5keSB0byBkZXRlY3QgdGhpcyBhbmQgdGVtcG9yYXJpbHkKLQkJ ICogcmVzZXQgdGhlIHNwZWVkLCBzaW5jZSBpdCdzIGEgbnVpc2FuY2Ugb3RoZXJ3aXNlLgotCQkg KiBJZiB3ZSB3YWl0IGZvciBzb21lIG1vcmUgaW5wdXQgZnJvbSB0aGUgbW9kZW0sIGhvdyBkbwot CQkgKiB3ZSBrbm93IGlmIGl0J3MgZnJvbSB0aGUgcmVtb3RlIGhvc3Qgb3IgdGhlIG1vZGVtPwot CQkgKiBDYXJyaWVyIHJlcG9ydGVkbHkgZG9lc24ndCBnZXQgc2V0IHVudGlsIGFmdGVyIHRoZQot CQkgKiAiU3BlZWQ6Li4uIiByZXNwb25zZSAoaWYgYW55KSBpcyBzZW50LiAgQW5vdGhlciByZWFz b24KLQkJICogdG8gKGFsc28pIHdhaXQgZm9yIGNhcnJpZXIuCi0JCSAqLwotCQlicmVhazsKLQot CSAgICAgIGNhc2Ugbl9HREM6Ci0JCWlmIChkaWR3ZWdldChsYnVmLCJPTiBMSU5FIikpCi0JCSAg bWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkJZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiTk8gQ09OTkVD VCIpKQotCQkgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKLQkJYnJlYWs7Ci0KLQkgICAgICBjYXNlIG5f UEVOUklMOgotCQlpZiAoZGlkd2VnZXQobGJ1ZiwiT0siKSkgewotCQkgICAgbWRtc3RhdCA9IENP Tk5FQ1RFRDsKLQkJfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJCVVNZIikpIHsKLQkJICAgIG1k bXN0YXQgPSBEX0ZBSUxFRDsKLQkJICAgIGRpYWxzdGEgPSBESUFfQlVTWTsKLQkJICAgIH0gZWxz ZSBpZiAoZGlkd2VnZXQobGJ1ZiwiTk8gUklORyIpKSB7Ci0JCQltZG1zdGF0ID0gRF9GQUlMRUQ7 Ci0JCQlkaWFsc3RhID0gRElBX05PQ0E7Ci0JCSAgICB9Ci0JCWJyZWFrOwotCi0JICAgICAgY2Fz ZSBuX1JBQ0FMOgotCQlpZiAoZGlkd2VnZXQobGJ1ZiwiT04gTElORSIpKQotCQkgIG1kbXN0YXQg PSBDT05ORUNURUQ7Ci0JCWVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkZBSUxFRCBDQUxMIikpCi0J CSAgbWRtc3RhdCA9IERfRkFJTEVEOwotCQlicmVhazsKLSNlbmRpZiAvKiBPTERNT0RFTVMgKi8K LQotCSAgICAgIGNhc2Ugbl9ST0xNOgotCQlpZiAoZGlkd2VnZXQobGJ1ZiwiQ0FMTElORyIpKQot CQkgIG1kbXN0YXQgPSAwOwotCQllbHNlIGlmIChkaWR3ZWdldChsYnVmLCJDT01QTEVURSIpKQot CQkgIG1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JCWVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkZBSUxF RCIpIHx8Ci0JCQkgZGlkd2VnZXQobGJ1ZiwiQUJBTkRPTkRFRCIpKSB7Ci0JCSAgICBtZG1zdGF0 ID0gRF9GQUlMRUQ7Ci0JCSAgICBkaWFsc3RhID0gRElBX05PQ0E7Ci0JCX0gZWxzZSBpZiAoZGlk d2VnZXQobGJ1ZiwiTk9UIEFWQUlMQUJMRSIpIHx8Ci0JCQkgICBkaWR3ZWdldChsYnVmLCJMQUNL UyBQRVJNSVNTSU9OIikgfHwKLQkJCSAgIGRpZHdlZ2V0KGxidWYsIk5PVCBBIERBVEFMSU5FIikg fHwKLQkJCSAgIGRpZHdlZ2V0KGxidWYsIklOVkFMSUQgREFUQSBMSU5FIE5VTUJFUiIpIHx8Ci0J CQkgICBkaWR3ZWdldChsYnVmLCJJTlZBTElEIEdST1VQIE5BTUUiKSkgewotCQkgICAgbWRtc3Rh dCA9IERfRkFJTEVEOwotCQkgICAgZGlhbHN0YSA9IERJQV9OT0FDOwotCQl9IGVsc2UgaWYgKGRp ZHdlZ2V0KGxidWYsIkJVU1kiKSkgewotCQkgICAgbWRtc3RhdCA9IERfRkFJTEVEOwotCQkgICAg ZGlhbHN0YSA9IERJQV9CVVNZOwotCQl9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkRPRVMgTk9U IEFOU1dFUiIpKSB7Ci0JCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JCSAgICBkaWFsc3RhID0g RElBX05PQU47Ci0JCX0KLQkJYnJlYWs7Ci0KLSNpZmRlZiBPTERNT0RFTVMKLQkgICAgICBjYXNl IG5fVkVOVEVMOgotCQlpZiAoZGlkd2VnZXQobGJ1ZiwiT05MSU5FISIpIHx8Ci0JCSAgICBkaWR3 ZWdldChsYnVmLCJPbmxpbmUhIikpIHsKLQkJICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JCX0g ZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiQlVTWSIpIHx8Ci0JCQkgICBkaWR3ZWdldChsYnVmLCJC dXN5IikpIHsKLQkJICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKLQkJICAgIGRpYWxzdGEgPSBESUFf QlVTWTsKLQkJfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJERUFEIFBIT05FIikpIHsKLQkJICAg IG1kbXN0YXQgPSBEX0ZBSUxFRDsKLQkJICAgIGRpYWxzdGEgPSBESUFfRElTQzsKLQkJfQotCQli cmVhazsKLQotCSAgICAgIGNhc2Ugbl9DT05DT1JEOgotCQlpZiAoZGlkd2VnZXQobGJ1ZiwiSU5J VElBVElORyIpKQotCQkgIG1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JCWVsc2UgaWYgKGRpZHdlZ2V0 KGxidWYsIkJVU1kiKSkgewotCQkgICAgbWRtc3RhdCA9IERfRkFJTEVEOwotCQkgICAgZGlhbHN0 YSA9IERJQV9CVVNZOwotCQl9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkNBTEwgRkFJTEVEIikp IHsKLQkJICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKLQkJICAgIGRpYWxzdGEgPSBESUFfTk9DQTsK LQkJfQotCQlicmVhazsKLSNlbmRpZiAvKiBPTERNT0RFTVMgKi8KLQotCSAgICAgIGNhc2Ugbl9N SUNST0NPTToKLQkJLyogIlJJTkdCQUNLIiBtZWFucyBwaG9uZSBsaW5lIHJpbmdpbmcsIGNvbnRp bnVlICovCi0JCWlmIChkaWR3ZWdldChsYnVmLCJOTyBDT05ORUNUIikpIHsKLQkJICAgIG1kbXN0 YXQgPSBEX0ZBSUxFRDsKLQkJICAgIGRpYWxzdGEgPSBESUFfTk9DQTsKLQkJfSBlbHNlIGlmIChk aWR3ZWdldChsYnVmLCJCVVNZIikpIHsKLQkJICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKLQkJICAg IGRpYWxzdGEgPSBESUFfQlVTWTsKLQkJfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJOTyBESUFM VE9ORSIpKSB7Ci0JCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JCSAgICBkaWFsc3RhID0gRElB X05PRFQ7Ci0JCX0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiQ09NTUFORCBFUlJPUiIpKSB7Ci0J CSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JCSAgICBkaWFsc3RhID0gRElBX0VSUjsKLQkJfSBl bHNlIGlmIChkaWR3ZWdldChsYnVmLCJJTiBVU0UiKSkgewotCQkgICAgbWRtc3RhdCA9IERfRkFJ TEVEOwotCQkgICAgZGlhbHN0YSA9IERJQV9OT0FDOwotCQl9IGVsc2UgaWYgKGRpZHdlZ2V0KGxi dWYsIkNPTk5FQ1QiKSkgewotCQkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkJICAgIC8qIHRy YWlsaW5nIHNwZWVkIGlnbm9yZWQgKi8KLQkJfQotCQlicmVhazsKLQotI2VuZGlmIC8qIE1JTklE SUFMICovCi0JICAgICAgZGVmYXVsdDoKLQkJcHJpbnRmKAotCQkgICAgIlBST0dSQU0gRVJST1Ig LSBObyByZXNwb25zZSBoYW5kbGVyIGZvciBtb2RlbSB0eXBlICVkXG4iLAotCQkgICAgICAgbXlt ZG10eXApOwotCQltZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JCWRpYWxzdGEgPSBESUFfRVJSOwotCSAg ICB9Ci0JfQotICAgIH0gLyogd2hpbGUgKG1kbXN0YXQgPT0gMCkgKi8KLQotICAgIGRlYnVnKEYx MDEsIl9kb2RpYWwgYWxhcm0gb2ZmIiwiIix4KTsKLSAgICBhbGFybSgwKTsKLSAgICBpZiAobWRt c3RhdCA9PSBEX0ZBSUxFRCkgewkJLyogRmFpbHVyZSBkZXRlY3RlZCBieSBtb2RlbSAgKi8KLSAg ICAgICAgZGlhbGZhaWwoRl9NT0RFTSk7Ci0jaWZkZWYgTlRTSUcKLQlja1RocmVhZEVuZCh0aHJl YWRpbmZvKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotICAgICAgICBTSUdSRVRVUk47Ci0gICAgfSBl bHNlIGlmIChtZG1zdGF0ID09IERfUEFSVElBTCApCXsgLyogUGFydGlhbCBkaWFsIGNvbW1hbmQg T0sgKi8KLQltc2xlZXAoNTAwKTsKLQlkZWJ1ZyhGMTAwLCJkaWFsIHBhcnRpYWwiLCIiLDApOwot ICAgIH0gZWxzZSB7CQkJCS8qIENhbGwgd2FzIGNvbXBsZXRlZCAqLwotCWludCB4OwotCW1zbGVl cCg3MDApOwkJCS8qIEluIGNhc2UgbW9kZW0gc2lnbmFscyBibGluayAgKi8KLQlkZWJ1ZyhGMTAw LCJkaWFsIHN1Y2NlZWRlZCIsIiIsMCk7Ci0JaWYgKAotI2lmbmRlZiBNSU5JRElBTAotCSAgICBt eW1kbXR5cCAhPSBuX1JPTE0JCS8qIFJvbG0gaGFzIHdlaXJkIG1vZGVtIHNpZ25hbGluZyAqLwot I2Vsc2UKLQkgICAgMQotI2VuZGlmIC8qIE1JTklESUFMICovCi0JICAgICkgewotCSAgICBhbGFy bSgzKTsJCQkvKiBJbiBjYXNlIHR0cGt0KCkgZ2V0cyBzdHVjay4uLiAqLwotCSAgICB0dHBrdChz cGVlZCxGTE9fRElBWCxwYXJpdHkpOyAvKiBDYW5jZWwgZGlhbGluZyBzdGF0ZSBpb2N0bCAqLwot ICAgICAgICAgICAgYWxhcm0oMCk7Ci0JfQotLyoKLSAgSW4gY2FzZSBDRCB3ZW50IG9mZiBpbiB0 aGUgaW50ZXJ2YWwgYmV0d2VlbiBjYWxsIGNvbXBsZXRpb24gYW5kIHJldHVybgotICBmcm9tIHR0 cGt0KCkuLi4KLSovCi0JaWYgKGNhcnJpZXIgIT0gQ0FSX09GRikgewotICAgICAgICAgICAgaWYg KCh4ID0gdHRnbWRtKCkpID49IDApIHsKLSNpZmRlZiBUTl9DT01QT1JUCi0gICAgICAgICAgICAg ICAgaWYgKGlzdG5jb21wb3J0KCkgJiYgISh4ICYgQk1fRENEKSkgewotICAgICAgICAgICAgICAg ICAgICBpbnQgaTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDU7IGkrKykg ewotICAgICAgICAgICAgICAgICAgICAgICAgbXNsZWVwKDUwMCk7Ci0gICAgICAgICAgICAgICAg ICAgICAgICB0bmNfd2FpdCgoQ0hBUiAqKSJfZG9kaWFsIHdhaXRpbmcgZm9yIERDRCIsMSk7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHggPSB0dGdtZG0oKSkgPj0gMCkgewotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlmICgoeCAmIEJNX0RDRCkpCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIFROX0NPTVBPUlQg Ki8KLSAgICAgICAgICAgICAgICBpZiAoISh4ICYgQk1fRENEKSkKLQkJICBwcmludGYoIldBUk5J Tkc6IENhcnJpZXIgc2VlbXMgdG8gaGF2ZSBkcm9wcGVkLi4uXG4iKTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgfQotICAgIH0KLSAgICBkcmVzZXQoKTsJCQkJLyogUmVzZXQgYWxhcm1zIGFuZCBz aWduYWxzLiAqLwotICAgIGlmICghcXVpZXQgJiYgIWJhY2tncmQpIHsKLQlpZiAoZGlhbGRweSAm JiAocCA9IGNrX3RpbWUoKSkpIHsgLyogSWYgRElBTCBESVNQTEFZIE9OLCAqLwotCSAgICBwcmlu dGYoIiAlc2FsbCBjb21wbGV0ZTogJXMuXG4iLCAvKiBpbmNsdWRlIHRpbWVzdGFtcC4gICovCi0J CSAgIChtZG1zdGF0ID09IERfUEFSVElBTCkgPwotCQkgICAiUGFydGlhbCBjIiA6Ci0JCSAgICJD IiwKLQkJICAgcCApOwotCX0gZWxzZSBpZiAobW9kZW1tc2dbMF0pIHsKLQkgICAgcHJpbnRmICgi ICVzYWxsIGNvbXBsZXRlOiBcIiVzXCIuXG4iLAotCQkgICAgKG1kbXN0YXQgPT0gRF9QQVJUSUFM KSA/ICJQYXJ0aWFsIGMiIDogIkMiLAotCQkgICAgKGNoYXIgKiltb2RlbW1zZwotCQkgICAgKTsK LQl9IGVsc2UgewotCSAgICBwcmludGYgKCIgJXNhbGwgY29tcGxldGUuXG4iLAotCQkgICAgKG1k bXN0YXQgPT0gRF9QQVJUSUFMKSA/Ci0JCSAgICAiUGFydGlhbCBjIiA6Ci0JCSAgICAiQyIKLQkJ ICAgICk7Ci0JfQotICAgIH0KLSNpZmRlZiBDS0xPR0RJQUwKLSAgICBkb2xvZ2RpYWwodGVsbmJy KTsKLSNlbmRpZiAvKiBDS0xPR0RJQUwgKi8KLQotI2lmZGVmIERZTkFNSUMKLSAgICBpZiAocmJ1 ZikgZnJlZShyYnVmKTsgcmJ1ZiA9IE5VTEw7Ci0gICAgaWYgKGZidWYpIGZyZWUoZmJ1Zik7IGZi dWYgPSBOVUxMOwotI2VuZGlmIC8qIERZTkFNSUMgKi8KLSAgICBkaWFsc3RhID0gKG1kbXN0YXQg PT0gRF9QQVJUSUFMKSA/IERJQV9QQVJUIDogRElBX09LOwotI2lmZGVmIE5UU0lHCi0gICAgY2tU aHJlYWRFbmQodGhyZWFkaW5mbyk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSAgICBTSUdSRVRVUk47 Ci19Ci0KLXN0YXRpYyBTSUdUWVAKLSNpZmRlZiBDS19BTlNJQwotZmFpbGRpYWwodm9pZCAqIHRo cmVhZGluZm8pCi0jZWxzZSAvKiBOb3QgQ0tfQU5TSUMgKi8KLWZhaWxkaWFsKHRocmVhZGluZm8p IFZPSUQgKiB0aHJlYWRpbmZvOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBmYWlsZGlhbCAq LyB7Ci0gICAgZGVidWcoRjEwMCwibG9uZ2ptcCByZXR1cm5zIHRvIGRpYWwgcm91dGluZSIsIiIs MCk7Ci0gICAgZGlhbGZhaWwoZmFpbF9jb2RlKTsKLSAgICBTSUdSRVRVUk47Ci19Ci0KLS8qCi0g IG5iciA9IG51bWJlciB0byBkaWFsIChzdHJpbmcpCi0gIHgxICA9IFJldHJ5IGNvdW50ZXIKLSAg eDIgID0gTnVtYmVyIGNvdW50ZXIKLSAgZmMgID0gRnVuY3Rpb24gY29kZToKLSAgICAgICAgMCA9 PSBESUFMCi0gICAgICAgIDEgPT0gQU5TV0VSCi0gICAgICAgIDIgPT0gSU5JVC9DT05GSUcKLSAg ICAgICAgMyA9PSBQQVJUSUFMIERJQUwKLSovCi0KLWludAotI2lmZGVmIE9MRF9ESUFMCi1ja2Rp YWwobmJyKSBjaGFyICpuYnI7Ci0jZWxzZQotY2tkaWFsKG5iciwgeDEsIHgyLCBmYywgcmVkaWFs KSBjaGFyICpuYnI7IGludCB4MSwgeDIsIGZjLCByZWRpYWw7Ci0jZW5kaWYgLyogT0xEX0RJQUwg Ki8KLS8qIGNrZGlhbCAqLyB7Ci0jZGVmaW5lIEVSTVNHTCA1MAotICAgIGNoYXIgZXJybXNnW0VS TVNHTF0sICplcnA7CQkvKiBGb3IgZXJyb3IgbWVzc2FnZXMgKi8KLSAgICBpbnQgbiA9IEZfVElN RTsKLSAgICBjaGFyICpzOwotICAgIGxvbmcgc3BkbWF4OwotI2lmZGVmIE9TMgotICAgIGV4dGVy biBpbnQgdGVybV9pbzsKLSAgICBpbnQgdGVybV9pb19zYXYgPSB0ZXJtX2lvOwotI2VuZGlmIC8q IE9TMiAqLwotCi0gICAgY2hhciAqbW1zZyA9ICJTb3JyeSwgRElBTCBtZW1vcnkgYnVmZmVyIGNh bid0IGJlIGFsbG9jYXRlZFxuIjsKLSAgICAvKgotICAgICAgQSBESUFMIGNvbW1hbmQgaW1wbGll cyBhIFNFVCBNT0RFTSBUWVBFIGNvbW1hbmQgYW5kIHRoZXJlZm9yZSBlbmFibGVzCi0gICAgICBo YW5naW5nIHVwIGJ5IG1vZGVtIGNvbW1hbmRzIHJhdGhlciB0aGFuIGRyb3BwaW5nIERUUi4KLSAg ICAqLwotICAgIG1kbXNldCA9IDE7CQkJCS8qIFNlZSBtZG1odXAoKSAqLwotCi0gICAgcGFydGlh bCA9IDA7Ci0gICAgaWYgKGZjID09IDMpIHsJCQkvKiBQYXJ0aWFsIGRpYWwgcmVxdWVzdGVkICov Ci0JcGFydGlhbCA9IDE7CQkJLyogU2V0IGZsYWcgKi8KLQlmYyA9IDA7CQkJCS8qIFRyZWF0IGxp a2UgcmVndWxhciBkaWFsaW5nICovCi0gICAgfQotICAgIGZ1bmNfY29kZSA9IGZjOwkJCS8qIE1h a2UgZ2xvYmFsIHRvIHRoaXMgbW9kdWxlICovCi0gICAgdGVsbmJyID0gbmJyOwotICAgIHhyZWRp YWwgPSByZWRpYWw7Ci0gICAgZGVidWcoRjExMSwiY2tkaWFsIGVudHJ5IHBhcnRpYWwiLGNraXRv YShmYykscGFydGlhbCk7Ci0gICAgZGVidWcoRjExMSwiY2tkaWFsIGVudHJ5IG51bWJlciIsbmJy LHJlZGlhbCk7Ci0KLSAgICBpZiAoZmMgPT0gMSkgewkJCS8qIEFOU1dFUiBjb21tYW5kPyAqLwot CS8qIFJlc2V0IGNhbGxlciBJRCBzdHJpbmdzICovCi0JaWYgKGNhbGxpZF9kYXRlKSBtYWtlc3Ry KCZjYWxsaWRfZGF0ZSxOVUxMKTsKLQlpZiAoY2FsbGlkX3RpbWUpIG1ha2VzdHIoJmNhbGxpZF90 aW1lLE5VTEwpOwotCWlmIChjYWxsaWRfbmFtZSkgbWFrZXN0cigmY2FsbGlkX25hbWUsTlVMTCk7 Ci0JaWYgKGNhbGxpZF9ubWJyKSBtYWtlc3RyKCZjYWxsaWRfbm1icixOVUxMKTsKLQlpZiAoY2Fs bGlkX21lc2cpIG1ha2VzdHIoJmNhbGxpZF9tZXNnLE5VTEwpOwotICAgIH0KLQotI2lmZGVmIENL X1RBUElfWAotICAgIGlmICh0dHRhcGkgJiYgdGFwaXBhc3MpIHsKLQlpZiAobW9kZW1wW25fVEFQ SV0gPSBja3RhcGlHZXRNb2RlbUluZigpKSB7Ci0JICAgIG15bWRtdHlwID0gbl9UQVBJOwotCX0g ZWxzZSB7Ci0JICAgIG15bWRtdHlwID0gbWRtdHlwOwotCSAgICBtb2RlbXBbbl9UQVBJXSA9ICZH RU5FUklDOwotCX0KLSAgICB9IGVsc2UKLSNlbmRpZiAvKiBDS19UQVBJICovCi0gICAgbXltZG10 eXAgPSBtZG10eXA7Ci0gICAgaWYgKG15bWRtdHlwIDwgMCkgewkJCS8qIFdob2EsIG5ldHdvcmsg ZGlhbGluZy4uLiAqLwotCWlmIChtZG1zYXYgPiAtMSkKLQkgIG15bWRtdHlwID0gbWRtc2F2Owot ICAgIH0KLSAgICBpZiAobXltZG10eXAgPCAwKSB7Ci0JcHJpbnRmKCJJbnZhbGlkIG1vZGVtIHR5 cGUgJWQgLSBpbnRlcm5hbCBlcnJvci5cbiIsbXltZG10eXApOwotCWRpYWxzdGEgPSBESUFfTk9N TzsKLQlyZXR1cm4oMCk7Ci0gICAgfQotICAgIGRpYWxfd2hhdCA9IERXX05PVEhJTkc7CQkvKiBE b2luZyBub3RoaW5nIGF0IGZpcnN0LiAqLwotICAgIG5vbnZlcmJhbCA9IDA7Ci0KLS8qIFRoZXNl IGFyZSBPTkxZIGZvciB0aGUgcHVycG9zZSBvZiBpbnRlcnByZXRpbmcgbnVtZXJpYyByZXN1bHQg Y29kZXMuICovCi0KLSAgICBpc19tb3Rvcm9sYSA9Ci0jaWZkZWYgTUlOSURJQUwKLSAgICAgIDAK LSNlbHNlCi0gICAgICBteW1kbXR5cCA9PSBuX1NVUFJBIHx8IG15bWRtdHlwID09IG5fU1VQUkFT T047Ci0jZW5kaWYgLyogTUlOSURJQUwgKi8KLQk7Ci0KLSAgICBpc19tb3Rvcm9sYSA9Ci0jaWZk ZWYgTUlOSURJQUwKLSAgICAgIDAKLSNlbHNlCi0gICAgICBteW1kbXR5cCA9PSBuX01PVE9ST0xB IHx8IG15bWRtdHlwID09IG5fTU9OVEFOQTsKLSNlbmRpZiAvKiBNSU5JRElBTCAqLwotCTsKLQot ICAgIGlzX3JvY2t3ZWxsID0KLSNpZmRlZiBNSU5JRElBTAotICAgICAgMAotI2Vsc2UKLSAgICAg IG15bWRtdHlwID09IG5fUldWMzIgfHwgbXltZG10eXAgPT0gbl9SV1YzMkIgfHwKLQlteW1kbXR5 cCA9PSBuX1JXVjM0IHx8IG15bWRtdHlwID09IG5fUldWOTAgfHwKLQkgIG15bWRtdHlwID09IG5f Qk9DQSB8fCBteW1kbXR5cCA9PSBuX1RFTEVQQVRIIHx8Ci0JICAgIG15bWRtdHlwID09IG5fQ0FS RElOQUwgfHwgbXltZG10eXAgPT0gbl9CRVNUREFUQSB8fAotCSAgICAgIG15bWRtdHlwID09IG5f Q09ORVhBTlQgfHwgbXltZG10eXAgPT0gbl9QQ1RFTAotI2VuZGlmIC8qIE1JTklESUFMICovCi0J OwotCi0gICAgaXNfaGF5ZXNoaXNwZCA9Ci0jaWZkZWYgTUlOSURJQUwKLSAgICAgIDAKLSNlbHNl Ci0gICAgICBteW1kbXR5cCA9PSBuX0hfVUxUUkEgfHwgbXltZG10eXAgPT0gbl9IX0FDQ1VSQSB8 fCBuX1BQSQotI2VuZGlmIC8qIE1JTklESUFMICovCi0JOwotCi0gICAgaXNfc3VwcmEgPQotI2lm ZGVmIE1JTklESUFMCi0gICAgICAwCi0jZWxzZQotICAgICAgbXltZG10eXAgPT0gbl9TVVBSQSB8 fCBteW1kbXR5cCA9PSBuX1NVUFJBWCB8fCBuX1NVUFJBU09OCi0jZW5kaWYgLyogTUlOSURJQUwg Ki8KLQk7Ci0KLSAgICBtcCA9IG1vZGVtcFtteW1kbXR5cF07CQkvKiBTZXQgcG9pbnRlciB0byBt b2RlbSBpbmZvICovCi0gICAgaWYgKCFtcCkgewotCXByaW50ZigiU29ycnksIGhhbmRsZXIgZm9y IHRoaXMgbW9kZW0gdHlwZSBub3QgeWV0IGZpbGxlZCBpbi5cbiIpOwotCWRpYWxzdGEgPSBESUFf Tk9NTzsKLQlyZXR1cm4gMDsKLSAgICB9Ci0gICAgZGVidWcoRjExMCwiZGlhbCBudW1iZXIiLHRl bG5iciwwKTsKLSNpZmRlZiBDT01NRU5UCi0gICAgZGVidWcoRjExMCwiZGlhbCBwcmVmaXgiLChk aWFsbnByID8gZGlhbG5wciA6ICIiKSwgMCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0jaWZk ZWYgRFlOQU1JQwotICAgICpsYnVmID0gTlVMOwotICAgIGRlYnVnKEYxMDEsIkRJQUwgbGJ1ZiBt YWxsb2Mgb2siLCIiLExCVUZMKzEpOwotCi0gICAgaWYgKCFyYnVmKSB7ICAgIC8qIFRoaXMgb25l IG1pZ2h0IGFscmVhZHkgaGF2ZSBiZWVuIGFsbG9jYXRlZCBieSBnZXRvaygpICovCi0JaWYgKCEo cmJ1ZiA9IG1hbGxvYyhSQlVGTCsxKSkpIHsgICAgLyogQWxsb2NhdGUgaW5wdXQgbGluZSBidWZm ZXIgKi8KLQkgICAgcHJpbnRmKCIlcyIsIG1tc2cpOwotCSAgICBkaWFsc3RhID0gRElBX0lFOwot CSAgICByZXR1cm4gMDsKLQl9IGVsc2UKLQkgIGRlYnVnKEYxMDEsIkRJQUwgcmJ1ZiBtYWxsb2Mg b2siLCIiLFJCVUZMKzEpOwotICAgIH0KLSAgICBpZiAoIShmYnVmID0gbWFsbG9jKEZVTExOVU1M KzEpKSkgeyAgICAvKiBBbGxvY2F0ZSBpbnB1dCBsaW5lIGJ1ZmZlciAqLwotCXByaW50ZigiJXMi LCBtbXNnKTsKLQlkaWFsc3RhID0gRElBX0lFOwotCWlmIChyYnVmKSBmcmVlKHJidWYpOyByYnVm ID0gTlVMTDsKLQlyZXR1cm4gMDsKLSAgICB9Ci0gICAgZGVidWcoRjEwMSwiRElBTCBmYnVmIG1h bGxvYyBvayIsIiIsRlVMTE5VTUwrMSk7Ci0jZW5kaWYgLyogRFlOQU1JQyAqLwotCi0gICAgLyog Tk9URTogbWRtdHlwLCBub3QgbXltZG10eXAgKi8KLQotICAgIGlmICh0dG9wZW4odHRuYW1lLCZs b2NhbCxtZG10eXAsMCkgPCAwKSB7IC8qIE9wZW4sIG5vIGNhcnJpZXIgd2FpdCAqLwotCWVycCA9 IGVycm1zZzsKLQlpZiAoKGludClzdHJsZW4odHRuYW1lKSA8IChFUk1TR0wgLSAxOCkpIC8qIHNh ZmUsIGNoZWNrZWQgKi8KLQkgIHNwcmludGYoZXJwLCJTb3JyeSwgY2FuJ3Qgb3BlbiAlcyIsdHRu YW1lKTsKLQllbHNlCi0JICBzcHJpbnRmKGVycCwiU29ycnksIGNhbid0IG9wZW4gZGV2aWNlIik7 Ci0JcGVycm9yKGVycm1zZyk7Ci0JZGlhbHN0YSA9IERJQV9PUEVOOwotI2lmZGVmIERZTkFNSUMK LQlpZiAocmJ1ZikgZnJlZShyYnVmKTsgcmJ1ZiA9IE5VTEw7Ci0JaWYgKGZidWYpIGZyZWUoZmJ1 Zik7IGZidWYgPSBOVUxMOwotI2VuZGlmIC8qIERZTkFNSUMgKi8KLQlyZXR1cm4gMDsKLSAgICB9 Ci0KLSNpZmRlZiBDS19UQVBJCi0gICAgaWYgKCF0dHRhcGkpIHsKLSNlbmRpZiAvKiBDS19UQVBJ ICovCi0KLS8qIENvbmRpdGlvbiBjb25zb2xlIHRlcm1pbmFsIGFuZCBjb21tdW5pY2F0aW9uIGxp bmUgKi8KLQotICAgIC8qIFBsYWNlIGxpbmUgaW50byAiY2xvY2FsIiBkaWFsaW5nIHN0YXRlLCAq LwotICAgIC8qIGltcG9ydGFudCBtYWlubHkgZm9yIFN5c3RlbSBWIFVOSVguICAgICAqLwotCi0g ICAgaWYgKHR0cGt0KHNwZWVkLEZMT19ESUFMLHBhcml0eSkgPCAwKSB7Ci0JdHRjbG9zKDApOwkJ CS8qIElmIHR0cGt0IGZhaWxzIGRvIGFsbCB0aGlzLi4uICovCi0JaWYgKHR0b3Blbih0dG5hbWUs JmxvY2FsLG15bWRtdHlwLDApIDwgMCkgewotCSAgICBlcnAgPSBlcnJtc2c7Ci0JICAgIGlmICgo aW50KXN0cmxlbih0dG5hbWUpIDwgKEVSTVNHTCAtIDE4KSkgLyogc2FmZSwgY2hlY2tlZCAqLwot CSAgICAgIHNwcmludGYoZXJwLCJTb3JyeSwgY2FuJ3QgcmVvcGVuICVzIix0dG5hbWUpOwotCSAg ICBlbHNlCi0JICAgICAgc3ByaW50ZihlcnAsIlNvcnJ5LCBjYW4ndCByZW9wZW4gZGV2aWNlIik7 Ci0JICAgIHBlcnJvcihlcnJtc2cpOwotCSAgICBkaWFsc3RhID0gRElBX09QRU47Ci0jaWZkZWYg RFlOQU1JQwotCSAgICBpZiAocmJ1ZikgZnJlZShyYnVmKTsgcmJ1ZiA9IE5VTEw7Ci0JICAgIGlm IChmYnVmKSBmcmVlKGZidWYpOyBmYnVmID0gTlVMTDsKLSNlbmRpZiAvKiBEWU5BTUlDICovCi0J ICAgIHJldHVybiAwOwotCX0JCQkJLyogQW5kIHRyeSBhZ2Fpbi4gKi8KLQlpZiAoKHR0cGt0KHNw ZWVkLEZMT19ESUFMLHBhcml0eSkgPCAwKQotI2lmZGVmIFVOSVgKLQkmJiAoc3RyY21wKHR0bmFt ZSwiL2Rldi9udWxsIikpCi0jZWxzZQotI2lmZGVmIE9TSwotCSYmIChzdHJjbXAodHRuYW1lLCIv bmlsIikpCi0jZW5kaWYgLyogT1NLICovCi0jZW5kaWYgLyogVU5JWCAqLwotI2lmZGVmIENLX1RB UEkKLQkgICAgICYmICF0dHRhcGkKLSNlbmRpZiAvKiBDS19UQVBJICovCi0JICAgICkgewotCSAg ICBwcmludGYoIlNvcnJ5LCBDYW4ndCBjb25kaXRpb24gY29tbXVuaWNhdGlvbiBsaW5lXG4iKTsK LQkgICAgcHJpbnRmKCJUcnkgJ3NldCBsaW5lICVzJyBhZ2FpblxuIix0dG5hbWUpOwotCSAgICBk aWFsc3RhID0gRElBX09QRU47Ci0jaWZkZWYgRFlOQU1JQwotCSAgICBpZiAocmJ1ZikgZnJlZShy YnVmKTsgcmJ1ZiA9IE5VTEw7Ci0JICAgIGlmIChmYnVmKSBmcmVlKGZidWYpOyBmYnVmID0gTlVM TDsKLSNlbmRpZiAvKiBEWU5BTUlDICovCi0JICAgIHJldHVybiAwOwotCX0KLSAgICB9Ci0jaWZk ZWYgQ0tfVEFQSQotICAgIH0KLSNlbmRpZiAvKiBDS19UQVBJICovCi0KLSAgICAvKiBNb2RlbSdz IGVzY2FwZSBzZXF1ZW5jZS4uLiAqLwotCi0gICAgaWYgKGRpYWxlc2MgPCAwIHx8IGRpYWxlc2Mg PiAxMjcpCi0gICAgICBjID0gTlVMOwotICAgIGVsc2UKLSAgICAgIGMgPSAoY2hhcikgKGRpYWxl c2MgPyBkaWFsZXNjIDogbXAtPmVzY19jaGFyKTsKLSAgICBtZG1jYXBhcyA9IGRpYWxjYXBhcyA/ IGRpYWxjYXBhcyA6IG1wLT5jYXBhczsKLQotICAgIHh4X29rID0gbXAtPm9rX2ZuOwkJCS8qIFBv aW50ZXIgdG8gcmVzcG9uc2UgcmVhZGVyICovCi0KLSAgICBpZiAobWRtY2FwYXMgJiBDS0RfQVQp IHsJCS8qIEhheWVzIGNvbXBhdGlibGUgKi8KLQllc2NidWZbMF0gPSBjOwotCWVzY2J1ZlsxXSA9 IGM7Ci0JZXNjYnVmWzJdID0gYzsKLQllc2NidWZbM10gPSBOVUw7Ci0JLyogSW4gY2FzZSB0aGlz IG1vZGVtIHR5cGUgaXMgdXNlci1kZWZpbmVkICovCi0JaWYgKCF4eF9vaykgeHhfb2sgPSBnZXRv azsKLSAgICB9IGVsc2UgewkJCQkvKiBPdGhlciAqLwotCWVzY2J1ZlswXSA9IGM7Ci0JZXNjYnVm WzFdID0gTlVMOwotCS8qIEluIGNhc2UgdXNlci1kZWZpbmVkICovCi0JaWYgKG1kbWNhcGFzICYg Q0tEX1YyNSkgaWYgKCF4eF9vaykgeHhfb2sgPSBnZXRvazsKLSAgICB9Ci0KLSAgICAvKiBQYXJ0 aWFsIGRpYWxpbmcgKi8KLQotICAgIGlmIChtZG1jYXBhcyAmIENLRF9BVAotI2lmbmRlZiBNSU5J RElBTAotCXx8IG15bWRtdHlwID09IG5fTUlDUk9DT00KLSNlbmRpZiAvKiBNSU5JRElBTCAqLwot CSkgewotCWludCB4OwotCXggPSAoaW50KSBzdHJsZW4odGVsbmJyKTsKLQlpZiAoeCA+IDApIHsK LQkgICAgaWYgKHRlbG5iclt4LTFdID09ICc7JykgewotCQlwYXJ0aWFsID0gMTsKLQkJZGVidWco RjExMCwiY2tkaWFsIHNldHMgcGFydGlhbD0xOiIsdGVsbmJyLDApOwotCSAgICB9IGVsc2UgaWYg KHBhcnRpYWwpIHsKLQkJY2ttYWttc2coZmJ1ZixGVUxMTlVNTCx0ZWxuYnIsIjsiLE5VTEwsTlVM TCk7IC8qIGFkZCBvbmUgKi8KLQkJdGVsbmJyID0gZmJ1ZjsKLQkgICAgfQotCX0KLSAgICB9Ci0g ICAgbXNsZWVwKDUwMCk7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJja2RpYWwgZGlhbHRtbyIsIiIsZGlh bHRtbyk7IC8qIFRpbWVvdXQgKi8KLQotICAgIGlmIChmYyA9PSAxKSB7CQkJLyogQU5TV0VSICov Ci0Jd2FpdGN0ID0gKGRpYWxhdG1vID4gLTEpID8gZGlhbGF0bW8gOiAwOwotICAgIH0gZWxzZSB7 CQkJCS8qIERJQUwgKi8KLQlpZiAoZGlhbHRtbyA8IDEpIHsJCS8qIEF1dG9tYXRpYyBjb21wdXRh dGlvbi4gKi8KLSNpZmRlZiBDS19UQVBJCi0JICAgIGlmICh0dHRhcGkgJiYgIXRhcGlwYXNzKSB7 Ci0JCXdhaXRjdCA9IDEgKiAoaW50KXN0cmxlbih0ZWxuYnIpIDsgLyogV29yc3QgY2FzZSBkaWFs IHRpbWUgKi8KLQkJd2FpdGN0ICs9IDYwOwkJLyogZGlhbHRvbmUgKyBjb21wbGV0aW9uIHdhaXQg dGltZXMgKi8KLQkJZm9yIChzID0gdGVsbmJyOyAqczsgcysrKSB7IC8qIGFkZCBpbiBwYXVzZSBj aGFyYWN0ZXJzIHRpbWUgKi8KLQkJICAgIGlmICgqcyA9PSAnLCcpIHsKLQkJCXdhaXRjdCArPSAy OyAvKiB1bmxlc3MgaXQgd2FzIGNoYW5nZWQgaW4gdGhlIG1vZGVtICovCi0JCSAgICB9IGVsc2Ug aWYgKCpzID09ICdXJyB8fAotCQkJICAgICAgICpzID09ICd3JyB8fAotCQkJICAgICAgICpzID09 ICckJyB8fAotCQkJICAgICAgICpzID09ICdAJwotCQkJICAgICAgICkgewotCQkJd2FpdGN0ICs9 IDg7Ci0JCSAgICB9Ci0JCX0KLQkgICAgfSBlbHNlIHsKLSNlbmRpZiAvKiBDS19UQVBJICovCi0J CXdhaXRjdCA9IDEgKiAoaW50KXN0cmxlbih0ZWxuYnIpIDsKLQkJLyogZGlhbHRvbmUgKyBjb21w bGV0aW9uIHdhaXQgdGltZXMgKi8KLQkJd2FpdGN0ICs9IG1wLT5kaWFsX3RpbWU7Ci0JCWZvciAo cyA9IHRlbG5icjsgKnM7IHMrKykgewotCQkgICAgZm9yIChwID0gbXAtPnBhdXNlX2NoYXJzOyAq cDsgcCsrKQotCQkgICAgICBpZiAoKnMgPT0gKnApIHsKLQkJCSAgd2FpdGN0ICs9IG1wLT5wYXVz ZV90aW1lOwotCQkJICBicmVhazsKLQkJICAgICAgfQotCQl9Ci0jaWZkZWYgQ0tfVEFQSQotCSAg ICB9Ci0jZW5kaWYgLyogQ0tfVEFQSSAqLwotCX0gZWxzZSB7Ci0JICAgIHdhaXRjdCA9IGRpYWx0 bW87CQkvKiBVc2VyLXNwZWNpZmllZCB0aW1lb3V0ICovCi0JfQotCWRlYnVnKEYxMDEsImNrZGlh bCB3YWl0Y3QgQSIsIiIsd2FpdGN0KTsKLSAgICB9Ci0KLS8qCi0gIHdhaXRjdCBpcyBvdXIgYWxh cm0oKSB0aW1lci4KLSAgbWRtd2FpdCBpcyBob3cgbG9uZyB3ZSB0ZWxsIHRoZSBtb2RlbSB0byB3 YWl0IGZvciBjYXJyaWVyLgotICBXZSBzZXQgbWRtd2FpdCB0byBiZSA1IHNlY29uZHMgbGVzcyB0 aGFuIHdhaXRjdCwgdG8gaW5jcmVhc2UgdGhlCi0gIGNoYW5jZSB0aGF0IHdlIGdldCBhIHJlc3Bv bnNlIGZyb20gdGhlIG1vZGVtIGJlZm9yZSB0aW1pbmcgb3V0LgotKi8KLSAgICBpZiAod2FpdGN0 IDw9IDApIHsJCQkvKiAwIG9yIG5lZ2F0aXZlIG1lYW5zIHdhaXQgZm9yZXZlciAgKi8KLSNpZmRl ZiBDT01NRU5UCi0Jd2FpdGN0ID0gMjU0OwkJCS8qIFRoZXNlIHdlcmUgYmFja3dhcmRzIGluIDcu MC4xOTYgKi8KLQltZG13YWl0ID0gMDsKLSNlbHNlCi0Jd2FpdGN0ID0gMDsJCQkvKiBGaXhlZCBp biA3LjAuMTk4LiAqLwotCW1kbXdhaXQgPSAyNTQ7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAg IH0gZWxzZSB7Ci0JaWYgKGRpYWx0bW8gPCAxKSB7CQkvKiBBdXRvbWF0aWMgY29tcHV0YXRpb24u ICovCi0jaWZkZWYgWFdBSVRDVAotCSAgICAvKiBBZGR0bCB3YWl0IHNsb3AgY2FuIGJlIGRlZmlu ZWQgYXQgY29tcGlsZSB0aW1lICovCi0JICAgIHdhaXRjdCArPSBYV0FJVENUOwotI2VuZGlmIC8q IFhXQUlUQ1QgKi8KLQkgICAgaWYgKHdhaXRjdCA8IDYwICsgbWRtd2FpdGQpCi0JICAgICAgd2Fp dGN0ID0gNjAgKyBtZG13YWl0ZDsKLQl9Ci0JaWYgKG1kbWNhcGFzICYgQ0tEX0FUKSB7CS8qIEFU IGNvbW1hbmQtc2V0IG1vZGVtcyAqLwotCSAgICBtZG13YWl0ID0gd2FpdGN0OwkJLyogUzcgdGlt ZW91dCA9IHdoYXQgdXNlciBhc2tlZCBmb3IgKi8KLQkgICAgd2FpdGN0ICs9IG1kbXdhaXRkOwkJ LyogS2VybWl0IHRpbWVvdXQgYSBiaXQgbGF0ZXIgKi8KLQl9IGVsc2UgewkJCS8qIE5vbi1BVCAq LwotCSAgICBtZG13YWl0ID0gd2FpdGN0OwkJLyogbm8gZGlmZmVyZW5jZSAqLwotCX0KLSAgICB9 Ci0gICAgZGVidWcoRjEwMSwiY2tkaWFsIHdhaXRjdCBCIiwiIix3YWl0Y3QpOwotICAgIGlmIChm YyA9PSAxKSB7CQkJLyogQU5TV0VSICovCi0jaWZkZWYgQ09NTUVOVAotLyoKLSAgVGhpcyBpcyB3 cm9uZy4gIG1kbXdhaXQgaXMgdGhlIHZhbHVlIGdpdmVuIHRvIFM3IGluIEhheWVzbGlrZSBtb2Rl bXMuCi0gIFdoZW4gaW4gYXV0b2Fuc3dlciBtb2RlLCB0aGlzIGlzIHRoZSBhbW91bnQgb2YgdGlt ZSB0aGUgbW9kZW0gd2FpdHMgZm9yCi0gIGNhcnJpZXIgb25jZSByaW5naW5nIHN0YXJ0cy4gIFdo ZXJlYXMgd2FpdGN0IGlzIHRoZSB0aW1lb3V0IGdpdmVuIHRvIHRoZQotICBBTlNXRVIgY29tbWFu ZCwgd2hpY2ggaXMgYW4gZW50aXJlbHkgZGlmZmVyZW50IHRoaW5nLiAgU2luY2UgdGhlIGRlZmF1 bHQKLSAgQU5TV0VSIHRpbWVvdXQgaXMgMCAobWVhbmluZyAid2FpdCBmb3JldmVyIiksIHRoZSBm b2xsb3dpbmcgc3RhdGVtZW50IHNldHMKLSAgUzcgdG8gMCwgd2hpY2gsIG9uIHNvbWUgbW9kZW1z IChsaWtlIHRoZSBVU1IgU3BvcnRzdGVyKSBtYWtlcyBpdCBoYW5nIHVwCi0gIGFuZCByZXBvcnQg Tk8gQ0FSUklFUiB0aGUgaW5zdGFudCB0aGUgcGhvbmUgcmluZ3MuCi0qLwotCW1kbXdhaXQgPSB3 YWl0Y3Q7Ci0jZWxzZQotCWlmIChtZG13YWl0IDw9IDApCi0JICBtZG13YWl0ID0gNjA7CQkJLyog QWx3YXlzIHdhaXQgNjAgc2Vjb25kcy4gKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICB9 Ci0gICAgaWYgKCFxdWlldCAmJiAhYmFja2dyZCkgewkJLyogUHJpbnQgaW5mb3JtYXRpb24gbWVz c2FnZXMuICovCi0jaWZkZWYgVk1TCi0JcHJpbnRmKCIgXG4iKTsKLQlmZmx1c2goc3Rkb3V0KTsK LSNlbmRpZiAvKiBWTVMgKi8KLQlpZiAoZmMgPT0gMSkKLQkgIHByaW50ZigiIFdhaXRpbmcgZm9y IHBob25lIGNhbGwuLi5cbiIpOwotCWVsc2UKLQkgIHByaW50ZigiICVzcnlpbmc6ICVzLi4uXG4i LCB4MSA+IDAgPyAiUmV0IiA6ICJUIiwgdGVsbmJyKTsKLQlpZiAoeDEgPT0gMCAmJiB4MiA9PSAw ICYmIGRpYWxzdGEgIT0gRElBX1BBUlQpIHsKLQkgICAgaWYgKG5ldHdvcmspIHsKLQkJcHJpbnRm KCIgVmlhIG1vZGVtIHNlcnZlcjogJXMsIG1vZGVtOiAlc1xuIiwKLQkJICAgICAgIHR0bmFtZSwg Z21kbXR5cCgpICk7Ci0JICAgIH0gZWxzZSB7Ci0jaWZkZWYgQ0tfVEFQSQotCQlpZiAodHR0YXBp ICYmICF0YXBpcGFzcykKLQkJICBwcmludGYoIiBEZXZpY2U6ICVzLCBtb2RlbTogJXMiLCB0dG5h bWUsICJUQVBJIiApOwotCQllbHNlCi0jZW5kaWYgLyogQ0tfVEFQSSAqLwotCQlwcmludGYoIiBE ZXZpY2U6ICVzLCBtb2RlbTogJXMiLAotCQkgICAgICAgdHRuYW1lLCBnbWRtdHlwKCkgKTsKLQkJ aWYgKHNwZWVkID4gLTFMKQotCQkgIHByaW50ZigiLCBzcGVlZDogJWxkXG4iLCBzcGVlZCk7Ci0J CWVsc2UKLQkJICBwcmludGYoIiwgc3BlZWQ6ICh1bmtub3duKVxuIik7Ci0JICAgIH0KLQkgICAg c3BkbWF4ID0gZGlhbG1heCA+IDBMID8gZGlhbG1heCA6IG1wLT5tYXhfc3BlZWQ7Ci0KLSNpZm5k ZWYgTk9ISU5UUwotCSAgICBpZiAoaGludHMgJiYgIXF1aWV0ICYmCi0JCSFuZXR3b3JrICYmIHNw ZG1heCA+IDBMICYmIHNwZWVkID4gc3BkbWF4Ci0jaWZkZWYgQ0tfVEFQSQotCQkmJiAoIXR0dGFw aSB8fCB0YXBpcGFzcykKLSNlbmRpZiAvKiBDS19UQVBJICovCi0JCSkgewotCQlwcmludGYoIlxu KioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7Ci0JCXByaW50ZigKLSAgICAiSW50ZXJmYWNl IHNwZWVkICVsZCBtaWdodCBiZSB0b28gaGlnaCBmb3IgdGhpcyBtb2RlbSB0eXBlLlxuIiwKLQkJ ICAgICAgIHNwZWVkCi0JCSAgICAgICApOwotCQlwcmludGYoCi0gICAgIklmIGRpYWxpbmcgZmFp bHMsIFNFVCBTUEVFRCB0byAlbGQgb3IgbGVzcyBhbmQgdHJ5IGFnYWluLlxuIiwKLQkJICAgICAg IHNwZG1heAotCQkgICAgICAgKTsKLQkJcHJpbnRmKCIoVXNlIFNFVCBISU5UUyBPRkYgdG8gc3Vw cHJlc3MgZnV0dXJlIGhpbnRzLilcbiIpOwotCQlwcmludGYoIioqKioqKioqKioqKioqKioqKioq KioqKipcbiIpOwotCQlwcmludGYoIlxuIik7Ci0JICAgIH0KLSNlbmRpZiAvKiBOT0hJTlRTICov Ci0JICAgIHByaW50ZigiICVzIHRpbWVvdXQ6ICIsIGZjID09IDAgPyAiRGlhbCIgOiAiQW5zd2Vy Iik7Ci0JICAgIGlmICh3YWl0Y3QgPiAwKQotCSAgICAgIHByaW50ZigiJWQgc2Vjb25kc1xuIixt ZG13YWl0KTsKLQkgICAgZWxzZQotCSAgICAgIHByaW50ZigiIChub25lKVxuIik7Ci0JICAgIHBy aW50ZigKLSNpZmRlZiBNQUMKLQkgICAgICAgIiBUeXBlIENvbW1hbmQtLiB0byBjYW5jZWwuXG4i Ci0jZWxzZQotI2lmZGVmIFVOSVgKLQkgICAgICAgIiBUbyBjYW5jZWw6IHR5cGUgeW91ciBpbnRl cnJ1cHQgY2hhcmFjdGVyIChub3JtYWxseSBDdHJsLUMpLlxuIgotI2Vsc2UKLQkgICAgICAgIiBU byBjYW5jZWw6IHR5cGUgQ3RybC1DIChob2xkIGRvd24gQ3RybCwgcHJlc3MgQykuXG4iCi0jZW5k aWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIE1BQyAqLwotCSAgICAgICApOwotICAgICAgICB9Ci0g ICAgfQotICAgIGRlYnVnKEYxMTEsImNrZGlhbCIsdHRuYW1lLChpbnQpIChzcGVlZCAvIDEwTCkp OwotICAgIGRlYnVnKEYxMDEsImNrZGlhbCB0aW1lb3V0IiwiIix3YWl0Y3QpOwotI2lmZGVmIE9T MgotICAgIHRlcm1faW8gPSAwOwotI2VuZGlmIC8qIE9TMiAqLwotCi0vKiBTZXQgdGltZXIgYW5k IGludGVycnVwdCBoYW5kbGVycy4gKi8KLSAgICBzYXZpbnQgPSBzaWduYWwoIFNJR0lOVCwgZGlh bGludCApIDsgLyogQW5kIHRlcm1pbmFsIGludGVycnVwdCBoYW5kbGVyLiAqLwotICAgIGNjX2Fs cm1fZXhlY3V0ZShja2phZGRyKHNqYnVmKSwgMCwgZGlhbHRpbWUsIF9kb2RpYWwsIGZhaWxkaWFs KTsKLQotICAgIHNpZ25hbChTSUdJTlQsIHNhdmludCk7Ci0jaWZkZWYgT1MyCi0gICAgaWYgKGRp YWxzdGEgPT0gRElBX09LKQkJLyogRGlhbGluZyBpcyBjb21wbGV0ZWQgKi8KLSAgICAgIERpYWxl clNlbmQoT1BUX0tFUk1JVF9DT05ORUNULCAwKTsKLSAgICB0ZXJtX2lvID0gdGVybV9pb19zYXY7 Ci0jZW5kaWYgLyogT1MyICovCi0gICAgaWYgKGRpYWxzdGEgPT0gRElBX1BBUlQgfHwgZGlhbHN0 YSA9PSBESUFfT0spIHsKLQkvKiBUaGlzIGlzIG5lZWRlZCwgZS5nLiwgZm9yIFRlbG5ldCBtb2Rl bSBzZXJ2ZXJzICovCi0JaWYgKHJlbGlhYmxlICE9IFNFVF9PRkYgfHwgIXNldHJlbGlhYmxlKSB7 Ci0JICAgIHJlbGlhYmxlID0gU0VUX09GRjsJCS8qIFRyYW5zcG9ydCBpcyBub3QgcmVsaWFibGUg Ki8KLQkgICAgZGVidWcoRjEwMSwiY2tkaWFsIHJlbGlhYmxlIiwiIixyZWxpYWJsZSk7Ci0JfQot CXJldHVybigxKTsJCQkvKiBEaWFsIGF0dGVtcHQgc3VjY2VlZGVkICovCi0gICAgfSBlbHNlIHsK LQlyZXR1cm4oMCk7CQkJLyogRGlhbCBhdHRlbXB0IGZhaWxlZCAqLwotICAgIH0KLX0gLyogY2tk aWFsICovCi0KLS8qCi0gIGdldG9rKCkgLSB3YWl0IHVwIHRvIG4gc2Vjb25kcyBmb3IgT0sgKDAp IG9yIEVSUk9SICg0KSByZXNwb25zZSBmcm9tIG1vZGVtLgotICBVc2Ugd2l0aCBIYXllc2xpa2Ug b3IgQ0NJVFQgbW9kZW1zIGZvciByZWFkaW5nIHRoZSByZXBseSB0byBhIG5vbmRpYWxpbmcKLSAg Y29tbWFuZC4KLQotICBTZWNvbmQgYXJndW1lbnQgc2F5cyB3aGV0aGVyIHRvIGJlIHN0cmljdCBh Ym91dCBudW1lcmljIHJlc3VsdCBjb2RlcywgaS5lLgotICB0byByZXF1aXJlIHRoZXkgYmUgcHJl Y2VkZWQgYnkgQ1Igb3IgZWxzZSBiZSB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHRoZQotICByZXNw b25zZSwgZS5nLiB0byBwcmV2ZW50IHRoZSBBVEgwPENSPiBlY2hvIGZyb20gbG9va2luZyBsaWtl IGEgdmFsaWQKLSAgcmVzcG9uc2UuICBTdHJpY3QgPT0gMCBpcyBuZWVkZWQgZm9yIEFUSSBvbiBU ZWxlYml0LCB3aGljaCBjYW4gcmV0dXJuIHRoZQotICBtb2RlbCBudW1iZXIgY29uY2F0ZW5hdGVk IHdpdGggdGhlIG51bWVyaWMgcmVzcG9uc2UgY29kZSwgZS5nLiAiOTYyMCIKLSAgKCI5NjIiIGlz IHRoZSBtb2RlbCBudW1iZXIsICIwIiBpcyB0aGUgcmVzcG9uc2UgY29kZSkuICBnZXRvaygpIFJl dHVybnM6Ci0KLSAgIDAgaWYgaXQgdGltZWQgb3V0LAotICAgMSBpZiBpdCBzdWNjZWVkZWQsCi0g IC0xIG9uIG1vZGVtIGNvbW1hbmQsIGkvbywgb3Igb3RoZXIgZXJyb3IuCi0qLwotc3RhdGljIGNr am1wYnVmIG9rYnVmOwotCi1zdGF0aWMgU0lHVFlQCi0jaWZkZWYgQ0tfQU5TSUMKLW9rdGltbyhp bnQgZm9vKQkJCQkvKiBBbGFybSBoYW5kbGVyIGZvciBnZXRvaygpLiAqLwotI2Vsc2UKLW9rdGlt byhmb28pIGludCBmb287CQkJLyogQWxhcm0gaGFuZGxlciBmb3IgZ2V0b2soKS4gKi8KLSNlbmRp ZiAvKiBDS19BTlNJQyAqLwotLyogb2t0aW1vICovIHsKLQotI2lmZGVmIE9TMgotICAgIGFsYXJt KDApOwotICAgIC8qIHNpZ25hbChTSUdBTFJNLFNJR19JR04pOyAqLwotICAgIGRlYnVnKEYxMDAs Im9rdGltbygpIFNJR0FMUk0gY2F1Z2h0IC0tIFNJR19JR04gc2V0IiwiIiwwKSA7Ci0jZW5kaWYg LyogT1MyICovCi0KLSNpZmRlZiBPU0sJCQkJLyogT1MtOSwgc2VlIGNvbW1lbnQgaW4gZGlhbHRp bWUoKS4gKi8KLSAgICBzaWdtYXNrKC0xKTsKLSNlbmRpZiAvKiBPU0sgKi8KLSNpZmRlZiBOVFNJ RwotICAgIGlmICggZm9vID09IFNJR0FMUk0gKQotICAgICAgUG9zdEFsYXJtU2lnU2VtKCk7Ci0g ICAgZWxzZQotICAgICAgUG9zdEN0cmxDU2VtKCk7Ci0jZWxzZSAvKiBOVFNJRyAqLwotI2lmZGVm IE5UCi0gICAgY2tsb25nam1wKGNramFkZHIob2tidWYpLDEpOwotI2Vsc2UgLyogTlQgKi8KLSAg ICBja2xvbmdqbXAob2tidWYsMSk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSNlbmRpZiAvKiBOVCAq LwotICAgIC8qIE5PVFJFQUNIRUQgKi8KLSAgICBTSUdSRVRVUk47Ci19Ci0KLXN0YXRpYyBpbnQg b2tzdGF0dXMsIG9rbiwgb2tzdHJpY3Q7Ci0KLXN0YXRpYyBTSUdUWVAKLSNpZmRlZiBDS19BTlNJ QwotZG9vayh2b2lkICogdGhyZWFkaW5mbykKLSNlbHNlIC8qIENLX0FOU0lDICovCi1kb29rKHRo cmVhZGluZm8pIFZPSUQgKiB0aHJlYWRpbmZvIDsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyog ZG9vayAqLyB7Ci0gICAgQ0hBUiBjOwotI2lmZGVmIERFQlVHCi0gICAgY2hhciAqIG1kbW1zZyA9 ICIiOwotI2VuZGlmIC8qIERFQlVHICovCi0KLSAgICBpbnQgaSwgeDsKLSNpZmRlZiBJS1NECi0g ICAgZXh0ZXJuIGludCBpbnNlcnZlcjsKLSNlbmRpZiAvKiBJS1NEICovCi0jaWZkZWYgTlRTSUcK LSAgICBzaWduYWwoU0lHSU5ULG9rdGltbyk7Ci0gICAgaWYgKHRocmVhZGluZm8pIHsJCQkvKiBU aHJlYWQgbG9jYWwgc3RvcmFnZS4uLiAqLwotCVRsc1NldFZhbHVlKFRsc0luZGV4LHRocmVhZGlu Zm8pOwotICAgIH0KLSNlbmRpZiAvKiBOVFNJRyAqLwotI2lmZGVmIENLX0xPR0lOCi0jaWZkZWYg TlQKLSNpZmRlZiBJS1NECi0gICAgaWYgKGluc2VydmVyKQotICAgICAgc2V0bnRjcmVkcygpOwot I2VuZGlmIC8qIElLU0QgKi8KLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIENLX0xPR0lOICov Ci0KLSAgICBpZiAobWRtY2FwYXMgJiBDS0RfVjI1KSB7CQkvKiBDQ0lUVCwgZWFzeS4uLiAqLwot ICAgICAgICB3YWl0Zm9yKCJWQUwiKTsKLSAgICAgICAgb2tzdGF0dXMgPSAxOwotCWRlYnVnKEYx MTEsIk1vZGVtX1Jlc3BvbnNlKFYyNSkiLCJWQUwiLG9rc3RhdHVzKTsKLSNpZmRlZiBOVFNJRwot CWNrVGhyZWFkRW5kKHRocmVhZGluZm8pOwotI2VuZGlmIC8qIE5UU0lHICovCi0JU0lHUkVUVVJO OwotI2lmbmRlZiBNSU5JRElBTAotICAgIH0gZWxzZSBpZiAobXltZG10eXAgPT0gbl9NSUNST0NP TSkgeyAvKiBNaWNyb2NvbSBpbiBTWCBtb2RlLCBhbHNvIGVhc3kgKi8KLSAgICAgICAgd2FpdGZv cihNSUNST0NPTS53YWtlX3Byb21wdCk7CS8qIChJIHRoaW5rLi4uKSAqLwotCWRlYnVnKEYxMTEs Ik1vZGVtX1Jlc3BvbnNlKE1pY3JvY29tKSIsTUlDUk9DT00ud2FrZV9wcm9tcHQsb2tzdGF0dXMp OwotICAgICAgICBva3N0YXR1cyA9IDE7Ci0jaWZkZWYgTlRTSUcKLQlja1RocmVhZEVuZCh0aHJl YWRpbmZvKTsKLSNlbmRpZiAvKiBOVFNJRyAqLwotCVNJR1JFVFVSTjsKLSNlbmRpZiAvKiBNSU5J RElBTCAqLwotICAgIH0gZWxzZSB7CQkJCS8qIEhheWVzICYgZnJpZW5kcywgc3RhcnQgaGVyZS4u LiAqLwotCW9rc3RhdHVzID0gMDsJCQkvKiBObyBzdGF0dXMgeWV0LiAqLwotCWZvciAoeCA9IDA7 IHggPCBSQlVGTDsgeCsrKQkvKiBJbml0aWFsaXplIHJlc3BvbnNlIGJ1ZmZlciAqLwotCSAgcmJ1 Zlt4XSA9IFNQOwkJCS8qICB0byBhbGwgc3BhY2VzICovCi0JcmJ1ZltSQlVGTF0gPSBOVUw7CQkv KiBhbmQgdGVybWluYXRlIHdpdGggTlVMLiAqLwotCXdoaWxlIChva3N0YXR1cyA9PSAwKSB7CQkv KiBXaGlsZSBubyBzdGF0dXMuLi4gKi8KLQkgICAgeCA9IGRkaW5jKG9rbik7CQkvKiBSZWFkIGEg Y2hhcmFjdGVyICovCi0JICAgIGlmICh4IDwgMCkgewkJLyogSS9PIGVycm9yICovCi0JCW9rc3Rh dHVzID0gLTE7Ci0jaWZkZWYgTlRTSUcKLQkJY2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7Ci0jZW5k aWYgLyogTlRTSUcgKi8KLQkJU0lHUkVUVVJOOwotCSAgICB9Ci0jaWZkZWYgQ09NTUVOVAotCSAg ICAvKiB0b28gbXVjaCAqLwotCSAgICBkZWJ1ZyhGMTAxLCJnZXRvayBkZGluYyIsIiIseCk7IC8q IEdvdCBhIGNoYXJhY3Rlci4gKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0JICAgIGMgPSAoY2hh cikgKHggJiAweDdmKTsJLyogR2V0IGxvdyBvcmRlciA3IGJpdHMgKi8KLQkgICAgaWYgKCFjKQkJ CS8qIERvbid0IGRlcG9zaXQgTlVMcyAqLwotCSAgICAgIGNvbnRpbnVlOwkJCS8qIG9yIGVsc2Ug ZGlkd2VnZXQoKSB3b24ndCB3b3JrICovCi0JICAgIGlmIChkaWFsZHB5KSBjb25vYygoY2hhcilj KTsgLyogRWNobyBpdCBpZiByZXF1ZXN0ZWQgKi8KLQkgICAgZm9yIChpID0gMDsgaSA8IFJCVUZM LTE7IGkrKykgLyogUm90YXRlIGJ1ZmZlciAqLwotCSAgICAgIHJidWZbaV0gPSByYnVmW2krMV07 Ci0JICAgIHJidWZbUkJVRkwtMV0gPSBjOwkJLyogRGVwb3NpdCBjaGFyYWN0ZXIgYXQgZW5kICov Ci0jaWZkZWYgQ09NTUVOVAotCSAgICAvKiB0b28gbXVjaCAqLwotCSAgICBkZWJ1ZyhGMDAwLCJn ZXRvazoiLHJidWYsKGludCkgYyk7IC8qIExvZyBpdCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8K LQkgICAgc3dpdGNoIChjKSB7CQkvKiBJbnRlcnByZXQgaXQuICovCi0JICAgICAgY2FzZSBDUjoJ CQkvKiBHb3QgYSBjYXJyaWFnZSByZXR1cm4uICovCi0JCXN3aXRjaChyYnVmW1JCVUZMLTJdKSB7 CS8qIExvb2sgYXQgY2hhcmFjdGVyIGJlZm9yZSBpdC4gKi8KLQkJICBjYXNlICcwJzoJCS8qIDAg PSBPSyBudW1lcmljIHJlc3BvbnNlICovCi0JCSAgICBpZiAoIW9rc3RyaWN0IHx8Ci0JCQlyYnVm W1JCVUZMLTNdID09IENSIHx8IHJidWZbUkJVRkwtM10gPT0gU1ApIHsKLQkJCW5vbnZlcmJhbCA9 IDE7Ci0JCQlva3N0YXR1cyA9IDE7CS8qIEdvb2QgcmVzcG9uc2UgKi8KLQkJICAgIH0KLQkJICAg IGRlYnVnKEYxMTEsIk1vZGVtX1Jlc3BvbnNlKEhheWVzKSIsIjAiLG9rc3RhdHVzKTsKLQkJICAg IGJyZWFrOwotCQkgIGNhc2UgJzQnOgkJLyogNCA9IEVSUk9SIG51bWVyaWMgcmVzcG9uc2UgKi8K LSNpZm5kZWYgTUlOSURJQUwKLQkJICAgIC8qIE9yIFRlbGViaXQgbW9kZWwgbnVtYmVyIDk2NCEg Ki8KLQkJICAgIGlmIChteW1kbXR5cCA9PSBuX1RFTEVCSVQgJiYKLQkJCWlzZGlnaXQocmJ1ZltS QlVGTC0zXSkgJiYKLQkJCWlzZGlnaXQocmJ1ZltSQlVGTC00XSkpCi0JCSAgICAgIGJyZWFrOwot CQkgICAgZWxzZQotI2VuZGlmIC8qIE1JTklESUFMICovCi0JCSAgICAgIGlmICghb2tzdHJpY3Qg fHwKLQkJCXJidWZbUkJVRkwtM10gPT0gQ1IgfHwgcmJ1ZltSQlVGTC0zXSA9PSBTUCkgewotCQkJ bm9udmVyYmFsID0gMTsKLQkJCW9rc3RhdHVzID0gLTE7CS8qIEJhZCBjb21tYW5kICovCi0JCSAg ICB9Ci0JCSAgICBkZWJ1ZyhGMTExLCJNb2RlbV9SZXNwb25zZShIYXllcykiLCI0Iixva3N0YXR1 cyk7Ci0JCSAgICBicmVhazsKLQkJfQotCQlpZiAoZGlhbGRweSAmJiBub252ZXJiYWwpIC8qIElm IG51bWVyaWMgcmVzdWx0cywgKi8KLQkJICBjb25vYyhMRik7CQkgIC8qIGVjaG8gYSBsaW5lZmVl ZCB0b28uICovCi0JCWJyZWFrOwotCSAgICAgIGNhc2UgTEY6CQkJLyogR290IGEgbGluZWZlZWQu ICovCi0JCS8qCi0JCSAgTm90ZSB1c2Ugb2YgZXhwbGljaXQgb2N0YWwgY29kZXMgaW4gdGhlIHN0 cmluZyBmb3IKLQkJICBDUiBhbmQgTEYuICBXZSB3YW50IHJlYWwgQ1IgYW5kIExGIGhlcmUsIG5v dCB3aGF0ZXZlcgotCQkgIHRoZSBjb21waWxlciBoYXBwZW5zIHRvIHJlcGxhY2UgXHIgYW5kIFxu IHdpdGguLi4KLQkJKi8KLQkJaWYgKCFzdHJjbXAocmJ1ZitSQlVGTC00LCJPS1wwMTVcMDEyIikp IHsgLyogR29vZCByZXNwb25zZSAqLwotCQkgICAgb2tzdGF0dXMgPSAxOwotCQkgICAgZGVidWco RjExMSwiTW9kZW1fUmVzcG9uc2UoSGF5ZXMpIiwiT0siLG9rc3RhdHVzKTsKLQkJfQotCQlpZiAo IXN0cmNtcChyYnVmK1JCVUZMLTMsIk9LXDAxMiIpKSB7IC8qIEdvb2QgcmVzcG9uc2UgKi8KLQkJ ICAgIG9rc3RhdHVzID0gMTsKLQkJICAgIGRlYnVnKEYxMTEsIk1vZGVtX1Jlc3BvbnNlKEhheWVz KSIsIk9LIixva3N0YXR1cyk7Ci0JCX0gZWxzZSBpZiAoIXN0cmNtcChyYnVmK1JCVUZMLTcsIkVS Uk9SXDAxNVwwMTIiKSkgeyAvKiBFcnJvciAqLwotCQkgICAgb2tzdGF0dXMgPSAtMTsKLQkJICAg IGRlYnVnKEYxMTEsIk1vZGVtX1Jlc3BvbnNlKEhheWVzKSIsIkVSUk9SIixva3N0YXR1cyk7Ci0J CX0gZWxzZSBpZiAoIXN0cmNtcChyYnVmK1JCVUZMLTYsIkVSUk9SXDAxMiIpKSB7IC8qIEVycm9y ICovCi0JCSAgICBva3N0YXR1cyA9IC0xOwotCQkgICAgZGVidWcoRjExMSwiTW9kZW1fUmVzcG9u c2UoSGF5ZXMpIiwiRVJST1IiLG9rc3RhdHVzKTsKLQkJfQotCQlicmVhazsKLQkgICAgICAvKiBD aGVjayB3aGV0aGVyIG1vZGVtIGVjaG9lcyBpdHMgY29tbWFuZHMuLi4gKi8KLQkgICAgICBjYXNl ICd0JzoJCQkvKiBHb3QgbGl0dGxlIHQgKi8KLQkJaWYgKCFzdHJjbXAocmJ1ZitSQlVGTC0zLCJc MDE1YXQiKSB8fCAvKiBTZWUgaWYgaXQncyAiYXQiICovCi0JCSAgICAhc3RyY21wKHJidWYrUkJV RkwtMywiIGF0IikpCi0JCSAgICBtZG1lY2hvID0gMTsKLQkJLyogZGVidWcoRjExMSwiTURNRUNI Ty10IixyYnVmK1JCVUZMLTIsbWRtZWNobyk7ICovCi0JCWJyZWFrOwotCSAgICAgIGNhc2UgJ1Qn OgkJCS8qIEdvdCBCaWcgVCAqLwotCQlpZiAoIXN0cmNtcChyYnVmK1JCVUZMLTMsIlwwMTVBVCIp IHx8CS8qIFNlZSBpZiBpdCdzICJBVCIgKi8KLQkJICAgICFzdHJjbXAocmJ1ZitSQlVGTC0zLCIg QVQiKSkKLQkJICAgIG1kbWVjaG8gPSAxOwotCQkvKiBkZWJ1ZyhGMTExLCJNRE1FQ0hPLVQiLHJi dWYrUkJVRkwtMyxtZG1lY2hvKTsgKi8KLQkJYnJlYWs7Ci0JICAgICAgZGVmYXVsdDoJCQkvKiBP dGhlciBjaGFyYWN0ZXJzLCBhY2N1bXVsYXRlLiAqLwotCQlva3N0YXR1cyA9IDA7Ci0JCWJyZWFr OwotCSAgICB9Ci0JfQotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJnZXRvayIsIiIsb2tzdGF0dXMp OwkvKiA8LS0gSXQncyBhIGxpZSAod2h5PykgKi8KLSNpZmRlZiBOVFNJRwotICAgIGNrVGhyZWFk RW5kKHRocmVhZGluZm8pOwotI2VuZGlmIC8qIE5UU0lHICovCi0gICAgU0lHUkVUVVJOOwotfQot Ci1zdGF0aWMgU0lHVFlQCi0jaWZkZWYgQ0tfQU5TSUMKLWZhaWxvayh2b2lkICogdGhyZWFkaW5m bykKLSNlbHNlIC8qIENLX0FOU0lDICovCi1mYWlsb2sodGhyZWFkaW5mbykgVk9JRCAqIHRocmVh ZGluZm87Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGZhaWxvayAqLyB7Ci0gICAgZGVidWco RjEwMCwibG9uZ2ptcCByZXR1cm5lZCB0byBnZXRvaygpIiwiIiwwKTsKLSAgICBkZWJ1ZyhGMTAw LCJnZXRvayB0aW1lb3V0IiwiIiwwKTsKLSAgICBTSUdSRVRVUk47Ci19Ci0KLWludAotZ2V0b2so biwgc3RyaWN0KSBpbnQgbiwgc3RyaWN0OyB7Ci0gICAgZGVidWcoRjEwMSwiZ2V0b2sgZW50cnkg biIsIiIsbik7Ci0gICAgb2tzdGF0dXMgPSAwOwotICAgIG9rbiA9IG47Ci0gICAgb2tzdHJpY3Qg PSBzdHJpY3Q7Ci0KLSNpZmRlZiBEWU5BTUlDCi0gICAgaWYgKCFyYnVmKSB7Ci0JaWYgKCEocmJ1 ZiA9IG1hbGxvYyhSQlVGTCsxKSkpIHsgLyogQWxsb2NhdGUgaW5wdXQgbGluZSBidWZmZXIgKi8K LQkgICAgZGlhbHN0YSA9IERJQV9JRTsKLQkgICAgcmV0dXJuKC0xKTsKLQl9Ci0JZGVidWcoRjEw MSwiR0VUT0sgcmJ1ZiBtYWxsb2Mgb2siLCIiLFJCVUZMKzEpOwotICAgIH0KLSNlbmRpZiAvKiBE WU5BTUlDICovCi0KLSAgICBtZG1lY2hvID0gMDsJCQkvKiBBc3N1bWUgbm8gZWNob2luZyBvZiBj b21tYW5kcyAqLwotCi0gICAgZGVidWcoRjEwMCwiYWJvdXQgdG8gYWxybV9leGVjdXRlIGRvb2so KSIsIiIsMCk7Ci0gICAgYWxybV9leGVjdXRlKCBja2phZGRyKG9rYnVmKSwgbiwgb2t0aW1vLCBk b29rLCBmYWlsb2sgKSA7Ci0gICAgZGVidWcoRjEwMCwicmV0dXJuaW5nIGZyb20gYWxybV9leGVj dXRlIGRvb2soKSIsIiIsMCk7Ci0KLSAgICB0dGZsdWkoKTsJCQkJLyogRmx1c2ggaW5wdXQgYnVm ZmVyICovCi0gICAgcmV0dXJuKG9rc3RhdHVzKTsJCQkvKiBSZXR1cm4gc3RhdHVzICovCi19Ci0K LS8qICBHIEUgVCBIIFIgTiAgLS0gIEdldCBIYXllcyBSZXN1bHQgTnVtZXJpYyAgKi8KLQotc3Rh dGljIFZPSUQKLWdldGhybigpIHsKLSAgICBjaGFyIGM7Ci0gICAgaW50IHg7Ci0vKgotICBIYXll cyBudW1lcmljIHJlc3VsdCBjb2RlcyAoSGF5ZXMgMTIwMCBhbmQgaGlnaGVyKToKLSAgICAgMCA9 IE9LCi0gICAgIDEgPSBDT05ORUNUIGF0IDMwMCBicHMgKG9yIDEyMDAgYnBzIG9uIEhheWVzIDEy MDAgd2l0aCBiYXNpYyBjb2RlIHNldCkKLSAgICAgMiA9IFJJTkcKLSAgICAgMyA9IE5PIENBUlJJ RVIKLSAgICAgNCA9IEVSUk9SIChpbiBjb21tYW5kIGxpbmUpCi0gICAgIDUgPSBDT05ORUNUIDEy MDAgKGV4dGVuZGVkIGNvZGUgc2V0KQotICBIYXllcyAyNDAwIGFuZCBoaWdoZXI6Ci0gICAgIDYg PSBOTyBESUFMVE9ORQotICAgICA3ID0gQlVTWQotICAgICA4ID0gTk8gQU5TV0VSCi0gICAgIDkg PSAodGhlcmUgaXMgbm8gOSkKLSAgICAxMCA9IENPTk5FQ1QgMjQwMAotICBSZXBvcnRlZGx5LCB0 aGUgY29kZXMgZm9yIEhheWVzIFYuMzIgbW9kZW1zIGFyZToKLSAgICAxeCA9IENPTk5FQ1QgPHN1 ZmZpeD4KLSAgICA1eCA9IENPTk5FQ1QgMTIwMCA8c3VmZml4PgotICAgIDl4ID0gQ09OTkVDVCAy NDAwIDxzdWZmaXg+Ci0gICAxMXggPSBDT05ORUNUIDQ4MDAgPHN1ZmZpeD4KLSAgIDEyeCA9IENP Tk5FQ1QgOTYwMCA8c3VmZml4PgotICBXaGVyZToKLSAgICB4OiAgIHN1ZmZpeDoKLSAgICBSICA9 IFJFTElBQkxFCi0gICAgUkMgPSBSRUxJQUJMRSBDT01QUkVTU0VECi0gICAgTCAgPSBMQVBNCi0g ICAgTEMgPSBMQVBNIENPTVBSRVNTRUQKLSAgQW5kIGZvciBUZWxlYml0cywgYWxsIHRoZSBhYm92 ZSwgZXhjZXB0IG5vIHN1ZmZpeCBpbiBudW1lcmljIG1vZGUsIHBsdXM6Ci0gICAgMTEgPSBDT05O RUNUIDQ4MDAKLSAgICAxMiA9IENPTk5FQ1QgOTYwMAotICAgIDEzID0gQ09OTkVDVCAxNDQwMAot ICAgIDE0ID0gQ09OTkVDVCAxOTIwMAotICAgIDE1ID0gQ09OTkVDVCAzODQwMAotICAgIDE2ID0g Q09OTkVDVCA1NzYwMAotICAgIDIwID0gQ09OTkVDVCAzMDAvUkVMICAoPSBNTlApCi0gICAgMjIg PSBDT05ORUNUIDEyMDAvUkVMICg9IE1OUCkKLSAgICAyMyA9IENPTk5FQ1QgMjQwMC9SRUwgKD0g TU5QKQotICAgIDQ2ID0gQ09OTkVDVCA3NTEyICAoaS5lLiA3NS8xMjAwKQotICAgIDQ3ID0gQ09O TkVDVCAxMjc1ICAoaS5lLiAxMjAwLzc1KQotICAgIDQ4ID0gQ09OTkVDVCA3MjAwCi0gICAgNDkg PSBDT05ORUNUIDEyMDAwCi0gICAgNTAgPSBDT05ORUNUIEZBU1QgKG5vdCBvbiBUMTYwMC8zMDAw KQotICAgIDUyID0gUlJJTkcKLSAgICA1MyA9IERJQUxJTkcKLSAgICA1NCA9IE5PIFBST01QVFRP TkUKLSAgICA2MSA9IENPTk5FQ1QgRkFTVC9LRVJNIChLZXJtaXQgc3Bvb2YpCi0gICAgNzAgPSBD T05ORUNUIEZBU1QvQ09NUCAoUEVQICsgY29tcHJlc3Npb24pCi0gICAgNzEgPSBDT05ORUNUIEZB U1QvS0VSTS9DT01QIChQRVAgKyBjb21wcmVzc2lvbiArIEtlcm1pdCBzcG9vZikKLQotICBBbmQg Zm9yIG90aGVycywgbG90cyBvZiBzcGVjaWFsIGNhc2VzIGJlbG93Li4uCi0qLwotI2RlZmluZSBO QlVGTCA4Ci0gICAgY2hhciBuYnVmW05CVUZMKzFdOwkJCS8qIFJlc3BvbnNlIGJ1ZmZlciAqLwot ICAgIGludCBpID0gMCwgaiA9IDA7CQkJLyogQnVmZmVyIHBvaW50ZXJzICovCi0KLSAgICBkZWJ1 ZyhGMTAxLCJSRVNQT05TRSBtZG1lY2hvIiwiIixtZG1lY2hvKTsKLSAgICBpZiAobWRtZWNobykg ewkJCS8qIFNwb25nZSB1cCBkaWFsaW5nIHN0cmluZyBlY2hvLiAqLwotCXdoaWxlICgxKSB7Ci0J ICAgIGMgPSAoY2hhcikgKGRkaW5jKDApICYgMHg3Zik7Ci0JICAgIGRlYnVnKEYwMDAsIlNQT05H RSIsIiIsYyk7Ci0JICAgIGRpYWxvYyhjKTsKLQkgICAgaWYgKGMgPT0gQ1IpIGJyZWFrOwotCX0K LSAgICB9Ci0gICAgd2hpbGUgKG1kbXN0YXQgPT0gMCkgewkJLyogUmVhZCByZXNwb25zZSAqLwot CWZvciAoaSA9IDA7IGkgPCBOQlVGTDsgaSsrKQkvKiBDbGVhciB0aGUgYnVmZmVyICovCi0JICBu YnVmW2ldID0gJ1wwJzsKLQlpID0gMDsJCQkJLyogUmVzZXQgdGhlIGJ1ZmZlciBwb2ludGVyLiAq LwotCWMgPSAoY2hhcikgKGRkaW5jKDApICYgMDE3Nyk7CS8qIEdldCBmaXJzdCBkaWdpdCBvZiBy ZXNwb25zZS4gKi8KLQkJCQkJLyogdXNpbmcgYW4gdW50aW1lZCwgYmxvY2tpbmcgcmVhZC4gKi8K LQlkZWJ1ZyhGMDAwLCJSRVNQT05TRS1BIiwiIixjKTsKLQlkaWFsb2MoYyk7CQkJLyogRWNobyBp dCBpZiByZXF1ZXN0ZWQuICovCi0JaWYgKCFpc2RpZ2l0KGMpKQkJLyogSWYgbm90IGEgZGlnaXQs IGtlZXAgbG9va2luZy4gKi8KLQkgIGNvbnRpbnVlOwotCW5idWZbaSsrXSA9IGM7CQkJLyogR290 IGZpcnN0IGRpZ2l0LCBzYXZlIGl0LiAqLwotCXdoaWxlIChjICE9IENSICYmIGkgPCA4KSB7CS8q IFJlYWQgY2hhcnMgdXAgdG8gQ1IgKi8KLQkgICAgeCA9IGRkaW5jKDApICYgMDE3NzsJLyogR2V0 IGEgY2hhcmFjdGVyLiAqLwotCSAgICBjID0gKGNoYXIpIHg7CQkvKiBHb3QgaXQgT0suICovCi0J ICAgIGRlYnVnKEYwMDAsIlJFU1BPTlNFLUMiLCIiLGMpOwotCSAgICBpZiAoYyAhPSBDUikJCS8q IElmIGl0J3Mgbm90IGEgY2FycmlhZ2UgcmV0dXJuLCAqLwotCSAgICAgIG5idWZbaSsrXSA9IGM7 CQkvKiAgc2F2ZSBpdC4gKi8KLQkgICAgZGlhbG9jKGMpOwkJCS8qIEVjaG8gaXQuICovCi0JfQot CW5idWZbaV0gPSAnXDAnOwkJCS8qIERvbmUsIHRlcm1pbmF0ZSB0aGUgYnVmZmVyLiAqLwotCWRl YnVnKEYxMTAsImRpYWwgaGF5ZXNudiBsYnVmIixsYnVmLDApOwotCWRlYnVnKEYxMTEsImRpYWwg aGF5ZXNudiBnb3QiLG5idWYsaSk7Ci0JLyoKLQkgICBTZXBhcmF0ZSBhbnkgbm9uLW51bWVyaWMg c3VmZml4IGZyb20gdGhlIG51bWVyaWMKLQkgICByZXN1bHQgY29kZSB3aXRoIGEgbnVsbC4KLQkq LwotCWZvciAoaiA9IGktMTsgKGogPiAtMSkgJiYgIWlzZGlnaXQobmJ1ZltqXSk7IGotLSkKLQkg IG5idWZbaisxXSA9IG5idWZbal07Ci0JaisrOwotCW5idWZbaisrXSA9ICdcMCc7Ci0JZGVidWco RjExMCwiZGlhbCBoYXllc252IG51bWVyaWMiLG5idWYsMCk7Ci0JZGVidWcoRjExMSwiZGlhbCBo YXllc252IHN1ZmZpeCAiLG5idWYraixqKTsKLQkvKiBQcm9iYWJseSBwaG9uZSBudW1iZXIgZWNo b2luZy4gKi8KLQlpZiAoKGludClzdHJsZW4obmJ1ZikgPiAzKQotCSAgY29udGludWU7Ci0KLQkv KiBOb3cgcmVhZCBhbmQgaW50ZXJwcmV0IHRoZSByZXN1bHRzLi4uICovCi0KLQlpID0gYXRvaShu YnVmKTsJLyogQ29udmVydCB0byBpbnRlZ2VyICovCi0Jc3dpdGNoIChpKSB7Ci0JICBjYXNlIDA6 Ci0JICAgIG1kbXN0YXQgPSBEX1BBUlRJQUw7CS8qIE9LIHJlc3BvbnNlICovCi0JICAgIGJyZWFr OwotCSAgY2FzZSAxOgkJCS8qIENPTk5FQ1QgKi8KLQkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsJ LyogQ291bGQgYmUgYW55IHNwZWVkICovCi0JICAgIGJyZWFrOwotCSAgY2FzZSAyOgkJCS8qIFJJ TkcgKi8KLQkgICAgaWYgKGRpYWxkcHkpCi0JICAgICAgcHJpbnRmKCJcclxuIExvY2FsIHBob25l IGlzIHJpbmdpbmchXHJcbiIpOwotCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JICAgIGRpYWxz dGEgPSBESUFfUklORzsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIDM6CQkJLyogTk8gQ0FSUklFUiAq LwotCSAgICBpZiAoZGlhbGRweSkgcHJpbnRmKCJcclxuIE5vIENhcnJpZXIuXHJcbiIpOwotCSAg ICBtZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JICAgIGRpYWxzdGEgPSBESUFfTk9DQTsKLQkgICAgYnJl YWs7Ci0JICBjYXNlIDQ6CQkJLyogRVJST1IgKi8KLQkgICAgaWYgKGRpYWxkcHkpCi0JICAgICAg cHJpbnRmKCJcclxuIE1vZGVtIENvbW1hbmQgRXJyb3IuXHJcbiIpOwotCSAgICBtZG1zdGF0ID0g RF9GQUlMRUQ7Ci0JICAgIGRpYWxzdGEgPSBESUFfRVJSOwotCSAgICBicmVhazsKLQkgIGNhc2Ug NToJCQkvKiBDT05ORUNUIDEyMDAgKi8KLQkgICAgc3BkY2hnKDEyMDBMKTsgLyogQ2hhbmdlIHNw ZWVkIGlmIG5lY2Vzc2FyeS4gKi8KLQkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgYnJl YWs7Ci0JICBjYXNlIDY6CQkJLyogTk8gRElBTFRPTkUgKi8KLSNpZm5kZWYgTUlOSURJQUwKLQkg ICAgaWYgKG15bWRtdHlwID09IG5fTUlDUk9MSU5LICYmIGF0b2koZGlhbGxjYykgPT0gNDkgJiYg ZGlhbGRweSkKLQkgICAgICBwcmludGYoIlxyXG4gRGlhbCBMb2NrZWQuXHJcbiIpOyAvKiBHZXJt YW55ICovCi0JICAgIGVsc2UKLSNlbmRpZiAvKiBNSU5JRElBTCAqLwotCSAgICAgIGlmIChkaWFs ZHB5KQotCQlwcmludGYoIlxyXG4gTm8gRGlhbHRvbmUuXHJcbiIpOwotCSAgICBtZG1zdGF0ID0g RF9GQUlMRUQ7Ci0JICAgIGRpYWxzdGEgPSBESUFfTk9EVDsKLQkgICAgYnJlYWs7Ci0JICBjYXNl IDc6CQkJLyogQlVTWSAqLwotCSAgICBpZiAoZGlhbGRweSkgcHJpbnRmKCJcclxuIEJ1c3kuXHJc biIpOwotCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JICAgIGRpYWxzdGEgPSBESUFfQlVTWTsK LQkgICAgYnJlYWs7Ci0JICBjYXNlIDg6CQkJLyogTk8gQU5TV0VSICovCi0jaWZuZGVmIE1JTklE SUFMCi0JICAgIGlmIChteW1kbXR5cCA9PSBuX01JQ1JPTElOSyAmJiBhdG9pKGRpYWxsY2MpID09 IDQxICYmIGRpYWxkcHkpCi0JICAgICAgcHJpbnRmKCJcclxuIERpYWwgTG9ja2VkLlxyXG4iKTsg LyogU3dpdHplcmxhbmQgKi8KLQkgICAgZWxzZQotI2VuZGlmIC8qIE1JTklESUFMICovCi0JICAg ICAgaWYgKGRpYWxkcHkpCi0JCXByaW50ZigiXHJcbiBObyBBbnN3ZXIuXHJcbiIpOwotCSAgICBt ZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JICAgIGRpYWxzdGEgPSBESUFfTk9BTjsKLQkgICAgYnJlYWs7 Ci0KLQkgIGNhc2UgOToKLSNpZm5kZWYgTUlOSURJQUwKLQkgICAgaWYgKG15bWRtdHlwID09IG5f WEpBQ0sgfHwgbXltZG10eXAgPT0gbl9TVVBSQVgpIHsKLQkJc3BkY2hnKDYwMCk7Ci0JCWJyZWFr OwotCSAgICB9IC8qIGZhbGwgdGhydSAqLwotI2VuZGlmIC8qIE1JTklESUFMICovCi0JICBjYXNl IDEwOgkJCS8qIENPTk5FQ1QgMjQwMCAqLwotCSAgICBzcGRjaGcoMjQwMEwpOwkJLyogQ2hhbmdl IHNwZWVkIGlmIG5lY2Vzc2FyeS4gKi8KLQkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAg YnJlYWs7Ci0KLSNpZm5kZWYgTUlOSURJQUwKLQotLyogU3RhcnRpbmcgaGVyZSwgd2UgZ2V0IGRp ZmZlcmVudCBtZWFuaW5ncyBmcm9tIGRpZmZlcmVudCBtYW51ZmFjdHVyZXJzICovCi0KLQkgIGNh c2UgMTE6Ci0JICAgIGlmIChteW1kbXR5cCA9PSBuX1VTUikgewotCQlpZiAoZGlhbGRweSkgcHJp bnRmKCIgUmluZ2luZy4uLlxyXG4iKTsKLQkgICAgfSBlbHNlIHsKLQkJc3BkY2hnKDQ4MDBMKTsJ CS8qIENPTk5FQ1QgNDgwMCAqLwotCQltZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICB9Ci0JICAg IGJyZWFrOwotCSAgY2FzZSAxMjoKLQkgICAgaWYgKG15bWRtdHlwID09IG5fVVNSKSB7Ci0JCWlm IChkaWFsZHB5KQotCQkgIHByaW50ZigiXHJcbiBBbnN3ZXJlZCBieSB2b2ljZS5cclxuIik7Ci0J CW1kbXN0YXQgPSBEX0ZBSUxFRDsKLQkJZGlhbHN0YSA9IERJQV9WT0lDOwotCSAgICB9IGVsc2Ug aWYgKG15bWRtdHlwID09IG5fS0VFUElOVE9VQ0gpIHsKLQkJc3BkY2hnKDcyMDBMKTsKLQkJbWRt c3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgfSBlbHNlIHsKLQkJc3BkY2hnKDk2MDBMKTsKLQkJbWRt c3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgfQotCSAgICBicmVhazsKLQkgIGNhc2UgMTM6Ci0JICAg IGlmIChteW1kbXR5cCA9PSBuX0FUVDE5MDAgfHwgbXltZG10eXAgPT0gbl9BVFQxOTEwKSB7Ci0J CWlmIChkaWFsZHB5KSBwcmludGYoIiBXYWl0Li4uXHJcbiIpOwotCQlicmVhazsKLQkgICAgfSBl bHNlIGlmIChteW1kbXR5cCA9PSBuX1VTUiB8fCBteW1kbXR5cCA9PSBuX1VTUlgyKQotCSAgICAg IHNwZGNoZyg5NjAwTCk7Ci0JICAgIGVsc2UgaWYgKGlzX3JvY2t3ZWxsIHx8IGlzX3N1cHJhIHx8 Ci0JCW15bWRtdHlwID09IG5fWk9MVFJJWCB8fCBteW1kbXR5cCA9PSBuX1hKQUNLKQotCSAgICAg IHNwZGNoZyg3MjAwTCk7Ci0JICAgIGVsc2UgaWYgKG15bWRtdHlwICE9IG5fTUlDUk9MSU5LKQot CSAgICAgIHNwZGNoZygxNDQwMEwpOwotCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICBi cmVhazsKLQkgIGNhc2UgMTQ6Ci0JICAgIGlmIChpc19yb2Nrd2VsbCB8fCBpc19zdXByYSB8fCBt eW1kbXR5cCA9PSBuX1hKQUNLKQotCSAgICAgIHNwZGNoZygxMjAwMEwpOwotCSAgICBlbHNlIGlm IChteW1kbXR5cCA9PSBuX0RBVEFQT1JUIHx8IG15bWRtdHlwID09IG5fTUlDUk9MSU5LKQotCSAg ICAgIHNwZGNoZygxNDQwMEwpOwotCSAgICBlbHNlIGlmIChteW1kbXR5cCA9PSBuX0tFRVBJTlRP VUNIKQotCSAgICAgIHNwZGNoZyg5NjAwTCk7Ci0JICAgIGVsc2UgaWYgKG15bWRtdHlwICE9IG5f VVNSICYmIG15bWRtdHlwICE9IG5fWk9MVFJJWCkKLQkgICAgICBzcGRjaGcoMTkyMDBMKTsKLQkg ICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIDE1OgotCSAgICBp ZiAoaXNfcm9ja3dlbGwgfHwgaXNfc3VwcmEgfHwKLQkJbXltZG10eXAgPT0gbl9aT0xUUklYIHx8 IG15bWRtdHlwID09IG5fWEpBQ0spCi0JICAgICAgc3BkY2hnKDE0NDAwTCk7Ci0JICAgIGVsc2Ug aWYgKG15bWRtdHlwID09IG5fVVNSKQotCSAgICAgIHNwZGNoZygxMjAwTCk7Ci0JICAgIGVsc2Ug aWYgKG15bWRtdHlwID09IG5fWllYRUwgfHwgbXltZG10eXAgPT0gbl9JTlRFTCkKLQkgICAgICBz cGRjaGcoNzIwMEwpOwotCSAgICBlbHNlIGlmIChteW1kbXR5cCA9PSBuX0RBVEFQT1JUKQotCSAg ICAgIHNwZGNoZygxOTIwMEwpOwotCSAgICBlbHNlCi0JICAgICAgc3BkY2hnKDM4NDAwTCk7Ci0J ICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSAxNjoKLQkgICAg aWYgKGlzX3JvY2t3ZWxsIHx8IGlzX3N1cHJhIHx8Ci0JCW15bWRtdHlwID09IG5fWk9MVFJJWCB8 fCBteW1kbXR5cCA9PSBuX1hKQUNLKQotCSAgICAgIHNwZGNoZygxOTIwMEwpOwotCSAgICBlbHNl IGlmIChteW1kbXR5cCA9PSBuX1VTUikKLQkgICAgICBzcGRjaGcoMjQwMEwpOwotCSAgICBlbHNl IGlmIChteW1kbXR5cCA9PSBuX0RBVEFQT1JUKQotCSAgICAgIHNwZGNoZyg3MjAwTCk7Ci0JICAg IGVsc2UgaWYgKG15bWRtdHlwICE9IG5fWllYRUwgJiYgbXltZG10eXAgIT0gbl9JTlRFTCkgLyog MTIwMDAgKi8KLQkgICAgICBzcGRjaGcoNTc2MDBMKTsKLQkgICAgbWRtc3RhdCA9IENPTk5FQ1RF RDsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIDE3OgotCSAgICBpZiAobXltZG10eXAgIT0gbl9EQVRB UE9SVCB8fCBteW1kbXR5cCA9PSBuX1hKQUNLKQkvKiAxNjgwMCAqLwotCSAgICAgIHNwZGNoZygz ODQwMEwpOwotCSAgICBlbHNlIGlmIChteW1kbXR5cCA9PSBuX1pZWEVMIHx8IG15bWRtdHlwID09 IG5fSU5URUwpCi0JICAgICAgc3BkY2hnKDE0NDAwTCk7Ci0JICAgIGVsc2UgaWYgKG15bWRtdHlw ID09IG5fS0VFUElOVE9VQ0gpCi0JICAgICAgc3BkY2hnKDE0NDAwTCk7Ci0JICAgIGVsc2UgaWYg KG15bWRtdHlwID09IG5fVVNSKQotCSAgICAgIHNwZGNoZyg5NjAwTCk7Ci0JICAgIG1kbXN0YXQg PSBDT05ORUNURUQ7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSAxODoKLQkgICAgaWYgKGlzX3JvY2t3 ZWxsIHx8IGlzX3N1cHJhIHx8Ci0JCW15bWRtdHlwID09IG5fWk9MVFJJWCB8fCBteW1kbXR5cCA9 PSBuX1hKQUNLIHx8Ci0JCW15bWRtdHlwID09IG5fTUhaQVRUIHx8IG15bWRtdHlwID09IG5fTFVD RU5UKQotCSAgICAgIHNwZGNoZyg1NzYwMEwpOwotCSAgICBlbHNlIGlmIChteW1kbXR5cCA9PSBu X0lOVEVMKQotCSAgICAgIHNwZGNoZygxOTIwMEwpOwotCSAgICBlbHNlIGlmIChteW1kbXR5cCA9 PSBuX1VTUiB8fCBteW1kbXR5cCA9PSBuX1VTUlgyKQotCSAgICAgIHNwZGNoZyg0ODAwTCk7Ci0J ICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSAxOToKLQkgICAg aWYgKG15bWRtdHlwID09IG5fREFUQVBPUlQpCi0JICAgICAgc3BkY2hnKDMwMEwpOwotCSAgICBl bHNlIGlmIChteW1kbXR5cCA9PSBuX1pZWEVMIHx8IG15bWRtdHlwID09IG5fSU5URUwpCi0JICAg ICAgc3BkY2hnKDM4NDAwTCk7Ci0JICAgIGVsc2UKLQkgICAgICBzcGRjaGcoMTE1MjAwTCk7Ci0J ICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSAyMDoKLQkgICAg aWYgKG15bWRtdHlwID09IG5fVVNSIHx8IG15bWRtdHlwID09IG5fVVNSWDIpCi0JICAgICAgc3Bk Y2hnKDcyMDBMKTsKLQkgICAgZWxzZSBpZiAobXltZG10eXAgPT0gbl9EQVRBUE9SVCkKLQkgICAg ICBzcGRjaGcoMjQwMEwpOwotCSAgICBlbHNlIGlmIChteW1kbXR5cCA9PSBuX1pZWEVMIHx8IG15 bWRtdHlwID09IG5fSU5URUwpCi0JICAgICAgc3BkY2hnKDU3NjAwTCk7Ci0JICAgIGVsc2UKLQkg ICAgICBzcGRjaGcoMzAwTCk7Ci0JICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIGJyZWFr OwotCSAgY2FzZSAyMToKLQkgICAgaWYgKG15bWRtdHlwID09IG5fREFUQVBPUlQpCi0JICAgICAg c3BkY2hnKDQ4MDBMKTsKLQkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgYnJlYWs7Ci0J ICBjYXNlIDIyOgotCSAgICBpZiAoaXNfcm9ja3dlbGwgfHwgaXNfc3VwcmEgfHwgbXltZG10eXAg PT0gbl9YSkFDSykKLQkgICAgICBzcGRjaGcoODg4MEwpOwotCSAgICBlbHNlIGlmIChteW1kbXR5 cCA9PSBuX0RBVEFQT1JUKQotCSAgICAgIHNwZGNoZyg5NjAwTCk7Ci0JICAgIGVsc2UgaWYgKG15 bWRtdHlwID09IG5fS0VFUElOVE9VQ0gpCi0JICAgICAgc3BkY2hnKDMwMEwpOwotCSAgICBlbHNl IGlmICghaXNfaGF5ZXNoaXNwZCkKLQkgICAgICBzcGRjaGcoMTIwMEwpOwotCSAgICBtZG1zdGF0 ID0gQ09OTkVDVEVEOwotCSAgICBicmVhazsKLQkgIGNhc2UgMjM6Ci0JICAgIGlmIChpc19oYXll c2hpc3BkIHx8IGlzX3N1cHJhIHx8Ci0JCW15bWRtdHlwID09IG5fTVVMVEkgfHwgbXltZG10eXAg PT0gbl9YSkFDSykKLQkgICAgICBzcGRjaGcoODg4MEwpOwotCSAgICBlbHNlIGlmIChteW1kbXR5 cCAhPSBuX0RBVEFQT1JUICYmICFpc19yb2Nrd2VsbCkgLyogMTIwMDAgKi8KLQkgICAgICBzcGRj aGcoMjQwMEwpOwotCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICBicmVhazsKLQkgIGNh c2UgMjQ6Ci0JICAgIGlmIChpc19yb2Nrd2VsbCB8fCAgaXNfc3VwcmEgfHwgbXltZG10eXAgPT0g bl9YSkFDSykgewotCQltZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JCWRpYWxzdGEgPSBESUFfREVMQTsJ LyogRGVsYXllZCAqLwotCQlicmVhazsKLQkgICAgfSBlbHNlIGlmIChpc19oYXllc2hpc3BkIHx8 IG15bWRtdHlwID09IG5fTFVDRU5UKQotCSAgICAgIHNwZGNoZyg3MjAwTCk7Ci0JICAgIGVsc2Ug aWYgKG15bWRtdHlwID09IG5fREFUQVBPUlQpCi0JICAgICAgc3BkY2hnKDE0NDAwTCk7Ci0JICAg IGVsc2UgaWYgKG15bWRtdHlwID09IG5fSU5URUwgfHwgbXltZG10eXAgPT0gbl9LRUVQSU5UT1VD SCkKLQkgICAgICBzcGRjaGcoMTIwMEwpOwotCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAg ICBicmVhazsKLQkgIGNhc2UgMjU6Ci0JICAgIGlmIChteW1kbXR5cCA9PSBuX1VTUiB8fCBteW1k bXR5cCA9PSBuX1VTUlgyKQotCSAgICAgIHNwZGNoZygxNDQwMEwpOwotCSAgICBlbHNlIGlmICht eW1kbXR5cCA9PSBuX0xVQ0VOVCkKLQkgICAgICBzcGRjaGcoMTIwMDBMKTsKLQkgICAgZWxzZSBp ZiAoaXNfbW90b3JvbGEpCi0JICAgICAgc3BkY2hnKDk2MDBMKTsKLQkgICAgZWxzZSBpZiAobXlt ZG10eXAgPT0gbl9JTlRFTCB8fCBteW1kbXR5cCA9PSBuX0tFRVBJTlRPVUNIKQotCSAgICAgIHNw ZGNoZygyNDAwTCk7Ci0JICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIGJyZWFrOwotCSAg Y2FzZSAyNjoKLQkgICAgaWYgKG15bWRtdHlwID09IG5fREFUQVBPUlQpCi0JICAgICAgc3BkY2hn KDE5MjAwTCk7Ci0JICAgIGVsc2UgaWYgKG15bWRtdHlwID09IG5fSU5URUwgfHwgbXltZG10eXAg PT0gbl9LRUVQSU5UT1VDSCkKLQkgICAgICBzcGRjaGcoNDgwMEwpOwotCSAgICBtZG1zdGF0ID0g Q09OTkVDVEVEOwotCSAgICBicmVhazsKLQkgIGNhc2UgMjc6Ci0JICAgIGlmIChteW1kbXR5cCA9 PSBuX0RBVEFQT1JUKQotCSAgICAgIHNwZGNoZygzODQwMEwpOwotCSAgICBlbHNlIGlmIChteW1k bXR5cCA9PSBuX0lOVEVMIHx8IG15bWRtdHlwID09IG5fS0VFUElOVE9VQ0gpCi0JICAgICAgc3Bk Y2hnKDcyMDBMKTsKLQkgICAgZWxzZSBpZiAobXltZG10eXAgPT0gbl9NSFpBVFQpCi0JICAgICAg c3BkY2hnKDg4ODBMKTsKLQkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgYnJlYWs7Ci0J ICBjYXNlIDI4OgotCSAgICBpZiAobXltZG10eXAgPT0gbl9EQVRBUE9SVCkKLQkgICAgICBzcGRj aGcoNzIwMEwpOwotCSAgICBlbHNlIGlmIChteW1kbXR5cCA9PSBuX0lOVEVMIHx8IG15bWRtdHlw ID09IG5fS0VFUElOVE9VQ0gpCi0JICAgICAgc3BkY2hnKDk2MDBMKTsKLQkgICAgZWxzZSBpZiAo bXltZG10eXAgPT0gbl9NSFpBVFQgfHwgbXltZG10eXAgPT0gbl9MVUNFTlQpCi0JICAgICAgc3Bk Y2hnKDM4NDAwTCk7Ci0JICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIGJyZWFrOwotCSAg Y2FzZSAyOToKLQkgICAgaWYgKGlzX21vdG9yb2xhKQotCSAgICAgIHNwZGNoZyg0ODAwTCk7Ci0J ICAgIGVsc2UgaWYgKG15bWRtdHlwID09IG5fREFUQVBPUlQpCi0JICAgICAgc3BkY2hnKDE5MjAw TCk7Ci0JICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSAzMDoK LQkgICAgaWYgKG15bWRtdHlwID09IG5fSU5URUwgfHwgbXltZG10eXAgPT0gbl9LRUVQSU5UT1VD SCkgewotCQlzcGRjaGcoMTQ0MDBMKTsKLQkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgfSAv KiBmYWxsIHRocnUgb24gcHVycG9zZS4uLiAqLwotCSAgY2FzZSAzMToKLQkgICAgaWYgKG15bWRt dHlwID09IG5fVUNPTV9BVCB8fCBteW1kbXR5cCA9PSBuX01JQ1JPTElOSykgewotCQlzcGRjaGco NDgwMEwpOwotCQltZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICB9IGVsc2UgaWYgKGlzX21vdG9y b2xhKSB7Ci0JCXNwZGNoZyg1NzYwMEwpOwotCQltZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICB9 Ci0JICAgIGJyZWFrOwotCSAgY2FzZSAzMjoKLQkgICAgaWYgKGlzX3JvY2t3ZWxsIHx8IGlzX3N1 cHJhIHx8IG15bWRtdHlwID09IG5fWEpBQ0spIHsKLQkJbWRtc3RhdCA9IERfRkFJTEVEOwotCQlk aWFsc3RhID0gRElBX0JMQ0s7CS8qIEJsYWNrbGlzdGVkICovCi0JICAgIH0gZWxzZSBpZiAobXlt ZG10eXAgPT0gbl9VQ09NX0FUIHx8IG15bWRtdHlwID09IG5fTUlDUk9MSU5LKSB7Ci0JCXNwZGNo Zyg5NjAwTCk7Ci0JCW1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIH0gZWxzZSBpZiAobXltZG10 eXAgPT0gbl9LRUVQSU5UT1VDSCkgewotCQlzcGRjaGcoMzAwTCk7Ci0JCW1kbXN0YXQgPSBDT05O RUNURUQ7Ci0JICAgIH0gZWxzZSBpZiAobXltZG10eXAgPT0gbl9JTlRFTCkgewotCQlzcGRjaGco MjQwMEwpOwotCQltZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICB9Ci0JICAgIGJyZWFrOwotCSAg Y2FzZSAzMzoJCQkvKiBGQVggY29ubmVjdGlvbiAqLwotCSAgICBpZiAoaXNfcm9ja3dlbGwgfHwg aXNfc3VwcmEgfHwKLQkJbXltZG10eXAgPT0gbl9aT0xUUklYIHx8IG15bWRtdHlwID09IG5fWEpB Q0spIHsKLQkJbWRtc3RhdCA9IERfRkFJTEVEOwotCQlkaWFsc3RhID0gRElBX0ZBWDsKLQkgICAg fSBlbHNlIGlmIChteW1kbXR5cCA9PSBuX1VDT01fQVQgfHwKLQkJICAgICAgIGlzX21vdG9yb2xh IHx8Ci0JCSAgICAgICBteW1kbXR5cCA9PSBuX01JQ1JPTElOSwotCQkgICAgICAgKSB7Ci0JCXNw ZGNoZyg5NjAwTCk7Ci0JCW1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIH0gZWxzZSBpZiAobXlt ZG10eXAgPT0gbl9NSFpBVFQpIHsKLQkJc3BkY2hnKDExNTIwMEwpOwotCQltZG1zdGF0ID0gQ09O TkVDVEVEOwotCSAgICB9Ci0JICAgIGJyZWFrOwotCSAgY2FzZSAzNDoKLQkgICAgaWYgKG15bWRt dHlwID09IG5fSU5URUwgfHwgbXltZG10eXAgPT0gbl9LRUVQSU5UT1VDSCkgewotCQlzcGRjaGco MTIwMEwpOwotCQltZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICB9IGVsc2UgaWYgKG15bWRtdHlw ID09IG5fTUlDUk9MSU5LKSB7Ci0JCXNwZGNoZyg3MjAwTCk7Ci0JCW1kbXN0YXQgPSBDT05ORUNU RUQ7Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0JICBjYXNlIDM1OgotCSAgICBpZiAoaXNfcm9ja3dl bGwpIHsKLQkJc3BkY2hnKDMwMEwpOwotCQlkaWFsc3RhID0gQ09OTkVDVEVEOwotCSAgICB9IGVs c2UgaWYgKGlzX21vdG9yb2xhKSB7Ci0JCXNwZGNoZygxNDQwMEwpOwotCQltZG1zdGF0ID0gQ09O TkVDVEVEOwotCSAgICB9IGVsc2UgaWYgKG15bWRtdHlwID09IG5fSU5URUwgfHwgbXltZG10eXAg PT0gbl9LRUVQSU5UT1VDSCkgewotCQlzcGRjaGcoMjQwMEwpOwotCQltZG1zdGF0ID0gQ09OTkVD VEVEOwotCSAgICB9IGVsc2UgaWYgKG15bWRtdHlwID09IG5fTUlDUk9MSU5LKSB7Ci0JCXNwZGNo Zyg3MjAwTCk7Ci0JCW1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIH0gZWxzZSBpZiAobXltZG10 eXAgPT0gbl9aT0xUUklYIHx8IG15bWRtdHlwID09IG5fWEpBQ0spIC8qIERBVEEgKi8KLQkgICAg ICBtZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICBicmVhazsKLQkgIGNhc2UgMzY6Ci0JICAgIGlm IChteW1kbXR5cCA9PSBuX1VDT01fQVQpIHsKLQkJc3BkY2hnKDE5MjAwTCk7Ci0JCW1kbXN0YXQg PSBDT05ORUNURUQ7Ci0JICAgIH0gZWxzZSBpZiAoaXNfbW90b3JvbGEpIHsKLQkJc3BkY2hnKDEy MDBMKTsKLQkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgfSBlbHNlIGlmIChteW1kbXR5cCA9 PSBuX0lOVEVMIHx8IG15bWRtdHlwID09IG5fS0VFUElOVE9VQ0gpIHsKLQkJc3BkY2hnKDQ4MDBM KTsKLQkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgfQotCSAgICBicmVhazsKLQkgIGNhc2Ug Mzc6Ci0JICAgIGlmIChteW1kbXR5cCA9PSBuX1VDT01fQVQpIHsKLQkJc3BkY2hnKDE5MjAwTCk7 Ci0JCW1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIH0gZWxzZSBpZiAoaXNfbW90b3JvbGEpIHsK LQkJc3BkY2hnKDI0MDBMKTsKLQkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgfSBlbHNlIGlm IChteW1kbXR5cCA9PSBuX0lOVEVMIHx8IG15bWRtdHlwID09IG5fS0VFUElOVE9VQ0gpIHsKLQkJ c3BkY2hnKDcyMDBMKTsKLQkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgfQotCSAgICBicmVh azsKLQkgIGNhc2UgMzg6Ci0JICAgIGlmIChpc19tb3Rvcm9sYSkgewotCQlzcGRjaGcoNDgwMEwp OwotCQltZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICB9IGVsc2UgaWYgKG15bWRtdHlwID09IG5f SU5URUwgfHwgbXltZG10eXAgPT0gbl9LRUVQSU5UT1VDSCkgewotCQlzcGRjaGcoOTYwMEwpOwot CQltZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICB9IC8qIGZhbGwgdGhydSBvbiBwdXJwb3NlLi4u ICovCi0JICBjYXNlIDM5OgotCSAgICBpZiAobXltZG10eXAgPT0gbl9VQ09NX0FUKSB7Ci0JCXNw ZGNoZygzODQwMEwpOwotCQltZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICB9IGVsc2UgaWYgKGlz X21vdG9yb2xhKSB7Ci0JCXNwZGNoZyg5NjAwTCk7Ci0JCW1kbXN0YXQgPSBDT05ORUNURUQ7Ci0J ICAgIH0gZWxzZSBpZiAobXltZG10eXAgPT0gbl9NSUNST0xJTkspIHsKLQkJc3BkY2hnKDE0NDAw TCk7Ci0JCW1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0JICBjYXNl IDQwOgotCSAgICBpZiAobXltZG10eXAgPT0gbl9VQ09NX0FUKSB7Ci0JCW1kbXN0YXQgPSBEX0ZB SUxFRDsKLQkJZGlhbHN0YSA9IERJQV9OT0NBOwotCSAgICB9IGVsc2UgaWYgKGlzX21vdG9yb2xh IHx8IG15bWRtdHlwID09IG5fSU5URUwgfHwKLQkJICAgICAgIG15bWRtdHlwID09IG5fS0VFUElO VE9VQ0gpIHsKLQkJc3BkY2hnKDE0NDAwTCk7Ci0JCW1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAg IH0KLQkgICAgYnJlYWs7Ci0JICBjYXNlIDQxOgotCSAgICBpZiAoaXNfbW90b3JvbGEpIHsKLQkJ c3BkY2hnKDE5MjAwTCk7Ci0JCW1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIH0KLQkgICAgYnJl YWs7Ci0JICBjYXNlIDQyOgotCSAgICBpZiAobXltZG10eXAgPT0gbl9LRUVQSU5UT1VDSCkgewot CQlzcGRjaGcoMzAwTCk7Ci0JCW1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIH0gZWxzZSBpZiAo aXNfbW90b3JvbGEpIHsKLQkJc3BkY2hnKDM4NDAwTCk7Ci0JCW1kbXN0YXQgPSBDT05ORUNURUQ7 Ci0JICAgIH0gLyogZmFsbCB0aHJ1IG9uIHB1cnBvc2UuLi4gKi8KLQkgIGNhc2UgNDM6Ci0JICAg IGlmIChteW1kbXR5cCA9PSBuX1VDT01fQVQpIHsKLQkJc3BkY2hnKDU3NjAwTCk7Ci0JCW1kbXN0 YXQgPSBDT05ORUNURUQ7Ci0JICAgIH0gZWxzZSBpZiAobXltZG10eXAgPT0gbl9VU1JYMikKLQkg ICAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOwkvKiAxNjgwMDAgKi8KLQkgICAgYnJlYWs7Ci0JICBj YXNlIDQ0OgotCSAgICBpZiAoaXNfcm9ja3dlbGwpIHsKLQkJc3BkY2hnKDg4MDBMKTsKLQkJZGlh bHN0YSA9IENPTk5FQ1RFRDsKLQkgICAgfSBlbHNlIGlmIChpc19tb3Rvcm9sYSkgewotCQlzcGRj aGcoNzIwMEwpOwotCQltZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICB9IGVsc2UgaWYgKG15bWRt dHlwID09IG5fSU5URUwgfHwgbXltZG10eXAgPT0gbl9LRUVQSU5UT1VDSCkgewotCQlzcGRjaGco MTIwMEwpOwotCQltZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICB9Ci0JICAgIGJyZWFrOwotCSAg Y2FzZSA0NToKLQkgICAgaWYgKGlzX21vdG9yb2xhKSB7Ci0JCXNwZGNoZyg1NzYwMEwpOwotCQlt ZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICB9IGVsc2UgaWYgKG15bWRtdHlwID09IG5fSU5URUwg fHwgbXltZG10eXAgPT0gbl9LRUVQSU5UT1VDSCkgewotCQlzcGRjaGcoMjQwMEwpOwotCQltZG1z dGF0ID0gQ09OTkVDVEVEOwotCSAgICB9IGVsc2UgaWYgKG5fVVNSKSB7Ci0JCXNwZGNoZygxNDQw MEwpOwotCQltZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICB9Ci0JICAgIGJyZWFrOwotCSAgY2Fz ZSA0NjoKLQkgICAgaWYgKGlzX3JvY2t3ZWxsKQotCSAgICAgIHNwZGNoZygxMjAwTCk7Ci0JICAg IGVsc2UgaWYgKG15bWRtdHlwID09IG5fSU5URUwgfHwgbXltZG10eXAgPT0gbl9LRUVQSU5UT1VD SCkKLQkgICAgICBzcGRjaGcoNDgwMEwpOwotCSAgICBlbHNlCi0JICAgICAgc3BkY2hnKDg4ODBM KTsJCS8qIDc1LzEyMDAgc3BsaXQgc3BlZWQgKi8KLQkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsK LQkgICAgYnJlYWs7Ci0JICBjYXNlIDQ3OgotCSAgICBpZiAoaXNfcm9ja3dlbGwpCi0JICAgICAg c3BkY2hnKDI0MDBMKTsKLQkgICAgZWxzZSBpZiAobXltZG10eXAgPT0gbl9JTlRFTCB8fCBteW1k bXR5cCA9PSBuX0tFRVBJTlRPVUNIKQotCSAgICAgIHNwZGNoZyg3MjAwTCk7Ci0JICAgIGVsc2UK LQkgICAgICBwcmludGYoIkNPTk5FQ1QgMTIwMC83NSAtIE5vdCBzdXBwb3J0ZWQgYnkgQy1LZXJt aXRcclxuIik7Ci0JICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIGJyZWFrOwotCSAgY2Fz ZSA0ODoKLQkgICAgaWYgKGlzX3JvY2t3ZWxsKQotCSAgICAgIHNwZGNoZyg0ODAwTCk7Ci0JICAg IGVsc2UgaWYgKG15bWRtdHlwID09IG5fSU5URUwgfHwgbXltZG10eXAgPT0gbl9LRUVQSU5UT1VD SCkKLQkgICAgICBzcGRjaGcoOTYwMEwpOwotCSAgICBlbHNlCi0JICAgICAgc3BkY2hnKDcyMDBM KTsKLQkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIDQ5Ogot CSAgICBpZiAoaXNfcm9ja3dlbGwpCi0JICAgICAgc3BkY2hnKDcyMDBMKTsKLQkgICAgbWRtc3Rh dCA9IENPTk5FQ1RFRDsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIDUwOgkJCS8qIENPTk5FQ1QgRkFT VCAqLwotCSAgICBpZiAoaXNfcm9ja3dlbGwpCi0JICAgICAgc3BkY2hnKDk2MDBMKTsKLQkgICAg ZWxzZSBpZiAobXltZG10eXAgPT0gbl9JTlRFTCB8fCBteW1kbXR5cCA9PSBuX0tFRVBJTlRPVUNI KQotCSAgICAgIHNwZGNoZygxNDQwMEwpOwotCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAg ICBicmVhazsKLQkgIGNhc2UgNTE6Ci0JICAgIGlmIChteW1kbXR5cCA9PSBuX1VDT01fQVQpIHsK LQkJbWRtc3RhdCA9IERfRkFJTEVEOwotCQlkaWFsc3RhID0gRElBX05PRFQ7Ci0JICAgIH0KLQkg ICAgYnJlYWs7Ci0JICBjYXNlIDUyOgkJCS8qIFJSSU5HICovCi0JICAgIGlmIChteW1kbXR5cCA9 PSBuX1RFTEVCSVQpCi0JICAgICAgaWYgKGRpYWxkcHkpIHByaW50ZigiIFJpbmdpbmcuLi5cclxu Iik7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSA1MzoJCQkvKiBESUFMSU5HICovCi0JICAgIGlmICht eW1kbXR5cCA9PSBuX1RFTEVCSVQpCi0JICAgICAgaWYgKGRpYWxkcHkpIHByaW50ZigiIERpYWxp bmcuLi5cclxuIik7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSA1NDoKLQkgICAgaWYgKGlzX3JvY2t3 ZWxsKSB7Ci0JCXNwZGNoZygxOTIwMEwpOwotCQltZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICB9 IGVsc2UgaWYgKG15bWRtdHlwID09IG5fSU5URUwgfHwgbXltZG10eXAgPT0gbl9LRUVQSU5UT1VD SCkgewotCQlzcGRjaGcoMTIwMEwpOwotCQltZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICB9IGVs c2UgaWYgKG15bWRtdHlwID09IG5fVEVMRUJJVCkgewotCQlpZiAoZGlhbGRweSkgcHJpbnRmKCJc clxuIE5vIFByb21wdHRvbmUuXHJcbiIpOwotCQltZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JCWRpYWxz dGEgPSBESUFfTk9EVDsKLQkgICAgfQotCSAgICBicmVhazsKLQkgIGNhc2UgNTU6Ci0JICAgIGlm IChteW1kbXR5cCA9PSBuX0lOVEVMIHx8IG15bWRtdHlwID09IG5fS0VFUElOVE9VQ0gpIHsKLQkJ c3BkY2hnKDI0MDBMKTsKLQkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgfQotCSAgICBicmVh azsKLQkgIGNhc2UgNTY6Ci0JICAgIGlmIChteW1kbXR5cCA9PSBuX0lOVEVMIHx8IG15bWRtdHlw ID09IG5fS0VFUElOVE9VQ0gpIHsKLQkJc3BkY2hnKDQ4MDBMKTsKLQkJbWRtc3RhdCA9IENPTk5F Q1RFRDsKLQkgICAgfQotCSAgICBicmVhazsKLQkgIGNhc2UgNTc6Ci0JICAgIGlmIChteW1kbXR5 cCA9PSBuX0lOVEVMIHx8IG15bWRtdHlwID09IG5fS0VFUElOVE9VQ0gpIHsKLQkJc3BkY2hnKDcy MDBMKTsKLQkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgfQotCSAgICBicmVhazsKLQkgIGNh c2UgNTg6Ci0JICAgIGlmIChteW1kbXR5cCA9PSBuX0lOVEVMIHx8IG15bWRtdHlwID09IG5fS0VF UElOVE9VQ0gpIHsKLQkJc3BkY2hnKDk2MDBMKTsKLQkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkg ICAgfQotCSAgICBicmVhazsKLQkgIGNhc2UgNTk6Ci0JICAgIGlmIChteW1kbXR5cCA9PSBuX0lO VEVMKQkvKiAxMjAwMCAqLwotCSAgICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIGJyZWFr OwotCSAgY2FzZSA2MDoKLQkgICAgaWYgKG15bWRtdHlwID09IG5fSU5URUwgfHwgbXltZG10eXAg PT0gbl9LRUVQSU5UT1VDSCkgewotCQlzcGRjaGcoMTQ0MDBMKTsKLQkJbWRtc3RhdCA9IENPTk5F Q1RFRDsKLQkgICAgfQotCSAgICBicmVhazsKLQkgIGNhc2UgNjQ6Ci0JICAgIGlmIChteW1kbXR5 cCA9PSBuX0lOVEVMKSB7Ci0JCXNwZGNoZygxMjAwTCk7Ci0JCW1kbXN0YXQgPSBDT05ORUNURUQ7 Ci0JICAgIH0gZWxzZSBpZiAoaXNfc3VwcmEpIHsKLQkJc3BkY2hnKDI4ODAwTCk7Ci0JCW1kbXN0 YXQgPSBDT05ORUNURUQ7Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0JICBjYXNlIDY1OgotCSAgICBp ZiAobXltZG10eXAgPT0gbl9JTlRFTCB8fCBteW1kbXR5cCA9PSBuX0tFRVBJTlRPVUNIKSB7Ci0J CXNwZGNoZygyNDAwTCk7Ci0JCW1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIH0KLQkgICAgYnJl YWs7Ci0JICBjYXNlIDY2OgotCSAgICBpZiAobXltZG10eXAgPT0gbl9JTlRFTCB8fCBteW1kbXR5 cCA9PSBuX0tFRVBJTlRPVUNIKSB7Ci0JCXNwZGNoZyg0ODAwTCk7Ci0JCW1kbXN0YXQgPSBDT05O RUNURUQ7Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0JICBjYXNlIDY3OgotCSAgICBpZiAobXltZG10 eXAgPT0gbl9JTlRFTCB8fCBteW1kbXR5cCA9PSBuX0tFRVBJTlRPVUNIKSB7Ci0JCXNwZGNoZyg3 MjAwTCk7Ci0JCW1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0JICBj YXNlIDY4OgotCSAgICBpZiAobXltZG10eXAgPT0gbl9JTlRFTCB8fCBteW1kbXR5cCA9PSBuX0tF RVBJTlRPVUNIKSB7Ci0JCXNwZGNoZyg5NjAwTCk7Ci0JCW1kbXN0YXQgPSBDT05ORUNURUQ7Ci0J ICAgIH0KLQkgICAgYnJlYWs7Ci0JICBjYXNlIDY5OgotCSAgICBpZiAobXltZG10eXAgPT0gbl9J TlRFTCB8fCBteW1kbXR5cCA9PSBuX0tFRVBJTlRPVUNIKSAvKiAxMjAwMCAqLwotCSAgICAgIG1k bXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSA3MDoKLQkgICAgaWYgKG15 bWRtdHlwID09IG5fSU5URUwgfHwgbXltZG10eXAgPT0gbl9LRUVQSU5UT1VDSCkgewotCQlzcGRj aGcoMTQ0MDBMKTsKLQkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgfQotCSAgICBicmVhazsK LQkgIGNhc2UgNzM6Ci0JICAgIGlmIChteW1kbXR5cCA9PSBuX1VDT01fQVQpIHsKLQkJc3BkY2hn KDExNTIwMEwpOwotCQltZG1zdGF0ID0gQ09OTkVDVEVEOwotCQlicmVhazsKLQkgICAgfSAvKiBl bHNlIGZhbGwgdGhydSAqLwotCSAgICBpZiAobXltZG10eXAgPT0gbl9URUxFQklUKQkvKiBFYXJs eSBtb2RlbHMgb25seSAqLwotCSAgICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JICAgIGJyZWFr OwotCSAgY2FzZSA4NToKLQkgICAgaWYgKG15bWRtdHlwID09IG5fVVNSIHx8IG15bWRtdHlwID09 IG5fVVNSWDIpCi0JICAgICAgc3BkY2hnKDE5MjAwTCk7Ci0JICAgIG1kbXN0YXQgPSBDT05ORUNU RUQ7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSA5MToJCQkvKiAyMTYwMCAqLwotCSAgY2FzZSA5OToJ CQkvKiAyNDAwMCAqLwotCSAgY2FzZSAxMDM6CQkJLyogMjY0MDAgKi8KLQkgICAgaWYgKG15bWRt dHlwID09IG5fVVNSWDIpCi0JICAgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKLQkgICAgYnJlYWs7 Ci0JICBjYXNlIDEwNzoKLQkgICAgaWYgKG15bWRtdHlwID09IG5fVVNSIHx8IG15bWRtdHlwID09 IG5fVVNSWDIpIHsKLQkJc3BkY2hnKDI4ODAwTCk7Ci0JCW1kbXN0YXQgPSBDT05ORUNURUQ7Ci0J ICAgIH0KLQkgICAgYnJlYWs7Ci0JICBjYXNlIDE1MToJCQkvKiAzMTIwMDAgKi8KLQkgIGNhc2Ug MTU1OgkJCS8qIDMzNjAwMCAqLwotCSAgICBpZiAobXltZG10eXAgPT0gbl9VU1JYMikKLQkgICAg ICBtZG1zdGF0ID0gQ09OTkVDVEVEOwotCSAgICBicmVhazsKLQotI2VuZGlmIC8qIE1JTklESUFM ICovCi0JICBkZWZhdWx0OgotI2lmbmRlZiBNSU5JRElBTAotCSAgICBpZiAobXltZG10eXAgPT0g bl9VU1IgfHwgbXltZG10eXAgPT0gbl9VU1JYMiB8fAotCQlpc19oYXllc2hpc3BkIHx8IGlzX3Jv Y2t3ZWxsKQotI2VuZGlmIC8qIE1JTklESUFMICovCi0JICAgICAgaWYgKGkgPiAxMikJCS8qIFRo ZXJlIGFyZSBodW5kcmVkcyBvZiB0aGVtLi4uICovCi0JCW1kbXN0YXQgPSBDT05ORUNURUQ7Ci0J ICAgIGJyZWFrOwotCX0KLSAgICB9Ci0gICAgaWYgKG1kbXN0YXQgPT0gQ09OTkVDVEVEICYmIG5i dWZbal0gIT0gJ1wwJykgewotCWlmIChkaWFsZHB5KSB7Ci0JICAgIHByaW50ZigiXHJcbiIpOwot CSAgICBpZiAobmJ1ZltqXSA9PSAnUicpIHByaW50ZigiIFJFTElBQkxFIik7Ci0JICAgIGlmIChu YnVmW2pdID09ICdMJykgcHJpbnRmKCIgTEFQTSIpOwotCSAgICBpZiAobmJ1ZltqKzFdID09ICdD JykgcHJpbnRmKCIgQ09NUFJFU1NFRCIpOwotCSAgICBwcmludGYoIlxyXG4iKTsKLQl9Ci0JY2tz dHJuY3B5KGxidWYsbmJ1ZixMQlVGTCk7CQkvKiAoZm9yIG1lc3NhZ2VzLi4uKSAqLwotICAgIH0K LX0KLQotc3RhdGljIFZPSUQJCQkJLyogR2V0IEhheWVzIFJlc3VsdCBpbiBXb3JkIG1vZGUgKi8K LWdldGhydygpIHsKLSAgICBjaGFyICpjcHRyLCAqczsKLSAgICBsb25nIGNvbnNwZDsKLQotICAg IGlmIChtZG1zcGQgJiYgIW5ldHdvcmspIHsKLQlzID0gbGJ1ZjsKLQl3aGlsZSAoKnMgIT0gJ1ww JyAmJiAqcyAhPSAnQycpIHMrKzsKLQljcHRyID0gKCpzID09ICdDJykgPyBzIDogTlVMTDsKLQlj b25zcGQgPSAwTDsKLQlpZiAoKGNwdHIgIT0gTlVMTCkgJiYgIXN0cm5jbXAoY3B0ciwiQ09OTkVD VCAiLDgpKSB7Ci0JICAgIGlmICgoaW50KXN0cmxlbihjcHRyKSA8IDkpICAgLyogSnVzdCBDT05O RUNULCAqLwotCSAgICAgIGNvbnNwZCA9IDMwMEw7CQkgLyogdXNlIDMwMCBicHMgKi8KLQkgICAg ZWxzZSBpZiAoaXNkaWdpdCgqKGNwdHIrOCkpKSAvKiBub3QgQ09OTkVDVCBGQVNUICovCi0JICAg ICAgY29uc3BkID0gYXRvbChjcHRyICsgOCk7ICAgLyogQ09OTkVDVCBubm5uICovCi0JICAgIGlm IChjb25zcGQgIT0gc3BlZWQpIHsKLQkJaWYgKChjb25zcGQgLyAxMEwpID4gMCkgewotCQkgICAg aWYgKHR0c3NwZCgoaW50KSAoY29uc3BkIC8gMTBMKSkgPCAwKSB7Ci0JCQlwcmludGYoIiBDYW4n dCBjaGFuZ2Ugc3BlZWQgdG8gJWxkXHJcbiIsCi0JCQkgICAgICAgY29uc3BkKTsKLQkJICAgIH0g ZWxzZSB7Ci0JCQlzcGVlZCA9IGNvbnNwZDsKLQkJCW1kbXN0YXQgPSBDT05ORUNURUQ7Ci0JCQlp ZiAoICFxdWlldCAmJiAhYmFja2dyZCApCi0JCQkgIHByaW50ZigiIFNwZWVkIGNoYW5nZWQgdG8g JWxkXHJcbiIsCi0JCQkJIGNvbnNwZCk7Ci0JCSAgICB9Ci0JCX0KLQkgICAgfSAvKiBFeHBhbmRl ZCB0byBoYW5kbGUgYW55IGNvbmNlaXZhYmxlIHNwZWVkICovCi0JfQotICAgIH0KLSNpZm5kZWYg TUlOSURJQUwKLSAgICBpZiAobXltZG10eXAgPT0gbl9URUxFQklUKSB7Ci0JaWYgKGRpZHdlZ2V0 KGxidWYsIkNPTk5FQ1QgRkFTVC9LRVJNIikpIHsKLQkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsK LQkgICAgaWYgKGRpYWxkcHkpIHByaW50ZigiRkFTVC9LRVJNICIpOwotCSAgICByZXR1cm47Ci0J fQotICAgIH0KLSNlbmRpZiAvKiBNSU5JRElBTCAqLwotICAgIGlmIChkaWR3ZWdldChsYnVmLCJS UklORyIpIHx8Ci0JZGlkd2VnZXQobGJ1ZiwiUklOR0lORyIpIHx8Ci0JZGlkd2VnZXQobGJ1Ziwi RElBTElORyIpKSB7Ci0JbWRtc3RhdCA9IDA7Ci0gICAgfSBlbHNlIGlmIChkaWR3ZWdldChsYnVm LCJDT05ORUNUIikpIHsKLQltZG1zdGF0ID0gQ09OTkVDVEVEOwotICAgIH0gZWxzZSBpZiAoZGlk d2VnZXQobGJ1ZiwiT0siKSkgewotCWlmIChwYXJ0aWFsKSB7Ci0JICAgIG1kbXN0YXQgPSBEX1BB UlRJQUw7Ci0JfSBlbHNlIHsKLQkgICAgbWRtc3RhdCA9IERfRkFJTEVEOwotCSAgICBkaWFsc3Rh ID0gRElBX0VSUjsKLQl9Ci0gICAgfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJOTyBDQVJSSUVS IikpIHsKLQltZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JZGlhbHN0YSA9IERJQV9OT0NBOwotICAgIH0g ZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiTk8gRElBTFRPTkUiKSkgewotCW1kbXN0YXQgPSBEX0ZB SUxFRDsKLQlkaWFsc3RhID0gRElBX05PRFQ7Ci0gICAgfSBlbHNlIGlmIChkaWR3ZWdldChsYnVm LCJOTyBESUFMIFRPTkUiKSkgewotCW1kbXN0YXQgPSBEX0ZBSUxFRDsKLQlkaWFsc3RhID0gRElB X05PRFQ7Ci0gICAgfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJCVVNZIikpIHsKLQltZG1zdGF0 ID0gRF9GQUlMRUQ7Ci0JZGlhbHN0YSA9IERJQV9CVVNZOwotICAgIH0gZWxzZSBpZiAoZGlkd2Vn ZXQobGJ1ZiwiTk8gQU5TV0VSIikpIHsKLQltZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JZGlhbHN0YSA9 IERJQV9OT0FOOwotICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiVk9JQ0UiKSkgewotCW1k bXN0YXQgPSBEX0ZBSUxFRDsKLQlkaWFsc3RhID0gRElBX1ZPSUM7Ci0gICAgfSBlbHNlIGlmIChk aWR3ZWdldChsYnVmLCJWQ09OIikpIHsKLQltZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JZGlhbHN0YSA9 IERJQV9WT0lDOwotICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiTk8gUFJPTVBUIFRPTkUi KSkgewotCW1kbXN0YXQgPSBEX0ZBSUxFRDsKLQlkaWFsc3RhID0gRElBX05PRFQ7Ci0gICAgfSBl bHNlIGlmIChkaWR3ZWdldChsYnVmLCJSRU1PVEUgQUNDRVNTIEZBSUxFRCIpKSB7Ci0JbWRtc3Rh dCA9IERfRkFJTEVEOwotCWRpYWxzdGEgPSBESUFfTk9DQTsKLSAgICB9IGVsc2UgaWYgKGRpZHdl Z2V0KGxidWYsIkZBWCIpKSB7Ci0JbWRtc3RhdCA9IERfRkFJTEVEOwotCWRpYWxzdGEgPSBESUFf RkFYOwotICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiV0FJVCAtIENPTk5FQ1RJTkciKSB8 fAotCSAgICAgICBkaWR3ZWdldChsYnVmLCJXQUlULUNPTk5FQ1RJTkciKSkgeyAvKiBBVCZUIFNU VS1JSUkgMTl4eCAqLwotCW1kbXN0YXQgPSAwOwotICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1 ZiwiREVMQVlFRCIpKSB7Ci0JbWRtc3RhdCA9IERfRkFJTEVEOwotCWRpYWxzdGEgPSBESUFfREVM QTsKLSAgICB9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkJMQUNLTElTVEVEIikpIHsKLQltZG1z dGF0ID0gRF9GQUlMRUQ7Ci0JZGlhbHN0YSA9IERJQV9CTENLOwotICAgIH0gZWxzZSBpZiAoZGlk d2VnZXQobGJ1ZiwiQ09NUFJFU1NJT04iKSkgewotCW1kbXN0YXQgPSAwOwotICAgIH0gZWxzZSBp ZiAoZGlkd2VnZXQobGJ1ZiwiUFJPVE9DT0wiKSkgewotCW1kbXN0YXQgPSAwOwotICAgIH0gZWxz ZSBpZiAoZGlkd2VnZXQobGJ1ZiwiRElBTCBMT0NLRUQiKSkgeyAvKiBHZXJtYW55LCBBdXN0cmlh LCBTY2h3ZWl6ICovCi0JbWRtc3RhdCA9IERfRkFJTEVEOwotCWRpYWxzdGEgPSBESUFfQkxDSzsK LSAgICB9IGVsc2UgaWYgKCBkaWR3ZWdldChsYnVmLCJSSU5HIikgfHwKLQkgICAgICAgIGRpZHdl Z2V0KGxidWYsIlJJTkcxIikgfHwgLyogRGlzdGluY3RpdmUgUmluZyAxICovCi0JCWRpZHdlZ2V0 KGxidWYsIlJJTkcyIikgfHwgLyogRGlzdGluY3RpdmUgUmluZyAyICovCi0JCWRpZHdlZ2V0KGxi dWYsIlJJTkczIikgKSB7Ci0JbWRtc3RhdCA9IChmdW5jX2NvZGUgPT0gMCkgPyBEX0ZBSUxFRCA6 IDA7Ci0JZGlhbHN0YSA9IERJQV9SSU5HOwotICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1Ziwi RVJST1IiKSkgewotCW1kbXN0YXQgPSBEX0ZBSUxFRDsKLQlkaWFsc3RhID0gRElBX0VSUjsKLSAg ICB9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkNBUlJJRVIiKSkgeyAvKiBCb2NhIC8gUm9ja3dl bGwgZmFtaWx5ICovCi0jaWZkZWYgQ09NTUVOVAotCWlmIChpc19yb2Nrd2VsbCkKLSNlbmRpZiAv KiBDT01NRU5UICovCi0JICBtZG1zdGF0ID0gMDsKLSNpZmRlZiBDT01NRU5UCi0JLyogRG9lcyBD QVJSSUVSIGV2ZXIgbWVhbiB0aGUgc2FtZSBhcyBDT05ORUNUPyAqLwotCWVsc2UKLQkgIG1kbXN0 YXQgPSBDT05ORUNURUQ7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIH0gZWxzZSBpZiAoZGlk d2VnZXQobGJ1ZiwiREFUQSIpKSB7CS8qIEJvY2EgLyBSb2Nrd2VsbCBmYW1pbHkgKi8KLQkvKiBU aGlzIG1lc3NhZ2UgaXMgc2VudCB3aGVuIHRoZSBtb2RlbSBpcyBpbiBGQVggbW9kZSAgKi8KLQkv KiBTbyBzZXR0aW5nIHRoaXMgdG8gQ09OTkVDVEVEIG1heSBub3QgYmUgYXBwcm9wcmlhdGUgKi8K LQkvKiBXZSBtdXN0IHNlbmQgQVRPXDAxNSB0byB0aGUgbW9kZW0gaW4gcmVzcG9uc2UgICAgICAg Ki8KLQkvKiBUaGVuIHdlIHdpbGwgZ2V0IGEgQ09OTkVDVEVEIG1lc3NhZ2UgICAgICAgICAgICAg ICAgKi8KLQltZG1zdGF0ID0gQ09OTkVDVEVEOwotICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1 ZiwiRElHSVRBTCBMSU5FIikpIHsKLQltZG1zdGF0ID0gRF9GQUlMRUQ7Ci0JZGlhbHN0YSA9IERJ QV9ESUdJOwotICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiREFURSIpKSB7IC8qIENhbGxl ciBJRCBEYXRlICovCi0JZGVidWcoRjExMCwiQ0FMTElEIERBVEUiLGxidWYsMCk7Ci0JLyogRm9y bWF0IGlzICJEQVRFICAgICA9ICAgTU1ERCIgICAqLwotCW1ha2VzdHIoJmNhbGxpZF9kYXRlLGxi dWYpOwotICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiVElNRSIpKSB7IC8qIENhbGxlciBJ RCBUaW1lICovCi0JLyogRm9ybWF0IGlzICJUSU1FICAgICA9ICAgSEhNTSIgICAqLwotCWRlYnVn KEYxMTAsIkNBTExJRCBUSU1FIixsYnVmLDApOwotCW1ha2VzdHIoJmNhbGxpZF90aW1lLGxidWYp OwotICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiTkFNRSIpKSB7IC8qIENhbGxlciBJRCBO YW1lICovCi0JLyogRm9ybWF0IGlzICJOQU1FICAgICA9ICAgPGxpc3RpbmcgbmFtZT4iICAgKi8K LQlkZWJ1ZyhGMTEwLCJDQUxMSUQgTkFNRSIsbGJ1ZiwwKTsKLQltYWtlc3RyKCZjYWxsaWRfbmFt ZSxsYnVmKTsKLSAgICB9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIk5NQlIiKSkgeyAvKiBDYWxs ZXIgSUQgTnVtYmVyICovCi0JLyogRm9ybWF0IGlzICJOTUJSICAgICA9ICAgPG51bWJlcj4sICdQ JyBvciAnTyciICAgKi8KLQkvKiAJJ1AnIG1lYW5zIFByaXZhY3kgUmVxdWVzdGVkIAkJICAgKi8K LQkvKiAgICAgICdPJyBtZWFucyBPdXQgb2YgU2VydmljZSBvciBOb3QgYXZhaWxhYmxlICAqLwot CWRlYnVnKEYxMTAsIkNBTExJRCBOTUJSIixsYnVmLDApOwotCW1ha2VzdHIoJmNhbGxpZF9ubWJy LGxidWYpOwotICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiTUVTRyIpKSB7IC8qIENhbGxl ciBJRCBVbnJlY29nbml6ZWQgTWVzc2FnZSAqLwotCS8qIEZvcm1hdCBpcyAiTUVTRyAgICAgPSAg IDx0YWc+PGxlbmd0aD48ZGF0YT48Y2hlY2tzdW0+IiAgICovCi0JZGVidWcoRjExMCwiQ0FMTElE IE1FU0ciLGxidWYsMCk7Ci0JbWFrZXN0cigmY2FsbGlkX21lc2csbGJ1Zik7Ci0gICAgfQotfQot Ci0vKiBNYXliZSBoYW5nIHVwIHRoZSBwaG9uZSwgZGVwZW5kaW5nIG9uIHZhcmlvdXMgU0VUIERJ QUwgcGFyYW1ldGVycy4gKi8KLQotaW50Ci1kaWFsaHVwKCkgewotICAgIGludCB4ID0gMDsKLSAg ICBpZiAoZGlhbGhuZyAmJiBkaWFsc3RhICE9IERJQV9QQVJUKSB7IC8qIERJQUwgSEFOR1VQIE9O PyAqLwotCXggPSBtZG1odXAoKTsJCQkvKiBUcnkgbW9kZW0tc3BlY2lmaWMgbWV0aG9kIGZpcnN0 ICovCi0JZGVidWcoRjEwMSwiZGlhbGh1cCBtZG1odXAiLCIiLHgpOwotCWlmICh4ID4gMCkgewkJ CS8qIElmIGl0IHdvcmtlZCwgKi8KLQkgICAgZGlhbHN0YSA9IERJQV9IVVA7Ci0JICAgIGlmIChk aWFsZHB5KQotCSAgICAgIHByaW50ZigiIE1vZGVtIGhhbmd1cCBPS1xyXG4iKTsgLyogZmluZS4g Ki8KLQl9IGVsc2UgaWYgKG5ldHdvcmsJCS8qIElmIHdlJ3JlIHRlbG5ldHRlZCB0byAqLwotI2lm ZGVmIFROX0NPTVBPUlQKLSAgICAgICAgICAgICAgICAgICAmJiAhaXN0bmNvbXBvcnQoKSAgICAv KiAod2l0aG91dCBSRkMgMjIxNykgICAgKi8KLSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0gICAg ICAgICAgICAgICAgICAgKSB7CQkKLQkgICAgZGlhbHN0YSA9IERJQV9IQU5HOwotCSAgICBpZiAo ZGlhbGRweSkJCS8qIGEgbW9kZW0gc2VydmVyLCBqdXN0IHByaW50IGEgbXNnICovCi0JICAgICAg cHJpbnRmKCIgV0FSTklORyAtIG1vZGVtIGhhbmd1cCBmYWlsZWRcclxuIik7IC8qIGRvbid0IGhh bmd1cCEgKi8KLQkgICAgcmV0dXJuKDApOwotCX0gZWxzZSB7CQkJLyogT3RoZXJ3aXNlICovCi0J ICAgIHggPSB0dGhhbmcoKTsJCS8qIFRlbGwgdGhlIE9TIHRvIHR1cm4gb2ZmIERUUi4gKi8KLQkg ICAgaWYgKHggPiAwKSB7CQkvKiBZZXMsIHRlbGwgcmVzdWx0cyBmcm9tIHR0aGFuZygpICovCi0J CWRpYWxzdGEgPSBESUFfSFVQOwotCQlpZiAoZGlhbGRweSkgcHJpbnRmKCIgSGFuZ3VwIE9LXHJc biIpOwotCSAgICB9IGVsc2UgaWYgKHggPT0gMCkgewotCQlpZiAoZGlhbGRweSkgcHJpbnRmKCIg SGFuZ3VwIHNraXBwZWRcclxuIik7Ci0JICAgIH0gZWxzZSB7Ci0JCWRpYWxzdGEgPSBESUFfSEFO RzsKLQkJaWYgKGRpYWxkcHkpIHBlcnJvcigiIEhhbmd1cCBlcnJvciIpOwotCSAgICB9Ci0JICAg IHR0Zmx1aSgpOwotCX0KLSAgICB9IGVsc2UgaWYgKGRpYWxkcHkpIHByaW50ZigiIEhhbmd1cCBz a2lwcGVkXHJcbiIpOyAvKiBESUFMIEhBTkdVUCBPRkYgKi8KLSAgICByZXR1cm4oeCk7Ci19Ci0K LS8qCi0gIE0gRCBNIEggVSBQICAtLQotCi0gIFNlbmRzIGVzY2FwZSBzZXF1ZW5jZSB0byBtb2Rl bSwgdGhlbiBzZW5kcyBpdHMgaGFuZ3VwIGNvbW1hbmQuICBSZXR1cm5zOgotICAgMDogSWYgbW9k ZW0gdHlwZSBpcyAwIChkaXJlY3Qgc2VyaWFsIGNvbm5lY3Rpb24pLAotICAgICAgb3IgaWYgbW9k ZW0gdHlwZSBpcyA8IDAgKG5ldHdvcmsgY29ubmVjdGlvbiksCi0gICAgICBvciBpZiBubyBhY3Rp b24gdGFrZW4gYmVjYXVzZSBESUFMIE1PREVNLUhBTkdVUCBpcyBPRkYpCi0gICAgICAgIG9yIGJl Y2F1c2Ugbm8gaGFuZ3VwIHN0cmluZyBmb3IgY3VycmVudCBtb2RlbSB0eXBlLAotICAgICAgb3Ig Qy1LZXJtaXQgaXMgaW4gcmVtb3RlIG1vZGUsCi0gICAgICBvciBpZiBhY3Rpb24gdGFrZW4gYnV0 IHRoZXJlIHdhcyBubyBwb3NpdGl2ZSByZXNwb25zZSBmcm9tIG1vZGVtOwotICAgMTogU3VjY2Vz czogbW9kZW0gaXMgaW4gY29tbWFuZCBzdGF0ZSBhbmQgYWNrbm93bGVkZ2VkIHRoZSBoYW5ndXAg Y29tbWFuZDsKLSAgLTE6IE9uIG1vZGVtIGNvbW1hbmQgZXJyb3IuCi0qLwotaW50Ci1tZG1odXAo KSB7Ci0jaWZkZWYgTURNSFVQCi0gICAgaW50IG0sIHggPSAwOwotICAgIGludCB4cGFyaXR5Owot ICAgIGludCBzYXZjYXJyOwotICAgIGV4dGVybiBpbnQgdHRjYXJyOwotICAgIGNoYXIgKnMsICpw LCBjOwotICAgIE1ETUlORiAqIG1wID0gTlVMTDsKLQotICAgIGRlYnVnKEYxMDEsIm1kbWh1cCBk aWFsbWh1IiwiIixkaWFsbWh1KTsgLyogTU9ERU0tSEFOR1VQIE1FVEhPRCAqLwotICAgIGRlYnVn KEYxMDEsIm1kbWh1cCBsb2NhbCIsIiIsbG9jYWwpOwotCi0gICAgaWYgKGRpYWxtaHUgPT0gMCB8 fCBsb2NhbCA9PSAwKQkvKiBJZiBESUFMIE1PREVNLUhBTkdVUCBpcyBPRkYsICovCi0gICAgICBy ZXR1cm4oMCk7CQkJLyogIG9yIG5vdCBpbiBsb2NhbCBtb2RlLCBmYWlsLiAqLwotCi0gICAgZGVi dWcoRjEwMSwibWRtaHVwIGRpYWxzdGEiLCIiLGRpYWxzdGEpOwotICAgIGRlYnVnKEYxMDEsIm1k bWh1cCBtZG1zZXQiLCIiLG1kbXNldCk7Ci0KLSAgICBpZiAoZGlhbHN0YSAhPSBESUFfT0sgJiYg IW1kbXNldCkJLyogSXQncyBub3QgYSBkaWFsZWQgY29ubmVjdGlvbiAqLwotICAgICAgcmV0dXJu KDApOwotCi0jaWZkZWYgQ0tfVEFQSQotICAgIGlmICh0dHRhcGkgJiYgIXRhcGlwYXNzKQkJLyog RG9uJ3QgaGFuZ3VwIGlmIHVzaW5nIFRBUEkgKi8KLSAgICAgIHJldHVybigwKTsKLSNlbmRpZiAv KiBDS19UQVBJICovCi0KLSNpZmRlZiBDT01NRU5UCi0gICAgLyogTm8sIHdlIHN0aWxsIG5lZWQg dGhpcyBmb3IgbW9kZW1zIHRoYXQgaWdub3JlIERUUiAqLwotICAgIGlmIChteW1kbXR5cCA9PSBu X0dFTkVSSUMgJiYgIW5ldHdvcmspCi0gICAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogQ09NTUVO VCAqLwotCi0gICAgZGVidWcoRjEwMSwibWRtaHVwIGRpYWxlc2MiLCIiLGRpYWxlc2MpOwotICAg IGlmIChkaWFsZXNjIDwgMCkKLSAgICAgIHJldHVybigwKTsJCQkvKiBObyBtb2RlbSBlc2NhcGUt Y2hhcmFjdGVyLCBmYWlsLiAqLwotCi0gICAgc2F2Y2FyciA9IHR0Y2FycjsKLSAgICB0dGNhcnIg PSBDQVJfT0ZGOwotICAgIHggPSB0dGNoaygpOwotICAgIHR0Y2FyciA9IHNhdmNhcnI7Ci0gICAg ZGVidWcoRjEwMSwibWRtaHVwIHR0Y2hrIiwiIix4KTsKLSAgICBpZiAoeCA8IDApCQkJCS8qIFRo ZXJlIGFwcGVhcnMgdG8gYmUgbm8gY29ubmVjdGlvbiAqLwotICAgICAgcmV0dXJuKDApOwotICAg IHggPSAwOwotCi0jaWZkZWYgT1MyCi0vKgotICBJbiBPUy8yLCBpZiBDQVJSSUVSIGlzIE9GRiwg YW5kIHRoZXJlIGlzIGluZGVlZCBubyBjYXJyaWVyIHNpZ25hbCwgYW55Ci0gIGF0dGVtcHQgdG8g ZG8gaS9vIGF0IHRoaXMgcG9pbnQgY2FuIGhhbmcgdGhlIHByb2dyYW0uICBUaGlzIG1pZ2h0IGJl IHRydWUKLSAgZm9yIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zIHRvby4KLSovCi0gICAgaWYgKCFu ZXR3b3JrCQkJLyogTm90IGEgbmV0d29yayBjb25uZWN0aW9uICovCi0jaWZkZWYgVE5fQ09NUE9S VAotICAgICAgICB8fCBpc3RuY29tcG9ydCgpCi0jZW5kaWYgLyogVE5fQ09NUE9SVCAqLwotCSkg ewotCW0gPSB0dGdtZG0oKTsJCQkvKiBHZXQgbW9kZW0gc2lnbmFscyAqLwotCWlmICgobSA+IC0x KSAmJiAobSAmIEJNX0RDRCA9PSAwKSkgLyogQ2hlY2sgZm9yIGNhcnJpZXIgKi8KLQkgIHJldHVy bigwKTsJCQkvKiBObyBjYXJyaWVyLCBza2lwIHRoZSByZXN0ICovCi0gICAgfQotI2VuZGlmIC8q IE9TMiAqLwotCi0gICAgZGVidWcoRjExMSwibWRtaHVwIG5ldHdvcmsiLHR0bmFtZSxuZXR3b3Jr KTsKLSAgICBkZWJ1ZyhGMTAxLCJtZG1odXAgbXltZG10eXAiLCIiLG15bWRtdHlwKTsKLSAgICBk ZWJ1ZyhGMTAxLCJtZG1odXAgbWRtdHlwIiwiIixtZG10eXApOwotICAgIC8qIEluIGNhc2Ugb2Yg SEFOR1VQIGJlZm9yZSBESUFMICovCi0gICAgaWYgKG5ldHdvcmsgJiYgbWRtdHlwIDwgMSkJCS8q IFNFVCBIT1NUIGJ1dCBubyBzdWJzZXF1ZW50ICovCi0gICAgICByZXR1cm4oMCk7CQkJLyogU0VU IE1PREVNIFRZUEUuLi4gKi8KLSAgICBpZiAobXltZG10eXAgPT0gMCAmJiBtZG10eXAgPiAwKQot ICAgICAgbXltZG10eXAgPSBtZG10eXA7Ci0gICAgaWYgKG15bWRtdHlwIDwgMSkJCQkvKiBOb3Qg dXNpbmcgYSBtb2RlbSAqLwotICAgICAgcmV0dXJuKDApOwotICAgIGlmIChteW1kbXR5cCA+IDAp CQkJLyogQW4gYWN0dWFsIG1vZGVtLi4uICovCi0gICAgICBtcCA9IG1vZGVtcFtteW1kbXR5cF07 Ci0gICAgaWYgKCFtcCkgewkJCQkvKiBHZXQgcG9pbnRlciB0byBpdHMgTURNSU5GIHN0cnVjdCAq LwotCWRlYnVnKEYxMDAsIm1kbWh1cCBubyBNRE1JTkYiLCIiLDApOwotCXJldHVybigwKTsKLSAg ICB9Ci0gICAgbWRtY2FwYXMgPSBkaWFsY2FwYXMgPyBkaWFsY2FwYXMgOiBtcC0+Y2FwYXM7Ci0g ICAgeHhfb2sgPSBtcC0+b2tfZm47CQkJLyogUG9pbnRlciB0byByZXNwb25zZSByZWFkZXIgKi8K LQotICAgIHMgPSBkaWFsaGNtZCA/IGRpYWxoY21kIDogbXAtPmh1cF9zdHI7IC8qIEdldCBoYW5n dXAgY29tbWFuZCAqLwotICAgIGlmICghcykgcyA9ICIiOwotICAgIGRlYnVnKEYxMTAsIm1kbWh1 cCBodXBfc3RyIixzLDApOwotICAgIGlmICghKnMpIHJldHVybigwKTsJCQkvKiBJZiBub25lLCBm YWlsLiAqLwotCi0gICAgaWYgKHR0cGt0KHNwZWVkLEZMT19ESUFMLHBhcml0eSkgPCAwKSAvKiBD b25kaXRpb24gbGluZSBmb3IgZGlhbGluZyAqLwotICAgICAgcmV0dXJuKC0xKTsKLQotICAgIHhw YXJpdHkgPSBwYXJpdHk7CQkJLyogU2V0IFBBUklUWSB0byBOT05FIHRlbXBvcmFyaWx5ICovCi0g ICAgcGFyaXR5ID0gMDsKLQotICAgIC8qIEluIGNhc2UgdGhleSBnYXZlIGEgU0VUIE1PREVNIEVT Q0FQRSBjb21tYW5kIHJlY2VudGx5Li4uICovCi0KLSAgICBpZiAoZGlhbGVzYyA8IDAgfHwgZGlh bGVzYyA+IDEyNykKLSAgICAgIGMgPSBOVUw7Ci0gICAgZWxzZQotICAgICAgYyA9IChjaGFyKSAo ZGlhbGVzYyA/IGRpYWxlc2MgOiBtcC0+ZXNjX2NoYXIpOwotCi0gICAgaWYgKG1kbWNhcGFzICYg Q0tEX0FUKSB7CQkvKiBIYXllcyBjb21wYXRpYmxlICovCi0JZXNjYnVmWzBdID0gYzsKLQllc2Ni dWZbMV0gPSBjOwotCWVzY2J1ZlsyXSA9IGM7Ci0JZXNjYnVmWzNdID0gTlVMOwotICAgIH0gZWxz ZSB7CQkJCS8qIE90aGVyICovCi0JZXNjYnVmWzBdID0gYzsKLQllc2NidWZbMV0gPSBOVUw7Ci0g ICAgfQotICAgIGRlYnVnKEYxMTAsIm1kbWh1cCBlc2NidWYiLGVzY2J1ZiwwKTsKLSAgICBpZiAo ZXNjYnVmWzBdKSB7CQkJLyogSGF2ZSBlc2NhcGUgc2VxdWVuY2U/ICovCi0JZGVidWcoRjEwMSwi bWRtaHVwIGVzY190aW1lIiwwLG1wLT5lc2NfdGltZSk7Ci0JaWYgKG1wLT5lc2NfdGltZSkJCS8q IElmIHdlIGhhdmUgYSBndWFyZCB0aW1lICovCi0JICBtc2xlZXAobXAtPmVzY190aW1lKTsJCS8q IFBhdXNlIGZvciBndWFyZCB0aW1lICovCi0JZGVidWcoRjEwMCwibWRtaHVwIHBhdXNlIDEgT0si LCIiLDApOwotCi0jaWZkZWYgTkVUQ09OTgkJCQkvKiBTZW5kIG1vZGVtJ3MgZXNjYXBlIHNlcXVl bmNlICovCi0JaWYgKG5ldHdvcmspIHsJCQkvKiBNdXN0IGNhdGNoIGVycm9ycyBoZXJlLiAqLwot CSAgICBpZiAodHRvbCgoQ0hBUiAqKWVzY2J1ZiwoaW50KXN0cmxlbigoY2hhciAqKWVzY2J1Zikp IDwgMCkgewotCQlwYXJpdHkgPSB4cGFyaXR5OwotCQlyZXR1cm4oLTEpOwotCSAgICB9Ci0JICAg IGRlYnVnKEYxMTAsIm1kbWh1cCB0dHNsb3cgbmV0IG9rIixlc2NidWYsMCk7Ci0JfSBlbHNlIHsK LSNlbmRpZiAvKiBORVRDT05OICovCi0JICAgIHR0c2xvdygoY2hhciAqKWVzY2J1Zix3cik7IC8q IFNlbmQgZXNjYXBlIHNlcXVlbmNlICovCi0JICAgIGRlYnVnKEYxMTAsIm1kbWh1cCB0dHNsb3cg b2siLGVzY2J1ZiwwKTsKLSNpZmRlZiBORVRDT05OCi0JfQotI2VuZGlmIC8qIE5FVENPTk4gKi8K LQotCWlmIChtcC0+ZXNjX3RpbWUpCQkvKiBQYXVzZSBmb3IgZ3VhcmQgdGltZSBhZ2FpbiAqLwot CSAgbXNsZWVwKG1wLT5lc2NfdGltZSk7Ci0JZWxzZQotCSAgbXNsZWVwKDUwMCk7CQkJLyogV2Fp dCBoYWxmIGEgc2VjIGZvciBlY2hvZXMuICovCi0JZGVidWcoRjEwMCwibWRtaHVwIHBhdXNlIDEg T0siLCIiLDApOwotI2lmZGVmIENPTU1FTlQKLQl0dGZsdWkoKTsJCQkvKiBGbHVzaCByZXNwb25z ZSBvciBlY2hvLCBpZiBhbnkgKi8KLQlkZWJ1ZyhGMTAwLCJtZG1odXAgdHRmbHVpIE9LIiwiIiww KTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgfQotICAgIHR0c2xvdyhzLHdyKTsJCQkvKiBO b3cgU2VuZCBoYW5ndXAgc3RyaW5nICovCi0gICAgZGVidWcoRjExMCwibWRtaHVwIHR0c2xvdyBv ayIscywwKTsKLS8qCi0gIFRoaXMgaXMgbm90IGV4YWN0bHkgcmlnaHQsIGJ1dCBpdCB3b3Jrcy4K LSAgSWYgd2UgYXJlIG9ubGluZToKLSAgICB0aGUgbW9kZW0gc2F5cyBPSyB3aGVuIGl0IGdldHMg dGhlIGVzY2FwZSBzZXF1ZW5jZSwKLSAgICBhbmQgaXQgc2F5cyBOTyBDQVJSSUVSIHdoZW4gaXQg Z2V0cyB0aGUgaGFuZ3VwIGNvbW1hbmQuCi0gIElmIHdlIGFyZSBvZmZsaW5lOgotICAgIHRoZSBt b2RlbSBkb2VzIE5PVCBzYXkgT0sgKG9yIGFueXRoaW5nIGVsc2UpIHdoZW4gaXQgZ2V0cyB0aGUg ZXNjIHNlcXVlbmNlLAotICAgIGJ1dCBpdCBET0VTIHNheSBPSyAoYW5kIG5vdCBOTyBDQVJSSUVS KSB3aGVuIGl0IGdldHMgdGhlIGhhbmd1cCBjb21tYW5kLgotICBTbyB0aGUgZm9sbG93aW5nIGZ1 bmN0aW9uIHNob3VsZCByZWFkIHRoZSBPSyBpbiBib3RoIGNhc2VzLgotICBPZiBjb3Vyc2UsIHRo aXMgaXMgc29tZXdoYXQgSGF5ZXMtc3BlY2lmaWMuLi4KLSovCi0gICAgaWYgKHh4X29rKSB7CQkJ LyogTG9vayBmb3IgT0sgcmVzcG9uc2UgKi8KLQlkZWJ1ZyhGMTAwLCJtZG1odXAgY2FsbGluZyBy ZXNwb25zZSBmdW5jdGlvbiIsIiIsMCk7Ci0JeCA9ICgqeHhfb2spKDMsMSk7CQkvKiBHaXZlIGl0 IDMgc2Vjb25kcywgYmUgc3RyaWN0LiAqLwotCWRlYnVnKEYxMDEsIm1kbWh1cCBoYW5ndXAgcmVz cG9uc2UiLCIiLHgpOwotCW1zbGVlcCg1MDApOwkJCS8qIFdhaXQgaGFsZiBhIHNlYyAqLwotCXR0 Zmx1aSgpOwkJCS8qIEdldCByaWQgb2YgTk8gQ0FSUklFUiwgaWYgYW55ICovCi0gICAgfSBlbHNl IHsJCQkJLyogTm8gT0sgZnVuY3Rpb24sICovCi0JeCA9IDE7CQkJCS8qIHNvIGFzc3VtZSBpdCB3 b3JrZWQgKi8KLQlkZWJ1ZyhGMTAxLCJtZG1odXAgbm8gb2tfZm4iLCIiLHgpOwotICAgIH0KLSAg ICBwYXJpdHkgPSB4cGFyaXR5OwkJCS8qIFJlc3RvcmUgcHJldmFpbGluZyBwYXJpdHkgKi8KLSAg ICByZXR1cm4oeCk7CQkJCS8qIFJldHVybiBPSyBmdW5jdGlvbidzIHJldHVybiBjb2RlLiAqLwot Ci0jZWxzZSAgLyogTURNSFVQIG5vdCBkZWZpbmVkLiAqLwotCi0gICAgZGVidWcoRjEwMCwibWRt aHVwIE1ETUhVUCBub3QgZGVmaW5lZCIsIiIsMCk7Ci0gICAgcmV0dXJuKDApOwkJCQkvKiBBbHdh eXMgZmFpbC4gKi8KLQotI2VuZGlmIC8qIE1ETUhVUCAqLwotfQotCi0jZW5kaWYgLyogTk9JQ1Ag Ki8KLSNlbHNlIC8qIE5PRElBTCAqLwotCi1pbnQgbWRtdHlwID0gMDsJCQkJLyogRGVmYXVsdCBt b2RlbSB0eXBlICovCi0KLWludAkJCQkJLyogVG8gYWxsb3cgTk9ESUFMIHZlcnNpb25zIHRvICov Ci1tZG1odXAoKSB7CQkJCS8qIGNhbGwgbWRtaHVwKCksIHNvIGNhbGxzIHRvICAqLwotICAgIHJl dHVybigwKTsJCQkJLyogbWRtaHVwKCkgbmVlZCBub3QgYmUgd2l0aGluICovCi19CQkJCQkvKiAj aWZuZGVmIE5PRElBTCBjb25kaXRpb25hbHMgKi8KLSNlbmRpZiAvKiBOT0RJQUwgKi8KLSNlbHNl Ci1pbnQgbWRtdHlwID0gMDsJCQkJLyogRGVmYXVsdCBtb2RlbSB0eXBlICovCi0jZW5kaWYgLyog Tk9MT0NBTCAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTku MC4zMDIvY2t1ZmlvLmMgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2Nr dWZpby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWJmYWFlLi4wMDAwMDAwCi0t LSBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1ZmlvLmMKKysrIC9k ZXYvbnVsbApAQCAtMSw4NTQ1ICswLDAgQEAKLS8qIEMgSyBVIEYgSSBPICAtLSAgS2VybWl0IGZp bGUgc3lzdGVtIHN1cHBvcnQgZm9yIFVOSVgsIEFlZ2lzLCBhbmQgUGxhbiA5ICovCi0KLSNkZWZp bmUgQ0tfTk9OQkxPQ0sgICAgICAgICAgICAgICAgICAgICAvKiBTZWUgem91dGR1bXAoKSAqLwot Ci0jaWZkZWYgYWVnaXMKLWNoYXIgKmNrenYgPSAiQWVnaXMgRmlsZSBzdXBwb3J0LCA5LjAuMjE2 LCAyMCBBdWcgMjAxMSI7Ci0jZWxzZQotI2lmZGVmIFBsYW45Ci1jaGFyICpja3p2ID0gIlBsYW4g OSBGaWxlIHN1cHBvcnQsIDkuMC4yMTYsIDIwIEF1ZyAyMDExIjsKLSNlbHNlCi1jaGFyICpja3p2 ID0gIlVOSVggRmlsZSBzdXBwb3J0LCA5LjAuMjE2LCAyMCBBdWcgMjAxMSI7Ci0jZW5kaWYgLyog UGxhbjkgKi8KLSNlbmRpZiAvKiBhZWdpcyAqLwotLyoKLSAgQXV0aG9yOiBGcmFuayBkYSBDcnV6 IDxmZGNAY29sdW1iaWEuZWR1PiwKLSAgQ29sdW1iaWEgVW5pdmVyc2l0eSBBY2FkZW1pYyBJbmZv cm1hdGlvbiBTeXN0ZW1zLCBOZXcgWW9yayBDaXR5LAotICBhbmQgb3RoZXJzIG5vdGVkIGluIHRo ZSBjb21tZW50cyBiZWxvdy4gIE5vdGU6IENVQ0NBID0gUHJldmlvdXMgbmFtZSBvZgotICBDb2x1 bWJpYSBVbml2ZXJzaXR5IEFjYWRlbWljIEluZm9ybWF0aW9uIFN5c3RlbXMuICBOb3RlOiBBY0lT ID0gUHJldmlvdXMKLSAgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBJbmZvcm1hdGlvbiBUZWNobm9s b2d5LgotCi0gIENvcHlyaWdodCAoQykgMTk4NSwgMjAxMSwKLSAgICBUcnVzdGVlcyBvZiBDb2x1 bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgotICAgIEFsbCByaWdodHMg cmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCi0gICAg Y29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQg cGVybWlzc2lvbnMuCi0qLwotCi0vKgotICBOT1RFIFRPIENPTlRSSUJVVE9SUzogVGhpcyBmaWxl LCBhbmQgYWxsIHRoZSBvdGhlciBDLUtlcm1pdCBmaWxlcywgbXVzdCBiZQotICBjb21wYXRpYmxl IHdpdGggQyBwcmVwcm9jZXNzb3JzIHRoYXQgc3VwcG9ydCBvbmx5ICNpZmRlZiwgI2Vsc2UsICNl bmRpZiwKLSAgI2RlZmluZSwgYW5kICN1bmRlZi4gIFBsZWFzZSBkbyBub3QgdXNlICNpZiwgbG9n aWNhbCBvcGVyYXRvcnMsIG9yIG90aGVyCi0gIHByZXByb2Nlc3NvciBmZWF0dXJlcyBpbiBhbnkg b2YgdGhlIHBvcnRhYmxlIEMtS2VybWl0IG1vZHVsZXMuICBZb3UgY2FuLAotICBvZiBjb3Vyc2Us IHVzZSB0aGVzZSBjb25zdHJ1Y3Rpb25zIGluIHBsYXRmb3JtLXNwZWNpZmljIG1vZHVsZXMgd2hl cmUgeW91Ci0gIGtub3cgdGhleSBhcmUgc3VwcG9ydGVkLgotKi8KLS8qIEluY2x1ZGUgRmlsZXMg Ki8KLQotI2lmZGVmIE1JTklYMgotI2RlZmluZSBfTUlOSVgKLSNlbmRpZiAvKiBNSU5JWDIgKi8K LQotI2luY2x1ZGUgImNrY3N5bS5oIgotI2luY2x1ZGUgImNrY2RlYi5oIgotI2luY2x1ZGUgImNr Y2FzYy5oIgotCi0jaWZuZGVmIE5PQ1NFVFMKLSNpbmNsdWRlICJja2N4bGEuaCIKLSNlbmRpZiAv KiBOT0NTRVRTICovCi0KLS8qIFRvIGF2b2lkIHB1bGxpbmcgaW4gYWxsIG9mIGNrdXVzci5oIHNv IHdlIGNvcHkgdGhlIGZldyBuZWVkZWQgcHJvdG90eXBlcyAqLwotCi1zdHJ1Y3QgbXRhYiB7CQkJ CS8qIE1hY3JvIHRhYmxlLCBsaWtlIGtleXdvcmQgdGFibGUgKi8KLSAgICBjaGFyICprd2Q7CQkJ CS8qIEJ1dCB3aXRoIHBvaW50ZXJzIGZvciB2YWxzICovCi0gICAgY2hhciAqbXZhbDsJCQkJLyog aW5zdGVhZCBvZiBpbnRzLiAqLwotICAgIHNob3J0IGZsZ3M7Ci19OwotX1BST1RPVFlQKCBpbnQg bWxvb2ssIChzdHJ1Y3QgbXRhYiBbXSwgY2hhciAqLCBpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBk b2RvLCAoaW50LCBjaGFyICosIGludCkgKTsKLV9QUk9UT1RZUCggaW50IHBhcnNlciwgKCBpbnQg KSApOwotCi0jaWZkZWYgQ09NTUVOVAotLyogVGhpcyBjYXVzZXMgdHJvdWJsZSBpbiBDLUtlcm1p dCA4LjAuICBJIGRvbid0IHJlbWVtYmVyIHRoZSBvcmlnaW5hbCAqLwotLyogcmVhc29uIGZvciB0 aGlzIGJlaW5nIGhlcmUgYnV0IGl0IG11c3QgaGF2ZSBiZWVuIG5lZWRlZCBhdCB0aGUgdGltZS4u LiAqLwotI2lmZGVmIE9TRjEzCi0jaWZkZWYgQ0tfQU5TSUMKLSNpZmRlZiBfTk9fUFJPVE8KLSN1 bmRlZiBfTk9fUFJPVE8KLSNlbmRpZiAvKiBfTk9fUFJPVE8gKi8KLSNlbmRpZiAvKiBDS19BTlNJ QyAqLwotI2VuZGlmIC8qIE9TRjEzICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0jaWZuZGVm IEhQVVhQUkU2NQotI2luY2x1ZGUgPGVycm5vLmg+CQkJLyogRXJyb3IgbnVtYmVyIHN5bWJvbHMg Ki8KLSNlbHNlCi0jaWZuZGVmIEVSUk5PX0lOQ0xVREVECi0jaW5jbHVkZSA8ZXJybm8uaD4JCQkv KiBFcnJvciBudW1iZXIgc3ltYm9scyAqLwotI2VuZGlmCS8qIEVSUk5PX0lOQ0xVREVEICovCi0j ZW5kaWYJLyogSFBVWFBSRTY1ICovCi0KLSNpbmNsdWRlIDxzaWduYWwuaD4KLQotI2lmZGVmIE1J TklYMgotI3VuZGVmIE1JTklYCi0jdW5kZWYgQ0tTWVNMT0cKLSNpbmNsdWRlIDxsaW1pdHMuaD4K LSNpbmNsdWRlIDx0aW1lLmg+Ci0jZGVmaW5lIE5PRklMRUgKLSNlbmRpZiAvKiBNSU5JWDIgKi8K LQotI2lmZGVmIE1JTklYCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVz Lmg+Ci0jaW5jbHVkZSA8dGltZS5oPgotI2Vsc2UKLSNpZmRlZiBQT1NJWAotI2luY2x1ZGUgPGxp bWl0cy5oPgotI2Vsc2UKLSNpZmRlZiBTVlIzCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jZW5kaWYg LyogU1ZSMyAqLwotI2VuZGlmIC8qIFBPU0lYICovCi0jZW5kaWYgLyogTUlOSVggKi8KLS8qCi0g IERpcmVjdG9yeSBTZXBhcmF0b3IgbWFjcm9zLCB0byBhbGxvdyB0aGlzIG1vZHVsZSB0byB3b3Jr IHdpdGggYm90aCBVTklYIGFuZAotICBPUy8yOiBCZWNhdXNlIG9mIGFtYmlndWl0eSB3aXRoIHRo ZSBjb21tYW5kIGxpbmUgZWRpdG9yIGVzY2FwZSBcIGNoYXJhY3RlciwKLSAgdGhlIGRpcmVjdG9y eSBzZXBhcmF0b3IgaXMgY3VycmVudGx5IGxlZnQgYXMgLyBmb3IgT1MvMiB0b28sIGJlY2F1c2Ug dGhlCi0gIE9TLzIga2VybmVsIGFsc28gYWNjZXB0cyAvIGFzIGRpcmVjdG9yeSBzZXBhcmF0b3Iu ICBCdXQgdGhpcyBpcyBzdWJqZWN0IHRvCi0gIGNoYW5nZSBpbiBmdXR1cmUgdmVyc2lvbnMgdG8g Y29uZm9ybSB0byB0aGUgbm9ybWFsIE9TLzIgc3R5bGUuCi0qLwotI2lmbmRlZiBESVJTRVAKLSNk ZWZpbmUgRElSU0VQICAgICAgICcvJwotI2VuZGlmIC8qIERJUlNFUCAqLwotI2lmbmRlZiBJU0RJ UlNFUAotI2RlZmluZSBJU0RJUlNFUChjKSAgKChjKT09Jy8nKQotI2VuZGlmIC8qIElTRElSU0VQ ICovCi0KLSNpZmRlZiBTRElSRU5UCi0jZGVmaW5lIERJUkVOVAotI2VuZGlmIC8qIFNESVJFTlQg Ki8KLQotI2lmZGVmIFhORElSCi0jaW5jbHVkZSA8c3lzL25kaXIuaD4KLSNlbHNlIC8qICFYTkRJ UiAqLwotI2lmZGVmIE5ESVIKLSNpbmNsdWRlIDxuZGlyLmg+Ci0jZWxzZSAvKiAhTkRJUiwgIVhO RElSICovCi0jaWZkZWYgUlRVCi0jaW5jbHVkZSAiL3Vzci9saWIvbmRpci5oIgotI2Vsc2UgLyog IVJUVSwgIU5ESVIsICFYTkRJUiAqLwotI2lmZGVmIERJUkVOVAotI2lmZGVmIFNESVJFTlQKLSNp bmNsdWRlIDxzeXMvZGlyZW50Lmg+Ci0jZWxzZQotI2luY2x1ZGUgPGRpcmVudC5oPgotI2VuZGlm IC8qIFNESVJFTlQgKi8KLSNlbHNlCi0jaW5jbHVkZSA8c3lzL2Rpci5oPgotI2VuZGlmIC8qIERJ UkVOVCAqLwotI2VuZGlmIC8qIFJUVSAqLwotI2VuZGlmIC8qIE5ESVIgKi8KLSNlbmRpZiAvKiBY TkRJUiAqLwotCi0jaWZkZWYgVU5JWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9p bnRlciBhcmcgdG8gd2FpdCgpIGFsbG93ZWQgKi8KLSNkZWZpbmUgQ0tfQ0hJTEQgICAgICAgICAg ICAgICAgICAgICAgICAvKiBBc3N1bWUgdGhpcyBpcyBzYWZlIGluIGFsbCBVTklYICovCi0jZW5k aWYgLyogVU5JWCAqLwotCi1leHRlcm4gaW50IGJpbmFyeSwgcmVjdXJzaXZlLCBzdGF0aGFjazsK LSNpZmRlZiBDS19DVFJMWgotZXh0ZXJuIGludCBlb2ZtZXRob2Q7Ci0jZW5kaWYgLyogQ0tfQ1RS TFogKi8KLQotI2luY2x1ZGUgPHB3ZC5oPiAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhc3N3 b3JkIGZpbGUgZm9yIHNoZWxsIG5hbWUgKi8KLSNpZmRlZiBDS19TUlAKLSNpbmNsdWRlIDx0X3B3 ZC5oPiAgICAgICAgICAgICAgICAgICAgICAvKiBTUlAgUGFzc3dvcmQgZmlsZSAqLwotI2VuZGlm IC8qIENLX1NSUCAqLwotCi0jaWZkZWYgSFBVWDEwX1RSVVNURUQKLSNpbmNsdWRlIDxocHNlY3Vy aXR5Lmg+Ci0jaW5jbHVkZSA8cHJvdC5oPgotI2VuZGlmIC8qIEhQVVgxMF9UUlVTVEVEICovCi0K LSNpZmRlZiBDT01NRU5UCi0vKiBNb3ZlZCB0byBja2NkZWIuaCAqLwotI2lmZGVmIFBPU0lYCi0j ZGVmaW5lIFVUSU1FSAotI2Vsc2UKLSNpZmRlZiBIUFVYOQotI2RlZmluZSBVVElNRUgKLSNlbmRp ZiAvKiBIUFVYOSAqLwotI2VuZGlmIC8qIFBPU0lYICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwot Ci0jaWZkZWYgU1lTVVRJTUVIICAgICAgICAgICAgICAgICAgICAgICAgLyogPHN5cy91dGltZS5o PiBpZiByZXF1ZXN0ZWQsICAqLwotI2luY2x1ZGUgPHN5cy91dGltZS5oPiAgICAgICAgICAgICAg ICAgIC8qIGZvciBleHRyYSBmaWVsZHMgcmVxdWlyZWQgYnkgKi8KLSNlbHNlICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiA4OE9wZW4gc3BlYy4gKi8KLSNpZmRlZiBVVElNRUgg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvciA8dXRpbWUuaD4gaWYgcmVxdWVzdGVkICov Ci0jaW5jbHVkZSA8dXRpbWUuaD4gICAgICAgICAgICAgICAgICAgICAgLyogKFNWUjQsIFBPU0lY KSAqLwotI2lmbmRlZiBCU0Q0NAotI2lmbmRlZiBWNwotLyogTm90IHN1cmUgd2h5IHRoaXMgaXMg aGVyZS4gIFdoYXQgaXQgaW1wbGllcyBpcyB0aGF0IHRoZSBjb2RlIGJyYWNrZXRlZAotICAgYnkg U1lTVVRJTUVIIGlzIHZhbGlkIG9uIGFsbCBwbGF0Zm9ybXMgb24gd2hpY2ggd2Ugc3VwcG9ydCB0 aW1lIAotICAgZnVuY3Rpb25hbGl0eS4gIEJ1dCB3ZSBrbm93IHRoYXQgaXMgbm90IHRydWUgYmVj YXVzZSB0aGUgQlNENDQgYW5kIFY3Ci0gICBwbGF0Zm9ybXMgZG8gbm90IHN1cHBvcnQgc3lzL3V0 aW1lLmggYW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgd2hpY2gKLSAgIGFyZSBkZWZpbmVkIGluIHRo ZW0uICBOb3cgdGhpcyB3b3JrZWQgYmVmb3JlIGJlY2F1c2UgcHJpb3IgdG8gdG9kYXkncwotICAg Y2hhbmdlcyB0aGUgVVRJTUVIIGRlZmluaXRpb24gZm9yIEJTRDQ0IGFuZCBWNyBkaWQgbm90IHRh a2UgcGxhY2UKLSAgIHVudGlsIGFmdGVyIFNZU1VUSU1FSCB3YXMgZGVmaW5lZC4gIEl0IGFsc28g d291bGQgbm90IGhhdmUgYmVlbiBhIAotICAgcHJvYmxlbSBpZiB0aGUgb3JkZXJpbmcgb2YgYWxs IHRoZSB0aW1lIGJsb2NrcyB3YXMgY29uc2lzdGVudC4gIEFsbCBidXQKLSAgIG9uZSBvZiB0aGUg YmxvY2tzIHdlcmUgQlNENDQsIFY3LCBTWVNVVElNRUgsIDxPVEhFUj4uICBUaGF0IG9uZSBjYXNl Ci0gICBpcyB3aGVyZSB0aGlzIHByb2JsZW0gd2FzIHRyaWdnZXJlZC4KLSovCi0jZGVmaW5lIFNZ U1VUSU1FSCAgICAgICAgICAgICAgICAgICAgICAgLyogVXNlIHRoaXMgZm9yIGJvdGggY2FzZXMu ICovCi0jZW5kaWYgLyogVjcgKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2VuZGlmIC8qIFVUSU1F SCAqLwotI2VuZGlmIC8qIFNZU1VUSU1FSCAqLwotCi0jaWZuZGVmIE5PVElNRVNUQU1QCi0jaWZk ZWYgUE9TSVgKLSNpZm5kZWYgQVM0MDAKLSNkZWZpbmUgVElNRVNUQU1QCi0jZW5kaWYgLyogQVM0 MDAgKi8KLSNlbmRpZiAvKiBQT1NJWCAqLwotCi0jaWZkZWYgQlNENDQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogQlNEIDQuNCAqLwotI2lmbmRlZiBUSU1FU1RBTVAKLSNkZWZpbmUgVElN RVNUQU1QICAgICAgICAgICAgICAgICAgICAgICAvKiBDYW4gZG8gZmlsZSBkYXRlcyAqLwotI2Vu ZGlmIC8qIFRJTUVTVEFNUCAqLwotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jaW5jbHVkZSA8c3lz L3RpbWViLmg+Ci0KLSNlbHNlICAvKiBOb3QgQlNENDQgKi8KLQotI2lmZGVmIEJTRDQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEJTRCA0LjMgYW5kIGJlbG93ICovCi0jZGVmaW5lIFRJ TUVTVEFNUCAgICAgICAgICAgICAgICAgICAgICAgLyogQ2FuIGRvIGZpbGUgZGF0ZXMgKi8KLSNp bmNsdWRlIDx0aW1lLmg+ICAgICAgICAgICAgICAgICAgICAgICAvKiBOZWVkIHRoaXMgKi8KLSNp bmNsdWRlIDxzeXMvdGltZWIuaD4gICAgICAgICAgICAgICAgICAvKiBOZWVkIHRoaXMgaWYgcmVh bGx5IEJTRCAqLwotCi0jZWxzZSAgLyogTm90IEJTRCA0LjMgYW5kIGJlbG93ICovCi0KLSNpZmRl ZiBTVk9SUE9TSVggICAgICAgICAgICAgICAgICAgICAgICAvKiBTeXN0ZW0gViBvciBQT1NJWCAq LwotI2lmbmRlZiBUSU1FU1RBTVAKLSNkZWZpbmUgVElNRVNUQU1QCi0jZW5kaWYgLyogVElNRVNU QU1QICovCi0jaW5jbHVkZSA8dGltZS5oPgotCi0vKiB2b2lkIHR6c2V0KCk7ICh0aGUgInZvaWQi IHR5cGUgdXBzZXRzIHNvbWUgY29tcGlsZXJzKSAqLwotI2lmbmRlZiBJUklYNjAKLSNpZm5kZWYg dWx0cml4Ci0jaWZuZGVmIENPTlZFWDkKLS8qIENvbnZleE9TIDkuMCwgc3VwcG9zZWRseSBQT1NJ WCwgaGFzIGV4dGVybiBjaGFyICp0aW1lem9uZShpbnQsaW50KSAqLwotI2lmbmRlZiBQbGFuOQot ZXh0ZXJuIGxvbmcgdGltZXpvbmU7Ci0jZW5kaWYgLyogUGxhbjkgKi8KLSNlbmRpZiAvKiBDT05W RVg5ICovCi0jZW5kaWYgLyogdWx0cml4ICovCi0jZW5kaWYgLyogSVJJWDYwICovCi0jZW5kaWYg LyogU1ZPUlBPU0lYICovCi0jZW5kaWYgLyogQlNENCAqLwotI2VuZGlmIC8qIEJTRDQ0ICovCi0K LSNpZmRlZiBDT0hFUkVOVAotI2luY2x1ZGUgPHRpbWUuaD4KLSNlbmRpZiAvKiBDT0hFUkVOVCAq LwotCi0vKiBJcyBgeScgYSBsZWFwIHllYXI/ICovCi0jZGVmaW5lIGxlYXAoeSkgKCgoeSkgJSA0 ID09IDAgJiYgKHkpICUgMTAwICE9IDApIHx8ICh5KSAlIDQwMCA9PSAwKQotCi0vKiBOdW1iZXIg b2YgbGVhcCB5ZWFycyBmcm9tIDE5NzAgdG8gYHknIChub3QgaW5jbHVkaW5nIGB5JyBpdHNlbGYp LiAqLwotI2RlZmluZSBubGVhcCh5KSAoKCh5KSAtIDE5NjkpIC8gNCAtICgoeSkgLSAxOTAxKSAv IDEwMCArICgoeSkgLSAxNjAxKSAvIDQwMCkKLQotI2VuZGlmIC8qIE5PVElNRVNUQU1QICovCi0K LSNpZmRlZiBDSUUKLSNpbmNsdWRlIDxzdGF0Lmg+ICAgICAgICAgICAgICAgICAgICAgICAvKiBG aWxlIHN0YXR1cyAqLwotI2Vsc2UKLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2VuZGlmIC8qIENJ RSAqLwotCi0KLQotLyogTWFjcm8gdG8gYWxsZXZpYXRlIGlzZGlyKCkgY2FsbHMgaW50ZXJuYWwg dG8gdGhpcyBtb2R1bGUgKi8KLQotc3RhdGljIHN0cnVjdCBzdGF0IFNUQVRCVUY7Ci0jZGVmaW5l IHhpc2RpcihhKSAoKHN0YXQoYSwmU1RBVEJVRik9PS0xKT8wOihTX0lTRElSKFNUQVRCVUYuc3Rf bW9kZSk/MTowKSkKLQotZXh0ZXJuIGNoYXIgdWlkYnVmW107Ci1leHRlcm4gaW50IHhmZXJsb2c7 Ci1leHRlcm4gY2hhciAqIHhmZXJmaWxlOwotaW50IGlrbG9nb3BlbiA9IDA7Ci1zdGF0aWMgdGlt ZV90IHRpbWVub3c7Ci0KLSNkZWZpbmUgSUtTRE1TR0xFTiBDS01BWFBBVEgrNTEyCi0KLXN0YXRp YyBjaGFyIGlrc2Rtc2dbSUtTRE1TR0xFTl07Ci0KLWV4dGVybiBpbnQgbG9jYWw7Ci0KLWV4dGVy biBpbnQgc2VydmVyLCBlbl9ta2QsIGVuX2N3ZCwgZW5fZGVsOwotCi0vKgotICBGdW5jdGlvbnMg KG4gaXMgb25lIG9mIHRoZSBwcmVkZWZpbmVkIGZpbGUgbnVtYmVycyBmcm9tIGNrY2tlci5oKToK LQotICAgem9wZW5pKG4sbmFtZSkgICAtLSBPcGVucyBhbiBleGlzdGluZyBmaWxlIGZvciBpbnB1 dC4KLSAgIHpvcGVubyhuLG5hbWUsYXR0cixmY2IpIC0tIE9wZW5zIGEgbmV3IGZpbGUgZm9yIG91 dHB1dC4KLSAgIHpjbG9zZShuKSAgICAgICAgLS0gQ2xvc2VzIGEgZmlsZS4KLSAgIHpjaGluKG4s JmMpICAgICAgLS0gR2V0cyB0aGUgbmV4dCBjaGFyYWN0ZXIgZnJvbSBhbiBpbnB1dCBmaWxlLgot ICAgenNpbmwobiwmcyx4KSAgICAtLSBSZWFkIGEgbGluZSBmcm9tIGZpbGUgbiwgbWF4IGxlbiB4 LCBpbnRvIGFkZHJlc3Mgcy4KLSAgIHpzb3V0KG4scykgICAgICAgLS0gV3JpdGUgYSBudWxsLXRl cm1pbmF0ZWQgc3RyaW5nIHRvIG91dHB1dCBmaWxlLCBidWZmZXJlZC4KLSAgIHpzb3V0bChuLHMp ICAgICAgLS0gTGlrZSB6c291dCwgYnV0IGFwcGVuZHMgYSBsaW5lIHRlcm1pbmF0b3IuCi0gICB6 c291dHgobixzLHgpICAgIC0tIFdyaXRlIHggY2hhcmFjdGVycyB0byBvdXRwdXQgZmlsZSwgdW5i dWZmZXJlZC4KLSAgIHpjaG91dChuLGMpICAgICAgLS0gQWRkIGEgY2hhcmFjdGVyIHRvIGFuIG91 dHB1dCBmaWxlLCB1bmJ1ZmZlcmVkLgotICAgemNoa2kobmFtZSkgICAgICAtLSBDaGVjayBpZiBu YW1lZCBmaWxlIGV4aXN0cyBhbmQgaXMgcmVhZGFibGUsIHJldHVybiBzaXplLgotICAgemNoa28o bmFtZSkgICAgICAtLSBDaGVjayBpZiBuYW1lZCBmaWxlIGNhbiBiZSBjcmVhdGVkLgotICAgemNo a3NwYShuYW1lLG4pICAtLSBDaGVjayBpZiBuIGJ5dGVzIGF2YWlsYWJsZSB0byBjcmVhdGUgbmV3 IGZpbGUsIG5hbWUuCi0gICB6bmV3bihuYW1lLHMpICAgIC0tIE1ha2UgYSBuZXcgdW5pcXVlIGZp bGUgbmFtZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gbmFtZS4KLSAgIHpkZWxldChuYW1lKSAgICAgLS0g RGVsZXRlIHRoZSBuYW1lZCBmaWxlLgotICAgenhwYW5kKHN0cmluZykgICAtLSBFeHBhbmRzIHRo ZSBnaXZlbiB3aWxkY2FyZCBzdHJpbmcgaW50byBhIGxpc3Qgb2YgZmlsZXMuCi0gICB6bmV4dChz dHJpbmcpICAgIC0tIFJldHVybnMgdGhlIG5leHQgZmlsZSBmcm9tIHRoZSBsaXN0IGluICJzdHJp bmciLgotICAgenhyZXdpbmQoKSAgICAgICAtLSBSZXdpbmQgenhwYW5kIGxpc3QuCi0gICB6eGNt ZChuLGNtZCkgICAgIC0tIEV4ZWN1dGUgdGhlIGNvbW1hbmQgaW4gYSBsb3dlciBmb3JrIG9uIGZp bGUgbnVtYmVyIG4uCi0gICB6Y2xvc2YoKSAgICAgICAgIC0tIENsb3NlIGlucHV0IGZpbGUgYXNz b2NpYXRlZCB3aXRoIHp4Y21kKCkncyBsb3dlciBmb3JrLgotICAgenJ0b2wobjEsbjIpICAgICAt LSBDb252ZXJ0IHJlbW90ZSBmaWxlbmFtZSBpbnRvIGxvY2FsIGZvcm0uCi0gICB6bHRvcihuMSxu MikgICAgIC0tIENvbnZlcnQgbG9jYWwgZmlsZW5hbWUgaW50byByZW1vdGUgZm9ybS4KLSAgIHpj aGRpcihkaXJuYW0pICAgLS0gQ2hhbmdlIHdvcmtpbmcgZGlyZWN0b3J5LgotICAgemhvbWUoKSAg ICAgICAgICAtLSBSZXR1cm4gcG9pbnRlciB0byBob21lIGRpcmVjdG9yeSBuYW1lIHN0cmluZy4K LSAgIHprc2VsZigpICAgICAgICAgLS0gS2lsbCBzZWxmLCBsb2cgb3V0IG93biBqb2IuCi0gICB6 c2F0dHIoc3RydWN0IHphdHRyICopIC0tIFJldHVybiBhdHRyaWJ1dGVzIGZvciBmaWxlIHdoaWNo IGlzIGJlaW5nIHNlbnQuCi0gICB6c3RpbWUoZiwgc3RydWN0IHphdHRyICosIHgpIC0gU2V0IGZp bGUgY3JlYXRpb24gZGF0ZSBmcm9tIGF0dHJpYnV0ZSBwYWNrZXQuCi0gICB6cmVuYW1lKG9sZCwg bmV3KSAtLSBSZW5hbWUgYSBmaWxlLgotICAgemNvcHkoc291cmNlLGRlc3RpbmF0aW9uKSAtLSBD b3B5IGEgZmlsZS4KLSAgIHpta2RpcihwYXRoKSAgICAgICAtLSBDcmVhdGUgdGhlIGRpcmVjdG9y eSBwYXRoIGlmIHBvc3NpYmxlCi0gICB6Zm5xZnAoZm5hbWUsbGVuLGZ1bGxwYXRoKSAtIERldGVy bWluZSBmdWxsIHBhdGggZm9yIGZpbGUgbmFtZS4KLSAgIHpnZXRmcyhuYW1lKSAgICAgLS0gcmV0 dXJuIGZpbGUgc2l6ZSByZWdhcmRsZXNzIG9mIGFjY2Vzc2liaWxpdHkKLSAgIHpjaGtwaWQocGlk KSAgICAgLS0gdGVsbCBpZiBQSUQgaXMgdmFsaWQgYW5kIGFjdGl2ZQotKi8KLQotLyogS2VybWl0 LXNwZWNpZmljIGluY2x1ZGVzICovCi0vKgotICBEZWZpbml0aW9ucyBoZXJlIHN1cGVyc2VkZSB0 aG9zZSBmcm9tIHN5c3RlbSBpbmNsdWRlIGZpbGVzLgotICBja2NkZWIuaCBpcyBpbmNsdWRlZCBh Ym92ZS4KLSovCi0jaW5jbHVkZSAiY2tja2VyLmgiICAgICAgICAgICAgICAgICAgICAgLyogS2Vy bWl0IGRlZmluaXRpb25zICovCi0jaW5jbHVkZSAiY2t1Y21kLmgiICAgICAgICAgICAgICAgICAg ICAgLyogRm9yIGtleXdvcmQgdGFibGVzICovCi0jaW5jbHVkZSAiY2t1dmVyLmgiICAgICAgICAg ICAgICAgICAgICAgLyogVmVyc2lvbiBoZXJhbGQgKi8KLQotY2hhciAqY2t6c3lzID0gSEVSQUxE OwotCi0vKgotICBGaWxlIGFjY2VzcyBjaGVja2luZyAuLi4gIFRoZXJlIGFyZSB0d28gY2FsbHMg dG8gYWNjZXNzKCkgaW4gdGhpcyBtb2R1bGUuCi0gIElmIHRoaXMgcHJvZ3JhbSBpcyBpbnN0YWxs ZWQgc2V0dWlkIG9yIHNldGdpZCBvbiBhIEJlcmtlbGV5LWJhc2VkIFVOSVgKLSAgc3lzdGVtIHRo YXQgZG9lcyBOT1QgaW5jb3Jwb3JhdGUgdGhlIHNhdmVkLW9yaWdpbmFsLWVmZmVjdGl2ZS11aWQv Z2lkCi0gIGZlYXR1cmUsIHRoZW4sIHdoZW4gd2UgaGF2ZSBzd2FwcGVkIHRoZSBlZmZlY3RpdmUg YW5kIG9yaWdpbmFsIHVpZC9naWQsCi0gIGFjY2VzcygpIGZhaWxzIGJlY2F1c2UgaXQgdXNlcyB3 aGF0IGl0IHRoaW5rcyBhcmUgdGhlIFJFQUwgaWRzLCBidXQgd2UgaGF2ZQotICBzd2FwcGVkIHRo ZW0uICBUaGlzIG9jY3VycyBvbiBzeXN0ZW1zIHdoZXJlIEFOWUJTRCBpcyBkZWZpbmVkLCBOT1NF VFJFVQotICBpcyBOT1QgZGVmaW5lZCwgYW5kIFNBVkVEVUlEIGlzIE5PVCBkZWZpbmVkLiAgU28s IGluIHRoZW9yeSwgd2Ugc2hvdWxkIHRha2UKLSAgY2FyZSBvZiB0aGlzIHNpdHVhdGlvbiBsaWtl IHNvOgotCi0gICAgaWZkZWYgQU5ZQlNECi0gICAgaWZuZGVmIE5PU0VUUkVVCi0gICAgaWZuZGVm IFNBVkVEVUlECi0gICAgZGVmaW5lIFNXX0FDQ19JRAotICAgIGVuZGlmCi0gICAgZW5kaWYKLSAg ICBlbmRpZgotCi0gIEJ1dCB3ZSBjYW4ndCB0ZXN0IHN1Y2ggYSBnZW5lcmFsIHNjaGVtZSBldmVy eXdoZXJlLCBzbyBsZXQncyBvbmx5IGRvIHRoaXMKLSAgd2hlbiB3ZSBrbm93IHdlIGhhdmUgdG8u Li4KLSovCi0jaWZkZWYgTkVYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmVYVFNU RVAgMS4wLTMuMCAqLwotI2RlZmluZSBTV19BQ0NfSUQKLSNlbmRpZiAvKiBORVhUICovCi0KLS8q IFN1cHBvcnQgZm9yIHRpbGRlLWV4cGFuc2lvbiBpbiBmaWxlIGFuZCBkaXJlY3RvcnkgbmFtZXMg Ki8KLQotI2lmZGVmIFBPU0lYCi0jZGVmaW5lIE5BTUVFTlYgIkxPR05BTUUiCi0jZWxzZQotI2lm ZGVmIEJTRDQKLSNkZWZpbmUgTkFNRUVOViAiVVNFUiIKLSNlbHNlCi0jaWZkZWYgQVRUU1YKLSNk ZWZpbmUgTkFNRUVOViAiTE9HTkFNRSIKLSNlbmRpZiAvKiBBVFRTViAqLwotI2VuZGlmIC8qIEJT RDQgKi8KLSNlbmRpZiAvKiBQT1NJWCAqLwotCi0vKiBCZXJrZWxleSBVbml4IFZlcnNpb24gNC54 ICovCi0vKiA0LjFic2Qgc3VwcG9ydCBmcm9tIENoYXJsZXMgRSBCcm9va3MsIEVETi1WQVggKi8K LQotI2lmZGVmIEJTRDQKLSNpZmRlZiBNQVhOQU1MRU4KLSNkZWZpbmUgQlNENDIKLSNlbmRpZiAv KiBNQVhOQU1MRU4gKi8KLSNlbmRpZiAvKiBCU0Q0ICovCi0KLS8qIERlZmluaXRpb25zIG9mIHNv bWUgc3lzdGVtIGNvbW1hbmRzICovCi0KLWNoYXIgKkRFTENNRCA9ICJybSAtZiAiOyAgICAgICAg ICAgICAgICAvKiBGb3IgZmlsZSBkZWxldGlvbiAqLwotY2hhciAqQ1BZQ01EID0gImNwICI7ICAg ICAgICAgICAgICAgICAgIC8qIEZvciBmaWxlIGNvcHkgKi8KLWNoYXIgKlJFTkNNRCA9ICJtdiAi OyAgICAgICAgICAgICAgICAgICAvKiBGb3IgZmlsZSByZW5hbWUgKi8KLWNoYXIgKlBXRENNRCA9 ICJwd2QgIjsgICAgICAgICAgICAgICAgICAvKiBGb3Igc2F5aW5nIHdoZXJlIEkgYW0gKi8KLQot I2lmZGVmIENPTU1FTlQKLSNpZmRlZiBIUFVYMTAKLWNoYXIgKkRJUkNNRCA9ICIvdXNyL2Jpbi9s cyAtbCAiOyAgICAgICAvKiBGb3IgZGlyZWN0b3J5IGxpc3RpbmcgKi8KLWNoYXIgKkRJUkNNMiA9 ICIvdXNyL2Jpbi9scyAtbCAiOyAgICAgICAvKiBGb3IgZGlyZWN0b3J5IGxpc3RpbmcsIG5vIGFy Z3MgKi8KLSNlbHNlCi1jaGFyICpESVJDTUQgPSAiL2Jpbi9scyAtbCAiOyAgICAgICAgICAgLyog Rm9yIGRpcmVjdG9yeSBsaXN0aW5nICovCi1jaGFyICpESVJDTTIgPSAiL2Jpbi9scyAtbCAiOyAg ICAgICAgICAgLyogRm9yIGRpcmVjdG9yeSBsaXN0aW5nLCBubyBhcmdzICovCi0jZW5kaWYgLyog SFBVWDEwICovCi0jZWxzZQotY2hhciAqRElSQ01EID0gImxzIC1sICI7ICAgICAgICAgICAgICAg IC8qIEZvciBkaXJlY3RvcnkgbGlzdGluZyAqLwotY2hhciAqRElSQ00yID0gImxzIC1sICI7ICAg ICAgICAgICAgICAgIC8qIEZvciBkaXJlY3RvcnkgbGlzdGluZywgbm8gYXJncyAqLwotI2VuZGlm IC8qIENPTU1FTlQgKi8KLQotY2hhciAqVFlQQ01EID0gImNhdCAiOyAgICAgICAgICAgICAgICAg IC8qIEZvciB0eXBpbmcgYSBmaWxlICovCi0KLSNpZmRlZiBIUFVYCi1jaGFyICpNQUlMQ01EID0g Im1haWx4IjsgICAgICAgICAgICAgICAgLyogRm9yIHNlbmRpbmcgbWFpbCAqLwotI2Vsc2UKLSNp ZmRlZiBER1VYNTQwCi1jaGFyICpNQUlMQ01EID0gIm1haWx4IjsKLSNlbHNlCi0jaWZkZWYgVU5J WAotI2lmZGVmIENLX01BSUxDTUQKLWNoYXIgKk1BSUxDTUQgPSBDS19NQUlMQ01EOwkJLyogQ0ZM QUdTIG92ZXJyaWRlICovCi0jZWxzZQotY2hhciAqTUFJTENNRCA9ICJNYWlsIjsJCQkvKiBEZWZh dWx0ICovCi0jZW5kaWYgLyogQ0tfTUFJTENNRCAqLwotI2Vsc2UKLWNoYXIgKk1BSUxDTUQgPSAi IjsKLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogSFBVWCAqLwotI2VuZGlmIC8qIERHVVg0 MCAqLwotCi0jaWZkZWYgVU5JWAotI2lmZGVmIEFOWUJTRCAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEJTRCB1c2VzIGxwciB0byBzcG9vbCAqLwotI2lmZGVmIERHVVg1NDAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEFuZCBERy9VWCAqLwotY2hhciAqIFBSSU5UQ01EID0gImxwIjsK LSNlbHNlCi1jaGFyICogUFJJTlRDTUQgPSAibHByIjsKLSNlbmRpZiAvKiBER1VYNTQwICovCi0j ZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3lzIFYgdXNlcyBscCAq LwotI2lmZGVmIFRSUzE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV4Y2VwdCBmb3Ig VGFuZHktMTYvNjAwMC4uLiAqLwotY2hhciAqIFBSSU5UQ01EID0gImxwciI7Ci0jZWxzZQotY2hh ciAqIFBSSU5UQ01EID0gImxwIjsKLSNlbmRpZiAvKiBUUlMxNiAqLwotI2VuZGlmIC8qIEFOWUJT RCAqLwotI2Vsc2UgIC8qIE5vdCBVTklYICovCi0jZGVmaW5lIFBSSU5UQ01EICIiCi0jZW5kaWYg LyogVU5JWCAqLwotCi0jaWZkZWYgRlQxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog Rm9ydHVuZSBGb3I6UHJvIDEuOCAqLwotI3VuZGVmIEJTRDQKLSNlbmRpZiAvKiBGVDE4ICovCi0K LSNpZmRlZiBCU0Q0Ci1jaGFyICpTUEFDTUQgPSAicHdkIDsgZGYgLiI7ICAgICAgICAgICAgLyog U3BhY2UgaW4gY3VycmVudCBkaXJlY3RvcnkgKi8KLSNlbHNlCi0jaWZkZWYgRlQxOAotY2hhciAq U1BBQ01EID0gInB3ZCA7IGR1IDsgZGYgLiI7Ci0jZWxzZQotY2hhciAqU1BBQ01EID0gImRmICI7 Ci0jZW5kaWYgLyogRlQxOCAqLwotI2VuZGlmIC8qIEJTRDQgKi8KLQotY2hhciAqU1BBQ00yID0g ImRmICI7ICAgICAgICAgICAgICAgICAgIC8qIEZvciBzcGFjZSBpbiBzcGVjaWZpZWQgZGlyZWN0 b3J5ICovCi0KLSNpZmRlZiBGVDE4Ci0jZGVmaW5lIEJTRDQKLSNlbmRpZiAvKiBGVDE4ICovCi0K LSNpZmRlZiBCU0Q0Ci1jaGFyICpXSE9DTUQgPSAiZmluZ2VyICI7Ci0jZWxzZQotY2hhciAqV0hP Q01EID0gIndobyAiOwotI2VuZGlmIC8qIEJTRDQgKi8KLQotLyogTW9yZSBzeXN0ZW0tZGVwZW5k ZW50IGluY2x1ZGVzLCB3aGljaCBkZXBlbmQgb24gc3ltYm9scyBkZWZpbmVkICovCi0vKiBpbiB0 aGUgS2VybWl0LXNwZWNpZmljIGluY2x1ZGVzLiAgT2ggd2hhdCBhIHRhbmdsZWQgd2ViIHdlIHdl YXZlLi4uICovCi0KLSNpZmRlZiBDT0hFUkVOVCAgICAgICAgICAgICAgICAgICAgICAgICAvKiA8 c3lzL2ZpbGUuaD4gKi8KLSNkZWZpbmUgTk9GSUxFSAotI2VuZGlmIC8qIENPSEVSRU5UICovCi0K LSNpZmRlZiBNSU5JWAotI2RlZmluZSBOT0ZJTEVICi0jZW5kaWYgLyogTUlOSVggKi8KLQotI2lm ZGVmIGFlZ2lzCi0jZGVmaW5lIE5PRklMRUgKLSNlbmRpZiAvKiBhZWdpcyAqLwotCi0jaWZkZWYg dW5vcwotI2RlZmluZSBOT0ZJTEVICi0jZW5kaWYgLyogdW5vcyAqLwotCi0jaWZuZGVmIE5PRklM RUgKLSNpbmNsdWRlIDxzeXMvZmlsZS5oPgotI2VuZGlmIC8qIE5PRklMRUggKi8KLQotI2lmbmRl ZiBpczY4ayAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdoZXRoZXIgdG8gaW5jbHVkZSA8 ZmNudGwuaD4gKi8KLSNpZm5kZWYgQlNENDEgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBB bGwgYnV0IGEgY291cGxlIFVOSVhlcyBoYXZlIGl0LiAqLwotI2lmbmRlZiBGVDE4Ci0jaWZuZGVm IENPSEVSRU5UCi0jaW5jbHVkZSA8ZmNudGwuaD4KLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotI2Vu ZGlmIC8qIEZUMTggICovCi0jZW5kaWYgLyogQlNENDEgKi8KLSNlbmRpZiAvKiBpczY4ayAqLwot Ci0jaWZkZWYgQ09IRVJFTlQKLSNpZmRlZiBfSTM4NgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jZWxz ZQotI2luY2x1ZGUgPHN5cy9mY250bC5oPgotI2VuZGlmIC8qIF9JMzg2ICovCi0jZW5kaWYgLyog Q09IRVJFTlQgKi8KLQotZXh0ZXJuIGludCBpbnNlcnZlcjsJCQkvKiBJIGFtIElLU0QgKi8KLWlu dCBndWVzdCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbm9ueW1vdXMgdXNlciAq LwotCi0jaWZkZWYgSUtTRAotZXh0ZXJuIGludCBpc2d1ZXN0OwotZXh0ZXJuIGNoYXIgKiBhbm9u cm9vdDsKLSNlbmRpZiAvKiBJS1NEICovCi0KLSNpZmRlZiBDS19MT0dJTgotI2RlZmluZSBHVUVT VFBBU1MgMjU2Ci1zdGF0aWMgY2hhciBndWVzdHBhc3NbR1VFU1RQQVNTXSA9IHsgTlVMLCBOVUwg fTsgLyogQW5vbnltb3VzICJwYXNzd29yZCIgKi8KLXN0YXRpYyBpbnQgbG9nZ2VkX2luID0gMDsg ICAgICAgICAgICAgICAvKiBTZXQgd2hlbiB1c2VyIGlzIGxvZ2dlZCBpbiAqLwotc3RhdGljIGlu dCBhc2twYXNzd2QgPSAwOyAgICAgICAgICAgICAgIC8qIEhhdmUgT0sgdXNlciwgbXVzdCBhc2sg Zm9yIHBhc3N3ZCAqLwotI2lmZGVmIENLX1BBTQotZXh0ZXJuIGludCBnb3RlbXB0eXBhc3N3ZDsK LSNlbmRpZiAvKiBDS19QQU0gKi8KLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotCi0jaWZkZWYgQ0tS T09UCi1zdGF0aWMgY2hhciBja3Jvb3RbQ0tNQVhQQVRIKzFdID0geyBOVUwsIE5VTCB9Owotc3Rh dGljIGludCBja3Jvb3RzZXQgPSAwOwotaW50IGNrcm9vdGVyciA9IDA7Ci0jZW5kaWYgLyogQ0tS T09UICovCi0KLV9QUk9UT1RZUCggVk9JRCBpZ25vcnNpZ3MsICh2b2lkKSApOwotX1BST1RPVFlQ KCBWT0lEIHJlc3RvcnNpZ3MsICh2b2lkKSApOwotI2lmZGVmIFNFTEVDVAotX1BST1RPVFlQKCBp bnQgdHR3YWl0LCAoaW50LCBpbnQpICk7CS8qIGNrdXRpby5jICovCi0jZW5kaWYJLyogU0VMRUNU ICovCi0KLS8qCi0gIENoYW5nZSBhcmd1bWVudCB0byAiKGNvbnN0IGNoYXIgKikiIGlmIHRoaXMg Y2F1c2VzIHRyb3VibGUuCi0gIE9yLi4uIGlmIGl0IGNhdXNlcyB0cm91YmxlLCB0aGVuIG1heWJl IGl0IHdhcyBhbHJlYWR5IGRlY2xhcmVkCi0gIGluIGEgaGVhZGVyIGZpbGUgYWZ0ZXIgYWxsLCBz byB5b3UgY2FuIHJlbW92ZSB0aGlzIHByb3RvdHlwZS4KLSovCi0jaWZuZGVmIE5ER1BXTkFNIC8q IElmIG5vdCBkZWZpbmVkIE5vIERlY2xhcmUgZ2V0cHduYW0uLi4gKi8KLSNpZm5kZWYgX1BPU0lY X1NPVVJDRQotI2lmbmRlZiBORVhUCi0jaWZuZGVmIFNWUjQKLS8qIFBPU0lYIDxwd2QuaD4gYWxy ZWFkeSBnYXZlIHByb3RvdHlwZXMgZm9yIHRoZXNlLiAqLwotI2lmZGVmIElSSVg0MAotX1BST1RP VFlQKCBzdHJ1Y3QgcGFzc3dkICogZ2V0cHduYW0sIChjb25zdCBjaGFyICopICk7Ci0jZWxzZQot I2lmZGVmIElSSVg1MQotX1BST1RPVFlQKCBzdHJ1Y3QgcGFzc3dkICogZ2V0cHduYW0sIChjb25z dCBjaGFyICopICk7Ci0jZWxzZQotI2lmZGVmIE1fVU5JWAotX1BST1RPVFlQKCBzdHJ1Y3QgcGFz c3dkICogZ2V0cHduYW0sIChjb25zdCBjaGFyICopICk7Ci0jZWxzZQotI2lmZGVmIEhQVVg5Ci1f UFJPVE9UWVAoIHN0cnVjdCBwYXNzd2QgKiBnZXRwd25hbSwgKGNvbnN0IGNoYXIgKikgKTsKLSNl bHNlCi0jaWZkZWYgSFBVWDEwCi1fUFJPVE9UWVAoIHN0cnVjdCBwYXNzd2QgKiBnZXRwd25hbSwg KGNvbnN0IGNoYXIgKikgKTsKLSNlbHNlCi0jaWZkZWYgRENHUFdOQU0KLV9QUk9UT1RZUCggc3Ry dWN0IHBhc3N3ZCAqIGdldHB3bmFtLCAoY29uc3QgY2hhciAqKSApOwotI2Vsc2UKLV9QUk9UT1RZ UCggc3RydWN0IHBhc3N3ZCAqIGdldHB3bmFtLCAoY2hhciAqKSApOwotI2VuZGlmIC8qIERDR1BX TkFNICovCi0jZW5kaWYgLyogSFBVWDEwICovCi0jZW5kaWYgLyogSFBVWDkgKi8KLSNlbmRpZiAv KiBNX1VOSVggKi8KLSNlbmRpZiAvKiBJUklYNTEgKi8KLSNlbmRpZiAvKiBJUklYNDAgKi8KLSNp Zm5kZWYgU1VOT1M0Ci0jaWZuZGVmIEhQVVg5Ci0jaWZuZGVmIEhQVVgxMAotI2lmbmRlZiBfU0NP X0RTCi1fUFJPVE9UWVAoIHN0cnVjdCBwYXNzd2QgKiBnZXRwd3VpZCwgKFBXSURfVCkgKTsKLSNl bmRpZiAvKiBfU0NPX0RTICovCi0jZW5kaWYgLyogSFBVWDEwICovCi0jZW5kaWYgLyogSFBVWDkg Ki8KLSNlbmRpZiAvKiBTVU5PUzQgKi8KLV9QUk9UT1RZUCggc3RydWN0IHBhc3N3ZCAqIGdldHB3 ZW50LCAodm9pZCkgKTsKLSNlbmRpZiAvKiBTVlI0ICovCi0jZW5kaWYgLyogTkVYVCAqLwotI2Vu ZGlmIC8qIF9QT1NJWF9TT1VSQ0UgKi8KLSNlbmRpZiAvKiBOREdQV05BTSAqLwotCi0jaWZkZWYg Q0tfU0hBRE9XICAgICAgICAgICAgICAgICAgICAgICAgLyogU2hhZG93IFBhc3N3b3Jkcy4uLiAq LwotI2luY2x1ZGUgPHNoYWRvdy5oPgotI2VuZGlmIC8qIENLX1NIQURPVyAqLwotI2lmZGVmIENL X1BBTSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBBTS4uLiAqLwotI2lmZGVmIE1BQ09T WAotI2luY2x1ZGUgPHBhbS9wYW1fYXBwbC5oPgotI2Vsc2UgLyogTUFDT1NYICovCi0jaW5jbHVk ZSA8c2VjdXJpdHkvcGFtX2FwcGwuaD4KLSNlbmRpZiAvKiBNQUNPU1ggKi8KLSNpZm5kZWYgUEFN X1NFUlZJQ0VfVFlQRSAgICAgICAgICAgICAgICAvKiBEZWZpbmVzIHdoaWNoIFBBTSBzZXJ2aWNl IHdlIGFyZSAqLwotI2RlZmluZSBQQU1fU0VSVklDRV9UWVBFICJrZXJtaXQiCi0jZW5kaWYgLyog UEFNX1NFUlZJQ0VfVFlQRSAqLwotCi0jaWZkZWYgU09MQVJJUwotI2RlZmluZSBQQU1fQ09OU1Qg Ci0jZWxzZSAvKiBTT0xBUklTICovCi0jZGVmaW5lIFBBTV9DT05TVCBDT05TVAotI2VuZGlmIAot Ci1zdGF0aWMgY2hhciAqIHBhbV9wdyA9IE5VTEw7Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi1w YW1fY2IoaW50IG51bV9tc2csCi0gICAgICAgUEFNX0NPTlNUIHN0cnVjdCBwYW1fbWVzc2FnZSAq Km1zZywKLSAgICAgICBzdHJ1Y3QgcGFtX3Jlc3BvbnNlICoqcmVzcCwKLSAgICAgICB2b2lkICph cHBkYXRhX3B0cgotICAgICAgICkKLSNlbHNlIC8qIENLX0FOU0lDICovCi1wYW1fY2IobnVtX21z ZywgbXNnLCByZXNwLCBhcHBkYXRhX3B0cikKLSAgICBpbnQgbnVtX21zZzsKLSAgICBQQU1fQ09O U1Qgc3RydWN0IHBhbV9tZXNzYWdlICoqbXNnOwotICAgIHN0cnVjdCBwYW1fcmVzcG9uc2UgKipy ZXNwOwotICAgIHZvaWQgKmFwcGRhdGFfcHRyOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17Ci0g ICAgaW50IGk7Ci0KLSAgICBkZWJ1ZyhGMTExLCJwYW1fY2IiLCJudW1fbXNnIixudW1fbXNnKTsK LQotICAgIGZvciAoaSA9IDA7IGkgPCBudW1fbXNnOyBpKyspIHsKLSAgICAgICAgY2hhciBtZXNz YWdlW1BBTV9NQVhfTVNHX1NJWkVdOwotCi0gICAgICAgIC8qIElzc3VlIHByb21wdCBhbmQgZ2V0 IHJlc3BvbnNlICovCi0gICAgICAgIGRlYnVnKEYxMTEsInBhbV9jYiIsIk1lc3NhZ2UiLGkpOwot ICAgICAgICBkZWJ1ZyhGMTExLCJwYW1fY2IiLG1zZ1tpXS0+bXNnLG1zZ1tpXS0+bXNnX3N0eWxl KTsKLSAgICAgICAgaWYgKG1zZ1tpXS0+bXNnX3N0eWxlID09IFBBTV9FUlJPUl9NU0cpIHsKLSAg ICAgICAgICAgIGRlYnVnKEYxMTEsInBhbV9jYiIsIlBBTSBFUlJPUiIsMCk7Ci0gICAgICAgICAg ICBmcHJpbnRmKHN0ZG91dCwiJXNcbiIsIG1zZ1tpXS0+bXNnKTsKLSAgICAgICAgICAgIHJldHVy bigwKTsKLSAgICAgICAgfSBlbHNlIGlmIChtc2dbaV0tPm1zZ19zdHlsZSA9PSBQQU1fVEVYVF9J TkZPKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJwYW1fY2IiLCJQQU0gVEVYVCBJTkZPIiww KTsKLSAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCIlc1xuIiwgbXNnW2ldLT5tc2cpOwotICAg ICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICB9IGVsc2UgaWYgKG1zZ1tpXS0+bXNnX3N0eWxl ID09IFBBTV9QUk9NUFRfRUNIT19PRkYpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsInBhbV9j YiIsIlJlYWRpbmcgcmVzcG9uc2UsIG5vIGVjaG8iLDApOwotICAgICAgICAgICAgLyogVWdseSBo YWNrLiAgV2UgY2hlY2sgdG8gc2VlIGlmIGEgcGFzc3dvcmQgaGFzIGJlZW4gcHVzaGVkICovCi0g ICAgICAgICAgICAvKiBpbnRvIHp2cGFzc3dkKCkuICBUaGlzIHdvdWxkIGJlIHRydWUgaWYgdGhl IHBhc3N3b3JkIHdhcyAgKi8KLSAgICAgICAgICAgIC8qIHJlY2VpdmVkIGJ5IFJFTU9URSBMT0dJ Ti4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKHBh bV9wdykgewotICAgICAgICAgICAgICAgIGNrc3RybmNweShtZXNzYWdlLHBhbV9wdyxQQU1fTUFY X01TR19TSVpFKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHJlYWRwYXNz KChjaGFyICopbXNnW2ldLT5tc2csbWVzc2FnZSxQQU1fTUFYX01TR19TSVpFKTsKLSAgICAgICAg fSBlbHNlIGlmIChtc2dbaV0tPm1zZ19zdHlsZSA9PSBQQU1fUFJPTVBUX0VDSE9fT04pIHsKLSAg ICAgICAgICAgIGRlYnVnKEYxMTEsInBhbV9jYiIsIlJlYWRpbmcgcmVzcG9uc2UsIHdpdGggZWNo byIsMCk7Ci0gICAgICAgICAgICByZWFkdGV4dCgoY2hhciAqKW1zZ1tpXS0+bXNnLG1lc3NhZ2Us UEFNX01BWF9NU0dfU0laRSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZWJ1ZyhG MTExLCJwYW1fY2IiLCJ1bmtub3duIHN0eWxlIiwwKTsKLSAgICAgICAgICAgIHJldHVybigwKTsK LSAgICAgICAgfQotCi0gICAgICAgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciB0aGlzIG1lc3NhZ2Un cyByZXNwb25zZSBzdHJ1Y3R1cmUgKi8KLSAgICAgICAgcmVzcFtpXSA9IChzdHJ1Y3QgcGFtX3Jl c3BvbnNlICopIG1hbGxvYyhzaXplb2YgKHN0cnVjdCBwYW1fcmVzcG9uc2UpKTsKLSAgICAgICAg aWYgKCFyZXNwW2ldKSB7Ci0gICAgICAgICAgICBpbnQgajsKLSAgICAgICAgICAgIGRlYnVnKEYx MTAsInBhbV9jYiIsIm1hbGxvYyBmYWlsdXJlIiwwKTsKLSAgICAgICAgICAgIGZvciAoaiA9IDA7 IGogPCBpOyBqKyspIHsKLSAgICAgICAgICAgICAgICBmcmVlKHJlc3Bbal0tPnJlc3ApOwotICAg ICAgICAgICAgICAgIGZyZWUocmVzcFtqXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBy ZXR1cm4oMCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBBbGxvY2F0ZSBhIGJ1ZmZlciBmb3Ig dGhlIHJlc3BvbnNlICovCi0gICAgICAgIHJlc3BbaV0tPnJlc3AgPSAoY2hhciAqKSBtYWxsb2Mo KGludClzdHJsZW4obWVzc2FnZSkgKyAxKTsKLSAgICAgICAgaWYgKCFyZXNwW2ldLT5yZXNwKSB7 Ci0gICAgICAgICAgICBpbnQgajsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsInBhbV9jYiIsIm1h bGxvYyBmYWlsdXJlIiwwKTsKLSAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsK LSAgICAgICAgICAgICAgICBmcmVlKHJlc3Bbal0tPnJlc3ApOwotICAgICAgICAgICAgICAgIGZy ZWUocmVzcFtqXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmcmVlKHJlc3BbaV0pOwot ICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICB9Ci0gICAgICAgIC8qIFJldHVybiB0aGUg cmVzdWx0cyBiYWNrIHRvIFBBTSAqLwotICAgICAgICBzdHJjcHkocmVzcFtpXS0+cmVzcCwgbWVz c2FnZSk7CS8qIHNhZmUgKHByZWNoZWNrZWQpICovCi0gICAgICAgIHJlc3BbaV0tPnJlc3BfcmV0 Y29kZSA9IDA7Ci0gICAgfQotICAgIGRlYnVnKEYxMTAsInBhbV9jYiIsIkV4aXRpbmciLDApOwot ICAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAvKiBDS19QQU0gKi8KLQotLyogRGVmaW5lIG1hY3Jv cyBmb3IgZ2V0dGluZyBmaWxlIHR5cGUgKi8KLQotI2lmZGVmIE9YT1MKLS8qCi0gIE9saXZldHRp IFgvT1MgMi4zIGhhcyBTX0lTUkVHIGFuZCBTX0lTRElSIGRlZmluZWQKLSAgaW5jb3JyZWN0bHks IHNvIHdlIGZvcmNlIHRoZWlyIHJlZGVmaW5pdGlvbi4KLSovCi0jdW5kZWYgU19JU1JFRwotI3Vu ZGVmIFNfSVNESVIKLSNlbmRpZiAvKiBPWE9TICovCi0KLSNpZmRlZiBVVFNWICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBTYW1lIGRlYWwgZm9yIEFtZGFobCBVVFNWICovCi0jdW5kZWYg U19JU1JFRwotI3VuZGVmIFNfSVNESVIKLSNlbmRpZiAvKiBVVFNWICovCi0KLSNpZmRlZiBVTklT WVM1MiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbmQgZm9yIFVOSVNZUyBVVFMgViA1LjIg Ki8KLSN1bmRlZiBTX0lTUkVHCi0jdW5kZWYgU19JU0RJUgotI2VuZGlmIC8qIFVOSVNZUzUyICov Ci0KLSNpZmRlZiBJQ0xTVlIzICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbmQgZm9yIG9s ZCBJQ0wgdmVyc2lvbnMgKi8KLSN1bmRlZiBTX0lTUkVHCi0jdW5kZWYgU19JU0RJUgotI2VuZGlm IC8qIElDTFNWUjMgKi8KLQotI2lmZGVmIElTRElSQlVHICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEFsc28gYWxsb3cgdGhpcyBmcm9tIGNvbW1hbmQgbGluZSAqLwotI2lmZGVmIFNfSVNSRUcK LSN1bmRlZiBTX0lTUkVHCi0jZW5kaWYgLyogU19JU1JFRyAqLwotI2lmZGVmIFNfSVNESVIKLSN1 bmRlZiBTX0lTRElSCi0jZW5kaWYgLyogIFNfSVNESVIgKi8KLSNlbmRpZiAvKiBJU0RJUkJVRyAq LwotCi0jaWZuZGVmIF9JRk1UCi0jaWZkZWYgU19JRk1UCi0jZGVmaW5lIF9JRk1UIFNfSUZNVAot I2Vsc2UKLSNkZWZpbmUgX0lGTVQgMDE3MDAwMAotI2VuZGlmIC8qIFNfSUZNVCAqLwotI2VuZGlm IC8qIF9JRk1UICovCi0KLSNpZm5kZWYgU19JU1JFRwotI2RlZmluZSBTX0lTUkVHKG0pICgoKG0p ICYgU19JRk1UKSA9PSBTX0lGUkVHKQotI2VuZGlmIC8qIFNfSVNSRUcgKi8KLSNpZm5kZWYgU19J U0RJUgotI2RlZmluZSBTX0lTRElSKG0pICgoKG0pICYgU19JRk1UKSA9PSBTX0lGRElSKQotI2Vu ZGlmIC8qIFNfSVNESVIgKi8KLQotLyogVGhlIGZvbGxvd2luZyBtYWlubHkgZm9yIE5lWFRTVEVQ Li4uICovCi0KLSNpZm5kZWYgU19JV1VTUgotI2RlZmluZSBTX0lXVVNSIDAwMDAyMDAKLSNlbmRp ZiAvKiBTX0lXVVNSICovCi0KLSNpZm5kZWYgU19JUkdSUAotI2RlZmluZSBTX0lSR1JQIDAwMDAw NDAKLSNlbmRpZiAvKiBTX0lSR1JQICovCi0KLSNpZm5kZWYgU19JV0dSUAotI2RlZmluZSBTX0lX R1JQIDAwMDAwMjAKLSNlbmRpZiAvKiBTX0lXR1JQICovCi0KLSNpZm5kZWYgU19JWEdSUAotI2Rl ZmluZSBTX0lYR1JQIDAwMDAwMTAKLSNlbmRpZiAvKiBTX0lYR1JQICovCi0KLSNpZm5kZWYgU19J Uk9USAotI2RlZmluZSBTX0lST1RIIDAwMDAwMDQKLSNlbmRpZiAvKiBTX0lST1RIICovCi0KLSNp Zm5kZWYgU19JV09USAotI2RlZmluZSBTX0lXT1RIIDAwMDAwMDIKLSNlbmRpZiAvKiBTX0lXT1RI ICovCi0KLSNpZm5kZWYgU19JWE9USAotI2RlZmluZSBTX0lYT1RIIDAwMDAwMDEKLSNlbmRpZiAv KiBTX0lYT1RIICovCi0vKgotICBEZWZpbmUgbWF4aW11bSBsZW5ndGggZm9yIGEgZmlsZSBuYW1l IGlmIG5vdCBhbHJlYWR5IGRlZmluZWQuCi0gIE5PVEU6IFRoaXMgYXBwbGllcyB0byBhIHBhdGgg c2VnbWVudCAoZGlyZWN0b3J5IG9yIGZpbGUgbmFtZSksCi0gIG5vdCB0aGUgZW50aXJlIHBhdGgg c3RyaW5nLCB3aGljaCBjYW4gYmUgQ0tNQVhQQVRIIGJ5dGVzIGxvbmcuCi0qLwotI2lmZGVmIFFO WAotI2lmZGVmIF9NQVhfRk5BTUUKLSNkZWZpbmUgTUFYTkFNTEVOIF9NQVhfRk5BTUUKLSNlbHNl Ci0jZGVmaW5lIE1BWE5BTUxFTiA0OAotI2VuZGlmIC8qIF9NQVhfRk5BTUUgKi8KLSNlbHNlCi0j aWZuZGVmIE1BWE5BTUxFTgotI2lmZGVmIHN1bgotI2RlZmluZSBNQVhOQU1MRU4gMjU1Ci0jZWxz ZQotI2lmZGVmIEZJTEVOQU1FX01BWAotI2RlZmluZSBNQVhOQU1MRU4gRklMRU5BTUVfTUFYCi0j ZWxzZQotI2lmZGVmIE5BTUVfTUFYCi0jZGVmaW5lIE1BWE5BTUxFTiBOQU1FX01BWAotI2Vsc2UK LSNpZmRlZiBfUE9TSVhfTkFNRV9NQVgKLSNkZWZpbmUgTUFYTkFNTEVOIF9QT1NJWF9OQU1FX01B WAotI2Vsc2UKLSNpZmRlZiBfRF9OQU1FX01BWAotI2RlZmluZSBNQVhOQU1MRU4gX0RfTkFNRV9N QVgKLSNlbHNlCi0jaWZkZWYgRElSU0laCi0jZGVmaW5lIE1BWE5BTUxFTiBESVJTSVoKLSNlbHNl Ci0jZGVmaW5lIE1BWE5BTUxFTiAxNAotI2VuZGlmIC8qIERJUlNJWiAqLwotI2VuZGlmIC8qIF9E X05BTUVfTUFYICovCi0jZW5kaWYgLyogX1BPU0lYX05BTUVfTUFYICovCi0jZW5kaWYgLyogTkFN RV9NQVggKi8KLSNlbmRpZiAvKiBGSUxFTkFNRV9NQVggKi8KLSNlbmRpZiAvKiBzdW4gKi8KLSNl bmRpZiAvKiBNQVhOQU1MRU4gKi8KLSNlbmRpZiAvKiBRTlggKi8KLQotI2lmZGVmIENPTU1FTlQK LS8qIEFzIG9mIDIwMDEtMTEtMDMgdGhpcyBpcyBoYW5kbGVkIGluIGNrY2RlYi5oICovCi0vKiBM b25nZXN0IHBhdGhuYW1lIC4uLiAqLwotLyoKLSAgQmV3YXJlOiBNQVhQQVRITEVOIGlzIG9uZSBv ZiBVTklYJ3MgZGlydHkgbGl0dGxlIHNlY3JldHMuICBXaGVyZSBpcyBpdAotICBkZWZpbmVkPyAg V2hvIGtub3dzLi4uICA8cGFyYW0uaD4sIDxtb2QuaD4sIDx1bmlzdGQuaD4sIDxsaW1pdHMuaD4s IC4uLgotICBUaGVyZSBpcyBub3QgbmVjZXNzYXJpbHkgZXZlbiBhIGRlZmluaXRpb24gZm9yIGl0 IGFueXdoZXJlLCBvciBpdCBtaWdodCBoYXZlCi0gIGFub3RoZXIgbmFtZS4gIElmIHlvdSBnZXQg aXQgd3JvbmcsIGJhZCB0aGluZ3MgaGFwcGVuIHdpdGggZ2V0Y3dkKCkgYW5kL29yCi0gIGdldHdk KCkuICBJZiB5b3UgYWxsb2NhdGUgYSBidWZmZXIgdGhhdCBpcyB0b28gc2hvcnQsIGdldHdkKCkg bWlnaHQgd3JpdGUKLSAgb3ZlciBtZW1vcnkgYW5kIGdldGN3ZCgpIHdpbGwgZmFpbCB3aXRoIEVS QU5HRS4gIFRoZSBkZWZpbml0aW9ucyBvZiB0aGVzZQotICBmdW5jdGlvbnMgKGUuZy4gaW4gU1ZJ RCBvciBQT1NJWC4xKSBkbyBub3QgdGVsbCB5b3UgaG93IHRvIGRldGVybWluZSB0aGUKLSAgbWF4 aW11bSBwYXRoIGxlbmd0aCBpbiBvcmRlciB0byBhbGxvY2F0ZSBhIGJ1ZmZlciB0aGF0IGlzIHRo ZSByaWdodCBzaXplLgotKi8KLSNpZmRlZiBCU0Q0NAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPiAg ICAgICAgICAgICAgICAgIC8qIEZvciBNQVhQQVRITEVOICovCi0jZW5kaWYgLyogQlNENDQgKi8K LSNpZmRlZiBDT0hFUkVOVAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPiAgLyogZm9yIE1BWFBBVEhM RU4sIG5lZWRlZCBmb3IgLURESVJFTlQgKi8KLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotI2VuZGlm IC8qIENPTU1FTlQgKi8KLQotI2lmZGVmIE1BWFBBVEhMRU4KLSNpZmRlZiBNQVhQQVRICi0jdW5k ZWYgTUFYUEFUSAotI2VuZGlmIC8qIE1BWFBBVEggKi8KLSNkZWZpbmUgTUFYUEFUSCBNQVhQQVRI TEVOCi0jZWxzZQotI2lmZGVmIFBBVEhfTUFYCi0jZGVmaW5lIE1BWFBBVEggUEFUSF9NQVgKLSNl bHNlCi0jaWZkZWYgX1BPU0lYX1BBVEhfTUFYCi0jZGVmaW5lIE1BWFBBVEggX1BPU0lYX1BBVEhf TUFYCi0jZWxzZQotI2lmZGVmIEJTRDQyCi0jZGVmaW5lIE1BWFBBVEggMTAyNAotI2Vsc2UKLSNp ZmRlZiBTVlI0Ci0jZGVmaW5lIE1BWFBBVEggMTAyNAotI2Vsc2UKLSNkZWZpbmUgTUFYUEFUSCAy NTUKLSNlbmRpZiAvKiBTVlI0ICovCi0jZW5kaWYgLyogQlNENDIgKi8KLSNlbmRpZiAvKiBfUE9T SVhfUEFUSF9NQVggKi8KLSNlbmRpZiAvKiBQQVRIX01BWCAqLwotI2VuZGlmIC8qIE1BWFBBVEhM RU4gKi8KLQotLyogTWF4aW11bSBudW1iZXIgb2YgZmlsZW5hbWVzIGZvciB3aWxkY2FyZCBleHBh bnNpb24gKi8KLQotI2lmbmRlZiBNQVhXTEQKLS8qIEFscmVhZHkgZGVmaW5lZCBpbiBja2NkZWIu aCBzbyB0aGUgZm9sbG93aW5nIGlzIHN1cGVyZmx1b3VzLiAqLwotLyogRG9uJ3QgZXhwZWN0IGNo YW5naW5nIHRoZW0gdG8gaGF2ZSBhbnkgZWZmZWN0LiAqLwotI2lmZGVmIENLX1NNQUxMCi0jZGVm aW5lIE1BWFdMRCA1MAotI2Vsc2UKLSNpZmRlZiBCSUdCVUZPSwotI2RlZmluZSBNQVhXTEQgMTAy NDAwCi0jZWxzZQotI2RlZmluZSBNQVhXTEQgODE5MgotI2VuZGlmIC8qIEJJR0JVRk9LICovCi0j ZW5kaWYgLyogQ0tfU01BTEwgKi8KLSNlbmRpZiAvKiBNQVhXTEQgKi8KLQotc3RhdGljIGludCBt YXhuYW1lcyA9IE1BWFdMRDsKLQotLyogRGVmaW5lIHRoZSBzaXplIG9mIHRoZSBzdHJpbmcgc3Bh Y2UgZm9yIGZpbGVuYW1lIGV4cGFuc2lvbi4gKi8KLQotI2lmbmRlZiBEWU5BTUlDCi0jaWZkZWYg UFJPVlgxCi0jZGVmaW5lIFNTUEFDRSA1MDAKLSNlbHNlCi0jaWZkZWYgQlNEMjkKLSNkZWZpbmUg U1NQQUNFIDUwMAotI2Vsc2UKLSNpZmRlZiBwZHAxMQotI2RlZmluZSBTU1BBQ0UgNTAwCi0jZWxz ZQotI2lmZGVmIGFlZ2lzCi0jZGVmaW5lIFNTUEFDRSAxMDAwMCAgICAgICAgICAgICAgICAgICAg LyogU2l6ZSBvZiBzdHJpbmctZ2VuZXJhdGluZyBidWZmZXIgKi8KLSNlbHNlICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IHN0YXRpYyBidWZmZXIgc2l6ZSAqLwot I2lmZGVmIEJJR0JVRk9LCi0jZGVmaW5lIFNTUEFDRSA2NTAwMCAgICAgICAgICAgICAgICAgICAg LyogU2l6ZSBvZiBzdHJpbmctZ2VuZXJhdGluZyBidWZmZXIgKi8KLSNlbHNlCi0jZGVmaW5lIFNT UEFDRSAyMDAwICAgICAgICAgICAgICAgICAgICAgLyogc2l6ZSBvZiBzdHJpbmctZ2VuZXJhdGlu ZyBidWZmZXIgKi8KLSNlbmRpZiAvKiBCSUdCVUZPSyAqLwotI2VuZGlmIC8qIGFlZ2lzICovCi0j ZW5kaWYgLyogcGRwMTEgKi8KLSNlbmRpZiAvKiBCU0QyOSAqLwotI2VuZGlmIC8qIFBST1ZYMSAq Lwotc3RhdGljIGNoYXIgc3NwYWNlW1NTUEFDRV07ICAgICAgICAgICAgIC8qIEJ1ZmZlciBmb3Ig Z2VuZXJhdGluZyBmaWxlbmFtZXMgKi8KLSNlbHNlIC8qIGlzIERZTkFNSUMgKi8KLSNpZmRlZiBD S182NEJJVAotI2RlZmluZSBTU1BBQ0UgMjAwMDAwMDAwMAkJLyogVHdvIGJpbGxpb24gYnl0ZXMg Ki8KLSNlbHNlCi0jaWZkZWYgQklHQlVGT0sKLSNkZWZpbmUgU1NQQUNFIDEwMDAwMDAwCQkJLyog VGVuIG1pbGxpb24gKi8KLSNlbHNlCi0jZGVmaW5lIFNTUEFDRSAxMDAwMAkJCS8qIFRlbiB0aG91 c2FuZCAqLwotI2VuZGlmIC8qIEJJR0JVRk9LICovCi0jZW5kaWYJLyogQ0tfNjRCSVQgKi8KLWNo YXIgKnNzcGFjZSA9IChjaGFyICopMDsKLSNlbmRpZiAvKiBEWU5BTUlDICovCi1zdGF0aWMgaW50 IHNzcGxlbiA9IFNTUEFDRTsJCS8qIExlbmd0aCBvZiBzdHJpbmcgc3BhY2UgYnVmZmVyICovCi0K LSNpZmRlZiBEQ0xGRE9QRU4KLS8qIGZkb3BlbigpIG5lZWRzIGRlY2xhcmluZyBiZWNhdXNlIGl0 J3Mgbm90IGRlY2xhcmVkIGluIDxzdGRpby5oPiAqLwotX1BST1RPVFlQKCBGSUxFICogZmRvcGVu LCAoaW50LCBjaGFyICopICk7Ci0jZW5kaWYgLyogRENMRkRPUEVOICovCi0KLSNpZmRlZiBEQ0xQ T1BFTgotLyogcG9wZW4oKSBuZWVkcyBkZWNsYXJpbmcgYmVjYXVzZSBpdCdzIG5vdCBkZWNsYXJl ZCBpbiA8c3RkaW8uaD4gKi8KLV9QUk9UT1RZUCggRklMRSAqIHBvcGVuLCAoY2hhciAqLCBjaGFy ICopICk7Ci0jZW5kaWYgLyogRENMUE9QRU4gKi8KLQotZXh0ZXJuIGludCBub3B1c2g7Ci0KLS8q IE1vcmUgaW50ZXJuYWwgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwotLyoKLSAqIFRoZSBwYXRoIHN0 cnVjdHVyZSBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgbmFtZSB0byBtYXRjaC4KLSAqIEVhY2gg c2xhc2gtc2VwYXJhdGVkIHNlZ21lbnQgb2YgdGhlIG5hbWUgaXMga2VwdCBpbiBvbmUKLSAqIHN1 Y2ggc3RydWN0dXJlLCBhbmQgdGhleSBhcmUgbGlua2VkIHRvZ2V0aGVyLCB0byBtYWtlCi0gKiB0 cmF2ZXJzaW5nIHRoZSBuYW1lIGVhc2llci4KLSAqLwotc3RydWN0IHBhdGggewotICAgIGNoYXIg bnBhcnRbTUFYTkFNTEVOKzRdOyAgICAgICAgICAgIC8qIG5hbWUgcGFydCBvZiBwYXRoIHNlZ21l bnQgKi8KLSAgICBzdHJ1Y3QgcGF0aCAqZndkOyAgICAgICAgICAgICAgICAgICAvKiBmb3J3YXJk IHB0ciAqLwotfTsKLSNpZm5kZWYgTk9QVVNICi1fUFJPVE9UWVAoIGludCBzaHhwYW5kLCAoY2hh ciAqLCBjaGFyICpbXSwgaW50ICkgKTsKLSNlbmRpZiAvKiBOT1BVU0ggKi8KLV9QUk9UT1RZUCgg c3RhdGljIGludCBmZ2VuLCAoY2hhciAqLCBjaGFyICpbXSwgaW50ICkgKTsKLV9QUk9UT1RZUCgg c3RhdGljIFZPSUQgdHJhdmVyc2UsIChzdHJ1Y3QgcGF0aCAqLCBjaGFyICosIGNoYXIgKikgKTsK LV9QUk9UT1RZUCggc3RhdGljIFZPSUQgYWRkcmVzdWx0LCAoY2hhciAqLCBpbnQpICk7Ci0jaWZk ZWYgQ09NTUVOVAotLyogUmVwbGFjZWQgYnkgY2ttYXRjaCgpICovCi1fUFJPVE9UWVAoIHN0YXRp YyBpbnQgbWF0Y2gsIChjaGFyICosIGNoYXIgKikgKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi1f UFJPVE9UWVAoIGNoYXIgKiB3aG9hbWksICh2b2lkKSApOwotX1BST1RPVFlQKCBVSURfVCByZWFs X3VpZCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIHN0YXRpYyBzdHJ1Y3QgcGF0aCAqc3BsaXRwYXRo LCAoY2hhciAqcCkgKTsKLV9QUk9UT1RZUCggY2hhciAqIHpkdHN0ciwgKHRpbWVfdCkgKTsKLV9Q Uk9UT1RZUCggdGltZV90IHpzdHJkdCwgKGNoYXIgKiwgaW50KSApOwotCi0vKiBTb21lIHN5c3Rl bXMgZGVmaW5lIHRoZXNlIHN5bWJvbHMgaW4gaW5jbHVkZSBmaWxlcywgb3RoZXJzIGRvbid0Li4u ICovCi0KLSNpZm5kZWYgUl9PSwotI2RlZmluZSBSX09LIDQgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEZvciBhY2Nlc3MgKi8KLSNlbmRpZiAvKiBSX09LICovCi0KLSNpZm5kZWYgV19PSwot I2RlZmluZSBXX09LIDIKLSNlbmRpZiAvKiBXX09LICovCi0KLSNpZm5kZWYgWF9PSwotI2RlZmlu ZSBYX09LIDEKLSNlbmRpZiAvKiBYX09LICovCi0KLSNpZm5kZWYgT19SRE9OTFkKLSNkZWZpbmUg T19SRE9OTFkgMDAwCi0jZW5kaWYgLyogT19SRE9OTFkgKi8KLQotLyogc3lzbG9nIGFuZCB3dG1w IGl0ZW1zIGZvciBJbnRlcm5ldCBLZXJtaXQgU2VydmljZSAqLwotCi1leHRlcm4gY2hhciAqIGNs aWVudGhvc3Q7ICAgICAgICAgICAgICAgLyogRnJvbSBja2NtYWkuYy4gKi8KLQotc3RhdGljIGNo YXIgZnVsbG5hbWVbQ0tNQVhQQVRIKzFdOwotc3RhdGljIGNoYXIgdG1wMltDS01BWFBBVEgrMV07 Ci0KLWV4dGVybiBpbnQgY2t4bG9nZ2luZzsKLQotI2lmZGVmIENLWFBSSU5URiAgICAgICAgICAg ICAgICAgICAgICAgIC8qIE91ciBwcmludGYgbWFjcm8gY29uZmxpY3RzIHdpdGggKi8KLSN1bmRl ZiBwcmludGYgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1c2Ugb2YgInByaW50ZiIgaW4g c3lzbG9nLmggKi8KLSNlbmRpZiAvKiBDS1hQUklOVEYgKi8KLSNpZmRlZiBDS1NZU0xPRwotI2lm ZGVmIFJUQUlYCi0jaW5jbHVkZSA8c3lzL3N5c2xvZy5oPgotI2Vsc2UgIC8qIFJUQUlYICovCi0j aW5jbHVkZSA8c3lzbG9nLmg+Ci0jZW5kaWYgLyogUlRBSVggKi8KLSNlbmRpZiAvKiBDS1NZU0xP RyAqLwotI2lmZGVmIENLWFBSSU5URgotI2RlZmluZSBwcmludGYgY2t4cHJpbnRmCi0jZW5kaWYg LyogQ0tYUFJJTlRGICovCi0KLWludCBja3hhbm9uID0gMTsgICAgICAgICAgICAgICAgICAgICAg ICAvKiBBbm9ueW1vdXMgbG9naW4gb2sgKi8KLWludCBja3hwZXJtcyA9IDAwNDA7ICAgICAgICAg ICAgICAgICAgICAvKiBBbm9ueW1vdXMgZmlsZSBwZXJtaXNzaW9ucyAqLwotaW50IGNreHByaXYg PSAxOwkJCS8qIFByaXYnZCBsb2dpbiBvayAqLwotCi0jaWZuZGVmIFhGRVJGSUxFCi0jZGVmaW5l IFhGRVJGSUxFICIvdmFyL2xvZy9pa3NkLmxvZyIKLSNlbmRpZiAvKiBYRkVSRklMRSAqLwotCi0v KiB3dG1wIGxvZ2dpbmcgZm9yIElLU0QuLi4gKi8KLQotI2lmbmRlZiBDS1dUTVAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHd0bXAgbG9nZ2luZyBub3Qgc2VsZWN0ZWQgKi8KLWludCBja3h3 dG1wID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBLbm93IHRoaXMgYXQgcnVudGltZSAq LwotI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHd0bXAgZmlsZSBk ZXRhaWxzICovCi1pbnQgY2t4d3RtcCA9IDE7Ci0jaWZkZWYgVVRNUEJVRyAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogVW5mb3J0dW5hdGVseS4uLiAqLwotLyoKLSAgU29tZSB2ZXJzaW9ucyBv ZiBMaW51eCBoYXZlIGEgPHV0bXAuaD4gZmlsZSB0aGF0IGNvbnRhaW5zCi0gICJlbnVtIHV0bG9n aW4geyBsb2NhbCwgdGVsbmV0LCBybG9naW4sIHNjcmVlbiwgLi4uIH07IiAgVGhpcyBjbG9iYmVy cwotICBhbnkgcHJvZ3JhbSB0aGF0IHVzZXMgYW55IG9mIHRoZXNlIHdvcmRzIGFzIHZhcmlhYmxl IG5hbWVzLCBmdW5jdGlvbgotICBuYW1lcywgbWFjcm8gbmFtZXMsIGV0Yy4gIChPdGhlciB2ZXJz aW9ucyBvZiBMaW51eCBoYXZlIHRoaXMgZGVjbGFyYXRpb24KLSAgd2l0aGluICNpZiAwIC4uLiAj ZW5kaWYuKSAgVGhlcmUgaXMgbm90aGluZyB3ZSBjYW4gZG8gYWJvdXQgdGhpcyBvdGhlcgotICB0 aGFuIHRvIG5vdCBpbmNsdWRlIHRoZSBzdHVwaWQgZmlsZS4gIEJ1dCB3ZSBuZWVkIHN0dWZmIGZy b20gaXQsIHNvLi4uCi0qLwotI2luY2x1ZGUgPGZlYXR1cmVzLmg+Ci0jaW5jbHVkZSA8c3lzL3R5 cGVzLmg+Ci0jZGVmaW5lIFVUX0xJTkVTSVpFICAgICAzMgotI2RlZmluZSBVVF9OQU1FU0laRSAg ICAgMzIKLSNkZWZpbmUgVVRfSE9TVFNJWkUgICAgIDI1NgotCi1zdHJ1Y3QgdGltZXZhbCB7Ci0g IHRpbWVfdCB0dl9zZWM7Ci0gIHRpbWVfdCB0dl91c2VjOwotfTsKLQotc3RydWN0IGV4aXRfc3Rh dHVzIHsKLSAgc2hvcnQgaW50IGVfdGVybWluYXRpb247ICAgICAgLyogUHJvY2VzcyB0ZXJtaW5h dGlvbiBzdGF0dXMuICAqLwotICBzaG9ydCBpbnQgZV9leGl0OyAgICAgICAgICAgICAvKiBQcm9j ZXNzIGV4aXQgc3RhdHVzLiAgKi8KLX07Ci0KLXN0cnVjdCB1dG1wIHsKLSAgc2hvcnQgaW50IHV0 X3R5cGU7ICAgICAgICAgICAgICAgICAgICAvKiBUeXBlIG9mIGxvZ2luICovCi0gIHBpZF90IHV0 X3BpZDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGlkIG9mIGxvZ2luIHByb2Nlc3MgKi8K LSAgY2hhciB1dF9saW5lW1VUX0xJTkVTSVpFXTsgICAgICAgICAgICAvKiBOVUwtdGVybWluYXRl ZCBkZXZpY2VuYW1lIG9mIHR0eSAqLwotICBjaGFyIHV0X2lkWzRdOyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEluaXR0YWIgaWQgKi8KLSAgY2hhciB1dF91c2VyW1VUX05BTUVTSVpFXTsgICAg ICAgICAgICAvKiBVc2VybmFtZSAobm90IE5VTCB0ZXJtaW5hdGVkKSAqLwotCi0gIGNoYXIgdXRf aG9zdFtVVF9IT1NUU0laRV07ICAgICAgICAgICAgLyogSG9zdG5hbWUgZm9yIHJlbW90ZSBsb2dp biAqLwotICBzdHJ1Y3QgZXhpdF9zdGF0dXMgdXRfZXhpdDsgICAgICAgICAgIC8qIEV4aXQgc3Rh dHVzICovCi0gIGxvbmcgdXRfc2Vzc2lvbjsgICAgICAgICAgICAgICAgICAgICAgLyogU2Vzc2lv biBJRCwgdXNlZCBmb3Igd2luZG93aW5nICovCi0gIHN0cnVjdCB0aW1ldmFsIHV0X3R2OyAgICAg ICAgICAgICAgICAgLyogVGltZSBlbnRyeSB3YXMgbWFkZSAqLwotICBpbnQzMl90IHV0X2FkZHJf djZbNF07ICAgICAgICAgICAgICAgIC8qIEludGVybmV0IGFkZHJlc3Mgb2YgcmVtb3RlIGhvc3Qg Ki8KLSAgY2hhciBwYWRbMjBdOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCAq LwotfTsKLQotI2RlZmluZSB1dF90aW1lIHV0X3R2LnR2X3NlYyAgICAvKiBXaHkgc2hvdWxkIExp bnV4IGJlIGxpa2UgYW55dGhpbmcgZWxzZT8gKi8KLSNkZWZpbmUgdXRfbmFtZSB1dF91c2VyICAg ICAgICAgLyogLi4uICovCi0KLWV4dGVybiB2b2lkCi1sb2d3dG1wIF9fUCAoKF9fY29uc3QgY2hh ciAqX191dF9saW5lLCBfX2NvbnN0IGNoYXIgKl9fdXRfbmFtZSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBjaGFyICpfX3V0X2hvc3QpKTsKLQotI2Vsc2UgIC8qIE5vdCBVVE1Q QlVHICovCi0KLSNpZm5kZWYgSEFWRVVUTVBYICAgICAgICAgICAgICAgICAgICAgICAvKiBXaG8g aGFzIDx1dG1weC5oPiAqLwotI2lmZGVmIFNPTEFSSVMKLSNkZWZpbmUgSEFWRVVUTVBYCi0jZWxz ZQotI2lmZGVmIElSSVg2MAotI2RlZmluZSBIQVZFVVRNUFgKLSNlbHNlCi0jaWZkZWYgQ0tfU0NP VjUKLSNkZWZpbmUgSEFWRVVUTVBYCi0jZWxzZQotI2lmZGVmIEhQVVgxMDAKLSNkZWZpbmUgSEFW RVVUTVBYCi0jZWxzZQotI2lmZGVmIFVOSVhXQVJFCi0jZGVmaW5lIEhBVkVVVE1QWAotI2VuZGlm IC8qIFVOSVhXQVJFICovCi0jZW5kaWYgLyogSFBVWDEwMCAqLwotI2VuZGlmIC8qIENLX1NDT1Y1 ICovCi0jZW5kaWYgLyogSVJJWDYwICovCi0jZW5kaWYgLyogU09MQVJJUyAqLwotI2VuZGlmIC8q IEhBVkVVVE1QWCAqLwotCi0jaWZkZWYgSEFWRVVUTVBYCi0jaW5jbHVkZSA8dXRtcHguaD4KLSNl bHNlCi0jaWZkZWYgT1NGNTAKLS8qIEJlY2F1c2UgdGhlIHRpbWVfdCBpbiB0aGUgdXRtcCBzdHJ1 Y3QgaXMgNjQgYml0cyBidXQgdGltZSgpIHdhbnRzIDMyICovCi0jZGVmaW5lIF9fVjQwX09CSl9D T01QQVQgMQotI2VuZGlmIC8qIE9TRjUwICovCi0jaW5jbHVkZSA8dXRtcC5oPgotI2lmZGVmIE9T RjUwCi0jdW5kZWYgX19WNDBfT0JKX0NPTVBBVAotI2VuZGlmIC8qIE9TRjUwICovCi0jZW5kaWYg LyogSEFWRVVUTVBYICovCi0jZW5kaWYgLyogVVRNUEJVRyAqLwotCi0jaWZkZWYgSEFWRVVUTVBY Ci0jZGVmaW5lIFVUTVBTVFJVQ1QgdXRtcHgKLSNlbHNlCi0jZGVmaW5lIFVUTVBTVFJVQ1QgdXRt cAotI2VuZGlmCS8qIEhBVkVVVE1QWCAqLwotCi0jaWZuZGVmIFdUTVBGSUxFCi0jaWZkZWYgUU5Y Ci0jZGVmaW5lIFdUTVBGSUxFICIvdXNyL2FkbS93dG1wLjEiCi0jZWxzZQotI2lmZGVmIExJTlVY Ci0jZGVmaW5lIFdUTVBGSUxFICIvdmFyL2xvZy93dG1wIgotI2Vsc2UKLSNkZWZpbmUgV1RNUEZJ TEUgIi91c3IvYWRtL3d0bXAiCi0jZW5kaWYgLyogUU5YICovCi0jZW5kaWYgLyogTElOVVggKi8K LSNlbmRpZiAvKiBXVE1QRklMRSAqLwotY2hhciAqIHd0bXBmaWxlID0gTlVMTDsKLQotc3RhdGlj IGludCB3dG1wZmQgPSAwOwotc3RhdGljIGNoYXIgY2tzeXNsaW5lWzMyXSA9IHsgTlVMLCBOVUwg fTsKLQotI2lmbmRlZiBIQVZFVVRIT1NUICAgICAgICAgICAgICAgICAgICAgIC8qIERvZXMgdXRt cCBpbmNsdWRlIHV0X2hvc3RbXT8gKi8KLSNpZmRlZiBIQVZFVVRNUFggICAgICAgICAgICAgICAg ICAgICAgICAvKiB1dG1weCBhbHdheXMgZG9lcyAqLwotI2RlZmluZSBIQVZFVVRIT1NUCi0jZWxz ZQotI2lmZGVmIExJTlVYICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExpbnV4IGRvZXMg Ki8KLSNkZWZpbmUgSEFWRVVUSE9TVAotI2Vsc2UKLSNpZmRlZiBTVU5PUzQgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBTdW5PUyBkb2VzICovCi0jZGVmaW5lIEhBVkVVVEhPU1QKLSNlbHNl Ci0jaWZkZWYgQUlYNDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQUlYIDQuMSBhbmQg bGF0ZXIgZG8gKi8KLSNkZWZpbmUgSEFWRVVUSE9TVAotI2VuZGlmIC8qIEFJWDQxICovCi0jZW5k aWYgLyogU1VOT1M0ICovCi0jZW5kaWYgLyogTElOVVggKi8KLSNlbmRpZiAvKiBIQVZFVVRNUFgg Ki8KLSNlbmRpZiAvKiBIQVZFVVRIT1NUICovCi0KLSNpZmRlZiBVVzIwMAotUElEX1QgX3Zmb3Jr KCkgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRvIHNhdGlzZnkgYSBsaWJyYXJ5IGZvdWx1 cCAqLwotICAgIHJldHVybihmb3JrKCkpOyAgICAgICAgICAgICAgICAgICAgIC8qIGluIFVuaXh3 YXJlIDIuMC54ICovCi19Ci0jZW5kaWYgLyogVVcyMDAgKi8KLQotVk9JRAotI2lmZGVmIENLX0FO U0lDCi1sb2d3dG1wKGNvbnN0IGNoYXIgKiBsaW5lLCBjb25zdCBjaGFyICogbmFtZSwgY29uc3Qg Y2hhciAqIGhvc3QpCi0jZWxzZQotbG9nd3RtcChsaW5lLCBuYW1lLCBob3N0KSBjaGFyICpsaW5l LCAqbmFtZSwgKmhvc3Q7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGxvZ3d0bXAgKi8gewot ICAgIHN0cnVjdCBVVE1QU1RSVUNUIHV0OwotICAgIHN0cnVjdCBzdGF0IGJ1ZjsKLSAgICAvKiB0 aW1lX3QgdGltZSgpOyAqLwotCi0gICAgaWYgKCFja3h3dG1wKQotICAgICAgcmV0dXJuOwotCi0g ICAgaWYgKCF3dG1wZmlsZSkKLSAgICAgIG1ha2VzdHIoJnd0bXBmaWxlLFdUTVBGSUxFKTsKLQot ICAgIGlmICghbGluZSkgbGluZSA9ICIiOwotICAgIGlmICghbmFtZSkgbmFtZSA9ICIiOwotICAg IGlmICghaG9zdCkgaG9zdCA9ICIiOwotCi0gICAgaWYgKCF3dG1wZmQgJiYgKHd0bXBmZCA9IG9w ZW4od3RtcGZpbGUsIE9fV1JPTkxZfE9fQVBQRU5ELCAwKSkgPCAwKSB7Ci0gICAgICAgIGNreHd0 bXAgPSAwOwotICAgICAgICBkZWJ1ZyhGMTEwLCJXVE1QIG9wZW4gZmFpbGVkIixsaW5lLDApOwot ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghZnN0YXQod3RtcGZkLCAmYnVmKSkgewot ICAgICAgICBja3N0cm5jcHkodXQudXRfbGluZSwgbGluZSwgc2l6ZW9mKHV0LnV0X2xpbmUpKTsK LSNpZmRlZiBGUkVFQlNEOQotICAgICAgICBja3N0cm5jcHkodXQudXRfdXNlciwgbmFtZSwgc2l6 ZW9mKHV0LnV0X3VzZXIpKTsKLSNlbHNlCi0gICAgICAgIGNrc3RybmNweSh1dC51dF9uYW1lLCBu YW1lLCBzaXplb2YodXQudXRfbmFtZSkpOwotI2VuZGlmCS8qIEZSRUVCU0Q5ICovCi0jaWZkZWYg SEFWRVVUSE9TVAotICAgICAgICAvKiBOb3QgcG9ydGFibGUgKi8KLSAgICAgICAgY2tzdHJuY3B5 KHV0LnV0X2hvc3QsIGhvc3QsIHNpemVvZih1dC51dF9ob3N0KSk7Ci0jZW5kaWYgLyogSEFWRVVU SE9TVCAqLwotI2lmZGVmIEhBVkVVVE1QWAotICAgICAgICB0aW1lKCZ1dC51dF90di50dl9zZWMp OwotI2Vsc2UKLSNpZmRlZiBMSU5VWAotLyogSW4gbGlnaHQgb2YgdGhlIGZvbGxvd2luZyBjb21t ZW50IHBlcmhhcHMgdGhlIHByZXZpb3VzIGxpbmUgc2hvdWxkICovCi0vKiBiZSAiI2lmbmRlZiBD T01NRU5UIi4gKi8KLSAgICAgICAgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIE9u IDY0LWJpdCBwbGF0Zm9ybXMgc2l6ZW9mKHRpbWVfdCkgYW5kIHNpemVvZih1dC51dF90aW1lKQot ICAgICAgICAgICAgICogYXJlIG5vdCB0aGUgc2FtZSBhbmQgYXR0ZW1wdCB0byB1c2UgYW4gYWRk cmVzcyBvZgotICAgICAgICAgICAgICogdXQudXRfdGltZSBhcyBhbiBhcmd1bWVudCB0byB0aW1l KCkgY2FsbCBtYXkgY2F1c2UKLSAgICAgICAgICAgICAqICJ1bmFsaWduZWQgYWNjZXNzIiB0cmFw LgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICB0aW1lX3Qgeno7Ci0gICAgICAgICAgICB0 aW1lKCZ6eik7Ci0gICAgICAgICAgICB1dC51dF90aW1lID0geno7Ci0gICAgICAgIH0KLSNlbHNl Ci0jaWZkZWYgQ0tfNjRCSVQKLSAgICAgICAgewotCSAgICAvKiBOb3cgKEphbiAyMDA2KSB3ZSBj YW4gZG8gdGhpcyBmb3IgYW55IDY0LWJpdCBidWlsZCAqLwotICAgICAgICAgICAgdGltZV90IHp6 OwotICAgICAgICAgICAgdGltZSgmenopOwotICAgICAgICAgICAgdXQudXRfdGltZSA9IHp6Owot ICAgICAgICB9Ci0jZWxzZQotICAgICAgICB0aW1lKCZ1dC51dF90aW1lKTsKLSNlbmRpZgkvKiBD S182NEJJVCAqLwotI2VuZGlmIC8qIExJTlVYICovCi0jZW5kaWYgLyogSEFWRVVUTVBYICovCi0g ICAgICAgIGlmICh3cml0ZSh3dG1wZmQsIChjaGFyICopJnV0LCBzaXplb2Yoc3RydWN0IFVUTVBT VFJVQ1QpKSAhPQotICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBVVE1QU1RSVUNUKSkgewotI2lm bmRlZiBOT0ZUUlVOQ0FURQotI2lmbmRlZiBDT0hFUkVOVAotICAgICAgICAgICAgZnRydW5jYXRl KHd0bXBmZCwgYnVmLnN0X3NpemUpOyAvKiBFcnJvciwgdW5kbyBhbnkgcGFydGlhbCB3cml0ZSAq LwotI2Vsc2UKLSAgICAgICAgICAgIGNoc2l6ZSh3dG1wZmQsIGJ1Zi5zdF9zaXplKTsgLyogRXJy b3IsIHVuZG8gYW55IHBhcnRpYWwgd3JpdGUgKi8KLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotI2Vu ZGlmIC8qIE5PRlRSVU5DQVRFICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJXVE1QIHdyaXRl IGVycm9yIixsaW5lLDApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVidWcoRjEx MCwiV1RNUCByZWNvcmQgT0siLGxpbmUsMCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg IH0KLSAgICB9Ci19Ci0jZW5kaWYgLyogQ0tXVE1QICovCi0KLSNpZmRlZiBDS1NZU0xPRwotLyoK LSAgQyBLIFMgWSBTIEwgTyBHICAtLSAgQy1LZXJtaXQgc3lzdGVtIGxvZ2dpbmcgZnVuY3Rpb24s Ci0KLSAgRm9yIHVzZSBieSBvdGhlciBtb2R1bGVzLgotICBUaGlzIG1vZHVsZSBjYW4sIGJ1dCBk b2Vzbid0IGhhdmUgdG8sIHVzZSBpdC4KLSAgQ2FsbCB3aXRoOgotICAgIG4gPSBTWVNMR194eCB2 YWx1ZXMgZGVmaW5lZCBpbiBja2NkZWIuaAotICAgIHMxLCBzMiwgczM6IHN0cmluZ3MuCi0qLwot Vk9JRAotY2tzeXNsb2cobiwgbSwgczEsIHMyLCBzMykgaW50IG4sIG07IGNoYXIgKiBzMSwgKiBz MiwgKiBzMzsgewotICAgIGludCBsZXZlbDsKLQotICAgIGlmICghY2t4bG9nZ2luZykgICAgICAg ICAgICAgICAgICAgIC8qIHN5c2xvZ2dpbmcgKi8KLSAgICAgIHJldHVybjsKLSAgICBpZiAoIXMx KSBzMSA9ICIiOyAgICAgICAgICAgICAgICAgICAvKiBGaXggbnVsbCBhcmdzICovCi0gICAgaWYg KCFzMikgczIgPSAiIjsKLSAgICBpZiAoIXMzKSBzMyA9ICIiOwotICAgIHN3aXRjaCAobikgeyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zbGF0ZSBLZXJtaXQgbGV2ZWwgKi8KLSAgICAg IGNhc2UgU1lTTEdfREI6ICAgICAgICAgICAgICAgICAgICAvKiB0byBzeXNsb2cgbGV2ZWwgKi8K LSAgICAgICAgbGV2ZWwgPSBMT0dfREVCVUc7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVs dDoKLSAgICAgICAgbGV2ZWwgPSBtID8gTE9HX0lORk8gOiBMT0dfRVJSOwotICAgIH0KLSAgICBk ZWJ1ZyhGMTEwLCJja3N5c2xvZyBzMSIsczEsMCk7Ci0gICAgZGVidWcoRjExMCwiY2tzeXNsb2cg czIiLHMyLDApOwotICAgIGRlYnVnKEYxMTAsImNrc3lzbG9nIHMzIixzMywwKTsKLSAgICBlcnJu byA9IDA7Ci0gICAgc3lzbG9nKGxldmVsLCAiJXM6ICVzICVzIiwgczEsIHMyLCBzMyk7IC8qIFdy aXRlIHN5c2xvZyByZWNvcmQgKi8KLSAgICBkZWJ1ZyhGMTAxLCJja3N5c2xvZyBlcnJubyIsIiIs ZXJybm8pOwotfQotI2VuZGlmIC8qIENLU1lTTE9HICovCi0KLQotLyogRGVjbGFyYXRpb25zICov Ci0KLWludCBtYXhuYW0gPSBNQVhOQU1MRU47ICAgICAgICAgICAgICAgICAvKiBBdmFpbGFibGUg dG8gdGhlIG91dHNpZGUgKi8KLWludCBtYXhwYXRoID0gTUFYUEFUSDsKLWludCBja196bmV3biA9 IC0xOwotCi0jaWZkZWYgVU5JWAotY2hhciBzdGFydHVwZGlyW01BWFBBVEgrMV07Ci0jZW5kaWYg LyogVU5JWCAqLwotCi1pbnQgcGV4aXRzdGF0ID0gLTI7ICAgICAgICAgICAgICAgICAgICAgLyog UHJvY2VzcyBleGl0IHN0YXR1cyAqLwotCi1GSUxFICpmcFtaTkZJTFNdID0geyAgICAgICAgICAg ICAgICAgICAgLyogRmlsZSBwb2ludGVycyAqLwotICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAotfTsK LQotLyogRmxhZ3MgZm9yIGVhY2ggZmlsZSBpbmRpY2F0aW5nIHdoZXRoZXIgaXQgd2FzIG9wZW5l ZCB3aXRoIHBvcGVuKCkgKi8KLWludCBpc3BpcGVbWk5GSUxTXSA9IHsgMCwgMCwgMCwgMCwgMCwg MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OwotCi0vKiBCdWZmZXJzIGFuZCBwb2ludGVycyB1c2Vk IGluIGJ1ZmZlcmVkIGZpbGUgaW5wdXQgYW5kIG91dHB1dC4gKi8KLSNpZmRlZiBEWU5BTUlDCi1l eHRlcm4gY2hhciAqemluYnVmZmVyLCAqem91dGJ1ZmZlcjsKLSNlbHNlCi1leHRlcm4gY2hhciB6 aW5idWZmZXJbXSwgem91dGJ1ZmZlcltdOwotI2VuZGlmIC8qIERZTkFNSUMgKi8KLWV4dGVybiBj aGFyICp6aW5wdHIsICp6b3V0cHRyOwotZXh0ZXJuIGludCB6aW5jbnQsIHpvdXRjbnQ7Ci1leHRl cm4gaW50IHdpbGR4cGFuZCwgd2lsZGVuYTsJCS8qIFdpbGRjYXJkIGhhbmRsaW5nICovCi0KLXN0 YXRpYyBDS19PRkZfVCBpZmxlbiA9IChDS19PRkZfVCktMTsJLyogSW5wdXQgZmlsZSBsZW5ndGgg Ki8KLQotc3RhdGljIFBJRF9UIHBpZCA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIHBpZCBvZiBj aGlsZCBmb3JrICovCi1zdGF0aWMgaW50IGZjb3VudCA9IDA7ICAgICAgICAgICAgICAgICAgLyog TnVtYmVyIG9mIGZpbGVzIGluIHdpbGQgZ3JvdXAgKi8KLXN0YXRpYyBpbnQgbnhwYW5kID0gMDsg ICAgICAgICAgICAgICAgICAvKiBDb3B5IG9mIGZjb3VudCAqLwotc3RhdGljIGNoYXIgbmFtYnVm W0NLTUFYUEFUSCs0XTsgICAgICAgIC8qIEJ1ZmZlciBmb3IgYSBwYXRobmFtZSAqLwotCi0jaWZu ZGVmIE5PRlJJTExTCi0jZGVmaW5lIFpNQlVGTEVOIDIwMAotc3RhdGljIGNoYXIgem1idWZbWk1C VUZMRU5dOwkJLyogRm9yIG1haWwsIHJlbW90ZSBwcmludCBzdHJpbmdzICovCi0jZW5kaWYgLyog Tk9GUklMTFMgKi8KLQotY2hhciAqKm10Y2hzID0gTlVMTDsgICAgICAgICAgICAgICAgICAgIC8q IE1hdGNoZXMgZm91bmQgZm9yIGZpbGVuYW1lICovCi1jaGFyICoqbXRjaHB0ciA9IE5VTEw7ICAg ICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBjdXJyZW50IG1hdGNoICovCi0KLS8qICBaIEsg UyBFIEwgRiAgLS0gIEtpbGwgU2VsZjogbG9nIG91dCBvd24gam9iLCBpZiBwb3NzaWJsZS4gICov Ci0KLS8qIE5vdGUsIHNob3VsZCBnZXQgY3VycmVudCBwaWQsIGJ1dCBpZiB5b3VyIHN5c3RlbSBk b2Vzbid0IGhhdmUgKi8KLS8qIGdldHBwaWQoKSwgdGhlbiBqdXN0IGtpbGwoMCw5KS4uLiAgKi8K LQotI2lmbmRlZiBTVlIzCi0jaWZuZGVmIFBPU0lYCi0jaWZuZGVmIE9TRlBDCi0vKiBBbHJlYWR5 IGRlY2xhcmVkIGluIHVuaXN0ZC5oIGZvciBTVlIzIGFuZCBQT1NJWCAqLwotI2lmZGVmIENLX0FO U0lDCi1leHRlcm4gUElEX1QgZ2V0cHBpZCh2b2lkKTsKLSNlbHNlCi0jaWZuZGVmIFBTMkFJWDEw Ci0jaWZuZGVmIENPSEVSRU5UCi1leHRlcm4gUElEX1QgZ2V0cHBpZCgpOwotI2VuZGlmIC8qIENP SEVSRU5UICovCi0jZW5kaWYgLyogUFMyQUlYMTAgKi8KLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot I2VuZGlmIC8qIE9TRlBDICovCi0jZW5kaWYgLyogUE9TSVggKi8KLSNlbmRpZiAvKiBTVlIzICov Ci0KLWludAotemtzZWxmKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciAi YnllIiwgYnV0IG5vIGd1YXJhbnRlZSEgKi8KLSNpZmRlZiBQUk9WWDEKLSAgICByZXR1cm4oa2ls bCgwLDkpKTsKLSNlbHNlCi0jaWZkZWYgVjcKLSAgICByZXR1cm4oa2lsbCgwLDkpKTsKLSNlbHNl Ci0jaWZkZWYgVE9XRVIxCi0gICAgcmV0dXJuKGtpbGwoMCw5KSk7Ci0jZWxzZQotI2lmZGVmIEZU MTgKLSAgICByZXR1cm4oa2lsbCgwLDkpKTsKLSNlbHNlCi0jaWZkZWYgYWVnaXMKLSAgICByZXR1 cm4oa2lsbCgwLDkpKTsKLSNlbHNlCi0jaWZkZWYgQ09IRVJFTlQKLSAgICByZXR1cm4oa2lsbCgo UElEX1QpZ2V0cGlkKCksMSkpOwotI2Vsc2UKLSNpZmRlZiBQSURfVAotICAgIGV4aXQoa2lsbCgo UElEX1QpZ2V0cHBpZCgpLDEpKTsKLSAgICByZXR1cm4oMCk7Ci0jZWxzZQotICAgIGV4aXQoa2ls bChnZXRwcGlkKCksMSkpOwotICAgIHJldHVybigwKTsKLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYK LSNlbmRpZgotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotfQotCi1zdGF0aWMgVk9JRAotZ2V0ZnVs bG5hbWUobmFtZSkgY2hhciAqIG5hbWU7IHsKLSAgICBjaGFyICpwID0gKGNoYXIgKilmdWxsbmFt ZTsKLSAgICBpbnQgbGVuID0gMDsKLSAgICBmdWxsbmFtZVswXSA9ICdcMCc7Ci0gICAgLyogSWYg bmVjZXNzYXJ5IHdlIGNvdWxkIGFsc28gY2hhc2UgZG93biBzeW1saW5rcyBoZXJlLi4uICovCi0j aWZkZWYgQ09NTUVOVAotICAgIC8qIFRoaXMgd29ya3MgYnV0IGlzIGluY29tcGF0aWJsZSB3aXRo IHd1ZnRwZCAqLwotICAgIGlmIChpc2d1ZXN0ICYmIGFub25yb290KSB7Ci0gICAgICAgIGNrc3Ry bmNweShmdWxsbmFtZSxhbm9ucm9vdCxDS01BWFBBVEgpOwotICAgICAgICBsZW4gPSBzdHJsZW4o ZnVsbG5hbWUpOwotICAgICAgICBpZiAobGVuID4gMCkKLSAgICAgICAgICBpZiAoZnVsbG5hbWVb bGVuLTFdID09ICcvJykKLSAgICAgICAgICAgIGxlbi0tOwotICAgIH0KLSAgICBwICs9IGxlbjsK LSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgemZucWZwKG5hbWUsIENLTUFYUEFUSCAtIGxlbiwg cCk7Ci0gICAgd2hpbGUgKCpwKSB7Ci0gICAgICAgIGlmICgqcCA8ICchJykgKnAgPSAnXyc7Ci0g ICAgICAgIHArKzsKLSAgICB9Ci19Ci0KLS8qICBEIE8gSSBLIEwgTyBHICAtLSAgT3BlbiBLZXJt aXQtc3BlY2lmaWMgZnRwLWxpa2UgdHJhbnNmZXIgbG9nLiAqLwotCi1WT0lEICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2FsbGVkIGluIGNrY21haS5jICovCi1kb2lrbG9n KCkgewotICAgIGlmIChpa2xvZ29wZW4pICAgICAgICAgICAgICAgICAgICAgIC8qIEFscmVhZHkg b3Blbj8gKi8KLSAgICAgIHJldHVybjsKLSAgICBpZiAoeGZlcmxvZykgeyAgICAgICAgICAgICAg ICAgICAgICAvKiBPcGVuIGlrc2QgbG9nIGlmIHJlcXVlc3RlZCAqLwotICAgICAgICBpZiAoIXhm ZXJmaWxlKSAgICAgICAgICAgICAgICAgIC8qIElmIG5vIHBhdGhuYW1lIGdpdmVuICovCi0gICAg ICAgICAgbWFrZXN0cigmeGZlcmZpbGUsWEZFUkZJTEUpOwkvKiB1c2UgdGhpcyBkZWZhdWx0ICov Ci0gICAgICAgIGlmICgqeGZlcmZpbGUpIHsKLSAgICAgICAgICAgIHhmZXJsb2cgPSBvcGVuKHhm ZXJmaWxlLCBPX1dST05MWSB8IE9fQVBQRU5EIHwgT19DUkVBVCwgMDY2MCk7Ci0gICAgICAgICAg ICBkZWJ1ZyhGMTAxLCJkb2lrbG9nIG9wZW4iLCIiLHhmZXJsb2cpOwotICAgICAgICAgICAgaWYg KHhmZXJsb2cgPCAwKSB7Ci0jaWZkZWYgQ0tTWVNMT0cKLSAgICAgICAgICAgICAgICBzeXNsb2co TE9HX0VSUiwgInhmZXJsb2cgb3BlbiBmYWlsdXJlICVzOiAlbSIsIHhmZXJmaWxlKTsKLSNlbmRp ZiAvKiBDS1NZU0xPRyAqLwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImRvaWtsb2cgb3Bl biBlcnJubyIsIiIsZXJybm8pOwotICAgICAgICAgICAgICAgIHhmZXJsb2cgPSAwOwotICAgICAg ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgIGlrbG9nb3BlbiA9IDE7Ci0gICAgICAgIH0gZWxz ZQotICAgICAgICAgIHhmZXJsb2cgPSAwOwotI2lmZGVmIENLU1lTTE9HCi0gICAgICAgIGlmICh4 ZmVybG9nICYmIGNreGxvZ2dpbmcpCi0gICAgICAgICAgc3lzbG9nKExPR19JTkZPLCAieGZlcmxv ZzogJXMgb3BlbiBvayIsIHhmZXJmaWxlKTsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotICAgIH0K LX0KLQotLyogIFogTyBQIEUgTiBJICAtLSAgT3BlbiBhbiBleGlzdGluZyBmaWxlIGZvciBpbnB1 dC4gKi8KLQotLyogUmV0dXJucyAxIG9uIHN1Y2Nlc3MsIDAgb24gZmFpbHVyZSAqLwotCi1pbnQK LXpvcGVuaShuLG5hbWUpIGludCBuOyBjaGFyICpuYW1lOyB7Ci0gICAgaW50IHg7Ci0KLSAgICBk ZWJ1ZyhGMTExLCJ6b3BlbmkiLG5hbWUsbik7Ci0gICAgaWYgKCh4ID0gY2hrZm4obikpICE9IDAp IHsKLQlkZWJ1ZyhGMTExLCJ6b3BlbmkgY2hrZm4iLGNraXRvYShuKSx4KTsKLQlyZXR1cm4oMCk7 Ci0gICAgfQotICAgIHppbmNudCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0 IGlucHV0IGJ1ZmZlciAqLwotICAgIGlmIChuID09IFpTWVNGTikgeyAgICAgICAgICAgICAgICAg IC8qIElucHV0IGZyb20gYSBzeXN0ZW0gZnVuY3Rpb24/ICovCi0jaWZkZWYgQ09NTUVOVAotLyoq KiBOb3RlLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgY2FsbGVkIHdpdGggWlNZU0ZOICoq Ki8KLS8qKiogQWx3YXlzIGNhbGwgenhjbWQoKSBkaXJlY3RseSwgYW5kIGdpdmUgaXQgdGhlIHJl YWwgZmlsZSBudW1iZXIgKioqLwotLyoqKiB5b3Ugd2FudCB0byB1c2UuICAqKiovCi0gICAgICAg IHJldHVybih6eGNtZChuLG5hbWUpKTsgICAgICAgICAgLyogVHJ5IHRvIGZvcmsgdGhlIGNvbW1h bmQgKi8KLSNlbHNlCi0gICAgICAgIGRlYnVnKEYxMTAsInpvcGVuaSBjYWxsZWQgd2l0aCBaU1lT Rk4sIGZhaWxpbmchIixuYW1lLDApOwotICAgICAgICAqbmFtYnVmID0gJ1wwJzsgICAgICAgICAg ICAgICAgIC8qIE5vIGZpbGVuYW1lLiAqLwotICAgICAgICByZXR1cm4oMCk7ICAgICAgICAgICAg ICAgICAgICAgIC8qIGZhaWwuICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIH0KLSAgICBp ZiAobiA9PSBaU1RESU8pIHsgICAgICAgICAgICAgICAgICAvKiBTdGFuZGFyZCBpbnB1dD8gKi8K LSAgICAgICAgaWYgKGlzX2FfdHR5KDApKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwi VGVybWluYWwgaW5wdXQgbm90IGFsbG93ZWQiKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsInpv cGVuaTogYXR0ZW1wdHMgaW5wdXQgZnJvbSB1bnJlZGlyZWN0ZWQgc3RkaW4iLCIiLDApOwotICAg ICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICB9Ci0gICAgICAgIGZwW1pJRklMRV0gPSBzdGRp bjsKLSAgICAgICAgaXNwaXBlW1pJRklMRV0gPSAwOwotICAgICAgICByZXR1cm4oMSk7Ci0gICAg fQotI2lmZGVmIENLUk9PVAotICAgIGRlYnVnKEYxMTEsInpvcGVuaSBzZXRyb290Iixja3Jvb3Qs Y2tyb290c2V0KTsKLSAgICBpZiAoY2tyb290c2V0KSBpZiAoIXppbnJvb3QobmFtZSkpIHsKLQlk ZWJ1ZyhGMTEwLCJ6b3Blbmkgc2V0cm9vdCB2aW9sYXRpb24iLG5hbWUsMCk7Ci0JcmV0dXJuKDAp OwotICAgIH0KLSNlbmRpZiAvKiBDS1JPT1QgKi8KLSAgICBmcFtuXSA9IGZvcGVuKG5hbWUsInIi KTsgICAgICAgICAgICAvKiBSZWFsIGZpbGUsIG9wZW4gaXQuICovCi0gICAgLyogZGVidWcoRjEx MSwiem9wZW5pIGZvcGVuIiwgbmFtZSwgZnBbbl0pOyAqLwotI2lmZGVmIFpERUJVRwotICAgIC8q IHByaW50ZigiWk9QRU5JIGZwWyVkXT0lbGRcbiIsbixmcFtuXSk7ICovCi0jZW5kaWYgLyogWkRF QlVHICovCi0gICAgaXNwaXBlW25dID0gMDsKLQotICAgIGlmICh4ZmVybG9nCi0jaWZkZWYgQ0tT WVNMT0cKLSAgICAgICAgfHwgKChja3hzeXNsb2cgPj0gU1lTTEdfRkEpICYmIGNreGxvZ2dpbmcp Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICAgICAgKSB7Ci0gICAgICAgIGdldGZ1bGxuYW1l KG5hbWUpOwotICAgICAgICBkZWJ1ZyhGMTEwLCJ6b3BlbmkgZnVsbG5hbWUiLGZ1bGxuYW1lLDAp OwotICAgIH0KLSAgICBpZiAoZnBbbl0gPT0gTlVMTCkgewotI2lmZGVmIENLU1lTTE9HCi0gICAg ICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfRkEgJiYgY2t4bG9nZ2luZykgewotCSAgICBzeXNs b2coTE9HX0lORk8sICJmaWxlWyVkXSAlczogb3BlbiBmYWlsZWQgKCVtKSIsIG4sIGZ1bGxuYW1l KTsKLQkgICAgcGVycm9yKGZ1bGxuYW1lKTsKLQl9IGVsc2UKLSNlbmRpZiAvKiBDS1NZU0xPRyAq LwotCSAgcGVycm9yKG5hbWUpOwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfSBlbHNlIHsKLSNp ZmRlZiBDS1NZU0xPRwotICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX0ZBICYmIGNreGxv Z2dpbmcpCi0gICAgICAgICAgc3lzbG9nKExPR19JTkZPLCAiZmlsZVslZF0gJXM6IG9wZW4gcmVh ZCBvayIsIG4sIGZ1bGxuYW1lKTsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotICAgICAgICBjbGVh cmVycihmcFtuXSk7Ci0gICAgICAgIHJldHVybigxKTsKLSAgICB9Ci19Ci0KLSNpZmRlZiBRTlgK LSNkZWZpbmUgRE9OREVMQVkKLSNlbHNlCi0jaWZkZWYgT19OREVMQVkKLSNkZWZpbmUgRE9OREVM QVkKLSNlbmRpZiAvKiBPX05ERUxBWSAqLwotI2VuZGlmIC8qIFFOWCAqLwotCi0vKiAgWiBPIFAg RSBOIE8gIC0tICBPcGVuIGEgbmV3IGZpbGUgZm9yIG91dHB1dC4gICovCi0KLS8qQVJHU1VTRUQq LwkvKiB6eiBub3QgdXNlZCAqLwotaW50Ci16b3Blbm8obixuYW1lLHp6LGZjYikKLS8qIHpvcGVu byAqLyAgaW50IG47IGNoYXIgKm5hbWU7IHN0cnVjdCB6YXR0ciAqeno7IHN0cnVjdCBmaWxpbmZv ICpmY2I7IHsKLQotICAgIGNoYXIgcFs4XTsKLSAgICBpbnQgYXBwZW5kID0gMDsKLSAgICBpbnQg aXN0dHkgPSAwLCBmaWxlZmQgPSAwOwotCi0vKiBBcyBvZiBWZXJzaW9uIDVBLCB0aGUgYXR0cmli dXRlIHN0cnVjdHVyZSBhbmQgdGhlIGZpbGUgaW5mb3JtYXRpb24gKi8KLS8qIHN0cnVjdHVyZSBh cmUgaW5jbHVkZWQgaW4gdGhlIGFyZ2xpc3QuICovCi0KLSNpZmRlZiBERUJVRwotICAgIGRlYnVn KEYxMTEsInpvcGVubyIsbmFtZSxuKTsKLSAgICBpZiAoZmNiKSB7Ci0gICAgICAgIGRlYnVnKEYx MDEsInpvcGVubyBmY2IgZGlzcCIsIiIsZmNiLT5kc3ApOwotICAgICAgICBkZWJ1ZyhGMTAxLCJ6 b3Blbm8gZmNiIHR5cGUiLCIiLGZjYi0+dHlwKTsKLSAgICAgICAgZGVidWcoRjEwMSwiem9wZW5v IGZjYiBjaGFyIiwiIixmY2ItPmNzKTsKLSAgICB9IGVsc2UgewotICAgICAgICBkZWJ1ZyhGMTAw LCJ6b3Blbm8gZmNiIGlzIE5VTEwiLCIiLDApOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwot Ci0gICAgaWYgKGNoa2ZuKG4pICE9IDApICAgICAgICAgICAgICAgICAgLyogQWxyZWFkeSBvcGVu PyAqLwotICAgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdGhpbmcg dG8gZG8uICovCi0KLSAgICBpZiAoKG4gPT0gWkNURVJNKSB8fCAobiA9PSBaU1RESU8pKSB7IC8q IFRlcm1pbmFsIG9yIHN0YW5kYXJkIG91dHB1dCAqLwotICAgICAgICBmcFtaT0ZJTEVdID0gc3Rk b3V0OwotICAgICAgICBpc3BpcGVbWk9GSUxFXSA9IDA7Ci0jaWZkZWYgQ09NTUVOVAotCS8qIFRo aXMgc2VlbXMgcmlnaHQgYnV0IGl0IGJyZWFrcyBjbGllbnQgc2VydmVyIG9wcyAqLwotCWZwW25d ID0gc3Rkb3V0OwotICAgICAgICBpc3BpcGVbbl0gPSAwOwotI2VuZGlmIC8qIENPTU1FTlQgKi8K LSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgREVCVUcKLSAgICAgICAgaWYgKG4gIT0gWkRGSUxFKQot ICAgICAgICAgIGRlYnVnKEYxMDEsInpvcGVubyBmcFtuXT1zdGRvdXQiLCIiLGZwW25dKTsKLSNl bmRpZiAvKiBERUJVRyAqLwotI2VuZGlmCS8qIENPTU1FTlQgKi8KLSAgICAgICAgem91dGNudCA9 IDA7Ci0gICAgICAgIHpvdXRwdHIgPSB6b3V0YnVmZmVyOwotICAgICAgICByZXR1cm4oMSk7Ci0g ICAgfQotCi0vKiBBIHJlYWwgZmlsZS4gIE9wZW4gaXQgaW4gZGVzaXJlZCBtb2RlIChjcmVhdGUg b3IgYXBwZW5kKS4gKi8KLQotI2lmZGVmIENLUk9PVAotICAgIGRlYnVnKEYxMTEsInpvcGVubyBz ZXRyb290Iixja3Jvb3QsY2tyb290c2V0KTsKLSAgICBpZiAoY2tyb290c2V0KSBpZiAoIXppbnJv b3QobmFtZSkpIHsKLQlkZWJ1ZyhGMTEwLCJ6b3Blbm8gc2V0cm9vdCB2aW9sYXRpb24iLG5hbWUs MCk7Ci0JcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBDS1JPT1QgKi8KLQotICAgIGNrc3Ry bmNweShwLCJ3Iiw4KTsJCQkvKiBBc3N1bWUgd3JpdGUvY3JlYXRlIG1vZGUgKi8KLSAgICBpZiAo ZmNiKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBjYWxsZWQgd2l0aCBhbiBGQ0Iu Li4gKi8KLSAgICAgICAgaWYgKGZjYi0+ZHNwID09IFhZRlpfQSkgeyAgICAgICAvKiBEb2VzIGl0 IHNheSBBcHBlbmQ/ICovCi0gICAgICAgICAgICBja3N0cm5jcHkocCwiYSIsOCk7CQkvKiBZZXMu ICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ6b3Blbm8gYXBwZW5kIiwiIiwwKTsKLSAgICAg ICAgICAgIGFwcGVuZCA9IDE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHhmZXJsb2cKLSNp ZmRlZiBDS1NZU0xPRwotICAgICAgICB8fCAoKGNreHN5c2xvZyA+PSBTWVNMR19GQykgJiYgY2t4 bG9nZ2luZykKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotICAgICAgICApIHsKLSAgICAgICAgZ2V0 ZnVsbG5hbWUobmFtZSk7Ci0gICAgICAgIGRlYnVnKEYxMTAsInpvcGVubyBmdWxsbmFtZSIsZnVs bG5hbWUsMCk7Ci0gICAgfQotICAgIHsKLSAgICAvKiBBbGxvdyB0dHkgZGV2aWNlcyB0byBvcGVu ZWQgYXMgb3V0cHV0IGZpbGVzIDIwMDkvMTAvMjAgKi8KLQlpbnQgZmQsIG1vZGUgPSAwOwotCWRl YnVnKEYxMTAsInpvcGVubyBhdHRlbXB0aW5nIHRvIG9wZW4iLG5hbWUsMCk7Ci0jaWZkZWYgT19O T05CTE9DSwotCW1vZGUgPSBPX05PTkJMT0NLOwotI2Vsc2UKLSNpZmRlZiBPX05ERUxBWQotCW1v ZGUgPSBPX05ERUxBWTsKLSNlbHNlCi0jaWZkZWYgRk5ERUxBWQotCW1vZGUgPSBGTkRFTEFZOwot I2VuZGlmIC8qIEZOREVMQVkgKi8KLSNlbmRpZgkvKiBPX05ERUxBWSAqLwotI2VuZGlmCS8qIE9f Tk9OQkxPQ0sgKi8KLQlkZWJ1ZyhGMTExLCJ6b3Blbm8gb3BlbiBtb2RlIixuYW1lLG1vZGUpOwot CWZkID0gb3BlbihuYW1lLE9fV1JPTkxZLG1vZGUpOwotCWRlYnVnKEYxMTEsInpvcGVubyBvcGVu IixuYW1lLGZkKTsgCi0JaWYgKGZkID4gLTEpIHsKLQkgICAgaWYgKGlzYXR0eShmZCkpIHsKLQkJ ZmlsZWZkID0gZmQ7Ci0JCWlzdHR5Kys7Ci0JICAgIH0KLQl9Ci0gICAgfQotICAgIGRlYnVnKEYx MTEsInpvcGVubyBpc3R0eSIsbmFtZSxpc3R0eSk7Ci0gICAgZGVidWcoRjExMCwiem9wZW5vIGZv cGVuIGFyZyIscCwwKTsKLSAgICBpZiAoaXN0dHkpCi0gICAgICBmcFtuXSA9IGZkb3BlbihmaWxl ZmQscCk7Ci0gICAgZWxzZQotICAgICAgZnBbbl0gPSBmb3BlbihuYW1lLHApOwkJLyogVHJ5IHRv IG9wZW4gdGhlIGZpbGUgKi8KLSAgICBpc3BpcGVbWklGSUxFXSA9IDA7Ci0KLSNpZmRlZiBaREVC VUcKLSAgICBwcmludGYoIlpPUEVOTyBmcFslZF09JWxkXG4iLG4sZnBbbl0pOwotI2VuZGlmIC8q IFpERUJVRyAqLwotCi0gICAgaWYgKGZwW25dID09IE5VTEwpIHsgICAgICAgICAgICAgICAgLyog RmFpbGVkICovCi0gICAgICAgIGRlYnVnKEYxMDEsInpvcGVubyBmYWlsZWQgZXJybm8iLCIiLGVy cm5vKTsKLQlpZiAoaXN0dHkpIGNsb3NlKGZpbGVmZCk7Ci0jaWZkZWYgQ0tTWVNMT0cKLSAgICAg ICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19GQyAmJiBja3hsb2dnaW5nKQotICAgICAgICAgIHN5 c2xvZyhMT0dfSU5GTywgImZpbGVbJWRdICVzOiAlcyBmYWlsZWQgKCVtKSIsCi0gICAgICAgICAg ICAgICAgIG4sCi0gICAgICAgICAgICAgICAgIGZ1bGxuYW1lLAotICAgICAgICAgICAgICAgICBh cHBlbmQgPyAiYXBwZW5kIiA6ICJjcmVhdGUiCi0gICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYg LyogQ0tTWVNMT0cgKi8KLSNpZmRlZiBDT01NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBMZXQgdXBwZXIgbGV2ZWxzIHByaW50IG1lc3NhZ2UuICovCi0gICAgICAgIHBlcnJvcigiQ2Fu J3Qgb3BlbiBvdXRwdXQgZmlsZSIpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB9IGVsc2Ug eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdWNjZWVkZWQgKi8KLSAgICAgICAgZXh0 ZXJuIGludCB6b2ZidWZmZXIsIHpvZmJsb2NrLCB6b2J1ZnNpemU7Ci0gICAgICAgIGRlYnVnKEYx MDEsICJ6b3Blbm8gem9idWZzaXplIiwgIiIsIHpvYnVmc2l6ZSk7Ci0gICAgICAgIGlmIChuID09 IFpERklMRSB8fCBuID09IFpURklMRSkgeyAvKiBJZiBkZWJ1ZyBvciB0cmFuc2FjdGlvbiBsb2cg Ki8KLSAgICAgICAgICAgIHNldGJ1ZihmcFtuXSxOVUxMKTsgICAgICAgICAgIC8qIG1ha2UgaXQg dW5idWZmZXJlZC4gKi8KLSNpZmRlZiBET05ERUxBWQotICAgICAgICB9IGVsc2UgaWYgKG4gPT0g Wk9GSUxFICYmICF6b2ZibG9jaykgeyAvKiBibG9ja2luZyBvciBub25ibG9ja2luZyAqLwotICAg ICAgICAgICAgaW50IGZsYWdzOwotICAgICAgICAgICAgaWYgKChmbGFncyA9IGZjbnRsKGZpbGVu byhmcFtuXSksRl9HRVRGTCwwKSkgPiAtMSkKLSAgICAgICAgICAgICAgZmNudGwoZmlsZW5vKGZw W25dKSxGX1NFVEZMLCBmbGFncyB8Ci0jaWZkZWYgUU5YCi0gICAgICAgICAgICAgICAgICAgIE9f Tk9OQkxPQ0sKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgIE9fTkRFTEFZCi0jZW5kaWYgLyog UU5YICovCi0gICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ6 b3Blbm8gWk9GSUxFIG5vbmJsb2NraW5nIiwiIiwwKTsKLSNlbmRpZiAvKiBET05ERUxBWSAqLwot ICAgICAgICB9IGVsc2UgaWYgKG4gPT0gWk9GSUxFICYmICF6b2ZidWZmZXIpIHsgLyogYnVmZmVy ZWQgb3IgdW5idWZmZXJlZCAqLwotICAgICAgICAgICAgc2V0YnVmKGZwW25dLE5VTEwpOwotICAg ICAgICAgICAgZGVidWcoRjEwMCwiem9wZW5vIFpPRklMRSB1bmJ1ZmZlcmVkIiwiIiwwKTsKLSAg ICAgICAgfQotCi0jaWZkZWYgQ0tfTE9HSU4KLSAgICAgICAgLyogRW5mb3JjZSBhbm9ueW1vdXMg ZmlsZS1jcmVhdGlvbiBwZXJtaXNzaW9uICovCi0gICAgICAgIGlmIChpc2d1ZXN0KQotICAgICAg ICAgIGlmIChuID09IFpXRklMRSB8fCBuID09IFpNRklMRSB8fAotICAgICAgICAgICAgICBuID09 IFpPRklMRSB8fCBuID09IFpERklMRSB8fAotICAgICAgICAgICAgICBuID09IFpURklMRSB8fCBu ID09IFpQRklMRSB8fAotICAgICAgICAgICAgICBuID09IFpTRklMRSkKLSAgICAgICAgICAgIGNo bW9kKG5hbWUsY2t4cGVybXMpOwotI2VuZGlmIC8qIENLX0xPR0lOICovCi0jaWZkZWYgQ0tTWVNM T0cKLSAgICAgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19GQyAmJiBja3hsb2dnaW5nKQotICAg ICAgICAgIHN5c2xvZyhMT0dfSU5GTywgImZpbGVbJWRdICVzOiAlcyBvayIsCi0gICAgICAgICAg ICAgICAgIG4sCi0gICAgICAgICAgICAgICAgIGZ1bGxuYW1lLAotICAgICAgICAgICAgICAgICBh cHBlbmQgPyAiYXBwZW5kIiA6ICJjcmVhdGUiCi0gICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYg LyogQ0tTWVNMT0cgKi8KLSAgICAgICAgZGVidWcoRjEwMCwgInpvcGVubyBvayIsICIiLCAwKTsK LSAgICB9Ci0gICAgem91dGNudCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogKFBXUCkg cmVzZXQgb3V0cHV0IGJ1ZmZlciAqLwotICAgIHpvdXRwdHIgPSB6b3V0YnVmZmVyOwotICAgIHJl dHVybigoZnBbbl0gIT0gTlVMTCkgPyAxIDogMCk7Ci19Ci0KLS8qICBaIEMgTCBPIFMgRSAgLS0g IENsb3NlIHRoZSBnaXZlbiBmaWxlLiAgKi8KLQotLyogIFJldHVybnMgMCBpZiBhcmcgb3V0IG9m IHJhbmdlLCAxIGlmIHN1Y2Nlc3NmdWwsIC0xIGlmIGNsb3NlIGZhaWxlZC4gICovCi0KLWludAot emNsb3NlKG4pIGludCBuOyB7Ci0gICAgaW50IHggPSAwLCB4MiA9IDA7Ci0gICAgZXh0ZXJuIENL X09GRl9UIGZmYzsKLQotICAgIGRlYnVnKEYxMDEsInpjbG9zZSBmaWxlIG51bWJlciIsIiIsbik7 Ci0gICAgaWYgKGNoa2ZuKG4pIDwgMSkgcmV0dXJuKDApOyAgICAgICAgLyogQ2hlY2sgcmFuZ2Ug b2YgbiAqLwotICAgIGlmICgobiA9PSBaT0ZJTEUpICYmICh6b3V0Y250ID4gMCkpIC8qIChQV1Ap IG91dHB1dCBsZWZ0b3ZlcnMgKi8KLSAgICAgIHgyID0gem91dGR1bXAoKTsKLQotICAgIGlmIChm cFtaU1lTRk5dIHx8IGlzcGlwZVtuXSkgeyAgICAgIC8qIElmIGZpbGUgaXMgcmVhbGx5IHBpcGUg Ki8KLSNpZm5kZWYgTk9QVVNICi0gICAgICAgIHggPSB6Y2xvc2Yobik7ICAgICAgICAgICAgICAg ICAgLyogZG8gaXQgc3BlY2lhbGx5ICovCi0jZWxzZQotICAgICAgICB4ID0gRU9GOwotI2VuZGlm IC8qIE5PUFVTSCAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJ6Y2xvc2UgemNsb3NmIiwiIix4KTsK LSAgICAgICAgLyogZGVidWcoRjEwMSwiemNsb3NlIHpjbG9zZiBmcFtuXSIsIiIsZnBbbl0pOyAq LwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICgoZnBbbl0gIT0gc3Rkb3V0KSAmJiAoZnBbbl0g IT0gc3RkaW4pKQotICAgICAgICAgIHggPSBmY2xvc2UoZnBbbl0pOwotICAgICAgICBmcFtuXSA9 IE5VTEw7Ci0jaWZkZWYgQ09NTUVOVAotCWlmIChuID09IFpDVEVSTSB8fCBuID09IFpTVERJTykJ LyogU2VlIHpvcGVubygpICovCi0JICBpZiAoZnBbWk9GSUxFXSA9PSBzdGRvdXQpCi0JICAgIGZw W1pPRklMRV0gPSBOVUxMOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB9Ci0gICAgaWZsZW4g PSAtMUw7ICAgICAgICAgICAgICAgICAgICAgICAgLyogSW52YWxpZGF0ZSBmaWxlIGxlbmd0aCAq LwotICAgIGlmICh4ID09IEVPRikgeyAgICAgICAgICAgICAgICAgICAgIC8qIGlmIHdlIGdvdCBh IGNsb3NlIGVycm9yICovCi0gICAgICAgIGRlYnVnKEYxMDEsInpjbG9zZSBmY2xvc2UgZmFpbHMi LCIiLHgpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0gZWxzZSBpZiAoeDIgPCAwKSB7ICAg ICAgICAgICAgICAgIC8qIG9yIGVycm9yIGZsdXNoaW5nIGxhc3QgYnVmZmVyICovCi0gICAgICAg IGRlYnVnKEYxMDEsInpjbG9zZSBlcnJvciBmbHVzaGluZyBsYXN0IGJ1ZmZlciIsIiIseDIpOwot ICAgICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAgICAgICAgIC8qIHRoZW4gcmV0dXJuIGFu IGVycm9yICovCi0gICAgfSBlbHNlIHsKLSAgICAgICAgLyogUHJpbnQgbG9nIHJlY29yZCBjb21w YXRpYmxlIHdpdGggd3UtZnRwZCAqLwotICAgICAgICBpZiAoeGZlcmxvZyAmJiAobiA9PSBaSUZJ TEUgfHwgbiA9PSBaT0ZJTEUpKSB7Ci0gICAgICAgICAgICBjaGFyICogcywgKnA7Ci0gICAgICAg ICAgICBleHRlcm4gY2hhciB0dG5hbWVbXTsKLSAgICAgICAgICAgIGlmICghaWtsb2dvcGVuKSAo Vk9JRCkgZG9pa2xvZygpOyAvKiBPcGVuIGxvZyBpZiBuZWNlc3NhcnkgKi8KLSAgICAgICAgICAg IGRlYnVnKEYxMDEsInpjbG9zZSBpa2xvZ29wZW4iLCIiLGlrbG9nb3Blbik7Ci0gICAgICAgICAg ICBpZiAoaWtsb2dvcGVuKSB7Ci0JCWludCBsZW47Ci0JCWNoYXIgKiBmbmFtOwotCi0gICAgICAg ICAgICAgICAgdGltZW5vdyA9IHRpbWUoTlVMTCk7Ci0jaWZkZWYgQ0tfTE9HSU4KLSAgICAgICAg ICAgICAgICBpZiAobG9nZ2VkX2luKQotICAgICAgICAgICAgICAgICAgcyA9IGNsaWVudGhvc3Q7 Ci0gICAgICAgICAgICAgICAgZWxzZQotI2VuZGlmIC8qIENLX0xPR0lOICovCi0gICAgICAgICAg ICAgICAgICBzID0gKGNoYXIgKil0dG5hbWU7Ci0gICAgICAgICAgICAgICAgaWYgKCFzKSBzID0g IiI7Ci0gICAgICAgICAgICAgICAgaWYgKCEqcykgcyA9ICIqIjsKLSNpZmRlZiBDS19MT0dJTgot ICAgICAgICAgICAgICAgIGlmIChsb2dnZWRfaW4pIHsKLSAgICAgICAgICAgICAgICAgICAgcCA9 IGd1ZXN0cGFzczsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCEqcCkgcCA9ICIqIjsKLSAgICAg ICAgICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotICAgICAgICAgICAgICAg ICAgcCA9IHdob2FtaSgpOwotCi0JCWxlbiA9IDI0ICsgMTIgKyAoaW50KXN0cmxlbihzKSArIDE2 Ci0JCSAgKyAoaW50KXN0cmxlbihmdWxsbmFtZSkgKyAxICsgMSArIDEgKyAxCi0JCSAgICArIChp bnQpc3RybGVuKHApICsgNiArIDIgKyAxMjsKLQkJZm5hbSA9IGZ1bGxuYW1lOwotCQlpZiAoISpm bmFtKSBmbmFtID0gIihwaXBlKSI7Ci0KLQkJaWYgKGxlbiA+IElLU0RNU0dMRU4pCi0JCSAgc3By aW50Zihpa3NkbXNnLAkvKiBTQUZFICovCi0gICAgICAgICAgICAgICAgICAgICAgICAiJS4yNHMg W0JVRkZFUiBXT1VMRCBPVkVSRkxPV11cbiIsY3RpbWUoJnRpbWVub3cpKTsKLQkJZWxzZQotCQkg IHNwcmludGYoaWtzZG1zZywJLyogU0FGRSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgIiUu MjRzICVkICVzICVzICVzICVjICVzICVjICVjICVzICVzICVkICVzXG4iLAotICAgICAgICAgICAg ICAgICAgICAgICAgY3RpbWUoJnRpbWVub3cpLCAgICAgICAgLyogZGF0ZS90aW1lICovCi0gICAg ICAgICAgICAgICAgICAgICAgICBndGltZXIoKSwgICAgICAgICAgICAgICAvKiBlbGFwc2VkIHNl Y3MgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHMsICAgICAgICAgICAgICAgICAgICAgIC8q IHBlZXIgbmFtZSAqLwotCQkJY2tmc3RvYShmZmMpLAkgICAgICAgIC8qIGJ5dGUgY291bnQgKi8K LSAgICAgICAgICAgICAgICAgICAgICAgIGZuYW0sCQkJLyogZnVsbCBwYXRobmFtZSBvZiBmaWxl ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAoYmluYXJ5ID8gJ2InIDogJ2EnKSwgICAvKiBi aW5hcnkgb3IgYXNjaWkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICJfIiwgICAgICAgICAg ICAgICAgICAgIC8qIG9wdGlvbnMgPSBub25lICovCi0gICAgICAgICAgICAgICAgICAgICAgICBu ID09IFpJRklMRSA/ICdvJyA6ICdpJywgLyogaW4vb3V0ICovCi0jaWZkZWYgQ0tfTE9HSU4KLSAg ICAgICAgICAgICAgICAgICAgICAgIChpc2d1ZXN0ID8gJ2EnIDogJ3InKSwgIC8qIFVzZXIgdHlw ZSAqLwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICdyJywKLSNlbmRpZiAvKiBDS19M T0dJTiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgcCwgICAgICAgICAgICAgICAgICAgICAg LyogVXNlcm5hbWUgb3IgZ3Vlc3QgcGFzc3dkICovCi0jaWZkZWYgQ0tfTE9HSU4KLSAgICAgICAg ICAgICAgICAgICAgICAgIGxvZ2dlZF9pbiA/ICJpa3MiIDogImtlcm1pdCIsIC8qIFJlY29yZCBJ RCAqLwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICJrZXJtaXQiLAotI2VuZGlmIC8q IENLX0xPR0lOICovCi0gICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgLyog VXNlciBJRCBvbiBjbGllbnQgc3lzdGVtIHVua25vd24gKi8KLSAgICAgICAgICAgICAgICAgICAg ICAgICIqIiAgICAgICAgICAgICAvKiBEaXR0byAqLwotICAgICAgICAgICAgICAgICAgICAgICAg KTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ6Y2xvc2UgaWtzZG1zZyIsaWtzZG1zZyww KTsKLSAgICAgICAgICAgICAgICB3cml0ZSh4ZmVybG9nLCBpa3NkbXNnLCAoaW50KXN0cmxlbihp a3NkbXNnKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZGVidWcoRjEwMSwi emNsb3NlIHJldHVybnMiLCIiLDEpOwotICAgICAgICByZXR1cm4oMSk7Ci0gICAgfQotfQotCi0v KiAgWiBDIEggSSBOICAtLSAgR2V0IGEgY2hhcmFjdGVyIGZyb20gdGhlIGlucHV0IGZpbGUuICAq LwotCi0vKiAgUmV0dXJucyAtMSBpZiBFT0YsIDAgb3RoZXJ3aXNlIHdpdGggY2hhcmFjdGVyIHJl dHVybmVkIGluIGFyZ3VtZW50ICAqLwotCi1pbnQKLXpjaGluKG4sYykgaW50IG47IGludCAqYzsg ewotICAgIGludCBhOwotCi0jaWZkZWYgSUtTRAotICAgIGlmIChpbnNlcnZlciAmJiAhbG9jYWwg JiYgKG4gPT0gWkNURVJNIHx8IG4gPT0gWlNURElPKSkgewotICAgICAgICBhID0gY29uaW5jKDAp OwotICAgICAgICBpZiAoKmMgPCAwKQotICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgfSBlbHNl Ci0jZW5kaWYgLyogSUtTRCAqLwotICAgIC8qIChQV1ApIEp1c3QgaW4gY2FzZSB0aGlzIGdldHMg Y2FsbGVkIHdoZW4gaXQgc2hvdWxkbid0LiAqLwotICAgIGlmIChuID09IFpJRklMRSkgewotICAg ICAgICBhID0gem1pbmNoYXIoKTsJCQkvKiBOb3RlOiB0aGlzIGNhdGNoZXMgQ3RybC1aICovCi0g ICAgICAgIGlmIChhIDwgMCkJCQkvKiAoU2VlIHppbmZpbGwoKS4uLikgKi8KLQkgIHJldHVybigt MSk7Ci0gICAgfSBlbHNlIHsKLQlhID0gZ2V0YyhmcFtuXSk7Ci0JaWYgKGEgPT0gRU9GKSByZXR1 cm4oLTEpOwotI2lmZGVmIENLX0NUUkxaCi0JLyogSWYgU0VUIEZJTEUgRU9GIENUUkwtWiwgZmly c3QgQ3RybC1aIG1hcmtzIEVPRiAqLwotCWlmICghYmluYXJ5ICYmIGEgPT0gMHgxQSAmJiBlb2Zt ZXRob2QgPT0gWFlFT0ZfWikKLQkgIHJldHVybigtMSk7Ci0jZW5kaWYgLyogQ0tfQ1RSTFogKi8K LSAgICB9Ci0gICAgKmMgPSAoQ0hBUikgYSAmIDAzNzc7Ci0gICAgcmV0dXJuKDApOwotfQotCi0v KiAgWiBTIEkgTiBMICAtLSAgUmVhZCBhIGxpbmUgZnJvbSBhIGZpbGUgICovCi0KLS8qCi0gIFdy aXRlcyB0aGUgbGluZSBpbnRvIHRoZSBhZGRyZXNzIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIuCi0g IG4gaXMgdGhlIEtlcm1pdCAiY2hhbm5lbCBudW1iZXIiLgotICBXcml0aW5nIHRlcm1pbmF0ZXMg d2hlbiBuZXdsaW5lIGlzIGVuY291bnRlcmVkLCBuZXdsaW5lIGlzIG5vdCBjb3BpZWQuCi0gIFdy aXRpbmcgYWxzbyB0ZXJtaW5hdGVzIHVwb24gRU9GIG9yIGlmIGxlbmd0aCB4IGlzIGV4aGF1c3Rl ZC4KLSAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIEVPRiBvciBlcnJvci4KLSovCi1pbnQK LXpzaW5sKG4scyx4KSBpbnQgbiwgeDsgY2hhciAqczsgewotICAgIGludCBhLCB6ID0gMDsgICAg ICAgICAgICAgICAgICAgICAgIC8qIHogaXMgcmV0dXJuIGNvZGUuICovCi0gICAgaW50IGNvdW50 ID0gMDsKLSAgICBpbnQgbGVuID0gMDsKLSAgICBjaGFyICpidWY7Ci0gICAgZXh0ZXJuIENIQVIg ZmVvbDsgICAgICAgICAgICAgICAgICAgLyogTGluZSB0ZXJtaW5hdG9yICovCi0KLSAgICBpZiAo IXMgfHwgY2hrZm4obikgPCAxKSAgICAgICAgICAgICAvKiBNYWtlIHN1cmUgZmlsZSBpcyBvcGVu LCBldGMgKi8KLSAgICAgIHJldHVybigtMSk7Ci0gICAgYnVmID0gczsKLSAgICBzWzBdID0gJ1ww JzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBEb24ndCByZXR1cm4ganVuayAqLwotCi0gICAg YSA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ3VycmVudCBjaGFyYWN0ZXIs IG5vbmUgeWV0LiAqLwotICAgIHdoaWxlICh4LS0pIHsgICAgICAgICAgICAgICAgICAgICAgIC8q IFVwIHRvIGdpdmVuIGxlbmd0aCAqLwotICAgICAgICBpbnQgb2xkID0gMDsKLSAgICAgICAgaWYg KGZlb2wpICAgICAgICAgICAgICAgICAgICAgICAvKiBQcmV2aW91cyBjaGFyYWN0ZXIgKi8KLSAg ICAgICAgICBvbGQgPSBhOwotICAgICAgICBpZiAoemNoaW4obiwmYSkgPCAwKSB7ICAgICAgICAg IC8qIFJlYWQgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgZmlsZSAqLwotICAgICAgICAgICAgZGVidWco RjEwMSwienNpbmwgemNoaW4gZmFpbCIsIiIsY291bnQpOwotICAgICAgICAgICAgaWYgKGNvdW50 ID09IDApCi0gICAgICAgICAgICAgIHogPSAtMTsgICAgICAgICAgICAgICAgICAgLyogRU9GIG9y IG90aGVyIGVycm9yICovCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSBlbHNlCi0gICAg ICAgICAgY291bnQrKzsKLSAgICAgICAgaWYgKGZlb2wpIHsgICAgICAgICAgICAgICAgICAgICAv KiBTaW5nbGUtY2hhcmFjdGVyIGxpbmUgdGVybWluYXRvciAqLwotICAgICAgICAgICAgaWYgKGEg PT0gZmVvbCkKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gZWxzZSB7ICAgICAgICAg ICAgICAgICAgICAgICAgLyogQ1JMRiBsaW5lIHRlcm1pbmF0b3IgKi8KLSAgICAgICAgICAgIGlm IChhID09ICdcMDE1JykgICAgICAgICAgICAvKiBDUiwgZ2V0IG5leHQgY2hhcmFjdGVyICovCi0g ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKG9sZCA9PSAnXDAxNScpIHsg ICAgICAgIC8qIFByZXZpb3VzIGNoYXJhY3RlciB3YXMgQ1IgKi8KLSAgICAgICAgICAgICAgICBp ZiAoYSA9PSAnXDAxMicpIHsgICAgICAvKiBUaGlzIG9uZSBpcyBMRiwgc28gd2UgaGF2ZSBhIGxp bmUgKi8KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfSBlbHNl IHsgICAgICAgICAgICAgICAgLyogTm90IExGLCBkZXBvc2l0IENSICovCi0gICAgICAgICAgICAg ICAgICAgICpzKysgPSAnXDAxNSc7Ci0gICAgICAgICAgICAgICAgICAgIHgtLTsKLSAgICAgICAg ICAgICAgICAgICAgbGVuKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg ICAgICB9Ci0gICAgICAgICpzID0gYTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVwb3Np dCBjaGFyYWN0ZXIgKi8KLSAgICAgICAgcysrOwotICAgICAgICBsZW4rKzsKLSAgICB9Ci0gICAg KnMgPSAnXDAnOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGVybWluYXRlIHRoZSBzdHJp bmcgKi8KLSAgICBkZWJ1ZyhGMDExLCJ6c2lubCIsYnVmLGxlbik7Ci0gICAgcmV0dXJuKHopOwot fQotCi0vKiAgWiBYIEkgTiAgLS0gIFJlYWQgeCBieXRlcyBmcm9tIGEgZmlsZSAgKi8KLQotLyoK LSAgUmVhZHMgeCBieXRlcyAob3IgbGVzcykgZnJvbSBjaGFubmVsIG4gYW5kIHdyaXRlcyB0aGVt Ci0gIHRvIHRoZSBhZGRyZXNzIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIuCi0gIFJldHVybnMgbnVt YmVyIG9mIGJ5dGVzIHJlYWQgb24gc3VjY2VzcywgMCBvbiBFT0Ygb3IgZXJyb3IuCi0qLwotaW50 Ci16eGluKG4scyx4KSBpbnQgbiwgeDsgY2hhciAqczsgewotI2lmZGVmIElLU0QKLSAgICBpZiAo aW5zZXJ2ZXIgJiYgIWxvY2FsICYmIChuID09IFpDVEVSTSB8fCBuID09IFpTVERJTykpIHsKLSAg ICAgICAgaW50IGEsIGk7Ci0gICAgICAgIGEgPSB0dGNoaygpOwotICAgICAgICBpZiAoYSA8IDEp IHJldHVybigwKTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGEgJiYgaSA8IHg7IGkrKykKLSAg ICAgICAgICBzW2ldID0gY29uaW5jKDApOwotICAgICAgICByZXR1cm4oaSk7Ci0gICAgfQotI2Vu ZGlmIC8qIElLU0QgKi8KLQotICAgIHJldHVybihmcmVhZChzLCBzaXplb2YgKGNoYXIpLCB4LCBm cFtuXSkpOwotfQotCi0vKgotICBaIEkgTiBGIEkgTCBMICAtLSAgQnVmZmVyZWQgZmlsZSBpbnB1 dC4KLQotICAocmUpZmlsbCB0aGUgZmlsZSBpbnB1dCBidWZmZXIgd2l0aCBkYXRhLiAgQWxsIGZp bGUgaW5wdXQKLSAgc2hvdWxkIGdvIHRocm91Z2ggdGhpcyByb3V0aW5lLCB1c3VhbGx5IGJ5IGNh bGxpbmcgdGhlIHptaW5jaGFyKCkKLSAgbWFjcm8gZGVmaW5lZCBpbiBja2NrZXIuaC4gIFJldHVy bnM6Ci0KLSAgVmFsdWUgMC4uMjU1IG9uIHN1Y2Nlc3MsIHRoZSBjaGFyYWN0ZXIgdGhhdCB3YXMg cmVhZC4KLSAgLTEgb24gZW5kIG9mIGZpbGUuCi0gIC0yIG9uIGFueSBraW5kIG9mIGVycm9yIG90 aGVyIHRoYW4gZW5kIG9mIGZpbGUuCi0gIC0zIHRpbWVvdXQgd2hlbiByZWFkaW5nIGZyb20gcGlw ZSAoS2VybWl0IHBhY2tldCBtb2RlIG9ubHkpLgotKi8KLWludAotemluZmlsbCgpIHsKLSAgICBl eHRlcm4gaW50IGthY3RpdmUsIHNydnBpbmc7Ci0gICAgZXJybm8gPSAwOwotCi0jaWZkZWYgWkRF QlVHCi0gICAgcHJpbnRmKCJaSU5GSUxMIGZwWyVkXT0lbGRcbiIsWklGSUxFLGZwW1pJRklMRV0p OwotI2VuZGlmIC8qIFpERUJVRyAqLwotCi0jaWZkZWYgSUtTRAotICAgIGlmIChpbnNlcnZlciAm JiAhbG9jYWwgJiYgZnBbWklGSUxFXSA9PSBzdGRpbikgewotICAgICAgICBpbnQgYSwgaTsKLSAg ICAgICAgYSA9IHR0Y2hrKCk7Ci0gICAgICAgIGlmIChhIDwgMCkgcmV0dXJuKC0yKTsKLSAgICAg ICAgZm9yIChpID0gMDsgaSA8IGEgJiYgaSA8IElOQlVGU0laRTsgaSsrKSB7Ci0gICAgICAgICAg ICB6aW5idWZmZXJbaV0gPSBjb25pbmMoMCk7Ci0gICAgICAgIH0KLSAgICAgICAgemluY250ID0g aTsKLSAgICAgICAgLyogc2V0IHBvaW50ZXIgdG8gYmVnaW5uaW5nLCAoPT0gJnppbmJ1ZmZlclsw XSkgKi8KLSAgICAgICAgemlucHRyID0gemluYnVmZmVyOwotICAgICAgICBpZiAoemluY250ID09 IDApIHJldHVybigtMSk7Ci0gICAgICAgIHppbmNudC0tOyAgICAgICAgICAgICAgICAgICAgICAg LyogT25lIGxlc3MgY2hhciBpbiBidWZmZXIgKi8KLSAgICAgICAgcmV0dXJuKChpbnQpKCp6aW5w dHIrKykgJiAwMzc3KTsgLyogYmVjYXVzZSB3ZSByZXR1cm4gdGhlIGZpcnN0ICovCi0gICAgfQot I2VuZGlmIC8qIElLU0QgKi8KLQotICAgIGRlYnVnKEYxMDEsInppbmZpbGwga2FjdGl2ZSIsIiIs a2FjdGl2ZSk7Ci0KLSAgICBpZiAoIShrYWN0aXZlICYmIGlzcGlwZVtaSUZJTEVdKSkgewotICAg ICAgICBpZiAoZmVvZihmcFtaSUZJTEVdKSkgewotICAgICAgICAgICAgZGVidWcoRjEwMCwiWklO RklMTCBmZW9mIiwiIiwwKTsKLSNpZmRlZiBaREVCVUcKLSAgICAgICAgICAgIHByaW50ZigiWklO RklMTCBFT0ZcbiIpOwotI2VuZGlmIC8qIFpERUJVRyAqLwotICAgICAgICAgICAgcmV0dXJuKC0x KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjbGVhcmVycihmcFtaSUZJTEVdKTsKLQotI2lmZGVm IFNFTEVDVAotICAgIC8qIEhlcmUgd2UgY2FuIGNhbGwgc2VsZWN0KCkgdG8gZ2V0IGEgdGltZW91 dC4uLiAqLwotICAgIGlmIChrYWN0aXZlICYmIGlzcGlwZVtaSUZJTEVdKSB7Ci0gICAgICAgIGlu dCBzZWNzLCB6ID0gMDsKLSNpZm5kZWYgTk9YRkVSCi0gICAgICAgIGlmIChzcnZwaW5nKSB7Ci0g ICAgICAgICAgICBzZWNzID0gMTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsInppbmZpbGwgY2Fs bGluZyB0dHdhaXQiLCIiLHNlY3MpOwotICAgICAgICAgICAgeiA9IHR0d2FpdChmaWxlbm8oZnBb WklGSUxFXSksc2Vjcyk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6aW5maWxsIHR0d2FpdCIs IiIseik7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSAgICAgICAgaWYgKHogPT0g MCkKLSAgICAgICAgICByZXR1cm4oLTMpOwotICAgIH0KLSNlbmRpZiAvKiBTRUxFQ1QgKi8KLQot I2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewotICAgICAgICBpbnQgaTsKLSAgICAgICAg ZGVidWcoRjEwMSwiWklORklMTCBJTkJVRlNJWkUiLCIiLElOQlVGU0laRSk7Ci0jaWZkZWYgVVNF X01FTUNQWQotICAgICAgICBtZW1zZXQoemluYnVmZmVyLCAweEZGLCBJTkJVRlNJWkUpOwotI2Vs c2UKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IElOQlVGU0laRTsgaSsrKSB7Ci0gICAgICAgICAg ICB6aW5idWZmZXJbaV0gPSAweEZGOwotI2lmZGVmIENPTU1FTlQJCQkJLyogVG9vIG11Y2ghICov Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJaSU5GSUxMIHppbmJ1ZmZlcltpXSIsIiIsaSk7Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICB9Ci0jZW5kaWYgLyogVVNFX01FTUNQWSAqLwot CWNrc3RybmNweSh6aW5idWZmZXIsInppbmJ1ZmZlciBpcyBhIHZhbGlkIGJ1ZmZlciIsSU5CVUZT SVpFKTsKLQkvKiBkZWJ1ZyhGMTExLCJaSU5GSUxMIGFib3V0IHRvIGNhbGwgZnJlYWQiLHppbmJ1 ZmZlcix6aW5idWZmZXIpOyAqLwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0vKgotICBO b3RlOiBUaGUgZm9sbG93aW5nIHJlYWQgTVVTVCBiZSBub25ibG9ja2luZyB3aGVuIHJlYWRpbmcg ZnJvbSBhIHBpcGUKLSAgYW5kIHdlIHdhbnQgdGltZW91dHMgdG8gd29yay4gIFNlZSB6eGNtZCgp LgotKi8KLSAgICB6aW5jbnQgPSBmcmVhZCh6aW5idWZmZXIsIHNpemVvZiAoY2hhciksIElOQlVG U0laRSwgZnBbWklGSUxFXSk7Ci0gICAgZGVidWcoRjEwMSwiWklORklMTCBmcmVhZCIsIiIsemlu Y250KTsgLyogSnVzdCB0aGUgc2l6ZSAqLwotI2lmZGVmIFpERUJVRwotICAgIHByaW50ZigiRlJF QUQ9JWRcbiIsemluY250KTsKLSNlbmRpZiAvKiBaREVCVUcgKi8KLSNpZmRlZiBDS19DVFJMWgot ICAgIC8qIElmIFNFVCBGSUxFIEVPRiBDVFJMLVosIGZpcnN0IEN0cmwtWiBtYXJrcyBFT0YgKi8K LSAgICBpZiAoemluY250ID4gMCAmJiAhYmluYXJ5ICYmIGVvZm1ldGhvZCA9PSBYWUVPRl9aKSB7 Ci0JcmVnaXN0ZXIgaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IHppbmNudDsgaSsrKSB7Ci0JICAg IGlmICh6aW5idWZmZXJbaV0gPT0gU1VCKSB7Ci0JCXppbmNudCA9IGk7CQkvKiBTdG9wIGF0IGZp cnN0IEN0cmwtWiAqLwotCQlpZiAoaSA9PSAwKQotCQkgIHJldHVybigtMSk7Ci0JCWJyZWFrOwot CSAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogQ0tfQ1RSTFogKi8KLQotICAgIGlm ICh6aW5jbnQgPT0gMCkgeyAgICAgICAgICAgICAgICAgIC8qIEdvdCBub3RoaW5nPyAqLwotICAg ICAgICBpZiAoZmVycm9yKGZwW1pJRklMRV0pKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJa SU5GSUxMIGZlcnJvciIsIiIsMCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJaSU5GSUxMIGVy cm5vIiwiIixlcnJubyk7Ci0jaWZkZWYgWkRFQlVHCi0gICAgICAgICAgICBwcmludGYoIlpJTkZJ TEwgZXJybm89JWRcbiIsZXJybm8pOwotI2VuZGlmIC8qIFpERUJVRyAqLwotI2lmZGVmIEVXT1VM REJMT0NLCi0gICAgICAgICAgICByZXR1cm4oKGVycm5vID09IEVXT1VMREJMT0NLKSA/IC0zIDog LTIpOwotI2Vsc2UKLSAgICAgICAgICAgIHJldHVybigtMik7Ci0jZW5kaWYgLyogRVdPVUxEQkxP Q0sgKi8KLSAgICAgICAgfQotCi0gICAgLyogSW4gY2FzZSBmZW9mKCkgZGlkbid0IHdvcmsganVz dCBhYm92ZSAtLSBzb21ldGltZXMgaXQgZG9lc24ndC4uLiAqLwotCi0gICAgICAgIGlmIChmZW9m KGZwW1pJRklMRV0pICkgewotICAgICAgICAgICAgZGVidWcoRjEwMCwiWklORklMTCBjb3VudCAw IEVPRiByZXR1cm4gLTEiLCIiLDApOwotICAgICAgICAgICAgcmV0dXJuICgtMSk7Ci0gICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJaSU5GSUxMIGNvdW50IDAgbm90IEVP RiByZXR1cm4gLTIiLCIiLDApOwotICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgfQot ICAgIH0KLSAgICB6aW5wdHIgPSB6aW5idWZmZXI7ICAgIC8qIHNldCBwb2ludGVyIHRvIGJlZ2lu bmluZywgKD09ICZ6aW5idWZmZXJbMF0pICovCi0gICAgemluY250LS07ICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogT25lIGxlc3MgY2hhciBpbiBidWZmZXIgKi8KLSAgICByZXR1cm4oKGlu dCkoKnppbnB0cisrKSAmIDAzNzcpOyAgICAvKiBiZWNhdXNlIHdlIHJldHVybiB0aGUgZmlyc3Qg Ki8KLX0KLQotLyogIFogUyBPIFUgVCAgLS0gIFdyaXRlIGEgc3RyaW5nIG91dCB0byB0aGUgZ2l2 ZW4gZmlsZSwgYnVmZmVyZWQuICAqLwotCi0vKiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9u IGZhaWx1cmUgKi8KLQotaW50Ci16c291dChuLHMpIGludCBuOyBjaGFyICpzOyB7Ci0gICAgaW50 IHJjID0gMDsKLSAgICByYyA9IGNoa2ZuKG4pOwotICAgIGlmIChyYyA8IDEpIHJldHVybigtMSk7 ICAgICAgICAgICAgIC8qIEtlZXAgdGhpcywgcHJldmVudHMgbWVtb3J5IGZhdWx0cyAqLwotICAg IGlmICghcykgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAgIC8qIE51bGwgcG9pbnRlciwgZG8g bm90aGluZywgc3VjY2VlZCAqLwotICAgIGlmICghKnMpIHJldHVybigwKTsgICAgICAgICAgICAg ICAgIC8qIGVtcHR5IHN0cmluZywgZGl0dG8gKi8KLQotI2lmZGVmIElLU0QKLSAgICAvKgotICAg ICAgVGhpcyBoYXBwZW5zIHdpdGggY2xpZW50LXNpZGUgS2VybWl0IHNlcnZlciB3aGVuIGEgUkVN T1RFIGNvbW1hbmQKLSAgICAgIHdhcyBzZW50IGZyb20gdGhlIHNlcnZlciB0byB0aGUgY2xpZW50 IGFuZCB0aGUgc2VydmVyIGlzIHN1cHBvc2VkIHRvCi0gICAgICBkaXNwbGF5IHRoZSB0ZXh0LCBi dXQgb2YgY291cnNlIHRoZXJlIGlzIG5vIHBsYWNlIHRvIGRpc3BsYXkgaXQKLSAgICAgIHNpbmNl IGl0IGlzIGluIHJlbW90ZSBtb2RlIGV4ZWN1dGluZyBLZXJtaXQgcHJvdG9jb2wuCi0gICAgKi8K LSAgICBpZiAoaW5zZXJ2ZXIgJiYgIWxvY2FsICYmIChuID09IFpDVEVSTSB8fCBuID09IFpTVERJ TykpIHsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIHJldHVybih0dG9sKHMsKChpbnQpc3RybGVu KHMpKSA8IDApID8gLTEgOiAwKTsKLSNlbHNlCi0gICAgICAgIHJldHVybigwKTsKLSNlbmRpZiAv KiBDT01NRU5UICovCi0gICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLQotICAgIGlmIChuID09IFpT RklMRSkgewotCWludCBrOwotCWsgPSBzdHJsZW4ocyk7Ci0JcmMgPSB3cml0ZShmaWxlbm8oZnBb bl0pLHMsayk7Ci0JcmV0dXJuKChyYyA9PSBrKSA/IDAgOiAtMSk7Ci0gICAgfQotICAgIHJjID0g ZnB1dHMocyxmcFtuXSkgPT0gRU9GID8gLTEgOiAwOwotICAgIGlmIChuID09IFpXRklMRSkKLSAg ICAgIGZmbHVzaChmcFtuXSk7Ci0gICAgcmV0dXJuKHJjKTsKLX0KLQotLyogIFogUyBPIFUgVCBM ICAtLSAgV3JpdGUgc3RyaW5nIHRvIGZpbGUsIHdpdGggbGluZSB0ZXJtaW5hdG9yLCBidWZmZXJl ZCAgKi8KLQotLyogIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlICovCi0KLWlu dAotenNvdXRsKG4scykgaW50IG47IGNoYXIgKnM7IHsKLSAgICBpZiAoenNvdXQobixzKSA8IDAp Ci0gICAgICAgIHJldHVybigtMSk7Ci0KLSNpZmRlZiBJS1NECi0gICAgaWYgKGluc2VydmVyICYm ICFsb2NhbCAmJiAobiA9PSBaQ1RFUk0gfHwgbiA9PSBaU1RESU8pKSB7Ci0jaWZkZWYgQ09NTUVO VAotICAgICAgICByZXR1cm4odHRvYyhMRikpOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuKDApOyAg ICAgICAgICAgICAgICAgICAgICAvKiBTZWUgY29tbWVudHMgaW4genNvdXQoKSAqLwotI2VuZGlm IC8qIENPTU1FTlQgKi8KLSAgICB9Ci0jZW5kaWYgLyogSUtTRCAqLwotCi0gICAgaWYgKG4gPT0g WlNGSUxFKSAgICAgICAgICAgICAgICAgICAgLyogU2Vzc2lvbiBsb2cgaXMgdW5idWZmZXJlZCAq LwotICAgICAgcmV0dXJuKHdyaXRlKGZpbGVubyhmcFtuXSksIlxuIiwxKSA9PSAxID8gMCA6IC0x KTsKLSAgICBlbHNlIGlmIChmcHV0cygiXG4iLGZwW25dKSA9PSBFT0YpCi0gICAgICByZXR1cm4o LTEpOwotICAgIGlmIChuID09IFpESUZJTCB8fCBuID09IFpXRklMRSkgICAgIC8qIEZsdXNoIGNv bm5lY3Rpb24gbG9nIHJlY29yZHMgKi8KLSAgICAgIGZmbHVzaChmcFtuXSk7Ci0gICAgcmV0dXJu KDApOwotfQotCi0vKiAgWiBTIE8gVSBUIFggIC0tICBXcml0ZSB4IGNoYXJhY3RlcnMgdG8gZmls ZSwgdW5idWZmZXJlZC4gICovCi0KLS8qICBSZXR1cm5zIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdy aXR0ZW4gb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZSAqLwotCi1pbnQKLXpzb3V0eChuLHMseCkg aW50IG4sIHg7IGNoYXIgKnM7IHsKLSAgICBpbnQgazsKLSAgICBpZiAoIXMpIHJldHVybigwKTsK LSAgICBpZiAoISpzKSByZXR1cm4oMCk7Ci0KLSNpZmRlZiBJS1NECi0gICAgaWYgKGluc2VydmVy ICYmICFsb2NhbCAmJiAobiA9PSBaQ1RFUk0gfHwgbiA9PSBaU1RESU8pKSB7Ci0jaWZkZWYgQ09N TUVOVAotICAgICAgICByZXR1cm4odHRvbChzLHgpKTsgICAgICAgICAgICAgIC8qIFNlZSBjb21t ZW50cyBpbiB6c291dCgpICovCi0jZWxzZQotICAgICAgICByZXR1cm4oeCk7Ci0jZW5kaWYgLyog Q09NTUVOVCAqLwotICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0KLSAgICBpZiAoKGsgPSAoaW50 KXN0cmxlbihzKSkgPiB4KSB4ID0gazsgLyogTm90aGluZyBlbHNlIHdvdWxkIG1ha2Ugc2Vuc2Ug Ki8KLSNpZmRlZiBDT01NRU5UCi0gICAgaWYgKGNoa2ZuKG4pIDwgMSkgcmV0dXJuKC0xKTsKLSAg ICByZXR1cm4od3JpdGUoZnBbbl0tPl9maWxlLHMseCkpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8K LSAgICByZXR1cm4od3JpdGUoZmlsZW5vKGZwW25dKSxzLHgpID09IHggPyB4IDogLTEpOwotfQot Ci0vKiAgWiBDIEggTyBVIFQgIC0tICBBZGQgYSBjaGFyYWN0ZXIgdG8gdGhlIGdpdmVuIGZpbGUu ICAqLwotCi0vKiAgU2hvdWxkIHJldHVybiAwIG9yIGdyZWF0ZXIgb24gc3VjY2VzcywgLTEgb24g ZmFpbHVyZSAoZS5nLiBkaXNrIGZ1bGwpICAqLwotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotemNo b3V0KHJlZ2lzdGVyIGludCBuLCBjaGFyIGMpCi0jZWxzZQotemNob3V0KG4sYykgcmVnaXN0ZXIg aW50IG47IGNoYXIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogemNob3V0KCkgKi8gewot ICAgIC8qIGlmIChjaGtmbihuKSA8IDEpIHJldHVybigtMSk7ICovCi0KLSNpZmRlZiBJS1NECi0g ICAgaWYgKGluc2VydmVyICYmICFsb2NhbCAmJiAobiA9PSBaQ1RFUk0gfHwgbiA9PSBaU1RESU8p KSB7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICByZXR1cm4odHRvYyhjKSk7Ci0jZWxzZQotICAg ICAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFNlZSBjb21tZW50cyBpbiB6 c291dCgpICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIH0KLSNlbmRpZiAvKiBJS1NEICov Ci0KLSAgICBpZiAobiA9PSBaU0ZJTEUpICAgICAgICAgICAgICAgICAgICAvKiBVc2UgdW5idWZm ZXJlZCBmb3Igc2Vzc2lvbiBsb2cgKi8KLSAgICAgIHJldHVybih3cml0ZShmaWxlbm8oZnBbbl0p LCZjLDEpID09IDEgPyAwIDogLTEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBCdWZmZXJlZCBmb3IgZXZlcnl0aGluZyBlbHNlICovCi0gICAgaWYgKHB1dGMoYyxmcFtuXSkg PT0gRU9GKSAgIC8qIElmIHRydWUsIG1heWJlIHRoZXJlIHdhcyBhbiBlcnJvciAqLwotICAgICAg cmV0dXJuKGZlcnJvcihmcFtuXSk/LTE6MCk7ICAgICAgIC8qIENoZWNrIHRvIG1ha2Ugc3VyZSAq LwotICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZS4u LiAqLwotICAgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZXJlIHdh cyBubyBlcnJvci4gKi8KLX0KLQotLyogKFBXUCkgYnVmZmVyZWQgY2hhcmFjdGVyIG91dHB1dCBy b3V0aW5lIHRvIHNwZWVkIHVwIGZpbGUgSU8gKi8KLQotaW50Ci16b3V0ZHVtcCgpIHsKLSAgICBp bnQgeDsKLSAgICBjaGFyICogenA7Ci0gICAgem91dHB0ciA9IHpvdXRidWZmZXI7ICAgICAgICAg ICAgICAgLyogUmVzZXQgYnVmZmVyIHBvaW50ZXIgaW4gYWxsIGNhc2VzICovCi0jaWZkZWYgREVC VUcKLSAgICBpZiAoZGVibG9nKQotICAgICAgZGVidWcoRjEwMSwiem91dGR1bXAgem91dGNudCIs IiIsem91dGNudCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICBpZiAoem91dGNudCA9PSAwKSB7 ICAgICAgICAgICAgICAgICAvKiBOb3RoaW5nIHRvIG91dHB1dCAqLwotICAgICAgICByZXR1cm4o MCk7Ci0gICAgfSBlbHNlIGlmICh6b3V0Y250IDwgMCkgeyAgICAgICAgICAgLyogVW5leHBlY3Rl ZCBuZWdhdGl2ZSBhcmd1bWVudCAqLwotICAgICAgICB6b3V0Y250ID0gMDsgICAgICAgICAgICAg ICAgICAgIC8qIFJlc2V0IG91dHB1dCBidWZmZXIgY291bnQgKi8KLSAgICAgICAgcmV0dXJuKC0x KTsgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgZmFpbC4gKi8KLSAgICB9Ci0KLSNpZmRlZiBJ S1NECi0gICAgaWYgKGluc2VydmVyICYmICFsb2NhbCAmJiBmcFtaT0ZJTEVdID09IHN0ZG91dCkg ewotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgeCA9IHR0b2woem91dGJ1ZmZlcix6b3V0Y250KTsK LSNlbHNlCi0gICAgICAgIHggPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VlIGNv bW1lbnRzIGluIHpzb3V0KCkgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIHpvdXRj bnQgPSAwOwotICAgICAgICByZXR1cm4oeCA+IDAgPyAwIDogLTEpOwotICAgIH0KLSNlbmRpZiAv KiBJS1NEICovCi0KLS8qCi0gIEZyYW5rIFByaW5kbGUgc3VnZ2VzdGVkIHRoYXQgcmVwbGFjaW5n IHRoaXMgZndyaXRlKCkgYnkgYW4gZmZsdXNoKCkKLSAgZm9sbG93ZWQgYnkgYSB3cml0ZSgpIHdv dWxkIGltcHJvdmUgdGhlIGVmZmljaWVuY3ksIGVzcGVjaWFsbHkgd2hlbgotICB3cml0aW5nIHRv IHN0ZG91dC4gIFN1YnNlcXVlbnQgdGVzdHMgc2hvd2VkIGEgNS1mb2xkIGltcHJvdmVtZW50Lgot Ki8KLSNpZmRlZiBDT01NRU5UCi0gICAgaWYgKHggPSBmd3JpdGUoem91dGJ1ZmZlciwgMSwgem91 dGNudCwgZnBbWk9GSUxFXSkpIC4uLgotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2lmbmRlZiBD S19OT05CTE9DSwotICAgIGZmbHVzaChmcFtaT0ZJTEVdKTsKLSNlbmRpZiAvKiBDS19OT05CTE9D SyAqLwotICAgIHpwID0gem91dGJ1ZmZlcjsKLSAgICB3aGlsZSAoem91dGNudCA+IDApIHsKLSAg ICAgICAgaWYgKCh4ID0gd3JpdGUoZmlsZW5vKGZwW1pPRklMRV0pLHpwLHpvdXRjbnQpKSA+IC0x KSB7Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgICAgIGlmIChkZWJsb2cpICAgICAgICAgICAgICAg ICAvKiBTYXZlIGEgZnVuY3Rpb24gY2FsbC4uLiAqLwotICAgICAgICAgICAgICBkZWJ1ZyhGMTAx LCJ6b3V0ZHVtcCB3cm90ZSIsIiIseCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICAgICAgICAg IHpvdXRjbnQgLT0geDsgICAgICAgICAgICAgICAvKiBBZGp1c3Qgb3V0cHV0IGJ1ZmZlciBjb3Vu dCAqLwotICAgICAgICAgICAgenAgKz0geDsgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBwb2lu dGVyICovCi0gICAgICAgIH0gZWxzZSB7Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgICAgIGlmIChk ZWJsb2cpIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6b3V0ZHVtcCB3cml0ZSBlcnJv ciIsIiIsZXJybm8pOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsInpvdXRkdW1wIHdyaXRl IHJldHVybnMiLCIiLHgpOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0gICAg ICAgICAgICB6b3V0Y250ID0gMDsgICAgICAgICAgICAgICAgLyogUmVzZXQgb3V0cHV0IGJ1ZmZl ciBjb3VudCAqLwotICAgICAgICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgICAgIC8qIHdy aXRlKCkgZmFpbGVkICovCi0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuKDApOwotfQotCi0v KiAgQyBIIEsgRiBOICAtLSAgSW50ZXJuYWwgZnVuY3Rpb24gdG8gdmVyaWZ5IGZpbGUgbnVtYmVy IGlzIG9rICAqLwotCi0vKgotIFJldHVybnM6Ci0gIC0xOiBGaWxlIG51bWJlciBuIGlzIG91dCBv ZiByYW5nZQotICAgMDogbiBpcyBpbiByYW5nZSwgYnV0IGZpbGUgaXMgbm90IG9wZW4KLSAgIDE6 IG4gaW4gcmFuZ2UgYW5kIGZpbGUgaXMgb3BlbgotKi8KLWludAotY2hrZm4obikgaW50IG47IHsK LSAgICAvKiBpZiAobiAhPSBaREZJTEUpIGRlYnVnKEYxMDEsImNoa2ZuIiwiIixuKTsgKi8KLSAg ICBpZiAobiA8IDAgfHwgbiA+PSBaTkZJTFMpIHsKLSAgICAgICAgaWYgKG4gIT0gWkRGSUxFKSBk ZWJ1ZyhGMTAxLCJjaGtmbiBvdXQgb2YgcmFuZ2UiLCIiLG4pOwotICAgICAgICByZXR1cm4oLTEp OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIGlmIChuICE9IFpERklMRSkgZGVidWcoRjEwMSwi Y2hrZm4gZnBbbl0iLCIiLGZwW25dKTsgKi8KLSAgICAgICAgcmV0dXJuKChmcFtuXSA9PSBOVUxM KSA/IDAgOiAxKTsKLSAgICB9Ci19Ci0KLS8qICBaIEcgRSBUIEYgUyAtLSBSZXR1cm4gZmlsZSBz aXplIHJlZ2FyZGxlc3Mgb2YgYWNjZXNzaWJpbGl0eSAqLwotLyoKLSAgVXNlZCBmb3IgZGlyZWN0 b3J5IGxpc3RpbmdzLCBldGMuCi0gIFJldHVybnM6Ci0gICAgVGhlIHNpemUgb2YgdGhlIGZpbGUg aW4gYnl0ZXMsIDAgb3IgZ3JlYXRlciwgaWYgdGhlIHNpemUgY2FuIGJlIGxlYXJuZWQuCi0gICAg LTEgaWYgdGhlIGZpbGUgc2l6ZSBjYW4gbm90IGJlIG9idGFpbmVkLgotICBBbHNvIChhbmQgdGhp cyBpcyBhIGhhY2sganVzdCBmb3IgVU5JWCk6Ci0gICAgSWYgdGhlIGFyZ3VtZW50IGlzIHRoZSBu YW1lIG9mIGEgc3ltYm9saWMgbGluaywKLSAgICB0aGUgZ2xvYmFsIHZhcmlhYmxlIGlzc3ltbGlu ayBpcyBzZXQgdG8gMSwKLSAgICBhbmQgdGhlIGdsb2JhbCBidWZmZXIgbGlua25hbWVbXSBnZXRz IHRoZSBsaW5rIHZhbHVlLgotICAgIEFuZCBpdCBzZXRzIHpnZnNfZGlyIHRvIDEgaWYgaXQncyBh IGRpcmVjdG9yeSwgb3RoZXJ3aXNlIDAuCi0gIFRoaXMgbGV0cyB1cyBhdm9pZCBudW1lcm91cyBy ZWR1bmRhbnQgY2FsbHMgdG8gc3RhdCgpLgotKi8KLWludCB6Z2ZzX2xpbmsgPSAwOwotaW50IHpn ZnNfZGlyID0gMDsKLXRpbWVfdCB6Z2ZzX210aW1lID0gMDsKLXVuc2lnbmVkIGludCB6Z2ZzX21v ZGUgPSAwOwotCi0jaWZkZWYgQ0tTWU1MSU5LCi1jaGFyIGxpbmtuYW1lW0NLTUFYUEFUSCsxXTsK LSNpZm5kZWYgX0lGTE5LCi0jZGVmaW5lIF9JRkxOSyAwMTIwMDAwCi0jZW5kaWYgLyogX0lGTE5L ICovCi0jZW5kaWYgLyogQ0tTWU1MSU5LICovCi0KLUNLX09GRl9UCi16Z2V0ZnMobmFtZSkgY2hh ciAqbmFtZTsgewotICAgIHN0cnVjdCBzdGF0IGJ1ZjsKLSAgICBjaGFyIGZuYW1bQ0tNQVhQQVRI KzRdOwotICAgIENLX09GRl9UIHNpemUgPSAoQ0tfT0ZGX1QpLTE7Ci0gICAgaW50IHg7Ci0gICAg aW50IG5lZWRybGluayA9IDA7Ci0gICAgY2hhciAqIHM7Ci0KLSAgICBpZiAoIW5hbWUpIG5hbWUg PSAiIjsKLSAgICBpZiAoISpuYW1lKSByZXR1cm4oLTEpOwotCi0jaWZkZWYgVU5JWAotICAgIHgg PSBzdHJsZW4obmFtZSk7Ci0gICAgaWYgKHggPT0gOSAmJiAhc3RyY21wKG5hbWUsIi9kZXYvbnVs bCIpKQotICAgICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIFVOSVggKi8KLQotICAgIHMgPSBuYW1l OwotI2lmZGVmIERUSUxERQotICAgIGlmICgqcyA9PSAnficpIHsKLSAgICAgICAgcyA9IHRpbGRl X2V4cGFuZChzKTsKLSAgICAgICAgaWYgKCFzKSBzID0gIiI7Ci0gICAgICAgIGlmICghKnMpIHMg PSBuYW1lOwotICAgIH0KLSNlbmRpZiAvKiBEVElMREUgKi8KLSAgICB4ID0gY2tzdHJuY3B5KGZu YW0scyxDS01BWFBBVEgpOwotICAgIHMgPSBmbmFtOwotICAgIGRlYnVnKEYxMTEsInpnZXRmcyBm bmFtIixzLHgpOwotICAgIGlmICh4ID4gMCAmJiBzW3gtMV0gPT0gJy8nKQotICAgICAgc1t4LTFd ID0gJ1wwJzsKLQotICAgIHpnZnNfZGlyID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIEFz c3VtZSBpdCdzIG5vdCBhIGRpcmVjdG9yeSAqLwotICAgIHpnZnNfbGluayA9IDA7ICAgICAgICAg ICAgICAgICAgICAgIC8qIEFzc3VtZSBpdCdzIG5vdCBhIHN5bWxpbmsgKi8KLSAgICB6Z2ZzX210 aW1lID0gMDsJCQkvKiBObyB0aW1lIHlldCAqLwotICAgIHpnZnNfbW9kZSA9IDA7CQkJLyogTm8g cGVybWlzc2lvbiBiaXRzIHlldCAqLwotCi0jaWZkZWYgQ0tTWU1MSU5LICAgICAgICAgICAgICAg ICAgICAgICAgLyogV2UncmUgZG9pbmcgc3ltbGlua3M/ICovCi0jaWZkZWYgVVNFX0xTVEFUICAg ICAgICAgICAgICAgICAgICAgICAgLyogT0sgdG8gdXNlIGxzdGF0KCk/ICovCi0gICAgeCA9IGxz dGF0KHMsJmJ1Zik7Ci0gICAgZGVidWcoRjEwMSwiU1RBVCIsIiIsMSk7Ci0gICAgaWYgKHggPCAw KSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RhdCgpIGZhaWxlZCAqLwotICAgICAgcmV0 dXJuKC0xKTsKLSAgICBpZiAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3cg c2VlIGlmIGl0J3MgYSBzeW1saW5rICovCi0jaWZkZWYgU19JU0xOSwotICAgICAgICBTX0lTTE5L KGJ1Zi5zdF9tb2RlKQotI2Vsc2UKLSNpZmRlZiBfSUZMTksKLSAgICAgICAgKChfSUZNVCAmIGJ1 Zi5zdF9tb2RlKSA9PSBfSUZMTkspCi0jZW5kaWYgLyogX0lGTE5LICovCi0jZW5kaWYgLyogU19J U0xOSyAqLwotICAgICAgICApIHsKLSAgICAgICAgemdmc19saW5rID0gMTsgICAgICAgICAgICAg ICAgICAvKiBJdCdzIGEgc3ltbGluayAqLwotICAgICAgICBsaW5rbmFtZVswXSA9ICdcMCc7ICAg ICAgICAgICAgIC8qIEdldCB0aGUgbmFtZSAqLwotICAgICAgICB4ID0gcmVhZGxpbmsocyxsaW5r bmFtZSxDS01BWFBBVEgpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJ6Z2V0ZnMgcmVhZGxpbmsiLHMs eCk7Ci0gICAgICAgIGlmICh4ID4gLTEgJiYgeCA8IENLTUFYUEFUSCkgeyAgLyogSXQncyBhIGxp bmsgKi8KLSAgICAgICAgICAgIGxpbmtuYW1lW3hdID0gJ1wwJzsKLSAgICAgICAgICAgIHNpemUg PSBidWYuc3Rfc2l6ZTsgICAgICAgICAvKiBSZW1lbWJlciBzaXplIG9mIGxpbmsgKi8KLSAgICAg ICAgICAgIHggPSBzdGF0KHMsJmJ1Zik7ICAgICAgICAgICAvKiBOb3cgc3RhdCB0aGUgbGlua2Vk LXRvIGZpbGUgKi8KLQkgICAgZGVidWcoRjEwMSwiU1RBVCIsIiIsMik7Ci0gICAgICAgICAgICBp ZiAoeCA8IDApICAgICAgICAgICAgICAgICAgLyogc28gd2UgY2FuIHNlZSBpZiBpdCdzIGEgZGly ZWN0b3J5ICovCi0gICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g ICAgICAgICAgICBja3N0cm5jcHkobGlua25hbWUsIihsb29rdXAgZmFpbGVkKSIsQ0tNQVhQQVRI KTsKLSAgICAgICAgfQotICAgIH0KLSNlbHNlICAvKiAhVVNFX0xTVEFUICovCi0gICAgeCA9IHN0 YXQocywmYnVmKTsgICAgICAgICAgICAgICAgICAgLyogTm8gbHN0YXQoKSwgdXNlIHN0YXQoKSBp bnN0ZWFkICovCi0gICAgZGVidWcoRjEwMSwiU1RBVCIsIiIsMyk7Ci0gICAgaWYgKHggPCAwKQot ICAgICAgcmV0dXJuKC0xKTsKLSNlbmRpZiAvKiBVU0VfTFNUQVQgKi8KLQotICAgIC8qIERvIHdl IG5lZWQgdG8gY2FsbCByZWFkbGluaygpPyAqLwotCi0jaWZkZWYgTk9MSU5LQklUUwotLyoKLSAg bHN0YXQoKSBkb2VzIG5vdCB3b3JrIGluIFNDTyBvcGVyYXRpbmcgc3lzdGVtcy4gIEZyb20gIm1h biBOUyBsc3RhdCI6Ci0KLSAgbHN0YXQgb2J0YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmls ZSBuYW1lZCBieSBwYXRoLiBJbiB0aGUgY2FzZSBvZiBhCi0gIHN5bWJvbGljIGxpbmssIGxzdGF0 IHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpbmssIGFuZCBub3QgdGhlIGZpbGUKLSAg bmFtZWQgYnkgdGhlIGxpbmsuIEl0IGlzIG9ubHkgdXNlZCBieSB0aGUgTkZTIGF1dG9tb3VudCBk YWVtb24gYW5kIHNob3VsZAotICBub3QgYmUgdXRpbGl6ZWQgYnkgdXNlcnMuCi0qLwotICAgIG5l ZWRybGluayA9IDE7Ci0gICAgZGVidWcoRjEwMSwiemdldGZzIGZvcmNlZCBuZWVkcmxpbmsiLCIi LG5lZWRybGluayk7Ci0jZWxzZQotI2lmZGVmIFNfSVNMTksKLSAgICBuZWVkcmxpbmsgPSBTX0lT TE5LKGJ1Zi5zdF9tb2RlKTsKLSAgICBkZWJ1ZyhGMTAxLCJ6Z2V0ZnMgU19JU0xOSyBuZWVkcmxp bmsiLCIiLG5lZWRybGluayk7Ci0jZWxzZQotI2lmZGVmIF9JRkxOSwotICAgIG5lZWRybGluayA9 IChfSUZNVCAmIGJ1Zi5zdF9tb2RlKSA9PSBfSUZMTks7Ci0gICAgZGVidWcoRjEwMSwiemdldGZz IF9JRkxOSyBuZWVkcmxpbmsiLCIiLG5lZWRybGluayk7Ci0jZWxzZQotICAgIG5lZWRybGluayA9 IDE7Ci0gICAgZGVidWcoRjEwMSwiemdldGZzIGRlZmF1bHQgbmVlZHJsaW5rIiwiIixuZWVkcmxp bmspOwotI2VuZGlmIC8qIF9JRkxOSyAqLwotI2VuZGlmIC8qIFNfSVNMTksgKi8KLSNlbmRpZiAv KiBOT0xJTktCSVRTICovCi0KLSAgICBpZiAobmVlZHJsaW5rKSB7Ci0gICAgICAgIGxpbmtuYW1l WzBdID0gJ1wwJzsKLSAgICAgICAgZXJybm8gPSAwOwotICAgICAgICB4ID0gcmVhZGxpbmsocyxs aW5rbmFtZSxDS01BWFBBVEgpOwotI2lmZGVmIERFQlVHCi0gICAgICAgIGRlYnVnKEYxMTEsInpn ZXRmcyByZWFkbGluayIscyx4KTsKLSAgICAgICAgaWYgKHggPCAwKQotICAgICAgICAgIGRlYnVn KEYxMDEsInpnZXRmcyByZWFkbGluayBlcnJubyIsIiIsZXJybm8pOwotICAgICAgICBlbHNlCi0g ICAgICAgICAgZGVidWcoRjExMCwiemdldGZzIHJlYWRsaW5rIHJlc3VsdCIsbGlua25hbWUsMCk7 Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICAgICAgaWYgKHggPiAtMSAmJiB4IDwgQ0tNQVhQQVRI KSB7Ci0gICAgICAgICAgICB6Z2ZzX2xpbmsgPSAxOwotICAgICAgICAgICAgbGlua25hbWVbeF0g PSAnXDAnOwotICAgICAgICB9Ci0gICAgfQotI2Vsc2UgIC8qICFDS1NZTUxJTksgKi8KLSAgICB4 ID0gc3RhdChzLCZidWYpOyAgICAgICAgICAgICAgICAgICAvKiBKdXN0IHN0YXQgdGhlIGZpbGUg Ki8KLSAgICBkZWJ1ZyhGMTExLCJ6Z2V0ZnMgc3RhdCIscyx4KTsKLSAgICBpZiAoeCA8IDApICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgZ2V0IHRoZSBzaXplICovCi0gICAgICByZXR1 cm4oLTEpOwotI2VuZGlmIC8qIENLU1lNTElOSyAqLwotCi0gICAgemdmc19tdGltZSA9IGJ1Zi5z dF9tdGltZTsKLSAgICB6Z2ZzX21vZGUgPSBidWYuc3RfbW9kZTsKLSAgICB6Z2ZzX2RpciA9IChT X0lTRElSKGJ1Zi5zdF9tb2RlKSkgPyAxIDogMDsgLyogU2V0ICJpcyBkaXJlY3RvcnkiIGZsYWcg Ki8KLSAgICBkZWJ1ZyhGMTExLCJ6Z2V0ZnMgc2l6ZSIscyxzaXplKTsKLSAgICBkZWJ1ZyhGMTEx LCJ6Z2V0ZnMgc3Rfc2l6ZSIscyxidWYuc3Rfc2l6ZSk7Ci0gICAgcmV0dXJuKChzaXplIDwgMEwp ID8gYnVmLnN0X3NpemUgOiBzaXplKTsgLyogUmV0dXJuIHRoZSBzaXplICovCi19Ci0KLQotLyog IFogQyBIIEsgSSAgLS0gIENoZWNrIGlmIGlucHV0IGZpbGUgZXhpc3RzIGFuZCBpcyByZWFkYWJs ZSAgKi8KLQotLyoKLSAgUmV0dXJuczoKLSAgID49IDAgaWYgdGhlIGZpbGUgY2FuIGJlIHJlYWQg KHJldHVybnMgdGhlIHNpemUpLgotICAgICAtMSBpZiBmaWxlIGRvZXNuJ3QgZXhpc3Qgb3IgY2Fu J3QgYmUgYWNjZXNzZWQsCi0gICAgIC0yIGlmIGZpbGUgZXhpc3RzIGJ1dCBpcyBub3QgcmVhZGFi bGUgKGUuZy4gYSBkaXJlY3RvcnkgZmlsZSkuCi0gICAgIC0zIGlmIGZpbGUgZXhpc3RzIGJ1dCBw cm90ZWN0ZWQgYWdhaW5zdCByZWFkIGFjY2Vzcy4KLQotICBGb3IgQmVya2VsZXkgVW5peCwgYSBm aWxlIG11c3QgYmUgb2YgdHlwZSAicmVndWxhciIgdG8gYmUgcmVhZGFibGUuCi0gIERpcmVjdG9y eSBmaWxlcywgc3BlY2lhbCBmaWxlcywgYW5kIHN5bWJvbGljIGxpbmtzIGFyZSBub3QgcmVhZGFi bGUuCi0qLwotQ0tfT0ZGX1QKLXpjaGtpKG5hbWUpIGNoYXIgKm5hbWU7IHsKLSAgICBzdHJ1Y3Qg c3RhdCBidWY7Ci0gICAgY2hhciAqIHM7Ci0gICAgaW50IHgsIGl0c2FkaXIgPSAwOwotICAgIGV4 dGVybiBpbnQgemNoa2lkLCBkaXJhY3RpdmUsIG1hdGNoZmlmbzsKLQotICAgIGlmICghbmFtZSkK LSAgICAgIHJldHVybigtMSk7Ci0gICAgeCA9IHN0cmxlbihuYW1lKTsKLSAgICBpZiAoeCA8IDEp Ci0gICAgICByZXR1cm4oLTEpOwotICAgIHMgPSBuYW1lOwotCi0jaWZkZWYgVU5JWAotICAgIGlm ICh4ID09IDkgJiYgIXN0cmNtcChzLCIvZGV2L251bGwiKSkKLSAgICAgIHJldHVybigwKTsKLSAg ICBpZiAoeCA9PSA4ICYmICFzdHJjbXAocywiL2Rldi90dHkiKSkKLSAgICAgIHJldHVybigwKTsK LSNlbmRpZiAvKiBVTklYICovCi0KLSNpZmRlZiBEVElMREUKLSAgICBpZiAoKnMgPT0gJ34nKSB7 Ci0gICAgICAgIHMgPSB0aWxkZV9leHBhbmQocyk7Ci0gICAgICAgIGlmICghcykgcyA9ICIiOwot ICAgICAgICBpZiAoISpzKSBzID0gbmFtZTsKLSAgICB9Ci0jZW5kaWYgLyogRFRJTERFICovCi0K LSNpZmRlZiBDS1JPT1QKLSAgICBkZWJ1ZyhGMTExLCJ6Y2hraSBzZXRyb290Iixja3Jvb3QsY2ty b290c2V0KTsKLSAgICBpZiAoY2tyb290c2V0KSBpZiAoIXppbnJvb3QobmFtZSkpIHsKLQlkZWJ1 ZyhGMTEwLCJ6Y2hraSBzZXRyb290IHZpb2xhdGlvbiIsbmFtZSwwKTsKLQlyZXR1cm4oLTEpOwot ICAgIH0KLSNlbmRpZiAvKiBDS1JPT1QgKi8KLQotICAgIHggPSBzdGF0KHMsJmJ1Zik7Ci0gICAg ZGVidWcoRjEwMSwiU1RBVCIsIiIsNSk7Ci0gICAgaWYgKHggPCAwKSB7Ci0gICAgICAgIGRlYnVn KEYxMTEsInpjaGtpIHN0YXQgZmFpbHMiLHMsZXJybm8pOwotICAgICAgICByZXR1cm4oLTEpOwot ICAgIH0KLSAgICBpZiAoU19JU0RJUiAoYnVmLnN0X21vZGUpKQotICAgICAgaXRzYWRpciA9IDE7 Ci0KLSAgICBpZiAoIShpdHNhZGlyICYmIHpjaGtpZCkpIHsgICAgICAgICAvKiBVbmxlc3MgdGhp cy4uLiAqLwotICAgICAgICBpZiAoIVNfSVNSRUcgKGJ1Zi5zdF9tb2RlKSAgICAgIC8qIE11c3Qg YmUgcmVndWxhciBmaWxlICovCi0jaWZkZWYgU19JU0ZJRk8KLSAgICAgICAgICAgICYmICghbWF0 Y2hmaWZvIHx8ICFTX0lTRklGTyAoYnVmLnN0X21vZGUpKSAgLyogb3IgRklGTyAqLwotI2VuZGlm IC8qIFNfSVNGSUZPICovCi0gICAgICAgICAgICApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEs InpjaGtpIG5vdCByZWd1bGFyIGZpbGUgKG9yIGZpZm8pIixzLG1hdGNoZmlmbyk7Ci0gICAgICAg ICAgICByZXR1cm4oLTIpOwotICAgICAgICB9Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsInpjaGtp IHN0YXQgb2s6IixzLHgpOwotCi0gICAgaWYgKGRpcmFjdGl2ZSkgewkJCS8qIElmIGxpc3Rpbmcg ZG9uJ3QgY2hlY2sgYWNjZXNzICovCi0JeCA9IDE7Ci0gICAgfSBlbHNlIHsKLSNpZmRlZiBTV19B Q0NfSUQKLQlkZWJ1ZyhGMTAwLCJ6Y2hraSBzd2FwcGluZyBpZHMgZm9yIGFjY2VzcygpIiwiIiww KTsKLQlwcml2X29uKCk7Ci0jZW5kaWYgLyogU1dfQUNDX0lEICovCi0JaWYgKCh4ID0gYWNjZXNz KHMsUl9PSykpIDwgMCkKLQkgIHggPSBhY2Nlc3MocyxYX09LKTsJCS8qIEZvciBSVU4tY2xhc3Mg Y29tbWFuZHMgKi8KLSNpZmRlZiBTV19BQ0NfSUQKLQlwcml2X29mZigpOwotCWRlYnVnKEYxMDAs InpjaGtpIHN3YXBwZWQgaWRzIHJlc3RvcmVkIiwiIiwwKTsKLSNlbmRpZiAvKiBTV19BQ0NfSUQg Ki8KLSAgICB9Ci0gICAgaWYgKHggPCAwKSB7CQkJLyogSXMgdGhlIGZpbGUgYWNjZXNzaWJsZT8g Ki8KLSAgICAgICAgZGVidWcoRjExMSwiemNoa2kgYWNjZXNzIGZhaWxlZDoiLHMseCk7IC8qIE5v ICovCi0gICAgICAgIHJldHVybigtMyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWZsZW4gPSBi dWYuc3Rfc2l6ZTsgICAgICAgICAgICAvKiBZZXMsIHJlbWVtYmVyIHNpemUgKi8KLSAgICAgICAg Y2tzdHJuY3B5KG5hbWJ1ZixzLENLTUFYUEFUSCk7ICAvKiBhbmQgbmFtZSBnbG9iYWxseS4gKi8K LSAgICAgICAgZGVidWcoRjExMSwiemNoa2kgYWNjZXNzIG9rOiIscyxpZmxlbik7Ci0gICAgICAg IHJldHVybigoaWZsZW4gPiAtMUwpID8gaWZsZW4gOiAwTCk7Ci0gICAgfQotfQotCi0vKiAgWiBD IEggSyBPICAtLSAgQ2hlY2sgaWYgb3V0cHV0IGZpbGUgY2FuIGJlIGNyZWF0ZWQgICovCi0KLS8q Ci0gIFJldHVybnMgLTEgaWYgd3JpdGUgcGVybWlzc2lvbiBmb3IgdGhlIGZpbGUgd291bGQgYmUg ZGVuaWVkLCAwIG90aGVyd2lzZS4KLQotICBOT1RFOiBUaGUgZGVzaWduIGlzIGZsYXdlZC4gIFRo ZXJlIGlzIG5vIGRpc3RpbmN0aW9uIGFtb25nOgotICAgLiBDYW4gSSBvdmVyd3JpdGUgYW4gZXhp c3RpbmcgZmlsZT8KLSAgIC4gQ2FuIEkgY3JlYXRlIGEgZmlsZSAob3IgZGlyZWN0b3J5KSBpbiBh biBleGlzdGluZyBkaXJlY3Rvcnk/Ci0gICAuIENhbiBJIGNyZWF0ZSBhIGZpbGUgKG9yIGRpcmVj dG9yeSkgYW5kIGl0cyBwYXJlbnQocyk/Ci0qLwotaW50Ci16Y2hrbyhuYW1lKSBjaGFyICpuYW1l OyB7Ci0gICAgaW50IGksIHgsIGl0c2FkaXIgPSAwOwotICAgIGNoYXIgKnMgPSBOVUxMOwotICAg IGNoYXIgKiBvbmFtZTsKLSAgICBleHRlcm4gaW50IHpjaGtvZDsgICAgICAgICAgICAgICAgICAv KiBVc2VkIGJ5IElGIFdSSVRFQUJMRSAqLwotCi0gICAgZGVidWcoRjExMCwiemNoa28gZW50cnki LG5hbWUsMCk7Ci0KLSAgICBpZiAoIW5hbWUpIHJldHVybigtMSk7ICAgICAgICAgICAgICAvKiBX YXRjaCBvdXQgZm9yIG51bGwgcG9pbnRlci4gKi8KLQotICAgIG9uYW1lID0gbmFtZTsKLQotI2lm ZGVmIENLUk9PVAotICAgIGRlYnVnKEYxMTEsInpjaGtvIHNldHJvb3QiLGNrcm9vdCxja3Jvb3Rz ZXQpOwotICAgIGlmIChja3Jvb3RzZXQpIGlmICghemlucm9vdChuYW1lKSkgewotCWRlYnVnKEYx MTAsInpjaGtvIHNldHJvb3QgdmlvbGF0aW9uIixuYW1lLDApOwotCWVycm5vID0gRUFDQ0VTOwot CXJldHVybigtMSk7Ci0gICAgfQotI2VuZGlmIC8qIENLUk9PVCAqLwotCi0gICAgeCA9IChpbnQp c3RybGVuKG5hbWUpOyAgICAgICAgICAgICAgLyogR2V0IGxlbmd0aCBvZiBmaWxlbmFtZSAqLwot ICAgIGRlYnVnKEYxMTEsInpjaGtvIGxlbiIsbmFtZSx4KTsKLSAgICBkZWJ1ZyhGMTExLCJ6Y2hr byB6Y2hrb2QiLG5hbWUsemNoa29kKTsKLQotI2lmZGVmIFVOSVgKLS8qCi0gIFdyaXRpbmcgdG8g bnVsbCBkZXZpY2UgaXMgT0suCi0qLwotICAgIGlmICh4ID09IDkgJiYgIXN0cmNtcChuYW1lLCIv ZGV2L251bGwiKSkKLSAgICAgIHJldHVybigwKTsKLSAgICBpZiAoeCA9PSA4ICYmICFzdHJjbXAo bmFtZSwiL2Rldi90dHkiKSkKLSAgICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBVTklYICovCi0K LSAgICBzID0gbmFtZTsKLSNpZmRlZiBEVElMREUKLSAgICBpZiAoKnMgPT0gJ34nKSB7Ci0gICAg ICAgIHMgPSB0aWxkZV9leHBhbmQocyk7Ci0gICAgICAgIGlmICghcykgcyA9ICIiOwotICAgICAg ICBpZiAoISpzKSBzID0gbmFtZTsKLQl4ID0gc3RybGVuKHMpOwotICAgIH0KLSNlbmRpZiAvKiBE VElMREUgKi8KLSAgICBuYW1lID0gczsKLSAgICBzID0gTlVMTDsKLS8qCi0gIHpjaGtvZCBpcyBh IGdsb2JhbCBmbGFnIG1lYW5pbmcgd2UncmUgY2hlY2tpbmcgbm90IHRvIHNlZSBpZiB0aGUgZGly ZWN0b3J5Ci0gIGZpbGUgaXMgd3JpdGVhYmxlLCBidXQgaWYgaXQncyBPSyB0byBjcmVhdGUgZmls ZXMgSU4gdGhlIGRpcmVjdG9yeS4KLSovCi0gICAgaWYgKCF6Y2hrb2QgJiYgaXNkaXIobmFtZSkp IHsJLyogRGlyZWN0b3JpZXMgYXJlIG5vdCB3cml0ZWFibGUgKi8KLQlkZWJ1ZyhGMTExLCJ6Y2hr byBpc2RpciIsbmFtZSwxKTsKLQlyZXR1cm4oLTEpOwotICAgIH0KLSAgICBzID0gbWFsbG9jKHgr Myk7ICAgICAgICAgICAgICAgICAgICAvKiBNdXN0IGNvcHkgYmVjYXVzZSB3ZSBjYW4ndCAqLwot ICAgIGlmICghcykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdyaXRlIGludG8gb3Vy IGFyZ3VtZW50LiAqLwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwiemNoa286IE1hbGxvYyBlcnJv ciA0NlxuIik7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIGNrc3RybmNweShzLG5h bWUseCszKTsKLSNpZmRlZiBVTklYCi0jaWZkZWYgTk9VVUNQCi0gICAgewkJCQkJLyogMjAwOS8x MC8yMCAqLwotICAgIC8qIEFsbG93IHR0eSBkZXZpY2VzIHRvIG9wZW5lZCBhcyBvdXRwdXQgZmls ZXMgKi8KLQlpbnQgZmQsIGlzdHR5ID0gMCwgbW9kZSA9IDA7Ci0JZGVidWcoRjExMCwiemNoa28g YXR0ZW1wdGluZyB0byBvcGVuIixuYW1lLDApOwotCS8qIERvbid0IGJsb2NrIG9uIGxhY2sgb2Yg Q2FycmllciBvciBvdGhlciBtb2RlbSBzaWduYWxzICovCi0jaWZkZWYgT19OT05CTE9DSwotCW1v ZGUgPSBPX05PTkJMT0NLOwotI2Vsc2UKLSNpZmRlZiBPX05ERUxBWQotCW1vZGUgPSBPX05ERUxB WTsKLSNlbHNlCi0jaWZkZWYgRk5ERUxBWQotCW1vZGUgPSBGTkRFTEFZOwotI2VuZGlmIC8qIEZO REVMQVkgKi8KLSNlbmRpZgkvKiBPX05ERUxBWSAqLwotI2VuZGlmCS8qIE9fTk9OQkxPQ0sgKi8K LQlkZWJ1ZyhGMTExLCJ6Y2hrbyBvcGVuIG1vZGUiLG5hbWUsbW9kZSk7Ci0JZmQgPSBvcGVuKG5h bWUsT19XUk9OTFksbW9kZSk7CS8qIE11c3QgYXR0ZW1wdCB0byBvcGVuIGl0ICovCi0JZGVidWco RjExMSwiemNoa28gb3BlbiIsbmFtZSxmZCk7IAotCWlmIChmZCA+IC0xKSB7CQkJLyogdG8gZ2V0 IGEgZmlsZSBkZXNjcmlwdG9yICovCi0JICAgIGlmIChpc2F0dHkoZmQpKQkJLyogZm9yIGlzYXR0 eSgpICovCi0JICAgICAgaXN0dHkrKzsKLQkgICAgZGVidWcoRjExMSwiemNoa28gaXNhdHR5Iixu YW1lLGlzdHR5KTsKLQkgICAgZmQgPSBjbG9zZShmZCk7Ci0JICAgIGlmIChpc3R0eSkgewotCQln b3RvIGRvYWNjZXNzOwotCSAgICB9Ci0JfSBlbHNlIHsKLQkgICAgZGVidWcoRjEwMSwiemNoa28g b3BlbiBlcnJubyIsIiIsZXJybm8pOyAKLQkgICAgeCA9IC0xOwotCX0KLSAgICB9Ci0jZW5kaWYJ LyogTk9VVUNQICovCi0jZW5kaWYJLyogVU5JWCAqLwotICAgIGZvciAoaSA9IHg7IGkgPiAwOyBp LS0pIHsgICAgICAgICAgIC8qIFN0cmlwIGZpbGVuYW1lIGZyb20gcmlnaHQuICovCi0gICAgICAg IGlmIChJU0RJUlNFUChzW2ktMV0pKSB7Ci0gICAgICAgICAgICBpdHNhZGlyID0gMTsKLSAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsInpjaGtvIGki LCIiLGkpOwotICAgIGRlYnVnKEYxMDEsInpjaGtvIGl0c2FkaXIiLCIiLGl0c2FkaXIpOwotCi0j aWZkZWYgQ09NTUVOVAotLyogWC9PUEVOIFhQRzMtY29tcGxpYW50IHN5c3RlbXMgZmFpbCBpZiBh cmd1bWVudCBlbmRzIHdpdGggIi8iLi4uICAqLwotICAgIGlmIChpID09IDApICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIElmIG5vIHBhdGgsIHVzZSBjdXJyZW50IGRpcmVjdG9yeSAqLwotICAg ICAgc3RyY3B5KHMsIi4vIik7Ci0gICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogT3RoZXJ3aXNlLCB1c2UgZ2l2ZW4gb25lLiAqLwotICAgICAgc1tpXSA9ICdcMCc7Ci0j ZWxzZQotI2lmZGVmIENPTU1FTlQKLS8qCi0gIFRoZSBmb2xsb3dpbmcgZG9lcyBub3Qgd29yayBm b3IgImZvby9iYXIiIHdoZXJlIHRoZSBmb28gZGlyZWN0b3J5IGRvZXMKLSAgbm90IGV4aXN0IGV2 ZW4gdGhvdWdoIHdlIGNvdWxkIGNyZWF0ZSBpdDogYWNjZXNzKCJmb28vLiIpIGZhaWxzLCBidXQK LSAgYWNjZXNzKCJmb28iKSB3b3JrcyBPSy4KLSovCi0vKiBTbyBub3cgd2UgdXNlICJwYXRoLy4i IGlmIHBhdGggZ2l2ZW4sIG9yICIuIiBpZiBubyBwYXRoIGdpdmVuLiAqLwotICAgIHNbaSsrXSA9 ICcuJzsgICAgICAgICAgICAgICAgICAgICAgIC8qIEFwcGVuZCAiLiIgdG8gcGF0aC4gKi8KLSAg ICBzW2ldID0gJ1wwJzsKLSNlbHNlCi0vKiBTbyBOT1cgd2Ugc3RyaXAgcGF0aCBzZWdtZW50cyBm cm9tIHRoZSByaWdodCBhcyBsb25nIGFzIHRoZXkgZG9uJ3QgKi8KLS8qIGV4aXN0IC0tIHdlIG9u bHkgY2FsbCBhY2Nlc3MoKSBmb3IgcGF0aCBzZWdtZW50cyB0aGF0ICpkbyogZXhpc3QuLiAqLwot LyogKEJ1dCB0aGlzIGlzbid0IHF1aXRlIHJpZ2h0IGVpdGhlciBzaW5jZSBub3cgemNoa28oL2Zv by9iYXIvYmF6L3h4eCkgKi8KLS8qIHN1Y2NlZWRzIHdoZW4gSSBoYXZlIHdyaXRlIGFjY2VzcyB0 byBmb28gYW5kIGJhciBidXQgYmF6IGRvZXNuJ3QgZXhpdC4pICovCi0KLSAgICBpZiAoaXRzYWRp ciAmJiBpID4gMCkgewotICAgICAgICBzW2ktMV0gPSAnXDAnOwotICAgICAgICB3aGlsZSAoc1sw XSAmJiAhaXNkaXIocykpIHsKLSAgICAgICAgICAgIGZvciAoaSA9IChpbnQpc3RybGVuKHMpOyBp ID4gMDsgaS0tKSB7Ci0gICAgICAgICAgICAgICAgaWYgKElTRElSU0VQKHNbaS0xXSkpIHsKLSAg ICAgICAgICAgICAgICAgICAgc1tpLTFdID0gJ1wwJzsKLSAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGkg PT0gMCkKLSAgICAgICAgICAgICAgc1swXSA9ICdcMCc7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug ewotICAgICAgICBzW2krK10gPSAnLic7ICAgICAgICAgICAgICAgICAgIC8qIEFwcGVuZCAiLiIg dG8gcGF0aC4gKi8KLSAgICAgICAgc1tpXSA9ICdcMCc7Ci0gICAgfQotI2VuZGlmIC8qIENPTU1F TlQgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICBpZiAoIXNbMF0pCi0gICAgICBja3N0 cm5jcHkocywiLiIseCszKTsKLQotICBkb2FjY2VzczoKLQotI2lmZGVmIFNXX0FDQ19JRAotICAg IGRlYnVnKEYxMDAsInpjaGtvIHN3YXBwaW5nIGlkcyBmb3IgYWNjZXNzKCkiLCIiLDApOwotICAg IHByaXZfb24oKTsKLSNlbmRpZiAvKiBTV19BQ0NfSUQgKi8KLQotICAgIHggPSBhY2Nlc3MocyxX X09LKTsgICAgICAgICAgICAgICAgIC8qIENoZWNrIGFjY2VzcyBvZiBwYXRoLiAqLwotCi0jaWZk ZWYgU1dfQUNDX0lECi0gICAgcHJpdl9vZmYoKTsKLSAgICBkZWJ1ZyhGMTAwLCJ6Y2hrbyBzd2Fw cGVkIGlkcyByZXN0b3JlZCIsIiIsMCk7Ci0jZW5kaWYgLyogU1dfQUNDX0lEICovCi0KLSAgICBp ZiAoeCA8IDApCi0gICAgICBkZWJ1ZyhGMTExLCJ6Y2hrbyBhY2Nlc3MgZmFpbGVkOiIscyxlcnJu byk7Ci0gICAgZWxzZQotICAgICAgZGVidWcoRjExMSwiemNoa28gYWNjZXNzIG9rOiIscyx4KTsK LSAgICBpZiAocykgZnJlZShzKTsJCQkvKiBGcmVlIHRlbXBvcmFyeSBzdG9yYWdlICovCi0KLSAg ICByZXR1cm4oKHggPCAwKSA/IC0xIDogMCk7ICAgICAgICAgICAvKiBhbmQgcmV0dXJuLiAqLwot fQotCi0vKiAgWiBEIEUgTCBFIFQgIC0tICBEZWxldGUgdGhlIG5hbWVkIGZpbGUuICAqLwotCi0v KiBSZXR1cm5zOiAtMSBvbiBlcnJvciwgMCBvbiBzdWNjZXNzICovCi0KLWludAotemRlbGV0KG5h bWUpIGNoYXIgKm5hbWU7IHsKLSAgICBpbnQgeDsKLSNpZmRlZiBDS19MT0dJTgotICAgIGlmIChp c2d1ZXN0KQotICAgICAgcmV0dXJuKC0xKTsKLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotCi0jaWZk ZWYgQ0tST09UCi0gICAgZGVidWcoRjExMSwiemRlbGV0IHNldHJvb3QiLGNrcm9vdCxja3Jvb3Rz ZXQpOwotICAgIGlmIChja3Jvb3RzZXQpIGlmICghemlucm9vdChuYW1lKSkgewotCWRlYnVnKEYx MTAsInpkZWxldCBzZXRyb290IHZpb2xhdGlvbiIsbmFtZSwwKTsKLQlyZXR1cm4oLTEpOwotICAg IH0KLSNlbmRpZiAvKiBDS1JPT1QgKi8KLQotICAgIHggPSB1bmxpbmsobmFtZSk7Ci0gICAgZGVi dWcoRjExMSwiemRlbGV0IixuYW1lLHgpOwotI2lmZGVmIENLU1lTTE9HCi0gICAgaWYgKGNreHN5 c2xvZyA+PSBTWVNMR19GQyAmJiBja3hsb2dnaW5nKSB7Ci0gICAgICAgIGZ1bGxuYW1lWzBdID0g J1wwJzsKLSAgICAgICAgemZucWZwKG5hbWUsQ0tNQVhQQVRILGZ1bGxuYW1lKTsKLSAgICAgICAg ZGVidWcoRjExMCwiemRlbGV0IGZ1bGxuYW1lIixmdWxsbmFtZSwwKTsKLSAgICAgICAgaWYgKHgg PCAwKQotICAgICAgICAgIHN5c2xvZyhMT0dfSU5GTywgImZpbGVbXSAlczogZGVsZXRlIGZhaWxl ZCAoJW0pIiwgZnVsbG5hbWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgc3lzbG9nKExPR19J TkZPLCAiZmlsZVtdICVzOiBkZWxldGUgb2siLCBmdWxsbmFtZSk7Ci0gICAgfQotI2VuZGlmIC8q IENLU1lTTE9HICovCi0gICAgcmV0dXJuKHgpOwotfQotCi0vKiAgWiBSIFQgTyBMICAtLSAgQ29u dmVydCByZW1vdGUgZmlsZW5hbWUgaW50byBsb2NhbCBmb3JtICAqLwotCi1WT0lECi16cnRvbChu YW1lLG5hbWUyKSBjaGFyICpuYW1lLCAqbmFtZTI7IHsKLSAgICBuenJ0b2wobmFtZSxuYW1lMiwx LDAsQ0tNQVhQQVRIKTsKLX0KLQotVk9JRAotbnpydG9sKG5hbWUsbmFtZTIsZm5jbnYsZm5ycGF0 aCxtYXgpCi0gICAgY2hhciAqbmFtZSwgKm5hbWUyOyBpbnQgZm5jbnYsIGZucnBhdGgsIG1heDsK LXsgLyogbnpydG9sICovCi0gICAgY2hhciAqcywgKnA7Ci0gICAgaW50IGZsYWcgPSAwLCBuID0g MDsKLSAgICBjaGFyIGZ1bGxuYW1lW0NLTUFYUEFUSCsxXTsKLSAgICBpbnQgZGV2bnVsbCA9IDA7 Ci0gICAgaW50IGFjYXNlID0gMDsKLSAgICBpZiAoIW5hbWUyKSByZXR1cm47Ci0gICAgaWYgKCFu YW1lKSBuYW1lID0gIiI7Ci0KLSAgICBkZWJ1ZyhGMTExLCJuenJ0b2wgbmFtZSIsbmFtZSxmbmNu dik7Ci0KLSNpZmRlZiBEVElMREUKLSAgICBzID0gbmFtZTsKLSAgICBpZiAoKnMgPT0gJ34nKSB7 Ci0gICAgICAgIHMgPSB0aWxkZV9leHBhbmQocyk7Ci0gICAgICAgIGlmICghcykgcyA9ICIiOwot ICAgICAgICBpZiAoKnMpIG5hbWUgPSBzOwotICAgIH0KLSNlbmRpZiAvKiBEVElMREUgKi8KLQot ICAgIC8qIEhhbmRsZSB0aGUgcGF0aCAtLSB3ZSBkb24ndCBoYXZlIHRvIGNvbnZlcnQgaXRzIGZv cm1hdCwgc2luY2UgKi8KLSAgICAvKiB0aGUgc3RhbmRhcmQgcGF0aCBmb3JtYXQgYW5kIG91ciAo VU5JWCkgZm9ybWF0IGFyZSB0aGUgc2FtZS4gKi8KLQotICAgIGZ1bGxuYW1lWzBdID0gTlVMOwot ICAgIGRldm51bGwgPSAhc3RyY21wKG5hbWUsIi9kZXYvbnVsbCIpOwotCi0gICAgaWYgKCFkZXZu dWxsICYmIGZucnBhdGggPT0gUEFUSF9PRkYpIHsgLyogUkVDRUlWRSBQQVRITkFNRVMgT0ZGICov Ci0gICAgICAgIHpzdHJpcChuYW1lLCZwKTsKLSAgICAgICAgc3RybmNweShmdWxsbmFtZSxwLENL TUFYUEFUSCk7Ci0gICAgfSBlbHNlIGlmICghZGV2bnVsbCAmJiBmbnJwYXRoID09IFBBVEhfQUJT KSB7IC8qIFJFQyBQQVRITkFNRVMgQUJTT0xVVEUgKi8KLSAgICAgICAgc3RybmNweShmdWxsbmFt ZSxuYW1lLENLTUFYUEFUSCk7Ci0gICAgfSBlbHNlIGlmICghZGV2bnVsbCAmJiBpc2Fic29sdXRl KG5hbWUpKSB7IC8qIFJFQ0VJVkUgUEFUSE5BTUVTIFJFTEFUSVZFICovCi0JY2ttYWttc2coZnVs bG5hbWUsQ0tNQVhQQVRILCIuIixuYW1lLE5VTEwsTlVMTCk7Ci0gICAgfSBlbHNlIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogRGl0dG8gKi8KLSAgICAgICAgY2tzdHJuY3B5KGZ1bGxu YW1lLG5hbWUsQ0tNQVhQQVRIKTsKLSAgICB9Ci0gICAgZnVsbG5hbWVbQ0tNQVhQQVRIXSA9IE5V TDsKLSAgICBkZWJ1ZyhGMTEwLCJuenJ0b2wgZnVsbG5hbWUiLGZ1bGxuYW1lLDApOwotCi0jaWZu ZGVmIE5PVFJVTkNBVEUKLS8qCi0gIFRoZSBtYXhpbXVtIGxlbmd0aCBmb3IgYW55IHNlZ21lbnQg b2YgYSBmaWxlbmFtZSBpcyBNQVhOQU1MRU4sIGRlZmluZWQKLSAgYWJvdmUuICBPbiBzb21lIHBs YXRmb3JtcyAoYXQgbGVhc3QgUU5YKSBpZiBhIHNlZ21lbnQgZXhjZWVkcyB0aGlzIGxpbWl0LAot ICB0aGUgb3BlbiBmYWlscyB3aXRoIEVOQU1FVE9PTE9ORywgc28gd2UgbXVzdCBwcmV2ZW50IGl0 IGJ5IHRydW5jYXRpbmcgZWFjaAotICBvdmVybG9uZyBuYW1lIHNlZ21lbnQgdG8gdGhlIG1heGlt dW0gc2VnbWVudCBsZW5ndGggYmVmb3JlIHBhc3NpbmcgdGhlCi0gIG5hbWUgdG8gb3BlbigpLiAg VGhpcyBtdXN0IGJlIGRvbmUgZXZlbiB3aGVuIGZpbGUgbmFtZXMgYXJlIGxpdGVyYWwsIHNvIGFz Ci0gIG5vdCB0byBoYWx0IGEgZmlsZSB0cmFuc2ZlciB1bm5lY2Vzc2FyaWx5LgotKi8KLSAgICB7 Ci0gICAgICAgIGNoYXIgYnVmW0NLTUFYUEFUSCsxXTsgICAgICAgICAgLyogTmV3IHRlbXBvcmFy eSBidWZmZXIgb24gc3RhY2sgKi8KLSAgICAgICAgY2hhciAqcCA9IGZ1bGxuYW1lOyAgICAgICAg ICAgICAvKiBTb3VyY2UgYW5kICAqLwotICAgICAgICBjaGFyICpzID0gYnVmOyAgICAgICAgICAg ICAgICAgIC8qIGRlc3RpbmF0aW9uIHBvaW50ZXJzICovCi0gICAgICAgIGludCBpID0gMCwgbiA9 IDA7Ci0gICAgICAgIGRlYnVnKEYxMDEsIm56cnRvbCBzaXppbmcgTUFYTkFNTEVOIiwiIixNQVhO QU1MRU4pOwotICAgICAgICB3aGlsZSAoKnAgJiYgbiA8IENLTUFYUEFUSCkgeyAgIC8qIENvcHkg bmFtZSB0byBuZXcgYnVmZmVyICovCi0gICAgICAgICAgICBpZiAoKytpID4gTUFYTkFNTEVOKSB7 ICAgICAgLyogSWYgdGhpcyBzZWdtZW50IHRvbyBsb25nICovCi0gICAgICAgICAgICAgICAgd2hp bGUgKCpwICYmICpwICE9ICcvJykgLyogc2tpcCBwYXN0IHRoZSByZXN0Li4uICovCi0gICAgICAg ICAgICAgICAgICBwKys7Ci0gICAgICAgICAgICAgICAgaSA9IDA7ICAgICAgICAgICAgICAgICAg LyogYW5kIHJlc2V0IGNvdW50ZXIuICovCi0gICAgICAgICAgICB9IGVsc2UgaWYgKCpwID09ICcv JykgeyAgICAgLyogRW5kIG9mIHRoaXMgc2VnbWVudC4gKi8KLSAgICAgICAgICAgICAgICBpID0g MDsgICAgICAgICAgICAgICAgICAvKiBSZXNldCBjb3VudGVyLiAqLwotICAgICAgICAgICAgfQot ICAgICAgICAgICAgKnMrKyA9ICpwKys7ICAgICAgICAgICAgICAgIC8qIENvcHkgdGhpcyBjaGFy YWN0ZXIuICovCi0gICAgICAgICAgICBuKys7Ci0gICAgICAgIH0KLSAgICAgICAgKnMgPSBOVUw7 Ci0gICAgICAgIGNrc3RybmNweShmdWxsbmFtZSxidWYsQ0tNQVhQQVRIKTsgLyogQ29weSBiYWNr IHRvIG9yaWdpbmFsIGJ1ZmZlci4gKi8KLSAgICAgICAgZGVidWcoRjExMSwibnpydG9sIHNpemlu ZyIsZnVsbG5hbWUsbik7Ci0gICAgfQotI2VuZGlmIC8qIE5PVFJVTkNBVEUgKi8KLQotICAgIGlm ICghZm5jbnYgfHwgZGV2bnVsbCkgeyAgICAgICAgICAgIC8qIE5vdCBjb252ZXJ0aW5nICovCi0g ICAgICAgIGNrc3RybmNweShuYW1lMixmdWxsbmFtZSxtYXgpOyAgLyogV2UncmUgZG9uZS4gKi8K LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBuYW1lID0gZnVsbG5hbWU7ICAgICAgICAgICAg ICAgICAgICAvKiBDb252ZXJ0aW5nICovCi0KLSAgICBwID0gbmFtZTI7Ci0gICAgZm9yICg7ICpu YW1lICE9ICdcMCcgJiYgbiA8IG1heG5hbTsgbmFtZSsrKSB7Ci0gICAgICAgIGlmICgqbmFtZSA+ IFNQKSBmbGFnID0gMTsgICAgICAgLyogU3RyaXAgbGVhZGluZyBibGFua3MgYW5kIGNvbnRyb2xz ICovCi0gICAgICAgIGlmIChmbGFnID09IDAgJiYgKm5hbWUgPCAnIScpCi0gICAgICAgICAgY29u dGludWU7Ci0JaWYgKGZuY252ID4gMCkgewotCSAgICBpZiAoKm5hbWUgPT0gU1ApIHsKLQkJKnAr KyA9ICdfJzsKLQkJbisrOwotCQljb250aW51ZTsKLQkgICAgfQotCSAgICBpZiAoaXN1cHBlcigq bmFtZSkpCQkvKiBDaGVjayBmb3IgbWl4ZWQgY2FzZSAqLwotCSAgICAgIGFjYXNlIHw9IDE7Ci0J ICAgIGVsc2UgaWYgKGlzbG93ZXIoKm5hbWUpKQotCSAgICAgIGFjYXNlIHw9IDI7Ci0JfQotICAg ICAgICAqcCsrID0gKm5hbWU7Ci0gICAgICAgIG4rKzsKLSAgICB9Ci0gICAgKnAtLSA9ICdcMCc7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogVGVybWluYXRlICovCi0gICAgd2hpbGUgKCpwIDwg JyEnICYmIHAgPiBuYW1lMikgICAgICAgLyogU3RyaXAgdHJhaWxpbmcgYmxhbmtzICYgY29udHJv bHMgKi8KLSAgICAgICpwLS0gPSAnXDAnOwotCi0gICAgaWYgKCpuYW1lMiA9PSAnXDAnKSB7ICAg ICAgICAgICAgICAgLyogTm90aGluZyBsZWZ0PyAqLwotICAgICAgICBja3N0cm5jcHkobmFtZTIs Ik5PTkFNRSIsbWF4KTsJLyogZG8gdGhpcy4uLiAqLwotICAgIH0gZWxzZSBpZiAoYWNhc2UgPT0g MSkgeyAgICAgICAgICAgIC8qIEFsbCB1cHBlcmNhc2U/ICovCi0gICAgICAgIHAgPSBuYW1lMjsg ICAgICAgICAgICAgICAgICAgICAgLyogU28gY29udmVydCBhbGwgbGV0dGVycyB0byBsb3dlciAq LwotICAgICAgICB3aGlsZSAoKnApIHsKLSAgICAgICAgICAgIGlmIChpc3VwcGVyKCpwKSkKLSAg ICAgICAgICAgICAgKnAgPSB0b2xvd2VyKCpwKTsKLSAgICAgICAgICAgIHArKzsKLSAgICAgICAg fQotICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJuenJ0b2wgbmV3IG5hbWUiLG5hbWUyLDApOwotfQot Ci0KLS8qICBaIFMgVCBSIEkgUCAgLS0gIFN0cmlwIGRldmljZSAmIGRpcmVjdG9yeSBuYW1lIGZy b20gZmlsZSBzcGVjaWZpY2F0aW9uICovCi0KLS8qICBTdHJpcCBwYXRobmFtZSBmcm9tIGZpbGVu YW1lICJuYW1lIiwgcmV0dXJuIHBvaW50ZXIgdG8gcmVzdWx0IGluIG5hbWUyICovCi0KLXN0YXRp YyBjaGFyIHdvcmtbQ0tNQVhQQVRIKzFdOwotCi1WT0lECi16c3RyaXAobmFtZSxuYW1lMikgY2hh ciAqbmFtZSwgKipuYW1lMjsgewotICAgIGNoYXIgKmNwLCAqcHA7Ci0gICAgaW50IG4gPSAwOwot Ci0gICAgZGVidWcoRjExMCwienN0cmlwIGJlZm9yZSIsbmFtZSwwKTsKLSAgICBpZiAoIW5hbWUp IHsgKm5hbWUyID0gIiI7IHJldHVybjsgfQotICAgIHBwID0gd29yazsKLSNpZmRlZiBEVElMREUK LSAgICAvKiBTdHJpcCBsZWFkaW5nIHRpbGRlICovCi0gICAgaWYgKCpuYW1lID09ICd+JykgbmFt ZSsrOwotICAgIGRlYnVnKEYxMTAsInpzdHJpcCBhZnRlciB0aWxkZS1zdHJpcHBpbmciLG5hbWUs MCk7Ci0jZW5kaWYgLyogRFRJTERFICovCi0gICAgZm9yIChjcCA9IG5hbWU7ICpjcDsgY3ArKykg ewotICAgICAgICBpZiAoSVNESVJTRVAoKmNwKSkgewotICAgICAgICAgICAgcHAgPSB3b3JrOwot ICAgICAgICAgICAgbiA9IDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAqcHArKyA9 ICpjcDsKLSAgICAgICAgICAgIGlmIChuKysgPj0gQ0tNQVhQQVRIKQotICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAqcHAgPSAnXDAnOyAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBUZXJtaW5hdGUgdGhlIHN0cmluZyAqLwotICAgICpuYW1lMiA9IHdvcms7Ci0g ICAgZGVidWcoRjExMCwienN0cmlwIGFmdGVyIiwqbmFtZTIsMCk7Ci19Ci0KLS8qICBaIEwgVCBP IFIgIC0tICBMb2NhbCBUTyBSZW1vdGUgKi8KLQotVk9JRAotemx0b3IobmFtZSxuYW1lMikgY2hh ciAqbmFtZSwgKm5hbWUyOyB7Ci0gICAgbnpsdG9yKG5hbWUsbmFtZTIsMSwwLENLTUFYUEFUSCk7 Ci19Ci0KLS8qICBOIFogTCBUIE8gUiAgLS0gIE5ldyBMb2NhbCBUTyBSZW1vdGUgKi8KLQotLyoK LSAgZm5jbnYgPSAwIGZvciBubyBjb252ZXJzaW9uLCA+IDAgZm9yIHJlZ3VsYXIgY29udmVyc2lv biwgPCAwIGZvciBtaW5pbWFsLgotKi8KLVZPSUQKLW56bHRvcihuYW1lLG5hbWUyLGZuY252LGZu c3BhdGgsbWF4KQotICAgIGNoYXIgKm5hbWUsICpuYW1lMjsgaW50IGZuY252LCBmbnNwYXRoLCBt YXg7Ci17IC8qIG56bHRvciAqLwotICAgIGNoYXIgKmNwLCAqcHA7Ci0jaWZkZWYgQ09NTUVOVAot ICAgIGludCBkYyA9IDA7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIGludCBuID0gMDsKLSAg ICBjaGFyICpkb3RwID0gTlVMTDsKLSAgICBjaGFyICpkaXJwID0gTlVMTDsKLSAgICBjaGFyIGZ1 bGxuYW1lW0NLTUFYUEFUSCsxXTsKLSAgICBjaGFyICpwOwotICAgIENIQVIgYzsKLQotI2lmbmRl ZiBOT0NTRVRTCi0gICAgZXh0ZXJuIGludCBmY2hhcnNldCwgLyogdGNoYXJzZXQsICovIGxhbmd1 YWdlOwotICAgIGludCBsYW5nc3Y7Ci0gICAgX1BST1RPVFlQICggQ0hBUiAoKnN4byksIChDSEFS KSApID0gTlVMTDsgLyogVHJhbnNsYXRpb24gZnVuY3Rpb25zICovCi0jaWZkZWYgQ0tfQU5TSUMK LSAgICBleHRlcm4gQ0hBUiAoKnhsc1tNQVhUQ1NFVFMrMV1bTUFYRkNTRVRTKzFdKShDSEFSKTsK LSNlbHNlCi0gICAgZXh0ZXJuIENIQVIgKCp4bHNbTUFYVENTRVRTKzFdW01BWEZDU0VUUysxXSko KTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotICAgIGxhbmdzdiA9IGxhbmd1YWdlOwotICAgIGxh bmd1YWdlID0gTF9VU0FTQ0lJOwotI2lmZGVmIENPTU1FTlQKLSAgICAvKiBQcm9wZXIgdHJhbnNs YXRpb24gb2YgZmlsZW5hbWVzIG11c3QgYmUgZG9uZSBlbHNld2hlcmUgKi8KLSAgICBuID0gdGNo YXJzZXQgPyB0Y2hhcnNldCA6IFRDX1VTQVNDSUk7Ci0gICAgc3hvID0geGxzW25dW2ZjaGFyc2V0 XTsKLSNlbHNlCi0gICAgc3hvID0geGxzW1RDX1VTQVNDSUldW2ZjaGFyc2V0XTsKLSNlbmRpZiAv KiBDT01NRU5UICovCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi0gICAgZGVidWcoRjExMCwibnps dG9yIG5hbWUiLG5hbWUsMCk7Ci0KLSAgICAvKiBIYW5kbGUgcGF0aG5hbWUgKi8KLQotICAgIGZ1 bGxuYW1lWzBdID0gTlVMOwotICAgIGlmIChmbnNwYXRoID09IFBBVEhfT0ZGKSB7ICAgICAgICAg IC8qIFBBVEhOQU1FUyBPRkYgKi8KLSAgICAgICAgenN0cmlwKG5hbWUsJnApOwotICAgICAgICBj a3N0cm5jcHkoZnVsbG5hbWUscCxDS01BWFBBVEgpOwotICAgIH0gZWxzZSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFBBVEhOQU1FUyBSRUxBVElWRSBvciBBQlNPTFVURSAqLwotICAg ICAgICBjaGFyICogcCA9IG5hbWU7Ci0gICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICBp ZiAoIXN0cm5jbXAocCwiLi4vIiwzKSkKLSAgICAgICAgICAgICAgcCArPSAzOwotICAgICAgICAg ICAgZWxzZSBpZiAoIXN0cm5jbXAocCwiLi8iLDIpKQotICAgICAgICAgICAgICBwICs9IDI7Ci0g ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg IGlmIChmbnNwYXRoID09IFBBVEhfQUJTKSB7ICAgICAgLyogQUJTT0xVVEUgKi8KLSAgICAgICAg ICAgIHpmbnFmcChwLENLTUFYUEFUSCxmdWxsbmFtZSk7Ci0gICAgICAgIH0gZWxzZSB7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogUkVMQVRJVkUgKi8KLSAgICAgICAgICAgIGNrc3RybmNweShm dWxsbmFtZSxwLENLTUFYUEFUSCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZGVidWcoRjExMCwi bnpsdG9yIGZ1bGxuYW1lIixmdWxsbmFtZSwwKTsKLQotICAgIGlmICghZm5jbnYpIHsgICAgICAg ICAgICAgICAgICAgICAgIC8qIE5vdCBjb252ZXJ0aW5nICovCi0gICAgICAgIGNrc3RybmNweShu YW1lMixmdWxsbmFtZSxtYXgpOyAgLyogV2UncmUgZG9uZS4gKi8KLSNpZm5kZWYgTk9DU0VUUwot ICAgICAgICBsYW5nc3YgPSBsYW5ndWFnZTsKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0gICAgICAg IHJldHVybjsKLSAgICB9Ci0gICAgbmFtZSA9IGZ1bGxuYW1lOyAgICAgICAgICAgICAgICAgICAg LyogQ29udmVydGluZyAqLwotCi0jaWZkZWYgYWVnaXMKLSAgICBjaGFyICpuYW1lY2hhcnM7Ci0g ICAgaW50IHRpbGRlID0gMCwgYnNsYXNoID0gMDsKLQotICAgIGlmICgobmFtZWNoYXJzID0gZ2V0 ZW52KCJOQU1FQ0hBUlMiKSkgIT0gTlVMTCkgewotICAgICAgICBpZiAoY2tzdHJjaHIobmFtZWNo YXJzLCAnficgKSAhPSBOVUxMKSB0aWxkZSAgPSAnfic7Ci0gICAgICAgIGlmIChja3N0cmNocihu YW1lY2hhcnMsICdcXCcpICE9IE5VTEwpIGJzbGFzaCA9ICdcXCc7Ci0gICAgfSBlbHNlIHsKLSAg ICAgICAgdGlsZGUgPSAnfic7Ci0gICAgICAgIGJzbGFzaCA9ICdcXCc7Ci0gICAgfQotI2VuZGlm IC8qIGFlZ2lzICovCi0KLSAgICBwcCA9IHdvcms7ICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBPdXRwdXQgYnVmZmVyICovCi0gICAgZm9yIChjcCA9IG5hbWUsIG4gPSAwOyAqY3AgJiYgbiA8 IG1heDsgY3ArKyxuKyspIHsgLyogQ29udmVydCBuYW1lIGNoYXJzICovCi0gICAgICAgIGMgPSAq Y3A7Ci0jaWZuZGVmIE5PQ1NFVFMKLSAgICAgICAgaWYgKHN4bykgYyA9ICgqc3hvKShjKTsgICAg ICAgICAvKiBDb252ZXJ0IHRvIEFTQ0lJICovCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotICAgICAg ICBpZiAoZm5jbnYgPiAwICYmIGlzbG93ZXIoYykpCS8qIFVwcGVyY2FzZSBsZXR0ZXJzICovCi0g ICAgICAgICAgKnBwKysgPSB0b3VwcGVyKGMpOyAgICAgICAgICAgLyogQ2hhbmdlIHRpbGRlIHRv IGh5cGhlbiAqLwotICAgICAgICBlbHNlIGlmIChjID09ICd+JykKLSAgICAgICAgICAqcHArKyA9 ICctJzsKLSAgICAgICAgZWxzZSBpZiAoZm5jbnYgPiAwICYmIGMgPT0gJyMnKQkvKiBDaGFuZ2Ug bnVtYmVyIHNpZ24gdG8gJ1gnICovCi0gICAgICAgICAgKnBwKysgPSAnWCc7Ci0gICAgICAgIGVs c2UgaWYgKGMgPT0gJyonIHx8IGMgPT0gJz8nKSAgLyogQ2hhbmdlIHdpbGRjYXJkIGNoYXJzIHRv ICdYJyAqLwotICAgICAgICAgICpwcCsrID0gJ1gnOwotICAgICAgICBlbHNlIGlmIChjID09ICcg JykgICAgICAgICAgICAgIC8qIENoYW5nZSBzcGFjZSB0byB1bmRlcnNjb3JlICovCi0gICAgICAg ICAgKnBwKysgPSAnXyc7Ci0gICAgICAgIGVsc2UgaWYgKGMgPCAnICcpICAgICAgICAgICAgICAg LyogQ2hhbmdlIGNvbnRyb2xzIHRvICdYJyAqLwotICAgICAgICAgICpwcCsrID0gJ1gnOwotICAg ICAgICBlbHNlIGlmIChmbmNudiA+IDAgJiYgYyA9PSAnLicpIHsgLyogQ2hhbmdlIGRvdCB0byB1 bmRlcnNjb3JlICovCi0gICAgICAgICAgICBkb3RwID0gcHA7ICAgICAgICAgICAgICAgICAgLyog UmVtZW1iZXIgd2hlcmUgd2UgbGFzdCBkaWQgdGhpcyAqLwotICAgICAgICAgICAgKnBwKysgPSAn Xyc7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoYyA9PSAnLycpCi0gICAgICAg ICAgICAgIGRpcnAgPSBwcDsKLSAgICAgICAgICAgICpwcCsrID0gYzsKLSAgICAgICAgfQotICAg IH0KLSAgICAqcHAgPSBOVUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaWUgaXQgb2Zm LiAqLwotI2lmZGVmIENPTU1FTlQKLSAgICBpZiAoZG90cCkgKmRvdHAgPSAnLic7ICAgICAgICAg ICAgICAvKiBSZXN0b3JlIGxhc3QgZG90IChpZiBhbnkpICovCi0jZWxzZQotICAgIGlmIChkb3Rw ID4gZGlycCkgKmRvdHAgPSAnLic7ICAgICAgIC8qIFJlc3RvcmUgbGFzdCBkb3QgaW4gZmlsZSBu YW1lICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIGNwID0gbmFtZTI7ICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIElmIG5vdGhpbmcgYmVmb3JlIGRvdCwgKi8KLSAgICBpZiAoKndvcmsg PT0gJy4nKSAqY3ArKyA9ICdYJzsgICAgICAvKiBpbnNlcnQgJ1gnICovCi0gICAgY2tzdHJuY3B5 KGNwLHdvcmssbWF4KTsKLSNpZm5kZWYgTk9DU0VUUwotICAgIGxhbmd1YWdlID0gbGFuZ3N2Owot I2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSAgICBkZWJ1ZyhGMTEwLCJuemx0b3IgbmFtZTIiLG5hbWUy LDApOwotfQotCi0KLS8qICBaIEMgSCBEIEkgUiAgLS0gIENoYW5nZSBkaXJlY3RvcnkgICovCi0v KgotICBDYWxsIHdpdGg6Ci0gICAgZGlybmFtID0gcG9pbnRlciB0byBuYW1lIG9mIGRpcmVjdG9y eSB0byBjaGFuZ2UgdG8sCi0gICAgICB3aGljaCBtYXkgYmUgIiIgb3IgTlVMTCB0byBpbmRpY2F0 ZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkuCi0gIFJldHVybnM6Ci0gICAgMCBvbiBmYWlsdXJlCi0g ICAgMSBvbiBzdWNjZXNzCi0qLwotaW50Ci16Y2hkaXIoZGlybmFtKSBjaGFyICpkaXJuYW07IHsK LSAgICBjaGFyICpoZCwgKnNwOwotI2lmZGVmIElLU0RCCi0gICAgX1BST1RPVFlQIChpbnQgc2xv dGRpciwoY2hhciAqLGNoYXIgKikpOwotI2VuZGlmIC8qIElLU0RCICovCi0jaWZuZGVmIE5PU1BM Ci0gICAgZXh0ZXJuIHN0cnVjdCBtdGFiICptYWN0YWI7ICAgICAgICAgICAgIC8qIE1haW4gbWFj cm8gdGFibGUgKi8KLSAgICBleHRlcm4gaW50IG5tYWM7ICAgICAgICAgICAgICAgICAgICAgICAg LyogTnVtYmVyIG9mIG1hY3JvcyAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSAgICBkZWJ1ZyhG MTEwLCJ6Y2hkaXIiLGRpcm5hbSwwKTsKLSAgICBpZiAoIWRpcm5hbSkgZGlybmFtID0gIiI7Ci0g ICAgaWYgKCEqZGlybmFtKSAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgYXJndW1lbnQgaXMg bnVsbCBvciBlbXB0eSwgKi8KLSAgICAgIGRpcm5hbSA9IHpob21lKCk7ICAgICAgICAgICAgICAg ICAvKiB1c2UgdXNlcidzIGhvbWUgZGlyZWN0b3J5LiAqLwotICAgIHNwID0gZGlybmFtOwotICAg IGRlYnVnKEYxMTAsInpjaGRpciAyIixkaXJuYW0sMCk7Ci0KLSNpZmRlZiBEVElMREUKLSAgICBo ZCA9IHRpbGRlX2V4cGFuZChkaXJuYW0pOyAgICAgICAgICAvKiBBdHRlbXB0IHRvIGV4cGFuZCB0 aWxkZSAqLwotICAgIGlmICghaGQpIGhkID0gIiI7Ci0gICAgaWYgKCpoZCA9PSAnXDAnKSBoZCA9 IGRpcm5hbTsgICAgICAgLyogaW4gZGlyZWN0b3J5IG5hbWUuICovCi0jZWxzZQotICAgIGhkID0g ZGlybmFtOwotI2VuZGlmIC8qIERUSUxERSAqLwotICAgIGRlYnVnKEYxMTAsInpjaGRpciAzIixo ZCwwKTsKLQotI2lmZGVmIENLUk9PVAotICAgIGRlYnVnKEYxMTEsInpjaGRpciBzZXRyb290Iixj a3Jvb3QsY2tyb290c2V0KTsKLSAgICBpZiAoY2tyb290c2V0KSBpZiAoIXppbnJvb3QoaGQpKSB7 Ci0JZGVidWcoRjExMCwiemNoZGlyIHNldHJvb3QgdmlvbGF0aW9uIixoZCwwKTsKLQlyZXR1cm4o MCk7Ci0gICAgfQotI2VuZGlmIC8qIENLUk9PVCAqLwotCi0jaWZkZWYgcGRwMTEKLSAgICAvKiBK dXN0IHRvIHNhdmUgc29tZSBzcGFjZSAqLwotICAgIHJldHVybigoY2hkaXIoaGQpID09IDApID8g MSA6IDApOwotI2Vsc2UKLSAgICBpZiAoY2hkaXIoaGQpID09IDApIHsgICAgICAgICAgICAgICAg ICAgICAgIC8qIFRyeSB0byBjZCAqLwotI2lmZGVmIElLU0RCCi0jaWZkZWYgQ0tfTE9HSU4KLSAg ICAgICAgaWYgKGluc2VydmVyICYmIGlrZGJvcGVuKQotICAgICAgICAgIHNsb3RkaXIoaXNndWVz dCA/IGFub25yb290IDogIiIsIHpndGRpcigpKTsKLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotI2Vu ZGlmIC8qIElLU0RCICovCi0KLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgaWYgKG5tYWMpIHsJCQkv KiBBbnkgbWFjcm9zIGRlZmluZWQ/ICovCi0gICAgICAgICAgICBpbnQgazsJCQkvKiBZZXMgKi8K LSAgICAgICAgICAgIHN0YXRpYyBpbnQgb25fY2QgPSAwOwotICAgICAgICAgICAgaWYgKCFvbl9j ZCkgewotICAgICAgICAgICAgICAgIG9uX2NkID0gMTsKLSAgICAgICAgICAgICAgICBrID0gbWxv b2sobWFjdGFiLCJvbl9jZCIsbm1hYyk7ICAgLyogTG9vayB0aGlzIHVwICovCi0gICAgICAgICAg ICAgICAgaWYgKGsgPj0gMCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIElmIGZvdW5kLCAqLwot ICAgICAgICAgICAgICAgICAgICBpZiAoZG9kbyhrLHpndGRpcigpLDApID4gLTEpICAvKiBzZXQg aXQgdXAsICovCi0JCSAgICAgIHBhcnNlcigxKTsgICAgICAgICAgICAgICAgICAvKiBhbmQgZXhl Y3V0ZSBpdCAqLwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBvbl9jZCA9IDA7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgICAgICBy ZXR1cm4oMSk7Ci0gICAgfQotICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBwZHAxMSAqLwotfQot Ci1pbnQKLSNpZmRlZiBDS19BTlNJQwotemNoa3BpZCh1bnNpZ25lZCBsb25nIHhwaWQpCi0jZWxz ZQotemNoa3BpZCh4cGlkKSB1bnNpZ25lZCBsb25nIHhwaWQ7Ci0jZW5kaWYgLyogQ0tfQU5TSUMg Ki8KLXsKLSAgICByZXR1cm4oKGtpbGwoKFBJRF9UKXhwaWQsMCkgPCAwKSA/IDAgOiAxKTsKLX0K LQotCi0vKiAgWiBIIE8gTSBFICAtLSAgUmV0dXJuIHBvaW50ZXIgdG8gdXNlcidzIGhvbWUgZGly ZWN0b3J5ICAqLwotCi1zdGF0aWMgY2hhciAqIHpob21kaXIgPSBOVUxMOwotCi1jaGFyICoKLXpo b21lKCkgewotICAgIGNoYXIgKiBob21lOwotCi0jaWZkZWYgQ0tST09UCi0gICAgaWYgKGNrcm9v dHNldCkKLSAgICAgIHJldHVybigoY2hhciAqKWNrcm9vdCk7Ci0jZW5kaWYgLyogQ0tST09UICov Ci0KLSNpZmRlZiBQbGFuOQotICAgIGhvbWUgPSBnZXRlbnYoImhvbWUiKTsKLSNlbHNlCi0gICAg aG9tZSA9IGdldGVudigiSE9NRSIpOwotI2VuZGlmIC8qIFBsYW45ICovCi0gICAgbWFrZXN0cigm emhvbWRpcixob21lKTsKLSAgICByZXR1cm4oaG9tZSA/IHpob21kaXIgOiAiLiIpOwotfQotCi0v KiAgWiBHIFQgRCBJIFIgIC0tICBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgY3VycmVudCBkaXJl Y3RvcnkgICovCi0KLS8qCi0gIFRoZSAicHJlZmVycmVkIiBpbnRlcmZhY2UgZm9yIGdldHRpbmcg dGhlIGN1cnJlbnQgZGlyZWN0b3J5IGluIG1vZGVybiBVTklYCi0gIGlzIGdldGN3ZCgpIFtQT1NJ WCAxMDAzLjEgNS4yLjJdLiAgSG93ZXZlciwgb24gY2VydGFpbiBwbGF0Zm9ybXMgKHN1Y2ggYXMK LSAgU3VuT1MpLCBpdCBpcyBpbXBsZW1lbnRlZCBieSBmb3JraW5nIGEgc2hlbGwsIGZlZWRpbmcg aXQgdGhlIHB3ZCBjb21tYW5kLAotICBhbmQgcmV0dXJuaW5nIHRoZSByZXN1bHQsIHdoaWNoIGlz IG5vdCBvbmx5IGluZWZmaWNpZW50IGJ1dCBhbHNvIGNhbiByZXN1bHQKLSAgaW4gc3RyYXkgbWVz c2FnZXMgdG8gdGhlIHRlcm1pbmFsLiAgSW4gc3VjaCBjYXNlcyAtLSBhcyB3ZWxsIGFzIHdoZW4K LSAgZ2V0Y3dkKCkgaXMgbm90IGF2YWlsYWJsZSBhdCBhbGwgLS0gZ2V0d2QoKSBjYW4gYmUgdXNl ZCBpbnN0ZWFkIGJ5IGRlZmluaW5nCi0gIFVTRV9HRVRXRC4gIEhvd2V2ZXIsIG5vdGUgdGhhdCBn ZXR3ZCgpIHByb3ZpZGVzIG5vIGJ1ZmZlci1sZW5ndGggYXJndW1lbnQKLSAgYW5kIHRoZXJlZm9y ZSBubyBzYWZlZ3VhcmQgYWdhaW5zdCBtZW1vcnkgbGVha3MuCi0qLwotI2lmbmRlZiBVU0VfR0VU V0QKLSNpZmRlZiBCU0Q0MgotI2RlZmluZSBVU0VfR0VUV0QKLSNlbHNlCi0jaWZkZWYgU1VOT1M0 Ci0jZGVmaW5lIFVTRV9HRVRXRAotI2VuZGlmIC8qIFNVTk9TNCAqLwotI2VuZGlmIC8qIEJTRDQy ICovCi0jZW5kaWYgLyogVVNFX0dFVFdEICovCi0KLSNpZmRlZiBwZHAxMQotI2RlZmluZSBDV0RC TCA4MCAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNhdmUgZXZlcnkgYnl0ZSB3ZSBjYW4uLi4g Ki8KLSNlbHNlCi0jZGVmaW5lIENXREJMIENLTUFYUEFUSAotI2VuZGlmIC8qIHBkcDExICovCi1z dGF0aWMgY2hhciBjd2RidWZbQ1dEQkwrMl07Ci0vKgotICBOT1RFOiBUaGUgZ2V0Y3dkKCkgcHJv dG90eXBlcyBhcmUgY29tbWVudGVkIG91dCBvbiBwdXJwb3NlLiAgSWYgeW91IGdldAotICBjb21w aWxlLXRpbWUgd2FybmluZ3MsIHNlYXJjaCB0aHJvdWdoIHlvdXIgc3lzdGVtJ3MgaGVhZGVyIGZp bGVzIHRvIHNlZQotICB3aGljaCBvbmUgaGFzIHRoZSBuZWVkZWQgcHJvdG90eXBlLCBhbmQgI2lu Y2x1ZGUgaXQuICBVc3VhbGx5IGl0IGlzCi0gIDx1bmlzdGQuaD4uICBTZWUgdGhlIHNlY3Rpb24g Zm9yIGluY2x1ZGluZyA8dW5pc3RkLmg+IGluIGNrY2RlYi5oIGFuZAotICBtYWtlIGFueSBuZWVk ZWQgYWRqdXN0bWVudHMgdGhlcmUgKGFuZCByZXBvcnQgdGhlbSkuCi0qLwotY2hhciAqCi16Z3Rk aXIoKSB7Ci0gICAgY2hhciAqIGJ1ZiA9IGN3ZGJ1ZjsKLSAgICBjaGFyICogczsKLQotI2lmZGVm IFVTRV9HRVRXRAotICAgIGV4dGVybiBjaGFyICpnZXR3ZCgpOwotICAgIHMgPSBnZXR3ZChidWYp OwotICAgIGRlYnVnKEYxMTAsInpndGRpciBCU0Q0IGdldHdkKCkiLHMsMCk7Ci0gICAgaWYgKCFz KSBzID0gIi4vIjsKLSAgICByZXR1cm4ocyk7Ci0jZWxzZQotI2lmZGVmIEJTRDQ0Ci0jaWZkZWYg RENMR0VUQ1dECi1fUFJPVE9UWVAoIGNoYXIgKiBnZXRjd2QsIChjaGFyICosIFNJWkVfVCkgKTsK LSNlbmRpZiAvKiBEQ0xHRVRDV0QgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ6Z3RkaXIgQlNENDQgQ1dE QkwiLCIiLENXREJMKTsKLSAgICBzID0gZ2V0Y3dkKGJ1ZixDV0RCTCk7Ci0gICAgaWYgKCFzKSBz ID0gIi4vIjsKLSAgICByZXR1cm4ocyk7Ci0jZWxzZQotI2lmZGVmIE1JTklYMgotI2lmZGVmIERD TEdFVENXRAotICAgIF9QUk9UT1RZUCggY2hhciAqIGdldGN3ZCwgKGNoYXIgKiwgU0laRV9UKSAp OwotI2VuZGlmIC8qIERDTEdFVENXRCAqLwotICAgIGRlYnVnKEYxMDEsInpndGRpciBNSU5JWDIg Q1dEQkwiLCIiLENXREJMKTsKLSAgICBzID0gZ2V0Y3dkKGJ1ZixDV0RCTCk7Ci0gICAgaWYgKCFz KSBzID0gIi4vIjsKLSAgICByZXR1cm4ocyk7Ci0jZWxzZQotI2lmZGVmIFNWT1JQT1NJWAotI2lm ZGVmIENPTU1FTlQKLS8qIFRoaXMgbm9uLUFOU0kgcHJvdG90eXBlIGNhbiBiZSBmYXRhbCBhdCBy dW50aW1lISAoZS5nLiBpbiBTQ08zLjJ2NS4wLjUpLiAqLwotLyogQW55d2F5IGl0J3MgYWxyZWFk eSBwcm90b3R5cGVkIGluIHNvbWUgaGVhZGVyIGZpbGUgdGhhdCB3ZSBoYXZlIGluY2x1ZGVkLiAq LwotICAgIGV4dGVybiBjaGFyICpnZXRjd2QoKTsKLSNlbHNlCi0jaWZkZWYgRENMR0VUQ1dECi0g ICAgX1BST1RPVFlQKCBjaGFyICogZ2V0Y3dkLCAoY2hhciAqLCBTSVpFX1QpICk7Ci0jZW5kaWYg LyogRENMR0VUQ1dEICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIGRlYnVnKEYxMDEsInpn dGRpciBTVk9SUE9TSVggQ1dEQkwiLCIiLENXREJMKTsKLSAgICBzID0gZ2V0Y3dkKGJ1ZixDV0RC TCk7Ci0gICAgaWYgKCFzKSBzID0gIi4vIjsKLSAgICByZXR1cm4ocyk7Ci0jZWxzZQotI2lmZGVm IENPSEVSRU5UCi0jaWZkZWYgX0kzODYKLSNpZmRlZiBEQ0xHRVRDV0QKLSAgICBleHRlcm4gY2hh ciAqZ2V0Y3dkKCk7Ci0jZW5kaWYgLyogRENMR0VUQ1dEICovCi0gICAgZGVidWcoRjEwMSwiemd0 ZGlyIENPSEVSRU5UIF9JMzg2IENXREJMIiwiIixDV0RCTCk7Ci0gICAgcyA9IGdldGN3ZChidWYs Q1dEQkwpOwotICAgIGlmICghcykgcyA9ICIuLyI7Ci0gICAgcmV0dXJuKHMpOwotI2Vsc2UKLSAg ICBleHRlcm4gY2hhciAqZ2V0d2QoKTsKLSAgICBkZWJ1ZyhGMTAxLCJ6Z3RkaXIgQ09IRVJFTlQg Q1dEQkwiLCIiLENXREJMKTsKLSAgICBzID0gZ2V0d2QoYnVmKTsKLSAgICBpZiAoIXMpIHMgPSAi Li8iOwotICAgIHJldHVybihzKTsKLSNlbmRpZiAvKiBfSTM4NiAqLwotI2Vsc2UKLSNpZmRlZiBT VU5PUzQKLSAgICBkZWJ1ZyhGMTAxLCJ6Z3RkaXIgU1VOT1MgQ1dEQkwiLCIiLENXREJMKTsKLSAg ICBzID0gZ2V0Y3dkKGJ1ZixDV0RCTCk7Ci0gICAgaWYgKCFzKSBzID0gIi4vIjsKLSAgICByZXR1 cm4ocyk7Ci0jZWxzZQotICAgIHJldHVybigiLi8iKTsKLSNlbmRpZiAvKiBTVU5PUzQgKi8KLSNl bmRpZiAvKiBDT0hFUkVOVCAqLwotI2VuZGlmIC8qIFNZU1ZPUlBPU0lYICovCi0jZW5kaWYgLyog TUlOSVgyICovCi0jZW5kaWYgLyogQlNENDQgKi8KLSNlbmRpZiAvKiBVU0VfR0VUV0QgKi8KLX0K LQotLyogIFogWCBDIE0gRCAtLSBSdW4gYSBzeXN0ZW0gY29tbWFuZCBzbyBpdHMgb3V0cHV0IGNh biBiZSByZWFkIGxpa2UgYSBmaWxlICovCi0KLSNpZm5kZWYgTk9QVVNICi1pbnQKLXp4Y21kKGZp bG51bSxjb21hbmQpIGludCBmaWxudW07IGNoYXIgKmNvbWFuZDsgewotICAgIGludCBvdXQ7Ci0g ICAgaW50IHBpcGVzWzJdOwotICAgIGV4dGVybiBpbnQga2FjdGl2ZTsgICAgICAgICAgICAgICAg IC8qIEZyb20gY2tjcHJvLncgYW5kIGNrY21haS5jICovCi0KLSAgICBpZiAobm9wdXNoKSB7Ci0g ICAgICAgIGRlYnVnKEYxMDAsInp4Y21kIGZhaWxzOiBub3B1c2giLCIiLDApOwotICAgICAgICBy ZXR1cm4oLTEpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJ6eGNtZCIsY29tYW5kLGZpbG51bSk7 Ci0gICAgaWYgKGNoa2ZuKGZpbG51bSkgPCAwKSByZXR1cm4oLTEpOyAgLyogTmVlZCBhIHZhbGlk IEtlcm1pdCBmaWxlIG51bWJlci4gKi8KLSAgICBpZiAoZmlsbnVtID09IFpTVERJTyB8fCBmaWxu dW0gPT0gWkNURVJNKSAvKiBCdXQgbm90IG9uZSBvZiB0aGVzZS4gKi8KLSAgICAgIHJldHVybigw KTsKLQotICAgIG91dCA9IChmaWxudW0gPT0gWklGSUxFIHx8IGZpbG51bSA9PSBaUkZJTEUpID8g MCA6IDEgOwotICAgIGRlYnVnKEYxMDEsInp4Y21kIG91dCIsY29tYW5kLG91dCk7Ci0KLS8qIE91 dHB1dCB0byBhIGNvbW1hbmQgKi8KLQotICAgIGlmIChvdXQpIHsgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIE5lZWQgcG9wZW4oKSB0byBkbyB0aGlzLiAqLwotCWNrc3RybmNweShmdWxsbmFt ZSwiKHBpcGUpIixDS01BWFBBVEgpOwotI2lmZGVmIE5PUE9QRU4KLSAgICAgICAgcmV0dXJuKDAp OyAgICAgICAgICAgICAgICAgICAgICAvKiBubyBwb3BlbigpLCBmYWlsLiAqLwotI2Vsc2UKLS8q IFVzZSBwb3BlbigpIHRvIHJ1biB0aGUgY29tbWFuZC4gKi8KLQotI2lmZGVmIF9QT1NJWF9TT1VS Q0UKLS8qIFN0cmljdGx5IHNwZWFraW5nLCBwb3BlbigpIGlzIG5vdCBhdmFpbGFibGUgaW4gUE9T SVguMSAqLwotI2RlZmluZSBEQ0xQT1BFTgotI2VuZGlmIC8qIF9QT1NJWF9TT1VSQ0UgKi8KLQot CWRlYnVnKEYxMTAsInp4Y21kIG91dCIsY29tYW5kLDApOwotCi0gICAgICAgIGlmIChwcml2X2No aygpKSB7Ci0JICAgIGRlYnVnKEYxMDAsInp4Y21kIHByaXZfY2hrIGZhaWxlZCIsIiIsMCk7Ci0g ICAgICAgICAgICByZXR1cm4oMCk7Ci0JfQkKLQllcnJubyA9IDA7Ci0gICAgICAgIGZwW2ZpbG51 bV0gPSBwb3Blbihjb21hbmQsInciKTsKLQlkZWJ1ZyhGMTExLCJ6eGNtZCBwb3BlbiIsZnBbZmls bnVtXSA/ICJPSyIgOiAiRmFpbGVkIiwgZXJybm8pOwotCWlmIChmcFtmaWxudW1dID09IE5VTEwp Ci0JICByZXR1cm4oMCk7Ci0jaWZkZWYgQ09NTUVOVAotLyogSSB3b25kZXIgd2hhdCB0aGlzIGlz IGFsbCBhYm91dC4uLiAqLwotCWNsb3NlKHBpcGVzWzBdKTsJCS8qIERvbid0IG5lZWQgdGhlIGlu cHV0IHNpZGUgKi8KLQlmcFtmaWxudW1dID0gZmRvcGVuKHBpcGVzWzFdLCJ3Iik7IC8qIE9wZW4g b3V0cHV0IHN0cmVhbS4gKi8KLQlmcFtaU1lTRk5dID0gZnBbZmlsbnVtXTsgICAgICAgICAgIC8q IFJlbWVtYmVyLiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQlpc3BpcGVbZmlsbnVtXSA9IDE7 Ci0Jem91dGNudCA9IDA7CQkJLyogKFBXUCkgcmVzZXQgaW5wdXQgYnVmZmVyICovCi0Jem91dHB0 ciA9IHpvdXRidWZmZXI7Ci0JcmV0dXJuKDEpOwotI2VuZGlmIC8qIE5PUE9QRU4gKi8KLSAgICB9 Ci0KLS8qIElucHV0IGZyb20gYSBjb21tYW5kICovCi0KLSNpZmRlZiBTTkk1NDEKLSAgICAvKiBT SU5JWC1MIDUuNDEgZG9lcyBub3QgbGlrZSBmZG9wZW4oKSAqLwotICAgIHJldHVybigwKTsKLSNl bHNlCi0gICAgaWYgKHBpcGUocGlwZXMpICE9IDApIHsKLSAgICAgICAgZGVidWcoRjEwMCwienhj bWQgcGlwZSBmYWlsdXJlIiwiIiwwKTsKLSAgICAgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAg ICAgICAgICAvKiBjYW4ndCBtYWtlIHBpcGUsIGZhaWwgKi8KLSAgICB9Ci0KLS8qIENyZWF0ZSBh IGZvcmsgaW4gd2hpY2ggdG8gcnVuIHRoZSBuYW1lZCBwcm9jZXNzICovCi0KLSAgICBpZiAoKAot I2lmZGVmIGFlZ2lzCi0gICAgICAgICBwaWQgPSB2Zm9yaygpICAgICAgICAgICAgICAgICAgLyog Y2hpbGQgKi8KLSNlbHNlCi0gICAgICAgICBwaWQgPSBmb3JrKCkgICAgICAgICAgICAgICAgICAg LyogY2hpbGQgKi8KLSNlbmRpZiAvKiBhZWdpcyAqLwotICAgICAgICAgKSA9PSAwKSB7Ci0KLS8q IFdlJ3JlIGluIHRoZSBmb3JrLiAqLwotCi0gICAgICAgIGNoYXIgKnNocGF0aCwgKnNobmFtZSwg KnNocHRyOyAgLyogRmluZCB1c2VyJ3MgcHJlZmVycmVkIHNoZWxsICovCi0jaWZuZGVmIGFlZ2lz Ci0gICAgICAgIHN0cnVjdCBwYXNzd2QgKnA7Ci0gICAgICAgIGNoYXIgKmRlZnNoZWxsOwotI2lm ZGVmIEhQVVgxMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgc2hlbGwgKi8K LSAgICAgICAgZGVmc2hlbGwgPSAiL3Vzci9iaW4vc2giOwotI2Vsc2UKLSNpZmRlZiBQbGFuOQot ICAgICAgICBkZWZzaGVsbCA9ICIvYmluL3JjIjsKLSNlbHNlCi0gICAgICAgIGRlZnNoZWxsID0g Ii9iaW4vc2giOwotI2VuZGlmIC8qIFBsYW45ICovCi0jZW5kaWYgLyogSFBVWDEwICovCi0jZW5k aWYgLyogYWVnaXMgKi8KLSAgICAgICAgaWYgKHByaXZfY2FuKCkpIGV4aXQoMSk7ICAgICAgICAv KiBUdXJuIG9mZiBhbnkgcHJpdmlsZWdlcyEgKi8KLSAgICAgICAgZGVidWcoRjEwMSwienhjbWQg cGlkIiwiIixwaWQpOwotICAgICAgICBjbG9zZShwaXBlc1swXSk7ICAgICAgICAgICAgICAgIC8q IGNsb3NlIGlucHV0IHNpZGUgb2YgcGlwZSAqLwotICAgICAgICBjbG9zZSgwKTsgICAgICAgICAg ICAgICAgICAgICAgIC8qIGNsb3NlIHN0ZGluICovCi0gICAgICAgIGlmIChvcGVuKCIvZGV2L251 bGwiLDApIDwgMCkgcmV0dXJuKDApOyAvKiByZXBsYWNlIGlucHV0IGJ5IG51bGwgKi8KLSNpZm5k ZWYgT1hPUwotI2lmbmRlZiBTVk9SUE9TSVgKLSAgICAgICAgZHVwMihwaXBlc1sxXSwxKTsgICAg ICAgICAgICAgICAvKiBCU0Q6IHJlcGxhY2Ugc3Rkb3V0ICYgc3RkZXJyICovCi0gICAgICAgIGR1 cDIocGlwZXNbMV0sMik7ICAgICAgICAgICAgICAgLyogYnkgdGhlIHBpcGUgKi8KLSNlbHNlCi0g ICAgICAgIGNsb3NlKDEpOyAgICAgICAgICAgICAgICAgICAgICAgLyogQVQmVDogY2xvc2Ugc3Rk b3V0ICovCi0gICAgICAgIGlmIChkdXAocGlwZXNbMV0pICE9IDEpICAgICAgICAgLyogU2VuZCBz dGRvdXQgdG8gdGhlIHBpcGUgKi8KLSAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIGNsb3Nl KDIpOyAgICAgICAgICAgICAgICAgICAgICAgLyogU2VuZCBzdGRlcnIgdG8gdGhlIHBpcGUgKi8K LSAgICAgICAgaWYgKGR1cChwaXBlc1sxXSkgIT0gMikKLSAgICAgICAgICByZXR1cm4oMCk7Ci0j ZW5kaWYgLyogU1ZPUlBPU0lYICovCi0jZWxzZSAvKiBPWE9TICovCi0gICAgICAgIGR1cDIocGlw ZXNbMV0sMSk7Ci0gICAgICAgIGR1cDIocGlwZXNbMV0sMik7Ci0jZW5kaWYgLyogT1hPUyAqLwot ICAgICAgICBjbG9zZShwaXBlc1sxXSk7ICAgICAgICAgICAgICAgIC8qIERvbid0IG5lZWQgdGhp cyBhbnkgbW9yZS4gKi8KLQotI2lmZGVmIGFlZ2lzCi0gICAgICAgIGlmICgoc2hwYXRoID0gZ2V0 ZW52KCJTRVJWRVJTSEVMTCIpKSA9PSBOVUxMKQotICAgICAgICAgIHNocGF0aCA9ICIvYmluL3No IjsKLSNlbHNlCi0gICAgICAgIHNocGF0aCA9IGdldGVudigiU0hFTEwiKTsgICAgICAgLyogV2hh dCBzaGVsbD8gKi8KLSAgICAgICAgaWYgKHNocGF0aCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBw ID0gZ2V0cHd1aWQoIHJlYWxfdWlkKCkgKTsgLyogR2V0IGxvZ2luIGRhdGEgKi8KLSAgICAgICAg ICAgIC8qIGRlYnVnKEYxMTEsInp4Y21kIHNocGF0aCIsImdldHB3dWlkKCkiLHApOyAqLwotICAg ICAgICAgICAgaWYgKHAgPT0gKHN0cnVjdCBwYXNzd2QgKilOVUxMIHx8ICEqKHAtPnB3X3NoZWxs KSkKLSAgICAgICAgICAgICAgc2hwYXRoID0gZGVmc2hlbGw7Ci0gICAgICAgICAgICBlbHNlIHNo cGF0aCA9IHAtPnB3X3NoZWxsOwotICAgICAgICB9Ci0jZW5kaWYgLyogYWVnaXMgKi8KLSAgICAg ICAgc2hwdHIgPSBzaG5hbWUgPSBzaHBhdGg7Ci0gICAgICAgIHdoaWxlICgqc2hwdHIgIT0gJ1ww JykKLSAgICAgICAgICBpZiAoKnNocHRyKysgPT0gJy8nKQotICAgICAgICAgICAgc2huYW1lID0g c2hwdHI7Ci0gICAgICAgIGRlYnVnKEYxMTAsc2hwYXRoLHNobmFtZSwwKTsKLQlyZXN0b3JzaWdz KCk7CQkJLyogUmVzdG9yZSBpZ25vcmVkIHNpZ25hbHMgKi8KLSAgICAgICAgZXhlY2woc2hwYXRo LHNobmFtZSwiLWMiLGNvbWFuZCwoY2hhciAqKU5VTEwpOyAvKiBFeGVjdXRlIHRoZSBjbWQgKi8K LSAgICAgICAgZXhpdCgwKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBqdXN0IHB1bnQgaWYg aXQgZmFpbGVkLiAqLwotICAgIH0gZWxzZSBpZiAocGlkID09IChQSURfVCkgLTEpIHsKLSAgICAg ICAgZGVidWcoRjEwMCwienhjbWQgZm9yayBmYWlsdXJlIiwiIiwwKTsKLSAgICAgICAgcmV0dXJu KDApOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJ6eGNtZCBwaWQiLCIiLHBpZCk7Ci0gICAgY2xv c2UocGlwZXNbMV0pOyAgICAgICAgICAgICAgICAgICAgLyogRG9uJ3QgbmVlZCB0aGUgb3V0cHV0 IHNpZGUgKi8KLSAgICBpc3BpcGVbZmlsbnVtXSA9IDE7ICAgICAgICAgICAgICAgICAvKiBSZW1l bWJlciBpdCdzIGEgcGlwZSAqLwotICAgIGZwW2ZpbG51bV0gPSBmZG9wZW4ocGlwZXNbMF0sInIi KTsJLyogT3BlbiBhIHN0cmVhbSBmb3IgaW5wdXQuICovCi0KLSNpZmRlZiBET05ERUxBWQotI2lm ZGVmIFNFTEVDVAotICAgIGlmIChmaWxudW0gPT0gWklGSUxFICYmIGthY3RpdmUpIHsgIC8qIE1h a2UgcGlwZSByZWFkcyBub25ibG9ja2luZyAqLwotICAgICAgICBpbnQgZmxhZ3MsIHg7Ci0gICAg ICAgIGlmICgoZmxhZ3MgPSBmY250bChmaWxlbm8oZnBbZmlsbnVtXSksRl9HRVRGTCwwKSkgPiAt MSkgewotICAgICAgICAgICAgZGVidWcoRjEwMSwienhjbWQgZmNudGwgMSBwaXBlIGZsYWdzIiwi IixmbGFncyk7Ci0gICAgICAgICAgICB4ID0gZmNudGwoZmlsZW5vKGZwW2ZpbG51bV0pLEZfU0VU RkwsIGZsYWdzIHwKLSNpZmRlZiBRTlgKLSAgICAgICAgICAgICAgICAgIE9fTk9OQkxPQ0sKLSNl bHNlCi0gICAgICAgICAgICAgICAgICBPX05ERUxBWQotI2VuZGlmIC8qIFFOWCAqLwotICAgICAg ICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsInp4Y21kIGZjbnRsIDIgcmVz dWx0IiwiIix4KTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBTRUxFQ1QgKi8KLSNlbmRp ZiAvKiBET05ERUxBWSAqLwotI2VuZGlmIC8qIFNOSTU0MSAqLwotICAgIGZwW1pTWVNGTl0gPSBm cFtmaWxudW1dOyAgICAgICAgICAgIC8qIFJlbWVtYmVyLiAqLwotICAgIHppbmNudCA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIChQV1ApIHJlc2V0IGlucHV0IGJ1ZmZlciAqLwotICAg IHppbnB0ciA9IHppbmJ1ZmZlcjsKLSAgICBmdWxsbmFtZVswXSA9ICdcMCc7Ci0gICAgcmV0dXJu KDEpOwotfSAvKiB6eGNtZCAqLwotCi0vKiAgWiBDIEwgTyBTIEYgIC0gd2FpdCBmb3IgdGhlIGNo aWxkIGZvcmsgdG8gdGVybWluYXRlIGFuZCBjbG9zZSB0aGUgcGlwZS4gKi8KLQotLyogIFVzZWQg aW50ZXJuYWxseSBieSB6Y2xvc2UgLSByZXR1cm5zIC0xIG9uIGZhaWx1cmUsIDEgb24gc3VjY2Vz cy4gKi8KLQotaW50Ci16Y2xvc2YoZmlsbnVtKSBpbnQgZmlsbnVtOyB7Ci0gICAgaW50IHdzdGF0 LCBvdXQ7Ci0gICAgaW50IHN0YXR1c3A7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJ6Y2xvc2YgZmlsbnVt IiwiIixmaWxudW0pOwotICAgIG91dCA9IChmaWxudW0gPT0gWklGSUxFIHx8IGZpbG51bSA9PSBa UkZJTEUpID8gMCA6IDEgOwotICAgIGRlYnVnKEYxMDEsInpjbG9zZiBvdXQiLCIiLG91dCk7Ci0K LSNpZm5kZWYgTk9QT1BFTgotICAgIGlmIChpc3BpcGVbZmlsbnVtXQotICAgICAgICAvKiBJbiBV TklYIHdlIHVzZSBwb3BlbigpIG9ubHkgZm9yIG91dHB1dCBmaWxlcyAqLwotICAgICAgICAmJiBv dXQKLSAgICAgICAgKSB7Ci0gICAgICAgIGludCB4OwotICAgICAgICB4ID0gcGNsb3NlKGZwW2Zp bG51bV0pOwotICAgICAgICBwZXhpdHN0YXQgPSB4ID4+IDg7Ci0gICAgICAgIGRlYnVnKEYxMDEs InpjbG9zZiBwY2xvc2UiLCIiLHgpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJ6Y2xvc2YgcGV4aXRz dGF0IiwiIixwZXhpdHN0YXQpOwotICAgICAgICBmcFtmaWxudW1dID0gZnBbWlNZU0ZOXSA9IE5V TEw7Ci0gICAgICAgIGlzcGlwZVtmaWxudW1dID0gMDsKLSAgICAgICAgcmV0dXJuKCh4ICE9IDAp ID8gLTEgOiAxKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9QT1BFTiAqLwotICAgIC8qIGRlYnVnKEYx MDEsInpjbG9zZiBmcFtmaWxudW1dIiwiIiwgZnBbZmlsbnVtXSk7ICovCi0gICAgLyogZGVidWco RjEwMSwiemNsb3NmIGZwW1pTWVNGTl0iLCIiLCBmcFtaU1lTRk5dKTsgKi8KLQotICAgIGlmIChw aWQgIT0gKFBJRF9UKSAwKSB7Ci0gICAgICAgIGRlYnVnKEYxMDEsInpjbG9zZiBraWxsaW5nIHBp ZCIsIiIscGlkKTsKLSNpZmRlZiBQbGFuOQotICAgICAgICBraWxsKHBpZCwgU0lHS0lMTCk7Ci0j ZWxzZQotICAgICAgICBraWxsKHBpZCw5KTsKLSNlbmRpZiAvKiBQbGFuOSAqLwotCi0jaWZuZGVm IENLX0NISUxECi0vKgotICBUaGlzIGlzIHRoZSBvcmlnaW5hbCBjb2RlIChiZWZvcmUgMjAgQXBy aWwgMTk5NykgYW5kIGhhcyBwcm92ZW4gdG90YWxseQotICBwb3J0YWJsZS4gIEJ1dCBpdCBkb2Vz IG5vdCBnaXZlIHVzIHRoZSBwcm9jZXNzJ3MgcmV0dXJuIGNvZGUuCi0qLwotICAgICAgICB3aGls ZSAoKHdzdGF0ID0gd2FpdCgoV0FJVF9UICopMCkpICE9IHBpZCAmJiB3c3RhdCAhPSAtMSkgOwot I2Vsc2UKLS8qIEhlcmUgd2UgdHJ5IHRvIGdldCB0aGUgcmV0dXJuIGNvZGUuICBMZXQncyBob3Bl IHRoaXMgaXMgcG9ydGFibGUgdG9vLiAqLwotICAgICAgICB3aGlsZSAoKHdzdGF0ID0gd2FpdCgm c3RhdHVzcCkpICE9IHBpZCAmJiB3c3RhdCAhPSAtMSkgOwotICAgICAgICBwZXhpdHN0YXQgPSAo c3RhdHVzcCAmIDB4ZmYpID8gc3RhdHVzcCA6IHN0YXR1c3AgPj4gODsKLSAgICAgICAgZGVidWco RjEwMSwiemNsb3NmIHdhaXQgc3RhdHVzcCIsIiIsc3RhdHVzcCk7Ci0gICAgICAgIGRlYnVnKEYx MDEsInpjbG9zZiB3YWl0IHBleGl0c3RhdCIsIiIscGV4aXRzdGF0KTsKLSNlbmRpZiAvKiBDS19D SElMRCAqLwotICAgICAgICBwaWQgPSAwOwotICAgIH0KLSAgICBmY2xvc2UoZnBbZmlsbnVtXSk7 Ci0gICAgZnBbZmlsbnVtXSA9IGZwW1pTWVNGTl0gPSBOVUxMOwotCi0gICAgaXNwaXBlW2ZpbG51 bV0gPSAwOwotICAgIC8qIGRlYnVnKEYxMDEsInpjbG9zZiBmcFtmaWxudW1dIiwiIixmcFtmaWxu dW1dKTsgKi8KLSNpZmRlZiBDS19DSElMRAotICAgIHJldHVybihwZXhpdHN0YXQgPT0gMCA/IDEg OiAtMSk7Ci0jZWxzZQotICAgIHJldHVybigxKTsKLSNlbmRpZiAvKiBDS19DSElMRCAqLwotfQot Ci0jZWxzZSAgLyogTk9QVVNIICovCi0KLWludAotenhjbWQoZmlsbnVtLGNvbWFuZCkgaW50IGZp bG51bTsgY2hhciAqY29tYW5kOyB7Ci0gICAgcmV0dXJuKDApOwotfQotaW50Ci16Y2xvc2YoZmls bnVtKSBpbnQgZmlsbnVtOyB7Ci0gICAgcmV0dXJuKEVPRik7Ci19Ci0jZW5kaWYgLyogTk9QVVNI ICovCi0KLQotLyogIFogWCBQIEEgTiBEICAtLSAgRXhwYW5kIGEgd2lsZGNhcmQgc3RyaW5nIGlu dG8gYW4gYXJyYXkgb2Ygc3RyaW5ncyAgKi8KLS8qCi0gIEFzIG9mIEMtS2VybWl0IDcuMCwgdGhp cyBBUEkgaXMgb2Jzb2xldGUsIHJlcGxhY2VkIGJ5IG56eHBhbmQoKSwgYW5kIHRoaXMKLSAgZnVu Y3Rpb24gaXMgb25seSB1c2VkIGludGVybmFsbHkuICBTZWUgbnp4cGFuZCgpIGJlbG93LgotCi0g IFJldHVybnMgdGhlIG51bWJlciBvZiBmaWxlcyB0aGF0IG1hdGNoIGZuYXJnLCB3aXRoIGRhdGEg c3RydWN0dXJlcyBzZXQgdXAKLSAgc28gdGhhdCBmaXJzdCBmaWxlIChpZiBhbnkpIHdpbGwgYmUg cmV0dXJuZWQgYnkgdGhlIG5leHQgem5leHQoKSBjYWxsLgotCi0gIERlcGVuZHMgb24gZXh0ZXJu YWwgdmFyaWFibGUgd2lsZHhwYW5kOiAwIG1lYW5zIHdlIGV4cGFuZCB3aWxkY2FyZHMKLSAgaW50 ZXJuYWxseSwgbm9uemVybyBtZWFucyB3ZSBjYWxsIHRoZSBzaGVsbCB0byBkbyBpdC4KLSAgCi0g IEFORCBpbiBDLUtlcm1pdCA4LjAuMjEyIGFuZCBsYXRlciwgb24gZXh0ZXJuIHdpbGRlbmE6IDEg bWVhbnMgd2lsZGNhcmRzCi0gIGFyZSBlbmFibGVkLCAwIG1lYW5zIGRpc2FibGVkLCB0aGUgY2hh cmFjdGVycyBhcmUgdGFrZW4gbGl0ZXJhbGx5LgotKi8KLXN0YXRpYyBpbnQgeGRpcm9ubHkgPSAw Owotc3RhdGljIGludCB4Zmlsb25seSA9IDA7Ci1zdGF0aWMgaW50IHhtYXRjaGRvdCA9IDA7Ci1z dGF0aWMgaW50IHhyZWN1cnNpdmUgPSAwOwotc3RhdGljIGludCB4bm9iYWNrdXAgPSAwOwotc3Rh dGljIGludCB4bm9saW5rcyA9IDA7Ci0KLXN0YXRpYyBjaGFyICpmcmVlcHRyID0gTlVMTCwgKipy ZXNwdHIgPSBOVUxMOyAvKiBDb3BpZXMgb2YgY2FsbGVyJ3MgYXJncyAqLwotc3RhdGljIGludCBy ZW1sZW47ICAgICAgICAgICAgICAgICAgICAgIC8qIFJlbWFpbmluZyBzcGFjZSBpbiBjYWxsZXIn cyBhcnJheSAqLwotc3RhdGljIGludCBudW1mbmQgPSAwOwkJCS8qIE51bWJlciBvZiBtYXRjaGVz IGZvdW5kICovCi0KLSNkZWZpbmUgTUlOU1BBQ0UgMTAyNAotCi1zdGF0aWMgaW50Ci1pbml0c3Bh Y2UocmVzYXJyeSxsZW4pIGNoYXIgKiByZXNhcnJ5W107IGludCBsZW47IHsKLSNpZmRlZiBEWU5B TUlDCi0gICAgaWYgKGxlbiA8IE1JTlNQQUNFKSBsZW4gPSBNSU5TUEFDRTsKLSAgICBpZiAoIXNz cGFjZSkgeyAgICAgICAgICAgICAgICAgICAgICAvKiBOZWVkIHRvIGFsbG9jYXRlIHN0cmluZyBz cGFjZT8gKi8KLSAgICAgICAgd2hpbGUgKGxlbiA+PSBNSU5TUEFDRSkgewotICAgICAgICAgICAg aWYgKChzc3BhY2UgPSBtYWxsb2MobGVuKzIpKSkgeyAvKiBHb3QgaXQuICovCi0gICAgICAgICAg ICAgICAgZGVidWcoRjEwMSwiZmdlbiBzdHJpbmcgc3BhY2UiLCIiLGxlbik7Ci0gICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZW4gPSAobGVuIC8gMikg KyAobGVuIC8gNCk7IC8qIERpZG4ndCwgcmVkdWNlIGJ5IDMvNCAqLwotICAgICAgICB9Ci0gICAg ICAgIGlmIChsZW4gPD0gTUlOU1BBQ0UpIHsJCS8qIERpZCB3ZSBnZXQgaXQ/ICovCi0gICAgICAg ICAgICBmcHJpbnRmKHN0ZGVyciwiZmdlbiBjYW4ndCBtYWxsb2Mgc3RyaW5nIHNwYWNlXG4iKTsK LSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLQlzc3BsZW4gPSBsZW47Ci0gICAg fQotI2VuZGlmIC8qIERZTkFNSUMgKi8KLQotICAgIGZyZWVwdHIgPSBzc3BhY2U7ICAgICAgICAg ICAgICAgICAgIC8qIFRoaXMgaXMgd2hlcmUgbWF0Y2hlcyBhcmUgY29waWVkLiAqLwotICAgIHJl c3B0ciA9IHJlc2Fycnk7CQkJLyogU3RhdGljIGNvcGllcyBvZiB0aGVzZSBzbyAqLwotICAgIHJl bWxlbiA9IGxlbjsgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlY3Vyc2l2ZSBjYWxscyBjYW4g YWx0ZXIgdGhlbS4gKi8KLSAgICBkZWJ1ZyhGMTAxLCJpbml0c3BhY2Ugc3NwbGVuIiwiIixzc3Bs ZW4pOwotICAgIHJldHVybigwKTsKLX0KLQotLyoKLSAgWiBTIEUgVCBGIEkgTCAgLS0gIFF1ZXJ5 IG9yIGNoYW5nZSB0aGUgc2l6ZSBvZiBmaWxlIGxpc3QgYnVmZmVycy4KLQotICBmYyA9IDE6IENo YW5nZSBjdXJyZW50IHN0cmluZyBzcGFjZSB0byBuLCByZXR1cm4gbmV3IHNpemUuCi0gIGZjID0g MjogUmV0dXJuIGN1cnJlbnQgc3RyaW5nIHNwYWNlIHNpemUuCi0gIGZjID0gMzogQ2hhbmdlIGN1 cnJlbnQgbWF4bmFtZXMgdG8gbiwgcmV0dXJuIG5ldyBtYXhuYW1lcy4KLSAgZmMgPSA0OiBSZXR1 cm4gY3VycmVudCBtYXhuYW1lcy4KLSAgUmV0dXJucyA8IDAgb24gZXJyb3IuCi0qLwotaW50Ci16 c2V0ZmlsKG4sIGZjKSBpbnQgbiwgZmM7IHsKLSNpZmRlZiBEWU5BTUlDCi0gICAgc3dpdGNoIChm YykgewotICAgICAgY2FzZSAxOgkJCQkvKiBTdHJpbmdzcGFjZSAqLwotCWlmIChzc3BhY2UpIHsK LQkgICAgZnJlZShzc3BhY2UpOwotCSAgICBzc3BhY2UgPSBOVUxMOwotCX0KLQlpZiAoaW5pdHNw YWNlKG10Y2hzLG4pIDwgMCkKLQkgIHJldHVybigtMSk7Ci0gICAgICBjYXNlIDI6CQkJCS8qIEZh bGwgdGhydSBkZWxpYmVyYXRlbHkgKi8KLQlyZXR1cm4oc3NwbGVuKTsKLSAgICAgIGNhc2UgMzoJ CQkJLyogTGlzdHNpemUgKi8KLQlpZiAobXRjaHMpIHsKLQkgICAgZnJlZSgoY2hhciAqKW10Y2hz KTsKLQkgICAgbXRjaHMgPSBOVUxMOwotCX0KLQltdGNocyA9IChjaGFyICoqKW1hbGxvYyhuICog c2l6ZW9mKGNoYXIgKikpOwotCWlmICghbXRjaHMpCi0JICByZXR1cm4oLTEpOwotCW1heG5hbWVz ID0gbjsKLSAgICAgIGNhc2UgNDoJCQkJLyogRmFsbCB0aHJ1IGRlbGliZXJhdGVseSAqLwotCXJl dHVybihtYXhuYW1lcyk7Ci0gICAgfQotI2VuZGlmIC8qIERZTkFNSUMgKi8KLSAgICByZXR1cm4o LTEpOwotfQotCi0KLQotI2lmbmRlZiBOT05aWFBBTkQKLSNpZm5kZWYgcGRwMTEKLXN0YXRpYwot I2VuZGlmIC8qIHBkcDExICovCi0jZW5kaWYgLyogTk9OWlhQQU5EICovCi1pbnQKLXp4cGFuZChm bmFyZykgY2hhciAqZm5hcmc7IHsKLSAgICBleHRlcm4gaW50IGRpcmFjdGl2ZTsKLSAgICBjaGFy IGZuYnVmW0NLTUFYUEFUSCs4XSwgKiBmbiwgKiBwOwotCi0jaWZkZWYgRFRJTERFICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogQnVpbHQgd2l0aCB0aWxkZS1leHBhbnNpb24/ICovCi0gICAg Y2hhciAqdG5hbTsKLSNlbmRpZiAvKiBEVElMREUgKi8KLSAgICBpbnQgeDsKLSAgICBpbnQgaGF2 ZW9uZWRpciA9IDA7Ci0KLSAgICBpZiAoIWZuYXJnKSB7ICAgICAgICAgICAgICAgICAgICAgICAv KiBJZiBubyBhcmd1bWVudCBwcm92aWRlZCAqLwotCW54cGFuZCA9IGZjb3VudCA9IDA7Ci0JcmV0 dXJuKDApOwkJCS8qIFJldHVybiB6ZXJvIGZpbGVzIGZvdW5kICovCi0gICAgfQotICAgIGRlYnVn KEYxMTAsInp4cGFuZCBlbnRyeSIsZm5hcmcsMCk7Ci0gICAgZGVidWcoRjEwMSwienhwYW5kIHhk aXJvbmx5IiwiIix4ZGlyb25seSk7Ci0gICAgZGVidWcoRjEwMSwienhwYW5kIHhmaWxvbmx5Iiwi Iix4Zmlsb25seSk7Ci0KLSAgICBpZiAoISpmbmFyZykgewkJCS8qIElmIG5vIGFyZ3VtZW50IHBy b3ZpZGVkICovCi0JbnhwYW5kID0gZmNvdW50ID0gMDsKLQlyZXR1cm4oMCk7CQkJLyogUmV0dXJu IHplcm8gZmlsZXMgZm91bmQgKi8KLSAgICB9Ci0KLSNpZmRlZiBDS1JPT1QKLSAgICBkZWJ1ZyhG MTExLCJ6eHBhbmQgc2V0cm9vdCIsY2tyb290LGNrcm9vdHNldCk7Ci0gICAgaWYgKGNrcm9vdHNl dCkgaWYgKCF6aW5yb290KGZuYXJnKSkgewotCWRlYnVnKEYxMTAsInp4cGFuZCBzZXRyb290IHZp b2xhdGlvbiIsZm5hcmcsMCk7Ci0JbnhwYW5kID0gZmNvdW50ID0gMDsKLQlyZXR1cm4oMCk7Ci0g ICAgfQotI2VuZGlmIC8qIENLUk9PVCAqLwotCi0jaWZkZWYgQ09NTUVOVAotLyoKLSAgVGhpcyB3 b3VsZCBoYXZlIGJlZW4gcGVyZmVjdCwgZXhjZXB0IGl0IG1ha2VzIHVzIHJldHVybiBmdWxseSBx dWFsaWZpZWQKLSAgcGF0aG5hbWVzIGZvciBhbGwgZmlsZXMuCi0qLwotICAgIHpmbnFmcChmbmFy ZyxDS01BWFBBVEgsZm5idWYpOwotICAgIGRlYnVnKEYxMTAsInp4cGFuZCB6Zm5xZnAiLGZuYnVm LDApOwotICAgIHMgPSB6Z3RkaXIoKTsKLSAgICBkZWJ1ZyhGMTEwLCJ6eHBhbmQgemd0ZGlyIixz LDApOwotICAgIHAgPSBmbmJ1ZjsKLSAgICB3aGlsZSAoKnAgJiYgKnMpICAgICAgICAgICAgICAg ICAgICAvKiBNYWtlIGl0IHJlbGF0aXZlICovCi0gICAgICBpZiAoKnMrKyAhPSAqcCsrKQotICAg ICAgICBicmVhazsKLSAgICBmbiA9ICgqcykgPyBmbmJ1ZiA6IHA7Ci0gICAgZGVidWcoRjExMCwi enhwYW5kIGZuIDAiLGZuLDApOwotICAgIGlmICghKmZuKSB7Ci0gICAgICAgIGZuID0gZm5idWY7 Ci0gICAgICAgIGZuYnVmWzBdID0gJyonOwotICAgICAgICBmbmJ1ZlsxXSA9ICdcMCc7Ci0gICAg fQotICAgIGRlYnVnKEYxMTAsInp4cGFuZCBmbiAwLjUiLGZuLDApOwotI2Vsc2UKLSNpZmRlZiBE VElMREUgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCdWlsdCB3aXRoIHRpbGRlLWV4cGFu c2lvbj8gKi8KLSAgICBpZiAoKmZuYXJnID09ICd+JykgeyAgICAgICAgICAgICAgICAvKiBTdGFy dHMgd2l0aCB0aWxkZT8gKi8KLSAgICAgICAgdG5hbSA9IHRpbGRlX2V4cGFuZChmbmFyZyk7ICAg ICAvKiBUcnkgdG8gZXhwYW5kIGl0LiAqLwotICAgICAgICBja3N0cm5jcHkoZm5idWYsdG5hbSxD S01BWFBBVEgpOwotICAgIH0gZWxzZQotI2VuZGlmIC8qIERUSUxERSAqLwotICAgICAgY2tzdHJu Y3B5KGZuYnVmLGZuYXJnLENLTUFYUEFUSCk7Ci0gICAgZm4gPSBmbmJ1ZjsgICAgICAgICAgICAg ICAgICAgICAgICAgLyogUG9pbnQgdG8gd2hhdCB3ZSdsbCB3b3JrIHdpdGggKi8KLSNlbmRpZiAv KiBDT01NRU5UICovCi0gICAgZGVidWcoRjExMCwienhwYW5kIGZuIDEiLGZuLDApOwotCi0gICAg aWYgKCEqZm4pICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQnV0IG1ha2Ugc3VyZSBzb21l dGhpbmcgaXMgdGhlcmUgKi8KLSAgICAgIHJldHVybigwKTsKLQotICAgIHAgPSBmbiArIChpbnQp c3RybGVuKGZuKSAtIDE7Ci0gICAgaWYgKCpwID09ICcvJykgeyAgICAgICAgICAgICAgICAgICAg LyogSWYgbGFzdCBjaGFyID0gLyBpdCBtdXN0IGJlIGEgZGlyICovCi0JaWYgKCF4Zmlsb25seSAm JiAhaXN3aWxkKHApKSBoYXZlb25lZGlyKys7Ci0gICAgICAgIGNrc3RybmNhdChmbiwgIioiLCBD S01BWFBBVEgrOCk7IC8qIHNvIGFwcGVuZCAnKicgKi8KLSAgICB9IGVsc2UgaWYgKHAgPiBmbikg eyAgICAgICAgICAgICAgICAvKiBJZiBlbmRzIGluICIvLiIgKi8KLSAgICAgICAgaWYgKCoocC0x KSA9PSAnLycgJiYgKnAgPT0gJy4nKSAvKiBjaGFuZ2UgJy4nIHRvICcqJyAqLwotICAgICAgICAg ICpwID0gJyonOwotICAgIH0gZWxzZSBpZiAocCA9PSBmbikgeyAgICAgICAgICAgICAgIC8qIElm IGl0J3MgJy4nIGFsb25lICovCi0gICAgICAgIGlmICgqcCA9PSAnLicpICAgICAgICAgICAgICAg ICAgLyogY2hhbmdlICcuJyB0byAnKicgKi8KLSAgICAgICAgICAqcCA9ICcqJzsKLSAgICB9Ci0g ICAgZGVidWcoRjExMCwienhwYW5kIGZuIDIiLGZuLDApOwotICAgIHggPSBpc2Rpcihmbik7ICAg ICAgICAgICAgICAgICAgICAgIC8qIElzIGl0IGEgZGlyZWN0b3J5PyAqLwotICAgIGRlYnVnKEYx MTEsInp4cGFuZCBpc2RpciAxIixmbix4KTsKLSAgICBpZiAoeCkgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBJZiBzbywgbWFrZSBpdCBpbnRvIGEgd2lsZGNhcmQgKi8KLQlpZiAoIXhm aWxvbmx5ICYmICFpc3dpbGQocCkpCi0JICBoYXZlb25lZGlyKys7Ci0gICAgICAgIGlmICgoeCA9 IHN0cmxlbihmbikpID4gMCkgewotICAgICAgICAgICAgaWYgKCFJU0RJUlNFUChmblt4LTFdKSkK LSAgICAgICAgICAgICAgZm5beCsrXSA9IERJUlNFUDsKLSAgICAgICAgICAgIGZuW3grK10gPSAn Kic7Ci0gICAgICAgICAgICBmblt4XSA9ICdcMCc7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZGVi dWcoRjExMSwienhwYW5kIGZuIDMgaGF2ZW9uZWRpciIsZm4saGF2ZW9uZWRpcik7Ci0vKgotICBU aGUgZm9sbG93aW5nIGFsbG93cyB1cyB0byBwYXJzZSBhIHNpbmdsZSBkaXJlY3RvcnkgbmFtZSB3 aXRob3V0IG9wZW5pbmcKLSAgdGhlIGRpcmVjdG9yeSBhbmQgbG9va2luZyBhdCBpdHMgY29udGVu dHMuICBUaGUgZGlyYWN0aXZlIGZsYWcgaXMgYSBob3JyaWJsZQotICBoYWNrIChlc3BlY2lhbGx5 IHNpbmNlIERJUiAvTk9SRUNVUlNJVkUgdHVybnMgaXQgb2ZmKSwgYnV0IG90aGVyd2lzZSB3ZSdk Ci0gIGhhdmUgdG8gY2hhbmdlIHRoZSBBUEkuCi0qLwotICAgIGRlYnVnKEYxMTEsInp4cGFuZCBm biAzIGRpcmFjdGl2ZSIsZm4sZGlyYWN0aXZlKTsKLSAgICBpZiAoIWRpcmFjdGl2ZSAmJiBoYXZl b25lZGlyKSB7Ci0JZmNvdW50ID0gMDsKLQlpZiAoIW10Y2hzKSB7Ci0JICAgIG10Y2hzID0gKGNo YXIgKiopbWFsbG9jKG1heG5hbWVzICogc2l6ZW9mKCptdGNocykpOwotCSAgICBpZiAoIW10Y2hz KQotCSAgICAgIHJldHVybihueHBhbmQgPSBmY291bnQpOwotCX0KLQlmY291bnQgPSAxOwotCWRl YnVnKEYxMTAsInp4cGFuZCBoYXZlb25lZGlyIEExIixmbmFyZywwKTsKLQlpbml0c3BhY2UobXRj aHMsc3NwbGVuKTsKLQlhZGRyZXN1bHQoZm5hcmcsMSk7Ci0JaWYgKG51bWZuZCA8IDApIHJldHVy bigtMSk7Ci0JbXRjaHB0ciA9IG10Y2hzOwkJLyogU2F2ZSBwb2ludGVyIGZvciBuZXh0LiAqLwot CWRlYnVnKEYxMTEsInp4cGFuZCBoYXZlb25lZGlyIEEyIiwqbXRjaHB0cixudW1mbmQpOwotCXJl dHVybihueHBhbmQgPSBmY291bnQpOwotICAgIH0KLQotI2lmbmRlZiBOT1BVU0gKLSAgICBpZiAo IW5vcHVzaCAmJiB3aWxkeHBhbmQpICAgICAgICAgICAvKiBXaG8gaXMgZXhwYW5kaW5nIHdpbGRj YXJkcz8gKi8KLSAgICAgIGZjb3VudCA9IChtdGNocyA9PSBOVUxMICYmICAgICAgICAvKiBTaGVs bCAqLwotICAgICAgICAgICAgICAgIChtdGNocyA9IChjaGFyICoqKW1hbGxvYyhtYXhuYW1lcyAq IHNpemVvZigqbXRjaHMpKSkgPT0gTlVMTCkKLSAgICAgICAgPyAwCi0gICAgICAgICAgOiAgc2h4 cGFuZChmbixtdGNocyxtYXhuYW1lcyk7Ci0gICAgZWxzZQotI2VuZGlmIC8qIE5PUFVTSCAqLwot ICAgICAgZmNvdW50ID0gKG10Y2hzID09IE5VTEwgJiYgICAgICAgIC8qIEtlcm1pdCAqLwotICAg ICAgICAgICAgICAgIChtdGNocyA9IChjaGFyICoqKW1hbGxvYyhtYXhuYW1lcyAqIHNpemVvZigq bXRjaHMpKSkgPT0gTlVMTCkKLSAgICAgICAgPyAwCi0gICAgICAgICAgOiBmZ2VuKGZuLG10Y2hz LG1heG5hbWVzKTsgICAgICAvKiBMb29rIHVwIHRoZSBmaWxlLiAqLwotCi0gICAgaWYgKGZjb3Vu dCA9PSAwICYmIGhhdmVvbmVkaXIpIHsKLQlmY291bnQgPSAxOwotCWRlYnVnKEYxMTAsInp4cGFu ZCBoYXZlb25lZGlyIEIiLGZuYXJnLDApOwotCWFkZHJlc3VsdChmbmFyZywxKTsKLQlpZiAobnVt Zm5kIDwgMCkgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgbXRjaHB0ciA9IG10Y2hzOyAgICAgICAg ICAgICAgICAgICAgLyogU2F2ZSBwb2ludGVyIGZvciBuZXh0LiAqLwotICAgIG54cGFuZCA9IGZj b3VudDsKLQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewotICAgICAgICBpZiAoZmNv dW50ID4gMSkKLSAgICAgICAgICBkZWJ1ZyhGMTExLCJ6eHBhbmQgb2siLG10Y2hzWzBdLGZjb3Vu dCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6eHBhbmQgZmNvdW50Iiwi IixmY291bnQpOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotICAgIHJldHVybihmY291bnQp OwotfQotCi0jaWZuZGVmIE5PTlpYUEFORAotLyogIE4gWiBYIFAgQSBOIEQgIC0tICBFeHBhbmQg YSBmaWxlIGxpc3QsIHdpdGggb3B0aW9ucy4gICovCi0vKgotICBDYWxsIHdpdGg6Ci0gICBzID0g cG9pbnRlciB0byBmaWxlbmFtZSBvciBwYXR0ZXJuLgotICAgZmxhZ3MgPSBvcHRpb24gYml0czoK LQotICAgICBmbGFncyAmIFpYX0ZJTE9OTFkgICBNYXRjaCByZWd1bGFyIGZpbGVzCi0gICAgIGZs YWdzICYgWlhfRElST05MWSAgIE1hdGNoIGRpcmVjdG9yaWVzCi0gICAgIGZsYWdzICYgWlhfUkVD VVJTRSAgIERlc2NlbmQgdGhyb3VnaCBkaXJlY3RvcnkgdHJlZQotICAgICBmbGFncyAmIFpYX01B VENIRE9UICBNYXRjaCAiZG90IGZpbGVzIgotICAgICBmbGFncyAmIFpYX05PQkFDS1VQICBEb24n dCBtYXRjaCAiYmFja3VwIGZpbGVzIgotICAgICBmbGFncyAmIFpYX05PTElOS1MgICBEb24ndCBm b2xsb3cgc3ltbGlua3MuCi0KLSAgIFJldHVybnMgdGhlIG51bWJlciBvZiBmaWxlcyB0aGF0IG1h dGNoIHMsIHdpdGggZGF0YSBzdHJ1Y3R1cmVzIHNldCB1cAotICAgc28gdGhhdCBmaXJzdCBmaWxl IChpZiBhbnkpIHdpbGwgYmUgcmV0dXJuZWQgYnkgdGhlIG5leHQgem5leHQoKSBjYWxsLgotKi8K LWludAotbnp4cGFuZChzLGZsYWdzKSBjaGFyICogczsgaW50IGZsYWdzOyB7Ci0gICAgY2hhciAq IHA7Ci0gICAgaW50IHg7Ci0KLSAgICBkZWJ1ZyhGMTExLCJuenhwYW5kIixzLGZsYWdzKTsKLSAg ICB4ID0gZmxhZ3MgJiAoWlhfRElST05MWXxaWF9GSUxPTkxZKTsKLSAgICB4ZGlyb25seSA9ICh4 ID09IFpYX0RJUk9OTFkpOwotICAgIHhmaWxvbmx5ID0gKHggPT0gWlhfRklMT05MWSk7Ci0gICAg aWYgKHhkaXJvbmx5ICYmIHhmaWxvbmx5KSB7Ci0gICAgICAgIHhkaXJvbmx5ID0gMDsKLSAgICAg ICAgeGZpbG9ubHkgPSAwOwotICAgIH0KLSAgICB4bWF0Y2hkb3QgID0gKGZsYWdzICYgWlhfTUFU Q0hET1QpOwotICAgIGRlYnVnKEYxMTEsIm56eHBhbmQgeG1hdGNoZG90IDEiLHMseG1hdGNoZG90 KTsKLSAgICAvKiBJZiB4bWF0Y2hkb3Qgbm90IHNldCBieSBjYWxsZXIgYnV0IHBhdHRlcm4gaW1w bGllcyBpdCwgc2V0IGl0IGFueXdheSAqLwotICAgIGlmICgheG1hdGNoZG90ICYmICgocCA9IGNr c3RyY2hyKHMsJy4nKSkpKSB7Ci0JaWYgKHAgPT0gcyAmJiBwWzFdICE9ICcvJykgewotCSAgICB4 bWF0Y2hkb3QgPSAxOwotCSAgICBkZWJ1ZyhGMTExLCJuenhwYW5kIHhtYXRjaGRvdCAyIixzLHht YXRjaGRvdCk7Ci0JfSBlbHNlIGlmIChwID4gcykgewotCSAgICB4bWF0Y2hkb3QgPSAoKihwLTEp ID09ICcsJykgfHwgKCoocC0xKSA9PSAneycpIHx8ICgqKHAtMSkgPT0gJy8nKTsKLQkgICAgZGVi dWcoRjExMSwibnp4cGFuZCB4bWF0Y2hkb3QgMyIscyx4bWF0Y2hkb3QpOwotCX0KLSAgICB9Ci0g ICAgeHJlY3Vyc2l2ZSA9IChmbGFncyAmIFpYX1JFQ1VSU0UpOwotICAgIHhub2JhY2t1cCAgPSAo ZmxhZ3MgJiBaWF9OT0JBQ0tVUCk7Ci0gICAgeG5vbGlua3MgICA9IChmbGFncyAmIFpYX05PTElO S1MpOwotCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKSB7Ci0JZGVidWcoRjEwMSwibnp4 cGFuZCB4ZGlyb25seSIsIiIseGRpcm9ubHkpOwotCWRlYnVnKEYxMDEsIm56eHBhbmQgeGZpbG9u bHkiLCIiLHhmaWxvbmx5KTsKLQlkZWJ1ZyhGMTAxLCJuenhwYW5kIHhtYXRjaGRvdCIsIiIseG1h dGNoZG90KTsKLQlkZWJ1ZyhGMTAxLCJuenhwYW5kIHhyZWN1cnNpdmUiLCIiLHhyZWN1cnNpdmUp OwotCWRlYnVnKEYxMDEsIm56eHBhbmQgeG5vYmFja3VwIiwiIix4bm9iYWNrdXApOwotCWRlYnVn KEYxMDEsIm56eHBhbmQgeG5vbGlua3MiLCIiLHhub2xpbmtzKTsKLSAgICB9Ci0jZW5kaWYgLyog REVCVUcgKi8KLQotICAgIHggPSB6eHBhbmQocyk7Ci0gICAgaWYgKHggPiAxKQotICAgICAgc2hf c29ydChtdGNocyxOVUxMLHgsMCwwLDEpOwkvKiBBbHBoYWJldGl6ZSB0aGUgbGlzdCAqLwotICAg IHhkaXJvbmx5ID0gMDsKLSAgICB4Zmlsb25seSA9IDA7Ci0gICAgeG1hdGNoZG90ID0gMDsKLSAg ICB4cmVjdXJzaXZlID0gMDsKLSAgICB4bm9iYWNrdXAgPSAwOwotICAgIHhub2xpbmtzID0gMDsK LSAgICByZXR1cm4oeCk7Ci19Ci0jZW5kaWYgLyogTk9OWlhQQU5EICovCi0KLSNpZm5kZWYgTk9a WFJFV0lORAotLyogIFogWCBSIEUgVyBJIE4gRCAgLS0gIFJld2luZHMgdGhlIHp4cGFuZCgpIGxp c3QgKi8KLQotaW50Ci16eHJld2luZCgpIHsKLSAgICAvKiBpZiAoIW10Y2hzKSByZXR1cm4oLTEp OyAqLwotICAgIGZjb3VudCA9IG54cGFuZDsKLSAgICBtdGNocHRyID0gbXRjaHM7Ci0gICAgcmV0 dXJuKG54cGFuZCk7Ci19Ci0jZW5kaWYgLyogTk9aWFJFV0lORCAqLwotCi0vKiAgWiBOIEUgWCBU ICAtLSAgR2V0IG5hbWUgb2YgbmV4dCBmaWxlIGZyb20gbGlzdCBjcmVhdGVkIGJ5IHp4cGFuZCgp LiAqLwotLyoKLSAgUmV0dXJucyA+MCBpZiB0aGVyZSdzIGFub3RoZXIgZmlsZSwgd2l0aCBpdHMg bmFtZSBjb3BpZWQgaW50byB0aGUgYXJnIHN0cmluZywKLSAgb3IgMCBpZiBubyBtb3JlIGZpbGVz IGluIGxpc3QuCi0qLwotaW50Ci16bmV4dChmbikgY2hhciAqZm47IHsKLSAgICBpZiAoZmNvdW50 LS0gPiAwKSB7Ci0gICAgICAgIGNrc3RybmNweShmbiwqbXRjaHB0cisrLENLTUFYUEFUSCk7Ci0g ICAgfSBlbHNlIHsKLSAgICAgICAgZm5bMF0gPSAnXDAnOwotICAgIH0KLSNpZm5kZWYgQ09NTUVO VAotICAgIGRlYnVnKEYxMTEsInpuZXh0IixmbixmY291bnQrMSk7Ci0gICAgcmV0dXJuKGZjb3Vu dCsxKTsKLSNlbHNlCi0gICAgZGVidWcoRjExMSwiem5leHQiLGZuLGZjb3VudCk7ICAgICAgLyog UmV0dXJuIDAgaWYgbm8gZmlsZW5hbWUgdG8gcmV0dXJuICovCi0gICAgcmV0dXJuKGZjb3VudCk7 Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotfQotCi0vKiAgWiBDIEggSyBTIFAgQSAgLS0gIENoZWNr IGlmIHRoZXJlIGlzIGVub3VnaCBzcGFjZSB0byBzdG9yZSB0aGUgZmlsZSAgKi8KLQotLyoKLSBD YWxsIHdpdGggZmlsZSBzcGVjaWZpY2F0aW9uIGYsIHNpemUgbiBpbiBieXRlcy4KLSBSZXR1cm5z IC0xIG9uIGVycm9yLCAwIGlmIG5vdCBlbm91Z2ggc3BhY2UsIDEgaWYgZW5vdWdoIHNwYWNlLgot Ki8KLS8qQVJHU1VTRUQqLwotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXpjaGtzcGEoY2hhciAqZiwg Q0tfT0ZGX1QgbikKLSNlbHNlCi16Y2hrc3BhKGYsbikgY2hhciAqZjsgQ0tfT0ZGX1QgbjsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwotLyogemNoa3NwYSgpICovIHsKLSAgICAvKiBJbiBVTklYIHRo ZXJlIGlzIG5vIGdvb2QgKGFuZCBwb3J0YWJsZSkgd2F5LiAqLwotICAgIHJldHVybigxKTsgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEFsd2F5cyBzYXkgT0suICovCi19Ci0KLSNpZmRlZiBD T01NRU5UCQkJCS8qIChub3QgdXNlZCkgKi8KLQotLyogIEkgUyBCIEEgQyBLIFUgUCAgLS0gIFRl bGxzIGlmIGdpdmVuIGZpbGUgaGFzIGEgYmFja3VwIHN1ZmZpeCAgKi8KLS8qCi0gICBSZXR1cm5z OgotICAgLTE6IEludmFsaWQgYXJndW1lbnQKLSAgICAwOiBGaWxlIGRvZXMgbm90IGhhdmUgYSBi YWNrdXAgc3VmZml4Ci0gICA+MDogQmFja3VwIHN1ZmZpeCBudW1iZXIKLSovCi1pbnQKLWlzYmFj a3VwKGZuKSBjaGFyICogZm47IHsJCS8qIEdldCBiYWNrdXAgc3VmZml4IG51bWJlciAqLwotICAg IGludCBpLCBqLCBrLCB4LCBzdGF0ZSwgZmxhZzsKLQotICAgIGlmICghZm4pCQkJCS8qIFdhdGNo IG91dCBmb3IgbnVsbCBwb2ludGVycy4gKi8KLSAgICAgIHJldHVybigtMSk7Ci0gICAgaWYgKCEq Zm4pCQkJCS8qIEFuZCBlbXB0eSBuYW1lcy4gKi8KLSAgICAgIHJldHVybigtMSk7Ci0KLSAgICBm bGFnID0gc3RhdGUgPSAwOwotICAgIGZvciAoaSA9IChpbnQpc3RybGVuKGZuKSAtIDE7ICghZmxh ZyAmJiAoaSA+IDApKTsgaS0tKSB7Ci0Jc3dpdGNoIChzdGF0ZSkgewotCSAgY2FzZSAwOgkJCS8q IFN0YXRlIDAgLSBmaW5hbCBjaGFyICovCi0JICAgIGlmIChmbltpXSA9PSAnficpCQkvKiBJcyB0 aWxkZSAqLwotCSAgICAgIHN0YXRlID0gMTsJCS8qIFN3aXRjaCB0byBuZXh0IHN0YXRlICovCi0J ICAgIGVsc2UJCQkvKiBPdGhlcndpc2UgKi8KLQkgICAgICBmbGFnID0gMTsJCQkvKiBRdWl0IC0g bm8gYmFja3VwIHN1ZmZpeC4gKi8KLQkgICAgYnJlYWs7Ci0JICBjYXNlIDE6CQkJLyogU3RhdGUg MSAtIGRpZ2l0cyAqLwotCSAgICBpZiAoZm5baV0gPT0gJ34nICAmJiBmbltpLTFdID09ICcuJykg eyAvKiBIYXZlIHN1ZmZpeCAqLwotCQlyZXR1cm4oYXRvaSgmZm5baSsxXSkpOwotCSAgICB9IGVs c2UgaWYgKGZuW2ldID49ICcwJyAmJiBmbltpXSA8PSAnOScpIHsgLyogSW4gbnVtYmVyIHBhcnQg Ki8KLQkJY29udGludWU7CQkvKiBLZWVwIGdvaW5nICovCi0JICAgIH0gZWxzZSB7CQkJLyogU29t ZXRoaW5nIGVsc2UgKi8KLQkJZmxhZyA9IDE7CQkvKiBOb3QgYSBiYWNrdXAgc3VmZml4IC0gcXVp dC4gKi8KLQkgICAgfQotCSAgICBicmVhazsKLQl9Ci0gICAgfQotICAgIHJldHVybigwKTsKLX0K LSNlbmRpZiAvKiBDT01NRU5UICovCi0KLQotLyogIFogTiBFIFcgTiAgLS0gIE1ha2UgYSBuZXcg bmFtZSBmb3IgdGhlIGdpdmVuIGZpbGUgICovCi0KLS8qCi0gIEdpdmVuIHRoZSBuYW1lLCBmbiwg b2YgYSBmaWxlIHRoYXQgYWxyZWFkeSBleGlzdHMsIHRoaXMgZnVuY3Rpb24gYnVpbGRzIGEKLSAg bmV3IG5hbWUgb2YgdGhlIGZvcm0gIjxvbGRuYW1lPi5+PG4+fiIsIHdoZXJlIDxvbGRuYW1lPiBp cyBhcmd1bWVudCBuYW1lCi0gIChmbiksIGFuZCA8bj4gaXMgYSB2ZXJzaW9uIG51bWJlciwgb25l IGhpZ2hlciB0aGFuIGFueSBleGlzdGluZyB2ZXJzaW9uCi0gIG51bWJlciBmb3IgdGhhdCBmaWxl LCB1cCB0byA5OTk5OS4gIFRoaXMgZm9ybWF0IGlzIGNvbnNpc3RlbnQgd2l0aCB0aGF0IHVzZWQK LSAgYnkgR05VIEVNQUNTLiAgSWYgdGhlIGNvbnN0cnVjdGVkIG5hbWUgaXMgdG9vIGxvbmcgZm9y IHRoZSBzeXN0ZW0ncyBtYXhpbXVtLAotICBlbm91Z2ggY2hhcmFjdGVycyBhcmUgdHJ1bmNhdGVk IGZyb20gdGhlIGVuZCBvZiA8Zm4+IHRvIGFsbG93IHRoZSB2ZXJzaW9uCi0gIG51bWJlciB0byBm aXQuICBJZiBubyBmcmVlIHZlcnNpb24gbnVtYmVycyBleGlzdCBiZXR3ZWVuIDEgYW5kIDk5OTk5 LCBhCi0gIHZlcnNpb24gbnVtYmVyIG9mICJ4eHh4IiBpcyB1c2VkLiAgUmV0dXJucyBhIHBvaW50 ZXIgdG8gdGhlIG5ldyBuYW1lIGluCi0gIGFyZ3VtZW50IHMuCi0qLwotI2lmZGVmIHBkcDExCi0j ZGVmaW5lIFpORVdOQkwgNjMgICAgICAgICAgICAgICAgICAgICAgLyogTmFtZSBidWZmZXIgbGVu Z3RoICovCi0jZGVmaW5lIFpORVdOTUQgMyAgICAgICAgICAgICAgICAgICAgICAgLyogTWF4IGRp Z2l0cyBmb3IgdmVyc2lvbiBudW1iZXIgKi8KLSNlbHNlCi0jZGVmaW5lIFpORVdOQkwgQ0tNQVhQ QVRICi0jZGVmaW5lIFpORVdOTUQgNAotI2VuZGlmIC8qIHBkcDExICovCi0KLSNkZWZpbmUgTUFY QlVESUdJVFMgNQotCi1zdGF0aWMgY2hhciB6bmV3YnVmW1pORVdOQkwrMTJdOwotCi1WT0lECi16 bmV3bihmbixzKSBjaGFyICpmbiwgKipzOyB7Ci0gICAgY2hhciAqIGJ1ZjsJCQkJLyogUG9pbnRl ciB0byBidWZmZXIgZm9yIG5ldyBuYW1lICovCi0gICAgY2hhciAqIHhwLCAqIG5hbWVwYXJ0ID0g TlVMTDsgICAgICAgLyogUG9pbnRlciB0byBmaWxlbmFtZSBwYXJ0ICovCi0gICAgc3RydWN0IHpm bmZwICogZm5mcDsgICAgICAgICAgICAgICAgLyogem5mcWZwKCkgcmVzdWx0IHN0cnVjdCBwb2lu dGVyICovCi0gICAgaW50IGQgPSAwLCB0LCBmbmxlbiwgYnVmbGVuOwotICAgIGludCBuLCBpLCBr LCBmbGFnLCBzdGF0ZTsKLSAgICBpbnQgbWF4ID0gTUFYTkFNTEVOOyAgICAgICAgICAgICAgICAv KiBNYXhpbXVtIG5hbWUgbGVuZ3RoICovCi0gICAgY2hhciAqIGRuYW1lID0gTlVMTDsKLQotICAg IGJ1ZiA9IHpuZXdidWY7Ci0gICAgKnMgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAg LyogSW5pdGlhbGl6ZSByZXR1cm4gdmFsdWUgKi8KLSAgICBpZiAoIWZuKSBmbiA9ICIiOyAgICAg ICAgICAgICAgICAgICAvKiBDaGVjayBmaWxlbmFtZSBhcmd1bWVudCAqLwotICAgIGkgPSBzdHJs ZW4oZm4pOwotCi0vKiBJZiBpbmNvbWluZyBmaWxlIGFscmVhZHkgaGFzIGEgYmFja3VwIHN1ZmZp eCwgcmVtb3ZlIGl0LiAqLwotLyogVGhlbiB3ZSdsbCB0YWNrIGEgbmV3IG9uIGxhdGVyLCB3aGlj aCB3aWxsIGJlIHRoZSBoaWdoZXN0IGZvciB0aGlzIGZpbGUuICovCi0KLSAgICBpZiAoaSA8PSBt YXggJiYgaSA+IDAgJiYgZm5baS0xXSA9PSAnficpIHsKLQljaGFyICogcDsKLQlpLS07Ci0JZGVi dWcoRjExMSwiem5ld24gc3VmZml4IHJlbW92YWwiLGZuLGkpOwotCWlmICgoZG5hbWUgPSAoY2hh ciAqKW1hbGxvYyhpKzEpKSkgewotCSAgICBja3N0cm5jcHkoZG5hbWUsZm4saSsxKTsKLQkgICAg cCA9IGRuYW1lOwotCSAgICBmb3IgKGZsYWcgPSBzdGF0ZSA9IDA7ICghZmxhZyAmJiAoaSA+IDAp KTsgaS0tKSB7Ci0JCXN3aXRjaCAoc3RhdGUpIHsKLQkJICBjYXNlIDA6CQkvKiBTdGF0ZSAwIC0g ZmluYWwgY2hhciAqLwotCQkgICAgaWYgKHBbaV0gPT0gJ34nKQkvKiBJcyB0aWxkZSAqLwotCQkg ICAgICBzdGF0ZSA9IDE7CS8qIFN3aXRjaCB0byBuZXh0IHN0YXRlICovCi0JCSAgICBlbHNlCQkv KiBPdGhlcndpc2UgKi8KLQkJICAgICAgZmxhZyA9IDE7CQkvKiBRdWl0IC0gbm8gYmFja3VwIHN1 ZmZpeC4gKi8KLQkJICAgIGJyZWFrOwotCQkgIGNhc2UgMToJCS8qIFN0YXRlIDEgLSBkaWdpdHMg Ki8KLQkJICAgIGlmIChwW2ldID09ICd+JyAgJiYgcFtpLTFdID09ICcuJykgeyAvKiBIYXZlIHN1 ZmZpeCAqLwotCQkJcFtpLTFdID0gTlVMOwkvKiBUcmltIGl0ICovCi0JCQlmbiA9IGRuYW1lOwot CQkJZGVidWcoRjExMSwiem5ld24gc3VmZml4IHJlbW92YWwgMiIsZm4saSk7Ci0JCQlmbGFnID0g MTsJLyogZG9uZSAqLwotCQkgICAgfSBlbHNlIGlmIChwW2ldID49ICcwJyAmJiBwW2ldIDw9ICc5 JykgeyAvKiBOdW1iZXIgcGFydCAqLwotCQkJY29udGludWU7CS8qIEtlZXAgZ29pbmcgKi8KLQkJ ICAgIH0gZWxzZSB7CQkvKiBTb21ldGhpbmcgZWxzZSAqLwotCQkJZmxhZyA9IDE7CS8qIE5vdCBh IGJhY2t1cCBzdWZmaXggLSBxdWl0LiAqLwotCQkgICAgfQotCQkgICAgYnJlYWs7Ci0JCX0KLQkg ICAgfQotCX0KLSAgICB9Ci0gICAgaWYgKChmbmxlbiA9IHN0cmxlbihmbikpIDwgMSkgewkvKiBH ZXQgbGVuZ3RoICovCi0JaWYgKGRuYW1lKSBmcmVlKGRuYW1lKTsKLQlyZXR1cm47Ci0gICAgfQot ICAgIGRlYnVnKEYxMTEsInpuZXduIixmbixmbmxlbik7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJ6bmV3 biBtYXggMSIsIiIsbWF4KTsKLSAgICBpZiAobWF4IDwgMTQpIG1heCA9IDE0OyAgICAgICAgICAg ICAvKiBNYWtlIG1heCByZWFzb25hYmxlIGZvciBhbnkgVU5JWCAqLwotICAgIGlmIChtYXggPiBa TkVXTkJMKSBtYXggPSBaTkVXTkJMOwotICAgIGRlYnVnKEYxMDEsInpuZXduIG1heCAyIiwiIixt YXgpOwotCi0gICAgaWYgKChmbmZwID0gemZucWZwKGZuLCBaTkVXTkJMLCBidWYpKSkgeyAvKiBH ZXQgZnVsbHkgcXVhbGlmaWVkIG5hbWUgKi8KLSAgICAgICAgbmFtZXBhcnQgPSBmbmZwLT5mbmFt ZTsgICAgICAgICAvKiBJc29sYXRlIHRoZSBmaWxlbmFtZSAqLwotICAgICAgICBrID0gc3RybGVu KGZuKTsgICAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBuYW1lIHBhcnQgKi8KLSAgICAgICAg ZGVidWcoRjExMSwiem5ld24gbmFtZXBhcnQiLG5hbWVwYXJ0LGspOwotICAgIH0gZWxzZSB7Ci0J aWYgKGRuYW1lKSBmcmVlKGRuYW1lKTsKLQlyZXR1cm47Ci0gICAgfQotICAgIGJ1ZmxlbiA9IGZu ZnAtPmxlbjsgICAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBmdWxseSBxdWFsaWZpZWQgbmFt ZSAqLwotICAgIGRlYnVnKEYxMTEsInpuZXduIGxlbiIsYnVmLGJ1Zmxlbik7Ci0KLSAgICBpZiAo ayArIE1BWEJVRElHSVRTICsgMyA8IG1heCkgeyAgICAvKiBCYWNrdXAgbmFtZSBmaXRzIC0gbm8g b3ZlcmZsb3cgKi8KLQkvKiBNYWtlIHBhdHRlcm4gZm9yIGJhY2t1cCBuYW1lcyAqLwotICAgICAg ICBja3N0cm5jcHkoYnVmK2J1ZmxlbiwiLn4qfiIsWk5FV05CTCsxMi1idWZsZW4pOwotICAgICAg ICBuID0gbnp4cGFuZChidWYsWlhfRklMT05MWSk7ICAgIC8qIEV4cGFuZCB0aGUgcGF0dGVybiAq LwotICAgICAgICBkZWJ1ZyhGMTExLCJ6bmV3biBBIG1hdGNoZXMiLGJ1ZixuKTsKLSAgICAgICAg d2hpbGUgKG4tLSA+IDApIHsgICAgICAgICAgICAgICAvKiBGaW5kIGFueSBleGlzdGluZyBuYW1l Ln5ufiBmaWxlcyAqLwotICAgICAgICAgICAgeHAgPSAqbXRjaHB0cisrOyAgICAgICAgICAgIC8q IFBvaW50IGF0IG1hdGNoaW5nIG5hbWUgKi8KLSAgICAgICAgICAgIHQgPSBhdG9pKHhwK2J1Zmxl bisyKTsgICAgICAvKiBHZXQgbnVtYmVyICovCi0gICAgICAgICAgICBpZiAodCA+IGQpIGQgPSB0 OyAgICAgICAgICAgLyogU2F2ZSBkID0gaGlnaGVzdCB2ZXJzaW9uIG51bWJlciAqLwotICAgICAg ICB9Ci0gICAgICAgIHNwcmludGYoYnVmK2J1ZmxlbiwiLn4lZH4iLGQrMSk7IC8qIFllcywgbWFr ZSAibmFtZS5+PGQrMT5+IiAqLwotICAgICAgICBkZWJ1ZyhGMTEwLCJ6bmV3biBBIG5ld25hbWUi LGJ1ZiwwKTsKLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCYWNr dXAgbmFtZSB3b3VsZCBiZSB0b28gbG9uZyAqLwotICAgICAgICBpbnQgeGxlbjsgICAgICAgICAg ICAgICAgICAgICAgIC8qIFNvIHdlIGhhdmUgdG8gZWF0IGJhY2sgaW50byBpdCAqLwotICAgICAg ICBpbnQgZGVsdGE7Ci0gICAgICAgIGNoYXIgYnVmMltaTkVXTkJMKzEyXTsKLQotICAgICAgICBk ZWx0YSA9IG1heCAtIGs7Ci0gICAgICAgIGRlYnVnKEYxMDEsInpuZXduIEIgZGVsdGEiLCIiLGRl bHRhKTsKLQotICAgICAgICBmb3IgKGkgPSBNQVhCVURJR0lUUzsgaSA+IDA7IGktLSkgeyAvKiBJ biB0aGlzIGNhc2UgdGhlIGZvcm1hdCBvZiAqLwotICAgICAgICAgICAgY2tzdHJuY3B5KGJ1ZjIs YnVmLFpORVdOQkwrMTIpOyAvKiB0aGUgYmFja3VwIG5hbWUgZGVwZW5kcyBvbiAqLwotICAgICAg ICAgICAgeGxlbiA9IGJ1ZmxlbiAtIGkgLSAzICsgZGVsdGE7ICAvKiBob3cgbWFueSBkaWdpdHMg YXJlIGluIHRoZSAqLwotICAgICAgICAgICAgY2tzdHJuY3B5KGJ1ZjIreGxlbiwiLn4qfiIsWk5F V05CTCsxMi14bGVuKTsgLyogYmFja3VwIG51bWJlciAqLwotICAgICAgICAgICAgbiA9IG56eHBh bmQoYnVmMixaWF9GSUxPTkxZKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsInpuZXduIEIgbWF0 Y2hlcyIsYnVmMixuKTsKLSAgICAgICAgICAgIGlmIChuID4gMCkKLSAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgIH0KLSAgICAgICAgd2hpbGUgKG4tLSA+IDApIHsgICAgICAgICAgICAgICAv KiBGaW5kIGFueSBleGlzdGluZyBuYW1lLn5ufiBmaWxlcyAqLwotICAgICAgICAgICAgeHAgPSAq bXRjaHB0cisrOyAgICAgICAgICAgIC8qIFBvaW50IGF0IG1hdGNoaW5nIG5hbWUgKi8KLSAgICAg ICAgICAgIHQgPSBhdG9pKHhwK3hsZW4rMik7ICAgICAgICAvKiBHZXQgbnVtYmVyICovCi0gICAg ICAgICAgICBpZiAodCA+IGQpIGQgPSB0OyAgICAgICAgICAgLyogU2F2ZSBkID0gaGlnaGVzdCB2 ZXJzaW9uIG51bWJlciAqLwotICAgICAgICB9Ci0gICAgICAgIGlmIChkID4gMCkgICAgICAgICAg ICAgICAgICAgICAgLyogSWYgdGhlIG9kb21ldGVyIHR1cm5lZCBvdmVyLi4uICovCi0gICAgICAg ICAgaWYgKChkICUgMTApID09IDkpICAgICAgICAgICAgLyogYmFjayB1cCBvbmUgc3BhY2UuICov Ci0gICAgICAgICAgICB4bGVuLS07Ci0gICAgICAgIHNwcmludGYoYnVmMit4bGVuLCIufiVkfiIs ZCsxKTsgLyogVGhpcyBqdXN0IGZpdHMgKi8KLSAgICAgICAgY2tzdHJuY3B5KGJ1ZixidWYyLFpO RVdOQkwrMTIpOwkvKiAod2UgY291bGQgYmUgbW9yZSBjbGV2ZXIgaGVyZS4uLikgKi8KLSAgICAg ICAgZGVidWcoRjExMCwiem5ld24gQiBuZXcgbmFtZSIsYnVmLDApOwotICAgIH0KLSAgICAqcyA9 IGJ1ZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byBuZXcgbmFtZSAqLwot ICAgIGNrX3puZXduID0gZCsxOyAgICAgICAgICAgICAgICAgICAgIC8qIEFsc28gbWFrZSBpdCBh dmFpbGFibGUgZ2xvYmFsbHkgKi8KLSAgICBpZiAoZG5hbWUpIGZyZWUoZG5hbWUpOwotICAgIHJl dHVybjsKLX0KLQotLyogIFogUiBFIE4gQSBNIEUgIC0tICBSZW5hbWUgYSBmaWxlICAqLwotLyoK LSAgIENhbGwgd2l0aCBvbGQgYW5kIG5ldyBuYW1lcy4KLSAgIElmIG5ldyBuYW1lIGlzIHRoZSBu YW1lIG9mIGEgZGlyZWN0b3J5LCB0aGUgJ29sZCcgZmlsZSBpcyBtb3ZlZCB0bwotICAgdGhhdCBk aXJlY3RvcnkuCi0gICBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KLSovCi1p bnQKLXpyZW5hbWUob2xkLG5ldykgY2hhciAqb2xkLCAqbmV3OyB7Ci0gICAgY2hhciAqcCwgKnM7 Ci0gICAgaW50IHg7Ci0KLSAgICBpZiAoIW9sZCkgb2xkID0gIiI7Ci0gICAgaWYgKCFuZXcpIG5l dyA9ICIiOwotICAgIGRlYnVnKEYxMTAsInpyZW5hbWUgb2xkIixvbGQsMCk7Ci0gICAgZGVidWco RjExMCwienJlbmFtZSBuZXciLG5ldywwKTsKLSAgICBpZiAoISpvbGQpIHJldHVybigtMSk7Ci0g ICAgaWYgKCEqbmV3KSByZXR1cm4oLTEpOwotCi0jaWZkZWYgSUtTRAotI2lmZGVmIENLX0xPR0lO Ci0gICAgaWYgKGluc2VydmVyICYmIGlzZ3Vlc3QpCi0gICAgICByZXR1cm4oLTEpOwotI2VuZGlm IC8qIENLX0xPR0lOICovCi0jZW5kaWYgLyogSUtTRCAqLwotCi0jaWZkZWYgQ0tST09UCi0gICAg ZGVidWcoRjExMSwienJlbmFtZSBzZXRyb290Iixja3Jvb3QsY2tyb290c2V0KTsKLSAgICBpZiAo Y2tyb290c2V0KSB7Ci0JaWYgKCF6aW5yb290KG9sZCkpIHsKLQkgICAgZGVidWcoRjExMCwienJl bmFtZSBvbGQ6IHNldHJvb3QgdmlvbGF0aW9uIixvbGQsMCk7Ci0JICAgIHJldHVybigtMSk7Ci0J fQotCWlmICghemlucm9vdChuZXcpKSB7Ci0JICAgIGRlYnVnKEYxMTAsInpyZW5hbWUgbmV3OiBz ZXRyb290IHZpb2xhdGlvbiIsbmV3LDApOwotCSAgICByZXR1cm4oLTEpOwotCX0KLSAgICB9Ci0j ZW5kaWYgLyogQ0tST09UICovCi0KLSAgICBwID0gTlVMTDsKLSAgICBzID0gbmV3OwotCi0gICAg aWYgKGlzZGlyKG5ldykpIHsKLSAgICAgICAgY2hhciAqcSA9IE5VTEw7Ci0gICAgICAgIHggPSBz dHJsZW4obmV3KTsKLSAgICAgICAgaWYgKCEocCA9IG1hbGxvYyhzdHJsZW4obmV3KSArIHN0cmxl bihvbGQpICsgMikpKQotICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIHN0cmNweShwLG5l dyk7ICAgICAgICAgICAgICAgICAgLyogKHNhZmUpIERpcmVjdG9yeSBwYXJ0ICovCi0gICAgICAg IGlmICghSVNESVJTRVAoKihuZXcreC0xKSkpICAgICAgLyogU2VwYXJhdG9yLCBpZiBuZWVkZWQg Ki8KLSAgICAgICAgICBzdHJjYXQocCwiLyIpOwkJLyogKHNhZmUpICovCi0gICAgICAgIHpzdHJp cChvbGQsJnEpOyAgICAgICAgICAgICAgICAgLyogU3RyaXAgcGF0aCBwYXJ0IGZyb20gb2xkIG5h bWUgKi8KLSAgICAgICAgc3RyY2F0KHAscSk7ICAgICAgICAgICAgICAgICAgICAvKiBjYXQgdG8g bmV3IGRpcmVjdG9yeSAoc2FmZSkgKi8KLSAgICAgICAgcyA9IHA7Ci0gICAgICAgIGRlYnVnKEYx MTAsInpyZW5hbWUgZGlyIixzLDApOwotICAgIH0KLSNpZmRlZiBERUJVRwotICAgIGVsc2UgZGVi dWcoRjExMCwienJlbmFtZSBubyBkaXIiLHMsMCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotI2lm ZGVmIElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIgJiYgKCFFTkFCTEVEKGVuX2RlbCkpKSB7Ci0JaWYg KHpjaGtpKHMpID4gLTEpCQkvKiBEZXN0aW5hdGlvbiBmaWxlIGV4aXN0cz8gKi8KLQkgIHJldHVy bigtMSk7Ci0gICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLQotICAgIHggPSAtMTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBjb2RlLiAqLwotI2lmZGVmIFJFTkFNRQotLyog QXRvbWljLCBwcmVmZXJyZWQsIHVzZXMgYSBzaW5nbGUgc3lzdGVtIGNhbGwsIHJlbmFtZSgpLCBp ZiBhdmFpbGFibGUuICovCi0gICAgeCA9IHJlbmFtZShvbGQscyk7Ci0gICAgZGVidWcoRjExMSwi enJlbmFtZSByZW5hbWUoKSIsb2xkLHgpOwotICAgIGlmICh4KSB4ID0gLTE7Ci0jZW5kaWYgLyog UkVOQU1FICovCi0KLSAgICAvKiBJZiByZW5hbWUoKSBmYWlsZWQgb3Igbm90IGF2YWlsYWJsZSB0 cnkgbGluaygpL3VubGluaygpICovCi0KLSAgICBpZiAoeCA8IDApIHsKLQlpZiAoemNoa28ob2xk KSA+IC0xKSB7CQkvKiBSZXF1aXJlcyB3cml0ZSBhY2Nlc3MgdG8gb3JpZ25hbCAqLwotCSAgICB4 ID0gbGluayhvbGQscyk7Ci0JICAgIGRlYnVnKEYxMTEsInpyZW5hbWUgbGluaygpIixvbGQseCk7 Ci0JICAgIGlmICh4ID4gLTEpIHsJCS8qIE1ha2UgYSBsaW5rIHdpdGggdGhlIG5ldyBuYW1lLiAq LwotCQl4ID0gdW5saW5rKG9sZCk7Ci0JCWRlYnVnKEYxMTEsInpyZW5hbWUgdW5saW5rKCkiLG9s ZCx4KTsKLQkgICAgfQotCSAgICAvKiBJZiBsaW5rL3VubGluayBmYWlsZWQgY29weSBhbmQgZGVs ZXRlICovCi0JICAgIGlmICh4IDwgMCkgewotCQl4ID0gemNvcHkob2xkLHMpOwotCQlkZWJ1ZyhG MTExLCJ6cmVuYW1lIHpjb3B5KCkiLG9sZCx4KTsKLQkJaWYgKHggPiAtMSkgewotCQkgICAgeCA9 IHpkZWxldChvbGQpOwotCQkgICAgZGVidWcoRjExMSwienJlbmFtZSB6ZGVsZXQoKSIsb2xkLHgp OwotCQl9Ci0JICAgIH0KLQl9Ci0gICAgfQotICAgIGZ1bGxuYW1lWzBdID0gJ1wwJzsJCQkvKiBD bGVhciB0aGlzIG91dCBmb3IgbmV4dCB0aW1lLiAqLwotCi0jaWZkZWYgQ0tTWVNMT0cKLSAgICBp ZiAoY2t4c3lzbG9nID49IFNZU0xHX0ZDICYmIGNreGxvZ2dpbmcpIHsKLSAgICAgICAgemZucWZw KG9sZCxDS01BWFBBVEgsZnVsbG5hbWUpOwotICAgICAgICB0bXAyWzBdID0gJ1wwJzsKLSAgICAg ICAgemZucWZwKHMsQ0tNQVhQQVRILHRtcDIpOwotICAgICAgICBpZiAoeCA+IC0xKQotICAgICAg ICAgIHN5c2xvZyhMT0dfSU5GTywiZmlsZVtdICVzOiByZW5hbWVkIHRvICVzIG9rIiwgZnVsbG5h bWUsIHRtcDIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgc3lzbG9nKExPR19JTkZPLCJmaWxl W10gJXM6IHJlbmFtZSB0byAlcyBmYWlsZWQgKCVtKSIsZnVsbG5hbWUsdG1wMik7Ci0gICAgfQot I2VuZGlmIC8qIENLU1lTTE9HICovCi0KLSAgICBpZiAocCkgZnJlZShwKTsKLSAgICByZXR1cm4o eCk7Ci19Ci0KLS8qICBaIEMgTyBQIFkgIC0tICBDb3B5IGEgc2luZ2xlIGZpbGUuICovCi0vKgot ICBDYWxsIHdpdGggc291cmNlIGFuZCBkZXN0aW5hdGlvbiBuYW1lcy4KLSAgSWYgZGVzdGluYXRp b24gaXMgYSBkaXJlY3RvcnksIHRoZSBzb3VyY2UgZmlsZSBpcwotICBjb3BpZWQgdG8gdGhhdCBk aXJlY3Rvcnkgd2l0aCBpdHMgb3JpZ2luYWwgbmFtZS4KLSAgUmV0dXJuczoKLSAgIDAgb24gc3Vj Y2Vzcy4KLSAgPDAgb24gZmFpbHVyZToKLSAgLTIgPSBzb3VyY2UgZmlsZSBpcyBub3QgYSByZWd1 bGFyIGZpbGUuCi0gIC0zID0gc291cmNlIGZpbGUgbm90IGZvdW5kLgotICAtNCA9IHBlcm1pc3Np b24gZGVuaWVkLgotICAtNSA9IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1lIGZp bGUuCi0gIC02ID0gaS9vIGVycm9yLgotICAtMSA9IG90aGVyIGVycm9yLgotKi8KLWludAotemNv cHkoc291cmNlLGRlc3RpbmF0aW9uKSBjaGFyICpzb3VyY2UsICpkZXN0aW5hdGlvbjsgewotICAg IGNoYXIgKnNyYywgKmRzdDsJCQkvKiBMb2NhbCBwb2ludGVycyB0byBmaWxlbmFtZXMgKi8KLSAg ICBpbnQgeCwgeSwgcmM7ICAgICAgICAgICAgICAgICAgICAgICAvKiBXb3JrZXJzICovCi0gICAg aW50IGluID0gLTEsIG91dCA9IC0xOyAgICAgICAgICAgICAgLyogaS9vIGZpbGUgZGVzY3JpcHRv cnMgKi8KLSAgICBzdHJ1Y3Qgc3RhdCBzcmNidWY7ICAgICAgICAgICAgICAgICAvKiBTb3VyY2Ug ZmlsZSBpbmZvIGJ1ZmZlciAqLwotICAgIGludCBwZXJtczsgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIE91dHB1dCBmaWxlIHBlcm1pc3Npb25zICovCi0gICAgY2hhciBidWZbMTAyNF07ICAg ICAgICAgICAgICAgICAgICAgLyogRmlsZSBjb3B5aW5nIGJ1ZmZlciAqLwotCi0gICAgaWYgKCFz b3VyY2UpIHNvdXJjZSA9ICIiOwotICAgIGlmICghZGVzdGluYXRpb24pIGRlc3RpbmF0aW9uID0g IiI7Ci0KLSAgICBkZWJ1ZyhGMTEwLCJ6Y29weSBzcmMgYXJnIixzb3VyY2UsMCk7Ci0gICAgZGVi dWcoRjExMCwiemNvcHkgZHN0IGFyZyIsZGVzdGluYXRpb24sMCk7Ci0KLSAgICBpZiAoISpzb3Vy Y2UpIHJldHVybigtMSk7Ci0gICAgaWYgKCEqZGVzdGluYXRpb24pIHJldHVybigtMSk7Ci0KLSNp ZmRlZiBJS1NECi0jaWZkZWYgQ0tfTE9HSU4KLSAgICBpZiAoaW5zZXJ2ZXIgJiYgaXNndWVzdCkK LSAgICAgIHJldHVybigtNCk7Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSNlbmRpZiAvKiBJS1NE ICovCi0KLSNpZmRlZiBDS1JPT1QKLSAgICBkZWJ1ZyhGMTExLCJ6Y29weSBzZXRyb290Iixja3Jv b3QsY2tyb290c2V0KTsKLSAgICBpZiAoY2tyb290c2V0KSB7Ci0JaWYgKCF6aW5yb290KHNvdXJj ZSkpIHsKLQkgICAgZGVidWcoRjExMCwiemNvcHkgc291cmNlOiBzZXRyb290IHZpb2xhdGlvbiIs c291cmNlLDApOwotCSAgICByZXR1cm4oLTEpOwotCX0KLQlpZiAoIXppbnJvb3QoZGVzdGluYXRp b24pKSB7Ci0JICAgIGRlYnVnKEYxMTAsInpjb3B5IGRlc3RpbmF0aW9uOiBzZXRyb290IHZpb2xh dGlvbiIsZGVzdGluYXRpb24sMCk7Ci0JICAgIHJldHVybigtMSk7Ci0JfQotICAgIH0KLSNlbmRp ZiAvKiBDS1JPT1QgKi8KLQotICAgIHNyYyA9IHNvdXJjZTsKLSAgICBkc3QgPSBkZXN0aW5hdGlv bjsKLQotICAgIGlmIChzdGF0KHNyYywmc3JjYnVmKSA9PSAwKSB7ICAgICAgIC8qIEdldCBzb3Vy Y2UgZmlsZSBpbmZvICovCi0gICAgICAgIHN0cnVjdCBzdGF0IGRzdGJ1ZjsgICAgICAgICAgICAg LyogRGVzdGluYXRpb24gZmlsZSBpbmZvIGJ1ZmZlciAqLwotCWRlYnVnKEYxMDEsIlNUQVQiLCIi LDYpOwotICAgICAgICBpZiAoc3RhdChkc3QsJmRzdGJ1ZikgPT0gMCkgewotCSAgICBkZWJ1ZyhG MTAxLCJTVEFUIiwiIiw3KTsKLSAgICAgICAgICAgIGlmIChzcmNidWYuc3RfZGV2ID09IGRzdGJ1 Zi5zdF9kZXYpCi0gICAgICAgICAgICAgIGlmIChzcmNidWYuc3RfaW5vID09IGRzdGJ1Zi5zdF9p bm8pIHsKLSAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInpjb3B5IGZpbGVzIGlkZW50aWNh bDogc3RhdCgpIiwiIiwwKTsKLSAgICAgICAgICAgICAgICAgIHJldHVybigtNSk7Ci0gICAgICAg ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHN0YXQoKSBmYWlsZWQuLi4gKi8KLQlkZWJ1ZyhGMTAxLCJTVEFUIiwiIiw4KTsKLSAg ICAgICAgZGVidWcoRjExMSwic291cmNlIGZpbGUgbm90IGZvdW5kIixzcmMsZXJybm8pOwotICAg ICAgICByZXR1cm4oLTMpOwotICAgIH0KLSAgICBmdWxsbmFtZVswXSA9ICdcMCc7ICAgICAgICAg ICAgICAgICAvKiBHZXQgZnVsbCBwYXRobmFtZXMgKi8KLSAgICBpZiAoemZucWZwKHNvdXJjZSxD S01BWFBBVEgsZnVsbG5hbWUpKQotICAgICAgc3JjID0gZnVsbG5hbWU7Ci0gICAgZGVidWcoRjEx MCwiemNvcHkgc3JjIixzcmMsMCk7Ci0gICAgdG1wMlswXSA9ICdcMCc7Ci0gICAgaWYgKHpmbnFm cChkZXN0aW5hdGlvbixDS01BWFBBVEgsdG1wMikpCi0gICAgICBkc3QgPSB0bXAyOwotICAgIGRl YnVnKEYxMTAsInpjb3B5IGRzdCAxIixkc3QsMCk7Ci0gICAgaWYgKCFzdHJjbXAoc3JjLGRzdCkp IHsgICAgICAgICAgICAgLyogU3JjIGFuZCBkc3QgYXJlIHNhbWUgZmlsZT8gKi8KLSAgICAgICAg ZGVidWcoRjEwMCwiemNvcHkgZmlsZXMgaWRlbnRpY2FsOiBzdHJjbXAoKSIsIiIsMCk7IC8qIFRo aXMuLi4gKi8KLSAgICAgICAgcmV0dXJuKC01KTsgICAgICAgICAgICAgICAgICAgICAvKiBzaG91 bGQgbm90IGhhcHBlbi4gKi8KLSAgICB9Ci0gICAgaWYgKGlzZGlyKHNyYykpIHsgICAgICAgICAg ICAgICAgICAgLyogU291cmNlIGZpbGUgaXMgYSBkaXJlY3Rvcnk/ICovCi0gICAgICAgIGRlYnVn KEYxMTAsInpjb3B5IHNvdXJjZSBpcyBkaXJlY3RvcnkiLHNyYywwKTsKLSAgICAgICAgcmV0dXJu KC0yKTsgICAgICAgICAgICAgICAgICAgICAvKiBGYWlsICovCi0gICAgfQotICAgIGlmIChpc2Rp cihkc3QpKSB7ICAgICAgICAgICAgICAgICAgIC8qIERlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5 PyAqLwotICAgICAgICBjaGFyICpxID0gTlVMTDsgICAgICAgICAgICAgICAgIC8qIFllcywgYWRk IGZpbGVuYW1lIHRvIGl0LiAqLwotICAgICAgICB4ID0gc3RybGVuKGRzdCk7Ci0JaWYgKHggPCAx KSByZXR1cm4oLTEpOwotICAgICAgICBpZiAoIUlTRElSU0VQKCooZHN0K3gtMSkpKSB7ICAgIC8q IEFkZCBzZXBhcmF0b3IgaWYgbmVlZGVkICovCi0gICAgICAgICAgICB0bXAyW3grK10gPSAnLyc7 Ci0gICAgICAgICAgICB0bXAyW3hdID0gJ1wwJzsKLSAgICAgICAgfQotCWRlYnVnKEYxMTEsInpj b3B5IGRzdCAyIixkc3QseCk7Ci0gICAgICAgIHpzdHJpcChzcmMsJnEpOyAgICAgICAgICAgICAg ICAgLyogU3RyaXAgcGF0aCBwYXJ0IGZyb20gb2xkIG5hbWUgKi8KLSAgICAgICAgY2tzdHJuY3B5 KHRtcDIreCxxLENLTUFYUEFUSC14KTsgLyogQ29uY2F0ZW5hdGUgaXQgdG8gbmV3IG5hbWUgKi8K LSAgICB9Ci0gICAgZGVidWcoRjExMCwiemNvcHkgZHN0IDMiLGRzdCwwKTsKLQotI2lmZGVmIElL U0QKLSAgICBpZiAoaW5zZXJ2ZXIgJiYgKCFFTkFCTEVEKGVuX2RlbCkpKSB7Ci0JaWYgKHpjaGtp KGRzdCkgPiAtMSkJCS8qIERlc3RpbmF0aW9uIGZpbGUgZXhpc3RzPyAqLwotCSAgcmV0dXJuKC00 KTsKLSAgICB9Ci0jZW5kaWYgLyogSUtTRCAqLwotCi0gICAgcGVybXMgPSB1bWFzaygwKTsgICAg ICAgICAgICAgICAgICAgLyogR2V0IHVzZXIncyB1bWFzayAqLwotICAgIHVtYXNrKHBlcm1zKTsJ CQkvKiBQdXQgaXQgYmFjayEgKi8KLSAgICBwZXJtcyBePSAwNzc3OyAgICAgICAgICAgICAgICAg ICAgICAvKiBGbGlwIHRoZSBiaXRzICovCi0gICAgcGVybXMgJj0gMDY2NjsgICAgICAgICAgICAg ICAgICAgICAgLyogWmVybyBleGVjdXRlIGJpdHMgZnJvbSB1bWFzayAqLwotICAgIHBlcm1zIHw9 IChzcmNidWYuc3RfbW9kZSAmIDAxMTEpOyAgIC8qIE9SIGluIHNvdXJjZSBmaWxlJ3MgZXhlY3V0 ZSBiaXRzICovCi0gICAgcmMgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVm YXVsdCByZXR1cm4gY29kZSAqLwotICAgIGVycm5vID0gMDsgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFJlc2V0IGVycm5vICovCi0gICAgaW4gPSBvcGVuKHNyYywgT19SRE9OTFksIDApOyAg ICAgICAgLyogT3BlbiBzb3VyY2UgZmlsZSAqLwotICAgIGRlYnVnKEYxMTEsInpjb3B5IG9wZW4g c291cmNlIixzcmMsaW4pOwotICAgIGlmIChpbiA+IC0xKSB7ICAgICAgICAgICAgICAgICAgICAg IC8qIElmIG9wZW4uLi4gKi8KLQkvKiBPcGVuIGRlc3RpbmF0aW9uIGZpbGUgKi8KLSNpZmRlZiBP X1RSVU5DCi0gICAgICAgIG91dCA9IG9wZW4oZHN0LCBPX1dST05MWXxPX0NSRUFUfE9fVFJVTkMs IHBlcm1zKTsKLSNlbHNlCi0gICAgICAgIG91dCA9IG9wZW4oZHN0LCBPX1dST05MWXxPX0NSRUFU LCBwZXJtcyk7Ci0jZW5kaWYgLyogT19UUlVOQyAqLwotICAgICAgICBkZWJ1ZyhGMTExLCJ6Y29w eSBvcGVuIGRlc3QiLGRzdCxvdXQpOwotICAgICAgICBpZiAob3V0ID4gLTEpIHsgICAgICAgICAg ICAgICAgIC8qIElmIG9wZW4uLi4gKi8KLSAgICAgICAgICAgIHdoaWxlICgoeCA9IHJlYWQoaW4s YnVmLDEwMjQpKSA+IDApIHsgLyogQ29weSBpbiAxSyBibG9ja3MgKi8KLSAgICAgICAgICAgICAg ICB5ID0gd3JpdGUob3V0LGJ1Zix4KTsKLSAgICAgICAgICAgICAgICBpZiAoeSA8IDApIHsgICAg ICAgICAgICAvKiBPbiB3cml0ZSBmYWlsdXJlICovCi0gICAgICAgICAgICAgICAgICAgIHggPSAt MTsKLSAgICAgICAgICAgICAgICAgICAgcmMgPSAtNjsgICAgICAgICAgICAvKiBJbmRpY2F0ZSBp L28gZXJyb3IgKi8KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVidWcoRjEwMSwiemNvcHkgZmluYWwgcmVh ZCIsIiIseCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6Y29weSBlcnJubyIsIiIsZXJybm8p OwotICAgICAgICAgICAgcmMgPSAoeCA9PSAwKSA/IDAgOiAtNjsgICAgIC8qIEluIGNhc2Ugb2Yg cmVhZCBmYWlsdXJlICovCi0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGluID4gLTEpIGNsb3Nl KGluKTsgICAgICAgICAgICAgLyogQ2xvc2UgZmlsZXMgKi8KLSAgICBpZiAob3V0ID4gLTEpIGNs b3NlKG91dCk7Ci0gICAgaWYgKHJjID09IC0xKSB7ICAgICAgICAgICAgICAgICAgICAgLyogU2V0 IHJldHVybiBjb2RlICovCi0gICAgICAgIHN3aXRjaCAoZXJybm8pIHsKLSAgICAgICAgICBjYXNl IEVOT0VOVDogcmMgPSAtMzsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBFQUNDRVM6IHJjID0gLTQ7 IGJyZWFrOwotICAgICAgICAgIGNhc2UgRUlPOiAgICByYyA9IC02OwotICAgICAgICB9Ci0gICAg fQotCi0jaWZkZWYgQ0tTWVNMT0cKLSAgICBpZiAocmMgPiAtMSAmJiBja3hzeXNsb2cgPj0gU1lT TEdfRkMgJiYgY2t4bG9nZ2luZykgewotICAgICAgICBpZiAocmMpCi0gICAgICAgICAgc3lzbG9n KExPR19JTkZPLCJmaWxlW10gJXM6IGNvcHkgdG8gJXMgZmFpbGVkICglbSkiLCBmdWxsbmFtZSwg dG1wMik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBzeXNsb2coTE9HX0lORk8sImZpbGVbXSAl czogY29weSB0byAlcyBvayIsIGZ1bGxuYW1lLCB0bXAyKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tT WVNMT0cgKi8KLQotICAgIHJldHVybihyYyk7Ci19Ci0KLS8qICBaIFMgQSBUIFQgUiAqLwotLyoK LSBGaWxscyBpbiBhIEtlcm1pdCBmaWxlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUgZm9yIHRoZSBmaWxl IHdoaWNoIGlzIHRvIGJlIHNlbnQuCi0gUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgd2l0aCB0aGUgc3Ry dWN0dXJlIGZpbGxlZCBpbiwgb3IgLTEgb24gZmFpbHVyZS4KLSBJZiBhbnkgc3RyaW5nIG1lbWJl ciBpcyBudWxsLCB0aGVuIGl0IHNob3VsZCBiZSBpZ25vcmVkLgotIElmIGFueSBudW1lcmljIG1l bWJlciBpcyAtMSwgdGhlbiBpdCBzaG91bGQgYmUgaWdub3JlZC4KLSovCi0jaWZkZWYgQ0tfUEVS TVMKLQotI2lmZGVmIENLX0dQRVJNUwotI3VuZGVmIENLX0dQRVJNUwotI2VuZGlmIC8qIENLX0dQ RVJNUyAqLwotCi0jaWZkZWYgVU5JWAotI2lmbmRlZiBTX0lSVVNSCi0jZGVmaW5lIFNfSVJVU1Ig MDQwMAotI2VuZGlmIC8qIFNfSVJVU1IgKi8KLSNpZm5kZWYgU19JV1VTUgotI2RlZmluZSBTX0lY VVNSIDAyMDAKLSNlbmRpZiAvKiBTX0lXVVNSICovCi0jaWZuZGVmIFNfSVhVU1IKLSNkZWZpbmUg U19JWFVTUiAwMTAwCi0jZW5kaWYgLyogU19JWFVTUiAqLwotI2VuZGlmIC8qIFVOSVggKi8KLQot I2lmZGVmIFNfSVJVU1IKLSNpZmRlZiBTX0lXVVNSCi0jaWZkZWYgU19JWFVTUgotI2RlZmluZSBD S19HUEVSTVMKLSNlbmRpZiAvKiBTX0lYVVNSICovCi0jZW5kaWYgLyogU19JV1VTUiAqLwotI2Vu ZGlmIC8qIFNfSVJVU1IgKi8KLQotc3RhdGljIGNoYXIgZ3Blcm1zWzJdOwotCi0jZW5kaWYgLyog Q0tfR1BFUk1TICovCi0KLXN0YXRpYyBjaGFyIGxwZXJtc1syNF07Ci0KLSNpZmRlZiBDS19QRVJN Uwotc3RhdGljIGNoYXIgeGxwZXJtc1syNF07Ci0KLS8qICBaIFMgRSBUIFAgRSBSIE0gIC0tICBT ZXQgcGVybWlzc2lvbnMgb2YgYSBmaWxlICAqLwotCi1pbnQKLXpzZXRwZXJtKGYsY29kZSkgY2hh ciAqIGY7IGludCBjb2RlOyB7Ci0gICAgaW50IHg7Ci0jaWZkZWYgQ0tfU0NPMzJWNAotICAgIG1v ZGVfdCBtYXNrOwotI2Vsc2UKLSAgICBpbnQgbWFzazsKLSNlbmRpZiAvKiBDS19TQ08zMlY0ICov Ci0gICAgbWFzayA9IGNvZGU7Ci0gICAgaWYgKGluc2VydmVyICYmIGd1ZXN0KSB7Ci0JZGVidWco RjExMCwienNldHBlcm0gZ3Vlc3QiLGYsMCk7Ci0JcmV0dXJuKDApOwotICAgIH0KLSAgICB4ID0g Y2htb2QoZixtYXNrKTsKLSAgICBpZiAoeCA8IDApIHsKLQlkZWJ1ZyhGMTExLCJ6c2V0cGVybSBl cnJvciIsZixlcnJubyk7Ci0JcmV0dXJuKDApOwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJ6c2V0 cGVybSBvayIsZixtYXNrKTsKLSAgICByZXR1cm4oMSk7Ci19Ci0KLS8qICBaIEcgUCBFIFIgTSAg LS0gIEdldCBwZXJtaXNzaW9ucyBvZiBhIGZpbGUgYXMgYW4gb2N0YWwgc3RyaW5nICAqLwotCi1j aGFyICoKLXpncGVybShmKSBjaGFyICpmOyB7Ci0gICAgZXh0ZXJuIGludCBkaXJhY3RpdmU7Ci0g ICAgaW50IHg7IGNoYXIgKnMgPSAoY2hhciAqKXhscGVybXM7Ci0gICAgc3RydWN0IHN0YXQgYnVm OwotICAgIGRlYnVnKEYxMTAsInpncGVybSIsZiwwKTsKLSAgICBpZiAoIWYpIHJldHVybigiLS0t LS0tLS0tLSIpOwotICAgIGlmICghKmYpIHJldHVybigiLS0tLS0tLS0tLSIpOwotCi0jaWZkZWYg Q0tST09UCi0gICAgZGVidWcoRjExMSwiemdwZXJtIHNldHJvb3QiLGNrcm9vdCxja3Jvb3RzZXQp OwotICAgIGlmIChja3Jvb3RzZXQpIGlmICghemlucm9vdChmKSkgewotCWRlYnVnKEYxMTAsInpn cGVybSBzZXRyb290IHZpb2xhdGlvbiIsZiwwKTsKLQlyZXR1cm4oIi0tLS0tLS0tLS0iKTsKLSAg ICB9Ci0jZW5kaWYgLyogQ0tST09UICovCi0KLSNpZmRlZiBVU0VfTFNUQVQKLSAgICBpZiAoZGly YWN0aXZlKQotICAgICAgeCA9IGxzdGF0KGYsJmJ1Zik7Ci0gICAgZWxzZQotI2VuZGlmIC8qIFVT RV9MU1RBVCAqLwotICAgICAgeCA9IHN0YXQoZiwmYnVmKTsKLSAgICBkZWJ1ZyhGMTAxLCJTVEFU IiwiIiw5KTsKLSAgICBpZiAoeCA8IDApCi0gICAgICByZXR1cm4oIi0tLS0tLS0tLS0iKTsKLSAg ICBzcHJpbnRmKHMsIiVvIixidWYuc3RfbW9kZSk7Ci0gICAgZGVidWcoRjExMCwiemdwZXJtIixz LDApOwotICAgIHJldHVybihzKTsKLX0KLQotLyogTGlrZSB6Z3Blcm0oKSBidXQgcmV0dXJucyBw ZXJtaXNzaW9ucyBpbiAibHMgLWwiIHN0cmluZyBmb3JtYXQgKi8KLQotc3RhdGljIGNoYXIgeHNw ZXJtc1syNF07Ci0KLWNoYXIgKgotemlwZXJtKGYpIGNoYXIgKiBmOyB7Ci0gICAgZXh0ZXJuIGlu dCBkaXJhY3RpdmU7Ci0gICAgaW50IHg7IGNoYXIgKnMgPSAoY2hhciAqKXhzcGVybXM7Ci0gICAg c3RydWN0IHN0YXQgYnVmOwotICAgIHVuc2lnbmVkIGludCBwZXJtcyA9IDA7Ci0KLSAgICBkZWJ1 ZyhGMTEwLCJ6aXBlcm0iLGYsMCk7Ci0KLSAgICBpZiAoIWYpIHJldHVybihOVUxMKTsKLSAgICBp ZiAoISpmKSByZXR1cm4oTlVMTCk7Ci0KLSAgICBpZiAoZGlyYWN0aXZlICYmIHpnZnNfbW9kZSAh PSAwKSB7Ci0JcGVybXMgPSB6Z2ZzX21vZGU7CQkvKiB6Z2V0ZnMoKSBhbHJlYWR5IGdvdCB0aGVt ICovCi0gICAgfSBlbHNlIHsKLSNpZmRlZiBVU0VfTFNUQVQKLQlpZiAoZGlyYWN0aXZlKQotCSAg eCA9IGxzdGF0KGYsJmJ1Zik7Ci0JZWxzZQotI2VuZGlmIC8qIFVTRV9MU1RBVCAqLwotCSAgeCA9 IHN0YXQoZiwmYnVmKTsKLQlkZWJ1ZyhGMTAxLCJTVEFUIiwiIiwxMCk7Ci0JaWYgKHggPCAwKQot CSAgcmV0dXJuKCItLS0tLS0tLS0tIik7Ci0JcGVybXMgPSBidWYuc3RfbW9kZTsKLSAgICB9Ci0g ICAgc3dpdGNoIChwZXJtcyAmIFNfSUZNVCkgewotICAgICAgY2FzZSBTX0lGRElSOgotICAgICAg ICAqcysrID0gJ2QnOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgU19JRkNIUjogICAgICAg ICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIgc3BlY2lhbCAqLwotICAgICAgICAqcysrID0gJ2Mn OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgU19JRkJMSzogICAgICAgICAgICAgICAgICAg ICAvKiBCbG9jayBzcGVjaWFsICovCi0gICAgICAgICpzKysgPSAnYic7Ci0gICAgICAgIGJyZWFr OwotICAgICAgY2FzZSBTX0lGUkVHOiAgICAgICAgICAgICAgICAgICAgIC8qIFJlZ3VsYXIgKi8K LSAgICAgICAgKnMrKyA9ICctJzsKLSAgICAgICAgYnJlYWs7Ci0jaWZkZWYgU19JRkxOSwotICAg ICAgY2FzZSBTX0lGTE5LOiAgICAgICAgICAgICAgICAgICAgIC8qIFN5bWJvbGljIGxpbmsgKi8K LSAgICAgICAgKnMrKyA9ICdsJzsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogU19JRkxOSyAq LwotI2lmZGVmIFNfSUZTT0NLCi0gICAgICBjYXNlIFNfSUZTT0NLOiAgICAgICAgICAgICAgICAg ICAgLyogU29ja2V0ICovCi0gICAgICAgICpzKysgPSAncyc7Ci0gICAgICAgIGJyZWFrOwotI2Vu ZGlmIC8qIFNfSUZTT0NLICovCi0jaWZkZWYgU19JRklGTwotI2lmbmRlZiBQbGFuOQotI2lmbmRl ZiBDT0hFUkVOVAotICAgICAgY2FzZSBTX0lGSUZPOiAgICAgICAgICAgICAgICAgICAgIC8qIEZJ Rk8gKi8KLSAgICAgICAgKnMrKyA9ICdwJzsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ09I RVJFTlQgKi8KLSNlbmRpZiAvKiBQbGFuOSAqLwotI2VuZGlmIC8qIFNfSUZJRk8gKi8KLSNpZmRl ZiBTX0lGV0hUCi0gICAgICBjYXNlIFNfSUZXSFQ6ICAgICAgICAgICAgICAgICAgICAgLyogV2hp dGVvdXQgKi8KLSAgICAgICAgKnMrKyA9ICd3JzsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyog U19JRldIVCAqLwotICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVu a25vd24gKi8KLSAgICAgICAgKnMrKyA9ICc/JzsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg IGlmIChwZXJtcyAmIFNfSVJVU1IpICAgICAgICAgIC8qIE93bmVyJ3MgcGVybWlzc2lvbnMgKi8K LSAgICAgICpzKysgPSAncic7Ci0gICAgZWxzZQotICAgICAgKnMrKyA9ICctJzsKLSAgICBpZiAo cGVybXMgJiBTX0lXVVNSKQotICAgICAgKnMrKyA9ICd3JzsKLSAgICBlbHNlCi0gICAgICAqcysr ID0gJy0nOwotICAgIHN3aXRjaCAocGVybXMgJiAoU19JWFVTUiB8IFNfSVNVSUQpKSB7Ci0gICAg ICBjYXNlIDA6Ci0gICAgICAgICpzKysgPSAnLSc7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz ZSBTX0lYVVNSOgotICAgICAgICAqcysrID0gJ3gnOwotICAgICAgICBicmVhazsKLSAgICAgIGNh c2UgU19JU1VJRDoKLSAgICAgICAgKnMrKyA9ICdTJzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj YXNlIFNfSVhVU1IgfCBTX0lTVUlEOgotICAgICAgICAqcysrID0gJ3MnOwotICAgICAgICBicmVh azsKLSAgICB9Ci0gICAgaWYgKHBlcm1zICYgU19JUkdSUCkgICAgICAgICAgLyogR3JvdXAgcGVy bWlzc2lvbnMgKi8KLSAgICAgICpzKysgPSAncic7Ci0gICAgZWxzZQotICAgICAgKnMrKyA9ICct JzsKLSAgICBpZiAocGVybXMgJiBTX0lXR1JQKQotICAgICAgKnMrKyA9ICd3JzsKLSAgICBlbHNl Ci0gICAgICAqcysrID0gJy0nOwotICAgIHN3aXRjaCAocGVybXMgJiAoU19JWEdSUCB8IFNfSVNH SUQpKSB7Ci0gICAgICBjYXNlIDA6Ci0gICAgICAgICpzKysgPSAnLSc7Ci0gICAgICAgIGJyZWFr OwotICAgICAgY2FzZSBTX0lYR1JQOgotICAgICAgICAqcysrID0gJ3gnOwotICAgICAgICBicmVh azsKLSAgICAgIGNhc2UgU19JU0dJRDoKLSAgICAgICAgKnMrKyA9ICdTJzsKLSAgICAgICAgYnJl YWs7Ci0gICAgICBjYXNlIFNfSVhHUlAgfCBTX0lTR0lEOgotICAgICAgICAqcysrID0gJ3MnOwot ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKHBlcm1zICYgU19JUk9USCkgICAgICAgICAg LyogV29ybGQgcGVybWlzc2lvbnMgKi8KLSAgICAgICpzKysgPSAncic7Ci0gICAgZWxzZQotICAg ICAgKnMrKyA9ICctJzsKLSAgICBpZiAocGVybXMgJiBTX0lXT1RIKQotICAgICAgKnMrKyA9ICd3 JzsKLSAgICBlbHNlCi0gICAgICAqcysrID0gJy0nOwotICAgIHN3aXRjaCAoCi0jaWZkZWYgUGxh bjkKLSAgICAgICAgICAgIHBlcm1zICYgKFNfSVhPVEgpCi0jZWxzZQotICAgICAgICAgICAgcGVy bXMgJiAoU19JWE9USCB8IFNfSVNWVFgpCi0jZW5kaWYKLSAgICAgICAgICAgICkgewotICAgICAg Y2FzZSAwOgotICAgICAgICAqcysrID0gJy0nOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug U19JWE9USDoKLSAgICAgICAgKnMrKyA9ICd4JzsKLSAgICAgICAgYnJlYWs7Ci0jaWZuZGVmIFBs YW45Ci0gICAgICBjYXNlIFNfSVNWVFg6Ci0gICAgICAgICpzKysgPSAnVCc7Ci0gICAgICAgIGJy ZWFrOwotICAgICAgY2FzZSBTX0lYT1RIIHwgU19JU1ZUWDoKLSAgICAgICAgKnMrKyA9ICd0JzsK LSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogUGxhbjkgKi8KLSAgICB9Ci0gICAgKnMgPSAnXDAn OwotICAgIGRlYnVnKEYxMTAsInppcGVybSIseHNwZXJtcywwKTsKLSAgICByZXR1cm4oKGNoYXIg Kil4c3Blcm1zKTsKLX0KLQotI2Vsc2UKLQotY2hhciAqCi16Z3Blcm0oZikgY2hhciAqZjsgewot ICAgIHJldHVybigiLS0tLS0tLS0tLSIpOwotfQotY2hhciAqCi16aXBlcm1zKGYpIGNoYXIgKmY7 IHsKLSAgICByZXR1cm4oIi0tLS0tLS0tLS0iKTsKLX0KLSNlbmRpZiAvKiBDS19QRVJNUyAqLwot Ci1pbnQKLXpzYXR0cih4eCkgc3RydWN0IHphdHRyICp4eDsgewotICAgIENLX09GRl9UIGs7IGlu dCB4OwotICAgIHN0cnVjdCBzdGF0IGJ1ZjsKLQotICAgIGsgPSBpZmxlbiAlIDEwMjQ7CQkJLyog RmlsZSBsZW5ndGggaW4gSyAqLwotICAgIGlmIChrKSBrID0gMUw7Ci0gICAgeHgtPmxlbmd0aGsg PSAoaWZsZW4gLyAxMDI0KSArIGs7Ci0gICAgeHgtPnR5cGUubGVuID0gMDsgICAgICAgICAgICAg ICAgICAgLyogRmlsZSB0eXBlIGNhbid0IGJlIGZpbGxlZCBpbiBoZXJlICovCi0gICAgeHgtPnR5 cGUudmFsID0gIiI7Ci0gICAgaWYgKCpuYW1idWYpIHsKLSAgICAgICAgeHgtPmRhdGUudmFsID0g emZjZGF0KG5hbWJ1Zik7ICAvKiBGaWxlIGNyZWF0aW9uIGRhdGUgKi8KLSAgICAgICAgeHgtPmRh dGUubGVuID0gKGludClzdHJsZW4oeHgtPmRhdGUudmFsKTsKLSAgICB9IGVsc2UgewotICAgICAg ICB4eC0+ZGF0ZS5sZW4gPSAwOwotICAgICAgICB4eC0+ZGF0ZS52YWwgPSAiIjsKLSAgICB9Ci0g ICAgeHgtPmNyZWF0b3IubGVuID0gMDsgICAgICAgICAgICAgICAgLyogRmlsZSBjcmVhdG9yICov Ci0gICAgeHgtPmNyZWF0b3IudmFsID0gIiI7Ci0gICAgeHgtPmFjY291bnQubGVuID0gMDsgICAg ICAgICAgICAgICAgLyogRmlsZSBhY2NvdW50ICovCi0gICAgeHgtPmFjY291bnQudmFsID0gIiI7 Ci0gICAgeHgtPmFyZWEubGVuID0gMDsgICAgICAgICAgICAgICAgICAgLyogRmlsZSBhcmVhICov Ci0gICAgeHgtPmFyZWEudmFsID0gIiI7Ci0gICAgeHgtPnBhc3N3b3JkLmxlbiA9IDA7ICAgICAg ICAgICAgICAgLyogQXJlYSBwYXNzd29yZCAqLwotICAgIHh4LT5wYXNzd29yZC52YWwgPSAiIjsK LSAgICB4eC0+Ymxrc2l6ZSA9IC0xTDsgICAgICAgICAgICAgICAgICAvKiBGaWxlIGJsb2Nrc2l6 ZSAqLwotICAgIHh4LT54YWNjZXNzLmxlbiA9IDA7ICAgICAgICAgICAgICAgIC8qIEZpbGUgYWNj ZXNzICovCi0gICAgeHgtPnhhY2Nlc3MudmFsID0gIiI7Ci0gICAgeHgtPmVuY29kaW5nLmxlbiA9 IDA7ICAgICAgICAgICAgICAgLyogVHJhbnNmZXIgc3ludGF4ICovCi0gICAgeHgtPmVuY29kaW5n LnZhbCA9IDA7Ci0gICAgeHgtPmRpc3AubGVuID0gMDsgICAgICAgICAgICAgICAgICAgLyogRGlz cG9zaXRpb24gdXBvbiBhcnJpdmFsICovCi0gICAgeHgtPmRpc3AudmFsID0gIiI7Ci0gICAgeHgt Pmxwcm90ZWN0LmxlbiA9IDA7ICAgICAgICAgICAgICAgLyogTG9jYWwgcHJvdGVjdGlvbiAqLwot ICAgIHh4LT5scHJvdGVjdC52YWwgPSAiIjsKLSAgICB4eC0+Z3Byb3RlY3QubGVuID0gMDsgICAg ICAgICAgICAgICAvKiBHZW5lcmljIHByb3RlY3Rpb24gKi8KLSAgICB4eC0+Z3Byb3RlY3QudmFs ID0gIiI7Ci0gICAgeCA9IC0xOwotICAgIGlmICgqbmFtYnVmKSB4ID0gc3RhdChuYW1idWYsJmJ1 Zik7Ci0gICAgZGVidWcoRjEwMSwiU1RBVCIsIiIsMTEpOwotICAgIGlmICh4ID49IDApIHsKLSAg ICAgICAgZGVidWcoRjExMSwienNhdHRyIGJ1Zi5zdF9tb2RlICYgMDc3NyIsbmFtYnVmLGJ1Zi5z dF9tb2RlICYgMDc3Nyk7Ci0gICAgICAgIC8qIFVOSVggZmlsZW1vZGUgYXMgYW4gb2N0YWwgc3Ry aW5nIHdpdGhvdXQgZmlsZXR5cGUgYml0cyAqLwotICAgICAgICBzcHJpbnRmKGxwZXJtcywiJW8i LGJ1Zi5zdF9tb2RlICYgMDc3Nyk7Ci0gICAgICAgIHh4LT5scHJvdGVjdC5sZW4gPSAoaW50KXN0 cmxlbihscGVybXMpOwotICAgICAgICB4eC0+bHByb3RlY3QudmFsID0gKGNoYXIgKilscGVybXM7 Ci0gICAgICAgIHggPSAwOwotI2lmZGVmIENLX0dQRVJNUwotICAgICAgICAvKiBHZW5lcmljIHBl cm1pc3Npb25zIG9ubHkgaWYgd2UgaGF2ZSBzdGF0Lmggc3ltYm9scyBkZWZpbmVkICovCi0gICAg ICAgIGlmIChidWYuc3RfbW9kZSAmIFNfSVJVU1IpIHggfD0gMTsgICAgICAvKiBSZWFkICovCi0g ICAgICAgIGlmIChidWYuc3RfbW9kZSAmIFNfSVdVU1IpIHggfD0gKDIrMTYpOyAvKiBXcml0ZSBh bmQgRGVsZXRlICovCi0gICAgICAgIGlmIChidWYuc3RfbW9kZSAmIFNfSVhVU1IpIHggfD0gNDsg ICAgICAvKiBFeGVjdXRlICovCi0gICAgICAgIGdwZXJtc1swXSA9IHRvY2hhcih4KTsKLSAgICAg ICAgZ3Blcm1zWzFdID0gTlVMOwotICAgICAgICB4eC0+Z3Byb3RlY3QubGVuID0gMTsKLSAgICAg ICAgeHgtPmdwcm90ZWN0LnZhbCA9IChjaGFyICopZ3Blcm1zOwotI2VuZGlmIC8qIENLX0dQRVJN UyAqLwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJ6c2F0dHIgbHBlcm1zIix4eC0+bHByb3RlY3Qu dmFsLHh4LT5scHJvdGVjdC5sZW4pOwotICAgIGRlYnVnKEYxMTEsInpzYXR0ciBncGVybXMiLHh4 LT5ncHJvdGVjdC52YWwseHgtPmdwcm90ZWN0Lmxlbik7Ci0gICAgeHgtPnN5c3RlbWlkLnZhbCA9 ICJVMSI7ICAgICAgICAgICAgLyogVTEgPSBVTklYICovCi0gICAgeHgtPnN5c3RlbWlkLmxlbiA9 IDI7ICAgICAgICAgICAgICAgLyogU3lzdGVtIElEICovCi0gICAgeHgtPnJlY2ZtLmxlbiA9IDA7 ICAgICAgICAgICAgICAgICAgLyogUmVjb3JkIGZvcm1hdCAqLwotICAgIHh4LT5yZWNmbS52YWwg PSAiIjsKLSAgICB4eC0+c3lzcGFyYW0ubGVuID0gMDsgICAgICAgICAgICAgICAvKiBTeXN0ZW0t ZGVwZW5kZW50IHBhcmFtZXRlcnMgKi8KLSAgICB4eC0+c3lzcGFyYW0udmFsID0gIiI7Ci0gICAg eHgtPmxlbmd0aCA9IGlmbGVuOyAgICAgICAgICAgICAgICAgLyogTGVuZ3RoICovCi0gICAgcmV0 dXJuKDApOwotfQotCi0vKiBaIEYgQyBEIEEgVCAgLS0gIEdldCBmaWxlIGNyZWF0aW9uIGRhdGUg Ki8KLS8qCi0gIENhbGwgd2l0aCBwb2ludGVyIHRvIGZpbGVuYW1lLgotICBPbiBzdWNjZXNzLCBy ZXR1cm5zIHBvaW50ZXIgdG8gbW9kaWZpY2F0aW9uIGRhdGUgaW4geXl5eW1tZGQgaGg6bW06c3Mg Zm9ybWF0LgotICBPbiBmYWlsdXJlLCByZXR1cm5zIHBvaW50ZXIgdG8gbnVsbCBzdHJpbmcuCi0q Lwotc3RhdGljIGNoYXIgZGF0YnVmWzQwXTsKLQotY2hhciAqCi0jaWZkZWYgQ0tfQU5TSUMKLXpk dHN0cih0aW1lX3QgdGltZWFyZykKLSNlbHNlCi16ZHRzdHIodGltZWFyZykgdGltZV90IHRpbWVh cmc7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHpkdHN0ciAqLyB7Ci0jaWZuZGVmIFRJTUVT VEFNUAotICAgIHJldHVybigiIik7Ci0jZWxzZQotICAgIHN0cnVjdCB0bSAqIHRpbWVfc3RhbXA7 Ci0gICAgc3RydWN0IHRtICogbG9jYWx0aW1lKCk7Ci0gICAgaW50IHl5LCBzczsKLQotICAgIGRl YnVnKEYxMDEsInpkdHN0ciB0aW1lYXJnIiwiIix0aW1lYXJnKTsKLSAgICBpZiAodGltZWFyZyA8 IDApCi0gICAgICByZXR1cm4oIiIpOwotICAgIHRpbWVfc3RhbXAgPSBsb2NhbHRpbWUoJih0aW1l YXJnKSk7Ci0gICAgaWYgKCF0aW1lX3N0YW1wKSB7Ci0gICAgICAgIGRlYnVnKEYxMDAsImxvY2Fs dGltZSByZXR1cm5zIG51bGwiLCIiLDApOwotICAgICAgICByZXR1cm4oIiIpOwotICAgIH0KLS8q Ci0gIFdlIGFzc3VtZSB0aGF0IHRtX3llYXIgaXMgQUxXQVlTIHllYXJzIHNpbmNlIDE5MDAuCi0g IEFueSBwbGF0Zm9ybSB3aGVyZSB0aGlzIGlzIG5vdCB0aGUgY2FzZSB3aWxsIGhhdmUgcHJvYmxl bXMKLSAgc3RhcnRpbmcgaW4gMjAwMC4KLSovCi0gICAgeXkgPSB0aW1lX3N0YW1wLT50bV95ZWFy OyAgICAgICAgICAgLyogWWVhciAtIDE5MDAgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ6ZHRzdHIgdG1f eWVhciIsIiIsdGltZV9zdGFtcC0+dG1feWVhcik7Ci0gICAgaWYgKHl5ID4gMTAwMCkgewotICAg ICAgICBkZWJ1ZyhGMTAxLCJ6c3RyZHQgWUVBUi0yMDAwIEFMRVJUIDE6IGxvY2FsdGltZSB5ZWFy IiwiIix5eSk7Ci0gICAgfQotICAgIHl5ICs9IDE5MDA7Ci0gICAgZGVidWcoRjEwMSwiemRhdHN0 ciB5ZWFyIiwiIix5eSk7Ci0KLSAgICBpZiAodGltZV9zdGFtcC0+dG1fbW9uICA8IDAgfHwgdGlt ZV9zdGFtcC0+dG1fbW9uICA+IDExKQotICAgICAgcmV0dXJuKCIiKTsKLSAgICBpZiAodGltZV9z dGFtcC0+dG1fbWRheSA8IDAgfHwgdGltZV9zdGFtcC0+dG1fbWRheSA+IDMxKQotICAgICAgcmV0 dXJuKCIiKTsKLSAgICBpZiAodGltZV9zdGFtcC0+dG1faG91ciA8IDAgfHwgdGltZV9zdGFtcC0+ dG1faG91ciA+IDIzKQotICAgICAgcmV0dXJuKCIiKTsKLSAgICBpZiAodGltZV9zdGFtcC0+dG1f bWluICA8IDAgfHwgdGltZV9zdGFtcC0+dG1fbWluICA+IDU5KQotICAgICAgcmV0dXJuKCIiKTsK LSAgICBzcyA9IHRpbWVfc3RhbXAtPnRtX3NlYzsgICAgICAgICAgICAvKiBTZWNvbmRzICovCi0g ICAgaWYgKHNzIDwgMCB8fCBzcyAgPiA1OSkgICAgICAgICAgICAgLyogU29tZSBzeXN0ZW1zIGdp dmUgYSBCSUcgbnVtYmVyICovCi0gICAgICBzcyA9IDA7Ci0gICAgc3ByaW50ZihkYXRidWYsCi0j aWZkZWYgcGRwMTEKLS8qIEZvciBzb21lIHJlYXNvbiwgMi4xeCBCU0Qgc3ByaW50ZiBnZXRzIHRo ZSBsYXN0IGZpZWxkIHdyb25nLiAqLwotICAgICAgICAgICAgIiUwNGQlMDJkJTAyZCAlMDJkOiUw MmQ6MDAiLAotI2Vsc2UKLSAgICAgICAgICAgICIlMDRkJTAyZCUwMmQgJTAyZDolMDJkOiUwMmQi LAotI2VuZGlmIC8qIHBkcDExICovCi0gICAgICAgICAgICB5eSwKLSAgICAgICAgICAgIHRpbWVf c3RhbXAtPnRtX21vbiArIDEsCi0gICAgICAgICAgICB0aW1lX3N0YW1wLT50bV9tZGF5LAotICAg ICAgICAgICAgdGltZV9zdGFtcC0+dG1faG91ciwKLSAgICAgICAgICAgIHRpbWVfc3RhbXAtPnRt X21pbgotI2lmbmRlZiBwZHAxMQotICAgICAgICAgICAgLCBzcwotI2VuZGlmIC8qIHBkcDExICov Ci0gICAgICAgICAgICApOwotICAgIHl5ID0gKGludClzdHJsZW4oZGF0YnVmKTsKLSAgICBkZWJ1 ZyhGMTExLCJ6ZGF0c3RyIixkYXRidWYseXkpOwotICAgIGlmICh5eSA+IDE3KSBkYXRidWZbMTdd ID0gJ1wwJzsKLSAgICByZXR1cm4oZGF0YnVmKTsKLSNlbmRpZiAvKiBUSU1FU1RBTVAgKi8KLX0K LQotY2hhciAqCi16ZmNkYXQobmFtZSkgY2hhciAqbmFtZTsgewotI2lmZGVmIFRJTUVTVEFNUAot ICAgIHN0cnVjdCBzdGF0IGJ1ZmZlcjsKLSAgICBleHRlcm4gaW50IGRpcmFjdGl2ZTsKLSAgICB1 bnNpZ25lZCBpbnQgbXRpbWU7Ci0gICAgaW50IHg7Ci0gICAgY2hhciAqIHM7Ci0KLSAgICBpZiAo IW5hbWUpCi0gICAgICByZXR1cm4oIiIpOwotICAgIHMgPSBuYW1lOwotICAgIGlmICghKnMpCi0g ICAgICByZXR1cm4oIiIpOwotCi0jaWZkZWYgQ0tST09UCi0gICAgZGVidWcoRjExMSwiemZjZGF0 IHNldHJvb3QiLGNrcm9vdCxja3Jvb3RzZXQpOwotICAgIGlmIChja3Jvb3RzZXQpIGlmICghemlu cm9vdChuYW1lKSkgewotCWRlYnVnKEYxMTAsInpmY2RhdCBzZXRyb290IHZpb2xhdGlvbiIsbmFt ZSwwKTsKLQlyZXR1cm4oIiIpOwotICAgIH0KLSNlbmRpZiAvKiBDS1JPT1QgKi8KLQotI2lmZGVm IERUSUxERQotICAgIGlmICgqcyA9PSAnficpIHsKLSAgICAgICAgcyA9IHRpbGRlX2V4cGFuZChz KTsKLSAgICAgICAgaWYgKCFzKSBzID0gIiI7Ci0gICAgICAgIGlmICghKnMpIHMgPSBuYW1lOwot ICAgIH0KLSNlbmRpZiAvKiBEVElMREUgKi8KLQotICAgIGRhdGJ1ZlswXSA9ICdcMCc7Ci0gICAg eCA9IDA7Ci0gICAgZGVidWcoRjExMSwiemZjZGF0IixzLGRpcmFjdGl2ZSk7Ci0KLSAgICBpZiAo ZGlyYWN0aXZlICYmIHpnZnNfbXRpbWUpIHsKLQltdGltZSA9IHpnZnNfbXRpbWU7Ci0gICAgfSBl bHNlIHsKLSNpZmRlZiBVU0VfTFNUQVQKLQlpZiAoZGlyYWN0aXZlKSB7Ci0JICAgIHggPSBsc3Rh dChzLCZidWZmZXIpOwotCSAgICBkZWJ1ZyhGMTAxLCJTVEFUIiwiIiwxMik7Ci0JICAgIGRlYnVn KEYxMDEsInpmY2RhdCBsc3RhdCIsIiIseCk7Ci0JfSBlbHNlIHsKLSNlbmRpZiAvKiBVU0VfTFNU QVQgKi8KLQkgICAgeCA9IHN0YXQocywmYnVmZmVyKTsKLQkgICAgZGVidWcoRjEwMSwiU1RBVCIs IiIsMTMpOwotCSAgICBkZWJ1ZyhGMTAxLCJ6ZmNkYXQgc3RhdCIsIiIseCk7Ci0jaWZkZWYgVVNF X0xTVEFUCi0JfQotI2VuZGlmIC8qIFVTRV9MU1RBVCAqLwotCWlmICh4ICE9IDApIHsKLSNpZmRl ZiBVU0VfTFNUQVQKLQkgICAgZGVidWcoRjExMSwiemZjZGF0IHN0YXQgZmFpbGVkIixzLGVycm5v KTsKLSNlbHNlCi0JICAgIGRlYnVnKEYxMTEsInpmY2RhdCBsc3RhdCBmYWlsZWQiLHMsZXJybm8p OwotI2VuZGlmIC8qIFVTRV9MU1RBVCAqLwotCSAgICByZXR1cm4oIiIpOwotCX0KLQlkZWJ1ZyhG MTAxLCJ6ZmNkYXQgYnVmZmVyLnN0X210aW1lIiwiIixidWZmZXIuc3RfbXRpbWUpOwotCW10aW1l ID0gYnVmZmVyLnN0X210aW1lOwotICAgIH0KLSAgICByZXR1cm4oemR0c3RyKG10aW1lKSk7Ci0j ZWxzZQotICAgIHJldHVybigiIik7Ci0jZW5kaWYgLyogVElNRVNUQU1QICovCi19Ci0KLSNpZm5k ZWYgTk9USU1FU1RBTVAKLQotLyogWiBTIFQgUiBEIFQgIC0tICBDb252ZXJ0cyBsb2NhbCBkYXRl IHN0cmluZyB0byBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiAqLwotLyoKLSAgSW4gb3VyIGNhc2Ug KFVOSVgpIHRoaXMgaXMgc2Vjb25kcyBzaW5jZSBtaWRuaXRlIDEgSmFuIDE5NzAgVVRDLAotICBz dWl0YWJsZSBmb3IgY29tcGFyaXNvbiB3aXRoIFVOSVggZmlsZSBkYXRlcy4gIEFzIGZhciBhcyBJ IGtub3csIHRoZXJlIGlzCi0gIG5vIGxpYnJhcnkgb3Igc3lzdGVtIGNhbGwgLS0gYXQgbGVhc3Qg bm90aGluZyByZWFzb25hYmx5IHBvcnRhYmxlIC0tIHRvCi0gIGNvbnZlcnQgbG9jYWwgdGltZSB0 byBVVEMuCi0qLwotdGltZV90Ci16c3RyZHQoZGF0ZSxsZW4pIGNoYXIgKiBkYXRlOyBpbnQgbGVu OyB7Ci0jaWZkZWYgTV9VTklYCi0vKgotICBTQ08gVU5JWCAzLjJ2Mi4wIGFuZCBPRFQgMi4wIGxh Y2sgcHJvdG90eXBlcyBmb3IgZnRpbWUoKS4KLSAgT0RUIDMuMCAoMy4ydjQuMiBPUykgaGFzIGEg cHJvdG90eXBlLCB3aGljaCBtYXkgdmFyeSBpbgotICBkZXBlbmRlbmNlIG9uIHRoZSBYUEc0IHN1 cHBsZW1lbnQgcHJlc2VuY2UuICBTbyBhbHdheXMgdXNlCi0gIHdoYXQgdGhlIHN5c3RlbSBoZWFk ZXIgZmlsZSBzdXBwbGllcyBpbiBPRFQgMy4wLi4uCi0qLwotI2lmbmRlZiBPRFQzMAotI2lmbmRl ZiBfU0NPX0RTCi0gICAgZXh0ZXJuIHZvaWQgZnRpbWUoKTsgIC8qIGV4dGVybiB2b2lkIGZ0aW1l KHN0cnVjdCB0aW1lYiAqKSAqLwotI2VuZGlmIC8qIF9TQ09fRFMgKi8KLSNlbmRpZiAvKiBPRFQz MCAqLwotI2Vsc2UKLSNpZm5kZWYgTV9YRU5JWAotICAgIGV4dGVybiBpbnQgZnRpbWUoKTsKLSNl bmRpZiAvKiBNX1hFTklYICovCi0jZW5kaWYgLyogTV9VTklYICovCi0gICAgZXh0ZXJuIHN0cnVj dCB0bSAqIGxvY2FsdGltZSgpOwotCi0gICAgLyogQW5kIHRoaXMgc2hvdWxkIGhhdmUgYmVlbiBk ZWNsYXJlZCBhbHdheXMgdGhyb3VnaCBhIGhlYWRlciBmaWxlICovCi0jaWZkZWYgSFBVWDEwCi0g ICAgdGltZV90IHRteDsKLSAgICBsb25nIGRheXM7Ci0jZWxzZQotI2lmZGVmIEJTRDQ0Ci0gICAg dGltZV90IHRteDsKLSAgICBsb25nIGRheXM7Ci0jZWxzZQotICAgIGxvbmcgdG14LCBkYXlzOwot I2VuZGlmIC8qIEJTRDQ0ICovCi0jZW5kaWYgLyogSFBVWDEwICovCi0gICAgaW50IGksIG4sIGlz bGVhcHllYXI7Ci0gICAgICAgICAgICAgICAgICAgLyogICAgICAgSiAgRiAgTSAgQSAgIE0gICBK ICAgSiAgIEEgICBTICAgTyAgIE4gICBEICAgKi8KLSAgICAgICAgICAgICAgICAgICAvKiAgICAg IDMxIDI4IDMxIDMwICAzMSAgMzAgIDMxICAzMSAgMzAgIDMxICAzMCAgMzEgICAqLwotICAgIHN0 YXRpYwotICAgIGludCBtb250aGRheXMgWzEzXSA9IHsgIDAsMCwzMSw1OSw5MCwxMjAsMTUxLDE4 MSwyMTIsMjQzLDI3MywzMDQsMzM0IH07Ci0gICAgY2hhciBzWzVdOwotICAgIHN0cnVjdCB0bSAq dGltZV9zdGFtcDsKLQotI2lmZGVmIEJTRDQ0Ci0gICAgc3RydWN0IHRpbWV2YWwgdHBbMl07Ci0g ICAgbG9uZyB4dGltZXpvbmUgPSAwTDsKLSNlbHNlCi0jaWZkZWYgVjcKLSAgICBzdHJ1Y3QgdXRp bWJ1ZiB7Ci0gICAgICB0aW1lX3QgdGltZXBbMl07ICAgICAgICAgIC8qIE5ldyBhY2Nlc3MgYW5k IG1vZGlmaWNhdG9uIHRpbWUgKi8KLSAgICB9IHRwOwotICAgIGNoYXIgKnR6OwotICAgIGxvbmcg dGltZXpvbmU7ICAgICAgICAgICAgICAvKiBJbiBjYXNlIHRpbWV6b25lIG5vdCBkZWZpbmVkIGlu IC5oIGZpbGUgKi8KLSNlbHNlCi0jaWZkZWYgU1lTVVRJTUVICi0gICAgc3RydWN0IHV0aW1idWYg dHA7Ci0jZWxzZQotICAgIHN0cnVjdCB1dGltYnVmIHsKLSAgICAgICAgdGltZV90IGF0aW1lOwot ICAgICAgICB0aW1lX3QgbXRpbWU7Ci0gICAgfSB0cDsKLSNlbmRpZiAvKiBTWVNVVElNRUggKi8K LSNlbmRpZiAvKiBWNyAqLwotI2VuZGlmIC8qIEJTRDQ0ICovCi0KLSNpZmRlZiBBTllCU0QKLSAg ICBsb25nIHRpbWV6b25lID0gMEw7Ci0gICAgc3RhdGljIHN0cnVjdCB0aW1lYiB0YnA7Ci0jZW5k aWYgLyogQU5ZQlNEICovCi0KLSNpZmRlZiBCRUJPWAotICAgIGxvbmcgdGltZXpvbmUgPSAwTDsK LSNlbmRpZiAvKiBCRUJPWCAqLwotCi0gICAgZGVidWcoRjExMSwienN0cmR0IixkYXRlLGxlbik7 Ci0KLSAgICBpZiAoKGxlbiA9PSAwKQotICAgICAgICB8fCAobGVuICE9IDE3KQotICAgICAgICB8 fCAoZGF0ZVs4XSAhPSAnICcpCi0gICAgICAgIHx8IChkYXRlWzExXSAhPSAnOicpCi0gICAgICAg IHx8IChkYXRlWzE0XSAhPSAnOicpICkgewotICAgICAgICBkZWJ1ZyhGMTExLCJCYWQgY3JlYXRp b24gZGF0ZSAiLGRhdGUsbGVuKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgZGVi dWcoRjExMSwienN0cmR0IGRhdGUgY2hlY2sgMSIsZGF0ZSxsZW4pOwotICAgIGZvcihpID0gMDsg aSA8IDg7IGkrKykgewotICAgICAgICBpZiAoIWlzZGlnaXQoZGF0ZVtpXSkpIHsKLSAgICAgICAg ICAgIGRlYnVnKEYxMTEsIkJhZCBjcmVhdGlvbiBkYXRlICIsZGF0ZSxsZW4pOwotICAgICAgICAg ICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJ6c3RyZHQg ZGF0ZSBjaGVjayAyIixkYXRlLGxlbik7Ci0gICAgaSsrOwotCi0gICAgZm9yICg7IGkgPCAxNjsg aSArPSAzKSB7Ci0gICAgICAgIGlmICgoIWlzZGlnaXQoZGF0ZVtpXSkpIHx8ICghaXNkaWdpdChk YXRlW2kgKyAxXSkpKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJCYWQgY3JlYXRpb24gZGF0 ZSAiLGRhdGUsbGVuKTsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLSAgICB9 Ci0gICAgZGVidWcoRjExMSwienN0cmR0IGRhdGUgY2hlY2sgMyIsZGF0ZSxsZW4pOwotCi0KLSNp ZmRlZiBDT01NRU5UIC8qIHdhcyBCU0Q0NCAqLwotLyoKLSAgIG1hbiBnZXR0aW1lb2ZkYXkgb24g QlNESSAzLjEgc2F5czoKLSAgICJUaGUgdGltZXpvbmUgZmllbGQgaXMgbm8gbG9uZ2VyIHVzZWQ7 IHRpbWV6b25lIGluZm9ybWF0aW9uIGlzIHN0b3JlZCBvdXQtCi0gICAgIHNpZGUgdGhlIGtlcm5l bC4gIFNlZSBjdGltZSgzKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iICBTbyB0aGlzIGNodW5rIG9m Ci0gICBjb2RlIGlzIGVmZmVjdGl2ZWx5IGEgbm8tb3AsIGF0IGxlYXN0IGluIEJTREkgMy54Lgot Ki8KLSAgICB7Ci0gICAgICAgIGludCB4OwotICAgICAgICBzdHJ1Y3QgdGltZXpvbmUgdHpwOwot ICAgICAgICB4ID0gZ2V0dGltZW9mZGF5KE5VTEwsICZ0enApOwotICAgICAgICBkZWJ1ZyhGMTAx LCJ6c3RyZHQgQlNENDQgZ2V0dGltZW9mZGF5IiwiIix4KTsKLSAgICAgICAgaWYgKHggPiAtMSkK LSAgICAgICAgICB4dGltZXpvbmUgPSB0enAudHpfbWludXRlc3dlc3QgKiA2MEw7Ci0gICAgICAg IGVsc2UKLSAgICAgICAgICB4dGltZXpvbmUgPSAwTDsKLSAgICAgICAgZGVidWcoRjEwMSwienN0 cmR0IEJTRDQ0IHRpbWV6b25lIiwiIix4dGltZXpvbmUpOwotICAgIH0KLSNlbHNlCi0jaWZkZWYg QU5ZQlNECi0gICAgZGVidWcoRjEwMCwienN0cmR0IEJTRCBjYWxsaW5nIGZ0aW1lIiwiIiwwKTsK LSAgICBmdGltZSgmdGJwKTsKLSAgICBkZWJ1ZyhGMTAwLCJ6c3RyZHQgQlNEIGJhY2sgZnJvbSBm dGltZSIsIiIsMCk7Ci0gICAgdGltZXpvbmUgPSB0YnAudGltZXpvbmUgKiA2MEw7Ci0gICAgZGVi dWcoRjEwMSwienN0cmR0IEJTRCB0aW1lem9uZSIsIiIsdGltZXpvbmUpOwotI2Vsc2UKLSNpZmRl ZiBTVk9SUE9TSVgKLSAgICB0enNldCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBT ZXQgdGltZXpvbmUgKi8KLSNlbHNlCi0jaWZkZWYgVjcKLSAgICBpZiAoKHR6ID0gZ2V0ZW52KCJU WiIpKSA9PSBOVUxMKQotICAgICAgdGltZXpvbmUgPSAwOyAgICAgICAgICAgICAgICAgICAgIC8q IFVUQy9HTVQgKi8KLSAgICBlbHNlCi0gICAgICB0aW1lem9uZSA9IGF0b2koJnR6WzNdKTsgICAg ICAgICAgLyogU2V0ICd0aW1lem9uZScuICovCi0gICAgdGltZXpvbmUgKj0gNjBMOwotI2VuZGlm IC8qIFY3ICovCi0jZW5kaWYgLyogU1ZPUlBPU0lYICovCi0jZW5kaWYgLyogQU5ZQlNEICovCi0j ZW5kaWYgLyogQ09NTUVOVCAod2FzIEJTRDQ0KSAqLwotCi0gICAgZGVidWcoRjEwMCwienN0cmR0 IHNvIGZhciBzbyBnb29kIiwiIiwwKTsKLQotICAgIHNbNF0gPSAnXDAnOwotICAgIGZvciAoaSA9 IDA7IGkgPCA0OyBpKyspICAgICAgICAgICAgIC8qIEZpeCB0aGUgeWVhciAqLwotICAgICAgc1tp XSA9IGRhdGVbaV07Ci0KLSAgICBuID0gYXRvaShzKTsKLSAgICBkZWJ1ZyhGMTExLCJ6c3RyZHQg eWVhciIscyxuKTsKLSAgICBpZiAobiA8IDE5NzApIHsKLSAgICAgICAgZGVidWcoRjEwMCwienN0 cmR0IGZhaWxzIC0geWVhciIsIiIsbik7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotCi0v KiAgUHJldmlvdXMgeWVhcidzIGxlYXAgZGF5cy4gIFRoaXMgd29uJ3Qgd29yayBhZnRlciB5ZWFy IDIxMDAuICovCi0KLSAgICBpc2xlYXB5ZWFyID0gKCggbiAlIDQgPT0gMCAmJiBuICUgMTAwICE9 MCkgfHwgbiAlIDQwMCA9PSAwKTsKLSAgICBkYXlzID0gKGxvbmcpIChuIC0gMTk3MCkgKiAzNjU7 Ci0gICAgZGF5cyArPSAobiAtIDE5NjggLSAxKSAvIDQgLSAobiAtIDE5MDAgLSAxKSAvIDEwMCAr IChuIC0gMTYwMCAtIDEpIC8gNDAwOwotCi0gICAgc1syXSA9ICdcMCc7Ci0KLSAgICBmb3IgKGkg PSA0OyBpIDwgMTY7IGkgKz0gMikgewotICAgICAgICBzWzBdID0gZGF0ZVtpXTsKLSAgICAgICAg c1sxXSA9IGRhdGVbaSArIDFdOwotICAgICAgICBuID0gYXRvaShzKTsKLSAgICAgICAgc3dpdGNo IChpKSB7Ci0gICAgICAgICAgY2FzZSA0OiAgICAgICAgICAgICAgICAgICAgICAgLyogTU06IG1v bnRoICovCi0gICAgICAgICAgICBpZiAoKG4gPCAxICkgfHwgKCBuID4gMTIpKSB7Ci0gICAgICAg ICAgICAgICAgZGVidWcoRjExMSwienN0cmR0IDQgYmFkIGRhdGUgIixkYXRlLGxlbik7Ci0gICAg ICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRheXMg Kz0gbW9udGhkYXlzIFtuXTsKLSAgICAgICAgICAgIGlmIChpc2xlYXB5ZWFyICYmIG4gPiAyKQot ICAgICAgICAgICAgICArK2RheXM7Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAg IGNhc2UgNjogICAgICAgICAgICAgICAgICAgICAgIC8qIEREOiBkYXkgKi8KLSAgICAgICAgICAg IGlmICgobiA8IDEgKSB8fCAoIG4gPiAzMSkpIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEx LCJ6c3RyZHQgNiBiYWQgZGF0ZSAiLGRhdGUsbGVuKTsKLSAgICAgICAgICAgICAgICByZXR1cm4o LTEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdG14ID0gKGRheXMgKyBuIC0gMSkgKiAy NEwgKiA2MEwgKiA2MEw7Ci0gICAgICAgICAgICBpKys7ICAgICAgICAgICAgICAgICAgICAgICAg LyogU2tpcCB0aGUgc3BhY2UgKi8KLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAg Y2FzZSA5OiAgICAgICAgICAgICAgICAgICAgICAgLyogaGg6IGhvdXIgKi8KLSAgICAgICAgICAg IGlmICgobiA8IDAgKSB8fCAoIG4gPiAyMykpIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEx LCJ6c3RyZHQgOSBiYWQgZGF0ZSAiLGRhdGUsbGVuKTsKLSAgICAgICAgICAgICAgICByZXR1cm4o LTEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdG14ICs9IG4gKiA2MEwgKiA2MEw7Ci0g ICAgICAgICAgICBpKys7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU2tpcCB0aGUgY29sb24g Ki8KLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgY2FzZSAxMjogICAgICAgICAg ICAgICAgICAgICAgLyogbW06IG1pbnV0ZSAqLwotICAgICAgICAgICAgaWYgKChuIDwgMCApIHx8 ICggbiA+IDU5KSkgewotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsInpzdHJkdCAxMiBiYWQg ZGF0ZSAiLGRhdGUsbGVuKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAg ICAgfQotI2lmZGVmIENPTU1FTlQgLyogKHdhcyBCU0Q0NCkgKi8gICAgICAgIC8qIENvcnJlY3Qg Zm9yIHRpbWUgem9uZSAqLwotICAgICAgICAgICAgdG14ICs9IHh0aW1lem9uZTsKLSAgICAgICAg ICAgIGRlYnVnKEYxMDEsInpzdHJkdCBCU0Q0NCB0bXgiLCIiLHRteCk7Ci0jZWxzZQotI2lmZGVm IEFOWUJTRAotICAgICAgICAgICAgdG14ICs9IHRpbWV6b25lOwotI2Vsc2UKLSNpZm5kZWYgQ09O VkVYOSAvKiBEb24ndCB5ZXQga25vdyBob3cgdG8gZG8gdGhpcyBoZXJlICovCi0jaWZkZWYgdWx0 cml4Ci0gICAgICAgICAgICB0bXggKz0gKGxvbmcpIHRpbWV6b25lOwotI2Vsc2UKLSNpZmRlZiBQ bGFuOQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGV4dGVybiB0aW1lX3QgdHpvZmZz ZXQ7Ci0gICAgICAgICAgICAgICAgdG14ICs9IHR6b2Zmc2V0OwotICAgICAgICAgICAgfQotI2Vs c2UKLSNpZm5kZWYgQlNENDQKLSNpZm5kZWYgTk9USU1FWk9ORQotICAgICAgICAgICAgdG14ICs9 IHRpbWV6b25lOwotI2VuZGlmCS8qIE5PVElNRVpPTkUgKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwot I2VuZGlmIC8qIFBsYW45ICovCi0jZW5kaWYgLyogdWx0cml4ICovCi0jZW5kaWYgLyogQ09OVkVY OSAqLwotI2VuZGlmIC8qIEFOWUJTRCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKHdhcyBCU0Q0NCkg Ki8KLSAgICAgICAgICAgIHRteCArPSBuICogNjBMOwotICAgICAgICAgICAgaSsrOyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFNraXAgdGhlIGNvbG9uICovCi0gICAgICAgICAgICBjb250aW51 ZTsKLQotICAgICAgICAgIGNhc2UgMTU6ICAgICAgICAgICAgICAgICAgICAgIC8qIHNzOiBzZWNv bmQgKi8KLSAgICAgICAgICAgIGlmICgobiA8IDAgKSB8fCAoIG4gPiA1OSkpIHsKLSAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTExLCJ6c3RyZHQgMTUgYmFkIGRhdGUgIixkYXRlLGxlbik7Ci0gICAg ICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRteCAr PSBuOwotICAgICAgICB9Ci0gICAgICAgIHRpbWVfc3RhbXAgPSBsb2NhbHRpbWUoJnRteCk7Ci0g ICAgICAgIGRlYnVnKEYxMDEsInpzdHJkdCB0bXggMSIsIiIsdG14KTsKLSAgICAgICAgaWYgKCF0 aW1lX3N0YW1wKQotICAgICAgICAgIHJldHVybigtMSk7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAg ICAvKiBXaHkgd2FzIHRoaXMgaGVyZT8gKi8KLSAgICAgICAgdGltZV9zdGFtcCA9IGxvY2FsdGlt ZSgmdG14KTsKLSAgICAgICAgZGVidWcoRjEwMSwienN0cmR0IHRteCAyIiwiIix0bXgpOwotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLSNpZmRlZiBCU0Q0NAotICAgICAgICB7ICAgLyogTmV3IHRvIDcu MCAtIFdvcmtzIGluIGF0IGF0IGxlYXN0IEJTREkgMy4xIGFuZCBGcmVlQlNEIDIuMi43ICovCi0g ICAgICAgICAgICBsb25nIHp6OwotICAgICAgICAgICAgenogPSB0aW1lX3N0YW1wLT50bV9nbXRv ZmY7IC8qIFNlY29uZHMgYXdheSBmcm9tIFplcm8gTWVyaWRpYW4gKi8KLSAgICAgICAgICAgIGRl YnVnKEYxMDEsInpzdHJkdCBCU0Q0NCB0bV9nbXRvZmYiLCIiLHp6KTsKLSAgICAgICAgICAgIHRt eCAtPSB6ejsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsInpzdHJkdCBCU0Q0NCB0bXggMyAoR01U KSIsIiIsdG14KTsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgLyoKLSAgICAgICAgICAgRGF5 bGlnaHQgU2F2aW5ncyBUaW1lIGFkanVzdG1lbnQuCi0gICAgICAgICAgIERvIHRoaXMgZXZlcnl3 aGVyZSBCVVQgaW4gQlNENDQgYmVjYXVzZSBpbiBCU0Q0NCwKLSAgICAgICAgICAgdG1fZ210b2Zm IGFsc28gaW5jbHVkZXMgdGhlIERTVCBhZGp1c3RtZW50LgotICAgICAgICAqLwotICAgICAgICBp ZiAodGltZV9zdGFtcC0+dG1faXNkc3QpIHsKLSAgICAgICAgICAgIHRteCAtPSA2MEwgKiA2MEw7 Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6c3RyZHQgdG14IDMgKERTVCkiLCIiLHRteCk7Ci0g ICAgICAgIH0KLSNlbmRpZiAvKiBCU0Q0NCAqLwotICAgICAgICBuID0gdGltZV9zdGFtcC0+dG1f eWVhcjsKLSAgICAgICAgaWYgKG4gPCAzMDApIHsKLSAgICAgICAgICAgIG4gKz0gMTkwMDsKLSAg ICAgICAgfQotICAgIH0KLSAgICByZXR1cm4odG14KTsKLX0KLQotCi0jaWZkZWYgWkxPQ0FMVElN RQotLyogWiBMIE8gQyBBIEwgVCBJIE0gRSAgLS0gIEdNVC9VVEMgdGltZSBzdHJpbmcgdG8gbG9j YWwgdGltZSBzdHJpbmcgKi8KLQotLyoKLSAgIENhbGwgd2l0aDogInl5eXltbWRkIGhoOm1tOnNz IiBHTVQvVVRDIGRhdGUtdGltZS4KLSAgIFJldHVybnM6ICAgInl5eXltbWRkIGhoOm1tOnNzIiBs b2NhbCBkYXRlLXRpbWUgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgotKi8KLXN0YXRpYyBj aGFyIHpsdGltYnVmWzY0XTsKLQotY2hhciAqCi16bG9jYWx0aW1lKGdtdHN0cmluZykgY2hhciAq IGdtdHN0cmluZzsgewotI2lmZGVmIE1fVU5JWAotLyoKLSAgU0NPIFVOSVggMy4ydjIuMCBhbmQg T0RUIDIuMCBsYWNrIHByb3RvdHlwZXMgZm9yIGZ0aW1lKCkuCi0gIE9EVCAzLjAgKDMuMnY0LjIg T1MpIGhhcyBhIHByb3RvdHlwZSwgd2hpY2ggbWF5IHZhcnkgaW4KLSAgZGVwZW5kZW5jZSBvbiB0 aGUgWFBHNCBzdXBwbGVtZW50IHByZXNlbmNlLiAgU28gYWx3YXlzIHVzZQotICB3aGF0IHRoZSBz eXN0ZW0gaGVhZGVyIGZpbGUgc3VwcGxpZXMgaW4gT0RUIDMuMC4uLgotKi8KLSNpZm5kZWYgT0RU MzAKLSNpZm5kZWYgX1NDT19EUwotICAgIGV4dGVybiB2b2lkIGZ0aW1lKCk7ICAvKiBleHRlcm4g dm9pZCBmdGltZShzdHJ1Y3QgdGltZWIgKikgKi8KLSNlbmRpZiAvKiBfU0NPX0RTICovCi0jZW5k aWYgLyogT0RUMzAgKi8KLSNlbHNlCi0jaWZuZGVmIE1fWEVOSVgKLSAgICBleHRlcm4gaW50IGZ0 aW1lKCk7Ci0jZW5kaWYgLyogTV9YRU5JWCAqLwotI2VuZGlmIC8qIE1fVU5JWCAqLwotICAgIGV4 dGVybiBzdHJ1Y3QgdG0gKiBsb2NhbHRpbWUoKTsKLQotICAgIC8qIEFuZCB0aGlzIHNob3VsZCBo YXZlIGJlZW4gZGVjbGFyZWQgYWx3YXlzIHRocm91Z2ggYSBoZWFkZXIgZmlsZSAqLwotI2lmZGVm IEhQVVgxMAotICAgIHRpbWVfdCB0bXg7Ci0gICAgbG9uZyBkYXlzOwotI2Vsc2UKLSNpZmRlZiBC U0Q0NAotICAgIHRpbWVfdCB0bXg7Ci0gICAgbG9uZyBkYXlzOwotI2Vsc2UKLSAgICBsb25nIHRt eCwgZGF5czsKLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2VuZGlmIC8qIEhQVVgxMCAqLwotICAgIGlu dCBpLCBuLCB4LCBpc2xlYXB5ZWFyOwotICAgICAgICAgICAgICAgICAgIC8qICAgICAgIEogIEYg IE0gIEEgICBNICAgSiAgIEogICBBICAgUyAgIE8gICBOICAgRCAgICovCi0gICAgICAgICAgICAg ICAgICAgLyogICAgICAzMSAyOCAzMSAzMCAgMzEgIDMwICAzMSAgMzEgIDMwICAzMSAgMzAgIDMx ICAgKi8KLSAgICBzdGF0aWMKLSAgICBpbnQgbW9udGhkYXlzIFsxM10gPSB7ICAwLDAsMzEsNTks OTAsMTIwLDE1MSwxODEsMjEyLDI0MywyNzMsMzA0LDMzNCB9OwotICAgIGNoYXIgc1s1XTsKLSAg ICBzdHJ1Y3QgdG0gKnRpbWVfc3RhbXA7Ci0KLSNpZmRlZiBCU0Q0NAotICAgIHN0cnVjdCB0aW1l dmFsIHRwWzJdOwotI2Vsc2UKLSNpZmRlZiBWNwotICAgIHN0cnVjdCB1dGltYnVmIHsKLSAgICAg IHRpbWVfdCB0aW1lcFsyXTsgICAgICAgICAgLyogTmV3IGFjY2VzcyBhbmQgbW9kaWZpY2F0b24g dGltZSAqLwotICAgIH0gdHA7Ci0jZWxzZQotI2lmZGVmIFNZU1VUSU1FSAotICAgIHN0cnVjdCB1 dGltYnVmIHRwOwotI2Vsc2UKLSAgICBzdHJ1Y3QgdXRpbWJ1ZiB7Ci0gICAgICAgIHRpbWVfdCBh dGltZTsKLSAgICAgICAgdGltZV90IG10aW1lOwotICAgIH0gdHA7Ci0jZW5kaWYgLyogU1lTVVRJ TUVIICovCi0jZW5kaWYgLyogVjcgKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotCi0jaWZkZWYgQU5Z QlNECi0gICAgc3RhdGljIHN0cnVjdCB0aW1lYiB0YnA7Ci0jZW5kaWYgLyogQU5ZQlNEICovCi0K LSAgICBjaGFyICogZGF0ZSA9IGdtdHN0cmluZzsKLSAgICBpbnQgbGVuOwotCi0gICAgbGVuID0g c3RybGVuKGRhdGUpOwotICAgIGRlYnVnKEYxMTEsInpsb2NhbHRpbWUiLGRhdGUsbGVuKTsKLQot ICAgIGlmICgobGVuID09IDApCi0gICAgICAgIHx8IChsZW4gIT0gMTcpCi0gICAgICAgIHx8IChk YXRlWzhdICE9ICcgJykKLSAgICAgICAgfHwgKGRhdGVbMTFdICE9ICc6JykKLSAgICAgICAgfHwg KGRhdGVbMTRdICE9ICc6JykgKSB7Ci0gICAgICAgIGRlYnVnKEYxMTEsIkJhZCBjcmVhdGlvbiBk YXRlICIsZGF0ZSxsZW4pOwotICAgICAgICByZXR1cm4oTlVMTCk7Ci0gICAgfQotICAgIGRlYnVn KEYxMTEsInpsb2NhbHRpbWUgZGF0ZSBjaGVjayAxIixkYXRlLGxlbik7Ci0gICAgZm9yKGkgPSAw OyBpIDwgODsgaSsrKSB7Ci0gICAgICAgIGlmICghaXNkaWdpdChkYXRlW2ldKSkgewotICAgICAg ICAgICAgZGVidWcoRjExMSwiQmFkIGNyZWF0aW9uIGRhdGUgIixkYXRlLGxlbik7Ci0gICAgICAg ICAgICByZXR1cm4oTlVMTCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZGVidWcoRjExMSwiemxv Y2FsdGltZSBkYXRlIGNoZWNrIDIiLGRhdGUsbGVuKTsKLSAgICBpKys7Ci0KLSAgICBmb3IgKDsg aSA8IDE2OyBpICs9IDMpIHsKLSAgICAgICAgaWYgKCghaXNkaWdpdChkYXRlW2ldKSkgfHwgKCFp c2RpZ2l0KGRhdGVbaSArIDFdKSkpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsIkJhZCBjcmVh dGlvbiBkYXRlICIsZGF0ZSxsZW4pOwotCSAgICByZXR1cm4oTlVMTCk7Ci0gICAgICAgIH0KLSAg ICB9Ci0gICAgZGVidWcoRjExMSwiemxvY2FsdGltZSBkYXRlIGNoZWNrIDMiLGRhdGUsbGVuKTsK LQotICAgIGRlYnVnKEYxMDAsInpsb2NhbHRpbWUgc28gZmFyIHNvIGdvb2QiLCIiLDApOwotCi0g ICAgc1s0XSA9ICdcMCc7Ci0gICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgICAgICAgICAgICAg LyogRml4IHRoZSB5ZWFyICovCi0gICAgICBzW2ldID0gZGF0ZVtpXTsKLQotICAgIG4gPSBhdG9p KHMpOwotICAgIGRlYnVnKEYxMTEsInpsb2NhbHRpbWUgeWVhciIscyxuKTsKLSAgICBpZiAobiA8 IDE5NzApIHsKLSAgICAgICAgZGVidWcoRjEwMCwiemxvY2FsdGltZSBmYWlscyAtIHllYXIiLCIi LG4pOwotICAgICAgICByZXR1cm4oTlVMTCk7Ci0gICAgfQotCi0vKiAgUHJldmlvdXMgeWVhcidz IGxlYXAgZGF5cy4gIFRoaXMgd29uJ3Qgd29yayBhZnRlciB5ZWFyIDIxMDAuICovCi0KLSAgICBp c2xlYXB5ZWFyID0gKCggbiAlIDQgPT0gMCAmJiBuICUgMTAwICE9MCkgfHwgbiAlIDQwMCA9PSAw KTsKLSAgICBkYXlzID0gKGxvbmcpIChuIC0gMTk3MCkgKiAzNjU7Ci0gICAgZGF5cyArPSAobiAt IDE5NjggLSAxKSAvIDQgLSAobiAtIDE5MDAgLSAxKSAvIDEwMCArIChuIC0gMTYwMCAtIDEpIC8g NDAwOwotCi0gICAgc1syXSA9ICdcMCc7Ci0KLSAgICBmb3IgKGkgPSA0OyBpIDwgMTY7IGkgKz0g MikgewotICAgICAgICBzWzBdID0gZGF0ZVtpXTsKLSAgICAgICAgc1sxXSA9IGRhdGVbaSArIDFd OwotICAgICAgICBuID0gYXRvaShzKTsKLSAgICAgICAgc3dpdGNoIChpKSB7Ci0gICAgICAgICAg Y2FzZSA0OiAgICAgICAgICAgICAgICAgICAgICAgLyogTU06IG1vbnRoICovCi0gICAgICAgICAg ICBpZiAoKG4gPCAxICkgfHwgKCBuID4gMTIpKSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEx MSwiemxvY2FsdGltZSA0IGJhZCBkYXRlICIsZGF0ZSxsZW4pOwotICAgICAgICAgICAgICAgIHJl dHVybihOVUxMKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRheXMgKz0gbW9udGhkYXlz IFtuXTsKLSAgICAgICAgICAgIGlmIChpc2xlYXB5ZWFyICYmIG4gPiAyKQotICAgICAgICAgICAg ICArK2RheXM7Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgIGNhc2UgNjogICAg ICAgICAgICAgICAgICAgICAgIC8qIEREOiBkYXkgKi8KLSAgICAgICAgICAgIGlmICgobiA8IDEg KSB8fCAoIG4gPiAzMSkpIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ6bG9jYWx0aW1l IDYgYmFkIGRhdGUgIixkYXRlLGxlbik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKE5VTEwpOwot ICAgICAgICAgICAgfQotICAgICAgICAgICAgdG14ID0gKGRheXMgKyBuIC0gMSkgKiAyNEwgKiA2 MEwgKiA2MEw7Ci0gICAgICAgICAgICBpKys7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU2tp cCB0aGUgc3BhY2UgKi8KLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgY2FzZSA5 OiAgICAgICAgICAgICAgICAgICAgICAgLyogaGg6IGhvdXIgKi8KLSAgICAgICAgICAgIGlmICgo biA8IDAgKSB8fCAoIG4gPiAyMykpIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ6bG9j YWx0aW1lIDkgYmFkIGRhdGUgIixkYXRlLGxlbik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKE5V TEwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdG14ICs9IG4gKiA2MEwgKiA2MEw7Ci0g ICAgICAgICAgICBpKys7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU2tpcCB0aGUgY29sb24g Ki8KLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgY2FzZSAxMjogICAgICAgICAg ICAgICAgICAgICAgLyogbW06IG1pbnV0ZSAqLwotICAgICAgICAgICAgaWYgKChuIDwgMCApIHx8 ICggbiA+IDU5KSkgewotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsInpsb2NhbHRpbWUgMTIg YmFkIGRhdGUgIixkYXRlLGxlbik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKE5VTEwpOwotICAg ICAgICAgICAgfQotICAgICAgICAgICAgdG14ICs9IG4gKiA2MEw7Ci0gICAgICAgICAgICBpKys7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogU2tpcCB0aGUgY29sb24gKi8KLSAgICAgICAgICAg IGNvbnRpbnVlOwotCi0gICAgICAgICAgY2FzZSAxNTogICAgICAgICAgICAgICAgICAgICAgLyog c3M6IHNlY29uZCAqLwotICAgICAgICAgICAgaWYgKChuIDwgMCApIHx8ICggbiA+IDU5KSkgewot ICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsInpsb2NhbHRpbWUgMTUgYmFkIGRhdGUgIixkYXRl LGxlbik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKE5VTEwpOwotICAgICAgICAgICAgfQotICAg ICAgICAgICAgdG14ICs9IG47Ci0gICAgICAgIH0KLQotLyoKLSAgQXQgdGhpcyBwb2ludCB0bXgg aXMgdGhlIHRpbWVfdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgYXJndW1lbnQgZGF0ZS10aW1lCi0g IHN0cmluZyB3aXRob3V0IGFueSB0aW1lem9uZSBvciBEU1QgYWRqdXN0bWVudHMuICBUaGVyZWZv cmUgaXQgc2hvdWxkIGJlCi0gIHRoZSBzYW1lIGFzIHRoZSB0aW1lX3QgcmVwcmVzZW50YXRpb24g b2YgdGhlIEdNVC9VVEMgdGltZS4gIE5vdyB3ZSBzaG91bGQKLSAgYmUgYWJsZSB0byBmZWVkIGl0 IHRvIGxvY2FsdGltZSgpIGFuZCBoYXZlIGl0IGNvbnZlcnRlZCB0byBhIHN0cnVjdCB0bQotICBy ZXByZXNlbnRpbmcgdGhlIGxvY2FsIHRpbWUgZXF1aXZhbGVudCBvZiB0aGUgZ2l2ZW4gVVRDIHRp bWUuCi0qLwotICAgICAgICB0aW1lX3N0YW1wID0gbG9jYWx0aW1lKCZ0bXgpOwotICAgICAgICBp ZiAoIXRpbWVfc3RhbXApCi0gICAgICAgICAgcmV0dXJuKE5VTEwpOwotICAgIH0KLQotLyogTm93 IHdlIHNpbXBseSByZWZvcm1hdCB0aGUgc3RydWN0IHRtIHRvIGEgc3RyaW5nICovCi0KLSAgICB4 ID0gdGltZV9zdGFtcC0+dG1feWVhcjsKLSAgICBpZiAodGltZV9zdGFtcC0+dG1feWVhciA8IDcw IHx8IHRpbWVfc3RhbXAtPnRtX3llYXIgPiA4MDk5KQotICAgICAgcmV0dXJuKE5VTEwpOwotICAg IGlmICh0aW1lX3N0YW1wLT50bV9tb24gPCAwIHx8IHRpbWVfc3RhbXAtPnRtX21vbiA+IDExKQot ICAgICAgcmV0dXJuKE5VTEwpOwotICAgIGlmICh0aW1lX3N0YW1wLT50bV9tZGF5IDwgMSB8fCB0 aW1lX3N0YW1wLT50bV9tZGF5ID4gMzEpCi0gICAgICByZXR1cm4oTlVMTCk7Ci0gICAgaWYgKHRp bWVfc3RhbXAtPnRtX2hvdXIgPCAwIHx8IHRpbWVfc3RhbXAtPnRtX2hvdXIgPiAyNCkKLSAgICAg IHJldHVybihOVUxMKTsKLSAgICBpZiAodGltZV9zdGFtcC0+dG1fbWluIDwgMCB8fCB0aW1lX3N0 YW1wLT50bV9taW4gPiA2MCkKLSAgICAgIHJldHVybihOVUxMKTsKLSAgICBpZiAodGltZV9zdGFt cC0+dG1fc2VjIDwgMCB8fCB0aW1lX3N0YW1wLT50bV9zZWMgPiA2MCkKLSAgICAgIHJldHVybihO VUxMKTsKLSAgICBzcHJpbnRmKHpsdGltYnVmLCIlMDRkJTAyZCUwMmQgJTAyZDolMDJkOiUwMmQi LAotCSAgICB0aW1lX3N0YW1wLT50bV95ZWFyICsgMTkwMCwKLQkgICAgdGltZV9zdGFtcC0+dG1f bW9uICsgMSwKLQkgICAgdGltZV9zdGFtcC0+dG1fbWRheSwKLQkgICAgdGltZV9zdGFtcC0+dG1f aG91ciwKLQkgICAgdGltZV9zdGFtcC0+dG1fbWluLAotCSAgICB0aW1lX3N0YW1wLT50bV9zZWMK LQkgICAgKTsKLSAgICByZXR1cm4oKGNoYXIgKil6bHRpbWJ1Zik7Ci19Ci0jZW5kaWYgLyogWkxP Q0FMVElNRSAqLwotI2VuZGlmIC8qIE5PVElNRVNUQU1QICovCi0KLS8qIFogUyBUIEkgTSBFICAt LSAgU2V0IG1vZGlmaWNhdGlvbiBkYXRlL3RpbWUrcGVybWlzc2lvbnMgZm9yIGluY29taW5nIGZp bGUgKi8KLS8qCi0gQ2FsbCB3aXRoOgotIGYgID0gcG9pbnRlciB0byBuYW1lIG9mIGV4aXN0aW5n IGZpbGUuCi0geXkgPSBwb2ludGVyIHRvIGEgS2VybWl0IGZpbGUgYXR0cmlidXRlIHN0cnVjdHVy ZSBpbiB3aGljaCB5eS0+ZGF0ZS52YWwKLSAgICAgIGlzIGEgZGF0ZSBvZiB0aGUgZm9ybSB5eXl5 bW1kZCBoaDptbTpzcywgZS5nLiAxOTkwMDIwOCAxMzowMDowMC4KLSAgICAgIHl5LT5scHJvdGVj dC52YWwgJiB5eS0+Z3Byb3RlY3QudmFsIGFyZSBwZXJtaXNzaW9uL3Byb3RlY3Rpb24gdmFsdWVz LgotIHggID0gaXMgYSBmdW5jdGlvbiBjb2RlOiAwIG1lYW5zIHRvIHNldCB0aGUgZmlsZSdzIGF0 dHJpYnV0ZXMgYXMgZ2l2ZW4uCi0gICAgICAxIG1lYW5zIGNvbXBhcmUgdGhlIGRhdGUgaW4gc3Ry dWN0IHl5IHdpdGggdGhlIGZpbGUgY3JlYXRpb24gZGF0ZS4KLSBSZXR1cm5zOgotIC0xIG9uIGFu eSBraW5kIG9mIGVycm9yLgotICAwIGlmIHggaXMgMCBhbmQgdGhlIGF0dHJpYnV0ZXMgd2VyZSBz ZXQgc3VjY2Vzc2Z1bGx5LgotICAwIGlmIHggaXMgMSBhbmQgZGF0ZSBmcm9tIGF0dHJpYnV0ZSBz dHJ1Y3R1cmUgPD0gZmlsZSBjcmVhdGlvbiBkYXRlLgotICAxIGlmIHggaXMgMSBhbmQgZGF0ZSBm cm9tIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUgPiBmaWxlIGNyZWF0aW9uIGRhdGUuCi0qLwotaW50Ci16 c3RpbWUoZix5eSx4KQotICAgIGNoYXIgKmY7IHN0cnVjdCB6YXR0ciAqeXk7IGludCB4OwotLyog enN0aW1lICovIHsKLSAgICBpbnQgciA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBS ZXR1cm4gY29kZSAqLwotI2lmZGVmIENLX1BFUk1TCi0gICAgaW50IHNldHBlcm1zID0gMDsKLSNl bmRpZiAvKiBDS19QRVJNUyAqLwotICAgIGludCBzZXRkYXRlID0gMDsKLQotLyogSXQgaXMgaWZk ZWYnZCBUSU1FU1RBTVAgYmVjYXVzZSBpdCBtaWdodCBub3Qgd29yayBvbiBWNy4gYmtAa3VsbG1h ci5zZS4gICovCi0KLSNpZmRlZiBUSU1FU1RBTVAKLSNpZmRlZiBCU0Q0NAotICAgIGV4dGVybiBp bnQgdXRpbWVzKCk7Ci0jZWxzZQotICAgIGV4dGVybiBpbnQgdXRpbWUoKTsKLSNlbmRpZiAvKiBC U0Q0NCAqLwotCi0gICAgc3RydWN0IHN0YXQgc2I7Ci0KLS8qIEF0IGxlYXN0LCB0aGUgZGVjbGFy YXRpb25zIGZvciBpbnQgZnVuY3Rpb25zIGFyZSBub3QgbmVlZGVkIGFueXdheSAqLwotCi0jaWZk ZWYgQlNENDQKLSAgICBzdHJ1Y3QgdGltZXZhbCB0cFsyXTsKLSAgICBsb25nIHh0aW1lem9uZTsK LSNlbHNlCi0jaWZkZWYgVjcKLSAgICBzdHJ1Y3QgdXRpbWJ1ZiB7Ci0JdGltZV90IHRpbWVwWzJd OwkJLyogTmV3IGFjY2VzcyBhbmQgbW9kaWZpY2F0b24gdGltZSAqLwotICAgIH0gdHA7Ci0gICAg Y2hhciAqdHo7Ci0gICAgbG9uZyB0aW1lem9uZTsgICAgICAgICAgICAgICAgICAgICAgLyogSW4g Y2FzZSBub3QgZGVmaW5lZCBpbiAuaCBmaWxlICovCi0jZWxzZQotI2lmZGVmIFNZU1VUSU1FSAot ICAgIHN0cnVjdCB1dGltYnVmIHRwOwotI2Vsc2UKLSAgICBzdHJ1Y3QgdXRpbWJ1ZiB7Ci0gICAg ICAgIHRpbWVfdCBhdGltZTsKLSAgICAgICAgdGltZV90IG10aW1lOwotICAgIH0gdHA7Ci0jZW5k aWYgLyogU1lTVVRJTUVIICovCi0jZW5kaWYgLyogVjcgKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwot Ci0gICAgbG9uZyB0bSA9IDBMOwotCi0gICAgaWYgKCFmKSBmID0gIiI7Ci0gICAgaWYgKCEqZikg cmV0dXJuKC0xKTsKLSAgICBpZiAoIXl5KSByZXR1cm4oLTEpOwotCi0jaWZkZWYgQ0tST09UCi0g ICAgZGVidWcoRjExMSwienN0aW1lIHNldHJvb3QiLGNrcm9vdCxja3Jvb3RzZXQpOwotICAgIGlm IChja3Jvb3RzZXQpIGlmICghemlucm9vdChmKSkgewotCWRlYnVnKEYxMTAsInpzdGltZSBzZXRy b290IHZpb2xhdGlvbiIsZiwwKTsKLQlyZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIENLUk9P VCAqLwotCi0gICAgaWYgKHl5LT5kYXRlLmxlbiA9PSAwKSB7ICAgICAgICAgICAgLyogTm8gZGF0 ZSBpbiBzdHJ1Y3QgKi8KLSAgICAgICAgaWYgKHl5LT5scHJvdGVjdC5sZW4gIT0gMCkgeyAgICAv KiBTbyBnbyBkbyBwZXJtaXNzaW9ucyAqLwotICAgICAgICAgICAgZ290byB6c3Blcm1zOwotICAg ICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVidWcoRjEwMCwienN0aW1lOiBub3RoaW5nIHRv IGRvIiwiIiwwKTsKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgfQotICAgIH0KLSAg ICBpZiAoKHRtID0genN0cmR0KHl5LT5kYXRlLnZhbCx5eS0+ZGF0ZS5sZW4pKSA8IDApIHsKLSAg ICAgICAgZGVidWcoRjEwMSwienN0aW1lOiB6c3RyZHQgZmFpbHMiLCIiLDApOwotICAgICAgICBy ZXR1cm4oLTEpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJ6c3RpbWU6IHRtIiwiIix0bSk7Ci0g ICAgZGVidWcoRjExMSwienN0aW1lOiBBLXBrdCBkYXRlIG9rICIseXktPmRhdGUudmFsLHl5LT5k YXRlLmxlbik7Ci0KLSAgICBpZiAoc3RhdChmLCZzYikpIHsgICAgICAgICAgICAgICAgICAvKiBH ZXQgdGhlIHRpbWUgZm9yIHRoZSBmaWxlICovCi0JZGVidWcoRjEwMSwiU1RBVCIsIiIsMTQpOwot ICAgICAgICBkZWJ1ZyhGMTExLCJ6c3RpbWU6IENhbid0IHN0YXQgZmlsZToiLGYsZXJybm8pOwot ICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJTVEFUIiwiIiwxNSk7 Ci0gICAgc2V0ZGF0ZSA9IDE7Ci0KLSAgenNwZXJtczoKLSNpZmRlZiBDS19QRVJNUwotICAgIHsK LSAgICAgICAgaW50IGksIHggPSAwLCB4eCwgZmxhZyA9IDA7Ci0gICAgICAgIGNoYXIgKiBzOwot I2lmZGVmIERFQlVHCi0gICAgICAgIGNoYXIgb2J1ZlsyNF07Ci0gICAgICAgIGlmIChkZWJsb2cp IHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsInpzdGltZSBscGVybXMiLHl5LT5scHJvdGVjdC52 YWwseXktPmxwcm90ZWN0Lmxlbik7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJ6c3RpbWUgZ3Bl cm1zIix5eS0+Z3Byb3RlY3QudmFsLHl5LT5ncHJvdGVjdC5sZW4pOwotICAgICAgICAgICAgZGVi dWcoRjExMCwienN0aW1lIHN5c3RlbSBpZCIseXktPnN5c3RlbWlkLnZhbCwwKTsKLSAgICAgICAg ICAgIHNwcmludGYob2J1ZiwiJW8iLHNiLnN0X21vZGUpOwotICAgICAgICAgICAgZGVidWcoRjEx MCwienN0aW1lIGZpbGUgcGVybXMgYmVmb3JlIixvYnVmLDApOwotICAgICAgICB9Ci0jZW5kaWYg LyogREVCVUcgKi8KLQotI2lmZGVmIENLX0xPR0lOCi0gICAgICAgIGRlYnVnKEYxMDEsInpzdGlt ZSBpc2d1ZXN0IiwiIixpc2d1ZXN0KTsKLSAgICAgICAgZGVidWcoRjEwMSwienN0aW1lIGNreHBl cm1zIiwiIixja3hwZXJtcyk7Ci0gICAgICAgIGlmIChpc2d1ZXN0KSB7Ci0jaWZkZWYgQ09NTUVO VAotICAgICAgICAgICAgLyogQ2xlYXIgb3duZXIgcGVybWlzc2lvbnMgKi8KLSAgICAgICAgICAg IHNiLnN0X21vZGUgJj0gKHVuc2lnbmVkKSAwMTc3MDc3OyAvKiAoMTYgYml0cykgKi8KLSNlbHNl Ci0gICAgICAgICAgICAvKiBTZXQgcGVybWlzc2lvbnMgZnJvbSBja3hwZXJtcyB2YXJpYWJsZSAq LwotICAgICAgICAgICAgc2Iuc3RfbW9kZSA9IGNreHBlcm1zOwotI2VuZGlmIC8qIENPTU1FTlQg Ki8KLSAgICAgICAgICAgIGRlYnVnKEYxMDEsInpzdGltZSBpc2d1ZXN0IHNiLnN0X21vZGUiLCIi LHNiLnN0X21vZGUpOwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgIC8qIFdlIGFscmVhZHkg c2V0IHRoZW0gaW4gem9wZW5vKCkgKi8KLSAgICAgICAgICAgIHNldHBlcm1zID0gMTsKLSNlbmRp ZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICBmbGFnID0gMDsKLSAgICAgICAgfSBlbHNlCi0j ZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSAgICAgICAgICBpZiAoKHl5LT5scHJvdGVjdC5sZW4gPiAw ICYmICAvKiBIYXZlIGxvY2FsLWZvcm1hdCBwZXJtaXNzaW9ucyAqLwotICAgICAgICAgICAgeXkt PnN5c3RlbWlkLmxlbiA+IDAgJiYgICAgIC8qIGZyb20gQS1wYWNrZXQuLi4gKi8KLSNpZmRlZiBV TklYCi0gICAgICAgICAgICAhc3RyY21wKHl5LT5zeXN0ZW1pZC52YWwsIlUxIikgLyogQU5EIHlv dSBhcmUgc2FtZSBhcyBtZSAqLwotI2Vsc2UKLSAgICAgICAgICAgIDAKLSNlbmRpZiAvKiBVTklY ICovCi0gICAgICAgICAgICAgKSB8fCAoeXktPmxwcm90ZWN0LmxlbiA8IDApIC8qIE9SIGJ5IGlu aGVyaXRhbmNlIGZyb20gb2xkIGZpbGUgKi8KLSAgICAgICAgICAgICkgewotICAgICAgICAgICAg ZmxhZyA9IDE7Ci0gICAgICAgICAgICBzID0geXktPmxwcm90ZWN0LnZhbDsgICAgICAgLyogVU5J WCBmaWxlbW9kZSAqLwotICAgICAgICAgICAgeHggPSB5eS0+bHByb3RlY3QubGVuOwotICAgICAg ICAgICAgaWYgKHh4IDwgMCkgICAgICAgICAgICAgICAgIC8qIGxlbiA8IDAgbWVhbnMgaW5oZXJp dGFuY2UgKi8KLSAgICAgICAgICAgICAgeHggPSAwIC0geHg7Ci0gICAgICAgICAgICBmb3IgKGkg PSAwOyBpIDwgeHg7IGkrKykgeyAgLyogRGVjb2RlIG9jdGFsIHN0cmluZyAqLwotICAgICAgICAg ICAgICAgIGlmICgqcyA8PSAnNycgJiYgKnMgPj0gJzAnKSB7Ci0gICAgICAgICAgICAgICAgICAg IHggPSA4ICogeCArIChpbnQpKCpzKSAtICcwJzsKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgICAgICAgICBmbGFnID0gMDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHMrKzsKLSAgICAgICAgICAgIH0K LSNpZmRlZiBERUJVRwotICAgICAgICAgICAgc3ByaW50ZihvYnVmLCIlbyIseCk7Ci0gICAgICAg ICAgICBkZWJ1ZyhGMTEwLCJ6c3RpbWUgb2N0YWwgbHBlcm0iLG9idWYsMCk7Ci0jZW5kaWYgLyog REVCVUcgKi8KLSAgICAgICAgfSBlbHNlIGlmICghZmxhZyAmJiB5eS0+Z3Byb3RlY3QubGVuID4g MCkgewotICAgICAgICAgICAgaW50IGc7Ci0jaWZkZWYgQ0tfU0NPMzJWNAotICAgICAgICAgICAg bW9kZV90IG1hc2s7Ci0jZWxzZQotICAgICAgICAgICAgaW50IG1hc2s7Ci0jZW5kaWYgLyogQ0tf U0NPMzJWNCAqLwotICAgICAgICAgICAgbWFzayA9IHVtYXNrKDApOyAgICAgICAgICAgIC8qIEdl dCB1bWFzayAqLwotICAgICAgICAgICAgZGVidWcoRjEwMSwienN0aW1lIG1hc2sgMSIsIiIsbWFz ayk7Ci0gICAgICAgICAgICB1bWFzayhtYXNrKTsgICAgICAgICAgICAgICAgLyogUHV0IGl0IGJh Y2sgKi8KLSAgICAgICAgICAgIG1hc2sgXj0gMDc3NzsgICAgICAgICAgICAgICAvKiBGbGlwIHRo ZSBiaXRzICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6c3RpbWUgbWFzayAyIiwiIixtYXNr KTsKLSAgICAgICAgICAgIGcgPSB4dW5jaGFyKCooeXktPmdwcm90ZWN0LnZhbCkpOyAvKiBEZWNv ZGUgZ2VuZXJpYyBwcm90ZWN0aW9uICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6c3RpbWUg Z3Byb3RlY3QiLCIiLGcpOwotI2lmZGVmIFNfSVJVU1IKLSAgICAgICAgICAgIGRlYnVnKEYxMDAs InpzdGltZSBTX0lSVVNSIiwiIiwwKTsKLSAgICAgICAgICAgIGlmIChnICYgMSkgeCB8PSBTX0lS VVNSOyAgICAvKiBSZWFkIHBlcm1pc3Npb24gKi8KLSAgICAgICAgICAgIGZsYWcgPSAxOwotI2Vu ZGlmIC8qIFNfSVJVU1IgKi8KLSNpZmRlZiBTX0lXVVNSCi0gICAgICAgICAgICBkZWJ1ZyhGMTAw LCJ6c3RpbWUgU19JV1VTUiIsIiIsMCk7Ci0gICAgICAgICAgICBpZiAoZyAmIDIpIHggfD0gU19J V1VTUjsgICAgLyogV3JpdGUgcGVybWlzc2lvbiAqLwotICAgICAgICAgICAgaWYgKGcgJiAxNikg eCB8PSBTX0lXVVNSOyAgIC8qIERlbGV0ZSBwZXJtaXNzaW9uICovCi0gICAgICAgICAgICBmbGFn ID0gMTsKLSNlbmRpZiAvKiBTX0lXVVNSICovCi0jaWZkZWYgU19JWFVTUgotICAgICAgICAgICAg ZGVidWcoRjEwMCwienN0aW1lIFNfSVhVU1IiLCIiLDApOwotICAgICAgICAgICAgaWYgKGcgJiA0 KSAgICAgICAgICAgICAgICAgIC8qIEhhcyBleGVjdXRlIHBlcm1pc3Npb24gYml0ICovCi0gICAg ICAgICAgICAgIHggfD0gU19JWFVTUjsKLSAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAg ICAgICAgICAvKiBEb2Vzbid0IGhhdmUgaXQgKi8KLSAgICAgICAgICAgICAgbWFzayAmPSAwNjY2 OyAgICAgICAgICAgICAvKiBzbyBhbHNvIGNsZWFyIGl0IG91dCBvZiBtYXNrICovCi0gICAgICAg ICAgICBmbGFnID0gMTsKLSNlbmRpZiAvKiBTX0lYVVNSICovCi0gICAgICAgICAgICBkZWJ1ZyhG MTAxLCJ6c3RpbWUgbWFzayB4IiwiIix4KTsKLSAgICAgICAgICAgIHggfD0gbWFzazsKLSAgICAg ICAgICAgIGRlYnVnKEYxMDEsInpzdGltZSBtYXNrIHh8bWFzayIsIiIseCk7Ci0gICAgICAgIH0K LSAgICAgICAgZGVidWcoRjEwMSwienN0aW1lIGZsYWciLCIiLGZsYWcpOwotICAgICAgICBpZiAo ZmxhZykgewotI2lmZGVmIFNfSUZNVAotICAgICAgICAgICAgZGVidWcoRjEwMSwienN0aW1lIFNf SUZNVCB4IiwiIix4KTsKLSAgICAgICAgICAgIHNiLnN0X21vZGUgPSAoc2Iuc3RfbW9kZSAmIFNf SUZNVCkgfCB4OwotICAgICAgICAgICAgc2V0cGVybXMgPSAxOwotI2Vsc2UKLSNpZmRlZiBfSUZN VAotICAgICAgICAgICAgZGVidWcoRjEwMSwienN0aW1lIF9JRk1UIHgiLCIiLHgpOwotICAgICAg ICAgICAgc2Iuc3RfbW9kZSA9IChzYi5zdF9tb2RlICYgX0lGTVQpIHwgeDsKLSAgICAgICAgICAg IHNldHBlcm1zID0gMTsKLSNlbmRpZiAvKiBfSUZNVCAqLwotI2VuZGlmIC8qIFNfSUZNVCAqLwot ICAgICAgICB9Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgc3ByaW50ZihvYnVmLCIlMDRvIixzYi5z dF9tb2RlKTsKLSAgICAgICAgZGVidWcoRjExMSwienN0aW1lIGZpbGUgcGVybXMgYWZ0ZXIiLG9i dWYsc2V0cGVybXMpOwotI2VuZGlmIC8qIERFQlVHICovCi0gICAgfQotI2VuZGlmIC8qIENLX1BF Uk1TICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJ6c3RpbWU6IHNiLnN0X2F0aW1lIiwiIixzYi5zdF9h dGltZSk7Ci0KLSNpZmRlZiBCU0Q0NAotICAgIHRwWzBdLnR2X3NlYyA9IHNiLnN0X2F0aW1lOyAg ICAgICAgIC8qIEFjY2VzcyB0aW1lIGZpcnN0ICovCi0gICAgdHBbMV0udHZfc2VjID0gdG07ICAg ICAgICAgICAgICAgICAgLyogVXBkYXRlIHRpbWUgc2Vjb25kICovCi0gICAgZGVidWcoRjEwMCwi enN0aW1lOiBCU0Q0NCBtb2R0aW1lIiwiIiwwKTsKLSNlbHNlCi0jaWZkZWYgVjcKLSAgICB0cC50 aW1lcFswXSA9IHRtOyAgICAgICAgICAgICAgICAgICAvKiBTZXQgbW9kaWYuIHRpbWUgdG8gY3Jl YXRpb24gZGF0ZSAqLwotICAgIHRwLnRpbWVwWzFdID0gc2Iuc3RfYXRpbWU7ICAgICAgICAgIC8q IERvbid0IGNoYW5nZSB0aGUgYWNjZXNzIHRpbWUgKi8KLSAgICBkZWJ1ZyhGMTAwLCJ6c3RpbWU6 IFY3IG1vZHRpbWUiLCIiLDApOwotI2Vsc2UKLSNpZmRlZiBTWVNVVElNRUgKLSAgICB0cC5tb2R0 aW1lID0gdG07ICAgICAgICAgICAgICAgICAgICAvKiBTZXQgbW9kaWYuIHRpbWUgdG8gY3JlYXRp b24gZGF0ZSAqLwotICAgIHRwLmFjdGltZSA9IHNiLnN0X2F0aW1lOyAgICAgICAgICAgIC8qIERv bid0IGNoYW5nZSB0aGUgYWNjZXNzIHRpbWUgKi8KLSAgICBkZWJ1ZyhGMTAwLCJ6c3RpbWU6IFNZ U1VUSU1FSCBtb2R0aW1lIiwiIiwwKTsKLSNlbHNlCi0gICAgdHAubXRpbWUgPSB0bTsgICAgICAg ICAgICAgICAgICAgICAgLyogU2V0IG1vZGlmLiB0aW1lIHRvIGNyZWF0aW9uIGRhdGUgKi8KLSAg ICB0cC5hdGltZSA9IHNiLnN0X2F0aW1lOyAgICAgICAgICAgICAvKiBEb24ndCBjaGFuZ2UgdGhl IGFjY2VzcyB0aW1lICovCi0gICAgZGVidWcoRjEwMCwienN0aW1lOiBkZWZhdWx0IG1vZHRpbWUi LCIiLDApOwotI2VuZGlmIC8qIFNZU1VUSU1FSCAqLwotI2VuZGlmIC8qIFY3ICovCi0jZW5kaWYg LyogQlNENDQgKi8KLQotICAgIHN3aXRjaCAoeCkgeyAgICAgICAgICAgICAgICAgICAgICAgIC8q IEV4ZWN1dGUgZGVzaXJlZCBmdW5jdGlvbiAqLwotICAgICAgY2FzZSAwOiAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFNldCB0aGUgY3JlYXRpb24gZGF0ZSBvZiB0aGUgZmlsZSAqLwotI2lm ZGVmIENLX1BFUk1TICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFuZCBwZXJtaXNzaW9ucyAq LwotLyoKLSAgTk9URTogSWYgd2UgYXJlIGluaGVyaXRpbmcgcGVybWlzc2lvbnMgZnJvbSBhIHBy ZXZpb3VzIGZpbGUsIGFuZCB0aGUKLSAgcHJldmlvdXMgZmlsZSB3YXMgYSBkaXJlY3RvcnksIHRo aXMgd291bGQgdHVybiB0aGUgbmV3IGZpbGUgaW50byBhIGRpcmVjdG9yeQotICB0b28sIGJ1dCBp dCdzIG5vdCwgc28gd2UgdHJ5IHRvIHVuc2V0IHRoZSByaWdodCBiaXQuICBMdWNraWx5LCB0aGlz IGNvZGUKLSAgd2lsbCBwcm9iYWJseSBuZXZlciBiZSBleGVjdXRlZCBzaW5jZSB0aGUgdXBwZXIg bGV2ZWwgbW9kdWxlcyBkbyBub3QgYWxsb3cKLSAgcmVjZXB0aW9uIG9mIGEgZmlsZSB0aGF0IGhh cyB0aGUgc2FtZSBuYW1lIGFzIGEgZGlyZWN0b3J5LgotCi0gIE5PVEUgMjogV2UgY2hhbmdlIHRo ZSBwZXJtaXNzaW9ucyAqYmVmb3JlKiB3ZSBjaGFuZ2UgdGhlIG1vZGlmaWNhdGlvbiB0aW1lLAot ICBvdGhlcndpc2UgY2hhbmdpbmcgdGhlIHBlcm1pc3Npb25zIHdvdWxkIHNldCB0aGUgbW9kIHRp bWUgdG8gdGhlIHByZXNlbnQKLSAgdGltZS4KLSovCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlu dCB4OwotICAgICAgICAgICAgZGVidWcoRjEwMSwienN0aW1lIHNldHBlcm1zIiwiIixzZXRwZXJt cyk7Ci0gICAgICAgICAgICBpZiAoU19JU0RJUihzYi5zdF9tb2RlKSkgewotICAgICAgICAgICAg ICAgIGRlYnVnKEYxMDEsInpzdGltZSBESVJFQ1RPUlkgYml0IG9uIiwiIixzYi5zdF9tb2RlKTsK LSAgICAgICAgICAgICAgICBzYi5zdF9tb2RlIF49IDAwNDAwMDA7Ci0gICAgICAgICAgICAgICAg ZGVidWcoRjEwMSwienN0aW1lIERJUkVDVE9SWSBiaXQgb2ZmIiwiIixzYi5zdF9tb2RlKTsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzZXRwZXJtcykgewotICAgICAgICAgICAgICAg IHggPSBjaG1vZChmLHNiLnN0X21vZGUpOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsInpz dGltZSBjaG1vZCIsIiIseCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYg KHggPCAwKSByZXR1cm4oLTEpOwotI2VuZGlmIC8qIENLX1BFUk1TICovCi0KLSAgICAgICAgaWYg KCFzZXRkYXRlKSAgICAgICAgICAgICAgICAgICAvKiBXZSBkb24ndCBoYXZlIGEgZGF0ZSAqLwot ICAgICAgICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAgIC8qIHNvIHNraXAgdGhlIGZv bGxvd2luZy4uLiAqLwotCi0gICAgICAgIGlmICgKLSNpZmRlZiBCU0Q0NAotICAgICAgICAgICAg dXRpbWVzKGYsdHApCi0jZWxzZQotICAgICAgICAgICAgdXRpbWUoZiwmdHApCi0jZW5kaWYgLyog QlNENDQgKi8KLSAgICAgICAgICAgICkgeyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaXgg bW9kaWZpY2F0aW9uIHRpbWUgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTEsInpzdGltZSAwOiBj YW4ndCBzZXQgbW9kdGltZSBmb3IgZmlsZSIsZixlcnJubyk7Ci0gICAgICAgICAgICByID0gLTE7 Ci0gICAgICAgIH0gZWxzZSAgewotCSAgICAvKiBJbmNsdWRpbmcgdGhlIG1vZHRpbWUgaGVyZSBp cyBub3QgcG9ydGFibGUgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTAsInpzdGltZSAwOiBtb2R0 aW1lIHNldCBmb3IgZmlsZSIsZiwwKTsKLSAgICAgICAgICAgIHIgPSAwOwotICAgICAgICB9Ci0g ICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogQ29tcGFyZSB0aGUgZGF0ZXMgKi8KLS8qCi0gIFRoaXMgd2FzIHN0X2F0aW1lLCB3aGljaCB3 YXMgd3JvbmcuICBXZSB3YW50IHRoZSBmaWxlLWRhdGEgbW9kaWZpY2F0aW9uCi0gIHRpbWUsIHN0 X210aW1lLgotKi8KLSAgICAgICAgZGVidWcoRjExMSwienN0aW1lIDE6IGNvbXBhcmUiLGYsc2Iu c3RfbXRpbWUpOwotICAgICAgICBkZWJ1ZyhGMTExLCJ6c3RpbWUgMTogY29tcGFyZSIsInBhY2tl dCIsdG0pOwotCi0gICAgICAgIHIgPSAoc2Iuc3RfbXRpbWUgPCB0bSkgPyAwIDogMTsKLSAgICAg ICAgYnJlYWs7Ci0KLSAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBF cnJvciAqLwotICAgICAgICByID0gLTE7Ci0gICAgfQotI2VuZGlmIC8qIFRJTUVTVEFNUCAqLwot ICAgIHJldHVybihyKTsKLX0KLQotLyogRmluZCBpbml0aWFsaXphdGlvbiBmaWxlLiAqLwotCi0j aWZkZWYgTk9UVVNFRAotaW50Ci16a2VybWluaSgpIHsKLS8qICBub3RoaW5nIGhlcmUgZm9yIFVu aXguICBUaGlzIGZ1bmN0aW9uIGFkZGVkIGZvciBiZW5lZml0IG9mIFZNUyBLZXJtaXQuICAqLwot ICAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAvKiBOT1RVU0VEICovCi0KLSNpZm5kZWYgVU5JWAot LyogSGlzdG9yaWNhbCAtLSBub3QgdXNlZCBpbiBVbml4IGFueSBtb3JlICgyMDAxLTExLTAzKSAq LwotI2lmbmRlZiBOT0ZSSUxMUwotaW50Ci16bWFpbChwLGYpIGNoYXIgKnA7IGNoYXIgKmY7IHsg ICAgICAgICAgLyogU2VuZCBmaWxlIGYgYXMgbWFpbCB0byBhZGRyZXNzIHAgKi8KLS8qCi0gIFJl dHVybnMgMCBvbiBzdWNjZXNzCi0gICAyIGlmIG1haWwgZGVsaXZlcmVkIGJ1dCB0ZW1wIGZpbGUg Y2FuJ3QgYmUgZGVsZXRlZAotICAtMiBpZiBtYWlsIGNhbid0IGJlIGRlbGl2ZXJlZAotICAtMSBv biBmaWxlIGFjY2VzcyBlcnJvcgotICBUaGUgVU5JWCB2ZXJzaW9uIGFsd2F5cyByZXR1cm5zIDAg YmVjYXVzZSBpdCBjYW4ndCBnZXQgYSBnb29kIHJldHVybgotICBjb2RlIGZyb20genN5c2NtZC4K LSovCi0gICAgaW50IG47Ci0KLSNpZmRlZiBDS19MT0dJTgotICAgIGlmIChpc2d1ZXN0KQotICAg ICAgcmV0dXJuKC0yKTsKLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotCi0gICAgaWYgKCFmKSBmID0g IiI7Ci0gICAgaWYgKCEqZikgcmV0dXJuKC0xKTsKLQotI2lmZGVmIENLUk9PVAotICAgIGRlYnVn KEYxMTEsInptYWlsIHNldHJvb3QiLGNrcm9vdCxja3Jvb3RzZXQpOwotICAgIGlmIChja3Jvb3Rz ZXQpIGlmICghemlucm9vdChmKSkgewotCWRlYnVnKEYxMTAsInptYWlsIHNldHJvb3QgdmlvbGF0 aW9uIixmLDApOwotCXJldHVybigtMSk7Ci0gICAgfQotI2VuZGlmIC8qIENLUk9PVCAqLwotCi0j aWZkZWYgQlNENAotLyogVGhlIGlkZWEgaXMgdG8gdXNlIC91c3IvdWNiL21haWwsIHJhdGhlciB0 aGFuIHJlZ3VsYXIgbWFpbCwgc28gdGhhdCAgICovCi0vKiBhIHN1YmplY3QgbGluZSBjYW4gYmUg aW5jbHVkZWQgd2l0aCAtcy4gIFNpbmNlIHdlIGNhbid0IGRlcGVuZCBvbiB0aGUgKi8KLS8qIHVz ZXIncyBwYXRoLCB3ZSB1c2UgdGhlIGNvbnZlbnRpb24gdGhhdCAvdXNyL3VjYi9NYWlsID0gL3Vz ci91Y2IvbWFpbCAqLwotLyogYW5kIGV2ZW4gaWYgTWFpbCBoYXMgYmVlbiBtb3ZlZCB0byBzb21l d2hlcmUgZWxzZSwgdGhpcyBzaG91bGQgc3RpbGwgICovCi0vKiBmaW5kIGl0Li4uICBUaGUgc2Vh cmNoIGNvdWxkIGJlIG1hZGUgbW9yZSByZWxpYWJsZSBieSBhY3R1YWxseSB1c2luZyAgKi8KLS8q IGFjY2VzcygpIHRvIHNlZSBpZiAvdXNyL3VjYi9NYWlsIGV4aXN0cy4gKi8KLQotICAgIG4gPSBz dHJsZW4oZik7Ci0gICAgbiA9IG4gKyBuICsgMTUgKyAoaW50KXN0cmxlbihwKTsKLQotICAgIGlm IChuID4gWk1CVUZMRU4pCi0gICAgICByZXR1cm4oLTIpOwotCi0jaWZkZWYgREdVWDU0MAotICAg IHNwcmludGYoem1idWYsIm1haWx4IC1zICVjJXMlYyAlcyA8ICVzIiwgJyInLCBmLCAnIicsIHAs IGYpOwotI2Vsc2UKLSAgICBzcHJpbnRmKHptYnVmLCJNYWlsIC1zICVjJXMlYyAlcyA8ICVzIiwg JyInLCBmLCAnIicsIHAsIGYpOwotI2VuZGlmIC8qIERHVVg1NDAgKi8KLSAgICB6c3lzY21kKHpt YnVmKTsKLSNlbHNlCi0jaWZkZWYgU1ZPUlBPU0lYCi0jaWZuZGVmIE9YT1MKLSAgICBzcHJpbnRm KHptYnVmLCJtYWlsICVzIDwgJXMiLCBwLCBmKTsKLSNlbHNlIC8qIE9YT1MgKi8KLSAgICBzcHJp bnRmKHptYnVmLCJtYWlseCAtcyAlYyVzJWMgJXMgPCAlcyIsICciJywgZiwgJyInLCBwLCBmKTsK LSNlbmRpZiAvKiBPWE9TICovCi0gICAgenN5c2NtZCh6bWJ1Zik7Ci0jZWxzZQotICAgICp6bWJ1 ZiA9ICdcMCc7Ci0jZW5kaWYKLSNlbmRpZgotICAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAvKiBO T0ZSSUxMUyAqLwotI2VuZGlmIC8qIFVOSVggKi8KLQotI2lmbmRlZiBOT0ZSSUxMUwotaW50Ci16 cHJpbnQocCxmKSBjaGFyICpwOyBjaGFyICpmOyB7ICAgICAgICAgLyogUHJpbnQgZmlsZSBmIHdp dGggb3B0aW9ucyBwICovCi0gICAgZXh0ZXJuIGNoYXIgKiBwcmludGVybmFtZTsgICAgICAgICAg LyogRnJvbSBja3V1czMuYyAqLwotICAgIGV4dGVybiBpbnQgcHJpbnRwaXBlOwotICAgIGludCBu OwotCi0jaWZkZWYgQ0tfTE9HSU4KLSAgICBpZiAoaXNndWVzdCkKLSAgICAgIHJldHVybigtMik7 Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLQotICAgIGlmICghZikgZiA9ICIiOwotICAgIGlmICgh KmYpIHJldHVybigtMSk7Ci0KLSNpZmRlZiBDS1JPT1QKLSAgICBkZWJ1ZyhGMTExLCJ6cHJpbnQg c2V0cm9vdCIsY2tyb290LGNrcm9vdHNldCk7Ci0gICAgaWYgKGNrcm9vdHNldCkgaWYgKCF6aW5y b290KGYpKSB7Ci0JZGVidWcoRjExMCwienByaW50IHNldHJvb3QgdmlvbGF0aW9uIixmLDApOwot CXJldHVybigtMSk7Ci0gICAgfQotI2VuZGlmIC8qIENLUk9PVCAqLwotCi0gICAgZGVidWcoRjEx MCwienByaW50IGZpbGUiLGYsMCk7Ci0gICAgZGVidWcoRjExMCwienByaW50IGZsYWdzIixwLDAp OwotICAgIGRlYnVnKEYxMTAsInpwcmludCBwcmludGVybmFtZSIscHJpbnRlcm5hbWUsMCk7Ci0g ICAgZGVidWcoRjEwMSwienByaW50IHByaW50cGlwZSIsIiIscHJpbnRwaXBlKTsKLQotI2lmZGVm IFVOSVgKLS8qCi0gIE5vdGUgdXNlIG9mIHN0YW5kYXJkIGlucHV0IHJlZGlyZWN0aW9uLiAgSW4g c29tZSBzeXN0ZW1zLCBscFtyXSBydW5zCi0gIHNldHVpZCB0byBscCAob3IgLi4uPyksIHNvIGlm IHVzZXIgaGFzIHNlbnQgYSBmaWxlIGludG8gYSBkaXJlY3RvcnkKLSAgdGhhdCBscCBkb2VzIG5v dCBoYXZlIHJlYWQgYWNjZXNzIHRvLCBpdCBjYW4ndCBiZSBwcmludGVkIHVubGVzcyBpdCBpcwot ICBmZWQgdG8gbHBbcl0gYXMgc3RhbmRhcmQgaW5wdXQuCi0qLwotICAgIGlmIChwcmludHBpcGUg JiYgcHJpbnRlcm5hbWUpIHsKLQluID0gOCArIChpbnQpc3RybGVuKGYpICsgKGludClzdHJsZW4o cHJpbnRlcm5hbWUpOwotCWlmIChuID4gWk1CVUZMRU4pCi0JICByZXR1cm4oLTIpOwotICAgICAg ICBzcHJpbnRmKHptYnVmLCJjYXQgJXMgfCAlcyIsIGYsIHByaW50ZXJuYW1lKTsKLSAgICB9IGVs c2UgaWYgKHByaW50ZXJuYW1lKSB7Ci0JbiA9IDggKyAoaW50KXN0cmxlbihmKSArIChpbnQpc3Ry bGVuKHByaW50ZXJuYW1lKTsKLQlpZiAobiA+IFpNQlVGTEVOKQotCSAgcmV0dXJuKC0yKTsKLSAg ICAgICAgc3ByaW50Zih6bWJ1ZiwiY2F0ICVzID4+ICVzIiwgZiwgcHJpbnRlcm5hbWUpOwotICAg IH0gZWxzZSB7Ci0JbiA9IDQgKyAoaW50KXN0cmxlbihQUklOVENNRCkgKyAoaW50KXN0cmxlbihw KSArIChpbnQpc3RybGVuKGYpOwotCWlmIChuID4gWk1CVUZMRU4pCi0JICByZXR1cm4oLTIpOwot ICAgICAgICBzcHJpbnRmKHptYnVmLCIlcyAlcyA8ICVzIiwgUFJJTlRDTUQsIHAsIGYpOwotICAg IH0KLSAgICBkZWJ1ZyhGMTEwLCJ6cHJpbnQgY29tbWFuZCIsem1idWYsMCk7Ci0gICAgenN5c2Nt ZCh6bWJ1Zik7Ci0jZWxzZSAvKiBOb3QgVU5JWCAqLwotICAgICp6bWJ1ZiA9ICdcMCc7Ci0jZW5k aWYgLyogVU5JWCAqLwotICAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwot Ci0vKiAgV2lsZGNhcmQgZXhwYW5zaW9uIGZ1bmN0aW9ucy4uLiAgKi8KLQotc3RhdGljIGNoYXIg c2NyYXRjaFtNQVhQQVRIKzRdOyAgICAgICAgIC8qIFVzZWQgYnkgYm90aCBtZXRob2RzICovCi0K LXN0YXRpYyBpbnQgb2xkbXRjaHMgPSAwOyAgICAgICAgICAgICAgICAvKiBMZXQgc2hlbGwgKGxz KSBleHBhbmQgdGhlbS4gKi8KLSNpZmRlZiBDT01NRU5UCi1zdGF0aWMgY2hhciAqbHNjbWQgPSAi L2Jpbi9scyAtZCI7ICAgICAgLyogQ29tbWFuZCB0byB1c2UuICovCi0jZWxzZQotc3RhdGljIGNo YXIgKmxzY21kID0gImVjaG8iOyAgICAgICAgICAgIC8qIENvbW1hbmQgdG8gdXNlLiAqLwotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLQotI2lmbmRlZiBOT1BVU0gKLWludAotc2h4cGFuZChwYXQsbmFt bHN0LGxlbikgY2hhciAqcGF0LCAqbmFtbHN0W107IGludCBsZW47IHsKLSAgICBjaGFyICpmZ2J1 ZiA9IE5VTEw7ICAgICAgICAgICAgICAgICAvKiBCdWZmZXIgZm9yIGZvcm1pbmcgbHMgY29tbWFu ZCAqLwotICAgIGNoYXIgKnAsICpxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdvcmtlcnMg Ki8KLQotICAgIGludCBpLCB4LCByZXRjb2RlLCBpdHNhZGlyOwotICAgIGNoYXIgYzsKLQotICAg IHggPSAoaW50KXN0cmxlbihwYXQpICsgKGludClzdHJsZW4obHNjbWQpICsgMzsgLyogTGVuZ3Ro IG9mIGxzIGNvbW1hbmQgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgb2xkbXRjaHM7IGkrKykgeyAg ICAvKiBGcmVlIHByZXZpb3VzIGZpbGUgbGlzdCAqLwotICAgICAgICBpZiAobmFtbHN0W2ldICkg eyAgICAgICAgICAgICAgIC8qIElmIG1lbW9yeSBpcyBhbGxvY2F0ZWQgICovCi0gICAgICAgICAg ICBmcmVlKG5hbWxzdFtpXSk7ICAgICAgICAgICAgLyogRnJlZSB0aGUgbWVtb3J5ICAgICAgICAg Ki8KLSAgICAgICAgICAgIG5hbWxzdFtpXSA9IE5VTEwgOyAgICAgICAgICAvKiBSZW1lbWJlciBu byBtZW1vcnkgaXMgYWxsb2NhdGVkICovCi0gICAgICAgIH0KLSAgICB9Ci0gICAgb2xkbXRjaHMg PSAwIDsgICAgICAgICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgdGhlcmUgYXJlIG5vIG1hdGNo ZXMgKi8KLSAgICBmZ2J1ZiA9IG1hbGxvYyh4KTsgICAgICAgICAgICAgICAgICAvKiBHZXQgYnVm ZmVyIGZvciBjb21tYW5kICovCi0gICAgaWYgKCFmZ2J1ZikgcmV0dXJuKC0xKTsgICAgICAgICAg ICAgLyogRmFpbCBpZiBjYW5ub3QgKi8KLSAgICBja21ha21zZyhmZ2J1Zix4LGxzY21kLCIgIixw YXQsTlVMTCk7IC8qIEZvcm0gdGhlIGNvbW1hbmQgKi8KLSAgICB6eGNtZChaSUZJTEUsZmdidWYp OyAgICAgICAgICAgICAgICAvKiBTdGFydCB0aGUgY29tbWFuZCAqLwotICAgIGkgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgY291bnRlciAqLwotICAgIHAgPSBzY3Jh dGNoOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50IHRvIHNjcmF0Y2ggYXJlYSAqLwot ICAgIHJldGNvZGUgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgIC8qIEFzc3VtZSBmYWlsdXJl ICovCi0gICAgd2hpbGUgKCh4ID0gem1pbmNoYXIoKSkgIT0gLTEpIHsgICAgLyogUmVhZCBjaGFy YWN0ZXJzIGZyb20gY29tbWFuZCAqLwotICAgICAgICBjID0gKGNoYXIpIHg7Ci0gICAgICAgIGlm IChjID09ICcgJyB8fCBjID09ICdcbicpIHsgICAgLyogR290IG5ld2xpbmUgb3Igc3BhY2U/ICov Ci0gICAgICAgICAgICAqcCA9ICdcMCc7ICAgICAgICAgICAgICAgICAgLyogWWVzLCB0ZXJtaW5h dGUgc3RyaW5nICovCi0gICAgICAgICAgICBwID0gc2NyYXRjaDsgICAgICAgICAgICAgICAgLyog UG9pbnQgYmFjayB0byBiZWdpbm5pbmcgKi8KLSAgICAgICAgICAgIGlmICh6Y2hraShwKSA9PSAt MSkgICAgICAgICAvKiBEb2VzIGZpbGUgZXhpc3Q/ICovCi0gICAgICAgICAgICAgIGNvbnRpbnVl OyAgICAgICAgICAgICAgICAgLyogTm8sIGNvbnRpbnVlICovCi0gICAgICAgICAgICBpdHNhZGly ID0gaXNkaXIocCk7ICAgICAgICAgLyogWWVzLCBpcyBpdCBhIGRpcmVjdG9yeT8gKi8KLSAgICAg ICAgICAgIGlmICh4ZGlyb25seSAmJiAhaXRzYWRpcikgICAvKiBXYW50IG9ubHkgZGlycyBidXQg dGhpcyBpc24ndCAqLwotICAgICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgICAgIC8q IHNvIHNraXAuICovCi0gICAgICAgICAgICBpZiAoeGZpbG9ubHkgJiYgaXRzYWRpcikgICAgLyog SXQncyBhIGRpciBidXQgd2FudCBvbmx5IGZpbGVzICovCi0gICAgICAgICAgICAgIGNvbnRpbnVl OyAgICAgICAgICAgICAgICAgLyogc28gc2tpcC4gKi8KLSAgICAgICAgICAgIHggPSAoaW50KXN0 cmxlbihwKTsgICAgICAgICAvKiBLZWVwIC0gZ2V0IGxlbmd0aCBvZiBuYW1lICovCi0gICAgICAg ICAgICBxID0gbWFsbG9jKHgrMSk7ICAgICAgICAgICAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIGl0 ICovCi0gICAgICAgICAgICBpZiAoIXEpIGdvdG8gc2h4ZmluOyAgICAgICAgLyogRmFpbCBpZiBz cGFjZSBjYW4ndCBiZSBvYnRhaW5lZCAqLwotICAgICAgICAgICAgc3RyY3B5KHEsc2NyYXRjaCk7 ICAgICAgICAgIC8qIChzYWZlKSBDb3B5IG5hbWUgdG8gc3BhY2UgKi8KLSAgICAgICAgICAgIG5h bWxzdFtpKytdID0gcTsgICAgICAgICAgICAvKiBDb3B5IHBvaW50ZXIgdG8gbmFtZSBpbnRvIGFy cmF5ICovCi0gICAgICAgICAgICBpZiAoaSA+PSBsZW4pIGdvdG8gc2h4ZmluOyAgLyogRmFpbCBp ZiB0b28gbWFueSAqLwotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8q IFJlZ3VsYXIgY2hhcmFjdGVyICovCi0gICAgICAgICAgICAqcCsrID0gYzsgICAgICAgICAgICAg ICAgICAgLyogQ29weSBpdCBpbnRvIHNjcmF0Y2ggYXJlYSAqLwotICAgICAgICB9Ci0gICAgfQot ICAgIHJldGNvZGUgPSBpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBudW1iZXIg b2YgbWF0Y2hpbmcgZmlsZXMgKi8KLXNoeGZpbjogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBDb21tb24gZXhpdCBwb2ludCAqLwotICAgIGZyZWUoZmdidWYpOyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEZyZWUgY29tbWFuZCBidWZmZXIgKi8KLSAgICBmZ2J1ZiA9IE5VTEw7 Ci0gICAgemNsb3NmKFpJRklMRSk7ICAgICAgICAgICAgICAgICAgICAgLyogRGVsZXRlIHRoZSBj b21tYW5kIGZvcmsuICovCi0gICAgb2xkbXRjaHMgPSBpOyAgICAgICAgICAgICAgICAgICAgICAg LyogUmVtZW1iZXIgaG93IG1hbnkgZmlsZXMgKi8KLSAgICByZXR1cm4ocmV0Y29kZSk7Ci19Ci0j ZW5kaWYgLyogTk9QVVNIICovCi0KLS8qCi0gIERpcmVjdG9yeS1yZWFkaW5nIGZ1bmN0aW9ucyBm b3IgVU5JWCBvcmlnaW5hbGx5IHdyaXR0ZW4gZm9yIEMtS2VybWl0IDQuMAotICBieSBKZWZmIERh bWVucywgQ1VDQ0EsIDE5ODQuCi0qLwotc3RhdGljIGNoYXIgKiB4cGF0ID0gTlVMTDsgICAgICAg ICAgICAgIC8qIEdsb2JhbCBjb3B5IG9mIGZnZW4oKSBwYXR0ZXJuICovCi1zdGF0aWMgY2hhciAq IHhwYXRsYXN0ID0gTlVMTDsgICAgICAgICAgLyogUmlnaHRtb3N0IHNlZ21lbnQgb2YgcGF0dGVy biovCi1zdGF0aWMgaW50IHhwYXRzbGFzaCA9IDA7ICAgICAgICAgICAgICAgLyogU2xhc2ggY291 bnQgaW4gcGF0dGVybiAqLwotc3RhdGljIGludCB4cGF0d2lsZCA9IDA7ICAgICAgICAgICAgICAg IC8qIE9yaWdpbmFsIHBhdHRlcm4gaXMgd2lsZCAqLwotc3RhdGljIGludCB4bGVhZndpbGQgPSAw OyAgICAgICAgICAgICAgIC8qIExhc3Qgc2VnbWVudCBvZiBwYXR0ZXJuIGlzIHdpbGQgKi8KLXN0 YXRpYyBpbnQgeHBhdGFic29sdXRlID0gMDsKLQotI2lmZGVmIGFlZ2lzCi1zdGF0aWMgY2hhciBi c2xhc2g7Ci0jZW5kaWYgLyogYWVnaXMgKi8KLQotCi0vKiAgUyBQIEwgSSBUIFAgQSBUIEggICov Ci0KLS8qCi0gIFNwbGl0cyB0aGUgc2xhc2gtc2VwYXJhdGVkIHBvcnRpb25zIG9mIHRoZSBhcmd1 bWVudCBzdHJpbmcgaW50bwotICBhIGxpc3Qgb2YgcGF0aCBzdHJ1Y3R1cmVzLiAgUmV0dXJucyB0 aGUgaGVhZCBvZiB0aGUgbGlzdC4gIFRoZQotICBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgYnkg bWFsbG9jLCBzbyB0aGV5IG11c3QgYmUgZnJlZWQuCi0gIFNwbGl0cGF0aCBpcyB1c2VkIGludGVy bmFsbHkgYnkgdGhlIGZpbGVuYW1lIGdlbmVyYXRvci4KLQotICBJbnB1dDoKLSAgICBBIHBhdGgg c3RyaW5nLgotCi0gIFJldHVybnM6Ci0gICAgQSBsaW5rZWQgbGlzdCBvZiB0aGUgc2xhc2gtc2Vw YXJhdGVkIHNlZ21lbnRzIG9mIHRoZSBpbnB1dC4KLSovCi1zdGF0aWMgc3RydWN0IHBhdGggKgot c3BsaXRwYXRoKHApIGNoYXIgKnA7IHsKLSAgICBzdHJ1Y3QgcGF0aCAqaGVhZCwqY3VyLCpwcnY7 Ci0gICAgaW50IGk7Ci0KLSAgICBkZWJ1ZyhGMTExLCJzcGxpdHBhdGgiLHAseHJlY3Vyc2l2ZSk7 Ci0gICAgaGVhZCA9IHBydiA9IE5VTEw7Ci0KLSAgICBpZiAoIXApIHJldHVybihOVUxMKTsKLSAg ICBpZiAoISpwKSByZXR1cm4oTlVMTCk7Ci0KLSAgICBpZiAoIXN0cmNtcChwLCIqKiIpKSB7ICAg ICAgICAgICAgICAvKiBGaXggdGhpcyAqLwotICAgICAgICBwID0gIioiOwotICAgIH0KLSAgICBp ZiAoSVNESVJTRVAoKnApKSBwKys7ICAgICAgICAgICAgICAvKiBTa2lwIGxlYWRpbmcgc2xhc2gg aWYgYW55ICovCi0KLSAgICAvKiBNYWtlIGxpbmtlZCBsaXN0IG9mIHBhdGggc2VnbWVudHMgZnJv bSBwYXR0ZXJuICovCi0KLSAgICB3aGlsZSAoKnApIHsKLSAgICAgICAgY3VyID0gKHN0cnVjdCBw YXRoICopIG1hbGxvYyhzaXplb2YgKHN0cnVjdCBwYXRoKSk7Ci0gICAgICAgIC8qIGRlYnVnKEYx MDEsInNwbGl0cGF0aCBtYWxsb2MiLCIiLGN1cik7ICovCi0gICAgICAgIGlmIChjdXIgPT0gTlVM TCkgewotICAgICAgICAgICAgZGVidWcoRjEwMCwic3BsaXRwYXRoIG1hbGxvYyBmYWlsdXJlIiwi IiwwKTsKLSAgICAgICAgICAgIHBydiAtPiBmd2QgPSBOVUxMOwotICAgICAgICAgICAgcmV0dXJu KChzdHJ1Y3QgcGF0aCAqKU5VTEwpOwotICAgICAgICB9Ci0gICAgICAgIGN1ciAtPiBmd2QgPSBO VUxMOwotICAgICAgICBpZiAoaGVhZCA9PSBOVUxMKSAgICAgICAgICAgICAgIC8qIEZpcnN0LCBt YWtlIGxpc3QgaGVhZCAqLwotICAgICAgICAgIGhlYWQgPSBjdXI7Ci0gICAgICAgIGVsc2UgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IGZpcnN0LCBsaW5rIGludG8gY2hhaW4gKi8K LSAgICAgICAgICBwcnYgLT4gZndkID0gY3VyOwotICAgICAgICBwcnYgPSBjdXI7ICAgICAgICAg ICAgICAgICAgICAgIC8qIExpbmsgZnJvbSBwcmV2aW91cyB0byB0aGlzIG9uZSAqLwotCi0jaWZk ZWYgYWVnaXMKLSAgICAgICAgLyogdHJlYXQgYmFja3NsYXNoIGFzICIuLi8iICovCi0gICAgICAg IGlmIChic2xhc2ggJiYgKnAgPT0gYnNsYXNoKSB7Ci0gICAgICAgICAgICBzdHJjcHkoY3VyLT5u cGFydCwgIi4uIik7CS8qIHNhZmUgKi8KLSAgICAgICAgICAgICsrcDsKLSAgICAgICAgfSBlbHNl IHsKLSAgICAgICAgICAgIGZvciAoaT0wOyBpIDwgTUFYTkFNTEVOICYmICpwICYmICpwICE9ICcv JyAmJiAqcCAhPSBic2xhc2g7IGkrKykKLSAgICAgICAgICAgICAgY3VyIC0+IG5wYXJ0W2ldID0g KnArKzsKLSAgICAgICAgICAgIGN1ciAtPiBucGFydFtpXSA9ICdcMCc7ICAgICAvKiBlbmQgdGhp cyBzZWdtZW50ICovCi0gICAgICAgICAgICBpZiAoaSA+PSBNQVhOQU1MRU4pCi0gICAgICAgICAg ICAgIHdoaWxlICgqcCAmJiAqcCAhPSAnLycgJiYgKnAgIT0gYnNsYXNoKQotICAgICAgICAgICAg ICAgIHArKzsKLSAgICAgICAgfQotICAgICAgICBpZiAoKnAgPT0gJy8nKSBwKys7Ci0jZWxzZQot ICAgICAgICAvKiBHZW5lcmFsIGNhc2UgKFVOSVgpICovCi0gICAgICAgIGZvciAoaSA9IDA7IGkg PCBNQVhOQU1MRU4gJiYgIUlTRElSU0VQKCpwKSAmJiAqcCAhPSAnXDAnOyBpKyspIHsKLSAgICAg ICAgICAgIGN1ciAtPiBucGFydFtpXSA9ICpwKys7Ci0gICAgICAgIH0KLQotICAgICAgICBjdXIg LT4gbnBhcnRbaV0gPSAnXDAnOyAgICAgICAgIC8qIEVuZCB0aGlzIHBhdGggc2VnbWVudCAqLwot ICAgICAgICBpZiAoaSA+PSBNQVhOQU1MRU4pCi0gICAgICAgICAgd2hpbGUgKCFJU0RJUlNFUCgq cCkgJiYgKnAgIT0gJ1wwJykgcCsrOwotICAgICAgICBpZiAoSVNESVJTRVAoKnApKQotICAgICAg ICAgIHArKzsKLQotI2VuZGlmIC8qIGFlZ2lzICovCi0gICAgfQotICAgIGlmIChwcnYpIHsKLSAg ICAgICAgbWFrZXN0cigmeHBhdGxhc3QscHJ2IC0+IG5wYXJ0KTsKLSAgICAgICAgZGVidWcoRjEx MCwic3BsaXRwYXRoIHhwYXRsYXN0Iix4cGF0bGFzdCwwKTsKLSAgICB9Ci0jaWZkZWYgREVCVUcK LSAgICAvKiBTaG93IG9yaWdpbmFsIHBhdGggbGlzdCAqLwotICAgIGlmIChkZWJsb2cpIHsKLSAg ICAgICAgZm9yIChpID0gMCwgY3VyID0gaGVhZDsgY3VyOyBpKyspIHsKLSAgICAgICAgICAgIGRl YnVnKEYxMTEsIlNQTElUUEFUSCIsY3VyIC0+IG5wYXJ0LCBpKTsKLSAgICAgICAgICAgIGN1ciA9 IGN1ciAtPiBmd2Q7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICBy ZXR1cm4oaGVhZCk7Ci19Ci0KLS8qICBGIEcgRSBOICAtLSAgR2VuZXJhdGUgRmlsZSBMaXN0ICAq LwotCi0vKgotICBGaWxlIG5hbWUgZ2VuZXJhdG9yLiAgSXQgaXMgcGFzc2VkIGEgc3RyaW5nLCBw b3NzaWJseSBjb250YWluaW5nIHdpbGRjYXJkcywKLSAgYW5kIGFuIGFycmF5IG9mIGNoYXJhY3Rl ciBwb2ludGVycy4gIEl0IGZpbmRzIGFsbCB0aGUgbWF0Y2hpbmcgZmlsZW5hbWVzIGFuZAotICBz dG9yZXMgcG9pbnRlcnMgdG8gdGhlbSBpbiB0aGUgYXJyYXkuICBUaGUgcmV0dXJuZWQgc3RyaW5n cyBhcmUgYWxsb2NhdGVkCi0gIGZyb20gYSBzdGF0aWMgYnVmZmVyIGxvY2FsIHRvIHRoaXMgbW9k dWxlIChzbyB0aGUgY2FsbGVyIGRvZXNuJ3QgaGF2ZSB0bwotICB3b3JyeSBhYm91dCBkZWFsbG9j YXRpbmcgdGhlbSk7IHRoaXMgbWVhbnMgdGhhdCBzdWNjZXNzaXZlIGNhbGxzIHRvIGZnZW4KLSAg d2lsbCB3aXBlIG91dCB0aGUgcmVzdWx0cyBvZiBwcmV2aW91cyBjYWxscy4KLQotICBJbnB1dDoK LSAgICBBIHdpbGRjYXJkIHN0cmluZywgYW4gYXJyYXkgdG8gd3JpdGUgbmFtZXMgdG8sIHRoZSBs ZW5ndGggb2YgdGhlIGFycmF5LgotCi0gIFJldHVybnM6Ci0gICAgVGhlIG51bWJlciBvZiBtYXRj aGVzLgotICAgIFRoZSBhcnJheSBpcyBmaWxsZWQgd2l0aCBmaWxlbmFtZXMgdGhhdCBtYXRjaGVk IHRoZSBwYXR0ZXJuLgotICAgIElmIHRoZXJlIHdhc24ndCBlbm91Z2ggcm9vbSBpbiB0aGUgYXJy YXksIC0xIGlzIHJldHVybmVkLgotCi0gIE9yaWdpbmFsbHkgYnk6IEplZmYgRGFtZW5zLCBDVUND QSwgMTk4NC4gIE1hbnkgY2hhbmdlcyBzaW5jZSB0aGVuLgotKi8KLXN0YXRpYyBpbnQKLWZnZW4o cGF0LHJlc2FycnksbGVuKSBjaGFyICpwYXQsKnJlc2FycnlbXTsgaW50IGxlbjsgewotICAgIHN0 cnVjdCBwYXRoICpoZWFkOwotICAgIGNoYXIgKnNwdHIsICpzOwotICAgIGludCBuOwotCi0jaWZk ZWYgYWVnaXMKLSAgICBjaGFyICpuYW1lY2hhcnM7Ci0gICAgaW50IHRpbGRlID0gMCwgYnF1b3Rl ID0gMDsKLQotICAgIGlmICgobmFtZWNoYXJzID0gZ2V0ZW52KCJOQU1FQ0hBUlMiKSkgIT0gTlVM TCkgewotICAgICAgICBpZiAoY2tzdHJjaHIobmFtZWNoYXJzLCAnficgKSAhPSBOVUxMKSB0aWxk ZSAgPSAnfic7Ci0gICAgICAgIGlmIChja3N0cmNocihuYW1lY2hhcnMsICdcXCcpICE9IE5VTEwp IGJzbGFzaCA9ICdcXCc7Ci0gICAgICAgIGlmIChja3N0cmNocihuYW1lY2hhcnMsICdgJyApICE9 IE5VTEwpIGJxdW90ZSA9ICdgJzsKLSAgICB9IGVsc2UgewotICAgICAgICB0aWxkZSA9ICd+Jzsg YnNsYXNoID0gJ1xcJzsgYnF1b3RlID0gJ2AnOwotICAgIH0KLSAgICBzcHRyID0gc2NyYXRjaDsK LQotICAgIC8qIGNvcHkgImBub2RlX2RhdGEiLCBldGMuIGFuY2hvcnMgKi8KLSAgICBpZiAoYnF1 b3RlICYmICpwYXQgPT0gYnF1b3RlKQotICAgICAgd2hpbGUgKCpwYXQgJiYgKnBhdCAhPSAnLycg JiYgKnBhdCAhPSBic2xhc2gpCi0gICAgICAgICpzcHRyKysgPSAqcGF0Kys7Ci0gICAgZWxzZSBp ZiAodGlsZGUgJiYgKnBhdCA9PSB0aWxkZSkKLSAgICAgICpzcHRyKysgPSAqcGF0Kys7Ci0gICAg d2hpbGUgKCpwYXQgPT0gJy8nKQotICAgICAgKnNwdHIrKyA9ICpwYXQrKzsKLSAgICBpZiAoc3B0 ciA9PSBzY3JhdGNoKSB7Ci0gICAgICAgIHN0cmNweShzY3JhdGNoLCIuLyIpOwkJLyogc2FmZSAq LwotICAgICAgICBzcHRyID0gc2NyYXRjaCsyOwotICAgIH0KLSAgICBpZiAoIShoZWFkID0gc3Bs aXRwYXRoKHBhdCkpKSByZXR1cm4oLTEpOwotCi0jZWxzZSAvKiBub3QgYWVnaXMgKi8KLQotICAg IGRlYnVnKEYxMTEsImZnZW4gcGF0IixwYXQsbGVuKTsKLSAgICBkZWJ1ZyhGMTEwLCJmZ2VuIGN1 cnJlbnQgZGlyZWN0b3J5Iix6Z3RkaXIoKSwwKTsKLSAgICBkZWJ1ZyhGMTAxLCJmZ2VuIHN0YXRo YWNrIiwiIixzdGF0aGFjayk7Ci0KLSAgICBzY3JhdGNoWzBdID0gJ1wwJzsKLSAgICB4cGF0d2ls ZCA9IDA7Ci0gICAgeGxlYWZ3aWxkID0gMDsKLSAgICB4cGF0YWJzb2x1dGUgPSAwOwotCi0gICAg aWYgKCEoaGVhZCA9IHNwbGl0cGF0aChwYXQpKSkgICAgICAgLyogTWFrZSB0aGUgcGF0aCBzZWdt ZW50IGxpc3QgKi8KLQlyZXR1cm4oLTEpOwotCi0gICAgc3B0ciA9IHNjcmF0Y2g7Ci0KLSNpZmRl ZiBDT01NRU5UCi0gICAgaWYgKHN0cm5jbXAocGF0LCIuLyIsMikgJiYgc3RybmNtcChwYXQsIi4u LyIsMykpIHsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0JaWYgKCFJU0RJUlNFUCgqcGF0KSkJCS8q IElmIG5hbWUgaXMgbm90IGFic29sdXRlICovCi0JICAqc3B0cisrID0gJy4nOwkJLyogcHV0ICIu LyIgaW4gZnJvbnQuICovCi0JKnNwdHIrKyA9IERJUlNFUDsKLSNpZmRlZiBDT01NRU5UCi0gICAg fQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAqc3B0ciA9ICdcMCc7Ci0jZW5kaWYgLyogYWVn aXMgKi8KLQotICAgIG1ha2VzdHIoJnhwYXQscGF0KTsgICAgICAgICAgICAgICAgIC8qIFNhdmUg Y29weSBvZiBvcmlnaW5hbCBwYXR0ZXJuICovCi0gICAgZGVidWcoRjExMCwiZmdlbiBzY3JhdGNo IixzY3JhdGNoLDApOwotCi0gICAgZm9yIChuID0gMCwgcyA9IHhwYXQ7ICpzOyBzKyspICAgICAg LyogSG93IG1hbnkgc2xhc2hlcyBpbiB0aGUgcGF0dGVybiAqLwotICAgICAgaWYgKCpzID09IERJ UlNFUCkgICAgICAgICAgICAgICAgIC8qIHNpbmNlIHRoZXNlIGFyZSBmZW5jZXMgZm9yICovCi0g ICAgICAgIG4rKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcGF0dGVybiBtYXRjaGlu ZyAqLwotICAgIHhwYXRzbGFzaCA9IG47Ci0gICAgZGVidWcoRjEwMSwiZmdlbiB4cGF0c2xhc2gi LCIiLHhwYXRzbGFzaCk7Ci0KLSAgICBudW1mbmQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBOb25lIGZvdW5kIHlldCAqLwotCi0gICAgaWYgKGluaXRzcGFjZShyZXNhcnJ5LHNzcGxl bikgPCAwKQotICAgICAgcmV0dXJuKC0xKTsKLQotICAgIHhwYXR3aWxkID0gaXN3aWxkKHhwYXQp OwkJLyogT3JpZ2luYWwgcGF0dGVybiBpcyB3aWxkPyAqLwotICAgIHhwYXRhYnNvbHV0ZSA9IGlz YWJzb2x1dGUoeHBhdCk7Ci0gICAgeGxlYWZ3aWxkID0gaXN3aWxkKHhwYXRsYXN0KTsKLQotICAg IGRlYnVnKEYxMTEsImZnZW4geHBhdCIseHBhdCx4cGF0d2lsZCk7Ci0gICAgZGVidWcoRjExMSwi ZmdlbiB4cGF0bGFzdCIseHBhdGxhc3QseGxlYWZ3aWxkKTsKLSAgICBkZWJ1ZyhGMTAxLCJmZ2Vu IHhwYXRhYnNvbHV0ZSIsIiIseHBhdGFic29sdXRlKTsKLQotICAgIHRyYXZlcnNlKGhlYWQsc2Ny YXRjaCxzcHRyKTsgICAgICAgIC8qIEdvIHdhbGsgdGhlIGRpcmVjdG9yeSB0cmVlLiAqLwotICAg IHdoaWxlIChoZWFkICE9IE5VTEwpIHsgICAgICAgICAgICAgIC8qIERvbmUgLSBmcmVlIHBhdGgg c2VnbWVudCBsaXN0LiAqLwotICAgICAgICBzdHJ1Y3QgcGF0aCAqbmV4dCA9IGhlYWQgLT4gZndk OwotICAgICAgICBmcmVlKChjaGFyICopaGVhZCk7Ci0gICAgICAgIGhlYWQgPSBuZXh0OwotICAg IH0KLSAgICBkZWJ1ZyhGMTAxLCJmZ2VuIiwiIixudW1mbmQpOwotICAgIHJldHVybihudW1mbmQp OyAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgKi8K LX0KLQotLyogRGVmaW5lIExPTkdGTiAobG9uZyBmaWxlIG5hbWVzKSBhdXRvbWF0aWNhbGx5IGZv ciBCU0QgMi45IGFuZCA0LjIgKi8KLS8qIExPTkdGTiBjYW4gYWxzbyBiZSBkZWZpbmVkIG9uIHRo ZSBjYyBjb21tYW5kIGxpbmUuICovCi0KLSNpZmRlZiBCU0QyOQotI2lmbmRlZiBMT05HRk4KLSNk ZWZpbmUgTE9OR0ZOCi0jZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQlNENDIKLSNpZm5kZWYgTE9O R0ZOCi0jZGVmaW5lIExPTkdGTgotI2VuZGlmCi0jZW5kaWYKLQotLyoKLSAgIFQgUiBBIFYgRSBS IFMgRSAgLS0gIFRyYXZlcnNlIGEgZGlyZWN0b3J5IHRyZWUuCi0KLSAgIFdhbGtzIHRoZSBkaXJl Y3RvcnkgdHJlZSBsb29raW5nIGZvciBtYXRjaGVzIHRvIGl0cyBhcmd1bWVudHMuCi0gICBUaGUg YWxnb3JpdGhtIGlzLCBicmllZmx5OgotCi0gICAgSWYgdGhlIGN1cnJlbnQgcGF0dGVybiBzZWdt ZW50IGNvbnRhaW5zIG5vIHdpbGRjYXJkcywgdGhhdAotICAgIHNlZ21lbnQgaXMgYWRkZWQgdG8g d2hhdCB3ZSBhbHJlYWR5IGhhdmUuICBJZiB0aGUgbmFtZSBzbyBmYXIKLSAgICBleGlzdHMsIHdl IGNhbGwgb3Vyc2VsdmVzIHJlY3Vyc2l2ZWx5IHdpdGggdGhlIG5leHQgc2VnbWVudAotICAgIGlu IHRoZSBwYXR0ZXJuIHN0cmluZzsgb3RoZXJ3aXNlLCB3ZSBqdXN0IHJldHVybi4KLQotICAgIElm IHRoZSBjdXJyZW50IHBhdHRlcm4gc2VnbWVudCBjb250YWlucyB3aWxkY2FyZHMsIHdlIG9wZW4g dGhlIG5hbWUKLSAgICB3ZSd2ZSBhY2N1bXVsYXRlZCBzbyBmYXIgKGFzc3VtaW5nIGl0IGlzIHJl YWxseSBhIGRpcmVjdG9yeSksIHRoZW4gcmVhZAotICAgIGVhY2ggZmlsZW5hbWUgaW4gaXQsIGFu ZCwgaWYgaXQgbWF0Y2hlcyB0aGUgd2lsZGNhcmQgcGF0dGVybiBzZWdtZW50LCBhZGQKLSAgICB0 aGF0IGZpbGVuYW1lIHRvIHdoYXQgd2UgaGF2ZSBzbyBmYXIgYW5kIGNhbGwgb3Vyc2VsdmVzIHJl Y3Vyc2l2ZWx5IG9uCi0gICAgdGhlIG5leHQgc2VnbWVudC4KLQotICAgIEZpbmFsbHksIHdoZW4g bm8gbW9yZSBwYXR0ZXJuIHNlZ21lbnRzIHJlbWFpbiwgd2UgYWRkIHdoYXQncyBhY2N1bXVsYXRl ZAotICAgIHNvIGZhciB0byB0aGUgcmVzdWx0IGFycmF5IGFuZCBpbmNyZW1lbnQgdGhlIG51bWJl ciBvZiBtYXRjaGVzLgotCi0gIElucHV0czoKLSAgICBBIHBhdHRlcm4gcGF0aCBsaXN0IChhcyBn ZW5lcmF0ZWQgYnkgc3BsaXRwYXRoKSwgYSBzdHJpbmcgcG9pbnRlciB0aGF0Ci0gICAgcG9pbnRz IHRvIHdoYXQgd2UndmUgdHJhdmVyc2VkIHNvIGZhciAodGhpcyBjYW4gYmUgaW5pdGlhbGl6ZWQg dG8gIi8iCi0gICAgdG8gc3RhcnQgdGhlIHNlYXJjaCBhdCB0aGUgcm9vdCBkaXJlY3RvcnksIG9y IHRvICIuLyIgdG8gc3RhcnQgdGhlCi0gICAgc2VhcmNoIGF0IHRoZSBjdXJyZW50IGRpcmVjdG9y eSksIGFuZCBhIHN0cmluZyBwb2ludGVyIHRvIHRoZSBlbmQgb2YKLSAgICB0aGUgc3RyaW5nIGlu IHRoZSBwcmV2aW91cyBhcmd1bWVudCwgcGx1cyB0aGUgZ2xvYmFsICJyZWN1cnNpdmUiLAotICAg ICJ4bWF0Y2hkb3QiLCBhbmQgInhkaXJvbmx5IiBmbGFncy4KLQotICBSZXR1cm5zOiB2b2lkLCB3 aXRoOgotICAgIG10Y2hzW10gY29udGFpbmluZyB0aGUgYXJyYXkgb2YgZmlsZW5hbWUgc3RyaW5n IHBvaW50ZXJzLCBhbmQ6Ci0gICAgbnVtZm5kIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBmaWxl bmFtZXMuCi0KLSAgQWx0aG91Z2ggaXQgbWlnaHQgYmUgcG9vciBwcmFjdGljZSwgdGhlIG10Y2hz W10gYXJyYXkgaXMgcmV2ZWFsZWQgdG8gdGhlCi0gIG91dHNpZGUgaW4gY2FzZSBpdCBuZWVkcyBp dDsgZm9yIGV4YW1wbGUsIHRvIGJlIHNvcnRlZCBwcmlvciB0byB1c2UuCi0gIChJdCBpcyBwb29y IHByYWN0aWNlIGJlY2F1c2Ugbm90IGFsbCBwbGF0Zm9ybXMgaW1wbGVtZW50IGZpbGUgbGlzdHMg dGhlCi0gIHNhbWUgd2F5OyBzb21lIGRvbid0IHVzZSBhbiBhcnJheSBhdCBhbGwuKQotCi0gIE5v dGUgdGhhdCBhZGRyZXN1bHQoKSBhY3RzIGFzIGEgc2Vjb25kLWxldmVsIGZpbHRlcjsgZHVlIHRv IHNlbGVjdGlvbgotICBjcml0ZXJpYSBvdXRzaWRlIG9mIHRoZSBwYXR0ZXJuLCBpdCBtaWdodCBk ZWNsaW5lIHRvIGFkZCBmaWxlcyB0aGF0Ci0gIHRoaXMgcm91dGluZSBhc2tzIGl0IHRvLCBlLmcu IGJlY2F1c2Ugd2UgYXJlIGNvbGxlY3Rpbmcgb25seSBkaXJlY3RvcnkKLSAgbmFtZXMgYnV0IG5v dCB0aGUgbmFtZXMgb2YgcmVndWxhciBmaWxlcy4KLQotICBXQVJOSU5HOiBJbiB0aGUgY291cnNl IG9mIEMtS2VybWl0IDcuMCBkZXZlbG9wbWVudCwgdGhpcyByb3V0aW5lIGJlY2FtZQotICByaWRp Y3Vsb3VzbHkgY29tcGxleCwgaW4gb3JkZXIgdG8gbWVldCBhcHByb3hpbWF0ZWx5IHNpeHR5IHNw ZWNpZmljCi0gIHJlcXVpcmVtZW50cy4gIERPTidUIEVWRU4gVEhJTksgQUJPVVQgTU9ESUZZSU5H IFRISVMgUk9VVElORSEgIFRydXN0IG1lOwotICBpdCBpcyBub3QgcG9zc2libGUgdG8gZml4IGFu eXRoaW5nIGluIGl0IHdpdGhvdXQgYnJlYWtpbmcgc29tZXRoaW5nIGVsc2UuCi0gIFRoaXMgcm91 dGluZSBiYWRseSBuZWVkcyBhIHRvdGFsIHJlZGVzaWduIGFuZCByZXdyaXRlLiAgTm90ZTogVGhl cmUgbWF5Ci0gIGJlIHNvbWUgZ29vZCBhcHBsaWNhdGlvbnMgZm9yIHJlYWxwYXRoKCkgYW5kL29y IHNjYW5kaXIoKSBhbmQvb3IgZnRzX2JsYWgoKQotICBoZXJlLCBvbiBwbGF0Zm9ybXMgd2hlcmUg dGhleSBhcmUgYXZhaWxhYmxlLgotKi8KLXN0YXRpYyBWT0lECi10cmF2ZXJzZShwbCxzb2Zhcixl bmRjdXIpIHN0cnVjdCBwYXRoICpwbDsgY2hhciAqc29mYXIsICplbmRjdXI7IHsKLQotLyogQXBw cm9wcmlhdGUgZGVjbGFyYXRpb25zIGZvciBkaXJlY3Rvcnkgcm91dGluZXMgYW5kIHN0cnVjdHVy ZXMgKi8KLS8qICNkZWZpbmUgT1BFTkRJUiBtZWFucyB0byB1c2Ugb3BlbmRpcigpLCByZWFkZGly KCksIGNsb3NlZGlyKCkgICovCi0vKiBJZiBPUEVORElSIG5vdCBkZWZpbmVkLCB3ZSB1c2Ugb3Bl bigpLCByZWFkKCksIGNsb3NlKCkgKi8KLQotI2lmZGVmIERJUkVOVCAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIE5ldyB3YXksIDxkaXJlbnQuaD4gKi8KLSNkZWZpbmUgT1BFTkRJUgotICAg IERJUiAqZmQsICpvcGVuZGlyKCk7Ci0gICAgc3RydWN0IGRpcmVudCAqZGlyYnVmOwotICAgIHN0 cnVjdCBkaXJlbnQgKnJlYWRkaXIoKTsKLSNlbHNlIC8qICFESVJFTlQgKi8KLSNpZmRlZiBMT05H Rk4gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPbGQgd2F5LCA8ZGlyLmg+IHdpdGggb3Bl bmRpcigpICovCi0jZGVmaW5lIE9QRU5ESVIKLSAgICBESVIgKmZkLCAqb3BlbmRpcigpOwotICAg IHN0cnVjdCBkaXJlY3QgKmRpcmJ1ZjsKLSNlbHNlIC8qICFMT05HRk4gKi8KLSAgICBpbnQgZmQ7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPbGQgd2F5LCA8ZGlyLmg+IHdpdGggb3Bl bigpICovCi0gICAgc3RydWN0IGRpcmVjdCBkaXJfZW50cnk7Ci0gICAgc3RydWN0IGRpcmVjdCAq ZGlyYnVmID0gJmRpcl9lbnRyeTsKLSNlbmRpZiAvKiBMT05HRk4gKi8KLSNlbmRpZiAvKiBESVJF TlQgKi8KLSAgICBpbnQgbW9wdHMgPSAwOwkJCS8qIGNrbWF0Y2goKSBvcHRzICovCi0gICAgaW50 IGRlcHRoID0gMDsJCQkvKiBEaXJlY3RvcnkgdHJlZSBkZXB0aCAqLwotCi0gICAgY2hhciBuYW1i dWZbTUFYTkFNTEVOKzRdOyAgICAgICAgICAgLyogQnVmZmVyIGZvciBhIGZpbGVuYW1lICovCi0g ICAgaW50IGl0c2FkaXIgPSAwLCBzZWdpc2RpciA9IDAsIGl0c3dpbGQgPSAwLCBtcmVzdWx0LCBu LCB4IC8qICwgeSAqLyA7Ci0gICAgc3RydWN0IHN0YXQgc3RhdGJ1ZjsgICAgICAgICAgICAgICAg LyogRm9yIGZpbGUgaW5mby4gKi8KLQotICAgIGRlYnVnKEYxMDEsIlNUQVQiLCIiLDE2KTsKLSAg ICBpZiAocGwgPT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgcGF0aC1zZWdt ZW50IGxpc3QgKi8KLSAgICAgICAgKi0tZW5kY3VyID0gJ1wwJzsgLyogVGVybWluYXRlIHN0cmlu Zywgb3ZlcndyaXRlIHRyYWlsaW5nIHNsYXNoICovCi0gICAgICAgIGRlYnVnKEYxMTAsInRyYXZl cnNlIGFkZDogZW5kIG9mIHBhdGggc2VnbWVudCIsc29mYXIsMCk7Ci0gICAgICAgIGFkZHJlc3Vs dChzb2ZhciwtMSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHN0YXRoYWNrKSB7 Ci0JLyogVGhpcyBzcGVlZHMgdXAgdGhlIHNlYXJjaCBhIGxvdCBhbmQgd2Ugc3RpbGwgZ2V0IGdv b2QgcmVzdWx0cyAqLwotCS8qIGJ1dCBpdCBicmVha3MgdGhlIHRhZ2dpbmcgb2YgZGlyZWN0b3J5 IG5hbWVzIGRvbmUgaW4gYWRkcmVzdWx0ICovCi0JaWYgKHhyZWN1cnNpdmUgfHwgeGZpbG9ubHkg fHwgeGRpcm9ubHkgfHwgeHBhdHNsYXNoKSB7Ci0JICAgIGl0c2FkaXIgPSB4aXNkaXIoc29mYXIp OwotCSAgICBkZWJ1ZyhGMTAxLCJTVEFUIiwiIiwxNyk7Ci0JfSBlbHNlCi0JICBpdHNhZGlyID0g KHN0cm5jbXAoc29mYXIsIi4vIiwyKSA9PSAwKTsKLSAgICB9IGVsc2UgewotCWl0c2FkaXIgPSB4 aXNkaXIoc29mYXIpOwotCWRlYnVnKEYxMDEsIlNUQVQiLCIiLDE4KTsKLSAgICB9Ci0gICAgZGVi dWcoRjExMSwidHJhdmVyc2UgZW50cnkgc29mYXIiLHNvZmFyLGl0c2FkaXIpOwotCi0jaWZkZWYg Q0tTWU1MSU5LICAgICAgICAgICAgICAgICAgICAgICAgLyogV2UncmUgZG9pbmcgc3ltbGlua3M/ ICovCi0jaWZkZWYgVVNFX0xTVEFUICAgICAgICAgICAgICAgICAgICAgICAgLyogT0sgdG8gdXNl IGxzdGF0KCk/ICovCi0gICAgaWYgKGl0c2FkaXIgJiYgeG5vbGlua3MpIHsJCS8qIElmIG5vdCBm b2xsb3dpbmcgc3ltbGlua3MgKi8KLQlpbnQgeDsKLQlzdHJ1Y3Qgc3RhdCBidWY7Ci0JeCA9IGxz dGF0KHNvZmFyLCZidWYpOwotCWRlYnVnKEYxMTEsInRyYXZlcnNlIGxzdGF0IDEiLHNvZmFyLHgp OwotCWlmICh4ID4gLTEgJiYKLSNpZmRlZiBTX0lTTE5LCi0JICAgIFNfSVNMTksoYnVmLnN0X21v ZGUpCi0jZWxzZQotI2lmZGVmIF9JRkxOSwotCSAgICAoKF9JRk1UICYgYnVmLnN0X21vZGUpID09 IF9JRkxOSykKLSNlbmRpZiAvKiBfSUZMTksgKi8KLSNlbmRpZiAvKiBTX0lTTE5LICovCi0JICAg ICkKLQkgIGl0c2FkaXIgPSAwOwotICAgIH0KLSNlbmRpZiAvKiBVU0VfTFNUQVQgKi8KLSNlbmRp ZiAvKiBDS1NZTUxJTksgKi8KLQotICAgIGlmICgheG1hdGNoZG90ICYmIHhwYXRsYXN0WzBdID09 ICcuJykKLSAgICAgIHhtYXRjaGRvdCA9IDE7Ci0gICAgaWYgKCF4bWF0Y2hkb3QgJiYgeHBhdFsw XSA9PSAnLicgJiYgeHBhdFsxXSAhPSAnLycgJiYgeHBhdFsxXSAhPSAnLicpCi0gICAgICB4bWF0 Y2hkb3QgPSAxOwotCi0gICAgLyogY2ttYXRjaCgpIG9wdGlvbnMgKi8KLQotICAgIGlmICh4bWF0 Y2hkb3QpICAgbW9wdHMgfD0gMTsJLyogTWF0Y2ggZG90ICovCi0gICAgaWYgKCF4cmVjdXJzaXZl KSBtb3B0cyB8PSAyOwkvKiBEaXJzZXAgaXMgZmVuY2UgKi8KLQotICAgIGRlYnVnKEYxMTEsInRy YXZlcnNlIGVudHJ5IHhwYXQiLHhwYXQseHBhdHNsYXNoKTsKLSAgICBkZWJ1ZyhGMTExLCJ0cmF2 ZXJzZSBlbnRyeSB4cGF0bGFzdCIseHBhdGxhc3QseG1hdGNoZG90KTsKLSAgICBkZWJ1ZyhGMTEw LCJ0cmF2ZXJzZSBlbnRyeSBwbCAtPiBucGFydCIscGwgLT4gbnBhcnQsMCk7Ci0KLSNpZmRlZiBS RUNVUlNJVkUKLSAgICBpZiAoeHJlY3Vyc2l2ZSA+IDAgJiYgIWl0c2FkaXIpIHsKLSAgICAgICAg Y2hhciAqIHM7ICAgICAgICAgLyogUmVjdXJzaXZlIGRlc2NlbnQgYW5kIHRoaXMgaXMgYSByZWd1 bGFyIGZpbGUgKi8KLSAgICAgICAgKi0tZW5kY3VyID0gJ1wwJzsgLyogVGVybWluYXRlIHN0cmlu Zywgb3ZlcndyaXRlIHRyYWlsaW5nIHNsYXNoICovCi0KLSAgICAgICAgLyogRmluZCB0aGUgbnRo IHNsYXNoIGZyb20gdGhlIHJpZ2h0IGFuZCBtYXRjaCBmcm9tIHRoZXJlLi4uICovCi0gICAgICAg IC8qIChuID09IHRoZSBudW1iZXIgb2Ygc2xhc2hlcyBpbiB0aGUgb3JpZ2luYWwgcGF0dGVybiAt IHNlZSBmZ2VuKSAqLwotICAgICAgICBpZiAoKnNvZmFyID09ICcvJykgewotICAgICAgICAgICAg ZGVidWcoRjExMCwidHJhdmVyc2UgeHBhdHNsYXNoIGFic29sdXRlIixzb2ZhciwwKTsKLSAgICAg ICAgICAgIHMgPSBzb2ZhcjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlYnVnKEYx MTEsInRyYXZlcnNlIHhwYXRzbGFzaCByZWxhdGl2ZSIsc29mYXIseHBhdHNsYXNoKTsKLSAgICAg ICAgICAgIGZvciAocyA9IGVuZGN1ciAtIDEsIG4gPSAwOyBzID49IHNvZmFyOyBzLS0pIHsKLSAg ICAgICAgICAgICAgICBpZiAoKnMgPT0gJy8nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgr K24gPj0geHBhdHNsYXNoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzKys7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2lmbmRlZiBOT1NLSVBNQVRDSAot CS8qIFRoaXMgc3BlZWRzIHRoaW5ncyB1cCBhIGJpdC4gKi8KLQkvKiBJZiBpdCBjYXVzZXMgdHJv dWJsZSBkZWZpbmUgTk9TS0lQTUFUQ0ggYW5kIHJlYnVpbGQuICovCi0JaWYgKHhwYXRbMF0gPT0g JyonICYmICF4cGF0WzFdKQotCSAgeCA9IHhtYXRjaGRvdCA/IDEgOiAoc1swXSAhPSAnLicpOwot CWVsc2UKLSNlbmRpZiAvKiBOT1NLSVBNQVRDSCAqLwotCSAgeCA9IGNrbWF0Y2goeHBhdCwgcywg MSwgbW9wdHMpOyAvKiBNYXRjaCB3aXRoIG9yaWdpbmFsIHBhdHRlcm4gKi8KLSAgICAgICAgZGVi dWcoRjExMSwidHJhdmVyc2UgeHBhdHNsYXNoIGNrbWF0Y2giLHMseCk7Ci0gICAgICAgIGlmICh4 ID4gMCkgewotICAgICAgICAgICAgZGVidWcoRjExMCwidHJhdmVyc2UgYWRkOiByZWN1cnNpdmUs IG1hdGNoLCAmJiAhaXNkaXIiLHNvZmFyLDApOwotICAgICAgICAgICAgYWRkcmVzdWx0KHNvZmFy LGl0c2FkaXIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYgLyog UkVDVVJTSVZFICovCi0KLSAgICBkZWJ1ZyhGMTExLCJ0cmF2ZXJzZSBzb2ZhciAyIixzb2Zhciww KTsKLQotICAgIHNlZ2lzZGlyID0gKChwbCAtPiBmd2QpID09IE5VTEwpID8gMCA6IDE7Ci0gICAg aXRzd2lsZCA9IHdpbGRlbmEgPyAoaXN3aWxkKHBsIC0+IG5wYXJ0KSkgOiAwOyAvKiAxNSBKdW4g MjAwNSAqLwotCi0gICAgZGVidWcoRjExMSwidHJhdmVyc2Ugc2VnaXNkaXIiLHNvZmFyLHNlZ2lz ZGlyKTsKLSAgICBkZWJ1ZyhGMTExLCJ0cmF2ZXJzZSBpdHN3aWxkICIscGwgLT4gbnBhcnQsaXRz d2lsZCk7Ci0KLSNpZmRlZiBSRUNVUlNJVkUKLSAgICBpZiAoeHJlY3Vyc2l2ZSA+IDApIHsgICAg ICAgICAgICAgICAvKiBJZiByZWN1cnNpbmcgYW5kLi4uICovCi0gICAgICAgIGlmIChzZWdpc2Rp ciAmJiBpdHN3aWxkKSAgICAgICAgLyogdGhpcyBpcyBhIGRpciBhbmQgbnBhcnQgaXMgd2lsZCAq LwotICAgICAgICAgIGdvdG8gYmxhaDsgICAgICAgICAgICAgICAgICAgIC8qIG9yLi4uICovCi0g ICAgICAgIGVsc2UgaWYgKCF4cGF0YWJzb2x1dGUgJiYgIXhwYXR3aWxkKSAvKiBzZWFyY2ggb2Jq ZWN0IGlzIG5vbndpbGQgKi8KLSAgICAgICAgICBnb3RvIGJsYWg7ICAgICAgICAgICAgICAgICAg ICAvKiB0aGVuIGdvIHJlY3Vyc2UgKi8KLSAgICB9Ci0jZW5kaWYgLyogUkVDVVJTSVZFICovCi0K LSAgICBpZiAoIWl0c3dpbGQpIHsgICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIHBhdGggc2Vn bWVudCBub3Qgd2lsZD8gKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIHN0cmNweShlbmRjdXIs cGwgLT4gbnBhcnQpOyAgICAgLyogKHNhZmUpIEFwcGVuZCBuZXh0IHBhcnQuICovCi0gICAgICAg IGVuZGN1ciArPSAoaW50KXN0cmxlbihwbCAtPiBucGFydCk7IC8qIEFkdmFuY2UgZW5kIHBvaW50 ZXIgKi8KLSNlbHNlCi0vKgotICBzdHJjcHkoKSBkb2VzIG5vdCBhY2NvdW50IGZvciBxdW90ZWQg bWV0YWNoYXJhY3RlcnMuCi0gIFdlIG11c3QgcmVtb3ZlIHRoZSBxdW90ZXMgYmVmb3JlIGRvaW5n IHRoZSBzdGF0KCkuCi0qLwotCXsKLQkgICAgaW50IHF1b3RlID0gMDsKLQkgICAgY2hhciBjLCAq IHM7Ci0JICAgIHMgPSBwbCAtPiBucGFydDsKLQkgICAgd2hpbGUgKChjID0gKnMrKykpIHsKLQkJ aWYgKCFxdW90ZSkgewotCQkgICAgaWYgKGMgPT0gQ01EUSkgewotCQkJcXVvdGUgPSAxOwotCQkJ Y29udGludWU7Ci0JCSAgICB9Ci0JCX0KLQkJKmVuZGN1cisrID0gYzsKLQkJcXVvdGUgPSAwOwot CSAgICB9Ci0JfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgKmVuZGN1ciA9ICdcMCc7 ICAgICAgICAgICAgICAgICAvKiBFbmQgbmV3IGN1cnJlbnQgc3RyaW5nLiAqLwotCi0gICAgICAg IGlmIChzdGF0KHNvZmFyLCZzdGF0YnVmKSA9PSAwKSB7IC8qIElmIHRoaXMgcGllY2UgZXhpc3Rz Li4uICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ0cmF2ZXJzZSBleGlzdHMiLHNvZmFyLDAp OwotICAgICAgICAgICAgKmVuZGN1cisrID0gRElSU0VQOyAgICAgICAgIC8qIGFkZCBzbGFzaCB0 byBlbmQgKi8KLSAgICAgICAgICAgICplbmRjdXIgPSAnXDAnOyAgICAgICAgICAgICAvKiBhbmQg ZW5kIHRoZSBzdHJpbmcgYWdhaW4uICovCi0gICAgICAgICAgICB0cmF2ZXJzZShwbCAtPiBmd2Qs IHNvZmFyLCBlbmRjdXIpOwotICAgICAgICB9Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgZWxzZSBk ZWJ1ZyhGMTEwLCJ0cmF2ZXJzZSBub3QgZm91bmQiLCBzb2ZhciwgMCk7Ci0jZW5kaWYgLyogREVC VUcgKi8KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgICplbmRjdXIgPSAnXDAnOyAgICAg ICAgICAgICAgICAgICAgIC8qIEVuZCBjdXJyZW50IHN0cmluZyAqLwotICAgIGRlYnVnKEYxMTEs InRyYXZlcnNlIHNvZmFyIDMiLHNvZmFyLDApOwotCi0gICAgaWYgKCFpdHNhZGlyKQotICAgICAg cmV0dXJuOwotCi0gICAgLyogU2VhcmNoIGlzIHJlY3Vyc2l2ZSBvciAuLi4gKi8KLSAgICAvKiBw YXRoIHNlZ21lbnQgY29udGFpbnMgd2lsZGNhcmRzLCBoYXZlIHRvIG9wZW4gYW5kIHNlYXJjaCBk aXJlY3RvcnkuICovCi0KLSAgYmxhaDoKLQotICAgIGRlYnVnKEYxMTAsInRyYXZlcnNlIG9wZW5p bmcgZGlyZWN0b3J5Iiwgc29mYXIsIDApOwotCi0jaWZkZWYgT1BFTkRJUgotICAgIGRlYnVnKEYx MTAsInRyYXZlcnNlIG9wZW5kaXIoKSIsc29mYXIsMCk7Ci0gICAgaWYgKChmZCA9IG9wZW5kaXIo c29mYXIpKSA9PSBOVUxMKSB7ICAgICAgICAvKiBDYW4ndCBvcGVuLCBmYWlsLiAqLwotICAgICAg ICBkZWJ1ZyhGMTAxLCJ0cmF2ZXJzZSBvcGVuZGlyKCkgZmFpbGVkIiwiIixlcnJubyk7Ci0gICAg ICAgIHJldHVybjsKLSAgICB9Ci0gICAgd2hpbGUgKChkaXJidWYgPSByZWFkZGlyKGZkKSkpCi0j ZWxzZSAvKiAhT1BFTkRJUiAqLwotICAgIGRlYnVnKEYxMTAsInRyYXZlcnNlIGRpcmVjdG9yeSBv cGVuKCkiLHNvZmFyLDApOwotICAgIGlmICgoZmQgPSBvcGVuKHNvZmFyLE9fUkRPTkxZKSkgPCAw KSB7Ci0gICAgICAgIGRlYnVnKEYxMDEsInRyYXZlcnNlIGRpcmVjdG9yeSBvcGVuKCkgZmFpbGVk IiwiIixlcnJubyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgd2hpbGUgKHJlYWQoZmQs IChjaGFyICopZGlyYnVmLCBzaXplb2YgZGlyX2VudHJ5KSA+IDApCi0jZW5kaWYgLyogT1BFTkRJ UiAqLwotICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWFkIGVhY2ggZW50cnkg aW4gdGhpcyBkaXJlY3RvcnkgKi8KLSAgICAgICAgICBpbnQgZXhpc3RzOwotICAgICAgICAgIGNo YXIgKmVvcywgKnM7Ci0gICAgICAgICAgZXhpc3RzID0gMDsKLQotICAgICAgICAgIC8qIE9uIHNv bWUgcGxhdGZvcm1zLCB0aGUgcmVhZFtkaXJdKCkgY2FuIHJldHVybiBkZWxldGVkIGZpbGVzLCAq LwotICAgICAgICAgIC8qIGUuZy4gSFAtVVggNS4wMC4gIFRoZXJlIGlzIG5vIHBvaW50IGluIGdy aW5kaW5nIHRocm91Z2ggdGhpcyAqLwotICAgICAgICAgIC8qIHJvdXRpbmUgd2hlbiB0aGUgZmls ZSBkb2Vzbid0IGV4aXN0Li4uICovCi0KLSAgICAgICAgICBpZiAoICAgICAgICAgIC8qIFRoZXJl ICBhY3R1YWxseSBpcyBhbiBpbm9kZS4uLiAqLwotI2lmZGVmIEJTRDQyCi0gICAgICAgICAgICAg ICAgICAgICAgICAgZGlyYnVmLT5kX2lubyAhPSAtMQotI2Vsc2UKLSNpZmRlZiB1bm9zCi0gICAg ICAgICAgICAgICAgICAgICAgICAgZGlyYnVmLT5kX2lubyAhPSAtMQotI2Vsc2UKLSNpZmRlZiBR TlgKLSAgICAgICAgICAgICAgICAgICAgICAgICBkaXJidWYtPmRfc3RhdC5zdF9pbm8gIT0gMAot I2Vsc2UKLSNpZmRlZiBTT0xBUklTCi0gICAgICAgICAgICAgICAgICAgICAgICAgZGlyYnVmLT5k X2lubyAhPSAwCi0jZWxzZQotI2lmZGVmIHN1bgotICAgICAgICAgICAgICAgICAgICAgICAgIGRp cmJ1Zi0+ZF9maWxlbm8gIT0gMAotI2Vsc2UKLSNpZmRlZiBic2RpCi0gICAgICAgICAgICAgICAg ICAgICAgICAgZGlyYnVmLT5kX2ZpbGVubyAhPSAwCi0jZWxzZQotI2lmZGVmIF9fMzg2QlNEX18K LSAgICAgICAgICAgICAgICAgICAgICAgICBkaXJidWYtPmRfZmlsZW5vICE9IDAKLSNlbHNlCi0j aWZkZWYgX19GcmVlQlNEX18KLSAgICAgICAgICAgICAgICAgICAgICAgICBkaXJidWYtPmRfZmls ZW5vICE9IDAKLSNlbHNlCi0jaWZkZWYgdWx0cml4Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ZGlyYnVmLT5nZF9pbm8gIT0gMAotI2Vsc2UKLSNpZmRlZiBQbGFuOQotICAgICAgICAgICAgICAg ICAgICAgICAgIDEKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgZGlyYnVmLT5kX2lu byAhPSAwCi0jZW5kaWYgLyogUGxhbjkgKi8KLSNlbmRpZiAvKiB1bHRyaXggKi8KLSNlbmRpZiAv KiBfX0ZyZWVCU0RfXyAqLwotI2VuZGlmIC8qIF9fMzg2QlNEX18gKi8KLSNlbmRpZiAvKiBic2Rp ICovCi0jZW5kaWYgLyogc3VuICovCi0jZW5kaWYgLyogU09MQVJJUyAqLwotI2VuZGlmIC8qIFFO WCAqLwotI2VuZGlmIC8qIHVub3MgKi8KLSNlbmRpZiAvKiBCU0Q0MiAqLwotICAgICAgICAgICAg ICApCi0gICAgICAgICAgICBleGlzdHMgPSAxOwotICAgICAgICAgIGlmICghZXhpc3RzKQotICAg ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICBja3N0cm5jcHkobmFtYnVmLCAgICAgICAg ICAgICAvKiBDb3B5IHRoZSBuYW1lICovCi0gICAgICAgICAgICAgICAgICBkaXJidWYtPmRfbmFt ZSwKLSAgICAgICAgICAgICAgICAgIE1BWE5BTUxFTgotICAgICAgICAgICAgICAgICAgKTsKLSAg ICAgICAgICBpZiAobmFtYnVmWzBdID09ICcuJykgewotICAgICAgICAgICAgICBpZiAoIW5hbWJ1 ZlsxXSB8fCAobmFtYnVmWzFdID09ICcuJyAmJiAhbmFtYnVmWzJdKSkgewotICAgICAgICAgICAg ICAgICAgZGVidWcoRjExMCwidHJhdmVyc2Ugc2tpcHBpbmciLG5hbWJ1ZiwwKTsKLSAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAvKiBza2lwICIuIiBhbmQgIi4uIiAqLwot ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIHMgPSBuYW1idWY7ICAgICAg ICAgICAgICAgICAgIC8qIENvcHkgbmFtZSB0byBlbmQgb2Ygc29mYXIgKi8KLSAgICAgICAgICBl b3MgPSBlbmRjdXI7Ci0gICAgICAgICAgd2hpbGUgKCgqZW9zID0gKnMpKSB7Ci0gICAgICAgICAg ICAgIHMrKzsKLSAgICAgICAgICAgICAgZW9zKys7Ci0gICAgICAgICAgfQotLyoKLSAgTm93IHdl IGNoZWNrIHRoZSBmaWxlIGZvciAoYSkgd2hldGhlciBpdCBpcyBhIGRpcmVjdG9yeSwgYW5kIChi KSB3aGV0aGVyCi0gIGl0cyBuYW1lIG1hdGNoZXMgb3VyIHBhdHRlcm4uICBJZiBpdCBpcyBhIGRp cmVjdG9yeSwgYW5kIGlmIHdlIGhhdmUgYmVlbgotICB0b2xkIHRvIGJ1aWxkIGEgcmVjdXJzaXZl IGxpc3QsIHRoZW4gd2UgbXVzdCBkZXNjZW5kIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlcgotICBpdCBt YXRjaGVzIHRoZSBwYXR0ZXJuLiAgSWYgaXQgaXMgbm90IGEgZGlyZWN0b3J5IGFuZCBpdCBkb2Vz IG5vdCBtYXRjaAotICBvdXIgcGF0dGVybiwgd2Ugc2tpcCBpdC4gIE5vdGU6IHNvZmFyIGlzIHRo ZSBmdWxsIHBhdGhuYW1lLCBuYW1idWYgaXMKLSAgdGhlIG5hbWUgb25seS4KLSovCi0gICAgICAg ICAgLyogRG8gdGhpcyBmaXJzdCB0byBzYXZlIHBvaW50bGVzcyBmdW5jdGlvbiBjYWxscyAqLwot ICAgICAgICAgIGlmIChuYW1idWZbMF0gPT0gJy4nICYmICF4bWF0Y2hkb3QpIC8qIERpciBuYW1l IHN0YXJ0cyB3aXRoICcuJyAqLwotICAgICAgICAgICAgY29udGludWU7Ci0JICBpZiAoc3RhdGhh Y2spIHsKLQkgICAgICBpZiAoeHJlY3Vyc2l2ZSB8fCB4Zmlsb25seSB8fCB4ZGlyb25seSB8fCB4 cGF0c2xhc2gpIHsKLQkJICBpdHNhZGlyID0geGlzZGlyKHNvZmFyKTsgLyogU2VlIGlmIGl0J3Mg YSBkaXJlY3RvcnkgKi8KLQkJICBkZWJ1ZyhGMTAxLCJTVEFUIiwiIiwxOSk7Ci0JICAgICAgfSBl bHNlIHsKLQkJICBpdHNhZGlyID0gMDsKLQkgICAgICB9Ci0JICB9IGVsc2UgewotCSAgICAgIGl0 c2FkaXIgPSB4aXNkaXIoc29mYXIpOwotCSAgICAgIGRlYnVnKEYxMDEsIlNUQVQiLCIiLDIwKTsK LQkgIH0KLQotI2lmZGVmIENLU1lNTElOSwotI2lmZGVmIFVTRV9MU1RBVAotCSAgaWYgKGl0c2Fk aXIgJiYgeG5vbGlua3MpIHsJCS8qIElmIG5vdCBmb2xsb3dpbmcgc3ltbGlua3MgKi8KLQkgICAg ICBpbnQgeDsKLQkgICAgICBzdHJ1Y3Qgc3RhdCBidWY7Ci0JICAgICAgeCA9IGxzdGF0KHNvZmFy LCZidWYpOwotCSAgICAgIGRlYnVnKEYxMTEsInRyYXZlcnNlIGxzdGF0IDIiLHNvZmFyLHgpOwot CSAgICAgIGlmICh4ID4gLTEgJiYKLSNpZmRlZiBTX0lTTE5LCi0JCSAgU19JU0xOSyhidWYuc3Rf bW9kZSkKLSNlbHNlCi0jaWZkZWYgX0lGTE5LCi0JCSAgKChfSUZNVCAmIGJ1Zi5zdF9tb2RlKSA9 PSBfSUZMTkspCi0jZW5kaWYgLyogX0lGTE5LICovCi0jZW5kaWYgLyogU19JU0xOSyAqLwotCQkg ICkKLQkJaXRzYWRpciA9IDA7Ci0JICB9Ci0jZW5kaWYgLyogVVNFX0xTVEFUICovCi0jZW5kaWYg LyogQ0tTWU1MSU5LICovCi0KLSNpZmRlZiBSRUNVUlNJVkUKLSAgICAgICAgICBpZiAoeHJlY3Vy c2l2ZSA+IDAgJiYgaXRzYWRpciAmJgotICAgICAgICAgICAgICAoeHBhdGxhc3RbMF0gPT0gJyon KSAmJiAheHBhdGxhc3RbMV0KLSAgICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAgIGRlYnVn KEYxMTAsCi0gICAgICAgICAgICAgICAgICAgICJ0cmF2ZXJzZSBhZGQ6IHJlY3Vyc2l2ZSAmJiBp c2RpciAmJiBzZWdpc2RpciBvciBtYXRjaCIsCi0gICAgICAgICAgICAgICAgICAgIHNvZmFyLAot ICAgICAgICAgICAgICAgICAgICBzZWdpc2RpcgotICAgICAgICAgICAgICAgICAgICApOwotCSAg ICAgIGFkZHJlc3VsdChzb2ZhcixpdHNhZGlyKTsKLQkgICAgICBpZiAobnVtZm5kIDwgMCkgcmV0 dXJuOwotICAgICAgICAgIH0KLSNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KLQotICAgICAgICAgIGRl YnVnKEYxMTEsInRyYXZlcnNlIG1yZXN1bHQgeHBhdCIseHBhdCx4cmVjdXJzaXZlKTsKLSAgICAg ICAgICBkZWJ1ZyhGMTExLCJ0cmF2ZXJzZSBtcmVzdWx0IHBsIC0+IG5wYXJ0IiwKLSAgICAgICAg ICAgICAgICBwbCAtPiBucGFydCwKLSAgICAgICAgICAgICAgICAoKHBsIC0+IGZ3ZCkgPyA5OTk5 IDogMCkKLSAgICAgICAgICAgICAgICApOwotICAgICAgICAgIGRlYnVnKEYxMTEsInRyYXZlcnNl IG1yZXN1bHQgc29mYXIgc2VnaXNkaXIiLHNvZmFyLHNlZ2lzZGlyKTsKLSAgICAgICAgICBkZWJ1 ZyhGMTExLCJ0cmF2ZXJzZSBtcmVzdWx0IHNvZmFyIGl0c2FkaXIiLHNvZmFyLGl0c2FkaXIpOwot ICAgICAgICAgIGRlYnVnKEYxMDEsInRyYXZlcnNlIG1yZXN1bHQgeG1hdGNoZG90IiwiIix4bWF0 Y2hkb3QpOwotLyoKLSAgTWF0Y2ggdGhlIHBhdGggc28gZmFyIHdpdGggdGhlIHBhdHRlcm4gYWZ0 ZXIgc3RyaXBwaW5nIGFueSBsZWFkaW5nICIuLyIKLSAgZnJvbSBlaXRoZXIgb3IgYm90aC4gIFRo ZSBwYXR0ZXJuIGNob3NlbiBpcyB0aGUgZnVsbCBvcmlnaW5hbCBwYXR0ZXJuIGlmCi0gIHRoZSBt YXRjaCBjYW5kaWRhdGUgKHNvZmFyKSBpcyBub3QgYSBkaXJlY3RvcnksIG9yIGVsc2UganVzdCB0 aGUgbmFtZSBwYXJ0Ci0gIChwbC0+bnBhcnQpIGlmIGl0IGlzLgotKi8KLQkgIHsKLQkgICAgICBj aGFyICogczE7CQkvKiBUaGUgcGF0dGVybiAqLwotCSAgICAgIGNoYXIgKiBzMiA9IHNvZmFyOwkv KiBUaGUgcGF0aCBzbyBmYXIgKi8KLQkgICAgICBjaGFyICogczM7CQkvKiBXb3JrZXIgKi8KLQkg ICAgICBpbnQgb3B0czsJCQkvKiBNYXRjaCBvcHRpb25zICovCi0KLQkgICAgICBzMSA9IGl0c2Fk aXIgPyBwbC0+bnBhcnQgOiB4cGF0OwotCi0jaWZuZGVmIENPTU1FTlQKLQkgICAgICAvKiBJIGNh bid0IGV4cGxhaW4gdGhpcyBidXQgaXQgdW5icmVha3MgImNkIGJsYWgvc3ViPEVzYz4iICovCi0J ICAgICAgaWYgKGl0c2FkaXIgJiYgIXhyZWN1cnNpdmUgJiYgeHBhdHNsYXNoID4gMCAmJgotCQkg IHNlZ2lzZGlyID09IDAgJiYgaXRzd2lsZCkgewotCQkgIHMxID0geHBhdDsKLQkJICBkZWJ1ZyhG MTEwLCJ0cmF2ZXJzZSBtcmVzdWx0IHMxIGtsdWRnZSIsczEsMCk7Ci0JICAgICAgfQotI2VuZGlm IC8qIENPTU1FTlQgKi8KLQotCSAgICAgIGlmICh4cmVjdXJzaXZlICYmIHhwYXRzbGFzaCA9PSAw KQotCQlzMiA9IG5hbWJ1ZjsKLQkgICAgICB3aGlsZSAoKHMxWzBdID09ICcuJykgJiYgKHMxWzFd ID09ICcvJykpIC8qIFN0cmlwICIuLyIgKi8KLQkJczEgKz0gMjsKLQkgICAgICB3aGlsZSAoKHMy WzBdID09ICcuJykgJiYgKHMyWzFdID09ICcvJykpIC8qIERpdHRvICovCi0JCXMyICs9IDI7Ci0J ICAgICAgb3B0cyA9IG1vcHRzOwkJLyogTWF0Y2ggb3B0aW9ucyAqLwotCSAgICAgIGlmIChpdHNh ZGlyKSAJCS8qIEN1cnJlbnQgc2VnbWVudCBpcyBhIGRpcmVjdG9yeSAqLwotCQlvcHRzID0gbW9w dHMgJiAxOwkvKiBObyBmZW5jZXMgKi8KLQkgICAgICBzMyA9IHMyOwkJCS8qIEdldCBzZWdtZW50 IGRlcHRoICovCi0JICAgICAgZGVwdGggPSAwOwotCSAgICAgIHdoaWxlICgqczMpIHsgaWYgKCpz MysrID09ICcvJykgZGVwdGgrKzsgfQotI2lmbmRlZiBOT1NLSVBNQVRDSAotCSAgICAgIC8qIFRo aXMgc3BlZWRzIHRoaW5ncyB1cCBhIGJpdC4gKi8KLQkgICAgICAvKiBJZiBpdCBjYXVzZXMgdHJv dWJsZSBkZWZpbmUgTk9TS0lQTUFUQ0ggYW5kIHJlYnVpbGQuICovCi0JICAgICAgaWYgKGRlcHRo ID09IDAgJiYgKHMxWzBdID09ICcqJykgJiYgIXMxWzFdKQotCQltcmVzdWx0ID0geG1hdGNoZG90 ID8gMSA6IChzMlswXSAhPSAnLicpOwotCSAgICAgIGVsc2UKLSNlbmRpZiAvKiBOT1NLSVBNQVRD SCAqLwotCQltcmVzdWx0ID0gY2ttYXRjaChzMSxzMiwxLG9wdHMpOyAvKiBNYXRjaCAqLwotCSAg fQotI2lmZGVmIERFQlVHCi0JICBpZiAoZGVibG9nKSB7Ci0JICAgICAgZGVidWcoRjExMSwidHJh dmVyc2UgbXJlc3VsdCBkZXB0aCIsc29mYXIsZGVwdGgpOwotCSAgICAgIGRlYnVnKEYxMDEsInRy YXZlcnNlIG1yZXN1bHQgeHBhdHNsYXNoIiwiIix4cGF0c2xhc2gpOwotCSAgICAgIGRlYnVnKEYx MTEsInRyYXZlcnNlIG1yZXN1bHQgbmFtYnVmIixuYW1idWYsbXJlc3VsdCk7Ci0JICAgICAgZGVi dWcoRjExMSwidHJhdmVyc2UgbXJlc3VsdCBpdHN3aWxkIixwbCAtPiBucGFydCxpdHN3aWxkKTsK LQkgICAgICBkZWJ1ZyhGMTExLCJ0cmF2ZXJzZSBtcmVzdWx0IHNlZ2lzZGlyIixwbCAtPiBucGFy dCxzZWdpc2Rpcik7Ci0JICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICAgICAgICBpZiAobXJl c3VsdCB8fAkJLyogSWYgbWF0Y2ggc3VjY2VlZGVkICovCi0JICAgICAgeHJlY3Vyc2l2ZSB8fAkJ LyogT3Igc2VhcmNoIGlzIHJlY3Vyc2l2ZSAqLwotCSAgICAgIGRlcHRoIDwgeHBhdHNsYXNoCQkv KiBPciBub3QgZGVlcCBlbm91Z2ggdG8gbWF0Y2guLi4gKi8KLQkgICAgICApIHsKLSAgICAgICAg ICAgICAgaWYgKCAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBpdCdzIG5vdCBhIGRpcmVjdG9y eS4uLiAqLwotLyoKLSAgVGhlIHByb2JsZW0gaGVyZSBpcyB0aGF0IHNlZ2lzZGlyIGlzIGFwcGFy ZW50bHkgbm90IHNldCBhcHByb3ByaWF0ZWx5LgotICBJZiBJIGxlYXZlIGluIHRoZSAhc2VnaXNk aXIgdGVzdCwgdGhlbiAiZGlyIC9yZWN1cnNpdmUgYmxhaCIgKHdoZXJlIGJsYWggaXMKLSAgYSBk aXJlY3RvcnkgbmFtZSkgbWlzc2VzIHNvbWUgcmVndWxhciBmaWxlcyBiZWNhdXNlIHNvbWV0aW1l cyBzZWdpc2RpcgotICBpcyBzZXQgYW5kIHNvbWV0aW1lcyBpdCdzIG5vdC4gIEJ1dCBpZiBJIGNv bW1lbnQgaXQgb3V0LCB0aGVuCi0gICJkaXIgPHN0YXI+LzxzdGFyPi50eHQgbGlzdHMgZXZlcnkg ZmlsZSBpbiAqIGFuZCBkb2VzIG5vdCBldmVuIG9wZW4gdXAgdGhlCi0gIHN1YmRpcmVjdG9yaWVz LiAgSG93ZXZlciwgImRpciAvcmVjIDxzdGFyPi88c3Rhcj4udHh0IiB3b3JrcyByaWdodC4KLSov Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgICAgICAgbXJlc3VsdCAmJiAoIWl0c2FkaXIg JiYgIXNlZ2lzZGlyKQotI2Vsc2UKLSAgICAgICAgICAgICAgICAgIG1yZXN1bHQgJiYJCS8qIE1h dGNoZWQgKi8KLSAgICAgICAgICAgICAgICAgICFpdHNhZGlyICYmCQkvKiBzb2ZhciBpcyBub3Qg YSBkaXJlY3RvcnkgKi8KLSAgICAgICAgICAgICAgICAgICgoIXhyZWN1cnNpdmUgJiYgIXNlZ2lz ZGlyKSB8fCB4cmVjdXJzaXZlKQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgICAg ICAgICkgewotCQkgIGRlYnVnKEYxMTAsCi0JCQkidHJhdmVyc2UgYWRkOiBtYXRjaCAmJiAhaXRz YWRpciIsc29mYXIsMCk7Ci0JCSAgYWRkcmVzdWx0KHNvZmFyLGl0c2FkaXIpOwotCQkgIGlmIChu dW1mbmQgPCAwKSByZXR1cm47Ci0gICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRzYWRpciAmJiAo eHJlY3Vyc2l2ZSB8fCBtcmVzdWx0KSkgewotICAgICAgICAgICAgICAgICAgc3RydWN0IHBhdGgg KiB4eCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAqZW9zKysgPSBESVJTRVA7ICAgICAgLyog QWRkIGRpcmVjdG9yeSBzZXBhcmF0b3IgKi8KLSAgICAgICAgICAgICAgICAgICplb3MgPSAnXDAn OyAgICAgICAgICAvKiB0byBlbmQgb2Ygc2VnbWVudCAqLwotI2lmZGVmIFJFQ1VSU0lWRQotICAg ICAgICAgICAgICAgICAgLyogQ29weSBwcmV2aW91cyBwYXR0ZXJuIHNlZ21lbnQgdG8gdGhpcyBu ZXcgZGlyZWN0b3J5ICovCi0KLSAgICAgICAgICAgICAgICAgIGlmICh4cmVjdXJzaXZlID4gMCAm JiAhKHBsIC0+IGZ3ZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICB4eCA9IChzdHJ1Y3QgcGF0 aCAqKSBtYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgcGF0aCkpOwotICAgICAgICAgICAgICAgICAgICAg IHBsIC0+IGZ3ZCA9IHh4OwotICAgICAgICAgICAgICAgICAgICAgIGlmICh4eCkgewotICAgICAg ICAgICAgICAgICAgICAgICAgICB4eCAtPiBmd2QgPSBOVUxMOwotICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJjcHkoeHggLT4gbnBhcnQsIHBsIC0+IG5wYXJ0KTsgLyogc2FmZSAqLwotICAg ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBSRUNV UlNJVkUgKi8KLSAgICAgICAgICAgICAgICAgIHRyYXZlcnNlKHBsIC0+IGZ3ZCwgc29mYXIsIGVv cyk7IC8qIFRyYXZlcnNlIG5ldyBkaXJlY3RvcnkgKi8KLSAgICAgICAgICAgICAgfQotICAgICAg ICAgIH0KLSAgICAgIH0KLSNpZmRlZiBPUEVORElSCi0gICAgY2xvc2VkaXIoZmQpOwotI2Vsc2Ug LyogIU9QRU5ESVIgKi8KLSAgICBjbG9zZShmZCk7Ci0jZW5kaWYgLyogT1BFTkRJUiAqLwotfQot Ci0vKgotICogYWRkcmVzdWx0OgotICogIEFkZHMgYSByZXN1bHQgc3RyaW5nIHRvIHRoZSByZXN1 bHQgYXJyYXkuICBJbmNyZW1lbnRzIHRoZSBudW1iZXIKLSAqICBvZiBtYXRjaGVzIGZvdW5kLCBj b3BpZXMgdGhlIGZvdW5kIHN0cmluZyBpbnRvIG91ciBzdHJpbmcKLSAqICBidWZmZXIsIGFuZCBw dXRzIGEgcG9pbnRlciB0byB0aGUgYnVmZmVyIGludG8gdGhlIGNhbGxlcidzIHJlc3VsdAotICog IGFycmF5LiAgT3VyIGZyZWUgYnVmZmVyIHBvaW50ZXIgaXMgdXBkYXRlZC4gIElmIHRoZXJlIGlz IG5vCi0gKiAgbW9yZSByb29tIGluIHRoZSBjYWxsZXIncyBhcnJheSwgdGhlIG51bWJlciBvZiBt YXRjaGVzIGlzIHNldCB0byAtMS4KLSAqIElucHV0OiBhIHJlc3VsdCBzdHJpbmcuCi0gKiBSZXR1 cm5zOiBub3RoaW5nLgotICovCi1zdGF0aWMgVk9JRAotYWRkcmVzdWx0KHN0cixpdHNhZGlyKSBj aGFyICpzdHI7IGludCBpdHNhZGlyOyB7Ci0gICAgaW50IGxlbjsKLQotICAgIGlmICghZnJlZXB0 cikgewotCWRlYnVnKEYxMDAsImFkZHJlc3VsdCBzdHJpbmcgc3BhY2Ugbm90IGluaXQnZCIsIiIs MCk7Ci0JaW5pdHNwYWNlKG10Y2hzLHNzcGxlbik7Ci0gICAgfQotICAgIGlmICghc3RyKSBzdHIg PSAiIjsKLSAgICBkZWJ1ZyhGMTExLCJhZGRyZXN1bHQiLHN0cixpdHNhZGlyKTsKLSAgICBpZiAo ISpzdHIpCi0gICAgICByZXR1cm47Ci0KLSAgICBpZiAoaXRzYWRpciA8IDApIHsKLQlpdHNhZGly ID0geGlzZGlyKHN0cik7Ci0gICAgfQotICAgIGlmICgoeGRpcm9ubHkgJiYgIWl0c2FkaXIpIHx8 ICh4Zmlsb25seSAmJiBpdHNhZGlyKSkgewotICAgICAgICBkZWJ1ZyhGMTExLCJhZGRyZXN1bHQg c2tpcCIsc3RyLGl0c2FkaXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHdoaWxlIChz dHJbMF0gPT0gJy4nICYmIElTRElSU0VQKHN0clsxXSkpIC8qIFN0cmlwIGFsbCAiLi8iIGZyb20g ZnJvbnQgKi8KLSAgICAgIHN0ciArPSAyOwotICAgIGlmICgtLXJlbWxlbiA8IDApIHsgICAgICAg ICAgICAgICAgIC8qIEVsZW1lbnRzIGxlZnQgaW4gYXJyYXkgb2YgbmFtZXMgKi8KLSAgICAgICAg ZGVidWcoRjExMSwiYWRkcmVzdWx0IEFSUkFZIEZVTEwiLHN0cixudW1mbmQpOwotICAgICAgICBu dW1mbmQgPSAtMTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBsZW4gPSAoaW50KXN0cmxl bihzdHIpOwkJLyogU3BhY2UgdGhpcyB3aWxsIHVzZSAqLwotICAgIGRlYnVnKEYxMTEsImFkZHJl c3VsdCBsZW4iLHN0cixsZW4pOwotCi0gICAgaWYgKGxlbiA8IDEpCi0gICAgICByZXR1cm47Ci0K LSAgICBpZiAoKGZyZWVwdHIgKyBsZW4gKyBpdHNhZGlyICsgMSkgPiAoc3NwYWNlICsgc3NwbGVu KSkgewotICAgICAgICBkZWJ1ZyhGMTExLCJhZGRyZXN1bHQgT1VUIE9GIFNQQUNFIixzdHIsbnVt Zm5kKTsKLSNpZmRlZiBEWU5BTUlDCi0JcHJpbnRmKAotIj9TdHJpbmcgc3BhY2UgJWQgZXhoYXVz dGVkIC0gdXNlIFNFVCBGSUxFIFNUUklOR1NQQUNFIHRvIGluY3JlYXNlXG4iLHNzcGxlbik7Ci0j ZWxzZQotCXByaW50ZigiP1N0cmluZyBzcGFjZSAlZCBleGhhdXN0ZWRcbiIsc3NwbGVuKTsKLSNl bmRpZiAvKiBEWU5BTUlDICovCi0gICAgICAgIG51bWZuZCA9IC0xOyAgICAgICAgICAgICAgICAg ICAgLyogRG8gbm90IHJlY29yZCBpZiBub3QgZW5vdWdoIHNwYWNlICovCi0gICAgICAgIHJldHVy bjsKLSAgICB9Ci0gICAgc3RyY3B5KGZyZWVwdHIsc3RyKTsJCS8qIHNhZmUgKi8KLQotICAgIC8q IFRhZyBkaXJlY3RvcnkgbmFtZXMgYnkgcHV0dGluZyAnLycgYXQgdGhlIGVuZCAqLwotCi0gICAg aWYgKGl0c2FkaXIgJiYgKGZyZWVwdHJbbGVuLTFdID09ICcvJykpIHsKLSAgICAgICAgZnJlZXB0 cltsZW4rK10gPSBESVJTRVA7Ci0gICAgICAgIGZyZWVwdHJbbGVuXSA9ICdcMCc7Ci0gICAgfQot ICAgIGlmIChudW1mbmQgPj0gbWF4bmFtZXMpIHsKLSNpZmRlZiBEWU5BTUlDCi0JcHJpbnRmKAot Ij9Ub28gbWFueSBmaWxlcyAoJWQgbWF4KSAtIHVzZSBTRVQgRklMRSBMSVNUU0laRSB0byBpbmNy ZWFzZVxuIixtYXhuYW1lcyk7Ci0jZWxzZQotCXByaW50ZigiP1RvbyBtYW55IGZpbGVzIC0gJWQg bWF4XG4iLG1heG5hbWVzKTsKLSNlbmRpZiAvKiBEWU5BTUlDICovCi0gICAgICAgIG51bWZuZCA9 IC0xOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHN0ciA9IGZyZWVwdHI7Ci0gICAgKnJl c3B0cisrID0gZnJlZXB0cjsKLSAgICBmcmVlcHRyICs9IChsZW4gKyAxKTsKLSAgICBudW1mbmQr KzsKLSAgICBkZWJ1ZyhGMTExLCJhZGRyZXN1bHQgQUREIixzdHIsbnVtZm5kKTsKLX0KLQotI2lm ZGVmIENPTU1FTlQKLS8qCi0gKiBtYXRjaChwYXR0ZXJuLHN0cmluZyk6Ci0gKiAgcGF0dGVybiBt YXRjaGVyLiAgVGFrZXMgYSBzdHJpbmcgYW5kIGEgcGF0dGVybiBwb3NzaWJseSBjb250YWluaW5n Ci0gKiAgdGhlIHdpbGRjYXJkIGNoYXJhY3RlcnMgJyonIGFuZCAnPycuICBSZXR1cm5zIHRydWUg aWYgdGhlIHBhdHRlcm4KLSAqICBtYXRjaGVzIHRoZSBzdHJpbmcsIGZhbHNlIG90aGVyd2lzZS4K LSAqIE9yaWduYWxseSBieTogSmVmZiBEYW1lbnMsIENVQ0NBLCAxOTg0Ci0gKiBObyBsb25nZXIg dXNlZCBhcyBvZiBDLUtlcm1pdCA3LjAsIG5vdyB3ZSB1c2UgY2ttYXRjaCgpIGluc3RlYWQgKGNr Y2xpYi5jKS4KLSAqCi0gKiBJbnB1dDogYSBzdHJpbmcgYW5kIGEgd2lsZGNhcmQgcGF0dGVybi4K LSAqIFJldHVybnM6IDEgaWYgbWF0Y2gsIDAgaWYgbm8gbWF0Y2guCi0gKi8KLXN0YXRpYyBpbnQK LW1hdGNoKHBhdHRlcm4sIHN0cmluZykgY2hhciAqcGF0dGVybiwgKnN0cmluZzsgewotICAgIGNo YXIgKnBzYXZlID0gTlVMTCwgKnNzYXZlID0gTlVMTDsgIC8qIEJhY2t1cCBwb2ludGVycyBmb3Ig ZmFpbHVyZSAqLwotICAgIGludCBxID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFF1 b3RlIGZsYWcgKi8KLQotICAgIGlmICgqc3RyaW5nID09ICcuJyAmJiAqcGF0dGVybiAhPSAnLicg JiYgIXhtYXRjaGRvdCkgewotICAgICAgICBkZWJ1ZyhGMTEwLCJtYXRjaCBza2lwIixzdHJpbmcs MCk7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAg Zm9yICg7ICpwYXR0ZXJuID09ICpzdHJpbmc7IHBhdHRlcm4rKyxzdHJpbmcrKykgLyogU2tpcCBm aXJzdCAqLwotICAgICAgICAgIGlmICgqc3RyaW5nID09ICdcMCcpIHJldHVybigxKTsgLyogRW5k IG9mIHN0cmluZ3MsIHN1Y2NlZWQgKi8KLQotICAgICAgICBpZiAoKnBhdHRlcm4gPT0gJ1xcJyAm JiBxID09IDApIHsgLyogV2F0Y2ggb3V0IGZvciBxdW90ZWQgKi8KLSAgICAgICAgICAgIHEgPSAx OyAgICAgICAgICAgICAgICAgICAgICAvKiBtZXRhY2hhcmFjdGVycyAqLwotICAgICAgICAgICAg cGF0dGVybisrOyAgICAgICAgICAgICAgICAgIC8qIGFkdmFuY2UgcGFzdCBxdW90ZSAqLwotICAg ICAgICAgICAgaWYgKCpwYXR0ZXJuICE9ICpzdHJpbmcpIHJldHVybigwKTsKLSAgICAgICAgICAg IGNvbnRpbnVlOwotICAgICAgICB9IGVsc2UgcSA9IDA7Ci0KLSAgICAgICAgaWYgKHEpIHsKLSAg ICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICgq c3RyaW5nICE9ICdcMCcgJiYgKnBhdHRlcm4gPT0gJz8nKSB7Ci0gICAgICAgICAgICAgICAgcGF0 dGVybisrOyAgICAgICAgICAgICAgLyogJz8nLCBsZXQgaXQgbWF0Y2ggKi8KLSAgICAgICAgICAg ICAgICBzdHJpbmcrKzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoKnBhdHRlcm4gPT0gJyonKSB7 IC8qICcqJyAuLi4gKi8KLSAgICAgICAgICAgICAgICBwc2F2ZSA9ICsrcGF0dGVybjsgICAgICAv KiByZW1lbWJlciB3aGVyZSB3ZSBzYXcgaXQgKi8KLSAgICAgICAgICAgICAgICBzc2F2ZSA9IHN0 cmluZzsgICAgICAgICAvKiBsZXQgaXQgbWF0Y2ggMCBjaGFycyAqLwotICAgICAgICAgICAgfSBl bHNlIGlmIChzc2F2ZSAhPSBOVUxMICYmICpzc2F2ZSAhPSAnXDAnKSB7IC8qIGlmIG5vdCBhdCBl bmQgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLi4uaGF2 ZSBzZWVuIGEgc3RhciAqLwotICAgICAgICAgICAgICAgIHN0cmluZyA9ICsrc3NhdmU7ICAgICAg IC8qIHNraXAgMSBjaGFyIGZyb20gc3RyaW5nICovCi0gICAgICAgICAgICAgICAgcGF0dGVybiA9 IHBzYXZlOyAgICAgICAgLyogYW5kIGJhY2sgdXAgcGF0dGVybiAqLwotICAgICAgICAgICAgfSBl bHNlIHJldHVybigwKTsgICAgICAgICAgIC8qIG90aGVyd2lzZSBqdXN0IGZhaWwgKi8KLSAgICAg ICAgfQotICAgIH0KLX0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLS8qCi0gIFRoZSBmb2xsb3dp bmcgdHdvIGZ1bmN0aW9ucyBhcmUgZm9yIGV4cGFuZGluZyB0aWxkZSBpbiBmaWxlbmFtZXMKLSAg Q29udHJpYnV0ZWQgYnkgSG93aWUgS2F5ZSwgQ1VDQ0EsIGRldmVsb3BlZCBmb3IgQ0NNRCBwYWNr YWdlLgotKi8KLQotLyogIFcgSCBPIEEgTSBJICAtLSAgR2V0IHVzZXIncyB1c2VybmFtZS4gICov Ci0KLS8qCi0gIDEpIEdldCByZWFsIHVpZAotICAyKSBTZWUgaWYgdGhlICRVU0VSIGVudmlyb25t ZW50IHZhcmlhYmxlIGlzIHNldCAoJExPR05BTUUgb24gQVQmVCkKLSAgMykgSWYgJFVTRVIncyB1 aWQgaXMgdGhlIHNhbWUgYXMgcnVpZCwgcmVhbG5hbWUgaXMgJFVTRVIKLSAgNCkgT3RoZXJ3aXNl IGdldCBsb2dnZWQgaW4gdXNlcidzIG5hbWUKLSAgNSkgSWYgdGhhdCBuYW1lIGhhcyB0aGUgc2Ft ZSB1aWQgYXMgdGhlIHJlYWwgdWlkIHJlYWxuYW1lIGlzIGxvZ2lubmFtZQotICA2KSBPdGhlcndp c2UsIGdldCBhIG5hbWUgZm9yIHJ1aWQgZnJvbSAvZXRjL3Bhc3N3ZAotKi8KLWNoYXIgKgotd2hv YW1pKCkgewotI2lmZGVmIERUSUxERQotI2lmZGVmIHBkcDExCi0jZGVmaW5lIFdIT0xFTiAxMDAK LSNlbHNlCi0jZGVmaW5lIFdIT0xFTiAyNTcKLSNlbmRpZiAvKiBwZHAxMSAqLwotICAgIHN0YXRp YyBjaGFyIHJlYWxuYW1lW1VJREJVRkxFTisxXTsgIC8qIHVzZXIncyBuYW1lICovCi0gICAgc3Rh dGljIGludCBydWlkID0gLTE7ICAgICAgICAgICAgICAgLyogdXNlcidzIHJlYWwgdWlkICovCi0g ICAgY2hhciBsb2dpbm5hbWVbVUlEQlVGTEVOKzFdLCBlbnZuYW1lWzI1Nl07IC8qIHRlbXAgc3Rv cmFnZSAqLwotICAgIGNoYXIgKmM7Ci0gICAgc3RydWN0IHBhc3N3ZCAqcDsKLSAgICBfUFJPVE9U WVAoZXh0ZXJuIGNoYXIgKiBnZXRsb2dpbiwgKHZvaWQpICk7Ci0KLSAgICBkZWJ1ZyhGMTExLCJ3 aG9hbWkgcnVpZCBBIixyZWFsbmFtZSxydWlkKTsKLQotICAgIGlmIChydWlkICE9IC0xKQotICAg ICAgcmV0dXJuKHJlYWxuYW1lKTsKLQotICAgIHJ1aWQgPSByZWFsX3VpZCgpOyAgICAgICAgICAg ICAgICAgIC8qIGdldCBvdXIgdWlkICovCi0gICAgZGVidWcoRjEwMSwid2hvYW1pIHJ1aWQgQiIs IiIscnVpZCk7Ci0gICAgaWYgKHJ1aWQgPCAwKSBydWlkID0gZ2V0dWlkKCk7Ci0gICAgZGVidWco RjEwMSwid2hvYW1pIHJ1aWQgQyIsIiIscnVpZCk7Ci0KLSAgLyogaG93IGFib3V0ICRVU0VSIG9y ICRMT0dOQU1FPyAqLwotICAgIGlmICgoYyA9IGdldGVudihOQU1FRU5WKSkgIT0gTlVMTCkgeyAv KiBjaGVjayB0aGUgZW52IHZhcmlhYmxlICovCi0gICAgICAgIGNrc3RybmNweShlbnZuYW1lLCBj LCAyNTUpOwotCWRlYnVnKEYxMTAsIndob2FtaSBlbnZuYW1lIixlbnZuYW1lLDApOwotICAgICAg ICBpZiAoKHAgPSBnZXRwd25hbShlbnZuYW1lKSkgIT0gTlVMTCkgewotICAgICAgICAgICAgaWYg KHAtPnB3X3VpZCA9PSBydWlkKSB7ICAgIC8qIGdldCBwYXNzd2QgZW50cnkgZm9yIGVudm5hbWUg Ki8KLSAgICAgICAgICAgICAgICBja3N0cm5jcHkocmVhbG5hbWUsIGVudm5hbWUsIFVJREJVRkxF Tik7IC8qIHVpZCdzIGFyZSBzYW1lICovCi0JCWRlYnVnKEYxMTAsIndob2FtaSByZWFsbmFtZSIs cmVhbG5hbWUsMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKHJlYWxuYW1lKTsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAvKiBjYW4gd2UgdXNlIGxvZ2lubmFtZSgpID8g Ki8KLQotICAgIGlmICgoYyA9ICBnZXRsb2dpbigpKSAhPSBOVUxMKSB7ICAgIC8qIG5hbWUgZnJv bSB1dG1wIGZpbGUgKi8KLSAgICAgICAgY2tzdHJuY3B5IChsb2dpbm5hbWUsIGMsIFVJREJVRkxF Tik7Ci0JZGVidWcoRjExMCwid2hvYW1pIGxvZ2lubmFtZSIsbG9naW5uYW1lLDApOyAKLSAgICAg ICAgaWYgKChwID0gZ2V0cHduYW0obG9naW5uYW1lKSkgIT0gTlVMTCkgLyogZ2V0IHBhc3N3ZCBl bnRyeSAqLwotICAgICAgICAgIGlmIChwLT5wd191aWQgPT0gcnVpZCkgICAgICAgIC8qIGZvciBs b2dpbm5hbWUgKi8KLSAgICAgICAgICAgIGNrc3RybmNweShyZWFsbmFtZSwgZW52bmFtZSwgVUlE QlVGTEVOKTsgLyogaWYgdWlkJ3MgYXJlIHNhbWUgKi8KLSAgICB9Ci0KLSAgLyogVXNlIGZpcnN0 IG5hbWUgd2UgZ2V0IGZvciBydWlkICovCi0KLSAgICBpZiAoKHAgPSBnZXRwd3VpZChydWlkKSkg PT0gTlVMTCkgeyAvKiBuYW1lIGZvciB1aWQgKi8KLQlkZWJ1ZyhGMTAxLCJ3aG9hbWkgbm8gdXNl cm5hbWUgZm9yIHJ1aWQiLCIiLHJ1aWQpOyAKLSAgICAgICAgcmVhbG5hbWVbMF0gPSAnXDAnOyAg ICAgICAgICAgICAvKiBubyB1c2VyIG5hbWUgKi8KLSAgICAgICAgcnVpZCA9IC0xOwotICAgICAg ICByZXR1cm4oTlVMTCk7Ci0gICAgfQotICAgIGNrc3RybmNweShyZWFsbmFtZSwgcC0+cHdfbmFt ZSwgVUlEQlVGTEVOKTsKLSAgICBkZWJ1ZyhGMTEwLCJ3aG9hbWkgcmVhbG5hbWUgZnJvbSBnZXRw d3VpZCIscmVhbG5hbWUsMCk7Ci0gICAgcmV0dXJuKHJlYWxuYW1lKTsKLSNlbHNlCi0gICAgcmV0 dXJuKE5VTEwpOwotI2VuZGlmIC8qIERUSUxERSAqLwotfQotCi0vKiAgVCBJIEwgRCBFIF8gRSBY IFAgQSBOIEQgIC0tICBleHBhbmQgfnVzZXIgdG8gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeS4g Ki8KLQotY2hhciAqCi10aWxkZV9leHBhbmQoZGlybmFtZSkgY2hhciAqZGlybmFtZTsgewotI2lm ZGVmIERUSUxERQotI2lmZGVmIHBkcDExCi0jZGVmaW5lIEJVRkxFTiAxMDAKLSNlbHNlCi0jZGVm aW5lIEJVRkxFTiAyNTcKLSNlbmRpZiAvKiBwZHAxMSAqLwotICAgIHN0cnVjdCBwYXNzd2QgKnVz ZXI7Ci0gICAgc3RhdGljIGNoYXIgb2xkZGlyW0JVRkxFTisxXTsKLSAgICBzdGF0aWMgY2hhciBv bGRyZWFsZGlyW0JVRkxFTisxXTsKLSAgICBzdGF0aWMgY2hhciB0ZW1wW0JVRkxFTisxXTsKLSAg ICBpbnQgaSwgajsKLQotICAgIGRlYnVnKEYxMTEsInRpbGRlX2V4cGFuZCIsZGlybmFtZSxkaXJu YW1lWzBdKTsKLQotICAgIGlmIChkaXJuYW1lWzBdICE9ICd+JykgeyAgICAgICAgICAgICAgLyog Tm90IGEgdGlsZGUuLi5yZXR1cm4gcGFyYW0gKi8KLQlkZWJ1ZyhGMDAwLCJ0aWxkZV9leHBhbmQg Tk9UIFRJTERFIiwiIixkaXJuYW1lWzBdKTsKLQlyZXR1cm4oZGlybmFtZSk7Ci0gICAgfQotICAg IGlmICghc3RyY21wKG9sZGRpcixkaXJuYW1lKSkgeyAgICAgIC8qIFNhbWUgYXMgbGFzdCB0aW1l ICovCi0JZGVidWcoRjExMCwidGlsZGVfZXhwYW5kIHNhbWUgYXMgcHJldmlvdXMiLG9sZHJlYWxk aXIsMCk7Ci0JcmV0dXJuKG9sZHJlYWxkaXIpOyAgICAgICAgICAgICAgIC8qIHNvIHJldHVybiBv bGQgYW5zd2VyLiAqLwotICAgIH0gZWxzZSB7Ci0JZGVidWcoRjExMCwidGlsZGVfZXhwYW5kIHdv cmtpbmcuLi4iLCIiLDApOwotICAgICAgICBqID0gKGludClzdHJsZW4oZGlybmFtZSk7Ci0gICAg ICAgIGZvciAoaSA9IDA7IGkgPCBqOyBpKyspICAgICAgICAgLyogZmluZCB1c2VybmFtZSBwYXJ0 IG9mIHN0cmluZyAqLwotICAgICAgICAgIGlmICghSVNESVJTRVAoZGlybmFtZVtpXSkpCi0gICAg ICAgICAgICB0ZW1wW2ldID0gZGlybmFtZVtpXTsKLSAgICAgICAgICBlbHNlIGJyZWFrOwotICAg ICAgICB0ZW1wW2ldID0gJ1wwJzsgICAgICAgICAgICAgICAgIC8qIHRpZSBvZmYgd2l0aCBhIE5V TEwgKi8KLQlkZWJ1ZyhGMTExLCJ0aWxkZV9leHBhbmQgZmlyc3QgcGFydCIsdGVtcCxpKTsKLSAg ICAgICAgaWYgKGkgPT0gMSkgeyAgICAgICAgICAgICAgICAgICAvKiBpZiBqdXN0IGEgIn4iICov Ci0jaWZkZWYgSUtTRAotICAgICAgICAgICAgaWYgKGluc2VydmVyKQotICAgICAgICAgICAgICB1 c2VyID0gZ2V0cHduYW0odWlkYnVmKTsgIC8qIEdldCBpbmZvIG9uIGN1cnJlbnQgdXNlciAqLwot ICAgICAgICAgICAgZWxzZQotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgICAgICAgIHsKLSAgICAg ICAgICAgICAgICBjaGFyICogcCA9IHdob2FtaSgpOwotCQlkZWJ1ZyhGMTEwLCJ0aWxkZV9leHBh bmQgcCIscCwwKTsKLSAgICAgICAgICAgICAgICBpZiAocCkgewotCQkgICAgdXNlciA9IGdldHB3 bmFtKHApOwotCQkgICAgZGVidWcoRjExMCwidGlsZGVfZXhwYW5kIGdldHB3cGFtIH4iLHVzZXIs MCk7Ci0JCX0gZWxzZSB7Ci0JCSAgICB1c2VyID0gTlVMTDsKLQkJfQotICAgICAgICAgICAgfQot ICAgICAgICB9IGVsc2UgewotCSAgICBkZWJ1ZyhGMTEwLCJ0aWxkZV9leHBhbmQgfnVzZXIiLCZ0 ZW1wWzFdLDApOwotICAgICAgICAgICAgdXNlciA9IGdldHB3bmFtKCZ0ZW1wWzFdKTsgIC8qIG90 aGVyd2lzZSBvbiB0aGUgc3BlY2lmaWVkIHVzZXIgKi8KLQkgICAgZGVidWcoRjExMCwidGlsZGVf ZXhwYW5kIGdldHB3cGFtIHVzZXIiLHVzZXIsMCk7Ci0gICAgICAgIH0KLQotICAgIH0KLSAgICBp ZiAodXNlciAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAvKiB2YWxpZCB1c2VyPyAqLwotICAg ICAgICBja3N0cm5jcHkob2xkZGlyLCBkaXJuYW1lLCBCVUZMRU4pOyAvKiByZW1lbWJlciB0aGUg ZGlyZWN0b3J5ICovCi0gICAgICAgIGNrc3RybmNweShvbGRyZWFsZGlyLHVzZXItPnB3X2Rpciwg QlVGTEVOKTsgLyogYW5kIGhvbWUgZGlyZWN0b3J5ICovCi0gICAgICAgIGNrc3RybmNhdChvbGRy ZWFsZGlyLCZkaXJuYW1lW2ldLCBCVUZMRU4pOwotICAgICAgICBvbGRyZWFsZGlyW0JVRkxFTl0g PSAnXDAnOwotICAgICAgICByZXR1cm4ob2xkcmVhbGRpcik7Ci0gICAgfSBlbHNlIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogaW52YWxpZD8gKi8KLSAgICAgICAgY2tzdHJuY3B5KG9s ZGRpciwgZGlybmFtZSwgQlVGTEVOKTsgLyogcmVtZW1iZXIgZm9yIG5leHQgdGltZSAqLwotICAg ICAgICBja3N0cm5jcHkob2xkcmVhbGRpciwgZGlybmFtZSwgQlVGTEVOKTsKLSAgICAgICAgcmV0 dXJuKG9sZHJlYWxkaXIpOwotICAgIH0KLSNlbHNlCi0gICAgcmV0dXJuKE5VTEwpOwotI2VuZGlm IC8qIERUSUxERSAqLwotfQotCi0vKgotICBGdW5jdGlvbnMgZm9yIGV4ZWN1dGluZyBzeXN0ZW0g Y29tbWFuZHMuCi0gIHpzeXNjbWQoKSBleGVjdXRlcyB0aGUgc3lzdGVtIGNvbW1hbmQgaW4gdGhl IG5vcm1hbCwgZGVmYXVsdCB3YXkgZm9yCi0gIHRoZSBzeXN0ZW0uICBJbiBVTklYLCBpdCBkb2Vz IHdoYXQgc3lzdGVtKCkgZG9lcy4gIFRodXMsIGl0cyByZXN1bHRzCi0gIGFyZSBhbHdheXMgcHJl ZGljdGFibGUuCi0gIHpzaGNtZCgpIGV4ZWN1dGVzIHRoZSBjb21tYW5kIHVzaW5nIHRoZSB1c2Vy J3MgcHJlZmVycmVkIHNoZWxsLgotKi8KLWludAotenN5c2NtZChzKSBjaGFyICpzOyB7Ci0jaWZk ZWYgYWVnaXMKLSAgICBpZiAobm9wdXNoKSByZXR1cm4oLTEpOwotICAgIGlmICghcHJpdl9jaGso KSkgcmV0dXJuKHN5c3RlbShzKSk7Ci0jZWxzZQotICAgIFBJRF9UIHNocGlkOwotI2lmZGVmIENP TU1FTlQKLS8qIFRoaXMgZG9lc24ndCB3b3JrLi4uICovCi0gICAgV0FJVF9UIHN0YXR1czsKLSNl bHNlCi0gICAgaW50IHN0YXR1czsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICBpZiAobm9w dXNoKSByZXR1cm4oLTEpOwotICAgIGlmICgoc2hwaWQgPSBmb3JrKCkpKSB7Ci0gICAgICAgIGlm IChzaHBpZCA8IChQSURfVCkwKSByZXR1cm4oLTEpOyAvKiBQYXJlbnQgKi8KLSAgICAgICAgd2hp bGUgKHNocGlkICE9IChQSURfVCkgd2FpdCgmc3RhdHVzKSkKLSAgICAgICAgIDsKLSAgICAgICAg cmV0dXJuKHN0YXR1cyk7Ci0gICAgfQotICAgIGlmIChwcml2X2NhbigpKSB7ICAgICAgICAgICAg ICAgICAgIC8qIENoaWxkOiBjYW5jZWwgYW55IHByaXYncyAqLwotICAgICAgICBwcmludGYoIj9Q cml2aWxlZ2UgY2FuY2VsbGF0aW9uIGZhaWx1cmVcbiIpOwotICAgICAgICBfZXhpdCgyNTUpOwot ICAgIH0KLSAgICByZXN0b3JzaWdzKCk7CQkJLyogUmVzdG9yZSBpZ25vcmVkIHNpZ25hbHMgKi8K LSNpZmRlZiBIUFVYMTAKLSAgICBleGVjbCgiL3Vzci9iaW4vc2giLCJzaCIsIi1jIixzLE5VTEwp OwotICAgIHBlcnJvcigiL3Vzci9iaW4vc2giKTsKLSNlbHNlCi0jaWZkZWYgUGxhbjkKLSAgICBl eGVjbCgiL2Jpbi9yYyIsICJyYyIsICItYyIsIHMsIE5VTEwpOwotICAgIHBlcnJvcigiL2Jpbi9y YyIpOwotI2Vsc2UKLSAgICBleGVjbCgiL2Jpbi9zaCIsInNoIiwiLWMiLHMsTlVMTCk7Ci0gICAg cGVycm9yKCIvYmluL3NoIik7Ci0jZW5kaWYgLyogUGxhbjkgKi8KLSNlbmRpZiAvKiBIUFVYMTAg Ki8KLSAgICBfZXhpdCgyNTUpOwotICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFNodXQgdXAgQU5TSSBjb21waWxlcnMuICovCi0jZW5kaWYgLyogYWVnaXMgKi8KLX0K LQotCi0vKiAgWiBfIEUgWCBFIEMgIC0tICBPdmVybGF5IG91cnNlbHZlcyB3aXRoIGFub3RoZXIg cHJvZ3JhbSAgKi8KLQotI2lmbmRlZiBOT1pFWEVDCi0jaWZkZWYgSFBVWDUKLSNkZWZpbmUgTk9a RVhFQwotI2Vsc2UKLSNpZmRlZiBBVFQ3MzAwCi0jZGVmaW5lIE5PWkVYRUMKLSNlbmRpZiAvKiBB VFQ3MzAwICovCi0jZW5kaWYgLyogSFBVWDUgKi8KLSNlbmRpZiAvKiBOT1pFWEVDICovCi0KLVZP SUQKLXpfZXhlYyhwLHMsdCkgY2hhciAqIHAsICoqIHM7IGludCB0OyB7ICAvKiBPdmVybGF5IG91 cnNlbHZlcyB3aXRoICJwIHMuLi4iICovCi0jaWZkZWYgTk9aRVhFQwotICAgIHByaW50ZigiRVhF QyAvUkVESVJFQ1QgTk9UIElNUExFTUVOVEVEIElOIFRISVMgVkVSU0lPTiBPRiBDLUtFUk1JVFxu Iik7Ci0gICAgZGVidWcoRjExMCwiel9leGVjIE5PVCBJTVBMRU1FTlRFRCIscCwwKTsKLSNlbHNl Ci0gICAgaW50IHg7Ci0gICAgZXh0ZXJuIGludCB0dHlmZDsKLSAgICBkZWJ1ZyhGMTEwLCJ6X2V4 ZWMgY29tbWFuZCIscCwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJ6X2V4ZWMgYXJnIDAiLHNbMF0sMCk7 Ci0gICAgZGVidWcoRjExMCwiel9leGVjIGFyZyAxIixzWzFdLDApOwotICAgIGRlYnVnKEYxMDEs InpfZXhlYyB0IiwiIix0KTsKLSAgICBlcnJubyA9IDA7Ci0gICAgaWYgKHQpIHsKLSAgICAgICAg aWYgKHR0eWZkID4gMikgewotICAgICAgICAgICAgZHVwMih0dHlmZCwgMCk7Ci0gICAgICAgICAg ICBkdXAyKHR0eWZkLCAxKTsKLSAgICAgICAgICAgIC8qIGR1cDIodHR5ZmQsIDIpOyAqLwotICAg ICAgICAgICAgY2xvc2UodHR5ZmQpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJlc3RvcnNpZ3Mo KTsJCQkvKiBSZXN0b3JlIGlnbm9yZWQgc2lnbmFscyAqLwotICAgIHggPSBleGVjdnAocCxzKTsK LSAgICBpZiAoeCA8IDApIGRlYnVnKEYxMDEsInpfZXhlYyBlcnJubyIsIiIsZXJybm8pOwotI2Vu ZGlmIC8qIE5PWkVYRUMgKi8KLX0KLQotLyoKLSAgWiBTIEggQyBNIEQgIC0tICBFeGVjdXRlIGEg c2hlbGwgY29tbWFuZCAob3IgcHJvZ3JhbSB0aHJ1IHRoZSBzaGVsbCkuCi0KLSAgT3JpZ2luYWwg VU5JWCBjb2RlIGJ5IEguIEZpc2NoZXI7IGNvcHlyaWdodCByaWdodHMgYXNzaWduZWQgdG8gQ29s dW1iaWEgVS4KLSAgQWRhcHRlZCB0byB1c2UgZ2V0cHd1aWQgdG8gZmluZCBsb2dpbiBzaGVsbCBi ZWNhdXNlIG1hbnkgc3lzdGVtcyBkbyBub3QKLSAgaGF2ZSBTSEVMTCBpbiBlbnZpcm9ubWVudCwg YW5kIHRvIHVzZSBkaXJlY3QgY2FsbGluZyBvZiBzaGVsbCByYXRoZXIKLSAgdGhhbiBpbnRlcm1l ZGlhdGUgc3lzdGVtKCkgY2FsbC4gLS0gSC4gRmlzY2hlciAoMTk4NSk7IG1hbnkgY2hhbmdlcyBz aW5jZQotICB0aGVuLiAgQ2FsbCB3aXRoIHMgcG9pbnRpbmcgdG8gY29tbWFuZCB0byBleGVjdXRl LiAgUmV0dXJuczoKLSAgIC0xIG9uIGZhaWx1cmUgdG8gc3RhcnQgdGhlIGNvbW1hbmQgKGNhbid0 IGZpbmQsIGNhbid0IGZvcmssIGNhbid0IHJ1bikuCi0gICAgMSBpZiBjb21tYW5kIHJhbiBhbmQg Z2F2ZSBhbiBleGl0IHN0YXR1cyBvZiAwLgotICAgIDAgaWYgY29tbWFuZCByYW4gYW5kIGdhdmUg YSBub256ZXJvIGV4aXQgc3RhdHVzLgotICB3aXRoIHBleGl0c3RhdHVzIGNvbnRhaW5pbmcgdGhl IGNvbW1hbmQncyBleGl0IHN0YXR1cy4KLSovCi1pbnQKLXpzaGNtZChzKSBjaGFyICpzOyB7Ci0g ICAgUElEX1QgcGlkOwotCi0jaWZkZWYgTk9QVVNICi0gICAgcmV0dXJuKDApOwotI2Vsc2UKLSAg ICBpZiAobm9wdXNoKSByZXR1cm4oLTEpOwotICAgIGlmICghcykgcmV0dXJuKC0xKTsKLSAgICB3 aGlsZSAoKnMgPT0gJyAnKSBzKys7Ci0KLSAgICBkZWJ1ZyhGMTEwLCJ6c2hjbWQgY29tbWFuZCIs cywwKTsKLQotI2lmZGVmIGFlZ2lzCi0gICAgaWYgKChwaWQgPSB2Zm9yaygpKSA9PSAwKSB7ICAg ICAgICAgLyogTWFrZSBjaGlsZCBxdWlja2x5ICovCi0gICAgICAgIGNoYXIgKnNocGF0aCwgKnNo bmFtZSwgKnNocHRyOyAgLyogRm9yIGZpbmRpbmcgZGVzaXJlZCBzaGVsbCAqLwotCi0gICAgICAg IGlmIChwcml2X2NhbigpKSBleGl0KDEpOyAgICAgICAgLyogVHVybiBvZmYgcHJpdnMuICovCi0g ICAgICAgIGlmICgoc2hwYXRoID0gZ2V0ZW52KCJTSEVMTCIpKSA9PSBOVUxMKSBzaHBhdGggPSAi L2NvbS9zaCI7Ci0KLSNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBB bGwgVW5peCBzeXN0ZW1zICovCi0gICAgaWYgKChwaWQgPSBmb3JrKCkpID09IDApIHsgICAgICAg ICAgLyogTWFrZSBjaGlsZCAqLwotICAgICAgICBjaGFyICpzaHBhdGgsICpzaG5hbWUsICpzaHB0 cjsgIC8qIEZvciBmaW5kaW5nIGRlc2lyZWQgc2hlbGwgKi8KLSAgICAgICAgc3RydWN0IHBhc3N3 ZCAqcDsKLSNpZmRlZiBIUFVYMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0 ICovCi0gICAgICAgIGNoYXIgKmRlZnNoZWxsID0gIi91c3IvYmluL3NoIjsKLSNlbHNlCi0jaWZk ZWYgUGxhbjkKLSAgICAgICAgY2hhciAqZGVmc2hlbGwgPSAiL2Jpbi9yYyI7Ci0jZWxzZQotICAg ICAgICBjaGFyICpkZWZzaGVsbCA9ICIvYmluL3NoIjsKLSNlbmRpZiAvKiBQbGFuOSAqLwotI2Vu ZGlmIC8qIEhQVVgxMCAqLwotICAgICAgICBpZiAocHJpdl9jYW4oKSkgZXhpdCgxKTsgICAgICAg IC8qIFR1cm4gb2ZmIHByaXZzLiAqLwotI2lmZGVmIENPTU1FTlQKLS8qIE9sZCB3YXkgYWx3YXlz IHVzZWQgL2V0Yy9wYXNzd2Qgc2hlbGwgKi8KLSAgICAgICAgcCA9IGdldHB3dWlkKHJlYWxfdWlk KCkpOyAgICAgICAvKiBHZXQgbG9naW4gZGF0YSAqLwotICAgICAgICBpZiAocCA9PSAoc3RydWN0 IHBhc3N3ZCAqKSBOVUxMIHx8ICEqKHAtPnB3X3NoZWxsKSkKLSAgICAgICAgICBzaHBhdGggPSBk ZWZzaGVsbDsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHNocGF0aCA9IHAtPnB3X3NoZWxsOwot I2Vsc2UKLS8qIE5ldyB3YXkgbGV0cyB1c2VyIG92ZXJyaWRlIHdpdGggU0hFTEwgdmFyaWFibGUs IGJ1dCBkb2VzIG5vdCByZWx5IG9uIGl0LiAqLwotLyogVGhpcyBhbGxvd3MgdXNlciB0byBzcGVj aWZ5IGEgZGlmZmVyZW50IHNoZWxsLiAqLwotICAgICAgICBzaHBhdGggPSBnZXRlbnYoIlNIRUxM Iik7ICAgICAgIC8qIFdoYXQgc2hlbGw/ICovCi0JZGVidWcoRjExMCwienNoY21kIFNIRUxMIixz aHBhdGgsMCk7Ci0JewotCSAgICBpbnQgeCA9IDA7Ci0JICAgIGlmICghc2hwYXRoKSB7Ci0JCXgr KzsKLQkgICAgfSBlbHNlIGlmICghKnNocGF0aCkgewotCQl4Kys7Ci0JICAgIH0KLQkgICAgaWYg KHgpIHsKLQkJZGVidWcoRjEwMCwienNoY21kIFNIRUxMIG5vdCBkZWZpbmVkIiwiIiwwKTsKLQkJ cCA9IGdldHB3dWlkKCByZWFsX3VpZCgpICk7IC8qIEdldCBsb2dpbiBkYXRhICovCi0JCWlmIChw ID09IChzdHJ1Y3QgcGFzc3dkICopTlVMTCB8fCAhKihwLT5wd19zaGVsbCkpIHsKLQkJICAgIHNo cGF0aCA9IGRlZnNoZWxsOwotCQl9IGVsc2UgewotCQkgICAgc2hwYXRoID0gcC0+cHdfc2hlbGw7 Ci0JCX0KLQkJZGVidWcoRjExMCwienNoY21kIHNocGF0aCBmcm9tIGdldHB3dWlkIixzaHBhdGgs MCk7Ci0JICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNlbmRpZiAvKiBh ZWdpcyAqLwotICAgICAgICBzaHB0ciA9IHNobmFtZSA9IHNocGF0aDsKLSAgICAgICAgd2hpbGUg KCpzaHB0ciAhPSAnXDAnKQotICAgICAgICAgIGlmICgqc2hwdHIrKyA9PSBESVJTRVApCi0gICAg ICAgICAgICBzaG5hbWUgPSBzaHB0cjsKLQlyZXN0b3JzaWdzKCk7CQkJLyogUmVzdG9yZSBpZ25v cmVkIHNpZ25hbHMgKi8KLQlkZWJ1ZyhGMTEwLCJ6c2hjbWQgZXhlY2wgc2hwYXRoIixzaHBhdGgs MCk7Ci0JZGVidWcoRjExMCwienNoY21kIGV4ZWNsIHNobmFtZSIsc2huYW1lLDApOwotICAgICAg ICBpZiAocyA9PSBOVUxMIHx8ICpzID09ICdcMCcpIHsgIC8qIEludGVyYWN0aXZlIHNoZWxsIHJl cXVlc3RlZD8gKi8KLQkgICAgZGVidWcoRjEwMCwienNoY21kIGV4ZWNsIGludGVyYWN0aXZlIiwi IiwwKTsKLSAgICAgICAgICAgIGV4ZWNsKHNocGF0aCxzaG5hbWUsIi1pIixOVUxMKTsgLyogWWVz LCBkbyB0aGF0ICovCi0gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyog T3RoZXJ3aXNlLCAqLwotCSAgICBkZWJ1ZyhGMTEwLCJ6c2hjbWQgZXhlY2wgY29tbWFuZCIscyww KTsKLSAgICAgICAgICAgIGV4ZWNsKHNocGF0aCxzaG5hbWUsIi1jIixzLE5VTEwpOyAvKiBleGVj IHRoZSBnaXZlbiBjb21tYW5kICovCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogSWYgZXhlY2woKSBmYWlsZWQsICovCi0gICAgICAgIGRlYnVnKEYxMDEsInpzaGNt ZCBlcnJubyIsIiIsZXJybm8pOwotCXBlcnJvcihzaHBhdGgpOwkJCS8qIHByaW50IHJlYXNvbiBh bmQgKi8KLSAgICAgICAgZXhpdChCQURfRVhJVCk7ICAgICAgICAgICAgICAgICAvKiByZXR1cm4g YmFkIHJldHVybiBjb2RlLiAqLwotCi0gICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogUGFyZW50ICovCi0KLSAgICAgICAgaW50IHdzdGF0OyAgICAgICAgICAgICAgICAg ICAgICAvKiAuLi4gbXVzdCB3YWl0IGZvciBjaGlsZCAqLwotI2lmZGVmIENLX0NISUxECi0gICAg ICAgIGludCBjaGlsZDsgICAgICAgICAgICAgICAgICAgICAgLyogQ2hpbGQncyBleGl0IHN0YXR1 cyAqLwotI2VuZGlmIC8qIENLX0NISUxEICovCi0gICAgICAgIFNJR1RZUCAoKmlzdGF0KSgpLCAo KnFzdGF0KSgpOwotCi0gICAgICAgIGlmIChwaWQgPT0gKFBJRF9UKSAtMSkgcmV0dXJuKC0xKTsg LyogZm9yaygpIGZhaWxlZD8gKi8KLQotICAgICAgICBpc3RhdCA9IHNpZ25hbChTSUdJTlQsU0lH X0lHTik7IC8qIExldCB0aGUgZm9yayBoYW5kbGUga2V5Ym9hcmQgKi8KLSAgICAgICAgcXN0YXQg PSBzaWduYWwoU0lHUVVJVCxTSUdfSUdOKTsgLyogaW50ZXJydXB0cyBpdHNlbGYuLi4gKi8KLQot CWRlYnVnKEYxMTAsInpzaGNtZCBwYXJlbnQgd2FpdGluZyBmb3IgY2hpbGQiLHMsMCk7Ci0jaWZk ZWYgQ0tfQ0hJTEQKLSAgICAgICAgd2hpbGUgKCgod3N0YXQgPSB3YWl0KCZjaGlsZCkpICE9IHBp ZCkgJiYgKHdzdGF0ICE9IC0xKSkKLSNlbHNlCi0gICAgICAgIHdoaWxlICgoKHdzdGF0ID0gd2Fp dCgoV0FJVF9UICopMCkpICE9IHBpZCkgJiYgKHdzdGF0ICE9IC0xKSkKLSNlbmRpZiAvKiBDS19D SElMRCAqLwotICAgICAgICAgIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdhaXQg Zm9yIGZvcmsgKi8KLSAgICAgICAgc2lnbmFsKFNJR0lOVCxpc3RhdCk7ICAgICAgICAgICAvKiBS ZXN0b3JlIGludGVycnVwdHMgKi8KLSAgICAgICAgc2lnbmFsKFNJR1FVSVQscXN0YXQpOwotI2lm ZGVmIENLX0NISUxECi0gICAgICAgIHBleGl0c3RhdCA9IChjaGlsZCAmIDB4ZmYpID8gY2hpbGQg OiBjaGlsZCA+PiA4OwotCWRlYnVnKEYxMDEsInpzaGNtZCBleGl0IHN0YXR1cyIsIiIscGV4aXRz dGF0KTsKLSAgICAgICAgcmV0dXJuKGNoaWxkID09IDAgPyAxIDogMCk7ICAgICAvKiBSZXR1cm4g Y2hpbGQncyBzdGF0dXMgKi8KLSNlbmRpZiAvKiBDS19DSElMRCAqLwotICAgIH0KLSAgICByZXR1 cm4oMSk7Ci0jZW5kaWYgLyogTk9QVVNIICovCi19Ci0KLS8qICBJIFMgVyBJIEwgRCAgLS0gIENo ZWNrIGlmIGZpbGVzcGVjIGlzICJ3aWxkIiAgKi8KLQotLyoKLSAgUmV0dXJuczoKLSAgICAwIHdp bGRjYXJkcyBkaXNhYmxlZCBvciBhcmd1bWVudCBpcyBlbXB0eSBvciBpcyB0aGUgbmFtZSBvZiBh IHNpbmdsZSBmaWxlOwotICAgIDEgaWYgaXQgY29udGFpbnMgd2lsZGNhcmQgY2hhcmFjdGVycy4K LSAgTm90ZTogbXVzdCBtYXRjaCB0aGUgYWxnb3JpdGhtIHVzZWQgYnkgbWF0Y2goKSwgaGVuY2Ug bm8gW2Etel0sIGV0Yy4KLSovCi1pbnQKLWlzd2lsZChmaWxlc3BlYykgY2hhciAqZmlsZXNwZWM7 IHsKLSAgICBjaGFyIGMsICpwLCAqZjsgaW50IHg7Ci0gICAgaW50IHF1byA9IDA7Ci0gICAgaWYg KCFmaWxlc3BlYykJCQkvKiBTYWZldHkgKi8KLSAgICAgIHJldHVybigwKTsKLSAgICBpZiAoIXdp bGRlbmEpCQkJLyogV2lsZGNhcmRzIGRpc2FibGVkIC0gMTIgSnVuIDIwMDUgKi8KLSAgICAgIHJl dHVybigwKTsKLSAgICBmID0gZmlsZXNwZWM7Ci0gICAgaWYgKHdpbGR4cGFuZCkgewkJCS8qIFNo ZWxsIGhhbmRsZXMgd2lsZGNhcmRpbmcgKi8KLSAgICAgICAgaWYgKCh4ID0gbnp4cGFuZChmaWxl c3BlYywwKSkgPiAxKQotICAgICAgICAgIHJldHVybigxKTsKLSAgICAgICAgaWYgKHggPT0gMCkg cmV0dXJuKDApOyAgICAgICAgICAvKiBGaWxlIGRvZXMgbm90IGV4aXN0ICovCi0gICAgICAgIHAg PSBtYWxsb2MoTUFYTkFNTEVOICsgMjApOwotICAgICAgICB6bmV4dChwKTsKLSAgICAgICAgeCA9 IChzdHJjbXAoZmlsZXNwZWMscCkgIT0gMCk7Ci0gICAgICAgIGZyZWUocCk7Ci0gICAgICAgIHAg PSBOVUxMOwotICAgICAgICByZXR1cm4oeCk7Ci0gICAgfSBlbHNlIHsJCQkJLyogV2UgZG8gaXQg b3Vyc2VsdmVzICovCi0gICAgICAgIHdoaWxlICgoYyA9ICpmaWxlc3BlYysrKSAhPSAnXDAnKSB7 Ci0gICAgICAgICAgICBpZiAoYyA9PSAnXFwnICYmIHF1byA9PSAwKSB7Ci0gICAgICAgICAgICAg ICAgcXVvID0gMTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIGlmICghcXVvICYmIChjID09ICcqJyB8fCBjID09ICc/JwotI2lmZGVmIENLUkVH RVgKLSNpZm5kZWYgVk1TCi0gICAgICAgICAgICAgICAgICAgICAgICAgfHwgYyA9PSAnWycKLSNl bmRpZiAvKiBWTVMgKi8KLQkJCSB8fCBjID09ICd7JwotI2VuZGlmIC8qIENLUkVHRVggKi8KLSAg ICAgICAgICAgICAgICAgICAgICAgICApKSB7Ci0JCWRlYnVnKEYxMTEsImlzd2lsZCIsZiwxKTsK LQkJcmV0dXJuKDEpOwotCSAgICB9Ci0gICAgICAgICAgICBxdW8gPSAwOwotICAgICAgICB9Ci0J ZGVidWcoRjExMSwiaXN3aWxkIixmLDApOwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotfQot Ci0vKgotICBJIFMgRCBJIFIgIC0tICBJcyBhIERpcmVjdG9yeS4KLQotICBUZWxsIGlmIHN0cmlu ZyBwb2ludGVyIHMgaXMgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgZGlyZWN0b3J5LiAgUmV0dXJu cyAxIGlmCi0gIGRpcmVjdG9yeSwgMCBpZiBub3QgYSBkaXJlY3RvcnkuCi0KLSAgVGhlIGZvbGxv d2luZyBubyBsb25nZXIgYXBwbGllczoKLQotICBJZiB0aGUgZmlsZSBpcyBhIHN5bWxpbmssIHdl IHJldHVybiAxIGlmCi0gIGl0IGlzIGEgZGlyZWN0b3J5IE9SIGlmIGl0IGlzIGEgbGluayB0byBh IGRpcmVjdG9yeSBhbmQgdGhlICJ4cmVjdXJzaXZlIiBmbGFnCi0gIGlzIE5PVCBzZXQuICBUaGlz IGlzIHRvIGFsbG93IHBhcnNpbmcgYSBsaW5rIHRvIGEgZGlyZWN0b3J5IGFzIGlmIGl0IHdlcmUg YQotICBkaXJlY3RvcnkgKGUuZy4gaW4gdGhlIENEIG9yIElGIERJUkVDVE9SWSBjb21tYW5kKSBi dXQgc3RpbGwgcHJldmVudAotICByZWN1cnNpdmUgdHJhdmVyc2FsIGZyb20gdmlzaXRpbmcgdGhl IHNhbWUgZGlyZWN0b3J5IHR3aWNlLgotKi8KLQotI2lmZGVmIElTRElSQ0FDSEUKLS8qIFRoaXMg dHVybnMgb3V0IHRvIGJlIHVuc2FmZSBhbmQgZ2l2ZXMgbGl0dGxlIGJlbmVmaXQgYW55d2F5LiAq LwotLyogU2VlIG5vdGVzIDI4IFNlcCAyMDAzLiAgVGh1cyBJU0RJUkNBQ0hFIGlzIG5vdCBkZWZp bmVkLiAqLwotCi1zdGF0aWMgY2hhciBwcmV2cGF0aFtDS01BWFBBVEgrNF0gPSB7ICdcMCcsICdc MCcgfTsKLXN0YXRpYyBpbnQgcHJldnN0YXQgPSAtMTsKLWludAotY2xyZGlyY2FjaGUoKSB7Ci0g ICAgZGVidWcoRjEwMCwiQ0xFQVIgSVNESVIgQ0FDSEUiLCIiLDApOwotICAgIHByZXZzdGF0ID0g LTE7Ci0gICAgcHJldnBhdGhbMF0gPSBOVUw7Ci19Ci0jZW5kaWYgLyogSVNESVJDQUNIRSAqLwot Ci1pbnQKLWlzYWxpbmsocykgY2hhciAqczsgewotI2lmbmRlZiBDS1NZTUxJTksKLSAgICByZXR1 cm4oMCk7Ci0jZWxzZQotICAgIGludCByID0gMDsKLSAgICBjaGFyIGZpbGJ1ZltDS01BWFBBVEgr NF07Ci0gICAgaWYgKHJlYWRsaW5rKHMsZmlsYnVmLENLTUFYUEFUSCkgPiAtMSkKLSAgICAgIHIg PSAxOwotICAgIGRlYnVnKEYxMTAsImlzYWxpbmsgcmVhZGxpbmsiLHMscik7Ci0gICAgcmV0dXJu KHIpOwotI2VuZGlmCS8qIENLU1lNTElOSyAqLwotfQotCi1pbnQKLWlzZGlyKHMpIGNoYXIgKnM7 IHsKLSAgICBpbnQgeCwgbmVlZHJsaW5rID0gMCwgaXNsaW5rID0gMDsKLSAgICBzdHJ1Y3Qgc3Rh dCBzdGF0YnVmOwotICAgIGNoYXIgZm5hbVtDS01BWFBBVEgrNF07Ci0KLSAgICBpZiAoIXMpIHJl dHVybigwKTsKLSAgICBkZWJ1ZyhGMTEwLCJpc2RpciBlbnRyeSIscywwKTsKLSNpZmRlZiBEVElM REUJCQkJLyogMjAwNS0wOC0xMyAqLwotICAgIGlmICgqcyA9PSAnficpIHsJCQkvKiBTdGFydHMg d2l0aCB0aWxkZT8gKi8KLSAgICAgICAgcyA9IHRpbGRlX2V4cGFuZChzKTsJCS8qIEF0dGVtcHQg dG8gZXhwYW5kIHRpbGRlICovCi0gICAgICAgIGlmICghcykgcyA9ICIiOwotCWRlYnVnKEYxMTAs ImlzZGlyIHRpbGRlX2V4cGFuZCIscywwKTsKLSAgICB9Ci0jZW5kaWYgLyogRFRJTERFICovCi0g ICAgaWYgKCEqcykgcmV0dXJuKDApOwotCi0jaWZkZWYgSVNESVJDQUNIRQotICAgIGlmIChwcmV2 c3RhdCA+IC0xKSB7Ci0JaWYgKHNbMF0gPT0gcHJldnBhdGhbMF0pIHsKLQkgICAgaWYgKCFzdHJj bXAocyxwcmV2cGF0aCkpIHsKLQkJZGVidWcoRjExMSwiaXNkaXIgY2FjaGUgaGl0IixzLHByZXZz dGF0KTsKLQkJcmV0dXJuKHByZXZzdGF0KTsKLQkgICAgfQotCX0KLSAgICB9Ci0jZW5kaWYgLyog SVNESVJDQUNIRSAqLwotCi0jaWZkZWYgQ0tTWU1MSU5LCi0jaWZkZWYgQ09NTUVOVAotLyoKLSAg VGhlIGZvbGxvd2luZyBvdmVyLWNsZXZlciBiaXQgaGFzIGJlZW4gY29tbWVudGVkIG91dCBiZWNh dXNlIGl0IHByZXN1bWVzCi0gIHRvIGtub3cgd2hlbiBhIHN5bWxpbmsgbWlnaHQgYmUgcmVkdW5k YW50LCB3aGljaCBpdCBjYW4ndCBwb3NzaWJseSBrbm93LgotICBVc2luZyBwbGFpbiBvbGQgc3Rh dCgpIGdpdmVzIEtlcm1pdCB0aGUgc2FtZSByZXN1bHRzIGFzIGxzIGFuZCBscyAtUiwgd2hpY2gK LSAgaXMganVzdCBmaW5lOiBubyBzdXJwcmlzZXMuCi0qLwotI2lmZGVmIFVTRV9MU1RBVAotICAg IGlmICh4cmVjdXJzaXZlKSB7Ci0gICAgICAgIHggPSBsc3RhdChzLCZzdGF0YnVmKTsKLSAgICAg ICAgZGVidWcoRjExMSwiaXNkaXIgbHN0YXQiLHMseCk7Ci0gICAgfSBlbHNlIHsKLSNlbmRpZiAv KiBVU0VfTFNUQVQgKi8KLSAgICAgICAgeCA9IHN0YXQocywmc3RhdGJ1Zik7Ci0gICAgICAgIGRl YnVnKEYxMTEsImlzZGlyIHN0YXQiLHMseCk7Ci0jaWZkZWYgVVNFX0xTVEFUCi0gICAgfQotI2Vu ZGlmIC8qIFVTRV9MU1RBVCAqLwotI2Vsc2UKLSAgICB4ID0gc3RhdChzLCZzdGF0YnVmKTsKLSAg ICBkZWJ1ZyhGMTExLCJpc2RpciBzdGF0IixzLHgpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAg ICBpZiAoeCA9PSAtMSkgewotICAgICAgICBkZWJ1ZyhGMTAxLCJpc2RpciBlcnJubyIsIiIsZXJy bm8pOwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotICAgIGlzbGluayA9IDA7Ci0gICAgaWYg KHhyZWN1cnNpdmUpIHsKLSNpZmRlZiBOT0xJTktCSVRTCi0gICAgICAgIG5lZWRybGluayA9IDE7 Ci0jZWxzZQotI2lmZGVmIFNfSVNMTksKLSAgICAgICAgaXNsaW5rID0gU19JU0xOSyhzdGF0YnVm LnN0X21vZGUpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJpc2RpciBTX0lTTE5LIGlzbGluayIsIiIs aXNsaW5rKTsKLSNlbHNlCi0jaWZkZWYgX0lGTE5LCi0gICAgICAgIGlzbGluayA9IChfSUZNVCAm IHN0YXRidWYuc3RfbW9kZSkgPT0gX0lGTE5LOwotICAgICAgICBkZWJ1ZyhGMTAxLCJpc2RpciBf SUZMTksgaXNsaW5rIiwiIixpc2xpbmspOwotI2VuZGlmIC8qIF9JRkxOSyAqLwotI2VuZGlmIC8q IFNfSVNMTksgKi8KLSNlbmRpZiAvKiBOT0xJTktCSVRTICovCi0gICAgICAgIGlmIChuZWVkcmxp bmspIHsKLSAgICAgICAgICAgIGlmIChyZWFkbGluayhzLGZuYW0sQ0tNQVhQQVRIKSA+IC0xKQot ICAgICAgICAgICAgICBpc2xpbmsgPSAxOwotICAgICAgICB9Ci0gICAgfQotI2Vsc2UKLSAgICB4 ID0gc3RhdChzLCZzdGF0YnVmKTsKLSAgICBpZiAoeCA9PSAtMSkgewotICAgICAgICBkZWJ1ZyhG MTAxLCJpc2RpciBlcnJubyIsIiIsZXJybm8pOwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQot ICAgIGRlYnVnKEYxMTEsImlzZGlyIHN0YXQiLHMseCk7Ci0jZW5kaWYgLyogQ0tTWU1MSU5LICov Ci0gICAgZGVidWcoRjEwMSwiaXNkaXIgaXNsaW5rIiwiIixpc2xpbmspOwotICAgIGRlYnVnKEYx MDEsImlzZGlyIHN0YXRidWYuc3RfbW9kZSIsIiIsc3RhdGJ1Zi5zdF9tb2RlKTsKLSAgICB4ID0g aXNsaW5rID8gMCA6IChTX0lTRElSIChzdGF0YnVmLnN0X21vZGUpID8gMSA6IDApOwotI2lmZGVm IElTRElSQ0FDSEUKLSAgICBwcmV2c3RhdCA9IHg7Ci0gICAgY2tzdHJuY3B5KHByZXZwYXRoLHMs Q0tNQVhQQVRIKzEpOwotI2VuZGlmIC8qIElTRElSQ0FDSEUgKi8KLSAgICByZXR1cm4oeCk7Ci19 Ci0KLSNpZmRlZiBDS19NS0RJUgotLyogU29tZSBzeXN0ZW1zIGRvbid0IGhhdmUgbWtkaXIoKSwg ZS5nLiBUYW5keSBYZW5peCAzLjIuLiAqLwotCi0vKiBaIE0gSyBEIEkgUiAgLS0gIENyZWF0ZSBk aXJlY3RvcnkocykgaWYgbmVjZXNzYXJ5ICovCi0vKgotICAgQ2FsbCB3aXRoOgotICAgIEEgcG9p bnRlciB0byBhIGZpbGUgc3BlY2lmaWNhdGlvbiB0aGF0IG1pZ2h0IGNvbnRhaW4gZGlyZWN0b3J5 Ci0gICAgaW5mb3JtYXRpb24uICBUaGUgZmlsZW5hbWUgaXMgZXhwZWN0ZWQgdG8gYmUgaW5jbHVk ZWQuCi0gICAgSWYgdGhlIGZpbGUgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGFueSBk aXJlY3Rvcnkgc2VwYXJhdG9ycywKLSAgICB0aGVuIGl0IGlzIGFzc3VtZWQgdG8gYmUgYSBwbGFp biBmaWxlLgotICAgIElmIG9uZSBvciBtb3JlIGRpcmVjdG9yaWVzIGFyZSBpbmNsdWRlZCBpbiB0 aGUgZmlsZSBzcGVjaWZpY2F0aW9uLAotICAgIHRoaXMgcm91dGluZSB0cmllcyB0byBjcmVhdGUg dGhlbSBpZiB0aGV5IGRvbid0IGFscmVhZHkgZXhpc3QuCi0gICBSZXR1cm5zOgotICAgIDAgb3Ig Z3JlYXRlciBvbiBzdWNjZXNzLCBpLmUuIHRoZSBudW1iZXIgb2YgZGlyZWN0b3JpZXMgY3JlYXRl ZC4KLSAgIC0xIG9uIGZhaWx1cmUgdG8gY3JlYXRlIHRoZSBkaXJlY3RvcnkKLSovCi1pbnQKLXpt a2RpcihwYXRoKSBjaGFyICpwYXRoOyB7Ci0gICAgY2hhciAqeHAsICp0cCwgYzsKLSAgICBpbnQg eCwgY291bnQgPSAwOwotCi0gICAgaWYgKCFwYXRoKSBwYXRoID0gIiI7Ci0gICAgaWYgKCEqcGF0 aCkgcmV0dXJuKC0xKTsKLQotI2lmZGVmIENLUk9PVAotICAgIGRlYnVnKEYxMTEsInpta2RpciBz ZXRyb290Iixja3Jvb3QsY2tyb290c2V0KTsKLSAgICBpZiAoY2tyb290c2V0KSBpZiAoIXppbnJv b3QocGF0aCkpIHsKLQlkZWJ1ZyhGMTEwLCJ6bWtkaXIgc2V0cm9vdCB2aW9sYXRpb24iLHBhdGgs MCk7Ci0JcmV0dXJuKC0xKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tST09UICovCi0KLSAgICB4ID0g c3RybGVuKHBhdGgpOwotICAgIGRlYnVnKEYxMTEsInpta2RpciIscGF0aCx4KTsKLSAgICBpZiAo eCA8IDEgfHwgeCA+IE1BWFBBVEgpICAgICAgICAgICAvKiBDaGVjayBsZW5ndGggKi8KLSAgICAg IHJldHVybigtMSk7Ci0gICAgaWYgKCEodHAgPSBtYWxsb2MoeCsxKSkpICAgICAgICAgICAgLyog TWFrZSBhIHRlbXBvcmFyeSBjb3B5ICovCi0gICAgICByZXR1cm4oLTEpOwotICAgIHN0cmNweSh0 cCxwYXRoKTsJCQkvKiBzYWZlIChwcmVjaGVja2VkKSAqLwotI2lmZGVmIERUSUxERQotICAgIGlm ICgqdHAgPT0gJ34nKSB7ICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0cyB3aXRoIHRpbGRlPyAq LwotICAgICAgICB4cCA9IHRpbGRlX2V4cGFuZCh0cCk7ICAgICAgICAgIC8qIEF0dGVtcHQgdG8g ZXhwYW5kIHRpbGRlICovCi0gICAgICAgIGlmICgheHApIHhwID0gIiI7Ci0gICAgICAgIGlmICgq eHApIHsKLSAgICAgICAgICAgIGNoYXIgKnpwOwotICAgICAgICAgICAgZGVidWcoRjExMCwiem1r ZGlyIHRpbGRlX2V4cGFuZCIseHAsMCk7Ci0gICAgICAgICAgICBpZiAoISh6cCA9IG1hbGxvYyhz dHJsZW4oeHApICsgMSkpKSB7IC8qIE1ha2UgYSBwbGFjZSBmb3IgaXQgKi8KLSAgICAgICAgICAg ICAgICBmcmVlKHRwKTsKLSAgICAgICAgICAgICAgICB0cCA9IE5VTEw7Ci0gICAgICAgICAgICAg ICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZyZWUodHApOyAgICAg ICAgICAgICAgICAgICAvKiBGcmVlIHByZXZpb3VzIGJ1ZmZlciAqLwotICAgICAgICAgICAgdHAg PSB6cDsgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50IHRvIG5ldyBvbmUgKi8KLSAgICAgICAg ICAgIHN0cmNweSh0cCx4cCk7ICAgICAgICAgICAgICAvKiBDb3B5IGV4cGFuZGVkIG5hbWUgdG8g bmV3IGJ1ZmZlciAqLwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIERUSUxERSAqLwotICAg IGRlYnVnKEYxMTAsInpta2RpciB0cCBhZnRlciB0aWxkZV9leHBhbnNpb24iLHRwLDApOwotICAg IHhwID0gdHA7Ci0gICAgaWYgKElTRElSU0VQKCp4cCkpICAgICAgICAgICAgICAgICAgLyogRG9u J3QgY3JlYXRlIHJvb3QgZGlyZWN0b3J5ISAqLwotICAgICAgeHArKzsKLQotICAgIC8qIEdvIHRo cnUgZmlsZXNwZWMgZnJvbSBsZWZ0IHRvIHJpZ2h0Li4uICovCi0KLSAgICBmb3IgKDsgKnhwOyB4 cCsrKSB7ICAgICAgICAgICAgICAgICAvKiBDcmVhdGUgcGFydHMgdGhhdCBkb24ndCBleGlzdCAq LwotICAgICAgICBpZiAoIUlTRElSU0VQKCp4cCkpICAgICAgICAgICAgIC8qIEZpbmQgbmV4dCBk aXJlY3Rvcnkgc2VwYXJhdG9yICovCi0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGMgPSAq eHA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogR290IG9uZS4gKi8KLSAgICAgICAgKnhwID0g TlVMOyAgICAgICAgICAgICAgICAgICAgICAvKiBNYWtlIHRoaXMgdGhlIGVuZCBvZiB0aGUgc3Ry aW5nLiAqLwotICAgICAgICBpZiAoIWlzZGlyKHRwKSkgeyAgICAgICAgICAgICAgIC8qIFRoaXMg ZGlyZWN0b3J5IGV4aXN0cyBhbHJlYWR5PyAqLwotI2lmZGVmIENLX0xPR0lOCi0gICAgICAgICAg ICBpZiAoaXNndWVzdCkgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBhbGxvd2VkIGZvciBndWVz dHMgKi8KLQkgICAgICByZXR1cm4oLTEpOwotI2lmbmRlZiBOT1hGRVIKLSAgICAgICAgICAgIC8q IE5vciBpZiBNS0RJUiBhbmQvb3IgQ0QgYXJlIGRpc2FibGVkICovCi0gICAgICAgICAgICBlbHNl Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLQkgICAgICBpZiAoKHNlcnZlcgotI2lmZGVmIElLU0QK LQkJICAgfHwgaW5zZXJ2ZXIKLSNlbmRpZiAvKiBJS1NEICovCi0JCSAgICkgJiYgKCFFTkFCTEVE KGVuX21rZCkgfHwgIUVOQUJMRUQoZW5fY3dkKSkpCi0JCXJldHVybigtMSk7Ci0jZW5kaWYgLyog SUtTRCAqLwotCi0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ6bWtkaXIgbWFraW5nIix0cCwwKTsK LSAgICAgICAgICAgIHggPSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBObywgdHJ5IHRvIGNy ZWF0ZSBpdCAqLwotI2lmZGVmIE5PTUtESVIKLSAgICAgICAgICAgICAgIC0xICAgICAgICAgICAg ICAgICAgICAgICAvKiBTeXN0ZW1zIHdpdGhvdXQgbWtkaXIoKSAqLwotI2Vsc2UKLSAgICAgICAg ICAgICAgIG1rZGlyKHRwLDA3NzcpICAgICAgICAgICAvKiBVTklYICovCi0jZW5kaWYgLyogTk9N S0RJUiAqLwotICAgICAgICAgICAgICAgICA7Ci0gICAgICAgICAgICBpZiAoeCA8IDApIHsKLSAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6bWtkaXIgZmFpbGVkLCBlcnJubyIsIiIsZXJybm8p OwotICAgICAgICAgICAgICAgIGZyZWUodHApOyAgICAgICAgICAgICAgIC8qIEZyZWUgdGVtcG9y YXJ5IGJ1ZmZlci4gKi8KLSAgICAgICAgICAgICAgICB0cCA9IE5VTEw7Ci0gICAgICAgICAgICAg ICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgLyogUmV0dXJuIGZhaWx1cmUgY29kZS4gKi8KLSAg ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICB9Ci0gICAg ICAgICp4cCA9IGM7ICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVwbGFjZSB0aGUgc2VwYXJh dG9yLiAqLwotICAgIH0KLSAgICBmcmVlKHRwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBGcmVlIHRlbXBvcmFyeSBidWZmZXIuICovCi0gICAgcmV0dXJuKGNvdW50KTsgICAgICAgICAg ICAgICAgICAgICAgLyogUmV0dXJuIHN1Y2Nlc3MgY29kZS4gKi8KLX0KLSNlbmRpZiAvKiBDS19N S0RJUiAqLwotCi1pbnQKLXpybWRpcihwYXRoKSBjaGFyICpwYXRoOyB7Ci0jaWZkZWYgQ0tfTE9H SU4KLSAgICBpZiAoaXNndWVzdCkKLSAgICAgIHJldHVybigtMSk7Ci0jZW5kaWYgLyogQ0tfTE9H SU4gKi8KLQotICAgIGlmICghcGF0aCkgcGF0aCA9ICIiOwotICAgIGlmICghKnBhdGgpIHJldHVy bigtMSk7Ci0KLSNpZmRlZiBDS1JPT1QKLSAgICBkZWJ1ZyhGMTExLCJ6cm1kaXIgc2V0cm9vdCIs Y2tyb290LGNrcm9vdHNldCk7Ci0gICAgaWYgKGNrcm9vdHNldCkgaWYgKCF6aW5yb290KHBhdGgp KSB7Ci0JZGVidWcoRjExMCwienJtZGlyIHNldHJvb3QgdmlvbGF0aW9uIixwYXRoLDApOwotCXJl dHVybigtMSk7Ci0gICAgfQotI2VuZGlmIC8qIENLUk9PVCAqLwotCi0jaWZuZGVmIE5PTUtESVIK LSAgICByZXR1cm4ocm1kaXIocGF0aCkpOwotI2Vsc2UKLSAgICByZXR1cm4oLTEpOwotI2VuZGlm IC8qIE5PTUtESVIgKi8KLX0KLQotLyogWiBGIFMgRSBFIEsgIC0tICBQb3NpdGlvbiBpbnB1dCBm aWxlIHBvaW50ZXIgKi8KLS8qCi0gICBDYWxsIHdpdGg6Ci0gICAgQ0tfT0ZGX1QgKDMyIG9yIDY0 IGJpdHMpLCAwLWJhc2VkLCBpbmRpY2F0aW5nIGRlc2lyZWQgcG9zaXRpb24uCi0gICBSZXR1cm5z OgotICAgIDAgb24gc3VjY2Vzcy4KLSAgIC0xIG9uIGZhaWx1cmUuCi0qLwotI2lmbmRlZiBOT1JF U0VORAotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXpmc2VlayhDS19PRkZfVCBwb3MpCi0jZWxzZQot emZzZWVrKHBvcykgQ0tfT0ZGX1QgcG9zOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB6ZnNl ZWsgKi8gewotICAgIHppbmNudCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE11c3Qg ZW1wdHkgdGhlIGlucHV0IGJ1ZmZlciAqLwotICAgIGRlYnVnKEYxMDEsInpmc2VlayIsIiIscG9z KTsKLSAgICByZXR1cm4oQ0tGU0VFSyhmcFtaSUZJTEVdLCBwb3MsIDApPy0xOjApOwotfQotI2Vu ZGlmIC8qIE5PUkVTRU5EICovCi0KLS8qICBaIEYgTiBRIEYgUCAgLS0gIENvbnZlcnQgZmlsZW5h bWUgdG8gZnVsbHkgcXVhbGlmaWVkIGFic29sdXRlIHBhdGhuYW1lICovCi0KLS8qCi0gIEdpdmVu IGEgcG9zc2libHkgdW5xdWFsaWZpZWQgb3IgcmVsYXRpdmUgZmlsZSBzcGVjaWZpY2F0aW9uIGZu LCB6Zm5xZnAoKQotICByZXR1cm5zIHRoZSBmdWxseSBxdWFsaWZpZWQgZmlsZXNwZWMgZm9yIHRo ZSBzYW1lIGZpbGUsIHJldHVybmluZyBhIHN0cnVjdAotICB0aGF0IGNvbnRhaW5zIHRoZSBsZW5n dGggKGxlbikgb2YgdGhlIHJlc3VsdCwgYSBwb2ludGVyIChmcGF0aCkgdG8gdGhlCi0gIHdob2xl IHJlc3VsdCwgYW5kIGEgcG9pbnRlciAoZm5hbWUpIHRvIHdoZXJlIHRoZSBmaWxlbmFtZSBzdGFy dHMuCi0qLwotc3RhdGljIHN0cnVjdCB6Zm5mcCBmbmZwID0geyAwLCBOVUxMLCBOVUxMIH07Ci0K LXN0cnVjdCB6Zm5mcCAqCi16Zm5xZnAoZm5hbWUsIGJ1ZmxlbiwgYnVmKSAgY2hhciAqIGZuYW1l OyBpbnQgYnVmbGVuOyBjaGFyICogYnVmOyB7Ci0gICAgY2hhciAqIHM7Ci0gICAgaW50IGxlbjsK LSNpZmRlZiBNQVhQQVRITEVOCi0gICAgY2hhciB6Zm50bXBbTUFYUEFUSExFTis0XTsKLSNlbHNl Ci0gICAgY2hhciB6Zm50bXBbQ0tNQVhQQVRIKzRdOwotI2VuZGlmIC8qIE1BWFBBVEhMRU4gKi8K LQotICAgIGNoYXIgc2JbMzJdLCAqIHRtcDsKLSAgICBpbnQgaSA9IDAsIGogPSAwLCBrID0gMCwg eCA9IDAsIHkgPSAwOwotICAgIGludCBpdHNhZGlyID0gMDsKLQotICAgIHMgPSBmbmFtZTsKLSAg ICBpZiAoIXMpCi0gICAgICByZXR1cm4oTlVMTCk7Ci0gICAgaWYgKCEqcykKLSAgICAgIHJldHVy bihOVUxMKTsKLSAgICBpZiAoIWJ1ZikKLSAgICAgIHJldHVybihOVUxMKTsKLQotICAgIC8qIElu aXRpYWxpemUgdGhlIGRhdGEgc3RydWN0dXJlICovCi0KLSAgICBmbmZwLmxlbiA9IGNrc3RybmNw eShidWYsZm5hbWUsYnVmbGVuKTsKLSAgICBmbmZwLmZwYXRoID0gYnVmOwotICAgIGZuZnAuZm5h bWUgPSBOVUxMOwotICAgIGxlbiA9IGJ1ZmxlbjsKLSAgICBkZWJ1ZyhGMTExLCJ6Zm5xZnAgZm5h bWUiLGZuYW1lLGxlbik7Ci0KLSNpZmRlZiBEVElMREUKLSAgICBpZiAoKnMgPT0gJ34nKSB7ICAg ICAgICAgICAgICAgICAgICAvKiBTdGFydHMgd2l0aCB0aWxkZT8gKi8KLSAgICAgICAgY2hhciAq IHhwOwotICAgICAgICB4cCA9IHRpbGRlX2V4cGFuZChzKTsgICAgICAgICAgIC8qIEF0dGVtcHQg dG8gZXhwYW5kIHRpbGRlICovCi0gICAgICAgIGRlYnVnKEYxMTAsInpmbnFmcCB4cCIseHAsMCk7 ICAgLyogKHJlYWxwYXRoKCkgZG9lc24ndCBkbyB0aGlzKSAqLwotICAgICAgICBpZiAoIXhwKSB4 cCA9ICIiOwotICAgICAgICBpZiAoKnhwKQotICAgICAgICAgIHMgPSB4cDsKLSAgICB9Ci0jZW5k aWYgLyogRFRJTERFICovCi0KLSNpZmRlZiBDS1JFQUxQQVRICi0KLS8qIE4uQi46IFRoZSByZWFs cGF0aCgpIHJlc3VsdCBidWZmZXIgTVVTVCBiZSBNQVhQQVRITEVOIGJ5dGVzIGxvbmcgKi8KLS8q IG90aGVyd2lzZSB3ZSB3cml0ZSBvdmVyIG1lbW9yeS4gKi8KLQotICAgIGlmICghcmVhbHBhdGgo cyx6Zm50bXApKSB7Ci0gICAgICAgIGRlYnVnKEYxMTEsInpmbnFmcCByZWFscGF0aCBmYWlscyIs cyxlcnJubyk7Ci0jaWZkZWYgQ09NTUVOVAotCWlmIChlcnJubyAhPSBFTk9FTlQpCi0JICByZXR1 cm4oTlVMTCk7Ci0jZWxzZQotCS8qIElmIHJlYWxwYXRoKCkgZmFpbHMgdXNlIHRoZSBkby1pdC15 b3Vyc2VsZiBtZXRob2QgKi8KLQkvKiAxNiBKYW4gMjAwMiAqLwotCWdvdG8gbm9yZWFscGF0aDsK LSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgfQotICAgIGxlbiA9IHN0cmxlbih6Zm50bXApOwot ICAgIGlmIChsZW4gPiBidWZsZW4pIHsKLQlkZWJ1ZyhGMTExLCJ6Zm5xZnAgcmVzdWx0IHRvbyBs b25nIixja2l0b2EoYnVmbGVuKSxsZW4pOwotCXJldHVybihOVUxMKTsKLSAgICB9IGVsc2Ugewot CWNrc3RybmNweShidWYsemZudG1wLGJ1Zmxlbik7Ci0gICAgfQotICAgIGlmIChidWZbbGVuLTFd ICE9ICcvJykgewotCWlmICgoaXRzYWRpciA9IGlzZGlyKGJ1ZikpICYmIGxlbiA8IChidWZsZW4g LSAxKSkgewotCSAgICBidWZbbGVuKytdID0gJy8nOwotCSAgICBidWZbbGVuXSA9IE5VTDsKLQl9 Ci0gICAgfQotICAgIGZuZnAubGVuID0gbGVuOwotICAgIGZuZnAuZnBhdGggPSBidWY7Ci0gICAg ZGVidWcoRjExMCwiemZucWZwIHJlYWxwYXRoIHBhdGgiLGZuZnAuZnBhdGgsMCk7Ci0gICAgdG1w ID0gYnVmICsgZm5mcC5sZW4gLSAxOwotICAgIGlmICghaXRzYWRpcikgewotCXdoaWxlICh0bXAg Pj0gYnVmKSB7Ci0JICAgIGlmICgqdG1wID09ICcvJykgewotCQlmbmZwLmZuYW1lID0gdG1wICsg MTsKLQkJZGVidWcoRjExMCwiemZucWZwIHJlYWxwYXRoIG5hbWUiLGZuZnAuZm5hbWUsMCk7Ci0J CWJyZWFrOwotCSAgICB9Ci0JICAgIHRtcC0tOwotCX0KLSAgICB9Ci0gICAgcmV0dXJuKCZmbmZw KTsKLQotI2VuZGlmIC8qIENLUkVBTFBBVEggKi8KLQotICBub3JlYWxwYXRoOgotCi0gICAgdG1w ID0gemZudG1wOwotICAgIHdoaWxlICgqcykgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJl bW92ZSBsZWFkaW5nICIuLyIgKDAgb3IgbW9yZSkgKi8KLSAgICAgICAgZGVidWcoRjExMCwiemZu cWZwIHdoaWxlICpzIixzLDApOwotICAgICAgICBpZiAoKnMgPT0gJy4nICYmICoocysxKSA9PSAn LycpIHsKLSAgICAgICAgICAgIHMgKz0gMjsKLSAgICAgICAgICAgIHdoaWxlICgqcyA9PSAnLycp IHMrKzsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmICgh KnMpIHJldHVybihOVUxMKTsKLSAgICBpZiAoKnMgPT0gJy8nKSB7ICAgICAgICAgICAgICAgICAg ICAvKiBQYXRobmFtZSBpcyBhYnNvbHV0ZSAqLwotICAgICAgICBja3N0cm5jcHkoYnVmLHMsbGVu KTsKLSAgICAgICAgeCA9IHN0cmxlbihidWYpOwotICAgICAgICB5ID0gMDsKLSAgICB9IGVsc2Ug eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQYXRobmFtZSBpcyByZWxhdGl2ZSAqLwot ICAgICAgICBjaGFyICogcDsKLSAgICAgICAgaWYgKHAgPSB6Z3RkaXIoKSkgeyAgICAgICAgICAg ICAvKiBTbyBnZXQgY3VycmVudCBkaXJlY3RvcnkgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTAs InpmbnFmcCB6Z3RkaXIiLHAsMCk7Ci0gICAgICAgICAgICB4ID0gY2tzdHJuY3B5KGJ1ZixwLGxl bik7Ci0gICAgICAgICAgICBidWZbeCsrXSA9ICcvJzsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAs InpmbnFmcCBidWYgMSIsYnVmLDApOwotICAgICAgICAgICAgbGVuIC09IHg7ICAgICAgICAgICAg ICAgICAgIC8qIEhvdyBtdWNoIHJvb20gbGVmdCBpbiBidWZmZXIgKi8KLSAgICAgICAgICAgIGlm ICgoeSA9IChpbnQpc3RybGVuKHMpKSA+IGxlbikgLyogSWYgZW5vdWdoIHJvb20uLi4gKi8KLSAg ICAgICAgICAgICAgcmV0dXJuKE5VTEwpOwotICAgICAgICAgICAgY2tzdHJuY3B5KGJ1Zit4LHMs bGVuKTsgICAgIC8qIC4uLiBhcHBlbmQgdGhlIGZpbGVuYW1lICovCi0gICAgICAgICAgICBkZWJ1 ZyhGMTEwLCJ6Zm5xZnAgYnVmIDIiLGJ1ZiwwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgIHJldHVybihOVUxMKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIEJ1ZiBub3cgaG9s ZHMgZnVsbCBwYXRoIGJ1dCBtYXliZSBjb250YWluaW5nIHNvbWUgLiBvciAuLiB0cmlja3MgKi8K LQotICAgIGogPSB4ICsgeTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiB3 aGF0J3MgaW4gYnVmICovCi0gICAgbGVuID0gajsKLSAgICBkZWJ1ZyhGMTAxLCJ6Zm5xZnAgbGVu IiwiIixsZW4pOwotCi0gICAgLyogQ2F0Y2ggZGFuZ2xpbmcgIi8uIiBvciAiLy4uIiAqLwotICAg IGlmICgoaiA+IDEgJiYgYnVmW2otMV0gPT0gJy4nICYmIGJ1ZltqLTJdID09ICcvJykgfHwKLSAg ICAgICAgKGogPiAyICYmIGJ1ZltqLTFdID09ICcuJyAmJiBidWZbai0yXSA9PSAnLicgJiYgYnVm W2otM10gPT0gJy8nKSkgewotICAgICAgICBpZiAoaiA8IGJ1ZmxlbiAtIDIpIHsKLSAgICAgICAg ICAgIGJ1ZltqXSA9ICcvJzsKLSAgICAgICAgICAgIGJ1ZltqKzFdID0gTlVMOwotICAgICAgICB9 Ci0gICAgfQotICAgIGogPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGogPSBw b3NpdGlvbiBvZiByaWdodG1vc3QgIi8iICovCi0gICAgaSA9IDA7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogaSA9IGRlc3RpbmF0aW9uIGluZGV4ICovCi0gICAgdG1wW2ldID0gTlVM OyAgICAgICAgICAgICAgICAgICAgICAgLyogZGVzdGluYXRpb24gaXMgdGVtcG9yYXJ5IGJ1ZmZl ciAgKi8KLQotICAgIGZvciAoeCA9IDA7IHggPCBsZW47IHgrKykgeyAgICAgICAgIC8qIHggPSBz b3VyY2UgaW5kZXggKi8KLSAgICAgICAgaWYgKGJ1Zlt4XSA9PSAnLycpIHsKLSAgICAgICAgICAg IGZvciAoayA9IDA7IGsgPCA0OyBrKyspIHsKLSAgICAgICAgICAgICAgICBzYltrXSA9IGJ1Zlt4 K2tdOwotICAgICAgICAgICAgICAgIHNiW2srMV0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGlm ICghc2Jba10pIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFzdHJuY21w KHNiLCIvLi8iLDMpKSB7IC8qIEVsaW1pbmF0ZSAiLi8iIGluICIvLi8iICovCi0gICAgICAgICAg ICAgICAgeCArPSAxOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfSBl bHNlIGlmICghc3RybmNtcChzYiwiLy8iLDIpKSB7IC8qIENoYW5nZSAiLy8iIHRvICIvIiAqLwot ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfSBlbHNlIGlmICghc3RybmNt cChzYiwiLy4uLyIsNCkpIHsgLyogIi4uIiBpbiBwYXRoICovCi0gICAgICAgICAgICAgICAgZm9y IChrID0gaSAtIDE7IGsgPj0gMDsgay0tKSB7IC8qIEJhY2sgdXAgb25lIGxldmVsICovCi0gICAg ICAgICAgICAgICAgICAgIGlmICh0bXBba10gPT0gJy8nKSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBpID0gazsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRtcFtpXSA9IE5VTDsKLSAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHggKz0gMjsKLSAgICAgICAgICAgICAgICBjb250 aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoaSA+PSAoYnVmbGVu IC0gMSkpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsInpmbnFmcCBvdmVyZmxvdyIsdG1wLGkp OwotICAgICAgICAgICAgcmV0dXJuKE5VTEwpOwotICAgICAgICB9Ci0gICAgICAgIHRtcFtpKytd ID0gYnVmW3hdOyAgICAgICAgICAgICAgLyogUmVndWxhciBjaGFyYWN0ZXIsIGNvcHkgKi8KLSAg ICAgICAgdG1wW2ldID0gTlVMOwotICAgICAgICBpZiAoYnVmW3hdID09ICcvJykgICAgICAgICAg ICAgIC8qIFJlbWVtYmVyIHJpZ2h0bW9zdCAiLyIgKi8KLSAgICAgICAgICBqID0gaTsKLSAgICB9 Ci0gICAgY2tzdHJuY3B5KGJ1Zix0bXAsYnVmbGVuLTEpOyAgICAgICAgLyogQ29weSB0aGUgcmVz dWx0IGJhY2sgKi8KLQotICAgIGJ1ZltidWZsZW4tMV0gPSBOVUw7Ci0gICAgaWYgKCFidWZbMF0p IHsgICAgICAgICAgICAgICAgICAgICAgLyogSWYgZW1wdHksIHNheSByb290ICovCi0gICAgICAg IGJ1ZlswXSA9ICcvJzsKLSAgICAgICAgYnVmWzJdID0gTlVMOwotICAgICAgICBqID0gMDsKLSAg ICAgICAgaSA9IDE7Ci0gICAgfQotICAgIGlmICgoaXRzYWRpciA9IGlzZGlyKGJ1ZikpKSB7Ci0J aWYgKGJ1ZltpLTFdICE9ICcvJyAmJiBpIDwgKGJ1ZmxlbiAtIDEpKSB7Ci0JICAgIGJ1ZltpKytd ID0gJy8nOwotCSAgICBidWZbaV0gPSBOVUw7Ci0JfQotICAgIH0KLSAgICBpZiAoIWl0c2FkaXIg JiYgKGogPiAtMSkpIHsJCS8qIFNldCBwb2ludGVyIHRvIGJhc2VuYW1lICovCi0gICAgICAgIGZu ZnAuZm5hbWUgPSAoY2hhciAqKShidWYgKyBqKTsKLSAgICAgICAgZm5mcC5mcGF0aCA9IChjaGFy ICopYnVmOwotICAgICAgICBmbmZwLmxlbiA9IGk7Ci0gICAgICAgIGRlYnVnKEYxMTEsInpmbnFm cCBwYXRoIixmbmZwLmZwYXRoLGkpOwotICAgICAgICBkZWJ1ZyhGMTEwLCJ6Zm5xZnAgbmFtZSIs Zm5mcC5mbmFtZSwwKTsKLSAgICAgICAgcmV0dXJuKCZmbmZwKTsKLSAgICB9Ci0gICAgcmV0dXJu KE5VTEwpOwotfQotCi0vKiAgWiBDIE0gUCBGIE4gIC0tICBDb21wYXJlIHR3byBmaWxlbmFtZXMg ICovCi0KLS8qICBSZXR1cm5zIDEgaWYgdGhlIHR3byBuYW1lcyByZWZlciB0byB0aGUgc2FtZSBl eGlzdGluZyBmaWxlLCAwIG90aGVyd2lzZS4gKi8KLQotaW50Ci16Y21wZm4oczEsczIpIGNoYXIg KiBzMSwgKiBzMjsgewotICAgIGNoYXIgYnVmMVtDS01BWFBBVEgrMV07Ci0gICAgY2hhciBidWYy W0NLTUFYUEFUSCsxXTsKLQotI2lmZGVmIFVTRV9MU1RBVAotICAgIGNoYXIgbGlua25hbWVbQ0tN QVhQQVRIKzFdOwotICAgIHN0cnVjdCBzdGF0IGJ1ZjsKLSNlbmRpZiAvKiBVU0VfTFNUQVQgKi8K LSAgICBpbnQgeCwgcmMgPSAwOwotCi0gICAgaWYgKCFzMSkgczEgPSAiIjsKLSAgICBpZiAoIXMy KSBzMiA9ICIiOwotICAgIGlmICghKnMxIHx8ICEqczIpIHJldHVybigwKTsKLQotI2lmZGVmIENL U1lNTElOSyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdlJ3JlIGRvaW5nIHN5bWxpbmtzPyAq LwotI2lmZGVmIFVTRV9MU1RBVCAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9LIHRvIHVzZSBs c3RhdCgpPyAqLwotICAgIHggPSBsc3RhdChzMSwmYnVmKTsKLSAgICBpZiAoeCA+IC0xICYmCQkJ LyogTm93IHNlZSBpZiBpdCdzIGEgc3ltbGluayAqLwotI2lmZGVmIFNfSVNMTksKLSAgICAgICAg U19JU0xOSyhidWYuc3RfbW9kZSkKLSNlbHNlCi0jaWZkZWYgX0lGTE5LCi0gICAgICAgICgoX0lG TVQgJiBidWYuc3RfbW9kZSkgPT0gX0lGTE5LKQotI2VuZGlmIC8qIF9JRkxOSyAqLwotI2VuZGlm IC8qIFNfSVNMTksgKi8KLSAgICAgICAgKSB7Ci0gICAgICAgIGxpbmtuYW1lWzBdID0gJ1wwJzsg ICAgICAgICAgICAgLyogR2V0IHRoZSBuYW1lICovCi0gICAgICAgIHggPSByZWFkbGluayhzMSxs aW5rbmFtZSxDS01BWFBBVEgpOwotICAgICAgICBpZiAoeCA+IC0xICYmIHggPCBDS01BWFBBVEgp IHsgIC8qIEl0J3MgYSBsaW5rICovCi0gICAgICAgICAgICBsaW5rbmFtZVt4XSA9ICdcMCc7Ci0J ICAgIHMxID0gbGlua25hbWU7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogVVNFX0xTVEFU ICovCi0jZW5kaWYgLyogQ0tTWU1MSU5LICovCi0KLSAgICBpZiAoemZucWZwKHMxLENLTUFYUEFU SCxidWYxKSkgewkvKiBDb252ZXJ0IHRvIGZ1bGwgcGF0aG5hbWUgKi8KLQotI2lmZGVmIENLU1lN TElOSwkJCS8qIFNhbWUgZGVhbCBmb3Igc2Vjb25kIG5hbWUuLi4gKi8KLSNpZmRlZiBVU0VfTFNU QVQKLQl4ID0gbHN0YXQoczIsJmJ1Zik7Ci0JaWYgKHggPiAtMSAmJgotI2lmZGVmIFNfSVNMTksK LQkgICAgU19JU0xOSyhidWYuc3RfbW9kZSkKLSNlbHNlCi0jaWZkZWYgX0lGTE5LCi0JICAgICgo X0lGTVQgJiBidWYuc3RfbW9kZSkgPT0gX0lGTE5LKQotI2VuZGlmIC8qIF9JRkxOSyAqLwotI2Vu ZGlmIC8qIFNfSVNMTksgKi8KLQkgICAgKSB7Ci0JICAgIGxpbmtuYW1lWzBdID0gJ1wwJzsKLQkg ICAgeCA9IHJlYWRsaW5rKHMyLGxpbmtuYW1lLENLTUFYUEFUSCk7Ci0JICAgIGlmICh4ID4gLTEg JiYgeCA8IENLTUFYUEFUSCkgewotCQlsaW5rbmFtZVt4XSA9ICdcMCc7Ci0JCXMyID0gbGlua25h bWU7Ci0JICAgIH0KLQl9Ci0jZW5kaWYgLyogVVNFX0xTVEFUICovCi0jZW5kaWYgLyogQ0tTWU1M SU5LICovCi0JaWYgKHpmbnFmcChzMixDS01BWFBBVEgsYnVmMikpIHsKLQkgICAgZGVidWcoRjEx MCwiemNtcGZuIHMxIixidWYxLDApOwotCSAgICBkZWJ1ZyhGMTEwLCJ6Y21wZm4gczIiLGJ1ZjIs MCk7Ci0JICAgIGlmICghc3RybmNtcChidWYxLGJ1ZjIsQ0tNQVhQQVRIKSkKLQkgICAgICByYyA9 IDE7Ci0JfQotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJ6Y21wZm4gcmVzdWx0IiwiIixyYyk7Ci0g ICAgcmV0dXJuKHJjKTsKLX0KLQotI2lmZGVmIENLUk9PVAotCi0vKiBVc2VyLW1vZGUgY2hyb290 KCkgaW1wbGVtZW50YXRpb24gKi8KLQotaW50Ci16c2V0cm9vdChzKSBjaGFyICogczsgewkJCS8q IFNldHMgdGhlIHJvb3QgKi8KLSAgICBjaGFyIGJ1ZltDS01BWFBBVEgrMV07Ci0gICAgaWYgKCFz KSByZXR1cm4oLTEpOwotICAgIGlmICghKnMpIHJldHVybigtMSk7Ci0gICAgZGVidWcoRjExMCwi enNldHJvb3QiLHMsMCk7Ci0gICAgaWYgKCFpc2RpcihzKSkgcmV0dXJuKC0yKTsKLSAgICBpZiAo IXpmbnFmcChzLENLTUFYUEFUSCxidWYpKQkvKiBHZXQgZnVsbCwgcmVhbCBwYXRoICovCi0gICAg ICByZXR1cm4oLTMpOwotICAgIGlmIChhY2Nlc3MoYnVmLFJfT0spIDwgMCkgewkJLyogQ2hlY2sg YWNjZXNzICovCi0JZGVidWcoRjExMCwienNldHJvb3QgYWNjZXNzIGRlbmllZCIsYnVmLDApOwot CXJldHVybigtNCk7Ci0gICAgfQotICAgIHMgPSBidWY7Ci0gICAgaWYgKGNrcm9vdHNldCkgewkJ CS8qIElmIHJvb3QgYWxyZWFkeSBzZXQgKi8KLQlpZiAoIXppbnJvb3QocykpIHsJCS8qIG1ha2Ug c3VyZSBuZXcgcm9vdCBpcyBpbiBpdCAqLwotCSAgICBkZWJ1ZyhGMTEwLCJ6c2V0cm9vdCBuZXcg cm9vdCBub3QgaW4gcm9vdCIsY2tyb290LDApOwotCSAgICByZXR1cm4oLTUpOwotCX0KLSAgICB9 Ci0gICAgaWYgKHpjaGRpcihidWYpIDwgMSkgcmV0dXJuKC00KTsJLyogQ2hhbmdlIGRpcmVjdG9y eSB0byBuZXcgcm9vdCAqLwotICAgIGNrcm9vdHNldCA9IGNrc3RybmNweShja3Jvb3QsYnVmLENL TUFYUEFUSCk7IC8qIE5vdyBzZXQgdGhlIG5ldyByb290ICovCi0gICAgaWYgKGNrcm9vdFtja3Jv b3RzZXQtMV0gIT0gJy8nKSB7Ci0JY2tyb290W2Nrcm9vdHNldCsrXSA9ICcvJzsKLQlja3Jvb3Rb Y2tyb290c2V0XSA9ICdcMCc7Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsInpzZXRyb290IHJvb3Rz ZXQiLGNrcm9vdCxja3Jvb3RzZXQpOwotICAgIGNrcm9vdGVyciA9IDA7CQkJLyogUmVzZXQgZXJy b3IgZmxhZyAqLwotICAgIHJldHVybigxKTsKLX0KLQotY2hhciAqCi16Z2V0cm9vdCgpIHsJCQkJ LyogUmV0dXJucyB0aGUgcm9vdCAqLwotICAgIGlmICghY2tyb290c2V0KQotICAgICAgcmV0dXJu KE5VTEwpOwotICAgIHJldHVybigoY2hhciAqKWNrcm9vdCk7Ci19Ci0KLWludAotemlucm9vdChz KSBjaGFyICogczsgewkJCS8qIENoZWNrcyBpZiBmaWxlIHMgaXMgaW4gdGhlIHJvb3QgKi8KLSAg ICBpbnQgeCwgbjsKLSAgICBzdHJ1Y3QgemZuZnAgKiBmID0gTlVMTDsKLSAgICBjaGFyIGJ1ZltD S01BWFBBVEgrMl07Ci0KLSAgICBkZWJ1ZyhGMTExLCJ6aW5yb290IHNldHJvb3QiLGNrcm9vdCxj a3Jvb3RzZXQpOwotICAgIGNrcm9vdGVyciA9IDA7CQkJLyogUmVzZXQgZ2xvYmFsIGVycm9yIGZs YWcgKi8KLSAgICBpZiAoIWNrcm9vdHNldCkJCQkvKiBSb290IG5vdCBzZXQgKi8KLSAgICAgIHJl dHVybigxKTsJCQkvKiBzbyBpdCdzIG9rIC0gbm8gbmVlZCB0byBjaGVjayAqLwotICAgIGlmICgh KGYgPSB6Zm5xZnAocyxDS01BWFBBVEgsYnVmKSkpCS8qIEdldCBmdWxsIGFuZCByZWFsIHBhdGhu YW1lICovCi0gICAgICByZXR1cm4oMCk7CQkJLyogRmFpbCBpZiB3ZSBjYW4ndCAgKi8KLSAgICBu ID0gZi0+bGVuOwkJCQkvKiBMZW5ndGggb2YgZnVsbCBwYXRobmFtZSAqLwotICAgIGRlYnVnKEYx MTEsInppbnJvb3QgbiIsYnVmLG4pOwotICAgIGlmIChuIDwgKGNrcm9vdHNldCAtIDEpIHx8IG4g PiBDS01BWFBBVEgpIHsJLyogQmFkIGxlbmd0aCAqLwotCWNrcm9vdGVyciA9IDE7CQkJICAgICAg ICAvKiBGYWlsICovCi0JcmV0dXJuKDApOwotICAgIH0KLSAgICBpZiAoaXNkaXIoYnVmKSAmJiBi dWZbbi0xXSAhPSAnLycpIHsgIC8qIElmIGl0J3MgYSBkaXJlY3RvcnkgbmFtZSAqLwotCWJ1Zltu KytdID0gJy8nOwkJCSAgLyogbWFrZSBzdXJlIGl0IGVuZHMgd2l0aCAnLycgKi8KLQlidWZbbl0g PSAnXDAnOwotICAgIH0KLSAgICB4ID0gc3RybmNtcChidWYsY2tyb290LGNrcm9vdHNldCk7CS8q IENvbXBhcmUsIGNhc2Utc2Vuc2l0aXZlICovCi0gICAgZGVidWcoRjExMSwiemlucm9vdCBjaGVj a2VkIixidWYseCk7Ci0gICAgaWYgKHggPT0gMCkJCQkJLyogT0sgKi8KLSAgICAgIHJldHVybigx KTsKLSAgICBja3Jvb3RlcnIgPSAxOwkJCS8qIE5vdCBPSyAqLwotICAgIHJldHVybigwKTsKLX0K LSNlbmRpZiAvKiBDS1JPT1QgKi8KLQotI2lmZGVmIENLX0xPR0lOCi0vKgotICBUaGUgZm9sbG93 aW5nIGNvZGUgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdXNlciBsb2dpbiBhbmQgbG9nb3V0Ci0gIGlu Y2x1ZGluZyBhbm9ueW1vdXMgYWNjb3VudHMuICBJZiB0aGlzIGZlYXR1cmUgaXMgdG8gYmUgc3Vw cG9ydGVkCi0gIG91dHNpZGUgb2YgVU5JWCwgaXQgc2hvdWxkIGJlIHNwcmVhZCBvdXQgYW1vbmcg dGhlIGNrP2Zpby5jIG1vZHVsZXMuLi4KLSovCi0jaWZuZGVmIF9QQVRIX0JTSEVMTAotI2RlZmlu ZSBfUEFUSF9CU0hFTEwgICAgIi91c3IvYmluL2Jhc2giCi0jZW5kaWYgLyogX1BBVEhfQlNIRUxM ICovCi0jaWZuZGVmIF9QQVRIX0ZUUFVTRVJTCi0jZGVmaW5lIF9QQVRIX0ZUUFVTRVJTICAiL2V0 Yy9mdHB1c2VycyIKLSNlbmRpZiAvKiBfUEFUSF9GVFBVU0VSUyAqLwotCi0vKgotICogSGVscGVy IGZ1bmN0aW9uIGZvciBzZ2V0cHduYW0oKS4KLSAqLwotY2hhciAqCi1zZ2V0c2F2ZShzKSBjaGFy ICpzOyB7Ci0gICAgY2hhciAqbmV3ID0gbWFsbG9jKCh1bnNpZ25lZCkgc3RybGVuKHMpICsgMSk7 Ci0gICAgaWYgKG5ldyA9PSBOVUxMKSB7Ci0gICAgICAgIHByaW50ZigiP0xvY2FsIHJlc291cmNl IGZhaWx1cmU6IG1hbGxvY1xuIik7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgICAgIC8qIE5PVFJF QUNIRUQgKi8KLSAgICB9Ci0gICAgKHZvaWQpIHN0cmNweShuZXcsIHMpOwkJLyogc2FmZSAqLwot ICAgIHJldHVybiAobmV3KTsKLX0KLQotLyoKLSAqIFNhdmUgdGhlIHJlc3VsdCBvZiBnZXRwd25h bSgpLiAgVXNlZCBmb3IgVVNFUiBjb21tYW5kLCBzaW5jZQotICogdGhlIGRhdGEgcmV0dXJuZWQg bXVzdCBub3QgYmUgY2xvYmJlcmVkIGJ5IGFueSBvdGhlciBjb21tYW5kCi0gKiAoZS5nLiwgZ2xv YmJpbmcpLgotICovCi1zdHJ1Y3QgcGFzc3dkICoKLXNnZXRwd25hbShuYW1lKSBjaGFyICpuYW1l OyB7Ci0gICAgc3RhdGljIHN0cnVjdCBwYXNzd2Qgc2F2ZTsKLSAgICByZWdpc3RlciBzdHJ1Y3Qg cGFzc3dkICpwOwotI2lmZGVmIENLX1NIQURPVwotICAgIHJlZ2lzdGVyIHN0cnVjdCBzcHdkICpz cDsKLSNlbmRpZiAvKiBDS19TSEFET1cgKi8KLSAgICBjaGFyICpzZ2V0c2F2ZSgpOwotCi0jaWZk ZWYgSFBVWDEwX1RSVVNURUQKLSAgICBzdHJ1Y3QgcHJfcGFzc3dkICpwcjsKLSNlbmRpZiAvKiBI UFVYMTBfVFJVU1RFRCAqLwotCi0jaWZkZWYgQ0tfU0hBRE9XCi0gICAgc3AgPSBnZXRzcG5hbShu YW1lKTsKLSAgICBpZiAoc3AgPT0gTlVMTCkgewotICAgICAgICBkZWJ1ZyhGMTEwLCJzZ2V0cHdu YW0iLCJnZXRzcG5hbSgpIGZhaWxzIiwwKTsKLQlyZXR1cm4gKE5VTEwpOwotICAgIH0KLSNlbmRp ZiAvKiBDS19TSEFET1cgKi8KLQotI2lmZGVmIEhQVVgxMF9UUlVTVEVECi0gICAgaWYgKChwciA9 IGdldHBycHduYW0obmFtZSkpID09IE5VTEwpCi0gICAgICByZXR1cm4oTlVMTCk7Ci0jZW5kaWYg LyogSFBVWDEwX1RSVVNURUQgKi8KLQotICAgIHAgPSBnZXRwd25hbShuYW1lKTsKLSAgICAvKiBk ZWJ1ZyhGMTExLCJzZ2V0cHduYW0iLCJnZXRwd25hbSgpIixwKTsgKi8KLSAgICBpZiAocCA9PSBO VUxMKQotICAgICAgcmV0dXJuKE5VTEwpOwotICAgIGlmIChzYXZlLnB3X25hbWUpIHsKLSAgICAg ICAgZnJlZShzYXZlLnB3X25hbWUpOwotICAgICAgICBmcmVlKHNhdmUucHdfcGFzc3dkKTsKLSAg ICAgICAgZnJlZShzYXZlLnB3X2dlY29zKTsKLSAgICAgICAgZnJlZShzYXZlLnB3X2Rpcik7Ci0g ICAgICAgIGZyZWUoc2F2ZS5wd19zaGVsbCk7Ci0gICAgfQotICAgIHNhdmUgPSAqcDsKLSAgICBz YXZlLnB3X25hbWUgPSBzZ2V0c2F2ZShwLT5wd19uYW1lKTsKLSNpZmRlZiBDS19TSEFET1cKLSAg ICBzYXZlLnB3X3Bhc3N3ZCA9IHNnZXRzYXZlKHNwLT5zcF9wd2RwKTsKLSNlbHNlIC8qIENLX1NI QURPVyAqLwotI2lmZGVmIEhQVVgxMF9UUlVTVEVECi0gICAgaWYgKHByLT51ZmxnLmZnX2VuY3J5 cHQgJiYgcHItPnVmbGQuZmRfZW5jcnlwdCAmJiAqcHItPnVmbGQuZmRfZW5jcnlwdCkKLSAgICAg IHNhdmUucHdfcGFzc3dkID0gc2dldHNhdmUocHItPnVmbGQuZmRfZW5jcnlwdCk7Ci0gICAgZWxz ZQotICAgICAgc2F2ZS5wd19wYXNzd2QgPSBzZ2V0c2F2ZSgiIik7Ci0jZWxzZSAvKiBIUFVYMTBf VFJVU1RFRCAqLwotICAgIHNhdmUucHdfcGFzc3dkID0gc2dldHNhdmUocC0+cHdfcGFzc3dkKTsK LSNlbmRpZiAvKiBIUFVYMTBfVFJVU1RFRCAqLwotI2VuZGlmIC8qIENLX1NIQURPVyAqLwotICAg IHNhdmUucHdfZ2Vjb3MgPSBzZ2V0c2F2ZShwLT5wd19nZWNvcyk7Ci0gICAgc2F2ZS5wd19kaXIg PSBzZ2V0c2F2ZShwLT5wd19kaXIpOwotICAgIHNhdmUucHdfc2hlbGwgPSBzZ2V0c2F2ZShwLT5w d19zaGVsbCk7Ci0gICAgcmV0dXJuKCZzYXZlKTsKLX0KLQotI2RlZmluZSBDS1hMT0dCU0laIDI1 NgotCi1zdHJ1Y3QgcGFzc3dkICogcHcgPSBOVUxMOwotY2hhciAqIGhvbWUgPSBOVUxMOyAgICAg ICAgICAgICAgICAgICAgIC8qIEhvbWUgZGlyZWN0b3J5IHBvaW50ZXIgZm9yIGdsb2IgKi8KLSNp ZmRlZiBDTUFTSwotI3VuZGVmIENNQVNLCi0jZW5kaWYgLyogQ01BU0sgKi8KLQotI2RlZmluZSBD TUFTSyAwMjcKLQotaW50IGRlZnVtYXNrID0gQ01BU0s7ICAgICAgICAgICAgICAgICAgIC8qIERl ZmF1bHQgdW1hc2sgdmFsdWUgKi8KLQotLyogIFogViBVIFMgRSBSICAtLSAgVmVyaWZ5IHVzZXIs IFJldHVybnMgMSBpZiB1c2VyIE9LLCAwIG90aGVyd2lzZS4gICovCi0KLS8qIFNldHMgZ2xvYmFs IHBhc3N3ZCBwb2ludGVyIHB3IGlmIG5hbWVkIGFjY291bnQgZXhpc3RzIGFuZCBpcyBhY2NlcHRh YmxlOwotICogc2V0cyBhc2twYXNzd2QgaWYgYSBQQVNTIGNvbW1hbmQgaXMgZXhwZWN0ZWQuICBJ ZiBsb2dnZWQgaW4gcHJldmlvdXNseSwKLSAqIG5lZWQgdG8gcmVzZXQgc3RhdGUuICBJZiBuYW1l IGlzICJmdHAiIG9yICJhbm9ueW1vdXMiLCB0aGUgbmFtZSBpcyBub3QgaW4KLSAqIF9QQVRIX0ZU UFVTRVJTLCBhbmQgZnRwIGFjY291bnQgZXhpc3RzLCBzZXQgZ3Vlc3QgYW5kIHB3LCB0aGVuIGp1 c3QgcmV0dXJuLgotICogSWYgYWNjb3VudCBkb2Vzbid0IGV4aXN0LCBhc2sgZm9yIHBhc3N3ZCBh bnl3YXkuICBPdGhlcndpc2UsIGNoZWNrIHVzZXIKLSAqIHJlcXVlc3RpbmcgbG9naW4gcHJpdmls ZWdlcy4gIERpc2FsbG93IGFueW9uZSB3aG8gZG9lcyBub3QgaGF2ZSBhIHN0YW5kYXJkCi0gKiBz aGVsbCBhcyByZXR1cm5lZCBieSBnZXR1c2Vyc2hlbGwoKS4gIERpc2FsbG93IGFueW9uZSBtZW50 aW9uZWQgaW4gdGhlIGZpbGUKLSAqIF9QQVRIX0ZUUFVTRVJTIHRvIGFsbG93IHBlb3BsZSBzdWNo IGFzIHJvb3QgYW5kIHV1Y3AgdG8gYmUgYXZvaWRlZC4KLSAqLwotX1BST1RPVFlQKHN0YXRpYyBp bnQgY2hlY2t1c2VyLCAoY2hhciAqKSApOwotCi1jaGFyIHp2dW5hbWVbNjRdID0geyBOVUwsIE5V TCB9OwotY2hhciB6dmhvbWVbQ0tNQVhQQVRIKzFdID0geyBOVUwsIE5VTCB9OwotI2RlZmluZSBa RU5WVVNFUiA3MAotI2RlZmluZSBaRU5WSE9NRSBDS01BWFBBVEgrMTIKLSNkZWZpbmUgWkVOVkxP R05BTUUgNzQKLXN0YXRpYyBjaGFyIHplbnZ1c2VyW1pFTlZVU0VSXTsKLXN0YXRpYyBjaGFyIHpl bnZob21lW1pFTlZIT01FXTsKLXN0YXRpYyBjaGFyIHplbnZsb2duYW1lW1pFTlZMT0dOQU1FXTsK LQotI2lmZGVmIENLX1BBTQotc3RhdGljIGNoYXIgcGFtX2RhdGFbNTAwXTsKLXN0cnVjdCBwYW1f Y29udiBwYW1fY29udiA9IHtwYW1fY2IsIHBhbV9kYXRhfTsgLyogUEFNIHN0cnVjdHVyZSAqLwot c3RydWN0IHBhbV9oYW5kbGUgKiBwYW1oID0gTlVMTDsgICAgICAgICAgICAgICAvKiBQQU0gcmVm ZXJlbmNlIGhhbmRsZSAqLwotI2VuZGlmIC8qIENLX1BBTSAqLwotCi1pbnQKLXp2dXNlcihuYW1l KSBjaGFyICpuYW1lOyB7Ci0gICAgcmVnaXN0ZXIgY2hhciAqY3AgPSBOVUxMOwotICAgIGludCB4 OwotICAgIGNoYXIgKnNoZWxsOwotI2lmZGVmIEdFVFVTRVJTSEVMTAotX1BST1RPVFlQKGNoYXIg KiBnZXR1c2Vyc2hlbGwsICh2b2lkKSApOwotI2VuZGlmIC8qIEdFVFVTRVJTSEVMTCAqLwotI2lm bmRlZiBOT0RDTEVORFVTRVJTSEVMTAotX1BST1RPVFlQKFZPSUQgZW5kdXNlcnNoZWxsLCAodm9p ZCkgKTsKLSNlbmRpZgkvKiBOT0RDTEVORFVTRVJTSEVMTCAqLwotCi0jaWZkZWYgQ0tfUEFNCi0g ICAgaW50IHBhbV9zdGF0dXM7Ci0gICAgY29uc3QgY2hhciAqIHJlcGx5ID0gTlVMTDsKLSNlbmRp ZiAvKiBDS19QQU0gKi8KLQotICAgIGRlYnVnKEYxMTEsInVzZXIiLG5hbWUsbG9nZ2VkX2luKTsK LQotICAgIGlmICghbmFtZSkgbmFtZSA9ICIiOwotICAgIHp2dW5hbWVbMF0gPSBOVUw7Ci0KLSAg ICBkZWJ1ZyhGMTAxLCJ6dnVzZXIgY2t4c3lzbG9nIiwiIixja3hzeXNsb2cpOwotCi0jaWZkZWYg Q0tTWVNMT0cKLSAgICBkZWJ1ZyhGMTAwLCJ6dnVzZXIgQ0tTWVNMT0cgZGVmaW5lZCIsIiIsMCk7 Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLQotICAgIGlmIChsb2dnZWRfaW4pICAgICAgICAgICAg ICAgICAgICAgIC8qIFNob3VsZCBub3QgYmUgY2FsbGVkIGlmIGxvZ2dlZCBpbiAqLwotICAgICAg cmV0dXJuKDApOwotCi0jaWZkZWYgQ0tTWVNMT0cKLSAgICBpZiAoY2t4c3lzbG9nICYmIGNreGxv Z2dpbmcpIHsKLSAgICAgICAgc3lzbG9nKExPR19JTkZPLAotICAgICAgICAgICAgICAgICJsb2dp bjogdXNlciAlcyIsbmFtZQotICAgICAgICAgICAgICAgICk7Ci0gICAgfQotI2VuZGlmIC8qIENL U1lTTE9HICovCi0KLSAgICBndWVzdCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBB c3N1bWUgbm90IGd1ZXN0ICovCi0gICAgYXNrcGFzc3dkID0gMDsKLQotICAgIGlmIChzdHJjbXAo bmFtZSwgImZ0cCIpID09IDAgfHwgc3RyY21wKG5hbWUsICJhbm9ueW1vdXMiKSA9PSAwKSB7Ci0g ICAgICAgIGRlYnVnKEYxMDEsInp2dXNlciBhbm9ueW1vdXMgY2t4YW5vbiIsIiIsY2t4YW5vbik7 Ci0gICAgICAgIGlmICghY2t4YW5vbikgeyAgICAgICAgICAgICAgICAgLyogQW5vbnltb3VzIGxv Z2luIG5vdCBhbGxvd2VkICovCi0jaWZkZWYgQ0tTWVNMT0cKLSAgICAgICAgICAgIGlmIChja3hz eXNsb2cgJiYgY2t4bG9nZ2luZykgewotICAgICAgICAgICAgICAgIHN5c2xvZyhMT0dfSU5GTywK LSAgICAgICAgICAgICAgICAgICAgICAgImxvZ2luOiBhbm9ueW1vdXMgbG9naW4gbm90IGFsbG93 ZWQ6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50aG9zdCA/IGNsaWVudGhvc3Qg OiAiKHVua25vd24gaG9zdCkiCi0gICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAg ICB9Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAg ICAgfQotICAgICAgICBpZiAoY2hlY2t1c2VyKCJmdHAiKSB8fCBjaGVja3VzZXIoImFub255bW91 cyIpKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ6dnVzZXIgYW5vbiBmb3JiaWRkZW4gYnkg ZnRwdXNlcnMgZmlsZSIsIiIsMCk7Ci0jaWZkZWYgQ0tTWVNMT0cKLSAgICAgICAgICAgIGlmIChj a3hzeXNsb2cgJiYgY2t4bG9nZ2luZykgewotICAgICAgICAgICAgICAgIHN5c2xvZyhMT0dfSU5G TywKLSAgICAgICAgICAgICAgICAgICAgICAgImxvZ2luOiBhbm9ueW1vdXMgbG9naW4gZm9yYmlk ZGVuIGJ5IGZ0cHVzZXJzIGZpbGU6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50 aG9zdCA/IGNsaWVudGhvc3QgOiAiKHVua25vd24gaG9zdCkiCi0gICAgICAgICAgICAgICAgICAg ICAgICk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICAgICAgICAg IHJldHVybigwKTsKLQl9IGVsc2UgaWYgKChwdyA9IHNnZXRwd25hbSgiZnRwIikpICE9IE5VTEwp IHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsInp2dXNlciBhbm9uIHNnZXRwd25hbShmdHApIE9L IiwiIiwwKTsKLSAgICAgICAgICAgIGd1ZXN0ID0gMTsKLSAgICAgICAgICAgIGFza3Bhc3N3ZCA9 IDE7Ci0gICAgICAgICAgICBja3N0cm5jcHkoenZ1bmFtZSwiYW5vbnltb3VzIiw2NCk7Ci0gICAg ICAgICAgICByZXR1cm4oMSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZWJ1ZyhG MTAwLCJ6dnVzZXIgYW5vbiBzZ2V0cHduYW0oZnRwKSBGQUlMRUQiLCIiLDApOwotI2lmZGVmIENL U1lTTE9HCi0gICAgICAgICAgICBpZiAoY2t4c3lzbG9nICYmIGNreGxvZ2dpbmcpIHsKLSAgICAg ICAgICAgICAgICBzeXNsb2coTE9HX0lORk8sCi0gICAgICAgICAgICAgICAgICAgICAgICJsb2dp bjogYW5vbnltb3VzIGdldHB3bmFtKGZ0cCkgZmFpbGVkOiAlcyIsCi0gICAgICAgICAgICAgICAg ICAgICAgIGNsaWVudGhvc3QgPyBjbGllbnRob3N0IDogIih1bmtub3duIGhvc3QpIgotICAgICAg ICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIENLU1lTTE9HICov Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcHcgPSBzZ2V0 cHduYW0obmFtZSk7Ci0gICAgaWYgKHB3KSB7Ci0vKgotICBPZiBjb3Vyc2Ugc29tZSBVTklYIHBs YXRmb3JtcyAobGlrZSBBSVgpIGRvbid0IGhhdmUgZ2V0dXNlcnNoZWxsKCkuCi0gIEluIHRoYXQg Y2FzZSB3ZSBjYW4ndCBjaGVjayBpZiB0aGUgdXNlcidzIGFjY291bnQgaGFzIGJlZW4gInR1cm5l ZCBvZmYiCi0gIG9yIHNvbWVzdWNoLCBlLmcuIGJ5IHNldHRpbmcgdGhlaXIgc2hlbGwgdG8gIi9l dGMvbm9sb2dpbiIgb3Igc29tZXN1Y2gsCi0gIHdoaWNoIHJ1bnMgKHVzdWFsbHkganVzdCBwcmlu dGluZyBhIG1lc3NhZ2UgYW5kIGV4aXRpbmcpLCBidXQgd2hpY2ggaXMKLSAgbm90IGxpc3RlZCBp biAvZXRjL3NoZWxscy4gIEZvciB0aGF0IG1hdHRlciwgaWYgZ2V0dXNlcnNoZWxsKCkgaXMgbm90 Ci0gIGF2YWlsYWJsZSwgdGhlbiBwcm9iYWJseSBuZWl0aGVyIGlzIC9ldGMvc2hlbGxzLgotKi8K LSAgICAgICAgZGVidWcoRjEwMCwienZ1c2VyIHNnZXRwd25hbSBvayIsIiIsMCk7Ci0gICAgICAg IHNoZWxsID0gcHctPnB3X3NoZWxsOwotICAgICAgICBpZiAoIXNoZWxsKSBzaGVsbCA9ICIiOwot ICAgICAgICBpZiAoISpzaGVsbCkKLSAgICAgICAgICBzaGVsbCA9IF9QQVRIX0JTSEVMTDsKLSAg ICAgICAgZGVidWcoRjExMCwienZ1c2VyIHNoZWxsIixzaGVsbCwwKTsKLSNpZmRlZiBHRVRVU0VS U0hFTEwKLSAgICAgICAgd2hpbGUgKChjcCA9IGdldHVzZXJzaGVsbCgpKSAhPSBOVUxMKSB7Ci0g ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ6dnVzZXIgZ2V0dXNlcnNoZWxsIixjcCwwKTsKLSAgICAg ICAgICAgIGlmICgoaW50KXN0cmNtcChjcCwgc2hlbGwpID09IDApCi0gICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlYnVnKEYxMDAsInp2dXNlciBlbmR1c2Vyc2hlbGwg MSIsIiIsMCk7Ci0jaWZuZGVmIE5PRENMRU5EVVNFUlNIRUxMCi0gICAgICAgIChWT0lEKSBlbmR1 c2Vyc2hlbGwoKTsKLSNlbHNlCi0gICAgICAgIGVuZHVzZXJzaGVsbCgpOwotI2VuZGlmCS8qIE5P RENMRU5EVVNFUlNIRUxMICovCi0gICAgICAgIGRlYnVnKEYxMDAsInp2dXNlciBlbmR1c2Vyc2hl bGwgMiIsIiIsMCk7Ci0jZWxzZSAvKiBHRVRVU0VSU0hFTEwgKi8KLSAgICAgICAgY3AgPSAiIjsg ICAgICAgICAgICAgICAgICAgICAgICAvKiBEbyBub3QgcmVmdXNlIGlmIHdlIGNhbm5vdCBjaGVj ayAqLwotI2VuZGlmIC8qIEdFVFVTRVJTSEVMTCAqLwotICAgICAgICB4ID0gY2hlY2t1c2VyKG5h bWUpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJ6dnVzZXIgY2hlY2t1c2VyIiwiIix4KTsKLSAgICAg ICAgaWYgKGNwID09IE5VTEwpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsInp2dXNlciByZWZ1 c2VkIDEiLCIiLDApOwotICAgICAgICAgICAgcHcgPSAoc3RydWN0IHBhc3N3ZCAqKSBOVUxMOwot I2lmZGVmIENLU1lTTE9HCi0gICAgICAgICAgICBpZiAoY2t4c3lzbG9nICYmIGNreGxvZ2dpbmcp IHsKLSAgICAgICAgICAgICAgICBzeXNsb2coTE9HX0lORk8sCi0gICAgICAgICAgICAgICAgICAg ICAgICJsb2dpbjogaW52YWxpZCBzaGVsbCAlcyBmb3IgJXMgJXMiLHNoZWxsLCBuYW1lLAotICAg ICAgICAgICAgICAgICAgICAgICBjbGllbnRob3N0ID8gY2xpZW50aG9zdCA6ICIodW5rbm93biBo b3N0KSIKLSAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAv KiBDS1NZU0xPRyAqLwotICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICB9IGVsc2UgaWYg KHgpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsInp2dXNlciByZWZ1c2VkIDIiLCIiLDApOwot ICAgICAgICAgICAgcHcgPSAoc3RydWN0IHBhc3N3ZCAqKSBOVUxMOwotI2lmZGVmIENLU1lTTE9H Ci0gICAgICAgICAgICBpZiAoY2t4c3lzbG9nICYmIGNreGxvZ2dpbmcpIHsKLSAgICAgICAgICAg ICAgICBzeXNsb2coTE9HX0lORk8sCi0gICAgICAgICAgICAgICAgICAgICAgICJsb2dpbjogJXMg bG9naW4gZm9yYmlkZGVuIGJ5IGZ0cHVzZXJzIGZpbGU6ICVzIiwKLSAgICAgICAgICAgICAgICAg ICAgICAgbmFtZSwgY2xpZW50aG9zdCA/IGNsaWVudGhvc3QgOiAiKHVua25vd24gaG9zdCkiCi0g ICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tTWVNM T0cgKi8KLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgIHggPSAwOwotI2lmZGVmIENLX1BBTQotICAgICAgICAgICAgLyogR2V0IFBBTSBhdXRoZW50 aWNhdGlvbiBkZXRhaWxzICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ6dnVzZXIiLCJjYWxs aW5nIHBhbV9zdGFydCIsMCk7Ci0gICAgICAgICAgICBpZiAoKHBhbV9zdGF0dXMgPQotICAgICAg ICAgICAgICAgICBwYW1fc3RhcnQoUEFNX1NFUlZJQ0VfVFlQRSxuYW1lLCZwYW1fY29udiwmcGFt aCkpCi0gICAgICAgICAgICAgICAgIT0gUEFNX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgICAgICBy ZXBseSA9IHBhbV9zdHJlcnJvcihOVUxMLCBwYW1fc3RhdHVzKTsKLSAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJ6dnVzZXIgUEFNIGZhaWx1cmUiLHJlcGx5LDApOwotICAgICAgICAgICAgICAg IHByaW50ZigiJXNcbiIscmVwbHkpOwotI2lmZGVmIENLU1lTTE9HCi0gICAgICAgICAgICAgICAg aWYgKGNreHN5c2xvZyAmJiBja3hsb2dnaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN5c2xv ZyhMT0dfSU5GTywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2dpbjogJXMgcmVmdXNl ZCBieSBQQU0gXCIlc1wiOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLHJl cGx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50aG9zdCA/IGNsaWVudGhvc3Qg OiAiKHVua25vd24gaG9zdCkiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAg ICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotICAgICAgICAgICAgICAgIHJldHVy bigwKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19QQU0gKi8KLSAgICAgICAgICAgIGFz a3Bhc3N3ZCA9IDE7Ci0gICAgICAgICAgICBja3N0cm5jcHkoenZ1bmFtZSxuYW1lLDY0KTsKLSAg ICAgICAgICAgIHJldHVybigxKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHgg PSAwOwotICAgICAgICBkZWJ1ZyhGMTAwLCJ6dnVzZXIgc2dldHB3bmFtIE5VTEwiLCIiLDApOwot I2lmZGVmIENLU1lTTE9HCi0gICAgICAgIGlmIChja3hzeXNsb2cgJiYgY2t4bG9nZ2luZykgewot ICAgICAgICAgICAgc3lzbG9nKExPR19JTkZPLAotICAgICAgICAgICAgICAgICAgICJsb2dpbjog Z2V0cHduYW0oJXMpIGZhaWxlZDogJXMiLG5hbWUsCi0gICAgICAgICAgICAgICAgICAgY2xpZW50 aG9zdCA/IGNsaWVudGhvc3QgOiAiKHVua25vd24gaG9zdCkiCi0gICAgICAgICAgICAgICAgICAg KTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgICAgIHJldHVybigwKTsK LSAgICB9Ci0KLSNpZmRlZiBGVFBfS0VSQkVST1MKLSAgICBpZiAoYXV0aF90eXBlICYmIHN0cmNt cChhdXRoX3R5cGUsICJLRVJCRVJPU19WNCIpID09IDApIHsKLSNpZmRlZiBDT01NRU5UCi0JLyog V2h5IHNwcmludGYgYW5kIHRoZW4gcHJpbnRmPyAqLwotCS8qIEFsc28sIHdoYXQgaXMga2VyYl9v az8gIEFuZCBpcyB0aGUgdGVzdCBvbiBpdCByaWdodD8gKi8KLSAgICAgICAgY2hhciBidWZbQ0tY TE9HQlNJWl07Ci0gICAgICAgIHNwcmludGYoYnVmLCAiS2VyYmVyb3MgdXNlciAlcyVzJXNAJXMg aXMlcyBhdXRob3JpemVkIGFzICVzJXMiLAotICAgICAgICAgICAgICAgICBrZGF0YS5wbmFtZSwg KmtkYXRhLnBpbnN0ID8gIi4iIDogIiIsCi0gICAgICAgICAgICAgICAgIGtkYXRhLnBpbnN0LCBr ZGF0YS5wcmVhbG0sCi0gICAgICAgICAgICAgICAgIChrZXJiX29rID0ga3VzZXJvaygma2RhdGEs bmFtZSkgPT0gMCkgPyAiIiA6ICIgbm90IiwKLSAgICAgICAgICAgICAgICAgbmFtZSwga2VyYl9v ayA/ICIiIDogIjsgUGFzc3dvcmQgcmVxdWlyZWQuIik7Ci0gICAgICAgIHByaW50ZigiJXMiLCBi dWYpOwotI2Vsc2UKLSAgICAgICAgcHJpbnRmKCJLZXJiZXJvcyB1c2VyICVzJXMlc0AlcyBpcyVz IGF1dGhvcml6ZWQgYXMgJXMlcyIsCi0gICAgICAgICAgICAgICAgIGtkYXRhLnBuYW1lLCAqa2Rh dGEucGluc3QgPyAiLiIgOiAiIiwKLSAgICAgICAgICAgICAgICAga2RhdGEucGluc3QsIGtkYXRh LnByZWFsbSwKLSAgICAgICAgICAgICAgICAgKGtlcmJfb2sgPSBrdXNlcm9rKCZrZGF0YSxuYW1l KSA9PSAwKSA/ICIiIDogIiBub3QiLAotICAgICAgICAgICAgICAgICBuYW1lLCBrZXJiX29rID8g IiIgOiAiOyBQYXNzd29yZCByZXF1aXJlZC4iKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAg ICAgIGlmIChrZXJiX29rKSByZXR1cm4oMSk7Ci0gICAgfSBlbHNlCi0gICAgICByZXR1cm4oMCk7 Ci0jZW5kaWYgLyogRlRQX0tFUkJFUk9TICovCi19Ci0KLS8qIENoZWNrIGlmIHRoZSBnaXZlbiB1 c2VyIGlzIGluIHRoZSBmb3JiaWRkZW4tdXNlciBmaWxlICovCi0KLXN0YXRpYyBpbnQKLWNoZWNr dXNlcihuYW1lKSBjaGFyICpuYW1lOyB7Ci0gICAgZXh0ZXJuIGNoYXIgKiB1c2VyZmlsZTsKLSAg ICBGSUxFICpmZDsKLSAgICBpbnQgaTsKLSAgICBjaGFyIGxpbmVbQ0tYTE9HQlNJWisxXTsKLQot ICAgIGlmICghbmFtZSkKLSAgICAgIG5hbWUgPSAiIjsKLSAgICBpID0gc3RybGVuKG5hbWUpOwot ICAgIGRlYnVnKEYxMTEsImNoZWNrdXNlciBuYW1lIixuYW1lLGkpOwotICAgIGlmICghKm5hbWUp Ci0gICAgICByZXR1cm4oMSk7Ci0KLSAgICBmZCA9IGZvcGVuKHVzZXJmaWxlID8gdXNlcmZpbGUg OiBfUEFUSF9GVFBVU0VSUywgInIiKTsKLSAgICAvKiBkZWJ1ZyhGMTExLCJjaGVja3VzZXIgdXNl cmZpbGUiLHVzZXJmaWxlLGZkKTsgKi8KLSAgICBpZiAoZmQpIHsKLSAgICAgICAgbGluZVswXSA9 ICdcMCc7Ci0gICAgICAgIHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGZkKSkgewot ICAgICAgICAgICAgZGVidWcoRjExMCwiY2hlY2t1c2VyIGxpbmUiLGxpbmUsMCk7Ci0gICAgICAg ICAgICBpZiAobGluZVswXSA8PSAnIycpCi0gICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg ICAgICAgaWYgKHN0cm5jbXAobGluZSwgbmFtZSwgaSkgPT0gMCkgewotICAgICAgICAgICAgICAg IGRlYnVnKEYxMTAsImNoZWNrdXNlciBSRUZVU0VEIixuYW1lLDApOwotICAgICAgICAgICAgICAg IHJldHVybigxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxpbmVbMF0gPSAnXDAnOwot ICAgICAgICB9Ci0gICAgICAgIChWT0lEKSBmY2xvc2UoZmQpOwotICAgIH0KLSAgICBkZWJ1ZyhG MTEwLCJjaGVja3VzZXIgT0siLG5hbWUsMCk7Ci0gICAgcmV0dXJuKDApOwotfQotCi0vKiAgWiBW IEwgTyBHIE8gVSBUICAtLSAgTG9nIG91dCBmcm9tIEludGVybmV0IEtlcm1pdCBTZXJ2aWNlICAq LwotCi1WT0lECi16dmxvZ291dCgpIHsKLSNpZmRlZiBDT01NRU5UCi0gICAgLyogVGhpcyBjb3Vs ZCBiZSBkYW5nZXJvdXMgKi8KLSAgICBpZiAoc2V0dWlkKChVSURfVCkwKSA8IDApIHsKLSAgICAg ICAgZGVidWcoRjEwMCwienZsb2dvdXQgc2V0dWlkIEZBSUxFRCIsIiIsMCk7Ci0gICAgICAgIGdv dG8gYmFkOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAwLCJ6dmxvZ291dCBzZXR1aWQgT0siLCIiLDAp OwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNpZmRlZiBDS1NZU0xPRwotICAgIGlmIChja3hzeXNs b2cgPj0gU1lTTEdfTEkgJiYgY2t4bG9nZ2luZykgewotICAgICAgICBja3N5c2xvZyhTWVNMR19M SSwgMSwgImxvZ291dCIsKGNoYXIgKikgdWlkYnVmLCBjbGllbnRob3N0KTsKLSAgICB9Ci0jZW5k aWYgLyogQ0tTWVNMT0cgKi8KLSNpZmRlZiBDS1dUTVAKLSAgICBkZWJ1ZyhGMTEwLCJXVE1QIGxv Z291dCIsY2tzeXNsaW5lLGxvZ2dlZF9pbik7Ci0gICAgaWYgKGxvZ2dlZF9pbikKLSAgICAgIGxv Z3d0bXAoY2tzeXNsaW5lLCAiIiwgIiIpOwotI2VuZGlmIC8qIENLV1RNUCAqLwotICAgIHB3ID0g TlVMTDsKLSAgICBsb2dnZWRfaW4gPSAwOwotICAgIGd1ZXN0ID0gMDsKLSAgICBpc2d1ZXN0ID0g MDsKLX0KLQotI2lmZGVmIEZUUF9LRVJCRVJPUwota3Bhc3MobmFtZSwgcCkgY2hhciAqbmFtZSwg KnA7IHsKLSAgICBjaGFyIGluc3RhbmNlW0lOU1RfU1pdOwotICAgIGNoYXIgcmVhbG1bUkVBTE1f U1pdOwotICAgIGNoYXIgdGt0X2ZpbGVbMjBdOwotICAgIEtURVhUX1NUIHRpY2tldDsKLSAgICBB VVRIX0RBVCBhdXRoZGF0YTsKLSAgICB1bnNpZ25lZCBsb25nIGZhZGRyOwotICAgIHN0cnVjdCBo b3N0ZW50ICpocDsKLQotICAgIGlmIChrcmJfZ2V0X2xyZWFsbShyZWFsbSwgMSkgIT0gS1NVQ0NF U1MpCi0gICAgICByZXR1cm4oMCk7Ci0KLSAgICBja3N0cm5jcHkodGt0X2ZpbGUsIFRLVF9ST09U LCAyMCk7Ci0gICAgY2tzdHJuY2F0KHRrdF9maWxlLCAiX2Z0cGRYWFhYWFgiLCAyMCk7Ci0gICAg a3JiX3NldF90a3Rfc3RyaW5nKG1rdGVtcCh0a3RfZmlsZSkpOwotCi0gICAgKFZPSUQpIGNrc3Ry bmNweShpbnN0YW5jZSwga3JiX2dldF9waG9zdChob3N0bmFtZSksIHNpemVvZihpbnN0YW5jZSkp OwotCi0gICAgaWYgKChocCA9IGdldGhvc3RieW5hbWUoaW5zdGFuY2UpKSA9PSBOVUxMKQotICAg ICAgcmV0dXJuKDApOwotCi0jaWZkZWYgSEFERFJMSVNUCi0gICAgaHAgPSBja19jb3B5aG9zdGVu dChocCk7CQkvKiBzYWZlIGNvcHkgdGhhdCB3b24ndCBjaGFuZ2UgKi8KLSNlbmRpZiAvKiBIQURE UkxJU1QgKi8KLSAgICBiY29weSgoY2hhciAqKWhwLT5oX2FkZHIsIChjaGFyICopICZmYWRkciwg c2l6ZW9mKGZhZGRyKSk7Ci0KLSAgICBpZiAoa3JiX2dldF9wd19pbl90a3QobmFtZSwgIiIsIHJl YWxtLCAia3JidGd0IiwgcmVhbG0sIDEsIHApIHx8Ci0gICAgICAgIGtyYl9ta19yZXEoJnRpY2tl dCwgInJjbWQiLCBpbnN0YW5jZSwgcmVhbG0sIDMzKSB8fAotICAgICAgICBrcmJfcmRfcmVxKCZ0 aWNrZXQsICJyY21kIiwgaW5zdGFuY2UsIGZhZGRyLCAmYXV0aGRhdGEsICIiKSB8fAotICAgICAg ICBrdXNlcm9rKCZhdXRoZGF0YSwgbmFtZSkpIHsKLSAgICAgICAgZGVzdF90a3QoKTsKLSAgICAg ICAgcmV0dXJuKDApOwotICAgIH0KLSAgICBkZXN0X3RrdCgpOwotICAgIHJldHVybigxKTsKLX0K LSNlbmRpZiAvKiBGVFBfS0VSQkVST1MgKi8KLQotVk9JRAotenN5c2xvZygpIHsKLSNpZmRlZiBD S1NZU0xPRwotICAgIGlmIChja3hzeXNsb2cgJiYgIWNreGxvZ2dpbmcpIHsKLSNpZmRlZiBMT0df REFFTU9OCi0gICAgICAgIG9wZW5sb2coaW5zZXJ2ZXIgPyAiaWtzZCIgOiAiY2tlcm1pdCIsIExP R19QSUQsIExPR19EQUVNT04pOwotI2Vsc2UKLSAgICAgICAgb3BlbmxvZyhpbnNlcnZlciA/ICJp a3NkIiA6ICJja2VybWl0IiwgTE9HX1BJRCk7Ci0jZW5kaWYgLyogTE9HX0RBRU1PTiAqLwotICAg ICAgICBja3hsb2dnaW5nID0gMTsKLSAgICAgICAgZGVidWcoRjEwMCwienN5c2xvZyBzeXNsb2cg b3BlbmVkIiwiIiwwKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLX0KLQotLyogIFog ViBQIEEgUyBTICAtLSAgVmVyaWZ5IHBhc3N3b3JkOyByZXR1cm5zIDEgaWYgT0ssIDAgb3RoZXJ3 aXNlICAqLwotCi0jaWZuZGVmIEFVVEhfVVNFUgotI2RlZmluZSBBVVRIX1VTRVIgMwotI2VuZGlm IC8qIEFVVEhfVVNFUiAqLwotI2lmbmRlZiBBVVRIX1ZBTElECi0jZGVmaW5lIEFVVEhfVkFMSUQg NAotI2VuZGlmIC8qIEFVVEhfVkFMSUQgKi8KLQotI2lmZGVmIF9fRnJlZUJTRF9fCQkJLyogMjk5 IFRoaXMgd2FzIG5lY2Vzc2FyeSBpbiAqLwotI2lmbmRlZiBOT0RDTElOSVRHUk9VUFMJCQkvKiBG cmVlQlNEIDQuNCwgZG9uJ3Qga25vdyAqLwotI2RlZmluZSBOT0RDTElOSVRHUk9VUFMJCQkvKiBh Ym91dCBvdGhlciB2ZXJzaW9ucy4uLiAqLwotI2VuZGlmCS8qIE5PRENMSU5JVEdST1VQUyAqLyAg ICAgICAgICAgIAotI2VuZGlmCS8qICBfX0ZyZWVCU0RfXyAqLwotCi1pbnQKLXp2cGFzcyhwKSBj aGFyICpwOyB7Ci0jaWZuZGVmIE5PRENMSU5JVEdST1VQUwotX1BST1RPVFlQKGludCBpbml0Z3Jv dXBzLCAoY29uc3QgY2hhciAqLCBnaWRfdCkgKTsKLSNlbmRpZgkvKiBOT0RDTElOSVRHUk9VUFMg Ki8KLQotICAgIGNoYXIgKnhwYXNzd2QsICpzYWx0OwotICAgIGNoYXIgKiBkaXIgPSBOVUxMOwot I2lmZGVmIENLX1BBTQotICAgIGludCBwYW1fc3RhdHVzOwotICAgIGNvbnN0IGNoYXIgKiByZXBs eSA9IE5VTEw7Ci0jZW5kaWYgLyogQ0tfUEFNICovCi0KLSAgICBpZiAobG9nZ2VkX2luIHx8IGFz a3Bhc3N3ZCA9PSAwKSB7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0gICAgZGVidWcoRjEx MSwienZwYXNzIixwID8gKGd1ZXN0ID8gcCA6ICJ4eHh4eHgiKSA6ICIobnVsbCkiLGd1ZXN0KTsK LSAgICBpZiAoIXApIHAgPSAiIjsKLSAgICBhc2twYXNzd2QgPSAwOwotICAgIGlmIChndWVzdCAm JiAhKnApIHsgICAgICAgICAgICAgICAgIC8qIEd1ZXN0cyBtdXN0IHNwZWNpZnkgYSBwYXNzd29y ZCAqLwotI2lmZGVmIENLU1lTTE9HCi0gICAgICAgIGlmIChja3hzeXNsb2cgJiYgY2t4bG9nZ2lu ZykgewotICAgICAgICAgICAgc3lzbG9nKExPR19JTkZPLAotICAgICAgICAgICAgICAgICAgICJs b2dpbjogYW5vbnltb3VzIGd1ZXN0cyBtdXN0IHNwZWNpZnkgYSBwYXNzd29yZCIKLSAgICAgICAg ICAgICAgICAgICApOwotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICAgICAg cmV0dXJuKDApOwotICAgIH0KLSAgICBpZiAoIWd1ZXN0Ci0jaWZkZWYgQ0tfQVVUSEVOVElDQVRJ T04KLSAgICAgICAgJiYgY2tfdG5fYXV0aF92YWxpZCgpICE9IEFVVEhfVkFMSUQKLSNlbmRpZiAv KiBDS19BVVRIRU5USUNBVElPTiAqLwotICAgICAgICApIHsgICAgICAgICAgICAgICAgICAgICAv KiAiZnRwIiBpcyBvbmx5IGFjY291bnQgYWxsb3dlZCBubyBwYXNzd29yZCAqLwotI2lmZGVmIENL X1BBTQotICAgICAgICBkZWJ1ZyhGMTEwLCJ6dnBhc3MiLCJjYWxsaW5nIHBhbV9zZXRfaXRlbShB VVRIVE9LKSIsMCk7Ci0gICAgICAgIGlmICgocGFtX3N0YXR1cyA9IHBhbV9zZXRfaXRlbShwYW1o LFBBTV9BVVRIVE9LLHApKSAhPSBQQU1fU1VDQ0VTUykgewotICAgICAgICAgICAgcmVwbHkgPSBw YW1fc3RyZXJyb3IocGFtaCwgcGFtX3N0YXR1cyk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ6 dnBhc3MgUEFNIGZhaWx1cmUiLHJlcGx5LDApOwotICAgICAgICAgICAgLyogaWYgbm8gcGFzc3dv cmQgZ2l2ZW4gdHJlYXQgYXMgbm9uLWZhdGFsIGVycm9yICovCi0gICAgICAgICAgICAvKiBwYW0g d2lsbCBwcm9tcHQgZm9yIHBhc3N3b3JkIGluIHBhbV9hdXRoZW50aWNhdGUoKSAqLwotICAgICAg ICAgICAgaWYgKCFwKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIlc1xuIixyZXBseSk7Ci0g ICAgICAgICAgICAgICAgcGFtX2VuZChwYW1oLCAwKTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhG MTAwLCJ6dnBhc3MgZGVuaWVkIiwiIiwwKTsKLSAgICAgICAgICAgICAgICBwdyA9IE5VTEw7Ci0g ICAgICAgICAgICAgICAgenZ1bmFtZVswXSA9IE5VTDsKLSAgICAgICAgICAgICAgICByZXR1cm4o MCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZGVidWcoRjExMCwienZwYXNz IiwiY2FsbGluZyBwYW1fYXV0aGVudGljYXRlIiwwKTsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAg IGlmICgqcCkKLQkgIHBhbV9wdyA9IHA7Ci0jZWxzZQotLyoKLSAgTWFrZSBJS1NEIGF1dGhlbnRp Y2F0aW9uICh1c2luZyBQQU0pIGFzayBmb3IgYSBwYXNzd29yZCB3aGVuIGFuCi0gIGludmFsaWQg dXNlcm5hbWUgaGFzIGJlZW4gZ2l2ZW4sIHRvIGF2b2lkIGRpc2Nsb3Npbmcgd2hpY2ggYWNjb3Vu dAotICBuYW1lcyBhcmUgdmFsaWQuIFNlZSAjNDE3MjQ3IChEZWJpYW4pLgotKi8KLSAgICAgICAg aWYgKCpwCi0jaWZkZWYgQ0tfTE9HSU4KLQkgICAgfHwgZ290ZW1wdHlwYXNzd2QKLSNlbmRpZiAv KiBDS19MT0dJTiAqLwotCSAgICApCi0JICAgIHBhbV9wdyA9IHA7Ci0jZW5kaWYJLyogQ09NTUVO VCAqLwotICAgICAgICBpZiAoKHBhbV9zdGF0dXMgPSBwYW1fYXV0aGVudGljYXRlKHBhbWgsIDAp KSAhPSBQQU1fU1VDQ0VTUykgewotICAgICAgICAgICAgcmVwbHkgPSBwYW1fc3RyZXJyb3IocGFt aCwgcGFtX3N0YXR1cyk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ6dnBhc3MgUEFNIGZhaWx1 cmUiLHJlcGx5LDApOwotICAgICAgICAgICAgcHJpbnRmKCIlc1xuIixyZXBseSk7Ci0gICAgICAg ICAgICBwYW1fZW5kKHBhbWgsIDApOwotICAgICAgICAgICAgZGVidWcoRjEwMCwienZwYXNzIGRl bmllZCIsIiIsMCk7Ci0gICAgICAgICAgICBwYW1fcHcgPSBOVUxMOwotICAgICAgICAgICAgcHcg PSBOVUxMOwotICAgICAgICAgICAgenZ1bmFtZVswXSA9IE5VTDsKLSAgICAgICAgICAgIHJldHVy bigwKTsKLSAgICAgICAgfQotICAgICAgICBwYW1fcHcgPSBOVUxMOwotICAgICAgICBkZWJ1ZyhG MTEwLCJ6dnBhc3MiLCJjYWxsaW5nIHBhbV9hY2N0X21nbXQiLDApOwotICAgICAgICBpZiAoKHBh bV9zdGF0dXMgPSBwYW1fYWNjdF9tZ210KHBhbWgsIDApKSAhPSBQQU1fU1VDQ0VTUykgewotICAg ICAgICAgICAgcmVwbHkgPSBwYW1fc3RyZXJyb3IocGFtaCwgcGFtX3N0YXR1cyk7Ci0gICAgICAg ICAgICBkZWJ1ZyhGMTEwLCJ6dnBhc3MgUEFNIGZhaWx1cmUiLHJlcGx5LDApOwotICAgICAgICAg ICAgcHJpbnRmKCIlc1xuIixyZXBseSk7Ci0gICAgICAgICAgICBwYW1fZW5kKHBhbWgsIDApOwot ICAgICAgICAgICAgZGVidWcoRjEwMCwienZwYXNzIGRlbmllZCIsIiIsMCk7Ci0gICAgICAgICAg ICBwdyA9IE5VTEw7Ci0gICAgICAgICAgICB6dnVuYW1lWzBdID0gTlVMOwotICAgICAgICAgICAg cmV0dXJuKDApOwotICAgICAgICB9Ci0gICAgICAgIGRlYnVnKEYxMTAsInp2cGFzcyIsIlBBTSB2 YWxpZGF0ZXMgT0siLDApOwotICAgICAgICBwYW1fZW5kKHBhbWgsMCk7Ci0jZWxzZSAvKiBDS19Q QU0gKi8KLSAgICAgICAgaWYgKHB3ID09IE5VTEwpCi0gICAgICAgICAgc2FsdCA9ICJ4eCI7Ci0g ICAgICAgIGVsc2UKLSAgICAgICAgICBzYWx0ID0gcHctPnB3X3Bhc3N3ZDsKLQotI2lmZGVmIEhQ VVgxMF9UUlVTVEVECi0gICAgICAgIHhwYXNzd2QgPSBiaWdjcnlwdChwLCBzYWx0KTsKLSNlbHNl Ci0vKgotICBPbiA2NC1iaXQgcGxhdGZvcm1zIHRoaXMgY2FuIGdpdmUgImNhc3QgdG8gcG9pbnRl ciBmcm9tIGludGVnZXIgb2YKLSAgZGlmZmVyZW50IHNpemUiIHdhcm5pbmcsIGJ1dCBJJ20gbm90 IHN1cmUgd2hhdCB0aGUgZWZmZWN0IGlzIGF0IHJ1bnRpbWUsCi0gIG9yIHdoYXQgdG8gZG8gYWJv dXQgaXQuCi0gKi8KLSAgICAgICAgeHBhc3N3ZCA9IChjaGFyICopY3J5cHQocCwgc2FsdCk7Ci0j ZW5kaWYgLyogSFBVWDEwX1RSVVNURUQgKi8KLQotICAgICAgICBpZiAoCi0jaWZkZWYgRlRQX0tF UkJFUk9TCi0gICAgICAgICAgICAvKiBudWxsIHB3X3Bhc3N3ZCBvayBpZiBLZXJiZXJvcyBwYXNz d29yZCBvayAqLwotICAgICAgICAgICAgcHcgPT0gTlVMTCB8fAotICAgICAgICAgICAgKCgqcHct PnB3X3Bhc3N3ZCAhPSAnXDAnIHx8Ci0gICAgICAgICAgICAgIHN0cmNtcCh4cGFzc3dkLCBwdy0+ cHdfcGFzc3dkKSkKLSAgICAgICAgICAgICAmJiAha3Bhc3MocHctPnB3X25hbWUsIHApKQotI2Vs c2UKLSNpZmRlZiBDS19TUlAKLSAgICAgICAgICAgIC8qIGNoZWNrIHdpdGggdHBhc3N3ZCBmaXJz dCBpZiB0aGVyZSAqLwotICAgICAgICAgICAgcHcgPT0gTlVMTCB8fCAqcHctPnB3X3Bhc3N3ZCA9 PSAnXDAnIHx8Ci0gICAgICAgICAgICB0X3ZlcmlmeXB3IChwdy0+cHdfbmFtZSwgcCkgPT0gMCB8 fAotICAgICAgICAgICAgKHRfdmVyaWZ5cHcgKHB3LT5wd19uYW1lLCBwKSA8IDAgJiYKLSAgICAg ICAgICAgIHN0cmNtcCAoeHBhc3N3ZCwgcHctPnB3X3Bhc3N3ZCkpCi0jZWxzZSAvKiBDS19TUlAg Ki8KLSAgICAgICAgICAgIC8qIFRoZSBzdHJjbXAgZG9lcyBub3QgY2F0Y2ggbnVsbCBwYXNzd29y ZHMhICovCi0gICAgICAgICAgICAocHcgPT0gTlVMTCkgfHwgKCpwdy0+cHdfcGFzc3dkID09ICdc MCcpIHx8Ci0gICAgICAgICAgICBzdHJjbXAoeHBhc3N3ZCwgcHctPnB3X3Bhc3N3ZCkKLSNlbmRp ZiAvKiBDS19TUlAgKi8KLSNlbmRpZiAvKiBGVFBfS0VSQkVST1MgKi8KLSAgICAgICAgICAgICkg ewotICAgICAgICAgICAgZGVidWcoRjEwMCwienZwYXNzIGRlbmllZCIsIiIsMCk7Ci0gICAgICAg ICAgICBwdyA9IE5VTEw7Ci0gICAgICAgICAgICB6dnVuYW1lWzBdID0gTlVMOwotICAgICAgICAg ICAgcmV0dXJuKDApOwotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfUEFNICovCi0gICAgfQotCi0g ICAgKFZPSUQpIHNldGdpZCgoR0lEX1QpcHctPnB3X2dpZCk7ICAgLyogU2V0IGdyb3VwIElEICov Ci0KLSNpZm5kZWYgTk9JTklUR1JPVVBTCi0gICAgKFZPSUQpIGluaXRncm91cHMocHctPnB3X25h bWUsIHB3LT5wd19naWQpOwotI2VuZGlmIC8qIE5PSU5JVEdST1VQUyAqLwotCi0gICAgbG9nZ2Vk X2luID0gMTsKLSAgICBkaXIgPSBwdy0+cHdfZGlyOwotCi0jaWZkZWYgQ0tXVE1QCi0gICAgLyog T3BlbiB3dG1wIGJlZm9yZSBjaHJvb3QgKi8KLSAgICBpZiAoY2t4d3RtcCkgewotICAgICAgICBz cHJpbnRmKGNrc3lzbGluZSwiaWtzXyUwNHgiLCBnZXRwaWQoKSk7IC8qIHNhZmUgKi8KLSAgICAg ICAgbG9nd3RtcChja3N5c2xpbmUsIHB3LT5wd19uYW1lLAotICAgICAgICAgICAgICAgICBjbGll bnRob3N0ID8gY2xpZW50aG9zdCA6ICIodW5rbm93biBob3N0KSIKLSAgICAgICAgICAgICAgICAp OwotICAgICAgICBkZWJ1ZyhGMTEwLCJXVE1QIGxvZ2luIixja3N5c2xpbmUsbG9nZ2VkX2luKTsK LSAgICB9Ci0jZW5kaWYgLyogQ0tXVE1QICovCi0vKgotICBGb3IgYW5vbnltb3VzIHVzZXJzLCB3 ZSBjaHJvb3QgdG8gdXNlciBmdHAncyBob21lIGRpcmVjdG9yeSB1bmxlc3MKLSAgc3RhcnRlZCB3 aXRoIC0tYW5vbnJvb3Q6eHh4LCBpbiB3aGljaCBjYXNlIHdlIGNocm9vdCB0byB4eHguICBXZSBt dXN0Ci0gIGltbWVkaWF0ZWx5IGNoZGlyKCkgdG8gdGhlIHNhbWUgZGlyZWN0b3J5IHdlIGNocm9v dCgpIHRvIG9yIGVsc2UgdGhlCi0gIG9sZCBjdXJyZW50IGRpcmVjdG9yeSByZW1haW5zIGFjY2Vz c2libGUgYXMgIi4iIG91dHNpZGUgdGhlIG5ldyByb290LgotKi8KLSAgICBpZiAoZ3Vlc3QpIHsK LSAgICAgICAgaWYgKGFub25yb290KSAgICAgICAgICAgICAgICAgICAvKiBOb24tZGVmYXVsdCBh bm9ueW1vdXMgcm9vdCAqLwotICAgICAgICAgIGRpciA9IGFub25yb290OwotICAgICAgICBlbHNl Ci0gICAgICAgICAgbWFrZXN0cigmYW5vbnJvb3QsZGlyKTsKLSAgICAgICAgZXJybm8gPSAwOwot ICAgICAgICBkZWJ1ZyhGMTEwLCJ6dnBhc3MgYW5vbiBjaHJvb3QiLGRpciwwKTsKLSAgICAgICAg aWYgKGNocm9vdChkaXIpIDwgMCkgewotICAgICAgICAgICAgZGVidWcoRjExMSwienZwYXNzIGFu b24gY2hyb290IEZBSUxFRCIsZGlyLGVycm5vKTsKLSAgICAgICAgICAgIGdvdG8gYmFkOwotICAg ICAgICB9Ci0gICAgICAgIGVycm5vID0gMDsKLSAgICAgICAgaWYgKGNoZGlyKCIvIikgPCAwKSB7 Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJ6dnBhc3MgYW5vbiBjaGRpciBGQUlMRUQiLGRpcixl cnJubyk7Ci0gICAgICAgICAgICBnb3RvIGJhZDsKLSAgICAgICAgfQotICAgICAgICBkZWJ1ZyhG MTEwLCJ6dnBhc3MgYW5vbiBjaHJvb3QvY2hkaXIgT0siLGRpciwwKTsKLSAgICB9IGVsc2UgaWYg KGNoZGlyKGRpcikgPCAwKSB7ICAgICAgICAvKiBOb3QgZ3Vlc3QgKi8KLSNpZmRlZiBDT01NRU5U Ci0gICAgICAgIGlmIChjaGRpcigiLyIpIDwgMCkgewotICAgICAgICAgICAgZGVidWcoRjExMCwi Tm9uLWd1ZXN0IGNoZGlyIEZBSUxFRCIsZGlyLDApOwotICAgICAgICAgICAgZ290byBiYWQ7Ci0g ICAgICAgIH0gZWxzZQotICAgICAgICAgIHByaW50ZigiP05vIGRpcmVjdG9yeSEgTG9nZ2luZyBp biB3aXRoIGhvbWU9L1xuIik7Ci0jZWxzZQotICAgICAgICBkZWJ1ZyhGMTEwLCJ6dnBhc3Mgbm9u LWd1ZXN0IGNoZGlyIEZBSUxFRCIsZGlyLDApOwotICAgICAgICBnb3RvIGJhZDsgICAgICAgICAg ICAgICAgICAgICAgIC8qIEJlIGNvbnNlcnZhdGl2ZSBhdCBmaXJzdCAqLwotI2VuZGlmIC8qIENP TU1FTlQgKi8KLSAgICB9Ci0gICAgZGVidWcoRjExMCwienZwYXNzIG5vbi1ndWVzdCBjaGRpciBP SyIsZGlyLDApOwotICAgIGlmIChzZXR1aWQoKFVJRF9UKXB3LT5wd191aWQpIDwgMCkgewotICAg ICAgICBkZWJ1ZyhGMTAxLCJ6dnBhc3Mgc2V0dWlkIEZBSUxFRCIsIiIscHctPnB3X3VpZCk7Ci0g ICAgICAgIGdvdG8gYmFkOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJ6dnBhc3Mgc2V0dWlkIE9L IiwiIixwdy0+cHdfdWlkKTsKLQotICAgIGd1ZXN0cGFzc1swXSA9ICdcMCc7Ci0gICAgaWYgKGd1 ZXN0KSB7Ci0gICAgICAgIGV4dGVybiBpbnQgZm5jYWN0OwotICAgICAgICBpc2d1ZXN0ID0gMTsK LSAgICAgICAgZm5jYWN0ID0gWFlGWF9SOyAgICAgICAgICAgICAgICAvKiBGSUxFIENPTExJU0lP TiA9IFJFTkFNRSAqLwotICAgICAgICBkZWJ1ZyhGMTEwLCJHVUVTVCBmbmNhY3Q9UiIscCwwKTsK LSAgICAgICAgbHNldChndWVzdHBhc3MsImFub255bW91czoiLDEwLDMyKTsKLSAgICAgICAgY2tz dHJuY3B5KCZndWVzdHBhc3NbMTBdLHAsR1VFU1RQQVNTLTEwKTsKLSAgICAgICAgaG9tZSA9ICIv IjsKLSAgICAgICAgcHJpbnRmKCJBbm9ueW1vdXMgbG9naW4uXHJcbiIpOwotCi0jaWZkZWYgU0VU UFJPQ1RJVExFCi0JLyogcHJvY3RpdGxlIGRlY2xhcmVkIHdoZXJlPyAgT2J2aW91c2x5IHRoaXMg Y29kZSBpcyBuZXZlciBjb21waWxlZC4gKi8KLSAgICAgICAgc3ByaW50Zihwcm9jdGl0bGUsICIl czogYW5vbnltb3VzLyUuKnMiLAotICAgICAgICAgICAgICAgIGNsaWVudGhvc3QgPyBjbGllbnRo b3N0IDogIih1bmspIiwKLSAgICAgICAgICAgICAgICBzaXplb2YocHJvY3RpdGxlKSAtIHNpemVv ZihjbGllbnRob3N0KSAtCi0gICAgICAgICAgICAgICAgc2l6ZW9mKCI6IGFub255bW91cy8iKSwg cCk7Ci0gICAgICAgIHNldHByb2N0aXRsZShwcm9jdGl0bGUpOwotI2VuZGlmIC8qIFNFVFBST0NU SVRMRSAqLwotCi0jaWZkZWYgQ0tTWVNMT0cKLSAgICAgICAgaWYgKGNreHN5c2xvZyAmJiBja3hs b2dnaW5nKSB7Ci0gICAgICAgICAgICBzeXNsb2coTE9HX0lORk8sCi0gICAgICAgICAgICAgICAg ICAgImxvZ2luOiBhbm9ueW1vdXMgJXMgJXMiLAotICAgICAgICAgICAgICAgICAgIGNsaWVudGhv c3QgPyBjbGllbnRob3N0IDogIih1bmtub3duIGhvc3QpIiwKLSAgICAgICAgICAgICAgICAgICBw Ci0gICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENLU1lTTE9HICov Ci0KLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWFsIHVzZXIg Ki8KLSAgICAgICAgaXNndWVzdCA9IDA7Ci0gICAgICAgIGhvbWUgPSBkaXI7Ci0gICAgICAgIGNr c3RybmNweShndWVzdHBhc3MsenZ1bmFtZSxHVUVTVFBBU1MpOwotCi0gICAgICAgIHByaW50Zigi VXNlciAlcyBsb2dnZWQgaW4uXHJcbiIsIHB3LT5wd19uYW1lKTsKLSNpZmRlZiBTRVRQUk9DVElU TEUKLQkvKiBub3QgdXNlZCAqLwotICAgICAgICBzcHJpbnRmKHByb2N0aXRsZSwgIiVzOiAlcyIs Ci0gICAgICAgICAgICAgICAgY2xpZW50aG9zdCA/IGNsaWVudGhvc3QgOiAiKHVuaykiLAotICAg ICAgICAgICAgICAgIHB3LT5wd19uYW1lCi0gICAgICAgICAgICAgICAgKTsKLSAgICAgICAgc2V0 cHJvY3RpdGxlKHByb2N0aXRsZSk7Ci0jZW5kaWYgLyogU0VUUFJPQ1RJVExFICovCi0KLSNpZmRl ZiBDS1NZU0xPRwotICAgICAgICBpZiAoY2t4c3lzbG9nICYmIGNreGxvZ2dpbmcpCi0gICAgICAg ICAgc3lzbG9nKExPR19JTkZPLCAibG9naW46ICVzICVzIiwKLSAgICAgICAgICAgICAgICAgcHct PnB3X25hbWUsCi0gICAgICAgICAgICAgICAgIGNsaWVudGhvc3QgPyBjbGllbnRob3N0IDogIih1 bmtub3duIGhvc3QpIgotICAgICAgICAgICAgICAgICApOwotI2VuZGlmIC8qIENLU1lTTE9HICov Ci0gICAgfQotICAgIGNrc3RybmNweSh6dmhvbWUsaG9tZSxDS01BWFBBVEgpOyAgIC8qIFNldCBl bnZpcm9ubWVudCB2YXJpYWJsZXMgKi8KLSNpZm5kZWYgTk9QVVRFTlYKLQotICAgIGNrbWFrbXNn KHplbnZ1c2VyLFpFTlZVU0VSLCJVU0VSPSIsenZ1bmFtZSxOVUxMLE5VTEwpOwotICAgIHB1dGVu digoY2hhciAqKXplbnZ1c2VyKTsKLSAgICBja21ha21zZyh6ZW52bG9nbmFtZSxaRU5WTE9HTkFN RSwiTE9HTkFNRT0iLHp2dW5hbWUsTlVMTCxOVUxMKTsKLSAgICBwdXRlbnYoKGNoYXIgKil6ZW52 bG9nbmFtZSk7Ci0gICAgY2ttYWttc2coemVudmhvbWUsWkVOVkhPTUUsIkhPTUU9Iix6dmhvbWUs TlVMTCxOVUxMKTsKLSAgICBwdXRlbnYoKGNoYXIgKil6ZW52aG9tZSk7Ci0jZW5kaWYgLyogTk9Q VVRFTlYgKi8KLSAgICAvKiBob21kaXIgPSAoY2hhciAqKXp2aG9tZTsgKi8KLSAgICBja3N0cm5j cHkoKGNoYXIgKil1aWRidWYsKGNoYXIgKil6dnVuYW1lLDY0KTsKLSAgICAoVk9JRCkgdW1hc2so ZGVmdW1hc2spOwotI2lmZGVmIElLU0RCCi0gICAgaWYgKGlrZGJvcGVuKSB7Ci0gICAgICAgIGNo YXIgKiBwMjsKLSAgICAgICAgaW50IGs7Ci0gICAgICAgIGV4dGVybiBjaGFyIGRicmVjW107Ci0g ICAgICAgIGV4dGVybiB1bnNpZ25lZCBsb25nIG15ZmxhZ3M7Ci0gICAgICAgIGV4dGVybiB1bnNp Z25lZCBpbnQgbXlkYnNsb3Q7Ci0gICAgICAgIGV4dGVybiBzdHJ1Y3QgaWtzZGJmbGQgZGJmbGRb XTsKLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotICAgICAgICBleHRlcm4gdW5zaWduZWQgbG9u ZyBteWFtb2RlLCBteWF0eXBlOwotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0gICAg ICAgIG15ZmxhZ3MgfD0gREJGX0xPR0dFRDsKLSNpZmRlZiBERUJVRwotCWlmIChkZWJsb2cpIHsK LQkgICAgZGVidWcoRjEwMSwienZwYXNzIGd1ZXN0IiwiIixndWVzdCk7Ci0JICAgIGRlYnVnKEYx MTEsInp2cGFzcyB6dnVuYW1lIix6dnVuYW1lLDApOwotCSAgICBkZWJ1ZyhGMTEwLCJ6dnBhc3Mg Z3Vlc3RwYXNzIixndWVzdHBhc3MsMCk7Ci0JICAgIGRlYnVnKEYxMTAsInp2cGFzcyBkaXIiLGRp ciwwKTsKLQkgICAgZGVidWcoRjExMCwienZwYXNzIGhvbWUiLGhvbWUsMCk7Ci0JICAgIGRlYnVn KEYxMTAsInp2cGFzcyBhbm9ucm9vdCIsYW5vbnJvb3QsMCk7Ci0JfQotI2VuZGlmIC8qIERFQlVH ICovCi0gICAgICAgIHAyID0gZ3Vlc3QgPyBndWVzdHBhc3MgOiB6dnVuYW1lOwotICAgICAgICBp ZiAoZ3Vlc3QpIHsKLSAgICAgICAgICAgIHAyID0gKGNoYXIgKilndWVzdHBhc3M7Ci0gICAgICAg ICAgICBteWZsYWdzICY9IH5EQkZfVVNFUjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg IHAyID0gKGNoYXIgKil6dnVuYW1lOwotICAgICAgICAgICAgbXlmbGFncyB8PSBEQkZfVVNFUjsK LSAgICAgICAgfQotICAgICAgICBrID0gc3RybGVuKHAyKTsKLSAgICAgICAgc3RybmNweSgmZGJy ZWNbREJfVUxFTl0sdWxvbmd0b2hleCgodW5zaWduZWQgbG9uZylrLDQpLDQpOwotICAgICAgICBs c2V0KCZkYnJlY1tkYmZsZFtkYl9VU0VSXS5vZmZdLHAyLDEwMjQsMzIpOwotICAgICAgICBzdHJu Y3B5KCZkYnJlY1tEQl9GTEFHU10sdWxvbmd0b2hleChteWZsYWdzLDQpLDQpOwotI2lmZGVmIENL X0FVVEhFTlRJQ0FUSU9OCi0gICAgICAgIG15YW1vZGUgPSBja190bl9hdXRoX3ZhbGlkKCk7Ci0g ICAgICAgIHN0cm5jcHkoJmRicmVjW0RCX0FNT0RFXSx1bG9uZ3RvaGV4KG15YW1vZGUsNCksNCk7 Ci0gICAgICAgIG15YXR5cGUgPSBja190bl9hdXRoZW50aWNhdGVkKCk7Ci0gICAgICAgIHN0cm5j cHkoJmRicmVjW0RCX0FUWVBFXSx1bG9uZ3RvaGV4KG15YXR5cGUsNCksNCk7Ci0jZW5kaWYgLyog Q0tfQVVUSEVOVElDQVRJT04gKi8KLSAgICAgICAgaWYgKGd1ZXN0KSB7Ci0gICAgICAgICAgICBw MiA9IGRpcjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHAyID0gemd0ZGlyKCk7Ci0g ICAgICAgICAgICBpZiAoIXAyKSBwMiA9ICIiOwotICAgICAgICAgICAgaWYgKCEqcDIpIHAyID0g aG9tZTsKLSAgICAgICAgfQotICAgICAgICBzdHJuY3B5KCZkYnJlY1tEQl9ETEVOXSwKLSAgICAg ICAgICAgICAgICB1bG9uZ3RvaGV4KCh1bnNpZ25lZCBsb25nKXN0cmxlbihwMiksNCksCi0gICAg ICAgICAgICAgICAgNAotICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIGxzZXQoJmRicmVjW2Ri ZmxkW2RiX0RJUl0ub2ZmXSxwMiwxMDI0LDMyKTsKLSAgICAgICAgdXBkc2xvdChteWRic2xvdCk7 Ci0gICAgfQotI2VuZGlmIC8qIElLU0RCICovCi0gICAgcmV0dXJuKDEpOwotCi1iYWQ6ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29tbW9uIGZhaWx1cmUgZXhpdCAqLwot ICAgIHp2dW5hbWVbMF0gPSBOVUw7Ci0gICAgenZsb2dvdXQoKTsKLSAgICByZXR1cm4oMCk7Ci19 Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLQotLyogQnVnZ3kgWGVuaXggMi4zLjQgY2MgbmVlZHMg dGhpcyBsaW5lIGFmdGVyIHRoZSBlbmRpZiAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMw Mi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1aW5zLnR4dCBiL2NrZXJtaXQtOS4wLjMwMi1idWls ZC9ja2VybWl0LTkuMC4zMDIvY2t1aW5zLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDhjZmVkYi4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05 LjAuMzAyL2NrdWlucy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzNTg4ICswLDAgQEAKLQotICAg WzFdVGhlIENvbHVtYmlhIENyb3duIFRoZSBLZXJtaXQgUHJvamVjdCB8IENvbHVtYmlhIFVuaXZl cnNpdHkKLSAgIDYxMiBXZXN0IDExNXRoIFN0cmVldCwgTmV3IFlvcmsgTlkgMTAwMjUgVVNBIG8g WzJda2VybWl0QGNvbHVtYmlhLmVkdQotICAgLi4uc2luY2UgMTk4MQotICAgWzNdSG9tZSBbNF1L ZXJtaXQgOTUgWzVdQy1LZXJtaXQgWzZdU2NyaXB0cyBbN11DdXJyZW50IFs4XU5ldyBbOV1GQVEK LSAgIFsxMF1TdXBwb3J0Ci0KLUMtS2VybWl0IDkuMCBJbnN0YWxsYXRpb24gSW5zdHJ1Y3Rpb25z IGFuZCBPcHRpb25zIGZvciBVbml4Ci0KLSAgIFsgWzExXUNvbnRlbnRzIF0gWyBbMTJdQy1LZXJt aXQgXSBbIFsxM11LZXJtaXQgSG9tZSBdCi0KLSAgIEZyYW5rIGRhIENydXoKLSAgIFRoZSBLZXJt aXQgUHJvamVjdAotICAgQ29sdW1iaWEgVW5pdmVyc2l0eQotCi0gICAgICBBcyBvZiBDLUtlcm1p dCB2ZXJzaW9uOiA5LjAuMzAyLCAyMCBBdWd1c3QgMjAxMQotICAgICAgVGhpcyBmaWxlIGxhc3Qg dXBkYXRlZDogU3VuIEF1ZyAyMSAxMjowODoyOSAyMDExIChOZXcgWW9yayBDaXR5Ci0gICB0aW1l KQotCi0gICBJRiBZT1UgQVJFIFJFQURJTkcgQSBQTEFJTi1URVhUIHZlcnNpb24gb2YgdGhpcyBk b2N1bWVudCwgaXQgaXMgYQotICAgcGxhaW4tdGV4dCBjb3B5IG9mIGEgV2ViIHBhZ2UuIFlvdSBj YW4gdmlzaXQgdGhlIG9yaWdpbmFsIChhbmQgcG9zc2libHkKLSAgIG1vcmUgdXAtdG8tZGF0ZSkg V2ViIHBhZ2UgaGVyZToKLQotWzE0XWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vp bnMuaHRtbAotCi1DT05URU5UUwotCi0gICBbMTVdT1ZFUlZJRVcKLSAgICAxLiBbMTZdSU5URVJO RVQgUVVJQ0sgU1RBUlQKLSAgICAyLiBbMTddSU5TVEFMTElORyBGUk9NIFBBQ0tBR0VTCi0gICAg My4gWzE4XUlOU1RBTExJTkcgUFJFQlVJTFQgQklOQVJJRVMKLSAgICA0LiBbMTldQlVJTERJTkcg RlJPTSBTT1VSQ0UgQ09ERQotICAgIDUuIFsyMF1JTlNUQUxMSU5HIFRIRSBLRVJNSVQgRklMRVMK LSAgICA2LiBbMjFdSU5TVEFMTElORyBVTklYIEMtS0VSTUlUIEZST00gRE9TLUZPUk1BVCBESVNL RVRURVMKLSAgICA3LiBbMjJdQ0hFQ0tJTkcgVEhFIFJFU1VMVFMKLSAgICA4LiBbMjNdUkVEVUNJ TkcgVEhFIFNJWkUgT0YgVEhFIEVYRUNVVEFCTEUgUFJPR1JBTSBJTUFHRQotICAgIDkuIFsyNF1V TklYIFZFUlNJT05TCi0gICAxMC4gWzI1XURJQUxJTkcgT1VUIEFORCBDT09SRElOQVRJTkcgV0lU SCBVVUNQCi0gICAxMS4gWzI2XVJVTk5JTkcgVU5JWCBDLUtFUk1JVCBTRVRVSUQgT1IgU0VUR0lE Ci0gICAxMi4gWzI3XUNPTkZJR1VSSU5HIFVOSVggV09SS1NUQVRJT05TCi0gICAxMy4gWzI4XUJJ WkFSUkUgQkVIQVZJT1IgQVQgUlVOVElNRQotICAgMTQuIFsyOV1DUkFTSEVTIEFORCBDT1JFIERV TVBTCi0gICAxNS4gWzMwXVNZU0xPR0dJTkcKLSAgIDE2LiBbMzFdQlVJTERJTkcgU0VDVVJFIFZF UlNJT05TIE9GIEMtS0VSTUlUIDkuMAotICAgMTcuIFszMl1JTlNUQUxMSU5HIEMtS0VSTUlUIEFT IEFOIFNTSCBTRVJWRVIgU1VCU1lTVEVNCi0KLU9WRVJWSUVXCi0KLSAgIFsgWzMzXVRvcCBdIFsg WzM0XUNvbnRlbnRzIF0gWyBbMzVdTmV4dCBdCi0KLSAgICAgV0FSTklORzogVGhpcyBkb2N1bWVu dCBjb250YWlucyBub3RlcyB0aGF0IGhhdmUgYmVlbiBhY2N1bXVsYXRpbmcKLSAgICAgc2luY2Ug dGhlIG1pZCAxOTgwcy4gTWFueSBvZiB0aGUgcHJvZHVjdHMgYW5kIFVuaXggdmVyc2lvbnMKLSAg ICAgbWVudGlvbmVkIGhlcmUgaGF2ZSBub3QgYmVlbiBoZWFyZCBvZiBpbiBhIGxvbmcgd2hpbGUs IGJ1dCB0aGF0IGRvZXMKLSAgICAgbm90IG5lY2Vzc2FyaWx5IG1lYW4gdGhleSBhcmUgbm90IHN0 aWxsIHJ1bm5pbmcgaW4gc29tZSBvYnNjdXJlCi0gICAgIG5vb2suCi0KLSAgIFRoaXMgZmlsZSBj b250YWlucyBVbml4LXNwZWNpZmljIGluZm9ybWF0aW9uLiBBIGxvdCBvZiBpdC4gVW5saWtlIG1v c3QKLSAgIG90aGVyIHBhY2thZ2VzLCBDLUtlcm1pdCB0cmllcyB2ZXJ5IGhhcmQgdG8gYmUgcG9y dGFibGUgdG8gZXZlcnkgVW5peAotICAgdmFyaWV0eSAoYW5kIGV2ZXJ5IHJlbGVhc2Ugb2YgZWFj aCBvbmUpIGtub3duIHRvIGV4aXN0LCBpbmNsdWRpbmcgbWFueQotICAgdGhhdCBhcmUgcXVpdGUg b2xkLCBhcyB3ZWxsIGFzIHRvIG90aGVyIHBsYXRmb3JtcyBsaWtlIFZNUywgQU9TL1ZTLAotICAg Vk9TLCBPUy05LCB0aGUgQmVCb3gsIHRoZSBBbWlnYSwgZXRjLgotCi0gICBTaW5jZSBDLUtlcm1p dCBnZXRzIHNvIGRlZXBseSBpbnRvIHRoZSBmaWxlIHN5c3RlbSwgaS9vIHN5c3RlbSwgYW5kCi0g ICBvdGhlciBhcmVhcyB0aGF0IGRpZmZlciByYWRpY2FsbHkgZnJvbSBvbmUgVW5peCBwbGF0Zm9y bSB0byB0aGUgbmV4dCwKLSAgIHRoaXMgbWVhbnMgdGhhdCBhIGxvdCBjYW4gZ28gd3Jvbmcgd2hl biB5b3UgdHJ5IHRvIGluc3RhbGwgQy1LZXJtaXQgb24KLSAgIChmb3IgZXhhbXBsZSkgYSBuZXcg cmVsZWFzZSBvZiBhIHBhcnRpY3VsYXIgdmFyaWV0eSBvZiBVbml4LCBpbiB3aGljaAotICAgY2Vy dGFpbiB0aGluZ3MgbWlnaHQgaGF2ZSBjaGFuZ2VkIHRoYXQgQy1LZXJtaXQgZGVwZW5kZWQgdXBv bi4KLQotICAgVGhpcyBmaWxlIGNvbmNlbnRyYXRlcyBvbiBpbnN0YWxsYXRpb24uIEZvciBhIGRl c2NyaXB0aW9uIG9mIGdlbmVyYWwKLSAgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgQy1LZXJt aXQsIHBsZWFzZSByZWFkIHRoZSBbMzZdQ29uZmlndXJhdGlvbnMKLSAgIE9wdGlvbnMgZG9jdW1l bnQuIEZvciB0cm91Ymxlc2hvb3RpbmcgYWZ0ZXIgaW5zdGFsbGF0aW9uLCBzZWUgdGhlCi0gICBb MzddR2VuZXJhbCBIaW50cyBhbmQgVGlwcyBhbmQgWzM4XVVuaXgtU3BlY2lmaWMgSGludHMgYW5k IFRpcHMKLSAgIGRvY3VtZW50cy4gVGhlIGxhdHRlciwgaW4gcGFydGljdWxhciwgY29udGFpbnMg bG90cyBvZiBpbmZvcm1hdGlvbiBvbgotICAgbG90cyBvZiBzcGVjaWZpYyBVbml4IHBsYXRmb3Jt cy4gSWYgeW91IHdhbnQgdG8gd29yayBvbiB0aGUgc291cmNlCi0gICBjb2RlLCBzZWUgdGhlIFsz OV1DLUtlcm1pdCBQcm9ncmFtIExvZ2ljIE1hbnVhbAotCi0gICBZb3UgbWF5IGluc3RhbGwgQy1L ZXJtaXQ6Ci0KLSAgICAgKiBGcm9tIGFuICJbNDBdaW5zdGFsbCBwYWNrYWdlIiwgaWYgb25lIGlz IGF2YWlsYWJsZS4KLSAgICAgKiBBcyBhIFs0MV1wcmVidWlsdCBiaW5hcnksIGlmIGF2YWlsYWJs ZSwgcGx1cyBhY2NvbXBhbnlpbmcgdGV4dAotICAgICAgIGZpbGVzLgotICAgICAqIEJ5IGJ1aWxk aW5nIGZyb20gWzQyXXNvdXJjZSBjb2RlLgotCi0xLiBJTlRFUk5FVCBRVUlDSyBTVEFSVAotCi0g ICBbIFs0M11Ub3AgXSBbIFs0NF1Db250ZW50cyBdIFsgWzQ1XU5leHQgXSBbIFs0Nl1QcmV2aW91 cyBdCi0KLSAgIElmIHlvdXIgVW5peCBjb21wdXRlciBpcyBvbiB0aGUgSW50ZXJuZXQgYW5kIGl0 IGhhcyBhIEMgY29tcGlsZXIsCi0gICBoZXJlJ3MgaG93IHRvIGRvd25sb2FkLCBidWlsZCwgYW5k IGluc3RhbGwgQy1LZXJtaXQgZGlyZWN0bHkgZnJvbSB0aGUKLSAgICJ0YXJiYWxscyIgb3IgWmlw IGFyY2hpdmVzOgotCi0gICAgMS4gTWFrZSBhIGZyZXNoIGRpcmVjdG9yeSBhbmQgY2QgdG8gaXQu Ci0gICAgMi4gRG93bmxvYWQgdGhlIEMtS2VybWl0IHNvdXJjZSBjb2RlOgotICAgICAgIFs0N11m dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9hcmNoaXZlcy9ja3UyMTEudGFyLlogKGNvbXBy ZXNzCi0gICAgICAgZm9ybWF0KSBvciBbNDhdZnRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv YXJjaGl2ZXMvY2t1MjExLnRhci5negotICAgICAgIChndW56aXAgZm9ybWF0KS4gSWYgdGhvc2Ug bGlua3MgZG9uJ3Qgd29yaywgRlRQIHRyYW5zZmVycyBhcmUgYmVpbmcKLSAgICAgICBibG9ja2Vk OyB0cnkgdGhlc2UgSFRUUCBsaW5rcyBpbnN0ZWFkOgotICAgICAgIFs0OV1odHRwOi8va2VybWl0 LmNvbHVtYmlhLmVkdS9mdHAvYXJjaGl2ZXMvY2t1MjExLnRhci5aIChjb21wcmVzcwotICAgICAg IGZvcm1hdCkgb3IKLSAgICAgICBbNTBdaHR0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUvZnRwL2Fy Y2hpdmVzL2NrdTIxMS50YXIuZ3ogKGd1bnppcAotICAgICAgIGZvcm1hdCkuCi0gICAgMy4gVW5j b21wcmVzcyB0aGUgY29tcHJlc3NlZCB0YXIgZmlsZSB3aXRoICJ1bmNvbXByZXNzIiBvciAiZ3Vu emlwIiwKLSAgICAgICBhY2NvcmRpbmcgdG8gd2hpY2ggdHlwZSBvZiBjb21wcmVzc2VkIGZpbGUg eW91IGRvd25sb2FkZWQuIChJZiB5b3UKLSAgICAgICBkb24ndCB1bmRlcnN0YW5kIHRoaXMsIHlv dSBjb3VsZCBkb3dubG9hZCBhIChtdWNoIGxhcmdlcikKLSAgICAgICB1bmNvbXByZXNzZWQgdGFy IGFyY2hpdmUgZGlyZWN0bHk6Ci0gICAgICAgWzUxXWZ0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2FyY2hpdmVzL2NrdTIxMS50YXIgb3IKLSAgICAgICBbNTJdaHR0cDovL2tlcm1pdC5jb2x1 bWJpYS5lZHUvZnRwL2FyY2hpdmVzL2NrdTIxMS50YXIKLSAgICA0LiBOb3cgdHlwZSAidGFyIHh2 ZiBja3UyMTEudGFyIiB0byB1bnBhY2sgdGhlIGluZGl2aWR1YWwgZmlsZXMgZnJvbQotICAgICAg IHRoZSB0YXIgYXJjaGl2ZS4KLSAgICA1LiBUeXBlICJybSBja3UyMTEudGFyIiB0byBnZXQgcmlk IG9mIHRoZSB0YXIgYXJjaGl2ZSwgd2hpY2ggaXMgbm8KLSAgICAgICBsb25nZXIgbmVlZGVkLgot ICAgIDYuIFJlYWQgdGhlIGNvbW1lbnRzIGF0IHRoZSB0b3Agb2YgdGhlIG1ha2VmaWxlIHRvIGZp bmQgb3V0IHdoaWNoCi0gICAgICAgdGFyZ2V0IHRvIHVzZSBhbmQgdGhlbiB0eXBlIHRoZSBhcHBy b3ByaWF0ZSAibWFrZSIgY29tbWFuZCwgc3VjaCBhcwotICAgICAgICJtYWtlIGxpbnV4IiwgIm1h a2Ugc29sYXJpczgiLCBldGMuCi0gICAgNy4gVGhpcyBwcm9kdWNlcyBhIGJpbmFyeSBpbiB5b3Vy IGN1cnJlbnQgZGlyZWN0b3J5IGNhbGxlZCAid2VybWl0Ii4KLSAgICAgICBTdGFydCBpdCBieSB0 eXBpbmcgIi4vd2VybWl0IiBhbmQgWzUzXXRyeSBpdCBvdXQgdG8gbWFrZSBzdXJlIGl0Ci0gICAg ICAgd29ya3MuIFRoZW4gcmVhZCBbNTRdU2VjdGlvbiA1IGZvciBob3cgdG8gaW5zdGFsbCBpdCwg b3Igc2ltcGx5Ci0gICAgICAgY29weSB0aGUgd2VybWl0IGJpbmFyeSB0byB0aGUgZGVzaXJlZCBw dWJsaWMgZGlyZWN0b3J5LCByZW5hbWUgaXQKLSAgICAgICB0byBrZXJtaXQsIGFuZCBnaXZlIGl0 IHRoZSBuZWVkZWQgcGVybWlzc2lvbnMgKGFuZCwgaWYgaXQgaXMgZ29pbmcKLSAgICAgICB0byBi ZSB1c2VkIHRvIGRpYWwgb3V0LCBnaXZlIGl0IHRoZSBzYW1lIGdyb3VwIGFuZCBvd25lciBhbmQK LSAgICAgICBwZXJtaXNzaW9ucyBhcyB0aGUgY3UsIHRpcCwgb3IgbWluaWNvbSBwcm9ncmFtKS4K LQotICAgRm9yIHNlY3VyZSBpbnN0YWxsYXRpb25zLCBzZWUgWzU1XVNlY3Rpb25zIDUgYW5kIFs1 Nl0xNi4KLQotMi4gSU5TVEFMTElORyBGUk9NIFBBQ0tBR0VTCi0KLSAgIFsgWzU3XVRvcCBdIFsg WzU4XUNvbnRlbnRzIF0gWyBbNTldTmV4dCBdIFsgWzYwXVByZXZpb3VzIF0KLQotICAgVmFyaW91 cyBVbml4IHZhcmlldGllcyAtLSBMaW51eCwgU29sYXJpcywgQUlYLCBldGMgLS0gbm93IGluY29y cG9yYXRlCi0gICB0aGUgaWRlYSBvZiAiaW5zdGFsbCBwYWNrYWdlcyIsIGFuZCBtYW55IHVzZXJz IGV4cGVjdCB0byBmaW5kIGFsbCBuZXcKLSAgIGFwcGxpY2F0aW9ucyBpbiB0aGlzIGZvcm1hdC4g QSBzZWxlY3Rpb24gb2YgaW5zdGFsbCBwYWNrYWdlcyBtaWdodCBiZQotICAgYXZhaWxhYmxlIGZv ciBhbnkgZ2l2ZW4gcmVsZWFzZSBvZiBDLUtlcm1pdCwgYnV0IHRoZXJlIGlzIGEgdHJhZGVvZmYK LSAgIGJldHdlZW4gY29udmVuaWVuY2UgYW5kIHNhZmV0eS4gVW5peCBwcmVzZW50cyBzZXZlcmFs IG5vdGFibGUgcHJvYmxlbXMKLSAgIHRvIHRoZSBidWlsZGVyIG9mIGluc3RhbGwgcGFja2FnZXM6 Ci0KLSAgICBhLiBTaW5jZSBDLUtlcm1pdCBpcyBwb3J0YWJsZSB0byBtYW55IG5vbi1Vbml4IHBs YXRmb3JtcyAoVk1TLCBWT1MsCi0gICAgICAgQU9TL1ZTLCBldGMpLCBzb21lIG9mIHRoZSBmaWxl cyBpbiB0aGUgQy1LZXJtaXQgZGlzdHJpYnV0aW9uIGRvIG5vdAotICAgICAgIGZpdCBpbnRvIHRo ZSBVbml4IGFwcGxpY2F0aW9uIG1vZGVsLiBJbiBwYXJ0aWN1bGFyLCBDLUtlcm1pdAotICAgICAg IGluY2x1ZGVzIHNvbWUgcGxhaW4gdGV4dCBmaWxlcyAoZGVzY3JpYmVkIGluIFs2MV1TZWN0aW9u IDUpIGFuZAotICAgICAgIFVuaXggaGFzIG5vIHN0YW5kYXJkIHBsYWNlIHRvIHB1dCBzdWNoIGZp bGVzLiBUeXBpY2FsIFVuaXggcGFja2FnZQotICAgICAgIG1hbmFnZXJzIGRvIG5vdCBhbGxvdyBm b3IgdGhlbS4gV2hlcmUgc2hvdWxkIHRoZXkgZ28sIGFuZCBob3cgd2lsbAotICAgICAgIHRoZSB1 c2VyIGtub3cgd2hlcmUgdG8gZmluZCB0aGVtPwotICAgIGIuIEluc3RhbGxhdGlvbiBvZiBhbnkg cHJvZ3JhbSB0aGF0IHdpbGwgYmUgdXNlZCB0byBtYWtlIG1vZGVtIGNhbGxzCi0gICAgICAgcmVx dWlyZXMgc29tZSBpbXBvcnRhbnQgZGVjaXNpb25zIGZyb20gdGhlIGluc3RhbGxlciByZWdhcmRp bmcKLSAgICAgICBzZWN1cml0eSBhbmQgcHJpdmlsZWdlLgotCi0gICBJdGVtIChiKSBpcyBkaXNj dXNzZWQgYXQgbGVuZ3RoIGluIFs2Ml1TZWN0aW9ucyAxMCBhbmQgWzYzXTExIG9mIHRoaXMKLSAg IGRvY3VtZW50LCBidXQgdGhlIHBhY2thZ2UtcmVsYXRlZCBhc3BlY3RzIGFyZSBhbHNvIGdpdmVu IGhlcmUuIFRoZQotICAgYmFzaWMgcHJvYmxlbSBpcyB0aGF0IFVuaXggZGlhbG91dCBkZXZpY2Vz IGFuZCB0aGUgVVVDUCAibG9jayBmaWxlcyIKLSAgIHRoYXQgcmVndWxhdGUgY29udGVudGlvbiBm b3IgdGhlbSAoZGVzY3JpYmVkIGluIFs2NF1TZWN0aW9uIDEwKSBhcmUKLSAgIHVzdWFsbHkgcHJv dGVjdGVkIGFnYWluc3QgIndvcmxkIi4gVGhlcmVmb3JlLCB0aGUgaW5zdGFsbCBwcm9jZWR1cmUK LSAgIG11c3QgZWl0aGVyIHJ1biBhcyByb290IGluIG9yZGVyIHRvIGdpdmUgdGhlIEtlcm1pdCBi aW5hcnkgdGhlIHJlcXVpcmVkCi0gICBwZXJtaXNzaW9ucywgZ3JvdXAsIGFuZC9vciBvd25lciwg b3IgZWxzZSB0aGUgZGlhbG91dCBkZXZpY2VzIGFuZAotICAgYXNzb2NpYXRlZCBkaXJlY3Rvcmll cyBtdXN0IGJlIG9wZW4gZm9yIGdyb3VwIG9yIHdvcmxkIHJlYWRpbmcgYW5kCi0gICB3cml0aW5n LiBPdGhlcndpc2UsIHRoZSBLZXJtaXQgcHJvZ3JhbSBqdXN0IGluc3RhbGxlZCBXSUxMIE5PVCBX T1JLIGZvcgotICAgZGlhbGluZyBvdXQuCi0KLSAgIFRodXMsIGEgd2VsbC1jcmFmdGVkIGluc3Rh bGxhdGlvbiBwcm9jZWR1cmUgc2hvdWxkIHByZXNlbnQgdGhlIG9wdGlvbnMKLSAgIGFuZCBhbGxv dyB0aGUgaW5zdGFsbGVyIHRvIGNob29zZSB0aGUgbWV0aG9kLCBpZiBhbnksIGZvciByZWd1bGF0 aW5nCi0gICBhY2Nlc3MgdG8gdGhlIGRpYWxvdXQgZGV2aWNlczoKLQotICAgIGEuIENoZWNrIHRo ZSBwZXJtaXNzaW9ucyBvZiB0aGUgbG9ja2ZpbGUgZGlyZWN0b3J5IGFuZCB0aGUgZGlhbG91dAot ICAgICAgIGRldmljZXMuIElmIHRoZXkgZG8gbm90IGFsbG93IGdyb3VwIG9yIHdvcmxkIFIvVyBh Y2Nlc3MsIHRoZW46Ci0gICAgYi4gIllvdXIgVVVDUCBsb2NrZmlsZSBkaXJlY3RvcnkgYW5kL29y IGRpYWxvdXQgZGV2aWNlcyByZXF1aXJlCi0gICAgICAgcHJpdmlsZWdlIHRvIGFjY2Vzcy4gWW91 IG11c3QgZWl0aGVyIGNoYW5nZSB0aGVpciBwZXJtaXNzaW9ucyBvcgotICAgICAgIGluc3RhbGwg S2VybWl0IHdpdGggcHJpdmlsZWdlcy4iCi0gICAgYy4gIklmIHlvdSB3aXNoIHRvIGluc3RhbGwg S2VybWl0IHdpdGggcHJpdmlsZWdlcywgaXQgd2lsbCBiZSBnaXZlbgotICAgICAgIHRoZSBzYW1l IG93bmVyLCBncm91cCwgYW5kIHBlcm1pc3Npb25zIGFzIHRoZSBjdSBwcm9ncmFtIHNvIGl0IGNh bgotICAgICAgIHVzZSB0aGUgZGlhbG91dCBkZXZpY2VzLiIgKFRoaXMgaXMgaW5jcmVhc2luZ2x5 IHByb2JsZW1hdGljIGFzIHNvbWUKLSAgICAgICBuZXdlciBVbml4IHN5c3RlbXMgbGlrZSBNYWMg T1MgWCBkb24ndCBoYXZlIGEgY3UgcHJvZ3JhbSwgb3IgZXZlbiBhCi0gICAgICAgc2VyaWFsIHBv cnQhKQotICAgIGQuIElmIHRoZXkgY2hvb3NlIChjKSBidXQgdGhlIHVzZXIgaXMgbm90IHJvb3Qs IGdpdmUgYSBtZXNzYWdlIHRoYXQKLSAgICAgICB0aGUgaW5zdGFsbCBwcm9jZWR1cmUgY2FuIGJl IHJ1biBvbmx5IGJ5IHJvb3QgYW5kIHRoZW4gcXVpdC4KLQotICAgSXQgc2hvdWxkIGdvIHdpdGhv dXQgc2F5aW5nLCBvZiBjb3Vyc2UsIHRoYXQgYW55IGJpbmFyaWVzIHRoYXQgYXJlIHRvCi0gICBi ZSBpbmNsdWRlZCBpbiBhbiBpbnN0YWxsIHBhY2thZ2Ugc2hvdWxkIGJlIGJ1aWx0IGZyZXNoIG9u IHRoZSBleGFjdAotICAgcGxhdGZvcm0gKGUuZy4gUmVkIEhhdCA4LjAgb24gSW50ZWwpIGZvciB3 aGljaCB0aGUgcGFja2FnZSBpcyB0YXJnZXRlZDsKLSAgIHByZWJ1aWx0IGJpbmFyaWVzIChbNjVd bmV4dCBzZWN0aW9uKSBmcm9tIG90aGVyIHNpdGVzIGFyZSBsaWtlbHkgdG8KLSAgIGhhdmUgbGli cmFyeSBtaXNtYXRjaGVzLiBbNjZdQ0xJQ0sgSEVSRSBmb3IgbW9yZSBhYm91dCBidWlsZGluZwot ICAgQy1LZXJtaXQgaW5zdGFsbCBwYWNrYWdlcy4KLQotICAgVGhlIEtlcm1pdCBQcm9qZWN0IGRv ZXMgbm90IGhhdmUgdGhlIHJlc291cmNlcyBvciB0aGUgZXhwZXJ0aXNlIHRvIG1ha2UKLSAgIGlu c3RhbGwgcGFja2FnZXMgZm9yIGV2ZXJ5IHBsYXRmb3JtLiBNb3N0IGluc3RhbGwgcGFja2FnZXMs IHRoZXJlZm9yZSwKLSAgIGFyZSBjb250cmlidXRlZCBieSBvdGhlcnMsIGFuZCB0aGV5IGRvIG5v dCBuZWNlc3NhcmlseSBmb2xsb3cgdGhlCi0gICBndWlkZWxpbmVzIGdpdmVuIGFib3ZlLiBQYXkg YXR0ZW50aW9uIHRvIHdoYXQgdGhleSBkby4KLQotICAgSWYgeW91IGFyZSBhbiBlbmQgdXNlciB3 aG8gaGFzIG9idGFpbmVkIGEgQy1LZXJtaXQgaW5zdGFsbCBwYWNrYWdlIGZvcgotICAgYSBwYXJ0 aWN1bGFyIHBsYXRmb3JtLCB5b3Ugc2hvdWxkIGJlIGF3YXJlIHRoYXQgc29tZSBhZGRpdGlvbmFs IHN0ZXBzCi0gICBtaWdodCBuZWVkZWQgaWYgeW91IHdhbnQgdG8gdXNlIEtlcm1pdCB0byBkaWFs IG91dC4gUmVhZCBbNjddU2VjdGlvbiAxMAotICAgZm9yIGRldGFpbHMuCi0KLTMuIElOU1RBTExJ TkcgUFJFQlVJTFQgQklOQVJJRVMKLQotICAgWyBbNjhdVG9wIF0gWyBbNjldQ29udGVudHMgXSBb IFs3MF1OZXh0IF0gWyBbNzFdUHJldmlvdXMgXQotCi0gICBIdW5kcmVkcyBvZiBwcmVidWlsdCBD LUtlcm1pdCBiaW5hcmllcyBhcmUgYXZhaWxhYmxlIG9uIHRoZSBDRFJPTSBpbgotICAgdGhlIEJJ TkFSWSB0cmVlIFtOT1RFOiBUaGUgQy1LZXJtaXQgQ0RST00gaXMgc3RpbGwgZm9yIHZlcnNpb24g Ny4wXSwKLSAgIGFuZCBhdCBvdXIgZnRwIHNpdGUgaW4gdGhlIFs3Ml1rZXJtaXQvYmluIGFyZWEg KHdpdGggbmFtZXMgc3RhcnRpbmcKLSAgIHdpdGggImNrIiksIGFsc28gYWNjZXNzaWJsZSBvbiB0 aGUgWzczXUMtS2VybWl0IHdlYnNpdGUuIFRvIGluc3RhbGwgYQotICAgcHJlYnVpbHQgYmluYXJ5 OgotCi0gICAgYS4gUmVuYW1lIHRoZSBiaW5hcnkgdG8gIndlcm1pdCIuCi0gICAgYi4gTWFrZSBz dXJlIGl0IHdvcmtzOyBzb21lIHRlc3RzIGFyZSBzdWdnZXN0ZWQgaW4gWzc0XVNlY3Rpb24gNy4K LSAgICBjLiBGb2xsb3cgc3RlcHMgKGIpIHRocm91Z2ggKGUpIGluIFs3NV1TZWN0aW9uIDQuCi0g ICAgZC4gSW5zdGFsbCByZWxhdGVkIGZpbGVzIGFzIGRlc2NyaWJlZCBpbiBbNzZdU2VjdGlvbiA1 LgotCi0gICBCdXQgZmlyc3QuLi4gUGxlYXNlIGhlZWQgdGhlIGZvbGxvd2luZyBjYXV0aW9uczoK LQotICAgIGEuIElmIHlvdSBwaWNrIHRoZSB3cm9uZyBiaW5hcnksIGl0IHdvbid0IHdvcmsgKG9y IHdvcnNlKS4KLSAgICBiLiBFdmVuIHdoZW4geW91IHBpY2sgdGhlIGFwcHJvcHJpYXRlIGJpbmFy eSwgaXQgc3RpbGwgbWlnaHQgbm90IHdvcmsKLSAgICAgICBkdWUgdG8gc2hhcmVkLWxpYnJhcnkg bWlzbWF0Y2hlcywgZXRjLiAoc2VlIFs3N11TZWN0aW9uIDQuMCkuCi0gICAgYy4gRG9uJ3QgZXhw ZWN0IGEgYmluYXJ5IGJ1aWx0IG9uIG9yIGZvciB2ZXJzaW9uIG4gb2YgeW91ciBPUyB0byB3b3Jr Ci0gICAgICAgb24gdmVyc2lvbiBuIC0geCAod2hlcmUgeCA+IDApLiBIb3dldmVyLCBpdCBpcyBz dXBwb3NlZCB0byBiZSBzYWZlCi0gICAgICAgdG8gcnVuIGEgYmluYXJ5IGJ1aWx0IG9uIChvciBm b3IpIGFuIG9sZGVyIE9TIHJlbGVhc2Ugb24gYSBuZXdlcgotICAgICAgIG9uZSAoYnV0IGlzIFs3 OF1pbmNyZWFzaW5nbHkgbGVzcyBzbyBhcyB0aW1lLWhvbm9yZWQgcHJpbmNpcGxlcyBvZgotICAg ICAgIHN0YWJpbGl0eSBhbmQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZ28gZmFkaW5nIGludG8g b2JzY3VyaXR5KS4KLQotICAgVGhlcmVmb3JlLCBpdCBpcyBhbHdheXMgYmV0dGVyIHRvIGJ1aWxk IHlvdXIgb3duIGJpbmFyeSBmcm9tIHNvdXJjZQotICAgY29kZSAoWzc5XW5leHQgc2VjdGlvbikg aWYgeW91IGNhbi4gQnV0IHNpbmNlIGl0IGlzIGluY3JlYXNpbmdseSBjb21tb24KLSAgIGZvciBV bml4IHN5c3RlbXMgKG5vdCB0byBtZW50aW9uIFZNUyBhbmQgb3RoZXIgT1MncykgdG8gYmUgZGVs aXZlcmVkCi0gICB3aXRob3V0IEMgY29tcGlsZXJzLCBpdCBpcyBzb21ldGltZXMgbm90IHBvc3Np YmxlLiBJbiBzdWNoIGNhc2VzLCB0cnkKLSAgIHRoZSBtb3N0IGFwcHJvcHJpYXRlIHByZWJ1aWx0 IGJpbmFyeSBvciBiaW5hcmllcywgYW5kIGlmIG5vbmUgb2YgdGhlbQotICAgd29yaywgWzgwXWNv bnRhY3QgdXMgYW5kIHdlJ2xsIHNlZSB3aGF0IHdlIGNhbiBkbyB0byBoZWxwLgotCi00LiBCVUlM RElORyBGUk9NIFNPVVJDRSBDT0RFCi0KLSAgIFsgWzgxXVRvcCBdIFsgWzgyXUNvbnRlbnRzIF0g WyBbODNdTmV4dCBdIFsgWzg0XVByZXZpb3VzIF0KLQotICAgQWxzbyBzZWU6IFs4NV1TZWN0aW9u IDggYW5kIFs4Nl1TZWN0aW9uIDkuCi0KLSAgIEMtS2VybWl0IGlzIGRlc2lnbmVkIHRvIGJlIGJ1 aWx0IGFuZCB1c2VkIG9uIGFzIG1hbnkgcGxhdGZvcm1zIGFzCi0gICBwb3NzaWJsZTogVW5peCBh bmQgbm9uLVVuaXgsIG9sZCBhbmQgbmV3IChhbmQgYW5jaWVudCksIEFOU0kgQyBhbmQgSyZSLgot ICAgVGhlIFVuaXggdmVyc2lvbiBkb2VzIG5vdCB1c2Ugb3IgZGVwZW5kIG9uIGFueSBleHRlcm5h bCB0b29scyBmb3IKLSAgIGJ1aWxkaW5nIGV4Y2VwdCB0aGUgIm1ha2UiIHV0aWxpdHksIHRoZSBD IGNvbXBpbGVyLCB0aGUgbGlua2VyLCBhbmQgdGhlCi0gICBzaGVsbC4gSXQgZG9lcyBub3QgdXNl IGFueSBleHRlcm5hbCBhdXRvbWF0ZWQgY29uZmlndXJhdGlvbiB0b29scyBzdWNoCi0gICBhcyBj b25maWd1cmUsIGF1dG9jb25mLCBhdXRvbWFrZSwgbGlidG9vbCwgZXRjLiBFdmVyeXRoaW5nIGlu IEMtS2VybWl0Ci0gICBoYXMgYmVlbiBidWlsdCBieSBoYW5kIGJhc2VkIG9uIGRpcmVjdCBleHBl cmllbmNlIG9yIHJlcG9ydHMgb3IKLSAgIGNvbnRyaWJ1dGlvbnMgZnJvbSB1c2VycyBvZiBlYWNo IHBsYXRmb3JtLgotCi0gICBUaGUgWzg3XUMtS2VybWl0IG1ha2VmaWxlIGNvbnRhaW5zIHRoZSBy dWxlcyBmb3IgYnVpbGRpbmcgdGhlIHByb2dyYW0KLSAgIGZvciBlYWNoIG9mIHRoZSBodW5kcmVk cyBvZiBkaWZmZXJlbnQga2luZHMgb2YgVW5peCBzeXN0ZW1zIHRoYXQKLSAgIEMtS2VybWl0IGF0 dGVtcHRzIHRvIHN1cHBvcnQuIEl0IGNvdmVycyBhbGwgVW5peCB2YXJpYXRpb25zIHNpbmNlIGFi b3V0Ci0gICAxOTgwIC0tIHByZXR0eSBtdWNoIGV2ZXJ5dGhpbmcgYWZ0ZXIgVW5peCBWNi4gU2Vw YXJhdGUgbWFrZWZpbGVzIGFyZQotICAgdXNlZCBmb3IgWzg4XVBsYW4gOSBhbmQgWzg5XTIueCBC U0QuCi0KLSAgIFByZXJlcXVpc2l0ZXM6Ci0KLSAgICAgKiBUaGUgQyBjb21waWxlciwgbGlua2Vy LCBhbmQgbWFrZSBwcm9ncmFtIG11c3QgYmUgaW5zdGFsbGVkLgotICAgICAqIFRoZSBDIGxpYnJh cmllcyBhbmQgaGVhZGVyIGZpbGVzIG11c3QgYmUgaW5zdGFsbGVkICgqKS4KLSAgICAgKiBUaGUg Qy1LZXJtaXQgc291cmNlIGNvZGUgYW5kIG1ha2VmaWxlIGluIHlvdXIgY3VycmVudCBkaXJlY3Rv cnkuCi0gICAgICogVGhlIEMtS2VybWl0IHRleHQgZmlsZXMgKFs5MF1TZWN0aW9uIDUpIGluIHlv dXIgY3VycmVudCBkaXJlY3RvcnkuCi0KLSAgICAgKiBUaGlzIGlzIGJlY29taW5nIHByb2JsZW1h dGljIGluIHRoaXMgbmV3IGFnZSBvZiAic2VsZWN0aXZlCi0gICAgICAgaW5zdGFsbHMiIGUuZy4g b2YgTGludXggcGFja2FnZXMuIEMtS2VybWl0IGJ1aWxkcyB3aWxsIG9mdGVuIGZhaWwKLSAgICAg ICBiZWNhdXNlIHJlcGx5aW5nICJubyIgdG8gc29tZSBvYnNjdXJlIExpbnV4IGluc3RhbGxhdGlv biBvcHRpb24KLSAgICAgICB3aWxsIHJlc3VsdCBpbiBtaXNzaW5nIGxpYnJhcmllcyBvciBoZWFk ZXIgZmlsZXMuIERpdHRvIG9uCi0gICAgICAgcGxhdGZvcm1zIGxpa2UgQUlYIGFuZCBTb2xhcmlz IHRoYXQgZG9uJ3QgY29tZSB3aXRoIEMgY29tcGlsZXJzLAotICAgICAgIGFuZCB0aGVuIGxhdGVy IGhhdmUgZ2NjIGluc3RhbGxlZCwgYnV0IGFyZSBzdGlsbCBtaXNzaW5nIGNydWNpYWwKLSAgICAg ICBsaWJyYXJpZXMsIGxpa2UgbGlibSAobWF0aCkuCi0KLSAgIFBsdXM6Ci0KLSAgICAgKiBGb3Ig VENQL0lQIG5ldHdvcmtpbmcgc3VwcG9ydCwgdGhlIHNvY2tldHMgbGlicmFyeSBhbmQgcmVsYXRl ZAotICAgICAgIGhlYWRlciBmaWxlcyBtdXN0IGJlIGluc3RhbGxlZC4KLSAgICAgKiBUaGUgbWF0 aCBsaWJyYXJ5IGZvciBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljIHN1cHBvcnQgKGNhbiBiZQot ICAgICAgIGRlc2VsZWN0ZWQgYnkgYWRkaW5nIC1ETk9GTE9BVCB0byBDRkxBR1MgYW5kIHJlbW92 aW5nIC1sbSBmcm9tCi0gICAgICAgTElCUykuCi0gICAgICogTWFueSBhbmQgdmFyaWVkIHNlY3Vy aXR5IGxpYnJhcmllcyBmb3IgYnVpbGRpbmcgYSBzZWN1cmUgdmVyc2lvbgotICAgICAgIChLZXJi ZXJvcywgU1NML1RMUywgU1JQLCBabGliLC4uLikgVGhlc2UgYXJlIHJlcXVpcmVkIG9ubHkgaWYg eW91Ci0gICAgICAgc2VsZWN0IGEgc2VjdXJlIHRhcmdldC4KLSAgICAgKiBGb3IgdGhlIGN1cnNl cy1iYXNlZCBmdWxsc2NyZWVuIGZpbGUtdHJhbnNmZXIgZGlzcGxheSwgdGhlIGN1cnNlcwotICAg ICAgIG9yIG5jdXJzZXMgaGVhZGVyIGZpbGUocykgYW5kIGxpYnJhcnksIGFuZCBwcm9iYWJseSBh bHNvIHRoZQotICAgICAgIHRlcm1jYXAgYW5kL29yIHRlcm1saWIgbGlicmFyeS4gTm90ZSB0aGF0 IHRoZSBuYW1lcyBhbmQgbG9jYXRpb25zCi0gICAgICAgb2YgdGhlc2UgZmlsZXMgYW5kIGxpYnJh cmllcyBhcmUgbGlrZWx5IHRvIGNoYW5nZSBjYXByaWNpb3VzbHkgd2l0aAotICAgICAgIGV2ZXJ5 IG5ldyByZWxlYXNlIG9mIHlvdXIgVW5peCBwcm9kdWN0LiBJZiB5b3UgZGlzY292ZXIgdGhhdCB0 aGUKLSAgICAgICBDLUtlcm1pdCBidWlsZCBwcm9jZWR1cmUgZmFpbHMgYmVjYXVzZSB5b3VyIGN1 cnNlcyBhbmQvb3IgdGVybXh4eAotICAgICAgIGhlYWRlcnMgb3IgbGlicmFyaWVzIGFyZSBub3Qg bmFtZWQgb3IgbG9jYXRlZCBhcyBleHBlY3RlZCwgcGxlYXNlCi0gICAgICAgWzkxXWxldCB1cyBr bm93LiBJbiB0aGUgbWVhbnRpbWUsIHdvcmsgYXJvdW5kIGJ5IGluc3RhbGxpbmcKLSAgICAgICBz eW1saW5rcy4KLSAgICAgKiBJTVBPUlRBTlQ6IE1vZGVybiBMaW51eCBkaXN0cmlidXRpb25zIG1p Z2h0IGdpdmUgeW91IHRoZSBjaG9pY2UKLSAgICAgICBkdXJpbmcgaW5zdGFsbGF0aW9uIG9mIHdo ZXRoZXIgdG8gaW5zdGFsbCB0aGUgIm5jdXJzZXMgZGV2ZWxvcG1lbnQKLSAgICAgICBwYWNrYWdl IiAocGVyaGFwcyBjYWxsZWQgIm5jdXJzZXMtZGV2ZWwiKS4gSWYgeW91IGRpZCBub3QgaW5zdGFs bAotICAgICAgIGl0LCB5b3Ugd29uJ3QgYmUgYWJsZSB0byBidWlsZCBDLUtlcm1pdCB3aXRoIGN1 cnNlcyBzdXBwb3J0Ci0gICAgICAgaW5jbHVkZWQuIEluIHRoaXMgY2FzZSwgZWl0aGVyIGdvIGJh Y2sgYW5kIGluc3RhbGwgbmN1cnNlcywgb3IgZWxzZQotICAgICAgIGNob29zZSAob3IgY3JlYXRl KSBhIG5vbi1jdXJzZXMgbWFrZWZpbGUgdGFyZ2V0IGZvciB5b3VyIHBsYXRmb3JtLgotICAgICAg IFRvIGluc3RhbGwgdGhlIG5jdXJzZXMgZGV2ZWxvcGVycyB0b29scyBpbiBSZWQgSGF0IExpbnV4 LCBkbwotICAgICAgICJhcHQtZ2V0IGluc3RhbGwgbmN1cnNlcy1kZXZlbG9wZXIiIG9yIGlmIHlv dSBoYXZlIHRoZSBDRDoKLQotbW91bnQgcmVkaGF0IGNkcm9tCi1nb3RvIFJlZEhhdC9SUE1TCi1y cG0gLWl2aCBuY3Vyc2VzLWRldmVsKi5ycG0KLW9yIHRvIGhhdmUgdGhlIGV4YWN0IG5hbWUgbHMg bmN1cnNlKiBhbmQgbG9hZCBhcwotcnBtIC1pdmggZmlsZW5hbWUKLXRoZW4gbGVhdmUgdGhlIGNk cm9tIGFuZCB1bm1vdW50IGl0LgotCi0gICAgICogSW4gQUlYIHlvdSBtaWdodCBoYXZlIHRvIGdv IGJhY2sgYW5kIGluc3RhbGwgYW55IG9yIGFsbCBvZjoKLQotYm9zLmFkdC5iYXNlCi1ib3MuYWR0 LmluY2x1ZGUKLWJvcy5hZHQubGliCi1ib3MuYWR0LmxpYm0KLWJvcy5hZHQudXRpbHMKLQotICAg ICAgIGZyb20gdGhlIGZpcnN0IGluc3RhbGxhdGlvbiBDRC4KLQotICAgRGVwZW5kaW5nIG9uIHdo ZXJlIHlvdSBnb3QgaXQsIHRoZSBtYWtlZmlsZSBtaWdodCBuZWVkIHRvIGJlIHJlbmFtZWQKLSAg IGZyb20gY2t1a2VyLm1hayB0byBtYWtlZmlsZS4gRGlyZWN0aW9uczoKLQotICAgIGEuIFR5cGUg Im1ha2UgeHh4IiB3aGVyZSB4eHggaXMgdGhlIG5hbWUgb2YgdGhlIG1ha2VmaWxlIHRhcmdldCBt b3N0Ci0gICAgICAgYXBwcm9wcmlhdGUgdG8geW91ciBwbGF0Zm9ybSwgZS5nLiAibWFrZSBsaW51 eCIsICJtYWtlIGFpeDQzIiwgZXRjLgotICAgICAgIFJlYWQgdGhlIFs5Ml1jb21tZW50cyBhdCB0 aGUgdG9wIG9mIHRoZSBtYWtlZmlsZSBmb3IgYSBjb21wbGV0ZQotICAgICAgIGxpc3Qgb2YgYXZh aWxhYmxlIHRhcmdldHMgKGl0J3MgYSBsb25nIGxpc3QpLgotICAgIGIuIFRlc3QgdGhlIHJlc3Vs dGluZyAnd2VybWl0JyBmaWxlIChzZWUgWzkzXVNlY3Rpb24gNyBmb3IKLSAgICAgICBzdWdnZXN0 aW9ucykuIElmIGl0J3MgT0ssIHByb2NlZWQ7IG90aGVyd2lzZSBbOTRdbm90aWZ5IHVzLgotCi0g ICAgIE5PVEU6IHN0ZXBzIChjKSB0aHJvdWdoIChlKSBjYW4gYmUgYWNjb21wbGlzaGVkIHVzaW5n IHRoZQotICAgICBbOTVdbWFrZWZpbGUgJ2luc3RhbGwnIHRhcmdldCBhcyBkZXNjcmliZWQgaW4g Wzk2XVNlY3Rpb24gNS40LgotICAgIGMuIFJlbmFtZSB0aGUgJ3dlcm1pdCcgZmlsZSB0byAna2Vy bWl0JywgY29weSBpdCB0byB0aGUgZGVzaXJlZCBiaW5hcnkKLSAgICAgICBkaXJlY3RvcnkgKHN1 Y2ggYXMgL3Vzci9sb2NhbC9iaW4gb3IgL29wdC9zb21ldGhpbmcpLCBhbmQgaWYgaXQgaXMKLSAg ICAgICB0byBiZSB1c2VkIGZvciBkaWFsaW5nIG91dCwgZ2l2ZSBpdCB0aGUgc2FtZSBvd25lciwg Z3JvdXAsIGFuZAotICAgICAgIHBlcm1pc3Npb25zIGFzIHRoZSAnY3UnIHByb2dyYW0gKElNUE9S VEFOVDogcmVhZCBbOTddU2VjdGlvbnMgMTAKLSAgICAgICBhbmQgWzk4XTExIGZvciBkZXRhaWxz KS4KLSAgICBkLiBJbnN0YWxsIHRoZSBtYW4gcGFnZSwgY2t1a2VyLm5yLCB3aXRoIHlvdXIgb3Ro ZXIgbWFuIHBhZ2VzLgotICAgIGUuIEluc3RhbGwgdGhlIGFjY29tcGFueWluZyB0ZXh0IGZpbGVz IChzZWUgWzk5XVNlY3Rpb24gNSkuCi0gICAgZi4gSWYgeW91IHdhbnQgQy1LZXJtaXQgdG8gYWxz byBvZmZlciBhIFRlbG5ldCBjb21tYW5kLWxpbmUKLSAgICAgICBwZXJzb25hbGl0eSwgbWFrZSBh IHN5bWJvbGljIGxpbmsgYXMgZm9sbG93czoKLQotY2QgZGlyZWN0b3J5LXdoZXJlLWtlcm1pdC1i aW5hcnktaXMKLWxuIC1zIGtlcm1pdCB0ZWxuZXQKLQotICAgICAgIElmIHlvdSB3YW50IEMtS2Vy bWl0IHRvIGJlIHRoZSBkZWZhdWx0IFRlbG5ldCBjbGllbnQsIG1ha2Ugc3VyZSB0aGUKLSAgICAg ICBkaXJlY3RvcnkgaW4gd2hpY2ggeW91IGNyZWF0ZWQgdGhlIHN5bWxpbmsgaXMgaW4gdGhlIFBB VEggYWhlYWQgb2YKLSAgICAgICB0aGUgd2hlcmUgdGhlIHJlZ3VsYXIgVGVsbmV0IGNsaWVudCBp cy4KLSAgICBnLiBJZiB5b3Ugd2FudCBDLUtlcm1pdCB0byBhbHNvIG9mZmVyIGFuIEZUUCBjb21t YW5kLWxpbmUgcGVyc29uYWxpdHksCi0gICAgICAgbWFrZSBhIHN5bWxpbmsgY2FsbGVkICJmdHAi IGFzIGluIChmKS4KLSAgICBoLiBJZiB5b3Ugd2FudCBDLUtlcm1pdCB0byBhbHNvIG9mZmVyIGFu IEZUVFAgY29tbWFuZC1saW5lCi0gICAgICAgcGVyc29uYWxpdHksIG1ha2UgYSBzeW1saW5rIGNh bGxlZCAiaHR0cCIgYXMgaW4gKGYpLgotICAgIGkuIElmIHlvdSB3YW50IHRvIG9mZmVyIGFuIElu dGVybmV0IEtlcm1pdCBTZXJ2aWNlLCBmb2xsb3cgdGhlCi0gICAgICAgZGlyZWN0aW9ucyBpbiB0 aGUgWzEwMF1JS1NEIEFkbWluaXN0cmF0b3IncyBHdWlkZS4KLQotNC4wLiBTcGVjaWFsIENvbnNp ZGVyYXRpb25zIGZvciBDLUtlcm1pdCA4LjAtOS4wCi0KLSAgIFsgWzEwMV1Ub3AgXSBbIFsxMDJd Q29udGVudHMgXSBbIFsxMDNdTmV4dCBdCi0KLSAgIEFsc28gc2VlOiBbMTA0XUMtS2VybWl0IENv bmZpZ3VyYXRpb24gT3B0aW9ucwotCi0gICBTRUNUSU9OIENPTlRFTlRTCi0KLTQuMS4gWzEwNV1U aGUgVW5peCBNYWtlZmlsZQotNC4yLiBbMTA2XVRoZSBDLUtlcm1pdCBJbml0aWFsaXphdGlvbiBG aWxlCi00LjMuIFsxMDddVGhlIDIueCBCU0QgTWFrZWZpbGUKLTQuNC4gWzEwOF1UaGUgUGxhbiA5 IE1ha2VmaWxlCi00LjUuIFsxMDldTWFrZWZpbGUgRmFpbHVyZXMKLQotICAgKEFsc28gc2VlIHRo ZSBbMTEwXUNvbmZpZ3VyYXRpb25zIE9wdGlvbnMgZG9jdW1lbnQsIFsxMTFdU2VjdGlvbiA4KS4K LQotICAgTG90cyBvZiBuZXcgZmVhdHVyZXMgaGF2ZSBiZWVuIGFkZGVkIGluIHZlcnNpb25zIDcu MCBhbmQgOC4wIHRoYXQKLSAgIHJlcXVpcmUgYWNjZXNzIHRvIG5ldyBzeW1ib2xzLCBBUElzLCBs aWJyYXJpZXMsIGV0YywgYW5kIHRoaXMgd2lsbCBubwotICAgZG91YnQgY2F1c2UgcHJvYmxlbXMg aW4gY29tcGlsaW5nLCBsaW5raW5nLCBvciBleGVjdXRpb24gb24gcGxhdGZvcm1zCi0gICB3aGVy ZSA2LjAgYW5kIGVhcmxpZXIgYnVpbHQgd2l0aG91dCBpbmNpZGVudC4gVGhpcyBzZWN0aW9uIGNv bnRhaW5zCi0gICB3aGF0IHdlIGtub3cgYXMgb2YgdGhlIGRhdGUgb2YgdGhpcyBmaWxlLgotCi0g ICBUaGUgZmlyc3QgY2F0ZWdvcnkgY29uY2VybnMgdGhlIG5ldyBLZXJtaXQgU2VydmljZSBEYWVt b24gKElLU0Q7IHNlZQotICAgdGhlIFsxMTJdSUtTRCBBZG1pbmlzdHJhdG9yJ3MgR3VpZGUgZm9y IGRldGFpbHMpOgotCi0gICBUaGUgd3RtcCBGaWxlCi0gICAgICAgICAgV2hlbiBDLUtlcm1pdCBp cyBzdGFydGVkIGFzIGFuIElLU0QgKHVuZGVyIGluZXRkKSwgaXQgbWFrZXMKLSAgICAgICAgICBz eXNsb2cgYW5kIHd0bXAgZW50cmllcywgYW5kIGFsc28ga2VlcHMgaXRzIG93biBmdHBkLWxpa2Ug bG9nLgotICAgICAgICAgIFRoZSBjb2RlIGFzc3VtZXMgdGhlIHd0bXAgbG9nIGlzIC92YXIvbG9n L3d0bXAgb24gTGludXggYW5kCi0gICAgICAgICAgL3Vzci9hZG0vd3RtcCBlbHNld2hlcmUuIE5v IGRvdWJ0IHRoaXMgYXNzdW1wdGlvbiB3aWxsIG5lZWQKLSAgICAgICAgICBhZGp1c3RtZW50LiBV c2UgLURXVE1QRklMRT1wYXRoIHRvIG92ZXJyaWRlIGF0IGNvbXBpbGUgdGltZQotICAgICAgICAg ICh0aGVyZSBpcyBhbHNvIGEgcnVudGltZSBvdmVycmlkZSkuIFNlZSBbMTEzXWlrc2QuaHRtbCBm b3IKLSAgICAgICAgICBkZXRhaWxzLgotCi0gICBVVE1QLCB1dHNuYW1lKCksIGV0YwotICAgICAg ICAgIEMtS2VybWl0IDcuMCBnZXRzIGFzIG11Y2ggaW5mbyBhcyBpdCBjYW4gYWJvdXQgaXRzIGpv YiAtLSBtYWlubHkKLSAgICAgICAgICBmb3IgSUtTRCBsb2dnaW5nIC0tIGZyb20gdXRtcC4gQnV0 IG9mIGNvdXJzZSB1dG1wIGZvcm1hdHMgYW5kCi0gICAgICAgICAgZmllbGRzIGRpZmZlciwgYW5k IGZvciB0aGF0IG1hdHRlciwgdGhlcmUgY2FuIGJlIHR3byBkaWZmZXJlbnQKLSAgICAgICAgICBo ZWFkZXIgZmlsZXMsIDx1dG1wLmg+IGFuZCA8dXRtcHguaD4uIExvb2sgZm9yIEhBVkVVVE1QWCBh bmQKLSAgICAgICAgICBIQVZFVVRIT1NUIGluIFsxMTRdY2t1ZmlvLmMgYW5kIGxldCBtZSBrbm93 IG9mIGFueSBuZWVkZWQKLSAgICAgICAgICBhZGp1c3RtZW50cy4KLQotICAgUGFzc3dvcmQgbG9v a3VwCi0gICAgICAgICAgSUtTRCBuZWVkcyB0byBhdXRoZW50aWNhdGUgaW5jb21pbmcgdXNlcnMg YWdhaW5zdCB0aGUgcGFzc3dvcmQKLSAgICAgICAgICBsaXN0LiBJbiBzb21lIGNhc2VzLCB0aGlz IHJlcXVpcmVzIHRoZSBhZGRpdGlvbiBvZiAtbGNyeXB0IChlLmcuCi0gICAgICAgICAgaW4gVW5p eHdhcmUgMi54KS4gSW4gbW9zdCBvdGhlcnMsIHRoZSBjcnlwdCBmdW5jdGlvbnMgYXJlIGluIHRo ZQotICAgICAgICAgIHJlZ3VsYXIgQyBsaWJyYXJ5LiBJZiB5b3UgZ2V0ICJjcnlwdCIgYXMgYW4g dW5yZXNvbHZlZCBzeW1ib2wgYXQKLSAgICAgICAgICBsaW5rIHRpbWUsIGFkZCAtbGNyeXB0IHRv IExJQlMuIElmIHlvdXIgc2l0ZSBoYXMgbG9jYWwKLSAgICAgICAgICByZXBsYWNlbWVudCBsaWJy YXJpZXMgZm9yIGF1dGhlbnRpY2F0aW9uLCB5b3UgbWlnaHQgbmVlZCBhCi0gICAgICAgICAgc3Bl Y2lhbCBMSUJTIGNsYXVzZSBzdWNoIGFzICJMSUJTPS1ML3Vzci9sb2NhbC9saWIgLWxwd2VudCIu Ci0KLSAgICAgICAgICBUaGVzZSBkYXlzIG1vc3QgVW5peCBzeXN0ZW1zIHRha2UgYWR2YW50YWdl IG9mIHNoYWRvdyBwYXNzd29yZAotICAgICAgICAgIGZpbGVzIG9yIFBsdWdnYWJsZSBBdXRoZW50 aWNhdGlvbiBNb2R1bGVzIChQQU0pLiBJZiB5b3VyIHN5c3RlbQotICAgICAgICAgIHVzZXMgc2hh ZG93IHBhc3N3b3JkcyB5b3UgbXVzdCBhZGQgLURDS19TSEFET1cgdG8gdGhlIENGTEFHUwotICAg ICAgICAgIGxpc3QuIElmIHlvdXIgc3lzdGVtIHJlcXVpcmVzIFBBTSB5b3UgbXVzdCBhZGQgLURD S19QQU0gdG8gdGhlCi0gICAgICAgICAgQ0ZMQUdTIGFuZCAtbHBhbSAtbGRsIHRvIExJQlMuCi0K LSAgIGdldHVzZXJzaGVsbCgpCi0gICAgICAgICAgVGhpcyBpcyBjYWxsZWQgYnkgdGhlIElLU0Qg YXQgbG9naW4gdGltZSB0byBzZWUgaWYgYSB1c2VyIGhhcwotICAgICAgICAgIGJlZW4gInR1cm5l ZCBvZmYiLiBCdXQgbWFueSBVbml4IHBsYXRmb3JtcyBsYWNrIHRoaXMgZnVuY3Rpb24uCi0gICAg ICAgICAgSW4gdGhhdCBjYXNlLCB5b3Ugd2lsbCBnZXQgdW5yZXNvbHZlZCBzeW1ib2wgcmVwb3J0 cyBhdCBsaW5rCi0gICAgICAgICAgdGltZSBmb3IgX2dldHVzZXJzaGVsbCwgX2VuZHVzZXJzaGVs bDsgdG8gd29yayBhcm91bmQsIGFkZAotICAgICAgICAgIC1ETk9HRVRVU0VSU0hFTEwuCi0KLSAg IGluaXRncm91cHMoKQotICAgICAgICAgIFRoaXMgaXMgY2FsbGVkIGJ5IElLU0QgYWZ0ZXIgc3Vj Y2Vzc2Z1bCBhdXRoZW50aWNhdGlvbi4gQnV0IHNvbWUKLSAgICAgICAgICBwbGF0Zm9ybXMgZG8g bm90IGhhdmUgdGhpcyBmdW5jdGlvbiwgc28gb2J2aW91c2x5IGl0IGNhbid0IGJlCi0gICAgICAg ICAgY2FsbGVkIHRoZXJlLCBpbiB3aGljaCBjYXNlIGFkZCAtRE5PSU5JVEdST1VQUy4KLQotICAg c2V0cmV1aWQoKSwgc2V0cmV1aWQoKSwgc2V0cmVnaWQoKSBub3QgZm91bmQgb3IgImRlcHJlY2F0 ZWQiCi0gICAgICAgICAgRmluZCBvdXQgd2hhdCB5b3VyIFVuaXggdmFyaWV0eSB3YW50cyB5b3Ug dG8gdXNlIGluc3RlYWQsIGFuZAotICAgICAgICAgIG1ha2UgYXBwcm9wcmlhdGUgc3Vic3RpdHV0 aW9ucyBpbiByb3V0aW5lIHp2cGFzcygpLCBtb2R1bGUKLSAgICAgICAgICBbMTE1XWNrdWZpby5j LCBhbmQgWzExNl1sZXQgdXMga25vdy4KLQotICAgcHJpbnRmKCkKLSAgICAgICAgICBJS1NEIGlu c3RhbGxzIGEgcHJpbnRmKCkgc3Vic3RpdHV0ZSB0byBhbGxvdyByZWRpcmVjdGlvbiBvZgotICAg ICAgICAgIHByaW50Zi1saWtlIG91dHB1dCB0byB0aGUgY29ubmVjdGlvbi4gSG93ZXZlciwgdGhp cyBjYW4gY29uZmxpY3QKLSAgICAgICAgICB3aXRoIHNvbWUgY3Vyc2VzIGxpYnJhcmllcy4gSW4g dGhpcyBjYXNlLCBzZXBhcmF0ZSBiaW5hcmllcyBtdXN0Ci0gICAgICAgICAgYmUgYnVpbHQgZm9y IElLU0QgYW5kIG5vbi1JS1NEIHVzZS4KLQotICAgSWYgeW91IGVuY291bnRlciBkaWZmaWN1bHRp ZXMgd2l0aCBhbnkgb2YgdGhlIGFib3ZlLCBhbmQgeW91IGFyZSBub3QKLSAgIGludGVyZXN0ZWQg aW4gcnVubmluZyBDLUtlcm1pdCBhcyBhbiBJS1NELCB0aGVuIHNpbXBseSBhZGQgTk9JS1NEIHRv Ci0gICBDRkxBR1MgYW5kIHJlYnVpbGQuIEV4YW1wbGU6Ci0KLW1ha2Ugc2NvMjg2Ci0oZ2V0IGxv dHMgb2YgZXJyb3JzKQotbWFrZSBjbGVhbgotbWFrZSBzY28yODYgIktGTEFHUz0tRE5PSUtTRCIK LQotICAgU29tZSBub24tSUtTRCB0aGluZ3MgdG8gd2F0Y2ggb3V0IGZvcjoKLQotICAgUmV0dXJu IHR5cGUgb2YgbWFpbigpCi0gICAgICAgICAgVGhlIG1haW4oKSByb3V0aW5lIGlzIGluIFsxMTdd Y2tjbWFpLmMuIElmIHlvdSBnZXQgY29tcGxhaW50cwotICAgICAgICAgIGFib3V0ICJtYWluOiBy ZXR1cm4gdHlwZSBpcyBub3QgYmxhaCIsIGRlZmluZSBNQUlOVFlQRSBvbiB0aGUgQ0MKLSAgICAg ICAgICBjb21tYW5kIGxpbmUsIGUuZy46Ci0KLW1ha2UgeHh4ICJLRkxBR1M9LURNQUlOVFlQRT1i bGFoCi0KLSAgICAgICAgICAod2hlcmUgYmxhaCBpcyBpbnQsIGxvbmcsIG9yIHdoYXRldmVyKS4g SWYgdGhlIGNvbXBsYWludCBpcwotICAgICAgICAgICJBdHRlbXB0IHRvIHJldHVybiBhIHZhbHVl IGZyb20gYSBmdW5jdGlvbiBvZiB0eXBlIHZvaWQiIHRoZW4KLSAgICAgICAgICBhZGQgLURNQUlO SVNWT0lEOgotCi1tYWtlIHh4eCAiS0ZMQUdTPS1ETUFJTklTVk9JRD1ibGFoCi0KLSAgIEROUyBT ZXJ2aWNlIFJlY29yZHMKLSAgICAgICAgICBUaGlzIGZlYXR1cmUgYWxsb3dzIGEgcmVtb3RlIGhv c3QgdG8gcmVkaXJlY3QgQy1LZXJtaXQgdG8gdGhlCi0gICAgICAgICAgYXBwcm9wcmlhdGUgc29j a2V0IGZvciB0aGUgcmVxdWVzdGVkIHNlcnZpY2U7IGUuZy4gaWYgQy1LZXJtaXQKLSAgICAgICAg ICByZXF1ZXN0cyBzZXJ2aWNlICJ0ZWxuZXQiIGFuZCB0aGUgaG9zdCBvZmZlcnMgVGVsbmV0IHNl cnZpY2Ugb24KLSAgICAgICAgICBwb3J0IDk5OSByYXRoZXIgdGhhbiB0aGUgY3VzdG9tYXJ5IHBv cnQgMjMuIElmIHlvdSBnZXQKLSAgICAgICAgICBjb21waWxlLXRpbWUgY29tcGxhaW50cyBhYm91 dCBub3QgYmVpbmcgYWJsZSB0byBmaW5kIDxyZXNvbHYuaD4sCi0gICAgICAgICAgPG5ldGRiLmg+ LCBvciA8YXJwYS9uYW1lc2VyLmg+LCBhZGQgLUROT19ETlNfU1JWIHRvIENGTEFHUy4gSWYKLSAg ICAgICAgICB5b3UgZ2V0IGxpbmstdGltZSBjb21wbGFpbnRzIGFib3V0IHVucmVzb2x2ZWQgc3lt Ym9scyByZXNfc2VhcmNoCi0gICAgICAgICAgb3IgZG5fZXhwYW5kLCB0cnkgYWRkaW5nIC1scmVz b2x2ZSB0byBMSUJTLgotCi0gICBcdihpcGFkZHJlc3MpCi0gICAgICAgICAgSWYgImVjaG8gXHYo aXBhZGRyZXNzKSIgc2hvd3MgYW4gZW1wdHkgc3RyaW5nIHJhdGhlciB0aGFuIHlvdXIKLSAgICAg ICAgICBsb2NhbCBJUCBhZGRyZXNzLCBhZGQgLURDS0dITkxIT1NUIHRvIENGTEFHUyBhbmQgcmVi dWlsZC4KLQotICAgPHN5cy93YWl0Lmg+Ci0gICAgICAgICAgSWYgdGhpcyBmaWxlIGNhbid0IGJl IGZvdW5kIGF0IGNvbXBpbGUgdGltZSwgYWRkIC1ETk9SRURJUkVDVCB0bwotICAgICAgICAgIENG TEFHUy4gVGhpcyBkaXNhYmxlcyB0aGUgUkVESVJFQ1QgYW5kIFBJUEUgY29tbWFuZHMgYW5kCi0g ICAgICAgICAgYW55dGhpbmcgZWxzZSB0aGF0IG5lZWRzIHRoZSB3YWl0KCkgc3lzdGVtIHNlcnZp Y2UuCi0KLSAgIHN5c2xvZygpCi0gICAgICAgICAgQy1LZXJtaXQgY2FuIG5vdyB3cml0ZSBzeXNs b2cgcmVjb3Jkcy4gU29tZSBvbGRlciBwbGF0Zm9ybXMKLSAgICAgICAgICBtaWdodCBub3QgaGF2 ZSB0aGUgc3lzbG9nIGZhY2lsaXR5LiBJbiB0aGF0IGNhc2UsIGFkZAotICAgICAgICAgIC1ETk9T WVNMT0cuIE90aGVycyBtaWdodCBoYXZlIGl0LCBidXQgcmVxdWlyZSBhZGRpdGlvbiBvZgotICAg ICAgICAgIC1sc29ja2V0IHRvIExJQlMgKFNDTyBPU1I1IGlzIGFuIGV4YW1wbGUpLiBTZWUgWzEx OF1TZWN0aW9uIDE1LgotCi0gICBwdXRlbnYoKQotICAgICAgICAgIElmICJfcHV0ZW52IiBjb21l cyB1cCBhcyBhbiB1bmRlZmluZWQgc3ltYm9sLCBhZGQgLUROT1BVVEVOViB0bwotICAgICAgICAg IENGTEFHUyBhbmQgcmVidWlsZC4KLQotICAgIlBhc3NpbmcgYXJnMSBvZiAndGltZScgZnJvbSBp bmNvbXBhdGlibGUgcG9pbnRlciIKLSAgICAgICAgICBUaGlzIGlzIGEgbWVzcy4gU2VlIHRoZSBt YXNzIG9mICNpZmRlZnMgaW4gdGhlIGFwcHJvcHJpYXRlCi0gICAgICAgICAgbW9kdWxlLCBbMTE5 XWNrdXRpby5jIG9yIFsxMjBdY2t1ZmlvLmMuCi0KLSAgIGdldHRpbWVvZmRheSgpCi0gICAgICAg ICAgV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cy4gT24gbW9zdCBwbGF0Zm9ybXMsIGdldHRpbWVv ZmRheSgpCi0gICAgICAgICAgdGFrZXMgdHdvIGFyZ3VtZW50cywgYnV0IG9uIGEgaGFuZGZ1bCBv ZiBvdGhlcnMgKGUuZy4gTW90b3JvbGEKLSAgICAgICAgICBTeXN0ZW0gVi84OCBWNCwgU05JIFJl bGlhbnQgVU5JWCA1LjQzLCBldGMpIGl0IHRha2VzIG9uZS4gSWYKLSAgICAgICAgICB5b3VyIHZl cnNpb24gb2YgZ2V0dGltZW9mZGF5KCkgaXMgYmVpbmcgY2FsbGVkIHdpdGggdHdvIGFyZ3MgYnV0 Ci0gICAgICAgICAgd2FudHMgb25lLCBhZGQgLURHVE9ET05FQVJHLgotCi0gICAiQXNzaWdubWVu dCBtYWtlcyBwb2ludGVyIGZyb20gaW50ZWdlciB3aXRob3V0IGEgY2FzdCIKLSAgICAgICAgICBU aGlzIHdhcm5pbmcgbWlnaHQgYXBwZWFyIGluIFsxMjFdY2t1dGlvLmMgb3IgWzEyMl1ja3VmaW8u Yy4gKG9yCi0gICAgICAgICAgZWxzZXdoZXJlKSwgYW5kIHVzdWFsbHkgY2FuIGJlIHRyYWNlZCB0 byB0aGUgdXNlIG9mIGEgc3lzdGVtIG9yCi0gICAgICAgICAgbGlicmFyeSBmdW5jdGlvbiB0aGF0 IHJldHVybnMgYSBwb2ludGVyIGJ1dCB0aGF0IGlzIG5vdCBkZWNsYXJlZAotICAgICAgICAgIGlu IHRoZSBzeXN0ZW0gaGVhZGVyIGZpbGVzIGV2ZW4gdGhvdWdoIGl0IHNob3VsZCBiZS4gU2V2ZXJh bAotICAgICAgICAgIGZ1bmN0aW9ucyBhcmUgY29tbW9ubHkgYXNzb2NpYXRlZCB3aXRoIHRoaXMg ZXJyb3I6Ci0KLSAgICAgICAgICArIGdldGN3ZCgpOiBBZGQgLUREQ0xHRVRDV0QgdG8gQ0ZMQUdT IGFuZCByZWJ1aWxkLgotICAgICAgICAgICsgcG9wZW4oKSA6IEFkZCAtRERDTFBPUEVOIHRvIENG TEFHUyBhbmQgcmVidWlsZC4KLSAgICAgICAgICArIGZkb3BlbigpOiBBZGQgLUREQ0xGRE9QRU4g dG8gQ0ZMQUdTIGFuZCByZWJ1aWxkLgotCi0gICAiT3BlcmFuZHMgb2YgPSBoYXZlIGluY29tcGF0 aWJsZSB0eXBlcyIKLSAgICJJbmNvbXBhdGlibGUgdHlwZXMgaW4gYXNzaWdubWVudCIKLSAgICAg ICAgICBJZiB0aGlzIGNvbWVzIGZyb20gWzEyM11ja2NuZXQuYyBhbmQgY29tZXMgZnJvbSBhIHN0 YXRlbWVudAotICAgICAgICAgIGludm9sdmluZyBpbmV0X2FkZHIoKSwgdHJ5IGFkZGluZyAtRElO QUREUlggdG8gQ0ZMQUdTLiBJZiB0aGF0Ci0gICAgICAgICAgZG9lc24ndCBoZWxwLCB0aGVuIHRy eSBhZGRpbmcgLUROT01ISE9TVC4KLQotICAgQ29tcGxhaW50cyBhYm91dCBhcmdzIHRvIGdldC9z ZXRzb2Nrb3B0KCksIGdldHBlZXJuYW1lKCksIGdldHNvY2tuYW1lKCkKLSAgICAgICAgICBUaGVz ZSBhcmUgYWxsIGluIFsxMjRdY2tjbmV0LmMuIERpZmZlcmVudCBwbGF0Zm9ybXMgYW5kIE9TJ3Mg YW5kCi0gICAgICAgICAgdmVyc2lvbnMgb2YgdGhlIHNhbWUgT1MgY2hhbmdlIHRoaXMgYWxsIHRo ZSB0aW1lOiBpbnQsIHNpemVfdCwKLSAgICAgICAgICB1bnNpZ25lZCBsb25nLCBldGMuIEFsbCB0 aGUgYWZmZWN0ZWQgdmFyaWFibGVzIGFyZSBkZWNsYXJlZAotICAgICAgICAgIGFjY29yZGluZyB0 byAjaWZkZWZzIHdpdGhpbiBja2NuZXQuYywgc28gZmluZCB0aGUgZGVjbGFyYXRpb25zCi0gICAg ICAgICAgYW5kIGFkanVzdCB0aGUgI2lmZGVmcyBhY2NvcmRpbmdseS4KLQotICAgc2l6ZV90Ci0g ICAgICAgICAgSW4gY2FzZSBvZiBjb21wbGFpbnRzIGFib3V0ICJ1bmtub3duIHR5cGUgc2l6ZV90 IiwgYWRkCi0gICAgICAgICAgLURTSVpFX1Q9aW50IChvciBvdGhlciBhcHByb3ByaWF0ZSB0eXBl KSB0byBDRkxBR1MuCi0KLSAgICd0eicgdW5kZWZpbmVkCi0gICBVc2Ugb2YgdW5kZWZpbmVkIGVu dW0vc3RydWN0L3VuaW9uICd0aW1lem9uZScKLSAgICAgICAgICBMZWZ0IG9mICd0dl9zZWMnIHNw ZWNpZmllcyB1bmRlZmluZWQgc3RydWN0L3VuaW9uICd0aW1ldmFsJyBBbmQKLSAgICAgICAgICBz aW1pbGFyIGNvbXBsYWludHMgaW4gWzEyNV1ja3V0aW8uYzogQWRkIC1ETk9HRlRJTUVSIGFuZC9v cgotICAgICAgICAgIC1ETk9USU1FVkFMLgotCi0gICBTeW1saW5rcwotICAgICAgICAgIFRoZSBu ZXcgYnVpbHQtaW4gRElSRUNUT1JZIGNvbW1hbmQgc2hvdWxkIHNob3cgc3ltbGlua3MgbGlrZSAi bHMKLSAgICAgICAgICAtbCIgZG9lcy4gSWYgaXQgZG9lcyBub3QsIGNoZWNrIHRvIHNlZSBpZiB5 b3VyIHBsYXRmb3JtIGhhcyB0aGUKLSAgICAgICAgICBsc3RhdCgpIGFuZCByZWFkbGluaygpIGZ1 bmN0aW9ucy4gSWYgc28sIGFkZCAtRFVTRV9MU1RBVCBhbmQKLSAgICAgICAgICAtRENLU1lNTElO SyB0byBDRkxBR1MgYW5kIHJlYnVpbGQuIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBsc3RhdCgpCi0g ICAgICAgICAgaXMgdW5yZXNvbHZlZCBhdCBsaW5rIHRpbWUsIGFkZCAtRE5PTFNUQVQgdG8gQ0ZM QUdTLiBJZgotICAgICAgICAgIHJlYWRsaW5rKCkgaXMgYWxzbyB1bnJlc29sdmVkLCBhZGQgLURO T1NZTUxJTksuCi0KLSAgIHJlYWxwYXRoKCkKLSAgICAgICAgICBMaW5rLXRpbWUgY29tcGxhaW5z IGFib3V0IHJlYWxwYXRoKCkgLS0gZmluZCB0aGUgbGlicmFyeSBpbgotICAgICAgICAgIHdoaWNo IGl0IHJlc2lkZXMgYW5kIGFkZCBpdCB0byBMSUJTIChleGFtcGxlIGZvciBVbml4d2FyZSA3LjE6 Ci0gICAgICAgICAgIi1sY3VkazcwIikgb3IgYWRkIC1ETk9SRUFMUEFUSCB0byBDRkxBR1MgYW5k IHJlYnVpbGQuIElmIGJ1aWx0Ci0gICAgICAgICAgd2l0aCByZWFscGF0aCgpIGJ1dCBkZWJ1ZyBs b2cgZmlsZSBpcyB0cnVuY2F0ZWQgb3IgbWFuZ2xlZCwKLSAgICAgICAgICBkaXR0byAoc29tZSBy ZWFscGF0aCgpIGltcGxlbWVudGF0aW9ucyBiZWhhdmUgZGlmZmVyZW50bHkgZnJvbQotICAgICAg ICAgIG90aGVycykuIElmIGJ1aWx0IHdpdGggcmVhbHBhdGgoKSBhbmQgc2VlbWluZ2x5IHJhbmRv bSBjb3JlCi0gICAgICAgICAgZHVtcHMgb2NjdXIgZHVyaW5nIGZpbGUgcGF0aCByZXNvbHV0aW9u LCBkaXR0by4KLQotICAgRmFpbHVyZSB0byBsb2NhdGUgaGVhZGVyIGZpbGUgPHRlcm0uaD4KLSAg ICAgICAgICBVc3VhbGx5IGhhcHBlbnMgb24gTGludXggc3lzdGVtcyB0aGF0IGhhdmUgdGhlIEMg Y29tcGlsZXIKLSAgICAgICAgICBpbnN0YWxsZWQsIGJ1dCBub3QgdGhlIG5jdXJzZXMgcGFja2Fn ZSAoc2VlIGNvbW1lbnRzIGFib3V0Ci0gICAgICAgICAgc2VsZWN0aXZlIGluc3RhbGxzIGFib3Zl KS4gR28gYmFjayBhbmQgaW5zdGFsbCBuY3Vyc2VzLCBvciB1c2UKLSAgICAgICAgICAibWFrZSBs aW51eG5jIiAoTGludXggTm8gQ3Vyc2VzKS4KLQotICAgIkNhbid0IGZpbmQgc2hhcmVkIGxpYnJh cnkgbGliYy5zby4yLjEiCi0gICAiQ2FuJ3QgZmluZCBzaGFyZWQgbGlicmFyeSBsaWJuY3Vyc2Vz LnNvLjMuMCIsIGV0Yy4uLgotICAgICAgICAgIFlvdSBhcmUgdHJ5aW5nIHRvIHJ1biBhIGJpbmFy eSB0aGF0IHdhcyBidWlsdCBvbiBhIGNvbXB1dGVyIHRoYXQKLSAgICAgICAgICBoYXMgZGlmZmVy ZW50IGxpYnJhcnkgdmVyc2lvbnMgdGhhbiB5b3VyIGNvbXB1dGVyLCBhbmQgeW91cgotICAgICAg ICAgIGNvbXB1dGVyJ3MgbG9hZGVyIGlzIHBpY2t5IGFib3V0IGxpYnJhcnkgdmVyc2lvbiBudW1i ZXJzLgotICAgICAgICAgIFJlYnVpbGQgZnJvbSBzb3VyY2Ugb24geW91ciBjb21wdXRlci4KLQot ICAgVGltZSAoc3RydWN0IHRtKSByZWxhdGVkIGRpZmZpY3VsdGllczoKLSAgICAgICAgICBFcnJv cnMgbGlrZSB0aGUgZm9sbG93aW5nOgotCi0iY2t1dGlvLmMiLCBsaW5lIDExOTk0OiBpbmNvbXBs ZXRlIHN0cnVjdC91bmlvbi9lbnVtIHRtOiBfdG0KLSJja3V0aW8uYyIsIGxpbmUgMTE5OTU6IGVy cm9yOiBjYW5ub3QgZGVyZWZlcmVuY2Ugbm9uLXBvaW50ZXIgdHlwZQotImNrdXRpby5jIiwgbGlu ZSAxMTk5NTogZXJyb3I6IGFzc2lnbm1lbnQgdHlwZSBtaXNtYXRjaAotImNrdXRpby5jIiwgbGlu ZSAxMTk5Nzogd2FybmluZzogdXNpbmcgb3V0IG9mIHNjb3BlIGRlY2xhcmF0aW9uOiBsb2NhbHRp bWUKLSJja3V0aW8uYyIsIGxpbmUgMTE5OTc6IGVycm9yOiB1bmtub3duIG9wZXJhbmQgc2l6ZTog b3AgIj0iCi0iY2t1dGlvLmMiLCBsaW5lIDExOTk3OiBlcnJvcjogYXNzaWdubWVudCB0eXBlIG1p c21hdGNoCi0iY2t1dGlvLmMiLCBsaW5lIDExOTk4OiBlcnJvcjogdW5kZWZpbmVkIHN0cnVjdC91 bmlvbiBtZW1iZXI6IHRtX3llYXIKLSJja3V0aW8uYyIsIGxpbmUgMTIwMDA6IGVycm9yOiB1bmRl ZmluZWQgc3RydWN0L3VuaW9uIG1lbWJlcjogdG1fbW9uCi0iY2t1dGlvLmMiLCBsaW5lIDEyMDAx OiBlcnJvcjogdW5kZWZpbmVkIHN0cnVjdC91bmlvbiBtZW1iZXI6IHRtX21kYXkKLSJja3V0aW8u YyIsIGxpbmUgMTIwMDI6IGVycm9yOiB1bmRlZmluZWQgc3RydWN0L3VuaW9uIG1lbWJlcjogdG1f aG91cgotImNrdXRpby5jIiwgbGluZSAxMjAwMzogZXJyb3I6IHVuZGVmaW5lZCBzdHJ1Y3QvdW5p b24gbWVtYmVyOiB0bV9taW4KLSJja3V0aW8uYyIsIGxpbmUgMTIwMDQ6IGVycm9yOiB1bmRlZmlu ZWQgc3RydWN0L3VuaW9uIG1lbWJlcjogdG1fc2VjCi0KLSAgICAgICAgICBhcmUgZHVlIHRvIGZh aWx1cmUgdG8gaW5jbHVkZSB0aGUgYXBwcm9wcmlhdGUgdGltZS5oIGhlYWRlcgotICAgICAgICAg IGZpbGVzLiBVbml4IHBsYXRmb3JtcyBnZW5lcmFsbHkgaGF2ZSBvbmUgb3IgbW9yZSBvZiB0aGUK LSAgICAgICAgICBmb2xsb3dpbmc6IDx0aW1lLmg+LCA8c3lzL3RpbWUuaD4sIGFuZCA8c3lzL3Rp bWViLmg+LiBBbnkKLSAgICAgICAgICBjb21iaW5hdGlvbiBvZiB0aGVzZSBtaWdodCBiZSByZXF1 aXJlZC4gRGVmYXVsdHMgYXJlIHNldCB1cCBmb3IKLSAgICAgICAgICBlYWNoIG1ha2VmaWxlIHRh cmdldC4gVGhlIGRlZmF1bHRzIGNhbiBiZSBjb3JyZWN0ZWQgb24gdGhlIENDCi0gICAgICAgICAg Y29tbWFuZCBsaW5lIGJ5IGFkZGluZyB0aGUgYXBwcm9wcmlhdGUgZGVmaW5pdGlvbiBmcm9tIHRo ZQotICAgICAgICAgIGZvbGxvd2luZyBsaXN0IHRvIENGTEFHUzoKLQotLURUSU1FSCAgICAgICAg IEluY2x1ZGUgPHRpbWUuaD4KLS1ETk9USU1FSCAgICAgICBEb24ndCBpbmNsdWRlIDx0aW1lLmg+ Ci0tRFNZU1RJTUVIICAgICAgSW5jbHVkZSA8c3lzL3RpbWUuaD4KLS1ETk9TWVNUSU1FSCAgICBE b24ndCBpbmNsdWRlIDxzeXMvdGltZS5oPgotLURTWVNUSU1FQkggICAgIEluY2x1ZGUgPHN5cy90 aW1lYi5oPgotLUROT1NZU1RJTUVCSCAgIERvbid0IGluY2x1ZGUgPHN5cy90aW1lYi5oPgotCi0g ICAgICAgICAgTm90ZSB0aGF0IDxzeXMvdGltZWIuaD4gaXMgcmVsYXRpdmVseSBzY2FyY2UgaW4g dGhlIFN5c3RlbSBWIGFuZAotICAgICAgICAgIFBPU0lYIGVudmlyb25tZW50czsgdGhlIG9ubHkg cGxhdGZvcm0gb2YgcmVjZW50IHZpbnRhZ2Ugd2hlcmUgaXQKLSAgICAgICAgICB3YXMvaXMgdXNl ZCBpcyBPU0YvMSBhbmQgaXRzIGRlcml2YXRpdmVzIChEaWdpdGFsIFVuaXggYW5kIFRydTY0Ci0g ICAgICAgICAgVW5peCkuCi0KLSAgIFN0cnVjdCB0aW1ldmFsIGFuZC9vciB0aW1lem9uZSBub3Qg ZGVjbGFyZWQ6Ci0gICAgICAgICAgSW4gc29tZSBjYXNlcywgbWVyZWx5IGluY2x1ZGluZyB0aGUg YXBwcm9wcmlhdGUgdGltZS5oIGhlYWRlcgotICAgICAgICAgIGZpbGVzIGlzIHN0aWxsIG5vdCBl bm91Z2guIFBPU0lYLjEgZG9lcyBub3QgZGVmaW5lIHRoZSB0aW1ldmFsCi0gICAgICAgICAgc3Ry dWN0LCBhbmQgc28gdGhlIGl0ZW1zIHdlIG5lZWQgZnJvbSB0aGUgaGVhZGVyIGFyZSBwcm90ZWN0 ZWQKLSAgICAgICAgICBhZ2FpbnN0IHVzIGJ5ICNpZm5kZWYgX1BPU0lYX1NPVVJDRSBvciBzb21l c3VjaC4gSW4gdGhpcyBjYXNlLAotICAgICAgICAgIHdlIGhhdmUgdG8gZGVjbGFyZSB0aGUgdGlt ZXZhbCAoYW5kIHRpbWV6b25lKSBzdHJ1Y3RzIG91cnNlbHZlcy4KLSAgICAgICAgICBUbyBmb3Jj ZSB0aGlzLCBpbmNsdWRlIC1ERENMVElNRVZBTCBpbiBDRkxBR1MuCi0KLSAgIFdhcm5pbmdzIGFi b3V0IGRuX2V4cGFuZCgpIEFyZ3VtZW50ICM0Ci0gICAgICAgICAgV0FSTklORzogYXJndW1lbnQg aXMgaW5jb21wYXRpYmxlIHdpdGggcHJvdG90eXAuIEl0J3MgdGhlIG9sZAotICAgICAgICAgIGNo YXIgdmVyc3VzIHVuc2lnbmVkIGNoYXIgc3R1cGlkaXR5IGFnYWluLiBUcnkgdG8gZmluZCBhCi0g ICAgICAgICAgY29tcGlsZXIgc3dpdGNoIGxpa2UgR0NDJ3MgIi1mdW5zaWduZWQtY2hhciIuIEZh aWxpbmcgdGhhdCwgYWRkCi0gICAgICAgICAgLURDS1FVRVJZVFlQRT14eHggdG8gQ0ZMQUdTLCB3 aGVyZSB4eHggaXMgd2hhdGV2ZXIgJ21hbgotICAgICAgICAgIGRuX2V4cGFuZCcgdGVsbHMgeW91 IHRoZSB0eXBlIG9mIHRoZSA0dGggYXJndW1lbnQgc2hvdWxkIGJlCi0gICAgICAgICAgKHByZXN1 bWFibHkgZWl0aGVyIGNoYXIgb3IgdW5zaWduZWQgY2hhcjsgaW4gdGhlIGxhdHRlciBjYXNlIHVz ZQotICAgICAgICAgIENIQVIgdG8gYXZvaWQgY29uZnVzaW9uIGNhdXNlZCBieSBtdWx0aXBsZSB3 b3Jkcy4KLQotICAgU3dpdGNoIFRhYmxlIE92ZXJmbG93IChpbiBbMTI2XWNrY3VuaS5jKQotICAg ICAgICAgIEFkZCAtRE5PVU5JQ09ERSB0byBDRkxBR1MuCi0KLSAgIENvbXBpbGUtdGltZSB3YXJu aW5ncyBhYm91dCBja19vdXQoKSBvciB0Z2V0c3RyKCkgb3IgdHB1dHMoKToKLSAgICAgICAgICBF YXN5IHNvbHV0aW9uOiBBZGQgLUROT1RFUk1DQVAgdG8gQ0ZMQUdTLiBCdXQgdGhlbiB5b3UgbG9z ZSB0aGUKLSAgICAgICAgICBTQ1JFRU4gZnVuY3Rpb24uIFJlYWwgc29sdXRpb246IFRyeSBhbGwg ZGlmZmVyZW50IGNvbWJpbmF0aW9ucwotICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgQ0ZMQUdT OgotCi0tRFRQVVRTQVJHVFlQRT1jaGFyICAgIC1EVFBVVFNGTlRZUEU9aW50Ci0tRFRQVVRTQVJH VFlQRT1pbnQgICAgIC1EVFBVVFNGTlRZUEU9dm9pZAotCi0gICAgICAgICAgVW50aWwgdGhlIHdh cm5pbmdzIGdvIGF3YXksIGV4Y2VwdCBtYXliZSAiY2tfb3V0YzogcmV0dXJuIHdpdGggYQotICAg ICAgICAgIHZhbHVlIGluIGEgZnVuY3Rpb24gcmV0dXJuaW5nIHZvaWQiLCBhbmQgaW4gdGhhdCBj YXNlIGFsc28gYWRkCi0gICAgICAgICAgLURUUFVUU0lTVk9JRC4KLQotICAgIlBhc3NpbmcgYXJn IDEgb2YgdG8gdHB1dHMoKSBtYWtlcyBwb2ludGVyIGZyb20gaW50ZWdlciB3aXRob3V0IGEKLSAg ICAgICAgICBjYXN0IjoKLSAgICAgICAgICBBZGQgLURUUFVUU0FSRzFDT05TVCB0byBDRkxBR1Mu Ci0KLSAgICJVbmRlZmluZWQgc3ltYm9sOiBkdXAyIgotICAgICAgICAgIEFkZCAtRE5PWkVYRUMg dG8gQ0ZMQUdTLgotCi0gICAiaGVhZGVyIGZpbGUgJ3Rlcm1jYXAuaCcgbm90IGZvdW5kIgotICAg ICAgICAgIEFkZCAtRE5PSFRFUk1DQVAgdG8gQ0ZMQUdTLgotCi0gICBPdGhlciBkaWZmaWN1bHRp ZXMgYXJlIGdlbmVyYWxseSBvZiB0aGUgIndoZXJlIGlzIGN1cnNlcy5oIGFuZCB3aGF0IGlzCi0g ICBpdCBjYWxsZWQgdGhpcyB3ZWVrPyIgdmFyaWV0eSAobW9zdCBlYXNpbHkgc29sdmVkIGJ5IG1h a2luZyBzeW1saW5rcyBpbgotICAgdGhlIGluY2x1ZGUgYW5kIGxpYiBkaXJlY3RvcmllcyksIG9y IG92ZXJ6ZWFsb3VzIGNvbXBsYWludHMgcmVnYXJkaW5nCi0gICB0eXBlIG1pc21hdGNoZXMgaW4g ZnVuY3Rpb24gY2FsbHMgYmVjYXVzZSBvZiB0aGUgdG90YWxseSBuZWVkbGVzcyBhbmQKLSAgIHNp bGx5IHNpZ25lZCB2ZXJzdXMgdW5zaWduZWQgY2hhciBjb25mbGljdCAoKiksIGV0Yy4gSW4gYW55 IGNhc2UsCi0gICBwbGVhc2Ugc2VuZCBhbnkgY29tcGlsYXRpb24gb3IgbGlua2luZyB3YXJuaW5n cyBvciBlcnJvcnMgdG8gdGhlCi0gICBhdXRob3IsIHByZWZlcmFibHkgYWxvbmcgd2l0aCBmaXhl cy4KLQotICAgICAqIEMtS2VybWl0IGRvZXMgbm90IHVzZSB0aGUgc2lnbmVkIHByb3BlcnR5IG9m IGNoYXJzIGF0IGFsbCBhbnl3aGVyZSwKLSAgICAgICBldmVyLiBTbyBpZiBhbGwgY2hhcnMgYW5k IGNoYXIgKidzIGNhbiBiZSBtYWRlIHVuc2lnbmVkIGF0IGNvbXBpbGUKLSAgICAgICB0aW1lLCBh cyB0aGV5IGNhbiBpbiBnY2Mgd2l0aCAiLWZ1bnNpZ25lZC1jaGFyIiwgdGhleSBzaG91bGQgYmUu Ci0KLSAgIElNUE9SVEFOVDogSWYgeW91IGZpbmQgYW55IG9mIHRoZXNlIGhpbnRzIG5lY2Vzc2Fy eSBmb3IgYSBwYXJ0aWN1bGFyCi0gICBtYWtlIHRhcmdldCAob3IgeW91IGhpdCB1cG9uIG90aGVy cyBub3QgbGlzdGVkIGhlcmUpLCBQTEVBU0UgU0VORCBBCi0gICBSRVBPUlQgVE86Ci0KLVsxMjdd a2VybWl0LXN1cHBvcnRAY29sdW1iaWEuZWR1Ci0KLTQuMS4gVGhlIFVuaXggTWFrZWZpbGUKLQot ICAgWyBbMTI4XVRvcCBdIFsgWzEyOV1Db250ZW50cyBdIFsgWzEzMF1TZWN0aW9uIENvbnRlbnRz IF0gWyBbMTMxXU5leHQgXQotICAgWyBbMTMyXVByZXZpb3VzIF0KLQotICAgSWYgeW91ciBkaXN0 cmlidXRpb24gZG9lcyBub3QgY29udGFpbiBhIGZpbGUgd2l0aCB0aGUgbmFtZSAibWFrZWZpbGUi Ci0gICBvciAiTWFrZWZpbGUiLCB0aGVuIHJlbmFtZSB0aGUgZmlsZSBjYWxsZWQgY2t1a2VyLm1h ayB0byBtYWtlZmlsZToKLQotbXYgY2t1a2VyLm1hayBtYWtlZmlsZQotCi0gICBUaGVuIHR5cGUg Im1ha2UgeHh4Iiwgd2hlcmUgeHh4IGlzIHRoZSBwbGF0Zm9ybSB5b3Ugd2FudCB0byBidWlsZAot ICAgQy1LZXJtaXQgZm9yLiBUaGVzZSBhcmUgbGlzdGVkIGluIHRoZSBbMTMzXWNvbW1lbnRzIGF0 IHRoZSB0b3Agb2YgdGhlCi0gICBtYWtlZmlsZS4gRm9yIGV4YW1wbGUsIHRvIGJ1aWxkIEMtS2Vy bWl0IGZvciBMaW51eCwgdHlwZToKLQotbWFrZSBsaW51eAotCi0gICBIZXJlIGFyZSBzb21lIHR5 cGljYWwgZXhhbXBsZXM6Ci0KLSAgICAgVGFyZ2V0ICAgIERlc2NyaXB0aW9uCi0gICAgIGxpbnV4 ICAgICBMaW51eCwgYW55IHZlcnNpb24gb24gYW55IGhhcmR3YXJlIHBsYXRmb3JtCi0gICAgIG9w ZW5ic2QgICBPcGVuQlNELCBhbnkgdmVyc2lvbiBvbiBhbnkgaGFyZHdhcmUgcGxhdGZvcm0KLSAg ICAgYWl4NDMgICAgIEFJWCA0LjMKLSAgICAgYWl4NDNnICAgIEFJWCA0LjMsIGJ1aWx0IHdpdGgg Z2NjCi0gICAgIHNvbGFyaXM5ICBTb2xhcmlzIDkKLSAgICAgc29sYXJpczlnIFNvbGFyaXMgOSBi dWlsdCB3aXRoIGdjYwotICAgICBocHV4MTEwMCAgSFAtVVggMTEtcG9pbnQtYW55dGhpbmcKLQot ICAgVGhlIG1ha2VmaWxlIGlzIHF1aXRlIGxvbmcsIGFuZCBhdCBsZWFzdCB0d28gdmVyc2lvbnMg b2YgVW5peCwgU0NPCi0gICBYZW5peC8yODYgYW5kIDIueCBCU0QsIGNhbm5vdCBjb3BlIHdpdGgg aXRzIGxlbmd0aC4gQW4gYXR0ZW1wdCB0byAibWFrZQotICAgc2NvMjg2IiBnaXZlcyB0aGUgbWVz c2FnZSAiTWFrZTogQ2Fubm90IGFsbG9jIG1lbSBmb3IgZW52Li4gU3RvcCIuCi0gICBTb2x1dGlv bjogZWRpdCBhd2F5IHNvbWUgb3IgYWxsIG9mIHRoZSBub25yZWxldmFudCBtYXRlcmlhbCBmcm9t IHRoZQotICAgbWFrZWZpbGUuIChBIHNlcGFyYXRlIHZlcnNpb24gb2YgdGhlIG1ha2VmaWxlIGlz IHByb3ZpZGVkIGZvciBCU0QgMi54OgotICAgY2t1YnMyLm1hayBidXQgQy1LZXJtaXQgOC4wIGNh bid0IGJlIGJ1aWx0IGZvciBCU0QgMi54IC0tIGl0IGhhcyBzaW1wbHkKLSAgIGdyb3duIHRvbyBs YXJnZS4pCi0KLSAgIFNvbWUgbWFrZSBwcm9ncmFtcyByZXBvcnRlZGx5IGNhbm5vdCBoYW5kbGUg Y29udGludWVkIGxpbmVzIChsaW5lcwotICAgZW5kaW5nIGluIGJhY2tzbGFzaCAoXCkpLiBJZiB5 b3UgaGF2ZSBhIHByb2JsZW0gd2l0aCB0aGUgbWFrZWZpbGUsIHRyeQotICAgZWRpdGluZyB0aGUg bWFrZWZpbGUgdG8gam9pbiB0aGUgY29udGludWVkIGxpbmVzIChyZW1vdmUgdGhlCi0gICBiYWNr c2xhc2hlcyBhbmQgdGhlIGZvbGxvd2luZyBsaW5lZmVlZCkuCi0KLSAgIE90aGVyIG1ha2VmaWxl IHRyb3VibGVzIG1heSBvY2N1ciBiZWNhdXNlIHRhYnMgaW4gdGhlIG1ha2VmaWxlIGhhdmUKLSAg IHNvbWVob3cgYmVlbiBjb252ZXJ0ZWQgdG8gc3BhY2VzLiBTcGFjZXMgYW5kIHRhYnMgYXJlIGRp c3RpbmN0IGluIFVuaXgKLSAgIG1ha2VmaWxlcy4KLQotICAgU2ltaWxhcmx5LCBjYXJyaWFnZSBy ZXR1cm5zIG1pZ2h0IGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgZW5kIG9mIGVhY2gKLSAgIGxpbmUs IHdoaWNoIGFsc28gcHJvdmVzIGNvbmZ1c2luZyB0byBtb3N0IFVuaXggdmVyc2lvbnMgb2YgbWFr ZS4KLQotICAgQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBjb21tZW50cyBhYm91dCB5b3VyIHBh cnRpY3VsYXIgdmVyc2lvbiBpbiBpdHMKLSAgIG1ha2VmaWxlIHRhcmdldCBpdHNlbGYuIEluIGEg dGV4dCBlZGl0b3Igc3VjaCBhcyBFTUFDUyBvciBWSSwgc2VhcmNoCi0gICBmb3IgdGhlIG1ha2Ug ZW50cnkgbmFtZSBmb2xsb3dlZCBieSBhIGNvbG9uLCBlLmcuICJsaW51eDoiIChpZiB5b3UKLSAg IHJlYWxseSBhcmUgYnVpbGRpbmcgQy1LZXJtaXQgZm9yIExpbnV4LCBkbyB0aGlzIG5vdykuCi0K LSAgIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgY29tbWVudHMgYWJvdXQgeW91ciBwYXJ0aWN1 bGFyIHZlcnNpb24gaW4gdGhlCi0gICBbMTM0XWNrdWJ3ci50eHQgZmlsZSAoWzEzNV1DTElDSyBI RVJFIGZvciB0aGUgV2ViIHZlcnNpb24pLgotCi0gICBJZiB5b3UgaGF2ZSB0cm91YmxlIHdpdGgg YnVpbGRpbmcgWzEzNl1ja3dhcnQuYywgb3IgcnVubmluZyB0aGUKLSAgIHJlc3VsdGluZyB3YXJ0 IHByZXByb2Nlc3NvciBwcm9ncmFtIG9uIFsxMzddY2tjcHJvLnc6Ci0KLSAgICAxLiBKdXN0ICJ0 b3VjaCIgdGhlIFsxMzhdY2tjcHJvLmMgZmlsZSB0aGF0IGNvbWVzIGluIHRoZSBkaXN0cmlidXRp b24KLSAgICAgICBhbmQgdGhlbiBnaXZlIHRoZSAibWFrZSIgY29tbWFuZCBhZ2Fpbiwgb3I6Ci0g ICAgMi4gQ29tcGlsZSBja3dhcnQuYyAiYnkgaGFuZCI6IGNjIC1vIHdhcnQgY2t3YXJ0LmMsIG9y OgotICAgIDMuIFRyeSB2YXJpb3VzIG90aGVyIHRyaWNrcy4gRS5nLiBvbmUgTGludXggdXNlciBy ZXBvcnRlZCB0aGF0IHRoYXQKLSAgICAgICBhZGRpbmcgdGhlICJzdGF0aWMiIHN3aXRjaCB0byB0 aGUgcnVsZSBmb3IgYnVpbGRpbmcgd2FydCBmaXhlZAotICAgICAgIGV2ZXJ5dGhpbmc6Ci0KLXdh cnQ6IGNrd2FydC4kKEVYVCkKLSAgICAgICAgJChDQykgLXN0YXRpYyAtbyB3YXJ0IGNrd2FydC4k KEVYVCkgJChMSUJTKQotCi0gICBJZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIGEgY29tcGlsZS10 aW1lIG9wdGlvbiB0byB0cmVhdCBBTEwgY2hhcnMgKGFuZAotICAgY2hhciAqJ3MsIGV0YykgYXMg dW5zaWduZWQsIGJ5IGFsbCBtZWFucyB1c2UgaXQgLS0gYW5kIHNlbmQgbWUgZW1haWwgdG8KLSAg IGxldCBtZSBrbm93IHdoYXQgaXQgaXMgKEkgYWxyZWFkeSBrbm93IGFib3V0IGdjYyAtZnVuc2ln bmVkLWNoYXIpLgotCi0gICBUbyBhZGQgY29tcGlsYXRpb24gb3B0aW9ucyAod2hpY2ggYXJlIGV4 cGxhaW5lZCBsYXRlciBpbiB0aGlzIGRvY3VtZW50KQotICAgdG8geW91ciBtYWtlZmlsZSB0YXJn ZXQgd2l0aG91dCBlZGl0aW5nIHRoZSBtYWtlZmlsZSwgaW5jbHVkZQotICAgIktGTEFHUz0uLi4i IG9uIHRoZSBtYWtlIGNvbW1hbmQgbGluZSwgZm9yIGV4YW1wbGU6Ci0KLW1ha2UgbGludXggS0ZM QUdTPS1ETk9ERUJVRwotbWFrZSBic2QgIktGTEFHUz0tREtBTkpJIC1ETk9ERUJVRyAtRE5PVExP RyAtRERZTkFNSUMgLVVUQ1BTT0NLRVQiCi0KLSAgIE11bHRpcGxlIG9wdGlvbnMgbXVzdCBiZSBz ZXBhcmF0ZWQgYnkgc3BhY2VzLiBRdW90ZXMgYXJlIG5lY2Vzc2FyeSBpZgotICAgdGhlIEtGTEFH Uz0gY2xhdXNlIGluY2x1ZGVzIHNwYWNlcy4gVGhlIEtGTEFHUyBhcmUgYWRkZWQgdG8gdGhlIGVu ZCBvZgotICAgdGhlIENGTEFHUyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBzZWxlY3RlZCBtYWtl ZmlsZSB0YXJnZXQuIEZvcgotICAgZXhhbXBsZSwgdGhlICJic2QiIGVudHJ5IGluY2x1ZGVzIC1E QlNENCAtRFRDUFNPQ0tFVCwgc28gdGhlIHNlY29uZAotICAgZXhhbXBsZSBhYm92ZSBjb21waWxl cyBLZXJtaXQgd2l0aCB0aGUgZm9sbG93aW5nIG9wdGlvbnM6Ci0KLS1EQlNENCAtRFRDUFNPQ0tF VCAtREtBTkpJIC1ETk9ERUJVRyAtRE5PVExPRyAtRERZTkFNSUMgLVVUQ1BTT0NLRVQKLQotICAg KE5vdGljZSBob3cgIi1VVENQU09DS0VUIiBpcyB1c2VkIHRvIG5lZ2F0ZSB0aGUgZWZmZWN0IG9m IHRoZQotICAgIi1EVENQU09DS0VUIiBvcHRpb24gdGhhdCBpcyBpbmNsdWRlZCBpbiB0aGUgbWFr ZWZpbGUgdGFyZ2V0LikKLQotICAgV0FSTklORzogQmUgY2FyZWZ1bCB3aXRoIEtGTEFHUy4gSWYg eW91IGJ1aWxkIEMtS2VybWl0LCBjaGFuZ2Ugc29tZQotICAgZmlsZXMsIGFuZCB0aGVuIHJ1biBt YWtlIGFnYWluIHVzaW5nIHRoZSBzYW1lIG1ha2UgZW50cnkgYnV0IHNwZWNpZnlpbmcKLSAgIGRp ZmZlcmVudCBLRkxBR1MgdGhhbiBsYXN0IHRpbWUsIG1ha2Ugd29uJ3QgZGV0ZWN0IGl0IGFuZCB5 b3UgY291bGQKLSAgIGVhc2lseSB3aW5kIHVwIHdpdGggaW5jb25zaXN0ZW50IG9iamVjdCBtb2R1 bGVzLCBlLmcuIHNvbWUgb2YgdGhlbQotICAgYnVpbHQgd2l0aCBhIGNlcnRhaW4gb3B0aW9uLCBv dGhlcnMgbm90LiBXaGVuIGluIGRvdWJ0LCAibWFrZSBjbGVhbiIKLSAgIGZpcnN0IHRvIG1ha2Ug c3VyZSBhbGwgeW91ciBvYmplY3QgZmlsZXMgYXJlIGNvbnNpc3RlbnQuIFNpbWlsYXJseSwgaWYK LSAgIHlvdSBjaGFuZ2UgQ0ZMQUdTLCBMSUJTLCBvciBhbnkgb3RoZXIgaXRlbXMgaW4gdGhlIG1h a2VmaWxlLCBvciB5b3UKLSAgIHJlYnVpbGQgdXNpbmcgYSBkaWZmZXJlbnQgbWFrZWZpbGUgdGFy Z2V0LCAibWFrZSBjbGVhbiIgZmlyc3QuCi0KLSAgIElmIHlvdSBjcmVhdGUgYSBuZXcgbWFrZWZp bGUgdGFyZ2V0LCB1c2Ugc3RhdGljIGxpbmtpbmcgaWYgcG9zc2libGUuCi0gICBFdmVuIHRob3Vn aCB0aGlzIG1ha2VzIHlvdXIgQy1LZXJtaXQgYmluYXJ5IGJpZ2dlciwgdGhlIHJlc3VsdGluZwot ICAgYmluYXJ5IHdpbGwgYmUgbW9yZSBwb3J0YWJsZS4gRHluYW1pY2FsbHkgbGlua2VkIGJpbmFy aWVzIHRlbmQgdG8gcnVuCi0gICBvbmx5IG9uIHRoZSBleGFjdCBjb25maWd1cmF0aW9uIGFuZCB2 ZXJzaW9uIHdoZXJlIHRoZXkgd2VyZSBidWlsdDsgb24KLSAgIG90aGVycywgaW52b2NhdGlvbiB0 ZW5kcyB0byBmYWlsIHdpdGggYSBtZXNzYWdlIGxpa2U6Ci0KLUNhbid0IGZpbmQgc2hhcmVkIGxp YnJhcnkgImxpYmMuc28uMi4xIgotCi00LjIuIFRoZSBDLUtlcm1pdCBJbml0aWFsaXphdGlvbiBG aWxlCi0KLSAgIFsgWzEzOV1Ub3AgXSBbIFsxNDBdQ29udGVudHMgXSBbIFsxNDFdU2VjdGlvbiBD b250ZW50cyBdIFsgWzE0Ml1OZXh0IF0KLSAgIFsgWzE0M11QcmV2aW91cyBdCi0KLSAgIChUaGlz IHNlY3Rpb24gaXMgb2Jzb2xldGUuKSBSZWFkIFsxNDRdU2VjdGlvbiA1IGFib3V0IHRoZQotICAg aW5pdGlhbGl6YXRpb24gZmlsZS4KLQotNC4zLiBUaGUgMi54IEJTRCBNYWtlZmlsZQotCi0gICBb IFsxNDVdVG9wIF0gWyBbMTQ2XUNvbnRlbnRzIF0gWyBbMTQ3XVNlY3Rpb24gQ29udGVudHMgXSBb IFsxNDhdTmV4dCBdCi0gICBbIFsxNDldUHJldmlvdXMgXQotCi0gICAgIFRoaXMgc2VjdGlvbiBp cyBvYnNvbGV0ZS4gQy1LZXJtaXQgNi4wIHdhcyB0aGUgbGFzdCByZWxlYXNlIHRoYXQKLSAgICAg Y291bGQgYmUgYnVpbHQgb24gUERQLTExIGJhc2VkIEJTRCB2ZXJzaW9ucy4KLQotNC40LiBUaGUg UGxhbiA5IE1ha2VmaWxlCi0KLSAgIFsgWzE1MF1Ub3AgXSBbIFsxNTFdQ29udGVudHMgXSBbIFsx NTJdU2VjdGlvbiBDb250ZW50cyBdIFsgWzE1M11OZXh0IF0KLSAgIFsgWzE1NF1QcmV2aW91cyBd Ci0KLSAgIFVzZSB0aGUgc2VwYXJhdGUgbWFrZWZpbGUgWzE1NV1ja3BrZXIubWsuIE5PVEU6IFRo ZSBQbGFuIDkgdmVyc2lvbiBvZgotICAgQy1LZXJtaXQgOC4wIGhhcyBub3QgeWV0IGJlZW4gYnVp bHQuIFRoZXJlIHNob3VsZCBiZSBubyBpbXBlZGltZW50IHRvCi0gICBidWlsZGluZyBpdC4gSG93 ZXZlciwgZXZlbiB3aGVuIGJ1aWx0IHN1Y2Nlc3NmdWxseSwgY2VydGFpbiBrZXkKLSAgIGZlYXR1 cmVzIGFyZSBtaXNzaW5nLCBub3RhYmx5IFRDUC9JUCBuZXR3b3JraW5nLgotCi00LjUuIE1ha2Vm aWxlIEZhaWx1cmVzCi0KLSAgIFsgWzE1Nl1Ub3AgXSBbIFsxNTddQ29udGVudHMgXSBbIFsxNThd U2VjdGlvbiBDb250ZW50cyBdIFsKLSAgIFsxNTldUHJldmlvdXMgXQotCi0gICBGaXJzdCwgYmUg c3VyZSB0aGUgc291cmNlIGZpbGVzIGFyZSBzdG9yZWQgb24geW91ciBjdXJyZW50IGRpc2sgYW5k Ci0gICBkaXJlY3Rvcnkgd2l0aCB0aGUgcmlnaHQgbmFtZXMgKGluIGxvd2VyY2FzZSkuIFNlY29u ZCwgbWFrZSBzdXJlIHRoYXQKLSAgIHRoZSBtYWtlZmlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFp biBhbnkgbGluZXMgd2l0aCBsZWFkaW5nIHNwYWNlczoKLSAgIGluZGVudGVkIGxpbmVzIG11c3Qg YWxsIHN0YXJ0IHdpdGggaG9yaXpvbnRhbCBUQUIsIGFuZCBubyBzcGFjZXMuCi0KLSAgIFRoZW4g bWFrZSBzdXJlIHRoYXQgeW91ciBVbml4IFBBVEggaXMgZGVmaW5lZCB0byBmaW5kIHRoZSBhcHBy b3ByaWF0ZQotICAgY29tcGlsZXIgZm9yIHlvdXIgbWFrZWZpbGUgdGFyZ2V0LiBGb3IgZXhhbXBs ZSwgb24gU3VuT1Mgc3lzdGVtcywgIm1ha2UKLSAgIHN1bm9zNDEiIGJ1aWxkcyBDLUtlcm1pdCBm b3IgdGhlIEJTRCBlbnZpcm9ubWVudCwgYW5kIGFzc3VtZXMgdGhhdAotICAgL3Vzci91Y2IvY2Mg d2lsbCBiZSB1c2VkIGZvciBjb21waWxhdGlvbiBhbmQgbGlua2luZy4gSWYgeW91ciBQQVRIIGhh cwotICAgL3Vzci81YmluIGFoZWFkIG9mIC91c3IvdWNiLCB5b3UgY2FuIGhhdmUgcHJvYmxlbXMg YXQgY29tcGlsZSBvciBsaW5rCi0gICB0aW1lIChhIGNvbW1vbmx5IHJlcG9ydGVkIHN5bXB0b20g aXMgdGhlIGluYWJpbGl0eSB0byBmaW5kICJmdGltZSIKLSAgIGR1cmluZyBsaW5raW5nKS4gRml4 IHN1Y2ggcHJvYmxlbXMgYnkgcmVkZWZpbmluZyB5b3VyIFVuaXggUEFUSCwgb3IgYnkKLSAgIHNw ZWNpZnlpbmcgdGhlIGFwcHJvcHJpYXRlICJjYyIgaW4gQ0M9IGFuZCBDQzI9IHN0YXRlbWVudHMg aW4geW91cgotICAgbWFrZWZpbGUgdGFyZ2V0LgotCi0gICBEdXJpbmcgZWRpdHMgMTY2LTE2Nywg Y29uc2lkZXJhYmxlIGVmZm9ydCB3ZW50IGludG8gbWFraW5nIEMtS2VybWl0Ci0gICBjb21waWxh YmxlIGJ5IEFOU0kgQyBjb21waWxlcnMuIFRoaXMgaW5jbHVkZXMgcHJvdG90eXBpbmcgYWxsIG9m Ci0gICBDLUtlcm1pdCdzIGZ1bmN0aW9ucywgYW5kIGluY2x1ZGluZyB0aGUgQU5TSS1kZWZpbmVk IHN5c3RlbSBoZWFkZXIKLSAgIGZpbGVzIGZvciBzeXN0ZW0gYW5kIGxpYnJhcnkgZnVuY3Rpb25z LCBhcyBkZWZpbmVkIGluIEsmUiwgc2Vjb25kCi0gICBlZGl0aW9uOiA8c3RyaW5nLmg+LCA8c3Rk bGliLmg+LCA8dW5pc3RkLmg+IChleGNlcHQgaW4gTmVYVFNURVAgdGhpcyBpcwotICAgPGxpYmMu aD4pLCBhbmQgPHN5cy9zdGR0eXBlcy5oPi4gSWYgeW91IGdldCB3YXJuaW5ncyBhYm91dCBhbnkg b2YgdGhlc2UKLSAgIGhlYWRlciBmaWxlcyBub3QgYmVpbmcgZm91bmQsIG9yIGFib3V0IGFyZ3Vt ZW50IG1pc21hdGNoZXMgaW52b2x2aW5nCi0gICBwaWRfdCwgdWlkX3QsIG9yIGdpZF90LCBsb29r IGluIGNrY2RlYi5oIGFuZCBtYWtlIGFtZW5kbWVudHMuIEMtS2VybWl0Ci0gICBhc3N1bWVzIGl0 IGlzIGJlaW5nIGNvbXBpbGVkIGJ5IGFuIEFOU0ktY29tcGxpYW50IEMgY29tcGlsZXIgaWYKLSAg IF9fU1REQ19fIGlzIGRlZmluZWQsIG5vcm1hbGx5IGRlZmluZWQgYnkgdGhlIGNvbXBpbGVyIGl0 c2VsZi4gWW91IGNhbgotICAgZm9yY2UgQU5TSSBjb21waWxhdGlvbiB3aXRob3V0IGRlZmluaW5n IF9fU1REQ19fICh3aGljaCBzb21lIGNvbXBpbGVycwotICAgd29uJ3QgbGV0IHlvdSBkZWZpbmUp IGJ5IGluY2x1ZGluZyAtRENLX0FOU0lDIG9uIHRoZSBjYyBjb21tYW5kIGxpbmUuCi0KLSAgIE9u IHRoZSBvdGhlciBoYW5kLCBpZiB5b3VyIGNvbXBpbGVyIGRlZmluZXMgX19TVERDX18gYnV0IHN0 aWxsCi0gICBjb21wbGFpbnMgYWJvdXQgdGhlIHN5bnRheCBvZiBLZXJtaXQncyBmdW5jdGlvbiBw cm90b3R5cGVzLCB5b3UgY2FuCi0gICBkaXNhYmxlIHRoZSBBTlNJLXN0eWxlIGZ1bmN0aW9uIHBy b3RvdHlwaW5nIGJ5IGluY2x1ZGluZyAtRE5PQU5TSSBvbgotICAgdGhlIGNvbW1hbmQgbGluZS4K LQotICAgRm9yIFNDTyBPcGVuU2VydmVyLCBVTklYLCBPRFQsIGFuZCBYRU5JWCBjb21waWxhdGlv bnMsIGJlIHN1cmUgdG8gcGljawotICAgdGhlIG1vc3QgYXBwcm9wcmlhdGUgWzE2MF1tYWtlZmls ZSB0YXJnZXQsIGFuZCBiZSBzdXJlIHlvdSBoYXZlCi0gICBpbnN0YWxsZWQgYW4gU0NPIGRldmVs b3BtZW50IHN5c3RlbSB0aGF0IGlzIGtleWVkIHRvIHlvdXIgZXhhY3QgU0NPCi0gICBvcGVyYXRp bmcgc3lzdGVtIHJlbGVhc2UsIGRvd24gdG8gdGhlIG1pbm9yIHZlcnNpb24gKGxpa2UgMi4zLjEp LgotCi0gICBBbHNvIG5vdGUgdGhhdCBTQ08gZGlzdHJpYnV0ZXMgc29tZSBvZiBpdHMgbGlicmFy aWVzIGluIGVuY3J5cHRlZCBmb3JtLAotICAgYW5kIHRoZXkgbXVzdCBiZSBkZWNyeXB0ZWQgYmVm b3JlIEMtS2VybWl0IGNhbiBiZSBsaW5rZWQgd2l0aCB0aGVtLiBJZgotICAgbm90LCB5b3UgbWln aHQgc2VlIGEgbWVzc2FnZSBsaWtlOgotCi1sZDogZmlsZSAvdXNyL2xpYi9saWJzb2NrZXQuYSBp cyBvZiB1bmtub3duIHR5cGU6IG1hZ2ljIG51bWJlciA9IDYzNjUKLQotICAgVG8gZGVjcnlwdCwg eW91IG11c3Qgc3VwcGx5IGEga2V5IChwYXNzd29yZCkgdGhhdCBjYW1lIHdpdGggeW91cgotICAg bGljZW5zZS4gQ2FsbCBTQ08gZm9yIGZ1cnRoZXIgaW5mby4KLQotICAgSWYgeW91ciBjb21waWxl ciB1c2VzIHNvbWV0aGluZyBvdGhlciB0aGFuIGludCBmb3IgdGhlIHBpZCAocHJvY2VzcyBpZCkK LSAgIGRhdGEgdHlwZSwgcHV0IC1EUElEX1Q9cGlkX3Qgb3Igd2hhdGV2ZXIgaW4geW91ciBDRkxB R1MuCi0KLSAgIElmIHlvdSBnZXQgY29tcGxhaW50cyBhYm91dCB1bmtub3duIGRhdGEgdHlwZXMg dWlkX3QgYW5kIGdpZF90LCBwdXQKLSAgIC1EVUlEX1Q9eHh4IC1ER0lEX1Q9eXl5IGluIHlvdXIg Q0ZMQUdTLCB3aGVyZSB4eHggYW5kIHl5eSBhcmUgdGhlCi0gICBhcHByb3ByaWF0ZSB0eXBlcy4K LQotICAgSWYgeW91ciBjb21waWxhdGlvbiBmYWlscyBiZWNhdXNlIG9mIGNvbmZsaWN0aW5nIG9y IGR1cGxpY2F0ZQotICAgZGVjbGFyYXRpb25zIGZvciBzeXNfZXJybGlzdCwgYWRkIC1EVVNFX1NU UkVSUk9SIG9yIC1ETkRTWVNFUlJMSVNUIHRvCi0gICBDRkxBR1MuCi0KLSAgIElmIHlvdXIgY29t cGlsYXRpb24gZGllcyBiZWNhdXNlIGdldHB3bmFtKCkgaXMgYmVpbmcgcmVkZWNsYXJlZCAob3IK LSAgIGJlY2F1c2Ugb2YgImNvbmZsaWN0aW5nIHR5cGVzIGZvciBnZXR3cG5hbSIpLCBhZGQgLURO REdQV05BTSB0byB5b3VyCi0gICBDRkxBR1MuIElmIHRoYXQgZG9lc24ndCB3b3JrLCB0aGVuIGFk ZCAtRERDR1BXTkFNIHRvIHlvdXIgQ0ZMQUdTIChzZWUKLSAgIGNrdWZpby5jIGFyb3VuZCBsaW5l IDQ0MCkuCi0KLSAgIElmIHRoZSBjb21waWxlciBjb21wbGFpbnMgYWJvdXQgdGhlIGRlY2xhcmF0 aW9uIG9mIGdldHB3bmFtKCkgZHVyaW5nIGFuCi0gICBBTlNJIEMgY29tcGlsYXRpb24sIHJlbW92 ZSB0aGUgZGVjbGFyYXRpb24gZnJvbSBja3VmaW8uYyBvciBjaGFuZ2UgdGhlCi0gICBhcmd1bWVu dCBpbiB0aGUgcHJvdG90eXBlIGZyb20gKGNoYXIgKikgdG8gKGNvbnN0IGNoYXIgKikuCi0KLSAg IElmIHlvdSBnZXQgY29tcGxhaW50cyB0aGF0IGdldHB3dWlkKCkgaXMgYmVpbmcgY2FsbGVkIHdp dGggYW4gaW1wcm9wZXIKLSAgIHR5cGUsIHB1dCAtRFBXSURfVD14eCBpbiB5b3VyIENGTEFHUy4K LQotICAgSWYgeW91IGdldCBjb21waWxlLXRpbWUgd2FybmluZ3MgdGhhdCB0X2Jya2Mgb3IgdF9l b2ZjICh0Y2hhcnMKLSAgIHN0cnVjdHVyZSBtZW1iZXJzLCB1c2VkIGluIEJTRC1iYXNlZCB2ZXJz aW9ucykgYXJlIHVuZGVmaW5lZCwgb3IKLSAgIHN0cnVjdHVyZS1tZW1iZXItIHJlbGF0ZWQgd2Fy bmluZ3MgdGhhdCBtaWdodCBiZSB0cmFjZWQgdG8gdGhpcyBmYWN0LAotICAgYWRkIC1ETk9CUktD IHRvIENGTEFHUy4KLQotICAgSWYgeW91IGdldCBhIGxpbmtlciBtZXNzYWdlIHRvIHRoZSBlZmZl Y3QgdGhhdCBfc2V0cmV1aWQgb3IgX3NldHJlZ2lkCi0gICBpcyBub3QgZGVmaW5lZCwgYWRkIC1E Tk9TRVRSRVUgdG8gQ0ZMQUdTLCBvciBhZGQgLURDS1RZUF9IPWJsYWggdG8KLSAgIENGTEFHUyB0 byBtYWtlIEMtS2VybWl0IHJlYWQgdGhlIHJpZ2h0IDx0eXBlcy5oPi1raW5kLW9mLWZpbGUgdG8g cGljawotICAgdXAgdGhlc2UgZGVmaW5pdGlvbnMuCi0KLSAgIElmIHlvdSBnZXQgYSBtZXNzYWdl IHRoYXQgX3BvcGVuIGlzIHVuZGVmaW5lZCwgYWRkIC1ETk9QT1BFTiB0byBDRkxBR1MuCi0KLSAg IElmIHlvdSBnZXQgYSBjb21wbGFpbnQgYXQgY29tcGlsZSB0aW1lIGFib3V0IGFuIGlsbGVnYWwg cG9pbnRlci1pbnRlZ2VyCi0gICBjb21iaW5hdGlvbiBpbiBja3VmaW8uYyBpbnZvbHZpbmcgcG9w ZW4oKSwgb3IgYXQgbGluayB0aW1lIHRoYXQgX3BvcGVuCi0gICBpcyBhbiB1bmRlZmluZWQgc3lt Ym9sLCBhZGQgdGhlIGRlY2xhcmF0aW9uICJGSUxFICpwb3BlbigpOyIgdG8gdGhlCi0gICBmdW5j dGlvbiB6eGNtZCgpIGluIGNrdWZpby5jICh0aGlzIGRlY2xhcmF0aW9uIGlzIHN1cHBvc2VkIHRv IGJlIGluCi0gICA8c3RkaW8uaD4pLiBJZiBtYWtpbmcgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaGVs cCwgdGhlbiBhcHBhcmVudGx5IHlvdXIKLSAgIFVuaXggZG9lcyBub3QgaGF2ZSB0aGUgcG9wZW4o KSBmdW5jdGlvbiwgc28geW91IHNob3VsZCBhZGQgLUROT1BPUEVOIHRvCi0gICB5b3VyIG1ha2Ug ZW50cnksIGluIHdoaWNoIGNhc2UgY2VydGFpbiBmdW5jdGlvbnMgaW52b2x2aW5nICJmaWxlIiBp L28KLSAgIHRvIHRoZSBzdGFuZGFyZCBpbnB1dCBhbmQgb3V0cHV0IG9mIHN1YnByb2Nlc3NlcyB3 aWxsIG5vdCBiZSBhdmFpbGFibGUuCi0KLSAgIElmIHlvdXIgbGlua2VyIGNvbXBsYWlucyB0aGF0 IF9nZXRjd2QgaXMgdW5kZWZpbmVkLCB5b3UgY2FuIGFkZCBhCi0gICBnZXRjd2QoKSBmdW5jdGlv biB0byBja3VmaW8uYywgb3IgYWRkIGl0IHRvIHlvdXIgbGliYy5hIGxpYnJhcnkgdXNpbmcKLSAg IGFyOgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLQotY2hhciAqCi1nZXRjd2QoYnVmLHNpemUpIGNo YXIgKmJ1ZjsgaW50IHNpemU7IHsKLSNpZm5kZWYgTk9QT1BFTgotI2lmZGVmIERDTFBPUEVOCi0g ICAgRklMRSAqcG9wZW4oKTsKLSNlbmRpZgotICAgIEZJTEUgKnBmcDsKLQotICAgIGlmICghYnVm KSByZXR1cm4oTlVMTCk7Ci0gICAgaWYgKCEocGZwID0gcG9wZW4oInB3ZCIsInIiKSkpIHJldHVy bihOVUxMKTsKLSAgICBmZ2V0cyhidWYsc2l6ZS0yLHBmcCk7Ci0gICAgcGNsb3NlKHBmcCk7Ci0g ICAgYnVmW3N0cmxlbihidWYpLTFdID0gJ1wwJzsKLSAgICByZXR1cm4oKGNoYXIgKilidWYpOwot I2Vsc2UKLSAgICBidWZbMF0gPSAnXDAnOwotICAgIHJldHVybihOVUxMKTsKLSNlbmRpZiAvKiBO T1BPUEVOICovCi19Ci0KLSNpZmRlZiBOT1BPUEVOCi1GSUxFICpwb3BlbihzLHQpIGNoYXIgKnMs KnQ7IHsKLSAgICByZXR1cm4oTlVMTCk7Ci19Ci0jZW5kaWYgLyogTk9QT1BFTiAqLwotCi0gICBJ ZiB5b3UgZ2V0IGNvbXBsYWludHMgYWJvdXQgTlBST0MgaGF2aW5nIGFuIGludmFsaWQgdmFsdWUs IGFkZCBhIHZhbGlkCi0gICBkZWZpbml0aW9uIGZvciBpdCAoZGVwZW5kcyBvbiB5b3VyIHN5c3Rl bSksIGFzIGluIHRoZSBjcmF5IGVudHJ5LgotCi0gICBJZiB5b3UgZ2V0IHNvbWUgc3ltYm9sIHRo YXQncyBtdWx0aXBseSBkZWZpbmVkLCBpdCBwcm9iYWJseSBtZWFucyB0aGF0Ci0gICBhIHZhcmlh YmxlIG5hbWUgdXNlZCBieSBLZXJtaXQgaXMgYWxzbyB1c2VkIGluIG9uZSBvZiB5b3VyIHN5c3Rl bQotICAgbGlicmFyaWVzIHRoYXQgS2VybWl0IGlzIGxpbmtlZCB3aXRoLiBGb3IgZXhhbXBsZSwg dW5kZXIgUEMvSVggc29tZQotICAgbGlicmFyeSBoYXMgYSB2YXJpYWJsZSBvciBmdW5jdGlvbiBj YWxsZWQgImRhdGEiLCBhbmQgdGhlIHZhcmlhYmxlCi0gICAiZGF0YSIgaXMgYWxzbyB1c2VkIGV4 dGVuc2l2ZWx5IGJ5IEtlcm1pdC4gUmF0aGVyIHRoYW4gZWRpdCB0aGUgS2VybWl0Ci0gICBzb3Vy Y2UgZmlsZXMsIGp1c3QgcHV0IGEgLUQgaW4gdGhlIG1ha2UgZW50cnkgQ0ZMQUdTIHRvIGNoYW5n ZSB0aGUKLSAgIEtlcm1pdCBzeW1ib2wgYXQgY29tcGlsZSB0aW1lLiBJbiB0aGlzIGV4YW1wbGUs IGl0IG1pZ2h0IGJlCi0gICAtRGRhdGE9eGRhdGEuCi0KLSAgIFNvbWUgc3ltYm9sIGlzIGRlZmlu ZWQgaW4geW91ciBzeXN0ZW0ncyBoZWFkZXIgZmlsZXMsIGJ1dCBpdCBwcm9kdWNlcwotICAgY29u ZmxpY3RzIHdpdGgsIG9yIHVuZGVzaXJlZCByZXN1bHRzIGZyb20sIEtlcm1pdC4gVHJ5IHVuZGVm aW5pbmcgdGhlCi0gICBzeW1ib2wgaW4gdGhlIG1ha2VmaWxlIHRhcmdldCdzIENGTEFHUywgZm9y IGV4YW1wbGUgLVVGSU9OUkVBRC4KLQotICAgU29tZSB3ZWxsLWtub3duIHN5bWJvbCBpcyBtaXNz aW5nIGZyb20geW91ciBzeXN0ZW0gaGVhZGVyIGZpbGVzLiBUcnkKLSAgIGRlZmluaW5nIGluIHRo ZSBtYWtlZmlsZSB0YXJnZXQncyBDRkxBR1MsIGZvciBleGFtcGxlIC1ERlJFQUQ9MS4KLQotICAg WW91IGdldCBtYW55IHdhcm5pbmdzIGFib3V0IHBvaW50ZXIgbWlzbWF0Y2hlcy4gVGhpcyBwcm9i YWJseSBtZWFucwotICAgdGhhdCBLZXJtaXQgaXMgYXNzdW1pbmcgYW4gaW50IHR5cGUgZm9yIHNp Z25hbCgpIHdoZW4gaXQgc2hvdWxkIGJlCi0gICB2b2lkLCBvciB2aWNlLXZlcnNhLiBUcnkgYWRk aW5nIC1EU0lHX0kgKGZvciBpbnRlZ2VyIHNpZ25hbCgpKSBvcgotICAgLURTSUdfViAoZm9yIHZv aWQpIHRvIENGTEFHUy4gT3IganVzdCBpbmNsdWRlIEtGTEFHUz0tRFNJR19WIChvcgotICAgd2hh dGV2ZXIpIGluIHlvdXIgIm1ha2UiIGNvbW1hbmQsIGZvciBleGFtcGxlOgotCi1tYWtlIGJzZCBL RkxBR1M9LURTSUdfVgotCi0gICBZb3UgZ2V0IG1hbnkgbWVzc2FnZXMgYWJvdXQgdmFyaWFibGVz IHRoYXQgYXJlIGRlY2xhcmVkIGFuZC9vciBzZXQgYnV0Ci0gICBuZXZlciB1c2VkLiBJdCBpcyBk aWZmaWN1bHQgdG8gYXZvaWQgdGhlc2UgYmVjYXVzZSBvZiBhbGwgdGhlCi0gICBjb25kaXRpb25h bCBjb21waWxhdGlvbiBpbiB0aGUgcHJvZ3JhbS4gSWdub3JlIHRoZXNlIG1lc3NhZ2VzLgotCi0g ICBTb21lIG9mIEMtS2VybWl0J3MgbW9kdWxlcyBhcmUgc28gbGFyZ2UsIG9yIGNvbnRhaW4gc28g bWFueSBjaGFyYWN0ZXIKLSAgIHN0cmluZyBjb25zdGFudHMsIG9yIGFyZSBzbyBvZmZlbnNpdmUg aW4gc29tZSBvdGhlciB3YXksIHRoYXQgc29tZSBDCi0gICBjb21waWxlcnMgZ2l2ZSB1cCBhbmQg cmVmdXNlIHRvIGNvbXBpbGUgdGhlbS4gVGhpcyBpcyB1c3VhbGx5IGJlY2F1c2UKLSAgIHRoZSAt TyAob3B0aW1pemUpIG9wdGlvbiBpcyBpbmNsdWRlZCBpbiB0aGUgbWFrZSBlbnRyeS4gSWYgdGhp cyBoYXBwZW5zCi0gICB0byB5b3UsIHlvdSBjYW4gKGEpIHJlbW92ZSB0aGUgLU8gb3B0aW9uIGZy b20gdGhlIG1ha2UgZW50cnksIHdoaWNoCi0gICB3aWxsIHR1cm4gb2ZmIHRoZSBvcHRpbWl6ZXIg Zm9yIEFMTCBtb2R1bGVzOyBvciAoYikgY29tcGlsZSB0aGUKLSAgIG9mZmVuZGluZyBtb2R1bGUo cykgYnkgaGFuZCwgaW5jbHVkaW5nIGFsbCB0aGUgc3dpdGNoZXMgZnJvbSBtYWtlIGVudHJ5Ci0g ICBleGNlcHQgZm9yIC1PLCBhbmQgdGhlbiBnaXZlIHRoZSBhcHByb3ByaWF0ZSAibWFrZSIgY29t bWFuZCBhZ2Fpbjsgb3IKLSAgIChjKSBpbmNyZWFzZSB0aGUgdmFsdWUgb2YgdGhlIC1PbGltaXQg b3B0aW9uLCBpZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzCi0gICB0aGlzIG9wdGlvbjsgb3IgKGQp IGNoYW5nZSB0aGUgWzE2MV1tYWtlZmlsZSB0YXJnZXQgdG8gZmlyc3QgY29tcGlsZQotICAgZWFj aCBvZmZlbmRpbmcgbW9kdWxlIGV4cGxpY2l0bHkgd2l0aG91dCBvcHRpbWl6YXRpb24sIHRoZW4g Y29tcGlsZSB0aGUKLSAgIG90aGVycyBub3JtYWxseSAod2l0aCBvcHRpbWl6YXRpb24pLCBmb3Ig ZXhhbXBsZToKLQotI0ZvcnR1bmUgMzI6MTYsIEZvcjpQcm8gMi4xIChtb3N0bHkgbGlrZSA0LjFi c2QpCi1mdDIxOgotICAgICAgICBAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBG b3J0dW5lIDMyOjE2IEZvcjpQcm8gMi4xLi4uJwotICAgICAgICAkKE1BS0UpIGNrdXVzeC4kKEVY VCkgIkNGTEFHUz0gLUROT0RFQlVHIC1EQlNENCAtREZUMjEgLUROT0ZJTEVIIFwKLSAgICAgICAg LVNZTSA4MDAgXCAtRERZTkFNSUMgLUROT1NFVEJVRiAtRENLX0NVUlNFUyAkKEtGTEFHUykgLURQ SURfVD1zaG9ydCIKLSAgICAgICAgJChNQUtFKSBja3V4bGEuJChFWFQpICJDRkxBR1M9IC1ETk9E RUJVRyAtREJTRDQgLURGVDIxIC1ETk9GSUxFSCBcCi0gICAgICAgIC1TWU0gODAwIFwgLUREWU5B TUlDIC1ETk9TRVRCVUYgLURDS19DVVJTRVMgJChLRkxBR1MpIC1EUElEX1Q9c2hvcnQiCi0gICAg ICAgICQoTUFLRSkgY2t1ZGlhLiQoRVhUKSAiQ0ZMQUdTPSAtRE5PREVCVUcgLURCU0Q0IC1ERlQy MSAtRE5PRklMRUggXAotICAgICAgICAtU1lNIDgwMCBcIC1ERFlOQU1JQyAtRE5PU0VUQlVGIC1E Q0tfQ1VSU0VTICQoS0ZMQUdTKSAtRFBJRF9UPXNob3J0IgotICAgICAgICAkKE1BS0UpIHdlcm1p dCAiQ0ZMQUdTPSAtTyAtRE5PREVCVUcgLURCU0Q0IC1ERlQyMSAtRE5PRklMRUggLVNZTSA4MDAg XAotICAgICAgICAtRERZTkFNSUMgLUROT1NFVEJVRiAtRENLX0NVUlNFUyAkKEtGTEFHUykgLURQ SURfVD1zaG9ydCIgXAotICAgICAgICAiTE5LRkxBR1M9IC1uIC1zIiAiTElCUz0gLWxjdXJzZXMg LWx0ZXJtY2FwIC1sdiAtbG5ldCIKLQotICAgQXMgYW4gZXh0cmVtZSBleGFtcGxlLCBzb21lIGNv bXBpbGVycyAoZS5nLiBnY2Mgb24gdGhlIERHIEFWaWlPTikgaGF2ZQotICAgYmVlbiBrbm93biB0 byBkdW1wIGNvcmUgd2hlbiB0cnlpbmcgdG8gY29tcGlsZSBja3dhcnQuYyB3aXRoCi0gICBvcHRp bWl6YXRpb24uIFNvIGp1c3QgZG8gdGhpcyBvbmUgImJ5IGhhbmQiOgotCi1jYyAtbyB3YXJ0IGNr d2FydC5jCi0KLSAgIG9yOgotCi10b3VjaCBja2Nwcm8uYwotCi0gICBhbmQgdGhlbiBnaXZlIHRo ZSAibWFrZSIgY29tbWFuZCBhZ2Fpbi4KLQotICAgU3BlYWtpbmcgb2Ygd2FydCwgaXQgaXMgdW5h dm9pZGFibGUgdGhhdCBzb21lIHBpY2t5IGNvbXBpbGVycyBtaWdodAotICAgZ2VuZXJhdGUgInN0 YXRlbWVudCB1bnJlYWNoYWJsZSIgbWVzc2FnZXMgd2hlbiBjb21waWxpbmcgY2tjcHJvLmMuCi0g ICBVbnJlYWNoYWJsZSBzdGF0ZW1lbnRzIGNhbiBiZSBnZW5lcmF0ZWQgYnkgdGhlIHdhcnQgcHJv Z3JhbSwgd2hpY2gKLSAgIGdlbmVyYXRlcyBja2Nwcm8uYyBhdXRvbWF0aWNhbGx5IGZyb20gWzE2 Ml1ja2Nwcm8udywgd2hpY2ggdHJhbnNsYXRlcwotICAgbGV4LWxpa2Ugc3RhdGUvaW5wdXQgY29u c3RydWN0aW9ucyBpbnRvIGEgYmlnIHN3aXRjaC9jYXNlIGNvbnN0cnVjdGlvbi4KLQotICAgU29t ZSBmdW5jdGlvbiBpbiBLZXJtaXQgd3JlYWtzIGhhdm9jIHdoZW4gaXQgaXMgY2FsbGVkLiBDaGFu Z2UgYWxsCi0gICBpbnZvY2F0aW9ucyBvZiB0aGUgZnVuY3Rpb24gaW50byBhIG1hY3JvIHRoYXQg ZXZhbHVhdGVzIHRvIHRoZQotICAgYXBwcm9wcmlhdGUgcmV0dXJuIGNvZGUgdGhhdCB3b3VsZCBo YXZlIGJlZW4gcmV0dXJuZWQgYnkgdGhlIGZ1bmN0aW9uCi0gICBoYWQgaXQgYmVlbiBjYWxsZWQg YW5kIGZhaWxlZCwgZm9yIGV4YW1wbGU6IC1EemtzZWxmKCk9MC4gT2J2aW91c2x5IG5vdAotICAg YSBnb29kIGlkZWEgaWYgdGhlIGZ1bmN0aW9uIGlzIHJlYWxseSBuZWVkZWQuCi0KLSAgIElmIHlv dSBoYXZlIGp1c3QgaW5zdGFsbGVkIFN1bk9TIDQuMS4yIG9yIDQuMS4zLCB5b3UgbWlnaHQgZmlu ZCB0aGF0Ci0gICBDLUtlcm1pdCAoYW5kIGFueSBvdGhlciBDIHByb2dyYW0pIGZhaWxzIHRvIGxp bmsgYmVjYXVzZSBvZiB1bnJlc29sdmVkCi0gICByZWZlcmVuY2VzIGZyb20gd2l0aGluIGxpYmMu IFRoaXMgaXMgYmVjYXVzZSBvZiBhIG1pc3Rha2UgaW4gU3VuJ3MKLSAgIC91c3IvbGliL3NobGli LmV0YyBmaWxlcyBmb3IgYnVpbGRpbmcgdGhlIG5ldyBsaWJjLiBDaGFuZ2UgdGhlIGxpYmMKLSAg IE1ha2VmaWxlIHNvIHRoYXQgdGhlICJsZCIgbGluZXMgaGF2ZSAiLWxkbCIgYXQgdGhlIGVuZC4g Q2hhbmdlIHRoZQotICAgUkVBRE1FIGZpbGUgdG8gc2F5ICJtdiB4Y2NzLm11bHRpYnl0ZS4geGNj cy5tdWx0aWJ5dGUubyIgYW5kIGZvbGxvdwotICAgdGhhdCBpbnN0cnVjdGlvbi4KLQotNS4gSU5T VEFMTElORyBUSEUgS0VSTUlUIEZJTEVTCi0KLSAgIFsgWzE2M11Ub3AgXSBbIFsxNjRdQ29udGVu dHMgXSBbIFsxNjVdTmV4dCBdIFsgWzE2Nl1QcmV2aW91cyBdCi0KLSAgIFNFQ1RJT04gQ09OVEVO VFMKLQotNS4xLiBbMTY3XVRoZSBDLUtlcm1pdCBJbml0aWFsaXphdGlvbiBGaWxlCi01LjIuIFsx NjhdVGV4dCBGaWxlcwotNS4zLiBbMTY5XUluc3RhbGxpbmcgdGhlIEtlcm1pdCBGaWxlcwotNS40 LiBbMTcwXVRoZSBNYWtlZmlsZSBJbnN0YWxsIFRhcmdldAotCi0gICBUaGUgQy1LZXJtaXQgZXhl Y3V0YWJsZSBkb2VzIG5vdCBuZWVkIGFueSBleHRlcm5hbCBmaWxlcyB0byBydW4uCi0gICBVbmxp a2UsIHNheSwgdGhlIGN1IHByb2dyYW0sIHdoaWNoIG9uIG1vc3QgcGxhdGZvcm1zIGlzIHVzZWxl c3MgdW5sZXNzCi0gICB5b3UgKGFzIHJvb3QpIGVkaXQgdGhlIC91c3Ivc3Bvb2wvdXVjcC9TeXN0 ZW1zIGFuZAotICAgL3Vzci9zcG9vbC91dWNwL0RldmljZXMgZmlsZXMgdG8gc3VwcGx5IHdoYXRl dmVyIG9ic2N1cmUgYW5kCi0gICB1bmRvY3VtZW50ZWQgc3ludGF4IGlzIHJlcXVpcmVkIHRvIG1h dGNoIHNvbWUgc3VwcG9zZWRseSB1c2VyLWZyaWVuZGx5Ci0gICBtbmVtb25pYyB0byB0aGUgcmVh bCBwYXRobmFtZSBvZiB3aGF0ZXZlciBkZXZpY2UgeW91IHdhbnQgdG8gdXNlLAotICAgS2VybWl0 IHJ1bnMgb24gaXRzIG93biB3aXRob3V0IG5lZWRpbmcgYW55IGV4dGVybmFsIGNvbmZpZ3VyYXRp b24KLSAgIGZpbGVzLCBhbmQgbGV0cyB5b3UgcmVmZXIgdG8gZGV2aWNlIChhbmQgbmV0d29yayBo b3N0cyBhbmQgc2VydmljZXMpIGJ5Ci0gICB0aGVpciBvd24gbmF0dXJhbCB1bmRpc2d1aXNlZCBu YW1lcy4KLQotICAgTmV2ZXJ0aGVsZXNzLCBhIG51bWJlciBvZiBleHRlcm5hbCBmaWxlcyBjYW4g YmUgaW5zdGFsbGVkIGFsb25nIHdpdGgKLSAgIHRoZSBDLUtlcm1pdCBleGVjdXRhYmxlIGlmIHlv dSB3aXNoLiBUaGVzZSBpbmNsdWRlIGNvbmZpZ3VyYXRpb24gYW5kCi0gICBjdXN0b21pemF0aW9u IGZpbGVzIHRoYXQgYXJlIHJlYWQgYnkgS2VybWl0IGFzIHdlbGwgYXMgZG9jdW1lbnRhdGlvbgot ICAgZmlsZXMgdG8gYmUgcmVhZCBieSBwZW9wbGUuIEFsbCBvZiB0aGlzIG1hdGVyaWFsIGlzIChh KSBvcHRpb25hbCwgYW5kCi0gICAoYikgYXZhaWxhYmxlIG9uIHRoZSBLZXJtaXQgd2Vic2l0ZToK LQotWzE3MV1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvCi0KLSAgIGFuZCB1c3VhbGx5 IGluIGEgbW9yZSBwbGVhc2FudCBmb3JtLCBwZXJoYXBzIGFsc28gd2l0aCB1cGRhdGVkIGNvbnRl bnQuCi0gICBTbyBpZiB5b3VyIGNvbXB1dGVyIGlzIG9uIHRoZSBJbnRlcm5ldCwgdGhlcmUgaXMg bm8gbmVlZCB0byBpbnN0YWxsCi0gICBhbnl0aGluZyBidXQgdGhlIEtlcm1pdCBleGVjdXRhYmxl IGlmIHVzZXJzIGtub3cgaG93IHRvIGZpbmQgdGhlIEtlcm1pdAotICAgd2Vic2l0ZSAoYW5kIGlm IHRoZXkgZG9uJ3QsIEtlcm1pdCdzICJoZWxwIiBjb21tYW5kIHRlbGxzIHRoZW0pLgotCi01LjEu IFRoZSBDLUtlcm1pdCBJbml0aWFsaXphdGlvbiBGaWxlCi0KLSAgIEluIEMtS2VybWl0IDcuMCBh bmQgZWFybGllciwgdGhlIHN0YW5kYXJkIGluaXRpYWxpemF0aW9uIGZpbGUgd2FzIGEga2V5Ci0g ICBDLUtlcm1pdCBjb21wb25lbnQgYmVjYXVzZToKLQotICAgIGEuIEl0ICJsb2FkZWQiIHRoZSBk aWFsaW5nIGFuZCBuZXR3b3JrIGRpcmVjdG9yaWVzLgotICAgIGIuIEl0IGRlZmluZWQgYWxsIHRo ZSBtYWNyb3MgYW5kIHZhcmlhYmxlcyBmb3IgdGhlIHNlcnZpY2VzIGRpcmVjdG9yeS4KLSAgICBj LiBJdCBkZWZpbmVkIG1hY3JvcyBmb3IgcXVpY2tseSBjaGFuZ2luZyBLZXJtaXQncyBmaWxlLXRy YW5zZmVyCi0gICAgICAgcGVyZm9ybWFuY2UgdHVuaW5nLgotCi0gICBUaGUgc3RhbmRhcmQgaW5p dGlhbGl6YXRpb24gZmlsZSBpcyBxdWl0ZSBsb25nIChtb3JlIHRoYW4gNjAwIGxpbmVzKQotICAg YW5kIHJlcXVpcmVzIG5vdGljZWFibGUgcHJvY2Vzc2luZyB0aW1lICh0aGUgc2xvd2VyIHRoZSBj b21wdXRlciwgdGhlCi0gICBtb3JlIG5vdGljZWFibGUpLCB5ZXQgZmV3IHBlb3BsZSBhY3R1YWxs eSB1c2UgdGhlIHNlcnZpY2VzIGRpcmVjdG9yeSwKLSAgIHdob3NlIGRlZmluaXRpb24gdGFrZXMg dXAgbW9zdCBvZiBpdHMgYnVsay4gTWVhbndoaWxlLCBpbiBDLUtlcm1pdCA4LjAsCi0gICBtYW55 IG9mIHRoZSByZW1haW5pbmcgZnVuY3Rpb25zIG9mIHRoZSBzdGFuZGFyZCBpbml0aWFsaXphdGlv biBmaWxlIGFyZQotICAgbm93IGJ1aWx0IGluOyBmb3IgZXhhbXBsZSwgdGhlIEZBU1QsIENBVVRJ T1VTLCBhbmQgUk9CVVNUIGNvbW1hbmRzLgotCi0gICBNb3JlIHRvIHRoZSBwb2ludCwgbWFueSBv ZiB0aGUgc2V0dGluZ3MgdGhhdCBjb3VsZCBiZSBtYWRlIG9ubHkgaW4gdGhlCi0gICBpbml0aWFs aXphdGlvbiBhbmQgY3VzdG9taXphdGlvbiBmaWxlcyBjYW4gbm93IGJlIHBpY2tlZCB1cCBmcm9t Ci0gICBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIFRoZSBmaXJzdCBncm91cCBpZGVudGlmaWVzIGlu aXRpYWxpemF0aW9uIGFuZAotICAgZGlyZWN0b3J5IGZpbGVzOgotCi0gICBDS0VSTUlUX0lOSQot ICAgICAgICAgIFRoZSBwYXRoIG9mIHlvdXIgS2VybWl0IGluaXRpYWxpemF0aW9uIGZpbGUsIGlm IGFueS4gVGhpcwotICAgICAgICAgIG92ZXJyaWRlcyB0aGUgYnVpbHQtaW4gc2VhcmNoIGZvciAk SE9NRS8ua2VybXJjLgotCi0gICBLX0NIQVJTRVQKLSAgICAgICAgICBUaGUgY2hhcmFjdGVyIHNl dCB1c2VkIGZvciBlbmNvZGluZyBsb2NhbCB0ZXh0IGZpbGVzLiBFcXVpdmFsZW50Ci0gICAgICAg ICAgdG8gU0VUIEZJTEUgQ0hBUkFDVEVSLVNFVC4KLQotICAgS19ESUFMX0RJUkVDVE9SWQotICAg ICAgICAgIFRoZSBmdWxsIHBhdGhuYW1lIG9mIG9uZSBvciBtb3JlIEtlcm1pdCBkaWFsaW5nIGRp cmVjdG9yeSBmaWxlcy4KLSAgICAgICAgICBFcXVpdmFsZW50IHRvIFNFVCBESUFMIERJUkVDVE9S WS4KLQotICAgS19ORVRfRElSRUNUT1JZCi0gICAgICAgICAgVGhlIGZ1bGwgcGF0aG5hbWUgb2Yg b25lIG9yIG1vcmUgS2VybWl0IG5ldHdvcmsgZGlyZWN0b3J5IGZpbGVzLgotICAgICAgICAgIEVx dWl2YWxlbnQgdG8gU0VUIE5FVFdPUksgRElSRUNUT1JZLgotCi0gICBLX0lORk9fRElSRUNUT1JZ Ci0gICBLX0lORk9fRElSCi0gICAgICAgICAgVGhlIGZ1bGwgcGF0aG5hbWUgb2YgYSBkaXJlY3Rv cnkgY29udGFpbmluZyBLZXJtaXQgKGlmIGFueSkKLSAgICAgICAgICBjb250YWluaW5nIGNrdWJ3 ci50eHQgYW5kIG90aGVyIEtlcm1pdCB0ZXh0IGZpbGVzLiBPdmVycmlkZXMKLSAgICAgICAgICBL ZXJtaXQncyBidWlsdC1pbiBzZWFyY2ggZm9yIHRoaXMgZGlyZWN0b3J5LgotCi0gICBUaGUgbmV4 dCBncm91cCBpcyByZWxhdGVkIHRvIGRpYWxpbmcgbW9kZW1zOgotCi0gICBLX0NPVU5UUllDT0RF Ci0gICAgICAgICAgVGhlIHRlbGVwaG9uaWMgbnVtZXJpYyBjb3VudHJ5IGNvZGUgZm9yIHRoaXMg bG9jYXRpb24sIGUuZy4gMQotICAgICAgICAgIGZvciBOb3J0aCBBbWVyaWNhIG9yIDM5IGZvciBJ dGFseS4gSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGlzCi0gICAgICAgICAgb25lIGJlIHNldCBm b3IgYWxsIHVzZXJzLCBzeXN0ZW0td2lkZS4gTm90IG9ubHkgaXMgaXQgdXNlZCB0bwotICAgICAg ICAgIHByb2Nlc3MgcG9ydGFibGUtZm9ybWF0IGRpYWxpbmcgZGlyZWN0b3J5IGVudHJpZXMsIGJ1 dCBpdCBpcwotICAgICAgICAgIGFsc28gY29tcGFyZWQgYWdhaW5zdCBLZXJtaXQncyBidWlsdC1p biBsaXN0IG9mICJ0b25lIGNvdW50cmllcyIKLSAgICAgICAgICB0byBzZWUgaWYgdG9uZSBkaWFs aW5nIGNhbiBiZSB1c2VkLiBFcXVpdmFsZW50IHRvIEtlcm1pdCdzIFNFVAotICAgICAgICAgIERJ QUwgQ09VTlRSWS1DT0RFIGNvbW1hbmQuCi0KLSAgIEtfQVJFQUNPREUKLSAgICAgICAgICBUaGUg dGVsZXBob25pYyBudW1lcmljIGFyZWEgY29kZSBmb3IgdGhpcyBsb2NhdGlvbiwgZS5nLiAyMTIg Zm9yCi0gICAgICAgICAgTWFuaGF0dGFuLCBOZXcgWW9yaywgVVNBLiBSZWNvbW1lbmQgdGhpcyBv bmUgYWxzbyBiZSBzZXQKLSAgICAgICAgICBzeXN0ZW0td2lkZSwgc28gc2hhcmVkIHBvcnRhYmxl LWZvcm1hdCBkaWFsaW5nIGRpcmVjdG9yaWVzIHdpbGwKLSAgICAgICAgICB3b3JrIGF1dG9tYXRp Y2FsbHkgZm9yIGV2ZXJ5Ym9keS4gRXF1aXZhbGVudCB0byBLZXJtaXQncyBTRVQKLSAgICAgICAg ICBESUFMIEFSRUEtQ09ERSBjb21tYW5kLgotCi0gICBLX0RJQUxfTUVUSE9ECi0gICAgICAgICAg VE9ORSBvciBQVUxTRS4gRXF1aXZhbGVudCB0byBLZXJtaXQncyBTRVQgRElBTCBNRVRIT0QgY29t bWFuZC4KLSAgICAgICAgICBJZiBhIGRpYWwgbWV0aG9kIGlzIG5vdCBzZXQgZXhwbGljaXRseSAo b3IgaW1wbGljaXRseSBmcm9tIHRoZQotICAgICAgICAgIGNvdW50cnkgY29kZSksIEtlcm1pdCBk b2VzIG5vdCBzcGVjaWZ5IGEgZGlhbGluZyBtZXRob2QsIGFuZAotICAgICAgICAgIHVzZXMgdGhl IG1vZGVtJ3MgZGVmYXVsdCBtZXRob2QsIHdoaWNoIHRlbmRzIHRvIGJlIHB1bHNlLgotCi0gICBL X0lOVExfUFJFRklYCi0gICAgICAgICAgVGhlIHRlbGVwaG9uaWMgbnVtZXJpYyBpbnRlcm5hdGlv bmFsIGRpYWxpbmcgcHJlZml4IGZvciB0aGlzCi0gICAgICAgICAgbG9jYXRpb24uIEVxdWl2YWxl bnQgdG8gS2VybWl0J3MgU0VUIERJQUwgSU5UTC1QUkVGSVggY29tbWFuZC4KLQotICAgS19MRF9Q UkVGSVgKLSAgICAgICAgICBUaGUgdGVsZXBob25pYyBudW1lcmljIGxvbmctZGlzdGFuY2UgZGlh bGluZyBwcmVmaXggZm9yIHRoaXMKLSAgICAgICAgICBsb2NhdGlvbi4gRXF1aXZhbGVudCB0byBL ZXJtaXQncyBTRVQgRElBTCBMRC1QUkVGSVggY29tbWFuZC4KLQotICAgS19QQlhfSUNQCi0gICAg ICAgICAgVGhlIHRlbGVwaG9uaWMgbnVtZXJpYyBQQlggaW50ZXJuYWwgY2FsbCBwcmVmaXggZm9y IHRoaXMKLSAgICAgICAgICBsb2NhdGlvbi4gRXF1aXZhbGVudCB0byBLZXJtaXQncyBTRVQgRElB TCBQQlgtSU5TSURFLVBSRUZJWAotICAgICAgICAgIGNvbW1hbmQuCi0KLSAgIEtfUEJYX09DUAot ICAgICAgICAgIFRoZSB0ZWxlcGhvbmljIG51bWVyaWMgUEJYIGV4dGVybmFsIGNhbGwgcHJlZml4 IGZvciB0aGlzCi0gICAgICAgICAgbG9jYXRpb24uIEVxdWl2YWxlbnQgdG8gS2VybWl0J3MgU0VU IERJQUwgUEJYLU9VVFNJREUtUFJFRklYCi0gICAgICAgICAgY29tbWFuZC4KLQotICAgS19QQlhf WENICi0gICAgICAgICAgVGhlIHRlbGVwaG9uaWMgbnVtZXJpYyBQQlggZXhjaGFuZ2UgKGZpcnN0 IHBhcnQgb2YgdGhlCi0gICAgICAgICAgc3Vic2NyaWJlciBudW1iZXIpLiBFcXVpdmFsZW50IHRv IEtlcm1pdCdzIFNFVCBESUFMIFBCWC1FWENIQU5HRQotICAgICAgICAgIGNvbW1hbmQuCi0KLSAg IEtfVEZfQVJFQUNPREUKLSAgICAgICAgICBBIGxpc3Qgb2Ygb25lIG9yIG1vcmUgdGVsZXBob25p YyBudW1lcmljIHRvbGwtZnJlZSBhcmVhIGNvZGVzLgotCi0gICBLX1RGX1BSRUZJWAotICAgICAg ICAgIFRoZSB0ZWxlcGhvbmljIG51bWVyaWMgdG9sbC1mcmVlIGRpYWxpbmcgcHJlZml4LCBpbiBj YXNlIGl0IGlzCi0gICAgICAgICAgZGlmZmVyZW50IGZyb20gdGhlIGxvbmctZGlzdGFuY2UgcHJl Zml4LiBFcXVpdmFsZW50IHRvIEtlcm1pdCdzCi0gICAgICAgICAgU0VUIERJQUwgVEYtUFJFRklY IGNvbW1hbmQuCi0KLSAgIFRoZSBmaW5hbCBncm91cCBpbmNsdWRlcyB3ZWxsLWtub3duIGVudmly b25tZW50IHZhcmlhYmxlcyB0aGF0IGFyZSBhbHNvCi0gICB1c2VkIGJ5IEtlcm1pdDoKLQotICAg Q0RQQVRICi0gICAgICAgICAgV2hlcmUgdGhlIENEIGNvbW1hbmQgc2hvdWxkIGxvb2sgZm9yIHJl bGF0aXZlIGRpcmVjdG9yeSBuYW1lcy4KLQotICAgU0hFTEwKLSAgICAgICAgICBUaGUgcGF0aCBv ZiB5b3VyIFVuaXggc2hlbGwuIFVzZWQgYnkgdGhlIFJVTiAoISkgY29tbWFuZCB0bwotICAgICAg ICAgIGNob29zZSB0aGUgc2hlbGwgdG8gZXhlY3V0ZSBpdHMgYXJndW1lbnRzLgotCi0gICBVU0VS Ci0gICAgICAgICAgWW91ciBVbml4IHVzZXJuYW1lLgotCi0gICBFRElUT1IKLSAgICAgICAgICBU aGUgbmFtZSBvciBwYXRoIG9mIHlvdXIgcHJlZmVycmVkIGVkaXRvciAodXNlZCBieSB0aGUgRURJ VAotICAgICAgICAgIGNvbW1hbmQpLiBFcXVpdmFsZW50IHRvIFNFVCBFRElUT1IuCi0KLSAgIEJS T1dTRVIKLSAgICAgICAgICBUaGUgbmFtZSBvciBwYXRoIG9mIHlvdXIgcHJlZmVycmVkIHdlYiBi cm93c2VyICh1c2VkIGJ5IHRoZQotICAgICAgICAgIEJST1dTRSBjb21tYW5kKS4gRXF1aXZhbGVu dCB0byBLZXJtaXQncyBTRVQgQlJPV1NFUiBjb21tYW5kLgotCi0gICBEb2VzIHRoaXMgbWVhbiB0 aGUgaW5pdGlhbGl6YXRpb24gZmlsZSBjYW4gYmUgYWJvbGlzaGVkPyBJIHRoaW5rIHNvLgotICAg SGVyZSdzIHdoeToKLQotICAgICAqIEtlcm1pdCBhbHJlYWR5IGRvZXMgZXZlcnl0aGluZyBtb3N0 IHBlb3BsZSB3YW50IGl0IHRvIGRvIHdpdGhvdXQKLSAgICAgICBvbmUuCi0gICAgICogSW1wb3J0 YW50IHNpdGUtc3BlY2lmaWMgY3VzdG9taXphdGlvbnMgY2FuIGJlIGRvbmUgd2l0aCBnbG9iYWwK LSAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCi0gICAgICogVGhlcmUgaXMgbm8gbG9uZ2Vy IGFueSBuZWVkIGZvciBldmVyeWJvZHkgdG8gaGF2ZSB0byB1c2UgdGhlCi0gICAgICAgc3RhbmRh cmQgaW5pdGlhbGl6YXRpb24gZmlsZS4KLSAgICAgKiBUaGlzIG1lYW5zIHRoYXQgeW91ciBpbml0 aWFsaXphdGlvbiBmaWxlLCBpZiB5b3Ugd2FudCBvbmUsIGNhbgotICAgICAgIGNvbnRhaW4geW91 ciBvd24gcGVyc29uYWwgc2V0dGluZ3MsIGRlZmluaXRpb25zLCBhbmQgcHJlZmVyZW5jZXMsCi0g ICAgICAgcmF0aGVyIHRoYW4gNjAwIGxpbmVzIG9mICJzdGFuZGFyZCIgc2V0dXBzLgotICAgICAq IElmIHlvdSBzdGlsbCB3YW50IHRoZSBzZXJ2aWNlcyBkaXJlY3RvcnksIHlvdSBjYW4gZWl0aGVy IFRBS0UgdGhlCi0gICAgICAgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24gZmlsZSAod2hpY2ggbXVz dCBiZSBuYW1lZCBhbnl0aGluZyBvdGhlcgotICAgICAgIHRoYW4gJEhPTUUvLmtlcm1yYyB0byBh dm9pZCBiZWluZyBleGVjdXRlZCBhdXRvbWF0aWNhbGx5IGV2ZXJ5IHRpbWUKLSAgICAgICB5b3Ug c3RhcnQgS2VybWl0KSwgb3IgeW91IGNhbiBtYWtlIGl0IGEga2VyYmFuZyBzY3JpcHQgYW5kIGV4 ZWN1dGUKLSAgICAgICBpdCAiZGlyZWN0bHkiICh0aGUgWzE3Ml1tYWtlZmlsZSBpbnN0YWxsIHRh cmdldCBkb2VzIHRoaXMgZm9yIHlvdQotICAgICAgIGJ5IHB1dHRpbmcgY2tlcm1pdC5pbmkgaW4g dGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBLZXJtaXQgYmluYXJ5LAotICAgICAgIGFkZGluZyB0 aGUgYXBwcm9wcmlhdGUgS2VyYmFuZyBsaW5lIHRvIHRoZSB0b3AsIGFuZCBnaXZpbmcgaXQKLSAg ICAgICBleGVjdXRlIHBlcm1pc3Npb24pLgotCi0gICBJbiBmYWN0LCB5b3UgY2FuIHB1dCBhbnkg bnVtYmVyIG9mIGtlcmJhbmcgc2NyaXB0cyBpbiB5b3VyIFBBVEggdG8KLSAgIHN0YXJ0IHVwIEMt S2VybWl0IGluIGRpZmZlcmVudCB3YXlzLCB0byBoYXZlIGl0IGFkb3B0IGNlcnRhaW4gc2V0dGlu Z3MsCi0gICBtYWtlIHBhcnRpY3VsYXIgY29ubmVjdGlvbnMsIGV4ZWN1dGUgY29tcGxpY2F0ZWQg c2NyaXB0cywgd2hhdGV2ZXIgeW91Ci0gICB3YW50LgotCi0gICBBbmQgaW4gQy1LZXJtaXQgOS4w IHRoZSBpbml0aWFsaXphdGlvbiBoYXMgaW5kZWVkIGJlZW4gInJldGlyZWQiIGJ5Ci0gICByZW5h bWluZyBpdCB0byBva2VybWl0LmluaSwgYW5kIHJlcGxhY2VkIGJ5IGEgc3R1YiBja2VybWl0Lmlu aSB0aGF0Ci0gICBkb2Vzbid0IGRvIGFueXRoaW5nIGJ1dCBwcmludCBhIG1lc3NhZ2UuIERpdHRv IGZvciBja2VybW9kLmluaS4KLQotNS4yLiBUZXh0IEZpbGVzCi0KLSAgIFRoZXNlIGFyZSBlbnRp cmVseSBvcHRpb25hbC4gTWFueSBvZiB0aGVtIGFyZSB0byBiZSBmb3VuZCBhdCB0aGUgS2VybWl0 Ci0gICB3ZWJzaXRlIGluIEhUTUwgZm9ybSAoaS5lLiBhcyBXZWIgcGFnZXMgd2l0aCBjbGlja2Fi bGUgbGlua3MsIGV0YyksIGFuZAotICAgdmVyeSBsaWtlbHkgYWxzbyBtb3JlIHVwIHRvIGRhdGUu IFBsYWluLXRleHQgZmlsZXMgdGhhdCBjb3JyZXNwb25kIHRvCi0gICBXZWIgcGFnZXMgd2VyZSBz aW1wbHkgImR1bXBlZCIgYnkgTHlueCBmcm9tIHRoZSB3ZWJzaXRlIHRvIHBsYWluIEFTQ0lJCi0g ICB0ZXh0LiBUaGUgZm9ybWF0IGlzIHdoYXRldmVyIEx5bnggdXNlcyBmb3IgdGhpcyBwdXJwb3Nl LiBJZiB5b3Ugd2lzaCwKLSAgIHlvdSBjYW4gaW5zdGFsbCB0aGVtIG9uIHlvdXIgY29tcHV0ZXIg YXMgZGVzY3JpYmVkIGluIHRoZSBbMTczXW5leHQKLSAgIHNlY3Rpb24uCi0KLSAgIFsxNzRdQ09Q WUlORy5UWFQKLSAgICAgICAgICBDb3B5cmlnaHQgbm90aWNlLCBwZXJtaXNzaW9ucywgYW5kIGRp c2NsYWltZXIuCi0KLSAgIFsxNzVdY2tlcm1pdC5pbmkKLSAgICAgICAgICBUaGUgc3RhbmRhcmQg aW5pdGlhbGl6YXRpb24gZmlsZSwgaW50ZW5kZWQgbW9yZSBmb3IgcmVmZXJlbmNlCi0gICAgICAg ICAgKGluIG1vc3QgY2FzZXMpIHRoYW4gYWN0dWFsIHVzZTsgc2VlIFsxNzZdU2VjdGlvbiA1LjEu Ci0KLSAgIFsxNzddY2tlcm1vZC5pbmkKLSAgICAgICAgICBBIHNhbXBsZSBjdXN0b21pemF0aW9u IGZpbGUuCi0KLSAgIFsxNzhdY2tlcm1pdDcwLnR4dAotICAgICAgICAgIFN1cHBsZW1lbnQgdG8g WzE3OV1Vc2luZyBDLUtlcm1pdCBmb3IgdmVyc2lvbiA3LjAuIEF2YWlsYWJsZSBvbgotICAgICAg ICAgIHRoZSBLZXJtaXQgd2Vic2l0ZSBhczoKLSAgICAgICAgICBbMTgwXWh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbAotCi0gICBbMTgxXWNrZXJtaXQ4MC50eHQK LSAgICAgICAgICBTdXBwbGVtZW50IHRvIFsxODJdVXNpbmcgQy1LZXJtaXQgZm9yIHZlcnNpb24g OC4wLiBBdmFpbGFibGUgb24KLSAgICAgICAgICB0aGUgS2VybWl0IHdlYnNpdGUgYXM6Ci0gICAg ICAgICAgWzE4M11odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwK LQotICAgWzE4NF1ja2VybWl0OTAudHh0Ci0gICAgICAgICAgU3VwcGxlbWVudCB0byBbMTg1XVVz aW5nIEMtS2VybWl0IGZvciB2ZXJzaW9uIDkuMC4gQXZhaWxhYmxlIG9uCi0gICAgICAgICAgdGhl IEtlcm1pdCB3ZWJzaXRlIGFzOgotICAgICAgICAgIFsxODZdaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ5MC5odG1sCi0KLSAgIFsxODddY2tjYndyLnR4dAotICAgICAgICAg IFRoZSBnZW5lcmFsIEMtS2VybWl0IGhpbnRzIGFuZCB0aXBzICgiYmV3YXJlIikgZmlsZS4gQXZh aWxhYmxlCi0gICAgICAgICAgb24gdGhlIEtlcm1pdCB3ZWJzaXRlIGFzOgotICAgICAgICAgIFsx ODhdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sCi0KLSAgIFsxODld Y2t1YndyLnR4dAotICAgICAgICAgIFRoZSBVbml4LXNwZWNpZmljIEMtS2VybWl0IGhpbnRzIGFu ZCB0aXBzIGZpbGUuIEF2YWlsYWJsZSBvbiB0aGUKLSAgICAgICAgICBLZXJtaXQgd2Vic2l0ZSBh czoKLSAgICAgICAgICBbMTkwXWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3Iu aHRtbAotCi0gICBbMTkxXWNrdWlucy50eHQKLSAgICAgICAgICBVbml4IEMtS2VybWl0IEluc3Rh bGxhdGlvbiBJbnN0cnVjdGlvbnMgKHRoaXMgZmlsZSkuIEF2YWlsYWJsZQotICAgICAgICAgIG9u IHRoZSBLZXJtaXQgd2Vic2l0ZSBhczoKLSAgICAgICAgICBbMTkyXWh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbAotCi0gICBbMTkzXWNrY2NmZy50eHQKLSAgICAgICAg ICBDLUtlcm1pdCBjb21waWxlLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBdmFpbGFibGUg b24gdGhlCi0gICAgICAgICAgS2VybWl0IHdlYnNpdGUgYXM6Ci0gICAgICAgICAgWzE5NF1odHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwKLQotICAgWzE5NV1ja2NwbG0u dHh0Ci0gICAgICAgICAgVGhlIEMtS2VybWl0IHByb2dyYW0gbG9naWMgbWFudWFsLiBBdmFpbGFi bGUgb24gdGhlIEtlcm1pdAotICAgICAgICAgIHdlYnNpdGUgYXM6Ci0gICAgICAgICAgWzE5Nl1o dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwKLQotICAgWzE5N11jYV9j ZXJ0cy5wZW0KLSAgICAgICAgICBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgY2VydGlmaWNhdGVzIGZv ciBzZWN1cmUgY29ubmVjdGlvbnMgKHNlZQotICAgICAgICAgIFsxOThdU2VjdGlvbiAxNikuCi0K LTUuMy4gSW5zdGFsbGluZyB0aGUgS2VybWl0IEZpbGVzCi0KLSAgIFRoZXJlIGlzIGFuICJpbnN0 YWxsIiB0YXJnZXQgaW4gdGhlIFsxOTldbWFrZWZpbGUgdGhhdCB5b3UgY2FuIHVzZSBpZgotICAg eW91IHdpc2guIEhvd2V2ZXIsIHNpbmNlIGV2ZXJ5IHNpdGUgaGFzIGl0cyBvd24gbGF5b3V0IGFu ZAotICAgcmVxdWlyZW1lbnRzLCBpdCBpcyBvZnRlbiBiZXR0ZXIgdG8gaW5zdGFsbCB0aGUgS2Vy bWl0IGZpbGVzIGJ5IGhhbmQuCi0gICBZb3UgZG9uJ3QgaGF2ZSB0byB1c2UgdGhlIG1ha2VmaWxl IGluc3RhbGwgdGFyZ2V0IHRvIGluc3RhbGwgQy1LZXJtaXQuCi0gICBUaGlzIGlzIGVzcGVjaWFs bHkgdHJ1ZSBzaW5jZSBub3QgYWxsIHNpdGVzIGJ1aWxkIEMtS2VybWl0IGZyb20gc291cmNlLAot ICAgYW5kIHRoZXJlZm9yZSBtaWdodCBub3QgZXZlbiBoYXZlIHRoZSBtYWtlZmlsZS4gQnV0IHlv dSBzaG91bGQgcmVhZAotICAgdGhpcyBzZWN0aW9uIGluIGFueSBjYXNlLgotCi0gICAgIElmIHlv dXIgY29tcHV0ZXIgYWxyZWFkeSBoYXMgYW4gb2xkZXIgdmVyc2lvbiBvZiBDLUtlcm1pdCBpbnN0 YWxsZWQsCi0gICAgIHlvdSBzaG91bGQgcmVuYW1lIGl0IChlLmcuIHRvICJrZXJtaXQ2IiBvciAi a2VybWl0NyIpIHNvIGluIGNhc2UgeW91Ci0gICAgIGhhdmUgYW55IHRyb3VibGUgd2l0aCB0aGUg bmV3IHZlcnNpb24sIHRoZSBvbGQgb25lIGlzIHN0aWxsCi0gICAgIGF2YWlsYWJsZS4KLQotICAg SW4gbW9zdCBjYXNlcywgeW91IG5lZWQgdG8gYmUgcm9vdCB0byBpbnN0YWxsIEMtS2VybWl0LCBp ZiBvbmx5IHRvIGdhaW4KLSAgIHdyaXRlIGFjY2VzcyB0byBkaXJlY3RvcmllcyBpbiB3aGljaCB0 aGUgYmluYXJ5IGFuZCBtYW51YWwgcGFnZSBhcmUgdG8KLSAgIGJlIGNvcGllZC4gVGhlIEMtS2Vy bWl0IGJpbmFyeSBzaG91bGQgYmUgaW5zdGFsbGVkIGluIGEgZGlyZWN0b3J5IHRoYXQKLSAgIGlz IGluIHRoZSB1c2VycycgUEFUSCwgYnV0IHRoYXQgaXMgbm90IGxpa2VseSB0byBiZSBvdmVyd3Jp dHRlbiB3aGVuCi0gICB5b3UgaW5zdGFsbCBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBvcGVyYXRpbmcg c3lzdGVtLiBBIGdvb2QgY2FuZGlkYXRlCi0gICB3b3VsZCBiZSB0aGUgL3Vzci9sb2NhbC9iaW4v IGRpcmVjdG9yeSwgYnV0IHRoZSBzcGVjaWZpYyBjaG9pY2UgaXMgc2l0ZQotICAgZGVwZW5kZW50 LiBFeGFtcGxlIChhc3N1bWluZyB0aGUgYXBwcm9wcmlhdGUgS2VybWl0IGJpbmFyeSBpcyBzdG9y ZWQgaW4KLSAgIHlvdXIgY3VycmVudCBkaXJlY3RvcnkgYXMgIndlcm1pdCIsIGUuZy4gYmVjYXVz ZSB5b3UganVzdCBidWlsdCBpdCBmcm9tCi0gICBzb3VyY2UgYW5kIHRoYXQncyB0aGUgbmFtZSB0 aGUgbWFrZWZpbGUgZ2F2ZSBpdCk6Ci0KLW12IHdlcm1pdCAvdXNyL2xvY2FsL2Jpbi9rZXJtaXQK LWNobW9kIDc1NSAvdXNyL2xvY2FsL2Jpbi9rZXJtaXQKLQotICAgb3IgKG9ubHkgYWZ0ZXIgeW91 IGZpbmlzaCByZWFkaW5nIHRoaXMgc2VjdGlvbiEpIHNpbXBseToKLQotbWFrZSBpbnN0YWxsCi0K LSAgIElNUE9SVEFOVDogSUYgQy1LRVJNSVQgSVMgVE8gQkUgVVNFRCBGT1IgRElBTElORyBPVVQs IHlvdSBtdXN0IGFsc28gZG8KLSAgIHNvbWV0aGluZyB0byBnaXZlIGl0IGFjY2VzcyB0byB0aGUg ZGlhbG91dCBkZXZpY2VzIGFuZCBsb2NrZmlsZQotICAgZGlyZWN0b3JpZXMuIFRoZSAnaW5zdGFs bCcgdGFyZ2V0IGRvZXMgbm90IGF0dGVtcHQgdG8gc2V0IEtlcm1pdCdzCi0gICBvd25lciwgZ3Jv dXAsIGFuZCBwZXJtaXNzaW9ucyB0byBhbGxvdyBkaWFsaW5nIG91dC4gVGhpcyByZXF1aXJlcwot ICAgcHJpdmlsZWdlcywgb3BlbiBleWVzLCBhbmQgaHVtYW4gZGVjaXNpb24tbWFraW5nLiBQbGVh c2UgcmVhZAotICAgWzIwMF1TZWN0aW9ucyAxMCBhbmQgWzIwMV0xMSBiZWxvdywgbWFrZSB0aGUg bmVjZXNzYXJ5IGRlY2lzaW9ucywgYW5kCi0gICB0aGVuIGltcGxlbWVudCB0aGVtIGJ5IGhhbmQg YXMgZGVzY3JpYmVkIGluIHRob3NlIHNlY3Rpb25zLgotCi0gICBZb3Ugc2hvdWxkIGFsc28gaW5z dGFsbCB0aGUgbWFuIHBhZ2UsIHdoaWNoIGlzIGNhbGxlZCBja3VrZXIubnIsIGluIHRoZQotICAg bWFuIHBhZ2UgZGlyZWN0b3J5IGZvciBsb2NhbCBjb21tYW5kcywgc3VjaCBhcyAvdXNyL21hbi9t YW4xLywgcmVuYW1lZAotICAgYXBwcm9wcmlhdGVseSwgZS5nLiB0byBrZXJtaXQuMS4gVGhpcyBp cyBhbHNvIHRha2VuIGNhcmUgb2YgYnkgIm1ha2UKLSAgIGluc3RhbGwiLgotCi0gICBPcHRpb25h bGx5LCB0aGUgdGV4dCBmaWxlcyBsaXN0ZWQgaW4gdGhlIFsyMDJdcHJldmlvdXMgc2VjdGlvbiBj YW4gYmUKLSAgIHBsYWNlZCBpbiBhIHB1YmxpY2x5IHJlYWRhYmxlIGRpcmVjdG9yeS4gU3VnZ2Vz dGVkIGRpcmVjdG9yeSBuYW1lcyBhcmU6Ci0KLS91c3IvbG9jYWwvZG9jL2tlcm1pdC8KLS91c3Iv bG9jYWwvbGliL2tlcm1pdC8KLS91c3Ivc2hhcmUvbGliL2tlcm1pdC8KLS9vcHQva2VybWl0L2Rv Yy8KLQotICAgKG9yIGFueSBvZiB0aGVzZSB3aXRob3V0IHRoZSAiL2tlcm1pdCIpLiBVcG9uIHN0 YXJ0dXAsIEMtS2VybWl0IGNoZWNrcwotICAgdGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJp YWJsZXMgd2hvc2UgcHVycG9zZSBpcyB0byBzcGVjaWZ5IHRoZQotICAgZGlyZWN0b3J5IHdoZXJl IHRoZSBDLUtlcm1pdCB0ZXh0IGZpbGVzIGFyZSwgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjoKLQot S19JTkZPX0RJUkVDVE9SWQotS19JTkZPX0RJUgotCi0gICBJZiBlaXRoZXIgb2YgdGhlc2UgaXMg ZGVmaW5lZCwgQy1LZXJtaXQgY2hlY2tzIGZvciB0aGUgZXhpc3RlbmNlIG9mIHRoZQotICAgY2t1 YndyLnR4dCBmaWxlIChVbml4IEMtS2VybWl0IEhpbnRzIGFuZCBUaXBzKS4gSWYgbm90IGZvdW5k LCBpdCBjaGVja3MKLSAgIHRoZSBkaXJlY3RvcmllcyBsaXN0ZWQgYWJvdmUgKGJvdGggd2l0aCBh bmQgd2l0aG91dCB0aGUgIi9rZXJtaXQiKSBwbHVzCi0gICBzZXZlcmFsIG90aGVycyB0byBzZWUg aWYgdGhleSBjb250YWluIHRoZSBja3Vid3IudHh0IGZpbGUuIElmIGZvdW5kLAotICAgdmFyaW91 cyBDLUtlcm1pdCBtZXNzYWdlcyBjYW4gcmVmZXIgdGhlIHVzZXIgdG8gdGhpcyBkaXJlY3Rvcnku Ci0KLSAgIEZpbmFsbHksIGlmIHlvdSB3YW50IHRvIHB1dCB0aGUgc291cmNlIGNvZGUgZmlsZXMg c29tZXdoZXJlIGZvciBwZW9wbGUKLSAgIHRvIGxvb2sgYXQsIHlvdSBjYW4gZG8gdGhhdCB0b28u Ci0KLTUuNC4gVGhlIE1ha2VmaWxlIEluc3RhbGwgVGFyZ2V0Ci0KLSAgIFRoZSBtYWtlZmlsZSAi aW5zdGFsbCIgdGFyZ2V0IGRvZXMgYWxtb3N0IGV2ZXJ5dGhpbmcgZm9yIHlvdSBpZiB5b3UKLSAg IGdpdmUgaXQgdGhlIGluZm9ybWF0aW9uIGl0IG5lZWRzIGJ5IHNldHRpbmcgdGhlIHZhcmlhYmxl cyBkZXNjcmliZWQKLSAgIGJlbG93LiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCBpZjoKLQotICAg ICAqIFlvdSBkb3dubG9hZGVkIHRoZSBbMjAzXWNvbXBsZXRlIEMtS2VybWl0IGFyY2hpdmUgYW5k IGJ1aWx0Ci0gICAgICAgQy1LZXJtaXQgZnJvbSBzb3VyY2U7IG9yOgotICAgICAqIFlvdSBkb3du bG9hZGVkIGFuIFsyMDRdaW5kaXZpZHVhbCBDLUtlcm1pdCBiaW5hcnkgYW5kIHRoZQotICAgICAg IFsyMDVdQy1LZXJtaXQgdGV4dC1maWxlIGFyY2hpdmUsIGFuZCB5b3VyIGNvbXB1dGVyIGhhcyBh ICJtYWtlIgotICAgICAgIGNvbW1hbmQuCi0KLSAgIEhlcmUgYXJlIHRoZSBwYXJhbWV0ZXJzIHlv dSBuZWVkIHRvIGtub3c6Ci0KLSAgIEJJTkFSWQotICAgICAgICAgIE5hbWUgb2YgdGhlIGJpbmFy eSB5b3Ugd2FudCB0byBpbnN0YWxsIGFzICJrZXJtaXQiLiBEZWZhdWx0OgotICAgICAgICAgICJ3 ZXJtaXQiLgotCi0gICBwcmVmaXgKLSAgICAgICAgICAobG93ZXIgY2FzZSkgSWYgeW91IGRlZmlu ZSB0aGlzIHZhcmlhYmxlLCBpdHMgdmFsdWUgaXMgcHJlcGVuZGVkCi0gICAgICAgICAgdG8gYWxs IHRoZSBmb2xsb3dpbmcgeHh4RElSIHZhcmlhYmxlcyAoOC4wLjIxMSBhbmQgbGF0ZXIpLgotCi0g ICBERVNURElSCi0gICAgICAgICAgSWYgeW91IHdhbnQgdG8gaW5zdGFsbCB0aGUgS2VybWl0IGZp bGVzIGluIGEgZGlyZWN0b3J5IHN0cnVjdHVyZQotICAgICAgICAgIGxpa2UgL29wdC9rZXJtaXQv YmluLywgL29wdC9rZXJtaXQvZG9jLywgL29wdC9rZXJtaXQvc3JjLywgdGhlbgotICAgICAgICAg IGRlZmluZSBERVNUSVIgYXMgdGhlIHJvb3Qgb2YgdGhpcyBzdHJ1Y3R1cmU7IGZvciBleGFtcGxl LAotICAgICAgICAgIC9vcHQva2VybWl0LiBUaGUgREVTVERJUiBzdHJpbmcgc2hvdWxkIG5vdCBl bmQgd2l0aCBhIHNsYXNoLiBCeQotICAgICAgICAgIGRlZmF1bHQsIERFU1RESVIgaXMgbm90IGRl ZmluZWQuIElmIGl0IGlzIGRlZmluZWQsIGJ1dCB0aGUKLSAgICAgICAgICBkaXJlY3RvcnkgZG9l cyBub3QgZXhpc3QsIHRoZSBtYWtlZmlsZSBhdHRlbXB0cyB0byBjcmVhdGUgaXQsCi0gICAgICAg ICAgd2hpY2ggbWlnaHQgcmVxdWlyZSB5b3UgdG8gYmUgcm9vdC4gRXZlbiBzbywgdGhpcyBjYW4g ZmFpbCBpZgotICAgICAgICAgIGFueSBzZWdtZW50cyBpbiB0aGUgcGF0aCBleGNlcHQgdGhlIGxh c3Qgb25lIGRvIG5vdCBhbHJlYWR5Ci0gICAgICAgICAgZXhpc3QuIFdBUk5JTkc6IElmIHRoZSBt YWtlZmlsZSBjcmVhdGVzIGFueSBkaXJlY3RvcmllcywgaXQKLSAgICAgICAgICBnaXZlcyB0aGVt IGEgbW9kZSBvZiA3NTUsIGFuZCB0aGUgZGVmYXVsdCBvd25lciBhbmQgZ3JvdXAuCi0gICAgICAg ICAgTW9kaWZ5IHRoZXNlIGJ5IGhhbmQgaWYgbmVjZXNzYXJ5LgotCi0gICBCSU5ESVIKLSAgICAg ICAgICBEaXJlY3RvcnkgaW4gd2hpY2ggdG8gaW5zdGFsbCB0aGUgS2VybWl0IGJpbmFyeSAoYW5k IHRoZQotICAgICAgICAgIHN0YW5kYXJkIEMtS2VybWl0IGluaXRpYWxpemF0aW9uIGZpbGUsIGlm IGl0IGlzIGZvdW5kLCBhcyBhCi0gICAgICAgICAgS2VyYmFuZyBzY3JpcHQpLiBJZiBERVNURElS IGlzIGRlZmluZWQsIEJJTkRJUiBtdXN0IHN0YXJ0IHdpdGggYQotICAgICAgICAgIHNsYXNoLiBC SU5ESVIgbXVzdCBub3QgZW5kIHdpdGggYSBzbGFzaC4gSWYgREVTVERJUiBpcyBkZWZpbmVkLAot ICAgICAgICAgIEJJTkRJUiBpcyBhIHN1YmRpcmVjdG9yeSBvZiBERVNURElSLiBJZiBCSU5ESVIg ZG9lcyBub3QgZXhpc3QsCi0gICAgICAgICAgdGhlIG1ha2VmaWxlIGF0dGVtcHRzIHRvIGNyZWF0 ZSBpdCBhcyB3aXRoIERFU1RESVIuIERlZmF1bHQ6Ci0gICAgICAgICAgL3Vzci9sb2NhbC9iaW4u Ci0KLSAgIE1BTkRJUgotICAgICAgICAgIERpcmVjdG9yeSBpbiB3aGljaCB0byBpbnN0YWxsIHRo ZSBDLUtlcm1pdCBtYW51YWwgcGFnZSBhcwotICAgICAgICAgICJrZXJtaXQiIGZvbGxvd2VkIGJ5 IHRoZSBtYW51YWwtY2hhcHRlciBleHRlbnNpb24gKG5leHQgaXRlbSkuCi0gICAgICAgICAgRGVm YXVsdDogL3Vzci9tYW4vbWFuMS4gSWYgTUFORElSIGlzIGRlZmluZWQsIHRoZSBkaXJlY3Rvcnkg bXVzdAotICAgICAgICAgIGFscmVhZHkgZXhpc3QuCi0KLSAgIE1BTkVYVAotICAgICAgICAgIEV4 dGVuc2lvbiBmb3IgdGhlIG1hbnVhbCBwYWdlLiBEZWZhdWx0OiAxIChkaWdpdCBvbmUpLgotCi0g ICBTUkNESVIKLSAgICAgICAgICBEaXJlY3RvcnkgaW4gd2hpY2ggdG8gaW5zdGFsbCB0aGUgQy1L ZXJtaXQgc291cmNlIGNvZGUuIElmCi0gICAgICAgICAgREVTVERJUiBpcyBkZWZpbmVkLCB0aGlz IGlzIGEgc3ViZGlyZWN0b3J5IG9mIERFU1RESVIuIERlZmF1bHQ6Ci0gICAgICAgICAgTm9uZS4K LQotICAgQ0VSVERJUgotICAgICAgICAgIEZvciBzZWN1cmUgYnVpbGRzIG9ubHk6IERpcmVjdG9y eSBpbiB3aGljaCB0byBpbnN0YWxsIHRoZQotICAgICAgICAgIGNhX2NlcnRzLnBlbSBmaWxlLiBU aGlzIG11c3QgYmUgdGhlIHZlcmlmaWNhdGlvbiBkaXJlY3RvcnkgdXNlZAotICAgICAgICAgIGJ5 IHByb2dyYW1zIHRoYXQgdXNlIHRoZSBTU0wgbGlicmFyaWVzIGF0IHlvdXIgc2l0ZS4gRGVmYXVs dDoKLSAgICAgICAgICBub25lLiBQb3NzaWJpbGl0aWVzIGluY2x1ZGU6IC91c3IvbG9jYWwvc3Ns LCAvb3B0L3NzbCwKLSAgICAgICAgICAvdXNyL2xpYi9zc2wsIC4gLiAuICAgICBJZiBDRVJURElS IGlzIGRlZmluZWQsIHRoZSBkaXJlY3RvcnkKLSAgICAgICAgICBtdXN0IGFscmVhZHkgZXhpc3Qu Ci0KLSAgIElORk9ESVIKLSAgICAgICAgICBEaXJlY3RvcnkgaW4gd2hpY2ggdG8gaW5zdGFsbCB0 aGUgQy1LZXJtaXQgdGV4dCBmaWxlcy4gSWYKLSAgICAgICAgICBERVNURElSIGlzIGRlZmluZWQs IHRoaXMgaXMgYSBzdWJkaXJlY3Rvcnkgb2YgREVTVERJUi4gRGVmYXVsdDoKLSAgICAgICAgICBO b25lLiBJZiBJTkZPRElSIGlzIGRlZmluZWQgYnV0IGRvZXMgbm90IGV4aXN0LCB0aGUgbWFrZWZp bGUKLSAgICAgICAgICBhdHRlbXB0cyB0byBjcmVhdGUgaXQsIGFzIHdpdGggREVTVERJUi4KLQot ICAgRXhhbXBsZXM6Ci0KLSAgIG1ha2UgaW5zdGFsbAotICAgICAgICAgIEluc3RhbGxzICJ3ZXJt aXQiIGFzIC91c3IvbG9jYWwvYmluL2tlcm1pdCB3aXRoIHBlcm1pc3Npb25zIDc1NSwKLSAgICAg ICAgICB0aGUgZGVmYXVsdCBvd25lciBhbmQgZ3JvdXAsIGFuZCBubyBzcGVjaWFsIHByaXZpbGVn ZXMuIFRoZQotICAgICAgICAgIG1hbnVhbCBwYWdlIGlzIGluc3RhbGxlZCBhcyAvdXNyL21hbi9t YW4xL2tlcm1pdC4xLiBUZXh0IGZpbGVzCi0gICAgICAgICAgYXJlIG5vdCBjb3BpZWQgYW55d2hl cmUsIG5vciBhcmUgdGhlIHNvdXJjZXMuCi0KLSAgIG1ha2UgTUFORElSPSBpbnN0YWxsCi0gICAg ICAgICAgSnVzdCBsaWtlICJtYWtlIGluc3RhbGwiIGJ1dCBkb2VzIG5vdCBhdHRlbXB0IHRvIGlu c3RhbGwgdGhlCi0gICAgICAgICAgbWFudWFsIHBhZ2UuCi0KLSAgIG1ha2UgREVTVERJUj0vb3B0 L2tlcm1pdCBCSU5ESVI9L2JpbiBTUkNESVI9L3NyYyBJTkZPRElSPS9kb2MgaW5zdGFsbAotICAg ICAgICAgIEluc3RhbGxzIHRoZSBLZXJtaXQgYmluYXJ5ICJ3ZXJtaXQiIGFzIC9vcHQva2VybWl0 L2Jpbi9rZXJtaXQsCi0gICAgICAgICAgcHV0cyB0aGUgc291cmNlIGNvZGUgaW4gL29wdC9rZXJt aXQvc3JjLCBhbmQgcHV0cyB0aGUgdGV4dCBmaWxlcwotICAgICAgICAgIGluIC9vcHQva2VybWl0 L2RvYywgY3JlYXRpbmcgdGhlIGRpcmVjdG9yaWVzIGlmIHRoZXkgZG9uJ3QKLSAgICAgICAgICBh bHJlYWR5IGV4aXN0LCBhbmQgcHV0cyB0aGUgbWFuIHBhZ2UgaW4gdGhlIGRlZmF1bHQgbG9jYXRp b24uCi0KLSAgIG1ha2UgQklORElSPS91c3IvbG9jYWwvYmluIENFUlRESVI9L3Vzci9sb2NhbC9z c2wgaW5zdGFsbAotICAgICAgICAgIEluc3RhbGxzIHRoZSBLZXJiZXJpemVkIEtlcm1pdCBiaW5h cnkgIndlcm1pdCIgYXMKLSAgICAgICAgICAvdXNyL2xvY2FsL2Jpbi9rZXJtaXQsIHB1dHMgdGhl IENBIENlcnRpZmljYXRlcyBmaWxlIGluCi0gICAgICAgICAgL3Vzci9sb2NhbC9zc2wvLCBhbmQg dGhlIG1hbiBwYWdlIGluIHRoZSBub3JtYWwgcGxhY2UuCi0KLSAgIEZvciBkZWZpbml0aXZlIGlu Zm9ybWF0aW9uLCBzZWUgdGhlIG1ha2VmaWxlLiBUaGUgZm9sbG93aW5nIGlzCi0gICBleGNlcnB0 ZWQgZnJvbSB0aGUgOC4wLjIxMSBtYWtlZmlsZToKLQotIyBUaGUgZm9sbG93aW5nIHN5bWJvbHMg YXJlIHVzZWQgdG8gc3BlY2lmeSBsaWJyYXJ5IGFuZCBoZWFkZXIgZmlsZSBsb2NhdGlvbnMKLSMg UmVkZWZpbmUgdGhlbSB0byB0aGUgdmFsdWVzIHVzZWQgb24geW91ciBzeXN0ZW0gYnk6Ci0jIC4g ZWRpdGluZyB0aGlzIGZpbGUKLSMgLiBkZWZpbmluZyB0aGUgdmFsdWVzIG9uIHRoZSBjb21tYW5k IGxpbmUKLSMgLiBkZWZpbmluZyB0aGUgdmFsdWVzIGluIHRoZSBlbnZpcm9ubWVudCBhbmQgdXNl IHRoZSAtZSBvcHRpb24KLSMKLXByZWZpeCAgPSAvdXNyL2xvY2FsCi1zcnByb290ID0gJChwcmVm aXgpCi1zc2xyb290ID0gJChwcmVmaXgpCi1tYW5yb290ID0gJChwcmVmaXgpCi0KLUs0TElCPS1M L3Vzci9rZXJiZXJvcy9saWIKLUs0SU5DPS1JL3Vzci9rZXJiZXJvcy9pbmNsdWRlCi1LNUxJQj0t TC91c3Iva2VyYmVyb3MvbGliCi1LNUlOQz0tSS91c3Iva2VyYmVyb3MvaW5jbHVkZQotU1JQTElC PS1MJChzcnByb290KS9saWIKLVNSUElOQz0tSSQoc3Jwcm9vdCkvaW5jbHVkZQotU1NMTElCPS1M JChzc2xyb290KS9zc2wvbGliCi1TU0xJTkM9LUkkKHNzbHJvb3QpL3NzbC9pbmNsdWRlCi0uLi4K LVdFUk1JVCA9IG1ha2V3aGF0Ci1CSU5BUlkgPSB3ZXJtaXQKLURFU1RESVIgPQotQklORElSID0g JChwcmVmaXgpL2JpbgotTUFORElSID0gJChtYW5yb290KS9tYW4vbWFuMQotTUFORVhUID0gMQot U1JDRElSID0KLUlORk9ESVIgPQotQ0VSVERJUiA9Ci0KLTYuIElOU1RBTExJTkcgVU5JWCBDLUtF Uk1JVCBGUk9NIERPUy1GT1JNQVQgRElTS0VUVEVTCi0KLSAgIFsgWzIwNl1Ub3AgXSBbIFsyMDdd Q29udGVudHMgXSBbIFsyMDhdTmV4dCBdIFsgWzIwOV1QcmV2aW91cyBdCi0KLSAgICAgVGhpcyBz ZWN0aW9uIGlzIG9ic29sZXRlLiBXZSBkb24ndCBkaXN0cmlidXRlIEMtS2VybWl0IG9uIGRpc2tl dHRlcwotICAgICBhbnkgbW9yZSBiZWNhdXNlIChhKXRoZXJlIGlzIG5vIGRlbWFuZCwgYW5kIChi KSBpdCBubyBsb25nZXIgZml0cy4KLQotICAgSWYgeW91IHJlY2VpdmVkIGEgRE9TLWZvcm1hdCBk aXNrZXR0ZSBjb250YWluaW5nIGEgYmluYXJ5IGV4ZWN1dGFibGUKLSAgIEMtS2VybWl0IHByb2dy YW0gcGx1cyBzdXBwb3J0aW5nIHRleHQgZmlsZXMsIGJlIHN1cmUgdG8gY2htb2QgK3ggdGhlCi0g ICBleGVjdXRhYmxlIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHJ1biBpdC4KLQotICAgSW4gdmVyc2lv biA1QSgxOTApIGFuZCBsYXRlciwgYWxsIHRoZSB0ZXh0IGZpbGVzIG9uIHRoZSBDLUtlcm1pdAot ICAgRE9TLWZvcm1hdCBkaXNrZXR0ZXMgYXJlIGluIFVuaXggZm9ybWF0OiBMRiBhdCB0aGUgZW5k IG9mIGVhY2ggbGluZQotICAgcmF0aGVyIHRoYW4gQ1JMRi4gVGhpcyBtZWFucyB0aGF0IG5vIGNv bnZlcnNpb25zIGFyZSBuZWNlc3Nhcnkgd2hlbgotICAgY29weWluZyB0byB5b3VyIFVuaXggZmls ZSBzeXN0ZW0sIGFuZCB0aGF0IGFsbCB0aGUgZmlsZXMgb24gdGhlCi0gICBkaXNrZXR0ZSwgdGV4 dCBhbmQgYmluYXJ5LCBjYW4gYmUgY29waWVkIHRvZ2V0aGVyLiBUaGUgZm9sbG93aW5nCi0gICBj b21tZW50cyBhcHBseSB0byB0aGUgRE9TLWZvcm1hdCBkaXNrZXR0ZXMgZnVybmlzaGVkIHdpdGgg dmVyc2lvbgotICAgNUEoMTg5KSBhbmQgZWFybGllciBvciB0byBvdGhlciBET1MtZm9ybWF0IGRp c2tldHRlcyB5b3UgbWlnaHQgaGF2ZQotICAgb2J0YWluZWQgZnJvbSBvdGhlciBzb3VyY2VzLgot Ci0gICBJZiB5b3UgaGF2ZSByZWNlaXZlZCBDLUtlcm1pdCBvbiBNUy1ET1MgZm9ybWF0IGRpc2tl dHRlcyAoc3VjaCBhcyB0aG9zZQotICAgZGlzdHJpYnV0ZWQgYnkgQ29sdW1iaWEgVW5pdmVyc2l0 eSksIHlvdSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgeW91cgotICAgRE9TLXRvLVVuaXggY29udmVy c2lvbiB1dGlsaXR5IChzdWNoIGFzICJkb3NyZWFkIikgYm90aDogKDEpIGNoYW5nZXMKLSAgIGxp bmUgdGVybWluYXRvcnMgaW4gYWxsIGZpbGVzIGZyb20gY2FycmlhZ2UtcmV0dXJuIGxpbmVmZWVk IChDUkxGKSB0bwotICAganVzdCBsaW5lZmVlZCAoTEYpIChzdWNoIGFzICJkb3NyZWFkIC1hIikg YW5kIHJlbW92ZSBhbnkgQ3RybC1aJ3MsIGFuZAotICAgKDIpIHRoYXQgYWxsIGZpbGVuYW1lcyBh cmUgY29udmVydGVkIGZyb20gdXBwZXJjYXNlIHRvIGxvd2VyY2FzZS4gSWYKLSAgIHRoZXNlIGNv bnZlcnNpb25zIHdlcmUgbm90IGRvbmUsIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgc2hlbGwg c2NyaXB0Ci0gICBvbiB5b3VyIFVuaXggc3lzdGVtIHRvIGRvIHRoZW06Ci0KLS0tLShjdXQgaGVy ZSktLS0KLSMhL2Jpbi9zaAotIwotIyBTaGVsbCBzY3JpcHQgdG8gY29udmVydCBDLUtlcm1pdCBE T1MtZm9ybWF0IGZpbGVzIGludG8gVW5peCBmb3JtYXQuCi0jIExvd2VyY2FzZXMgdGhlIGZpbGVu YW1lcywgc3RyaXBzIG91dCBjYXJyaWFnZSByZXR1cm5zIGFuZCBDdHJsLVoncy4KLSMKLXg9JDEg IyB0aGUgbmFtZSBvZiB0aGUgc291cmNlIGRpcmVjdG9yeQoteT0kMiAjIHRoZSBuYW1lIG9mIHRo ZSB0YXJnZXQgZGlyZWN0b3J5IGlmIFsgJCMgLWx0IDIgXTsgdGhlbgotICBlY2hvICJ1c2FnZTog JDAgc291cmNlLWRpcmVjdG9yeSB0YXJnZXQtZGlyZWN0b3J5IgotICBleGl0IDEKLWZpCi1pZiBj ZCAkMSA7IHRoZW4KLSAgZWNobyAiQ29udmVydGluZyBmaWxlcyBmcm9tICQxIHRvICQyIgotZWxz ZQotICBlY2hvICIkMDogY2Fubm90IGNkIHRvICQxIgotICBleGl0IDEKLWZpCi1mb3IgaSBpbiAq OyBkbwotICBqPWBlY2hvICRpIHwgdHIgJ0EtWicgJ2EteidgCi0gIGVjaG8gJHgvJGkgPVw+ICR5 LyRqCi0gIHRyIC1kICdcMDE1XDAzMicgPCAkaSA+ICR5LyRqCi1kb25lCi0tLS0oY3V0IGhlcmUp LS0tCi0KLSAgIEN1dCBvdXQgdGhpcyBzaGVsbCBzY3JpcHQsIHNhdmUgaXQgYXMgImNvbnZlcnQu c2giIChvciBhbnkgb3RoZXIgbmFtZQotICAgeW91IHByZWZlciksIHRoZW4gImNobW9kICt4IGNv bnZlcnQuc2giLiBUaGVuLCBjcmVhdGUgYSBuZXcsIGVtcHR5Ci0gICBkaXJlY3RvcnkgdG8gcHV0 IHRoZSBjb252ZXJ0ZWQgZmlsZXMgaW4sIGFuZCB0aGVuICJjb252ZXJ0LnNoIC94eHgKLSAgIC95 eXkiIHdoZXJlIC94eHggaXMgdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgUEMt Zm9ybWF0IGZpbGVzCi0gICBhcmUsIGFuZCAveXl5IGlzIHRoZSBuYW1lIG9mIHRoZSBuZXcsIGVt cHR5IGRpcmVjdG9yeS4gVGhlIGNvbnZlcnRlZAotICAgZmlsZXMgd2lsbCBhcHBlYXIgaW4gdGhl IG5ldyBkaXJlY3RvcnkuCi0KLTcuIENIRUNLSU5HIFRIRSBSRVNVTFRTCi0KLSAgIFsgWzIxMF1U b3AgXSBbIFsyMTFdQ29udGVudHMgXSBbIFsyMTJdTmV4dCBdIFsgWzIxM11QcmV2aW91cyBdCi0K LSAgIEZpcnN0IHNvbWUgcXVpY2sgY2hlY2tzIGZvciBwcm9ibGVtcyB0aGF0IGNhbiBiZSBlYXNp bHkgY29ycmVjdGVkIGJ5Ci0gICByZWNvbXBpbGluZyB3aXRoIGRpZmZlcmVudCBvcHRpb25zOgot Ci0gICBESVJFQ1RPUlkgbGlzdGluZyBpcyBnYXJiYWdlCi0gICAgICAgICAgUGVybWlzc2lvbnMs IHNpemUsIGFuZCBkYXRlIGFyZSByYW5kb20gZ2FyYmFnZSAoYnV0IHRoZQotICAgICAgICAgIGZp bGVuYW1lcyBhcmUgY29ycmVjdCkgaW4gYSBDLUtlcm1pdCBESVJFQ1RPUlkgbGlzdGluZy4gT24g c29tZQotICAgICAgICAgIHBsYXRmb3JtcywgdGhlIGxzdGF0KCkgZnVuY3Rpb24gaXMgcHJlc2Vu dCBidXQgc2ltcGx5IGRvZXNuJ3QKLSAgICAgICAgICB3b3JrOyB0cnkgYWRkaW5nIC1ETk9MU1RB VCB0byBDRkxBR1MgYW5kIHJlYnVpbGQuIElmIHRoYXQKLSAgICAgICAgICBkb2Vzbid0IGZpeCBp dCwgYWxzbyBhZGQgLUROT0xJTktCSVRTLiBJZiBpdCdzIHN0aWxsIG5vdCBmaXhlZCwKLSAgICAg ICAgICByZW1vdmUgLUROT0xTVEFUIGFuZCAtRE5PTElOS0JJVFMgYW5kIGFkZCAtRE5PU1lNTElO Sy4KLQotICAgY3Vyc2VzCi0gICAgICAgICAgV2hlbiB5b3UgbWFrZSBhIGNvbm5lY3Rpb24gd2l0 aCBDLUtlcm1pdCBhbmQgdHJhbnNmZXIgZmlsZXMKLSAgICAgICAgICB1c2luZyB0aGUgZnVsbHNj cmVlbiAoY3Vyc2VzKSBmaWxlLXRyYW5zZmVyIGRpc3BsYXksIGFuZCB0aGVuCi0gICAgICAgICAg Z2V0IHRoZSBDLUtlcm1pdD4gcHJvbXB0IGJhY2sgYWZ0ZXJ3YXJkcywgZG8gY2hhcmFjdGVycyBl Y2hvCi0gICAgICAgICAgd2hlbiB5b3UgdHlwZSB0aGVtPyBJZiBub3QsIHRoZSBjdXJzZXMgbGli cmFyeSBoYXMgYWx0ZXJlZCB0aGUKLSAgICAgICAgICBidWZmZXJpbmcgb2YgL2Rldi90dHkuIFRy eSByZWJ1aWxkaW5nIHdpdGggS0ZMQUdTPS1EQ0tfTkVXVEVSTS4KLSAgICAgICAgICBJZiBpdCBh bHJlYWR5IGhhcyAtRENLX05FV1RFUk0gaW4gQ0ZMQUdTLCB0cnkgcmVtb3ZpbmcgaXQuIElmCi0g ICAgICAgICAgdGhhdCBkb2Vzbid0IGhlbHAsIHRoZW4gcmVidWlsZCB3aXRoIC1ETk9OT1NFVEJV RiAoeWVzLCB0d28KLSAgICAgICAgICBOTydzKS4gSWYgbm9uZSBvZiB0aGlzIHdvcmtzIChhbmQg eW91IGNhbid0IGZpeCB0aGUgY29kZSksIHRoZW4KLSAgICAgICAgICBlaXRoZXIgZG9uJ3QgdXNl IHRoZSBmdWxsc2NyZWVuIGRpc3BsYXksIG9yIHJlYnVpbGQgd2l0aAotICAgICAgICAgIC1ETk9D VVJTRVMuCi0KLSAgIEN0cmwtTCBvciBhbnkgU0NSRUVOIGNvbW1hbmQgY3Jhc2hlcyBDLUtlcm1p dDoKLSAgICAgICAgICBSZWJ1aWxkIHdpdGggLUROT1RFUk1DQVAuCi0KLSAgIE5vIHByb21wdCBh ZnRlciBDT05ORUNUOgotICAgICAgICAgIEFmdGVyIGVzY2FwaW5nIGJhY2sgZnJvbSBDT05ORUNU IG1vZGUsIGRvZXMgeW91ciBDLUtlcm1pdD4KLSAgICAgICAgICBwcm9tcHQgZGlzYXBwZWFyPyAo WWV0LCB0eXBpbmcgIj8iIHN0aWxsIHByb2R1Y2VzIGEgY29tbWFuZAotICAgICAgICAgIGxpc3Qs IGV0YykgSW4gdGhhdCBjYXNlLCBhZGQgLURDS0NPTklOVEI0Q0IgdG8gQ0ZMQUdTIGFuZAotICAg ICAgICAgIHJlYnVpbGQuCi0KLSAgIEhlcmUgaXMgYSBtb3JlIHRob3JvdWdoIGNoZWNrbGlzdCBj YW4gdXNlIHRvIHRlbGwgd2hldGhlciB5b3VyIHZlcnNpb24KLSAgIG9mIEMtS2VybWl0IHdhcyBi dWlsdCBjb3JyZWN0bHkgZm9yIHlvdXIgVW5peCBzeXN0ZW0sIHdpdGggaGludHMgb24gaG93Ci0g ICB0byBmaXggb3Igd29yayBhcm91bmQgcHJvYmxlbXM6Ci0KLSAgICBhLiBTdGFydCBDLUtlcm1p dCAodXN1YWxseSBieSB0eXBpbmcgIi4vd2VybWl0IiBpbiB0aGUgZGlyZWN0b3J5IHdoZXJlCi0g ICAgICAgeW91IHJhbiB0aGUgbWFrZWZpbGUpLiBEbyB5b3Ugc2VlIHRoZSBDLUtlcm1pdD4gcHJv bXB0PyBJZiBub3QsCi0gICAgICAgQy1LZXJtaXQgaW5jb3JyZWN0bHkgZGVkdWNlZCB0aGF0IGl0 IHdhcyBydW5uaW5nIGluIHRoZSBiYWNrZ3JvdW5kLgotICAgICAgIFRoZSB0ZXN0IGlzIGluIGNv bmJndCgpIGluIFsyMTRdY2t1dGlvLmMuIElmIHlvdSBjYW4gZml4IGl0IGZvcgotICAgICAgIHlv dXIgc3lzdGVtLCBwbGVhc2Ugc2VuZCBpbiB0aGUgZml4IChIaW50OiByZWFkIGFib3V0ICJQSURf VCIKLSAgICAgICBiZWxvdykuIE90aGVyd2lzZSwgeW91IGNhbiBmb3JjZSBDLUtlcm1pdCB0byBm b3JlZ3JvdW5kIG1vZGUgYnkKLSAgICAgICBzdGFydGluZyBpdCB3aXRoIHRoZSAteiBjb21tYW5k IGxpbmUgb3B0aW9uLCBhcyBpbiAia2VybWl0IC16Iiwgb3IKLSAgICAgICBnaXZpbmcgdGhlIGlu dGVyYWN0aXZlIGNvbW1hbmQgU0VUIEJBQ0tHUk9VTkQgT0ZGLgotICAgIGIuIFdoZW4geW91IHR5 cGUgY2hhcmFjdGVycyBhdCB0aGUgQy1LZXJtaXQgcHJvbXB0LCBkbyB0aGV5IGVjaG8KLSAgICAg ICBpbW1lZGlhdGVseT8gSWYgbm90LCBzb21ldGhpbmcgaXMgd3Jvbmcgd2l0aCBjb25jYigpIGFu ZCBwcm9iYWJseQotICAgICAgIHRoZSBvdGhlciB0ZXJtaW5hbCBtb2RlIHNldHRpbmdzIHJvdXRp bmVzIGluIFsyMTVdY2t1dGlvLmMuIEJlIHN1cmUKLSAgICAgICB5b3UgaGF2ZSB1c2VkIHRoZSBt b3N0IGFwcHJvcHJpYXRlIG1ha2UgZW50cnkuCi0gICAgYy4gQXQgdGhlIEMtS2VybWl0PiBwcm9t cHQsIHR5cGUgInNlbmQgLi8/Ii4gQy1LZXJtaXQgc2hvdWxkIGxpc3QgYWxsCi0gICAgICAgdGhl IGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gSWYgbm90LCBpdCB3YXMgYnVpbHQgZm9y IHRoZQotICAgICAgIHdyb25nIHR5cGUgb2YgVW5peCBmaWxlIHN5c3RlbS4gRGV0YWlscyBiZWxv dy4gSW4gdGhlIG1lYW50aW1lLCB0cnkKLSAgICAgICBTRVQgV0lMRENBUkQtRVhQQU5TSU9OIFNI RUxMIGFzIGEgd29ya2Fyb3VuZC4KLSAgICBkLiBDRCB0byBhIGRpcmVjdG9yeSB0aGF0IGNvbnRh aW5zIGEgdmFyaWV0eSBvZiBmaWxlcywgc3ltbGlua3MsIGFuZAotICAgICAgIHN1YmRpcmVjdG9y aWVzIGFuZCBnaXZlIGEgRElSRUNUT1JZIGNvbW1hbmQgYXQgdGhlIEMtS2VybWl0PgotICAgICAg IHByb21wdC4gRG8gdGhlIHBlcm1pc3Npb25zLCBzaXplLCBhbmQgZGF0ZSBhcHBlYXIgY29ycmVj dD8gSWYgbm90Ci0gICAgICAgc2VlIFsyMTZdU2VjdGlvbiA0LjAuCi0gICAgZS4gQXNzdW1pbmcg eW91ciBwbGF0Zm9ybSBzdXBwb3J0cyBsb25nIGZpbGUgbmFtZXMsIGNyZWF0ZSBhIGZpbGUgd2l0 aAotICAgICAgIGEgbG9uZyBuYW1lIGluIHlvdXIgY3VycmVudCBkaXJlY3RvcnksIGUuZy46Ci0K LSQgdG91Y2ggdGhpc2lzYWZpbGV3aXRoYXZlcnl2ZXJ5dmVyeXZlcnl2ZXJ5dmVyeXZlcnl2ZXJ5 bG9vb29vb29vb25nbmFtZQotCi0gICAgICAgKHlvdSBtaWdodCBuZWVkIHRvIG1ha2UgaXQgbG9u Z2VyIHRoYW4gdGhpcywgcGVyaGFwcyBhcyBsb25nIGFzIDI1NwotICAgICAgIG9yIGV2ZW4gMTAy NSBjaGFyYWN0ZXJzKS4KLSAgICAgICBDaGVjayB3aXRoIGxzIHRvIHNlZSBpZiB5b3VyIHZlcnNp b24gb2YgVW5peCB0cnVuY2F0ZWQgdGhlIG5hbWUuCi0gICAgICAgTm93IHN0YXJ0IEMtS2VybWl0 IGFuZCB0eXBlICJzZW5kIHRoaXNpczxFU0M+Ii4gRG9lcyBLZXJtaXQKLSAgICAgICBjb21wbGV0 ZSB0aGUgbmFtZSwgc2hvd2luZyB0aGUgc2FtZSBuYW1lIGFzIGxzIGRpZD8gSWYgbm90LCB3cm9u ZwotICAgICAgIGZpbGVzeXN0ZW0uIFJlYWQgb24uCi0gICAgZi4gTWFrZSBzdXJlIHRoYXQgS2Vy bWl0IGhhcyB0aGUgbWF4aW11bSBwYXRoIGxlbmd0aCByaWdodC4gSnVzdCB0eXBlCi0gICAgICAg U0hPVyBGSUxFIGFuZCBzZWUgd2hhdCBpdCBzYXlzIGFib3V0IHRoaXMuIElmIGl0IGlzIHRvbyBz aG9ydCwKLSAgICAgICB0aGVyZSBjb3VsZCBiZSBzb21lIHByb2JsZW1zIGF0IHJ1bnRpbWUuIFRv IGNvcnJlY3QsIGxvb2sgaW4KLSAgICAgICBbMjE3XWNrY2RlYi5oIHRvIHNlZSBob3cgdGhlIHN5 bWJvbCBDS01BWFBBVEggaXMgc2V0IGFuZCBtYWtlIGFueQotICAgICAgIG5lZWRlZCBhZGp1c3Rt ZW50cy4KLSAgICBnLiBTZW5kIGEgZmlsZSB0byB5b3VyIG5ldyBLZXJtaXQgcHJvZ3JhbSBmcm9t IGEgZGlmZmVyZW50IEtlcm1pdAotICAgICAgIHByb2dyYW0gdGhhdCBpcyBrbm93biB0byB3b3Jr LiBJcyB0aGUgZGF0ZS90aW1lc3RhbXAgb2YgdGhlIG5ldwotICAgICAgIGZpbGUgaWRlbnRpY2Fs IHRvIHRoZSBvcmlnaW5hbD8gSWYgbm90LCBhZGp1c3RtZW50cyBhcmUgbmVlZGVkIGluCi0gICAg ICAgenN0cmR0KCkgaW4gWzIxOF1ja3VmaW8uYy4KLSAgICBoLiBHbyB0byBhbm90aGVyIGNvbXB1 dGVyIChDb21wdXRlciBCKSBmcm9tIHdoaWNoIHlvdSBjYW4gc2VuZCBmaWxlcwotICAgICAgIHRv IEMtS2VybWl0LiBDb25uZWN0IENvbXB1dGVyIEIgdG8gdGhlIGNvbXB1dGVyIChBKSB3aGVyZSB5 b3UgYXJlCi0gICAgICAgdGVzdGluZyBDLUtlcm1pdC4gVGhlbjoKLSAgICBpLiBTZW5kIGEgZmls ZSBmcm9tIEIgdG8gQS4gTWFrZSBzdXJlIGl0IHRyYW5zZmVycmVkIE9LIGFuZCB3YXMKLSAgICAg ICBjcmVhdGVkIHdpdGggdGhlIHJpZ2h0IG5hbWUuCi0gICAgai4gU2VuZCBhIGZpbGUgZnJvbSBC IHRvIEEsIHNwZWNpZnlpbmcgYW4gImFzLW5hbWUiIHRoYXQgaXMgdmVyeSwgdmVyeQotICAgICAg IGxvbmcgKGxvbmdlciB0aGFuIHRoZSBtYXhpbXVtIG5hbWUgbGVuZ3RoIG9uIGNvbXB1dGVyIEEp LiBDaGVjayB0bwotICAgICAgIG1ha2Ugc3VyZSB0aGF0IHRoZSBmaWxlIHdhcyByZWNlaXZlZCBP SyBhbmQgdGhhdCBpdHMgbmFtZSB3YXMKLSAgICAgICB0cnVuY2F0ZWQgdG8gQ29tcHV0ZXIgQSdz IG1heGltdW0gbGVuZ3RoLiBJZiBub3QsIGNoZWNrIHRoZQotICAgICAgIE1BWE5BTUxFTiBkZWZp bml0aW9uIGluIFsyMTldY2t1ZmlvLmMuCi0gICAgay4gVGVsbCBDLUtlcm1pdCBvbiBDb21wdXRl ciBBIHRvICJzZXQgcmVjZWl2ZSBwYXRobmFtZXMgcmVsYXRpdmUiIGFuZAotICAgICAgIHRoZW4g c2VuZCBpdCBhIGZpbGUgZnJvbSBDb21wdXRlciBCIHNwZWNpZnlpbmcgYW4gYXMtbmFtZSB0aGF0 Ci0gICAgICAgY29udGFpbnMgc2V2ZXJhbCBkaXJlY3Rvcnkgc2VnbWVudHM6Ci0KLXNlbmQgZm9v IGRpcjEvZGlyMi9kaXIzL2ZvbwotCi0gICAgICAgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgZGly MS9kaXIyL2RpcjMvZm9vIHdhcyBjcmVhdGVkIGluIENvbXB1dGVyCi0gICAgICAgQSdzIGN1cnJl bnQgZGlyZWN0b3J5IChpLmUuIHRoYXQgdGhyZWUgbGV2ZWxzIG9mIGRpcmVjdG9yaWVzIHdlcmUK LSAgICAgICBjcmVhdGVkKS4KLSAgICBsLiBSZXBlYXQgc3RlcCBrLCBidXQgbWFrZSBlYWNoIHBh dGggc2VnbWVudCBpbiB0aGUgcGF0aG5hbWUgbG9uZ2VyCi0gICAgICAgdGhhbiBDb21wdXRlciBB J3MgbWF4aW11bSBuYW1lIGxlbmd0aC4gTWFrZSBzdXJlIGVhY2ggZGlyZWN0b3J5Ci0gICAgICAg bmFtZSwgYW5kIHRoZSBmaW5hbCBmaWxlbmFtZSwgd2VyZSB0cnVuY2F0ZWQgcHJvcGVybHkuCi0g ICAgbS4gVHlwZSBDdHJsLUMgKG9yIHdoYXRldmVyIHlvdXIgVW5peCBpbnRlcnJ1cHQgY2hhcmFj dGVyIGlzKSBhdCB0aGUKLSAgICAgICBwcm9tcHQuIERvIHlvdSBnZXQgIl5DLi4uIiBhbmQgYSBu ZXcgcHJvbXB0PyBJZiBpbnN0ZWFkLCB5b3UgZ2V0IGEKLSAgICAgICBjb3JlIGR1bXAgKHRoaXMg c2hvdWxkbid0IGhhcHBlbiBhbnkgbW9yZSkgInJtIGNvcmUiIGFuZCB0aGVuCi0gICAgICAgcmVi dWlsZCB3aXRoIC1ETk9DQ1RSQVAgYWRkZWQgdG8geW91ciBDRkxBR1MuIElmIGl0IGRpZCB3b3Jr LCB0aGVuCi0gICAgICAgdHlwZSBhbm90aGVyIEN0cmwtQy4gSWYgdGhpcyBkb2VzIHRoZSBzYW1l IHRoaW5nIGFzIHRoZSBmaXJzdCBvbmUsCi0gICAgICAgdGhlbiBDdHJsLUMgaGFuZGxpbmcgaXMg T0suIE90aGVyd2lzZSwgdGhlIFNJR0lOVCBzaWduYWwgaXMgZWl0aGVyCi0gICAgICAgbm90IGdl dHRpbmcgcmUtYXJtZWQgKHNob3VsZG4ndCBoYXBwZW4pIG9yIGlzIGJlaW5nIG1hc2tlZCBvZmYK LSAgICAgICBhZnRlciB0aGUgZmlyc3QgdGltZSBpdCBpcyBjYXVnaHQsIGluIHdoaWNoIGNhc2Us IGlmIHlvdXIgVW5peCBpcwotICAgICAgIFBPU0lYLWJhc2VkLCB0cnkgcmVidWlsZGluZyBDLUtl cm1pdCB3aXRoIC1EQ0tfUE9TSVhfU0lHLgotICAgIG4uIFR5cGUgQ3RybC1aIChvciB3aGF0ZXZl ciB5b3VyIFVuaXggc3VzcGVuZCBjaGFyYWN0ZXIgaXMpIHRvIHB1dAotICAgICAgIEMtS2VybWl0 IGluIHRoZSBiYWNrZ3JvdW5kLiBEaWQgaXQgd29yaz8gSWYgbm90aGluZyBoYXBwZW5lZCwgdGhl bgotICAgICAgIChhKXlvdXIgdmVyc2lvbiBvZiBVbml4IGRvZXMgbm90IHN1cHBvcnQgam9iIGNv bnRyb2wsIG9yIChiKSB5b3VyCi0gICAgICAgdmVyc2lvbiBvZiBDLUtlcm1pdCB3YXMgcHJvYmFi bHkgYnVpbHQgd2l0aCAtRE5PSkMuIElmIHlvdXIgc2Vzc2lvbgotICAgICAgIGJlY2FtZSB0b3Rh bGx5IGZyb3plbiwgdGhlbiB5b3UgYXJlIHByb2JhYmx5IHJ1bm5pbmcgQy1LZXJtaXQgb24gYQot ICAgICAgIFVuaXggdmVyc2lvbiB0aGF0IHN1cHBvcnRzIGpvYiBjb250cm9sLCBidXQgdW5kZXIg YSBzaGVsbCB0aGF0Ci0gICAgICAgZG9lc24ndC4gSWYgdGhhdCdzIG5vdCB0aGUgY2FzZSwgbG9v ayBpbiB0aGUgY29uZ20oKSBhbmQgcHN1c3BlbmQoKQotICAgICAgIHJvdXRpbmVzIGluIFsyMjBd Y2t1dGlvLmMgYW5kIHNlZSBpZiB5b3UgY2FuIGZpZ3VyZSBvdXQgd2hhdCdzCi0gICAgICAgd3Jv bmcuIElmIHlvdSBjYW4ndCwgcmVidWlsZCB3aXRoIC1ETk9KQy4KLSAgICBvLiBHaXZlIGEgU0VU IExJTkUgY29tbWFuZCBmb3IgYSBkaWFsb3V0IGRldmljZSwgZS5nLiAic2V0IGxpbmUKLSAgICAg ICAvZGV2L3R0eTAwIi4gSWYgeW91IGdvdCBzb21lIGtpbmQgb2YgcGVybWlzc2lvbiBvciBhY2Nl c3MgZGVuaWVkCi0gICAgICAgbWVzc2FnZSwgZ28gcmVhZCBbMjIxXVNlY3Rpb24gMTAgYW5kIHRo ZW4gY29tZSBiYWNrIGhlcmUuCi0gICAgcC4gQWZ0ZXIgZ2l2aW5nIGEgc3VjY2Vzc2Z1bCBTRVQg TElORSBjb21tYW5kLCB0eXBlICJzaG93IGNvbW0iIHRvIHNlZQotICAgICAgIHRoZSBjb21tdW5p Y2F0aW9uIHBhcmFtZXRlcnMuIERvIHRoZXkgbWFrZSBzZW5zZT8KLSAgICBxLiBUeXBlICJzZXQg c3BlZWQgPyIgYW5kIG9ic2VydmUgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHNwZWVkcy4gSXMgaXQK LSAgICAgICB3aGF0IHlvdSBleHBlY3RlZD8gSWYgbm90LCBzZWUgWzIyMl1TZWN0aW9uIDIpIG9m IHRoZQotICAgICAgIFsyMjNdQ29uZmlndXJhdGlvbnMgT3B0aW9ucyBkb2N1bWVudC4KLSAgICBy LiBHaXZlIGEgU0VUIFNQRUVEIGNvbW1hbmQgdG8gY2hhbmdlIHRoZSBkZXZpY2UncyBzcGVlZC4g RGlkIGl0IHdvcms/Ci0gICAgICAgKFR5cGUgInNob3cgY29tbSIgYWdhaW4gdG8gY2hlY2suKQot ICAgIHMuIFRyeSBkaWFsaW5nIG91dDogU0VUIE1PREVNIFRZUEUgLCBTRVQgTElORSAsIFNFVCBT UEVFRCAsIERJQUwgLiBJZgotICAgICAgIGl0IGRvZXNuJ3Qgd29yaywga2VlcCByZWFkaW5nLiBB ZnRlciBkaWFsaW5nLCBjYW4geW91IFJFRElBTD8KLSAgICB0LiBJZiB5b3VyIHZlcnNpb24gd2Fz IGJ1aWx0IHdpdGggVENQL0lQIG5ldHdvcmsgc3VwcG9ydCwgdHJ5IHRoZQotICAgICAgIFRFTE5F VCBjb21tYW5kLgotICAgIHUuIFRyYW5zZmVyIHNvbWUgZmlsZXMgaW4gcmVtb3RlIG1vZGUgb24g aW5jb21pbmcgYXN5bmNocm9ub3VzIHNlcmlhbAotICAgICAgIChkaXJlY3Qgb3IgbW9kZW0pIGNv bm5lY3Rpb25zLCBhbmQgb24gaW5jb21pbmcgbmV0d29yayAodGVsbmV0LAotICAgICAgIHJsb2dp biwgdGVybWluYWwgc2VydmVyKSBjb25uZWN0aW9ucy4gSWYgeW91IGdldCBsb3RzIG9mIGVycm9y cywKLSAgICAgICB0cnkgZGlmZmVyZW50IFNFVCBGTE9XIHNldHRpbmdzIG9uIHRoZSByZW1vdGUg S2VybWl0IHByb2dyYW0uCi0gICAgdi4gRXN0YWJsaXNoIGEgc2VyaWFsIGNvbm5lY3Rpb24gZnJv bSBDLUtlcm1pdCB0byBhbm90aGVyIGNvbXB1dGVyCi0gICAgICAgKGRpcmVjdCBvciBkaWFsZWQp IGFuZCB0cmFuc2ZlciBzb21lIGZpbGVzLiBJZiB5b3UgaGF2ZSBuZXR3b3JrCi0gICAgICAgc3Vw cG9ydCwgZG8gdGhlIHNhbWUgd2l0aCBhIG5ldHdvcmsgY29ubmVjdGlvbi4KLSAgICB3LiBJZiB5 b3VyIHZlcnNpb24gd2FzIGJ1aWx0IHdpdGggZnVsbHNjcmVlbiBmaWxlIHRyYW5zZmVyIGRpc3Bs YXkKLSAgICAgICBzdXBwb3J0LCBjaGVjayB0aGF0IGl0IHdvcmtzIGR1cmluZyBsb2NhbC1tb2Rl IGZpbGUgdHJhbnNmZXIuIEFsc28sCi0gICAgICAgY2hlY2sgQy1LZXJtaXQncyBvcGVyYXRpb24g YWZ0ZXJ3YXJkczogaXMgdGhlIGVjaG9pbmcgZnVubnk/IGV0YwotICAgICAgIGV0Yy4gSWYgdGhl cmUgYXJlIHByb2JsZW1zLCBzZWUgWzIyNF1TZWN0aW9uIDQuCi0gICAgeC4gSWYgeW91ciB2ZXJz aW9uIHdhcyBidWlsdCB3aXRoIHNjcmlwdCBwcm9ncmFtbWluZyBsYW5ndWFnZSBzdXBwb3J0LAot ICAgICAgIFRBS0UgdGhlIGNrZWRlbW8ua3NjIGZpbGUgdG8gZ2l2ZSBpdCBhIHdvcmtvdXQuCi0g ICAgeS4gRG9lcyBDLUtlcm1pdCBpbnRlcmxvY2sgY29ycmVjdGx5IHdpdGggVVVDUC1mYW1pbHkg cHJvZ3JhbXMgKGN1LAotICAgICAgIHRpcCwgdXVjcCwgZXRjKT8gSWYgbm90LCByZWFkIHRoZSBz ZWN0aW9uIFsyMjVdRElBTElORyBPVVQgQU5ECi0gICAgICAgQ09PUkRJTkFUSU5HIFdJVEggVVVD UCBiZWxvdy4KLSAgICB6LiBNb2RlbSBzaWduYWxzLi4uIEdpdmUgYSBTRVQgTElORSBjb21tYW5k IHRvIGEgc2VyaWFsIGRldmljZSBhbmQKLSAgICAgICB0aGVuIHR5cGUgdGhlIFNIT1cgTU9ERU0g Y29tbWFuZC4gSWYgaXQgc2F5cyAiTW9kZW0gc2lnbmFscwotICAgICAgIHVuYXZhaWxhYmxlIGlu IHRoaXMgdmVyc2lvbiBvZiBLZXJtaXQiLCB0aGVuIHlvdSBtaWdodCB3YW50IHRvIGxvb2sKLSAg ICAgICBhdCB0aGUgdHRnbWRtKCkgcm91dGluZSBpbiBbMjI2XWNrdXRpby5jIGFuZCBhZGQgdGhl IG5lZWRlZCBjb2RlIC0tCi0gICAgICAgaWYgaW5kZWVkIHlvdXIgdmVyc2lvbiBvZiBVbml4IHBy b3ZpZGVzIGEgd2F5IHRvIGdldCBtb2RlbSBzaWduYWxzCi0gICAgICAgKHNvbWUgZG9uJ3Q7IGUu Zy4gbW9kZW0gc2lnbmFscyBhcmUgYSBmb3JlaWduIGNvbmNlcHQgdG8gUE9TSVgsCi0gICAgICAg cmVxdWlyaW5nIHBvbGl0aWNhbGx5IGluY29ycmVjdCB3b3JrYXJvdW5kcykuCi0gICBhYS4gSWYg aXQgc2F5cyAiTW9kZW0gc2lnbmFscyB1bmF2YWlsYWJsZSIsIHRoZW4gaXQgaXMgbGlrZWx5IHRo YXQgdGhlCi0gICAgICAgQVBJIGZvciBnZXR0aW5nIG1vZGVtIHNpZ25hbHMgaXMgcHJvdmlkZWQs IGJ1dCBpdCBkb2Vzbid0IGFjdHVhbGx5Ci0gICAgICAgZG8gYW55dGhpbmcgKGUuZy4gaW9jdGwo dHR5ZmQsVElPQ01HRVQsJngpIHJldHVybnMgRUlOVkFMKS4KLSAgIGFiLiBJbiBhbnkgY2FzZSwg aXQgc3RpbGwgc2hvdWxkIGJlIGFibGUgdG8gbWFuaXB1bGF0ZSB0aGUgRFRSIHNpZ25hbC4KLSAg ICAgICBUbyB0ZXN0LCBTRVQgTElORSAsIFNFVCBNT0RFTSBOT05FLCBhbmQgSEFOR1VQLiBUaGUg RFRSIGxpZ2h0Ci0gICAgICAgc2hvdWxkIGdvIG91dCBtb21lbnRhcmlseS4gSWYgaXQgZG9lc24n dCwgc2VlIGlmIHlvdSBjYW4gYWRkIHRoZQotICAgICAgIG5lZWRlZCBjb2RlIGZvciB5b3VyIHN5 c3RlbSB0byB0aGUgdHRoYW5nKCkgcm91dGluZSBpbgotICAgICAgIFsyMjddY2t1dGlvLmMuCi0g ICBhYy4gSWYgeW91ciB2ZXJzaW9uIG9mIEtlcm1pdCBoYXMgdGhlIFNFVCBGTE9XIFJUUy9DVFMg Y29tbWFuZCwgY2hlY2sKLSAgICAgICB0byBzZWUgaWYgaXQgd29ya3M6IGdpdmUgS2VybWl0IHRo aXMgY29tbWFuZCwgc2V0IHlvdXIgbW9kZW0gZm9yCi0gICAgICAgUlRTL0NUUywgdHJhbnNmZXIg c29tZSBmaWxlcyAodXNpbmcgYmlnIHBhY2tldCBhbmQgd2luZG93IHNpemVzKQotICAgICAgIGFu ZCB3YXRjaCB0aGUgUlRTIGFuZCBDVFMgbGlnaHRzIG9uIHRoZSBtb2RlbS4gSWYgdGhleSBnbyBv biBhbmQKLSAgICAgICBvZmYgKGFuZCBLZXJtaXQgZG9lcyBub3QgZ2V0IHBhY2tldCBlcnJvcnMp LCB0aGVuIGl0IHdvcmtzLiBJZiB5b3VyCi0gICAgICAgdmVyc2lvbiBvZiBLZXJtaXQgZG9lcyBu b3QgaGF2ZSB0aGlzIGNvbW1hbmQsIGJ1dCB5b3VyIHZlcnNpb24gb2YKLSAgICAgICBVbml4IGRv ZXMgc3VwcG9ydCBoYXJkd2FyZSBmbG93IGNvbnRyb2wsIHRha2UgYSBsb29rIGF0IHRoZQotICAg ICAgIHR0aGZsb3coKSBjb21tYW5kIGluIFsyMjhdY2t1dGlvLmMgYW5kIHNlZSBpZiB5b3UgY2Fu IGFkZCB0aGUKLSAgICAgICBuZWVkZWQgY29kZSAoc2VlIHRoZSBzZWN0aW9uIG9uIFsyMjldSEFS RFdBUkUgRkxPVyBDT05UUk9MIGJlbG93KS4KLSAgICAgICAoQW5kIHBsZWFzZSBbMjMwXXNlbmQg YmFjayBhbnkgYWRkZWQgY29kZSwgc28gdGhhdCBvdGhlcnMgY2FuCi0gICAgICAgYmVuZWZpdCBm cm9tIGl0IGFuZCBpdCBjYW4gYmUgY2FycmllZCBmb3J3YXJkIGludG8gZnV0dXJlCi0gICAgICAg cmVsZWFzZXMuKQotICAgYWQuIElmIEMtS2VybWl0IHN0YXJ0cyBub3JtYWxseSBhbmQgaXNzdWVz IGl0cyBwcm9tcHQsIGVjaG9pbmcgaXMKLSAgICAgICBub3JtYWwsIGV0YywgYnV0IHRoZW4gYWZ0 ZXIgcmV0dXJuaW5nIGZyb20gYSBDT05ORUNUIHNlc3Npb24sIHRoZQotICAgICAgIHByb21wdCBu byBsb25nZXIgYXBwZWFycywgdHJ5IHJlYnVpbGRpbmcgd2l0aCAtRENLQ09OSU5UQjRDQi4KLSAg IGFlLiAoOC4wLjIwNiBvciBsYXRlcikgVHlwZSBzb21lIGNvbW1hbmRzIGF0IHRoZSBDLUtlcm1p dCBwcm9tcHQuIENhbgotICAgICAgIHlvdSB1c2UgdGhlIFVwLWFycm93IGFuZCBEb3duLWFycm93 IGtleXMgb24geW91ciBrZXlib2FyZCB0byBhY2Nlc3MKLSAgICAgICBLZXJtaXQncyBjb21tYW5k IGhpc3Rvcnk/IElmIG5vdCwgYW5kIHlvdSdyZSBhIHByb2dyYW1tZXIsIHRha2UgYQotICAgICAg IGxvb2sgYXQgdGhlIFVTRV9BUlJPV0tFWVMgc2VjdGlvbnMgb2YgY2t1Y21kLmMuCi0KLTguIFJF RFVDSU5HIFRIRSBTSVpFIE9GIFRIRSBFWEVDVVRBQkxFIFBST0dSQU0gSU1BR0UKLQotICAgWyBb MjMxXVRvcCBdIFsgWzIzMl1Db250ZW50cyBdIFsgWzIzM11OZXh0IF0gWyBbMjM0XVByZXZpb3Vz IF0KLQotICAgQWxzbyBzZWU6IFsyMzVdQy1LZXJtaXQgQ29uZmlndXJhdGlvbiBPcHRpb25zCi0K LSAgICBhLiBNYW55IG9mIEMtS2VybWl0J3Mgb3B0aW9ucyBhbmQgZmVhdHVyZXMgY2FuIGJlIGRl c2VsZWN0ZWQgYXQKLSAgICAgICBjb21waWxlIHRpbWUuIFRoZSBncmVhdGVzdCBzYXZpbmdzIGF0 IHRoZSBsZWFzdCBzYWNyaWZpY2UgaW4KLSAgICAgICBmdW5jdGlvbmFsaXR5IGlzIHRvIGRpc2Fi bGUgdGhlIGxvZ2dpbmcgb2YgZGVidWcgaW5mb3JtYXRpb24gYnkKLSAgICAgICBkZWZpbmluZyBO T0RFQlVHIGR1cmluZyBjb21waWxhdGlvbi4gU2VlIHRoZSBbMjM2XUNvbmZpZ3VyYXRpb25zCi0g ICAgICAgT3B0aW9ucyBkb2N1bWVudCBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi4KLSAgICBiLiBV c2Ugc2hhcmVkIGxpYnJhcmllcyByYXRoZXIgdGhhbiBzdGF0aWMgbGlua2luZy4gVGhpcyBpcyB0 aGUKLSAgICAgICBkZWZhdWx0IG9uIG1hbnkgVW5peCBzeXN0ZW1zIGFueXdheS4gSG93ZXZlciwg ZXhlY3V0YWJsZXMgYnVpbHQgZm9yCi0gICAgICAgZHluYW1pYyBsaW5raW5nIHdpdGggc2hhcmVk IGxpYnJhcmllcyBhcmUgZ2VuZXJhbGx5IG5vdCBwb3J0YWJsZQotICAgICAgIGF3YXkgZnJvbSB0 aGUgbWFjaGluZSB0aGV5IHdlcmUgYnVpbHQgb24sIHNvIHRoaXMgaXMgcmVjb21tZW5kZWQgaWYK LSAgICAgICB0aGUgYmluYXJ5IGlzIGZvciB5b3VyIHVzZSBvbmx5LgotICAgIGMuIE1vc3QgVW5p eCBzeXN0ZW1zIGhhdmUgYSAic3RyaXAiIGNvbW1hbmQgdG8gcmVtb3ZlIHN5bWJvbCB0YWJsZQot ICAgICAgIGluZm9ybWF0aW9uIGZyb20gYW4gZXhlY3V0YWJsZSBwcm9ncmFtIGltYWdlLiAibWFu IHN0cmlwIiBmb3IKLSAgICAgICBmdXJ0aGVyIGluZm9ybWF0aW9uLiBUaGUgc2FtZSBlZmZlY3Qg Y2FuIGJlIGFjaGlldmVkIGJ5IGluY2x1ZGluZwotICAgICAgICItcyIgYW1vbmcgdGhlIGxpbmsg ZmxhZ3Mgd2hlbiBidWlsZGluZyBDLUtlcm1pdC4KLSAgICBkLiBTQ08sIEludGVyYWN0aXZlLCBh bmQgc29tZSBvdGhlciBVbml4IHZlcnNpb25zIGhhdmUgYW4gIm1jcyIKLSAgICAgICBjb21tYW5k LiAibWNzIC1kIHdlcm1pdCIgY2FuIGJlIHVzZWQgdG8gZGVsZXRlIHRoZSBjb250ZW50cyBvZiB0 aGUKLSAgICAgICAiLmNvbW1lbnQiIHNlY3Rpb24gZnJvbSB0aGUgZXhlY3V0YWJsZSBwcm9ncmFt IGltYWdlLgotICAgIGUuIE1hbnkgbW9kZXJuIG9wdGltaXplcnMgY2FuIGJlIGluc3RydWN0ZWQg dG8gb3B0aW1pemUgZm9yIHNwYWNlCi0gICAgICAgcmF0aGVyIHRoYW4gZXhlY3V0aW9uIGVmZmlj aWVuY3kuIENoZWNrIHRoZSBDRkxBR1MgaW4gdGhlIG1ha2VmaWxlCi0gICAgICAgdGFyZ2V0LCBh ZGp1c3QgYXMgZGVzaXJlZC4KLQotOS4gVU5JWCBWRVJTSU9OUwotCi0gICBbIFsyMzddVG9wIF0g WyBbMjM4XUNvbnRlbnRzIF0gWyBbMjM5XU5leHQgXSBbIFsyNDBdUHJldmlvdXMgXQotCi0gICBT RUNUSU9OIENPTlRFTlRTCi0KLTkuMSBbMjQxXVN0YW5kYXJkcwotICAgICA5LjEuMS4gWzI0Ml1Q T1NJWAotICAgICA5LjEuMi4gWzI0M11BTlNJIEMKLSAgICAgOS4xLjMuIFsyNDRdT3RoZXIgU3Rh bmRhcmRzCi05LjIuIFsyNDVdTGlicmFyeSBJc3N1ZXMKLTkuMy4gWzI0Nl1Vbml4IEZpbGUgU3lz dGVtIFBlY3VsaWFyaXRpZXMKLTkuNC4gWzI0N11IYXJkd2FyZSBGbG93IENvbnRyb2wKLTkuNS4g WzI0OF1UZXJtaW5hbCBTcGVlZHMKLTkuNi4gWzI0OV1NaWxsaXNlY29uZCBTbGVlcHMKLTkuNy4g WzI1MF1Ob25kZXN0cnVjdGl2ZSBJbnB1dCBCdWZmZXIgUGVla2luZwotOS44LiBbMjUxXU90aGVy IFN5c3RlbS1EZXBlbmRlbnQgRmVhdHVyZXMKLTkuOS4gWzI1Ml1UZXJtaW5hbCBJbnRlcnJ1cHRp b24KLQotICAgVGhlcmUgYXJlIHNldmVyYWwgbWFqb3IgdmFyaWV0aWVzIG9mIFVuaXg6IEJlbGwg TGFib3JhdG9yaWVzIFNldmVudGgKLSAgIEVkaXRpb24sIEFUJlQgU3lzdGVtIFYsIEJlcmtlbGV5 IFN0YW5kYXJkIERpc3RyaWJ1dGlvbiAoQlNEKSwgYW5kCi0gICBQT1NJWC4gRWFjaCBoYXMgbWFu eSwgbWFueSBzdWJ2YXJpZXRpZXMgYW5kIGRlc2NlbmRlbnRzLCBhbmQgdGhlcmUgYXJlCi0gICBh bHNvIGh5YnJpZHMgdGhhdCBleGhpYml0IHN5bXB0b21zIG9mIHR3byBvciBtb3JlIHZhcmlldGll cywgcGx1cwotICAgc3BlY2lhbCBxdWlya3Mgb2YgdGhlaXIgb3duLgotCi0gICBTZXZlbnRoIGVk aXRpb24gdmVyc2lvbnMgb2YgQy1LZXJtaXQgaW5jbHVkZSB0aGUgY29tcGlsZS10aW1lIG9wdGlv bgotICAgLURWNyBpbiB0aGUgQ0ZMQUdTIHN0cmluZyBpbiB0aGUgbWFrZWZpbGUgdGFyZ2V0LiBW YXJpb3VzIFY3LWJhc2VkCi0gICBpbXBsZW1lbnRhdGlvbnMgYXJlIGFsc28gc3VwcG9ydGVkOiAt RENPSEVSRU5ULCAtRE1JTklYLCBldGMuCi0KLSAgIEFUJlQtYmFzZWQgdmVyc2lvbnMgb2YgVW5p eCBLZXJtaXQgaW5jbHVkZSB0aGUgY29tcGlsZS10aW1lIG9wdGlvbgotICAgLURBVFRTViAoc3Rh bmRpbmcgZm9yIEFUJm1wO1QgVW5peCBTeXN0ZW0gVikuIFRoaXMgYXBwbGllcyB0byBTeXN0ZW0K LSAgIElJSSBhbmQgdG8gU3lzdGVtIFYgdXAgdG8gYW5kIGluY2x1ZGluZyBSZWxlYXNlIDIuIEZv ciBTeXN0ZW0gViBSZWxlYXNlCi0gICAzLCB0aGUgZmxhZyAtRFNWUjMgc2hvdWxkIGJlIHVzZWQg aW5zdGVhZCAod2hpY2ggYWxzbyBpbXBsaWVzIC1EQVRUU1YpLgotICAgVGhpcyBpcyBiZWNhdXNl IHRoZSBkYXRhIHR5cGUgb2Ygc2lnbmFsKCkgYW5kIHNldmVyYWwgb3RoZXIgZnVuY3Rpb25zCi0g ICB3YXMgY2hhbmdlZCBiZXR3ZWVuIFNWUjIgYW5kIFNWUjMuIEZvciBTeXN0ZW0gViBSZWxlYXNl IDQsIGluY2x1ZGUKLSAgIC1EU1ZSNCBiZWNhdXNlIG9mIGNoYW5nZXMgaW4gVVVDUCBsb2NrZmls ZSBjb252ZW50aW9uczsgdGhpcyBhbHNvCi0gICBpbXBsaWVzIC1EU1ZSMyBhbmQgLURBVFRTVi4K LQotICAgRm9yIEJTRCwgdGhlIGZsYWcgLUJTRHh4IG11c3QgYmUgaW5jbHVkZWQsIHdoZXJlIHh4 IGlzIHRoZSBCU0QgdmVyc2lvbgotICAgbnVtYmVyLCBmb3IgZXhhbXBsZSBCU0Q0IChmb3IgdmVy c2lvbiA0LjIgb3IgbGF0ZXIsIHVzaW5nIG9ubHkgNC4yCi0gICBmZWF0dXJlcyksIC1EQlNENDEg KGZvciBCU0QgNC4xIG9ubHkpLCAtREJTRDQzIChmb3IgNC4zKSwgLURCU0QyOSAoQlNECi0gICAy LjkgZm9yIERFQyBQRFAtMTFzKS4gLURCU0Q0NCBpcyBmb3IgNC40QlNELCB3aGljaCBpcyB0aGUg YmFzaXMgb2YKLSAgIEZyZWVCU0QsIE5ldEJTRCwgT3BlbkJTRCwgQlNESSwgYW5kIE1hYyBPUyBY LCBhbmQgd2hpY2ggY29udGFpbnMgbWFueQotICAgUE9TSVggZmVhdHVyZXMsIGFuZCBoYXMgbGl0 dGxlIHJlbGF0aW9uIHRvIDQuM0JTRCBhbmQgZWFybGllci4KLQotICAgRm9yIFBPU0lYLCBpbmNs dWRlIHRoZSBmbGFnIC1EUE9TSVguIFBPU0lYIGRlZmluZXMgYSB3aG9sZSBuZXcgc2V0IG9mCi0g ICB0ZXJtaW5hbCBpL28gZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCBmb3VuZCBpbiB0cmFkaXRpb25h bCBBVCZUIG9yCi0gICBCZXJrZWxleSBpbXBsZW1lbnRhdGlvbnMsIGFuZCBhbHNvIGRlZmluZXMg dGhlIHN5bWJvbCBfUE9TSVhfU09VUkNFLAotICAgd2hpY2ggaXMgdXNlZCBpbiBtYW55IHN5c3Rl bSBhbmQgbGlicmFyeSBoZWFkZXIgZmlsZXMsIG1haW5seSB0bwotICAgZGlzYWJsZSBub24tUE9T SVggKGkuZS4gdXNlZnVsKSBmZWF0dXJlcy4KLQotICAgTm90ZSAoY2lyY2EgMTk5Nyk6IEluIG9y ZGVyIHRvIGVuYWJsZSBzZXJpYWwgc3BlZWRzIGhpZ2hlciB0aGFuIDM4NDAwCi0gICBicHMsIGl0 IGlzIGdlbmVyYWxseSBuZWNlc3NhcnkgdG8gYWRkIC1EUE9TSVggKGFtb25nIG90aGVyIHRoaW5n cyksCi0gICBzaW5jZSB0aGUgb2xkZXIgdGVybWluYWwgQVBJcyBjYW4gbm90IGFjY29tbW9kYXRl IHRoZSBuZXcgc3BlZWRzIC0tIG91dAotICAgbycgYml0cy4gQnV0IHRoaXMgb2Z0ZW4gYWxzbyBt ZWFucyB3aG9sZXNhbGUgY29udmVyc2lvbiB0byBQT1NJWCBBUElzLgotICAgSW4gZ2VuZXJhbCwg anVzdCB0cnkgYWRkaW5nIC1EUE9TSVggYW5kIHRoZW4gc2VlIHdoYXQgZ29lcyB3cm9uZy4gQmUK LSAgIHdhcnkgb2YgZmVhdHVyZXMgZGlzYXBwZWFyaW5nOiB3aGVuIF9QT1NJWF9TT1VSQ0UgaXMg ZGVmaW5lZCwgYWxsIHNvcnRzCi0gICBvZiB0aGluZ3MgdGhhdCB3ZXJlIHBlcmZlY3RseSBPSyBi ZWZvcmUgc3VkZGVubHkgYmVjb21lIHBvbGl0aWNhbGx5Ci0gICBpbmNvcnJlY3QgLS0gbGlrZSBy ZWFkaW5nIG1vZGVtIHNpZ25hbHMsIGRvaW5nIGhhcmR3YXJlIGZsb3cgY29udHJvbCwKLSAgIGV0 Yy4gUE9TSVggd2FzIGV2aWRlbnRseSBub3QgZGVzaWduZWQgd2l0aCBzZXJpYWwgY29tbXVuaWNh dGlvbiBpbgotICAgbWluZCEKLQotICAgQ2FzZSBpbiBwb2ludDogSW4gVW5peFdhcmUgNy4wLCAj ZGVmaW5lJ2luZyBQT1NJWCBjYXVzZXMgc3RyaWN0bmVzcwotICAgY2xhdXNlcyBpbiB0aGUgaGVh ZGVyIGZpbGVzIHRvIHRha2UgZWZmZWN0LiBUaGVzZSBwcmV2ZW50IDxzeXMvdGltZS5oPgotICAg ZnJvbSBkZWZpbmluZyB0aGUgdGltZXZhbCBhbmQgdGltZXpvbmUgc3RydWN0cywgd2hpY2ggYXJl IG5lZWRlZCBmb3IKLSAgIGFsbCBzb3J0cyBvZiB0aGluZ3MgKGxpa2Ugc2VsZWN0KCkpLiBUaHVz LCBpZiB3ZSB3YW50IHRoZSBoaWdoIHNlcmlhbAotICAgc3BlZWRzLCB3ZSBoYXZlIHRvIGNpcmN1 bXZlbnQgdGhlIFBPU0lYIGNsYXVzZXMuCi0KLSAgIFNpbWlsYXJseSBpbiBTQ08gT3BlblNlcnZl ciBSNS4wLjQgd2hlcmUsIGFnYWluLCB3ZSBtdXN0IHVzZSB0aGUgUE9TSVgKLSAgIEFQSXMgdG8g Z2V0IGF0IHNlcmlhbCBzcGVlZHMgaGlnaGVyIHRoYW4gMzg0MDAsIGJ1dCB0aGVuIGRvaW5nIHNv Ci0gICByZW1vdmVzIGhhcmR3YXJlIGZsb3cgY29udHJvbCAtLSBqdXN0IHdoZW4gd2UgbmVlZCBp dCBtb3N0ISBJbiBjYXNlcwotICAgbGlrZSB0aGlzLCBkaXJ0eSB0cmlja3MgYXJlIHRoZSBvbmx5 IHJlY291cnNlIChzZWFyY2ggZm9yIFNDT19PU1I1MDQgaW4KLSAgIFsyNTNdY2t1dGlvLmMgZm9y IGV4YW1wbGVzKS4KLQotICAgRm9yIHJlYXNvbnMgbGlrZSB0aGlzLCBVbml4IGltcGxlbWVudGF0 aW9ucyB0ZW5kIHRvIGJlIG5laXRoZXIgcHVyZQotICAgQVQmVCBub3IgcHVyZSBCU0Qgbm9yIHB1 cmUgUE9TSVgsIGJ1dCBhIG1peHR1cmUgb2YgdHdvIG9yIG1vcmUgb2YKLSAgIHRoZXNlLCB3aXRo ICJjb21wYXRpYmlsaXR5IGZlYXR1cmVzIiBhbGxvd2luZyBkaWZmZXJlbnQgdmFyaWV0aWVzIG9m Ci0gICBwcm9ncmFtcyB0byBiZSBidWlsdCBvbiB0aGUgc2FtZSBjb21wdXRlci4gSW4gZ2VuZXJh bCwgS2VybWl0IHRyaWVzIG5vdAotICAgdG8gbWl4IGFuZCBtYXRjaCBidXQgdG8ga2VlcCBhIGNv bnNpc3RlbnQgcmVwZXJ0b2lyZSB0aHJvdWdob3V0LgotICAgSG93ZXZlciwgdGhlcmUgYXJlIGNl cnRhaW4gVW5peCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBvbmx5IHdvcmsgd2hlbiB5b3UKLSAgIG1p eCBhbmQgbWF0Y2guIEZvciBleGFtcGxlLCB0aGUgU2lsaWNvbiBHcmFwaGljcyBJUklYIG9wZXJh dGluZyBzeXN0ZW0KLSAgIChwcmlvciB0byB2ZXJzaW9uIDMuMykgaXMgYW4gQVQmVCBVbml4IGJ1 dCB3aXRoIGEgQlNEIGZpbGUgc3lzdGVtLiBUaGUKLSAgIG9ubHkgd2F5IHlvdSBjYW4gYnVpbGQg S2VybWl0IHN1Y2Nlc3NmdWxseSBmb3IgdGhpcyBjb25maWd1cmF0aW9uIGlzIHRvCi0gICBpbmNs dWRlIC1EU1ZSMyBwbHVzIHRoZSBzcGVjaWFsIG9wdGlvbiAtRExPTkdGTiwgbWVhbmluZyAicHJl dGVuZCBJIHdhcwotICAgYnVpbHQgd2l0aCAtREJTRHh4IHdoZW4gaXQncyB0aW1lIHRvIGNvbXBp bGUgZmlsZS1yZWxhdGVkIGNvZGUiLiBTZWUKLSAgIHRoZSAiaXJpcyIgbWFrZWZpbGUgdGFyZ2V0 LgotCi05LjEuIFN0YW5kYXJkcwotCi0gICBbIFsyNTRdVG9wIF0gWyBbMjU1XVNlY3Rpb24gQ29u dGVudHMgXSBbIFsyNTZdQ29udGVudHMgXSBbIFsyNTddTmV4dCBdCi0KLSAgIFNVQlNFQ1RJT04g Q09OVEVOVFMKLQotOS4xLjEuIFsyNThdUE9TSVgKLTkuMS4yLiBbMjU5XUFOU0kgQwotOS4xLjMu IFsyNjBdT3RoZXIgU3RhbmRhcmRzCi0KLSAgIEluIGVkaXRzIDE2Ni0xNjcgKDE5ODgtODkpLCBD LUtlcm1pdCB3YXMgaGVhdmlseSBtb2RpZmllZCB0byB0cnkgdG8KLSAgIGtlZXAgYWJyZWFzdCBv ZiBuZXcgc3RhbmRhcmRzIHdoaWxlIHN0aWxsIHJlbWFpbmluZyBjb21wYXRpYmxlIHdpdGggb2xk Ci0gICB2ZXJzaW9ucyBvZiBDIGFuZCBVbml4LiBUaGVyZSBhcmUgdHdvIG5ldyBzdGFuZGFyZHMg b2YgaW50ZXJlc3Q6IEFOU0kgQwotICAgKGFzIGRlc2NyaWJlZCBpbiBLZXJuaWdoYW4gYW5kIFJp dGNoaWUsICJUaGUgQyBQcm9ncmFtbWluZyBMYW5ndWFnZSIsCi0gICBTZWNvbmQgRWRpdGlvbiwg UHJlbnRpY2UgSGFsbCwgMTk4OCkgYW5kIFBPU0lYLjEgKElFRUUgU3RhbmRhcmQgMTAwMy4xCi0g ICBhbmQgSVNPL0lFQyA5OTQ1LTEsIDE5OTAsICJQb3J0YWJsZSBPcGVyYXRpbmcgU3lzdGVtIElu dGVyZmFjZSIpLiBUaGVzZQotICAgdHdvIHN0YW5kYXJkcyBoYXZlIG5vdGhpbmcgdG8gZG8gd2l0 aCBlYWNoIG90aGVyOiB5b3UgY2FuIGJ1aWxkCi0gICBDLUtlcm1pdCB3aXRoIGEgbm9uLUFOU0kg Y29tcGlsZXIgZm9yIGEgUE9TSVggc3lzdGVtLCBvciBmb3IgYQotICAgbm9uLVBPU0lYIHN5c3Rl bSB3aXRoIHdpdGggYW4gQU5TSSBjb21waWxlci4KLQotOS4xLjEuIFBPU0lYCi0KLSAgIFBPU0lY LjEgZGVmaW5lcyBhIHJlcGVydG9pcmUgb2Ygc3lzdGVtIGZ1bmN0aW9ucyBhbmQgaGVhZGVyIGZp bGVzIGZvcgotICAgdXNlIGJ5IEMgbGFuZ3VhZ2UgcHJvZ3JhbXMuIE1vc3Qgbm90YWJseSwgdGhl IGlvY3RsKCkgZnVuY3Rpb24gaXMgbm90Ci0gICBhbGxvd2VkIGluIFBPU0lYOyBhbGwgaW9jdGwo KSBmdW5jdGlvbnMgaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5Ci0gICBkZXZpY2Utc3BlY2lmaWMgZnVu Y3Rpb25zIGxpa2UgdGNzZXRhdHRyKCksIHRjc2VuZGJyZWFrKCksIGV0Yy4KLQotICAgQ29tcHV0 ZXIgc3lzdGVtcyB0aGF0IGNsYWltIHNvbWUgZGVncmVlIG9mIFBPU0lYIGNvbXBsaWFuY2UgaGF2 ZSBtYWRlCi0gICBzb21lIGF0dGVtcHQgdG8gcHV0IHRoZWlyIGhlYWRlciBmaWxlcyBpbiB0aGUg cmlnaHQgcGxhY2VzIGFuZCBnaXZlCi0gICB0aGVtIHRoZSByaWdodCBuYW1lcywgYW5kIHRvIHBy b3ZpZGUgc3lzdGVtIGxpYnJhcnkgZnVuY3Rpb25zIHdpdGggdGhlCi0gICByaWdodCBuYW1lcyBh bmQgY2FsbGluZyBjb252ZW50aW9ucy4gV2l0aGluIHRoZSBoZWFkZXIgZmlsZXMsCi0gICBQT1NJ WC1jb21wbGlhbnQgZnVuY3Rpb25zIGFyZSBzdXBwb3NlZCB0byBiZSB3aXRoaW4gI2lmZGVmCi0g ICBfUE9TSVhfU09VUkNFLi4jZW5kaWYgY29uZGl0aW9uYWxzLCBhbmQgbm9uLVBPU0lYIGl0ZW1z IGFyZSBub3Qgd2l0aGluCi0gICB0aGVzZSBjb25kaXRpb25hbHMuCi0KLSAgIElmIEtlcm1pdCBp cyBidWlsdCB3aXRoIG5laXRoZXIgLURfUE9TSVhfU09VUkNFIG5vciAtRFBPU0lYLCB0aGUKLSAg IGZ1bmN0aW9ucyBhbmQgaGVhZGVyIGZpbGVzIG9mIHRoZSBzZWxlY3RlZCB2ZXJzaW9uIG9mIFVu aXggKG9yIFZNUywKLSAgIGV0YykgYXJlIHVzZWQgYWNjb3JkaW5nIHRvIHRoZSBDRkxBR1MgS2Vy bWl0IHdhcyBidWlsdCB3aXRoLgotCi0gICBJZiBLZXJtaXQgaXMgYnVpbHQgd2l0aCAtRF9QT1NJ WF9TT1VSQ0UgYnV0IG5vdCAtRFBPU0lYLCB0aGVuIG9uZSBvZgotICAgdGhlIC1EQlNEIG9yIC1E QVRUU1YgZmxhZ3MgKG9yIG9uZSB0aGF0IGltcGxpZXMgdGhlbSkgbXVzdCBhbHNvIGJlCi0gICBk ZWZpbmVkLCBidXQgaXQgc3RpbGwgdXNlcyBvbmx5IHRoZSBQT1NJWCBmZWF0dXJlcyBpbiB0aGUg c3lzdGVtIGhlYWRlcgotICAgZmlsZXMuIFRoaXMgYWxsb3dzIEMtS2VybWl0IHRvIGJlIGJ1aWx0 IG9uIEJTRCBvciBBVCZUIHN5c3RlbXMgdGhhdAotICAgaGF2ZSBzb21lIGRlZ3JlZSBvZiBQT1NJ WCBjb21wbGlhbmNlLCBidXQgc3RpbGwgdXNlIEJTRCBvciBBVCZUCi0gICBzcGVjaWZpYyBmZWF0 dXJlcy4KLQotICAgVGhlIGRpbGVtbWEgaXMgdGhpczogaXQgaXMgb2Z0ZW4gbmVjZXNzYXJ5IHRv IGRlZmluZSBfUE9TSVhfU09VUkNFIHRvCi0gICBnZXQgYXQgbmV3IG9yIG1vZGVybiBmZWF0dXJl cywgc3VjaCBhcyBoaWdoIHNlcmlhbCBzcGVlZHMgYW5kIHRoZSBBUElzCi0gICB0byBkZWFsIHdp dGggdGhlbS4gQnV0IGRlZmluaW5nIF9QT1NJWF9TT1VSQ0UgYWxzbyBoaWRlcyBvdGhlciBBUElz Ci0gICB0aGF0IEtlcm1pdCBuZWVkcywgZm9yIGV4YW1wbGUgdGhlIG9uZXMgZGVhbGluZyB3aXRo IG1vZGVtIHNpZ25hbHMKLSAgIChvdGhlcnMgYXJlIGxpc3RlZCBqdXN0IGJlbG93KS4gVGh1cyBh bGwgc29ydHMgb2YgaGlkZW91cyBjb250b3J0aW9ucwotICAgYXJlIG9mdGVuIHJlcXVpcmVkIHRv IGdldCBhIGZ1bGwgc2V0IG9mIGZlYXR1cmVzLgotCi0gICBUaGUgUE9TSVggc3RhbmRhcmQgZG9l cyBub3QgZGVmaW5lIGFueXRoaW5nIGFib3V0IHV1Y3AgbG9ja2ZpbGVzLiAibWFrZQotICAgcG9z aXgiIHVzZXMgTk8gKHJlcGVhdCwgTk8pIGxvY2tmaWxlIGNvbnZlbnRpb25zLiBJZiB5b3VyCi0g ICBQT1NJWC1jb21wbGlhbnQgVW5peCB2ZXJzaW9uIHVzZXMgYSBsb2NrZmlsZSBjb252ZW50aW9u IHN1Y2ggYXMgSERCVVVDUAotICAgKHNlZSBiZWxvdyksIHVzZSB0aGUgInBvc2l4IiBlbnRyeSwg YnV0IGluY2x1ZGUgdGhlIGFwcHJvcHJpYXRlCi0gICBsb2NrZmlsZSBvcHRpb24gaW4geW91ciBL RkxBR1Mgb24gdGhlICJtYWtlIiBjb21tYW5kIGxpbmUsIGZvciBleGFtcGxlOgotCi1tYWtlIHBv c2l4ICJLRkxBR1M9LURIREJVVUNQIgotCi0gICBQT1NJWC4xIGFsc28gbGFja3MgY2VydGFpbiBv dGhlciBmZWF0dXJlcyB0aGF0IEtlcm1pdCBuZWVkcy4gRm9yCi0gICBleGFtcGxlOgotCi0gICAg ICogVGhlcmUgaXMgbm8gZGVmaW5lZCB3YXkgZm9yIGFuIGFwcGxpY2F0aW9uIHRvIGRvIHdpbGRj YXJkIG1hdGNoaW5nCi0gICAgICAgb2YgZmlsZW5hbWVzLiBLZXJtaXQgdXNlcyB0aGUgaW5vZGUg aW4gdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUsIGJ1dAotICAgICAgIFBPU0lYLjEgZG9lcyBub3Qg aW5jbHVkZSB0aGlzIGNvbmNlcHQuIChMYXRlciBQT1NJWCByZXZpc2lvbnMKLSAgICAgICBpbmNs dWRlIGZ1bmN0aW9ucyBuYW1lZCAoSSB0aGluaykgZ2xvYigpIGFuZCBmbm1hdGNoKCksIGJ1dCB0 aGVzZQotICAgICAgIGZ1bmN0aW9ucyBhcmUgbm90IHlldCBpbiBLZXJtaXQsIGFuZCBtaWdodCBu b3QgYmUgYXBwcm9wcmlhdGUgaW4KLSAgICAgICBhbnkgY2FzZS4pCi0gICAgICogVGhlcmUgaXMg bm8gUE9TSVggbWVjaGFuaXNtIGZvciBzZW5zaW5nIG9yIGNvbnRyb2xsaW5nIG1vZGVtCi0gICAg ICAgc2lnbmFscywgbm9yIHRvIGVuYWJsZSBSVFMvQ1RTIG9yIG90aGVyIGhhcmR3YXJlIGZsb3cg Y29udHJvbC4KLSAgICAgKiBUaGVyZSBpcyBubyBzZWxlY3QoKSBmb3IgbXVsdGlwbGV4aW5nIGkv bywgYW5kIHRoZXJlZm9yZSBubyBUQ1AvSVAuCi0gICAgICogVGhlcmUgaXMgbm8gd2F5IHRvIGNo ZWNrIGlmIGNoYXJhY3RlcnMgYXJlIHdhaXRpbmcgaW4gYQotICAgICAgIGNvbW11bmljYXRpb25z IGRldmljZSAob3IgY29uc29sZSkgaW5wdXQgYnVmZmVyLCBzaG9ydCBvZiB0cnlpbmcgdG8KLSAg ICAgICByZWFkIHRoZW0gLS0gbm8gc2VsZWN0KCksIGlvY3RsKGZkLEZJT05SRUFELGJsYWgpLCBy ZGNoaygpLCBldGMuCi0gICAgICAgVGhpcyBpcyBiYWQgZm9yIENPTk5FQ1QgbW9kZSBhbmQgYmFk IGZvciBzbGlkaW5nIHdpbmRvd3MuCi0gICAgICogTm8gd2F5IHRvIGRvIGEgbWlsbGlzZWNvbmQg c2xlZXAgKG5vIG5hcCgpLCB1c2xlZXAoKSwgc2VsZWN0KCksCi0gICAgICAgZXRjKS4KLSAgICAg KiBUaGVyZSBpcyBubyBwb3BlbigpLgotCi0gICBTbyBhdCB0aGlzIHBvaW50LCB0aGVyZSBjYW5u b3QgYmUgb25lIHNpbmdsZSBmdWxseSBmdW5jdGlvbmFsIFBPU0lYCi0gICBmb3JtIG9mIEMtS2Vy bWl0IHVubGVzcyBpdCBhbHNvIGhhcyAiZXh0ZW5zaW9ucyIsIGFzIGRvIExpbnV4LCBRTlgsCi0g ICBldGMuCi0KLSAgIE1vcmUgb24gUE9TSVggKHF1b3RpbmcgZnJvbSBhIG5ld3Nncm91cCBwb3N0 aW5nIGJ5IERhdmUgQnV0ZW5ob2YpOgotCi0gICAgIFN0YW5kYXJkcyB0ZW5kIHRvIGxvb2sgYXQg dGhlbXNlbHZlcyBhcyAiZW5hYmxpbmciLiBTbyBQT1NJWAotICAgICBzdGFuZGFyZHMgc2F5IHRo YXQsIGluIG9yZGVyIHRvIHVzZSBQT1NJWCBmdW5jdGlvbnMsIGEgcHJvZ3JhbSBtdXN0Ci0gICAg IGRlZmluZSBzb21lIG1hY3JvIHRoYXQgd2lsbCBwdXQgdGhlIGRldmVsb3BtZW50IGVudmlyb25t ZW50IGluCi0gICAgICJQT1NJWCBtb2RlIi4gRm9yIHRoZSBhbmNpZW50IFBPU0lYIDEwMDMuMS0x OTkwLCB0aGUgc3ltYm9sIGlzCi0gICAgIF9QT1NJWF9TT1VSQ0UuIEZvciByZWNlbnQgcmV2aXNp b25zLCBpdCdzIF9QT1NJWF9DX1NPVVJDRSB3aXRoIGFuCi0gICAgIGFwcHJvcHJpYXRlIHZhbHVl LiBQT1NJWCAxMDAzLjEtMTk5NiBzYXlzIHRoYXQsIHRvIHVzZSBpdHMgZmVhdHVyZXMKLSAgICAg aW4gYSBwb3J0YWJsZSBtYW5uZXIsIHlvdSBtdXN0IGRlZmluZSBfUE9TSVhfQ19TT1VSQ0U9MTk5 NTA2TCBiZWZvcmUKLSAgICAgaW5jbHVkaW5nIGFueSBoZWFkZXIgZmlsZXMuCi0KLSAgICAgQnV0 IGZvciBTb2xhcmlzLCBvciBEaWdpdGFsIFVuaXgsIHRoZSBwaWN0dXJlIGlzIGRpZmZlcmVudC4g UE9TSVggaXMKLSAgICAgb25lIGltcG9ydGFudCBidXQgc21hbGwgcGFydCBvZiB0aGUgdW5pdmVy c2UuIFlldCBQT1NJWAotICAgICB1bmNvbmRpdGlvbmFsbHkgYW5kIHVuYW1iaWd1b3VzbHkgUkVR VUlSRVMgdGhhdCwgd2hlbgotICAgICBfUE9TSVhfQ19TT1VSQ0U9MTk5NTA2TCwgQUxMIG9mIHRo ZSBmdW5jdGlvbnMgYW5kIGRlZmluaXRpb25zCi0gICAgIHJlcXVpcmVkIGJ5IHRoZSBzdGFuZGFy ZCwgYW5kIE5PIG90aGVycyAoZXhjZXB0IGluIHNwZWNpZmljCi0gICAgIHJlc3RyaWN0ZWQgbmFt ZXNwYWNlcywgc3BlY2lmaWNhbGx5ICJfIiBmb2xsb3dlZCBieSBhbiB1cHBlcmNhc2UKLSAgICAg bGV0dGVyIG9yICJfXyIgZm9sbG93ZWQgYnkgYSBsb3dlcmNhc2UgbGV0dGVyKSBzaGFsbCBiZSB2 aXNpYmxlLgotICAgICBUaGF0IGtpbmRhIHB1dHMgYSBjcmFtcCBvbiBCU0QgYW5kIFNWSUQgc3Vw cG9ydCwgYmVjYXVzZSB0aG9zZQotICAgICByZXF1aXJlIG5hbWVzIHRoYXQgYXJlIG5vdCBpbiB0 aGUgInByb3RlY3RlZCIgUE9TSVggbmFtZXNwYWNlcy4gSXQncwotICAgICBJTExFR0FMIHRvIG1h a2UgdGhvc2Ugc3ltYm9scyB2aXNpYmxlLCB1bmxlc3MgeW91J3ZlIGRvbmUgc29tZXRoaW5nCi0g ICAgIGVsc2UgdGhhdCdzIGJleW9uZCB0aGUgc2NvcGUgb2YgUE9TSVggdG8gYWxsb3cgdGhlIHN5 c3RlbSB0byBpbmZlcgotICAgICB0aGF0IHlvdSBkaWRuJ3QgcmVhbGx5IG1lYW4gaXQuCi0KLSAg ICAgSW4gbW9zdCBjYXNlcywgeW91IHNob3VsZCBqdXN0IGNvbXBpbGUsIHdpdGggbm8gc3RhbmRh cmRzLXJlbGF0ZWQKLSAgICAgbWFjcm9zIGRlZmluZWQuIFRoZSBzeXN0ZW0gd2lsbCBtYWtlIGF2 YWlsYWJsZSBldmVyeSBpbnRlcmZhY2UgYW5kCi0gICAgIGRlZmluaXRpb24gdGhhdCBpc24ndCBp bmNvbXBhdGlibGUgd2l0aCB0aGUgIm1haW4gc3RyZWFtIi4gVGhlcmUgbWF5Ci0gICAgIGluZGVl ZCBiZSBjYXNlcyB3aGVyZSB0d28gc3RhbmRhcmRzIGNyb3NzLCBhbmQgeW91IHJlYWxseSBjYW4n dCB1c2UKLSAgICAgYm90aCB0b2dldGhlci4gQnV0LCBpbiBnZW5lcmFsLCB0aGV5IHBsYXkgbmlj ZWx5IHRvZ2V0aGVyIGFzIGxvbmcgYXMKLSAgICAgeW91IGRvbid0IGRvIGFueXRoaW5nIHJhc2gg LS0gbGlrZSB0ZWxsaW5nIHRoZSBzeXN0ZW0gdGhhdCBpdCdzIG5vdAotICAgICBhbGxvd2VkIHRv IGxldCB0aGVtLgotCi0gICAgIEluIHRoZSBhcmVhIG9mIHRocmVhZHMsIGJvdGggU29sYXJpcyBh bmQgRGlnaXRhbCBVbml4IHN1cHBvcnQKLSAgICAgaW5jb21wYXRpYmxlIHRocmVhZCBBUElzLiBX ZSBoYXZlIFBPU0lYIGFuZCBEQ0UsIHRoZXkgaGF2ZSBQT1NJWCBhbmQKLSAgICAgVUkuIFRoZSBu YXN0eSBhcmVhcyBhcmUgaW4gdGhlIF9yIHJvdXRpbmVzIGFuZCBpbiBzb21lIGFzcGVjdHMgb2YK LSAgICAgc2lnbmFsIGJlaGF2aW9yLiBZb3UgY2Fubm90IGNvbXBpbGUgYSBzaW5nbGUgc291cmNl IGZpbGUgdGhhdCB1c2VzCi0gICAgIGJvdGggc2VtYW50aWNzLiBUaGF0J3MgbGlmZS4gSXQgc291 bmRzIGFzIGlmIFNvbGFyaXMgZGVmYXVsdHMgdG8gdGhlCi0gICAgIFVJIHZhcmlhbnRzLCBidXQg YWxsb3dzIHlvdSB0byBkZWZpbmUgdGhpcyBfUE9TSVhfVEhSRUFEX1NFTUFOVElDUwotICAgICB0 byBnZXQgYXJvdW5kIGl0LiBXZSBkZWZhdWx0IHRvIFBPU0lYLCBhbmQgYWxsb3cgeW91IHRvIGRl ZmluZQotICAgICBfUFRIUkVBRF9VU0VfRDQgKGF1dG9tYXRpY2FsbHkgZGVmaW5lZCBieSB0aGUg Y2MgIi10aHJlYWRzIiBzd2l0Y2gpCi0gICAgIHRvIHNlbGVjdCB0aGUgRENFIHRocmVhZCB2YXJp YW50cy4gVGhhdCBkZWZhdWx0LCBiZWNhdXNlIHlvdSdyZQotICAgICBvcGVyYXRpbmcgb3V0c2lk ZSBvZiBhbnkgaW5kaXZpZHVhbCBzdGFuZGFyZCwgaXMgcmVhbGx5IGp1c3QgYQotICAgICBtYXJr ZXRpbmcgZGVjaXNpb24uCi0KLTkuMS4yLiBBTlNJIEMKLQotICAgWyBbMjYxXVRvcCBdIFsgWzI2 Ml1Db250ZW50cyBdIFsgWzI2M11TZWN0aW9uIENvbnRlbnRzIF0gWwotICAgWzI2NF1TdWJzZWN0 aW9uIENvbnRlbnRzIF0gWyBbMjY1XU5leHQgXSBbIFsyNjZdUHJldmlvdXMgXQotCi0gICBUaGUg bWFqb3IgZGlmZmVyZW5jZSBiZXR3ZWVuIEFOU0kgQyBhbmQgZWFybGllciBDIGNvbXBpbGVycyBp cyBmdW5jdGlvbgotICAgcHJvdG90eXBpbmcuIEFOU0kgQyBhbGxvd3MgZnVuY3Rpb24gYXJndW1l bnRzIHRvIGJlIGNoZWNrZWQgZm9yIHR5cGUKLSAgIGFncmVlbWVudCwgYW5kICh3aGVuIHBvc3Np YmxlKSB0eXBlIGNvZXJjaW9uIGluIHRoZSBldmVudCBvZiBhCi0gICBtaXNtYXRjaC4gRm9yIHRo aXMgdG8gd29yaywgZnVuY3Rpb25zIGFuZCB0aGVpciBhcmd1bWVudHMgbXVzdCBiZQotICAgZGVj bGFyZWQgYmVmb3JlIHRoZXkgYXJlIGNhbGxlZC4gVGhlIGZvcm0gZm9yIGZ1bmN0aW9uIGRlY2xh cmF0aW9ucyBpcwotICAgZGlmZmVyZW50IGluIEFOU0kgQyBhbmQgbm9uLUFOU0kgQyAoQU5TSSBD IGFsc28gYWNjZXB0cyB0aGUgZWFybGllcgotICAgZm9ybSwgYnV0IHRoZW4gZG9lcyBub3QgZG8g dHlwZSBjaGVja2luZykuCi0KLSAgIEFzIG9mIGVkaXQgMTY3LCBDLUtlcm1pdCB0cmllcyB0byB0 YWtlIGZ1bGwgYWR2YW50YWdlIG9mIEFOU0kgQwotICAgZmVhdHVyZXMsIGVzcGVjaWFsbHkgZnVu Y3Rpb24gcHJvdG90eXBpbmcuIFRoaXMgcmVtb3ZlcyBtYW55IGJ1Z3MKLSAgIGludHJvZHVjZWQg YnkgZGlmZmVyaW5nIGRhdGEgdHlwZXMgdXNlZCBvciByZXR1cm5lZCBieSB0aGUgc2FtZQotICAg ZnVuY3Rpb25zIG9uIGRpZmZlcmVudCBjb21wdXRlcnMuIEFOU0kgQyBmZWF0dXJlcyBhcmUgYXV0 b21hdGljYWxseQotICAgZW5hYmxlZCB3aGVuIHRoZSBzeW1ib2wgX19TVERDX18gaXMgZGVmaW5l ZC4gTW9zdCBBTlNJIEMgY29tcGlsZXJzLAotICAgc3VjaCBhcyBHTlUgQ0MgYW5kIHRoZSBuZXcg REVDIEMgY29tcGlsZXIgZGVmaW5lIHRoaXMgc3ltYm9sCi0gICBpbnRlcm5hbGx5LgotCi0gICBP biB0aGUgZG93bnNpZGUsIEFOU0kgQyBjb21waWxhdGlvbiBpbmNyZWFzZXMgdGhlCi0gICBhZG1p bmlzdHJhdGl2ZS9idXJlYXVjcmF0aWMgYnVyZGVuLCBzcGV3aW5nIG91dCBjb3VudGxlc3MgdW5u ZWVkZWQKLSAgIHdhcm5pbmdzIGFib3V0IG1pc21hdGNoZWQgdHlwZXMsIGVzcGVjaWFsbHkgd2hl biB3ZSBhcmUgZGVhbGluZyB3aXRoCi0gICBzaWduZWQgYW5kIHVuc2lnbmVkIGNoYXJhY3RlcnMs IHJlcXVpcmluZyBjYXN0cyBldmVyeXdoZXJlIHRvIHNodXQgdXAKLSAgIHRoZSBtaW5kbGVzcyBj b21wbGFpbnRzIC0tIHRoZXJlIGlzIG5vIHVzZSBmb3Igc2lnbmVkIGNoYXJzIGluIEtlcm1pdAot ICAgKG9yIHByb2JhYmx5IGFueXdoZXJlIGVsc2UpLiBTb21lIGNvbXBpbGVycywgbWVyY2lmdWxs eSwgaW5jbHVkZSBhCi0gICAidHJlYXQgYWxsIGNoYXJzIGFzIHVuc2lnbmVkIiBvcHRpb24sIGFu ZCB3aGVuIGF2YWlsYWJsZSBpdCBzaG91bGQgYmUKLSAgIHVzZWQgLS0gbm90IG9ubHkgdG8gc3Rv cCB0aGUgd2FybmluZ3MsIGJ1dCBhbHNvIHRvIGF2b2lkIHVuaGVscGZ1bCBzaWduCi0gICBleHRl bnNpb24gb24gaGlnaC1iaXQgY2hhcmFjdGVycy4KLQotICAgVG8gZm9yY2UgdXNlIG9mIEFOU0kg QyBwcm90b3R5cGVzLCBpbmNsdWRlIC1EQ0tfQU5TSUMgb24gdGhlIGNjIGNvbW1hbmQKLSAgIGxp bmUuIFRvIGRpc2FibGUgdGhlIHVzZSBvZiBBTlNJIHByb3RvdHlwZXMsIGluY2x1ZGUgLUROT0FO U0kuCi0KLTkuMS4zLiBPdGhlciBTdGFuZGFyZHMKLQotICAgWyBbMjY3XVRvcCBdIFsgWzI2OF1D b250ZW50cyBdIFsgWzI2OV1TZWN0aW9uIENvbnRlbnRzIF0gWwotICAgWzI3MF1TdWJzZWN0aW9u IENvbnRlbnRzIF0gWyBbMjcxXU5leHQgXSBbIFsyNzJdUHJldmlvdXMgXQotCi0gICBBcyB0aGUg eWVhcnMgZ28gYnksIHN0YW5kYXJkcyB3aXRoLXdoaWNoLWFsbC1tdXN0LWNvbXBseSBjb250aW51 ZSB0bwotICAgcGlsZSB1cDogQUVTLCBYUEcyLCBYUEczLCBYUEc0LCBGSVBTIDE1MS0yLCBzdWNj ZXNzaXZlIGdlbmVyYXRpb25zIG9mCi0gICBQT1NJWCwgT1NGLzEsIFgvT3BlbiwgU3BlYyAxMTcw LCBVTklYOTUsIE9wZW4gR3JvdXAgVU5JWDk4LCBJU08vSUVDCi0gICA5OTQ1IHBhcnRzIDEtNCwg SVNPIDk4OTksIDg4T3BlbiwgT1MgOTksIFNpbmdsZSBVbml4IFNwZWNpZmljYXRpb24KLSAgIChT VVMsIFsyNzNdSUVFRSAxMDAzLjEtMjAwMSwgbm90IHRvIG1lbnRpb24gIm1hdHVyZSBzdGFuZGFy ZHMiIGxpa2UgVjcsCi0gICA0LjIvNC4zQlNELCBTeXN0ZW0gViBSMyBhbmQgUjQgKFNWSUQyIGFu ZCBTVklEMyksIDQuNEJTRCAodGhlIGJhc2lzIGZvcgotICAgQlNESSwgT3BlbkJTRCwgTmV0QlNE LCBGcmVlQlNELCBNYWMgT1MgWCBldGMpLCAvdXNyL2dyb3VwLCBwbHVzCi0gICBhc3NvcnRlZCBz ZWlzbWljIHByb25vdW5jZW1lbnRzIG9mIHRoZSBuZXZlcmVuZGluZyBzZXJpZXMgb2YgZXBoZW1l cmFsCi0gICBjb3Jwb3JhdGUgY29uc29ydGlhLCBub3QgdG8gbWVudGlvbiB0aGUgbGliYy12cy1n bGliYyB0dXJtb2lsIGluIHRoZQotICAgTGludXggYXJlbmEgYW5kIHdobyBrbm93cyB3aGF0IGVs c2UuCi0KLSAgIE5vbmUgb2YgdGhlc2Ugc3RhbmRhcmRzIHNpbXBsaWZpZXMgbGlmZSBmb3IgcG9y dGFibGUgYXBwbGljYXRpb25zIGxpa2UKLSAgIEMtS2VybWl0IC0tIGVhY2ggb25lIGlzIHNpbXBs eSBvbmUgbW9yZSBlbnZpcm9ubWVudCB0byBzdXBwb3J0IChvcgotICAgY2lyY3VtdmVudCwgYXMg aW4gbWFueSBjYXNlcyB0aGVzZSBzdGFuZGFyZHMgZG8gbW9yZSBoYXJtIHRoYW4gZ29vZCBieQot ICAgZGVueWluZyBhY2Nlc3MgdG8gZmFjaWxpdGllcyB3ZSBuZWVkLCBlLmcuIGFzIG5vdGVkIGlu IGFib3ZlIGluCi0gICBbMjc0XTkuMS4xKS4KLQotOS4yLiBMaWJyYXJ5IElzc3VlcwotCi0gICBb IFsyNzVdVG9wIF0gWyBbMjc2XUNvbnRlbnRzIF0gWyBbMjc3XVNlY3Rpb24gQ29udGVudHMgXSBb Ci0gICBbMjc4XVN1YnNlY3Rpb24gQ29udGVudHMgXSBbIFsyNzldTmV4dCBdIFsgWzI4MF1QcmV2 aW91cyBdCi0KLSAgIE9uIG1vc3QgbW9kZXJuIHBsYXRmb3JtcywgYXBwbGljYXRpb25zIGFyZSAt LSBhbmQgb2Z0ZW4gbXVzdCBiZSAtLQotICAgZHluYW1pY2FsbHkgbGlua2VkLiBUaGlzIGhhcyBu dW1lcm91cyBhZHZhbnRhZ2VzIChzbWFsbGVyIGV4ZWN1dGFibGVzLAotICAgYWJpbGl0eSB0byBw YXRjaCBhIGxpYnJhcnkgYW5kIHRoZXJlYnkgcGF0Y2ggYWxsIGFwcGxpY2F0aW9ucyB0aGF0IHVz ZQotICAgaXQsIGV0YyksIGJ1dCBhbHNvIGNhdXNlcyBzb21lIGhlYWRhY2hlczogbW9zdCBjb21t b25seSwgdGhlIGxpYnJhcnkgSUQKLSAgIGJ1aWx0IGludG8gdGhlIGV4ZWN1dGFibGUgYXQgbGlu ayB0aW1lIGRvZXMgbm90IG1hdGNoIHRoZSBJRCBvZiB0aGUKLSAgIGNvcnJlc3BvbmRpbmcgbGli cmFyeSBvbiB0aGUgdGFyZ2V0IHN5c3RlbSwgYW5kIHNvIHRoZSBsb2FkZXIgcmVmdXNlcwotICAg dG8gbGV0IHRoZSBhcHBsaWNhdGlvbiBydW4uCi0KLSAgIFRoaXMgcHJvYmxlbSBvbmx5IGdldHMg d29yc2Ugb3ZlciB0aW1lLiBJbiB0aGUgTGludXggYW5kICpCU0Qgd29ybGQsIHdlCi0gICBhbHNv IGhhdmUgdG90YWxseSBkaWZmZXJlbnQgbGlicmFyaWVzIChlYWNoIHdpdGggdGhlaXIgb3duIG5h bWVzIGFuZAotICAgbnVtYmVyaW5nIHN5c3RlbXMpIHRoYXQgY292ZXIgdGhlIHNhbWUgdGVycml0 b3J5OyBmb3IgZXhhbXBsZSwgY3Vyc2VzCi0gICB2cyBuY3Vyc2VzLCBsaWJjIHZlcnN1cyBnbGli Yy4gQ29tYmluYXRpb25zIHByb2xpZmVyYXRlIGFuZCBhbnkgZ2l2ZW4KLSAgIFVuaXggY29tcHV0 ZXIgbWlnaHQgaGF2ZSBhbnkgY29tYmluYXRpb24uIEZvciB0aGlzIHJlYXNvbiBpdCBpcwotICAg YmVjb21pbmcgaW5jcmVhc2luZ2x5IGRpZmZpY3VsdCB0byBwcm9kdWNlIGEgIkxpbnV4IGJpbmFy eSIgZm9yIGEgZ2l2ZW4KLSAgIGFyY2hpdGVjdHVyZSAoZS5nLiBQQyBvciBBbHBoYSkuIFRoZXJl IGhhcyB0byBiZSBhIHNlcGFyYXRlIGJpbmFyeSBmb3IKLSAgIChhdCBsZWFzdCkgZXZlcnkgY29t YmluYXRpb24gb2YgY3Vyc2VzIHZzIG5jdXJzZXMgYW5kIGxpYmMgdnMgZ2xpYmMuCi0KLSAgIElu IHN1Y2ggY2FzZXMsIHRoZSBiZXN0IGFkdmljZSBpcyBmb3IgZXZlcnkgdXNlciB0byBidWlsZCBD LUtlcm1pdCBmcm9tCi0gICBzb3VyY2UgY29kZSBvbiB0aGUgc3lzdGVtIHdoZXJlIGl0IHdpbGwg cnVuLiBUb28gYmFkIG1vc3QgY29tbWVyY2lhbAotICAgVW5peCB2ZW5kb3JzIGhhdmUgc3RvcHBl ZCBpbmNsdWRpbmcgQyBjb21waWxlcnMgd2l0aCB0aGUgb3BlcmF0aW5nCi0gICBzeXN0ZW0hCi0K LTkuMy4gVW5peCBGaWxlIFN5c3RlbSBQZWN1bGlhcml0aWVzCi0KLSAgIFsgWzI4MV1Ub3AgXSBb IFsyODJdQ29udGVudHMgXSBbIFsyODNdU2VjdGlvbiBDb250ZW50cyBdIFsgWzI4NF1OZXh0IF0K LSAgIFsgWzI4NV1QcmV2aW91cyBdCi0KLSAgIE5vcm1hbGx5LCBpbmNsdWRpbmcgYSBCU0QsIFN5 c3RlbS1WLCBQT1NJWCwgb3IgRElSRU5UIGZsYWcgaW4gdGhlIG1ha2UKLSAgIGVudHJ5IHNlbGVj dHMgdGhlIHJpZ2h0IGZpbGUgc3lzdGVtIGNvZGUuIEJ1dCBzb21lIHZlcnNpb25zIG9mIFVuaXgg YXJlCi0gICBpbmNvbnNpc3RlbnQgaW4gdGhpcyByZWdhcmQsIGFuZCBidWlsZGluZyBpbiB0aGUg bm9ybWFsIHdheSBlaXRoZXIKLSAgIGdpdmVzIGNvbXBpbGVyIG9yIGxpbmtlciBlcnJvcnMsIG9y IHJlc3VsdHMgaW4gcHJvYmxlbXMgYXQgcnVudGltZSwKLSAgIHR5cGljYWxseSBmYWlsdXJlIHRv IHByb3Blcmx5IGV4cGFuZCB3aWxkY2FyZCBmaWxlIHNwZWNpZmljYXRpb25zIHdoZW4KLSAgIHlv dSBkbyBzb21ldGhpbmcgbGlrZSAic2VuZCAqLioiLCBvciBmYWlsdXJlIHRvIHJlY29nbml6ZSBs b25nCi0gICBmaWxlbmFtZXMsIGFzIGluICJzZW5kIGZpbGV3aXRoYXZlcnl2ZXJ5dmVyeXZlcnl2 ZXJ5bG9uZ25hbWUiLgotCi0gICBDLUtlcm1pdCBpcyBzdXBwb3NlZCB0byBrbm93IGFib3V0IGFs bCB0aGUgdmFyaW91cyBzdHlsZXMgb2YgVW5peCBmaWxlCi0gICBzeXN0ZW1zLCBidXQgaXQgaGFz IHRvIGJlIHRvbGQgd2hpY2ggb25lIHRvIHVzZSB3aGVuIHlvdSBidWlsZCBpdCwKLSAgIHVzdWFs bHkgaW4gdGhlIG1ha2VmaWxlIHRhcmdldCBDRkxBR1MgYXMgc2hvd24gYmVsb3csIGJ1dCB5b3Ug bWlnaHQKLSAgIGFsc28gaGF2ZSB0byBhZGQgc29tZXRoaW5nIGxpa2UgLUkvdXNyL2luY2x1ZGUv YnNkIHRvIENGTEFHUywgb3IKLSAgIHNvbWV0aGluZyBsaWtlIC1sYnNkIHRvIExJQlMuCi0KLSAg IEMtS2VybWl0IGdpdmVzIHlvdSB0aGUgZm9sbG93aW5nIENGTEFHUyBzd2l0Y2hlcyB0byBhZGFw dCB0byB5b3VyIGZpbGUKLSAgIHN5c3RlbSdzIHBlY3VsaWFyaXRpZXM6Ci0KLS1ERElSRU5UICAg LSAjaW5jbHVkZSA8ZGlyZW50Lmg+Ci0tRFNESVJFTlQgIC0gI2luY2x1ZGUgPHN5cy9kaXJlbnQu aD4KLS1ETkRJUiAgICAgLSAjaW5jbHVkZSA8bmRpci5oPgotLURYTkRJUiAgICAtICNpbmNsdWRl IDxzeXMvbmRpci5oPgotLURSVFUgICAgICAtICNpbmNsdWRlICIvdXNyL2xpYi9uZGlyLmgiLCBv bmx5IGlmIE5ESVIgYW5kIFhORElSIG5vdCBkZWZpbmVkLgotLURTWVNVVElNSCAtICNpbmNsdWRl IDxzeXMvdXRpbWUuaD4gZm9yIHNldHRpbmcgZmlsZSBjcmVhdGlvbiBkYXRlcy4KLS1EVVRJTUVI ICAgLSAjaW5jbHVkZSA8dXRpbWUuaD4gZm9yIHNldHRpbmcgZmlsZSBjcmVhdGlvbiBkYXRlcy4K LQotICAgKE5vdGUsIFJUVSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBNYXNzY29tcCBSVFUgc3lz dGVtcywgYmVjYXVzZSBpdAotICAgYWxzbyBzZWxlY3RzIGNlcnRhaW4gb3RoZXIgUlRVLXNwZWNp ZmljIGZlYXR1cmVzLikKLQotICAgSWYgbm9uZSBvZiB0aGVzZSBpcyBkZWZpbmVkLCB0aGVuIDxz eXMvZGlyLmg+IGlzIHVzZWQuIElNUE9SVEFOVDogSWYKLSAgIHlvdXIgc3lzdGVtIGhhcyB0aGUg ZmlsZSAvdXNyL2luY2x1ZGUvZGlyZW50LmggdGhlbiBiZSBzdXJlIHRvIGFkZAotICAgLURESVJF TlQgdG8geW91ciBtYWtlZmlsZSB0YXJnZXQncyBDRkxBR1MuICJkaXJlbnQiIHNob3VsZCBiZSB1 c2VkIGluCi0gICBwcmVmZXJlbmNlIHRvIGFueSBvZiB0aGUgb3RoZXJzLCBiZWNhdXNlIGl0IHN1 cHBvcnRzIGFsbCB0aGUgZmVhdHVyZXMKLSAgIG9mIHlvdXIgZmlsZSBzeXN0ZW0sIGFuZCB0aGUg b3RoZXJzIHByb2JhYmx5IGRvbid0LgotCi0gICBIYXZpbmcgc2VsZWN0ZWQgdGhlIGFwcHJvcHJp YXRlIGRpcmVjdG9yeSBoZWFkZXIgZmlsZSwgeW91IG1pZ2h0IGFsc28KLSAgIG5lZWQgdG8gdGVs bCBLZXJtaXQgaG93IHRvIGRlY2xhcmUgdGhlIHJvdXRpbmVzIGFuZCB2YXJpYWJsZXMgaXQgbmVl ZHMKLSAgIHRvIHJlYWQgdGhlIGRpcmVjdG9yeS4gVGhpcyBoYXBwZW5zIG1vc3QgY29tbW9ubHkg b24gQVQmVCBTeXN0ZW0tVgotICAgYmFzZWQgVU5JWGVzLCBwYXJ0aWN1bGFybHkgU3lzdGVtIFYg UjMgYW5kIGVhcmxpZXIsIHRoYXQgcHJvdmlkZSBsb25nCi0gICBmaWxlIGFuZCBkaXJlY3Rvcnkg bmFtZXMgKGxvbmdlciB0aGFuIDE0IGNoYXJhY3RlcnMpLiBFeGFtcGxlcyBpbmNsdWRlCi0gICBj ZXJ0YWluIHJlbGVhc2VzIG9mIEhQLVVYLCBESUFCIEROSVgsIG9sZGVyIHZlcnNpb25zIG9mIFNp bGljb24KLSAgIEdyYXBoaWNzIElSSVgsIGFuZCBwZXJoYXBzIGFsc28gTUlQUy4gSW4gdGhpcyBj YXNlLCB0cnkgYWRkaW5nIC1ETE9OR0ZOCi0gICB0byB5b3VyIG1ha2VmaWxlIHRhcmdldC4KLQot ICAgQW5vdGhlciBwcm9ibGVtIGNoaWxkIGlzIDxzeXMvZmlsZS5oPi4gTW9zdCBVbml4IEMtS2Vy bWl0IHZlcnNpb25zIG5lZWQKLSAgIHRvICNpbmNsdWRlIHRoaXMgZmlsZSBmcm9tIHdpdGhpbiBb Mjg2XWNrdWZpby5jIGFuZCBbMjg3XWNrdXRpby5jLCBidXQKLSAgIHNvbWUgbm90IG9ubHkgZG8g bm90IG5lZWQgdG8gaW5jbHVkZSBpdCwgYnV0IE1VU1Qgbm90IGluY2x1ZGUgaXQKLSAgIGJlY2F1 c2UgKGEpIGl0IGRvZXNuJ3QgZXhpc3QsIG9yIChiKSBpdCBoYXMgYWxyZWFkeSBiZWVuIGluY2x1 ZGVkIGJ5Ci0gICBzb21lIG90aGVyIGhlYWRlciBmaWxlIGFuZCBpdCBkb2Vzbid0IHByb3RlY3Qg aXRzZWxmIGFnYWluc3QgbXVsdGlwbGUKLSAgIGluY2x1c2lvbiwgb3IgKGMpIHNvbWUgb3RoZXIg cmVhc29uIHRoYXQgcHJldmVudHMgc3VjY2Vzc2Z1bAotICAgY29tcGlsYXRpb24uIElmIHlvdSBo YXZlIGNvbXBpbGF0aW9uIHByb2JsZW1zIHRoYXQgc2VlbSB0byBzdGVtIGZyb20KLSAgIGluY2x1 ZGluZyB0aGlzIGZpbGUsIHRoZW4gYWRkIHRoZSBmb2xsb3dpbmcgc3dpdGNoIHRvIENGTEFHUyBp biB5b3VyCi0gICBtYWtlZmlsZSB0YXJnZXQ6Ci0KLS1ETk9GSUxFSAotCi0gICBUaGVyZSBhcmUg YSBmZXcgb2RkIGNhc2VzIHdoZXJlIDxzeXMvZmlsZS5oPiBtdXN0IGJlIGluY2x1ZGVkIGluIG9u ZSBvZgotICAgdGhlIGNrdVtmdF1pby5jIGZpbGVzLCBidXQgbm90IHRoZSBvdGhlci4gSW4gdGhh dCBjYXNlLCBhZGQgdGhlCi0gICBhZm9yZW1lbnRpb25lZCBzd2l0Y2gsIGJ1dCBnbyBpbnRvIHRo ZSBmaWxlIHRoYXQgbmVlZHMgPHN5cy9maWxlLmg+IGFuZAotICAgYWRkIHNvbWV0aGluZyBsaWtl IHRoaXM6Ci0KLSNpZmRlZiBYWFggICAgICAgLyogKHdoZXJlIFhYWCBpcyBhIHN5bWJvbCB1bmlx dWUgdG8geW91ciBzeXN0ZW0pICovCi0jdW5kZWYgTk9GSUxFSAotI2VuZGlmIC8qIFhYWCAqLwot Ci0gICBiZWZvcmUgdGhlIHNlY3Rpb24gdGhhdCBpbmNsdWRlcyA8c3lzL2ZpbGUuaD4uCi0KLSAg IEtlcm1pdCdzIFNFTkQgY29tbWFuZCBleHBhbmRzIHdpbGRjYXJkIGNoYXJhY3RlcnMgIj8iIGFu ZCAiKiIgaXRzZWxmLgotICAgQmVmb3JlIHZlcnNpb24gNUEsIGNvbW1hbmRzIGxpa2UgInNlbmQg KiIgd291bGQgc2VuZCBhbGwgcmVndWxhcgotICAgKG5vbi1kaXJlY3RvcnkpIGZpbGVzLCBpbmNs dWRpbmcgImhpZGRlbiBmaWxlcyIgKHdob3NlIG5hbWVzIHN0YXJ0IHdpdGgKLSAgICIuIikuIElu IHZlcnNpb24gNUEsIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIG1hdGNoIGxpa2UgdGhlIEJv dXJuZQotICAgc2hlbGwgb3IgdGhlIGxzIGNvbW1hbmQsIGFuZCBub3QgaW5jbHVkZSBmaWxlcyB3 aG9zZSBuYW1lcyBzdGFydCB3aXRoCi0gICBkb3QuIFN1Y2ggZmlsZXMgY2FuIHN0aWxsIGJlIHNl bnQgaWYgdGhlIGRvdCBpcyBpbmNsdWRlZCBleHBsaWNpdGx5IGluCi0gICB0aGUgU0VORCBjb21t YW5kOiAic2VuZCAub29mYSwgc2VuZCAuKiIuIFRvIGNoYW5nZSBiYWNrIHRvIHRoZSBvbGQgd2F5 Ci0gICBhbmQgbGV0IGxlYWRpbmcgd2lsZGNhcmQgY2hhcmFjdGVycyBtYXRjaCBkb3QgZmlsZXMs IGluY2x1ZGUgdGhlCi0gICBmb2xsb3dpbmcgaW4geW91ciBDRkxBR1M6Ci0KLS1ETUFUQ0hET1QK LQotICAgKEluIEMtS2VybWl0IDYuMCwgdGhlcmUgaXMgYWxzbyBhIGNvbW1hbmQgdG8gY29udHJv bCB0aGlzIGF0IHJ1bnRpbWUuKQotCi0gICBDb21wbGFpbnRzIGFib3V0IGRhdGEtdHlwZSBtaXNt YXRjaGVzOgotCi0gICAgICogSWYgeW91IGdldCBjb21waWxlLXRpbWUgY29tcGxhaW50cyBhYm91 dCBkYXRhIHR5cGUgbWlzbWF0Y2hlcyBmb3IKLSAgICAgICBwcm9jZXNzLUlEIHJlbGF0ZWQgZnVu Y3Rpb25zIGxpa2UgZ2V0cGlkKCksIGFkZCAtRFBJRF9UPXBpZF90LgotICAgICAqIElmIHlvdSBn ZXQgY29tcGlsZS10aW1lIGNvbXBsYWludHMgYWJvdXQgZGF0YSB0eXBlIG1pc21hdGNoZXMgZm9y Ci0gICAgICAgdXNlciBJRCByZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGdldHVpZCgpLCBhZGQgLURV SURfVD11aWRfdC4KLSAgICAgKiBJZiB5b3UgZ2V0IGNvbXBpbGUtdGltZSBjb21wbGFpbnRzIGFi b3V0IGRhdGEgdHlwZSBtaXNtYXRjaGVzIGZvcgotICAgICAgIHVzZXItSUQgcmVsYXRlZCBmdW5j dGlvbnMgbGlrZSBnZXRnaWQoKSwgYWRkIC1ER0lEX1Q9Z2lkX3QuCi0gICAgICogSWYgeW91IGdl dCBjb21waWxlLXRpbWUgY29tcGxhaW50cyBhYm91dCBkYXRhIHR5cGUgbWlzbWF0Y2hlcyBmb3IK LSAgICAgICBnZXRwd3VpZCgpLCBhZGQgLURQV0lEX1Q9dWlkX3QgKG9yIHdoYXRldmVyIGl0IHNo b3VsZCBiZSkuCi0KLSAgIEZpbGUgY3JlYXRpb24gZGF0ZXM6IEMtS2VybWl0IGF0dGVtcHRzIHRv IHNldCB0aGUgY3JlYXRpb24gZGF0ZS90aW1lIG9mCi0gICBhbiBpbmNvbWluZyBmaWxlIGFjY29y ZGluZyB0byB0aGUgZGF0ZS90aW1lIGdpdmVuIGluIHRoZSBmaWxlJ3MKLSAgIGF0dHJpYnV0ZSBw YWNrZXQsIGlmIGFueS4gSWYgeW91IGZpbmQgdGhhdCB0aGUgZGF0ZXMgYXJlIHNldAotICAgaW5j b3JyZWN0bHksIHlvdSBtaWdodCBuZWVkIHRvIGJ1aWxkIEtlcm1pdCB3aXRoIHRoZSAtRFNZU1VU SU1FSCBmbGFnLAotICAgdG8gdGVsbCBpdCB0byBpbmNsdWRlIDxzeXMvdXRpbWUuaD4uIElmIHRo YXQgZG9lc24ndCBoZWxwLCBsb29rIGF0IHRoZQotICAgY29kZSBpbiB6c3RyZHQoKSBpbiBbMjg4 XWNrdWZpby5jLgotCi05LjQuIEhhcmR3YXJlIEZsb3cgQ29udHJvbAotCi0gICBbIFsyODldVG9w IF0gWyBbMjkwXUNvbnRlbnRzIF0gWyBbMjkxXVNlY3Rpb24gQ29udGVudHMgXSBbIFsyOTJdTmV4 dCBdCi0gICBbIFsyOTNdUHJldmlvdXMgXQotCi0gICBIYXJkd2FyZSBmbG93IGNvbnRyb2wgaXMg YSBwcm9ibGVtYXRpYyBjb25jZXB0IGluIG1hbnkgcG9wdWxhciBVbml4Ci0gICBpbXBsZW1lbnRh dGlvbnMuIE9mdGVuIGl0IGlzIGxhY2tpbmcgYWx0b2dldGhlciwgYW5kIHdoZW4gYXZhaWxhYmxl LAotICAgdGhlIGFwcGxpY2F0aW9uIHByb2dyYW0gaW50ZXJmYWNlIChBUEkpIHRvIGl0IGlzIGlu Y29uc2lzdGVudCBmcm9tCi0gICBzeXN0ZW0gdG8gc3lzdGVtLiBIZXJlIGFyZSBzb21lIGV4YW1w bGVzOgotCi0gICAgYS4gUE9TSVggZG9lcyBub3Qgc3VwcG9ydCBoYXJkd2FyZSBmbG93IGNvbnRy b2wuCi0gICAgYi4gUlRTL0NUUyBmbG93IGNvbnRyb2wgc3VwcG9ydCBNSUdIVCBiZSBhdmFpbGFi bGUgZm9yIFN5c3RlbSBWIFIzIGFuZAotICAgICAgIGxhdGVyIGlmIC91c3IvaW5jbHVkZS90ZXJt aW94LmggZXhpc3RzIChpdHMgc3VjY2Vzc2Z1bCBvcGVyYXRpb24KLSAgICAgICBhbHNvIGRlcGVu ZHMgb24gdGhlIGRldmljZSBkcml2ZXIsIGFuZCB0aGUgZGV2aWNlIGl0c2VsZiwgbm90IHRvCi0g ICAgICAgbWVudGlvbiB0aGUgWzI5NF1jYWJsZSwgZXRjLCBhY3R1YWxseSBzdXBwb3J0aW5nIGl0 KS4gSWYgeW91cgotICAgICAgIFNWUjMtb3ItbGF0ZXIgVW5peCBzeXN0ZW0gZG9lcyBoYXZlIHRo aXMgZmlsZSwgYWRkOgotCi0tRFRFUk1JT1gKLQotICAgICAgIHRvIHlvdXIgQ0ZMQUdTLiBJZiB0 aGUgZmlsZSBpcyBpbiAvdXNyL2luY2x1ZGUvc3lzIGluc3RlYWQsIGFkZDoKLQotLURTVEVSTUlP WAotCi0gICAgICAgTm90ZSB0aGF0IHRoZSBwcmVzZW5jZSBvZiB0aGlzIGZpbGUgZG9lcyBub3Qg Z3VhcmFudGVlIHRoYXQgUlRTL0NUUwotICAgICAgIHdpbGwgYWN0dWFsbHkgd29yayAtLSB0aGF0 IGRlcGVuZHMgb24gdGhlIGRldmljZS1kcml2ZXIKLSAgICAgICBpbXBsZW1lbnRhdGlvbiAocmVw b3J0ZWRseSwgbWFueSBVbml4IHZlcnNpb25zIHRyZWF0Ci0gICAgICAgaGFyZHdhcmUtZmxvdy1j b250cm9sIHJlbGF0ZWQgaW9jdGwncyBhcyBuby1vcHMpLgotICAgIGMuIFNlYXJjaCAoImdyZXAg LWkiKSB0aHJvdWdoIC91c3IvaW5jbHVkZS8qLmggYW5kCi0gICAgICAgL3Vzci9pbmNsdWRlL3N5 cy8qLmggZm9yIFJUUyBvciBDVFMgYW5kIHNlZSB3aGF0IHR1cm5zIHVwLiBGb3IKLSAgICAgICBl eGFtcGxlLCBpbiBTdW5PUyA0Lnggd2UgZmluZCAiQ1JUU0NUUyIuIEZpZ3VyaW5nIG91dCBob3cg dG8gdXNlIGl0Ci0gICAgICAgaXMgYW5vdGhlciBxdWVzdGlvbiBlbnRpcmVseSEgSW4gSUJNIEFJ WCBSUy82MDAwIDMueCwgd2UgaGF2ZSB0bwotICAgICAgICJhZGQiIGEgbmV3ICJsaW5lIGRpc2Np cGxpbmUiIChhbmQgeW91IHdvbid0IGZpbmQgdXBwZXJjYXNlIFJUUyBvcgotICAgICAgIENUUyBz eW1ib2xzIGluIHRoZSBoZWFkZXIgZmlsZXMpLgotICAgIGQuIE5lWFRTVEVQIGFuZCBJUklYLCBh bmQgcG9zc2libHkgb3RoZXJzLCBzdXBwb3J0IGhhcmR3YXJlIGZsb3cKLSAgICAgICBjb250cm9s LCBidXQgZG8gbm90IGZ1cm5pc2ggYW4gQVBJIHRvIGNvbnRyb2wgaXQsIGFuZCB0aHVzIG9uIHRo ZXNlCi0gICAgICAgc3lzdGVtcyBLZXJtaXQgaGFzIG5vIGNvbW1hbmQgdG8gc2VsZWN0IGl0IC0t IGluc3RlYWQsIGEgc3BlY2lhbAotICAgICAgIGRldmljZSBuYW1lIG11c3QgYmUgdXNlZC4gKE5l WFRTVEVQOiAvZGV2L2N1ZmEgaW5zdGVhZCBvZiAvZGV2L2N1YTsKLSAgICAgICBJUklYOiAvZGV2 L3R0eWYwMCkKLQotICAgU2VlIHRoZSByb3V0aW5lIHR0aGZsb3coKSBpbiBbMjk1XWNrdXRpby5j IGZvciBkZXRhaWxzLiBJZiB5b3UgZmluZAotICAgdGhhdCB5b3VyIHN5c3RlbSBvZmZlcnMgaGFy ZHdhcmUgZmxvdyBjb250cm9sIHNlbGVjdGlvbiB1bmRlciBwcm9ncmFtCi0gICBjb250cm9sLCB5 b3UgY2FuIGFkZCB0aGlzIGNhcGFiaWxpdHkgdG8gQy1LZXJtaXQgYXMgZm9sbG93czoKLQotICAg IGEuIFNlZSBpZiBpdCBhZ3JlZXMgd2l0aCBvbmUgb2YgdGhlIG1ldGhvZHMgYWxyZWFkeSB1c2Vk IGluIHR0aGZsb3coKS4KLSAgICAgICBpZiBub3QsIGFkZCBuZXcgY29kZSwgYXBwcm9wcmlhdGVs eSAjaWZkZWYnZC4KLSAgICBiLiBBZGQgLURDS19SVFNDVFMgdG8gdGhlIGNvbXBpbGVyIENGTEFH UyBpbiB5b3VyIG1ha2VmaWxlIHRhcmdldCBvcgotICAgICAgIGRlZmluZSB0aGlzIHN5bWJvbCB3 aXRoaW4gdGhlIGFwcHJvcHJpYXRlICNpZmRlZnMgaW4gWzI5Nl1ja2NkZWIuaC4KLQotICAgVG8g aWxsdXN0cmF0ZSB0aGUgZGlmZmljdWx0aWVzIHdpdGggUlRTL0NUUywgaGVyZSBpcyBhIHRhbGUg ZnJvbSBKYW1pZQotICAgV2F0c29uIDxqd0BhZGFzb2Z0LmNoPiwgd2hvIGFkZGVkIHRoZSBSVFMv Q1RTIGNvZGUgZm9yIHRoZSBSUy82MDAwLAotICAgYWJvdXQgaGlzIGF0dGVtcHRzIHRvIGRvIHRo ZSBzYW1lIGZvciBERUMgVUxUUklYOgotCi0gICAgICJUaGUgbnVtYmVyIGFuZCB0eXBlIG9mIGhh cmR3YXJlIHNpZ25hbHMgYXZhaWxhYmxlIHRvL2Zyb20gYSBzZXJpYWwKLSAgICAgcG9ydCB2YXJ5 IGJldHdlZW4gZGlmZmVyZW50IG1hY2hpbmVzIGFuZCBkaWZmZXJlbnQgdHlwZXMgb2Ygc2VyaWFs Ci0gICAgIGludGVyZmFjZXMgb24gZWFjaCBtYWNoaW5lLiBUaGlzIG1lYW5zIHRoYXQsIGZvciBl eGFtcGxlLCB0aGVyZSBhcmUKLSAgICAgdmlydHVhbGx5IG5vIGhhcmR3YXJlIHNpZ25hbHMgaW4g b3Igb3V0IGF2YWlsYWJsZSBvbiB0aGUgREVDc3lzdGVtCi0gICAgIDMwMDAvMzEwMCBzZXJpZXM7 IG9uIHRoZSBERUNzeXN0ZW0gNTAwMC8yeHggc2VyaWVzIGFsbCBtb2RlbSBzaWduYWxzCi0gICAg IGluL291dCBhcmUgcHJlc2VudCBvbiBib3RoIGJ1aWx0LWluIHNlcmlhbCBwb3J0czsgb24gdGhl IERFQ3N5c3RlbQotICAgICA1MTAwIHNvbWUgcG9ydHMgaGF2ZSBhbGwgc2lnbmFscyBhbmQgc29t ZSBvbmx5IGhhdmUgc29tZTsgYW5kIHNvCi0gICAgIG9uLi4uIEl0IGxvb2tzIHRvIG1lIGFzIGlm IHRoaXMgcHJldHR5IHdlbGwgcnVsZXMgb3V0IGFueSBhdHRlbXB0IHRvCi0gICAgIHVzZSBoYXJk d2FyZSBmbG93IGNvbnRyb2wgb24gdGhlc2UgcGxhdGZvcm1zLCBldmVuIGlmIHdlIGNvdWxkCi0g ICAgIGZpZ3VyZSBvdXQgaG93IHRvIGRvIGl0LiBUaGUgY29uZnVzaW9uIG9uIHRoZSB1c2VyIGxl dmVsIGFib3V0Ci0gICAgIHdoZXRoZXIgb3Igbm90IGl0IHNob3VsZCB3b3JrIGZvciBhbnkgZ2l2 ZW4gcGxhdGZvcm0gb3IgcG9ydCB3b3VsZAotICAgICBiZSB0cmVtZW5kb3VzLiBBbmQgdGhlbiBp dCBpc24ndCBjbGVhciBob3cgdG8gdXNlIHRoZSBoYXJkd2FyZQotICAgICBzaWduYWxzIGV2ZW4g aW4gdGhlIGNhc2VzIHdoZXJlIHRoZSBkZXZpY2Ugc3VwcG9ydHMgdGhlbS4iCi0KLSAgOS41LiBU ZXJtaW5hbCBTcGVlZHMKLQotICAgWyBbMjk3XVRvcCBdIFsgWzI5OF1Db250ZW50cyBdIFsgWzI5 OV1TZWN0aW9uIENvbnRlbnRzIF0gWyBbMzAwXU5leHQgXQotICAgWyBbMzAxXVByZXZpb3VzIF0K LQotICAgVGhlIGFsbG93YWJsZSBzcGVlZHMgZm9yIHRoZSBTRVQgU1BFRUQgY29tbWFuZCBhcmUg ZGVmaW5lZCBpbgotICAgWzMwMl1ja2NkZWIuaC4gSWYgeW91ciBzeXN0ZW0gc3VwcG9ydHMgc3Bl ZWRzIHRoYXQgYXJlIG5vdCBsaXN0ZWQgaW4KLSAgICJzZXQgc3BlZWQgPyIsIHlvdSBjYW4gYWRk IGRlZmluaXRpb25zIGZvciB0aGVtIHRvIGNrY2RlYi5oLgotCi0gICBUaGVuIGlmIHRoZSBzcGVl ZCB5b3UgYXJlIGFkZGluZyBpcyBvbmUgdGhhdCB3YXMgbmV2ZXIgdXNlZCBiZWZvcmUgaW4KLSAg IEtlcm1pdCwgc3VjaCBhcyA5MjE2MDAsIHlvdSdsbCBhbHNvIG5lZWQgdG8gYWRkIHRoZSBhcHBy b3ByaWF0ZQotICAga2V5d29yZHMgdG8gc3BkdGFiW10gaW4gWzMwM11ja3V1czMuYywgYW5kIHRo ZSBjb3JyZXNwb25kaW5nIGNhc2UgdG8KLSAgIHR0c3NwZCgpIGluIFszMDRdY2t1dGlvLmMuCi0K LSAgOS42LiBNaWxsaXNlY29uZCBTbGVlcHMKLQotICAgWyBbMzA1XVRvcCBdIFsgWzMwNl1Db250 ZW50cyBdIFsgWzMwN11TZWN0aW9uIENvbnRlbnRzIF0gWyBbMzA4XU5leHQgXQotICAgWyBbMzA5 XVByZXZpb3VzIF0KLQotICAgVGhlcmUgaXMgbm8gc3RhbmRhcmQgZm9yIG1pbGxpc2Vjb25kIHNs ZWVwcywgYnV0IGF0IGxlYXN0IGZpdmUKLSAgIGRpZmZlcmVudCBmdW5jdGlvbnMgaGF2ZSBhcHBl YXJlZCBpbiB2YXJpb3VzIFVuaXggdmVyc2lvbnMgdGhhdCBjYW4gYmUKLSAgIHVzZWQgZm9yIHRo aXMgcHVycG9zZTogbmFwKCkgKG1vc3RseSBpbiBTeXN0ZW0gViksIHVzbGVlcCgpIChmb3VuZCBh dAotICAgbGVhc3QgaW4gU3VuT1MgYW5kIE5lWFQgT1MpLCBzZWxlY3QoKSAoZm91bmQgaW4gNC4y QlNEIGFuZCBsYXRlciwgYW5kCi0gICBwYXJ0IG9mIGFueSBUQ1AvSVAgc29ja2V0cyBsaWJyYXJ5 KSwgbmFub3NsZWVwKCksIGFuZCBzZ2luYXAoKS4gSWYgeW91Ci0gICBoYXZlIGFueSBvZiB0aGVz ZSBhdmFpbGFibGUsIHBpY2sgb25lIChpbiB0aGlzIG9yZGVyIG9mIHByZWZlcmVuY2UsIGlmCi0g ICB5b3UgaGF2ZSBtb3JlIHRoYW4gb25lKToKLQotLURTRUxFQ1Q6IEluY2x1ZGUgdGhpcyBpbiBD RkxBR1MgaWYgeW91ciBzeXN0ZW0gaGFzIHRoZSBzZWxlY3QoKSBmdW5jdGlvbi4KLS1ETkFQOiAg ICBJbmNsdWRlIHRoaXMgaW4gQ0ZMQUdTIGlmIHlvdXIgc3lzdGVtIGhhcyB0aGUgbmFwKCkgZnVu Y3Rpb24uCi0tVVNMRUVQOiAgSW5jbHVkZSB0aGlzIGluIENGTEFHUyBpZiB5b3VyIHN5c3RlbSBo YXMgdGhlIHVzbGVlcCgpIGZ1bmN0aW9uLgotCi0gICBOT1RFOiBUaGUgbmFwKCkgZnVuY3Rpb24g aXMgYXNzdW1lZCB0byBiZSBhIGZ1bmN0aW9uIHRoYXQgcHV0cyB0aGUKLSAgIHByb2Nlc3MgdG8g c2xlZXAgZm9yIHRoZSBnaXZlbiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLiBJZiB5b3VyIHN5c3Rl bSdzCi0gICBuYXAoKSBmdW5jdGlvbiBkb2VzIHNvbWV0aGluZyBlbHNlIG9yIHVzZXMgc29tZSBv dGhlciB1bml0cyBvZiB0aW1lCi0gICAobGlrZSB0aGUgTkNSIFRvd2VyIDMyLCB3aGljaCB1c2Vz IGNsb2NrLXRpY2tzKSwgZG8gbm90IGluY2x1ZGUgLUROQVAuCi0KLSAgIFJlcG9ydGVkbHksIGFs bCB2ZXJzaW9ucyBvZiBTeXN0ZW0gViBSNCBmb3IgSW50ZWwtYmFzZWQgY29tcHV0ZXJzLCBhbmQK LSAgIHBvc3NpYmx5IGFsc28gU1ZSMy4yLCBpbmNsdWRlIG5hcCgpIGFzIGEga2VybmVsIGNhbGws IGJ1dCBpdCdzIG5vdCBpbgotICAgdGhlIGxpYnJhcnkuIFRvIGluY2x1ZGUgY29kZSB0byB1c2Ug aXQgdmlhIHN5c2NhbGwoMzExMix4KSwgd2l0aG91dAotICAgaGF2aW5nIHRvIGluY2x1ZGUgWGVu aXggY29tcGF0aWJpbGl0eSBmZWF0dXJlcywgaW5jbHVkZSB0aGUgZm9sbG93aW5nCi0gICBjb21w aWxlLXRpbWUgb3B0aW9uOgotCi0tRE5BUEhBQ0sKLQotICA5LjcuIE5vbmRlc3RydWN0aXZlIElu cHV0IEJ1ZmZlciBQZWVraW5nCi0KLSAgIFsgWzMxMF1Ub3AgXSBbIFszMTFdQ29udGVudHMgXSBb IFszMTJdU2VjdGlvbiBDb250ZW50cyBdIFsgWzMxM11OZXh0IF0KLSAgIFsgWzMxNF1QcmV2aW91 cyBdCi0KLSAgIFNvbWUgQVQmVCBVbml4IHZlcnNpb25zIGhhdmUgbm8gd2F5IHRvIGNoZWNrIGlm IGlucHV0IGlzIHdhaXRpbmcgb24gYQotICAgdHR5IGRldmljZSwgYnV0IHRoaXMgaXMgYSB2ZXJ5 IGltcG9ydGFudCBmZWF0dXJlIGZvciBLZXJtaXQuIFdpdGhvdXQKLSAgIGl0LCBzbGlkaW5nIHdp bmRvd3MgbWlnaHQgbm90IHdvcmsgdmVyeSB3ZWxsIChvciBhdCBhbGwpLCBhbmQgeW91IGFsc28K LSAgIGhhdmUgdG8gdHlwZSB5b3VyIGVzY2FwZSBjaGFyYWN0ZXIgdG8gZ2V0IEtlcm1pdCdzIGF0 dGVudGlvbiBpbiBvcmRlcgotICAgdG8gaW50ZXJydXB0IGEgbG9jYWwtbW9kZSBmaWxlIHRyYW5z ZmVyLiBJZiB5b3VyIHN5c3RlbSBvZmZlcnMgYW4KLSAgIEZJT05SRUFEIGlvY3RsLCB0aGUgYnVp bGQgcHJvY2VkdXJlIHNob3VsZCBwaWNrIHRoYXQgdXAgYXV0b21hdGljYWxseQotICAgYW5kIHVz ZSBpdCwgd2hpY2ggaXMgaWRlYWwuCi0KLSAgIElmIHlvdXIgc3lzdGVtIGxhY2tzIEZJT05SRUFE IGJ1dCBoYXMgYSBzZWxlY3QoKSBmdW5jdGlvbiwgdGhpcyBjYW4gYmUKLSAgIHVzZWQgaW5zdGVh ZC4gSWYgdGhlIGJ1aWxkIHByb2NlZHVyZSBmYWlscyB0byBpbmNsdWRlIGl0IChTSE9XIEZFQVRV UkVTCi0gICB3aWxsIGxpc3QgU0VMRUNUKSwgdGhlbiB5b3UgY2FuIGFkZCBpdCB0byB5b3VyIENG TEFHUzoKLQotLURTRUxFQ1QKLQotICAgQ29udmVyc2VseSwgaWYgdGhlIGJ1aWxkIHByb2NlZHVy ZSB0cmllcyB0byB1c2Ugc2VsZWN0KCkgd2hlbiBpdCByZWFsbHkKLSAgIGlzIG5vdCB0aGVyZSwg YWRkOgotCi0tRE5PU0VMRUNUCi0KLSAgIE5vdGU6IHNlbGVjdCgpIGlzIG5vdCBwYXJ0IG9mIFN5 c3RlbSBWIG5vciBvZiBQT1NJWCwgYnV0IGl0IGhhcyBiZWVuCi0gICBhZGRlZCB0byB2YXJpb3Vz IFN5c3RlbS1WLSBhbmQgUE9TSVgtYmFzZWQgc3lzdGVtcyBhcyBhbiBleHRlbnNpb24uCi0KLSAg IFNvbWUgU3lzdGVtLVYgdmFyaWF0aW9ucyAoU0NPIFhlbml4L1VOSVgvT0RUIGFuZCBESUFCIERO SVgpIGluY2x1ZGUgYQotICAgcmRjaGsoKSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIGZvciBi dWZmZXIgcGVla2luZy4gSXQgcmV0dXJucyAwIGlmCi0gICBubyBjaGFyYWN0ZXJzIGFyZSB3YWl0 aW5nIGFuZCAxIGlmIGNoYXJhY3RlcnMgYXJlIHdhaXRpbmcgKGJ1dCB1bmxpa2UKLSAgIEZJT05S RUFELCBpdCBkb2VzIG5vdCB0ZWxsIHRoZSBhY3R1YWwgbnVtYmVyKS4gSWYgeW91ciBzeXN0ZW0g aGFzCi0gICByZGNoaygpLCBhZGQ6Ci0KLS1EUkRDSEs6ICBJbmNsdWRlIHRoaXMgaW4gQ0ZMQUdT IGlmIHlvdXIgc3lzdGVtIGhhcyB0aGUgcmRjaGsoKSBmdW5jdGlvbi4KLQotICAgT3RoZXJ3aXNl LCBpZiB5b3VyIHZlcnNpb24gb2YgVW5peCBoYXMgdGhlIHBvbGwoKSBmdW5jdGlvbiAoYW5kIHRo ZQotICAgL3Vzci9pbmNsdWRlL3BvbGwuaCBmaWxlKSAtLSB3aGljaCBhcHBlYXJzIHRvIGJlIGEg c3RhbmRhcmQgcGFydCBvZgotICAgU3lzdGVtIFYgZ29pbmcgYmFjayB0byBhdCBsZWFzdCBTVlIz LCBpbmNsdWRlOgotCi0tRENLX1BPTEwKLQotICA5LjguIE90aGVyIFN5c3RlbS1EZXBlbmRlbnQg RmVhdHVyZXMKLQotICAgWyBbMzE1XVRvcCBdIFsgWzMxNl1Db250ZW50cyBdIFsgWzMxN11TZWN0 aW9uIENvbnRlbnRzIF0gWyBbMzE4XU5leHQgXQotICAgWyBbMzE5XVByZXZpb3VzIF0KLQotICAg U3lzdGVtcyB3aXRoIDx0ZXJtaW9zLmg+IG1pZ2h0IGhhdmUgdGhlIHN5bWJvbCBJRVhURU4gZGVm aW5lZC4gVGhpcyBpcwotICAgdXNlZCB0byB0dXJuICJleHRlbmRlZCBmZWF0dXJlcyIgaW4gdGhl IHR0eSBkZXZpY2UgZHJpdmVyIG9uIGFuZCBvZmYsCi0gICBzdWNoIGFzIEN0cmwtTyB0byB0b2dn bGUgb3V0cHV0IGZsdXNoaW5nLCBDdHJsLVYgdG8gcXVvdGUgaW5wdXQKLSAgIGNoYXJhY3RlcnMs IGV0Yy4KLQotICAgSW4gbW9zdCBVbml4IGltcGxlbWVudGF0aW9ucywgaXQgc2hvdWxkIGJlIHR1 cm5lZCBvZmYgZHVyaW5nIEtlcm1pdAotICAgb3BlcmF0aW9uLCBzbyBpZiBbMzIwXWNrdXRpby5j IGZpbmRzIHRoaXMgc3ltYm9sLCBpdCB1c2VzIGl0LiBUaGlzIGlzCi0gICBuZWNlc3NhcnksIGF0 IGxlYXN0LCBvbiBCU0RJLiBPbiBzb21lIHN5c3RlbXMsIGhvd2V2ZXIsIElFWFRFTiBpcwotICAg ZWl0aGVyIG1pc2RlZmluZWQgb3IgbWlzaW1wbGVtZW50ZWQuIFRoZSBzeW1wdG9tIGlzIHRoYXQg Q1IsIHdoZW4gdHlwZWQKLSAgIHRvIHRoZSBjb21tYW5kIHByb2Nlc3NvciwgaXMgZWNob2VkIGFz IExGLCByYXRoZXIgdGhhbiBDUkxGLiBUaGlzCi0gICBoYXBwZW5zIChhdCBsZWFzdCkgb24gQ29u dmV4L09TIDkuMS4gVGhlIHNvbHV0aW9uIGlzIHRvIGFkZCB0aGUKLSAgIGZvbGxvd2luZyBzeW1i b2wgdG8gdGhlIG1ha2VmaWxlIHRhcmdldCdzIENGTEFDUzoKLQotLUROT0lFWFRFTgotCi0gICBI b3dldmVyLCBpbiBhdCBsZWFzdCBvbmUgVW5peCBpbXBsZW1lbnRhdGlvbiwgUU5YIDQuMjEsIElF WFRFTiBtdXN0IGJlCi0gICBzZXQgYmVmb3JlIGhhcmR3YXJlIGZsb3cgY29udHJvbCBjYW4gYmUg dXNlZC4KLQotICAgSW4gZWRpdHMgMTc3IGFuZCBlYXJsaWVyLCB3b3Jrc3RhdGlvbiB1c2VycyBu b3RpY2VkIGEgInNsb3cgc2NyZWVuCi0gICB3cml0aW5nIiBwaGVub21lbm9uIGR1cmluZyBpbnRl cmFjdGl2ZSBjb21tYW5kIHBhcnNpbmcuIFRoaXMgd2FzIHRyYWNlZAotICAgdG8gYSBzZXRidWYo KSBjYWxsIGluIFszMjFdY2t1dGlvLmMgdGhhdCBtYWRlIGNvbnNvbGUgKHN0ZG91dCkgd3JpdGVz Ci0gICB1bmJ1ZmZlcmVkLiBUaGlzIHNldGJ1ZigpIGNhbGwgaGFzIGJlZW4gdGhlcmUgZm9yZXZl ciwgYW5kIGNvdWxkIG5vdCBiZQotICAgcmVtb3ZlZCB3aXRob3V0IHNvbWUgcmlzay4gS2VybWl0 J3Mgb3BlcmF0aW9uIHdhcyB0ZXN0ZWQgb24gdGhlIE5lWFQgaW4KLSAgIGVkaXQgMTc4IHdpdGgg dGhlIHNldGJ1ZigpIGNhbGwgcmVtb3ZlZCwgYW5kIHRoZSBzbG93LXdyaXRpbmcgc3ltcHRvbQot ICAgd2FzIGN1cmVkLCBhbmQgZXZlcnl0aGluZyBlbHNlIChjb21tYW5kIHBhcnNpbmcsIHByb3Bl ciB3YWtldXAgb24gPywKLSAgIEVTQywgQ3RybC1VLCBhbmQgb3RoZXIgZWRpdGluZyBjaGFyYWN0 ZXJzLCB0ZXJtaW5hbCBlbXVsYXRpb24sCi0gICByZW1vdGUtbW9kZSBhbmQgbG9jYWwtbW9kZSBm aWxlIHRyYW5zZmVyLCBldGMpIHNlZW1lZCB0byB3b3JrIGFzIHdlbGwKLSAgIGFzIG9yIGJldHRl ciB0aGFuIGJlZm9yZS4gSW4gc3Vic2VxdWVudCBlZGl0cywgdGhpcyBjaGFuZ2Ugd2FzIG1hZGUg dG8KLSAgIG1hbnkgb3RoZXIgdmVyc2lvbnMgdG9vLCB3aXRoIG5vIGFwcGFyZW50IGlsbCBlZmZl Y3RzLiBUbyByZW1vdmUgdGhlCi0gICBzZXRidWYoKSBjYWxsIGZvciB5b3VyIHZlcnNpb24gb2Yg S2VybWl0LCBhZGQ6Ci0KLS1ETk9TRVRCVUYKLQotICAgTGF0ZXIgcmVwb3J0cyBpbmRpY2F0ZSB0 aGF0IGFkZGluZyAtRE5PU0VUQlVGIGhhcyBvdGhlciBiZW5lZmljaWFsCi0gICBlZmZlY3RzLCBs aWtlIGN1dHRpbmcgZG93biBvbiBzd2FwcGluZyB3aGVuIEtlcm1pdCBpcyBydW4gb24KLSAgIHdv cmtzdGF0aW9ucyB3aXRoIHNtYWxsIG1lbW9yaWVzLiBCdXQgQkVXQVJFOiBvbiBjZXJ0YWluIHNt YWxsIFVuaXgKLSAgIHN5c3RlbXMsIG5vdGFibHkgdGhlIEFUJlQgNjMwMCBhbmQgM0IxICh0aGUg dmVyeSBzYW1lIG9uZXMgdGhhdCBiZW5lZml0Ci0gICBmcm9tIE5PU0VUQlVGKSwgTk9TRVRCVUYg c2VlbXMgdG8gY29uZmxpY3Qgd2l0aCBDS19DVVJTRVMuIFRoZSBwcm9ncmFtCi0gICBidWlsZHMg YW5kIHJ1bnMgT0ssIGJ1dCBhZnRlciBvbmNlIHVzaW5nIHRoZSBjdXJzZXMgZGlzcGxheSwgZWNo b2luZyBpcwotICAgbWVzc2VkIHVwLiBJbiB0aGlzIGNhc2UsIHdlIHVzZSBhIFN5c3RlbS1WIHNw ZWNpZmljIHZhcmlhdGlvbiBpbiB0aGUKLSAgIGN1cnNlcyBjb2RlLCB1c2luZyBuZXd0ZXJtKCkg dG8gcHJldmVudCBTeXN0ZW0gViBmcm9tIGFsdGVyaW5nIHRoZQotICAgYnVmZmVyaW5nLiBTZWUg bWFrZWZpbGUgZW50cmllcyBmb3IgQVQmVCA2MzAwIGFuZCAzQjEuCi0KLSAgIFRoZSBVbml4IHZl cnNpb24gb2YgQy1LZXJtaXQgaW5jbHVkZXMgY29kZSB0byBzd2l0Y2ggdG8gZmlsZSBkZXNjcmlw dG9yCi0gICB6ZXJvIChzdGRpbikgZm9yIHJlbW90ZS1tb2RlIGZpbGUgdHJhbnNmZXIuIFRoaXMg Y29kZSBpcyBuZWNlc3NhcnkgdG8KLSAgIHByZXZlbnQgS2VybWl0IGZyb20gZ2l2aW5nIHRoZSBp bXByZXNzaW9uIHRoYXQgaXQgaXMgImlkbGUiIGR1cmluZyBmaWxlCi0gICB0cmFuc2ZlcnMsIHdo aWNoLCBhdCBzb21lIHNpdGVzLCBjYW4gcmVzdWx0IGluIHRoZSBqb2IgYmVpbmcgbG9nZ2VkIG91 dAotICAgaW4gdGhlIG1pZGRsZSBvZiBhbiBhY3RpdmUgZmlsZSB0cmFuc2ZlciBieSBpZGxlLWpv YiBtb25pdG9ycy4KLQotICAgSG93ZXZlciwgdGhpcyBmZWF0dXJlIGNhbiBpbnRlcmZlcmUgd2l0 aCBjZXJ0YWluIHNldHVwczsgZm9yIGV4YW1wbGUsCi0gICB0aGVyZSBpcyBhIHBhY2thZ2Ugd2hp Y2ggc3Vic3RpdHV0ZXMgYSBwdHkvdHR5IHBhaXIgZm9yIC9kZXYvdHR5IGFuZAotICAgc2V0cyBm aWxlIGRlc2NyaXB0b3IgMCB0byBiZSByZWFkLW9ubHksIHByZXZlbnRpbmcgS2VybWl0IGZyb20g c2VuZGluZwotICAgcGFja2V0cy4gT3IuLi4gV2hlbiBhIFVuaXggc2hlbGwgaXMgaW52b2tlZCB1 bmRlciB0aGUgUElDSyBlbnZpcm9ubWVudCwKLSAgIGZpbGUgZGVzY3JpcHRvciAwIGlzIGlub3Bl cmF0aXZlLgotCi0gICBUbyByZW1vdmUgdGhpcyBmZWF0dXJlIGFuZCBhbGxvdyBLZXJtaXQgdG8g d29yayBpbiBzdWNoIGVudmlyb25tZW50cywKLSAgIGFkZCB0aGUgY29tcGlsZS10aW1lIG9wdGlv bjoKLQotLUROT0ZEWkVSTwotCi0gICBPbiBzb21lIHZlcnNpb25zIG9mIFVuaXgsIGVhcmxpZXIg cmVsZWFzZXMgb2YgQy1LZXJtaXQgd2VyZSByZXBvcnRlZCB0bwotICAgcmVuZGVyIGEgdHR5IGRl dmljZSB1bnVzYWJsZSBhZnRlciBhIGhhbmd1cCBvcGVyYXRpb24uIEV4YW1wbGVzIGluY2x1ZGUK LSAgIElCTSBBSVggb24gdGhlIFJUIFBDIGFuZCBSUy82MDAwLiBBIHR5cGljYWwgc3ltcHRvbSBv ZiB0aGlzIHBoZW5vbWVub24KLSAgIGlzIHRoYXQgdGhlIERJQUwgY29tbWFuZCBkb2Vzbid0IHdv cmssIGJ1dCBDT05ORUNUaW5nIHRvIHRoZSBkZXZpY2UgYW5kCi0gICBkaWFsaW5nIG1hbnVhbGx5 IGRvIHdvcmsuIEEgZnVydGhlciB0ZXN0IGlzIHRvIFNFVCBESUFMIEhBTkdVUCBPRkYsCi0gICB3 aGljaCBzaG91bGQgbWFrZSBkaWFsaW5nIHdvcmsgb25jZSBieSBza2lwcGluZyB0aGUgcHJlLWRp YWwgaGFuZ3VwLgotICAgSG93ZXZlciwgYWZ0ZXIgdGhlIGNvbm5lY3Rpb24gaXMgYnJva2VuLCBp dCBjYW4ndCBiZSB1c2VkIGFueSBtb3JlOgotICAgc3Vic2VxdWVudCBhdHRlbXB0cyB0byBESUFM IHRoZSBzYW1lIGRldmljZSBkb24ndCB3b3JrLiBUaGUgY3VyZSBpcwotICAgdXN1YWxseSB0byBj bG9zZSBhbmQgcmVvcGVuIHRoZSBkZXZpY2UgYXMgcGFydCBvZiB0aGUgaGFuZ3VwIG9wZXJhdGlv bi4KLSAgIFRvIGRvIHRoaXMsIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBjb21waWxlLXRpbWUgb3B0 aW9uOgotCi0tRENMU09QTgotCi0gICBTaW1pbGFybHksIHRoZXJlIGlzIGEgc2VjdGlvbiBvZiBj b2RlIGluIHR0b3BlbigpLCB3aGljaCBkb2VzIGFub3RoZXIKLSAgIGNsb3NlKG9wZW4oKSkgdG8g Zm9yY2UgdGhlIE9fTkRFTEFZIG1vZGUgY2hhbmdlLiBPbiBzb21lIHN5c3RlbXMsIHRoZQotICAg Y2xvc2Uob3BlbigpKSBpcyByZXF1aXJlZCB0byBtYWtlIHRoZSBtb2RlIGNoYW5nZSB0YWtlIGVm ZmVjdCwgYW5kCi0gICBhcHBhcmVudGx5IG9uIG1vc3Qgb3RoZXJzIGl0IGRvZXMgbm8gaGFybS4g QnV0IHJlcG9ydGVkbHkgb24gYXQgbGVhc3QKLSAgIG9uZSBTeXN0ZW0gViBSNCBpbXBsZW1lbnRh dGlvbiwgYW5kIG9uIFNDTyBYZW5peCAzLjIsIHRoZSBjbG9zZShvcGVuKCkpCi0gICBvcGVyYXRp b24gaGFuZ3MgaWYgdGhlIGRldmljZSBsYWNrcyBjYXJyaWVyLCBFVkVOIFRIT1VHSCB0aGUgQ0xP Q0FMCi0gICBjaGFyYWN0ZXJpc3RpYyBoYXMganVzdCBiZWVuIHNldCB0byBhdm9pZCB0aGlzIHZl cnkgcHJvYmxlbS4gSWYgdGhpcwotICAgaGFwcGVucyB0byB5b3UsIGFkZCB0aGlzIHRvIHlvdXIg Q0ZMQUdTOgotCi0tRE5PQ09URk1DCi0KLSAgIG9yLCBlcXVpdmFsZW50bHksIGluIHlvdXIgS0ZM QUdTIG9uIHRoZSBtYWtlIGNvbW1hbmQgbGluZS4gSXQgc3RhbmRzCi0gICBmb3IgTk8gQ2xvc2Uo T3BlbigpKSBUbyBGb3JjZSBNb2RlIENoYW5nZS4KLQotICAgQy1LZXJtaXQgcmVuYW1lcyBmaWxl cyB3aGVuIHlvdSBnaXZlIGEgUkVOQU1FIGNvbW1hbmQgYW5kIGFsc28KLSAgIGFjY29yZGluZyB0 byB0aGUgY3VycmVudCBTRVQgRklMRSBDT0xMSVNJT04gb3B0aW9uIHdoZW4gcmVjZWl2aW5nCi0g ICBmaWxlcy4gVGhlIG5vcm1hbCBVbml4IHdheSB0byByZW5hbWUgYSBmaWxlIGlzIHZpYSB0d28g c3lzdGVtIGNhbGxzOgotICAgbGluaygpIGFuZCB1bmxpbmsoKS4gQnV0IHRoaXMgbGVhdmVzIG9w ZW4gYSB3aW5kb3cgb2YgdnVsbmVyYWJpbGl0eS4KLSAgIFNvbWUgVW5peCBzeXN0ZW1zIGFsc28g b2ZmZXIgYW4gYXRvbWljIHJlbmFtZShvbGRuYW1lLG5ld25hbWUpCi0gICBmdW5jdGlvbi4gSWYg eW91ciB2ZXJzaW9uIG9mIFVuaXggaGFzIHRoaXMgZnVuY3Rpb24sIGFkZCB0aGUgZm9sbG93aW5n Ci0gICB0byB5b3VyIENGTEFHUzoKLQotLURSRU5BTUUKLQotICAgQy1LZXJtaXQgcHJlZGVmaW5l cyB0aGUgUkVOQU1FIGZvciBzZXZlcmFsIFVuaXggdmVyc2lvbnMgaW4KLSAgIFszMjJdY2tjZGVi LmggKFNWUjQsIFNVTk9TNDEsIEJTRDQ0LCBBSVhSUywgZXRjKS4gWW91IGNhbiB0ZWxsIGlmCi0g ICByZW5hbWUoKSBpcyBiZWluZyB1c2VkIGlmIHRoZSBTSE9XIEZFQVRVUkVTIGNvbW1hbmQgaW5j bHVkZXMgUkVOQU1FIGluCi0gICB0aGUgY29tcGlsZXIgb3B0aW9ucyBsaXN0LiBJZiB0aGUgcHJl ZGVmaW5lZCBSRU5BTUUgc3ltYm9sIGNhdXNlcwotICAgdHJvdWJsZSwgdGhlbiBhZGQgTk9SRU5B TUUgdG8geW91ciBDRkxBR1MuIFRyb3VibGUgaW5jbHVkZXM6Ci0KLSAgICBhLiBMaW5rZXIgY29t cGxhaW5zIHRoYXQgX3JlbmFtZSBpcyBhbiB1bnJlc29sdmVkIHN5bWJvbC4KLSAgICBiLiBMaW5r aW5nIHdvcmtzLCBidXQgS2VybWl0J3MgUkVOQU1FIGNvbW1hbmQgZG9lc24ndCB3b3JrICh3aGlj aAotICAgICAgIGhhcHBlbnMgYmVjYXVzZSBvbGRlciB2ZXJzaW9ucyBvZiByZW5hbWUoKSBtaWdo dCBoYXZlIHRoZWlyCi0gICAgICAgYXJndW1lbnRzIHJldmVyc2VkKS4KLQotICAgSWYgcmVuYW1l KCkgaXMgbm90IHVzZWQsIHRoZW4gS2VybWl0IHVzZXMgbGluaygpL3VubGluaygpLCB3aGljaCBp cwotICAgZXF1aXZhbGVudCBleGNlcHQgaXQgaXMgbm90IGF0b21pYzogdGhlcmUgaXMgYSB0aW55 IGludGVydmFsIGluIHdoaWNoCi0gICBzb21lIG90aGVyIHByb2Nlc3MgbWlnaHQgImRvIHNvbWV0 aGluZyIgdG8gb25lIG9mIHRoZSBmaWxlcyBvciBsaW5rcy4KLQotICAgU29tZSBVbml4IHN5c3Rl bXMgKE9saXZldHRpIFgvT1MsIEFtZGFobCBVVFMvViwgSUNMIFNWUjMsIGV0YykgZGVmaW5lCi0g ICB0aGUgU19JU1JFRyBhbmQgU19JU0RJUiBtYWNyb3MgaW5jb3JyZWN0bHkuIFRoaXMgaXMgY29t cGVuc2F0ZWQgZm9yCi0gICBhdXRvbWF0aWNhbGx5IGluIFszMjNdY2t1ZmlvLmMuIE90aGVyIHN5 c3RlbXMgbWlnaHQgaGF2ZSB0aGlzIHNhbWUKLSAgIHByb2JsZW0uIElmIHlvdSBnZXQgYSBjb21w aWxlLXRpbWUgZXJyb3IgbWVzc2FnZSByZWdhcmRpbmcgU19JU1JFRwotICAgYW5kL29yIFNfSVNE SVIsIGFkZCB0aGUgZm9sbG93aW5nIHRvIHlvdXIgQ0ZMQUdTOgotCi0tRElTRElSQlVHCi0KLSAg IEZpbmFsbHksIGhlcmUncyBhIHN5bWJvbCB5b3Ugc2hvdWxkIE5FVkVSIGRlZmluZToKLQotLURD T01NRU5UCi0KLSAgIEl0J3MgdXNlZCBmb3IgY29tbWVudGluZyBvdXQgYmxvY2tzIG9mIGNvZGUu IElmIGZvciBzb21lIHJlYXNvbiB5b3UKLSAgIGZpbmQgdGhhdCB5b3VyIGNvbXBpbGVyIGhhcyBD T01NRU5UIGRlZmluZWQsIHRoZW4gYWRkIC1VQ09NTUVOVCB0bwotICAgQ0ZMQUdTIG9yIEtGTEFH UyEgU2ltaWxhcmx5LCBzb21lIGhlYWRlciBmaWxlcyBoYXZlIGJlZW4ga25vd24gdG8KLSAgIGRl ZmluZSBDT01NRU5ULCBpbiB3aGljaCBjYXNlIHlvdSBtdXN0IGFkZCAiI3VuZGVmIENPTU1FTlQi IHRvIGVhY2gKLSAgIEMtS2VybWl0IHNvdXJjZSBtb2R1bGUsIGFmdGVyIGFsbCB0aGUgI2luY2x1 ZGVzLgotCi0gIDkuOS4gVGVybWluYWwgSW50ZXJydXB0aW9uCi0KLSAgIFsgWzMyNF1Ub3AgXSBb IFszMjVdQ29udGVudHMgXSBbIFszMjZdU2VjdGlvbiBDb250ZW50cyBdIFsgWzMyN11OZXh0IF0K LSAgIFsgWzMyOF1QcmV2aW91cyBdCi0KLSAgIFdoZW4gQy1LZXJtaXQgZW50ZXJzIGludGVyYWN0 aXZlIGNvbW1hbmQgbW9kZSwgaXQgc2V0cyBhIENvbnRyb2wtQwotICAgKHRlcm1pbmFsIGtleWJv YXJkIGludGVycnVwdCA9IFNJR0lOVCkgdHJhcCB0byBhbGxvdyBpdCB0byByZXR1cm4gdG8KLSAg IHRoZSBjb21tYW5kIHByb21wdCB3aGVuZXZlciB0aGUgdXNlciB0eXBlcyBDb250cm9sLUMgKG9y IHdoYXRldmVyIGlzCi0gICBhc3NpZ25lZCB0byBiZSB0aGUgaW50ZXJydXB0IGNoYXJhY3Rlciku IFRoaXMgaXMgaW1wbGVtZW50ZWQgdXNpbmcKLSAgIHNldGptcCgpIGFuZCBsb25nam1wKCkuIE9u IHNvbWUgc3lzdGVtcywgZGVwZW5kaW5nIG9uIHRoZSBtYWNoaW5lCi0gICBhcmNoaXRlY3R1cmUg YW5kIEMgY29tcGlsZXIgYW5kIHdobyBrbm93cyB3aGF0IGVsc2UsIHlvdSBtaWdodCBnZXQKLSAg ICJNZW1vcnkgZmF1bHQgKGNvcmVkdW1wKSIgb3IgImxvbmdqbXAgYm90Y2giIGluc3RlYWQgb2Yg dGhlIGRlc2lyZWQKLSAgIGVmZmVjdCAodGhpcyBzaG91bGQgbm90IGhhcHBlbiBpbiA1QSgxOTAp IGFuZCBsYXRlcikuIEluIHRoYXQgY2FzZSwgYWRkCi0gICAtRE5PQ0NUUkFQIHRvIHlvdXIgQ0ZM QUdTIGFuZCByZWJ1aWxkIHRoZSBwcm9ncmFtLgotCi0gICBKb2IgY29udHJvbCAtLSB0aGUgYWJp bGl0eSB0byAic3VzcGVuZCIgQy1LZXJtaXQgb24gYSBVbml4IHN5c3RlbSBieQotICAgdHlwaW5n IHRoZSAic3VzcCIgY2hhcmFjdGVyIChub3JtYWxseSBDdHJsLVopIGFuZCB0aGVuIHJlc3VtZSBl eGVjdXRpb24KLSAgIGxhdGVyICh3aXRoIHRoZSAiZmciIGNvbW1hbmQpIC0tIGlzIGEgdHJpY2t5 IGJ1c2luZXNzLiBDLUtlcm1pdCBtdXN0Ci0gICB0cmFwIHN1c3BlbmQgc2lnbmFscyBzbyBpdCBj YW4gcHV0IHRoZSB0ZXJtaW5hbCBiYWNrIGludG8gbm9ybWFsIG1vZGUKLSAgIHdoZW4geW91IHN1 c3BlbmQgaXQgKEtlcm1pdCBwdXRzIHRoZSB0ZXJtaW5hbCBpbnRvIHZhcmlvdXMgc3RyYW5nZQot ICAgbW9kZXMgZHVyaW5nIGludGVyYWN0aXZlIGNvbW1hbmQgcGFyc2luZywgQ09OTkVDVCwgYW5k IGZpbGUgdHJhbnNmZXIpLgotICAgU3VwcG9ydGluZyBjb2RlIGlzIGNvbXBpbGVkIGludG8gQy1L ZXJtaXQgYXV0b21hdGljYWxseSBpZiA8c2lnbmFsLmg+Ci0gICBpbmNsdWRlcyBhIGRlZmluaXRp b24gZm9yIHRoZSBTSUdUU1RQIHNpZ25hbC4gSE9XRVZFUi4uLiBzb21lIHN5c3RlbXMKLSAgIGRl ZmluZSB0aGlzIHNpZ25hbCB3aXRob3V0IHN1cHBvcnRpbmcgam9iIGNvbnRyb2wgY29ycmVjdGx5 LiBZb3UgY2FuCi0gICBidWlsZCBLZXJtaXQgdG8gaWdub3JlIFNJR1RTVFAgc2lnbmFscyBieSBp bmNsdWRpbmcgdGhlIC1ETk9KQyBvcHRpb24KLSAgIGluIENGTEFHUy4gKFlvdSBjYW4gYWxzbyBk byB0aGlzIGF0IHJ1bnRpbWUgYnkgZ2l2aW5nIHRoZSBjb21tYW5kIFNFVAotICAgU1VTUEVORCBP RkYuKQotCi0gICAgIE5PVEU6IEFzIG9mIHZlcnNpb24gNUEoMTkwKSwgQy1LZXJtaXQgbWFrZXMg YW5vdGhlciBzYWZldHkgY2hlY2suCi0gICAgIEV2ZW4gaWYgam9iIGNvbnRyb2wgaXMgYXZhaWxh YmxlIGluIHRoZSBvcGVyYXRpbmcgc3lzdGVtIChhY2NvcmRpbmcKLSAgICAgdG8gdGhlIG51bWVy b3VzIGNoZWNrcyBtYWRlIGluIGNvbmdtKCkpLCBpdCB3aWxsIHN0aWxsIGRpc2FibGUgdGhlCi0g ICAgIGNhdGNoaW5nIG9mIFNJR1RTVFAgc2lnbmFscyBpZiBTSUdUU1RQIHdhcyBzZXQgdG8gU0lH X0lHTiBhdCB0aGUKLSAgICAgdGltZSBDLUtlcm1pdCB3YXMgc3RhcnRlZC4KLQotICAgU3lzdGVt IFYgUjMgYW5kIGVhcmxpZXIgc3lzdGVtcyBub3JtYWxseSBkbyBub3Qgc3VwcG9ydCBqb2IgY29u dHJvbC4gSWYKLSAgIHlvdSBoYXZlIGFuIFNWUjMgc3lzdGVtIHRoYXQgZG9lcywgaW5jbHVkZSB0 aGUgZm9sbG93aW5nIG9wdGlvbiBpbiB5b3VyCi0gICBDRkxBR1M6Ci0KLS1EU1ZSM0pDCi0KLSAg IE9uIHN5c3RlbXMgdGhhdCBjb3JyZWN0bHkgaW1wbGVtZW50IFBPU0lYIHNpZ25hbCBoYW5kbGlu Zywgc2lnbmFscyBjYW4KLSAgIGJlIGhhbmRsZWQgbW9yZSByZWxpYWJseSB0aGFuIGluIEJlbGws IEJlcmtlbGV5LCBvciBBVCZUIFVuaXhlcy4gT24KLSAgIHN5c3RlbXMgKHN1Y2ggYXMgUU5YKSB0 aGF0IGFyZSAic3RyaWN0bHkgUE9TSVgiLCBQT1NJWCBzaWduYWwgaGFuZGxpbmcKLSAgICptdXN0 KiBiZSB1c2VkLCBvdGhlcndpc2Ugbm8gc2lnbmFsIHdpbGwgd29yayBtb3JlIHRoYW4gb25jZS4g SWYgeW91Ci0gICBoYXZlIFBPU0lYLWJhc2VkIHN5c3RlbSBhbmQgeW91IGZpbmQgdGhhdCB5b3Vy IHZlcnNpb24gb2YgS2VybWl0Ci0gICByZXNwb25kcyB0byBDdHJsLUMgKFNJR0lOVCkgb3IgQ3Ry bC1aIChTSUdUU1RQKSBvbmx5IG9uY2UsIHRoZW4geW91Ci0gICBzaG91bGQgYWRkIHRoZSBmb2xs b3dpbmcgb3B0aW9uIHRvIHlvdXIgQ0ZMQUdTOgotCi0tRENLX1BPU0lYX1NJRwotCi0gICBCdXQg YmUgY2FyZWZ1bDsgc29tZSBQT1NJWCBpbXBsZW1lbnRhdGlvbnMsIG5vdGFibHkgNC40QlNELCBp bmNsdWRlCi0gICBQT1NJWCBzaWduYWwgaGFuZGxpbmcgc3ltYm9scyBhbmQgZnVuY3Rpb25zIGFz ICJzdHVicyIgb25seSwgd2hpY2ggZG8KLSAgIG5vdGhpbmcuIExvb2sgaW4gPHNpZ25hbC5oPiBm b3Igc2lnc2V0am1wIGFuZCBzaWdsb25nam1wIGFuZCByZWFkIHRoZQotICAgY29tbWVudHMuCi0K LTEwLiBESUFMSU5HIE9VVCBBTkQgQ09PUkRJTkFUSU5HIFdJVEggVVVDUAotCi0gICBbIFszMjld VG9wIF0gWyBbMzMwXUNvbnRlbnRzIF0gWyBbMzMxXU5leHQgXSBbIFszMzJdUHJldmlvdXMgXQot Ci0gICBUaGUgc2hvcnQgdmVyc2lvbiAoZ2VuZXJhbCk6Ci0KLSAgICAgSW4gb3JkZXIgZm9yIEMt S2VybWl0IHRvIGJlIGFibGUgdG8gZGlhbCBvdXQgZnJvbSB5b3VyIFVuaXgKLSAgICAgY29tcHV0 ZXIsIHlvdSBuZWVkIHRvIGdpdmUgaXQgdGhlIHNhbWUgb3duZXIsIGdyb3VwLCBhbmQgcGVybWlz c2lvbnMKLSAgICAgYXMgeW91ciBvdGhlciBkaWFsb3V0IHByb2dyYW1zLCBzdWNoIGFzIGN1LCB0 aXAsIG1pbmljb20sIHV1Y3AsCi0gICAgIHNleW9uLCBldGMuCi0KLSAgIFRoZSBzaG9ydCB2ZXJz aW9uIGZvciBMaW51eCBvbmx5OgotCi0gICAgIFNpbmNlIFJlZCBIYXQgNy4yLCBhYm91dCAyMDAy LCBMaW51eCBkb2VzIG5vdCBsZWF2ZSB0aGUgbG9ja2ZpbGUKLSAgICAgaGFuZGxpbmcgdG8gZWFj aCBhcHBsaWNhdGlvbiwgYnV0IGluc3RlYWQgcHJvdmlkZXMgYW4gZXh0ZXJuYWwKLSAgICAgYXBw bGljYXRpb24sIC91c3Ivc2Jpbi9sb2NrZGV2LCB0aGF0IGFsbCBhcHBsaWNhdGlvbnMgc2hvdWxk IGludm9rZQotICAgICB3aGVuIHRoZXkgbmVlZCB0byBhY2Nlc3MgYSBzZXJpYWwgcG9ydDsgbG9j a2RldiBsb2NrcyBhbmQgdW5sb2NrcwotICAgICB0aGUgcG9ydCB3aXRob3V0IHJlcXVpcmluZyB0 aGUgYXBwbGljYXRpb24gdG8gaGF2ZSBwcml2aWxlZ2VzLCBzaW5jZQotICAgICB0aGUgcHJpdmls ZWdlcyBvbiB0aGUgbG9ja2ZpbGUgZGlyZWN0b3J5IGFyZSBhc3NpZ25lZCB0byBsb2NrZGV2Lgot ICAgICBDLUtlcm1pdCA4LjAuMjExIGFuZCBsYXRlciBzdXBwb3J0IHRoaXMgbWV0aG9kLiBCdXQg Qy1LZXJtaXQgc3RpbGwKLSAgICAgbmVlZHMgdG8gYmUgYWJsZSB0byBvcGVuIHRoZSBwb3J0IGl0 c2VsZiwgYW5kIHRoZXJlZm9yZSBpZiB0aGUKLSAgICAgcG9ydCdzIHBlcm1pc3Npb25zIGRvIG5v dCBhbGxvdyByZWFkL3dyaXRlIGFjY2VzcyB0byB0aGUgZ2VuZXJhbAotICAgICBwdWJsaWMsIHRo ZSBnZW5lcmFsIHJ1bGUgbXVzdCBzdGlsbCBiZSBmb2xsb3dlZDogaW4gdGhlIG1vc3QgY29tbW9u Ci0gICAgIGNhc2UsIGl0IG11c3QgYmUgU0VUR0lEIHRvIHRoZSBncm91cCB1dWNwIChleHBsYWlu ZWQgYmVsb3cpLiBJZiBhCi0gICAgIHByZS04LjAuMjExIHZlcnNpb24gb2YgQy1LZXJtaXQgaXMg dG8gYmUgaW5zdGFsbGVkIGZvciB1c2Ugd2l0aAotICAgICBzZXJpYWwgcG9ydHMgb24gYW55IHZl cnNpb24gb2YgTGludXgsIGl0IG11c3Qgc3RpbGwgYmUgaW5zdGFsbGVkIGFzCi0gICAgIGRlc2Ny aWJlZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLgotCi0gICBUaGUgbG9uZyB2ZXJzaW9uOgot Ci0gICBNYWtlIHN1cmUgeW91ciBkaWFsb3V0IGxpbmUgaXMgY29ycmVjdGx5IGNvbmZpZ3VyZWQg Zm9yIGRpYWxpbmcgb3V0IChhcwotICAgb3Bwb3NlZCB0byBsb2dpbikuIFRoZSBtZXRob2QgZm9y IGRvaW5nIHRoaXMgaXMgZGlmZmVyZW50IGZvciBlYWNoIGtpbmQKLSAgIG9mIFVuaXguIENvbnN1 bHQgeW91ciBzeXN0ZW0gZG9jdW1lbnRhdGlvbiBmb3IgY29uZmlndXJpbmcgbGluZXMgZm9yCi0g ICBkaWFsaW5nIG91dCAoZm9yIGV4YW1wbGUsIFN1biBTUEFSQ3N0YXRpb24gSVBDIHVzZXJzIHNo b3VsZCByZWFkIHRoZQotICAgc2VjdGlvbiAiU2V0dGluZyB1cCBNb2RlbSBTb2Z0d2FyZSIgaW4g dGhlIERlc2t0b3AgU1BBUkMgU3VuIFN5c3RlbSBhbmQKLSAgIE5ldHdvcmsgTWFuYWdlcidzIEd1 aWRlLCBvciB0aGUgVGVybWluYWxzIGFuZCBNb2RlbXMgc2VjdGlvbiBvZiB0aGUgSFAKLSAgIG1h bnVhbCwgIkNvbmZpZ3VyaW5nIEhQLVVYIGZvciBQZXJpcGhlcmFscyIgKGUuZy4gL3Vzci9zYmlu L3NhbSA9PgotICAgUGVyaXBoZXJhbCBEZXZpY2VzID0+IFRlcm1pbmFscyBhbmQgTW9kZW1zID0+ IEFkZCBNb2RlbSkuCi0KLSAgIFVubGlrZSBtb3N0IG90aGVyIG11bHRpdXNlciwgbXVsdGl0YXNr aW5nIG9wZXJhdGluZyBzeXN0ZW1zLCBVbml4Ci0gICBhbGxvd3MgbXVsdGlwbGUgdXNlcnMgdG8g YWNjZXNzIHRoZSBzYW1lIHNlcmlhbCBkZXZpY2UgYXQgdGhlIHNhbWUKLSAgIHRpbWUsIGV2ZW4g dGhvdWdoIHRoZXJlIGlzIG5vIGVhcnRobHkgcmVhc29uIHdoeSB0d28gdXNlcnMgc2hvdWxkIGRv Ci0gICB0aGlzLiBXaGVuIHRoZXkgZG8sIHVzZXIgQSB3aWxsIHJlYWQgc29tZSBvZiB0aGUgaW5j b21pbmcgY2hhcmFjdGVycywKLSAgIGFuZCB1c2VyIEIgd2lsbCByZWFkIHRoZSBvdGhlcnMuIElu IGFsbCBsaWtlbGlob29kLCBuZWl0aGVyIHVzZXIgd2lsbAotICAgc2VlIHRoZW0gYWxsLiBGdXJ0 aGVybW9yZSwgVXNlciBCIGNhbiBoYW5nIHVwIFVzZXIgQSdzIGNhbGwsIGFuZCBzbwotICAgb25l LgotCi0gICBSYXRoZXIgdGhhbiBjaGFuZ2UgVW5peCB0byBlbmZvcmNlIGV4Y2x1c2l2ZSBhY2Nl c3MgdG8gc2VyaWFsIGRldmljZXMKLSAgIHN1Y2ggYXMgdHR5cywgd2hlbiBpdCBtaWdodCBzdGls bCBoYXZlIGJlZW4gcG9zc2libGUsIFVuaXggZGV2ZWxvcGVycwotICAgb3B0ZWQgZm9yIGEgImxv Y2sgZmlsZSIgbWVjaGFuaXNtLiBBbnkgcHJvY2VzcyB0aGF0IHdhbnRzIHRvIG9wZW4gYSB0dHkK LSAgIGRldmljZSBzaG91bGQgZmlyc3QgY2hlY2sgdG8gc2VlIGlmIGEgZmlsZSBvZiBhIGNlcnRh aW4gbmFtZSBleGlzdHMsCi0gICBhbmQgaWYgc28sIG5vdCB0byBvcGVuIHRoZSBkZXZpY2UuIElm IHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LCB0aGUKLSAgIHByb2Nlc3MgY3JlYXRlcyB0aGUgZmls ZSBhbmQgdGhlbiBvcGVucyB0aGUgZGV2aWNlLiBXaGVuIHRoZSBwcm9jZXNzCi0gICBjbG9zZXMg dGhlIGRldmljZSwgaXQgZGVzdHJveXMgdGhlIGxvY2tmaWxlLiBUaGlzIHByb2NlZHVyZSB3YXMK LSAgIG9yaWdpbmF0ZWQgZm9yIHVzZSB3aXRoIFVuaXgncyBVVUNQLCBDVSwgYW5kIFRJUCBwcm9n cmFtcywgYW5kIHNvIHRoZXNlCi0gICBsb2NrZmlsZXMgYXJlIGNvbW1vbmx5IGNhbGxlZCAiVVVD UCBsb2NrZmlsZXMiIChVVUNQID0gVW5peC10by1Vbml4Ci0gICBDb3B5IFByb2dyYW0pLgotCi0g ICBBcyB5b3UgY2FuIGltYWdpbmUsIHRoaXMgbWV0aG9kIGlzIHJpZGRsZWQgd2l0aCBwaXRmYWxs czoKLQotICAgICAqIElmIGEgcHJvY2VzcyBkb2VzIG5vdCBvYnNlcnZlIHRoZSBwcmV2YWlsaW5n IGxvY2tmaWxlIGNvbnZlbnRpb24sCi0gICAgICAgdGhlbiBpdCBjYW4gaW50ZXJmZXJlIHdpdGgg b3RoZXIgInBvbGl0ZSIgcHJvY2Vzc2VzLiBBbmQgaW4gZmFjdCwKLSAgICAgICB2ZXJ5IGZldyBV bml4IGFwcGxpY2F0aW9ucyBvciBjb21tYW5kcyBoYW5kbGUgbG9ja2ZpbGVzIGF0IGFsbDsgYW4K LSAgICAgICBvcmlnaW5hbCBkZXNpZ24gZ29hbCBvZiBVbml4IHdhcyB0aGF0ICJldmVyeXRoaW5n IGlzIGEgZmlsZSIsIGFuZAotICAgICAgIGNvdW50bGVzcyB1dGlsaXRpZXMgb3BlcmF0ZSBvbiBm aWxlcyBkaXJlY3RseSAoYnkgb3BlbmluZyB0aGVtKSBvcgotICAgICAgIGluZGlyZWN0bHkgdGhy b3VnaCByZWRpcmVjdGlvbiBvZiBzdGFuZGFyZCBpL28sIHdpdGhvdXQgY3JlYXRpbmcgb3IKLSAg ICAgICBsb29raW5nIGZvciBsb2NrZmlsZXMuCi0gICAgICogSWYgYSBwcm9jZXNzIGNyYXNoZXMg d2hpbGUgaXQgaGFzIHRoZSBkZXZpY2Ugb3BlbiwgdGhlIGxvY2tmaWxlIGlzCi0gICAgICAgbGVm dCBiZWhpbmQsIHByZXZlbnRpbmcgZnVydGhlciBwcm9jZXNzZXMgZnJvbSB1c2luZyB0aGUgZGV2 aWNlLgotICAgICAqIFZhcmlvdXMgdmVyc2lvbnMgb2YgVW5peCB1c2UgZGlmZmVyZW50IG5hbWVz IGZvciB0aGUgbG9ja2ZpbGVzLCBwdXQKLSAgICAgICB0aGVtIGluIGRpZmZlcmVudCBkaXJlY3Rv cmllcywgd2l0aCBkaWZmZXJlbnQgb3duZXJzIGFuZCBncm91cHMgYW5kCi0gICAgICAgcGVybWlz c2lvbnMsIGFuZCBzcGVjaWZ5IHRoZWlyIGNvbnRlbnRzIGRpZmZlcmVudGx5LgotICAgICAqIE9u IGEgZ2l2ZW4gcGxhdGZvcm0sIHRoZSBsb2NrZmlsZSBjb252ZW50aW9ucyBtYXkgY2hhbmdlIGZy b20gb25lCi0gICAgICAgVW5peCByZWxlYXNlIHRvIHRoZSBuZXh0IChmb3IgZXhhbXBsZSwgU3Vu T1MgNC4wIHRvIDQuMSkgb3IsIGluIHRoZQotICAgICAgIGNhc2Ugb2YgTGludXgsIGFjcm9zcyBk aWZmZXJlbnQgZGlzdHJpYnV0aW9ucy4KLSAgICAgKiBUaGUgc2FtZSB0dHkgZGV2aWNlIG1pZ2h0 IGhhdmUgbW9yZSB0aGFuIG9uZSBuYW1lLCBhbmQgbW9zdAotICAgICAgIGxvY2tmaWxlIGNvbnZl bnRpb25zIGRvbid0IGFsbG93IGZvciB0aGlzLiBTaW1pbGFybHkgZm9yIHN5bWJvbGljCi0gICAg ICAgbGlua3MuCi0KLSAgIEluIGFuIGF0dGVtcHQgdG8gYWRkcmVzcyB0aGUgcHJvYmxlbSBvZiAi c3RhbGUiIGxvY2tmaWxlcywgbW9zdCBVVUNQCi0gICBpbXBsZW1lbnRhdGlvbnMgcHV0IHRoZSBQ SUQgKFByb2Nlc3MgSUQpIG9mIHRoZSBjcmVhdGluZyBwcm9jZXNzIGluIHRoZQotICAgbG9ja2Zp bGUuIFRodXMsIGFub3RoZXIgcHJvY2VzcyB0aGF0IHdhbnRzIHRvIG9wZW4gdGhlIGNvcnJlc3Bv bmRpbmcKLSAgIGRldmljZSBjYW4gY2hlY2sgbm90IG9ubHkgZm9yIHRoZSBsb2NrZmlsZSBpdHNl bGYsIGJ1dCBhbHNvIGNhbiBjaGVjawotICAgdGhlIFBJRCBmb3IgdmFsaWRpdHkuIEJ1dCB0aGlz IGRvZXNuJ3Qgd29yayB3ZWxsIGVpdGhlcjoKLQotICAgICAqIFBJRHMgYXJlIHN0b3JlZCBpbiBk aXZlcnNlIGZvcm1hdHMgdGhhdCBjaGFuZ2Ugd2l0aCBldmVyeSBuZXcKLSAgICAgICByZWxlYXNl IChzaG9ydCwgaW50ZWdlciwgbG9uZywgb3Igc3RyaW5nIGluIGFueSBvZiB2YXJpb3VzCi0gICAg ICAgZm9ybWF0cykuIElmIHRoZSByZWFkaW5nIHByb2dyYW0gZG9lcyBub3QgZm9sbG93IHRoZSBz YW1lCi0gICAgICAgY29udmVudGlvbiBhcyB0aGUgd3JpdGluZyBwcm9ncmFtLCBpdCBjYW4gZGlh Z25vc2UgYSB2YWxpZCBQSUQgdG8KLSAgICAgICBiZSBpbnZhbGlkLCBhbmQgdGhlcmVmb3JlIG5v dCBob25vciB0aGUgbG9jay4KLSAgICAgKiBQSURzIHJlY3ljbGUuIElmIHRoZSBsb2NrZmlsZSB3 YXMgY3JlYXRlZCBieSBQSUQgMTIzNCwgd2hpY2ggbGF0ZXIKLSAgICAgICBjcmFzaGVkIHdpdGhv dXQgcmVtb3ZpbmcgdGhlIGxvY2tmaWxlLCBhbmQgdGhlbiBhIG5ldyBwcm9jZXNzIDEyMzQKLSAg ICAgICBleGlzdHMgYSB0aGUgdGltZSB0aGUgbG9ja2ZpbGUgaXMgY2hlY2tlZCwgdGhlIGxvY2tm aWxlIHdpbGwgYmUKLSAgICAgICBpbXByb3Blcmx5IHRha2VuIGFzIHZhbGlkLCBhbmQgYWNjZXNz IHRvIHRoZSBkZXZpY2UgZGVuaWVkCi0gICAgICAgdW5uZWNlc3NhcmlseS4KLQotICAgU2V2ZXJh bCB0ZWNobmlxdWVzIGFkZHJlc3MgdGhlIHByb2JsZW0gb2YgbXVsdGlwbGUgbmFtZXMgZm9yIHRo ZSBzYW1lCi0gICBkZXZpY2U6Ci0KLSAgICAgKiBNdWx0aXBsZSBsb2NrZmlsZXMuIEZvciBleGFt cGxlLCBpZiB0aGUgdXNlciBvcGVucyBhIGRldmljZSB0aHJvdWdoCi0gICAgICAgYSBzeW1saW5r LCBhIGxvY2tmaWxlIGlzIGNyZWF0ZWQgZm9yIGJvdGggdGhlIHN5bWxpbmsgbmFtZSBhbmQgdGhl Ci0gICAgICAgdHJ1ZSBuYW1lIChvYnRhaW5lZCBmcm9tIHJlYWRsaW5rKCkpLiBIb3dldmVyLCB3 aGVuIG11bHRpcGxlCi0gICAgICAgZHJpdmVycyBhcmUgaW5zdGFsbGVkIGZvciB0aGUgc2FtZSBk ZXZpY2UgKGUuZy4gL2Rldi9jdWEsCi0gICAgICAgL2Rldi9jdWZhLCBldGMpLCB0aGlzIGFwcHJv YWNoIHdvbid0IHdvcmsgdW5sZXNzIGFsbCBhcHBsaWNhdGlvbnMKLSAgICAgICAqa25vdyogYWxs IHRoZSBkaWZmZXJlbnQgbmFtZXMgZm9yIHRoZSBzYW1lIGRldmljZSBhbmQgbWFrZQotICAgICAg IGxvY2tmaWxlcyBmb3IgYWxsIG9mIHRoZW0sIHdoaWNoIGlzIG9idmlvdXNseSBub3QgcHJhY3Rp Y2FsLgotICAgICAqIExvY2tmaWxlcyB3aG9zZSBuYW1lcyBhcmUgbm90IGJhc2VkIG9uIHRoZSBk ZXZpY2UgbmFtZS4gVGhlc2UKLSAgICAgICBsb2NrZmlsZXMgZ2VuZXJhbGx5IGhhdmUgbmFtZXMg bGlrZSBMSy5pbm9kZS9tYWpvci9taW5vciwgd2hlcmUKLSAgICAgICBpbm9kZSwgbWFqb3IsIGFu ZCBtaW5vciBhcmUgbnVtYmVycywgd2hpY2ggd2lsbCBhbHdheXMgYmUgdGhlIHNhbWUKLSAgICAg ICBmb3IgYW55IHBoeXNpY2FsIGRldmljZSwgbm8gbWF0dGVyIHdoYXQgaXRzIG5hbWUuIFRoaXMg Zm9ybSBvZgotICAgICAgIGxvY2tmaWxlIGlzIHVzZWQgaW4gU3lzdGVtIFYgUjQgYW5kIGl0cyBk ZXJpdmF0aXZlcywgc3VjaCBhcwotICAgICAgIFNvbGFyaXMsIFVuaXhXYXJlLCBldGMuIElmIGxv Y2tmaWxlcyBtdXN0IGJlIHVzZWQgKGFzIG9wcG9zZWQgdG8sCi0gICAgICAgc2F5LCBrZXJuZWwt YmFzZWQgbG9ja3MpLCB0aGlzIHdvdWxkIHNlZW0gdG8gYmUgdGhlIG1vc3QgZWZmZWN0aXZlCi0g ICAgICAgZm9ybS4KLQotICAgTW9zdCB2ZXJzaW9ucyBvZiBVbml4IHdlcmUgbm90IGRlc2lnbmVk IHRvIGFjY29tbW9kYXRlIHRoaXJkLXBhcnR5Ci0gICBjb21tdW5pY2F0aW9ucyBzb2Z0d2FyZTsg dGh1cyB2ZW5kb3JzIG9mIHRoZXNlIFVuaXggcHJvZHVjdHMgZmVlbCBubwotICAgY29tcHVuY3Rp b24gYWJvdXQgY2hhbmdpbmcgbG9ja2ZpbGUgY29udmVudGlvbnMgZnJvbSByZWxlYXNlIHRvCi0g ICByZWxlYXNlLCBzaW5jZSB0aGV5IGFsc28gY2hhbmdlIHRoZWlyIHZlcnNpb25zIG9mIHRoZSBj dSwgdXVjcCwgdGlwLAotICAgZXRjLCBwcm9ncmFtcyBhdCB0aGUgc2FtZSB0aW1lIHRvIG1hdGNo LiBBbmQgc2luY2UgdGhlIHNvdXJjZSBjb2RlIHRvCi0gICB0aGVzZSBwcm9ncmFtcyBtaWdodCBu b3QgYmUgcHVibGlzaGVkLCBpdCBpcyBkaWZmaWN1bHQgZm9yIG1ha2VycyBvZgotICAgdGhpcmQt cGFydHkgcHJvZHVjdHMgbGlrZSBDLUtlcm1pdCB0byBmaW5kIG91dCB3aGF0IHRoZSBuZXcgY29u dmVudGlvbnMKLSAgIGFyZS4gSXQgYWxzbyBmb3JjZXMgcmVsZWFzZSBvZiBuZXcgdmVyc2lvbnMg b2YgQy1LZXJtaXQgd2hlbmV2ZXIgdGhlIE9TCi0gICB2ZW5kb3IgbWFrZXMgYSBjaGFuZ2UgbGlr ZSB0aGlzLgotCi0gICBTb21lIFVuaXggdmVuZG9ycyBoYXZlIHRha2VuIGEgc21hbGwgc3RlcCB0 byBzaW1wbGlmeSBjb21tdW5pY2F0aW9ucwotICAgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgZm9y IHRoZWlyIHByb2R1Y3RzOiB0aGUgaW5jbHVzaW9uIG9mIGxvY2tmaWxlCi0gICByb3V0aW5lcyBp biB0aGUgc3RhbmRhcmQgc3lzdGVtIEMgcnVudGltZSBsaWJyYXJpZXMgdG8gc2hpZWxkIHRoZQot ICAgYXBwbGljYXRpb24gZnJvbSB0aGUgZGV0YWlscyBvZiBsb2NrZmlsZSBtYW5hZ2VtZW50IChJ Qk0gQUlYIGlzIGFuCi0gICBleGFtcGxlKS4gV2hlbiBzdWNoIHJvdXRpbmVzIGFyZSB1c2VkLCBj b21tdW5pY2F0aW9ucyBhcHBsaWNhdGlvbnMgZG8KLSAgIG5vdCBuZWVkIG1vZGlmaWNhdGlvbiB3 aGVuIGxvY2tmaWxlIGNvbnZlbnRpb25zIGNoYW5nZSAoYWx0aG91Z2ggdGhleQotICAgd2lsbCBu ZWVkIHJlY29tcGlsaW5nIGlmIHRoZSByb3V0aW5lcyBhcmUgc3RhdGljYWxseSBsaW5rZWQgaW50 byB0aGUKLSAgIGFwcGxpY2F0aW9uKS4gSW4gdGhlIEFJWCBleGFtcGxlLCB0aGUgc2ltcGxlIGZ1 bmN0aW9uIGNhbGxzIHR0eWxvY2soKSwKLSAgIHR0eXVubG9jaygpLCBhbmQgdHR5bG9ja2VkKCkg cmVwbGFjZSBodW5kcmVkcyBvZiBsaW5lcyBvZiB1Z2x5IGNvZGUgaW4KLSAgIEMtS2VybWl0IHRo YXQgYXR0ZW1wdHMgdG8ga2VlcCBwYWNlIHdpdGggZXZlcnkgcmVsZWFzZSBvZiBldmVyeSBVbml4 Ci0gICBwcm9kdWN0IG92ZXIgdGhlIGxhc3QgMjAgeWVhcnMuIEluY2x1c2lvbiBvZiB0dHlsb2Nr KCkgY29kZSBvY2N1cnMKLSAgIHdoZW46Ci0KLS1EVVNFVFRZTE9DSwotCi0gICBpcyBpbmNsdWRl ZCBpbiB0aGUgQ0ZMQUdTLgotCi0gICBJZiBzdWNoIHJvdXRpbmVzIGFyZSBhdmFpbGFibGUsIHRo ZXkgc2hvdWxkIGJlIHVzZWQuIFRoZSByZXN0IG9mIHRoaXMKLSAgIHNlY3Rpb24gYXBwbGllcyB3 aGVuIHRoZXkgYXJlIG5vdC4KLQotICAgVG8gZml0IGluIHdpdGggVVVDUCBhbmQgb3RoZXIgVW5p eC1iYXNlZCBzZXJpYWwtcG9ydCBjb21tdW5pY2F0aW9uCi0gICBzb2Z0d2FyZSwgQy1LZXJtaXQg bXVzdCBoYXZlIHRoZSBzYW1lIGlkZWEgYXMgeW91ciBzeXN0ZW0ncyB1dWNwLCBjdSwKLSAgIGFu ZCB0aXAgcHJvZ3JhbXMgYWJvdXQgd2hhdCB0aGUgVVVDUCBsb2NrIGRpcmVjdG9yeSBpcyBjYWxs ZWQsIHdoYXQgdGhlCi0gICBsb2NrZmlsZSBpdHNlbGYgaXMgY2FsbGVkLCBhbmQgd2hhdCBpdHMg Y29udGVudHMgc2hvdWxkIGJlLiBJbiBtb3N0Ci0gICBjYXNlcywgQy1LZXJtaXQgcHJlcHJvY2Vz c29yIGZsYWdzIGNyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgY29uZmlndXJhdGlvbgotICAgYXQgY29t cGlsZSB0aW1lIGlmIHRoZSBhcHByb3ByaWF0ZSBtYWtlZmlsZSB0YXJnZXQgd2FzIHVzZWQgKHNl ZQotICAgWzMzM11ja3V0aW8uYykuIFRoZSBmb2xsb3dpbmcgQ0ZMQUdTIG9wdGlvbnMgY2FuIGJl IHVzZWQgdG8gb3ZlcnJpZGUKLSAgIHRoZSBidWlsdC1pbiBjb25maWd1cmF0aW9uOgotCi0gICAt RExDS0RJUgotICAgICAgICAgIFRlbGxzIEtlcm1pdCB0aGF0IHRoZSBVVUNQIGxvY2sgZGlyZWN0 b3J5IGlzCi0gICAgICAgICAgL3Vzci9zcG9vbC91dWNwL0xDSy4KLQotICAgLURBQ1VDTlRSTAot ICAgICAgICAgIFRlbGxzIEtlcm1pdCB0byB1c2UgdGhlIEJTRCA0LjMgYWN1Y250cmwoKSBwcm9n cmFtIHRvIHR1cm4gb2ZmCi0gICAgICAgICAgZ2V0dHkgKGxvZ2luKSBvbiB0aGUgbGluZSBiZWZv cmUgdXNpbmcgaXQsIGFuZCByZXN0b3JlIGdldHR5Ci0gICAgICAgICAgd2hlbiBkb25lLgotCi0g ICAtREhEQlVVQ1AKLSAgICAgICAgICBJbmNsdWRlIHRoaXMgaWYgeW91ciBzeXN0ZW0gdXNlcyBI b25leSBEYW5CZXIgVVVDUCwgaW4gd2hpY2ggdGhlCi0gICAgICAgICAgbG9ja2ZpbGUgZGlyZWN0 b3J5IGFuZCBmb3JtYXQgYXJlIHJlbGF0aXZlbHkgc3RhbmRhcmRpemVkLgotCi0gICAtRExPQ0tf RElSPVxcXCIveHh4L3l5eVxcXCIKLSAgICAgICAgICBHaXZlcyB0aGUgbG9jayBkaXJlY3Rvcnkg bmFtZSBleHBsaWNpdGx5LiBUaGUgdHJpcGxlIHF1b3RpbmcgaXMKLSAgICAgICAgICBuZWNlc3Nh cnkuIEZvciBleGFtcGxlOgotCi1DRkxBR1M9IC1EQlNENCAtRExPQ0tfRElSPVxcXCIvdXNyL2xv Y2FsL2xvY2tzXFxcIiAtRE5PREVCVUcKLQotICAgICAgICAgIChOT1RFOiBUaGUgdHJpcGxlIHF1 b3RpbmcgYXNzdW1lcyB0aGlzIGlzIGEgInRvcC1sZXZlbCIgbWFrZQotICAgICAgICAgIGVudHJ5 LCBhbmQgbm90IGEgbWFrZSBlbnRyeSB0aGF0IGNhbGxzIGFub3RoZXIgb25lLikKLQotICAgLURM RkRFVk5PIFRoZSBsb2NrZmlsZSBuYW1lIHVzZXMgdGhlIHR0eSBkZXZpY2UgaW5vZGUgYW5kIG1h am9yIGFuZAotICAgICAgICAgIG1pbm9yCi0gICAgICAgICAgbnVtYmVyczogTEsuZGV2Lm1hai5t aW4sIGFzIGluIFN5cyBWIFI0LCBlLmcuIExLLjAzNS4wNDQuMDA4LgotCi0gICBXaGVuIHRoZSBM Sy5pbm9kZS5tYWpvci5taW5vciBmb3JtIGlzIHVzZWQsIGEgc2luZ2xlIGxvY2tmaWxlIGlzCi0g ICBlbm91Z2guIE90aGVyd2lzZSwgYSBzaW5nbGUgbG9ja2ZpbGUgcmFyZWx5IHN1ZmZpY2VzLiBG b3IgZXhhbXBsZSwgaW4KLSAgIExpbnV4LCBpdCBpcyBjb21tb24gdG8gaGF2ZSBhIC9kZXYvbW9k ZW0gc3ltYm9saWMgbGluayB0byBhbiBhY3R1YWwKLSAgIGRpYWxvdXQgZGV2aWNlLCBsaWtlIC9k ZXYvY3VhMCBvciAvZGV2L3R0eVMwLCB3aG9zZSBwdXJwb3NlIGlzIHRvIGhpZGUKLSAgIHRoZSBk ZXRhaWxzIG9mIHRoZSBhY3R1YWwgZHJpdmVyIGZyb20gdGhlIHVzZXIuIFNvIGlmIG9uZSB1c2Vy IG9wZW5zCi0gICAvZGV2L21vZGVtLCBhIGxvY2tmaWxlIGNhbGxlZCBMQ0suLm1vZGVtIGlzIGNy ZWF0ZWQsIHdoaWNoIGRvZXMgbm90Ci0gICBwcmV2ZW50IGFub3RoZXIgdXNlciBmcm9tIHNpbXVs dGFuZW91c2x5IG9wZW5pbmcgdGhlIHNhbWUgZGV2aWNlIGJ5IGl0cwotICAgcmVhbCBuYW1lLgot Ci0gICBPbiBTQ08gVW5peCBwbGF0Zm9ybXMsIHdlIGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQg cHJvYmxlbTogdGhlIHNhbWUKLSAgIGRldmljZSBpcywgYnkgY29udmVudGlvbiwga25vd24gYnkg Imxvd2VyY2FzZSIgYW5kICJ1cHBlcmNhc2UiIG5hbWVzLAotICAgZGVwZW5kaW5nIG9uIHdoZXRo ZXIgaXQgaGFzIG1vZGVtIGNvbnRyb2wuIFNvIGJ5IGNvbnZlbnRpb24sCi0gICBjb21tdW5pY2F0 aW9ucyBwcm9ncmFtcyBhcmUgc3VwcG9zZWQgdG8gY3JlYXRlIHRoZSBsb2NrZmlsZXMgYmFzZWQg b24KLSAgIHRoZSBsb3dlcmNhc2UgbmFtZS4gQnV0IHNvbWUgcHJvZ3JhbXMgZG9uJ3QgZm9sbG93 IHRoaXMgY29udmVudGlvbi4gSW4KLSAgIEhQLVVYLCB3ZSBoYXZlIHNldmVyYWwgZGlmZmVyZW50 IG5hbWVzIGZvciBlYWNoIHNlcmlhbCBkZXZpY2UuIEFuZCBzbwotICAgb24uCi0KLSAgIEZvciB0 aGlzIHJlYXNvbiwgb24gcGxhdGZvcm1zIHdoZXJlIHRoZSBMSy5pbm9kZS5tYWpvci5taW5vciBm b3JtIGlzCi0gICBub3QgdXNlZCwgQy1LZXJtaXQgYWxzbyBjcmVhdGVzIGEgc2Vjb25kYXJ5IGxv Y2tmaWxlICh3aGljaCBpcyBzaW1wbHkgYQotICAgbGluayB0byB0aGUgZmlyc3QpIGlmOgotCi0g ICAgYS4gVGhlIGdpdmVuIGRldmljZSBuYW1lIGlzIGEgc3ltYm9saWMgbGluay4gVGhlIHNlY29u ZGFyeSBsaW5rIGlzCi0gICAgICAgYmFzZWQgb24gdGhlIGRldmljZSdzIHJlYWwgbmFtZS4KLSAg ICBiLiBPbiBTQ086IFRoZSBkZXZpY2UgbmFtZSBpcyBub3QgYSBzeW1ib2xpYyBsaW5rLCBidXQg aXQgY29udGFpbnMKLSAgICAgICB1cHBlcmNhc2UgbGV0dGVycy4gVGhlIHByaW1hcnkgbGluayBp cyBiYXNlZCBvbiB0aGUgbG93ZXJjYXNlIG5hbWU7Ci0gICAgICAgdGhlIHNlY29uZGFyeSBsaW5r IGlzIGJhc2VkIG9uIHRoZSBuYW1lIHRoYXQgd2FzIGdpdmVuLgotICAgIGMuIE9uIEhQLVVYOiBU aGUgZGV2aWNlIG5hbWUgc3RhcnRzIHdpdGggImN1Ii4gVGhlIHByaW1hcnkgbGluayBpcwotICAg ICAgIGJhc2VkIG9uIHRoZSBuYW1lIHRoYXQgd2FzIGdpdmVuOyB0aGUgc2Vjb25kYXJ5IGxpbmsg aXMgYmFzZWQgb24KLSAgICAgICB0aGUgY29ycmVzcG9uZGluZyAidHR5ZCIgZGV2aWNlLCBlLmcu ICJMQ0suLmN1YTBwMCIgYW5kCi0gICAgICAgIkxDSy4udHR5ZDBwMCIuCi0KLSAgIE5PVEU6IHN5 bWxpbmtzIGFyZSBub3QgaGFuZGxlZCBpbiBIUC1VWC4KLQotICAgSG9uZXkgRGFuQmVyIChIREIp IFVVQ1AsIHRoZSBiYXNpcyBvZiBtYW55IFVVQ1AgaW1wbGVtZW50YXRpb25zLCBoYXMKLSAgIHR3 byBjaGFyYWN0ZXJpc3RpY3M6Ci0KLSAgICBhLiBMb2NrZmlsZXMgYXJlIGtlcHQgaW4gL3Vzci9z cG9vbC9sb2Nrcy8gKHVzdWFsbHkpLgotICAgIGIuIEEgbG9ja2ZpbGUgY29udGFpbnMgdGhlIHBy b2Nlc3MgaWQgKHBpZCkgaW4gQVNDSUksIHJhdGhlciB0aGFuIGFzCi0gICAgICAgYW4gaW50Lgot Ci0gICBOb24tSERCIHNlbGVjdGlvbnMgYXNzdW1lIHRoZSBsb2NrZmlsZSBjb250YWlucyB0aGUg cGlkIGluIGludCBmb3JtCi0gICAob3IsIG1vcmUgcHJlY2lzZWx5LCBpbiBQSURfVCBmb3JtLCB3 aGVyZSBQSURfVCBpcyBlaXRoZXIgaW50IG9yIHBpZF90LAotICAgZGVwZW5kaW5nIG9uIHlvdXIg c3lzdGVtJ3MgQyBsaWJyYXJ5IGFuZCBoZWFkZXIgZmlsZXMpLiAoYiksIGJ5IHRoZQotICAgd2F5 LCBpcyBzdWJqZWN0IHRvIGludGVycHJldGF0aW9uOiB0aGUgbnVtZXJpYyBBU0NJSSBzdHJpbmcg bWF5IG9yIG1heQotICAgbm90IGJlIHRlcm1pbmF0ZWQgYnkgYSBuZXdsaW5lLCBpdCBtYXkgb3Ig bWF5IG5vdCBoYXZlIGxlYWRpbmcgc3BhY2VzCi0gICAob3IgemVyb3MpLCBhbmQgdGhlIG51bWJl ciBvZiBsZWFkaW5nIHNwYWNlcyBvciB6ZXJvcyBjYW4gZGlmZmVyLCBhbmQKLSAgIHRoZSBkaWZm ZXJlbmNlcyBjYW4gYmUgc2lnbmlmaWNhbnQuCi0KLSAgIEV2ZW4gaWYgeW91IGJ1aWxkIHRoZSBw cm9ncmFtIHdpdGggdGhlIHJpZ2h0IGxvY2tmaWxlIG9wdGlvbiwgeW91IGNhbgotICAgc3RpbGwg aGF2ZSBwcm9ibGVtcyB3aGVuIHlvdSB0cnkgdG8gb3BlbiB0aGUgZGV2aWNlLiBIZXJlIGFyZSB0 aGUgZXJyb3IKLSAgIG1lc3NhZ2VzIHlvdSBjYW4gZ2V0IGZyb20gU0VUIExJTkUsIGFuZCB3aGF0 IHRoZXkgbWVhbjoKLQotICAgIGEuICJUaW1lZCBvdXQsIG5vIGNhcnJpZXIuIiBUaGlzIG9uZSBp cyBub3QgcmVsYXRlZCB0byBsb2NrZmlsZXMuIEl0Ci0gICAgICAgbWVhbnMgdGhhdCB5b3UgaGF2 ZSBTRVQgQ0FSUklFUiBPTiB4eCwgd2hlcmUgeHggaXMgdGhlIG51bWJlciBvZgotICAgICAgIHNl Y29uZHMgdG8gd2FpdCBmb3IgY2FycmllciwgYW5kIGNhcnJpZXIgZGlkIG5vdCBhcHBlYXIgd2l0 aGluIHh4Ci0gICAgICAgc2Vjb25kcy4gU29sdXRpb246IFNFVCBDQVJSSUVSIEFVVE8gb3IgT0ZG LgotICAgIGIuICJTb3JyeSwgYWNjZXNzIHRvIGxvY2sgZGVuaWVkLiIgS2VybWl0IGhhcyBiZWVu IGNvbmZpZ3VyZWQgdG8gdXNlCi0gICAgICAgbG9ja2ZpbGVzLCBidXQgKGEpdGhlIGxvY2tmaWxl IGRpcmVjdG9yeSBpcyB3cml0ZS1wcm90ZWN0ZWQgYWdhaW5zdAotICAgICAgIHlvdSwgb3IgKGIp IGl0IGRvZXMgbm90IGV4aXN0LiBUaGUgImFjY2VzcyB0byBsb2NrIGRlbmllZCIgbWVzc2FnZQot ICAgICAgIHdpbGwgdGVsbCB5b3UgdGhlIHJlYXNvbi4gSWYgdGhlIGRpcmVjdG9yeSBkb2VzIG5v dCBleGlzdCwgY2hlY2sgdG8KLSAgICAgICBtYWtlIHN1cmUgS2VybWl0IGlzIHVzaW5nIHRoZSBy aWdodCBuYW1lLiBKdXN0IGJlY2F1c2UgdmVyc2lvbiBuIG9mCi0gICAgICAgeW91ciBVbml4IHVz ZWQgYSBjZXJ0YWluIGxvY2tmaWxlIGRpcmVjdG9yeSBpcyBubyBndWFyYW50ZWUgdGhhdAotICAg ICAgIHZlcnNpb24gbi4xIGRvZXMgbm90IHVzZSBhIGRpZmZlcmVudCBvbmUuIFdvcmthcm91bmQ6 IGFzayB0aGUKLSAgICAgICBzeXN0ZW0gYWRtaW5pc3RyYXRvciB0byBpbnN0YWxsIGEgc3ltYm9s aWMgbGluayBmcm9tIHRoZSBvbGQgbmFtZQotICAgICAgIHRvIHRoZSBuZXcgbmFtZS4gT3RoZXIg c29sdXRpb25zOiAoc2VlIGJlbG93KQotICAgIGMuICJTb3JyeSwgYWNjZXNzIHRvIHR0eSBkZXZp Y2UgZGVuaWVkLiIgVGhlIHR0eSBkZXZpY2UgdGhhdCB5b3UKLSAgICAgICBzcGVjaWZpZWQgaW4g eW91ciBTRVQgTElORSBjb21tYW5kIGlzIHJlYWQvd3JpdGUgcHJvdGVjdGVkIGFnYWluc3QKLSAg ICAgICB5b3UuIFNvbHV0aW9uOiAoc2VlIGJlbG93KQotICAgIGQuICJTb3JyeSwgZGV2aWNlIGlz IGluIHVzZS4iIFRoZSB0dHkgZGV2aWNlIHlvdSBoYXZlIHNwZWNpZmllZCBpcwotICAgICAgIGN1 cnJlbnRseSBiZWluZyB1c2VkIGJ5IGFub3RoZXIgdXNlci4gQSBwcmVmYXRvcnkgbWVzc2FnZSBn aXZlcyB5b3UKLSAgICAgICBhbiAibHMgLWwiIGxpc3Rpbmcgb2YgdGhlIGxvY2tmaWxlLCB3aGlj aCBzaG91bGQgc2hvdyB0aGUgdXNlcm5hbWUKLSAgICAgICBvZiB0aGUgcGVyc29uIHdobyBjcmVh dGVkIGl0LCBwbHVzIGEgbWVzc2FnZSAicGlkID0gbm5uIiB0byBzaG93Ci0gICAgICAgeW91IHRo ZSBwcm9jZXNzIGlkIG9mIHRoZSB1c2VyJ3MgcHJvZ3JhbS4gU29sdXRpb25zOiB0cnkgYW5vdGhl cgotICAgICAgIGRldmljZSwgd2FpdCB1bnRpbCB0aGUgb3RoZXIgdXNlciBpcyBmaW5pc2hlZCwg YXNrIHRoZSBvdGhlciB1c2VyCi0gICAgICAgdG8gaHVycnkgdXAsIG9yIGFzayB0aGUgc3lzdGVt IG1hbmFnZXIgZm9yIGhlbHAuCi0gICAgZS4gIlNvcnJ5LCBjYW4ndCBvcGVuIGNvbm5lY3Rpb246 IHJlYXNvbiIuIFRoZSBkZXZpY2UgY2Fubm90IGJlIG9wZW5lZAotICAgICAgIGZvciBzb21lIG90 aGVyIHJlYXNvbiwgd2hpY2ggaXMgbGlzdGVkLgotICAgIGYuICJzaDogL3Vzci9saWIvdXVjcC9h Y3VjbnRybDogbm90IGZvdW5kIi4gVGhpcyBtZWFucyB5b3VyIEtlcm1pdAotICAgICAgIHByb2dy YW0gd2FzIGJ1aWx0IHdpdGggdGhlIC1EQUNVQ05UUkwgc3dpdGNoLCBidXQgeW91ciBjb21wdXRl cgotICAgICAgIHN5c3RlbSBkb2VzIG5vdCBoYXZlIHRoZSBCU0QgNC4zIGFjdWNudHJsIHByb2dy YW0uIFNvbHV0aW9uOgotICAgICAgIGluc3RhbGwgdGhlIGFjdWNudHJsIHByb2dyYW0gaWYgeW91 IGhhdmUgaXQsIG9yIHJlYnVpbGQgS2VybWl0Ci0gICAgICAgd2l0aG91dCB0aGUgLURBQ1VDTlRS TCBzd2l0Y2guCi0KLSAgIFRoZXJlIGFyZSB0d28gc29sdXRpb25zIGZvciBwcm9ibGVtcyAoYikg YW5kIChjKSwgYm90aCBvZiB3aGljaCBpbnZvbHZlCi0gICBpbnRlcnZlbnRpb24gYnkgeW91ciBV bml4IHN5c3RlbSBhZG1pbmlzdHJhdG9yIChzdXBlcnVzZXIpOgotCi0gICAgYS4gSGF2ZSB0aGUg c3VwZXJ1c2VyIGNoYW5nZSB0aGUgcGVybWlzc2lvbiBvZiB0aGUgbG9ja2ZpbGUgZGlyZWN0b3J5 Ci0gICAgICAgYW5kIHRvIHRoZSB0dHkgZGV2aWNlcyBzbyB0aGF0IGV2ZXJ5b25lIG9uIHRoZSBz eXN0ZW0gaGFzCi0gICAgICAgcmVhZC93cml0ZSBwZXJtaXNzaW9uLgotCi1zdSUgY2htb2QgNzc3 IC91c3Ivc3Bvb2wvbG9ja3MgKG9yIHdoYXRldmVyIHRoZSBwYXRoIGlzKQotc3UlIGNobW9kIDY2 NiAvZGV2L3R0eVhYCi0KLSAgICAgICBPbmUgcmlzayBoZXJlIGlzIHRoYXQgcGVvcGxlIGNhbiB3 cml0ZSBsb3RzIG9mIGp1bmsgaW50byB0aGUKLSAgICAgICBsb2NrZmlsZSBkaXJlY3RvcnksIGRl bGV0ZSBvdGhlciBwZW9wbGUncyBmaWxlcyBpbiB0aGUgbG9ja2ZpbGUKLSAgICAgICBkaXJlY3Rv cnksIGFuZCBpbnRlcmNlcHQgb3RoZXIgcGVvcGxlJ3MgZGF0YSBhcyBpdCBnb2VzIGluIGFuZCBv dXQKLSAgICAgICBvZiB0aGUgdHR5IGRldmljZS4gVGhlIG1ham9yIGRhbmdlciBoZXJlIHdvdWxk IGJlIGludGVyY2VwdGluZyBhCi0gICAgICAgcHJpdmlsZWdlZCBwYXNzd29yZC4gT2YgY291cnNl LCBhbnkgdXNlciBjb3VsZCB3cml0ZSBhIHNob3J0LAotICAgICAgIG9yZGluYXJ5LCB1bnByaXZp bGVnZWQgcHJvZ3JhbSB0byBkbyBleGFjdGx5IHRoZSBzYW1lIHRoaW5nIGlmIHRoZQotICAgICAg IHR0eSBkZXZpY2Ugd2FzIHdvcmxkIHJlYWQvd3JpdGVhYmxlLiBUaGUgb3RoZXIgcmlzayBhcyB0 aGF0Ci0gICAgICAgdGVsZXBob25lIGNhbGxzIGFyZSBub3QgY29udHJvbGxlZCAtLSBhbnlib2R5 IG9uIHlvdXIgc3lzdGVtIGNhbgotICAgICAgIG1ha2UgdGhlbSwgd2l0aG91dCBoYXZpbmcgdG8g YmVsb25nIHRvIGFueSBwYXJ0aWN1bGFyIGdyb3VwLCBhbmQKLSAgICAgICB0aGlzIGNvdWxkIHJ1 biB1cCB5b3VyIHBob25lIGJpbGwuCi0gICAgYi4gVXNlIGdyb3VwcyB0byByZWd1bGF0ZSBhY2Nl c3MuIE5vcm1hbGx5IHRoZSBsb2NrZmlsZSBkaXJlY3RvcnkgYW5kCi0gICAgICAgYW5kIHRoZSBk aWFsb3V0IGRldmljZXMgd2lsbCBoYXZlIHRoZSBzYW1lIGdyb3VwIChzdWNoIGFzIHV1Y3ApLiBJ ZgotICAgICAgIHNvLCB0aGVuIHB1dCBldmVyeWJvZHkgd2hvJ3MgYWxsb3dlZCB0byBkaWFsIG91 dCBpbnRvIHRoYXQgZ3JvdXAsCi0gICAgICAgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoZSBsb2NrZmls ZSBkaXJlY3RvcnkgYW5kIHRoZSB0dHkgZGV2aWNlcyBoYXZlCi0gICAgICAgZ3JvdXAgcmVhZCBB TkQgd3JpdGUgcGVybWlzc2lvbi4gRXhhbXBsZToKLQotc3UlIGNobW9kIDc3MCAvdXNyL3Nwb29s L2xvY2tzIChvciB3aGF0ZXZlciB0aGUgcGF0aCBpcykKLXN1JSBjaG1vZCA2NjAgL2Rldi90dHlY WAotCi0gICAgICAgVXNlciB3aGF0ZXZlciB0b29sIGlzIGF2YWlsYWJsZSBvbiB5b3VyIHBsYXRm b3JtIHRvIGFkZCB1c2VycyB0bwotICAgICAgIHRoZSBhcHByb3ByaWF0ZSBncm91cCAoZS5nLiBl ZGl0IHRoZSAvZXRjL2dyb3VwIGZpbGUpLgotICAgIGMuIEhhdmUgdGhlIHN1cGVydXNlciBjaGFu Z2UgS2VybWl0IHRvIHJ1biBzZXR1aWQgYW5kL29yIHNldGdpZCB0byB0aGUKLSAgICAgICBvd25l ciBhbmQvb3IgZ3JvdXAgb2YgdGhlIGxvY2tmaWxlIGRpcmVjdG9yeSBhbmQgdGhlIHR0eSBkZXZp Y2VzIGlmCi0gICAgICAgbmVjZXNzYXJ5KSwgdHlwaWNhbGx5IHV1Y3AgKHNlZSBbMzM0XW5leHQg c2VjdGlvbiksIGJ1dCBOT1Qgcm9vdC4KLSAgICAgICBFeGFtcGxlOgotCi1zdSUgY2hvd24gdXVj cCBrZXJtaXQgICAgICAgICAgLSBvciAtICBjaGdycCB1dWNwIGtlcm1pdAotc3UlIGNobW9kIHUr cyBrZXJtaXQgKHNldHVpZCkgIC0gb3IgLSAgY2htb2QgZytzIGtlcm1pdCAoc2V0Z2lkKQotCi0g ICAgICAgYW5kIHRoZW4gbWFrZSBzdXJlIHRoZSBsb2NrZmlsZSBkaXJlY3RvcnksIGFuZCB0aGUg dHR5IGRldmljZXMsCi0gICAgICAgaGF2ZSBvd25lciAoc2V0dWlkKSBhbmQvb3IgZ3JvdXAgKHNl dGdpZCkgd3JpdGUgcGVybWlzc2lvbi4gRm9yCi0gICAgICAgZXhhbXBsZToKLQotc3UlIGNobW9k IG8rcnd4IC91c3Ivc3Bvb2wvdXVjcAotc3UlIGNob3duIHV1Y3AgL2Rldi90dHlYWCA7IGNobW9k IDYwMCAvZGV2L3R0eVhYCi0KLSAgICAgICBJbiBzb21lIGNhc2VzLCB0aGUgb3duZXIgYW5kIGdy b3VwIG11c3QgYmUgZGlzdGluY3Q7IHRoZSBrZXkgcG9pbnQKLSAgICAgICBpcyB0aGF0IHJlYWQv d3JpdGUgYWNjZXNzIGlzIHJlcXVpcmVkIHRvIGJvdGggdGhlIFVVQ1AgbG9ja2ZpbGUKLSAgICAg ICBkaXJlY3RvcnkgYW5kIHRoZSB0dHkgaXRzZWxmLgotCi0gICBJZiB5b3UgbWFrZSBDLUtlcm1p dCBzZXR1aWQgb3Igc2V0Z2lkIHRvIHJvb3QsIGl0IHJlZnVzZXMgdG8gcnVuOgotCi1GYXRhbDog Qy1LZXJtaXQgc2V0dWlkIHRvIHJvb3QhCi0KLSAgIEV4YW1wbGU6Ci0KLWNydy1yLS0tLS0gICAx IHV1Y3AgICAgIHV1Y3AgICAgICAgNSwgIDY3IEZlYiAxMSAwNjoyMyAvZGV2L2N1YTMKLWRyd3hy d3hyLXggICAzIHJvb3QgICAgIHV1Y3AgICAgICAgICAxMDI0IEZlYiAxMSAwNjoyMiAvdmFyL2xv Y2sKLQotICAgcmVxdWlyZXMgc3VpZCB1dWNwIHRvIGdldCByZWFkL3dyaXRlIGFjY2VzcyBvbiAv ZGV2L2N1YTMgYW5kIHNnaWQgdG8KLSAgIGdldCByZWFkL3dyaXRlIGFjY2VzcyBvbiAvdmFyL2xv Y2sgKHNpbmNlIHlvdSBjYW4ndCBzZXQgS2VybWl0J3MgdWlkIG9yCi0gICBnaWQgdG8gcm9vdCku Ci0KLSAgICAgVGhlIHJlYXNvbiBLZXJtaXQgY2FuJ3QgYmUgc2V0dWlkIG9yIHNldGdpZCB0byBy b290IGhhcyB0byBkbyB3aXRoCi0gICAgIHRoZSBmYWN0IHRoYXQgc29tZSBVbml4IE9TJ3MgY2Fu J3Qgc3dpdGNoIHVzZXIgb3IgZ3JvdXAgSURzIGluIHRoYXQKLSAgICAgY2FzZS4gVW5mb3J0dW5h dGVseSwgdGhlIHByb2hpYml0aW9uIGFnYWluc3QgbWFraW5nIEtlcm1pdCBzZXR1aWQgb3IKLSAg ICAgc2V0Z2lkIHRvIHJvb3QgbWVhbnMgdGhhdCBVbml4IEMtS2VybWl0IGNhbid0IGJlIHVzZWQg dG8gbWFrZSBybG9naW4KLSAgICAgY29ubmVjdGlvbnMgYnkgbm9uLXJvb3QgdXNlcnMuIChUaGUg cmxvZ2luIHBvcnQgaXMgcHJpdmlsZWdlZCwgd2hpY2gKLSAgICAgaXMgd2h5IHRoZSByZWd1bGFy IHJsb2dpbiBjb21tYW5kIGlzIHNldHVpZCByb290IC0tIHdoaWNoIGlzIHNhZmUKLSAgICAgYmVj YXVzZSB0aGUgcmxvZ2luIHByb2dyYW0gbmV2ZXIgaGFzIHRvIGNyZWF0ZSBvciBhY2Nlc3MgZmls ZXMgbGlrZQotICAgICBLZXJtaXQgZG9lcy4pCi0KLSAgIEZvciB0aGUgbG9ja2ZpbGUgbWVjaGFu aXNtIHRvIGFjaGlldmUgaXRzIGRlc2lyZWQgcHVycG9zZSAtLSBwcmV2ZW50aW9uCi0gICBvZiBh Y2Nlc3MgdG8gdGhlIHNhbWUgdHR5IGRldmljZSBieSBtb3JlIHRoYW4gb25lIHByb2Nlc3MgYXQg YSB0aW1lIC0tCi0gICBBTEwgcHJvZ3JhbXMgb24gYSBnaXZlbiBjb21wdXRlciB0aGF0IG9wZW4s IHJlYWQgb3Igd3JpdGUsIGFuZCBjbG9zZQotICAgdHR5IGRldmljZXMgbXVzdCB1c2UgdGhlIFNB TUUgbG9ja2ZpbGUgY29udmVudGlvbnMuIFVuZm9ydHVuYXRlbHksIHRoaXMKLSAgIGlzIG9mdGVu IG5vdCB0aGUgY2FzZS4gSGVyZSBpcyBhIHR5cGljYWwgZXhhbXBsZSBvZiBob3cgdGhpcyBjYW4g Z28KLSAgIHdyb25nOiBJbiBTdW5PUyA0LjAgYW5kIGVhcmxlciwgdGhlIGxvY2tmaWxlIGRpcmVj dG9yeSB3YXMKLSAgIC91c3Ivc3Bvb2wvdXVjcDsgaW4gNC4xIGl0IHdhcyBjaGFuZ2VkIHRvIC92 YXIvc3Bvb2wvbG9ja3MgaW4gdGhlIHF1ZXN0Ci0gICBmb3IgcG9saXRpY2FsIGNvcnJlY3RuZXNz LiBDb25zZXF1ZW50bHksIGFueSB0aGlyZC1wYXJ0eSBwcm9ncmFtcyAoc3VjaAotICAgYXMgQy1L ZXJtaXQpIHRoYXQgd2VyZSBub3QgbW9kaWZpZWQgdG8gYWNjb3VudCBmb3IgdGhpcyBjaGFuZ2Us Ci0gICByZWNvbXBpbGVkLCBhbmQgcmVpbnN0YWxsZWQsIGRpZCBub3QgdXNlIHRoZSBzYW1lIGxv Y2tmaWxlcyBhcyB1dWNwLAotICAgdGlwLCBldGMsIGFuZCBzbyB0aGUgZW50aXJlIHB1cnBvc2Ug b2YgdGhlIGxvY2tmaWxlIGlzIGRlZmVhdGVkLgotCi0gICBXaGF0IGlmIHlvdXIgVW5peCBzeXN0 ZW0gZG9lcyBub3QgaGF2ZSBVVUNQIGluc3RhbGxlZD8gRm9yIGV4YW1wbGUsIHlvdQotICAgaGF2 ZSBhIFVuaXggd29ya3N0YXRpb24sIGFuZCB5b3UgZG8gbm90IHVzZSB1dWNwLCBjdSwgb3IgdGlw LCBvciBVVUNQCi0gICB3YXMgbm90IGV2ZW4gc3VwcGxpZWQgd2l0aCB5b3VyIHZlcnNpb24gb2Yg VW5peCAoUU5YIGlzIGFuIGV4YW1wbGUpLiBJbgotICAgdGhpcyBjYXNlLCB5b3UgaGF2ZSB0d28g Y2hvaWNlczoKLQotICAgIGEuIElmIHRoZXJlIG1heSBiZSBtb3JlIHRoYW4gb25lIHBlcnNvbiBy dW5uaW5nIEtlcm1pdCBhdCB0aGUgc2FtZQotICAgICAgIHRpbWUsIGNvbXBldGluZyBmb3IgdGhl IHNhbWUgdHR5IGRldmljZSwgdGhlbiBjcmVhdGUgYSBzcGVjaWFsCi0gICAgICAgbG9ja2ZpbGUg ZGlyZWN0b3J5IGp1c3QgZm9yIEtlcm1pdCwgZm9yIGV4YW1wbGUsIC91c3Ivc3Bvb2wva2VybWl0 LAotICAgICAgIGFuZCBtYWtlIHN1cmUgeW91IGhhdmUgcmVhZC93cml0ZSBhY2Nlc3MgdG8gaXQu IFRoZW4gYWRkIHRoZQotICAgICAgIGZvbGxvd2luZyB0byB5b3VyIG1ha2VmaWxlIHRhcmdldCBD RkxBR1MsIGFzIHNob3duIGVhcmxpZXI6Ci0KLS1ETE9DS19ESVI9XFxcIi91c3Ivc3Bvb2wva2Vy bWl0XFxcIgotCi0gICAgYi4gSWYgeW91IGFyZSB0aGUgb25seSB1c2VyIG9uIHlvdXIgd29ya3N0 YXRpb24sIGFuZCBubyBvdGhlcgotICAgICAgIHByb2Nlc3NlcyB3aWxsIGV2ZXIgYmUgY29tcGV0 aW5nIHdpdGggS2VybWl0IGZvciB0aGUgZGlhbG91dCB0dHkKLSAgICAgICBkZXZpY2UsIHRoZW4g YWRkIC1ETk9VVUNQIHRvIHlvdXIgbWFrZWZpbGUgdGFyZ2V0J3MgQ0ZMQUdTIGFuZAotICAgICAg IHJlYnVpbGQgS2VybWl0LgotCi0xMS4gUlVOTklORyBVTklYIEMtS0VSTUlUIFNFVFVJRCBPUiBT RVRHSUQKLQotICAgWyBbMzM1XVRvcCBdIFsgWzMzNl1Db250ZW50cyBdIFsgWzMzN11OZXh0IF0g WyBbMzM4XVByZXZpb3VzIF0KLQotICAgRXZlbiBpZiB5b3UgZG9uJ3QgaW50ZW5kIHRvIHJ1biBD LUtlcm1pdCBzZXR1aWQsIHNvbWVib2R5IGVsc2UgbWlnaHQKLSAgIGNvbWUgYWxvbmcgYW5kIGNo b3duIGFuZCBjaG1vZCBpdCBhZnRlciBpdCBoYXMgYmVlbiBidWlsdC4gWW91IHNob3VsZAotICAg YmUgc3VyZSB0aGF0IGl0IGlzIGJ1aWx0IGNvcnJlY3RseSB0byBydW4gc2V0dWlkIG9uIHlvdXIg c3lzdGVtLiBGb3IKLSAgIFBPU0lYIGFuZCBBVCZUIFVuaXggYmFzZWQgdmVyc2lvbnMsIHlvdSBk b24ndCBoYXZlIHRvIGRvIGFueXRoaW5nCi0gICBzcGVjaWFsLgotCi0gICBGb3IgNC4yIGFuZCA0 LjMgQlNELWJhc2VkIFVuaXggdmVyc2lvbnMsIHlvdSBub3JtYWxseSBuZWVkIG5vdCBhZGQKLSAg IGFueXRoaW5nIHNwZWNpYWwgdG8gdGhlIG1ha2VmaWxlLiBUaGUgcHJvZ3JhbSBhc3N1bWVzIHRo YXQgdGhlCi0gICBzZXRyZXVpZCgpIGFuZCBzZXRyZWdpZCgpIGZ1bmN0aW9ucyBhcmUgYXZhaWxh YmxlLCB3aXRob3V0IHdoaWNoIHdlCi0gICBjYW5ub3Qgc3dpdGNoIGJhY2sgYW5kIGZvcnRoIGJl dHdlZW4gcmVhbCBhbmQgZWZmZWN0aXZlIHVpZHMuIElmICJtYWtlIgotICAgY29tcGxhaW5zIHRo YXQgX3NldHJldWlkIG9yIF9zZXRyZWdpZCBpcy9hcmUgbm90IGRlZmluZWQsIGFkZAotICAgLURO T1NFVFJFVSB0byBDRkxBR1MuIEluIHRoaXMgY2FzZSBpdCBpcyB2ZXJ5IGxpa2VseSAoYnV0IG5v dCBjZXJ0YWluKQotICAgdGhhdCB5b3UgY2Fubm90IHByb3RlY3QgdHR5cyBhbmQgbG9ja2ZpbGVz IGFnYWluc3QgcGVvcGxlIGFuZCBoYXZlIHRoZW0KLSAgIHJ1biBLZXJtaXQgc2V0dWlkLgotCi0g ICBJZiBtYWtlIGRvZXMgbm90IGNvbXBsYWluIGFib3V0IHRoaXMsIHlvdSBzaG91bGQgZmluZCBv dXQgd2hldGhlciB5b3VyCi0gICBCU0QgdmVyc2lvbiAoNC4zIG9yIG90aGVyIHN5c3RlbXMgbGlr ZSBTdW5PUyA0LnggdGhhdCBjbGFpbSB0byBpbmNsdWRlCi0gICBCU0QgNC4zIGNvbXBhdGliaWxp dHkpIGluY2x1ZGVzIHRoZSBzYXZlZC1zZXR1aWQgZmVhdHVyZSAoc2VlIGxvbmcKLSAgIG5vdGVz IHVuZGVyIGVkaXQgMTQ2IGluIGNrYzE3OC51cGQpLiBJZiBpdCBkb2VzLCB0aGVuIGFkZCAtRFNB VkVEVUlEIHRvCi0gICBDRkxBR1MuCi0KLSAgICAgSU1QT1JUQU5UIE5PVEU6IE1vc3QgVW5peCBz eXN0ZW0gZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBnaXZlIHlvdSB0aGUKLSAgICAgcmVxdWlyZWQg aW5mb3JtYXRpb24uIFRvIGRldGVybWluZSB3aGV0aGVyIHlvdXIgVW5peCBzeXN0ZW0gc3VwcGxp ZXMKLSAgICAgdGhlIHNhdmVkLW9yaWdpbmFsLWVmZmVjdGl2ZS11c2VyL2dyb3VwLWlkIGZlYXR1 cmUsIHVzZSB0aGUgY2t1dWlkLmMKLSAgICAgcHJvZ3JhbS4gUmVhZCBhbmQgZm9sbG93IHRoZSBp bnN0cnVjdGlvbnMgaW4gdGhlIGNvbW1lbnRzIGF0IHRoZQotICAgICBiZWdpbm5pbmcuCi0KLSAg IEMtS2VybWl0IGZvciA0LjRCU0QtYmFzZWQgc3lzdGVtcyBhdXRvbWF0aWNhbGx5IHVzZSBzZXRl W3VnXWlkKCkuIFNlZQotICAgWzMzOV1ja3V0aW8uYy4KLQotICAgSWYgeW91IGhhdmUgYSB2ZXJz aW9uIG9mIFVuaXggdGhhdCBpcyBub3QgQlNELWJhc2VkLCBidXQgd2hpY2ggc3VwcGxpZXMKLSAg IHRoZSBzZXRyZXVpZCgpIGFuZCBzZXRyZWdpZCgpIGZ1bmN0aW9ucywgYW5kIHRoZXNlIGFyZSB0 aGUgb25seSB3YXkgdG8KLSAgIHN3aXRjaCBiZXR3ZWVuIHJlYWwgYW5kIGVmZmVjdGl2ZSB1aWQs IGFkZCAtRFNFVFJFVUlEIHRvIHlvdXIgbWFrZWZpbGUKLSAgIHRhcmdldC4KLQotICAgICBXQVJO SU5HOiBUaGVyZSBhcmUgdHdvIGNhbGxzIHRvIGFjY2VzcygpIGluIFszNDBdY2t1ZmlvLmMsIGJ5 IHdoaWNoCi0gICAgIEtlcm1pdCBjaGVja3MgdG8gc2VlIGlmIGl0IGNhbiBjcmVhdGUgYW4gb3V0 cHV0IGZpbGUuIFRoZXNlIGNhbGxzCi0gICAgIHdpbGwgbm90IHdvcmsgY29ycmVjdGx5IHdoZW4g KGEpeW91IGhhdmUgaW5zdGFsbGVkIEMtS2VybWl0IHNldHVpZAotICAgICBvciBzZXRnaWQgb24g YSBCU0QtYmFzZWQgVW5peCBzeXN0ZW0sIGFuZCAoYikgdGhlCi0gICAgIHNhdmVkLW9yaWdpbmFs LWVmZmVjdGl2ZS11aWQvZ2lkIGZlYXR1cmUgaXMgbm90IHByZXNlbnQsIGFuZCAoYykgdGhlCi0g ICAgIGFjY2VzcygpIGZ1bmN0aW9uIGFsd2F5cyBjaGVja3Mgd2hhdCBpdCBiZWxpZXZlcyB0byBi ZSB0aGUgcmVhbCBJRAotICAgICByYXRoZXIgdGhhbiB0aGUgZWZmZWN0aXZlIElELiBUaGlzIGlz IHRoZSBjYXNlLCBmb3IgZXhhbXBsZSwgaW4KLSAgICAgT2xpdmV0dGkgWC9PUyBhbmQgaW4gTmVY VFNURVAuIEluIHN1Y2ggY2FzZXMsIHlvdSBjYW4gZm9yY2UgY29ycmVjdAotICAgICBvcGVyYXRp b24gb2YgYWNjZXNzKCkgY2FsbHMgYnkgZGVmaW5pbmcgdGhlIHN5bWJvbCBTV19BQ0NfSUQgYXQK LSAgICAgY29tcGlsZSB0aW1lIGluIENGTEFHUy4KLQotICAgSWYgeW91IGhhdmUgYSB2ZXJzaW9u IG9mIFVuaXggdGhhdCBkb2VzIG5vdCBhbGxvdyBhIHByb2Nlc3MgdG8gc3dpdGNoCi0gICBiYWNr IGFuZCBmb3J0aCBiZXR3ZWVuIGl0cyBlZmZlY3RpdmUgYW5kIHJlYWwgdXNlciBhbmQgZ3JvdXAg aWRzCi0gICBtdWx0aXBsZSB0aW1lcywgeW91IHByb2JhYmx5IHNob3VsZCBub3QgYXR0ZW1wdCB0 byBydW4gS2VybWl0IHNldHVpZCwKLSAgIGJlY2F1c2Ugb25jZSBoYXZpbmcgZ2l2ZW4gdXAgaXRz IGVmZmVjdGl2ZSB1aWQgb3IgZ2lkICh3aGljaCBpdCBtdXN0IGRvCi0gICBpbiBvcmRlciB0byB0 cmFuc2ZlciBmaWxlcywgZm9yayBhIHNoZWxsLCBldGMpIGl0IGNhbiBuZXZlciBnZXQgaXQKLSAg IGJhY2ssIGFuZCBzbyBpdCBjYW4gbm90IHVzZSB0aGUgb3JpZ2luYWwgZWZmZWN0aXZlIHVpZCBv ciBnaWQgdG8gY3JlYXRlCi0gICBvciBkZWxldGUgdXVjcCBsb2NrZmlsZXMuIEluIHRoaXMgY2Fz ZSwgeW91J2xsIGVpdGhlciBoYXZlIHRvIHNldCB0aGUKLSAgIHBlcm1pc3Npb25zIG9uIHlvdXIg bG9ja2ZpbGUgZGlyZWN0b3J5IHRvIG1ha2UgdGhlbSBwdWJsaWNseQotICAgcmVhZC93cml0YWJs ZSwgb3IgZGlzcGVuc2Ugd2l0aCBsb2NraW5nIGFsdG9nZXRoZXIuCi0KLSAgIE1PUkFMOiBBcmUg eW91IHRob3JvdWdobHkgc2lja2VuZWQgYW5kL29yIGZyaWdodGVuZWQgYnkgYWxsIHRoYXQgeW91 Ci0gICBoYXZlIGp1c3QgcmVhZD8gWW91IHNob3VsZCBiZS4gV2hhdCBpcyB0aGUgcmVhbCBhbnN3 ZXI/IFNpbXBsZS4gU2VyaWFsCi0gICBkZXZpY2VzIC0tIHN1Y2ggYXMgdHR5cyBhbmQgbWFnbmV0 aWMgdGFwZXMgLS0gaW4gVW5peCBzaG91bGQgYmUgb3BlbmVkCi0gICB3aXRoIGV4Y2x1c2l2ZSBh Y2Nlc3Mgb25seSwgZW5mb3JjZWQgYnkgdGhlIFVuaXgga2VybmVsLiBTaGFyZWQgYWNjZXNzCi0g ICBoYXMgbm8gY29uY2VpdmFibGUgcHVycG9zZSwgbGVnaXRpbWF0ZSBvciBvdGhlcndpc2UsIGV4 Y2VwdCBieQotICAgcHJpdmlsZWdlZCBzeXN0ZW0gcHJvZ3JhbXMgc3VjaCBhcyBnZXR0eS4gVGhl IG9yaWdpbmFsIGRlc2lnbiBkYXRlcwotICAgZnJvbSB0aGUgbGF0ZSAxOTYwcywgd2hlbiBVbml4 IHdhcyBkZXZlbG9wZWQgZm9yIGxhYm9yYXRvcnkgdXNlIHVuZGVyIGEKLSAgIHBoaWxvc29waHkg b2YgdHJ1c3QgYnkgcGVvcGxlIHdpdGhpbiBzaG91dGluZyBkaXN0YW5jZSBvZiBlYWNoIG90aGVy IC0tCi0gICBidXQgZXZlbiB0aGVuLCBubyB1c2VmdWwgcHVycG9zZSB3YXMgc2VydmVkIGJ5IHRo aXMgcGFydGljdWxhciBmb3JtIG9mCi0gICBvcGVubmVzczsgaXQgd2FzIHByb2JhYmx5IG1vcmUg b2YgYSBwb2xpdGljYWwgc3RhdGVtZW50LiBTaW5jZSB0aGUKLSAgIGVtZXJnZW5jZSBvZiBVbml4 IGZyb20gdGhlIGxhYm9yYXRvcnkgaW50byB0aGUgY29tbWVyY2lhbCBtYXJrZXQsIHdlCi0gICBo YXZlIHNlZW4gZXZlcnkgdmVzdGlnZSBvZiBvcGVubmVzcyAtLSBidXQgdGhpcyBvbmUgLS0gc3Ry aXBwZWQgYXdheS4KLSAgIEknZCBsaWtlIHRvIHNlZSBzb21lIGluZmx1ZW50aWFsIFVuaXggbWFr ZXIgdGFrZSB0aGUgYm9sZCBzdGVwIG9mCi0gICBtYWtpbmcgdGhlIHNpbXBsZSBrZXJuZWwgY2hh bmdlIHJlcXVpcmVkIHRvIGVuZm9yY2UgZXhjbHVzaXZlIGFjY2VzcyB0bwotICAgc2VyaWFsIGRl dmljZXMuIChXZWxsLCBwZXJoYXBzIG5vdCBzbyBzaW1wbGUgd2hlbiBiaWRpcmVjdGlvbmFsaXR5 IG11c3QKLSAgIGFsc28gYmUgYSBnb2FsIC0tIGJ1dCB0aGVuIG90aGVyIE9TJ3MgbGlrZSBWTVMg c29sdmVkIHRoaXMgcHJvYmxlbQotICAgZGVjYWRlcyBhZ28uKQotCi0xMi4gQ09ORklHVVJJTkcg VU5JWCBXT1JLU1RBVElPTlMKLQotICAgWyBbMzQxXVRvcCBdIFsgWzM0Ml1Db250ZW50cyBdIFsg WzM0M11OZXh0IF0gWyBbMzQ0XVByZXZpb3VzIF0KLQotICAgT24gZGVza3RvcCB3b3Jrc3RhdGlv bnMgdGhhdCBhcmUgdXNlZCBieSBvbmx5IHRoZSB1c2VyIGF0IHRoZSBjb25zb2xlCi0gICBrZXli b2FyZCwgQy1LZXJtaXQgaXMgYWx3YXlzIHVzZWQgaW4gbG9jYWwgbW9kZS4gQnV0IGFzIGRlbGl2 ZXJlZCwKLSAgIEMtS2VybWl0IHJ1bnMgaW4gcmVtb3RlIG1vZGUgYnkgZGVmYXVsdC4gVG8gcHV0 IGl0IGluIGxvY2FsIG1vZGUgYXQKLSAgIHN0YXJ0dXAsIHlvdSBjYW4gcHV0IGEgU0VUIExJTkUg Y29tbWFuZCBpbiB5b3VyIC5teWtlcm1yYy4KLQotICAgWW91IGNhbiBhbHNvIGJ1aWxkIEMtS2Vy bWl0IHRvIHN0YXJ0IHVwIGluIGxvY2FsIG1vZGUgYnkgZGVmYXVsdC4gVG8gZG8KLSAgIHRoaXMs IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBpbiB0aGUgQ0ZMQUdTIGluIHlvdXIgbWFrZWZpbGUgdGFy Z2V0OgotCi0tRERGVFRZPVxcXCIvZGV2L3R0eXh4XFxcIgotCi0gICB3aGVyZSB0dHl4eCBpcyB0 aGUgbmFtZSBvZiB0aGUgZGV2aWNlIHlvdSB3aWxsIGJlIHVzaW5nIGZvcgotICAgY29tbXVuaWNh dGlvbnMuIFByZXNlbnRseSB0aGVyZSBpcyBubyB3YXkgb2Ygc2V0dGluZyB0aGUgZGVmYXVsdCBt b2RlbQotICAgdHlwZSBhdCBjb21waWxlIHRpbWUsIHNvIHVzZSB0aGlzIG9wdGlvbiBvbmx5IGZv ciBkaXJlY3QgbGluZXMuCi0KLSAgIEMtS2VybWl0IGRvZXMgbm90IHdvcmsgd2VsbCBvbiBjZXJ0 YWluIHdvcmtzdGF0aW9ucyBpZiBpdCBpcyBub3QgcnVuCi0gICBmcm9tIHdpdGhpbiBhIHRlcm1p bmFsIHdpbmRvdy4gRm9yIGV4YW1wbGUsIHlvdSBjYW5ub3Qgc3RhcnQgQy1LZXJtaXQKLSAgIG9u IGEgTmVYVCBieSBsYXVuY2hpbmcgaXQgZGlyZWN0bHkgZnJvbSBOZVhUc3RlcC4gU2ltaWxhcmx5 IGZvciBTdW4KLSAgIHdvcmtzdGF0aW9ucyBpbiB0aGUgT3BlbiBXaW5kb3dzIGVudmlyb25tZW50 LiBSdW4gS2VybWl0IGluIGEgdGVybWluYWwKLSAgIHdpbmRvdy4KLQotMTMuIEJJWkFSUkUgQkVI QVZJT1IgQVQgUlVOVElNRQotCi0gICBbIFszNDVdVG9wIF0gWyBbMzQ2XUNvbnRlbnRzIF0gWyBb MzQ3XU5leHQgXSBbIFszNDhdUHJldmlvdXMgXQotCi0gICBTZWUgdGhlICJiZXdhcmUgZmlsZSIs Ci0KLSAgIFszNDldY2t1YndyLnR4dCwgZm9yIGhpbnRzIGFib3V0IHJ1bnRpbWUgbWlzYmVoYXZp b3IuIFRoaXMgc2VjdGlvbgotICAgbGlzdHMgc29tZSBydW50aW1lIHByb2JsZW1zIHRoYXQgY2Fu IGJlIGN1cmVkIGJ5IHJlYnVpbGRpbmcgQy1LZXJtaXQuCi0KLSAgIFRoZSBwcm9ncmFtIHN0YXJ0 cywgYnV0IHRoZXJlIGlzIG5vIHByb21wdCwgYW5kIGNlcnRhaW4gb3BlcmF0aW9ucwotICAgZG9u J3Qgd29yayAoeW91IHNlZSBlcnJvciBtZXNzYWdlcyBsaWtlICJLZXJtaXQgY29tbWFuZCBlcnJv ciBpbgotICAgYmFja2dyb3VuZCBleGVjdXRpb24iKS4gVGhpcyBpcyBiZWNhdXNlIEtlcm1pdCB0 aGlua3MgaXQgaXMgcnVubmluZyBpbgotICAgdGhlIGJhY2tncm91bmQuIFNlZSBjb25iZ3QoKSBp biBbMzUwXWNrdXRpby5jLiBUcnkgcmVidWlsZGluZyBLZXJtaXQKLSAgIHdpdGg6Ci0KLSAtRFBJ RF9UPXBpZF90Ci0KLSAgIGFkZGVkIHRvIHlvdXIgQ0ZMQUdTLiBJZiB0aGF0IGRvZXNuJ3QgaGVs cCwgZmluZCBvdXQgdGhlIGFjdHVhbCBkYXRhCi0gICB0eXBlIGZvciBwaWRzIChsb29rIGluIHR5 cGVzLmggb3Igc2ltaWxhciBmaWxlKSBhbmQgdXNlIGl0IGluIHBsYWNlIG9mCi0gICAicGlkX3Qi LCBmb3IgZXhhbXBsZToKLQotIC1EUElEX1Q9c2hvcnQKLQotICAgVW5leHBsYWluYWJsZSBhbmQg aW5hcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlcyAoIlNvY2tldHMgbm90IHN1cHBvcnRlZAotICAg b24gdGhpcyBkZXZpY2UiLCBldGMpIGhhdmUgYmVlbiB0cmFjZWQgaW4gYXQgbGVhc3Qgb25lIGNh c2UgdG8gYSBsYWNrCi0gICBvZiBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgc3lzdGVtIGhlYWRlciBm aWxlcyBhbmQgdGhlIGFjdHVhbCBrZXJuZWwuCi0gICBUaGlzIGhhcHBlbmVkIGJlY2F1c2UgdGhl IEdOVSBDIGNvbXBpbGVyIChnY2MpIHdhcyBiZWluZyB1c2VkLiBnY2MKLSAgIHdhbnRzIHRvIGhh dmUgQU5TSS1DLWNvbXBsaWFudCBoZWFkZXIgZmlsZXMsIGFuZCBzbyBwYXJ0IG9mIHRoZQotICAg aW5zdGFsbGF0aW9uIHByb2NlZHVyZSBmb3IgZ2NjIGlzIChvciB3YXMpIHRvIHJ1biBhIHNoZWxs IHNjcmlwdCBjYWxsZWQKLSAgICJmaXhpbmNsdWRlcyIsIHdoaWNoIHRyYW5zbGF0ZXMgdGhlIHN5 c3RlbSdzIGhlYWRlciBmaWxlcyBpbnRvIGEKLSAgIHNlcGFyYXRlIHNldCBvZiBoZWFkZXJzIHRo YXQgZ2NjIGxpa2VzLiBTbyBmYXIgc28gZ29vZC4gTGF0ZXIsIGEgbmV3Ci0gICB2ZXJzaW9uIG9m IHRoZSBvcGVyYXRpbmcgc3lzdGVtIGlzIGluc3RhbGxlZCBhbmQgbm9ib2R5IHJlbWVtYmVycyB0 bwotICAgcnVuIGZpeGluY2x1ZGVzIGFnYWluLiBGcm9tIHRoYXQgcG9pbnQsIGFueSBwcm9ncmFt IGNvbXBpbGVkIHdpdGggZ2NjCi0gICB0aGF0IG1ha2VzIHVzZSBvZiBoZWFkZXIgZmlsZXMgKHBh cnRpY3VsYXJseSBpb2N0bC5oKSBpcyB2ZXJ5IGxpa2VseSB0bwotICAgbWlzYmVoYXZlLiBTb2x1 dGlvbjogcnVuIGZpeGluY2x1ZGVzIGFnYWluLCBvciB1c2UgeW91ciBzeXN0ZW0ncwotICAgcmVn dWxhciBDIGNvbXBpbGVyLCBsaWJyYXJpZXMsIGFuZCBoZWFkZXIgZmlsZXMgaW5zdGVhZCBvZiBn Y2MuCi0KLTE0LiBDUkFTSEVTIEFORCBDT1JFIERVTVBTCi0KLSAgIFsgWzM1MV1Ub3AgXSBbIFsz NTJdQ29udGVudHMgXSBbIFszNTNdTmV4dCBdIFsgWzM1NF1QcmV2aW91cyBdCi0KLSAgIElmIEMt S2VybWl0IGNvbnNpc3RlbnRseSBkdW1wcyBjb3JlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBmaWxl Ci0gICB0cmFuc2ZlciwgbG9vayBpbiBTSE9XIEZFQVRVUkVTIGZvciBDS1JFQUxQQVRILiBJZiBm b3VuZCwgcmVidWlsZCB3aXRoCi0gICAtRE5PUkVBTFBBVEggYW5kIHNlZSBpZiB0aGF0IGZpeGVz IHRoZSBwcm9ibGVtIChzb21lIFVOSVhlcyBoYXZlCi0gICByZWFscGF0aCgpIGJ1dCBpdCBkb2Vz bid0IHdvcmspLgotCi0gICBUb3RhbCBmYWlsdXJlIG9mIHRoZSBLZXJtaXQgcHJvZ3JhbSBjYW4g b2NjdXIgYmVjYXVzZSBvZiBiYWQgbWVtb3J5Ci0gICByZWZlcmVuY2VzLCBiYWQgc3lzdGVtIGNh bGxzLCBvciBwcm9ibGVtcyB3aXRoIGR5bmFtaWMgbWVtb3J5Ci0gICBhbGxvY2F0aW9uLiBGaXJz dCwgdHJ5IHRvIHJlcHJvZHVjZSB0aGUgcHJvYmxlbSB3aXRoIGRlYnVnZ2luZyB0dXJuZWQKLSAg IG9uOiBydW4gS2VybWl0IHdpdGggdGhlIC1kIGNvbW1hbmQtbGluZSBvcHRpb24gKGZvciBleGFt cGxlLCAid2VybWl0Ci0gICAtZCIpIGFuZCB0aGVuIGV4YW1pbmUgdGhlIHJlc3VsdGluZyBkZWJ1 Zy5sb2cgZmlsZS4gVGhlIGxhc3QgZW50cnkKLSAgIHNob3VsZCBiZSBpbiB0aGUgdmljaW5pdHkg b2YgdGhlIGNyYXNoLiBJbiBWTVMsIGEgY3Jhc2ggYXV0b21hdGljYWxseQotICAgcHJvZHVjZXMg YSAic3RhY2sgZHVtcCIgd2hpY2ggc2hvd3MgdGhlIHJvdXRpbmUgd2hlcmUgdGhlIGNyYXNoIG9j Y3Vycy4KLSAgIEluIHNvbWUgdmVyc2lvbnMgb2YgVW5peCwgeW91IGNhbiBnZXQgYSBzdGFjayBk dW1wIHdpdGggImFkYiIgLS0ganVzdAotICAgdHlwZSAiYWRiIHdlcm1pdCBjb3JlIiBhbmQgdGhl biBnaXZlIHRoZSBjb21tYW5kICIkYyIsIHRoZW4gQ3RybC1EIHRvCi0gICBxdWl0IChub3RlOiBy ZXBsYWNlICJ3ZXJtaXQiIGJ5ICJrZXJtaXQiIG9yIGJ5IHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRo ZQotICAgZXhlY3V0YWJsZSB0aGF0IGNyYXNoZWQgaWYgaXQgaXMgbm90IGluIHRoZSBjdXJyZW50 IGRpcmVjdG9yeSkuIE9yIHVzZQotICAgZ2RiIHRvIGdldCBhIGJhY2t0cmFjZSwgZXRjLgotCi0g ICBJbiBlZGl0IDE4Niwgb25lIGltcGxlbWVudGF0aW9uLCBVTklTWVMgNTAwMC85NSBidWlsdCB3 aXRoICJtYWtlCi0gICBzeXM1cjMiLCBoYXMgYmVlbiByZXBvcnRlZCB0byBydW4gb3V0IG9mIG1l bW9yeSB2ZXJ5IHF1aWNrbHkgKGUuZy4KLSAgIHdoaWxlIGV4ZWN1dGluZyBhIHNob3J0IGluaXRp YWxpemF0aW9uIGZpbGUgdGhhdCBjb250YWlucyBhIFNFVCBESUFMCi0gICBESVJFQ1RPUlkgY29t bWFuZCkuIERlYnVnIGxvZ3Mgc2hvdyB0aGF0IG1hbGxvYyBjYWxscyBhcmUgZmFpbGluZywKLSAg IHJlYXNvbiB1bmtub3duLiBGb3IgdGhpcyBhbmQgYW55IG90aGVyIGltcGxlbWVudGF0aW9uIHRo YXQgZ2l2ZXMgZXJyb3IKLSAgIG1lc3NhZ2VzIGFib3V0ICJtYWxsb2MgZmFpbHVyZSIgb3IgIm1l bW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUiLCByZWJ1aWxkCi0gICB0aGUgcHJvZ3JhbSAqd2l0aG91 dCogdGhlIC1ERFlOQU1JQyBDRkxBR1MgZGVmaW5pdGlvbiwgZm9yIGV4YW1wbGU6Ci0KLW1ha2Ug c3lzNXIzIEtGTEFHUz0tVURZTkFNSUMKLQotICAgQXMgb2YgZWRpdCAxNjksIEMtS2VybWl0IGlu Y2x1ZGVzIGEgbWFsbG9jKCkgZGVidWdnaW5nIHBhY2thZ2Ugd2hpY2gKLSAgIHlvdSBtYXkgbGlu ayB3aXRoIHRoZSBLZXJtaXQgcHJvZ3JhbSB0byBjYXRjaCBydW50aW1lIG1hbGxvYyBlcnJvcnMu Ci0gICBTZWUgdGhlIG1ha2VmaWxlIGVudHJpZXMgZm9yIHN1bm9zNDFtZCBhbmQgbmV4dG1kIGZv ciBleGFtcGxlcyBvZiBob3cKLSAgIHRvIHNlbGVjdCBtYWxsb2MgZGVidWdnaW5nLiBPbmNlIHlv dSBoYXZlIGxpbmtlZCBLZXJtaXQgd2l0aCB0aGUgbWFsbG9jCi0gICBkZWJ1Z2dlciwgaXQgd2ls bCBoYWx0IHdpdGggYW4gaW5mb3JtYXRpdmUgbWVzc2FnZSBpZiBhIG1hbGxvYy1yZWxhdGVkCi0g ICBlcnJvciBvY2N1cnMgYW5kLCBpZiBwb3NzaWJsZSwgZHVtcCBjb3JlLiBGb3IgdGhpcyByZWFz b24sCi0gICBtYWxsb2MtZGVidWdnaW5nIHZlcnNpb25zIG9mIEtlcm1pdCBzaG91bGQgYmUgYnVp bHQgd2l0aG91dCB0aGUgIi1zIgotICAgbGluayBvcHRpb24gKHdoaWNoIHJlbW92ZXMgc3ltYm9s cywgcHJldmVudGluZyBhbmFseXNpcyBvZiB0aGUgY29yZQotICAgZHVtcCkuIFlvdSBoYXZlIHNl dmVyYWwgd2F5cyB0byB0cmFjayBkb3duIHRoZSBtYWxsb2MgZXJyb3I6IEFuYWx5emUKLSAgIHRo ZSBjb3JlIGR1bXAgd2l0aCBhZGIuIE9yIHJlcHJvZHVjZSB0aGUgcHJvYmxlbSB3aXRoICJsb2cg ZGVidWciIGFuZAotICAgdGhlbiBsb29rIGF0IHRoZSBjb2RlIGFyb3VuZCB0aGUgbGFzdCBkZWJ1 Zy5sb2cgZW50cnkuIElmIHlvdSBoYXZlIGdjYywKLSAgIGJ1aWxkIHRoZSBwcm9ncmFtIHdpdGgg Ii1nIiBhZGRlZCB0byBDRkxBR1MgYW5kIHRoZW4gZGVidWcgaXQgd2l0aCBnZGIsCi0gICBlLmcu Ci0KLWdkYiB3ZXJtaXQKLWJyZWFrIG1haW4KLXJ1bgotLi4gc2V0IG90aGVyIGJyZWFrcG9pbnRz IG9yIHdhdGNocG9pbnRzCi1jb250aW51ZQotCi0gICBXYXRjaHBvaW50cyBhcmUgZXNwZWNpYWxs eSB1c2VmdWwgZm9yIGZpbmRpbmcgbWVtb3J5IGxlYWtzLCBidXQgdGhleQotICAgbWFrZSB0aGUg cHJvZ3JhbSBydW4gYWJvdXQgYSB0aG91c2FuZCB0aW1lcyBzbG93ZXIgdGhhbiB1c3VhbCwgc28g ZG9uJ3QKLSAgIHNldCB0aGVtIHVudGlsIHRoZSBsYXN0IHBvc3NpYmxlIG1vbWVudC4gV2hlbiBh IHdhdGNocG9pbnQgaXMgaGl0LCB5b3UKLSAgIGNhbiB1c2UgdGhlICJ3aGVyZSIgY29tbWFuZCB0 byBmaW5kIG91dCB3aGljaCBDLUtlcm1pdCBzb3VyY2Ugc3RhdGVtZW50Ci0gICB0cmlnZ2VyZWQg aXQuCi0KLSAgIElmIHlvdSBoYXZlIHRoZSBQdXJlIFNvZnR3YXJlIEluYyAiUHVyaWZ5IiBwcm9k dWN0LCBzZWUgdGhlIHN1bm9zNDFjcAotICAgbWFrZWZpbGUgZW50cnkgZm9yIGFuIGV4YW1wbGUg b2YgaG93IHRvIHVzZSBpdCB0byBkZWJ1ZyBDLUtlcm1pdC4KLQotMTUuIFNZU0xPR0dJTkcKLQot ICAgWyBbMzU1XVRvcCBdIFsgWzM1Nl1Db250ZW50cyBdIFsgWzM1N11OZXh0IF0gWyBbMzU4XVBy ZXZpb3VzIF0KLQotICAgIlN5c2xvZ2dpbmciIG1lYW5zIHJlY29yZGluZyBzZWxlY3RlZCBpbmZv cm1hdGlvbiBpbiB0aGUgc3lzdGVtIGxvZyB2aWEKLSAgIHRoZSBVbml4IHN5c2xvZygpIGZhY2ls aXR5LCB3aGljaCBpcyBhdmFpbGFibGUgaW4gbW9zdCBVbml4IHZlcnNpb25zLgotICAgU3lzbG9n Z2luZyBpcyBub3QgZG9uZSB1bmxlc3MgQy1LZXJtaXQgaXMgc3RhcnRlZCB3aXRoOgotCi0tLXN5 c2xvZzpuCi0KLSAgIG9uIHRoZSBjb21tYW5kLWxpbmUsIHdoZXJlIG4gaXMgYSBudW1iZXIgZ3Jl YXRlciB0aGFuIDAgdG8gaW5kaWNhdGUgdGhlCi0gICBsZXZlbCBvZiBzeXNsb2dnaW5nLiBTZWUg WzM1OV1TZWN0aW9uIDQuMiBvZiB0aGUgWzM2MF1JS1NECi0gICBBZG1pbmlzdHJhdG9yJ3MgR3Vp ZGUgZm9yIGRldGFpbHMuCi0KLSAgIE9idmlvdXNseSB5b3UgY2FuJ3QgZGVwZW5kIG9uIHVzZXJz IHRvIGluY2x1ZGUgLS1zeXNsb2c6MyAob3Igd2hhdGV2ZXIpCi0gICBvbiB0aGUgY29tbWFuZCBs aW5lIGV2ZXJ5IHRpbWUgdGhleSBzdGFydCBDLUtlcm1pdCwgc28gaWYgeW91IHdhbnQKLSAgIGNl cnRhaW4ga2luZHMgb2YgcmVjb3JkcyB0byBiZSByZWNvcmRlZCBpbiB0aGUgc3lzdGVtIGxvZywg eW91IGNhbgotICAgYnVpbGQgQy1LZXJtaXQgd2l0aCBmb3JjZWQgc3lzbG9nZ2luZyBhdCB0aGUg ZGVzaXJlZCBsZXZlbDsgZm9yCi0gICBleGFtcGxlLCB0byByZWNvcmQgbG9naW5zIGFuZCBkaWFs b3V0czoKLQotbWFrZSBsaW51eCBLRkxBR1M9LURTWVNMT0dMRVZFTD0yCi0KLSAgIExldmVscyAy IGFuZCAzIGFyZSB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlcyBmb3IgdGhpcyB0cmVhdG1lbnQu IExldmVsCi0gICAyIGZvcmNlcyBsb2dnaW5nIG9mIGFsbCBzdWNjZXNzZnVsIGRpYWxvdXQgY2Fs bHMgKGUuZy4gZm9yIGNoZWNraW5nCi0gICBhZ2FpbnN0IG9yIHBob25lIGJpbGxzKSwgYW5kIGxl dmVsIDMgcmVjb3JkcyBhbGwgY29ubmVjdGlvbnMgKFNFVCBMSU5FCi0gICBvciBTRVQgSE9TVCAv IFRFTE5FVCAvIFJMT0dJTiwgZXRjKSBzbyB5b3UgY2FuIHNlZSB3aG8gaXMgY29ubmVjdGluZwot ICAgb3V0IGZyb20geW91ciBzeXN0ZW0sIGFuZCB0byB3aGVyZSwgZS5nLiBmb3Igc2VjdXJpdHkg YXVkaXRpbmcuCi0KLSAgIExldmVsIDIgYW5kIDMgcmVjb3JkcyBhcmUgZXF1aXZhbGVudCB0byB0 aG9zZSBpbiB0aGUgY29ubmVjdGlvbiBsb2c7Ci0gICBzZWUgdGhlIFszNjFdQy1LZXJtaXQgNy4w IFN1cHBsZW1lbnQpIGZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZQotICAgY29ubmVj dGlvbiBsb2cuCi0KLTE2LiBCVUlMRElORyBTRUNVUkUgVkVSU0lPTlMgT0YgQy1LRVJNSVQgOC4w Ci0KLSAgIFsgWzM2Ml1Ub3AgXSBbIFszNjNdQ29udGVudHMgXSBbIFszNjRdTmV4dCBdIFsgWzM2 NV1QcmV2aW91cyBdCi0KLSAgIEMtS2VybWl0IDcuMCBhbmQgbGF0ZXIgbWF5IGJlIGJ1aWx0IHdp dGggS2VyYmVyb3MoVE0pIGFuZC9vciBTUlAoVE0pCi0gICAoU2VjdXJlIFJlbW90ZSBQYXNzd29y ZCkgYW5kL29yIFNTTC9UTFMgc2VjdXJpdHkgZm9yIHN0cm9uZwotICAgYXV0aGVudGljYXRpb24g YW5kIGVuY3J5cHRpb24gb2YgSW50ZXJuZXQgY29ubmVjdGlvbnMuIFRoZXNlIHNlY3VyaXR5Ci0g ICBtZXRob2RzIHJlcXVpcmUgZXh0ZXJuYWwgbGlicmFyaWVzIHRoYXQsIGluIHRoZWlyIGJpbmFy eSBmb3JtcywgYXJlCi0gICByZXN0cmljdGVkIGZyb20gZXhwb3J0IGJ5IFVTQSBsYXcuIFNlZSB0 aGUgWzM2Nl1LZXJtaXQgU2VjdXJpdHkKLSAgIFJlZmVyZW5jZSkgZm9yIGRldGFpbHMuIEMtS2Vy bWl0IGJpbmFyaWVzIHRoZW1zZWx2ZXMgYXJlIGxpa2V3aXNlCi0gICByZXN0cmljdGVkOyB0aGUg Qy1LZXJtaXQgYmluYXJpZXMgdGhhdCBhcmUgYXZhaWxhYmxlIGZvciBwdWJsaWMKLSAgIGRvd25s b2FkIG9uIHRoZSBJbnRlcm5ldCBhcmUgbm90IGFsbG93ZWQgdG8gY29udGFpbiB0aGUgc2VjdXJp dHkKLSAgIG9wdGlvbnMuCi0KLSAgIFNhbXBsZSBtYWtlZmlsZSBlbnRyaWVzIGFyZSBwcm92aWRl ZCBmb3IgTGludXggYW5kIG1hbnkgb3RoZXIgb3BlcmF0aW5nCi0gICBzeXN0ZW1zLiBBIGxpc3Qg b2Ygc2VjdXJlIG1ha2VmaWxlIGVudHJpZXMgaXMgaW5jbHVkZWQgaW4gdGhlIE1ha2VmaWxlLgot ICAgQ29tcGxldGUgaW5zdHJ1Y3Rpb25zIG9uIGJ1aWxkaW5nIEMtS2VybWl0IDguMCB3aXRoIE1J VCBLZXJiZXJvczsKLSAgIFNlY3VyZSBSZW1vdGUgUGFzc3dvcmQ7IGFuZC9vciBPcGVuU1NMIGNh biBiZSBmb3VuZCBpbiB0aGUgWzM2N11LZXJtaXQKLSAgIFNlY3VyaXR5IFJlZmVyZW5jZS4KLQot ICAgU1NML1RMUyBhbmQgS2VyYmVyb3MgYnVpbGRzIGFyZSBpbmNyZWFzaW5nbHkgcHJvYmxlbWF0 aWMgd2l0aCB0aGUKLSAgICJkZXByZWNhdGlvbiIgb2YgREVTLiBUaGVyZSBpcyBjb2RlIHRvIGRl dGVjdCB0aGUgcHJlc2VuY2Ugb3IgYWJzZW5jZQotICAgb2YgREVTIGluIHRoZSBPcGVuU1NMIGJ1 aWxkcywgYnV0IGl0IGRvZXNuJ3QgYWx3YXlzIHdvcmsgYmVjYXVzZQotICAgc29tZXRpbWVzIHRo ZSBTU0wgbGlicmFyaWVzIGFyZSBwcmVzZW50IGJ1dCByb3V0aW5lcyBhcmUgbWlzc2luZyBmcm9t Ci0gICB0aGVtLgotCi0gICAgICogRmlyc3Qgb2YgYWxsIHJlbWVtYmVyIHRoYXQgaWYgeW91ciBT U0wgYW5kL29yIEtlcmJlcm9zIGhlYWRlciBmaWxlcwotICAgICAgIGFuZCBsaWJyYXJpZXMgYXJl IG5vdCBpbiB0aGUgZGVmYXVsdCBwbGFjZSwgeW91J2xsIG5lZWQgdG8gb3ZlcnJpZGUKLSAgICAg ICB0aGUgYXNzdW1lZCBwYXRocy4gVG8gZmluZCBvdXQgd2hhdCB0aGUgZGVmYXVsdCBwbGFjZXMg YXJlIHR5cGUKLSAgICAgICAibWFrZSBzaG93IiwgZS5nLjoKLQotW34va2VybWl0XSBtYWtlIHNo b3cKLXByZWZpeD0vdXNyL2xvY2FsCi1zcnByb290PS91c3IvbG9jYWwKLXNzbHJvb3Q9L3Vzci9s b2NhbAotbWFucm9vdD0vdXNyL2xvY2FsCi1LNExJQj0tTC91c3Iva2VyYmVyb3MvbGliCi1LNElO Qz0tSS91c3Iva2VyYmVyb3MvaW5jbHVkZQotSzVMSUI9LUwvdXNyL2tlcmJlcm9zL2xpYgotSzVJ TkM9LUkvdXNyL2tlcmJlcm9zL2luY2x1ZGUKLVNSUExJQj0tTC91c3IvbG9jYWwvbGliCi1TUlBJ TkM9LUkvdXNyL2xvY2FsL2luY2x1ZGUKLVNTTExJQj0tTC91c3IvbG9jYWwvc3NsL2xpYgotU1NM SU5DPS1JL3Vzci9sb2NhbC9zc2wvaW5jbHVkZQotW34va2VybWl0XQotCi0gICAgICogWW91IGNh biBvdmVycmlkZSBhbnkgb3IgYWxsIG9mIHRoZXNlIGJ5IHB1dHRpbmcgYXNzaWdubWVudHMgb24g dGhlCi0gICAgICAgJ21ha2UnIGNvbW1hbmQgbGluZTsgZXhhbXBsZXM6Ci0KLW1ha2UgbGludXgr a3JiNSBcCi0gIks1SU5DPS1JL3Vzci9pbmNsdWRlLyIgXAotICJLNUxJQj0tTC91c3IvbGliNjQv IgotCi1tYWtlIHNvbGFyaXM5Zytzc2wgXAotICAiU1NMTElCPS1ML29wdC9vcGVuc3NsLTAuOS44 cS9saWIiIFwKLSAgIlNTTElOQz0tSS9vcHQvb3BlbnNzbC0wLjkuOHEvaW5jbHVkZSIKLQotICAg ICAgIE9yIGJ5IHNldHRpbmcgYW5kIGV4cG9ydGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgcHJp b3IgdG8gZ2l2aW5nCi0gICAgICAgdGhlICdtYWtlJyBjb21tYW5kLCBhcyBpbiB0aGlzIGV4YW1w bGUgaW4gd2hpY2ggKGFmdGVyIEJldGEuMDEgd2FzCi0gICAgICAgdXBsb2FkZWQpIEMtS2VybWl0 IHdhcyBzdWNjZXNzZnVsbHkgbGlua2VkIHdpdGggT3BlblNTTCAxLjAuMGQsCi0gICAgICAgd2hp Y2ggd2FzIGluc3RhbGxlZCBhbG9uZ3NpZGUgT3BlblNTTCAwLjkuOHIgb24gdGhlIHNhbWUgY29t cHV0ZXIuCi0gICAgICAgTm90ZSB0aGUgdXNlIG9mIHRoZSAnLWknIG9wdGlvbiBpbnN0ZWFkIG9m ICctSScgdG8gZm9yY2UgZ2NjIHRvCi0gICAgICAgaW5jbHVkZSB0aGUgcmlnaHQgaGVhZGVyIGZp bGVzICh0aGFua3MgdG8gTmVsc29uIEJlZWJlIGZvciB0aGlzKToKLQotZXhwb3J0IFBBVEg9L3Vz ci9iaW46JFBBVEgKLWV4cG9ydCBTU0xJTkM9LWlzeXN0ZW0vdXNyL2luY2x1ZGUKLWV4cG9ydCAi U1NMTElCPS1ML3Vzci9saWIgLVdsLC1ycGF0aCwvdXNyL2xpYiIKLW1ha2UgbGludXgrc3NsCi0K LSAgICAgICAtaSBpcyBleHBsYWluZWQgaW4gJ21hbiBnY2MnOyB0aGVyZSBpcyBhIGNoYW5nZSBp biB3aGF0IC1JIGRvZXMKLSAgICAgICB0aGF0IGNvdWxkIGhhdmUgcmFtaWZpY2F0aW9ucyBmb3Ig bWFueSBtYWtlZmlsZSB0YXJnZXRzLCBub3QganVzdAotICAgICAgIEtlcm1pdC4gQW5kIC1XbCBh bmQgLXJwYXRoIGFyZSBleHBsYWluZWQgaW4gJ21hbiBsZCc7IHRoZSBpZGVhIGlzCi0gICAgICAg YnVpbGQgYSBiaW5hcnkgZnJvbSB3aGljaCB1c2VmdWwgcmVwb3J0cyBjYW4gYmUgb2J0YWluZWQg d2l0aCBsZGQuCi0gICAgICogQnVpbGRpbmcgd2l0aCBPcGVuU1NMIHZlcnNpb25zIHByaW9yIHRv IDAuOS43IGRvZXNuJ3Qgd29yaywgZXZlbgotICAgICAgIHRob3VnaCBDLUtlcm1pdCBpcyBkZXNp Z25lZCB0byB3b3JrIHdpdGggYm90aCB0aGUgb2xkIGFuZCBuZXcKLSAgICAgICB2ZXJzaW9ucy4g VGhpcyBjb3VsZCBwcm9iYWJseSBiZSBmaXhlZCBpZiBhbnlib2R5IGNhcmVzLgotICAgICAqIElm IGEgS2VyYmVyb3Mgb3IgU1NMIGJ1aWxkIGZhaWxzIGF0IGxpbmsgdGltZSBiZWNhdXNlCi0gICAg ICAgZGVzX2VjYjNfZW5jcnlwdCwgZGVzX3JhbmRvbV9zZWVkLCBhbmQvb3IgZGVzX3NldF9vZGRf cGFyaXR5IGNvbWUKLSAgICAgICB1cCBtaXNzaW5nLCByZWRvIHRoZSBidWlsZCB3aXRoIC1VQ0tf REVTOgotCi1tYWtlIG5ldGJzZCtrcmI1K3NzbCBcCi0gIks1SU5DPS1JL3Vzci9sb2NhbC9pbmNs dWRlIiBcCi0gIks1TElCPS1ML3Vzci9sb2NhbC9rZXJibGliIiBLRkxBR1M9LVVDS19ERVMKLQot ICAgICAgIEkgc3VwcG9zZSBhbGwgdGhlIFNTTCBhbmQgS2VyYmVyb3MgdGFyZ2V0cyBjb3VsZCBi ZSByZWNvZGVkIHRvCi0gICAgICAgZmlndXJlIHRoaXMgb3V0IGF1dG9tYXRpY2FsbHkgKGkuZS4g dGhhdCBERVMgaXMgaW5zdGFsbGVkIGJ1dCB3aXRoCi0gICAgICAgc29tZSBlbnRyeSBwb2ludHMg bWlzc2luZyksIGJ1dCBpdCB3b3VsZG4ndCBiZSBwcmV0dHkuCi0gICAgICogRGlmZmVyZW50IEtl cmJlcm9zIGFuZCBPcGVuU1NMIGRpc3RyaWJ1dGlvbnMgY2FuIGJlIGluc3RhbGxlZCB3aXRoCi0g ICAgICAgZGlmZmVyZW50IG9wdGlvbnM7IGNlcnRhaW4gbGlicmFyaWVzIG1pZ2h0IGJlIG1pc3Np bmcgb3IgbmFtZWQKLSAgICAgICBkaWZmZXJlbnRseSAoZm9yIGV4YW1wbGUsIGxpYmdzc2FwaSB2 cyBsaWJnc3NhcGlfa3JiNSkuIFNvbWUsIGJ1dAotICAgICAgIG5vdCBhbGwsIG9mIHRoZSBDLUtl cm1pdCBtYWtlZmlsZSB0YXJnZXRzIGhhdmUgYmVlbiBmaXhlZCB0byB0YWtlCi0gICAgICAgc29t ZSBvZiB0aGVzZSB2YXJpYXRpb25zIGludG8gYWNjb3VudCBieSB0ZXN0aW5nIGZvciB0aGVtLCBt b3N0Ci0gICAgICAgbm90YWJseSB0aGUgbGludXggb25lcywgbGludXgrc3NsLCBsaW51eCtrcmI1 LCBhbmQgbGludXgra3JiNStzc2wuCi0gICAgICAgUHJvYmFibHkgZXZlcnkgdGFyZ2V0IHRoYXQg YnVpbGRzIHdpdGggT3BlblNTTCBvciBLZXJiZXJvcyBuZWVkcwotICAgICAgIHRoZSBzYW1lIHRy ZWF0bWVudCBidXQgSSB3b24ndCBoYXZlIHRpbWUuCi0gICAgICogV2h5IGRvZXNuJ3QgQy1LZXJt aXQganVzdCB1c2UgQXV0b2NvbmY/IE1haW5seSBiZWNhdXNlIHRoZSBtYWtlZmlsZQotICAgICAg IGlzIGZ1bGwgb2YgdGFyZ2V0cyBmb3IgcGxhdGZvcm1zIHRoYXQgZG9uJ3QgaGF2ZSBBdXRvY29u ZiBvciBhbnkKLSAgICAgICBvdGhlciB0b29sIGxpa2UgaXQuIChBbm90aGVyIHJlYXNvbiBpcyB0 aGF0IEkndmUgYWx3YXlzIHByZWZlcnJlZAotICAgICAgIHRoYXQgS2VybWl0IGhhdmUgdGhlIGxl YXN0IGRlcGVuZGVuY2llcyBwb3NzaWJsZSBvbiBleHRlcm5hbAotICAgICAgIHRvb2xzZXRzLikg UGVyaGFwcyBjZXJ0YWluIHRhcmdldHMgY291bGQgYmUgY29udmVydGVkIHRvIHVzZSB0aGVtLAot ICAgICAgIGVzcGVjaWFsbHkgTGludXggYmVjYXVzZSB0aGVyZSBhcmUgc28gbWFueSB2YXJpYXRp b25zIGFtb25nCi0gICAgICAgZGlzdHJpYnV0aW9ucyBhbmQgdmVyc2lvbnMuIEFueWJvZHkgd2hv IHdhbnRzIHRvIG1ha2UsIHNheSwgYW4KLSAgICAgICBBdXRvY29uZi1iYXNlZCBMaW51eCB0YXJn ZXQsIGJlIG15IGd1ZXN0LCBidXQgYmVhciBpbiBtaW5kIHRoYXQgb25lCi0gICAgICAgTGludXgg dGFyZ2V0IGlzIHN1cHBvc2VkIHRvIHdvcmsgZm9yIGFsbCB2ZXJzaW9ucyBhbmQgZGlzdHJpYnV0 aW9ucwotICAgICAgIG9mIExpbnV4IG9uIGFsbCBwbGF0Zm9ybXMuIFdlbGwsIG9uZSB0YXJnZXQg Zm9yIExpbnV4IGJ5IGl0c2VsZiwKLSAgICAgICBhbm90aGVyIGZvciBMaW51eCB3aXRoIE9wZW5T U0wsIGFub3RoZXIgZm9yIExpbnV4IHdpdGggS2VyYmVyb3MgNSwKLSAgICAgICBhbmQgYW5vdGhl ciBmb3IgTGludXggd2l0aCBLZXJiZXJvcyA1IGFuZCBPcGVuU1NMLiBFYWNoIG9mIHRoZXNlIGlz Ci0gICAgICAgc3VwcG9zZWQgdG8gd29yayBvbiBhbnkgTGludXggdmVyc2lvbiB3aXRoIGFueSB2 ZXJzaW9uIG9mCi0gICAgICAgS2VyYmVyb3MgNSBvciBPcGVuU1NMLgotCi0gICBBbHNvIG5vdGUg dGhhdCBLZXJiZXJvcyBzdXBwb3J0IGlzIGZvciB0aGUgTUlUIHZlcnNpb24gb25seSwgSGVpbWRh bAotICAgYW5kIG90aGVycyBhcmUgbm90IHN1cHBvcnRlZCAobmV2ZXIgaGF2ZSBiZWVuKS4gT2Yg Y291cnNlIGFueWJvZHkgY2FuCi0gICBwaXRjaCBpbiBhbmQgYWRkIG9yIGltcHJvdmUgc3VwcG9y dCBmb3Igd2hhdGV2ZXIgdGhleSB3YW50LgotCi0xNy4gSU5TVEFMTElORyBDLUtFUk1JVCBBUyBB TiBTU0ggU0VSVkVSIFNVQlNZU1RFTQotCi0gICBbIFszNjhdVG9wIF0gWyBbMzY5XUNvbnRlbnRz IF0gWyBbMzcwXVByZXZpb3VzIF0KLQotICAgVGhpcyByZXF1aXJlcyBDLUtlcm1pdCA4LjAuMjA2 IG9yIGxhdGVyIGFuZCBhbiBTU0ggdjIgc2VydmVyLiBJZiB5b3UKLSAgIGxpc3QgQy1LZXJtaXQg YXMgYSBTdWJzeXN0ZW0gaW4gdGhlIFNTSCB2MiBzZXJ2ZXIgY29uZmlndXJhdGlvbiBmaWxlCi0g ICAoYXMsIGZvciBleGFtcGxlLCBTRlRQIGlzIGxpc3RlZCksIHVzZXJzIGNhbiBtYWtlIFNTSCBj b25uZWN0aW9ucwotICAgZGlyZWN0IHRvIGEgS2VybWl0IHNlcnZlciBhcyBleHBsYWluZWQgaGVy ZToKLQotWzM3MV1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2tlcm1pdC5odG1sCi0K LSAgIFRoZSBuYW1lIGFuZCBsb2NhdGlvbiBvZiB0aGUgU1NIIHNlcnZlciBjb25maWd1cmF0aW9u IGZpbGUgZGVwZW5kcyBvbgotICAgeW91ciBwbGF0Zm9ybSwgd2hpY2ggU1NIIHByb2R1Y3Qocykg eW91IGhhdmUsIGV0Yy4gQy1LZXJtaXQgaXRzZWxmIG11c3QKLSAgIGJlIHJlZmVycmVkIHRvIGlu IHRoaXMgZmlsZSBhcyAia2VybWl0LXNzaHN1YiIuIE9uIHRoZSBob3N0LCBpbnN0YWxsCi0gICB0 aGUgQy1LZXJtaXQgOC4wLjIxMSBiaW5hcnkgaW4gdGhlIG5vcm1hbCB3YXkuIFRoZW4sIGluIHRo ZSBzYW1lCi0gICBkaXJlY3RvcnkgYXMgdGhlIEMtS2VybWl0IGJpbmFyeSwgbWFrZSBhIHN5bWJv bGljIGxpbms6Ci0KLWxuIC1zIGtlcm1pdCBrZXJtaXQtc3Noc3ViCi0KLSAgIChOb3RlOiB0aGUg Im1ha2UgaW5zdGFsbCIgbWFrZWZpbGUgdGFyZ2V0IGRvZXMgdGhpcyBmb3IgeW91LikgVGhlbiBp bgotICAgdGhlIHNzaGQgY29uZmlndXJhdGlvbiBmaWxlLCBhZGQgYSBsaW5lOgotCi1TdWJzeXN0 ZW0gIGtlcm1pdCAgIC9zb21lL3BhdGgva2VybWl0LXNzaHN1YgotCi0gICAod2hlcmUgL3NvbWUv cGF0aCBpcyB0aGUgZnVsbHkgc3BlY2lmaWVkIGRpcmVjdG9yeSB3aGVyZSB0aGUgc3ltbGluawot ICAgaXMuKSBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIGxpbmUgdGhhdCBzZXRzIHVwIHRoZSBTRlRQ IHN1YnN5c3RlbS4KLSAgIEV4YW1wbGU6Ci0KLVN1YnN5c3RlbSAgIHNmdHAgICAgL3Vzci9sb2Nh bC9saWJleGVjL3NmdHAtc2VydmVyCi1TdWJzeXN0ZW0gICBrZXJtaXQgIC91c3IvbG9jYWwvYmlu L2tlcm1pdC1zc2hzdWIKLQotICAgVGhlIG1lY2hhbmljcyBtaWdodCB2YXJ5IGZvciBvdGhlciBT U0ggc2VydmVyczsgIm1hbiBzc2hkIiBmb3IgZGV0YWlscy4KLSAgIFRoZSBtZXRob2Qgc2hvd24g aGVyZSBpcyB1c2VkIGJlY2F1c2UgdGhlIE9wZW5TU0ggc2VydmVyIGRvZXMgbm90Ci0gICBwZXJt aXQgdGhlIHN1YnN5c3RlbSBpbnZvY2F0aW9uIHRvIGluY2x1ZGUgY29tbWFuZC1saW5lIG9wdGlv bnMuCi0gICBDLUtlcm1pdCB3b3VsZCBoYXZlIG5vIHdheSBvZiBrbm93aW5nIHRoYXQgaXQgc2hv dWxkIGVudGVyIFNlcnZlciBtb2RlCi0gICBpZiBpdCB3ZXJlIG5vdCBjYWxsZWQgYnkgYSBzcGVj aWFsIG5hbWUuCi0KLSAgIFsgWzM3Ml1Ub3AgXSBbIFszNzNdQ29udGVudHMgXSBbIFszNzRdQy1L ZXJtaXQgSG9tZSBdIFsgWzM3NV1DLUtlcm1pdAotICAgOS4wIE92ZXJ2aWV3IF0gWyBbMzc2XUtl cm1pdCBIb21lIF0KLSAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCi0KLQotICAgIEMtS2VybWl0IDkuMCBVbml4IElu c3RhbGxhdGlvbiBJbnN0cnVjdGlvbnMgLyBUaGUgS2VybWl0IFByb2plY3QgLwotICAgIENvbHVt YmlhIFVuaXZlcnNpdHkgLyAzMCBKdW5lIDIwMTEKLQotUmVmZXJlbmNlcwotCi0gICAxLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS8KLSAgIDIuIG1haWx0bzprZXJtaXRAY29sdW1iaWEuZWR1Ci0g ICAzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAotICAgNC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2s5NS5odG1sCi0gICA1LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gICA2LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tzY3JpcHRzLmh0bWwKLSAgIDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9jdXJyZW50Lmh0bWwKLSAgIDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC93aGF0c25ldy5odG1sCi0gICA5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvZmFx Lmh0bWwKLSAgMTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zdXBwb3J0Lmh0bWwK LSAgMTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50 cwotICAxMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotICAx My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKLSAgMTQuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbAotICAxNS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gwCi0gIDE2LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDEKLSAgMTcuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MgotICAxOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWlucy5odG1sI3gzCi0gIDE5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1aW5zLmh0bWwjeDQKLSAgMjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3VpbnMuaHRtbCN4NQotICAyMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlu cy5odG1sI3g2Ci0gIDIyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0 bWwjeDcKLSAgMjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4 OAotICAyNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5Ci0g IDI1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDEwCi0gIDI2 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDExCi0gIDI3LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDEyCi0gIDI4LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDEzCi0gIDI5LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDE0Ci0gIDMwLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDE1Ci0gIDMxLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDE2Ci0gIDMyLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDE3Ci0gIDMzLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9wCi0gIDM0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMKLSAgMzUuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MQotICAzNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrY2NmZy5odG1sCi0gIDM3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tjYndyLmh0bWwKLSAgMzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3Iu aHRtbAotICAzOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sCi0g IDQwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDIKLSAgNDEu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MwotICA0Mi4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g0Ci0gIDQzLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9wCi0gIDQ0LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMKLSAgNDUuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MgotICA0Ni4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gwCi0gIDQ3LiBmdHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9hcmNoaXZlcy9ja3UyMTEudGFyLloKLSAgNDguIGZ0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2FyY2hpdmVzL2NrdTIxMS50YXIuZ3oKLSAgNDkuIGh0dHA6Ly9rZXJt aXQuY29sdW1iaWEuZWR1L2Z0cC9hcmNoaXZlcy9ja3UyMTEudGFyLloKLSAgNTAuIGh0dHA6Ly9r ZXJtaXQuY29sdW1iaWEuZWR1L2Z0cC9hcmNoaXZlcy9ja3UyMTEudGFyLmd6Ci0gIDUxLiBmdHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9hcmNoaXZlcy9ja3UyMTEudGFyCi0gIDUyLiBodHRw Oi8va2VybWl0LmNvbHVtYmlhLmVkdS9mdHAvYXJjaGl2ZXMvY2t1MjExLnRhcgotICA1My4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g3Ci0gIDU0LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDUKLSAgNTUuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NQotICA1Ni4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxNgotICA1Ny4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAotICA1OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCi0gIDU5LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDMKLSAgNjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3VpbnMuaHRtbCN4MQotICA2MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWlucy5odG1sI3g1Ci0gIDYyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1aW5zLmh0bWwjWDEwCi0gIDYzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 aW5zLmh0bWwjeDExCi0gIDY0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5z Lmh0bWwjeDEwCi0gIDY1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0 bWwjeDMKLSAgNjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jazgwcGFja2FnZXMu aHRtbAotICA2Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gx MAotICA2OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAot ICA2OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRz Ci0gIDcwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDQKLSAg NzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MgotICA3Mi4g ZnRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvYmluLwotICA3My4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrODBiaW5hcmllcy5odG1sCi0gIDc0LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDcKLSAgNzUuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNidWlsZAotICA3Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWlucy5odG1sI3g1Ci0gIDc3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1aW5zLmh0bWwjeDQKLSAgNzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2ZhcS5odG1sI3ZlcnNpb24KLSAgNzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3VpbnMuaHRtbCN4NAotICA4MC4gbWFpbHRvOmtlcm1pdEBjb2x1bWJpYS5lZHUKLSAgODEu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKLSAgODIuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cwotICA4My4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g1Ci0gIDg0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDMKLSAgODUuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OAotICA4Ni4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5Ci0gIDg3LiBmdHA6Ly9rZXJtaXQuY29s dW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9tYWtlZmlsZQotICA4OC4gZnRwOi8va2VybWl0LmNv bHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2twa2VyLm1rCi0gIDg5LiBmdHA6Ly9rZXJtaXQu Y29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3Vic2QubWFrCi0gIDkwLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDUKLSAgOTEuIG1haWx0bzprZXJtaXQt c3VwcG9ydEBjb2x1bWJpYS5lZHUKLSAgOTIuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2Vy bWl0L2Mta2VybWl0L21ha2VmaWxlCi0gIDkzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1aW5zLmh0bWwjeDcKLSAgOTQuIG1haWx0bzprZXJtaXQtc3VwcG9ydEBjb2x1bWJpYS5l ZHUKLSAgOTUuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L21ha2Vm aWxlCi0gIDk2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDUu NAotICA5Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxMAot ICA5OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxMQotICA5 OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g1Ci0gMTAwLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaWtzZC5odG1sCi0gMTAxLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9wCi0gMTAyLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMKLSAxMDMuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NC4xCi0gMTA0LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwKLSAxMDUuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NC4xCi0gMTA2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1aW5zLmh0bWwjeDQuMgotIDEwNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWlucy5odG1sI3g0LjMKLSAxMDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3VpbnMuaHRtbCN4NC40Ci0gMTA5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1aW5zLmh0bWwjeDQuNQotIDExMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrY2NmZy5odG1sCi0gMTExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2Zn Lmh0bWwjeDgKLSAxMTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pa3NkLmh0bWwK LSAxMTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pa3NkLmh0bWwKLSAxMTQuIGZ0 cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdWZpby5jCi0gMTE1LiBm dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3VmaW8uYwotIDExNi4g bWFpbHRvOmtlcm1pdC1zdXBwb3J0QGNvbHVtYmlhLmVkdQotIDExNy4gZnRwOi8va2VybWl0LmNv bHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjbWFpLmMKLSAxMTguIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MTUKLSAxMTkuIGZ0cDovL2tlcm1pdC5jb2x1 bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXRpby5jCi0gMTIwLiBmdHA6Ly9rZXJtaXQuY29s dW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3VmaW8uYwotIDEyMS4gZnRwOi8va2VybWl0LmNv bHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dGlvLmMKLSAxMjIuIGZ0cDovL2tlcm1pdC5j b2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdWZpby5jCi0gMTIzLiBmdHA6Ly9rZXJtaXQu Y29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2NuZXQuYwotIDEyNC4gZnRwOi8va2VybWl0 LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjbmV0LmMKLSAxMjUuIGZ0cDovL2tlcm1p dC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXRpby5jCi0gMTI2LiBmdHA6Ly9rZXJt aXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2N1bmkuYwotIDEyNy4gbWFpbHRvOmtl cm1pdC1zdXBwb3J0QGNvbHVtYmlhLmVkdQotIDEyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWlucy5odG1sI3RvcAotIDEyOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCi0gMTMwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1aW5zLmh0bWwjeDQKLSAxMzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3VpbnMuaHRtbCN4NC4yCi0gMTMyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1aW5zLmh0bWwjeDQuMAotIDEzMy4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQv Yy1rZXJtaXQvbWFrZWZpbGUKLSAxMzQuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0 L2Mta2VybWl0L2NrdWJ3ci50eHQKLSAxMzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbAotIDEzNi4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1r ZXJtaXQvY2t3YXJ0LmMKLSAxMzcuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mt a2VybWl0L2NrY3Byby53Ci0gMTM4LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9j LWtlcm1pdC9ja2Nwcm8uYwotIDEzOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWlucy5odG1sI3RvcAotIDE0MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlu cy5odG1sI2NvbnRlbnRzCi0gMTQxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 aW5zLmh0bWwjeDQKLSAxNDIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMu aHRtbCN4NC4zCi0gMTQzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0 bWwjeDQuMQotIDE0NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1s I3g1Ci0gMTQ1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9w Ci0gMTQ2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVu dHMKLSAxNDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NAot IDE0OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g0LjQKLSAx NDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NC4yCi0gMTUw LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9wCi0gMTUxLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMKLSAxNTIu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NAotIDE1My4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g0LjUKLSAxNTQuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NC4zCi0gMTU1LiBmdHA6Ly9r ZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3BrZXIubWsKLSAxNTYuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKLSAxNTcuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cwotIDE1OC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g0Ci0gMTU5LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDQuNAotIDE2MC4gZnRwOi8va2VybWl0 LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvbWFrZWZpbGUKLSAxNjEuIGZ0cDovL2tlcm1p dC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L21ha2VmaWxlCi0gMTYyLiBmdHA6Ly9rZXJt aXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2Nwcm8udwotIDE2My4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAotIDE2NC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCi0gMTY1LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDYKLSAxNjYuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NAotIDE2Ny4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g1LjEKLSAxNjguIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NS4yCi0gMTY5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1aW5zLmh0bWwjeDUuMwotIDE3MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWlucy5odG1sI3g1LjQKLSAxNzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC8KLSAxNzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4 NS40Ci0gMTczLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDUu MwotIDE3NC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvQ09QWUlO Ry5UWFQKLSAxNzUuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2Nr ZXJtaXQuaW5pCi0gMTc2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0 bWwjeDUuMQotIDE3Ny4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQv Y2tlcm1vZC5pbmkKLSAxNzguIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2Vy bWl0L2NrZXJtaXQ3MC50eHQKLSAxNzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j azYwbWFudWFsLmh0bWwKLSAxODAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbAotIDE4MS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJt aXQvY2tlcm1pdDgwLnR4dAotIDE4Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr NjBtYW51YWwuaHRtbAotIDE4My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sCi0gMTg0LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1p dC9ja2VybWl0OTAudHh0Ci0gMTg1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2s2 MG1hbnVhbC5odG1sCi0gMTg2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDkwLmh0bWwKLSAxODcuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0 L2NrY2J3ci50eHQKLSAxODguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3Iu aHRtbAotIDE4OS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1 YndyLnR4dAotIDE5MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s Ci0gMTkxLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3VpbnMu dHh0Ci0gMTkyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwKLSAx OTMuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY2NmZy50eHQK LSAxOTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbAotIDE5NS4g ZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjcGxtLnR4dAotIDE5 Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sCi0gMTk3LiBmdHA6 Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9jYV9jZXJ0cy5wZW0KLSAxOTgu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MTYiCi0gMTk5LiBm dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9tYWtlZmlsZQotIDIwMC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g/Ci0gMjAxLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDExCi0gMjAyLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDUuMgotIDIwMy4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbCNkb3dubG9hZAotIDIwNC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYmluYXJpZXMuaHRtbAotIDIwNS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbCNkb3dubG9hZAotIDIwNi4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAotIDIwNy4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCi0gMjA4LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDcKLSAyMDkuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NQotIDIxMC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAotIDIxMS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCi0gMjEyLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDgKLSAyMTMuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NgotIDIxNC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVk dS9rZXJtaXQvYy1rZXJtaXQvY2t1dGlvLmMKLSAyMTUuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5l ZHUva2VybWl0L2Mta2VybWl0L2NrdXRpby5jCi0gMjE2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1aW5zLmh0bWwjeDQuMAotIDIxNy4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVk dS9rZXJtaXQvYy1rZXJtaXQvY2tjZGViLmgKLSAyMTguIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5l ZHUva2VybWl0L2Mta2VybWl0L2NrdWZpby5jCi0gMjE5LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEu ZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3VmaW8uYwotIDIyMC4gZnRwOi8va2VybWl0LmNvbHVtYmlh LmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dGlvLmMKLSAyMjEuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MTAKLSAyMjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2NjZmcuaHRtbCN4MgotIDIyMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrY2NmZy5odG1sCi0gMjI0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 aW5zLmh0bWwjeDQKLSAyMjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMu aHRtbCN4MTAKLSAyMjYuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0 L2NrdXRpby5jCi0gMjI3LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1p dC9ja3V0aW8uYwotIDIyOC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJt aXQvY2t1dGlvLmMKLSAyMjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMu aHRtbCN4OS40Ci0gMjMwLiBtYWlsdG86a2VybWl0LXN1cHBvcnRAY29sdW1iaWEuZWR1Ci0gMjMx LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9wCi0gMjMyLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMKLSAyMzMu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OQotIDIzNC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g3Ci0gMjM1LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwKLSAyMzYuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbAotIDIzNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAotIDIzOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCi0gMjM5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1aW5zLmh0bWwjeDEwCi0gMjQwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1aW5zLmh0bWwjeDgKLSAyNDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3VpbnMuaHRtbCN4OS4xCi0gMjQyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1aW5zLmh0bWwjeDkuMS4xCi0gMjQzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1aW5zLmh0bWwjeDkuMS4yCi0gMjQ0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1aW5zLmh0bWwjeDkuMS4zCi0gMjQ1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1aW5zLmh0bWwjeDkuMgotIDI0Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWlucy5odG1sI3g5LjMKLSAyNDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vp bnMuaHRtbCN4OS40Ci0gMjQ4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5z Lmh0bWwjeDkuNQotIDI0OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5o dG1sI3g5LjYKLSAyNTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRt bCN4OS43Ci0gMjUxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwj eDkuOAotIDI1Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5 LjkKLSAyNTMuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXRp by5jCi0gMjU0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9w Ci0gMjU1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkKLSAy NTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cwot IDI1Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjIKLSAy NTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS4xLjEKLSAy NTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS4xLjIKLSAy NjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS4xLjMKLSAy NjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKLSAyNjIu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cwotIDI2 My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5Ci0gMjY0LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkuMQotIDI2NS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjEuMwotIDI2Ni4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjEuMQotIDI2Ny4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAotIDI2OC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCi0gMjY5LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkKLSAyNzAuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS4xCi0gMjcxLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkuMgotIDI3Mi4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjEuMgotIDI3My4gaHR0cDovL3d3dy5v cGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA3OTA0OTc1LwotIDI3NC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjEuMQotIDI3NS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAotIDI3Ni4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCi0gMjc3LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkKLSAyNzguIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS4xCi0gMjc5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkuMwotIDI4MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWlucy5odG1sI3g5LjEKLSAyODEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3VpbnMuaHRtbCN0b3AKLSAyODIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3VpbnMuaHRtbCNjb250ZW50cwotIDI4My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWlucy5odG1sI3g5Ci0gMjg0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1aW5zLmh0bWwjeDkuNAotIDI4NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWlucy5odG1sI3g5LjIKLSAyODYuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mt a2VybWl0L2NrdWZpby5jCi0gMjg3LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9j LWtlcm1pdC9ja3V0aW8uYwotIDI4OC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQv Yy1rZXJtaXQvY2t1ZmlvLmMKLSAyODkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3VpbnMuaHRtbCN0b3AKLSAyOTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vp bnMuaHRtbCNjb250ZW50cwotIDI5MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWlucy5odG1sI3g5Ci0gMjkyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5z Lmh0bWwjeDkuNQotIDI5My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5o dG1sI3g5LjMKLSAyOTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jYWJsZS5odG1s Ci0gMjk1LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V0aW8u YwotIDI5Ni4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjZGVi LmgKLSAyOTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AK LSAyOTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50 cwotIDI5OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5Ci0g MzAwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkuNgotIDMw MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjQKLSAzMDIu IGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY2RlYi5oCi0gMzAz LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V1czMuYwotIDMw NC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dGlvLmMKLSAz MDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKLSAzMDYu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cwotIDMw Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5Ci0gMzA4LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkuNwotIDMwOS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjUKLSAzMTAuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKLSAzMTEuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cwotIDMxMi4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5Ci0gMzEzLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkuOAotIDMxNC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjYKLSAzMTUuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKLSAzMTYuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cwotIDMxNy4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5Ci0gMzE4LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkuOQotIDMxOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjcKLSAzMjAuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5l ZHUva2VybWl0L2Mta2VybWl0L2NrdXRpby5jCi0gMzIxLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEu ZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V0aW8uYwotIDMyMi4gZnRwOi8va2VybWl0LmNvbHVtYmlh LmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjZGViLmgKLSAzMjMuIGZ0cDovL2tlcm1pdC5jb2x1bWJp YS5lZHUva2VybWl0L2Mta2VybWl0L2NrdWZpby5jCi0gMzI0LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9wCi0gMzI1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMKLSAzMjYuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OQotIDMyNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWlucy5odG1sI3gxMAotIDMyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWlucy5odG1sI3g5LjgKLSAzMjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3VpbnMuaHRtbCN0b3AKLSAzMzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3VpbnMuaHRtbCNjb250ZW50cwotIDMzMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWlucy5odG1sI3gxMQotIDMzMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWlucy5odG1sI3g5Ci0gMzMzLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtl cm1pdC9ja3V0aW8uYwotIDMzNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlu cy5odG1sI3gxMQotIDMzNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5o dG1sI3RvcAotIDMzNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1s I2NvbnRlbnRzCi0gMzM3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0 bWwjeDEyCi0gMzM4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwj eDEwCi0gMzM5LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V0 aW8uYwotIDM0MC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1 ZmlvLmMKLSAzNDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0 b3AKLSAzNDIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250 ZW50cwotIDM0My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gx MwotIDM0NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxMQot IDM0NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAotIDM0 Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCi0g MzQ3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDE0Ci0gMzQ4 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDEyCi0gMzQ5LiBm dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3Vid3IudHh0Ci0gMzUw LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V0aW8uYwotIDM1 MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAotIDM1Mi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCi0gMzUz LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDE1Ci0gMzU0LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDEzCi0gMzU1LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9wCi0gMzU2LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMKLSAzNTcuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MTYKLSAzNTguIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MTQKLSAzNTkuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC91aWtzZC5odG1sI3g0LjIKLSAzNjAuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC91aWtzZC5odG1sCi0gMzYxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDIuaHRtbAotIDM2Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWlucy5odG1sI3RvcAotIDM2My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWlucy5odG1sI2NvbnRlbnRzCi0gMzY0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1aW5zLmh0bWwjeDE3Ci0gMzY1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1aW5zLmh0bWwjeDE1Ci0gMzY2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2Vj dXJpdHkuaHRtbAotIDM2Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NlY3VyaXR5 ODAuaHRtbAotIDM2OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1s I3RvcAotIDM2OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI2Nv bnRlbnRzCi0gMzcwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwj eDE2Ci0gMzcxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2tlcm1pdC5odG1sCi0g MzcyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9wCi0gMzcz LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMKLSAz NzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAzNzUuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jazkwdXBkYXRlcy5odG1sCi0gMzc2LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAoKZGlmZiAtLWdpdCBhL2NrZXJt aXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1a2VyLm5yIGIvY2tlcm1pdC05LjAu MzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VrZXIubnIKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAzYjMwZTcuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2Nr ZXJtaXQtOS4wLjMwMi9ja3VrZXIubnIKKysrIC9kZXYvbnVsbApAQCAtMSwxODMxICswLDAgQEAK LS5cIiBAKCMpIGtlcm1pdC4xIDkuMC4zMDIgMjAxMS8wOC8yMCBDb2x1bWJpYSBVbml2ZXJzaXR5 Ci0uVEggS0VSTUlUIDEgIkpVTFkgMjAxMSIgIlVzZXIgTWFudWFscyIKLS5uYQotLlNIIE5BTUUK LWtlcm1pdCBcLQotLkIgQ1woaHlLZXJtaXQgOS4wOgotdHJhbnNwb3J0XChoeSBhbmQgcGxhdGZv cm1cKGh5aW5kZXBlbmRlbnQKLWludGVyYWN0aXZlIGFuZCBzY3JpcHRhYmxlIGNvbW11bmljYXRp b25zIHNvZnR3YXJlLgotLklQCi0KLVRoaXMgZG9jdW1lbnQgaXMgaW50ZW5kZWQgdG8gZ2l2ZSB0 aGUgYmVnaW5uZXIgc3VmZmljaWVudCBpbmZvcm1hdGlvbiB0bwotbWFrZSBiYXNpYyAoaWYgbm90 IGFkdmFuY2VkKSB1c2Ugb2YgQ1woaHlLZXJtaXQgOS4wLiAgQWx0aG91Z2ggaXQgbWlnaHQgYmUK LXJhdGhlciBsb25nIGZvciBhIFVuaXggbWFudWFsIHBhZ2UsIGl0J3Mgc3RpbGwgZmFyIHNob3J0 ZXIgdGhhbiB0aGUKLUNcKGh5S2VybWl0IG1hbnVhbCwgd2hpY2ggc2hvdWxkIGJlIGNvbnN1bHRl ZCBmb3IgYWR2YW5jZWQgdG9waWNzIHN1Y2ggYXMKLWN1c3RvbWl6YXRpb24sIGNoYXJhY3Rlclwo aHlzZXRzLCBzY3JpcHRpbmcsIGV0Yy4gV2UgYWxzbyBhdHRlbXB0IHRvIHByb3ZpZGUKLWEgY2xl YXIgc3RydWN0dXJhbCBvdmVydmlldyBvZiBDXChoeUtlcm1pdCdzIG1hbnkgY2FwYWJpbGl0aWVz LCBmdW5jdGlvbmFsCi1hcmVhcywgc3RhdGVzLCBhbmQgbW9kZXMgYW5kIHRoZWlyIGludGVycmVs YXRpb24sIHRoYXQgc2hvdWxkIGJlIGhlbHBmdWwgdG8KLWJlZ2lubmVycyBhbmQgdmV0ZXJhbnMg YWxpa2UsIGFzIHdlbGwgYXMgdG8gdGhvc2UgdXBncmFkaW5nIHRvIHZlcnNpb24gOS4wCi1mcm9t IGVhcmxpZXIgcmVsZWFzZXMuCi0uUFAKLVRoaXMgZG9jdW1lbnQgaXMgYWxzbyBhdmFpbGFibGUg YXMgYSBXZWIgcGFnZSBhdDoKLS5JUAotaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dXR1dG9yLmh0bWwKLS5TSCBERVNDUklQVElPTgotQ1woaHlLZXJtaXQgaXMgYW4gYWxsXChoeXB1 cnBvc2UgY29tbXVuaWNhdGlvbnMgc29mdHdhcmUgcGFja2FnZSBmcm9tIHRoZSBLZXJtaXQKLVBy b2plY3QgYXQgQ29sdW1iaWEgVW5pdmVyc2l0eSB0aGF0OgotLlBQCi0ubmYKLVwoYnUJSXMgcG9y dGFibGUgdG8gbWFueSBwbGF0Zm9ybXMsIFVuaXggYW5kIG5vblwoaHlVbml4IGFsaWtlLgotLmJy Ci1cKGJ1CUNhbiBtYWtlIGJvdGggc2VyaWFsIGFuZCBuZXR3b3JrIGNvbm5lY3Rpb25zLgotLmJy Ci1cKGJ1CUNhbiBjb25kdWN0IGludGVyYWN0aXZlIHRlcm1pbmFsIHNlc3Npb25zIG92ZXIgaXRz IGNvbm5lY3Rpb24uCi0uYnIKLVwoYnUJQ2FuIHRyYW5zZmVyIHRleHQgb3IgYmluYXJ5IGZpbGVz IG92ZXIgdGhlIHNhbWUgY29ubmVjdGlvbi4KLS5icgotXChidQlDYW4gY29udmVydCBjaGFyYWN0 ZXIgc2V0cyBpbiB0aGUgdGVybWluYWwgc2Vzc2lvbi4KLS5icgotXChidQlDYW4gY29udmVydCBj aGFyYWN0ZXIgc2V0cyBkdXJpbmcgdGV4dFwoaHlmaWxlIGZpbGUgdHJhbnNmZXIuCi0uYnIKLVwo YnUJSXMgY3VzdG9taXphYmxlIGluIGV2ZXJ5IGFzcGVjdCBvZiBpdHMgb3BlcmF0aW9uLgotLmZp Ci0uUFAKLUNcKGh5S2VybWl0IGlzIGEgbW9kZW0gcHJvZ3JhbSwgYSBUZWxuZXQgY2xpZW50LCBh biBSbG9naW4gY2xpZW50LCBhbiBGVFAKLWNsaWVudCwgYW4gSFRUUCBjbGllbnQsIGFuZCBvbiBz ZWxlY3RlZCBwbGF0Zm9ybXMsIGFsc28gYW4gWC4yNSBjbGllbnQuIEl0Ci1jYW4gbWFrZSBpdHMg b3duIHNlY3VyZSBJbnRlcm5ldCBjb25uZWN0aW9ucyB1c2luZyBJRVRGXChoeWFwcHJvdmVkIHNl Y3VyaXR5Ci1tZXRob2RzIGluY2x1ZGluZyBLZXJiZXJvcyBJViwgS2VyYmVyb3MgViwgU1NML1RM UywgYW5kIFNSUCBhbmQgaXQgY2FuIGFsc28KLW1ha2UgU1NIIGNvbm5lY3Rpb25zIHRocm91Z2gg eW91ciBleHRlcm5hbCBTU0ggY2xpZW50IGFwcGxpY2F0aW9uLiBJdCBjYW4KLWJlIHRoZSBmYXJc KGh5ZW5kIGZpbGVcKGh5dHJhbnNmZXIgb3IgY2xpZW50L3NlcnZlciBwYXJ0bmVyIG9mIHlvdXIg ZGVza3RvcAotS2VybWl0IGNsaWVudC4gSXQgY2FuIGFsc28gYWNjZXB0IGluY29taW5nIGRpYWxl ZCBhbmQgbmV0d29yayBjb25uZWN0aW9ucy4KLUl0IGNhbiBldmVuIGJlIGluc3RhbGxlZCBhcyBh biBJbnRlcm5ldCBzZXJ2aWNlIG9uIGl0cyBvd24gc3RhbmRhcmQgVENQCi1zb2NrZXQsIDE2NDkg W1JGQzI4MzksIFJGQzI4NDBdLgotLlBQCi1BbmQgcGVyaGFwcyBtb3N0IGltcG9ydGFudCwgZXZl cnl0aGluZyB5b3UgY2FuIGRvICJieSBoYW5kIiAoaW50ZXJhY3RpdmVseSkKLXdpdGggQ1woaHlL ZXJtaXQsIGNhbiBiZSAic2NyaXB0ZWQiIChhdXRvbWF0ZWQpIHVzaW5nIGl0cyBidWlsdFwoaHlp bgotY3Jvc3NcKGh5cGxhdGZvcm0gdHJhbnNwb3J0XChoeWluZGVwZW5kZW50IHNjcmlwdCBwcm9n cmFtbWluZyBsYW5ndWFnZSwgd2hpY2gKLWhhcHBlbnMgdG8gYmUgaWRlbnRpY2FsIHRvIGl0cyBp bnRlcmFjdGl2ZSBjb21tYW5kIGxhbmd1YWdlLgotLlBQCi1UaGlzIG1hbnVhbCBwYWdlIG9mZmVy cyBhbiBvdmVydmlldyBvZiBDXChoeUtlcm1pdCA5LjAgZm9yIFVuaXggKCJVbml4IiBpcyBhbgot b3BlcmF0aW5nIHN5c3RlbSBmYW1pbHkgdGhhdCBpbmNsdWRlcyBBSVgsIERHL1VYLCBGcmVlQlNE LCBIUFwoaHlVWCwgSVJJWCwKLUxpbnV4LCBNYWMgT1MgWCwgTmV0QlNELCBPcGVuQlNELCBPcGVu IFNlcnZlciwgT3BlbiBVbml4LCBRTlgsIFNvbGFyaXMsCi1TdW5PUywgU3lzdGVtIFYgUjMsIFN5 c3RlbSBWIFI0LCBUcnU2NCBVbml4LCBVbml4d2FyZSwgWGVuaXgsIGFuZCBtYW55Ci1vdGhlcnMp LiBGb3IgdGhvcm91Z2ggY292ZXJhZ2UsIHBsZWFzZSBjb25zdWx0IHRoZSBwdWJsaXNoZWQgQ1wo aHlLZXJtaXQKLW1hbnVhbCBhbmQgc3VwcGxlbWVudHMgKHNlZSBET0NVTUVOVEFUSU9OIGJlbG93 KS4gRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24KLWFib3V0IENcKGh5S2VybWl0LCBLZXJtaXQgc29m dHdhcmUgZm9yIG90aGVyIHBsYXRmb3JtcywgYW5kIEtlcm1pdCBtYW51YWxzLAotdmlzaXQgdGhl IEtlcm1pdCBQcm9qZWN0IHdlYnNpdGU6Ci0uUFAKLSAgaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0LwotLlBQCi1UaGlzIGlzIGEgbG9uZ2VyXChoeXRoYW5cKGh5YXZlcmFnZSBtYW51YWwg cGFnZSwgYW5kIHlldCBpdCBiYXJlbHkgc2NyYXRjaGVzIHRoZQotc3VyZmFjZS4gRG9uJ3QgYmUg ZGF1bnRlZC4gQ1woaHlLZXJtaXQgaXMgYSBsYXJnZSBhbmQgY29tcGxleCBwYWNrYWdlLAotZXZv bHZpbmcgb3ZlciBkZWNhZGVzIG9mIHByYWN0aWNlIGFuZCBleHBlcmllbmNlLCBidXQgdGhhdCBk b2Vzbid0IG1lYW4KLWl0J3MgaGFyZCB0byBsZWFybiBvciB1c2UuIEl0cyBtb3N0IGNvbW1vbmx5 IHVzZWQgZnVuY3Rpb25zIGFyZSBleHBsYWluZWQKLWhlcmUgd2l0aCBwb2ludGVycyB0byBhZGRp dGlvbmFsIGluZm9ybWF0aW9uIGVsc2V3aGVyZS4KLS5TSCBTWU5PUFNJUwotLkIga2VybWl0IFsK LS5JIGZpbGVuYW1lCi0uQiBdIFsKLS5JIG9wdGlvbnMKLS5CIF0gWyB7PSxcLVwtLCt9Ci0uSSB0 ZXh0Ci0uQiBdIF0KLS5QUAotb3I6Ci0uUFAKLS5CIGtlcm1pdCAKLS5JIFVSTAotLlBQCi1JZiB0 aGUgZmlyc3QgY29tbWFuZFwoaHlsaW5lIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIGEgZmlsZSwg aW50ZXJhY3RpdmVcKGh5bW9kZQotY29tbWFuZHMgYXJlIGV4ZWN1dGVkIGZyb20gdGhlIGZpbGUu IFRoZSAnPScgKG9yICJcLVwtIikgYXJndW1lbnQgdGVsbHMKLUtlcm1pdCBub3QgdG8gcGFyc2Ug dGhlIHJlbWFpbmRlciBvZiB0aGUgY29tbWFuZCBsaW5lLCBidXQgdG8gbWFrZSB0aGUKLXdvcmRz IGZvbGxvd2luZyAnPScgYXZhaWxhYmxlIGFzIFxlJTEsIFxlJTIsIC4uLiBcZSU5LiBUaGUgIisi IGFyZ3VtZW50IGlzCi1saWtlICI9IiBidXQgZm9yIHVzZSBpbiAia2VyYmFuZyBzY3JpcHRzIiAo ZXhwbGFpbmVkIGJlbG93KS4gQSBzZWNvbmQKLWNvbW1hbmRcKGh5bGluZSBmb3JtYXQgYWxsb3dz IHRoZSBvbmUgYW5kIG9ubHkgYXJndW1lbnQgdG8gYmUgYSBUZWxuZXQsIEZUUCwKLUhUVFAsIG9y IElLU0QgVVJMLgotLlBQCi1PcmRlciBvZiBleGVjdXRpb246Ci0uVFAKLSAxLgotVGhlIGNvbW1h bmQgZmlsZSAoaWYgYW55KS4KLS5UUAotLm5mCi0gMi4KLVRoZSBpbml0aWFsaXphdGlvbiBmaWxl LCBpZiBhbnksIHVubGVzcyBzdXBwcmVzc2VkIHdpdGggXC1ZLgotLmZpCi0uVFAKLSAzLgotVGhl IGN1c3RvbWl6YXRpb24gZmlsZSAoaWYgaXQgaXMgZXhlY3V0ZWQgYnkgdGhlIGluaXRpYWxpemF0 aW9uIGZpbGUpLgotLlRQCi0gNC4KLVRoZSBjb21tYW5kXChoeWxpbmUgVVJMIChpZiBhbnksIGFu ZCBpZiBzbywgZXhlY3V0aW9uIHN0b3BzIGhlcmUpLgotLlRQCi0gNS4KLUNvbW1hbmRcKGh5bGlu ZSBvcHRpb25zIChpZiBhbnkpLgotLlRQCi0gNi4KLUludGVyYWN0aXZlIGNvbW1hbmRzLgotLlBQ Ci1Tb21lIGNvbW1hbmRcKGh5bGluZSBvcHRpb25zIGNhbiBjYXVzZSBhY3Rpb25zIChzdWNoIGFz IFwtcyB0byBzZW5kIGEgZmlsZSk7Ci1vdGhlcnMganVzdCBzZXQgcGFyYW1ldGVycy4gSWYgYW55 IGFjdGlvbiBvcHRpb25zIGFyZSBpbmNsdWRlZCBvbiB0aGUKLWNvbW1hbmQgbGluZSwgS2VybWl0 IGV4aXRzIHdoZW4gZmluaXNoZWQgdW5sZXNzIGFsc28gZ2l2ZW4gdGhlIFwtUyAoInN0YXkiKQot b3B0aW9uLiBJZiBubyBhY3Rpb24gb3B0aW9ucyBhcmUgZ2l2ZW4sIG5vIGluaXRpYWxpemF0aW9u IG9yIGNvbW1hbmQgZmlsZXMKLWNvbnRhaW5lZCBhbiBFWElUIG9yIFFVSVQgY29tbWFuZCwgYW5k IG5vIGZhdGFsIGVycm9ycyBvY2N1cnJlZCwgS2VybWl0Ci1pc3N1ZXMgaXRzIHByb21wdCBhbmQg d2FpdHMgZm9yIHlvdSB0byB0eXBlIGNvbW1hbmRzLgotLklQCi1CZWFyIGluIG1pbmQgdGhhdCBD XChoeUtlcm1pdCBjYW4gYmUgYnVpbHQgd2l0aCBzZWxlY3RlZCBmZWF0dXJlcwotZGlzYWJsZWQs IGFuZCBhbHNvIHRoYXQgY2VydGFpbiBmZWF0dXJlcyBhcmUgbm90IGF2YWlsYWJsZSBvbiBhbGwK LXBsYXRmb3Jtcy4gRm9yIGV4YW1wbGUsIENcKGh5S2VybWl0IGNhbid0IGJlIGJ1aWx0IHdpdGgg VENQL0lQCi1zdXBwb3J0IG9uIGEgcGxhdGZvcm0gdGhhdCBkb2VzIG5vdCBoYXZlIFRDUC9JUCBo ZWFkZXIgZmlsZXMgYW5kCi1saWJyYXJpZXMgKGFuZCBldmVuIGlmIEtlcm1pdCBkb2VzIGluY2x1 ZGUgVENQL0lQIHN1cHBvcnQsIGl0Ci1jYW4ndCBiZSB1c2VkIHRvIG1ha2UgVENQL0lQIGNvbm5l Y3Rpb25zIG9uIGEgY29tcHV0ZXIgdGhhdCBkb2VzCi1ub3QgaGF2ZSBhIFRDUC9JUCBzdGFjayBp bnN0YWxsZWQpLiBJZiB5b3VyIHZlcnNpb24gb2YgCi1DXChoeUtlcm1pdCBsYWNrcyBhIGZlYXR1 cmUgbWVudGlvbmVkIGhlcmUsIHVzZSBpdHMgU0hPVyBGRUFUVVJFUyBjb21tYW5kIHRvCi1zZWUg d2hhdCBtaWdodCBoYXZlIGJlZW4gZXhjbHVkZWQuCi0uUFAKLUNcKGh5S2VybWl0IGhhcyB0aHJl ZSBraW5kcyBvZiBjb21tYW5kczogcmVndWxhciBzaW5nbGVcKGh5bGV0dGVyIGNvbW1hbmRcKGh5 bGluZQotb3B0aW9ucywgZXh0ZW5kZWRcKGh5Zm9ybWF0IGNvbW1hbmRcKGh5bGluZSBvcHRpb25z LCBhbmQgaW50ZXJhY3RpdmUgY29tbWFuZHMuCi0uUFAKLUxpa2UgbW9zdCBVbml4IGNvbW1hbmRz LCBDXChoeUtlcm1pdCBjYW4gYmUgYmUgZ2l2ZW4gb3B0aW9ucyBvbiB0aGUgY29tbWFuZAotbGlu ZS4gQnV0IENcKGh5S2VybWl0IGFsc28gY2FuIGJlIHVzZWQgaW50ZXJhY3RpdmVseSBieSBnaXZp bmcgaXQgY29tbWFuZHMKLWNvbXBvc2VkIG9mIHdvcmRzLCB3aGljaCBhcmUgbW9yZSBpbnR1aXRp dmUgdGhhbiBjcnlwdGljIGNvbW1hbmRcKGh5bGluZQotb3B0aW9ucywgYW5kIG1vcmUgZmxleGli bGUgdG9vLiBJbiBvdGhlciB3b3JkcywgeW91IGRvbid0IGhhdmUgdG8gdXNlCi1DXChoeUtlcm1p dCdzIGNvbW1hbmRcKGh5bGluZSBvcHRpb25zLCBidXQgdGhleSBhcmUgYXZhaWxhYmxlIGlmIHlv dSB3YW50IHRvLiAoQnkKLXRoZSBzYW1lIHRva2VuLCB5b3UgZG9uJ3QgaGF2ZSB0byB1c2UgaXRz IGludGVyYWN0aXZlIGNvbW1hbmRzIGVpdGhlciBcKGh5XChoeQoteW91IGNhbiB1c2UgZWl0aGVy IG9yIGJvdGggaW4gYW55IGNvbWJpbmF0aW9uLikKLS5QUAotQ1woaHlLZXJtaXQgaXMgZ2VuZXJh bGx5IGluc3RhbGxlZCBpbiB0aGUgUEFUSCBhcyAia2VybWl0IiwgYW5kIHRoZXJlZm9yZSBpcwot aW52b2tlZCBieSB0eXBpbmcgdGhlIHdvcmQgImtlcm1pdCIgKGxvd2VyY2FzZSkgYXQgdGhlIHNo ZWxsIHByb21wdCwgYW5kCi10aGVuIHByZXNzaW5nIHRoZSBSZXR1cm4gb3IgRW50ZXIga2V5LiBJ ZiB5b3Ugd2lzaCB0byBpbmNsdWRlIGNvbW1hbmRcKGh5bGluZQotb3B0aW9ucywgcHV0IHRoZW0g YWZ0ZXIgdGhlIHdvcmQgImtlcm1pdCIgYnV0IGJlZm9yZSBwcmVzc2luZyBSZXR1cm4gb3IKLUVu dGVyLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLCBmb3IgZXhhbXBsZToKLS5QUAotICAkIGtlcm1pdCBc LXMgY2tlcm1pdC50YXIuZ3oKLS5QUAotKCckJyBpcyB0aGUgc2hlbGwgcHJvbXB0OyAia2VybWl0 IFwtcyBja2VybWl0LnRhci5neiIgaXMgd2hhdCB5b3UgdHlwZSwKLWZvbGxvd2VkIGJ5IFJldHVy biBvciBFbnRlci4pCi0uU0ggT1BUSU9OUwotSGVyZSBpcyBhIGxpc3Qgb2YgQ1woaHlLZXJtaXQn cyBzaW5nbGVcKGh5bGV0dGVyIGNvbW1hbmRcKGh5bGluZSBvcHRpb25zLCB3aGljaAotc3RhcnQg d2l0aCBhIHNpbmdsZSBkYXNoIChcLSksIGluIEFTQ0lJICgiYWxwaGFiZXRpY2FsIikgb3JkZXIu IEFscGhhYmV0aWMKLWNhc2UgaXMgc2lnbmlmaWNhbnQgKFwtQSBpcyBub3QgdGhlIHNhbWUgYXMg XC1hKS4gIEFjdGlvbiBvcHRpb25zIGFyZSAKLXRhZ2dlZCAiQUNUSU9OIi4KLS5UUAotXC0wCi0o ZGlnaXQgemVybykgIDEwMCUgdHJhbnNwYXJlbnQgQ29ubmVjdCBzdGF0ZSBmb3IKLSJpblwoaHl0 aGVcKGh5bWlkZGxlIiBvcGVyYXRpb246IDggYml0cywgbm8gcGFyaXR5LCBubwotZXNjYXBlIGNo YXJhY3RlciwgZXZlcnl0aGluZyBwYXNzZXMgdGhyb3VnaC4KLS5UUAotXC04Ci0oZGlnaXQgZWln aHQpICBDb25uZWN0aW9uIGlzIDhcKGh5Yml0IGNsZWFuICh0aGlzIGlzIHRoZQotZGVmYXVsdCBp biBDXChoeUtlcm1pdCA4LjAgYW5kIGxhdGVyKS4gRXF1aXZhbGVudCB0byB0aGUgRUlHSFRCSVQK LWNvbW1hbmQsIHdoaWNoIGluIHR1cm4gaXMgYSBzaG9ydGN1dCBmb3IgU0VUIFRFUk1JTkFMCi1C WVRFU0laRSA4LCBTRVQgQ09NTUFORCBCWVRFU0laRSA4LCBTRVQgUEFSSVRZIE5PTkUuCi0uVFAK LVwtOSBhcmcKLShkaWdpdCBuaW5lKSAgTWFrZSBhIGNvbm5lY3Rpb24gdG8gYW4gRlRQIHNlcnZl ci4KLUVxdWl2YWxlbnQgdG8gdGhlIEZUUCBPUEVOIGNvbW1hbmQuCi1Bcmd1bWVudDogSVBcKGh5 YWRkcmVzc1woaHlvclwoaHlob3N0bmFtZVs6b3B0aW9uYWxcKGh5VENQXChoeXBvcnRdLgotTk9U RTogQ1woaHlLZXJtaXQgYWxzbyBoYXMgYSBzZXBhcmF0ZSBGVFAgY29tbWFuZFwoaHlsaW5lCi1w ZXJzb25hbGl0eSwgd2l0aCByZWd1bGFyIEZUUFwoaHlsaWtlIGNvbW1hbmRcKGh5bGluZQotc3lu dGF4LiBNb3JlIGFib3V0IHRoaXMgYmVsb3cuCi0uVFAKLVwtQQotS2VybWl0IGlzIHRvIGJlIHN0 YXJ0ZWQgYXMgYW4gSW50ZXJuZXQgc2VydmljZSAoSUtTRCkKLShvbmx5IGZyb20gaW5ldGQuY29u ZikuCi0uVFAKLVwtQgotS2VybWl0IGlzIHJ1bm5pbmcgaW4gQmF0Y2ggb3IgQmFja2dyb3VuZCAo bm8KLWNvbnRyb2xsaW5nIHRlcm1pbmFsKS4gVG8gYmUgdXNlZCBpbiBjYXNlIEtlcm1pdAotZG9l c24ndCBhdXRvbWF0aWNhbGx5IHNlbnNlIGl0cyBiYWNrZ3JvdW5kIHN0YXR1cy4KLUVxdWl2YWxl bnQgdG8gdGhlIFNFVCBCQUNLR1JPVU5EIE9OIGNvbW1hbmQuCi0uVFAKLVwtQyBhcmcKLUludGVy YWN0aXZlXChoeW1vZGUgQ29tbWFuZHMgdG8gYmUgZXhlY3V0ZWQuCi1Bcmd1bWVudDogQ29tbWFu ZHMgc2VwYXJhdGVkIGJ5IGNvbW1hcywgbGlzdCBpbgotZG91YmxlcXVvdGVzLgotLlRQCi1cLUQg YXJnCi1EZWxheSBiZWZvcmUgc3RhcnRpbmcgdG8gc2VuZCBpbiBSZW1vdGUgbW9kZS4KLUVxdWl2 YWxlbnQgdG8gdGhlIFNFVCBERUxBWSBjb21tYW5kLgotQXJndW1lbnQ6IE51bWJlciBvZiBzZWNv bmRzLgotLlRQCi1cLUUKLUV4aXQgYXV0b21hdGljYWxseSB3aGVuIGNvbm5lY3Rpb24gY2xvc2Vz LiBFcXVpdmFsZW50Ci10byBTRVQgRVhJVCBPTlwtRElTQ09OTkVDVCBPTi4KLS5UUAotXC1GIGFy ZwotVXNlIGFuIG9wZW4gVENQIGNvbm5lY3Rpb24uCi1Bcmd1bWVudDogTnVtZXJpYyBmaWxlIGRl c2NyaXB0b3Igb2Ygb3BlbiBUQ1AKLWNvbm5lY3Rpb24uCi1BbHNvIHNlZTogXC1qLCBcLUouCi0u VFAKLVwtRyBhcmcKLShBQ1RJT04pIEdldCBmaWxlKHMpIGZyb20gc2VydmVyLCBzZW5kIGNvbnRl bnRzIHRvIHN0YW5kYXJkCi1vdXRwdXQsIHdoaWNoIG5vcm1hbGx5IHdvdWxkIGJlIHBpcGVkIHRv IGFub3RoZXIKLXByb2Nlc3MuCi1Bcmd1bWVudDogUmVtb3RlIGZpbGUgc3BlY2lmaWNhdGlvbiwg aW4gcXVvdGVzIGlmIGl0Ci1jb250YWlucyBtZXRhY2hhcmFjdGVycy4KLUFsc28gc2VlOiBcLWcs IFwtay4KLS5UUAotXC1ICi1TdXBwcmVzcyBwcm9ncmFtIHN0YXJ0dXAgSGVyYWxkIGFuZCBncmVl dGluZy4KLS5UUAotXC1JCi1UZWxsIEtlcm1pdCBpdCBoYXMgYSByZWxpYWJsZSBjb25uZWN0aW9u LCB0byBmb3JjZSBzdHJlYW1pbmcgdG8gYmUgdXNlZCB3aGVyZQotaXQgbm9ybWFsbHkgd291bGQg bm90IGJlLiAgRXF1aXZhbGVudCB0byB0aGUgU0VUIFJFTElBQkxFIE9OIGNvbW1hbmQuCi0uVFAK LVwtSiBhcmcKLShBQ1RJT04pICJCZSBsaWtlIFRlbG5ldC4iIExpa2UgXC1qIGJ1dCBpbXBsaWVz IFwtRS4gIEFyZ3VtZW50OiBJUAotaG9zdG5hbWUvYWRkcmVzcyBvcHRpb25hbGx5IGZvbGxvd2Vk IGJ5IHNlcnZpY2UuICBOT1RFOiBDXChoeUtlcm1pdCBhbHNvIGhhcyBhCi1zZXBhcmF0ZSBUZWxu ZXQgY29tbWFuZFwoaHlsaW5lIHBlcnNvbmFsaXR5LCB3aXRoIHJlZ3VsYXIgVGVsbmV0XChoeWxp a2UKLWNvbW1hbmRcKGh5bGluZSBzeW50YXguIE1vcmUgYWJvdXQgdGhpcyBiZWxvdy4KLS5UUAot XC1MCi1SZWN1cnNpdmUgZGlyZWN0b3J5IGRlc2NlbnQgZm9yIGZpbGVzIGluIFwtcyBvcHRpb24u Ci0uVFAKLVwtTSBhcmcKLU15IHVzZXIgbmFtZSAoZm9yIHVzZSB3aXRoIFRlbG5ldCwgUmxvZ2lu LCBGVFAsIGV0YykuCi1FcXVpdmFsZW50IHRvIHRoZSBTRVQgTE9HSU4gVVNFUiBjb21tYW5kLgot QXJndW1lbnQ6IFVzZXJuYW1lIHN0cmluZy4KLS5UUAotXC1PCi0oQUNUSU9OKSAoVXBwZXJjYXNl IGxldHRlciBPKSBCZSBhIHNlcnZlciBmb3IgT25lIGNvbW1hbmQgb25seS4KLUFsc28gc2VlOiBc LXguCi0uVFAKLVwtUAotRG9uJ3QgY29udmVydCBmaWxlIChQYXRoKSBuYW1lcyBvZiB0cmFuc2Zl cnJlZCBmaWxlcy4KLUVxdWl2YWxlbnQgdG8gU0VUIEZJTEUgTkFNRVMgTElURVJBTC4KLS5UUAot XC1RCi1RdWljayBLZXJtaXQgcHJvdG9jb2wgc2V0dGluZ3MuIEVxdWl2YWxlbnQgdG8gdGhlIEZB U1QKLWNvbW1hbmQuIFRoaXMgaXMgdGhlIGRlZmF1bHQgaW4gQ1woaHlLZXJtaXQgNy4wIGFuZCBs YXRlci4KLS5UUAotXC1SCi1SZW1vdGVcKGh5b25seSAodGhpcyBqdXN0IG1ha2VzIElGIFJFTU9U RSB0cnVlKS4KLS5UUAotXC1TCi1TdGF5IChlbnRlciBjb21tYW5kIHBhcnNlciBhZnRlciBhY3Rp b24gb3B0aW9ucykuCi0uVFAKLVwtVAotRm9yY2UgVGV4dCBtb2RlIGZvciBmaWxlIHRyYW5zZmVy OyBpbXBsaWVzIFwtVi4KLUVxdWl2YWxlbnQgdG8gU0VUIFRSQU5TRkVSIE1PREUgTUFOVUFMLCBT RVQgRklMRSBUWVBFIFRFWFQuCi0uVFAKLVwtVgotRGlzYWJsZSBhdXRvbWF0aWMgcGVyXChoeWZp bGUgdGV4dC9iaW5hcnkgc3dpdGNoaW5nLgotRXF1aXZhbGVudCB0byBTRVQgVFJBTlNGRVIgTU9E RSBNQU5VQUwuCi0uVFAKLVwtWQotU2tpcCAoZG9uJ3QgZXhlY3V0ZSkgdGhlIGluaXRpYWxpemF0 aW9uIGZpbGUuCi0uVFAKLVwtYSBhcmcKLUFzXChoeW5hbWUgZm9yIGZpbGUocykgaW4gXC1zLCBc LXIsIG9yIFwtZy4KLUFyZ3VtZW50OiBBc1woaHluYW1lIHN0cmluZyAoYWx0ZXJuYXRpdmUgZmls ZW5hbWUpLiBXaGVuCi1yZWNlaXZpbmcgZmlsZXMsIHRoaXMgY2FuIGJlIGEgZGlyZWN0b3J5IG5h bWUuCi0uVFAKLVwtYiBhcmcKLVNwZWVkIGZvciBzZXJpYWwgZGV2aWNlLiBFcXVpdmFsZW50IHRv IFNFVCBTUEVFRC4KLUFyZ3VtZW50OiBOdW1lcmljIEJpdHMgcGVyIHNlY29uZCBmb3Igc2VyaWFs Ci1jb25uZWN0aW9ucy4KLS5UUAotXC1jCi0oQUNUSU9OKSBFbnRlciBDb25uZWN0IHN0YXRlIGJl Zm9yZSB0cmFuc2ZlcnJpbmcgZmlsZXMuCi0uVFAKLVwtZAotQ3JlYXRlIGEgZGVidWcubG9nIGZp bGUgd2l0aCBkZXRhaWxlZCBkZWJ1Z2dpbmcKLWluZm9ybWF0aW9uIChhIHNlY29uZCBcLWQgYWRk cyB0aW1lc3RhbXBzKS4gRXF1aXZhbGVudAotdG8gTE9HIERFQlVHIGJ1dCB0YWtlcyBlZmZlY3Qg c29vbmVyLgotLlRQCi1cLWUgYXJnCi1NYXhpbXVtIGxlbmd0aCBmb3IgaW5jb21pbmcgS2VybWl0 IGZpbGVcKGh5dHJhbnNmZXIKLXBhY2tldHMuIEVxdWl2YWxlbnQgdG8gU0VUIFJFQ0VJVkUgUEFD S0VUXC1MRU5HVEguCi1Bcmd1bWVudDogTGVuZ3RoIGluIGJ5dGVzLgotLlRQCi1cLWYKLShBQ1RJ T04pIFNlbmQgYSBGSU5JU0ggY29tbWFuZCB0byBhIEtlcm1pdCBzZXJ2ZXIuCi0uVFAKLVwtZyBh cmcKLUdldCBmaWxlKHMpIGZyb20gYSBLZXJtaXQgc2VydmVyLgotQXJndW1lbnQ6IEZpbGUgc3Bl Y2lmaWNhdGlvbiBvbiBvdGhlciBjb21wdXRlciwgaW4KLXF1b3RlcyBpZiBpdCBjb250YWlucyBt ZXRhY2hhcmFjdGVycy4gRXF1aXZhbGVudCB0bwotR0VULiBBbHNvIHNlZTogXC1hLCBcLUcsIFwt ci4KLS5UUAotXC1oCi0oQUNUSU9OKSBQcmludCBIZWxwIHRleHQgZm9yIHNpbmdsZVwoaHlsZXR0 ZXIgY29tbWFuZFwoaHlsaW5lIG9wdGlvbnMKLShwaXBlIHRocnUgJ21vcmUnIHRvIHByZXZlbnQg c2Nyb2xsaW5nKS4KLS5UUAotXC1pCi1Gb3JjZSBiaW5hcnkgKEltYWdlKSBtb2RlIGZvciBmaWxl IHRyYW5zZmVyOyBpbXBsaWVzCi1cLVYuIEVxdWl2YWxlbnQgdG8gU0VUIFRSQU5TRkVSIE1PREUg TUFOVUFMLCBTRVQgRklMRQotVFlQRSBCSU5BUlkuCi0uVFAKLVwtaiBhcmcKLU1ha2UgYSBUQ1Av SVAgY29ubmVjdGlvbi4KLUFyZ3VtZW50OiBJUCBob3N0IG5hbWUvYWRkcmVzcyBhbmQgb3B0aW9u YWwgc2VydmljZQotbmFtZSBvciBudW1iZXIuIEVxdWl2YWxlbnQgdG8gdGhlIFRFTE5FVCBjb21t YW5kLgotQWxzbyBzZWU6IFwtSiwgXC1GLgotLlRQCi1cLWsKLShBQ1RJT04pIFJlY2VpdmUgZmls ZShzKSB0byBzdGFuZGFyZCBvdXRwdXQsIHdoaWNoIG5vcm1hbGx5IAotd291bGQgYmUgcGlwZWQg dG8gYW5vdGhlciBwcm9jZXNzLgotQWxzbyBzZWU6IFwtciwgXC1HLgotLlRQCi1cLWwgYXJnCi0o TG93ZXJjYXNlIGxldHRlciBMKSBNYWtlIGEgY29ubmVjdGlvbiBvbiB0aGUgZ2l2ZW4KLXNlcmlh bCBjb21tdW5pY2F0aW9ucyBkZXZpY2UuIEVxdWl2YWxlbnQgdG8gdGhlIFNFVAotTElORSAoU0VU IFBPUlQpIGNvbW1hbmQuCi1Bcmd1bWVudDogU2VyaWFsIGRldmljZSBuYW1lLCBlLmcuIC9kZXYv dHR5UzAuCi0uVFAKLVwtbSBhcmcKLU1vZGVtIHR5cGUgZm9yIHVzZSB3aXRoIHRoZSBcLWwgZGV2 aWNlLiBFcXVpdmFsZW50IHRvCi10aGUgU0VUIE1PREVNIFRZUEUgY29tbWFuZC4KLUFyZ3VtZW50 OiBNb2RlbSBuYW1lIGFzIGluIFNFVCBNT0RFTSBUWVBFIGNvbW1hbmQsCi1lLmcuICJ1c3JvYm90 aWNzIi4KLS5UUAotXC1uCi0oQUNUSU9OKSBFbnRlciBDb25uZWN0IHN0YXRlIGFmdGVyIHRyYW5z ZmVycmluZyBmaWxlcyAoaGlzdG9yaWNhbCkuCi0uVFAKLVwtcCBhcmcKLVBhcml0eS4gRXF1aXZh bGVudCB0byB0aGUgU0VUIFBBUklUWSBjb21tYW5kLgotQXJndW1lbnQ6IE9uZSBvZiB0aGUgZm9s bG93aW5nOiBlKHZlbiksIG8oZGQpLCBtKGFyayksCi1uKG9uZSksIHMocGFjZSkuCi0uVFAKLVwt cQotUXVpZXQgKHN1cHByZXNzIG1vc3QgbWVzc2FnZXMpLiBFcXVpdmFsZW50IHRvIFNFVCBRVUlF VCBPTi4KLS5UUAotXC1yCi0oQUNUSU9OKSBSZWNlaXZlIGZpbGUocykuIEVxdWl2YWxlbnQgdG8g dGhlIFJFQ0VJVkUgY29tbWFuZC4KLUFyZ3VtZW50OiAobm9uZSwgYnV0IHNlZSBcLWEpCi0uVFAK LVwtcyBhcmcKLVNlbmQgZmlsZShzKS4KLUFyZ3VtZW50OiBPbmUgb3IgbW9yZSBsb2NhbCBmaWxl IHNwZWNpZmljYXRpb25zLgotRXF1aXZhbGVudCB0byB0aGUgU0VORCBjb21tYW5kLgotQWxzbyBz ZWU6IFwtYS4KLS5UUAotXC10Ci0oSGlzdG9yaWNhbCkgWG9uIChDdHJsXC1RKSBUdXJuYXJvdW5k IGNoYXJhY3RlciBmb3IKLWhhbGZcKGh5ZHVwbGV4IGNvbm5lY3Rpb25zICh1c2VkIG9uIHNlcmlh bCBsaW5lbW9kZQotY29ubmVjdGlvbnMgdG8gb2xkIG1haW5mcmFtZXMpLiBFcXVpdmFsZW50IHRv IFNFVAotRFVQTEVYIEhBTEYsIFNFVCBIQU5EU0hBS0UgWE9OLgotLlRQCi1cLXYgYXJnCi1XaW5k b3cgc2l6ZSBmb3IgS2VybWl0IHByb3RvY29sIChpZ25vcmVkIHdoZW4KLXN0cmVhbWluZykuIEVx dWl2YWxhbmV0IHRvIFNFVCBXSU5ET1dcLVNJWkUuCi1Bcmd1bWVudDogTnVtYmVyLCAxIHRvIDMy LgotLlRQCi1cLXcKLUluY29taW5nIGZpbGVzIFdyaXRlIG92ZXIgZXhpc3RpbmcgZmlsZXMuIEVx dWl2YWxlbnQKLXRvIFNFVCBGSUxFIENPTExJU0lPTiBPVkVSV1JJVEUuCi0uVFAKLVwteAotKEFD VElPTikgRW50ZXIgc2VydmVyIG1vZGUuIEVxdWl2YWxlbnQgdG8gdGhlIFNFUlZFUiBjb21tYW5k LgotQWxzbyBzZWU6IFwtTy4KLS5UUAotXC15IGFyZwotQWx0ZXJuYXRpdmUgaW5pdGlhbGl6YXRp b24gZmlsZS4KLUFyZ3VtZW50OiBGaWxlbmFtZS4KLS5UUAotXC16Ci1Gb3JjZSBmb3JlZ3JvdW5k IGJlaGF2aW9yLiBUbyBiZSB1c2VkIGluIGNhc2UgS2VybWl0Ci1kb2Vzbid0IGF1dG9tYXRpY2Fs bHkgc2Vuc2UgaXRzIGZvcmVncm91bmQgc3RhdHVzLgotRXF1aXZhbGVudCB0byB0aGUgU0VUIEJB Q0tHUk9VTkQgT0ZGIGNvbW1hbmQuCi0uUFAKLUV4dGVuZGVkIGNvbW1hbmRcKGh5bGluZSBvcHRp b25zIChuZWNlc3NhcnkgYmVjYXVzZSBzaW5nbGVcKGh5bGV0dGVyIG9uZXMgYXJlCi1hYm91dCB1 c2VkIHVwKSBzdGFydCB3aXRoIHR3byBkYXNoZXMgKFwtXC0pLCB3aXRoIHdvcmRzIHJhdGhlciB0 aGFuIHNpbmdsZQotbGV0dGVycyBhcyBvcHRpb24gbmFtZXMuIElmIGFuIGV4dGVuZGVkIG9wdGlv biB0YWtlcyBhbiBhcmd1bWVudCwgaXQgaXMKLXNlcGFyYXRlZCBmcm9tIHRoZSBvcHRpb24gd29y ZCBieSBhIGNvbG9uICg6KS4gRXh0ZW5kZWQgb3B0aW9ucyBpbmNsdWRlOgotCi0uVFAKLSBcLVwt YmFubmVyZmlsZTpmaWxlbmFtZQotRmlsZSB0byBkaXNwbGF5IHVwb24gc3RhcnR1cCBvciBJS1NE IGxvZ2luLgotLlRQCi0gXC1cLWNkZmlsZTpmaWxlbmFtZQotRmlsZSB0byBiZSBzZW50IGZvciBk aXNwbGF5IHRvIHRoZSBjbGllbnQgd2hlbgotc2VydmVyIGNoYW5nZXMgZGlyZWN0b3J5IChmaWxl bmFtZSBpcyByZWxhdGl2ZSB0bwotdGhlIGNoYW5nZWRcKGh5dG8gZGlyZWN0b3J5KS4KLS5UUAot IFwtXC1jZG1lc3NhZ2U6e29uLG9mZn0KLUVuYWJsZS9kaXNhYmxlIHRoZSBzZXJ2ZXIgQ0QgbWVz c2FnZSBmZWF0dXJlLgotLlRQCi0gXC1cLWhlbHAKLVByaW50cyB1c2FnZSBtZXNzYWdlIGZvciBl eHRlbmRlZCBvcHRpb25zLgotLlRQCi0gXC1cLWhlbHBmaWxlOmZpbGVuYW1lCi1EZXNpZ25hdGVz IGEgZmlsZSBjb250YWluaW5nIGN1c3RvbSB0ZXh0IHRvCi1yZXBsYWNlIHRoZSB0b3BcKGh5bGV2 ZWwgSEVMUCBjb21tYW5kLgotLlRQCi0gXC1cLW5vaW50ZXJydXB0cwotRGlzYWJsZXMga2V5Ym9h cmQgaW50ZXJydXB0cy4KLS5UUAotIFwtXC1ub3Blcm1zCi1EaXNhYmxlcyB0aGUgS2VybWl0IHBy b3RvY29sIGZpbGUgUGVybWlzc2lvbnMKLWF0dHJpYnV0ZSwgdG8gcHJldmVudCB0cmFuc21pc3Np b24gb2YgZmlsZQotcGVybWlzc2lvbnMgKHByb3RlY3Rpb24pIGZyb20gc2VuZGVyIHRvIHJlY2Vp dmVyLgotLlRQCi0gXC1cLXZlcnNpb24KLShBQ1RJT04pIENcKGh5S2VybWl0IHByaW50cyBpdHMg dmVyc2lvbiBudW1iZXIuCi0uUFAKLVBsdXMgc2V2ZXJhbCBvdGhlciBJS1NEXChoeU9ubHkgb3B0 aW9ucyBkZXNjcmliZWQgYXQ6Ci0uUFAKLSAgaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2lrc2QuaHRtbAotLlBQCi1TZWUgdGhlIGZpbGVcKGh5dHJhbnNmZXIgc2VjdGlvbiBmb3IgZXhh bXBsZXMgb2YgY29tbWFuZFwoaHlsaW5lIGludm9jYXRpb24uCi0uU0ggQ09NTUFORCBMQU5HVUFH RQotQ1woaHlLZXJtaXQncyBpbnRlcmFjdGl2ZSBjb21tYW5kIGxhbmd1YWdlIGlzIHRoZSBzdWJq ZWN0IG9mIGEgNjIyXChoeXBhZ2UgYm9vawotYW5kIGFub3RoZXIgc2V2ZXJhbCBodW5kcmVkIHBh Z2VzIG9mIHVwZGF0ZXMsIGZhciB0b28gbXVjaCBmb3IgYSBtYW51YWwKLXBhZ2UuIEJ1dCBpdCdz IG5vdCBoYXJkIHRvIGdldCBzdGFydGVkLiBBdCB0aGUgc2hlbGwgcHJvbXB0LCBqdXN0IHR5cGUK LSJrZXJtaXQiIHRvIGdldCBDXChoeUtlcm1pdCdzIGludGVyYWN0aXZlIGNvbW1hbmQgcHJvbXB0 OgotLlBQCi0ubmYKLSAgJCBrZXJtaXQKLSAgKC9jdXJyZW50L2RpcmVjdG9yeSkgQ1wtS2VybWl0 PgotLmZpCi0uUFAKLUJlZ2luIGJ5IHR5cGluZyAiaGVscCIgKGFuZCB0aGVuIHByZXNzIHRoZSBS ZXR1cm4gb3IgRW50ZXIga2V5KSBmb3IgYQotdG9wXChoeWxldmVsIG92ZXJ2aWV3LCByZWFkIGl0 LCBhbmQgZ28gZnJvbSB0aGVyZS4gWW91ciBzZWNvbmQgY29tbWFuZCBzaG91bGQKLXByb2JhYmx5 IGJlICJpbnRybyIgKGludHJvZHVjdGlvbikuIE5vdGUgdGhlIHByb21wdCBzaG93cyB5b3VyIGN1 cnJlbnQKLWRpcmVjdG9yeSAodW5sZXNzIHlvdSB0ZWxsIEtlcm1pdCB0byBwcm9tcHQgeW91IHdp dGggc29tZXRoaW5nIGVsc2UpLgotLlBQCi1JbnRlcmFjdGl2ZSBjb21tYW5kcyBhcmUgY29tcG9z ZWQgbWFpbmx5IG9mIHJlZ3VsYXIgRW5nbGlzaCB3b3JkcywgdXN1YWxseQotaW4gdGhlIGZvcm0g b2YgaW1wZXJhdGl2ZSBzZW50ZW5jZXMsIHN1Y2ggYXM6Ci0uUFAKLSAgc2VuZCBvb2ZhLnR4dAot LlBQCi13aGljaCB0ZWxscyBLZXJtaXQgdG8gc2VuZCAodHJhbnNmZXIpIHRoZSBmaWxlIHdob3Nl IG5hbWUgaXMgb29mYS50eHQsIG9yOgotLlBQCi0gIHNldCB0cmFuc2ZlciBtb2RlIGF1dG9tYXRp YwotLlBQCi13aGljaCBzZXRzIEtlcm1pdCdzICJ0cmFuc2ZlciBtb2RlIiB0byAiYXV0b21hdGlj IiAod2hhdGV2ZXIgdGhhdCBtZWFucykuCi0uUFAKLVdoaWxlIHR5cGluZyBjb21tYW5kcywgeW91 IGNhbiBhYmJyZXZpYXRlLCBhc2sgZm9yIGhlbHAgKGJ5IHByZXNzaW5nIHRoZQotIj8iIGtleSBh bnl3aGVyZSBpbiBhIGNvbW1hbmQpLCBjb21wbGV0ZSBrZXl3b3JkcyBvciBmaWxlbmFtZXMgKHdp dGggdGhlCi1UYWIgb3IgRXNjIGtleSksIGFuZCBlZGl0IHlvdXIgdHlwaW5nIHdpdGggQmFja3Nw YWNlIG9yIERlbGV0ZSwgQ3RybFwtVywKLUN0cmxcLVUsIGV0Yy4gWW91IGNhbiBhbHNvIHJlY2Fs bCBwcmV2aW91cyBjb21tYW5kcywgc2F2ZSB5b3VyIGNvbW1hbmQKLWhpc3RvcnksIGFuZCB3aG8g a25vd3Mgd2hhdCBlbHNlLiBHaXZlIHRoZSBJTlRSTyBjb21tYW5kIGZvciBkZXRhaWxzLgotLlBQ Ci1DXChoeUtlcm1pdCBoYXMgaHVuZHJlZHMgb2YgY29tbWFuZHMsIGFuZCB0aGV5IGNhbiBiZSBp c3N1ZWQgaW4gaW5maW5pdGUKLXZhcmlldHkgYW5kIGNvbWJpbmF0aW9ucywgaW5jbHVkaW5nIGNv bW1hbmRzIGZvcjoKLS5uZgotLlBQCi1cKGJ1CU1ha2luZyBjb25uZWN0aW9ucyAoU0VUIExJTkUs IERJQUwsIFRFTE5FVCwgU1NILCBGVFAsIC4uLikKLS5icgotXChidQlCcmVha2luZyBjb25uZWN0 aW9ucyAoSEFOR1VQLCBDTE9TRSkKLS5icgotXChidQlUcmFuc2ZlcnJpbmcgZmlsZXMgKFNFTkQs IEdFVCwgUkVDRUlWRSwgTU9WRSwgUkVTRU5ELCAuLi4pCi0uYnIKLVwoYnUJRXN0YWJsaXNoaW5n IHByZWZlcmVuY2VzIChTRVQpCi0uYnIKLVwoYnUJRGlzcGxheWluZyBwcmVmZXJlbmNlcyAoU0hP VykKLS5icgotXChidQlNYW5hZ2luZyBsb2NhbCBmaWxlcyAoQ0QsIERFTEVURSwgTUtESVIsIERJ UiwgUkVOQU1FLCBUWVBFLCAuLi4pCi0uYnIKLVwoYnUJTWFuYWdpbmcgcmVtb3RlIGZpbGVzIChS Q0QsIFJERUwsIFJNS0RJUiwgUkRJUiwgLi4uKQotLmJyCi1cKGJ1CVVzaW5nIGxvY2FsIGZpbGVz IChGT1BFTiwgRkNMT1NFLCBGUkVBRCwgRldSSVRFKQotLmJyCi1cKGJ1CVByb2dyYW1taW5nIChU QUtFLCBERUZJTkUsIElGLCBGT1IsIFdISUxFLCBTV0lUQ0gsIERFQ0xBUkUsIC4uLikKLS5icgot XChidQlJbnRlcmFjdGluZyB3aXRoIHRoZSB1c2VyIChFQ0hPLCBBU0ssIC4uLikKLS5icgotXChi dQlJbnRlcmFjdGluZyB3aXRoIGEgcmVtb3RlIGNvbXB1dGVyIChJTlBVVCwgT1VUUFVULCAuLi4p Ci0uYnIKLVwoYnUJSW50ZXJhY3Rpbmcgd2l0aCBsb2NhbCBwcm9ncmFtcyAoUlVOLCBFWEVDLCBQ VFksIC4uLikKLS5icgotXChidQlMb2dnaW5nIHRoaW5ncyAoTE9HIFNFU1NJT04sIExPRyBQQUNL RVRTLCBMT0cgREVCVUcsIC4uLikKLS5QUAotLmZpCi1BbmQgb2YgY291cnNlIFFVSVQgb3IgRVhJ VCB0byBnZXQgb3V0IGFuZCBIRUxQIHRvIGdldCBoZWxwLCBhbmQgZm9yCi1wcm9ncmFtbWVyczog bG9vcHMsIGRlY2lzaW9uIG1ha2luZywgdmFyaWFibGVzLCBhcnJheXMsIGFzc29jaWF0aXZlIGFy cmF5cywKLWludGVnZXIgYW5kIGZsb2F0aW5nIHBvaW50IGFyaXRobWV0aWMsIG1hY3JvcywgYnVp bHRcKGh5aW4gYW5kIHVzZXJcKGh5ZGVmaW5lZAotZnVuY3Rpb25zLCBzdHJpbmcgbWFuaXB1bGF0 aW9uLCBwYXR0ZXJuIG1hdGNoaW5nLCBibG9jayBzdHJ1Y3R1cmUsIHNjb3BpbmcsCi1yZWN1cnNp b24sIGFuZCBhbGwgdGhlIHJlc3QuIFRvIGdldCBhIGxpc3Qgb2YgYWxsIENcKGh5S2VybWl0J3Mg Y29tbWFuZHMsIHR5cGUKLWEgcXVlc3Rpb24gbWFyayAoPykgYXQgdGhlIHByb21wdC4gVG8gZ2V0 IGEgZGVzY3JpcHRpb24gb2YgYW55IGNvbW1hbmQsCi10eXBlIEhFTFAgZm9sbG93ZWQgYnkgdGhl IG5hbWUgb2YgdGhlIGNvbW1hbmQsIGZvciBleGFtcGxlOgotLlBQCi0gIGhlbHAgc2VuZAotLlBQ Ci1UaGUgY29tbWFuZCBpbnRlcnJ1cHRpb24gY2hhcmFjdGVyIGlzIEN0cmxcLUMgKGhvbGQgZG93 biB0aGUgQ3RybCBrZXkgYW5kCi1wcmVzcyB0aGUgQyBrZXkpLgotLlBQCi1UaGUgY29tbWFuZCBs YW5ndWFnZSAiZXNjYXBlIGNoYXJhY3RlciIsIHVzZWQgdG8gaW50cm9kdWNlIHZhcmlhYmxlIG5h bWVzLAotZnVuY3Rpb24gaW52b2NhdGlvbnMsIGFuZCBzbyBvbiwgaXMgYmFja3NsYXNoIChcKS4g SWYgeW91IG5lZWQgdG8gaW5jbHVkZSBhCi1saXRlcmFsIGJhY2tzbGFzaCBpbiBhIGNvbW1hbmQs IHR5cGUgdHdvIG9mIHRoZW0sIGUuZy46Ci0uUFAKLSAgZ2V0IGM6XGVrOTVcZWs5NWN1c3RvbS5p bmkKLS5TUyBDb21tYW5kIEZpbGVzLCBNYWNyb3MsIGFuZCBTY3JpcHRzCi1BIGZpbGUgY29udGFp bmluZyBLZXJtaXQgY29tbWFuZHMgaXMgY2FsbGVkIGEgS2VybWl0IGNvbW1hbmQgZmlsZSBvciBL ZXJtaXQKLXNjcmlwdC4gSXQgY2FuIGJlIGV4ZWN1dGVkIHdpdGggS2VybWl0J3MgVEFLRSBjb21t YW5kOgotLlBQCi0gICgvY3VycmVudC9kaXIpIENcLUtlcm1pdD4gdGFrZSBjb21tYW5kZmlsZQot LlBQCi0od2hlcmUgImNvbW1hbmRmaWxlIiBpcyB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZCBmaWxl KS4gUGxlYXNlIGRvbid0IHBpcGUgYQotY29tbWFuZCBmaWxlIGludG8gS2VybWl0J3Mgc3RhbmRh cmQgaW5wdXQgKHdoaWNoIG1pZ2h0IG9yIG1pZ2h0IG5vdCB3b3JrKTsKLWlmIHlvdSBoYXZlIEtl cm1pdCBjb21tYW5kcyBpbiBhIGZpbGUsIHRlbGwgS2VybWl0IHRvIFRBS0UgdGhlIGZpbGUuCi0u UFAKLUluIFVuaXggb25seSwgYSBLZXJtaXQgY29tbWFuZCBmaWxlIGNhbiBhbHNvIGJlIGV4ZWN1 dGVkIGRpcmVjdGx5IGJ5Ci1pbmNsdWRpbmcgYSAia2VyYmFuZyIgbGluZSBhcyB0aGUgZmlyc3Qg bGluZSBvZiB0aGUgZmlsZToKLS5QUAotICAjIS91c3IvbG9jYWwvYmluL2tlcm1pdCArCi0uUFAK LVRoYXQgaXMsIGEgdG9wIGxpbmUgdGhhdCBzdGFydHMgd2l0aCAiIyEiLCBmb2xsb3dlZCBpbW1l ZGlhdGVseSBieSB0aGUgZnVsbAotcGF0aCBvZiB0aGUgS2VybWl0IGV4ZWN1dGFibGUsIGFuZCB0 aGVuLCBpZiB0aGUgS2VybWl0IHNjcmlwdCBpcyB0byBiZQotZ2l2ZW4gYXJndW1lbnRzIG9uIHRo ZSBjb21tYW5kIGxpbmUsIGEgc3BhY2UgYW5kIGEgcGx1cyBzaWduLiBUaGUgc2NyaXB0Ci1maWxl IG11c3QgYWxzbyBoYXZlIGV4ZWN1dGUgcGVybWlzc2lvbjoKLS5QUAotICBjaG1vZCAreCBjb21t YW5kZmlsZQotLlBQCi1FeGNlcHQgZm9yIHRoZSAiICsiIHBhcnQsIHRoaXMgaXMgZXhhY3RseSB0 aGUgc2FtZSBhcyB5b3Ugd291bGQgZG8gZm9yIGEKLXNoZWxsIHNjcmlwdCwgYSBQZXJsIHNjcmlw dCwgZXRjLiBIZXJlJ3MgYSBzaW1wbGUgYnV0IHVzZWxlc3MgZXhhbXBsZQotc2NyaXB0IHRoYXQg cmVndXJnaXRhdGVzIGl0cyBhcmd1bWVudHMgKHVwIHRvIHRocmVlIG9mIHRoZW0pOgotLlBQCi0g ICMhL3Vzci9sb2NhbC9iaW4va2VybWl0ICsKLSAgaWYgZGVmaW5lZCBcZSUxIGVjaG8gIkFyZ3Vt ZW50IDE6IFxlJTEiCi0gIGlmIGRlZmluZWQgXGUlMiBlY2hvICJBcmd1bWVudCAyOiBcZSUyIgot ICBpZiBkZWZpbmVkIFxlJTMgZWNobyAiQXJndW1lbnQgMzogXGUlMyIKLSAgaWYgZGVmaW5lZCBc ZSU0IGVjaG8gImV0Yy4uLiIKLSAgZXhpdAotLlBQCi1JZiB0aGlzIGZpbGUgaXMgc3RvcmVkIGlu IHlvdXIgY3VycmVudCBkaXJlY3RvcnkgYXMgImNvbW1hbmRmaWxlIiwgdGhlbjoKLS5QUAotICAu L2NvbW1hbmRmaWxlIG9uZSB0d28gdGhyZWUgZm91ciBmaXZlCi0uUFAKLXByaW50czoKLS5QUAot ICBBcmd1bWVudCAxOiBvbmUKLSAgQXJndW1lbnQgMjogdHdvCi0gIEFyZ3VtZW50IDM6IHRocmVl Ci0gIGV0Yy4uLgotLlBQCi1UaGlzIGlsbHVzdHJhdGVzIHRoZSBiYXNpYyBzdHJ1Y3R1cmUgb2Yg YSBzdGFuZGFsb25lIEtlcm1pdCBzY3JpcHQ6IHRoZQotImtlcmJhbmcgbGluZSIsIHRoZW4gc29t ZSBjb21tYW5kcy4gSXQgc2hvdWxkIGVuZCB3aXRoICJleGl0IiB1bmxlc3MgeW91Ci13YW50IHRo ZSBLZXJtaXQgcHJvbXB0IHRvIGFwcGVhciB3aGVuIGl0IGlzIGZpbmlzaGVkLiBcZSUxIGlzIHRo ZSBmaXJzdAotYXJndW1lbnQsIFxlJTIgdGhlIHNlY29uZCwgYW5kIHNvIG9uLgotLlBQCi1Zb3Ug Y2FuIGFsc28gY3JlYXRlIHlvdXIgb3duIGNvbW1hbmRzIGJ5IGRlZmluaW5nIG5hbWVkIG1hY3Jv cyBjb21wb3NlZCBvZgotb3RoZXIgS2VybWl0IGNvbW1hbmRzIChvciBtYWNyb3MpLiBGb3IgZXhh bXBsZToKLS5QUAotLm5mCi0gIGRlZmluZSBteWRlbGV0ZSB7Ci0gICAgICBsb2NhbCB0cmFzaAot ICAgICAgYXNzaWduIHRyYXNoIFxldihob21lKXRyYXNoY2FuLwotICAgICAgaWYgbm90IGRlZmlu ZWQgXGUlMSBlbmQgMSAiRGVsZXRlIHdoYXQ/IgotICAgICAgaWYgd2lsZCBcZSUxIHsKLSAgICAg ICAgICBlbmQgMSAiRGVsZXRpbmcgbXVsdGlwbGUgZmlsZXMgaXMgdG9vIHNjYXJ5IgotICAgICAg fQotICAgICAgaWYgbm90IGV4aXN0IFxlJTEgZW5kIDEgIkkgY2FuJ3QgZmluZCBcZSUxIgotICAg ICAgaWYgbm90IGRpcmVjdG9yeSBcZW0odHJhc2gpIHsKLSAgICAgICAgICBta2RpciBcZW0odHJh c2gpCi0gICAgICAgICAgaWYgZmFpbCBlbmQgMSAiTm8gdHJhc2ggY2FuIgotICAgICAgfQotICAg ICAgcmVuYW1lIC9saXN0IFxlJTEgXGVtKHRyYXNoKQotICB9Ci0gIGRlZmluZSBteXVuZGVsZXRl IHsKLSAgICAgIGxvY2FsIHRyYXNoCi0gICAgICBhc3NpZ24gdHJhc2ggXGV2KGhvbWUpdHJhc2hj YW4vCi0gICAgICBpZiBub3QgZGVmaW5lZCBcZSUxIGVuZCAxICJVbmRlbGV0ZSB3aGF0PyIKLSAg ICAgIGlmIHdpbGQgXGUlMSB7Ci0gICAgICAgICAgZW5kIDEgIlVuZGVsZXRpbmcgbXVsdGlwbGUg ZmlsZXMgaXMgdG9vIGhhcmQiCi0gICAgICB9Ci0gICAgICBpZiBub3QgZGlyZWN0b3J5IFxlbSh0 cmFzaCkgZW5kIDEgIk5vIHRyYXNoIGNhbiIKLSAgICAgIGlmIG5vdCBleGlzdCBcZW0odHJhc2gp XGUlMSB7Ci0gICAgICAgICAgZW5kIDEgIkkgY2FuJ3QgZmluZCBcZSUxIGluIHRyYXNoIGNhbiIK LSAgICAgIH0KLSAgICAgIHJlbmFtZSAvbGlzdCBcZW0odHJhc2gpXGUlMSAuCi0gIH0KLS5QUAot LmZpCi1UaGVzZSBzYW1wbGUgbWFjcm9zIGFyZSBub3QgZXhhY3RseSBwcm9kdWN0aW9uIHF1YWxp dHkgKHRoZXkgZG9uJ3QgaGFuZGxlCi1maWxlbmFtZXMgdGhhdCBpbmNsdWRlIHBhdGggc2VnbWVu dHMsIHRoZXkgZG9uJ3QgaGFuZGxlIG11bHRpcGxlIGZpbGVzLAotZXRjKSwgYnV0IHlvdSBnZXQg dGhlIGlkZWE6IHlvdSBjYW4gcGFzcyBhcmd1bWVudHMgdG8gbWFjcm9zLCBhbmQgdGhleSBjYW4K LWNoZWNrIHRoZW0gYW5kIG1ha2Ugb3RoZXIga2luZHMgb2YgZGVjaXNpb25zLiBJZiB5b3UgcHV0 IHRoZSBhYm92ZSBsaW5lcwotaW50byB5b3VyIGluaXRpYWxpemF0aW9uIG9yIGN1c3RvbWl6YXRp b24gZmlsZSAoZXhwbGFpbmVkIGJlbG93KSwgeW91J2xsCi1oYXZlIE1ZREVMRVRFIGFuZCBNWVVO REVMRVRFIGNvbW1hbmRzIGF2YWlsYWJsZSBldmVyeSB0aW1lIHlvdSBzdGFydAotS2VybWl0LCBh dCBsZWFzdCBhcyBsb25nIGFzIHlvdSBkb24ndCBzdXBwcmVzcyBleGVjdXRpb24gb2YgdGhlCi1p bml0aWFsaXphdGlvbiBmaWxlLiAoRXhlcmNpc2UgZm9yIHRoZSByZWFkZXI6IE1ha2UgdGhlc2Ug bWFjcm9zIGdlbmVyYWxseQotdXNlZnVsOiByZW1vdmUgbGltaXRhdGlvbnMsIGFkZCB0cmFzaGNh biBkaXNwbGF5LCBicm93c2luZywgZW1wdHlpbmcsIGV0Yy4pCi0uUFAKLUtlcmJhbmcgc2NyaXB0 cyBleGVjdXRlIHdpdGhvdXQgdGhlIGluaXRpYWxpemF0aW9uIGZpbGUuIFRoaXMgdG8ga2VlcCB0 aGVtCi1wb3J0YWJsZSBhbmQgYWxzbyB0byBtYWtlIHRoZW0gc3RhcnQgZmFzdGVyLiBJZiB5b3Ug d2FudCB0byB3cml0ZSBLZXJiYW5nCi1zY3JpcHRzIHRoYXQgZGVwZW5kIG9uIHRoZSBpbml0aWFs aXphdGlvbiBmaWxlLCBpbmNsdWRlIHRoZSBjb21tYW5kCi0uUFAKLSAgdGFrZSBcZXYoaG9tZSku a2VybXJjCi0uUFAKLWF0IHRoZSBkZXNpcmVkIHNwb3QgaW4gdGhlIHNjcmlwdC4gQnkgdGhlIHdh eSwgXGV2KHh4eCkgaXMgYSBidWlsdFwoaHlpbgotdmFyaWFibGUgKHh4eCBpcyB0aGUgdmFyaWFi bGUgbmFtZSwgImhvbWUiIGluIHRoaXMgY2FzZSkuIFRvIHNlZSB3aGF0Ci1idWlsdFwoaHlpbiB2 YXJpYWJsZXMgYXJlIGF2YWlsYWJsZSwgdHlwZSAic2hvdyB2YXJpYWJsZXMiIGF0IHRoZSBDXCho eUtlcm1pdAotcHJvbXB0LiBUbyBzZWUgd2hhdCBlbHNlIHlvdSBjYW4gc2hvdywgdHlwZSAic2hv dyA/Ii4gXGVtKHh4eCkgaXMgYSB1c2VyCi1kZWZpbmVkIHZhcmlhYmxlIChzdHJpY3RseSBzcGVh a2luZywgaXQgaXMgYSBtYWNybyB1c2VkIGFzIGEgdmFyaWFibGUpLgotLlNTIENvbW1hbmQgTGlz dAotQ1woaHlLZXJtaXQgaGFzIG1vcmUgdGhhbiAyMDAgdG9wXChoeWxldmVsIGNvbW1hbmRzLCBh bmQgc29tZSBvZiB0aGVzZSwgc3VjaCBhcwotU0VULCBicmFuY2ggb2ZmIGludG8gaHVuZHJlZHMg b2Ygc3ViY29tbWFuZHMgb2YgdGhlaXIgb3duLCBzbyBpdCdzIG5vdAotcHJhY3RpY2FsIHRvIGRl c2NyaWJlIHRoZW0gYWxsIGhlcmUuIEluc3RlYWQsIGhlcmUncyBhIGNvbmNpc2UgbGlzdCBvZiB0 aGUKLW1vc3QgY29tbW9ubHkgdXNlZCB0b3BcKGh5bGV2ZWwgY29tbWFuZHMsIGdyb3VwZWQgYnkg Y2F0ZWdvcnkuIFRvIGxlYXJuIGFib3V0Ci1lYWNoIGNvbW1hbmQsIHR5cGUgImhlbHAiIGZvbGxv d2VkIGJ5IHRoZSBjb21tYW5kIG5hbWUsIGUuZy4gImhlbHAgc2V0Ii4KLVRlcm1zIHN1Y2ggYXMg Q29tbWFuZCBzdGF0ZSBhbmQgQ29ubmVjdCBzdGF0ZSBhcmUgZXhwbGFpbmVkIGluIHN1YnNlcXVl bnQKLXNlY3Rpb25zLgotLlBQCi1PcHRpb25hbCBmaWVsZHMgYXJlIHNob3duIGluIFsgYnJhY2tl dHMgXS4gICJmaWxlbmFtZSIgbWVhbnMgdGhlCi1uYW1lIG9mIGEgc2luZ2xlIGZpbGUuIGZpbGVz cGVjIG1lYW5zIGEgZmlsZSBzcGVjaWZpY2F0aW9uIHRoYXQgaXMgYWxsb3dlZAotdG8gY29udGFp biB3aWxkY2FyZCBjaGFyYWN0ZXJzIGxpa2UgJyonIHRvIG1hdGNoIGdyb3VwcyBvZiBmaWxlcy4g b3B0aW9ucwotYXJlIChvcHRpb25hbCkgc3dpdGNoZXMgbGlrZSAvUEFHRSwgL05PUEFHRSwgL1FV SUVULCBldGMsIGxpc3RlZCBpbiB0aGUKLUhFTFAgdGV4dCBmb3IgZWFjaCBjb21tYW5kLiBFeGFt cGxlOgotLlBQCi0ubmYKLSAgc2VuZCAvcmVjdXJzaXZlIC9sYXJnZXI6MTAwMDAgL2FmdGVyOlwt MXdlZWsgL2V4Y2VwdDoqLnR4dCAqCi0uZmkKLS5QUAotd2hpY2ggY2FuIGJlIHJlYWQgYXMgInNl bmQgYWxsIHRoZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSBhbmQgYWxsIHRoZSBvbmVzCi11bmRl cm5lYXRoIGl0IHRoYXQgYXJlIGxhcmdlciB0aGFuIDEwMDAwIGJ5dGVzLCBubyBtb3JlIHRoYW4g b25lIHdlZWsgb2xkLAotYW5kIHdob3NlIG5hbWVzIGRvbid0IGVuZCB3aXRoICIudHh0Ii4KLS5T UwotQmFzaWMgQ29tbWFuZHMKLS5SUwotLlRQCi1IRUxQCi1SZXF1ZXN0cyB0b3BcKGh5bGV2ZWwg aGVscC4KLS5UUAotSEVMUCBjb21tYW5kCi1SZXF1ZXN0cyBoZWxwIGFib3V0IHRoZSBnaXZlbiBj b21tYW5kLgotLlRQCi1JTlRST0RVQ1RJT04KLVJlcXVlc3RzIGEgYnJpZWYgaW50cm9kdWN0aW9u IHRvIENcKGh5S2VybWl0LgotLlRQCi1MSUNFTlNFCi1EaXNwbGF5cyB0aGUgQ1woaHlLZXJtaXQg c29mdHdhcmUgY29weXJpZ2h0IGFuZCBsaWNlbnNlLgotLlRQCi1WRVJTSU9OCi1EaXNwbGF5cyBD XChoeUtlcm1pdCdzIHZlcnNpb24gbnVtYmVyLgotLlRQCi1FWElUIFsgbnVtYmVyIF0KLUV4aXRz IGZyb20gS2VybWl0IHdpdGggdGhlIGdpdmVuCi1zdGF0dXMgY29kZS4gU3lub255bXM6IFFVSVQs IEUsIFEuCi0uVFAKLVRBS0UgZmlsZW5hbWUgWyBwYXJhbWV0ZXJzLi4uIF0KLUV4ZWN1dGVzIGNv bW1hbmRzIGZyb20gdGhlIGdpdmVuCi0uVFAKLUxPRyBpdGVtIFsgZmlsZW5hbWUgXQotS2VlcHMg YSBsb2cgb2YgdGhlIGdpdmVuIGl0ZW0gaW4gdGhlIGdpdmVuIGZpbGUuCi0uVFAKLVsgRE8gXSBt YWNybyBbIHBhcmFtZXRlcnMuLi4gXQotRXhlY3V0ZXMgY29tbWFuZHMgZnJvbSB0aGUgZ2l2ZW4g bWFjcm8uCi0uVFAKLVNFVCBwYXJhbWV0ZXIgdmFsdWUKLVNldHMgdGhlIGdpdmVuIHBhcmFtZXRl ciB0byB0aGUgZ2l2ZW4gdmFsdWUuCi0uVFAKLVNIT1cgY2F0ZWdvcnkKLVNob3dzIHNldHRpbmdz IGluIGEgZ2l2ZW4gY2F0ZWdvcnkuCi0uVFAKLVNUQVRVUwotVGVsbHMgd2hldGhlciBwcmV2aW91 cyBjb21tYW5kIHN1Y2NlZWRlZCBvciBmYWlsZWQuCi0uVFAKLURBVEUgWyBkYXRlXChoeWFuZC9v clwoaHl0aW1lIF0KLVNob3dzIGN1cnJlbnQgZGF0ZVwoaHl0aW1lIG9yIGludGVycHJldHMgZ2l2 ZW4gZGF0ZVwoaHl0aW1lLgotLlRQCi1SVU4gWyBleHRlcm5cKGh5Y29tbWFuZCBbIHBhcmFtZXRl cnMuLi4gXSAgICAgICAgICAgICAgICAgCi1SdW5zIHRoZSBnaXZlbiBleHRlcm5hbCBjb21tYW5k LiBTeW5vbnltOiAhLgotLlRQCi1FWEVDIFsgZXh0ZXJuXChoeWNvbW1hbmQgWyBwYXJhbXMuLi4g XQotS2VybWl0IG92ZXJsYXlzIGl0c2VsZiB3aXRoIHRoZSBnaXZlbiBjb21tYW5kLgotLlRQCi1T VVNQRU5ECi1TdG9wcyBLZXJtaXQgYW5kIHB1dHMgaXQgaW4gdGhlIGJhY2tncm91bmQuIFN5bm9u eW06IFouCi0uUkUKLS5TUwotTG9jYWwgRmlsZSBNYW5hZ2VtZW50Ci0uUlMKLS5UUAotVFlQRSBb IG9wdGlvbnMgXSBmaWxlbmFtZQotRGlzcGxheXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBm aWxlLgotLlRQCi1NT1JFIFsgb3B0aW9ucyBdIGZpbGVuYW1lICAgICAKLUVxdWl2YWxlbnQgdG8g VFlQRSAvUEFHRSAocGF1c2UgYWZ0ZXIgZWFjaCBzY3JlZW5mdWwpLgotLlRQCi1DQVQgWyBvcHRp b25zIF0gZmlsZW5hbWUgICAgICAKLUVxdWl2YWxlbnQgdG8gVFlQRSAvTk9QQUdFLgotLlRQCi1I RUFEIFsgb3B0aW9ucyBdIGZpbGVuYW1lICAgICAKLURpc3BsYXlzIHRoZSBmaXJzdCBmZXcgbGlu ZXMgb2YgYSBnaXZlbiBmaWxlLgotLlRQCi1UQUlMIFsgb3B0aW9ucyBdIGZpbGVuYW1lICAgICAK LURpc3BsYXlzIHRoZSBsYXN0IGZldyBsaW5lcyBvZiBhIGdpdmVuIGZpbGUuCi0uVFAKLUdSRVAg WyBvcHRpb25zIF0gcGF0dGVybiBmaWxlc3BlYwotRGlzcGxheXMgbGluZXMgZnJvbSBmaWxlcyB0 aGF0IG1hdGNoCi10aGUgcGF0dGVybi4gU3lub255bTogRklORC4KLS5UUAotRElSRUNUT1JZIFsg b3B0aW9ucyBdIFtmaWxlc3BlYyBdCi1MaXN0cyBmaWxlcyAoYnVpbHRcKGh5aW4sIG1hbnkgb3B0 aW9ucykuCi0uVFAKLUxTIFsgb3B0aW9ucyBdIFsgZmlsZXNwZWMgXSAgIAotTGlzdHMgZmlsZXMg KHJ1bnMgZXh0ZXJuYWwgImxzIiBjb21tYW5kKS4KLS5UUAotREVMRVRFIFsgb3B0aW9ucyBdIFsg ZmlsZXNwZWMgXQotRGVsZXRlcyBmaWxlcy4gU3lub255bTogUk0uCi0uVFAKLVBVUkdFIFsgb3B0 aW9ucyBdIFsgZmlsZXNwZWMgXQotUmVtb3ZlcyBiYWNrdXAgKCoufm5+KSBmaWxlcy4KLS5UUAot Q09QWSBbIG9wdGlvbnMgXSBbIGZpbGVzcGVjcy4uLiBdCi1Db3BpZXMgZmlsZXMuIFN5bm9ueW06 IENQLgotLlRQCi1SRU5BTUUgWyBvcHRpb25zIF0gWyBmaWxlc3BlY3MuLi4gXQotUmVuYW1lcyBm aWxlcy4gU3lub255bTogTVYuCi0uVFAKLUNITU9EIFsgb3B0aW9ucyBdIFsgZmlsZXNwZWNzLi4u IF0KLUNoYW5nZXMgcGVybWlzc2lvbnMgb2YgZmlsZXMuCi0uVFAKLVRSQU5TTEFURSBmaWxlbmFt ZSBjaGFyc2V0cyBbIGZpbGVuYW1lIF0KLUNvbnZlcnRzIGZpbGUncyBjaGFyYWN0ZXIgc2V0LiBT eW5vbnltOiBYTEFURS4KLS5UUAotQ0QKLUNoYW5nZXMgeW91ciB3b3JraW5nIGRpcmVjdG9yeSB0 byB5b3VyIGhvbWUgZGlyZWN0b3J5LgotLlRQCi1DRCBkaXJlY3RvcnkKLUNoYW5nZXMgeW91ciB3 b3JraW5nIGRpcmVjdG9yeSB0byB0aGUgb25lIGdpdmVuLgotLlRQCi1DRFVQCi1DaGFuZ2VzIHlv dXIgd29ya2luZyBkaXJlY3Rvcnkgb25lIGxldmVsIHVwLgotLlRQCi1QV0QKLURpc3BsYXlzIHlv dXIgd29ya2luZyBkaXJlY3RvcnkuCi0uVFAKLUJBQ0sKLVJldHVybnMgdG8geW91ciBwcmV2aW91 cyB3b3JraW5nIGRpcmVjdG9yeS4KLS5UUAotTUtESVIgWyBkaXJlY3RvcnkgXQotQ3JlYXRlcyBh IGRpcmVjdG9yeS4KLS5UUAotUk1ESVIgWyBkaXJlY3RvcnkgXQotUmVtb3ZlcyBhIGRpcmVjdG9y eS4KLS5SRQotLlNTCi1NYWtpbmcgQ29ubmVjdGlvbnMKLS5SUwotLlRQCi1TRVQgTElORSBbIG9w dGlvbnMgXSBkZXZpY2VuYW1lICAgICAgICAgICAgICAgICAgICAgIAotT3BlbnMgdGhlIG5hbWVk IHNlcmlhbCBwb3J0LiBTeW5vbnltOiBTRVQgUE9SVC4KLS5UUAotT1BFTiBMSU5FIFsgb3B0aW9u cyBdIGRldmljZW5hbWUKLVNhbWUgYXMgU0VUIExJTkUuIFN5bm9ueW06IE9QRU4gUE9SVC4KLS5U UAotU0VUIE1PREVNIFRZUEUgWyBuYW1lIF0KLVRlbGxzIEtlcm1pdCB3aGF0IGtpbmQgb2YgbW9k ZW0gaXMgb24gdGhlIHBvcnQuCi0uVFAKLURJQUwgWyBudW1iZXIgXQotVGVsbHMgS2VybWl0IHRv IGRpYWwgdGhlIGdpdmVuIHBob25lIG51bWJlciB3aXRoIHRoZSBtb2RlbS4KLS5UUAotUkVESUFM Ci1SZWRpYWxzIHRoZSBtb3N0IHJlY2VudGx5IGRpYWxlZCBwaG9uZSBudW1iZXIuCi0uVFAKLUFO U1dFUgotV2FpdHMgZm9yIGFuZCBhbnN3ZXJzIGFuIGluY29taW5nIGNhbGwgb24gdGhlIG1vZGVt LgotLlRQCi1BVVRIRU5USUNBVEUgWyBwYXJhbWV0ZXJzLi4uIF0KLVBlcmZvcm1zIHNlY3VyZSBh dXRoZW50aWNhdGlvbiBvbiBhIFRDUC9JUCBjb25uZWN0aW9uLgotLlRQCi1TRVQgTkVUV09SSyBU WVBFIHsgVENQL0lQLCBYLjI1LCAuLi4gfQotU2VsZWN0cyBuZXR3b3JrIHR5cGUgZm9yIHN1YnNl cXVlbnQgU0VUIEhPU1QgY29tbWFuZHMuCi0uVFAKLVNFVCBIT1NUIFsgb3B0aW9ucyBdIGhvc3Qg WyBwb3J0IF0gICAgICAgICAgICAgICAgICAgICAgICAgIAotT3BlbnMgYSBuZXR3b3JrIGNvbm5l Y3Rpb24gdG8gdGhlIGdpdmVuIGhvc3QgYW5kIHBvcnQuCi0uVFAKLVNFVCBIT1NUICogcG9ydAot V2FpdHMgZm9yIGFuIGluY29taW5nIFRDUC9JUCBjb25uZWN0aW9uIG9uIHRoZSBnaXZlbiBwb3J0 LgotLlRQCi1URUxORVQgWyBvcHRpb25zIF0gaG9zdAotT3BlbnMgYSBUZWxuZXQgY29ubmVjdGlv biB0byB0aGUgaG9zdCBhbmQgZW50ZXJzIENvbm5lY3Qgc3RhdGUuCi0uVFAKLVJMT0dJTiBbIG9w dGlvbnMgXSBob3N0Ci1PcGVucyBhbiBSbG9naW4gY29ubmVjdGlvbiB0byB0aGUgaG9zdCBhbmQg ZW50ZXJzIENvbm5lY3Qgc3RhdGUuCi0uVFAKLUlLU0QgWyBvcHRpb25zIF0gaG9zdAotT3BlbnMg YSBjb25uZWN0aW9uIHRvIGFuIEludGVybmV0IEtlcm1pdCBTZXJ2aWNlLgotLlRQCi1TU0ggWyBv cHRpb25zIF0gaG9zdAotT3BlbnMgYW4gU1NIIGNvbm5lY3Rpb24gdG8gdGhlIGhvc3QgYW5kIGVu dGVycyBDb25uZWN0IHN0YXRlLgotLlRQCi1GVFAgT1BFTiBob3N0IFsgb3B0aW9ucyBdCi1PcGVu cyBhbiBGVFAgY29ubmVjdGlvbiB0byB0aGUgaG9zdC4KLS5UUAotSFRUUCBbIG9wdGlvbnMgXSBP UEVOIGhvc3QKLU9wZW5zIGFuIEhUVFAgY29ubmVjdGlvbiB0byB0aGUgaG9zdC4KLS5UUAotUFRZ IGV4dGVybmFsXChoeWNvbW1hbmQKLVJ1bnMgdGhlIGNvbW1hbmQgb24gYSBwc2V1ZG90ZXJtaW5h bCBhcyBpZiBpdCB3ZXJlIGEgY29ubmVjdGlvbi4KLS5UUAotUElQRSBleHRlcm5hbFwoaHljb21t YW5kCi1SdW5zIHRoZSBjb21tYW5kIHRocm91Z2ggYSBwaXBlIGFzIGlmIGl0IHdlcmUgYSBjb25u ZWN0aW9uLgotLlJFCi0uU1MKLVVzaW5nIENvbm5lY3Rpb25zCi0uUlMKLS5UUAotQ09OTkVDVCBb IG9wdGlvbnMgXQotRW50ZXJzIENvbm5lY3QgKHRlcm1pbmFsKSBzdGF0ZS4gIFN5bm9ueW06IEMu Ci0uVFAKLVJFRElSRUNUIGNvbW1hbmQKLVJlZGlyZWN0cyB0aGUgZ2l2ZW4gZXh0ZXJuYWwgY29t bWFuZCBvdmVyIHRoZSBjb25uZWN0aW9uLgotLlRQCi1URUxPUFQgY29tbWFuZAotU2VuZHMgYSBU ZWxuZXQgcHJvdG9jb2wgY29tbWFuZCAoVGVsbmV0IGNvbm5lY3Rpb25zIG9ubHkpLgotLlRQCi1D dHJsXC1cZUMKLSJFc2NhcGVzIGJhY2siIGZyb20gQ29ubmVjdCBzdGF0ZSB0byBDb21tYW5kIHN0 YXRlLgotLlRQCi1DdHJsXC1cZUIKLShJbiBDb25uZWN0IHN0YXRlKSBTZW5kcyBhIEJSRUFLIHNp Z25hbCAoc2VyaWFsIG9yIFRlbG5ldCkuCi0uVFAKLUN0cmxcLVxlIQotKEluIENvbm5lY3Qgc3Rh dGUpIEVudGVycyBpbmZlcmlvciBzaGVsbDsgImV4aXQiIHRvIHJldHVybi4KLS5UUAotQ3RybFwt XGU/Ci0oSW4gQ29ubmVjdCBzdGF0ZSkgU2hvd3MgYSBtZW51IG9mIG90aGVyIGVzY2FwZVwoaHls ZXZlbCBvcHRpb25zLgotLlRQCi1DdHJsXC1cZUN0cmxcLVxlCi0oSW4gQ29ubmVjdCBzdGF0ZSkg VHlwZSB0d28KLUN0cmxcLUJhY2tzbGFzaGVzIHRvIHNlbmQgb25lIG9mIHRoZW0uCi0uVFAKLVNF VCBFU0NBUEUgWyBjaGFyYWN0ZXIgXQotQ2hhbmdlcyBLZXJtaXQncyBDb25uZWN0XChoeXN0YXRl IGVzY2FwZSBjaGFyYWN0ZXIuCi0uUkUKLS5TUwotQ2xvc2luZyBDb25uZWN0aW9ucwotLlJTCi0u VFAKLUhBTkdVUAotSGFuZ3MgdXAgdGhlIGN1cnJlbnRseSBvcGVuCi1zZXJpYWxcKGh5cG9ydCBv ciBuZXR3b3JrIGNvbm5lY3Rpb24uCi0uVFAKLUNMT1NFCi1DbG9zZXMgdGhlIGN1cnJlbnRseSBv cGVuCi1zZXJpYWxcKGh5cG9ydCBvciBuZXR3b3JrIGNvbm5lY3Rpb24uCi0uVFAKLVNFVCBMSU5F ICh3aXRoIG5vIGRldmljZW5hbWUpCi1DbG9zZXMgdGhlIGN1cnJlbnRseSBvcGVuCi1zZXJpYWxc KGh5cG9ydCBvciBuZXR3b3JrIGNvbm5lY3Rpb24uCi0uVFAKLVNFVCBIT1NUICh3aXRoIG5vIGhv c3RuYW1lKQotQ2xvc2VzIHRoZSBjdXJyZW50bHkgb3BlbiBzZXJpYWxcKGh5cG9ydCBvciBuZXR3 b3JrIGNvbm5lY3Rpb24uCi0uVFAKLUZUUCBDTE9TRQotQ2xvc2VzIHRoZSBjdXJyZW50bHkgb3Bl biBGVFAgY29ubmVjdGlvbi4KLS5UUAotSFRUUCBDTE9TRQotQ2xvc2VzIHRoZSBjdXJyZW50bHkg b3BlbiBIVFRQIGNvbm5lY3Rpb24uCi0uVFAKLUVYSVQgCi1BbHNvIGNsb3NlcyBhbGwgY29ubmVj dGlvbnMuIFN5bm9ueW06IFFVSVQuCi0uVFAKLVNFVCBFWElUIFdBUk5JTkcgT0ZGCi1TdXBwcmVz c2VzIHdhcm5pbmcgYWJvdXQgb3BlbiBjb25uZWN0aW9ucyBvbiBleGl0IG9yIGNsb3NlLgotLlJF Ci0uU1MKLUZpbGUgVHJhbnNmZXIKLS5SUwotLlRQCi1TRU5EIFsgb3B0aW9ucyBdIGZpbGVuYW1l IFsgYXNcKGh5bmFtZSBdCi1TZW5kcyB0aGUgZ2l2ZW4gZmlsZS4gU3lub255bTogUy4KLS5UUAot U0VORCBbIG9wdGlvbnMgXSBmaWxlc3BlYwotU2VuZHMgYWxsIGZpbGVzIHRoYXQgbWF0Y2guCi0u VFAKLVJFU0VORCBbIG9wdGlvbnMgXSBmaWxlc3BlYwotUmVzdW1lcyBhbiBpbnRlcnJ1cHRlZCBT RU5EIGZyb20gdGhlIHBvaW50IG9mIGZhaWx1cmUuCi0uVFAKLVJFQ0VJVkUgWyBvcHRpb25zIF0g WyBhc1woaHluYW1lIF0gICAgICAgICAgICAgICAgICAgIAotV2FpdHMgcGFzc2l2ZWx5IGZvciBm aWxlcyB0byBhcnJpdmUuIFN5bm9ueW06IFIuCi0uVFAKLUxPRyBUUkFOU0FDVElPTlMgWyBmaWxl bmFtZSBdCi1LZWVwcyBhIHJlY29yZCBvZiBmaWxlIHRyYW5zZmVycy4KLS5UUAotRkFTVAotVXNl IGZhc3QgZmlsZVwoaHl0cmFuc2ZlciBzZXR0aW5ncyAoZGVmYXVsdCkuCi0uVFAKLUNBVVRJT1VT Ci1Vc2UgY2F1dGlvdXMgYW5kIGxlc3MgZmFzdCBmaWxlXChoeXRyYW5zZmVyIHNldHRpbmdzLgot LlRQCi1ST0JVU1QKLVVzZSB1bHRyYVwoaHljb25zZXJ2YXRpdmUgYW5kIHNsb3cgZmlsZVwoaHl0 cmFuc2ZlciBzZXR0aW5ncy4KLS5UUAotU1RBVElTVElDUyBbIG9wdGlvbnMgXSAKLUdpdmVzIHN0 YXRpc3RpY3MgYWJvdXQgdGhlIG1vc3QgcmVjZW50IGZpbGUgdHJhbnNmZXIuCi0uVFAKLVdIRVJF Ci1BZnRlciB0cmFuc2ZlcjogIldoZXJlIGRpZCBteSBmaWxlcyBnbz8iLgotLlRQCi1UUkFOU01J VCBbIG9wdGlvbnMgXSBbb2ZpbGVuYW1lIF0KLVNlbmRzIGZpbGUgd2l0aG91dCBwcm90b2NvbC4g U3lub255bTogWE1JVC4KLS5UUAotTE9HIFNFU1NJT04gWyBmaWxlbmFtZSBdCi1DYXB0dXJlcyBy ZW1vdGUgdGV4dCBvciBmaWxlcyB3aXRob3V0IHByb3RvY29sLgotLlRQCi1TRVQgUFJPVE9DT0wg WyBuYW1lLi4uIF0KLVRlbGxzIEtlcm1pdCB0byB1c2UgYW4gZXh0ZXJuYWwgZmlsZVwoaHl0cmFu c2ZlciBwcm90b2NvbC4KLS5UUAotRlRQIHsgUFVULCBNUFVULCBHRVQsIE1HRVQsIC4uLiB9Ci1G VFAgY2xpZW50IGNvbW1hbmRzLgotLlRQCi1IVFRQIHsgUFVULCBHRVQsIEhFQUQsIFBPU1QsIC4u LiB9Ci1IVFRQIGNsaWVudCBjb21tYW5kcy4KLS5SRQotLlNTCi1LZXJtaXQgU2VydmVyCi0uUlMK LS5UUAotRU5BQkxFLCBESVNBQkxFCi1Db250cm9scyB3aGljaCBzZXJ2ZXIgZmVhdHVyZXMgY2Fu IGJlIHVzZWQgYnkgY2xpZW50cy4KLS5UUAotU0VUIFNFUlZFUgotU2V0cyBwYXJhbWV0ZXJzIHBy aW9yIHRvIGVudGVyaW5nIFNlcnZlciBzdGF0ZS4KLS5UUAotU0VSVkVSCi1FbnRlcnMgU2VydmVy IHN0YXRlLgotLlJFCi0uU1MKLUNsaWVudCBvZiBLZXJtaXQgb3IgRlRQIFNlcnZlcgotLlJTCi0u VFAKLVsgUkVNT1RFIF0gTE9HSU4gWyB1c2VyIHBhc3N3b3JkIF0gICAgICAgICAKLUxvZ3MgaW4g dG8gYSBLZXJtaXQgc2VydmVyIG9yIElLU0QgdGhhdCByZXF1aXJlcyBpdC4KLS5UUAotWyBSRU1P VEUgXSBMT0dPVVQKLUxvZ3Mgb3V0IGZyb20gYSBLZXJtaXQgc2VydmVyIG9yIElLU0QuCi0uVFAK LVNFTkQgWyBvcHRpb25zIF0gZmlsZW5hbWUgWyBhc1woaHluYW1lIF0gICAgICAgICAgICAgICAg ICAgCi1TZW5kcyB0aGUgZ2l2ZW4gZmlsZSB0byB0aGUgc2VydmVyLiBTeW5vbnltczogUywgUFVU LgotLlRQCi1TRU5EIFsgb3B0aW9ucyBdIGZpbGVzcGVjCi1TZW5kcyBhbGwgZmlsZXMgdGhhdCBt YXRjaC4KLS5UUAotUkVTRU5EIFsgb3B0aW9ucyBdIGZpbGVzcGVjCi1SZXN1bWVzIGFuIGludGVy cnVwdGVkIFNFTkQgZnJvbSB0aGUgcG9pbnQgb2YgZmFpbHVyZS4KLS5UUAotR0VUIFsgb3B0aW9u cyBdIHJlbW90ZVwoaHlmaWxlc3BlYwotQXNrcyB0aGUgc2VydmVyIHRvIHNlbmQgdGhlIGdpdmVu IGZpbGVzLiBTeW5vbnltOiBHLgotLlRQCi1SRUdFVCBbIG9wdGlvbnMgXSByZW1vdGVcKGh5Zmls ZXNwZWMKLVJlc3VtZXMgYW4gaW50ZXJydXB0ZWQgR0VUIGZyb20gdGhlIHBvaW50IG9mIGZhaWx1 cmUuCi0uVFAKLVJFTU9URSBDRCBbIGRpcmVjdG9yeSBdCi1Bc2tzIHNlcnZlciB0byBjaGFuZ2Ug aXRzIHdvcmtpbmcKLWRpcmVjdG9yeS4gU3lub255bTogUkNELgotLlRQCi1SRU1PVEUgUFdEIFsg ZGlyZWN0b3J5IF0KLUFza3Mgc2VydmVyIHRvIGRpc3BsYXkgaXRzIHdvcmtpbmcgZGlyZWN0b3J5 LiBTeW5vbnltOiBSUFdELgotLlRQCi1SRU1PVEUgRElSRUNUT1JZIFsgZmlsZXNwZWMuLi4gXQot QXNrcyBzZXJ2ZXIgdG8gc2VuZCBhIGRpcmVjdG9yeSBsaXN0aW5nLiBTeW5vbnltOiBSRElSLgot LlRQCi1SRU1PVEUgREVMRVRFIFsgZmlsZXNwZWMuLi4gXQotQXNrcyBzZXJ2ZXIgdG8gZGVsZXRl IGZpbGVzLiBTeW5vbnltOiBSREVMLgotLlRQCi1SRU1PVEUgWyBjb21tYW5kLi4uIF0KLShNYW55 IG90aGVyIGNvbW1hbmRzOiAicmVtb3RlID8iIGZvciBhIGxpc3QpLgotLlRQCi1NQUlMIFsgb3B0 aW9ucyBdIGZpbGVzcGVjCi1TZW5kcyBmaWxlKHMpIHRvIGJlIGRlbGl2ZXJlZCBhcyBlXChoeW1h aWwgKEtlcm1pdCBvbmx5KS4KLS5UUAotRklOSVNICi1Bc2tzIHRoZSBzZXJ2ZXIgdG8gZXhpdCBz ZXJ2ZXIgc3RhdGUgKEtlcm1pdCBvbmx5KS4KLS5UUAotQllFCi1Bc2tzIHRoZSBzZXJ2ZXIgdG8g bG9nIG91dCBhbmQgY2xvc2UgdGhlIGNvbm5lY3Rpb24uCi0uUkUKLS5TUwotU2NyaXB0IFByb2dy YW1taW5nCi0uUFAKLS5SUwotREVGSU5FLCBERUNMQVJFLCBVTkRFRklORSwgVU5ERUNMQVJFLCBB U1NJR04sIEVWQUxVQVRFLCBTRVhQUkVTU0lPTiwKLUFSUkFZLCBTT1JULCBJTlBVVCwgT1VUUFVU LCBJRiwgRk9SLCBXSElMRSwgU1dJVENILCBHT1RPLCBFQ0hPLCBBU0ssCi1HRVRDLCBHRVRPSywg QVNTRVJULCBXQUlULCBTTEVFUCwgRk9QRU4sIEZSRUFELCBGV1JJVEUsIEZDTE9TRSwgU1RPUCwK LUVORCwgUkVUVVJOLCBMRUFSTiwgU0hJRlQsIFRSQUNFLCBWT0lELCBJTkNSRU1FTlQsIERFQ1JF TUVOVCwgLi4uIEZvcgotdGhlc2UgYW5kIG1hbnkgbW9yZSB5b3UnbGwgbmVlZCB0byBjb25zdWx0 IHRoZSBtYW51YWwgYW5kIHN1cHBsZW1lbnRzLAotYW5kL29yIHZpc2l0IHRoZSBLZXJtaXQgU2Ny aXB0IExpYnJhcnksIHdoaWNoIGFsc28gaW5jbHVkZXMgYSBicmllZgotdHV0b3JpYWwuIEhpbnQ6 IEhFTFAgTEVBUk4gdG8gZmluZCBvdXQgaG93IHRvIGdldCBLZXJtaXQgdG8gd3JpdGUKLXNpbXBs ZSBzY3JpcHRzIGZvciB5b3UuCi0uUkUKLS5QUAotTWFueSBvZiBLZXJtaXQncyBjb21tYW5kcyBo YXZlIHN5bm9ueW1zLCB2YXJpYW50cywgcmVsYXRpdmVzLCBhbmQgc28gb24uCi1Gb3IgZXhhbXBs ZSwgTVNFTkQgaXMgYSB2ZXJzaW9uIG9mIFNFTkQgdGhhdCBhY2NlcHRzIGEgbGlzdCBvZiBmaWxl Ci1zcGVjaWZpY2F0aW9ucyB0byBiZSBzZW50LCByYXRoZXIgdGhhbiBqdXN0IG9uZSBmaWxlIHNw ZWNpZmljYXRpb24sIGFuZAotTVBVVCBpcyBhIHN5bm9ueW0gb2YgTVNFTkQuIE1PVkUgbWVhbnMg dG8gU0VORCBhbmQgdGhlbiBERUxFVEUgdGhlIHNvdXJjZQotZmlsZSBpZiBzdWNjZXNzZnVsLiBN TU9WRSBpcyBsaWtlIE1PVkUsIGJ1dCBhY2NlcHRzIGEgbGlzdCBvZiBmaWxlc3BlY3MsCi1hbmQg c28gb24uIFRoZXNlIGFyZSBkZXNjcmliZWQgaW4gdGhlIGZ1bGwgZG9jdW1lbnRhdGlvbi4KLS5Q UAotVXNlIHF1ZXN0aW9uIG1hcmsgdG8gZmVlbCB5b3VyIHdheSB0aHJvdWdoIGFuIHVuZmFtaWxp YXIgY29tbWFuZCwgYXMgaW4KLXRoaXMgZXhhbXBsZToKLS5QUAotLm5mCi0gIENcLUtlcm1pdD4g cmVtb3RlID8gT25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0gICBhc3NpZ24gICAgIGRpcmVjdG9yeSAg a2VybWl0ICAgICBwcmludCAgICAgIHJtZGlyCi0gICBjZCAgICAgICAgIGV4aXQgICAgICAgbG9n aW4gICAgICBwd2QgICAgICAgIHNldAotICAgY29weSAgICAgICBoZWxwICAgICAgIGxvZ291dCAg ICAgcXVlcnkgICAgICBzcGFjZQotICAgZGVsZXRlICAgICBob3N0ICAgICAgIG1rZGlyICAgICAg cmVuYW1lICAgICB0eXBlCi0gIENcLUtlcm1pdD4gcmVtb3RlIHNldCA/IE9uZSBvZiB0aGUgZm9s bG93aW5nOgotICAgYXR0cmlidXRlcyAgIGZpbGUgICAgICAgICByZXRyeSAgICAgICAgdHJhbnNm ZXIKLSAgIGJsb2NrXC1jaGVjayAgcmVjZWl2ZSAgICAgIHNlcnZlciAgICAgICB3aW5kb3cKLSAg Q1wtS2VybWl0PiByZW1vdGUgc2V0IGZpbGUgPyBPbmUgb2YgdGhlIGZvbGxvd2luZzoKLSAgIGNo YXJhY3Rlclwtc2V0ICBpbmNvbXBsZXRlICAgICByZWNvcmRcLWxlbmd0aAotICAgY29sbGlzaW9u ICAgICAgbmFtZXMgICAgICAgICAgdHlwZQotICBDXC1LZXJtaXQ+IHJlbW90ZSBzZXQgZmlsZSBu YW1lcyA/IE9uZSBvZiB0aGUgZm9sbG93aW5nOgotICAgY29udmVydGVkICBsaXRlcmFsCi0gIENc LUtlcm1pdD4gcmVtb3RlIHNldCBmaWxlIG5hbWVzIGxpdGVyYWwKLSAgQ1wtS2VybWl0PgotLlBQ Ci0uZmkKLVRoaXMgaXMgY2FsbGVkIG1lbnUgb24gZGVtYW5kOiB5b3UgZ2V0IGEgbWVudSB3aGVu IHlvdSB3YW50IG9uZSwgYnV0IG1lbnVzCi1hcmUgbm90IGZvcmNlZCBvbiB5b3UgZXZlbiB3aGVu IGtub3cgd2hhdCB5b3UncmUgZG9pbmcuIE5vdGUgdGhhdCB5b3UgY2FuCi1hbHNvIGFiYnJldmlh dGUgbW9zdCBrZXl3b3JkcywgYW5kIHlvdSBjYW4gY29tcGxldGUgdGhlbSB3aXRoIHRoZSBUYWIg b3IKLUVzYyBrZXkuIEFsc28gbm90ZSB0aGF0ID8gd29ya3MgZm9yIGZpbGVuYW1lcyB0b28sIGFu ZCB0aGF0IHlvdSBjYW4gdXNlIGl0Ci1pbiB0aGUgbWlkZGxlIG9mIGEga2V5d29yZCBvciBmaWxl bmFtZSwgbm90IGp1c3QgYXQgdGhlIGJlZ2lubmluZy4gRm9yCi1leGFtcGxlLCAic2VuZCB4PyIg bGlzdHMgYWxsIHRoZSBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hvc2UgbmFtZXMK LXN0YXJ0IHdpdGggJ3gnLgotLlNIIElOSVRJQUxJWkFUSU9OIEZJTEUKLUluIGl0cyBkZWZhdWx0 IGNvbmZpZ3VyYXRpb24sIENcKGh5S2VybWl0IGV4ZWN1dGVzIGNvbW1hbmRzIGZyb20gYSBmaWxl IAotY2FsbGVkIC5rZXJtcmMgaW4geW91ciBob21lIGRpcmVjdG9yeSB3aGVuIGl0IHN0YXJ0cywg dW5sZXNzIGl0IGlzIGdpdmVuIHRoZQotXC1ZIG9yIFwteSBjb21tYW5kXChoeWxpbmUgb3B0aW9u LiBDdXN0b20gY29uZmlndXJhdGlvbnMgbWlnaHQgc3Vic3RpdHV0ZSBhIHNoYXJlZAotc3lzdGVt XChoeXdpZGUgaW5pdGlhbGl6YXRpb24gZmlsZS4gVGhlIFNIT1cgRklMRSBjb21tYW5kIHRlbGxz IHdoYXQKLWluaXRpYWxpemF0aW9uIGZpbGUsIGlmIGFueSwgd2FzIHVzZWQuIFRoZSBzdGFuZGFy ZCBpbml0aWFsaXphdGlvbiBmaWxlCi0iY2hhaW5zIiB0byBhbiBpbmRpdmlkdWFsIGN1c3RvbWl6 YXRpb24gZmlsZSwgLm15a2VybWMsIGluIHRoZSBob21lIGRpcmVjdG9yeSwKLWluIHdoaWNoIGVh Y2ggdXNlciBjYW4gZXN0YWJsaXNoIGhlci9oaXMgb3duIHByZWZlcmVuY2VzLCBkZWZpbmUgbWFj cm9zLCBhbmQKLXNvIG9uLgotLlBQCi1TaW5jZSBleGVjdXRpb24gb2YgdGhlIGluaXRpYWxpemF0 aW9uIGZpbGUgKGF0IGxlYXN0IHRoZSBzdGFuZGFyZCBvbmUpCi1tYWtlcyBDXChoeUtlcm1pdCB0 YWtlIGxvbmdlciB0byBzdGFydCwgaXQgbWlnaHQgYmUgYmV0dGVyIG5vdCB0byBoYXZlIGFuCi1p bml0aWFsaXphdGlvbiBmaWxlLCBlc3BlY2lhbGx5IG5vdyB0aGF0IEtlcm1pdCdzIGRlZmF1bHQg c3RhcnR1cAotY29uZmlndXJhdGlvbiBpcyB3ZWxsIGF0dHVuZWQgdG8gbW9kZXJuIGNvbXB1dGlu ZyBhbmQgbmV0d29ya2luZyBcKGh5XChoeSBpbgotb3RoZXIgd29yZHMsIHlvdSBubyBsb25nZXIg aGF2ZSBkbyBhbnl0aGluZyBzcGVjaWFsIHRvIG1ha2UgS2VybWl0Ci10cmFuc2ZlcnMgZ28gZmFz dC4gU28gaW5zdGVhZCBvZiBoYXZpbmcgYW4gaW5pdGlhbGl6YXRpb24gZmlsZSB0aGF0IGlzCi1l eGVjdXRlZCBldmVyeSB0aW1lIEtlcm1pdCBzdGFydHMsIHlvdSBtaWdodCBjb25zaWRlciBtYWtp bmcgb25lIG9yIG1vcmUKLWtlcmJhbmcgc2NyaXB0cyAod2l0aCBuYW1lcyBvdGhlciB0aGF0IC5r ZXJtcmMpIHRoYXQgZG8gTk9UIGluY2x1ZGUgYW4KLSJleGl0IiBjb21tYW5kLCBhbmQgaW52b2tl IHRob3NlIHdoZW4geW91IG5lZWQgdGhlIHNldHRpbmdzLCBtYWNybwotZGVmaW5pdGlvbnMsIGFu ZC9vciBzY3JpcHRlZCBhY3Rpb25zIHRoZXkgY29udGFpbiwgYW5kIGludm9rZSBDXChoeUtlcm1p dAotZGlyZWN0bHkgd2hlbiB5b3UgZG9uJ3QuCi0uUFAKLVRvIHB1dCBpdCBhbm90aGVyIHdheS4u LiBXZSBzdGlsbCBkaXN0cmlidXRlIHRoZSBzdGFuZGFyZCBpbml0aWFsaXphdGlvbgotZmlsZSBz aW5jZSBpdCdzIGZlYXR1cmVkIGluIHRoZSBtYW51YWwgYW5kIGJhY2t3YXJkcyBjb21wYXRpYmls aXR5IGlzCi1pbXBvcnRhbnQgdG8gdXMuIEJ1dCB0aGVyZSdzIG5vIGhhcm0gaW4gbm90IHVzaW5n IGl0IGlmIHlvdSBkb24ndCBuZWVkIHRoZQotc3R1ZmYgdGhhdCdzIGluIGl0IChzZXJ2aWNlcyBk aXJlY3RvcnksIGRpYWxpbmcgZGlyZWN0b3J5LCBuZXR3b3JrCi1kaXJlY3RvcnksIGFuZCBhc3Nv Y2lhdGVkIG1hY3JvIGRlZmluaXRpb25zKS4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZXJlCi1h cmUgc2V0dGluZ3Mgb3IgbWFjcm9zIHlvdSB3YW50IGluIGVmZmVjdCBFVkVSWSB0aW1lIHlvdSB1 c2UgS2VybWl0LCB0aGUKLWluaXRpYWxpemF0aW9uIGZpbGUgKG9yIHRoZSBjdXN0b21pemF0aW9u IGZpbGUgaXQgY2hhaW5zIHRvKSBpcyB0aGUgcGxhY2UKLXRvIHB1dCB0aGVtLCBiZWNhdXNlIHRo YXQncyB0aGUgb25seSBwbGFjZSBLZXJtaXQgbG9va3MgZm9yIHRoZW0KLWF1dG9tYXRpY2FsbHkg ZWFjaCB0aW1lIHlvdSBzdGFydCBpdC4KLS5TSCBNT0RFUyBPRiBPUEVSQVRJT04KLUtlcm1pdCBp cyBzYWlkIHRvIGJlIGluIExvY2FsIG1vZGUgaWYgaXQgaGFzIG1hZGUgYSBjb25uZWN0aW9uIHRv IGFub3RoZXIKLWNvbXB1dGVyLCBlLmcuIGJ5IGRpYWxpbmcgaXQgb3IgZXN0YWJsaXNoaW5nIGEg VGVsbmV0IGNvbm5lY3Rpb24gdG8gaXQuIFRoZQotb3RoZXIgY29tcHV0ZXIgaXMgcmVtb3RlLCBz byBpZiB5b3Ugc3RhcnQgYW5vdGhlciBjb3B5IG9mIEtlcm1pdCBvbiB0aGUKLXJlbW90ZSBjb21w dXRlciwgaXQgaXMgc2FpZCB0byBiZSBpbiBSZW1vdGUgbW9kZSAoYXMgbG9uZyBhcyBpdCBoYXMg bm90Ci1tYWRlIGFueSBjb25uZWN0aW9ucyBvZiBpdHMgb3duKS4gVGhlIGxvY2FsIEtlcm1pdCBj b21tdW5pY2F0ZXMgb3ZlciB0aGUKLWNvbW11bmljYXRpb25zIGRldmljZSBvciBuZXR3b3JrIGNv bm5lY3Rpb24sIGFjdGluZyBhcyBhIGNvbmR1aXQgYmV0d2VlbgotdGhlIHRoZSByZW1vdGUgY29t cHV0ZXIgYW5kIHlvdXIga2V5Ym9hcmQgYW5kIHNjcmVlbi4gVGhlIHJlbW90ZSBLZXJtaXQgaXMK LXRoZSBmaWxlXChoeXRyYW5zZmVyIHBhcnRuZXIgdG8gdGhlIGxvY2FsIEtlcm1pdCBhbmQgY29t bXVuaWNhdGVzIG9ubHkgdGhyb3VnaAotaXRzIHN0YW5kYXJkIGlucHV0IGFuZCBvdXRwdXQuCi0u UFAKLUF0IGFueSBtb21lbnQsIGEgS2VybWl0IHByb2dyYW0gY2FuIGJlIGluIGFueSBvZiB0aGUg Zm9sbG93aW5nIHN0YXRlcy4gSXQncwotaW1wb3J0YW50IHRvIGtub3cgd2hhdCB0aGV5IGFyZSBh bmQgaG93IHRvIGNoYW5nZSBmcm9tIG9uZSB0byB0aGUgb3RoZXIuCi0uVFAKLUNvbW1hbmQgc3Rh dGUKLUluIHRoaXMgc3RhdGUsIEtlcm1pdCByZWFkcyBjb21tYW5kcyBmcm9tOgotLnNwCi1cKGJ1 CVlvdXIga2V5Ym9hcmQ7IG9yOgotLmJyCi1cKGJ1CUEgZmlsZSwgb3I6Ci0uYnIKLVwoYnUJQSBt YWNybyBkZWZpbml0aW9uLgotLnNwCi1Zb3UgY2FuIGV4aXQgZnJvbSBDb21tYW5kIHN0YXRlIGJh Y2sgdG8gVW5peCB3aXRoIHRoZSBFWElUIG9yIFFVSVQKLWNvbW1hbmQgKHNhbWUgdGhpbmcpLiBZ b3UgY2FuIGVudGVyIENvbm5lY3Qgc3RhdGUgd2l0aCBhbnkgb2YgdmFyaW91cwotY29tbWFuZHMg KENPTk5FQ1QsIERJQUwsIFRFTE5FVCwgZXRjKS4gWW91IGNhbiBlbnRlciBmaWxlIHRyYW5zZmVy Ci1zdGF0ZSB3aXRoIGNvbW1hbmRzIGxpa2UgU0VORCwgUkVDRUlWRSwgYW5kIEdFVC4gWW91IGNh biBlbnRlciBTZXJ2ZXIKLXN0YXRlIHdpdGggdGhlIFNFUlZFUiBjb21tYW5kLiBUaGUgVEFLRSBj b21tYW5kIHRlbGxzIEtlcm1pdCB0byByZWFkCi1hbmQgZXhlY3V0ZSBjb21tYW5kcyBmcm9tIGEg ZmlsZS4gVGhlIChwZXJoYXBzIGltcGxpZWQpIERPIGNvbW1hbmQKLXRlbGxzIEtlcm1pdCB0byBy ZWFkIGFuZCBleGVjdXRlIGNvbW1hbmRzIGZyb20gYSBtYWNybyBkZWZpbml0aW9uLgotV2hpbGUg aW4gQ29tbWFuZCBzdGF0ZSwgeW91IGNhbiBpbnRlcnJ1cHQgYW55IGNvbW1hbmQsIG1hY3JvLCBv cgotY29tbWFuZCBmaWxlIGJ5IHR5cGluZyBDdHJsXC1DIChob2xkIGRvd24gdGhlIEN0cmwga2V5 IGFuZCBwcmVzcyB0aGUgQwota2V5KTsgdGhpcyBub3JtYWxseSBicmluZ3MgeW91IGJhY2sgdG8g dGhlIHByb21wdC4KLS5UUAotU2hlbGwgc3RhdGUKLVlvdSBjYW4gaW52b2tlIGFuIGluZmVyaW9y IHNoZWxsIG9yIGV4dGVybmFsIGNvbW1hbmQgZnJvbSB0aGUgS2VybWl0Ci1jb21tYW5kIHByb21w dCBieSB1c2luZyB0aGUgUFVTSCwgUlVOICghKSwgRURJVCwgb3IgQlJPV1NFIGNvbW1hbmQuCi1X aGlsZSB0aGUgaW5mZXJpb3Igc2hlbGwgb3IgY29tbWFuZCBpcyBhY3RpdmUsIEtlcm1pdCBpcyBz dXNwZW5kZWQgYW5kCi1kb2VzIG5vdGhpbmcuIFJldHVybiB0byBLZXJtaXQgQ29tbWFuZCBzdGF0 ZSBieSBleGl0aW5nIGZyb20gdGhlCi1pbmZlcmlvciBzaGVsbCBvciBhcHBsaWNhdGlvbi4KLS5U UAotQ29ubmVjdCBzdGF0ZQotSW4gdGhpcyBzdGF0ZSwgd2hpY2ggY2FuIGJlIGVudGVyZWQgb25s eSB3aGVuIGluIExvY2FsIG1vZGUgKGkuZS4gd2hlbgotS2VybWl0IGhhcyBtYWRlIGEgY29ubmVj dGlvbiB0byBhbm90aGVyIGNvbXB1dGVyKSwgS2VybWl0IGlzIGFjdGluZyBhcwotYSB0ZXJtaW5h bCB0byB0aGUgcmVtb3RlIGNvbXB1dGVyLiBZb3VyIGtleXN0cm9rZXMgYXJlIHNlbnQgdG8gdGhl Ci1yZW1vdGUgY29tcHV0ZXIgYW5kIGNoYXJhY3RlcnMgdGhhdCBhcnJpdmUgb3ZlciB0aGUgY29t bXVuaWNhdGlvbgotY29ubmVjdGlvbiBhcmUgZGlzcGxheWVkIG9uIHlvdXIgc2NyZWVuLiBUaGlz IHN0YXRlIGlzIGVudGVyZWQgd2hlbgoteW91IGdpdmUgYSBDT05ORUNULCBESUFMLCBURUxORVQs IFJMT0dJTiwgb3IgSUtTRCBjb21tYW5kLiBZb3UgY2FuCi1yZXR1cm4gdG8gY29tbWFuZCBzdGF0 ZSBieSBsb2dnaW5nIG91dCBvZiB0aGUgcmVtb3RlIGNvbXB1dGVyLCBvciBieQotdHlwaW5nOgot LnNwCi0gIEN0cmxcLVxlYwotLnNwCi1UaGF0IGlzOiBIb2xkIGRvd24gdGhlIEN0cmwga2V5IGFu ZCBwcmVzcyB0aGUgYmFja3NsYXNoIGtleSwgdGhlbiBsZXQKLWdvIG9mIHRoZSBDdHJsIGtleSBh bmQgcHJlc3MgdGhlIEMga2V5LiBUaGlzIGlzIGNhbGxlZCBlc2NhcGluZyBiYWNrLgotQ2VydGFp biBvdGhlciBlc2NhcGVcKGh5bGV2ZWwgY29tbWFuZHMgYXJlIGFsc28gcHJvdmlkZWQ7IHR5cGUg Q3RybFwtXGU/Ci1mb3IgYSBsaXN0LiBGb3IgZXhhbXBsZSwgeW91IGNhbiBlbnRlciBTaGVsbCBz dGF0ZSB3aXRoOgotLnNwCi0gIEN0cmxcLVxlIQotLnNwCi1UbyBzZW5kIGEgQ3RybFwtXGUgdG8g dGhlIGhvc3Qgd2hpbGUgaW4gQ29ubmVjdCBzdGF0ZSwgdHlwZSB0d28gb2YgdGhlbQotaW4gYSBy b3cuIFNlZSBIRUxQIENPTk5FQ1QgYW5kIEhFTFAgU0VUIEVTQ0FQRSBmb3IgbW9yZSBpbmZvLgot LlRQCi1Mb2NhbCBmaWxlXChoeXRyYW5zZmVyIHN0YXRlCi1JbiB0aGlzIHN0YXRlLCBLZXJtaXQg aXMgc2VuZGluZyBwYWNrZXRzIGJhY2sgYW5kIGZvcnRoIHdpdGggdGhlIG90aGVyCi1jb21wdXRl ciBpbiBvcmRlciB0byB0cmFuc2ZlciBhIGZpbGUgb3IgYWNjb21wbGlzaCBzb21lIG90aGVyCi1m aWxlXChoeXJlbGF0ZWQgdGFzay4gQW5kIGF0IHRoZSBzYW1lIHRpbWUsIGl0IGlzIGRpc3BsYXlp bmcgaXRzIHByb2dyZXNzCi1vbiB5b3VyIHNjcmVlbiBhbmQgd2F0Y2hpbmcgeW91ciBrZXlib2Fy ZCBmb3IgaW50ZXJydXB0aW9ucy4gSW4gdGhpcwotc3RhdGUsIHRoZSBmb2xsb3dpbmcgc2luZ2xl XChoeWtleXN0cm9rZSBjb21tYW5kcyBhcmUgYWNjZXB0ZWQ6Ci0uc3AKLS5SUwotLlRQCi1YCi1J bnRlcnJ1cHQgdGhlIGN1cnJlbnQgZmlsZSBhbmQgZ28gb24gdG8gdGhlIG5leHQgKGlmIGFueSku Ci0uVFAKLVoKLUludGVycnVwdCB0aGUgY3VycmVudCBmaWxlIGFuZCBza2lwIGFsbCB0aGUgcmVz dC4KLS5UUAotRQotTGlrZSBaIGJ1dCB1c2VzIGEgInN0cm9uZ2VyIiBwcm90b2NvbCAodXNlIGlm IFggb3IgWiBkb24ndCB3b3JrKS4KLS5UUAotQ3RybFwtQwotSW50ZXJydXB0IGZpbGVcKGh5dHJh bnNmZXIgbW9kZSAodXNlIGlmIFogb3IgRSBkb24ndCB3b3JrKS4KLS5zcAotLlJFCi1LZXJtaXQg cmV0dXJucyB0byBpdHMgcHJldmlvdXMgc3RhdGUgKENvbW1hbmQgb3IgQ29ubmVjdCkgd2hlbiB0 aGUKLXRyYW5zZmVyIGlzIGNvbXBsZXRlIG9yIHdoZW4gaW50ZXJydXB0ZWQgc3VjY2Vzc2Z1bGx5 IGJ5IFgsIFosIEUsIG9yCi1DdHJsXC1DIChob2xkIGRvd24gdGhlIEN0cmwga2V5IGFuZCBwcmVz cyB0aGUgQyBrZXkpLgotLlRQCi1SZW1vdGUgZmlsZVwoaHl0cmFuc2ZlciBzdGF0ZQotSW4gdGhp cyBzdGF0ZSwgS2VybWl0IGlzIGV4Y2hhbmdpbmcgZmlsZVwoaHl0cmFuc2ZlciBwYWNrZXRzIHdp dGggaXRzCi1sb2NhbCBwYXJ0bmVyIG92ZXIgaXRzIHN0YW5kYXJkIGkvby4gSXQgbGVhdmVzIHRo aXMgc3RhdGUKLWF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgdHJhbnNmZXIgaXMgY29tcGxldGUuIElu IGNhc2UgeW91IGZpbmQgeW91cgotbG9jYWwgS2VybWl0IGluIENvbm5lY3Qgc3RhdGUgYW5kIHRo ZSByZW1vdGUgb25lIGluIEZpbGVcKGh5dHJhbnNmZXIKLXN0YXRlIChpbiB3aGljaCBpdCBzZWVt cyB0byBpZ25vcmUgeW91ciBrZXlzdHJva2VzKSwgeW91IGNhbiB1c3VhbGx5Ci1yZXR1cm4gaXQg dG8gY29tbWFuZCBzdGF0ZSBieSB0eXBpbmcgdGhyZWUgQ3RybFwtQydzIGluIGEgcm93LiBJZiB0 aGF0Ci1kb2Vzbid0IHdvcmssIHJldHVybiB5b3VyIGxvY2FsIEtlcm1pdCB0byBDb21tYW5kIHN0 YXRlIChDdHJsXC1cZSBDKSBhbmQKLXR5cGUgImVcKGh5cGFja2V0IiBhbmQgdGhlbiBwcmVzcyB0 aGUgUmV0dXJuIG9yIEVudGVyIGtleTsgdGhpcyBmb3JjZXMgYQotZmF0YWwgS2VybWl0IHByb3Rv Y29sIGVycm9yLgotLlRQCi1SZW1vdGUgU2VydmVyIHN0YXRlCi1UaGlzIGlzIGxpa2UgUmVtb3Rl IEZpbGVcKGh5dHJhbnNmZXIgc3RhdGUsIGV4Y2VwdCBpdCBuZXZlciByZXR1cm5zCi1hdXRvbWF0 aWNhbGx5IHRvIENvbW1hbmQgc3RhdGUuIFJhdGhlciwgaXQgYXdhaXRzIGZ1cnRoZXIgaW5zdHJ1 Y3Rpb25zCi1mcm9tIHRoZSBjbGllbnQgcHJvZ3JhbTsgdGhhdCBpcywgZnJvbSB5b3VyIExvY2Fs IEtlcm1pdCBwcm9ncmFtLiBZb3UKLWNhbiByZXR1cm4gdGhlIFJlbW90ZSBTZXJ2ZXIgdG8gaXRz IHByZXZpb3VzIHN0YXRlIGJ5IGlzc3VpbmcgYQotImZpbmlzaCIgY29tbWFuZCB0byB0aGUgY2xp ZW50LCBvciBpZiB5b3UgYXJlIGluIENvbm5lY3Qgc3RhdGUsIGJ5Ci10eXBpbmcgdGhyZWUgQ3Ry bFwtQydzIGluIGEgcm93LiBZb3UgY2FuIHRlbGwgdGhlIHNlcnZlciBqb2IgdG8gbG9nIG91dAot YW5kIGJyZWFrIHRoZSBjb25uZWN0aW9uIGJ5IGlzc3VpbmcgYSAiYnllIiBjb21tYW5kIHRvIHRo ZSBjbGllbnQuCi0uVFAKLUxvY2FsIFNlcnZlciBzdGF0ZQotTGlrZSBSZW1vdGVcKGh5U2VydmVy IHN0YXRlLCBidXQgaW4gbG9jYWwgbW9kZSwgYW5kIHRoZXJlZm9yZSB3aXRoIGl0cwotZmlsZVwo aHl0cmFuc2ZlciBkaXNwbGF5IHNob3dpbmcsIGFuZCBsaXN0ZW5pbmcgZm9yIHNpbmdsZVwoaHlr ZXkgY29tbWFuZHMsCi1hcyBpbiBMb2NhbCBGaWxlXChoeXRyYW5zZmVyIHN0YXRlLiBVc3VhbGx5 IHRoaXMgc3RhdGUgaXMgZW50ZXJlZAotYXV0b21hdGljYWxseSB3aGVuIGEgcmVtb3RlIEtlcm1p dCBwcm9ncmFtIGdpdmVzIGEgR0VUIGNvbW1hbmQuCi0uc3AKLUNcKGh5S2VybWl0LCBLZXJtaXQg OTUsIGFuZCBNU1woaHlET1MgS2VybWl0IGFsbCBjYW4gc3dpdGNoIGF1dG9tYXRpY2FsbHkgZnJv bQotQ29ubmVjdCBzdGF0ZSB0byBMb2NhbCBGaWxlXChoeXRyYW5zZmVyIHN0YXRlIHdoZW4geW91 IGluaXRpYXRlIGEgZmlsZQotdHJhbnNmZXIgZnJvbSB0aGUgcmVtb3RlIGNvbXB1dGVyIGJ5IHN0 YXJ0aW5nIEtlcm1pdCBhbmQgdGVsbGluZyBpdCB0byBzZW5kCi1vciBnZXQgYSBmaWxlLCBpbiB3 aGljaCBjYXNlLCBDb25uZWN0IHN0YXRlIGlzIGF1dG9tYXRpY2FsbHkgcmVzdW1lZCBhZnRlcgot dGhlIGZpbGUgdHJhbnNmZXIgaXMgZmluaXNoZWQuCi0uc3AKLU5vdGUgdGhhdCBDXChoeUtlcm1p dCBpcyBub3QgYSB0ZXJtaW5hbCBlbXVsYXRvci4gSXQgaXMgYSBjb21tdW5pY2F0aW9ucwotYXBw bGljYXRpb24gdGhhdCB5b3UgcnVuIGluIGEgdGVybWluYWwgd2luZG93IChlLmcuIGNvbnNvbGUg b3IgWHRlcm0pLiBUaGUKLXNwZWNpZmljIGVtdWxhdGlvbiwgc3VjaCBhcyBWVDEwMCwgVlQyMjAs IExpbnV4IENvbnNvbGUsIG9yIFh0ZXJtLCBpcwotcHJvdmlkZWQgYnkgdGhlIHRlcm1pbmFsIHdp bmRvdyBpbiB3aGljaCB5b3UgYXJlIHJ1bm5pbmcgQ1woaHlLZXJtaXQuIEtlcm1pdAotOTUgYW5k IE1TXChoeURPUyBLZXJtaXQsIG9uIHRoZSBvdGhlciBoYW5kLCBhcmUgdHJ1ZSB0ZXJtaW5hbCBl bXVsYXRvcnMuIFdoeQotaXMgQ1woaHlLZXJtaXQgbm90IGEgdGVybWluYWwgZW11bGF0b3I/IENM SUNLIEhFUkUgdG8gcmVhZCBhYm91dCBpdC4KLS5TSCBNQUtJTkcgQ09OTkVDVElPTlMKLUhlcmUg aXMgaG93IHRvIG1ha2UgZGlmZmVyZW50IGtpbmRzIG9mIGNvbm5lY3Rpb25zIHVzaW5nIGludGVy YWN0aXZlIEtlcm1pdAotY29tbWFuZHMgKGFzIG5vdGVkIGFib3ZlLCB5b3UgY2FuIGFsc28gbWFr ZSBjb25uZWN0aW9ucyB3aXRoIGNvbW1hbmRcKGh5bGluZQotb3B0aW9ucykuIE5vdGUgdGhhdCB5 b3UgZG9uJ3QgaGF2ZSB0byBtYWtlIGNvbm5lY3Rpb25zIHdpdGggS2VybWl0LiBJdCBjYW4KLWFs c28gYmUgdXNlZCBvbiB0aGUgZmFyIGVuZCBvZiBhIGNvbm5lY3Rpb24gYXMgdGhlIHJlbW90ZSBm aWxlIHRyYW5zZmVyIGFuZAotbWFuYWdlbWVudCBwYXJ0bmVyIG9mIHlvdXIgbG9jYWwgY29tbXVu aWNhdGlvbnMgc29mdHdhcmUuCi0uVFAKLU1ha2luZyBhIFRlbG5ldCBDb25uZWN0aW9uCi1BdCB0 aGUgQ1woaHlLZXJtaXQgY29tbWFuZCBwcm9tcHQsIHNpbXBseSB0eXBlOgotLnNwCi0ubmYKLSAg dGVsbmV0IGZvby5iYXIuY29tCi0uZmkKLS5zcAotKHN1YnN0aXR1dGluZyBkZXNpcmVkIGhvc3Ru YW1lIG9yIGFkZHJlc3MpLiAgCi1Zb3UgY2FuIGFsc28gaW5jbHVkZSBhIHBvcnQgbnVtYmVyOgot LnNwCi0ubmYKLSAgdGVsbmV0IHh5emNvcnAuY29tIDMwMDAgOyAKLS5maQotLnNwCi1JZiB0aGUg Y29ubmVjdGlvbiBpcyBzdWNjZXNzZnVsLCBLZXJtaXQgYXV0b21pY2FsbHkgZW50ZXJzIENvbm5l Y3QKLXN0YXRlLiBXaGVuIHlvdSBsb2dvdXQgZnJvbSB0aGUgcmVtb3RlIGhvc3QsIEtlcm1pdCBh dXRvbWF0aWNhbGx5Ci1yZXR1cm5zIHRvIGl0cyBwcm9tcHQuIE1vcmUgaW5mbzogSEVMUCBURUxO RVQsIEhFTFAgU0VUIFRFTE5FVCwgSEVMUAotU0VUIFRFTE9QVC4gQWxzbyBzZWUgdGhlIElLU0Qg c2VjdGlvbiBiZWxvdy4KLS5UUAotTWFraW5nIGFuIFJsb2dpbiBjb25uZWN0aW9uCi1UaGlzIGlz IGp1c3QgbGlrZSBUZWxuZXQsIGV4Y2VwdCB5b3UgaGF2ZSB0byBiZSByb290IHRvIGRvIGl0IGJl Y2F1c2UKLVJsb2dpbiB1c2VzIGEgcHJpdmlsZWdlZCBUQ1AgcG9ydDoKLS5zcAotLm5mCi0gIHJs b2dpbiBmb28uYmFyLmNvbQotLmZpCi0uc3AKLU1vcmUgaW5mbzogSEVMUCBSTE9HSU4uCi0uVFAK LU1ha2luZyBhbiBTU0ggQ29ubmVjdGlvbgotVW5saWtlIFRlbG5ldCBhbmQgUmxvZ2luLCBTU0gg Y29ubmVjdGlvbnMgYXJlIG5vdCBidWlsdFwoaHlpbiwgYnV0Ci1oYW5kbGVkIGJ5IHJ1bm5pbmcg eW91ciBleHRlcm5hbCBTU0ggY2xpZW50IHRocm91Z2ggYSBwc2V1ZG90ZXJtaW5hbC4KLVVzaW5n IENcKGh5S2VybWl0IHRvIGNvbnRyb2wgdGhlIFNTSCBjbGllbnQgZ2l2ZXMgeW91IGFsbCBvZiBL ZXJtaXQncwotZmVhdHVyZXMgKGZpbGUgdHJhbnNmZXIsIGNoYXJhY3RlclwoaHlzZXQgY29udmVy c2lvbiwgc2NyaXB0aW5nLCBldGMpCi1vdmVyIFNTSC4KLS5zcAotICBzc2ggZm9vLmJhci5jb20K LS5zcAotTW9yZSBpbmZvOiBIRUxQIFNTSCwgSEVMUCBTRVQgU1NILgotLlRQCi1EaWFsaW5nIHdp dGggYSBNb2RlbQotSWYgaXQncyBhbiBleHRlcm5hbCBtb2RlbSwgbWFrZSBzdXJlIGl0IGlzIGNv bm5lY3RlZCB0byBhIHVzYWJsZQotc2VyaWFsIHBvcnQgb24geW91ciBjb21wdXRlciB3aXRoIGEg cmVndWxhciAoc3RyYWlnaHRcKGh5dGhyb3VnaCkgbW9kZW0KLWNhYmxlLCBhbmQgdG8gdGhlIHRl bGVwaG9uZSBqYWNrIHdpdGggYSB0ZWxlcGhvbmUgY2FibGUsIGFuZCB0aGF0IGl0J3MKLXR1cm5l ZCBvbi4gVGhlbiB1c2UgdGhlc2UgY29tbWFuZHM6Ci0uc3AKLS5uZgotICBzZXQgbW9kZW0gdHlw ZSB1c3JvYm90aWNzICA7IE9yIG90aGVyIHN1cHBvcnRlZCB0eXBlCi0gIHNldCBsaW5lIC9kZXYv dHR5UzAgICAgICAgIDsgU3BlY2lmeSBkZXZpY2UgbmFtZQotICBzZXQgc3BlZWQgNTc2MDAgICAg ICAgICAgICA7IE9yIG90aGVyIGRlc2lyZWQgc3BlZWQKLSAgc2V0IGZsb3cgcnRzL2N0cyAgICAg ICAgICAgOyBNb3N0IG1vZGVybiBtb2RlbXMgc3VwcG9ydCB0aGlzCi0gIHNldCBkaWFsIG1ldGhv ZCB0b25lICAgICAgIDsgKG9yIHB1bHNlKQotICBkaWFsIDc2NTQzMjEgICAgICAgICAgICAgICA7 IERpYWwgdGhlIGRlc2lyZWQgbnVtYmVyCi0uZmkKLS5zcAotVHlwZSAic2V0IG1vZGVtIHR5cGUg PyIgZm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQgbW9kZW0gdHlwZXMuIElmIHlvdQotb21pdCB0aGUg U0VUIE1PREVNIFRZUEUgY29tbWFuZCwgdGhlIGRlZmF1bHQgdHlwZSBpcwotImdlbmVyaWNcKGh5 aGlnaFwoaHlzcGVlZCIsIHdoaWNoIHNob3VsZCB3b3JrIGZvciBtb3N0IG1vZGVybiBBVFwoaHlj b21tYW5kXChoeXNldAotbW9kZW1zLiBJZiB0aGUgbGluZSBpcyBidXN5LCBLZXJtaXQgcmVkaWFs cyBhdXRvbWF0aWNhbGx5LiBJZiB0aGUgY2FsbAotZG9lcyBub3Qgc3VjY2VlZCwgdXNlICJzZXQg ZGlhbCBkaXNwbGF5IG9uIiBhbmQgdHJ5IGl0IGFnYWluIHRvIHdhdGNoCi13aGF0IGhhcHBlbnMu IElmIHRoZSBjYWxsIHN1Y2NlZWRzLCBLZXJtaXQgZW50ZXJzIENvbm5lY3Qgc3RhdGUKLWF1dG9t YXRpY2FsbHkgYW5kIHJldHVybnMgdG8gaXRzIHByb21wdCBhdXRvbWF0aWNhbGx5IHdoZW4geW91 IGxvZyBvdXQKLWZyb20gdGhlIHJlbW90ZSBjb21wdXRlciBvciB0aGUgY29ubmVjdGlvbiBpcyBv dGhlcndpc2UgbG9zdC4KLS5zcAotWW91IGNhbiBhbHNvIGRpYWwgZnJvbSBhIG1vZGVtIHRoYXQg aXMgYWNjZXNzaWJsZSBieSBUZWxuZXQsIGUuZy4gdG8gYQotcmV2ZXJzZSB0ZXJtaW5hbCBzZXJ2 ZXIuIEluIHRoaXMgY2FzZSB0aGUgY29tbWFuZCBzZXF1ZW5jZSBpczoKLS5zcAotLm5mCi0gIHNl dCBob3N0IHRzLnh4eC5jb20gMjAwMCAgIDsgVGVybWluYWxcKGh5c2VydmVyIGFuZCBwb3J0Ci0g IHNldCBtb2RlbSB0eXBlIHVzcm9ib3RpY3MgIDsgT3Igb3RoZXIgc3VwcG9ydGVkIHR5cGUKLSAg c2V0IGRpYWwgbWV0aG9kIHRvbmUgICAgICAgOyAob3IgcHVsc2UpCi0gIGRpYWwgNzY1NDMyMSAg ICAgICAgICAgICAgIDsgRGlhbCB0aGUgZGVzaXJlZCBudW1iZXIKLS5maQotLnNwCi1JZiB0aGUg dGVybWluYWwgc2VydmVyIHN1cHBvcnRzIHRoZSBUZWxuZXQgQ29tIFBvcnQgT3B0aW9uLCBSRkMg MjIxNywKLXlvdSBjYW4gYWxzbyBnaXZlIHNlcmlhbFwoaHlwb3J0IHJlbGF0ZWQgY29tbWFuZHMg c3VjaCBhcyBTRVQgU1BFRUQsIFNFVAotUEFSSVRZLCBhbmQgc28gb24sIGFuZCBLZXJtaXQgcmVs YXlzIHRoZW0gdG8gdGhlIHRlcm1pbmFsIHNlcnZlciB1c2luZwotdGhlIHByb3RvY29sIHNwZWNp ZmllZCBpbiB0aGUgUkZDLgotLnNwCi1Nb3JlIGluZm86IEhFTFAgU0VUIE1PREVNLCBIRUxQIFNF VCBMSU5FLCBIRUxQIFNFVCBTUEVFRCwgSEVMUCBTRVQKLUZMT1csIEhFTFAgRElBTCwgSEVMUCBT RVQgRElBTCwgSEVMUCBTRVQgTU9ERU0sIEhFTFAgU0VUIAotQ0FSUklFUlwtV0FUQ0gsIFNIT1cg Q09NTVVOSUNBVElPTlMsIFNIT1cgTU9ERU0sIFNIT1cgRElBTC4KLS5UUAotRGlyZWN0IFNlcmlh bCBQb3J0Ci1Db25uZWN0IHRoZSB0d28gY29tcHV0ZXJzLCBBIGFuZCBCLCB3aXRoIGEgbnVsbCBt b2RlbSBjYWJsZSAob3IgdHdvCi1tb2RlbSBjYWJsZXMgaW50ZXJjb25uZWN0ZWQgd2l0aCBhIG51 bGxcKGh5bW9kZW0gYWRhcHRlciBvciBtb2RlbQotZWxpbWluYXRvcikuIEZyb20gQ29tcHV0ZXIg QToKLS5zcAotLm5mCi0gIHNldCBtb2RlbSB0eXBlIG5vbmUgICA7IFRoZXJlIGlzIG5vIG1vZGVt Ci0gIHNldCBsaW5lIC9kZXYvdHR5UzAgICA7IFNwZWNpZnkgZGV2aWNlIG5hbWUKLSAgc2V0IGNh cnJpZXJcLXdhdGNoIG9mZiA7IElmIERUUiBDRCBhcmUgbm90IGNyb3NzXChoeWNvbm5lY3RlZAot ICBzZXQgc3BlZWQgNTc2MDAgICAgICAgOyBPciBvdGhlciBkZXNpcmVkIHNwZWVkCi0gIHNldCBm bG93IHJ0cy9jdHMgICAgICA7IElmIFJUUyBhbmQgQ1RTIGFyZSBjcm9zc1woaHljb25uZWN0ZWQK LSAgc2V0IHBhcml0eSBldmVuICAgICAgIDsgKG9yICJtYXJrIiBvciAic3BhY2UiLCBpZiBuZWNl c3NhcnkpCi0gIHNldCBzdG9wXC1iaXRzIDIgICAgICAgOyAocmFyZWx5IG5lY2Vzc2FyeSkKLSAg c2V0IGZsb3cgeG9uL3hvZmYgICAgIDsgSWYgeW91IGNhbid0IHVzZSBSVFMvQ1RTCi0gIGNvbm5l Y3QgICAgICAgICAgICAgICA7IEVudGVyIENvbm5lY3QgKHRlcm1pbmFsKSBzdGF0ZQotLmZpCi0u c3AKLVRoaXMgYXNzdW1lcyBDb21wdXRlciBCIGlzIHNldCB1cCB0byBsZXQgeW91IGxvZyBpbi4g SWYgaXQgaXNuJ3QsIHlvdSAKLWNhbiBydW4gYSBjb3B5IG9mIEtlcm1pdCBvbiBDb21wdXRlciBC IGFuZCBmb2xsb3cgYXBwcm94aW1hdGVseSB0aGUKLXNhbWUgZGlyZWN0aW9ucy4gTW9yZSBpbmZv OiBBcyBhYm92ZSBwbHVzIEhFTFAgQ09OTkVDVC4KLS5QUAotV2l0aCBtb2RlbXMgb3IgZGlyZWN0 IHNlcmlhbCBjb25uZWN0aW9ucywgeW91IG1pZ2h0IGFsc28gaGF2ZSB0byAic2V0Ci1wYXJpdHkg ZXZlbiIgKG9yICJtYXJrIiBvciAic3BhY2UiKSBpZiBpdCdzIGEgN1woaHliaXQgY29ubmVjdGlv bi4KLS5QUAotT2YgdGhlIGNvbm5lY3Rpb24gdHlwZXMgbGlzdGVkIGFib3ZlLCBvbmx5IG9uZSBj YW4gYmUgb3BlbiBhdCBhIHRpbWUuCi1Ib3dldmVyLCBhbnkgb25lIG9mIHRoZXNlIGNhbiBiZSBv cGVuIGNvbmN1cnJlbnRseSB3aXRoIGFuIEZUUCBvciBIVFRQCi1zZXNzaW9uLiBFYWNoIGNvbm5l Y3Rpb24gdHlwZSBjYW4gYmUgY3VzdG9taXplZCB0byBhbnkgZGVzaXJlZCBkZWdyZWUsCi1zY3Jp cHRlZCwgbG9nZ2VkLCB5b3UgbmFtZSBpdC4gU2VlIHRoZSBtYW51YWwuCi0uUFAKLU5PVEU6IE9u IHNlbGVjdGVkIHBsYXRmb3JtcywgQ1woaHlLZXJtaXQgYWxzbyBjYW4gbWFrZSBYLjI1IGNvbm5l Y3Rpb25zLiBTZWUKLXRoZSBtYW51YWwgZm9yIGRldGFpbHMuCi0uU0ggVFJBTlNGRVJSSU5HIEZJ TEVTIFdJVEggS0VSTUlUCi1UaGVyZSBpcyBhIHdpZGVzcHJlYWQgYW5kIHBlcnNpc3RlbnQgYmVs aWVmIHRoYXQgS2VybWl0IGlzIGEgc2xvdyBwcm90b2NvbC4KLVRoaXMgaXMgYmVjYXVzZSwgdW50 aWwgcmVjZW50bHksIGl0IHVzZWQgY29uc2VydmF0aXZlIHR1bmluZyBieSBkZWZhdWx0IHRvCi1t YWtlIHN1cmUgZmlsZSB0cmFuc2ZlcnMgc3VjY2VlZGVkLCByYXRoZXIgdGhhbiBmYWlsaW5nIGJl Y2F1c2UgdGhleQotb3ZlcmxvYWRlZCB0aGUgY29ubmVjdGlvbi4gU29tZSBleHRyYSBjb21tYW5k cyAob3IgY29tbWFuZFwoaHlsaW5lIG9wdGlvbnMsCi1saWtlIFwtUSkgd2VyZSBuZWVkZWQgdG8g bWFrZSBpdCBnbyBmYXN0LCBidXQgbm9ib2R5IGJvdGhlcmVkIHRvIGZpbmQgb3V0Ci1hYm91dCB0 aGVtLiBBbHNvLCBpdCB0YWtlcyB0d28gdG8gdGFuZ286IG1vc3Qgbm9uXChoeUtlcm1pdFwoaHlQ cm9qZWN0IEtlcm1pdAotcHJvdG9jb2wgaW1wbGVtZW50YXRpb25zIHJlYWxseSBBUkUgc2xvdy4g VGhlIGJlc3QgZmlsZVwoaHl0cmFuc2ZlciBwYXJ0bmVycwotZm9yIENcKGh5S2VybWl0IGFyZTog YW5vdGhlciBjb3B5IG9mIENcKGh5S2VybWl0ICg3LjAgb3IgbGF0ZXIpIGFuZCBLZXJtaXQgOTUu Ci1UaGVzZSBjb21iaW5hdGlvbnMgd29yayB3ZWxsIGFuZCB0aGV5IHdvcmsgZmFzdCBieSBkZWZh dWx0LiBNU1woaHlET1MgS2VybWl0Ci1pcyBnb29kIHRvbywgYnV0IHlvdSBoYXZlIHRvIHRlbGwg aXQgdG8gZ28gZmFzdCAoYnkgZ2l2aW5nIGl0IHRoZSBGQVNUCi1jb21tYW5kKS4KLS5QUAotRnVy dGhlcm1vcmUsIGFsbCB0aHJlZSBvZiB0aGVzZSBLZXJtaXQgcHJvZ3JhbXMgc3VwcG9ydCAiYXV0 b2Rvd25sb2FkIiBhbmQKLSJhdXRvdXBsb2FkIiwgbWVhbmluZyB0aGF0IHdoZW4gdGhleSBhcmUg aW4gQ29ubmVjdCBzdGF0ZSBhbmQgYSBLZXJtaXQKLXBhY2tldCBjb21lcyBpbiBmcm9tIHRoZSBy ZW1vdGUsIHRoZXkgYXV0b21hdGljYWxseSBzd2l0Y2ggaW50byBmaWxlCi10cmFuc2ZlciBtb2Rl LgotLlBQCi1BbmQgcGx1cywgQ1woaHlLZXJtaXQgYW5kIEs5NSBhbHNvIHN3aXRjaCBhdXRvbWF0 aWNhbGx5IGJldHdlZW4gdGV4dCBhbmQKLWJpbmFyeSBtb2RlIGZvciBlYWNoIGZpbGUsIHNvIHRo ZXJlIGlzIG5vIG5lZWQgdG8gInNldCBmaWxlIHR5cGUgYmluYXJ5IiBvcgotInNldCBmaWxlIHR5 cGUgdGV4dCIsIG9yIHRvIHdvcnJ5IGFib3V0IGZpbGVzIGJlaW5nIGNvcnJ1cHRlZCBiZWNhdXNl IHRoZXkKLXdlcmUgdHJhbnNmZXJyZWQgaW4gdGhlIHdyb25nIG1vZGUuCi0uUFAKLVdoYXQgYWxs IG9mIHRoZXNlIHdvcmRzIGFkZCB1cCB0byBpcyB0aGF0IG5vdywgd2hlbiB5b3UgdXNlIHVwXCho eXRvXChoeWRhdGUKLUtlcm1pdCBzb2Z0d2FyZSBmcm9tIHRoZSBLZXJtaXQgUHJvamVjdCwgZmls ZSB0cmFuc2ZlciBpcyBub3Qgb25seSBmYXN0LAotaXQncyByaWRpY3Vsb3VzbHkgZWFzeS4gWW91 IGJhcmVseSBoYXZlIHRvIGdpdmUgYW55IGNvbW1hbmRzIGF0IGFsbC4KLS5UUAotRG93bmxvYWRp bmcgRmlsZXMKLUxldCdzIHNheSB5b3UgaGF2ZSBLZXJtaXQgOTUsIENcKGh5S2VybWl0LCBvciBN U1woaHlET1MgS2VybWl0IG9uIHlvdXIKLWRlc2t0b3AgY29tcHV0ZXIsIHdpdGggYSBjb25uZWN0 aW9uIHRvIGEgVW5peCBjb21wdXRlciB0aGF0IGhhcwotQ1woaHlLZXJtaXQgaW5zdGFsbGVkIGFz ICJrZXJtaXQiLiBUbyBkb3dubG9hZCBhIGZpbGUgKHNlbmQgaXQgZnJvbSBVbml4Ci10byB5b3Vy IGRlc2t0b3AgY29tcHV0ZXIpLCBqdXN0IHR5cGUgdGhlIGZvbGxvd2luZyBjb21tYW5kIGF0IHlv dXIKLVVuaXggc2hlbGwgcHJvbXB0OgotLnNwCi0gIGtlcm1pdCBcLXMgb29mYS50eHQKLS5zcAot KHdoZXJlIG9vZmEudHh0IGlzIHRoZSBmaWxlbmFtZSkuIElmIHlvdSB3YW50IHRvIHNlbmQgbW9y ZSB0aGFuIG9uZQotZmlsZSwgeW91IGNhbiBwdXQgYXMgbWFueSBmaWxlbmFtZXMgYXMgeW91IHdh bnQgb24gdGhlIGNvbW1hbmQgbGluZSwKLWFuZCB0aGV5IGNhbiBiZSBhbnkgY29tYmluYXRpb24g b2YgdGV4dCBhbmQgYmluYXJ5OgotLnNwCi0gIGtlcm1pdCBcLXMgb29mYS50eHQgb29mYS56aXAg b29mYS5odG1sIG9vZmEudGFyLmd6Ci0uc3AKLWFuZC9vciB5b3UgY2FuIHVzZSB3aWxkY2FyZHMg dG8gc2VuZCBncm91cHMgb2YgZmlsZXM6Ci0uc3AKLSAga2VybWl0IFwtcyBvb2ZhLioKLS5zcAot SWYgeW91IHdhbnQgdG8gc2VuZCBhIGZpbGUgdW5kZXIgYW4gYXNzdW1lZCBuYW1lLCB1c2U6Ci0u c3AKLSAga2VybWl0IFwtcyBmcmlkYXkudHh0IFwtYSB0b2RheS50eHQKLS5zcAotVGhpcyBzZW5k cyB0aGUgZmlsZSBmcmlkYXkudHh0IGJ1dCB0ZWxscyB0aGUgcmVjZWl2aW5nIEtlcm1pdCB0aGF0 IGl0cwotbmFtZSBpcyB0b2RheS50eHQuIEluIGFsbCBjYXNlcywgYXMgbm90ZWQsIHdoZW4gdGhl IGZpbGUgdHJhbnNmZXIgaXMKLWZpbmlzaGVkLCB5b3VyIGRlc2t0b3AgS2VybWl0IHJldHVybnMg YXV0b21hdGljYWxseSB0byBDb25uZWN0IHN0YXRlLgotTm8gd29ycmllcyBhYm91dCBlc2NhcGlu ZyBiYWNrLCByZVwoaHljb25uZWN0aW5nLCB0ZXh0L2JpbmFyeSBtb2RlCi1zd2l0Y2hpbmcuIEFs bW9zdCB0b28gZWFzeSwgcmlnaHQ/Ci0uVFAKLVVwbG9hZGluZyBGaWxlcwotVG8gdXBsb2FkIGZp bGVzIChzZW5kIHRoZW0gZnJvbSB5b3VyIGRlc2t0b3AgY29tcHV0ZXIgdG8gdGhlIHJlbW90ZQot VW5peCBjb21wdXRlcikgZG8gdGhlIHNhbWUgdGhpbmcsIGJ1dCB1c2UgdGhlIFwtZyAoR0VUKSBv cHRpb24gaW5zdGVhZAotb2YgXC1zOgotLnNwCi0gIGtlcm1pdCBcLWcgb29mYS50eHQKLS5zcAot VGhpcyBjYXVzZXMgeW91ciBsb2NhbCBLZXJtaXQgdG8gZW50ZXIgc2VydmVyIG1vZGU7IHRoZW4g dGhlIHJlbW90ZQotS2VybWl0IHByb2dyYW0gcmVxdWVzdHMgdGhlIG5hbWVkIGZpbGUgYW5kIHRo ZSBsb2NhbCBLZXJtaXQgc2VuZHMgaXQKLWFuZCByZXR1cm5zIGF1dG9tYXRpY2FsbHkgdG8gQ29u bmVjdCBzdGF0ZSB3aGVuIGRvbmUuCi0uc3AKLUlmIHlvdSB3YW50IHRvIHVwbG9hZCBtdWx0aXBs ZSBmaWxlcywgeW91IGhhdmUgaGF2ZSB1c2Ugc2hlbGwgcXVvdGluZwotcnVsZXMsIHNpbmNlIHRo ZXNlIGFyZW4ndCBsb2NhbCBmaWxlczoKLS5zcAotLm5mCi0gIGtlcm1pdCBcLWcgIm9vZmEudHh0 IG9vZmEuemlwIG9vZmEuaHRtbCBvb2ZhLnRhci5neiIKLSAga2VybWl0IFwtZyAib29mYS4qIgot LmZpCi0uc3AKLUlmIHlvdSB3YW50IHRvIHVwbG9hZCBhIGZpbGUgYnV0IHN0b3JlIGl0IHVuZGVy IGEgZGlmZmVyZW50IG5hbWUsIHVzZToKLS5zcAotICBrZXJtaXQgXC1nIGZyaWRheS50eHQgXC1h IHRvZGF5LnR4dAotLlRQCi1LZXJtaXQgVHJhbnNmZXJzIHRoZSBPbGRcKGh5RmFzaGlvbmVkIFdh eQotSWYgeW91ciBkZXNrdG9wIGNvbW11bmljYXRpb25zIHNvZnR3YXJlIGRvZXMgbm90IHN1cHBv cnQgYXV0b3VwbG9hZCBvcgotYXV0b2Rvd25sb2FkLCBvciBpdCBkb2VzIG5vdCBpbmNsdWRlIEtl cm1pdCBzZXJ2ZXIgbW9kZSwgdGhlIHByb2NlZHVyZQotcmVxdWlyZXMgbW9yZSBzdGVwcy4KLS5z cAotVG8gZG93bmxvYWQgYSBmaWxlLCB0eXBlOgotLnNwCi0gIGtlcm1pdCBcLXMgZmlsZW5hbWUK LS5zcAotb24gdGhlIGhvc3QgYXMgYmVmb3JlLCBidXQgaWYgbm90aGluZyBoYXBwZW5zIGF1dG9t YXRpY2FsbHkgaW4KLXJlc3BvbnNlIHRvIHRoaXMgY29tbWFuZCwgeW91IGhhdmUgdG8gc3dpdGNo IHlvdXIgZGVza3RvcAotY29tbXVuaWNhdGlvbnMgc29mdHdhcmUgaW50byBLZXJtaXQgUmVjZWl2 ZSBzdGF0ZS4gVGhpcyBtaWdodCBiZSBkb25lCi1ieSBlc2NhcGluZyBiYWNrIHVzaW5nIGtleWJv YXJkIGNoYXJhY3RlcnMgb3IgaG90IGtleXMgKEFsdFwteCBpcwotdHlwaWNhbCkgYW5kL29yIHdp dGggYSBjb21tYW5kIChsaWtlIFJFQ0VJVkUpIG9yIGEgbWVudS4gV2hlbiB0aGUgZmlsZQotdHJh bnNmZXIgaXMgY29tcGxldGUsIHlvdSBoYXZlIHRvIGdvIGJhY2sgdG8gQ29ubmVjdCBzdGF0ZSwg VGVybWluYWwKLWVtdWxhdGlvbiwgb3Igd2hhdGV2ZXIgdGVybWlub2xvZ3kgYXBwbGllcyB0byB5 b3VyIGRlc2t0b3AKLWNvbW11bmljYXRpb25zIHNvZnR3YXJlLgotLnNwCi1UbyB1cGxvYWQgYSBm aWxlLCB0eXBlOgotLnNwCi0gIGtlcm1pdCBcLXIKLS5zcAotb24gdGhlIGhvc3QgKHJhdGhlciB0 aGFuICJrZXJtaXQgXC1nIikuIFRoaXMgdGVsbHMgQ1woaHlLZXJtaXQgdG8gd2FpdAotcGFzc2l2 ZWx5IGZvciBhIGZpbGUgdG8gc3RhcnQgYXJyaXZpbmcuIFRoZW4gcmVnYWluIHRoZSBhdHRlbnRp b24gb2YKLXlvdXIgZGVza3RvcCBzb2Z0d2FyZSAoQWx0XC14IG9yIHdoYXRldmVyKSBhbmQgaW5z dHJ1Y3QgaXQgdG8gc2VuZCB0aGUKLWRlc2lyZWQgZmlsZShzKSB3aXRoIEtlcm1pdCBwcm90b2Nv bC4gV2hlbiB0aGUgdHJhbnNmZXIgaXMgZmluaXNoZWQsCi1yZXR1cm4gdG8gdGhlIENvbm5lY3Qg b3IgVGVybWluYWwgc2NyZWVuLgotLlRQCi1JZiBGaWxlIFRyYW5zZmVyIEZhaWxzCi1BbHRob3Vn aCBldmVyeSBhc3BlY3Qgb2YgS2VybWl0J3Mgb3BlcmF0aW9uIGNhbiBiZSBmaW5lbHkgdHVuZWQs IHRoZXJlCi1hcmUgYWxzbyB0aHJlZSBzaG9ydCBhbmQgc2ltcGxlICJvbW5pYnVzIHR1bmluZyIg Y29tbWFuZHMgeW91IGNhbiB1c2UKLWZvciB0cm91Ymxlc2hvb3Rpbmc6Ci0uUlMKLS5UUAotRkFT VAotVXNlIGZhc3QgZmlsZVwoaHl0cmFuc2ZlciBzZXR0aW5ncy4gVGhpcyBoYXMgYmVlbiB0aGUg ZGVmYXVsdCBzaW5jZQotQ1woaHlLZXJtaXQgNy4wIG5vdyB0aGF0IG1vc3QgbW9kZXJuIGNvbXB1 dGVycyBhbmQgY29ubmVjdGlvbnMKLXN1cHBvcnQgaXQuIElmIHRyYW5zZmVycyBmYWlsIHdpdGgg ZmFzdCBzZXR0aW5ncywgdHJ5IC4gLiAuCi0uVFAKLUNBVVRJT1VTCi1Vc2UgY2F1dGlvdXMgYnV0 IG5vdCBwYXJhbm9pZCBzZXR0aW5ncy4gRmlsZSB0cmFuc2ZlcnMsIGlmIHRoZXkKLXdvcmssIHdp bGwgZ28gYXQgbWVkaXVtIHNwZWVkLiBJZiBub3QsIHRyeSAuIC4gLgotLlRQCi1ST0JVU1QKLVVz ZSB0aGUgbW9zdCByb2J1c3QsIHJlc2lsaWVudCwgY29uc2VydmF0aXZlLCBzYWZlLCBhbmQgcmVs aWFibGUKLXNldHRpbmdzLiBGaWxlIHRyYW5zZmVycyB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgd29y aywgYnV0IHRoZXkKLXdpbGwgYmUgcXVpdGUgc2xvdyAob2YgY291cnNlIHRoaXMgaXMgYSBjbGFz c2ljIHRyYWRlb2ZmOyBST0JVU1QKLXdhcyBDXChoeUtlcm1pdCdzIGRlZmF1bHQgdHVuaW5nIGlu IHZlcnNpb25zIDYuMCBhbmQgZWFybGllciwgd2hpY2gKLW1hZGUgZXZlcnlib2R5IHRoaW5rIEtl cm1pdCBwcm90b2NvbCB3YXMgc2xvdykuIElmIFJPQlVTVCBkb2Vzbid0Ci1kbyB0aGUgdHJpY2ss IHRyeSBhZ2FpbiB3aXRoIFNFVCBQQVJJVFkgU1BBQ0UgZmlyc3QgaW4gY2FzZSBpdCdzCi1ub3Qg YW4gOFwoaHliaXQgY29ubmVjdGlvbi4KLS5SRQotLnNwCi1PYnZpb3VzbHkgdGhlIHN1Y2Nlc3Mg YW5kIHBlcmZvcm1hbmNlIG9mIGEgZmlsZSB0cmFuc2ZlciBhbHNvIGRlcGVuZHMKLW9uIENcKGh5 S2VybWl0J3MgZmlsZSB0cmFuc2ZlciBwYXJ0bmVyLiBVcFwoaHl0b1woaHlkYXRlLCByZWFsIEtl cm1pdCBQcm9qZWN0Ci1wYXJ0bmVycyBhcmUgcmVjb21tZW5kZWQgYmVjYXVzZSB0aGV5IGNvbnRh aW4gdGhlIGJlc3QgS2VybWl0IHByb3RvY29sCi1pbXBsZW1lbnRhdGlvbnMgYW5kIGJlY2F1c2Ug d2UgY2FuIHN1cHBvcnQgdGhlbSBpbiBjYXNlIG9mIHRyb3VibGUuCi0uc3AKLUlmIHlvdSBzdGls bCBoYXZlIHRyb3VibGUsIGNvbnN1bHQgQ2hhcHRlciAxMCBvZiBVc2luZyBDXChoeUtlcm1pdCwg b3IKLXNlbmQgZW1haWwgdG8ga2VybWl0XChoeXN1cHBvcnRAY29sdW1iaWEuZWR1LgotLlRQCi1B ZHZhbmNlZCBLZXJtaXQgRmlsZVwoaHlUcmFuc2ZlciBGZWF0dXJlcwotT2J2aW91c2x5IHRoZXJl IGlzIGEgbG90IG1vcmUgdG8gS2VybWl0IGZpbGUgdHJhbnNmZXIsIGluY2x1ZGluZyBhbGwKLXNv cnRzIG9mIGludGVyYWN0aXZlIGNvbW1hbmRzLCBwcmVmZXJlbmNlcywgb3B0aW9ucywgbG9nZ2lu ZywKLWRlYnVnZ2luZywgdHJvdWJsZXNob290aW5nLCBhbmQgYW55dGhpbmcgZWxzZSB5b3UgY2Fu IGltYWdpbmUgYnV0Ci10aGF0J3Mgd2hhdCB0aGUgbWFudWFsIGFuZCB1cGRhdGVzIGFyZSBmb3Iu IEhlcmUgYXJlIGEgZmV3IHRvcGljcyB5b3UKLWNhbiBleHBsb3JlIGlmIHlvdSdyZSBpbnRlcmVz dGVkIGJ5IFR5cGluZyBIRUxQIGZvciB0aGUgbGlzdGVkCi1jb21tYW5kczoKLS5SUwotLlRQCi1M b2dnaW5nIHRyYW5zZmVyczoKLUxPRyBUUkFOU0FDVElPTlMgKEhFTFAgTE9HKQotLlRQCi1BdXRv bWF0aWMgcGVyXChoeWZpbGUgdGV4dC9iaW5hcnkgbW9kZSBzd2l0Y2hpbmc6Ci1TRVQgVFJBTlNG RVIgTU9ERSB7IEFVVE9NQVRJQywgTUFOVUFMIH0gKEhFTFAgU0VUIFRSQU5TRkVSKS4KLS5UUAot Q3Jvc3NcKGh5cGxhdGZvcm0gcmVjdXJzaXZlIGRpcmVjdG9yeSB0cmVlIHRyYW5zZmVyOgotU0VO RCAvUkVDVVJTSVZFLCBHRVQgL1JFQ1VSU0lWRSAoSEVMUCBTRU5ELCBIRUxQIEdFVCkuCi0uVFAK LUZpbGUgY29sbGlzaW9uIG9wdGlvbnM6Ci1TRVQgRklMRSBDT0xMSVNJT04geyBPVkVSV1JJVEUs IEJBQ0tVUCwgRElTQ0FSRCwgLi4uIH0gKEhFTFAgU0VUIEZJTEUpLgotLlRQCi1VcGRhdGU6IFRy YW5zZmVyIG9ubHkgZmlsZXMgdGhhdCBjaGFuZ2VkIHNpbmNlIGxhc3QgdGltZToKLVNFVCBGSUxF IENPTExJU0lPTiBVUERBVEUgKEhFTFAgU0VUIEZJTEUpLgotLlRQCi1GaWxlbmFtZSBzZWxlY3Rp b24gcGF0dGVybnM6Ci0oSEVMUCBXSUxEQ0FSRCkuCi0uVFAKLUZsZXhpYmxlIGZpbGUgc2VsZWN0 aW9uOgotU0VORCAob3IgR0VUKSAvQkVGT1JFIC9BRlRFUiAvTEFSR0VSIC9TTUFMTEVSIC9UWVBF IC9FWENFUFQsIC4uLgotLlRQCi1DaGFyYWN0ZXJcKGh5c2V0IGNvbnZlcnNpb246Ci1TRVQgeyBG SUxFLCBUUkFOU0ZFUiB9IENIQVJBQ1RFUlwtU0VULCBBU1NPQ0lBVEUsIC4uLgotLlRQCi1GaWxl L1BhdGhuYW1lIGNvbnRyb2w6Ci1TRVQgeyBTRU5ELCBSRUNFSVZFIH0gUEFUSE5BTUVTLCBTRVQg RklMRSBOQU1FUy4KLS5UUAotQXRvbWljIGZpbGUgbW92ZW1lbnQ6Ci1TRU5EIChvciBHRVQpIC9E RUxFVEUgL1JFTkFNRSAvTU9WRVwtVE8KLS5UUAotVHJhbnNmZXJyaW5nIHRvL2Zyb20gc3RhbmRh cmQgaS9vIG9mIG90aGVyIGNvbW1hbmRzOgotU0VORCAob3IgR0VUKSAvQ09NTUFORAotLlRQCi1S ZWNvdmVyeSBvZiBpbnRlcnJ1cHRlZCB0cmFuc2ZlciBmcm9tIHBvaW50IG9mIGZhaWx1cmU6Ci1S RVNFTkQsIFJFR0VUIChIRUxQIFJFU0VORCwgSEVMUCBSRUdFVCkuCi0uUkUKLS5UUAotTm9uXCho eUtlcm1pdCBGaWxlIFRyYW5zZmVyCi1Zb3UgY2FuIGFsc28gdXNlIENcKGh5S2VybWl0IHRvIHRy YW5zZmVyIGZpbGVzIHdpdGggRlRQIG9yIEhUVFAgSW50ZXJuZXQKLXByb3RvY29sczsgc2VlIGJl bG93LgotLnNwCi1PbiBhIHJlZ3VsYXIgc2VyaWFsIG9yIFRlbG5ldCBjb25uZWN0aW9uIHdoZXJl IHRoZSBvdGhlciBjb21wdXRlcgotZG9lc24ndCBzdXBwb3J0IEtlcm1pdCBwcm90b2NvbCBhdCBh bGwsIHlvdSBoYXZlIHNldmVyYWwgb3B0aW9ucy4gRm9yCi1leGFtcGxlLCBpZiB5b3VyIGRlc2t0 b3AgY29tbXVuaWNhdGlvbnMgc29mdHdhcmUgc3VwcG9ydHMgWm1vZGVtLCB1c2UKLSJyeiIgYW5k ICJzeiIgb24gdGhlIGhvc3QgcmF0aGVyIHRoYW4gS2VybWl0LiBCdXQgaWYgS2VybWl0IGlzIHlv dXIKLWRlc2t0b3Agc29mdHdhcmUsIGFuZCB5b3UgYXJlIHVzaW5nIGl0IHRvIG1ha2UgY2FsbHMg b3IgbmV0d29yawotY29ubmVjdGlvbnMgdG8gb3RoZXIgY29tcHV0ZXJzIHRoYXQgZG9uJ3Qgc3Vw cG9ydCBLZXJtaXQgcHJvdG9jb2wgKG9yCi10aGF0IGRvbid0IGhhdmUgYSBnb29kIGltcGxlbWVu dGF0aW9uIG9mIGl0KSwgdGhlbiBpZiB5b3VyIGNvbXB1dGVyCi1hbHNvIGhhcyBleHRlcm5hbCBY LCBZLCBvciBabW9kZW0gcHJvZ3JhbXMgdGhhdCBhcmUgcmVkaXJlY3RhYmxlLAotS2VybWl0IGNh biB1c2UgdGhlbSBhcyBleHRlcm5hbCBwcm90b2NvbHMuIEhFTFAgU0VUIFBST1RPQ09MIGZvcgot ZGV0YWlscy4KLS5zcAotWW91IGNhbiBhbHNvIGNhcHR1cmUgInJhdyIgZGF0YSBzdHJlYW1zIGZy b20gdGhlIG90aGVyIGNvbXB1dGVyIHdpdGgKLUxPRyBTRVNTSU9OIChIRUxQIExPRyBhbmQgSEVM UCBTRVQgU0VTU0lPTlwtTE9HIGZvciBkZXRhaWxzKSwgYW5kIHlvdQotY2FuIHVwbG9hZCBmaWxl cyB3aXRob3V0IGFueSBwcm90b2NvbCBhdCBhbGwgd2l0aCBUUkFOU01JVCAoSEVMUAotVFJBTlNN SVQsIEhFTFAgU0VUIFRSQU5TTUlUKS4KLS5TSCBLRVJNSVQnUyBCVUlMVFwoaHlJTiBGVFAgQU5E IEhUVFAgQ0xJRU5UUwotS2VybWl0J3MgRlRQIGNsaWVudCBpcyBsaWtlIHRoZSByZWd1bGFyIFVu aXggRlRQIGNsaWVudCB0aGF0IHlvdSdyZSB1c2VkCi10bywgYnV0IHdpdGggc29tZSBkaWZmZXJl bmNlczoKLS5UUAotXChidQotSXQgaGFzIGxvdHMgbW9yZSBjb21tYW5kcyBhbmQgZmVhdHVyZXMu Ci0uVFAKLVwoYnUKLUVhY2ggRlRQIGNvbW1hbmQgbXVzdCBiZSBwcmVmaXhlZCB3aXRoICJmdHAi LCBmb3IgZXhhbXBsZSAiZnRwIG9wZW4iLAotImZ0cCBnZXQiLCAiZnRwIGJ5ZSIsIGV0YyAodGhp cyBpcyBub3Qgc3RyaWN0bHkgdHJ1ZSwgYnV0IHVudGlsIHlvdSdyZQotbW9yZSBmYW1pbGlhciB3 aXRoIGl0LCBpdCdzIGJlc3QgdG8gZm9sbG93IHRoaXMgcnVsZSkuCi0uVFAKLVwoYnUKLUNvbW1h bmRzIGxpa2UgImNkIiwgImRpcmVjdG9yeSIsIGV0YywgZXhlY3V0ZSBsb2NhbGx5LCBub3Qgb24g dGhlCi1zZXJ2ZXIuIFVzZSAiZnRwIGNkIiwgImZ0cCBkaXIiLCBldGMsIHRvIGhhdmUgdGhlbSBh Y3Qgb24gdGhlIHNlcnZlci4KLS5UUAotXChidQotWW91IGNhbiBoYXZlIGFuIEZUUCBzZXNzaW9u IGFuZCBhIHJlZ3VsYXIgS2VybWl0IHNlcmlhbCBvciBUZWxuZXQKLXNlc3Npb24gb3BlbiBhdCB0 aGUgc2FtZSB0aW1lLgotLlRQCi1cKGJ1Ci1GVFAgc2Vzc2lvbnMgY2FuIGJlIGZ1bGx5IGF1dG9t YXRlZC4KLS5QUAotUGVuZGluZyBwdWJsaWNhdGlvbiBvZiB0aGUgbmV4dCBlZGl0aW9uIG9mIHRo ZSBtYW51YWwsIHRoZSBLZXJtaXQgRlRQCi1jbGllbnQgaXMgdGhvcm91Z2hseSBkb2N1bWVudGVk IGF0IHRoZSBLZXJtaXQgUHJvamVjdCB3ZWJzaXRlOgotLnNwCi0gIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9mdHBjbGllbnQuaHRtbAotLnNwCi1Zb3UgYWxzbyBjYW4gdXNlIEhFTFAg RlRQIGFuZCBIRUxQIFNFVCBGVFAgdG8gZ2V0IGRlc2NyaXB0aW9ucyBvZiBLZXJtaXQncwotRlRQ XChoeXJlbGF0ZWQgY29tbWFuZHMuCi0uUFAKLVRoZSBIVFRQIGNsaWVudCBpcyBzaW1pbGFyIHRv IHRoZSBGVFAgb25lLCBleGNlcHQgeW91IHByZWZpeCBlYWNoIGNvbW1hbmQKLXdpdGggSFRUUCBp bnN0ZWFkIG9mIEZUUDogSFRUUCBPUEVOLCBIVFRQIEdFVCwgSFRUUCBQVVQsIEhUVFAgQ0xPU0Us IGV0Yy4KLVR5cGUgSEVMUCBIVFRQIGZvciBkZXRhaWxzLCBvciB2aXNpdCB0aGUgdG8gdmlldyB0 aGUgbWFudWFsIHN1cHBsZW1lbnRzLgotSFRUUCBjb25uZWN0aW9ucyBjYW4gYmUgb3BlbiBhdCB0 aGUgc2FtZSB0aW1lIGFzIHJlZ3VsYXIgc2VyaWFsIG9yIFRlbG5ldAotY29ubmVjdGlvbnMgYW5k IEZUUCBjb25uZWN0aW9ucy4gU28gS2VybWl0IGNhbiBtYW5hZ2UgdXAgdG8gdGhyZWUgdHlwZXMK LWNvbm5lY3Rpb25zIHNpbXVsdGFuZW91c2x5LgotLlNIIElOVEVSTkVUIEtFUk1JVCBTRVJWSUNF Ci1DXChoeUtlcm1pdCBjYW4gYmUgY29uZmlndXJlZCBhbmQgcnVuIGFzIGFuIEludGVybmV0IHNl cnZpY2UgKGNhbGxlZCBJS1NEKSwKLXNpbWlsYXIgdG8gYW4gRlRQIHNlcnZlciAoRlRQRCkgZXhj ZXB0IHlvdSBjYW4gKGJ1dCBuZWVkIG5vdCkgaW50ZXJhY3Qgd2l0aAotaXQgZGlyZWN0bHksIHBs dXMgaXQgZG9lcyBhIGxvdCBtb3JlIHRoYW4gYW4gRlRQIHNlcnZlciBjYW4gZG8uIFRoZSBUQ1AK LXBvcnQgZm9yIElLU0QgaXMgMTY0OS4gSXQgdXNlcyBUZWxuZXQgcHJvdG9jb2wuIENcKGh5S2Vy bWl0IGNhbiBiZSBhbiBJbnRlcm5ldAotS2VybWl0IFNlcnZlciwgb3IgaXQgY2FuIGJlIGEgY2xp ZW50IG9mIGFuIElLU0QuIFlvdSBjYW4gbWFrZSBjb25uZWN0aW9ucwotZnJvbSBDXChoeUtlcm1p dCB0byBhbiBJS1NEIHdpdGggYW55IG9mIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6Ci0uc3AKLS5u ZgotICB0ZWxuZXQgZm9vLmJhci5lZHUgMTY0OQotICB0ZWxuZXQgZm9vLmJhci5lZHUga2VybWl0 ICAgOyBpZiAia2VybWl0IiBpcyBsaXN0ZWQgaW4gL2V0Yy9zZXJ2aWNlcwotICBpa3NkIGZvby5i YXIuZWR1Ci0uZmkKLS5zcAotVGhlIElLU0QgY29tbWFuZCBpcyBlcXVpdmFsZW50IHRvIGEgVEVM TkVUIGNvbW1hbmQgc3BlY2lmeWluZyBwb3J0IDE2NDkuCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbiBh Ym91dCBtYWtpbmcgYW5kIHVzaW5nIGNvbm5lY3Rpb25zIHRvIGFuIElLU0QsIHNlZToKLS5zcAot ICBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY3Vpa3NkLmh0bWwKLS5zcAotWW91IGNh biBydW4gYW4gSW50ZXJuZXQgS2VybWl0IFNlcnZpY2Ugb24geW91ciBvd24gY29tcHV0ZXIgdG9v IChpZiB5b3UgYXJlCi10aGUgc3lzdGVtIGFkbWluaXN0cmF0b3IpLiBGb3IgaW5zdHJ1Y3Rpb25z LCBzZWU6Ci0uc3AKLSAgaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2lrc2QuaHRtbAot LlNIIFNFQ1VSSVRZCi1BbGwgb2YgQ1woaHlLZXJtaXQncyBidWlsdFwoaHlpbiBUQ1AvSVAgbmV0 d29ya2luZyBtZXRob2RzIChUZWxuZXQsIFJsb2dpbiwgSUtTRCwKLUZUUCwgYW5kIEhUVFApIGNh biBiZSBzZWN1cmVkIGJ5IG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgSUVURlwoaHlhcHBy b3ZlZAotbWV0aG9kczoKLS5QUAotXChidQlNSVQgS2VyYmVyb3MgSVYKLS5icgotXChidQlNSVQg S2VyYmVyb3MgVgotLmJyCi1cKGJ1CVNTTC9UTFMKLS5icgotXChidQlTdGFuZm9yZCBTUlAKLS5Q UAotRm9yIGNvbXBsZXRlIGluc3RydWN0aW9ucyBzZWU6Ci0uUFAKLSAgaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L3NlY3VyaXR5Lmh0bWwKLS5QUAotQW5kIGFzIG5vdGVkIHByZXZpb3Vz bHksIHlvdSBjYW4gYWxzbyBtYWtlIFNTSCBjb25uZWN0aW9ucyB3aXRoIENcKGh5S2VybWl0IGlm Ci15b3UgYWxyZWFkeSBoYXZlIGFuIFNTSCBjbGllbnQgaW5zdGFsbGVkLgotLlNIIEFMVEVSTkFU SVZFIENPTU1BTkRcKGh5TElORSBQRVJTT05BTElUSUVTCi1XaGVuIGludm9rZWQgYXMgImtlcm1p dCIgb3IgYW55IG90aGVyIG5hbWUgYmVzaWRlcyAiZnRwIiBvciAidGVsbmV0IiwKLUNcKGh5S2Vy bWl0IGhhcyB0aGUgY29tbWFuZFwoaHlsaW5lIG9wdGlvbnMgZGVzY3JpYmVkIGFib3ZlIGluIHRo ZSBPUFRJT05TCi1zZWN0aW9uLiBIb3dldmVyLCBpZiB5b3UgaW52b2tlIENcKGh5S2VybWl0IGFz ICJ0ZWxuZXQiIG9yICJmdHAiLCBpdCBjaGFuZ2VzCi1pdHMgY29tbWFuZFwoaHlsaW5lIHBlcnNv bmFsaXR5IHRvIG1hdGNoLiBUaGlzIGNhbiBiZSBkb25lIChhbW9uZyBvdGhlciB3YXlzKQotd2l0 aCBzeW1ib2xpYyBsaW5rcyAoc3ltbGlua3MpLiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgQ1wo aHlLZXJtaXQgdG8gYmUKLXlvdXIgcmVndWxhciBUZWxuZXQgY2xpZW50LCBvciB0aGUgVGVsbmV0 IGhlbHBlciBvZiB5b3VyIFdlYiBicm93c2VyLCB5b3UKLWNhbiBjcmVhdGUgYSBsaW5rIGxpa2Ug dGhlIGZvbGxvd2luZyBpbiBhIGRpcmVjdG9yeSB0aGF0IGxpZXMgaW4geW91ciBQQVRICi1haGVh ZCBvZiB0aGUgcmVndWxhciB0ZWxuZXQgcHJvZ3JhbToKLS5zcAotICBsbiBcLXMgL3Vzci9sb2Nh bC9iaW4va2VybWl0IHRlbG5ldAotLnNwCi1Ob3cgd2hlbiB5b3UgZ2l2ZSBhICJ0ZWxuZXQiIGNv bW1hbmQsIHlvdSBhcmUgaW52b2tpbmcgS2VybWl0IGluc3RlYWQsIGJ1dAotd2l0aCBpdHMgVGVs bmV0IGNvbW1hbmRcKGh5bGluZSBwZXJzb25hbGl0eSBzbywgZm9yIGV4YW1wbGU6Ci0uc3AKLSAg dGVsbmV0IHh5emNvcnAuY29tCi0uc3AKLU1ha2VzIGEgVGVsbmV0IGNvbm5lY3Rpb24gdG8geHl6 Y29ycC5jb20sIGFuZCBLZXJtaXQgZXhpdHMgYXV0b21hdGljYWxseQotd2hlbiB0aGUgY29ubmVj dGlvbiBpcyBjbG9zZWQgKGp1c3QgbGlrZSB0aGUgcmVndWxhciBUZWxuZXQgY2xpZW50KS4gVHlw ZQotInRlbG5ldCBcLWgiIHRvIGdldCBhIGxpc3Qgb2YgS2VybWl0J3MgVGVsbmV0XChoeXBlcnNv bmFsaXR5IGNvbW1hbmRcKGh5bGluZQotb3B0aW9ucywgd2hpY2ggYXJlIGludGVuZGVkIHRvIGJl IGFzIGNvbXBhdGlibGUgYXMgcG9zc2libGUgd2l0aCB0aGUKLXJlZ3VsYXIgVGVsbmV0IGNsaWVu dC4KLS5QUAotU2ltaWxhcmx5IGZvciBGVFA6Ci0uc3AKLSAgbG4gXC1zIC91c3IvbG9jYWwvYmlu L2tlcm1pdCBmdHAKLS5zcAotQW5kIG5vdyB0eXBlICJmdHAgXC1oIiB0byBzZWUgaXRzIGNvbW1h bmRcKGh5bGluZSBvcHRpb25zLCBhbmQgY29tbWFuZCBsaW5lcwotanVzdCBsaWtlIHlvdSB3b3Vs ZCBnaXZlIHlvdXIgcmVndWxhciBGVFAgY2xpZW50OgotLnNwCi0gIGZ0cCB4eXpjb3JwLmNvbQot LnNwCi1idXQgd2l0aCBhZGRpdGlvbmFsIG9wdGlvbnMgYWxsb3dpbmcgYW4gZW50aXJlIHNlc3Np b24gdG8gYmUgc3BlY2lmaWVkIG9uCi10aGUgY29tbWFuZCBsaW5lLiBGaW5hbGx5LCBpZiBLZXJt aXQncwotZmlyc3QgY29tbWFuZFwoaHlsaW5lIG9wdGlvbiBpcyBhIFRlbG5ldCwgRlRQLCBJS1NE LCBvciBIVFRQIFVSTCwgS2VybWl0Ci1hdXRvbWF0aWNhbGx5IG1ha2VzIHRoZSBhcHByb3ByaWF0 ZSBraW5kIG9mIGNvbm5lY3Rpb24gYW5kLCBpZiBpbmRpY2F0ZWQgYnkKLXRoZSBVUkwsIHRha2Vz IHRoZSBkZXNpcmVkIGFjdGlvbjoKLS5UUAota2VybWl0IHRlbG5ldDp4eXpjb3JwLmNvbQotT3Bl bnMgYSBUZWxuZXQgc2Vzc2lvbgotLlRQCi1rZXJtaXQgdGVsbmV0Oi8vb2xnYUB4eXpjb3JwLmNv bQotRGl0dG8gZm9yIHVzZXIgb2xnYQotLlRQCi1rZXJtaXQgZnRwOi8vb2xnYUB4eXpjb3JwLmNv bS9wdWJsaWMvb29mYS56aXAKLURvd25sb2FkcyBhIGZpbGUKLS5UUAota2VybWl0IGtlcm1pdDov L2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2YvUkVBRC5NRQotRGl0dG8gZm9yIElLU0QKLS5U UAota2VybWl0IGlrc2Q6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL1JFQUQuTUUKLShU aGlzIHdvcmtzIHRvbykKLS5UUAota2VybWl0IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9pbmRleC5odG1sCi1HcmFicyBhIHdlYiBwYWdlCi0uZmkKLS5TSCBMSUNFTlNFCi1DXChoeUtl cm1pdCBoYXMgYW4gdW51c3VhbCBsaWNlbnNlLCBidXQgYSBmYWlyIGFuZCBzZW5zaWJsZSBvbmUg c2luY2UgdGhlCi1LZXJtaXQgUHJvamVjdCBtdXN0IHN1cHBvcnQgaXRzZWxmIG91dCBvZiByZXZl bnVlOiBpdCdzIG5vdCBhIEJTRCBsaWNlbnNlLAotbm90IEdQTCwgbm90IEFydGlzdGljLCBub3Qg Y29tbWVyY2lhbCwgbm90IHNoYXJld2FyZSwgbm90IGZyZWV3YXJlLiBJdCBjYW4KLWJlIHN1bW1l ZCB1cCBsaWtlIHRoaXM6IGlmIHlvdSB3YW50IENcKGh5S2VybWl0IGZvciB5b3VyIG93biB1c2Us IHlvdSBjYW4KLWRvd25sb2FkIGFuZCB1c2UgaXQgd2l0aG91dCBjb3N0IG9yIGxpY2Vuc2UgKGJ1 dCB3ZSdkIGFwcHJlY2lhdGUgaXQgaWYgeW91Ci13b3VsZCBwdXJjaGFzZSB0aGUgbWFudWFsKS4g QnV0IGlmIHlvdSB3YW50IHRvIHNlbGwgQ1woaHlLZXJtaXQgb3IgYnVuZGxlIGl0Ci13aXRoIGEg cHJvZHVjdCBvciBvdGhlcndpc2UgZGlzdHJpYnV0ZSBpdCBpbiBhIGNvbW1lcmNpYWwgc2V0dGlu ZyBFWENFUFQKLVdJVEggQU4gT1BFTlwoaHlTT1VSQ0UgT1BFUkFUSU5HIFNZU1RFTSBESVNUUklC VVRJT04gc3VjaCBhcyBMaW51eCwgRnJlZUJTRCwKLU5ldEJTRCwgb3IgT3BlbkJTRCwgeW91IG11 c3QgbGljZW5zZSBpdC4gVG8gc2VlIHRoZSBjb21wbGV0ZSBsaWNlbnNlLCBnaXZlCi10aGUgTElD RU5TRSBjb21tYW5kIGF0IHRoZSBwcm9tcHQsIG9yIHNlZSB0aGUgQ09QWUlORy5UWFQgZmlsZSBk aXN0cmlidXRlZAotd2l0aCBDXChoeUtlcm1pdCA3LjAgb3IgbGF0ZXIsIG9yIGRvd25sb2FkIGl0 IGZyb20KLS5zcAotICBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jXC1rZXJtaXQv Q09QWUlORy5UWFQKLS5zcAotU2VuZCBsaWNlbnNpbmcgaW5xdWlyaWVzIHRvIGtlcm1pdEBjb2x1 bWJpYS5lZHUuCi0uU0ggQlVHUwotU2VlIHRoZSBmb2xsb3dpbmcgZmlsZXMgZm9yIGxpc3Rpbmdz IG9mIGtub3duIGJ1Z3MsIGxpbWl0YXRpb25zLAotd29ya2Fyb3VuZHMsIGhpbnRzIGFuZCB0aXBz OgotLlRQCi1ja2Nid3IudHh0Ci1HZW5lcmFsIENcKGh5S2VybWl0IGJ1Z3MsIGhpbnRzLCB0aXBz LgotLlRQCi1ja3Vid3IudHh0Ci1Vbml4XChoeXNwZWNpZmljIENcKGh5S2VybWl0IGJ1Z3MsIGhp bnRzLCB0aXBzLgotLlBQCi1SZXBvcnQgYnVncyBhbmQgcHJvYmxlbXMgYnkgZW1haWwgdG86Ci0u c3AKLSAgIGtlcm1pdFwtc3VwcG9ydEBjb2x1bWJpYS5lZHUuCi0uc3AKLUJlZm9yZSByZXF1ZXN0 aW5nIHRlY2huaWNhbCBzdXBwb3J0LCBwbGVhc2UgcmVhZCB0aGUgaGludHMgaGVyZToKLS5zcAot ICBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc3VwcG9ydC5odG1sCi0uc3AKLWFuZCBh bHNvIHJlYWQgdGhlIENcKGh5S2VybWl0IEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zOgotLnNw Ci0gIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2ZhcS5odG1sCi0uU0ggT1RIRVIg VE9QSUNTCi1UaGVyZSdzIHdheSBtb3JlIHRvIENcKGh5S2VybWl0IHRoYW4gd2UndmUgdG91Y2hl ZCBvbiBoZXJlIFwoaHlcKGh5IHRyb3VibGVzaG9vdGluZywKLWN1c3RvbWl6YXRpb24sIGNoYXJh Y3RlciBzZXRzLCBkaWFsaW5nIGRpcmVjdG9yaWVzLCBzZW5kaW5nIHBhZ2VzLCBzY3JpcHQKLXdy aXRpbmcsIGFuZCBvbiBhbmQgb24sIGFsbCBvZiB3aGljaCBhcmUgY292ZXJlZCBpbiB0aGUgbWFu dWFsIGFuZCB1cGRhdGVzCi1hbmQgc3VwcGxlbWVudHMuIEZvciB0aGUgbW9zdCB1cFwoaHl0b1wo aHlkYXRlIGluZm9ybWF0aW9uIG9uIGRvY3VtZW50YXRpb24gKG9yCi11cGRhdGVkIGRvY3VtZW50 YXRpb24gaXRzZWxmKSB2aXNpdCB0aGUgS2VybWl0IFByb2plY3Qgd2Vic2l0ZToKLS5zcAotICBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvCi0uUFAKLVRoZXJlIHlvdSB3aWxsIGFsc28g ZmluZCBLZXJtaXQgc29mdHdhcmUgcGFja2FnZXMgZm9yIG90aGVyIHBsYXRmb3JtczoKLWRpZmZl cmVudCBVbml4IHZhcmlldGllcywgV2luZG93cywgRE9TLCBWTVMsIElCTSBtYWluZnJhbWVzLCBh bmQgbWFueQotb3RoZXJzOiAyMCsgeWVhcnMnIHdvcnRoLgotLlNIIERPQ1VNRU5UQVRJT04gQU5E IFVQREFURVMKLVRoZSBtYW51YWwgZm9yIENcKGh5S2VybWl0IGlzOgotLlRQCi0uSQotVXNpbmcg Q1woaHlLZXJtaXQKLUZyYW5rIGRhIENydXogYW5kIENocmlzdGluZSBNLiBHaWFub25lLAotU2Vj b25kIEVkaXRpb24sIERpZ2l0YWwgUHJlc3MgLyBCdXR0ZXJ3b3J0aFwoaHlIZWluZW1hbm4sIFdv YnVybiwgTUEsIDE5OTcsIDYyMgotcGFnZXMsIElTQk4gMVwtNTU1NThcLTE2NFwtMS4gVGhpcyBp cyBhIHByaW50ZWQgYm9vay4gSXQgY292ZXJzIENcKGh5S2VybWl0IDYuMC4KLS5UUAotVGhlIENc KGh5S2VybWl0IDcuMCBTdXBwbGVtZW50Ci1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwKLS5UUAotVGhlIENcKGh5S2VybWl0IDguMCBTdXBwbGVtZW50Ci1odHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwKLS5UUAotVGhlIENcKGh5 S2VybWl0IDkuMCBTdXBwbGVtZW50Ci1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDkwLmh0bWwKLS5QUAotVmlzaXQgQ1woaHlLZXJtaXQgaG9tZSBwYWdlOgotLnNwCi0gIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLS5zcAotdG8gbGVhcm4g YWJvdXQgbmV3IHZlcnNpb25zLCBCZXRhIHRlc3RzLCBhbmQgb3RoZXIgbmV3czsgdG8KLXJlYWQg Y2FzZSBzdHVkaWVzIGFuZCB0dXRvcmlhbHM7IHRvIGRvd25sb2FkIHNvdXJjZSBjb2RlLCBpbnN0 YWxsIHBhY2thZ2VzLAotYW5kIHByZWJ1aWx0IGJpbmFyaWVzIGZvciBtYW55IHBsYXRmb3Jtcy4g QWxzbyB2aXNpdDoKLS5UUAotaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NjcmlwdGxp Yi5odG1sCi1UaGUgS2VybWl0IHNjcmlwdCBsaWJyYXJ5IGFuZCB0dXRvcmlhbAotLlRQCi1odHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvbmV3ZmFxLmh0bWwKLVRoZSBLZXJtaXQgRkFRIChG cmVxdWVudGx5IEFza2VkIFF1ZXN0aW9ucyBhYm91dCBLZXJtaXQpCi0uVFAKLWh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2ZhcS5odG1sCi1UaGUgQ1woaHlLZXJtaXQgRkFRIChGcmVx dWVudGx5IEFza2VkIFF1ZXN0aW9ucyBhYm91dCBDXChoeUtlcm1pdCkKLS5UUAotaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L3RlbG5ldC5odG1sCi1DXChoeUtlcm1pdCBUZWxuZXQgY2xp ZW50IGRvY3VtZW50YXRpb24KLS5UUAotaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3Nl Y3VyaXR5Lmh0bWwKLUNcKGh5S2VybWl0IHNlY3VyaXR5IGRvY3VtZW50YXRpb24gKEtlcmJlcm9z LCBTU0wvVExTLCBldGMpCi0uVFAKLWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jdWlr c2QuaHRtbAotSW50ZXJuZXQgS2VybWl0IFNlcnZpY2UgdXNlciBkb2N1bWVudGF0aW9uCi0uVFAK LWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pa3NkLmh0bWwKLUludGVybmV0IEtlcm1p dCBTZXJ2aWNlIGFkbWluaXN0cmF0b3IgZG9jdW1lbnRhdGlvbgotLlRQCi1odHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvc3R1ZGllcy5odG1sCi1DYXNlIHN0dWRpZXMuCi0uVFAKLWh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zdXBwb3J0Lmh0bWwKLVRlY2huaWNhbCBzdXBwb3J0 LgotLlRQCi1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvazk1dHV0b3JpYWwuaHRtbAot S2VybWl0IDk1IHR1dG9yaWFsLgotLlRQCi1jb21wLnByb3RvY29scy5rZXJtaXQubWlzYwotVGhl IEtlcm1pdCBuZXdzZ3JvdXAgKHVubW9kZXJhdGVkKS4KLS5TSCBGSUxFUwotLlRQCi1DT1BZSU5H LlRYVAotQ1woaHlLZXJtaXQgbGljZW5zZS4KLS5UUAotfi8ua2VybXJjCi1Jbml0aWFsaXphdGlv biBmaWxlLgotLlRQCi1+Ly5teWtlcm1yYwotQ3VzdG9taXphdGlvbiBmaWxlLgotLlRQCi1+Ly5r ZGQKLUtlcm1pdCBkaWFsaW5nIGRpcmVjdG9yeSAoc2VlIG1hbnVhbCkuCi0uVFAKLX4vLmtuZAot S2VybWl0IG5ldHdvcmsgZGlyZWN0b3J5IChzZWUgbWFudWFsKS4KLS5UUAotfi8ua3NkCi1LZXJt aXQgc2VydmljZXMgZGlyZWN0b3J5IChzZWUgbWFudWFsKS4KLS5UUAotY2FfY2VydHMucGVtCi1D ZXJ0aWZpY2F0ZSBBdXRob3JpdHkgY2VydGlmY2F0ZXMgdXNlZCBmb3IgU1NMIGNvbm5lY3Rpb25z LgotLlRQCi1ja3VpbnMudHh0Ci1JbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIGZvciBVbml4LiAg QWxzbyBhdAotaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sLgotLlRQ Ci1ja2Nid3IudHh0Ci1HZW5lcmFsIENcKGh5S2VybWl0IGJ1Z3MsIGhpbnRzLCB0aXBzLgotLlRQ Ci1ja3Vid3IudHh0Ci1Vbml4XChoeXNwZWNpZmljIENcKGh5S2VybWl0IGJ1Z3MsIGhpbnRzLCB0 aXBzLgotLlRQCi1ja2NwbG0udHh0Ci1DXChoeUtlcm1pdCBwcm9ncmFtIGxvZ2ljIG1hbnVhbC4K LS5UUAotY2tjY2ZnLnR4dAotQ1woaHlLZXJtaXQgY29tcGlsZVwoaHl0aW1lIGNvbmZpZ3VyYXRp b24gb3B0aW9ucy4KLS5UUAotc3NoCi0oaW4geW91ciBQQVRIKSBTU0ggY29ubmVjdGlvbiBoZWxw ZXIuCi0uVFAKLXJ6LCBzeiwgZXRjLgotKGluIHlvdXIgUEFUSCkgZXh0ZXJuYWwgcHJvdG9jb2xz IGZvciBYWVptb2RlbS4KLS5UUAotL3Zhci9zcG9vbC9sb2NrcyAob3Igd2hhdGV2ZXIpCi1VVUNQ IGxvY2tmaWxlIGZvciBkaWFsaW5nIG91dCAoc2VlIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMp LgotLlNIIEFVVEhPUlMKLS5UUAotU29mdHdhcmUKLUZyYW5rIGRhIENydXogYW5kIEplZmZyZXkg RSBBbHRtYW4sCi0uYnIKLTE5ODVcKGh5cHJlc2VudCwgd2l0aCBjb250cmlidXRpb25zIGZyb20g aHVuZHJlZHMgb2Ygb3RoZXJzIGFsbCBvdmVyIHRoZQotd29ybGQuCi0uVFAKLURvY3VtZW50YXRp b24KLUZyYW5rIGRhIENydXoKLS5UUAotQWRkcmVzcwotLm5mCi1UaGUgS2VybWl0IFByb2plY3Qg XChoeSBDb2x1bWJpYSBVbml2ZXJpdHkKLTYxMiBXZXN0IDExNXRoIFN0cmVldAotTmV3IFlvcmsg TlkgMTAwMjVcLTc3OTkKLVVTQQotLmZpCi0uVFAKLUVcKGh5TWFpbAota2VybWl0QGNvbHVtYmlh LmVkdQotLlRQCi1XZWIKLWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC8KLS5maQotLmJy CgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3Vw dHkuYyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1cHR5LmMKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMDQ3NmIuLjAwMDAwMDAKLS0tIGEvY2tlcm1p dC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VwdHkuYworKysgL2Rldi9udWxsCkBA IC0xLDE5ODMgKzAsMCBAQAotY2hhciAqY2twdHl2ID0gIlBzZXVkb3Rlcm1pbmFsIHN1cHBvcnQs IDkuMC4xMDEsIDEzIEp1biAyMDExIjsKLQotLyogIEMgSyBVIFAgVCBZICAtLSAgQy1LZXJtaXQg cHNldWRvdGVybWluYWwgY29udHJvbCBmdW5jdGlvbnMgZm9yIFVOSVggICovCi0KLS8qIExhc3Qg dXBkYXRlOiBNb24gSnVuIDEzIDExOjMyOjUyIDIwMTEgKi8KLQotLyoKLSAgQ29weXJpZ2h0IDE5 OTUgYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCi0KLSAgUGVy bWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2Fy ZSBhbmQgaXRzCi0gIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZl ZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQKLSAgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0 IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQKLSAgY29weXJp Z2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGlu ZwotICBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVz ZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKLSAgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0 aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLAotICB3cml0dGVuIHByaW9yIHBl cm1pc3Npb24uICBGdXJ0aGVybW9yZSBpZiB5b3UgbW9kaWZ5IHRoaXMgc29mdHdhcmUgeW91IG11 c3QKLSAgbGFiZWwgeW91ciBzb2Z0d2FyZSBhcyBtb2RpZmllZCBzb2Z0d2FyZSBhbmQgbm90IGRp c3RyaWJ1dGUgaXQgaW4gc3VjaCBhCi0gIGZhc2hpb24gdGhhdCBpdCBtaWdodCBiZSBjb25mdXNl ZCB3aXRoIHRoZSBvcmlnaW5hbCBNLkkuVC4gc29mdHdhcmUuCi0gIE0uSS5ULiBtYWtlcyBubyBy ZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9y Ci0gIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mg b3IgaW1wbGllZCB3YXJyYW50eS4KLQotICBNb2RpZmllZCBmb3IgdXNlIGluIEMtS2VybWl0LCBh bmQgbmV3IG1hdGVyaWFsIGFkZGVkLCBieToKLQotICBKZWZmcmV5IEFsdG1hbiA8amFsdG1hbkBz ZWN1cmUtZW5kcG9pbnRzLmNvbT4KLSAgU2VjdXJlIEVuZHBvaW50cyBJbmMuLCBOZXcgWW9yayBD aXR5Ci0gIE5vdmVtYmVyIDE5OTkKLQotICBQYXJhbWV0ZXJpemVkIGZvciBwdHkgZmlsZSBkZXNj cmlwdG9yIGFuZCBmdW5jdGlvbiBjb2RlLAotICBGcmFuayBkYSBDcnV6LCBDb2x1bWJpYSBVbml2 ZXJzaXR5LCBOZXcgWW9yayBDaXR5Ci0gIERlYyAyMDA2IC0gU2VwIDIwMDkKLSovCi0KLS8qCi0g IEJ1aWx0IGFuZCB0ZXN0ZWQgc3VjY2Vzc3VsbHkgb246Ci0gICAuIDQuNEJTRCwgaW5jbHVkaW5n IEJTREkvT1MsIE5ldEJTRCwgRnJlZUJTRCwgT3BlbkJTRCwgTWFjIE9TIFgKLSAgIC4gQUlYIDQu MSBhbmQgbGF0ZXIKLSAgIC4gREcvVVggNS40UjQuMTEKLSAgIC4gRGlnaXRhbCBVTklYIDMuMiBh bmQgNC4wCi0gICAuIEhQLVVYIDkuMDAgYW5kIGxhdGVyCi0gICAuIElSSVggNi4wIGFuZCBsYXRl cgotICAgLiBMaW51eAotICAgLiBNYWMgT1MgWCAxMC40Ci0gICAuIE5lWFRTVEVQIDMueAotICAg LiBPcGVuQlNECi0gICAuIFFOWCA0LjI1IChleGNlcHQgUFRZIHByb2Nlc3MgdGVybWluYXRpb24g bm90IGRldGVjdGVkKQotICAgLiBTQ08gT1NSNS4wLjUKLSAgIC4gU0NPIFVuaXh3YXJlIDcKLSAg IC4gU0lOSVggNS40MgotICAgLiBTb2xhcmlzIDIueCBhbmQgNwotICAgLiBTdW5PUyA0LjEuMwot Ci0gIEZhaWx1cmVzIGluY2x1ZGU6Ci0gICAuIFNDTyBVTklYIDMuMnY0LjIgKGNvbXBpbGUgZmFp bHMgd2l0aCBzeW50YXggZXJyb3IgaW4gPG1lbW9yeS5oPikKLSAgIC4gSFAtVVggOC4wMCBhbmQg ZWFybGllciAobm8gdmhhbmd1cCBvciBwdHNuYW1lIHJvdXRpbmVzKQotKi8KLQotI2luY2x1ZGUg ImNrY3N5bS5oIgotI2luY2x1ZGUgImNrY2RlYi5oIgkJCS8qIFRvIHBpY2sgdXAgTkVUUFRZIGRl ZmluaXRpb24gKi8KLQotI2lmbmRlZiBORVRQVFkJCQkJLyogU2VsZWN0b3IgZm9yIFBUWSBzdXBw b3J0ICovCi0KLWNoYXIgKiBwdHl2ZXIgPSAiTm8gUFRZIHN1cHBvcnQiOwotCi0jZWxzZSAgLyog KHJlc3Qgb2YgdGhpcyBtb2R1bGUuLi4pICovCi0KLWNoYXIgKiBwdHl2ZXIgPSAiUFRZIHN1cHBv cnQgOC4wLjAxNiwgMjIgQXVnIDIwMDciOwotCi0vKiBUaGVzZSB3aWxsIG5vIGRvdWJ0IG5lZWQg YWRqdXN0bWVudC4uLiAqLwotCi0jaWZuZGVmIE5FWFQKLSNkZWZpbmUgSEFWRV9TRVRTSUQKLSNl bmRpZiAvKiBORVhUICovCi0jZGVmaW5lIEhBVkVfS0lMTFBHCi0jZGVmaW5lIEhBVkVfVFRZTkFN RQotI2RlZmluZSBIQVZFX1dBSVRQSUQKLQotI2lmZGVmIFNVTk9TNDEKLSNkZWZpbmUgQlNENDRP UlBPU0lYCi0jZW5kaWYJLyogU1VOT1M0MSAqLwotCi0jaWZuZGVmIFVTRV9URVJNSU8KLSNpZmRl ZiBMSU5VWAotI2RlZmluZSBVU0VfVEVSTUlPCi0jZWxzZQotI2lmZGVmIEFUVFNWCi0jZGVmaW5l IFVTRV9URVJNSU8KLSNlbHNlCi0jaWZkZWYgSFBVWAotI2RlZmluZSBVU0VfVEVSTUlPCi0jZWxz ZQotI2lmZGVmIEFJWAotI2RlZmluZSBVU0VfVEVSTUlPCi0jZWxzZQotI2lmZGVmIEJTRDQ0T1JQ T1NJWAotI2RlZmluZSBVU0VfVEVSTUlPCi0jZWxzZQotI2lmZGVmIElSSVg2MAotI2RlZmluZSBV U0VfVEVSTUlPCi0jZWxzZQotI2lmZGVmIFFOWAotI2RlZmluZSBVU0VfVEVSTUlPCi0jZW5kaWYg LyogUU5YICovCi0jZW5kaWYgLyogSVJJWDYwICovCi0jZW5kaWYgLyogQlNENDRPUlBPU0lYICov Ci0jZW5kaWYgLyogQUlYICovCi0jZW5kaWYgLyogSFBVWCAqLwotI2VuZGlmIC8qIEFUVFNWICov Ci0jZW5kaWYgLyogTElOVVggKi8KLSNlbmRpZiAvKiBVU0VfVEVSTUlPICovCi0KLSNpZmRlZiBR TlgKLSNpbmNsdWRlIDxmY250bC5oPgotI2VuZGlmIC8qIFFOWCAqLwotCi0jaWZkZWYgVVNFX1RF Uk1JTwotI2RlZmluZSBQT1NJWF9URVJNSU9TCQkJLyogU2VlbXMgdG8gYmUgYSBtaXNub21lciAq LwotI2VuZGlmIC8qIFVTRV9URVJNSU8gKi8KLQotI2lmZGVmIE5FWFQKLSNpZm5kZWYgR0VUUEdS UF9PTkVBUkcKLSNkZWZpbmUgR0VUUEdSUF9PTkVBUkcKLSNlbmRpZiAvKiBHRVRQR1JQX09ORUFS RyAqLwotI2VuZGlmIC8qIE5FWFQgKi8KLQotI2lmZGVmIFdBTlRfVVRNUAkJCS8qIFNlZSBja3Vw dHkuaCAqLwotLyoKLSAgV0FOVF9VVE1QIGlzIG5vdCBkZWZpbmVkIGJlY2F1c2UgKGEpIHRoZSB1 dG1wL3d0bXAganVuayBpcyB0aGUgbW9zdAotICBub25wb3J0YWJsZSBwYXJ0IG9mIHRoaXMgbW9k dWxlLCBhbmQgKGIpIHdlJ3JlIG5vdCBsb2dnaW5nIGFueWJvZHkKLSAgaW4sIHdlJ3JlIGp1c3Qg cnVubmluZyBhIHByb2Nlc3MsIGFuZCBkb24ndCBuZWVkIHRvIHdyaXRlIHV0bXAvd3RtcCByZWNv cmRzLgotKi8KLSNpZm5kZWYgSEFWRV9TRVRVVFhFTlQJCQkvKiBXaG8gaGFzIDx1dG1weC5oPiAq LwotI2lmZGVmIFNPTEFSSVMKLSNkZWZpbmUgSEFWRV9TRVRVVFhFTlQKLSNlbHNlCi0jaWZkZWYg SVJJWDYwCi0jZGVmaW5lIEhBVkVfU0VUVVRYRU5UCi0jZWxzZQotI2lmZGVmIENLX1NDT1Y1Ci0j ZGVmaW5lIEhBVkVfU0VUVVRYRU5UCi0jZWxzZQotI2lmZGVmIEhQVVgxMAotI2RlZmluZSBIQVZF X1NFVFVUWEVOVAotI2Vsc2UKLSNpZmRlZiBVTklYV0FSRQotI2RlZmluZSBIQVZFX1NFVFVUWEVO VAotI2Vsc2UKLSNpZmRlZiBJUklYNjAKLSNkZWZpbmUgSEFWRV9TRVRVVFhFTlQKLSNlbmRpZiAv KiBJUklYNjAgKi8KLSNlbmRpZiAvKiBVTklYV0FSRSAqLwotI2VuZGlmIC8qIEhQVVgxMCAqLwot I2VuZGlmIC8qIENLX1NDT1Y1ICovCi0jZW5kaWYgLyogSVJJWDYwICovCi0jZW5kaWYgLyogU09M QVJJUyAqLwotI2VuZGlmIC8qIEhBVkVfU0VUVVRYRU5UICovCi0KLSNpZm5kZWYgSEFWRV9VVEhP U1QJCQkvKiBEb2VzIHV0bXAgaW5jbHVkZSB1dF9ob3N0W10/ICovCi0jaWZkZWYgSEFWRV9TRVRV VFhFTlQJCQkvKiB1dG1weCBhbHdheXMgZG9lcyAqLwotI2RlZmluZSBIQVZFX1VUSE9TVAotI2Vs c2UKLSNpZmRlZiBMSU5VWAkJCQkvKiBMaW51eCBkb2VzICovCi0jZGVmaW5lIEhBVkVfVVRIT1NU Ci0jZWxzZQotI2lmZGVmIFNVTk9TNAkJCQkvKiBTdW5PUyBkb2VzICovCi0jZGVmaW5lIEhBVkVf VVRIT1NUCi0jZWxzZQotI2lmZGVmIEFJWDQxCQkJCS8qIEFJWCA0LjEgYW5kIGxhdGVyIGRvICov Ci0jZGVmaW5lIEhBVkVfVVRIT1NUCi0jZW5kaWYgLyogQUlYNDEgKi8KLSNlbmRpZiAvKiBTVU5P UzQgKi8KLSNlbmRpZiAvKiBMSU5VWCAqLwotI2VuZGlmIC8qIEhBVkVfU0VUVVRYRU5UICovCi0j ZW5kaWYgLyogSEFWRV9VVEhPU1QgKi8KLQotI2lmbmRlZiBIQVZFX1VUX0hPU1QKLSNpZm5kZWYg Tk9fVVRfSE9TVAotI2RlZmluZSBOT19VVF9IT1NUCi0jZW5kaWYgLyogTk9fVVRfSE9TVCAqLwot I2VuZGlmIC8qIEhBVkVfVVRfSE9TVCAqLwotCi0jZW5kaWYgLyogV0FOVF9VVE1QICovCi0KLSNp ZmRlZiBMSU5VWAotI2RlZmluZSBDS19WSEFOR1VQCi0jZGVmaW5lIEhBVkVfU1lTX1NFTEVDVF9I Ci0jZGVmaW5lIEhBVkVfR0VUVVRFTlQKLSNkZWZpbmUgSEFWRV9TRVRVVEVOVAotI2RlZmluZSBI QVZFX1VQRFdUTVAKLSNlbmRpZiAvKiBMSU5VWCAqLwotCi0jaWZkZWYgSFBVWDEwCi0jZGVmaW5l IENLX1ZIQU5HVVAKLSNkZWZpbmUgVkhBTkdfRklSU1QKLSNkZWZpbmUgSEFWRV9QVFNOQU1FCi0j aWZuZGVmIEhBVkVfUFRZVFJBUAotI2RlZmluZSBIQVZFX1BUWVRSQVAKLSNlbmRpZiAvKiBIQVZF X1BUWVRSQVAgKi8KLSNlbHNlCi0jaWZkZWYgSFBVWDkKLSNkZWZpbmUgQ0tfVkhBTkdVUAotI2Rl ZmluZSBWSEFOR19GSVJTVAotI2RlZmluZSBIQVZFX1BUU05BTUUKLSNpZm5kZWYgSEFWRV9QVFlU UkFQCi0jZGVmaW5lIEhBVkVfUFRZVFJBUAotI2VuZGlmIC8qIEhBVkVfUFRZVFJBUCAqLwotI2Vu ZGlmIC8qIEhQVVg5ICovCi0jZW5kaWYgLyogSFBVWDEwICovCi0KLSNpZmRlZiBTVU5PUzQKLSNk ZWZpbmUgQ0tfVkhBTkdVUAotI2RlZmluZSBOT19VVF9QSUQKLSNkZWZpbmUgVkhBTkdfRklSU1QK LSNlbmRpZiAvKiBTVU5PUzQgKi8KLQotI2lmZGVmIElSSVg2MAotI2RlZmluZSBDS19WSEFOR1VQ Ci0jZGVmaW5lIEhBVkVfX0dFVFBUWQotI2VuZGlmIC8qIElSSVg2MCAqLwotCi0jaWZkZWYgU0lO SVgKLSNkZWZpbmUgSEFWRV9TVFJFQU1TCi0jZGVmaW5lIEhBVkVfR1JBTlRQVAotI2RlZmluZSBI QVZFX1BUU05BTUUKLSNkZWZpbmUgUFVTSF9QVEVNCi0jZGVmaW5lIFBVU0hfTERURVJNCi0jZGVm aW5lIFBVU0hfVFRDT01QQVQKLSNlbmRpZiAvKiBTSU5JWCAqLwotCi0jaWZkZWYgdWx0cml4Ci0j ZGVmaW5lIE1VU1RfU0VUUEdSUAotI2VuZGlmIC8qIHVsdHJpeCAqLwotCi0jaWZkZWYgUU5YCi0j ZGVmaW5lIE1VU1RfU0VUUEdSUAotI2RlZmluZSBOT19ERVZUVFkKLSNkZWZpbmUgSU5JVF9TUFRZ Ci0jZW5kaWYgLyogUU5YICovCi0KLSNpZmRlZiBMSU5VWAotI2lmZGVmIEhBVkVfUFRNWAotI2Rl ZmluZSBIQVZFX0dSQU5UUFQKLSNkZWZpbmUgSEFWRV9QVFNOQU1FCi0jZW5kaWYgLyogSEFWRV9Q VE1YICovCi0jZWxzZQotI2lmZGVmIEhBVkVfU1RSRUFNUwotI2RlZmluZSBIQVZFX1BUTVgKLSNl bmRpZiAvKiBIQVZFX1NUUkVBTVMgKi8KLSNlbmRpZiAvKiBMSU5VWCAqLwotCi0jaW5jbHVkZSAi Y2t1cHR5LmgiCi0KLSNpZmRlZiBQVFlOT0JMT0NLCi0jaWZuZGVmIE9fTkRFTEFZCi0jaWZkZWYg T19OT05CTE9DSwotI2RlZmluZSBPX05ERUxBWSBPX05PTkJMT0NLCi0jZW5kaWYgLyogT19OT05C TE9DSyAqLwotI2VuZGlmIC8qIE9fTkRFTEFZICovCi0jZWxzZSAvKiBQVFlOT0JMT0NLICovCi0j aWZkZWYgT19OREVMQVkKLSN1bmRlZiBPX05ERUxBWQotI2VuZGlmIC8qIE9fTkRFTEFZICovCi0j ZGVmaW5lIE9fTkRFTEFZIDAKLSNlbmRpZiAvKiBQVFlOT0JMT0NLICovCi0KLSNpZm5kZWYgT05M Q1IKLSNkZWZpbmUgT05MQ1IgMAotI2VuZGlmIC8qIE9OTENSICovCi0KLSNpZmRlZiBDS19XQUlU X0gKLSNpbmNsdWRlIDxzeXMvd2FpdC5oPgotI2VuZGlmIC8qIENLX1dBSVRfSCAqLwotCi0jaWZk ZWYgU1RSRUFNU1BUWQotI2lmbmRlZiBJTklUX1NQVFkKLSNkZWZpbmUgSU5JVF9TUFRZCi0jZW5k aWYgLyogSU5JVF9TUFRZICovCi0KLSNpbmNsdWRlIDxzeXMvc3RyZWFtLmg+Ci0jaW5jbHVkZSA8 c3Ryb3B0cy5oPgotI2luY2x1ZGUgPHRlcm1pby5oPgotCi0vKiBNYWtlIHN1cmUgd2UgZG9uJ3Qg Z2V0IHRoZSBCU0QgdmVyc2lvbiAqLwotCi0jaWZkZWYgSEFWRV9TWVNfVFRZX0gKLSNpbmNsdWRl ICIvdXNyL2luY2x1ZGUvc3lzL3R0eS5oIgotI2VuZGlmIC8qIEhBVkVfU1lTX1RUWV9IICovCi0K LSNpZmRlZiBIQVNfUFRZVkFSCQkJLyogV2hlcmUgaXMgdGhpcyBzZXQ/ICovCi0KLSNpbmNsdWRl IDxzeXMvcHR5dmFyLmg+Ci0KLSNlbHNlIC8qIEhBU19QVFlWQVIgKi8KLQotI2lmbmRlZiBUSU9D UEtUX0ZMVVNIV1JJVEUKLSNkZWZpbmUgVElPQ1BLVF9GTFVTSFdSSVRFIDB4MDIKLSNkZWZpbmUg VElPQ1BLVF9OT1NUT1AgICAgIDB4MTAKLSNkZWZpbmUgVElPQ1BLVF9ET1NUT1AgICAgIDB4MjAK LSNkZWZpbmUgVElPQ1BLVF9JT0NUTCAgICAgIDB4NDAKLSNlbmRpZiAvKiBUSU9DUEtUX0ZMVVNI V1JJVEUgKi8KLQotI2VuZGlmIC8qIEhBU19QVFlWQVIgKi8KLQotI2lmZGVmIEhBVkVfVFRZX0gK LSNpbmNsdWRlIDx0dHkuaD4KLSNlbmRpZiAvKiBIQVZFX1RUWV9IICovCi0KLS8qCi0gIEJlY2F1 c2Ugb2YgdGhlIHdheSBwdHlpYnVmIGlzIHVzZWQgd2l0aCBzdHJlYW1zIG1lc3NhZ2VzLCB3ZSBu ZWVkCi0gIHB0eWlidWYrMSB0byBiZSBvbiBhIGZ1bGwtd29yZCBib3VuZGFyeS4gIFRoZSBmb2xs b3dpbmcgd2VpcmRuZXNzCi0gIGlzIHNpbXBseSB0byBtYWtlIHRoYXQgaGFwcGVuLgotKi8KLWxv bmcgcHR5aWJ1ZmJ1ZltCVUZTSVovc2l6ZW9mKGxvbmcpKzFdOwotY2hhciAqcHR5aWJ1ZiA9ICgo Y2hhciAqKSZwdHlpYnVmYnVmWzFdKS0xOwotY2hhciAqcHR5aXAgPSAoKGNoYXIgKikmcHR5aWJ1 ZmJ1ZlsxXSktMTsKLWNoYXIgcHR5aWJ1ZjJbQlVGU0laXTsKLXVuc2lnbmVkIGNoYXIgY3RsYnVm W0JVRlNJWl07Ci1zdHJ1Y3Qgc3RyYnVmIHN0cmJ1ZmMsIHN0cmJ1ZmQ7Ci0KLWludCByZWFkc3Ry ZWFtKCk7Ci0KLSNlbHNlICAvKiAhIFNUUkVBTVNQVFkgKi8KLQotLyogSS9PIGRhdGEgYnVmZmVy cywgcG9pbnRlcnMsIGFuZCBjb3VudGVycy4gKi8KLQotY2hhciBwdHlpYnVmW0JVRlNJWl0sICpw dHlpcCA9IHB0eWlidWY7Ci1jaGFyIHB0eWlidWYyW0JVRlNJWl07Ci0KLSNlbmRpZiAvKiAhIFNU UkVBTVNQVFkgKi8KLQotI2lmbmRlZiBVU0VfVEVSTUlPCi1zdHJ1Y3QgdGVybWJ1ZiB7Ci0gICAg c3RydWN0IHNndHR5YiBzZzsKLSAgICBzdHJ1Y3QgdGNoYXJzIHRjOwotICAgIHN0cnVjdCBsdGNo YXJzIGx0YzsKLSAgICBpbnQgc3RhdGU7Ci0gICAgaW50IGxmbGFnczsKLX0gdGVybWJ1ZiwgdGVy bWJ1ZjI7Ci0KLSNkZWZpbmUgY2ZzZXRvc3BlZWQodHAsdmFsKSAodHApLT5zZy5zZ19vc3BlZWQg PSAodmFsKQotI2RlZmluZSBjZnNldGlzcGVlZCh0cCx2YWwpICh0cCktPnNnLnNnX2lzcGVlZCA9 ICh2YWwpCi0jZGVmaW5lIGNmZ2V0b3NwZWVkKHRwKSAgICAgKHRwKS0+c2cuc2dfb3NwZWVkCi0j ZGVmaW5lIGNmZ2V0aXNwZWVkKHRwKSAgICAgKHRwKS0+c2cuc2dfaXNwZWVkCi0KLSNlbHNlICAv KiBVU0VfVEVSTUlPICovCi0KLSNpZmRlZiBTWVNWX1RFUk1JTwotI2RlZmluZSB0ZXJtaW9zIHRl cm1pbwotI2VuZGlmIC8qIFNZU1ZfVEVSTUlPICovCi0KLSNpZm5kZWYgVENTQU5PVwotCi0jaWZk ZWYgVENTRVRTCi0KLSNkZWZpbmUgVENTQU5PVyBUQ1NFVFMKLSNkZWZpbmUgVENTQURSQUlOIFRD U0VUU1cKLSNkZWZpbmUgdGNnZXRhdHRyKGYsIHQpIGlvY3RsKGYsIFRDR0VUUywgKGNoYXIgKil0 KQotCi0jZWxzZSAvKiBUQ1NFVFMgKi8KLQotI2lmZGVmIFRDU0VUQQotI2RlZmluZSBUQ1NBTk9X IFRDU0VUQQotI2RlZmluZSBUQ1NBRFJBSU4gVENTRVRBVwotI2RlZmluZSB0Y2dldGF0dHIoZix0 KSBpb2N0bChmLFRDR0VUQSwoY2hhciAqKXQpCi0jZWxzZSAvKiBUQ1NFVEEgKi8KLSNkZWZpbmUg VENTQU5PVyBUSU9DU0VUQQotI2RlZmluZSBUQ1NBRFJBSU4gVElPQ1NFVEFXCi0jZGVmaW5lIHRj Z2V0YXR0cihmLHQpIGlvY3RsKGYsVElPQ0dFVEEsKGNoYXIgKil0KQotI2VuZGlmIC8qIFRDU0VU QSAqLwotCi0jZW5kaWYgLyogVENTRVRTICovCi0KLSNkZWZpbmUgdGNzZXRhdHRyKGYsYSx0KSBp b2N0bChmLGEsdCkKLSNkZWZpbmUgY2ZzZXRvc3BlZWQodHAsdmFsKSAodHApLT5jX2NmbGFnICY9 IH5DQkFVRDsodHApLT5jX2NmbGFnfD0odmFsKQotI2RlZmluZSBjZmdldG9zcGVlZCh0cCkgKCh0 cCktPmNfY2ZsYWcgJiBDQkFVRCkKLQotI2lmZGVmIENJQkFVRAotI2RlZmluZSBjZnNldGlzcGVl ZCh0cCx2YWwpIFwKLSAodHApLT5jX2NmbGFnICY9IH5DSUJBVUQ7ICh0cCktPmNfY2ZsYWcgfD0g KCh2YWwpPDxJQlNISUZUKQotI2RlZmluZSBjZmdldGlzcGVlZCh0cCkgKCgodHApLT5jX2NmbGFn ICYgQ0lCQVVEKT4+SUJTSElGVCkKLSNlbHNlIC8qIENJQkFVRCAqLwotI2RlZmluZSBjZnNldGlz cGVlZCh0cCx2YWwpICh0cCktPmNfY2ZsYWcgJj0gfkNCQVVEOyAodHApLT5jX2NmbGFnfD0odmFs KQotI2RlZmluZSBjZmdldGlzcGVlZCh0cCkgKCh0cCktPmNfY2ZsYWcgJiBDQkFVRCkKLSNlbmRp ZiAvKiBDSUJBVUQgKi8KLQotI2VuZGlmIC8qIFRDU0FOT1cgKi8KLQotI2lmZGVmIEhBVkVfT1BF TlBUWQotI2luY2x1ZGUgPHB0eS5oPgotI2VuZGlmCi0KLXN0cnVjdCB0ZXJtaW9zIHRlcm1idWYs IHRlcm1idWYyOyAgICAgICAvKiBwdHkgY29udHJvbCBzdHJ1Y3R1cmUgKi8KLQotI2lmZGVmIElO SVRfU1BUWQotc3RhdGljIGludCBzcHR5ID0gLTE7Ci0jZW5kaWYgLyogSU5JVF9TUFRZICovCi0K LSNlbmRpZiAvKiBVU0VfVEVSTUlPICovCi0KLSNpZmRlZiBRTlgJCQkJLyogMjk5ICovCi0jaWZu ZGVmIElYQU5ZCi0jZGVmaW5lIElYQU5ZIDAKLSNlbmRpZgkvKiBJWEFOWSAqLwotI2VuZGlmCS8q IFFOWCAqLwotCi1zdGF0aWMgaW50IG1zZyA9IDA7Ci0KLS8qIFZhcmlhYmxlcyBhdmFpbGFibGUg dG8gb3RoZXIgbW9kdWxlcyAqLwotCi1pbnQgcHR5X2ZvcmtfYWN0aXZlID0gMDsJCS8qIHB0eSBm b3JrIGlzIGFjdGl2ZSAqLwotUElEX1QgcHR5X2ZvcmtfcGlkID0gLTE7CQkvKiBwdHkgZm9yayBw aWQgKi8KLWludCBwdHlfc2xhdmVfZmQgPSAtMTsJCQkvKiBwdHkgc2xhdmUgZmlsZSBkZXNjcmlw dG9yICovCi1pbnQgcHR5X21hc3Rlcl9mZCA9IC0xOwkJCS8qIHB0eSBtYXN0ZXIgZmlsZSBkZXNj cmlwdG9yICovCi0KLS8qIHRlcm1idWYgcm91dGluZXMgKGJlZ2luKSAqLwotLyoKLSAgaW5pdF90 ZXJtYnVmKCkKLSAgY29weV90ZXJtYnVmKGNwKQotICBzZXRfdGVybWJ1ZigpCi0KLSAgVGhlc2Ug dGhyZWUgcm91dGluZXMgYXJlIHVzZWQgdG8gZ2V0IGFuZCBzZXQgdGhlICJ0ZXJtYnVmIiBzdHJ1 Y3R1cmUKLSAgdG8gYW5kIGZyb20gdGhlIGtlcm5lbC4gIGluaXRfdGVybWJ1ZigpIGdldHMgdGhl IGN1cnJlbnQgc2V0dGluZ3MuCi0gIGNvcHlfdGVybWJ1ZigpIGhhbmRzIGluIGEgbmV3ICJ0ZXJt YnVmIiB0byB3cml0ZSB0byB0aGUga2VybmVsLCBhbmQKLSAgc2V0X3Rlcm1idWYoKSB3cml0ZXMg dGhlIHN0cnVjdHVyZSBpbnRvIHRoZSBrZXJuZWwuCi0qLwotVk9JRAotaW5pdF90ZXJtYnVmKGZk KSBpbnQgZmQ7IHsKLSAgICBpbnQgdHR5ZmQ7Ci0gICAgaW50IHJjID0gMDsKLQotICAgIHR0eWZk ID0gZmQ7Ci0KLSNpZmRlZiBIQVZFX1NUUkVBTVMKLSAgICBkZWJ1ZyhGMTAwLCJpbml0X3Rlcm1i dWYgSEFWRV9TVFJFQU1TIiwiIiwwKTsKLSNlbHNlCi0gICAgZGVidWcoRjEwMCwiaW5pdF90ZXJt YnVmIEhBVkVfU1RSRUFNUyBOT1QgREVGSU5FRCIsIiIsMCk7Ci0jZW5kaWYJLyogSEFWRV9TVFJF QU1TICovCi0jaWZkZWYgU1RSRUFNU1BUWQotICAgIGRlYnVnKEYxMDAsImluaXRfdGVybWJ1ZiBT VFJFQU1TUFRZIiwiIiwwKTsKLSNlbHNlCi0gICAgZGVidWcoRjEwMCwiaW5pdF90ZXJtYnVmIFNU UkVBTVNQVFkgTk9UIERFRklORUQiLCIiLDApOwotI2VuZGlmCS8qIFNUUkVBTVNQVFkgKi8KLSNp ZmRlZiBJTklUX1NQVFkKLSAgICBkZWJ1ZyhGMTAwLCJpbml0X3Rlcm1idWYgSU5JVF9TUFRZIiwi IiwwKTsKLSNlbHNlCi0gICAgZGVidWcoRjEwMCwiaW5pdF90ZXJtYnVmIElOSVRfU1BUWSBOT1Qg REVGSU5FRCIsIiIsMCk7Ci0jZW5kaWYJLyogSU5JVF9TUFRZICovCi0KLSAgICBkZWJ1ZyhGMTAx LCJpbml0X3Rlcm1idWYgdHR5ZmQiLCIiLHR0eWZkKTsKLSNpZmRlZiBJTklUX1NQVFkKLSAgICBk ZWJ1ZyhGMTAxLCJpbml0X3Rlcm1idWYgc3B0eSIsIiIsc3B0eSk7Ci0jZW5kaWYJLyogSU5JVF9T UFRZICovCi0KLSAgICBtZW1zZXQoJnRlcm1idWYsMCxzaXplb2YodGVybWJ1ZikpOwotICAgIG1l bXNldCgmdGVybWJ1ZjIsMCxzaXplb2YodGVybWJ1ZjIpKTsKLSNpZm5kZWYJVVNFX1RFUk1JTwot ICAgIHJjID0gaW9jdGwodHR5ZmQsIFRJT0NHRVRQLCAoY2hhciAqKSZ0ZXJtYnVmLnNnKTsKLSAg ICByYyB8PSBpb2N0bCh0dHlmZCwgVElPQ0dFVEMsIChjaGFyICopJnRlcm1idWYudGMpOwotICAg IHJjIHw9IGlvY3RsKHR0eWZkLCBUSU9DR0xUQywgKGNoYXIgKikmdGVybWJ1Zi5sdGMpOwotI2lm ZGVmIFRJT0NHU1RBVEUKLSAgICByYyB8PSBpb2N0bCh0dHlmZCwgVElPQ0dTVEFURSwgKGNoYXIg KikmdGVybWJ1Zi5zdGF0ZSk7Ci0jZW5kaWYgLyogVElPQ0dTVEFURSAqLwotI2Vsc2UgLyogVVNF X1RFUk1JTyAqLwotICAgIGVycm5vID0gMDsKLSNpZmRlZiBJTklUX1NQVFkKLSAgICByYyA9IHRj Z2V0YXR0cihzcHR5LCAmdGVybWJ1Zik7Ci0gICAgZGVidWcoRjExMSwiaW5pdF90ZXJtYnVmKCkg dGNnZXRhdHRyKHNwdHkpIixja2l0b2EocmMpLGVycm5vKTsKLSNlbHNlCi0gICAgcmMgPSB0Y2dl dGF0dHIodHR5ZmQsICZ0ZXJtYnVmKTsKLSAgICBkZWJ1ZyhGMTExLCJpbml0X3Rlcm1idWYoKSB0 Y2dldGF0dHIodHR5ZmQpIixja2l0b2EocmMpLGVycm5vKTsKLSNlbmRpZiAvKiBJTklUX1NQVFkg Ki8KLSNlbmRpZiAvKiBVU0VfVEVSTUlPICovCi0gICAgaWYgKCFyYykKLSAgICAgIHRlcm1idWYy ID0gdGVybWJ1ZjsKLX0KLQotI2lmZGVmIFRJT0NQS1RfSU9DVEwKLVZPSUQKLWNvcHlfdGVybWJ1 ZihjcCwgbGVuKSBjaGFyICpjcDsgaW50IGxlbjsgewotICAgIGlmIChsZW4gPiBzaXplb2YodGVy bWJ1ZikpCi0gICAgICBsZW4gPSBzaXplb2YodGVybWJ1Zik7Ci0gICAgbWVtY3B5KChjaGFyICop JnRlcm1idWYsIGNwLCBsZW4pOwotICAgIHRlcm1idWYyID0gdGVybWJ1ZjsKLX0KLSNlbmRpZiAv KiBUSU9DUEtUX0lPQ1RMICovCi0KLVZPSUQKLXNldF90ZXJtYnVmKGZkKSBpbnQgZmQ7IHsJCS8q IE9ubHkgbWFrZSB0aGUgbmVjZXNzYXJ5IGNoYW5nZXMuICovCi0gICAgaW50IHg7Ci0gICAgaW50 IHR0eWZkOwotICAgIHR0eWZkID0gZmQ7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJzZXRfdGVybWJ1ZiB0 dHlmZCIsIiIsdHR5ZmQpOwotI2lmZGVmIElOSVRfU1BUWQotICAgIGRlYnVnKEYxMDEsInNldF90 ZXJtYnVmIHNwdHkiLCIiLHNwdHkpOwotI2VuZGlmCS8qIElOSVRfU1BUWSAqLwotCi0jaWZuZGVm CVVTRV9URVJNSU8KLSAgICBkZWJ1ZyhGMTAwLCJzZXRfdGVybWJ1ZiBVU0VfVEVSTUlPIiwiIiww KTsKLSAgICBpZiAobWVtY21wKChjaGFyICopJnRlcm1idWYuc2csIChjaGFyICopJnRlcm1idWYy LnNnLCBzaXplb2YodGVybWJ1Zi5zZykpKQotICAgICAgaW9jdGwodHR5ZmQsIFRJT0NTRVROLCAo Y2hhciAqKSZ0ZXJtYnVmLnNnKTsKLSAgICBpZiAobWVtY21wKChjaGFyICopJnRlcm1idWYudGMs IChjaGFyICopJnRlcm1idWYyLnRjLCBzaXplb2YodGVybWJ1Zi50YykpKQotICAgICAgaW9jdGwo dHR5ZmQsIFRJT0NTRVRDLCAoY2hhciAqKSZ0ZXJtYnVmLnRjKTsKLSAgICBpZiAobWVtY21wKChj aGFyICopJnRlcm1idWYubHRjLCAoY2hhciAqKSZ0ZXJtYnVmMi5sdGMsCi0JICAgICAgIHNpemVv Zih0ZXJtYnVmLmx0YykpKQotICAgICAgaW9jdGwodHR5ZmQsIFRJT0NTTFRDLCAoY2hhciAqKSZ0 ZXJtYnVmLmx0Yyk7Ci0gICAgaWYgKHRlcm1idWYubGZsYWdzICE9IHRlcm1idWYyLmxmbGFncykK LSAgICAgIGlvY3RsKHR0eWZkLCBUSU9DTFNFVCwgKGNoYXIgKikmdGVybWJ1Zi5sZmxhZ3MpOwot I2Vsc2UgIC8qIFVTRV9URVJNSU8gKi8KLSAgICB4ID0gbWVtY21wKChjaGFyICopJnRlcm1idWYs IChjaGFyICopJnRlcm1idWYyLCBzaXplb2YodGVybWJ1ZikpOwotICAgIGRlYnVnKEYxMDEsInNl dF90ZXJtYnVmICFVU0VfVEVSTUlPIG1lbWNtcCIsIiIseCk7Ci0gICAgeCA9IDE7CQkJCS8qIEZv cmNlIHRoaXMgKi8KLSAgICBpZiAoeCkgewotCWludCB4OwotCWVycm5vID0gMDsKLSNpZmRlZiBJ TklUX1NQVFkKLQlkZWJ1ZyhGMTAwLCJzZXRfdGVybWJ1ZiBJTklUX1NQVFkiLCIiLDApOwotCXgg PSB0Y3NldGF0dHIoc3B0eSwgVENTQU5PVywgJnRlcm1idWYpOwotCWRlYnVnKEYxMTEsInNldF90 ZXJtYnVmIHRjc2V0YXR0cihzcHR5KSIsY2tpdG9hKHgpLGVycm5vKTsKLSNlbHNlCi0JZGVidWco RjEwMCwic2V0X3Rlcm1idWYgIUlOSVRfU1BUWSIsIiIsMCk7Ci0JeCA9IHRjc2V0YXR0cih0dHlm ZCwgVENTQU5PVywgJnRlcm1idWYpOwotCWRlYnVnKEYxMTEsInNldF90ZXJtYnVmIHRjc2V0YXR0 cih0dHlmZCkiLGNraXRvYSh4KSxlcnJubyk7Ci0jZW5kaWYgLyogSU5JVF9TUFRZICovCi0gICAg fQotI2VuZGlmIC8qIFVTRV9URVJNSU8gKi8KLX0KLS8qIHRlcm1idWYgcm91dGluZXMgKGVuZCkg Ki8KLQotVk9JRAotcHR5aW50X3ZoYW5ndXAoKSB7Ci0jaWZkZWYgQ0tfVkhBTkdVUAotI2lmZGVm IENLX1BPU0lYX1NJRwotICAgIHN0cnVjdCBzaWdhY3Rpb24gc2E7Ci0gICAgLyogSW5pdGlhbGl6 ZSAic2EiIHN0cnVjdHVyZS4gKi8KLSAgICBzaWdlbXB0eXNldCgmc2Euc2FfbWFzayk7Ci0gICAg c2Euc2FfZmxhZ3MgPSAwOwotICAgIHNhLnNhX2hhbmRsZXIgPSBTSUdfSUdOOwotICAgIHNpZ2Fj dGlvbihTSUdIVVAsICZzYSwgKHN0cnVjdCBzaWdhY3Rpb24gKikwKTsKLSAgICB2aGFuZ3VwKCk7 Ci0gICAgc2Euc2FfaGFuZGxlciA9IFNJR19ERkw7Ci0gICAgc2lnYWN0aW9uKFNJR0hVUCwgJnNh LCAoc3RydWN0IHNpZ2FjdGlvbiAqKTApOwotI2Vsc2UgLyogQ0tfUE9TSVhfU0lHICovCi0gICAg c2lnbmFsKFNJR0hVUCxTSUdfSUdOKTsKLSAgICB2aGFuZ3VwKCk7Ci0gICAgc2lnbmFsKFNJR0hV UCxTSUdfREZMKTsKLSNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KLSNlbmRpZiAvKiBDS19WSEFO R1VQICovCi19Ci0KLS8qCi0gIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdHdpY2UuICBJdCdzIG5v dCBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IHRoYXQgdGhlCi0gIHNldHNpZCgpIG9yIFRJT0NTQ1RU WSBpb2N0bHMgc3VjY2VlZCAodGhleSBtYXkgbm90IHRoZSBzZWNvbmQgdGltZSksIGJ1dAotICBy YXRoZXIgdGhhdCB3ZSBoYXZlIGEgY29udHJvbGxpbmcgdGVybWluYWwgYXQgdGhlIGVuZC4gIEl0 IGlzIGFzc3VtZWQgdGhhdAotICB2aGFuZ3VwIGRvZXNuJ3QgZXhpc3QgYW5kIGNvbmZ1c2UgdGhl IHByb2Nlc3MncyBub3Rpb24gb2YgY29udHJvbGxpbmcKLSAgdGVybWluYWwgb24gYW55IHN5c3Rl bSB3aXRob3V0IFRJT0NOT1RUWS4gIFRoYXQgaXMsIGVpdGhlciB2aGFuZ3VwKCkgbGVhdmVzCi0g IHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbCBpbiB0YWN0LCBicmVha3MgdGhlIGFzc29jaWF0aW9u IGNvbXBsZXRlbHksIG9yIHRoZQotICBzeXN0ZW0gcHJvdmlkZXMgVElPQ05PVFRZIHRvIGdldCB0 aGluZ3MgYmFjayBpbnRvIGEgcmVhc29uYWJsZSBzdGF0ZS4gIEluCi0gIHByYWN0aWNlLCB2aGFu Z3VwKCkgZWl0aGVyIGJyZWFrcyB0aGUgYXNzb2NpYXRpb24gY29tcGxldGVseSBvciBkb2Vzbid0 Ci0gIGVmZmVjdCBjb250cm9sbGluZyB0ZXJtaW5hbHMsIHNvIHRoaXMgY29uZGl0aW9uIGlzIG1l dC4KLSovCi1sb25nCi1wdHlpbnRfdm9pZF9hc3NvY2lhdGlvbigpIHsKLSAgICBpbnQgY29uX2Zk OwotI2lmZGVmIEhBVkVfU0VUU0lECi0gICAgZGVidWcoRjExMCwKLQkgICJwdHlpbnRfdm9pZF9h c3NvY2lhdGlvbigpIiwKLQkgICJzZXRzaWQoKSIsCi0JICAwCi0JICApOwotICAgIHNldHNpZCgp OwotI2VuZGlmIC8qIEhBVkVfU0VUU0lEICovCi0KLSNpZm5kZWYgTk9fREVWVFRZCi0gICAgLyog Vm9pZCB0dHkgYXNzb2NpYXRpb24gZmlyc3QgKi8KLSNpZmRlZiBUSU9DTk9UVFkKLSAgICBjb25f ZmQgPSBvcGVuKCIvZGV2L3R0eSIsIE9fUkRXUik7Ci0gICAgZGVidWcoRjExMSwKLQkgICJwdHlp bnRfdm9pZF9hc3NvY2lhdGlvbigpIG9wZW4oL2Rldi90dHksT19SRFdSKSIsCi0JICAiL2Rldi90 dHkiLAotCSAgY29uX2ZkKTsKLSAgICBpZiAoY29uX2ZkID49IDApIHsKLSAgICAgICAgaW9jdGwo Y29uX2ZkLCBUSU9DTk9UVFksIDApOwotICAgICAgICBjbG9zZShjb25fZmQpOwotICAgIH0KLSNp ZmRlZiBERUJVRwotICAgIGVsc2UgZGVidWcoRjEwMSwgInB0eWludF92b2lkX2Fzc29jaWF0aW9u KCkgb3BlbigpIGVycm5vIiwiIixlcnJubyk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNlbmRpZiAv KiBUSU9DTk9UVFkgKi8KLSNlbmRpZiAvKiBOT19ERVZUVFkgKi8KLSAgICByZXR1cm4oMCk7Ci19 Ci0KLS8qIFBJRCBtYXkgYmUgemVybyBmb3IgdW5rbm93bi4qLwotCi1sb25nCi1wdHlfY2xlYW51 cChzbGF2ZSwgcGlkLCB1cGRhdGVfdXRtcCkgY2hhciAqc2xhdmU7IGludCBwaWQ7IGludCB1cGRh dGVfdXRtcDsgewotI2lmZGVmIFZIQU5HX0xBU1QKLSAgICBpbnQgcmV0dmFsLCBmZDsKLSNlbmRp ZiAvKiBWSEFOR19MQVNUICovCi0KLSAgICBkZWJ1ZyhGMTExLCJwdHlfY2xlYW51cCgpIixzbGF2 ZSxwaWQpOwotI2lmZGVmIFdBTlRfVVRNUAotICAgIGlmICh1cGRhdGVfdXRtcCkKLSAgICAgIHB0 eV91cGRhdGVfdXRtcChQVFlfREVBRF9QUk9DRVNTLAotCQkgICAgICAwLAotCQkgICAgICAiIiwK LQkJICAgICAgc2xhdmUsCi0JCSAgICAgIChjaGFyICopMCwKLQkJICAgICAgUFRZX1VUTVBfVVNF Uk5BTUVfVkFMSUQKLQkJICAgICAgKTsKLSNlbmRpZiAvKiBXQU5UX1VUTVAgKi8KLQotI2lmZGVm IFNFVFVJRAotICAgIGNobW9kKHNsYXZlLCAwNjY2KTsKLSAgICBjaG93bihzbGF2ZSwgMCwgMCk7 Ci0jZW5kaWYgLyogU0VUVUlEICovCi0KLSNpZmRlZiBIQVZFX1JFVk9LRQotICAgIHJldm9rZShz bGF2ZSk7Ci0gICAgLyoKLSAgICAgICBSZXZva2UgaXNuJ3QgZ3VhcmFudGVlZCB0byBzZW5kIGEg U0lHSFVQIHRvIHRoZSBwcm9jZXNzZXMgaXQKLSAgICAgICBkaXNzb2NpYXRlcyBmcm9tIHRoZSB0 ZXJtaW5hbC4gIFRoZSBiZXN0IHNvbHV0aW9uIHdpdGhvdXQgYSBQb3NpeAotICAgICAgIG1lY2hh bmlzbSBmb3IgZm9yY2luZyBhIGhhbmd1cCBpcyB0byBraWxscGcoKSB0aGUgcHJvY2VzcyBncm91 cCBvZiB0aGUKLSAgICAgICBwdHkuICBUaGlzIHdpbGwgYXQgbGVhc3Qga2lsbCB0aGUgc2hlbGwg YW5kIGhvcGVmdWxseSwgdGhlIGNoaWxkCi0gICAgICAgcHJvY2Vzc2VzLiAgVGhpcyBpcyBub3Qg YWx3YXlzIHRoZSBjYXNlLCBob3dldmVyLiAgSWYgdGhlIHNoZWxsIHB1dHMKLSAgICAgICBlYWNo IGpvYiBpbiBhIHByb2Nlc3MgZ3JvdXAgYW5kIGRvZXNuJ3QgcGFzcyBhbG9uZyBTSUdIVVAsIGFs bAotICAgICAgIHByb2Nlc3NlcyBtYXkgbm90IGRpZS4KLSAgICAqLwotICAgIGlmIChwaWQgPiAw KSB7Ci0jaWZkZWYgSEFWRV9LSUxMUEcKLQlraWxscGcocGlkLCBTSUdIVVApOwotI2Vsc2UKLQlr aWxsKC0ocGlkKSwgU0lHSFVQKTsKLSNlbmRpZiAvKkhBVkVfS0lMTFBHKi8KLSAgICB9Ci0jZWxz ZSAvKiBIQVZFX1JFVk9LRSovCi0jaWZkZWYgVkhBTkdfTEFTVAotICAgIHsKLSAgICAgICAgaW50 IHN0YXR1czsKLSNpZmRlZiBDS19QT1NJWF9TSUcKLSAgICAgICAgc2lnc2V0X3Qgb2xkLCBuZXc7 Ci0gICAgICAgIHNpZ2VtcHR5c2V0KCZuZXcpOwotICAgICAgICBzaWdhZGRzZXQoJm5ldywgU0lH Q0hMRCk7Ci0gICAgICAgIHNpZ3Byb2NtYXNrKFNJR19CTE9DSywgJm5ldywgJm9sZCk7Ci0jZWxz ZSAvKkNLX1BPU0lYX1NJRyovCi0gICAgICAgIGludCBtYXNrID0gc2lnYmxvY2soc2lnbWFzayhT SUdDSExEKSk7Ci0jZW5kaWYgLypDS19QT1NJWF9TSUcqLwotICAgICAgICBzd2l0Y2ggKHJldHZh bCA9IGZvcmsoKSkgewotCSAgY2FzZSAtMToKLSNpZmRlZiBDS19QT1NJWF9TSUcKLSAgICAgICAg ICAgIHNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmb2xkLCAwKTsKLSNlbHNlIC8qQ0tfUE9TSVhf U0lHKi8KLSAgICAgICAgICAgIHNpZ3NldG1hc2sobWFzayk7Ci0jZW5kaWYgLypDS19QT1NJWF9T SUcqLwotICAgICAgICAgICAgcmV0dXJuIGVycm5vOwotCSAgY2FzZSAwOgotICAgICAgICAgICAg cHR5aW50X3ZvaWRfYXNzb2NpYXRpb24oKTsKLSAgICAgICAgICAgIGlmIChyZXR2YWwgPSAocHR5 X29wZW5fY3R0eShzbGF2ZSwgJmZkLCAtMSkpKQotCSAgICAgIGV4aXQocmV0dmFsKTsKLSAgICAg ICAgICAgIHB0eWludF92aGFuZ3VwKCk7Ci0gICAgICAgICAgICBleGl0KDApOwotCSAgICBicmVh azsKLQkgIGRlZmF1bHQ6Ci0jaWZkZWYgSEFWRV9XQUlUUElECi0gICAgICAgICAgICB3YWl0cGlk KHJldHZhbCwgJnN0YXR1cywgMCk7Ci0jZWxzZSAvKkhBVkVfV0FJVFBJRCovCi0gICAgICAgICAg ICB3YWl0KCZzdGF0dXMpOwotI2VuZGlmIC8qIEhBVkVfV0FJVFBJRCAqLwotI2lmZGVmIENLX1BP U0lYX1NJRwotICAgICAgICAgICAgc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZvbGQsIDApOwot I2Vsc2UgLypDS19QT1NJWF9TSUcqLwotICAgICAgICAgICAgc2lnc2V0bWFzayhtYXNrKTsKLSNl bmRpZiAvKkNLX1BPU0lYX1NJRyovCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg IH0KLSNlbmRpZiAvKlZIQU5HX0xBU1QqLwotI2VuZGlmIC8qIEhBVkVfUkVWT0tFKi8KLSNpZm5k ZWYgSEFWRV9TVFJFQU1TCi0gICAgc2xhdmVbc3RybGVuKCIvZGV2LyIpXSA9ICdwJzsKLSNpZmRl ZiBTRVRVSUQKLSAgICBjaG1vZChzbGF2ZSwgMDY2Nik7Ci0gICAgY2hvd24oc2xhdmUsIDAsIDAp OwotI2VuZGlmIC8qIFNFVFVJRCAqLwotI2VuZGlmIC8qIEhBVkVfU1RSRUFNUyAqLwotICAgIHJl dHVybigwKTsKLX0KLQotbG9uZwotcHR5X2dldHB0eShmZCwgc2xhdmUsIHNsYXZlbGVuZ3RoKSBp bnQgc2xhdmVsZW5ndGg7IGludCAqZmQ7IGNoYXIgKnNsYXZlOyB7Ci0gICAgY2hhciAqY3A7Ci0g ICAgY2hhciAqcDsKLSAgICBpbnQgaSwgcHR5bnVtOwotICAgIHN0cnVjdCBzdGF0IHN0YjsKLSNp Zm5kZWYgSEFWRV9PUEVOUFRZCi0jaWZuZGVmIEhBVkVfX0dFVFBUWQotICAgIGNoYXIgc2xhdmVi dWZbMTAyNF07Ci0jZW5kaWYgLyogSEFWRV9fR0VUUFRZICovCi0jZW5kaWYgLyogSEFWRV9PUEVO UFRZICovCi0jaWZkZWYgSEFWRV9fR0VUUFRZCi0gICAgY2hhciAqc2xhdmVyZXQ7CQkJLyogVGVt cCB0byBob2xkIHBvaW50ZXIgdG8gc2xhdmUgKi8KLSNlbmRpZiAvKkhBVkVfX0dFVFBUWSovCi0K LSNpZmRlZiBIQVZFX09QRU5QVFkKLSAgICBpbnQgc2xhdmVmZDsKLQotICAgIHB0eV9tYXN0ZXJf ZmQgPSAtMTsKLSAgICBkZWJ1ZyhGMTAwLCJIQVZFX09QRU5QVFkiLCIiLDApOwotICAgIGlmIChv cGVucHR5KGZkLAotCQkmc2xhdmVmZCwKLQkJc2xhdmUsCi0JCShzdHJ1Y3QgdGVybWlvcyAqKTAs Ci0JCShzdHJ1Y3Qgd2luc2l6ZSAqKTAKLQkJKQotCSkgewotCXB0eV9tYXN0ZXJfZmQgPSAqZmQ7 Ci0JcmV0dXJuKDEpOwotICAgIH0KLSAgICBjbG9zZShzbGF2ZWZkKTsKLSAgICByZXR1cm4oMCk7 Ci0KLSNlbHNlIC8qIEhBVkVfT1BFTlBUWSAqLwotCi0jaWZkZWYgSEFWRV9fR0VUUFRZCi0vKgot ICBUaGlzIGNvZGUgaXMgaW5jbHVkZWQgZm9yIElyaXg7IGFzIG9mIHZlcnNpb24gNS4zLCBJcml4 IGhhcyAvZGV2L3B0bXgsIGJ1dAotICBpdCBmYWlscyB0byB3b3JrIHByb3Blcmx5OyBldmVuIGFm dGVyIGNhbGxpbmcgdW5sb2NrcHQsIHJvb3QgZ2V0cyBwZXJtaXNzaW9uCi0gIGRlbmllZCBvcGVu aW5nIHRoZSBwdHkuICBUaGUgY29kZSB0byBzdXBwb3J0IF9nZXRwdHkgc2hvdWxkIGJlIHJlbW92 ZWQgaWYKLSAgSXJpeCBnZXRzIHdvcmtpbmcgc3RyZWFtcyBwdHlzIGluIGZhdm9yIG9mIG1haW50 YWluaW5nIHRoZSBsZWFzdCBuZWVkZWQgY29kZQotICBwYXRocy4KLSovCi0gICAgZGVidWcoRjEw MCwiSEFWRV9fR0VUUFRZIiwiIiwwKTsKLSAgICBpZiAoKHNsYXZlcmV0ID0gX2dldHB0eShmZCwg T19SRFdSIHwgT19OREVMQVksIDA2MDAsIDApKSA9PSAwKSB7Ci0JKmZkID0gLTE7Ci0JcmV0dXJu KFBUWV9HRVRQVFlfTk9QVFkpOwotICAgIH0KLSAgICBpZiAoc3RybGVuKHNsYXZlcmV0KSA+IHNs YXZlbGVuZ3RoIC0gMSkgewotCWNsb3NlKCpmZCk7Ci0JKmZkID0gLTE7Ci0JcmV0dXJuKFBUWV9H RVRQVFlfU0xBVkVfVE9PTE9ORyk7Ci0gICAgfSBlbHNlIHsKLQlja3N0cm5jcHkoc2xhdmUsIHNs YXZlcmV0LCBzbGF2ZWxlbmd0aCk7Ci0gICAgfQotICAgIHJldHVybigwKTsKLQotI2Vsc2UgLyog SEFWRV9fR0VUUFRZICovCi0KLSAgICAqZmQgPSBvcGVuKCIvZGV2L3B0eW0vY2xvbmUiLCBPX1JE V1J8T19OREVMQVkpOyAvKiBIUFVYICovCi0gICAgaWYgKCpmZCA+PSAwKSB7Ci0gICAgICAgIGRl YnVnKEYxMTAsInB0eV9nZXRwdHkoKSIsIm9wZW4oL2Rldi9wdHltL2Nsb25lKSBzdWNjZXNzIiww KTsKLSAgICAgICAgZ290byBoYXZlX2ZkOwotICAgIH0KLQotI2lmZGVmIEhBVkVfUFRNWAotICAg IGRlYnVnKEYxMDAsIkhBVkVfUFRNWCIsIiIsMCk7Ci0gICAgKmZkID0gb3BlbigiL2Rldi9wdG14 IixPX1JEV1J8T19OREVMQVkpOwotICAgIGlmICgqZmQgPj0gMCkgewotICAgICAgICBkZWJ1ZyhG MTEwLCJwdHlfZ2V0cHR5KCkiLCJvcGVuKC9kZXYvcHRteCkgc3VjY2VzcyIsMCk7Ci0gICAgICAg IGdvdG8gaGF2ZV9mZDsKLSAgICB9Ci0jZW5kaWYgLyogSEFWRV9QVE1YICovCi0KLSAgICAqZmQg PSBvcGVuKCIvZGV2L3B0YyIsIE9fUkRXUnxPX05ERUxBWSk7IC8qIEFJWCAqLwotICAgIGlmICgq ZmQgPj0gMCkgewotICAgICAgICBkZWJ1ZyhGMTEwLCJwdHlfZ2V0cHR5KCkiLCJvcGVuKC9kZXYv cHRjKSBzdWNjZXNzIiwwKTsKLSAgICAgICAgZ290byBoYXZlX2ZkOwotICAgIH0KLSAgICAqZmQg PSBvcGVuKCIvZGV2L3B0eSIsIE9fUkRXUnxPX05ERUxBWSk7IC8qIHN5c3ZpbXAgKi8KLSAgICBp ZiAoKmZkID49IDApCi0gICAgICAgIGRlYnVnKEYxMTAsInB0eV9nZXRwdHkoKSIsIm9wZW4oL2Rl di9wdHkpIHN1Y2Nlc3MiLDApOwotCi0gIGhhdmVfZmQ6Ci0gICAgLyogVGhpcyB3b3VsZCBiZSB0 aGUgcHR5IG1hc3RlciAqLwotICAgIGRlYnVnKEYxMDEsInB0eV9nZXRwdHkgZmQoQSkiLCIiLCpm ZCk7Ci0gICAgaWYgKCpmZCA+PSAwKSB7Ci0JcHR5X21hc3Rlcl9mZCA9ICpmZDsKLQotI2lmZGVm IEhBVkVfR1JBTlRQVAotI2lmZGVmIEhBVkVfUFRNWAotICAgICAgICBkZWJ1ZyhGMTAwLCJIQVZF X0dSQU5UUFQiLCIiLDApOwotCWlmIChncmFudHB0KCpmZCkgfHwgdW5sb2NrcHQoKmZkKSkKLQkg IHJldHVybihQVFlfR0VUUFRZX1NUUkVBTVMpOwotI2VuZGlmIC8qIEhBVkVfUFRNWCAqLwotI2Vu ZGlmIC8qIEhBVkVfR1JBTlRQVCAqLwotCi0jaWZkZWYgSEFWRV9QVFNOQU1FCi0gICAgICAgIGRl YnVnKEYxMDAsIkhBVkVfUFRTTkFNRSIsIiIsMCk7Ci0JcCA9IChjaGFyICopcHRzbmFtZSgqZmQp OwotICAgICAgICBkZWJ1ZyhGMTEwLCJwdHlfZ2V0cHR5KCkgcHRzbmFtZSgpIixwLDApOwotI2Vs c2UKLSNpZmRlZiBIQVZFX1RUWU5BTUUKLSAgICAgICAgZGVidWcoRjEwMCwiSEFWRV9UVFlOQU1F IiwiIiwwKTsKLQlwID0gdHR5bmFtZSgqZmQpOwotICAgICAgICBkZWJ1ZyhGMTEwLCJwdHlfZ2V0 cHR5KCkgdHR5bmFtZSgpIixwLDApOwotI2Vsc2UKLQkvKiBJZiB3ZSBkb24ndCBoYXZlIGVpdGhl ciB3aGF0IGRvIHdlIGRvPyAqLwotICAJcmV0dXJuKFBUWV9HRVRQVFlfTk9QVFkpOwkvKiBwdW50 ICovCi0jZW5kaWYgLyogSEFWRV9UVFlOQU1FICovCi0jZW5kaWYgLyogSEFWRV9QVFNOQU1FICov Ci0JaWYgKHApIHsKLQkgICAgaWYgKHN0cmxlbihwKSA+IHNsYXZlbGVuZ3RoIC0gMSkgewotICAg ICAgICAgICAgICAgIGNsb3NlICgqZmQpOwotICAgICAgICAgICAgICAgICpmZCA9IC0xOwotICAg ICAgICAgICAgICAgIHJldHVybihQVFlfR0VUUFRZX1NMQVZFX1RPT0xPTkcpOwotCSAgICB9Ci0J ICAgIGNrc3RybmNweShzbGF2ZSwgcCwgc2xhdmVsZW5ndGgpOwotCSAgICByZXR1cm4oMCk7Ci0J fQotCWlmIChmc3RhdCgqZmQsICZzdGIpIDwgMCkgewotCSAgICBjbG9zZSgqZmQpOwotCSAgICBy ZXR1cm4oUFRZX0dFVFBUWV9GU1RBVCk7Ci0JfQotCXB0eW51bSA9IChpbnQpKHN0Yi5zdF9yZGV2 JjB4RkYpOwotCXNwcmludGYoc2xhdmVidWYsICIvZGV2L3R0eXAleCIsIHB0eW51bSk7IC8qIHNh ZmUgKi8KLQlpZiAoc3RybGVuKHNsYXZlYnVmKSA+IHNsYXZlbGVuZ3RoIC0gMSkgewotCSAgICBj bG9zZSgqZmQpOwotCSAgICAqZmQgPSAtMTsKLQkgICAgcmV0dXJuKFBUWV9HRVRQVFlfU0xBVkVf VE9PTE9ORyk7Ci0JfQotICAgICAgICBkZWJ1ZyhGMTEwLCJwdHlfZ2V0cHR5KCkgc2xhdmVidWYi LHNsYXZlYnVmLDApOwotCWNrc3RybmNweShzbGF2ZSwgc2xhdmVidWYsIHNsYXZlbGVuZ3RoKTsK LQlyZXR1cm4oMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAJZm9yIChjcCA9ICJwcXJzdHV2d3h5elBR UlNUIjsqY3A7IGNwKyspIHsKLQkgICAgc3ByaW50ZihzbGF2ZWJ1ZiwiL2Rldi9wdHlYWCIpOyAv KiBzYWZlICovCi0JICAgIHNsYXZlYnVmW3NpemVvZigiL2Rldi9wdHkiKSAtIDFdID0gKmNwOwot CSAgICBzbGF2ZWJ1ZltzaXplb2YoIi9kZXYvcHR5cCIpIC0gMV0gPSAnMCc7Ci0JICAgIGlmIChz dGF0KHNsYXZlYnVmLCAmc3RiKSA8IDApCi0JICAgICAgYnJlYWs7Ci0JICAgIGZvciAoaSA9IDA7 IGkgPCAxNjsgaSsrKSB7Ci0JCXNsYXZlYnVmW3NpemVvZigiL2Rldi9wdHlwIikgLSAxXSA9ICIw MTIzNDU2Nzg5YWJjZGVmIltpXTsKLQkJZXJybm8gPSAwOwotCQkqZmQgPSBvcGVuKHNsYXZlYnVm LCBPX1JEV1J8T19OREVMQVkpOwotCQlpZiAoKmZkIDwgMCkgewotCQkgICAgZGVidWcoRjExMSwi cHR5X2dldHB0eSgpIHB0eSBtYXN0ZXIgb3BlbiBlcnJvciIsCi0JCQkgIHNsYXZlYnVmLGVycm5v KTsKLQkJICAgIGNvbnRpbnVlOwotCQl9Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwicHR5 X2dldHB0eSgpIGZvdW5kIHB0eSBtYXN0ZXIiLHNsYXZlYnVmLCpmZCk7Ci0JCXNsYXZlYnVmW3Np emVvZigiL2Rldi8iKSAtIDFdID0gJ3QnOyAvKiBnb3QgcHR5ICovCi0JCWlmIChzdHJsZW4oc2xh dmVidWYpID4gc2xhdmVsZW5ndGggLTEpIHsKLQkJICAgIGNsb3NlKCpmZCk7Ci0JCSAgICAqZmQg PSAtMTsKLQkJICAgIHJldHVybihQVFlfR0VUUFRZX1NMQVZFX1RPT0xPTkcpOwotCQl9Ci0JCWNr c3RybmNweShzbGF2ZSwgc2xhdmVidWYsIHNsYXZlbGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJwdHlfZ2V0cHR5IHNsYXZlIG5hbWUiLHNsYXZlLDApOwotCQlwdHlfbWFzdGVy X2ZkID0gKmZkOwotCQlyZXR1cm4oMCk7Ci0JICAgIH0KLQl9Ci0JcmV0dXJuKFBUWV9HRVRQVFlf Tk9QVFkpOwotICAgIH0KLSNlbmRpZiAvKkhBVkVfX0dFVFBUWSovCi0jZW5kaWYgLyogSEFWRV9P UEVOUFRZICovCi19Ci0KLWxvbmcKLXB0eV9pbml0KCkgewotI2lmZGVmIEhBVkVfUFRZTQotICAg IHN0YXRpYyBjaGFyIGR1bW15OwotICAgIGRlYnVnKEYxMDAsIkhBVkVfUFRZTSIsIiIsMCk7Ci0g ICAgdHR5X2JhbmsgPSAgJm1hc3Rlcl9uYW1lW3N0cmxlbigiL2Rldi9wdHltL3B0eSIpXTsKLSAg ICB0dHlfbnVtICA9ICAmbWFzdGVyX25hbWVbc3RybGVuKCIvZGV2L3B0eW0vcHR5WCIpXTsKLSAg ICBzbGF2ZV9iYW5rID0gJnNsYXZlX25hbWVbc3RybGVuKCIvZGV2L3B0eS90dHkiKV07Ci0gICAg c2xhdmVfbnVtICA9ICZzbGF2ZV9uYW1lW3N0cmxlbigiL2Rldi9wdHkvdHR5WCIpXTsKLSNlbmRp ZgotICAgIHJldHVybigwTCk7Ci19Ci0KLS8qCi0gIFRoZSBmb2xsb3dpbmcgaXMgYW4gYXJyYXkg b2YgbW9kdWxlcyB0aGF0IHNob3VsZCBiZSBwdXNoZWQgb24gdGhlIHN0cmVhbS4KLSAgU2VlIGNv bmZpZ3VyZS5pbiBmb3IgY2F2aWF0cyBhbmQgbm90ZXMgYWJvdXQgd2hlbiB0aGlzIGFycmF5IGlz IHVzZWQgYW5kIG5vdAotICB1c2VkLgotKi8KLSNpZmRlZiBIQVZFX1NUUkVBTVMKLSNpZm5kZWYg SEFWRV9MSU5FX1BVU0gKLXN0YXRpYyBjaGFyICpwdXNoX2xpc3RbXSA9IHsKLSNpZmRlZiBQVVNI X1BURU0KLSAgICAicHRlbSIsCi0jZW5kaWYKLSNpZmRlZiBQVVNIX0xEVEVSTQotICAgICJsZHRl cm0iLAotI2VuZGlmCi0jaWZkZWYgUFVTSF9UVENPTVBBVAotICAgICJ0dGNvbXBhdCIsCi0jZW5k aWYKLSAgICAwCi19OwotI2VuZGlmIC8qIEhBVkVfTElORV9QVVNIICovCi0jZW5kaWYgLyogSEFW RV9TVFJFQU1TICovCi0KLWxvbmcKLXB0eV9pbml0aWFsaXplX3NsYXZlIChmZCkgaW50IGZkOyB7 Ci0jaWZkZWYgUE9TSVhfVEVSTUlPUwotI2lmbmRlZiB1bHRyaXgKLSAgICBzdHJ1Y3QgdGVybWlv cyBuZXdfdGVybWlvOwotI2Vsc2UKLSAgICBzdHJ1Y3Qgc2d0dHliIGI7Ci0jZW5kaWYgLyogdWx0 cml4ICovCi0jZWxzZQotICAgIHN0cnVjdCBzZ3R0eWIgYjsKLSNlbmRpZiAvKiBQT1NJWF9URVJN SU9TICovCi0gICAgaW50IHBpZDsKLSNpZmRlZiBQT1NJWF9URVJNSU9TCi0jaWZuZGVmIHVsdHJp eAotICAgIGludCByYzsKLSNlbmRpZiAvKiB1bHRyaXggKi8KLSNlbmRpZiAvKiBQT1NJWF9URVJN SU9TICovCi0KLSAgICBkZWJ1ZyhGMTExLCJwdHlfaW5pdGlhbGl6ZV9zbGF2ZSgpIiwiZmQiLGZk KTsKLQotI2lmZGVmIEhBVkVfU1RSRUFNUwotI2lmZGVmIEhBVkVfTElORV9QVVNICi0gICAgd2hp bGUgKGlvY3RsKGZkLElfUE9QLDApID09IDApIDsJLyogQ2xlYXIgb3V0IGFueSBvbGQgbGluZWQn cyAqLwotCi0gICAgaWYgKGxpbmVfcHVzaChmZCkgPCAwKSB7Ci0gICAgICAgIGRlYnVnKEYxMTAs InB0eV9pbml0aWFsaXplX3NsYXZlKCkiLCJsaW5lX3B1c2goKSBmYWlsZWQiLDApOwotCWNsb3Nl KGZkKTsKLSAgICAgICAgZmQgPSAtMTsKLSAgICAgICAgcmV0dXJuKFBUWV9PUEVOX1NMQVZFX0xJ TkVfUFVTSEZBSUwpOwotICAgIH0KLSNlbHNlIC8qTm8gbGluZV9wdXNoICovCi0gICAgewotICAg ICAgICBjaGFyICoqbW9kdWxlID0gJnB1c2hfbGlzdFswXTsKLSAgICAgICAgd2hpbGUgKCptb2R1 bGUpIHsKLQkgICAgaWYgKGlvY3RsKGZkLCBJX1BVU0gsICoobW9kdWxlKyspKSA8IDApIHsKLSAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJwdHlfaW5pdGlhbGl6ZV9zbGF2ZSgpIiwiaW9jdGwo SV9QVVNIKSBmYWlsZWQiLDApOwotCQlyZXR1cm4oUFRZX09QRU5fU0xBVkVfUFVTSF9GQUlMKTsK LQkgICAgfQotCX0KLSAgICB9Ci0jZW5kaWYgLypMSU5FX1BVU0gqLwotI2VuZGlmIC8qSEFWRV9T VFJFQU1TKi8KLS8qCi0gIFVuZGVyIFVsdHJpeCAzLjAsIHRoZSBwZ3JwIG9mIHRoZSBzbGF2ZSBw dHkgdGVybWluYWwgbmVlZHMgdG8gYmUgc2V0Ci0gIGV4cGxpY2l0bHkuICBXaHkgcmxvZ2luZCB3 b3JrcyBhdCBhbGwgd2l0aG91dCB0aGlzIG9uIDQuM0JTRCBpcyBhIG15c3RlcnkuCi0qLwotI2lm ZGVmIEdFVFBHUlBfT05FQVJHCi0gICAgcGlkID0gZ2V0cGdycChnZXRwaWQoKSk7Ci0jZWxzZQot ICAgIHBpZCA9IGdldHBncnAoKTsKLSNlbmRpZiAvKiBHRVRQR1JQX09ORUFSRyAqLwotCi0gICAg ZGVidWcoRjExMSwicHR5X2luaXRpYWxpemVfc2xhdmUoKSIsInBpZCIscGlkKTsKLQotI2lmZGVm IFRJT0NTUEdSUAotICAgIGlvY3RsKGZkLCBUSU9DU1BHUlAsICZwaWQpOwotI2VuZGlmIC8qIFRJ T0NTUEdSUCAqLwotCi0jaWZkZWYgUE9TSVhfVEVSTUlPUwotI2lmbmRlZiB1bHRyaXgKLSAgICB0 Y3NldHBncnAoZmQsIHBpZCk7Ci0gICAgZXJybm8gPSAwOwotICAgIHJjID0gdGNnZXRhdHRyKGZk LCZuZXdfdGVybWlvKTsKLSAgICBkZWJ1ZyhGMTExLCJwdHlfaW5pdGlhbGl6ZV9zbGF2ZSB0Y2dl dGF0dHIoZmQpIixja2l0b2EocmMpLGVycm5vKTsKLSAgICBpZiAocmMgPT0gMCkgewotCW5ld190 ZXJtaW8uY19jY1tWTUlOXSA9IDE7Ci0JbmV3X3Rlcm1pby5jX2NjW1ZUSU1FXSA9IDA7Ci0JcmMg PSB0Y3NldGF0dHIoZmQsVENTQU5PVywmbmV3X3Rlcm1pbyk7Ci0JZGVidWcoRjExMSwicHR5X2lu aXRpYWxpemVfc2xhdmUgdGNzZXRhdHRyKGZkKSIsY2tpdG9hKHJjKSxlcnJubyk7Ci0gICAgfQot I2VuZGlmIC8qIHVsdHJpeCAqLwotI2VuZGlmIC8qIFBPU0lYX1RFUk1JT1MgKi8KLSAgICByZXR1 cm4oMEwpOwotfQotCi0jaWZkZWYgV0FOVF9VVE1QCi1sb25nCi1wdHlfbG9nd3RtcCAodHR5LCB1 c2VyLCBob3N0KSBjaGFyICp1c2VyLCAqdHR5LCAqaG9zdDsgewotI2lmZGVmIEhBVkVfTE9HV1RN UAotICAgIGxvZ3d0bXAodHR5LHVzZXIsaG9zdCk7Ci0gICAgcmV0dXJuKDApOwotI2Vsc2UKLSAg ICBzdHJ1Y3QgdXRtcCB1dDsKLSAgICBjaGFyICp0bXB4OwotICAgIGNoYXIgdXRtcF9pZFs1XTsK LSAgICBpbnQgbG9nZ2luZ2luID0gdXNlclswXTsJCS8qIFdpbGwgYmUgZW1wdHkgZm9yIGxvZ291 dCAqLwotCi0jaWZuZGVmIE5PX1VUX0hPU1QKLSAgICBzdHJuY3B5KHV0LnV0X2hvc3QsIGhvc3Qs IHNpemVvZih1dC51dF9ob3N0KSk7Ci0jZW5kaWYgLyogTk9fVVRfSE9TVCAqLwotCi0gICAgc3Ry bmNweSh1dC51dF9saW5lLCB0dHksIHNpemVvZih1dC51dF9saW5lKSk7Ci0gICAgdXQudXRfdGlt ZSA9IHRpbWUoMCk7Ci0KLSNpZm5kZWYgTk9fVVRfUElECi0gICAgdXQudXRfcGlkID0gZ2V0cGlk KCk7Ci0gICAgc3RybmNweSh1dC51dF91c2VyLCB1c2VyLCBzaXplb2YodXQudXRfdXNlcikpOwot Ci0gICAgdG1weCA9IHR0eSArIHN0cmxlbih0dHkpIC0gMjsKLSAgICBja21ha21zZyh1dG1wX2lk LDUsImtyIix0bXB4LE5VTEwsTlVMTCk7Ci0gICAgc3RybmNweSh1dC51dF9pZCwgdXRtcF9pZCwg c2l6ZW9mKHV0LnV0X2lkKSk7Ci0gICAgdXQudXRfcGlkID0gKGxvZ2dpbmdpbiA/IGdldHBpZCgp IDogMCk7Ci0gICAgdXQudXRfdHlwZSA9IChsb2dnaW5naW4gPyBVU0VSX1BST0NFU1MgOiBERUFE X1BST0NFU1MpOwotI2Vsc2UKLSAgICBzdHJuY3B5KHV0LnV0X25hbWUsIHVzZXIsIHNpemVvZih1 dC51dF9uYW1lKSk7Ci0jZW5kaWYgLyogTk9fVVRfUElEICovCi0KLSAgICByZXR1cm4ocHR5aW50 X3VwZGF0ZV93dG1wKCZ1dCwgaG9zdCwgdXNlcikpOwotCi0jZW5kaWYgLyogSEFWRV9MT0dXVE1Q ICovCi19Ci0jZW5kaWYgLyogV0FOVF9VVE1QICovCi0KLS8qCi0gIFRoaXMgcm91dGluZSBpcyBj YWxsZWQgdHdpY2UuICBJdCdzIG5vdCBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IHRoYXQgdGhlCi0g IHNldHNpZCgpIG9yIFRJT0NTQ1RUWSBpb2N0bHMgc3VjY2VlZCAodGhleSBtYXkgbm90IHRoZSBz ZWNvbmQgdGltZSksIGJ1dAotICByYXRoZXIgdGhhdCB3ZSBoYXZlIGEgY29udHJvbGxpbmcgdGVy bWluYWwgYXQgdGhlIGVuZC4gIEl0IGlzIGFzc3VtZWQgdGhhdAotICB2aGFuZ3VwIGRvZXNuJ3Qg ZXhpc3QgYW5kIGNvbmZ1c2UgdGhlIHByb2Nlc3MncyBub3Rpb24gb2YgY29udHJvbGxpbmcKLSAg dGVybWluYWwgb24gYW55IHN5c3RlbSB3aXRob3V0IFRJT0NOT1RUWS4gIFRoYXQgaXMsIGVpdGhl ciB2aGFuZ3VwKCkgbGVhdmVzCi0gIHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbCBpbiB0YWN0LCBi cmVha3MgdGhlIGFzc29jaWF0aW9uIGNvbXBsZXRlbHksIG9yIHRoZQotICBzeXN0ZW0gcHJvdmlk ZXMgVElPQ05PVFRZIHRvIGdldCB0aGluZ3MgYmFjayBpbnRvIGEgcmVhc29uYWJsZSBzdGF0ZS4g IEluCi0gIHByYWN0aWNlLCB2aGFuZ3VwKCkgZWl0aGVyIGJyZWFrcyB0aGUgYXNzb2NpYXRpb24g Y29tcGxldGVseSBvciBkb2Vzbid0Ci0gIGVmZmVjdCBjb250cm9sbGluZyB0ZXJtaW5hbHMsIHNv IHRoaXMgY29uZGl0aW9uIGlzIG1ldC4KLSovCi1sb25nCi1wdHlfb3Blbl9jdHR5KHNsYXZlLCBm ZCwgZmMpIGNoYXIgKiBzbGF2ZTsgaW50ICpmZDsgaW50IGZjOyB7Ci0gICAgaW50IHJldHZhbDsK LQotICAgIGRlYnVnKEYxMTAsInB0eV9vcGVuX2N0dHkoKSBzbGF2ZSIsc2xhdmUsMCk7Ci0KLS8q IEZpcnN0LCBkaXNzb2NpYXRlIGZyb20gcHJldmlvdXMgdGVybWluYWwgKi8KLQotICAgIGlmICgo cmV0dmFsID0gcHR5aW50X3ZvaWRfYXNzb2NpYXRpb24oKSkgIT0gMCkgewotICAgICAgICBkZWJ1 ZyhGMTExLAotCSAgICAgICJwdHlfb3Blbl9jdHR5KCkiLAotCSAgICAgICJwdHlpbnRfdm9pZF9h c3NvY2lhdGlvbigpIGZhaWxlZCIsCi0JICAgICAgcmV0dmFsCi0JICAgICAgKTsKLQlyZXR1cm4o cmV0dmFsKTsKLSAgICB9Ci0jaWZkZWYgTVVTVF9TRVRQR1JQCi0vKgotICBUaGUgVWx0cml4IChh bmQgb3RoZXIgQlNEIHR0eSBkcml2ZXJzKSByZXF1aXJlIHRoZSBwcm9jZXNzIGdyb3VwCi0gIHRv IGJlIHplcm8gaW4gb3JkZXIgdG8gYWNxdWlyZSB0aGUgbmV3IHR0eSBhcyBhIGNvbnRyb2xsaW5n IHR0eS4KLSovCi0gICAgc2V0cGdycCgwLDApOwotICAgIGRlYnVnKEYxMDEsInB0eV9vcGVuX2N0 dHkgTVVTVF9TRVRQR1JQIHNldHBncnAoMCwwKSIsIiIsZXJybm8pOwotI2VuZGlmIC8qIE1VU1Rf U0VUUEdSUCAqLwotCi0gICAgZXJybm8gPSAwOwotICAgICpmZCA9IG9wZW4oc2xhdmUsIE9fUkRX Uik7Ci0gICAgZGVidWcoRjExMSwicHR5X29wZW5fY3R0eSBvcGVuKHNsYXZlKSBmZCIsc2xhdmUs KmZkKTsKLSAgICBpZiAoKmZkIDwgMCkgewotCWRlYnVnKEYxMTEsInB0eV9vcGVuX2N0dHkoKSBv cGVuIGZhaWx1cmUiLCBzbGF2ZSwgZXJybm8pOwotCXJldHVybihQVFlfT1BFTl9TTEFWRV9PUEVO RkFJTCk7Ci0gICAgfQotI2lmZGVmIFNPTEFSSVMKLSAgICAvKiBUaGlzIGZvcmNlcyB0aGUgam9i IHRvIGhhdmUgYSBjb250cm9sbGluZyB0ZXJtaW5hbC4gKi8KLSAgICBjbG9zZSgqZmQpOwotICAg ICpmZCA9IG9wZW4oc2xhdmUsIE9fUkRXUik7Ci0gICAgZGVidWcoRjExMSwicHR5X29wZW5fY3R0 eSBjbG9zZS9vcGVuKHNsYXZlKSBmZCIsc2xhdmUsKmZkKTsKLSNpZmRlZiBERUJVRwotICAgIC8q IFRoaXMgc2hvd3MgdGhhdCAvZGV2L3R0eSBleGlzdHMgKi8KLWlmIChkZWJsb2cpIHsKLQlpbnQg eDsKLQl4ID0gb3BlbigiL2Rldi90dHkiLCBPX1JEV1IpOwotCWRlYnVnKEYxMTEsInB0eV9vcGVu X2N0dHkgb3BlbigvZGV2L3R0eSkgZmQiLHNsYXZlLHgpOwotCWlmICh4IDwgMCkgZGVidWcoRjEx MSwicHR5X29wZW5fY3R0eSBvcGVuKC9kZXYvdHR5KSBlcnJubyIsIiIsZXJybm8pOwotCWRlYnVn KEYxMTAsInB0eV9vcGVuX2N0dHkgdHR5bmFtZSgvZGV2L3R0eSkiLHR0eW5hbWUoeCksMCk7Ci0J aWYgKHggPiAtMSkgY2xvc2UoeCk7Ci0gICAgfQotI2VuZGlmCS8qIERFQlVHICovCi0jZW5kaWYg LyogU09MQVJJUyAqLwotCi0jaWZkZWYgTVVTVF9TRVRQR1JQCi0gICAgc2V0cGdycCgwLCBnZXRw aWQoKSk7Ci0jZW5kaWYgLyogTVVTVF9TRVRQR1JQICovCi0KLSNpZmRlZiBUSU9DU0NUVFkKLSAg ICBpZiAoCi0jaWZkZWYgQ09NTUVOVAotCWZjID09IDAKLSNlbHNlCi0JMQotI2VuZGlmCS8qIENP TU1FTlQgKi8KLQkpIHsKLQkvKiBUSU9DU0NUVFkgPSBNYWtlIHRoaXMgdGhlIGpvYidzIGNvbnRy b2xsaW5nIHRlcm1pbmFsICovCi0JZXJybm8gPSAwOwotCXJldHZhbCA9IGlvY3RsKCpmZCwgVElP Q1NDVFRZLCAwKTsgLyogRG9uJ3QgY2hlY2sgcmV0dXJuLiovCi0JZGVidWcoRjExMSwicHR5X29w ZW5fY3R0eSgpIGlvY3RsIFRJT0NTQ1RUWSIsY2tpdG9hKHJldHZhbCksZXJybm8pOwotICAgIH0K LSNlbmRpZiAvKiBUSU9DU0NUVFkgKi8KLSAgICByZXR1cm4oMEwpOwotfQotCi1sb25nCi1wdHlf b3Blbl9zbGF2ZShzbGF2ZSwgZmQsIGZjKSBjaGFyICpzbGF2ZTsgaW50ICpmZDsgaW50IGZjOyB7 Ci0gICAgaW50IHZmZCwgdGVzdGZkOwotICAgIGxvbmcgcmV0dmFsOwotI2lmZGVmIENLX1BPU0lY X1NJRwotICAgIHN0cnVjdCBzaWdhY3Rpb24gc2E7Ci0KLSAgICBzaWdlbXB0eXNldCgmc2Euc2Ff bWFzayk7CQkvKiBJbml0aWFsaXplICJzYSIgc3RydWN0dXJlLiAqLwotICAgIHNhLnNhX2ZsYWdz ID0gMDsKLSNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KLQotLyoKLSAgRmlyc3QsIGNobW9kIGFu ZCBjaG93biB0aGUgc2xhdmUuICBJZiB3ZSBoYXZlIHZoYW5ndXAgdGhlbiB3ZSByZWFsbHkgbmVl ZAotICBwdHlfb3Blbl9jdHR5IHRvIG1ha2Ugc3VyZSBvdXIgY29udHJvbGxpbmcgdGVybWluYWwg aXMgdGhlIHB0eSB3ZSdyZQotICBvcGVuaW5nLiAgSG93ZXZlciwgaWYgd2UgYXJlIHVzaW5nIHJl dm9rZSBvciBub3RoaW5nIHRoZW4gd2UganVzdCBuZWVkIGEKLSAgZmlsZSBkZXNjcmlpcHRvciBm b3IgdGhlIHB0eS4gIENvbnNpZGVyaW5nIHNvbWUgT1NlcyBpbiB0aGlzIGNhdGVnb3J5IGJyZWFr Ci0gIG9uIHRoZSBzZWNvbmQgY2FsbCB0byBvcGVuX2N0dHkgKGN1cnJlbnRseSBPU0YgYnV0IG90 aGVycyBtYXkpLCB3ZSBzaW1wbHkKLSAgdXNlIGEgZGVzY3JpcHRvciBpZiB3ZSBjYW4uCi0qLwot I2lmZGVmIFZIQU5HX0ZJUlNUCi0gICAgaWYgKChyZXR2YWwgPSBwdHlfb3Blbl9jdHR5KHNsYXZl LCAmdmZkLCBmYykpICE9IDApIHsKLSAgICAgICAgZGVidWcoRjExMSwKLQkgICAgICAicHR5X29w ZW5fc2xhdmUoKSBWSEFOR19GSVJTVCIsCi0JICAgICAgInB0eV9vcGVuX2N0dHkoKSBmYWlsZWQi LAotCSAgICAgIHJldHZhbAotCSAgICAgICk7Ci0gICAgICAgIHJldHVybihyZXR2YWwpOwotICAg IH0KLSAgICBpZiAodmZkIDwgMCkgewotICAgICAgICBkZWJ1ZyhGMTExLAotCSAgICAgICJwdHlf b3Blbl9zbGF2ZSgpIFZIQU5HX0ZJUlNUIiwKLQkgICAgICAiUFRZX09QRU5fU0xBVkVfT1BFTkZB SUwiLAotCSAgICAgIHZmZAotCSAgICAgICk7Ci0JcmV0dXJuKFBUWV9PUEVOX1NMQVZFX09QRU5G QUlMKTsKLSAgICB9Ci0jZW5kaWYgLyogVkhBTkdfRklSU1QgKi8KLQotICAgIGlmIChzbGF2ZSA9 PSBOVUxMIHx8ICpzbGF2ZSA9PSAnXDAnKSB7Ci0gICAgICAgIGRlYnVnKEYxMTAsInB0eV9vcGVu X3NsYXZlKCkiLCJQVFlfT1BFTl9TTEFWRV9UT09TSE9SVCIsMCk7Ci0gICAgICAgIHJldHVybihQ VFlfT1BFTl9TTEFWRV9UT09TSE9SVCk7Ci0gICAgfQotCi0jaWZkZWYgU0VUVUlECi0gICAgaWYg KGNobW9kKHNsYXZlLCAwKSkgewotICAgICAgICBkZWJ1ZyhGMTEwLCJwdHlfb3Blbl9zbGF2ZSgp IiwiUFRZX09QRU5fU0xBVkVfQ0hNT0RGQUlMIiwwKTsKLSAgICAgICAgcmV0dXJuKFBUWV9PUEVO X1NMQVZFX0NITU9ERkFJTCk7Ci0gICAgfQotICAgIGlmIChjaG93bihzbGF2ZSwgMCwgMCApID09 IC0xICkgewotICAgICAgICBkZWJ1ZyhGMTEwLCJwdHlfb3Blbl9zbGF2ZSgpIiwiUFRZX09QRU5f U0xBVkVfQ0hPV05GQUlMIiwwKTsKLSAgICAgICAgcmV0dXJuKFBUWV9PUEVOX1NMQVZFX0NIT1dO RkFJTCk7Ci0gICAgfQotI2VuZGlmIC8qIFNFVFVJRCAqLwotI2lmZGVmIFZIQU5HX0ZJUlNUCi0g ICAgcHR5aW50X3ZoYW5ndXAoKTsKLSAgICBjbG9zZSh2ZmQpOwotI2VuZGlmIC8qIFZIQU5HX0ZJ UlNUICovCi0KLSAgICBpZiAoKHJldHZhbCA9IHB0eWludF92b2lkX2Fzc29jaWF0aW9uKCkpICE9 IDApIHsKLSAgICAgICAgZGVidWcoRjExMSwKLQkgICAgICAicHR5X29wZW5fc2xhdmUoKSIsCi0J ICAgICAgInB0eWludF92b2lkX2Fzc29jaWF0aW9uKCkgZmFpbGVkIiwKLQkgICAgICByZXR2YWwK LQkgICAgICApOwotICAgICAgICByZXR1cm4ocmV0dmFsKTsKLSAgICB9Ci0KLSNpZmRlZiBIQVZF X1JFVk9LRQotICAgIGlmIChyZXZva2UgKHNsYXZlKSA8IDAgKSB7Ci0gICAgICAgIGRlYnVnKEYx MTAsInB0eV9vcGVuX3NsYXZlKCkiLCJQVFlfT1BFTl9TTEFWRV9SRVZPS0VGQUlMIiwwKTsKLQly ZXR1cm4oUFRZX09QRU5fU0xBVkVfUkVWT0tFRkFJTCk7Ci0gICAgfQotI2VuZGlmIC8qIEhBVkVf UkVWT0tFICovCi0KLS8qIE9wZW4gdGhlIHB0eSBmb3IgcmVhbC4gKi8KLQotICAgIHJldHZhbCA9 IHB0eV9vcGVuX2N0dHkoc2xhdmUsIGZkLCBmYyk7Ci0gICAgZGVidWcoRjExMSwicHR5X29wZW5f c2xhdmUgcmV0dmFsIixzbGF2ZSxyZXR2YWwpOwotICAgIGRlYnVnKEYxMTEsInB0eV9vcGVuX3Ns YXZlIGZkIixzbGF2ZSwqZmQpOwotICAgIGlmIChyZXR2YWwgIT0gMCkgewotICAgICAgICBkZWJ1 ZyhGMTExLCJwdHlfb3Blbl9zbGF2ZSgpIiwicHR5X29wZW5fY3R0eSgpIGZhaWxlZCIscmV0dmFs KTsKLQlyZXR1cm4oUFRZX09QRU5fU0xBVkVfT1BFTkZBSUwpOwotICAgIH0KLSAgICBwdHlfc2xh dmVfZmQgPSAqZmQ7CQkgICAvKiBUaGlzIGlzIG5vdCB2aXNpYmxlIHRvIHRoZSB1cHBlciBmb3Jr ICovCi0gICAgZGVidWcoRjExMSwicHR5X29wZW5fc2xhdmUgZmQgY3R0eSdkIixzbGF2ZSxwdHlf c2xhdmVfZmQpOwotICAgIHJldHZhbCA9IHB0eV9pbml0aWFsaXplX3NsYXZlKCpmZCk7Ci0gICAg ZGVidWcoRjExMSwicHR5X29wZW5fc2xhdmUgZmQgaW5pdCdkIixzbGF2ZSxwdHlfc2xhdmVfZmQp OwotICAgIGlmIChyZXR2YWwpIHsKLSAgICAgICAgZGVidWcoRjExMSwicHR5X29wZW5fc2xhdmUo KSIsInB0eV9pbml0aWFsaXplX3NsYXZlKCkgZmFpbGVkIixyZXR2YWwpOwotICAgICAgICByZXR1 cm4ocmV0dmFsKTsKLSAgICB9Ci0gICAgLyogKFZPSUQpcHR5X21ha2VfcmF3KCpmZCk7ICovCi0K LSAgICBkZWJ1ZyhGMTAwLCJwdHlfb3Blbl9zbGF2ZSBPSyIsIiIsKmZkKTsKLSAgICByZXR1cm4o MEwpOwotfQotCi0jaWZkZWYgV0FOVF9VVE1QCi0KLSNpZm5kZWYgVVRNUF9GSUxFCi0jaWZkZWYg X1BBVEhfVVRNUAotI2RlZmluZSBVVE1QX0ZJTEUgX1BBVEhfVVRNUAotI2VuZGlmIC8qIF9QQVRI X1VUTVAgKi8KLSNlbmRpZiAvKiAgVVRNUF9GSUxFICovCi0KLS8qIElmIGl0IGlzICpzdGlsbCog bWlzc2luZywgYXNzdW1lIC9ldGMvdXRtcCAqLwotCi0jaWZuZGVmIFVUTVBfRklMRQotI2RlZmlu ZQlVVE1QX0ZJTEUgIi9ldGMvdXRtcCIKLSNlbmRpZiAvKiBVVE1QX0ZJTEUgKi8KLQotI2lmbmRl ZiBOT19VVF9QSUQKLSNkZWZpbmUgV1RNUF9SRVFVSVJFU19VU0VSTkFNRQotI2VuZGlmIC8qIE5P X1VUX1BJRCAqLwotCi1sb25nCi1wdHlfdXBkYXRlX3V0bXAocHJvY2Vzc190eXBlLCBwaWQsIHVz ZXJuYW1lLCBsaW5lLCBob3N0LCBmbGFncykKLSAgICBpbnQgcHJvY2Vzc190eXBlOwotICAgIGlu dCBwaWQ7Ci0gICAgY2hhciAqdXNlcm5hbWUsICpsaW5lLCAqaG9zdDsKLSAgICBpbnQgZmxhZ3M7 Ci0vKiBwdHlfdXBkYXRlX3V0bXAgKi8gewotICAgIHN0cnVjdCB1dG1wIGVudCwgdXQ7Ci0jaWZu ZGVmIEhBVkVfU0VUVVRFTlQKLSAgICBzdHJ1Y3Qgc3RhdCBzdGF0YjsKLSAgICBpbnQgdHR5Owot I2VuZGlmIC8qIEhBVkVfU0VUVVRFTlQgKi8KLSNpZmRlZiBIQVZFX1NFVFVUWEVOVAotICAgIHN0 cnVjdCB1dG1weCB1dHg7Ci0jZW5kaWYgLyogSEFWRV9TRVRVVFhFTlQgKi8KLSNpZm5kZWYgTk9f VVRfUElECi0gICAgY2hhciAqdG1weDsKLSAgICBjaGFyIHV0bXBfaWRbNV07Ci0jZW5kaWYgLyog Tk9fVVRfUElEICovCi0gICAgY2hhciB1c2VyYnVmWzMyXTsKLSAgICBpbnQgZmQ7Ci0KLSAgICBk ZWJ1ZyhGMTAwLCJwdHlfdXBkYXRlX3V0bXAoKSIsIiIsMCk7Ci0gICAgc3RybmNweShlbnQudXRf bGluZSwgbGluZStzaXplb2YoIi9kZXYvIiktMSwgc2l6ZW9mKGVudC51dF9saW5lKSk7Ci0gICAg ZW50LnV0X3RpbWUgPSB0aW1lKDApOwotCi0jaWZkZWYgTk9fVVRfUElECi0gICAgaWYgKHByb2Nl c3NfdHlwZSA9PSBQVFlfTE9HSU5fUFJPQ0VTUykKLSAgICAgIHJldHVybigwTCk7Ci0jZWxzZSAv KiBOT19VVF9QSUQgKi8KLQotICAgIGVudC51dF9waWQgPSBwaWQ7Ci0KLSAgICBzd2l0Y2ggKHBy b2Nlc3NfdHlwZSkgewotICAgICAgY2FzZSBQVFlfTE9HSU5fUFJPQ0VTUzoKLQllbnQudXRfdHlw ZSA9IExPR0lOX1BST0NFU1M7Ci0JYnJlYWs7Ci0gICAgICBjYXNlIFBUWV9VU0VSX1BST0NFU1M6 Ci0JZW50LnV0X3R5cGUgPSBVU0VSX1BST0NFU1M7Ci0JYnJlYWs7Ci0gICAgICBjYXNlIFBUWV9E RUFEX1BST0NFU1M6Ci0JZW50LnV0X3R5cGUgPSBERUFEX1BST0NFU1M7Ci0JYnJlYWs7Ci0gICAg ICBkZWZhdWx0OgotCXJldHVybihQVFlfVVBEQVRFX1VUTVBfUFJPQ1RZUEVfSU5WQUxJRCk7Ci0g ICAgfQotI2VuZGlmIC8qTk9fVVRfUElEKi8KLQotI2lmbmRlZiBOT19VVF9IT1NUCi0gICAgaWYg KGhvc3QpCi0gICAgICBzdHJuY3B5KGVudC51dF9ob3N0LCBob3N0LCBzaXplb2YoZW50LnV0X2hv c3QpKTsKLSAgICBlbHNlCi0gICAgICBlbnQudXRfaG9zdFswXSA9ICdcMCc7Ci0jZW5kaWYgLyog Tk9fVVRfSE9TVCAqLwotCi0jaWZuZGVmIE5PX1VUX1BJRAotICAgIGlmICghc3RyY21wIChsaW5l LCAiL2Rldi9jb25zb2xlIikpIHsKLQljaGFyICogcyA9IE5VTEw7Ci0KLSNpZmRlZiBzdW4KLSNp ZmRlZiBfX1NWUjQKLQlzID0gImNvIjsKLSNlbHNlCi0JcyA9ICJjb25zIjsKLSNlbmRpZiAvKiBf X1NWUjQgKi8KLSNlbHNlCi0JcyA9ICJjb25zIjsKLSNlbmRpZiAvKiBzdW4gKi8KLQotCXN0cm5j cHkoZW50LnV0X2lkLCBzLCA0KTsKLQotICAgIH0gZWxzZSB7Ci0KLQl0bXB4ID0gbGluZSArIHN0 cmxlbihsaW5lKS0xOwotCWlmICgqKHRtcHgtMSkgIT0gJy8nKSB0bXB4LS07CS8qIGxhc3QgMiBj aGFycyB1bmxlc3MgaXQncyBhICcvJyAqLwotI2lmZGVmIF9faHB1eAotCWNrc3RybmNweSh1dG1w X2lkLCB0bXB4LCA1KTsKLSNlbHNlCi0JY2ttYWttc2codXRtcF9pZCw1LCJrbCIsdG1weCxOVUxM LE5VTEwpOwotI2VuZGlmIC8qIF9faHB1eCAqLwotCXN0cm5jcHkoZW50LnV0X2lkLCB1dG1wX2lk LCBzaXplb2YoZW50LnV0X2lkKSk7Ci0gICAgfQotICAgIHN0cm5jcHkoZW50LnV0X3VzZXIsIHVz ZXJuYW1lLCBzaXplb2YoZW50LnV0X3VzZXIpKTsKLQotI2Vsc2UKLQotICAgIHN0cm5jcHkoZW50 LnV0X25hbWUsIHVzZXJuYW1lLCBzaXplb2YoZW50LnV0X25hbWUpKTsKLQotI2VuZGlmIC8qIE5P X1VUX1BJRCAqLwotCi0gICAgaWYgKHVzZXJuYW1lWzBdKQotICAgICAgc3RybmNweSh1c2VyYnVm LCB1c2VybmFtZSwgc2l6ZW9mKHVzZXJidWYpKTsKLSAgICBlbHNlCi0gICAgICB1c2VyYnVmWzBd ID0gJ1wwJzsKLQotI2lmZGVmIEhBVkVfU0VUVVRFTlQKLQotICAgIHV0bXBuYW1lKFVUTVBfRklM RSk7Ci0gICAgc2V0dXRlbnQoKTsKLS8qCi0gIElmIHdlIG5lZWQgdG8gcHJlc2VydmUgdGhlIHVz ZXIgbmFtZSBpbiB0aGUgd3RtcCBzdHJ1Y3R1cmUgYW5kIE91ciBmbGFncwotICB0ZWxsIHVzIHdl IGNhbiBvYnRhaW4gaXQgZnJvbSB0aGUgdXRtcCBhbmQgd2Ugc3VjY2VlZCBpbiBvYnRhaW5pbmcg aXQsIHdlCi0gIHRoZW4gc2F2ZSB0aGUgdXRtcCBzdHJ1Y3R1cmUgd2Ugb2J0YWluLCB3cml0ZSBv dXQgdGhlIHV0bXAgc3RydWN0dXJlIGFuZAotICBjaGFuZ2UgdGhlIHVzZXJuYW1lIHBvaW50ZXIg c28gaXQgaXMgdXNlZCBieSB1cGRhdGVfd3RtcC4KLSovCi0KLSNpZmRlZiBXVE1QX1JFUVVJUkVT X1VTRVJOQU1FCi0gICAgaWYgKCghdXNlcm5hbWVbMF0pICYmIChmbGFncyZQVFlfVVRNUF9VU0VS TkFNRV9WQUxJRCkgJiZsaW5lKSB7Ci0Jc3RydWN0IHV0bXAgKnV0cHRyOwotCXN0cm5jcHkodXQu dXRfbGluZSwgbGluZSwgc2l6ZW9mKHV0LnV0X2xpbmUpKTsKLQl1dHB0ciA9IGdldHV0bGluZSgm dXQpOwotCWlmICh1dHB0cikKLQkgIHN0cm5jcHkodXNlcmJ1Zix1dHB0ci0+dXRfdXNlcixzaXpl b2YodXQudXRfdXNlcikpOwotICAgIH0KLSNlbmRpZiAvKiBXVE1QX1JFUVVJUkVTX1VTRVJOQU1F ICovCi0KLSAgICBwdXR1dGxpbmUoJmVudCk7Ci0gICAgZW5kdXRlbnQoKTsKLQotI2lmZGVmIEhB VkVfU0VUVVRYRU5UCi0gICAgc2V0dXR4ZW50KCk7Ci0jaWZkZWYgSEFWRV9HRVRVVE1QWAotICAg IGdldHV0bXB4KCZlbnQsICZ1dHgpOwotI2Vsc2UgLyogSEFWRV9HRVRVVE1QWCAqLwotICAgIC8q IEZvciBwbGF0Zm9ybXMgbGlrZSBIUFVYIGFuZCBEZWMgVW5peCB3aGljaCBkb24ndCBoYXZlIGdl dHV0bXB4ICovCi0gICAgc3RybmNweSh1dHgudXRfdXNlciwgZW50LnV0X3VzZXIsIHNpemVvZihl bnQudXRfdXNlcikpOwotICAgIHN0cm5jcHkodXR4LnV0X2lkLCBlbnQudXRfaWQsIHNpemVvZihl bnQudXRfaWQpKTsKLSAgICBzdHJuY3B5KHV0eC51dF9saW5lLCBlbnQudXRfbGluZSwgc2l6ZW9m KGVudC51dF9saW5lKSk7Ci0gICAgdXR4LnV0X3BpZCA9IHBpZDsJCS8qIGtsdWRnZSBmb3IgSXJp eCwgZXRjLiB0byBhdm9pZCB0cnVuYy4gKi8KLSAgICB1dHgudXRfdHlwZSA9IGVudC51dF90eXBl OwotI2lmZGVmIFVUX0VYSVRfU1RSVUNUVVJFX0RJRkZFUgotICAgIHV0eC51dF9leGl0LnV0X2V4 aXQgPSBlbnQudXRfZXhpdC5lX2V4aXQ7Ci0jZWxzZSAvKiBVVF9FWElUX1NUUlVDVFVSRV9ESUZG RVIgKi8KLS8qIEtMVURHRSBmb3Igbm93OyBldmVudHVhbGx5IHRoaXMgd2lsbCBiZSBhIGZlYXR1 cmUgdGVzdC4uLiBTZWUgUFIjWzQwXSAqLwotI2lmZGVmIF9faHB1eAotICAgIHV0eC51dF9leGl0 Ll9fZV90ZXJtaW5hdGlvbiA9IGVudC51dF9leGl0LmVfdGVybWluYXRpb247Ci0gICAgdXR4LnV0 X2V4aXQuX19lX2V4aXQgPSBlbnQudXRfZXhpdC5lX2V4aXQ7Ci0jZWxzZSAvKiBfX2hwdXggKi8K LSAgICAvKiBYWFggZG8gbm90aGluZyBmb3Igbm93OyB3ZSBkb24ndCBldmVuIGtub3cgdGhlIHN0 cnVjdCBtZW1iZXIgZXhpc3RzICovCi0jZW5kaWYgLyogX19ocHV4ICovCi0jZW5kaWYgLyogVVRf RVhJVF9TVFJVQ1RVUkVfRElGRkVSICovCi0gICAgdXR4LnV0X3R2LnR2X3NlYyA9IGVudC51dF90 aW1lOwotICAgIHV0eC51dF90di50dl91c2VjID0gMDsKLSNlbmRpZiAvKiBIQVZFX0dFVFVUTVBY ICovCi0gICAgaWYgKGhvc3QpCi0gICAgICBzdHJuY3B5KHV0eC51dF9ob3N0LCBob3N0LCBzaXpl b2YodXR4LnV0X2hvc3QpKTsKLSAgICBlbHNlCi0gICAgICB1dHgudXRfaG9zdFswXSA9IDA7Ci0g ICAgcHV0dXR4bGluZSgmdXR4KTsKLSAgICBlbmR1dHhlbnQoKTsKLSNlbmRpZiAvKiBIQVZFX1NF VFVUWEVOVCAqLwotCi0jZWxzZSAvKiBIQVZFX1NFVFVURU5UICovCi0gICAgaWYgKGZsYWdzJlBU WV9UVFlTTE9UX1VTQUJMRSkgewotCXR0eSA9IHR0eXNsb3QoKTsKLSAgICB9IGVsc2UgewotCWlu dCBsYzsKLQl0dHkgPSAtMTsKLQlpZiAoKGZkID0gb3BlbihVVE1QX0ZJTEUsIE9fUkRXUikpIDwg MCkKLQkgIHJldHVybihlcnJubyk7Ci0JZm9yIChsYyA9IDA7Ci0JICAgICBsc2VlayhmZCwgKG9m Zl90KShsYyAqIHNpemVvZihzdHJ1Y3QgdXRtcCkpLCBTRUVLX1NFVCkgIT0gLTE7Ci0JICAgICBs YysrCi0JICAgICApIHsKLQkgICAgaWYgKHJlYWQoZmQsCi0JCSAgICAgKGNoYXIgKikmdXQsCi0J CSAgICAgc2l6ZW9mKHN0cnVjdCB1dG1wKQotCQkgICAgICkgIT0gc2l6ZW9mKHN0cnVjdCB1dG1w KQotCQkpCi0JICAgICAgYnJlYWs7Ci0JICAgIGlmIChzdHJuY21wKHV0LnV0X2xpbmUsIGVudC51 dF9saW5lLCBzaXplb2YodXQudXRfbGluZSkpID09IDApIHsKLQkJdHR5ID0gbGM7Ci0jaWZkZWYg V1RNUF9SRVFVSVJFU19VU0VSTkFNRQotCQlpZiAoIXVzZXJuYW1lJiYoZmxhZ3MmUFRZX1VUTVBf VVNFUk5BTUVfVkFMSUQpKQotCQkgIHN0cm5jcHkodXNlcmJ1ZiwgdXQudXRfdXNlciwgc2l6ZW9m KHV0LnV0X3VzZXIpKTsKLSNlbmRpZiAvKiBXVE1QX1JFUVVJUkVTX1VTRVJOQU1FICovCi0JCWJy ZWFrOwotCSAgICB9Ci0JfQotCWNsb3NlKGZkKTsKLSAgICB9Ci0gICAgaWYgKHR0eSA+IDAgJiYg KGZkID0gb3BlbihVVE1QX0ZJTEUsIE9fV1JPTkxZLCAwKSkgPj0gMCkgewotCWxzZWVrKGZkLCAo b2ZmX3QpKHR0eSAqIHNpemVvZihzdHJ1Y3QgdXRtcCkpLCBTRUVLX1NFVCk7Ci0Jd3JpdGUoZmQs IChjaGFyICopJmVudCwgc2l6ZW9mKHN0cnVjdCB1dG1wKSk7Ci0JY2xvc2UoZmQpOwotICAgIH0K LSNlbmRpZiAvKiBIQVZFX1NFVFVURU5UICovCi0KLSAgICAvKiBEb24ndCByZWNvcmQgTE9HSU5f UFJPQ0VTUyBlbnRyaWVzLiAqLwotICAgIGlmIChwcm9jZXNzX3R5cGUgPT0gUFRZX0xPR0lOX1BS T0NFU1MpCi0gICAgICByZXR1cm4oMCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHB0eWludF91 cGRhdGVfd3RtcCgmZW50LCBob3N0LCB1c2VyYnVmKSk7Ci19Ci0jaWZuZGVmIFdUTVBfRklMRQot I2lmZGVmIF9QQVRIX1dUTVAKLSNkZWZpbmUgV1RNUF9GSUxFIF9QQVRIX1dUTVAKLSNlbmRpZiAv KiBfUEFUSF9XVE1QICovCi0jZW5kaWYgLyogV1RNUF9GSUxFICovCi0KLSNpZm5kZWYgV1RNUFhf RklMRQotI2lmZGVmIF9QQVRIX1dUTVBYCi0jaWZkZWYgSEFWRV9VUERXVE1QWAotI2RlZmluZSBX VE1QWF9GSUxFIF9QQVRIX1dUTVBYCi0jZW5kaWYgLyogSEFWRV9VUERXVE1QWCAqLwotI2VuZGlm IC8qIF9QQVRIX1dUTVBYICovCi0jZW5kaWYgLyogV1RNUFhfRklMRSAqLwotCi0vKiBJZiBpdCBp cyAqc3RpbGwqIG1pc3NpbmcsIGFzc3VtZSAvdXNyL2FkbS93dG1wICovCi0KLSNpZm5kZWYgV1RN UF9GSUxFCi0jZGVmaW5lCVdUTVBfRklMRSAiL3Vzci9hZG0vd3RtcCIKLSNlbmRpZiAvKiBXVE1Q X0ZJTEUgKi8KLQotI2lmZGVmIENPTU1FTlQKLS8qIFRoZSBmb2xsb3dpbmcgdGVzdCBjYW4gbm90 IGJlIG1hZGUgcG9ydGFibHkgKi8KLQotLyogI2lmIGRlZmluZWQoX19HTElCQ19fKSAmJiAoX19H TElCQ19fID49IDIpICYmIChfX0dMSUJDX01JTk9SX18gPj0gMSkgKi8KLS8qCi0gIFRoaXMgaXMg dWdseSwgYnV0IHRoZSBsYWNrIG9mIHN0YW5kYXJkaXphdGlvbiBpbiB0aGUgdXRtcC91dG1weCBz cGFjZSwgYW5kCi0gIHdoYXQgZ2xpYmMgaW1wbGVtZW50cyBhbmQgZG9lc24ndCBtYWtlIGF2YWls YWJsZSwgaXMgZXZlbiB3b3JzZS4KLSovCi0vKiAjdW5kZWYgSEFWRV9VUERXVE1QWCAqLwkvKiBE b24ndCB1c2UgdXBkd3RtcHggZm9yIGdsaWJjIDIuMSAqLwotLyogI2VuZGlmICovIC8qIF9fR0xJ QkNfXyBldGMgKi8KLQotI2Vsc2UgIC8qIENPTU1FTlQgKi8KLQotI2lmZGVmIF9fR0xJQkNfXwot I3VuZGVmIEhBVkVfVVBEV1RNUFgJCS8qIERvbid0IHVzZSB1cGR3dG1weCBmb3IgZ2xpYmMgcGVy aW9kICovCi0jZW5kaWYgLyogX19HTElCQ19fICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi1s b25nCi1wdHlpbnRfdXBkYXRlX3d0bXAoZW50LGhvc3QsdXNlcikgc3RydWN0IHV0bXAgKmVudDsg Y2hhciAqaG9zdDsgY2hhciAqdXNlcjsgewotICAgIHN0cnVjdCB1dG1wIHV0OwotICAgIHN0cnVj dCBzdGF0IHN0YXRiOwotICAgIGludCBmZDsKLSAgICB0aW1lX3QgdXR0aW1lOwotI2lmZGVmIEhB VkVfVVBEV1RNUFgKLSAgICBzdHJ1Y3QgdXRtcHggdXR4OwotCi0gICAgZ2V0dXRtcHgoZW50LCAm dXR4KTsKLSAgICBpZiAoaG9zdCkKLSAgICAgIHN0cm5jcHkodXR4LnV0X2hvc3QsIGhvc3QsIHNp emVvZih1dHgudXRfaG9zdCkgKTsKLSAgICBlbHNlCi0gICAgICB1dHgudXRfaG9zdFswXSA9IDA7 Ci0gICAgaWYgKHVzZXIpCi0gICAgICBzdHJuY3B5KHV0eC51dF91c2VyLCB1c2VyLCBzaXplb2Yo dXR4LnV0X3VzZXIpKTsKLSAgICB1cGR3dG1weChXVE1QWF9GSUxFLCAmdXR4KTsKLSNlbmRpZiAv KiBIQVZFX1VQRFdUTVBYICovCi0KLSNpZmRlZiBIQVZFX1VQRFdUTVAKLSNpZm5kZWYgSEFWRV9V UERXVE1QWAotICAgIC8qIFRoaXMgaXMgYWxyZWFkeSBwZXJmb3JtZWQgYnl1cGR3dG1weCBpZiBw cmVzZW50LiovCi0gICAgdXBkd3RtcChXVE1QX0ZJTEUsIGVudCk7Ci0jZW5kaWYgLyogSEFWRV9V UERXVE1QWCovCi0jZWxzZSAvKiBIQVZFX1VQRFdUTVAgKi8KLQotICAgIGlmICgoZmQgPSBvcGVu KFdUTVBfRklMRSwgT19XUk9OTFl8T19BUFBFTkQsIDApKSA+PSAwKSB7Ci0JaWYgKCFmc3RhdChm ZCwgJnN0YXRiKSkgewotCSAgICBtZW1zZXQoKGNoYXIgKikmdXQsIDAsIHNpemVvZih1dCkpOwot I2lmZGVmIF9faHB1eAotCSAgICBzdHJuY3B5KHV0LnV0X2lkLCBlbnQtPnV0X2lkLCBzaXplb2Yg KHV0LnV0X2lkKSk7Ci0jZW5kaWYgLyogX19ocHV4ICovCi0JICAgIHN0cm5jcHkodXQudXRfbGlu ZSwgZW50LT51dF9saW5lLCBzaXplb2YodXQudXRfbGluZSkpOwotCSAgICBzdHJuY3B5KHV0LnV0 X25hbWUsIGVudC0+dXRfbmFtZSwgc2l6ZW9mKHV0LnV0X25hbWUpKTsKLSNpZm5kZWYgTk9fVVRf SE9TVAotCSAgICBzdHJuY3B5KHV0LnV0X2hvc3QsIGVudC0+dXRfaG9zdCwgc2l6ZW9mKHV0LnV0 X2hvc3QpKTsKLSNlbmRpZiAvKiBOT19VVF9IT1NUICovCi0KLQkgICAgdGltZSgmdXR0aW1lKTsK LQkgICAgdXQudXRfdGltZSA9IHV0dGltZTsKLQotI2lmZGVmIEhBVkVfR0VUVVRFTlQKLSNpZmRl ZiBVU0VSX1BST0NFU1MKLQkgICAgaWYgKGVudC0+dXRfbmFtZSkgewotCQlpZiAoIXV0LnV0X3Bp ZCkKLQkJICB1dC51dF9waWQgPSBnZXRwaWQoKTsKLSNpZm5kZWYgX19ocHV4Ci0JCXV0LnV0X3R5 cGUgPSBVU0VSX1BST0NFU1M7Ci0jZWxzZSAgLyogX19ocHV4ICovCi0JCXV0LnV0X3R5cGUgPSBl bnQtPnV0X3R5cGU7Ci0jZW5kaWYgLyogX19ocHV4ICovCi0KLQkgICAgfSBlbHNlIHsKLQotI2lm ZGVmIEVNUFRZCi0JCXV0LnV0X3R5cGUgPSBFTVBUWTsKLSNlbHNlCi0JCXV0LnV0X3R5cGUgPSBE RUFEX1BST0NFU1M7IC8qIEZvciBMaW51eCBicm9rZW5uZXNzKi8KLSNlbmRpZiAvKiBFTVBUWSAq LwotCi0JICAgIH0KLSNlbmRpZiAvKiBVU0VSX1BST0NFU1MgKi8KLSNlbmRpZiAvKiBIQVZFX0dF VFVURU5UICovCi0KLQkgICAgaWYgKHdyaXRlKGZkLCAoY2hhciAqKSZ1dCwgc2l6ZW9mKHN0cnVj dCB1dG1wKSkgIT0KLQkJc2l6ZW9mKHN0cnVjdCB1dG1wKSkKLSNpZm5kZWYgQ09IRVJFTlQKLQkg ICAgICBmdHJ1bmNhdGUoZmQsIHN0YXRiLnN0X3NpemUpOwotI2Vsc2UKLQkgICAgICBjaHNpemUo ZmQsIHN0YXRiLnN0X3NpemUpOwotI2VuZGlmIC8qIENPSEVSRU5UICovCi0JfQotCWNsb3NlKGZk KTsKLSAgICB9Ci0jZW5kaWYgLyogSEFWRV9VUERXVE1QICovCi0gICAgcmV0dXJuKDApOyAvKiBu byBjdXJyZW50IGZhaWx1cmUgY2FzZXM7IGZpbGUgbm90IGZvdW5kIGlzIG5vdCBmYWlsdXJlISAq LwotfQotI2VuZGlmIC8qIFdBTlRfVVRNUCAqLwotCi0vKiBUaGlzIGlzIGZvciBhbmNpZW50IFVu aXhlcyB0aGF0IGRvbid0IGhhdmUgdGhlc2UgdHR5IHN5bWJvbHMgZGVmaW5lZC4gKi8KLQotI2lm bmRlZiBQRU5ESU4KLSNkZWZpbmUgUEVORElOIElDQU5PTgotI2VuZGlmIC8qIFBFTkRJTiAqLwot I2lmbmRlZiBGTFVTSE8KLSNkZWZpbmUgRkxVU0hPIElDQU5PTgotI2VuZGlmIC8qIEZMVVNITyAq LwotI2lmbmRlZiBJTUFYQkVMCi0jZGVmaW5lIElNQVhCRUwgSUNBTk9OCi0jZW5kaWYgLyogSU1B WEJFTCAqLwotI2lmbmRlZiBFWFRQUk9DCi0jZGVmaW5lIEVYVFBST0MgSUNBTk9OCi0jZW5kaWYg LyogRVhUUFJPQyAqLwotCi1zdGF0aWMgY2hhciBYbGluZVsxN10gPSB7IDAsIDAgfTsKLS8qCi0g IGdldHB0eXNsYXZlKCkKLSAgT3BlbiB0aGUgc2xhdmUgc2lkZSBvZiB0aGUgcHR5LCBhbmQgZG8g YW55IGluaXRpYWxpemF0aW9uIHRoYXQgaXMgbmVjZXNzYXJ5LgotICBUaGUgcmV0dXJuIHZhbHVl IGZkIGlzIGEgZmlsZSBkZXNjcmlwdG9yIGZvciB0aGUgc2xhdmUgc2lkZS4KLSAgZmMgPSBmdW5j dGlvbiBjb2RlIGZyb20gZG9fcHR5KCkgKHEudi4pCi0qLwotaW50Ci1nZXRwdHlzbGF2ZShmZCwg ZmMpIGludCAqIGZkLCBmYzsgewotICAgIGludCB0dHlmZDsKLSAgICBpbnQgdCA9IC0xOwotICAg IGxvbmcgcmV0dmFsOwotI2lmZGVmIFRJT0NHV0lOU1oKLSAgICBzdHJ1Y3Qgd2luc2l6ZSB3czsK LSAgICBleHRlcm4gaW50IGNtZF9yb3dzLCBjbWRfY29sczsKLSNlbmRpZiAvKiBUSU9DR1dJTlNa ICovCi0KLSAgICB0dHlmZCA9ICpmZDsKLSAgICBkZWJ1ZyhGMTExLCJnZXRwdHlzbGF2ZSgpIiwi dHR5ZmQiLHR0eWZkKTsKLSAgICAvKgotICAgICAqIE9wZW5pbmcgdGhlIHNsYXZlIHNpZGUgbWF5 IGNhdXNlIGluaXRpbGl6YXRpb24gb2YgdGhlCi0gICAgICoga2VybmVsIHR0eSBzdHJ1Y3R1cmUu ICBXZSBuZWVkIHJlbWVtYmVyIHRoZSBzdGF0ZSBvZjoKLSAgICAgKiAgICAgIGlmIGxpbmVtb2Rl IHdhcyB0dXJuZWQgb24KLSAgICAgKiAgICAgIHRlcm1pbmFsIHdpbmRvdyBzaXplCi0gICAgICog ICAgICB0ZXJtaW5hbCBzcGVlZAotICAgICAqIHNvIHRoYXQgd2UgY2FuIHJlc2V0IHRoZW0gaWYg d2UgbmVlZCB0by4KLSAgICAgKi8KLSAgICBpZiAoKHJldHZhbCA9IHB0eV9vcGVuX3NsYXZlKFhs aW5lLCAmdCwgZmMpKSAhPSAwKSB7Ci0JcGVycm9yKFhsaW5lKTsKLQltc2crKzsKLSAgICAgICAg ZGVidWcoRjExMSwiZ2V0cHR5c2xhdmUoKSIsIlVuYWJsZSB0byBvcGVuIHNsYXZlIixyZXR2YWwp OwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJnZXRwdHlzbGF2 ZSIsInQiLHQpOwotI2lmZGVmIElOSVRfU1BUWQotICAgIHNwdHkgPSB0OwotICAgIGRlYnVnKEYx MTEsImdldHB0eXNsYXZlIiwic3B0eSIsc3B0eSk7Ci0jZW5kaWYgLyogSU5JVF9TUFRZICovCi0j aWZkZWYgU1RSRUFNU1BUWQotICAgIGlmIChpb2N0bCh0LElfUFVTSCwicGNrdCIpIDwgMCkgewot ICAgICAgICBkZWJ1ZyhGMTExLCJnZXRwdHlzbGF2ZSgpIiwiaW9jdGwoSV9QVVNIKSBmYWlsZWQi LGVycm5vKTsKLSNpZm5kZWYgX0FJWAotICAgICAgICBmYXRhbCgiSV9QVVNIIHBja3QiKTsKLSNl bmRpZiAvKiBfQUlYICovCi0gICAgfQotI2VuZGlmIC8qIFNUUkVBTVNQVFkgKi8KLQotICAgIC8q IFNldCB1cCB0aGUgdHR5IG1vZGVzIGFzIHdlIGxpa2UgdGhlbSB0byBiZS4gKi8KLSNpZmRlZiBD T01NRU5UCi0gICAgLyogT3JpZ2luYWxseSBsaWtlIHRoaXMuLi4gQnV0IHRoaXMgaXMgdGhlIG1h c3RlciAtIHdlIHdhbnQgdGhlIHNsYXZlICovCi0gICAgLyogQW55d2F5LCB0aGlzIGZhaWxzIG9u IFNvbGFyaXMgYW5kIHByb2JhYmx5IG90aGVyIFN5c3RlbSBWIE9TJ3MgKi8KLSAgICBpbml0X3Rl cm1idWYodHR5ZmQpOwotI2Vsc2UKLSAgICBpbml0X3Rlcm1idWYodCk7Ci0jZW5kaWYJLyogQ09N TUVOVCAqLwotI2lmZGVmIFRJT0NHV0lOU1oKLSAgICBpZiAoY21kX3Jvd3MgfHwgY21kX2NvbHMp IHsKLSAgICAgICAgbWVtc2V0KChjaGFyICopJndzLCAwLCBzaXplb2Yod3MpKTsKLSAgICAgICAg d3Mud3NfY29sID0gY21kX2NvbHM7Ci0gICAgICAgIHdzLndzX3JvdyA9IGNtZF9yb3dzOwotCWRl YnVnKEYxMDEsImdldHB0eXNsYXZlKCkgZG9pbmcgVElPQ1NXSU5TWi4uLiIsIiIsdCk7Ci0gICAg ICAgIGlvY3RsKHQsIFRJT0NTV0lOU1osIChjaGFyICopJndzKTsKLSAgICB9Ci0jZW5kaWYgLyog VElPQ0dXSU5TWiAqLwotCi0gICAgLyogRm9yIGV4dGVybmFsIHByb3RvY29scywgcHV0IHRoZSBw dHkgaW4gbm8tZWNobyBtb2RlICovCi0gICAgaWYgKGZjID09IDEpIHsKLQlkZWJ1ZyhGMTAwLCJn ZXRwdHlzbGF2ZSgpIHNldHRpbmcgcmF3bW9kZSIsIiIsMCk7Ci0JLyogaWZsYWdzICovCi0JdGVy bWJ1Zi5jX2lmbGFnICY9IH4oUEFSTVJLfElTVFJJUHxCUktJTlR8SU5MQ1J8SUdOQ1J8SUNSTkwp OwotCXRlcm1idWYuY19pZmxhZyAmPSB+KElOUENLfElHTlBBUnxJTUFYQkVMfElYQU5ZfElYT058 SVhPRkYpOwotCXRlcm1idWYuY19pZmxhZyB8PSBJR05CUks7Ci0jaWZkZWYgSVVDTEMKLQl0ZXJt YnVmLmNfaWZsYWcgJj0gfklVQ0xDOwotI2VuZGlmIC8qIElVQ0xDICovCi0KLQkvKiBvZmxhZ3Mg Ki8KLQl0ZXJtYnVmLmNfb2ZsYWcgJj0gfk9QT1NUOwotI2lmZGVmIE9YVEFCUwotCXRlcm1idWYu Y19vZmxhZyAmPSB+T1hUQUJTOwotI2VuZGlmIC8qIE9YVEFCUyAqLwotI2lmZGVmIE9OT0NSCi0J dGVybWJ1Zi5jX29mbGFnICY9IH5PTk9DUjsKLSNlbmRpZiAvKiBPTk9DUiAqLwotI2lmZGVmIE9O TFJFVAotCXRlcm1idWYuY19vZmxhZyAmPSB+T05MUkVUOwotI2VuZGlmIC8qIE9OTFJFVCAqLwot I2lmZGVmIE9OTENSCi0JdGVybWJ1Zi5jX29mbGFnICY9IH5PTkxDUjsKLSNlbmRpZiAvKiBPTkxD UiAqLwotCi0JLyogbGZsYWdzICovCi0JdGVybWJ1Zi5jX2xmbGFnICY9IH5FQ0hPOwotI2lmZGVm IEVDSE9FCi0JdGVybWJ1Zi5jX2xmbGFnICY9IH5FQ0hPRTsKLSNlbmRpZiAvKiBFQ0hPRSAqLwot I2lmZGVmIEVDSE9OTAotCXRlcm1idWYuY19sZmxhZyAmPSB+RUNIT05MOwotI2VuZGlmIC8qIEVD SE9OTCAqLwotI2lmZGVmIEVDSE9QUlQKLQl0ZXJtYnVmLmNfbGZsYWcgJj0gfkVDSE9QUlQ7Ci0j ZW5kaWYgLyogRUNIT1BSVCAqLwotI2lmZGVmIEVDSE9LRQotCXRlcm1idWYuY19sZmxhZyAmPSB+ RUNIT0tFOwotI2VuZGlmIC8qIEVDSE9LRSAqLwotI2lmZGVmIEVDSE9DVEwKLQl0ZXJtYnVmLmNf bGZsYWcgJj0gfkVDSE9DVEw7Ci0jZW5kaWYgLyogRUNIT0NUTCAqLwotI2lmZGVmIEFMVFdFUkFT RQotCXRlcm1idWYuY19sZmxhZyAmPSB+QUxUV0VSQVNFOwotI2VuZGlmIC8qIEFMVFdFUkFTRSAq LwotI2lmZGVmIEVYVFBST0MKLQl0ZXJtYnVmLmNfbGZsYWcgJj0gfkVYVFBST0M7Ci0jZW5kaWYg LyogRVhUUFJPQyAqLwotCXRlcm1idWYuY19sZmxhZyAmPSB+KElDQU5PTnxJU0lHfElFWFRFTnxU T1NUT1B8RkxVU0hPfFBFTkRJTik7Ci0KLSNpZmRlZiBOT0tFUk5JTkZPCi0JdGVybWJ1Zi5jX2xm bGFnIHw9IE5PS0VSTklORk87Ci0jZW5kaWYJLyogTk9LRVJOSU5GTyAqLwotCS8qIHRlcm1idWYu Y19sZmxhZyB8PSBOT0ZMU0g7ICovCi0JdGVybWJ1Zi5jX2xmbGFnICY9IH5OT0ZMU0g7Ci0KLQkv KiBjZmxhZ3MgKi8KLQl0ZXJtYnVmLmNfY2ZsYWcgJj0gfihDU0laRXxQQVJFTkJ8UEFST0REKTsK LQl0ZXJtYnVmLmNfY2ZsYWcgfD0gQ1M4fENSRUFEOwotI2lmZGVmIFZNSU4KLQl0ZXJtYnVmLmNf Y2NbVk1JTl0gPSAxOwotI2VuZGlmCS8qIFZNSU4gKi8KLSAgICB9IGVsc2UgewkJCQkvKiBSZWd1 bGFyIGludGVyYWN0aXZlIHVzZSAqLwotCWRlYnVnKEYxMDAsImdldHB0eXNsYXZlKCkgc2V0dGlu ZyBjb29rZWQgbW9kZSIsIiIsMCk7Ci0KLQkvKiBTZXR0aW5ncyBmb3Igc2d0dHkgYmFzZWQgc3lz dGVtcyAqLwotCi0jaWZuZGVmIFVTRV9URVJNSU8KLQl0ZXJtYnVmLnNnLnNnX2ZsYWdzIHw9IENS TU9EfEFOWVB8RUNIT3xYVEFCUzsKLSNlbmRpZiAvKiBVU0VfVEVSTUlPICovCi0KLSNpZm5kZWYg T1hUQUJTCi0jZGVmaW5lIE9YVEFCUyAwCi0jZW5kaWYgLyogT1hUQUJTICovCi0KLQkvKiBTZXR0 aW5ncyBmb3IgVU5JQ09TIGFuZCBIUFVYICovCi0KLSNpZmRlZiBDUkFZCi0JdGVybWJ1Zi5jX29m bGFnID0gT1BPU1R8T05MQ1J8VEFCMzsKLQl0ZXJtYnVmLmNfaWZsYWcgPSBJR05QQVJ8SVNUUklQ fElDUk5MfElYT047Ci0JdGVybWJ1Zi5jX2xmbGFnID0gSVNJR3xJQ0FOT058RUNIT3xFQ0hPRXxF Q0hPSzsKLQl0ZXJtYnVmLmNfY2ZsYWcgPSBFWFRCfEhVUENMfENTODsKLSNlbHNlIC8qIENSQVkg Ki8KLSNpZmRlZiBIUFVYCi0JdGVybWJ1Zi5jX29mbGFnID0gT1BPU1R8T05MQ1J8VEFCMzsKLQl0 ZXJtYnVmLmNfaWZsYWcgPSBJR05QQVJ8SVNUUklQfElDUk5MfElYT047Ci0JdGVybWJ1Zi5jX2xm bGFnID0gSVNJR3xJQ0FOT058RUNIT3xFQ0hPRXxFQ0hPSzsKLQl0ZXJtYnVmLmNfY2ZsYWcgPSBF WFRCfEhVUENMfENTODsKLSNlbHNlIC8qIEhQVVggKi8KLSNpZmRlZiBVU0VfVEVSTUlPCi0JLyoK LQkgIFNldHRpbmdzIGZvciBhbGwgb3RoZXIgdGVybWlvcy90ZXJtaW8gYmFzZWQgc3lzdGVtcywg b3RoZXIgdGhhbiAKLQkgIDQuNEJTRC4gIEluIDQuNEJTRCB0aGUga2VybmVsIGRvZXMgdGhlIGlu aXRpYWwgdGVybWluYWwgc2V0dXAuCi0JKi8KLSNpZmRlZiBCU0Q0MgotI2lmbmRlZiBCU0Q0NAot CXRlcm1idWYuY19sZmxhZyB8PSBFQ0hPfElDQU5PTnxJRVhURU58SVNJRzsKLQl0ZXJtYnVmLmNf b2ZsYWcgfD0gT05MQ1J8T1hUQUJTfE9QT1NUOwotCXRlcm1idWYuY19pZmxhZyB8PSBJQ1JOTHxJ R05QQVI7Ci0JdGVybWJ1Zi5jX2NmbGFnIHw9IEhVUENMOwotCXRlcm1idWYuY19pZmxhZyAmPSB+ SVhPRkY7Ci0jZW5kaWYgLyogQlNENDQgKi8KLSNlbHNlIC8qIEJTRDQyICovCi0JdGVybWJ1Zi5j X2xmbGFnIHw9IEVDSE98SUNBTk9OfElFWFRFTnxJU0lHOwotCXRlcm1idWYuY19vZmxhZyB8PSBP TkxDUnxPWFRBQlN8T1BPU1Q7Ci0JdGVybWJ1Zi5jX2lmbGFnIHw9IElDUk5MfElHTlBBUjsKLQl0 ZXJtYnVmLmNfY2ZsYWcgfD0gSFVQQ0w7Ci0JdGVybWJ1Zi5jX2lmbGFnICY9IH5JWE9GRjsKLSNl bmRpZiAvKiBCU0Q0MiAqLwotI2VuZGlmIC8qIFVTRV9URVJNSU8gKi8KLSNlbmRpZiAvKiBIUFVY ICovCi0jZW5kaWYgLyogQ1JBWSAqLwotICAgIH0KLQotICAgIC8qIFNldCB0aGUgdHR5IG1vZGVz LCBhbmQgbWFrZSB0aGlzIG91ciBjb250cm9sbGluZyB0dHkuICovCi0jaWZkZWYgQ09NTUVOVAot ICAgIC8qIEJ1dCB0aGlzIGlzIHRoZSBtYXN0ZXIgLSB3ZSB3YW50IHRoZSBzbGF2ZSAqLwotICAg IHNldF90ZXJtYnVmKHR0eWZkKTsKLSNlbHNlCi0gICAgc2V0X3Rlcm1idWYodCk7Ci0jZW5kaWYJ LyogQ09NTUVOVCAqLwotCi0gICAgaWYgKHQgIT0gMCkKLSAgICAgIGR1cDIodCwgMCk7Ci0gICAg aWYgKHQgIT0gMSkKLSAgICAgIGR1cDIodCwgMSk7Ci0gICAgaWYgKHQgIT0gMikgewotCWlmIChm YyA9PSAwKSB7Ci0JICAgIGR1cDIodCwgMik7Ci0JfSBlbHNlIGlmIChmYyA9PSAxKSB7Ci0JICAg IC8qIEZvciBleHRlcm5hbCBwcm90b2NvbHMsIHNlbmQgc3RkZXJyIHRvIC9kZXYvbnVsbCAqLwot I2lmZGVmIENPTU1FTlQKLQkgICAgaW50IHh4OwotI2lmbmRlZiBDT01NRU5UCi0JICAgIGNoYXIg KiBzID0gIi9kZXYvbnVsbCI7Ci0JICAgIGVycm5vID0gMDsKLQkgICAgeHggPSBvcGVuKHMsIE9f V1JPTkxZKTsKLSNlbHNlCi0JICAgIGNoYXIgKiBzID0gInB0eS5sb2ciOwotCSAgICBlcnJubyA9 IDA7Ci0JICAgIHh4ID0gb3BlbihzLCBPX0NSRUFULCAwNjQ0KTsKLSNlbmRpZiAvKiBDT01NRU5U ICovCi0JICAgIGRlYnVnKEYxMTEsImdldHB0eXNsYXZlIHJlZGlyZWN0IHN0ZGVyciIscyxlcnJu byk7Ci0JICAgIGR1cDIoeHgsMik7Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwotCX0KLSAgICB9Ci0g ICAgaWYgKHQgPiAyKQotICAgICAgY2xvc2UodCk7Ci0KLSAgICBpZiAodHR5ZmQgPiAyKSB7Ci0J Y2xvc2UodHR5ZmQpOwotICAgICAgICB0dHlmZCA9IC0xOwotCSpmZCA9IHR0eWZkOwotICAgIH0K LSAgICByZXR1cm4oMCk7Ci19Ci0KLSNpZmRlZiBIQVZFX1BUWVRSQVAKLS8qCi0gIFRvIGJlIGNh bGxlZCB0byBkZXRlcm1pbmUgaWYgYSB0cmFwIGlzIHBlbmRpbmcgb24gYSBwdHkKLSAgaWYgYW5k IG9ubHkgaWYgc2VsZWN0KCkgY2Fubm90IGJlIHVzZWQuCi0qLwotaW50Ci1wdHlfdHJhcF9wZW5k aW5nKGZkKSBpbnQgZmQ7IHsKLSAgICBpbnQgcGVuZGluZzsKLSAgICBpbnQgcmM7Ci0KLSAgICBy YyA9IGlvY3RsKGZkLCBUSU9DVFJBUFNUQVRVUywgKGNoYXIgKikmcGVuZGluZywgc2l6ZW9mKHBl bmRpbmcpKTsKLSAgICBpZiAocmMgPT0gMCkgewotICAgICAgICBkZWJ1ZyhGMTAxLCJwdHlfdHJh cF9wZW5kaW5nKCkiLCIiLHBlbmRpbmcpOwotICAgICAgICByZXR1cm4ocGVuZGluZyk7Ci0gICAg fSBlbHNlIHsKLSAgICAgICAgZGVidWcoRjExMSwicHR5X3RyYXBfcGVuZGluZygpIiwiaW9jdGwo KSBmYWlsZWQiLHJjKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci19Ci0KLS8qCi0gIFRv IGJlIGNhbGxlZCBhZnRlciBzZWxlY3QoKSBoYXMgcmV0dXJuZWQgaW5kaWNhdGluZyB0aGF0IGFu IGV4Y2VwdGlvbiBpcwotICB3YWl0aW5nIG9uIGEgcHR5LiAgSXQgc2hvdWxkIGJlIGNhbGxlZCB3 aXRoIHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgdGhlIHB0eS4KLSAgUmV0dXJucyAtMSBvbiBlcnJv cjsgMCBpZiBwdHkgaXMgc3RpbGwgb3BlbjsgMSBpZiBwdHkgaGFzIGNsb3NlZC4KLSovCi1pbnQK LXB0eV90cmFwX2hhbmRsZXIoZmQpIGludCBmZDsgewotICAgIHN0cnVjdCByZXF1ZXN0X2luZm8g cmk7Ci0KLSAgICBtZW1zZXQoJnJpLDAsc2l6ZW9mKHJpKSk7Ci0gICAgaWYgKGlvY3RsKGZkLFRJ T0NSRVFDSEVDSywoY2hhciAqKSZyaSwgc2l6ZW9mKHJpKSkgIT0gMCkgewotICAgICAgICBkZWJ1 ZyhGMTExLCJwdHlfdHJhcF9oYW5kbGVyKCkiLCJpb2N0bChUSU9DUkVRQ0hFQ0spIGZhaWxlZCIs ZXJybm8pOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBzd2l0Y2ggKHJpLnJlcXVl c3QpIHsKLSAgICAgIGNhc2UgVElPQ09QRU46Ci0gICAgICAgIGRlYnVnKEYxMTAsInB0eV90cmFw X2hhbmRsZXIoKSIsImFuIG9wZW4oKSBjYWxsIiwwKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj YXNlIFRJT0NDTE9TRToKLSAgICAgICAgZGVidWcoRjExMCwicHR5X3RyYXBfaGFuZGxlcigpIiwi YSBjbG9zZSgpIGNhbGwiLDApOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAg ICAgIGRlYnVnKEYxMTAsInB0eV90cmFwX2hhbmRsZXIoKSIsImFuIGlvY3RsKCkgY2FsbCIsMCk7 Ci0gICAgICAgIHJpLmVycm5vX2Vycm9yID0gRUlOVkFMOwotICAgIH0KLSAgICBpZiAoaW9jdGwo ZmQsIFRJT0NSRVFTRVQsIChjaGFyICopJnJpLHNpemVvZihyaSkpICE9IDApIHsKLSAgICAgICAg ZGVidWcoRjExMSwicHR5X3RyYXBfaGFuZGxlcigpIiwiaW9jdGwoVElPQ1JFUVNFVCkgZmFpbGVk IixlcnJubyk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIGlmIChyaS5yZXF1ZXN0 ID09IFRJT0NDTE9TRSkKLSAgICAgIHJldHVybigxKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4o MCk7Ci19Ci0jZW5kaWYgLyogSEFWRV9QVFlUUkFQICovCi0KLVZPSUQKLWV4ZWNfY21kKHMpIGNo YXIgKiBzOyB7Ci0gICAgc3RydWN0IHN0cmluZ2FycmF5ICogcTsKLSAgICBjaGFyICoqIGFyZ3Mg PSBOVUxMOwotCi0gICAgaWYgKCFzKSByZXR1cm47Ci0gICAgaWYgKCEqcykgcmV0dXJuOwotCi0g ICAgcSA9IGNrc3BsaXQoMSwwLHMsTlVMTCwiXFwlW10mJCstLz0qXl9AIXt9Lzw+fC4jfidgOjs/ Iiw3LDAsMCk7Ci0gICAgaWYgKCFxKSByZXR1cm47Ci0KLSAgICBhcmdzID0gcS0+YV9oZWFkICsg MTsKLQotI2lmZGVmIERFQlVHICAgIAotICAgIHsKLQlpbnQgaSwgbjsKLQluID0gcS0+YV9zaXpl OwotCWZvciAoaSA9IDA7IGkgPD0gbjsgaSsrKSB7Ci0JICAgIGlmICghYXJnc1tpXSkgewotCQlk ZWJ1ZyhGMTExLCJleGVjX2NtZCBhcmciLCJOVUxMIixpKTsKLQkJYnJlYWs7Ci0JICAgIH0gZWxz ZSB7Ci0JCWRlYnVnKEYxMTEsImV4ZWNfY21kIGFyZyIsYXJnc1tpXSxpKTsKLQkJaWYgKGkgPT0g biAmJiBhcmdzW2ldKSB7Ci0JCSAgICBkZWJ1ZyhGMTAxLCJleGVjX2NtZCBTVUJTVElUVVRJTkcg TlVMTCIsIiIsaSk7Ci0JCSAgICBpZiAoc3RybGVuKGFyZ3NbaV0pID09IDApCi0JCSAgICAgIG1h a2VzdHIoJihhcmdzW2ldKSxOVUxMKTsKLQkJfQotCi0JICAgIH0KLQl9CSAgICAKLSAgICB9Ci0j ZW5kaWYJLyogREVCVUcgKi8KLQotICAgIGV4ZWN2cChhcmdzWzBdLGFyZ3MpOwotfQotCi0vKiBH ZXQgYSBwdHksIHNjYW4gaW5wdXQgbGluZXMuICovCi0vKiBmYyA9IDAgZm9yIGludGVyYWN0aXZl IGFjY2VzczsgZmMgPSAxIGZvciBydW5uaW5nIGV4dGVybmFsIHByb3RvY29scyAqLwotCi1zdGF0 aWMgaW50IHB0eV9mYyA9IC0xOwkJCS8qIEdsb2JhbCBjb3B5IG9mIGZjICovCi0KLWludAotZG9f cHR5KGZkLCBjbWQsIGZjKSBpbnQgKiBmZDsgY2hhciAqIGNtZDsgaW50IGZjOyB7Ci0gICAgbG9u ZyByZXR2YWw7Ci0gICAgaW50IHN5bmNwaXBlWzJdOwotICAgIGludCBpLCB0dHlmZDsKLSNpZmRl ZiBIQVZFX1BUWVRSQVAKLSAgICBpbnQgeDsKLSNlbmRpZiAvKiBIQVZFX1BUWVRSQVAgKi8KLQot ICAgIGRlYnVnKEYxMDEsIkNLVVBUWS5DIGRvX3B0eSBmYyIsIiIsZmMpOwotCi0gICAgdHR5ZmQg PSAqZmQ7Ci0KLSAgICBwdHlfbWFzdGVyX2ZkID0gLTI7Ci0gICAgcHR5X3NsYXZlX2ZkID0gLTI7 Ci0gICAgcHR5X2ZvcmtfcGlkID0gLTI7Ci0KLSAgICBtc2cgPSAwOwkJCQkvKiBNZXNzYWdlIGNv dW50ZXIgKi8KLSAgICBwdHlfaW5pdCgpOwkJCQkvKiBGaW5kIGFuIGF2YWlsYWJsZSBwdHkgdG8g dXNlLiAqLwotICAgIGVycm5vID0gMDsKLQotICAgIGlmICgocmV0dmFsID0gcHR5X2dldHB0eSgm dHR5ZmQsIFhsaW5lLCAyMCkpICE9IDApIHsKLQlpZiAobXNnKysgPT0gMCkKLQkgIHBlcnJvcihY bGluZSk7Ci0gICAgICAgIGRlYnVnKEYxMTEsImRvX3B0eSgpIiwicHR5X2dldHB0eSgpIGZhaWxz IixyZXR2YWwpOwotCSpmZCA9IHR0eWZkOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAg ICAqZmQgPSB0dHlmZDsKLSAgICBkZWJ1ZyhGMTExLCJkb19wdHkoKSBYbGluZSIsWGxpbmUsdHR5 ZmQpOwotCi0jaWZkZWYgU0lHVFRPVQotLyoKLSAgSWdub3JpbmcgU0lHVFRPVSBrZWVwcyB0aGUg a2VybmVsIGZyb20gYmxvY2tpbmcgdXMuICB3ZSB0d2VhayB0aGUgdHR5IHdpdGgKLSAgYW4gaW9j dGwoKSAoaW4gdHRpb2N0KCkgaW4gL3N5cy90dHkuYyBpbiBhIEJTRCBrZXJuZWwpCi0qLwotICAg ICBzaWduYWwoU0lHVFRPVSwgU0lHX0lHTik7Ci0jZW5kaWYgLyogU0lHVFRPVSAqLwotCi0vKiBT dGFydCB1cCB0aGUgY29tbWFuZCBvbiB0aGUgc2xhdmUgc2lkZSBvZiB0aGUgdGVybWluYWwgKi8K LQotICAgIGlmIChwaXBlKHN5bmNwaXBlKSA8IDApIHsKLSAgICAgICAgZGVidWcoRjExMCwiZG9f cHR5KCkiLCJwaXBlKCkgZmFpbHMiLDApOwotCXBlcnJvcigicGlwZSgpIGZhaWxlZCIpOwotCW1z ZysrOwotICAgICAgICBkZWJ1ZyhGMTExLCJkb19wdHkoKSIsInBpcGUgZmFpbHMiLGVycm5vKTsK LSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgaWYgKChpID0gZm9yaygpKSA8IDApIHsK LSAgICAgICAgLyogWFhYIC0gbmVlZCB0byBjbGVhbiB1cCB0aGUgYWxsb2NhdGVkIHB0eSAqLwot ICAgICAgICBwZXJyb3IoImZvcmsoKSBmYWlsZWQiKTsKLQltc2crKzsKLSAgICAgICAgZGVidWco RjExMSwiZG9fcHR5KCkiLCJmb3JrIGZhaWxzIixlcnJubyk7Ci0gICAgICAgIHJldHVybigtMSk7 Ci0gICAgfQotICAgIGlmIChpKSB7ICAvKiBXYWl0IGZvciBjaGlsZCBiZWZvcmUgd3JpdGluZyB0 byBwYXJlbnQgc2lkZSBvZiBwdHkuICovCi0gICAgICAgIGNoYXIgYzsKLSNpZmRlZiBIQVZFX1BU WVRSQVAKLSAgICAgICAgaW50IG9uID0gMTsKLSNlbmRpZiAvKiBIQVZFX1BUWVRSQVAgKi8KLQlj bG9zZShzeW5jcGlwZVsxXSk7Ci0JZXJybm8gPSAwOwotICAgICAgICBpZiAocmVhZChzeW5jcGlw ZVswXSwgJmMsIDEpID09IDApIHsgLyogU2xhdmUgc2lkZSBkaWVkICovCi0JICAgIHBlcnJvcigi UGlwZSByZWFkKCkgZmFpbGVkIik7Ci0JICAgIG1zZysrOwotICAgICAgICAgICAgZGVidWcoRjEx MCwiZG9fcHR5KCkiLCJTbGF2ZSBmYWlscyB0byBpbml0aWFsaXplIiwwKTsKLSAgICAgICAgICAg IGNsb3NlKHN5bmNwaXBlWzBdKTsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0K LSAgICAgICAgcHR5X2ZvcmtfcGlkID0gaTsJCS8qIFNvIHdlIGNhbiBjbGVhbiBpdCB1cCBsYXRl ciAqLwotCXB0eV9mb3JrX2FjdGl2ZSA9IDE7Ci0JZGVidWcoRjEwMSwiZG9fcHR5IHB0eV9mb3Jr X3BpZCIsIiIscHR5X2ZvcmtfcGlkKTsKLSNpZmRlZiBIQVZFX1BUWVRSQVAKLSAgICAgICAgLyog SFBVWCBkb2VzIG5vdCBhbGxvdyB0aGUgbWFzdGVyIHRvIHJlYWQgZW5kIG9mIGZpbGUuICAqLwot ICAgICAgICAvKiBUaGVyZWZvcmUsIHdlIG11c3QgZGV0ZXJtaW5lIHRoYXQgdGhlIHNsYXZlIGhh cyBiZWVuICovCi0gICAgICAgIC8qIGNsb3NlZCBieSB0cmFwcGluZyB0aGUgY2FsbCB0byBjbG9z ZSgpLiAgICAgICAgICAgICAgKi8KLQllcnJubyA9IDA7Ci0JeCA9IGlvY3RsKHR0eWZkLCBUSU9D VFJBUCwgKGNoYXIgKikmb24pOwotCWRlYnVnKEYxMTEsImRvX3B0eSBpb2N0bChUSU9DVFJBUCki LGNraXRvYSh4KSxlcnJubyk7Ci0jZW5kaWYgLyogSEFWRV9QVFlUUkFQICovCi0gICAgICAgIGRl YnVnKEYxMTEsImRvX3B0eSgpIiwic3luY2hyb25pemVkIC0gcHR5X2ZvcmtfcGlkIixwdHlfZm9y a19waWQpOwotICAgICAgICBjbG9zZShzeW5jcGlwZVswXSk7Ci0gICAgfSBlbHNlIHsKLQlpbnQg eDsKLQlkZWJ1ZyhGMTAxLCJkb19wdHkgZ2V0cHR5c2xhdmUgdHR5ZmQgQSIsIiIsdHR5ZmQpOwot ICAgICAgICBkZWJ1ZyhGMTEwLCJkb19wdHkoKSIsIlNsYXZlIHN0YXJ0cyIsMCk7Ci0JeCA9IGdl dHB0eXNsYXZlKCZ0dHlmZCxmYyk7Ci0JZGVidWcoRjEwMSwiZG9fcHR5IGdldHB0eXNsYXZlIiwi Iix4KTsKLSAgICAgICAgaWYgKHggPT0gMCkgewotCSAgICBkZWJ1ZyhGMTAxLCJkb19wdHkgZ2V0 cHR5c2xhdmUgdHR5ZmQgQiIsIiIsdHR5ZmQpOwotI2lmZGVmIFdBTlRfVVRNUAotICAgICAgICAg ICAgcHR5X3VwZGF0ZV91dG1wKFBUWV9VU0VSX1BST0NFU1MsCi0JCQkgICAgZ2V0cGlkKCksCi0J CQkgICAgIktFUk1JVCIsCi0JCQkgICAgWGxpbmUsCi0JCQkgICAgY21kLAotCQkJICAgIFBUWV9U VFlTTE9UX1VTQUJMRQotCQkJICAgICk7Ci0jZW5kaWYgLyogV0FOVF9VVE1QICovCi0gICAgICAg ICAgICAvKiBOb3RpZnkgb3VyIHBhcmVudCB3ZSdyZSByZWFkeSB0byBjb250aW51ZS4qLwotICAg ICAgICAgICAgZGVidWcoRjExMCwiZG9fcHR5KCkiLCJzbGF2ZSBzeW5jaHJvbml6aW5nIiwwKTsK LSAgICAgICAgICAgIHdyaXRlKHN5bmNwaXBlWzFdLCJ5IiwxKTsKLSAgICAgICAgICAgIGNsb3Nl KHN5bmNwaXBlWzBdKTsKLSAgICAgICAgICAgIGNsb3NlKHN5bmNwaXBlWzFdKTsKLQotCSAgICBk ZWJ1ZyhGMTEwLCJkb19wdHkgY21kIixjbWQsIiIpOwotICAgICAgICAgICAgZXhlY19jbWQoY21k KTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImRvX3B0eSgpIiwiZXhlY19jbWQoKSByZXR1cm5z IC0gd2h5PyIsZXJybm8pOwotICAgICAgICB9Ci0JKmZkID0gdHR5ZmQ7Ci0gICAgICAgIGRlYnVn KEYxMTAsImRvX3B0eSgpIiwiZ2V0cHR5c2xhdmUoKSBmYWlscyAtIGV4aXRpbmciLDApOwotICAg ICAgICBleGl0KDEpOwotICAgIH0KLSAgICAqZmQgPSB0dHlmZDsKLSAgICBwdHlfZmMgPSBmYzsK LSAgICByZXR1cm4oZ2V0cGlkKCkpOwotfSAvKiBlbmQgb2YgZG9fcHR5KCkgKi8KLQotCi1WT0lE Ci1lbmRfcHR5KCkgewotICAgIG1zZyA9IDA7CQkJCS8qIE1lc3NhZ2UgY291bnRlciAqLwotICAg IGRlYnVnKEYxMDEsImVuZF9wdHkgcHR5X2ZvcmtfcGlkIiwiIixwdHlfZm9ya19waWQpOwotICAg IGlmIChYbGluZVswXSAmJiBwdHlfZm9ya19waWQgPj0gMCkgewotICAgICAgICBwdHlfY2xlYW51 cChYbGluZSxwdHlfZm9ya19waWQsMSk7Ci0gICAgICAgIFhsaW5lWzBdID0gJ1wwJzsKLSAgICAg ICAgcHR5X2ZvcmtfcGlkID0gLTE7Ci0JcHR5X2ZvcmtfYWN0aXZlID0gMDsKLQlkZWJ1ZyhGMTAx LCJlbmRfcHR5IHB0eV9mb3JrX2FjdGl2ZSIsIiIscHR5X2ZvcmtfYWN0aXZlKTsKLSAgICB9Ci0g ICAgcHR5X2ZjID0gLTE7Ci19Ci0jZW5kaWYgLyogTkVUUFRZICovCgpkaWZmIC0tZ2l0IGEvY2tl cm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VwdHkuYy5jOTkgYi9ja2VybWl0 LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXB0eS5jLmM5OQpkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggOTkwNjU1NS4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDIt YnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXB0eS5jLmM5OQorKysgL2Rldi9udWxsCkBAIC0xLDE5 NzkgKzAsMCBAQAotY2hhciAqY2twdHl2ID0gIlBzZXVkb3Rlcm1pbmFsIHN1cHBvcnQsIDkuMC4x MDEsIDEzIEp1biAyMDExIjsKLQotLyogIEMgSyBVIFAgVCBZICAtLSAgQy1LZXJtaXQgcHNldWRv dGVybWluYWwgY29udHJvbCBmdW5jdGlvbnMgZm9yIFVOSVggICovCi0KLS8qIExhc3QgdXBkYXRl OiBNb24gSnVuIDEzIDExOjMyOjUyIDIwMTEgKi8KLQotLyoKLSAgQ29weXJpZ2h0IDE5OTUgYnkg dGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCi0KLSAgUGVybWlzc2lv biB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQg aXRzCi0gIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBo ZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQKLSAgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQKLSAgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZwotICBk b2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4g YWR2ZXJ0aXNpbmcgb3IKLSAgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9m IHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLAotICB3cml0dGVuIHByaW9yIHBlcm1pc3Np b24uICBGdXJ0aGVybW9yZSBpZiB5b3UgbW9kaWZ5IHRoaXMgc29mdHdhcmUgeW91IG11c3QKLSAg bGFiZWwgeW91ciBzb2Z0d2FyZSBhcyBtb2RpZmllZCBzb2Z0d2FyZSBhbmQgbm90IGRpc3RyaWJ1 dGUgaXQgaW4gc3VjaCBhCi0gIGZhc2hpb24gdGhhdCBpdCBtaWdodCBiZSBjb25mdXNlZCB3aXRo IHRoZSBvcmlnaW5hbCBNLkkuVC4gc29mdHdhcmUuCi0gIE0uSS5ULiBtYWtlcyBubyByZXByZXNl bnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yCi0gIGFu eSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1w bGllZCB3YXJyYW50eS4KLQotICBNb2RpZmllZCBmb3IgdXNlIGluIEMtS2VybWl0LCBhbmQgbmV3 IG1hdGVyaWFsIGFkZGVkLCBieToKLQotICBKZWZmcmV5IEFsdG1hbiA8amFsdG1hbkBzZWN1cmUt ZW5kcG9pbnRzLmNvbT4KLSAgU2VjdXJlIEVuZHBvaW50cyBJbmMuLCBOZXcgWW9yayBDaXR5Ci0g IE5vdmVtYmVyIDE5OTkKLQotICBQYXJhbWV0ZXJpemVkIGZvciBwdHkgZmlsZSBkZXNjcmlwdG9y IGFuZCBmdW5jdGlvbiBjb2RlLAotICBGcmFuayBkYSBDcnV6LCBDb2x1bWJpYSBVbml2ZXJzaXR5 LCBOZXcgWW9yayBDaXR5Ci0gIERlYyAyMDA2IC0gU2VwIDIwMDkKLSovCi0KLS8qCi0gIEJ1aWx0 IGFuZCB0ZXN0ZWQgc3VjY2Vzc3VsbHkgb246Ci0gICAuIDQuNEJTRCwgaW5jbHVkaW5nIEJTREkv T1MsIE5ldEJTRCwgRnJlZUJTRCwgT3BlbkJTRCwgTWFjIE9TIFgKLSAgIC4gQUlYIDQuMSBhbmQg bGF0ZXIKLSAgIC4gREcvVVggNS40UjQuMTEKLSAgIC4gRGlnaXRhbCBVTklYIDMuMiBhbmQgNC4w Ci0gICAuIEhQLVVYIDkuMDAgYW5kIGxhdGVyCi0gICAuIElSSVggNi4wIGFuZCBsYXRlcgotICAg LiBMaW51eAotICAgLiBNYWMgT1MgWCAxMC40Ci0gICAuIE5lWFRTVEVQIDMueAotICAgLiBPcGVu QlNECi0gICAuIFFOWCA0LjI1IChleGNlcHQgUFRZIHByb2Nlc3MgdGVybWluYXRpb24gbm90IGRl dGVjdGVkKQotICAgLiBTQ08gT1NSNS4wLjUKLSAgIC4gU0NPIFVuaXh3YXJlIDcKLSAgIC4gU0lO SVggNS40MgotICAgLiBTb2xhcmlzIDIueCBhbmQgNwotICAgLiBTdW5PUyA0LjEuMwotCi0gIEZh aWx1cmVzIGluY2x1ZGU6Ci0gICAuIFNDTyBVTklYIDMuMnY0LjIgKGNvbXBpbGUgZmFpbHMgd2l0 aCBzeW50YXggZXJyb3IgaW4gPG1lbW9yeS5oPikKLSAgIC4gSFAtVVggOC4wMCBhbmQgZWFybGll ciAobm8gdmhhbmd1cCBvciBwdHNuYW1lIHJvdXRpbmVzKQotKi8KLQotI2luY2x1ZGUgImNrY3N5 bS5oIgotI2luY2x1ZGUgImNrY2RlYi5oIgkJCS8qIFRvIHBpY2sgdXAgTkVUUFRZIGRlZmluaXRp b24gKi8KLQotI2lmbmRlZiBORVRQVFkJCQkJLyogU2VsZWN0b3IgZm9yIFBUWSBzdXBwb3J0ICov Ci0KLWNoYXIgKiBwdHl2ZXIgPSAiTm8gUFRZIHN1cHBvcnQiOwotCi0jZWxzZSAgLyogKHJlc3Qg b2YgdGhpcyBtb2R1bGUuLi4pICovCi0KLWNoYXIgKiBwdHl2ZXIgPSAiUFRZIHN1cHBvcnQgOC4w LjAxNiwgMjIgQXVnIDIwMDciOwotCi0vKiBUaGVzZSB3aWxsIG5vIGRvdWJ0IG5lZWQgYWRqdXN0 bWVudC4uLiAqLwotCi0jaWZuZGVmIE5FWFQKLSNkZWZpbmUgSEFWRV9TRVRTSUQKLSNlbmRpZiAv KiBORVhUICovCi0jZGVmaW5lIEhBVkVfS0lMTFBHCi0jZGVmaW5lIEhBVkVfVFRZTkFNRQotI2Rl ZmluZSBIQVZFX1dBSVRQSUQKLQotI2lmZGVmIFNVTk9TNDEKLSNkZWZpbmUgQlNENDRPUlBPU0lY Ci0jZW5kaWYJLyogU1VOT1M0MSAqLwotCi0jaWZuZGVmIFVTRV9URVJNSU8KLSNpZmRlZiBMSU5V WAotI2RlZmluZSBVU0VfVEVSTUlPCi0jZWxzZQotI2lmZGVmIEFUVFNWCi0jZGVmaW5lIFVTRV9U RVJNSU8KLSNlbHNlCi0jaWZkZWYgSFBVWAotI2RlZmluZSBVU0VfVEVSTUlPCi0jZWxzZQotI2lm ZGVmIEFJWAotI2RlZmluZSBVU0VfVEVSTUlPCi0jZWxzZQotI2lmZGVmIEJTRDQ0T1JQT1NJWAot I2RlZmluZSBVU0VfVEVSTUlPCi0jZWxzZQotI2lmZGVmIElSSVg2MAotI2RlZmluZSBVU0VfVEVS TUlPCi0jZWxzZQotI2lmZGVmIFFOWAotI2RlZmluZSBVU0VfVEVSTUlPCi0jZW5kaWYgLyogUU5Y ICovCi0jZW5kaWYgLyogSVJJWDYwICovCi0jZW5kaWYgLyogQlNENDRPUlBPU0lYICovCi0jZW5k aWYgLyogQUlYICovCi0jZW5kaWYgLyogSFBVWCAqLwotI2VuZGlmIC8qIEFUVFNWICovCi0jZW5k aWYgLyogTElOVVggKi8KLSNlbmRpZiAvKiBVU0VfVEVSTUlPICovCi0KLSNpZmRlZiBRTlgKLSNp bmNsdWRlIDxmY250bC5oPgotI2VuZGlmIC8qIFFOWCAqLwotCi0jaWZkZWYgVVNFX1RFUk1JTwot I2RlZmluZSBQT1NJWF9URVJNSU9TCQkJLyogU2VlbXMgdG8gYmUgYSBtaXNub21lciAqLwotI2Vu ZGlmIC8qIFVTRV9URVJNSU8gKi8KLQotI2lmZGVmIE5FWFQKLSNpZm5kZWYgR0VUUEdSUF9PTkVB UkcKLSNkZWZpbmUgR0VUUEdSUF9PTkVBUkcKLSNlbmRpZiAvKiBHRVRQR1JQX09ORUFSRyAqLwot I2VuZGlmIC8qIE5FWFQgKi8KLQotI2lmZGVmIFdBTlRfVVRNUAkJCS8qIFNlZSBja3VwdHkuaCAq LwotLyoKLSAgV0FOVF9VVE1QIGlzIG5vdCBkZWZpbmVkIGJlY2F1c2UgKGEpIHRoZSB1dG1wL3d0 bXAganVuayBpcyB0aGUgbW9zdAotICBub25wb3J0YWJsZSBwYXJ0IG9mIHRoaXMgbW9kdWxlLCBh bmQgKGIpIHdlJ3JlIG5vdCBsb2dnaW5nIGFueWJvZHkKLSAgaW4sIHdlJ3JlIGp1c3QgcnVubmlu ZyBhIHByb2Nlc3MsIGFuZCBkb24ndCBuZWVkIHRvIHdyaXRlIHV0bXAvd3RtcCByZWNvcmRzLgot Ki8KLSNpZm5kZWYgSEFWRV9TRVRVVFhFTlQJCQkvKiBXaG8gaGFzIDx1dG1weC5oPiAqLwotI2lm ZGVmIFNPTEFSSVMKLSNkZWZpbmUgSEFWRV9TRVRVVFhFTlQKLSNlbHNlCi0jaWZkZWYgSVJJWDYw Ci0jZGVmaW5lIEhBVkVfU0VUVVRYRU5UCi0jZWxzZQotI2lmZGVmIENLX1NDT1Y1Ci0jZGVmaW5l IEhBVkVfU0VUVVRYRU5UCi0jZWxzZQotI2lmZGVmIEhQVVgxMAotI2RlZmluZSBIQVZFX1NFVFVU WEVOVAotI2Vsc2UKLSNpZmRlZiBVTklYV0FSRQotI2RlZmluZSBIQVZFX1NFVFVUWEVOVAotI2Vs c2UKLSNpZmRlZiBJUklYNjAKLSNkZWZpbmUgSEFWRV9TRVRVVFhFTlQKLSNlbmRpZiAvKiBJUklY NjAgKi8KLSNlbmRpZiAvKiBVTklYV0FSRSAqLwotI2VuZGlmIC8qIEhQVVgxMCAqLwotI2VuZGlm IC8qIENLX1NDT1Y1ICovCi0jZW5kaWYgLyogSVJJWDYwICovCi0jZW5kaWYgLyogU09MQVJJUyAq LwotI2VuZGlmIC8qIEhBVkVfU0VUVVRYRU5UICovCi0KLSNpZm5kZWYgSEFWRV9VVEhPU1QJCQkv KiBEb2VzIHV0bXAgaW5jbHVkZSB1dF9ob3N0W10/ICovCi0jaWZkZWYgSEFWRV9TRVRVVFhFTlQJ CQkvKiB1dG1weCBhbHdheXMgZG9lcyAqLwotI2RlZmluZSBIQVZFX1VUSE9TVAotI2Vsc2UKLSNp ZmRlZiBMSU5VWAkJCQkvKiBMaW51eCBkb2VzICovCi0jZGVmaW5lIEhBVkVfVVRIT1NUCi0jZWxz ZQotI2lmZGVmIFNVTk9TNAkJCQkvKiBTdW5PUyBkb2VzICovCi0jZGVmaW5lIEhBVkVfVVRIT1NU Ci0jZWxzZQotI2lmZGVmIEFJWDQxCQkJCS8qIEFJWCA0LjEgYW5kIGxhdGVyIGRvICovCi0jZGVm aW5lIEhBVkVfVVRIT1NUCi0jZW5kaWYgLyogQUlYNDEgKi8KLSNlbmRpZiAvKiBTVU5PUzQgKi8K LSNlbmRpZiAvKiBMSU5VWCAqLwotI2VuZGlmIC8qIEhBVkVfU0VUVVRYRU5UICovCi0jZW5kaWYg LyogSEFWRV9VVEhPU1QgKi8KLQotI2lmbmRlZiBIQVZFX1VUX0hPU1QKLSNpZm5kZWYgTk9fVVRf SE9TVAotI2RlZmluZSBOT19VVF9IT1NUCi0jZW5kaWYgLyogTk9fVVRfSE9TVCAqLwotI2VuZGlm IC8qIEhBVkVfVVRfSE9TVCAqLwotCi0jZW5kaWYgLyogV0FOVF9VVE1QICovCi0KLSNpZmRlZiBM SU5VWAotI2RlZmluZSBDS19WSEFOR1VQCi0jZGVmaW5lIEhBVkVfU1lTX1NFTEVDVF9ICi0jZGVm aW5lIEhBVkVfR0VUVVRFTlQKLSNkZWZpbmUgSEFWRV9TRVRVVEVOVAotI2RlZmluZSBIQVZFX1VQ RFdUTVAKLSNlbmRpZiAvKiBMSU5VWCAqLwotCi0jaWZkZWYgSFBVWDEwCi0jZGVmaW5lIENLX1ZI QU5HVVAKLSNkZWZpbmUgVkhBTkdfRklSU1QKLSNkZWZpbmUgSEFWRV9QVFNOQU1FCi0jaWZuZGVm IEhBVkVfUFRZVFJBUAotI2RlZmluZSBIQVZFX1BUWVRSQVAKLSNlbmRpZiAvKiBIQVZFX1BUWVRS QVAgKi8KLSNlbHNlCi0jaWZkZWYgSFBVWDkKLSNkZWZpbmUgQ0tfVkhBTkdVUAotI2RlZmluZSBW SEFOR19GSVJTVAotI2RlZmluZSBIQVZFX1BUU05BTUUKLSNpZm5kZWYgSEFWRV9QVFlUUkFQCi0j ZGVmaW5lIEhBVkVfUFRZVFJBUAotI2VuZGlmIC8qIEhBVkVfUFRZVFJBUCAqLwotI2VuZGlmIC8q IEhQVVg5ICovCi0jZW5kaWYgLyogSFBVWDEwICovCi0KLSNpZmRlZiBTVU5PUzQKLSNkZWZpbmUg Q0tfVkhBTkdVUAotI2RlZmluZSBOT19VVF9QSUQKLSNkZWZpbmUgVkhBTkdfRklSU1QKLSNlbmRp ZiAvKiBTVU5PUzQgKi8KLQotI2lmZGVmIElSSVg2MAotI2RlZmluZSBDS19WSEFOR1VQCi0jZGVm aW5lIEhBVkVfX0dFVFBUWQotI2VuZGlmIC8qIElSSVg2MCAqLwotCi0jaWZkZWYgU0lOSVgKLSNk ZWZpbmUgSEFWRV9TVFJFQU1TCi0jZGVmaW5lIEhBVkVfR1JBTlRQVAotI2RlZmluZSBIQVZFX1BU U05BTUUKLSNkZWZpbmUgUFVTSF9QVEVNCi0jZGVmaW5lIFBVU0hfTERURVJNCi0jZGVmaW5lIFBV U0hfVFRDT01QQVQKLSNlbmRpZiAvKiBTSU5JWCAqLwotCi0jaWZkZWYgdWx0cml4Ci0jZGVmaW5l IE1VU1RfU0VUUEdSUAotI2VuZGlmIC8qIHVsdHJpeCAqLwotCi0jaWZkZWYgUU5YCi0jZGVmaW5l IE1VU1RfU0VUUEdSUAotI2RlZmluZSBOT19ERVZUVFkKLSNkZWZpbmUgSU5JVF9TUFRZCi0jZW5k aWYgLyogUU5YICovCi0KLSNpZmRlZiBMSU5VWAotI2lmZGVmIEhBVkVfUFRNWAotI2RlZmluZSBI QVZFX0dSQU5UUFQKLSNkZWZpbmUgSEFWRV9QVFNOQU1FCi0jZW5kaWYgLyogSEFWRV9QVE1YICov Ci0jZWxzZQotI2lmZGVmIEhBVkVfU1RSRUFNUwotI2RlZmluZSBIQVZFX1BUTVgKLSNlbmRpZiAv KiBIQVZFX1NUUkVBTVMgKi8KLSNlbmRpZiAvKiBMSU5VWCAqLwotCi0jaW5jbHVkZSAiY2t1cHR5 LmgiCi0KLSNpZmRlZiBQVFlOT0JMT0NLCi0jaWZuZGVmIE9fTkRFTEFZCi0jaWZkZWYgT19OT05C TE9DSwotI2RlZmluZSBPX05ERUxBWSBPX05PTkJMT0NLCi0jZW5kaWYgLyogT19OT05CTE9DSyAq LwotI2VuZGlmIC8qIE9fTkRFTEFZICovCi0jZWxzZSAvKiBQVFlOT0JMT0NLICovCi0jaWZkZWYg T19OREVMQVkKLSN1bmRlZiBPX05ERUxBWQotI2VuZGlmIC8qIE9fTkRFTEFZICovCi0jZGVmaW5l IE9fTkRFTEFZIDAKLSNlbmRpZiAvKiBQVFlOT0JMT0NLICovCi0KLSNpZm5kZWYgT05MQ1IKLSNk ZWZpbmUgT05MQ1IgMAotI2VuZGlmIC8qIE9OTENSICovCi0KLSNpZmRlZiBDS19XQUlUX0gKLSNp bmNsdWRlIDxzeXMvd2FpdC5oPgotI2VuZGlmIC8qIENLX1dBSVRfSCAqLwotCi0jaWZkZWYgU1RS RUFNU1BUWQotI2lmbmRlZiBJTklUX1NQVFkKLSNkZWZpbmUgSU5JVF9TUFRZCi0jZW5kaWYgLyog SU5JVF9TUFRZICovCi0KLSNpbmNsdWRlIDxzeXMvc3RyZWFtLmg+Ci0jaW5jbHVkZSA8c3Ryb3B0 cy5oPgotI2luY2x1ZGUgPHRlcm1pby5oPgotCi0vKiBNYWtlIHN1cmUgd2UgZG9uJ3QgZ2V0IHRo ZSBCU0QgdmVyc2lvbiAqLwotCi0jaWZkZWYgSEFWRV9TWVNfVFRZX0gKLSNpbmNsdWRlICIvdXNy L2luY2x1ZGUvc3lzL3R0eS5oIgotI2VuZGlmIC8qIEhBVkVfU1lTX1RUWV9IICovCi0KLSNpZmRl ZiBIQVNfUFRZVkFSCQkJLyogV2hlcmUgaXMgdGhpcyBzZXQ/ICovCi0KLSNpbmNsdWRlIDxzeXMv cHR5dmFyLmg+Ci0KLSNlbHNlIC8qIEhBU19QVFlWQVIgKi8KLQotI2lmbmRlZiBUSU9DUEtUX0ZM VVNIV1JJVEUKLSNkZWZpbmUgVElPQ1BLVF9GTFVTSFdSSVRFIDB4MDIKLSNkZWZpbmUgVElPQ1BL VF9OT1NUT1AgICAgIDB4MTAKLSNkZWZpbmUgVElPQ1BLVF9ET1NUT1AgICAgIDB4MjAKLSNkZWZp bmUgVElPQ1BLVF9JT0NUTCAgICAgIDB4NDAKLSNlbmRpZiAvKiBUSU9DUEtUX0ZMVVNIV1JJVEUg Ki8KLQotI2VuZGlmIC8qIEhBU19QVFlWQVIgKi8KLQotI2lmZGVmIEhBVkVfVFRZX0gKLSNpbmNs dWRlIDx0dHkuaD4KLSNlbmRpZiAvKiBIQVZFX1RUWV9IICovCi0KLS8qCi0gIEJlY2F1c2Ugb2Yg dGhlIHdheSBwdHlpYnVmIGlzIHVzZWQgd2l0aCBzdHJlYW1zIG1lc3NhZ2VzLCB3ZSBuZWVkCi0g IHB0eWlidWYrMSB0byBiZSBvbiBhIGZ1bGwtd29yZCBib3VuZGFyeS4gIFRoZSBmb2xsb3dpbmcg d2VpcmRuZXNzCi0gIGlzIHNpbXBseSB0byBtYWtlIHRoYXQgaGFwcGVuLgotKi8KLWxvbmcgcHR5 aWJ1ZmJ1ZltCVUZTSVovc2l6ZW9mKGxvbmcpKzFdOwotY2hhciAqcHR5aWJ1ZiA9ICgoY2hhciAq KSZwdHlpYnVmYnVmWzFdKS0xOwotY2hhciAqcHR5aXAgPSAoKGNoYXIgKikmcHR5aWJ1ZmJ1Zlsx XSktMTsKLWNoYXIgcHR5aWJ1ZjJbQlVGU0laXTsKLXVuc2lnbmVkIGNoYXIgY3RsYnVmW0JVRlNJ Wl07Ci1zdHJ1Y3Qgc3RyYnVmIHN0cmJ1ZmMsIHN0cmJ1ZmQ7Ci0KLWludCByZWFkc3RyZWFtKCk7 Ci0KLSNlbHNlICAvKiAhIFNUUkVBTVNQVFkgKi8KLQotLyogSS9PIGRhdGEgYnVmZmVycywgcG9p bnRlcnMsIGFuZCBjb3VudGVycy4gKi8KLQotY2hhciBwdHlpYnVmW0JVRlNJWl0sICpwdHlpcCA9 IHB0eWlidWY7Ci1jaGFyIHB0eWlidWYyW0JVRlNJWl07Ci0KLSNlbmRpZiAvKiAhIFNUUkVBTVNQ VFkgKi8KLQotI2lmbmRlZiBVU0VfVEVSTUlPCi1zdHJ1Y3QgdGVybWJ1ZiB7Ci0gICAgc3RydWN0 IHNndHR5YiBzZzsKLSAgICBzdHJ1Y3QgdGNoYXJzIHRjOwotICAgIHN0cnVjdCBsdGNoYXJzIGx0 YzsKLSAgICBpbnQgc3RhdGU7Ci0gICAgaW50IGxmbGFnczsKLX0gdGVybWJ1ZiwgdGVybWJ1ZjI7 Ci0KLSNkZWZpbmUgY2ZzZXRvc3BlZWQodHAsdmFsKSAodHApLT5zZy5zZ19vc3BlZWQgPSAodmFs KQotI2RlZmluZSBjZnNldGlzcGVlZCh0cCx2YWwpICh0cCktPnNnLnNnX2lzcGVlZCA9ICh2YWwp Ci0jZGVmaW5lIGNmZ2V0b3NwZWVkKHRwKSAgICAgKHRwKS0+c2cuc2dfb3NwZWVkCi0jZGVmaW5l IGNmZ2V0aXNwZWVkKHRwKSAgICAgKHRwKS0+c2cuc2dfaXNwZWVkCi0KLSNlbHNlICAvKiBVU0Vf VEVSTUlPICovCi0KLSNpZmRlZiBTWVNWX1RFUk1JTwotI2RlZmluZSB0ZXJtaW9zIHRlcm1pbwot I2VuZGlmIC8qIFNZU1ZfVEVSTUlPICovCi0KLSNpZm5kZWYgVENTQU5PVwotCi0jaWZkZWYgVENT RVRTCi0KLSNkZWZpbmUgVENTQU5PVyBUQ1NFVFMKLSNkZWZpbmUgVENTQURSQUlOIFRDU0VUU1cK LSNkZWZpbmUgdGNnZXRhdHRyKGYsIHQpIGlvY3RsKGYsIFRDR0VUUywgKGNoYXIgKil0KQotCi0j ZWxzZSAvKiBUQ1NFVFMgKi8KLQotI2lmZGVmIFRDU0VUQQotI2RlZmluZSBUQ1NBTk9XIFRDU0VU QQotI2RlZmluZSBUQ1NBRFJBSU4gVENTRVRBVwotI2RlZmluZSB0Y2dldGF0dHIoZix0KSBpb2N0 bChmLFRDR0VUQSwoY2hhciAqKXQpCi0jZWxzZSAvKiBUQ1NFVEEgKi8KLSNkZWZpbmUgVENTQU5P VyBUSU9DU0VUQQotI2RlZmluZSBUQ1NBRFJBSU4gVElPQ1NFVEFXCi0jZGVmaW5lIHRjZ2V0YXR0 cihmLHQpIGlvY3RsKGYsVElPQ0dFVEEsKGNoYXIgKil0KQotI2VuZGlmIC8qIFRDU0VUQSAqLwot Ci0jZW5kaWYgLyogVENTRVRTICovCi0KLSNkZWZpbmUgdGNzZXRhdHRyKGYsYSx0KSBpb2N0bChm LGEsdCkKLSNkZWZpbmUgY2ZzZXRvc3BlZWQodHAsdmFsKSAodHApLT5jX2NmbGFnICY9IH5DQkFV RDsodHApLT5jX2NmbGFnfD0odmFsKQotI2RlZmluZSBjZmdldG9zcGVlZCh0cCkgKCh0cCktPmNf Y2ZsYWcgJiBDQkFVRCkKLQotI2lmZGVmIENJQkFVRAotI2RlZmluZSBjZnNldGlzcGVlZCh0cCx2 YWwpIFwKLSAodHApLT5jX2NmbGFnICY9IH5DSUJBVUQ7ICh0cCktPmNfY2ZsYWcgfD0gKCh2YWwp PDxJQlNISUZUKQotI2RlZmluZSBjZmdldGlzcGVlZCh0cCkgKCgodHApLT5jX2NmbGFnICYgQ0lC QVVEKT4+SUJTSElGVCkKLSNlbHNlIC8qIENJQkFVRCAqLwotI2RlZmluZSBjZnNldGlzcGVlZCh0 cCx2YWwpICh0cCktPmNfY2ZsYWcgJj0gfkNCQVVEOyAodHApLT5jX2NmbGFnfD0odmFsKQotI2Rl ZmluZSBjZmdldGlzcGVlZCh0cCkgKCh0cCktPmNfY2ZsYWcgJiBDQkFVRCkKLSNlbmRpZiAvKiBD SUJBVUQgKi8KLQotI2VuZGlmIC8qIFRDU0FOT1cgKi8KLQotc3RydWN0IHRlcm1pb3MgdGVybWJ1 ZiwgdGVybWJ1ZjI7ICAgICAgIC8qIHB0eSBjb250cm9sIHN0cnVjdHVyZSAqLwotCi0jaWZkZWYg SU5JVF9TUFRZCi1zdGF0aWMgaW50IHNwdHkgPSAtMTsKLSNlbmRpZiAvKiBJTklUX1NQVFkgKi8K LQotI2VuZGlmIC8qIFVTRV9URVJNSU8gKi8KLQotI2lmZGVmIFFOWAkJCQkvKiAyOTkgKi8KLSNp Zm5kZWYgSVhBTlkKLSNkZWZpbmUgSVhBTlkgMAotI2VuZGlmCS8qIElYQU5ZICovCi0jZW5kaWYJ LyogUU5YICovCi0KLXN0YXRpYyBpbnQgbXNnID0gMDsKLQotLyogVmFyaWFibGVzIGF2YWlsYWJs ZSB0byBvdGhlciBtb2R1bGVzICovCi0KLWludCBwdHlfZm9ya19hY3RpdmUgPSAwOwkJLyogcHR5 IGZvcmsgaXMgYWN0aXZlICovCi1QSURfVCBwdHlfZm9ya19waWQgPSAtMTsJCS8qIHB0eSBmb3Jr IHBpZCAqLwotaW50IHB0eV9zbGF2ZV9mZCA9IC0xOwkJCS8qIHB0eSBzbGF2ZSBmaWxlIGRlc2Ny aXB0b3IgKi8KLWludCBwdHlfbWFzdGVyX2ZkID0gLTE7CQkJLyogcHR5IG1hc3RlciBmaWxlIGRl c2NyaXB0b3IgKi8KLQotLyogdGVybWJ1ZiByb3V0aW5lcyAoYmVnaW4pICovCi0vKgotICBpbml0 X3Rlcm1idWYoKQotICBjb3B5X3Rlcm1idWYoY3ApCi0gIHNldF90ZXJtYnVmKCkKLQotICBUaGVz ZSB0aHJlZSByb3V0aW5lcyBhcmUgdXNlZCB0byBnZXQgYW5kIHNldCB0aGUgInRlcm1idWYiIHN0 cnVjdHVyZQotICB0byBhbmQgZnJvbSB0aGUga2VybmVsLiAgaW5pdF90ZXJtYnVmKCkgZ2V0cyB0 aGUgY3VycmVudCBzZXR0aW5ncy4KLSAgY29weV90ZXJtYnVmKCkgaGFuZHMgaW4gYSBuZXcgInRl cm1idWYiIHRvIHdyaXRlIHRvIHRoZSBrZXJuZWwsIGFuZAotICBzZXRfdGVybWJ1ZigpIHdyaXRl cyB0aGUgc3RydWN0dXJlIGludG8gdGhlIGtlcm5lbC4KLSovCi1WT0lECi1pbml0X3Rlcm1idWYo ZmQpIGludCBmZDsgewotICAgIGludCB0dHlmZDsKLSAgICBpbnQgcmMgPSAwOwotCi0gICAgdHR5 ZmQgPSBmZDsKLQotI2lmZGVmIEhBVkVfU1RSRUFNUwotICAgIGRlYnVnKEYxMDAsImluaXRfdGVy bWJ1ZiBIQVZFX1NUUkVBTVMiLCIiLDApOwotI2Vsc2UKLSAgICBkZWJ1ZyhGMTAwLCJpbml0X3Rl cm1idWYgSEFWRV9TVFJFQU1TIE5PVCBERUZJTkVEIiwiIiwwKTsKLSNlbmRpZgkvKiBIQVZFX1NU UkVBTVMgKi8KLSNpZmRlZiBTVFJFQU1TUFRZCi0gICAgZGVidWcoRjEwMCwiaW5pdF90ZXJtYnVm IFNUUkVBTVNQVFkiLCIiLDApOwotI2Vsc2UKLSAgICBkZWJ1ZyhGMTAwLCJpbml0X3Rlcm1idWYg U1RSRUFNU1BUWSBOT1QgREVGSU5FRCIsIiIsMCk7Ci0jZW5kaWYJLyogU1RSRUFNU1BUWSAqLwot I2lmZGVmIElOSVRfU1BUWQotICAgIGRlYnVnKEYxMDAsImluaXRfdGVybWJ1ZiBJTklUX1NQVFki LCIiLDApOwotI2Vsc2UKLSAgICBkZWJ1ZyhGMTAwLCJpbml0X3Rlcm1idWYgSU5JVF9TUFRZIE5P VCBERUZJTkVEIiwiIiwwKTsKLSNlbmRpZgkvKiBJTklUX1NQVFkgKi8KLQotICAgIGRlYnVnKEYx MDEsImluaXRfdGVybWJ1ZiB0dHlmZCIsIiIsdHR5ZmQpOwotI2lmZGVmIElOSVRfU1BUWQotICAg IGRlYnVnKEYxMDEsImluaXRfdGVybWJ1ZiBzcHR5IiwiIixzcHR5KTsKLSNlbmRpZgkvKiBJTklU X1NQVFkgKi8KLQotICAgIG1lbXNldCgmdGVybWJ1ZiwwLHNpemVvZih0ZXJtYnVmKSk7Ci0gICAg bWVtc2V0KCZ0ZXJtYnVmMiwwLHNpemVvZih0ZXJtYnVmMikpOwotI2lmbmRlZglVU0VfVEVSTUlP Ci0gICAgcmMgPSBpb2N0bCh0dHlmZCwgVElPQ0dFVFAsIChjaGFyICopJnRlcm1idWYuc2cpOwot ICAgIHJjIHw9IGlvY3RsKHR0eWZkLCBUSU9DR0VUQywgKGNoYXIgKikmdGVybWJ1Zi50Yyk7Ci0g ICAgcmMgfD0gaW9jdGwodHR5ZmQsIFRJT0NHTFRDLCAoY2hhciAqKSZ0ZXJtYnVmLmx0Yyk7Ci0j aWZkZWYgVElPQ0dTVEFURQotICAgIHJjIHw9IGlvY3RsKHR0eWZkLCBUSU9DR1NUQVRFLCAoY2hh ciAqKSZ0ZXJtYnVmLnN0YXRlKTsKLSNlbmRpZiAvKiBUSU9DR1NUQVRFICovCi0jZWxzZSAvKiBV U0VfVEVSTUlPICovCi0gICAgZXJybm8gPSAwOwotI2lmZGVmIElOSVRfU1BUWQotICAgIHJjID0g dGNnZXRhdHRyKHNwdHksICZ0ZXJtYnVmKTsKLSAgICBkZWJ1ZyhGMTExLCJpbml0X3Rlcm1idWYo KSB0Y2dldGF0dHIoc3B0eSkiLGNraXRvYShyYyksZXJybm8pOwotI2Vsc2UKLSAgICByYyA9IHRj Z2V0YXR0cih0dHlmZCwgJnRlcm1idWYpOwotICAgIGRlYnVnKEYxMTEsImluaXRfdGVybWJ1Zigp IHRjZ2V0YXR0cih0dHlmZCkiLGNraXRvYShyYyksZXJybm8pOwotI2VuZGlmIC8qIElOSVRfU1BU WSAqLwotI2VuZGlmIC8qIFVTRV9URVJNSU8gKi8KLSAgICBpZiAoIXJjKQotICAgICAgdGVybWJ1 ZjIgPSB0ZXJtYnVmOwotfQotCi0jaWZkZWYgVElPQ1BLVF9JT0NUTAotVk9JRAotY29weV90ZXJt YnVmKGNwLCBsZW4pIGNoYXIgKmNwOyBpbnQgbGVuOyB7Ci0gICAgaWYgKGxlbiA+IHNpemVvZih0 ZXJtYnVmKSkKLSAgICAgIGxlbiA9IHNpemVvZih0ZXJtYnVmKTsKLSAgICBtZW1jcHkoKGNoYXIg KikmdGVybWJ1ZiwgY3AsIGxlbik7Ci0gICAgdGVybWJ1ZjIgPSB0ZXJtYnVmOwotfQotI2VuZGlm IC8qIFRJT0NQS1RfSU9DVEwgKi8KLQotVk9JRAotc2V0X3Rlcm1idWYoZmQpIGludCBmZDsgewkJ LyogT25seSBtYWtlIHRoZSBuZWNlc3NhcnkgY2hhbmdlcy4gKi8KLSAgICBpbnQgeDsKLSAgICBp bnQgdHR5ZmQ7Ci0gICAgdHR5ZmQgPSBmZDsKLQotICAgIGRlYnVnKEYxMDEsInNldF90ZXJtYnVm IHR0eWZkIiwiIix0dHlmZCk7Ci0jaWZkZWYgSU5JVF9TUFRZCi0gICAgZGVidWcoRjEwMSwic2V0 X3Rlcm1idWYgc3B0eSIsIiIsc3B0eSk7Ci0jZW5kaWYJLyogSU5JVF9TUFRZICovCi0KLSNpZm5k ZWYJVVNFX1RFUk1JTwotICAgIGRlYnVnKEYxMDAsInNldF90ZXJtYnVmIFVTRV9URVJNSU8iLCIi LDApOwotICAgIGlmIChtZW1jbXAoKGNoYXIgKikmdGVybWJ1Zi5zZywgKGNoYXIgKikmdGVybWJ1 ZjIuc2csIHNpemVvZih0ZXJtYnVmLnNnKSkpCi0gICAgICBpb2N0bCh0dHlmZCwgVElPQ1NFVE4s IChjaGFyICopJnRlcm1idWYuc2cpOwotICAgIGlmIChtZW1jbXAoKGNoYXIgKikmdGVybWJ1Zi50 YywgKGNoYXIgKikmdGVybWJ1ZjIudGMsIHNpemVvZih0ZXJtYnVmLnRjKSkpCi0gICAgICBpb2N0 bCh0dHlmZCwgVElPQ1NFVEMsIChjaGFyICopJnRlcm1idWYudGMpOwotICAgIGlmIChtZW1jbXAo KGNoYXIgKikmdGVybWJ1Zi5sdGMsIChjaGFyICopJnRlcm1idWYyLmx0YywKLQkgICAgICAgc2l6 ZW9mKHRlcm1idWYubHRjKSkpCi0gICAgICBpb2N0bCh0dHlmZCwgVElPQ1NMVEMsIChjaGFyICop JnRlcm1idWYubHRjKTsKLSAgICBpZiAodGVybWJ1Zi5sZmxhZ3MgIT0gdGVybWJ1ZjIubGZsYWdz KQotICAgICAgaW9jdGwodHR5ZmQsIFRJT0NMU0VULCAoY2hhciAqKSZ0ZXJtYnVmLmxmbGFncyk7 Ci0jZWxzZSAgLyogVVNFX1RFUk1JTyAqLwotICAgIHggPSBtZW1jbXAoKGNoYXIgKikmdGVybWJ1 ZiwgKGNoYXIgKikmdGVybWJ1ZjIsIHNpemVvZih0ZXJtYnVmKSk7Ci0gICAgZGVidWcoRjEwMSwi c2V0X3Rlcm1idWYgIVVTRV9URVJNSU8gbWVtY21wIiwiIix4KTsKLSAgICB4ID0gMTsJCQkJLyog Rm9yY2UgdGhpcyAqLwotICAgIGlmICh4KSB7Ci0JaW50IHg7Ci0JZXJybm8gPSAwOwotI2lmZGVm IElOSVRfU1BUWQotCWRlYnVnKEYxMDAsInNldF90ZXJtYnVmIElOSVRfU1BUWSIsIiIsMCk7Ci0J eCA9IHRjc2V0YXR0cihzcHR5LCBUQ1NBTk9XLCAmdGVybWJ1Zik7Ci0JZGVidWcoRjExMSwic2V0 X3Rlcm1idWYgdGNzZXRhdHRyKHNwdHkpIixja2l0b2EoeCksZXJybm8pOwotI2Vsc2UKLQlkZWJ1 ZyhGMTAwLCJzZXRfdGVybWJ1ZiAhSU5JVF9TUFRZIiwiIiwwKTsKLQl4ID0gdGNzZXRhdHRyKHR0 eWZkLCBUQ1NBTk9XLCAmdGVybWJ1Zik7Ci0JZGVidWcoRjExMSwic2V0X3Rlcm1idWYgdGNzZXRh dHRyKHR0eWZkKSIsY2tpdG9hKHgpLGVycm5vKTsKLSNlbmRpZiAvKiBJTklUX1NQVFkgKi8KLSAg ICB9Ci0jZW5kaWYgLyogVVNFX1RFUk1JTyAqLwotfQotLyogdGVybWJ1ZiByb3V0aW5lcyAoZW5k KSAqLwotCi1WT0lECi1wdHlpbnRfdmhhbmd1cCgpIHsKLSNpZmRlZiBDS19WSEFOR1VQCi0jaWZk ZWYgQ0tfUE9TSVhfU0lHCi0gICAgc3RydWN0IHNpZ2FjdGlvbiBzYTsKLSAgICAvKiBJbml0aWFs aXplICJzYSIgc3RydWN0dXJlLiAqLwotICAgIHNpZ2VtcHR5c2V0KCZzYS5zYV9tYXNrKTsKLSAg ICBzYS5zYV9mbGFncyA9IDA7Ci0gICAgc2Euc2FfaGFuZGxlciA9IFNJR19JR047Ci0gICAgc2ln YWN0aW9uKFNJR0hVUCwgJnNhLCAoc3RydWN0IHNpZ2FjdGlvbiAqKTApOwotICAgIHZoYW5ndXAo KTsKLSAgICBzYS5zYV9oYW5kbGVyID0gU0lHX0RGTDsKLSAgICBzaWdhY3Rpb24oU0lHSFVQLCAm c2EsIChzdHJ1Y3Qgc2lnYWN0aW9uICopMCk7Ci0jZWxzZSAvKiBDS19QT1NJWF9TSUcgKi8KLSAg ICBzaWduYWwoU0lHSFVQLFNJR19JR04pOwotICAgIHZoYW5ndXAoKTsKLSAgICBzaWduYWwoU0lH SFVQLFNJR19ERkwpOwotI2VuZGlmIC8qIENLX1BPU0lYX1NJRyAqLwotI2VuZGlmIC8qIENLX1ZI QU5HVVAgKi8KLX0KLQotLyoKLSAgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0d2ljZS4gIEl0J3Mg bm90IHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgdGhhdCB0aGUKLSAgc2V0c2lkKCkgb3IgVElPQ1ND VFRZIGlvY3RscyBzdWNjZWVkICh0aGV5IG1heSBub3QgdGhlIHNlY29uZCB0aW1lKSwgYnV0Ci0g IHJhdGhlciB0aGF0IHdlIGhhdmUgYSBjb250cm9sbGluZyB0ZXJtaW5hbCBhdCB0aGUgZW5kLiAg SXQgaXMgYXNzdW1lZCB0aGF0Ci0gIHZoYW5ndXAgZG9lc24ndCBleGlzdCBhbmQgY29uZnVzZSB0 aGUgcHJvY2VzcydzIG5vdGlvbiBvZiBjb250cm9sbGluZwotICB0ZXJtaW5hbCBvbiBhbnkgc3lz dGVtIHdpdGhvdXQgVElPQ05PVFRZLiAgVGhhdCBpcywgZWl0aGVyIHZoYW5ndXAoKSBsZWF2ZXMK LSAgdGhlIGNvbnRyb2xsaW5nIHRlcm1pbmFsIGluIHRhY3QsIGJyZWFrcyB0aGUgYXNzb2NpYXRp b24gY29tcGxldGVseSwgb3IgdGhlCi0gIHN5c3RlbSBwcm92aWRlcyBUSU9DTk9UVFkgdG8gZ2V0 IHRoaW5ncyBiYWNrIGludG8gYSByZWFzb25hYmxlIHN0YXRlLiAgSW4KLSAgcHJhY3RpY2UsIHZo YW5ndXAoKSBlaXRoZXIgYnJlYWtzIHRoZSBhc3NvY2lhdGlvbiBjb21wbGV0ZWx5IG9yIGRvZXNu J3QKLSAgZWZmZWN0IGNvbnRyb2xsaW5nIHRlcm1pbmFscywgc28gdGhpcyBjb25kaXRpb24gaXMg bWV0LgotKi8KLWxvbmcKLXB0eWludF92b2lkX2Fzc29jaWF0aW9uKCkgewotICAgIGludCBjb25f ZmQ7Ci0jaWZkZWYgSEFWRV9TRVRTSUQKLSAgICBkZWJ1ZyhGMTEwLAotCSAgInB0eWludF92b2lk X2Fzc29jaWF0aW9uKCkiLAotCSAgInNldHNpZCgpIiwKLQkgIDAKLQkgICk7Ci0gICAgc2V0c2lk KCk7Ci0jZW5kaWYgLyogSEFWRV9TRVRTSUQgKi8KLQotI2lmbmRlZiBOT19ERVZUVFkKLSAgICAv KiBWb2lkIHR0eSBhc3NvY2lhdGlvbiBmaXJzdCAqLwotI2lmZGVmIFRJT0NOT1RUWQotICAgIGNv bl9mZCA9IG9wZW4oIi9kZXYvdHR5IiwgT19SRFdSKTsKLSAgICBkZWJ1ZyhGMTExLAotCSAgInB0 eWludF92b2lkX2Fzc29jaWF0aW9uKCkgb3BlbigvZGV2L3R0eSxPX1JEV1IpIiwKLQkgICIvZGV2 L3R0eSIsCi0JICBjb25fZmQpOwotICAgIGlmIChjb25fZmQgPj0gMCkgewotICAgICAgICBpb2N0 bChjb25fZmQsIFRJT0NOT1RUWSwgMCk7Ci0gICAgICAgIGNsb3NlKGNvbl9mZCk7Ci0gICAgfQot I2lmZGVmIERFQlVHCi0gICAgZWxzZSBkZWJ1ZyhGMTAxLCAicHR5aW50X3ZvaWRfYXNzb2NpYXRp b24oKSBvcGVuKCkgZXJybm8iLCIiLGVycm5vKTsKLSNlbmRpZiAvKiBERUJVRyAqLwotI2VuZGlm IC8qIFRJT0NOT1RUWSAqLwotI2VuZGlmIC8qIE5PX0RFVlRUWSAqLwotICAgIHJldHVybigwKTsK LX0KLQotLyogUElEIG1heSBiZSB6ZXJvIGZvciB1bmtub3duLiovCi0KLWxvbmcKLXB0eV9jbGVh bnVwKHNsYXZlLCBwaWQsIHVwZGF0ZV91dG1wKSBjaGFyICpzbGF2ZTsgaW50IHBpZDsgaW50IHVw ZGF0ZV91dG1wOyB7Ci0jaWZkZWYgVkhBTkdfTEFTVAotICAgIGludCByZXR2YWwsIGZkOwotI2Vu ZGlmIC8qIFZIQU5HX0xBU1QgKi8KLQotICAgIGRlYnVnKEYxMTEsInB0eV9jbGVhbnVwKCkiLHNs YXZlLHBpZCk7Ci0jaWZkZWYgV0FOVF9VVE1QCi0gICAgaWYgKHVwZGF0ZV91dG1wKQotICAgICAg cHR5X3VwZGF0ZV91dG1wKFBUWV9ERUFEX1BST0NFU1MsCi0JCSAgICAgIDAsCi0JCSAgICAgICIi LAotCQkgICAgICBzbGF2ZSwKLQkJICAgICAgKGNoYXIgKikwLAotCQkgICAgICBQVFlfVVRNUF9V U0VSTkFNRV9WQUxJRAotCQkgICAgICApOwotI2VuZGlmIC8qIFdBTlRfVVRNUCAqLwotCi0jaWZk ZWYgU0VUVUlECi0gICAgY2htb2Qoc2xhdmUsIDA2NjYpOwotICAgIGNob3duKHNsYXZlLCAwLCAw KTsKLSNlbmRpZiAvKiBTRVRVSUQgKi8KLQotI2lmZGVmIEhBVkVfUkVWT0tFCi0gICAgcmV2b2tl KHNsYXZlKTsKLSAgICAvKgotICAgICAgIFJldm9rZSBpc24ndCBndWFyYW50ZWVkIHRvIHNlbmQg YSBTSUdIVVAgdG8gdGhlIHByb2Nlc3NlcyBpdAotICAgICAgIGRpc3NvY2lhdGVzIGZyb20gdGhl IHRlcm1pbmFsLiAgVGhlIGJlc3Qgc29sdXRpb24gd2l0aG91dCBhIFBvc2l4Ci0gICAgICAgbWVj aGFuaXNtIGZvciBmb3JjaW5nIGEgaGFuZ3VwIGlzIHRvIGtpbGxwZygpIHRoZSBwcm9jZXNzIGdy b3VwIG9mIHRoZQotICAgICAgIHB0eS4gIFRoaXMgd2lsbCBhdCBsZWFzdCBraWxsIHRoZSBzaGVs bCBhbmQgaG9wZWZ1bGx5LCB0aGUgY2hpbGQKLSAgICAgICBwcm9jZXNzZXMuICBUaGlzIGlzIG5v dCBhbHdheXMgdGhlIGNhc2UsIGhvd2V2ZXIuICBJZiB0aGUgc2hlbGwgcHV0cwotICAgICAgIGVh Y2ggam9iIGluIGEgcHJvY2VzcyBncm91cCBhbmQgZG9lc24ndCBwYXNzIGFsb25nIFNJR0hVUCwg YWxsCi0gICAgICAgcHJvY2Vzc2VzIG1heSBub3QgZGllLgotICAgICovCi0gICAgaWYgKHBpZCA+ IDApIHsKLSNpZmRlZiBIQVZFX0tJTExQRwotCWtpbGxwZyhwaWQsIFNJR0hVUCk7Ci0jZWxzZQot CWtpbGwoLShwaWQpLCBTSUdIVVApOwotI2VuZGlmIC8qSEFWRV9LSUxMUEcqLwotICAgIH0KLSNl bHNlIC8qIEhBVkVfUkVWT0tFKi8KLSNpZmRlZiBWSEFOR19MQVNUCi0gICAgewotICAgICAgICBp bnQgc3RhdHVzOwotI2lmZGVmIENLX1BPU0lYX1NJRwotICAgICAgICBzaWdzZXRfdCBvbGQsIG5l dzsKLSAgICAgICAgc2lnZW1wdHlzZXQoJm5ldyk7Ci0gICAgICAgIHNpZ2FkZHNldCgmbmV3LCBT SUdDSExEKTsKLSAgICAgICAgc2lncHJvY21hc2soU0lHX0JMT0NLLCAmbmV3LCAmb2xkKTsKLSNl bHNlIC8qQ0tfUE9TSVhfU0lHKi8KLSAgICAgICAgaW50IG1hc2sgPSBzaWdibG9jayhzaWdtYXNr KFNJR0NITEQpKTsKLSNlbmRpZiAvKkNLX1BPU0lYX1NJRyovCi0gICAgICAgIHN3aXRjaCAocmV0 dmFsID0gZm9yaygpKSB7Ci0JICBjYXNlIC0xOgotI2lmZGVmIENLX1BPU0lYX1NJRwotICAgICAg ICAgICAgc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZvbGQsIDApOwotI2Vsc2UgLypDS19QT1NJ WF9TSUcqLwotICAgICAgICAgICAgc2lnc2V0bWFzayhtYXNrKTsKLSNlbmRpZiAvKkNLX1BPU0lY X1NJRyovCi0gICAgICAgICAgICByZXR1cm4gZXJybm87Ci0JICBjYXNlIDA6Ci0gICAgICAgICAg ICBwdHlpbnRfdm9pZF9hc3NvY2lhdGlvbigpOwotICAgICAgICAgICAgaWYgKHJldHZhbCA9IChw dHlfb3Blbl9jdHR5KHNsYXZlLCAmZmQsIC0xKSkpCi0JICAgICAgZXhpdChyZXR2YWwpOwotICAg ICAgICAgICAgcHR5aW50X3ZoYW5ndXAoKTsKLSAgICAgICAgICAgIGV4aXQoMCk7Ci0JICAgIGJy ZWFrOwotCSAgZGVmYXVsdDoKLSNpZmRlZiBIQVZFX1dBSVRQSUQKLSAgICAgICAgICAgIHdhaXRw aWQocmV0dmFsLCAmc3RhdHVzLCAwKTsKLSNlbHNlIC8qSEFWRV9XQUlUUElEKi8KLSAgICAgICAg ICAgIHdhaXQoJnN0YXR1cyk7Ci0jZW5kaWYgLyogSEFWRV9XQUlUUElEICovCi0jaWZkZWYgQ0tf UE9TSVhfU0lHCi0gICAgICAgICAgICBzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJm9sZCwgMCk7 Ci0jZWxzZSAvKkNLX1BPU0lYX1NJRyovCi0gICAgICAgICAgICBzaWdzZXRtYXNrKG1hc2spOwot I2VuZGlmIC8qQ0tfUE9TSVhfU0lHKi8KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g ICAgfQotI2VuZGlmIC8qVkhBTkdfTEFTVCovCi0jZW5kaWYgLyogSEFWRV9SRVZPS0UqLwotI2lm bmRlZiBIQVZFX1NUUkVBTVMKLSAgICBzbGF2ZVtzdHJsZW4oIi9kZXYvIildID0gJ3AnOwotI2lm ZGVmIFNFVFVJRAotICAgIGNobW9kKHNsYXZlLCAwNjY2KTsKLSAgICBjaG93bihzbGF2ZSwgMCwg MCk7Ci0jZW5kaWYgLyogU0VUVUlEICovCi0jZW5kaWYgLyogSEFWRV9TVFJFQU1TICovCi0gICAg cmV0dXJuKDApOwotfQotCi1sb25nCi1wdHlfZ2V0cHR5KGZkLCBzbGF2ZSwgc2xhdmVsZW5ndGgp IGludCBzbGF2ZWxlbmd0aDsgaW50ICpmZDsgY2hhciAqc2xhdmU7IHsKLSAgICBjaGFyICpjcDsK LSAgICBjaGFyICpwOwotICAgIGludCBpLCBwdHludW07Ci0gICAgc3RydWN0IHN0YXQgc3RiOwot I2lmbmRlZiBIQVZFX09QRU5QVFkKLSNpZm5kZWYgSEFWRV9fR0VUUFRZCi0gICAgY2hhciBzbGF2 ZWJ1ZlsxMDI0XTsKLSNlbmRpZiAvKiBIQVZFX19HRVRQVFkgKi8KLSNlbmRpZiAvKiBIQVZFX09Q RU5QVFkgKi8KLSNpZmRlZiBIQVZFX19HRVRQVFkKLSAgICBjaGFyICpzbGF2ZXJldDsJCQkvKiBU ZW1wIHRvIGhvbGQgcG9pbnRlciB0byBzbGF2ZSAqLwotI2VuZGlmIC8qSEFWRV9fR0VUUFRZKi8K LQotI2lmZGVmIEhBVkVfT1BFTlBUWQotICAgIGludCBzbGF2ZWZkOwotCi0gICAgcHR5X21hc3Rl cl9mZCA9IC0xOwotICAgIGRlYnVnKEYxMDAsIkhBVkVfT1BFTlBUWSIsIiIsMCk7Ci0gICAgaWYg KG9wZW5wdHkoZmQsCi0JCSZzbGF2ZWZkLAotCQlzbGF2ZSwKLQkJKHN0cnVjdCB0ZXJtaW9zICop MCwKLQkJKHN0cnVjdCB3aW5zaXplICopMAotCQkpCi0JKSB7Ci0JcHR5X21hc3Rlcl9mZCA9ICpm ZDsKLQlyZXR1cm4oMSk7Ci0gICAgfQotICAgIGNsb3NlKHNsYXZlZmQpOwotICAgIHJldHVybigw KTsKLQotI2Vsc2UgLyogSEFWRV9PUEVOUFRZICovCi0KLSNpZmRlZiBIQVZFX19HRVRQVFkKLS8q Ci0gIFRoaXMgY29kZSBpcyBpbmNsdWRlZCBmb3IgSXJpeDsgYXMgb2YgdmVyc2lvbiA1LjMsIEly aXggaGFzIC9kZXYvcHRteCwgYnV0Ci0gIGl0IGZhaWxzIHRvIHdvcmsgcHJvcGVybHk7IGV2ZW4g YWZ0ZXIgY2FsbGluZyB1bmxvY2twdCwgcm9vdCBnZXRzIHBlcm1pc3Npb24KLSAgZGVuaWVkIG9w ZW5pbmcgdGhlIHB0eS4gIFRoZSBjb2RlIHRvIHN1cHBvcnQgX2dldHB0eSBzaG91bGQgYmUgcmVt b3ZlZCBpZgotICBJcml4IGdldHMgd29ya2luZyBzdHJlYW1zIHB0eXMgaW4gZmF2b3Igb2YgbWFp bnRhaW5pbmcgdGhlIGxlYXN0IG5lZWRlZCBjb2RlCi0gIHBhdGhzLgotKi8KLSAgICBkZWJ1ZyhG MTAwLCJIQVZFX19HRVRQVFkiLCIiLDApOwotICAgIGlmICgoc2xhdmVyZXQgPSBfZ2V0cHR5KGZk LCBPX1JEV1IgfCBPX05ERUxBWSwgMDYwMCwgMCkpID09IDApIHsKLQkqZmQgPSAtMTsKLQlyZXR1 cm4oUFRZX0dFVFBUWV9OT1BUWSk7Ci0gICAgfQotICAgIGlmIChzdHJsZW4oc2xhdmVyZXQpID4g c2xhdmVsZW5ndGggLSAxKSB7Ci0JY2xvc2UoKmZkKTsKLQkqZmQgPSAtMTsKLQlyZXR1cm4oUFRZ X0dFVFBUWV9TTEFWRV9UT09MT05HKTsKLSAgICB9IGVsc2UgewotCWNrc3RybmNweShzbGF2ZSwg c2xhdmVyZXQsIHNsYXZlbGVuZ3RoKTsKLSAgICB9Ci0gICAgcmV0dXJuKDApOwotCi0jZWxzZSAv KiBIQVZFX19HRVRQVFkgKi8KLQotICAgICpmZCA9IG9wZW4oIi9kZXYvcHR5bS9jbG9uZSIsIE9f UkRXUnxPX05ERUxBWSk7IC8qIEhQVVggKi8KLSAgICBpZiAoKmZkID49IDApIHsKLSAgICAgICAg ZGVidWcoRjExMCwicHR5X2dldHB0eSgpIiwib3BlbigvZGV2L3B0eW0vY2xvbmUpIHN1Y2Nlc3Mi LDApOwotICAgICAgICBnb3RvIGhhdmVfZmQ7Ci0gICAgfQotCi0jaWZkZWYgSEFWRV9QVE1YCi0g ICAgZGVidWcoRjEwMCwiSEFWRV9QVE1YIiwiIiwwKTsKLSAgICAqZmQgPSBvcGVuKCIvZGV2L3B0 bXgiLE9fUkRXUnxPX05ERUxBWSk7Ci0gICAgaWYgKCpmZCA+PSAwKSB7Ci0gICAgICAgIGRlYnVn KEYxMTAsInB0eV9nZXRwdHkoKSIsIm9wZW4oL2Rldi9wdG14KSBzdWNjZXNzIiwwKTsKLSAgICAg ICAgZ290byBoYXZlX2ZkOwotICAgIH0KLSNlbmRpZiAvKiBIQVZFX1BUTVggKi8KLQotICAgICpm ZCA9IG9wZW4oIi9kZXYvcHRjIiwgT19SRFdSfE9fTkRFTEFZKTsgLyogQUlYICovCi0gICAgaWYg KCpmZCA+PSAwKSB7Ci0gICAgICAgIGRlYnVnKEYxMTAsInB0eV9nZXRwdHkoKSIsIm9wZW4oL2Rl di9wdGMpIHN1Y2Nlc3MiLDApOwotICAgICAgICBnb3RvIGhhdmVfZmQ7Ci0gICAgfQotICAgICpm ZCA9IG9wZW4oIi9kZXYvcHR5IiwgT19SRFdSfE9fTkRFTEFZKTsgLyogc3lzdmltcCAqLwotICAg IGlmICgqZmQgPj0gMCkKLSAgICAgICAgZGVidWcoRjExMCwicHR5X2dldHB0eSgpIiwib3Blbigv ZGV2L3B0eSkgc3VjY2VzcyIsMCk7Ci0KLSAgaGF2ZV9mZDoKLSAgICAvKiBUaGlzIHdvdWxkIGJl IHRoZSBwdHkgbWFzdGVyICovCi0gICAgZGVidWcoRjEwMSwicHR5X2dldHB0eSBmZChBKSIsIiIs KmZkKTsKLSAgICBpZiAoKmZkID49IDApIHsKLQlwdHlfbWFzdGVyX2ZkID0gKmZkOwotCi0jaWZk ZWYgSEFWRV9HUkFOVFBUCi0jaWZkZWYgSEFWRV9QVE1YCi0gICAgICAgIGRlYnVnKEYxMDAsIkhB VkVfR1JBTlRQVCIsIiIsMCk7Ci0JaWYgKGdyYW50cHQoKmZkKSB8fCB1bmxvY2twdCgqZmQpKQot CSAgcmV0dXJuKFBUWV9HRVRQVFlfU1RSRUFNUyk7Ci0jZW5kaWYgLyogSEFWRV9QVE1YICovCi0j ZW5kaWYgLyogSEFWRV9HUkFOVFBUICovCi0KLSNpZmRlZiBIQVZFX1BUU05BTUUKLSAgICAgICAg ZGVidWcoRjEwMCwiSEFWRV9QVFNOQU1FIiwiIiwwKTsKLQlwID0gKGNoYXIgKilwdHNuYW1lKCpm ZCk7Ci0gICAgICAgIGRlYnVnKEYxMTAsInB0eV9nZXRwdHkoKSBwdHNuYW1lKCkiLHAsMCk7Ci0j ZWxzZQotI2lmZGVmIEhBVkVfVFRZTkFNRQotICAgICAgICBkZWJ1ZyhGMTAwLCJIQVZFX1RUWU5B TUUiLCIiLDApOwotCXAgPSB0dHluYW1lKCpmZCk7Ci0gICAgICAgIGRlYnVnKEYxMTAsInB0eV9n ZXRwdHkoKSB0dHluYW1lKCkiLHAsMCk7Ci0jZWxzZQotCS8qIElmIHdlIGRvbid0IGhhdmUgZWl0 aGVyIHdoYXQgZG8gd2UgZG8/ICovCi0gIAlyZXR1cm4oUFRZX0dFVFBUWV9OT1BUWSk7CS8qIHB1 bnQgKi8KLSNlbmRpZiAvKiBIQVZFX1RUWU5BTUUgKi8KLSNlbmRpZiAvKiBIQVZFX1BUU05BTUUg Ki8KLQlpZiAocCkgewotCSAgICBpZiAoc3RybGVuKHApID4gc2xhdmVsZW5ndGggLSAxKSB7Ci0g ICAgICAgICAgICAgICAgY2xvc2UgKCpmZCk7Ci0gICAgICAgICAgICAgICAgKmZkID0gLTE7Ci0g ICAgICAgICAgICAgICAgcmV0dXJuKFBUWV9HRVRQVFlfU0xBVkVfVE9PTE9ORyk7Ci0JICAgIH0K LQkgICAgY2tzdHJuY3B5KHNsYXZlLCBwLCBzbGF2ZWxlbmd0aCk7Ci0JICAgIHJldHVybigwKTsK LQl9Ci0JaWYgKGZzdGF0KCpmZCwgJnN0YikgPCAwKSB7Ci0JICAgIGNsb3NlKCpmZCk7Ci0JICAg IHJldHVybihQVFlfR0VUUFRZX0ZTVEFUKTsKLQl9Ci0JcHR5bnVtID0gKGludCkoc3RiLnN0X3Jk ZXYmMHhGRik7Ci0Jc3ByaW50ZihzbGF2ZWJ1ZiwgIi9kZXYvdHR5cCV4IiwgcHR5bnVtKTsgLyog c2FmZSAqLwotCWlmIChzdHJsZW4oc2xhdmVidWYpID4gc2xhdmVsZW5ndGggLSAxKSB7Ci0JICAg IGNsb3NlKCpmZCk7Ci0JICAgICpmZCA9IC0xOwotCSAgICByZXR1cm4oUFRZX0dFVFBUWV9TTEFW RV9UT09MT05HKTsKLQl9Ci0gICAgICAgIGRlYnVnKEYxMTAsInB0eV9nZXRwdHkoKSBzbGF2ZWJ1 ZiIsc2xhdmVidWYsMCk7Ci0JY2tzdHJuY3B5KHNsYXZlLCBzbGF2ZWJ1Ziwgc2xhdmVsZW5ndGgp OwotCXJldHVybigwKTsKLSAgICB9IGVsc2UgewotICAgIAlmb3IgKGNwID0gInBxcnN0dXZ3eHl6 UFFSU1QiOypjcDsgY3ArKykgewotCSAgICBzcHJpbnRmKHNsYXZlYnVmLCIvZGV2L3B0eVhYIik7 IC8qIHNhZmUgKi8KLQkgICAgc2xhdmVidWZbc2l6ZW9mKCIvZGV2L3B0eSIpIC0gMV0gPSAqY3A7 Ci0JICAgIHNsYXZlYnVmW3NpemVvZigiL2Rldi9wdHlwIikgLSAxXSA9ICcwJzsKLQkgICAgaWYg KHN0YXQoc2xhdmVidWYsICZzdGIpIDwgMCkKLQkgICAgICBicmVhazsKLQkgICAgZm9yIChpID0g MDsgaSA8IDE2OyBpKyspIHsKLQkJc2xhdmVidWZbc2l6ZW9mKCIvZGV2L3B0eXAiKSAtIDFdID0g IjAxMjM0NTY3ODlhYmNkZWYiW2ldOwotCQllcnJubyA9IDA7Ci0JCSpmZCA9IG9wZW4oc2xhdmVi dWYsIE9fUkRXUnxPX05ERUxBWSk7Ci0JCWlmICgqZmQgPCAwKSB7Ci0JCSAgICBkZWJ1ZyhGMTEx LCJwdHlfZ2V0cHR5KCkgcHR5IG1hc3RlciBvcGVuIGVycm9yIiwKLQkJCSAgc2xhdmVidWYsZXJy bm8pOwotCQkgICAgY29udGludWU7Ci0JCX0KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJw dHlfZ2V0cHR5KCkgZm91bmQgcHR5IG1hc3RlciIsc2xhdmVidWYsKmZkKTsKLQkJc2xhdmVidWZb c2l6ZW9mKCIvZGV2LyIpIC0gMV0gPSAndCc7IC8qIGdvdCBwdHkgKi8KLQkJaWYgKHN0cmxlbihz bGF2ZWJ1ZikgPiBzbGF2ZWxlbmd0aCAtMSkgewotCQkgICAgY2xvc2UoKmZkKTsKLQkJICAgICpm ZCA9IC0xOwotCQkgICAgcmV0dXJuKFBUWV9HRVRQVFlfU0xBVkVfVE9PTE9ORyk7Ci0JCX0KLQkJ Y2tzdHJuY3B5KHNsYXZlLCBzbGF2ZWJ1Ziwgc2xhdmVsZW5ndGgpOwotICAgICAgICAgICAgICAg IGRlYnVnKEYxMTAsInB0eV9nZXRwdHkgc2xhdmUgbmFtZSIsc2xhdmUsMCk7Ci0JCXB0eV9tYXN0 ZXJfZmQgPSAqZmQ7Ci0JCXJldHVybigwKTsKLQkgICAgfQotCX0KLQlyZXR1cm4oUFRZX0dFVFBU WV9OT1BUWSk7Ci0gICAgfQotI2VuZGlmIC8qSEFWRV9fR0VUUFRZKi8KLSNlbmRpZiAvKiBIQVZF X09QRU5QVFkgKi8KLX0KLQotbG9uZwotcHR5X2luaXQoKSB7Ci0jaWZkZWYgSEFWRV9QVFlNCi0g ICAgc3RhdGljIGNoYXIgZHVtbXk7Ci0gICAgZGVidWcoRjEwMCwiSEFWRV9QVFlNIiwiIiwwKTsK LSAgICB0dHlfYmFuayA9ICAmbWFzdGVyX25hbWVbc3RybGVuKCIvZGV2L3B0eW0vcHR5IildOwot ICAgIHR0eV9udW0gID0gICZtYXN0ZXJfbmFtZVtzdHJsZW4oIi9kZXYvcHR5bS9wdHlYIildOwot ICAgIHNsYXZlX2JhbmsgPSAmc2xhdmVfbmFtZVtzdHJsZW4oIi9kZXYvcHR5L3R0eSIpXTsKLSAg ICBzbGF2ZV9udW0gID0gJnNsYXZlX25hbWVbc3RybGVuKCIvZGV2L3B0eS90dHlYIildOwotI2Vu ZGlmCi0gICAgcmV0dXJuKDBMKTsKLX0KLQotLyoKLSAgVGhlIGZvbGxvd2luZyBpcyBhbiBhcnJh eSBvZiBtb2R1bGVzIHRoYXQgc2hvdWxkIGJlIHB1c2hlZCBvbiB0aGUgc3RyZWFtLgotICBTZWUg Y29uZmlndXJlLmluIGZvciBjYXZpYXRzIGFuZCBub3RlcyBhYm91dCB3aGVuIHRoaXMgYXJyYXkg aXMgdXNlZCBhbmQgbm90Ci0gIHVzZWQuCi0qLwotI2lmZGVmIEhBVkVfU1RSRUFNUwotI2lmbmRl ZiBIQVZFX0xJTkVfUFVTSAotc3RhdGljIGNoYXIgKnB1c2hfbGlzdFtdID0gewotI2lmZGVmIFBV U0hfUFRFTQotICAgICJwdGVtIiwKLSNlbmRpZgotI2lmZGVmIFBVU0hfTERURVJNCi0gICAgImxk dGVybSIsCi0jZW5kaWYKLSNpZmRlZiBQVVNIX1RUQ09NUEFUCi0gICAgInR0Y29tcGF0IiwKLSNl bmRpZgotICAgIDAKLX07Ci0jZW5kaWYgLyogSEFWRV9MSU5FX1BVU0ggKi8KLSNlbmRpZiAvKiBI QVZFX1NUUkVBTVMgKi8KLQotbG9uZwotcHR5X2luaXRpYWxpemVfc2xhdmUgKGZkKSBpbnQgZmQ7 IHsKLSNpZmRlZiBQT1NJWF9URVJNSU9TCi0jaWZuZGVmIHVsdHJpeAotICAgIHN0cnVjdCB0ZXJt aW9zIG5ld190ZXJtaW87Ci0jZWxzZQotICAgIHN0cnVjdCBzZ3R0eWIgYjsKLSNlbmRpZiAvKiB1 bHRyaXggKi8KLSNlbHNlCi0gICAgc3RydWN0IHNndHR5YiBiOwotI2VuZGlmIC8qIFBPU0lYX1RF Uk1JT1MgKi8KLSAgICBpbnQgcGlkOwotI2lmZGVmIFBPU0lYX1RFUk1JT1MKLSNpZm5kZWYgdWx0 cml4Ci0gICAgaW50IHJjOwotI2VuZGlmIC8qIHVsdHJpeCAqLwotI2VuZGlmIC8qIFBPU0lYX1RF Uk1JT1MgKi8KLQotICAgIGRlYnVnKEYxMTEsInB0eV9pbml0aWFsaXplX3NsYXZlKCkiLCJmZCIs ZmQpOwotCi0jaWZkZWYgSEFWRV9TVFJFQU1TCi0jaWZkZWYgSEFWRV9MSU5FX1BVU0gKLSAgICB3 aGlsZSAoaW9jdGwoZmQsSV9QT1AsMCkgPT0gMCkgOwkvKiBDbGVhciBvdXQgYW55IG9sZCBsaW5l ZCdzICovCi0KLSAgICBpZiAobGluZV9wdXNoKGZkKSA8IDApIHsKLSAgICAgICAgZGVidWcoRjEx MCwicHR5X2luaXRpYWxpemVfc2xhdmUoKSIsImxpbmVfcHVzaCgpIGZhaWxlZCIsMCk7Ci0JY2xv c2UoZmQpOwotICAgICAgICBmZCA9IC0xOwotICAgICAgICByZXR1cm4oUFRZX09QRU5fU0xBVkVf TElORV9QVVNIRkFJTCk7Ci0gICAgfQotI2Vsc2UgLypObyBsaW5lX3B1c2ggKi8KLSAgICB7Ci0g ICAgICAgIGNoYXIgKiptb2R1bGUgPSAmcHVzaF9saXN0WzBdOwotICAgICAgICB3aGlsZSAoKm1v ZHVsZSkgewotCSAgICBpZiAoaW9jdGwoZmQsIElfUFVTSCwgKihtb2R1bGUrKykpIDwgMCkgewot ICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInB0eV9pbml0aWFsaXplX3NsYXZlKCkiLCJpb2N0 bChJX1BVU0gpIGZhaWxlZCIsMCk7Ci0JCXJldHVybihQVFlfT1BFTl9TTEFWRV9QVVNIX0ZBSUwp OwotCSAgICB9Ci0JfQotICAgIH0KLSNlbmRpZiAvKkxJTkVfUFVTSCovCi0jZW5kaWYgLypIQVZF X1NUUkVBTVMqLwotLyoKLSAgVW5kZXIgVWx0cml4IDMuMCwgdGhlIHBncnAgb2YgdGhlIHNsYXZl IHB0eSB0ZXJtaW5hbCBuZWVkcyB0byBiZSBzZXQKLSAgZXhwbGljaXRseS4gIFdoeSBybG9naW5k IHdvcmtzIGF0IGFsbCB3aXRob3V0IHRoaXMgb24gNC4zQlNEIGlzIGEgbXlzdGVyeS4KLSovCi0j aWZkZWYgR0VUUEdSUF9PTkVBUkcKLSAgICBwaWQgPSBnZXRwZ3JwKGdldHBpZCgpKTsKLSNlbHNl Ci0gICAgcGlkID0gZ2V0cGdycCgpOwotI2VuZGlmIC8qIEdFVFBHUlBfT05FQVJHICovCi0KLSAg ICBkZWJ1ZyhGMTExLCJwdHlfaW5pdGlhbGl6ZV9zbGF2ZSgpIiwicGlkIixwaWQpOwotCi0jaWZk ZWYgVElPQ1NQR1JQCi0gICAgaW9jdGwoZmQsIFRJT0NTUEdSUCwgJnBpZCk7Ci0jZW5kaWYgLyog VElPQ1NQR1JQICovCi0KLSNpZmRlZiBQT1NJWF9URVJNSU9TCi0jaWZuZGVmIHVsdHJpeAotICAg IHRjc2V0cGdycChmZCwgcGlkKTsKLSAgICBlcnJubyA9IDA7Ci0gICAgcmMgPSB0Y2dldGF0dHIo ZmQsJm5ld190ZXJtaW8pOwotICAgIGRlYnVnKEYxMTEsInB0eV9pbml0aWFsaXplX3NsYXZlIHRj Z2V0YXR0cihmZCkiLGNraXRvYShyYyksZXJybm8pOwotICAgIGlmIChyYyA9PSAwKSB7Ci0JbmV3 X3Rlcm1pby5jX2NjW1ZNSU5dID0gMTsKLQluZXdfdGVybWlvLmNfY2NbVlRJTUVdID0gMDsKLQly YyA9IHRjc2V0YXR0cihmZCxUQ1NBTk9XLCZuZXdfdGVybWlvKTsKLQlkZWJ1ZyhGMTExLCJwdHlf aW5pdGlhbGl6ZV9zbGF2ZSB0Y3NldGF0dHIoZmQpIixja2l0b2EocmMpLGVycm5vKTsKLSAgICB9 Ci0jZW5kaWYgLyogdWx0cml4ICovCi0jZW5kaWYgLyogUE9TSVhfVEVSTUlPUyAqLwotICAgIHJl dHVybigwTCk7Ci19Ci0KLSNpZmRlZiBXQU5UX1VUTVAKLWxvbmcKLXB0eV9sb2d3dG1wICh0dHks IHVzZXIsIGhvc3QpIGNoYXIgKnVzZXIsICp0dHksICpob3N0OyB7Ci0jaWZkZWYgSEFWRV9MT0dX VE1QCi0gICAgbG9nd3RtcCh0dHksdXNlcixob3N0KTsKLSAgICByZXR1cm4oMCk7Ci0jZWxzZQot ICAgIHN0cnVjdCB1dG1wIHV0OwotICAgIGNoYXIgKnRtcHg7Ci0gICAgY2hhciB1dG1wX2lkWzVd OwotICAgIGludCBsb2dnaW5naW4gPSB1c2VyWzBdOwkJLyogV2lsbCBiZSBlbXB0eSBmb3IgbG9n b3V0ICovCi0KLSNpZm5kZWYgTk9fVVRfSE9TVAotICAgIHN0cm5jcHkodXQudXRfaG9zdCwgaG9z dCwgc2l6ZW9mKHV0LnV0X2hvc3QpKTsKLSNlbmRpZiAvKiBOT19VVF9IT1NUICovCi0KLSAgICBz dHJuY3B5KHV0LnV0X2xpbmUsIHR0eSwgc2l6ZW9mKHV0LnV0X2xpbmUpKTsKLSAgICB1dC51dF90 aW1lID0gdGltZSgwKTsKLQotI2lmbmRlZiBOT19VVF9QSUQKLSAgICB1dC51dF9waWQgPSBnZXRw aWQoKTsKLSAgICBzdHJuY3B5KHV0LnV0X3VzZXIsIHVzZXIsIHNpemVvZih1dC51dF91c2VyKSk7 Ci0KLSAgICB0bXB4ID0gdHR5ICsgc3RybGVuKHR0eSkgLSAyOwotICAgIGNrbWFrbXNnKHV0bXBf aWQsNSwia3IiLHRtcHgsTlVMTCxOVUxMKTsKLSAgICBzdHJuY3B5KHV0LnV0X2lkLCB1dG1wX2lk LCBzaXplb2YodXQudXRfaWQpKTsKLSAgICB1dC51dF9waWQgPSAobG9nZ2luZ2luID8gZ2V0cGlk KCkgOiAwKTsKLSAgICB1dC51dF90eXBlID0gKGxvZ2dpbmdpbiA/IFVTRVJfUFJPQ0VTUyA6IERF QURfUFJPQ0VTUyk7Ci0jZWxzZQotICAgIHN0cm5jcHkodXQudXRfbmFtZSwgdXNlciwgc2l6ZW9m KHV0LnV0X25hbWUpKTsKLSNlbmRpZiAvKiBOT19VVF9QSUQgKi8KLQotICAgIHJldHVybihwdHlp bnRfdXBkYXRlX3d0bXAoJnV0LCBob3N0LCB1c2VyKSk7Ci0KLSNlbmRpZiAvKiBIQVZFX0xPR1dU TVAgKi8KLX0KLSNlbmRpZiAvKiBXQU5UX1VUTVAgKi8KLQotLyoKLSAgVGhpcyByb3V0aW5lIGlz IGNhbGxlZCB0d2ljZS4gIEl0J3Mgbm90IHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgdGhhdCB0aGUK LSAgc2V0c2lkKCkgb3IgVElPQ1NDVFRZIGlvY3RscyBzdWNjZWVkICh0aGV5IG1heSBub3QgdGhl IHNlY29uZCB0aW1lKSwgYnV0Ci0gIHJhdGhlciB0aGF0IHdlIGhhdmUgYSBjb250cm9sbGluZyB0 ZXJtaW5hbCBhdCB0aGUgZW5kLiAgSXQgaXMgYXNzdW1lZCB0aGF0Ci0gIHZoYW5ndXAgZG9lc24n dCBleGlzdCBhbmQgY29uZnVzZSB0aGUgcHJvY2VzcydzIG5vdGlvbiBvZiBjb250cm9sbGluZwot ICB0ZXJtaW5hbCBvbiBhbnkgc3lzdGVtIHdpdGhvdXQgVElPQ05PVFRZLiAgVGhhdCBpcywgZWl0 aGVyIHZoYW5ndXAoKSBsZWF2ZXMKLSAgdGhlIGNvbnRyb2xsaW5nIHRlcm1pbmFsIGluIHRhY3Qs IGJyZWFrcyB0aGUgYXNzb2NpYXRpb24gY29tcGxldGVseSwgb3IgdGhlCi0gIHN5c3RlbSBwcm92 aWRlcyBUSU9DTk9UVFkgdG8gZ2V0IHRoaW5ncyBiYWNrIGludG8gYSByZWFzb25hYmxlIHN0YXRl LiAgSW4KLSAgcHJhY3RpY2UsIHZoYW5ndXAoKSBlaXRoZXIgYnJlYWtzIHRoZSBhc3NvY2lhdGlv biBjb21wbGV0ZWx5IG9yIGRvZXNuJ3QKLSAgZWZmZWN0IGNvbnRyb2xsaW5nIHRlcm1pbmFscywg c28gdGhpcyBjb25kaXRpb24gaXMgbWV0LgotKi8KLWxvbmcKLXB0eV9vcGVuX2N0dHkoc2xhdmUs IGZkLCBmYykgY2hhciAqIHNsYXZlOyBpbnQgKmZkOyBpbnQgZmM7IHsKLSAgICBpbnQgcmV0dmFs OwotCi0gICAgZGVidWcoRjExMCwicHR5X29wZW5fY3R0eSgpIHNsYXZlIixzbGF2ZSwwKTsKLQot LyogRmlyc3QsIGRpc3NvY2lhdGUgZnJvbSBwcmV2aW91cyB0ZXJtaW5hbCAqLwotCi0gICAgaWYg KChyZXR2YWwgPSBwdHlpbnRfdm9pZF9hc3NvY2lhdGlvbigpKSAhPSAwKSB7Ci0gICAgICAgIGRl YnVnKEYxMTEsCi0JICAgICAgInB0eV9vcGVuX2N0dHkoKSIsCi0JICAgICAgInB0eWludF92b2lk X2Fzc29jaWF0aW9uKCkgZmFpbGVkIiwKLQkgICAgICByZXR2YWwKLQkgICAgICApOwotCXJldHVy bihyZXR2YWwpOwotICAgIH0KLSNpZmRlZiBNVVNUX1NFVFBHUlAKLS8qCi0gIFRoZSBVbHRyaXgg KGFuZCBvdGhlciBCU0QgdHR5IGRyaXZlcnMpIHJlcXVpcmUgdGhlIHByb2Nlc3MgZ3JvdXAKLSAg dG8gYmUgemVybyBpbiBvcmRlciB0byBhY3F1aXJlIHRoZSBuZXcgdHR5IGFzIGEgY29udHJvbGxp bmcgdHR5LgotKi8KLSAgICBzZXRwZ3JwKDAsMCk7Ci0gICAgZGVidWcoRjEwMSwicHR5X29wZW5f Y3R0eSBNVVNUX1NFVFBHUlAgc2V0cGdycCgwLDApIiwiIixlcnJubyk7Ci0jZW5kaWYgLyogTVVT VF9TRVRQR1JQICovCi0KLSAgICBlcnJubyA9IDA7Ci0gICAgKmZkID0gb3BlbihzbGF2ZSwgT19S RFdSKTsKLSAgICBkZWJ1ZyhGMTExLCJwdHlfb3Blbl9jdHR5IG9wZW4oc2xhdmUpIGZkIixzbGF2 ZSwqZmQpOwotICAgIGlmICgqZmQgPCAwKSB7Ci0JZGVidWcoRjExMSwicHR5X29wZW5fY3R0eSgp IG9wZW4gZmFpbHVyZSIsIHNsYXZlLCBlcnJubyk7Ci0JcmV0dXJuKFBUWV9PUEVOX1NMQVZFX09Q RU5GQUlMKTsKLSAgICB9Ci0jaWZkZWYgU09MQVJJUwotICAgIC8qIFRoaXMgZm9yY2VzIHRoZSBq b2IgdG8gaGF2ZSBhIGNvbnRyb2xsaW5nIHRlcm1pbmFsLiAqLwotICAgIGNsb3NlKCpmZCk7Ci0g ICAgKmZkID0gb3BlbihzbGF2ZSwgT19SRFdSKTsKLSAgICBkZWJ1ZyhGMTExLCJwdHlfb3Blbl9j dHR5IGNsb3NlL29wZW4oc2xhdmUpIGZkIixzbGF2ZSwqZmQpOwotI2lmZGVmIERFQlVHCi0gICAg LyogVGhpcyBzaG93cyB0aGF0IC9kZXYvdHR5IGV4aXN0cyAqLwotaWYgKGRlYmxvZykgewotCWlu dCB4OwotCXggPSBvcGVuKCIvZGV2L3R0eSIsIE9fUkRXUik7Ci0JZGVidWcoRjExMSwicHR5X29w ZW5fY3R0eSBvcGVuKC9kZXYvdHR5KSBmZCIsc2xhdmUseCk7Ci0JaWYgKHggPCAwKSBkZWJ1ZyhG MTExLCJwdHlfb3Blbl9jdHR5IG9wZW4oL2Rldi90dHkpIGVycm5vIiwiIixlcnJubyk7Ci0JZGVi dWcoRjExMCwicHR5X29wZW5fY3R0eSB0dHluYW1lKC9kZXYvdHR5KSIsdHR5bmFtZSh4KSwwKTsK LQlpZiAoeCA+IC0xKSBjbG9zZSh4KTsKLSAgICB9Ci0jZW5kaWYJLyogREVCVUcgKi8KLSNlbmRp ZiAvKiBTT0xBUklTICovCi0KLSNpZmRlZiBNVVNUX1NFVFBHUlAKLSAgICBzZXRwZ3JwKDAsIGdl dHBpZCgpKTsKLSNlbmRpZiAvKiBNVVNUX1NFVFBHUlAgKi8KLQotI2lmZGVmIFRJT0NTQ1RUWQot ICAgIGlmICgKLSNpZmRlZiBDT01NRU5UCi0JZmMgPT0gMAotI2Vsc2UKLQkxCi0jZW5kaWYJLyog Q09NTUVOVCAqLwotCSkgewotCS8qIFRJT0NTQ1RUWSA9IE1ha2UgdGhpcyB0aGUgam9iJ3MgY29u dHJvbGxpbmcgdGVybWluYWwgKi8KLQllcnJubyA9IDA7Ci0JcmV0dmFsID0gaW9jdGwoKmZkLCBU SU9DU0NUVFksIDApOyAvKiBEb24ndCBjaGVjayByZXR1cm4uKi8KLQlkZWJ1ZyhGMTExLCJwdHlf b3Blbl9jdHR5KCkgaW9jdGwgVElPQ1NDVFRZIixja2l0b2EocmV0dmFsKSxlcnJubyk7Ci0gICAg fQotI2VuZGlmIC8qIFRJT0NTQ1RUWSAqLwotICAgIHJldHVybigwTCk7Ci19Ci0KLWxvbmcKLXB0 eV9vcGVuX3NsYXZlKHNsYXZlLCBmZCwgZmMpIGNoYXIgKnNsYXZlOyBpbnQgKmZkOyBpbnQgZmM7 IHsKLSAgICBpbnQgdmZkLCB0ZXN0ZmQ7Ci0gICAgbG9uZyByZXR2YWw7Ci0jaWZkZWYgQ0tfUE9T SVhfU0lHCi0gICAgc3RydWN0IHNpZ2FjdGlvbiBzYTsKLQotICAgIHNpZ2VtcHR5c2V0KCZzYS5z YV9tYXNrKTsJCS8qIEluaXRpYWxpemUgInNhIiBzdHJ1Y3R1cmUuICovCi0gICAgc2Euc2FfZmxh Z3MgPSAwOwotI2VuZGlmIC8qIENLX1BPU0lYX1NJRyAqLwotCi0vKgotICBGaXJzdCwgY2htb2Qg YW5kIGNob3duIHRoZSBzbGF2ZS4gIElmIHdlIGhhdmUgdmhhbmd1cCB0aGVuIHdlIHJlYWxseSBu ZWVkCi0gIHB0eV9vcGVuX2N0dHkgdG8gbWFrZSBzdXJlIG91ciBjb250cm9sbGluZyB0ZXJtaW5h bCBpcyB0aGUgcHR5IHdlJ3JlCi0gIG9wZW5pbmcuICBIb3dldmVyLCBpZiB3ZSBhcmUgdXNpbmcg cmV2b2tlIG9yIG5vdGhpbmcgdGhlbiB3ZSBqdXN0IG5lZWQgYQotICBmaWxlIGRlc2NyaWlwdG9y IGZvciB0aGUgcHR5LiAgQ29uc2lkZXJpbmcgc29tZSBPU2VzIGluIHRoaXMgY2F0ZWdvcnkgYnJl YWsKLSAgb24gdGhlIHNlY29uZCBjYWxsIHRvIG9wZW5fY3R0eSAoY3VycmVudGx5IE9TRiBidXQg b3RoZXJzIG1heSksIHdlIHNpbXBseQotICB1c2UgYSBkZXNjcmlwdG9yIGlmIHdlIGNhbi4KLSov Ci0jaWZkZWYgVkhBTkdfRklSU1QKLSAgICBpZiAoKHJldHZhbCA9IHB0eV9vcGVuX2N0dHkoc2xh dmUsICZ2ZmQsIGZjKSkgIT0gMCkgewotICAgICAgICBkZWJ1ZyhGMTExLAotCSAgICAgICJwdHlf b3Blbl9zbGF2ZSgpIFZIQU5HX0ZJUlNUIiwKLQkgICAgICAicHR5X29wZW5fY3R0eSgpIGZhaWxl ZCIsCi0JICAgICAgcmV0dmFsCi0JICAgICAgKTsKLSAgICAgICAgcmV0dXJuKHJldHZhbCk7Ci0g ICAgfQotICAgIGlmICh2ZmQgPCAwKSB7Ci0gICAgICAgIGRlYnVnKEYxMTEsCi0JICAgICAgInB0 eV9vcGVuX3NsYXZlKCkgVkhBTkdfRklSU1QiLAotCSAgICAgICJQVFlfT1BFTl9TTEFWRV9PUEVO RkFJTCIsCi0JICAgICAgdmZkCi0JICAgICAgKTsKLQlyZXR1cm4oUFRZX09QRU5fU0xBVkVfT1BF TkZBSUwpOwotICAgIH0KLSNlbmRpZiAvKiBWSEFOR19GSVJTVCAqLwotCi0gICAgaWYgKHNsYXZl ID09IE5VTEwgfHwgKnNsYXZlID09ICdcMCcpIHsKLSAgICAgICAgZGVidWcoRjExMCwicHR5X29w ZW5fc2xhdmUoKSIsIlBUWV9PUEVOX1NMQVZFX1RPT1NIT1JUIiwwKTsKLSAgICAgICAgcmV0dXJu KFBUWV9PUEVOX1NMQVZFX1RPT1NIT1JUKTsKLSAgICB9Ci0KLSNpZmRlZiBTRVRVSUQKLSAgICBp ZiAoY2htb2Qoc2xhdmUsIDApKSB7Ci0gICAgICAgIGRlYnVnKEYxMTAsInB0eV9vcGVuX3NsYXZl KCkiLCJQVFlfT1BFTl9TTEFWRV9DSE1PREZBSUwiLDApOwotICAgICAgICByZXR1cm4oUFRZX09Q RU5fU0xBVkVfQ0hNT0RGQUlMKTsKLSAgICB9Ci0gICAgaWYgKGNob3duKHNsYXZlLCAwLCAwICkg PT0gLTEgKSB7Ci0gICAgICAgIGRlYnVnKEYxMTAsInB0eV9vcGVuX3NsYXZlKCkiLCJQVFlfT1BF Tl9TTEFWRV9DSE9XTkZBSUwiLDApOwotICAgICAgICByZXR1cm4oUFRZX09QRU5fU0xBVkVfQ0hP V05GQUlMKTsKLSAgICB9Ci0jZW5kaWYgLyogU0VUVUlEICovCi0jaWZkZWYgVkhBTkdfRklSU1QK LSAgICBwdHlpbnRfdmhhbmd1cCgpOwotICAgIGNsb3NlKHZmZCk7Ci0jZW5kaWYgLyogVkhBTkdf RklSU1QgKi8KLQotICAgIGlmICgocmV0dmFsID0gcHR5aW50X3ZvaWRfYXNzb2NpYXRpb24oKSkg IT0gMCkgewotICAgICAgICBkZWJ1ZyhGMTExLAotCSAgICAgICJwdHlfb3Blbl9zbGF2ZSgpIiwK LQkgICAgICAicHR5aW50X3ZvaWRfYXNzb2NpYXRpb24oKSBmYWlsZWQiLAotCSAgICAgIHJldHZh bAotCSAgICAgICk7Ci0gICAgICAgIHJldHVybihyZXR2YWwpOwotICAgIH0KLQotI2lmZGVmIEhB VkVfUkVWT0tFCi0gICAgaWYgKHJldm9rZSAoc2xhdmUpIDwgMCApIHsKLSAgICAgICAgZGVidWco RjExMCwicHR5X29wZW5fc2xhdmUoKSIsIlBUWV9PUEVOX1NMQVZFX1JFVk9LRUZBSUwiLDApOwot CXJldHVybihQVFlfT1BFTl9TTEFWRV9SRVZPS0VGQUlMKTsKLSAgICB9Ci0jZW5kaWYgLyogSEFW RV9SRVZPS0UgKi8KLQotLyogT3BlbiB0aGUgcHR5IGZvciByZWFsLiAqLwotCi0gICAgcmV0dmFs ID0gcHR5X29wZW5fY3R0eShzbGF2ZSwgZmQsIGZjKTsKLSAgICBkZWJ1ZyhGMTExLCJwdHlfb3Bl bl9zbGF2ZSByZXR2YWwiLHNsYXZlLHJldHZhbCk7Ci0gICAgZGVidWcoRjExMSwicHR5X29wZW5f c2xhdmUgZmQiLHNsYXZlLCpmZCk7Ci0gICAgaWYgKHJldHZhbCAhPSAwKSB7Ci0gICAgICAgIGRl YnVnKEYxMTEsInB0eV9vcGVuX3NsYXZlKCkiLCJwdHlfb3Blbl9jdHR5KCkgZmFpbGVkIixyZXR2 YWwpOwotCXJldHVybihQVFlfT1BFTl9TTEFWRV9PUEVORkFJTCk7Ci0gICAgfQotICAgIHB0eV9z bGF2ZV9mZCA9ICpmZDsJCSAgIC8qIFRoaXMgaXMgbm90IHZpc2libGUgdG8gdGhlIHVwcGVyIGZv cmsgKi8KLSAgICBkZWJ1ZyhGMTExLCJwdHlfb3Blbl9zbGF2ZSBmZCBjdHR5J2QiLHNsYXZlLHB0 eV9zbGF2ZV9mZCk7Ci0gICAgcmV0dmFsID0gcHR5X2luaXRpYWxpemVfc2xhdmUoKmZkKTsKLSAg ICBkZWJ1ZyhGMTExLCJwdHlfb3Blbl9zbGF2ZSBmZCBpbml0J2QiLHNsYXZlLHB0eV9zbGF2ZV9m ZCk7Ci0gICAgaWYgKHJldHZhbCkgewotICAgICAgICBkZWJ1ZyhGMTExLCJwdHlfb3Blbl9zbGF2 ZSgpIiwicHR5X2luaXRpYWxpemVfc2xhdmUoKSBmYWlsZWQiLHJldHZhbCk7Ci0gICAgICAgIHJl dHVybihyZXR2YWwpOwotICAgIH0KLSAgICAvKiAoVk9JRClwdHlfbWFrZV9yYXcoKmZkKTsgKi8K LQotICAgIGRlYnVnKEYxMDAsInB0eV9vcGVuX3NsYXZlIE9LIiwiIiwqZmQpOwotICAgIHJldHVy bigwTCk7Ci19Ci0KLSNpZmRlZiBXQU5UX1VUTVAKLQotI2lmbmRlZiBVVE1QX0ZJTEUKLSNpZmRl ZiBfUEFUSF9VVE1QCi0jZGVmaW5lIFVUTVBfRklMRSBfUEFUSF9VVE1QCi0jZW5kaWYgLyogX1BB VEhfVVRNUCAqLwotI2VuZGlmIC8qICBVVE1QX0ZJTEUgKi8KLQotLyogSWYgaXQgaXMgKnN0aWxs KiBtaXNzaW5nLCBhc3N1bWUgL2V0Yy91dG1wICovCi0KLSNpZm5kZWYgVVRNUF9GSUxFCi0jZGVm aW5lCVVUTVBfRklMRSAiL2V0Yy91dG1wIgotI2VuZGlmIC8qIFVUTVBfRklMRSAqLwotCi0jaWZu ZGVmIE5PX1VUX1BJRAotI2RlZmluZSBXVE1QX1JFUVVJUkVTX1VTRVJOQU1FCi0jZW5kaWYgLyog Tk9fVVRfUElEICovCi0KLWxvbmcKLXB0eV91cGRhdGVfdXRtcChwcm9jZXNzX3R5cGUsIHBpZCwg dXNlcm5hbWUsIGxpbmUsIGhvc3QsIGZsYWdzKQotICAgIGludCBwcm9jZXNzX3R5cGU7Ci0gICAg aW50IHBpZDsKLSAgICBjaGFyICp1c2VybmFtZSwgKmxpbmUsICpob3N0OwotICAgIGludCBmbGFn czsKLS8qIHB0eV91cGRhdGVfdXRtcCAqLyB7Ci0gICAgc3RydWN0IHV0bXAgZW50LCB1dDsKLSNp Zm5kZWYgSEFWRV9TRVRVVEVOVAotICAgIHN0cnVjdCBzdGF0IHN0YXRiOwotICAgIGludCB0dHk7 Ci0jZW5kaWYgLyogSEFWRV9TRVRVVEVOVCAqLwotI2lmZGVmIEhBVkVfU0VUVVRYRU5UCi0gICAg c3RydWN0IHV0bXB4IHV0eDsKLSNlbmRpZiAvKiBIQVZFX1NFVFVUWEVOVCAqLwotI2lmbmRlZiBO T19VVF9QSUQKLSAgICBjaGFyICp0bXB4OwotICAgIGNoYXIgdXRtcF9pZFs1XTsKLSNlbmRpZiAv KiBOT19VVF9QSUQgKi8KLSAgICBjaGFyIHVzZXJidWZbMzJdOwotICAgIGludCBmZDsKLQotICAg IGRlYnVnKEYxMDAsInB0eV91cGRhdGVfdXRtcCgpIiwiIiwwKTsKLSAgICBzdHJuY3B5KGVudC51 dF9saW5lLCBsaW5lK3NpemVvZigiL2Rldi8iKS0xLCBzaXplb2YoZW50LnV0X2xpbmUpKTsKLSAg ICBlbnQudXRfdGltZSA9IHRpbWUoMCk7Ci0KLSNpZmRlZiBOT19VVF9QSUQKLSAgICBpZiAocHJv Y2Vzc190eXBlID09IFBUWV9MT0dJTl9QUk9DRVNTKQotICAgICAgcmV0dXJuKDBMKTsKLSNlbHNl IC8qIE5PX1VUX1BJRCAqLwotCi0gICAgZW50LnV0X3BpZCA9IHBpZDsKLQotICAgIHN3aXRjaCAo cHJvY2Vzc190eXBlKSB7Ci0gICAgICBjYXNlIFBUWV9MT0dJTl9QUk9DRVNTOgotCWVudC51dF90 eXBlID0gTE9HSU5fUFJPQ0VTUzsKLQlicmVhazsKLSAgICAgIGNhc2UgUFRZX1VTRVJfUFJPQ0VT UzoKLQllbnQudXRfdHlwZSA9IFVTRVJfUFJPQ0VTUzsKLQlicmVhazsKLSAgICAgIGNhc2UgUFRZ X0RFQURfUFJPQ0VTUzoKLQllbnQudXRfdHlwZSA9IERFQURfUFJPQ0VTUzsKLQlicmVhazsKLSAg ICAgIGRlZmF1bHQ6Ci0JcmV0dXJuKFBUWV9VUERBVEVfVVRNUF9QUk9DVFlQRV9JTlZBTElEKTsK LSAgICB9Ci0jZW5kaWYgLypOT19VVF9QSUQqLwotCi0jaWZuZGVmIE5PX1VUX0hPU1QKLSAgICBp ZiAoaG9zdCkKLSAgICAgIHN0cm5jcHkoZW50LnV0X2hvc3QsIGhvc3QsIHNpemVvZihlbnQudXRf aG9zdCkpOwotICAgIGVsc2UKLSAgICAgIGVudC51dF9ob3N0WzBdID0gJ1wwJzsKLSNlbmRpZiAv KiBOT19VVF9IT1NUICovCi0KLSNpZm5kZWYgTk9fVVRfUElECi0gICAgaWYgKCFzdHJjbXAgKGxp bmUsICIvZGV2L2NvbnNvbGUiKSkgewotCWNoYXIgKiBzID0gTlVMTDsKLQotI2lmZGVmIHN1bgot I2lmZGVmIF9fU1ZSNAotCXMgPSAiY28iOwotI2Vsc2UKLQlzID0gImNvbnMiOwotI2VuZGlmIC8q IF9fU1ZSNCAqLwotI2Vsc2UKLQlzID0gImNvbnMiOwotI2VuZGlmIC8qIHN1biAqLwotCi0Jc3Ry bmNweShlbnQudXRfaWQsIHMsIDQpOwotCi0gICAgfSBlbHNlIHsKLQotCXRtcHggPSBsaW5lICsg c3RybGVuKGxpbmUpLTE7Ci0JaWYgKCoodG1weC0xKSAhPSAnLycpIHRtcHgtLTsJLyogbGFzdCAy IGNoYXJzIHVubGVzcyBpdCdzIGEgJy8nICovCi0jaWZkZWYgX19ocHV4Ci0JY2tzdHJuY3B5KHV0 bXBfaWQsIHRtcHgsIDUpOwotI2Vsc2UKLQlja21ha21zZyh1dG1wX2lkLDUsImtsIix0bXB4LE5V TEwsTlVMTCk7Ci0jZW5kaWYgLyogX19ocHV4ICovCi0Jc3RybmNweShlbnQudXRfaWQsIHV0bXBf aWQsIHNpemVvZihlbnQudXRfaWQpKTsKLSAgICB9Ci0gICAgc3RybmNweShlbnQudXRfdXNlciwg dXNlcm5hbWUsIHNpemVvZihlbnQudXRfdXNlcikpOwotCi0jZWxzZQotCi0gICAgc3RybmNweShl bnQudXRfbmFtZSwgdXNlcm5hbWUsIHNpemVvZihlbnQudXRfbmFtZSkpOwotCi0jZW5kaWYgLyog Tk9fVVRfUElEICovCi0KLSAgICBpZiAodXNlcm5hbWVbMF0pCi0gICAgICBzdHJuY3B5KHVzZXJi dWYsIHVzZXJuYW1lLCBzaXplb2YodXNlcmJ1ZikpOwotICAgIGVsc2UKLSAgICAgIHVzZXJidWZb MF0gPSAnXDAnOwotCi0jaWZkZWYgSEFWRV9TRVRVVEVOVAotCi0gICAgdXRtcG5hbWUoVVRNUF9G SUxFKTsKLSAgICBzZXR1dGVudCgpOwotLyoKLSAgSWYgd2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUg dXNlciBuYW1lIGluIHRoZSB3dG1wIHN0cnVjdHVyZSBhbmQgT3VyIGZsYWdzCi0gIHRlbGwgdXMg d2UgY2FuIG9idGFpbiBpdCBmcm9tIHRoZSB1dG1wIGFuZCB3ZSBzdWNjZWVkIGluIG9idGFpbmlu ZyBpdCwgd2UKLSAgdGhlbiBzYXZlIHRoZSB1dG1wIHN0cnVjdHVyZSB3ZSBvYnRhaW4sIHdyaXRl IG91dCB0aGUgdXRtcCBzdHJ1Y3R1cmUgYW5kCi0gIGNoYW5nZSB0aGUgdXNlcm5hbWUgcG9pbnRl ciBzbyBpdCBpcyB1c2VkIGJ5IHVwZGF0ZV93dG1wLgotKi8KLQotI2lmZGVmIFdUTVBfUkVRVUlS RVNfVVNFUk5BTUUKLSAgICBpZiAoKCF1c2VybmFtZVswXSkgJiYgKGZsYWdzJlBUWV9VVE1QX1VT RVJOQU1FX1ZBTElEKSAmJmxpbmUpIHsKLQlzdHJ1Y3QgdXRtcCAqdXRwdHI7Ci0Jc3RybmNweSh1 dC51dF9saW5lLCBsaW5lLCBzaXplb2YodXQudXRfbGluZSkpOwotCXV0cHRyID0gZ2V0dXRsaW5l KCZ1dCk7Ci0JaWYgKHV0cHRyKQotCSAgc3RybmNweSh1c2VyYnVmLHV0cHRyLT51dF91c2VyLHNp emVvZih1dC51dF91c2VyKSk7Ci0gICAgfQotI2VuZGlmIC8qIFdUTVBfUkVRVUlSRVNfVVNFUk5B TUUgKi8KLQotICAgIHB1dHV0bGluZSgmZW50KTsKLSAgICBlbmR1dGVudCgpOwotCi0jaWZkZWYg SEFWRV9TRVRVVFhFTlQKLSAgICBzZXR1dHhlbnQoKTsKLSNpZmRlZiBIQVZFX0dFVFVUTVBYCi0g ICAgZ2V0dXRtcHgoJmVudCwgJnV0eCk7Ci0jZWxzZSAvKiBIQVZFX0dFVFVUTVBYICovCi0gICAg LyogRm9yIHBsYXRmb3JtcyBsaWtlIEhQVVggYW5kIERlYyBVbml4IHdoaWNoIGRvbid0IGhhdmUg Z2V0dXRtcHggKi8KLSAgICBzdHJuY3B5KHV0eC51dF91c2VyLCBlbnQudXRfdXNlciwgc2l6ZW9m KGVudC51dF91c2VyKSk7Ci0gICAgc3RybmNweSh1dHgudXRfaWQsIGVudC51dF9pZCwgc2l6ZW9m KGVudC51dF9pZCkpOwotICAgIHN0cm5jcHkodXR4LnV0X2xpbmUsIGVudC51dF9saW5lLCBzaXpl b2YoZW50LnV0X2xpbmUpKTsKLSAgICB1dHgudXRfcGlkID0gcGlkOwkJLyoga2x1ZGdlIGZvciBJ cml4LCBldGMuIHRvIGF2b2lkIHRydW5jLiAqLwotICAgIHV0eC51dF90eXBlID0gZW50LnV0X3R5 cGU7Ci0jaWZkZWYgVVRfRVhJVF9TVFJVQ1RVUkVfRElGRkVSCi0gICAgdXR4LnV0X2V4aXQudXRf ZXhpdCA9IGVudC51dF9leGl0LmVfZXhpdDsKLSNlbHNlIC8qIFVUX0VYSVRfU1RSVUNUVVJFX0RJ RkZFUiAqLwotLyogS0xVREdFIGZvciBub3c7IGV2ZW50dWFsbHkgdGhpcyB3aWxsIGJlIGEgZmVh dHVyZSB0ZXN0Li4uIFNlZSBQUiNbNDBdICovCi0jaWZkZWYgX19ocHV4Ci0gICAgdXR4LnV0X2V4 aXQuX19lX3Rlcm1pbmF0aW9uID0gZW50LnV0X2V4aXQuZV90ZXJtaW5hdGlvbjsKLSAgICB1dHgu dXRfZXhpdC5fX2VfZXhpdCA9IGVudC51dF9leGl0LmVfZXhpdDsKLSNlbHNlIC8qIF9faHB1eCAq LwotICAgIC8qIFhYWCBkbyBub3RoaW5nIGZvciBub3c7IHdlIGRvbid0IGV2ZW4ga25vdyB0aGUg c3RydWN0IG1lbWJlciBleGlzdHMgKi8KLSNlbmRpZiAvKiBfX2hwdXggKi8KLSNlbmRpZiAvKiBV VF9FWElUX1NUUlVDVFVSRV9ESUZGRVIgKi8KLSAgICB1dHgudXRfdHYudHZfc2VjID0gZW50LnV0 X3RpbWU7Ci0gICAgdXR4LnV0X3R2LnR2X3VzZWMgPSAwOwotI2VuZGlmIC8qIEhBVkVfR0VUVVRN UFggKi8KLSAgICBpZiAoaG9zdCkKLSAgICAgIHN0cm5jcHkodXR4LnV0X2hvc3QsIGhvc3QsIHNp emVvZih1dHgudXRfaG9zdCkpOwotICAgIGVsc2UKLSAgICAgIHV0eC51dF9ob3N0WzBdID0gMDsK LSAgICBwdXR1dHhsaW5lKCZ1dHgpOwotICAgIGVuZHV0eGVudCgpOwotI2VuZGlmIC8qIEhBVkVf U0VUVVRYRU5UICovCi0KLSNlbHNlIC8qIEhBVkVfU0VUVVRFTlQgKi8KLSAgICBpZiAoZmxhZ3Mm UFRZX1RUWVNMT1RfVVNBQkxFKSB7Ci0JdHR5ID0gdHR5c2xvdCgpOwotICAgIH0gZWxzZSB7Ci0J aW50IGxjOwotCXR0eSA9IC0xOwotCWlmICgoZmQgPSBvcGVuKFVUTVBfRklMRSwgT19SRFdSKSkg PCAwKQotCSAgcmV0dXJuKGVycm5vKTsKLQlmb3IgKGxjID0gMDsKLQkgICAgIGxzZWVrKGZkLCAo b2ZmX3QpKGxjICogc2l6ZW9mKHN0cnVjdCB1dG1wKSksIFNFRUtfU0VUKSAhPSAtMTsKLQkgICAg IGxjKysKLQkgICAgICkgewotCSAgICBpZiAocmVhZChmZCwKLQkJICAgICAoY2hhciAqKSZ1dCwK LQkJICAgICBzaXplb2Yoc3RydWN0IHV0bXApCi0JCSAgICAgKSAhPSBzaXplb2Yoc3RydWN0IHV0 bXApCi0JCSkKLQkgICAgICBicmVhazsKLQkgICAgaWYgKHN0cm5jbXAodXQudXRfbGluZSwgZW50 LnV0X2xpbmUsIHNpemVvZih1dC51dF9saW5lKSkgPT0gMCkgewotCQl0dHkgPSBsYzsKLSNpZmRl ZiBXVE1QX1JFUVVJUkVTX1VTRVJOQU1FCi0JCWlmICghdXNlcm5hbWUmJihmbGFncyZQVFlfVVRN UF9VU0VSTkFNRV9WQUxJRCkpCi0JCSAgc3RybmNweSh1c2VyYnVmLCB1dC51dF91c2VyLCBzaXpl b2YodXQudXRfdXNlcikpOwotI2VuZGlmIC8qIFdUTVBfUkVRVUlSRVNfVVNFUk5BTUUgKi8KLQkJ YnJlYWs7Ci0JICAgIH0KLQl9Ci0JY2xvc2UoZmQpOwotICAgIH0KLSAgICBpZiAodHR5ID4gMCAm JiAoZmQgPSBvcGVuKFVUTVBfRklMRSwgT19XUk9OTFksIDApKSA+PSAwKSB7Ci0JbHNlZWsoZmQs IChvZmZfdCkodHR5ICogc2l6ZW9mKHN0cnVjdCB1dG1wKSksIFNFRUtfU0VUKTsKLQl3cml0ZShm ZCwgKGNoYXIgKikmZW50LCBzaXplb2Yoc3RydWN0IHV0bXApKTsKLQljbG9zZShmZCk7Ci0gICAg fQotI2VuZGlmIC8qIEhBVkVfU0VUVVRFTlQgKi8KLQotICAgIC8qIERvbid0IHJlY29yZCBMT0dJ Tl9QUk9DRVNTIGVudHJpZXMuICovCi0gICAgaWYgKHByb2Nlc3NfdHlwZSA9PSBQVFlfTE9HSU5f UFJPQ0VTUykKLSAgICAgIHJldHVybigwKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4ocHR5aW50 X3VwZGF0ZV93dG1wKCZlbnQsIGhvc3QsIHVzZXJidWYpKTsKLX0KLSNpZm5kZWYgV1RNUF9GSUxF Ci0jaWZkZWYgX1BBVEhfV1RNUAotI2RlZmluZSBXVE1QX0ZJTEUgX1BBVEhfV1RNUAotI2VuZGlm IC8qIF9QQVRIX1dUTVAgKi8KLSNlbmRpZiAvKiBXVE1QX0ZJTEUgKi8KLQotI2lmbmRlZiBXVE1Q WF9GSUxFCi0jaWZkZWYgX1BBVEhfV1RNUFgKLSNpZmRlZiBIQVZFX1VQRFdUTVBYCi0jZGVmaW5l IFdUTVBYX0ZJTEUgX1BBVEhfV1RNUFgKLSNlbmRpZiAvKiBIQVZFX1VQRFdUTVBYICovCi0jZW5k aWYgLyogX1BBVEhfV1RNUFggKi8KLSNlbmRpZiAvKiBXVE1QWF9GSUxFICovCi0KLS8qIElmIGl0 IGlzICpzdGlsbCogbWlzc2luZywgYXNzdW1lIC91c3IvYWRtL3d0bXAgKi8KLQotI2lmbmRlZiBX VE1QX0ZJTEUKLSNkZWZpbmUJV1RNUF9GSUxFICIvdXNyL2FkbS93dG1wIgotI2VuZGlmIC8qIFdU TVBfRklMRSAqLwotCi0jaWZkZWYgQ09NTUVOVAotLyogVGhlIGZvbGxvd2luZyB0ZXN0IGNhbiBu b3QgYmUgbWFkZSBwb3J0YWJseSAqLwotCi0vKiAjaWYgZGVmaW5lZChfX0dMSUJDX18pICYmIChf X0dMSUJDX18gPj0gMikgJiYgKF9fR0xJQkNfTUlOT1JfXyA+PSAxKSAqLwotLyoKLSAgVGhpcyBp cyB1Z2x5LCBidXQgdGhlIGxhY2sgb2Ygc3RhbmRhcmRpemF0aW9uIGluIHRoZSB1dG1wL3V0bXB4 IHNwYWNlLCBhbmQKLSAgd2hhdCBnbGliYyBpbXBsZW1lbnRzIGFuZCBkb2Vzbid0IG1ha2UgYXZh aWxhYmxlLCBpcyBldmVuIHdvcnNlLgotKi8KLS8qICN1bmRlZiBIQVZFX1VQRFdUTVBYICovCS8q IERvbid0IHVzZSB1cGR3dG1weCBmb3IgZ2xpYmMgMi4xICovCi0vKiAjZW5kaWYgKi8gLyogX19H TElCQ19fIGV0YyAqLwotCi0jZWxzZSAgLyogQ09NTUVOVCAqLwotCi0jaWZkZWYgX19HTElCQ19f Ci0jdW5kZWYgSEFWRV9VUERXVE1QWAkJLyogRG9uJ3QgdXNlIHVwZHd0bXB4IGZvciBnbGliYyBw ZXJpb2QgKi8KLSNlbmRpZiAvKiBfX0dMSUJDX18gKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0K LWxvbmcKLXB0eWludF91cGRhdGVfd3RtcChlbnQsaG9zdCx1c2VyKSBzdHJ1Y3QgdXRtcCAqZW50 OyBjaGFyICpob3N0OyBjaGFyICp1c2VyOyB7Ci0gICAgc3RydWN0IHV0bXAgdXQ7Ci0gICAgc3Ry dWN0IHN0YXQgc3RhdGI7Ci0gICAgaW50IGZkOwotICAgIHRpbWVfdCB1dHRpbWU7Ci0jaWZkZWYg SEFWRV9VUERXVE1QWAotICAgIHN0cnVjdCB1dG1weCB1dHg7Ci0KLSAgICBnZXR1dG1weChlbnQs ICZ1dHgpOwotICAgIGlmIChob3N0KQotICAgICAgc3RybmNweSh1dHgudXRfaG9zdCwgaG9zdCwg c2l6ZW9mKHV0eC51dF9ob3N0KSApOwotICAgIGVsc2UKLSAgICAgIHV0eC51dF9ob3N0WzBdID0g MDsKLSAgICBpZiAodXNlcikKLSAgICAgIHN0cm5jcHkodXR4LnV0X3VzZXIsIHVzZXIsIHNpemVv Zih1dHgudXRfdXNlcikpOwotICAgIHVwZHd0bXB4KFdUTVBYX0ZJTEUsICZ1dHgpOwotI2VuZGlm IC8qIEhBVkVfVVBEV1RNUFggKi8KLQotI2lmZGVmIEhBVkVfVVBEV1RNUAotI2lmbmRlZiBIQVZF X1VQRFdUTVBYCi0gICAgLyogVGhpcyBpcyBhbHJlYWR5IHBlcmZvcm1lZCBieXVwZHd0bXB4IGlm IHByZXNlbnQuKi8KLSAgICB1cGR3dG1wKFdUTVBfRklMRSwgZW50KTsKLSNlbmRpZiAvKiBIQVZF X1VQRFdUTVBYKi8KLSNlbHNlIC8qIEhBVkVfVVBEV1RNUCAqLwotCi0gICAgaWYgKChmZCA9IG9w ZW4oV1RNUF9GSUxFLCBPX1dST05MWXxPX0FQUEVORCwgMCkpID49IDApIHsKLQlpZiAoIWZzdGF0 KGZkLCAmc3RhdGIpKSB7Ci0JICAgIG1lbXNldCgoY2hhciAqKSZ1dCwgMCwgc2l6ZW9mKHV0KSk7 Ci0jaWZkZWYgX19ocHV4Ci0JICAgIHN0cm5jcHkodXQudXRfaWQsIGVudC0+dXRfaWQsIHNpemVv ZiAodXQudXRfaWQpKTsKLSNlbmRpZiAvKiBfX2hwdXggKi8KLQkgICAgc3RybmNweSh1dC51dF9s aW5lLCBlbnQtPnV0X2xpbmUsIHNpemVvZih1dC51dF9saW5lKSk7Ci0JICAgIHN0cm5jcHkodXQu dXRfbmFtZSwgZW50LT51dF9uYW1lLCBzaXplb2YodXQudXRfbmFtZSkpOwotI2lmbmRlZiBOT19V VF9IT1NUCi0JICAgIHN0cm5jcHkodXQudXRfaG9zdCwgZW50LT51dF9ob3N0LCBzaXplb2YodXQu dXRfaG9zdCkpOwotI2VuZGlmIC8qIE5PX1VUX0hPU1QgKi8KLQotCSAgICB0aW1lKCZ1dHRpbWUp OwotCSAgICB1dC51dF90aW1lID0gdXR0aW1lOwotCi0jaWZkZWYgSEFWRV9HRVRVVEVOVAotI2lm ZGVmIFVTRVJfUFJPQ0VTUwotCSAgICBpZiAoZW50LT51dF9uYW1lKSB7Ci0JCWlmICghdXQudXRf cGlkKQotCQkgIHV0LnV0X3BpZCA9IGdldHBpZCgpOwotI2lmbmRlZiBfX2hwdXgKLQkJdXQudXRf dHlwZSA9IFVTRVJfUFJPQ0VTUzsKLSNlbHNlICAvKiBfX2hwdXggKi8KLQkJdXQudXRfdHlwZSA9 IGVudC0+dXRfdHlwZTsKLSNlbmRpZiAvKiBfX2hwdXggKi8KLQotCSAgICB9IGVsc2UgewotCi0j aWZkZWYgRU1QVFkKLQkJdXQudXRfdHlwZSA9IEVNUFRZOwotI2Vsc2UKLQkJdXQudXRfdHlwZSA9 IERFQURfUFJPQ0VTUzsgLyogRm9yIExpbnV4IGJyb2tlbm5lc3MqLwotI2VuZGlmIC8qIEVNUFRZ ICovCi0KLQkgICAgfQotI2VuZGlmIC8qIFVTRVJfUFJPQ0VTUyAqLwotI2VuZGlmIC8qIEhBVkVf R0VUVVRFTlQgKi8KLQotCSAgICBpZiAod3JpdGUoZmQsIChjaGFyICopJnV0LCBzaXplb2Yoc3Ry dWN0IHV0bXApKSAhPQotCQlzaXplb2Yoc3RydWN0IHV0bXApKQotI2lmbmRlZiBDT0hFUkVOVAot CSAgICAgIGZ0cnVuY2F0ZShmZCwgc3RhdGIuc3Rfc2l6ZSk7Ci0jZWxzZQotCSAgICAgIGNoc2l6 ZShmZCwgc3RhdGIuc3Rfc2l6ZSk7Ci0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLQl9Ci0JY2xvc2Uo ZmQpOwotICAgIH0KLSNlbmRpZiAvKiBIQVZFX1VQRFdUTVAgKi8KLSAgICByZXR1cm4oMCk7IC8q IG5vIGN1cnJlbnQgZmFpbHVyZSBjYXNlczsgZmlsZSBub3QgZm91bmQgaXMgbm90IGZhaWx1cmUh ICovCi19Ci0jZW5kaWYgLyogV0FOVF9VVE1QICovCi0KLS8qIFRoaXMgaXMgZm9yIGFuY2llbnQg VW5peGVzIHRoYXQgZG9uJ3QgaGF2ZSB0aGVzZSB0dHkgc3ltYm9scyBkZWZpbmVkLiAqLwotCi0j aWZuZGVmIFBFTkRJTgotI2RlZmluZSBQRU5ESU4gSUNBTk9OCi0jZW5kaWYgLyogUEVORElOICov Ci0jaWZuZGVmIEZMVVNITwotI2RlZmluZSBGTFVTSE8gSUNBTk9OCi0jZW5kaWYgLyogRkxVU0hP ICovCi0jaWZuZGVmIElNQVhCRUwKLSNkZWZpbmUgSU1BWEJFTCBJQ0FOT04KLSNlbmRpZiAvKiBJ TUFYQkVMICovCi0jaWZuZGVmIEVYVFBST0MKLSNkZWZpbmUgRVhUUFJPQyBJQ0FOT04KLSNlbmRp ZiAvKiBFWFRQUk9DICovCi0KLXN0YXRpYyBjaGFyIFhsaW5lWzE3XSA9IHsgMCwgMCB9OwotLyoK LSAgZ2V0cHR5c2xhdmUoKQotICBPcGVuIHRoZSBzbGF2ZSBzaWRlIG9mIHRoZSBwdHksIGFuZCBk byBhbnkgaW5pdGlhbGl6YXRpb24gdGhhdCBpcyBuZWNlc3NhcnkuCi0gIFRoZSByZXR1cm4gdmFs dWUgZmQgaXMgYSBmaWxlIGRlc2NyaXB0b3IgZm9yIHRoZSBzbGF2ZSBzaWRlLgotICBmYyA9IGZ1 bmN0aW9uIGNvZGUgZnJvbSBkb19wdHkoKSAocS52LikKLSovCi1pbnQKLWdldHB0eXNsYXZlKGZk LCBmYykgaW50ICogZmQsIGZjOyB7Ci0gICAgaW50IHR0eWZkOwotICAgIGludCB0ID0gLTE7Ci0g ICAgbG9uZyByZXR2YWw7Ci0jaWZkZWYgVElPQ0dXSU5TWgotICAgIHN0cnVjdCB3aW5zaXplIHdz OwotICAgIGV4dGVybiBpbnQgY21kX3Jvd3MsIGNtZF9jb2xzOwotI2VuZGlmIC8qIFRJT0NHV0lO U1ogKi8KLQotICAgIHR0eWZkID0gKmZkOwotICAgIGRlYnVnKEYxMTEsImdldHB0eXNsYXZlKCki LCJ0dHlmZCIsdHR5ZmQpOwotICAgIC8qCi0gICAgICogT3BlbmluZyB0aGUgc2xhdmUgc2lkZSBt YXkgY2F1c2UgaW5pdGlsaXphdGlvbiBvZiB0aGUKLSAgICAgKiBrZXJuZWwgdHR5IHN0cnVjdHVy ZS4gIFdlIG5lZWQgcmVtZW1iZXIgdGhlIHN0YXRlIG9mOgotICAgICAqICAgICAgaWYgbGluZW1v ZGUgd2FzIHR1cm5lZCBvbgotICAgICAqICAgICAgdGVybWluYWwgd2luZG93IHNpemUKLSAgICAg KiAgICAgIHRlcm1pbmFsIHNwZWVkCi0gICAgICogc28gdGhhdCB3ZSBjYW4gcmVzZXQgdGhlbSBp ZiB3ZSBuZWVkIHRvLgotICAgICAqLwotICAgIGlmICgocmV0dmFsID0gcHR5X29wZW5fc2xhdmUo WGxpbmUsICZ0LCBmYykpICE9IDApIHsKLQlwZXJyb3IoWGxpbmUpOwotCW1zZysrOwotICAgICAg ICBkZWJ1ZyhGMTExLCJnZXRwdHlzbGF2ZSgpIiwiVW5hYmxlIHRvIG9wZW4gc2xhdmUiLHJldHZh bCk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsImdldHB0eXNs YXZlIiwidCIsdCk7Ci0jaWZkZWYgSU5JVF9TUFRZCi0gICAgc3B0eSA9IHQ7Ci0gICAgZGVidWco RjExMSwiZ2V0cHR5c2xhdmUiLCJzcHR5IixzcHR5KTsKLSNlbmRpZiAvKiBJTklUX1NQVFkgKi8K LSNpZmRlZiBTVFJFQU1TUFRZCi0gICAgaWYgKGlvY3RsKHQsSV9QVVNILCJwY2t0IikgPCAwKSB7 Ci0gICAgICAgIGRlYnVnKEYxMTEsImdldHB0eXNsYXZlKCkiLCJpb2N0bChJX1BVU0gpIGZhaWxl ZCIsZXJybm8pOwotI2lmbmRlZiBfQUlYCi0gICAgICAgIGZhdGFsKCJJX1BVU0ggcGNrdCIpOwot I2VuZGlmIC8qIF9BSVggKi8KLSAgICB9Ci0jZW5kaWYgLyogU1RSRUFNU1BUWSAqLwotCi0gICAg LyogU2V0IHVwIHRoZSB0dHkgbW9kZXMgYXMgd2UgbGlrZSB0aGVtIHRvIGJlLiAqLwotI2lmZGVm IENPTU1FTlQKLSAgICAvKiBPcmlnaW5hbGx5IGxpa2UgdGhpcy4uLiBCdXQgdGhpcyBpcyB0aGUg bWFzdGVyIC0gd2Ugd2FudCB0aGUgc2xhdmUgKi8KLSAgICAvKiBBbnl3YXksIHRoaXMgZmFpbHMg b24gU29sYXJpcyBhbmQgcHJvYmFibHkgb3RoZXIgU3lzdGVtIFYgT1MncyAqLwotICAgIGluaXRf dGVybWJ1Zih0dHlmZCk7Ci0jZWxzZQotICAgIGluaXRfdGVybWJ1Zih0KTsKLSNlbmRpZgkvKiBD T01NRU5UICovCi0jaWZkZWYgVElPQ0dXSU5TWgotICAgIGlmIChjbWRfcm93cyB8fCBjbWRfY29s cykgewotICAgICAgICBtZW1zZXQoKGNoYXIgKikmd3MsIDAsIHNpemVvZih3cykpOwotICAgICAg ICB3cy53c19jb2wgPSBjbWRfY29sczsKLSAgICAgICAgd3Mud3Nfcm93ID0gY21kX3Jvd3M7Ci0J ZGVidWcoRjEwMSwiZ2V0cHR5c2xhdmUoKSBkb2luZyBUSU9DU1dJTlNaLi4uIiwiIix0KTsKLSAg ICAgICAgaW9jdGwodCwgVElPQ1NXSU5TWiwgKGNoYXIgKikmd3MpOwotICAgIH0KLSNlbmRpZiAv KiBUSU9DR1dJTlNaICovCi0KLSAgICAvKiBGb3IgZXh0ZXJuYWwgcHJvdG9jb2xzLCBwdXQgdGhl IHB0eSBpbiBuby1lY2hvIG1vZGUgKi8KLSAgICBpZiAoZmMgPT0gMSkgewotCWRlYnVnKEYxMDAs ImdldHB0eXNsYXZlKCkgc2V0dGluZyByYXdtb2RlIiwiIiwwKTsKLQkvKiBpZmxhZ3MgKi8KLQl0 ZXJtYnVmLmNfaWZsYWcgJj0gfihQQVJNUkt8SVNUUklQfEJSS0lOVHxJTkxDUnxJR05DUnxJQ1JO TCk7Ci0JdGVybWJ1Zi5jX2lmbGFnICY9IH4oSU5QQ0t8SUdOUEFSfElNQVhCRUx8SVhBTll8SVhP TnxJWE9GRik7Ci0JdGVybWJ1Zi5jX2lmbGFnIHw9IElHTkJSSzsKLSNpZmRlZiBJVUNMQwotCXRl cm1idWYuY19pZmxhZyAmPSB+SVVDTEM7Ci0jZW5kaWYgLyogSVVDTEMgKi8KLQotCS8qIG9mbGFn cyAqLwotCXRlcm1idWYuY19vZmxhZyAmPSB+T1BPU1Q7Ci0jaWZkZWYgT1hUQUJTCi0JdGVybWJ1 Zi5jX29mbGFnICY9IH5PWFRBQlM7Ci0jZW5kaWYgLyogT1hUQUJTICovCi0jaWZkZWYgT05PQ1IK LQl0ZXJtYnVmLmNfb2ZsYWcgJj0gfk9OT0NSOwotI2VuZGlmIC8qIE9OT0NSICovCi0jaWZkZWYg T05MUkVUCi0JdGVybWJ1Zi5jX29mbGFnICY9IH5PTkxSRVQ7Ci0jZW5kaWYgLyogT05MUkVUICov Ci0jaWZkZWYgT05MQ1IKLQl0ZXJtYnVmLmNfb2ZsYWcgJj0gfk9OTENSOwotI2VuZGlmIC8qIE9O TENSICovCi0KLQkvKiBsZmxhZ3MgKi8KLQl0ZXJtYnVmLmNfbGZsYWcgJj0gfkVDSE87Ci0jaWZk ZWYgRUNIT0UKLQl0ZXJtYnVmLmNfbGZsYWcgJj0gfkVDSE9FOwotI2VuZGlmIC8qIEVDSE9FICov Ci0jaWZkZWYgRUNIT05MCi0JdGVybWJ1Zi5jX2xmbGFnICY9IH5FQ0hPTkw7Ci0jZW5kaWYgLyog RUNIT05MICovCi0jaWZkZWYgRUNIT1BSVAotCXRlcm1idWYuY19sZmxhZyAmPSB+RUNIT1BSVDsK LSNlbmRpZiAvKiBFQ0hPUFJUICovCi0jaWZkZWYgRUNIT0tFCi0JdGVybWJ1Zi5jX2xmbGFnICY9 IH5FQ0hPS0U7Ci0jZW5kaWYgLyogRUNIT0tFICovCi0jaWZkZWYgRUNIT0NUTAotCXRlcm1idWYu Y19sZmxhZyAmPSB+RUNIT0NUTDsKLSNlbmRpZiAvKiBFQ0hPQ1RMICovCi0jaWZkZWYgQUxUV0VS QVNFCi0JdGVybWJ1Zi5jX2xmbGFnICY9IH5BTFRXRVJBU0U7Ci0jZW5kaWYgLyogQUxUV0VSQVNF ICovCi0jaWZkZWYgRVhUUFJPQwotCXRlcm1idWYuY19sZmxhZyAmPSB+RVhUUFJPQzsKLSNlbmRp ZiAvKiBFWFRQUk9DICovCi0JdGVybWJ1Zi5jX2xmbGFnICY9IH4oSUNBTk9OfElTSUd8SUVYVEVO fFRPU1RPUHxGTFVTSE98UEVORElOKTsKLQotI2lmZGVmIE5PS0VSTklORk8KLQl0ZXJtYnVmLmNf bGZsYWcgfD0gTk9LRVJOSU5GTzsKLSNlbmRpZgkvKiBOT0tFUk5JTkZPICovCi0JLyogdGVybWJ1 Zi5jX2xmbGFnIHw9IE5PRkxTSDsgKi8KLQl0ZXJtYnVmLmNfbGZsYWcgJj0gfk5PRkxTSDsKLQot CS8qIGNmbGFncyAqLwotCXRlcm1idWYuY19jZmxhZyAmPSB+KENTSVpFfFBBUkVOQnxQQVJPREQp OwotCXRlcm1idWYuY19jZmxhZyB8PSBDUzh8Q1JFQUQ7Ci0jaWZkZWYgVk1JTgotCXRlcm1idWYu Y19jY1tWTUlOXSA9IDE7Ci0jZW5kaWYJLyogVk1JTiAqLwotICAgIH0gZWxzZSB7CQkJCS8qIFJl Z3VsYXIgaW50ZXJhY3RpdmUgdXNlICovCi0JZGVidWcoRjEwMCwiZ2V0cHR5c2xhdmUoKSBzZXR0 aW5nIGNvb2tlZCBtb2RlIiwiIiwwKTsKLQotCS8qIFNldHRpbmdzIGZvciBzZ3R0eSBiYXNlZCBz eXN0ZW1zICovCi0KLSNpZm5kZWYgVVNFX1RFUk1JTwotCXRlcm1idWYuc2cuc2dfZmxhZ3MgfD0g Q1JNT0R8QU5ZUHxFQ0hPfFhUQUJTOwotI2VuZGlmIC8qIFVTRV9URVJNSU8gKi8KLQotI2lmbmRl ZiBPWFRBQlMKLSNkZWZpbmUgT1hUQUJTIDAKLSNlbmRpZiAvKiBPWFRBQlMgKi8KLQotCS8qIFNl dHRpbmdzIGZvciBVTklDT1MgYW5kIEhQVVggKi8KLQotI2lmZGVmIENSQVkKLQl0ZXJtYnVmLmNf b2ZsYWcgPSBPUE9TVHxPTkxDUnxUQUIzOwotCXRlcm1idWYuY19pZmxhZyA9IElHTlBBUnxJU1RS SVB8SUNSTkx8SVhPTjsKLQl0ZXJtYnVmLmNfbGZsYWcgPSBJU0lHfElDQU5PTnxFQ0hPfEVDSE9F fEVDSE9LOwotCXRlcm1idWYuY19jZmxhZyA9IEVYVEJ8SFVQQ0x8Q1M4OwotI2Vsc2UgLyogQ1JB WSAqLwotI2lmZGVmIEhQVVgKLQl0ZXJtYnVmLmNfb2ZsYWcgPSBPUE9TVHxPTkxDUnxUQUIzOwot CXRlcm1idWYuY19pZmxhZyA9IElHTlBBUnxJU1RSSVB8SUNSTkx8SVhPTjsKLQl0ZXJtYnVmLmNf bGZsYWcgPSBJU0lHfElDQU5PTnxFQ0hPfEVDSE9FfEVDSE9LOwotCXRlcm1idWYuY19jZmxhZyA9 IEVYVEJ8SFVQQ0x8Q1M4OwotI2Vsc2UgLyogSFBVWCAqLwotI2lmZGVmIFVTRV9URVJNSU8KLQkv KgotCSAgU2V0dGluZ3MgZm9yIGFsbCBvdGhlciB0ZXJtaW9zL3Rlcm1pbyBiYXNlZCBzeXN0ZW1z LCBvdGhlciB0aGFuIAotCSAgNC40QlNELiAgSW4gNC40QlNEIHRoZSBrZXJuZWwgZG9lcyB0aGUg aW5pdGlhbCB0ZXJtaW5hbCBzZXR1cC4KLQkqLwotI2lmZGVmIEJTRDQyCi0jaWZuZGVmIEJTRDQ0 Ci0JdGVybWJ1Zi5jX2xmbGFnIHw9IEVDSE98SUNBTk9OfElFWFRFTnxJU0lHOwotCXRlcm1idWYu Y19vZmxhZyB8PSBPTkxDUnxPWFRBQlN8T1BPU1Q7Ci0JdGVybWJ1Zi5jX2lmbGFnIHw9IElDUk5M fElHTlBBUjsKLQl0ZXJtYnVmLmNfY2ZsYWcgfD0gSFVQQ0w7Ci0JdGVybWJ1Zi5jX2lmbGFnICY9 IH5JWE9GRjsKLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2Vsc2UgLyogQlNENDIgKi8KLQl0ZXJtYnVm LmNfbGZsYWcgfD0gRUNIT3xJQ0FOT058SUVYVEVOfElTSUc7Ci0JdGVybWJ1Zi5jX29mbGFnIHw9 IE9OTENSfE9YVEFCU3xPUE9TVDsKLQl0ZXJtYnVmLmNfaWZsYWcgfD0gSUNSTkx8SUdOUEFSOwot CXRlcm1idWYuY19jZmxhZyB8PSBIVVBDTDsKLQl0ZXJtYnVmLmNfaWZsYWcgJj0gfklYT0ZGOwot I2VuZGlmIC8qIEJTRDQyICovCi0jZW5kaWYgLyogVVNFX1RFUk1JTyAqLwotI2VuZGlmIC8qIEhQ VVggKi8KLSNlbmRpZiAvKiBDUkFZICovCi0gICAgfQotCi0gICAgLyogU2V0IHRoZSB0dHkgbW9k ZXMsIGFuZCBtYWtlIHRoaXMgb3VyIGNvbnRyb2xsaW5nIHR0eS4gKi8KLSNpZmRlZiBDT01NRU5U Ci0gICAgLyogQnV0IHRoaXMgaXMgdGhlIG1hc3RlciAtIHdlIHdhbnQgdGhlIHNsYXZlICovCi0g ICAgc2V0X3Rlcm1idWYodHR5ZmQpOwotI2Vsc2UKLSAgICBzZXRfdGVybWJ1Zih0KTsKLSNlbmRp ZgkvKiBDT01NRU5UICovCi0KLSAgICBpZiAodCAhPSAwKQotICAgICAgZHVwMih0LCAwKTsKLSAg ICBpZiAodCAhPSAxKQotICAgICAgZHVwMih0LCAxKTsKLSAgICBpZiAodCAhPSAyKSB7Ci0JaWYg KGZjID09IDApIHsKLQkgICAgZHVwMih0LCAyKTsKLQl9IGVsc2UgaWYgKGZjID09IDEpIHsKLQkg ICAgLyogRm9yIGV4dGVybmFsIHByb3RvY29scywgc2VuZCBzdGRlcnIgdG8gL2Rldi9udWxsICov Ci0jaWZkZWYgQ09NTUVOVAotCSAgICBpbnQgeHg7Ci0jaWZuZGVmIENPTU1FTlQKLQkgICAgY2hh ciAqIHMgPSAiL2Rldi9udWxsIjsKLQkgICAgZXJybm8gPSAwOwotCSAgICB4eCA9IG9wZW4ocywg T19XUk9OTFkpOwotI2Vsc2UKLQkgICAgY2hhciAqIHMgPSAicHR5LmxvZyI7Ci0JICAgIGVycm5v ID0gMDsKLQkgICAgeHggPSBvcGVuKHMsIE9fQ1JFQVQsIDA2NDQpOwotI2VuZGlmIC8qIENPTU1F TlQgKi8KLQkgICAgZGVidWcoRjExMSwiZ2V0cHR5c2xhdmUgcmVkaXJlY3Qgc3RkZXJyIixzLGVy cm5vKTsKLQkgICAgZHVwMih4eCwyKTsKLSNlbmRpZgkvKiBDT01NRU5UICovCi0JfQotICAgIH0K LSAgICBpZiAodCA+IDIpCi0gICAgICBjbG9zZSh0KTsKLQotICAgIGlmICh0dHlmZCA+IDIpIHsK LQljbG9zZSh0dHlmZCk7Ci0gICAgICAgIHR0eWZkID0gLTE7Ci0JKmZkID0gdHR5ZmQ7Ci0gICAg fQotICAgIHJldHVybigwKTsKLX0KLQotI2lmZGVmIEhBVkVfUFRZVFJBUAotLyoKLSAgVG8gYmUg Y2FsbGVkIHRvIGRldGVybWluZSBpZiBhIHRyYXAgaXMgcGVuZGluZyBvbiBhIHB0eQotICBpZiBh bmQgb25seSBpZiBzZWxlY3QoKSBjYW5ub3QgYmUgdXNlZC4KLSovCi1pbnQKLXB0eV90cmFwX3Bl bmRpbmcoZmQpIGludCBmZDsgewotICAgIGludCBwZW5kaW5nOwotICAgIGludCByYzsKLQotICAg IHJjID0gaW9jdGwoZmQsIFRJT0NUUkFQU1RBVFVTLCAoY2hhciAqKSZwZW5kaW5nLCBzaXplb2Yo cGVuZGluZykpOwotICAgIGlmIChyYyA9PSAwKSB7Ci0gICAgICAgIGRlYnVnKEYxMDEsInB0eV90 cmFwX3BlbmRpbmcoKSIsIiIscGVuZGluZyk7Ci0gICAgICAgIHJldHVybihwZW5kaW5nKTsKLSAg ICB9IGVsc2UgewotICAgICAgICBkZWJ1ZyhGMTExLCJwdHlfdHJhcF9wZW5kaW5nKCkiLCJpb2N0 bCgpIGZhaWxlZCIscmMpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLX0KLQotLyoKLSAg VG8gYmUgY2FsbGVkIGFmdGVyIHNlbGVjdCgpIGhhcyByZXR1cm5lZCBpbmRpY2F0aW5nIHRoYXQg YW4gZXhjZXB0aW9uIGlzCi0gIHdhaXRpbmcgb24gYSBwdHkuICBJdCBzaG91bGQgYmUgY2FsbGVk IHdpdGggdGhlIGZpbGUgZGVzY3JpcHRvciBvZiB0aGUgcHR5LgotICBSZXR1cm5zIC0xIG9uIGVy cm9yOyAwIGlmIHB0eSBpcyBzdGlsbCBvcGVuOyAxIGlmIHB0eSBoYXMgY2xvc2VkLgotKi8KLWlu dAotcHR5X3RyYXBfaGFuZGxlcihmZCkgaW50IGZkOyB7Ci0gICAgc3RydWN0IHJlcXVlc3RfaW5m byByaTsKLQotICAgIG1lbXNldCgmcmksMCxzaXplb2YocmkpKTsKLSAgICBpZiAoaW9jdGwoZmQs VElPQ1JFUUNIRUNLLChjaGFyICopJnJpLCBzaXplb2YocmkpKSAhPSAwKSB7Ci0gICAgICAgIGRl YnVnKEYxMTEsInB0eV90cmFwX2hhbmRsZXIoKSIsImlvY3RsKFRJT0NSRVFDSEVDSykgZmFpbGVk IixlcnJubyk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIHN3aXRjaCAocmkucmVx dWVzdCkgewotICAgICAgY2FzZSBUSU9DT1BFTjoKLSAgICAgICAgZGVidWcoRjExMCwicHR5X3Ry YXBfaGFuZGxlcigpIiwiYW4gb3BlbigpIGNhbGwiLDApOwotICAgICAgICBicmVhazsKLSAgICAg IGNhc2UgVElPQ0NMT1NFOgotICAgICAgICBkZWJ1ZyhGMTEwLCJwdHlfdHJhcF9oYW5kbGVyKCki LCJhIGNsb3NlKCkgY2FsbCIsMCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAg ICAgICAgZGVidWcoRjExMCwicHR5X3RyYXBfaGFuZGxlcigpIiwiYW4gaW9jdGwoKSBjYWxsIiww KTsKLSAgICAgICAgcmkuZXJybm9fZXJyb3IgPSBFSU5WQUw7Ci0gICAgfQotICAgIGlmIChpb2N0 bChmZCwgVElPQ1JFUVNFVCwgKGNoYXIgKikmcmksc2l6ZW9mKHJpKSkgIT0gMCkgewotICAgICAg ICBkZWJ1ZyhGMTExLCJwdHlfdHJhcF9oYW5kbGVyKCkiLCJpb2N0bChUSU9DUkVRU0VUKSBmYWls ZWQiLGVycm5vKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgaWYgKHJpLnJlcXVl c3QgPT0gVElPQ0NMT1NFKQotICAgICAgcmV0dXJuKDEpOwotICAgIGVsc2UKLSAgICAgIHJldHVy bigwKTsKLX0KLSNlbmRpZiAvKiBIQVZFX1BUWVRSQVAgKi8KLQotVk9JRAotZXhlY19jbWQocykg Y2hhciAqIHM7IHsKLSAgICBzdHJ1Y3Qgc3RyaW5nYXJyYXkgKiBxOwotICAgIGNoYXIgKiogYXJn cyA9IE5VTEw7Ci0KLSAgICBpZiAoIXMpIHJldHVybjsKLSAgICBpZiAoISpzKSByZXR1cm47Ci0K LSAgICBxID0gY2tzcGxpdCgxLDAscyxOVUxMLCJcXCVbXSYkKy0vPSpeX0Ahe30vPD58LiN+J2A6 Oz8iLDcsMCwwKTsKLSAgICBpZiAoIXEpIHJldHVybjsKLQotICAgIGFyZ3MgPSBxLT5hX2hlYWQg KyAxOwotCi0jaWZkZWYgREVCVUcgICAgCi0gICAgewotCWludCBpLCBuOwotCW4gPSBxLT5hX3Np emU7Ci0JZm9yIChpID0gMDsgaSA8PSBuOyBpKyspIHsKLQkgICAgaWYgKCFhcmdzW2ldKSB7Ci0J CWRlYnVnKEYxMTEsImV4ZWNfY21kIGFyZyIsIk5VTEwiLGkpOwotCQlicmVhazsKLQkgICAgfSBl bHNlIHsKLQkJZGVidWcoRjExMSwiZXhlY19jbWQgYXJnIixhcmdzW2ldLGkpOwotCQlpZiAoaSA9 PSBuICYmIGFyZ3NbaV0pIHsKLQkJICAgIGRlYnVnKEYxMDEsImV4ZWNfY21kIFNVQlNUSVRVVElO RyBOVUxMIiwiIixpKTsKLQkJICAgIGlmIChzdHJsZW4oYXJnc1tpXSkgPT0gMCkKLQkJICAgICAg bWFrZXN0cigmKGFyZ3NbaV0pLE5VTEwpOwotCQl9Ci0KLQkgICAgfQotCX0JICAgIAotICAgIH0K LSNlbmRpZgkvKiBERUJVRyAqLwotCi0gICAgZXhlY3ZwKGFyZ3NbMF0sYXJncyk7Ci19Ci0KLS8q IEdldCBhIHB0eSwgc2NhbiBpbnB1dCBsaW5lcy4gKi8KLS8qIGZjID0gMCBmb3IgaW50ZXJhY3Rp dmUgYWNjZXNzOyBmYyA9IDEgZm9yIHJ1bm5pbmcgZXh0ZXJuYWwgcHJvdG9jb2xzICovCi0KLXN0 YXRpYyBpbnQgcHR5X2ZjID0gLTE7CQkJLyogR2xvYmFsIGNvcHkgb2YgZmMgKi8KLQotaW50Ci1k b19wdHkoZmQsIGNtZCwgZmMpIGludCAqIGZkOyBjaGFyICogY21kOyBpbnQgZmM7IHsKLSAgICBs b25nIHJldHZhbDsKLSAgICBpbnQgc3luY3BpcGVbMl07Ci0gICAgaW50IGksIHR0eWZkOwotI2lm ZGVmIEhBVkVfUFRZVFJBUAotICAgIGludCB4OwotI2VuZGlmIC8qIEhBVkVfUFRZVFJBUCAqLwot Ci0gICAgZGVidWcoRjEwMSwiQ0tVUFRZLkMgZG9fcHR5IGZjIiwiIixmYyk7Ci0KLSAgICB0dHlm ZCA9ICpmZDsKLQotICAgIHB0eV9tYXN0ZXJfZmQgPSAtMjsKLSAgICBwdHlfc2xhdmVfZmQgPSAt MjsKLSAgICBwdHlfZm9ya19waWQgPSAtMjsKLQotICAgIG1zZyA9IDA7CQkJCS8qIE1lc3NhZ2Ug Y291bnRlciAqLwotICAgIHB0eV9pbml0KCk7CQkJCS8qIEZpbmQgYW4gYXZhaWxhYmxlIHB0eSB0 byB1c2UuICovCi0gICAgZXJybm8gPSAwOwotCi0gICAgaWYgKChyZXR2YWwgPSBwdHlfZ2V0cHR5 KCZ0dHlmZCwgWGxpbmUsIDIwKSkgIT0gMCkgewotCWlmIChtc2crKyA9PSAwKQotCSAgcGVycm9y KFhsaW5lKTsKLSAgICAgICAgZGVidWcoRjExMSwiZG9fcHR5KCkiLCJwdHlfZ2V0cHR5KCkgZmFp bHMiLHJldHZhbCk7Ci0JKmZkID0gdHR5ZmQ7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQot ICAgICpmZCA9IHR0eWZkOwotICAgIGRlYnVnKEYxMTEsImRvX3B0eSgpIFhsaW5lIixYbGluZSx0 dHlmZCk7Ci0KLSNpZmRlZiBTSUdUVE9VCi0vKgotICBJZ25vcmluZyBTSUdUVE9VIGtlZXBzIHRo ZSBrZXJuZWwgZnJvbSBibG9ja2luZyB1cy4gIHdlIHR3ZWFrIHRoZSB0dHkgd2l0aAotICBhbiBp b2N0bCgpIChpbiB0dGlvY3QoKSBpbiAvc3lzL3R0eS5jIGluIGEgQlNEIGtlcm5lbCkKLSovCi0g ICAgIHNpZ25hbChTSUdUVE9VLCBTSUdfSUdOKTsKLSNlbmRpZiAvKiBTSUdUVE9VICovCi0KLS8q IFN0YXJ0IHVwIHRoZSBjb21tYW5kIG9uIHRoZSBzbGF2ZSBzaWRlIG9mIHRoZSB0ZXJtaW5hbCAq LwotCi0gICAgaWYgKHBpcGUoc3luY3BpcGUpIDwgMCkgewotICAgICAgICBkZWJ1ZyhGMTEwLCJk b19wdHkoKSIsInBpcGUoKSBmYWlscyIsMCk7Ci0JcGVycm9yKCJwaXBlKCkgZmFpbGVkIik7Ci0J bXNnKys7Ci0gICAgICAgIGRlYnVnKEYxMTEsImRvX3B0eSgpIiwicGlwZSBmYWlscyIsZXJybm8p OwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBpZiAoKGkgPSBmb3JrKCkpIDwgMCkg ewotICAgICAgICAvKiBYWFggLSBuZWVkIHRvIGNsZWFuIHVwIHRoZSBhbGxvY2F0ZWQgcHR5ICov Ci0gICAgICAgIHBlcnJvcigiZm9yaygpIGZhaWxlZCIpOwotCW1zZysrOwotICAgICAgICBkZWJ1 ZyhGMTExLCJkb19wdHkoKSIsImZvcmsgZmFpbHMiLGVycm5vKTsKLSAgICAgICAgcmV0dXJuKC0x KTsKLSAgICB9Ci0gICAgaWYgKGkpIHsgIC8qIFdhaXQgZm9yIGNoaWxkIGJlZm9yZSB3cml0aW5n IHRvIHBhcmVudCBzaWRlIG9mIHB0eS4gKi8KLSAgICAgICAgY2hhciBjOwotI2lmZGVmIEhBVkVf UFRZVFJBUAotICAgICAgICBpbnQgb24gPSAxOwotI2VuZGlmIC8qIEhBVkVfUFRZVFJBUCAqLwot CWNsb3NlKHN5bmNwaXBlWzFdKTsKLQllcnJubyA9IDA7Ci0gICAgICAgIGlmIChyZWFkKHN5bmNw aXBlWzBdLCAmYywgMSkgPT0gMCkgeyAvKiBTbGF2ZSBzaWRlIGRpZWQgKi8KLQkgICAgcGVycm9y KCJQaXBlIHJlYWQoKSBmYWlsZWQiKTsKLQkgICAgbXNnKys7Ci0gICAgICAgICAgICBkZWJ1ZyhG MTEwLCJkb19wdHkoKSIsIlNsYXZlIGZhaWxzIHRvIGluaXRpYWxpemUiLDApOwotICAgICAgICAg ICAgY2xvc2Uoc3luY3BpcGVbMF0pOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAg fQotICAgICAgICBwdHlfZm9ya19waWQgPSBpOwkJLyogU28gd2UgY2FuIGNsZWFuIGl0IHVwIGxh dGVyICovCi0JcHR5X2ZvcmtfYWN0aXZlID0gMTsKLQlkZWJ1ZyhGMTAxLCJkb19wdHkgcHR5X2Zv cmtfcGlkIiwiIixwdHlfZm9ya19waWQpOwotI2lmZGVmIEhBVkVfUFRZVFJBUAotICAgICAgICAv KiBIUFVYIGRvZXMgbm90IGFsbG93IHRoZSBtYXN0ZXIgdG8gcmVhZCBlbmQgb2YgZmlsZS4gICov Ci0gICAgICAgIC8qIFRoZXJlZm9yZSwgd2UgbXVzdCBkZXRlcm1pbmUgdGhhdCB0aGUgc2xhdmUg aGFzIGJlZW4gKi8KLSAgICAgICAgLyogY2xvc2VkIGJ5IHRyYXBwaW5nIHRoZSBjYWxsIHRvIGNs b3NlKCkuICAgICAgICAgICAgICAqLwotCWVycm5vID0gMDsKLQl4ID0gaW9jdGwodHR5ZmQsIFRJ T0NUUkFQLCAoY2hhciAqKSZvbik7Ci0JZGVidWcoRjExMSwiZG9fcHR5IGlvY3RsKFRJT0NUUkFQ KSIsY2tpdG9hKHgpLGVycm5vKTsKLSNlbmRpZiAvKiBIQVZFX1BUWVRSQVAgKi8KLSAgICAgICAg ZGVidWcoRjExMSwiZG9fcHR5KCkiLCJzeW5jaHJvbml6ZWQgLSBwdHlfZm9ya19waWQiLHB0eV9m b3JrX3BpZCk7Ci0gICAgICAgIGNsb3NlKHN5bmNwaXBlWzBdKTsKLSAgICB9IGVsc2UgewotCWlu dCB4OwotCWRlYnVnKEYxMDEsImRvX3B0eSBnZXRwdHlzbGF2ZSB0dHlmZCBBIiwiIix0dHlmZCk7 Ci0gICAgICAgIGRlYnVnKEYxMTAsImRvX3B0eSgpIiwiU2xhdmUgc3RhcnRzIiwwKTsKLQl4ID0g Z2V0cHR5c2xhdmUoJnR0eWZkLGZjKTsKLQlkZWJ1ZyhGMTAxLCJkb19wdHkgZ2V0cHR5c2xhdmUi LCIiLHgpOwotICAgICAgICBpZiAoeCA9PSAwKSB7Ci0JICAgIGRlYnVnKEYxMDEsImRvX3B0eSBn ZXRwdHlzbGF2ZSB0dHlmZCBCIiwiIix0dHlmZCk7Ci0jaWZkZWYgV0FOVF9VVE1QCi0gICAgICAg ICAgICBwdHlfdXBkYXRlX3V0bXAoUFRZX1VTRVJfUFJPQ0VTUywKLQkJCSAgICBnZXRwaWQoKSwK LQkJCSAgICAiS0VSTUlUIiwKLQkJCSAgICBYbGluZSwKLQkJCSAgICBjbWQsCi0JCQkgICAgUFRZ X1RUWVNMT1RfVVNBQkxFCi0JCQkgICAgKTsKLSNlbmRpZiAvKiBXQU5UX1VUTVAgKi8KLSAgICAg ICAgICAgIC8qIE5vdGlmeSBvdXIgcGFyZW50IHdlJ3JlIHJlYWR5IHRvIGNvbnRpbnVlLiovCi0g ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJkb19wdHkoKSIsInNsYXZlIHN5bmNocm9uaXppbmciLDAp OwotICAgICAgICAgICAgd3JpdGUoc3luY3BpcGVbMV0sInkiLDEpOwotICAgICAgICAgICAgY2xv c2Uoc3luY3BpcGVbMF0pOwotICAgICAgICAgICAgY2xvc2Uoc3luY3BpcGVbMV0pOwotCi0JICAg IGRlYnVnKEYxMTAsImRvX3B0eSBjbWQiLGNtZCwiIik7Ci0gICAgICAgICAgICBleGVjX2NtZChj bWQpOwotICAgICAgICAgICAgZGVidWcoRjExMSwiZG9fcHR5KCkiLCJleGVjX2NtZCgpIHJldHVy bnMgLSB3aHk/IixlcnJubyk7Ci0gICAgICAgIH0KLQkqZmQgPSB0dHlmZDsKLSAgICAgICAgZGVi dWcoRjExMCwiZG9fcHR5KCkiLCJnZXRwdHlzbGF2ZSgpIGZhaWxzIC0gZXhpdGluZyIsMCk7Ci0g ICAgICAgIGV4aXQoMSk7Ci0gICAgfQotICAgICpmZCA9IHR0eWZkOwotICAgIHB0eV9mYyA9IGZj OwotICAgIHJldHVybihnZXRwaWQoKSk7Ci19IC8qIGVuZCBvZiBkb19wdHkoKSAqLwotCi0KLVZP SUQKLWVuZF9wdHkoKSB7Ci0gICAgbXNnID0gMDsJCQkJLyogTWVzc2FnZSBjb3VudGVyICovCi0g ICAgZGVidWcoRjEwMSwiZW5kX3B0eSBwdHlfZm9ya19waWQiLCIiLHB0eV9mb3JrX3BpZCk7Ci0g ICAgaWYgKFhsaW5lWzBdICYmIHB0eV9mb3JrX3BpZCA+PSAwKSB7Ci0gICAgICAgIHB0eV9jbGVh bnVwKFhsaW5lLHB0eV9mb3JrX3BpZCwxKTsKLSAgICAgICAgWGxpbmVbMF0gPSAnXDAnOwotICAg ICAgICBwdHlfZm9ya19waWQgPSAtMTsKLQlwdHlfZm9ya19hY3RpdmUgPSAwOwotCWRlYnVnKEYx MDEsImVuZF9wdHkgcHR5X2ZvcmtfYWN0aXZlIiwiIixwdHlfZm9ya19hY3RpdmUpOwotICAgIH0K LSAgICBwdHlfZmMgPSAtMTsKLX0KLSNlbmRpZiAvKiBORVRQVFkgKi8KCmRpZmYgLS1naXQgYS9j a2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXB0eS5oIGIvY2tlcm1pdC05 LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VwdHkuaApkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMzc0YzUwOC4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQv Y2tlcm1pdC05LjAuMzAyL2NrdXB0eS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTkzICswLDAgQEAK LS8qIEMgSyBVIFAgVCBZIC4gSCAgLS0gIEluY2x1ZGVzIGFuZCBkZWZpbml0aW9ucyBmb3IgY2t1 cHR5LmMgICovCi0KLS8qCi0gIENvcHlyaWdodCAxOTk1IGJ5IHRoZSBNYXNzYWNodXNldHRzIElu c3RpdHV0ZSBvZiBUZWNobm9sb2d5LgotCi0gIE1vZGlmaWVkIGZvciB1c2UgaW4gQy1LZXJtaXQg Ynk6Ci0KLSAgSmVmZnJleSBFIEFsdG1hbiA8amFsdG1hbkBzZWN1cmUtZW5kcG9pbnRzLmNvbT4K LSAgICBTZWN1cmUgRW5kcG9pbnRzIEluYy4sIE5ldyBZb3JrIENpdHkKLSAgTm92ZW1iZXIgMTk5 OQotKi8KLSNpZm5kZWYgX19QVFlfSU5UX0hfXwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi0v KiAjZGVmaW5lIFdBTlRfVVRNUCAqLwotLyogV2UgZG9uJ3Qgd2FudCBhbGwgdGhlIHV0bXAvd3Rt cCBzdHVmZiAqLwotCi0jaWZkZWYgV0FOVF9VVE1QCi0jaWZkZWYgSEFWRV9VVE1QX0gKLSNpbmNs dWRlIDx1dG1wLmg+Ci0jZW5kaWYgLyogSEFWRV9VVE1QX0ggKi8KLSNpZmRlZiBIQVZFX1VUTVBY X0gKLSNpbmNsdWRlIDx1dG1weC5oPgotI2VuZGlmIC8qIEhBVkVfVVRNUFhfSCAqLwotI2VuZGlm IC8qIFdBTlRfVVRNUCAqLwotCi0jaWZkZWYgSEFWRV9VTklTVERfSAotI2luY2x1ZGUgPHVuaXN0 ZC5oPgotI2VuZGlmIC8qIEhBVkVfVU5JU1REX0ggKi8KLSNpZmRlZiBfX1NDT19fCi0jaW5jbHVk ZSA8c3lzL3VuaXN0ZC5oPgotI2VuZGlmIC8qIF9fU0NPX18gKi8KLSNpZmRlZiBIQVZFX1NURExJ Ql9ICi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jZW5kaWYgLyogSEFWRV9TVERMSUJfSCAqLwotCi0j aW5jbHVkZSA8c3RkaW8uaD4KLQotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaWZuZGVmIFNVTk9T NDEKLSNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KLSNlbmRpZgkvKiBTVU5PUzQxICovCi0jaW5jbHVk ZSA8c3lzL2ZpbGUuaD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2luY2x1ZGUgPGN0eXBlLmg+ Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSA8 ZXJybm8uaD4KLSNpbmNsdWRlIDxwd2QuaD4KLQotI2lmZGVmIEhBVkVfU1lTX0xBQkVMX0gKLS8q IG9ubHkgU3VuT1MgND8gKi8KLSNpbmNsdWRlIDxzeXMvbGFiZWwuaD4KLSNpbmNsdWRlIDxzeXMv YXVkaXQuaD4KLSNpbmNsdWRlIDxwd2RhZGouaD4KLSNlbmRpZiAvKiBIQVZFX1NZU19MQUJFTF9I ICovCi0KLSNpbmNsdWRlIDxzaWduYWwuaD4KLQotI2lmZGVmIEhQVVgKLSNpbmNsdWRlIDxzeXMv cHR5aW8uaD4KLSNlbmRpZiAvKiBIUFVYICovCi0jaWZkZWYgc3lzdmltcAotI2luY2x1ZGUgPGNv bXBhdC5oPgotI2VuZGlmIC8qIHN5c3ZpbXAgKi8KLQotI2lmZGVmIENPTU1FTlQKLS8qIEkgZG9u J3QgdGhpbmsgd2UgYWN0dWFsbHkgdXNlIHRoaXMgZm9yIGFueXRoaW5nICovCi0vKiBhbmQgaXQg a2lsbHMgU2xhY2t3YXJlIGJ1aWxkcywgd2hlcmUgdGhlcmUgaXMgbm8gc2VsZWN0LmguICovCi0j aWZuZGVmIE5PX1NZU19TRUxFQ1RfSAotI2lmZGVmIEhBVkVfU1lTX1NFTEVDVF9ICi0jaW5jbHVk ZSA8c3lzL3NlbGVjdC5oPgotI2VuZGlmIC8qIEhBVkVfU1lTX1NFTEVDVF9IICovCi0jZW5kaWYg LyogTk9fU1lTX1NFTEVDVF9IICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0jaWZkZWYgSEFW RV9TVFJFQU1TCi0jaW5jbHVkZSA8c3lzL3N0cmVhbS5oPgotI2luY2x1ZGUgPHN5cy9zdHJvcHRz Lmg+Ci0jZW5kaWYgLyogSEFWRV9TVFJFQU1TICovCi0KLSNpZmRlZiBQT1NJWF9URVJNSU9TCi0j aWZuZGVmIHVsdHJpeAotI2luY2x1ZGUgPHRlcm1pb3MuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c2d0 dHkuaD4KLSNlbmRpZiAvKiB1bHRyaXggKi8KLSNlbHNlIC8qIFBPU0lYX1RFUk1JT1MgKi8KLSNp bmNsdWRlIDxzZ3R0eS5oPgotI2VuZGlmIC8qIFBPU0lYX1RFUk1JT1MgKi8KLQotI2luY2x1ZGUg PG5ldGRiLmg+Ci0vKiAjaW5jbHVkZSA8c3lzbG9nLmg+ICovCi0jaWZuZGVmIHVsdHJpeAotI2lu Y2x1ZGUgPHN0cmluZy5oPgotI2VuZGlmIC8qIHVsdHJpeCAqLwotLyogI2luY2x1ZGUgPHN5cy9w YXJhbS5oPiAqLwkJLyogKG5vdyBkb25lIGluIGNrY2RlYi5oKSAqLwotCi0jaWZkZWYgSEFWRV9T VFJFQU1TCi0vKiBrcmxvZ2luIGRvZXNuJ3QgdGVzdCBzeXMvdHR5Li4uICovCi0jaWZkZWYgSEFW RV9TWVNfVFRZX0gKLSNpbmNsdWRlIDxzeXMvdHR5Lmg+Ci0jZW5kaWYgLyogSEFWRV9TWVNfVFRZ X0ggKi8KLQotI2lmZGVmIEhBVkVfU1lTX1BUWVZBUl9ICi0vKiBTb2xhcmlzIGFjdHVhbGx5IHVz ZXMgcGFja2V0IG1vZGUsIHNvIHRoZSByZWFsIG1hY3JvcyBhcmUgbmVlZGVkIHRvbyAqLwotI2lu Y2x1ZGUgPHN5cy9wdHl2YXIuaD4KLSNlbmRpZiAvKiBIQVZFX1NZU19QVFlWQVJfSCAqLwotI2Vu ZGlmIC8qIEhBVkVfU1RSRUFNUyAqLwotCi0jaWZkZWYgQ09NTUVOVAotLyogVGhpcyBibG9jayBt b3ZlZCB0byBja2NkZWIuaCAqLwotI2lmbmRlZiBOT19PUEVOUFRZCi0vKiBGb3IgTmV0QlNELCBz ZWUgbWFrZWZpbGUgKi8KLSNpZm5kZWYgSEFWRV9PUEVOUFRZCi0jaWZkZWYgX19GcmVlQlNEX18K LSNkZWZpbmUgSEFWRV9PUEVOUFRZCi0jZWxzZQotI2lmZGVmIE1BQ09TWDEwCi0jZGVmaW5lIEhB VkVfT1BFTlBUWQotI2VuZGlmCS8qIE1BQ09TWDEwICovCi0jZW5kaWYJLyogX19GcmVlQlNEX18g Ki8KLSNlbmRpZgkvKiBIQVZFX09QRU5QVFkgKi8KLSNlbmRpZgkvKiBOT19PUEVOUFRZICovCi0j ZW5kaWYJLyogQ09NTUVOVCAqLwotCi0jaWZkZWYgSEFWRV9WSEFOR1VQCi0jaWZuZGVmIE9QRU5f Q1RUWV9PTkxZX09OQ0UKLS8qCi0gIEJyZWFrcyB1bmRlciBVbHRyaXggYW5kIG90aGVycyB3aGVy ZSB5b3UgY2Fubm90IGdldCBjb250cm9sbGluZwotICB0ZXJtaW5hbCB0d2ljZS4KLSovCi0jZGVm aW5lIFZIQU5HX2ZpcnN0Ci0jZGVmaW5lIFZIQU5HX0xBU1QKLSNlbmRpZiAvKiBPUEVOX0NUVFlf T05MWV9PTkNFICovCi0jZW5kaWYgLyogSEFWRV9WSEFOR1VQICovCi0KLS8qIEludGVybmFsIGZ1 bmN0aW9ucyAqLwotX1BST1RPVFlQKGxvbmcgcHR5aW50X3ZvaWRfYXNzb2NpYXRpb24sKHZvaWQp KTsKLV9QUk9UT1RZUChsb25nIHB0eWludF9vcGVuX2N0dHkgLChjaGFyICosIGludCAqKSk7Ci1f UFJPVE9UWVAoVk9JRCBwdHlpbnRfdmhhbmd1cCwgKHZvaWQpKTsKLQotI2lmZGVmIFdBTlRfVVRN UAotX1BST1RPVFlQKGxvbmcgcHR5aW50X3VwZGF0ZV93dG1wLCAoc3RydWN0IHV0bXAgKiwgY2hh ciAqLCBjaGFyICopKTsKLSNlbmRpZiAvKiBXQU5UX1VUTVAgKi8KLQotI2RlZmluZSBfX1BUWV9J TlRfSF9fCi0jZW5kaWYgLyogX19QVFlfSU5UX0hfXyAqLwotCi0jaWZuZGVmIF9fTElCUFRZX0hf XwotCi0jaWZkZWYgV0FOVF9VVE1QCi0vKiBDb25zdGFudHMgZm9yIHB0eV91cGRhdGVfdXRtcCAq LwotI2RlZmluZSBQVFlfTE9HSU5fUFJPQ0VTUyAwCi0jZGVmaW5lIFBUWV9VU0VSX1BST0NFU1Mg MQotI2RlZmluZSBQVFlfREVBRF9QUk9DRVNTIDIKLSNkZWZpbmUgUFRZX1RUWVNMT1RfVVNBQkxF ICgweDEpCS8qIGZsYWdzIHRvIHVwZGF0ZV91dG1wKi8KLSNkZWZpbmUgUFRZX1VUTVBfVVNFUk5B TUVfVkFMSUQgKDB4MikKLSNlbmRpZiAvKiBXQU5UX1VUTVAgKi8KLQotX1BST1RPVFlQKGxvbmcg cHR5X2luaXQsKHZvaWQpKTsKLV9QUk9UT1RZUChsb25nIHB0eV9nZXRwdHksICggaW50ICosIGNo YXIgKiwgaW50KSk7Ci1fUFJPVE9UWVAobG9uZyBwdHlfb3Blbl9zbGF2ZSwgKGNoYXIgKiwgaW50 ICosIGludCkpOwotX1BST1RPVFlQKGxvbmcgcHR5X29wZW5fY3R0eSwgKGNoYXIgKiwgaW50ICos IGludCkpOwotX1BST1RPVFlQKGxvbmcgcHR5X2luaXRpYWxpemVfc2xhdmUsIChpbnQpKTsKLSNp ZmRlZiBXQU5UX1VUTVAKLV9QUk9UT1RZUChsb25nIHB0eV91cGRhdGVfdXRtcCwgKGludCwgaW50 LCBjaGFyICosIGNoYXIgKiwgY2hhciAqLCBpbnQpKTsKLV9QUk9UT1RZUChsb25nIHB0eV9sb2d3 dG1wLCAoY2hhciAqLCBjaGFyICosIGNoYXIgKikpOwotI2VuZGlmIC8qIFdBTlRfVVRNUCAqLwot X1BST1RPVFlQKGxvbmcgcHR5X2NsZWFudXAsIChjaGFyICosIGludCwgaW50KSk7Ci0KLSNkZWZp bmUgUFRZX0dFVFBUWV9TVFJFQU1TICAgICAgICAgICAgICAgKDQ0ODA2OTEyTCkKLSNkZWZpbmUg UFRZX0dFVFBUWV9GU1RBVCAgICAgICAgICAgICAgICAgKDQ0ODA2OTEzTCkKLSNkZWZpbmUgUFRZ X0dFVFBUWV9OT1BUWSAgICAgICAgICAgICAgICAgKDQ0ODA2OTE0TCkKLSNkZWZpbmUgUFRZX0dF VFBUWV9TTEFWRV9UT09MT05HICAgICAgICAgKDQ0ODA2OTE1TCkKLSNkZWZpbmUgUFRZX09QRU5f U0xBVkVfT1BFTkZBSUwgICAgICAgICAgKDQ0ODA2OTE2TCkKLSNkZWZpbmUgUFRZX09QRU5fU0xB VkVfQ0hNT0RGQUlMICAgICAgICAgKDQ0ODA2OTE3TCkKLSNkZWZpbmUgUFRZX09QRU5fU0xBVkVf Tk9DVFRZICAgICAgICAgICAgKDQ0ODA2OTE4TCkKLSNkZWZpbmUgUFRZX09QRU5fU0xBVkVfQ0hP V05GQUlMICAgICAgICAgKDQ0ODA2OTE5TCkKLSNkZWZpbmUgUFRZX09QRU5fU0xBVkVfTElORV9Q VVNIRkFJTCAgICAgKDQ0ODA2OTIwTCkKLSNkZWZpbmUgUFRZX09QRU5fU0xBVkVfUFVTSF9GQUlM ICAgICAgICAgKDQ0ODA2OTIxTCkKLSNkZWZpbmUgUFRZX09QRU5fU0xBVkVfUkVWT0tFRkFJTCAg ICAgICAgKDQ0ODA2OTIyTCkKLSNpZmRlZiBXQU5UX1VUTVAKLSNkZWZpbmUgUFRZX1VQREFURV9V VE1QX1BST0NUWVBFX0lOVkFMSUQgKDQ0ODA2OTIzTCkKLSNlbmRpZiAvKiBXQU5UX1VUTVAgKi8K LSNkZWZpbmUgUFRZX09QRU5fU0xBVkVfVE9PU0hPUlQgICAgICAgICAgKDQ0ODA2OTI0TCkKLSNk ZWZpbmUgRVJST1JfVEFCTEVfQkFTRV9wdHkgICAgICAgICAgICAgKDQ0ODA2OTEyTCkKLQotZXh0 ZXJuIHN0cnVjdCBlcnJvcl90YWJsZSBldF9wdHlfZXJyb3JfdGFibGU7Ci0KLSNkZWZpbmUgX19M SUJQVFlfSF9fCi0jZW5kaWYgLyogX19MSUJQVFlfSF9fICovCi0KCmRpZmYgLS1naXQgYS9ja2Vy bWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXNjci5jIGIvY2tlcm1pdC05LjAu MzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VzY3IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggN2EyZDliNy4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tl cm1pdC05LjAuMzAyL2NrdXNjci5jCisrKyAvZGV2L251bGwKQEAgLTEsNjg4ICswLDAgQEAKLSNp bmNsdWRlICJja2NzeW0uaCIKLQotI2lmbmRlZiBOT0lDUAotI2lmbmRlZiBOT1NDUklQVAotY2hh ciAqbG9naW52ID0gIlNjcmlwdCBDb21tYW5kLCA5LjAuMDMyLCAxNiBPY3QgMjAwOSI7Ci0KLS8q ICBDIEsgVSBTIEMgUiAgLS0gIGV4cGVjdC1zZW5kIHNjcmlwdCBpbXBsZW1lbnRhdGlvbiAgKi8K LQotLyoKLSAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDA5LAotICAgIFRydXN0ZWVzIG9mIENvbHVt YmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCi0gICAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBvciB0aGUKLSAgICBj b3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBw ZXJtaXNzaW9ucy4KLQotICBPcmlnaW5hbCAodmVyc2lvbiAxLCAxOTg1KSBhdXRob3I6IEhlcm0g RmlzY2hlciwgRW5jaW5vLCBDQS4KLSAgQ29udHJpYnV0ZWQgdG8gQ29sdW1iaWEgVW5pdmVyc2l0 eSBpbiAxOTg1IGZvciBpbmNsdXNpb24gaW4gQy1LZXJtaXQgNC4wLgotICBNYWludGFpbmVkIHNp bmNlIDE5ODUgYnkgRnJhbmsgZGEgQ3J1eiwgQ29sdW1iaWEgVW5pdmVyc2l0eSwKLSAgZmRjQGNv bHVtYmlhLmVkdS4KLQotICBUaGUgbW9kdWxlIHRha2VzIGEgVVVDUC1zdHlsZSBzY3JpcHQgb2Yg dGhlICJleHBlY3Qgc2VuZCBbZXhwZWN0IHNlbmRdIC4uLiIKLSAgZm9ybWF0LiAgSXQgaXMgaW50 ZW5kZWQgdG8gb3BlcmF0ZSBzaW1pbGFybHkgdG8gdGhlIHdheSB0aGUgY29tbW9uCi0gIFVVQ1Ag TC5zeXMgbG9naW4gZW50cmllcyB3b3JrLiAgQ29uZGl0aW9uYWwgcmVzcG9uc2VzIGFyZSBzdXBw b3J0ZWQ6Ci0gIGV4cGVjdFstc2VuZC1leHBlY3RbLi4uXV0sIGFzIHdpdGggVVVDUC4gIFRoZSBz ZW5kIGtleXdvcmQgRU9UIHNlbmRzIGEKLSAgQ29udHJvbC1kLCBhbmQgdGhlIGtleXdvcmQgQlJF QUsgc2VuZHMgYSBicmVhay4gIExldHRlcnMgcHJlZml4ZWQKLSAgYnkgJ34nIGFyZSAnfmInIGJh Y2tzcGFjZSwgJ35zJyBzcGFjZSwgJ35uJyBsaW5lZmVlZCwgJ35yJyByZXR1cm4sICd+eCcgeG9u LAotICAnfnQnIHRhYiwgJ35xJyA/IChub3QgYWxsb3dlZCBvbiBrZXJtaXQgY29tbWFuZCBsaW5l cyksICd+JyB+LCAnficnLAotICAnfiInLCAnfmMnIGRvbid0IGFwcGVuZCByZXR1cm4sICd+b1tv W29dXScgb2N0YWwgY2hhcmFjdGVyLiAgQXMgd2l0aAotICBzb21lIHV1Y3Agc3lzdGVtcywgc2Vu dCBzdHJpbmdzIGFyZSBmb2xsb3dlZCBieSB+ciAobm90IH5uKSB1bmxlc3MgdGhleQotICBlbmQg d2l0aCB+Yy4gTnVsbCBleHBlY3Qgc3RyaW5ncyAoZS5nLiwgfjAgb3IgLS0pIGNhdXNlIGEgc2hv cnQKLSAgZGVsYXksIGFuZCBhcmUgdXNlZnVsIGZvciBzZW5kaW5nIHNlcXVlbmNlcyByZXF1aXJp bmcgc2xpZ2h0IHBhdXNlcy4KLQotICBUaGlzIG1vZHVsZSBjYWxscyBleHRlcm5hbGx5IGRlZmlu ZWQgc3lzdGVtLWRlcGVuZGVudCBmdW5jdGlvbnMgZm9yCi0gIGNvbW11bmljYXRpb25zIGkvbywg YXMgZGVmaW5lZCBpbiBja2NwbG0udHh0LCB0aGUgQy1LZXJtaXQgUHJvZ3JhbSBMb2dpYwotICBN YW51YWwsIGFuZCB0aHVzIHNob3VsZCBiZSBwb3J0YWJsZSB0byBhbGwgc3lzdGVtcyB0aGF0IGlt cGxlbWVudCB0aG9zZQotICBmdW5jdGlvbnMsIGFuZCB3aGVyZSBhbGFybSgpIGFuZCBzaWduYWwo KSB3b3JrIGFzIHRoZXkgZG8gaW4gVU5JWC4KLSovCi0jaW5jbHVkZSAiY2tjZGViLmgiCi0jaW5j bHVkZSA8c2lnbmFsLmg+Ci0jaWZkZWYgTlQKLSNpbmNsdWRlIDxzZXRqbXBleC5oPgotI2Vsc2Ug LyogTlQgKi8KLSNpbmNsdWRlIDxzZXRqbXAuaD4KLSNlbmRpZiAvKiBOVCAqLwotI2luY2x1ZGUg ImNrY2FzYy5oIgotI2luY2x1ZGUgImNrY2tlci5oIgotI2luY2x1ZGUgImNrdXVzci5oIgotI2lu Y2x1ZGUgImNrY25ldC5oIgotI2luY2x1ZGUgImNrY3NpZy5oIgotCi1fUFJPVE9UWVAoIFZPSUQg Zmx1c2hpLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggc3RhdGljIFZPSUQgbXlmbHNoLCAodm9pZCkg KTsKLV9QUk9UT1RZUCggc3RhdGljIGludCBzZXF1ZW5jLCAodm9pZCkgKTsKLV9QUk9UT1RZUCgg c3RhdGljIFZPSUQgcmVjdnNlcSwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIHN0YXRpYyBpbnQgb3V0 c2VxLCAodm9pZCkgKTsKLQotI2lmZGVmIE1BQwotI2RlZmluZSBzaWduYWwgbXNpZ25hbAotI2Rl ZmluZSBTSUdUWVAgbG9uZwotI2RlZmluZSBhbGFybSBtYWxhcm0KLSNkZWZpbmUgU0lHX0lHTiAw Ci0jZGVmaW5lIFNJR0FMUk0gMQotI2RlZmluZSBTSUdJTlQgIDIKLVNJR1RZUCAoKm1zaWduYWwo aW50IHR5cGUsIFNJR1RZUCAoKmZ1bmMpKGludCkpKShpbnQpOwotI2VuZGlmIC8qIE1BQyAqLwot Ci0jaWZkZWYgQU1JR0EKLSNkZWZpbmUgc2lnbmFsIGFzaWduYWwKLSNkZWZpbmUgYWxhcm0gYWFs YXJtCi0jZGVmaW5lIFNJR0FMUk0gKF9OVU1TSUcrMSkKLSNkZWZpbmUgU0lHVFlQIHZvaWQKLVNJ R1RZUCAoKmFzaWduYWwoaW50IHR5cGUsIFNJR1RZUCAoKmZ1bmMpKGludCkpKShpbnQpOwotdW5z aWduZWQgYWFsYXJtKHVuc2lnbmVkKTsKLSNlbmRpZiAvKiBBTUlHQSAqLwotCi0jaWZkZWYgU1RS QVRVUwotLyogVk9TIGRvZXNuJ3QgaGF2ZSBhbGFybSgpLCBidXQgaXQgZG9lcyBoYXZlIHNvbWUg dGhpbmdzIHdlIGNhbiB3b3JrIHdpdGguICovCi0vKiBob3dldmVyLCB3ZSBoYXZlIHRvIGNhdGNo IGFsbCB0aGUgc2lnbmFscyBpbiBvbmUgcGxhY2UgdG8gZG8gdGhpcywgc28gICAgKi8KLS8qIHdl IGludGVyY2VwdCB0aGUgc2lnbmFsKCkgcm91dGluZSBhbmQgY2FsbCBpdCBmcm9tIG91ciBvd24g cmVwbGFjZW1lbnQuICAqLwotI2RlZmluZSBzaWduYWwgdnNpZ25hbAotI2RlZmluZSBhbGFybSB2 YWxhcm0KLVNJR1RZUCAoKnZzaWduYWwoaW50IHR5cGUsIFNJR1RZUCAoKmZ1bmMpKGludCkpKShp bnQpOwotaW50IHZhbGFybShpbnQgaW50ZXJ2YWwpOwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLQot ZXh0ZXJuIGludCBzZXNzZnQ7Ci1leHRlcm4gaW50IGxvY2FsLCBmbG93LCBzZXNsb2csIG1kbXR5 cCwgbXNnZmxnLCBkdXBsZXgsIGJhY2tncmQsIHNlY2hvLCBxdWlldDsKLWV4dGVybiBpbnQgbmV0 d29yaywgbmV0dHlwZSwgdHRucHJvdG87Ci1leHRlcm4gbG9uZyBzcGVlZDsKLWV4dGVybiBjaGFy IHR0bmFtZVtdOwotCi0jaWZkZWYgTlRTSUcKLWV4dGVybiBpbnQgVGxzSW5kZXg7Ci0jZW5kaWYg LyogTlRTSUcgKi8KLSNpZmRlZiBJS1NECi1leHRlcm4gaW50IGluc2VydmVyOwotI2VuZGlmIC8q IElLU0QgKi8KLQotc3RhdGljIGludCBpc190biA9IDA7CQkJLyogRG8gVGVsbmV0IG5lZ290aWF0 aW9ucyAqLwotCi0jaWZuZGVmIE5PU1BMCi0jaWZkZWYgRENNREJVRgotZXh0ZXJuIHN0cnVjdCBj bWRwdHIgKmNtZHN0azsKLSNlbHNlCi1leHRlcm4gc3RydWN0IGNtZHB0ciBjbWRzdGtbXTsKLSNl bmRpZiAvKiBEQ01EQlVGICovCi1leHRlcm4gaW50IHRlY2hvLCBjbWRsdmw7Ci1leHRlcm4gaW50 IG1lY2hvOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLXN0YXRpYyBpbnQgc2NyX2VjaG87CQkJLyog V2hldGhlciB0byBlY2hvIHNjcmlwdCBjb21tYW5kcyAqLwotCi1zdGF0aWMgaW50IGV4cF9hbHJt ID0gMTU7CQkvKiBUaW1lIHRvIHdhaXQgZm9yIGV4cGVjdCBzdHJpbmcgKi8KLSNkZWZpbmUgU05E X0FMUk0gMTUJCQkvKiBUaW1lIHRvIGFsbG93IGZvciBzZW5kaW5nIHN0cmluZyAqLwotI2RlZmlu ZSBOVUxMX0VYUCAyCQkJLyogVGltZSB0byBwYXVzZSBvbiBudWxsIGV4cGVjdCBzdHJnKi8KLSNk ZWZpbmUgREVMX01TRUMgMzAwCQkJLyogTWlsbGlzZWNvbmRzIHRvIHBhdXNlIG9uIH5kICovCi0K LSNkZWZpbmUgU0JVRkwgNTEyCi1zdGF0aWMgY2hhciBzZXFfYnVmW1NCVUZMKzJdLCAqczsJLyog ZXhwZWN0LXNlbmQgc2VxdWVuY2UgYnVmZmVyICovCi1zdGF0aWMgaW50IGdvdF9pdCwgbm9fY3I7 Ci0KLS8qICBDb25uZWN0IHN0YXRlIHBhcmVudC9jaGlsZCBjb21tdW5pY2F0aW9uIHNpZ25hbCBo YW5kbGVycyAqLwotCi0jaWZkZWYgQ09NTUVOVAotI2lmZGVmIENLX1BPU0lYX1NJRwotc3RhdGlj IHNpZ2ptcF9idWYgYWxybXJuZzsKLSNlbHNlCi1zdGF0aWMgam1wX2J1ZiBhbHJtcm5nOwotI2Vu ZGlmIC8qIENLX1BPU0lYX1NJRyAqLwotI2Vsc2UKLXN0YXRpYyBja2ptcGJ1ZiBhbHJtcm5nOwot I2VuZGlmIC8qIENPTU1FTlQgKi8KLQotc3RhdGljIFNJR1RZUAotI2lmZGVmIENLX0FOU0lDCi1z Y3J0aW1lKGludCBmb28pCQkJLyogbW9kZW0gcmVhZCBmYWlsdXJlIGhhbmRsZXIsICovCi0jZWxz ZQotc2NydGltZShmb28pIGludCBmb287CQkJLyogQWxhcm0gaGFuZGxlciAqLwotI2VuZGlmIC8q IENLX0FOU0lDICovCi0vKiBzY3J0aW1lICovIHsKLQotI2lmZGVmIEJFQk9YCi0jaWZkZWYgQkVf RFJfNwotICAgIGFsYXJtX2V4cGlyZWQoKTsKLSNlbmRpZiAvKiBCRV9EUl83ICovCi0jZW5kaWYg LyogQkVCT1ggKi8KLSNpZmRlZiBOVFNJRwotICAgIGlmIChmb28gPT0gU0lHQUxSTSkKLSAgICAg IFBvc3RBbGFybVNpZ1NlbSgpOwotICAgIGVsc2UKLSAgICAgIFBvc3RDdHJsQ1NlbSgpOwotI2Vs c2UgLyogTlRTSUcgKi8KLSNpZmRlZiBOVAotICAgIGNrbG9uZ2ptcChja2phZGRyKGFscm1ybmcp LDEpOwotI2Vsc2UgLyogTlQgKi8KLSAgICBja2xvbmdqbXAoYWxybXJuZywxKTsKLSNlbmRpZiAv KiBOVCAqLwotI2VuZGlmIC8qIE5UU0lHICovCi0gICAgU0lHUkVUVVJOOwotfQotCi0vKgotIFNl cXVlbmNlIGludGVycHJldGVyIC0tIHBpY2sgdXAgbmV4dCBzZXF1ZW5jZSBmcm9tIGNvbW1hbmQg c3RyaW5nLAotIGRlY29kZSBlc2NhcGVzIGFuZCBwbGFjZSBpbnRvIHNlcV9idWYuCi0KLSBJZiBz dHJpbmcgY29udGFpbnMgYSB+ZCAoZGVsYXkpIHRoZW4gc2VxdWVuYygpIHJldHVybnMgYSAxIGV4 cGVjdGluZwotIHRvIGJlIGNhbGxlZCBhZ2FpbiBhZnRlciB0aGUgfmQgZXhlY3V0ZXMuCi0qLwot c3RhdGljIGludAotc2VxdWVuYygpIHsKLSAgICBpbnQgaTsKLSAgICBjaGFyIGMsIG9jdF9jaGFy OwotCi0gICAgbm9fY3IgPSAwOwkJCQkvKiBvdXRwdXQgbmVlZHMgY3IgYXBwZW5kZWQgKi8KLSAg ICBmb3IgKGkgPSAwOyBpIDwgU0JVRkw7ICkgewotCWlmICgqcyA9PSAnXDAnIHx8ICpzID09ICct JyB8fCBpc3NwYWNlKCpzKSApIHsgLyogZG9uZSAqLwotCSAgICBzZXFfYnVmW2ldID0gJ1wwJzsK LQkgICAgcmV0dXJuKDApIDsKLQl9Ci0JaWYgKCpzID09ICd+JykgewkJLyogZXNjYXBlIGNoYXJh Y3RlciAqLwotCSAgICBzKys7Ci0JICAgIHN3aXRjaCAoYyA9ICpzKSB7Ci0JCWNhc2UgJ24nOiAg c2VxX2J1ZltpKytdID0gTEY7IGJyZWFrOwotCQljYXNlICdyJzogIHNlcV9idWZbaSsrXSA9IENS OyBicmVhazsKLQkJY2FzZSAndCc6ICBzZXFfYnVmW2krK10gPSAnXHQnOyBicmVhazsKLQkJY2Fz ZSAnYic6ICBzZXFfYnVmW2krK10gPSAnXGInOyBicmVhazsKLQkJY2FzZSAncSc6ICBzZXFfYnVm W2krK10gPSAnPyc7ICBicmVhazsKLSNpZmRlZiBDT01NRU5UCi0vKiBUaGUgZGVmYXVsdCBjYXNl IHNob3VsZCBjYXRjaCB0aGVzZSBub3cuLi4gKi8KLQkJY2FzZSAnfic6ICBzZXFfYnVmW2krK10g PSAnfic7ICBicmVhazsKLQkJY2FzZSAnLSc6ICBzZXFfYnVmW2krK10gPSAnLSc7ICBicmVhazsK LSNlbmRpZiAvKiBDT01NRU5UICovCi0JCWNhc2UgJ1wnJzogc2VxX2J1ZltpKytdID0gJ1wnJzsg YnJlYWs7Ci0JCWNhc2UgJ1wiJzogc2VxX2J1ZltpKytdID0gJ1wiJzsgYnJlYWs7Ci0JCWNhc2Ug J3MnOiAgc2VxX2J1ZltpKytdID0gJyAnOyAgYnJlYWs7Ci0JCWNhc2UgJ3gnOiAgc2VxX2J1Zltp KytdID0gJ1wwMjEnOyBicmVhazsKLQkJY2FzZSAnYyc6ICBub19jciA9IDE7IGJyZWFrOwotCQlj YXNlICdkJzogewkJCS8qIHNlbmQgd2hhdCB3ZSBoYXZlICYgdGhlbiAqLwotCQkgICAgc2VxX2J1 ZltpXSA9ICdcMCc7CQkvKiBleHBlY3QgdG8gc2VuZCByZXN0IGFmdGVyICovCi0JCSAgICBub19j ciA9IDE7CQkJLyogc2VuZGVyIGRlbGF5cyBhIGxpdHRsZSAqLwotCQkgICAgcysrOwotCQkgICAg cmV0dXJuKDEpOwotCQl9Ci0JCWNhc2UgJ3cnOiB7CQkJLyogd2FpdCBjb3VudCAqLwotCQkgICAg ZXhwX2Fscm0gPSAxNTsJCS8qIGRlZmF1bHQgdG8gMTUgc2VjICovCi0JCSAgICBpZiAoaXNkaWdp dCgqKHMrMSkpKSB7Ci0JCQlzKys7Ci0JCQlleHBfYWxybSA9ICpzICYgMTU7Ci0JCQlpZiAoaXNk aWdpdCgqKHMrMSkpICkgewotCQkJICAgIHMrKzsKLQkJCSAgICBleHBfYWxybSA9IGV4cF9hbHJt ICogMTAgKyAoKnMgJiAxNSk7Ci0JCQl9Ci0JCSAgICB9Ci0JCSAgICBicmVhazsKLQkJfQotCQlk ZWZhdWx0OgotCQkgICAgaWYgKCBpc2RpZ2l0KGMpICkgewkgICAgCS8qIG9jdGFsIGNoYXJhY3Rl ciAqLwotCQkgICAgCW9jdF9jaGFyID0gKGNoYXIpIChjICYgNyk7IC8qIG1vc3Qgc2lnbmlmaWNh bnQgZGlnaXQgKi8KLQkJCWlmIChpc2RpZ2l0KCAqKHMrMSkgKSApIHsKLQkJCSAgICBzKys7Ci0J CQkgICAgb2N0X2NoYXIgPSAoY2hhcikgKChvY3RfY2hhcjw8MykgfCAoICpzICYgNyApKTsKLQkJ CSAgICBpZiAoaXNkaWdpdCggKihzKzEpICkgKSB7Ci0JCQkJcysrOwotCQkJICAgIAlvY3RfY2hh ciA9IChjaGFyKSAoKG9jdF9jaGFyPDwzKSB8ICggKnMgJiA3ICkpOwotCQkJICAgIH0KLQkJCX0K LQkJCXNlcV9idWZbaSsrXSA9IG9jdF9jaGFyOwotCQkJYnJlYWs7Ci0JCSAgICB9IGVsc2Ugc2Vx X2J1ZltpKytdID0gKnM7IC8qIFRyZWF0IH4gYXMgcXVvdGUgKi8KLQkgICAgICB9Ci0JfSBlbHNl IHNlcV9idWZbaSsrXSA9ICpzOwkvKiBQbGFpbiBvbGQgY2hhcmFjdGVyICovCi0JcysrOwotICAg IH0KLSAgICBzZXFfYnVmW2ldID0gJ1wwJzsKLSAgICByZXR1cm4oMCk7CQkJCS8qIGVuZCBvZiBz cGFjZSwgcmV0dXJuIGFueXdheSAqLwotfQotCi0KLS8qIE91dHB1dCBidWZmZXJpbmcgZm9yICJy ZWN2c2VxIiBhbmQgImZsdXNoaSIgKi8KLQotI2RlZmluZQlNQVhCVVJTVCAyNTYJCS8qIG1heGlt dW0gc2l6ZSBvZiBpbnB1dCBidXJzdCAqLwotc3RhdGljIENIQVIgY29uYnVmW01BWEJVUlNUXTsJ LyogYnVmZmVyIHRvIGhvbGQgb3V0cHV0IGZvciBjb25zb2xlICovCi1zdGF0aWMgaW50IGNvbmNu dCA9IDA7CQkvKiBudW1iZXIgb2YgY2hhcmFjdGVycyBidWZmZXJlZCAqLwotc3RhdGljIENIQVIg c2VzYnVmW01BWEJVUlNUXTsJLyogYnVmZmVyIHRvIGhvbGQgb3V0cHV0IGZvciBzZXNzaW9uIGxv ZyAqLwotc3RhdGljIGludCBzZXNjbnQgPSAwOwkJLyogbnVtYmVyIG9mIGNoYXJhY3RlcnMgYnVm ZmVyZWQgKi8KLQotc3RhdGljIFZPSUQKLW15ZmxzaCgpIHsKLSAgICBpZiAoY29uY250ID4gMCkg ewotCWNvbnhvKGNvbmNudCwgKGNoYXIgKikgY29uYnVmKTsKLQljb25jbnQgPSAwOwotICAgIH0K LSAgICBpZiAoc2VzY250ID4gMCkgewotICAgICAgICBsb2dzdHIoKGNoYXIgKikgc2VzYnVmLCBz ZXNjbnQpOwotCXNlc2NudCA9IDA7Ci0gICAgfQotfQotCi0vKiB0aGVzZSB2YXJpYWJsZXMgYXJl IHVzZWQgdG8gcGFzcyBkYXRhIGJldHdlZW4gdGhlIHJlY3ZzZXEoKSAqLwotLyogYW5kIHRoZSBk b3JzZXEoKS4gIFRoZXkgYXJlIG5lY2Vzc2FyeSBiZWNhdXNlIGluIHNvbWUgdmVyc2lvbnMgKi8K LS8qIGRvcnNlcSgpIGlzIGV4ZWN1dGVkIGluIGEgc2VwYXJhdGUgdGhyZWFkIGFuZCBkYXRhIGNh bm5vdCBiZSAqLwotLyogcGFzc2VkIGJ5IHBhcmFtZXRlci4gKi8KLQotc3RhdGljIGNoYXIgKnJz ZXFlLCAqIHJzZXFnb3QsICogcnNlcXRyYWNlIDsKLXN0YXRpYyBpbnQgcnNlcWw7Ci0KLXN0YXRp YyBTSUdUWVAKLSNpZmRlZiBDS19BTlNJQwotZG9yc2VxKHZvaWQgKiB0aHJlYWRpbmZvKQotI2Vs c2UgLyogQ0tfQU5TSUMgKi8KLWRvcnNlcSh0aHJlYWRpbmZvKSBWT0lEICogdGhyZWFkaW5mbzsK LSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogZG9yc2VxICovIHsKLSAgICBpbnQgaSwgeDsKLSAg ICBpbnQgYnVyc3QgPSAwOwkJCS8qIGNoYXJzIHJlbWFpbmluZyBpbiBpbnB1dCBidXJzdCAqLwot Ci0jaWZkZWYgTlRTSUcKLSAgICBzZXRpbnQoKTsKLSAgICBpZiAodGhyZWFkaW5mbykgewkJCS8q IFRocmVhZCBsb2NhbCBzdG9yYWdlLi4uICovCi0JVGxzU2V0VmFsdWUoVGxzSW5kZXgsdGhyZWFk aW5mbyk7Ci0gICAgfQotI2VuZGlmIC8qIE5UU0lHICovCi0jaWZkZWYgQ0tfTE9HSU4KLSNpZmRl ZiBOVAotI2lmZGVmIElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIpCi0gICAgICBzZXRudGNyZWRzKCk7 Ci0jZW5kaWYgLyogSUtTRCAqLwotI2VuZGlmIC8qIE5UICovCi0jZW5kaWYgLyogQ0tfTE9HSU4g Ki8KLQotICAgIHdoaWxlICghZ290X2l0KSB7Ci0JZm9yIChpID0gMDsgaSA8IHJzZXFsLTE7IGkr KykgcnNlcWdvdFtpXSA9IHJzZXFnb3RbaSsxXTsKLQl4ID0gdHRpbmMoMCk7CQkJLyogUmVhZCBh IGNoYXJhY3RlciAqLwotCWRlYnVnKEYxMDEsInJlY3ZzZXEiLCIiLHgpOwotCWlmICh4IDwgMCkg ewotI2lmZGVmIE5UU0lHCi0JICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOwotI2VuZGlmIC8q IE5UU0lHICovCi0JICAgIFNJR1JFVFVSTjsJCQkvKiBDaGVjayBmb3IgZXJyb3IgKi8KLQl9Ci0j aWZkZWYgTkVUQ09OTgotI2lmZGVmIFROQ09ERQotLyogQ2hlY2sgZm9yIHRlbG5ldCBwcm90b2Nv bCBuZWdvdGlhdGlvbiAqLwotCWlmICgoKHggJiAweGZmKSA9PSBJQUMpICYmIGlzX3RuKSB7IC8q IFRlbG5ldCBuZWdvdGlhdGlvbiAqLwotCSAgICBteWZsc2goKTsKLQkgICAgYnVyc3QgPSAwOwot CSAgICBzd2l0Y2ggKHRuX2Rvb3AoKENIQVIpKHggJiAweGZmKSxkdXBsZXgsdHRpbmMpKSB7Ci0J ICAgICAgY2FzZSAyOiBkdXBsZXggPSAwOyBjb250aW51ZTsKLQkgICAgICBjYXNlIDE6IGR1cGxl eCA9IDE7Ci0JICAgICAgZGVmYXVsdDogY29udGludWU7Ci0JICAgIH0KLQl9Ci0jZW5kaWYgLyog VE5DT0RFICovCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotCXJzZXFnb3RbcnNlcWwtMV0gPSAoY2hh cikgKHggJiAweDdmKTsgLyogR290IGEgY2hhcmFjdGVyICovCi0JYnVyc3QtLTsJCQkvKiBPbmUg bGVzcyB3YWl0aW5nICovCi0JaWYgKHNjcl9lY2hvKSBjb25idWZbY29uY250KytdID0gcnNlcWdv dFtyc2VxbC0xXTsgLyogQnVmZmVyIGl0ICovCi0JaWYgKHNlc2xvZykJCQkvKiBMb2cgaXQgaW4g c2Vzc2lvbiBsb2cgKi8KLSNpZmRlZiBVTklYCi0JICBpZiAoc2Vzc2Z0ICE9IDAgfHwgcnNlcWdv dFtyc2VxbC0xXSAhPSAnXHInKQotI2Vsc2UKLSNpZmRlZiBPU0sKLQkgICAgaWYgKHNlc3NmdCAh PSAwIHx8IHJzZXFnb3RbcnNlcWwtMV0gIT0gJ1wwMTInKQotI2VuZGlmIC8qIE9TSyAqLwotI2Vu ZGlmIC8qIFVOSVggKi8KLQkgICAgICBpZiAocnNlcWdvdFtyc2VxbC0xXSkJLyogRmlsdGVyIG91 dCBOVUxzICovCi0JCXNlc2J1ZltzZXNjbnQrK10gPSByc2VxZ290W3JzZXFsLTFdOwotCWlmICgo aW50KXN0cmxlbihyc2VxdHJhY2UpIDwgU0JVRkwtMiApCi0JICBzdHJjYXQocnNlcXRyYWNlLGRi Y2hyKHJzZXFnb3RbcnNlcWwtMV0pKTsKLQlnb3RfaXQgPSAoIXN0cm5jbXAocnNlcWUsIHJzZXFn b3QsIHJzZXFsKSk7Ci0JaWYgKGJ1cnN0IDw9IDApIHsJCS8qIEZsdXNoIGJ1ZmZlcmVkIG91dHB1 dCAqLwotCSAgICBteWZsc2goKTsKLQkgICAgaWYgKChidXJzdCA9IHR0Y2hrKCkpIDwgMCkgeyAv KiBHZXQgc2l6ZSBvZiBuZXh0IGlucHV0IGJ1cnN0ICovCi0jaWZkZWYgTlRTSUcKLQkJY2tUaHJl YWRFbmQodGhyZWFkaW5mbyk7Ci0jZW5kaWYgLyogTlRTSUcgKi8KLQkJU0lHUkVUVVJOOwotCSAg ICB9Ci0JICAgIC8qIHByZXZlbnQgb3ZlcmZsb3cgb2YgImNvbmJ1ZiIgYW5kICJzZXNidWYiICov Ci0JICAgIGlmIChidXJzdCA+IE1BWEJVUlNUKQotCSAgICAgIGJ1cnN0ID0gTUFYQlVSU1Q7Ci0J fQotICAgIH0KLSNpZmRlZiBOVFNJRwotICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOwotI2Vu ZGlmIC8qIE5UU0lHICovCi0gICAgU0lHUkVUVVJOOwotfQotCi1zdGF0aWMgU0lHVFlQCi0jaWZk ZWYgQ0tfQU5TSUMKLWZhaWxyc2VxKHZvaWQgKiB0aHJlYWRpbmZvKQotI2Vsc2UgLyogQ0tfQU5T SUMgKi8KLWZhaWxyc2VxKHRocmVhZGluZm8pIFZPSUQgKiB0aHJlYWRpbmZvOwotI2VuZGlmIC8q IENLX0FOU0lDICovCi0vKiBmYWlscnNlcSAqLyB7Ci0gICAgIGdvdF9pdCA9IDA7CQkJLyogVGlt ZWQgb3V0IGhlcmUgKi8KLSAgICAgU0lHUkVUVVJOOwotfQotCi0vKgotICBSZWNlaXZlIHNlcXVl bmNlIC0tIHNlZSBpZiBleHBlY3RlZCByZXNwb25zZSBjb21lcywKLSAgcmV0dXJuIHN1Y2Nlc3Mg KG9yIGZhaWx1cmUpIGluIGdvdF9pdC4KLSovCi1zdGF0aWMgVk9JRAotcmVjdnNlcSgpIHsKLSAg ICBjaGFyICplLCBnb3RbN10sIHRyYWNlW1NCVUZMXTsKLSAgICBpbnQgaSwgbDsKLQotICAgIHNl cXVlbmMoKTsKLSAgICBsID0gKGludClzdHJsZW4oZT1zZXFfYnVmKTsJCS8qIG5vIG1vcmUgdGhh biA3IGNoYXJzIGFsbG93ZWQgKi8KLSAgICBpZiAobCA+IDcpIHsKLQllICs9IGwtNzsKLQlsID0g NzsKLSAgICB9Ci0gICAgdGxvZyhGMTExLCJleHBlY3Rpbmcgc2VxdWVuY2UiLGUsKGxvbmcpIGwp OwotICAgIGlmIChsID09IDApIHsJCQkvKiBudWxsIHNlcXVlbmNlLCBkZWxheSBhIGxpdHRsZSAq LwotCXNsZWVwIChOVUxMX0VYUCk7Ci0JZ290X2l0ID0gMTsKLQl0bG9nKEYxMDAsImdvdCBpdCAo bnVsbCBzZXF1ZW5jZSkiLCIiLDBMKTsKLQlyZXR1cm47Ci0gICAgfQotICAgICp0cmFjZSA9ICdc MCc7Ci0gICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykgZ290W2ldPSdcMCc7Ci0KLSAgICByc2Vx dHJhY2UgPSB0cmFjZTsKLSAgICByc2VxZSA9IGU7Ci0gICAgcnNlcWdvdCA9IGdvdDsKLSAgICBy c2VxbCA9IGw7Ci0KLSAgICBhbHJtX2V4ZWN1dGUoY2tqYWRkcihhbHJtcm5nKSwgZXhwX2Fscm0s IHNjcnRpbWUsIGRvcnNlcSwgZmFpbHJzZXEpOwotCi0gICAgdGxvZyhGMTEwLCJyZWNlaXZlZCBz ZXF1ZW5jZTogIix0cmFjZSwwTCk7Ci0gICAgdGxvZyhGMTAxLCJyZXR1cm5pbmcgd2l0aCBnb3Qt aXQgY29kZSIsIiIsKGxvbmcpIGdvdF9pdCk7Ci0gICAgbXlmbHNoKCk7CQkJCS8qIEZsdXNoIGJ1 ZmZlcmVkIG91dHB1dCAqLwotICAgIHJldHVybjsKLX0KLQotLyoKLSBPdXRwdXQgQSBTZXF1ZW5j ZSBzdGFydGluZyBhdCBwb2ludGVyIHMsCi0gcmV0dXJuIDAgaWYgb2theSwKLSAxIGlmIGZhaWxl ZCB0byByZWFkIChtb2RlbSBoYW5ndXAgb3Igd2hhdGV2ZXIpCi0qLwotc3RhdGljIGludCBvc2Vx cmV0ID0gMDsJCQkvKiBSZXR1cm4gY29kZSBmb3Igb3V0c2VxICovCi0JCQkJCS8qIE91dCBoZXJl IHRvIHByZXZlbnQgY2xvYmJlcmluZyAqLwotCQkJCQkvKiBieSBsb25nam1wLiAqLwotCi1zdGF0 aWMgU0lHVFlQCi0jaWZkZWYgQ0tfQU5TSUMKLWRvb3NlcSh2b2lkICogdGhyZWFkaW5mbykKLSNl bHNlIC8qIENLX0FOU0lDICovCi1kb29zZXEodGhyZWFkaW5mbykgVk9JRCAqIHRocmVhZGluZm87 Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpbnQgbDsKLSAgICBjaGFyICpzYjsKLSNp ZmRlZiBUQ1BTT0NLRVQKLSAgICBleHRlcm4gaW50IHRuX25sbSwgdG5fYl9ubG07Ci0jZW5kaWYg LyogVENQU09DS0VUICovCi0KLSNpZmRlZiBOVFNJRwotICAgIHNldGludCgpOwotICAgIGlmICh0 aHJlYWRpbmZvKSB7CQkJLyogVGhyZWFkIGxvY2FsIHN0b3JhZ2UuLi4gKi8KLQlUbHNTZXRWYWx1 ZShUbHNJbmRleCx0aHJlYWRpbmZvKTsKLSAgICB9Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSNpZmRl ZiBDS19MT0dJTgotI2lmZGVmIE5UCi0jaWZkZWYgSUtTRAotICAgIGlmIChpbnNlcnZlcikKLSAg ICAgIHNldG50Y3JlZHMoKTsKLSNlbmRpZiAvKiBJS1NEICovCi0jZW5kaWYgLyogTlQgKi8KLSNl bmRpZiAvKiBDS19MT0dJTiAqLwotCi0gICAgbCA9IChpbnQpc3RybGVuKHNlcV9idWYpOwotICAg IHRsb2coRjExMSwic2VuZGluZyBzZXF1ZW5jZSAiLHNlcV9idWYsKGxvbmcpIGwpOwotCi0gICAg aWYgKCFzdHJjbXAoc2VxX2J1ZiwiRU9UIikpIHsKLQl0dG9jKGRvcGFyKCdcMDA0JykpOwotCWlm IChzY3JfZWNobykgY29ub2woIjxFT1Q+Iik7Ci0JaWYgKHNlc2xvZyAmJiBkdXBsZXgpCi0gICAg ICAgICAgICBsb2dzdHIoIjxFT1Q+Iiw1KTsKLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAoc2VxX2J1 ZiwiQlJFQUsiKSB8fAotCSAgICAgICAhc3RyY21wKHNlcV9idWYsIlxcYiIpIHx8Ci0JICAgICAg ICFzdHJjbXAoc2VxX2J1ZiwiXFxCIikpIHsKLQl0dHNuZGIoKTsKLQlpZiAoc2NyX2VjaG8pIGNv bm9sKCI8QlJFQUs+Iik7Ci0JaWYgKHNlc2xvZykKLQkgIGxvZ3N0cigie0JSRUFLfSIsNyk7Ci0g ICAgfSBlbHNlIHsKLQlpZiAobCA+IDApIHsKLQkgICAgZm9yICggc2IgPSBzZXFfYnVmOyAqc2I7 IHNiKyspCi0JICAgICAgKnNiID0gZG9wYXIoKnNiKTsJLyogYWRkIHBhcml0eSAqLwotCSAgICB0 dG9sKChDSEFSICopc2VxX2J1ZixsKTsgLyogc2VuZCBpdCAqLwotCSAgICBpZiAoc2NyX2VjaG8g JiYgZHVwbGV4KSB7Ci0jaWZuZGVmIE5PTE9DQUwKLSNpZmRlZiBPUzIKLQkJewkJCS8qIEVjaG8g dG8gZW11bGF0b3IgKi8KLQkJICAgIGNoYXIgKnMgPSBzZXFfYnVmOwotCQkgICAgd2hpbGUgKCpz KSB7Ci0JCQlzY3JpcHR3cnRidWYoKFVTSE9SVCkqcyk7Ci0JCSAgICB9Ci0JCX0KLSNlbmRpZiAv KiBPUzIgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0JCWNvbnhvKGwsc2VxX2J1Zik7Ci0JICAg IH0KLQkgICAgaWYgKHNlc2xvZyAmJiBkdXBsZXgpIC8qIGxvZyBpdCAqLwotCSAgICAgIGxvZ3N0 cihzZXFfYnVmLHN0cmxlbihzZXFfYnVmKSk7Ci0JfQotCWlmICghbm9fY3IpIHsKLQkgICAgdHRv YyggZG9wYXIoQ1IpICk7Ci0jaWZkZWYgVENQU09DS0VUCi0JICAgIGlmIChpc190bikgewotCQlp ZiAoIVRFTE9QVF9NRShURUxPUFRfQklOQVJZKSAmJiB0bl9ubG0gIT0gVE5MX0NSKQotCQkgIHR0 b2MoKGNoYXIpKCh0bl9ubG0gPT0gVE5MX0NSTEYpID8KLQkJCSAgICAgIGRvcGFyKExGKSA6IGRv cGFyKE5VTCkpKTsKLQkJZWxzZSBpZiAoVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpICYmCi0JCQkg KHRuX2JfbmxtID09IFROTF9DUkxGIHx8IHRuX2JfbmxtID09IFROTF9DUk5VTCkpCi0JCSAgdHRv YygoY2hhcikoKHRuX2JfbmxtID09IFROTF9DUkxGKSA/Ci0JCQkgICAgICBkb3BhcihMRikgOiBk b3BhcihOVUwpKSk7Ci0JICAgIH0KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLQkgICAgaWYgKHNl c2xvZyAmJiBkdXBsZXgpCi0JICAgICAgbG9nY2hhcihkb3BhcihDUikpOwotCX0KLSAgICB9Ci0j aWZkZWYgTlRTSUcKLSAgICBja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKLSNlbmRpZiAvKiBOVFNJ RyAqLwotICAgIFNJR1JFVFVSTjsKLX0KLQotU0lHVFlQCi0jaWZkZWYgQ0tfQU5TSUMKLWZhaWxv c2VxKHZvaWQgKiB0aHJlYWRpbmZvKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLWZhaWxvc2VxKHRo cmVhZGluZm8pIFZPSUQgKiB0aHJlYWRpbmZvOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBm YWlsb3NlcSAqLyB7Ci0gICAgIG9zZXFyZXQgPSAtMTsJCS8qIGVsc2UgLS0gYWxhcm0gcmFuZyAq LwotICAgICBTSUdSRVRVUk47Ci19Ci0KLXN0YXRpYyBpbnQKLW91dHNlcSgpIHsKLSAgICBpbnQg ZGVsYXk7Ci0KLSAgICBvc2VxcmV0ID0gMDsJCQkvKiBJbml0aWFsaXplIHJldHVybiBjb2RlICov Ci0gICAgd2hpbGUoMSkgewotCWRlbGF5ID0gc2VxdWVuYygpOwotCWFscm1fZXhlY3V0ZSggY2tq YWRkcihhbHJtcm5nKSwgU05EX0FMUk0sIHNjcnRpbWUsIGRvb3NlcSwgZmFpbG9zZXEgKSA7Ci0K LQlpZiAoIWRlbGF5KQotCSAgcmV0dXJuKG9zZXFyZXQpOwotI2lmbmRlZiBNQUMKLQltc2xlZXAo REVMX01TRUMpOwkJLyogZGVsYXksIGxvb3AgdG8gbmV4dCBzZW5kICovCi0jZW5kaWYgLyogTUFD ICovCi0gICAgfQotfQotCi0KLS8qICBMIE8gRyBJIE4gIC0tICAoaGlzdG9yaWNhbCBtaXNub21l cikgRXhlY3V0ZSB0aGUgU0NSSVBUIGNvbW1hbmQgKi8KLQotaW50Ci1kb2xvZ2luKGNtZHN0cikg Y2hhciAqY21kc3RyOyB7Ci0KLSNpZmRlZiBPUzIKLSNpZmRlZiBOVAotICAgIFNJR1RZUCAoKiBz YXZlYWxtKShpbnQpOwkJLyogU2F2ZSBpbmNvbWluZyBhbGFybSBmdW5jdGlvbiAqLwotI2Vsc2Ug LyogTlQgKi8KLSAgICBTSUdUWVAgKCogdm9sYXRpbGUgc2F2ZWFsbSkoaW50KTsJLyogU2F2ZSBp bmNvbWluZyBhbGFybSBmdW5jdGlvbiAqLwotI2VuZGlmIC8qIE5UICovCi0jZWxzZSAvKiBPUzIg Ki8KLSAgICBTSUdUWVAgKCpzYXZlYWxtKSgpOwkJLyogU2F2ZSBpbmNvbWluZyBhbGFybSBmdW5j dGlvbiAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgIGNoYXIgKmU7Ci0KLSAgICBzID0gY21kc3Ry OwkJCQkvKiBNYWtlIGdsb2JhbCB0byB0aGlzIG1vZHVsZSAqLwotCi0gICAgdGxvZyhGMTAwLGxv Z2ludiwiIiwwTCk7Ci0KLSAgICBpZiAoc3BlZWQgPCAwTCkgc3BlZWQgPSB0dGdzcGQoKTsKLSAg ICBpZiAodHRvcGVuKHR0bmFtZSwmbG9jYWwsbWRtdHlwLDApIDwgMCkgewotCWNrbWFrbXNnKHNl cV9idWYsU0JVRkwsIlNvcnJ5LCBjYW4ndCBvcGVuICIsdHRuYW1lLE5VTEwsTlVMTCk7Ci0JcGVy cm9yKHNlcV9idWYpOwotCXJldHVybigwKTsKLSAgICB9Ci0gICAgLyogV2hldGhlciB0byBlY2hv IHNjcmlwdCBjb21tYW5kcyAuLi4gKi8KLSAgICBzY3JfZWNobyA9ICghcXVpZXQgJiYgIWJhY2tn cmQgJiYgc2VjaG8pOwotI2lmbmRlZiBOT1NQTAotICAgIGlmIChzY3JfZWNobyAmJiBjbWRsdmwg PiAxKSB7Ci0JaWYgKGNtZHN0a1tjbWRsdmxdLnNyYyA9PSBDTURfVEYpCi0JICBzY3JfZWNobyA9 IHRlY2hvOwotCWlmIChjbWRzdGtbY21kbHZsXS5zcmMgPT0gQ01EX01EKQotCSAgc2NyX2VjaG8g PSBtZWNobzsKLSAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICBpZiAoc2NyX2VjaG8pIHsK LSNpZmRlZiBORVRDT05OCi0JaWYgKG5ldHdvcmspCi0JICBwcmludGYoIkV4ZWN1dGluZyBTQ1JJ UFQgdG8gaG9zdCAlcy5cbiIsdHRuYW1lKTsKLQllbHNlCi0jZW5kaWYgLyogTkVUQ09OTiAqLwot CSAgcHJpbnRmKCJFeGVjdXRpbmcgU0NSSVBUIHRocm91Z2ggJXMsIHNwZWVkICVsZC5cbiIsdHRu YW1lLHNwZWVkKTsKLSAgICB9Ci0jaWZkZWYgVE5DT0RFCi0gICAgLyogVEVMTkVUIGlucHV0IG11 c3QgYmUgc2Nhbm5lZCBmb3IgSUFDICovCi0gICAgaXNfdG4gPSAobG9jYWwgJiYgbmV0d29yayAm JiBJU19URUxORVQoKSkgfHwKLQkgICAgKCFsb2NhbCAmJiBzc3RlbG5ldCk7Ci0jZW5kaWYgLyog VE5DT0RFICovCi0KLSAgICAqc2VxX2J1ZiA9IDA7Ci0gICAgZm9yIChlID0gczsgKmU7IGUrKykg Y2tzdHJuY2F0KHNlcV9idWYsZGJjaHIoKmUpLFNCVUZMKTsKLSNpZmRlZiBDT01NRU5UCi0vKiBT a2lwIHRoaXMgYmVjYXVzZSBpdCB0ZW5kcyB0byBjb250YWluIGEgcGFzc3dvcmQuLi4gKi8KLSAg ICBpZiAoc2NyX2VjaG8pIHByaW50ZigiU0NSSVBUIHN0cmluZzogJXNcbiIsc2VxX2J1Zik7Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIHRsb2coRjExMCwiU0NSSVBUIHN0cmluZzogIixzZXFf YnVmLCAwTCk7Ci0KLS8qIENvbmRpdGlvbiBjb25zb2xlIHRlcm1pbmFsIGFuZCBjb21tdW5pY2F0 aW9uIGxpbmUuLi4gKi8KLQotICAgIGlmICh0dHZ0KHNwZWVkLGZsb3cpIDwgMCkgewotCXByaW50 ZigiU29ycnksIENhbid0IGNvbmRpdGlvbiBjb21tdW5pY2F0aW9uIGxpbmVcbiIpOwotCXJldHVy bigwKTsKLSAgICB9Ci0gICAgLyogU2F2ZSBpbml0aWFsIHRpbWVyIGludGVycnVwdCB2YWx1ZSAq LwotICAgIHNhdmVhbG0gPSBzaWduYWwoU0lHQUxSTSxTSUdfSUdOKTsKLQotICAgIGZsdXNoaSgp OwkJCQkvKiBGbHVzaCBzdGFsZSBpbnB1dCAqLwotCi0vKiBzdGFydCBleHBlY3QgLSBzZW5kIHNl cXVlbmNlICovCi0KLSAgICB3aGlsZSAoKnMpIHsJCQkvKiBXaGlsZSBub3QgZG9uZSB3aXRoIGJ1 ZmZlciAqLwotCi0Jd2hpbGUgKCpzICYmIGlzc3BhY2UoKnMpKSBzKys7CS8qIFNraXAgb3ZlciBz ZXBhcmF0aW5nIHdoaXRlc3BhY2VzICovCi0JCQkJCS8qIEdhdGhlciB1cCBleHBlY3Qgc2VxdWVu Y2UgKi8KLQlnb3RfaXQgPSAwOwotCXJlY3ZzZXEoKTsKLQotCXdoaWxlICghZ290X2l0KSB7CQkv KiBIYXZlIGl0IHlldD8gKi8KLQkgICAgaWYgKCpzKysgIT0gJy0nKQkJLyogTm8sIGlzIHRoZXJl IGEgY29uZGl0aW9uYWwgc2VuZD8gKi8KLQkgICAgICBnb3RvIGZhaWxyZXQ7CQkvKiBObywgcmV0 dXJuIGZhaWx1cmUgKi8KLQkgICAgZmx1c2hpKCk7CQkJLyogWWVzLCBmbHVzaCBvdXQgaW5wdXQg YnVmZmVyICovCi0JICAgIGlmIChvdXRzZXEoKSkJCS8qIElmIHVuYWJsZSB0byBzZW5kLCAqLwot CSAgICAgIGdvdG8gZmFpbHJldDsJCS8qIHJldHVybiBmYWlsdXJlLiAqLwotCSAgICBpZiAoKnMr KyAhPSAnLScpCQkvKiBJZiBubyBjb25kaXRpb25hbCByZXNwb25zZSBoZXJlLCAqLwotCSAgICAg IGdvdG8gZmFpbHJldDsJCS8qIHJldHVybiBmYWlsdXJlLiAqLwotCSAgICByZWN2c2VxKCk7CQkJ LyogQWxsIE9LLCByZWFkIHJlc3BvbnNlIGZyb20gaG9zdC4gKi8KLQl9CQkJCS8qIExvb3AgYmFj ayBhbmQgY2hlY2sgZ290X2l0ICovCi0KLQl3aGlsZSAoKnMgJiYgIWlzc3BhY2UoKnMrKykgKSA7 CS8qIFNraXAgb3ZlciBjb25kaXRpb25hbHMgKi8KLQl3aGlsZSAoKnMgJiYgaXNzcGFjZSgqcykp IHMrKzsJLyogU2tpcCBvdmVyIHNlcGFyYXRpbmcgd2hpdGVzcGFjZXMgKi8KLQlmbHVzaGkoKTsJ CQkvKiBGbHVzaCAqLwotCWlmICgqcykgaWYgKG91dHNlcSgpKSBnb3RvIGZhaWxyZXQ7IC8qIElm IGFueSAqLwotICAgIH0KLSAgICBzaWduYWwoU0lHQUxSTSxzYXZlYWxtKTsKLSAgICBpZiAoc2Ny X2VjaG8pIHByaW50ZigiU2NyaXB0IHN1Y2Nlc3NmdWwuXG4iKTsKLSAgICB0bG9nKEYxMDAsIlNj cmlwdCBzdWNjZXNzZnVsLiIsIiIsMEwpOwotICAgIHJldHVybigxKTsKLQotZmFpbHJldDoKLSAg ICBzaWduYWwoU0lHQUxSTSxzYXZlYWxtKTsKLSAgICBpZiAoc2NyX2VjaG8pIHByaW50ZigiU29y cnksIHNjcmlwdCBmYWlsZWRcbiIpOwotICAgIHRsb2coRjEwMCwiU2NyaXB0IGZhaWxlZCIsIiIs MEwpOwotICAgIHJldHVybigwKTsKLX0KLQotLyogIEYgTCBVIFMgSCBJICAtLSAgRmx1c2gsIGJ1 dCBsb2csIFNDUklQVCBpbnB1dCBidWZmZXIgICovCi0KLVZPSUQKLWZsdXNoaSgpIHsKLSAgICBp bnQgbiwgeDsKLSAgICBpZiAoCi0Jc2VzbG9nCQkJCS8qIExvZ2dpbmcgc2Vzc2lvbj8gKi8KLQl8 fCBzY3JfZWNobwkJCS8qIE9yIGNvbnNvbGUgZWNob2luZz8gKi8KLSNpZmRlZiBORVRDT05OCi0j aWZkZWYgVE5DT0RFCi0JLyogVEVMTkVUIGlucHV0IG11c3QgYmUgc2Nhbm5lZCBmb3IgSUFDICov Ci0JfHwgaXNfdG4KLSNlbmRpZiAvKiBUTkNPREUgKi8KLSNlbmRpZiAvKiBORVRDT05OICovCi0J KSB7Ci0gICAgICAgIGlmICgobiA9IHR0Y2hrKCkpIDwgMCkJCS8qIFllcywgYW55dGhpbmcgaW4g YnVmZmVyPyAqLwotCSAgcmV0dXJuOwotCWlmIChuID4gTUFYQlVSU1QpIG4gPSBNQVhCVVJTVDsJ LyogTWFrZSBzdXJlIG5vdCB0b28gbXVjaCwgKi8KLQlteWZsc2goKTsJCQkvKiBhbmQgdGhhdCBi dWZmZXJzIGFyZSBlbXB0eS4gKi8KLQl3aGlsZSAobi0tID4gMCkgewotICAJICAgIHggPSB0dGlu YygwKTsJCS8qIENvbGxlY3QgYSBjaGFyYWN0ZXIgKi8KLSNpZmRlZiBORVRDT05OCi0jaWZkZWYg VE5DT0RFCi0vKiBDaGVjayBmb3IgdGVsbmV0IHByb3RvY29sIG5lZ290aWF0aW9uICovCi0gIAkg ICAgaWYgKGlzX3RuICYmICgoeCAmIDB4ZmYpID09IElBQykgKSB7Ci0JCW15ZmxzaCgpOwkJLyog U3luYyBvdXRwdXQgKi8KLSAgCQlzd2l0Y2ggKHRuX2Rvb3AoKENIQVIpKHggJiAweGZmKSxkdXBs ZXgsdHRpbmMpKSB7Ci0gIAkJICBjYXNlIDI6IGR1cGxleCA9IDA7IGJyZWFrOwotICAJCSAgY2Fz ZSAxOiBkdXBsZXggPSAxOwotCQkgIGRlZmF1bHQ6IGJyZWFrOwotCQl9Ci0KLQkJLyogUmVjYWxj dWxhdGUgZmx1c2ggY291bnQgKi8KLQkJaWYgKChuID0gdHRjaGsoKSkgPCAwKQotCQkgIHJldHVy bjsKLQkJaWYgKG4gPiBNQVhCVVJTVCkgbiA9IE1BWEJVUlNUOwotICAJCWNvbnRpbnVlOwotICAJ ICAgIH0KLSNlbmRpZiAvKiBUTkNPREUgKi8KLSNlbmRpZiAvKiBORVRDT05OICovCi0JICAgIGlm IChzY3JfZWNobykgY29uYnVmW2NvbmNudCsrXSA9IChDSEFSKSB4OyAvKiBidWZmZXIgZm9yIGNv bnNvbGUgKi8KLQkgICAgaWYgKHNlc2xvZykKLSNpZmRlZiBVTklYCi0JICAgICAgaWYgKHNlc3Nm dCAhPSAwIHx8IHggIT0gJ1xyJykKLSNlbHNlCi0jaWZkZWYgT1NLCi0JICAgICAgaWYgKHNlc3Nm dCAhPSAwIHx8IHggIT0gJ1wwMTInKQotI2VuZGlmIC8qIE9TSyAqLwotI2VuZGlmIC8qIFVOSVgg Ki8KLQkJc2VzYnVmW3Nlc2NudCsrXSA9IChDSEFSKSB4OyAvKiBidWZmZXIgZm9yIHNlc3Npb24g bG9nICovCi0gIAl9Ci0JbXlmbHNoKCk7Ci0gICAgfSBlbHNlIHR0Zmx1aSgpOwkJCS8qIE90aGVy d2lzZSBqdXN0IGZsdXNoLiAqLwotfQotCi0jZWxzZSAvKiBOT1NDUklQVCAqLwotY2hhciAqbG9n aW52ID0gIlNjcmlwdCBDb21tYW5kIERpc2FibGVkIjsKLSNlbmRpZiAvKiBOT1NDUklQVCAqLwot I2VuZGlmIC8qIE5PSUNQICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2Nr ZXJtaXQtOS4wLjMwMi9ja3VzaWcuYyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTku MC4zMDIvY2t1c2lnLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0NTU2ZTUuLjAw MDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VzaWcu YworKysgL2Rldi9udWxsCkBAIC0xLDM1NCArMCwwIEBACi1jaGFyICpja3VzaWd2ID0gIlNpZ25h bCBzdXBwb3J0LCA5LjAuMTAwLCAxNiBPY3QgMjAwOSI7Ci0KLS8qIEMgSyBVIFMgSSBHICAtLSAg S2VybWl0IHNpZ25hbCBoYW5kbGluZyBmb3IgVW5peCBhbmQgT1MvMiBzeXN0ZW1zICovCi0KLS8q Ci0gIEF1dGhvcjogSmVmZnJleSBBbHRtYW4gKGphbHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20p LAotICAgICAgICAgICAgU2VjdXJlIEVuZHBvaW50cyBJbmMuLCBOZXcgWW9yayBDaXR5LgotCi0g IENvcHlyaWdodCAoQykgMTk4NSwgMjAwOSwKLSAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2 ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgotICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQu ICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCi0gICAgY29weXJpZ2h0 IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lv bnMuCi0qLwotI2luY2x1ZGUgImNrY3N5bS5oIgotI2luY2x1ZGUgImNrY2FzYy5oIgkJCS8qIEFT Q0lJIGNoYXJhY3RlciBzeW1ib2xzICovCi0jaW5jbHVkZSAiY2tjZGViLmgiCQkJLyogRGVidWcg JiBvdGhlciBzeW1ib2xzICovCi0jaW5jbHVkZSAiY2tja2VyLmgiCQkJLyogS2VybWl0IHN5bWJv bHMgKi8KLSNpbmNsdWRlICJja2NuZXQuaCIJCQkvKiBOZXR3b3JrIHN5bWJvbHMgKi8KLSNpZm5k ZWYgTk9TUEwKLSNpbmNsdWRlICJja3V1c3IuaCIKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaW5j bHVkZSA8c2lnbmFsLmg+Ci0jaWZkZWYgTlQKLSNpbmNsdWRlIDxzZXRqbXBleC5oPgotI2luY2x1 ZGUgPGV4Y3B0Lmg+Ci0jZWxzZSAvKiBOVCAqLwotI2luY2x1ZGUgPHNldGptcC5oPgotI2VuZGlm IC8qIE5UICovCi0jaW5jbHVkZSAiY2tjc2lnLmgiCi0KLSNpZmRlZiBOT0NDVFJBUAotZXh0ZXJu IGNram1wYnVmIGNtamJ1ZjsKLSNlbmRpZiAvKiBOT0NDVFJBUCAqLwotCi0jaWZkZWYgTUFDCi0j ZGVmaW5lIHNpZ25hbCBtc2lnbmFsCi0jZGVmaW5lIFNJR1RZUCBsb25nCi0jZGVmaW5lIGFsYXJt IG1hbGFybQotI2RlZmluZSBTSUdfSUdOIDAKLSNkZWZpbmUgU0lHQUxSTSAxCi0jZGVmaW5lIFNJ R0lOVCAgMgotU0lHVFlQICgqbXNpZ25hbChpbnQgdHlwZSwgU0lHVFlQICgqZnVuYykoaW50KSkp KGludCk7Ci0jZW5kaWYgLyogTUFDICovCi0KLSNpZmRlZiBTVFJBVFVTCi0vKiBXZSBrbm93IHRo ZXNlIGFyZSBzZXQgaGVyZS4gIE1VU1QgdW5zZXQgdGhlbSBiZWZvcmUgdGhlIGRlZmluaXRpb25z LiAqLwotI2RlZmluZSBzaWduYWwgdnNpZ25hbAotI2RlZmluZSBhbGFybSB2YWxhcm0KLVNJR1RZ UCAoKnZzaWduYWwoaW50IHR5cGUsIFNJR1RZUCAoKmZ1bmMpKGludCkpKShpbnQpOwotaW50IHZh bGFybShpbnQgaW50ZXJ2YWwpOwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLQotI2lmZGVmIEFNSUdB Ci0jZGVmaW5lIHNpZ25hbCBhc2lnbmFsCi0jZGVmaW5lIGFsYXJtIGFhbGFybQotI2RlZmluZSBT SUdBTFJNIChfTlVNU0lHKzEpCi0jZGVmaW5lIFNJR1RZUCB2b2lkCi1TSUdUWVAgKCphc2lnbmFs KGludCB0eXBlLCBTSUdUWVAgKCpmdW5jKShpbnQpKSkoaW50KTsKLXVuc2lnbmVkIGFhbGFybSh1 bnNpZ25lZCk7Ci0jZW5kaWYgLyogQU1JR0EgKi8KLQotI2lmZGVmIE5UQVNNCi1EV09SRAotY2tn ZXRJUCh2b2lkKQotewotICAgX19hc20KLSAgIHsKLSAgICAgIG1vdiBlYXgsIGR3b3JkIHB0ciBb ZXNwKzB4MTBdCi0gICAgICBqbXAgY2tnZXRJUCArIDB4MTgKLSAgIH0KLSAgIHJldHVybiAxOwot Ci19Ci0jZW5kaWYgLyogTlRBU00gKi8KLQotI2lmZGVmIE5UCi1EV09SRAotZXhjZXB0aW9uX2Zp bHRlciggdm9pZCApCi17Ci0gICBHZXRFeGNlcHRpb25JbmZvcm1hdGlvbiA7Ci0gICByZXR1cm4o IEVYQ0VQVElPTl9FWEVDVVRFX0hBTkRMRVIgKSA7Ci19Ci12b2lkCi1jcmFzaCggdm9pZCApCi17 Ci0gICBpbnQgeCA9IDAsIHkgPSAwIDsKLSAgICB4IC8geSA7Ci19Ci0jZW5kaWYgLyogTlQgKi8K LQotI2lmbmRlZiBOT0NDVFJBUAotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWNjX2V4ZWN1dGUoIGNr anB0cihzal9idWYpLCBja19zaWdmdW5jIGRvZnVuYywgY2tfc2lnZnVuYyBmYWlsZnVuYyApCi0j ZWxzZQotY2NfZXhlY3V0ZSggc2pfYnVmLCBkb2Z1bmMsIGZhaWxmdW5jKQotICAgIGNranB0cihz al9idWYpOwotICAgIGNrX3NpZ2Z1bmMgZG9mdW5jOwotICAgIGNrX3NpZ2Z1bmMgZmFpbGZ1bmM7 Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGNjX2V4ZWN1dGUgKi8gewotICAgIGludCByYyA9 IDAgOwotI2lmZGVmIE5UQVNNCi0gICBEV09SRCBFaXAsIEVzcCA7Ci0gICAgaXNpbnRlcnJ1cHRl ZCA9IDA7Ci0gICAgc2pfYnVmLT5yZXRjb2RlID0gMCA7Ci0gICAgc2pfYnVmLT5JZCA9IEdldEN1 cnJlbnRUaHJlYWRJZCgpIDsKLSAgICBtZW1zZXQoICZzal9idWYtPmNvbnRleHQsIDAsIHNpemVv ZihDT05URVhUKSApOwotICAgIHNqX2J1Zi0+Y29udGV4dC5Db250ZXh0RmxhZ3MgPSBDT05URVhU X0ZVTEwgOwotI2lmbmRlZiBDT01NRU5UCi0gICAgR2V0VGhyZWFkQ29udGV4dChHZXRDdXJyZW50 VGhyZWFkKCksICYoc2pfYnVmLT5jb250ZXh0KSApIDsKLSAgICBfX2FzbQotICAgIHsKLSAgICAg ICAgICBtb3YgICAgICAgZWN4LGR3b3JkIHB0ciBbc2pfYnVmXQotICAgICAgICAgIG1vdiAgICAg ICBkd29yZCBwdHIgW2VjeCsweGM0XSxlc3AKLSAgICB9Ci0gICBzal9idWYtPmNvbnRleHQuRUZs YWdzID0gNTMwIDsKLSAgIHNqX2J1Zi0+Y29udGV4dC5FaXAgPSBja2dldElQKCkrMHgwQyA7Ci0j ZWxzZSAvKiBDT01NRU5UICovCi0gICBfX2FzbQotICAgewotICAgICAgbW92IGVheCwgZHdvcmQg cHRyIFtzal9idWZdCi0gICAgICBwdXNoIGVheAotICAgICAgbW92IGVheCwgMHhmZmZmZmZmZQot ICAgICAgcHVzaCBlYXgKLSAgICAgIG1vdiBlYXgsIDB4MDAwMDAwMzkKLSAgICAgIG1vdiBlZHgs ZXNwCi0gICAgICBpbnQgMHgyZQotICAgICAgcG9wIGVheAotICAgICAgcG9wIGVheAotICAgfQot I2VuZGlmIC8qIENPTU1FTlQgKi8KLSNlbmRpZiAvKiBOVEFTTSAqLwotICAgIGlmICgKLSNpZmRl ZiBOVEFTTQotICAgICAgICAgaXNpbnRlcnJ1cHRlZAotI2Vsc2UKLQkJIGNrc2V0am1wKGNramRy ZWYoc2pfYnVmKSkKLSNlbmRpZiAvKiBOVEFTTSAqLwotCQkgKSB7Ci0jaWZkZWYgTlRBU00KLSAg ICAgICAgICBfX2FzbQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1vdiBlc3AsIEVT UFRvUmVzdG9yZQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaXNpbnRlcnJ1cHRlZCA9IDAg OwotI2VuZGlmIC8qIE5UQVNNICovCi0gICAgICAgICAgICAoKmZhaWxmdW5jKShOVUxMKSA7Ci0j aWZkZWYgTlRBU00KLSAgICAgICAgICAgICByYyA9IHNqX2J1Zi0+cmV0Y29kZSA7Ci0jZWxzZSAv KiBOVEFTTSAqLwotICAgICAgICAgICAgIHJjID0gLTEgOwotI2VuZGlmICAvKiBOVEFTTSAqLwot ICAgICAgICAgfSBlbHNlIHsKLSNpZmRlZiBOVAotICAgICAgICAgICAgX190cnkgewotICAgICAg ICAgICAgICAgKCpkb2Z1bmMpKE5VTEwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgX19l eGNlcHQoZXhjZXB0aW9uX2ZpbHRlcigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg ZGVidWcoRjEwMCwiY2NfZXhlY3V0ZSBfX2V4Y2VwdCIsIiIsMCk7Ci0gICAgICAgICAgICAgICBk ZWJ1ZyhGMTExLAotCQkgICAgICJleGNlcHRpb25fZmlsdGVyIiwKLQkJICAgICAiX2V4Y2VwdGlv bl9jb2RlIiwKLQkJICAgICBldEV4Y2VwdGlvbkNvZGUoKQotCQkgICAgICk7Ci0gICAgICAgICAg ICAgICBsb25nam1wKGNramRyZWYoc2pfYnVmKSxTSUdJTlQpOwotICAgICAgICAgICAgfQotI2Vs c2UgLyogTlQgKi8KLSAgICAgICAgICAgICgqZG9mdW5jKShOVUxMKTsKLSNlbmRpZiAvKiBOVCAq LwotICAgICAgICAgfQotICAgcmV0dXJuIHJjIDsKLX0KLSNlbmRpZiAvKiBOT0NDVFJBUCAqLwot Ci1pbnQKLSNpZmRlZiBDS19BTlNJQwkJCQkvKiBBTlNJQyBDIGRlY2xhcmF0aW9uLi4uICovCi1h bHJtX2V4ZWN1dGUoY2tqcHRyKHNqX2J1ZiksCi0JICAgICBpbnQgdGltbywKLQkgICAgIGNrX3Np Z2hhbmQgaGFuZGxlciwKLQkgICAgIGNrX3NpZ2Z1bmMgZG9mdW5jLAotCSAgICAgY2tfc2lnZnVu YyBmYWlsZnVuYwotCSAgICAgKQotCi0jZWxzZSAvKiBOb3QgQU5TSUMgQyAuLi4gKi8KLQotYWxy bV9leGVjdXRlKHNqX2J1ZiwKLQkgICAgIHRpbW8sCi0JICAgICBoYW5kbGVyLAotCSAgICAgZG9m dW5jLAotCSAgICAgZmFpbGZ1bmMKLQkgICAgICkKLSAgICBja2pwdHIoc2pfYnVmKTsKLSAgICBp bnQgdGltbzsKLSAgICBja19zaWdoYW5kIGhhbmRsZXI7Ci0gICAgY2tfc2lnZnVuYyBkb2Z1bmM7 Ci0gICAgY2tfc2lnZnVuYyBmYWlsZnVuYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotCi0vKiBh bHJtX2V4ZWN1dGUgKi8gewotCi0gICAgaW50IHJjID0gMDsKLSAgICBpbnQgc2F2YWxybSA9IDA7 Ci1fUFJPVE9UWVAoU0lHVFlQICgqc2F2aGFuZGxlciksIChpbnQpKTsKLQotICAgIHNhdmFscm0g PSBhbGFybSh0aW1vKTsKLSAgICBzYXZoYW5kbGVyID0gc2lnbmFsKFNJR0FMUk0sIGhhbmRsZXIp OwotCi0jaWZkZWYgTlRBU00KLSAgICBzal9idWYtPnJldGNvZGUgPSAwIDsKLSAgICBzal9idWYt PklkID0gR2V0Q3VycmVudFRocmVhZElkKCk7Ci0gICAgbWVtc2V0KCZzal9idWYtPmNvbnRleHQs IDAsIHNpemVvZihDT05URVhUKSk7Ci0gICAgc2pfYnVmLT5jb250ZXh0LkNvbnRleHRGbGFncyA9 IENPTlRFWFRfRlVMTDsKLSNpZm5kZWYgQ09NTUVOVAotICAgIEdldFRocmVhZENvbnRleHQoR2V0 Q3VycmVudFRocmVhZCgpLCAmKHNqX2J1Zi0+Y29udGV4dCkpOwotI2Vsc2UKLSAgIF9fYXNtCi0g ICB7Ci0gICAgICBtb3YgZWF4LCBkd29yZCBwdHIgW3NqX2J1Zl0KLSAgICAgIHB1c2ggZWF4Ci0g ICAgICBtb3YgZWF4LCAweGZmZmZmZmZlCi0gICAgICBwdXNoIGVheAotICAgICAgbW92IGVheCwg MHgwMDAwMDAzOQotICAgICAgbW92IGVkeCxlc3AKLSAgICAgIGludCAweDJlCi0gICAgICBwb3Ag ZWF4Ci0gICAgICBwb3AgZWF4Ci0gICB9Ci0jZW5kaWYKLSAgICBpc2ludGVycnVwdGVkID0gMDsK LSNlbmRpZiAvKiBOVEFTTSAqLwotICAgIGlmICgKLSNpZmRlZiBOVEFTTQotCQkgc2pfYnVmLT5y ZXRjb2RlCi0jZWxzZQotCQkgY2tzZXRqbXAoY2tqZHJlZihzal9idWYpKQotI2VuZGlmIC8qIE5U QVNNICovCi0JCSkgewotCSgqZmFpbGZ1bmMpKE5VTEwpIDsKLQlyYyA9IC0xIDsKLSAgICB9IGVs c2UgewotI2lmZGVmIE5UCi0gICAgICAgX190cnkgewotICAgICAgICAgICgqZG9mdW5jKShOVUxM KSA7Ci0gICAgICAgfQotICAgICAgIF9fZXhjZXB0KCBleGNlcHRpb25fZmlsdGVyKCkgKQotICAg ICAgIHsKLSAgICAgICAgICBkZWJ1ZyhGMTAwLCJhbHJtX2V4ZWN1dGUgX19leGNlcHQiLCIiLDAp OwotICAgICAgICAgIGRlYnVnKEYxMTEsImV4Y2VwdGlvbl9maWx0ZXIiLAotCQkiX2V4Y2VwdGlv bl9jb2RlIiwKLQkJR2V0RXhjZXB0aW9uQ29kZSgpCi0JCSk7Ci0gICAgICAgICAgbG9uZ2ptcChj a2pkcmVmKHNqX2J1ZiksU0lHSU5UKTsKLSAgICAgICB9Ci0jZWxzZSAvKiBOVCAqLwotICAgICAg ICgqZG9mdW5jKShOVUxMKSA7Ci0jZW5kaWYgLyogTlQgKi8KLSAgICB9Ci0gICAgYWxhcm0oc2F2 YWxybSkgOwotICAgIGlmICggc2F2aGFuZGxlciApCi0gICAgICAgIHNpZ25hbCggU0lHQUxSTSwg c2F2aGFuZGxlciApIDsKLSAgICByZXR1cm4gcmMgOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJ QwkJCQkvKiBBTlNJQyBDIGRlY2xhcmF0aW9uLi4uICovCi1jY19hbHJtX2V4ZWN1dGUoY2tqcHRy KHNqX2J1ZiksCi0JCWludCB0aW1vLAotCQlja19zaWdoYW5kIGhhbmRsZXIsCi0JCWNrX3NpZ2Z1 bmMgZG9mdW5jLAotCQlja19zaWdmdW5jIGZhaWxmdW5jCi0JCSkKLQotI2Vsc2UgLyogTm90IEFO U0lDIEMgLi4uICovCi0KLWNjX2Fscm1fZXhlY3V0ZShzal9idWYsCi0JICAgICB0aW1vLAotCSAg ICAgaGFuZGxlciwKLQkgICAgIGRvZnVuYywKLQkgICAgIGZhaWxmdW5jCi0JICAgICApCi0gICAg Y2tqcHRyKHNqX2J1Zik7Ci0gICAgaW50IHRpbW87Ci0gICAgY2tfc2lnaGFuZCBoYW5kbGVyOwot ICAgIGNrX3NpZ2Z1bmMgZG9mdW5jOwotICAgIGNrX3NpZ2Z1bmMgZmFpbGZ1bmM7Ci0jZW5kaWYg LyogQ0tfQU5TSUMgKi8KLQotLyogY2NfYWxybV9leGVjdXRlICovIHsKLQotICAgIGludCByYyA9 IDA7Ci0gICAgaW50IHNhdmFscm0gPSAwOwotX1BST1RPVFlQKFNJR1RZUCAoKnNhdmhhbmRsZXIp LCAoaW50KSk7Ci0gICAgc2F2YWxybSA9IGFsYXJtKHRpbW8pOwotICAgIHNhdmhhbmRsZXIgPSBz aWduYWwoIFNJR0FMUk0sIGhhbmRsZXIgKTsKLQotI2lmZGVmIE5UQVNNCi0gICAgc2pfYnVmLT5y ZXRjb2RlID0gMCA7Ci0gICAgc2pfYnVmLT5JZCA9IEdldEN1cnJlbnRUaHJlYWRJZCgpIDsKLSAg ICBtZW1zZXQoICZzal9idWYtPmNvbnRleHQsIDAsIHNpemVvZihDT05URVhUKSApOwotICAgIHNq X2J1Zi0+Y29udGV4dC5Db250ZXh0RmxhZ3MgPSBDT05URVhUX0ZVTEwgOwotI2lmbmRlZiBDT01N RU5UCi0gICAgR2V0VGhyZWFkQ29udGV4dCggR2V0Q3VycmVudFRocmVhZCgpLCAmKHNqX2J1Zi0+ Y29udGV4dCkgKSA7Ci0jZWxzZQotICAgX19hc20KLSAgIHsKLSAgICAgIG1vdiBlYXgsIGR3b3Jk IHB0ciBbc2pfYnVmXQotICAgICAgcHVzaCBlYXgKLSAgICAgIG1vdiBlYXgsIDB4ZmZmZmZmZmUK LSAgICAgIHB1c2ggZWF4Ci0gICAgICBtb3YgZWF4LCAweDAwMDAwMDM5Ci0gICAgICBtb3YgZWR4 LGVzcAotICAgICAgaW50IDB4MmUKLSAgICAgIHBvcCBlYXgKLSAgICAgIHBvcCBlYXgKLSAgIH0K LSNlbmRpZgotICAgIGlzaW50ZXJydXB0ZWQgPSAwOwotI2VuZGlmIC8qIE5UQVNNICovCi0gICAg aWYgKAotI2lmZGVmIE5UQVNNCi0JCSBzal9idWYtPnJldGNvZGUKLSNlbHNlCi0JCSBja3NldGpt cChja2pkcmVmKHNqX2J1ZikpCi0jZW5kaWYgLyogTlRBU00gKi8KLQkJKSB7Ci0JKCpmYWlsZnVu YykoTlVMTCkgOwotCXJjID0gLTEgOwotICAgIH0gZWxzZSB7Ci0jaWZkZWYgTlQKLSAgICAgICBf X3RyeSB7Ci0gICAgICAgICAgKCpkb2Z1bmMpKE5VTEwpIDsKLSAgICAgICB9Ci0gICAgICAgX19l eGNlcHQoIGV4Y2VwdGlvbl9maWx0ZXIoKSApCi0gICAgICAgewotCSAgIGRlYnVnKEYxMDAsImNj X2Fscm1fZXhlY3V0ZSBfX2V4Y2VwdCIsIiIsMCk7Ci0JICAgZGVidWcoRjExMSwKLQkJICJleGNl cHRpb25fZmlsdGVyIiwKLQkJICJfZXhjZXB0aW9uX2NvZGUiLAotCQkgR2V0RXhjZXB0aW9uQ29k ZSgpCi0JCSApOwotCSAgIGxvbmdqbXAoY2tqZHJlZihzal9idWYpLFNJR0lOVCkgOwotICAgICAg IH0KLSNlbHNlIC8qIE5UICovCi0gICAgICAgKCpkb2Z1bmMpKE5VTEwpIDsKLSNlbmRpZiAvKiBO VCAqLwotICAgIH0KLSAgICBhbGFybShzYXZhbHJtKTsKLSAgICBpZiAoc2F2aGFuZGxlcikKLSAg ICAgIHNpZ25hbChTSUdBTFJNLHNhdmhhbmRsZXIpOwotICAgIHJldHVybihyYyk7Ci19CgpkaWZm IC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VzaWcuaCBi L2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1c2lnLmgKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0ODI5MDAuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAu MzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VzaWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDc5 ICswLDAgQEAKLS8qICBDIEsgVSBTIEkgRyAuIEggICovCi0KLS8qICBEZWZpbml0aW9ucyBhbmQg cHJvdG90eXBlcyBmb3Igc2lnbmFsIGhhbmRsaW5nICAqLwotCi0vKgotICBBdXRob3I6IEplZmZy ZXkgRSBBbHRtYW4gKGphbHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20pLAotICAgICAgICAgICAg U2VjdXJlIEVuZHBvaW50cyBJbmMuLCBOZXcgWW9yayBDaXR5LgotCi0gIENvcHlyaWdodCAoQykg MTk4NSwgMjAwOSwKLSAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBD aXR5IG9mIE5ldyBZb3JrLgotICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2Vy bWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCi0gICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNr Y21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCi0qLwotCi0jaWZk ZWYgQ0tfQU5TSUMKLXR5cGVkZWYgdm9pZCAoKmNrX3NpZ2Z1bmMpKHZvaWQgKik7Ci10eXBlZGVm IHZvaWQgKCpja19zaWdoYW5kKShpbnQpOwotI2Vsc2UKLXR5cGVkZWYgVk9JRCAoKmNrX3NpZ2Z1 bmMpKCk7Ci10eXBlZGVmIFZPSUQgKCpja19zaWdoYW5kKSgpOwotI2VuZGlmIC8qIENLX0FOU0lD ICovCi0KLS8qIE1hY3JvcyBmb3IgUE9TSVggdnMgb2xkLXN0eWxlIHNpZ25hbCBoYW5kbGluZy4g Ki8KLQotI2lmZGVmIENLX1BPU0lYX1NJRwotdHlwZWRlZiBzaWdqbXBfYnVmIGNram1wYnVmOwot I2Vsc2UKLXR5cGVkZWYgam1wX2J1ZiBja2ptcGJ1ZjsKLSNlbmRpZiAvKiBDS19QT1NJWF9TSUcg Ki8KLS8qCi0gIFN1cHBvc2UgeW91IHdhbnQgdG8gcGFzcyB0aGUgYWRkcmVzcyBvZiBhIGptcF9i dWYgYmFyIHRvIGEgZnVuY3Rpb24gZm9vLgotICBTaW5jZSBqbXBfYnVmIGlzIG5vcm1hbGx5IGRl ZmluZWQgKHR5cGVkZWYnZCkgYXMgYW4gYXJyYXksIHlvdSB3b3VsZCBkbwotICBpdCBsaWtlIHRo aXM6ICBmb28oYmFyKSwgd2hlcmUgZm9vID0gZm9vKGptcF9idWYgYmFyKS4gIEJ1dCBzdXBwb3Nl IGEKLSAgam1wX2J1ZiBpcyAoc2F5KSBhIHN0cnVjdCByYXRoZXIgdGhhbiBhbiBhcnJheS4gIFRo ZW4geW91IG11c3QgZG8KLSAgZm9vKCZiYXIpIHdoZXJlIGZvbyBpcyBmb28oam1wX2J1ZiAqIGJh cikuICBUaGlzIGlzIGNvbnRyb2xsZWQgaGVyZSBpbgotICB0aGUgdHJhZGl0aW9uYWwgZmFzaGlv biwgYnkgaWZkZWZzLiAgQnkgZGVmYXVsdCwgd2UgYXNzdW1lIHRoYXQgam1wX2J1ZgotICBpcyBh biBhcnJheS4gIERlZmluZSB0aGUgc3ltYm9sIEpCTk9UQVJSQVkgaWYgam1wX2J1ZiBpcyBub3Qg YW4gYXJyYXkuCi0qLwotI2lmbmRlZiBKQk5PVEFSUkFZCi0jaWZkZWYgTlQKLSNkZWZpbmUgSkJO T1RBUlJBWQotI2VuZGlmIC8qIE5UICovCi0jZW5kaWYgLyogSkJOT1RBUlJBWSAqLwotCi0jaWZk ZWYgSkJOT1RBUlJBWQotdHlwZWRlZiBja2ptcGJ1ZiAqIGNranB0cjsKLSNkZWZpbmUgY2tqYWRk cih4KSAmIHgKLSNkZWZpbmUgY2tqZHJlZih4KSAqIHgKLSNpZmRlZiBDS19QT1NJWF9TSUcKLSNk ZWZpbmUgY2tzZXRqbXAoeCkgc2lnc2V0am1wKHgsMSkKLSNlbHNlCi0jZGVmaW5lIGNrc2V0am1w KHgpIHNldGptcCh4LDEpCi0jZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCi0jZWxzZSAgLyogam1w X2J1ZiBpcyBhbiBhcnJheSAqLwotdHlwZWRlZiBja2ptcGJ1ZiBja2pwdHI7Ci0jZGVmaW5lIGNr amFkZHIoeCkgeAotI2RlZmluZSBja2pkcmVmKHgpIHgKLSNpZmRlZiBDS19QT1NJWF9TSUcKLSNk ZWZpbmUgY2tzZXRqbXAgc2lnc2V0am1wCi0jZWxzZQotI2RlZmluZSBja3NldGptcCBzZXRqbXAK LSNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KLSNlbmRpZiAvKiBKQk5PVEFSUkFZICovCi0KLV9Q Uk9UT1RZUCggaW50IGNjX2V4ZWN1dGUsIChja2pwdHIsIGNrX3NpZ2Z1bmMsIGNrX3NpZ2Z1bmMp ICk7Ci1fUFJPVE9UWVAoIGludCBhbHJtX2V4ZWN1dGUsCi0JICAoY2tqcHRyLAotCSAgIGludCB0 aW1vLAotCSAgIGNrX3NpZ2hhbmQgaGFuZGxlciwKLQkgICBja19zaWdmdW5jLCBja19zaWdmdW5j KSApOwotX1BST1RPVFlQKCBpbnQgY2NfYWxybV9leGVjdXRlLAotCSAgKGNranB0ciwKLQkgICBp bnQgdGltbywKLQkgICBja19zaWdoYW5kIGhhbmRsZXIsCi0JICAgY2tfc2lnZnVuYywKLQkgICBj a19zaWdmdW5jKSApOwotCi0vKiBFbmQgb2YgY2t1c2lnLmggKi8KLQoKZGlmZiAtLWdpdCBhL2Nr ZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dGlvLmMgYi9ja2VybWl0LTku MC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXRpby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwZDc5ZTBjLi4wMDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9j a2VybWl0LTkuMC4zMDIvY2t1dGlvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjA1NCArMCwwIEBA Ci0jZGVmaW5lIENLVVRJT19DCi0KLSNpZmRlZiBhZWdpcwotY2hhciAqY2t4diA9ICJBZWdpcyBD b21tdW5pY2F0aW9ucyBzdXBwb3J0LCA5LjAuMzI2LCAyMCBBdWd1c3QgMjAxMSI7Ci0jZWxzZQot I2lmZGVmIFBsYW45Ci1jaGFyICpja3h2ID0gIlBsYW4gOSBDb21tdW5pY2F0aW9ucyBzdXBwb3J0 LCA5LjAuMzI2LCAyMCBBdWd1c3QgMjAxMSI7Ci0jZWxzZQotY2hhciAqY2t4diA9ICJVTklYIENv bW11bmljYXRpb25zIHN1cHBvcnQsIDkuMC4zMjYsIDIwIEF1Z3VzdCAyMDExIjsKLSNlbmRpZiAv KiBQbGFuOSAqLwotI2VuZGlmIC8qIGFlZ2lzICovCi0KLS8qICBDIEsgVSBUIEkgTyAgKi8KLQot LyogQy1LZXJtaXQgaW50ZXJydXB0LCBjb21tdW5pY2F0aW9ucyBjb250cm9sIGFuZCBJL08gZnVu Y3Rpb25zIGZvciBVTklYICovCi0KLS8qCi0gIEF1dGhvcjogRnJhbmsgZGEgQ3J1eiAoZmRjQGNv bHVtYmlhLmVkdSksCi0gIENvbHVtYmlhIFVuaXZlcnNpdHkgQWNhZGVtaWMgSW5mb3JtYXRpb24g U3lzdGVtcywgTmV3IFlvcmsgQ2l0eS4KLQotICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMTEsCi0g ICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9y ay4KLSAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRY VCBmaWxlIG9yIHRoZQotICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUg Zm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgotKi8KLQotLyoKLSAgTk9URSBUTyBDT05U UklCVVRPUlM6IFRoaXMgZmlsZSwgYW5kIGFsbCB0aGUgb3RoZXIgQy1LZXJtaXQgZmlsZXMsIG11 c3QgYmUKLSAgY29tcGF0aWJsZSB3aXRoIEMgcHJlcHJvY2Vzc29ycyB0aGF0IHN1cHBvcnQgb25s eSAjaWZkZWYsICNlbHNlLCAjZW5kaWYsCi0gICNkZWZpbmUsIGFuZCAjdW5kZWYuICBQbGVhc2Ug ZG8gbm90IHVzZSAjaWYsIGxvZ2ljYWwgb3BlcmF0b3JzLCBvciBvdGhlcgotICBwcmVwcm9jZXNz b3IgZmVhdHVyZXMgaW4gYW55IG9mIHRoZSBwb3J0YWJsZSBDLUtlcm1pdCBtb2R1bGVzLiAgWW91 IGNhbiwKLSAgb2YgY291cnNlLCB1c2UgdGhlc2UgY29uc3RydWN0aW9ucyBpbiBwbGF0Zm9ybS1z cGVjaWZpYyBtb2R1bGVzIHdoZW4gdGhleQotICBhcmUgc3VwcG9ydGVkIGJ5IGFsbCBjb21waWxl cnMvcHJlcHJvY2Vzc29ycyB0aGF0IGNvdWxkIGJlIHVzZWQgb24gdGhhdAotICBwbGF0Zm9ybS4K LSovCi0KLWV4dGVybiBpbnQgbmV0dHlwZTsJCQkvKiBEZWZpbmVkIGluIGNrY21haS5jICovCi1l eHRlcm4gaW50IGR1cGxleDsKLQotLyogSW5jbHVkZXMgKi8KLQotI2luY2x1ZGUgImNrY3N5bS5o IgkJCS8qIFRoaXMgbXVzdCBnbyBmaXJzdCAgICovCi0jaW5jbHVkZSAiY2tjZGViLmgiCQkJLyog VGhpcyBtdXN0IGdvIHNlY29uZCAgKi8KLQotI2lmZGVmIE9TRjEzCi0jaWZkZWYgQ0tfQU5TSUMK LSNpZmRlZiBfTk9fUFJPVE8KLSN1bmRlZiBfTk9fUFJPVE8KLSNlbmRpZiAvKiBfTk9fUFJPVE8g Ki8KLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotI2VuZGlmIC8qIE9TRjEzICovCi0KLSNpZm5kZWYg SFBVWFBSRTY1Ci0jaW5jbHVkZSA8ZXJybm8uaD4JCQkvKiBFcnJvciBudW1iZXIgc3ltYm9scyAq LwotI2Vsc2UKLSNpZm5kZWYgRVJSTk9fSU5DTFVERUQKLSNpbmNsdWRlIDxlcnJuby5oPgkJCS8q IEVycm9yIG51bWJlciBzeW1ib2xzICovCi0jZW5kaWYJLyogRVJSTk9fSU5DTFVERUQgKi8KLSNl bmRpZgkvKiBIUFVYUFJFNjUgKi8KLQotI2lmZGVmIF9fMzg2QlNEX18KLSNkZWZpbmUgRU5PVENP Tk4gNTcKLSNlbHNlCi0jaWZkZWYgX19ic2RpX18KLSNkZWZpbmUgRU5PVENPTk4gNTcKLSNlbHNl Ci0jaWZkZWYgX19GcmVlQlNEX18KLSNkZWZpbmUgRU5PVENPTk4gNTcKLSNlbmRpZiAvKiBfX0Zy ZWVCU0RfXyAqLwotI2VuZGlmIC8qIF9fYnNkaV9fICovCi0jZW5kaWYgLyogX18zODZCU0RfXyAq LwotCi0jaWZkZWYgU0NPX09TUjUwNAotI2RlZmluZSBOQkJZIDgKLSNlbmRpZiAvKiBTQ09fT1NS NTA0ICovCi0KLSNpZmRlZiBQbGFuOQotI2RlZmluZSBTRUxFQ1QKLSNpbmNsdWRlIDxzeXMvdGlt ZS5oPgotI2luY2x1ZGUgPHNlbGVjdC5oPgotI2RlZmluZSBGRF9TRVRTSVpFICgzICogc2l6ZW9m KGxvbmcpICogOCkKLXN0YXRpYyBzdHJ1Y3QgdGltZXZhbCB0djsKLSNlbmRpZiAvKiBQbGFuOSAq LwotCi0jaWZkZWYgQ0xJWAotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYgLyogQ0xJWCAq LwotCi0jaW5jbHVkZSAiY2tjbmV0LmgiCQkJLyogU3ltYm9scyBmb3IgbmV0d29yayB0eXBlcy4g Ki8KLSNpZmRlZiBDS19TU0wKLSNpbmNsdWRlICJja19zc2wuaCIKLSNlbmRpZiAvKiBDS19TU0wg Ki8KLQotLyoKLSAgVGhlIGRpcmVjdG9yeS1yZWxhdGVkIGluY2x1ZGVzIGFyZSBoZXJlIGJlY2F1 c2Ugd2UgbmVlZCB0byB0ZXN0IHNvbWUKLSAgZmlsZS1zeXN0ZW0tcmVsYXRlZCBzeW1ib2xzIHRv IGZpbmQgb3V0IHdoaWNoIHN5c3RlbSB3ZSdyZSBiZWluZyBjb21waWxlZAotICB1bmRlci4gIEZv ciBleGFtcGxlLCBNQVhOQU1MRU4gaXMgZGVmaW5lZCBpbiBCU0Q0LjIgYnV0IG5vdCA0LjEuCi0q LwotI2lmZGVmIFNESVJFTlQJCQkJLyogRGlyZWN0b3J5IGJpdHMuLi4gKi8KLSNkZWZpbmUgRElS RU5UCi0jZW5kaWYgLyogU0RJUkVOVCAqLwotCi0jaWZkZWYgWE5ESVIKLSNpbmNsdWRlIDxzeXMv bmRpci5oPgotI2Vsc2UgLyogIVhORElSICovCi0jaWZkZWYgTkRJUgotI2luY2x1ZGUgPG5kaXIu aD4KLSNlbHNlIC8qICFORElSLCAhWE5ESVIgKi8KLSNpZmRlZiBSVFUKLSNpbmNsdWRlICIvdXNy L2xpYi9uZGlyLmgiCi0jZWxzZSAvKiAhUlRVLCAhTkRJUiwgIVhORElSICovCi0jaWZkZWYgRElS RU5UCi0jaWZkZWYgU0RJUkVOVAotI2luY2x1ZGUgPHN5cy9kaXJlbnQuaD4KLSNlbHNlCi0jaW5j bHVkZSA8ZGlyZW50Lmg+Ci0jZW5kaWYgLyogU0RJUkVOVCAqLwotI2Vsc2UgLyogIVJUVSwgIU5E SVIsICFYTkRJUiwgIURJUkVOVCwgaS5lLiBhbGwgb3RoZXJzICovCi0jaW5jbHVkZSA8c3lzL2Rp ci5oPgotI2VuZGlmIC8qIERJUkVOVCAqLwotI2VuZGlmIC8qIFJUVSAqLwotI2VuZGlmIC8qIE5E SVIgKi8KLSNlbmRpZiAvKiBYTkRJUiAqLwotCi0jaWZkZWYgUU5YCi0jaW5jbHVkZSA8c3lzL2Rl di5oPgotI2VuZGlmIC8qIFFOWCAqLwotCi0jaWZkZWYgSFBVWDUKLSNpZm5kZWYgVENQU09DS0VU Ci0vKiBJIGRvbid0IGtub3cgd2h5IHRoaXMgaXMgbmVlZGVkIGhlcmUgc2luY2Ugd2UgbmV2ZXIg cmVmZXJlbmNlIGJ6ZXJvKCkuICovCi0vKiBCdXQgd2l0aG91dCBpdCBDLUtlcm1pdCB3b24ndCBs aW5rIGluIGFuIEhQLVVYIDUueHggbm9uLVRDUCBidWlsZC4gKi8KLXZvaWQKLWJ6ZXJvKHMsbikg Y2hhciAqczsgaW50IG47IHsKLSAgICBleHRlcm4gY2hhciAqIG1lbXNldCgpOwotICAgIG1lbXNl dChzLDAsbik7Ci19Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0jZW5kaWYgLyogSFBVWDUgKi8K LQotLyogRGVmaW5pdGlvbiBvZiBIWiwgdXNlZCBpbiBtc2xlZXAoKSAqLwotCi0jaWZkZWYgTUlQ UwotI2RlZmluZSBIWiAoIDEwMDAgLyBDTE9DS19USUNLICkKLSNlbHNlICAvKiBNSVBTICovCi0j aWZkZWYgQVRUU1YKLSNpZm5kZWYgTkFQCi0jaWZkZWYgVFJTMTYKLSNkZWZpbmUgSFogKCAxMDAw IC8gQ0xPQ0tfVElDSyApCi0jZW5kaWYgLyogVFJTMTYgKi8KLSNpZmRlZiBOQVBIQUNLCi0jZGVm aW5lIG5hcCh4KSAodm9pZClzeXNjYWxsKDMxMTIsICh4KSkKLSNkZWZpbmUgTkFQCi0jZW5kaWYg LyogTkFQSEFDSyAqLwotI2VuZGlmIC8qIE5BUCAqLwotI2VuZGlmIC8qIEFUVFNWICovCi0jZW5k aWYgLyogTUlQUyAqLwotCi0jaWZkZWYgTV9VTklYCi0jdW5kZWYgTkdST1VQU19NQVgJCS8qIFBy ZXZlbnQgbXVsdGlwbGUgZGVmaW5pdGlvbiB3YXJuaW5ncyAqLwotI2VuZGlmIC8qIE1fVU5JWCAq LwotCi0vKgotICBOT1RFOiBIUC1VWCA4LjAgaGFzIGEgPHN5cy9wb2xsLmg+LCBidXQgdGhlcmUg aXMgbm8gY29ycmVzcG9uZGluZwotICBsaWJyYXJ5IHJvdXRpbmUsIHNvIF9wb2xsIGNvbWVzIHVw IHVuZGVmaW5lZCBhdCBsaW5rIHRpbWUuCi0qLwotI2lmZGVmIENLX1BPTEwKLSNpZm5kZWYgQUlY UlMJCQkvKiBJQk0gQUlYIG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcgKi8KLSNpbmNsdWRlIDxwb2xs Lmg+CQkvKiAic3RhbmRhcmQiIChTVklEKSBpL28gbXVsdGlwbGV4aW5nLCBldGMgKi8KLSNlbHNl IC8qIEFJWFJTICovCi0jaWZkZWYgU1ZSNAkJCS8qIEFJWCAzLjIgaXMgbGlrZSBTVklELi4uICov Ci0jaW5jbHVkZSA8cG9sbC5oPgotI2Vsc2UJCQkJLyogQnV0IEFJWCAzLjEgaXMgbm90IC4uLiAq LwotI2luY2x1ZGUgPHN5cy9wb2xsLmg+CQkvKiBUaGUgaW5jbHVkZSBmaWxlIGlzIGluIGluY2x1 ZGUvc3lzICovCi0jZGVmaW5lIGV2ZW50cyByZXFldmVudHMJLyogQW5kIGl0IGRvZXMgbm90IG1h cCBJQk0tc3BlY2lmaWMgbWVtYmVyICovCi0jZGVmaW5lIHJldmVudHMgcnRuZXZlbnRzCS8qIG5h bWVzIHRvIHRoZSBTeXN0ZW0gViBlcXVpdmFsZW50cyAqLwotI2VuZGlmIC8qIFNWUjQgKi8KLSNl bmRpZiAvKiBBSVhSUyAqLwotI2VuZGlmIC8qIENLX1BPTEwgKi8KLQotI2luY2x1ZGUgPHNpZ25h bC5oPiAgICAgICAgICAgICAgICAgICAgIC8qIFNpZ25hbHMgKi8KLQotLyogRm9yIHNldGptcCBh bmQgbG9uZ2ptcCAqLwotCi0jaWZuZGVmIFpJTE9HCi0jaW5jbHVkZSA8c2V0am1wLmg+Ci0jZWxz ZQotI2luY2x1ZGUgPHNldHJldC5oPgotI2VuZGlmIC8qIFpJTE9HICovCi0KLS8qCi0gIFRoZSBm b2xsb3dpbmcgdGVzdCBkaWZmZXJlbnRpYXRlcyBiZXR3ZWVuIDQuMSBCU0QgYW5kIDQuMiAmIGxh dGVyLgotICBJZiB5b3UgaGF2ZSBhIDQuMUJTRCBzeXN0ZW0gd2l0aCB0aGUgRElSRU5UIGxpYnJh cnksIHRoaXMgdGVzdCBjb3VsZAotICBtaXN0YWtlbmx5IGRpYWdub3NlIDQuMkJTRCBhbmQgdGhl biBsYXRlciBlbmFibGUgdGhlIHVzZSBvZiBzeXN0ZW0gY2FsbHMKLSAgdGhhdCBhcmVuJ3QgZGVm aW5lZC4gIElmIGluZGVlZCB0aGVyZSBhcmUgc3VjaCBzeXN0ZW1zLCB3ZSBjYW4gdXNlIHNvbWUK LSAgb3RoZXIgd2F5IG9mIHRlc3RpbmcgZm9yIDQuMUJTRCwgb3IgYWRkIHlldCBhbm90aGVyIGNv bXBpbGUtdGltZSBzd2l0Y2guCi0qLwotI2lmZGVmIEJTRDQKLSNpZmRlZiBNQVhOQU1MRU4KLSNp Zm5kZWYgRlQyMQkJCQkvKiBFeGNlcHQgZm9yIEZvcnR1bmUuICovCi0jaWZuZGVmIEZUMTgKLSNp Zm5kZWYgQkVMTFYxMAkJCQkvKiBBbmQgQmVsbCBMYWJzIFJlc2VhcmNoIFVOSVggVjEwICovCi0j ZGVmaW5lIEJTRDQyCi0jZW5kaWYgLyogQkVMTFYxMCAqLwotI2VuZGlmIC8qIEZUMTggKi8KLSNl bmRpZiAvKiBGVDIxICovCi0jZW5kaWYgLyogTUFYTkFNTEVOICovCi0jZW5kaWYgLyogQlNENCAq LwotCi0jaWZkZWYgU1VOT1M0MQkJCQkvKiBGcm9tIENocmlzdGlhbiBDb3J0aSAqLwotI2RlZmlu ZSBCU0Q0NE9SUE9TSVgJCQkvKiBVbmkgU3R1dHRnYXJ0ICovCi0jZGVmaW5lIFNWT1JQT1NJWAkJ CS8qIEZlYnJ1YXJ5IDIwMTAgKi8KLSNpbmNsdWRlIDx0ZXJtaW9zLmg+Ci0jaW5jbHVkZSA8c3lz L2lvY3RsLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jZW5k aWYJLyogU1VOT1M0MSAqLwotCi0jaWZkZWYgU05JNTQyCi0jaW5jbHVkZSA8c3lzL2ZpbGlvLmg+ CQkJLyogMjk5IGZvciBGSU9OUkVBRCAqLwotI2VuZGlmCS8qIFNOSTU0MiAqLwotCi0vKgotICBN aW5peCAyLjAgc3VwcG9ydCBhZGRlZCBieSBUZXJyeSBNY0Nvbm5lbGwsCi0gIFN5cmFjdXNlIFVu aXZlcnNpdHkgPHRtY0BiYXJueWFyZC5zeXIuZWR1PgotICBObyBtb3JlIHNndHR5IGludGVyZmFj ZSwgcG9zaXggY29tcGxpYW50LgotKi8KLSNpZmRlZiBNSU5JWDIKLSNkZWZpbmUgX01JTklYICAg LyogTmVlZGVkIGZvciBzb21lIE1pbml4IGhlYWRlciBmaWxlcyAqLwotI2RlZmluZSBCU0Q0NE9S UE9TSVgKLSNkZWZpbmUgU1ZPUlBPU0lYCi0jaWZuZGVmIE1JTklYMwotI2RlZmluZSBEQ0xUSU1F VkFMCi0jZW5kaWYJLyogTUlOSVgzICovCi0jZGVmaW5lIE5PRklMRUgKLSNpbmNsdWRlIDxzeXMv dHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KLSNpbmNsdWRlIDx0ZXJtaW9zLmg+Ci0j aW5jbHVkZSA8bGltaXRzLmg+Ci0jdW5kZWYgVElPQ0dFVEMgICAgLyogZGVmaW5lZCBpbiBzeXMv aW9jdGwuaCwgYnV0IG5vdCByZWFsbHkgc3VwcG9ydGVkICovCi0jZGVmaW5lIFRBTkRFTSAwCi0j ZW5kaWYgLyogTUlOSVgyICovCi0KLS8qCi0gTUlOSVggMS4wIHN1cHBvcnQgYWRkZWQgYnkgQ2hh cmxlcyBIZWRyaWNrLAotIFJ1dGdlcnMgVW5pdmVyc2l0eSA8aGVkcmlja0BhcmFtaXMucnV0Z2Vy cy5lZHU+LgotIE1JTklYIGFsc28gaGFzIFY3IGVuYWJsZWQuCi0qLwotI2lmZGVmIE1JTklYCi0j ZGVmaW5lIFRBTkRFTSAwCi0jZGVmaW5lIE1ZUkVBRAotI2RlZmluZSBOT1NZU0lPQ1RMSAotI2lu Y2x1ZGUgPGxpbWl0cy5oPgotI2VuZGlmIC8qIE1JTklYICovCi0KLSNpZmRlZiBDS19SRURJUgkJ LyogPHN5cy93YWl0Lmg+IG5lZWRlZCBvbmx5IGZvciBSRURJUkVDVCBjb21tYW5kLiAqLwotLyoK LSAgSWYgYW55Ym9keSBjYW4gZmlndXJlIG91dCBob3cgdG8gbWFrZSB0aGlzIHdvcmsgd2l0aCBO ZVhUU1RFUCwgYmUKLSAgbXkgZ3Vlc3QhICAoTmVYVEJsYWgvTmVYVEJsYWgvYnNkL3N5cy93YWl0 LmggZG9lcyBub3QgZGVmaW5lIFdFWElUU1RBVFVTKQotKi8KLSNpZm5kZWYgQ0tfV0FJVF9ICQkJ LyogSWYgd2FpdC5oIG5vdCBhbHJlYWR5IGluY2x1ZGVkLi4uICovCi0jaWZkZWYgT1NGCQkJCS8q IGZvcmNlIE9TRiB0byBzZWxlY3QgUE9TSVggd2FpdCAqLwotI2lmZGVmIF9CU0QJCQkJLyogaW5z dGVhZCBvZiBCU0QgKHNlZSBja2NkZWIuaCkgKi8KLSNkZWZpbmUgQ0tfT1NGX0JTRAotI3VuZGVm IF9CU0QKLSNlbmRpZiAvKiBfQlNEICovCi0jZW5kaWYgLyogT1NGICovCi0jaW5jbHVkZSA8c3lz L3dhaXQuaD4JCQkvKiBJbmNsdWRlIGl0ICovCi0jaWZkZWYgT1NGCi0jaWZkZWYgQ0tfT1NGX0JT RAotI2RlZmluZSBfQlNECQkJCS8qIFJlc3RvcmUgaXQgKi8KLSN1bmRlZiBDS19PU0ZfQlNECi0j ZW5kaWYgLyogQ0tfT1NGX0JTRCAqLwotI2VuZGlmIC8qIE9TRiAqLwotI2VuZGlmIC8qIENLX1dB SVRfSCAqLwotI2VuZGlmIC8qIENLX1JFRElSICovCi0KLSNpbmNsdWRlICJja3V2ZXIuaCIJCQkv KiBWZXJzaW9uIGhlcmFsZCAqLwotY2hhciAqY2t4c3lzID0gSEVSQUxEOwotCi0jaWZkZWYgQ0tf VVRTTkFNRQotI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+Ci0KLSNpZmRlZiBUUlU2NAkJCQkvKiBU cnU2NCBVTklYIDQuMCBhbmQgbGF0ZXIgKi8KLS8qIFZlcmlmaWVkIG9uIFRydTY0IDQuMEYgLSBt aWdodCBicmVhayBvbiA0LjBFIG9yIGVhcmxpZXIgKi8KLSNpbmNsdWRlIDxzeXMvc3lzaW5mby5o PgkJLyogKGRvbid0IGtub3cgYWJvdXQgT1NGLzEgb3IgRFUpICovCi0jaW5jbHVkZSA8bWFjaGlu ZS9oYWxfc3lzaW5mby5oPgotI2VuZGlmIC8qIFRSVTY0ICovCi0KLSNpZmRlZiBTT0xBUklTMjUJ CQkvKiBTb2xhcmlzIDIuNSBhbmQgbGF0ZXIgKi8KLSNpbmNsdWRlIDxzeXMvc3lzdGVtaW5mby5o PgkJLyogKGRvbid0IGtub3cgYWJvdXQgZWFybGllciBvbmVzKSAqLwotI2VuZGlmIC8qIFNPTEFS SVMyNSAqLwotCi0jaWZkZWYgVVc3Ci0jaWZuZGVmIFNZU19OTUxOCi0jZGVmaW5lIFNZU19OTUxO IDI1NwotI2VuZGlmIC8qIE5NTE4gKi8KLSNlbmRpZiAvKiBVVzcgKi8KLSNpZmRlZiBIUFVYOVBM VVMKLXN0YXRpYyBpbnQgaHBpczgwMCA9IDA7Ci0jZW5kaWYgLyogSFBVWDlQTFVTICovCi0jaWZk ZWYgU1lTX05NTE4KLSNkZWZpbmUgQ0tfU1lTTk1MTiBTWVNfTk1MTgotI2Vsc2UKLSNpZmRlZiBf U1lTX05NTE4KLSNkZWZpbmUgQ0tfU1lTTk1MTiBfU1lTX05NTE4KLSNlbHNlCi0jaWZkZWYgVVRT TEVOCi0jZGVmaW5lIENLX1NZU05NTE4gVVRTTEVOCi0jZWxzZQotI2RlZmluZSBDS19TWVNOTUxO IDMxCi0jZW5kaWYgLyogVVRTTEVOICovCi0jZW5kaWYgLyogX1NZU19OTUxOICovCi0jZW5kaWYg LyogU1lTX05NTE4gKi8KLWNoYXIgdW5tX21jaFtDS19TWVNOTUxOKzFdID0geyAnXDAnLCAnXDAn IH07Ci1jaGFyIHVubV9tb2RbQ0tfU1lTTk1MTisxXSA9IHsgJ1wwJywgJ1wwJyB9OwotY2hhciB1 bm1fbmFtW0NLX1NZU05NTE4rMV0gPSB7ICdcMCcsICdcMCcgfTsKLWNoYXIgdW5tX3JlbFtDS19T WVNOTUxOKzFdID0geyAnXDAnLCAnXDAnIH07Ci1jaGFyIHVubV92ZXJbQ0tfU1lTTk1MTisxXSA9 IHsgJ1wwJywgJ1wwJyB9OwotI2VuZGlmIC8qIENLX1VUU05BTUUgKi8KLQotI2lmZGVmIENJRQot I2luY2x1ZGUgPHN0YXQuaD4JCQkvKiBGb3IgY2hhc2luZyBzeW1saW5rcywgZXRjLiAqLwotI2Vs c2UKLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2VuZGlmIC8qIENJRSAqLwotCi0jaWZkZWYgUU5Y CQkJCS8qIDI5OSAqLwotI2lmbmRlZiBJWEFOWQotI2RlZmluZSBJWEFOWSAwCi0jZW5kaWYJLyog SVhBTlkgKi8KLSNlbmRpZgkvKiBRTlggKi8KLQotLyogVVVDUCBsb2NrZmlsZSBtYXRlcmlhbC4u LiAqLwotCi0jaWZuZGVmIE5PVVVDUAotI2lmZGVmIFVTRVRUWUxPQ0sKLSNpZmRlZiBIQVZFX0xP Q0tERVYJCQkvKiBSZWQgSGF0IGJhdWRib3kvbG9ja2RldiAqLwotLyoKLSAgV2F0Y2ggb3V0OiBi YXVkYm95LmggcmVmZXJlbmNlcyBvcGVuKCkgd2l0aG91dCBtYWtpbmcgc3VyZSBpdCBoYXMgYmVl bgotICBkZWNsYXJlZCwgcmVzdWx0aW5nIGluIHdhcm5pbmdzIG9uIGF0IGxlYXN0IFJlZCBIYXQg Ny4zLiAgSXQncyBkZWNsYXJlZCBpbgotICBmY250bC5oLCBidXQgd2UgZG9uJ3QgaW5jbHVkZSB0 aGF0IHVudGlsIGxhdGVyLiAgSW4gdGhpcyBjYXNlIG9ubHksIHdlCi0gIGluY2x1ZGUgaXQgaGVy ZSwgYW5kIHRoZW4gdGhlIHNlY29uZCBpbmNsdWRlIGlzIGhhcm1sZXNzIGJlY2F1c2UgaW4gUmVk IEhhdAotICBMaW51eCAodGhlIG9ubHkgcGxhY2Ugd2hlcmUgeW91IGZpbmQgYmF1ZGJveS5oKSBm Y250bC5oIGlzIHByb3RlY3RlZCBmcm9tCi0gIG11bHRpcGxlIGluY2x1c2lvbiBieSBfRkNOVExf SC4gICAtIGZkYywgMTAgTWF5IDIwMDQuCi0KLSAgTk9URTogQWx0aG91Z2ggTGludXggL3Vzci9z YmluL2xvY2tkZXYgb2J2aWF0ZXMgdGhlIG5lZWQgZm9yIHNldHVpZCBvcgotICBzZXRnaWQgYml0 cyB0byBhY2Nlc3MgdGhlIGxvY2tmaWxlLCBDLUtlcm1pdCB3aWxsIHN0aWxsIG5lZWQgdGhlbSB0 byBhY2Nlc3MKLSAgdGhlIHNlcmlhbCBwb3J0IGl0c2VsZiB1bmxlc3MgdGhlIHBvcnQgaXMgb3Bl biBmb3Igd29ybGQgcmVhZC93cml0ZS4KLSAgTm9ybWFsbHkgc2V0Z2lkIHV1Y3AgZG9lcyB0aGUg dHJpY2suCi0KLSAgRXh0cmE6IEhBVkVfTE9DS0RFViBoYXMgYmVlbiBhZGRlZCBhbHMgb3BlblN1 U0UgPj0gMTEuMyBkb2Vzbid0IHVzZSBiYXVkYm95Ci0gIGJ1dCB0dHlsb2NrLiAgLSBqYiwgMjYg SnVsIDIwMTAKLSovCi0jaW5jbHVkZSA8ZmNudGwuaD4JCQkvKiBUaGlzIGhhcyB0byBjb21lIGJl Zm9yZSBiYXVkYm95ICovCi0jaWZkZWYgSEFWRV9CQVVEQk9ZCQkJLyogUmVkIEhhdCBiYXVkYm95 L2xvY2tkZXYgKi8KLSNpbmNsdWRlIDxiYXVkYm95Lmg+Ci0jZWxzZSAgLyogIUhBVkVfQkFVREJP WSAqLwkJLyogb3BlblN1U0UgbG9jayB2aWEgdHR5bG9jayAqLwotI2luY2x1ZGUgPHR0eWxvY2su aD4KLSNlbmRpZiAgLyogSEFWRV9CQVVEQk9ZICovCi0jZGVmaW5lIExPQ0tfRElSICIvdmFyL2xv Y2siCQkvKiAoZXZlbiB0aG91Z2ggd2UgZG9uJ3QgY2FyZSkgKi8KLQotI2Vsc2UgIC8qICFIQVZF X0xPQ0tERVYgKi8KLQotI2lmZGVmIFVTRV9VVV9MT0NLCi0jaWZkZWYgX19GcmVlQlNEX18KLSNp bmNsdWRlIDxsaWJ1dGlsLmg+CQkJLyogRnJlZUJTRCAqLwotI2Vsc2UKLSNpbmNsdWRlIDx1dGls Lmg+CQkJLyogT3BlbkJTRCAqLwotI2VuZGlmIC8qIEhBVkVfTE9DS0RFViAqLwotI2VuZGlmIC8q IF9fRnJlZUJTRCAqLwotI2VuZGlmIC8qIFVTRV9VVV9MT0NLICovCi0jZWxzZSAgLyogVVNFVFRZ TE9DSyAqLwotCi0vKiBOYW1lIG9mIFVVQ1AgdHR5IGRldmljZSBsb2NrZmlsZSAqLwotCi0jaWZk ZWYgTElOVVhGU1NUTkQKLSNpZm5kZWYgSERCVVVDUAotI2RlZmluZSBIREJVVUNQCi0jZW5kaWYg LyogSERCVVVDUCAqLwotI2VuZGlmIC8qIExJTlVYRlNTVE5EICovCi0KLSNpZmRlZiBBQ1VDTlRS TAotI2RlZmluZSBMQ0tESVIKLSNlbmRpZiAvKiBBQ1VDTlRSTCAqLwotCi0vKgotICBQSURTVFJJ TkcgbWVhbnMgdXNlIEFTQ0lJIHN0cmluZyB0byByZXByZXNlbnQgcGlkIGluIGxvY2tmaWxlLgot Ki8KLSNpZm5kZWYgUElEU1RSSU5HCi0jaWZkZWYgSERCVVVDUAotI2RlZmluZSBQSURTVFJJTkcK LSNlbHNlCi0jaWZkZWYgQlNENDQKLSNkZWZpbmUgUElEU1RSSU5HCi0jZWxzZQotI2lmZGVmIFJU QUlYCi0jZGVmaW5lIFBJRFNUUklORwotI2Vsc2UKLSNpZmRlZiBBSVhSUwotI2RlZmluZSBQSURT VFJJTkcKLSNlbHNlCi0jaWZkZWYgQ09IRVJFTlQKLSNkZWZpbmUgUElEU1RSSU5HCi0jZW5kaWYg LyogQ09IRVJFTlQgKi8KLSNlbmRpZiAvKiBBSVhSUyAqLwotI2VuZGlmIC8qIFJUQUlYICovCi0j ZW5kaWYgLyogQlNENDQgKi8KLSNlbmRpZiAvKiBIREJVVUNQICovCi0jZW5kaWYgLyogUElEU1RS SU5HICovCi0KLS8qIE5vdyB0aGUgUElEU1RSSU5HIGV4Y2VwdGlvbnMuLi4gKi8KLQotI2lmZGVm IFBJRFNUUklORwotI2lmZGVmIEhQVVgKLSN1bmRlZiBQSURTVFJJTkcKLSNlbmRpZiAvKiBIUFVY ICovCi0jZW5kaWYgLyogUElEU1RSSU5HICovCi0KLSNpZmRlZiBfX2JzZGlfXwkJCQkvKiBCU0RJ IChhdCBsZWFzdCB0aHJ1IDEuMSkgKi8KLSNpZmRlZiBQSURTVFJJTkcKLSN1bmRlZiBQSURTVFJJ TkcKLSNlbmRpZiAvKiBQSURTVFJJTkcgKi8KLSNlbmRpZiAvKiBfX2JzZGlfXyAqLwotCi0jaWZk ZWYgT1NGMzIJCQkJLyogRGlnaXRhbCBVTklYIChPU0YvMSkgMy4yICovCi0jaWZkZWYgUElEU1RS SU5HCi0jdW5kZWYgUElEU1RSSU5HCi0jZW5kaWYgLyogUElEU1RSSU5HICovCi0jZW5kaWYgLyog T1NGMzIgKi8KLQotLyoKLSAgTE9DS19ESVIgaXMgdGhlIG5hbWUgb2YgdGhlIGxvY2tmaWxlIGRp cmVjdG9yeS4KLSAgSWYgTE9DS19ESVIgaXMgYWxyZWFkeSBkZWZpbmVkIChlLmcuIG9uIGNvbW1h bmQgbGluZSksIHdlIGRvbid0IGNoYW5nZSBpdC4KLSovCi0KLSNpZm5kZWYgTE9DS19ESVIKLSNp ZmRlZiBNQUNPU1gKLSNkZWZpbmUgTE9DS19ESVIgIi92YXIvc3Bvb2wvbG9jayIKLSNlbmRpZiAv KiBNQUNPU1ggKi8KLSNlbmRpZi8qIExPQ0tfRElSICovCi0KLSNpZm5kZWYgTE9DS19ESVIKLSNp ZmRlZiBCU0Q0NAotI2lmZGVmIF9fMzg2QlNEX18KLSNkZWZpbmUgTE9DS19ESVIgIi92YXIvc3Bv b2wvbG9jayIKLSNlbHNlCi0jaWZkZWYgX19GcmVlQlNEX18KLSNkZWZpbmUgTE9DS19ESVIgIi92 YXIvc3Bvb2wvbG9jayIKLSNlbHNlCi0jaWZkZWYgX19OZXRCU0RfXwotI2RlZmluZSBMT0NLX0RJ UiAiL3Zhci9zcG9vbC9sb2NrIgotI2Vsc2UKLSNpZmRlZiBfX09wZW5CU0RfXwotI2RlZmluZSBM T0NLX0RJUiAiL3Zhci9zcG9vbC9sb2NrIgotI2Vsc2UKLS8qIFNvIHdoaWNoIG9uZXMgaXMgdGhp cyBmb3I/ICovCi0vKiBQcm9iYWJseSBvcmlnaW5hbCA0LjRCU0Qgb24gVmFuZ29naCAqLwotLyog UGx1cyB3aG8ga25vd3MgYWJvdXQgTWFjIE9TIFguLi4gSXQgZG9lc24ndCBldmVuIGhhdmUgYSBj dSBwcm9ncmFtICovCi0jZGVmaW5lIExPQ0tfRElSICIvdmFyL3Nwb29sL3V1Y3AiCi0jZW5kaWYg LyogX19PcGVuQlNEX18gKi8KLSNlbmRpZiAvKiBfX05ldEJTRF9fICovCi0jZW5kaWYgLyogX19G cmVlQlNEX18gKi8KLSNlbmRpZiAvKiBfXzM4NkJTRF9fICovCi0jZWxzZQotI2lmZGVmIERHVVg0 MzAKLSNkZWZpbmUgTE9DS19ESVIgIi92YXIvc3Bvb2wvbG9ja3MiCi0jZWxzZQotI2lmZGVmIEhQ VVgxMAotI2RlZmluZSBMT0NLX0RJUiAiL3Zhci9zcG9vbC9sb2NrcyIKLSNlbHNlCi0jaWZkZWYg UlRBSVgJCQkJLyogSUJNIFJUIFBDIEFJWCAyLjIuMSAqLwotI2RlZmluZSBMT0NLX0RJUiAiL2V0 Yy9sb2NrcyIKLSNlbHNlCi0jaWZkZWYgQUlYUlMKLSNkZWZpbmUgTE9DS19ESVIgIi9ldGMvbG9j a3MiCi0jZWxzZQotI2lmZGVmIElTSUlJCi0jZGVmaW5lIExPQ0tfRElSICIvZXRjL2xvY2tzIgot I2Vsc2UKLSNpZmRlZiBIREJVVUNQCi0jaWZkZWYgTV9TWVM1Ci0jZGVmaW5lIExPQ0tfRElSICIv dXNyL3Nwb29sL3V1Y3AiCi0jZWxzZQotI2lmZGVmIE1fVU5JWAotI2RlZmluZSBMT0NLX0RJUiAi L3Vzci9zcG9vbC91dWNwIgotI2Vsc2UKLSNpZmRlZiBTVlI0Ci0jZGVmaW5lIExPQ0tfRElSICIv dmFyL3Nwb29sL2xvY2tzIgotI2Vsc2UKLSNpZmRlZiBTVU5PUzQKLSNkZWZpbmUgTE9DS19ESVIg Ii92YXIvc3Bvb2wvbG9ja3MiCi0jZWxzZQotI2lmZGVmIExJTlVYRlNTVE5ECi0jZGVmaW5lIExP Q0tfRElSICIvdmFyL2xvY2siOwotI2Vsc2UKLSNkZWZpbmUgTE9DS19ESVIgIi91c3Ivc3Bvb2wv bG9ja3MiCi0jZW5kaWYgLyogTElOVVhGU1NUTkQgKi8KLSNlbmRpZiAvKiBTVU5PUzQgKi8KLSNl bmRpZiAvKiBTVlI0ICovCi0jZW5kaWYgLyogTV9VTklYICovCi0jZW5kaWYgLyogTV9TWVM1ICov Ci0jZWxzZQotI2lmZGVmIExDS0RJUgotI2RlZmluZSBMT0NLX0RJUiAiL3Vzci9zcG9vbC91dWNw L0xDSyIKLSNlbHNlCi0jaWZkZWYgQ09IRVJFTlQKLSNkZWZpbmUgTE9DS19ESVIgIi91c3Ivc3Bv b2wvdXVjcCIKLSNlbHNlCi0jZGVmaW5lIExPQ0tfRElSICIvdXNyL3Nwb29sL3V1Y3AiCi0jZW5k aWYgLyogQ09IRVJFTlQgKi8KLSNlbmRpZiAvKiBMQ0tESVIgKi8KLSNlbmRpZiAvKiBIREJVVUNQ ICovCi0jZW5kaWYgLyogSVNJSUkgKi8KLSNlbmRpZiAvKiBBSVhSUyAqLwotI2VuZGlmIC8qIFJU QUlYICovCi0jZW5kaWYgLyogSFBVWDEwICovCi0jZW5kaWYgLyogREdVWDQzMCAqLwotI2VuZGlm IC8qIEJTRDQ0ICovCi0jZW5kaWYgLyogIUxPQ0tfRElSIChvdXRzaWRlIGlmbmRlZikgKi8KLQot I2lmZGVmIE9TRjIJCQkJLyogT1NGLzEgMi4wIG9yIGxhdGVyICovCi0jaWZkZWYgTE9DS19ESVIJ CQkJLyogKG1heWJlIDEueCB0b28sIHdobyBrbm93cy4uLikgKi8KLSN1bmRlZiBMT0NLX0RJUgot I2RlZmluZSBMT0NLX0RJUiAiL3Zhci9zcG9vbC9sb2NrcyIKLSNlbmRpZiAvKiBMT0NLX0RJUiAq LwotI2VuZGlmIC8qIE9TRjIgKi8KLQotI2lmZGVmIENPTU1FTlQKLS8qIFNvcnJ5IG5vIG1vcmUg bG9ja2YoKSAtLSB3ZSBsb2NrIGZpcnN0IGFuZCBUSEVOIG9wZW4gdGhlIGRldmljZS4gKi8KLSNp ZmRlZiBTVlI0Ci0jaWZuZGVmIEJTRDQ0Ci0jaWZuZGVmIExPQ0tGCi0jZGVmaW5lIExPQ0tGCQkJ CS8qIFVzZSBsb2NrZigpIG9uIHR0eSBkZXZpY2UgaW4gU1ZSNCAqLwotI2VuZGlmIC8qIExPQ0tG ICovCi0jZW5kaWYgLyogQlNENDQgKi8KLSNlbmRpZiAvKiBTVlI0ICovCi0jZW5kaWYgLyogQ09N TUVOVCAqLwotCi0jaWZkZWYgTk9MT0NLRgkJCQkvKiBCdXQgTk9MT0NLRiBjYW5jZWxzIExPQ0tG ICovCi0jaWZkZWYgTE9DS0YKLSN1bmRlZiBMT0NLRgotI2VuZGlmIC8qIExPQ0tGICovCi0jZW5k aWYgLyogTk9MT0NLRiAqLwotCi0vKiBNb3JlIGFib3V0IHRoaXMgYmVsb3cuLi4gKi8KLQotI2Vu ZGlmIC8qIFVTRVRUWUxPQ0sgKi8KLSNlbmRpZiAvKiBOT1VVQ1AgKi8KLQotLyoKLSAgTVlSRUFE IG1lYW5zIHVzZSBvdXIgaW50ZXJuYWxseSBkZWZpbmVkIG5vbmJsb2NraW5nIGJ1ZmZlcmVkIHJl YWQgcm91dGluZS4KLSovCi0jaWZkZWYgQVRUU1YKLSNkZWZpbmUgTVlSRUFECi0jZW5kaWYgLyog QVRUU1YgKi8KLQotI2lmZGVmIEFUVDczMDAKLSNpZm5kZWYgTVlSRUFECi0jZGVmaW5lIE1ZUkVB RAotI2VuZGlmIC8qIE1ZUkVBRCAqLwotLyogYml0cyBmb3IgYXR0bW9kZW06IGludGVybmFsIG1v ZGVtIGluIHVzZSwgcmVzdGFydCBnZXR0eSAqLwotI2RlZmluZSBJU01PREVNIDEKLSNkZWZpbmUg RE9HRVRZIDUxMgotI2VuZGlmICAvKiBBVFQ3MzAwICovCi0KLSNpZmRlZiBCU0Q0MgotI2RlZmlu ZSBNWVJFQUQKLSNlbmRpZiAvKiBCU0Q0MiAqLwotCi0jaWZkZWYgUE9TSVgKLSNkZWZpbmUgTVlS RUFECi0jZW5kaWYgLyogUE9TSVggKi8KLSNpZmRlZiBfX2JzZGlfXwotI2lmbmRlZiBPX05ERUxB WQotI2RlZmluZSBPX05ERUxBWSBPX05PTkJMT0NLCi0jZW5kaWYgLyogT19OREVMQVkgKi8KLSNl bmRpZiAvKiBfX2JzZGlfXyAqLwotCi0vKgotIFZhcmlhYmxlcyBhdmFpbGFibGUgdG8gb3V0c2lk ZSB3b3JsZDoKLQotICAgZGZ0dHkgIC0tIFBvaW50ZXIgdG8gZGVmYXVsdCB0dHkgbmFtZSBzdHJp bmcsIGxpa2UgIi9kZXYvdHR5Ii4KLSAgIGRmbG9jICAtLSAwIGlmIGRmdHR5IGlzIGNvbnNvbGUs IDEgaWYgZXh0ZXJuYWwgbGluZS4KLSAgIGRmcHJ0eSAtLSBEZWZhdWx0IHBhcml0eQotICAgZGZm bG93IC0tIERlZmF1bHQgZmxvdyBjb250cm9sCi0gICBja3hlY2ggLS0gRmxhZyBmb3Igd2hvIGVj aG9lcyBjb25zb2xlIHR5cGVpbjoKLSAgICAgMSAtIFRoZSBwcm9ncmFtIChzeXN0ZW0gZWNobyBp cyB0dXJuZWQgb2ZmKQotICAgICAwIC0gVGhlIHN5c3RlbSAob3IgZnJvbnQgZW5kLCBvciB0ZXJt aW5hbCkuCi0gICBmdW5jdGlvbnMgdGhhdCB3YW50IHRvIGRvIHRoZWlyIG93biBlY2hvaW5nIHNo b3VsZCBjaGVjayB0aGlzIGZsYWcKLSAgIGJlZm9yZSBkb2luZyBzby4KLQotICAgZmxmbmFtICAt LSBOYW1lIG9mIGxvY2sgZmlsZSwgaW5jbHVkaW5nIGl0cyBwYXRoLCBlLmcuLAotICAgICAgICAg ICAgICAgICIvdXNyL3Nwb29sL3V1Y3AvTENLLi5jdWwwIiBvciAiL2V0Yy9sb2Nrcy90dHk3NyIK LSAgIGxrZmxmbiAgLS0gTmFtZSBvZiBsaW5rIHRvIGxvY2sgZmlsZSwgaW5jbHVkaW5nIGl0cyBw YXRocwotICAgaGFzbG9jayAtLSBGbGFnIHNldCBpZiB0aGlzIGtlcm1pdCBlc3RhYmxpc2hlZCBh IHV1Y3AgbG9jay4KLSAgIGxvY2twaWQgLS0gUElEIG9mIG90aGVyIHByb2Nlc3MgdGhhdCBoYXMg ZGVzaXJlZCBsaW5lIG9wZW4sIGFzIHN0cmluZy4KLSAgIGJhY2tncmQgLS0gRmxhZyBpbmRpY2F0 aW5nIHByb2dyYW0gZXhlY3V0aW5nIGluIGJhY2tncm91bmQgKCAmIG9uCi0gICAgICAgICAgICAg ICAgZW5kIG9mIHNoZWxsIGNvbW1hbmQpLiBVc2VkIHRvIGlnbm9yZSBJTlQgYW5kIFFVSVQgc2ln bmFscy4KLSAgIHJ0dV9idWcgLS0gU2V0IGJ5IHN0cHRyYXAoKS4gIFJUVSB0cmVhdHMgXlogYXMg RU9GIChidXQgb25seSB3aGVuIHdlIGhhbmRsZQotICAgICAgICAgICAgICAgIFNJR1RTVFApCi0K LSBGdW5jdGlvbnMgZm9yIGFzc2lnbmVkIGNvbW11bmljYXRpb24gbGluZSAoZWl0aGVyIGV4dGVy bmFsIG9yIGNvbnNvbGUgdHR5KToKLQotICAgc3lzaW5pdCgpICAgICAgICAgICAgICAgLS0gU3lz dGVtIGRlcGVuZGVudCBwcm9ncmFtIGluaXRpYWxpemF0aW9uCi0gICBzeXNjbGVhbnVwKCkgICAg ICAgICAgICAtLSBTeXN0ZW0gZGVwZW5kZW50IHByb2dyYW0gc2h1dGRvd24KLSAgIHR0b3Blbih0 dG5hbWUsbG9jYWwsbWRtdHlwLHRpbW8pIC0tIE9wZW4gdGhlIG5hbWVkIHR0eSBmb3IgZXhjbHVz aXZlIGFjY2Vzcy4KLSAgIHR0Y2xvcygpICAgICAgICAgICAgICAgIC0tIENsb3NlICYgcmVzZXQg dGhlIHR0eSwgcmVsZWFzaW5nIGFueSBhY2Nlc3MgbG9jay4KLSAgIHR0c3NwZChjcHMpICAgICAg ICAgICAgIC0tIFNldCB0aGUgdHJhbnNtaXNzaW9uIHNwZWVkIG9mIHRoZSB0dHkuCi0gICB0dGdz cGQoKSAgICAgICAgICAgICAgICAtLSBHZXQgKHJlYWQpIHRoZSB0aGUgdHJhbnNtaXNzaW9uIHNw ZWVkIG9mIHRoZSB0dHkuCi0gICB0dHBrdChzcGVlZCxmbG93LHBhcml0eSkgLS0gUHV0IHRoZSB0 dHkgaW4gcGFja2V0IG1vZGUgYW5kIHNldCB0aGUgc3BlZWQuCi0gICB0dHZ0KHNwZWVkLGZsb3cp ICAgICAgICAtLSBQdXQgdGhlIHR0eSBpbiB2aXJ0dWFsIHRlcm1pbmFsIG1vZGUuCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGluIERJQUxJTkcgb3IgQ09OTkVDVEVEIG1vZGVt IGNvbnRyb2wgc3RhdGUuCi0gICB0dHJlcygpICAgICAgICAgICAgICAgICAtLSBSZXN0b3JlIG9y aWdpbmFsIHR0eSBtb2Rlcy4KLSAgIHR0c2NhcnIoY2FycmllcikgICAgICAgIC0tIFNldCBjYXJy aWVyIGNvbnRyb2wgbW9kZSwgb24vb2ZmL2F1dG8uCi0gICB0dGlubChkZXN0LG1heCx0aW1vKSAg ICAtLSBUaW1lZCByZWFkIGxpbmUgZnJvbSB0aGUgdHR5LgotICAgdHRpbmModGltbykgICAgICAg ICAgICAgLS0gVGltZWQgcmVhZCBjaGFyYWN0ZXIgZnJvbSB0dHkuCi0gICBteXJlYWQoKSAgICAg ICAgICAgICAgICAtLSBSYXcgbW9kZSBidWxrIGJ1ZmZlciByZWFkLCBnaXZlcyBzdWJzZXF1ZW50 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzIG9uZSBhdCBhIHRpbWUgYW5k IHNpbXVsYXRlcyBGSU9OUkVBRC4KLSAgIG15dW5yZChjKSAgICAgICAgICAgICAgIC0tIFBsYWNl cyBjIGJhY2sgaW4gYnVmZmVyIHRvIGJlIHJlYWQgKG9uZSBvbmx5KQotICAgdHRjaGsoKSAgICAg ICAgICAgICAgICAgLS0gU2VlIGhvdyBtYW55IGNoYXJhY3RlcnMgaW4gdHR5IGlucHV0IGJ1ZmZl ci4KLSAgIHR0eGluKG4sYnVmKSAgICAgICAgICAgIC0tIFJlYWQgbiBjaGFyYWN0ZXJzIGZyb20g dHR5ICh1bnRpbWVkKS4KLSAgIHR0b2woc3RyaW5nLGxlbmd0aCkgICAgIC0tIFdyaXRlIGEgc3Ry aW5nIHRvIHRoZSB0dHkuCi0gICB0dG9jKGMpICAgICAgICAgICAgICAgICAtLSBXcml0ZSBhIGNo YXJhY3RlciB0byB0aGUgdHR5LgotICAgdHRmbHVpKCkgICAgICAgICAgICAgICAgLS0gRmx1c2gg dHR5IGlucHV0IGJ1ZmZlci4KLSAgIHR0c25kYigpICAgICAgICAgICAgICAgIC0tIFNlbmQgQlJF QUsgc2lnbmFsLgotICAgdHRzbmRsYigpICAgICAgICAgICAgICAgLS0gU2VuZCBMb25nIEJSRUFL IHNpZ25hbC4KLQotICAgdHRsb2NrKHR0bmFtZSkgICAgICAgICAgLS0gIkxvY2siIHR0eSBkZXZp Y2UgYWdhaW5zdCB1dWNwIGNvbGxpc2lvbnMuCi0gICB0dHVubGNrKCkgICAgICAgICAgICAgICAt LSBVbmxvY2sgdHR5IGRldmljZS4KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9y IEFUVDczMDAvVW5peCBQQywgU3lzdGVtIFY6Ci0gICBhdHRkaWFsKHR0bmFtZSxzcGVlZCx0ZWxu YnIpIC0tIGRpYWxzIEFUVDczMDAvVW5peCBQQyBpbnRlcm5hbCBtb2RlbQotICAgb2ZmZ2V0dHko dHRuYW1lKSAgICAgICAgLS0gVHVybnMgb2ZmIGdldHR5KDFtKSBmb3IgY29tbXMgbGluZQotICAg b25nZXR0eSh0dG5hbWUpICAgICAgICAgLS0gUmVzdG9yZXMgZ2V0dHkoKSB0byBjb21tcyBsaW5l Ci0qLwotCi0vKgotRnVuY3Rpb25zIGZvciBjb25zb2xlIHRlcm1pbmFsOgotCi0gICBjb25nbSgp ICAgLS0gR2V0IGNvbnNvbGUgdGVybWluYWwgbW9kZXMuCi0gICBjb25jYihlc2MpIC0tIFB1dCB0 aGUgY29uc29sZSBpbiBzaW5nbGUtY2hhcmFjdGVyIHdha2V1cCBtb2RlIHdpdGggbm8gZWNoby4K LSAgIGNvbmJpbihlc2MpIC0tIFB1dCB0aGUgY29uc29sZSBpbiBiaW5hcnkgKHJhdykgbW9kZS4K LSAgIGNvbnJlcygpICAtLSBSZXN0b3JlIHRoZSBjb25zb2xlIHRvIG1vZGUgb2J0YWluZWQgYnkg Y29uZ20oKS4KLSAgIGNvbm9jKGMpICAtLSBVbmJ1ZmZlcmVkIG91dHB1dCwgb25lIGNoYXJhY3Rl ciB0byBjb25zb2xlLgotICAgY29ub2wocykgIC0tIFVuYnVmZmVyZWQgb3V0cHV0LCBudWxsLXRl cm1pbmF0ZWQgc3RyaW5nIHRvIHRoZSBjb25zb2xlLgotICAgY29ub2xhKHMpIC0tIFVuYnVmZmVy ZWQgb3V0cHV0LCBhcnJheSBvZiBzdHJpbmdzIHRvIHRoZSBjb25zb2xlLgotICAgY29ueG8obixz KSAtLSBVbmJ1ZmZlcmVkIG91dHB1dCwgbiBjaGFyYWN0ZXJzIHRvIHRoZSBjb25zb2xlLgotICAg Y29uY2hrKCkgIC0tIENoZWNrIGlmIGNoYXJhY3RlcnMgYXZhaWxhYmxlIGF0IGNvbnNvbGUgKGJz ZCA0LjIpLgotICAgICAgICAgICAgICAgIENoZWNrIGlmIGVzY2FwZSBjaGFyICheXCkgdHlwZWQg YXQgY29uc29sZSAoU3lzdGVtIElJSS9WKS4KLSAgIGNvbmluYyh0aW1vKSAgLS0gVGltZWQgZ2V0 IGEgY2hhcmFjdGVyIGZyb20gdGhlIGNvbnNvbGUuCi0gICBjb25na3ModGltbykgIC0tIFRpbWVk IGdldCBrZXlib2FyZCBzY2FuIGNvZGUuCi0gICBjb25pbnQoKSAgLS0gRW5hYmxlIHRlcm1pbmFs IGludGVycnVwdHMgb24gdGhlIGNvbnNvbGUgaWYgbm90IGJhY2tncm91bmQuCi0gICBjb25ub2ko KSAgLS0gRGlzYWJsZSB0ZXJtaW5hbCBpbnRlcnJ1cHRzIG9uIHRoZSBjb25zb2xlIGlmIG5vdCBi YWNrZ3JvdW5kLgotCi1UaW1lIGZ1bmN0aW9ucwotCi0gICBtc2xlZXAobSkgLS0gTWlsbGlzZWNv bmQgc2xlZXAKLSAgIHp0aW1lKCZzKSAtLSBSZXR1cm4gcG9pbnRlciB0byBkYXRlL3RpbWUgc3Ry aW5nCi0gICBydGltZXIoKSAtLSAgUmVzZXQgdGltZXIKLSAgIGd0aW1lcigpICAtLSBHZXQgZWxh cHNlZCB0aW1lIHNpbmNlIGxhc3QgY2FsbCB0byBydGltZXIoKQotKi8KLQotLyogQ29uZGl0aW9u YWwgSW5jbHVkZXMgKi8KLQotLyogV2hldGhlciB0byBpbmNsdWRlIDxzeXMvZmlsZS5oPiAqLwot Ci0jaWZkZWYgUlRVCQkJCS8qIFJUVSBkb2Vzbid0ICovCi0jZGVmaW5lIE5PRklMRUgKLSNlbmRp ZiAvKiBSVFUgKi8KLQotI2lmZGVmIENJRQkJCQkvKiBDSUUgZG9lcy4gKi8KLSN1bmRlZiBOT0ZJ TEVICi0jZW5kaWYgLyogQ0lFICovCi0KLSNpZmRlZiBCU0Q0MQkJCQkvKiA0LjEgQlNEIGRvZXNu J3QgKi8KLSNkZWZpbmUgTk9GSUxFSAotI2VuZGlmIC8qIEJTRDQxICovCi0KLSNpZmRlZiBpczY4 awkJCQkvKiBJbnRlZ3JhdGVkIFNvbHV0aW9ucyA2ODAwMCBVTklYICAqLwotI2RlZmluZSBOT0ZJ TEVICQkJCS8qIGUuZy4gb24gUGxleHV4IFA2MCBhbmQgU3VuLTEgKi8KLSNlbmRpZiAvKiBpczY4 ayAqLwotCi0jaWZkZWYgTUlOSVgJCQkJLyogTUlOSVggKi8KLSNkZWZpbmUgTk9GSUxFSAotI2Vu ZGlmIC8qIE1JTklYICovCi0KLSNpZmRlZiBDT0hFUkVOVAkJCQkvKiBDb2hlcmVudCAqLwotI2Rl ZmluZSBOT0ZJTEVICi0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLQotI2lmbmRlZiBOT0ZJTEVICQkJ CS8qIE5vdyBpbmNsdWRlIGlmIHNlbGVjdGVkLiAqLwotI2luY2x1ZGUgPHN5cy9maWxlLmg+Ci0j ZW5kaWYgLyogTk9GSUxFSCAqLwotCi0vKiBQT1NJWCAqLwotCi0jaWZkZWYgQlNENDRPUlBPU0lY CQkJLyogUE9TSVggdXNlcyB0ZXJtaW9zLmggKi8KLSNkZWZpbmUgVEVSTUlPUwotI2lmZGVmIF9f YnNkaV9fCi0jaWZkZWYgUE9TSVgKLSN1bmRlZiBfUE9TSVhfU09VUkNFCQkJLyogR2V0IGV4dHJh IHN0dWZmIGZyb20gdGVybWlvcy5oICovCi0jZW5kaWYgLyogUE9TSVggKi8KLSNlbmRpZiAvKiBf X2JzZGlfXyAqLwotI2luY2x1ZGUgPHRlcm1pb3MuaD4KLSNpZmRlZiBMSU5VWAotI2luY2x1ZGUg PHN5cy9pb2N0bC5oPgotI2VuZGlmIC8qIExJTlVYICovCi0jaWZkZWYgUU5YMTYKLSNpbmNsdWRl IDxpb2N0bC5oPgotI2Vsc2UKLSNpZmRlZiBRTlg2Ci0jaW5jbHVkZSA8aW9jdGwuaD4KLSNlbmRp ZiAvKiBRTlg2ICovCi0jZW5kaWYgLyogUU5YMTYgKi8KLSNpZmRlZiBfX2JzZGlfXwotI2lmZGVm IFBPU0lYCi0jZGVmaW5lIF9QT1NJWF9TT1VSQ0UKLSNlbmRpZiAvKiBQT1NJWCAqLwotI2VuZGlm IC8qIF9fYnNkaV9fICovCi0jaWZuZGVmIEJTRDQ0CQkJCS8qIFJlYWxseSBQT1NJWCAqLwotI2lm bmRlZiBDS19RTlgzMgkJCS8qIHdhcyBDS19RTlgzMiAqLwotI2RlZmluZSBOT1NZU0lPQ1RMSAkJ CS8qIE5vIGlvY3RsJ3MgYWxsb3dlZC4gKi8KLSN1bmRlZiB1bHRyaXgJCQkJLyogVHVybiBvZmYg YW55IHVsdHJpeCBmZWF0dXJlcy4gKi8KLSNlbmRpZiAvKiBDS19RTlgzMiAqLwotI2VuZGlmIC8q IEJTRDQ0ICovCi0jZW5kaWYgLyogUE9TSVggKi8KLQotLyogU3lzdGVtIElJSSwgU3lzdGVtIFYg Ki8KLQotI2lmZGVmIEFUVFNWCi0jaWZuZGVmIEJTRDQ0Ci0jaWZuZGVmIFBPU0lYCi0jaW5jbHVk ZSA8dGVybWlvLmg+Ci0jZW5kaWYgLyogUE9TSVggKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2lm ZGVmIFRFUk1JT1gKLS8qIE5lZWQgdGhpcyBmb3IgdGVybWlveCBzdHJ1Y3R1cmUsIFJUUy9DVFMg YW5kIERUUi9DRCBmbG93IGNvbnRyb2wgKi8KLSNpbmNsdWRlIDx0ZXJtaW94Lmg+Ci0gIHN0cnVj dCB0ZXJtaW94IHJjdHN4OwotI2Vsc2UKLSNpZmRlZiBTVEVSTUlPWAotI2lmZGVmIFNDT19PU1I1 MDQKLS8qIFNvcnJ5LCB0aGlzIGlzIHRydWx5IGRpc2d1c3RpbmcgYnV0IGl0J3MgU0NPJ3MgZmF1 bHQuICovCi0jaWZuZGVmIF9TVklEMwotI2RlZmluZSBfQ0tfU1ZJRDNfWAotI2RlZmluZSBfU1ZJ RDMKLSNlbmRpZiAvKiBfU1ZJRDMgKi8KLSNlbmRpZiAvKiBTQ09fT1NSNTA0ICovCi0jaW5jbHVk ZSA8c3lzL3Rlcm1pb3guaD4KLSAgc3RydWN0IHRlcm1pb3ggcmN0c3g7Ci0jaWZkZWYgQ0tfU1ZJ RDNfWAotI3VuZGVmIF9TVklEMwotI3VuZGVmIENLX1NWSUQzX1gKLSNlbmRpZiAvKiBDS19TVklE M19YICovCi0jZW5kaWYgLyogU1RFUk1JT1ggKi8KLSNlbmRpZiAvKiBURVJNSU9YICovCi0jZW5k aWYgLyogQVRUU1YgKi8KLQotI2lmZGVmIENPSEVSRU5UCQkJLyogVXNlIHRlcm1pby5oLCBub3Qg c2d0dHkuaCBmb3IgQ29oZXJlbnQgKi8KLSNpbmNsdWRlIDx0ZXJtaW8uaD4KLSNlbmRpZiAvKiBD T0hFUkVOVCAqLwotCi0jaWZkZWYgTUlOSVgJCQkJLyogTUlOSVggdXNlcyBpb2N0bCdzICovCi0j ZGVmaW5lIE5PU1lTSU9DVExICQkJLyogYnV0IGhhcyBubyA8c3lzL2lvY3RsLmg+ICovCi0jZW5k aWYgLyogTUlOSVggKi8KLQotLyogT3RoZXJzICovCi0KLSNpZm5kZWYgTk9TWVNJT0NUTEgJCQkv KiBPdGhlcnMgdXNlIGlvY3RsKCkgKi8KLSNpZmRlZiBTVU40UzUKLS8qCi0gIFRoaXMgaXMgdG8g Z2V0IHJpZCBvZiBjcHAgd2FybmluZyBtZXNzYWdlcyB0aGF0IG9jY3VyIGJlY2F1c2UgYWxsIG9m Ci0gIHRoZXNlIHN5bWJvbHMgYXJlIGRlZmluZWQgYnkgYm90aCB0ZXJtaW9zLmggYW5kIGlvY3Rs Lmggb24gdGhlIFNVTi4KLSovCi0jdW5kZWYgRUNITwotI3VuZGVmIE5MMAotI3VuZGVmIE5MMQot I3VuZGVmIFRBQjAKLSN1bmRlZiBUQUIxCi0jdW5kZWYgVEFCMgotI3VuZGVmIFhUQUJTCi0jdW5k ZWYgQ1IwCi0jdW5kZWYgQ1IxCi0jdW5kZWYgQ1IyCi0jdW5kZWYgQ1IzCi0jdW5kZWYgRkYwCi0j dW5kZWYgRkYxCi0jdW5kZWYgQlMwCi0jdW5kZWYgQlMxCi0jdW5kZWYgVE9TVE9QCi0jdW5kZWYg RkxVU0hPCi0jdW5kZWYgUEVORElOCi0jdW5kZWYgTk9GTFNICi0jZW5kaWYgLyogU1VONFM1ICov Ci0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0jZW5kaWYgLyogTk9TWVNJT0NUTEggKi8KLS8qCi0g IFdlIHJlYWxseSwgcmVhbGx5LCBSRUFMTFkgd2FudCBGSU9OUkVBRCwgYmVjYXVzZSBpdCBpcyB0 aGUgb25seSB3YXkgdG8gZmluZAotICBvdXQgbm90IGp1c3QgKmlmKiBzdHVmZiBpcyB3YWl0aW5n IHRvIGJlIHJlYWQsIGJ1dCBob3cgbXVjaCwgd2hpY2ggaXMKLSAgY3JpdGljYWwgdG8gb3VyIHNs aWRpbmctd2luZG93IGFuZCBzdHJlYW1pbmcgcHJvY2VkdXJlcywgbm90IHRvIG1lbnRpb24KLSAg ZWZmaWNpZW5jeSBvZiBDT05ORUNULCBldGMuCi0qLwotI2lmZGVmIEJFTExWMTAKLSNpbmNsdWRl IDxzeXMvZmlsaW8uaD4JCQkvKiBGb3IgRklPTlJFQUQgKi8KLSNpZmRlZiBGSU9OUkVBRAotI2Rl ZmluZSBNWVJFQUQKLSNlbmRpZiAvKiBNWVJFQUQgKi8KLSNlbmRpZiAvKiBCRUxMVjEwICovCi0K LSNpZm5kZWYgRklPTlJFQUQKLS8qIEl0IHdhc24ndCBmb3VuZCBpbiBpb2N0bC5oIG9yIHRlcm0q LmggLSB0cnkgdGhlc2UgcGxhY2VzOiAqLwotI2lmZGVmIFVOSVhXQVJFCi0jaW5jbHVkZSA8c3lz L2ZpbGlvLmg+Ci0jZWxzZQotI2lmZGVmIFNPTEFSSVMKLSNpbmNsdWRlIDxzeXMvZmlsaW8uaD4K LSNlbmRpZiAvKiBTT0xBUklTICovCi0jZW5kaWYgLyogVU5JWFdBUkUgKi8KLSNlbmRpZiAvKiBG SU9OUkVBRCAqLwotCi0jaWZkZWYgWEVOSVggLyogV2FzIE1fVU5JWCBidXQgWEVOSVggaW1wbGll cyBNX1VOSVggYW5kIGFwcGxpZXMgdG8gWEVOSVggdG9vICovCi0vKgotICA8c3lzL3NvY2tldC5o PiBpbmNsdWRlZCBhYm92ZSB2aWEgImNrY25ldC5oIiBkZWZpbmVzIEZJT05SRUFEIGFzCi0gIHNv bWV0aGluZy4gIER1ZSB0byB0aGlzLCBpbl9jaGsoKSB1c2VzIHRoZSBGSU9OUkVBRCBpbnN0ZWFk IG9mIFJEQ0hLCi0gIGFuZCB0aGUgaG90IGtleXMgZHVyaW5nIGZpbGUgdHJhbnNmZXIgKFggdG8g Y2FuY2VsIGZpbGUgZXRjKSBkbyBub3QKLSAgd29yayBiZWNhdXNlIEZJT05SRUFEIGRvZXNuJ3Qg d29yayBldmVuIHRob3VnaCBpdCBpcyBkZWZpbmVkLgotCi0gIE5PVEU6IFRoaXMgbWlnaHQgYWxz byBiZSB0cnVlIGVsc2V3aGVyZS4KLSovCi0jaWZkZWYgRklPTlJFQUQKLSN1bmRlZiBGSU9OUkVB RAotI2VuZGlmIC8qIEZJT05SRUFEICovCi0jZW5kaWYgLyogWEVOSVggKi8KLQotI2lmZGVmIENL X1NDT1Y1CQkJCS8qIERpdHRvIGZvciBTQ08gT3BlblNlcnZlciA1LjAgKi8KLSNpZm5kZWYgU0NP X09TUjUwNwkJCS8qIDI5OSAqLwotI2lmZGVmIEZJT05SRUFECi0jdW5kZWYgRklPTlJFQUQKLSNl bmRpZiAvKiBGSU9OUkVBRCAqLwotI2VuZGlmCS8qIFNDT19PU1I1MDcgKi8KLSNlbmRpZiAvKiBD S19TQ09WNSAqLwotCi0jaWZkZWYgU0NPX09TUjUwNwkJCS8qIDI5OSAqLwotI2lmZGVmIFJEQ0hL Ci0jdW5kZWYgUkRDSEsKLSNlbmRpZgkvKiBSRENISyAqLwotI2VuZGlmCS8qIFNDT19PU1I1MDcg Ki8KLQotLyogV2hldGhlciB0byBpbmNsdWRlIDxmY250bC5oPiAqLwotCi0jaWZuZGVmIGlzNjhr CQkJCS8qIE9ubHkgYSBmZXcgZG9uJ3QgaGF2ZSB0aGlzIG9uZS4gKi8KLSNpZm5kZWYgQlNENDEK LSNpZm5kZWYgRlQyMQotI2lmbmRlZiBGVDE4Ci0jaWZuZGVmIENPSEVSRU5UCi0jaW5jbHVkZSA8 ZmNudGwuaD4KLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotI2VuZGlmIC8qIEZUMTggKi8KLSNlbmRp ZiAvKiBGVDIxICovCi0jZW5kaWYgLyogQlNENDEgKi8KLSNlbmRpZiAvKiBub3QgaXM2OGsgKi8K LQotI2lmZGVmIENPSEVSRU5UCi0jaWZkZWYgX0kzODYKLSNpbmNsdWRlIDxmY250bC5oPgotI2Vs c2UKLSNpbmNsdWRlIDxzeXMvZmNudGwuaD4KLSNlbmRpZiAvKiBfSTM4NiAqLwotI2VuZGlmIC8q IENPSEVSRU5UICovCi0KLSNpZmRlZiBBVFQ3MzAwCQkJCS8qIFVuaXggUEMsIGludGVybmFsIG1v ZGVtIGRpYWxlciAqLwotI2luY2x1ZGUgPHN5cy9waG9uZS5oPgotI2VuZGlmIC8qIEFUVDczMDAg Ki8KLQotI2lmZGVmIEhQVVgJCQkJLyogSFAtVVggdmFyaWF0aW9ucy4gKi8KLSNkZWZpbmUgSFBV WEpPQkNUTAotI2luY2x1ZGUgPHN5cy9tb2RlbS5oPgkJCS8qIEhQLVVYIG1vZGVtIHNpZ25hbHMg Ki8KLSNpZmRlZiBocDkwMDBzNTAwCQkJLyogTW9kZWwgNTAwICovCi0jdW5kZWYgSFBVWEpPQkNU TAotI2VuZGlmIC8qIGhwOTAwMHM1MDAgKi8KLSNpZmRlZiBIUFVYUFJFNjUKLSN1bmRlZiBIUFVY Sk9CQ1RMCi10eXBlZGVmIGxvbmcgbWZsYWc7Ci0jZW5kaWYgLyogSFBVWFBSRTY1ICovCi0jaWZk ZWYgSFBVWEpPQkNUTAotI2luY2x1ZGUgPHN5cy9ic2R0dHkuaD4JCQkvKiBIUC1VWCBCZXJrZWxl eSB0dHkgc3VwcG9ydCAqLwotI2VuZGlmIC8qIEhQVVhKT0JDVEwgKi8KLSNlbmRpZiAvKiBIUFVY ICovCi0KLS8qCi0gIFdoaWNoIHRpbWUuaCBmaWxlcyB0byBpbmNsdWRlLi4uIFNlZSBja2NkZWIu aCBmb3IgZGVmYXVsdHMuCi0gIE5vdGUgdGhhdCAwLCAxLCAyLCBvciBhbGwgMyBvZiB0aGVzZSBj YW4gYmUgaW5jbHVkZWQgYWNjb3JkaW5nIHRvCi0gIHRoZSBzeW1ib2wgZGVmaW5pdGlvbnMuCi0q LwotI2lmbmRlZiBOT1RJTUVICi0jaWZkZWYgVElNRUgKLSNpbmNsdWRlIDx0aW1lLmg+Ci0jZW5k aWYgLyogVElNRUggKi8KLSNlbmRpZiAvKiBOT1RJTUVIICovCi0KLSNpZm5kZWYgTk9TWVNUSU1F SAotI2lmZGVmIFNZU1RJTUVICi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZiAvKiBTWVNU SU1FSCAqLwotI2VuZGlmIC8qIE5PU1lTVElNRUggKi8KLQotI2lmbmRlZiBOT1NZU1RJTUVCSAot I2lmZGVmIFNZU1RJTUVCSAotI2luY2x1ZGUgPHN5cy90aW1lYi5oPgotI2VuZGlmIC8qIFNZU1RJ TUVCSCAqLwotI2VuZGlmIC8qIE5PU1lTVElNRUJIICovCi0KLSNpZm5kZWYgTk9EQ0xUSU1FVkFM Ci0jaWZkZWYgRENMVElNRVZBTAotLyoKLSAgSW4gY2VydGFpbiBQT1NJWCBidWlsZHMgKGxpa2Ug VW5peHdhcmUgNyksIDxbc3lzL110aW1lLmg+IHJlZnVzZXMgdG8KLSAgZGVmaW5lIHRoZSBzdHJ1 Y3RzIHdlIG5lZWQgdG8gYWNjZXNzIHRoZSBoaWdoZXIgc3BlZWRzLCBzbyB3ZSBoYXZlIHRvCi0g IGRvIGl0IG91cnNlbHZlcy4KLSovCi1zdHJ1Y3QgdGltZXZhbCB7Ci0gICAgbG9uZyB0dl9zZWM7 Ci0gICAgbG9uZyB0dl91c2VjOwotfTsKLXN0cnVjdCB0aW1lem9uZSB7Ci0gICAgaW50IHR6X21p bnV0ZXN3ZXN0OwotICAgIGludCB0el9kc3R0aW1lOwotfTsKLSNlbmRpZiAvKiBEQ0xUSU1FVkFM ICovCi0jZW5kaWYgLyogTk9EQ0xUSU1FVkFMICovCi0KLSNpZmRlZiBfX2xpbnV4X18KLS8qIFRI SVMgSVMgT0JTT0xFVEUgc2luY2UgYWJvdXQgTGludXggMC45MiAqLwotI2lmZGVmIE9MSU5VWEhJ U1BFRUQKLSNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KLSNlbmRpZiAvKiBPTElOVVhISVNQRUVE ICovCi0jaWZkZWYgX19hbHBoYV9fCQkJLyogTGludXggb24gREVDIEFscGhhICovCi0jaWZuZGVm IF9fR0xJQkNfXwkJCS8qIEJ1dCBub3Qgd2l0aCBnbGliYyAqLwotI2luY2x1ZGUgPGFzbS90ZXJt aW9zLmg+Ci0jZW5kaWYgLyogX19HTElCQ19fICovCi0jZW5kaWYgLyogX19hbHBoYV9fICovCi0j ZW5kaWYgLyogX19saW51eF9fICovCi0KLSNpZmRlZiBOT0lFWFRFTgkJCQkvKiBUaGlzIGlzIGJy b2tlbiBvbiBzb21lIHN5c3RlbXMgKi8KLSN1bmRlZiBJRVhURU4JCQkJLyogbGlrZSBDb252ZXgv T1MgOS4xICovCi0jZW5kaWYgLyogTk9JRVhURU4gKi8KLSNpZm5kZWYgSUVYVEVOCQkJCS8qIFR1 cm4gb2ZmIF5PL15WIHByb2Nlc3NpbmcuICovCi0jZGVmaW5lIElFWFRFTiAwCQkJLyogTmVlZGVk LCBhdCBsZWFzdCwgb24gQlNESS4gKi8KLSNlbmRpZiAvKiBJRVhURU4gKi8KLS8qCi0gIFBpY2sg dXAgZGVmaW5pdGlvbnMgbmVlZGVkIGZvciBzZWxlY3QoKSBpZiB3ZSBkb24ndCBoYXZlIHRoZW0g YWxyZWFkeS4KLSAgTm9ybWFsbHkgdGhleSBjb21lIGZyb20gPHN5cy90eXBlcy5oPiBidXQgc29t ZSBzeXN0ZW1zIGdldCB0aGVtIGZyb20KLSAgPHN5cy9zZWxlY3QuaD4uLi4gIFJhdGhlciB0aGFu IGhhcmR3aXJlIGFsbCBvZiB0aGVtIGludG8gdGhlIHNvdXJjZSwgd2UKLSAgaW5jbHVkZSBpdCBp ZiBTRUxFQ1RfSCBpcyBkZWZpbmVkIGluIGNvbXBpbGUtdGltZSBDRkxBR1MuCi0qLwotI2lmbmRl ZiBTQ09fT1NSNTA0Ci0jaWZkZWYgU0VMRUNUX0gKLSNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+Ci0j ZW5kaWYgLyogU0VMRUNUX0ggKi8KLSNlbmRpZiAvKiBTQ09fT1NSNTA0ICovCi0KLSNpZmRlZiBh ZWdpcwotI2luY2x1ZGUgIi9zeXMvaW5zL2Jhc2UuaW5zLmMiCi0jaW5jbHVkZSAiL3N5cy9pbnMv ZXJyb3IuaW5zLmMiCi0jaW5jbHVkZSAiL3N5cy9pbnMvaW9zLmlucy5jIgotI2luY2x1ZGUgIi9z eXMvaW5zL3Npby5pbnMuYyIKLSNpbmNsdWRlICIvc3lzL2lucy9wYWQuaW5zLmMiCi0jaW5jbHVk ZSAiL3N5cy9pbnMvdGltZS5pbnMuYyIKLSNpbmNsdWRlICIvc3lzL2lucy9wZm0uaW5zLmMiCi0j aW5jbHVkZSAiL3N5cy9pbnMvcGdtLmlucy5jIgotI2luY2x1ZGUgIi9zeXMvaW5zL2VjMi5pbnMu YyIKLSNpbmNsdWRlICIvc3lzL2lucy90eXBlX3VpZHMuaW5zLmMiCi0jaW5jbHVkZSA8ZGVmYXVs dF9hY2wuaD4KLSN1bmRlZiBUSU9DRVhDTAotI3VuZGVmIEZJT05SRUFECi0jZW5kaWYgLyogYWVn aXMgKi8KLQotI2lmZGVmIHN4YUU1MAkJCQkvKiBQRlUgQ29tcGFjdCBBIFNYL0EgVElTUCBWMTAv TDUwICovCi0jdW5kZWYgRklPTlJFQUQKLSNlbmRpZiAvKiBzeGFFNTAgKi8KLQotLyogVGhlIGZv bGxvd2luZyAjZGVmaW5lcyBhcmUgY2F0Y2gtYWxscyBmb3IgdGhvc2Ugc3lzdGVtcyAqLwotLyog dGhhdCBkaWRuJ3QgaGF2ZSBvciBjb3VsZG4ndCBmaW5kIDxmaWxlLmg+Li4uICovCi0KLSNpZm5k ZWYgRlJFQUQKLSNkZWZpbmUgRlJFQUQgMHgwMQotI2VuZGlmIC8qIEZSRUFEICovCi0KLSNpZm5k ZWYgRldSSVRFCi0jZGVmaW5lIEZXUklURSAweDEwCi0jZW5kaWYgLyogRldSSVRFICovCi0KLSNp Zm5kZWYgT19SRE9OTFkKLSNkZWZpbmUgT19SRE9OTFkgMDAwCi0jZW5kaWYgLyogT19SRE9OTFkg Ki8KLQotLyogVGhpcyBpcyBmb3IgYW5jaWVudCBVbml4ZXMgdGhhdCBkb24ndCBoYXZlIHRoZXNl IHR0eSBzeW1ib2xzIGRlZmluZWQuICovCi0KLSNpZm5kZWYgUEVORElOCi0jZGVmaW5lIFBFTkRJ TiBJQ0FOT04KLSNlbmRpZiAvKiBQRU5ESU4gKi8KLSNpZm5kZWYgRkxVU0hPCi0jZGVmaW5lIEZM VVNITyBJQ0FOT04KLSNlbmRpZiAvKiBGTFVTSE8gKi8KLSNpZm5kZWYgRVhUUFJPQwotI2RlZmlu ZSBFWFRQUk9DIElDQU5PTgotI2VuZGlmIC8qIEVYVFBST0MgKi8KLQotI2lmZGVmIFNWT1JQT1NJ WAotLyoKLSAgTW9kZW0gc2lnbmFscyBhcmUgYWxzbyBmb3JiaWRkZW4gaW4gdGhlIFBPU0lYIHdv cmxkLiAgQnV0IHNvbWUgUE9TSVgtYmFzZWQKLSAgcGxhdGZvcm1zIGxldCB1cyBhdCB0aGVtIGFu eXdheSBpZiB3ZSBrbm93IHdoZXJlIHRvIGxvb2suCi0qLwotI2lmbmRlZiBORUVETURNREVGUwot LyogRG9lc24ndCB3b3JrIGZvciBMaW51eCAqLwotI2lmZGVmIFVOSVhXQVJFNwotI2RlZmluZSBO RUVETURNREVGUwotI2VuZGlmIC8qIFVOSVhXQVJFNyAqLwotI2VuZGlmIC8qIE5FRURNRE1ERUZT ICovCi0KLSNpZmRlZiBORUVETURNREVGUwotI2lmbmRlZiBUSU9DTUdFVAotI2RlZmluZSBUSU9D TUdFVCAoKCd0Jzw8OCl8MjkpCi0jZW5kaWYgLyogVElPQ01HRVQgKi8KLQotI2lmbmRlZiBUSU9D TV9EVFIKLSNkZWZpbmUgVElPQ01fRFRSIDB4MDAwMgotI2VuZGlmIC8qIFRJT0NNX0RUUiAqLwot I2lmbmRlZiBUSU9DTV9SVFMKLSNkZWZpbmUgVElPQ01fUlRTIDB4MDAwNAotI2VuZGlmIC8qIFRJ T0NNX1JUUyAqLwotI2lmbmRlZiBUSU9DTV9DVFMKLSNkZWZpbmUgVElPQ01fQ1RTIDB4MDAyMAot I2VuZGlmIC8qIFRJT0NNX0NUUyAqLwotI2lmbmRlZiBUSU9DTV9DQVIKLSNkZWZpbmUgVElPQ01f Q0FSIDB4MDA0MAotI2VuZGlmIC8qIFRJT0NNX0NBUiAqLwotI2lmbmRlZiBUSU9DTV9STkcKLSNk ZWZpbmUgVElPQ01fUk5HIDB4MDA4MAotI2VuZGlmIC8qIFRJT0NNX1JORyAqLwotI2lmbmRlZiBU SU9DTV9EU1IKLSNkZWZpbmUgVElPQ01fRFNSIDB4MDEwMAotI2VuZGlmIC8qIFRJT0NNX0RTUiAq LwotI2VuZGlmIC8qIE5FRURNRE1ERUZTICovCi0jZW5kaWYgLyogU1ZPUlBPU0lYICovCi0KLS8q IERlY2xhcmF0aW9ucyAqLwotCi0jaWZkZWYgT1hPUwotI3VuZGVmIFRDR0VUQQotI3VuZGVmIFRD U0VUQQotI3VuZGVmIFRDU0VUQVcKLSN1bmRlZiBUQ1NFVEFGCi0jZGVmaW5lIFRDR0VUQSBUQ0dF VFMKLSNkZWZpbmUgVENTRVRBIFRDU0VUUwotI2RlZmluZSBUQ1NFVEFXIFRDU0VUU1cKLSNkZWZp bmUgVENTRVRBRiBUQ1NFVFNGCi0jZGVmaW5lIHRlcm1pbyB0ZXJtaW9zCi0jZW5kaWYgLyogT1hP UyAqLwotCi0jaWZkZWYgU1ZPUlBPU0lYCQkJLyogQVQmVCBTeXMgViBvciBQT1NJWCAqLwotI2lm ZGVmIFVOSVhXQVJFUE9TSVgJCQkvKiBVbml4V2FyZSA3IFBPU0lYIGJ1aWxkICovCi0vKgotICBJ biBVbml4d2FyZSBQT1NJWCBidWlsZHMsIDxbc3lzL110aW1lLmg+IHJlZnVzZXMgdG8gZGVmaW5l IHRoZQotICBzdHJ1Y3RzIHdlIG5lZWQgdG8gYWNjZXNzIHRoZSBoaWdoZXIgc3BlZWRzLCBzbyB3 ZSBoYXZlIHRvIGRvIGl0Ci0gIG91cnNlbHZlcy4KLSovCi1zdHJ1Y3QgdGltZXZhbCB7Ci0gICAg bG9uZyB0dl9zZWM7Ci0gICAgbG9uZyB0dl91c2VjOwotfTsKLXN0cnVjdCB0aW1lem9uZSB7Ci0g ICAgaW50IHR6X21pbnV0ZXN3ZXN0OwotICAgIGludCB0el9kc3R0aW1lOwotfTsKLSNlbmRpZiAv KiBVTklYV0FSRVBPU0lYICovCi0jZW5kaWYgLyogU1ZPUlBPU0lYICovCi0KLSNpZmRlZiBfX0dO VUNfXwotI2lmZGVmIFhFTklYCi0vKgotICBCZWNhdXNlIFhlbml4IDx0aW1lLmg+IGRvZXNuJ3Qg ZGVjbGFyZSB0aW1lKCkgaWYgd2UncmUgdXNpbmcgZ2NjLgotKi8KLXRpbWVfdCB0aW1lKCk7Ci0j ZW5kaWYgLyogWEVOSVggKi8KLSNlbmRpZiAvKiBfX0dOVUNfXyAqLwotCi0vKiBTcGVjaWFsIHN0 dWZmIGZvciBWNyBpbnB1dCBidWZmZXIgcGVla2luZyAqLwotCi0jaWZkZWYgIFY3Ci1pbnQga21l bVsyXSA9IHsgLTEsIC0xfTsKLWNoYXIgKmluaXRyYXdxKCksICpxYWRkclsyXT17MCwwfTsKLSNk ZWZpbmUgQ09OIDAKLSNkZWZpbmUgVFRZIDEKLSNlbmRpZiAvKiBWNyAqLwotCi0vKiBkZnR0eSBp cyB0aGUgZGV2aWNlIG5hbWUgb2YgdGhlIGRlZmF1bHQgZGV2aWNlIGZvciBmaWxlIHRyYW5zZmVy ICovCi0vKiBkZmxvYyBpcyAwIGlmIGRmdHR5IGlzIHRoZSB1c2VyJ3MgY29uc29sZSB0ZXJtaW5h bCwgMSBpZiBhbiBleHRlcm5hbCBsaW5lICovCi0KLSNpZmRlZiBCRU9TCi0gICAgY2hhciAqIGRm dHR5ID0gTlVMTDsKLSAgICBjaGFyICogZGZtZG0gPSAibm9uZSI7Ci0gICAgaW50IGRmbG9jID0g MDsgICAgICAgICAgICAgICAgICAvKiB0aGF0IGdvZXMgaW4gbG9jYWwgbW9kZSBieSBkZWZhdWx0 ICovCi0jZWxzZQotI2lmbmRlZiBERlRUWQotI2lmZGVmIFBST1ZYMQotICAgIGNoYXIgKmRmdHR5 ID0gIi9kZXYvY29tMS5kb3V0IjsgLyogT25seSBleGFtcGxlIHNvIGZhciBvZiBhIHN5c3RlbSAq LwotICAgIGNoYXIgKmRmbWRtID0gIm5vbmUiOwotICAgIGludCBkZmxvYyA9IDE7ICAgICAgICAg ICAgICAgICAgLyogdGhhdCBnb2VzIGluIGxvY2FsIG1vZGUgYnkgZGVmYXVsdCAqLwotI2Vsc2UK LSAgICBjaGFyICpkZnR0eSA9IENUVE5BTTsgICAgICAgICAgICAgICAvKiBSZW1vdGUgYnkgZGVm YXVsdCwgdXNlIG5vcm1hbCAqLwotICAgIGNoYXIgKmRmbWRtID0gIm5vbmUiOwotICAgIGludCBk ZmxvYyA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsaW5nIHRlcm1pbmFsIG5h bWUuICovCi0jZW5kaWYgLyogUFJPVlgxICovCi0jZWxzZQotICAgIGNoYXIgKmRmdHR5ID0gREZU VFk7CQkvKiBEZWZhdWx0IGxvY2F0aW9uIHNwZWNpZmllZCBvbiAqLwotICAgIGNoYXIgKmRmbWRt ID0gIm5vbmUiOwkJLyogY29tbWFuZCBsaW5lLiAqLwotICAgIGludCBkZmxvYyA9IDE7ICAgICAg ICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsaW5nIHRlcm1pbmFsIG5hbWUuICovCi0jZW5kaWYg LyogREZUVFkgKi8KLSNlbmRpZiAvKiBCRU9TICovCi0KLSNkZWZpbmUgQ09OX1JFUyAwCQkJLyog Q29uc29sZSBzdGF0ZSBpcyAicmVzZXQiICovCi0jZGVmaW5lIENPTl9DQiAgMQkJCS8qIENvbnNv bGUgc3RhdGUgaXMgQ0JSRUFLICovCi0jZGVmaW5lIENPTl9CSU4gMgkJCS8qIENvbnNvbGUgc3Rh dGUgaXMgYmluYXJ5ICovCi0gICAgc3RhdGljIGludCBjb25zdGF0ZSA9IENPTl9SRVM7Ci0KLSNk ZWZpbmUgQ09OSV9SRVMgMAkJCS8qIENvbnNvbGUgaW50ZXJydXB0cyBhcmUgInJlc2V0IiAqLwot I2RlZmluZSBDT05JX0lOVCAxCQkJLyogQ29uc29sZSBpbnR0ZXJ1cHRzIGFyZSBzZXQgKi8KLSNk ZWZpbmUgQ09OSV9OT0kgMgkJCS8qIENvbnNvbGUgaW50dGVydXB0cyBhcmUgZGlzYWJsZWQgKi8K LSAgICBzdGF0aWMgaW50IGNvbmlzdGF0ZSA9IENPTklfUkVTOwotCi0jaWZkZWYgQ0tfU01BTEwK LSNkZWZpbmUgQ09OQlVGU0laIDE1Ci0jZWxzZQotI2RlZmluZSBDT05CVUZTSVogMjU1Ci0jZW5k aWYgLyogQ0tfU01BTEwgKi8KLSAgICBzdGF0aWMgY2hhciBjb25idWZbQ09OQlVGU0laXTsJLyog Q29uc29sZSByZWFkYWhlYWQgYnVmZmVyICovCi0gICAgc3RhdGljIGludCAgY29uYnVmbiA9IDA7 CQkvKiBDaGFycyBpbiByZWFkYWhlYWQgYnVmZmVyICovCi0gICAgc3RhdGljIGNoYXIgKmNvbmJ1 ZnAgPSBjb25idWY7CS8qIE5leHQgY2hhciBpbiByZWFkYWhlYWQgYnVmZmVyICovCi0KLSAgICBj aGFyIGN0dG5hbVtERVZOQU1MRU4rMV0gPSB7ICdcMCcsICdcMCcgfTsgLyogRGV0ZXJtaW5lZCBh dCBydW50aW1lICovCi0KLSNpZmRlZiBSVFUKLSAgICBpbnQgcnR1X2J1ZyA9IDA7CQkgICAgLyog c2V0IHRvIDEgd2hlbiByZXR1cm5pbmcgZnJvbSBTSUdUU1RQICovCi0jZW5kaWYgLyogUlRVICov Ci0KLSAgICBpbnQgZGZwcnR5ID0gREVGUEFSOyAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IHBh cml0eSAoMCA9IG5vbmUpICovCi0gICAgaW50IHR0cHJ0eSA9IDA7ICAgICAgICAgICAgICAgICAg ICAgLyogVGhlIHBhcml0eSB0aGF0IGlzIGluIHVzZS4gKi8KLSAgICBzdGF0aWMgaW50IHR0cG1z ayA9IDB4ZmY7CQkvKiBQYXJpdHkgc3RyaXBwaW5nIG1hc2suICovCi0gICAgaW50IHR0bWRtID0g MDsgICAgICAgICAgICAgICAgICAgICAgLyogTW9kZW0gaW4gdXNlLiAqLwotICAgIGludCB0dGNh cnIgPSBDQVJfQVVUOwkJLyogQ2FycmllciBoYW5kbGluZyBtb2RlLiAqLwotICAgIGludCBkZmZs b3cgPSBGTE9fTk9ORTsJCS8qIERlZmF1bHQgZmxvdyBjb250cm9sIGlzIE5PTkUgKi8KLSAgICBp bnQgYmFja2dyZCA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBBc3N1bWUgaW4gZm9yZWdyb3Vu ZCAobm8gJyYnICkgKi8KLSNpZmRlZiBGX1NFVEZMCi0gICAgaW50IGluaWZsYWdzID0gLTE7CQkJ LyogZmNudGwgZmxhZ3MgZm9yIHR0eWZkICovCi0jZW5kaWYgLyogRl9TRVRGTCAqLwotICAgIGlu dCBmZGZsYWcgPSAwOwkJCS8qIEZsYWcgZm9yIHJlZGlyZWN0ZWQgc3RkaW8gKi8KLSAgICBpbnQg dHRmZGZsZyA9IDA7CQkJLyogT3BlbiBGaWxlIGRlc2NyaXB0b3Igd2FzIGdpdmVuICovCi0gICAg aW50IHR2dGZsZyA9IDA7CQkJLyogRmxhZyB0aGF0IHR0dnQgaGFzIGJlZW4gY2FsbGVkICovCi0g ICAgbG9uZyB0dHNwZWVkID0gLTFMOwkJCS8qIEZvciBzYXZpbmcgc3BlZWQgKi8KLSAgICBpbnQg dHRmbG93ID0gLTk7CQkJLyogRm9yIHNhdmluZyBmbG93ICovCi0gICAgaW50IHR0bGQgPSAtMTsJ CQkvKiBMaW5lIGRpc2NpcGxpbmUgKi8KLQotI2lmZGVmIHNvbnlfbmV3cwotICAgIHN0YXRpYyBp bnQga21fY29uID0gLTE7CQkvKiBLYW5qaSBtb2RlIGZvciBjb25zb2xlIHR0eSAqLwotICAgIHN0 YXRpYyBpbnQga21fZXh0ID0gLTE7CQkvKiBLYW5qaSBtb2RlIGZvciBleHRlcm5hbCBkZXZpY2Ug Ki8KLSNlbmRpZiAvKiBzb255X25ld3MgKi8KLQotI2lmZGVmIFBBUlNFTlNFCi0gICAgc3RhdGlj IGludCBuZWVkcGNoayA9IDE7CQkvKiBOZWVkIHBhcml0eSBjaGVjayAqLwotI2Vsc2UKLSAgICBz dGF0aWMgaW50IG5lZWRwY2hrID0gMDsKLSNlbmRpZiAvKiBQQVJTRU5TRSAqLwotCi0gICAgZXh0 ZXJuIGludCBzdG9wYml0czsJCS8qIFN0b3AgYml0cyAqLwotI2lmZGVmIEhXUEFSSVRZCi0vKgot ICBVbmZvcnR1bmF0ZWx5IHdlIG11c3QgZG8gdGhpcyB3aXRoIGdsb2JhbCB2YXJpYWJsZXMgcmF0 aGVyIHRoYW4gdGhyb3VnaCB0aGUKLSAgdHQuLi4oKSBBUElzIHRvIGF2b2lkIGNoYW5naW5nIHRo ZSBBUElzIGFuZCB0aGUgbWFueSBtb2R1bGVzIHRoYXQgdXNlIHRoZW0uCi0gIElmIGh3cGFyaXR5 ICE9IDAsIHRoaXMgaW5kaWNhdGVzIDggZGF0YSBiaXRzICsgcGFyaXR5LCByYXRoZXIgdGhhbiA3 IGRhdGEKLSAgYml0cyArIHBhcml0eSBvciA4IGRhdGEgYml0cyBhbmQgbm8gcGFyaXR5LCBhbmQg b3ZlcnJpZGVzIHRoZSByZWd1bGFyIHBhcml0eQotICB2YXJpYWJsZSwgd2hpY2ggaXMgY29tbXVu aWNhdGVkIHRvIHRoaXMgbW9kdWxlIHRocnUgdHRwa3QoKSwgYW5kIHJlcHJlc2VudGVkCi0gIGxv Y2FsbHkgYnkgdGhlIHR0cHJ0eSB2YXJpYWJsZS4KLSovCi0gICAgZXh0ZXJuIGludCBod3Bhcml0 eTsJCS8qIEhhcmR3YXJlIHBhcml0eSAqLwotI2VuZGlmIC8qIEhXUEFSSVRZICovCi0KLSNpZmRl ZiBUQ1BTT0NLRVQKLSNpZmRlZiBUQ1BfTk9ERUxBWQotc3RhdGljIGludCBub2RlbGF5X3NhdiA9 IC0xOwotI2VuZGlmIC8qIFRDUF9OT0RFTEFZICovCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0K LXN0YXRpYyBpbnQgc2lnaW50X2lnbiA9IDA7CQkvKiBTSUdJTlQgaXMgaWdub3JlZCAqLwotCi0v KgotICBIYXZpbmcgdGhpcyBtb2R1bGUgcmVseSBvbiBleHRlcm5hbCBnbG9iYWxzIGlzIGJhZCwg YnV0IGZpeGluZyB0aGlzCi0gIHJlcXVpcmVzIG92ZXJoYXVsIG9mIHRoZSBjayp0aW8uYyBtb2R1 bGVzIGZvciBhbGwgdGhlIGRpZmZlcmVudCBvcGVyYXRpbmcKLSAgc3lzdGVtcyBzdXBwb3J0ZWQg YnkgQy1LZXJtaXQuICBMZWZ0IGZvciBhIGZ1dHVyZSByZWxlYXNlLgotKi8KLWV4dGVybiBpbnQg dHRucHJvdG87CQkJLyogRGVmaW5lZCBpbiBja2NuZXQuYyAqLwotZXh0ZXJuIGludCB0dG5ldDsJ CQkvKiBEZWZpbmVkIGluIGNrY25ldC5jICovCi1leHRlcm4gaW50IG5vcHVzaCwgeGZyY2FuLCB4 ZnJjaHIsIHhmcm51bTsgLyogRGVmaW5lZCBpbiBja2NtYWkuYyAqLwotZXh0ZXJuIGludCB4c3Vz cGVuZCwgd2FzY2xvc2VkOwotZXh0ZXJuIGludCBpbnNlcnZlciwgbG9jYWw7Ci0KLWludCBja3hl Y2ggPSAwOyAvKiAwIGlmIHN5c3RlbSBub3JtYWxseSBlY2hvZXMgY29uc29sZSBjaGFyYWN0ZXJz LCBlbHNlIDEgKi8KLQotaW50IGNrbWF4ZmlsZXMgPSAwOwkJCS8qIE1heCBudW1iZXIgb2Ygb3Bl biBmaWxlcyAqLwotCi0jaWZkZWYgQ0tfRU5DUllQVElPTgkJCS8qIEtlcmJlcm9zICovCi0jaW5j bHVkZSAiY2t1YXRoLmgiCi1leHRlcm4gaW50IG1lX2VuY3J5cHQsIHVfZW5jcnlwdDsKLSNlbmRp ZiAvKiBDS19FTkNSWVBUSU9OICovCi0KLS8qIERlY2xhcmF0aW9ucyBvZiB2YXJpYWJsZXMgZ2xv YmFsIHdpdGhpbiB0aGlzIG1vZHVsZSAqLwotCi0jaWZkZWYgVFRMRUJVRgkJCQkvKiBTZWUgY2tj bmV0LmggKi8KLWludCB0dHB1c2ggPSAtMTsKLSNkZWZpbmUgTEVCVUZTSVogNDA5Ngotc3RhdGlj IENIQVIgbGVfYnVmW0xFQlVGU0laXTsKLXN0YXRpYyBpbnQgbGVfc3RhcnQgPSAwLCBsZV9lbmQg PSAwLCBsZV9kYXRhID0gMDsKLSNlbmRpZiAvKiBUVExFQlVGICovCi0KLSNkZWZpbmUgTVNHQlVG X1NJWkUgMTAyNAkJLyogRm9yIGRlYnVnZ2luZyAqLwotc3RhdGljIGNoYXIgbXNnYnVmW01TR0JV Rl9TSVpFXTsKLQotc3RhdGljIGludCBnb3RzaWdzID0gMDsKLQotc3RhdGljIHRpbWVfdCB0Y291 bnQgPSAodGltZV90KTA7CS8qIEVsYXBzZWQgdGltZSBjb3VudGVyICovCi0KLXN0YXRpYyBTSUdU WVAgKCpzYXZhbCkoKSAgICAgPSBOVUxMOwkvKiBGb3Igc2F2aW5nIGFsYXJtKCkgaGFuZGxlciAq Lwotc3RhdGljIFNJR1RZUCAoKnNhdnF1aXQpKCkgICA9IE5VTEw7CS8qIGFuZCBvdGhlciBzaWdu YWwgaGFuZGxlcnMgKi8KLSNpZmRlZiBTSUdVU1IxCi1zdGF0aWMgU0lHVFlQICgqc2F2dXNyMSko KSAgID0gTlVMTDsKLSNlbmRpZiAvKiBTSUdVU1IxICovCi0jaWZkZWYgU0lHVVNSMgotc3RhdGlj IFNJR1RZUCAoKnNhdnVzcjIpKCkgICA9IE5VTEw7Ci0jZW5kaWYgLyogU0lHVVNSMiAqLwotI2lm ZGVmIFNJR1BJUEUKLXN0YXRpYyBTSUdUWVAgKCpzYXZwaXBlKSgpICAgPSBOVUxMOwotI2VuZGlm IC8qIFNJR1BJUEUgKi8KLSNpZmRlZiBTSUdEQU5HRVIKLXN0YXRpYyBTSUdUWVAgKCpzYXZkYW5n ZXIpKCkgPSBOVUxMOwotI2VuZGlmIC8qIFNJR0RBTkdFUiAqLwotCi0jaWZuZGVmIE5PSkMKLXN0 YXRpYyBTSUdUWVAgKCpqY2hkbHIpKCkgICAgPSBOVUxMOwkvKiBGb3IgY2hlY2tpbmcgc3VzcGVu ZCBoYW5kbGVyICovCi0jZW5kaWYgLyogTk9KQyAqLwotc3RhdGljIGludCBqY3NoZWxsID0gLTE7 CQkvKiBBbmQgZmxhZyBmb3IgcmVzdWx0ICovCi0KLS8qCi0gIEJSRUFLTlVMUyBpcyBkZWZpbmVk IGZvciBzeXN0ZW1zIHRoYXQgc2ltdWxhdGUgc2VuZGluZyBhIEJSRUFLIHNpZ25hbAotICBieSBz ZW5kaW5nIGEgYnVuY2ggb2YgTlVMIGNoYXJhY3RlcnMgYXQgbG93IHNwZWVkLgotKi8KLSNpZmRl ZiBQUk9WWDEKLSNpZm5kZWYgQlJFQUtOVUxTCi0jZGVmaW5lIEJSRUFLTlVMUwotI2VuZGlmIC8q IEJSRUFLTlVMUyAqLwotI2VuZGlmIC8qIFBST1ZYMSAqLwotCi0jaWZkZWYgVjcKLSNpZm5kZWYg QlJFQUtOVUxTCi0jZGVmaW5lIEJSRUFLTlVMUwotI2VuZGlmIC8qIEJSRUFLTlVMUyAqLwotI2Vu ZGlmIC8qIFY3ICovCi0KLSNpZmRlZiBCUkVBS05VTFMKLXN0YXRpYyBjaGFyCQkJCS8qIEEgc3Ry aW5nIG9mIG51bGxzICovCi0qYnJudWxzID0gIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiOwotI2VuZGlmIC8qIEJSRUFLTlVMUyAqLwotCi0jaWZk ZWYgQ0tfUE9TSVhfU0lHCQkJLyogTG9uZ2p1bXAgYnVmZmVycyAqLwotc3RhdGljIHNpZ2ptcF9i dWYgc2pidWY7CQkvKiBQT1NJWCBzaWduYWwgaGFuZGxpbmcgKi8KLSNlbHNlCi1zdGF0aWMgam1w X2J1ZiBzamJ1ZjsKLSNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KLQotI2lmZGVmIFY3Ci1zdGF0 aWMgam1wX2J1ZiBqamJ1ZjsKLSNlbmRpZiAvKiBWNyAqLwotCi0vKiBzdGF0aWMgKi8JCQkJLyog KE5vdCBzdGF0aWMgYW55IG1vcmUpICovCi1pbnQgdHR5ZmQgPSAtMTsJCQkJLyogVFRZIGZpbGUg ZGVzY3JpcHRvciAqLwotCi1pbnQgdHRwaXBlID0gMDsJCQkJLyogTkVUQ01EOiBVc2UgcGlwZSBp bnN0ZWFkIG9mIHR0eWZkICovCi1pbnQgdHRwdHkgID0gMDsgICAgICAgICAgICAgICAgICAgICAg ICAgLyogTkVUUFRZOiBVc2UgcHR5IGluc3RlYWQgb2YgdHRmeWQgKi8KLQotI2lmZGVmIE5FVFBU WQkJCQkvKiBUaGVzZSBhcmUgaW4gY2t1cHR5LmMgKi8KLWV4dGVybiBQSURfVCBwdHlfZm9ya19w aWQ7Ci1leHRlcm4gaW50IHB0eV9tYXN0ZXJfZmQsIHB0eV9zbGF2ZV9mZDsKLSNlbmRpZgkvKiBO RVRQVFkgKi8KLQotI2lmZGVmIE5FVENNRAotI2lmZGVmIE5FVENPTk4KLXN0YXRpYyBpbnQgcGlw ZTBbMl0sIHBpcGUxWzJdOwkJLyogUGlwZXMgZm9yIG5ldCBpL28gKi8KLSNlbmRpZiAvKiBORVRD T05OICovCi1zdGF0aWMgUElEX1QgdHRwaWQgPSAwOwkJCS8qIFByb2Nlc3MgSUQgZm9yIGZvcmsg Ki8KLXN0YXRpYyBpbnQgZmRpbiwgZmRvdXQ7CQkJLyogRmlsZSBkZXNjcmlwdG9ycyBmb3IgcGlw ZSAqLwotc3RhdGljIEZJTEUgKiB0dG91dCA9IE5VTEw7CQkvKiBGaWxlIHBvaW50ZXIgZm9yIG91 dHB1dCBwaXBlICovCi0jaWZkZWYgRENMRkRPUEVOCi0vKiBmZG9wZW4oKSBuZWVkcyBkZWNsYXJp bmcgYmVjYXVzZSBpdCdzIG5vdCBkZWNsYXJlZCBpbiA8c3RkaW8uaD4gKi8KLV9QUk9UT1RZUCgg RklMRSAqIGZkb3BlbiwgKGludCwgY2hhciAqKSApOwotI2VuZGlmIC8qIERDTEZET1BFTiAqLwot I2VuZGlmIC8qIE5FVENNRCAqLwotCi1leHRlcm4gaW50IHBleGl0c3RhdCwgcXVpZXQ7Ci0KLSNp ZmRlZiBQbGFuOQotaW50IHR0eWN0bGZkICA9IC0xOyAgIC8qIFRUWSBjb250cm9sIGNoYW5uZWwg LSBXaGF0PyBVTklYIGRvZXNuJ3QgaGF2ZSBvbmU/ICovCi1pbnQgY29uc2N0bGZkID0gLTE7CQkJ LyogQ29uc29sZSBjb250cm9sIGNoYW5uZWwgKi8KLWludCBub2lzZWZkID0gLTE7CQkJLyogdG9u ZSBjaGFubmVsICovCi1zdGF0aWMgaW50IHR0eWxhc3RzcGVlZCA9IC0xOwkJLyogU28gd2UgY2Fu IGxpZSBhYm91dCB0aGUgc3BlZWQgKi8KLSNlbmRpZiAvKiBQbGFuOSAqLwotCi1pbnQgdGVsbmV0 ZmQgPSAwOwkJCS8qIEZpbGUgZGVzY3JpcHRvciBpcyBmb3IgdGVsbmV0ICovCi0jaWZkZWYgTkVU Q09OTgotaW50IHgyNWZkID0gMDsJCQkJLyogRmlsZSBkZXNjcmlwdG9yIGlzIGZvciBYLjI1ICov Ci0jZW5kaWYgLyogTkVUQ09OTiAqLwotCi1jaGFyIGxvY2twaWRbMTZdID0geyAnXDAnLCAnXDAn IH07CS8qIFBJRCBzdG9yZWQgaW4gbG9ja2ZpbGUsIGFzIHN0cmluZyAqLwotCi1zdGF0aWMgaW50 IGxrZiA9IDAsICAgICAgICAgICAgICAgICAgICAgLyogTGluZSBsb2NrIGZsYWcgKi8KLSAgICBj Z21mID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIHRoYXQgY29uc29sZSBt b2RlcyBzYXZlZCAqLwotICAgIHhsb2NhbCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8q IEZsYWcgZm9yIHR0eSBsb2NhbCBvciByZW1vdGUgKi8KLSAgICBjdXJjYXJyID0gMDsJCQkvKiBD YXJyaWVyIG1vZGU6IHJlcXVpcmUvaWdub3JlLiAqLwotCi1zdGF0aWMgaW50IG5ldGNvbm4gPSAw OwkJCS8qIDEgaWYgbmV0d29yayBjb25uZWN0aW9uIGFjdGl2ZSAqLwotCi1zdGF0aWMgY2hhciBl c2NjaHI7ICAgICAgICAgICAgICAgICAgICAgLyogRXNjYXBlIG9yIGF0dG4gY2hhcmFjdGVyICov Ci0KLSNpZmRlZiBDS19TQ08zMlY0Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZiAvKiBD S19TQ08zMlY0ICovCi0KLSNpZmRlZiBIQVZFX1RWCi0gICAgc3RhdGljIHN0cnVjdCB0aW1ldmFs IHR2OwkJLyogRm9yIGdldHRpbmcgdGltZSwgZnJvbSBzeXMvdGltZS5oICovCi0jZW5kaWYgLyog SEFWRV9UViAqLwotI2lmZGVmIEhBVkVfVFoKLSAgICBzdGF0aWMgc3RydWN0IHRpbWV6b25lIHR6 OwotI2VuZGlmIC8qIEhBVkVfVFogKi8KLQotI2lmZGVmIE9TRgotICAgIHN0YXRpYyBzdHJ1Y3Qg dGltZWIgZnRwOyAgICAgICAgICAgIC8qIEFuZCBmcm9tIHN5cy90aW1lYi5oICovCi0jZW5kaWYg LyogT1NGICovCi0KLSNpZmRlZiBCU0QyOQotICAgIHN0YXRpYyBsb25nIHhjbG9jazsJCQkvKiBG b3IgZ2V0dGluZyB0aW1lIGZyb20gc3lzL3RpbWUuaCAqLwotICAgIHN0YXRpYyBzdHJ1Y3QgdGlt ZWIgZnRwOyAgICAgICAgICAgIC8qIEFuZCBmcm9tIHN5cy90aW1lYi5oICovCi0jZW5kaWYgLyog QlNEMjkgKi8KLQotI2lmZGVmIEJTRDQxCi0gICAgc3RhdGljIGxvbmcgeGNsb2NrOwkJCS8qIEZv ciBnZXR0aW5nIHRpbWUgZnJvbSBzeXMvdGltZS5oICovCi0gICAgc3RhdGljIHN0cnVjdCB0aW1l YiBmdHA7ICAgICAgICAgICAgLyogQW5kIGZyb20gc3lzL3RpbWViLmggKi8KLSNlbmRpZiAvKiBC U0Q0MSAqLwotCi0jaWZkZWYgQkVMTFYxMAotICAgIHN0YXRpYyBsb25nIHhjbG9jazsJCQkvKiBG b3IgZ2V0dGluZyB0aW1lIGZyb20gc3lzL3RpbWUuaCAqLwotICAgIHN0YXRpYyBzdHJ1Y3QgdGlt ZWIgZnRwOyAgICAgICAgICAgIC8qIEFuZCBmcm9tIHN5cy90aW1lYi5oICovCi0jZW5kaWYgLyog QkVMTFYxMCAqLwotCi0jaWZkZWYgRlQyMQotICAgIHN0YXRpYyBsb25nIHhjbG9jazsJCQkvKiBG b3IgZ2V0dGluZyB0aW1lIGZyb20gc3lzL3RpbWUuaCAqLwotICAgIHN0YXRpYyBzdHJ1Y3QgdGlt ZWIgZnRwOyAgICAgICAgICAgIC8qIEFuZCBmcm9tIHN5cy90aW1lYi5oICovCi0jZW5kaWYgLyog RlQyMSAqLwotCi0jaWZkZWYgVE9XRVIxCi0gICAgc3RhdGljIGxvbmcgeGNsb2NrOwkJCS8qIEZv ciBnZXR0aW5nIHRpbWUgZnJvbSBzeXMvdGltZS5oICovCi0gICAgc3RhdGljIHN0cnVjdCB0aW1l YiBmdHA7CQkvKiBBbmQgZnJvbSBzeXMvdGltZWIuaCAqLwotI2VuZGlmIC8qIFRPV0VSMSAqLwot Ci0jaWZkZWYgQ09IRVJFTlQKLSAgICBzdGF0aWMgbG9uZyB4Y2xvY2s7CQkJLyogRm9yIGdldHRp bmcgdGltZSBmcm9tIHN5cy90aW1lLmggKi8KLSAgICBzdGF0aWMgc3RydWN0IHRpbWViIGZ0cDsJ CS8qIEFuZCBmcm9tIHN5cy90aW1lYi5oICovCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLQotI2lm ZGVmIFY3Ci0gICAgc3RhdGljIGxvbmcgeGNsb2NrOwotI2VuZGlmIC8qIFY3ICovCi0KLS8qIHNn dHR5L3Rlcm1pbyBpbmZvcm1hdGlvbi4uLiAqLwotCi0jaWZkZWYgQlNENDRPUlBPU0lYCQkJLyog UE9TSVggb3IgQlNENDQgKi8KLSAgc3RhdGljIHN0cnVjdCB0ZXJtaW9zCi0gICAgdHRvbGQsIHR0 cmF3LCB0dHR2dCwgdHRjdXIsCi0gICAgY2NvbGQsIGNjcmF3LCBjY2Nicms7Ci0jZWxzZQkJCQkJ LyogQlNELCBWNywgZXRjICovCi0KLSNpZmRlZiBDT0hFUkVOVAkJCQkvKiBIYWNrIGFsZXJ0Li4u ICovCi0jZGVmaW5lIEFUVFNWCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLQotI2lmZGVmIEFUVFNW Ci0gIHN0YXRpYyBzdHJ1Y3QgdGVybWlvIHR0b2xkID0gezB9OwkvKiBJbml0J2QgZm9yIHdvcmQg YWxpZ25tZW50LCAqLwotICBzdGF0aWMgc3RydWN0IHRlcm1pbyB0dHJhdyA9IHswfTsJLyogd2hp Y2ggaXMgaW1wb3J0YW50IGZvciBzb21lICovCi0gIHN0YXRpYyBzdHJ1Y3QgdGVybWlvIHR0dHZ0 ID0gezB9OwkvKiBzeXN0ZW1zLCBsaWtlIFppbG9nLi4uICovCi0gIHN0YXRpYyBzdHJ1Y3QgdGVy bWlvIHR0Y3VyID0gezB9OwotICBzdGF0aWMgc3RydWN0IHRlcm1pbyBjY29sZCA9IHswfTsKLSAg c3RhdGljIHN0cnVjdCB0ZXJtaW8gY2NyYXcgPSB7MH07Ci0gIHN0YXRpYyBzdHJ1Y3QgdGVybWlv IGNjY2JyayA9IHswfTsKLSNlbHNlCi0gIHN0YXRpYyBzdHJ1Y3Qgc2d0dHliICAgICAgICAgICAg ICAgICAgLyogc2d0dHkgaW5mby4uLiAqLwotICAgIHR0b2xkLCB0dHJhdywgdHR0dnQsIHR0Y3Vy LCAJLyogZm9yIGNvbW11bmljYXRpb24gbGluZSAqLwotICAgIGNjb2xkLCBjY3JhdywgY2NjYnJr OwkJLyogYW5kIGZvciBjb25zb2xlICovCi0jaWZkZWYgQkVMTFYxMAotICBzdGF0aWMgc3RydWN0 IHR0eWRldmIJCQkvKiBEZXZpY2UgaW5mby4uLiAqLwotICAgIHRkb2xkLCB0ZGN1cjsJCQkvKiBm b3IgY29tbXVuaWNhdGlvbiBkZXZpY2UgKi8KLSNlbmRpZiAvKiBCRUxMVjEwICovCi0jaWZkZWYg VElPQ0dFVEMKLSAgc3RhdGljIHN0cnVjdCB0Y2hhcnMgdGNob2xkLCB0Y2hub2k7Ci0KLSAgc3Rh dGljIGludCB0Y2hhcmY7Ci0jZW5kaWYgLyogVElPQ0dFVEMgKi8KLSNpZmRlZiBUSU9DR0xUQwot ICBzdGF0aWMgc3RydWN0IGx0Y2hhcnMgbHRjaG9sZCwgbHRjaG5vaTsKLSAgc3RhdGljIGludCBs dGNoYXJmOwotI2VuZGlmIC8qIFRJT0NHTFRDICovCi0gIGludCBsbW9kZWYgPSAwOwkJCS8qIExv Y2FsIG1vZGVzICovCi0gIGludCBsbW9kZSA9IDA7Ci0jZW5kaWYgLyogQVRUU1YgKi8KLSNlbmRp ZiAvKiBCU0Q0NE9SUE9TSVggKi8KLQotI2lmZGVmIENPTU1FTlQKLS8qIEl0IHBpY2tzIHVwIHRo ZSBzcGVlZHMgYnV0IHRoZXkgZG9uJ3Qgd29yayAqLwotI2lmZGVmIFVOSVhXQVJFCQkJCS8qIEZv ciBoaWdoZXIgc2VyaWFsIHNwZWVkcyAqLwotI2lmZGVmIFVXNwkJCQkvKiBpbiBVbml4d2FyZSA3 LjAgKi8KLSNpbmNsdWRlIDxzeXMvYXN5Yy5oPgkJCS8qIFRoaXMgcGlja3MgdXAgNTc2MDAgYW5k IDExNTIwMCAqLwotI2VuZGlmIC8qIFVXNyAqLwotI2VuZGlmIC8qIFVOSVhXQVJFICovCi0jZW5k aWYgLyogQ09NTUVOVCAqLwotCi0jaWZkZWYgUFJPVlgxCi0gIHN0YXRpYyBzdHJ1Y3Qgc2d0dHli IHR0YnVmOwotI2VuZGlmIC8qIFBST1ZYMSAqLwotCi0jaWZkZWYgdWx0cml4Ci0vKiBkbyB3ZSBy ZWFsbHkgbmVlZCB0aGlzPyAqLwotICBzdGF0aWMgc3RydWN0IHNndHR5YiB2YW5pbGxhOwotI2Vu ZGlmIC8qIHVsdHJpeCAqLwotCi0jaWZkZWYgQVRUNzMwMAotc3RhdGljIGludCBhdHRtb2RlbSA9 IDA7ICAgICAgICAgICAgICAgIC8qIEFUVDczMDAgaW50ZXJuYWwtbW9kZW0gc3RhdHVzICovCi1z dHJ1Y3QgdXBkYXRhIGRpYWxlciA9IHswfTsJCS8qIENvbmRpdGlvbiBkaWFsZXIgZm9yIGRhdGEg Y2FsbCAqLwotI2VuZGlmIC8qIEFUVDczMDAgKi8KLQotI2lmbmRlZiBOT1VVQ1AKLSNkZWZpbmUg RkxGTkFNTCAxMjgKLSNpZm5kZWYgVVNFVFRZTE9DSwotI2lmZGVmIFJUQUlYCi1jaGFyIGxrZmxm bltGTEZOQU1MXSA9IHsgJ1wwJywgJ1wwJyB9OwkvKiBhbmQgcG9zc2libGUgbGluayB0byBpdCAq LwotI2VuZGlmIC8qIFJUQUlYICovCi1jaGFyIGxvY2syW0ZMRk5BTUxdID0gIHsgJ1wwJywgJ1ww JyB9OwkvKiBOYW1lIG9mIHNlY29uZCBsb2NrZmlsZSAqLwotI2VuZGlmIC8qIFVTRVRUWUxPQ0sg Ki8KLSNlbHNlCi0jZGVmaW5lIEZMRk5BTUwgNwotI2VuZGlmIC8qIE5PVVVDUCAqLwotY2hhciBm bGZuYW1bRkxGTkFNTCsxXSA9IHsgJ1wwJywgJ1wwJyB9OyAvKiBVVUNQIGxvY2sgZmlsZSBwYXRo IG5hbWUgKi8KLQotaW50IGhhc2xvY2sgPSAwOwkJCS8qID0xIGlmIHRoaXMga2VybWl0IGxvY2tl ZCB1dWNwICovCi0KLSNpZm5kZWYgT1hPUwotI2lmZGVmIFNWT1JQT1NJWAotc3RhdGljIGludCBj b25lc2MgPSAwOyAgICAgICAgICAgICAgICAgIC8qIHNldCB0byAxIGlmIGVzYyBjaGFyICheXCkg dHlwZWQgKi8KLSNlbHNlCi0jaWZkZWYgVjcKLXN0YXRpYyBpbnQgY29uZXNjID0gMDsKLSNlbHNl Ci0jaWZkZWYgQzcwCi1zdGF0aWMgaW50IGNvbmVzYyA9IDA7Ci0jZW5kaWYgLyogQzcwICovCi0j ZW5kaWYgLyogVjcgKi8KLSNlbmRpZiAvKiBTVk9SUE9TSVggKi8KLSNlbmRpZiAvKiBPWE9TICov Ci0KLS8qIExvY2FsIGNvcHkgb2YgY29tbSBkZXZpY2UgbmFtZSBvciBuZXR3b3JrIGhvc3QgKi8K LXN0YXRpYyBjaGFyIHR0bm1zdltERVZOQU1MRU4rMV0gPSB7ICdcMCcsICdcMCcgfTsKLSNpZmRl ZiBVU0VUVFlMT0NLCi1zdGF0aWMgY2hhciBsb2NrbmFtZVtERVZOQU1MRU4rMV07CS8qIERpdHRv LCB0aGUgcGFydCBhZnRlciAiL2Rldi8iLiAqLwotI2VuZGlmIC8qIFVTRVRUWUxPQ0sgKi8KLQot I2lmZGVmIGFlZ2lzCi1zdGF0aWMgc3RhdHVzXyR0IHN0OyAgICAgICAgICAgICAgICAgICAgLyog ZXJyb3Igc3RhdHVzIHJldHVybiB2YWx1ZSAqLwotc3RhdGljIHNob3J0IGNvbmNycCA9IDA7ICAg ICAgICAgICAgICAgIC8qIHRydWUgaWYgY29uc29sZSBpcyBDUlAgcGFkICovCi1zdGF0aWMgdWlk XyR0IHR0eXVpZDsgICAgICAgICAgICAgICAgICAgLyogdHR5IHR5cGUgdWlkICovCi1zdGF0aWMg dWlkXyR0IGNvbnVpZDsgICAgICAgICAgICAgICAgICAgLyogc3Rkb3V0IHR5cGUgdWlkICovCi0K LS8qIEFQT0xMTyBBZWdpcyBtYWluKCkKLSAqIGVzdGFibGlzaCBhY2wgdXNhZ2UgYW5kIGNsZWFu dXAgaGFuZGxpbmcKLSAqICAgIHRoaXMgbWFrZXMgc3VyZSB0aGF0IENSUCBwYWRzCi0gKiAgICBn ZXQgcmVzdG9yZWQgdG8gYSB1c2FibGUgbW9kZQotICovCi1tYWluKGFyZ2MsYXJndikgaW50IGFy Z2M7IGNoYXIgKiphcmd2OyB7Ci0gICAgICAgIHN0YXR1c18kdCBzdGF0dXM7Ci0gICAgICAgIHBm bV8kY2xlYW51cF9yZWMgZGlydHk7Ci0KLSAgICAgICAgUElEX1QgcGlkID0gZ2V0cGlkKCk7Ci0K LSAgICAgICAgLyogYWNsIHVzYWdlIGFjY29yZGluZyB0byBpbnZva2luZyBlbnZpcm9ubWVudCAq LwotICAgICAgICBkZWZhdWx0X2FjbChVU0VfREVGRU5WKTsKLQotICAgICAgICAvKiBlc3RhYmxp c2ggYSBjbGVhbnVwIGNvbnRpbnVhdGlvbiAqLwotICAgICAgICBzdGF0dXMgPSBwZm1fJGNsZWFu dXAoZGlydHkpOwotICAgICAgICBpZiAoc3RhdHVzLmFsbCAhPSBwZm1fJGNsZWFudXBfc2V0KSB7 Ci0gICAgICAgICAgICAgICAgLyogb25seSBoYW5kbGUgZmF1bHRzIGZvciB0aGUgb3JpZ2luYWwg cHJvY2VzcyAqLwotICAgICAgICAgICAgICAgIGlmIChwaWQgPT0gZ2V0cGlkKCkgJiYgc3RhdHVz LmFsbCA+IHBnbV8kbWF4X3NldmVyaXR5KSB7Ci0JCSAgICAvKiBibGV3IHVwIGluIG1haW4gcHJv Y2VzcyAqLwotCQkgICAgc3RhdHVzXyR0IHF1bzsKLQkJICAgIHBmbV8kY2xlYW51cF9yZWMgY2xl YW47Ci0KLQkJICAgIC8qIHJlc3RvcmUgdGhlIGNvbnNvbGUgaW4gYW55IGNhc2UgKi8KLQkJICAg IGNvbnJlcygpOwotCi0JCSAgICAvKiBhdHRlbXB0IGEgY2xlYW4gZXhpdCAqLwotCQkgICAgZGVi dWcoRjEwMSwgImNsZWFudXAgZmF1bHQgc3RhdHVzIiwgIiIsIHN0YXR1cy5hbGwpOwotCi0JCSAg ICAvKiBkb2V4aXQoKSwgdGhlbiBzZW5kIHN0YXR1cyB0byBjb250aW51YXRpb24gKi8KLQkJICAg IHF1byA9IHBmbV8kY2xlYW51cChjbGVhbik7Ci0JCSAgICBpZiAocXVvLmFsbCA9PSBwZm1fJGNs ZWFudXBfc2V0KQotCQkgICAgICBkb2V4aXQocGdtXyRwcm9ncmFtX2ZhdWx0ZWQsLTEpOwotCQkg ICAgZWxzZSBpZiAocXVvLmFsbCA+IHBnbV8kbWF4X3NldmVyaXR5KQotCQkgICAgICBwZm1fJHNp Z25hbChxdW8pOyAvKiBibGV3IHVwIGluIGRvZXhpdCgpICovCi0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgIC8qIHNlbmQgdG8gdGhlIG9yaWdpbmFsIGNvbnRpbnVhdGlvbiAqLwot ICAgICAgICAgICAgICAgIHBmbV8kc2lnbmFsKHN0YXR1cyk7Ci0gICAgICAgICAgICAgICAgLypO T1RSRUFDSEVEKi8KLQkgICAgfQotICAgICAgICByZXR1cm4oY2tjbWFpKGFyZ2MsIGFyZ3YpKTsK LX0KLSNlbmRpZiAvKiBhZWdpcyAqLwotCi0vKiBBTlNJLXN0eWxlIHByb3RvdHlwZXMgZm9yIGlu dGVybmFsIGZ1bmN0aW9ucy4gKi8KLS8qIEZ1bmN0aW9ucyB1c2VkIG91dHNpZGUgdGhpcyBtb2R1 bGUgYXJlIHByb3RvdHlwZWQgaW4gY2tja2VyLmguICovCi0KLSNpZmRlZiBhcG9sbG8KLV9QUk9U T1RZUCggU0lHVFlQIHRpbWVyaCwgKCkgKTsKLV9QUk9UT1RZUCggU0lHVFlQIGNjdHJhcCwgKCkg KTsKLV9QUk9UT1RZUCggU0lHVFlQIGVzY3RycCwgKCkgKTsKLV9QUk9UT1RZUCggU0lHVFlQIHNp Z19pZ24sICgpICk7Ci0jZWxzZQotX1BST1RPVFlQKCBTSUdUWVAgdGltZXJoLCAoaW50KSApOwot X1BST1RPVFlQKCBTSUdUWVAgY2N0cmFwLCAoaW50KSApOwotX1BST1RPVFlQKCBTSUdUWVAgZXNj dHJwLCAoaW50KSApOwotI2VuZGlmIC8qIGFwb2xsbyAqLwotX1BST1RPVFlQKCBpbnQgZG9fb3Bl biwgKGNoYXIgKikgKTsKLV9QUk9UT1RZUCggc3RhdGljIGludCBpbl9jaGssIChpbnQsIGludCkg KTsKLV9QUk9UT1RZUCggc3RhdGljIGludCB0dHJwaWQsIChjaGFyICopICk7Ci1fUFJPVE9UWVAo IHN0YXRpYyBpbnQgdHRjaGtwaWQsIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIHN0YXRpYyBpbnQg dHRsb2NrLCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBzdGF0aWMgaW50IHR0dW5sY2ssICh2b2lk KSApOwotX1BST1RPVFlQKCBzdGF0aWMgVk9JRCBzaWdjaGxkX2hhbmRsZXIsIChpbnQpICk7Ci1f UFJPVE9UWVAoIGludCBteWdldGJ1ZiwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBteWZpbGxi dWYsICh2b2lkKSApOwotX1BST1RPVFlQKCBWT0lEIGNvbmJndCwgKGludCkgKTsKLSNpZmRlZiBB Q1VDTlRSTAotX1BST1RPVFlQKCBWT0lEIGFjdWNudHJsLCAoY2hhciAqLCBjaGFyICopICk7Ci0j ZW5kaWYgLyogQUNVQ05UUkwgKi8KLQotI2lmZGVmIEJTRDQ0T1JQT1NJWAotX1BST1RPVFlQKCBp bnQgY2FycmN0bCwgKHN0cnVjdCB0ZXJtaW9zICosIGludCkgKTsKLSNlbHNlCi0jaWZkZWYgQVRU U1YKLV9QUk9UT1RZUCggaW50IGNhcnJjdGwsIChzdHJ1Y3QgdGVybWlvICosIGludCkgKTsKLSNl bHNlCi1fUFJPVE9UWVAoIGludCBjYXJyY3RsLCAoc3RydWN0IHNndHR5YiAqLCBpbnQpICk7Ci0j ZW5kaWYgLyogQVRUU1YgKi8KLSNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KLQotI2lmZGVmIEFU VDczMDAKLV9QUk9UT1RZUCggaW50IGF0dGRpYWwsIChjaGFyICosIGxvbmcsIGNoYXIgKikgKTsK LV9QUk9UT1RZUCggaW50IG9mZmdldHR5LCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBpbnQgb25n ZXR0eSwgKGNoYXIgKikgKTsKLSNlbmRpZiAvKiBBVFQ3MzAwICovCi0KLSNpZmRlZiBCRU9TT1JC RUJPWAotI2lmZGVmIFNFTEVDVAotICAgIC8qIEJlT1MgaXMgbm90IGNhcGFibGUgb2YgdXNpbmcg U0VMRUNUIG9uIGFueXRoaW5nIGJ1dCBzb2NrZXRzICovCi0jdW5kZWYgU0VMRUNUCi0jZW5kaWYg LyogU0VMRUNUICovCi0jaW5jbHVkZSA8a2VybmVsL09TLmg+Ci0vKiAjaWZkZWYgQkVfRFJfNyAq Lwotc3RhdGljIGRvdWJsZSB0aW1lX3N0YXJ0ZWQgPSAwLjA7Ci1zdHJ1Y3QgQUxBUk1fU1RSVUNU IHsKLSAgICB0aHJlYWRfaWQgdGhyZWFkOwotICAgIGludCB0aW1lOwotfTsKLXN0YXRpYyB0aHJl YWRfaWQgYWxhcm1fdGhyZWFkID0gLTE7Ci1zdGF0aWMgc3RydWN0IEFMQVJNX1NUUlVDVCBhbGFy bV9zdHJ1Y3Q7Ci1fUFJPVE9UWVAoIGxvbmcgZG9fYWxhcm0sICh2b2lkICopICk7Ci1fUFJPVE9U WVAoIHVuc2lnbmVkIGludCBhbGFybSwgKHVuc2lnbmVkIGludCkgKTsKLV9QUk9UT1RZUCggdm9p ZCBhbGFybV9leHBpcmVkLCAodm9pZCkgKTsKLS8qICNlbmRpZiAqLyAvKiBCRV9EUl83ICovCi0j ZW5kaWYgLyogQkVPU09SQkVCT1ggKi8KLQotI2lmbmRlZiB4dW5jaGFyCi0jZGVmaW5lIHh1bmNo YXIoY2gpICgoKGNoKSAtIDMyICkgJiAweEZGICkJLyogQ2hhcmFjdGVyIHRvIG51bWJlciAqLwot I2VuZGlmIC8qIHh1bmNoYXIgKi8KLQotI2lmZGVmIENLX0FOU0lDCi1zdGF0aWMgY2hhciAqCi14 eGxhc3QoY2hhciAqcywgY2hhciBjKQotI2Vsc2UKLXN0YXRpYyBjaGFyICoKLXh4bGFzdChzLGMp IGNoYXIgKnM7IGNoYXIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogeHhsYXN0ICovIHsJ CS8qICBMYXN0IG9jY3VycmVuY2Ugb2YgY2hhcmFjdGVyIGMgaW4gc3RyaW5nIHMuICovCi0gICAg aW50IGk7Ci0gICAgZm9yIChpID0gKGludClzdHJsZW4ocyk7IGkgPiAwOyBpLS0pCi0gICAgICBp ZiAoc1tpLTFdID09IGMgKSByZXR1cm4ocyArIChpIC0gMSkpOwotICAgIHJldHVybihOVUxMKTsK LX0KLQotLyogVGltZW91dCBoYW5kbGVyIGZvciBjb21tdW5pY2F0aW9uIGxpbmUgaW5wdXQgZnVu Y3Rpb25zICovCi0KLS8qQVJHU1VTRUQqLwotU0lHVFlQCi10aW1lcmgoZm9vKSBpbnQgZm9vOyB7 Ci0gICAgdHRpbW9mZigpOwotI2lmZGVmIEJFT1NPUkJFQk9YCi0vKiAjaWZkZWYgQkVfRFJfNyAq LwotICAgIGFsYXJtX2V4cGlyZWQoKTsKLS8qICNlbmRpZiAqLyAvKiBCRV9EUl83ICovCi0jZW5k aWYgLyogQkVPU09SQkVCT1ggKi8KLSNpZmRlZiBDS19QT1NJWF9TSUcKLSAgICBzaWdsb25nam1w KHNqYnVmLDEpOwotI2Vsc2UKLSAgICBsb25nam1wKHNqYnVmLDEpOwotI2VuZGlmIC8qIENLX1BP U0lYX1NJRyAqLwotfQotCi0vKkFSR1NVU0VEKi8KLVNJR1RZUAoteHRpbWVyaChmb28pIGludCBm b287IHsJCQkvKiBMaWtlIHRpbWVyaCgpIGJ1dCBkb2VzICovCi0jaWZkZWYgQkVPU09SQkVCT1gJ CQkvKiBub3QgcmVzZXQgdGhlIHRpbWVyIGl0c2VsZiAqLwotLyogI2lmZGVmIEJFX0RSXzcgKi8K LSAgICBhbGFybV9leHBpcmVkKCk7Ci0vKiAjZW5kaWYgKi8gLyogQkVfRFJfNyAqLwotI2VuZGlm IC8qIEJFT1NPUkJFQk9YICovCi0jaWZkZWYgQ0tfUE9TSVhfU0lHCi0gICAgc2lnbG9uZ2ptcChz amJ1ZiwxKTsKLSNlbHNlCi0gICAgbG9uZ2ptcChzamJ1ZiwxKTsKLSNlbmRpZiAvKiBDS19QT1NJ WF9TSUcgKi8KLX0KLQotCi0vKiBDb250cm9sLUMgdHJhcCBmb3IgY29tbXVuaWNhdGlvbiBsaW5l IGlucHV0IGZ1bmN0aW9ucyAqLwotCi1pbnQgY2NfaW50OwkJCQkvKiBGbGFnICovCi1TSUdUWVAg KCogb2NjdCkoKTsJCQkvKiBGb3Igc2F2aW5nIG9sZCBTSUdJTlQgaGFuZGxlciAqLwotCi0vKkFS R1NVU0VEKi8KLVNJR1RZUAotY2N0cmFwKGZvbykgaW50IGZvbzsgewkJCS8qIE5lZWRzIGFyZyBm b3IgQU5TSSBDICovCi0gIGNjX2ludCA9IDE7CQkJCS8qIHNpZ25hbCgpIHByb3RvdHlwZS4gKi8K LSAgcmV0dXJuOwotfQotCi0vKiAgUyBZIFMgSSBOIEkgVCAgLS0gIFN5c3RlbS1kZXBlbmRlbnQg cHJvZ3JhbSBpbml0aWFsaXphdGlvbi4gICovCi0KLS8qCi0gKiB0dGd3c2l6KCkgcmV0dXJuczoK LSAqCTEgICAgdHRfcm93cyBhbmQgdHRfY29scyBhcmUga25vd24sIGJvdGggYWx0ZXJlZCwgYm90 aCA+IDAKLSAqCTAgICAgdHRfcm93cyBhbmQvb3IgdHRfY29scyBhcmUga25vd24sIGJvdGggYWx0 ZXJlZCwgb25lIG9yIGJvdGggPD0gMAotICoJLTEgICB0dF9yb3dzIGFuZCB0dF9jb2xzIGFyZSB1 bmtub3duIGFuZCB1bmFsdGVyZWQKLSAqLwotCi1leHRlcm4gaW50IHR0X3Jvd3MsIHR0X2NvbHM7 Ci0KLXN0YXRpYyBpbnQKLXh0dGd3c2l6KCkgewotICAgIGNoYXIgKnA7Ci0gICAgaW50IHJvd3Mg PSAwLCBjb2xzID0gMDsKLSAgICBwID0gZ2V0ZW52KCJMSU5FUyIpOwotICAgIGRlYnVnKEYxMTAs Inh0dGd3c2l6IExJTkVTIixwLDApOwotICAgIGlmIChwKSB7Ci0Jcm93cyA9IGF0b2wocCk7Ci0J aWYgKHJvd3MgPiAwKSB7Ci0JICAgIHAgPSBnZXRlbnYoIkNPTFVNTlMiKTsKLQkgICAgZGVidWco RjExMCwieHR0Z3dzaXogQ09MVU1OUyIscCwwKTsKLQkgICAgaWYgKHApIHsKLQkJY29scyA9IGF0 b2wocCk7Ci0JCWlmIChjb2xzID4gMCkgewotCQkgICAgdHRfcm93cyA9IHJvd3M7Ci0JCSAgICB0 dF9jb2xzID0gY29sczsKLQkJICAgIHJldHVybigxKTsKLQkJfQotCQlyZXR1cm4oMCk7Ci0JICAg IH0KLQl9Ci0gICAgfQotICAgIHJldHVybigtMSk7Ci19Ci0KLSNpZmRlZiBUVExFQlVGCi1WT0lE Ci1sZV9pbml0KCkgewkJCQkvKiBMb2NhbEVjaG9Jbml0KCkgKi8KLSAgICBpbnQgaTsKLSAgICBm b3IgKGkgPSAwOyBpIDwgTEVCVUZTSVo7IGkrKykKLSAgICAgIGxlX2J1ZltpXSA9ICdcMCc7Ci0g ICAgbGVfc3RhcnQgPSAwOwotICAgIGxlX2VuZCA9IDA7Ci0gICAgbGVfZGF0YSA9IDA7Ci19Ci0K LVZPSUQKLWxlX2NsZWFuKCkgewkJCQkvKiBMb2NhbEVjaG9DbGVhbnVwKCkgKi8KLSAgICBsZV9p bml0KCk7Ci0gICAgcmV0dXJuOwotfQotCi1pbnQKLWxlX2luYnVmKCkgewotICAgIGludCByYyA9 IDA7Ci0gICAgaWYgKGxlX3N0YXJ0ICE9IGxlX2VuZCkgewotCXJjID0gKGxlX2VuZCAtCi0JICAg ICAgbGVfc3RhcnQgKwotCSAgICAgIExFQlVGU0laKSAlIExFQlVGU0laOwotICAgIH0KLSAgICBk ZWJ1ZyhGMTExLCJsZV9pbmJ1ZiIsImNoYXJzIHdhaXRpbmciLHJjKTsKLSAgICByZXR1cm4ocmMp OwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotbGVfcHV0Y2hhcihDSEFSIGNoKQotI2Vsc2UK LWxlX3B1dGNoYXIoY2gpIENIQVIgY2g7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGxlX3B1 dGNoYXIgKi8gewotI2lmZGVmIENPTU1FTlQKLSAgICAvKiBJbiBVTklYIHdlIGRvIG5vdCBoYXZl IGFub3RoZXIgdGhyZWFkIHRha2luZyBjaGFycyBvdXQgb2YgdGhlIGJ1ZmZlciAqLwotICAgIHdo aWxlICgobGVfc3RhcnQgLSBsZV9lbmQgPT0gMSkgfHwKLSAgICAgICAgICAgIChsZV9zdGFydCA9 PSAwICYmIGxlX2VuZCA9PSBMRUJVRlNJWiAtIDEpKSB7Ci0JLyogQnVmZmVyIGlzIGZ1bGwgKi8K LSAgICAgICAgZGVidWcoRjExMSwibGVfcHV0Y2hhciIsIkJ1ZmZlciBpcyBGdWxsIixjaCk7Ci0g ICAgICAgIFJlbGVhc2VMb2NhbEVjaG9NdXRleCgpIDsKLSAgICAgICAgbXNsZWVwKDI1MCk7Ci0g ICAgICAgIFJlcXVlc3RMb2NhbEVjaG9NdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApIDsKLSAg ICB9Ci0jZWxzZQotICAgIGlmICgobGVfc3RhcnQgLSBsZV9lbmQgKyBMRUJVRlNJWiklTEVCVUZT SVogPT0gMSkgewotICAgICAgICBkZWJ1ZyhGMTEwLCJsZV9wdXRjaGFyIiwiYnVmZmVyIGlzIGZ1 bGwiLDApOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICov Ci0gICAgbGVfYnVmW2xlX2VuZCsrXSA9IGNoOwotICAgIGlmIChsZV9lbmQgPT0gTEVCVUZTSVop Ci0gICAgICBsZV9lbmQgPSAwOwotICAgIGxlX2RhdGEgPSAxOwotICAgIHJldHVybigwKTsKLX0K LQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWxlX3B1dHMoQ0hBUiAqIHMsIGludCBuKQotI2Vsc2UK LWxlX3B1dHMocyxuKSBDSEFSICogczsgaW50IG47Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8q IGxlX3B1dHMgKi8gewotICAgIGludCByYyA9IDA7Ci0gICAgaW50IGkgPSAwOwotICAgIENIQVIg KiBwID0gKENIQVIgKikibGVfcHV0cyI7Ci0gICAgY2toZXhkdW1wKHAscyxuKTsKLSAgICBmb3Ig KGkgPSAwOyBpIDwgbjsgaSsrKQotICAgICAgcmMgPSBsZV9wdXRjaGFyKChjaGFyKXNbaV0pOwot ICAgIGRlYnVnKEYxMDEsImxlX3B1dHMiLCIiLHJjKTsKLSAgICByZXR1cm4ocmMpOwotfQotCi1p bnQKLSNpZmRlZiBDS19BTlNJQwotbGVfcHV0c3RyKENIQVIgKiBzKQotI2Vsc2UKLWxlX3B1dHN0 cihzKSBDSEFSICogczsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogbGVfcHV0cyAqLyB7Ci0g ICAgQ0hBUiAqIHA7Ci0gICAgaW50IHJjID0gMDsKLSAgICBwID0gKENIQVIgKikibGVfcHV0c3Ry IjsKLSAgICBja2hleGR1bXAocCxzLChpbnQpc3RybGVuKChjaGFyICopcykpOwotICAgIGZvciAo cCA9IHM7ICpwICYmICFyYzsgcCsrKQotICAgICAgcmMgPSBsZV9wdXRjaGFyKCpwKTsKLSAgICBy ZXR1cm4ocmMpOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotbGVfZ2V0Y2hhcihDSEFSICog cGNoKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLWxlX2dldGNoYXIocGNoKSBDSEFSICogcGNoOwot I2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBsZV9nYXRjaGFyICovIHsKLSAgICBpbnQgcmMgPSAw OwotICAgIGlmIChsZV9zdGFydCAhPSBsZV9lbmQpIHsKLSAgICAgICAgKnBjaCA9IGxlX2J1Zlts ZV9zdGFydF07Ci0gICAgICAgIGxlX2J1ZltsZV9zdGFydF0gPSAwOwotICAgICAgICBsZV9zdGFy dCsrOwotCi0gICAgICAgIGlmIChsZV9zdGFydCA9PSBMRUJVRlNJWikKLSAgICAgICAgICBsZV9z dGFydCA9IDA7Ci0KLSAgICAgICAgaWYgKGxlX3N0YXJ0ID09IGxlX2VuZCkgewotICAgICAgICAg ICAgbGVfZGF0YSA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgcmMrKzsKLSAgICB9IGVsc2Ugewot ICAgICAgICAqcGNoID0gMDsKLSAgICB9Ci0gICAgcmV0dXJuKHJjKTsKLX0KLSNlbmRpZiAvKiBU VExFQlVGICovCi0KLSNpZmRlZiBDT01NRU5UCi0vKgotICBTb21lIHN5c3RlbXMgbGlrZSBPU0Yv MSB1c2UgVElPQ0dTSVpFIGluc3RlYWQgb2YgVElPQ0dXSU5TWi4KLSAgQnV0IGFzIGZhciBhcyBJ IGtub3csIHdoZW5ldmVyIFRJT0NHU0laRSBpcyBkZWZpbmVkLCBpdCBpcwotICBlcXVhdGVkIHRv IFRJT0NHV0lOU1ouICBGb3IgY2FzZXMgd2hlcmUgdGhpcyBpcyBub3QgZG9uZSwgdHJ5IHRoaXM6 Ci0qLwotI2lmbmRlZiBUSU9DR1dJTlNaCi0jaWZkZWYgVElPQ0dTSVpFCi0jZGVmaW5lIFRJT0NH V0lOU1ogVElPQ0dTSVpFCi0jZW5kaWYgLyogVElPQ0dTSVpFICovCi0jZW5kaWYgLyogVElPQ0dX SU5TWiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotc3RhdGljIGludCB0dF94cGl4ZWwgPSAw LCB0dF95cGl4ZWwgPSAwOwotCi1pbnQKLXR0Z3dzaXooKSB7Ci0gICAgaW50IHggPSAwOwotI2lm bmRlZiBOT05BV1MKLSNpZmRlZiBRTlgKLS8qCi0gIE5PVEU6IFRJT0NHV1NJWiB3b3JrcyBoZXJl IHRvbywgYnV0IG9ubHkgaW4gdGhlIDMyLWJpdCB2ZXJzaW9uLgotICBUaGlzIGNvZGUgd29ya3Mg Zm9yIGJvdGggdGhlIDE2LSBhbmQgMzItYml0IHZlcnNpb25zLgotKi8KLSAgICBleHRlcm4gaW50 IGRldl9zaXplKGludCwgaW50LCBpbnQsIGludCAqLCBpbnQgKik7Ci0gICAgaW50IHIsIGM7Ci0K LSAgICBpZiAoZGV2X3NpemUoMCwgLTEsIC0xLCAmciwgJmMpID09IDApIHsKLQlkZWJ1ZyhGMTAx LCJ0dGd3c2l6IFFOWCByIiwiIixyKTsKLQlkZWJ1ZyhGMTAxLCJ0dGd3c2l6IFFOWCBjIiwiIixj KTsKLQl0dF9yb3dzID0gcjsKLQl0dF9jb2xzID0gYzsKLQlyZXR1cm4gKChyID4gMCAmJiBjID4g MCkgPyAxIDogMCk7Ci0gICAgfSBlbHNlIHJldHVybih4dHRnd3NpeigpKTsKLSNlbHNlIC8qIFFO WCAqLwotI2lmZGVmIFRJT0NHV0lOU1oKLQotLyogTm90ZSwgdGhpcyB3YXMgTV9VTklYLCBjaGFu Z2VkIHRvIFhFTklYIHRvIGFsbG93IGNyb3NzIGNvbXBpbGF0aW9uLi4uICovCi0jaWZkZWYgWEVO SVgJCQkJLyogU0NPIFVOSVggMy4ydjQuMCAqLwotI2luY2x1ZGUgPHN5cy9zdHJlYW0uaD4JCQkv KiB0eXBlZGVmIG1ibGtfdCBuZWVkZWQgYnkgcHRlbS5oICovCi0jaW5jbHVkZSA8c3lzL3B0ZW0u aD4JCQkvKiBmb3IgdHRnd3NpeigpICovCi0jZW5kaWYgLyogWEVOSVggKi8KLQotI2lmZGVmIEkz ODZJWAkJCQkvKiBEaXR0byBmb3IgSW50ZXJhY3RpdmUgKi8KLSNpbmNsdWRlIDxzeXMvc3RyZWFt Lmg+Ci0jaW5jbHVkZSA8c3lzL3B0ZW0uaD4KLSNlbmRpZiAvKiBJMzg2SVggKi8KLQotLyogTm90 ZSwgdGhlIGFib3ZlIG1pZ2h0IGJlIG5lZWRlZCBmb3Igc29tZSBvdGhlciBvbGRlciBTVlIzIElu dGVsIG1ha2VzLi4uICovCi0KLSAgICBzdHJ1Y3Qgd2luc2l6ZSB3OwotICAgIHR0X3hwaXhlbCA9 IDA7Ci0gICAgdHRfeXBpeGVsID0gMDsKLQotI2lmZGVmIElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIp Ci0gICAgICByZXR1cm4oeHR0Z3dzaXooKSk7Ci0jZW5kaWYgLyogSUtTRCAqLwotICAgIHggPSBp b2N0bCgwLCAoaW50KVRJT0NHV0lOU1osIChjaGFyICopJncpOwotICAgIGRlYnVnKEYxMDEsInR0 Z3dzaXogVElPQ0dXSU5TWiIsIiIseCk7Ci0gICAgaWYgKHggPCAwKSB7Ci0JcmV0dXJuKHh0dGd3 c2l6KCkpOwotICAgIH0gZWxzZSBpZiAody53c19yb3cgPiAwICYmIHcud3NfY29sID4gMCkgewot CXR0X3Jvd3MgPSB3LndzX3JvdzsKLQl0dF9jb2xzID0gdy53c19jb2w7Ci0JdHRfeHBpeGVsID0g dy53c194cGl4ZWw7Ci0JdHRfeXBpeGVsID0gdy53c195cGl4ZWw7Ci0JZGVidWcoRjEwMSwidHRn d3NpeiB0dF9yb3dzIiwiIix0dF9yb3dzKTsKLQlkZWJ1ZyhGMTAxLCJ0dGd3c2l6IHR0X2NvbHMi LCIiLHR0X2NvbHMpOwotCXJldHVybigxKTsKLSAgICB9IGVsc2UgewotCWRlYnVnKEYxMDAsInR0 Z3dzaXogVElPQ0dXSU5TWiAwMCIsIiIsMCk7Ci0JcmV0dXJuKHh0dGd3c2l6KCkpOwotICAgIH0K LSNlbHNlCi0gICAgcmV0dXJuKHh0dGd3c2l6KCkpOwotI2VuZGlmIC8qIFRJT0NHV0lOU1ogKi8K LSNlbmRpZiAvKiBRTlggKi8KLSNlbmRpZiAvKiBOT05BV1MgKi8KLX0KLQotCi0jaWZkZWYgUkxP R0NPREUKLV9QUk9UT1RZUCggaW50IHJsb2dfbmF3cywgKHZvaWQpICk7Ci0jZW5kaWYJLyogUkxP R0NPREUgKi8KLQotI2lmbmRlZiBOT1NJR1dJTkNICi0jaWZkZWYgU0lHV0lOQ0gKLVNJR1RZUAot d2luY2hoKGZvbykgaW50IGZvbzsgewkJCS8qIFNJR1dJTkNIIGhhbmRsZXIgKi8KLSAgICBpbnQg eCA9IDA7Ci0jaWZkZWYgQ0tfVFRZRkQKLSNpZm5kZWYgVk1TCi0gICAgZXh0ZXJuIGludCB0dHlm ZDsKLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBDS19UVFlGRCAqLwotICAgIGV4dGVybiBp bnQgdHRfcm93cywgdHRfY29scywgY21kX3Jvd3MsIGNtZF9jb2xzOwotI2lmZGVmIERFQlVHCi0g ICAgaWYgKGRlYmxvZykgewotCWRlYnVnKEYxMDAsIioqKioqKioqKioqKioqKiIsIiIsMCk7Ci0J ZGVidWcoRjEwMCwiU0lHV0lOQ0ggY2F1Z2h0IiwiIiwwKTsKLQlkZWJ1ZyhGMTAwLCIqKioqKioq KioqKioqKioiLCIiLDApOwotI2lmZGVmIE5FVFBUWQotCWRlYnVnKEYxMDEsIlNJR1dJTkNIIHB0 eV9mb3JrX3BpZCIsIiIscHR5X2ZvcmtfcGlkKTsKLSNlbmRpZiAvKiBORVRQVFkgKi8KLSAgICB9 Ci0jZW5kaWYgLyogREVVQiAqLwotICAgIHNpZ25hbChTSUdXSU5DSCx3aW5jaGgpOyAgICAgICAg ICAgIC8qIFJlLWFybSB0aGUgc2lnbmFsICovCi0gICAgeCA9IHR0Z3dzaXooKTsgICAgICAgICAg ICAgICAgICAgICAgLyogR2V0IG5ldyB3aW5kb3cgc2l6ZSAqLwotICAgIGNtZF9yb3dzID0gdHRf cm93czsJCQkvKiBBZGp1c3QgY29tbWFuZCBzY3JlZW4gdG9vICovCi0gICAgY21kX2NvbHMgPSB0 dF9jb2xzOwotCi0jaWZkZWYgQ0tfVFRZRkQKLSAgICBpZgkJCQkJLyogSWYgd2UgZG9uJ3QgaGF2 ZSBhIGNvbm5lY3Rpb24gKi8KLSNpZmRlZiBWTVMJCQkJLyogd2UncmUgZG9uZS4gKi8KLSAgICAg ICh2bXN0dHlmZCgpID09IC0xKQotI2Vsc2UKLSAgICAgICh0dHlmZCA9PSAtMSkKLSNlbmRpZiAv KiBWTVMgKi8KLSNlbHNlCi0gICAgICAoIWxvY2FsKQotI2VuZGlmIC8qIENLX1RUWUZEICovCi0g ICAgICAgIHJldHVybjsKLQotI2lmZGVmIE5FVFBUWQotICAgIGlmIChwdHlfZm9ya19waWQgPiAt MSkgewkJLyogInNldCBob3N0IiB0byBhIFBUWT8gKi8KLQlpbnQgeDsKLQotI2lmZGVmIFRJT0NT V0lOU1oKLQlzdHJ1Y3Qgd2luc2l6ZSB3OwkJLyogUmVzaXplIHRoZSBQVFkgKi8KLQllcnJubyA9 IDA7Ci0Jdy53c19jb2wgPSB0dF9jb2xzOwotCXcud3Nfcm93ID0gdHRfcm93czsKLQl3LndzX3hw aXhlbCA9IHR0X3hwaXhlbDsKLQl3LndzX3lwaXhlbCA9IHR0X3lwaXhlbDsKLQl4ID0gaW9jdGwo dHR5ZmQsVElPQ1NXSU5TWiwmdyk7Ci0JZGVidWcoRjEwMSwid2luY2hoIFRJT0NTV0lOU1oiLCIi LHgpOwotCWRlYnVnKEYxMDEsIndpbmNoaCBUSU9DU1dJTlNaIGVycm5vIiwiIixlcnJubyk7Ci0j ZW5kaWYgLyogVElPQ1NXSU5TWiAqLwotCi0JZXJybm8gPSAwOwotCXggPSBraWxsKHB0eV9mb3Jr X3BpZCxTSUdXSU5DSCk7Ci0JZGVidWcoRjEwMSwid2luY2hoIGtpbGwiLCIiLHgpOwotCWRlYnVn KEYxMDEsIndpbmNoaCBraWxsIGVycm5vIiwiIixlcnJubyk7Ci0gICAgfQotI2VuZGlmIC8qIE5F VFBUWSAqLwotCi0vKgotICBUaGlzIHNob3VsZCBiZSBPSy4gIEl0IG1pZ2h0IHNlZW0gdGhhdCBz ZW5kaW5nIHRoaXMgZnJvbQotICBpbnRlcnJ1cHQgbGV2ZWwgY291bGQgaW50ZXJmZXJlIHdpdGgg YW5vdGhlciBURUxORVQgSUFDIHN0cmluZwotICB0aGF0IHdhcyBpbiB0aGUgcHJvY2VzcyBvZiBi ZWluZyBzZW50LiAgQnV0IHdlIGFsd2F5cyBzZW5kCi0gIFRFTE5FVCBzdHJpbmdzIHdpdGggYSBz aW5nbGUgd3JpdGUoKSwgd2hpY2ggc2hvdWxkIHByZXZlbnQgbWl4dXBzLgotICBibGFoX3NuYXdz KCkgc2hvdWxkIHByb3RlY3QgdGhlbXNlbHZlcyBmcm9tIGJlaW5nIGNhbGxlZCBvbiB0aGUKLSAg d3Jvbmcga2luZCBvZiBjb25uZWN0aW9uLgotKi8KLSNpZmRlZiBUQ1BTT0NLRVQKLSNpZm5kZWYg Tk9UVEdXU0laCi0gICAgaWYgKHggPiAwICYmIHR0X3Jvd3MgPiAwICYmIHR0X2NvbHMgPiAwKSB7 Ci0gICAgICAgIHRuX3NuYXdzKCk7Ci0jaWZkZWYgUkxPR0NPREUKLSAgICAgICAgcmxvZ19uYXdz KCk7Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSAgICB9Ci0jZW5kaWYgLyogTk9UVEdXU0laICov Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0gICAgU0lHUkVUVVJOOwotfQotI2VuZGlmIC8qIFNJ R1dJTkNIICovCi0jZW5kaWYgLyogTk9TSUdXSU5DSCAqLwotCi1TSUdUWVAKLXNpZ2h1cChmb28p IGludCBmb287IHsJCQkvKiBTSUdIVVAgaGFuZGxlciAqLwotICAgIGJhY2tncmQgPSAxOwotICAg IGRlYnVnKEYxMDAsIioqKioqKioqKioqKioqKiIsIiIsMCk7Ci0gICAgZGVidWcoRjEwMCwiU0lH SFVQIHJlY2VpdmVkIiwiIiwwKTsKLSAgICBkZWJ1ZyhGMTAwLCIqKioqKioqKioqKioqKioiLCIi LDApOwotICAgIGRvZXhpdChCQURfRVhJVCwtMSk7Ci0gICAgLypOT1RSRUFDSEVEKi8KLSAgICBT SUdSRVRVUk47CQkJCS8qIFNodXQgcGlja3kgY29tcGlsZXJzIHVwLi4uICovCi19Ci0KLSNpZmRl ZiBDS19TQ08zMlY0Ci0vKiBFeGlzdHMgYnV0IHRoZXJlIGlzIG5vIHByb3RvdHlwZSBpbiB0aGUg aGVhZGVyIGZpbGVzICovCi1fUFJPVE9UWVAoIGNoYXIgKiB0dHluYW1lLCAoaW50KSApOwotI2Vs c2UKLSNpZmRlZiBTVjY4UjNWNgotX1BST1RPVFlQKCBjaGFyICogdHR5bmFtZSwgKGludCkgKTsK LSNlbHNlCi0jaWZkZWYgdWx0cml4Ci1fUFJPVE9UWVAoIGNoYXIgKiB0dHluYW1lLCAoaW50KSAp OwotI2Vsc2UKLSNpZmRlZiBIUFVYNgotX1BST1RPVFlQKCBjaGFyICogdHR5bmFtZSwgKGludCkg KTsKLSNlbHNlCi0jaWZkZWYgSFBVWDUKLV9QUk9UT1RZUCggY2hhciAqIHR0eW5hbWUsIChpbnQp ICk7Ci0jZWxzZQotI2lmZGVmIFBTMkFJWDEwCi1fUFJPVE9UWVAoIGNoYXIgKiB0dHluYW1lLCAo aW50KSApOwotI2Vsc2UKLSNpZmRlZiBCU0Q0MgotX1BST1RPVFlQKCBjaGFyICogdHR5bmFtZSwg KGludCkgKTsKLSNlbmRpZiAvKiBCU0Q0MiAqLwotI2VuZGlmIC8qIFBTMkFJWDEwICovCi0jZW5k aWYgLyogSFBVWDUgKi8KLSNlbmRpZiAvKiBIUFVYNiAqLwotI2VuZGlmIC8qIHVsdHJpeCAqLwot I2VuZGlmIC8qIFNWNjhSM1Y2ICovCi0jZW5kaWYgLyogQ0tfU0NPMzJWNCAqLwotCi0jaWZuZGVm IFNJR1VTUjEJCQkJLyogVXNlci1kZWZpbmVkIHNpZ25hbHMgKi8KLSNkZWZpbmUgU0lHVVNSMSAz MAotI2VuZGlmIC8qIFNJR1VTUjEgKi8KLQotI2lmbmRlZiBTSUdVU1IyCi0jZGVmaW5lIFNJR1VT UjIgMzEKLSNlbmRpZiAvKiBTSUdVU1IyICovCi0KLS8qCi0gIGlnbm9yc2lncygpIHNldHMgY2Vy dGFpbiBzaWduYWxzIHRvIFNJR19JR04uICBCdXQgd2hlbiBhIHNpZ25hbCBpcwotICBpZ25vcmVk LCBpdCByZW1haW5zIGlnbm9yZWQgYWNyb3NzIGV4ZWMoKSwgc28gd2UgaGF2ZSB0byByZXN0b3Jl IHRoZXNlCi0gIHNpZ25hbHMgYmVmb3JlIGV4ZWMoKSwgd2hpY2ggaXMgdGhlIHB1cnBvc2Ugb2Yg cmVzdG9yc2lncygpLgotKi8KLXN0YXRpYyBWT0lECi1pZ25vcnNpZ3MoKSB7CQkJCS8qIElnbm9y ZSB0aGVzZSBzaWduYWxzICovCi0gICAgc2F2cXVpdCA9IHNpZ25hbChTSUdRVUlULFNJR19JR04p OwkvKiBJZ25vcmUgUXVpdCBzaWduYWwgKi8KLQotI2lmZGVmIFNJR0RBTkdFUgkJCS8qIElnbm9y ZSBkYW5nZXIgc2lnbmFscyAqLwotLyoKLSAgVGhpcyBzaWduYWwgaXMgc2VudCB3aGVuIHRoZSBz eXN0ZW0gaXMgbG93IG9uIHN3YXAgc3BhY2UuICBQcm9jZXNzZXMKLSAgdGhhdCBkb24ndCBoYW5k bGUgaXQgYXJlIGNhbmRpZGF0ZXMgZm9yIHRlcm1pbmF0aW9uLiAgSWYgc3dhcCBzcGFjZSBkb2Vz bid0Ci0gIGNsZWFyIG91dCBlbm91Z2gsIHdlIHN0aWxsIG1pZ2h0IGJlIHRlcm1pbmF0ZWQgdmlh IGtpbGwoKSAtLSBub3RoaW5nIHdlIGNhbgotICBkbyBhYm91dCB0aGF0ISAgQ29uY2VpdmFibHks IHRoaXMgY291bGQgYmUgaW1wcm92ZWQgYnkgaW5zdGFsbGluZyBhIHJlYWwKLSAgc2lnbmFsIGhh bmRsZXIgdGhhdCB3YXJucyB0aGUgdXNlciwgYnV0IHRoYXQgd291bGQgYmUgcHJldHR5IGNvbXBs aWNhdGVkLAotICBzaW5jZSB3ZSBhcmUgbm90IGFsd2F5cyBpbiBjb250cm9sIG9mIHRoZSBzY3Jl ZW4gLS0gZS5nLiBkdXJpbmcgcmVtb3RlLW1vZGUKLSAgZmlsZSB0cmFuc2Zlci4KLSovCi0gICAg c2F2ZGFuZ2VyID0gc2lnbmFsKFNJR0RBTkdFUixTSUdfSUdOKTsgLyogZS5nLiBpbiBBSVggKi8K LSNlbmRpZiAvKiBTSUdEQU5HRVIgKi8KLSNpZmRlZiBTSUdQSVBFCi0vKgotICBUaGlzIG9uZSBj b21lcyB3aGVuIGEgVENQL0lQIGNvbm5lY3Rpb24gaXMgYnJva2VuIGJ5IHRoZSByZW1vdGUuCi0g IFdlIHByZWZlciB0byBjYXRjaCB0aGlzIHNpdHVhdGlvbiBieSBleGFtaW5pbmcgZXJyb3IgY29k ZXMgZnJvbSB3cml0ZSgpLgotKi8KLSAgICBzYXZwaXBlID0gc2lnbmFsKFNJR1BJUEUsU0lHX0lH Tik7Ci0jZW5kaWYgLyogU0lHUElQRSAqLwotICAgIHNhdnVzcjEgPSBzaWduYWwoU0lHVVNSMSxT SUdfSUdOKTsJLyogSWdub3JlIHVzZXItZGVmaW5lZCBzaWduYWxzICovCi0gICAgc2F2dXNyMiA9 IHNpZ25hbChTSUdVU1IyLFNJR19JR04pOwotfQotCi1WT0lECi1yZXN0b3JzaWdzKCkgewkJCQkv KiBSZXN0b3JlIHRoZXNlIHNpZ25hbHMgKi8KLSAgICAoVk9JRCkgc2lnbmFsKFNJR1FVSVQsc2F2 cXVpdCk7CS8qICh1c2VkIGluIGNrdWZpby5jKSAqLwotI2lmZGVmIFNJR0RBTkdFUgotICAgIChW T0lEKSBzaWduYWwoU0lHREFOR0VSLHNhdmRhbmdlcik7Ci0jZW5kaWYgLyogU0lHREFOR0VSICov Ci0jaWZkZWYgU0lHUElQRQotICAgIChWT0lEKSBzaWduYWwoU0lHUElQRSxzYXZwaXBlKTsKLSNl bmRpZiAvKiBTSUdQSVBFICovCi0gICAgKFZPSUQpIHNpZ25hbChTSUdVU1IxLHNhdnVzcjEpOwot ICAgIChWT0lEKSBzaWduYWwoU0lHVVNSMixzYXZ1c3IyKTsKLX0KLQotaW50Ci1zeXNpbml0KCkg ewotICAgIGludCB4OwotICAgIGNoYXIgKiBzOwotI2lmZGVmIENLX1VUU05BTUUKLSAgICBzdHJ1 Y3QgdXRzbmFtZSBuYW1lOwotI2VuZGlmIC8qIENLX1VUU05BTUUgKi8KLQotICAgIGV4dGVybiBj aGFyIHN0YXJ0dXBkaXJbXTsKLS8qCi0gIEJFRk9SRSBBTllUSElORyBFTFNFOiBJbml0aWFsaXpl IHRoZSBzZXR1aWQgcGFja2FnZS4KLSAgQ2hhbmdlIHRvIHRoZSB1c2VyJ3MgcmVhbCB1c2VyIGFu ZCBncm91cCBJRC4KLSAgSWYgdGhpcyBjYW4ndCBiZSBkb25lLCBkb24ndCBydW4gYXQgYWxsLgot Ki8KLSAgICB4ID0gcHJpdl9pbmkoKTsKLSNpZmRlZiBTVUlEREVCVUcKLSAgICBmcHJpbnRmKHN0 ZGVyciwiUFJJVl9JTkk9JWRcbiIseCk7Ci0jZW5kaWYgLyogU1VJRERFQlVHICovCi0gICAgaWYg KHgpIHsKLQlpZiAoeCAmIDEpIGZwcmludGYoc3RkZXJyLCJGYXRhbDogc2V0dWlkIGZhaWx1cmUu XG4iKTsKLQlpZiAoeCAmIDIpIGZwcmludGYoc3RkZXJyLCJGYXRhbDogc2V0Z2lkIGZhaWx1cmUu XG4iKTsKLQlpZiAoeCAmIDQpIGZwcmludGYoc3RkZXJyLCJGYXRhbDogQy1LZXJtaXQgc2V0dWlk IHRvIHJvb3QhXG4iKTsKLQlleGl0KDEpOwotICAgIH0KLSAgICBzaWduYWwoU0lHSU5ULFNJR19J R04pOwkJLyogSWdub3JlIGludGVycnVwdHMgYXQgZmlyc3QgKi8KLSAgICBzaWduYWwoU0lHRlBF LFNJR19JR04pOwkJLyogSWdub3JlIGZsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbnMgKi8KLSAgICBz aWduYWwoU0lHSFVQLHNpZ2h1cCk7CQkvKiBDYXRjaCBTSUdIVVAgKi8KLSNpZm5kZWYgTk9TSUdX SU5DSAotI2lmZGVmIFNJR1dJTkNICi0gICAgc2lnbmFsKFNJR1dJTkNILHdpbmNoaCk7CQkvKiBD YXRjaCB3aW5kb3ctc2l6ZSBjaGFuZ2UgKi8KLSNlbmRpZiAvKiBTSUdXSU5DSCAqLwotI2VuZGlm IC8qIE5PU0lHV0lOQ0ggKi8KLQotI2lmZGVmIFNJR1hGU1oKLSAgICBzaWduYWwoU0lHWEZTWixT SUdfSUdOKTsJCS8qIElnbm9yZSB3cml0aW5nIHBhc3QgZmlsZSBsaW1pdCAqLyAKLSNlbmRpZgkv KiBTSUdYRlNaICovCi0KLSNpZm5kZWYgTk9KQwotLyoKLSAgR2V0IHRoZSBpbml0aWFsIGpvYiBj b250cm9sIHN0YXRlLgotICBJZiBpdCBpcyBTSUdfSUdOLCB0aGF0IG1lYW5zIHRoZSBzaGVsbCBk b2VzIG5vdCBzdXBwb3J0IGpvYiBjb250cm9sLAotICBhbmQgc28gd2UnZCBiZXR0ZXIgbm90IHN1 c3BlbmQgb3Vyc2VsdmVzLgotKi8KLSNpZmRlZiBTSUdUU1RQCi0gICAgamNoZGxyID0gc2lnbmFs KFNJR1RTVFAsU0lHX0lHTik7Ci0gICAgaWYgKGpjaGRsciA9PSBTSUdfSUdOKSB7Ci0JamNzaGVs bCA9IDA7Ci0JZGVidWcoRjEwMCwic3lzaW5pdCBqY2hkbHI6IFNJR19JR04iLCIiLDApOwotICAg IH0gZWxzZSBpZiAoamNoZGxyID09IFNJR19ERkwpIHsKLQlkZWJ1ZyhGMTAwLCJzeXNpbml0IGpj aGRscjogU0lHX0RGTCIsIiIsMCk7Ci0JamNzaGVsbCA9IDE7Ci0gICAgfSBlbHNlIHsKLQlkZWJ1 ZyhGMTAwLCJzeXNpbml0IGpjaGRscjogb3RoZXIiLCIiLDApOwotCWpjc2hlbGwgPSAzOwotICAg IH0KLSAgICAoVk9JRCkgc2lnbmFsKFNJR1RTVFAsamNoZGxyKTsJLyogUHV0IGl0IGJhY2suLi4g Ki8KLSNlbmRpZiAvKiBTSUdUU1RQICovCi0jZW5kaWYgLyogTk9KQyAqLwotCi0gICAgY29uYmd0 KDApOwkJCQkvKiBTZWUgaWYgd2UncmUgaW4gdGhlIGJhY2tncm91bmQgKi8KLSAgICBjb25nbSgp OwkJCQkvKiBHZXQgY29uc29sZSBtb2RlcyAqLwotCi0gICAgKFZPSUQpIHNpZ25hbChTSUdBTFJN LFNJR19JR04pOwkvKiBJZ25vcmUgYWxhcm1zICovCi0KLSAgICBpZ25vcnNpZ3MoKTsJCQkvKiBJ Z25vcmUgc29tZSBvdGhlciBzaWduYWxzICovCi0KLSNpZmRlZiBGX1NFVEZMCi0gICAgaW5pZmxh Z3MgPSBmY250bCgwLEZfR0VURkwsMCk7CS8qIEdldCBzdGRpbiBmbGFncyAqLwotI2VuZGlmIC8q IEZfU0VURkwgKi8KLQotI2lmZGVmIHVsdHJpeAotICAgIGd0dHkoMCwmdmFuaWxsYSk7CQkJLyog R2V0IHNndHR5IGluZm8gKi8KLSNlbHNlCi0jaWZkZWYgQVVYCi0gICAgc2V0NDJzaWcoKTsJCQkJ LyogRG9uJ3QgYXNrISAoaGFrYW5zb25AY3Mub3JzdC5lZHUpICovCi0jZW5kaWYgLyogQVVYICov Ci0jZW5kaWYgLyogdWx0cml4ICovCi0vKgotICBXYXJuaW5nOiBvbiBzb21lIFVOSVggc3lzdGVt cyAoU1ZSND8pLCB0dHluYW1lKCkgcmVwb3J0ZWRseSBvcGVucyAvZGV2IGJ1dAotICBuZXZlciBj bG9zZXMgaXQuICBJZiBpdCBpcyBjYWxsZWQgb2Z0ZW4gZW5vdWdoLCB3ZSBydW4gb3V0IG9mIGZp bGUKLSAgZGVzY3JpcHRvcnMgYW5kIHN1YnNlcXVlbnQgb3BlbigpJ3Mgb2Ygb3RoZXIgZGV2aWNl cyBvciBmaWxlcyBjYW4gZmFpbC4KLSovCi0gICAgcyA9IE5VTEw7Ci0jaWZuZGVmIE1JTklYCi0g ICAgaWYgKGlzYXR0eSgwKSkJCQkvKiBOYW1lIG9mIGNvbnRyb2xsaW5nIHRlcm1pbmFsICovCi0g ICAgICBzID0gdHR5bmFtZSgwKTsKLSAgICBlbHNlIGlmIChpc2F0dHkoMSkpCi0gICAgICBzID0g dHR5bmFtZSgxKTsKLSAgICBlbHNlIGlmIChpc2F0dHkoMikpCi0gICAgICBzID0gdHR5bmFtZSgy KTsKLSAgICBkZWJ1ZyhGMTEwLCJzeXNpbml0IHR0eW5hbWUoMCkiLHMsMCk7Ci0jZW5kaWYgLyog TUlOSVggKi8KLQotI2lmZGVmIEJFT1MKLSAgICBpZiAoIWRmdHR5KQotICAgICAgbWFrZXN0cigm ZGZ0dHkscyk7Ci0jZW5kaWYgLyogQkVPUyAqLwotCi0gICAgaWYgKHMpCi0gICAgICBja3N0cm5j cHkoKGNoYXIgKiljdHRuYW0scyxERVZOQU1MRU4rMSk7Ci0jaWZkZWYgU1ZPUlBPU0lYCi0gICAg aWYgKCFjdHRuYW1bMF0pCi0gICAgICBjdGVybWlkKGN0dG5hbSk7Ci0jZW5kaWYgLyogU1ZPUlBP U0lYICovCi0gICAgaWYgKCFjdHRuYW1bMF0pCi0gICAgICBja3N0cm5jcHkoKGNoYXIgKiljdHRu YW0sZGZ0dHksREVWTkFNTEVOKzEpOwotICAgIGRlYnVnKEYxMTAsInN5c2luaXQgQ1RUTkFNIixD VFROQU0sMCk7Ci0gICAgZGVidWcoRjExMCwic3lzaW5pdCBjdHRuYW0iLGN0dG5hbSwwKTsKLQot ICAgIHR0Z3dzaXooKTsJCQkJLyogR2V0IHdpbmRvdyAoc2NyZWVuKSBkaW1lbnNpb25zLiAqLwot Ci0jaWZuZGVmIE5PU1lTQ09ORgotI2lmZGVmIF9TQ19PUEVOX01BWAotICAgIGNrbWF4ZmlsZXMg PSBzeXNjb25mKF9TQ19PUEVOX01BWCk7Ci0jZW5kaWYgLyogX1NDX09QRU5fTUFYICovCi0jZW5k aWYgLyogTk9TWVNDT05GICovCi0KLSNpZmRlZiBQbGFuOQotICAgIGlmICghYmFja2dyZCkgewot ICAgIAljb25zY3RsZmQgPSBvcGVuKCIvZGV2L2NvbnNjdGwiLCBPX1dST05MWSk7Ci0gICAgCS8q bm9pc2VmZCA9IG9wZW4oIi9kZXYvbm9pc2UiLCBPX1dST05MWSkqLwotICAgIH0KLSAgICBja3hl Y2ggPSAxOwotI2VuZGlmIC8qIFBsYW45ICovCi0KLSNpZmRlZiBDS19VVFNOQU1FCi0gICAgaWYg KHVuYW1lKCZuYW1lKSA+IC0xKSB7Ci0JY2tzdHJuY3B5KHVubV9tY2gsbmFtZS5tYWNoaW5lLENL X1NZU05NTE4pOwotCWNrc3RybmNweSh1bm1fbmFtLG5hbWUuc3lzbmFtZSxDS19TWVNOTUxOKTsK LQlja3N0cm5jcHkodW5tX3JlbCxuYW1lLnJlbGVhc2UsQ0tfU1lTTk1MTik7Ci0JY2tzdHJuY3B5 KHVubV92ZXIsbmFtZS52ZXJzaW9uLENLX1NZU05NTE4pOwotI2lmZGVmIERFQlVHCi0JaWYgKGRl YmxvZykgewotCSAgICBkZWJ1ZyhGMTEwLCJzeXNpbml0IHVuYW1lIG1hY2hpbmUiLHVubV9tY2gs MCk7Ci0JICAgIGRlYnVnKEYxMTAsInN5c2luaXQgdW5hbWUgc3lzbmFtZSIsdW5tX25hbSwwKTsK LQkgICAgZGVidWcoRjExMCwic3lzaW5pdCB1bmFtZSByZWxlYXNlIix1bm1fcmVsLDApOwotCSAg ICBkZWJ1ZyhGMTEwLCJzeXNpbml0IHVuYW1lIHZlcnNpb24iLHVubV92ZXIsMCk7Ci0JfQotI2Vu ZGlmIC8qIERFQlVHICovCi0KLSNpZmRlZiBIUFVYOVBMVVMKLQlpZiAobmFtZS5tYWNoaW5lWzVd ID09ICc4JykKLQkgIGhwaXM4MDAgPSAxOwotCWVsc2UKLQkgIGhwaXM4MDAgPSAwOwotCWRlYnVn KEYxMDEsInN5c2luaXQgaHBpczgwMCIsIiIsaHBpczgwMCk7Ci0jZW5kaWYgLyogSFBVWDlQTFVT ICovCi0jaWZkZWYgVFJVNjQKLSAgICAgICAgZ2V0c3lzaW5mbyhHU0lfUExBVEZPUk1fTkFNRSwg dW5tX21vZCwgQ0tfU1lTTk1MTiwgMCwgMCk7Ci0gICAgICAgIGRlYnVnKEYxMTAsInN5c2luaXQg Z2V0c3lzaW5mbyBtb2RlbCIsdW5tX21vZCwwKTsKLSNlbmRpZiAvKiBUUlU2NCAqLwotI2lmZGVm IFNPTEFSSVMyNQotICAgICAgICBzeXNpbmZvKFNJX1BMQVRGT1JNLCB1bm1fbW9kLCBDS19TWVNO TUxOKTsKLSAgICAgICAgZGVidWcoRjExMCwic3lzaW5pdCBzeXNpbmZvIG1vZGVsIix1bm1fbW9k LDApOwotI2VuZGlmIC8qIFNPTEFSSVMyNSAqLwotICAgIH0KLSNlbmRpZiAvKiBDS19VVFNOQU1F ICovCi0KLSNpZmRlZiBDS19FTlZJUk9OTUVOVAotICAgIHsKLSNpZmRlZiBUTkNPREUKLQlleHRl cm4gY2hhciB0bl9lbnZfYWNjdFtdLCB0bl9lbnZfZGlzcFtdLCB0bl9lbnZfam9iW10sCi0JdG5f ZW52X3BybnRbXSwgdG5fZW52X3N5c1tdOwotI2VuZGlmIC8qIFROQ09ERSAqLwotCWV4dGVybiBj aGFyIHVpZGJ1ZltdOwotICAgICAgICBleHRlcm4gY2hhciAqIHdob2FtaSgpOwotCWNoYXIgKnA7 Ci0jaWZkZWYgQ0tTRU5EVUlECi0gICAgICAgIHVpZGJ1ZlswXSA9ICdcMCc7Ci0jaWZkZWYgSUtT RAotICAgICAgICBpZiAoIWluc2VydmVyKSB7Ci0jZW5kaWYgLyogSUtTRCAqLwotICAgICAgICAg ICAgcCA9IGdldGVudigiVVNFUiIpOwotICAgICAgICAgICAgZGVidWcoRjExMCwic3lzaW5pdCB1 aWRidWYgZnJvbSBVU0VSIix1aWRidWYsMCk7Ci0JICAgIGlmICghcCkgcCA9ICIiOwotICAgICAg ICAgICAgaWYgKCEqcCkgewotICAgICAgICAgICAgICAgIHAgPSBnZXRlbnYoIkxPR05BTUUiKTsK LSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzeXNpbml0IHVpZGJ1ZiBmcm9tIExPR05BTUUi LHVpZGJ1ZiwwKTsKLSAgICAgICAgICAgIH0KLQkgICAgaWYgKCFwKSBwID0gIiI7Ci0gICAgICAg ICAgICBpZiAoISpwKSB7Ci0gICAgICAgICAgICAgICAgcCA9IHdob2FtaSgpOwotICAgICAgICAg ICAgICAgIGRlYnVnKEYxMTAsInN5c2luaXQgdWlkYnVmIGZyb20gd2hvYW1pKCkiLHVpZGJ1Ziww KTsKLSAgICAgICAgICAgIH0KLQkgICAgaWYgKCFwKSBwID0gIiI7Ci0JICAgIGNrc3RybmNweSh1 aWRidWYsICpwID8gcCA6ICJVTktOT1dOIiwgVUlEQlVGTEVOKTsKLSNpZmRlZiBJS1NECi0gICAg ICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0JZGVidWcoRjExMCwic3lzaW5pdCBmaW5hbCB1aWRi dWYiLHVpZGJ1ZiwwKTsKLSNlbmRpZiAvKiBDS1NFTkRVSUQgKi8KLQotI2lmZGVmIFROQ09ERQot CWlmICgocCA9IGdldGVudigiSk9CIikpKSBja3N0cm5jcHkodG5fZW52X2pvYixwLDYzKTsKLQlp ZiAoKHAgPSBnZXRlbnYoIkFDQ1QiKSkpIGNrc3RybmNweSh0bl9lbnZfYWNjdCxwLDYzKTsKLQlp ZiAoKHAgPSBnZXRlbnYoIlBSSU5URVIiKSkpIGNrc3RybmNweSh0bl9lbnZfcHJudCxwLDYzKTsK LQlpZiAoKHAgPSBnZXRlbnYoIkRJU1BMQVkiKSkpIGNrc3RybmNweSh0bl9lbnZfZGlzcCxwLDYz KTsKLSNpZmRlZiBhZWdpcwotCWNrc3RybmNweSh0bl9lbnZfc3lzLCJBZWdpcyIsNjQpOwotI2Vs c2UKLSNpZmRlZiBQbGFuOQotCWNrc3RybmNweSh0bl9lbnZfc3lzLCJQbGFuOSIsNjQpOwotI2Vs c2UKLQlja3N0cm5jcHkodG5fZW52X3N5cywiVU5JWCIsNjQpOwotI2VuZGlmIC8qIFBsYW45ICov Ci0jZW5kaWYgLyogYWVnaXMgKi8KLSNlbmRpZiAvKiBUTkNPREUgKi8KLSAgICB9Ci0jZW5kaWYg LyogQ0tfRU5WSVJPTk1FTlQgKi8KLSNpZmRlZiBDS19TTkRMT0MKLSAgICB7Ci0JZXh0ZXJuIGNo YXIgKiB0bl9sb2M7Ci0JY2hhciAqcDsKLQlpZiAocCA9IGdldGVudigiTE9DQVRJT04iKSkKLQkg IGlmICh0bl9sb2MgPSAoY2hhciAqKW1hbGxvYygoaW50KXN0cmxlbihwKSsxKSkKLQkgICAgc3Ry Y3B5KHRuX2xvYyxwKTsJCS8qIHNhZmUgKi8KLSAgICB9Ci0jZW5kaWYgLyogQ0tfU05ETE9DICov Ci0KLSAgICBja3N0cm5jcHkoc3RhcnR1cGRpciwgemd0ZGlyKCksIENLTUFYUEFUSCk7Ci0gICAg c3RhcnR1cGRpcltDS01BWFBBVEhdID0gJ1wwJzsKLSAgICB4ID0gc3RybGVuKHN0YXJ0dXBkaXIp OwotICAgIGlmICh4IDw9IDApIHsKLQlzdGFydHVwZGlyWzBdID0gJy8nOwotCXN0YXJ0dXBkaXJb MV0gPSAnXDAnOwotICAgIH0gZWxzZSBpZiAoc3RhcnR1cGRpclt4LTFdICE9ICcvJykgewotCXN0 YXJ0dXBkaXJbeF0gPSAnLyc7Ci0Jc3RhcnR1cGRpclt4KzFdID0gJ1wwJzsKLSAgICB9Ci0gICAg ZGVidWcoRjExMCwic3lzaW5pdCBzdGFydHVwZGlyIixzdGFydHVwZGlyLDApOwotI2lmZGVmIFRU TEVCVUYKLSAgICBsZV9pbml0KCk7Ci0jZW5kaWYgLyogVFRMRUJVRiAqLwotI2lmZGVmIEJTRDQ0 T1JQT1NJWAotICAgIC8qIFRoaXMgc2hvdWxkIGNhdGNoIHRoZSBuY3Vyc2VzIHBsYXRmb3JtcyAq LwotICAgIC8qIFNvbWUgcGxhdGZvcm1zIGRvbid0IGhhdmUgcHV0ZW52KCksIGxpa2UgTmVYVFNU RVAgKi8KLSAgICBwdXRlbnYoIk5DVVJTRVNfTk9fU0VUQlVGPTEiKTsKLSNlbmRpZiAvKiBCU0Q0 NE9SUE9TSVggKi8KLSAgICByZXR1cm4oMCk7Ci19Ci0KLS8qICBTIFkgUyBDIEwgRSBBIE4gVSBQ ICAtLSAgU3lzdGVtLWRlcGVuZGVudCBwcm9ncmFtIGNsZWFudXAuICAqLwotCi1pbnQKLXN5c2Ns ZWFudXAoKSB7Ci0jaWZkZWYgRl9TRVRGTAotICAgIGlmIChpbmlmbGFncyA+IC0xKQotICAgICAg ZmNudGwoMCxGX1NFVEZMLGluaWZsYWdzKTsJLyogUmVzdG9yZSBzdGRpbiBmbGFncyAqLwotI2Vu ZGlmIC8qIEZfU0VURkwgKi8KLSNpZmRlZiB1bHRyaXgKLSAgICBzdHR5KDAsJnZhbmlsbGEpOyAg ICAgICAgICAgICAgICAgICAvKiBHZXQgc2d0dHkgaW5mbyAqLwotI2VuZGlmIC8qIHVsdHJpeCAq LwotI2lmZGVmIE5FVENNRAotICAgIGlmICh0dHBpZCkga2lsbCh0dHBpZCw5KTsKLSNlbmRpZiAv KiBORVRDTUQgKi8KLSAgICByZXR1cm4oMCk7Ci19Ci0KLS8qICBUIFQgTyBQIEUgTiAgLS0gIE9w ZW4gYSB0dHkgZm9yIGV4Y2x1c2l2ZSBhY2Nlc3MuICAqLwotCi0vKgotICBDYWxsIHdpdGg6Ci0g ICAgdHRuYW1lOiBjaGFyYWN0ZXIgc3RyaW5nIC0gZGV2aWNlIG5hbWUgb3IgbmV0d29yayBob3N0 IG5hbWUuCi0gICAgbGNsOgotICBJZiBjYWxsZWQgd2l0aCBsY2wgPCAwLCBzZXRzIHZhbHVlIG9m IGxjbCBhcyBmb2xsb3dzOgotICAwOiB0aGUgdGVybWluYWwgbmFtZWQgYnkgdHRuYW1lIGlzIHRo ZSBqb2IncyBjb250cm9sbGluZyB0ZXJtaW5hbC4KLSAgMTogdGhlIHRlcm1pbmFsIG5hbWVkIGJ5 IHR0bmFtZSBpcyBub3QgdGhlIGpvYidzIGNvbnRyb2xsaW5nIHRlcm1pbmFsLgotICBCdXQgd2F0 Y2ggb3V0OiBpZiBhIGxpbmUgaXMgYWxyZWFkeSBvcGVuLCBvciBpZiByZXF1ZXN0ZWQgbGluZSBj YW4ndAotICBiZSBvcGVuZWQsIHRoZW4gbGNsIHJlbWFpbnMgKGFuZCBpcyByZXR1cm5lZCBhcykg LTEuCi0gICAgbW9kZW06Ci0gIExlc3MgdGhhbiB6ZXJvOiB0dG5hbWUgaXMgYSBuZXR3b3JrIGhv c3QgbmFtZS4KLSAgWmVybyBvciBncmVhdGVyOiB0dG5hbWUgaXMgYSB0ZXJtaW5hbCBkZXZpY2Ug bmFtZS4KLSAgWmVybyBtZWFucyBhIGxvY2FsIGNvbm5lY3Rpb24gKGRvbid0IHVzZSBtb2RlbSBz aWduYWxzKS4KLSAgUG9zaXRpdmUgbWVhbnMgdXNlIG1vZGVtIHNpZ25hbHMuCi0gICB0aW1vOgot ICAwID0gbm8gdGltZXIuCi0gIG5vbnplcm8gPSBudW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGZv ciBvcGVuKCkgdG8gcmV0dXJuIGJlZm9yZSB0aW1pbmcgb3V0LgotCi0gIFJldHVybnM6Ci0gICAg MCBvbiBzdWNjZXNzCi0gICAtNSBpZiBkZXZpY2UgaXMgaW4gdXNlCi0gICAtNCBpZiBhY2Nlc3Mg dG8gZGV2aWNlIGlzIGRlbmllZAotICAgLTMgaWYgYWNjZXNzIHRvIGxvY2sgZGlyZWN0b3J5IGRl bmllZAotICAgLTIgdXBvbiB0aW1lb3V0IHdhaXRpbmcgZm9yIGRldmljZSB0byBvcGVuCi0gICAt MSBvbiBvdGhlciBlcnJvcgotKi8KLXN0YXRpYyBpbnQgdHRvdG1vID0gMDsJCQkvKiBUaW1lb3V0 IGZsYWcgKi8KLS8qIEZsYWcga2VwdCBoZXJlIHRvIGF2b2lkIGJlaW5nIGNsb2JiZXJlZCBieSBs b25nam1wLiAgKi8KLQotaW50Ci10dG9wZW4odHRuYW1lLGxjbCxtb2RlbSx0aW1vKSBjaGFyICp0 dG5hbWU7IGludCAqbGNsLCBtb2RlbSwgdGltbzsgewotCi0jaWZkZWYgQlNENDQKLSNkZWZpbmUg Y3Rlcm1pZCh4KSBzdHJjcHkoeCwiIikKLSNlbHNlCi0jaWZkZWYgU1ZPUlBPU0lYCi0jaWZuZGVm IENJRQotICAgIGV4dGVybiBjaGFyICpjdGVybWlkKCk7CQkvKiBXaXNoIHRoZXkgYWxsIGhhZCB0 aGlzISAqLwotI2Vsc2UJCQkJCS8qIENJRSBSZWd1bHVzICovCi0jZGVmaW5lIGN0ZXJtaWQoeCkg c3RyY3B5KHgsIiIpCi0jZW5kaWYgLyogQ0lFICovCi0jZW5kaWYgLyogU1ZPUlBPU0lYICovCi0j ZW5kaWYgLyogQlNENDQgKi8KLQotI2lmZGVmIHVsdHJpeAotICAgIGludCB0ZW1wID0gMDsKLSNl bmRpZiAvKiB1bHRyaXggKi8KLQotI2lmbmRlZiBPUEVORklSU1QKLSAgICBjaGFyIGZ1bGxuYW1l W0RFVk5BTUxFTisxXTsKLSNlbmRpZiAvKiBPUEVORklSU1QgKi8KLQotICAgIGNoYXIgKiBmbmFt OwkJCS8qIEZ1bGwgbmFtZSBhZnRlciBleHBhbnNpb24gKi8KLQotICAgIGludCB5OwotCi0jaWZu ZGVmIHBkcDExCi0jZGVmaW5lIE5BTUVGRAkgLyogRmVhdHVyZSB0byBhbGxvdyBuYW1lIHRvIGJl IGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yICovCi0jZW5kaWYgLyogcGRwMTEgKi8KLQotI2lmZGVm IE5BTUVGRAotICAgIGNoYXIgKnA7Ci0gICAgZGVidWcoRjEwMSwidHRvcGVuIHRlbG5ldGZkIiwi Iix0ZWxuZXRmZCk7Ci0jZW5kaWYgLyogTkFNRUZEICovCi0KLSAgICBkZWJ1ZyhGMTEwLCJ0dG9w ZW4gdHRuYW1lIix0dG5hbWUsMCk7Ci0gICAgZGVidWcoRjExMCwidHRvcGVuIHR0bm1zdiIsdHRu bXN2LDApOwotICAgIGRlYnVnKEYxMDEsInR0b3BlbiBtb2RlbSIsIiIsbW9kZW0pOwotICAgIGRl YnVnKEYxMDEsInR0b3BlbiBuZXRjb25uIiwiIixuZXRjb25uKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0 dG9wZW4gdHR5ZmQiLCIiLHR0eWZkKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gKmxjbCIsIiIs KmxjbCk7Ci0gICAgZGVidWcoRjEwMSwidHRvcGVuIHR0bWRtIiwiIix0dG1kbSk7Ci0gICAgZGVi dWcoRjEwMSwidHRvcGVuIHR0bmV0IiwiIix0dG5ldCk7Ci0KLSAgICB0dHBtc2sgPSAweGZmOwot ICAgIGxvY2twaWRbMF0gPSAnXDAnOwotCi0gICAgaWYgKHR0eWZkID4gLTEpIHsJCQkvKiBJZiBk ZXZpY2UgYWxyZWFkeSBvcGVuZWQgKi8KLSAgICAgICAgaWYgKCFzdHJuY21wKHR0bmFtZSx0dG5t c3YsREVWTkFNTEVOKSkgLyogYXJlIG5ldyAmIG9sZCBuYW1lcyBlcXVhbD8gKi8KLQkgIHJldHVy bigwKTsJCQkvKiBZZXMsIG5vdGhpbmcgdG8gZG8gLSBqdXN0IHJldHVybiAqLwotCXR0bm1zdlsw XSA9ICdcMCc7CQkvKiBObywgY2xlYXIgb3V0IG9sZCBuYW1lICovCi0JdHRjbG9zKHR0eWZkKTsJ CQkvKiBjbG9zZSBvbGQgY29ubmVjdGlvbi4gICovCi0gICAgfQotICAgIHdhc2Nsb3NlZCA9IDA7 CQkJLyogTmV3IGNvbm5lY3Rpb24sIG5vdCBjbG9zZWQgeWV0LiAqLwotICAgIHR0cGlwZSA9IDA7 CQkJCS8qIEFzc3VtZSBpdCdzIG5vdCBhIHBpcGUgKi8KLSAgICB0dHB0eSA9IDA7CQkJCS8qIG9y IGEgcHR5Li4uICovCi0KLSNpZmRlZiBORVRDT05OCi0vKgotICBUaGlzIGlzIGEgYml0IHRyaWNr eS4uLiAgU3VwcG9zZSB0aGF0IHByZXZpb3VzbHkgS2VybWl0IGhhZCBkaWFsZWQgYSB0ZWxuZXQK LSAgbW9kZW0gc2VydmVyICgic2V0IGhvc3QgeHh4OjIwMDEsIHNldCBtb2RlbSB0eXBlIHVzciwg ZGlhbCAuLi4iKS4gIFRoZW4gdGhlCi0gIGNvbm5lY3Rpb24gd2FzIGNsb3NlZCAodHR5ZmQgPSAt MSksIGFuZCB0aGVuIGEgUkVESUFMIGNvbW1hbmQgd2FzIGdpdmVuLiAgQXQKLSAgdGhpcyBwb2lu dCB3ZSd2ZSBvYmxpdGVyYXRlZCB0aGUgbmVnYXRpdmUgbW9kZW0gdHlwZSBoYWNrLCBhbmQgc28g d291bGQKLSAgdHJlYXQgdGhlIElQIGhvc3RuYW1lIGFzIGEgZGV2aWNlIG5hbWUsIGFuZCB3b3Vs ZCB0aGVuIGZhaWwgYmVjYXVzZSBvZiAiTm8KLSAgc3VjaCBkZXZpY2Ugb3IgZGlyZWN0b3J5Ii4g IEJ1dCB0aGUgcHJldmlvdXMgY29ubmVjdGlvbiBoYXMgbGVmdCBiZWhpbmQgc29tZQotICBjbHVl cywgc28gbGV0J3MgdXNlIHRoZW0uLi4KLSovCi0gICAgaWYgKHR0eWZkIDwgMCkgewkJCS8qIENv bm5lY3Rpb24gaXMgbm90IG9wZW4gKi8KLQlpZiAoIXN0cmNtcCh0dG5hbWUsdHRubXN2KSkgewkv KiBPbGQgYW5kIG5ldyBuYW1lcyB0aGUgc2FtZT8gKi8KLQkgICAgaWYgKCgobmV0Y29ubiA+IDAp ICYmICh0dG1kbSA8IDApKSB8fAotCQkoKHR0bmV0ID4gMCkgJiYKLQkJICghY2tzdHJjaHIodHRu YW1lLCcvJykpICYmIChja3N0cmNocih0dG5hbWUsJzonKSkpCi0JCSkgewotCQlpbnQgeCwgcmM7 Ci0JCXggPSAodHRtZG0gPCAwKSA/IC10dG1kbSA6IHR0bmV0OwotCQlyYyA9IG5ldG9wZW4odHRu YW1lLCBsY2wsIHgpOwotCQlkZWJ1ZyhGMTExLCJ0dG9wZW4gUkVPUEVOIG5ldG9wZW4iLHR0bmFt ZSxyYyk7Ci0JCWlmIChyYyA+IC0xKSB7Ci0JCSAgICBuZXRjb25uID0gMTsKLQkJICAgIHhsb2Nh bCA9ICpsY2wgPSAxOwotCQl9IGVsc2UgewotCQkgICAgbmV0Y29ubiA9IDA7Ci0JCX0KLQkJZ290 c2lncyA9IDA7Ci0JCXJldHVybihyYyk7Ci0JICAgIH0KLQl9Ci0gICAgfQotI2VuZGlmIC8qIE5F VENPTk4gKi8KLQotI2lmZGVmIE1BWE5BTUxFTgotICAgIGRlYnVnKEYxMDAsInR0b3BlbiBNQVhO QU1MRU4gZGVmaW5lZCIsIiIsMCk7Ci0jZWxzZQotICAgIGRlYnVnKEYxMDAsInR0b3BlbiBNQVhO QU1MRU4gKk5PVCogZGVmaW5lZCIsIiIsMCk7Ci0jZW5kaWYKLQotI2lmZGVmIEJTRDQKLSAgICBk ZWJ1ZyhGMTAwLCJ0dG9wZW4gQlNENCBkZWZpbmVkIiwiIiwwKTsKLSNlbHNlCi0gICAgZGVidWco RjEwMCwidHRvcGVuIEJTRDQgKk5PVCogZGVmaW5lZCIsIiIsMCk7Ci0jZW5kaWYgLyogQlNENCAq LwotCi0jaWZkZWYgQlNENDIKLSAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gQlNENDIgZGVmaW5lZCIs IiIsMCk7Ci0jZWxzZQotICAgIGRlYnVnKEYxMDAsInR0b3BlbiBCU0Q0MiAqTk9UKiBkZWZpbmVk IiwiIiwwKTsKLSNlbmRpZiAvKiBCU0Q0MiAqLwotCi0jaWZkZWYgTVlSRUFECi0gICAgZGVidWco RjEwMCwidHRvcGVuIE1ZUkVBRCBkZWZpbmVkIiwiIiwwKTsKLSNlbHNlCi0gICAgZGVidWcoRjEw MCwidHRvcGVuIE1ZUkVBRCAqTk9UKiBkZWZpbmVkIiwiIiwwKTsKLSNlbmRpZiAvKiBNWVJFQUQg Ki8KLQotI2lmZGVmCU5FVENPTk4KLSAgICBpZiAobW9kZW0gPCAwKSB7CQkJLyogbW9kZW0gPCAw ID0gY29kZSBmb3IgbmV0d29yayAqLwotCWludCB4OwotCXR0bWRtID0gbW9kZW07Ci0JbW9kZW0g PSAtbW9kZW07CQkJLyogUG9zaXRpdmUgbmV0d29yayB0eXBlIG51bWJlciAqLwotCWZkZmxhZyA9 IDA7CQkJLyogU3RkaW8gbm90IHJlZGlyZWN0ZWQuICovCi0JbmV0Y29ubiA9IDE7CQkJLyogQW5k IGl0J3MgYSBuZXR3b3JrIGNvbm5lY3Rpb24gKi8KLQlkZWJ1ZyhGMTExLCJ0dG9wZW4gbmV0Iix0 dG5hbWUsbW9kZW0pOwotI2lmZGVmIE5BTUVGRAotCWZvciAocCA9IHR0bmFtZTsgaXNkaWdpdCgq cCk7IHArKykgOyAvKiBDaGVjayBmb3IgYWxsIGRpZ2l0cyAqLwotIAlpZiAoKnAgPT0gJ1wwJyAm JiAodGVsbmV0ZmQgfHwgeDI1ZmQpKSB7IC8qIEF2b2lkIFguMTIxIGFkZHJlc3NlcyAqLwotCSAg ICB0dHlmZCA9IGF0b2kodHRuYW1lKTsJLyogSXMgdGhlcmUgYSB3YXkgdG8gdGVzdCBpdCdzIG9w ZW4/ICovCi0JICAgIHR0ZmRmbGcgPSAxOwkJLyogV2UgZ290IGFuIG9wZW4gZmlsZSBkZXNjcmlw dG9yICovCi0JICAgIGRlYnVnKEYxMTEsInR0b3BlbiBuZXQgdHRmZGZsZyIsdHRuYW1lLHR0ZmRm bGcpOwotCSAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gbmV0IHR0eWZkIiwiIix0dHlmZCk7Ci0JICAg IGNrc3RybmNweSh0dG5tc3YsdHRuYW1lLERFVk5BTUxFTik7IC8qIFJlbWVtYmVyIHRoZSAibmFt ZSIuICovCi0JICAgIHggPSAxOwkJCS8qIFJldHVybiBjb2RlIGlzICJnb29kIi4gKi8KLQkgICAg aWYgKHRlbG5ldGZkKSB7Ci0JCXR0bmV0ID0gTkVUX1RDUEI7Ci0JCWlmICh0dG5wcm90byAhPSBO UF9UQ1BSQVcpCi0JCSAgdHRucHJvdG8gPSBOUF9URUxORVQ7Ci0jaWZkZWYgU1VOWDI1Ci0JICAg IH0gZWxzZSBpZiAoeDI1ZmQpIHsKLQkJdHRuZXQgPSBORVRfU1gyNTsKLQkJdHRucHJvdG8gPSBO UF9OT05FOwotI2VuZGlmIC8qIFNVTlgyNSAqLwotCSAgICB9Ci0JfSBlbHNlIHsJCQkvKiBIb3N0 IG5hbWUgb3IgYWRkcmVzcyBnaXZlbiAqLwotI2lmZGVmIE5FVFBUWQotCSAgICBpZiAobW9kZW0g PT0gTkVUX1BUWSkgewotCQlpbnQgeDsKLQkJaWYgKG5vcHVzaCkgewotCQkgICAgZGVidWcoRjEw MCwidHRvcGVuIFBUWTogbm9wdXNoIiwiIiwwKTsKLQkJICAgIHJldHVybigtMSk7Ci0JCX0KLSAg ICAgICAgICAgICAgICB0dG5ldCA9IE5FVF9QVFk7Ci0JCXR0bnByb3RvID0gTlBfTk9ORTsKLSAg ICAgICAgICAgICAgICBuZXRjb25uID0gMTsgICAgICAgICAgICAvKiBidXQgd2UgZG9uJ3QgdXNl IG5ldHdvcmsgaS9vICovCi0gICAgICAgICAgICAgICAgdHRwdHkgPSAxOwotICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTAsInR0b3BlbiBQVFkiLHR0bmFtZSwwKTsKLQkJeCA9IGRvX3B0eSgmdHR5 ZmQsdHRuYW1lLDApOwotCQlpZiAoeCA+IC0xKSB7Ci0JCSAgICBja3N0cm5jcHkodHRubXN2LHR0 bmFtZSxERVZOQU1MRU4pOwotCQkgICAgeGxvY2FsID0gKmxjbCA9IDE7CS8qIEl0J3MgbG9jYWwg Ki8KLQkJfSBlbHNlIHsKLQkJICAgIHR0cHR5ID0gMDsKLQkJICAgIG5ldGNvbm4gPSAwOwotCQl9 Ci0JCWdvdHNpZ3MgPSAwOwotCQlyZXR1cm4oeCk7Ci0JICAgIH0KLSNlbmRpZiAvKiBORVRQVFkg Ki8KLSNpZmRlZiBORVRDTUQKLS8qCi0gIGR1cDIoKSBpcyBub3QgYXZhaWxhYmxlIG9uIG9sZGVy IFN5c3RlbSBWIHBsYXRmb3JtcyBsaWtlIEFUJlQgM0J4LiAgRm9yCi0gIHRob3NlIHN5c3RlbXMg d2UgcHVudCBieSBub3QgZGVmaW5pbmcgTkVUQ01ELCBidXQgd2UgbWlnaHQgYmUgYWJsZSB0byBk bwotICBiZXR0ZXIgLS0gc2VlIHdvcmthcm91bmRzIGZvciB0aGlzIHByb2JsZW0gaW4gY2t1Zmlv LmMgKHNlYXJjaCBmb3IgZHVwMikuCi0qLwotCSAgICBpZiAobW9kZW0gPT0gTkVUX0NNRCkgewot CQlpZiAobm9wdXNoKSB7Ci0JCSAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gcGlwZTogbm9wdXNoIiwi IiwwKTsKLQkJICAgIHJldHVybigtMSk7Ci0JCX0KLQkJaWYgKHBpcGUocGlwZTApIHx8IHBpcGUo cGlwZTEpKSB7Ci0JCSAgICBwZXJyb3IoIlBpcGUgZXJyb3IiKTsKLQkJICAgIHJldHVybigtMSk7 Ci0JCX0KLQkJdHRwaWQgPSBmb3JrKCk7CQkvKiBNYWtlIGEgZm9yayAqLwotCi0JCXN3aXRjaCAo dHRwaWQpIHsKLQkJICBjYXNlIC0xOgkJLyogRXJyb3IgbWFraW5nIGZvcmsgKi8KLQkJICAgIGNs b3NlKHBpcGUwWzBdKTsKLQkJICAgIGNsb3NlKHBpcGUwWzFdKTsKLQkJICAgIGNsb3NlKHBpcGUx WzBdKTsKLQkJICAgIGNsb3NlKHBpcGUxWzFdKTsKLQkJICAgIHBlcnJvcigiRm9yayBlcnJvciIp OwotCQkgICAgcmV0dXJuKC0xKTsKLQkJICBjYXNlIDA6CQkvKiBDaGlsZC4gKi8KLQkJICAgIGNs b3NlKHBpcGUwWzBdKTsKLQkJICAgIGNsb3NlKHBpcGUxWzFdKTsKLQkJICAgIGR1cDIocGlwZTBb MV0sIDEpOwotCQkgICAgY2xvc2UocGlwZTBbMV0pOwotCQkgICAgZHVwMihwaXBlMVswXSwgMCk7 Ci0JCSAgICBjbG9zZShwaXBlMVswXSk7Ci0JCSAgICBzeXN0ZW0odHRuYW1lKTsKLQkJICAgIF9l eGl0KDApOwotCQkgIGRlZmF1bHQ6CQkvKiBQYXJlbnQgKi8KLQkJICAgIGNsb3NlKHBpcGUwWzFd KTsKLQkJICAgIGNsb3NlKHBpcGUxWzBdKTsKLQkJICAgIGZkaW4gPSBwaXBlMFswXTsJLyogUmVh ZCBmcm9tIHBpcGUgKi8KLQkJICAgIGZkb3V0ID0gcGlwZTFbMV07CS8qIFdyaXRlIHRvIHBpcGUg Ki8KLQkJICAgIHR0b3V0ID0gZmRvcGVuKGZkb3V0LCJ3Iik7IC8qIEdldCBzdHJlYW0gc28gd2Ug Y2FuICovCi0JCSAgICBpZiAoIXR0b3V0KSB7CS8qIG1ha2UgaXQgdW5idWZmZXJlZC4gKi8KLQkJ CXBlcnJvcigiZmRvcGVuIGZhaWx1cmUiKTsKLQkJCXJldHVybigtMSk7Ci0JCSAgICB9Ci0JCSAg ICBzZXRidWYodHRvdXQsTlVMTCk7Ci0JCSAgICBja3N0cm5jcHkodHRubXN2LHR0bmFtZSxERVZO QU1MRU4pOwotCQkgICAgeGxvY2FsID0gKmxjbCA9IDE7CS8qIEl0J3MgbG9jYWwgKi8KLQkJICAg IG5ldGNvbm4gPSAxOwkvKiBDYWxsIGl0IGEgbmV0d29yayBjb25uZWN0aW9uICovCi0JCSAgICB0 dG1kbSA9IG1vZGVtOwkvKiBSZW1lbWJlciBuZXR3b3JrIHR5cGUgKi8KLQkJICAgIHR0eWZkID0g ZmRpbjsKLQkJICAgIHR0cGlwZSA9IDE7Ci0JCSAgICBnb3RzaWdzID0gMDsKLQkJICAgIHJldHVy bigwKTsKLQkJfQotCSAgICB9Ci0jZW5kaWYgLyogTkVUQ01EICovCi0jZW5kaWYgLyogTkFNRUZE ICovCi0JICAgIHggPSBuZXRvcGVuKHR0bmFtZSwgbGNsLCBtb2RlbSk7IC8qIChzZWUgY2tjbmV0 LmgpICovCi0JICAgIGlmICh4ID4gLTEpIHsKLQkJY2tzdHJuY3B5KHR0bm1zdix0dG5hbWUsREVW TkFNTEVOKTsKLQkgICAgfSBlbHNlIG5ldGNvbm4gPSAwOwotI2lmZGVmIE5BTUVGRAotCX0KLSNl bmRpZiAvKiBOQU1FRkQgKi8KLQotI2lmZGVmIHNvbnlfbmV3cwkJCS8qIFNvbnkgTkVXUyAqLwot CWlmIChpb2N0bCh0dHlmZCxUSU9DS0dFVCwma21fZXh0KSA8IDApIHsgLyogR2V0IEthbmppIG1v ZGUgKi8KLQkgICAgcGVycm9yKCJ0dG9wZW4gZXJyb3IgZ2V0dGluZyBLYW5qaSBtb2RlIChuZXR3 b3JrKSIpOwotCSAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4gZXJyb3IgZ2V0dGluZyBLYW5qaSBtb2Rl IiwibmV0d29yayIsMCk7Ci0JICAgIGttX2V4dCA9IC0xOwkJLyogTWFrZSBzdXJlIHRoaXMgc3Rh eXMgdW5kZWZpbmVkLiAqLwotCX0KLSNlbmRpZiAvKiBzb255X25ld3MgKi8KLQotCXhsb2NhbCA9 ICpsY2wgPSAxOwkJLyogTmV0d29yayBjb25uZWN0aW9ucyBhcmUgbG9jYWwuICovCi0JZGVidWco RjEwMSwidHRvcGVuIG5ldCB4IiwiIix4KTsKLSNpZmRlZiBDT01NRU5UCi0vKiBMZXQgbmV0b3Bl bigpIGRvIHRoaXMgKi8KLQlpZiAoeCA+IC0xICYmICF4MjVmZCkKLQkgIHggPSB0bl9pbmkoKTsJ CQkvKiBJbml0aWFsaXplIFRFTE5FVCBwcm90b2NvbCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8K LQlnb3RzaWdzID0gMDsKLQlyZXR1cm4oeCk7Ci0gICAgfSBlbHNlIHsJCQkJLyogVGVybWluYWwg ZGV2aWNlICovCi0jZW5kaWYJLyogTkVUQ09OTiAqLwotCi0jaWZkZWYgTkFNRUZECi0vKgotICBU aGlzIGNvZGUgbGV0cyB5b3UgZ2l2ZSBLZXJtaXQgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IgZm9y IGEgc2VyaWFsCi0gIGNvbW11bmljYXRpb24gZGV2aWNlLCByYXRoZXIgdGhhbiBhIGRldmljZSBu YW1lLiAgS2VybWl0IGFzc3VtZXMgdGhhdCB0aGUKLSAgbGluZSBpcyBhbHJlYWR5IG9wZW4sIGxv Y2tlZCwgY29uZGl0aW9uZWQgd2l0aCB0aGUgcmlnaHQgcGFyYW1ldGVycywgZXRjLgotKi8KLQlm b3IgKHAgPSB0dG5hbWU7IGlzZGlnaXQoKnApOyBwKyspIDsgLyogQ2hlY2sgZm9yIGFsbC1kaWdp dHMgKi8KLQlpZiAoKnAgPT0gJ1wwJykgewotCSAgICB0dHlmZCA9IGF0b2kodHRuYW1lKTsJLyog SXMgdGhlcmUgYSB3YXkgdG8gdGVzdCBpdCdzIG9wZW4/ICovCi0JICAgIGRlYnVnKEYxMTEsInR0 b3BlbiBnb3Qgb3BlbiBmZCIsdHRuYW1lLHR0eWZkKTsKLQkgICAgY2tzdHJuY3B5KHR0bm1zdix0 dG5hbWUsREVWTkFNTEVOKTsgLyogUmVtZW1iZXIgdGhlICJuYW1lIi4gKi8KLQkgICAgaWYgKHR0 eWZkID49IDAgJiYgdHR5ZmQgPCAzKSAvKiBJZiBpdCdzIHN0ZGlvLi4uICovCi0JICAgICAgeGxv Y2FsID0gKmxjbCA9IDA7CS8qIHdlJ3JlIGluIHJlbW90ZSBtb2RlICovCi0JICAgIGVsc2UJCQkv KiBvdGhlcndpc2UgKi8KLQkgICAgICB4bG9jYWwgPSAqbGNsID0gMTsJLyogbG9jYWwgbW9kZS4g Ki8KLQkgICAgbmV0Y29ubiA9IDA7CQkvKiBBc3N1bWUgaXQncyBub3QgYSBuZXR3b3JrLiAqLwot CSAgICB0dnRmbGcgPSAwOwkJCS8qIE1pZ2h0IG5lZWQgdG8gaW5pdGlhbGl6ZSBtb2Rlcy4gKi8K LQkgICAgdHRtZG0gPSBtb2RlbTsJCS8qIFJlbWVtYmVyIG1vZGVtIHR5cGUuICovCi0JICAgIGZk ZmxhZyA9IDA7CQkJLyogU3RkaW8gbm90IHJlZGlyZWN0ZWQuICovCi0JICAgIHR0ZmRmbGcgPSAx OwkJLyogRmxhZyB3ZSB3ZXJlIG9wZW5lZCB0aGlzIHdheS4gKi8KLQkgICAgZGVidWcoRjExMSwi dHRvcGVuIG5vbi1uZXQgdHRmZGZsZyIsdHRuYW1lLHR0ZmRmbGcpOwotCSAgICBkZWJ1ZyhGMTAx LCJ0dG9wZW4gbm9uLW5ldCB0dHlmZCIsIiIsdHR5ZmQpOwotCi0jaWZkZWYgc29ueV9uZXdzCQkJ LyogU29ueSBORVdTICovCi0JICAgIC8qIEdldCBkZXZpY2UgS2FuamkgbW9kZSAqLwotCSAgICBp ZiAoaW9jdGwodHR5ZmQsVElPQ0tHRVQsJmttX2V4dCkgPCAwKSB7Ci0JCXBlcnJvcigidHRvcGVu IGVycm9yIGdldHRpbmcgS2FuamkgbW9kZSIpOwotCQlkZWJ1ZyhGMTAxLCJ0dG9wZW4gZXJyb3Ig Z2V0dGluZyBLYW5qaSBtb2RlIiwiIiwwKTsKLQkJa21fZXh0ID0gLTE7CQkvKiBNYWtlIHN1cmUg dGhpcyBzdGF5cyB1bmRlZmluZWQuICovCi0JICAgIH0KLSNlbmRpZiAvKiBzb255X25ld3MgKi8K LQkgICAgZ290c2lncyA9IDA7Ci0JICAgIHJldHVybigwKTsJCQkvKiBSZXR1cm4gc3VjY2VzcyAq LwotCX0KLSNlbmRpZiAvKiBOQU1FRkQgKi8KLSNpZmRlZiBORVRDT05OCi0gICAgfQotI2VuZGlm IC8qIE5FVENPTk4gKi8KLQotLyogSGVyZSB3ZSBoYXZlIHRvIG9wZW4gYSBzZXJpYWwgZGV2aWNl IG9mIHRoZSBnaXZlbiBuYW1lLiAqLwotCi0gICAgbmV0Y29ubiA9IDA7CQkJLyogU28gaXQncyBu b3QgYSBuZXR3b3JrIGNvbm5lY3Rpb24gKi8KLSAgICBvY2N0ID0gc2lnbmFsKFNJR0lOVCwgY2N0 cmFwKTsJLyogU2V0IENvbnRyb2wtQyB0cmFwLCBzYXZlIG9sZCBvbmUgKi8KLSAgICBzaWdpbnRf aWduID0gMDsKLQotICAgIHR2dGZsZyA9IDA7CQkJLyogRmxhZyBmb3IgdXNlIGJ5IHR0dnQoKS4g Ki8KLQkJCQkvKiAwID0gdHR2dCBub3QgY2FsbGVkIHlldCBmb3IgdGhpcyBkZXZpY2UgKi8KLQot ICAgIGZkZmxhZyA9ICghaXNhdHR5KDApIHx8ICFpc2F0dHkoMSkpOyAvKiBGbGFnIGZvciBzdGRp byByZWRpcmVjdGVkICovCi0gICAgZGVidWcoRjEwMSwidHRvcGVuIGZkZmxhZyIsIiIsZmRmbGFn KTsKLQotICAgIHR0bWRtID0gbW9kZW07ICAgICAgICAgICAgICAgICAgICAgIC8qIE1ha2UgdGhp cyBhdmFpbGFibGUgdG8gb3RoZXIgZm5zICovCi0gICAgeGxvY2FsID0gKmxjbDsgICAgICAgICAg ICAgICAgICAgICAgLyogTWFrZSB0aGlzIGF2YWlsYWJsZSB0byBvdGhlciBmbnMgKi8KLQotLyog Q29kZSBmb3IgaGFuZGxpbmcgYmlkaXJlY3Rpb25hbCB0dHkgbGluZXMgZ29lcyBoZXJlLiAqLwot LyogVXNlIHNwZWNpZmllZCBtZXRob2QgZm9yIHR1cm5pbmcgb2ZmIGxvZ2lucyBhbmQgc3VwcHJl c3NpbmcgZ2V0dHkuICovCi0KLSNpZmRlZiBBQ1VDTlRSTAotICAgIC8qIFNob3VsZCBwdXQgY2Fs bCB0byBwcml2X29uKCkgaGVyZSwgYnV0IHRoYXQgd291bGQgYmUgdmVyeSByaXNreSEgKi8KLSAg ICBhY3VjbnRybCgiZGlzYWJsZSIsdHRuYW1lKTsgICAgICAgICAvKiBhY3VjbnRybCgpIHByb2dy YW0uICovCi0gICAgLyogYW5kIHByaXZfb2ZmKCkgaGVyZS4uLiAqLwotI2Vsc2UKLSNpZmRlZiBB VFQ3MzAwCi0gICAgaWYgKChhdHRtb2RlbSAmIERPR0VUWSkgPT0gMCkgICAgICAgLyogb2ZmZ2V0 dHkoKSBwcm9ncmFtLiAqLwotICAgICAgYXR0bW9kZW0gfD0gb2ZmZ2V0dHkodHRuYW1lKTsJLyog UmVtZW1iZXIgcmVzcG9uc2UuICAqLwotI2VuZGlmIC8qIEFUVDczMDAgKi8KLSNlbmRpZiAvKiBB Q1VDTlRSTCAqLwotCi0jaWZkZWYgT1BFTkZJUlNUCi0vKgotIDE5ODUtMjAwMTogb3BlbnMgZGV2 aWNlIGZpcnN0IHRoZW4gZ2V0cyBsb2NrOyByZWFzb246Ci0gS2VybWl0IHVzdWFsbHkgaGFzIHRv IHJ1biBzZXR1aWQgb3Igc2V0Z2lkIGluIG9yZGVyIHRvIGNyZWF0ZSBhIGxvY2tmaWxlLgotIElm IHlvdSBnaXZlIGEgU0VUIExJTkUgY29tbWFuZCBmb3IgYSBkZXZpY2UgdGhhdCBoYXBwZW5zIHRv IGJlIHlvdXIgam9iJ3MKLSBjb250cm9sbGluZyB0ZXJtaW5hbCwgS2VybWl0IGRvZXNuJ3QgaGF2 ZSB0byBjcmVhdGUgYSBsb2NrZmlsZSwgYW5kIGluIGZhY3QKLSBzaG91bGQgbm90IGNyZWF0ZSBv bmUsIGFuZCB3b3VsZCBmYWlsIGlmIGl0IHRyaWVkIHRvIGlmIGl0IGRpZCBub3QgaGF2ZSB0aGUK LSByZXF1aXJlZCBwcml2aWxlZ2VzLiAgQnV0IHlvdSBjYW4ndCBmaW5kIG91dCBpZiB0d28gdHR5 IGRldmljZSBuYW1lcyBhcmUKLSBlcXVpdmFsZW50IHVudGlsIHlvdSBoYXZlIGEgZmlsZSBkZXNj cmlwdG9yIHRoYXQgeW91IGNhbiBnaXZlIHRvIHR0eW5hbWUoKS4KLSBCdXQgdGhpcyBjYW4gY2F1 c2UgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIEtlcm1pdCBhbmQgW21dZ2V0dHkuICBTbyBzZWUK LSB0aGUgWyNdZWxzZSBwYXJ0Li4uCi0qLyAKLQotLyoKLSBJbiB0aGUgZm9sbG93aW5nIHNlY3Rp b24sIHdlIG9wZW4gdGhlIHR0eSBkZXZpY2UgZm9yIHJlYWQvd3JpdGUuCi0gSWYgYSBtb2RlbSBo YXMgYmVlbiBzcGVjaWZpZWQgdmlhICJzZXQgbW9kZW0iIHByaW9yIHRvICJzZXQgbGluZSIKLSB0 aGVuIHRoZSBPX05ERUxBWSBwYXJhbWV0ZXIgaXMgdXNlZCBpbiB0aGUgb3BlbiwgcHJvdmlkZWQg dGhpcyBzeW1ib2wKLSBpcyBkZWZpbmVkIChlLmcuIGluIGZjbnRsLmgpLCBzbyB0aGF0IHRoZSBw cm9ncmFtIGRvZXMgbm90IGhhbmcgd2FpdGluZwotIGZvciBjYXJyaWVyICh3aGljaCBpbiBtb3N0 IGNhc2VzIHdvbid0IGJlIHByZXNlbnQgYmVjYXVzZSBhIGNvbm5lY3Rpb24KLSBoYXMgbm90IGJl ZW4gZGlhbGVkIHlldCkuICBPX05ERUxBWSBpcyByZW1vdmVkIGxhdGVyIG9uIGluIHR0b3Blbigp LiAgSXQKLSB3b3VsZCBtYWtlIG1vcmUgc2Vuc2UgdG8gZmlyc3QgZGV0ZXJtaW5lIGlmIHRoZSBs aW5lIGlzIGxvY2FsIGJlZm9yZQotIGRvaW5nIHRoaXMsIGJ1dCBiZWNhdXNlIHR0eW5hbWUoKSBy ZXF1aXJlcyBhIGZpbGUgZGVzY3JpcHRvciwgd2UgaGF2ZQotIHRvIG9wZW4gaXQgZmlyc3QuICBT ZWUgZG9fb3BlbigpLgotCi0gTm93IG9wZW4gdGhlIGRldmljZSB1c2luZyB0aGUgZGVzaXJlZCB0 cmVhdG1lbnQgb2YgY2Fycmllci4KLSBJZiBjYXJyaWVyIGlzIFJFUVVJUkVELCB0aGVuIG9wZW4g Y291bGQgaGFuZyBmb3JldmVyLCBzbyBhbiBvcHRpb25hbAotIHRpbWVyIGlzIHByb3ZpZGVkLiAg SWYgY2FycmllciBpcyBub3QgcmVxdWlyZWQsIHRoZSB0aW1lciBzaG91bGQgbmV2ZXIKLSBnbyBv ZmYsIGFuZCBzaG91bGQgZG8gbm8gaGFybS4uLgotKi8KLSAgICB0dG90bW8gPSAwOwkJCQkvKiBG bGFnIG5vIHRpbWVvdXQgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gdGltbyIsIiIsdGltbyk7 Ci0gICAgZGVidWcoRjEwMSwidHRvcGVuIHhsb2NhbCIsIiIseGxvY2FsKTsKLSAgICBpZiAodGlt byA+IDApIHsKLQlpbnQgeHg7Ci0Jc2F2YWwgPSBzaWduYWwoU0lHQUxSTSx0aW1lcmgpOwkvKiBU aW1lZCwgc2V0IHVwIHRpbWVyLiAqLwotCXh4ID0gYWxhcm0odGltbyk7CQkvKiBUaW1lZCBvcGVu KCkgKi8KLQlkZWJ1ZyhGMTAxLCJ0dG9wZW4gYWxhcm0iLCIiLHh4KTsKLQlpZiAoCi0jaWZkZWYg Q0tfUE9TSVhfU0lHCi0JICAgIHNpZ3NldGptcChzamJ1ZiwxKQotI2Vsc2UKLQkgICAgc2V0am1w KHNqYnVmKQotI2VuZGlmIC8qIENLX1BPU0lYX1NJRyAqLwotCSAgICApIHsKLQkgICAgdHRvdG1v ID0gMTsJCQkvKiBGbGFnIHRpbWVvdXQuICovCi0JfSBlbHNlIHR0eWZkID0gZG9fb3Blbih0dG5h bWUpOwotCXR0aW1vZmYoKTsKLQlkZWJ1ZyhGMTExLCJ0dG9wZW4iLCJtb2RlbSIsbW9kZW0pOwot CWRlYnVnKEYxMDEsInR0b3BlbiB0dHlmZCIsIiIsdHR5ZmQpOwotCWRlYnVnKEYxMDEsInR0b3Bl biBhbGFybSByZXR1cm4iLCIiLHR0b3Rtbyk7Ci0gICAgfSBlbHNlIHsKLQllcnJubyA9IDA7Ci0J dHR5ZmQgPSBkb19vcGVuKHR0bmFtZSk7Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsInR0b3BlbiB0 dHlmZCIsdHRuYW1lLHR0eWZkKTsKLSAgICBpZiAodHR5ZmQgPCAwKSB7CQkJLyogSWYgY291bGRu J3Qgb3BlbiwgZmFpbC4gKi8KLQlkZWJ1ZyhGMTAxLCJ0dG9wZW4gZXJybm8iLCIiLGVycm5vKTsK LQlpZiAoZXJybm8gPiAwICYmICFxdWlldCkKLQkgIHBlcnJvcih0dG5hbWUpOwkJLyogUHJpbnQg bWVzc2FnZSAqLwotCi0jaWZkZWYgQVRUNzMwMAotCWlmIChhdHRtb2RlbSAmIERPR0VUWSkJCS8q IHdhcyBnZXR0eSgxbSkgcnVubmluZyBiZWZvcmUgdXM/ICovCi0JICBvbmdldHR5KHR0bm1zdik7 CQkvKiB5ZXMsIHJlc3RhcnQgb24gdHR5IGxpbmUgKi8KLQlhdHRtb2RlbSAmPSB+RE9HRVRZOwkJ Lyogbm8gcGhvbmUgaW4gdXNlLCBnZXR0eSByZXN0b3JlZCAqLwotI2Vsc2UKLSNpZmRlZiBBQ1VD TlRSTAotICAgICAgICAvKiBTaG91bGQgcHV0IGNhbGwgdG8gcHJpdl9vbigpIGhlcmUsIGJ1dCB0 aGF0IHdvdWxkIGJlIHJpc2t5ISAqLwotCWFjdWNudHJsKCJlbmFibGUiLHR0bmFtZSk7CS8qIGFj dWNudHJsKCkgcHJvZ3JhbS4gKi8KLQkvKiBhbmQgcHJpdl9vZmYoKSBoZXJlLi4uICovCi0jZW5k aWYgLyogQUNVTlRSTCAqLwotI2VuZGlmIC8qIEFUVDczMDAgKi8KLQotCXNpZ25hbChTSUdJTlQs b2NjdCk7CQkvKiBQdXQgb2xkIEN0cmwtQyB0cmFwIGJhY2suICovCi0JaWYgKGVycm5vID09IEVB Q0NFUykgewkJLyogRGV2aWNlIGlzIHByb3RlY3RlZCBhZ2FpbnN0IHVzZXIgKi8KLQkgICAgZGVi dWcoRjExMCwidHRvcGVuIEVBQ0NFU1MiLHR0bmFtZSwwKTsgLyogUmV0dXJuIC00ICovCi0JICAg IHJldHVybigtNCk7Ci0JfSBlbHNlIHJldHVybih0dG90bW8gPyAtMiA6IC0xKTsgLyogT3RoZXJ3 aXNlIC0yIGlmIHRpbWVvdXQsIG9yIC0xICovCi0gICAgfQotCi0jaWZkZWYgUU5YCi0gICAgewot CWV4dGVybiBpbnQgcW54cG9ydGxvY2s7Ci0JeCA9IHFueG9wZW5jb3VudCgpOwotCWRlYnVnKEYx MDEsInR0b3BlbiBxbnhvcGVuY291bnQiLCIiLHgpOwotCWRlYnVnKEYxMDEsInR0b3BlbiBxbnhw b3J0bG9jayIsIiIscW54cG9ydGxvY2spOwotCWlmICh4IDwgMCAmJiBxbnhwb3J0bG9jaykgewot CSAgICB0dGNsb3MoMCk7Ci0JICAgIHByaW50ZigiP0Nhbid0IGdldCBwb3J0IG9wZW4gY291bnRc biIpOwotCSAgICBwcmludGYoIihUcnkgYWdhaW4gd2l0aCBTRVQgUU5YLVBPUlQtTE9DSyBPRkYp XG4iKTsKLQkgICAgcmV0dXJuKC0xKTsJCQkvKiBJbmRpY2F0ZSBkZXZpY2UgaXMgaW4gdXNlICov Ci0JfQotCWlmICh4ID4gMSkgewkJCS8qIDEgPT0gbWUgKi8KLQkgICAgaWYgKHFueHBvcnRsb2Nr KQotCSAgICAgIHR0Y2xvcygwKTsKLQkgICAgICByZXR1cm4oLTIpOwkJLyogSW5kaWNhdGUgZGV2 aWNlIGlzIGluIHVzZSAqLwotCSAgICBlbHNlIGlmICghcXVpZXQpCi0JICAgICAgcHJpbnRmKCJX QVJOSU5HOiBcIiVzXCIgbG9va3MgYnVzeS4uLlxuIix0dGRldik7Ci0JfQotICAgIH0KLSNlbmRp ZiAvKiBRTlggKi8KLQotI2lmZGVmIFBsYW45Ci0gICAgLyogdGFrZSB0aGlzIG9wcG9ydHVuaXR5 IHRvIG9wZW4gdGhlIGNvbnRyb2wgY2hhbm5lbCAqLwotICAgIGlmIChwOW9wZW50dHljdGwodHRu YW1lKSA8IDApCi0jZWxzZQotICAgIC8qIE1ha2Ugc3VyZSBpdCdzIGEgcmVhbCB0dHkuICovCi0g ICAgaWYgKCF0dGZkZmxnICYmICFpc2F0dHkodHR5ZmQpICYmIHN0cmNtcCh0dG5hbWUsIi9kZXYv bnVsbCIpKQotI2VuZGlmIC8qIFBsYW45ICovCi0gICAgICB7Ci0JZnByaW50ZihzdGRlcnIsIiVz IGlzIG5vdCBhIHRlcm1pbmFsIGRldmljZVxuIix0dG5hbWUpOwotCWRlYnVnKEYxMTEsInR0b3Bl biBub3QgYSB0dHkiLHR0bmFtZSxlcnJubyk7Ci0JY2xvc2UodHR5ZmQpOwotCXR0eWZkID0gLTE7 Ci0Jd2FzY2xvc2VkID0gMTsKLQlzaWduYWwoU0lHSU5ULG9jY3QpOwotCXJldHVybigtMSk7Ci0g ICAgfQotCi0jaWZkZWYgYWVnaXMKLQkvKiBBcG9sbG8gQyBydW50aW1lIGNsYWltcyB0aGF0IGNv bnNvbGUgcGFkcyBhcmUgdHR5IGRldmljZXMsIHdoaWNoCi0JICogaXMgcmVhc29uYWJsZSwgYnV0 IHRoZXkgYXJlbid0IGFueSBnb29kIGZvciBwYWNrZXQgdHJhbnNmZXIuICovCi0JaW9zXyRpbnFf dHlwZV91aWQoKHNob3J0KXR0eWZkLCB0dHl1aWQsIHN0KTsKLQlpZiAoc3QuYWxsICE9IHN0YXR1 c18kb2spIHsKLQkgICAgZnByaW50ZihzdGRlcnIsICJwcm9ibGVtIGdldHRpbmcgdHR5IG9iamVj dCB0eXBlOiAiKTsKLQkgICAgZXJyb3JfJHByaW50KHN0KTsKLQl9IGVsc2UgaWYgKHR0eXVpZCAh PSBzaW9fJHVpZCkgeyAvKiByZWplY3Qgbm9uLVNJTyBsaW5lcyAqLwotCSAgICBjbG9zZSh0dHlm ZCk7IHR0eWZkID0gLTE7Ci0JICAgIHdhc2Nsb3NlZCA9IDE7Ci0JICAgIGVycm5vID0gRU5PVFRZ OyBwZXJyb3IodHRuYW1lKTsKLQkgICAgc2lnbmFsKFNJR0lOVCxvY2N0KTsKLQkgICAgcmV0dXJu KC0xKTsKLQl9Ci0jZW5kaWYgLyogYWVnaXMgKi8KLQotICAgIHNpZ2ludF9pZ24gPSAob2NjdCA9 PSBTSUdfSUdOKSA/IDEgOiAwOwotCi0gICAgY2tzdHJuY3B5KHR0bm1zdix0dG5hbWUsREVWTkFN TEVOKTsJLyogS2VlcCBjb3B5IG9mIG5hbWUgbG9jYWxseS4gKi8KLQotLyogQ2FsbGVyIHdhbnRz IHVzIHRvIGZpZ3VyZSBvdXQgaWYgbGluZSBpcyBjb250cm9sbGluZyB0dHkgKi8KLQotICAgIGlm ICgqbGNsIDwgMCkgewotICAgICAgICBpZiAoc3RyY21wKHR0bmFtZSxDVFROQU0pID09IDApIHsg LyogIi9kZXYvdHR5IiBhbHdheXMgcmVtb3RlICovCi0gICAgICAgICAgICB4bG9jYWwgPSAwOwot CSAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4gdHRuYW1lPUNUVE5BTSIsdHRuYW1lLHhsb2NhbCk7Ci0g ICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKHR0bmFtZSxjdHRuYW0pID09IDApIHsKLSAgICAgICAg ICAgIHhsb2NhbCA9IDA7Ci0JICAgIGRlYnVnKEYxMTEsInR0b3BlbiB0dG5hbWU9Y3R0bmFtIix0 dG5hbWUseGxvY2FsKTsKLQl9IGVsc2UgaWYgKGN0dG5hbVswXSkgewotI2lmZGVmIEJFQk9YX0RS NwotICAgICAgICAgICAgeCA9IHR0bm1zdjsJCQkvKiB0dHluYW1lKCkgaXMgYnJva2VuICovCi0j ZWxzZQotICAgICAgICAgICAgeCA9IHR0eW5hbWUodHR5ZmQpOyAgICAgICAgIC8qIEdldCByZWFs IG5hbWUgb2YgdHRuYW1lLiAqLwotI2VuZGlmIC8qIEJFQk9YX0RSNyAqLwotCSAgICBpZiAoIXgp IHggPSAiIjsKLQkgICAgaWYgKCp4KQotCSAgICAgIHhsb2NhbCA9ICgoc3RybmNtcCh4LGN0dG5h bSxERVZOQU1MRU4pID09IDApID8gMCA6IDEpOwotCSAgICBlbHNlCi0JICAgICAgeGxvY2FsID0g MTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsInR0b3BlbiB0dHluYW1lKHR0eWZkKSB4bG9jYWwi LHgseGxvY2FsKTsKLSAgICAgICAgfQotICAgIH0KLQotI2lmbmRlZiBOT0ZEWkVSTwotLyogTm90 ZSwgdGhlIGZvbGxvd2luZyBjb2RlIHdhcyBhZGRlZCBzbyB0aGF0IFVuaXggImlkbGUtbGluZSIg c25vb3BlcnMgKi8KLS8qIHdvdWxkIG5vdCB0aGluayBLZXJtaXQgd2FzIGlkbGUgd2hlbiBpdCB3 YXMgdHJhbnNmZXJyaW5nIGZpbGVzLCBhbmQgKi8KLS8qIG1heWJlIGxvZyBwZW9wbGUgb3V0LiAq LwotICAgIGlmICh4bG9jYWwgPT0gMCkgewkJCS8qIFJlbW90ZSBtb2RlICovCi0JaWYgKGZkZmxh ZyA9PSAwKSB7CQkvKiBTdGFuZGFyZCBpL28gaXMgbm90IHJlZGlyZWN0ZWQgKi8KLQkgICAgZGVi dWcoRjEwMCwidHRvcGVuIHNldHRpbmcgdHR5ZmQgPSAwIiwiIiwwKTsKLSNpZmRlZiBMWU5YT1MK LQkgICAgLyogT24gTHlueCBPUywgZmQgMCBpcyBvcGVuIGZvciByZWFkIG9ubHkuICovCi0JICAg IGR1cDIodHR5ZmQsMCk7Ci0jZW5kaWYgLyogTFlOWE9TICovCi0JICAgIGNsb3NlKHR0eWZkKTsJ CS8qIFVzZSBmaWxlIGRlc2NyaXB0b3IgMCAqLwotCSAgICB0dHlmZCA9IDA7Ci0JfSBlbHNlIHsJ CQkvKiBTdGFuZGFyZCBpL28gaXMgcmVkaXJlY3RlZCAqLwotCSAgICBkZWJ1ZyhGMTAxLCJ0dG9w ZW4gc3RkaW8gcmVkaXJlY3RlZCIsIiIsdHR5ZmQpOwotCX0KLSAgICB9Ci0jZW5kaWYgLyogTk9G RFpFUk8gKi8KLQotLyogTm93IGNoZWNrIGlmIGxpbmUgaXMgbG9ja2VkIC0tIGlmIHNvIGZhaWws IGVsc2UgbG9jayBmb3Igb3Vyc2VsdmVzICovCi0vKiBOb3RlOiBBZnRlciBoYXZpbmcgZG9uZSB0 aGlzLCBkb24ndCBmb3JnZXQgdG8gZGVsZXRlIHRoZSBsb2NrIGlmIHlvdSAqLwotLyogbGVhdmUg dHRvcGVuKCkgd2l0aCBhbiBlcnJvciBjb25kaXRpb24uICovCi0KLSAgICBsa2YgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBsb2NrICovCi0gICAgaWYgKHhsb2NhbCA+ IDApIHsKLQlpbnQgeHg7IGludCB4cGlkOwotICAgICAgICBpZiAoKHh4ID0gdHRsb2NrKHR0bmFt ZSkpIDwgMCkgeyAvKiBDYW4ndCBsb2NrIGl0LiAqLwotICAgICAgICAgICAgZGVidWcoRjExMSwi dHRvcGVuIHR0bG9jayBmYWlscyIsdHRuYW1lLHh4KTsKLQkgICAgLyogV0FSTklORyAtIFRoaXMg Y2xvc2UoKSBjYW4gaGFuZyBpZiB0dHkgaXMgYW4gZW1wdHkgc29ja2V0Li4uICovCi0gICAgICAg ICAgICBjbG9zZSh0dHlmZCk7CQkvKiBDbG9zZSB0aGUgZGV2aWNlLiAqLwotCSAgICB0dHlmZCA9 IC0xOwkJCS8qIEVyYXNlIGl0cyBmaWxlIGRlc2NyaXB0b3IuICovCi0JICAgIHdhc2Nsb3NlZCA9 IDE7Ci0JICAgIHNpZ25hbChTSUdJTlQsb2NjdCk7CS8qIFB1dCBvbGQgU0lHSU5UIGJhY2suICov Ci0JICAgIHNpZ2ludF9pZ24gPSAob2NjdCA9PSBTSUdfSUdOKSA/IDEgOiAwOwotCSAgICBpZiAo eHggPT0gLTIpIHsJCS8qIElmIGxvY2tmaWxlIHNheXMgZGV2aWNlIGluIHVzZSwgKi8KLSNpZm5k ZWYgTk9VVUNQCi0JCWRlYnVnKEYxMTEsInR0b3BlbiByZWFkaW5nIGxvY2tmaWxlIHBpZCIsZmxm bmFtLHh4KTsKLQkJeHBpZCA9IHR0cnBpZChmbGZuYW0pOwkvKiBUcnkgdG8gcmVhZCBwaWQgZnJv bSBsb2NrZmlsZSAqLwotCQlpZiAoeHBpZCA+IC0xKSB7CS8qIElmIHdlIGdvdCBhIHBpZCAqLwot ICAgICAgICAgICAgICAgICAgICBpZiAoIXF1aWV0KQotCQkgICAgICBwcmludGYoIkxvY2tlZCBi eSBwcm9jZXNzICVkXG4iLHhwaWQpOyAvKiB0ZWxsIHRoZW0uICovCi0JCSAgICBzcHJpbnRmKGxv Y2twaWQsIiVkIix4cGlkKTsJLyogUmVjb3JkIGl0IHRvbyAqLwotCQkgICAgZGVidWcoRjExMCwi dHRvcGVuIGxvY2twaWQiLGxvY2twaWQsMCk7Ci0JCX0gZWxzZSBpZiAoKmZsZm5hbSkgewotCQkg ICAgZXh0ZXJuIGNoYXIgKkRJUkNNRDsKLQkJICAgIGNoYXIgKnAgPSBOVUxMOwotCQkgICAgaW50 IHg7Ci0JCSAgICB4ID0gKGludClzdHJsZW4oZmxmbmFtKSArIChpbnQpc3RybGVuKERJUkNNRCkg KyAyOwotCQkgICAgcCA9IG1hbGxvYyh4KTsJLyogUHJpbnQgYSBkaXJlY3RvcnkgbGlzdGluZy4g Ki8KLS8qCi0gIE5vdGU6IHByaXZfb24oKSB3b24ndCBoZWxwIGhlcmUsIGJlY2F1c2Ugd2UgZG8g bm90IHBhc3MgcHJpdnMgYWxvbmcgdG8KLSAgdG8gaW5mZXJpb3IgcHJvY2Vzc2VzLCBpbiB0aGlz IGNhc2UgbHMuICBTbyBpZiB0aGUgcmVhbCB1c2VyIGRvZXMgbm90IGhhdmUKLSAgZGlyZWN0b3J5 LWxpc3RpbmcgYWNjZXNzIHRvIHRoZSBsb2NrZmlsZSBkaXJlY3RvcnksIHRoaXMgd2lsbCByZXN1 bHQgaW4KLSAgc29tZXRoaW5nIGxpa2UgIm5vdCBmb3VuZCIuICBUaGF0J3Mgd2h5IHdlIHRyeSB0 aGlzIG9ubHkgYXMgYSBsYXN0IHJlc29ydC4KLSovCi0JCSAgICBpZiAocCkgewkJLyogSWYgd2Ug Z290IHRoZSBzcGFjZS4uLiAqLwotCQkJY2ttYWttc2cocCx4LERJUkNNRCwiICIsZmxmbmFtLE5V TEwpOwotCQkJenN5c2NtZChwKTsJLyogR2V0IGxpc3RpbmcuICovCi0JCQlpZiAocCkgewkvKiBm cmVlIHRoZSBzcGFjZSAqLwotCQkJICAgIGZyZWUocCk7Ci0JCQkgICAgcCA9IE5VTEw7Ci0JCQl9 Ci0JCSAgICB9Ci0JCX0KLSNlbmRpZiAvKiBOT1VVQ1AgKi8KLQkJcmV0dXJuKC01KTsJCS8qIENv ZGUgZm9yIGRldmljZSBpbiB1c2UgKi8KLQkgICAgfSBlbHNlIHJldHVybigtMyk7CQkvKiBBY2Nl c3MgZGVuaWVkICovCi0gICAgICAgIH0gZWxzZSBsa2YgPSAxOwotICAgIH0KLSNlbHNlICAvKiBP UEVORklSU1QgKi8KLQotLyoKLSAgMjcgT2N0IDIwMDE6IE5ldyBzaW1wbGVyIGNvZGUgdGhhdCBn ZXRzIHRoZSBsb2NrIGZpcnN0IGFuZCB0aGVuIG9wZW5zIHRoZQotICBkZXZpY2UsIHdoaWNoIGVs aW1pbmF0ZXMgdGhlIHJhY2UgY29uZGl0aW9uLiAgVGhlIGRvd25zaWRlIGlzIHlvdSBjYW4gbm8K LSAgbG9uZ2VyIHNheSAic2V0IGxpbmUgL2Rldi90dHlwMCIgb3Igd2hhdGV2ZXIsIHdoZXJlIC9k ZXYvdHR5cDAgaXMgeW91ciBsb2dpbgotICB0ZXJtaW5hbCwgd2l0aG91dCB0cnlpbmcgdG8gY3Jl YXRlIGEgbG9ja2ZpbGUsIHdoaWNoIGZhaWxzIGlmIEMtS2VybWl0IGxhY2tzCi0gIHByaXZzLCBh bmQgaWYgaXQgc3VjY2VlZHMsIGl0IGhhcyBjcmVhdGVkIGEgbG9ja2ZpbGUgd2hlcmUgaXQgZGlk bid0IGNyZWF0ZQotICBvbmUgYmVmb3JlLgotKi8KLSAgICB4bG9jYWwgPSAqbGNsOwkJCS8qIElz IHRoZSBkZXZpY2UgbXkgbG9naW4gdGVybWluYWw/ICovCi0gICAgZGVidWcoRjExMSwidHRvcGVu IHhsb2NhbCIsIkEiLHhsb2NhbCk7Ci0gICAgZm5hbSA9IHR0bmFtZTsKLSAgICBpZiAoc3RyY21w KHR0bmFtZSxDVFROQU0pICYmIG5ldGNvbm4gPT0gMCkgewotCWlmICh6Zm5xZnAodHRuYW1lLERF Vk5BTUxFTisxLGZ1bGxuYW1lKSkgewotCSAgICBpZiAoKGludClzdHJsZW4oZnVsbG5hbWUpID4g MCkKLQkgICAgICBmbmFtID0gZnVsbG5hbWU7Ci0JfQotICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJ0 dG9wZW4gZm5hbSIsZm5hbSwwKTsKLSAgICBpZiAoeGxvY2FsIDwgMCkgewotCXhsb2NhbCA9IChz dHJjbXAoZm5hbSxDVFROQU0pICE9IDApOwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4g eGxvY2FsIiwiQiIseGxvY2FsKTsKLQotICAgIGxrZiA9IDA7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIE5vIGxvY2sgeWV0ICovCi0gICAgaWYgKHhsb2NhbCA+IDApIHsJCQkvKiBJZiBu b3QuLi4gKi8KLQlpbnQgeHg7IGludCB4cGlkOwotCXh4ID0gdHRsb2NrKGZuYW0pOwkJLyogVHJ5 IHRvIGxvY2sgaXQuICovCi0JZGVidWcoRjEwMSwidHRvcGVuIHR0bG9jayIsIiIseHgpOwotICAg ICAgICBpZiAoeHggPCAwKSB7CQkJLyogQ2FuJ3QgbG9jayBpdC4gKi8KLSAgICAgICAgICAgIGRl YnVnKEYxMTEsInR0b3BlbiB0dGxvY2sgZmFpbHMiLGZuYW0seHgpOwotCSAgICBpZiAoeHggPT0g LTIpIHsJCS8qIElmIGxvY2tmaWxlIHNheXMgZGV2aWNlIGluIHVzZSwgKi8KLSNpZm5kZWYgTk9V VUNQCi0JCWRlYnVnKEYxMTEsInR0b3BlbiByZWFkaW5nIGxvY2tmaWxlIHBpZCIsZmxmbmFtLHh4 KTsKLQkJeHBpZCA9IHR0cnBpZChmbGZuYW0pOwkvKiBUcnkgdG8gcmVhZCBwaWQgZnJvbSBsb2Nr ZmlsZSAqLwotCQlpZiAoeHBpZCA+IC0xKSB7CS8qIElmIHdlIGdvdCBhIHBpZCAqLwotICAgICAg ICAgICAgICAgICAgICBpZiAoIXF1aWV0KQotCQkgICAgICBwcmludGYoIkxvY2tlZCBieSBwcm9j ZXNzICVkXG4iLHhwaWQpOyAvKiB0ZWxsIHRoZW0uICovCi0JCSAgICBja3N0cm5jcHkobG9ja3Bp ZCxja2l0b2EoeHBpZCksMTYpOwotCQkgICAgZGVidWcoRjExMCwidHRvcGVuIGxvY2twaWQiLGxv Y2twaWQsMCk7Ci0jaWZuZGVmIE5PUFVTSAotCQl9IGVsc2UgaWYgKGZsZm5hbVswXSAmJiAhbm9w dXNoKSB7Ci0JCSAgICBleHRlcm4gY2hhciAqRElSQ01EOwotCQkgICAgY2hhciAqcCA9IE5VTEw7 Ci0JCSAgICBpbnQgeDsKLQkJICAgIHggPSAoaW50KXN0cmxlbihmbGZuYW0pICsgKGludClzdHJs ZW4oRElSQ01EKSArIDI7Ci0JCSAgICBwID0gbWFsbG9jKHgpOwkvKiBQcmludCBhIGRpcmVjdG9y eSBsaXN0aW5nLiAqLwotLyoKLSAgTm90ZTogcHJpdl9vbigpIHdvbid0IGhlbHAgaGVyZSwgYmVj YXVzZSB3ZSBkbyBub3QgcGFzcyBwcml2cyBhbG9uZyB0bwotICB0byBpbmZlcmlvciBwcm9jZXNz ZXMsIGluIHRoaXMgY2FzZSBscy4gIFNvIGlmIHRoZSByZWFsIHVzZXIgZG9lcyBub3QgaGF2ZQot ICBkaXJlY3RvcnktbGlzdGluZyBhY2Nlc3MgdG8gdGhlIGxvY2tmaWxlIGRpcmVjdG9yeSwgdGhp cyB3aWxsIHJlc3VsdCBpbgotICBzb21ldGhpbmcgbGlrZSAibm90IGZvdW5kIi4gIFRoYXQncyB3 aHkgd2UgdHJ5IHRoaXMgb25seSBhcyBhIGxhc3QgcmVzb3J0LgotKi8KLQkJICAgIGlmIChwKSB7 CQkvKiBJZiB3ZSBnb3QgdGhlIHNwYWNlLi4uICovCi0JCQlja21ha21zZyhwLHgsRElSQ01ELCIg IixmbGZuYW0sTlVMTCk7Ci0JCQl6c3lzY21kKHApOwkvKiBHZXQgbGlzdGluZy4gKi8KLQkJCWlm IChwKSB7CS8qIGZyZWUgdGhlIHNwYWNlICovCi0JCQkgICAgZnJlZShwKTsKLQkJCSAgICBwID0g TlVMTDsKLQkJCX0KLQkJICAgIH0KLSNlbmRpZiAvKiBOT1BVU0ggKi8KLQkJfQotI2VuZGlmIC8q IE5PVVVDUCAqLwotCQlyZXR1cm4oLTUpOwkJLyogQ29kZSBmb3IgZGV2aWNlIGluIHVzZSAqLwot CSAgICB9IGVsc2UgcmV0dXJuKC0zKTsJCS8qIEFjY2VzcyBkZW5pZWQgKi8KLSAgICAgICAgfSBl bHNlIGxrZiA9IDE7Ci0gICAgfQotICAgIC8qIEhhdmUgbG9jayAtLSBub3cgaXQncyBzYWZlIHRv IG9wZW4gdGhlIGRldmljZSAqLwotCi0gICAgZGVidWcoRjEwMSwidHRvcGVuIGxrZiIsIiIsbGtm KTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gdGltbyIsIiIsdGltbyk7Ci0KLSAgICB0dG90bW8g PSAwOwkJCQkvKiBGbGFnIG5vIHRpbWVvdXQgKi8KLSAgICBpZiAodGltbyA+IDApIHsKLQlpbnQg eHg7Ci0Jc2F2YWwgPSBzaWduYWwoU0lHQUxSTSx0aW1lcmgpOwkvKiBUaW1lZCwgc2V0IHVwIHRp bWVyLiAqLwotCXh4ID0gYWxhcm0odGltbyk7CQkvKiBUaW1lZCBvcGVuKCkgKi8KLQlkZWJ1ZyhG MTAxLCJ0dG9wZW4gYWxhcm0iLCIiLHh4KTsKLQlpZiAoCi0jaWZkZWYgQ0tfUE9TSVhfU0lHCi0J ICAgIHNpZ3NldGptcChzamJ1ZiwxKQotI2Vsc2UKLQkgICAgc2V0am1wKHNqYnVmKQotI2VuZGlm IC8qIENLX1BPU0lYX1NJRyAqLwotCSAgICApIHsKLQkgICAgdHRvdG1vID0gMTsJCQkvKiBGbGFn IHRpbWVvdXQuICovCi0JfSBlbHNlIHsKLQkgICAgdHR5ZmQgPSBkb19vcGVuKGZuYW0pOwotCX0K LQl0dGltb2ZmKCk7Ci0JZGVidWcoRjExMSwidHRvcGVuIHRpbWVkIHR0eWZkIixmbmFtLHR0eWZk KTsKLSAgICB9IGVsc2UgewotCWVycm5vID0gMDsKLQl0dHlmZCA9IGRvX29wZW4oZm5hbSk7Ci0J ZGVidWcoRjExMSwidHRvcGVuIHVudGltZWQgdHR5ZmQiLGZuYW0sdHR5ZmQpOwotICAgIH0KLSAg ICBpZiAodHR5ZmQgPCAwKSB7CQkJLyogSWYgY291bGRuJ3Qgb3BlbiwgZmFpbC4gKi8KLQlkZWJ1 ZyhGMTExLCJ0dG9wZW4gZXJybm8iLGZuYW0sZXJybm8pOwotCWRlYnVnKEYxMTEsInR0b3BlbiB4 bG9jYWwiLCJDIix4bG9jYWwpOwotCWlmICh4bG9jYWwgPT0gMCkgewotCSAgICBkZWJ1ZyhGMTAw LCJ0dG9wZW4gc3Vic3RpdHV0aW5nIDAiLCIiLDApOwotCSAgICB0dHlmZCA9IDA7Ci0JfSBlbHNl IHsKLQkgICAgaWYgKGVycm5vID4gMCAmJiAhcXVpZXQpIHsKLQkgICAgICAgIGRlYnVnKEYxMTEs InR0b3BlbiBwZXJyb3IiLGZuYW0sZXJybm8pOwotCQlwZXJyb3IoZm5hbSk7CQkvKiBQcmludCBt ZXNzYWdlICovCi0JICAgIH0KLQkgICAgaWYgKHR0dW5sY2soKSkgICAgICAgICAgICAgICAgICAv KiBSZWxlYXNlIHRoZSBsb2NrIGZpbGUgKi8KLQkgICAgICBmcHJpbnRmKHN0ZGVyciwiV2Fybmlu ZywgcHJvYmxlbSByZWxlYXNpbmcgbG9ja1xyXG4iKTsKLQl9Ci0gICAgfQotCi0gICAgaWYgKHR0 eWZkIDwgMCkgewkJCS8qIHR0eWZkIGlzIHN0aWxsIDwgMD8gKi8KLSNpZmRlZiBBVFQ3MzAwCi0J aWYgKGF0dG1vZGVtICYgRE9HRVRZKQkJLyogd2FzIGdldHR5KDFtKSBydW5uaW5nIGJlZm9yZSB1 cz8gKi8KLQkgIG9uZ2V0dHkodHRubXN2KTsJCS8qIHllcywgcmVzdGFydCBvbiB0dHkgbGluZSAq LwotCWF0dG1vZGVtICY9IH5ET0dFVFk7CQkvKiBubyBwaG9uZSBpbiB1c2UsIGdldHR5IHJlc3Rv cmVkICovCi0jZWxzZQotI2lmZGVmIEFDVUNOVFJMCi0gICAgICAgIC8qIFNob3VsZCBwdXQgY2Fs bCB0byBwcml2X29uKCkgaGVyZSwgYnV0IHRoYXQgd291bGQgYmUgcmlza3khICovCi0JYWN1Y250 cmwoImVuYWJsZSIsZm5hbSk7CS8qIGFjdWNudHJsKCkgcHJvZ3JhbS4gKi8KLQkvKiBhbmQgcHJp dl9vZmYoKSBoZXJlLi4uICovCi0jZW5kaWYgLyogQUNVTlRSTCAqLwotI2VuZGlmIC8qIEFUVDcz MDAgKi8KLQotCXNpZ25hbChTSUdJTlQsb2NjdCk7CQkvKiBQdXQgb2xkIEN0cmwtQyB0cmFwIGJh Y2suICovCi0JaWYgKGVycm5vID09IEVBQ0NFUykgewkJLyogRGV2aWNlIGlzIHByb3RlY3RlZCBh Z2FpbnN0IHVzZXIgKi8KLQkgICAgZGVidWcoRjExMCwidHRvcGVuIEVBQ0NFU1MiLGZuYW0sMCk7 IC8qIFJldHVybiAtNCAqLwotCSAgICByZXR1cm4oLTQpOwotCX0gZWxzZSByZXR1cm4odHRvdG1v ID8gLTIgOiAtMSk7IC8qIE90aGVyd2lzZSAtMiBpZiB0aW1lb3V0LCBvciAtMSAqLwotICAgIH0K LQotLyogTWFrZSBzdXJlIGl0J3MgYSByZWFsIHR0eS4gKi8KLQotI2lmZGVmIFBsYW45Ci0gICAg LyogdGFrZSB0aGlzIG9wcG9ydHVuaXR5IHRvIG9wZW4gdGhlIGNvbnRyb2wgY2hhbm5lbCAqLwot ICAgIGlmIChwOW9wZW50dHljdGwoZm5hbSkgPCAwKSAgICAgICAKLSNlbHNlCi0gICAgICBpZiAo IXR0ZmRmbGcgJiYgIWlzYXR0eSh0dHlmZCkgJiYgc3RyY21wKGZuYW0sIi9kZXYvbnVsbCIpKQot I2VuZGlmIC8qIFBsYW45ICovCi0JewotCSAgICBmcHJpbnRmKHN0ZGVyciwiJXMgaXMgbm90IGEg dGVybWluYWwgZGV2aWNlXG4iLGZuYW0pOwotCSAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4gbm90IGEg dHR5IixmbmFtLGVycm5vKTsKLQkgICAgaWYgKHR0dW5sY2soKSkJCS8qIFJlbGVhc2UgdGhlIGxv Y2sgZmlsZSAqLwotCSAgICAgIGZwcmludGYoc3RkZXJyLCJXYXJuaW5nLCBwcm9ibGVtIHJlbGVh c2luZyBsb2NrXHJcbiIpOwotCSAgICBjbG9zZSh0dHlmZCk7Ci0JICAgIHR0eWZkID0gLTE7Ci0J ICAgIHdhc2Nsb3NlZCA9IDE7Ci0JICAgIHNpZ25hbChTSUdJTlQsb2NjdCk7Ci0JICAgIHJldHVy bigtMSk7Ci0JfQotCi0jaWZkZWYgYWVnaXMKLSAgICAvKgotICAgICAgQXBvbGxvIEMgcnVudGlt ZSBjbGFpbXMgdGhhdCBjb25zb2xlIHBhZHMgYXJlIHR0eSBkZXZpY2VzLCB3aGljaAotICAgICAg aXMgcmVhc29uYWJsZSwgYnV0IHRoZXkgYXJlbid0IGFueSBnb29kIGZvciBwYWNrZXQgdHJhbnNm ZXIuCi0gICAgKi8KLSAgICBpb3NfJGlucV90eXBlX3VpZCgoc2hvcnQpdHR5ZmQsIHR0eXVpZCwg c3QpOwotICAgIGlmIChzdC5hbGwgIT0gc3RhdHVzXyRvaykgewotCWZwcmludGYoc3RkZXJyLCAi cHJvYmxlbSBnZXR0aW5nIHR0eSBvYmplY3QgdHlwZTogIik7Ci0JZXJyb3JfJHByaW50KHN0KTsK LSAgICB9IGVsc2UgaWYgKHR0eXVpZCAhPSBzaW9fJHVpZCkgewkvKiBSZWplY3Qgbm9uLVNJTyBs aW5lcyAqLwotCWNsb3NlKHR0eWZkKTsgdHR5ZmQgPSAtMTsKLQl3YXNjbG9zZWQgPSAxOwotCWVy cm5vID0gRU5PVFRZOyBwZXJyb3IoZm5hbSk7Ci0Jc2lnbmFsKFNJR0lOVCxvY2N0KTsKLQlyZXR1 cm4oLTEpOwotICAgIH0KLSNlbmRpZiAvKiBhZWdpcyAqLwotCi0gICAgc2lnaW50X2lnbiA9IChv Y2N0ID09IFNJR19JR04pID8gMSA6IDA7Ci0KLSAgICBja3N0cm5jcHkodHRubXN2LHR0bmFtZSxE RVZOQU1MRU4pOwkvKiBLZWVwIGNvcHkgb2YgbmFtZSBsb2NhbGx5LiAqLwotCi0vKiBDYWxsZXIg d2FudHMgdXMgdG8gZmlndXJlIG91dCBpZiBsaW5lIGlzIGNvbnRyb2xsaW5nIHR0eSAqLwotCi0g ICAgaWYgKCpsY2wgPCAwKSB7Ci0JY2hhciAqIHM7Ci0gICAgICAgIGlmIChzdHJjbXAoZm5hbSxD VFROQU0pID09IDApIHsgLyogIi9kZXYvdHR5IiBhbHdheXMgcmVtb3RlICovCi0gICAgICAgICAg ICB4bG9jYWwgPSAwOwotCSAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4gZm5hbT1DVFROQU0iLGZuYW0s eGxvY2FsKTsKLSAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoZm5hbSxjdHRuYW0pID09IDApIHsK LSAgICAgICAgICAgIHhsb2NhbCA9IDA7Ci0JICAgIGRlYnVnKEYxMTEsInR0b3BlbiBmbmFtPWN0 dG5hbSIsZm5hbSx4bG9jYWwpOwotCX0gZWxzZSBpZiAoY3R0bmFtWzBdKSB7Ci0jaWZkZWYgQkVC T1hfRFI3Ci0gICAgICAgICAgICBzID0gdHRubXN2OwkJCS8qIHR0eW5hbWUoKSBpcyBicm9rZW4g Ki8KLSNlbHNlCi0gICAgICAgICAgICBzID0gdHR5bmFtZSh0dHlmZCk7ICAgICAgICAgLyogR2V0 IHJlYWwgbmFtZSBvZiB0dG5hbWUuICovCi0jZW5kaWYgLyogQkVCT1hfRFI3ICovCi0JICAgIGlm ICghcykgcyA9ICIiOwotCSAgICBpZiAoKnMpCi0JICAgICAgeGxvY2FsID0gKChzdHJuY21wKHMs Y3R0bmFtLERFVk5BTUxFTikgPT0gMCkgPyAwIDogMSk7Ci0JICAgIGVsc2UKLQkgICAgICB4bG9j YWwgPSAxOwotICAgICAgICAgICAgZGVidWcoRjExMSwidHRvcGVuIHR0eW5hbWUodHR5ZmQpIHhs b2NhbCIscyx4bG9jYWwpOwotICAgICAgICB9Ci0gICAgfQotCi0jaWZuZGVmIE5PRkRaRVJPCi0v KiBOb3RlLCB0aGUgZm9sbG93aW5nIGNvZGUgd2FzIGFkZGVkIHNvIHRoYXQgVW5peCAiaWRsZS1s aW5lIiBzbm9vcGVycyAqLwotLyogd291bGQgbm90IHRoaW5rIEtlcm1pdCB3YXMgaWRsZSB3aGVu IGl0IHdhcyB0cmFuc2ZlcnJpbmcgZmlsZXMsIGFuZCAqLwotLyogbWF5YmUgbG9nIHBlb3BsZSBv dXQuICovCi0gICAgaWYgKHhsb2NhbCA9PSAwKSB7CQkJLyogUmVtb3RlIG1vZGUgKi8KLQlpZiAo ZmRmbGFnID09IDApIHsJCS8qIFN0YW5kYXJkIGkvbyBpcyBub3QgcmVkaXJlY3RlZCAqLwotCSAg ICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gc2V0dGluZyB0dHlmZCA9IDAiLCIiLDApOwotI2lmZGVmIExZ TlhPUwotCSAgICAvKiBPbiBMeW54IE9TLCBmZCAwIGlzIG9wZW4gZm9yIHJlYWQgb25seS4gKi8K LQkgICAgZHVwMih0dHlmZCwwKTsKLSNlbmRpZiAvKiBMWU5YT1MgKi8KLQkgICAgY2xvc2UodHR5 ZmQpOwkJLyogVXNlIGZpbGUgZGVzY3JpcHRvciAwICovCi0JICAgIHR0eWZkID0gMDsKLQl9IGVs c2UgewkJCS8qIFN0YW5kYXJkIGkvbyBpcyByZWRpcmVjdGVkICovCi0JICAgIGRlYnVnKEYxMDEs InR0b3BlbiBzdGRpbyByZWRpcmVjdGVkIiwiIix0dHlmZCk7Ci0JfQotICAgIH0KLSNlbmRpZiAv KiBOT0ZEWkVSTyAqLwotI2VuZGlmIC8qIE9QRU5GSVJTVCAqLwotCi0vKiBHb3QgdGhlIGxpbmUs IG5vdyBzZXQgdGhlIGRlc2lyZWQgdmFsdWUgZm9yIGxvY2FsLiAqLwotCi0gICAgaWYgKCpsY2wg IT0gMCkgKmxjbCA9IHhsb2NhbDsKLQotLyogU29tZSBzcGVjaWFsIHN0dWZmIGZvciB2Ny4uLiAq LwotCi0jaWZkZWYgIFY3Ci0jaWZuZGVmIE1JTklYCi0gICAgaWYgKGttZW1bVFRZXSA8IDApIHsJ CS8qICBJZiBvcGVuLCB0aGVuIHNraXAgdGhpcy4gICovCi0JcWFkZHJbVFRZXSA9IGluaXRyYXdx KHR0eWZkKTsgICAvKiBJbml0IHRoZSBxdWV1ZS4gKi8KLQlpZiAoKGttZW1bVFRZXSA9IG9wZW4o Ii9kZXYva21lbSIsIDApKSA8IDApIHsKLQkgICAgZnByaW50ZihzdGRlcnIsICJDYW4ndCByZWFk IC9kZXYva21lbSBpbiB0dG9wZW4uXG4iKTsKLQkgICAgcGVycm9yKCIvZGV2L2ttZW0iKTsKLQkg ICAgZXhpdCgxKTsKLQl9Ci0gICAgfQotI2VuZGlmIC8qICFNSU5JWCAqLwotI2VuZGlmIC8qIFY3 ICovCi0KLS8qIE5vIGZhaWx1cmUgcmV0dXJucyBhZnRlciB0aGlzIHBvaW50ICovCi0KLSNpZmRl ZiB1bHRyaXgKLSAgICBpb2N0bCh0dHlmZCwgVElPQ01PREVNLCAmdGVtcCk7Ci0jaWZkZWYgVElP Q1NJTlVTRQotICAgIGlmICh4bG9jYWwgJiYgaW9jdGwodHR5ZmQsIFRJT0NTSU5VU0UsIE5VTEwp IDwgMCkgewotCWlmICghcXVpZXQpCi0JICBwZXJyb3IoZm5hbSk7Ci0gICAgfQotI2VuZGlmIC8q IFRJT0NTSU5VU0UgKi8KLSNlbmRpZiAvKiB1bHRyaXggKi8KLQotLyogR2V0IHR0eSBkZXZpY2Ug c2V0dGluZ3MgICovCi0KLSNpZmRlZiBCU0Q0NE9SUE9TSVgJCQkvKiBQT1NJWCAqLwotICAgIHRj Z2V0YXR0cih0dHlmZCwmdHRvbGQpOwotICAgIGRlYnVnKEYxMDEsInR0b3BlbiB0Y2dldGF0dHIg dHRvbGQuY19sZmxhZyIsIiIsdHRvbGQuY19sZmxhZyk7Ci0gICAgdGNnZXRhdHRyKHR0eWZkLCZ0 dHJhdyk7Ci0gICAgZGVidWcoRjEwMSwidHRvcGVuIHRjZ2V0YXR0ciB0dHJhdy5jX2xmbGFnIiwi Iix0dHJhdy5jX2xmbGFnKTsKLSAgICB0Y2dldGF0dHIodHR5ZmQsJnR0dHZ0KTsKLSAgICBkZWJ1 ZyhGMTAxLCJ0dG9wZW4gdGNnZXRhdHRyIHR0dHZ0LmNfbGZsYWciLCIiLHR0dHZ0LmNfbGZsYWcp OwotI2Vsc2UJCQkJCS8qIEJTRCwgVjcsIGFuZCBhbGwgb3RoZXJzICovCi0jaWZkZWYgQVRUU1YJ CQkJLyogQVQmVCBVTklYICovCi0gICAgaW9jdGwodHR5ZmQsVENHRVRBLCZ0dG9sZCk7Ci0gICAg ZGVidWcoRjEwMSwidHRvcGVuIGlvY3RsIFRDR0VUQSB0dG9sZC5jX2xmbGFnIiwiIix0dG9sZC5j X2xmbGFnKTsKLSAgICBpb2N0bCh0dHlmZCxUQ0dFVEEsJnR0cmF3KTsKLSAgICBpb2N0bCh0dHlm ZCxUQ0dFVEEsJnR0dHZ0KTsKLSNlbHNlCi0jaWZkZWYgQkVMTFYxMAotICAgIGlvY3RsKHR0eWZk LFRJT0NHRVRQLCZ0dG9sZCk7Ci0gICAgZGVidWcoRjEwMSwidHRvcGVuIEJFTExWMTAgdHRvbGQu c2dfZmxhZ3MiLCIiLHR0b2xkLnNnX2ZsYWdzKTsKLSAgICBpb2N0bCh0dHlmZCxUSU9DR0RFViwm dGRvbGQpOwotICAgIGRlYnVnKEYxMDEsInR0b3BlbiBCRUxMVjEwIHRkb2xkLmZsYWdzIiwiIix0 ZG9sZC5mbGFncyk7Ci0jZWxzZQotICAgIGd0dHkodHR5ZmQsJnR0b2xkKTsKLSAgICBkZWJ1ZyhG MTAxLCJ0dG9wZW4gZ3R0eSB0dG9sZC5zZ19mbGFncyIsIiIsdHRvbGQuc2dfZmxhZ3MpOwotI2Vu ZGlmIC8qIEJFTExWMTAgKi8KLQotI2lmZGVmIHNvbnlfbmV3cwkJCS8qIFNvbnkgTkVXUyAqLwot ICAgIGlmIChpb2N0bCh0dHlmZCxUSU9DS0dFVCwma21fZXh0KSA8IDApIHsgLyogR2V0IGNvbnNv bGUgS2FuamkgbW9kZSAqLwotCXBlcnJvcigidHRvcGVuIGVycm9yIGdldHRpbmcgS2FuamkgbW9k ZSIpOwotCWRlYnVnKEYxMDEsInR0b3BlbiBlcnJvciBnZXR0aW5nIEthbmppIG1vZGUiLCIiLDAp OwotCWttX2V4dCA9IC0xOwkJCS8qIE1ha2Ugc3VyZSB0aGlzIHN0YXlzIHVuZGVmaW5lZC4gKi8K LSAgICB9Ci0jZW5kaWYgLyogc29ueV9uZXdzICovCi0KLSNpZmRlZiBUSU9DR0VUQwotICAgIGRl YnVnKEYxMDAsInR0b3BlbiBUSU9DR0VUQyIsIiIsMCk7Ci0gICAgdGNoYXJmID0gMDsJCQkJLyog SW4gcmVtb3RlIG1vZGUsIGFsc28gZ2V0ICovCi0gICAgaWYgKHhsb2NhbCA9PSAwKSB7CQkJLyog c3BlY2lhbCBjaGFyYWN0ZXJzICovCi0JaWYgKGlvY3RsKHR0eWZkLFRJT0NHRVRDLCZ0Y2hvbGQp IDwgMCkgewotCSAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gVElPQ0dFVEMgZmFpbGVkIiwiIiwwKTsK LQl9IGVsc2UgewotCSAgICB0Y2hhcmYgPSAxOwkJCS8qIEl0IHdvcmtlZC4gKi8KLQkgICAgaW9j dGwodHR5ZmQsVElPQ0dFVEMsJnRjaG5vaSk7IC8qIEdldCBhbm90aGVyIGNvcHkgKi8KLQkgICAg ZGVidWcoRjEwMCwidHRvcGVuIFRJT0NHRVRDIG9rIiwiIiwwKTsKLQl9Ci0gICAgfQotI2Vsc2UK LSAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gVElPQ0dFVEMgbm90IGRlZmluZWQiLCIiLDApOwotI2Vu ZGlmIC8qIFRJT0NHRVRDICovCi0KLSNpZmRlZiBUSU9DR0xUQwotICAgIGRlYnVnKEYxMDAsInR0 b3BlbiBUSU9DR0xUQyIsIiIsMCk7Ci0gICAgbHRjaGFyZiA9IDA7CQkJLyogSW4gcmVtb3RlIG1v ZGUsIGFsc28gZ2V0ICovCi0gICAgaWYgKHhsb2NhbCA9PSAwKSB7CQkJLyogbG9jYWwgc3BlY2lh bCBjaGFyYWN0ZXJzICovCi0JaWYgKGlvY3RsKHR0eWZkLFRJT0NHTFRDLCZsdGNob2xkKSA8IDAp IHsKLQkgICAgZGVidWcoRjEwMCwidHRvcGVuIFRJT0NHTFRDIGZhaWxlZCIsIiIsMCk7Ci0JfSBl bHNlIHsKLQkgICAgbHRjaGFyZiA9IDE7CQkvKiBJdCB3b3JrZWQuICovCi0JICAgIGlvY3RsKHR0 eWZkLFRJT0NHTFRDLCZsdGNobm9pKTsgLyogR2V0IGFub3RoZXIgY29weSAqLwotCSAgICBkZWJ1 ZyhGMTAwLCJ0dG9wZW4gVElPQ0dMVEMgb2siLCIiLDApOwotCX0KLSAgICB9Ci0jZWxzZQotICAg IGRlYnVnKEYxMDAsInR0b3BlbiBUSU9DR0xUQyBub3QgZGVmaW5lZCIsIiIsMCk7Ci0jZW5kaWYg LyogVElPQ0dMVEMgKi8KLQotI2lmZGVmIFRJT0NMR0VUCi0gICAgZGVidWcoRjEwMCwidHRvcGVu IFRJT0NMR0VUIiwiIiwwKTsKLSAgICBsbW9kZWYgPSAwOwotICAgIGlmIChpb2N0bCh0dHlmZCxU SU9DTEdFVCwmbG1vZGUpIDwgMCkgewotCWRlYnVnKEYxMDAsInR0b3BlbiBUSU9DTEdFVCBmYWls ZWQiLCIiLDApOwotICAgIH0gZWxzZSB7Ci0JbG1vZGVmID0gMTsKLQlkZWJ1ZyhGMTAwLCJ0dG9w ZW4gVElPQ0xHRVQgb2siLCIiLDApOwotICAgIH0KLSNlbmRpZiAvKiBUSU9DTEdFVCAqLwotCi0j aWZkZWYgQkVMTFYxMAotICAgIGlvY3RsKHR0eWZkLFRJT0NHRVRQLCZ0dHJhdyk7Ci0gICAgaW9j dGwodHR5ZmQsVElPQ0dFVFAsJnR0dHZ0KTsKLSNlbHNlCi0gICAgZ3R0eSh0dHlmZCwmdHRyYXcp OyAgICAgICAgICAgICAgICAgLyogQW5kIGEgY29weSBvZiBpdCBmb3IgcGFja2V0cyovCi0gICAg Z3R0eSh0dHlmZCwmdHR0dnQpOyAgICAgICAgICAgICAgICAgLyogQW5kIG9uZSBmb3IgdmlydHVh bCB0dHkgc2VydmljZSAqLwotI2VuZGlmIC8qIEJFTExWMTAgKi8KLQotI2VuZGlmIC8qIEFUVFNW ICovCi0jZW5kaWYgLyogQlNENDRPUlBPU0lYICovCi0KLS8qIFNlY3Rpb24gZm9yIGNoYW5naW5n IGxpbmUgZGlzY2lwbGluZS4gIEl0J3MgcmVzdG9yZWQgaW4gdHRyZXMoKS4gKi8KLQotI2lmZGVm IEFJWFJTCi0jaWZuZGVmIEFJWDQxCi0gICAgeyB1bmlvbiB0eG5hbWUgbGRfbmFtZTsgaW50IGxk X2lkeCA9IDA7Ci0gICAgICB0dGxkID0gMDsKLSAgICAgICAgZG8gewotICAJICBsZF9uYW1lLnR4 X3doaWNoID0gbGRfaWR4Kys7Ci0gIAkgIGlvY3RsKHR0eWZkLCBUWEdFVENELCAmbGRfbmFtZSk7 Ci0JICBpZiAoIXN0cm5jbXAobGRfbmFtZS50eF9uYW1lLCAicnRzIiwgMykpCi0gIAkgICAgdHRs ZCB8PSAxOwotICAgICAgICB9IHdoaWxlICgqbGRfbmFtZS50eF9uYW1lKTsKLSAgICAgICAgZGVi dWcoRjEwMSwiQUlYIGxpbmUgZGlzY2lwbGluZSIsIiIsdHRsZCk7Ci0gICAgICB9Ci0jZW5kaWYg LyogQUlYNDEgKi8KLSNlbmRpZiAvKiBBSVhSUyAqLwotCi0jaWZkZWYgQlNENDEKLS8qIEZvciA0 LjFCU0Qgb25seSwgZm9yY2UgIm9sZCIgdHR5IGRyaXZlciwgbmV3IG9uZSBib3RjaGVzIFRBTkRF TS4gKi8KLSAgICB7IGludCBrOwotICAgICAgaW9jdGwodHR5ZmQsIFRJT0NHRVRELCAmdHRsZCk7 CS8qIEdldCBhbmQgc2F2ZSBsaW5lIGRpc2NpcGxpbmUgKi8KLSAgICAgIGRlYnVnKEYxMDEsIjQu MWJzZCBsaW5lIGRpc2NpcGxpbmUiLCIiLHR0bGQpOwotICAgICAgayA9IE9UVFlESVNDOwkJCS8q IFN3aXRjaCB0byAib2xkIiBkaXNjaXBsaW5lICovCi0gICAgICBrID0gaW9jdGwodHR5ZmQsIFRJ T0NTRVRELCAmayk7Ci0gICAgICBkZWJ1ZyhGMTAxLCI0LjFic2QgdGlvY3NldGQiLCIiLGspOwot ICAgIH0KLSNlbmRpZiAvKiBCU0Q0MSAqLwotCi0jaWZkZWYgYWVnaXMKLSAgICAvKiBUaGlzIHdh cyBwcmV2aW91c2x5IGRvbmUgYmVmb3JlIHRoZSBsYXN0IHR3byBUQ0dFVEEgb3IgZ3R0eSBhYm92 ZSwKLSAgICAgKiBpbiBib3RoIHRoZSBBVFRTViBhbmQgbm90LUFUVFNWIGNhc2UuICBJZiBpdCBp cyBub3Qgb2theSB0byBoYXZlIG9ubHkKLSAgICAgKiBvbmUgY29weSBpZiBpdCBoZXJlIGluc3Rl YWQsIGdpdmUgdXMgYSBzaG91dCEKLSAgICAgKi8KLSAgICBzaW9fJGNvbnRyb2woKHNob3J0KXR0 eWZkLCBzaW9fJHJhd19ubCwgZmFsc2UsIHN0KTsKLSAgICBpZiAoeGxvY2FsKSB7ICAgICAgIC8q IGlnbm9yZSBicmVha3MgZnJvbSBsb2NhbCBsaW5lICovCi0gICAgICAgIHNpb18kY29udHJvbCgo c2hvcnQpdHR5ZmQsIHNpb18kaW50X2VuYWJsZSwgZmFsc2UsIHN0KTsKLSAgICAgICAgc2lvXyRj b250cm9sKChzaG9ydCl0dHlmZCwgc2lvXyRxdWl0X2VuYWJsZSwgZmFsc2UsIHN0KTsKLSAgICB9 Ci0jZW5kaWYgLyogYWVnaXMgKi8KLQotI2lmZGVmIFZYVkUKLSAgICB0dHJhdy5jX2xpbmUgPSAw OyAgICAgICAgICAgICAgICAgICAvKiBTVFRZIGxpbmUgMCBmb3IgVlgvVkUgKi8KLSAgICB0dHR2 dC5jX2xpbmUgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBTVFRZIGxpbmUgMCBmb3IgVlgvVkUg Ki8KLSAgICBpb2N0bCh0dHlmZCxUQ1NFVEEsJnR0cmF3KTsKLSNlbmRpZiAvKiB2eHZlICovCi0K LS8qIElmIE9fTkRFTEFZIHdhcyB1c2VkIGR1cmluZyBvcGVuKCksIHRoZW4gcmVtb3ZlIGl0IG5v dy4gKi8KLQotI2lmZGVmIE9fTkRFTEFZCi0gICAgZGVidWcoRjEwMCwidHRvcGVuIE9fTkRFTEFZ IiwiIiwwKTsKLSAgICBpZiAoeGxvY2FsID4gMCkgewotICAgICAgaWYgKGZjbnRsKHR0eWZkLCBG X0dFVEZMLCAwKSAmIE9fTkRFTEFZKSB7Ci0JZGVidWcoRjEwMCwidHRvcGVuIGZjbnRsIE9fTkRF TEFZIiwiIiwwKTsKLSNpZm5kZWYgYWVnaXMKLQlpZiAoZmNudGwodHR5ZmQsRl9TRVRGTCwgZmNu dGwodHR5ZmQsIEZfR0VURkwsIDApICYgfk9fTkRFTEFZKSA8IDApIHsKLQkgICAgZGVidWcoRjEw MCwidHRvcGVuIGZjbnRsIGZhaWx1cmUgdG8gdW5zZXQgT19OREVMQVkiLCIiLDApOwotCSAgICBw ZXJyb3IoIkNhbid0IHVuc2V0IE9fTkRFTEFZIik7Ci0JfQotI2VuZGlmIC8qIGFlZ2lzICovCi0J LyogU29tZSBzeXN0ZW1zLCBub3RhYmx5IFhlbml4IChkb24ndCBrbm93IGhvdyBjb21tb24gdGhp cyBpcyBpbgotCSAqIG90aGVyIHN5c3RlbXMpLCBuZWVkIHNwZWNpYWwgdHJlYXRtZW50IHRvIGdl dCByaWQgb2YgdGhlIE9fTkRFTEFZCi0JICogYmVoYXZpb3VyIG9uIHJlYWQoKSB3aXRoIHJlc3Bl Y3QgdG8gY2FycmllciBwcmVzZW5jZSAoaS5lLiByZWFkKCkKLQkgKiByZXR1cm5pbmcgMCB3aGVu IGNhcnJpZXIgYWJzZW50KSwgZXZlbiB0aG91Z2ggdGhlIGFib3ZlIGZjbnRsKCkKLQkgKiBpcyBl bm91Z2ggdG8gbWFrZSByZWFkKCkgd2FpdCBmb3IgaW5wdXQgd2hlbiBjYXJyaWVyIGlzIHByZXNl bnQuCi0JICogVGhpcyBtYWdpYywgaW4gdHVybiwgcmVxdWlyZXMgQ0xPQ0FMIGZvciB3b3JraW5n IHdoZW4gdGhlIGNhcnJpZXIKLQkgKiBpcyBhYnNlbnQuIEJ1dCBpZiB4bG9jYWwgPT0gMCwgcHJl c3VtYWJseSB5b3UgYWxyZWFkeSBoYXZlIENMT0NBTAotCSAqIG9yIHlvdSBoYXZlIGEgY2Fycmll ciwgb3RoZXJ3aXNlIHlvdSB3b3VsZG4ndCBiZSBydW5uaW5nIHRoaXMuCi0JICovCi0JZGVidWco RjEwMSwidHRvcGVuIHhsb2NhbCIsIiIseGxvY2FsKTsKLSNpZmRlZiBBVFRTVgotI2lmZGVmIEJT RDQ0T1JQT1NJWAotI2lmZGVmIENPTU1FTlQJCQkJLyogMTIgQXVnIDE5OTcgKi8KLSNpZmRlZiBf X2JzZGlfXwotCWlmICh4bG9jYWwpCi0JICB0dHJhdy5jX2NmbGFnIHw9IENMT0NBTDsKLSNlbHNl Ci0jaWZkZWYgX19GcmVlQlNEX18KLQlpZiAoeGxvY2FsKQotCSAgdHRyYXcuY19jZmxhZyB8PSBD TE9DQUw7Ci0jZW5kaWYgLyogX19GcmVlQlNEX18gKi8KLSNlbmRpZiAvKiBfX2JzZGlfXyAqLwot I2Vsc2UgLyogTm90IENPTU1FTlQgKi8KLSNpZmRlZiBDTE9DQUwKLQlpZiAoeGxvY2FsKQkJCS8q IFVuc2V0IHRoaXMgaWYgaXQncyBkZWZpbmVkLiAqLwotCSAgdHRyYXcuY19jZmxhZyB8PSBDTE9D QUw7Ci0jZW5kaWYgLyogQ0xPQ0FMICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCWRlYnVnKEYx MDEsInR0b3BlbiBCU0Q0NE9SUE9TSVggY2FsbGluZyB0Y3NldGF0dHIiLCIiLFRDU0FEUkFJTik7 Ci0JaWYgKHRjc2V0YXR0cih0dHlmZCwgVENTQURSQUlOLCAmdHRyYXcpIDwgMCkgewotCSAgICBk ZWJ1ZyhGMTAwLCJ0dG9wZW4gUE9TSVggdGNzZWF0dHIgZmFpbHMiLCIiLDApOwotCSAgICBwZXJy b3IoInRjc2V0YXR0ciIpOwotCX0KLSNlbHNlIC8qICFCU0Q0NE9SUE9TSVggKi8KLQlpZiAoeGxv Y2FsKSB7Ci0JICAgIHR0cmF3LmNfY2ZsYWcgfD0gQ0xPQ0FMOwotCSAgICBkZWJ1ZyhGMTAwLCJ0 dG9wZW4gY2FsbGluZyBpb2N0bChUQ1NFVEEpIiwiIiwwKTsKLQkgICAgZXJybm8gPSAwOwotCSAg ICBpZiAoaW9jdGwodHR5ZmQsIFRDU0VUQSwgJnR0cmF3KSA8IDApIHsKLSAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gaW9jdGwoVENTRVRBKSBmYWlscyIsIiIsZXJybm8pOwotICAg ICAgICAgICAgICAgIHBlcnJvcigiaW9jdGwoVENTRVRBKSIpOwotICAgICAgICAgICAgfQotCX0K LSNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KLSNlbmRpZiAvKiBBVFRTViAqLwotI2lmbmRlZiBO T0NPVEZNQyAvKiA9IE5PIENsb3NlKE9wZW4oKSkgVG8gRm9yY2UgTW9kZSBDaGFuZ2UgKi8KLS8q IFJlcG9ydGVkbHkgbGV0cyB1dWdldHR5IGdyYWIgdGhlIGRldmljZSBpbiBTQ08gVU5JWCAzLjIg LyBYRU5JWCAyLjMgKi8KLQlkZWJ1ZyhGMTAwLCJ0dG9wZW4gZXhlY3V0aW5nIGNsb3NlL29wZW4i LCIiLDApOwotCWNsb3NlKCBwcml2X29wbihmbmFtLCBPX1JEV1IpICk7IC8qIE1hZ2ljIHRvIGZv cmNlIGNoYW5nZS4gKi8KLSNlbmRpZiAvKiBOT0NPVEZNQyAqLwotICAgICAgfQotICAgIH0KLSNl bmRpZiAvKiBPX05ERUxBWSAqLwotCi0vKiBJbnN0cnVjdCB0aGUgc3lzdGVtIGhvdyB0byB0cmVh dCB0aGUgY2FycmllciwgYW5kIHNldCBhIGZldyBvdGhlciB0dHkKLSAqIHBhcmFtZXRlcnMuCi0g KgotICogVGhpcyBhbHNvIHVuZG9lcyB0aGUgdGVtcG9yYXJ5IHNldHRpbmcgb2YgQ0xPQ0FMIHRo YXQgbWF5IGhhdmUgYmVlbiBkb25lCi0gKiBmb3IgdGhlIGNsb3NlKG9wZW4oKSkgYWJvdmUgKGV4 Y2VwdCBpbiBYZW5peCkuICBBbHNvIHRocm93IGluIH5FQ0hPLCB0bwotICogcHJldmVudCB0aGUg b3RoZXIgZW5kIG9mIHRoZSBsaW5lIGZyb20gc2l0dGluZyB0aGVyZSB0YWxraW5nIHRvIGl0c2Vs ZiwKLSAqIHByb2R1Y2luZyBnYXJiYWdlIHdoZW4gdGhlIHVzZXIgcGVyZm9ybXMgYSBjb25uZWN0 LgotICoKLSAqIFNDTyBYZW5peCB1bmZvcnR1bmF0ZWx5IHNlZW1zIHRvIGlnbm9yZSB0aGUgYWN0 dWFsIHN0YXRlIG9mIENMT0NBTC4KLSAqIE5vdyBpdCB0aGlua3MgQ0xPQ0FMIGlzIGFsd2F5cyBv bi4gSXQgc2VlbXMgdGhlIG9ubHkgcmVhbCBzb2x1dGlvbiBmb3IKLSAqIFhlbml4IGlzIHRvIHN3 aXRjaCBiZXR3ZWVuIHRoZSBsb3dlciBhbmQgdXBwZXIgY2FzZSBkZXZpY2UgbmFtZXMuCi0gKgot ICogVGhpcyBzZWN0aW9uIG1heSBhdCBzb21lIGZ1dHVyZSB0aW1lIGV4cGFuZCBpbnRvIHNldHRp bmcgYSBjb21wbGV0ZQotICogY29sbGVjdGlvbiBvZiB0dHkgcGFyYW1ldGVycywgb3IgY2FsbCBh IGZ1bmN0aW9uIHNoYXJlZCB3aXRoIHR0cGt0KCkvCi0gKiB0dHZ0KCkgdGhhdCBkb2VzIHNvLiAg T24gdGhlIG90aGVyIGhhbmQsIHRoZSBpbml0aWFsIHBhcmFtZXRlcnMgYXJlIG5vdAotICogdGhh dCBpbXBvcnRhbnQsIHNpbmNlIHR0cGt0KCkgb3IgdHR2dCgpIHNob3VsZCBhbHdheXMgZml4IHRo YXQgYmVmb3JlCi0gKiBhbnkgY29tbXVuaWNhdGlvbiBpcyBkb25lLiAgV2VsbCwgd2UnbGwgc2Vl Li4uCi0gKi8KLSAgICBpZiAoeGxvY2FsKSB7Ci0gICAgCWN1cmNhcnIgPSAtMjsKLQlkZWJ1ZyhG MTAwLCJ0dG9wZW4gY2FsbGluZyBjYXJyY3RsIiwiIiwwKTsKLQljYXJyY3RsKCZ0dHJhdywgdHRj YXJyID09IENBUl9PTik7Ci0JZGVidWcoRjEwMCwidHRvcGVuIGNhcnJjdGwgb2siLCIiLDApOwot Ci0jaWZkZWYgQ09IRVJFTlQKLSNkZWZpbmUgU1ZPUlBPU0lYCi0jZW5kaWYgLyogQ09IRVJFTlQg Ki8KLQotI2lmZGVmIFNWT1JQT1NJWAotCXR0cmF3LmNfbGZsYWcgJj0gfkVDSE87Ci0JdHRvbGQu Y19sZmxhZyAmPSB+RUNITzsKLSNpZmRlZiBCU0Q0NE9SUE9TSVgKLQl5ID0gdGNzZXRhdHRyKHR0 eWZkLCBUQ1NBRFJBSU4sICZ0dHJhdyk7Ci0JZGVidWcoRjEwMSwidHRvcGVuIHRjc2V0YXR0ciIs IiIseSk7Ci0jZWxzZQotCXkgPSBpb2N0bCh0dHlmZCwgVENTRVRBLCAmdHRyYXcpOwotCWRlYnVn KEYxMDAsInR0b3BlbiBpb2N0bCIsIiIseSk7Ci0jZW5kaWYgLyogQlNENDRPUlBPU0lYICovCi0K LSNlbHNlIC8qIEJTRCwgZXRjICovCi0JdHRyYXcuc2dfZmxhZ3MgJj0gfkVDSE87Ci0JdHRvbGQu c2dfZmxhZ3MgJj0gfkVDSE87Ci0jaWZkZWYgQkVMTFYxMAotCXkgPSBpb2N0bCh0dHlmZCxUSU9D U0VUUCwmdHRyYXcpOwotCWRlYnVnKEYxMDAsInR0b3BlbiBpb2N0bCIsIiIseSk7Ci0jZWxzZQot CXkgPSBzdHR5KHR0eWZkLCZ0dHJhdyk7Ci0JZGVidWcoRjEwMCwidHRvcGVuIHN0dHkiLCIiLHkp OwotI2VuZGlmIC8qIEJFTExWMTAgKi8KLSNlbmRpZiAvKiBTVk9SUE9TSVggKi8KLQotI2lmZGVm IENPSEVSRU5UCi0jdW5kZWYgU1ZPUlBPU0lYCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLQotCS8q IHR0Zmx1aSgpOyAqLyAgLyogIFRoaXMgZmFpbHMgZm9yIHNvbWUgcmVhc29uLiAgKi8KLSAgICB9 Ci0KLSAgICAvKiBHZXQgY3VycmVudCBzcGVlZCAqLwotCi0jaWZuZGVmIEJFQk9YCi0gICAgdHRz cGVlZCA9IHR0Z3NwZCgpOwotI2Vsc2UKLSAgICB0dHNwZWVkID0gMTkyMDA7Ci0jZW5kaWYgLyog IUJFQk9YICovCi0gICAgZGVidWcoRjEwMSwidHRvcGVuIHR0c3BlZWQiLCIiLHR0c3BlZWQpOwot Ci0gICAgLyogRG9uZSwgbWFrZSBlbnRyaWVzIGluIGRlYnVnIGxvZywgcmVzdG9yZSBDdHJsLUMg dHJhcCwgYW5kIHJldHVybi4gKi8KLQotICAgIGRlYnVnKEYxMDEsInR0b3BlbiB0dHlmZCIsIiIs dHR5ZmQpOwotICAgIGRlYnVnKEYxMDEsInR0b3BlbiAqbGNsIiwiIiwqbGNsKTsKLSAgICBkZWJ1 ZyhGMTExLCJ0dG9wZW4gbG9jayBmaWxlIixmbGZuYW0sbGtmKTsKLSAgICBzaWduYWwoU0lHSU5U LG9jY3QpOwotICAgIHNpZ2ludF9pZ24gPSAob2NjdCA9PSBTSUdfSUdOKSA/IDEgOiAwOwotICAg IGdvdHNpZ3MgPSAwOwotICAgIHJldHVybigwKTsKLX0KLQotCi0vKiAgRCBPIF8gTyBQIEUgTiAg LS0gIERvIHRoZSByaWdodCBraW5kIG9mIG9wZW4oKSBjYWxsIGZvciB0aGUgdHR5LiAqLwotCi1p bnQKLWRvX29wZW4odHRuYW1lKSBjaGFyICp0dG5hbWU7IHsKLSAgICBpbnQgZmxhZ3M7Ci0KLSNp ZmRlZiBRTlg2Ci0gICAgLyogT19OT05CTE9DSyBvbiAvZGV2L3R0eSBtYWtlcyBvcGVuKCkgZmFp bCAqLwotICAgIHJldHVybihwcml2X29wbih0dG5hbWUsIE9fUkRXUiB8Ci0JCSAgICAoCi0JCSAg ICAgKChpbnQpc3RyY21wKHR0bmFtZSwiL2Rldi90dHkiKSA9PSAwKSA/Ci0JCSAgICAgMCA6Ci0J CSAgICAgKHR0Y2FyciAhPSBDQVJfT04pID8gT19OT05CTE9DSyA6IDApCi0JCSAgICApCi0JICAg KTsgCi0jZWxzZSAgLyogIVFOWDYgKi8KLQotI2lmbmRlZglPX05ERUxBWQkJCS8qIE9fTkRFTEFZ IG5vdCBkZWZpbmVkICovCi0gICAgcmV0dXJuKHByaXZfb3BuKHR0bmFtZSwyKSk7Ci0jZWxzZQkJ CQkJLyogT19OREVMQVkgZGVmaW5lZCAqLwotCi0jaWZkZWYgQVRUNzMwMAotLyoKLSBPcGVuIGNv bW1zIGxpbmUgd2l0aG91dCB3YWl0aW5nIGZvciBjYXJyaWVyIHNvIGluaXRpYWwgY2FsbCBkb2Vz IG5vdCBoYW5nCi0gYmVjYXVzZSBzdGF0ZSBvZiAibW9kZW0iIGlzIGxpa2VseSB1bmtub3duIGF0 IHRoZSBpbml0aWFsIGNhbGwgIC1qcmQuCi0gSWYgdGhpcyBpcyBuZWVkZWQgZm9yIHRoZSBnZXR0 eSBzdHVmZiB0byB3b3JrLCBhbmQgdGhlIG9wZW4gd291bGQgbm90IHdvcmsKLSB3aXRob3V0IE9f TkRFTEFZIHdoZW4gZ2V0dHkgaXMgc3RpbGwgb24sIHRoZW4gdGhpcyBzcGVjaWFsIGNhc2UgaXMg b2suCi0gT3RoZXJ3aXNlLCBnZXQgcmlkIG9mIGl0LiAtc2tlCi0qLwotICAgIHJldHVybihwcml2 X29wbih0dG5hbWUsIE9fUkRXUiB8IE9fTkRFTEFZKSk7Ci0KLSNlbHNlCS8qICFBVFQ3MzAwICov Ci0KLSAgICAvKiBOb3JtYWwgY2FzZS4gVXNlIE9fTkRFTEFZIGFjY29yZGluZyB0byBTRVQgQ0FS UklFUi4gU2VlIHR0c2NhcnIoKS4gKi8KLSAgICBmbGFncyA9IE9fUkRXUjsKLSAgICBkZWJ1ZyhG MTAxLCJkb19vcGVuIHhsb2NhbCIsIiIseGxvY2FsKTsKLSAgICBkZWJ1ZyhGMTExLCJkb19vcGVu IGZsYWdzIEEiLHR0bmFtZSxmbGFncyk7Ci0gICAgaWYgKHhsb2NhbCAmJiAodHRjYXJyICE9IENB Ul9PTikpCi0gICAgICBmbGFncyB8PSBPX05ERUxBWTsKLSAgICBkZWJ1ZyhGMTExLCJkb19vcGVu IGZsYWdzIEIiLHR0bmFtZSxmbGFncyk7Ci0gICAgcmV0dXJuKHByaXZfb3BuKHR0bmFtZSwgZmxh Z3MpKTsKLSNlbmRpZiAvKiAhQVRUNzMwMCAqLwotI2VuZGlmIC8qIE9fTkRFTEFZICovCi0jZW5k aWYgLyogUU5YNiAqLwotfQotCi0vKiAgVCBUIEMgTCBPIFMgIC0tICBDbG9zZSB0aGUgVFRZLCBy ZWxlYXNpbmcgYW55IGxvY2suICAqLwotCi1zdGF0aWMgaW50IHR0Y19zdGF0ZSA9IDA7CQkvKiB0 dGNsb3NlKCkgc3RhdGUgKi8KLXN0YXRpYyBjaGFyICogdHRjX25hbVtdID0geyAic2V0dXAiLCAi aGFuZ3VwIiwgInJlc2V0IiwgImNsb3NlIiB9OwotCi1pbnQKLXR0Y2xvcyhmb28pIGludCBmb287 IHsJCQkvKiBBcmcgcmVxJ2QgZm9yIHNpZ25hbCgpIHByb3RvdHlwZSAqLwotICAgIGludCB4eCwg eCA9IDA7Ci0gICAgZXh0ZXJuIGludCBleGl0aGFuZ3VwOwotCi0gICAgZGVidWcoRjEwMSwidHRj bG9zIHR0eWZkIiwiIix0dHlmZCk7Ci0gICAgZGVidWcoRjEwMSwidHRjbG9zIG5ldGNvbm4iLCIi LG5ldGNvbm4pOwotICAgIGRlYnVnKEYxMDEsInR0Y2xvcyB4bG9jYWwiLCIiLHhsb2NhbCk7Ci0j aWZkZWYgTk9GRFpFUk8KLSAgICBkZWJ1ZyhGMTAwLCJ0dGNsb3MgTk9GRFpFUk8iLCIiLDApOwot I2VuZGlmIC8qIE5PRkRaRVJPICovCi0KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgVFRMRUJVRgot ICAgIGxlX2luaXQoKTsJCQkJLyogTm8gbmVlZCBmb3IgYW55IG9mIHRoaXMgKi8KLSNlbmRpZiAv KiBUVExFQlVGICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgaWYgKHR0eWZkIDwgMCkJ CQkvKiBXYXNuJ3Qgb3Blbi4gKi8KLSAgICAgIHJldHVybigwKTsKLQotICAgIGlmICh0dGZkZmxn KQkJCS8qIElmIHdlIGluaGVyaXRlZCB0dHlmZCBmcm9tICovCi0gICAgICByZXR1cm4oMCk7CQkJ LyogYW5vdGhlciBwcm9jZXNzLCBkb24ndCBjbG9zZSBpdC4gKi8KLQotICAgIHR2dGZsZyA9IDA7 CQkJCS8qIChzb21lIGRheSBnZXQgcmlkIG9mIHRoaXMuLi4pICovCi0gICAgZ290c2lncyA9IDA7 Ci0KLSNpZmRlZiBJS1NECi0gICAgaWYgKGluc2VydmVyKSB7Ci0jaWZkZWYgVE5DT0RFCi0gICAg ICAgICAgdG5fcHVzaCgpOyAgICAgICAgICAgICAgICAgICAgLyogUGxhY2UgYW55IHdhaXRpbmcg ZGF0YSBpbnRvIGlucHV0Ki8KLSAgICAgICAgICB0bl9zb3B0KERPLFRFTE9QVF9MT0dPVVQpOyAg ICAvKiBTZW5kIExPR09VVCBvcHRpb24gYmVmb3JlIGNsb3NlICovCi0gICAgICAgICAgVEVMT1BU X1VOQU5TV0VSRURfRE8oVEVMT1BUX0xPR09VVCkgPSAxOwotICAgICAgICAgIHRuX3Jlc2V0KCk7 ICAgICAgICAgICAgICAgICAgIC8qIFRoZSBSZXNldCBUZWxuZXQgT3B0aW9uIHRhYmxlLiAgKi8K LSNlbmRpZiAvKiBUTkNPREUgKi8KLSNpZmRlZiBDS19TU0wKLQkgIGlmIChzc2xfYWN0aXZlX2Zs YWcpIHsKLQkgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCi0JCUJJT19wcmludGYoYmlvX2Vyciwi Y2FsbGluZyBTU0xfc2h1dGRvd24oc3NsKVxuIik7Ci0JICAgICAgU1NMX3NodXRkb3duKHNzbF9j b24pOwotCSAgICAgIFNTTF9mcmVlKHNzbF9jb24pOwotCSAgICAgIHNzbF9jb24gPSBOVUxMOwot CSAgICAgIHNzbF9hY3RpdmVfZmxhZyA9IDA7Ci0JICB9Ci0JICBpZiAodGxzX2FjdGl2ZV9mbGFn KSB7Ci0JICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQotCQlCSU9fcHJpbnRmKGJpb19lcnIsImNh bGxpbmcgU1NMX3NodXRkb3duKHRscylcbiIpOwotCSAgICAgIFNTTF9zaHV0ZG93bih0bHNfY29u KTsKLQkgICAgICBTU0xfZnJlZSh0bHNfY29uKTsKLQkgICAgICB0bHNfY29uID0gTlVMTDsKLQkg ICAgICB0bHNfYWN0aXZlX2ZsYWcgPSAwOwotCSAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotICAg IH0KLSNlbmRpZiAvKiBJS1NEICovCi0jaWZkZWYgTkVUQ01ECi0gICAgaWYgKHR0cGlwZSkgewkJ CS8qIFdlJ3ZlIGJlZW4gdXNpbmcgYSBwaXBlICovCi0JLyogdHRwaXBlID0gMDsgKi8KLQlpZiAo dHRwaWQgPiAwKSB7Ci0JICAgIGludCB3c3RhdDsKLQkgICAgaW50IHN0YXR1c3A7Ci0JICAgIGNs b3NlKGZkaW4pOwkJLyogQ2xvc2UgdGhlc2UuICovCi0JICAgIGNsb3NlKGZkb3V0KTsKLQkgICAg ZmRpbiA9IGZkb3V0ID0gLTE7Ci0JICAgIGtpbGwodHRwaWQsMSk7CQkvKiBLaWxsIGZvcmsgd2l0 aCBTSUdIVVAgKi8KLQkgICAgd2hpbGUgKDEpIHsKLQkJd3N0YXQgPSB3YWl0KCZzdGF0dXNwKTsK LQkJaWYgKHdzdGF0ID09IHR0cGlkIHx8IHdzdGF0ID09IC0xKQotCQkgIGJyZWFrOwotCQlwZXhp dHN0YXQgPSAoc3RhdHVzcCAmIDB4ZmYpID8gc3RhdHVzcCA6IHN0YXR1c3AgPj4gODsKLQkgICAg fQotCSAgICB0dHBpZCA9IDA7Ci0JfQotCW5ldGNvbm4gPSAwOwotCXdhc2Nsb3NlZCA9IDE7Ci0J dHR5ZmQgPSAtMTsKLQlyZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIE5FVENNRCAqLwotI2lm ZGVmIE5FVFBUWQotICAgIGlmICh0dHB0eSkgewotI2lmbmRlZiBOT0RPUFRZCi0gICAgICAgIGVu ZF9wdHkoKTsKLSNlbmRpZiAvKiBOT0RPUFRZICovCi0gICAgICAgIGNsb3NlKHR0eWZkKTsKLQlu ZXRjb25uID0gMDsKLQl3YXNjbG9zZWQgPSAxOwotICAgICAgICB0dHB0eSA9IDA7Ci0gICAgICAg IHR0eWZkID0gLTE7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogTkVUUFRZ ICovCi0KLSNpZmRlZglORVRDT05OCi0gICAgaWYgKG5ldGNvbm4pIHsJCQkvKiBJZiBpdCdzIGEg bmV0d29yayBjb25uZWN0aW9uLiAqLwotCWRlYnVnKEYxMDAsInR0Y2xvcyBjbG9zaW5nIG5ldCIs IiIsMCk7Ci0JbmV0Y2xvcygpOwkJCS8qIExldCB0aGUgbmV0d29yayBtb2R1bGUgY2xvc2UgaXQu ICovCi0JbmV0Y29ubiA9IDA7CQkJLyogTm8gbW9yZSBuZXR3b3JrIGNvbm5lY3Rpb24uICovCi0J ZGVidWcoRjEwMSwidHRjbG9zIHR0eWZkIGFmdGVyIG5ldGNsb3MiLCIiLHR0eWZkKTsgLyogU2hv dWxkIGJlIC0xICovCi0JcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZgkvKiBORVRDT05OICovCi0K LSAgICBpZiAoeGxvY2FsKSB7CQkJLyogV2UncmUgY2xvc2luZyBhIFNFVCBMSU5FIGRldmljZSAq LwotI2lmZGVmIEZUMjEJCQkJLyogRm9ydHVuZSAyLjEtc3BlY2lmaWMgaXRlbXMgLi4uICovCi0J aW9jdGwodHR5ZmQsVElPQ0hQQ0wsIE5VTEwpOwotI2VuZGlmIC8qIEZUMjEgKi8KLSNpZmRlZiB1 bHRyaXgJCQkJLyogVWx0cml4LXNwZWNpZmljIGl0ZW1zIC4uLiAqLwotI2lmZGVmIFRJT0NTSU5V U0UKLQkvKiBVbnNldCB0aGUgSU5VU0UgZmxhZyB0aGF0IHdlIHNldCBpbiB0dG9wZW4oKSAqLwot CWlvY3RsKHR0eWZkLCBUSU9DU0lOVVNFLCBOVUxMKTsKLSNlbmRpZiAvKiBUSU9DU0lOVVNFICov Ci0JaW9jdGwodHR5ZmQsIFRJT0NOTU9ERU0sICZ4KTsKLSNpZmRlZiBDT01NRU5UCi0JLyogV2hh dCB3YXMgdGhpcz8gKi8KLQlpb2N0bCh0dHlmZCwgVElPQ05DQVIsIE5VTEwpOwotI2VuZGlmIC8q IENPTU1FTlQgKi8KLSNlbmRpZiAvKiB1bHRyaXggKi8KLSAgICB9Ci0KLSAgICAvKiBUaGlzIGlz IHRvIHByZXZlbnQgdXMgZnJvbSBzdGlja2luZyBpbiB0dGhhbmcoKSBvciBjbG9zZSgpLiAqLwot Ci0jaWZkZWYgT19OREVMQVkKLSNpZm5kZWYgYWVnaXMKLSAgICBpZiAodHR5ZmQgPiAwKSB7CQkJ LyogQnV0IHNraXAgaXQgb24gc3RkaW4uICovCi0JZGVidWcoRjEwMCwidHRjbG9zIHNldHRpbmcg T19OREVMQVkiLCIiLDApOwotCXggPSBmY250bCh0dHlmZCxGX1NFVEZMLGZjbnRsKHR0eWZkLEZf R0VURkwsIDApfE9fTkRFTEFZKTsKLSNpZmRlZiBERUJVRwotCWlmIChkZWJsb2cgJiYgeCA9PSAt MSkgewotCSAgICBwZXJyb3IoIldhcm5pbmcgLSBDYW4ndCBzZXQgT19OREVMQVkiKTsKLQkgICAg ZGVidWcoRjEwMSwidHRjbG9zIGZjbnRsIGZhaWx1cmUgdG8gc2V0IE9fTkRFTEFZIiwiIix4KTsK LQl9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICB9Ci0jZW5kaWYgLyogYWVnaXMgKi8KLSNlbmRp ZiAvKiBPX05ERUxBWSAqLwotCi0gICAgeCA9IDA7Ci0gICAgdHRjX3N0YXRlID0gMDsKLSAgICBp ZiAoeGxvY2FsCi0jaWZkZWYgTk9GRFpFUk8KLQl8fCB0dHlmZCA+IDAKLSNlbmRpZiAvKiBOT0ZE WkVSTyAqLwotCSkgewotCXNhdmFsID0gc2lnbmFsKFNJR0FMUk0seHRpbWVyaCk7IC8qIEVuYWJs ZSB0aW1lciBpbnRlcnJ1cHQuICovCi0JeHggPSBhbGFybSg4KTsJCQkvKiBBbGxvdyA4IHNlY29u ZHMuICovCi0JZGVidWcoRjEwMSwidHRjbG9zIGFsYXJtIiwiIix4eCk7Ci0JaWYgKAotI2lmZGVm IENLX1BPU0lYX1NJRwotCSAgICBzaWdzZXRqbXAoc2pidWYsMSkKLSNlbHNlCi0JICAgIHNldGpt cChzamJ1ZikKLSNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KLQkgICAgKSB7CQkJCS8qIFRpbWVy IHdlbnQgb2ZmPyAqLwotCSAgICB4ID0gLTE7Ci0jaWZkZWYgREVCVUcKLQkgICAgZGVidWcoRjEx MSwidHRjbG9zIEFMQVJNIFRSQVAgZXJybm8iLGNraXRvYSh0dGNfc3RhdGUpLGVycm5vKTsKLQkg ICAgcHJpbnRmKCJ0dGNsb3MoKSB0aW1lb3V0OiAlc1xuIiwgdHRjX25hbVt0dGNfc3RhdGVdKTsK LSNlbmRpZiAvKiBERUJVRyAqLwotCX0KLQkvKiBIYW5nIHVwIHRoZSBkZXZpY2UgKGRyb3AgRFRS KSAqLwotCi0JZXJybm8gPSAwOwotCWRlYnVnKEYxMTEsInR0Y2xvcyBBIixja2l0b2EoeCksdHRj X3N0YXRlKTsKLQlpZiAodHRjX3N0YXRlIDwgMSkgewotCSAgICB0dGNfc3RhdGUgPSAxOwotCSAg ICBkZWJ1ZyhGMTAxLCJ0dGNsb3MgZXhpdGhhbmd1cCIsIiIsZXhpdGhhbmd1cCk7Ci0JICAgIGlm IChleGl0aGFuZ3VwKSB7Ci0JCWFsYXJtKDgpOwkJLyogUmUtYXJtIHRoZSB0aW1lciAqLwotCQlk ZWJ1ZyhGMTAxLCJ0dGNsb3MgY2FsbGluZyB0dGhhbmcoKSIsIiIseCk7Ci0JCXggPSB0dGhhbmco KTsJCS8qIEhhbmcgdXAgZmlyc3QsIHRoZW4uLi4gKi8KLQkJZGVidWcoRjEwMSwidHRjbG9zIHR0 aGFuZygpIiwiIix4KTsKLQkgICAgfQotI2lmbmRlZiBDS19OT0hVUENMCi0vKgotICBPY3QgMjAw NiAtIExlYXZlIERUUiBvbiBpZiBTRVQgRVhJVCBIQU5HVVAgT0ZGLgotICBTdWdnZXN0ZWQgYnkg U29ld29ubyBFZmZlbmRpLgotKi8KLSNpZmRlZiBIVVBDTAotCSAgICBlbHNlIHsKLQkJdHRvbGQu Y19jZmxhZyAmPSB+SFVQQ0w7IC8qIExldCdzIHNlZSBob3cgdGhpcyB0cmF2ZWxzICovCi0jaWZk ZWYgQlNENDRPUlBPU0lYCi0JCXRjc2V0YXR0cih0dHlmZCxUQ1NBTk9XLCZ0dG9sZCk7Ci0jZWxz ZSAvKiAhQlNENDRPUlBPU0lYICovCi0jaWZkZWYgQVRUU1YKLQkJaW9jdGwodHR5ZmQsVENTRVRB VywmdHRvbGQpOwkJCi0jZWxzZSAgLyogIUFUVFNWICovCi0JCXN0dHkodHR5ZmQsJnR0b2xkKTsK LSNlbmRpZgkvKiBBVFRTViAqLwotI2VuZGlmCS8qIEJTRDQ0T1JQT1NJWCAqLwotCSAgICB9Ci0j ZW5kaWYJLyogSFVQQ0wgKi8KLSNlbmRpZgkvKiBDS19OT0hVUENMICovCi0JfQotCS8qIFB1dCBi YWNrIGRldmljZSBtb2RlcyBhcyB3ZSBmb3VuZCB0aGVtICovCi0KLQllcnJubyA9IDA7Ci0JZGVi dWcoRjExMSwidHRjbG9zIEIiLGNraXRvYSh4KSx0dGNfc3RhdGUpOwotCWlmICh0dGNfc3RhdGUg PCAyKSB7Ci0JICAgIHR0Y19zdGF0ZSA9IDI7Ci0JICAgIC8qIERvbid0IHRyeSB0byBtZXNzIHdp dGggdHR5IG1vZGVzIGlmIHR0aGFuZyBmYWlsZWQoKSAqLwotCSAgICAvKiBzaW5jZSBpdCBwcm9i YWJseSB3b24ndCB3b3JrLiAqLwotCSAgICBpZiAoeCA+IC0xKSB7Ci0JCWRlYnVnKEYxMDEsInR0 Y2xvcyBjYWxsaW5nIHR0cmVzKCkiLCIiLHgpOwotCQlzaWduYWwoU0lHQUxSTSx4dGltZXJoKTsg LyogUmUtZW5hYmxlIHRoZSBhbGFybS4gKi8KLQkJYWxhcm0oOCk7CQkvKiBSZS1hcm0gdGhlIHRp bWVyICovCi0JCXggPSB0dHJlcygpOwkJLyogUmVzZXQgZGV2aWNlIG1vZGVzLiAqLwotCQlkZWJ1 ZyhGMTAxLCJ0dGNsb3MgdHRyZXMoKSIsIiIseCk7Ci0JCWFsYXJtKDApOwotCSAgICB9Ci0JfQot CS8qIENsb3NlIHRoZSBkZXZpY2UgKi8KLQotCWVycm5vID0gMDsKLQlkZWJ1ZyhGMTAxLCJ0dGNs b3MgQyIsIiIsdHRjX3N0YXRlKTsKLQlpZiAodHRjX3N0YXRlIDwgMykgewotCSAgICB0dGNfc3Rh dGUgPSAzOwotCSAgICBlcnJubyA9IDA7Ci0JICAgIGRlYnVnKEYxMDEsInR0Y2xvcyBjYWxsaW5n IGNsb3NlIiwiIix4KTsKLQkgICAgc2lnbmFsKFNJR0FMUk0seHRpbWVyaCk7CS8qIFJlLWVuYWJs ZSBhbGFybS4gKi8KLQkgICAgYWxhcm0oOCk7CQkJLyogUmUtYXJtIHRoZSB0aW1lciAqLwotCSAg ICB4ID0gY2xvc2UodHR5ZmQpOwkJLyogQ2xvc2UgdGhlIGRldmljZS4gKi8KLQkgICAgZGVidWco RjEwMSwidHRjbG9zIGNsb3NlKCkiLCIiLHgpOwotCSAgICBpZiAoeCA+IC0xKQotCSAgICAgIHR0 Y19zdGF0ZSA9IDM7Ci0JfQotCWRlYnVnKEYxMDEsInR0Y2xvcyBEIiwiIix0dGNfc3RhdGUpOwot CXR0aW1vZmYoKTsJCQkvKiBUdXJuIG9mZiB0aW1lci4gKi8KLQlpZiAoeCA8IDApIHsKLQkgICAg cHJpbnRmKCI/V0FSTklORyAtIGNsb3NlIGZhaWxlZDogJXNcbiIsdHRubXN2KTsKLSNpZmRlZiBE RUJVRwotCSAgICBpZiAoZGVibG9nKSB7Ci0JCXByaW50ZigiZXJybm8gPSAlZFxuIiwgZXJybm8p OwotCQlkZWJ1ZyhGMTAxLCJ0dGNsb3MgZmFpbGVkIiwiIixlcnJubyk7Ci0JICAgIH0KLSNlbmRp ZiAvKiBERUJVRyAqLwotCX0KLQkvKiBVbmxvY2sgYWZ0ZXIgY2xvc2luZyBidXQgYmVmb3JlIGFu eSBnZXR0eSBtdW1ibyBqdW1ibyAqLwotCi0JZGVidWcoRjEwMCwidHRjbG9zIGFib3V0IHRvIGNh bGwgdHR1bmxjayIsIiIsMCk7Ci0gICAgICAgIGlmICh0dHVubGNrKCkpICAgICAgICAgICAgICAg ICAgLyogUmVsZWFzZSB1dWNwLXN0eWxlIGxvY2sgKi8KLQkgIGZwcmludGYoc3RkZXJyLCJXYXJu aW5nLCBwcm9ibGVtIHJlbGVhc2luZyBsb2NrXHJcbiIpOwotICAgIH0KLQotLyogRm9yIGJpZGly ZWN0aW9uYWwgbGluZXMsIHJlc3RvcmUgZ2V0dHkgaWYgaXQgd2FzIHRoZXJlIGJlZm9yZS4gKi8K LQotI2lmZGVmIEFDVUNOVFJMCQkJCS8qIDQuM0JTRCBhY3VjbnRybCgpIG1ldGhvZC4gKi8KLSAg ICBpZiAoeGxvY2FsKSB7Ci0JZGVidWcoRjEwMCwidHRjbG9zIEFDVUNOVFJMIiwiIiwwKTsKLQlh Y3VjbnRybCgiZW5hYmxlIix0dG5tc3YpOwkvKiBFbmFibGUgZ2V0dHkgb24gdGhlIGRldmljZS4g Ki8KLSAgICB9Ci0jZWxzZQotI2lmZGVmIEFUVDczMDAJCQkJLyogQVRUIFVOSVggUEMgKDNCMSwg NzMwMCkgbWV0aG9kLiAqLwotICAgIGlmICh4bG9jYWwpIHsKLQlkZWJ1ZyhGMTAwLCJ0dGNsb3Mg QVRUNzMwMCBvbmdldHR5IiwiIiwwKTsKLQlpZiAoYXR0bW9kZW0gJiBET0dFVFkpCQkvKiBXYXMg Z2V0dHkoMW0pIHJ1bm5pbmcgYmVmb3JlIHVzPyAqLwotCSAgb25nZXR0eSh0dG5tc3YpOwkJLyog WWVzLCByZXN0YXJ0IGdldHR5IG9uIHR0eSBsaW5lICovCi0JYXR0bW9kZW0gJj0gfkRPR0VUWTsJ CS8qIE5vIHBob25lIGluIHVzZSwgZ2V0dHkgcmVzdG9yZWQgKi8KLSAgICB9Ci0jZW5kaWYgLyog QVRUNzMwMCAqLwotI2VuZGlmIC8qIFN5c3RlbS1kZXBlbmRlbnQgZ2V0dHktcmVzdG9yaW5nIG1l dGhvZHMgKi8KLQotI2lmZGVmIHNvbnlfbmV3cwotICAgIGttX2V4dCA9IC0xOwkJCS8qIEludmFs aWRhdGUgZGV2aWNlJ3MgS2FuamktbW9kZSAqLwotI2VuZGlmIC8qIHNvbnlfbmV3cyAqLwotCi0g ICAgdHR5ZmQgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW52YWxpZGF0ZSB0aGUg ZmlsZSBkZXNjcmlwdG9yLiAqLwotICAgIHdhc2Nsb3NlZCA9IDE7Ci0gICAgZGVidWcoRjEwMCwi dHRjbG9zIGRvbmUiLCIiLDApOwotICAgIHJldHVybigwKTsKLX0KLQotLyogIFQgVCBIIEEgTiBH ICAtLSAgSGFuZ3VwIHBob25lIGxpbmUgb3IgbmV0d29yayBjb25uZWN0aW9uLiAgKi8KLS8qCi0g IFJldHVybnM6Ci0gIDAgaWYgaXQgZG9lcyBub3RoaW5nLgotICAxIGlmIGl0IGJlbGlldmVzIHRo YXQgaXQgaHVuZyB1cCBzdWNjZXNzZnVsbHkuCi0gLTEgaWYgaXQgYmVsaWV2ZXMgdGhhdCB0aGUg aGFuZ3VwIGF0dGVtcHQgZmFpbGVkLgotKi8KLQotI2RlZmluZSBIVVBUSU1FIDUwMAkJCS8qIE1p bGxpc2Vjb25kcyBmb3IgaGFuZ3VwICovCi0KLSNpZmRlZiBDT01NRU5UCi0vKiBUaGUgZm9sbG93 aW5nIGRpZG4ndCB3b3JrIGJ1dCBUSU9DU0RUUiBkb2VzIHdvcmsgKi8KLSNpZmRlZiBVTklYV0FS RQotLyogRGVmaW5lIEhVUF9QT1NJWCB0byBmb3JjZSBub24tUE9TSVggYnVpbGRzIHRvIHVzZSB0 aGUgUE9TSVggaGFuZ3VwIG1ldGhvZCAqLwotI2lmbmRlZiBQT1NJWAkJCQkvKiBTdWNoIGFzIFVu aXh3YXJlIDEueCwgMi54ICovCi0jaWZuZGVmIEhVUF9QT1NJWAotI2RlZmluZSBIVVBfUE9TSVgK LSNlbmRpZiAvKiBIVVBfUE9TSVggKi8KLSNlbmRpZiAvKiBQT1NJWCAqLwotI2VuZGlmIC8qIFVO SVhXQVJFICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0jaWZuZGVmIFVTRV9USU9DU0RUUgot I2lmZGVmIF9fTmV0QlNEX18KLS8qIEJlY2F1c2UgdGhlIFBPU0lYIG1ldGhvZCAoc2V0IG91dHB1 dCBzcGVlZCB0byAwKSBkb2Vzbid0IHdvcmsgaW4gTmV0QlNEICovCi0jaWZkZWYgVElPQ1NEVFIK LSNpZmRlZiBUSU9DQ0RUUgotI2RlZmluZSBVU0VfVElPQ1NEVFIKLSNlbmRpZiAvKiBUSU9DQ0RU UiAqLwotI2VuZGlmIC8qIFRJT0NTRFRSICovCi0jZW5kaWYgLyogX19OZXRCU0RfXyAqLwotI2Vu ZGlmIC8qIFVTRV9USU9DU0RUUiAqLwotCi0jaWZuZGVmIEhVUF9DTE9TRV9QT1NJWAotI2lmZGVm IE9VOAotI2RlZmluZSBIVVBfQ0xPU0VfUE9TSVgKLSNlbHNlCi0jaWZkZWYgQ0tfU0NPVjUKLSNk ZWZpbmUgSFVQX0NMT1NFX1BPU0lYCi0jZW5kaWYgLyogQ0tfU0NPVjUgKi8KLSNlbmRpZiAvKiBP VTggKi8KLSNlbmRpZiAvKiBIVVBfQ0xPU0VfUE9TSVggKi8KLQotI2lmZGVmIE5PX0hVUF9DTE9T RV9QT1NJWAotI2lmZGVmIEhVUF9DTE9TRV9QT1NJWAotI3VuZGVmIEhVUF9DTE9TRV9QT1NJWAot I2VuZGlmIC8qIEhVUF9DTE9TRV9QT1NJWCAqLwotI2VuZGlmIC8qIE5PX0hVUF9DTE9TRV9QT1NJ WCAqLwotCi1pbnQKLXR0aGFuZygpIHsKLSNpZmRlZiBOT0xPQ0FMCi0gICAgcmV0dXJuKDApOwot I2Vsc2UKLSAgICBpbnQgeCA9IDA7CQkJCS8qIFNvbWV0aW1lcyB1c2VkIGFzIHJldHVybiBjb2Rl LiAqLwotI2lmbmRlZiBQT1NJWAotICAgIGludCB6OwkJCQkvKiB3b3JrZXIgKi8KLSNlbmRpZiAv KiBQT1NJWCAqLwotCi0jaWZkZWYgQ09IRVJFTlQKLSNkZWZpbmUgU1ZPUlBPU0lYCi0jZW5kaWYg LyogQ09IRVJFTlQgKi8KLQotI2lmZGVmIFNWT1JQT1NJWAkJCS8qIEFUJlQsIFBPU0lYLCBIUFVY IGRlY2xhcmF0aW9ucy4gKi8KLSAgICBpbnQgc3Bkc2F2OwkJCQkvKiBmb3Igc2F2aW5nIHNwZWVk ICovCi0jaWZkZWYgSFVQX1BPU0lYCi0gICAgaW50IHNwZHNhdmk7Ci0jZWxzZQotI2lmZGVmIEJT RDQ0T1JQT1NJWAotICAgIGludCBzcGRzYXZpOwotI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLwot I2VuZGlmIC8qIEhVUF9QT1NJWCAqLwotI2lmZGVmIEhQVVgKLS8qCi0gIEVhcmx5IHZlcnNpb25z IG9mIEhQLVVYIG9taXR0ZWQgdGhlIG1mbGFnIHR5cGVkZWYuICBJZiB5b3UgZ2V0IGNvbXBsYWlu dHMKLSAgYWJvdXQgaXQsIGp1c3QgY2hhbmdlIGl0IHRvIGxvbmcgKG9yIGJldHRlciBzdGlsbCwg dW5zaWduZWQgbG9uZykuCi0qLwotICAgIG1mbGFnCi0gICAgICBkdHJfZG93biA9IDAwMDAwMDAw MDAwLAotICAgICAgbW9kZW1fcnRuLAotICAgICAgbW9kZW1fc2F2OwotICAgIGNoYXIgbW9kZW1f c3RhdGVbNjRdOwotI2VuZGlmIC8qIEhQVVggKi8KLSAgICBpbnQgZmxhZ3M7CQkJCS8qIGZjbnRs IGZsYWdzICovCi0gICAgdW5zaWduZWQgc2hvcnQgdHRjX3NhdmU7Ci0jZW5kaWYgLyogU1ZPUlBP U0lYICovCi0KLSAgICBpZiAodHR5ZmQgPCAwKSByZXR1cm4oMCk7ICAgICAgICAgICAvKiBEb24n dCBkbyB0aGlzIGlmIG5vdCBvcGVuICAqLwotICAgIGlmICh4bG9jYWwgPCAxKSByZXR1cm4oMCk7 CQkvKiBEb24ndCBkbyB0aGlzIGlmIG5vdCBsb2NhbCAqLwotCi0jaWZkZWYgTkVUQ01ECi0gICAg aWYgKHR0cGlwZSkKLSAgICAgIHJldHVybigodHRjbG9zKDApIDwgMCkgPyAtMSA6IDEpOwotI2Vu ZGlmIC8qIE5FVENNRCAqLwotI2lmZGVmIE5FVFBUWQotICAgIGlmICh0dHB0eSkKLSAgICAgIHJl dHVybigodHRjbG9zKDApIDwgMCkgPyAtMSA6IDEpOwotI2VuZGlmIC8qIE5FVFBUWSAqLwotI2lm ZGVmIE5FVENPTk4KLSAgICBpZiAobmV0Y29ubikgewkJCS8qIE5ldHdvcmsgY29ubmVjdGlvbi4g Ki8KLSNpZmRlZiBUTl9DT01QT1JUCi0gICAgICAgIGlmIChpc3RuY29tcG9ydCgpKSB7Ci0gICAg ICAgICAgICBpbnQgcmMgPSB0bmNfc2V0X2R0cl9zdGF0ZSgwKTsKLSAgICAgICAgICAgIGlmIChy YyA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgbXNsZWVwKEhVUFRJTUUpOwotICAgICAgICAgICAg ICAgIHJjID0gdG5jX3NldF9kdHJfc3RhdGUoMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg ICByZXR1cm4ocmMgPj0gMCA/IDEgOiAtMSk7Ci0gICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIFRO X0NPTVBPUlQgKi8KLQkgIHJldHVybigobmV0Y2xvcygpIDwgMCkgPyAtMSA6IDEpOyAvKiBKdXN0 IGNsb3NlIGl0LiAqLwotICB9Ci0jZW5kaWYgLyogTkVUQ09OTiAqLwotCi0vKiBGcm9tIGhlcmUg ZG93biwgd2UgaGFuZGxlIHJlYWwgdHR5IGRldmljZXMuICovCi0jaWZkZWYgSFVQX1BPU0lYCi0v KgotICBlLmcuIGZvciBVbml4d2FyZSAyLCB3aGVyZSB3ZSBkb24ndCBoYXZlIGEgZnVsbCBQT1NJ WCBidWlsZCwgd2UKLSAgc3RpbGwgaGF2ZSB0byB1c2UgUE9TSVgtc3R5bGUgaGFuZ3VwLiAgVGh1 cyB0aGUgZHVwbGljYXRpb24gb2YgdGhpcwotICBhbmQgdGhlIG5leHQgY2FzZSwgdGhlIG9ubHkg ZGlmZmVyZW5jZSBiZWluZyB3ZSB1c2UgYSBsb2NhbCB0ZXJtaW9zCi0gIHN0cnVjdCBoZXJlLCBz aW5jZSBhIGRpZmZlcmVudCBtb2RlbCBpcyB1c2VkIGVsc2V3aGVyZS4KLQotICBOTyBMT05HRVIg VVNFRCBhcyBvZiBDLUtlcm1pdCA4LjAgLS0gaXQgdHVybnMgb3V0IHRoYXQgdGhpcyBtZXRob2Qs Ci0gIGV2ZW4gdGhvdWdoIGl0IGNvbXBpbGVzIGFuZCBleGVjdXRlcyB3aXRob3V0IGVycm9yLCBk b2Vzbid0IGFjdHVhbGx5Ci0gIHdvcmsgKGkuZS4gRFRSIGRvZXMgbm90IGRyb3ApLCB3aGVyZWFz IHRoZSBUSU9DU0RUUiBtZXRob2Qgd29ya3MganVzdCBmaW5lLAotKi8KLSAgICB7Ci0Jc3RydWN0 IHRlcm1pb3MgdHRjdXI7Ci0JaW50IHg7Ci0JZGVidWcoRjEwMCwidHRoYW5nIEhVUF9QT1NJWCBz dHlsZSIsIiIsMCk7Ci0JeCA9IHRjZ2V0YXR0cih0dHlmZCwgJnR0Y3VyKTsJLyogR2V0IGN1cnJl bnQgYXR0cmlidXRlcyAqLwotCWRlYnVnKEYxMTEsInR0aGFuZyB0Y2dldGF0dHIiLGNraXRvYShl cnJubykseCk7Ci0JaWYgKHggPCAwKSByZXR1cm4oLTEpOwotCXNwZHNhdiA9IGNmZ2V0b3NwZWVk KCZ0dGN1cik7CS8qIEdldCBjdXJyZW50IHNwZWVkICovCi0JZGVidWcoRjExMSwidHRoYW5nIGNm Z2V0b3NwZWVkIixja2l0b2EoZXJybm8pLHNwZHNhdik7Ci0Jc3Bkc2F2aSA9IGNmZ2V0aXNwZWVk KCZ0dGN1cik7CS8qIEdldCBjdXJyZW50IHNwZWVkICovCi0JZGVidWcoRjExMSwidHRoYW5nIGNm Z2V0aXNwZWVkIixja2l0b2EoZXJybm8pLHNwZHNhdmkpOwotCXggPSBjZnNldG9zcGVlZCgmdHRj dXIsQjApOwkvKiBSZXBsYWNlIGJ5IDAgKi8KLQlkZWJ1ZyhGMTExLCJ0dGhhbmcgY2ZzZXRvc3Bl ZWQiLGNraXRvYShlcnJubykseCk7Ci0JaWYgKHggPCAwKSByZXR1cm4oLTEpOwotCXggPSBjZnNl dGlzcGVlZCgmdHRjdXIsQjApOwotCWRlYnVnKEYxMTEsInR0aGFuZyBjZnNldGlzcGVlZCIsY2tp dG9hKGVycm5vKSx4KTsKLQlpZiAoeCA8IDApIHJldHVybigtMSk7Ci0JeCA9IHRjc2V0YXR0cih0 dHlmZCxUQ1NBRFJBSU4sJnR0Y3VyKTsKLQlkZWJ1ZyhGMTExLCJ0dGhhbmcgdGNzZXRhdHRyIEIw Iixja2l0b2EoZXJybm8pLHgpOwotCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKLQltc2xlZXAoSFVQ VElNRSk7CQkvKiBTbGVlcCAwLjUgc2VjICovCi0JeCA9IGNmc2V0b3NwZWVkKCZ0dGN1cixzcGRz YXYpOyAvKiBSZXN0b3JlIHByZXYgc3BlZWQgKi8KLQlpZiAoeCA8IDApIHJldHVybigtMSk7Ci0J ZGVidWcoRjExMSwidHRoYW5nIGNmc2V0b3NwZWVkIHByZXYiLGNraXRvYShlcnJubykseCk7Ci0J eCA9IGNmc2V0aXNwZWVkKCZ0dGN1cixzcGRzYXZpKTsKLQlkZWJ1ZyhGMTExLCJ0dGhhbmcgY2Zz ZXRpc3BlZWQgcHJldiIsY2tpdG9hKGVycm5vKSx4KTsKLQlpZiAoeCA8IDApIHJldHVybigtMSk7 Ci0JeCA9IHRjc2V0YXR0cih0dHlmZCxUQ1NBRFJBSU4sJnR0Y3VyKTsKLQlkZWJ1ZyhGMTExLCJ0 dGhhbmcgdGNzZXRhdHRyIHJlc3RvcmUiLGNraXRvYShlcnJubykseCk7Ci0JaWYgKHggPCAwKSBy ZXR1cm4oLTEpOwotCXJldHVybigxKTsKLSAgICB9Ci0jZWxzZQotI2lmZGVmIEJTRDQ0T1JQT1NJ WAotI2lmZGVmIFFOWAotICAgIHsKLQlpbnQgeDsKLQl4ID0gdGNkcm9wbGluZSh0dHlmZCw1MDAp OwotCWRlYnVnKEYxMDEsInR0aGFuZyBRTlggdGNkcm9wbGluZSIsIiIseCk7Ci0JdHRjdXIuY19j ZmxhZyB8PSBDTE9DQUw7Ci0JeCA9IHRjc2V0YXR0cih0dHlmZCxUQ1NBRFJBSU4sJnR0Y3VyKTsK LQlkZWJ1ZyhGMTAxLCJ0dGhhbmcgUU5YIHRjc2V0YXR0ciByZXN0b3JlIiwiIix4KTsKLQlpZiAo eCA8IDApIHsKLQkgICAgZGVidWcoRjEwMSwidHRoYW5nIFFOWCB0Y3NldGF0dHIgcmVzdG9yZSBl cnJubyIsIiIsZXJybm8pOwotCSAgICByZXR1cm4oLTEpOwotCX0KLQkvKiBGaXggZmxhZ3MgLSBl bnN1cmUgT19OT05CTE9DSyBpcyBvZmYgKi8KLQotCWVycm5vID0gMDsKLQlkZWJ1ZyhGMTAxLCJ0 dGhhbmcgUU5YIGluaWZsYWdzIiwiIixpbmlmbGFncyk7Ci0JaWYgKGZjbnRsKHR0eWZkLCBGX1NF VEZMLCBpbmlmbGFncykgPT0gLTEpIHsKLQkgICAgZGVidWcoRjEwMSwidHRoYW5nIFFOWCBGX1NF VEZMIGVycm5vIiwiIixlcnJubyk7Ci0JICAgIHJldHVybigtMSk7Ci0JfQotCXJldHVybih4KTsK LSAgICB9Ci0jZWxzZSAgLyogUU5YICovCi0gICAgewotCWludCB4OwotI2lmZGVmIFVTRV9USU9D U0RUUgotCWRlYnVnKEYxMDAsInR0aGFuZyBCU0Q0NE9SUE9TSVggVVNFX1RJT0NTRFRSIiwiIiww KTsKLQllcnJubyA9IDA7Ci0JeCA9IGlvY3RsKHR0eWZkLCBUSU9DQ0RUUiwgTlVMTCk7Ci0JZGVi dWcoRjExMSwidHRoYW5nIEJTRDQ0T1JQT1NJWCBpb2N0bCBUSU9DQ0RUUiIsY2tpdG9hKGVycm5v KSx4KTsKLQlpZiAoeCA8IDApIHJldHVybigtMSk7Ci0JbXNsZWVwKEhVUFRJTUUpOwkJLyogU2xl ZXAgMC41IHNlYyAqLwotCWVycm5vID0gMDsKLQl4ID0gaW9jdGwodHR5ZmQsIFRJT0NTRFRSLCBO VUxMKTsKLQlkZWJ1ZyhGMTExLCJ0dGhhbmcgQlNENDRPUlBPU0lYIGlvY3RsIFRJT0NTRFRSIixj a2l0b2EoZXJybm8pLHgpOwotCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKLSNlbHNlICAvKiBVU0Vf VElPQ1NEVFIgKi8KLQotI2lmZGVmIEhVUF9DTE9TRV9QT1NJWAotLyoKLSAgSW4gT1NSNSB2ZXJz aW9ucyB3aGVyZSBUSU9DU0RUUiBpcyBub3QgZGVmaW5lZCAodXAgdG8gYW5kIGluY2x1ZGluZyBh dAotICBsZWFzdCA1LjAuNmEpIHRoZSBQT1NJWCBBUElzIGluIHRoZSAiI2Vsc2UiIHBhcnQgYmVs b3cgYXJlIGF2YWlsYWJsZSBidXQKLSAgZG9uJ3Qgd29yaywgYW5kIG5vIG90aGVyIEFQSXMgYXJl IGF2YWlsYWJsZSB0aGF0IGRvIHdvcmsuICBJbiB0aGlzIGNhc2UKLSAgd2UgaGF2ZSB0byBkcm9w IERUUiBieSBicnV0ZSBmb3JjZTogY2xvc2UgYW5kIHJlb3BlbiB0aGUgcG9ydC4gIFRoaXMKLSAg Y29kZSBhY3R1YWxseSB3b3JrcywgYnV0IGFsbCB0aGUgc3RlcHMgYXJlIGNydWNpYWw6IHNldHRp bmcgQ0xPQ0FMLCB0aGUKLSAgT19OREVMQVkgbWFuaXB1bGF0aW9ucywgZXRjLgotKi8KLQlkZWJ1 ZyhGMTAwLCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIGNsb3NlL29wZW4iLCIiLDApOwotCWRlYnVn KEYxMDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggT19OT05CTE9DSyIsIiIsT19OT05CTE9DSyk7 Ci0JZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCBPX05ERUxBWSIsIiIsT19OREVM QVkpOwotCWVycm5vID0gMDsKLQl4ID0gdGNnZXRhdHRyKHR0eWZkLCAmdHRjdXIpOwkvKiBHZXQg Y3VycmVudCBhdHRyaWJ1dGVzICovCi0JZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJ WCB0Y2dldGF0dHIiLCIiLHgpOwotCWlmICh4IDwgMCkgewotCSAgICBkZWJ1ZyhGMTAxLCJ0dGhh bmcgSFVQX0NMT1NFX1BPU0lYIHRjZ2V0YXR0ciBlcnJubyIsIiIsZXJybm8pOwotCSAgICByZXR1 cm4oLTEpOwotCX0KLQllcnJubyA9IDA7Ci0KLQl4ID0gY2xvc2UodHR5ZmQpOwkJLyogQ2xvc2Ug d2l0aG91dCByZWxlYXNpbmcgbG9jayAqLwotCWlmICh4IDwgMCkgewotCSAgICBkZWJ1ZyhGMTAx LCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIGNsb3NlIGVycm5vIiwiIixlcnJubyk7Ci0JICAgIHJl dHVybigtMSk7Ci0JfQotCWVycm5vID0gMDsKLQl4ID0gbXNsZWVwKDUwMCk7CQkvKiBQYXVzZSBo YWxmIGEgc2Vjb25kICovCi0JaWYgKHggPCAwKSB7CQkJLyogT3IgaWYgdGhhdCBkb2Vzbid0IHdv cmssIDEgc2VjICovCi0JICAgIGRlYnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggbXNs ZWVwIGVycm5vIiwiIixlcnJubyk7Ci0JICAgIHNsZWVwKDEpOwotCX0KLQllcnJubyA9IDA7Ci0J dHR5ZmQgPSBwcml2X29wbih0dG5tc3YsIChPX1JEV1J8T19OREVMQVkpKTsgLyogUmVvcGVuIHRo ZSBkZXZpY2UgKi8KLQlkZWJ1ZyhGMTExLCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIHJlb3BlbiIs dHRubXN2LHR0eWZkKTsKLQlpZiAodHR5ZmQgPCAwKSB7Ci0JICAgIGRlYnVnKEYxMDEsInR0aGFu ZyBIVVBfQ0xPU0VfUE9TSVggcmVvcGVuIGVycm5vIiwiIixlcnJubyk7Ci0JICAgIHJldHVybigt MSk7Ci0JfQotCWRlYnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggcmUtdHRvcGVuIHR0 eWZkIiwiIix0dHlmZCk7Ci0KLQkvKiBSZXN0b3JlIHByZXZpb3VzIGF0dHJpYnV0ZXMgKi8KLQot CWVycm5vID0gMDsKLQl0dnRmbGcgPSAwOwotCXR0Y3VyLmNfY2ZsYWcgfD0gQ0xPQ0FMOwotCXgg PSB0Y3NldGF0dHIodHR5ZmQsVENTQURSQUlOLCZ0dGN1cik7Ci0JZGVidWcoRjEwMSwidHRoYW5n IEhVUF9DTE9TRV9QT1NJWCB0Y3NldGF0dHIgcmVzdG9yZSIsIiIseCk7Ci0JaWYgKHggPCAwKSB7 Ci0JICAgIGRlYnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggdGNzZXRhdHRyIHJlc3Rv cmUgZXJybm8iLAotCQkgICIiLGVycm5vKTsKLQkgICAgcmV0dXJuKC0xKTsKLQl9Ci0JLyogRml4 IGZsYWdzIC0gZW5zdXJlIE9fTkRFTEFZIGFuZCBPX05PTkJMT0NLIGFyZSBvZmYgKi8KLQotCWVy cm5vID0gMDsKLSAgICAgICAgaWYgKCh4ID0gZmNudGwodHR5ZmQsIEZfR0VURkwsIDApKSA9PSAt MSkgewotCSAgICBkZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIEZfR0VURkwgZXJy bm8iLCIiLGVycm5vKTsKLQkgICAgcmV0dXJuKC0xKTsKLQl9Ci0JZGVidWcoRjEwMSwidHRoYW5n IEhVUF9DTE9TRV9QT1NJWCBmbGFncyIsIiIseCk7Ci0JZXJybm8gPSAwOwotICAgICAgICB4ICY9 IH4oT19OT05CTE9DS3xPX05ERUxBWSk7Ci0JZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9Q T1NJWCBmbGFncyB0byBzZXQiLCIiLHgpOwotCWRlYnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xPU0Vf UE9TSVggaW5pZmxhZ3MiLCIiLGluaWZsYWdzKTsKLQlpZiAoZmNudGwodHR5ZmQsIEZfU0VURkws IHgpID09IC0xKSB7Ci0JICAgIGRlYnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggRl9T RVRGTCBlcnJubyIsIiIsZXJybm8pOwotCSAgICByZXR1cm4oLTEpOwotCX0KLSNpZmRlZiBERUJV RwotCWlmIChkZWJsb2cpIHsKLQkgICAgaWYgKCh4ID0gZmNudGwodHR5ZmQsIEZfR0VURkwsIDAp KSA+IC0xKSB7Ci0JCWRlYnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggZmxhZ3MiLCIi LHgpOwotCQlkZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIGZsYWdzICYgT19OT05C TE9DSyIsCi0JCSAgICAgICIiLHgmT19OT05CTE9DSyk7Ci0JCWRlYnVnKEYxMDEsInR0aGFuZyBI VVBfQ0xPU0VfUE9TSVggZmxhZ3MgJiBPX05ERUxBWSIsCi0JCSAgICAgICIiLHgmT19OREVMQVkp OwotCSAgICB9Ci0JfQotI2VuZGlmIC8qIERFQlVHICovCi0KLSNlbHNlICAvKiBIVVBfQ0xPU0Vf UE9TSVggKi8KLQkKLQkvKiBHZW5lcmFsIEJTRDQ0T1JQT1NJWCBjYXNlIChMaW51eCwgQlNESSwg RnJlZUJTRCwgZXRjKSAqLwotCi0JZGVidWcoRjEwMCwidHRoYW5nIEJTRDQ0T1JQT1NJWCBCMCIs IiIsMCk7Ci0JeCA9IHRjZ2V0YXR0cih0dHlmZCwgJnR0Y3VyKTsJLyogR2V0IGN1cnJlbnQgYXR0 cmlidXRlcyAqLwotCWRlYnVnKEYxMTEsInR0aGFuZyBCU0Q0NE9SUE9TSVggdGNnZXRhdHRyIixj a2l0b2EoZXJybm8pLHgpOwotCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKLQlzcGRzYXYgPSBjZmdl dG9zcGVlZCgmdHRjdXIpOwkvKiBHZXQgY3VycmVudCBzcGVlZCAqLwotCWRlYnVnKEYxMTEsInR0 aGFuZyBCU0Q0NE9SUE9TSVggY2ZnZXRvc3BlZWQiLGNraXRvYShlcnJubyksc3Bkc2F2KTsKLQlz cGRzYXZpID0gY2ZnZXRpc3BlZWQoJnR0Y3VyKTsJLyogR2V0IGN1cnJlbnQgc3BlZWQgKi8KLQlk ZWJ1ZyhGMTExLCJ0dGhhbmcgQlNENDRPUlBPU0lYIGNmZ2V0aXNwZWVkIixja2l0b2EoZXJybm8p LHNwZHNhdmkpOwotCXggPSBjZnNldG9zcGVlZCgmdHRjdXIsQjApOwkvKiBSZXBsYWNlIGJ5IDAg Ki8KLQlkZWJ1ZyhGMTExLCJ0dGhhbmcgQlNENDRPUlBPU0lYIGNmc2V0b3NwZWVkIixja2l0b2Eo ZXJybm8pLHgpOwotCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKLQl4ID0gY2ZzZXRpc3BlZWQoJnR0 Y3VyLEIwKTsKLQlkZWJ1ZyhGMTExLCJ0dGhhbmcgQlNENDRPUlBPU0lYIGNmc2V0aXNwZWVkIixj a2l0b2EoZXJybm8pLHgpOwotCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKLQkvKiBUaGlzIGdldHMg RUlOVkFMIG9uIE5ldEJTRCAxLjQuMSBiZWNhdXNlIG9mIEIwLi4uICovCi0JeCA9IHRjc2V0YXR0 cih0dHlmZCxUQ1NBRFJBSU4sJnR0Y3VyKTsKLQlkZWJ1ZyhGMTExLCJ0dGhhbmcgQlNENDRPUlBP U0lYIHRjc2V0YXR0ciBCMCIsY2tpdG9hKGVycm5vKSx4KTsKLQlpZiAoeCA8IDApIHJldHVybigt MSk7Ci0JbXNsZWVwKEhVUFRJTUUpOwkJLyogU2xlZXAgMC41IHNlYyAqLwotCWRlYnVnKEYxMDEs InR0aGFuZyBCU0Q0NE9SUE9TSVggcmVzdG9yZSBvdXRwdXQgc3BlZWQiLCIiLHNwZHNhdik7Ci0J eCA9IGNmc2V0b3NwZWVkKCZ0dGN1cixzcGRzYXYpOyAvKiBSZXN0b3JlIHByZXYgc3BlZWQgKi8K LQlkZWJ1ZyhGMTExLCJ0dGhhbmcgQlNENDRPUlBPU0lYIGNmc2V0b3NwZWVkIHByZXYiLGNraXRv YShlcnJubykseCk7Ci0JaWYgKHggPCAwKSByZXR1cm4oLTEpOwotCWRlYnVnKEYxMDEsInR0aGFu ZyBCU0Q0NE9SUE9TSVggcmVzdG9yZSBpbnB1dCBzcGVlZCIsIiIsc3Bkc2F2aSk7Ci0JeCA9IGNm c2V0aXNwZWVkKCZ0dGN1cixzcGRzYXZpKTsKLQlkZWJ1ZyhGMTExLCJ0dGhhbmcgQlNENDRPUlBP U0lYIGNmc2V0aXNwZWVkIHByZXYiLGNraXRvYShlcnJubykseCk7Ci0JaWYgKHggPCAwKSByZXR1 cm4oLTEpOwotCXR0Y3VyLmNfY2ZsYWcgfD0gQ0xPQ0FMOwkvKiBEb24ndCBleHBlY3QgQ0QgYWZ0 ZXIgaGFuZ3VwICovCi0JeCA9IHRjc2V0YXR0cih0dHlmZCxUQ1NBRFJBSU4sJnR0Y3VyKTsKLQlk ZWJ1ZyhGMTExLCJ0dGhhbmcgQlNENDRPUlBPU0lYIHRjc2V0YXR0ciByZXN0b3JlIixja2l0b2Eo ZXJybm8pLHgpOwotCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKLQotI2VuZGlmIC8qIEhVUF9DTE9T RV9QT1NJWCAqLwotI2VuZGlmIC8qIFVTRV9USU9DU0RUUiAqLwotCi0JcmV0dXJuKDEpOwotICAg IH0KLQotI2VuZGlmIC8qIFFOWCAqLwotI2Vsc2UgLyogQlNENDRPUlBPU0lYICovCi0KLSNpZmRl ZiBhZWdpcwkJCQkvKiBBcG9sbG8gQWVnaXMgKi8KLSAgICBzaW9fJGNvbnRyb2woKHNob3J0KXR0 eWZkLCBzaW9fJGR0ciwgZmFsc2UsIHN0KTsgICAgLyogRFRSIGRvd24gKi8KLSAgICBtc2xlZXAo SFVQVElNRSk7CQkJCQkvKiBwYXVzZSAqLwotICAgIHNpb18kY29udHJvbCgoc2hvcnQpdHR5ZmQs IHNpb18kZHRyLCB0cnVlLCAgc3QpOyAgICAvKiBEVFIgdXAgKi8KLSAgICByZXR1cm4oMSk7Ci0j ZW5kaWYgLyogYWVnaXMgKi8KLQotI2lmZGVmIEFOWUJTRAkJCQkvKiBBbnkgQlNEIHZlcnNpb24u ICovCi0jaWZkZWYgVElPQ0NEVFIJCQkJLyogRXhjZXB0IHRob3NlIHRoYXQgZG9uJ3QgaGF2ZSB0 aGlzICovCi0gICAgZGVidWcoRjEwMCwidHRoYW5nIEJTRCBzdHlsZSIsIiIsMCk7Ci0gICAgaWYg KGlvY3RsKHR0eWZkLFRJT0NDRFRSLDApIDwgMCkgewkvKiBDbGVhciBEVFIuICovCi0JZGVidWco RjEwMSwidHRoYW5nIFRJT0NDRFRSIGZhaWxzIiwiIixlcnJubyk7Ci0JcmV0dXJuKC0xKTsKLSAg ICB9Ci0gICAgbXNsZWVwKEhVUFRJTUUpOwkJCS8qIEZvciBhYm91dCAxLzIgc2VjICovCi0gICAg ZXJybm8gPSAwOwotICAgIHggPSBpb2N0bCh0dHlmZCxUSU9DU0RUUiwwKTsJLyogUmVzdG9yZSBE VFIgKi8KLSAgICBpZiAoeCA8IDApIHsKLQkvKgotCSAgRm9yIHNvbWUgcmVhc29uLCB0aGlzIHRl bmRzIHRvIGZhaWwgd2l0aCAibm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcyIKLQkgIGJ1dCB0aGUg b3BlcmF0aW9uIHN0aWxsIHdvcmtzLCBwcm9iYWJseSBiZWNhdXNlIG9mIHRoZSBjbG9zZS9vcGVu Ci0JICBsYXRlciBvbi4gIFNvIGxldCdzIG5vdCBzY2FyZSB0aGUgdXNlciB1bm5lY2Vzc2FyaWx5 IGhlcmUuCi0JKi8KLQlkZWJ1ZyhGMTAxLCJ0dGhhbmcgVElPQ1NEVFIgZXJybm8iLCIiLGVycm5v KTsgLyogTG9nIHRoZSBlcnJvciAqLwotCXggPSAxOwkJCQkvKiBQcmV0ZW5kIHdlIHN1Y2NlZWRl ZCAqLwotICAgIH0gZWxzZSBpZiAoeCA9PSAwKSB4ID0gMTsJCS8qIFN1Y2Nlc3MgKi8KLSNpZmRl ZiBDT01NRU5UCi0jaWZkZWYgRlQyMQotICAgIGlvY3RsKHR0eWZkLCBUSU9DU0FWRU1PREVTLCAw KTsKLSAgICBpb2N0bCh0dHlmZCwgVElPQ0hQQ0wsIDApOwotICAgIGNsb3NlKHR0eWZkKTsJCQkv KiBZZXMsIG11c3QgZG8gdGhpcyB0d2ljZSAqLwotICAgIGlmICgodHR5ZmQgPSBvcGVuKHR0bm1z diwyKSkgPCAwKQkvKiBvbiBGb3J0dW5lIGNvbXB1dGVycy4uLiAqLwotICAgICAgcmV0dXJuKC0x KTsJCQkvKiAoYnV0IHdoeT8pICovCi0gICAgZWxzZSB4ID0gMTsKLSNlbmRpZiAvKiBGVDIxICov Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2VuZGlmIC8qIFRJT0NDRFRSICovCi0gICAgY2xvc2Uo ZG9fb3Blbih0dG5tc3YpKTsJCS8qIENsZWFyIGkvbyBlcnJvciBjb25kaXRpb24gKi8KLSAgICBl cnJubyA9IDA7Ci0jaWZkZWYgQ09NTUVOVAotLyogVGhpcyBpcyBkZWZpbml0ZWx5IGRhbmdlcm91 cy4gIFdoeSB3YXMgaXQgaGVyZT8gKi8KLSAgICB6ID0gdHR2dCh0dHNwZWVkLHR0Zmxvdyk7CQkv KiBSZXN0b3JlIG1vZGVzLiAqLwotICAgIGRlYnVnKEYxMDEsInR0aGFuZyB0dHZ0IHJldHVybnMi LCIiLHopOwotICAgIHJldHVybih6IDwgMCA/IC0xIDogMSk7Ci0jZWxzZQotICAgIHJldHVybih4 KTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZW5kaWYgLyogQU5ZQlNEICovCi0KLSNpZmRlZiBB VFRTVgotLyogQVQmVCBVTklYIHNlY3Rpb24sIGluY2x1ZGVzIEhQLVVYIGFuZCBnZW5lcmljIEFU JlQgU3lzdGVtIElJSS9WLi4uICovCi0KLSNpZmRlZiBIUFVYCi0vKiBIZXdsZXR0IFBhY2thcmQg YWxsb3dzIGV4cGxpY2l0IG1hbmlwdWxhdGlvbiBvZiBtb2RlbSBzaWduYWxzLiAqLwotCi0jaWZk ZWYgQ09NTUVOVAotLyogT2xkIHdheS4uLiAqLwotICAgIGRlYnVnKEYxMDAsInR0aGFuZyBIUC1V WCBzdHlsZSIsIiIsMCk7Ci0gICAgaWYgKGlvY3RsKHR0eWZkLE1DU0VUQUYsJmR0cl9kb3duKSA8 IDApICAgICAgICAvKiBsb3dlciBEVFIgKi8KLSAgICAgIHJldHVybigtMSk7CQkgICAgCSAgICAg ICAgICAgLyogb29wcywgY2FuJ3QuICovCi0gICAgbXNsZWVwKEhVUFRJTUUpOwkJCSAgICAgICAg ICAgLyogUGF1c2UgaGFsZiBhIHNlY29uZC4gKi8KLSAgICB4ID0gMTsJCQkJICAgICAgICAgICAv KiBTZXQgcmV0dXJuIGNvZGUgKi8KLSAgICBpZiAoaW9jdGwodHR5ZmQsTUNHRVRBLCZtb2RlbV9y dG4pID4gLTEpIHsgICAgIC8qIEdldCBsaW5lIHN0YXR1cy4gKi8KLQlpZiAoKG1vZGVtX3J0biAm IE1EQ0QpICE9IDApICAgICAgCSAgIC8qIENoZWNrIGlmIENEIGlzIGxvdy4gKi8KLQkgIHggPSAt MTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ0QgZGlkbid0IGRyb3AsIGZh aWwuICovCi0gICAgfSBlbHNlIHggPSAtMTsKLQotICAgIC8qIEV2ZW4gaWYgYWJvdmUgY2FsbHMg ZmFpbCwgUlRTICYgRFRSIHNob3VsZCBiZSB0dXJuZWQgYmFjayBvbi4gKi8KLSAgICBtb2RlbV9y dG4gPSBNUlRTIHwgTURUUjsKLSAgICBpZiAoaW9jdGwodHR5ZmQsTUNTRVRBRiwmbW9kZW1fcnRu KSA8IDApIHggPSAtMTsKLSAgICByZXR1cm4oeCk7Ci0jZWxzZQotLyogTmV3IHdheSwgZnJvbSBI ZWxsbXV0aCBNaWNoYWVsaXMgKi8KLSAgICBkZWJ1ZyhGMTAwLCJ0dGhhbmcgSFAtVVggc3R5bGUs IEhQVVhERUJVRyIsIiIsMCk7Ci0gICAgaWYgKGlvY3RsKHR0eWZkLE1DR0VUQSwmbW9kZW1fcnRu KSA9PSAtMSkgeyAvKiBHZXQgY3VycmVudCBzdGF0dXMuICovCi0JZGVidWcoRjEwMCwidHRoYW5n IEhQLVVYOiBjYW4ndCBnZXQgbW9kZW0gbGluZXMsIE5PIEhBTkdVUCEiLCIiLDApOwotCXJldHVy bigtMSk7Ci0gICAgfQotICAgIHNwcmludGYobW9kZW1fc3RhdGUsIiUjbHgiLG1vZGVtX3J0bik7 Ci0gICAgZGVidWcoRjExMCwidHRoYW5nIEhQLVVYOiBtb2RlbSBsaW5lcyA9ICIsbW9kZW1fc3Rh dGUsMCk7Ci0gICAgbW9kZW1fc2F2ID0gbW9kZW1fcnRuOwkJLyogU2F2ZSBjdXJyZW50IG1vZGVt IHNpZ25hbHMgKi8KLSAgICBtb2RlbV9ydG4gJj0gfk1EVFI7CQkJLyogVHVybiBEVFIgYml0IG9m ZiAqLwotICAgIHNwcmludGYobW9kZW1fc3RhdGUsIiUjbHgiLG1vZGVtX3J0bik7Ci0gICAgZGVi dWcoRjExMCwidHRoYW5nIEhQLVVYOiBEVFIgZG93biA9ICIsbW9kZW1fc3RhdGUsMCk7Ci0gICAg aWYgKGlvY3RsKHR0eWZkLE1DU0VUQUYsJm1vZGVtX3J0bikgPCAwKSB7IC8qIGxvd2VyIERUUiAq LwotCWRlYnVnKEYxMDAsInR0aGFuZyBIUC1VWDogY2FuJ3QgbG93ZXIgRFRSISIsIiIsMCk7Ci0J cmV0dXJuKC0xKTsJCQkvKiBvb3BzLCBjYW4ndC4gKi8KLSAgICB9Ci0gICAgbXNsZWVwKEhVUFRJ TUUpOwkJCS8qIFBhdXNlIGhhbGYgYSBzZWNvbmQuICovCi0gICAgeCA9IDE7CQkJCS8qIFNldCBy ZXR1cm4gY29kZSAqLwotICAgIGlmIChpb2N0bCh0dHlmZCxNQ0dFVEEsJm1vZGVtX3J0bikgPiAt MSkgeyAvKiBHZXQgbGluZSBzdGF0dXMuICovCi0Jc3ByaW50Zihtb2RlbV9zdGF0ZSwiJSNseCIs bW9kZW1fcnRuKTsKLQlkZWJ1ZyhGMTEwLCJ0dGhhbmcgSFAtVVg6IG1vZGVtIGxpbmVzIGdvdCA9 ICIsbW9kZW1fc3RhdGUsMCk7Ci0JaWYgKChtb2RlbV9ydG4gJiBNRENEKSAhPSAwKSB7CS8qIENo ZWNrIGlmIENEIGlzIGxvdy4gKi8KLQkgICAgZGVidWcoRjEwMCwidHRoYW5nIEhQLVVYOiBEQ0Qg bm90IGRvd24iLCIiLDApOwotCSAgICB4ID0gLTE7CQkJLyogQ0QgZGlkbid0IGRyb3AsIGZhaWwu ICovCi0JfSBlbHNlIHsKLQkgICAgZGVidWcoRjEwMCwidHRoYW5nIEhQLVVYOiBEQ0QgZG93biIs IiIsMCk7Ci0JfQotICAgIH0gZWxzZSB7Ci0JeCA9IC0xOwotCWRlYnVnKEYxMDAsInR0aGFuZyBI UC1VWDogY2FuJ3QgZ2V0IERDRCBzdGF0dXMgISIsIiIsMCk7Ci0gICAgfQotCi0gICAgLyogRXZl biBpZiBhYm92ZSBjYWxscyBmYWlsLCBEVFIgc2hvdWxkIGJlIHR1cm5lZCBiYWNrIG9uLiAqLwot Ci0gICAgbW9kZW1fc2F2IHw9IE1EVFI7Ci0gICAgaWYgKGlvY3RsKHR0eWZkLE1DU0VUQUYsJm1v ZGVtX3NhdikgPCAwKSB7Ci0JeCA9IC0xOwotCWRlYnVnKEYxMDAsInR0aGFuZyBIUC1VWDogY2Fu J3Qgc2V0IHNhdmVkIHN0YXRlIiwiIiwwKTsKLSAgICB9IGVsc2UgewotCXNwcmludGYobW9kZW1f c3RhdGUsIiUjbHgiLG1vZGVtX3Nhdik7Ci0JZGVidWcoRjExMCwidHRoYW5nIEhQLVVYOiBmaW5h bCBtb2RlbSBsaW5lcyA9ICIsbW9kZW1fc3RhdGUsMCk7Ci0gICAgfQotICAgIHJldHVybih4KTsK LSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSNlbHNlIC8qIEFUJlQgYnV0IG5vdCBIUC1VWCAqLwot Ci0vKiBTVklEIGZvciBBVCZUIFN5c3RlbSBWIFIzIGRlZmluZXMgaW9jdGwncyBmb3IgaGFuZGxp bmcgbW9kZW0gc2lnbmFscy4gKi8KLS8qIEl0IGlzIG5vdCBrbm93biBob3cgbWFueSwgaWYgYW55 LCBzeXN0ZW1zIGFjdHVhbGx5IGltcGxlbWVudCB0aGVtLCAqLwotLyogc28gd2UgaW5jbHVkZSB0 aGVtIGhlcmUgaW4gaWZkZWYncy4gKi8KLQotLyoKLSAgVW5peHdhcmUgaGFzIHRoZSBUSU9DTXh4 eCBzeW1ib2xzIGRlZmluZWQsIGJ1dCBjYWxsaW5nIGlvY3RsKCkgd2l0aCB0aGVtCi0gIGdpdmVz IGVycm9yIDIyIChpbnZhbGlkIGFyZ3VtZW50KS4KLSovCi0jaWZuZGVmIF9JQk1SMgotLyoKLSAg Tm8gbW9kZW0tc2lnbmFsIHR3aWRkbGluZyBmb3IgSUJNIFJUIFBDIG9yIFJTLzYwMDAuCi0gIElu IEFJWCAzLjEgYW5kIGVhcmxpZXIsIHRoZSBpb2N0bCgpIGNhbGwgaXMgYnJva2VuLgotICBUaGlz IGNvZGUgY291bGQgYmUgYWN0aXZhdGVkIGZvciBBSVggMy4xIHdpdGggUFRGIDIwMDYgb3IgbGF0 ZXIKLSAgKGUuZy4gQUlYIDMuMiksIGJ1dCBjbG9zZS9vcGVuIGRvZXMgdGhlIGpvYiB0b28sIHNv IHdoeSBib3RoZXIuCi0qLwotI2lmZGVmIFRJT0NNQklTCQkJCS8qIEJpdCBTZXQgKi8KLSNpZmRl ZiBUSU9DTUJJQwkJCQkvKiBCaXQgQ2xlYXIgKi8KLSNpZmRlZiBUSU9DTV9EVFIJCQkvKiBEVFIg Ki8KLQotLyogQ2xlYXIgRFRSLCBzbGVlcCAzMDAgbXNlYywgdHVybiBpdCBiYWNrIG9uLiAqLwot LyogSWYgYW55IG9mIHRoZSBpb2N0bCdzIHJldHVybiBmYWlsdXJlLCBnbyBvbiB0byB0aGUgbmV4 dCBzZWN0aW9uLiAqLwotCi0gICAgeiA9IFRJT0NNX0RUUjsJCQkvKiBDb2RlIGZvciBEVFIuICov Ci0jaWZkZWYgQ09NTUVOVAotLyoKLSAgVGhpcyB3YXMgdGhlIGNhdXNlIG9mIHRoZSB0cm91Ymxl cyB3aXRoIHRoZSBTb2xhcmlzIFBvcnQgTW9uaXRvci4KLSAgVGhlIHByb2JsZW0gaXM6IFJUUyBu ZXZlciBjb21lcyBiYWNrIG9uLiAgTW9yYWw6IERvbid0IGRvIGl0IQotICAoQnV0IHdoeSBkb2Vz bid0IGl0IGNvbWUgYmFjayBvbj8gIFNlZSB0aGUgVElPQ01CSVMgY2FsbC4uLikKLSovCi0jaWZk ZWYgVElPQ01fUlRTCQkJLyogTG93ZXIgUlRTIHRvbyBpZiBzeW1ib2wgaXMga25vd24uICovCi0g ICAgeiB8PSBUSU9DTV9SVFM7Ci0jZW5kaWYgLyogVElPQ01fUlRTICovCi0jZW5kaWYgLyogQ09N TUVOVCAqLwotCi0gICAgZGVidWcoRjEwMSwidHRoYW5nIFRJT0NNIHNpZ25hbCBtYXNrIiwiIix6 KTsKLSAgICBpZiAoaW9jdGwodHR5ZmQsVElPQ01CSUMsJnopID4gLTEpIHsgICAvKiBUcnkgdG8g bG93ZXIgRFRSLiAqLwotCWRlYnVnKEYxMDAsInR0aGFuZyBUSU9DTUJJQyBvayIsIiIsMCk7Ci0J bXNsZWVwKEhVUFRJTUUpOwkJICAgLyogUGF1c2UgaGFsZiBhIHNlY29uZC4gKi8KLQlpZiAoaW9j dGwodHR5ZmQsVElPQ01CSVMsJnopID4gLTEpIHsgLyogVHJ5IHRvIHR1cm4gaXQgYmFjayBvbi4g Ki8KLQkgICAgZGVidWcoRjEwMCwidHRoYW5nIFRJT0NNQklTIG9rIiwiIiwwKTsKLSNpZm5kZWYg Q0xTT1BOCi0JICAgIHJldHVybigxKTsJCQkvKiBTdWNjZXNzLCBkb25lLiAqLwotI2VuZGlmIC8q IENMU09QTiAqLwotCX0gZWxzZSB7CQkJLyogQ291bGRuJ3QgcmFpc2UsIGNvbnRpbnVlLiAqLwot CSAgICBkZWJ1ZyhGMTAxLCJ0dGhhbmcgVElPQ01CSVMgZXJybm8iLCIiLGVycm5vKTsKLQl9Ci0g ICAgfSBlbHNlIHsJCQkJLyogQ291bGRuJ3QgbG93ZXIsIGNvbnRpbnVlLiAqLwotIAlkZWJ1ZyhG MTAxLCJ0dGhhbmcgVElPQ01CSUMgZXJybm8iLCIiLGVycm5vKTsKLSAgICB9Ci0jZW5kaWYgLyog VElPQ01fRFRSICovCi0jZW5kaWYgLyogVElPQ01CSUMgKi8KLSNlbmRpZiAvKiBUSU9DTUJJUyAq LwotI2VuZGlmIC8qIF9JQk1SMiAqLwotCi0vKgotICBHZW5lcmFsIEFUJlQgVU5JWCBjYXNlLCBu b3QgSFBVWC4gIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBoaWdobHkgc3VzcGVjdC4gIE5vCi0gIHR3 byBBVCZULWJhc2VkIHN5c3RlbXMgc2VlbSB0byBkbyB0aGlzIHRoZSBzYW1lIHdheS4gIFRoZSBv YmplY3QgaXMgc2ltcGx5Ci0gIHRvIHR1cm4gb2ZmIERUUiBhbmQgdGhlbiB0dXJuIGl0IGJhY2sg b24uICBTVklEIHNheXMgdGhlIHVuaXZlcnNhbCBtZXRob2QKLSAgZm9yIHR1cm5pbmcgb2ZmIERU UiBpcyB0byBzZXQgdGhlIHNwZWVkIHRvIHplcm8sIGFuZCB0aGlzIGRvZXMgc2VlbSB0byBkbwot ICB0aGUgdHJpY2sgaW4gYWxsIGNhc2VzLiAgQnV0IG5laXRoZXIgU1ZJRCBub3IgYW55IGtub3du IG1hbiBwYWdlcyBzYXkgaG93IHRvCi0gIHR1cm4gRFRSIGJhY2sgb24gYWdhaW4uICBTb21lIHZh cmlhbnRzLCBsaWtlIG1vc3QgWGVuaXggaW1wbGVtZW50YXRpb25zLAotICByYWlzZSBEVFIgYWdh aW4gd2hlbiB0aGUgc3BlZWQgaXMgcmVzdG9yZWQgdG8gYSBub256ZXJvIHZhbHVlLiAgT3RoZXJz Ci0gIHJlcXVpcmUgdGhlIGRldmljZSB0byBiZSBjbG9zZWQgYW5kIG9wZW5lZCBhZ2FpbiwgYnV0 IHRoaXMgaXMgcmlza3kgYmVjYXVzZQotICBnZXR0eSBjb3VsZCBzZWl6ZSB0aGUgZGV2aWNlIGR1 cmluZyB0aGUgaW5zdGFudCBpdCBpcyBjbG9zZWQuCi0qLwotCi0vKiBSZXR1cm4gY29kZSBmb3Ig aW9jdGwgZmFpbHVyZXMuLi4gKi8KLSNpZmRlZiBBVFQ2MzAwCi0gICAgeCA9IDE7CQkJCS8qIEFU VDYzMDAgZG9lc24ndCB3YW50IHRvIGZhaWwuLi4gKi8KLSNlbHNlCi0gICAgeCA9IC0xOwotI2Vu ZGlmIC8qIEFUVDYzMDAgKi8KLQotICAgIGRlYnVnKEYxMDAsInR0aGFuZyBnZXQgc2V0dGluZ3Mi LCIiLDApOwotICAgIGlmIChpb2N0bCh0dHlmZCxUQ0dFVEEsJnR0Y3VyKSA8IDApIC8qIEdldCBj dXJyZW50IHNldHRpbmdzLiAqLwotICAgICAgcmV0dXJuKHgpOwkJCS8qIEZhaWwgaWYgdGhpcyBk b2Vzbid0IHdvcmsuICovCi0gICAgaWYgKChmbGFncyA9IGZjbnRsKHR0eWZkLEZfR0VURkwsMCkp IDwgMCkgLyogR2V0IGRldmljZSBmbGFncy4gKi8KLSAgICAgIHJldHVybih4KTsKLSAgICB0dGNf c2F2ZSA9IHR0Y3VyLmNfY2ZsYWc7CQkvKiBSZW1lbWJlciBjdXJyZW50IHNwZWVkLiAqLwotICAg IHNwZHNhdiA9IHR0Y19zYXZlICYgQ0JBVUQ7Ci0gICAgZGVidWcoRjEwMSwidHRoYW5nIHNwZWVk IiwiIixzcGRzYXYpOwotCi0jaWZkZWYgT19OREVMQVkKLSAgICBkZWJ1ZyhGMTAwLCJ0dGhhbmcg dHVybmluZyBPX05ERUxBWSBvbiIsIiIsMCk7Ci0gICAgZmNudGwodHR5ZmQsIEZfU0VURkwsIGZs YWdzIHwgT19OREVMQVkpOyAvKiBBY3RpdmF0ZSBPX05ERUxBWSAqLwotI2VuZGlmIC8qIE9fTkRF TEFZICovCi0KLSNpZmRlZiBBVFQ3MzAwIC8qIFRoaXMgaXMgdGhlIHdheSBpdCBpcyBTVVBQT1NF RCB0byB3b3JrICovCi0gICAgdHRjdXIuY19jZmxhZyAmPSB+Q0JBVUQ7CQkvKiBDaGFuZ2UgdGhl IHNwZWVkIHRvIHplcm8uICAqLwotI2Vsc2UKLSNpZmRlZiBSVEFJWAotICAgIHR0Y3VyLmNfY2Zs YWcgJj0gfkNCQVVEOwkJLyogQ2hhbmdlIHRoZSBzcGVlZCB0byB6ZXJvLiAgKi8KLSNlbHNlICAg ICAgICAgIC8qIFRoaXMgd2F5IHJlYWxseSB3b3JrcyBidXQgbWF5IGJlIGRhbmdlcm91cyAqLwot I2lmZGVmIHUzYjIKLSAgICB0dGN1ci5jX2NmbGFnID0gfihDQkFVRHxDTE9DQUwpOwkvKiBTcGVj aWFsIGZvciBBVCZUIDNCMnMgKi8KLQkJCQkJLyogKENMT0NBTCBtdXN0IGJlIE9GRikgKi8KLSNl bHNlCi0jaWZkZWYgU0NPM1IyCQkJCS8qIFNDTyBVTklYIDMuMiAqLwotLyoKLSAgVGhpcyBpcyBj b21wbGV0ZSBub25zZW5zZSwgYnV0IGFuIFNDTyB1c2VyIGNsYWltZWQgdGhpcyBjaGFuZ2UgbWFk ZQotICBoYW5naW5nIHVwIHdvcmsuICBDb21tZW50cyBmcm9tIG90aGVyIFNDTyBVTklYIDMuMiB1 c2VycyB3b3VsZCBiZQotICBhcHByZWNpYXRlZC4KLSovCi0gICAgdHRjdXIuY19jZmxhZyA9IENC QVVEfEIwOwotI2Vsc2UKLSNpZmRlZiBBSVhSUwkJCQkvKiBBSVggb24gUlMvNjAwMCAqLwotLyoK LSAgQ2FuJ3Qgc2V0IHNwZWVkIHRvIHplcm8gb24gQUlYIDMuMSBvbiBSUy82MDAwIDY0LXBvcnQg YWRhcHRlciwKLSAgZXZlbiB0aG91Z2ggeW91IGNhbiBkbyBpdCBvbiB0aGUgYnVpbHQtaW4gcG9y dCBhbmQgdGhlIDgtIGFuZCAxNi1wb3J0Ci0gIGFkYXB0ZXJzLiAgKFVudGVzdGVkIG9uIDEyOC1w b3J0IGFkYXB0ZXIuKQotKi8KLSAgICB0dGN1ci5jX2NmbGFnID0gQ0xPQ0FMfEhVUENMfHNwZHNh djsgLyogU3BlZWQgMCBjYXVzZXMgRUlOVkFMICovCi0jZWxzZQkJCQkJLyogTm9uZSBvZiB0aGUg YWJvdmUgKi8KLS8qCi0gIFNldCBldmVyeXRoaW5nLCBpbmNsdWRpbmcgdGhlIHNwZWVkLCB0byB6 ZXJvLCBleGNlcHQgZm9yIHRoZSBDTE9DQUwKLSAgYW5kIEhVUENMIGJpdHMuCi0qLwotICAgIHR0 Y3VyLmNfY2ZsYWcgPSBDTE9DQUx8SFVQQ0w7Ci0jZW5kaWYgLyogQUlYUlMgKi8KLSNlbmRpZiAv KiBTQ08zUjIgKi8KLSNlbmRpZiAvKiB1M2IyICovCi0jZW5kaWYgLyogUlRBSVggKi8KLSNlbmRp ZiAvKiBBVFQ3MzAwICovCi0KLSNpZmRlZiBDT01NRU5UCi0gICAgLyogYW5kIGlmIG5vbmUgb2Yg dGhvc2Ugd29yaywgdHJ5IG9uZSBvZiB0aGVzZS4uLiAqLwotICAgIHR0Y3VyLmNfY2ZsYWcgPSAw OwotICAgIHR0Y3VyLmNfY2ZsYWcgPSBDTE9DQUw7Ci0gICAgdHRjdXIuY19jZmxhZyAmPSB+KENC QVVEfEhVUENMKTsKLSAgICB0dGN1ci5jX2NmbGFnICY9IH4oQ0JBVUR8Q1JFQUQpOwotICAgIHR0 Y3VyLmNfY2ZsYWcgJj0gfihDQkFVRHxDUkVBRHxIVVBDTCk7Ci0gICAgLyogb3Igb3RoZXIgY29t YmluYXRpb25zICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0jaWZkZWYgVENYT05DCi0gICAg ZGVidWcoRjEwMCwidHRoYW5nIFRDWE9OQyIsIiIsMCk7Ci0gICAgaWYgKGlvY3RsKHR0eWZkLCBU Q1hPTkMsIDEpIDwgMCkgewotCWRlYnVnKEYxMDEsInR0aGFuZyBUQ1hPTkMgZmFpbGVkIiwiIixl cnJubyk7Ci0gICAgfQotI2VuZGlmIC8qIFRDWE9OQyAqLwotCi0jaWZkZWYgVElPQ1NUQVJUCi0g ICAgZGVidWcoRjEwMCwidHRoYW5nIFRJT0NTVEFSVCIsIiIsMCk7Ci0gICAgaWYgKGlvY3RsKHR0 eWZkLCBUSU9DU1RBUlQsIDApIDwgMCkgewotCWRlYnVnKEYxMDEsInR0aGFuZyBUSU9DU1RBUlQg ZmFpbGVkIiwiIixlcnJubyk7Ci0gICAgfQotI2VuZGlmIC8qIFRJT0NTVEFSVCAqLwotCi0gICAg aWYgKGlvY3RsKHR0eWZkLFRDU0VUQUYsJnR0Y3VyKSA8IDApIHsgLyogRmFpbCBpZiB3ZSBjYW4n dC4gKi8KLQlkZWJ1ZyhGMTAxLCJ0dGhhbmcgVENTRVRBRiBmYWlsZWQiLCIiLGVycm5vKTsKLQlm Y250bCh0dHlmZCwgRl9TRVRGTCwgZmxhZ3MpOwkvKiBSZXN0b3JlIGZsYWdzICovCi0JcmV0dXJu KC0xKTsJCQkvKiBiZWZvcmUgcmV0dXJuaW5nLiAqLwotICAgIH0KLSAgICBtc2xlZXAoMzAwKTsJ CQkvKiBHaXZlIG1vZGVtIHRpbWUgdG8gbm90aWNlLiAqLwotCi0jaWZuZGVmIE5PQ09URk1DCi0K LS8qIE5vdywgZXZlbiB0aG91Z2ggaXQgZG9lc24ndCBzYXkgdGhpcyBpbiBTVklEIG9yIGFueSBt YW4gcGFnZSwgd2UgaGF2ZSAqLwotLyogdG8gY2xvc2UgYW5kIHJlb3BlbiB0aGUgZGV2aWNlLiAg VGhpcyBpcyBub3QgbmVjZXNzYXJ5IGZvciBhbGwgc3lzdGVtcywgKi8KLS8qIGJ1dCBpdCdzIGlt cG9zc2libGUgdG8gcHJlZGljdCB3aGljaCBvbmVzIG5lZWQgaXQgYW5kIHdoaWNoIG9uZXMgZG9u J3QuICovCi0KLSNpZmRlZiBBVFQ3MzAwCi0vKgotICBTcGVjaWFsIGhhbmRsaW5nIGZvciBBVFQg NzMwMCBVTklYIFBDIGFuZCAzQjEsIHdoaWNoIGhhdmUgInBob25lIgotICByZWxhdGVkIGlvY3Rs J3MgZm9yIHRoZWlyIGludGVybmFsIG1vZGVtcy4gIGF0dG1vZGVtIGhhcyBnZXR0eSBzdGF0dXMg YW5kCi0gIG1vZGVtLWluLXVzZSBiaXQuICBSZXBvcnRlZGx5IHRoZSBBVFQ3MzAwLzNCMSBQSU9D RElTQyBjYWxsIGlzIG5lY2Vzc2FyeSwKLSAgYnV0IGFsc28gcnVpbnMgdGhlIGZpbGUgZGVzY3Jp cHRvciwgYW5kIG5vIG90aGVyIHBob25lKDcpIGlvY3RsIGNhbGwgY2FuIGZpeAotICBpdC4gIFdo YXRldmVyIGl0IGRvZXMsIGl0IHNlZW1zIHRvIGVzY2FwZSBkZXRlY3Rpb24gd2l0aCBQSU9DR0VU QSBhbmQgVENHRVRBLgotICBUaGUgb25seSB3YXkgdG8gdW5kbyB0aGUgZGFtYWdlIGlzIHRvIGNs b3NlIHRoZSBmZCBhbmQgdGhlbiByZW9wZW4gaXQuCi0qLwotICAgIGlmIChhdHRtb2RlbSAmIElT TU9ERU0pIHsKLQlkZWJ1ZyhGMTAwLCJ0dGhhbmcgYXR0bW9kZW0gY2xvc2Uvb3BlbiIsIiIsMCk7 Ci0JaW9jdGwodHR5ZmQsUElPQ1VOSE9MRCwmZGlhbGVyKTsgLyogUmV0dXJuIGNhbGwgdG8gaGFu ZHNldC4gKi8KLQlpb2N0bCh0dHlmZCxQSU9DRElTQywmZGlhbGVyKTsJLyogRGlzY29ubmVjdCBw aG9uZS4gKi8KLQljbG9zZSh0dHlmZCk7CQkJLyogQ2xvc2UgYW5kIHJlb3BlbiB0aGUgZmQuICov Ci0JdHR5ZmQgPSBwcml2X29wbih0dG5tc3YsIE9fUkRXUiB8IE9fTkRFTEFZKTsKLQlhdHRtb2Rl bSAmPSB+SVNNT0RFTTsJCS8qIFBob25lIG5vIGxvbmdlciBpbiB1c2UuICovCi0gICAgfQotI2Vs c2UgLyogIUFUVDczMDAgKi8KLS8qIEl0IHNlZW1zIHdlIGhhdmUgdG8gY2xvc2UgYW5kIG9wZW4g dGhlIGRldmljZSBmb3Igb3RoZXIgQVQmVCBzeXN0ZW1zICovCi0vKiB0b28sIGFuZCB0aGlzIGlz IHRoZSBwbGFjZSB0byBkbyBpdC4gIFRoZSBmb2xsb3dpbmcgY29kZSBkb2VzIHRoZSAqLwotLyog ZmFtb3VzIGNsb3NlKG9wZW4oLi4uKSkgbWFnaWMgYnkgZGVmYXVsdC4gIElmIHRoYXQgZG9lc24n dCB3b3JrIGZvciB5b3UsICovCi0vKiB0aGVuIHRyeSB1bmNvbW1lbnRpbmcgdGhlIGZvbGxvd2lu ZyBzdGF0ZW1lbnQgb3IgcHV0dGluZyAtRENMU09QTiBpbiAqLwotLyogdGhlIG1ha2VmaWxlIENG TEFHUy4gKi8KLQotLyogI2RlZmluZSBDTFNPUE4gKi8KLQotI2lmbmRlZiBTQ08zMiAvKiBOb3Qg bmVlZGVkIGJ5LCBhbmQgaGFybWZ1bCB0bywgU0NPIFVOSVggMy4yIC8gWGVuaXggMi4zICovCi0K LSNpZmRlZiBPX05ERUxBWQotI2RlZmluZSBPUEVORkxHUyBPX1JEV1IgfCBPX05ERUxBWQotI2Vs c2UKLSNkZWZpbmUgT1BFTkZMR1MgT19SRFdSCi0jZW5kaWYKLQotI2lmbmRlZiBDTFNPUE4KLS8q IFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgZGVmYXVsdCwgaS5lLiB1bmxlc3MgQ0xTT1BOIGlzIGRl ZmluZWQuICovCi0vKiBJdCBpcyB0aG91Z2h0IHRvIGJlIHNhZmVyIGJlY2F1c2UgdGhlcmUgaXMg bm8gd2luZG93IHdoZXJlIGdldHR5ICovCi0vKiBjYW4gc2VpemUgY29udHJvbCBvZiB0aGUgZGV2 aWNlLiAgVGhlIGRyYXdiYWNrIGlzIHRoYXQgaXQgbWlnaHQgbm90IHdvcmsuICovCi0KLSAgICBk ZWJ1ZyhGMTAxLCJ0dGhhbmcgY2xvc2Uob3BlbigpKSwgT1BFTkZMR1MiLCIiLE9QRU5GTEdTKTsK LSAgICBjbG9zZShwcml2X29wbih0dG5tc3YsIE9QRU5GTEdTKSk7Ci0KLSNlbHNlCi0vKiBUaGlz IG1ldGhvZCBpcyB1c2VkIGlmIHlvdSAjZGVmaW5lIENMU09QTi4gIEl0IGlzIG1vcmUgbGlrZWx5 IHRvIHdvcmsgKi8KLS8qIHRoYW4gdGhlIHByZXZpb3VzIG1ldGhvZCwgYnV0IGl0J3MgYWxzbyBt b3JlIGRhbmdlcm91cy4gKi8KLQotICAgIGRlYnVnKEYxMDEsInR0aGFuZyBjbG9zZS9vcGVuLCBP UEVORkxHUyIsIiIsT1BFTkZMR1MpOwotICAgIGNsb3NlKHR0eWZkKTsKLSAgICBtc2xlZXAoMTAp OwotICAgIHR0eWZkID0gcHJpdl9vcG4odHRubXN2LCBPUEVORkxHUyk7CS8qIE9wZW4gaXQgYWdh aW4gKi8KLSNlbmRpZiAvKiBDTFNPUE4gKi8KLSN1bmRlZiBPUEVORkxHUwotCi0jZW5kaWYgLyog U0NPMzIgKi8KLSNlbmRpZiAvKiBBVFQ3MzAwICovCi0KLSNlbmRpZiAvKiBOT0NPVEZNQyAqLwot Ci0vKiBOb3cgcHV0IGFsbCBmbGFncyAmIG1vZGVzIGJhY2sgdGhlIHdheSB3ZSBmb3VuZCB0aGVt LiAqLwotLyogKERvZXMgdGhlIG9yZGVyIG9mIGlvY3RsICYgZmNudGwgbWF0dGVyID8gKSAqLwot Ci0gICAgZGVidWcoRjEwMCwidHRoYW5nIHJlc3RvcmUgc2V0dGluZ3MiLCIiLDApOwotICAgIHR0 Y3VyLmNfY2ZsYWcgPSB0dGNfc2F2ZTsJCS8qIEdldCBvbGQgc3BlZWQgYmFjay4gKi8KLSAgICBp ZiAoaW9jdGwodHR5ZmQsVENTRVRBRiwmdHRjdXIpIDwgMCkgLyogaW9jdGwgcGFyYW1ldGVycy4g Ki8KLSAgICAgIHJldHVybigtMSk7Ci0jaWZkZWYgT19OREVMQVkKLS8qCi0gIFRoaXMgaXMgcmVx dWlyZWQgZm9yIElCTSBSVCBhbmQgUlMvNjAwMCwgcHJvYmFibHkgaGVscHMgZWxzZXdoZXJlIHRv byAoPykuCi0gIEFmdGVyIGNsb3NpbmcgYSBtb2RlbSBsaW5lLCB0aGUgbW9kZW0gd2lsbCBwcm9i YWJseSBub3QgYmUgYXNzZXJ0aW5nCi0gIGNhcnJpZXIgYW55IG1vcmUsIHNvIHdlIHNob3VsZCBu b3QgcmVxdWlyZSBjYXJyaWVyIGFueSBtb3JlLiAgSWYgdGhpcwotICBjYXVzZXMgdHJvdWJsZSBv biBub24tSUJNIFVOSVhlcywgY2hhbmdlIHRoZSAjaWZkZWYgdG8gdXNlIF9JQk1SMiByYXRoZXIK LSAgdGhhbiBPX05ERUxBWS4KLSovCi0gICAgZmxhZ3MgJj0gfk9fTkRFTEFZOwkJCS8qIERvbid0 IHJlcXVpcmUgY2FycmllciBvbiByZW9wZW4gKi8KLSNlbmRpZiAvKiBPX05ERUxBWSAqLwotICAg IGlmIChmY250bCh0dHlmZCxGX1NFVEZMLGZsYWdzKSA8IDApCS8qIGZjbnRsIHBhcmFtZXRlcnMg Ki8KLSAgICAgIHJldHVybigtMSk7Ci0KLSAgICByZXR1cm4oMSk7Ci0jZW5kaWYgLyogbm90IEhQ VVggKi8KLSNlbmRpZiAvKiBBVFRTViAqLwotI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLwotI2Vu ZGlmIC8qIEhVUF9QT1NJWCAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLX0KLQotLyoKLSAgTWFq b3IgY2hhbmdlIGluIDVBKDE3NCkuICBXZSB1c2VkIHRvIHVzZSBMUEFTUzgsIGlmIGl0IHdhcyBk ZWZpbmVkLCB0bwotICBhbGxvdyA4LWJpdCBkYXRhIGFuZCBYb24vWG9mZiBmbG93IGNvbnRyb2wg YXQgdGhlIHNhbWUgdGltZS4gIEJ1dCB0aGlzCi0gIExQQVNTOCBidXNpbmVzcyBzZWVtcyB0byBo YXZlIGJlZW4gY2F1c2luZyB0cm91YmxlIGZvciBldmVyeWJvZHkgYnV0IG1lIQotICBGb3IgZXhh bXBsZSwgQW5uZXggdGVybWluYWwgc2VydmVycywgY29tbW9ubHkgdXNlZCB3aXRoIEVuY29yZSBj b21wdXRlcnMsCi0gIGRvIG5vdCBzdXBwb3J0IExQQVNTOCBldmVuIHRob3VnaCB0aGUgRW5jb3Jl IGl0c2VsZiBkb2VzLiAgRGl0dG8gZm9yIG1hbnkKLSAgb3RoZXIgdGVybWluYWwgc2VydmVycywg VEVMTkVUIGNvbm5lY3Rpb25zLCBybG9naW4gY29ubmVjdGlvbnMsIGV0YyBldGMuCi0gIE5vdywg cmVwb3J0ZWRseSwgZXZlbiB2YW5pbGxhIDQuMyBCU0Qgc3lzdGVtcyBjYW4ndCBkbyB0aGlzIHJp Z2h0IG9uIHRoZWlyCi0gIHNlcmlhbCBsaW5lcywgZXZlbiB0aG91Z2ggTFBBU1M4IGlzIGEgZmVh dHVyZSBvZiA0LjNCU0QuICBTbyBsZXQncyB0dXJuIGl0Ci0gIG9mZiBmb3IgZXZlcnlib2R5LiAg VGhhdCBtZWFucyB3ZSBnb2VzIGJhY2sgdG8gdXNpbmcgcmF3IG1vZGUsIHdpdGggbm8KLSAgZmxv dyBjb250cm9sLiAgUGhvb2V5LgotCi0gIE5PVEU6IFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSB0 aGUgZmlyc3QgcmVmZXJlbmNlIHRvIExQQVNTOCBpbiB0aGlzIGZpbGUsCi0gIGFuZCBhZnRlciB0 aGUgbGFzdCAjaW5jbHVkZSBzdGF0bWVudC4KLSovCi0jaWZkZWYgTFBBU1M4Ci0jdW5kZWYgTFBB U1M4Ci0jZW5kaWYgLyogTFBBU1M4ICovCi0KLS8qICBUIFQgUiBFIFMgIC0tICBSZXN0b3JlIHRl cm1pbmFsIHRvICJub3JtYWwiIG1vZGUuICAqLwotCi0vKiBza2VAcGttYWIuc2U6IFRoZXJlIGFy ZSB0d28gY2hvaWNlcyBmb3Igd2hhdCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBkby4KLSAqICgxKSBS ZXN0b3JlIHRoZSB0dHkgdG8gY3VycmVudCAibm9ybWFsIiBtb2RlLCB3aXRoIGNhcnJpZXIgdHJl YXRtZW50Ci0gKiBhY2NvcmRpbmcgdG8gdHRjYXJyLCB0byBiZSB1c2VkIGFmdGVyIGV2ZXJ5IGtl cm1pdCBjb21tYW5kLiAoMikgUmVzdG9yZQotICogdGhlIHR0eSB0byB0aGUgc3RhdGUgaXQgd2Fz IGluIGJlZm9yZSBrZXJtaXQgb3BlbmVkIGl0LiBUaGVzZSBjaG9pY2VzCi0gKiBjb25mbGljdCwg c2luY2UgdHRvbGQgY2FuJ3QgaG9sZCBib3RoIGNob2ljZXMgb2YgdHR5IHBhcmFtZXRlcnMuICB0 dHJlcygpCi0gKiBpcyBjdXJyZW50bHkgYmVpbmcgY2FsbGVkIGFzIGluIGNob2ljZSAoMSksIGJ1 dCB0dG9sZCBiYXNpY2FsbHkgaG9sZHMKLSAqIHRoZSBpbml0aWFsIHBhcmFtZXRlcnMsIGFzIGlu ICgyKSwgYW5kIHRoZSBkZXNjcmlwdGlvbiBhdCB0aGUgYmVnaW5uaW5nCi0gKiBvZiB0aGlzIGZp bGUgc2F5cyAoMikuCi0gKgotICogSSBkb24ndCB0aGluayByZXN0b3JpbmcgdHR5IHBhcmFtZXRl cnMgYWZ0ZXIgYWxsIGtlcm1pdCBjb21tYW5kcyBtYWtlcwotICogbXVjaCBvZiBhIGRpZmZlcmVu Y2UuICBSZXN0b3JpbmcgdGhlbSB1cG9uIGV4aXQgZnJvbSBrZXJtaXQgbWF5IGJlIG9mCi0gKiBz b21lIHVzZSBpbiBzb21lIGNhc2VzICh3aGVuIHRoZSBsaW5lIGlzIG5vdCByZXN0b3JlZCBhdXRv bWF0aWNhbGx5IG9uCi0gKiBjbG9zZSwgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0pLgotICoKLSAq IEkgY2FuJ3QgY2hvb3NlIHdoaWNoIG9uZSBpdCBzaG91bGQgYmUsIHNvIEkgaGF2ZW4ndCBjaGFu Z2VkIGl0LiBJdAotICogcHJvYmFibHkgd29ya3MgYXMgaXQgaXMsIHRvby4gSXQgd291bGQgcHJv YmFibHkgZXZlbiB3b3JrIGV2ZW4gd2l0aAotICogdHRyZXMoKSBlbnRpcmVseSBkZWxldGVkLi4u Ci0gKgotICogKGZyb20gZmRjOiBBY3R1YWxseSwgdGhpcyBmdW5jdGlvbiBvcGVyYXRlcyBpbiBy ZW1vdGUgbW9kZSB0b28sIHNvCi0gKiBpdCByZXN0b3JlcyB0aGUgY29uc29sZSAoY29tbWFuZCkg dGVybWluYWwgdG8gd2hhdGV2ZXIgbW9kZSBpdCB3YXMKLSAqIGluIGJlZm9yZSBwYWNrZXQgb3Bl cmF0aW9ucyBiZWdhbiwgc28gdGhhdCBjb21tYW5kcyB3b3JrIHJpZ2h0IGFnYWluLikKLSAqLwot aW50Ci10dHJlcygpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSB0 aGUgdHR5IHRvIG5vcm1hbC4gKi8KLSAgICBpbnQgeDsKLQotICAgIGlmICh0dHlmZCA8IDApIHJl dHVybigtMSk7ICAgICAgICAgIC8qIE5vdCBvcGVuLiAqLwotCi0gICAgaWYgKHR0ZmRmbGcpIHJl dHVybigwKTsJCS8qIERvbid0IG1lc3Mgd2l0aCB0ZXJtaW5hbCBtb2RlcyBpZiAqLwotCQkJCQkv KiB3ZSBnb3QgdHR5ZmQgZnJvbSBhbm90aGVyIHByb2Nlc3MgKi8KLSNpZmRlZglORVRDT05OCi0g ICAgaWYgKG5ldGNvbm4pIHsJCQkvKiBOZXR3b3JrIGNvbm5lY3Rpb24gKi8KLSAgICAgICAgdHZ0 ZmxnID0gMDsKLSNpZmRlZiBUQ1BTT0NLRVQKLSNpZmRlZiBUQ1BfTk9ERUxBWQotICAgICAgICB7 Ci0JICAgIGV4dGVybiBpbnQgdGNwX25vZGVsYXk7CS8qIEp1c3QgcHV0IHRoaXMgYmFjayBpZiBu ZWNlc3NhcnkgKi8KLQkgICAgaWYgKHR0bmV0ID09IE5FVF9UQ1BCKSB7Ci0JCWlmIChub2RlbGF5 X3NhdiA+IC0xKSB7Ci0JCSAgICBub19kZWxheSh0dHlmZCxub2RlbGF5X3Nhdik7Ci0JCSAgICBu b2RlbGF5X3NhdiA9IC0xOwotCQl9Ci0JICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIFRDUF9O T0RFTEFZICovCi0jaWZkZWYgVE5fQ09NUE9SVAotICAgICAgICBpZiAoaXN0bmNvbXBvcnQoKSkg ewotICAgICAgICAgICAgaW50IHJjID0gLTE7Ci0gICAgICAgICAgICBpZiAoKHJjID0gdG5zZXRm bG93KHR0ZmxvdykpIDwgMCkKLQkgICAgICByZXR1cm4ocmMpOwotICAgICAgICAgICAgaWYgKHR0 c3BlZWQgPD0gMCkgCi0JICAgICAgdHRzcGVlZCA9IHRuY19nZXRfYmF1ZCgpOwotICAgICAgICAg ICAgZWxzZSBpZiAoKHJjID0gdG5jX3NldF9iYXVkKHR0c3BlZWQpKSA8IDApCi0JICAgICAgcmV0 dXJuKHJjKTsKLSAgICAgICAgICAgIHRuY19zZXRfZGF0YXNpemUoOCk7Ci0JICAgIHRuY19zZXRf c3RvcHNpemUoc3RvcGJpdHMpOwotCi0jaWZkZWYgSFdQQVJJVFkKLSAgICAgICAgICAgIGlmICho d3Bhcml0eSkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAoaHdwYXJpdHkpIHsKLQkJICBjYXNl ICdlJzoJCQkvKiBFdmVuICovCi0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0cmVz IDggYml0cyArIGV2ZW4gcGFyaXR5IiwiIiwwKTsKLSAgICAgICAgICAgICAgICAgICAgdG5jX3Nl dF9wYXJpdHkoMyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCQkgIGNhc2UgJ28nOgkJ CS8qIE9kZCAqLwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dHJlcyA4IGJpdHMg KyBvZGQgcGFyaXR5IiwiIiwwKTsKLSAgICAgICAgICAgICAgICAgICAgdG5jX3NldF9wYXJpdHko Mik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCQkgIGNhc2UgJ20nOgkJCS8qIE1hcmsg Ki8KLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwidHRyZXMgOCBiaXRzICsgaW52YWxp ZCBwYXJpdHk6IG1hcmsiLCIiLDApOwotICAgICAgICAgICAgICAgICAgICB0bmNfc2V0X3Bhcml0 eSg0KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0JCSAgY2FzZSAncyc6CQkJLyogU3Bh Y2UgKi8KLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwidHRyZXMgOCBiaXRzICsgaW52 YWxpZCBwYXJpdHk6IHNwYWNlIiwiIiwwKTsKLSAgICAgICAgICAgICAgICAgICAgdG5jX3NldF9w YXJpdHkoNSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIEhXUEFSSVRZICovCi0JICAgIHsKLSAgICAg ICAgICAgICAgICB0bmNfc2V0X3Bhcml0eSgxKTsgICAgICAgICAgICAgIC8qIE5vbmUgKi8KLSAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIHR2dGZsZyA9IDA7Ci0gICAgICAgICAgICByZXR1cm4o MCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0jZW5kaWYgLyogVENQU09D S0VUICovCi0JcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZgkvKiBORVRDT05OICovCi0jaWZkZWYg TkVUQ01ECi0gICAgaWYgKHR0cGlwZSkgcmV0dXJuKDApOwotI2VuZGlmIC8qIE5FVENNRCAqLwot I2lmZGVmIE5FVFBUWQotICAgIGlmICh0dHB0eSkgcmV0dXJuKDApOwotI2VuZGlmIC8qIE5FVFBU WSAqLwotCi0vKiBSZWFsIHRlcm1pbmFsIGRldmljZSwgc28gcmVzdG9yZSBpdHMgb3JpZ2luYWwg bW9kZXMgKi8KLQotI2lmZGVmIEJTRDQ0T1JQT1NJWAkJCS8qIEZvciBQT1NJWCBsaWtlIHRoaXMg Ki8KLSAgICBkZWJ1ZyhGMTAwLCJ0dHJlcyBCU0Q0NE9SUE9TSVgiLCIiLDApOwotICAgIHggPSB0 Y3NldGF0dHIodHR5ZmQsVENTQURSQUlOLCZ0dG9sZCk7Ci0jZWxzZQkJCQkJLyogRm9yIGFsbCBv dGhlcnMuLi4gKi8KLSNpZmRlZiBBVFRTViAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBG b3IgQVQmVCB2ZXJzaW9ucy4uLiAqLwotICAgIGRlYnVnKEYxMDAsInR0cmVzIEFUVFNWIiwiIiww KTsKLSAgICB4ID0gaW9jdGwodHR5ZmQsVENTRVRBVywmdHRvbGQpOwkvKiBSZXN0b3JlIHR0eSBt b2RlcyB0aGlzIHdheS4gKi8KLSNlbHNlCi0vKiBIZXJlIHdlIHJlc3RvcmUgdGhlIG1vZGVzIGZv ciBCU0QgKi8KLQotI2lmZGVmIExQQVNTOAkJCQkvKiBVbmRvICJwYXNzOCIgaWYgaXQgd2VyZSBk b25lICovCi0gICAgaWYgKGxtb2RlZikgewotCWlmIChpb2N0bCh0dHlmZCxUSU9DTFNFVCwmbG1v ZGUpIDwgMCkKLQkgIGRlYnVnKEYxMDAsInR0cmVzIFRJT0NMU0VUIGZhaWxlZCIsIiIsMCk7Ci0J ZWxzZQotCSAgZGVidWcoRjEwMCwidHRyZXMgVElPQ0xTRVQgb2siLCIiLDApOwotICAgIH0KLSNl bmRpZiAvKiBMUEFTUzggKi8KLQotI2lmZGVmIENLX0RUUkNUUwkJICAgLyogVW5kbyBoYXJkd2Fy ZSBmbG93IGlmIGl0IHdlcmUgZG9uZSAqLwotICAgIGlmIChsbW9kZWYpIHsKLSAJaWYgKGlvY3Rs KHR0eWZkLFRJT0NMU0VULCZsbW9kZSkgPCAwKQotIAkgIGRlYnVnKEYxMDAsInR0cmVzIFRJT0NM U0VUIGZhaWxlZCIsIiIsMCk7Ci0gCWVsc2UKLSAJICBkZWJ1ZyhGMTAwLCJ0dHJlcyBUSU9DTFNF VCBvayIsIiIsMCk7Ci0gICAgfQotI2VuZGlmIC8qIENLX0RUUkNUUyAqLwotCi0jaWZkZWYgVElP Q0dFVEMJCQkJLyogUHV0IGJhY2sgc3BlY2lhbCBjaGFyYWN0ZXJzICovCi0gICAgaWYgKHRjaGFy ZiAmJiAoeGxvY2FsID09IDApKSB7Ci0JaWYgKGlvY3RsKHR0eWZkLFRJT0NTRVRDLCZ0Y2hvbGQp IDwgMCkKLQkgIGRlYnVnKEYxMDAsInR0cmVzIFRJT0NTRVRDIGZhaWxlZCIsIiIsMCk7Ci0JZWxz ZQotCSAgZGVidWcoRjEwMCwidHRyZXMgVElPQ1NFVEMgb2siLCIiLDApOwotICAgIH0KLSNlbmRp ZiAvKiBUSU9DR0VUQyAqLwotCi0jaWZkZWYgVElPQ0dMVEMJCQkJLyogUHV0IGJhY2sgbG9jYWwg c3BlY2lhbCBjaGFyYWN0ZXJzICovCi0gICAgaWYgKGx0Y2hhcmYgJiYgKHhsb2NhbCA9PSAwKSkg ewotCWlmIChpb2N0bCh0dHlmZCxUSU9DU0xUQywmbHRjaG9sZCkgPCAwKQotCSAgZGVidWcoRjEw MCwidHRyZXMgVElPQ1NMVEMgZmFpbGVkIiwiIiwwKTsKLQllbHNlCi0JICBkZWJ1ZyhGMTAwLCJ0 dHJlcyBUSU9DU0xUQyBvayIsIiIsMCk7Ci0gICAgfQotI2VuZGlmIC8qIFRJT0NHTFRDICovCi0K LSNpZmRlZiBCRUxMVjEwCi0gICAgZGVidWcoRjEwMCwidHRyZXMgQkVMTFYxMCIsIiIsMCk7Ci0g ICAgeCA9IGlvY3RsKHR0eWZkLFRJT0NTRVRQLCZ0dG9sZCk7CS8qIFJlc3RvcmUgYm90aCBzdHJ1 Y3RzICovCi0gICAgeCA9IGlvY3RsKHR0eWZkLFRJT0NTREVWLCZ0ZG9sZCk7Ci0jZWxzZQotICAg IGRlYnVnKEYxMDAsInR0cmVzIHN0dHkiLCIiLDApOwotICAgIHggPSBzdHR5KHR0eWZkLCZ0dG9s ZCk7ICAgICAgICAgICAgIC8qIFJlc3RvcmUgdHR5IG1vZGVzIHRoZSBvbGQgd2F5LiAqLwotI2Vu ZGlmIC8qIEJFTExWMTAgKi8KLQotICAgIGlmICgheGxvY2FsKQotICAgICAgbXNsZWVwKDEwMCk7 CQkJLyogVGhpcyByZXBsYWNlcyBzbGVlcCgxKS4uLiAqLwotCQkJCQkvKiBQdXQgYmFjayBzbGVl cCgxKSBpZiB0dHkgaXMgKi8KLQkJCQkJLyogbWVzc2VkIHVwIGFmdGVyIGNsb3NlLiAqLwotI2Vu ZGlmIC8qIEFUVFNWICovCi0jZW5kaWYgLyogQlNENDRPUlBPU0lYICovCi0KLSAgICBkZWJ1ZyhG MTAxLCJ0dHJlcyByZXN1bHQiLCIiLHgpOwotI2lmbmRlZiBRTlgKLSAgICBpZiAoeCA8IDApIGRl YnVnKEYxMDEsInR0cmVzIGVycm5vIiwiIixlcnJubyk7Ci0jZW5kaWYgLyogUU5YICovCi0KLSNp ZmRlZiBBSVhSUwotI2lmbmRlZiBBSVg0MQotICAgIHggPSBpb2N0bCh0dHlmZCwgdHRsZCAmIDEg PyBUWEFERENEIDogVFhERUxDRCwgInJ0cyIpOwotICAgIGRlYnVnKEYxMDEsInR0cmVzIEFJWCBs aW5lIGRpc2NpcGxpbmUgcnRzIHJlc3RvcmUiLCIiLHgpOwotI2VuZGlmIC8qIEFJWDQxICovCi0j ZW5kaWYgLyogQUlYUlMgKi8KLQotI2lmZGVmIEJTRDQxCi0gICAgaWYgKHR0bGQgPiAtMSkgewkJ CS8qIFB1dCBiYWNrIGxpbmUgZGlzY2lwbGluZSAqLwotCXggPSBpb2N0bCh0dHlmZCwgVElPQ1NF VEQsICZ0dGxkKTsKLQlkZWJ1ZyhGMTAxLCJ0dHJlcyBCU0Q0MSBsaW5lIGRpc2NpcGxpbmUgcmVz dG9yZSIsIiIseCk7Ci0JaWYgKHggPCAwKSBkZWJ1ZyhGMTAxLCIuLi5pb2N0bCBlcnJubyIsIiIs ZXJybm8pOwotCXR0bGQgPSAtMTsKLSAgICB9Ci0jZW5kaWYgLyogQlNENDEgKi8KLQotI2lmZGVm IHNvbnlfbmV3cwotICAgIHggPSB4bG9jYWwgPyBrbV9leHQgOiBrbV9jb247CS8qIFJlc3RvcmUg S2FuamkgbW9kZS4gKi8KLSAgICBpZiAoeCAhPSAtMSkgewkJCS8qIE1ha2Ugc3VyZSB3ZSBrbm93 IG9yaWdpbmFsIG1vZGVzLiAqLwotCWlmIChpb2N0bCh0dHlmZCxUSU9DS1NFVCwgJngpIDwgMCkg ewotCSAgICBwZXJyb3IoInR0cmVzIGNhbid0IHNldCBLYW5qaSBtb2RlIik7Ci0JICAgIGRlYnVn KEYxMDEsInR0cmVzIGVycm9yIHNldHRpbmcgS2FuamkgbW9kZSIsIiIseCk7Ci0JICAgIHJldHVy bigtMSk7Ci0JfQotICAgIH0KLSAgICBkZWJ1ZyhGMTAwLCJ0dHJlcyBzZXQgS2FuamkgbW9kZSBv ayIsIiIsMCk7Ci0jZW5kaWYgLyogc29ueV9uZXdzICovCi0KLSAgICB0dnRmbGcgPSAwOwkJCQkv KiBJbnZhbGlkYXRlIHRlcm1pbmFsIG1vZGUgc2V0dGluZ3MgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ0 dHJlcyByZXR1cm4gY29kZSIsIiIseCk7Ci0gICAgcmV0dXJuKHgpOwotfQotCi0jaWZuZGVmIE5P VVVDUAotCi0vKiAgVCBUIEMgSCBLIFAgSSBEICAtLSAgQ2hlY2sgbG9ja2ZpbGUgcGlkICAqLwot LyoKLSAgUmVhZCBwaWQgZnJvbSBsb2NrZmlsZSBuYW1lZCBmLCBjaGVjayB0aGF0IGl0J3Mgc3Rp bGwgdmFsaWQuCi0gIElmIHNvLCByZXR1cm4gMS4KLSAgT24gZmFpbHVyZSB0byByZWFkIHBpZCwg cmV0dXJuIDEuCi0gIE90aGVyd2lzZSwgdHJ5IHRvIGRlbGV0ZSBsb2NrZmlsZSBmIGFuZCByZXR1 cm4gMCBpZiBzdWNjZXNzZnVsLCBlbHNlIDEuCi0qLwotc3RhdGljIGludAotdHRjaGtwaWQoZikg Y2hhciAqZjsgewotICAgIGludCBwaWQsIG15cGlkLCB4OwotICAgIHBpZCA9IHR0cnBpZChmKTsJ CQkvKiBSZWFkIHBpZCBmcm9tIGZpbGUuICovCi0gICAgaWYgKHBpZCA+IC0xKSB7CQkJLyogSWYg d2Ugd2VyZSBhYmxlIHRvIHJlYWQgdGhlIHBpZC4uICovCi0JZGVidWcoRjEwMSwidHRjaGtwaWQg bG9jayBwaWQiLCIiLHBpZCk7Ci0JZXJybm8gPSAwOwkJCS8qIFNlZSBpZiBwcm9jZXNzIHN0aWxs IGV4aXN0cy4gKi8KLQlteXBpZCA9IChpbnQpZ2V0cGlkKCk7CQkvKiBHZXQgbXkgb3duIHBpZC4g Ki8KLQlkZWJ1ZyhGMTAxLCJ0dGNoa3BpZCBteSBwaWQiLCIiLG15cGlkKTsKLQlpZiAocGlkID09 IG15cGlkKSB7CQkvKiBJdCdzIG1lISAqLwotCSAgICB4ID0gLTE7CQkJLyogU28gSSBjYW4gZGVs ZXRlIGl0ICovCi0JICAgIGVycm5vID0gRVNSQ0g7CQkvKiBwcmV0ZW5kIGl0J3MgaW52YWxpZCAq LwotCX0gZWxzZSB7CQkJLyogSXQncyBub3QgbWUgKi8KLQkgICAgeCA9IGtpbGwoKFBJRF9UKXBp ZCwgMCk7CS8qIFNlZSBpZiBpdCdzIGEgbGl2ZSBwcm9jZXNzICovCi0JICAgIGRlYnVnKEYxMDEs InR0Y2hrcGlkIGtpbGwgZXJybm8iLCIiLGVycm5vKTsKLQl9Ci0JZGVidWcoRjEwMSwidHRjaGtw aWQgcGlkIHRlc3QiLCIiLHgpOwotCWlmICh4IDwgMCAmJiBlcnJubyA9PSBFU1JDSCkgeyAvKiBw aWQgaXMgaW52YWxpZCAqLwotCSAgICBkZWJ1ZyhGMTExLCJyZW1vdmluZyBzdGFsZSBsb2NrIixm LHBpZCk7Ci0JICAgIGlmICghYmFja2dyZCkKLQkgICAgICBwcmludGYoIlJlbW92aW5nIHN0YWxl IGxvY2sgJXMgKHBpZCAlZCB0ZXJtaW5hdGVkKVxuIiwgZiwgcGlkKTsKLQkgICAgcHJpdl9vbigp OwotCSAgICB4ID0gdW5saW5rKGYpOwkJLyogUmVtb3ZlIHRoZSBsb2NrZmlsZS4gKi8KLQkgICAg cHJpdl9vZmYoKTsKLQkgICAgZGVidWcoRjExMSwidHRjaGtwaWQgdW5saW5rIixmLHgpOwotCSAg ICBpZiAoeCA+IC0xKQotCSAgICAgIHJldHVybigwKTsJCS8qIERldmljZSBpcyBub3QgbG9ja2Vk IGFmdGVyIGFsbCAqLwotCSAgICBlbHNlIGlmICghYmFja2dyZCkKLQkgICAgICBwZXJyb3IoZik7 Ci0JfQotCXJldHVybigxKTsKLSAgICB9Ci0gICAgcmV0dXJuKDEpOwkJCQkvKiBGYWlsdXJlIHRv IHJlYWQgcGlkICovCi19Ci0KLSNpZmRlZiBIUFVYCi0KLS8qIEFsaWFzZXMgKGRpZmZlcmVudCBk cml2ZXJzKSBmb3IgSFAtVVggZGlhbG91dCBkZXZpY2VzOiAqLwotCi1zdGF0aWMgY2hhciAqZGV2 cHJlZml4W10gPSB7ICJ0dHkiLCAidHR5ZCIsICJjdWwiLCAiY3VhIiwgImN1YWQiLCAiY3VsZCIs ICIiIH07Ci1zdGF0aWMgaW50IHR0eWRleGlzdHMgPSAwOwotCi0jZW5kaWYgLyogSFBVWCAqLwot Ci0vKiAgVCBUIFIgUCBJIEQgIC0tICBSZWFkIHBpZCBmcm9tIGxvY2tmaWxlICJuYW1lIiAqLwot Ci1zdGF0aWMgaW50Ci10dHJwaWQobmFtZSkgY2hhciAqbmFtZTsgewotICAgIGxvbmcgbGVuOwot ICAgIGludCB4LCBmZCwgcGlkOwotICAgIHNob3J0IHNwaWQ7Ci0gICAgY2hhciBidWZbMzJdOwot Ci0gICAgZGVidWcoRjExMCwidHRycGlkIixuYW1lLDApOwotICAgIGlmICghbmFtZSkgcmV0dXJu KC0xKTsKLSAgICBpZiAoISpuYW1lKSByZXR1cm4oLTEpOwotICAgIHByaXZfb24oKTsKLSAgICBs ZW4gPSB6Y2hraShuYW1lKTsJCQkvKiBHZXQgZmlsZSBsZW5ndGggKi8KLSAgICBwcml2X29mZigp OwotICAgIGRlYnVnKEYxMDEsInR0cnBpZCB6Y2hraSIsIiIsbGVuKTsKLSAgICBpZiAobGVuIDwg MCkKLSAgICAgIHJldHVybigtMSk7Ci0gICAgaWYgKGxlbiA+IDMxKQotICAgICAgcmV0dXJuKC0x KTsKLSAgICBwcml2X29uKCk7Ci0gICAgZmQgPSBvcGVuKG5hbWUsT19SRE9OTFkpOwkJLyogVHJ5 IHRvIG9wZW4gbG9ja2ZpbGUuICovCi0gICAgcHJpdl9vZmYoKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0 dHJwaWQgZmQiLCIiLGZkKTsKLSAgICBpZiAoZmQgPD0gMCkKLSAgICAgIHJldHVybigtMSk7Ci0v KgotICBIZXJlIHdlIHRyeSB0byBiZSBmbGV4aWJsZSBhbmQgYWxsb3cgZm9yIGFsbCBkaWZmZXJl bnQgYmluYXJ5IGFuZCBzdHJpbmcKLSAgZm9ybWF0cyBhdCBydW50aW1lLCByYXRoZXIgdGhhbiBh IHNwZWNpZmljIGZvcm1hdCBmb3IgZWFjaCBjb25maWd1cmF0aW9uCi0gIGhhcmR3aXJlZCBhdCBj b21waWxlIHRpbWUuCi0qLwotICAgIHBpZCA9IC0xOwotI2lmbmRlZiBDT0hFUkVOVAotLyoKLSAg Q09IRVJFTlQgdXNlcyBhIHN0cmluZyBQSUQgYnV0IHdpdGhvdXQgbGVhZGluZyBzcGFjZXMgb3Ig MCdzLCBzbyB0aGVyZSBpcwotICBubyB3YXkgdG8gdGVsbCBmcm9tIHRoZSBmaWxlJ3MgbGVuZ3Ro IHdoZXRoZXIgaXQgY29udGFpbnMgYSBzdHJpbmcgb3IgYmluYXJ5Ci0gIHBpZC4gIFNvIGZvciBD T0hFUkVOVCBvbmx5LCB3ZSBvbmx5IGFsbG93IHN0cmluZyBwaWRzLiAgRm9yIGFsbCBvdGhlcnMs IHdlCi0gIGRlY2lkZSBiYXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUgbG9ja2ZpbGUuCi0qLwotICAg IGlmIChsZW4gPiA0KSB7CQkJLyogSWYgZmlsZSA+IDQgYnl0ZXMgaXQncyBhIHN0cmluZyAqLwot I2VuZGlmIC8qIENPSEVSRU5UICovCi0JeCA9IHJlYWQoZmQsYnVmLChpbnQpbGVuKTsKLQlkZWJ1 ZyhGMTExLCJ0dHJwaWQgc3RyaW5nIHJlYWQiLGJ1Zix4KTsKLQlpZiAoeCA8IDApIHsKLQkgICAg cGlkID0gLTE7Ci0JfSBlbHNlIHsKLQkgICAgYnVmWzMxXSA9ICdcMCc7Ci0JICAgIHggPSBzc2Nh bmYoYnVmLCIlZCIsJnBpZCk7CS8qIEdldCB0aGUgaW50ZWdlciBwaWQgZnJvbSBpdC4gKi8KLQl9 Ci0jaWZuZGVmIENPSEVSRU5UCi0gICAgfSBlbHNlIGlmIChsZW4gPT0gNCkgewkJLyogNCBieXRl cyBzbyBiaW5hcnkgKi8KLQl4ID0gcmVhZChmZCwgKGNoYXIgKikmcGlkLCA0KTsJLyogUmVhZCB0 aGUgYnl0ZXMgaW50byBhbiBpbnQgKi8KLQlkZWJ1ZyhGMTAxLCJ0dHJwaWQgaW50ZWdlciByZWFk IiwiIix4KTsKLQlpZiAoeCA8IDQpCi0JICBwaWQgPSAtMTsKLSAgICB9IGVsc2UgaWYgKGxlbiA9 PSAyKSB7CQkvKiAyIGJ5dGVzIGJpbmFyeSAqLwotCXggPSByZWFkKGZkLCAoY2hhciAqKSZzcGlk LCAyKTsJLyogUmVhZCB0aGUgYnl0ZXMgaW50byBhIHNob3J0ICovCi0JZGVidWcoRjEwMSwidHRy cGlkIHNob3J0IHJlYWQiLCIiLHgpOwotCWlmICh4IDwgMikKLQkgIHBpZCA9IC0xOwotCWVsc2UK LQkgIHBpZCA9IHNwaWQ7Ci0gICAgfSBlbHNlCi0gICAgICBwaWQgPSAtMTsKLSNlbmRpZiAvKiBD T0hFUkVOVCAqLwotICAgIGNsb3NlKGZkKTsJCQkJLyogQ2xvc2UgdGhlIGxvY2tmaWxlICovCi0g ICAgZGVidWcoRjEwMSwidHRycGlkIHBpZCIsIiIscGlkKTsKLSAgICByZXR1cm4ocGlkKTsKLX0K LSNlbmRpZiAvKiBOT1VVQ1AgKi8KLQotLyogIFQgVCBMIE8gQyBLICAqLwotCi0vKgotICBUaGlz IGZ1bmN0aW9uIGF0dGVtcHRzIHRvIGNvb3JkaW5hdGUgdXNlIG9mIHRoZSBjb21tdW5pY2F0aW9u IGRldmljZSB3aXRoCi0gIG90aGVyIGNvcGllcyBvZiBLZXJtaXQgYW5kIGFueSBvdGhlciBwcm9n cmFtIHRoYXQgZm9sbG93cyB0aGUgVVVDUAotICBkZXZpY2UtbG9ja2luZyBjb252ZW50aW9ucywg d2hpY2gsIHVuZm9ydHVuYXRlbHksIHZhcnkgYW1vbmcgZGlmZmVyZW50IFVOSVgKLSAgaW1wbGVt ZW50YXRpb25zLiAgVGhlIGlkZWEgaXMgdG8gbG9vayBmb3IgYSBmaWxlIG9mIGEgY2VydGFpbiBu YW1lLCB0aGUKLSAgImxvY2tmaWxlIiwgaW4gYSBjZXJ0YWluIGRpcmVjdG9yeS4gIElmIHN1Y2gg YSBmaWxlIGlzIGZvdW5kLCB0aGVuIHRoZSBsaW5lCi0gIGlzIHByZXN1bWVkIHRvIGJlIGluIHVz ZSwgYW5kIEtlcm1pdCBzaG91bGQgbm90IHVzZSBpdC4gIElmIG5vIHN1Y2ggZmlsZSBpcwotICBm b3VuZCwgS2VybWl0IGF0dGVtcHRzIHRvIGNyZWF0ZSBvbmUgc28gdGhhdCBvdGhlciBwcm9ncmFt cyB3aWxsIG5vdCB1c2UgdGhlCi0gIHNhbWUgbGluZSBhdCB0aGUgc2FtZSB0aW1lLiAgQmVjYXVz ZSB0aGUgbG9ja2ZpbGUgYW5kL29yIHRoZSBkaXJlY3RvcnkgaXQncwotICBpbiBtaWdodCBsYWNr IHdyaXRlIHBlcm1pc3Npb24gZm9yIHRoZSBwZXJzb24gcnVubmluZyBLZXJtaXQsIEtlcm1pdCBj b3VsZAotICBmaW5kIGl0c2VsZiBydW5uaW5nIHNldHVpZCB0byB1dWNwIG9yIG90aGVyIHVzZXIg dGhhdCBkb2VzIGhhdmUgdGhlCi0gIG5lY2Vzc2FyeSBwZXJtaXNzaW9ucy4gIEF0IHN0YXJ0dXAs IEtlcm1pdCBoYXMgY2hhbmdlZCBpdHMgZWZmZWN0aXZlIHVpZCB0bwotICB0aGUgdXNlcidzIHJl YWwgdWlkLCBhbmQgc28gdHRsb2NrKCkgbXVzdCBzd2l0Y2ggYmFjayB0byB0aGUgb3JpZ2luYWwK LSAgZWZmZWN0aXZlIHVpZCBpbiBvcmRlciB0byBjcmVhdGUgdGhlIGxvY2tmaWxlLCBhbmQgdGhl biBiYWNrIGFnYWluIHRvIHRoZQotICByZWFsIHVpZCB0byBwcmV2ZW50IHVuYXV0aG9yaXplZCBh Y2Nlc3MgdG8gb3RoZXIgZGlyZWN0b3JpZXMgb3IgZmlsZXMgb3duZWQKLSAgYnkgdGhlIHVzZXIg dGhlIHByb2dyYW0gaXMgc2V0dWlkIHRvLgotCi0gIFRvdGFsbHkgcmV3cml0dGVuIGZvciBDLUtl cm1pdCA1QSB0byBlbGltaW5hdGUgd2luZG93cyBvZiB2dWxuZXJhYmlsaXR5LAotICBiYXNlZCBv biBzdWdnZXN0aW9ucyBmcm9tIFdhcnJlbiBUdWNrZXIuICBDYWxsIHdpdGggcG9pbnRlciB0byBu YW1lIG9mCi0gIHR0eSBkZXZpY2UuICBSZXR1cm5zOgotCi0gICAwIG9uIHN1Y2Nlc3MKLSAgLTEg b24gZmFpbHVyZQotCi0gIE5vdGU6IE9uY2UgcHJpdmlsZWdlcyBhcmUgdHVybmVkIG9uIHVzaW5n IHByaXZfb24oKSwgaXQgaXMgZXNzZW50aWFsIHRoYXQKLSAgdGhleSBhcmUgdHVybmVkIG9mZiBh Z2FpbiBiZWZvcmUgdGhpcyBmdW5jdGlvbiByZXR1cm5zLgotKi8KLSNpZmRlZiBTVlI0CQkJCS8q IExvY2tmaWxlIHVzZXMgZGV2aWNlIG51bWJlcnMuICovCi0vKgotICBBbHRob3VnaCBJIGNhbid0 IGZpbmQgdGhpcyBpbiB3cml0aW5nIGFueXdoZXJlIChlLmcuIGluIFNWSUQgZm9yIFNWUjQpLAot ICBpdCBpcyB0aGUgYmVoYXZpb3Igb2YgdGhlICJyZWZlcmVuY2UgdmVyc2lvbiIgb2YgU1ZSNCwg aS5lLiB0aGUgSW50ZWwKLSAgcG9ydCBmcm9tIFVOSVggU3lzdGVtcyBMYWJvcmF0b3JpZXMsIHRo ZW4gY2FsbGVkIFVuaXZlbCBVbml4V2FyZSwKLSAgdGhlbiBjYWxsZWQgTm92ZWxsIFVuaXhXYXJl LCB0aGVuIGNhbGxlZCBTQ08gVW5peHdhcmUsIHRoZW4gY2FsbGVkIENhbGRlcmEKLSAgT3BlbiBV TklYLi4uICBJdCBhbHNvIG1ha2VzIG11Y2ggbW9yZSBzZW5zZSB0aGFuIGRldmljZS1uYW1lLWJh c2VkIGxvY2tmaWxlcwotICBzaW5jZSB0aGVyZSBjYW4gYmUgbXVsdGlwbGUgbmFtZXMgZm9yIHRo ZSBzYW1lIGRldmljZSwgc3ltbGlua3MsIGV0Yy4KLSovCi0jaWZuZGVmIE5PTEZERVZOTwotI2lm bmRlZiBMRkRFVk5PCQkJCS8qIERlZmluZSB0aGlzIGZvciBTVlI0ICovCi0jaWZuZGVmIEFJWFJT CQkJCS8qIEJ1dCBub3QgZm9yIFJTLzYwMDAgQUlYIDMuMiwgZXRjLiAqLwotI2lmbmRlZiBCU0Q0 NAkJCQkvKiBJZiBhbnlib2R5IGVsc2UgbmVlZHMgaXQuLi4gKi8KLSNpZm5kZWYgX18zODZCU0Rf XwotI2lmbmRlZiBfX0ZyZWVCU0RfXwotI2lmbmRlZiBIUFVYMTAKLSNpZm5kZWYgSVJJWDUxCQkJ CS8qIFNHSSBJUklYIDUuMSBvciBsYXRlciAqLwotI2lmbmRlZiBDS19TQ09WNQkJCS8qIFNDTyBP cGVuIFNlcnZlciA1LjAgKi8KLSNkZWZpbmUgTEZERVZOTwotI2VuZGlmIC8qIENLX1NDT1Y1ICov Ci0jZW5kaWYgLyogSVJJWDUxICovCi0jZW5kaWYgLyogSFBVWDEwICovCi0jZW5kaWYgLyogX19G cmVlQlNEX18gKi8KLSNlbmRpZiAvKiBfXzM4NkJTRF9fICovCi0jZW5kaWYgLyogQlNENDQgKi8K LSNlbmRpZiAvKiBBSVhSUyAqLwotI2VuZGlmIC8qIExGREVWTk8gKi8JCQkvKiAuLi4gZGVmaW5l IGl0IGhlcmUgb3Igb24gQ0MgKi8KLSNlbmRpZiAvKiBOT0xGREVWTk8gKi8KLSNlbmRpZiAvKiBT VlI0ICovCQkJLyogY29tbWFuZCBsaW5lLiAqLwotCi0jaWZkZWYgQ09IRVJFTlQKLSNkZWZpbmUg TEZERVZOTwotI2VuZGlmIC8qIENPSEVSRU5UICovCi0KLS8qCi0gIEZvciBwbGF0Zm9ybXMgd2hl cmUgdGhlIGxvY2tmaWxlIG5hbWUgaXMgbWFkZSBmcm9tIGRldmljZS9tYWpvci9taW5vcgotICBk ZXZpY2UgbnVtYmVyLCBhcyBpbiBTVlI0LiAgV2hpY2gsIGlmIHdlIG11c3QgaGF2ZSBsb2NrZmls ZXMgYXQgYWxsLCBpcwotICBieSBmYXIgdGhlIGJlc3QgZm9ybWF0LCBzaW5jZSBpdCBlbGltaW5h dGVzIGFsbCB0aGUgY29uZnVzaW9uIHRoYXQgc3RlbXMKLSAgZnJvbSBtdWx0aXBsZSBuYW1lcyAo b3IgZHJpdmVycykgZm9yIHRoZSBzYW1lIHBvcnQsIG5vdCB0byBtZW50aW9uCi0gIHN5bWxpbmtz LiAgSXQgbWlnaHQgZXZlbiBiZSBhIGdvb2QgaWRlYSB0byBzdGFydCB1c2luZyB0aGlzIGZvcm0g ZXZlbgotICBvbiBwbGF0Zm9ybXMgd2hlcmUgaXQncyBub3Qgc3VwcG9ydGVkLCBhbG9uZ3NpZGUg dGhlIG5vcm1hbCBmb3JtcyBmb3IgdGhvc2UKLSAgcGxhdGZvcm1zLCBpbiBvcmRlciB0byBnZXQg cGVvcGxlIHVzZWQgdG8gaXQuLi4KLSovCi0jaWZkZWYgTEZERVZOTwotI2lmbmRlZiBtYWpvcgkJ CQkvKiBJZiB3ZSBkaWRuJ3QgZmluZCBpdCAqLwotI2lmZGVmIFNWUjQJCQkJLyogdGhlbiBmb3Ig U3lzIFYgUjQgKi8KLSNpbmNsdWRlIDxzeXMvbWtkZXYuaD4JCQkvKiBsb29rIGhlcmUgKi8KLSNl bHNlCQkJCQkvKiBvciBmb3IgU3VuT1MgdmVyc2lvbnMgKi8KLSNpZmRlZiBTVU5PUzQJCQkJLyog Li4uICovCi0jaW5jbHVkZSA8c3lzL3N5c21hY3Jvcy5oPgkJLyogbG9vayBoZXJlICovCi0jZWxz ZQkJCQkJLyogT3RoZXJ3aXNlIHRha2UgYSBjaGFuY2U6ICovCi0jZGVmaW5lCW1ham9yKGRldikg KCAoaW50KSAoICgodW5zaWduZWQpKGRldikgPj4gOCkgJiAweGZmKSkKLSNkZWZpbmUJbWlub3Io ZGV2KSAoIChpbnQpICggKGRldikgJiAweGZmKSkKLSNlbmRpZiAvKiBTVU5PUzQgKi8KLSNlbmRp ZiAvKiBTVlI0ICovCi0jZW5kaWYgLyogbWFqb3IgKi8KLSNlbmRpZiAvKiBMRkRFVk5PICovCi0K LS8qIE5vIGFkdmlzb3J5IGxvY2tzIGlmIEZfVExPQ0sgYW5kIEZfVUxPQ0sgYXJlIG5vdCBkZWZp bmVkIGF0IHRoaXMgcG9pbnQgKi8KLQotI2lmZGVmIExPQ0tGCi0jaWZuZGVmIEZfVExPQ0sKLSN1 bmRlZiBMT0NLRgotI2lmbmRlZiBOT0xPQ0tGCi0jZGVmaW5lIE5PTE9DS0YKLSNlbmRpZiAvKiBO T0xPQ0tGICovCi0jZW5kaWYgLyogRl9UTE9DSyAqLwotI2VuZGlmIC8qIExPQ0tGICovCi0KLSNp ZmRlZiBMT0NLRgotI2lmbmRlZiBGX1VMT0NLCi0jdW5kZWYgTE9DS0YKLSNpZm5kZWYgTk9MT0NL RgotI2RlZmluZSBOT0xPQ0tGCi0jZW5kaWYgLyogTk9MT0NLRiAqLwotI2VuZGlmIC8qIEZfVUxP Q0sgKi8KLSNlbmRpZiAvKiBMT0NLRiAqLwotCi1zdGF0aWMgY2hhciBsaW5rdG9bREVWTkFNTEVO KzFdOwotc3RhdGljIGNoYXIgKiBsaW5rZGV2ID0gTlVMTDsKLQotI2lmbmRlZiBOT1VVQ1AKLSNp ZmRlZiBVU0VUVFlMT0NLCi0jaWZkZWYgTE9DS19ESVIKLWNoYXIgKiB1dWNwbG9ja2RpciA9IExP Q0tfRElSOwotI2Vsc2UKLWNoYXIgKiB1dWNwbG9ja2RpciA9ICIiOwotI2VuZGlmIC8qIExPQ0tf RElSICovCi0jZWxzZQotI2lmZGVmIExPQ0tfRElSCi1jaGFyICogdXVjcGxvY2tkaXIgPSBMT0NL X0RJUjsKLSNlbHNlCi1jaGFyICogdXVjcGxvY2tkaXIgPSAiIjsKLSNlbmRpZiAvKiBMT0NLX0RJ UiAqLwotI2VuZGlmIC8qIFVTRVRUWUxPQ0sgKi8KLSNlbHNlCi1jaGFyICogdXVjcGxvY2tkaXIg PSAiIjsKLSNlbmRpZiAvKiBOT1VVQ1AgKi8KLQotI2lmZGVmIFFOWAkJCQkvKiBPbmx5IGZvciBR Tlg0ICovCi1pbnQJCQkJCS8qIFZpc2libGUgdG8gb3V0c2lkZSB3b3JsZCAqLwotcW54b3BlbmNv dW50KCkgewkJCS8qIEdldCBRTlggZGV2aWNlIG9wZW4gY291bnQgKi8KLSAgICBzdHJ1Y3QgX2Rl dl9pbmZvX2VudHJ5IGluZm87Ci0gICAgaW50IHg7Ci0KLSAgICB4ID0gLTE7CQkJCS8qIFVua25v d24gKi8KLSAgICBpZiAodHR5ZmQgPiAtMSkgewotCWlmICghZGV2X2luZm8odHR5ZmQsICZpbmZv KSkgewotCSAgICBkZWJ1ZyhGMTAxLCJ0dGxvY2sgUU5YIG9wZW5fY291bnQiLCIiLGluZm8ub3Bl bl9jb3VudCk7Ci0JICAgIHggPSBpbmZvLm9wZW5fY291bnQ7Ci0JfQotICAgIH0KLSAgICByZXR1 cm4oeCk7Ci19Ci0jZW5kaWYgLyogUU5YICovCi0KLWNoYXIgKgotdHRnbGNrZGlyKCkgewkJCQkv KiBHZXQgTG9ja2ZpbGUgZGlyZWN0b3J5IG5hbWUgKi8KLSNpZmRlZiBfX09wZW5CU0RfXwotICAg IHJldHVybigiL3Zhci9zcG9vbC9sb2NrIik7Ci0jZWxzZSAvKiBfX09wZW5CU0RfXyAqLwotI2lm ZGVmIF9fRnJlZUJTRF9fCi0gICAgcmV0dXJuKCIvdmFyL3Nwb29sL2xvY2siKTsKLSNlbHNlICAv KiBfX0ZyZWVCU0RfXyAqLwotI2lmZGVmIExPQ0tfRElSCi0gICAgY2hhciAqIHMgPSBMT0NLX0RJ UjsKLSNlbmRpZiAvKiBMT0NLX0RJUiAqLwotI2lmZGVmIE5PVVVDUAotICAgIHJldHVybigiIik7 Ci0jZWxzZSAgLyogTk9VVUNQICovCi0jaWZkZWYgTE9DS19ESVIKLSAgICByZXR1cm4ocyk7Ci0j ZWxzZSAgLyogTE9DS19ESVIgKi8KLSAgICByZXR1cm4oIiIpOwotI2VuZGlmIC8qIExPQ0tfRElS ICovCi0jZW5kaWYgLyogTk9VVUNQICovCi0jZW5kaWYgLyogX19GcmVlQlNEX18gKi8KLSNlbmRp ZiAvKiBfX09wZW5CU0RfXyAqLwotfQotCi1zdGF0aWMgaW50Ci10dGxvY2sodHRkZXYpIGNoYXIg KnR0ZGV2OyB7Ci0KLSAgICBpbnQgeCwgbjsKLSAgICBpbnQgaXNsaW5rID0gMDsKLSNpZmRlZiBf X0ZyZWVCU0RfXwotICAgIGNoYXIgKmRldm5hbWU7Ci0jZW5kaWYJLyogX19GcmVlQlNEX18gKi8K LQotI2lmZGVmIE5PVVVDUAotICAgIGRlYnVnKEYxMDAsInR0bG9jayBOT1VVQ1AiLCIiLDApOwot ICAgIGNrc3RybmNweShmbGZuYW0sIk5PTE9DSyIsRkxGTkFNTCk7Ci0gICAgaGFzbG9jayA9IDE7 Ci0gICAgcmV0dXJuKDApOwotI2Vsc2UgLyogIU5PVVVDUCAqLwotCi0jaWZkZWYgVVNFVFRZTE9D SwotICAgIGhhc2xvY2sgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBsb2NrZWQg eWV0LiAqLwotICAgICpmbGZuYW0gPSAnXDAnOwkJCS8qIExvY2tmaWxlIG5hbWUgaXMgZW1wdHku ICovCi0jaWZkZWYgX19GcmVlQlNEX18KLSAgICBpZiAoKGRldm5hbWUgPSB4eGxhc3QodHRkZXYs Jy8nKSkgIT0gTlVMTCkKLSNpZmRlZiBGUkVFQlNEOAotICAgICAgY2tzdHJuY2F0KGxvY2tuYW1l LGRldm5hbWUrMSxERVZOQU1MRU4tY2tzdHJuY3B5KGxvY2tuYW1lLCJwdHMiLDQpKTsKLSNlbHNl Ci0gICAgICBja3N0cm5jcHkobG9ja25hbWUsZGV2bmFtZSsxLERFVk5BTUxFTik7Ci0jZW5kaWYJ LyogRlJFRUJTRDggKi8KLSNlbHNlCi0gICAgaWYgKCFzdHJuY21wKHR0ZGV2LCIvZGV2LyIsNSkg JiYgdHRkZXZbNV0pCi0gICAgICBja3N0cm5jcHkobG9ja25hbWUsdHRkZXYrNSxERVZOQU1MRU4p OwotI2VuZGlmCS8qIF9fRnJlZUJTRF9fICovCi0gICAgZWxzZQotICAgICAgY2tzdHJuY3B5KGxv Y2tuYW1lLHR0ZGV2LERFVk5BTUxFTik7Ci0vKgotICBUaGlzIG1pZ2h0IGJlIG92ZXJraWxsLCBi dXQgaXQncyBub3QgY2xlYXIgZnJvbSB0aGUgbWFuIHBhZ2VzIHdoZXRoZXIKLSAgdHR5bG9jaygp IGNhbiBiZSBjYWxsZWQgd2l0aG91dCBjYWxsaW5nIHR0eWxvY2tlZCgpIGZpcnN0LCBzaW5jZSB0 aGUgZG9jCi0gIHNheXMgdGhhdCB0dHlsb2NrZWQoKSByZW1vdmVzIGFueSBzdGFsZSBsb2NrZmls ZXMsIGJ1dCBpdCBkb2VzIG5vdCBzYXkgdGhpcwotICBhYm91dCB0dHlsb2NrKCkuICBBbHNvIHRo ZSBkb2NzIGRvbid0IHNheSB3aGF0IHR0eWxvY2tlZCgpIHJldHVybnMgaW4gdGhlCi0gIGNhc2Ug d2hlbiBpdCBmaW5kcyBhbmQgcmVtb3ZlcyBhIHN0YWxlIGxvY2tmaWxlLiAgU28gb25lIG9yIGJv dGggY2FsbHMgdG8KLSAgdG8gdHR5bG9ja2VkKCkgbWlnaHQgYmUgc3VwZXJmbHVvdXMsIGJ1dCB0 aGV5IHNob3VsZCBkbyBubyBoYXJtLiAgQWxzbyBJJ20KLSAgYXNzdW1pbmcgdGhhdCB3ZSBoYXZl IHRvIGRvIGFsbCB0aGUgc2FtZSBJRCBzd2FwcGluZywgZXRjLCB3aXRoIHRoZXNlCi0gIHJvdXRp bmVzIGFzIHdlIGRvIHdpdGhvdXQgdGhlbS4gIFRodXMgdGhlIHByaXZfb24vb2ZmKCkgc2FuZHdp Y2guCi0qLwotI2lmZGVmIFVTRV9VVV9MT0NLCi0gICAgcHJpdl9vbigpOwkJCQkvKiBUdXJuIG9u IHByaXZzICovCi0gICAgeCA9IHV1X2xvY2sobG9ja25hbWUpOwkJLyogVHJ5IHRvIHNldCB0aGUg bG9jayAqLwotICAgIHByaXZfb2ZmKCk7CQkJCS8qIFR1cm4gcHJpdnMgb2ZmICovCi0gICAgZGVi dWcoRjExMSwidHRsb2NrIHV1X2xvY2siLGxvY2tuYW1lLHgpOwotICAgIHN3aXRjaCAoeCkgewot ICAgICAgY2FzZSBVVV9MT0NLX0lOVVNFOgotCXJldHVybigtMik7Ci0gICAgICBjYXNlIFVVX0xP Q0tfT0s6Ci0jaWZkZWYgQlNENDQKLQlja21ha21zZyhmbGZuYW0sRkxGTkFNTCwiL3Zhci9zcG9v bC9sb2NrL0xDSy4uIixsb2NrbmFtZSxOVUxMLE5VTEwpOwotI2VuZGlmIC8qIEJTRDQ0ICovCi0J aGFzbG9jayA9IDE7Ci0JcmV0dXJuKDApOwotICAgICAgZGVmYXVsdDoKLQlyZXR1cm4oLTEpOwot ICAgIH0KLSNlbHNlICAvKiBVU0VfVVVfTE9DSyAqLwotICAgIHByaXZfb24oKTsJCQkJLyogVHVy biBvbiBwcml2cyAqLwotICAgIGlmICh0dHlsb2NrZWQobG9ja25hbWUpKSB7CQkvKiBUaGlzIHNo b3VsZCByZW1vdmUgYW55IHN0YWxlIGxvY2sgKi8KLQlpZiAodHR5bG9ja2VkKGxvY2tuYW1lKSkg ewkvKiBzbyBjaGVjayBhZ2Fpbi4gKi8KLQkgICAgcHJpdl9vZmYoKTsKLQkgICAgcmV0dXJuKC01 KTsJCQkvKiBTdGlsbCBsb2NrZWQsIGZhaWwuICovCi0JfQotICAgIH0KLSAgICB4ID0gdHR5bG9j ayhsb2NrbmFtZSk7CQkvKiBMb2NrIGl0LiAqLwotICAgIHByaXZfb2ZmKCk7CQkJCS8qIFR1cm4g b2ZmIHByaXZzICovCi0KLSAgICBkZWJ1ZyhGMTExLCJ0dGxvY2sgbG9ja25hbWUiLGxvY2tuYW1l LHgpOwotICAgIGlmICh4ID4gLTEpIHsKLQkvKgotCSAgV2UgZG9uJ3QgcmVhbGx5IGtub3cgdGhl IG5hbWUgb2YgdGhlIGxvY2tmaWxlLCBidXQKLQkgIHRoaXMgaXMgd2hhdCB0aGUgbWFuIHBhZ2Ug c2F5cyBpdCBpcy4gIEluIFVTRVRUWUxPQ0sKLSAgICAgICAgICBidWlsZHMsIGl0IGlzIHVzZWQg b25seSBmb3IgZGlzcGxheSBieSBTSE9XIENPTU0uCi0JKi8KLQlja21ha21zZyhmbGZuYW0sRkxG TkFNTCwiL2V0Yy9sb2Nrcy9MQ0suLiIsbG9ja25hbWUsTlVMTCxOVUxMKTsKLQloYXNsb2NrID0g MTsKLSAgICB9Ci0gICAgcmV0dXJuKHgpOwotI2VuZGlmIC8qIFVTRV9VVV9MT0NLICovCi0jZWxz ZSAgLyogU3lzdGVtcyB0aGF0IGRvbid0IGhhdmUgdHR5bG9jaygpLi4uICovCi0KLSNpZm5kZWYg SFBVWAotCi0gICAgaW50IGxvY2tmZDsJCQkJLyogRmlsZSBkZXNjcmlwdG9yIGZvciBsb2NrIGZp bGUuICovCi0gICAgUElEX1QgcGlkOwkJCQkvKiBQcm9jZXNzIGlkIG9mIHRoaXMgcHJvY2Vzcy4g Ki8KLSAgICBpbnQgdHJpZXM7CQkJCS8qIEhvdyBtYW55IHRpbWVzIHdlJ3ZlIHRyaWVkLi4uICov Ci0gICAgc3RydWN0IHN0YXQgZGV2YnVmOwkJCS8qIEZvciBkZXZpY2UgbnVtYmVycyAoU1ZSNCku ICovCi0KLSNpZmRlZiBQSURTVFJJTkcKLSAgICBjaGFyIHBpZF9zdHJbMzJdOwkJCS8qIE15IHBp ZCBpbiBzdHJpbmcgZm9ybWF0LiAqLwotI2VuZGlmIC8qIFBJRFNUUklORyAqLwotCi0gICAgY2hh ciAqZGV2aWNlLCAqZGV2bmFtZTsKLQotI2RlZmluZSBMRk5BTUwgMjU2CQkJLyogTWF4IGxlbmd0 aCBmb3IgbG9jayBmaWxlIG5hbWUuICovCi0gICAgY2hhciBsb2NrZmlsW0xGTkFNTF07CQkvKiBM b2NrIGZpbGUgbmFtZSAqLwotI2lmZGVmIFJUQUlYCi0gICAgY2hhciBsa2xvY2tmW0xGTkFNTF07 CQkvKiBOYW1lIGZvciBsaW5rIHRvIGxvY2sgZmlsZSAgKi8KLSNlbmRpZiAvKiBSVEFJWCAqLwot I2lmZGVmIENLU1lNTElOSwotICAgIGNoYXIgc3ltbG9ja1tMRk5BTUxdOwkJLyogTmFtZSBmb3Ig c3ltbGluayBsb2NrZmlsZSBuYW1lICovCi0jZW5kaWYgLyogQ0tTWU1MSU5LICovCi0gICAgY2hh ciB0bXBuYW1bTEZOQU1MKzMwXTsJCS8qIFRlbXBvcmFyeSBsb2NrZmlsZSBuYW1lLiAqLwotICAg IGNoYXIgKmxvY2tkaXIgPSBMT0NLX0RJUjsJCS8qIERlZmluZWQgbmVhciB0b3Agb2YgdGhpcyBm aWxlLCAqLwotCQkJCQkvKiBvciBvbiBjYyBjb21tYW5kIGxpbmUuICovCi0gICAgaGFzbG9jayA9 IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IGxvY2tlZCB5ZXQuICovCi0gICAgKmZs Zm5hbSA9ICdcMCc7CQkJLyogTG9ja2ZpbGUgbmFtZSBpcyBlbXB0eS4gKi8KLSAgICBsb2NrMlsw XSA9ICdcMCc7CQkJLyogQ2xlYXIgc2Vjb25kYXJ5IGxvY2tmaWxlIG5hbWUuICovCi0gICAgcGlk ID0gZ2V0cGlkKCk7CQkJLyogR2V0IGlkIG9mIHRoaXMgcHJvY2Vzcy4gKi8KLQotLyogIENvbnN0 cnVjdCBuYW1lIG9mIGxvY2tmaWxlIGFuZCB0ZW1wb3JhcnkgZmlsZSAqLwotCi0vKiAgZGV2aWNl ICA9IG5hbWUgb2YgdHR5IGRldmljZSB3aXRob3V0IHRoZSBwYXRoLCBlLmcuICJ0dHloOCIgKi8K LS8qICBsb2NrZmlsID0gbmFtZSBvZiBsb2NrIGZpbGUsIHdpdGhvdXQgcGF0aCwgZS5nLiAiTENL Li50dHloOCIgKi8KLQotICAgIGRldmljZSA9ICgoZGV2bmFtZSA9IHh4bGFzdCh0dGRldiwnLycp KSAhPSBOVUxMID8gZGV2bmFtZSsxIDogdHRkZXYpOwotCi0gICAgaWYgKHN0YXQodHRkZXYsJmRl dmJ1ZikgPCAwKQotICAgICAgcmV0dXJuKC0xKTsKLQotI2lmZGVmIENLU1lNTElOSwotICAgIGlz bGluayA9IDE7CQkJCS8qIEFzc3VtZSBpdCdzIGEgc3ltbGluayAqLwotICAgIGxpbmt0b1swXSA9 ICdcMCc7CQkJLyogQnV0IHdlIGRvbid0IGtub3cgdG8gd2hhdCAqLwotI2lmZGVmIENPTU1FTlQK LS8qCi0gIFRoaXMgaXMgdW5kZXBlbmRhYmxlLiAgSWYgaXQgd29ya2VkIGl0IHdvdWxkIHNhdmUg dGhlIHJlYWRsaW5rIGNhbGwgaWYKLSAgd2Uga25ldyB0aGUgZGV2aWNlIG5hbWUgd2FzIG5vdCBh IGxpbmsuCi0qLwotI2lmZGVmIFNfSVNMTksKLSAgICBpc2xpbmsgPSBTX0lTTE5LKGRldmJ1Zi5z dF9tb2RlKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dGxvY2sgc3RhdCBTX0lTTE5LIiwiIixpc2xpbmsp OwotI2VuZGlmIC8qIFNfSVNMTksgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgaWYgKGlz bGluaykgewotCW4gPSByZWFkbGluayh0dGRldixsaW5rdG8sREVWTkFNTEVOKTsgLyogU2VlIGlm IGl0J3MgYSBsaW5rICovCi0JZGVidWcoRjExMSwidHRsb2NrIHJlYWRsaW5rIix0dGRldixuKTsK LQlpZiAobiA+IC0xKQkJCS8qIEl0IGlzICovCi0JICBsaW5rdG9bbl0gPSAnXDAnOwotCWVsc2UJ CQkJLyogSXQncyBub3QgKi8KLQkgIGlzbGluayA9IDA7Ci0JZGVidWcoRjExMSwidHRsb2NrIGxp bmsiLGxpbmt0byxpc2xpbmspOwotICAgIH0KLSAgICBpZiAoaXNsaW5rKSB7Ci0JbGlua2RldiA9 IChkZXZuYW1lID0geHhsYXN0KGxpbmt0bywnLycpKSA/IGRldm5hbWUgKyAxIDogbGlua3RvOwot CWRlYnVnKEYxMTAsInR0bG9jayBsaW5rZGV2IixsaW5rZGV2LDApOwotICAgIH0KLSNlbmRpZiAv KiBDS1NZTUxJTksgKi8KLQotLyoKLSAgT24gU0NPIHBsYXRmb3JtcywgaWYgd2UgZG9uJ3QgaGF2 ZSBhIHN5bWxpbmssIHRoZW4gbGV0J3MgcHJldGVuZCB0aGUKLSAgbmFtZSBnaXZlbiBmb3IgdGhl IGRldmljZSBpcyBhIHN5bWxpbmssIGJlY2F1c2UgbGF0ZXIgd2Ugd2lsbCBjaGFuZ2UKLSAgdGhl IG5hbWUgaWYgaXQgY29udGFpbnMgYW55IHVwcGVyY2FzZSBjaGFyYWN0ZXJzLgotKi8KLSNpZmRl ZiBDS19TQ09WNQkJCQkvKiBTQ08gT3BlbiBTZXJ2ZXIgNS4wICovCi0gICAgaWYgKCFpc2xpbmsp IHsKLQlpc2xpbmsgPSAxOwotCWNrc3RybmNweShsaW5rdG8sdHRkZXYsREVWTkFNTEVOKTsKLQls aW5rZGV2ID0gKGRldm5hbWUgPSB4eGxhc3QobGlua3RvLCcvJykpID8gZGV2bmFtZSArIDEgOiBs aW5rdG87Ci0JZGVidWcoRjExMCwidHRsb2NrIGxpbmtkZXYiLGxpbmtkZXYsMCk7Ci0gICAgfQot I2Vsc2UKLSNpZmRlZiBNX1hFTklYCQkJCS8qIFNDTyBYZW5peCBvciBVTklYICovCi0gICAgaWYg KCFpc2xpbmspIHsKLQlpc2xpbmsgPSAxOwotCWNrc3RybmNweShsaW5rdG8sdHRkZXYsREVWTkFN TEVOKTsKLQlsaW5rZGV2ID0gKGRldm5hbWUgPSB4eGxhc3QobGlua3RvLCcvJykpID8gZGV2bmFt ZSArIDEgOiBsaW5rdG87Ci0JZGVidWcoRjExMCwidHRsb2NrIGxpbmtkZXYiLGxpbmtkZXYsMCk7 Ci0gICAgfQotI2VuZGlmIC8qIE1fWEVOSVggKi8KLSNlbmRpZiAvKiBDS19TQ09WNSAqLwotCi0j aWZkZWYgSVNJSUkJCQkJLyogSW50ZXJhY3RpdmUgU3lzdGVtIElJSSwgUEMvSVggKi8KLSAgICBj a3N0cm5jcHkobG9ja2ZpbCwgZGV2aWNlLCBERVZOQU1MRU4pOwotI2Vsc2UgIC8qIG5vdCBJU0lJ SSAqLwotI2lmZGVmIExGREVWTk8JCQkJLyogTG9ja2ZpbGVuYW1lIGhhcyBkZXZpY2UgbnVtYmVy cy4gKi8KLSNpZmRlZiBDT0hFUkVOVAotICAgIHNwcmludGYobG9ja2ZpbCwiTENLLi4lZC4lZCIs CS8qIFNBRkUgKi8KLQkgICAgbWFqb3IoZGV2YnVmLnN0X3JkZXYpLAkgICAvKiBtYWpvciBkZXZp Y2UgbnVtYmVyICovCi0JICAgIDB4MWYgJiBtaW5vcihkZXZidWYuc3RfcmRldikpOyAvKiBtaW5v ciBkZXZpY2UgbnVtYmVyICovCi0jZWxzZQotICAgIC8qIE5vdGU6ICVkIGNoYW5nZWQgdG8gJXUg aW4gOC4wIC0tICV1IGlzIHBhcnQgb2YgU1ZJRCBmb3IgU1ZSNCAqLwotICAgIC8qIExvY2tmaWxl IG5hbWUgZm9ybWF0IHZlcmlmaWVkIHRvIGFncmVlIHdpdGggU29sYXJpcyBjdSwgRGVjIDIwMDEg Ki8KLSAgICBzcHJpbnRmKGxvY2tmaWwsIkxLLiUwM3UuJTAzdS4lMDN1IiwgLyogU0FGRSAqLwot CSAgICBtYWpvcihkZXZidWYuc3RfZGV2KSwJLyogZGV2aWNlICovCi0JICAgIG1ham9yKGRldmJ1 Zi5zdF9yZGV2KSwJLyogbWFqb3IgZGV2aWNlIG51bWJlciAqLwotCSAgICBtaW5vcihkZXZidWYu c3RfcmRldikpOwkvKiBtaW5vciBkZXZpY2UgbnVtYmVyICovCi0jZW5kaWYgLyogQ09IRVJFTlQg Ki8KLSNlbHNlICAvKiBOb3QgTEZERVZOTyAqLwotI2lmZGVmIFBUWAkJCQkvKiBEeW5peCBQVFgg Ki8KLSAgICBpZiAoKGRldmljZSAhPSAmdHRkZXZbNV0pICYmIChzdHJuY21wKHR0ZGV2LCIvZGV2 LyIsNSkgPT0gMCkpIHsKLQlpZiAoKGludClzdHJsZW4oZGV2aWNlKSArIDggPCBMRk5BTUwpCi0J ICBzcHJpbnRmKGxvY2tmaWwsIkxDSy4uJS4zcyVzIiwgJnR0ZGV2WzVdLCBkZXZpY2UpOwotCWVs c2UKLQkgIGNrc3RybmNweShsb2NrZmlsLCJMT0NLRklMRV9OQU1FX1RPT19MT05HIixMRk5BTUwp OwotICAgIH0gZWxzZQotI2VuZGlmIC8qIFBUWCAqLwotICAgICAgaWYgKChpbnQpc3RybGVuKGRl dmljZSkgKyA1IDwgTEZOQU1MKQotCXNwcmludGYobG9ja2ZpbCwiTENLLi4lcyIsIGRldmljZSk7 Ci0gICAgICBlbHNlCi0JY2tzdHJuY3B5KGxvY2tmaWwsIkxPQ0tGSUxFX05BTUVfVE9PX0xPTkci LExGTkFNTCk7Ci0jaWZkZWYgUlRBSVgKLSAgICBja3N0cm5jcHkobGtsb2NrZixkZXZpY2UsREVW TkFNTEVOKTsKLSNlbmRpZiAvKiBSVEFJWCAqLwotI2lmZGVmIENLU1lNTElOSwotICAgIHN5bWxv Y2tbMF0gPSAnXDAnOwotICAgIGlmIChpc2xpbmspCi0gICAgICBja21ha21zZyhzeW1sb2NrLExG TkFNTCwgIkxDSy4uIiwgbGlua2RldiwgTlVMTCwgTlVMTCk7Ci0jZW5kaWYgLyogQ0tTWU1MSU5L ICovCi0jZW5kaWYgLyogTEZERVZOTyAqLwotI2VuZGlmIC8qIElTSUlJICovCi0KLSNpZmRlZiBD S19TQ09WNQkJCQkvKiBTQ08gT3BlbiBTZXJ2ZXIgNS4wICovCi0gICAgewotCS8qIExvd2VyY2Fz ZSB0aGUgZW50aXJlIGZpbGVuYW1lLiAqLwotICAgICAgICAvKiBTQ08gc2F5cyB3ZSBtdXN0IGRv IHRoaXMgaW4gVjUuMCBhbmQgbGF0ZXIuICovCi0JLyogQlVULi4uIHdhdGNoIG91dCBmb3IgZGV2 aWNlcyAtLSBsaWtlIERpZ2lib2FyZCBQb3J0c2VydmVyICovCi0JLyogVGhhdCBjYW4gaGF2ZSBo dW5kcmVkcyBvZiBwb3J0cy4uLiAqLwotCWNoYXIgKnAgPSAoY2hhciAqKShsb2NrZmlsICsgNSk7 Ci0Jd2hpbGUgKCpwKSB7IGlmIChpc3VwcGVyKCpwKSkgKnAgPSAoY2hhcikgdG9sb3dlcigqcCk7 IHArKzsgfQotICAgIH0KLSNpZmRlZiBDS1NZTUxJTksKLSAgICBpZiAoaXNsaW5rKSB7CQkJLyog SWYgbm8gY2hhbmdlICovCi0JaWYgKCFzdHJjbXAobG9ja2ZpbCxzeW1sb2NrKSkgewkvKiB0aGVu IG5vIHNlY29uZCBsb2NrZmlsZSBuZWVkZWQgKi8KLQkgICAgaXNsaW5rID0gMDsKLQkgICAgc3lt bG9ja1swXSA9ICdcMCc7Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBDS1NZTUxJTksgKi8KLSNlbHNl Ci0jaWZkZWYgTV9YRU5JWAkJCQkvKiBTQ08gWGVuaXggb3IgVU5JWCAqLwotICAgIHsKLQlpbnQg eDsgY2hhciBjOwotCXggPSAoaW50KXN0cmxlbihsb2NrZmlsKSAtIDE7CS8qIEdldCBsYXN0IGxl dHRlciBvZiBkZXZpY2UgbmFtZS4gKi8KLQlpZiAoeCA+IDApIHsJCQkvKiBJZiBpdCdzIHVwcGVy Y2FzZSwgbG93ZXIgaXQuICovCi0JICAgIGMgPSBsb2NrZmlsW3hdOwotCSAgICBpZiAoYyA+PSAn QScgJiYgYyA8PSAnWicpIGxvY2tmaWxbeF0gKz0gKCdhJyAtICdBJyk7Ci0JfQotICAgIH0KLSNp ZmRlZiBDS1NZTUxJTksKLSAgICBpZiAoaXNsaW5rKSB7Ci0JaWYgKCFzdHJjbXAobG9ja2ZpbCxz eW1sb2NrKSkgewkvKiBObyBjaGFuZ2UgKi8KLQkgICAgaXNsaW5rID0gMDsJCQkvKiBzbyBubyBz ZWNvbmQgbG9ja2ZpbGUgKi8KLQkgICAgc3ltbG9ja1swXSA9ICdcMCc7Ci0JfQotICAgIH0KLSNl bmRpZiAvKiBDS1NZTUxJTksgKi8KLSNlbmRpZiAvKiBNX1hFTklYICovCi0jZW5kaWYgLyogQ0tf U0NPVjUgKi8KLQotLyogIGZsZm5hbSA9IGZ1bGwgbG9ja2ZpbGUgcGF0aG5hbWUsIGUuZy4gIi91 c3Ivc3Bvb2wvdXVjcC9MQ0suLnR0eWg4IiAqLwotLyogIHRtcG5hbSA9IHRlbXBvcmFyeSB1bmlx dWUsIGUuZy4gIi91c3Ivc3Bvb2wvdXVjcC9MVE1QLi5waWQiICovCi0KLSAgICBja21ha21zZyhm bGZuYW0sTEZOQU1MLGxvY2tkaXIsIi8iLGxvY2tmaWwsTlVMTCk7Ci0KLSNpZmRlZiBSVEFJWAot ICAgIGNrbWFrbXNnKGxrZmxmbixGTEZOQU1MLGxvY2tkaXIsIi8iLGxrbG9ja2YsTlVMTCk7Ci0j ZW5kaWYgLyogUlRBSVggKi8KLQotI2lmbmRlZiBMRkRFVk5PCi0jaWZkZWYgQ0tTWU1MSU5LCi0g ICAgLyogSWYgaXQncyBhIGxpbmsgdGhlbiBhbHNvIG1ha2UgYSBsb2NrZmlsZSBmb3IgdGhlIHJl YWwgbmFtZSAqLwotICAgIGRlYnVnKEYxMTEsInR0bG9jayBsaW5rIHN5bWxvY2siLHN5bWxvY2ss aXNsaW5rKTsKLSAgICBpZiAoaXNsaW5rICYmIHN5bWxvY2tbMF0pIHsKLQkvKiBCdXQgb25seSBp ZiB0aGUgbG9ja2ZpbGUgbmFtZXMgd291bGQgYmUgZGlmZmVyZW50LiAqLwotCS8qIFdBUk5JTkc6 IFRoZXkgd29uJ3QgYmUsIGUuZy4gZm9yIC9kZXYvdHR5ZDIgPT4gL2h3L3R0eXMvdHR5ZDIgKi8K LQlja21ha21zZyhsb2NrMixGTEZOQU1MLGxvY2tkaXIsIi8iLHN5bWxvY2ssTlVMTCk7Ci0JZGVi dWcoRjExMCwidHRsb2NrIGxvY2syIixsb2NrMiwwKTsKLQlpZiAoIXN0cmNtcChsb2NrMixmbGZu YW0pKSB7CS8qIEFyZSBsb2NrZmlsZSBuYW1lcyB0aGUgc2FtZT8gKi8KLQkgICAgZGVidWcoRjEw MCwidHRsb2NrIGxvY2syIGNsZWFyZWQiLCIiLDApOwotCSAgICBsb2NrMlswXSA9ICdcMCc7CQkv KiBDbGVhciBzZWNvbmRhcnkgbG9ja2ZpbGUgbmFtZS4gKi8KLQl9Ci0gICAgfQotI2VuZGlmIC8q IENLU1lNTElOSyAqLwotI2VuZGlmIC8qIExGREVWTk8gKi8KLQotICAgIHNwcmludGYodG1wbmFt LCIlcy9MVE1QLiUwNWQiLGxvY2tkaXIsKGludCkgcGlkKTsgLyogc2FmZSAqLwotICAgIGRlYnVn KEYxMTAsInR0bG9jayBmbGZuYW0iLGZsZm5hbSwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJ0dGxvY2sg dG1wbmFtIix0bXBuYW0sMCk7Ci0KLSAgICBwcml2X29uKCk7CQkJCS8qIFR1cm4gb24gcHJpdmls ZWdlcyBpZiBwb3NzaWJsZS4gKi8KLSAgICBsb2NrZmQgPSBjcmVhdCh0bXBuYW0sIDA0NDQpOwkv KiBUcnkgdG8gY3JlYXRlIHRlbXAgbG9jayBmaWxlLiAqLwotICAgIGlmIChsb2NrZmQgPCAwKSB7 CQkJLyogQ3JlYXRlIGZhaWxlZC4gKi8KLQlkZWJ1ZyhGMTExLCJ0dGxvY2sgY3JlYXQgZmFpbGVk Iix0bXBuYW0sZXJybm8pOwotCWlmIChlcnJubyA9PSBFTk9FTlQpIHsKLQkgICAgcGVycm9yKGxv Y2tkaXIpOwotCSAgICBwcmludGYoIlVVQ1Agbm90IGluc3RhbGxlZCBvciBLZXJtaXQgbWlzY29u ZmlndXJlZFxuIik7Ci0JfSBlbHNlIHsKLQkgICAgaWYgKCFxdWlldCkKLQkgICAgICBwZXJyb3Io bG9ja2Rpcik7Ci0JICAgIHVubGluayh0bXBuYW0pOwkJLyogR2V0IHJpZCBvZiB0aGUgdGVtcG9y YXJ5IGZpbGUuICovCi0JfQotCXByaXZfb2ZmKCk7CQkJLyogVHVybiBvZmYgcHJpdmlsZWdlcyEh ISAqLwotCXJldHVybigtMSk7CQkJLyogUmV0dXJuIGZhaWx1cmUgY29kZS4gKi8KLSAgICB9Ci0v KiBOb3cgd3JpdGUgdGhlIHBpZCBpbnRvIHRoZSB0ZW1wIGxvY2tmaWxlIGluIHRoZSBhcHByb3By aWF0ZSBmb3JtYXQgKi8KLQotI2lmZGVmIFBJRFNUUklORwkJCS8qIEZvciBIb25leSBEYW5CZXIg VVVDUCwgKi8KLSAgICBzcHJpbnRmKAkJCQkvKiB3cml0ZSBQSUQgYXMgZGVjaW1hbCBzdHJpbmcg Ki8KLQkgICAgcGlkX3N0ciwKLSNpZmRlZiBMSU5VWEZTU1RORAkJCS8qIFRoZSAiTGludXggRmls ZSBTeXN0ZW0gU3RhbmRhcmQiICovCi0jaWZkZWYgRlNTVE5EMTAJCQkJLyogVmVyc2lvbiAxLjAg Y2FsbHMgZm9yICovCi0JICAgICIlMDEwZFxuIiwJCQkvKiBsZWFkaW5nIHplcm9zICovCi0jZWxz ZQkJCQkJLyogd2hpbGUgdmVyc2lvbiAxLjIgY2FsbHMgZm9yICovCi0JICAgICIlMTBkXG4iLAkJ CS8qIGxlYWRpbmcgc3BhY2VzICovCi0jZW5kaWYgLyogRlNTVE5EMTAgKi8KLSNlbHNlCi0jaWZk ZWYgQ09IRVJFTlQKLQkgICAgIiVkXG4iLAkJCS8qIHdpdGggbGVhZGluZyBub3RoaW5nICovCi0j ZWxzZQotCSAgICAiJTEwZFxuIiwJCQkvKiB3aXRoIGxlYWRpbmcgYmxhbmtzICovCi0jZW5kaWYg LyogQ09IRVJFTlQgKi8KLSNlbmRpZiAvKiBMSU5VWEZTU1RORCAqLwotCSAgICAoaW50KSBwaWQK LQkgICAgKTsJCQkJLyogc2FmZSAqLwotICAgIHdyaXRlKGxvY2tmZCwgcGlkX3N0ciwgMTEpOwot ICAgIGRlYnVnKEYxMTEsInR0bG9jayBoZGIgcGlkIHN0cmluZyIscGlkX3N0ciwoaW50KSBwaWQp OwotCi0jZWxzZSAvKiBOb3QgUElEU1RSSU5HLCB1c2UgaW50ZWdlciBQSUQgKi8KLQotICAgIHdy aXRlKGxvY2tmZCwgKGNoYXIgKikmcGlkLCBzaXplb2YocGlkKSApOwotICAgIGRlYnVnKEYxMDEs InR0bG9jayBwaWQiLCIiLChpbnQpIHBpZCk7Ci0KLSNlbmRpZiAvKiBQSURTVFJJTkcgKi8KLQot LyogTm93IHRyeSB0byByZW5hbWUgdGhlIHRlbXAgZmlsZSB0byB0aGUgcmVhbCBsb2NrIGZpbGUg bmFtZS4gKi8KLS8qIFRoaXMgd2lsbCBmYWlsIGlmIGEgbG9jayBmaWxlIG9mIHRoYXQgbmFtZSBh bHJlYWR5IGV4aXN0cy4gICovCi0KLSAgICBjbG9zZShsb2NrZmQpOwkJCS8qIENsb3NlIHRoZSB0 ZW1wIGxvY2tmaWxlLiAqLwotICAgIGNobW9kKHRtcG5hbSwwNDQ0KTsJCQkvKiBQZXJtaXNzaW9u IGZvciBhIHZhbGlkIGxvY2suICovCi0gICAgdHJpZXMgPSAwOwotICAgIHdoaWxlICghaGFzbG9j ayAmJiB0cmllcysrIDwgMikgewotCWhhc2xvY2sgPSAobGluayh0bXBuYW0sZmxmbmFtKSA9PSAw KTsgLyogQ3JlYXRlIGEgbGluayB0byBpdC4gKi8KLQlpZiAoaGFzbG9jaykgewkJCSAgICAgIC8q IElmIHdlIGdvdCB0aGUgbG9ja2ZpbGUgKi8KLSNpZmRlZiBSVEFJWAotCSAgICBsaW5rKGZsZm5h bSxsa2ZsZm4pOwotI2VuZGlmIC8qIFJUQUlYICovCi0jaWZkZWYgQ0tTWU1MSU5LCi0jaWZuZGVm IExGREVWTk8KLQkgICAgaWYgKGlzbGluayAmJiBsb2NrMlswXSkKLQkgICAgICBsaW5rKGZsZm5h bSxsb2NrMik7Ci0jZW5kaWYgLyogTEZERVZOTyAqLwotI2VuZGlmIC8qIENLU1lNTElOSyAqLwot Ci0jaWZkZWYgQ09NTUVOVAotLyogQ2FuJ3QgZG8gdGhpcyBhbnkgbW9yZSBiZWNhdXNlIGRldmlj ZSBpcyBub3Qgb3BlbiB5ZXQgc28gbm8gdHR5ZmQuICovCi0jaWZkZWYgTE9DS0YKLS8qCi0gIEFk dmlzb3J5IGZpbGUgbG9ja2luZyB3b3JrcyBvbiBTVlI0LCBzbyB3ZSB1c2UgaXQuICBJbiBmYWN0 LCBpdCBpcwotICBuZWNlc3NhcnkgaW4gc29tZSBjYXNlcywgZS5nLiB3aGVuIFNMSVAgaXMgaW52 b2x2ZWQuICBCdXQgaXQgc3RpbGwgZG9lc24ndAotICBzZWVtIHRvIHByZXZlbnQgbXVsdGlwbGUg dXNlcnMgYWNjZXNzaW5nIHRoZSBzYW1lIGRldmljZSBieSBkaWZmZXJlbnQgbmFtZXMuCi0qLwot ICAgICAgICAgICAgd2hpbGUgKGxvY2tmKHR0eWZkLCBGX1RMT0NLLCAwTCkgIT0gMCkgewotICAg ICAgICAgICAgICAgIGRlYnVnKEYxMTEsICJ0dGxvY2sgbG9ja2YgcmV0dXJucyBlcnJubyIsICIi LCBlcnJubyk7Ci0gICAgICAgICAgICAgICAgaWYgKCgrK3RyaWVzID49IDMpIHx8IChlcnJubyAh PSBFQUdBSU4pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHggPSB1bmxpbmsoZmxmbmFtKTsgLyog cmVtb3ZlIHRoZSBsb2NrZmlsZSAqLwotI2lmZGVmIFJUQUlYCi0JCSAgICB1bmxpbmsobGtmbGZu KTsJLyogQW5kIGFueSBsaW5rcyB0byBpdC4uLiAqLwotI2VuZGlmIC8qIFJUQUlYICovCi0jaWZk ZWYgQ0tTWU1MSU5LCi0jaWZuZGVmIExGREVWTk8KLQkJICAgIGlmIChpc2xpbmsgJiYgbG9jazJb MF0pCi0JCSAgICAgIHVubGluayhsb2NrMik7CS8qIGRpdHRvLi4uICovCi0jZW5kaWYgLyogTEZE RVZOTyAqLwotI2VuZGlmIC8qIENLU1lNTElOSyAqLwotICAgICAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTExLCJ0dGxvY2sgdW5saW5rIixmbGZuYW0seCk7Ci0gICAgICAgICAgICAgICAgICAgIGhh c2xvY2sgPSAwOwotCQkgICAgYnJlYWs7Ci0JCX0KLSAgICAgICAgICAgICAgICBzbGVlcCgyKTsK LQkgICAgfQotCSAgICBpZiAoaGFzbG9jaykJCS8qIElmIHdlIGdvdCBhbiBhZHZpc29yeSBsb2Nr ICovCi0jZW5kaWYgLyogTE9DS0YgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0JICAgICAgYnJl YWs7CQkJLyogV2UncmUgZG9uZS4gKi8KLQotCX0gZWxzZSB7CQkJLyogV2UgZGlkbid0IGNyZWF0 ZSBhIG5ldyBsb2NrZmlsZS4gKi8KLQkgICAgcHJpdl9vZmYoKTsKLQkgICAgaWYgKHR0Y2hrcGlk KGZsZm5hbSkpIHsJLyogQ2hlY2sgZXhpc3RpbmcgbG9ja2ZpbGUgKi8KLQkJcHJpdl9vbigpOwkJ LyogY2F1c2UgdHRjaGtwaWQgdHVybnMgcHJpdl9vZmYuLi4gKi8KLQkJdW5saW5rKHRtcG5hbSk7 CQkvKiBEZWxldGUgdGhlIHRlbXBmaWxlICovCi0JCWRlYnVnKEYxMDAsInR0bG9jayBmb3VuZCB0 dHkgbG9ja2VkIiwiIiwwKTsKLQkJcHJpdl9vZmYoKTsJCS8qIFR1cm4gb2ZmIHByaXZzICovCi0J CXJldHVybigtMik7CQkvKiBDb2RlIGZvciBkZXZpY2UgaXMgaW4gdXNlLiAqLwotCSAgICB9Ci0J ICAgIHByaXZfb24oKTsKLQl9Ci0gICAgfQotICAgIHVubGluayh0bXBuYW0pOwkJCS8qIFVubGlu ayAocmVtb3ZlKSB0aGUgdGVtcCBmaWxlLiAqLwotICAgIHByaXZfb2ZmKCk7CQkJCS8qIFR1cm4g b2ZmIHByaXZzICovCi0gICAgcmV0dXJuKGhhc2xvY2sgPyAwIDogLTEpOwkJLyogUmV0dXJuIGxp bmsncyByZXR1cm4gY29kZS4gKi8KLQotI2Vsc2UgLyogSFBVWCAqLwotCi0vKgotICBIUC1VWCBn ZXRzIGl0cyBvd24gY29weSBvZiB0aGlzIHJvdXRpbmUsIG1vZGVsZWQgYWZ0ZXIgdGhlIG9ic2Vy dmVkIGJlaGF2aW9yCi0gIG9mIHRoZSBIUC1VWCAnY3UnIHByb2dyYW0uICBIUC1VWCBzZXJpYWwg ZGV2aWNlIG5hbWVzIGNvbnNpc3Qgb2YgYSBiYXNlIG5hbWUKLSAgc3VjaCBhcyAidHR5IiwgInR0 eWQiLCAiY3VhIiwgImN1bCIsICJjdWFkIiwgb3IgImN1bGQiLCBmb2xsb3dlZCBieSBhIHVuaXQK LSAgZGVzaWduYXRvciB3aGljaCBpcyBhIHN0cmluZyBvZiBkaWdpdHMsIHBvc3NpYmx5IGNvbnRh aW5pbmcgYW4gaW1iZWRkZWQKLSAgbGV0dGVyICJwIi4gIEV4YW1wbGVzIChmb3IgYmFzZSBuYW1l ICJ0dHkiKToKLQotICAgICAvZGV2L3R0eTAsIC9kZXYvdHR5MDAsIGRldi90dHlkMDAsIC9kZXYv dHR5MHAwCi0KLSAgQWNjb3JkaW5nIHRvIHRoZSBIUC1VWCBVVUNQIG1hbnVhbCBvZiAxOTg4LCB0 aGUgIjBwMCIgbm90YXRpb24gaGFzIGJlZW4KLSAgdXNlZCBvbiBTZXJpZXMgODAwIHNpbmNlIEhQ LVVYIDIuMDAsIGFuZCB0aGUgIm5vbi1wIiBub3RhdGlvbiB3YXMgdXNlZAotICBvbiBvdGhlciBt b2RlbHMuICBJbiBIUC1VWCAxMC4wMCwgIjBwMCIgbm90YXRpb24gd2FzIGFkb3B0ZWQgZm9yIGFs bCBtb2RlbHMuCi0gIEhvd2V2ZXIsIHdlIG1ha2UgYW5kIGVuZm9yY2Ugbm8gc3VjaCBkaXN0aW5j dGlvbnM7IGVpdGhlciBub3RhdGlvbiBpcwotICBhY2NlcHRlZCBvbiBhbnkgbW9kZWwgb3IgSFAt VVggdmVyc2lvbiBhcyBhIHZhbGlkIHVuaXQgZGVzaWduYXRvci4KLQotICBJZiBhIHZhbGlkIHVu aXQgaXMgc3BlY2lmaWVkIChhcyBvcHBvc2VkIHRvIGEgZGVzaWduZXIgbmFtZSBvciBzeW1saW5r KSwgd2UKLSAgY2hlY2sgZm9yIGFsbCBhbGlhc2VzIG9mIHRoZSBnaXZlbiB1bml0IGFjY29yZGlu ZyB0byB0aGUgZGV2cHJlZml4W10gYXJyYXkuCi0gIElmIG5vIGxvY2tmaWxlcyBhcmUgZm91bmQg Zm9yIHRoZSBnaXZlbiB1bml0LCB3ZSBjYW4gaGF2ZSB0aGUgZGV2aWNlOyB3ZQotICBjcmVhdGUg YSBsb2NrZmlsZSBMQ0suLm5hbWUgaW4gdGhlIGxvY2tmaWxlIGRpcmVjdG9yeSBhcHByb3ByaWF0 ZSBmb3IgdGhlCi0gIEhQLVVYIHZlcnNpb24gKC92YXIvc3Bvb2wvbG9ja3MgZm9yIDEwLjAwIGFu ZCBsYXRlciwgL3Vzci9zcG9vbC91dWNwIGZvcgotICA5Lnh4IGFuZCBlYXJsaWVyKS4gIElmIGl0 IGlzIGEgImN1YSIgb3IgImN1bCIgZGV2aWNlLCBhIHNlY29uZCBsb2NrZmlsZSBpcwotICBjcmVh dGVkIHdpdGggdGhlICJ0dHlkIiBwcmVmaXguICBUaGlzIGlzIGV4YWN0bHkgd2hhdCBjdSBkb2Vz LgotCi0gIElmIHRoZSAic2V0IGxpbmUiIGRldmljZSBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgdW5p dCBkZXNpZ25hdG9yLCB0aGVuIGl0IGlzCi0gIHVzZWQgbGl0ZXJhbGx5IGFuZCBubyBzeW5vbXlt cyBhcmUgc2VhcmNoZWQgZm9yIGFuZCBvbmx5IG9uZSBsb2NrZmlsZSBpcwotICBjcmVhdGVkLgot Ci0gIC1mZGMsIE1hcmNoIDE5OTguCi0qLwotI2RlZmluZSBMRk5BTUwgODAJCQkvKiBNYXggbGVu Z3RoIGZvciBsb2NrIGZpbGUgbmFtZS4gKi8KLQotICAgIGludCBsb2NrZmQ7CQkJCS8qIEZpbGUg ZGVzY3JpcHRvciBmb3IgbG9jayBmaWxlLiAqLwotICAgIFBJRF9UIHBpZDsJCQkJLyogUHJvY2Vz cyBJRCBvZiB0aGlzIHByb2Nlc3MuICovCi0gICAgaW50IGZwaWQ7CQkJCS8qIHBpZCBmb3VuZCBp biBleGlzdGluZyBsb2NrZmlsZS4gKi8KLSAgICBpbnQgdHJpZXM7CQkJCS8qIEhvdyBtYW55IHRp bWVzIHdlJ3ZlIHRyaWVkLi4uICovCi0gICAgaW50IGksIGs7CQkJCS8qIFdvcmtlcnMgKi8KLQot ICAgIGNoYXIgKmRldmljZSwgKmRldm5hbWU7CQkvKiAiL2Rldi94eHgiLCAieHh4IiAqLwotICAg IGNoYXIgKnVuaXQsICpwOwkJCS8qIDxpbnN0YW5jZT5wPHBvcnQ+IHBhcnQgb2YgeHh4ICovCi0K LSAgICBjaGFyIGxvY2tmaWxbTEZOQU1MXTsJCS8qIExvY2tmaWxlIG5hbWUgKG5vIHBhdGgpICov Ci0gICAgY2hhciB0bXBuYW1bTEZOQU1MXTsJCS8qIFRlbXBvcmFyeSBsb2NrZmlsZSBuYW1lLiAq LwotCi0jaWZkZWYgSFBVWDEwCQkJCS8qIExvY2tmaWxlIGRpcmVjdG9yeSAqLwotICAgIGNoYXIg KmxvY2tkaXIgPSAiL3Zhci9zcG9vbC9sb2NrcyI7CS8qIEFsd2F5cyB0aGlzIGZvciAxMC4wMCBh bmQgaGlnaGVyICovCi0jZWxzZSAgLyogSFAtVVggOS54eCBhbmQgYmVsb3cgKi8KLSNpZmRlZiBM T0NLX0RJUgotICAgIGNoYXIgKmxvY2tkaXIgPSBMT0NLX0RJUjsJCS8qIERlZmluZWQgbmVhciB0 b3Agb2YgdGhpcyBmaWxlICovCi0jZWxzZQotICAgIGNoYXIgKmxvY2tkaXIgPSAiL3Vzci9zcG9v bC91dWNwIjsJLyogb3Igbm90Li4uICovCi0jZW5kaWYgLyogTE9DS19ESVIgKi8KLSNlbmRpZiAv KiBIUFVYMTAgKi8KLQotICAgIGhhc2xvY2sgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8q IE5vdCBsb2NrZWQgeWV0LiAqLwotICAgICpmbGZuYW0gPSAnXDAnOwkJCS8qIExvY2tmaWxlIG5h bWUgaXMgZW1wdHkuICovCi0gICAgbG9jazJbMF0gPSAnXDAnOwkJCS8qIFNlY29uZCBvbmUgdG9v LiAqLwotICAgIHBpZCA9IGdldHBpZCgpOwkJCS8qIEdldCBteSBwcm9jZXNzIElEICovCi0vKgot ICBDb25zdHJ1Y3QgbmFtZSBvZiBsb2NrZmlsZSBhbmQgdGVtcG9yYXJ5IGZpbGUuLi4KLSAgZGV2 aWNlICA9IG5hbWUgb2YgdHR5IGRldmljZSB3aXRob3V0IHRoZSBwYXRoLCBlLmcuICJ0dHkwcDAi Ci0gIGxvY2tmaWwgPSBuYW1lIG9mIGxvY2sgZmlsZSwgd2l0aG91dCBwYXRoLCBlLmcuICJMQ0su LnR0eTBwMCIKLSovCi0gICAgZGV2aWNlID0gKChkZXZuYW1lID0geHhsYXN0KHR0ZGV2LCcvJykp ICE9IE5VTEwgPyBkZXZuYW1lKzEgOiB0dGRldik7Ci0gICAgZGVidWcoRjExMCwiVFRMT0NLIGRl dmljZSIsZGV2aWNlLDApOwotICAgIGNrbWFrbXNnKGxvY2tmaWwsTEZOQU1MLCJMQ0suLiIsZGV2 aWNlLE5VTEwsTlVMTCk7Ci0KLSAgICBrID0gMDsJCQkJLyogQXNzdW1lIGRldmljZSBpcyBub3Qg bG9ja2VkICovCi0gICAgbiA9IDA7CQkJCS8qIERpZ2l0IGNvdW50ZXIgKi8KLSAgICB1bml0ID0g ZGV2aWNlOwkJCS8qIFVuaXQgPSA8aW5zdGFuY2U+cDxwb3J0PiAqLwotICAgIHdoaWxlICgqdW5p dCAmJiAhaXNkaWdpdCgqdW5pdCkpCS8qIFNlYXJjaCBmb3IgZGlnaXQuLi4gKi8KLSAgICAgIHVu aXQrKzsKLSAgICBwID0gdW5pdDsJCQkJLyogVmVyaWZ5IDxudW0+cDxudW0+IGZvcm1hdC4uLiAq LwotICAgIGRlYnVnKEYxMTAsIlRUTE9DSyB1bml0IDEiLHVuaXQsMCk7Ci0vKgotICBUaGUgdW5p dCBudW1iZXIgaXMgcmVjb2duaXplZCBhczoKLSAgKGEpIGFueSBzZXF1ZW5jZSBvZiBkaWdpdHMg dGhhdCBydW5zIHRvIHRoZSBlbmQgb2YgdGhlIHN0cmluZy4KLSAgKGIpIGFueSAoYSkgdGhhdCBp bmNsdWRlcyBvbmUgYW5kIG9ubHkgb25lIGxldHRlciAicCIsIHdpdGggYXQgbGVhc3QKLSAgICAg IG9uZSBkaWdpdCBiZWZvcmUgYW5kIGFmdGVyIGl0LgotKi8KLSAgICB3aGlsZSAoaXNkaWdpdCgq cCkpIHArKywgbisrOwkvKiBHZXQgYSBydW4gb2YgZGlnaXRzICovCi0gICAgaWYgKCpwICYmIG4g PiAwKSB7CQkJLyogSGF2ZSBhICJwIj8gKi8KLQlpZiAoKnAgPT0gJ3AnICYmIGlzZGlnaXQoKihw KzEpKSkgewotCSAgICBwKys7Ci0JICAgIG4gPSAwOwotCSAgICB3aGlsZSAoaXNkaWdpdCgqcCkp IHArKywgbisrOwotCX0KLSAgICB9Ci0gICAgaWYgKG4gPT0gMCB8fCAqcCkgdW5pdCA9ICIiOwot ICAgIGRlYnVnKEYxMTAsIlRUTE9DSyB1bml0IDIiLHVuaXQsMCk7Ci0KLSAgICBpZiAoKnVuaXQp IHsJCQkvKiBEZXZpY2UgbmFtZSBoYXMgdW5pdCBudW1iZXIuICovCi0JLyogVGhlIGZvbGxvd2lu ZyBsb29wIG5vdCBvbmx5IHNlYXJjaGVzIGZvciB0aGUgdmFyaW91cyBsb2NrZmlsZSAgICAqLwot CS8qIHN5bm9ueW1zLCBidXQgYWxzbyByZW1vdmVzIGFsbCAtLSBub3QganVzdCBvbmUgLS0gc3Rh bGUgbG9ja2ZpbGUgKi8KLQkvKiBmb3IgdGhlIGRldmljZSwgc2hvdWxkIHRoZXJlIGJlIG1vcmUg dGhhbiBvbmUuICBTZWUgdHRjaGtwaWQoKS4gICovCi0JdHR5ZGV4aXN0cyA9IDA7Ci0JZm9yIChp ID0gMDsgKmRldnByZWZpeFtpXTsgaSsrKSB7IC8qIEZvciBlYWNoIGRyaXZlci4uLiAqLwotCSAg ICAvKiBNYWtlIGRldmljZSBuYW1lICovCi0JICAgIGNrbWFrbXNnKGxvY2syLEZMRk5BTUwsIi9k ZXYvIixkZXZwcmVmaXhbaV0sdW5pdCxOVUxMKTsKLQkgICAgcHJpdl9vbigpOwkJCS8qIFByaXZz IG9uICovCi0JICAgIGsgPSB6Y2hraShsb2NrMikgIT0gLTE7CS8qIFNlZSBpZiBkZXZpY2UgZXhp c3RzICovCi0JICAgIHByaXZfb2ZmKCk7CQkJLyogUHJpdnMgb2ZmICovCi0JICAgIGRlYnVnKEYx MTEsIlRUTE9DSyBleGlzdCIsbG9jazIsayk7Ci0gICAgICAgICAgICBpZiAoaykgewotCQlpZiAo IXN0cmNtcChkZXZwcmVmaXhbaV0sInR0eWQiKSkgLyogdHR5ZCBkZXZpY2UgZXhpc3RzICovCi0J CSAgdHR5ZGV4aXN0cyA9IDE7Ci0JCS8qIE1ha2UgbG9ja2ZpbGUgbmFtZSAqLwotCQlja21ha21z Zyhsb2NrMixGTEZOQU1MLGxvY2tkaXIsIi9MQ0suLiIsZGV2cHJlZml4W2ldLHVuaXQpOwotCQlk ZWJ1ZyhGMTEwLCJUVExPQ0sgY2hlY2tpbmciLGxvY2syLDApOwotCQlwcml2X29uKCk7CQkvKiBQ cml2cyBvbiAqLwotCQlrID0gemNoa2kobG9jazIpICE9IC0xOwkvKiBTZWUgaWYgbG9ja2ZpbGUg ZXhpc3RzICovCi0JCXByaXZfb2ZmKCk7CQkvKiBQcml2cyBvZmYgKi8KLQkJZGVidWcoRjExMSwi VFRMT0NLIGNoZWNrIGZvciBsb2NrIEEiLGxvY2syLGspOwotCQlpZiAoaykgaWYgKHR0Y2hrcGlk KGxvY2syKSkgeyAvKiBJZiBwaWQgc3RpbGwgYWN0aXZlLCBmYWlsLiAqLwotCQkgICAgY2tzdHJu Y3B5KGZsZm5hbSxsb2NrMixGTEZOQU1MKTsKLQkJICAgIHJldHVybigtMik7Ci0JCX0KLQkgICAg fQotCX0KLSAgICB9IGVsc2UgewkJCQkvKiBTb21lIG90aGVyIGRldmljZS1uYW1lIGZvcm1hdCAq LwotCS8qIFRoaXMgdGFrZXMgY2FyZSBvZiBzeW1ib2xpYyBsaW5rcywgZXRjLi4uICovCi0JLyog QnV0IGRvZXMgbm90IGNoYXNlIHRoZW0gZG93biEgKi8KLQlja21ha21zZyhsb2NrMixGTEZOQU1M LGxvY2tkaXIsIi9MQ0suLiIsZGV2aWNlLE5VTEwpOwotCXByaXZfb24oKTsKLQlrID0gemNoa2ko bG9jazIpICE9IC0xOwkJLyogQ2hlY2sgZm9yIGV4aXN0aW5nIGxvY2tmaWxlICovCi0JcHJpdl9v ZmYoKTsKLQlkZWJ1ZyhGMTExLCJUVExPQ0sgY2hlY2sgZm9yIGxvY2sgQiIsbG9jazIsayk7Ci0J aWYgKGspIGlmICh0dGNoa3BpZChsb2NrMikpIHsJLyogQ2hlY2sgcGlkIGZyb20gbG9ja2ZpbGUg Ki8KLQkgICAgY2tzdHJuY3B5KGZsZm5hbSxsb2NrMixGTEZOQU1MKTsKLQkgICAgZGVidWcoRjEx MCwiVFRMT0NLIGluIHVzZSIsZGV2aWNlLDApOwotCSAgICBkZWJ1ZyhGMTAxLCJUVExPQ0sgcmV0 dXJucyIsIiIsLTIpOwotCSAgICByZXR1cm4oLTIpOwotCX0KLSAgICB9Ci0vKgotICBHZXQgaGVy ZSBvbmx5IGlmIHRoZXJlIGlzIG5vIChtb3JlKSBsb2NrZmlsZSwgc28gbm93IHdlIG1ha2Ugb25l IChvciB0d28pLi4uCi0gIGZsZm5hbSA9IGZ1bGwgbG9ja2ZpbGUgcGF0aG5hbWUsIGUuZy4gIi91 c3Ivc3Bvb2wvdXVjcC9MQ0suLmN1bDBwMCIuCi0gIHRtcG5hbSA9IHVuaXF1ZSB0ZW1wb3Jhcnkg ZmlsbmFtZSwgZS5nLiAiL3Vzci9zcG9vbC91dWNwL0xUTVAuLnBpZCIuCi0qLwotICAgIGNrbWFr bXNnKGZsZm5hbSxGTEZOQU1MLGxvY2tkaXIsIi8iLGxvY2tmaWwsTlVMTCk7IC8qIFNFVCBMSU5F IGRldmljZSAqLwotCi0gICAgLyogSWYgZGlhbG91dCBkZXZpY2UsIGFsc28gbWFrZSBvbmUgZm9y IGNvcnJlc3BvbmRpbmcgZGlhbGluIGRldmljZSAqLwotICAgIGxvY2syWzBdID0gJ1wwJzsKLSAg ICBpZiAoIXN0cm5jbXAoZGV2aWNlLCJjdSIsMikgJiYgKnVuaXQgJiYgdHR5ZGV4aXN0cykKLSAg ICAgIGNrbWFrbXNnKGxvY2syLEZMRk5BTUwsbG9ja2RpciwiL0xDSy4udHR5ZCIsdW5pdCxOVUxM KTsKLQotICAgIGlmICgoaW50KXN0cmxlbihsb2NrZGlyKSsxMiA8IExGTkFNTCkKLSAgICAgIHNw cmludGYodG1wbmFtLCIlcy9MVE1QLiUwNWQiLGxvY2tkaXIsKGludCkgcGlkKTsgLyogTWFrZSB0 ZW1wIG5hbWUgKi8KLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsKLQlkZWJ1ZyhGMTEw LCJUVExPQ0sgZmxmbmFtIixmbGZuYW0sMCk7Ci0JZGVidWcoRjExMCwiVFRMT0NLIGxvY2syIixs b2NrMiwwKTsKLQlkZWJ1ZyhGMTEwLCJUVExPQ0sgdG1wbmFtIix0bXBuYW0sMCk7Ci0gICAgfQot I2VuZGlmIC8qIERFQlVHICovCi0vKgotICAgTG9ja2ZpbGUgcGVybWlzc2lvbnMuLi4KLSAgIDQ0 NCBpcyBzdGFuZGFyZCwgSFAtVVggMTAuMDAgdXNlcyA2NjQuICBJdCBkb2Vzbid0IG1hdHRlci4K LSAgIEtlcm1pdCB1c2VzIDQ0NDsgdGhlIGRpZmZlcmVuY2UgbGV0cyB1cyB0ZWxsIHdoZXRoZXIg S2VybWl0IGNyZWF0ZWQKLSAgIHRoZSBsb2NrIGZpbGUuCi0qLwotICAgIHByaXZfb24oKTsJCQkJ LyogVHVybiBvbiBwcml2aWxlZ2VzLiAqLwotICAgIGxvY2tmZCA9IGNyZWF0KHRtcG5hbSwgMDQ0 NCk7CS8qIFRyeSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUuICovCi0gICAgaWYgKGxvY2tmZCA8 IDApIHsJCQkvKiBDcmVhdGUgZmFpbGVkLiAqLwotCWRlYnVnKEYxMTEsIlRUTE9DSyBjcmVhdCBm YWlsZWQiLHRtcG5hbSxlcnJubyk7Ci0JaWYgKGVycm5vID09IEVOT0VOVCkgewotCSAgICBwZXJy b3IobG9ja2Rpcik7Ci0JICAgIHByaW50ZigiVVVDUCBub3QgaW5zdGFsbGVkIG9yIEtlcm1pdCBt aXNjb25maWd1cmVkXG4iKTsKLQl9IGVsc2UgewotCSAgICBpZiAoIXF1aWV0KQotCSAgICAgIHBl cnJvcihsb2NrZGlyKTsKLQkgICAgdW5saW5rKHRtcG5hbSk7CQkvKiBHZXQgcmlkIG9mIHRoZSB0 ZW1wb3JhcnkgZmlsZS4gKi8KLQl9Ci0JcHJpdl9vZmYoKTsJCQkvKiBUdXJuIG9mZiBwcml2aWxl Z2VzISEhICovCi0JZGVidWcoRjEwMSwiVFRMT0NLIHJldHVybnMiLCIiLC0xKTsKLQlyZXR1cm4o LTEpOwkJCS8qIFJldHVybiBmYWlsdXJlIGNvZGUuICovCi0gICAgfQotICAgIGRlYnVnKEYxMTAs IlRUTE9DSyB0ZW1wIG9rIix0bXBuYW0sMCk7Ci0KLS8qIE5vdyB3cml0ZSBvdXIgcGlkIGludG8g dGhlIHRlbXAgbG9ja2ZpbGUgaW4gaW50ZWdlciBmb3JtYXQuICovCi0KLSAgICBpID0gd3JpdGUo bG9ja2ZkLCAoY2hhciAqKSZwaWQsIHNpemVvZihwaWQpKTsKLQotI2lmZGVmIERFQlVHCi0gICAg aWYgKGRlYmxvZykgewotCWRlYnVnKEYxMDEsIlRUTE9DSyBwaWQiLCIiLHBpZCk7Ci0JZGVidWco RjEwMSwiVFRMT0NLIHNpemVvZiBwaWQiLCIiLHNpemVvZihwaWQpKTsKLQlkZWJ1ZyhGMTAxLCJU VExPQ0sgd3JpdGUgcGlkIHJldHVybnMiLCIiLGkpOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAq LwotCi0vKgotICBOb3cgdHJ5IHRvIHJlbmFtZSB0aGUgdGVtcG9yYXJ5IGZpbGUgdG8gdGhlIHJl YWwgbG9ja2ZpbGUgbmFtZS4KLSAgVGhpcyB3aWxsIGZhaWwgaWYgYSBsb2NrIGZpbGUgb2YgdGhh dCBuYW1lIGFscmVhZHkgZXhpc3RzLCB3aGljaAotICB3aWxsIGNhdGNoIHJhY2UgY29uZGl0aW9u cyB3aXRoIG90aGVyIHVzZXJzLgotKi8KLSAgICBjbG9zZShsb2NrZmQpOwkJCS8qIENsb3NlIHRo ZSB0ZW1wIGxvY2tmaWxlLiAqLwotICAgIGNobW9kKHRtcG5hbSwwNDQ0KTsKLQotICAgIHRyaWVz ID0gMDsKLSAgICB3aGlsZSAoIWhhc2xvY2sgJiYgdHJpZXMrKyA8IDIpIHsKLQloYXNsb2NrID0g KGxpbmsodG1wbmFtLGZsZm5hbSkgPT0gMCk7IC8qIENyZWF0ZSBhIGxpbmsgdG8gaXQuICovCi0J ZGVidWcoRjEwMSwiVFRMT0NLIGxpbmsiLCIiLGhhc2xvY2spOwotCWlmIChoYXNsb2NrKSB7CQkJ LyogSWYgd2UgbWFkZSB0aGUgbG9ja2ZpbGUuLi4gKi8KLQotI2lmZGVmIENPTU1FTlQKLS8qIFdl IGNhbid0IGRvIHRoaXMgYW55IG1vcmUgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGEgZmlsZSBkZXNj cmlwdG9yIHlldC4gKi8KLSNpZmRlZiBMT0NLRgkJCQkvKiBDYW4gYmUgY2FuY2VsZWQgd2l0aCAt RE5PTE9DS0YgKi8KLS8qCi0gIENyZWF0ZSBhbiBhZHZpc29yeSBsb2NrIG9uIHRoZSBkZXZpY2Ug dGhyb3VnaCBpdHMgZmlsZSBkZXNjcmlwdG9yLgotICBUaGlzIGNvZGUgYWN0dWFsbHkgc2VlbXMg dG8gd29yay4gIElmIGl0IGlzIGV4ZWN1dGVkLCBhbmQgdGhlbiBhbm90aGVyCi0gIHByb2Nlc3Mg dHJpZXMgdG8gb3BlbiB0aGUgc2FtZSBkZXZpY2UgdW5kZXIgYSBkaWZmZXJlbnQgbmFtZSB0byBj aXJjdW12ZW50Ci0gIHRoZSBsb2NrZmlsZSwgdGhleSBnZXQgYSAiZGV2aWNlIGJ1c3kiIGVycm9y LgotKi8KLQkgICAgZGVidWcoRjEwMCwiVFRMT0NLIExPQ0tGIGNvZGUuLi4iLCIiLDApOwotICAg ICAgICAgICAgd2hpbGUgKCBsb2NrZih0dHlmZCwgRl9UTE9DSywgMEwpICE9IDAgKSB7Ci0gICAg ICAgICAgICAgICAgZGVidWcoRjExMSwgIlRUTE9DSyBsb2NrZiBlcnJvciIsICIiLCBlcnJubyk7 Ci0gICAgICAgICAgICAgICAgaWYgKCgrK3RyaWVzID49IDMpIHx8IChlcnJubyAhPSBFQUdBSU4p KSB7Ci0gICAgICAgICAgICAgICAgICAgIHggPSB1bmxpbmsoZmxmbmFtKTsgLyogUmVtb3ZlIHRo ZSBsb2NrZmlsZSAqLwotCQkgICAgaWYgKGVycm5vID09IEVBQ0NFUyAmJiAhcXVpZXQpCi0JCSAg ICAgIHByaW50ZigiRGV2aWNlIGFscmVhZHkgbG9ja2VkIGJ5IGFub3RoZXIgcHJvY2Vzc1xuIik7 Ci0gICAgICAgICAgICAgICAgICAgIGhhc2xvY2sgPSAwOwotCQkgICAgYnJlYWs7Ci0JCX0KLSAg ICAgICAgICAgICAgICBzbGVlcCgyKTsKLQkgICAgfQotI2VuZGlmIC8qIExPQ0tGICovCi0jZW5k aWYgLyogQ09NTUVOVCAqLwotCi0JICAgIGlmIChoYXNsb2NrKSB7CQkvKiBJZiB3ZSBtYWRlIHRo ZSBsb2NrZmlsZSAuLi4gKi8KLQkJaWYgKGxvY2syWzBdKSB7CQkvKiBpZiB0aGVyZSBpcyB0byBi ZSBhIDJuZCBsb2NrZmlsZSAqLwotCQkgICAgbG9ja2ZkID0gY3JlYXQobG9jazIsIDA0NDQpOyAv KiBDcmVhdGUgaXQgKi8KLQkJICAgIGRlYnVnKEYxMTEsIlRUTE9DSyBsb2NrMiBjcmVhdCIsIGxv Y2syLCBsb2NrZmQpOwotCQkgICAgaWYgKGxvY2tmZCA+IC0xKSB7CS8qIENyZWF0ZWQgT0ssIHdy aXRlIHBpZC4gKi8KLQkJCXdyaXRlKGxvY2tmZCwgKGNoYXIgKikmcGlkLCBzaXplb2YocGlkKSAp OwotCQkJY2xvc2UobG9ja2ZkKTsJLyogQ2xvc2UgYW5kICovCi0JCQljaG1vZChsb2NrMiwgMDQ0 NCk7IC8qIHNldCBwZXJtaXNzaW9ucy4gKi8KLQkJICAgIH0gZWxzZSB7CQkgLyogTm90IE9LLCBi dXQgZG9uJ3QgZmFpbC4gKi8KLQkJCWxvY2syWzBdID0gJ1wwJzsgLyogSnVzdCByZW1lbWJlciBp dCdzIG5vdCB0aGVyZS4gKi8KLQkJICAgIH0KLQkJfQotCQlicmVhazsJCQkvKiBhbmQgd2UncmUg ZG9uZS4gKi8KLQkgICAgfQotCX0KLSAgICB9Ci0gICAgdW5saW5rKHRtcG5hbSk7CQkJLyogVW5s aW5rIChyZW1vdmUpIHRoZSB0ZW1wIGZpbGUuICovCi0gICAgcHJpdl9vZmYoKTsJCQkJLyogVHVy biBvZmYgcHJpdnMgKi8KLSAgICBpID0gaGFzbG9jayA/IDAgOiAtMTsJCS8qIE91ciByZXR1cm4g dmFsdWUgKi8KLSAgICBkZWJ1ZyhGMTAxLCJUVExPQ0sgcmV0dXJucyIsIiIsaSk7Ci0gICAgcmV0 dXJuKGkpOwotI2VuZGlmIC8qIEhQVVggKi8KLSNlbmRpZiAvKiBVU0VUVFlMT0NLICovCi0jZW5k aWYgLyogIU5PVVVDUCAqLwotfQotCi0vKiAgVCBUIFUgTiBMIE8gQyBLICAqLwotCi1zdGF0aWMg aW50Ci10dHVubGNrKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVtb3ZlIFVV Q1AgbG9ja2ZpbGUocykuICovCi0jaWZuZGVmIE5PVVVDUAotICAgIGludCB4OwotCi0gICAgZGVi dWcoRjExMSwidHR1bmxjayIsZmxmbmFtLGhhc2xvY2spOwotCi0jaWZkZWYgVVNFVFRZTE9DSwot Ci0gICAgaWYgKGhhc2xvY2sgJiYgKmZsZm5hbSkgewotCWludCB4OwotCXByaXZfb24oKTsJCQkv KiBUdXJuIG9uIHByaXZzICovCi0jaWZkZWYgVVNFX1VVX0xPQ0sKLQl4ID0gdXVfdW5sb2NrKGxv Y2tuYW1lKTsKLSNlbHNlICAvKiBVU0VfVVVfTE9DSyAqLwotCXggPSB0dHl1bmxvY2sobG9ja25h bWUpOwkvKiBUcnkgdG8gdW5sb2NrICovCi0jZW5kaWYgLyogVVNFX1VVX0xPQ0sgKi8KLQlwcml2 X29mZigpOwkJCS8qIFR1cm4gb2ZmIHByaXZzICovCi0JaWYgKHggPCAwICYmICFxdWlldCkKLQkg IHByaW50ZigiV2FybmluZyAtIENhbid0IHJlbW92ZSBsb2NrZmlsZTogJXNcbiIsIGZsZm5hbSk7 Ci0KLQkqZmxmbmFtID0gJ1wwJzsJCQkvKiBFcmFzZSB0aGUgbmFtZS4gKi8KLQloYXNsb2NrID0g MDsKLQlyZXR1cm4oMCk7Ci0gICAgfQotCi0jZWxzZSAgLyogTm8gdHR5bG9jaygpLi4uICovCi0K LSAgICBpZiAoaGFzbG9jayAmJiAqZmxmbmFtKSB7Ci0JLyogRG9uJ3QgcmVtb3ZlIGxvY2tmaWxl IGlmIHdlIGRpZG4ndCBtYWtlIGl0IG91cnNlbHZlcyAqLwotCWlmICgoeCA9IHR0cnBpZChmbGZu YW0pKSAhPSAoaW50KWdldHBpZCgpKSB7Ci0JICAgIGRlYnVnKEYxMTEsInR0dW5sY2sgbG9ja2Zp bGUgc2VpemVkIixmbGZuYW0seCk7Ci0JICAgIHByaW50ZigiV2FybmluZyAtIExvY2tmaWxlICVz IHNlaXplZCBieSBwaWQgJWRcbiIsCi0JCSAgIGZsZm5hbSwKLQkJICAgeAotCQkgICApOwotCSAg ICByZXR1cm4oMCk7Ci0JfQotCXByaXZfb24oKTsJCQkvKiBUdXJuIHByaXZpbGVnZXMgb24uICAq LwotCWVycm5vID0gMDsKLQl4ID0gdW5saW5rKGZsZm5hbSk7CQkvKiBSZW1vdmUgdGhlIGxvY2tm aWxlLiAqLwotCWRlYnVnKEYxMTEsInR0dW5sY2sgdW5saW5rIixmbGZuYW0seCk7Ci0JaWYgKHgg PCAwKSB7Ci0JICAgIGlmIChlcnJubyAmJiAhcXVpZXQpCi0JICAgICAgcGVycm9yKHR0bm1zdik7 Ci0JICAgIHByaW50ZigiV2FybmluZyAtIENhbid0IHJlbW92ZSBsb2NrZmlsZTogJXNcbiIsIGZs Zm5hbSk7Ci0JfQotCWhhc2xvY2sgPSAwOwotCSpmbGZuYW0gPSAnXDAnOwkJCS8qIEVyYXNlIHRo ZSBuYW1lLiAqLwotCi0jaWZkZWYgUlRBSVgKLQllcnJubyA9IDA7Ci0JeCA9IHVubGluayhsa2Zs Zm4pOwkJLyogUmVtb3ZlIGxpbmsgdG8gbG9ja2ZpbGUgKi8KLQlkZWJ1ZyhGMTExLCJ0dHVubGNr IEFJWCBsaW5rIHVubGluayIsbGtmbGZuLHgpOwotCWlmICh4IDwgMCkgewotCSAgICBpZiAoZXJy bm8gJiYgIXF1aWV0KQotCSAgICAgIHBlcnJvcih0dG5tc3YpOwotCSAgICBwcmludGYoIldhcm5p bmcgLSBDYW4ndCByZW1vdmUgbGluayB0byBsb2NrZmlsZTogJXNcbiIsIGxrZmxmbik7Ci0JfQot CSpsa2ZsZm4gPSAnXDAnOwotI2Vsc2UKLQlpZiAobG9jazJbMF0pIHsJCQkvKiBJZiB0aGVyZSBp cyBhIHNlY29uZCBsb2NrZmlsZSwgKi8KLQkgICAgZXJybm8gPSAwOwotCSAgICB4ID0gdW5saW5r KGxvY2syKTsJCS8qICByZW1vdmUgaXQgdG9vLiAqLwotCSAgICBkZWJ1ZyhGMTExLCJ0dHVubGNr IGxvY2syIHVubGluayIsbG9jazIseCk7Ci0JICAgIGlmICh4IDwgMCkgewotCQlpZiAoZXJybm8g JiYgIXF1aWV0KQotCQkgIHBlcnJvcih0dG5tc3YpOwotCQlwcmludGYoIldhcm5pbmcgLSBDYW4n dCByZW1vdmUgc2Vjb25kYXJ5IGxvY2tmaWxlOiAlc1xuIiwKLQkJICAgICAgIGxvY2syCi0JCSAg ICAgICApOwotCSAgICB9Ci0JICAgIGxvY2syWzBdID0gJ1wwJzsJCS8qIEZvcmdldCBpdHMgbmFt ZS4gKi8KLQl9Ci0jZW5kaWYgLyogUlRBSVggKi8KLQotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBM T0NLRgotICAgICAgICAoVk9JRCkgbG9ja2YodHR5ZmQsIEZfVUxPQ0ssIDBMKTsgLyogUmVtb3Zl IGFkdmlzb3J5IGxvY2sgKi8KLSNlbmRpZiAvKiBMT0NLRiAqLwotI2VuZGlmIC8qIENPTU1FTlQg Ki8KLQotCXByaXZfb2ZmKCk7CQkJLyogVHVybiBwcml2aWxlZ2VzIG9mZi4gKi8KLSAgICB9Ci0j ZW5kaWYgLyogVVNFVFRZTE9DSyAqLwotI2VuZGlmIC8qICFOT1VVQ1AgKi8KLSAgICByZXR1cm4o MCk7Ci19Ci0KLS8qCi0gIDQuM0JTRC1zdHlsZSBVVUNQIGxpbmUgZGlyZWN0aW9uIGNvbnRyb2wu Ci0gIChTdGFuIEJhcmJlciwgUmljZSBVLCAxOTgwLXNvbWV0aGluZy4uLikKLSovCi0jaWZuZGVm IE5PVVVDUAotI2lmZGVmIEFDVUNOVFJMCi1WT0lECi1hY3VjbnRybChmbGFnLHR0bmFtZSkgY2hh ciAqZmxhZywgKnR0bmFtZTsgewotICAgIGNoYXIgeFtERVZOQU1MRU4rMzJdLCAqZGV2aWNlLCAq ZGV2bmFtZTsKLQotICAgIGlmIChzdHJjbXAodHRuYW1lLENUVE5BTSkgPT0gMCB8fCB4bG9jYWwg PT0gMCkgLyogSWYgbm90IGxvY2FsLCAqLwotICAgICAgcmV0dXJuOwkJCQkvKiBqdXN0IHJldHVy bi4gKi8KLSAgICBkZXZpY2UgPSAoKGRldm5hbWUgPSB4eGxhc3QodHRuYW1lLCcvJykpICE9IE5V TEwgPyBkZXZuYW1lKzEgOiB0dG5hbWUpOwotICAgIGlmIChzdHJuY21wKGRldmljZSwiTENLLi4i LDQpID09IDApIGRldmljZSArPSA1OwotICAgIGNrbWFrbXNnKHgsREVWTkFNTEVOKzMyLCIvdXNy L2xpYi91dWNwL2FjdWNudHJsICIsZmxhZywiICIsZGV2aWNlKTsKLSAgICBkZWJ1ZyhGMTEwLCJj YWxsZWQgIix4LDApOwotICAgIHpzeXNjbWQoeCk7Ci19Ci0jZW5kaWYgLyogQUNVQ05UUkwgKi8K LSNlbmRpZiAvKiBOT1VVQ1AgKi8KLQotLyoKLSAgVCBUIEggRiBMIE8gVyAgLS0gIFNldCBvciBS ZXNldCBoYXJkd2FyZSBmbG93IGNvbnRyb2wuCi0KLSAgVGhpcyBpcyBhbiBhdHRlbXB0IHRvIGNv bGxlY3QgYWxsIGhhcmR3YXJlLWZsb3ctY29udHJvbCByZWxhdGVkIGNvZGUKLSAgaW50byBhIHNp bmdsZSBtb2R1bGUuICBUaGFua3MgdG8gUmljayBTbGFka2V5IGFuZCBKb2huIEtvaGwgZm9yIGxv dHMgb2YKLSAgaGVscCBoZXJlLiAgT3ZlcnZpZXc6Ci0KLSAgSGFyZHdhcmUgZmxvdyBjb250cm9s IGlzIG5vdCBzdXBwb3J0ZWQgaW4gbWFueSBVTklYIGltcGxlbWVudGlvbnMuICBFdmVuCi0gIHdo ZW4gaXQgaXMgc3VwcG9ydGVkLCB0aGVyZSBpcyBubyAoaGEgaGEpICJzdGFuZGFyZCIgZm9yIHRo ZSBwcm9ncmFtbWluZwotICBpbnRlcmZhY2UuICBJbiBnZW5lcmFsLCA0LjNCU0QgYW5kIGVhcmxp ZXIgKHNvbWV0aW1lcyksIDQuNEJTRCwgU3lzdGVtIFYsCi0gIFN1bk9TLCBBSVgsIGV0YywgaGF2 ZSB0b3RhbGx5IGRpZmZlcmVudCBtZXRob2RzLiAgKEFuZCwgbm90IHN0cmljdGx5Ci0gIHJlbGV2 YW50IGhlcmUsIHRoZSBwcm9ncmFtbWluZyBpbnRlcmZhY2Ugb2Z0ZW4gYnJpbmdzIG9uZSBvbmx5 IHRvIGEgbm8tb3AKLSAgaW4gdGhlIGRldmljZSBkcml2ZXIhKQotCi0gIEFtb25nIGFsbCB0aGVz ZSwgd2UgaGF2ZSB0d28gbWFqb3IgdHlwZXMgb2YgQVBJczogdGhvc2UgaW4gd2hpY2ggaGFyZHdh cmUKLSAgZmxvdyBjb250cm9sIGlzIGRldGVybWluZWQgYnkgYml0cyBpbiB0aGUgc2FtZSB0ZXJt aW8vdGVybWlvcy9zZ3R0eSBtb2RlCi0gIHdvcmQocykgdGhhdCBhcmUgdXNlZCBmb3IgY29udHJv bGxpbmcgc3VjaCBpdGVtcyBhcyBDQlJFQUsgdnMgUkFXIG1vZGUsIGFuZAotICB3aGljaCBhcmUg YWxzbyB1c2VkIGJ5IHRoZSB0dHZ0KCksIHR0cGt0KCksIGNvbmJpbigpLCBhbmQgY29uY2IoKSBy b3V0aW5lcwotICBmb3IgY2hhbmdpbmcgdGVybWluYWwgbW9kZXMuICBBbmQgdGhvc2UgdGhhdCB1 c2UgZW50aXJlbHkgZGlmZmVyZW50Ci0gIG1lY2hhbmlzbXMuCi0KLSAgSW4gdGhlIGZpcnN0IGNh dGVnb3J5LCBpdCBpcyBpbXBvcnRhbnQgdGhhdCBhbnkgY2hhbmdlIGluIHRoZSBtb2RlIGJpdHMg YmUKLSAgcmVmbGVjdGVkIGluIHRoZSByZWxldmFudCB0ZXJtaW8ocykvc2d0dHkgc3RydWN0dXJl LCBzbyB0aGF0IHN1YnNlcXVlbnQKLSAgY2hhbmdlcyB0byB0aGF0IHN0cnVjdHVyZSBkbyBub3Qg d2lwZSBvdXQgdGhlIGVmZmVjdHMgb2YgdGhpcyByb3V0aW5lLiAgVGhhdAotICBpcyB3aHkgYSBw b2ludGVyLCBhdHRycywgdG8gdGhlIGFwcHJvcHJpYXRlIHN0cnVjdHVyZSBpcyBwYXNzZWQgYXMg YQotICBwYXJhbWV0ZXIgdG8gdGhpcyByb3V0aW5lLgotCi0gIFRoZSBzZWNvbmQgY2F0ZWdvcnkg c2hvdWxkIGdpdmUgdXMgbm8gd29ycmllcywgc2luY2UgYW55IGNoYW5nZXMgdG8gaGFyZHdhcmUK LSAgZmxvdyBjb250cm9sIGFjY29tcGxpc2hlZCBieSB0aGlzIHJvdXRpbmUgc2hvdWxkIG5vdCBh ZmZlY3QgdGhlIHRlcm1pbyhzKS8KLSAgc2d0dHkgc3RydWN0dXJlcywgYW5kIHRoZXJlZm9yZSB3 aWxsIG5vdCBiZSB1bmRvbmUgYnkgbGF0ZXIgY2hhbmdlcyB0byB0aGVtLgotCi0gIFRoZSBzZWNv bmQgYXJndW1lbnQsIHN0YXR1cywgbWVhbnMgdG8gdHVybiBvbiBoYXJkd2FyZSBmbG93IGNvbnRy b2wgaWYKLSAgbm9uemVybywgYW5kIHRvIHR1cm4gaXQgb2ZmIGlmIHplcm8uCi0KLSAgUmV0dXJu czogMCBvbiBhcHBhcmVudCBzdWNjZXNzLCAtMSBvbiBwcm9iYWJsZSBmYWlsdXJlLgotKi8KLQot LyoKLSAgVGhlIGZvbGxvd2luZyBidXNpbmVzcyBpcyBmb3IgQlNESSwgd2hlcmUgaXQgd2FzIGRp c2NvdmVyZWQgdGhhdCB0d28KLSAgc2VwYXJhdGUgYml0cywgQ0NUU19PRkxPVyBhbmQgQ1JUU19J RkxPVywgYXJlIHVzZWQgaW4gaGFyZHdhcmUgZmxvdyBjb250cm9sLAotICBidXQgQ1RSU0NUUyBp cyBkZWZpbmVkIChpbiA8dGVybWlvcy5oPikgdG8gYmUganVzdCBDQ1RTX09GTE9XIHJhdGhlciBi b3RoCi0gIGJpdHMsIHNvIGh3ZmMgb25seSB3b3JrcyBpbiBvbmUgZGlyZWN0aW9uIGlmIHlvdSB1 c2UgQ1JUU0NUUyB0byBjb250cm9sIGl0LgotICBPdGhlciA0LjRCU0QtYmFzZWQgVW5peGVzIHN1 Y2ggYXMgRnJlZUJTRCA0LjEsIHdoaWNoIHVzZSB0aGVzZSB0d28gYml0cywKLSAgZGVmaW5lIENS VFNDVFMgY29ycmVjdGx5LgotKi8KLSNpZmRlZiBGSVhDUlRTQ1RTCi0jaWZkZWYgQ1JUU0NUUwot I2lmZGVmIENDVFNfT0ZMT1cKLSNpZmRlZiBDUlRTX0lGTE9XCi0jdW5kZWYgQ1JUU0NUUwotI2Rl ZmluZSBDUlRTQ1RTIChDUlRTX0lGTE9XfENDVFNfT0ZMT1cpCi0jZW5kaWYgLyogQ1JUU19JRkxP VyAqLwotI2VuZGlmIC8qIENDVFNfT0ZMT1cgKi8KLSNlbmRpZiAvKiBDUlRTQ1RTICovCi0jZW5k aWYgLyogRklYQ1JUU0NUUyAqLwotCi1zdGF0aWMgaW50Ci10dGhmbG93KGZsb3csIHN0YXR1cywg YXR0cnMpCi0gICAgaW50IGZsb3csCQkJCS8qIFR5cGUgb2YgZmxvdyBjb250cm9sIChja2NkZWIu aCkgKi8KLSAgICBzdGF0dXM7CQkJCS8qIE5vbnplcm8gPSB0dXJuIGl0IG9uICovCi0JCQkJCS8q IFplcm8gPSB0dXJuIGl0IG9mZiAqLwotI2lmZGVmIEJTRDQ0T1JQT1NJWAkJCS8qIFBPU0lYIG9y IEJTRDQ0ICovCi0gICAgc3RydWN0IHRlcm1pb3MgKmF0dHJzOwotI2Vsc2UJCQkJCS8qIFN5c3Rl bSBWICovCi0jaWZkZWYgQVRUU1YKLSNpZmRlZiBBVFQ3MzAwCi0jaWZkZWYgVU5JWDM1MU0KLS8q IEFUJlQgVU5JWCAzLjUxbSBjYW4gc2V0IGJ1dCBub3QgdGVzdCBmb3IgaGFyZHdhcmUgZmxvdyBj b250cm9sICovCi0jZGVmaW5lIFJUU0ZMT1cgQ1RTQ0QKLSNkZWZpbmUgQ1RTRkxPVyBDVFNDRAot I2VuZGlmIC8qIEFUVDczMDAgKi8KLSNlbmRpZiAvKiBVTklYMzUxTSAqLwotICAgIHN0cnVjdCB0 ZXJtaW8gKmF0dHJzOwotI2Vsc2UJCQkJCS8qIEJTRCwgVjcsIGV0YyAqLwotICAgIHN0cnVjdCBz Z3R0eWIgKmF0dHJzOwkJLyogc2d0dHkgaW5mby4uLiAqLwotI2VuZGlmIC8qIEFUVFNWICovCi0j ZW5kaWYgLyogQlNENDRPUlBPU0lYICovCi0vKiB0dGhmbG93ICovIHsKLQotICAgIGludCB4ID0g MDsJCQkJLyogdHRoZmxvdygpIHJldHVybiBjb2RlICovCi0KLSNpZmRlZiBQbGFuOQotICAgIHJl dHVybiBwOXR0aGZsb3coZmxvdywgc3RhdHVzKTsKLSNlbHNlCi0KLSNpZm5kZWYgT1hPUwkJCQkv KiBOT1QgT2xpdmV0dGkgWC9PUy4uLiAqLwotLyoKLSAgRm9yIFN1bk9TIDQuMCBhbmQgbGF0ZXIg aW4gdGhlIEJTRCBlbnZpcm9ubWVudCAuLi4KLQotICBUaGUgZGVjbGFyYXRpb25zIGFyZSBjb3Bp ZWQgYW5kIGludGVycHJldGVkIGZyb20gdGhlIFN5c3RlbSBWIGhlYWRlciBmaWxlcywKLSAgc28g d2UgZG9uJ3QgYWN0dWFsbHkgaGF2ZSB0byBwdWxsIGluIGFsbCB0aGUgU3lzdGVtIFYganVuayB3 aGVuIGJ1aWxkaW5nCi0gIEMtS2VybWl0IGZvciBTdW5PUyBpbiB0aGUgQlNEIGVudmlyb25tZW50 LCB3aGljaCB3b3VsZCBiZSBkYW5nZXJvdXMgYmVjYXVzZQotICBoYXZpbmcgdGhvc2Ugc3ltYm9s cyBkZWZpbmVkIHdvdWxkIGNhdXNlIHVzIHRvIHRha2UgdGhlIHdyb25nIHBhdGhzIHRocm91Z2gK LSAgdGhlIGNvZGUuICBUaGUgY29kZSBpbiB0aGlzIHNlY3Rpb24gaXMgdXNlZCBpbiBib3RoIHRo ZSBCU0QgYW5kIFN5cyBWIFN1bk9TCi0gIHZlcnNpb25zLgotKi8KLSNpZmRlZiBTVU5PUzQxCi0v KgotICBJbiBTdW5PUyA0LjEgYW5kIGxhdGVyLCB3ZSB1c2UgdGhlIFBPU0lYIGNhbGxzIHJhdGhl ciB0aGFuIGlvY3RsIGNhbGxzCi0gIGJlY2F1c2UgR05VIENDIHVzZXMgZGlmZmVyZW50IGZvcm1h dHMgZm9yIHRoZSBfSU94eHggbWFjcm9zIHRoYW4gcmVndWxhciBDQzsKLSAgdGhlIFBPU0lYIGZv cm1zIHdvcmsgZm9yIGJvdGguICBCdXQgdGhlIFBPU0lYIGNhbGxzIGFyZSBub3QgYXZhaWxhYmxl IGluCi0gIFN1bk9TIDQuMC4KLSovCi0jZGVmaW5lIENSVFNDVFMgMHg4MDAwMDAwMAkJLyogUlRT L0NUUyBmbG93IGNvbnRyb2wgKi8KLSNkZWZpbmUgVENTQU5PVyAwCQkJLyogRG8gaXQgbm93ICov Ci0KLSAgICBzdHJ1Y3QgdGVybWlvcyB7Ci0JdW5zaWduZWQgbG9uZyBjX2lmbGFnOwkJLyogSW5w dXQgbW9kZXMgKi8KLQl1bnNpZ25lZCBsb25nIGNfb2ZsYWc7CQkvKiBPdXRwdXQgbW9kZXMgKi8K LQl1bnNpZ25lZCBsb25nIGNfY2ZsYWc7CQkvKiBDb250cm9sIG1vZGVzICovCi0JdW5zaWduZWQg bG9uZyBjX2xmbGFnOwkJLyogTGluZSBkaXNjaXBsaW5lIG1vZGVzICovCi0JY2hhciBjX2xpbmU7 Ci0JQ0hBUiBjX2NjWzE3XTsKLSAgICB9OwotICAgIHN0cnVjdCB0ZXJtaW9zIHRlbXA7Ci0KLV9Q Uk9UT1RZUCggaW50IHRjZ2V0YXR0ciwgKGludCwgc3RydWN0IHRlcm1pb3MgKikgKTsKLV9QUk9U T1RZUCggaW50IHRjc2V0YXR0ciwgKGludCwgaW50LCBzdHJ1Y3QgdGVybWlvcyAqKSApOwotLyoK LSAgV2hlbiBDUlRTQ1RTIGlzIHNldCwgU3VuT1Mgd29uJ3QgZG8gb3V0cHV0IHVubGVzcyBib3Ro IENUUyBhbmQgQ0QgYXJlCi0gIGFzc2VydGVkLiAgU28gd2UgZG9uJ3Qgc2V0IENSVFNDVFMgdW5s ZXNzIENEIGlzIHVwLiAgVGhpcyBzaG91bGQgYmUgT0ssCi0gIHNpbmNlIHdlIGRvbid0IG5lZWQg UlRTL0NUUyBkdXJpbmcgZGlhbGluZywgYW5kIGFmdGVyIGRpYWxpbmcgaXMgY29tcGxldGUsCi0g IHdlIHNob3VsZCBoYXZlIENELiAgSWYgbm90LCB3ZSBzdGlsbCBjb21tdW5pY2F0ZSwgYnV0IHdp dGhvdXQgUlRTL0NUUy4KLSovCi0gICAgaW50IG1mbGFnczsJCQkJLyogTW9kZW0gc2lnbmFsIGZs YWdzICovCi0KLSNpZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaXBlKSByZXR1cm4oMCk7Ci0jZW5k aWYgLyogTkVUQ01EICovCi0jaWZkZWYgTkVUUFRZCi0gICAgaWYgKHR0cHR5KSByZXR1cm4oMCk7 Ci0jZW5kaWYgLyogTkVUUFRZICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJ0dGhmbG93IFNVTk9TNDEg ZW50cnkgc3RhdHVzIiwiIixzdGF0dXMpOwotICAgIGlmICghc3RhdHVzKSB7CQkJLyogVHVybiBo YXJkIGZsb3cgb2ZmICovCi0JaWYgKHRjZ2V0YXR0cih0dHlmZCwgJnRlbXApID4gLTEgJiYgLyog R2V0IGRldmljZSBhdHRyaWJ1dGVzICovCi0JICAgICh0ZW1wLmNfY2ZsYWcgJiBDUlRTQ1RTKSkg eyAvKiBDaGVjayBmb3IgUlRTL0NUUyAqLwotCSAgICB0ZW1wLmNfY2ZsYWcgJj0gfkNSVFNDVFM7 CS8qIEl0J3MgdGhlcmUsIHJlbW92ZSBpdCAqLwotCSAgICB4ID0gdGNzZXRhdHRyKHR0eWZkLFRD U0FOT1csJnRlbXApOwotCX0KLSAgICB9IGVsc2UgewkJCQkvKiBUdXJuIGhhcmQgZmxvdyBvbiAq LwotCWlmIChpb2N0bCh0dHlmZCxUSU9DTUdFVCwmbWZsYWdzKSA+IC0xICYmIC8qIEdldCBtb2Rl bSBzaWduYWxzICovCi0JICAgIChtZmxhZ3MgJiBUSU9DTV9DQVIpKSB7CQkvKiBDaGVjayBmb3Ig Q0QgKi8KLQkgICAgZGVidWcoRjEwMCwidHRoZmxvdyBTdW5PUyBoYXMgQ0QiLCIiLDApOwotCSAg ICBpZiAodGNnZXRhdHRyKHR0eWZkLCAmdGVtcCkgPiAtMSAmJiAvKiBHZXQgZGV2aWNlIGF0dHJp YnV0ZXMgKi8KLQkJISh0ZW1wLmNfY2ZsYWcgJiBDUlRTQ1RTKSkgeyAvKiBDaGVjayBmb3IgUlRT L0NUUyAqLwotCQl0ZW1wLmNfY2ZsYWcgfD0gQ1JUU0NUUzsJLyogTm90IHRoZXJlLCBhZGQgaXQg Ki8KLQkJeCA9IHRjc2V0YXR0cih0dHlmZCxUQ1NBTk9XLCZ0ZW1wKTsKLQkgICAgfQotCX0gZWxz ZSB7Ci0JICAgIHggPSAtMTsKLQkgICAgZGVidWcoRjEwMCwidHRoZmxvdyBTdW5PUyBubyBDRCIs IiIsMCk7Ci0JfQotICAgIH0KLSNlbHNlCi0jaWZkZWYgUU5YCi0gICAgc3RydWN0IHRlcm1pb3Mg dGVtcDsKLSNpZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaXBlKSByZXR1cm4oMCk7Ci0jZW5kaWYg LyogTkVUQ01EICovCi0jaWZkZWYgTkVUUFRZCi0gICAgaWYgKHR0cHR5KSByZXR1cm4oMCk7Ci0j ZW5kaWYgLyogTkVUUFRZICovCi0gICAgZGVidWcoRjEwMSwidHRoZmxvdyBRTlggZW50cnkgc3Rh dHVzIiwiIixzdGF0dXMpOwotICAgIGlmICh0Y2dldGF0dHIodHR5ZmQsICZ0ZW1wKSA+IC0xKSB7 CS8qIEdldCBkZXZpY2UgYXR0cmlidXRlcyAqLwotCWlmICghc3RhdHVzKSB7CQkJLyogVHVybiBo YXJkIGZsb3cgb2ZmICovCi0JICAgIGlmICgodGVtcC5jX2NmbGFnICYgKElIRkxPV3xPSEZMT1cp KSA9PSAoSUhGTE9XfE9IRkxPVykpIHsKLQkJdGVtcC5jX2NmbGFnICY9IH4oSUhGTE9XfE9IRkxP Vyk7IC8qIEl0J3MgdGhlcmUsIHJlbW92ZSBpdCAqLwotCQlhdHRycy0+Y19jZmxhZyAmPSB+KElI RkxPV3xPSEZMT1cpOwotCQl4ID0gdGNzZXRhdHRyKHR0eWZkLFRDU0FOT1csJnRlbXApOwotCSAg ICB9Ci0JfSBlbHNlIHsJCQkvKiBUdXJuIGhhcmQgZmxvdyBvbiAqLwotCSAgICBpZiAoKHRlbXAu Y19jZmxhZyAmIChJSEZMT1d8T0hGTE9XKSkgIT0gKElIRkxPV3xPSEZMT1cpKSB7Ci0JCXRlbXAu Y19jZmxhZyB8PSAoSUhGTE9XfE9IRkxPVyk7IC8qIE5vdCB0aGVyZSwgYWRkIGl0ICovCi0JCXRl bXAuY19pZmxhZyAmPSB+KElYT058SVhPRkYpOyAgIC8qIEJ5ZSB0byBJWE9OL0lYT0ZGICovCi0J CXR0cmF3LmNfbGZsYWcgfD0gSUVYVEVOOyAgICAgICAgIC8qIE11c3QgYmUgb24gKi8KLQkJeCA9 IHRjc2V0YXR0cih0dHlmZCxUQ1NBTk9XLCZ0ZW1wKTsKLQkJYXR0cnMtPmNfY2ZsYWcgfD0gKElI RkxPV3xPSEZMT1cpOwotCQlhdHRycy0+Y19pZmxhZyAmPSB+KElYT058SVhPRkYpOwotCSAgICB9 Ci0JfQotICAgIH0gZWxzZSB7Ci0JeCA9IC0xOwotCWRlYnVnKEYxMDAsICJ0dGhmbG93IFFOWCBn ZXRhdHRyIGZhaWxzIiwgIiIsIDApOwotICAgIH0KLSNlbHNlCi0jaWZkZWYgUE9TSVhfQ1JUU0NU UwotLyoKLSAgUE9TSVhfQ1JUU0NUUyBpcyBkZWZpbmVkIGluIGNrY2RlYi5oIG9yIG9uIENDIGNv bW1hbmQgbGluZS4KLSAgTm90ZTogRG8gbm90IGFzc3VtZSBDUlRTQ1RTIGlzIGEgb25lLWJpdCBm aWVsZCEKLSovCi0gICAgc3RydWN0IHRlcm1pb3MgdGVtcDsKLSNpZmRlZiBORVRDTUQKLSAgICBp ZiAodHRwaXBlKSByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTkVUQ01EICovCi0jaWZkZWYgTkVUUFRZ Ci0gICAgaWYgKHR0cHR5KSByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTkVUUFRZICovCi0gICAgZGVi dWcoRjEwMSwidHRoZmxvdyBQT1NJWF9DUlRTQ1RTIGVudHJ5IHN0YXR1cyIsIiIsc3RhdHVzKTsK LSAgICBlcnJubyA9IDA7Ci0gICAgeCA9IHRjZ2V0YXR0cih0dHlmZCwgJnRlbXApOwotICAgIGRl YnVnKEYxMTEsInR0aGZsb3cgUE9TSVhfQ1JUU0NUUyB0Y2dldGF0dHIiLGNraXRvYSh4KSxlcnJu byk7Ci0gICAgZXJybm8gPSAwOwotICAgIGlmICh4IDwgMCkgewotCXggPSAtMTsKLSAgICB9IGVs c2UgewotCWlmICghc3RhdHVzKSB7CQkJLyogVHVybiBoYXJkIGZsb3cgb2ZmICovCi0JICAgIGlm ICgKLSNpZmRlZiBDT01NRU5UCi0JCS8qIFRoaXMgY2FuIGZhaWwgYmVjYXVzZSBvZiBzaWduIGV4 dGVuc2lvbiAqLwotCQkvKiBlLmcuIGluIExpbnV4IHdoZXJlIGl0J3MgQml0IDMxICovCi0JCSh0 ZW1wLmNfY2ZsYWcgJiBDUlRTQ1RTKSA9PSBDUlRTQ1RTCi0jZWxzZQotCQkodGVtcC5jX2NmbGFn ICYgQ1JUU0NUUykgIT0gMAotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkJKSB7Ci0JCXRlbXAuY19j ZmxhZyAmPSB+Q1JUU0NUUzsgLyogSXQncyB0aGVyZSwgcmVtb3ZlIGl0ICovCi0JCWF0dHJzLT5j X2NmbGFnICY9IH5DUlRTQ1RTOwotCQl4ID0gdGNzZXRhdHRyKHR0eWZkLFRDU0FOT1csJnRlbXAp OwotCQlkZWJ1ZyhGMTExLCJ0dGhmbG93IFBPU0lYX0NSVFNDVFMgT0ZGIHRjc2V0YXR0ciIsCi0J CSAgICAgIGNraXRvYSh4KSxlcnJubyk7Ci0JICAgIH0gZWxzZSB7CQkJLyogSm9obiBEdW5sYXAg MjAxMC0wMS0yNiAqLwotCQlkZWJ1ZyhGMDAxLAotCQkgICAgICAidHRoZmxvdyBiZWZvcmUgZm9y Y2luZyBvZmYgYXR0cnMgQ1JUU0NUUyIsCi0JCSAgICAgICIiLAotCQkgICAgICBhdHRycy0+Y19j ZmxhZyZDUlRTQ1RTCi0JCSAgICAgICk7Ci0JCWF0dHJzLT5jX2NmbGFnICY9IH5DUlRTQ1RTOyAv KiBmb3JjZSBpdCBvZmYgaWYgIXN0YXR1cyAqLwotCQlkZWJ1ZyhGMDAxLAotCQkgICAgICAidHRo ZmxvdyBhZnRlciBmb3JjaW5nIG9mZiBhdHRycyBDUlRTQ1RTIiwKLQkJICAgICAgIiIsCi0JCSAg ICAgIGF0dHJzLT5jX2NmbGFnJkNSVFNDVFMKLQkJICAgICAgKTsKLQkJfQotCX0gZWxzZSB7CQkJ LyogVHVybiBoYXJkIGZsb3cgb24gKi8KLQkgICAgaWYgKAotI2lmZGVmIENPTU1FTlQKLQkJLyog VGhpcyBjYW4gZmFpbCBiZWNhdXNlIG9mIHNpZ24gZXh0ZW5zaW9uICovCi0JCSh0ZW1wLmNfY2Zs YWcgJiBDUlRTQ1RTKSAhPSBDUlRTQ1RTCi0jZWxzZQotCQkodGVtcC5jX2NmbGFnICYgQ1JUU0NU UykgPT0gMAotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkJKSB7Ci0JCXRlbXAuY19jZmxhZyB8PSBD UlRTQ1RTOyAvKiBOb3QgdGhlcmUsIGFkZCBpdCAqLwotCQl0ZW1wLmNfaWZsYWcgJj0gfihJWE9O fElYT0ZGfElYQU5ZKTsgLyogQnllIHRvIElYT04vSVhPRkYgKi8KLQkJeCA9IHRjc2V0YXR0cih0 dHlmZCxUQ1NBTk9XLCZ0ZW1wKTsKLQkJZGVidWcoRjExMSwidHRoZmxvdyBQT1NJWF9DUlRTQ1RT IE9OIHRjc2V0YXR0ciIsCi0JCSAgICAgIGNraXRvYSh4KSxlcnJubyk7Ci0JCWF0dHJzLT5jX2Nm bGFnIHw9IENSVFNDVFM7Ci0JCWF0dHJzLT5jX2lmbGFnICY9IH4oSVhPTnxJWE9GRnxJWEFOWSk7 Ci0JICAgIH0KLQl9Ci0gICAgfQotI2Vsc2UKLSNpZmRlZiBTVU5PUzQKLS8qCi0gIFN1bk9TIDQu MCAoYW5kIG1heWJlIGVhcmxpZXI/KS4gIFRoaXMgY29kZSBpcyBkYW5nZXJvdXMgYmVjYXVzZSBp dAotICBwcmV2ZW50cyBjb21waWxhdGlvbiB3aXRoIEdOVSBnY2MsIHdoaWNoIHVzZXMgZGlmZmVy ZW50IGZvcm1hdHMgZm9yIHRoZQotICBfSU9SeHh4IG1hY3JvcyB0aGFuIHJlZ3VsYXIgY2MuICBT dW5PUyA0LjEgYW5kIGxhdGVyIGNhbiB1c2UgdGhlIFBPU0lYCi0gIHJvdXRpbmVzIGFib3ZlLCB3 aGljaCB3b3JrIGZvciBib3RoIGNjIGFuZCBnY2MuCi0qLwotI2RlZmluZSBUQ0dFVFMgX0lPUihU LCA4LCBzdHJ1Y3QgdGVybWlvcykgLyogR2V0IG1vZGVzIGludG8gdGVybWlvcyBzdHJ1Y3QgKi8K LSNkZWZpbmUgVENTRVRTIF9JT1coVCwgOSwgc3RydWN0IHRlcm1pb3MpIC8qIFNldCBtb2RlcyBm cm9tIHRlcm1pb3Mgc3RydWN0ICovCi0jZGVmaW5lIENSVFNDVFMgMHg4MDAwMDAwMAkJICAvKiBS VFMvQ1RTIGZsb3cgY29udHJvbCAqLwotCi0gICAgc3RydWN0IHRlcm1pb3MgewotCXVuc2lnbmVk IGxvbmcgY19pZmxhZzsJCS8qIElucHV0IG1vZGVzICovCi0JdW5zaWduZWQgbG9uZyBjX29mbGFn OwkJLyogT3V0cHV0IG1vZGVzICovCi0JdW5zaWduZWQgbG9uZyBjX2NmbGFnOwkJLyogQ29udHJv bCBtb2RlcyAqLwotCXVuc2lnbmVkIGxvbmcgY19sZmxhZzsJCS8qIExpbmUgZGlzY2lwbGluZSBt b2RlcyAqLwotCWNoYXIgY19saW5lOwotCUNIQVIgY19jY1sxN107Ci0gICAgfTsKLSAgICBzdHJ1 Y3QgdGVybWlvcyB0ZW1wOwotI2lmZGVmIE5FVENNRAotICAgIGlmICh0dHBpcGUpIHJldHVybigw KTsKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSNpZmRlZiBORVRQVFkKLSAgICBpZiAodHRwdHkpIHJl dHVybigwKTsKLSNlbmRpZiAvKiBORVRQVFkgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ0dGhmbG93IGVu dHJ5IHN0YXR1cyIsIiIsc3RhdHVzKTsKLSAgICBpZiAoaW9jdGwodHR5ZmQsVENHRVRTLCZ0ZW1w KSA+IC0xKSB7IC8qIEdldCB0ZXJtaW5hbCBtb2Rlcy4gKi8KLQlpZiAoc3RhdHVzKSB7CQkJLyog VHVybiBoYXJkIGZsb3cgb24gKi8KLQkgICAgdGVtcC5jX2NmbGFnIHw9IENSVFNDVFM7CS8qIEFk ZCBSVFMvQ1RTIHRvIHRoZW0uICovCi0JICAgIHggPSBpb2N0bCh0dHlmZCxUQ1NFVFMsJnRlbXAp OyAvKiBTZXQgdGhlbSBhZ2Fpbi4gKi8KLQkgICAgYXR0cnMtPmNfY2ZsYWcgfD0gQ1JUU0NUUzsJ LyogQWRkIHRvIGdsb2JhbCBpbmZvLiAqLwotCX0gZWxzZSB7CQkJLyogVHVybiBoYXJkIGZsb3cg b2ZmICovCi0JICAgIHRlbXAuY19jZmxhZyAmPSB+Q1JUU0NUUzsKLQkgICAgeCA9IGlvY3RsKHR0 eWZkLFRDU0VUUywmdGVtcCk7Ci0JICAgIGF0dHJzLT5jX2NmbGFnICY9IH5DUlRTQ1RTOwotCX0K LSAgICB9Ci0jZWxzZQkJCQkJLyogTm90IFN1bk9TIDQuMCBvciBsYXRlciAqLwotI2lmZGVmIEFJ WFJTCQkJCS8qIElCTSBBSVggUlMvNjAwMCAqLwotI2lmbmRlZiBBSVg0MQkJCQkvKiBCdXQgb25s eSBwcmUtNC54ID09IFNWUjQgKi8KLSNpZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaXBlKSByZXR1 cm4oMCk7Ci0jZW5kaWYgLyogTkVUQ01EICovCi0jaWZkZWYgTkVUUFRZCi0gICAgaWYgKHR0cHR5 KSByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTkVUUFRZICovCi0gICAgaWYgKHN0YXR1cykgewotCWlm ICgoeCA9IGlvY3RsKHR0eWZkLCBUWEFERENELCAicnRzIikpIDwgMCAmJiBlcnJubyAhPSBFQlVT WSkKLQkgIGRlYnVnKEYxMDAsImhhcmRmbG93IFRYQUREQ0QgKHJ0cykgZXJyb3IiLCAiIiwgMCk7 Ci0gICAgfSBlbHNlIHsKLQlpZiAoKHggPSBpb2N0bCh0dHlmZCwgVFhERUxDRCwgInJ0cyIpKSA8 IDAgJiYgZXJybm8gIT0gRUlOVkFMKQotCSAgZGVidWcoRjEwMCwiaGFyZGZsb3cgVFhERUxDRCAo cnRzKSBlcnJvciIsICIiLCAwKTsKLSAgICB9Ci0jZW5kaWYgLyogQUlYNDEgKi8KLSNlbHNlCQkJ CQkvKiBOb3QgQUlYIFJTLzYwMDAgKi8KLQotI2lmZGVmIEFUVFNWCQkJCS8qIFN5c3RlbSBWLi4u ICovCi0KLSNpZmRlZiBDS19TQ09WNQkJCQkvKiBTQ08gT3BlbiBTZXJ2ZXIgNS4wICovCi0jZGVm aW5lIENLX1NDT1VOSVgKLSNlbHNlCi0jaWZkZWYgTV9VTklYCQkJCS8qIFNDTyBVTklYIDMuMnY0 Lnggb3IgZWFybGllciAqLwotI2RlZmluZSBDS19TQ09VTklYCi0jZW5kaWYgLyogTV9VTklYICov Ci0jZW5kaWYgLyogQ0tfU0NPVjUgKi8KLQotI2lmZGVmIFNDT19GT1JDRV9SVFNYT0ZGCi0jaWZk ZWYgQ0tfU0NPVU5JWAkJCS8qIEJ1dCBub3QgU0NPIE9wZW5TZXJ2ZXIgNS4wLjQgKi8KLSNpZmRl ZiBTQ09fT1NSNTA0CQkJLyogb3IgbGF0ZXIuLi4gKi8KLSN1bmRlZiBDS19TQ09VTklYCi0jZW5k aWYgLyogU0NPX09TUjUwNCAqLwotI2VuZGlmIC8qIENLX1NDT1VOSVggKi8KLSNlbmRpZiAvKiBT Q09fRk9SQ0VfUlRTWE9GRiAqLwotCi0jaWZkZWYgQ0tfU0NPVU5JWAotI2lmZGVmIFBPU0lYCi0g ICAgc3RydWN0IHRlcm1pb3MgdGVtcDsKLSNpZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaXBlKSBy ZXR1cm4oMCk7Ci0jZW5kaWYgLyogTkVUQ01EICovCi0jaWZkZWYgTkVUUFRZCi0gICAgaWYgKHR0 cHR5KSByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTkVUUFRZICovCi0gICAgZGVidWcoRjEwMSwidHRo ZmxvdyBTQ09VTklYIFBPU0lYIGVudHJ5IHN0YXR1cyIsIiIsc3RhdHVzKTsKLSAgICBlcnJubyA9 IDA7Ci0gICAgeCA9IHRjZ2V0YXR0cih0dHlmZCwgJnRlbXApOwotICAgIGRlYnVnKEYxMTEsInR0 aGZsb3cgU0NPIFVOSVggUE9TSVggdGNnZXRhdHRyIixja2l0b2EoeCksZXJybm8pOwotI2Vsc2Ug LyogUE9TSVggKi8KLSAgICBzdHJ1Y3QgdGVybWlvIHRlbXA7Ci0jaWZkZWYgTkVUQ01ECi0gICAg aWYgKHR0cGlwZSkgcmV0dXJuKDApOwotI2VuZGlmIC8qIE5FVENNRCAqLwotI2lmZGVmIE5FVFBU WQotICAgIGlmICh0dHB0eSkgcmV0dXJuKDApOwotI2VuZGlmIC8qIE5FVFBUWSAqLwotICAgIGRl YnVnKEYxMDEsInR0aGZsb3cgU0NPVU5JWCBub24tUE9TSVggZW50cnkgc3RhdHVzIiwiIixzdGF0 dXMpOwotICAgIHggPSBpb2N0bCh0dHlmZCwgVENHRVRBLCAmdGVtcCk7Ci0gICAgZGVidWcoRjEx MSwidHRoZmxvdyBTQ08gVU5JWCBub24tUE9TSVggVENHRVRBIixja2l0b2EoeCksZXJybm8pOwot I2VuZGlmIC8qIFBPU0lYICovCi0vKgotICBUaGlzIGlzIG5vdCByZWFsbHkgUE9TSVgsIHNpbmNl IFBPU0lYIGRvZXMgbm90IGRlYWwgd2l0aCBoYXJkd2FyZSBmbG93Ci0gIGNvbnRyb2wsIGJ1dCB3 ZSBhcmUgdXNpbmcgdGhlIFBPU0lYIEFQSXMuICBJbiBmYWN0LCBSVFNGTE9XIGFuZCBDVFNGTE9X Ci0gIGFyZSBkZWZpbmVkIGluIHRlcm1pby5oLCBidXQgd2l0aGluICNpZm5kZWYgX1BPU0lYX1NP VVJDRS4uI2VuZGlmLiAgU28KLSAgbGV0J3MgdHJ5IGZvcmNpbmcgdGhlaXIgZGVmaW5pdGlvbnMg aGVyZS4KLSovCi0jaWZuZGVmIENUU0ZMT1cKLSNkZWZpbmUgQ1RTRkxPVyAwMDIwMDAwCi0gICAg ZGVidWcoRjEwMSwidHRoZmxvdyBTQ08gZGVmaW5pbmcgQ1RTRkxPVyIsIiIsQ1RTRkxPVyk7Ci0j ZWxzZQotICAgIGRlYnVnKEYxMDEsInR0aGZsb3cgU0NPIENUU0ZMT1ciLCIiLENUU0ZMT1cpOwot I2VuZGlmIC8qIENUU0ZMT1cgKi8KLSNpZm5kZWYgUlRTRkxPVwotI2RlZmluZSBSVFNGTE9XIDAw NDAwMDAKLSAgICBkZWJ1ZyhGMTAxLCJ0dGhmbG93IFNDTyBkZWZpbmluZyBSVFNGTE9XIiwiIixS VFNGTE9XKTsKLSNlbHNlCi0gICAgZGVidWcoRjEwMSwidHRoZmxvdyBTQ08gUlRTRkxPVyIsIiIs UlRTRkxPVyk7Ci0jZW5kaWYgLyogUlRTRkxPVyAqLwotI2lmbmRlZiBPUlRTRkwKLSNkZWZpbmUg T1JUU0ZMIDAxMDAwMDAKLSAgICBkZWJ1ZyhGMTAxLCJ0dGhmbG93IFNDTyBkZWZpbmluZyBPUlRT RkwiLCIiLE9SVFNGTCk7Ci0jZWxzZQotICAgIGRlYnVnKEYxMDEsInR0aGZsb3cgU0NPIE9SVFNG TCIsIiIsT1JUU0ZMKTsKLSNlbmRpZiAvKiBPUlRTRkwgKi8KLQotICAgIGlmICh4ICE9IC0xKSB7 Ci0JaWYgKHN0YXR1cykgewkJCS8qIFR1cm4gaXQgT04gKi8KLQkgICAgdGVtcC5jX2NmbGFnIHw9 IFJUU0ZMT1d8Q1RTRkxPVzsKLQkgICAgYXR0cnMtPmNfY2ZsYWcgfD0gUlRTRkxPV3xDVFNGTE9X OwotI2lmZGVmIE9SVFNGTAotCSAgICB0ZW1wLmNfY2ZsYWcgJj0gfk9SVFNGTDsKLQkgICAgYXR0 cnMtPmNfY2ZsYWcgJj0gfk9SVFNGTDsKLSNlbmRpZiAvKiBPUlRTRkwgKi8KLQkgICAgdGVtcC5j X2lmbGFnICY9IH4oSVhPTnxJWE9GRnxJWEFOWSk7Ci0JICAgIGF0dHJzLT5jX2lmbGFnICY9IH4o SVhPTnxJWE9GRnxJWEFOWSk7Ci0JfSBlbHNlIHsJCQkvKiBUdXJuIGl0IE9GRiAqLwotI2lmZGVm IE9SVFNGTAotCSAgICB0ZW1wLmNfY2ZsYWcgJj0gfihSVFNGTE9XfENUU0ZMT1d8T1JUU0ZMKTsK LQkgICAgYXR0cnMtPmNfY2ZsYWcgJj0gfihSVFNGTE9XfENUU0ZMT1d8T1JUU0ZMKTsKLSNlbHNl ICAvKiBPUlRTRkwgKi8KLQkgICAgdGVtcC5jX2NmbGFnICY9IH4oUlRTRkxPV3xDVFNGTE9XKTsK LQkgICAgYXR0cnMtPmNfY2ZsYWcgJj0gfihSVFNGTE9XfENUU0ZMT1cpOwotI2VuZGlmIC8qIE9S VFNGTCAqLwotCX0KLSNpZmRlZiBQT1NJWAotCXggPSB0Y3NldGF0dHIodHR5ZmQsIFRDU0FEUkFJ TiwgJnRlbXApOwotI2Vsc2UKLQl4ID0gaW9jdGwodHR5ZmQsIFRDU0VUQSwgJnRlbXApOwotI2Vu ZGlmIC8qIFBPU0lYICovCi0JZGVidWcoRjEwMSwidHRoZmxvdyBTQ08gc2V0IG1vZGVzIiwiIix4 KTsKLSAgICB9Ci0jZWxzZSAvKiBOb3QgU0NPIFVOSVggKi8KLSNpZmRlZiBORVRDTUQKLSAgICBp ZiAodHRwaXBlKSByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTkVUQ01EICovCi0jaWZkZWYgTkVUUFRZ Ci0gICAgaWYgKHR0cHR5KSByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTkVUUFRZICovCi0gICAgaWYg KCFzdGF0dXMpIHsJCQkvKiBUdXJuIGl0IE9GRiAqLwotI2lmZGVmIFJUU1hPRkYKLQlkZWJ1ZyhG MTAwLCJ0dGhmbG93IEFUVFNWIFJUUy9DVFMgT0ZGIiwiIiwwKTsKLQlyY3RzeC54X2hmbGFnICY9 IH4oUlRTWE9GRnxDVFNYT04pOwotI2lmZGVmIFRDU0VUWAotCXggPSBpb2N0bCh0dHlmZCxUQ1NF VFgsJnJjdHN4KTsKLQlkZWJ1ZyhGMTAxLCJ0dGhmbG93IEFUVFNWIFRDU0VUWCBPRkYiLCIiLHgp OwotI2Vsc2UKLQl4ID0gLTEKLQlkZWJ1ZyhGMTAwLCJ0dGhmbG93IFRDU0VUWCBub3QgZGVmaW5l ZCIsIiIsMCk7Ci0jZW5kaWYgLyogVENTRVRYICovCi0jZWxzZQotCWRlYnVnKEYxMDAsInR0aGZs b3cgQVRUU1YgUlRTWE9GRiBub3QgZGVmaW5lZCIsIiIsMCk7Ci0jZW5kaWYgLyogUlRTWE9GRiAq LwotI2lmZGVmIERUUlhPRkYKLQlkZWJ1ZyhGMTAwLCJ0dGhmbG93IEFUVFNWIERUUi9DRCBPRkYi LCIiLDApOwotCXJjdHN4LnhfaGZsYWcgJj0gfihEVFJYT0ZGfENEWE9OKTsKLQl4ID0gaW9jdGwo dHR5ZmQsVENTRVRYLCZyY3RzeCk7Ci0JZGVidWcoRjEwMSwidHRoZmxvdyBBVFRTViBEVFJYT0ZG IE9GRiIsIiIseCk7Ci0jZWxzZQotCWRlYnVnKEYxMDAsInR0aGZsb3cgQVRUU1YgRFRSWE9GRiBu b3QgZGVmaW5lZCIsIiIsMCk7Ci0jZW5kaWYgLyogRFRSWE9GRiAqLwotICAgIH0gZWxzZSB7CQkJ CS8qIFR1cm4gaXQgT04uICovCi0JaWYgKGZsb3cgPT0gRkxPX1JUU0MpIHsJLyogUlRTL0NUUyBG bG93IGNvbnRyb2wuLi4gKi8KLQkgICAgZGVidWcoRjEwMCwidHRoZmxvdyBBVFRTViBSVFMvQ1RT IE9OIiwiIiwwKTsKLSNpZmRlZiBSVFNYT0ZGCi0JICAgIC8qIFRoaXMgaXMgdGhlIHByZWZlcnJl ZCB3YXksIGFjY29yZGluZyB0byBTVklEMyAqLwotI2lmZGVmIFRDR0VUWAotCSAgICB4ID0gaW9j dGwodHR5ZmQsVENHRVRYLCZyY3RzeCk7Ci0JICAgIGRlYnVnKEYxMDEsInR0aGZsb3cgVENHRVRY IiwiIix4KTsKLQkgICAgaWYgKHggPiAtMSkgewotCQlyY3RzeC54X2hmbGFnIHw9IFJUU1hPRkYg fCBDVFNYT047Ci0JCXggPSBpb2N0bCh0dHlmZCxUQ1NFVFgsJnJjdHN4KTsKLQkJZGVidWcoRjEw MCwidHRoZmxvdyBBVFRTViBpb2N0bCIsIiIseCk7Ci0JICAgIH0KLSNlbHNlCi0JICAgIGRlYnVn KEYxMDAsInR0aGZsb3cgVENHRVRYIG5vdCBkZWZpbmVkIiwiIiwwKTsKLQkgICAgeCA9IC0xCi0j ZW5kaWYgLyogVENHRVRYICovCi0jZWxzZQotCSAgICBkZWJ1ZyhGMTAwLCJ0dGhmbG93IFJUU1hP RkYgbm90IGRlZmluZWQiLCIiLDApOwotCSAgICB4ID0gLTE7Ci0jZW5kaWYgLyogUlRTWE9GRiAq LwotCX0gZWxzZSBpZiAoZmxvdyA9PSBGTE9fRFRSQykgewkvKiBEVFIvQ0QgRmxvdyBjb250cm9s Li4uICovCi0JICAgIGRlYnVnKEYxMDAsInR0aGZsb3cgQVRUU1YgRFRSL0NEIE9OIiwiIiwwKTsK LSNpZmRlZiBEVFJYT0ZGCi0JICAgIC8qIFRoaXMgaXMgc3RyYWlnaHQgb3V0IG9mIFNWSUQgUjQg Ki8KLQkgICAgaWYgKGlvY3RsKHR0eWZkLFRDR0VUWCwmcmN0c3gpID4gLTEpIHsKLQkJcmN0c3gu eF9oZmxhZyAmPSB+KERUUlhPRkZ8Q0RYT04pOwotCQl4ID0gaW9jdGwodHR5ZmQsVENTRVRYLCZy Y3RzeCk7Ci0JICAgIH0KLSNlbHNlCi0JICAgIGRlYnVnKEYxMDAsInR0aGZsb3cgQVRUU1YgRFRS WE9GRiBub3QgZGVmaW5lZCIsIiIsMCk7Ci0JICAgIHggPSAtMTsKLSNlbmRpZiAvKiBEVFJYT0ZG ICovCi0JfQotICAgIH0KLSNlbmRpZiAvKiBDS19TQ09VTklYICovCi0KLSNlbHNlIC8qIG5vdCBT eXN0ZW0gVi4uLiAqLwotCi0jaWZkZWYgQ0tfRFRSQ1RTCi0jaWZkZWYgTERPRFRSCi0jaWZkZWYg TERPQ1RTCi0jaWZkZWYgTkVUQ01ECi0gICAgaWYgKHR0cGlwZSkgcmV0dXJuKDApOwotI2VuZGlm IC8qIE5FVENNRCAqLwotI2lmZGVmIE5FVFBUWQotICAgIGlmICh0dHB0eSkgcmV0dXJuKDApOwot I2VuZGlmIC8qIE5FVFBUWSAqLwotICAgIHggPSBMRE9EVFIgfCBMRE9DVFM7CQkvKiBGb3VuZCBv bmx5IG9uIFVURUs/ICovCi0gICAgaWYgKGZsb3cgPT0gRkxPX0RUUlQgJiYgc3RhdHVzKSB7CS8q IFVzZSBoYXJkd2FyZSBmbG93IGNvbnRyb2wgKi8KLQlpZiAobG1vZGVmKSB7Ci0JICAgIHggPSBp b2N0bCh0dHlmZCxUSU9DTEJJUywmeCk7Ci0JICAgIGlmICh4IDwgMCkgewotCSAgICAgICAgZGVi dWcoRjEwMCwiaGFyZGZsb3cgVElPQ0xCSVMgZXJyb3IiLCIiLDApOwotCSAgICB9IGVsc2Ugewot CQlsbW9kZWYrKzsKLQkJZGVidWcoRjEwMCwiaGFyZGZsb3cgVElPQ0xCSVMgb2siLCIiLDApOwot CSAgICB9Ci0JfQotICAgIH0gZWxzZSB7Ci0JaWYgKGxtb2RlZikgewotCSAgICB4ID0gaW9jdGwo dHR5ZmQsVElPQ0xCSUMsJngpOwotCSAgICBpZiAoeCA8IDApIHsKLQkgICAgICAgIGRlYnVnKEYx MDAsImhhcmRmbG93IFRJT0NMQklDIGVycm9yIiwiIiwwKTsKLQkgICAgfSBlbHNlIHsKLQkJbG1v ZGVmKys7Ci0JCWRlYnVnKEYxMDAsImhhcmRmbG93IFRJT0NMQklDIG9rIiwiIiwwKTsKLQkgICAg fQotCX0KLSAgICB9Ci0jZW5kaWYgLyogTERPRFRSICovCi0jZW5kaWYgLyogTERPQ1RTICovCi0j ZW5kaWYgLyogQ0tfRFRSQ1RTICovCi0jZW5kaWYgLyogQVRUU1YgKi8KLSNlbmRpZiAvKiBBSVhS UyAqLwotI2VuZGlmIC8qIFNVTk9TNCAqLwotI2VuZGlmIC8qIFFOWCAqLwotI2VuZGlmIC8qIFBP U0lYX0NSVFNDVFMgKi8KLSNlbmRpZiAvKiBTVU5PUzQxICovCi0KLSNlbHNlIC8qIE9YT1MgKi8K LQotICAgIHN0cnVjdCB0ZXJtaW9zIHRlbXA7CQkvKiBPbGl2ZXR0aSBYL09TIC4uLiAqLwotCi0j aWZkZWYgTkVUQ01ECi0gICAgaWYgKHR0cGlwZSkgcmV0dXJuKDApOwotI2VuZGlmIC8qIE5FVENN RCAqLwotI2lmZGVmIE5FVFBUWQotICAgIGlmICh0dHB0eSkgcmV0dXJuKDApOwotI2VuZGlmIC8q IE5FVFBUWSAqLwotICAgIHggPSBpb2N0bCh0dHlmZCxUQ0dFVFMsJnRlbXApOwotICAgIGlmICh4 ID09IDApIHsKLQl0ZW1wLmNfY2ZsYWcgJj0gfihDUlRTQ1RTfENEVFJDVFN8Q0JSS0ZMT1d8Q0RU UkRTUnxDUlRTRFNSKTsKLQlpZiAoc3RhdHVzKSB7Ci0JICAgIHN3aXRjaCAoZmxvdykgewotCSAg ICAgIGNhc2UgRkxPX1JUU0M6IHRlbXAuY19jZmxhZyB8PSBDUlRTQ1RTOyAvKiBSVFMvQ1RTICho YXJkKSAqLwotCQlicmVhazsKLQkgICAgICBjYXNlIEZMT19EVFJUOiB0ZW1wLmNfY2ZsYWcgfD0g Q0RUUkNUUzsgLyogRFRSL0NUUyAoaGFyZCkgKi8KLQkJYnJlYWs7Ci0JICAgIH0KLQl9Ci0JeCA9 IGlvY3RsKHR0eWZkLFRDU0VUUywmdGVtcCk7Ci0gICAgfQotI2VuZGlmIC8qIE9YT1MgKi8KLSAg ICByZXR1cm4oeCk7Ci0KLSNlbmRpZiAvKiBQbGFuOSAqLwotfQotCi0vKiAgVCBUIFAgSyBUICAt LSAgQ29uZGl0aW9uIHRoZSBjb21tdW5pY2F0aW9uIGxpbmUgZm9yIHBhY2tldHMgKi8KLS8qICAg ICAgICAgICAgICAgICBvciBmb3IgbW9kZW0gZGlhbGluZyAqLwotCi0vKgotICBJZiBjYWxsZWQg d2l0aCBzcGVlZCA+IC0xLCBhbHNvIHNldCB0aGUgc3BlZWQuCi0gIFJldHVybnMgMCBvbiBzdWNj ZXNzLCAtMSBvbiBmYWlsdXJlLgotCi0gIE5PVEU6IHRoZSAieGZsb3ciIHBhcmFtZXRlciBpcyBz dXBwb3NlZCB0byBiZSB0aGUgY3VycmVudGx5IHNlbGVjdGVkCi0gIHR5cGUgb2YgZmxvdyBjb250 cm9sLCBidXQgZm9yIGhpc3RvcmljYWwgcmVhc29ucywgdGhpcyBwYXJhbWV0ZXIgaXMgYWxzbwot ICB1c2VkIHRvIGluZGljYXRlIHRoYXQgd2UgYXJlIGRpYWxpbmcuICBUaGVyZWZvcmUsIHdoZW4g dGhlIHRydWUgZmxvdwotICBjb250cm9sIHNldHRpbmcgaXMgbmVlZGVkLCB3ZSBhY2Nlc3MgdGhl IGV4dGVybmFsIHZhcmlhYmxlICJmbG93IiwgcmF0aGVyCi0gIHRoYW4gdHJ1c3Rpbmcgb3VyICJ4 ZmxvdyIgYXJndW1lbnQuCi0qLwotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXR0cGt0KGxvbmcgc3Bl ZWQsIGludCB4ZmxvdywgaW50IHBhcml0eSkKLSNlbHNlCi10dHBrdChzcGVlZCx4ZmxvdyxwYXJp dHkpIGxvbmcgc3BlZWQ7IGludCB4ZmxvdywgcGFyaXR5OwotI2VuZGlmIC8qIENLX0FOU0lDICov Ci0vKiB0dHBrdCAqLyB7Ci0jaWZuZGVmIE5PTE9DQUwKLSAgICBpbnQgczI7Ci0gICAgaW50IHMg PSAtMTsKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0gICAgaW50IHg7Ci0gICAgZXh0ZXJuIGludCBm bG93OwkJCS8qIFJFQUwgZmxvdy1jb250cm9sIHNldHRpbmcgKi8KLQotICAgIGlmICh0dHlmZCA8 IDApIHJldHVybigtMSk7ICAgICAgICAgIC8qIE5vdCBvcGVuLiAqLwotCi0gICAgZGVidWcoRjEw MSwidHRwa3QgcGFyaXR5IiwiIixwYXJpdHkpOwotICAgIGRlYnVnKEYxMDEsInR0cGt0IHhmbG93 IiwiIix4Zmxvdyk7Ci0gICAgZGVidWcoRjEwMSwidHRwa3Qgc3BlZWQiLCIiLChpbnQpIHNwZWVk KTsKLQotICAgIHR0cHJ0eSA9IHBhcml0eTsgICAgICAgICAgICAgICAgICAgIC8qIExldCBvdGhl ciB0dCBmdW5jdGlvbnMgc2VlIHRoZXNlLiAqLwotICAgIHR0c3BlZWQgPSBzcGVlZDsJCQkvKiBN YWtlIGdsb2JhbCBjb3B5IGZvciB0aGlzIG1vZHVsZSAqLwotICAgIHR0cG1zayA9IHR0cHJ0eSA/ IDAxNzcgOiAwMzc3OwkvKiBQYXJpdHkgc3RyaXBwaW5nIG1hc2sgKi8KLSNpZmRlZiBQQVJTRU5T RQotICAgIG5lZWRwY2hrID0gdHRwcnR5ID8gMCA6IDE7CQkvKiBQYXJpdHkgY2hlY2sgbmVlZGVk PyAqLwotI2Vsc2UKLSAgICBuZWVkcGNoayA9IDA7Ci0jZW5kaWYgLyogUEFSU0VOU0UgKi8KLQot ICAgIGRlYnVnKEYxMDEsInR0cGt0IHR0cG1zayIsIiIsdHRwbXNrKTsKLSAgICBkZWJ1ZyhGMTAx LCJ0dHBrdCBuZXRjb25uIiwiIixuZXRjb25uKTsKLQotI2lmZGVmIE5FVENPTk4JCQkJLyogTm8g bW9kZS1jaGFuZ2luZyBmb3IgdGVsbmV0ICovCi0gICAgaWYgKG5ldGNvbm4pIHsKLSNpZmRlZiBU Q1BTT0NLRVQKLSNpZmRlZiBUQ1BfTk9ERUxBWQotICAgICAgICBpZiAodHRuZXQgPT0gTkVUX1RD UEIpIHsJLyogQnV0IHR1cm4gb2ZmIE5hZ2xlICovCi0gICAgICAgICAgICBleHRlcm4gaW50IHRj cF9ub2RlbGF5OwotICAgICAgICAgICAgbm9kZWxheV9zYXYgPSB0Y3Bfbm9kZWxheTsKLSAgICAg ICAgICAgIG5vX2RlbGF5KHR0eWZkLDEpOwotICAgICAgICB9Ci0jZW5kaWYgLyogVENQX05PREVM QVkgKi8KLSNpZmRlZiBUTl9DT01QT1JUCi0gICAgICAgIGlmIChpc3RuY29tcG9ydCgpKSB7Ci0g ICAgICAgICAgICBpbnQgcmMgPSAtMTsKLSAgICAgICAgICAgIGlmICh0dnRmbGcgPT0gMCAmJiBz cGVlZCA9PSB0dHNwZWVkICYmIGZsb3cgPT0gdHRmbG93Ci0gICAgICAgICAgICAgICAgIC8qICYm IHR0Y2FyciA9PSBjdXJjYXJyICovICkgewotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0 cGt0IG1vZGVzIGFscmVhZHkgc2V0LCBza2lwcGluZy4uLiIsIiIsMCk7Ci0gICAgICAgICAgICAg ICAgcmV0dXJuKDApOwkJLyogQWxyZWFkeSBiZWVuIGNhbGxlZC4gKi8KLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIGlmIChmbG93ICE9IHR0ZmxvdykgewotICAgICAgICAgICAgICAgIGlmICgo cmMgPSB0bnNldGZsb3coZmxvdykpIDwgMCkKLQkJICByZXR1cm4ocmMpOwotICAgICAgICAgICAg ICAgIHR0ZmxvdyA9IGZsb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3BlZWQg IT0gdHRzcGVlZCkgewotICAgICAgICAgICAgICAgIGlmIChzcGVlZCA8PSAwKSAKLQkJICBzcGVl ZCA9IHRuY19nZXRfYmF1ZCgpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKChyYyA9IHRuY19z ZXRfYmF1ZChzcGVlZCkpIDwgMCkKLQkJICByZXR1cm4ocmMpOwotICAgICAgICAgICAgICAgIHR0 c3BlZWQgPSBzcGVlZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRuY19zZXRfZGF0YXNp emUoOCk7Ci0JICAgIHRuY19zZXRfc3RvcHNpemUoc3RvcGJpdHMpOwotCi0jaWZkZWYgSFdQQVJJ VFkKLSAgICAgICAgICAgIGlmIChod3Bhcml0eSkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAo aHdwYXJpdHkpIHsKLQkJICBjYXNlICdlJzoJCQkvKiBFdmVuICovCi0gICAgICAgICAgICAgICAg ICAgIGRlYnVnKEYxMDAsInR0cmVzIDggYml0cyArIGV2ZW4gcGFyaXR5IiwiIiwwKTsKLSAgICAg ICAgICAgICAgICAgICAgdG5jX3NldF9wYXJpdHkoMyk7Ci0gICAgICAgICAgICAgICAgICAgIGJy ZWFrOwotCQkgIGNhc2UgJ28nOgkJCS8qIE9kZCAqLwotICAgICAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTAwLCJ0dHJlcyA4IGJpdHMgKyBvZGQgcGFyaXR5IiwiIiwwKTsKLSAgICAgICAgICAgICAg ICAgICAgdG5jX3NldF9wYXJpdHkoMik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCQkg IGNhc2UgJ20nOgkJCS8qIE1hcmsgKi8KLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwi dHRyZXMgOCBiaXRzICsgaW52YWxpZCBwYXJpdHk6IG1hcmsiLCIiLDApOwotICAgICAgICAgICAg ICAgICAgICB0bmNfc2V0X3Bhcml0eSg0KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0J CSAgY2FzZSAncyc6CQkJLyogU3BhY2UgKi8KLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEw MCwidHRyZXMgOCBiaXRzICsgaW52YWxpZCBwYXJpdHk6IHNwYWNlIiwiIiwwKTsKLSAgICAgICAg ICAgICAgICAgICAgdG5jX3NldF9wYXJpdHkoNSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSAKLSNlbmRpZiAvKiBIV1BB UklUWSAqLwotCSAgICB7Ci0gICAgICAgICAgICAgICAgdG5jX3NldF9wYXJpdHkoMSk7ICAgICAg ICAgICAgICAvKiBOb25lICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0dnRmbGcgPSAw OwotICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICB9Ci0jZW5kaWYgLyogVE5fQ09NUE9S VCAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotICAgICAgICB0dnRmbGcgPSAwOwotICAgICAg ICByZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSNpZmRlZiBORVRDTUQK LSAgICBpZiAodHRwaXBlKSByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTkVUQ01EICovCi0jaWZkZWYg TkVUUFRZCi0gICAgaWYgKHR0cHR5KSByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTkVUUFRZICovCi0K LSNpZm5kZWYgUGxhbjkKLSAgICBpZiAodHRmZGZsZyAmJiAhaXNhdHR5KHR0eWZkKSkgcmV0dXJu KDApOwotI2VuZGlmIC8qIFBsYW45ICovCi0KLSNpZmRlZiBDT0hFUkVOVAotI2RlZmluZSBTVk9S UE9TSVgKLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotCi0jaWZuZGVmIFNWT1JQT1NJWAkJCS8qIEJl cmtlbGV5LCBWNywgZXRjLiAqLwotI2lmZGVmIExQQVNTOAotLyoKLSBGb3Igc29tZSByZWFzb24s IHdpdGggQlNEIHRlcm1pbmFsIGRyaXZlcnMsIHlvdSBjYW4ndCBzZXQgRkxPVyB0byBYT04vWE9G RgotIGFmdGVyIGhhdmluZyBwcmV2aW91c2x5IHNldCBpdCB0byBOT05FIHdpdGhvdXQgY2xvc2lu ZyBhbmQgcmVvcGVuaW5nIHRoZQotIGRldmljZS4gIFVubGVzcyB0aGVyZSdzIHNvbWV0aGluZyBJ IG92ZXJsb29rZWQgYmVsb3cuLi4KLSovCi0gICAgaWYgKHR0ZmxvdyA9PSBGTE9fTk9ORSAmJiBm bG93ID09IEZMT19YT05YICYmIHhsb2NhbCA9PSAwKSB7Ci0JZGVidWcoRjEwMSwidHRwa3QgZXhl Y3V0aW5nIGhvcnJpYmxlIGZsb3cga2x1ZGdlIiwiIiwwKTsKLQl0dGNsb3MoMCk7CQkJLyogQ2xv c2UgaXQgKi8KLQl4ID0gMDsKLQl0dG9wZW4odHRubXN2LCZ4LHR0bWRtLDApOwkvKiBPcGVuIGl0 IGFnYWluICovCi0gICAgfQotI2VuZGlmIC8qIExQQVNTOCAqLwotI2VuZGlmIC8qIFNWT1JQT1NJ WCAqLwotCi0jaWZkZWYgQ09IRVJFTlQJCQkJLyogVGhpcyBtdXN0IGJlIHZlc3RpZ2lhbCBzaW5j ZSB3ZSAqLwotI3VuZGVmIFNWT1JQT1NJWAkJCS8qIHJldmVyc2UgaXQgYSBmZXcgbGluZXMgYmVs b3cuLi4gKi8KLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotCi0gICAgaWYgKHhmbG93ICE9IEZMT19E SUFMICYmIHhmbG93ICE9IEZMT19ESUFYKQotICAgICAgdHRmbG93ID0geGZsb3c7CQkJLyogTm93 IG1ha2UgdGhpcyBhdmFpbGFibGUgdG9vLiAqLwotCi0jaWZuZGVmIE5PTE9DQUwKLSAgICBpZiAo eGxvY2FsKSB7Ci0JczIgPSAoaW50KSAoc3BlZWQgLyAxMEwpOwkvKiBDb252ZXJ0IGJwcyB0byBj cHMgKi8KLQlkZWJ1ZyhGMTAxLCJ0dHBrdCBjYWxsaW5nIHR0c3NwZCIsIiIsczIpOwotCXMgPSB0 dHNzcGQoczIpOwkJCS8qIENoZWNrIGFuZCBzZXQgdGhlIHNwZWVkICovCi0JZGVidWcoRjEwMSwi dHRwa3QgdHRzc3BkIHJlc3VsdCIsIiIscyk7Ci0gCWNhcnJjdGwoJnR0cmF3LCB4ZmxvdyAhPSBG TE9fRElBTCAvKiBDYXJyaWVyIGNvbnRyb2wgKi8KLQkJJiYgKHR0Y2FyciA9PSBDQVJfT04gfHwg KHR0Y2FyciA9PSBDQVJfQVVUICYmIHR0bWRtICE9IDApKSk7Ci0JdHZ0ZmxnID0gMDsJCQkvKiBT byB0dHZ0KCkgd2lsbCB3b3JrIG5leHQgdGltZSAqLwotICAgIH0KLSNlbmRpZiAvKiBOT0xPQ0FM ICovCi0KLSNpZmRlZiBDT0hFUkVOVAotI2RlZmluZSBTVk9SUE9TSVgKLSNlbmRpZiAvKiBDT0hF UkVOVCAqLwotCi0jaWZuZGVmIFNWT1JQT1NJWAkJCS8qIEJTRCBzZWN0aW9uICovCi0gICAgaWYg KGZsb3cgPT0gRkxPX1JUU0MgfHwJCS8qIEhhcmR3YXJlIGZsb3cgY29udHJvbCAqLwotCWZsb3cg PT0gRkxPX0RUUkMgfHwKLQlmbG93ID09IEZMT19EVFJUKSB7Ci0JdHRoZmxvdyhmbG93LCAxLCAm dHRyYXcpOwotCWRlYnVnKEYxMDAsInR0cGt0IGhhcmQgZmxvdywgVEFOREVNIG9mZiwgUkFXIG9u IiwiIiwwKTsKLQl0dHJhdy5zZ19mbGFncyAmPSB+VEFOREVNOwkvKiBUdXJuIG9mZiBzb2Z0d2Fy ZSBmbG93IGNvbnRyb2wgKi8KLQl0dHJhdy5zZ19mbGFncyB8PSBSQVc7CQkvKiBFbnRlciByYXcg bW9kZSAqLwotICAgIH0gZWxzZSBpZiAoZmxvdyA9PSBGTE9fTk9ORSkgewkvKiBObyBmbG93IGNv bnRyb2wgKi8KLQlkZWJ1ZyhGMTAwLCJ0dHBrdCBubyBmbG93LCBUQU5ERU0gb2ZmLCBSQVcgb24i LCIiLDApOwotCXR0cmF3LnNnX2ZsYWdzICY9IH5UQU5ERU07CS8qIFR1cm4gb2ZmIHNvZnR3YXJl IGZsb3cgY29udHJvbCAqLwotCXR0aGZsb3coZmxvdywgMCwgJnR0cmF3KTsJLyogVHVybiBvZmYg YW55IGhhcmR3YXJlIGYvYyB0b28gKi8KLQl0dHJhdy5zZ19mbGFncyB8PSBSQVc7CQkvKiBFbnRl ciByYXcgbW9kZSAqLwotICAgIH0gZWxzZSBpZiAoZmxvdyA9PSBGTE9fS0VFUCkgewkvKiBLZWVw IGRldmljZSdzIG9yaWdpbmFsIHNldHRpbmcgKi8KLQlkZWJ1ZyhGMTAwLCJ0dHBrdCBrZWVwaW5n IG9yaWdpbmFsIFRBTkRFTSIsIiIsMCk7Ci0JdHRyYXcuc2dfZmxhZ3MgJj0gflRBTkRFTTsKLQl0 dHJhdy5zZ19mbGFncyB8PSAodHRvbGQuc2dfZmxhZ3MgJiBUQU5ERU0pOwotCS8qIE5PVEU6IFdl IHNob3VsZCBhbHNvIGhhbmRsZSBoYXJkd2FyZSBmbG93IGNvbnRyb2wgaGVyZSEgKi8KLSAgICB9 Ci0KLS8qIFNFVCBGTE9XIFhPTi9YT0ZGIGlzIGluIGVmZmVjdCwgb3IgU0VUIEZMT1cgS0VFUCBy ZXN1bHRlZCBpbiBYb24vWG9mZiAqLwotCi0gICAgaWYgKChmbG93ID09IEZMT19YT05YKSB8fCAo dHRyYXcuc2dfZmxhZ3MgJiBUQU5ERU0pKSB7Ci0JZGVidWcoRjEwMCwidHRwa3QgdHVybmluZyBv biBUQU5ERU0iLCIiLDApOwotCXR0cmF3LnNnX2ZsYWdzIHw9IFRBTkRFTTsJLyogU28gYXNrIGZv ciBpdC4gKi8KLQotI2lmZGVmIExQQVNTOAkJCQkvKiBDYW4gcGFzcyA4LWJpdCBkYXRhIHRocm91 Z2g/ICovCi0vKiBJZiB0aGUgTFBBU1M4IGxvY2FsIG1vZGUgaXMgYXZhaWxhYmxlLCB0aGVuIGZs b3cgY29udHJvbCBjYW4gYWx3YXlzICAqLwotLyogYmUgdXNlZCwgZXZlbiBpZiBwYXJpdHkgaXMg bm9uZSBhbmQgd2UgYXJlIHRyYW5zZmVycmluZyA4LWJpdCBkYXRhLiAgKi8KLS8qIEJ1dCB3ZSBv bmx5IG5lZWQgdG8gZG8gYWxsIHRoaXMgaWYgWG9uL1hvZmYgaXMgcmVxdWVzdGVkLiAqLwotLyog QlVULi4uIHRoaXMgdGVuZHMgbm90IHRvIHdvcmsgdGhyb3VnaCBJUCBvciBMQVQgY29ubmVjdGlv bnMsIHRlcm1pbmFsICovCi0vKiBzZXJ2ZXJzLCB0ZWxuZXQsIHJsb2dpbiwgZXRjLCBzbyBpdCBp cyBjdXJyZW50bHkgZGlzYWJsZWQuICovCi0JeCA9IExQQVNTODsJCQkvKiBJZiBMUEFTUzggZGVm aW5lZCwgdGhlbiAqLwotCWRlYnVnKEYxMDAsInR0cGt0IGV4ZWN1dGluZyBMUEFTUzggY29kZSIs IiIsMCk7Ci0JaWYgKGxtb2RlZikgewkJCS8qIFRJT0NMQklTIG11c3QgYmUgdG9vLiAqLwotCSAg ICB4ID0gaW9jdGwodHR5ZmQsVElPQ0xCSVMsJngpOyAvKiBUcnkgdG8gc2V0IExQQVNTOC4gKi8K LQkgICAgaWYgKHggPCAwKSB7Ci0JCWRlYnVnKEYxMDAsInR0cGt0IFRJT0NMQklTIGVycm9yIiwi IiwwKTsKLQkgICAgfSBlbHNlIHsKLQkJbG1vZGVmKys7Ci0JCWRlYnVnKEYxMDAsInR0cGt0IFRJ T0NMQklTIG9rIiwiIiwwKTsKLQkgICAgfQotCX0KLS8qCi0gQnV0IGlmIHdlIHVzZSBMUEFTUzgg bW9kZSwgd2UgbXVzdCBleHBsaWNpdGx5IHR1cm4gb2ZmCi0gdGVybWluYWwgaW50ZXJydXB0cyBv ZiBhbGwga2luZHMuCi0qLwotI2lmZGVmIFRJT0NHRVRDCQkJCS8qIE5vdCByYXdtb2RlLCAqLwot CWlmICh0Y2hhcmYgJiYgKHhsb2NhbCA9PSAwKSkgewkvKiBtdXN0IHR1cm4gb2ZmICovCi0JICAg IHRjaG5vaS50X2ludHJjID0gLTE7CS8qIGludGVycnVwdCBjaGFyYWN0ZXIgKi8KLQkgICAgdGNo bm9pLnRfcXVpdGMgPSAtMTsJLyogYW5kIHF1aXQgY2hhcmFjdGVyLiAqLwotCSAgICB0Y2hub2ku dF9zdGFydGMgPSAxNzsJLyogTWFrZSBzdXJlIHhvbiAqLwotCSAgICB0Y2hub2kudF9zdG9wYyA9 IDE5OwkvKiBhbmQgeG9mZiBub3QgaWdub3JlZC4gKi8KLSNpZm5kZWYgTk9CUktDCi0JICAgIHRj aG5vaS50X2VvZmMgPSAtMTsJCS8qIGVvZiBjaGFyYWN0ZXIuICovCi0JICAgIHRjaG5vaS50X2Jy a2MgPSAtMTsJCS8qIGJyayBjaGFyYWN0ZXIuICovCi0jZW5kaWYgLyogTk9CUktDICovCi0JICAg IGlmIChpb2N0bCh0dHlmZCxUSU9DU0VUQywmdGNobm9pKSA8IDApIHsKLQkJZGVidWcoRjEwMCwi dHRwa3QgVElPQ1NFVEMgZmFpbGVkIiwiIiwwKTsKLQkgICAgfSBlbHNlIHsKLQkJdGNoYXJmID0g MTsKLQkJZGVidWcoRjEwMCwidHRwa3QgVElPQ1NFVEMgb2siLCIiLDApOwotCSAgICB9Ci0jaWZk ZWYgQ09NTUVOVAotLyogb25seSBmb3IgcGFyYW5vaWQgZGVidWdnaW5nICovCi0JICAgIGlmICh0 Y2hhcmYpIHsKLQkJc3RydWN0IHRjaGFycyBmb287Ci0JCWNoYXIgdGNoYnVmWzEwMF07Ci0JCWlv Y3RsKDAsVElPQ0dFVEMsJmZvbyk7Ci0JCXNwcmludGYodGNoYnVmLAotCQkgICAgImludHI9JWQs cXVpdD0lZCwgc3RhcnQ9JWQsIHN0b3A9JWQsIGVvZj0lZCwgYnJrPSVkIiwKLQkJICAgIGZvby50 X2ludHJjLCBmb28udF9xdWl0YywgZm9vLnRfc3RhcnRjLAotCQkgICAgZm9vLnRfc3RvcGMsIGZv by50X2VvZmMsICBmb28udF9icmtjKTsKLQkJZGVidWcoRjExMCwidHRwa3QgY2hhcnMiLHRjaGJ1 ZiwwKTsKLQkgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQl9Ci0JdHRyYXcuc2dfZmxhZ3Mg fD0gQ0JSRUFLOwkvKiBOZWVkZWQgZm9yIHVua25vd24gcmVhc29uICovCi0jZW5kaWYgLyogVElP Q0dFVEMgKi8KLQotLyogUHJldmVudCBzdXNwZW5kIGR1cmluZyBwYWNrZXQgbW9kZSAqLwotI2lm ZGVmIFRJT0NHTFRDCQkJCS8qIE5vdCByYXdtb2RlLCAqLwotCWlmIChsdGNoYXJmICYmICh4bG9j YWwgPT0gMCkpIHsJLyogbXVzdCB0dXJuIG9mZiAqLwotCSAgICBsdGNobm9pLnRfc3VzcGMgPSAt MTsJLyogc3VzcGVuZCBjaGFyYWN0ZXIgKi8KLQkgICAgbHRjaG5vaS50X2RzdXNwYyA9IC0xOwkv KiBhbmQgZGVsYXllZCBzdXNwZW5kIGNoYXJhY3RlciAqLwotCSAgICBpZiAoaW9jdGwodHR5ZmQs VElPQ1NMVEMsJnRjaG5vaSkgPCAwKSB7Ci0JCWRlYnVnKEYxMDAsInR0cGt0IFRJT0NTTFRDIGZh aWxlZCIsIiIsMCk7Ci0JICAgIH0gZWxzZSB7Ci0JCWx0Y2hhcmYgPSAxOwotCQlkZWJ1ZyhGMTAw LCJ0dHBrdCBUSU9DU0xUQyBvayIsIiIsMCk7Ci0JICAgIH0KLQl9Ci0jZW5kaWYgLyogVElPQ0dM VEMgKi8KLQotI2Vsc2UgLyogTFBBU1M4IG5vdCBkZWZpbmVkICovCi0KLS8qIFByZXZpb3VzbHks IEJTRC1iYXNlZCBpbXBsZW1lbnRhdGlvbnMgYWx3YXlzICovCi0vKiB1c2VkIHJhd21vZGUgZm9y IHBhY2tldHMuICBOb3csIHdlIHVzZSByYXdtb2RlIG9ubHkgaWYgcGFyaXR5IGlzIE5PTkUuICov Ci0vKiBUaGlzIGFsbG93cyB0aGUgZmxvdyBjb250cm9sIHJlcXVlc3RlZCBhYm92ZSB0byBhY3R1 YWxseSB3b3JrLCBidXQgb25seSAqLwotLyogaWYgdGhlIHVzZXIgYXNrcyBmb3IgcGFyaXR5ICh3 aGljaCBhbHNvIG1lYW5zIHRoZXkgZ2V0IDh0aC1iaXQgcXVvdGluZykuICovCi0KLQlpZiAocGFy aXR5KSB7CQkJLyogSWYgcGFyaXR5LCAqLwotCSAgICB0dHJhdy5zZ19mbGFncyAmPSB+UkFXOwkv KiB1c2UgY29va2VkIG1vZGUgKi8KLSNpZmRlZiBDT01NRU5UCi0vKiBXSFk/Pz8gKi8KLQkgICAg aWYgKHhsb2NhbCkKLSNlbmRpZiAvKiBDT01NRU5UICovCi0JICAgICAgdHRyYXcuc2dfZmxhZ3Mg fD0gQ0JSRUFLOwotCSAgICBkZWJ1ZyhGMTAxLCJ0dHBrdCBjb29rZWQsIGNicmVhaywgcGFyaXR5 IiwiIixwYXJpdHkpOwotI2lmZGVmIFRJT0NHRVRDCQkJCS8qIE5vdCByYXdtb2RlLCAqLwotCSAg ICBpZiAodGNoYXJmICYmICh4bG9jYWwgPT0gMCkpIHsgLyogbXVzdCB0dXJuIG9mZiAqLwotCQl0 Y2hub2kudF9pbnRyYyA9IC0xOwkvKiBpbnRlcnJ1cHQgY2hhcmFjdGVyICovCi0JCXRjaG5vaS50 X3F1aXRjID0gLTE7CS8qIGFuZCBxdWl0IGNoYXJhY3Rlci4gKi8KLQkJdGNobm9pLnRfc3RhcnRj ID0gMTc7CS8qIE1ha2Ugc3VyZSB4b24gKi8KLQkJdGNobm9pLnRfc3RvcGMgPSAxOTsJLyogYW5k IHhvZmYgbm90IGlnbm9yZWQuICovCi0jaWZuZGVmIE5PQlJLQwotCQl0Y2hub2kudF9lb2ZjID0g LTE7CS8qIGVvZiBjaGFyYWN0ZXIuICovCi0JCXRjaG5vaS50X2Jya2MgPSAtMTsJLyogYnJrIGNo YXJhY3Rlci4gKi8KLSNlbmRpZiAvKiBOT0JSS0MgKi8KLQkJaWYgKGlvY3RsKHR0eWZkLFRJT0NT RVRDLCZ0Y2hub2kpIDwgMCkgewotCQkgICAgZGVidWcoRjEwMCwidHRwa3QgVElPQ1NFVEMgZmFp bGVkIiwiIiwwKTsKLQkJfSBlbHNlIHsKLQkJICAgIHRjaGFyZiA9IDE7Ci0JCSAgICBkZWJ1ZyhG MTAwLCJ0dHBrdCBUSU9DU0VUQyBvayIsIiIsMCk7Ci0JCX0KLQkgICAgfQotI2VuZGlmIC8qIFRJ T0NHRVRDICovCi0jaWZkZWYgVElPQ0dMVEMJCQkJLyogTm90IHJhd21vZGUsICovCi0vKiBQcmV2 ZW50IHN1c3BlbmQgZHVyaW5nIHBhY2tldCBtb2RlICovCi0JICAgIGlmIChsdGNoYXJmICYmICh4 bG9jYWwgPT0gMCkpIHsgLyogbXVzdCB0dXJuIG9mZiAqLwotCQlsdGNobm9pLnRfc3VzcGMgPSAt MTsJLyogc3VzcGVuZCBjaGFyYWN0ZXIgKi8KLQkJbHRjaG5vaS50X2RzdXNwYyA9IC0xOwkvKiBh bmQgZGVsYXllZCBzdXNwZW5kIGNoYXJhY3RlciAqLwotCQlpZiAoaW9jdGwodHR5ZmQsVElPQ1NM VEMsJnRjaG5vaSkgPCAwKSB7Ci0JCSAgICBkZWJ1ZyhGMTAwLCJ0dHBrdCBUSU9DU0xUQyBmYWls ZWQiLCIiLDApOwotCQl9IGVsc2UgewotCQkgICAgbHRjaGFyZiA9IDE7Ci0JCSAgICBkZWJ1ZyhG MTAwLCJ0dHBrdCBUSU9DU0xUQyBvayIsIiIsMCk7Ci0JCX0KLQkgICAgfQotI2VuZGlmIC8qIFRJ T0NHTFRDICovCi0JfSBlbHNlIHsJCQkvKiBJZiBubyBwYXJpdHksICovCi0JICAgIHR0cmF3LnNn X2ZsYWdzIHw9IFJBVzsJLyogbXVzdCB1c2UgOC1iaXQgcmF3IG1vZGUuICovCi0JICAgIGRlYnVn KEYxMDEsInR0cGt0IHNldHRpbmcgcmF3bW9kZSwgcGFyaXR5IiwiIixwYXJpdHkpOwotCX0KLSNl bmRpZiAvKiBMUEFTUzggKi8KLSAgICB9IC8qIEVuZCBvZiBYb24vWG9mZiBzZWN0aW9uICovCi0K LSAgICAvKiBEb24ndCBlY2hvLCBkb24ndCBtYXAgQ1IgdG8gQ1JMRiBvbiBvdXRwdXQsIGRvbid0 IGZvb2wgd2l0aCBjYXNlICovCi0jaWZkZWYgTENBU0UKLSAgICB0dHJhdy5zZ19mbGFncyAmPSB+ KEVDSE98Q1JNT0R8TENBU0UpOwotI2Vsc2UKLSAgICB0dHJhdy5zZ19mbGFncyAmPSB+KEVDSE98 Q1JNT0QpOwotI2VuZGlmIC8qIExDQVNFICovCi0KLSNpZmRlZiBUT1dFUjEKLSAgICB0dHJhdy5z Z19mbGFncyAmPSB+QU5ZUDsgICAgICAgICAgICAvKiBNdXN0IHNldCB0aGlzIG9uIG9sZCBUb3dl cnMgKi8KLSNlbmRpZiAvKiBUT1dFUjEgKi8KLQotI2lmZGVmIEJFTExWMTAKLSAgICBpZiAoaW9j dGwodHR5ZmQsVElPQ1NFVFAsJnR0cmF3KSA8IDApIC8qIFNldCB0aGUgbmV3IG1vZGVzLiAqLwot ICAgICAgcmV0dXJuKC0xKTsKLSNlbHNlCi0gICAgZXJybm8gPSAwOwotICAgIGlmIChzdHR5KHR0 eWZkLCZ0dHJhdykgPCAwKSB7ICAgICAgIC8qIFNldCB0aGUgbmV3IG1vZGVzLiAqLwotICAgICAg ICBkZWJ1ZyhGMTAxLCJ0dHBrdCBzdHR5IGZhaWxlZCIsIiIsZXJybm8pOwotICAgICAgICByZXR1 cm4oLTEpOwotICAgIH0KLSNlbmRpZiAvKiBCRUxMVjEwICovCi0gICAgZGVidWcoRjEwMCwidHRw a3Qgc3R0eSBvayIsIiIsMCk7Ci0KLSNpZmRlZiBzb255X25ld3MKLSAgICB4ID0geGxvY2FsID8g a21fZXh0IDoga21fY29uOwkvKiBQdXQgbGluZSBpbiBBU0NJSSBtb2RlLiAqLwotICAgIGlmICh4 ICE9IC0xKSB7CQkJLyogTWFrZSBzdXJlIHdlIGtub3cgb3JpZ2luYWwgbW9kZXMuICovCi0JeCAm PSB+S01fVFRZUEU7Ci0JeCB8PSBLTV9BU0NJSTsKLQlpZiAoaW9jdGwodHR5ZmQsVElPQ0tTRVQs ICZ4KSA8IDApIHsKLQkgICAgcGVycm9yKCJ0dHBrdCBjYW4ndCBzZXQgQVNDSUkgbW9kZSIpOwot CSAgICBkZWJ1ZyhGMTAxLCJ0dHBrdCBlcnJvciBzZXR0aW5nIEFTQ0lJIG1vZGUiLCIiLHgpOwot CSAgICByZXR1cm4oLTEpOwotCX0KLSAgICB9Ci0gICAgZGVidWcoRjEwMCwidHRwa3Qgc2V0IEFT Q0lJIG1vZGUgb2siLCIiLDApOwotI2VuZGlmIC8qIHNvbnlfbmV3cyAqLwotCi0gICAgaWYgKHhs b2NhbCA9PSAwKSB7CQkJLyogVHVybiB0aGlzIG9mZiBzbyB3ZSBjYW4gcmVhZCAqLwotCXNpZ25h bChTSUdJTlQsU0lHX0lHTik7CQkvKiBDdHJsLUMgY2hhcnMgdHlwZWQgYXQgY29uc29sZSAqLwot CXNpZ2ludF9pZ24gPSAxOwotICAgIH0KLSAgICB0dnRmbGcgPSAwOwkJCQkvKiBTbyB0dHZ0KCkg d2lsbCB3b3JrIG5leHQgdGltZSAqLwotICAgIGRlYnVnKEYxMDAsInR0cGt0IHN1Y2Nlc3MiLCIi LDApOwotICAgIHJldHVybigwKTsKLQotI2VuZGlmIC8qIE5vdCBBVFRTViBvciBQT1NJWCAqLwot Ci0vKiBBVCZUIFVOSVggYW5kIFBPU0lYICovCi0KLSNpZmRlZiBDT0hFUkVOVAotI2RlZmluZSBT Vk9SUE9TSVgKLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotCi0jaWZkZWYgU1ZPUlBPU0lYCi0gICAg aWYgKGZsb3cgPT0gRkxPX1hPTlgpIHsJCS8qIFhvbi9Yb2ZmICovCi0JdHRyYXcuY19pZmxhZyB8 PSAoSVhPTnxJWE9GRik7Ci0JdHRoZmxvdyhmbG93LCAwLCAmdHRyYXcpOwotICAgIH0gZWxzZSBp ZiAoZmxvdyA9PSBGTE9fTk9ORSkgewkvKiBOb25lICovCi0JLyogTk9URTogV2Ugc2hvdWxkIGFs c28gdHVybiBvZmYgaGFyZHdhcmUgZmxvdyBjb250cm9sIGhlcmUhICovCi0JdHRyYXcuY19pZmxh ZyAmPSB+KElYT058SVhPRkYpOwotCXR0aGZsb3coZmxvdywgMCwgJnR0cmF3KTsKLSAgICB9IGVs c2UgaWYgKGZsb3cgPT0gRkxPX0tFRVApIHsJLyogS2VlcCAqLwotCXR0cmF3LmNfaWZsYWcgJj0g fihJWE9OfElYT0ZGKTsJLyogVHVybiBvZmYgWG9uL1hvZmYgZmxhZ3MgKi8KLQl0dHJhdy5jX2lm bGFnIHw9ICh0dG9sZC5jX2lmbGFnICYgKElYT058SVhPRkYpKTsgLyogT1IgaW4gb2xkIG9uZXMg Ki8KLQkvKiBOT1RFOiBXZSBzaG91bGQgYWxzbyBoYW5kbGUgaGFyZHdhcmUgZmxvdyBjb250cm9s IGhlcmUhICovCi0jaWZkZWYgUE9TSVhfQ1JUU0NUUwotLyogSW4gTGludXggY2FzZSwgd2UgZG8g dGhpcywgd2hpY2ggaXMgdW5saWtlbHkgdG8gYmUgcG9ydGFibGUgKi8KLSAgICAgICAgdHRyYXcu Y19jZmxhZyAmPSB+Q1JUU0NUUzsJLyogVHVybiBvZmYgUlRTL0NUUyBmbGFnICovCi0gICAgICAg IHR0cmF3LmNfY2ZsYWcgfD0gKHR0b2xkLmNfY2ZsYWcgJiBDUlRTQ1RTKTsgLyogT1IgaW4gb2xk IG9uZSAqLwotI2VuZGlmIC8qIFBPU0lYX0NSVFNDVFMgKi8KLSAgICB9IGVsc2UgaWYgKGZsb3cg PT0gRkxPX1JUU0MgfHwJLyogSGFyZHdhcmUgKi8KLQkgICAgICAgZmxvdyA9PSBGTE9fRFRSQyB8 fAotCSAgICAgICBmbG93ID09IEZMT19EVFJUKSB7Ci0JdHRyYXcuY19pZmxhZyAmPSB+KElYT058 SVhPRkYpOwkvKiAoMTkwKSAqLwotCXR0aGZsb3coZmxvdywgMSwgJnR0cmF3KTsKLSAgICB9Ci0g ICAgdHRyYXcuY19sZmxhZyAmPSB+KElDQU5PTnxFQ0hPKTsKLSAgICB0dHJhdy5jX2xmbGFnICY9 IH5JU0lHOwkJLyogRG8gTk9UIGNoZWNrIGZvciBpbnRlcnJ1cHQgY2hhcnMgKi8KLQotI2lmbmRl ZiBPWE9TCi0jaWZkZWYgUU5YCi0gICAgaWYgKGZsb3cgIT0gRkxPX1JUU0MgJiYgZmxvdyAhPSBG TE9fRFRSQyAmJiBmbG93ICE9IEZMT19EVFJUKQotI2VuZGlmIC8qIFFOWCAqLwotI2lmbmRlZiBD T0hFUkVOVAotICAgICAgdHRyYXcuY19sZmxhZyAmPSB+SUVYVEVOOwkJLyogVHVybiBvZmYgXk8v XlYgcHJvY2Vzc2luZyAqLwotI2VuZGlmIC8qIENPSEVSRU5UICovCi0jZWxzZSAvKiBPWE9TICov Ci0gICAgdHRyYXcuY19jY1tWRElTQ0FSRF0gPSB0dHJhdy5jX2NjW1ZMTkVYVF0gPSBDRElTQUJM RTsKLSNlbmRpZiAvKiBPWE9TICovCi0gICAgdHRyYXcuY19sZmxhZyB8PSBOT0ZMU0g7CQkvKiBE b24ndCBmbHVzaCAqLwotICAgIHR0cmF3LmNfaWZsYWcgfD0gSUdOUEFSOwkJLyogSWdub3JlIHBh cml0eSBlcnJvcnMgKi8KLSNpZmRlZiBBVFRTVgotI2lmZGVmIEJTRDQ0Ci0gICAgdHRyYXcuY19p ZmxhZyAmPSB+KElHTkJSS3xJTkxDUnxJR05DUnxJQ1JOTHxJTlBDS3xJU1RSSVB8SVhBTlkpOwot I2Vsc2UKLSAgICB0dHJhdy5jX2lmbGFnICY9IH4oSUdOQlJLfElOTENSfElHTkNSfElDUk5MfElV Q0xDfElOUENLfElTVFJJUHxJWEFOWSk7Ci0jZW5kaWYgLyogQlNENDQgKi8KLSNlbHNlIC8qIFBP U0lYICovCi0gICAgdHRyYXcuY19pZmxhZyAmPSB+KElHTkJSS3xJTkxDUnxJR05DUnxJQ1JOTHxJ TlBDS3xJU1RSSVApOwotI2VuZGlmIC8qIEFUVFNWICovCi0gICAgdHRyYXcuY19vZmxhZyAmPSB+ T1BPU1Q7Ci0gICAgdHRyYXcuY19jZmxhZyAmPSB+KENTSVpFKTsKLSAgICB0dHJhdy5jX2NmbGFn IHw9IChDUzh8Q1JFQUR8SFVQQ0wpOwotCi0jaWZkZWYgQ1NUT1BCCi0gICAgaWYgKHhsb2NhbCkg ewotCWlmIChzdG9wYml0cyA9PSAyKSB7Ci0JICAgIHR0cmF3LmNfY2ZsYWcgfD0gQ1NUT1BCOwkv KiAyIHN0b3AgYml0cyAqLwotCSAgICBkZWJ1ZyhGMTAwLCJ0dHBrdCAyIHN0b3BiaXRzIiwiIiww KTsKLQl9IGVsc2UgaWYgKHN0b3BiaXRzID09IDEpIHsKLQkgICAgdHRyYXcuY19jZmxhZyAmPSB+ KENTVE9QQik7CS8qIDEgc3RvcCBiaXQgKi8KLQkgICAgZGVidWcoRjEwMCwidHRwa3QgMSBzdG9w Yml0IiwiIiwwKTsKLQl9Ci0gICAgfQotI2VuZGlmIC8qIENTVE9QQiAqLwotCi0jaWZkZWYgSFdQ QVJJVFkKLSAgICBpZiAoaHdwYXJpdHkgJiYgeGxvY2FsKSB7CQkvKiBIYXJkd2FyZSBwYXJpdHkg Ki8KLQl0dHJhdy5jX2NmbGFnIHw9IFBBUkVOQjsJLyogRW5hYmxlIHBhcml0eSAqLwotI2lmZGVm IENPTU1FTlQKLS8qIFVuY29tbWVudCB0aGlzIG9ubHkgaWYgbmVlZGVkIC0tIEkgZG9uJ3QgdGhp bmsgaXQgaXMgKi8KLQl0dHJhdy5jX2NmbGFnICY9IH4oQ1NJWkUpOwkvKiBDbGVhciBvdXQgY2hh cmFjdGVyLXNpemUgbWFzayAqLwotCXR0cmF3LmNfY2ZsYWcgfD0gQ1M4OwkJLyogQW5kIHNldCBp dCB0byA4ICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2lmZGVmIElHTlBBUgotCXR0cmF3LmNf aWZsYWcgfD0gSUdOUEFSOwkvKiBEb24ndCBkaXNjYXJkIGluY29taW5nIGJ5dGVzICovCi0JZGVi dWcoRjEwMCwidHRwa3QgSUdOUEFSIiwiIiwwKTsgLyogdGhhdCBoYXZlIHBhcml0eSBlcnJvcnMg Ki8KLSNlbmRpZiAvKiBJR05QQVIgKi8KLQlzd2l0Y2ggKGh3cGFyaXR5KSB7Ci0JICBjYXNlICdl JzoJCQkvKiBFdmVuICovCi0JICAgIHR0cmF3LmNfY2ZsYWcgJj0gfihQQVJPREQpOwotCSAgICBk ZWJ1ZyhGMTAwLCJ0dHBrdCA4IGJpdHMgKyBldmVuIHBhcml0eSIsIiIsMCk7Ci0JICAgIGJyZWFr OwotCSAgY2FzZSAnbyc6CQkJLyogT2RkICovCi0JICAgIHR0cmF3LmNfY2ZsYWcgfD0gUEFST0RE OwotCSAgICBkZWJ1ZyhGMTAwLCJ0dHBrdCA4IGJpdHMgKyBvZGQgcGFyaXR5IiwiIiwwKTsKLQkg ICAgYnJlYWs7Ci0JICBjYXNlICdtJzoJCQkvKiBNYXJrICovCi0JICBjYXNlICdzJzoJCQkvKiBT cGFjZSAqLwotCSAgICAvKiBQQVJFWFQgaXMgbWVudGlvbmVkIGluIFNWSUQgYnV0IHRoZSBkZXRh aWxzIGFyZSBub3QgZ2l2ZW4uICovCi0JICAgIC8qIFBBUkVYVCBpcyBub3QgaW5jbHVkZWQgaW4g UE9TSVggSVNPL0lFQyA5OTQ1LTEuICovCi0JICAgIGRlYnVnKEYxMDAsInR0cGt0IDggYml0cyAr IGludmFsaWQgcGFyaXR5IiwiIiwwKTsKLQkgICAgYnJlYWs7Ci0JfQotICAgIH0gZWxzZSB7CQkJ CS8qIFdlIGhhbmRsZSBwYXJpdHkgb3Vyc2VsdmVzICovCi0jZW5kaWYgLyogSFdQQVJJVFkgKi8K LQl0dHJhdy5jX2NmbGFnICY9IH4oUEFSRU5CKTsJLyogRG9uJ3QgZW5hYmxlIHBhcml0eSAqLwot I2lmZGVmIEhXUEFSSVRZCi0gICAgfQotI2VuZGlmIC8qIEhXUEFSSVRZICovCi0KLSNpZmRlZiBJ WDM3MAotICAgIHR0cmF3LmNfY2NbNF0gPSA0ODsgIC8qIFNvIFNlcmllcy8xIGRvZXNuJ3QgaW50 ZXJydXB0IG9uIGV2ZXJ5IGNoYXIgKi8KLSAgICB0dHJhdy5jX2NjWzVdID0gMTsKLSNlbHNlCi0j aWZuZGVmIFZFT0YJCQkJLyogZm9yIERHVVggdGhpcyBpcyBWRU9GLCBub3QgVk1JTiAqLwotICAg IHR0cmF3LmNfY2NbNF0gPSAxOyAgIC8qIFtWTUlOXSAgcmV0dXJuIG1heCBvZiB0aGlzIG1hbnkg Y2hhcmFjdGVycyBvciAqLwotI2Vsc2UKLSNpZm5kZWYgT1hPUwotI2lmZGVmIFZNSU4KLSAgICB0 dHJhdy5jX2NjW1ZNSU5dID0gMTsKLSNlbmRpZiAvKiBWTUlOICovCi0jZWxzZSAvKiBPWE9TICov Ci0gICAgdHRyYXcuY19taW4gPSAxOwotI2VuZGlmIC8qIE9YT1MgKi8KLSNlbmRpZiAvKiBWRU9G ICovCi0jaWZuZGVmIFZFT0wJCQkJLyogZm9yIERHVVggdGhpcyBpcyBWRU9MLCBub3QgVlRJTUUg Ki8KLSAgICB0dHJhdy5jX2NjWzVdID0gMDsJIC8qIFtWVElNRV0gd2hlbiB0aGlzIG1hbnkgc2Vj cy8xMCBleHBpcmUgdy9ubyBpbnB1dCAqLwotI2Vsc2UKLSNpZm5kZWYgT1hPUwotI2lmZGVmIFZU SU1FCi0gICAgdHRyYXcuY19jY1tWVElNRV0gPSAwOwotI2VuZGlmIC8qIFZUSU1FICovCi0jZWxz ZSAvKiBPWE9TICovCi0gICAgdHRyYXcuY190aW1lID0gMDsKLSNlbmRpZiAvKiBPWE9TICovCi0j ZW5kaWYgLyogVkVPTCAqLwotI2VuZGlmIC8qIElYMzcwICovCi0KLSNpZmRlZiBWSU5UUgkJCQkv KiBUdXJuIG9mZiBpbnRlcnJ1cHQgY2hhcmFjdGVyICovCi0gICAgaWYgKHhsb2NhbCA9PSAwKQkJ CS8qIHNvIF5DXkMgY2FuIGJyZWFrIHVzIG91dCBvZiAqLwotICAgICAgdHRyYXcuY19jY1tWSU5U Ul0gPSAwOwkJLyogcGFja2V0IG1vZGUuICovCi0jZW5kaWYgLyogVklOVFIgKi8KLQotI2lmZGVm IFBsYW45Ci0gICAgaWYgKHA5dHR5cGFyaXR5KCduJykgPCAwKQotCXJldHVybiAtMTsKLSNlbHNl Ci0jaWZkZWYgQlNENDRPUlBPU0lYCi0gICAgZXJybm8gPSAwOwotI2lmZGVmIEJFT1NPUkJFQk9Y Ci0gICAgdHRyYXcuY19jY1tWTUlOXSA9IDA7CQkvKiBEUjcgY2FuIG9ubHkgcG9sbC4gKi8KLSNl bmRpZiAvKiBCRU9TT1JCRUJPWCAqLwotCi0jZGVmaW5lIFRFU1RJTkcyMzQKLSNpZmRlZiBURVNU SU5HMjM0Ci0gICAgaWYgKDEpIHsKLQlkZWJ1ZyhGMTAwLCJ0dHBrdCBURVNUSU5HMjM0IHJhd21v ZGUiLCIiLDApOwotCi0JLyogaWZsYWdzICovCi0JdHRyYXcuY19pZmxhZyAmPSB+KFBBUk1SS3xJ U1RSSVB8QlJLSU5UfElOTENSfElHTkNSfElDUk5MKTsKLQl0dHJhdy5jX2lmbGFnICY9IH4oSU5Q Q0t8SUdOUEFSfElYT058SVhPRkYpOwotCXR0cmF3LmNfaWZsYWcgfD0gSUdOQlJLOwotI2lmZGVm IElNQVhCRUwKLQl0dHJhdy5jX2lmbGFnICY9IH5JTUFYQkVMOwotI2VuZGlmCS8qIElNQVhCRUwg Ki8KLSNpZmRlZiBJWEFOWQotCXR0cmF3LmNfaWZsYWcgJj0gfklYQU5ZOwotI2VuZGlmCS8qIElY QU5ZICovCi0jaWZkZWYgSVVDTEMKLQl0dHJhdy5jX2lmbGFnICY9IH5JVUNMQzsKLSNlbmRpZiAv KiBJVUNMQyAqLwotCi0JLyogb2ZsYWdzICovCi0JdHRyYXcuY19vZmxhZyAmPSB+T1BPU1Q7Ci0j aWZkZWYgT1hUQUJTCi0JdHRyYXcuY19vZmxhZyAmPSB+T1hUQUJTOwotI2VuZGlmIC8qIE9YVEFC UyAqLwotI2lmZGVmIE9OT0NSCi0JdHRyYXcuY19vZmxhZyAmPSB+T05PQ1I7Ci0jZW5kaWYgLyog T05PQ1IgKi8KLSNpZmRlZiBPTkxSRVQKLQl0dHJhdy5jX29mbGFnICY9IH5PTkxSRVQ7Ci0jZW5k aWYgLyogT05MUkVUICovCi0jaWZkZWYgT05MQ1IKLQl0dHJhdy5jX29mbGFnICY9IH5PTkxDUjsK LSNlbmRpZiAvKiBPTkxDUiAqLwotCi0JLyogbGZsYWdzICovCi0JdHRyYXcuY19sZmxhZyAmPSB+ RUNITzsKLSNpZmRlZiBFQ0hPRQotCXR0cmF3LmNfbGZsYWcgJj0gfkVDSE9FOwotI2VuZGlmIC8q IEVDSE9FICovCi0jaWZkZWYgRUNIT05MCi0JdHRyYXcuY19sZmxhZyAmPSB+RUNIT05MOwotI2Vu ZGlmIC8qIEVDSE9OTCAqLwotI2lmZGVmIEVDSE9QUlQKLQl0dHJhdy5jX2xmbGFnICY9IH5FQ0hP UFJUOwotI2VuZGlmIC8qIEVDSE9QUlQgKi8KLSNpZmRlZiBFQ0hPS0UKLQl0dHJhdy5jX2xmbGFn ICY9IH5FQ0hPS0U7Ci0jZW5kaWYgLyogRUNIT0tFICovCi0jaWZkZWYgRUNIT0NUTAotCXR0cmF3 LmNfbGZsYWcgJj0gfkVDSE9DVEw7Ci0jZW5kaWYgLyogRUNIT0NUTCAqLwotI2lmZGVmIEFMVFdF UkFTRQotCXR0cmF3LmNfbGZsYWcgJj0gfkFMVFdFUkFTRTsKLSNlbmRpZiAvKiBBTFRXRVJBU0Ug Ki8KLSNpZmRlZiBFWFRQUk9DCi0JdHRyYXcuY19sZmxhZyAmPSB+RVhUUFJPQzsKLSNlbmRpZiAv KiBFWFRQUk9DICovCi0JdHRyYXcuY19sZmxhZyAmPSB+KElDQU5PTnxJU0lHfElFWFRFTnxUT1NU T1B8RkxVU0hPfFBFTkRJTik7Ci0jaWZkZWYgTk9LRVJOSU5GTwotCXR0cmF3LmNfbGZsYWcgfD0g Tk9LRVJOSU5GTzsKLSNlbmRpZgkvKiBOT0tFUk5JTkZPICovCi0JLyogdHRyYXcuY19sZmxhZyB8 PSBOT0ZMU0g7ICovCi0JdHRyYXcuY19sZmxhZyAmPSB+Tk9GTFNIOwotCi0JLyogY2ZsYWdzICov Ci0JdHRyYXcuY19jZmxhZyAmPSB+KENTSVpFfFBBUkVOQnxQQVJPREQpOwotCXR0cmF3LmNfY2Zs YWcgfD0gQ1M4fENSRUFEOwotI2lmZGVmIFZNSU4KLQl0dHJhdy5jX2NjW1ZNSU5dID0gMTsJCS8q IFN1cHBvc2VkbHkgbmVlZGVkIGZvciBBSVggKi8KLSNlbmRpZgkvKiBWTUlOICovCi0KLSAgICB9 Ci0jZW5kaWYgLyogVEVTVElORzIzNCAqLwotCi0gICAgZGVidWcoRjEwMCwidHRwa3QgY2FsbGlu ZyB0Y3NldGF0dHIoVENTRVRBVykiLCIiLDApOwotICAgIHggPSB0Y3NldGF0dHIodHR5ZmQsVENT QURSQUlOLCZ0dHJhdyk7Ci0gICAgZGVidWcoRjEwMSwidHRwa3QgQlNENDRPUlBPU0lYIHRjc2V0 YXR0ciIsIiIseCk7Ci0gICAgaWYgKHggPCAwKSB7Ci0JZGVidWcoRjEwMSwidHRwa3QgQlNENDRP UlBPU0lYIHRjc2V0YXR0ciBlcnJubyIsIiIsZXJybm8pOwotICAgICAgICByZXR1cm4oLTEpOwot ICAgIH0KLSNlbHNlIC8qIEJTRDQ0T1JQT1NJWCAqLwotICAgIHggPSBpb2N0bCh0dHlmZCxUQ1NF VEFXLCZ0dHJhdyk7Ci0gICAgZGVidWcoRjEwMSwidHRwa3QgQVRUU1YgaW9jdGwgVENTRVRBVyIs IiIseCk7Ci0gICAgaWYgKHggPCAwKSB7ICAvKiBzZXQgbmV3IG1vZGVzIC4gKi8KLQlkZWJ1ZyhG MTAxLCJ0dHBrdCBBVFRTViBpb2N0bCBUQ1NFVEFXIGVycm5vIiwiIixlcnJubyk7Ci0gICAgICAg IHJldHVybigtMSk7Ci0gICAgfQotI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLwotI2VuZGlmIC8q IFBsYW45ICovCi0gICAgdHZ0ZmxnID0gMDsKLSAgICBkZWJ1ZyhGMTAwLCJ0dHBrdCBvayIsIiIs MCk7Ci0gICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIEFUVFNWICovCi0KLSNpZmRlZiBDT0hFUkVO VAotI3VuZGVmIFNWT1JQT1NJWAotI2VuZGlmIC8qIENPSEVSRU5UICovCi0KLX0KLQotLyogIFQg VCBTIEUgVCBGIEwgTyBXICAtLSAgU2V0IGZsb3cgY29udHJvbCBpbW1lZGlhdGVseS4gICovCi0K LSNpZmRlZiBDT0hFUkVOVAotI2RlZmluZSBTVk9SUE9TSVgKLSNlbmRpZiAvKiBDT0hFUkVOVCAq LwotCi1pbnQKLXR0c2V0ZmxvdyhmbG93KSBpbnQgZmxvdzsgewotICAgIGlmICh0dHlmZCA8IDAp CQkJLyogQSBjaGFubmVsIG11c3QgYmUgb3BlbiAqLwotICAgICAgcmV0dXJuKC0xKTsKLQotICAg IGRlYnVnKEYxMDEsInR0c2V0ZmxvdyBmbG93IiwiIixmbG93KTsKLQotI2lmZGVmIFROX0NPTVBP UlQKLSAgICBpZiAobmV0Y29ubiAmJiBpc3RuY29tcG9ydCgpKSB7Ci0JZGVidWcoRjEwMSwidHRz ZXRmbG93IG5ldCBtb2RlbSIsIiIsdHRtZG0pOwotCXJldHVybih0bnNldGZsb3coZmxvdykpOwot ICAgIH0KLSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0jaWZkZWYgTkVUQ01ECi0gICAgaWYgKHR0 cGlwZSkgcmV0dXJuKDApOwotI2VuZGlmIC8qIE5FVENNRCAqLwotI2lmZGVmIE5FVFBUWQotICAg IGlmICh0dHB0eSkgcmV0dXJuKDApOwotI2VuZGlmIC8qIE5FVFBUWSAqLwotCi0jaWZkZWYgQ09N TUVOVAotICAgIC8qIFRoaXMgc2VlbXMgdG8gaHVydC4uLiAqLwotICAgIGlmIChmbG93ID09IEZM T19LRUVQKQotICAgICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgIGlm IChmbG93ID09IEZMT19SVFNDIHx8CQkvKiBIYXJkd2FyZSBmbG93IGNvbnRyb2wuLi4gKi8KLQlm bG93ID09IEZMT19EVFJDIHx8Ci0JZmxvdyA9PSBGTE9fRFRSVCkgewotCXR0aGZsb3coZmxvdywg MSwgJnR0cmF3KTsKLSNpZm5kZWYgU1ZPUlBPU0lYCi0JdHRyYXcuc2dfZmxhZ3MgJj0gflRBTkRF TTsJLyogVHVybiBvZmYgc29mdHdhcmUgZmxvdyBjb250cm9sICovCi0jZWxzZQotCXR0cmF3LmNf aWZsYWcgJj0gfihJWE9OfElYT0ZGKTsKLSNlbmRpZiAvKiBTVk9SUE9TSVggKi8KLQotICAgIH0g ZWxzZSBpZiAoZmxvdyA9PSBGTE9fWE9OWCkgewkvKiBYb24vWG9mZi4uLiAqLwotCi0jaWZuZGVm IFNWT1JQT1NJWAotCXR0cmF3LnNnX2ZsYWdzIHw9IFRBTkRFTTsKLSNlbHNlCi0JdHRyYXcuY19p ZmxhZyB8PSAoSVhPTnxJWE9GRik7Ci0jZW5kaWYgLyogU1ZPUlBPU0lYICovCi0JdHRoZmxvdyhG TE9fUlRTQywgMCwgJnR0cmF3KTsJLyogVHVybiBvZmYgaGFyZHdhcmUgZmxvdyBjb250cm9sICov Ci0KLSAgICB9IGVsc2UgaWYgKGZsb3cgPT0gRkxPX05PTkUpIHsJLyogTm8gZmxvdyBjb250cm9s ICovCi0KLSNpZm5kZWYgU1ZPUlBPU0lYCi0JdHRyYXcuc2dfZmxhZ3MgJj0gflRBTkRFTTsJLyog VHVybiBvZmYgc29mdHdhcmUgZmxvdyBjb250cm9sICovCi0jZWxzZQotCXR0cmF3LmNfaWZsYWcg Jj0gfihJWE9OfElYT0ZGKTsKLSNlbmRpZiAvKiBTVk9SUE9TSVggKi8KLQl0dGhmbG93KEZMT19S VFNDLCAwLCAmdHRyYXcpOwkvKiBUdXJuIG9mZiBhbnkgaGFyZHdhcmUgZi9jIHRvbyAqLwotICAg IH0KLQotLyogU2V0IHRoZSBuZXcgbW9kZXMuLi4gKi8KLQotI2lmbmRlZiBTVk9SUE9TSVgJCQkv KiBCU0QgYW5kIGZyaWVuZHMgKi8KLSNpZmRlZiBCRUxMVjEwCi0gICAgaWYgKGlvY3RsKHR0eWZk LFRJT0NTRVRQLCZ0dHJhdykgPCAwKQotICAgICAgcmV0dXJuKC0xKTsKLSNlbHNlCi0jaWZuZGVm IE1JTklYMgotICAgIGlmIChzdHR5KHR0eWZkLCZ0dHJhdykgPCAwKQotICAgICAgcmV0dXJuKC0x KTsKLSNlbmRpZiAvKiBNSU5JWDIgKi8KLSNlbmRpZiAvKiBCRUxMVjEwICovCi0jZWxzZQotI2lm ZGVmIEJTRDQ0T1JQT1NJWAkJCS8qIFBPU0lYICovCi0gICAgaWYgKHRjc2V0YXR0cih0dHlmZCxU Q1NBRFJBSU4sJnR0cmF3KSA8IDApCi0gICAgICByZXR1cm4oLTEpOwotI2Vsc2UJCQkJCS8qIFN5 c3RlbSBWICovCi0gICAgaWYgKGlvY3RsKHR0eWZkLFRDU0VUQVcsJnR0cmF3KSA8IDApCi0gICAg ICByZXR1cm4oLTEpOwotI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLwotI2VuZGlmIC8qIFNWT1JQ T1NJWCAqLwotICAgIHJldHVybigwKTsKLX0KLSNpZmRlZiBDT0hFUkVOVAotI3VuZGVmIFNWT1JQ T1NJWAotI2VuZGlmIC8qIENPSEVSRU5UICovCi0KLS8qICBUIFQgViBUIC0tIENvbmRpdGlvbiBj b21tdW5pY2F0aW9uIGRldmljZSBmb3IgdXNlIGFzIHZpcnR1YWwgdGVybWluYWwuICovCi0KLWlu dAotI2lmZGVmIENLX0FOU0lDCi10dHZ0KGxvbmcgc3BlZWQsIGludCBmbG93KQotI2Vsc2UKLXR0 dnQoc3BlZWQsZmxvdykgbG9uZyBzcGVlZDsgaW50IGZsb3c7Ci0jZW5kaWYgLyogQ0tfQU5TSUMg Ki8KLS8qIHR0dnQgKi8gewotICAgIGludCBzLCBzMiwgeDsKLQotICAgIGRlYnVnKEYxMDEsInR0 dnQgdHR5ZmQiLCIiLHR0eWZkKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dHZ0IHR2dGZsZyIsIiIsdHZ0 ZmxnKTsKLSAgICBkZWJ1ZyhGMTExLCJ0dHZ0IHNwZWVkIixja2l0b2EodHRzcGVlZCksc3BlZWQp OwotICAgIGRlYnVnKEYxMTEsInR0dnQgZmxvdyIsY2tpdG9hKHR0ZmxvdyksZmxvdyk7Ci0gICAg ZGVidWcoRjExMSwidHR2dCBjdXJjYXJyIixja2l0b2EodHRjYXJyKSxjdXJjYXJyKTsKLQotLyog Tm90ZTogTmV0QlNEIGFuZCBtYXliZSBvdGhlciBCU0Q0NHMgaGF2ZSBjZm1ha2VyYXcoKSAqLwot LyogTWF5YmUgaXQgd291bGQgYmUgc2ltcGxlciB0byB1c2UgaXQuLi4gKi8KLQotICAgIHR0cG1z ayA9IDB4ZmY7Ci0jaWZkZWYgTk9MT0NBTAotICAgIHJldHVybihjb25iaW4oKGNoYXIpZXNjY2hy KSk7Ci0jZWxzZQotICAgIGlmICh0dHlmZCA8IDApIHsJCQkvKiBOb3Qgb3Blbi4gKi8KLQlpZiAo dHRjaGsoKSA8IDApCi0JICByZXR1cm4oLTEpOwotCWVsc2UJCQkJLyogQnV0IG1heWJlIHNvbWV0 aGluZyBidWZmZXJlZC4gKi8KLQkgIHJldHVybigwKTsKLSAgICB9Ci0jaWZkZWYgTkVUQ01ECi0g ICAgaWYgKHR0cGlwZSkgcmV0dXJuKDApOwotI2VuZGlmIC8qIE5FVENNRCAqLwotI2lmZGVmIE5F VFBUWQotICAgIGlmICh0dHB0eSkgcmV0dXJuKDApOwotI2VuZGlmIC8qIE5FVFBUWSAqLwotI2lm ZGVmIE5FVENPTk4KLSAgICBpZiAobmV0Y29ubikgewotI2lmZGVmIFRDUFNPQ0tFVAotI2lmZGVm IFRDUF9OT0RFTEFZCi0gICAgICAgIHsKLQkgICAgZXh0ZXJuIGludCB0Y3Bfbm9kZWxheTsKLQkg ICAgaWYgKHR0bmV0ID09IE5FVF9UQ1BCKSB7Ci0JCWlmIChub2RlbGF5X3NhdiA+IC0xKSB7Ci0J CSAgICBub19kZWxheSh0dHlmZCxub2RlbGF5X3Nhdik7Ci0JCSAgICBub2RlbGF5X3NhdiA9IC0x OwotCQl9Ci0JICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIFRDUF9OT0RFTEFZICovCi0jaWZk ZWYgVE5fQ09NUE9SVAotICAgICAgICBpZiAoaXN0bmNvbXBvcnQoKSkgewotICAgICAgICAgICAg aW50IHJjID0gLTE7Ci0gICAgICAgICAgICBpZiAodHZ0ZmxnICE9IDAgJiYgc3BlZWQgPT0gdHRz cGVlZCAmJiBmbG93ID09IHR0ZmxvdwotICAgICAgICAgICAgICAgICAvKiAmJiB0dGNhcnIgPT0g Y3VyY2FyciAqLyApIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dHZ0IG1vZGVzIGFs cmVhZHkgc2V0LCBza2lwcGluZy4uLiIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKDAp OwkJCS8qIEFscmVhZHkgYmVlbiBjYWxsZWQuICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAg ICBpZiAoZmxvdyAhPSB0dGZsb3cpIHsKLSAgICAgICAgICAgICAgICBpZiAoKHJjID0gdG5zZXRm bG93KGZsb3cpKSA8IDApCi0JCSAgcmV0dXJuKHJjKTsKLSAgICAgICAgICAgICAgICB0dGZsb3cg PSBmbG93OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHNwZWVkICE9IHR0c3BlZWQp IHsKLSAgICAgICAgICAgICAgICBpZiAoc3BlZWQgPD0gMCkgCi0JCSAgc3BlZWQgPSB0bmNfZ2V0 X2JhdWQoKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmICgocmMgPSB0bmNfc2V0X2JhdWQoc3Bl ZWQpKSA8IDApCi0JCSAgcmV0dXJuKHJjKTsKLSAgICAgICAgICAgICAgICB0dHNwZWVkID0gc3Bl ZWQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0bmNfc2V0X2RhdGFzaXplKDgpOwotCSAg ICB0bmNfc2V0X3N0b3BzaXplKHN0b3BiaXRzKTsKLQotI2lmZGVmIEhXUEFSSVRZCi0gICAgICAg ICAgICBpZiAoaHdwYXJpdHkpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGh3cGFyaXR5KSB7 Ci0JCSAgY2FzZSAnZSc6CQkvKiBFdmVuICovCi0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYx MDAsInR0cmVzIDggYml0cyArIGV2ZW4gcGFyaXR5IiwiIiwwKTsKLSAgICAgICAgICAgICAgICAg ICAgdG5jX3NldF9wYXJpdHkoMyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCQkgIGNh c2UgJ28nOgkJLyogT2RkICovCi0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0cmVz IDggYml0cyArIG9kZCBwYXJpdHkiLCIiLDApOwotICAgICAgICAgICAgICAgICAgICB0bmNfc2V0 X3Bhcml0eSgyKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0JCSAgY2FzZSAnbSc6CQkv KiBNYXJrICovCi0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0cmVzIDggYml0cyAr IGludmFsaWQgcGFyaXR5OiBtYXJrIiwiIiwwKTsKLSAgICAgICAgICAgICAgICAgICAgdG5jX3Nl dF9wYXJpdHkoNCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCQkgIGNhc2UgJ3MnOgkJ LyogU3BhY2UgKi8KLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwidHRyZXMgOCBiaXRz ICsgaW52YWxpZCBwYXJpdHk6IHNwYWNlIiwiIiwwKTsKLSAgICAgICAgICAgICAgICAgICAgdG5j X3NldF9wYXJpdHkoNSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIEhXUEFSSVRZICovCi0gICAgICAg ICAgICB7Ci0gICAgICAgICAgICAgICAgdG5jX3NldF9wYXJpdHkoMSk7CS8qIE5vbmUgKi8KLSAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIHR2dGZsZyA9IDE7Ci0gICAgICAgICAgICByZXR1cm4o MCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0jZW5kaWYgLyogVENQU09D S0VUICovCi0JdHZ0ZmxnID0gMTsJCQkvKiBOZXR3b3JrIGNvbm5lY3Rpb25zLi4uICovCi0JZGVi dWcoRjEwMCwidHR2dCBuZXR3b3JrIGNvbm5lY3Rpb24sIHNraXBwaW5nLi4uIiwiIiwwKTsKLQly ZXR1cm4oMCk7CQkJLyogLi4uIHJlcXVpcmUgbm8gc3BlY2lhbCBzZXR1cCAqLwotICAgIH0KLSNl bmRpZiAvKiBORVRDT05OICovCi0KLSAgICBpZiAodHZ0ZmxnICE9IDAgJiYgc3BlZWQgPT0gdHRz cGVlZCAmJiBmbG93ID09IHR0ZmxvdwotCS8qICYmIHR0Y2FyciA9PSBjdXJjYXJyICovICkKLSAg ICAgIHsKLQkgIGRlYnVnKEYxMDAsInR0dnQgbW9kZXMgYWxyZWFkeSBzZXQsIHNraXBwaW5nLi4u IiwiIiwwKTsKLQkgIHJldHVybigwKTsJCQkvKiBBbHJlYWR5IGJlZW4gY2FsbGVkLiAqLwotICAg ICAgfQotCi0gICAgaWYgKHR0ZmRmbGcKLSNpZm5kZWYgUGxhbjkKLQkmJiAhaXNhdHR5KHR0eWZk KQotI2VuZGlmIC8qIFBsYW45ICovCi0JKSB7Ci0JZGVidWcoRjEwMCwidHR2dCB1c2luZyBleHRl cm5hbCBmZCwgc2tpcHBpbmcuLi4iLCIiLDApOwotCXJldHVybigwKTsKLSAgICB9Ci0KLSAgICBk ZWJ1ZyhGMTAwLCJ0dHZ0IHNldHRpbmcgbW9kZXMuLi4iLCIiLDApOwotCi0gICAgaWYgKHhsb2Nh bCkgewkJCS8qIEZvciBleHRlcm5hbCBsaW5lcy4uLiAqLwotCXMyID0gKGludCkgKHNwZWVkIC8g MTBMKTsKLQlzID0gdHRzc3BkKHMyKTsJCQkvKiBDaGVjay9zZXQgdGhlIHNwZWVkICovCi0JY2Fy cmN0bCgmdHR0dnQsIGZsb3cgIT0gRkxPX0RJQUwgLyogRG8gY2FycmllciBjb250cm9sICovCi0J CSYmICh0dGNhcnIgPT0gQ0FSX09OIHx8ICh0dGNhcnIgPT0gQ0FSX0FVVCAmJiB0dG1kbSAhPSAw KSkpOwotICAgIH0gZWxzZQotICAgICAgcyA9IHMyID0gLTE7Ci0KLSNpZmRlZiBDT0hFUkVOVAot I2RlZmluZSBTVk9SUE9TSVgKLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotCi0jaWZuZGVmIFNWT1JQ T1NJWAotICAgIC8qIEJlcmtlbGV5LCBWNywgZXRjICovCi0gICAgaWYgKGZsb3cgPT0gRkxPX1JU U0MgfHwJCS8qIEhhcmR3YXJlIGZsb3cgY29udHJvbCAqLwotCWZsb3cgPT0gRkxPX0RUUkMgfHwK LQlmbG93ID09IEZMT19EVFJUKSB7Ci0JdHRoZmxvdyhmbG93LCAxLCAmdHR0dnQpOwotCWRlYnVn KEYxMDAsInR0dnQgaGFyZCBmbG93LCBUQU5ERU0gb2ZmIiwiIiwwKTsKLQl0dHR2dC5zZ19mbGFn cyAmPSB+VEFOREVNOwkvKiBUdXJuIG9mZiBzb2Z0d2FyZSBmbG93IGNvbnRyb2wgKi8KLSAgICB9 IGVsc2UgaWYgKGZsb3cgPT0gRkxPX1hPTlgpIHsJLyogWG9uL1hvZmYgZmxvdyBjb250cm9sICov Ci0JZGVidWcoRjEwMCwidHR2dCBUQU5ERU0gb24iLCIiLDApOwotCXR0dHZ0LnNnX2ZsYWdzIHw9 IFRBTkRFTTsJLyogQXNrIGZvciBpdC4gKi8KLQl0dGhmbG93KGZsb3csIDAsICZ0dHR2dCk7CS8q IFR1cm4gb2ZmIGhhcmR3YXJlIGYvYyAqLwotICAgIH0gZWxzZSBpZiAoZmxvdyA9PSBGTE9fTk9O RSkgewotCWRlYnVnKEYxMDAsInR0dnQgbm8gZmxvdywgVEFOREVNIG9mZiwgUkFXIG9uIiwiIiww KTsKLQl0dHR2dC5zZ19mbGFncyAmPSB+VEFOREVNOwkvKiBUdXJuIG9mZiBzb2Z0d2FyZSBmbG93 IGNvbnRyb2wgKi8KLQl0dGhmbG93KGZsb3csIDAsICZ0dHR2dCk7CS8qIFR1cm4gb2ZmIGFueSBo YXJkd2FyZSBmL2MgdG9vICovCi0JdHR0dnQuc2dfZmxhZ3MgfD0gUkFXOwkJLyogRW50ZXIgcmF3 IG1vZGUgKi8KLSAgICB9IGVsc2UgaWYgKGZsb3cgPT0gRkxPX0tFRVApIHsJLyogS2VlcCBkZXZp Y2UncyBvcmlnaW5hbCBzZXR0aW5nICovCi0JZGVidWcoRjEwMCwidHR2dCBrZWVwaW5nIG9yaWdp bmFsIFRBTkRFTSIsIiIsMCk7Ci0JdHR0dnQuc2dfZmxhZ3MgJj0gflRBTkRFTTsKLQl0dHR2dC5z Z19mbGFncyB8PSAodHRvbGQuc2dfZmxhZ3MgJiBUQU5ERU0pOwotCS8qIE5PVEU6IFdlIHNob3Vs ZCBhbHNvIGhhbmRsZSBoYXJkd2FyZSBmbG93IGNvbnRyb2wgaGVyZSEgKi8KLSAgICB9Ci0gICAg dHR0dnQuc2dfZmxhZ3MgfD0gUkFXOyAgICAgICAgICAgICAgLyogUmF3IG1vZGUgaW4gYWxsIGNh c2VzICovCi0jaWZkZWYgVE9XRVIxCi0gICAgdHR0dnQuc2dfZmxhZ3MgJj0gfihFQ0hPfEFOWVAp OyAgICAgLyogTm8gZWNobyBvciBwYXJpdHkgKi8KLSNlbHNlCi0gICAgdHR0dnQuc2dfZmxhZ3Mg Jj0gfkVDSE87ICAgICAgICAgICAgLyogTm8gZWNobyAqLwotI2VuZGlmIC8qIFRPV0VSMSAqLwot Ci0jaWZkZWYgQkVMTFYxMAotICAgIGlmIChpb2N0bCh0dHlmZCxUSU9DU0VUUCwmdHR0dnQpIDwg MCkgLyogU2V0IHRoZSBuZXcgbW9kZXMgKi8KLSAgICAgIHJldHVybigtMSk7Ci0jZWxzZQotICAg IGlmIChzdHR5KHR0eWZkLCZ0dHR2dCkgPCAwKQkJLyogU2V0IHRoZSBuZXcgbW9kZXMgKi8KLSAg ICAgIHJldHVybigtMSk7Ci0jZW5kaWYgLyogQkVMTFYxMCAqLwotCi0jZWxzZSAvKiBJdCBpcyBB VFRTViBvciBQT1NJWCAqLwotCi0gICAgaWYgKGZsb3cgPT0gRkxPX1hPTlgpIHsJCS8qIFNvZnR3 YXJlIGZsb3cgY29udHJvbCAqLwotCXR0dHZ0LmNfaWZsYWcgfD0gKElYT058SVhPRkYpOwkvKiBP biBpZiByZXF1ZXN0ZWQuICovCi0JdHRoZmxvdyhmbG93LCAwLCAmdHR0dnQpOwkvKiBUdXJuIG9m ZiBoYXJkd2FyZSBmL2MgKi8KLQlkZWJ1ZyhGMTAwLCJ0dHZ0IFNWT1JQT1NJWCBmbG93IFhPTi9Y T0ZGIiwiIiwwKTsKLSAgICB9IGVsc2UgaWYgKGZsb3cgPT0gRkxPX05PTkUpIHsJLyogTk9ORSAq LwotCXR0dHZ0LmNfaWZsYWcgJj0gfihJWE9OfElYT0ZGKTsJLyogVHVybiBvZmYgWG9uL1hvZmYg Ki8KLQl0dGhmbG93KGZsb3csIDAsICZ0dHR2dCk7CS8qIFR1cm4gb2ZmIGhhcmR3YXJlIGYvYyAq LwotCWRlYnVnKEYxMDAsInR0dnQgU1ZPUlBPU0lYIGZsb3cgTk9ORSIsIiIsMCk7Ci0gICAgfSBl bHNlIGlmIChmbG93ID09IEZMT19LRUVQKSB7Ci0JdHR0dnQuY19pZmxhZyAmPSB+KElYT058SVhP RkYpOwkvKiBUdXJuIG9mZiBYb24vWG9mZiBmbGFncyAqLwotCXR0dHZ0LmNfaWZsYWcgfD0gKHR0 b2xkLmNfaWZsYWcgJiAoSVhPTnxJWE9GRikpOyAvKiBPUiBpbiBvbGQgb25lcyAqLwotI2lmZGVm IFBPU0lYX0NSVFNDVFMKLSAgICAgICAgdHR0dnQuY19jZmxhZyAmPSB+Q1JUU0NUUzsJLyogVHVy biBvZmYgUlRTL0NUUyBmbGFnICovCi0gICAgICAgIHR0dHZ0LmNfY2ZsYWcgfD0gKHR0b2xkLmNf Y2ZsYWcgJiBDUlRTQ1RTKTsgLyogT1IgaW4gb2xkIG9uZSAqLwotI2VuZGlmIC8qIFBPU0lYX0NS VFNDVFMgKi8KLQlkZWJ1ZyhGMTAwLCJ0dHZ0IFNWT1JQT1NJWCBmbG93IEtFRVAiLCIiLDApOwot ICAgIH0gZWxzZSBpZiAoZmxvdyA9PSBGTE9fUlRTQyB8fAkvKiBIYXJkd2FyZSBmbG93IGNvbnRy b2wgKi8KLQkgICAgICAgZmxvdyA9PSBGTE9fRFRSQyB8fAotCSAgICAgICBmbG93ID09IEZMT19E VFJUKSB7Ci0JdHR0dnQuY19pZmxhZyAmPSB+KElYT058SVhPRkYpOwkvKiAoMTk2KSAqLwotCXR0 aGZsb3coZmxvdywgMSwgJnR0dHZ0KTsKLQlkZWJ1ZyhGMTAwLCJ0dHZ0IFNWT1JQT1NJWCBmbG93 IEhBUkQiLCIiLDApOwotICAgIH0KLSNpZm5kZWYgT1hPUwotI2lmZGVmIENPSEVSRU5UCi0gICAg dHR0dnQuY19sZmxhZyAmPSB+KElTSUd8SUNBTk9OfEVDSE8pOwotI2Vsc2UKLSAgICB0dHR2dC5j X2xmbGFnICY9IH4oSVNJR3xJQ0FOT058RUNIT3xJRVhURU4pOwotI2VuZGlmIC8qIENPSEVSRU5U ICovCi0jaWZkZWYgUU5YCi0gICAgLyogTmVlZGVkIGZvciBod2ZjICovCi0gICAgaWYgKGZsb3cg PT0gRkxPX1JUU0MgfHwgZmxvdyA9PSBGTE9fRFRSQyB8fCBmbG93ID09IEZMT19EVFJUKQotICAg ICAgdHR0dnQuY19sZmxhZyB8PSBJRVhURU47Ci0jZW5kaWYgLyogUU5YICovCi0jZWxzZSAvKiBP WE9TICovCi0gICAgdHR0dnQuY19sZmxhZyAmPSB+KElTSUd8SUNBTk9OfEVDSE8pOwotICAgIHR0 dHZ0LmNfY2NbVkRJU0NBUkRdID0gdHR0dnQuY19jY1tWTE5FWFRdID0gQ0RJU0FCTEU7Ci0jZW5k aWYgLyogT1hPUyAqLwotCi0gICAgdHR0dnQuY19pZmxhZyB8PSAoSUdOQlJLfElHTlBBUik7Ci0K LS8qIFN0b3AgYml0cyAqLwotCi0jaWZkZWYgQ1NUT1BCCi0gICAgaWYgKHhsb2NhbCkgewotCWlm IChzdG9wYml0cyA9PSAyKSB7Ci0JICAgIHR0dHZ0LmNfY2ZsYWcgfD0gQ1NUT1BCOwkvKiAyIHN0 b3AgYml0cyAqLwotCSAgICBkZWJ1ZyhGMTAwLCJ0dHZ0IDIgc3RvcGJpdHMiLCIiLDApOwotCX0g ZWxzZSBpZiAoc3RvcGJpdHMgPT0gMSkgewotCSAgICB0dHR2dC5jX2NmbGFnICY9IH4oQ1NUT1BC KTsJLyogMSBzdG9wIGJpdCAqLwotCSAgICBkZWJ1ZyhGMTAwLCJ0dHZ0IDEgc3RvcGJpdCIsIiIs MCk7Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBDU1RPUEIgKi8KLQotLyogUGFyaXR5ICovCi0KLSNp ZmRlZiBIV1BBUklUWQotICAgIGlmIChod3Bhcml0eSAmJiB4bG9jYWwpIHsJCS8qIEhhcmR3YXJl IHBhcml0eSAqLwotI2lmZGVmIENPTU1FTlQKLS8qIFVuY29tbWVudCB0aGlzIG9ubHkgaWYgbmVl ZGVkIC0tIEkgZG9uJ3QgdGhpbmsgaXQgaXMgKi8KLQl0dHJhdy5jX2NmbGFnICY9IH4oQ1NJWkUp OwkvKiBDbGVhciBvdXQgY2hhcmFjdGVyLXNpemUgbWFzayAqLwotCXR0cmF3LmNfY2ZsYWcgfD0g Q1M4OwkJLyogQW5kIHNldCBpdCB0byA4ICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2lmZGVm IElHTlBBUgotCWRlYnVnKEYxMDEsInR0dnQgaHdwYXJpdHkgSUdOUEFSIiwiIixJR05QQVIpOwot CXR0dHZ0LmNfaWZsYWcgfD0gSUdOUEFSOwkvKiBEb24ndCBkaXNjYXJkIGluY29taW5nIGJ5dGVz ICovCi0jZW5kaWYgLyogSUdOUEFSICovCi0JdHR0dnQuY19jZmxhZyB8PSBQQVJFTkI7CS8qIEVu YWJsZSBwYXJpdHkgKi8KLQotCXN3aXRjaCAoaHdwYXJpdHkpIHsKLQkgIGNhc2UgJ2UnOgkJCS8q IEV2ZW4gKi8KLQkgICAgdHR0dnQuY19jZmxhZyAmPSB+KFBBUk9ERCk7Ci0JICAgIGRlYnVnKEYx MDAsInR0dnQgOCBiaXRzICsgZXZlbiBwYXJpdHkiLCIiLDApOwotCSAgICBicmVhazsKLQkgIGNh c2UgJ28nOgkJCS8qIE9kZCAqLwotCSAgICB0dHR2dC5jX2NmbGFnIHw9IFBBUk9ERDsKLQkgICAg ZGVidWcoRjEwMCwidHR2dCA4IGJpdHMgKyBvZGQgcGFyaXR5IiwiIiwwKTsKLQkgICAgYnJlYWs7 Ci0JICBjYXNlICdtJzoJCQkvKiBNYXJrICovCi0JICBjYXNlICdzJzoJCQkvKiBTcGFjZSAqLwot CSAgICAvKiBQQVJFWFQgaXMgbWVudGlvbmVkIGluIFNWSUQgYnV0IHRoZSBkZXRhaWxzIGFyZSBu b3QgZ2l2ZW4uICovCi0JICAgIC8qIFBBUkVYVCBpcyBub3QgaW5jbHVkZWQgaW4gUE9TSVggSVNP L0lFQyA5OTQ1LTEuICovCi0JICAgIGRlYnVnKEYxMDAsInR0dnQgOCBiaXRzICsgaW52YWxpZCBw YXJpdHkiLCIiLDApOwotCSAgICBicmVhazsKLQl9Ci0gICAgfSBlbHNlIHsJCQkJLyogV2UgaGFu ZGxlIHBhcml0eSBvdXJzZWx2ZXMgKi8KLSNlbmRpZiAvKiBIV1BBUklUWSAqLwotCXR0dHZ0LmNf Y2ZsYWcgJj0gfihQQVJFTkIpOwkvKiBEb24ndCBlbmFibGUgcGFyaXR5ICovCi0jaWZkZWYgSFdQ QVJJVFkKLSAgICB9Ci0jZW5kaWYgLyogSFdQQVJJVFkgKi8KLQotI2lmZGVmIEFUVFNWCi0jaWZk ZWYgQlNENDQKLSAgICAvKiBUaGluZ3Mgbm90IHRvIGRvLi4uICovCi0gICAgdHR0dnQuY19pZmxh ZyAmPSB+KElOTENSfElHTkNSfElDUk5MfElOUENLfElTVFJJUHxJWEFOWSk7Ci0jZWxzZQotICAg IHR0dHZ0LmNfaWZsYWcgJj0gfihJTkxDUnxJR05DUnxJQ1JOTHxJVUNMQ3xJTlBDS3xJU1RSSVB8 SVhBTlkpOwotI2VuZGlmIC8qIEJTRDQ0ICovCi0jZWxzZSAvKiBQT1NJWCAqLwotICAgIHR0dHZ0 LmNfaWZsYWcgJj0gfihJTkxDUnxJR05DUnxJQ1JOTHxJTlBDS3xJU1RSSVApOwotI2VuZGlmIC8q IEFUVFNWICovCi0gICAgdHR0dnQuY19jZmxhZyAmPSB+KENTSVpFKTsJCS8qIFplcm8gb3V0IHRo ZSBjaGFyIHNpemUgZmllbGQgKi8KLSAgICB0dHR2dC5jX2NmbGFnIHw9IChDUzh8Q1JFQUR8SFVQ Q0wpOwkvKiBDaGFyIHNpemUgOCwgZW5hYmxlIHJlY2VpdmVyLCBodXAgKi8KLSAgICB0dHR2dC5j X29mbGFnICY9IH5PUE9TVDsJCS8qIERvbid0IHBvc3Rwcm9jZXNzIG91dHB1dCAqLwotI2lmbmRl ZiBWRU9GIC8qIERHVVggdGVybWlvIGhhcyBWRU9GIGF0IGVudHJ5IDQsIHNlZSBjb21tZW50IGFi b3ZlICovCi0gICAgdHR0dnQuY19jY1s0XSA9IDE7Ci0jZWxzZQotI2lmbmRlZiBPWE9TCi0jaWZk ZWYgVk1JTgotICAgIHR0dHZ0LmNfY2NbVk1JTl0gPSAxOwotI2VuZGlmIC8qIFZNSU4gKi8KLSNl bHNlIC8qIE9YT1MgKi8KLSAgICB0dHR2dC5jX21pbiA9IDE7Ci0jZW5kaWYgLyogT1hPUyAqLwot I2VuZGlmIC8qIFZFT0YgKi8KLSNpZm5kZWYgVkVPTAkvKiBER1VYIHRlcm1pbyBoYXMgVkVPTCBh dCBlbnRyeSA1LCBzZWUgY29tbWVudCBhYm92ZSAqLwotICAgIHR0dHZ0LmNfY2NbNV0gPSAwOwot I2Vsc2UKLSNpZm5kZWYgT1hPUwotI2lmZGVmIFZUSU1FCi0gICAgdHR0dnQuY19jY1tWVElNRV0g PSAwOwotI2VuZGlmIC8qIFZUSU1FICovCi0jZWxzZSAvKiBPWE9TICovCi0gICAgdHR0dnQuY190 aW1lID0gMDsKLSNlbmRpZiAvKiBPWE9TICovCi0jZW5kaWYgLyogVkVPTCAqLwotCi0jaWZkZWYg UGxhbjkKLSAgICBpZiAocDl0dHlwYXJpdHkoJ24nKSA8IDApCi0gICAgICByZXR1cm4gLTE7Ci0j ZWxzZQotI2lmZGVmIEJTRDQ0T1JQT1NJWAotICAgIGVycm5vID0gMDsKLSNpZmRlZiBCRU9TT1JC RUJPWAotICAgIHR0dHZ0LmNfY2NbVk1JTl0gPSAwOwkJLyogRFI3IGNhbiBvbmx5IHBvbGwuICov Ci0jZW5kaWYgLyogQkVPU09SQkVCT1ggKi8KLQotICAgIHggPSB0Y3NldGF0dHIodHR5ZmQsVENT QURSQUlOLCZ0dHR2dCk7Ci0gICAgZGVidWcoRjEwMSwidHR2dCBCU0Q0NE9SUE9TSVggdGNzZXRh dHRyIiwiIix4KTsKLSAgICBpZiAoeCA8IDApIHsKLQlkZWJ1ZyhGMTAxLCJ0dHZ0IEJTRDQ0T1JQ T1NJWCB0Y3NldGF0dHIgZXJybm8iLCIiLGVycm5vKTsKLQlyZXR1cm4oLTEpOwotICAgIH0KLSNl bHNlIC8qIEFUVFNWICovCi0gICAgeCA9IGlvY3RsKHR0eWZkLFRDU0VUQVcsJnR0dHZ0KTsKLSAg ICBkZWJ1ZyhGMTAxLCJ0dHZ0IEFUVFNWIGlvY3RsIFRDU0VUQVciLCIiLHgpOwotICAgIGlmICh4 IDwgMCkgewkJCS8qIHNldCBuZXcgbW9kZXMgLiAqLwotCWRlYnVnKEYxMDEsInR0dnQgQVRUU1Yg aW9jdGwgVENTRVRBVyBlcnJubyIsIiIsZXJybm8pOwotCXJldHVybigtMSk7CQotICAgIH0KLSNl bmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KLSNlbmRpZiAvKiBQbGFuOSAqLwotI2VuZGlmIC8qIEFU VFNWICovCi0KLSAgICB0dHNwZWVkID0gc3BlZWQ7CQkJLyogRG9uZSwgcmVtZW1iZXIgaG93IHdl IHdlcmUgKi8KLSAgICB0dGZsb3cgPSBmbG93OwkJCS8qIGNhbGxlZCwgc28gd2UgY2FuIGRlY2lk ZSBob3cgdG8gKi8KLSAgICB0dnRmbGcgPSAxOwkJCQkvKiByZXNwb25kIG5leHQgdGltZS4gKi8K LSAgICBkZWJ1ZyhGMTAwLCJ0dHZ0IG9rIiwiIiwwKTsKLSAgICByZXR1cm4oMCk7Ci0KLSNpZmRl ZiBDT0hFUkVOVAotI3VuZGVmIFNWT1JQT1NJWAotI2VuZGlmIC8qIENPSEVSRU5UICovCi0KLSNl bmRpZiAvKiBOT0xPQ0FMICovCi19Ci0KLSNpZm5kZWYgTk9MT0NBTAotCi0vKiBTZXJpYWwgc3Bl ZWQgZGVwYXJ0bWVudCAuIC4gLiAqLwotCi0vKgotICBTQ08gT1NSNS4wLnggbWlnaHQgb3IgbWln aHQgbm90IHN1cHBvcnQgaGlnaCBzcGVlZHMuICBTb21ldGltZXMgdGhleSBhcmUgbm90Ci0gIGRl ZmluZWQgaW4gdGhlIGhlYWRlciBmaWxlcyBidXQgdGhleSBhcmUgc3VwcG9ydGVkIChlLmcuIHdo ZW4gYnVpbGRpbmcgd2l0aAotICBVREsgY29tcGlsZXIgcmF0aGVyIHRoYW4gL2Jpbi9jYyksIHNv bWV0aW1lcyB2aWNlIHZlcnNhLiAgRXZlbiB0aG91Z2ggNS4wLjQKLSAgd2FzIHRoZSBmaXJzdCBy ZWxlYXNlIHRoYXQgY2FtZSB3aXRoIGhpZ2ggc2VyaWFsIHNwZWVkcyBzdGFuZGFyZCwgcmVsZWFz ZXMKLSAgYmFjayB0byA1LjAuMCBjb3VsZCB1c2UgdGhlbSBpZiBjZXJ0YWluIHBhdGNoZXMgKG9y ICJzdXBwbGVtZW50cyIpIHdlcmUKLSAgYXBwbGllZCB0byB0aGUgU0lPIGRyaXZlci4gIFBsdXMg YSBsb3Qgb2YgU0NPIGluc3RhbGxhdGlvbnMgcnVuIHRoaXJkLXBhcnR5Ci0gIGRyaXZlcnMuCi0q LwotI2lmZGVmIENLX1NDT1Y1Ci0jaWZuZGVmIEIzODQwMAotI2RlZmluZQlCMzg0MDAJMDAwMDAx NwotI2VuZGlmIC8qIEIzODQwMCAqLwotI2lmbmRlZiBCNTc2MDAKLSNkZWZpbmUJQjU3NjAwCTAw MDAwMjEKLSNlbmRpZiAvKiBCNTc2MDAgKi8KLSNpZm5kZWYgQjc2ODAwCi0jZGVmaW5lCUI3Njgw MAkwMDAwMDIyCi0jZW5kaWYgLyogQjc2ODAwICovCi0jaWZuZGVmIEIxMTUyMDAKLSNkZWZpbmUJ QjExNTIwMAkwMDAwMDIzCi0jZW5kaWYgLyogQjExNTIwMCAqLwotI2lmbmRlZiBCMjMwNDAwCi0j ZGVmaW5lCUIyMzA0MDAJMDAwMDAyNAotI2VuZGlmIC8qIEIyMzA0MDAgKi8KLSNpZm5kZWYgQjQ2 MDgwMAotI2RlZmluZQlCNDYwODAwCTAwMDAwMjUKLSNlbmRpZiAvKiBCNDYwODAwICovCi0jaWZu ZGVmIEI5MjE2MDAKLSNkZWZpbmUJQjkyMTYwMAkwMDAwMDI2Ci0jZW5kaWYgLyogQjkyMTYwMCAq LwotI2VuZGlmIC8qIENLX1NDT1Y1ICovCi0vKgotICBQbGFuIDkncyBuYXRpdmUgc3BlZWQgc2V0 dGluZyBpbnRlcmZhY2UgbGV0cyB5b3Ugc2V0IGFueXRoaW5nIHlvdSBsaWtlLAotICBidXQgd2ls bCBmYWlsIGlmIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGxpa2UgaXQsIHNvIHdlIGFsbG93IGFsbCB0 aGUgY29tbW9uCi0gIHNwZWVkcy4KLSovCi0jaWZkZWYgUGxhbjkKLSNpZm5kZWYgQjUwCi0jZGVm aW5lIEI1MCA1MAotI2VuZGlmIC8qIEI1MCAqLwotI2lmbmRlZiBCNzUKLSNkZWZpbmUgQjc1IDc1 Ci0jZW5kaWYgLyogQjc1ICovCi0jaWZuZGVmIEIxMTAKLSNkZWZpbmUgQjExMCAxMTAKLSNlbmRp ZiAvKiBCMTEwICovCi0jaWZuZGVmIEIxMzQKLSNkZWZpbmUgQjEzNCAxMzQKLSNlbmRpZiAvKiBC MTM0ICovCi0jaWZuZGVmIEIyMDAKLSNkZWZpbmUgQjIwMCAyMDAKLSNlbmRpZiAvKiBCMjAwICov Ci0jaWZuZGVmIEIzMDAKLSNkZWZpbmUgQjMwMCAzMDAKLSNlbmRpZiAvKiBCMzAwICovCi0jaWZu ZGVmIEIxMjAwCi0jZGVmaW5lIEIxMjAwIDEyMDAKLSNlbmRpZiAvKiBCMTIwMCAqLwotI2lmbmRl ZiBCMTgwMAotI2RlZmluZSBCMTgwMCAxODAwCi0jZW5kaWYgLyogQjE4MDAgKi8KLSNpZm5kZWYg QjI0MDAKLSNkZWZpbmUgQjI0MDAgMjQwMAotI2VuZGlmIC8qIEIyNDAwICovCi0jaWZuZGVmIEI0 ODAwCi0jZGVmaW5lIEI0ODAwIDQ4MDAKLSNlbmRpZiAvKiBCNDgwMCAqLwotI2lmbmRlZiBCOTYw MAotI2RlZmluZSBCOTYwMCA5NjAwCi0jZW5kaWYgLyogQjk2MDAgKi8KLSNpZm5kZWYgQjE0NDAw Ci0jZGVmaW5lIEIxNDQwMCAxNDQwMAotI2VuZGlmIC8qIEIxNDQwMCAqLwotI2lmbmRlZiBCMTky MDAKLSNkZWZpbmUgQjE5MjAwIDE5MjAwCi0jZW5kaWYgLyogQjE5MjAwICovCi0jaWZuZGVmIEIy ODgwMAotI2RlZmluZSBCMjg4MDAgMjg4MDAKLSNlbmRpZiAvKiBCMjg4MDAgKi8KLSNpZm5kZWYg QjM4NDAwCi0jZGVmaW5lIEIzODQwMCAzODQwMAotI2VuZGlmIC8qIEIzODQwMCAqLwotI2lmbmRl ZiBCNTc2MDAKLSNkZWZpbmUgQjU3NjAwIDU3NjAwCi0jZW5kaWYgLyogQjU3NjAwICovCi0jaWZu ZGVmIEI3NjgwMAotI2RlZmluZSBCNzY4MDAgNzY4MDAKLSNlbmRpZiAvKiBCNzY4MDAgKi8KLSNp Zm5kZWYgQjExNTIwMAotI2RlZmluZSBCMTE1MjAwIDExNTIwMAotI2VuZGlmIC8qIEIxMTUyMDAg Ki8KLSNpZm5kZWYgQjIzMDQwMAotI2RlZmluZSBCMjMwNDAwIDIzMDQwMAotI2VuZGlmIC8qIEIy MzA0MDAgKi8KLSNpZm5kZWYgQjQ2MDgwMAotI2RlZmluZSBCNDYwODAwIDQ2MDgwMAotI2VuZGlm IC8qIEI0NjA4MDAgKi8KLSNpZm5kZWYgQjkyMTYwMAotI2RlZmluZSBCOTIxNjAwIDkyMTYwMAot I2VuZGlmIC8qIEI5MjE2MDAgKi8KLSNlbmRpZiAvKiBQbGFuOSAqLwotCi0vKiAgVCBUIFMgUyBQ IEQgIC0tICBDaGVja3MgYW5kIHNldHMgdHJhbnNtaXNzaW9uIHJhdGUuICAqLwotCi0vKiAgQ2Fs bCB3aXRoIHNwZWVkIGluIGNoYXJhY3RlcnMgKG5vdCBiaXRzISkgcGVyIHNlY29uZC4gKi8KLS8q ICBSZXR1cm5zIC0xIG9uIGZhaWx1cmUsIDAgaWYgaXQgZGlkIG5vdGhpbmcsIDEgaWYgaXQgY2hh bmdlZCB0aGUgc3BlZWQuICovCi0KLSNpZmRlZiBVU0VUQ1NFVFNQRUVECi0vKgotICBUaGUgdGNz ZXRzcGVlZCgpIC8gdGNnZXRzcGVlZCgpIGludGVyZmFjZSBsZXRzIHlvdSBwYXNzIGFueSBudW1i ZXIgYXQgYWxsCi0gIHRvIGJlIHVzZWQgYXMgYSBzcGVlZCB0byBiZSBzZXQsIHJhdGhlciB0aGFu IGZvcmNpbmcgYSBjaG9pY2UgZnJvbSBhCi0gIHByZWRlZmluZWQgbGlzdC4gIEl0IHNlZW1zIHRv IGJlIHBlY3VsaWFyIHRvIFVuaXhXYXJlIDcuCi0KLSAgVGhlc2UgYXJlIHRoZSBmdW5jdGlvbiBj b2RlcyB0byBiZSBwYXNzZWQgdG8gdGNbZ3NdZXRzcGVlZCgpLAotICBidXQgZm9yIHNvbWUgcmVh c29uIHRoZXkgZG9uJ3Qgc2VlbSB0byBiZSBwaWNrZWQgdXAgZnJvbSB0ZXJtaW9zLmguCi0qLwot I2lmbmRlZiBUQ1NfQUxMCi0jZGVmaW5lIFRDU19BTEwgMAotI2VuZGlmIC8qIFRDU19BTEwgKi8K LSNpZm5kZWYgVENTX0lOCi0jZGVmaW5lIFRDU19JTiAxCi0jZW5kaWYgLyogVENTX0lOICovCi0j aWZuZGVmIFRDU19PVVQKLSNkZWZpbmUgVENTX09VVCAyCi0jZW5kaWYgLyogVENTX09VVCAqLwot I2VuZGlmIC8qIFVTRVRDU0VUU1BFRUQgKi8KLQotaW50Ci10dHNzcGQoY3BzKSBpbnQgY3BzOyB7 Ci0gICAgaW50IHg7Ci0jaWZkZWYgUE9TSVgKLS8qIFdhdGNoIG91dCwgc3BlZWRfdCBzaG91bGQg YmUgdW5zaWduZWQsIHNvIGRvbid0IGNvbXBhcmUgd2l0aCAtMSwgZXRjLi4uICovCi0gICAgc3Bl ZWRfdAotI2Vsc2UKLSAgICBpbnQKLSNlbmRpZiAvKiBQT1NJWCAqLwotICAgICAgcywgczI7Ci0g ICAgaW50IG9rID0gMTsJCQkJLyogU3BlZWQgY2hlY2sgcmVzdWx0LCBhc3N1bWUgb2sgKi8KLQot I2lmZGVmIE9MSU5VWEhJU1BFRUQKLSAgICB1bnNpZ25lZCBpbnQgc3BkX2ZsYWdzID0gMDsKLSAg ICBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBzZXJpbmZvOwotI2VuZGlmIC8qIE9MSU5VWEhJU1BFRUQg Ki8KLQotICAgIGRlYnVnKEYxMDEsInR0c3NwZCBjcHMiLCIiLGNwcyk7Ci0gICAgZGVidWcoRjEw MSwidHRzc3BkIHR0eWZkIiwiIix0dHlmZCk7Ci0gICAgZGVidWcoRjEwMSwidHRzc3BkIHhsb2Nh bCIsIiIseGxvY2FsKTsKLQotICAgIGlmICh0dHlmZCA8IDAgfHwgeGxvY2FsID09IDApCS8qIERv bid0IHNldCBzcGVlZCBvbiBjb25zb2xlICovCi0gICAgICByZXR1cm4oMCk7Ci0KLSNpZmRlZglO RVRDT05OCi0gICAgaWYgKG5ldGNvbm4pIHsKLSNpZmRlZiBUTl9DT01QT1JUCi0gICAgICAgIGlm IChpc3RuY29tcG9ydCgpKQotCSAgcmV0dXJuKHRuY19zZXRfYmF1ZChjcHMgKiAxMCkpOwotICAg ICAgICBlbHNlCi0jZW5kaWYgLyogVE5fQ09NUE9SVCAqLwotCXJldHVybigwKTsKLSAgfQotI2Vu ZGlmCS8qIE5FVENPTk4gKi8KLSNpZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaXBlKSByZXR1cm4o MCk7Ci0jZW5kaWYgLyogTkVUQ01EICovCi0jaWZkZWYgTkVUUFRZCi0gICAgaWYgKHR0cHR5KSBy ZXR1cm4oMCk7Ci0jZW5kaWYgLyogTkVUUFRZICovCi0KLSAgICBpZiAoY3BzIDwgMCkgcmV0dXJu KC0xKTsKLSAgICBzID0gczIgPSAwOwkJCQkvKiBOQjogcyBhbmQgczIgbWlnaHQgYmUgdW5zaWdu ZWQgKi8KLQotI2lmZGVmIFVTRVRDU0VUU1BFRUQKLQotICAgIHMgPSBjcHMgKiAxMEw7Ci0KLSAg ICB4ID0gdGNnZXRhdHRyKHR0eWZkLCZ0dGN1cik7CS8qIEdldCBjdXJyZW50IHNwZWVkICovCi0g ICAgZGVidWcoRjEwMSwidHRzc3BkIHRjZ2V0YXR0ciIsIiIseCk7Ci0gICAgaWYgKHggPCAwKQot ICAgICAgcmV0dXJuKC0xKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNzcGQgVENTRVRTUEVFRCBzcGVl ZCIsIiIscyk7Ci0KLSAgICBlcnJubyA9IDA7Ci0gICAgaWYgKHMgPT0gODg4MEwpIHsJCQkvKiA3 NS8xMjAwIHNwbGl0IHNwZWVkIHJlcXVlc3RlZCAqLwotCXRjc2V0c3BlZWQoVENTX0lOLCAmdHRj dXIsIDEyMDBMKTsKLQl0Y3NldHNwZWVkKFRDU19PVVQsICZ0dGN1ciwgNzVMKTsKLSAgICB9IGVs c2UKLSAgICAgIHRjc2V0c3BlZWQoVENTX0FMTCwgJnR0Y3VyLCBzKTsJLyogUHV0IG5ldyBzcGVl ZCBpbiBzdHJ1Y3RzICovCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoZXJybm8gJiBkZWJsb2cpIHsK LQlkZWJ1ZyhGMTAxLCJ0dHNzcGQgVENTRVRTUEVFRCBlcnJubyIsIiIsZXJybm8pOwotICAgIH0K LSNlbmRpZiAvKiBERUJVRyAqLwotCi0jaWZkZWYgQ09NTUVOVAotICAgIHRjc2V0c3BlZWQoVENT X0FMTCwgJnR0cmF3LCBzKTsKLSAgICB0Y3NldHNwZWVkKFRDU19BTEwsICZ0dHR2dCwgcyk7Ci0g ICAgdGNzZXRzcGVlZChUQ1NfQUxMLCAmdHRvbGQsIHMpOwotI2Vsc2UKLSAgICBpZiAocyA9PSA4 ODgwTCkgewkJCS8qIDc1LzEyMDAgc3BsaXQgc3BlZWQgcmVxdWVzdGVkICovCi0JdGNzZXRzcGVl ZChUQ1NfSU4sICZ0dHJhdywgMTIwMEwpOwotCXRjc2V0c3BlZWQoVENTX09VVCwgJnR0cmF3LCA3 NUwpOwotCXRjc2V0c3BlZWQoVENTX0lOLCAmdHR0dnQsIDEyMDBMKTsKLQl0Y3NldHNwZWVkKFRD U19PVVQsICZ0dHR2dCwgNzVMKTsKLQl0Y3NldHNwZWVkKFRDU19JTiwgJnR0b2xkLCAxMjAwTCk7 Ci0JdGNzZXRzcGVlZChUQ1NfT1VULCAmdHRvbGQsIDc1TCk7Ci0gICAgfSBlbHNlIHsKLQl0Y3Nl dHNwZWVkKFRDU19BTEwsICZ0dHJhdywgcyk7Ci0JdGNzZXRzcGVlZChUQ1NfQUxMLCAmdHR0dnQs IHMpOwotCXRjc2V0c3BlZWQoVENTX0FMTCwgJnR0b2xkLCBzKTsKLSAgICB9Ci0jZW5kaWYgLyog Q09NTUVOVCAqLwotCi0gICAgeCA9IHRjc2V0YXR0cih0dHlmZCxUQ1NBRFJBSU4sJnR0Y3VyKTsg LyogU2V0IHRoZSBzcGVlZCAqLwotICAgIGRlYnVnKEYxMDEsInR0c3NwZCB0Y3NldGF0dHIiLCIi LHgpOwotICAgIGlmICh4IDwgMCkKLSAgICAgIHJldHVybigtMSk7Ci0KLSNlbHNlICAvKiBOb3Qg VVNFVENTRVRTUEVFRCAqLwotCi0gICAgLyogRmlyc3QgY2hlY2sgdGhhdCB0aGUgZ2l2ZW4gc3Bl ZWQgaXMgdmFsaWQuICovCi0KLSAgICBzd2l0Y2ggKGNwcykgewotI2lmbmRlZiBNSU5JWAotICAg ICAgY2FzZSAwOiAgIHMgPSBCMDsgICAgYnJlYWs7Ci0gICAgICBjYXNlIDU6ICAgcyA9IEI1MDsg ICBicmVhazsKLSAgICAgIGNhc2UgNzogICBzID0gQjc1OyAgIGJyZWFrOwotI2VuZGlmIC8qIE1J TklYICovCi0gICAgICBjYXNlIDExOiAgcyA9IEIxMTA7ICBicmVhazsKLSNpZm5kZWYgTUlOSVgK LSAgICAgIGNhc2UgMTM6ICBzID0gQjEzNDsgIGJyZWFrOwotICAgICAgY2FzZSAxNTogIHMgPSBC MTUwOyAgYnJlYWs7Ci0gICAgICBjYXNlIDIwOiAgcyA9IEIyMDA7ICBicmVhazsKLSNlbmRpZiAv KiBNSU5JWCAqLwotICAgICAgY2FzZSAzMDogIHMgPSBCMzAwOyAgYnJlYWs7Ci0jaWZuZGVmIE1J TklYCi0gICAgICBjYXNlIDYwOiAgcyA9IEI2MDA7ICBicmVhazsKLSNlbmRpZiAvKiBNSU5JWCAq LwotICAgICAgY2FzZSAxMjA6IHMgPSBCMTIwMDsgYnJlYWs7Ci0jaWZuZGVmIE1JTklYCi0gICAg ICBjYXNlIDE4MDogcyA9IEIxODAwOyBicmVhazsKLSNlbmRpZiAvKiBNSU5JWCAqLwotICAgICAg Y2FzZSAyNDA6IHMgPSBCMjQwMDsgYnJlYWs7Ci0gICAgICBjYXNlIDQ4MDogcyA9IEI0ODAwOyBi cmVhazsKLSNpZm5kZWYgTUlOSVgKLSAgICAgIGNhc2UgODg4OiBzID0gQjc1OyBzMiA9IEIxMjAw OyBicmVhazsgLyogODg4ID0gNzUvMTIwMCBzcGxpdCBzcGVlZCAqLwotI2VuZGlmIC8qIE1JTklY ICovCi0jaWZkZWYgQjcyMDAKLSAgICAgIGNhc2UgNzIwOiBzID0gQjcyMDA7IGJyZWFrOwotI2Vu ZGlmIC8qIEI3MjAwICovCi0gICAgICBjYXNlIDk2MDogcyA9IEI5NjAwOyBicmVhazsKLSNpZmRl ZiBCMTQ0MDAKLSAgICAgIGNhc2UgMTQ0MDogcyA9IEIxNDQwMDsgYnJlYWs7Ci0jZW5kaWYgLyog QjE0NDAwICovCi0jaWZkZWYgQjE5MjAwCi0gICAgICBjYXNlIDE5MjA6IHMgPSBCMTkyMDA7IGJy ZWFrOwotI2Vsc2UKLSNpZmRlZiBFWFRBCi0gICAgICBjYXNlIDE5MjA6IHMgPSBFWFRBOyBicmVh azsKLSNlbmRpZiAvKiBFWFRBICovCi0jZW5kaWYgLyogQjE5MjAwICovCi0jaWZkZWYgQjI4ODAw Ci0gICAgICBjYXNlIDI4ODA6IHMgPSBCMjg4MDA7IGJyZWFrOwotI2VuZGlmIC8qIEIyODgwMCAq LwotI2lmZGVmIEIzODQwMAotICAgICAgY2FzZSAzODQwOiBzID0gQjM4NDAwOwotI2lmZGVmIE9M SU5VWEhJU1BFRUQKLSAgICAgICAgc3BkX2ZsYWdzID0gfkFTWU5DX1NQRF9NQVNLOwkvKiBOb256 ZXJvLCBidXQgemVybyBmbGFncyAqLwotI2VuZGlmIC8qIE9MSU5VWEhJU1BFRUQgKi8KLQlicmVh azsKLSNlbHNlIC8qIEIzODQwMCBub3QgZGVmaW5lZC4uLiAqLwotI2lmZGVmIEVYVEIKLSAgICAg IGNhc2UgMzg0MDogcyA9IEVYVEI7IGJyZWFrOwotI2VuZGlmIC8qIEVYVEIgKi8KLSNlbmRpZiAv KiBCMzg0MDAgKi8KLQotI2lmZGVmIEhQVVgKLSNpZmRlZiBfQjU3NjAwCi0gICAgICBjYXNlIDU3 NjA6IHMgPSBfQjU3NjAwOyBicmVhazsKLSNlbmRpZiAvKiBfQjU3NjAwICovCi0jaWZkZWYgX0Ix MTUyMDAKLSAgICAgIGNhc2UgMTE1MjA6IHMgPSBfQjExNTIwMDsgYnJlYWs7Ci0jZW5kaWYgLyog X0IxMTUyMDAgKi8KLSNlbHNlCi0jaWZkZWYgT0xJTlVYSElTUEVFRAotLyoKLSAgVGhpcyBiaXQg ZnJvbSA8Y2FybG9Ac2cudG4udHVkZWxmdC5ubD46Ci0gICJPbmx5IG5vdGUgdG8gbWFrZSBpcyBt YXliZSB0aGlzOiBXaGVuIHRoZSBBU1lOQ19TUERfQ1VTVCBmbGFncyBhcmUgc2V0IHRoZW4KLSAg c2V0dGluZyB0aGUgc3BlZWQgdG8gMzg0MDAgd2lsbCBzZXQgdGhlIGN1c3RvbSBzcGVlZCAoYW5k IHR0Z3NwZCByZXR1cm5zCi0gIDM4NDAwKSwgYnV0IHNwZWVkcyA1NzYwMCBhbmQgMTE1MjAwIHdv bid0IHdvcmsgYW55IG1vcmUgYmVjYXVzZSBJIGRpZG4ndAotICB3YW50IHRvIG1lc3MgdXAgdGhl IHNwZWVkIGZsYWdzIHdoZW4gc29tZW9uZSBpcyBkb2luZyBzb3BoaXN0aWNhdGVkIHN0dWZmCi0g IGxpa2UgY3VzdG9tIHNwZWVkcy4uLiIKLSovCi0gICAgICBjYXNlIDU3NjA6IHMgPSBCMzg0MDA7 IHNwZF9mbGFncyA9IEFTWU5DX1NQRF9ISTsgYnJlYWs7Ci0gICAgICBjYXNlIDExNTIwOiBzID0g QjM4NDAwOyBzcGRfZmxhZ3MgPSBBU1lOQ19TUERfVkhJOyBicmVhazsKLSNlbHNlCi0jaWZkZWYg QjU3NjAwCi0gICAgICBjYXNlIDU3NjA6IHMgPSBCNTc2MDA7IGJyZWFrOwotI2VuZGlmIC8qIEI1 NzYwMCAqLwotI2lmZGVmIEI3NjgwMAotICAgICAgY2FzZSA3NjgwOiBzID0gQjc2ODAwOyBicmVh azsKLSNlbmRpZiAvKiBCNzY4MDAgKi8KLSNpZmRlZiBCMTE1MjAwCi0gICAgICBjYXNlIDExNTIw OiBzID0gQjExNTIwMDsgYnJlYWs7Ci0jZW5kaWYgLyogQjExNTIwMCAqLwotI2VuZGlmIC8qIE9M SU5VWEhJU1BFRUQgKi8KLSNpZmRlZiBCMTUzNjAwCi0gICAgICBjYXNlIDE1MzYwOiBzID0gQjE1 MzYwMDsgYnJlYWs7Ci0jZW5kaWYgLyogQjE1MzYwMCAqLwotI2lmZGVmIEIyMzA0MDAKLSAgICAg IGNhc2UgMjMwNDA6IHMgPSBCMjMwNDAwOyBicmVhazsKLSNlbmRpZiAvKiBCMjMwNDAwICovCi0j aWZkZWYgQjMwNzIwMAotICAgICAgY2FzZSAzMDcyMDogcyA9IEIzMDcyMDA7IGJyZWFrOwotI2Vu ZGlmIC8qIEIzMDcyMDAgKi8KLSNpZmRlZiBCNDYwODAwCi0gICAgICBjYXNlIDQ2MDgwOiBzID0g QjQ2MDgwMDsgYnJlYWs7Ci0jZW5kaWYgLyogNDYwODAwICovCi0jaWZkZWYgQjkyMTYwMAotICAg ICAgY2FzZSA5MjE2MDogcyA9IEI5MjE2MDA7IGJyZWFrOwotI2VuZGlmIC8qIEI5MjE2MDAgKi8K LSNlbmRpZiAvKiBIUFVYICovCi0gICAgICBkZWZhdWx0OgotCW9rID0gMDsJCQkJLyogR29vZCBz cGVlZCBub3QgZm91bmQsIHNvIG5vdCBvayAqLwotCWJyZWFrOwotICAgIH0KLSAgICBkZWJ1ZyhG MTAxLCJ0dHNzcGQgb2siLCIiLG9rKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNzcGQgcyIsIiIscyk7 Ci0KLSAgICBpZiAoIW9rKSB7Ci0JZGVidWcoRjEwMCwidHRzc3BkIGZhaWxzIiwiIiwwKTsKLQly ZXR1cm4oLTEpOwotICAgIH0gZWxzZSB7Ci0JaWYgKCFzMikgczIgPSBzOwkJLyogU2V0IGlucHV0 IHNwZWVkICovCi0jaWZkZWYgUGxhbjkKLQlpZiAocDl0dHNzcGQoY3BzKSA8IDApCi0JICByZXR1 cm4oLTEpOwotI2Vsc2UKLSNpZmRlZiBCU0Q0NE9SUE9TSVgKLQl4ID0gdGNnZXRhdHRyKHR0eWZk LCZ0dGN1cik7CS8qIEdldCBjdXJyZW50IHNwZWVkICovCi0JZGVidWcoRjEwMSwidHRzc3BkIHRj Z2V0YXR0ciIsIiIseCk7Ci0JaWYgKHggPCAwKQotCSAgcmV0dXJuKC0xKTsKLSNpZmRlZiBPTElO VVhISVNQRUVECi0JZGVidWcoRjEwMSwidHRzc3BkIHNwZF9mbGFncyIsIiIsc3BkX2ZsYWdzKTsK LQlpZiAoc3BkX2ZsYWdzICYmIHNwZF9mbGFncyAhPSBBU1lOQ19TUERfQ1VTVCkgewotCSAgICBp ZiAoaW9jdGwodHR5ZmQsIFRJT0NHU0VSSUFMLCAmc2VyaW5mbykgPCAwKSB7Ci0JCWRlYnVnKEYx MDAsInR0c3NwZDogVElPQ0dTRVJJQUwgZmFpbGVkIiwiIiwwKTsKLQkJcmV0dXJuKC0xKTsKLQkg ICAgfSBlbHNlIGRlYnVnKEYxMDAsInR0c3NwZDogVElPQ0dTRVJJQUwgb2siLCIiLDApOwotCSAg ICBzZXJpbmZvLmZsYWdzICY9IH5BU1lOQ19TUERfTUFTSzsKLQkgICAgc2VyaW5mby5mbGFncyB8 PSAoc3BkX2ZsYWdzICYgQVNZTkNfU1BEX01BU0spOwotCSAgICBpZiAoaW9jdGwodHR5ZmQsIFRJ T0NTU0VSSUFMLCAmc2VyaW5mbykgPCAwKQotCSAgICAgIHJldHVybigtMSk7Ci0JfQotI2VuZGlm IC8qIE9MSU5VWEhJU1BFRUQgKi8KLQljZnNldG9zcGVlZCgmdHRjdXIscyk7Ci0JY2ZzZXRpc3Bl ZWQoJnR0Y3VyLHMyKTsKLQljZnNldG9zcGVlZCgmdHRyYXcscyk7Ci0JY2ZzZXRpc3BlZWQoJnR0 cmF3LHMyKTsKLQljZnNldG9zcGVlZCgmdHR0dnQscyk7Ci0JY2ZzZXRpc3BlZWQoJnR0dHZ0LHMy KTsKLQljZnNldG9zcGVlZCgmdHRvbGQscyk7Ci0JY2ZzZXRpc3BlZWQoJnR0b2xkLHMyKTsKLQl4 ID0gdGNzZXRhdHRyKHR0eWZkLFRDU0FEUkFJTiwmdHRjdXIpOwotCWRlYnVnKEYxMDEsInR0c3Nw ZCB0Y3NldGF0dHIiLCIiLHgpOwotCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKLSNlbHNlCi0jaWZk ZWYgQVRUU1YKLQlpZiAoY3BzID09IDg4OCkgcmV0dXJuKC0xKTsJLyogTm8gc3BsaXQgc3BlZWRz LCBzb3JyeS4gKi8KLQl4ID0gaW9jdGwodHR5ZmQsVENHRVRBLCZ0dGN1cik7Ci0JZGVidWcoRjEw MSwidHRzc3BkIFRDR0VUQSBpb2N0bCIsIiIseCk7Ci0JaWYgKHggPCAwKSByZXR1cm4oLTEpOwot CXR0Y3VyLmNfY2ZsYWcgJj0gfkNCQVVEOwotCXR0Y3VyLmNfY2ZsYWcgfD0gczsKLQl0dHR2dC5j X2NmbGFnICY9IH5DQkFVRDsKLQl0dHR2dC5jX2NmbGFnIHw9IHM7Ci0JdHRyYXcuY19jZmxhZyAm PSB+Q0JBVUQ7Ci0JdHRyYXcuY19jZmxhZyB8PSBzOwotCXR0b2xkLmNfY2ZsYWcgJj0gfkNCQVVE OwotCXR0b2xkLmNfY2ZsYWcgfD0gczsKLQl4ID0gaW9jdGwodHR5ZmQsVENTRVRBVywmdHRjdXIp OwotCWRlYnVnKEYxMDEsInR0c3NwZCBUQ1NFVEFXIGlvY3RsIiwiIix4KTsKLQlpZiAoeCA8IDAp IHJldHVybigtMSk7Ci0jZWxzZQotI2lmZGVmIEJFTExWMTAKLQl4ID0gaW9jdGwodHR5ZmQsVElP Q0dERVYsJnRkY3VyKTsKLQlkZWJ1ZyhGMTAxLCJ0dHNzcGQgVElPQ0dERVYgaW9jdGwiLCIiLHgp OwotCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKLQl0ZGN1ci5pc3BlZWQgPSBzMjsKLQl0ZGN1ci5v c3BlZWQgPSBzOwotCWVycm5vID0gMDsKLQlvayA9IGlvY3RsKHR0eWZkLFRJT0NTREVWLCZ0ZGN1 cik7Ci0JZGVidWcoRjEwMSwidHRzc3BkIEJFTExWMTAgaW9jdGwiLCIiLG9rKTsKLQlpZiAob2sg PCAwKSB7Ci0JICAgIHBlcnJvcih0dG5tc3YpOwotCSAgICBkZWJ1ZyhGMTAxLCJ0dHNzcGQgQkVM TFYxMCBlcnJubyIsIiIsb2spOwotCSAgICByZXR1cm4oLTEpOwotCX0KLSNlbHNlCi0JeCA9IGd0 dHkodHR5ZmQsJnR0Y3VyKTsKLQlkZWJ1ZyhGMTAxLCJ0dHNzcGQgZ3R0eSIsIiIseCk7Ci0JaWYg KHggPCAwKSByZXR1cm4oLTEpOwotCXR0Y3VyLnNnX29zcGVlZCA9IHM7IHR0Y3VyLnNnX2lzcGVl ZCA9IHMyOwotCXR0dHZ0LnNnX29zcGVlZCA9IHM7IHR0dHZ0LnNnX2lzcGVlZCA9IHMyOwotCXR0 cmF3LnNnX29zcGVlZCA9IHM7IHR0cmF3LnNnX2lzcGVlZCA9IHMyOwotCXR0b2xkLnNnX29zcGVl ZCA9IHM7IHR0b2xkLnNnX2lzcGVlZCA9IHMyOwotCXggPSBzdHR5KHR0eWZkLCZ0dGN1cik7Ci0J ZGVidWcoRjEwMSwidHRzc3BkIHN0dHkiLCIiLHgpOwotCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsK LSNlbmRpZiAvKiBCRUxMVjEwICovCi0jZW5kaWYgLyogQVRUU1YgKi8KLSNlbmRpZiAvKiBCU0Q0 NE9SUE9TSVggKi8KLSNlbmRpZiAvKiBQbGFuOSAqLwotICAgIH0KLSAgICByZXR1cm4oMSk7CQkJ CS8qIFJldHVybiAxID0gc3VjY2Vzcy4gKi8KLSNlbmRpZiAvKiBVU0VUQ1NFVFNQRUVEICovCi19 Ci0KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLS8qIEMgTyBOIEcgUyBQIEQgIC0gIEdldCBzcGVl ZCBvZiBjb25zb2xlIHRlcm1pbmFsICAqLwotCi1sb25nCi1jb25nc3BkKCkgewotLyoKLSAgVGhp cyBpcyBhIGRpc2d1c3RpbmcgaGFjay4gIFRoZSByaWdodCB3YXkgdG8gZG8gdGhpcyB3b3VsZCBi ZSB0byBwYXNzIGFuCi0gIGFyZ3VtZW50IHRvIHR0Z3NwZCgpLCBidXQgdGhlbiB3ZSdkIG5lZWQg dG8gY2hhbmdlIHRoZSBLZXJtaXQgQVBJIGFuZAotICBhbGwgb2YgdGhlIGNrP3Rpby5jIG1vZHVs ZXMuICAoQ3VycmVudGx5IHVzZWQgb25seSBmb3IgcmxvZ2luLikKLSovCi0gICAgaW50IHQxOwot ICAgIGxvbmcgc3BkOwotI2lmZGVmIE5FVENPTk4KLSAgICBpbnQgdDIgPSBuZXRjb25uOwotICAg IG5ldGNvbm4gPSAwOwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSAgICB0MSA9IHR0eWZkOwotICAg IHR0eWZkID0gLTE7Ci0gICAgc3BkID0gdHRnc3BkKCk7Ci0gICAgZGVidWcoRjEwMSwiY29uZ3Nw ZCIsIiIsc3BkKTsKLSNpZmRlZiBORVRDT05OCi0gICAgbmV0Y29ubiA9IHQyOwotI2VuZGlmIC8q IE5FVENPTk4gKi8KLSAgICB0dHlmZCA9IHQxOwotICAgIHJldHVybihzcGQpOwotfQotCi0vKiAg VCBUIFMgUCBEIEwgSSBTIFQgIC0tIEdldCBsaXN0IG9mIHNlcmlhbCBzcGVlZHMgYWxsb3dlZCBv biB0aGlzIHBsYXRmb3JtICovCi0KLSNkZWZpbmUgTlNQRExJU1QgNjQKLXN0YXRpYyBsb25nIHNw ZGxpc3RbTlNQRExJU1RdOwotLyoKLSAgQXMgd3JpdHRlbiwgdGhpcyBwaWNrcyB1cCB0aGUgc3Bl ZWRzIGtub3duIGF0IGNvbXBpbGUgdGltZSwgYW5kIHRodXMKLSAgYXBwbHkgdG8gdGhlIHN5c3Rl bSB3aGVyZSBDLUtlcm1pdCB3YXMgYnVpbHQsIHJhdGhlciB0aGFuIHRvIHRoZSBvbmUgd2hlcmUK LSAgaXQgaXMgcnVubmluZy4gIFN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCBhcmUgYWx3YXlz IHdlbGNvbWUuCi0qLwotbG9uZyAqCi10dHNwZGxpc3QoKSB7Ci0gICAgaW50IGk7Ci0gICAgZm9y IChpID0gMDsgaSA8IE5TUERMSVNUOyBpKyspCS8qIEluaXRpYWxpemUgdGhlIGxpc3QgKi8KLSAg ICAgIHNwZGxpc3RbaV0gPSAtMUw7Ci0gICAgaSA9IDE7Ci0KLSNpZmRlZiBVU0VUQ1NFVFNQRUVE CQkJLyogTm8gd2F5IHRvIGZpbmQgb3V0IHdoYXQncyBsZWdhbCAqLwotICAgIGRlYnVnKEYxMDAs InR0c3BkbGlzdCBVU0VUQ1NFVFNQRUVEIiwiIiwwKTsKLSAgICBzcGRsaXN0W2krK10gPSA1MEw7 Ci0jaWZuZGVmIFVXNwotICAgIHNwZGxpc3RbaSsrXSA9IDc1TDsKLSNlbmRpZiAvKiBVVzcgKi8K LSAgICBzcGRsaXN0W2krK10gPSAxMTBMOwotI2lmbmRlZiBVVzcKLSAgICBzcGRsaXN0W2krK10g PSAxMzRMOwotI2VuZGlmIC8qIFVXNyAqLwotICAgIHNwZGxpc3RbaSsrXSA9IDE1MEw7Ci0gICAg c3BkbGlzdFtpKytdID0gMjAwTDsKLSAgICBzcGRsaXN0W2krK10gPSAzMDBMOwotICAgIHNwZGxp c3RbaSsrXSA9IDYwMEw7Ci0gICAgc3BkbGlzdFtpKytdID0gMTIwMEw7Ci0gICAgc3BkbGlzdFtp KytdID0gMTgwMEw7Ci0gICAgc3BkbGlzdFtpKytdID0gMjQwMEw7Ci0gICAgc3BkbGlzdFtpKytd ID0gNDgwMEw7Ci0gICAgc3BkbGlzdFtpKytdID0gODg4MEw7Ci0gICAgc3BkbGlzdFtpKytdID0g OTYwMEw7Ci0gICAgc3BkbGlzdFtpKytdID0gMTQ0MDBMOwotICAgIHNwZGxpc3RbaSsrXSA9IDE5 MjAwTDsKLSAgICBzcGRsaXN0W2krK10gPSAyODgwMEw7Ci0jaWZuZGVmIFVXNwotICAgIHNwZGxp c3RbaSsrXSA9IDMzNjAwTDsKLSNlbmRpZiAvKiBVVzcgKi8KLSAgICBzcGRsaXN0W2krK10gPSAz ODQwMEw7Ci0gICAgc3BkbGlzdFtpKytdID0gNTc2MDBMOwotICAgIHNwZGxpc3RbaSsrXSA9IDc2 ODAwTDsKLSAgICBzcGRsaXN0W2krK10gPSAxMTUyMDBMOwotI2lmbmRlZiBVVzcKLSAgICBzcGRs aXN0W2krK10gPSAxNTM2MDBMOwotICAgIHNwZGxpc3RbaSsrXSA9IDIzMDQwMEw7Ci0gICAgc3Bk bGlzdFtpKytdID0gMzA3MjAwTDsKLSAgICBzcGRsaXN0W2krK10gPSA0NjA4MDBMOwotICAgIHNw ZGxpc3RbaSsrXSA9IDkyMTYwMEw7Ci0jZW5kaWYgLyogVVc3ICovCi0KLSNlbHNlICAvKiBVU0VU Q1NFVFNQRUVEICovCi0KLSAgICBkZWJ1ZyhGMTAwLCJ0dHNwZGxpc3Qgbm8gVVNFVENTRVRTUEVF RCIsIiIsMCk7Ci0KLSNpZmRlZiBCNTAKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjUwIiwi IixCNTApOwotICAgIHNwZGxpc3RbaSsrXSA9IDUwTDsKLSNlbmRpZiAvKiBCNTAgKi8KLSNpZmRl ZiBCNzUKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjc1IiwiIixCNzUpOwotICAgIHNwZGxp c3RbaSsrXSA9IDc1TDsKLSNlbmRpZiAvKiBCNzUgKi8KLSNpZmRlZiBCMTEwCi0gICAgZGVidWco RjEwMSwidHRzcGRsaXN0IEIxMTAiLCIiLEIxMTApOwotICAgIHNwZGxpc3RbaSsrXSA9IDExMEw7 Ci0jZW5kaWYgLyogQjExMCAqLwotI2lmZGVmIEIxMzQKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxp c3QgQjEzNCIsIiIsQjEzNCk7Ci0gICAgc3BkbGlzdFtpKytdID0gMTM0TDsKLSNlbmRpZiAvKiBC MTM0ICovCi0jaWZkZWYgQjE1MAotICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCMTUwIiwiIixC MTUwKTsKLSAgICBzcGRsaXN0W2krK10gPSAxNTBMOwotI2VuZGlmIC8qIEIxNTAgKi8KLSNpZmRl ZiBCMjAwCi0gICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEIyMDAiLCIiLEIyMDApOwotICAgIHNw ZGxpc3RbaSsrXSA9IDIwMEw7Ci0jZW5kaWYgLyogQjIwMCAqLwotI2lmZGVmIEIzMDAKLSAgICBk ZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjMwMCIsIiIsQjMwMCk7Ci0gICAgc3BkbGlzdFtpKytdID0g MzAwTDsKLSNlbmRpZiAvKiBCMzAwICovCi0jaWZkZWYgQjYwMAotICAgIGRlYnVnKEYxMDEsInR0 c3BkbGlzdCBCNjAwIiwiIixCNjAwKTsKLSAgICBzcGRsaXN0W2krK10gPSA2MDBMOwotI2VuZGlm IC8qIEI2MDAgKi8KLSNpZmRlZiBCMTIwMAotICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCMTIw MCIsIiIsQjEyMDApOwotICAgIHNwZGxpc3RbaSsrXSA9IDEyMDBMOwotI2VuZGlmIC8qIEIxMjAw ICovCi0jaWZkZWYgQjE4MDAKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjE4MDAiLCIiLEIx ODAwKTsKLSAgICBzcGRsaXN0W2krK10gPSAxODAwTDsKLSNlbmRpZiAvKiBCMTgwMCAqLwotI2lm ZGVmIEIyNDAwCi0gICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEIyNDAwIiwiIixCMjQwMCk7Ci0g ICAgc3BkbGlzdFtpKytdID0gMjQwMEw7Ci0jZW5kaWYgLyogQjI0MDAgKi8KLSNpZmRlZiBCNDgw MAotICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCNDgwMCIsIiIsQjQ4MDApOwotICAgIHNwZGxp c3RbaSsrXSA9IDQ4MDBMOwotI2VuZGlmIC8qIEI0ODAwICovCi0jaWZkZWYgQjk2MDAKLSAgICBk ZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjk2MDAiLCIiLEI5NjAwKTsKLSAgICBzcGRsaXN0W2krK10g PSA5NjAwTDsKLSNlbmRpZiAvKiBCOTYwMCAqLwotI2lmZGVmIEIxNDQwMAotICAgIGRlYnVnKEYx MDEsInR0c3BkbGlzdCBCMTQ0MDAiLCIiLEIxNDQwMCk7Ci0gICAgc3BkbGlzdFtpKytdID0gMTQ0 MDBMOwotI2VuZGlmIC8qIEIxNDQwMCAqLwotI2lmZGVmIEIxOTIwMAotICAgIGRlYnVnKEYxMDEs InR0c3BkbGlzdCBCMTkyMDAiLCIiLEIxOTIwMCk7Ci0gICAgc3BkbGlzdFtpKytdID0gMTkyMDBM OwotI2Vsc2UKLSNpZmRlZiBFWFRBCi0gICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEVYVEEiLCIi LEVYVEEpOwotICAgIHNwZGxpc3RbaSsrXSA9IDE5MjAwTDsKLSNlbmRpZiAvKiBFWFRBICovCi0j ZW5kaWYgLyogQjE5MjAwICovCi0jaWZkZWYgQjI4ODAwCi0gICAgZGVidWcoRjEwMSwidHRzcGRs aXN0IEIyODgwMCIsIiIsQjI4ODAwKTsKLSAgICBzcGRsaXN0W2krK10gPSAyODgwMEw7Ci0jZW5k aWYgLyogQjI4ODAwICovCi0jaWZkZWYgQjMzNjAwCi0gICAgZGVidWcoRjEwMSwidHRzcGRsaXN0 IEIzMzYwMCIsIiIsQjMzNjAwKTsKLSAgICBzcGRsaXN0W2krK10gPSAzMzYwMEw7Ci0jZW5kaWYg LyogQjMzNjAwICovCi0jaWZkZWYgQjM4NDAwCi0gICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEIz ODQwMCIsIiIsQjM4NDAwKTsKLSAgICBzcGRsaXN0W2krK10gPSAzODQwMEw7Ci0jZWxzZQotI2lm ZGVmIEVYVEIKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgRVhUQiIsIiIsRVhUQik7Ci0gICAg c3BkbGlzdFtpKytdID0gMzg0MDBMOwotI2VuZGlmIC8qIEVYVEIgKi8KLSNlbmRpZiAvKiBCMzg0 MDAgKi8KLSNpZmRlZiBfQjU3NjAwCi0gICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IF9CNTc2MDAi LCIiLF9CNTc2MDApOwotICAgIHNwZGxpc3RbaSsrXSA9IDU3NjAwTDsKLSNlbHNlCi0jaWZkZWYg QjU3NjAwCi0gICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEI1NzYwMCIsIiIsQjU3NjAwKTsKLSAg ICBzcGRsaXN0W2krK10gPSA1NzYwMEw7Ci0jZW5kaWYgLyogQjU3NjAwICovCi0jZW5kaWYgLyog X0I1NzYwMCAqLwotI2lmZGVmIEI3NjgwMAotICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCNzY4 MDAiLCIiLEI3NjgwMCk7Ci0gICAgc3BkbGlzdFtpKytdID0gNzY4MDBMOwotI2VuZGlmIC8qIEI3 NjgwMCAqLwotI2lmZGVmIF9CMTE1MjAwCi0gICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IF9CMTE1 MjAwIiwiIixfQjExNTIwMCk7Ci0gICAgc3BkbGlzdFtpKytdID0gMTE1MjAwTDsKLSNlbHNlCi0j aWZkZWYgQjExNTIwMAotICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCMTE1MjAwIiwiIixCMTE1 MjAwKTsKLSAgICBzcGRsaXN0W2krK10gPSAxMTUyMDBMOwotI2VuZGlmIC8qIEIxMTUyMDAgKi8K LSNlbmRpZiAvKiBfQjExNTIwMCAqLwotI2lmZGVmIEIxNTM2MDAKLSAgICBkZWJ1ZyhGMTAxLCJ0 dHNwZGxpc3QgQjE1MzYwMCIsIiIsQjE1MzYwMCk7Ci0gICAgc3BkbGlzdFtpKytdID0gMTUzNjAw TDsKLSNlbmRpZiAvKiBCMTUzNjAwICovCi0jaWZkZWYgQjIzMDQwMAotICAgIGRlYnVnKEYxMDEs InR0c3BkbGlzdCBCMjMwNDAwIiwiIixCMjMwNDAwKTsKLSAgICBzcGRsaXN0W2krK10gPSAyMzA0 MDBMOwotI2VuZGlmIC8qIEIyMzA0MDAgKi8KLSNpZmRlZiBCMzA3MjAwCi0gICAgZGVidWcoRjEw MSwidHRzcGRsaXN0IEIzMDcyMDAiLCIiLEIzMDcyMDApOwotICAgIHNwZGxpc3RbaSsrXSA9IDMw NzIwMEw7Ci0jZW5kaWYgLyogQjMwNzIwMCAqLwotI2lmZGVmIEI0NjA4MDAKLSAgICBkZWJ1ZyhG MTAxLCJ0dHNwZGxpc3QgQjQ2MDgwMCIsIiIsQjQ2MDgwMCk7Ci0gICAgc3BkbGlzdFtpKytdID0g NDYwODAwTDsKLSNlbmRpZiAvKiBCNDYwODAwICovCi0jaWZkZWYgQjkyMTYwMAotICAgIGRlYnVn KEYxMDEsInR0c3BkbGlzdCBCOTIxNjAwIiwiIixCOTIxNjAwKTsKLSAgICBzcGRsaXN0W2krK10g PSA5MjE2MDBMOwotI2VuZGlmIC8qIEI5MjE2MDAgKi8KLSNlbmRpZiAvKiBVU0VUQ1NFVFNQRUVE ICovCi0gICAgc3BkbGlzdFswXSA9IGkgLSAxOwkJCS8qIFJldHVybiBjb3VudCBpbiAwdGggZWxl bWVudCAqLwotICAgIGRlYnVnKEYxMTEsInR0c3BkbGlzdCBzcGRsaXN0IiwiMCIsc3BkbGlzdFsw XSk7Ci0gICAgcmV0dXJuKChsb25nICopc3BkbGlzdCk7Ci19Ci0KLS8qIFQgVCBHIFMgUCBEICAt ICBHZXQgc3BlZWQgb2YgY3VycmVudGx5IHNlbGVjdGVkIHR0eSBsaW5lICAqLwotCi0vKgotICBV bnJlbGlhYmxlLiAgQWZ0ZXIgU0VUIExJTkUsIGl0IHJldHVybnMgYW4gYWN0dWFsIHNwZWVkLCBi dXQgbm90IG5lY2Vzc2FyaWx5Ci0gIHRoZSByZWFsIHNwZWVkLiAgT24gc29tZSBzeXN0ZW1zLCBp dCByZXR1cm5zIHRoZSBsaW5lJ3Mgbm9taW5hbCBzcGVlZCwgZnJvbQotICAvZXRjL3R0eXRhYi4g IEV2ZW4gaWYgeW91IFNFVCBTUEVFRCB0byBzb21ldGhpbmcgZWxzZSwgdGhpcyBmdW5jdGlvbiBt aWdodAotICBub3Qgbm90aWNlLgotKi8KLWxvbmcKLXR0Z3NwZCgpIHsJCQkJLyogR2V0IGN1cnJl bnQgc2VyaWFsIGRldmljZSBzcGVlZCAqLwotI2lmZGVmIE5PTE9DQUwKLSAgICByZXR1cm4oLTFM KTsKLSNlbHNlCi0jaWZkZWYgUE9TSVgKLSAgICBzcGVlZF90CQkJCS8qIFNob3VsZCBiZSB1bnNp Z25lZCAqLwotI2Vsc2UKLSAgICBpbnQJCQkJCS8qIElzbid0IHVuc2lnbmVkICovCi0jZW5kaWYg LyogUE9TSVggKi8KLSAgICAgIHM7Ci0gICAgaW50IHg7Ci0gICAgbG9uZyBzczsKLSNpZmRlZiBP TElOVVhISVNQRUVECi0gICAgdW5zaWduZWQgaW50IHNwZF9mbGFncyA9IDA7Ci0gICAgc3RydWN0 IHNlcmlhbF9zdHJ1Y3Qgc2VyaW5mbzsKLSNlbmRpZiAvKiBPTElOVVhISVNQRUVEICovCi0KLSNp ZmRlZiBORVRDT05OCi0gICAgaWYgKG5ldGNvbm4pIHsKLSNpZmRlZiBUTl9DT01QT1JUCi0JaWYg KGlzdG5jb21wb3J0KCkpCi0JICByZXR1cm4odG5jX2dldF9iYXVkKCkpOwotCWVsc2UKLSNlbmRp ZiAvKiBUTl9DT01QT1JUICovCi0JICByZXR1cm4oLTEpOwkJCS8qIC0xIGlmIG5ldHdvcmsgY29u bmVjdGlvbiAqLwotICAgIH0KLSNlbmRpZiAvKiBORVRDT05OICovCi0jaWZkZWYgTkVUQ01ECi0g ICAgaWYgKHR0cGlwZSkgcmV0dXJuKC0xKTsKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSNpZmRlZiBO RVRQVFkKLSAgICBpZiAodHRwdHkpIHJldHVybigtMSk7Ci0jZW5kaWYgLyogTkVUUFRZICovCi0K LSAgICBkZWJ1ZyhGMTAxLCJ0dGdzcGQgdHR5ZmQiLCIiLHR0eWZkKTsKLQotI2lmZGVmIFVTRVRD U0VUU1BFRUQKLQotICAgIHggPSB0Y2dldGF0dHIodHR5ZmQsJnR0Y3VyKTsJLyogR2V0IGN1cnJl bnQgc3BlZWQgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ0dGdzcGQgdGNnZXRhdHRyIiwiIix4KTsKLSAg ICBpZiAoeCA8IDApCi0gICAgICByZXR1cm4oLTEpOwotICAgIGVycm5vID0gMDsKLSAgICBzID0g dGNnZXRzcGVlZChUQ1NfQUxMLCAmdHRjdXIpOwotICAgIGRlYnVnKEYxMDEsInR0c3NwZCBUQ0dF VFNQRUVEIHNwZWVkIiwiIixzKTsKLSAgICBpZiAocyA9PSAwKSB7Ci0JbG9uZyBzMSwgczI7Ci0J czEgPSB0Y2dldHNwZWVkKFRDU19JTiwgJnR0Y3VyKTsKLQlzMiA9IHRjZ2V0c3BlZWQoVENTX09V VCwgJnR0Y3VyKTsKLQlpZiAoczEgPT0gMTIwMEwgJiYgczIgPT0gNzVMKQotCSAgcmV0dXJuKDg4 ODBMKTsKLSAgICB9Ci0jaWZkZWYgREVCVUcKLSAgICBpZiAoZXJybm8gJiBkZWJsb2cpIHsKLQlk ZWJ1ZyhGMTAxLCJ0dHNzcGQgVENHRVRTUEVFRCBlcnJubyIsIiIsZXJybm8pOwotICAgIH0KLSNl bmRpZiAvKiBERUJVRyAqLwotICAgIHJldHVybihzKTsKLQotI2Vsc2UgIC8qIE5vdCBVU0VUQ1NF VFNQRUVEICovCi0KLSNpZmRlZiBQbGFuOQotICAgIGlmICh0dHlmZCA8IDApCi0gICAgICBzcyA9 IC0xOwotICAgIGVsc2UKLSAgICAgIHNzID0gdHR5bGFzdHNwZWVkOwotI2Vsc2UKLSNpZmRlZiBP TElOVVhISVNQRUVECi0gICAgZGVidWcoRjEwMCwidHRnc3BkIExpbnV4IE9MSU5VWEhJU1BFRUQi LCIiLDApOwotI2VuZGlmIC8qIE9MSU5VWEhJU1BFRUQgKi8KLQotICAgIGlmICh0dHlmZCA8IDAp IHsKLSNpZmRlZiBCU0Q0NE9SUE9TSVgKLQlzID0gY2ZnZXRvc3BlZWQoJmNjb2xkKTsKLQlkZWJ1 ZyhGMTAxLCJ0dGdzcGQgY2ZnZXRvc3BlZWQgMSBQT1NJWCIsIiIscyk7Ci0jZWxzZQotI2lmZGVm IEFUVFNWCi0JcyA9IGNjb2xkLmNfY2ZsYWcgJiBDQkFVRDsKLQlkZWJ1ZyhGMTAxLCJ0dGdzcGQg Y19jZmxhZyBDQkFVRCAxIEFUVFNWIiwiIixzKTsKLSNlbHNlCi0JcyA9IGNjb2xkLnNnX29zcGVl ZDsJCS8qIChvYnRhaW5lZCBieSBjb25nbSgpKSAqLwotCWRlYnVnKEYxMDEsInR0Z3NwZCBzZ19v c3BlZWQgMSIsIiIscyk7Ci0jZW5kaWYgLyogQVRUU1YgKi8KLSNlbmRpZiAvKiBCU0Q0NFBPU0lY ICovCi0KLSAgICB9IGVsc2UgewotI2lmZGVmIEJTRDQ0T1JQT1NJWAotCWlmICh0Y2dldGF0dHIo dHR5ZmQsJnR0Y3VyKSA8IDApIHJldHVybigtMSk7Ci0JcyA9IGNmZ2V0b3NwZWVkKCZ0dGN1cik7 Ci0JZGVidWcoRjEwMSwidHRnc3BkIGNmZ2V0b3NwZWVkIDIgQlNET1JQT1NJWCIsIiIscyk7Ci0j aWZkZWYgT0xJTlVYSElTUEVFRAotCWlmIChpb2N0bCh0dHlmZCxUSU9DR1NFUklBTCwmc2VyaW5m bykgPiAtMSkKLQkgIHNwZF9mbGFncyA9IHNlcmluZm8uZmxhZ3MgJiBBU1lOQ19TUERfTUFTSzsK LQlkZWJ1ZyhGMTAxLCJ0dGdzcGQgc3BkX2ZsYWdzIiwiIixzcGRfZmxhZ3MpOwotI2VuZGlmIC8q IE9MSU5VWEhJU1BFRUQgKi8KLSNlbHNlCi0jaWZkZWYgQVRUU1YKLQl4ID0gaW9jdGwodHR5ZmQs VENHRVRBLCZ0dGN1cik7Ci0JZGVidWcoRjEwMSwidHRnc3BkIGlvY3RsIDIgQVRUU1YgeCIsIiIs eCk7Ci0JZGVidWcoRjEwMSwidHRnc3BkIGlvY3RsIDIgQVRUU1YgZXJybm8iLCIiLGVycm5vKTsK LQlpZiAoeCA8IDApIHJldHVybigtMSk7Ci0JcyA9IHR0Y3VyLmNfY2ZsYWcgJiBDQkFVRDsKLQlk ZWJ1ZyhGMTAxLCJ0dGdzcGQgaW9jdGwgMiBBVFRTViBzcGVlZCIsIiIscyk7Ci0jZWxzZQotI2lm ZGVmIEJFTExWMTAKLQl4ID0gaW9jdGwodHR5ZmQsVElPQ0dERVYsJnRkY3VyKTsKLQlkZWJ1ZyhG MTAxLCJ0dGdzcGQgaW9jdGwgMiBCRUxMVjEwIHgiLCIiLHgpOwotCWlmICh4IDwgMCkgcmV0dXJu KC0xKTsKLQlzID0gdGRjdXIub3NwZWVkOwotCWRlYnVnKEYxMDEsInR0Z3NwZCBpb2N0bCAyIEJF TExWMTAgc3BlZWQiLCIiLHMpOwotI2Vsc2UKLQl4ID0gZ3R0eSh0dHlmZCwmdHRjdXIpOwotCWRl YnVnKEYxMDEsInR0Z3NwZCBndHR5IDIgeCIsIiIseCk7Ci0JZGVidWcoRjEwMSwidHRnc3BkIGd0 dHkgMiBlcnJubyIsIiIsZXJybm8pOwotCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKLQlzID0gdHRj dXIuc2dfb3NwZWVkOwotCWRlYnVnKEYxMDEsInR0Z3NwZCBndHR5IDIgc3BlZWQiLCIiLHMpOwot I2VuZGlmIC8qIEJFTExWMTAgKi8KLSNlbmRpZiAvKiBBVFRTViAqLwotI2VuZGlmIC8qIEJTRDQ0 T1JQT1NJWCAqLwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJ0dGdzcGQgY29kZSIsIiIscyk7Ci0j aWZkZWYgT0xJTlVYSElTUEVFRAotICAgIGRlYnVnKEYxMDEsInR0Z3NwZCBzcGRfZmxhZ3MiLCIi LHNwZF9mbGFncyk7Ci0jZW5kaWYgLyogT0xJTlVYSElTUEVFRCAqLwotICAgIHN3aXRjaCAocykg ewotI2lmZGVmIEIwCi0gICAgICBjYXNlIEIwOiAgICBzcyA9IDBMOyBicmVhazsKLSNlbmRpZiAv KiBCMCAqLwotCi0jaWZuZGVmIE1JTklYCi0vKgotIE1JTklYIGRlZmluZXMgdGhlIEJ4eCBzeW1i b2xzIHRvIGJlIGJwcy8xMDAsIHNvIEI1MD09Qjc1LCBCMTEwPT1CMTM0PT1CMTUwLAotIGV0Yywg bWFraW5nIGZvciBtYW55ICJkdXBsaWNhdGUgY2FzZSBpbiBzd2l0Y2giIGVycm9ycywgd2hpY2gg YXJlIGZhdGFsLgotKi8KLSNpZmRlZiBCNTAKLSAgICAgIGNhc2UgQjUwOiAgIHNzID0gNTBMOyBi cmVhazsKLSNlbmRpZiAvKiBCNTAgKi8KLSNpZmRlZiBCNzUKLSAgICAgIGNhc2UgQjc1OiAgIHNz ID0gNzVMOyBicmVhazsKLSNlbmRpZiAvKiBCNzUgKi8KLSNlbmRpZiAvKiBNSU5JWCAqLwotCi0j aWZkZWYgQjExMAotICAgICAgY2FzZSBCMTEwOiAgc3MgPSAxMTBMOyBicmVhazsKLSNlbmRpZiAv KiBCMTEwICovCi0KLSNpZm5kZWYgTUlOSVgKLSNpZmRlZiBCMTM0Ci0gICAgICBjYXNlIEIxMzQ6 ICBzcyA9IDEzNEw7IGJyZWFrOwotI2VuZGlmIC8qIEIxMzQgKi8KLSNpZmRlZiBCMTUwCi0gICAg ICBjYXNlIEIxNTA6ICBzcyA9IDE1MEw7IGJyZWFrOwotI2VuZGlmIC8qIEIxNTAgKi8KLSNlbmRp ZiAvKiBNSU5JWCAqLwotCi0jaWZkZWYgQjIwMAotICAgICAgY2FzZSBCMjAwOiAgc3MgPSAyMDBM OyBicmVhazsKLSNlbmRpZiAvKiBCMjAwICovCi0KLSNpZmRlZiBCMzAwCi0gICAgICBjYXNlIEIz MDA6ICBzcyA9IDMwMEw7IGJyZWFrOwotI2VuZGlmIC8qIEIzMDAgKi8KLQotI2lmZGVmIEI2MDAK LSAgICAgIGNhc2UgQjYwMDogIHNzID0gNjAwTDsgYnJlYWs7Ci0jZW5kaWYgLyogQjYwMCAqLwot Ci0jaWZkZWYgQjEyMDAKLSAgICAgIGNhc2UgQjEyMDA6IHNzID0gMTIwMEw7IGJyZWFrOwotI2Vu ZGlmIC8qIEIxMjAwICovCi0KLSNpZmRlZiBCMTgwMAotICAgICAgY2FzZSBCMTgwMDogc3MgPSAx ODAwTDsgYnJlYWs7Ci0jZW5kaWYgLyogQjE4MDAgKi8KLQotI2lmZGVmIEIyNDAwCi0gICAgICBj YXNlIEIyNDAwOiBzcyA9IDI0MDBMOyBicmVhazsKLSNlbmRpZiAvKiBCMjQwMCAqLwotCi0jaWZk ZWYgQjQ4MDAKLSAgICAgIGNhc2UgQjQ4MDA6IHNzID0gNDgwMEw7IGJyZWFrOwotI2VuZGlmIC8q IEI0ODAwICovCi0KLSNpZmRlZiBCNzIwMAotICAgICAgY2FzZSBCNzIwMDogc3MgPSA3MjAwTDsg YnJlYWs7Ci0jZW5kaWYgLyogQjcyMDAgKi8KLQotI2lmZGVmIEI5NjAwCi0gICAgICBjYXNlIEI5 NjAwOiBzcyA9IDk2MDBMOyBicmVhazsKLSNlbmRpZiAvKiBCOTYwMCAqLwotCi0jaWZkZWYgQjE5 MjAwCi0gICAgICBjYXNlIEIxOTIwMDogc3MgPSAxOTIwMEw7IGJyZWFrOwotI2Vsc2UKLSNpZmRl ZiBFWFRBCi0gICAgICBjYXNlIEVYVEE6IHNzID0gMTkyMDBMOyBicmVhazsKLSNlbmRpZiAvKiBF WFRBICovCi0jZW5kaWYgLyogQjE5MjAwICovCi0KLSNpZm5kZWYgTUlOSVgKLSNpZmRlZiBCMzg0 MDAKLSAgICAgIGNhc2UgQjM4NDAwOgotICAgICAgICBzcyA9IDM4NDAwTDsKLSNpZmRlZiBPTElO VVhISVNQRUVECi0gICAgICAgIHN3aXRjaChzcGRfZmxhZ3MpIHsKLSAgICAgICAgICBjYXNlIEFT WU5DX1NQRF9ISTogIHNzID0gIDU3NjAwTDsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBBU1lOQ19T UERfVkhJOiBzcyA9IDExNTIwMEw7IGJyZWFrOwotCX0KLSNlbmRpZiAvKiBPTElOVVhISVNQRUVE ICovCi0gICAgICAgIGJyZWFrOwotI2Vsc2UKLSNpZmRlZiBFWFRCCi0gICAgICBjYXNlIEVYVEI6 IHNzID0gMzg0MDBMOyBicmVhazsKLSNlbmRpZiAvKiBFWFRCICovCi0jZW5kaWYgLyogQjM4NDAw ICovCi0jZW5kaWYgLyogTUlOSVggKi8KLQotI2lmZGVmIEhQVVgKLSNpZmRlZiBfQjU3NjAwCi0g ICAgICBjYXNlIF9CNTc2MDA6IHNzID0gNTc2MDBMOyBicmVhazsKLSNlbmRpZiAvKiBfQjU3NjAw ICovCi0jaWZkZWYgX0IxMTUyMDAKLSAgICAgIGNhc2UgX0IxMTUyMDA6IHNzID0gMTE1MjAwTDsg YnJlYWs7Ci0jZW5kaWYgLyogX0IxMTUyMDAgKi8KLSNlbHNlCi0jaWZkZWYgQjU3NjAwCi0gICAg ICBjYXNlIEI1NzYwMDogc3MgPSA1NzYwMEw7IGJyZWFrOwotI2VuZGlmIC8qIEI1NzYwMCAqLwot I2lmZGVmIEI3NjgwMAotICAgICAgY2FzZSBCNzY4MDA6IHNzID0gNzY4MDBMOyBicmVhazsKLSNl bmRpZiAvKiBCNzY4MDAgKi8KLSNpZmRlZiBCMTE1MjAwCi0gICAgICBjYXNlIEIxMTUyMDA6IHNz ID0gMTE1MjAwTDsgYnJlYWs7Ci0jZW5kaWYgLyogQjExNTIwMCAqLwotI2lmZGVmIEIxNTM2MDAK LSAgICAgIGNhc2UgQjE1MzYwMDogc3MgPSAxNTM2MDBMOyBicmVhazsKLSNlbmRpZiAvKiBCMTUz NjAwICovCi0jaWZkZWYgQjIzMDQwMAotICAgICAgY2FzZSBCMjMwNDAwOiBzcyA9IDIzMDQwMEw7 IGJyZWFrOwotI2VuZGlmIC8qIEIyMzA0MDAgKi8KLSNpZmRlZiBCMzA3MjAwCi0gICAgICBjYXNl IEIzMDcyMDA6IHNzID0gMzA3MjAwTDsgYnJlYWs7Ci0jZW5kaWYgLyogQjMwNzIwMCAqLwotI2lm ZGVmIEI0NjA4MDAKLSAgICAgIGNhc2UgQjQ2MDgwMDogc3MgPSA0NjA4MDBMOyBicmVhazsKLSNl bmRpZiAvKiBCNDYwODAwICovCi0jZW5kaWYgLyogSFBVWCAqLwotI2lmZGVmIEI5MjE2MDAKLSAg ICAgIGNhc2UgQjkyMTYwMDogc3MgPSA5MjE2MDBMOyBicmVhazsKLSNlbmRpZiAvKiBCOTIxNjAw ICovCi0gICAgICBkZWZhdWx0OgotCXNzID0gLTE7IGJyZWFrOwotICAgIH0KLSNlbmRpZiAvKiBQ bGFuOSAqLwotICAgIGRlYnVnKEYxMDEsInR0Z3NwZCBzcGVlZCIsIiIsc3MpOwotICAgIHJldHVy bihzcyk7Ci0KLSNlbmRpZiAvKiBVU0VUQ1NFVFNQRUVEICovCi0jZW5kaWYgLyogTk9MT0NBTCAq LwotfQotI2lmZGVmIE1JTklYMgkJCQkvKiBBbm90aGVyIGhhY2sgYWxlcnQgKi8KLSNkZWZpbmUg TUlOSVgKLSNlbmRpZiAvKiBNSU5JWDIgKi8KLQotLyoKLSAgRklPTlJFQUQgZGF0YSB0eXBlLi4u ICBUaGlzIGhhcyBiZWVuIGRlZmluZWQgYXMgImxvbmciIGZvciBtYW55LCBtYW55Ci0gIHllYXJz LCBhbmQgaXQgd29ya2VkIE9LIHVudGlsIDY0LWJpdCBwbGF0Zm9ybXMgYXBwZWFyZWQuICBUaHVz IHdlIHVzZQotICBpbnQgZm9yIDY0LWJpdCBwbGF0Zm9ybXMsIGJ1dCBrZWVwIGxvbmcgZm9yIHRo ZSBvdGhlcnMuICBJZiB3ZSBjaGFuZ2VkCi0gIHRoZSBkZWZhdWx0IFBFRUtUWVBFIHRvIGludCwg dGhpcyB3b3VsZCBwcm9iYWJseSBicmVhayAxNi1iaXQgYnVpbGRzCi0gIChub3RlIHRoYXQgc2l6 ZW9mKGxvbmcpID09IHNpemVvZihpbnQpIG9uIG1vc3QgMzItYml0IHBsYXRmb3JtcyksIG1hbnkK LSAgb2Ygd2hpY2ggd2UgaGF2ZSBubyB3YXkgb2YgdGVzdGluZyBhbnkgbW9yZS4gIFRoZXJlZm9y ZSwgZG8gbm90IGNoYW5nZQotICB0aGUgZGVmYXVsdCBkZWZpbml0aW9uIG9mIFBFRUtUWVBFIC0t IG9ubHkgYWRkIGV4Y2VwdGlvbnMgdG8gaXQgYXMgbmVlZGVkLgotKi8KLSNpZmRlZiBDT0hFUkVO VAotI2lmZGVmIEZJT05SRUFECi0jdW5kZWYgRklPTlJFQUQKLSNlbmRpZiAvKiBGSU9OUkVBRCAq LwotLyogI2RlZmluZSBGSU9OUkVBRCBUSU9DUVVFUlkgKi8KLS8qICNkZWZpbmUgUEVFS1RZUEUg aW50ICovCi0jZWxzZSAgLyogTm90IENPSEVSRU5ULi4uICovCi0KLSNpZmRlZiBPU0YzMgkJCQkv KiBEaWdpdGFsIFVOSVggMy4yIG9yIGhpZ2hlciAqLwotI2RlZmluZSBQRUVLVFlQRSBpbnQKLSNl bHNlCi0jZGVmaW5lIFBFRUtUWVBFIGxvbmcJCQkvKiBFbHNld2hlcmUgKHNlZSBub3RlcyBhYm92 ZSkgKi8KLSNlbmRpZiAvKiBPU0YzMiAqLwotI2VuZGlmIC8qIENPSEVSRU5UICovCi0KLS8qIGNr dW15ci5jIGJ5IEtyaXN0b2ZmZXIgRXJpa3Nzb24sIHNrZUBwa21hYi5zZSwgMTUgTWFyIDE5OTAu ICovCi0KLSNpZmRlZiBNWVJFQUQKLQotLyogUHJpdmF0ZSBidWZmZXIgZm9yIG15cmVhZCgpIGFu ZCBpdHMgY29tcGFuaW9ucy4gIE5vdCBmb3IgdXNlIGJ5IGFueXRoaW5nCi0gKiBlbHNlLiAgdHRm bHVpKCkgaXMgYWxsb3dlZCB0byByZXNldCB0aGVtIHRvIGluaXRpYWwgdmFsdWVzLiAgdHRjaGso KSBpcwotICogYWxsb3dlZCB0byByZWFkIG15X2NvdW50LgotICoKLSAqIG15X2l0ZW0gaXMgYW4g aW5kZXggaW50byBteWJ1ZltdLiAgSW5jcmVtZW50IGl0ICpiZWZvcmUqIHJlYWRpbmcgbXlidWZb XS4KLSAqCi0gKiBBIGdsb2JhbCBwYXJpdHkgbWFzayB2YXJpYWJsZSBjb3VsZCBiZSB1c2VmdWwg dG9vLiAgV2UgY291bGQgdXNlIGl0IHRvCi0gKiBsZXQgbXlyZWFkKCkgc3RyaXAgdGhlIHBhcml0 eSBvbiBpdHMgb3duLCBpbnN0ZWFkIG9mIHN0cmlwcGluZyBzaWduCi0gKiBiaXRzIGFzIGl0IGRv ZXMgbm93LgotICovCi0jaWZkZWYgQklHQlVGT0sKLSNkZWZpbmUgTVlCVUZMRU4gMzI3NjgKLSNl bHNlCi0jaWZkZWYgcGRwMTEKLSNkZWZpbmUgTVlCVUZMRU4gMjU2Ci0jZWxzZQotI2RlZmluZSBN WUJVRkxFTiAxMDI0Ci0jZW5kaWYgLyogcGRwMTEgKi8KLSNlbmRpZiAvKiBCSUdCVUZPSyAqLwot Ci0jaWZkZWYgQU5ZWDI1Ci0jdW5kZWYgTVlCVUZMRU4KLSNkZWZpbmUgTVlCVUZMRU4gMjU2Ci0v KgotICBPbiBYLjI1IGNvbm5lY3Rpb25zLCB0aGVyZSBpcyBhbiBleHRyYSBjb250cm9sIGJ5dGUg YXQgdGhlIGJlZ2lubmluZy4KLSovCi1zdGF0aWMgQ0hBUiB4MjVidWZbTVlCVUZMRU4rMV07CQkv KiBDb21tdW5pY2F0aW9uIGRldmljZSBpbnB1dCBidWZmZXIgKi8KLXN0YXRpYyBDSEFSICAqbXli dWYgPSB4MjVidWYrMTsKLSNlbHNlCi1zdGF0aWMgQ0hBUiBteWJ1ZltNWUJVRkxFTl07Ci0jZW5k aWYgLyogQU5ZWDI1ICovCi0KLXN0YXRpYyBpbnQgbXlfY291bnQgPSAwOwkJLyogTnVtYmVyIG9m IGNoYXJzIHN0aWxsIGluIG15YnVmICovCi1zdGF0aWMgaW50IG15X2l0ZW0gPSAtMTsJCS8qIExh c3QgaW5kZXggcmVhZCBmcm9tIG15YnVmW10gICAqLwotCi0vKiAgVCBUIFAgRSBFIEsgIC0tICBQ ZWVrIGludG8gb3VyIGludGVybmFsIGNvbW11bmljYXRpb25zIGlucHV0IGJ1ZmZlcnMuICovCi0K LS8qCi0gIE5PVEU6IFRoaXMgcm91dGluZSBpcyBwZWN1bGlhciB0byBVTklYLCBhbmQgaXMgdXNl ZCBvbmx5IGJ5IHRoZQotICBzZWxlY3QoKS1iYXNlZCBDT05ORUNUIG1vZHVsZSwgY2t1Y25zLmMu ICBJdCBuZWVkIG5vdCBiZSByZXBsaWNhdGVkIGluCi0gIHRoZSBjaz90aW8uYyBvZiBvdGhlciBw bGF0Zm9ybXMuCi0qLwotaW50Ci10dHBlZWsoKSB7Ci0jaWZkZWYgVFRMRUJVRgotICAgIGludCBy YyA9IDA7Ci0gICAgaWYgKHR0cHVzaCA+PSAwKQotICAgICAgcmMrKzsKLSAgICByYyArPSBsZV9p bmJ1ZigpOwotICAgIGlmIChyYyA+IDApCi0gICAgICByZXR1cm4ocmMpOwotICAgIGVsc2UKLSNl bmRpZiAvKiBUVExFQlVGICovCi0KLSNpZmRlZiBNWVJFQUQKLSAgICByZXR1cm4obXlfY291bnQp OwotI2Vsc2UKLSAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTVlSRUFEICovCi19Ci0KLS8qIG15 cmVhZCgpIC0tIEVmZmljaWVudCByZWFkIG9mIG9uZSBjaGFyYWN0ZXIgZnJvbSBjb21tdW5pY2F0 aW9ucyBsaW5lLgotICoKLSAqIE5PVEU6IG15cmVhZCgpIGFuZCBpdHMgaGVscGVycyBteWdldGJ1 ZigpIGFuZCBteWZpbGxidWYoKSByZXR1cm4gcmF3Ci0gKiBieXRlcyBmcm9tIGNvbm5lY3Rpb24s IHNvIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgZW5jcnlwdGVkLCB0aGVzZSBieXRlcwotICogbXVz dCBiZSBkZWNyeXB0ZWQuCi0gKgotICogVXNlcyBhIHByaXZhdGUgYnVmZmVyIHRvIG1pbmltaXpl IHRoZSBudW1iZXIgb2YgZXhwZW5zaXZlIHJlYWQoKSBzeXN0ZW0KLSAqIGNhbGxzLiAgRXNzZW50 aWFsbHkgcGVyZm9ybXMgdGhlIGVxdWl2YWxlbnQgb2YgcmVhZCgpIG9mIDEgY2hhcmFjdGVyLCB3 aGljaAotICogaXMgdGhlbiByZXR1cm5lZC4gIEJ5IHJlYWRpbmcgYWxsIGF2YWlsYWJsZSBpbnB1 dCBmcm9tIHRoZSBzeXN0ZW0gYnVmZmVycwotICogdG8gdGhlIHByaXZhdGUgYnVmZmVyIGluIG9u ZSBjaHVuaywgYW5kIHRoZW4gd29ya2luZyBmcm9tIHRoaXMgYnVmZmVyLCB0aGUKLSAqIG51bWJl ciBvZiBzeXN0ZW0gY2FsbHMgaXMgcmVkdWNlZCBpbiBhbnkgY2FzZSB3aGVyZSBtb3JlIHRoYW4g b25lIGNoYXJhY3RlcgotICogYXJyaXZlcyBkdXJpbmcgdGhlIHByb2Nlc3Npbmcgb2YgdGhlIHBy ZXZpb3VzIGNodW5rLCBmb3IgaW5zdGFuY2UgaGlnaAotICogYmF1ZCByYXRlcyBvciBuZXR3b3Jr IHR5cGUgY29ubmVjdGlvbnMgd2hlcmUgaW5wdXQgYXJyaXZlcyBpbiBwYWNrZXRzLgotICogSWYg dGhlIHRpbWUgbmVlZGVkIGZvciBhIHJlYWQoKSBzeXN0ZW0gY2FsbCBhcHByb2FjaGVzIHRoZSB0 aW1lIGZvciBtb3JlCi0gKiB0aGFuIG9uZSBjaGFyYWN0ZXIgdG8gYXJyaXZlLCB0aGVuIHRoaXMg bWVjaGFuaXNtIGF1dG9tYXRpY2FsbHkgY29tcGVuc2F0ZXMKLSAqIGZvciB0aGF0IGJ5IHBlcmZv cm1pbmcgYmlnZ2VyIHJlYWQoKXMgbGVzcyBmcmVxdWVudGx5LiAgSWYgdGhlIHN5c3RlbSBsb2Fk Ci0gKiBpcyBoaWdoLCB0aGUgc2FtZSBtZWNoYW5pc20gY29tcGVuc2F0ZXMgZm9yIHRoYXQgdG9v LgotICoKLSAqIG15cmVhZCgpIGlzIGEgbWFjcm8gdGhhdCByZXR1cm5zIHRoZSBuZXh0IGNoYXJh Y3RlciBmcm9tIHRoZSBidWZmZXIuICBJZiB0aGUKLSAqIGJ1ZmZlciBpcyBlbXB0eSwgbXlnZXRi dWYoKSBpcyBjYWxsZWQuICBTZWUgbXlnZXRidWYoKSBmb3IgcG9zc2libGUgZXJyb3IKLSAqIHJl dHVybnMuCi0gKgotICogVGhpcyBzaG91bGQgYmUgZWZmaWNpZW50IGVub3VnaCBmb3IgYW55IG9u ZS1jaGFyYWN0ZXItYXQtYS10aW1lIGxvb3BzLgotICogRm9yIGV2ZW4gYmV0dGVyIGVmZmljaWVu Y3kgeW91IG1pZ2h0IHVzZSBtZW1jcHkoKS9iY29weSgpIG9yIHN1Y2ggYmV0d2VlbgotICogYnVm ZmVycyAoc2luY2UgdGhleSBhcmUgb2Z0ZW4gYmV0dGVyIG9wdGltaXplZCBmb3IgY29weWluZyks IGJ1dCBpdCBtYXkgbm90Ci0gKiBiZSB3b3J0aCBpdCBpZiB5b3UgaGF2ZSB0byB0YWtlIGFuIGV4 dHJhIHBhc3Mgb3ZlciB0aGUgYnVmZmVyIHRvIHN0cmlwCi0gKiBwYXJpdHkgYW5kIGNoZWNrIGZv ciBDVFJMLUMgYW55d2F5LgotICoKLSAqIE5vdGUgdGhhdCBpZiB5b3UgaGF2ZSBiZWVuIHVzaW5n IG15cmVhZCgpIGZyb20gYW5vdGhlciBwcm9ncmFtIG1vZHVsZSwgeW91Ci0gKiBtYXkgaGF2ZSBz b21lIHRyb3VibGUgYWNjZXNzaW5nIHRoaXMgbWFjcm8gdmVyc2lvbiBhbmQgdGhlIHByaXZhdGUg dmFyaWFibGVzCi0gKiBpdCB1c2VzLiAgSW4gdGhhdCBjYXNlLCBqdXN0IGFkZCBhIGZ1bmN0aW9u IGluIHRoaXMgbW9kdWxlLCB0aGF0IGludm9rZXMgdGhlCi0gKiBtYWNyby4KLSAqLwotI2RlZmlu ZSBteXJlYWQoKSAoLS1teV9jb3VudCA8IDAgPyBteWdldGJ1ZigpIDogMjU1ICYgKGludClteWJ1 ZlsrK215X2l0ZW1dKQotCi0vKiBTcGVjaWZpY2F0aW9uOiBQdXNoIGJhY2sgdXAgdG8gb25lIGNo YXJhY3RlciBvbnRvIG15cmVhZCgpJ3MgcXVldWUuCi0gKgotICogVGhpcyBpbXBsZW1lbnRhdGlv bjogUHVzaCBiYWNrIGNoYXJhY3RlcnMgaW50byBteWJ1Zi4gQXQgbGVhc3Qgb25lIGNoYXJhY3Rl cgotICogbXVzdCBoYXZlIGJlZW4gcmVhZCB0aHJvdWdoIG15cmVhZCgpIGJlZm9yZSBteXVucmQo KSBtYXkgYmUgdXNlZC4gIEFmdGVyCi0gKiBFT0Ygb3IgcmVhZCBlcnJvciwgYWdhaW4sIG15dW5y ZCgpIGNhbiBub3QgYmUgdXNlZC4gIFNvbWV0aW1lcyBtb3JlIHRoYW4KLSAqIG9uZSBjaGFyYWN0 ZXIgY2FuIGJlIHB1c2hlZCBiYWNrLCBidXQgb25seSBvbmUgY2hhcmFjdGVyIGlzIGd1YXJhbnRl ZWQuCi0gKiBTaW5jZSBhIHByZXZpb3VzIG15cmVhZCgpIG11c3QgaGF2ZSByZWFkIGl0cyBjaGFy YWN0ZXIgb3V0IG9mIG15YnVmW10sCi0gKiB0aGF0IGd1YXJhbnRlZXMgdGhhdCB0aGVyZSBpcyBz cGFjZSBmb3IgYXQgbGVhc3Qgb25lIGNoYXJhY3Rlci4gIElmIHB1c2gKLSAqIGJhY2sgd2FzIHJl YWxseSBuZWVkZWQgYWZ0ZXIgRU9GLCBhIHNtYWxsIGFkZGl0aW9uIGNvdWxkIHByb3ZpZGUgdGhh dC4KLSAqCi0gKiBBcyBvZiAwMi8yMDA3IG15dW5yZCgpIGlzIHVzZWQgYnkgdHRpbmwoKS4KLSAq LwotVk9JRAotI2lmZGVmIENLX0FOU0lDCi1teXVucmQoQ0hBUiBjaCkKLSNlbHNlCi1teXVucmQo Y2gpIENIQVIgY2g7Ci0jZW5kaWYJLyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpZiAobXlfaXRlbSA+ PSAwKSB7Ci0JbXlidWZbbXlfaXRlbS0tXSA9IGNoOwotCSsrbXlfY291bnQ7Ci0gICAgfQotfQot Ci0vKiAgVCBUIFAgVSBTIEggQiBBIEMgSyAgLS0gIFB1dCBuIGJ5dGVzIGJhY2sgaW50byB0aGUg bXlyZWFkIGJ1ZmZlciAqLwotCi1zdGF0aWMgQ0hBUiAqIHB1c2hidWYgPSBOVUxMOwotLyogc3Rh dGljIGludCBwdXNoZWQgPSAwOyAqLwotCi1pbnQKLXR0cHVzaGJhY2socyxuKSBDSEFSICogczsg aW50IG47IHsKLSAgICBkZWJ1ZyhGMTAxLCJ0dHB1c2hiYWNrIG4iLCIiLG4pOwotICAgIGlmIChw dXNoYnVmIHx8IG4gPiBNWUJVRkxFTiB8fCBuIDwgMSkKLSAgICAgIHJldHVybigtMSk7Ci0gICAg ZGVidWcoRjEwMSwidHRwdXNoYmFjayBteV9jb3VudCIsIiIsbXlfY291bnQpOwotICAgIGlmICht eV9jb3VudCA+IDApIHsKLQlpZiAoIShwdXNoYnVmID0gKENIQVIgKiltYWxsb2MobisxKSkpCi0J ICByZXR1cm4oLTEpOwotCW1lbWNweShwdXNoYnVmLG15YnVmLG15X2NvdW50KTsKLQkvKiBwdXNo ZWQgPSBteV9jb3VudDsgKi8gLyogKHNldCBidXQgbmV2ZXIgdXNlZCkgKi8KLSAgICB9Ci0gICAg bWVtY3B5KG15YnVmLHMsbik7Ci0gICAgbXlfY291bnQgPSBuOwotICAgIG15X2l0ZW0gPSAtMTsK LSAgICByZXR1cm4oMCk7Ci19Ci0KLS8qIG15Z2V0YnVmKCkgLS0gRmlsbCBidWZmZXIgZm9yIG15 cmVhZCgpIGFuZCByZXR1cm4gZmlyc3QgY2hhcmFjdGVyLgotICoKLSAqIFRoaXMgZnVuY3Rpb24g aXMgd2hhdCBteXJlYWQoKSB1c2VzIHdoZW4gaXQgY2FuJ3QgZ2V0IHRoZSBuZXh0IGNoYXJhY3Rl cgotICogZGlyZWN0bHkgZnJvbSBpdHMgYnVmZmVyLiAgRmlyc3QsIGl0IGNhbGxzIGEgc3lzdGVt IGRlcGVuZGVudCBteWZpbGxidWYoKQotICogdG8gcmVhZCBhdCBsZWFzdCBvbmUgbmV3IGNoYXJh Y3RlciBpbnRvIHRoZSBidWZmZXIsIGFuZCB0aGVuIGl0IHJldHVybnMKLSAqIHRoZSBmaXJzdCBj aGFyYWN0ZXIganVzdCBhcyBteXJlYWQoKSB3b3VsZCBoYXZlIGRvbmUuICBUaGlzIGZ1bmN0aW9u IGFsc28KLSAqIGlzIHJlc3BvbnNpYmxlIGZvciBhbGwgZXJyb3IgY29uZGl0aW9ucyB0aGF0IG15 cmVhZCgpIGNhbiBpbmRpY2F0ZS4KLSAqCi0gKiBSZXR1cm5zOiBXaGVuIE9LCT0+IGEgcG9zaXRp dmUgY2hhcmFjdGVyLCAwIG9yIGdyZWF0ZXIuCi0gKgkgICAgV2hlbiBFT0YJPT4gLTIuCi0gKgkg ICAgV2hlbiBlcnJvcgk9PiAtMywgZXJyb3IgY29kZSBpbiBlcnJuby4KLSAqCi0gKiBPbGRlciBt eXJlYWQoKXMgYWRkaXRpb25hbGx5IHJldHVybmVkIC0xIHRvIGluZGljYXRlIHRoYXQgdGhlcmUg d2FzIG5vdGhpbmcKLSAqIHRvIHJlYWQsIHVwb24gd2hpY2ggdGhlIGNhbGxlciB3b3VsZCBjYWxs IG15cmVhZCgpIGFnYWluIHVudGlsIGl0IGdvdAotICogc29tZXRoaW5nLiAgVGhlIG5ldyBteXJl YWQoKS9teWdldGJ1ZigpIGFsd2F5cyBnZXRzIHNvbWV0aGluZy4gIElmIGl0Ci0gKiBkb2Vzbid0 LCB0aGVuIG1ha2UgaXQgZG8gc28hICBBbnkgcHJvZ3JhbSB0aGF0IGFjdHVhbGx5IGRlcGVuZHMg b24gdGhlIG9sZAotICogYmVoYXZpb3VyIHdpbGwgYnJlYWsuCi0gKgotICogVGhlIG9sZGVyIHZl cnNpb24gYWxzbyB1c2VkIHRvIHJldHVybiAtMiBib3RoIGZvciBFT0YgYW5kIG90aGVyIGVycm9y cywKLSAqIGFuZCB1c2VkIHRvIHNldCBlcnJubyB0byA5OTk5IG9uIEVPRi4gIFRoZSBlcnJubyBz dHVmZiBpcyBnb25lLCBFT0YgYW5kCi0gKiBvdGhlciBlcnJvcnMgbm93IHJldHVybiBkaWZmZXJl bnQgcmVzdWx0cywgYWx0aG91Z2ggS2VybWl0IGN1cnJlbnRseSBuZXZlcgotICogY2hlY2tzIHRv IHNlZSB3aGljaCBpdCB3YXMuICBJdCBqdXN0IGRpc2Nvbm5lY3RzIGluIGJvdGggY2FzZXMuCi0g KgotICogS2VybWl0IGxldHMgdGhlIHVzZXIgdXNlIHRoZSBxdWl0IGtleSB0byBwZXJmb3JtIHNv bWUgc3BlY2lhbCBjb21tYW5kcwotICogZHVyaW5nIGZpbGUgdHJhbnNmZXIuICBUaGlzIGNhdXNl cyByZWFkKCksIGFuZCB0aHVzIGFsc28gbXlnZXRidWYoKSwgdG8KLSAqIGZpbmlzaCB3aXRob3V0 IHJlYWRpbmcgYW55dGhpbmcgYW5kIHJldHVybiB0aGUgRUlOVFIgZXJyb3IuICBUaGlzIHNob3Vs ZAotICogYmUgY2hlY2tlZCBieSB0aGUgY2FsbGVyLiAgTXlnZXRidWYoKSBjb3VsZCByZXRyeSB0 aGUgcmVhZCgpIG9uIEVJTlRSLAotICogYnV0IGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVhZCwg dGhpcyBjb3VsZCBkZWxheSBLZXJtaXQncyByZWFjdGlvbiB0bwotICogdGhlIGNvbW1hbmQsIGFu ZCBtYWtlIEtlcm1pdCBhcHBlYXIgdW5yZXNwb25zaXZlLgotICoKLSAqIFRoZSBkZWJ1ZygpIGNh bGwgc2hvdWxkIGJlIHJlbW92ZWQgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuCi0gKi8KLWludAot bXlnZXRidWYoKSB7Ci0gICAgaW50IHg7Ci0gICAgZXJybm8gPSAwOwotI2lmZGVmIERFQlVHCi0g ICAgaWYgKGRlYmxvZyAmJiBteV9jb3VudCA+IDApCi0gICAgICBkZWJ1ZyhGMTAxLCJteWdldGJ1 ZiBJTVBST1BFUkxZIENBTExFRCB3aXRoIG15X2NvdW50IiwiIixteV9jb3VudCk7Ci0jZW5kaWYg LyogREVCVUcgKi8KLSAgICBpZiAobXlfY291bnQgPD0gMCkKLSAgICAgIG15X2NvdW50ID0gbXlm aWxsYnVmKCk7Ci0KLSNpZmRlZiBERUJVRwotI2lmZGVmIENPTU1FTlQKLSAgICBpZiAoZGVibG9n KSBkZWJ1ZyhGMTAxLCAibXlnZXRidWYgcmVhZCIsICIiLCBteV9jb3VudCk7Ci0jZWxzZSAvKiBD T01NRU5UICovCi0gICAgY2toZXhkdW1wKCJteWdldGJ1ZiByZWFkIiwgbXlidWYsIG15X2NvdW50 KTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZW5kaWYgLyogREVCVUcgKi8KLSAgICB4ID0gbXlf Y291bnQ7Ci0gICAgaWYgKG15X2NvdW50IDw9IDApIHsKLQlteV9jb3VudCA9IDA7Ci0JbXlfaXRl bSA9IC0xOwotCWRlYnVnKEYxMDEsIm15Z2V0YnVmIGVycm5vIiwiIixlcnJubyk7Ci0jaWZkZWYg VENQU09DS0VUCi0JaWYgKG5ldGNvbm4gJiYgdHRuZXQgPT0gTkVUX1RDUEIgJiYgZXJybm8gIT0g MCkgewotCSAgICBpZiAoZXJybm8gIT0gRUlOVFIpIHsKLQkJZGVidWcoRjEwMSwibXlnZXRidWYg VENQIGVycm9yIiwiIixlcnJubyk7Ci0JCXR0Y2xvcygwKTsJCS8qIENsb3NlIHRoZSBjb25uZWN0 aW9uLiAqLwotCSAgICB9Ci0JICAgIHJldHVybigtMyk7Ci0JfQotI2VuZGlmIC8qIFRDUFNPQ0tF VCAqLwotCWlmICghbmV0Y29ubiAmJiB4bG9jYWwgJiYgZXJybm8pIHsKLQkgICAgaWYgKGVycm5v ICE9IEVJTlRSKSB7Ci0JCWRlYnVnKEYxMDEsIm15Z2V0YnVmIFNFUklBTCBlcnJvciIsIiIsZXJy bm8pOwotCQl4ID0gLTM7Ci0JCXR0Y2xvcygwKTsJCS8qIENsb3NlIHRoZSBjb25uZWN0aW9uLiAq LwotCSAgICB9Ci0JfQotCXJldHVybigoeCA8IDApID8gLTMgOiAtMik7Ci0gICAgfQotICAgIC0t bXlfY291bnQ7Ci0gICAgcmV0dXJuKCh1bnNpZ25lZCkoMHhmZiAmIG15YnVmW215X2l0ZW0gPSAw XSkpOwotfQotCi0vKiBteWZpbGxidWYoKToKLSAqIFN5c3RlbS1kZXBlbmRlbnQgcmVhZCgpIGlu dG8gbXlidWZbXSwgYXMgbWFueSBjaGFyYWN0ZXJzIGFzIHBvc3NpYmxlLgotICoKLSAqIFJldHVy bnM6IE9LID0+IG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQsIGFsd2F5cyBtb3JlIHRoYW4gemVy by4KLSAqICAgICAgICAgIEVPRiA9PiAwCi0gKiAgICAgICAgICBFcnJvciA9PiAtMSwgZXJyb3Ig Y29kZSBpbiBlcnJuby4KLSAqCi0gKiBJZiB0aGVyZSBpcyBpbnB1dCBhdmFpbGFibGUgaW4gdGhl IHN5c3RlbSdzIGJ1ZmZlcnMsIGFsbCBvZiBpdCBzaG91bGQgYmUKLSAqIHJlYWQgaW50byBteWJ1 ZltdIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJuIGltbWVkaWF0ZWx5LiAgSWYgbm8gaW5wdXQgaXMK LSAqIGF2YWlsYWJsZSwgaXQgc2hvdWxkIHdhaXQgZm9yIGEgY2hhcmFjdGVyIHRvIGFycml2ZSwg YW5kIHJldHVybiB3aXRoIHRoYXQKLSAqIG9uZSBpbiBteWJ1ZltdIGFzIHNvb24gYXMgcG9zc2li bGUuICBJdCBtYXkgd2FpdCBzb21ld2hhdCBwYXN0IHRoZSBmaXJzdAotICogY2hhcmFjdGVyLCBi dXQgYmUgYXdhcmUgdGhhdCBhbnkgc3VjaCBkZWxheSBsZW5ndGhlbnMgdGhlIHBhY2tldCB0dXJu YXJvdW5kCi0gKiB0aW1lIGR1cmluZyBrZXJtaXQgZmlsZSB0cmFuc2ZlcnMuICBTaG91bGQgbmV2 ZXIgcmV0dXJuIHdpdGggemVybyBjaGFyYWN0ZXJzCi0gKiB1bmxlc3MgRU9GIG9yIGlycmVjb3Zl cmFibGUgcmVhZCBlcnJvci4KLSAqCi0gKiBDb3JyZWN0IGZ1bmN0aW9uaW5nIGRlcGVuZHMgb24g dGhlIGNvcnJlY3QgdHR5IHBhcmFtZXRlcnMgYmVpbmcgdXNlZC4KLSAqIEJldHRlciBjb250cm9s IG9mIGN1cnJlbnQgcGFyYW1ldGVycyBpcyByZXF1aXJlZCB0aGFuIG1heSBoYXZlIGJlZW4gdGhl Ci0gKiBjYXNlIGluIG9sZGVyIEtlcm1pdCByZWxlYXNlcy4gIEZvciBpbnN0YW5jZSwgT19OREVM QVkgKG9yIGVxdWl2YWxlbnQpIGNhbgotICogbm8gbG9uZ2VyIGJlIHNvbWV0aW1lcyBvZmYgYW5k IHNvbWV0aW1lcyBvbiBsaWtlIGl0IHVzZWQgdG8sIHVubGVzcyBhCi0gKiBzcGVjaWFsIG15Zmls bGJ1ZigpIGlzIHdyaXR0ZW4gdG8gaGFuZGxlIHRoYXQuICBPdGhlcndpc2UgdGhlIG9yZGluYXJ5 Ci0gKiBteWZpbGxidWYoKXMgbWF5IHRoaW5rIHRoZXkgaGF2ZSBjb21lIHRvIEVPRi4KLSAqCi0g KiBJZiB5b3VyIHN5c3RlbSBoYXMgYSBmYWNpbGl0eSB0byBkaXJlY3RseSBwZXJmb3JtIHRoZSBm dW5jdGlvbmluZyBvZgotICogbXlmaWxsYnVmKCksIHRoZW4gdXNlIGl0LiAgSWYgdGhlIHN5c3Rl bSBjYW4gdGVsbCB5b3UgaG93IG1hbnkgY2hhcmFjdGVycwotICogYXJlIGF2YWlsYWJsZSBpbiBp dHMgYnVmZmVycywgdGhlbiByZWFkIHRoYXQgYW1vdW50IChidXQgbm90IGxlc3MgdGhhbiAxKS4K LSAqIElmIHRoZSBzeXN0ZW0gY2FuIHJldHVybiBhIHNwZWNpYWwgaW5kaWNhdGlvbiB3aGVuIHlv dSB0cnkgdG8gcmVhZCB3aXRob3V0Ci0gKiBhbnl0aGluZyB0byByZWFkLCB3aGlsZSBhbGxvd2lu ZyB5b3UgdG8gcmVhZCBhbGwgdGhlcmUgaXMgd2hlbiB0aGVyZSBpcwotICogc29tZXRoaW5nLCB5 b3UgbWF5IGxvb3AgdW50aWwgdGhlcmUgaXMgc29tZXRoaW5nIHRvIHJlYWQsIGJ1dCBwcm9iYWJs eSB0aGF0Ci0gKiBpcyBub3QgZ29vZCBmb3IgdGhlIHN5c3RlbSBsb2FkLgotICovCi0KLSNpZmRl ZiBTVk9SUE9TSVgKLQkvKiBUaGlzIGlzIGZvciBTeXN0ZW0gSUlJL1Ygd2l0aCBWTUlOPjAsIFZU SU1FPTAgYW5kIE9fTkRFTEFZIG9mZiwKLQkgKiBhbmQgQ0xPQ0FMIHNldCBhbnkgd2F5IHlvdSBs aWtlLiAgVGhpcyB3YXksIHJlYWQoKSB3aWxsIGRvIGV4YWN0bHkKLQkgKiB3aGF0IGlzIHJlcXVp cmVkIGJ5IG15ZmlsbGJ1ZigpOiBJZiB0aGVyZSBpcyBkYXRhIGluIHRoZSBidWZmZXJzCi0JICog b2YgdGhlIE8uUy4sIGFsbCBhdmFpbGFibGUgZGF0YSBpcyByZWFkIGludG8gbXlidWYsIHVwIHRv IHRoZSBzaXplCi0JICogb2YgbXlidWYuICBJZiB0aGVyZSBpcyBub25lLCB0aGUgZmlyc3QgY2hh cmFjdGVyIHRvIGFycml2ZSBpcwotCSAqIGF3YWl0ZWQgYW5kIHJldHVybmVkLgotCSAqLwotaW50 Ci1teWZpbGxidWYoKSB7Ci0gICAgaW50IGZkLCBuOwotI2lmZGVmIE5FVENNRAotICAgIGlmICh0 dHBpcGUpCi0gICAgICBmZCA9IGZkaW47Ci0gICAgZWxzZQotI2VuZGlmIC8qIE5FVENNRCAqLwot ICAgICAgZmQgPSB0dHlmZDsKLQotI2lmZGVmIHN4YUU1MAotICAgIC8qIEZyb20gUy4gRGV6YXdh IGF0IEZ1amlmaWxtIGluIEphcGFuLiAgSSBkb24ndCBrbm93IHdoeSB0aGlzIGlzICovCi0gICAg LyogbmVjZXNzYXJ5IGZvciB0aGUgc3hhIEU1MCwgYnV0IGl0IGlzLiAqLwotICAgIHJldHVybiBy ZWFkKGZkLCBteWJ1ZiwgMjU1KTsKLSNlbHNlCi0jaWZkZWYgQkVPU09SQkVCT1gKLSAgICB3aGls ZSAoMSkgewotI2lmZGVmIE5FVENPTk4KLSAgICAgICAgaWYgKG5ldGNvbm4pIHsKLSAgICAgICAg ICAgIG4gPSBuZXR4aW4oc2l6ZW9mKG15YnVmKSwgKGNoYXIgKilteWJ1Zik7Ci0gICAgICAgICAg ICBkZWJ1ZyhGMTAxLCJCRUJPWCBTVk9SUE9TSVggbmV0d29yayBteWZpbGxidWYiLCIiLG4pOwot CX0KLSAgICAgICAgZWxzZQotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQkgIG4gPSByZWFkKGZkLCBt eWJ1Ziwgc2l6ZW9mKG15YnVmKSk7Ci0JZGVidWcoRjEwMSwiQkVCT1ggU1ZPUlBPU0lYIG5vdG5l dCBteWZpbGxidWYiLCIiLG4pOwotICAgICAgICBpZiAobiA+IDApCi0JICByZXR1cm4obik7Ci0g ICAgICAgIHNub296ZSgxMDAwLjApOwotICAgIH0KLSNlbHNlIC8qIEJFT1NPUkJFQk9YICovCi0g ICAgZXJybm8gPSAwOwotICAgIC8qIGRlYnVnKEYxMDEsIlNWT1JQT1NJWCBteWZpbGxidWYgY2Fs bGluZyByZWFkKCkgZmQiLCIiLGZkKTsgKi8KLSNpZmRlZiBJQk1YMjUKLSAgICBpZiAobmV0Y29u biAmJiAobmV0dHlwZSA9PSBORVRfSVgyNSkpIHsKLQkvKiBjYW4ndCB1c2Ugc2l6ZW9mIGJlY2F1 c2UgbXlidWYgaXMgYSBwb2ludGVyLCBhbmQgbm90IGFuIGFycmF5ISAqLwotCW4gPSB4MjV4aW4o IE1ZQlVGTEVOLCBteWJ1ZiApOwotICAgIH0gZWxzZQotI2VuZGlmIC8qIElCTVgyNSAqLwotCi0j aWZkZWYgQ0tfU1NMCi0gICAgICBpZiAoc3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxh ZykgewotCSAgaW50IGVycm9yLCBuID0gMDsKLQkgIGRlYnVnKEYxMDAsIm15ZmlsbGJ1ZiBjYWxs aW5nIFNTTF9yZWFkKCkgZmQiLCIiLDApOwotCSAgd2hpbGUgKG4gPT0gMCkgewotCSAgICAgIGlm IChzc2xfYWN0aXZlX2ZsYWcpCi0gICAgICAgICAgICAgICAgbiA9IFNTTF9yZWFkKHNzbF9jb24s IChjaGFyICopbXlidWYsIHNpemVvZihteWJ1ZikpOwotCSAgICAgIGVsc2UgaWYgKHRsc19hY3Rp dmVfZmxhZykKLSAgICAgICAgICAgICAgICBuID0gU1NMX3JlYWQodGxzX2NvbiwgKGNoYXIgKilt eWJ1Ziwgc2l6ZW9mKG15YnVmKSk7Ci0gICAgICAgICAgICAgIGVsc2UKLQkJYnJlYWs7Ci0JICAg ICAgc3dpdGNoIChTU0xfZ2V0X2Vycm9yKHNzbF9hY3RpdmVfZmxhZz9zc2xfY29uOnRsc19jb24s bikpIHsKLQkJY2FzZSBTU0xfRVJST1JfTk9ORToKLQkJICBpZiAobiA+IDApCi0gICAgICAgICAg ICAgICAgICAgIHJldHVybihuKTsKLQkJICBpZiAobiA8IDApCi0gICAgICAgICAgICAgICAgICAg IHJldHVybigtMik7Ci0JCSAgbXNsZWVwKDUwKTsKLQkJICBicmVhazsKLQkJY2FzZSBTU0xfRVJS T1JfV0FOVF9XUklURToKLQkJY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgotCQkgIHJldHVybigt MSk7Ci0JCWNhc2UgU1NMX0VSUk9SX1NZU0NBTEw6Ci0JCSAgaWYgKG4gIT0gMCkKLQkJICAgIHJl dHVybigtMSk7Ci0JCWNhc2UgU1NMX0VSUk9SX1dBTlRfWDUwOV9MT09LVVA6Ci0JCWNhc2UgU1NM X0VSUk9SX1NTTDoKLQkJY2FzZSBTU0xfRVJST1JfWkVST19SRVRVUk46Ci0JCWRlZmF1bHQ6Ci0J CSAgdHRjbG9zKDApOwotCQkgIHJldHVybigtMyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K LSAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSNpZmRlZiBL UkI0Ci0jaWZkZWYgUkxPR0NPREUKLSAgICBpZiAodHRucHJvdG8gPT0gTlBfRUs0TE9HSU4pIHsK LQlkZWJ1ZyhGMTAxLCJteWZpbGxidWYgY2FsbGluZyBrcmI0X2Rlc19yZWFkKCkgZmQiLCIiLHR0 eWZkKTsKLSAgICAgICAgaWYgKChuID0ga3JiNF9kZXNfcmVhZCh0dHlmZCwoY2hhciAqKW15YnVm LHNpemVvZihteWJ1ZikpKSA8IDApCi0JICByZXR1cm4oLTMpOwotICAgICAgICBlbHNlCi0JICBy ZXR1cm4obik7Ci0gICAgfQotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0jZW5kaWYgLyogS1JCNCAq LwotI2lmZGVmIEtSQjUKLSNpZmRlZiBSTE9HQ09ERQotICAgIGlmICh0dG5wcm90byA9PSBOUF9F SzVMT0dJTikgewotCWRlYnVnKEYxMDEsIm15ZmlsbGJ1ZiBjYWxsaW5nIGtyYjVfZGVzX3JlYWQo KSBmZCIsIiIsdHR5ZmQpOwotICAgICAgICBpZiAoKG4gPSBrcmI1X2Rlc19yZWFkKHR0eWZkLChj aGFyICopbXlidWYsc2l6ZW9mKG15YnVmKSwwKSkgPCAwKQotCSAgcmV0dXJuKC0zKTsKLSAgICAg ICAgZWxzZQotCSAgcmV0dXJuKG4pOwotICAgIH0KLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotI2lm ZGVmIEtSQjVfVTJVCi0gICAgaWYgKHR0bnByb3RvID09IE5QX0s1VTJVKSB7Ci0JZGVidWcoRjEw MSwibXlmaWxsYnVmIGNhbGxpbmcga3JiNV91MnVfcmVhZCgpIGZkIiwiIix0dHlmZCk7Ci0gICAg ICAgIGlmICgobiA9IGtyYjVfdTJ1X3JlYWQodHR5ZmQsKGNoYXIgKilteWJ1ZixzaXplb2YobXli dWYpKSkgPCAwKQotCSAgcmV0dXJuKC0zKTsKLSAgICAgICAgZWxzZQotCSAgcmV0dXJuKG4pOwot ICAgIH0KLSNlbmRpZiAvKiBLUkI1X1UyVSAqLwotI2VuZGlmIC8qIEtSQjUgKi8KLSNlbmRpZiAv KiBDS19LRVJCRVJPUyAqLwotCi0jaWZkZWYgTkVUUFRZCi0jaWZkZWYgSEFWRV9QVFlUUkFQCi0g ICAgLyogU3BlY2lhbCBoYW5kbGluZyBmb3IgSFAtVVggcHR5IGkvbyAqLwotICBwdHlyZWFkOgot ICAgIGlmICh0dHB0eSAmJiBwdHlfdHJhcF9wZW5kaW5nKHR0eWZkKSA+IDApIHsKLQlkZWJ1ZyhG MTAxLCJteWZpbGxidWYgY2FsbGluZyBwdHlfdHJhcF9oYW5kbGVyKCkgZmQiLCIiLHR0eWZkKTsK LSAgICAgICAgaWYgKHB0eV90cmFwX2hhbmRsZXIodHR5ZmQpID4gMCkgewotICAgICAgICAgICAg dHRjbG9zKDApOwotICAgICAgICAgICAgcmV0dXJuKC0zKTsKLSAgICAgICAgfQotICAgIH0KLSNl bmRpZiAvKiBIQVZFX1BUWVRSQVAgKi8KLSNlbmRpZiAvKiBORVRQVFkgKi8KLSAgICBkZWJ1ZyhG MTAxLCJteWZpbGxidWYgY2FsbGluZyByZWFkKCkgZmQiLCIiLHR0eWZkKTsKLSAgICBuID0gcmVh ZChmZCwgbXlidWYsIHNpemVvZihteWJ1ZikpOwotICAgIGRlYnVnKEYxMDEsIlNWT1JQT1NJWCBt eWZpbGxidWYgcmVhZCIsIiIsbik7Ci0gICAgZGVidWcoRjEwMSwiU1ZPUlBPU0lYIG15ZmlsbGJ1 ZiBlcnJubyIsIiIsZXJybm8pOwotICAgIGRlYnVnKEYxMDEsIlNWT1JQT1NJWCBteWZpbGxidWYg dHRjYXJyIiwiIix0dGNhcnIpOwotICAgIGlmIChuIDwgMSkgewotI2lmZGVmIE5FVFBUWQotI2lm ZGVmIEhBVkVfUFRZVFJBUAotICAgICAgICAvKiBXaGVuIHdlIGhhdmUgYSBQVFkgdHJhcCBpbiBw bGFjZSB0aGUgY29ubmVjdGlvbiBjYW5ub3QgKi8KLSAgICAgICAgLyogYmUgY2xvc2VkIHVudGls IHRoZSB0cmFwIHJlY2VpdmVzIGEgY2xvc2UgaW5kaWNhdGlvbi4gICovCi0gICAgICAgIGlmIChu ID09IDAgJiYgdHRwdHkpCi0gICAgICAgICAgICBnb3RvIHB0eXJlYWQ7Ci0jZW5kaWYgLyogSEFW RV9QVFlUUkFQICovCi0jZW5kaWYgLyogTkVUUFRZICovCi0gICAgICAgIHJldHVybigtMyk7Ci0g ICAgfQotICAgIHJldHVybihuKTsKLSNlbmRpZiAvKiBCRU9TT1JCRUJPWCAqLwotI2VuZGlmIC8q IHN4YUU1MCAqLwotfQotCi0jZWxzZSAvKiBub3QgQVQmVCBvciBQT1NJWCAqLwotCi0jaWZkZWYg YWVnaXMKLQkvKiBUaGlzIGlzIHF1b3RlZCBmcm9tIHRoZSBvbGQgbXlyZWFkKCkuICBUaGUgc2Vt YW50aWNzIHNlZW0gdG8gYmUKLQkgKiBhbHJpZ2h0LCBidXQgbWF5YmUgZXJybm8gd291bGQgbm90 IG5lZWQgdG8gYmUgc2V0IGV2ZW4gd2hlbgotCSAqIHRoZXJlIGlzIG5vIGVycm9yPyAgSSBkb24n dCBrbm93IGFlZ2lzLgotCSAqLwotaW50Ci1teWZpbGxidWYoKSB7Ci0gICAgaW50IGNvdW50Owot I2lmZGVmIE5FVENNRAotICAgIGlmICh0dHBpcGUpCi0gICAgICBmZCA9IGZkaW47Ci0gICAgZWxz ZQotI2VuZGlmIC8qIE5FVENNRCAqLwotICAgICAgZmQgPSB0dHlmZDsKLQotICAgIGNvdW50ID0g aW9zXyRnZXQoKHNob3J0KWZkLCBpb3NfJGNvbmRfb3B0LCBteWJ1ZiwgMjU2TCwgc3QpOwotICAg IGVycm5vID0gRUlPOwotICAgIGlmIChzdC5hbGwgPT0gaW9zXyRnZXRfY29uZGl0aW9uYWxfZmFp bGVkKSAvKiBnZXQgYXQgbGVhc3Qgb25lICovCi0gICAgICBjb3VudCA9IGlvc18kZ2V0KChzaG9y dClmZCwgMCwgbXlidWYsIDFMLCBzdCk7Ci0gICAgaWYgKHN0LmFsbCA9PSBpb3NfJGVuZF9vZl9m aWxlKQotICAgICAgcmV0dXJuKC0zKTsKLSAgICBlbHNlIGlmIChzdC5hbGwgIT0gc3RhdHVzXyRv aykgewotCWVycm5vID0gRUlPOwotCXJldHVybigtMSk7Ci0gICAgfQotICAgIHJldHVybihjb3Vu dCA+IDAgPyBjb3VudCA6IC0zKTsKLX0KLSNlbHNlIC8qICFhZWdpcyAqLwotCi0jaWZkZWYgRklP TlJFQUQKLQkvKiBUaGlzIGlzIGZvciBzeXN0ZW1zIHdpdGggRklPTlJFQUQuICBGSU9OUkVBRCBy ZXR1cm5zIHRoZSBudW1iZXIKLQkgKiBvZiBjaGFyYWN0ZXJzIGF2YWlsYWJsZSBmb3IgcmVhZGlu Zy4gSWYgbm9uZSBhcmUgYXZhaWxhYmxlLCB3YWl0Ci0JICogdW50aWwgc29tZXRoaW5nIGFycml2 ZXMsIG90aGVyd2lzZSByZXR1cm4gYWxsIHRoZXJlIGlzLgotCSAqLwotaW50Ci1teWZpbGxidWYo KSB7Ci0gICAgUEVFS1RZUEUgYXZhaWwgPSAwOwotICAgIGludCB4LCBmZDsKLSNpZmRlZiBORVRD TUQKLSAgICBpZiAodHRwaXBlKQotICAgICAgZmQgPSBmZGluOwotICAgIGVsc2UKLSNlbmRpZiAv KiBORVRDTUQgKi8KLSAgICAgIGZkID0gdHR5ZmQ7Ci0KLSNpZmRlZiBTVU5YMjUKLS8qCi0gIFN1 bkxpbmsgWC4yNSBzdXBwb3J0IGluIHRoaXMgcm91dGluZSBmcm9tIFN0ZWZhYW4gQS4gRWVja2Vs cywgRXVyb3N0YXQgKENFQykuCi0gIERlcGVuZHMgb24gU3VuT1MgaGF2aW5nIEZJT05SRUFELCBu b3QgYmVjYXVzZSB3ZSB1c2UgaXQsIGJ1dCBqdXN0IHNvIHRoaXMKLSAgY29kZSBpcyBncm91cGVk IGNvcnJlY3RseSB3aXRoaW4gdGhlICNpZmRlZnMuICBMZXQncyBob3BlIFNvbGFyaXMga2VlcHMg aXQuCi0KLSAgV2UgY2FsbCB4MjV4aW4oKSBpbnN0ZWFkIG9mIHJlYWQoKSBzbyB0aGF0IFEtQml0 IHBhY2tldHMsIHdoaWNoIGNvbnRhaW4KLSAgWC4yNSBzZXJ2aWNlLWxldmVsIGluZm9ybWF0aW9u IChlLmcuIFBBRCBwYXJhbWV0ZXIgY2hhbmdlcyksIGNhbiBiZSBwcm9jZXNzZWQKLSAgdHJhbnNw YXJlbnRseSB0byB0aGUgdXBwZXItbGV2ZWwgY29kZS4gIFRoaXMgaXMgYSBibG9ja2luZyByZWFk LCBhbmQgc28KLSAgd2UgZGVwZW5kIG9uIGhpZ2hlci1sZXZlbCBjb2RlIChzdWNoIGFzIHR0aW5j KCkpIHRvIHNldCBhbnkgbmVjZXNzYXJ5IGFsYXJtcy4KLSovCi0gICAgZXh0ZXJuIGludCBuZXR0 eXBlOwotICAgIGlmIChuZXRjb25uICYmIG5ldHR5cGUgPT0gTkVUX1NYMjUpIHsKLQl3aGlsZSAo KHggPSB4MjV4aW4oc2l6ZW9mKHgyNWJ1ZiksIHgyNWJ1ZikpIDwgMSkgOwotCXJldHVybih4IC0g MSk7CSAgICAgICAgLyogIi0xIiBjb21wZW5zYXRlcyBmb3IgZXh0cmEgc3RhdHVzIGJ5dGUgKi8K LSAgICB9Ci0jZW5kaWYgLyogU1VOWDI1ICovCi0KLSNpZmRlZiBDS19TU0wKLSAgICBpZiAoc3Ns X2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykgewotICAgICAgICBpbnQgZXJyb3IsIG4g PSAwOwotICAgICAgICB3aGlsZSAobiA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAoc3NsX2FjdGl2 ZV9mbGFnKQotCSAgICAgIG4gPSBTU0xfcmVhZChzc2xfY29uLCAoY2hhciAqKW15YnVmLCBzaXpl b2YobXlidWYpKTsKLSAgICAgICAgICAgIGVsc2UKLQkgICAgICBuID0gU1NMX3JlYWQodGxzX2Nv biwgKGNoYXIgKilteWJ1Ziwgc2l6ZW9mKG15YnVmKSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKFNT TF9nZXRfZXJyb3Ioc3NsX2FjdGl2ZV9mbGFnP3NzbF9jb246dGxzX2NvbixuKSkgewotCSAgICAg IGNhc2UgU1NMX0VSUk9SX05PTkU6Ci0gICAgICAgICAgICAgICAgaWYgKG4gPiAwKQotCQkgIHJl dHVybihuKTsKLSAgICAgICAgICAgICAgICBpZiAobiA8IDApCi0JCSAgcmV0dXJuKC0yKTsKLSAg ICAgICAgICAgICAgICBtc2xlZXAoNTApOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCSAgICAg IGNhc2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6Ci0JICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9S RUFEOgotICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0JICAgICAgY2FzZSBTU0xfRVJST1Jf U1lTQ0FMTDoKLQkJaWYgKG4gIT0gMCkKLQkJICByZXR1cm4oLTEpOwotCSAgICAgIGNhc2UgU1NM X0VSUk9SX1dBTlRfWDUwOV9MT09LVVA6Ci0JICAgICAgY2FzZSBTU0xfRVJST1JfU1NMOgotCSAg ICAgIGNhc2UgU1NMX0VSUk9SX1pFUk9fUkVUVVJOOgotCSAgICAgIGRlZmF1bHQ6Ci0gICAgICAg ICAgICAgICAgdHRjbG9zKDApOwotICAgICAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0jaWZkZWYgQ0tf S0VSQkVST1MKLSNpZmRlZiBLUkI0Ci0jaWZkZWYgUkxPR0NPREUKLSAgICBpZiAodHRucHJvdG8g PT0gTlBfRUs0TE9HSU4pIHsKLSAgICAgICAgaWYgKCh4ID0ga3JiNF9kZXNfcmVhZCh0dHlmZCxt eWJ1ZixzaXplb2YobXlidWYpKSkgPCAwKQotCSAgcmV0dXJuKC0xKTsKLSAgICAgICAgZWxzZQot CSAgcmV0dXJuKHgpOwotICAgIH0KLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotI2VuZGlmIC8qIEtS QjQgKi8KLSNpZmRlZiBLUkI1Ci0jaWZkZWYgUkxPR0NPREUKLSAgICBpZiAodHRucHJvdG8gPT0g TlBfRUs1TE9HSU4pIHsKLSAgICAgICAgaWYgKCh4ID0ga3JiNV9kZXNfcmVhZCh0dHlmZCxteWJ1 ZixzaXplb2YobXlidWYpLDApKSA8IDApCi0JICByZXR1cm4oLTEpOwotICAgICAgICBlbHNlCi0J ICByZXR1cm4oeCk7Ci0gICAgfQotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0jaWZkZWYgS1JCNV9V MlUKLSAgICBpZiAodHRucHJvdG8gPT0gTlBfSzVVMlUpIHsKLSAgICAgICAgaWYgKCh4ID0ga3Ji NV91MnVfcmVhZCh0dHlmZCxteWJ1ZixzaXplb2YobXlidWYpKSkgPCAwKQotCSAgcmV0dXJuKC0x KTsKLSAgICAgICAgZWxzZQotCSAgcmV0dXJuKHgpOwotICAgIH0KLSNlbmRpZiAvKiBLUkI1X1Uy VSAqLwotI2VuZGlmIC8qIEtSQjUgKi8KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotCi0gICAg ZXJybm8gPSAwOwotICAgIGRlYnVnKEYxMDEsIm15ZmlsbGJ1ZiBjYWxsaW5nIEZJT05SRUFEIGlv Y3RsIiwiIix4bG9jYWwpOwotICAgIHggPSBpb2N0bChmZCwgRklPTlJFQUQsICZhdmFpbCk7Ci0j aWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKSB7Ci0JZGVidWcoRjEwMSwibXlmaWxsYnVmIEZJ T05SRUFEIiwiIix4KTsKLQlkZWJ1ZyhGMTAxLCJteWZpbGxidWYgRklPTlJFQUQgYXZhaWwiLCIi LGF2YWlsKTsKLQlkZWJ1ZyhGMTAxLCJteWZpbGxidWYgRklPTlJFQUQgZXJybm8iLCIiLGVycm5v KTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICBpZiAoeCA8IDAgfHwgYXZhaWwgPT0g MCkKLSAgICAgIGF2YWlsID0gMTsKLQotICAgIGlmIChhdmFpbCA+IE1ZQlVGTEVOKQotICAgICAg YXZhaWwgPSBNWUJVRkxFTjsKLQotICAgIGVycm5vID0gMDsKLQotICAgIHggPSByZWFkKGZkLCBt eWJ1ZiwgKGludCkgYXZhaWwpOwotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewotCWRl YnVnKEYxMDEsIm15ZmlsbGJ1ZiBhdmFpbCIsIiIsYXZhaWwpOwotCWRlYnVnKEYxMDEsIm15Zmls bGJ1ZiByZWFkIiwiIix4KTsKLQlkZWJ1ZyhGMTAxLCJteWZpbGxidWYgcmVhZCBlcnJubyIsIiIs ZXJybm8pOwotICAgICAgICBpZiAoeCA+IDApCi0JICBja2hleGR1bXAoIm15ZmlsbGJ1ZiBteWJ1 ZiIsbXlidWYseCk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0gICAgaWYgKHggPCAxKSB4 ID0gLTM7CQkJLyogcmVhZCAwID09IGNvbm5lY3Rpb24gbG9zcyAqLwotICAgIHJldHVybih4KTsK LX0KLQotI2Vsc2UgLyogIUZJT05SRUFEICovCi0vKiBBZGQgb3RoZXIgc3lzdGVtcyBoZXJlLCBi ZXR3ZWVuICNpZmRlZiBhbmQgI2Vsc2UsIGUuZy4gTkVUQ09OTi4gKi8KLS8qIFdoZW4gdGhlcmUg aXMgbm8gb3RoZXIgcG9zc2liaWxpdHksIHJlYWQgMSBjaGFyYWN0ZXIgYXQgYSB0aW1lLiAqLwot aW50Ci1teWZpbGxidWYoKSB7Ci0gICAgaW50IHg7Ci0KLSNpZmRlZiBDS19TU0wKLSAgICBpZiAo c3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykgewotICAgICAgICBpbnQgZXJyb3Is IG4gPSAwOwotICAgICAgICB3aGlsZSAobiA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAoc3NsX2Fj dGl2ZV9mbGFnKQotCSAgICAgIG4gPSBTU0xfcmVhZChzc2xfY29uLCAoY2hhciAqKW15YnVmLCBz aXplb2YobXlidWYpKTsKLSAgICAgICAgICAgIGVsc2UKLQkgICAgICBjb3VudCA9IFNTTF9yZWFk KHRsc19jb24sIChjaGFyICopbXlidWYsIHNpemVvZihteWJ1ZikpOwotICAgICAgICAgICAgc3dp dGNoIChTU0xfZ2V0X2Vycm9yKHNzbF9hY3RpdmVfZmxhZz9zc2xfY29uOnRsc19jb24sbikpIHsK LQkgICAgICBjYXNlIFNTTF9FUlJPUl9OT05FOgotICAgICAgICAgICAgICAgIGlmIChuID4gMCkK LQkJICByZXR1cm4obik7Ci0gICAgICAgICAgICAgICAgaWYgKG4gPCAwKQotCQkgIHJldHVybigt Mik7Ci0gICAgICAgICAgICAgICAgbXNsZWVwKDUwKTsKLSAgICAgICAgICAgICAgICBicmVhazsK LQkgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRFOgotCSAgICAgIGNhc2UgU1NMX0VSUk9S X1dBTlRfUkVBRDoKLSAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotCSAgICAgIGNhc2UgU1NM X0VSUk9SX1NZU0NBTEw6Ci0JCWlmIChuICE9IDApCi0JCSAgcmV0dXJuKC0xKTsKLQkgICAgICBj YXNlIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQOgotCSAgICAgIGNhc2UgU1NMX0VSUk9SX1NT TDoKLQkgICAgICBjYXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVSTjoKLQkgICAgICBkZWZhdWx0Ogot ICAgICAgICAgICAgICAgIHR0Y2xvcygwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTIpOwot ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotI2lm ZGVmIENLX0tFUkJFUk9TCi0jaWZkZWYgS1JCNAotI2lmZGVmIFJMT0dDT0RFCi0gICAgaWYgKHR0 bnByb3RvID09IE5QX0VLNExPR0lOKSB7Ci0gICAgICAgIGlmICgobGVuID0ga3JiNF9kZXNfcmVh ZCh0dHlmZCxteWJ1ZixzaXplb2YobXlidWYpKSkgPCAwKQotCSAgcmV0dXJuKC0xKTsKLSAgICAg ICAgZWxzZQotCSAgcmV0dXJuKGxlbik7Ci0gICAgfQotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0j ZW5kaWYgLyogS1JCNCAqLwotI2lmZGVmIEtSQjUKLSNpZmRlZiBSTE9HQ09ERQotICAgIGlmICh0 dG5wcm90byA9PSBOUF9FSzVMT0dJTikgewotICAgICAgICBpZiAoKGxlbiA9IGtyYjVfZGVzX3Jl YWQodHR5ZmQsbXlidWYsc2l6ZW9mKG15YnVmKSwwKSkgPCAwKQotCSAgcmV0dXJuKC0xKTsKLSAg ICAgICAgZWxzZQotCSAgcmV0dXJuKGxlbik7Ci0gICAgfQotI2VuZGlmIC8qIFJMT0dDT0RFICov Ci0jaWZkZWYgS1JCNV9VMlUKLSAgICBpZiAodHRucHJvdG8gPT0gTlBfSzVVMlUpIHsKLSAgICAg ICAgaWYgKChsZW4gPSBrcmI1X3UydV9yZWFkKHR0eWZkLG15YnVmLHNpemVvZihteWJ1ZikpKSA8 IDApCi0JICByZXR1cm4oLTEpOwotICAgICAgICBlbHNlCi0JICByZXR1cm4obGVuKTsKLSAgICB9 Ci0jZW5kaWYgLyogS1JCNV9VMlUgKi8KLSNlbmRpZiAvKiBLUkI1ICovCi0jZW5kaWYgLyogQ0tf S0VSQkVST1MgKi8KLQotI2lmZGVmIE5FVENNRAotICAgIGlmICh0dHBpcGUpCi0gICAgICBmZCA9 IGZkaW47Ci0gICAgZWxzZQotI2VuZGlmIC8qIE5FVENNRCAqLwotICAgICAgZmQgPSB0dHlmZDsK LSAgICB4ID0gcmVhZChmZCwgbXlidWYsIDEpOwotICAgIHJldHVybih4ID4gMCA/IHggOiAtMyk7 Ci19Ci0KLSNlbmRpZiAvKiAhRklPTlJFQUQgKi8KLSNlbmRpZiAvKiAhYWVnaXMgKi8KLSNlbmRp ZiAvKiAhQVRUU1YgKi8KLQotI2VuZGlmIC8qIE1ZUkVBRCAqLwotCi0vKiAgVCBUIF8gVCBOIE8g UCBUICAtLSAgSGFuZGxlIFRlbG5ldCBuZWdvdGlvbnMgaW4gaW5jb21pbmcgZGF0YSAqLwotLyoK LSAgQ2FsbCB3aXRoIHRoZSBJQUMgdGhhdCB3YXMgZW5jb3VudGVyZWQuCi0gIFJldHVybnM6Ci0g ICAtMzogSWYgY29ubmVjdGlvbiBoYXMgZHJvcHBlZCBvciBnb25lIGJhZC4KLSAgIC0yOiBPbiBU ZWxuZXQgcHJvdG9jb2wgZXJyb3IgcmVzdWx0aW5nIGluIGluY29uc2lzdGVudCBzdGF0ZXMuCi0g ICAgMDogSWYgbmVnb3RpYXRpb24gT0sgYW5kIGNhbGxlciBoYXMgbm90aGluZyB0byBkby4KLSAg ICAxOiBJZiBwYWNrZXQgc3RhcnQgY2hhcmFjdGVyIGhhcyBjaGFuZ2VkIChuZXcgdmFsdWUgaXMg aW4gZ2xvYmFsIHN0Y2hyKS4KLSAgMjU1OiBJZiB0aGVyZSB3YXMgYSBxdW90ZWQgSUFDIGFzIGRh dGEuCi0gICBvcjogTm90IGF0IGFsbCBpZiB3ZSBnb3QgYSBsZWdpdGltYXRlIFRlbG5ldCBMb2dv dXQgcmVxdWVzdC4KLSovCi0jaWZkZWYgVENQU09DS0VUCi1zdGF0aWMgaW50Ci10dF90bm9wdChu KSBpbnQgbjsgewkJCS8qIEhhbmRsZSBUZWxuZXQgb3B0aW9ucyAqLwotICAgIC8qIEluIGNhc2Ug Y2FsbGVyIGRpZCBub3QgYWxyZWFkeSBjaGVjayB0aGVzZSBjb25kaXRpb25zLi4uICAqLwotICAg IGlmIChuID09IElBQyAmJgotCSgoeGxvY2FsICYmIG5ldGNvbm4gJiYgSVNfVEVMTkVUKCkpIHx8 Ci0JICgheGxvY2FsICYmIHNzdGVsbmV0KSkpIHsKLQlleHRlcm4gaW50IHNlcnZlcjsKLQlpbnQg dHggPSAwOwotCWRlYnVnKEYxMDAsInR0aW5sIGNhbGxpbmcgdG5fZG9vcCgpIiwiIiwwKTsKLQl0 eCA9IHRuX2Rvb3AoKENIQVIpKG4gJiAweGZmKSxkdXBsZXgsdHRpbmMpOwotCWRlYnVnKEYxMTEs InR0aW5sIHRuX2Rvb3AoKSByZXR1cm5lZCIsInR4Iix0eCk7Ci0Jc3dpdGNoICh0eCkgewotCSAg Y2FzZSAwOgotCSAgICByZXR1cm4oMCk7Ci0JICBjYXNlIC0xOgkJCS8qIEkvTyBlcnJvciAqLwot CSAgICB0dGltb2ZmKCk7CQkJLyogVHVybiBvZmYgdGltZXIgKi8KLQkgICAgcmV0dXJuKC0zKTsK LSAgICAgICAgICBjYXNlIC0yOgkJCS8qIENvbm5lY3Rpb24gZmFpbGVkLiAqLwotICAgICAgICAg IGNhc2UgLTM6Ci0JICAgIHR0aW1vZmYoKTsJCQkvKiBUdXJuIG9mZiB0aW1lciAqLwotCSAgICB0 dGNsb3MoMCk7Ci0JICAgIHJldHVybigtMyk7Ci0JICBjYXNlIDE6CQkJLyogRUNITyBjaGFuZ2Ug Ki8KLQkgICAgZHVwbGV4ID0gMTsKLQkgICAgcmV0dXJuKDApOwotCSAgY2FzZSAyOgkJCS8qIEVD SE8gY2hhbmdlICovCi0JICAgIGR1cGxleCA9IDA7Ci0JICAgIHJldHVybigwKTsKLQkgIGNhc2Ug MzoJCQkvKiBRdW90ZWQgSUFDICovCi0JICAgIG4gPSAyNTU7Ci0JICAgIHJldHVybigodW5zaWdu ZWQpMjU1KTsKLSNpZmRlZiBJS1NfT1BUSU9OCi0JICBjYXNlIDQ6IHsKLQkgICAgICBpZiAoVEVM T1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0ICYmIHNlcnZlcgotI2lmZGVmIElL U0QKLQkJICAmJiAhaW5zZXJ2ZXIKLSNlbmRpZiAvKiBJS1NEICovCi0JCSAgKSB7CQkJLyogUmVt b3RlIGluIFNlcnZlciBtb2RlICovCi0JCSAgdHRpbW9mZigpOwkJLyogVHVybiBvZmYgdGltZXIg Ki8KLQkJICBkZWJ1ZyhGMTAwLCJ1X3N0YXJ0IGFuZCAhaW5zZXJ2ZXIiLCIiLDApOwotCQkgIHJl dHVybigtMik7CQkvKiBFbmQgc2VydmVyIG1vZGUgKi8KLQkgICAgICB9IGVsc2UgaWYgKCFURUxP UFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0ICYmCi0JCQkgc2VydmVyCi0JCQkg KSB7CQkvKiBJJ20gbm8gbG9uZ2VyIGluIFNlcnZlciBNb2RlICovCi0JCSAgZGVidWcoRjEwMCwi bWVfc3RhcnQgYW5kIHNlcnZlciIsIiIsMCk7Ci0JCSAgdHRpbW9mZigpOwotCQkgIHJldHVybigt Mik7Ci0JICAgICAgfQotCSAgICAgIHJldHVybigwKTsKLQkgIH0KLQkgIGNhc2UgNTogewkJCS8q IFN0YXJ0IGNoYXJhY3RlciBjaGFuZ2UgKi8KLQkgICAgICAvKiBleHRlcm4gQ0hBUiBzdGNocjsg Ki8KLQkgICAgICAvKiBzdGFydCA9IHN0Y2hyOyAqLwotCSAgICAgIHJldHVybigxKTsKLQkgIH0K LSNlbmRpZiAvKiBJS1NfT1BUSU9OICovCi0JICBjYXNlIDY6CQkJLyogUmVtb3RlIExvZ291dCAq LwotCSAgICB0dGltb2ZmKCk7Ci0JICAgIHR0Y2xvcygwKTsKLSNpZmRlZiBJS1NECi0JICAgIGlm IChpbnNlcnZlciAmJiAhbG9jYWwpCi0JICAgICAgZG9leGl0KEdPT0RfRVhJVCwwKTsKLQkgICAg ZWxzZQotI2VuZGlmIC8qIElLU0QgKi8KLQkgICAgICByZXR1cm4oLTIpOwotCSAgZGVmYXVsdDoK LQkgICAgcmV0dXJuKDApOwotCX0KLSAgICB9IGVsc2UKLSAgICAgIHJldHVybigwKTsKLX0KLSNl bmRpZiAvKiBUQ1BTT0NLRVQgKi8KLQotLyogIFQgVCBGIEwgVSBJICAtLSAgRmx1c2ggdHR5IGlu cHV0IGJ1ZmZlciAqLwotCi12b2lkCi10dGZsdXgoKSB7CQkJCS8qIEJ1dCBmaXJzdC4uLiAqLwot I2lmZGVmIE1ZUkVBRAotLyoKLSAgRmx1c2ggaW50ZXJuYWwgTVlSRUFEIGJ1ZmZlci4KLSovCi0j aWZkZWYgVENQU09DS0VUCi0gICAgaW50IGRvdG5vcHRzLCB4OwotICAgIGRvdG5vcHRzID0gKCgo eGxvY2FsICYmIG5ldGNvbm4gJiYgSVNfVEVMTkVUKCkpIHx8Ci0JCSAoIXhsb2NhbCAmJiBzc3Rl bG5ldCkpKTsKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ0dGZsdXgg bXlfY291bnQiLCIiLG15X2NvdW50KTsKLSNpZmRlZiBUQ1BTT0NLRVQKLSAgICBpZiAoZG90bm9w dHMpIHsKLQlDSEFSIGNoID0gJ1wwJzsKLSAgICAgICAgd2hpbGUgKG15X2NvdW50ID4gMCkgewot CSAgICBjaCA9IG15cmVhZCgpOwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgICAgIGlm IChURUxPUFRfVShURUxPUFRfRU5DUllQVElPTikpCi0JICAgICAgY2tfdG5fZGVjcnlwdCgoY2hh ciAqKSZjaCwxKTsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAgICAgICAgICBpZiAo Y2ggPT0gSUFDKQotCSAgICAgIHggPSB0dF90bm9wdChjaCk7Ci0gICAgICAgIH0KLSAgICB9IGVs c2UKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgQ0tfRU5D UllQVElPTgotICAgIGlmIChURUxPUFRfVShURUxPUFRfRU5DUllQVElPTikgJiYgbXlfY291bnQg PiAwKQotICAgICAgY2tfdG5fZGVjcnlwdCgmbXlidWZbbXlfaXRlbSsxXSxteV9jb3VudCk7Ci0j ZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICBteV9j b3VudCA9IDA7CQkJLyogUmVzZXQgY291bnQgdG8gemVybyAqLwotICAgIG15X2l0ZW0gPSAtMTsJ CQkvKiBBbmQgYnVmZmVyIGluZGV4IHRvIC0xICovCi0jZW5kaWYgLyogTVlSRUFEICovCi19Ci0K LWludAotdHRmbHVpKCkgewotICAgIGludCBuLCBmZDsKLSNpZmRlZiBUQ1BTT0NLRVQKLSAgICBp bnQgZG90bm9wdHM7Ci0gICAgZG90bm9wdHMgPSAoKCh4bG9jYWwgJiYgbmV0Y29ubiAmJiBJU19U RUxORVQoKSkgfHwKLQkJICgheGxvY2FsICYmIHNzdGVsbmV0KSkpOwotI2VuZGlmIC8qIFRDUFNP Q0tFVCAqLwotCi0jaWZkZWYgTkVUQ01ECi0gICAgaWYgKHR0cGlwZSkKLSAgICAgIGZkID0gZmRp bjsKLSAgICBlbHNlCi0jZW5kaWYgLyogTkVUQ01EICovCi0gICAgICBmZCA9IHR0eWZkOwotCi0j aWZkZWYgVFRMRUJVRgotICAgIHR0cHVzaCA9IC0xOwkJCS8qIENsZWFyIHRoZSBwZWVrLWFoZWFk IGNoYXIgKi8KLSAgICB3aGlsZSAobGVfZGF0YSAmJiAobGVfaW5idWYoKSA+IDApKSB7Ci0gICAg ICAgIENIQVIgY2ggPSAnXDAnOwotICAgICAgICBpZiAobGVfZ2V0Y2hhcigmY2gpID4gMCkgewkv KiBDbGVhciBhbnkgbW9yZS4uLiAqLwotICAgICAgICAgICAgZGVidWcoRjEwMSwidHRmbHVpIGxl X2luYnVmIGNoIiwiIixjaCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogVFRMRUJVRiAq LwotICAgIGRlYnVnKEYxMDEsInR0Zmx1aSB0dHBpcGUiLCIiLHR0cGlwZSk7Ci0KLSNpZmRlZiBN WVJFQUQKLS8qCi0gIEZsdXNoIGludGVybmFsIE1ZUkVBRCBidWZmZXIgKk5FWFQqLCBpbiBhbGwg Y2FzZXMuCi0qLwotICAgIHR0Zmx1eCgpOwotI2VuZGlmIC8qIE1ZUkVBRCAqLwotCi0jaWZkZWYg TkVUQ09OTgotLyogTmV0d29yayBmbHVzaCBpcyBkb25lIHNwZWNpYWxseSwgaW4gdGhlIG5ldHdv cmsgc3VwcG9ydCBtb2R1bGUuICovCi0gICAgaWYgKChuZXRjb25uIHx8IHNzdGVsbmV0KSAmJiAh dHRwaXBlICYmICF0dHB0eSkgewotCWRlYnVnKEYxMDAsInR0Zmx1aSBuZXRmbHVpIiwiIiwwKTsK LSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgVE5fQ09NUE9SVAotCWlmIChpc3RuY29tcG9ydCgpKQot ICAgICAgICAgICAgdG5jX3NlbmRfcHVyZ2VfZGF0YShUTkNfUFVSR0VfUkVDRUlWRSk7Ci0jZW5k aWYgLyogVE5fQ09NUE9SVCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQlyZXR1cm4obmV0Zmx1 aSgpKTsKLSAgICB9Ci0jZW5kaWYgLyogTkVUQ09OTiAqLwotCi0gICAgZGVidWcoRjEwMSwidHRm bHVpIHR0eWZkIiwiIix0dHlmZCk7IC8qIE5vdCBuZXR3b3JrICovCi0gICAgaWYgKHR0eWZkIDwg MCkKLSAgICAgIHJldHVybigtMSk7Ci0KLSNpZmRlZiBhZWdpcwotICAgIHNpb18kY29udHJvbCgo c2hvcnQpeWZkLCBzaW9fJGZsdXNoX2luLCB0cnVlLCBzdCk7Ci0gICAgaWYgKHN0LmFsbCAhPSBz dGF0dXNfJG9rKSB7Ci0JZnByaW50ZihzdGRlcnIsICJmbHVzaCBmYWlsZWQ6ICIpOyBlcnJvcl8k cHJpbnQoc3QpOwotICAgIH0gZWxzZSB7ICAgICAgLyogc29tZXRpbWVzIHRoZSBmbHVzaCBkb2Vz bid0IHdvcmsgKi8KLSAgICAgICAgZm9yICg7OykgewotCSAgICBjaGFyIGJ1ZlsyNTZdOwotICAg ICAgICAgICAgLyogZWF0IGFsbCB0aGUgY2hhcmFjdGVycyB0aGF0IHNob3VsZG4ndCBiZSBhdmFp bGFibGUgKi8KLSAgICAgICAgICAgIGlvc18kZ2V0KChzaG9ydClmZCwgaW9zXyRjb25kX29wdCwg YnVmLCAyNTZMLCBzdCk7IC8qICh2b2lkKSAqLwotICAgICAgICAgICAgaWYgKHN0LmFsbCA9PSBp b3NfJGdldF9jb25kaXRpb25hbF9mYWlsZWQpIGJyZWFrOwotICAgICAgICAgICAgZnByaW50Zihz dGRlcnIsICJmbHVzaCBmYWlsZWQoMik6ICIpOyBlcnJvcl8kcHJpbnQoc3QpOwotICAgICAgICB9 Ci0gICAgfQotI2Vsc2UKLSNpZmRlZiBCU0Q0NAkJCQkvKiA0LjQgQlNEICovCi0gICAgbiA9IEZS RUFEOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3BlY2lmeSByZWFkIHF1ZXVlICovCi0g ICAgZGVidWcoRjEwMCwidHRmbHVpIEJTRDQ0IiwiIiwwKTsKLSAgICBpb2N0bChmZCxUSU9DRkxV U0gsJm4pOwotI2Vsc2UKLSNpZmRlZiBQbGFuOQotI3VuZGVmIFBPU0lYCQkJCS8qIFVoIG9oLi4u ICovCi0jZW5kaWYgLyogUGxhbjkgKi8KLSNpZmRlZiBQT1NJWAkJCQkvKiBQT1NJWCAqLwotICAg IGRlYnVnKEYxMDAsInR0Zmx1aSBQT1NJWCIsIiIsMCk7Ci0gICAgdGNmbHVzaChmZCxUQ0lGTFVT SCk7Ci0jZWxzZQotI2lmZGVmIEFUVFNWCQkJCS8qIFN5c3RlbSBWICovCi0jaWZuZGVmIFZYVkUK LSAgICBkZWJ1ZyhGMTAwLCJ0dGZsdWkgQVRUU1YiLCIiLDApOwotICAgIGlvY3RsKGZkLFRDRkxT SCwwKTsKLSNlbmRpZiAvKiBWWFZFICovCi0jZWxzZQkJCQkJLyogTm90IEJTRDQ0LCBQT1NJWCwg b3IgU3lzIFYgKi8KLSNpZmRlZiBUSU9DRkxVU0gJCQkvKiBUaG9zZSB3aXRoIFRJT0NGTFVTSCBk ZWZpbmVkICovCi0jaWZkZWYgQU5ZQlNECQkJCS8qIEJlcmtlbGV5ICovCi0gICAgbiA9IEZSRUFE OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3BlY2lmeSByZWFkIHF1ZXVlICovCi0gICAg ZGVidWcoRjEwMCwidHRmbHVpIFRJT0NGTFVTSCBBTllCU0QiLCIiLDApOwotICAgIGlvY3RsKGZk LFRJT0NGTFVTSCwmbik7Ci0jZWxzZQkJCQkJLyogT3RoZXJzIChWNywgZXRjKSAqLwotICAgIGRl YnVnKEYxMDAsInR0Zmx1aSBUSU9DRkxVU0giLCIiLDApOwotICAgIGlvY3RsKGZkLFRJT0NGTFVT SCwwKTsKLSNlbmRpZiAvKiBBTllCU0QgKi8KLSNlbHNlCQkJCQkvKiBBbGwgb3RoZXJzLi4uICov Ci0vKgotICBObyBzeXN0ZW0gY2FsbCAodGhhdCB3ZSBrbm93IGFib3V0KSBmb3IgaW5wdXQgYnVm ZmVyIGZsdXNoaW5nLgotICBTbyBzZWUgaG93IG1hbnkgdGhlcmUgYXJlIGFuZCByZWFkIHRoZW0g aW4gYSBsb29wLCB1c2luZyB0dGluYygpLgotICB0dGluYygpIGlzIGJ1ZmZlcmVkLCBzbyB3ZSdy ZSBub3QgZ2V0dGluZyBjaGFyZ2VkIHdpdGggYSBzeXN0ZW0gY2FsbAotICBwZXIgY2hhcmFjdGVy LCBqdXN0IGEgZnVuY3Rpb24gY2FsbC4KLSovCi0gICAgaWYgKChuID0gdHRjaGsoKSkgPiAwKSB7 Ci0JZGVidWcoRjEwMSwidHRmbHVpIHJlYWQgbG9vcCIsIiIsbik7Ci0Jd2hpbGUgKChuLS0pICYm IHR0aW5jKDApID4gMCkgOwotICAgIH0KLSNlbmRpZiAvKiBUSU9DRkxVU0ggKi8KLSNlbmRpZiAv KiBBVFRTViAqLwotI2VuZGlmIC8qIFBPU0lYICovCi0jaWZkZWYgUGxhbjkKLSNkZWZpbmUgUE9T SVgKLSNlbmRpZiAvKiBQbGFuOSAqLwotI2VuZGlmIC8qIEJTRDQ0ICovCi0jZW5kaWYgLyogYWVn aXMgKi8KLSAgICByZXR1cm4oMCk7Ci19Ci0KLWludAotdHRmbHVvKCkgewkJCQkvKiBGbHVzaCBv dXRwdXQgYnVmZmVyICovCi0gICAgaW50IGZkOwotI2lmZGVmIE5FVENNRAotICAgIGlmICh0dHBp cGUpCi0gICAgICBmZCA9IGZkb3V0OwotICAgIGVsc2UKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSAg ICAgIGZkID0gdHR5ZmQ7Ci0KLSNpZmRlZiBQbGFuOQotICAgIHJldHVybiAwOwotI2Vsc2UKLSNp ZmRlZiBQT1NJWAotICAgIHJldHVybih0Y2ZsdXNoKGZkLFRDT0ZMVVNIKSk7Ci0jZWxzZQotI2lm ZGVmIE9YT1MKLSAgICByZXR1cm4oaW9jdGwoZmQsVENGTFNILDEpKTsKLSNlbHNlCi0gICAgcmV0 dXJuKDApOwkJCQkvKiBBbGwgb3RoZXJzLCBub3RoaW5nICovCi0jZW5kaWYgLyogT1hPUyAqLwot I2VuZGlmIC8qIFBPU0lYICovCi0jZW5kaWYgLyogUGxhbjkgKi8KLX0KLQotLyogSW50ZXJydXB0 IEZ1bmN0aW9ucyAqLwotCi0vKiBTZXQgdXAgdGVybWluYWwgaW50ZXJydXB0cyBvbiBjb25zb2xl IHRlcm1pbmFsICovCi0KLSNpZm5kZWYgRklPTlJFQUQJCQkvKiBXZSBkb24ndCBuZWVkIGVzY3Ry cCgpICovCi0jaWZuZGVmIFNFTEVDVAkJCQkvKiBpZiB3ZSBoYXZlIGFueSBvZiB0aGVzZS4uLiAq LwotI2lmbmRlZiBDS19QT0xMCi0jaWZuZGVmIFJEQ0hLCi0KLSNpZm5kZWYgT1hPUwotI2lmZGVm IFNWT1JQT1NJWAotU0lHVFlQCi1lc2N0cnAoZm9vKSBpbnQgZm9vOyB7CQkJLyogdHJhcCBjb25z b2xlIGVzY2FwZXMgKF5cKSAqLwotICAgIHNpZ25hbChTSUdRVUlULFNJR19JR04pOyAgICAgICAg ICAgIC8qIGlnbm9yZSB1bnRpbCB0cmFwcGVkICovCi0gICAgY29uZXNjID0gMTsKLSAgICBkZWJ1 ZyhGMTAxLCJlc2N0cnAgY2F1Z2h0IFNJR1FVSVQiLCIiLGNvbmVzYyk7Ci19Ci0jZW5kaWYgLyog U1ZPUlBPU0lYICovCi0jZW5kaWYgLyogT1hPUyAqLwotCi0jaWZkZWYgVjcKLSNpZm5kZWYgTUlO SVgyCi1TSUdUWVAKLWVzY3RycChmb28pIGludCBmb287IHsJCQkvKiB0cmFwIGNvbnNvbGUgZXNj YXBlcyAoXlwpICovCi0gICAgc2lnbmFsKFNJR1FVSVQsU0lHX0lHTik7ICAgICAgICAgICAgLyog aWdub3JlIHVudGlsIHRyYXBwZWQgKi8KLSAgICBjb25lc2MgPSAxOwotICAgIGRlYnVnKEYxMDEs ImVzY3RycCBjYXVnaHQgU0lHUVVJVCIsIiIsY29uZXNjKTsKLX0KLSNlbmRpZiAvKiBNSU5JWDIg Ki8KLSNlbmRpZiAvKiBWNyAqLwotCi0jaWZkZWYgQzcwCi1TSUdUWVAKLWVzY3RycChmb28pIGlu dCBmb287IHsJCQkvKiB0cmFwIGNvbnNvbGUgZXNjYXBlcyAoXlwpICovCi0gICAgY29uZXNjID0g MTsKLSAgICBzaWduYWwoU0lHUVVJVCxTSUdfSUdOKTsgICAgICAgICAgICAvKiBpZ25vcmUgdW50 aWwgdHJhcHBlZCAqLwotfQotI2VuZGlmIC8qIEM3MCAqLwotCi0jZW5kaWYgLyogUkRDSEsgKi8K LSNlbmRpZiAvKiBDS19QT0xMICovCi0jZW5kaWYgLyogU0VMRUNUICovCi0jZW5kaWYgLyogRklP TlJFQUQgKi8KLQotLyogIEMgTyBOIEIgRyBUICAtLSAgQmFja2dyb3VuZCBUZXN0ICAqLwotCi1z dGF0aWMgaW50IGpjID0gMDsJCQkvKiAwID0gbm8gam9iIGNvbnRyb2wgKi8KLQotLyoKLSAgQ2Fs bCB3aXRoIGZsYWcgPT0gMSB0byBwcmV2ZW50IHNpZ25hbCB0ZXN0LCB3aGljaCBjYW4gbm90IGJl IGV4cGVjdGVkCi0gIHRvIHdvcmsgZHVyaW5nIGZpbGUgdHJhbnNmZXIsIHdoZW4gU0lHSU5UIHBy b2JhYmx5ICppcyogc2V0IHRvIFNJR19JR04uCi0KLSAgQ2FsbCB3aXRoIGZsYWcgPT0gMCB0byB1 c2UgdGhlIHNpZ25hbCB0ZXN0LCBidXQgb25seSBpZiB0aGUgcHJvY2Vzcy1ncm91cAotICB0ZXN0 IGZhaWxzLCBhcyBpdCBkb2VzIG9uIHNvbWUgVU5JWCBzeXN0ZW1zLCB3aGVyZSBnZXRwZ3JwKCkg aXMgYnVnZ3ksCi0gIHJlcXVpcmVzIGFuIGFyZ3VtZW50IHdoZW4gdGhlIG1hbiBwYWdlIHNheXMg aXQgZG9lc24ndCwgb3IgdmljZSB2ZXJzYS4KLQotICBJZiBmbGFnID09IDAgYW5kIHRoZSBwcm9j ZXNzLWdyb3VwIHRlc3QgZmFpbHMsIHRoZW4gd2UgZGV0ZXJtaW5lIGJhY2tncm91bmQKLSAgc3Rh dHVzIHNpbXBseSAoYnV0IG5vdCBuZWNlc3NhcmlseSByZWxpYWJseSkgZnJvbSBpc2F0dHkoKS4K LQotICBjb25iZ3QoKSBzZXRzIHRoZSBnbG9iYWwgYmFja2dyZCA9IDEgaWYgd2UgYXBwZWFyIHRv IGJlIGluIHRoZSBiYWNrZ3JvdW5kLAotICBhbmQgdG8gMCBpZiB3ZSBzZWVtIHRvIGJlIGluIHRo ZSBmb3JlZ3JvdW5kLiAgY29uYmd0KCkgaXMgaGlnaGx5IHByb25lIHRvCi0gIG1pc2JlaGF2aW9y LgotKi8KLVZPSUQKLWNvbmJndChmbGFnKSBpbnQgZmxhZzsgewotICAgIGludCB4ID0gLTEsCQkJ CS8qIHByb2Nlc3MgZ3JvdXAgb3IgU0lHSU5UIHRlc3QgKi8KLSAgICAgICAgeSA9IDA7CQkJCS8q IGlzYXR0eSgpIHRlc3QgKi8KLS8qCi0gIENoZWNrIGZvciBiYWNrZ3JvdW5kIG9wZXJhdGlvbiwg ZXZlbiBpZiBub3QgcnVubmluZyBvbiByZWFsIHR0eSwgc28gdGhhdAotICBiYWNrZ3JvdW5kIGZs YWcgY2FuIGJlIHNldCBjb3JyZWN0bHkuICBJZiBiYWNrZ3JvdW5kIHN0YXR1cyBpcyBkZXRlY3Rl ZCwKLSAgdGhlbiBLZXJtaXQgd2lsbCBub3QgaXNzdWUgaXRzIGludGVyYWN0aXZlIHByb21wdCBv ciBtb3N0IG1lc3NhZ2VzLgotICBJZiB5b3VyIHByb21wdCBnb2VzIGF3YXksIHlvdSBjYW4gYmxh bWUgKGFuZCBmaXg/KSB0aGlzIGZ1bmN0aW9uLgotKi8KLQotLyogVXNlIHByb2Nlc3MtZ3JvdXAg dGVzdCBpZiBwb3NzaWJsZS4gKi8KLQotI2lmZGVmIFBPU0lYCQkJCS8qIFdlIGNhbiBkbyBpdCBp biBQT1NJWCAqLwotI2RlZmluZSBQR1JPVVBfVAotI2Vsc2UKLSNpZmRlZiBCU0Q0CQkJCS8qIGFu ZCBpbiBCU0QgNC54LiAqLwotI2RlZmluZSBQR1JPVVBfVAotI2Vsc2UKLSNpZmRlZiBIUFVYSk9C Q1RMCQkJLyogYW5kIGluIG1vc3QgSFAtVVgncyAqLwotI2RlZmluZSBQR1JPVVBfVAotI2Vsc2UK LSNpZmRlZiBUSU9DR1BHUlAJCQkvKiBhbmQgYW55cGxhY2UgdGhhdCBoYXMgdGhpcyBpb2N0bC4g Ki8KLSNkZWZpbmUgUEdST1VQX1QKLSNlbmRpZiAvKiBUSU9DR1BHUlAgKi8KLSNlbmRpZiAvKiBI UFVYSk9CQ1RMICovCi0jZW5kaWYgLyogQlNENCAqLwotI2VuZGlmIC8qIFBPU0lYICovCi0KLSNp ZmRlZiBNSVBTCQkJCS8qIEV4Y2VwdCBpZiBpdCBkb2Vzbid0IHdvcmsuLi4gKi8KLSN1bmRlZiBQ R1JPVVBfVAotI2VuZGlmIC8qIE1JUFMgKi8KLQotI2lmZGVmIE1JTklYCi0jdW5kZWYgUEdST1VQ X1QKLSNlbmRpZgkvKiBNSU5JWCAqLwotCi0jaWZkZWYgUEdST1VQX1QKLS8qCi0gIFNlbWktcmVs aWFibGUgcHJvY2Vzcy1ncm91cCB0ZXN0LiAgQ2hlY2sgd2hldGhlciB0aGlzIHByb2Nlc3MncyBn cm91cCBpcwotICB0aGUgc2FtZSBhcyB0aGUgY29udHJvbGxpbmcgdGVybWluYWwncyBwcm9jZXNz IGdyb3VwLiAgVGhpcyB3b3JrcyBpZiB0aGUKLSAgZ2V0cGdycCgpIGNhbGwgZG9lc24ndCBsaWUg KGFzIGl0IGRvZXMgaW4gdGhlIFNVTk9TIFN5c3RlbSBWIGVudmlyb25tZW50KS4KLSovCi0gICAg UElEX1QgbXlwZ3JwID0gKFBJRF9UKTA7CQkvKiBLZXJtaXQncyBwcm9jZXNzIGdyb3VwICovCi0g ICAgUElEX1QgY3RwZ3JwID0gKFBJRF9UKTA7CQkvKiBUaGUgdGVybWluYWwncyBwcm9jZXNzIGdy b3VwICovCi0jaWZuZGVmIF9QT1NJWF9TT1VSQ0UKLS8qCi0gIFRoZSBnZXRwZ3JwKCkgcHJvdG90 eXBlIGlzIG9idGFpbmVkIGZyb20gc3lzdGVtIGhlYWRlciBmaWxlcyBmb3IgUE9TSVgKLSAgYW5k IFN5cyBWIFI0IGNvbXBpbGF0aW9ucy4gIE90aGVyIHN5c3RlbXMsIHdobyBrbm93cy4gIFNvbWUg Y29tcGxhaW4gYWJvdXQKLSAgYSBkdXBsaWNhdGUgZGVjbGFyYXRpb24gaGVyZSwgb3RoZXJzIGRv bid0LCBzbyBpdCdzIHNhZmVyIHRvIGxlYXZlIGl0IGluCi0gIGlmIHdlIGRvbid0IGtub3cgZm9y IGNlcnRhaW4uCi0qLwotI2lmbmRlZiBTVlI0Ci0jaWZuZGVmIFBTMkFJWDEwCi0jaWZuZGVmIEhQ VVg5Ci0gICAgZXh0ZXJuIFBJRF9UIGdldHBncnAoKTsKLSNlbmRpZiAvKiBIUFVYOSAqLwotI2Vu ZGlmIC8qIFBTMkFJWDEwICovCi0jZW5kaWYgLyogU1ZSNCAqLwotI2VuZGlmIC8qIF9QT1NJWF9T T1VSQ0UgKi8KLQotLyogR2V0IG15IHByb2Nlc3MgZ3JvdXAuICovCi0KLSNpZmRlZiBTVlIzIC8q IE1heWJlIHRoaXMgc2hvdWxkIGJlIEFUVFNWPyAqLwotLyogVGhpcyBmdW5jdGlvbiBpcyBub3Qg ZGVzY3JpYmVkIGluIFNWSUQgUjIgKi8KLSAgICBteXBncnAgPSBnZXRwZ3JwKCk7Ci0gICAgLyog ZGVidWcoRjEwMSwiQVRUU1YgY29uYmd0IHByb2Nlc3MgZ3JvdXAiLCIiLChpbnQpIG15cGdycCk7 ICovCi0jZWxzZQotI2lmZGVmIFBPU0lYCi0gICAgbXlwZ3JwID0gZ2V0cGdycCgpOwotICAgIC8q IGRlYnVnKEYxMDEsIlBPU0lYIGNvbmJndCBwcm9jZXNzIGdyb3VwIiwiIiwoaW50KSBteXBncnAp OyAqLwotI2Vsc2UKLSNpZmRlZiBPU0ZQQwotICAgIG15cGdycCA9IGdldHBncnAoKTsKLSAgICAv KiBkZWJ1ZyhGMTAxLCJPU0YgY29uYmd0IHByb2Nlc3MgZ3JvdXAiLCIiLChpbnQpIG15cGdycCk7 ICovCi0jZWxzZQotI2lmZGVmIFFOWAotICAgIG15cGdycCA9IGdldHBncnAoKTsKLSAgICAvKiBk ZWJ1ZyhGMTAxLCJRTlggY29uYmd0IHByb2Nlc3MgZ3JvdXAiLCIiLChpbnQpIG15cGdycCk7ICov Ci0jZWxzZQotI2lmZGVmIE9TRjMyCQkJCS8qICh3YXMgT1NGNDApICovCi0gICAgbXlwZ3JwID0g Z2V0cGdycCgpOwotICAgIC8qIGRlYnVnKEYxMDEsIkRpZ2l0YWwgVU5JWCBjb25iZ3QgcHJvY2Vz cyBncm91cCIsIiIsKGludCkgbXlwZ3JwKTsgKi8KLSNlbHNlIC8qIEJTRCwgVjcsIGV0YyAqLwot I2lmZGVmIE1JTklYMgotICAgIG15cGdycCA9IGdldHBncnAoKTsKLSNlbHNlCi0gICAgbXlwZ3Jw ID0gZ2V0cGdycCgwKTsKLSNlbmRpZiAvKiBNSU5JWDIgKi8KLSAgICAvKiBkZWJ1ZyhGMTAxLCJC U0QgY29uYmd0IHByb2Nlc3MgZ3JvdXAiLCIiLChpbnQpIG15cGdycCk7ICovCi0jZW5kaWYgLyog T1NGMzIgKi8KLSNlbmRpZiAvKiBRTlggKi8KLSNlbmRpZiAvKiBPU0ZQQyAqLwotI2VuZGlmIC8q IFBPU0lYICovCi0jZW5kaWYgLyogU1ZSMyAqLwotCi0jaWZkZWYgTUlOSVgKLSAgICAvKiBNSU5J WCBkb2VzIG5vdCBzdXBwb3J0IGpvYiBjb250cm9sIHNvIEtlcm1pdCBpcyBhbHdheXMgaW4gZm9y ZWdyb3VuZCAqLwotICAgIHggPSAwOwotCi0jZWxzZSAgLyogTm90IE1JTklYICovCi0KLS8qIE5v dyBnZXQgY29udHJvbGxpbmcgdHR5J3MgcHJvY2VzcyBncm91cCAqLwotI2lmZGVmIEJTRDQ0T1JQ T1NJWAotICAgIGN0cGdycCA9IHRjZ2V0cGdycCgxKTsJCS8qIFRoZSBQT1NJWCB3YXkgKi8KLSAg ICAvKiBkZWJ1ZyhGMTAxLCJQT1NJWCBjb25iZ3QgdGVybWluYWwgcHJvY2VzcyBncm91cCIsIiIs KGludCkgY3RwZ3JwKTsgKi8KLSNlbHNlCi0gICAgaW9jdGwoMSwgVElPQ0dQR1JQLCAmY3RwZ3Jw KTsJLyogT3IgdGhlIEJTRCB3YXkgKi8KLSAgIC8qIGRlYnVnKEYxMDEsIm5vbi1QT1NJWCBjb25i Z3QgdGVybWluYWwgcHJvY2VzcyBncm91cCIsIiIsKGludCkgY3RwZ3JwKTsgKi8KLSNlbmRpZiAv KiBCU0Q0NE9SUE9TSVggKi8KLQotICAgIGlmICgobXlwZ3JwID4gKFBJRF9UKSAwKSAmJiAoY3Rw Z3JwID4gKFBJRF9UKSAwKSkKLSAgICAgIHggPSAobXlwZ3JwID09IGN0cGdycCkgPyAwIDogMTsJ LyogSWYgdGhleSBkaWZmZXIsIHRoZW4gYmFja2dyb3VuZC4gKi8KLSAgICBlbHNlIHggPSAtMTsJ CQkvKiBJZiBlcnJvciwgcmVtZW1iZXIuICovCi0gICAgZGVidWcoRjEwMSwiY29uYmd0IHByb2Nl c3MgZ3JvdXAgdGVzdCIsIiIseCk7Ci0jZW5kaWYgLyogUEdST1VQX1QgKi8KLSNlbmRpZgkvKiBN SU5JWCAqLwotCi0vKiBUcnkgdG8gc2VlIGlmIGpvYiBjb250cm9sIGlzIGF2YWlsYWJsZSAqLwot Ci0jaWZkZWYgTk9KQwkJCQkvKiBVc2VyIG92ZXJyaWRlICovCi0gICAgamMgPSAwOwkJCQkvKiBO byBqb2IgY29udHJvbCBhbGxvd2VkICovCi0gICAgZGVidWcoRjExMSwiTk9KQyIsImpjIixqYyk7 Ci0jZWxzZQotI2lmZGVmIEJTRDQ0Ci0gICAgamMgPSAxOwotI2Vsc2UKLSNpZmRlZiBTVlI0T1JQ T1NJWAkJCS8qIFBPU0lYIGFjdHVhbGx5IHRlbGxzIHVzICovCi0gICAgZGVidWcoRjEwMCwiU1ZS NE9SUE9TSVggamMgdGVzdC4uLiIsIiIsMCk7Ci0jaWZkZWYgX1NDX0pPQl9DT05UUk9MCi0jaWZk ZWYgX19ic2RpX18KLSAgICBqYyA9IDE7Ci0jZWxzZQotI2lmZGVmIF9fMzg2QlNEX18KLSAgICBq YyA9IDE7Ci0jZWxzZQotICAgIGpjID0gc3lzY29uZihfU0NfSk9CX0NPTlRST0wpOwkvKiBXaGF0 ZXZlciBzeXN0ZW0gc2F5cyAqLwotICAgIGlmIChqYyA8IDApIHsKLQlkZWJ1ZyhGMTAxLCJzeXNj b25mIGZhaWxzLCBqY3NoZWxsIiwiIixqY3NoZWxsKTsKLQlqYyA9IChqY2hkbHIgPT0gU0lHX0RG TCkgPyAxIDogMDsKLSAgICB9IGVsc2UKLSAgICAgIGRlYnVnKEYxMTEsInN5c2NvbmYoX1NDX0pP Ql9DT05UUk9MKSIsImpjIixqYyk7Ci0jZW5kaWYgLyogX18zODZCU0RfXyAqLwotI2VuZGlmIC8q IF9fYnNkaV9fICovCi0jZWxzZQotI2lmZGVmIF9QT1NJWF9KT0JfQ09OVFJPTAotICAgIGpjID0g MTsJCQkJLyogQnkgZGVmaW5pdGlvbiAqLwotICAgIGRlYnVnKEYxMTEsIl9QT1NJWF9KT0JfQ09O VFJPTCBpcyBkZWZpbmVkIiwiamMiLGpjKTsKLSNlbHNlCi0gICAgamMgPSAwOwkJCQkvKiBBc3N1 bWUgam9iIGNvbnRyb2wgbm90IGFsbG93ZWQgKi8KLSAgICBkZWJ1ZyhGMTExLCJTVlI0T1JQT1NJ WCBfU0MvUE9TSVhfSk9CX0NPTlRST0wgbm90IGRlZmluZWQiLCJqYyIsamMpOwotI2VuZGlmIC8q IF9QT1NJWF9KT0JfQ09OVFJPTCAqLwotI2VuZGlmIC8qIF9TQ19KT0JfQ09OVFJPTCAqLwotI2Vs c2UKLSNpZmRlZiBCU0Q0Ci0gICAgamMgPSAxOwkJCQkvKiBKb2IgY29udHJvbCBhbGxvd2VkICov Ci0gICAgZGVidWcoRjExMSwiQlNEIGpvYiBjb250cm9sIiwiamMiLGpjKTsKLSNlbHNlCi0jaWZk ZWYgU1ZSM0pDCi0gICAgamMgPSAxOwkJCQkvKiBKQyBhbGxvd2VkICovCi0gICAgZGVidWcoRjEx MSwiU1ZSMyBqb2IgY29udHJvbCIsImpjIixqYyk7Ci0jZWxzZQotI2lmZGVmIE9YT1MKLSAgICBq YyA9IDE7CQkJCS8qIEpDIGFsbG93ZWQgKi8KLSAgICBkZWJ1ZyhGMTExLCJYL09TIGpvYiBjb250 cm9sIiwiamMiLGpjKTsKLSNlbHNlCi0jaWZkZWYgSFBVWDkKLSAgICBqYyA9IDE7CQkJCS8qIEpD IGFsbG93ZWQgKi8KLSAgICBkZWJ1ZyhGMTExLCJIUC1VWCA5LjAgam9iIGNvbnRyb2wiLCJqYyIs amMpOwotI2Vsc2UKLSNpZmRlZiBIUFVYMTAKLSAgICBqYyA9IDE7CQkJCS8qIEpDIGFsbG93ZWQg Ki8KLSAgICBkZWJ1ZyhGMTExLCJIUC1VWCAxMC4wIGpvYiBjb250cm9sIiwiamMiLGpjKTsKLSNl bHNlCi0gICAgamMgPSAwOwkJCQkvKiBKQyBub3QgYWxsb3dlZCAqLwotICAgIGRlYnVnKEYxMTEs ImpvYiBjb250cm9sIGNhdGNoLWFsbCIsImpjIixqYyk7Ci0jZW5kaWYgLyogSFBVWDEwICovCi0j ZW5kaWYgLyogSFBVWDkgKi8KLSNlbmRpZiAvKiBPWE9TICovCi0jZW5kaWYgLyogU1ZSM0pDICov Ci0jZW5kaWYgLyogQlNENCAqLwotI2VuZGlmIC8qIFNWUjRPUlBPU0lYICovCi0jZW5kaWYgLyog QlNENDQgKi8KLSNlbmRpZiAvKiBOT0pDICovCi0gICAgZGVidWcoRjEwMSwiY29uYmd0IGpjIiwi IixqYyk7Ci0jaWZuZGVmIE5PSkMKLSAgICBkZWJ1ZyhGMTAxLCJjb25iZ3QgamNzaGVsbCIsIiIs amNzaGVsbCk7Ci0vKgotICBBdCB0aGlzIHBvaW50LCBpZiBqYyA9PSAxIGJ1dCBqY3NoZWxsID09 IDAsIGl0IG1lYW5zIHRoYXQgdGhlIE9TIHN1cHBvcnRzCi0gIGpvYiBjb250cm9sLCBidXQgdGhl IHNoZWxsIG9yIG90aGVyIHByb2Nlc3Mgd2UgYXJlIHJ1bm5pbmcgdW5kZXIgZG9lcyBub3QKLSAg KGpjc2hlbGwgaXMgc2V0IGluIHN5c2luaXQoKSkgYW5kIHNvIGlmIHdlIHN1c3BlbmQgb3Vyc2Vs dmVzLCBub3RoaW5nIGdvb2QKLSAgd2lsbCBjb21lIG9mIGl0LiAgU28uLi4KLSovCi0gICAgaWYg KGpjIDwgMCkgamMgPSAwOwotICAgIGlmIChqYyA+IDAgJiYgamNzaGVsbCA9PSAwKSBqYyA9IDA7 Ci0jZW5kaWYgLyogTk9KQyAqLwotCi0vKgotICBBbm90aGVyIGJhY2tncm91bmQgdGVzdC4KLSAg VGVzdCBpZiBTSUdJTlQgKHRlcm1pbmFsIGludGVycnVwdCkgaXMgc2V0IHRvIFNJR19JR04gKGln bm9yZSksCi0gIHdoaWNoIGlzIGRvbmUgYnkgdGhlIHNoZWxsIChzaCkgaWYgdGhlIHByb2dyYW0g aXMgc3RhcnRlZCB3aXRoICcmJy4KLSAgVW5mb3J0dW5hdGVseSwgdGhpcyBpcyBOT1QgZG9uZSBi eSBjc2ggb3Iga3NoIHNvIHdhdGNoIG91dCEKLSAgTm90ZSwgaXQncyBzYWZlIHRvIHNldCBTSUdJ TlQgdG8gU0lHX0lHTiBoZXJlLCBiZWNhdXNlIGZ1cnRoZXIgZG93bgotICB3ZSBhbHdheXMgc2V0 IGl0IHRvIHNvbWV0aGluZyBlbHNlLgotICBOb3RlOiBhcyBvZiAxNiBKdWwgMTk5OSwgd2UgYWxz byBza2lwIHRoaXMgdGVzdCBpZiB3ZSBzZXQgU0lHSU5UIHRvCi0gIFNJR19JR04gb3Vyc2VsdmVz LgotKi8KLSAgICBpZiAoeCA8IDAgJiYgIWZsYWcgJiYgIXNpZ2ludF9pZ24pIHsgLyogRGlkbid0 IGdldCBnb29kIHJlc3VsdHMgYWJvdmUuLi4gKi8KLQotCVNJR1RZUCAoKm9zaWdpbnQpKCk7Ci0K LQlvc2lnaW50ID0gc2lnbmFsKFNJR0lOVCxTSUdfSUdOKTsJLyogV2hhdCBpcyBTSUdJTlQgc2V0 IHRvPyAqLwotCXNpZ2ludF9pZ24gPSAxOwotCXggPSAob3NpZ2ludCA9PSBTSUdfSUdOKSA/IDEg OiAwOwkvKiBTSUdfSUdOPyAqLwotCS8qIGRlYnVnKEYxMDEsImNvbmJndCBvc2lnaW50IiwiIixv c2lnaW50KTsgKi8KLQkvKiBkZWJ1ZyhGMTAxLCJjb25iZ3Qgc2lnbmFsIHRlc3QiLCIiLHgpOyAq LwotICAgIH0KLQotLyogQWxzbyBjaGVjayB0byBzZWUgaWYgd2UncmUgcnVubmluZyB3aXRoIHJl ZGlyZWN0ZWQgc3RkaW8uICovCi0vKiBUaGlzIGlzIG5vdCByZWFsbHkgYmFja2dyb3VuZCBvcGVy YXRpb24sIGJ1dCB3ZSB3YW50IHRvIGFjdCBhcyB0aG91Z2ggKi8KLS8qIGl0IHdlcmUuICovCi0K LSNpZmRlZiBJS1NECi0gICAgaWYgKGluc2VydmVyKSB7CQkJLyogSW50ZXJuZXQgS2VybWl0IFNl cnZlciAqLwotCWJhY2tncmQgPSAwOwkJCS8qIGlzIG5vdCBpbiB0aGUgYmFja2dyb3VuZCAqLwot CXJldHVybjsKLSAgICB9Ci0jZW5kaWYgLyogSUtTRCAqLwotCi0gICAgeSA9IChpc2F0dHkoMCkg JiYgaXNhdHR5KDEpKSA/IDEgOiAwOwotICAgIGRlYnVnKEYxMDEsImNvbmJndCBpc2F0dHkgdGVz dCIsIiIseSk7Ci0KLSNpZmRlZiBCU0QyOQotLyogVGhlIHByb2Nlc3MgZ3JvdXAgYW5kL29yIHNp Z25hbCB0ZXN0IGRvZXNuJ3Qgd29yayB1bmRlciB0aGVzZS4uLiAqLwotICAgIGJhY2tncmQgPSAh eTsKLSNlbHNlCi0jaWZkZWYgc3hhRTUwCi0gICAgYmFja2dyZCA9ICF5OwotI2Vsc2UKLSNpZmRl ZiBNSU5JWAotICAgIGJhY2tncmQgPSAheTsKLSNlbHNlCi0jaWZkZWYgTUlOSVgyCi0gICAgYmFj a2dyZCA9ICF5OwotI2Vsc2UKLSAgICBpZiAoeCA+IC0xKQotICAgICAgYmFja2dyZCA9ICh4IHx8 ICF5KSA/IDEgOiAwOwotICAgIGVsc2UgYmFja2dyZCA9ICF5OwotI2VuZGlmIC8qIEJTRDI5ICov Ci0jZW5kaWYgLyogc3hhRTUwICovCi0jZW5kaWYgLyogTUlOSVggKi8KLSNlbmRpZiAvKiBNSU5J WDIgKi8KLSAgICBkZWJ1ZyhGMTAxLCJjb25iZ3QgYmFja2dyZCIsIiIsYmFja2dyZCk7Ci19Ci0K LS8qICBDIE8gTiBJIE4gVCAgLS0gIENvbnNvbGUgSW50ZXJydXB0IHNldHRlciAgKi8KLQotLyoK LSAgRmlyc3QgYXJnIGlzIHBvaW50ZXIgdG8gZnVuY3Rpb24gdG8gaGFuZGxlIFNJR1RFUk0gJiBT SUdJTlQgKGxpa2UgQ3RybC1DKS4KLSAgU2Vjb25kIGFyZyBpcyBwb2ludGVyIHRvIGZ1bmN0aW9u IHRvIGhhbmRsZSBTSUdUU1RQIChzdXNwZW5kKS4KLSovCi0KLVZPSUQJCQkJCS8qIFNldCB0ZXJt aW5hbCBpbnRlcnJ1cHQgdHJhcHMuICovCi0jaWZkZWYgQ0tfQU5TSUMKLSNpZmRlZiBhcG9sbG8K LWNvbmludChmLHMpIFNJR1RZUCAoKmYpKCksICgqcykoKTsKLSNlbHNlCi1jb25pbnQoU0lHVFlQ ICgqZikoaW50KSwgU0lHVFlQICgqcykoaW50KSkKLSNlbmRpZiAvKiBhcG9sbG8gKi8KLSNlbHNl Ci1jb25pbnQoZixzKSBTSUdUWVAgKCpmKSgpLCAoKnMpKCk7Ci0jZW5kaWYgLyogQ0tfQU5TSUMg Ki8KLS8qIGNvbmludCAqLyB7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJjb25pbnQgY29uaXN0YXRlIiwi Iixjb25pc3RhdGUpOwotCi0gICAgY29uYmd0KDApOwkJCQkvKiBEbyBiYWNrZ3JvdW5kIHRlc3Qu ICovCi0KLS8qIFNldCB0aGUgZGVzaXJlZCBoYW5kbGVycyBmb3IgaGFuZ3VwIGFuZCBzb2Z0d2Fy ZSB0ZXJtaW5hdGlvbi4gKi8KLQotI2lmZGVmIFNJR1RFUk0KLSAgICBzaWduYWwoU0lHVEVSTSxm KTsgICAgICAgICAgICAgICAgICAvKiBTb2Z0d2FyZSB0ZXJtaW5hdGlvbiAqLwotI2VuZGlmIC8q IFNJR1RFUk0gKi8KLQotLyoKLSAgUHJpb3IgdG8gSnVseSAxOTk5IHdlIHVzZWQgdG8gY2FsbCBz aWdodXAoKSBoZXJlIGJ1dCBub3cgaXQncyBjYWxsZWQgaW4KLSAgc3lzaW5pdCgpIHNvIFNJR0hV UCBjYW4gYmUgY2F1Z2h0IGR1cmluZyBleGVjdXRpb24gb2YgdGhlIGluaXQgZmlsZSBvcgotICBh IGtlcmJhbmcgc2NyaXB0LgotKi8KLQotLyogTm93IGhhbmRsZSBrZXlib2FyZCBzdG9wLCBxdWl0 LCBhbmQgaW50ZXJydXB0IHNpZ25hbHMuICovCi0vKiBDaGVjayBpZiBpbnZva2VkIGluIGJhY2tn cm91bmQgLS0gaWYgc28gc2lnbmFscyBzZXQgdG8gYmUgaWdub3JlZC4gKi8KLS8qIEhvd2V2ZXIs IGlmIHJ1bm5pbmcgdW5kZXIgYSBqb2IgY29udHJvbCBzaGVsbCwgZG9uJ3QgaWdub3JlIHRoZW0u ICovCi0vKiBXZSB3b24ndCBiZSBnZXR0aW5nIGFueSwgYXMgd2UgYXJlbid0IGluIHRoZSB0ZXJt aW5hbCdzIHByb2Nlc3MgZ3JvdXAuICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJjb25pbnQgYmFja2dy ZCIsIiIsYmFja2dyZCk7Ci0gICAgZGVidWcoRjEwMSwiY29uaW50IGpjIiwiIixqYyk7Ci0KLSAg ICBpZiAoYmFja2dyZCAmJiAhamMpIHsJCS8qIEluIGJhY2tncm91bmQsIGlnbm9yZSBzaWduYWxz ICovCi0JZGVidWcoRjEwMSwiY29uaW50IGJhY2tncm91bmQgaWdub3Jpbmcgc2lnbmFscywgamMi LCIiLGpjKTsKLSNpZmRlZiBTSUdUU1RQCi0gICAgICAgIHNpZ25hbChTSUdUU1RQLFNJR19JR04p OyAgICAgICAgLyogS2V5Ym9hcmQgc3RvcCAqLwotI2VuZGlmIC8qIFNJR1RTVFAgKi8KLSAgICAg ICAgc2lnbmFsKFNJR1FVSVQsU0lHX0lHTik7ICAgICAgICAvKiBLZXlib2FyZCBxdWl0ICovCi0g ICAgICAgIHNpZ25hbChTSUdJTlQsU0lHX0lHTik7ICAgICAgICAgLyogS2V5Ym9hcmQgaW50ZXJy dXB0ICovCi0Jc2lnaW50X2lnbiA9IDE7Ci0JY29uaXN0YXRlID0gQ09OSV9OT0k7Ci0gICAgfSBl bHNlIHsJCQkJLyogRWxzZSBpbiBmb3JlZ3JvdW5kIG9yIHN1c3BlbmRlZCAqLwotCWRlYnVnKEYx MDEsImNvbmludCBmb3JlZ3JvdW5kIGNhdGNoaW5nIHNpZ25hbHMsIGpjIiwiIixqYyk7Ci0gICAg ICAgIHNpZ25hbChTSUdJTlQsZik7ICAgICAgICAgICAgICAgLyogQ2F0Y2ggdGVybWluYWwgaW50 ZXJydXB0ICovCi0Jc2lnaW50X2lnbiA9IChmID09IFNJR19JR04pID8gMSA6IDA7Ci0KLSNpZmRl ZiBTSUdUU1RQCQkJCS8qIEtleWJvYXJkIHN0b3AgKHN1c3BlbmQpICovCi0JLyogZGVidWcoRjEw MSwiY29uaW50IFNJR1NUU1RQIiwiIixzKTsgKi8KLQlpZiAocyA9PSBOVUxMKSBzID0gU0lHX0RG TDsKLSNpZmRlZiBOT0pDCQkJCS8qIE5vIGpvYiBjb250cm9sIGFsbG93ZWQuICovCi0Jc2lnbmFs KFNJR1RTVFAsU0lHX0lHTik7Ci0jZWxzZQkJCQkJLyogSm9iIGNvbnRyb2wgYWxsb3dlZCAqLwot CWlmIChqYykJCQkJLyogaWYgYXZhaWxhYmxlLiAqLwotCSAgc2lnbmFsKFNJR1RTVFAscyk7Ci0J ZWxzZQotCSAgc2lnbmFsKFNJR1RTVFAsU0lHX0lHTik7Ci0jZW5kaWYgLyogTk9KQyAqLwotI2Vu ZGlmIC8qIFNJR1RTVFAgKi8KLQotI2lmbmRlZiBPWE9TCi0jaWZkZWYgU1ZPUlBPU0lYCi0jaWZu ZGVmIEZJT05SRUFECQkJLyogV2F0Y2ggb3V0LCB3ZSBkb24ndCBrbm93IHRoaXMuLi4gKi8KLSNp Zm5kZWYgU0VMRUNUCi0jaWZuZGVmIENLX1BPTEwKLSNpZm5kZWYgUkRDSEsKLSAgICAgICAgc2ln bmFsKFNJR1FVSVQsZXNjdHJwKTsgICAgICAgICAvKiBRdWl0IHNpZ25hbCwgU3lzIElJSS9WLiAq LwotI2VuZGlmIC8qIFJEQ0hLICovCi0jZW5kaWYgLyogQ0tfUE9MTCAqLwotI2VuZGlmIC8qIFNF TEVDVCAqLwotI2VuZGlmIC8qIEZJT05SRUFEICovCi0gICAgICAgIGlmIChjb25lc2MpIGNvbmVz YyA9IDA7ICAgICAgICAgLyogQ2xlYXIgb3V0IHBlbmRpbmcgZXNjYXBlcyAqLwotI2Vsc2UKLSNp ZmRlZiBWNwotICAgICAgICBzaWduYWwoU0lHUVVJVCxlc2N0cnApOyAgICAgICAgIC8qIFY3IGxp a2UgU3lzIElJSS9WICovCi0gICAgICAgIGlmIChjb25lc2MpIGNvbmVzYyA9IDA7Ci0jZWxzZQot I2lmZGVmIGFlZ2lzCi0gICAgICAgIHNpZ25hbChTSUdRVUlULGYpOyAgICAgICAgICAgICAgLyog QXBvbGxvLCBjYXRjaCBpdCBsaWtlIG90aGVycy4gKi8KLSNlbHNlCi0gICAgICAgIHNpZ25hbChT SUdRVUlULFNJR19JR04pOyAgICAgICAgLyogT3RoZXJzLCBpZ25vcmUgbGlrZSA0RCAmIGVhcmxp ZXIuICovCi0jZW5kaWYgLyogYWVnaXMgKi8KLSNlbmRpZiAvKiBWNyAqLwotI2VuZGlmIC8qIFNW T1JQT1NJWCAqLwotI2VuZGlmIC8qIE9YT1MgKi8KLQljb25pc3RhdGUgPSBDT05JX0lOVDsKLSAg ICB9Ci19Ci0KLQotLyogIEMgTyBOIE4gTyBJICAtLSAgUmVzZXQgY29uc29sZSB0ZXJtaW5hbCBp bnRlcnJ1cHRzICovCi0KLVZPSUQKLWNvbm5vaSgpIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBDb25zb2xlLW5vLWludGVycnVwdHMgKi8KLQotICAgIGRlYnVnKEYxMDEsImNvbm5v aSBjb25pc3RhdGUiLCIiLGNvbmlzdGF0ZSk7Ci0jaWZkZWYgU0lHVFNUUAotICAgIHNpZ25hbChT SUdUU1RQLFNJR19JR04pOwkJLyogU3VzcGVuZCAqLwotI2VuZGlmIC8qIFNJR1RTVFAgKi8KLSAg ICBjb25pbnQoU0lHX0lHTixTSUdfSUdOKTsJCS8qIEludGVycnVwdCAqLwotICAgIHNpZ2ludF9p Z24gPSAxOwkJCS8qIFJlbWVtYmVyIHdlIGRpZCB0aGlzIG91cnNlbHZlcyAqLwotI2lmZGVmIFNJ R1FVSVQKLSAgICBzaWduYWwoU0lHUVVJVCxTSUdfSUdOKTsJCS8qIFF1aXQgKi8KLSNlbmRpZiAv KiBTSUdRVUlUICovCi0jaWZkZWYgU0lHVEVSTQotICAgIHNpZ25hbChTSUdURVJNLFNJR19JR04p OwkJLyogVGVybSAqLwotI2VuZGlmIC8qIFNJR1RFUk0gKi8KLSAgICBjb25pc3RhdGUgPSBDT05J X05PSTsKLX0KLQotLyogIEkgTiBJIFQgUiBBIFcgUSAgLS0gIFNldCB1cCB0byByZWFkIC9kZXYv a21lbSBmb3IgY2hhcmFjdGVyIGNvdW50LiAgKi8KLQotI2lmZGVmICBWNwotLyoKLSBVc2VkIGlu IFZlcnNpb24gNyB0byBzaW11bGF0ZSBCZXJrZWxleSdzIEZJT05SRUFEIGlvY3RsIGNhbGwuICBU aGlzCi0gZWxpbWluYXRlcyBibG9ja2luZyBvbiBhIHJlYWQsIGJlY2F1c2Ugd2UgY2FuIHJlYWQg L2Rldi9rbWVtIHRvIGdldCB0aGUKLSBudW1iZXIgb2YgY2hhcmFjdGVycyBhdmFpbGFibGUgZm9y IHJhdyBpbnB1dC4gIElmIHlvdXIgc3lzdGVtIGNhbid0Ci0gb3IgeW91IHdvbid0IGxldCB0aGUg d29ybGQgcmVhZCAvZGV2L2ttZW0gdGhlbiB5b3UgbXVzdCBmaWd1cmUgb3V0IGEKLSBkaWZmZXJl bnQgd2F5IHRvIGRvIHRoZSBjb3VudGluZyBvZiBjaGFyYWN0ZXJzIGF2YWlsYWJsZSwgb3IgZWxz ZSByZXBsYWNlCi0gdGhpcyBieSBhIGR1bW15IGZ1bmN0aW9uIHRoYXQgYWx3YXlzIHJldHVybnMg MC4KLSovCi0vKgotICogQ2FsbCB0aGlzIHJvdXRpbmUgYXM6IGluaXRyYXdxKHR0eSkKLSAqIHdo ZXJlIHR0eSBpcyB0aGUgZmlsZSBkZXNjcmlwdG9yIG9mIGEgdGVybWluYWwuICBJdCB3aWxsIHJl dHVybgotICogKGFzIGEgY2hhciAqKSB0aGUga2VybmVsLW1vZGUgbWVtb3J5IGFkZHJlc3Mgb2Yg dGhlIHJhd3EgY2hhcmFjdGVyCi0gKiBjb3VudCwgd2hpY2ggbWF5IHRoZW4gYmUgcmVhZC4gIEl0 IGhhcyB0aGUgc2lkZS1lZmZlY3Qgb2YgZmx1c2hpbmcKLSAqIGlucHV0IG9uIHRoZSB0ZXJtaW5h bC4KLSAqLwotLyoKLSAqIEpvaG4gTWFja2luLCBQaHlzaW9sb2d5IERlcHQuLCBVbml2ZXJzaXR5 IG9mIFN5ZG5leSAoQXVzdHJhbGlhKQotICogLi4uIWRlY3ZheCFtdWxnYSFwaHlzaW9sLnN1Lm96 IWpvaG4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGRvIGFueXRoaW5n IHdpdGggdGhpcyBjb2RlLCBhcwotICogbG9uZyBhcyB0aGlzIGNvbW1lbnQgaXMgcmV0YWluZWQg dW5tb2RpZmllZCBhbmQgbm8gY29tbWVyY2lhbAotICogYWR2YW50YWdlIGlzIGdhaW5lZC4KLSAq LwotI2lmbmRlZiBNSU5JWAotI2lmbmRlZiBNSU5JWDIKLSNpZm5kZWYgQ09IRVJFTlQKLSNpbmNs dWRlIDxhLm91dC5oPgotI2luY2x1ZGUgPHN5cy9wcm9jLmg+Ci0jZW5kaWYgLyogQ09IRVJFTlQg Ki8KLSNlbmRpZiAvKiBNSU5JWDIgKi8KLSNlbmRpZiAvKiBNSU5JWCAqLwotCi0jaWZkZWYgQ09I RVJFTlQKLSNpbmNsdWRlIDxsLm91dC5oPgotI2luY2x1ZGUgPHN5cy9wcm9jLmg+Ci0jZW5kaWYg LyogQ09IRVJFTlQgKi8KLQotY2hhciAqCi1pbml0cmF3cSh0dHkpIGludCB0dHk7IHsKLSNpZmRl ZiBNSU5JWAotICAgIHJldHVybigwKTsKLSNlbHNlCi0jaWZkZWYgTUlOSVgyCi0gICAgcmV0dXJu KDApOwotI2Vsc2UKLSNpZmRlZiBVVFMyNAotICAgIHJldHVybigwKTsKLSNlbHNlCi0jaWZkZWYg QlNEMjkKLSAgICByZXR1cm4oMCk7Ci0jZWxzZQotICAgIGxvbmcgbHNlZWsoKTsKLSAgICBzdGF0 aWMgc3RydWN0IG5saXN0IG5sW10gPSB7Ci0gICAgICAgIHtQUk9DTkFNRX0sCi0gICAgICAgIHtO UFJPQ05BTUV9LAotICAgICAgICB7IiJ9Ci0gICAgfTsKLSAgICBzdGF0aWMgc3RydWN0IHByb2Mg KnBwOwotICAgIGNoYXIgKnFhZGRyLCAqcCwgYzsKLSAgICBpbnQgbTsKLSAgICBQSURfVCBwaWQs IG1lOwotICAgIE5QVFlQRSB4cHJvYzsgICAgICAgICAgICAgICAgICAgICAgIC8qIEl0cyB0eXBl IGlzIGRlZmluZWQgaW4gbWFrZWZpbGUuICovCi0gICAgaW50IGNhdGNoKCk7Ci0KLSAgICBtZSA9 IGdldHBpZCgpOwotICAgIGlmICgobSA9IG9wZW4oIi9kZXYva21lbSIsIDApKSA8IDApIGVycigi a21lbSIpOwotICAgIG5saXN0KEJPT1ROQU1FLCBubCk7Ci0gICAgaWYgKG5sWzBdLm5fdHlwZSA9 PSAwKSBlcnIoInByb2MgYXJyYXkiKTsKLQotICAgIGlmIChubFsxXS5uX3R5cGUgPT0gMCkgZXJy KCJucHJvYyIpOwotCi0gICAgbHNlZWsobSwgKGxvbmcpKG5sWzFdLm5fdmFsdWUpLCAwKTsKLSAg ICByZWFkIChtLCAmeHByb2MsIHNpemVvZih4cHJvYykpOwotICAgIHNhdmFsID0gc2lnbmFsKFNJ R0FMUk0sIGNhdGNoKTsKLSAgICBpZiAoKHBpZCA9IGZvcmsoKSkgPT0gMCkgewotICAgICAgICB3 aGlsZSgxKQotICAgICAgICAgICAgcmVhZCh0dHksICZjLCAxKTsKLSAgICB9Ci0gICAgYWxhcm0o Mik7Ci0KLSAgICBpZihzZXRqbXAoampidWYpID09IDApIHsKLSAgICAgICAgd2hpbGUoMSkKLQkg IHJlYWQodHR5LCAmYywgMSk7Ci0gICAgfQotICAgIHNpZ25hbChTSUdBTFJNLCBTSUdfREZMKTsK LQotI2lmZGVmIERJUkVDVAotICAgIHBwID0gKHN0cnVjdCBwcm9jICopIG5sWzBdLm5fdmFsdWU7 Ci0jZWxzZQotICAgIGlmIChsc2VlayhtLCAobG9uZykobmxbMF0ubl92YWx1ZSksIDApIDwgMEwp IGVycigic2VlayIpOwotICAgIGlmIChyZWFkKG0sICZwcCwgc2l6ZW9mKHBwKSkgIT0gc2l6ZW9m KHBwKSkgIGVycigibm8gcmVhZCBvZiBwcm9jIHB0ciIpOwotI2VuZGlmCi0gICAgbHNlZWsobSwg KGxvbmcpKG5sWzFdLm5fdmFsdWUpLCAwKTsKLSAgICByZWFkKG0sICZ4cHJvYywgc2l6ZW9mKHhw cm9jKSk7Ci0KLSAgICBpZiAobHNlZWsobSwgKGxvbmcpcHAsIDApIDwgMEwpIGVycigiQ2FuJ3Qg c2VlayB0byBwcm9jIik7Ci0gICAgaWYgKChwID0gbWFsbG9jKHhwcm9jICogc2l6ZW9mKHN0cnVj dCBwcm9jKSkpID09IE5VTEwpIGVycigibWFsbG9jIik7Ci0gICAgaWYgKHJlYWQobSxwLHhwcm9j ICogc2l6ZW9mKHN0cnVjdCBwcm9jKSkgIT0geHByb2Mqc2l6ZW9mKHN0cnVjdCBwcm9jKSkKLSAg ICAgICAgZXJyKCJyZWFkIHByb2MgdGFibGUiKTsKLSAgICBmb3IgKHBwID0gKHN0cnVjdCBwcm9j ICopcDsgeHByb2MgPiAwOyAtLXhwcm9jLCArK3BwKSB7Ci0gICAgICAgIGlmIChwcCAtPiBwX3Bp ZCA9PSAoc2hvcnQpIHBpZCkgZ290byBpb3V0OwotICAgIH0KLSAgICBlcnIoIm5vIHN1Y2ggcHJv YyIpOwotCi1pb3V0OgotICAgIGNsb3NlKG0pOwotICAgIHFhZGRyID0gKGNoYXIgKikocHAgLT4g cF93Y2hhbik7Ci0gICAgZnJlZSAocCk7Ci0gICAga2lsbChwaWQsIFNJR0tJTEwpOwotICAgIHdh aXQoKFdBSVRfVCAqKTApOwotICAgIHJldHVybiAocWFkZHIpOwotI2VuZGlmCi0jZW5kaWYKLSNl bmRpZgotI2VuZGlmCi19Ci0KLS8qICBNb3JlIFY3LXN1cHBvcnQgZnVuY3Rpb25zLi4uICAqLwot Ci1zdGF0aWMgVk9JRAotZXJyKHMpIGNoYXIgKnM7IHsKLSAgICBjaGFyIGJ1ZlsyMDBdOwotCi0g ICAgY2ttYWttc2coYnVmLDIwMCwiZmF0YWwgZXJyb3IgaW4gaW5pdHJhd3E6ICIsIHMsIE5VTEws IE5VTEwpOwotICAgIHBlcnJvcihidWYpOwotICAgIGRvZXhpdCgxLC0xKTsKLX0KLQotc3RhdGlj IFZPSUQKLWNhdGNoKGZvbykgaW50IGZvbzsgewotICAgIGxvbmdqbXAoampidWYsIC0xKTsKLX0K LQotCi0vKiAgRyBFIE4gQiBSIEsgIC0tICBTaW11bGF0ZSBhIG1vZGVtIGJyZWFrLiAgKi8KLQot I2lmZGVmIE1JTklYCi0jZGVmaW5lIEJTUEVFRCBCMTEwCi0jZWxzZQotI2lmZGVmIE1JTklYMgot I2RlZmluZSBCU1BFRUQgQjExMAotI2Vsc2UKLSNkZWZpbmUgQlNQRUVEIEIxNTAKLSNlbmRpZiAv KiBNSU5JWDIgKi8KLSNlbmRpZiAvKiBNSU5JWCAqLwotCi0jaWZuZGVmIE1JTklYMgotVk9JRAot Z2VuYnJrKGZuLG1zZWMpIGludCBmbiwgbXNlYzsgewotICAgIHN0cnVjdCBzZ3R0eWIgdHRidWY7 Ci0gICAgaW50IHJldCwgc29zcGVlZCwgeCwgeTsKLQotICAgIHJldCA9IGlvY3RsKGZuLCBUSU9D R0VUUCwgJnR0YnVmKTsKLSAgICBzb3NwZWVkID0gdHRidWYuc2dfb3NwZWVkOwotICAgIHR0YnVm LnNnX29zcGVlZCA9IEJTUEVFRDsKLSAgICByZXQgPSBpb2N0bChmbiwgVElPQ1NFVFAsICZ0dGJ1 Zik7Ci0gICAgeSA9IChpbnQpc3RybGVuKGJybnVscyk7Ci0gICAgeCA9ICggQlNQRUVEICogMTAw ICkgLyBtc2VjOwotICAgIGlmICh4ID4geSkgeCA9IHk7Ci0gICAgcmV0ID0gd3JpdGUoZm4sIGJy bnVscywgKCggQlNQRUVEICogMTAwICkgLyBtc2VjICkpOwotICAgIHR0YnVmLnNnX29zcGVlZCA9 IHNvc3BlZWQ7Ci0gICAgcmV0ID0gaW9jdGwoZm4sIFRJT0NTRVRQLCAmdHRidWYpOwotICAgIHJl dCA9IHdyaXRlKGZuLCAiQCIsIDEpOwotICAgIHJldHVybjsKLX0KLSNlbmRpZiAvKiBNSU5JWDIg Ki8KLQotI2lmZGVmIE1JTklYMgotaW50Ci1nZW5icmsoZm4sbXNlYykgaW50IGZuLCBtc2VjOyB7 Ci0gICAgc3RydWN0IHRlcm1pb3MgdHRidWY7Ci0gICAgaW50IHJldCwgeCwgeTsKLSAgICBzcGVl ZF90IHNvc3BlZWQ7Ci0KLSAgICByZXQgPSB0Y2dldGF0dHIoZm4sICZ0dGJ1Zik7Ci0gICAgc29z cGVlZCA9IHR0YnVmLmNfb3NwZWVkOwotICAgIHR0YnVmLmNfb3NwZWVkID0gQlNQRUVEOwotICAg IHJldCA9IHRjc2V0YXR0cihmbixUQ1NBRFJBSU4sICZ0dGJ1Zik7Ci0gICAgeSA9IChpbnQpc3Ry bGVuKGJybnVscyk7Ci0gICAgeCA9ICggQlNQRUVEICogMTAwICkgLyBtc2VjOwotICAgIGlmICh4 ID4geSkgeCA9IHk7Ci0gICAgcmV0ID0gd3JpdGUoZm4sIGJybnVscywgKCggQlNQRUVEICogMTAw ICkgLyBtc2VjICkpOwotICAgIHR0YnVmLmNfb3NwZWVkID0gc29zcGVlZDsKLSAgICByZXQgPSB0 Y3NldGF0dHIoZm4sIFRDU0FEUkFJTiwgJnR0YnVmKTsKLSAgICByZXQgPSB3cml0ZShmbiwgIkAi LCAxKTsKLSAgICByZXR1cm4gcmV0OwotfQotI2VuZGlmIC8qIE1JTklYMiAqLwotI2VuZGlmIC8q IFY3ICovCi0KLS8qCi0gIEkgTiBDIEggSyAgLS0gIENoZWNrIGlmIGNoYXJzIHdhaXRpbmcgdG8g YmUgcmVhZCBvbiBnaXZlbiBmaWxlIGRlc2NyaXB0b3IuCi0KLSAgVGhpcyByb3V0aW5lIGlzIGEg bWVyZ2VyIG9mIHR0Y2hrKCkgYW5kIGNvbmNoaygpLgotICBDYWxsIHdpdGg6Ci0gICAgY2hhbm5l bCA9PSAwIHRvIGNoZWNrIGNvbnNvbGUuCi0gICAgY2hhbm5lbCA9PSAxIHRvIGNoZWNrIGNvbW11 bmljYXRpb25zIGNvbm5lY3Rpb24uCi0gIGFuZDoKLSAgICBmZCA9IGZpbGUgZGVzY3JpcHRvci4K LSAgUmV0dXJuczoKLSAgID49IDA6IG51bWJlciBvZiBjaGFyYWN0ZXJzIHdhaXRpbmcsIDAgb3Ig Z3JlYXRlciwKLSAgICAgLTE6IG9uIGFueSBraW5kIG9mIGVycm9yLAotICAgICAtMjogaWYgdGhl cmUgaXMgKGRlZmluaXRlbHkpIG5vIGNvbm5lY3Rpb24uCi0gIE5vdGU6IEluIFVOSVggd2UgZG9u J3QgaGF2ZSB0byBjYWxsIG5ldHRjaGsoKSBiZWNhdXNlIGEgc29ja2V0Ci0gIGZpbGUgZGVzY3Jp cHRvciB3b3JrcyBqdXN0IGxpa2UgaW4gc2VyaWFsIGkvbywgaW9jdGxzIGFuZCBhbGwuCi0gIChC dXQgdGhpcyB3aWxsIGNoYW5nZSBpZiB3ZSBhZGQgbm9uLWZpbGUtZGVzY3JpcHRvciBjaGFubmVs cywKLSAgc3VjaCBhcyBJQk0gWC4yNSBmb3IgQUlYLi4uKQotKi8KLXN0YXRpYyBpbnQKLWluX2No ayhjaGFubmVsLCBmZCkgaW50IGNoYW5uZWwsIGZkOyB7Ci0gICAgaW50IHgsIG4gPSAwOwkJCS8q IFdvcmtlcnMsIG4gPSByZXR1cm4gdmFsdWUgKi8KLSAgICBleHRlcm4gaW50IGNsc29uZGlzYzsJ CS8qIENsb3NlIG9uIGRpc2Nvbm5lY3QgKi8KLS8qCi0gIFRoZSBmaXJzdCBzZWN0aW9uIGNoZWNr cyB0byBtYWtlIHN1cmUgd2UgaGF2ZSBhIGNvbm5lY3Rpb24sCi0gIGJ1dCBvbmx5IGlmIHdlJ3Jl IGluIGxvY2FsIG1vZGUuCi0qLwotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewotCWRl YnVnKEYxMTEsImluX2NoayBlbnRyeSIsY2tpdG9hKGZkKSxjaGFubmVsKTsKLQlkZWJ1ZyhGMTAx LCJpbl9jaGsgdHR5ZmQiLCIiLHR0eWZkKTsKLQlkZWJ1ZyhGMTAxLCJpbl9jaGsgdHRwdHkiLCIi LHR0cHR5KTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLS8qCi0gIEJ1dCBkb24ndCBzYXkg Y29ubmVjdGlvbiBpcyBnb25lIGlmIHdlIGhhdmUgYW55IGJ1ZmZlcmVkLXN0dWZmLgotKi8KLSNp ZmRlZiBUVExFQlVGCi0gICAgZGVidWcoRjEwMSwiaW5fY2hrIHR0cHVzaCIsIiIsdHRwdXNoKTsK LSAgICBpZiAoY2hhbm5lbCA9PSAxKSB7Ci0JaWYgKHR0cHVzaCA+PSAwKQotCSAgbisrOwotCW4g Kz0gbGVfaW5idWYoKTsKLQlpZiAobiA+IDApCi0JICByZXR1cm4obik7Ci0gICAgfQotI2VuZGlm IC8qIFRUTEVCVUYgKi8KLQotI2lmZGVmIE5FVFBUWQotI2lmZGVmIEhBVkVfUFRZVFJBUAotICAg IC8qIFNwZWNpYWwgaGFuZGxpbmcgZm9yIEhQLVVYIHB0eSBpL28gKi8KLSAgICBpZiAodHRwdHkg JiYgcHR5X3RyYXBfcGVuZGluZyh0dHlmZCkgPiAwKSB7Ci0gICAgICAgIGlmIChwdHlfdHJhcF9o YW5kbGVyKHR0eWZkKSA+IDApIHsKLSAgICAgICAgICAgIHR0Y2xvcygwKTsKLSAgICAgICAgICAg IHJldHVybigtMik7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogSEFWRV9QVFlUUkFQICov Ci0jZW5kaWYgLyogTkVUUFRZICovCi0KLSAgICBpZiAoY2hhbm5lbCkgewkJCS8qIENoZWNraW5n IGNvbW11bmljYXRpb25zIGNoYW5uZWwgKi8KLQlpZiAodHR5ZmQgPCAwKSB7CQkvKiBObyBjb25u ZWN0aW9uICovCi0JICByZXR1cm4oLTIpOwkJCS8qIFRoYXQncyB3aGF0IHRoaXMgbWVhbnMgKi8K LQl9IGVsc2UgaWYgKHhsb2NhbCAmJgkJLyogSW4gbG9jYWwgbW9kZSAqLwotCQkgICAoIW5ldGNv bm4JCS8qIFNlcmlhbCBjb25uZWN0aW9uIG9yICovCi0jaWZkZWYgVE5fQ09NUE9SVAotCQkgICAg fHwgaXN0bmNvbXBvcnQoKSAgICAvKiBUZWxuZXQgQ29tIFBvcnQgKi8KLSNlbmRpZiAvKiBUTl9D T01QT1JUICovCi0JCSAgICkgJiYgdHRjYXJyICE9IENBUl9PRkYgLyogd2l0aCBDQVJSSUVSIFdB VENIIE9OIChvciBBVVRPKSAqLwotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBNWVJFQUQKLS8qCi0g IFNlZW1zIGxpa2UgdGhpcyB3b3VsZCBiZSBhIGdvb2QgaWRlYSBidXQgaXQgcHJldmVudHMgQy1L ZXJtaXQgZnJvbQotICBwb3BwaW5nIGJhY2sgdG8gdGhlIHByb21wdCBhdXRvbWF0aWNhbGx5IHdo ZW4gY2FycmllciBkcm9wcy4gIEhvd2V2ZXIsCi0gIGNvbW1lbnRpbmcgdGhpcyBvdXQgcHJldmVu dHMgdXMgZnJvbSBzZWVpbmcgdGhlIE5PIENBUlJJRVIgbWVzc2FnZS4KLSAgTmVlZHMgbW9yZSB3 b3JrLi4uCi0qLwotCQkgICAmJiBteV9jb3VudCA8IDEJLyogTm90aGluZyBpbiBvdXIgaW50ZXJu YWwgYnVmZmVyICovCi0jZW5kaWYgLyogTVlSRUFEICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwot CQkgICApIHsKLQkgICAgaW50IHg7Ci0JICAgIHggPSB0dGdtZG0oKTsJCS8qIFNvIGdldCBtb2Rl bSBzaWduYWxzICovCi0JICAgIGRlYnVnKEYxMDEsImluX2NoayBjbG9zZS1vbi1kaXNjb25uZWN0 IiwiIixjbHNvbmRpc2MpOwotCSAgICBpZiAoeCA+IC0xKSB7CQkvKiBDaGVjayBmb3IgY2Fycmll ciAqLwotCQlpZiAoISh4ICYgQk1fRENEKSkgewkvKiBObyBjYXJyaWVyICovCi0JCSAgICBkZWJ1 ZyhGMTAxLCJpbl9jaGsgY2FycmllciBsb3N0IiwiIix4KTsKLQkJICAgIGlmIChjbHNvbmRpc2Mp CS8qIElmICJjbG9zZS1vbi1kaXNjb25uZWN0IiAqLwotCQkgICAgICB0dGNsb3MoMCk7CS8qIGNs b3NlIGRldmljZSAmIHJlbGVhc2UgbG9jay4gKi8KLQkJICAgIHJldHVybigtMik7CQkvKiBUaGlz IG1lYW5zICJkaXNjb25uZWN0ZWQiICovCi0JCX0KLQkgICAgLyogSW4gY2FzZSBJL08gdG8gZGV2 aWNlIGFmdGVyIENEIGRyb3BwZWQgYWx3YXlzIGZhaWxzICovCi0JICAgIC8qIGFzIGluIERlYmlh biBMaW51eCAyLjEgYW5kIFVuaXh3YXJlIDIuMS4uLiAqLwotCSAgICB9IGVsc2UgewotCSAgICAg ICAgZGVidWcoRjEwMSwiaW5fY2hrIHR0Z21kbSBJL08gZXJyb3IiLCIiLGVycm5vKTsKLQkgICAg ICAgIGRlYnVnKEYxMDEsImluX2NoayB0dGdtZG0gZ290c2lncyIsIiIsZ290c2lncyk7Ci0JICAg ICAgICBpZiAoZ290c2lncykgewkJLyogSWYgd2UgZ290IHNpZ25hbHMgYmVmb3JlLi4uICovCi0J CSAgICBpZiAoZXJybm8gPT0gNSB8fCBlcnJubyA9PSA2KSB7IC8qIEkvTyBlcnJvciBldGMgKi8K LQkJICAgICAgICBpZiAoY2xzb25kaXNjKQkvKiBsaWtlIHdoZW4gbW9kZW0gaGFuZ3MgdXAgKi8K LQkJCSAgdHRjbG9zKDApOwotCQkJcmV0dXJuKC0yKTsKLQkJICAgIH0KLQkJfQotCQkvKiBJZiB3 ZSBuZXZlciBnb3QgbW9kZW0gc2lnbmFscyBzdWNjZXNzZnVsbHkgb24gdGhpcyAqLwotCQkvKiBj b25uZWN0aW9uIGJlZm9yZSwgd2UgY2FuJ3QgY29uY2x1ZGUgdGhhdCBUSElTIGZhaWx1cmUgKi8K LQkJLyogbWVhbnMgdGhlIGNvbm5lY3Rpb24gd2FzIGxvc3QuICovCi0JCXJldHVybigwKTsKLQkg ICAgfQotCX0KLSAgICB9Ci0KLS8qIFdlIHNlZW0gdG8gaGF2ZSBhIGNvbm5lY3Rpb24gc28gbm93 IHNlZSBpZiBhbnkgYnl0ZXMgYXJlIHdhaXRpbmcgb24gaXQgKi8KLQotI2lmZGVmIENLX1NTTAot ICAgIGlmIChzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSB7Ci0gICAgICAgIG4g Kz0gU1NMX3BlbmRpbmcoc3NsX2FjdGl2ZV9mbGFnP3NzbF9jb246dGxzX2Nvbik7Ci0gICAgICAg IGRlYnVnKEYxMDEsImluX2NoayBTU0xfcGVuZGluZyIsIiIsbik7Ci0gICAgICAgIGlmIChuIDwg MCkgewotICAgICAgICAgICAgdHRjbG9zKDApOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAg ICAgICAgfSBlbHNlIGlmIChuID4gMCkgewotICAgICAgICAgICAgcmV0dXJuKG4pOwotICAgICAg ICB9Ci0gICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotI2lmZGVmIFJMT0dDT0RFCi0jaWZkZWYg Q0tfS0VSQkVST1MKLSAgICAvKiBJdCBpcyBub3Qgc2FmZSB0byByZWFkIGFueSBkYXRhIHdoZW4g dXNpbmcgZW5jcnlwdGVkIEtsb2dpbiAqLwotICAgIGlmICh0dG5wcm90byA9PSBOUF9FSzRMT0dJ TiB8fCB0dG5wcm90byA9PSBOUF9FSzVMT0dJTikgewotI2lmZGVmIEtSQjQKLSAgICAgICAgaWYg KHR0bnByb3RvID09IE5QX0VLNExPR0lOKSB7Ci0gICAgICAgICAgICBuICs9IGtyYjRfZGVzX2F2 YWlsKHR0eWZkKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImluX2NoayBrcmI0X2Rlc19hdmFp bCIsIiIsbik7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBLUkI0ICovCi0jaWZkZWYgS1JCNQotICAg ICAgICBpZiAodHRucHJvdG8gPT0gTlBfRUs1TE9HSU4pIHsKLSAgICAgICAgICAgIG4gKz0ga3Ji NV9kZXNfYXZhaWwodHR5ZmQpOwotICAgICAgICAgICAgZGVidWcoRjEwMSwiaW5fY2hrIGtyYjVf ZGVzX2F2YWlsIiwiIixuKTsKLSAgICAgICAgfQotI2lmZGVmIEtSQjVfVTJVCi0gICAgICAgIGlm ICh0dG5wcm90byA9PSBOUF9LNVUyVSkgewotICAgICAgICAgICAgbiArPSBrcmI1X3UydV9hdmFp bCh0dHlmZCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJpbl9jaGsga3JiNV9kZXNfYXZhaWwi LCIiLG4pOwotICAgICAgICB9Ci0jZW5kaWYgLyogS1JCNV9VMlUgKi8KLSNlbmRpZiAvKiBLUkI1 ICovCi0gICAgICAgIGlmIChuIDwgMCkJCQkvKiBJcyB0aGlzIHJpZ2h0PyAqLwotCSAgcmV0dXJu KC0xKTsKLSAgICAgICAgZWxzZQotCSAgcmV0dXJuKG4pOwotICAgIH0KLSNlbmRpZiAvKiBDS19L RVJCRVJPUyAqLwotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0KLSAgICBlcnJubyA9IDA7CQkJCS8q IFJlc2V0IHRoaXMgc28gd2UgbG9nIGdvb2QgaW5mbyAqLwotI2lmZGVmIEZJT05SRUFECi0gICAg eCA9IGlvY3RsKGZkLCBGSU9OUkVBRCwgJm4pOwkvKiBCU0QgYW5kIGxvdHMgb2Ygb3RoZXJzICov Ci0jaWZkZWYgREVCVUcJCQkJLyogKHRoZSBtb3JlIHRoZSBiZXR0ZXIpICovCi0gICAgaWYgKGRl YmxvZykgewotCWRlYnVnKEYxMDEsImluX2NoayBGSU9OUkVBRCByZXR1cm4gY29kZSIsIiIseCk7 Ci0JZGVidWcoRjEwMSwiaW5fY2hrIEZJT05SRUFEIGNvdW50IiwiIixuKTsKLQlkZWJ1ZyhGMTAx LCJpbl9jaGsgRklPTlJFQUQgZXJybm8iLCIiLGVycm5vKTsKLSAgICB9Ci0jZW5kaWYgLyogREVC VUcgKi8KLSNlbHNlIC8qIEZJT05SRUFEIG5vdCBkZWZpbmVkICovCi0vKgotICBIZXJlLCBpZiAo bmV0Y29ubiAmJiB0dG5ldCA9PSBORVRfVENQQiksIHdlIG1pZ2h0IHRyeSBjYWxsaW5nIHJlY3Zt c2coKQotICB3aXRoIGZsYWdzIE1TR19QRUVLfE1TR19ET05UV0FJVCBvbiB0aGUgc29ja2V0ICh0 dHlmZCksIGV4Y2VwdCB0aGlzIGlzIG5vdAotICBwb3J0YWJsZSAoTVNHX0RPTlRXQUlUIGlzbid0 IGRlZmluZWQgaW4gYW55IG9mIHRoZSA8c3lzL3NvY2tldC5oPiBmaWxlcwotICB0aGF0IEkgbG9v a2VkIGF0LCBidXQgaXQgaXMgbmVlZGVkIHRvIHByZXZlbnQgdGhlIGNhbGwgZnJvbSBibG9ja2lu ZyksIGFuZAotICB0aGUgbXNnaGRyIHN0cnVjdCBkaWZmZXJzIGZyb20gcGxhY2UgdG8gcGxhY2Us IHNvIHdlIHdvdWxkIG5lZWQgYW5vdGhlcgotICBhdmFsYW5jaGUgb2YgaWZkZWZzLiAgU3RpbGws IHdoZW4gRklPTlJFQUQgaXMgbm90IGF2YWlsYWJsZSwgdGhpcyBpcyB0aGUKLSAgb25seSBvdGhl ciBrbm93biBtZXRob2Qgb2YgYXNraW5nIHRoZSBPUyBmb3IgdGhlICpudW1iZXIqIG9mIGNoYXJh Y3RlcnMKLSAgYXZhaWxhYmxlIGZvciByZWFkaW5nLgotKi8KLSNpZmRlZiBWNwkJCQkvKiBVTklY IFY3OiBsb29rIGluIGtlcm5lbCBtZW1vcnkgKi8KLSNpZmRlZiBNSU5JWAotICAgIG4gPSAwOwkJ CQkvKiBCdXQgbm90IGluIE1JTklYICovCi0jZWxzZQotI2lmZGVmIE1JTklYMgotICAgIG4gPSAw OwotI2Vsc2UKLSAgICBsc2VlayhrbWVtW1RUWV0sIChsb25nKSBxYWRkcltUVFldLCAwKTsgLyog N3RoIEVkaXRpb24gVW5peCAqLwotICAgIHggPSByZWFkKGttZW1bVFRZXSwgJm4sIHNpemVvZihp bnQpKTsKLSAgICBpZiAoeCAhPSBzaXplb2YoaW50KSkKLSAgICAgIG4gPSAwOwotI2VuZGlmIC8q IE1JTklYMiAqLwotI2VuZGlmIC8qIE1JTklYICovCi0jZWxzZSAvKiBOb3QgVjcgKi8KLSNpZmRl ZiBQUk9WWDEKLSAgICB4ID0gaW9jdGwoZmQsIFRJT0NRQ05ULCAmdHRidWYpOwkvKiBERUMgUHJv LzN4eCBWZW5peCBWLjEgKi8KLSAgICBuID0gdHRidWYuc2dfaXNwZWVkICYgMDM3NzsJCS8qIENp cmNhIDE5ODQgKi8KLSAgICBpZiAoeCA8IDApIG4gPSAwOwotI2Vsc2UKLSNpZmRlZiBNWVJFQUQK LS8qCi0gIEhlcmUgd2Ugc2tpcCBhbGwgdGhlIHVuZGVwZW5kYWJsZSBhbmQgZXhwZW5zaXZlIGNh bGxzIGJlbG93IGlmIHdlCi0gIGFscmVhZHkgaGF2ZSBzb21ldGhpbmcgaW4gb3VyIGludGVybmFs IGJ1ZmZlci4gIFRoaXMgdGVuZHMgdG8gd29yayBxdWl0ZQotICBuaWNlbHksIHNvIHRoZSBvbmx5 IHJlYWxseSBiYWQgY2FzZSByZW1haW5pbmcgaXMgdGhlIG9uZSBpbiB3aGljaCBuZWl0aGVyCi0g IEZJT05SRUFEIG9yIE1ZUkVBRCBhcmUgZGVmaW5lZCwgd2hpY2ggaXMgaW5jcmVhc2luZ2x5IHJh cmUgdGhlc2UgZGF5cy4KLSovCi0gICAgaWYgKGNoYW5uZWwgIT0gMCAmJiBteV9jb3VudCA+IDAp IHsKLQlkZWJ1ZyhGMTAxLCJpbl9jaGsgYnVmIG15X2NvdW50IiwiIixteV9jb3VudCk7Ci0JbiA9 IG15X2NvdW50OwkJCS8qIG4gd2FzIDAgYmVmb3JlIHdlIGdvdCBoZXJlICovCi0JcmV0dXJuKG4p OwotICAgIH0KLSNlbmRpZiAvKiBNWVJFQUQgKi8KLS8qCi0gIHJkY2hrKCksIHNlbGVjdCgpLCBh bmQgcG9sbCgpIHRlbGwgdXMgKmlmKiBkYXRhIGlzIGF2YWlsYWJsZSB0byBiZSByZWFkLCBidXQK LSAgbm90IGhvdyBtdWNoLCBzbyB0aGVzZSBzaG91bGQgYmUgdXNlZCBvbmx5IGFzIGEgZmluYWwg cmVzb3J0LiAgRXNwZWNpYWxseQotICBzaW5jZSB0aGVzZSBjYWxscyB0ZW5kIHRvIGFkZCBhIGxv dCBvdmVyaGVhZC4KLSovCi0jaWZkZWYgUkRDSEsJCQkJLyogVGhpcyBtb3N0bHkgU0NPLXNwZWNp ZmljICovCi0gICAgbiA9IHJkY2hrKGZkKTsKLSAgICBkZWJ1ZyhGMTAxLCJpbl9jaGsgcmRjaGsi LCIiLG4pOwotI2Vsc2UgLyogTm8gUkRDSEsgKi8KLSNpZmRlZiBTRUxFQ1QKLSNpZmRlZiBQbGFu OQotICAgIC8qIE9ubHkgYWxsb3dzIHNlbGVjdCBvbiB0aGUgY29uc29sZSAuLi4gZG9uJ3QgYXNr ICovCi0gICAgaWYgKGNoYW5uZWwgPT0gMCkKLSNlbmRpZiAvKiBQbGFuOSAqLwotICAgICAgewot CWZkX3NldCByZmRzOwkJCS8qIFJlYWQgZmlsZSBkZXNjcmlwdG9ycyAqLwotI2lmZGVmIEJFTExW MTAKLQlGRF9aRVJPKHJmZHMpOwkJCS8qIEluaXRpYWxpemUgdGhlbSAqLwotCUZEX1NFVChmZCxy ZmRzKTsJCS8qIFdlIHdhbnQgdG8gbG9vayBhdCB0aGlzIGZkICovCi0jZWxzZQotCUZEX1pFUk8o JnJmZHMpOwkJCS8qIEluaXRpYWxpemUgdGhlbSAqLwotCUZEX1NFVChmZCwmcmZkcyk7CQkvKiBX ZSB3YW50IHRvIGxvb2sgYXQgdGhpcyBmZCAqLwotCXR2LnR2X3NlYyA9IHR2LnR2X3VzZWMgPSAw TDsJLyogQSAwLXZhbHVlZCB0aW1ldmFsIHN0cnVjdHVyZSAqLwotI2VuZGlmIC8qIEJFTExWMTAg Ki8KLSNpZmRlZiBQbGFuOQotCW4gPSBzZWxlY3QoIEZEX1NFVFNJWkUsICZyZmRzLCAoZmRfc2V0 ICopMCwgKGZkX3NldCAqKTAsICZ0diApOwotCWRlYnVnKEYxMDEsImluX2NoayBQbGFuIDkgc2Vs ZWN0IiwiIixuKTsKLSNlbHNlCi0jaWZkZWYgQkVMTFYxMAotCW4gPSBzZWxlY3QoIDEyOCwgcmZk cywgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAwICk7Ci0JZGVidWcoRjEwMSwiaW5fY2hrIEJF TExWMTAgc2VsZWN0IiwiIixuKTsKLSNlbHNlCi0jaWZkZWYgQlNENDQKLQluID0gc2VsZWN0KCBG RF9TRVRTSVpFLCAmcmZkcywgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYgKTsKLQlkZWJ1 ZyhGMTAxLCJpbl9jaGsgQlNENDQgc2VsZWN0IiwiIixuKTsKLSNlbHNlCi0jaWZkZWYgQlNENDMK LQluID0gc2VsZWN0KCBGRF9TRVRTSVpFLCAmcmZkcywgKGZkX3NldCAqKTAsIChmZF9zZXQgKikw LCAmdHYgKTsKLQlkZWJ1ZyhGMTAxLCJpbl9jaGsgQlNENDMgc2VsZWN0IiwiIixuKTsKLSNlbHNl Ci0jaWZkZWYgU09MQVJJUwotCW4gPSBzZWxlY3QoIEZEX1NFVFNJWkUsICZyZmRzLCAoZmRfc2V0 ICopMCwgKGZkX3NldCAqKTAsICZ0diApOwotCWRlYnVnKEYxMDEsImluX2NoayBTT0xBUklTIHNl bGVjdCIsIiIsbik7Ci0jZWxzZQotI2lmZGVmIFFOWDYKLQluID0gc2VsZWN0KCBGRF9TRVRTSVpF LCAmcmZkcywgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYgKTsKLQlkZWJ1ZyhGMTAxLCJp bl9jaGsgUU5YNiBzZWxlY3QiLCIiLG4pOwotI2Vsc2UKLSNpZmRlZiBRTlgKLQluID0gc2VsZWN0 KCBGRF9TRVRTSVpFLCAmcmZkcywgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYgKTsKLQlk ZWJ1ZyhGMTAxLCJpbl9jaGsgUU5YIHNlbGVjdCIsIiIsbik7Ci0jZWxzZQotI2lmZGVmIENPSEVS RU5UCi0JbiA9IHNlbGVjdCggRkRfU0VUU0laRSwgJnJmZHMsIChmZF9zZXQgKikwLCAoZmRfc2V0 ICopMCwgJnR2ICk7Ci0JZGVidWcoRjEwMSwiaW5fY2hrIENPSEVSRU5UIHNlbGVjdCIsIiIsbik7 Ci0jZWxzZQotI2lmZGVmIFNWUjQKLQluID0gc2VsZWN0KCBGRF9TRVRTSVpFLCAmcmZkcywgKGZk X3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYgKTsKLQlkZWJ1ZyhGMTAxLCJpbl9jaGsgU1ZSNCBz ZWxlY3QiLCIiLG4pOwotI2Vsc2UKLSNpZmRlZiBfX2xpbnV4X18KLQluID0gc2VsZWN0KCBGRF9T RVRTSVpFLCAmcmZkcywgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYgKTsKLQlkZWJ1ZyhG MTAxLCJpbl9jaGsgTElOVVggc2VsZWN0IiwiIixuKTsKLSNpZmRlZiBPU0YKLQluID0gc2VsZWN0 KCBGRF9TRVRTSVpFLCAmcmZkcywgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYgKTsKLQlk ZWJ1ZyhGMTAxLCJpbl9jaGsgT1NGIHNlbGVjdCIsIiIsbik7Ci0jZWxzZQotCW4gPSBzZWxlY3Qo IEZEX1NFVFNJWkUsICZyZmRzLCAoaW50ICopMCwgKGludCAqKTAsICZ0diApOwotCWRlYnVnKEYx MDEsImluX2NoayBjYXRjaGFsbCBzZWxlY3QiLCIiLG4pOwotI2VuZGlmIC8qIE9TRiAqLwotI2Vu ZGlmIC8qIF9fbGludXhfXyAqLwotI2VuZGlmIC8qIFNWUjQgKi8KLSNlbmRpZiAvKiBDT0hFUkVO VCAqLwotI2VuZGlmIC8qIFFOWCAqLwotI2VuZGlmIC8qIFFOWDYgKi8KLSNlbmRpZiAvKiBTT0xB UklTICovCi0jZW5kaWYgLyogQlNENDMgKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2VuZGlmIC8q IEJFTExWMTAgKi8KLSNlbmRpZiAvKiBQbGFuOSAqLwotICAgIH0KLSNlbHNlICAvKiBOb3QgU0VM RUNUICovCi0jaWZkZWYgQ0tfUE9MTAotICAgIHsKLSAgICAgIHN0cnVjdCBwb2xsZmQgcGZkOwot Ci0gICAgICBwZmQuZmQgPSBmZDsKLSAgICAgIHBmZC5ldmVudHMgPSBQT0xMSU47Ci0gICAgICBw ZmQucmV2ZW50cyA9IDA7Ci0gICAgICBuID0gcG9sbCgmcGZkLCAxLCAwKTsKLSAgICAgIGRlYnVn KEYxMDEsImluX2NoayBwb2xsIiwiIixuKTsKLSAgICAgIGlmICgobiA+IDApICYmIChwZmQucmV2 ZW50cyAmIFBPTExJTikpCi0JbiA9IDE7Ci0gICAgfQotI2VuZGlmIC8qIENLX1BPTEwgKi8KLSNl bmRpZiAvKiBTRUxFQ1QgKi8KLSNlbmRpZiAvKiBSRENISyAqLwotI2VuZGlmIC8qIFBST1ZYMSAq LwotI2VuZGlmIC8qIFY3ICovCi0jZW5kaWYgLyogRklPTlJFQUQgKi8KLQotLyogRnJvbSBoZXJl IGRvd24sIHRyZWF0IGNvbnNvbGUgYW5kIGNvbW11bmljYXRpb24gZGV2aWNlIGRpZmZlcmVudGx5 Li4uICovCi0KLSAgICBpZiAoY2hhbm5lbCA9PSAwKSB7CQkJLyogQ29uc29sZSAqLwotCi0jaWZk ZWYgU1ZPUlBPU0lYCi0jaWZuZGVmIEZJT05SRUFECi0jaWZuZGVmIFNFTEVDVAotI2lmbmRlZiBD S19QT0xMCi0jaWZuZGVmIFJEQ0hLCi0vKgotICBUaGlzIGlzIHRoZSBoaWRlb3VzIGhhY2sgdXNl ZCBpbiBTeXN0ZW0gViBhbmQgUE9TSVggc3lzdGVtcyB0aGF0IGRvbid0Ci0gIHN1cHBvcnQgRklP TlJFQUQsIHJkY2hrKCksIHNlbGVjdCgpLCBwb2xsKCksIGV0YywgaW4gd2hpY2ggdGhlIHVzZXIn cwotICBDT05ORUNULW1vZGUgZXNjYXBlIGNoYXJhY3RlciBpcyBhdHRhY2hlZCB0byBTSUdRVUlU LiAgVXNlZCwgb2J2aW91c2x5LAotICBvbmx5IG9uIHRoZSBjb25zb2xlLgotKi8KLQlpZiAoY29u ZXNjKSB7CQkJLyogRXNjYXBlIGNoYXJhY3RlciB0eXBlZCA9PSBTSUdRVUlUICovCi0JICAgIGRl YnVnKEYxMDAsImluX2NoayBjb25lc2MiLCIiLGNvbmVzYyk7Ci0JICAgIGNvbmVzYyA9IDA7Ci0J ICAgIHNpZ25hbChTSUdRVUlULGVzY3RycCk7CS8qIFJlc3RvcmUgc2lnbmFsICovCi0JICAgIG4g Kz0gMTsKLQl9Ci0jZW5kaWYgLyogUkRDSEsgKi8KLSNlbmRpZiAvKiBDS19QT0xMICovCi0jZW5k aWYgLyogU0VMRUNUICovCi0jZW5kaWYgLyogRklPTlJFQUQgKi8KLSNlbmRpZiAvKiBTVk9SUE9T SVggKi8KLQotCXJldHVybihuKTsJCQkvKiBEb25lIHdpdGggY29uc29sZSAqLwotICAgIH0KLQot ICAgIGlmIChjaGFubmVsICE9IDApIHsJCQkvKiBDb21tdW5pY2F0aW9ucyBjb25uZWN0aW9uICov Ci0KLSNpZmRlZiBNWVJFQUQKLSNpZm5kZWYgRklPTlJFQUQKLS8qCi0gIHNlbGVjdCgpIG9yIHJk Y2hrKCksIGV0YywgaGFzIHRvbGQgdXMgdGhhdCBzb21ldGhpbmcgaXMgd2FpdGluZywgYnV0IHdl Ci0gIGRvbid0IGtub3cgaG93IG11Y2guICBTbyB3ZSBkbyBhIHJlYWQgdG8gZ2V0IGl0IGFuZCB0 aGVuIHdlIGtub3cuICBOb3RlOgotICBUaGlzIHJlYWQgaXMgTk9UIG5vbmJsb2NraW5nIGlmIG5v dGhpbmcgaXMgdGhlcmUgKGJlY2F1c2Ugb2YgVk1JTj0xKSwgYnV0Ci0gIGl0IHNob3VsZCBiZSBz YWZlIGluIHRoaXMgY2FzZSBzaW5jZSB0aGUgT1MgdGVsbHMgdXMgYXQgbGVhc3Qgb25lIGJ5dGUg aXMKLSAgd2FpdGluZyB0byBiZSByZWFkLCBhbmQgTVlSRUFEIHJlYWRzIHJldHVybiBhcyBtdWNo IGFzIGlzIHRoZXJlIHdpdGhvdXQKLSAgd2FpdGluZyBmb3IgYW55IG1vcmUuICBDb250cm9sbGVk IHRlc3RzIG9uIFNvbGFyaXMgYW5kIFVuaXh3YXJlICh3aXRoCi0gIEZJT05SRUFEIGRlbGliZXJh dGVseSB1bmRlZmluZWQpIHNob3cgdGhpcyB0byBiZSB0cnVlLgotKi8KLQlkZWJ1ZyhGMTAxLCJp bl9jaGsgcmVhZCBteV9jb3VudCIsIiIsbXlfY291bnQpOwotCWRlYnVnKEYxMDEsImluX2NoayBy ZWFkIG4iLCIiLG4pOwotCWlmIChuID4gMCAmJiBteV9jb3VudCA9PSAwKSB7Ci0JICAgIC8qIFRo aXMgYWxzbyBjYXRjaGVzIGRpc2Nvbm5lY3RzIGV0YyAqLwotCSAgICAvKiBEbyB3aGF0IG15Z2V0 YnVmIGRvZXMgZXhjZXB0IGRvbid0IGdyYWIgYSBjaGFyYWN0ZXIgKi8KLQkgICAgbXlfY291bnQg PSBteWZpbGxidWYoKTsKLQkgICAgbXlfaXRlbSA9IC0xOwkJLyogXl5eICovCi0JICAgIGRlYnVn KEYxMDEsImluX2NoayBteWZpbGxidWYgbXlfY291bnQiLCIiLG15X2NvdW50KTsKLQkgICAgaWYg KG15X2NvdW50IDwgMCkKLQkgICAgICByZXR1cm4oLTEpOwotCSAgICBlbHNlCi0JICAgICAgbiA9 IDA7CQkJLyogTkI6IG4gaXMgcmVwbGFjZWQgYnkgbXlfY291bnQgKi8KLQl9Ci0jZW5kaWYgLyog RklPTlJFQUQgKi8KLS8qCi0gIEhlcmUgd2UgYWRkIHdoYXRldmVyIHdlIHRoaW5rIGlzIHVucmVh ZCB0byB3aGF0IGlzIHN0aWxsIGluIG91cgotICBvdXIgaW50ZXJuYWwgYnVmZmVyLiAgVGh1cyB0 aGUgaW1wb3J0YW5jZSBvZiBzZXR0aW5nIG4gdG8gMCBqdXN0IGFib3ZlLgotKi8KLQlkZWJ1ZyhG MTAxLCJpbl9jaGsgbXlfY291bnQiLCIiLG15X2NvdW50KTsKLQlkZWJ1ZyhGMTAxLCJpbl9jaGsg biIsIiIsbik7Ci0JaWYgKG15X2NvdW50ID4gMCkKLQkgIG4gKz0gbXlfY291bnQ7Ci0jZW5kaWYg LyogTVlSRUFEICovCi0gICAgfQotICAgIGRlYnVnKEYxMDEsImluX2NoayByZXN1bHQiLCIiLG4p OwotCi0gICAgLyogRXJyb3JzIGhlcmUgZG9uJ3QgcHJvdmUgdGhlIGNvbm5lY3Rpb24gaGFzIGRy b3BwZWQgc28ganVzdCBzYXkgMCAqLwotCi0gICAgcmV0dXJuKG4gPCAwID8gMCA6IG4pOwotfQot Ci0KLS8qICBUIFQgQyBIIEsgIC0tICBUZWxsIGhvdyBtYW55IGNoYXJhY3RlcnMgYXJlIHdhaXRp bmcgaW4gdHR5IGlucHV0IGJ1ZmZlciAgKi8KLQotaW50Ci10dGNoaygpIHsKLSAgICBpbnQgZmQ7 Ci0jaWZkZWYgTkVUQ01ECi0gICAgaWYgKHR0cGlwZSkKLSAgICAgIGZkID0gZmRpbjsKLSAgICBl bHNlCi0jZW5kaWYgLyogTkVUQ01EICovCi0gICAgICBmZCA9IHR0eWZkOwotICAgIHJldHVybihp bl9jaGsoMSxmZCkpOwotfQotCi0vKiAgVCBUIFggSSBOICAtLSAgR2V0IG4gY2hhcmFjdGVycyBm cm9tIHR0eSBpbnB1dCBidWZmZXIgICovCi0KLS8qICBSZXR1cm5zIG51bWJlciBvZiBjaGFyYWN0 ZXJzIGFjdHVhbGx5IGdvdHRlbiwgb3IgLTEgb24gZmFpbHVyZSAgKi8KLQotLyogIEludGVuZGVk IGZvciB1c2Ugb25seSB3aGVuIGl0IGlzIGtub3duIHRoYXQgbiBjaGFyYWN0ZXJzIGFyZSBhY3R1 YWxseSAqLwotLyogIEF2YWlsYWJsZSBpbiB0aGUgaW5wdXQgYnVmZmVyLiAgKi8KLQotaW50Ci10 dHhpbihuLGJ1ZikgaW50IG47IENIQVIgKmJ1ZjsgewotICAgIHJlZ2lzdGVyIGludCB4ID0gMCwg YyA9IC0yOwotI2lmZGVmIFRUTEVCVUYKLSAgICByZWdpc3RlciBpbnQgaSA9IDA7Ci0jZW5kaWYg LyogVFRMRUJVRiAqLwotICAgIGludCBmZDsKLQotICAgIGlmIChuIDwgMSkJCQkJLyogTm90aGlu ZyB0byBkbyAqLwotICAgICAgcmV0dXJuKDApOwotCi0jaWZkZWYgVFRMRUJVRgotICAgIGlmICh0 dHB1c2ggPj0gMCkgewotICAgICAgICBidWZbMF0gPSB0dHB1c2g7CQkvKiBQdXQgcHVzaGVkIGNo YXIgaW4gYnVmZmVyKi8KLSAgICAgICAgdHRwdXNoID0gLTE7CQkJLyogQ2xlYXIgdGhlIHB1c2gg YnVmZmVyICovCi0gICAgICAgIGlmICh0dGNoaygpID4gMCkKLQkgIHJldHVybih0dHhpbihuLTEs ICZidWZbMV0pICsgMSk7Ci0gICAgICAgIGVsc2UKLQkgIHJldHVybigxKTsKLSAgICB9Ci0gICAg aWYgKGxlX2RhdGEpIHsKLSAgICAgICAgd2hpbGUgKGxlX2luYnVmKCkgPiAwKSB7Ci0JICAgIGlm IChsZV9nZXRjaGFyKCZidWZbaV0pKSB7Ci0gICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAg ICAgICAgIG4tLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAodHRjaGso KSA+IDApCi0JICByZXR1cm4odHR4aW4obiwmYnVmW2ldKStpKTsKLSAgICAgICAgZWxzZQotCSAg cmV0dXJuKGkpOwotICAgIH0KLSNlbmRpZiAvKiBUVExFQlVGICovCi0KLSNpZmRlZiBORVRDTUQK LSAgICBpZiAodHRwaXBlKQotICAgICAgZmQgPSBmZGluOwotICAgIGVsc2UKLSNlbmRpZiAvKiBO RVRDTUQgKi8KLSAgICAgIGZkID0gdHR5ZmQ7Ci0KLSNpZmRlZiBTVU5YMjUKLSAgICBpZiAobmV0 Y29ubiAmJiAodHRuZXQgPT0gTkVUX1NYMjUpKQkvKiBYLjI1IGNvbm5lY3Rpb24gKi8KLSAgICAg IHJldHVybih4MjV4aW4obixidWYpKTsKLSNlbmRpZiAvKiBTVU5YMjUgKi8KLQotI2lmZGVmIElC TVgyNQotICAgIC8qIHJpZWhtOiBwb3NzaWJseSBub3QgbmVlZGVkLiBUZXN0IHdvcmtlZCB3aXRo IG5vcm1hbCByZWFkcyBhbmQgd3JpdGVzICovCi0gICAgaWYgKG5ldGNvbm4gJiYgKHR0bmV0ID09 IE5FVF9JWDI1KSkJeyAvKiBYLjI1IGNvbm5lY3Rpb24gKi8KLQl4ID0geDI1eGluKG4sYnVmKTsK LQlpZiAoeCA+IDApIGJ1Zlt4XSA9ICdcMCc7Ci0JcmV0dXJuKHgpOwotICAgIH0KLSNlbmRpZiAv KiBJQk1YMjUgKi8KLQotI2lmZGVmIE1ZUkVBRAotICAgIGRlYnVnKEYxMDEsInR0eGluIE1ZUkVB RCIsIiIsbik7Ci0gICAgd2hpbGUgKHggPCBuKSB7Ci0JYyA9IG15cmVhZCgpOwotCWlmIChjIDwg MCkgewotCSAgICBkZWJ1ZyhGMTAxLCJ0dHhpbiBteXJlYWQgcmV0dXJucyIsIiIsYyk7Ci0JICAg IGlmIChjID09IC0zKSB4ID0gLTE7Ci0JICAgIGJyZWFrOwotICAgICAgICB9Ci0JYnVmW3grK10g PSBjICYgdHRwbXNrOwotI2lmZGVmIFJMT0dDT0RFCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSAgICAg ICAgLyogSXQgaXMgaW1wb3NzaWJsZSB0byBrbm93IGhvdyBtYW55IGNoYXJhY3RlcnMgYXJlIHdh aXRpbmcgKi8KLSAgICAgICAgLyogdG8gYmUgcmVhZCB3aGVuIHlvdSBhcmUgdXNpbmcgRW5jcnlw dGVkIFJsb2dpbiBvciBTU0wgICAgKi8KLSAgICAgICAgLyogYXMgdGhlIHRyYW5zcG9ydCBzaW5j ZSB0aGUgbnVtYmVyIG9mIHJlYWwgZGF0YSBieXRlcyAgICAgKi8KLSAgICAgICAgLyogY2FuIGJl IGdyZWF0ZXIgb3IgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2YgYnl0ZXMgb24gdGhlICAgKi8KLSAg ICAgICAgLyogd2lyZSB3aGljaCBpcyB3aGF0IHR0Y2hrKCkgcmV0dXJucy4gICAgICAgICAgICAg ICAgICAgICAgKi8KLSAgICAgICAgaWYgKG5ldGNvbm4gJiYgKHR0bnByb3RvID09IE5QX0VLNExP R0lOIHx8IHR0bnByb3RvID09IE5QX0VLNUxPR0lOKSkKLQkgIGlmICh0dGNoaygpIDw9IDApCi0J ICAgIGJyZWFrOwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0jZW5kaWYgLyogUkxPR0NPREUg Ki8KLSNpZmRlZiBDS19TU0wKLSAgICAgICAgaWYgKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0 aXZlX2ZsYWcpCi0JICBpZiAodHRjaGsoKSA8PSAwKQotCSAgICBicmVhazsKLSNlbmRpZiAvKiBD S19TU0wgKi8KLSAgICB9Ci0jZWxzZQotICAgIGRlYnVnKEYxMDEsInR0eGluIFJFQUQiLCIiLG4p OwotICAgIHggPSByZWFkKGZkLGJ1ZixuKTsKLSAgICBmb3IgKGMgPSAwOyBjIDwgbjsgYysrKQkJ LyogU3RyaXAgYW55IHBhcml0eSAqLwotICAgICAgYnVmW2NdICY9IHR0cG1zazsKLSNlbmRpZiAv KiBNWVJFQUQgKi8KLQotICAgIGRlYnVnKEYxMDEsInR0eGluIHgiLCIiLHgpOwkJLyogRG9uZSAq LwotICAgIGlmICh4ID4gMCkgYnVmW3hdID0gJ1wwJzsKLSAgICBpZiAoeCA8IDApIHggPSAtMTsK LSAgICByZXR1cm4oeCk7Ci19Ci0KLS8qICBUIFQgTyBMICAtLSAgV3JpdGUgc3RyaW5nIHMsIGxl bmd0aCBuLCB0byBjb21tdW5pY2F0aW9uIGRldmljZS4gICovCi0vKgotICBSZXR1cm5zOgotICAg Pj0gMCBvbiBzdWNjZXNzLCBudW1iZXIgb2YgY2hhcmFjdGVycyBhY3R1YWxseSB3cml0dGVuLgot ICAgLTEgb24gZmFpbHVyZS4KLSovCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotQ0hBUiAqIHhwYWNr ZXQgPSBOVUxMOwotaW50IG54cGFja2V0ID0gMDsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICov Ci0KLSNkZWZpbmUgVFRPTE1BWFQgNQotaW50Ci10dG9sKHMsbikgaW50IG47IENIQVIgKnM7IHsK LSAgICBpbnQgeCwgbGVuLCB0cmllcywgZmQ7Ci0jaWZkZWYgQ0tYWENIQVIKLSAgICBleHRlcm4g aW50IGRibGZsYWc7CQkJLyogRm9yIFNFVCBTRU5EIERPVUJMRS1DSEFSQUNURVIgKi8KLSAgICBl eHRlcm4gc2hvcnQgZGJsdFtdOwotICAgIENIQVIgKnAgPSBOVUxMLCAqcDIsICpzMiwgYzsKLSAg ICBpbnQgbjIgPSAwOwotI2VuZGlmIC8qIENLWFhDSEFSICovCi0KLSAgICBpZiAodHR5ZmQgPCAw KQkJCS8qIE5vdCBvcGVuPyAqLwotICAgICAgcmV0dXJuKC0zKTsKLSNpZmRlZiBERUJVRwotICAg IGlmIChkZWJsb2cpIHsKLQkvKiBkZWJ1ZyhGMTAxLCJ0dG9sIHR0eWZkIiwiIix0dHlmZCk7ICov Ci0JY2toZXhkdW1wKCJ0dG9sIHMiLHMsbik7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0K LSNpZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaXBlKQotICAgICAgZmQgPSBmZG91dDsKLSAgICBl bHNlCi0jZW5kaWYgLyogTkVUQ01EICovCi0gICAgICBmZCA9IHR0eWZkOwotCi0jaWZkZWYgQ0tY WENIQVIKLS8qICBEb3VibGUgYW55IGNoYXJhY3RlcnMgdGhhdCBtdXN0IGJlIGRvdWJsZWQuICAq LwotICAgIGRlYnVnKEYxMDEsInR0b2wgZGJsZmxhZyIsIiIsZGJsZmxhZyk7Ci0gICAgaWYgKGRi bGZsYWcpIHsKLQlwID0gKENIQVIgKikgbWFsbG9jKG4gKyBuICsgMSk7Ci0JaWYgKHApIHsKLQkg ICAgczIgPSBzOwotCSAgICBwMiA9IHA7Ci0JICAgIG4yID0gMDsKLQkgICAgd2hpbGUgKCpzMikg ewotCQljID0gKnMyKys7Ci0JCSpwMisrID0gYzsKLQkJbjIrKzsKLQkJaWYgKGRibHRbKHVuc2ln bmVkKSBjXSAmIDIpIHsKLQkJICAgICpwMisrID0gYzsKLQkJICAgIG4yKys7Ci0JCX0KLQkgICAg fQotCSAgICBzID0gcDsKLQkgICAgbiA9IG4yOwotCSAgICBzW25dID0gJ1wwJzsKLQl9Ci0jaWZk ZWYgREVCVUcKLSAgICAgICAgY2toZXhkdW1wKCJ0dG9sIGRvdWJsZWQgcyIscyxuKTsKLSNlbmRp ZiAvKiBERUJVRyAqLwotICAgIH0KLSNlbmRpZiAvKiBDS1hYQ0hBUiAqLwotCi0gICAgdHJpZXMg PSBUVE9MTUFYVDsJCQkvKiBBbGxvdyB1cCB0byB0aGlzIG1hbnkgdHJpZXMgKi8KLSAgICBsZW4g PSBuOwkJCQkvKiBSZW1lbWJlciBvcmlnaW5hbCBsZW5ndGggKi8KLQotI2lmZGVmIENLX0VOQ1JZ UFRJT04KLS8qCi0gIFRoaXMgaXMgdG8gYXZvaWQgZW5jcnlwdGluZyBhIHBhY2tldCB0aGF0IGlz IGFscmVhZHkgZW5jcnlwdGVkLCBlLmcuCi0gIHdoZW4gd2UgcmVzZW5kIGEgcGFja2V0IGRpcmVj dGx5IG91dCBvZiB0aGUgcGFja2V0IGJ1ZmZlciwgYW5kIGFsc28gdG8KLSAgYXZvaWQgZW5jcnlw dGluZyBhIGNvbnN0YW50IChsaXRlcmFsKSBzdHJpbmcsIHdoaWNoIGNhbiBjYXVzZSBhIG1lbW9y eQotICBmYXVsdC4KLSovCi0gICAgaWYgKFRFTE9QVF9NRShURUxPUFRfRU5DUllQVElPTikpIHsK LQlpbnQgeDsKLQlpZiAobnhwYWNrZXQgPCBuKSB7Ci0JICAgIGlmICh4cGFja2V0KSB7Ci0JCWZy ZWUoeHBhY2tldCk7Ci0JCXhwYWNrZXQgPSBOVUxMOwotCQlueHBhY2tldCA9IDA7Ci0JICAgIH0K LQkgICAgeCA9IG4gPiAxMDI0MCA/IG4gOiAxMDI0MDsKLQkgICAgeHBhY2tldCA9IChDSEFSICop bWFsbG9jKHgpOwotCSAgICBpZiAoIXhwYWNrZXQpIHsKLQkJZnByaW50ZihzdGRlcnIsInR0b2wg bWFsbG9jIGZhaWx1cmVcbiIpOwotCQlyZXR1cm4oLTEpOwotCSAgICB9IGVsc2UKLQkgICAgICBu eHBhY2tldCA9IHg7Ci0JfQotCW1lbWNweSgoY2hhciAqKXhwYWNrZXQsKGNoYXIgKilzLG4pOwot CXMgPSB4cGFja2V0OwotCWNrX3RuX2VuY3J5cHQoKGNoYXIgKilzLG4pOwotICAgIH0KLSNlbmRp ZiAvKiBDS19FTkNSWVBUSU9OICovCi0KLSAgICB3aGlsZSAobiA+IDAgJiYKLQkgICAodHJpZXMt LSA+IDAKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0JICAgIC8qIGtlZXAgdHJ5aW5nIGlmIHdlIGFy ZSBlbmNyeXB0aW5nICovCi0JICAgIHx8IFRFTE9QVF9NRShURUxPUFRfRU5DUllQVElPTikKLSNl bmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAgICAgICAgICApKSB7CQkJLyogQmUgcGVyc2lz dGVudCAqLwotCWRlYnVnKEYxMDEsInR0b2wgdHJ5IiwiIixUVE9MTUFYVCAtIHRyaWVzKTsKLSNp ZmRlZiBCRU9TT1JCRUJPWAotICAgICAgICBpZiAobmV0Y29ubiAmJiAhdHRwaXBlICYmICF0dHB0 eSkKLQkgIHggPSBuZXR0b2woKGNoYXIgKilzLG4pOwkvKiBXcml0ZSBzdHJpbmcgdG8gZGV2aWNl ICovCi0gICAgICAgIGVsc2UKLSNlbmRpZiAvKiBCRU9TT1JCRUJPWCAqLwotI2lmZGVmIElCTVgy NQotCSAgaWYgKHR0bmV0ID09IE5FVF9JWDI1KQotCSAgICAvKgotCSAgICAgKiB0aGlzIGlzIGEg bW9yZSBjb250cm9sbGVkIHdheSBvZiB3cml0aW5nIHRvIFgyNQotCSAgICAgKiBTVFJFQU1TLCBo b3dldmVyIHdyaXRlIHNob3VsZCBhbHNvIHdvcmshCi0JICAgICAqLwotCSAgICB4ID0geDI1d3Jp dGUodHR5ZmQsIHMsIG4pOwotCSAgZWxzZQotI2VuZGlmIC8qIElCTVgyNSAqLwotI2lmZGVmIENL X1NTTAotCSAgICBpZiAoc3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykgewotCQlp bnQgZXJyb3I7Ci0JCS8qIFdyaXRlIHVzaW5nIFNTTCAqLwotICAgICAgICAgICAgICAgIHNzbF9y ZXRyeToKLQkJaWYgKHNzbF9hY3RpdmVfZmxhZykKLSAgICAgICAgICAgICAgICAgIHggPSBTU0xf d3JpdGUoc3NsX2Nvbiwgcywgbik7Ci0JCWVsc2UKLSAgICAgICAgICAgICAgICAgIHggPSBTU0xf d3JpdGUodGxzX2Nvbiwgcywgbik7Ci0JCXN3aXRjaCAoU1NMX2dldF9lcnJvcihzc2xfYWN0aXZl X2ZsYWc/c3NsX2Nvbjp0bHNfY29uLHgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBTU0xfRVJS T1JfTk9ORToKLSAgICAgICAgICAgICAgICAgICAgaWYgKHggPT0gbikKLQkJICAgICAgcmV0dXJu KGxlbik7Ci0gICAgICAgICAgICAgICAgICAgIHMgKz0geDsKLSAgICAgICAgICAgICAgICAgICAg biAtPSB4OwotICAgICAgICAgICAgICAgICAgICBnb3RvIHNzbF9yZXRyeTsKLQkJICBjYXNlIFNT TF9FUlJPUl9XQU5UX1dSSVRFOgotCQkgIGNhc2UgU1NMX0VSUk9SX1dBTlRfUkVBRDoKLQkJICAg IHggPSAwOwotCQkgICAgYnJlYWs7Ci0JCSAgY2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoKLSAgICAg ICAgICAgICAgICAgICAgaWYgKHggIT0gMCkKLQkJICAgICAgcmV0dXJuKC0xKTsKLQkJICBjYXNl IFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQOgotCQkgIGNhc2UgU1NMX0VSUk9SX1NTTDoKLQkJ ICBjYXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVSTjoKLQkJICBkZWZhdWx0OgotCQkgICAgdHRjbG9z KDApOwotCQkgICAgcmV0dXJuKC0zKTsKLQkJfQotCSAgICB9IGVsc2UKLSNlbmRpZiAvKiBDS19T U0wgKi8KLSNpZmRlZiBDS19LRVJCRVJPUwotI2lmZGVmIEtSQjQKLSNpZmRlZiBSTE9HQ09ERQot CSAgICBpZiAodHRucHJvdG8gPT0gTlBfRUs0TE9HSU4pIHsKLQkJcmV0dXJuKGtyYjRfZGVzX3dy aXRlKHR0eWZkLHMsbikpOwotCSAgICB9IGVsc2UKLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotI2Vu ZGlmIC8qIEtSQjQgKi8KLSNpZmRlZiBLUkI1Ci0jaWZkZWYgUkxPR0NPREUKLSAgICAgICAgICAg IGlmICh0dG5wcm90byA9PSBOUF9FSzVMT0dJTikgewotICAgICAgICAgICAgICAgIHJldHVybihr cmI1X2Rlc193cml0ZSh0dHlmZCwoY2hhciAqKXMsbiwwKSk7Ci0gICAgICAgICAgICB9IGVsc2UK LSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotI2lmZGVmIEtSQjVfVTJVCi0gICAgICAgICAgICBpZiAo dHRucHJvdG8gPT0gTlBfSzVVMlUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4oa3JiNV91MnVf d3JpdGUodHR5ZmQsKGNoYXIgKilzLG4pKTsKLSAgICAgICAgICAgIH0gZWxzZQotI2VuZGlmIC8q IEtSQjVfVTJVICovCi0jZW5kaWYgLyogS1JCNSAqLwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICov Ci0JICAgICAgeCA9IHdyaXRlKGZkLHMsbik7CS8qIFdyaXRlIHN0cmluZyB0byBkZXZpY2UgKi8K LQotCWlmICh4ID09IG4pIHsJCQkvKiBXb3JrZWQ/ICovCi0JICAgIGRlYnVnKEYxMDEsInR0b2wg b2siLCIiLHgpOwkvKiBPSyAqLwotI2lmZGVmIENLWFhDSEFSCi0JICAgIGlmIChwKSBmcmVlKHAp OwotI2VuZGlmIC8qIENLWFhDSEFSICovCi0JICAgIHJldHVybihsZW4pOwkJLyogRG9uZSAqLwot CX0gZWxzZSBpZiAoeCA8IDApIHsJCS8qIE5vLCBnb3QgZXJyb3I/ICovCi0JICAgIGRlYnVnKEYx MDEsInR0b2wgd3JpdGUgZXJyb3IiLCIiLGVycm5vKTsKLSNpZmRlZiBFV09VTERCTE9DSwotCSAg ICBpZiAoZXJybm8gPT0gRVdPVUxEQkxPQ0spIHsKLQkJbXNsZWVwKDEwKTsKLQkJY29udGludWU7 Ci0JICAgIH0gZWxzZQotI2VuZGlmIC8qIEVXT1VMREJMT0NLICovCi0jaWZkZWYgVENQU09DS0VU Ci0JICAgIGlmIChuZXRjb25uICYmIHR0bmV0ID09IE5FVF9UQ1BCKSB7Ci0JCWRlYnVnKEYxMDEs InR0b2wgVENQIGVycm9yIiwiIixlcnJubyk7Ci0JCXR0Y2xvcygwKTsJCS8qIENsb3NlIHRoZSBj b25uZWN0aW9uLiAqLwotCQl4ID0gLTM7Ci0JICAgIH0KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8K LSNpZmRlZiBDS1hYQ0hBUgotCSAgICBpZiAocCkgZnJlZShwKTsKLSNlbmRpZiAvKiBDS1hYQ0hB UiAqLwotCSAgICByZXR1cm4oeCk7Ci0JfSBlbHNlIHsJCQkvKiBObyBlcnJvciwgc28gcGFydGlh bCBzdWNjZXNzICovCi0JICAgIGRlYnVnKEYxMDEsInR0b2wgcGFydGlhbCIsIiIseCk7IC8qIFRo aXMgbmV2ZXIgaGFwcGVucyAqLwotCSAgICBzICs9IHg7CQkJLyogUG9pbnQgdG8gcGFydCBub3Qg d3JpdHRlbiB5ZXQgKi8KLQkgICAgbiAtPSB4OwkJCS8qIEFkanVzdCBsZW5ndGggKi8KLQkgICAg aWYgKHggPiAwKSBtc2xlZXAoMTApOwkvKiBXYWl0IDEwIG1zZWMgKi8KLQl9CQkJCS8qIEdvIGJh Y2sgYW5kIHRyeSBhZ2FpbiAqLwotICAgIH0KLSNpZmRlZiBDS1hYQ0hBUgotICAgIGlmIChwKSBm cmVlKHApOwotI2VuZGlmIC8qIENLWFhDSEFSICovCi0gICAgcmV0dXJuKG4gPCAxID8gbGVuIDog LTEpOwkJLyogUmV0dXJuIHRoZSByZXN1bHRzICovCi19Ci0KLS8qICBUIFQgTyBDICAtLSAgT3V0 cHV0IGEgY2hhcmFjdGVyIHRvIHRoZSBjb21tdW5pY2F0aW9uIGxpbmUgICovCi0KLS8qCi0gVGhp cyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSB1c2VkIGZvciBpbnRlcmFjdGl2ZSwgY2hhcmFjdGVy LW1vZGUgb3BlcmF0aW9ucywKLSBsaWtlIHRlcm1pbmFsIGNvbm5lY3Rpb24sIHNjcmlwdCBleGVj dXRpb24sIGRpYWxlciBpL28sIHdoZXJlIHRoZSBvdmVyaGVhZAotIG9mIHRoZSBzaWduYWxzIGFu ZCBhbGFybXMgZG9lcyBub3QgY3JlYXRlIGEgYm90dGxlbmVjay4KLSovCi1pbnQKLSNpZmRlZiBD S19BTlNJQwotdHRvYyhjaGFyIGMpCi0jZWxzZQotdHRvYyhjKSBjaGFyIGM7Ci0jZW5kaWYgLyog Q0tfQU5TSUMgKi8KLS8qIHR0b2MgKi8gewotI2RlZmluZSBUVE9DX1RNTyAxNQkJCS8qIFRpbWVv dXQgaW4gY2FzZSB3ZSBnZXQgc3R1Y2sgKi8KLSAgICBpbnQgeHgsIGZkOwotCi0gICAgaWYgKHR0 eWZkIDwgMCkJCQkvKiBDaGVjayBmb3Igbm90IG9wZW4uICovCi0gICAgICByZXR1cm4oLTEpOwot Ci0jaWZkZWYgTkVUQ01ECi0gICAgaWYgKHR0cGlwZSkKLSAgICAgIGZkID0gZmRvdXQ7Ci0gICAg ZWxzZQotI2VuZGlmIC8qIE5FVENNRCAqLwotICAgICAgZmQgPSB0dHlmZDsKLQotICAgIGMgJj0g MHhmZjsKLSAgICAvKiBkZWJ1ZyhGMTAxLCJ0dG9jIiwiIiwoQ0hBUikgYyk7ICovCi0gICAgc2F2 YWwgPSBzaWduYWwoU0lHQUxSTSx0aW1lcmgpOwkvKiBFbmFibGUgdGltZXIgaW50ZXJydXB0ICov Ci0gICAgeHggPSBhbGFybShUVE9DX1RNTyk7CQkvKiBmb3IgdGhpcyBtYW55IHNlY29uZHMuICov Ci0gICAgaWYgKHh4IDwgMCkgeHggPSAwOwkJCS8qIFNhdmUgb2xkIGFsYXJtIHZhbHVlLiAqLwot ICAgIC8qIGRlYnVnKEYxMDEsInR0b2MgYWxhcm0iLCIiLHh4KTsgKi8KLSAgICBpZiAoCi0jaWZk ZWYgQ0tfUE9TSVhfU0lHCi0Jc2lnc2V0am1wKHNqYnVmLDEpCi0jZWxzZQotCXNldGptcChzamJ1 ZikKLSNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KLQkpIHsJCS8qIFRpbWVyIHdlbnQgb2ZmPyAq LwotCXR0aW1vZmYoKTsJCQkvKiBZZXMsIGNhbmNlbCB0aGlzIGFsYXJtLiAqLwotCWlmICh4eCAt IFRUT0NfVE1PID4gMCkgYWxhcm0oeHggLSBUVE9DX1RNTyk7IC8qIFJlc3RvcmUgcHJldmlvdXMg b25lICovCi0gICAgICAgIC8qIGRlYnVnKEYxMDAsInR0b2MgdGltZW91dCIsIiIsMCk7ICovCi0j aWZkZWYgTkVUQ09OTgotCWlmICghbmV0Y29ubikgewotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQkg ICAgZGVidWcoRjEwMSwidHRvYyB0aW1lb3V0IiwiIixjKTsKLQkgICAgaWYgKHR0ZmxvdyA9PSBG TE9fWE9OWCkgewotCQlkZWJ1ZyhGMTAxLCJ0dG9jIGZsb3ciLCIiLHR0Zmxvdyk7IC8qIE1heWJl IHdlJ3JlIHhvZmYnZCAqLwotI2lmbmRlZiBQbGFuOQotI2lmZGVmIFBPU0lYCi0JCS8qIFBPU0lY IHdheSB0byB1bnN0aWNrLiAqLwotCQlkZWJ1ZyhGMTAwLCJ0dG9jIHRjZmxvdyIsIiIsdGNmbG93 KHR0eWZkLFRDT09OKSk7Ci0jZWxzZQotI2lmZGVmIEJTRDQJCQkJLyogQmVya2VsZXkgd2F5IHRv IGRvIGl0LiAqLwotI2lmZGVmIFRJT0NTVEFSVAotLyogLi4uLiBVc2VkIHRvIGJlICJpb2N0bCh0 dHlmZCwgVElPQ1NUQVJULCAwKTsiLiAgV2hvIGtub3dzPyAqLwotCQl7Ci0JCSAgaW50IHggPSAw OwotCQkgIGRlYnVnKEYxMDEsInR0b2MgVElPQ1NUQVJUIiwiIixpb2N0bCh0dHlmZCwgVElPQ1NU QVJULCAmeCkpOwotCQl9Ci0jZW5kaWYgLyogVElPQ1NUQVJUICovCi0jZW5kaWYgLyogQlNENCAq LwotCQkJCQkvKiBJcyB0aGVyZSBhIFN5cyBWIHdheSB0byBkbyB0aGlzPyAqLwotI2VuZGlmIC8q IFBPU0lYICovCi0jZW5kaWYgLyogUGxhbjkgKi8KLQkgICAgfQotI2lmZGVmIE5FVENPTk4KLSAg ICAgICAgfQotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQlyZXR1cm4oLTEpOwkJCS8qIFJldHVybiBm YWlsdXJlIGNvZGUuICovCi0gICAgfSBlbHNlIHsKLSAgICAgICAgaW50IHJjOwotI2lmZGVmIEJF T1NPUkJFQk9YCi0jaWZkZWYgTkVUQ09OTgotICAgICAgICBpZiAobmV0Y29ubiAmJiAhdHRwaXBl ICYmICF0dHB0eSkKLQkgIHJjID0gbmV0dG9jKGMpOwotICAgICAgICBlbHNlCi0jZW5kaWYgLyog IEJFT1NPUkJFQk9YICovCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotI2lmZGVmIENLX0VOQ1JZUFRJ T04KLQkgIGlmIChURUxPUFRfTUUoVEVMT1BUX0VOQ1JZUFRJT04pKQotCSAgICBja190bl9lbmNy eXB0KCZjLDEpOwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNpZmRlZiBJQk1YMjUKLQkv KiByaWVobTogbWF5YmUgdGhpcyBpc24ndCBuZWNlc3NhcnkgYWZ0ZXIgYWxsLiBUZXN0IHByb2dy YW0KLQkgKiB3b3JrZWQgZmluZSB3aXRoIGRhdGEgYmVpbmcgc2VudCBhbmQgcmV0cmlldmVkIHdp dGggbm9ybWFsCi0JICogcmVhZCdzIGFuZCB3cml0ZXMhCi0JICovCi0JaWYgKHR0bmV0ID09IE5F VF9JWDI1KQotCSAgcmMgPSB4MjV3cml0ZSh0dHlmZCwmYywxKTsgLyogYXMgYWJvdmUgZm9yIFgy NSBzdHJlYW1zICovCi0JZWxzZQotI2VuZGlmIC8qIElCTVgyNSAqLwotI2lmZGVmIENLX1NTTAot CSAgaWYgKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpIHsKLQkgICAgICBpbnQg ZXJyb3I7Ci0JICAgICAgLyogV3JpdGUgdXNpbmcgU1NMICovCi0JICAgICAgaWYgKHNzbF9hY3Rp dmVfZmxhZykKLSAgICAgICAgICAgICAgICByYyA9IFNTTF93cml0ZShzc2xfY29uLCAmYywgMSk7 Ci0JICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJjID0gU1NMX3dyaXRlKHRsc19jb24sICZj LCAxKTsKLQkgICAgICBzd2l0Y2ggKFNTTF9nZXRfZXJyb3Ioc3NsX2FjdGl2ZV9mbGFnP3NzbF9j b246dGxzX2NvbixyYykpewotCQljYXNlIFNTTF9FUlJPUl9OT05FOgotCQkgIGJyZWFrOwotCQlj YXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRFOgotCQljYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6Ci0J CSAgcmMgPSAwOwotCQkgIGJyZWFrOwotCQljYXNlIFNTTF9FUlJPUl9TWVNDQUxMOgotCQkgIGlm IChyYyAhPSAwKQotCQkgICAgcmV0dXJuKC0xKTsKLQkJY2FzZSBTU0xfRVJST1JfV0FOVF9YNTA5 X0xPT0tVUDoKLQkJY2FzZSBTU0xfRVJST1JfU1NMOgotCQljYXNlIFNTTF9FUlJPUl9aRVJPX1JF VFVSTjoKLQkJZGVmYXVsdDoKLQkJICB0dGNsb3MoMCk7Ci0JCSAgcmV0dXJuKC0xKTsKLQkgICAg ICB9Ci0JICB9IGVsc2UKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNpZmRlZiBDS19LRVJCRVJPUwot I2lmZGVmIEtSQjQKLSNpZmRlZiBSTE9HQ09ERQotCSAgaWYgKHR0bnByb3RvID09IE5QX0VLNExP R0lOKSB7Ci0JICAgICAgcmMgPSAoa3JiNF9kZXNfd3JpdGUodHR5ZmQsKGNoYXIgKikmYywxKSA9 PSAxKTsKLQkgIH0gZWxzZQotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0jZW5kaWYgLyogS1JCNCAq LwotI2lmZGVmIEtSQjUKLSNpZmRlZiBSTE9HQ09ERQotICAgICAgICAgIGlmICh0dG5wcm90byA9 PSBOUF9FSzVMT0dJTikgewotICAgICAgICAgICAgICByYyA9IChrcmI1X2Rlc193cml0ZSh0dHlm ZCwmYywxLDApID09IDEpOwotICAgICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIFJMT0dDT0RFICov Ci0jaWZkZWYgS1JCNV9VMlUKLSAgICAgICAgICBpZiAodHRucHJvdG8gPT0gTlBfSzVVMlUpIHsK LSAgICAgICAgICAgICAgcmMgPSAoa3JiNV91MnVfd3JpdGUodHR5ZmQsJmMsMSkgPT0gMSk7Ci0g ICAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyogS1JCNV9VMlUgKi8KLSNlbmRpZiAvKiBLUkI1ICov Ci0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLQkgICAgcmMgPSB3cml0ZShmZCwmYywxKTsJLyog VHJ5IHRvIHdyaXRlIHRoZSBjaGFyYWN0ZXIuICovCi0JaWYgKHJjIDwgMSkgewkJCS8qIEZhaWxl ZCAqLwotCSAgICB0dGltb2ZmKCk7CQkJLyogVHVybiBvZmYgdGhlIGFsYXJtLiAqLwotCSAgICBh bGFybSh4eCk7CQkJLyogUmVzdG9yZSBwcmV2aW91cyBhbGFybS4gKi8KLQkgICAgZGVidWcoRjEw MSwidHRvYyBlcnJubyIsIiIsZXJybm8pOyAvKiBMb2cgdGhlIGVycm9yLCAqLwotCSAgICByZXR1 cm4oLTEpOwkJCS8qIGFuZCByZXR1cm4gdGhlIGVycm9yIGNvZGUuICovCi0JfQotICAgIH0KLSAg ICB0dGltb2ZmKCk7CQkJCS8qIFN1Y2Nlc3MsIHR1cm4gb2ZmIHRoZSBhbGFybS4gKi8KLSAgICBh bGFybSh4eCk7CQkJCS8qIFJlc3RvcmUgcHJldmlvdXMgYWxhcm0uICovCi0gICAgcmV0dXJuKDAp OwkJCQkvKiBSZXR1cm4gZ29vZCBjb2RlLiAqLwotfQotCi0vKiAgVCBUIEkgTiBMICAtLSAgUmVh ZCBhIHJlY29yZCAodXAgdG8gYnJlYWsgY2hhcmFjdGVyKSBmcm9tIGNvbW0gbGluZS4gICovCi0v KgotICBSZWFkcyB1cCB0byAibWF4IiBjaGFyYWN0ZXJzIGZyb20gdGhlIGNvbm5lY3Rpb24sIHRl cm1pbmF0aW5nIG9uOgotICAgIChhKSB0aGUgcGFja2V0IGxlbmd0aCBmaWVsZCBpZiB0aGUgInR1 cm4iIGFyZ3VtZW50IGlzIHplcm8sIG9yCi0gICAgKGIpIG9uIHRoZSBwYWNrZXQtZW5kIGNoYXJh Y3RlciAoZW9sKSBpZiB0aGUgInR1cm4iIGFyZ3VtZW50IGlzIG5vbnplcm8KLSAgICAoYykgYSBj ZXJ0YWluIG51bWJlciBvZiBDdHJsLUMncyBpbiBhIHJvdwotCi0gIFJldHVybnM6Ci0gICAgPj0g MCwgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgdXBvbiBzdWNjZXNzOwotICAgIC0xIGlm ICJtYXgiIGV4Y2VlZGVkLCB0aW1lb3V0LCBvciBvdGhlciBjb3JyZWN0YWJsZSBlcnJvcjsKLSAg ICAtMiBvbiB1c2VyIGludGVycnVwdGlvbiAoYyk7Ci0gICAgLTMgb24gZmF0YWwgZXJyb3IgbGlr ZSBjb25uZWN0aW9uIGxvc3QuCi0KLSAgVGhlIG5hbWUgb2YgdGhpcyByb3V0aW5lIGRhdGVzIGZy b20gdGhlIGVhcmx5IGRheXMgd2hlbiBLZXJtaXQgcGFja2V0cwotICB3ZXJlLCBpbmRlZWQsIGFs d2F5cyBsaW5lcyBvZiB0ZXh0LiAgVGhhdCB3YXMgYmVmb3JlIGNvbnRyb2wtY2hhcmFjdGVyCi0g IHVucHJlZml4aW5nIGFuZCBsZW5ndGgtZHJpdmVuIHBhY2tldCBmcmFtaW5nIHdlcmUgaW50cm9k dWNlZCwgd2hpY2ggdGhpcwotICB2ZXJzaW9uIGhhbmRsZS4gIE5COiB0aGlzIHJvdXRpbmUgaXMg T05MWSBmb3IgcmVhZGluZyBpbmNvbWluZyBLZXJtaXQKLSAgcGFja2V0cywgbm90aGluZyBlbHNl LiAgVG8gcmVhZCBvdGhlciBraW5kcyBvZiBpbmNvbWluZyBtYXRlcmlhbCwgdXNlCi0gIHR0aW5j KCkgb3IgdHR4aW4oKS4KLQotICBUaGUgYnl0ZXMgdGhhdCB3ZXJlIGlucHV0IGFyZSBjb3BpZWQg aW50byAiZGVzdCIgd2l0aCB0aGVpciBwYXJpdHkgYml0cwotICBzdHJpcHBlZCBpZiBwYXJpdHkg d2FzIHNlbGVjdGVkLiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuCi0gIEJ5dGVz IGFmdGVyIHRoZSBlb2wgYXJlIGF2YWlsYWJsZSB1cG9uIHRoZSBuZXh0IGNhbGwgdG8gdGhpcyBm dW5jdGlvbi4KLQotICBUaGUgaWRlYSBpcyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIHN5c3Rl bSBjYWxscyBwZXIgcGFja2V0LCBhbmQgYWxzbyB0bwotICBtaW5pbWl6ZSB0aW1lb3V0cy4gIFRo aXMgZnVuY3Rpb24gaXMgdGhlIGlubmVyIGxvb3Agb2YgdGhlIHByb3RvY29sIGFuZCBtdXN0Ci0g IGJlIGFzIGVmZmljaWVudCBhcyBwb3NzaWJsZS4gIFRoZSBjdXJyZW50IHN0cmF0ZWd5IGlzIHRv IHVzZSBteXJlYWQoKSwgYQotICBtYWNybyB0byBtYW5hZ2UgYnVmZmVyZWQgKGFuZCBnZW5lcmFs bHkgbm9uYmxvY2tpbmcpIHJlYWRzLgotCi0gIFdBUk5JTkc6IFRoaXMgZnVuY3Rpb24gY2FsbHMg cGFyY2hrKCksIHdoaWNoIGlzIGRlZmluZWQgaW4gYW5vdGhlciBtb2R1bGUuCi0gIE5vcm1hbGx5 LCBja3V0aW8uYyBkb2VzIG5vdCBkZXBlbmQgb24gY29kZSBmcm9tIGFueSBvdGhlciBtb2R1bGUs IGJ1dCB0aGVyZQotICBpcyBhbiBleGNlcHRpb24gaW4gdGhpcyBjYXNlIGJlY2F1c2UgYWxsIHRo ZSBvdGhlciBjaz90aW8uYyBtb2R1bGVzIGFsc28KLSAgbmVlZCB0byBjYWxsIHBhcmNoaygpLCBz byBpdCdzIGJldHRlciB0byBoYXZlIGl0IGRlZmluZWQgaW4gYSBjb21tb24gcGxhY2UuCi0qLwot I2lmZGVmIENUUkxDCi0jdW5kZWYgQ1RSTEMKLSNlbmRpZiAvKiBDVFJMQyAqLwotI2RlZmluZSBD VFJMQyAnXDAzJwotLyoKLSAgV2UgaGF2ZSBmb3VyIGRpZmZlcmVudCBkZWNsYXJhdGlvbnMgaGVy ZSBiZWNhdXNlOgotICAoYSkgdG8gYWxsb3cgS2VybWl0IHRvIGJlIGJ1aWx0IHdpdGhvdXQgdGhl IGF1dG9tYXRpYyBwYXJpdHkgc2Vuc2luZyBmZWF0dXJlCi0gIChiKSBvbmUgb2YgZWFjaCB0eXBl IGZvciBBTlNJIEMsIG9uZSBmb3Igbm9uLUFOU0kuCi0qLwotI2lmbmRlZiBOT1hGRVIKLQotc3Rh dGljIGludCBwdXNoZWRiYWNrID0gMDsKLQotaW50Ci0jaWZkZWYgUEFSU0VOU0UKLSNpZmRlZiBD S19BTlNJQwotdHRpbmwoQ0hBUiAqZGVzdCwgaW50IG1heCxpbnQgdGltbywgQ0hBUiBlb2wsIENI QVIgc3RhcnQsIGludCB0dXJuKQotI2Vsc2UKLXR0aW5sKGRlc3QsbWF4LHRpbW8sZW9sLHN0YXJ0 LHR1cm4pIGludCBtYXgsdGltbyx0dXJuOyBDSEFSICpkZXN0LCBlb2wsIHN0YXJ0OwotI2VuZGlm IC8qIENLX0FOU0lDICovCi0jZWxzZSAvKiBub3QgUEFSU0VOU0UgKi8KLSNpZmRlZiBDS19BTlNJ QwotdHRpbmwoQ0hBUiAqZGVzdCwgaW50IG1heCxpbnQgdGltbywgQ0hBUiBlb2wpCi0jZWxzZQot dHRpbmwoZGVzdCxtYXgsdGltbyxlb2wpIGludCBtYXgsdGltbzsgQ0hBUiAqZGVzdCwgZW9sOwot I2VuZGlmIC8qIENLX0FOU0lDICovCi0jZW5kaWYgLyogUEFSU0VOU0UgKi8KLS8qIHR0aW5sICov IHsKLQotI2lmbmRlZiBNWVJFQUQKLSAgICBDSEFSIGNoLCBkdW07Ci0jZW5kaWYgLyogTVlSRUFE ICovCi0jaWZkZWYgUEFSU0VOU0UKLSAgICBpbnQgcGt0bGVuID0gLTE7Ci0gICAgaW50IGxwbGVu ID0gMDsKLSAgICBpbnQgaGF2ZWxlbiA9IDA7Ci0jZW5kaWYgLyogUEFSU0VOU0UgKi8KLSAgICBp bnQgZmQ7Ci0gICAgaW50IHNvcG1hc2sgPSAweGZmOwkJCS8qIFN0YXJ0LU9mLVBhY2tldCBtYXNr ICovCi0jaWZkZWYgQ0tYWENIQVIKLSAgICBleHRlcm4gc2hvcnQgZGJsdFtdOwkJLyogSWdub3Jl LWNoYXJhY3RlciB0YWJsZSAqLwotICAgIGV4dGVybiBpbnQgaWduZmxhZzsKLSNlbmRpZiAvKiBD S1hYQ0hBUiAqLwotI2lmZGVmIFRDUFNPQ0tFVAotICAgIGV4dGVybiBDSEFSIHN0Y2hyOwotI2Vu ZGlmIC8qIFRDUFNPQ0tFVCAqLwotICAgIGludCB4OwotI2lmZGVmIFNUUkVBTUlORwotICAgIGV4 dGVybiBpbnQgc3RyZWFtaW5nOwotICAgIGV4dGVybiBpbnQgc25kdHlwOwotI2VuZGlmIC8qIFNU UkVBTUlORyAqLwotCi0gICAgaWYgKHR0eWZkIDwgMCkgcmV0dXJuKC0zKTsgICAgICAgICAgLyog Tm90IG9wZW4uICovCi0vKgotICBJbiBGZWJydWFyeSAyMDA3IEkgZml4ZWQgdHRpbmwoKSB0byB3 b3JrIGJldHRlciB1bmRlciB0aGUgdHJ1bHkgYXdmdWwKLSAgY29uZGl0aW9ucyBlbmNvdW50ZXJl ZCBieSB0aGUgQU0tQVBFWCBvY2Vhbm9ncmFwaGljIGZsb2F0cyB0aGF0IGdhdGhlcgotICBodXJy aWNhbmUgZGF0YSBhbmQgcGhvbmUgaG9tZSB1c2luZyBJcmlkaXVtIHNhdGVsbGl0ZSBtb2RlbXMs IHdoaWNoIHVuZGVyCi0gIGNlcnRhaW4gY29uZGl0aW9ucywgY2FuIHNlbmQgdHdvIHBhY2tldHMg YmFjayB0byBiYWNrIGFmdGVyIGEgbG9uZyBwYXVzZS4KLSAgSW4gdGhpcyBjYXNlIHRoZSBzZWNv bmQgcGFja2V0IHdvdWxkIGJlIGlnbm9yZWQgYmVjYXVzZSB0aGUgU09IIHdhcyBza2lwcGVkCi0g IGR1ZSB0byB0aGUgdHRmbHVpKCkgY2FsbC4gIEJ1dCB0aGUgcmV3b3JrZWQgbG9va2FoZWFkL3B1 c2hiYWNrIGxvZ2ljIGJyb2tlCi0gIEtlcm1pdCB0cmFuc2ZlcnMgb24gZW5jcnlwdGVkIGNvbm5l Y3Rpb25zLiAgVGhpcyB3YXMgZml4ZWQgMTItMTMgQXVndXN0Ci0gIDIwMDcuICBBbGwgb2YgdGhp cyBoYXBwZW5lZCBhZnRlciA4LjAuMjEyIERldi4yNyB3YXMgcmVsZWFzZWQgYW5kIGJlZm9yZQot ICBEZXYuMjgsIHNvIG5vIGhhcm0gZG9uZSBvdGhlciB0aGFuIHRoZSBkZWxheS4KLSovCi0gICAg ZGVidWcoRjEwMSwidHRpbmwgbWF4IiwiIixtYXgpOwotICAgIGRlYnVnKEYxMDEsInR0aW5sIHRp bW8iLCIiLHRpbW8pOwotCi0jaWZkZWYgTkVUQ01ECi0gICAgaWYgKHR0cGlwZSkKLSAgICAgIGZk ID0gZmRpbjsKLSAgICBlbHNlCi0jZW5kaWYgLyogTkVUQ01EICovCi0gICAgICBmZCA9IHR0eWZk OwotCi0jaWZkZWYgQ09NTUVOVAotICAgIGlmICh4bG9jYWwgJiYgY29uY2hrKCkgPiAwKQkJLyog QWxsb3cgZm9yIGNvbnNvbGUgaW50ZXJydXB0aW9ucyAqLwotICAgICAgcmV0dXJuKC0xKTsKLSNl bmRpZiAvKiBDT01NRU5UICovCi0KLSAgICAqZGVzdCA9ICdcMCc7ICAgICAgICAgICAgICAgICAg ICAgICAvKiBDbGVhciBkZXN0aW5hdGlvbiBidWZmZXIgKi8KLSAgICBpZiAodGltbyA8IDApIHRp bW8gPSAwOwkJLyogU2FmZXR5ICovCi0gICAgaWYgKHRpbW8pIHsJCQkJLyogRG9uJ3QgdGltZSBv dXQgaWYgdGltbyA9PSAwICovCi0JaW50IHh4OwotCXNhdmFsID0gc2lnbmFsKFNJR0FMUk0sdGlt ZXJoKTsJLyogRW5hYmxlIHRpbWVyIGludGVycnVwdCAqLwotCXh4ID0gYWxhcm0odGltbyk7CQkv KiBTZXQgaXQuICovCi0JZGVidWcoRjEwMSwidHRpbmwgYWxhcm0iLCIiLHh4KTsKLSAgICB9Ci0g ICAgaWYgKAotI2lmZGVmIENLX1BPU0lYX1NJRwotCXNpZ3NldGptcChzamJ1ZiwxKQotI2Vsc2UK LQlzZXRqbXAoc2pidWYpCi0jZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCi0JKSB7CQkJCS8qIFRp bWVyIHdlbnQgb2ZmPyAqLwotCWRlYnVnKEYxMDAsInR0aW5sIHRpbW91dCIsIiIsMCk7IC8qIEdl dCBoZXJlIG9uIHRpbWVvdXQuICovCi0JLyogZGVidWcoRjExMCwiIHdpdGgiLChjaGFyICopIGRl c3QsMCk7ICovCi0JdHRpbW9mZigpOwkJCS8qIFR1cm4gb2ZmIHRpbWVyICovCi0JcmV0dXJuKC0x KTsJCQkvKiBhbmQgcmV0dXJuIGVycm9yIGNvZGUuICovCi0gICAgfSBlbHNlIHsKLQlyZWdpc3Rl ciBpbnQgaSwgbiA9IC0xOwkJLyogbG9jYWwgdmFyaWFibGVzICovCi0JaW50IGNjbiA9IDA7Ci0j aWZkZWYgUEFSU0VOU0UKLQlyZWdpc3RlciBpbnQgZmxhZyA9IDA7Ci0JZGVidWcoRjAwMCwidHRp bmwgc3RhcnQiLCIiLHN0YXJ0KTsKLSNlbmRpZiAvKiBQQVJTRU5TRSAqLwotCi0JdHRwbXNrID0g dHRwcnR5ID8gMDE3NyA6IDAzNzc7CS8qIFNldCBwYXJpdHkgc3RyaXBwaW5nIG1hc2suICovCi0J c29wbWFzayA9IG5lZWRwY2hrID8gMDE3NyA6IHR0cG1zazsgLyogQW5kIFNPUCBtYXRjaGluZyBt YXNrLiAqLwotCi0vKiBOb3cgcmVhZCBpbnRvIGRlc3RpbmF0aW9uLCBzdHJpcHBpbmcgcGFyaXR5 IGFuZCBsb29raW5nIGZvciB0aGUgKi8KLS8qIHRoZSBwYWNrZXQgdGVybWluYXRvciwgYW5kIGFs c28gZm9yIHNldmVyYWwgQ3RybC1DJ3MgdHlwZWQgaW4gYSByb3cuICovCi0KLQlpID0gMDsJCQkJ LyogRGVzdGluYXRpb24gaW5kZXggKi8KLQlkZWJ1ZyhGMTAxLCJ0dGlubCBlb2wiLCIiLGVvbCk7 Ci0KLQl3aGlsZSAoaSA8IG1heC0xKSB7Ci0jaWZkZWYgTVlSRUFECi0JICAgIGVycm5vID0gMDsK LQkgICAgLyogT24gZW5jcnlwdGVkIGNvbm5lY3Rpb25zIG15cmVhZCByZXR1cm5zIGVuY3J5cHRl ZCBieXRlcyAqLwotCSAgICBuID0gbXlyZWFkKCk7Ci0JICAgIGRlYnVnKEYwMDAsIlRUSU5MIG15 cmVhZCBjaGFyIiwiIixuKTsKLQkgICAgaWYgKG4gPCAwKSB7CS8qIFRpbWVvdXQgb3IgaS9vIGVy cm9yPyAqLwotI2lmZGVmIERFQlVHCi0JCWlmIChkZWJsb2cpIHsKLQkJICAgIGRlYnVnKEYxMDEs InR0aW5sIG15cmVhZCBmYWlsdXJlLCBuIiwiIixuKTsKLQkJICAgIGRlYnVnKEYxMDEsInR0aW5s IG15cmVhZCBlcnJubyIsIiIsZXJybm8pOwotCQl9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQkJLyog RG9uJ3QgbGV0IEVJTlRSIGJyZWFrIHBhY2tldHMuICovCi0JCWlmIChuID09IC0zKSB7Ci0JCSAg ICBpZiAoZXJybm8gPT0gRUlOVFIgJiYgaSA+IDApIHsKLQkJCWRlYnVnKEYxMTEsInR0aW5sIEVJ TlRSIG15cmVhZCBpIiwiY29udGludWluZyIsaSk7Ci0JCQljb250aW51ZTsKLQkJICAgIH0gZWxz ZSB7Ci0JCQlkZWJ1ZyhGMTEwLCJ0dGlubCBub24tRUlOVFIgLTMiLCJjbG9zaW5nIiwwKTsKLQkJ CXdhc2Nsb3NlZCA9IDE7Ci0JCQl0dGltb2ZmKCk7CS8qIFR1cm4gb2ZmIHRpbWVyICovCi0JCQl0 dGNsb3MoMCk7Ci0JCQlyZXR1cm4obik7Ci0JCSAgICB9Ci0JCX0gZWxzZSBpZiAobiA9PSAtMiAm JiBuZXRjb25uIC8qICYmIHRpbW8gPT0gMCAqLyApIHsKLQkJICAgIC8qIEhlcmUgd2UgdHJ5IHRv IGNhdGNoIGJyb2tlbiBuZXR3b3JrIGNvbm5lY3Rpb25zICovCi0JCSAgICAvKiBldmVuIHdoZW4g aW9jdGwoKSBhbmQgcmVhZCgpIGRvIG5vdCBjYXRjaCB0aGVtICovCi0JCSAgICBkZWJ1ZyhGMTEx LCJ0dGlubCBuZXR3b3JrIG15cmVhZCBmYWlsdXJlIiwiY2xvc2luZyIsbik7Ci0JCSAgICB3YXNj bG9zZWQgPSAxOwotCQkgICAgdHRpbW9mZigpOwotCQkgICAgdHRjbG9zKDApOwotCQkgICAgcmV0 dXJuKC0zKTsKLQkJfQotI2lmZGVmIFNUUkVBTUlORwotCQkvKiBTdHJlYW1pbmcgYW5kIG5vIGRh dGEgdG8gcmVhZCAqLwotCQllbHNlIGlmIChuID09IDAgJiYgc3RyZWFtaW5nICYmIHNuZHR5cCA9 PSAnRCcpCi0JCSAgcmV0dXJuKDApOwotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotCQlicmVhazsJ CQkvKiBCcmVhayBvdXQgb2Ygd2hpbGUgbG9vcCAqLwotCSAgICB9Ci0KLSNlbHNlIC8qIG5vdCBN WVJFQUQgKGlzIHRoaXMgY29kZSB1c2VkIGFueXdoZXJlIGFueSBtb3JlPykgKi8KLS8qCi0gIFRo ZSBub24tTVlSRUFEIGNvZGUgZGF0ZXMgZnJvbSB0aGUgMTk4MHMgYW5kIHdhcyBuZWVkZWQgb24g Y2VydGFpbiBwbGF0Zm9ybXMKLSAgd2hlcmUgdGhlcmUgd2VyZSBubyBub25ibG9ja2luZyByZWFk cy4gIC1mZGMsIDIwMDcvMDIvMjIuCi0qLwotCSAgICBpZiAoKG4gPSByZWFkKGZkLCAmbiwgMSkp IDwgMSkKLQkgICAgICBicmVhazsJCQkvKiBFcnJvciAtIGJyZWFrIG91dCBvZiB3aGlsZSBsb29w ICovCi0KLSNlbmRpZiAvKiBNWVJFQUQgKi8KLQotCSAgICAvKiBHZXQgaGVyZSB3aXRoIGNoYXIg aW4gbiAqLwotCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotCSAgICBpZiAoVEVMT1BUX1UoVEVMT1BU X0VOQ1JZUFRJT04pICYmICFwdXNoZWRiYWNrKSB7Ci0JCUNIQVIgY2ggPSBuOwotCQlja190bl9k ZWNyeXB0KChjaGFyICopJmNoLDEpOwotCQluID0gY2g7Ci0JCWRlYnVnKEYwMDAsIlRUSU5MIGRl Y3J5cCBjaGFyIiwiIixuKTsKLQkgICAgfQotCSAgICBwdXNoZWRiYWNrID0gMDsKLSNlbmRpZiAv KiBDS19FTkNSWVBUSU9OICovCi0KLSNpZmRlZiBUQ1BTT0NLRVQKLQkgICAgaWYgKG4gPT0gSUFD ICYmCQkvKiBIYW5kbGUgVGVsbmV0IG9wdGlvbnMgKi8KLQkJKCh4bG9jYWwgJiYgbmV0Y29ubiAm JiBJU19URUxORVQoKSkgfHwKLQkJKCF4bG9jYWwgJiYgc3N0ZWxuZXQpKSkgewotCQluID0gdHRf dG5vcHQobik7Ci0JCWlmIChuIDwgMCkKLQkJICByZXR1cm4obik7Ci0jaWZuZGVmIE5PUEFSU0VO Ci0JCWVsc2UgaWYgKG4gPT0gMSkKLQkJICBzdGFydCA9IHN0Y2hyOwotI2VuZGlmIC8qIE5PUEFS U0VOICovCi0JCWlmIChuICE9IDI1NSkJCS8qIE5vIGRhdGEgLSBnbyBiYWNrIGZvciBuZXh0IGNo YXIgKi8KLQkJICBjb250aW51ZTsKLQkgICAgfQkJCQkvKiBRdW90ZWQgSUFDIC0ga2VlcCBnb2lu ZyAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotCi0jaWZkZWYgQ0tYWENIQVIKLQkgICAgaWYg KGlnbmZsYWcpCi0JICAgICAgaWYgKGRibHRbKHVuc2lnbmVkKSBuXSAmIDEpIC8qIENoYXJhY3Rl ciB0byBpZ25vcmU/ICovCi0JCWNvbnRpbnVlOwotI2VuZGlmIC8qIENLWFhDSEFSICovCi0vKgot ICBVc2UgcGFyaXR5IG1hc2ssIHJhdGhlciB0aGFuIGFsd2F5cyBzdHJpcHBpbmcgcGFyaXR5LCB0 byBjaGVjayBmb3IKLSAgY2FuY2VsbGF0aW9uLiAgT3RoZXJ3aXNlLCBydW5zIGxpa2UgXHgwM1x4 ODNceDAzIGluIGEgcGFja2V0IGNvdWxkIGNhbmNlbAotICB0aGUgdHJhbnNmZXIgd2hlbiBwYXJp dHkgaXMgTk9ORS4gIChOb3RlIHRoYXQgXHgwM1x4MDNceDAzIGlzIGV4dHJlbWVseQotICB1bmxp a2VseSBkdWUgdG8gcnVuLWxlbmd0aCBlbmNvZGluZy4pCi0qLwotCSAgICAvKiBDaGVjayBjYW5j ZWxsYXRpb24gKi8KLQkgICAgaWYgKCF4bG9jYWwgJiYgeGZyY2FuICYmICgobiAmIHR0cG1zaykg PT0geGZyY2hyKSkgewotCQlpZiAoKytjY24gPj0geGZybnVtKSB7CS8qIElmIHhmcm51bSBpbiBh IHJvdywgYmFpbCBvdXQuICovCi0JCSAgICBpZiAodGltbykgewkJLyogQ2xlYXIgdGltZXIuICov Ci0JCQl0dGltb2ZmKCk7Ci0JCSAgICB9Ci0JCSAgICBpZiAoeGZyY2hyIDwgMzIpCi0JCSAgICAg IHByaW50ZigiXiVjLi4uXHJcbiIsKGNoYXIpKHhmcmNocis2NCkpOwotCQkgICAgZWxzZQotCQkg ICAgICBwcmludGYoIkNhbmNlbGVkLi4uXHJcbiIpOwotCQkgICAgcmV0dXJuKC0yKTsKLQkJfQot CSAgICB9IGVsc2UgY2NuID0gMDsJCS8qIE5vIGNhbmNlbGxhdGlvbiwgcmVzZXQgY291bnRlciwg Ki8KLQotI2lmZGVmIFBBUlNFTlNFCi0vKgotICBSZXN0cnVjdHVyZWQgY29kZSBhbGxvd3MgZm9y IGEgbmV3IHBhY2tldCB0byBhcHBlYXIgc29tZXdoZXJlIGluIHRoZQotICBtaWRkbGUgb2YgYSBw cmV2aW91cyBvbmUuICAtZmRjLCAyNCBGZWIgMjAwNy4KLSovCi0JICAgIGlmICgobiAmIHNvcG1h c2spID09IHN0YXJ0KSB7IC8qIFN0YXJ0IG9mIFBhY2tldCAqLwotCQlkZWJ1ZyhGMTAxLCJ0dGlu bCBTT1AgaSIsIiIsaSk7Ci0JCWZsYWcgPSAxOwkJLyogRmxhZyB0aGF0IHdlIGFyZSBpbiBhIHBh Y2tldCAqLwotCQloYXZlbGVuID0gMDsJCS8qIEludmFsaWRhdGUgcHJldmlvdXMgbGVuZ3RoICov Ci0JCXBrdGxlbiA9IC0xOwkJLyogKGlmIGFueSkgaW4gY2FzZSB3ZSB3ZXJlICovCi0JCWxwbGVu ID0gMDsJCS8qIGFscmVhZCBwcm9jZXNzYW5kIGEgcGFja2V0ICovCi0JCWkgPSAwOwkJCS8qIGFu ZCByZXNldCB0aGUgZGVzdCBidWZmZXIgcG9pbnRlciAqLwotCSAgICB9Ci0JICAgIGlmIChmbGFn ID09IDApIHsJCS8qIE5vIFNPUCB5ZXQuLi4gKi8KLQkJZGVidWcoRjAwMCwidHRpbmwgc2tpcHBp bmciLCIiLG4pOwotCQljb250aW51ZTsKLQkgICAgfQotCSAgICBkZXN0W2krK10gPSBuICYgdHRw bXNrOwotLyoKLSAgSWYgd2UgaGF2ZSBub3QgYmVlbiBpbnN0cnVjdGVkIHRvIHdhaXQgZm9yIGEg dHVybmFyb3VuZCBjaGFyYWN0ZXIsIHdlIGNhbiBnbwotICBieSB0aGUgcGFja2V0IGxlbmd0aCBm aWVsZC4gIElmIHR1cm4gIT0gMCwgd2UgbXVzdCB3YWl0IGZvciB0aGUgZW5kIG9mIGxpbmUKLSAg KGVvbCkgY2hhcmFjdGVyIGJlZm9yZSByZXR1cm5pbmcuICBUaGlzIGlzIGFuIGVncmVnaW91cyB2 aW9sYXRpb24gb2YgYWxsCi0gIHByaW5jaXBsZXMgb2YgbGF5ZXJpbmcuLi4gIChMZXNzIGVncmVn aW91cyBpbiBDLUtlcm1pdCA5LjAsIGluIHdoaWNoIHdlIGdvCi0gIGJ5IHRoZSBsZW5ndGggZmll bGQgYnV0IGFsc28gbG9vayBmb3IgdGhlIGVvbCBpbiBjYXNlIGl0IGFycml2ZXMgZWFybHksCi0g IGUuZy4gaWYgdGhlIGxlbmd0aCBmaWVsZCB3YXMgY29ycnVwdGVkIHVwd2FyZHMuKQotKi8KLQkg ICAgaWYgKCFoYXZlbGVuKSB7Ci0JCWlmIChpID09IDIpIHsKLQkJICAgIGlmICgoZGVzdFsxXSAm IDB4N2YpIDwgMzIpIC8qIEdhcmJhZ2UgaW4gbGVuZ3RoIGZpZWxkICovCi0JCSAgICAgIHJldHVy bigtMSk7CS8qIGZkYyAtIDEzIEFwciAyMDEwICovCi0JCSAgICBwa3RsZW4gPSB4dW5jaGFyKGRl c3RbMV0gJiAweDdmKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBrdGxlbiA+IDk0KQkvKiBS dWJvdXQgaW4gbGVuZ3RoIGZpZWxkICovCi0JCSAgICAgIHJldHVybigtMSk7CS8qIGZkYyAtIDEz IEFwciAyMDEwICovCi0JCSAgICBpZiAocGt0bGVuID4gMSkgewotCQkJaGF2ZWxlbiA9IDE7Ci0J CQlkZWJ1ZyhGMTAxLCJ0dGlubCBwa3RsZW4gdmFsdWUiLCIiLHBrdGxlbik7Ci0JCSAgICB9Ci0J CX0gZWxzZSBpZiAoaSA9PSA1ICYmIHBrdGxlbiA9PSAwKSB7Ci0JCSAgICBscGxlbiA9IHh1bmNo YXIoZGVzdFs0XSAmIDB4N2YpOwotCQl9IGVsc2UgaWYgKGkgPT0gNiAmJiBwa3RsZW4gPT0gMCkg ewotCQkgICAgcGt0bGVuID0gbHBsZW4gKiA5NSArIHh1bmNoYXIoZGVzdFs1XSAmIDB4N2YpICsg NTsKLQkJICAgIGhhdmVsZW4gPSAxOwotCQkgICAgZGVidWcoRjEwMSwidHRpbmwgZXh0ZW5kZWQg bGVuZ3RoIiwiIixwa3RsZW4pOwotCQl9Ci0JICAgIH0KLQotLyoKLSAgU3VwcG9zZSB3ZSBsb29r ZWQgYXQgdGhlIHNlcXVlbmNlIG51bWJlciBoZXJlIGFuZCBmb3VuZCBpdCB3YXMgb3V0IG9mCi0g IHJhbmdlPyAgVGhpcyB3b3VsZCBtZWFuIGVpdGhlciAoYSkgaW5jb21pbmcgcGFja2V0cyBoYWQg U09QIHVucHJlZml4ZWQKLSAgYW5kIHdlIGFyZSBvdXQgb2Ygc3luYywgb3IgKGIpIHRoZSBwYWNr ZXQgaXMgZGFtYWdlZC4gIFNpbmNlIChhKSBpcyBiYWQKLSAgcHJhY3RpY2UsIGxldCdzIGlnbm9y ZSBpdC4gIFNvIHdoYXQgc2hvdWxkIHdlIGRvIGhlcmUgaWYgd2Uga25vdyB0aGUKLSAgcGFja2V0 IGlzIGRhbWFnZWQ/Ci0KLSAgIDEuIE5vdGhpbmcgLS0ga2VlcCB0cnlpbmcgdG8gcmVhZCB0aGUg cGFja2V0IHRpbGwgd2UgZmluZCB3aGF0IHdlIHRoaW5rCi0gICAgICBpcyB0aGUgZW5kLCBvciB3 ZSB0aW1lIG91dCwgYW5kIGxldCB0aGUgdXBwZXIgbGF5ZXIgZGVjaWRlIHdoYXQgdG8KLSAgICAg IGRvLiAgQnV0IHNpbmNlIGVpdGhlciB0aGUgcGFja2V0IGlzIGNvcnJ1cHQgb3Igd2UgYXJlIG91 dCBvZiBzeW5jLAotICAgICAgb3VyIGNyaXRlcmlvbiBmb3IgZmluZGluZyB0aGUgZW5kIGRvZXMg bm90IGFwcGx5IGFuZCB3ZSBhcmUgbGlrZWx5Ci0gICAgICB0byB0aW1lIG91dCAob3Igc3dhbGxv dyBhIHBpZWNlIG9mIHRoZSBuZXh0IHBhY2tldCkgaWYgb3VyIGFzc3VtZWQKLSAgICAgIGxlbmd0 aCBpcyB0b28gbG9uZy4gIChUaGlzIHdhcyB0aGUgYmVoYXZpb3IgcHJpb3IgdG8gdmVyc2lvbiA3 LjAuKQotCi0gICAyLiBzZXQgZmxhZyA9IDAgYW5kIGNvbnRpbnVlPyAgVGhpcyB3b3VsZCBmb3Jj ZSB1cyB0byB3YWl0IGZvciB0aGUKLSAgICAgIG5leHQgcGFja2V0IHRvIGNvbWUgaW4sIGFuZCB0 aGVyZWZvcmUgKGluIHRoZSBub253aW5kb3dpbmcgY2FzZSksCi0gICAgICB3b3VsZCBmb3JjZSBh IHRpbWVvdXQgaW4gdGhlIG90aGVyIEtlcm1pdC4KLQotICAgMy4gc2V0IGZsYWcgPSAwIGFuZCBj b250aW51ZSwgYnV0IG9ubHkgaWYgdGhlIHdpbmRvdyBzaXplIGlzID4gMSBhbmQKLSAgICAgIHRo ZSB3aW5kb3cgaXMgbm90IGJsb2NrZWQ/ICBUYWxrIGFib3V0IGNoZWF0aW5nIQotCi0gICA0LiBS ZXR1cm4gYSBmYWlsdXJlIGNvZGUgYW5kIGxldCB0aGUgdXBwZXIgbGF5ZXIgZGVjaWRlIHdoYXQg dG8gZG8uCi0gICAgICBUaGlzIHNob3VsZCBiZSBlcXVpdmFsZW50IHRvIDMsIGJ1dCB3aXRob3V0 IHRoZSBjaGVhdGluZy4gIFNvIGxldCdzCi0gICAgICBkbyBpdCB0aGF0IHdheS4uLiAgQnV0IG5v dGUgdGhhdCB3ZSBtdXN0IGlnbm9yZSB0aGUgcGFyaXR5IGJpdAotICAgICAgaW4gY2FzZSB0aGlz IGlzIHRoZSBmaXJzdCBwYWNrZXQgYW5kIHdlIGhhdmUgbm90IHlldCBydW4gcGFyY2hrKCkuCi0q LwotCSAgICBpZiAoaSA9PSAzKSB7CQkvKiBQZWVrIGF0IHNlcXVlbmNlIG51bWJlciAqLwotCQl4 ID0geHVuY2hhcigoZGVzdFtpLTFdICYgMHg3ZikpOyAvKiBJZiBpdCdzIG5vdCBpbiByYW5nZS4u LiAqLwotCQlpZiAoeCA8IDAgfHwgeCA+IDYzKSB7Ci0JCSAgICBkZWJ1ZyhGMTExLCJ0dGlubCBi YWQgc2VxIixkZXN0LHgpOwotCQkgICAgaWYgKHRpbW8pIHR0aW1vZmYoKTsKLQkJICAgIHJldHVy bigtMSk7CQkvKiByZXR1cm4gYSBub25mYXRhbCBlcnJvciAqLwotCQl9Ci0JICAgIH0KLQotI2Vs c2UgLyogUEFSU0VOU0UgKi8KLQkgICAgZGVzdFtpKytdID0gbiAmIHR0cG1zazsKLSNlbmRpZiAv KiBQQVJTRU5TRSAqLwotCi0gICAgLyogQ2hlY2sgZm9yIGVuZCBvZiBwYWNrZXQgKi8KLQotCSAg ICBpZiAoCi0JCSgobiAmIHR0cG1zaykgPT0gZW9sKQkvKiBBbHdheXMgYnJlYWsgb24gdGhlIGVv bCBjaGFyICovCi0jaWZkZWYgUEFSU0VOU0UKLQkJIHx8CQkJLyogZmRjIC0gc2VlIG5vdGVzIG9m IDEzIEFwciAyMDEwICovCi0vKgotICBQdXJlbHkgbGVuZ3RoLWRyaXZlbiBpZiBTRVQgSEFORFNI QUtFIE5PTkUgKGkuZS4gdHVybiA9PSAwKS4KLSAgVGhpcyBhbGxvd3MgcGFja2V0IHRlcm1pbmF0 b3JzIGFuZCBoYW5kc2hha2UgY2hhcmFjdGVycyB0byBhcHBlYXIKLSAgbGl0ZXJhbGx5IGluc2lk ZSBhIHBhY2tldCBkYXRhIGZpZWxkLgotKi8KLQkJKGhhdmVsZW4gJiYgKGkgPiBwa3RsZW4rMSkg JiYKLQkJICghdHVybiB8fCAodHVybiAmJiAobiAmIDB4N2YpID09IHR1cm4pKSkgLyogKHR1cm4s IG5vdCBlb2wpICovCi0KLSNlbmRpZiAvKiBQQVJTRU5TRSAqLwotCQkpIHsKLS8qCi0gIEhlcmUg d2UgaGF2ZSBlaXRoZXIgcmVhZCB0aGUgbGFzdCBieXRlIG9mIHRoZSBwYWNrZXQgYmFzZWQgb24g aXRzIGxlbmd0aAotICBmaWVsZCwgb3IgZWxzZSB3ZSBoYXZlIHJlYWQgdGhlIHBhY2tldCB0ZXJt aW5hdG9yIChlb2wpIG9yIHRoZSBoYWxmLWR1cGxleAotICBsaW5lLXR1cm5hcm91bmQgY2hhciAo dHVybikuCi0qLwotI2lmbmRlZiBQQVJTRU5TRQotCQlkZWJ1ZyhGMTAxLCJ0dGlubCBnb3QgZW9s IiwiIixlb2wpOyAvKiAob3IgdHVybikgKi8KLQkJZGVzdFtpXSA9ICdcMCc7CQkvKiBZZXMsIHRl cm1pbmF0ZSB0aGUgc3RyaW5nLCAqLwotCQkvKiBkZWJ1ZyhGMTAxLCJ0dGlubCBpIiwiIixpKTsg Ki8KLQotI2Vsc2UgIC8qIFBBUlNFTlNFICovCi0KLSNpZmRlZiBERUJVRwotCQlpZiAoZGVibG9n KSB7Ci0JCSAgICBpZiAoKG4gJiB0dHBtc2spICE9IGVvbCkgewotCQkJZGVidWcoRjEwMSwidHRp bmwgRU9QIGxlbmd0aCIsIiIscGt0bGVuKTsKLQkJCWRlYnVnKEYwMDAsInR0aW5sIEVPUCBjdXJy ZW50IGNoYXIiLCIiLG4pOwotCQkJZGVidWcoRjEwMSwidHRpbmwgRU9QIHBhY2tldCBidWYgaW5k ZXgiLCIiLGkpOwotCQkgICAgfSBlbHNlIGRlYnVnKEYxMDEsInR0aW5sIGdvdCBlb2wiLCIiLGVv bCk7Ci0JCX0KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0jaWZkZWYgTVlSRUFECi0vKgotICBUaGUg cGFja2V0IHdhcyByZWFkIGJhc2VkIG9uIGl0cyBsZW5ndGguICBUaGlzIGxlYXZlcyB0aGUgcGFj a2V0IHRlcm1pbmF0b3IKLSAgdW5yZWFkLCBhbmQgc28gdHRjaGsoKSB3aWxsIGFsd2F5cyByZXR1 cm4gYXQgbGVhc3QgMSBiZWNhdXNlIG9mIHRoaXMsCi0gIHBvc3NpYmx5IGdpdmluZyBhIGZhbHNl IHBvc2l0aXZlIHRvIHRoZSAiaXMgdGhlcmUgYW5vdGhlciBwYWNrZXQgd2FpdGluZz8iCi0gIHRl c3QuICBCdXQgaWYgd2Uga25vdyB0aGUgdGVybWluYXRvciAob3IgYW55IG90aGVyIGludGVycGFj a2V0IGp1bmspIGlzCi0gIHRoZXJlLCB3ZSBjYW4gc2FmZWx5IGdldCByaWQgb2YgaXQuCi0KLSAg Tk9URTogVGhpcyBjb2RlIHJld29ya2VkIHRvIChhKSBleGVjdXRlIGV2ZW4gaWYgdGhlIGRlYnVn IGxvZyBpc24ndCBhY3RpdmU7Ci0gIGFuZCAoYikgYWN0dWFsbHkgd29yay4gIC1mZGMsIDIwMDcv MDIvMjIuICBBbmQgYWdhaW4gMjAwNy8wOC8xMi0xMyB0byBhbHNvCi0gIHdvcmsgb24gZW5jcnlw dGVkIGNvbm5lY3Rpb25zLgotKi8JCi0JCWRlYnVnKEYxMDEsIlRUSU5MIG15X2NvdW50IiwiIixt eV9jb3VudCk7Ci0JCWlmICgobiAmIHR0cG1zaykgIT0gZW9sKSB7IC8qIE5vdCB0aGUgcGFja2V0 IHRlcm1pbmF0b3IgKi8KLQkJICAgIGludCB4OwotCQkgICAgd2hpbGUgKG15X2NvdW50ID4gMCkg ewotCQkJeCA9IG15cmVhZCgpOwkgICAvKiAod2FzIHR0aW5jKDApICovCi0JCQlkZWJ1ZyhGMDAw LCJUVElOTCBsa3JlYWQgY2hhciIsIiIseCk7Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotCQkJaWYg KFRFTE9QVF9VKFRFTE9QVF9FTkNSWVBUSU9OKSkgewotCQkJICAgIENIQVIgY2ggPSB4OwotCQkJ ICAgIGNrX3RuX2RlY3J5cHQoKGNoYXIgKikmY2gsMSk7Ci0JCQkgICAgeCA9IGNoOwotCQkJICAg IGRlYnVnKEYwMDAsIlRUSU5MIGxrZGVjciBjaGFyIiwiIix4KTsgCi0JCQl9Ci0jZW5kaWYJLyog Q0tfRU5DUllQVElPTiAqLwotCQkJLyoKLQkJCSAgTm90ZTogd2hpbGUgaXQgbWlnaHQgc2VlbSBt b3JlIGVsZWdhbnQgdG8gc2ltcGx5Ci0JCQkgIHB1c2ggYmFjayB0aGUgZW5jcnlwdGVkIGJ5dGUs IHRoYXQgZGVzeW5jaHJvbml6ZXMKLQkJCSAgdGhlIGRlY3J5cHRpb24gc3RyZWFtOyB0aGUgZmxh ZyBpcyBuZWNlc3Nhcnkgc28gd2UKLQkJCSAgZG9uJ3QgdHJ5IHRvIGRlY3J5cHQgdGhlIHNhbWUg Ynl0ZSB0d2ljZS4KLQkJCSovCi0JCQlpZiAoKHggJiB0dHBtc2spID09IHN0YXJ0KSB7IC8qIFN0 YXJ0IG9mIG5leHQgcGFja2V0ICovCi0JCQkgICAgbXl1bnJkKHgpOwkvKiBQdXNoIGJhY2sgdGhl IGRlY3J5cHRlZCBieXRlICovCi0JCQkgICAgcHVzaGVkYmFjayA9IDE7IC8qIEFuZCBzZXQgZmxh ZyAqLwotCQkJICAgIGRlYnVnKEYwMDAsIlRUSU5MIGxrcHVzaCBjaGFyIiwiIix4KTsKLQkJCSAg ICBicmVhazsKLQkJCX0KLQkJICAgIH0KLQkJfQotI2VuZGlmIC8qIE1ZUkVBRCAqLwotCi0JCWRl c3RbaV0gPSAnXDAnOwkJLyogVGVybWluYXRlIHRoZSBzdHJpbmcsICovCi0JICAgICAgICBpZiAo bmVlZHBjaGspIHsJCS8qIFBhcml0eSBjaGVja2VkIHlldD8gKi8KLQkJICAgIGlmICh0dHBydHkg PT0gMCkgewkvKiBObywgY2hlY2suICovCi0JCQlpZiAoKHR0cHJ0eSA9IHBhcmNoayhkZXN0LHN0 YXJ0LGkpKSA+IDApIHsKLQkJCSAgICBpbnQgajsKLQkJCSAgICBkZWJ1ZyhGMTAxLCJ0dGlubCBz ZW5zZXMgcGFyaXR5IiwiIix0dHBydHkpOwotCQkJICAgIGRlYnVnKEYxMTAsInR0aW5sIHBhY2tl dCBiZWZvcmUiLGRlc3QsMCk7Ci0JCQkgICAgdHRwbXNrID0gMHg3ZjsKLQkJCSAgICBmb3IgKGog PSAwOyBqIDwgaTsgaisrKQotCQkJICAgICAgZGVzdFtqXSAmPSAweDdmOwkvKiBTdHJpcCBwYXJp dHkgZnJvbSBwYWNrZXQgKi8KLQkJCSAgICBkZWJ1ZyhGMTEwLCJ0dGlubCBwYWNrZXQgYWZ0ZXIg IixkZXN0LDApOwotCQkJfSBlbHNlIHR0cHJ0eSA9IDA7IC8qIFJlc3RvcmUgaWYgcGFyY2hrIGVy cm9yICovCi0JCSAgICB9Ci0JCSAgICBzb3BtYXNrID0gdHRwbXNrOwotCQkgICAgbmVlZHBjaGsg PSAwOwotCQl9Ci0jZW5kaWYgLyogUEFSU0VOU0UgKi8KLQotCQlpZiAodGltbykJCS8qIFR1cm4g b2ZmIHRpbWVyIGlmIGl0IHdhcyBvbiAqLwotCQkgIHR0aW1vZmYoKTsKLSAgICAgICAgICAgICAg ICBja2hleGR1bXAoInR0aW5sIGdvdCIsZGVzdCxpKTsKLQotI2lmZGVmIFNUUkVBTUlORwotCQkv KiB0dGlubCgpIHdhcyBjYWxsZWQgYmVjYXVzZSB0aGVyZSB3YXMgbm9uLXBhY2tldCAqLwotCQkv KiBkYXRhIHNpdHRpbmcgaW4gdGhlIGJhY2sgY2hhbm5lbC4gIElnbm9yZSBpdC4gICAqLwotCQlp ZiAoc3RyZWFtaW5nICYmIHNuZHR5cCA9PSAnRCcpCi0JCSAgcmV0dXJuKC0xKTsKLSNlbmRpZiAv KiBTVFJFQU1JTkcgKi8KLQkJcmV0dXJuKGkpOwotCSAgICB9Ci0JfSAvKiBFbmQgb2Ygd2hpbGUo KSAqLwotCXR0aW1vZmYoKTsKLQlyZXR1cm4obik7Ci0gICAgfQotfQotI2VuZGlmIC8qIE5PWEZF UiAqLwotCi0vKiAgVCBUIEkgTiBDIC0tICBSZWFkIGEgY2hhcmFjdGVyIGZyb20gdGhlIGNvbW11 bmljYXRpb24gbGluZSAgKi8KLS8qCi0gT24gc3VjY2VzcywgcmV0dXJucyB0aGUgY2hhcmFjdGVy IHRoYXQgd2FzIHJlYWQsID49IDAuCi0gT24gZmFpbHVyZSwgcmV0dXJucyAtMSBvciBvdGhlciBu ZWdhdGl2ZSBteXJlYWQgZXJyb3IgY29kZSwKLSAgIG9yIC0yIGlmIGNvbm5lY3Rpb24gaXMgYnJv a2VuIG9yIHR0eWZkIDwgMC4KLSAgIG9yIC0zIGlmIHNlc3Npb24gbGltaXQgaGFzIGV4cGlyZWQs Ci0gICBvciAtNCBpZiBzb21ldGhpbmcgb3Igb3RoZXIuLi4KLSBOT1RFOiBUaGUgQVBJIGRvZXMg bm90IHByb3ZpZGUgZm9yIHR0aW5jKCkgcmV0dXJuaW5nIGEgc3BlY2lhbCBjb2RlCi0gdXBvbiB0 aW1lb3V0LCBidXQgd2UgbmVlZCBpdC4gIFNvIGZvciB0aGlzIHdlIGhhdmUgYSBnbG9iYWwgdmFy aWFibGUsCi0gdHRpbmN0aW1vLgotKi8KLXN0YXRpYyBpbnQgdHRpbmN0aW1vID0gMDsJCS8qIFl1 ayAqLwotCi1pbnQKLXR0aW5jKHRpbW8pIGludCB0aW1vOyB7Ci0KLSAgICBpbnQgbiA9IDAsIGZk OwotICAgIGludCBpc190biA9IDA7Ci0gICAgQ0hBUiBjaCA9IDA7Ci0KLSAgICB0dGluY3RpbW8g PSAwOwotCi0gICAgaWYgKHR0eWZkIDwgMCkgcmV0dXJuKC0yKTsgICAgICAgICAgLyogTm90IG9w ZW4uICovCi0KLSAgICBpc190biA9ICh4bG9jYWwgJiYgbmV0Y29ubiAmJiBJU19URUxORVQoKSkg fHwKLQkgICAgKCF4bG9jYWwgJiYgc3N0ZWxuZXQpOwotCi0jaWZkZWYgVFRMRUJVRgotICAgIGlm ICh0dHB1c2ggPj0gMCkgewotICAgICAgICBkZWJ1ZyhGMTExLCJ0dGluYyIsInR0cHVzaCIsdHRw dXNoKTsKLSAgICAgICAgY2ggPSB0dHB1c2g7Ci0gICAgICAgIHR0cHVzaCA9IC0xOwotICAgICAg ICByZXR1cm4oY2gpOwotICAgIH0KLSAgICBpZiAobGVfZGF0YSkgewotICAgICAgICBpZiAobGVf Z2V0Y2hhcigmY2gpID4gMCkgewotICAgICAgICAgICAgZGVidWcoRjExMSwidHRpbmMgbGVfZ2V0 Y2hhciIsImNoIixjaCk7Ci0gICAgICAgICAgICByZXR1cm4oY2gpOwotICAgICAgICB9Ci0gICAg fQotI2VuZGlmIC8qIFRUTEVCVUYgKi8KLQotI2lmZGVmIE5FVENNRAotICAgIGlmICh0dHBpcGUp Ci0gICAgICBmZCA9IGZkaW47Ci0gICAgZWxzZQotI2VuZGlmIC8qIE5FVENNRCAqLwotICAgICAg ZmQgPSB0dHlmZDsKLQotICAgIGlmICgodGltbyA8PSAwKQkJCS8qIFVudGltZWQuICovCi0jaWZk ZWYgTVlSRUFECi0JfHwgKG15X2NvdW50ID4gMCkJCS8qIEJ1ZmZlcmVkIGNoYXIgYWxyZWFkeSB3 YWl0aW5nLiAqLwotI2VuZGlmIC8qIE1ZUkVBRCAqLwotCSkgewotI2lmZGVmIE1ZUkVBRAotICAg ICAgICAvKiBDb21tIGxpbmUgZmFpbHVyZSByZXR1cm5zIC0xIHRocnUgbXlyZWFkLCBzbyBubyAm PSAwMzc3ICovCi0JbiA9IG15cmVhZCgpOwkJCS8qIFdhaXQgZm9yIGEgY2hhcmFjdGVyLi4uICov Ci0JLyogZGVidWcoRjAwMCwidHRpbmMgTVlSRUFEIG4iLCIiLG4pOyAqLwotI2lmZGVmIENLX0VO Q1JZUFRJT04KLQkvKiBkZWJ1ZyhGMTAxLCJ0dGluYyB1X2VuY3J5cHQiLCIiLFRFTE9QVF9VKFRF TE9QVF9FTkNSWVBUSU9OKSk7ICovCi0JaWYgKFRFTE9QVF9VKFRFTE9QVF9FTkNSWVBUSU9OKSAm JiBuID49IDApIHsKLQkgICAgY2ggPSBuOwotCSAgICBja190bl9kZWNyeXB0KChjaGFyICopJmNo LDEpOwotCSAgICBuID0gY2g7Ci0JfQotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLQotI2lm ZGVmIE5FVFBUWQotCWlmICh0dHB0eSAmJiBuIDwgMCkgewotCSAgICBkZWJ1ZyhGMTAxLCJ0dGlu YyBlcnJvciBvbiBwdHkiLCIiLG4pOwotCSAgICB0dGNsb3MoMCk7Ci0JICAgIHJldHVybihuKTsK LQl9Ci0jZW5kaWYgLyogTkVUUFRZICovCi0KLSNpZmRlZiBUTkNPREUKLQlpZiAoKG4gPiAtMSkg JiYgaXNfdG4pCi0JICByZXR1cm4oKHVuc2lnbmVkKShuICYgMHhmZikpOwotCWVsc2UKLSNlbmRp ZiAvKiBUTkNPREUgKi8KLQkgIHJldHVybihuIDwgMCA/IG4gOiAodW5zaWduZWQpKG4gJiB0dHBt c2spKTsKLQotI2Vsc2UgIC8qIE1ZUkVBRCAqLwotCi0gICAgICAgIHdoaWxlICgobiA9IHJlYWQo ZmQsJmNoLDEpKSA9PSAwKSAvKiBXYWl0IGZvciBhIGNoYXJhY3Rlci4gKi8KLSAgICAgICAgLyog U2hvdWxkbid0IGhhdmUgdG8gbG9vcCBpbiB2ZXIgNUEuICovCi0jaWZkZWYgTkVUQ09OTgotCSAg aWYgKG5ldGNvbm4pIHsJCS8qIFNwZWNpYWwgaGFuZGxpbmcgZm9yIG5ldCAqLwotCSAgICAgIG5l dGNsb3MoKTsJCS8qIElmIHJlYWQoKSByZXR1cm5zIDAgaXQgbWVhbnMgKi8KLQkgICAgICBuZXRj b25uID0gMDsJCS8qIHRoZSBjb25uZWN0aW9uIGhhcyBkcm9wcGVkLiAqLwotCSAgICAgIGVycm5v ID0gRU5PVENPTk47Ci0JICAgICAgcmV0dXJuKC0yKTsKLQkgIH0KLSNlbmRpZiAvKiBORVRDT05O ICovCi0JICA7Ci0JLyogZGVidWcoRjEwMSwidHRpbmMiLCIiLGNoKTsgKi8KLSNpZmRlZiBUTkNP REUKLQlpZiAoKG4gPiAwKSAmJiBpc190bikgewotI2lmZGVmIENLX0VOQ1JZUFRJT04KLQkgICAg aWYgKFRFTE9QVF9VKFRFTE9QVF9FTkNSWVBUSU9OKSkgewotCQlja190bl9kZWNyeXB0KCZjaCwx KTsKLQkJbiA9IGNoOwotCSAgICB9Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotCSAgICBy ZXR1cm4oKHVuc2lnbmVkKShjaCAmIDB4ZmYpKTsKLQl9IGVsc2UKLSNlbmRpZiAvKiBUTkNPREUg Ki8KLSAgICAgICAgcmV0dXJuKChuIDwgMCkgPyAtNCA6ICgobiA9PSAwKSA/IC0xIDogKHVuc2ln bmVkKShjaCAmIHR0cG1zaykpKTsKLSNlbmRpZiAvKiBNWVJFQUQgKi8KLQotICAgIH0gZWxzZSB7 CQkJCS8qIFRpbWVkIHJlYWQgKi8KLQotCWludCBvbGRhbGFybTsKLQlzYXZhbCA9IHNpZ25hbChT SUdBTFJNLHRpbWVyaCk7CS8qIFNldCB1cCBoYW5kbGVyLCBzYXZlIG9sZCBvbmUuICovCi0Jb2xk YWxhcm0gPSBhbGFybSh0aW1vKTsJCS8qIFNldCBhbGFybSwgc2F2ZSBvbGQgb25lLiAqLwotCWlm ICgKLSNpZmRlZiBDS19QT1NJWF9TSUcKLQkgICAgc2lnc2V0am1wKHNqYnVmLDEpCi0jZWxzZQot CSAgICBzZXRqbXAoc2pidWYpCi0jZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCi0JICAgICkgewkJ CQkvKiBUaW1lciBleHBpcmVkICovCi0JICAgIHR0aW5jdGltbyA9IDE7Ci0JICAgIG4gPSAtMTsJ CQkvKiBzZXQgZmxhZyAqLwotCX0gZWxzZSB7Ci0jaWZkZWYgTVlSRUFECi0JICAgIG4gPSBteXJl YWQoKTsJCS8qIElmIG1hbmFnaW5nIG93biBidWZmZXIuLi4gKi8KLQkgICAgZGVidWcoRjEwMSwi dHRpbmMgbXlyZWFkIiwiIixuKTsKLQkgICAgY2ggPSBuOwotI2Vsc2UKLQkgICAgbiA9IHJlYWQo ZmQsJmNoLDEpOwkJLyogT3RoZXJ3aXNlIGNhbGwgdGhlIHN5c3RlbS4gKi8KLQkgICAgaWYgKG4g PT0gMCkgbiA9IC0xOwotCSAgICBkZWJ1ZyhGMTAxLCJ0dGluYyByZWFkIiwiIixuKTsKLSNlbmRp ZiAvKiBNWVJFQUQgKi8KLQotI2lmZGVmIENLX0VOQ1JZUFRJT04KLQkgICAgaWYgKFRFTE9QVF9V KFRFTE9QVF9FTkNSWVBUSU9OKSAmJiBuID49IDApIHsKLQkJY2tfdG5fZGVjcnlwdCgoY2hhciAq KSZjaCwxKTsKLQkgICAgfQotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLQkgICAgaWYgKG4g Pj0gMCkKLQkgICAgICBuID0gKHVuc2lnbmVkKSAoY2ggJiAweGZmKTsKLQkgICAgZWxzZQotCSAg ICAgIG4gPSAobiA8IDApID8gLTQgOiAtMjsJLyogU3BlY2lhbCByZXR1cm4gY29kZXMuICovCi0J fQotCXR0aW1vZmYoKTsJCQkvKiBUdXJuIG9mZiB0aGUgdGltZXIgKi8KLQlpZiAob2xkYWxhcm0g PiAwKSB7Ci0JICAgIGlmIChuID09IC0xKQkJLyogYW5kIHJlc3RvcmUgYW55IHByZXZpb3VzIGFs YXJtICovCi0JICAgICAgb2xkYWxhcm0gLT0gdGltbzsKLQkgICAgaWYgKG9sZGFsYXJtIDwgMCkJ CS8qIGFkanVzdGVkIGJ5IG91ciB0aW1lb3V0IGludGVydmFsICovCi0JICAgICAgb2xkYWxhcm0g PSAwOwotCSAgICBpZiAob2xkYWxhcm0pIHsKLQkgICAgICAgIGRlYnVnKEYxMDEsInR0aW5jIHJl c3RvcmluZyBvbGRhbGFybSIsIiIsb2xkYWxhcm0pOwotCQlhbGFybShvbGRhbGFybSk7Ci0JICAg IH0KLQl9Ci0jaWZkZWYgTkVUQ09OTgotCWlmIChuZXRjb25uKSB7Ci0JICAgIGlmIChuID09IC0y KSB7CQkvKiByZWFkKCkgcmV0dXJucyAwICovCi0JCW5ldGNsb3MoKTsJCS8qIG9uIG5ldHdvcmsg cmVhZCBmYWlsdXJlICovCi0JCW5ldGNvbm4gPSAwOwotCQllcnJubyA9IEVOT1RDT05OOwotCSAg ICB9Ci0JfQotI2VuZGlmCS8qIE5FVENPTk4gKi8KLSNpZmRlZiBUTkNPREUKLQlpZiAoKG4gPiAt MSkgJiYgaXNfdG4pCi0JICByZXR1cm4oKHVuc2lnbmVkKShuICYgMHhmZikpOwotCWVsc2UKLSNl bmRpZiAvKiBUTkNPREUgKi8KLQkgIC8qIFJldHVybiBtYXNrZWQgY2hhciBvciBuZWcuICovCi0J ICByZXR1cm4oIChuIDwgMCkgPyBuIDogKHVuc2lnbmVkKShuICYgdHRwbXNrKSApOwotICAgIH0K LX0KLQotLyogIFMgTiBEIEIgUiBLICAtLSAgU2VuZCBhIEJSRUFLIHNpZ25hbCBvZiB0aGUgZ2l2 ZW4gZHVyYXRpb24gICovCi0KLXN0YXRpYyBpbnQKLSNpZmRlZiBDS19BTlNJQwotc25kYnJrKGlu dCBtc2VjKSB7CQkJLyogQXJndW1lbnQgaXMgbWlsbGlzZWNvbmRzICovCi0jZWxzZQotc25kYnJr KG1zZWMpIGludCBtc2VjOyB7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSNpZm5kZWYgUE9TSVgK LSAgICBpbnQgeCwgbjsKLSNlbmRpZiAvKiBQT1NJWCAqLwotCi0jaWZkZWYgT1hPUwotI2RlZmlu ZSBCU0RCUkVBSwotI2VuZGlmIC8qIE9YT1MgKi8KLQotI2lmZGVmIEFOWUJTRAotI2RlZmluZSBC U0RCUkVBSwotI2VuZGlmIC8qIEFOWUJTRCAqLwotCi0jaWZkZWYgQlNENDQKLSNkZWZpbmUgQlNE QlJFQUsKLSNlbmRpZiAvKiBCU0Q0NCAqLwotCi0jaWZkZWYgQ09IRVJFTlQKLSNpZmRlZiBCU0RC UkVBSwotI3VuZGVmIEJTREJSRUFLCi0jZW5kaWYgLyogQlNEQlJFQUsgKi8KLSNlbmRpZiAvKiBD T0hFUkVOVCAqLwotCi0jaWZkZWYgQkVMTFYxMAotI2lmZGVmIEJTREJSRUFLCi0jdW5kZWYgQlNE QlJFQUsKLSNlbmRpZiAvKiBCU0RCUkVBSyAqLwotI2VuZGlmIC8qIEJFTExWMTAgKi8KLQotI2lm ZGVmIFBST1ZYMQotICAgIGNoYXIgc3BkOwotI2VuZGlmIC8qIFBST1ZYMSAqLwotCi0gICAgZGVi dWcoRjEwMSwidHRzbmRiIHR0eWZkIiwiIix0dHlmZCk7Ci0gICAgaWYgKHR0eWZkIDwgMCkgcmV0 dXJuKC0xKTsgICAgICAgICAgLyogTm90IG9wZW4uICovCi0KLSNpZmRlZiBQbGFuOQotICAgIHJl dHVybiBwOXNuZGJyayhtc2VjKTsKLSNlbHNlCi0jaWZkZWYgTkVUQ09OTgotI2lmZGVmIE5FVENN RAotICAgIGlmICh0dHBpcGUpCQkJCS8qIFBpcGUgKi8KLSAgICAgIHJldHVybih0dG9jKCdcMCcp KTsKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSNpZmRlZiBORVRQVFkKLSAgICBpZiAodHRwdHkpCi0g ICAgICByZXR1cm4odHRvYygnXDAnKSk7Ci0jZW5kaWYgLyogTkVUUFRZICovCi0gICAgaWYgKG5l dGNvbm4pIAkJCS8qIFNlbmQgbmV0d29yayBCUkVBSyAqLwotICAgICAgcmV0dXJuKG5ldGJyZWFr KCkpOwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQotICAgIGlmIChtc2VjIDwgMSB8fCBtc2VjID4g NTAwMCkgcmV0dXJuKC0xKTsgLyogQmFkIGFyZ3VtZW50ICovCi0KLSNpZmRlZiBQT1NJWAkJCQkv KiBFYXN5IGluIFBPU0lYICovCi0gICAgewotCWludCB4OwotCWRlYnVnKEYxMTEsInNuZGJyayBQ T1NJWCIsY2tpdG9hKG1zZWMpLChtc2VjLzM3NSkpOwotCWVycm5vID0gMDsKLQl4ID0gdGNzZW5k YnJlYWsodHR5ZmQsbXNlYyAvIDM3NSk7Ci0JZGVidWcoRjExMSwic25kYnJrIHRjc2VuZGJyZWFr Iixja2l0b2EoZXJybm8pLHgpOwotCXJldHVybih4KTsKLSAgICB9Ci0jZWxzZQotI2lmZGVmIFBS T1ZYMQotICAgIGd0dHkodHR5ZmQsJnR0YnVmKTsgICAgICAgICAgICAgICAgIC8qIEdldCBjdXJy ZW50IHR0eSBmbGFncyAqLwotICAgIHNwZCA9IHR0YnVmLnNnX29zcGVlZDsgICAgICAgICAgICAg IC8qIFNhdmUgc3BlZWQgKi8KLSAgICB0dGJ1Zi5zZ19vc3BlZWQgPSBCNTA7ICAgICAgICAgICAg ICAvKiBDaGFuZ2UgdG8gNTAgYmF1ZCAqLwotICAgIHN0dHkodHR5ZmQsJnR0YnVmKTsgICAgICAg ICAgICAgICAgIC8qICAuLi4gKi8KLSAgICBuID0gKGludClzdHJsZW4oYnJudWxzKTsJCS8qIFNl bmQgdGhlIHJpZ2h0IG51bWJlciBvZiBudWxscyAqLwotICAgIHggPSBtc2VjIC8gOTE7Ci0gICAg aWYgKHggPiBuKSB4ID0gbjsKLSAgICB3cml0ZSh0dHlmZCxicm51bHMsbik7Ci0gICAgdHRidWYu c2dfb3NwZWVkID0gc3BkOyAgICAgICAgICAgICAgLyogUmVzdG9yZSBzcGVlZCAqLwotICAgIHN0 dHkodHR5ZmQsJnR0YnVmKTsgICAgICAgICAgICAgICAgIC8qICAuLi4gKi8KLSAgICByZXR1cm4o MCk7Ci0jZWxzZQotI2lmZGVmIGFlZ2lzCi0gICAgc2lvXyRjb250cm9sKChzaG9ydCl0dHlmZCwg c2lvXyRzZW5kX2JyZWFrLCBtc2VjLCBzdCk7Ci0gICAgcmV0dXJuKDApOwotI2Vsc2UKLSNpZmRl ZiBCU0RCUkVBSwotICAgIG4gPSBGV1JJVEU7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZs dXNoIG91dHB1dCBxdWV1ZS4gKi8KLS8qIFdhdGNoIG91dCBmb3IgaW50IHZzIGxvbmcgcHJvYmxl bXMgaW4gJm4gYXJnISAqLwotICAgIGRlYnVnKEYxMDEsInNuZGJyayBCU0RCUkVBSyIsIiIsbXNl Yyk7Ci0gICAgaW9jdGwodHR5ZmQsVElPQ0ZMVVNILCZuKTsgICAgICAgICAgLyogSWdub3JlIGFu eSBlcnJvcnMuLiAqLwotICAgIGlmIChpb2N0bCh0dHlmZCxUSU9DU0JSSywoY2hhciAqKTApIDwg MCkgeyAgLyogVHVybiBvbiBCUkVBSyAqLwotICAgICAgICBwZXJyb3IoIkNhbid0IHNlbmQgQlJF QUsiKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgeCA9IG1zbGVlcChtc2VjKTsg ICAgICAgICAgICAgICAgICAgIC8qIFNsZWVwIGZvciBzbyBtYW55IG1pbGxpc2Vjb25kcyAqLwot ICAgIGlmIChpb2N0bCh0dHlmZCxUSU9DQ0JSSywoY2hhciAqKTApIDwgMCkgeyAgLyogVHVybiBv ZmYgQlJFQUsgKi8KLSAgICAgICAgcGVycm9yKCJCUkVBSyBzdHVjayEhISIpOwotICAgICAgICBk b2V4aXQoQkFEX0VYSVQsLTEpOwkJLyogR2V0IG91dCwgY2xvc2luZyB0aGUgbGluZS4gKi8KLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgIHdpdGggYmFkIGV4aXQg c3RhdHVzICovCi0gICAgfQotICAgIHJldHVybih4KTsKLSNlbHNlCi0jaWZkZWYgQVRUU1YKLS8q Ci0gIE5vIHdheSB0byBzZW5kIGEgbG9uZyBCUkVBSyBpbiBTeXMgViwgc28gc2VuZCBhIGJ1bmNo IG9mIHJlZ3VsYXIgb25lcy4KLSAgKEFjdHVhbGx5LCBTeXMgViBSNCBpcyAqc3VwcG9zZWQqIHRv IGhhdmUgdGhlIFBPU0lYIHRjc2VuZGJyZWFrKCkgZnVuY3Rpb24sCi0gIGJ1dCB0aGVyZSdzIG5v IHdheSBmb3IgdGhpcyBjb2RlIHRvIGtub3cgZm9yIHN1cmUuKQotKi8KLSAgICBkZWJ1ZyhGMTAx LCJzbmRicmsgQVRUU1YiLCIiLG1zZWMpOwotICAgIHggPSBtc2VjIC8gMjc1OwotICAgIGZvciAo biA9IDA7IG4gPCB4OyBuKyspIHsKLQkvKiBSZXBvcnRlZGx5IHRoZSBjYXN0IGJyZWFrcyB0aGlz IGZ1bmN0aW9uIG9uIHNvbWUgc3lzdGVtcyAqLwotCS8qIEJ1dCB0aGVuIHdoeSB3YXMgaXQgaGVy ZSBpbiB0aGUgZmlyc3QgcGxhY2U/ICovCi0JaWYgKGlvY3RsKHR0eWZkLFRDU0JSSywgLyogKGNo YXIgKikgKi8gMCkgPCAwKSB7Ci0JICAgIHBlcnJvcigiQ2FuJ3Qgc2VuZCBCUkVBSyIpOwotCSAg ICByZXR1cm4oLTEpOwotCX0KLSAgICB9Ci0gICAgcmV0dXJuKDApOwotI2Vsc2UKLSNpZmRlZiAg VjcKLSAgICBkZWJ1ZyhGMTAxLCJzbmRicmsgVjciLCIiLG1zZWMpOwotICAgIHJldHVybihnZW5i cmsodHR5ZmQsMjUwKSk7CQkvKiBTaW11bGF0ZSBhIEJSRUFLICovCi0jZWxzZQotICAgIGRlYnVn KEYxMDEsInNuZGJyayBjYXRjaGFsbCIsIiIsbXNlYyk7Ci0gICAgdHRvYygwKTt0dG9jKDApO3R0 b2MoMCk7dHRvYygwKTsKLSAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogVjcgKi8KLSNlbmRpZiAv KiBCU0RCUkVBSyAqLwotI2VuZGlmIC8qIEFUVFNWICovCi0jZW5kaWYgLyogYWVnaXMgKi8KLSNl bmRpZiAvKiBQUk9WWDEgKi8KLSNlbmRpZiAvKiBQT1NJWCAqLwotI2VuZGlmIC8qIFBsYW45ICov Ci19Ci0KLS8qICBUIFQgUyBOIEQgQiAgLS0gIFNlbmQgYSBCUkVBSyBzaWduYWwgICovCi0KLWlu dAotdHRzbmRiKCkgewotI2lmZGVmIFROX0NPTVBPUlQKLSAgICBpZiAobmV0Y29ubiAmJiBpc3Ru Y29tcG9ydCgpKQotICAgICAgcmV0dXJuKCh0bnNuZGIoMjc1TCkgPj0gMCkgPyAwIDogLTEpOwot ICAgIGVsc2UKLSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0gICAgICByZXR1cm4oc25kYnJrKDI3 NSkpOwotfQotCi0vKiAgVCBUIFMgTiBEIEwgQiAgLS0gIFNlbmQgYSBMb25nIEJSRUFLIHNpZ25h bCAgKi8KLQotaW50Ci10dHNuZGxiKCkgewotI2lmZGVmIFROX0NPTVBPUlQKLSAgICBpZiAobmV0 Y29ubiAmJiBpc3RuY29tcG9ydCgpKQotICAgICAgcmV0dXJuKCh0bnNuZGIoMTgwMEwpID49IDAp ID8gMCA6IC0xKTsKLSAgICBlbHNlCi0jZW5kaWYgLyogVE5fQ09NUE9SVCAqLwotICAgIHJldHVy bihzbmRicmsoMTUwMCkpOwotfQotCi0vKiAgTSBTIEwgRSBFIFAgIC0tICBNaWxsaXNlY29uZCB2 ZXJzaW9uIG9mIHNsZWVwKCkuICAqLwotCi0vKgotICBDYWxsIHdpdGggbnVtYmVyIG9mIG1pbGxp c2Vjb25kcyAodGhvdXNhbmR0aHMgb2Ygc2Vjb25kcykgdG8gc2xlZXAuCi0gIEludGVuZGVkIG9u bHkgZm9yIHNtYWxsIGludGVydmFscy4gIEZvciBiaWcgb25lcywganVzdCB1c2Ugc2xlZXAoKS4K LSAgSGlnaGx5IHN5c3RlbS1kZXBlbmRlbnQuCi0gIFJldHVybnMgMCBhbHdheXMsIGV2ZW4gaWYg aXQgZGlkbid0IHdvcmsuCi0qLwotCi0vKiBEZWZpbmUgTVNMRlRJTUUgZm9yIHN5c3RlbXMgdGhh dCBtdXN0IHVzZSBhbiBmdGltZSgpIGxvb3AuICovCi0jaWZkZWYgQU5ZQlNECQkJCS8qIEZvciBw cmUtNC4yIEJTRCB2ZXJzaW9ucyAqLwotI2lmbmRlZiBCU0Q0Ci0jZGVmaW5lIE1TTEZUSU1FCi0j ZW5kaWYgLyogQlNENCAqLwotI2VuZGlmIC8qIEFOWUJTRCAqLwotCi0jaWZkZWYgVE9XRVIxCQkJ CS8qIE5DUiBUb3dlciBPUyAxLjAgKi8KLSNkZWZpbmUgTVNMRlRJTUUKLSNlbmRpZiAvKiBUT1dF UjEgKi8KLQotI2lmZGVmIENPSEVSRU5UICAgICAgICAgLyogQ29oZXJlbnQuLi4gKi8KLSNpZm5k ZWYgX0kzODYgICAgICAgICAgIC8qIE1heWJlIENvaGVyZW50LzM4NiBzaG91bGQgZ2V0IHRoaXMs IHRvbyAqLwotI2RlZmluZSBNU0xGVElNRSAgICAgICAgLyogT3BpbmlvbnMgYXJlIGRpdmlkZWQg Ki8KLSNlbmRpZiAvKiBfSTM4NiAqLwotI2VuZGlmIC8qIENPSEVSRU5UICovCi0KLSNpZmRlZiBD T01NRU5UCi0jaWZkZWYgR0VUTVNFQwotCi0vKiBNaWxsaXNlY29uZCB0aW1lciAqLwotCi1zdGF0 aWMgbG9uZyBtc2VjYmFzZSA9IDBMOwkJLyogVW5zaWduZWQgbG9uZyBub3QgcG9ydGFibGUgKi8K LQotbG9uZwotZ2V0bXNlYygpIHsJCQkJLyogTWlsbGlzZWNvbmRzIHNpbmNlIGJhc2UgdGltZSAq LwotICAgIHN0cnVjdCB0aW1ldmFsIHh2OwotICAgIHN0cnVjdCB0aW1lem9uZSB4ejsKLSAgICBs b25nIHNlY3MsIG1zZWNzOwotICAgIGlmICgKLSNpZmRlZiBHVE9ET05FQVJHCi0JZ2V0dGltZW9m ZGF5KCZ0dikKLSNlbHNlCi0jaWZkZWYgUFRYCi0JZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCkKLSNl bHNlCi0JZ2V0dGltZW9mZGF5KCZ0diwgJnR6KQotI2VuZGlmIC8qIFBUWCAqLwotI2VuZGlmIC8q IEdUT0RPTkVBUkcgKi8KLQk8IDApCi0gICAgICByZXR1cm4oLTEpOwotICAgIGlmIChtc2VjYmFz ZSA9PSAwTCkgewkJLyogRmlyc3QgY2FsbCwgc2V0IGJhc2UgdGltZS4gKi8KLQltc2VjYmFzZSA9 IHR2LnR2X3NlYzsKLQlkZWJ1ZyhGMTAxLCJnZXRtc2VjIGJhc2UiLCIiLG1zZWNiYXNlKTsKLSAg ICB9Ci0gICAgcmV0dXJuKCgodHYudHZfc2VjIC0gbXNlY2Jhc2UpICogMTAwMEwpICsgKHR2LnR2 X3VzZWMgLyAxMDAwTCkpOwotfQotI2VuZGlmIC8qIEdFVE1TRUMgKi8KLSNlbmRpZiAvKiBDT01N RU5UICovCi0KLSNpZmRlZiBTRUxFQ1QKLWludAotdHR3YWl0KGZkLCBzZWNzKSBpbnQgZmQsIHNl Y3M7IHsKLSAgICBpbnQgeDsKLSAgICBmZF9zZXQgcmZkczsKLSAgICBGRF9aRVJPKCZyZmRzKTsK LSAgICBGRF9TRVQoZmQsJnJmZHMpOwotICAgIHR2LnR2X3NlYyA9IHNlY3M7Ci0gICAgdHYudHZf dXNlYyA9IDBMOwotICAgIGVycm5vID0gMDsKLSAgICBpZiAoKHggPSBzZWxlY3QoRkRfU0VUU0la RSwKLSNpZmRlZiBIUFVYOQotCQkgICAgKGludCAqKQotI2Vsc2UKLSNpZmRlZiBIUFVYMTAwMAot CQkgICAgKGludCAqKQotI2VuZGlmIC8qIEhQVVgxMDAwICovCi0jZW5kaWYgLyogSFBVWDkgKi8K LQkJICAgICZyZmRzLAotCQkgICAgMCwgMCwgJnR2KSkgPCAwKSB7Ci0JZGVidWcoRjEwMSwidHR3 YWl0IHNlbGVjdCBlcnJubyIsIiIsZXJybm8pOwotCXJldHVybigwKTsKLSAgICB9IGVsc2Ugewot CWRlYnVnKEYxMDEsInR0d2FpdCBPSyIsIiIsZXJybm8pOwotCXggPSBGRF9JU1NFVChmZCwgJnJm ZHMpOwotCWRlYnVnKEYxMDEsInR0d2FpdCBzZWxlY3QgeCIsIiIseCk7Ci0JcmV0dXJuKHggPyAx IDogMCk7Ci0gICAgfQotfQotI2VuZGlmIC8qIFNFTEVDVCAqLwotCi1pbnQKLW1zbGVlcChtKSBp bnQgbTsgewotLyoKLSAgT3RoZXIgcG9zc2liaWxpdGllcyBoZXJlIGFyZToKLSAgIG5hbm9zbGVl cCgpLCByZXBvcnRlZGx5IGRlZmluZWQgaW4gUE9TSVguNC4KLSAgIHNnaW5hcCgpLCBJUklYIG9u bHkgKGJhY2sgdG8gd2hhdCBJUklYIHZlcnNpb24gSSBkb24ndCBrbm93KS4KLSovCi0jaWZkZWYg UGxhbjkKLSAgICByZXR1cm4gX1NMRUVQKG0pOwotI2Vsc2UKLSNpZmRlZiBCRU9TT1JCRUJPWAot ICAgIHNub296ZShtKjEwMDApOwotI2Vsc2UgLyogQkVPU09SQkVCT1ggKi8KLSNpZmRlZiBTRUxF Q1QKLSAgICBpbnQgdDEsIHg7Ci0gICAgZGVidWcoRjEwMSwibXNsZWVwIFNFTEVDVCAxIiwiIixt KTsKLSAgICBpZiAobSA8PSAwKSByZXR1cm4oMCk7Ci0gICAgaWYgKG0gPj0gMTAwMCkgewkJCS8q IENhdGNoIGJpZyBhcmd1bWVudHMuICovCi0Jc2xlZXAobS8xMDAwKTsKLQltID0gbSAlIDEwMDA7 Ci0JaWYgKG0gPCAxMCkgcmV0dXJuKDApOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAg U0VMRUNUIDIiLCIiLG0pOwotI2lmZGVmIEJFTExWMTAKLSAgICB4ID0gc2VsZWN0KCAwLCAoZmRf c2V0ICopMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCBtICk7Ci0gICAgZGVidWcoRjEwMSwi bXNsZWVwIEJFTExWMTAgc2VsZWN0IiwiIix4KTsKLSNlbHNlIC8qIEJFTExWMTAgKi8KLSNpZmRl ZiBIUFVYOQotICAgIGdldHRpbWVvZmRheSgmdHYsICZ0eik7Ci0jZWxzZQotCi0jaWZuZGVmIENP SEVSRU5UCi0jaWZkZWYgR1RPRE9ORUFSRwotICAgIGlmIChnZXR0aW1lb2ZkYXkoJnR2KSA8IDAp Ci0jZWxzZQotI2lmZGVmIFBUWAotICAgIGlmIChnZXR0aW1lb2ZkYXkoJnR2LE5VTEwpIDwgMCkK LSNlbHNlCi0jaWZkZWYgTk9USU1FWk9ORQotICAgIGlmIChnZXR0aW1lb2ZkYXkoJnR2LCBOVUxM KSA8IDApCS8qIHdvbmRlciB3aGF0IHRoaXMgZG9lcy4uLiAqLwotI2Vsc2UKLSAgICBpZiAoZ2V0 dGltZW9mZGF5KCZ0diwgJnR6KSA8IDApCi0jZW5kaWYgLyogTk9USU1FWk9ORSAqLwotI2VuZGlm IC8qIFBUWCAqLwotI2VuZGlmIC8qIEdUT0RPTkVBUkcgKi8KLSAgICAgIHJldHVybigtMSk7Ci0g ICAgdDEgPSB0di50dl9zZWM7ICAgICAgICAgICAgICAgICAgICAgLyogU2Vjb25kcyAqLwotI2Vu ZGlmIC8qIENPSEVSRU5UICovCi0jZW5kaWYgLyogSFBVWDkgKi8KLSAgICB0di50dl9zZWMgPSAw OyAgICAgICAgICAgICAgICAgICAgICAvKiBVc2Ugc2VsZWN0KCkgKi8KLSAgICB0di50dl91c2Vj ID0gbSAqIDEwMDBMOwotI2lmZGVmIEJTRDQ0Ci0gICAgeCA9IHNlbGVjdCggMCwgKGZkX3NldCAq KTAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgJnR2ICk7Ci0gICAgZGVidWcoRjEwMSwibXNs ZWVwIEJTRDQ0IHNlbGVjdCIsIiIseCk7Ci0jZWxzZSAvKiBCU0Q0NCAqLwotI2lmZGVmIF9fbGlu dXhfXwotICAgIHggPSBzZWxlY3QoIDAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgKGZkX3Nl dCAqKTAsICZ0diApOwotICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBfX2xpbnV4X18gc2VsZWN0Iiwi Iix4KTsKLSNlbHNlIC8qIF9fbGludXhfXyAqLwotI2lmZGVmIEJTRDQzCi0gICAgeCA9IHNlbGVj dCggMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgJnR2ICk7Ci0gICAg ZGVidWcoRjEwMSwibXNsZWVwIEJTRDQzIHNlbGVjdCIsIiIseCk7Ci0jZWxzZSAvKiBCU0Q0MyAq LwotI2lmZGVmIFFOWDYKLSAgICB4ID0gc2VsZWN0KCAwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAq KTAsIChmZF9zZXQgKikwLCAmdHYgKTsKLSAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgUU5YNiBzZWxl Y3QiLCIiLHgpOwotI2Vsc2UgLyogUU5YNiAqLwotI2lmZGVmIFFOWAotICAgIHggPSBzZWxlY3Qo IDAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0diApOwotICAgIGRl YnVnKEYxMDEsIm1zbGVlcCBRTlggc2VsZWN0IiwiIix4KTsKLSNlbHNlIC8qIFFOWCAqLwotI2lm ZGVmIENPSEVSRU5UCi0gICAgeCA9IHNlbGVjdCggMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikw LCAoZmRfc2V0ICopMCwgJnR2ICk7Ci0gICAgZGVidWcoRjEwMSwibXNsZWVwIENPSEVSRU5UIHNl bGVjdCIsIiIseCk7Ci0jZWxzZSAvKiBDT0hFUkVOVCAqLwotI2lmZGVmIEhQVVgxMDAwCQkJCS8q IDEwLjAwIG9ubHksIG5vdCAxMC4xMCBvciBsYXRlciAqLwotICAgIHggPSBzZWxlY3QoIDAsIChp bnQgKikwLCAoaW50ICopMCwgKGludCAqKTAsICZ0diApOwotICAgIGRlYnVnKEYxMDEsIm1zbGVl cCBIUC1VWCAxMC4wMCBzZWxlY3QiLCIiLHgpOwotI2Vsc2UgLyogSFBVWDEwMDAgKi8KLSNpZmRl ZiBTVlI0Ci0gICAgeCA9IHNlbGVjdCggMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAoZmRf c2V0ICopMCwgJnR2ICk7Ci0gICAgZGVidWcoRjEwMSwibXNsZWVwIFNWUjQgc2VsZWN0IiwiIix4 KTsKLSNlbHNlIC8qIFNWUjQgKi8KLSNpZmRlZiBPU0Y0MAotICAgIHggPSBzZWxlY3QoIDAsIChm ZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0diApOwotICAgIGRlYnVnKEYx MDEsIm1zbGVlcCBPU0Y0MCBzZWxlY3QiLCIiLHgpOwotI2Vsc2UgLyogT1NGNDAgKi8KLSNpZmRl ZiBQVFgKLSAgICB4ID0gc2VsZWN0KCAwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsIChmZF9z ZXQgKikwLCAmdHYgKTsKLSAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgT1NGNDAgc2VsZWN0IiwiIix4 KTsKLSNlbHNlCi0gICAgeCA9IHNlbGVjdCggMCwgKGludCAqKTAsIChpbnQgKikwLCAoaW50ICop MCwgJnR2ICk7Ci0gICAgZGVidWcoRjEwMSwibXNsZWVwIGNhdGNoLWFsbCBzZWxlY3QiLCIiLHgp OwotI2VuZGlmIC8qIFBUWCAqLwotI2VuZGlmIC8qIE9TRjQwICovCi0jZW5kaWYgLyogSFAxMDAw ICovCi0jZW5kaWYgLyogU1ZSNCAqLwotI2VuZGlmIC8qIENPSEVSRU5UICovCi0jZW5kaWYgLyog UU5YICovCi0jZW5kaWYgLyogUU5YNiAqLwotI2VuZGlmIC8qIEJTRDQzICovCi0jZW5kaWYgLyog X19saW51eF9fICovCi0jZW5kaWYgLyogQlNENDQgKi8KLSNlbmRpZiAvKiBCRUxMVjEwICovCi0g ICAgcmV0dXJuKDApOwotCi0jZWxzZQkJCQkJLyogTm90IFNFTEVDVCAqLwotI2lmZGVmIENLX1BP TEwJCQkJLyogV2UgaGF2ZSBwb2xsKCkgKi8KLSAgICBzdHJ1Y3QgcG9sbGZkIHBmZDsJCQkvKiBT dXBwbHkgYSB2YWxpZCBhZGRyZXNzIGZvciBwb2xsKCkgKi8KLQotI2lmZGVmIE9EVDMwCQkJCS8q IEJ1dCBpbiBTQ08gT0RUIDMuMCAqLwotI2lmZGVmIE5BUAkJCQkvKiB3ZSBzaG91bGQgdXNlIG5h cCgpIGluc3RlYWQgKi8KLSAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgT0RUIDMuMCBOQVAiLCIiLG0p OyAvKiBiZWNhdXNlIHVzaW5nIHBvbGwoKSBoZXJlICovCi0gICAgbmFwKChsb25nKW0pOwkJCSAg IC8qIHNlZW1zIHRvIGJyZWFrIGRpYWxpbmcuICovCi0gICAgcmV0dXJuKDApOwotI2Vsc2UKLSAg ICBkZWJ1ZyhGMTAxLCJtc2xlZXAgT0RUIDMuMCBQT0xMIiwiIixtKTsKLSAgICBwb2xsKCZwZmQs IDAsIG0pOwotICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBOQVAgKi8KLSNlbHNlCi0gICAgZGVi dWcoRjEwMSwibXNsZWVwIFBPTEwiLCIiLG0pOwotICAgIHBvbGwoJnBmZCwgMCwgbSk7Ci0gICAg cmV0dXJuKDApOwotI2VuZGlmIC8qIE9EVDMwICovCi0KLS8qCi0gIFdlIGNvdWxkIGhhbmRsZSB0 aGUgYWJvdmUgbW9yZSBjbGVhbmx5IGJ5IGp1c3QgbGV0dGluZyBuYXAoKSBhbHdheXMKLSAgdGFr ZSBwcmVjZWRlbmNlIG92ZXIgcG9sbCgpIGluIHRoaXMgcm91dGluZSwgYnV0IHRoZXJlIGlzIG5v IHdheSB0byBrbm93Ci0gIHdoZXRoZXIgdGhhdCB3b3VsZCBicmVhayBzb21ldGhpbmcgZWxzZS4K LSovCi0KLSNlbHNlCQkJCQkvKiBOb3QgUE9MTCAqLwotI2lmZGVmIFVTTEVFUAotLyoKLSAgIlRo aXMgcm91dGluZSBpcyBpbXBsZW1lbnRlZCB1c2luZyBzZXRpdGltZXIoMik7IGl0IHJlcXVpcmVz IGVpZ2h0Ci0gIHN5c3RlbSBjYWxscy4uLiIuICBJbiBvdGhlciB3b3JkcywgaXQgbWlnaHQgdGFr ZSA1IG1pbnV0ZXMgdG8gc2xlZXAKLSAgMTAgbWlsbGlzZWNvbmRzLi4uCi0qLwotICAgIGRlYnVn KEYxMDEsIm1zbGVlcCBVU0xFRVAiLCIiLG0pOwotICAgIGlmIChtID49IDEwMDApIHsJCQkvKiBD YXRjaCBiaWcgYXJndW1lbnRzLiAqLwotCXNsZWVwKG0vMTAwMCk7Ci0JbSA9IG0gJSAxMDAwOwot CWlmIChtIDwgMTApIHJldHVybigwKTsKLSAgICB9Ci0gICAgdXNsZWVwKCh1bnNpZ25lZCBpbnQp KG0gKiAxMDAwKSk7Ci0gICAgcmV0dXJuKDApOwotI2Vsc2UKLSNpZmRlZiBhZWdpcwotICAgIHRp bWVfJGNsb2NrX3QgZHVyOwotICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBhZWdpcyIsIiIsbSk7Ci0g ICAgZHVyLmMyLmhpZ2gxNiA9IDA7Ci0gICAgZHVyLmMyLmxvdzMyICA9IDI1MCAqIG07IC8qIG9u ZSBtaWxsaXNlY29uZCA9IDI1MCBmb3VyIG1pY3Jvc2Vjb25kIHRpY2tzICovCi0gICAgdGltZV8k d2FpdCh0aW1lXyRyZWxhdGl2ZSwgZHVyLCBzdCk7Ci0gICAgcmV0dXJuKDApOwotI2Vsc2UKLSNp ZmRlZiBQUk9WWDEKLSAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgVmVuaXgiLCIiLG0pOwotICAgIGlm IChtIDw9IDApIHJldHVybigwKTsKLSAgICBzbGVlcCgtKChtICogNjAgKyA1MDApIC8gMTAwMCkp OwotICAgIHJldHVybigwKTsKLSNlbHNlCi0jaWZkZWYgTkFQCi0gICAgZGVidWcoRjEwMSwibXNs ZWVwIE5BUCIsIiIsbSk7Ci0gICAgbmFwKChsb25nKW0pOwotICAgIHJldHVybigwKTsKLSNlbHNl Ci0jaWZkZWYgQVRUU1YKLSNpZm5kZWYgQlNENDQKLSAgICBleHRlcm4gbG9uZyB0aW1lcygpOwkJ LyogT3IgI2luY2x1ZGUgPHRpbWVzLmg+ID8gKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotICAgIGxv bmcgdDEsIHQyLCB0YXJyYXlbNF07Ci0gICAgaW50IHQzOwotICAgIGNoYXIgKmNwID0gZ2V0ZW52 KCJIWiIpOwotICAgIGludCBDTE9DS19USUNLOwotICAgIGludCBoZXJ0ejsKLQotICAgIGlmIChj cCAmJiAoaGVydHogPSBhdG9pKGNwKSkpIHsKLSAgICAgICAgQ0xPQ0tfVElDSyAgPSAxMDAwIC8g aGVydHo7Ci0gICAgfSBlbHNlIHsJCQkJLyogcHJvYmFibHkgc2luZ2xlIHVzZXIgbW9kZSAqLwot I2lmZGVmIEhaCi0gICAgICAgIENMT0NLX1RJQ0sgID0gMTAwMCAvIEhaOwotI2Vsc2UKLQlzdGF0 aWMgd2FybmVkID0gMDsKLQkvKiBIWiBhbHdheXMgZXhpc3RzIGluLCBmb3IgaW5zdGFuY2UsIFND TyBYZW5peCwgc28geW91IGRvbid0IGhhdmUgdG8KLQkgKiBtYWtlIHNwZWNpYWwgI2lmZGVmcyBm b3IgWEVOSVggaGVyZSwgbGlrZSBpbiB2ZXIgNEYuIEFsc28sIGlmIHlvdQotCSAqIGhhdmUgWGVu aXgsIHlvdSBoYXZlIHNob3VsZCBoYXZlIG5hcCgpLCBzbyB0aGUgYmVzdCBpcyB0byB1c2UgLURO QVAKLQkgKiBpbiB0aGUgbWFrZWZpbGUuIE1vc3Qgc3lzdGVtcyBoYXZlIEhaLgotCSAqLwotCUNM T0NLX1RJQ0sgPSAxNzsJCS8qIDEvNjAgc2VjICovCi0JaWYgKCF3YXJuZWQpIHsKLSAgICAgICAg ICBwcmludGYoIndhcm5pbmc6IGVudmlyb25tZW50IHZhcmlhYmxlIEhaIGJhZC4uLiB1c2luZyBI Wj0lZFxyXG4iLAotCQkgMTAwMCAvIENMT0NLX1RJQ0spOwotICAgICAgICAgIHdhcm5lZCA9IDE7 Ci0JfQotI2VuZGlmIC8qICFIWiAqLwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgQVRU U1YiLCIiLG0pOwotICAgIGlmIChtIDw9IDApIHJldHVybigwKTsKLSAgICBpZiAobSA+PSAxMDAw KSB7CQkJLyogQ2F0Y2ggYmlnIGFyZ3VtZW50cy4gKi8KLQlzbGVlcChtLzEwMDApOwotCW0gPSBt ICUgMTAwMDsKLQlpZiAobSA8IDEwKSByZXR1cm4oMCk7Ci0gICAgfQotICAgIGlmICgodDEgPSB0 aW1lcyh0YXJyYXkpKSA8IDApIHJldHVybigtMSk7Ci0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAg aWYgKCh0MiA9IHRpbWVzKHRhcnJheSkpIDwgMCkgcmV0dXJuKC0xKTsKLSAgICAgICAgdDMgPSAo KGludCkodDIgLSB0MSkpICogQ0xPQ0tfVElDSzsKLSAgICAgICAgaWYgKHQzID4gbSkgcmV0dXJu KHQzKTsKLSAgICB9Ci0jZWxzZSAvKiBOb3QgQVRUU1YgKi8KLSNpZmRlZiBNU0xGVElNRQkJCQkv KiBVc2UgZnRpbWUoKSBsb29wLi4uICovCi0gICAgaW50IHQxLCB0MyA9IDA7Ci0gICAgZGVidWco RjEwMSwibXNsZWVwIE1TTEZUSU1FIiwiIixtKTsKLSAgICBpZiAobSA8PSAwKSByZXR1cm4oMCk7 Ci0gICAgaWYgKG0gPj0gMTAwMCkgewkJCS8qIENhdGNoIGJpZyBhcmd1bWVudHMuICovCi0Jc2xl ZXAobS8xMDAwKTsKLQltID0gbSAlIDEwMDA7Ci0JaWYgKG0gPCAxMCkgcmV0dXJuKDApOwotICAg IH0KLSNpZmRlZiBRTlgKLSAgICBmdGltZSgmZnRwKTsJCQkvKiB2b2lkIGZ0aW1lKCkgaW4gUU5Y ICovCi0jZWxzZQotICAgIGlmIChmdGltZSgmZnRwKSA8IDApIHJldHVybigtMSk7CS8qIEdldCBi YXNlIHRpbWUuICovCi0jZW5kaWYgLyogUU5YICovCi0gICAgdDEgPSAoKGZ0cC50aW1lICYgMHhm ZikgKiAxMDAwKSArIGZ0cC5taWxsaXRtOwotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIGZ0aW1l KCZmdHApOwkJCS8qIEdldCBjdXJyZW50IHRpbWUgYW5kIGNvbXBhcmUuICovCi0gICAgICAgIHQz ID0gKCgoZnRwLnRpbWUgJiAweGZmKSAqIDEwMDApICsgZnRwLm1pbGxpdG0pIC0gdDE7Ci0gICAg ICAgIGlmICh0MyA+IG0pIHJldHVybigwKTsKLSAgICB9Ci0jZWxzZQotLyogVGhpcyBpbmNsdWRl cyB0cnVlIFBPU0lYLCB3aGljaCBoYXMgbm8gd2F5IHRvIGRvIHRoaXMuICovCi0gICAgZGVidWco RjEwMSwibXNsZWVwIGJ1c3kgbG9vcCIsIiIsbSk7Ci0gICAgaWYgKG0gPj0gMTAwMCkgewkJCS8q IENhdGNoIGJpZyBhcmd1bWVudHMuICovCi0Jc2xlZXAobS8xMDAwKTsKLQltID0gbSAlIDEwMDA7 Ci0JaWYgKG0gPCAxMCkgcmV0dXJuKDApOwotICAgIH0KLSAgICBpZiAobSA+IDApIHdoaWxlICht ID4gMCkgbS0tOwkvKiBKdXN0IGEgZHVtYiBidXN5IGxvb3AgKi8KLSAgICByZXR1cm4oMCk7Ci0j ZW5kaWYgLyogTVNMRlRJTUUgKi8KLSNlbmRpZiAvKiBBVFRTViAqLwotI2VuZGlmIC8qIE5BUCAq LwotI2VuZGlmIC8qIFBST1ZYMSAqLwotI2VuZGlmIC8qIGFlZ2lzICovCi0jZW5kaWYgLyogQ0tf UE9MTCAqLwotI2VuZGlmIC8qIFNFTEVDVCAqLwotI2VuZGlmIC8qIEJFT1NPUkJFQk9YICovCi0j ZW5kaWYgLyogVVNMRUVQICovCi0jZW5kaWYgLyogUGxhbjkgKi8KLX0KLQotLyogIFIgVCBJIE0g RSBSIC0tICBSZXNldCBlbGFwc2VkIHRpbWUgY291bnRlciAgKi8KLQotVk9JRAotcnRpbWVyKCkg ewotICAgIHRjb3VudCA9IHRpbWUoICh0aW1lX3QgKikgMCApOwotfQotCi0KLS8qICBHIFQgSSBN IEUgUiAtLSAgR2V0IGN1cnJlbnQgdmFsdWUgb2YgZWxhcHNlZCB0aW1lIGNvdW50ZXIgaW4gc2Vj b25kcyAgKi8KLQotaW50Ci1ndGltZXIoKSB7Ci0gICAgaW50IHg7Ci0gICAgeCA9IChpbnQpICh0 aW1lKCAodGltZV90ICopIDAgKSAtIHRjb3VudCk7Ci0gICAgZGVidWcoRjEwMSwiZ3RpbWVyIiwi Iix4KTsKLSAgICByZXR1cm4oICh4IDwgMCkgPyAwIDogeCApOwotfQotCi0jaWZkZWYgR0ZUSU1F UgotLyoKLSAgRmxvYXRpbmctcG9pbnQgdGltZXJzLiAgUmVxdWlyZSBub3Qgb25seSBmbG9hdGlu ZyBwb2ludCBzdXBwb3J0LCBidXQKLSAgYWxzbyBnZXR0aW1lb2ZkYXkoKS4KLSovCi1zdGF0aWMg c3RydWN0IHRpbWV2YWwgdHplcm87Ci0KLVZPSUQKLXJmdGltZXIoKSB7Ci0jaWZkZWYgR1RPRE9O RUFSRwkJCS8qIEFjY291bnQgZm9yIE1vdCdzIGRlZmluaXRpb24gKi8KLSAgICAoVk9JRCkgZ2V0 dGltZW9mZGF5KCZ0emVybyk7Ci0jZWxzZQotICAgIChWT0lEKSBnZXR0aW1lb2ZkYXkoJnR6ZXJv LCAoc3RydWN0IHRpbWV6b25lICopMCk7Ci0jZW5kaWYgLyogR1RPRE9ORUFSRyAqLwotfQotCi1D S0ZMT0FUCi1nZnRpbWVyKCkgewotICAgIHN0cnVjdCB0aW1ldmFsIHRub3csIHRkZWx0YTsKLSAg ICBDS0ZMT0FUIHM7Ci0jaWZkZWYgREVCVUcKLSAgICBjaGFyIGZwYnVmWzY0XTsKLSNlbmRpZiAv KiBERUJVRyAqLwotI2lmZGVmIEdUT0RPTkVBUkcJCQkvKiBBY2NvdW50IGZvciBNb3QncyBkZWZp bml0aW9uICovCi0gICAgKFZPSUQpIGdldHRpbWVvZmRheSgmdG5vdyk7Ci0jZWxzZQotICAgIChW T0lEKSBnZXR0aW1lb2ZkYXkoJnRub3csIChzdHJ1Y3QgdGltZXpvbmUgKikwKTsKLSNlbmRpZiAv KiBHVE9ET05FQVJHICovCi0KLSAgICB0ZGVsdGEudHZfc2VjID0gdG5vdy50dl9zZWMgLSB0emVy by50dl9zZWM7Ci0gICAgdGRlbHRhLnR2X3VzZWMgPSB0bm93LnR2X3VzZWMgLSB0emVyby50dl91 c2VjOwotCi0gICAgaWYgKHRkZWx0YS50dl91c2VjIDwgMCkgewotCXRkZWx0YS50dl9zZWMtLTsK LQl0ZGVsdGEudHZfdXNlYyArPSAxMDAwMDAwOwotICAgIH0KLSAgICBzID0gKENLRkxPQVQpIHRk ZWx0YS50dl9zZWMgKyAoKENLRkxPQVQpIHRkZWx0YS50dl91c2VjIC8gMTAwMDAwMC4wKTsKLSAg ICBpZiAocyA8IEdGTUlOVElNRSkKLSAgICAgIHMgPSBHRk1JTlRJTUU7Ci0jaWZkZWYgREVCVUcK LSAgICBpZiAoZGVibG9nKSB7Ci0Jc3ByaW50ZihmcGJ1ZiwiJWYiLHMpOwotCWRlYnVnKEYxMTAs ImdmdGltZXIiLGZwYnVmLDApOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotICAgIHJldHVy bihzKTsKLX0KLSNlbmRpZiAvKiBHRlRJTUVSICovCi0KLS8qICBaIFQgSSBNIEUgIC0tICBSZXR1 cm4gYXNjdGltZSgpLWZvcm1hdCBkYXRlL3RpbWUgc3RyaW5nICAqLwotLyoKLSAgTk9URTogYXMg YSBzaWRlIGVmZmVjdCBvZiBjYWxsaW5nIHRoaXMgcm91dGluZSwgd2UgY2FuIGFsc28gc2V0IHRo ZQotICBmb2xsb3dpbmcgdHdvIHZhcmlhYmxlcywgZ2l2aW5nIHRoZSBtaWNyby0gYW5kIG1pbGxp c2Vjb25kcyAoZnJhY3Rpb25zIG9mCi0gIHNlY29uZHMpIG9mIHRoZSBjbG9jayB0aW1lLiAgQ3Vy cmVudGx5IHRoaXMgaXMgZG9uZSBvbmx5IGluIEJTRC1iYXNlZCBidWlsZHMKLSAgdGhhdCB1c2Ug Z2V0dGltZW9mZGF5KCkuICBXaGVuIHRoZXNlIHZhcmlhYmxlcyBhcmUgbm90IGZpbGxlZCBpbiwg dGhleSBhcmUKLSAgbGVmdCB3aXRoIGEgdmFsdWUgb2YgLTFMLgotKi8KLXN0YXRpYyBjaGFyIGFz Y3RtYnVmWzY0XTsKLQotVk9JRAotenRpbWUocykgY2hhciAqKnM7IHsKLQotI2lmZGVmIEdGVElN RVIKLS8qCi0gIFRoZSBnZXR0aW1lb2ZkYXkoKSBtZXRob2QsIHdoaWNoIGFsc28gc2V0cyB6dG1z ZWMgYW5kIHp0dXNlYywgd29ya3MgZm9yCi0gIGFsbCBHRlRJTUVSIGJ1aWxkcy4gIE5PVEU6IHp0 bXNlYyBhbmQgenR1c2VjIGFyZSBkZWZpbmVkIGluIGNrY21haS5jLAotICBhbmQgZXh0ZXJuIGRl Y2xhcmF0aW9ucyBmb3IgdGhlbSBhcmUgaW4gY2tjZGViLmg7IHRodXMgdGhleSBhcmUKLSAgZGVj bGFyZWQgaW4gdGhpcyBmaWxlIGJ5IGluY2x1c2lvbiBvZiBja2NkZWIuaC4KLSovCi0gICAgY2hh ciAqYXNjdGltZSgpOwotICAgIHN0cnVjdCB0bSAqbG9jYWx0aW1lKCk7Ci0gICAgc3RydWN0IHRt ICp0cDsKLSAgICB6dG1zZWMgPSAtMUw7Ci0gICAgenR1c2VjID0gLTFMOwotCi0gICAgaWYgKCFz KQotICAgICAgZGVidWcoRjEwMCwienRpbWUgcz09TlVMTCIsIiIsMCk7Ci0KLSNpZmRlZiBHVE9E T05FQVJHCi0gICAgLyogTm8gMm5kIGFyZyBpbiBNb3Rvcm9sYSBTVjg4IGFuZCBzb21lIG90aGVy cyAqLwotICAgIGlmIChnZXR0aW1lb2ZkYXkoJnR2KSA+IC0xKQotI2Vsc2UKLSNpZm5kZWYgQ09I RVJFTlQKLSNpZmRlZiBQVFgKLSAgICBpZiAoZ2V0dGltZW9mZGF5KCZ0dixOVUxMKSA+IC0xKQot I2Vsc2UKLSNpZmRlZiBOT1RJTUVaT05FCi0gICAgaWYgKGdldHRpbWVvZmRheSgmdHYsIE5VTEwp ID4gLTEpCS8qIHdvbmRlciB3aGF0IHRoaXMgZG9lcy4uLiAqLwotI2Vsc2UKLSAgICBpZiAoZ2V0 dGltZW9mZGF5KCZ0diwgJnR6KSA+IC0xKQotI2VuZGlmIC8qIE5PVElNRVpPTkUgKi8KLSNlbmRp ZiAvKiBQVFggKi8KLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotI2VuZGlmIC8qIEdUT0RPTkVBUkcg Ki8KLSAgICAgIHsJCQkJCS8qIEZpbGwgaW4gdG0gc3RydWN0ICovCi0JenR1c2VjID0gdHYudHZf dXNlYzsJCS8qIE1pY3Jvc2Vjb25kcyAqLwotCXp0bXNlYyA9IHp0dXNlYyAvIDEwMDBMOwkvKiBN aWxsaXNlY29uZHMgKi8KLSNpZmRlZiBIUFVYOQotCXsKLQkgICAgdGltZV90IHp6OwotCSAgICB6 eiA9IHR2LnR2X3NlYzsKLQkgICAgdHAgPSBsb2NhbHRpbWUoJnp6KTsJLyogQ29udmVydCB0byBs b2NhbCB0aW1lICovCi0JfQotI2Vsc2UKLSNpZmRlZiBIUFVYMTAwMAotCXsKLQkgICAgdGltZV90 IHp6OwotCSAgICB6eiA9IHR2LnR2X3NlYzsKLQkgICAgdHAgPSBsb2NhbHRpbWUoJnp6KTsKLQl9 Ci0jZWxzZQotI2lmZGVmIExJTlVYCi0JeyAgIC8qIGF2b2lkIHVuYWxpZ25lZCBhY2Nlc3MgdHJh cCBvbiA2NC1iaXQgcGxhdGZvcm1zICovCi0JICAgIHRpbWVfdCB6ejsKLQkgICAgenogPSB0di50 dl9zZWM7Ci0JICAgIHRwID0gbG9jYWx0aW1lKCZ6eik7Ci0JfQotI2Vsc2UKLSNpZmRlZiBNQUNP U1gKLQl0cCA9IGxvY2FsdGltZSgodGltZV90ICopJnR2LnR2X3NlYyk7IC8qIENvbnZlcnQgdG8g bG9jYWwgdGltZSAqLwotI2Vsc2UKLQl0cCA9IGxvY2FsdGltZSgmdHYudHZfc2VjKTsKLSNlbmRp ZiAvKiBNQUNPU1ggKi8KLSNlbmRpZiAvKiBMSU5VWCAqLwotI2VuZGlmIC8qIEhQVVgxMDAwICov Ci0jZW5kaWYgLyogSFBVWDkgKi8KLQlpZiAocykgewotCSAgICBjaGFyICogczI7Ci0JICAgIHMy ID0gYXNjdGltZSh0cCk7CQkvKiBDb252ZXJ0IHJlc3VsdCB0byBBU0NJSSBzdHJpbmcgKi8KLQkg ICAgYXNjdG1idWZbMF0gPSAnXDAnOwotCSAgICBpZiAoczIpIGNrc3RybmNweShhc2N0bWJ1Zixz Miw2NCk7Ci0JICAgICpzID0gYXNjdG1idWY7Ci0JICAgIGRlYnVnKEYxMTEsInp0aW1lIEdGVElN RVIgZ2V0dGltZW9mZGF5Iiwqcyx6dHVzZWMpOwotCX0KLSAgICB9Ci0jZWxzZSAgLyogTm90IEdG VElNRVIgKi8KLQotI3VuZGVmIFpUSU1FVjcJCQkJLyogV2hpY2ggc3lzdGVtcyBuZWVkIHRvIHVz ZSAqLwotI2lmZGVmIENPSEVSRU5UCQkJCS8qIG9sZCBVTklYIFZlcnNpb24gNyB3YXkuLi4gKi8K LSNkZWZpbmUgWlRJTUVWNwotI2VuZGlmIC8qIENPSEVSRU5UICovCi0jaWZkZWYgVE9XRVIxCi0j ZGVmaW5lIFpUSU1FVjcKLSNlbmRpZiAvKiBUT1dFUjEgKi8KLSNpZmRlZiBBTllCU0QKLSNpZm5k ZWYgQlNENDIKLSNkZWZpbmUgWlRJTUVWNwotI2VuZGlmIC8qIEJTRDQyICovCi0jZW5kaWYgLyog QU5ZQlNEICovCi0jaWZkZWYgVjcKLSNpZm5kZWYgTUlOSVgKLSNkZWZpbmUgWlRJTUVWNwotI2Vu ZGlmIC8qIE1JTklYICovCi0jZW5kaWYgLyogVjcgKi8KLSNpZmRlZiBQT1NJWAotI2RlZmluZSBa VElNRVY3Ci0jZW5kaWYgLyogUE9TSVggKi8KLQotI2lmZGVmIEhQVVgxMDIwCi0vKgotICBQcm90 b3R5cGVzIGFyZSBpbiA8dGltZS5oPiwgaW5jbHVkZWQgYWJvdmUuCi0qLwotICAgIHRpbWVfdCBj bG9ja19zdG9yYWdlOwotICAgIGNsb2NrX3N0b3JhZ2UgPSB0aW1lKCh2b2lkICopIDApOwotICAg IGlmIChzKSB7Ci0JKnMgPSBjdGltZSgmY2xvY2tfc3RvcmFnZSk7Ci0JZGVidWcoRjExMCwienRp bWU6IEhQVVggMTAuMjAiLCpzLDApOwotICAgIH0KLSNlbHNlCi0jaWZkZWYgQVRUU1YJCQkJLyog QVQmVCB3YXkgKi8KLS8qICBleHRlcm4gbG9uZyB0aW1lKCk7ICovCQkvKiBUaGVvcmV0aWNhbGx5 IHRoZXNlIHNob3VsZCAqLwotICAgIGNoYXIgKmN0aW1lKCk7CQkJLyogYWxyZWFkeSBiZWVuIGRj bCdkIGluIDx0aW1lLmg+ICovCi0gICAgdGltZV90IGNsb2NrX3N0b3JhZ2U7Ci0gICAgY2xvY2tf c3RvcmFnZSA9IHRpbWUoCi0jaWZkZWYgSVJJWDYwCi0JCQkgKHRpbWVfdCAqKQotI2Vsc2UKLSNp ZmRlZiBCU0Q0NAotCQkJICh0aW1lX3QgKikKLSNlbHNlCi0JCQkgKGxvbmcgKikKLSNlbmRpZiAv KiBCU0Q0NCAqLwotI2VuZGlmIC8qIElSSVg2MCAqLwotCQkJIDAgKTsKLSAgICBpZiAocykgewot CSpzID0gY3RpbWUoICZjbG9ja19zdG9yYWdlICk7Ci0JZGVidWcoRjExMCwienRpbWU6IEFUVFNW IiwqcywwKTsKLSAgICB9Ci0jZWxzZQotI2lmZGVmIFBST1ZYMQkJCQkvKiBWZW5peCAxLjAgd2F5 ICovCi0gICAgaW50IHV0aW1lWzJdOwotICAgIHRpbWUodXRpbWUpOwotICAgIGlmIChzKSB7Ci0J KnMgPSBjdGltZSh1dGltZSk7Ci0JZGVidWcoRjExMCwienRpbWU6IFBST1ZYMSIsKnMsMCk7Ci0g ICAgfQotI2Vsc2UKLSNpZmRlZiBCU0Q0MgkJCQkvKiA0LjJCU0Qgd2F5ICovCi0gICAgY2hhciAq YXNjdGltZSgpOwotICAgIHN0cnVjdCB0bSAqbG9jYWx0aW1lKCk7Ci0gICAgc3RydWN0IHRtICp0 cDsKLSAgICBnZXR0aW1lb2ZkYXkoJnR2LCAmdHopOwotICAgIHp0dXNlYyA9IHR2LnR2X3VzZWM7 Ci0gICAgenRtc2VjID0gdHYudHZfdXNlYyAvIDEwMDBMOwotICAgIHRwID0gbG9jYWx0aW1lKCZ0 di50dl9zZWMpOwotICAgIGlmIChzKSB7Ci0JKnMgPSBhc2N0aW1lKHRwKTsKLQlkZWJ1ZyhGMTEx LCJ6dGltZTogQlNENDIiLCpzLHp0dXNlYyk7Ci0gICAgfQotI2Vsc2UKLSNpZmRlZiBNSU5JWAkJ CQkvKiBNSU5JWCB3YXkgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgZXh0ZXJuIGxvbmcgdGltZSgp OwkJCS8qIEFscmVhZHkgZ290IHRoZXNlIGZyb20gPHRpbWUuaD4gKi8KLSAgICBleHRlcm4gY2hh ciAqY3RpbWUoKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgdGltZV90IHV0aW1lWzJdOwot ICAgIHRpbWUodXRpbWUpOwotICAgIGlmIChzKSB7Ci0JKnMgPSBjdGltZSh1dGltZSk7Ci0JZGVi dWcoRjExMCwienRpbWU6IE1JTklYIiwqcywwKTsKLSAgICB9Ci0jZWxzZQotI2lmZGVmIFpUSU1F VjcJCQkJLyogVGhlIHJlZ3VsYXIgd2F5ICovCi0gICAgY2hhciAqYXNjdGltZSgpOwotICAgIHN0 cnVjdCB0bSAqbG9jYWx0aW1lKCk7Ci0gICAgc3RydWN0IHRtICp0cDsKLSAgICBsb25nIHhjbG9j azsJCQkvKiBvciB1bnNpZ25lZCBsb25nIGZvciBCZUJveD8gKi8KLSAgICB0aW1lKCZ4Y2xvY2sp OwotICAgIHRwID0gbG9jYWx0aW1lKCZ4Y2xvY2spOwotICAgIGlmIChzKSB7Ci0JKnMgPSBhc2N0 aW1lKHRwKTsKLQlkZWJ1ZyhGMTEwLCJ6dGltZTogWlRJTUVWNyIsKnMsMCk7Ci0gICAgfQotI2Vs c2UJCQkJCS8qIENhdGNoLWFsbCBmb3Igb3RoZXJzLi4uICovCi0gICAgaWYgKHMpIHsKLQkqcyA9 ICJEYXkgTW9uIDAwIDAwOjAwOjAwIDAwMDBcbiI7IC8qIER1bW15IGluIGFzY3RpbWUoKSBmb3Jt YXQgKi8KLQlkZWJ1ZyhGMTEwLCJ6dGltZTogY2F0Y2gtYWxsIiwqcywwKTsKLSAgICB9Ci0jZW5k aWYgLyogWlRJTUVWNyAqLwotI2VuZGlmIC8qIE1JTklYICovCi0jZW5kaWYgLyogQlNENDIgKi8K LSNlbmRpZiAvKiBQUk9WWDEgKi8KLSNlbmRpZiAvKiBBVFRTViAqLwotI2VuZGlmIC8qIEhQVVgx MDIwICovCi0jZW5kaWYgLyogR0ZUSU1FUiAqLwotfQotCi0vKiAgQyBPIE4gRyBNICAtLSAgR2V0 IGNvbnNvbGUgdGVybWluYWwgbW9kZXMuICAqLwotCi0vKgotICBTYXZlcyBpbml0aWFsIGNvbnNv bGUgbW9kZSwgYW5kIGVzdGFibGlzaGVzIHZhcmlhYmxlcyBmb3Igc3dpdGNoaW5nCi0gIGJldHdl ZW4gY3VycmVudCAocHJlc3VtYWJseSBub3JtYWwpIG1vZGUgYW5kIG90aGVyIG1vZGVzLgotICBT aG91bGQgYmUgY2FsbGVkIHdoZW4gcHJvZ3JhbSBzdGFydHMsIGJ1dCBvbmx5IGFmdGVyIGVzdGFi bGlzaGluZwotICB3aGV0aGVyIHByb2dyYW0gaXMgaW4gdGhlIGZvcmVncm91bmQgb3IgYmFja2dy b3VuZC4KLSAgUmV0dXJucyAxIGlmIGl0IGdvdCB0aGUgbW9kZXMgT0ssIDAgaWYgaXQgZGlkIG5v dGhpbmcsIC0xIG9uIGVycm9yLgotKi8KLWludAotY29uZ20oKSB7Ci0gICAgaW50IGZkOwotICAg IGlmIChiYWNrZ3JkIHx8ICFpc2F0dHkoMCkpIHsJLyogSWYgaW4gYmFja2dyb3VuZC4gKi8KLQlj Z21mID0gLTE7CQkJLyogRG9uJ3QgYm90aGVyLCBtb2RlcyBhcmUgZ2FyYmFnZS4gKi8KLQlyZXR1 cm4oLTEpOwotICAgIH0KLSAgICBpZiAoY2dtZiA+IDApIHJldHVybigwKTsJCS8qIEFscmVhZHkg ZGlkIHRoaXMuICovCi0gICAgZGVidWcoRjEwMCwiY29uZ20gZ2V0dGluZyBtb2RlcyIsIiIsMCk7 IC8qIE5lZWQgdG8gZG8gaXQuICovCi0jaWZkZWYgYWVnaXMKLSAgICBpb3NfJGlucV90eXBlX3Vp ZChpb3NfJHN0ZGluLCBjb251aWQsIHN0KTsKLSAgICBpZiAoc3QuYWxsICE9IHN0YXR1c18kb2sp IHsKLQlmcHJpbnRmKHN0ZGVyciwgInByb2JsZW0gZ2V0dGluZyBzdGRpbiBvYmp0eXBlOiAiKTsK LQllcnJvcl8kcHJpbnQoc3QpOwotICAgIH0KLSAgICBjb25jcnAgPSAoY29udWlkID09IG1ieF8k dWlkKTsKLSAgICBjb25idWZuID0gMDsKLSNlbmRpZiAvKiBhZWdpcyAqLwotCi0jaWZuZGVmIEJF Qk9YCi0gICAgaWYgKChmZCA9IG9wZW4oQ1RUTkFNLDIpKSA8IDApIHsJLyogT3BlbiBjb250cm9s bGluZyB0ZXJtaW5hbCAqLwotI2lmZGVmIENPTU1FTlQKLQlmcHJpbnRmKHN0ZGVyciwiRXJyb3Ig b3BlbmluZyAlc1xuIiwgQ1RUTkFNKTsKLQlwZXJyb3IoImNvbmdtIik7Ci0JcmV0dXJuKC0xKTsK LSNlbHNlCi0JZmQgPSAwOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB9Ci0jZWxzZQotICAg IGZkID0gMDsKLSNlbmRpZiAvKiAhQkVCT1ggKi8KLSNpZmRlZiBCU0Q0NE9SUE9TSVgKLSAgICBp ZiAodGNnZXRhdHRyKGZkLCZjY29sZCkgPCAwKSByZXR1cm4oLTEpOwotICAgIGlmICh0Y2dldGF0 dHIoZmQsJmNjY2JyaykgPCAwKSByZXR1cm4oLTEpOwotICAgIGlmICh0Y2dldGF0dHIoZmQsJmNj cmF3KSA8IDApIHJldHVybigtMSk7Ci0jZWxzZQotI2lmZGVmIEFUVFNWCi0gICAgaWYgKGlvY3Rs KGZkLFRDR0VUQSwmY2NvbGQpICA8IDApIHJldHVybigtMSk7Ci0gICAgaWYgKGlvY3RsKGZkLFRD R0VUQSwmY2NjYnJrKSA8IDApIHJldHVybigtMSk7Ci0gICAgaWYgKGlvY3RsKGZkLFRDR0VUQSwm Y2NyYXcpICA8IDApIHJldHVybigtMSk7Ci0jaWZkZWYgVlhWRQotICAgIGNjY2Jyay5jX2xpbmUg PSAwOwkJCS8qIFNUVFkgbGluZSAwIGZvciBDREMgVlgvVkUgKi8KLSAgICBpZiAoaW9jdGwoZmQs VENTRVRBLCZjY2NicmspIDwgMCkgcmV0dXJuKC0xKTsKLSAgICBjY3Jhdy5jX2xpbmUgPSAwOwkJ CS8qIFNUVFkgbGluZSAwIGZvciBDREMgVlgvVkUgKi8KLSAgICBpZiAoaW9jdGwoZmQsVENTRVRB LCZjY3JhdykgPCAwKSByZXR1cm4oLTEpOwotI2VuZGlmIC8qIFZYVkUgKi8KLSNlbHNlCi0jaWZk ZWYgQkVMTFYxMAotICAgIGlmIChpb2N0bChmZCxUSU9DR0VUUCwmY2NvbGQpIDwgMCkgcmV0dXJu KC0xKTsKLSAgICBpZiAoaW9jdGwoZmQsVElPQ0dFVFAsJmNjY2JyaykgPCAwKSByZXR1cm4oLTEp OwotICAgIGlmIChpb2N0bChmZCxUSU9DR0VUUCwmY2NyYXcpIDwgMCkgcmV0dXJuKC0xKTsKLSAg ICBkZWJ1ZyhGMTAxLCJjY2Nicmsuc2dfZmxhZ3Mgb3JpZyIsIiIsIGNjY2Jyay5zZ19mbGFncyk7 Ci0jZWxzZQotICAgIGlmIChndHR5KGZkLCZjY29sZCkgPCAwKSByZXR1cm4oLTEpOwotICAgIGlm IChndHR5KGZkLCZjY2NicmspIDwgMCkgcmV0dXJuKC0xKTsKLSAgICBpZiAoZ3R0eShmZCwmY2Ny YXcpIDwgMCkgcmV0dXJuKC0xKTsKLSNlbmRpZiAvKiBCRUxMVjEwICovCi0jZW5kaWYgLyogQVRU U1YgKi8KLSNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KLSNpZmRlZiBzb255X25ld3MJCQkvKiBT b255IE5FV1MgKi8KLSAgICBpZiAoaW9jdGwoZmQsVElPQ0tHRVQsJmttX2NvbikgPCAwKSB7IC8q IEdldCBjb25zb2xlIEthbmppIG1vZGUgKi8KLQlwZXJyb3IoImNvbmdtIGVycm9yIGdldHRpbmcg S2FuamkgbW9kZSIpOwotCWRlYnVnKEYxMDEsImNvbmdtIGVycm9yIGdldHRpbmcgS2FuamkgbW9k ZSIsIiIsMCk7Ci0Ja21fY29uID0gLTE7CQkJLyogTWFrZSBzdXJlIHRoaXMgc3RheXMgdW5kZWZp bmVkLiAqLwotCXJldHVybigtMSk7Ci0gICAgfQotI2VuZGlmIC8qIHNvbnlfbmV3cyAqLwotICAg IGlmIChmZCA+IDApCi0gICAgICBjbG9zZShmZCk7Ci0gICAgY2dtZiA9IDE7CQkJCS8qIEZsYWcg dGhhdCB3ZSBnb3QgdGhlbS4gKi8KLSAgICByZXR1cm4oMSk7Ci19Ci0KLQotc3RhdGljIFZPSUQK LWNvbmdldGJ1Zih4KSBpbnQgeDsgewotICAgIGludCBuOwotICAgIG4gPSBDT05CVUZTSVogLSAo Y29uYnVmcCAtIGNvbmJ1Zik7CS8qIEhvdyBtdWNoIHJvb20gbGVmdCBpbiBidWZmZXI/ICovCi0g ICAgaWYgKHggPiBuKSB7Ci0JZGVidWcoRjEwMSwiY29uZ2V0YnVmIGNoYXIgbG9zcyIsIiIseC1u KTsKLQl4ID0gbjsKLSAgICB9Ci0gICAgeCA9IHJlYWQoMCxjb25idWZwLHgpOwotICAgIGNvbmJ1 Zm4gKz0geDsKLSAgICBkZWJ1ZyhGMTExLCJjb25nZXRidWYgcmVhZGFoZWFkIixjb25idWYseCk7 Ci19Ci0KLQotLyogIEMgTyBOIEMgQiAtLSAgUHV0IGNvbnNvbGUgaW4gY2JyZWFrIG1vZGUuICAq LwotCi0vKiAgUmV0dXJucyAwIGlmIG9rLCAtMSBpZiBub3QgICovCi0KLWludAotI2lmZGVmIENL X0FOU0lDCi1jb25jYihjaGFyIGVzYykKLSNlbHNlCi1jb25jYihlc2MpIGNoYXIgZXNjOwotI2Vu ZGlmIC8qIENLX0FOU0lDICovCi0vKiBjb25jYiAqLyB7Ci0gICAgaW50IHgsIHkgPSAwOwotICAg IGRlYnVnKEYxMDEsImNvbmNiIGNvbnN0YXRlIiwiIixjb25zdGF0ZSk7Ci0gICAgZGVidWcoRjEw MSwiY29uY2IgY2dtZiIsIiIsY2dtZik7Ci0gICAgZGVidWcoRjEwMSwiY29uY2IgYmFja2dyZCIs IiIsYmFja2dyZCk7Ci0KLSAgICBpZiAoY29uc3RhdGUgPT0gQ09OX0NCKQotICAgICAgcmV0dXJu KDApOwotCi0gICAgaWYgKGNnbWYgPCAxKQkJCS8qIERpZCB3ZSBnZXQgY29uc29sZSBtb2RlcyB5 ZXQ/ICovCi0gICAgICBpZiAoIWJhY2tncmQpCQkJLyogTm8sIGluIGJhY2tncm91bmQ/ICovCi0J Y29uZ20oKTsJCQkvKiBObywgdHJ5IHRvIGdldCB0aGVtIG5vdy4gKi8KLSAgICBpZiAoY2dtZiA8 IDEpCQkJLyogU3RpbGwgZG9uJ3QgaGF2ZSB0aGVtPyAqLwotICAgICAgcmV0dXJuKDApOwkJCS8q IEdpdmUgdXAuICovCi0gICAgZGVidWcoRjEwMSwiY29uY2IgdHR5ZmQiLCIiLHR0eWZkKTsKLSAg ICBkZWJ1ZyhGMTAxLCJjb25jYiB0dGZkZmxnIiwiIix0dGZkZmxnKTsKLSNpZmRlZiBDT01NRU5U Ci0gICAgLyogVGhpcyBicmVha3MgcmV0dXJuaW5nIHRvIHByb21wdCBhZnRlciBwcm90b2NvbCB3 aXRoICItbCAwIiAqLwotICAgIC8qIENvbW1lbnRlZCBvdXQgSnVseSAxOTk4ICovCi0gICAgaWYg KHR0ZmRmbGcgJiYgdHR5ZmQgPj0gMCAmJiB0dHlmZCA8IDMpCi0gICAgICByZXR1cm4oMCk7Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIHggPSBpc2F0dHkoMCk7Ci0gICAgZGVidWcoRjEwMSwi Y29uY2IgaXNhdHR5IiwiIix4KTsKLSAgICBpZiAoIXgpIHJldHVybigwKTsJCQkvKiBPbmx5IHdo ZW4gcnVubmluZyBvbiByZWFsIHR0eXMgKi8KLSAgICBkZWJ1ZyhGMTAxLCJjb25jYiB4c3VzcGVu ZCIsIiIseHN1c3BlbmQpOwotICAgIGlmIChiYWNrZ3JkKQkJCS8qIERvIG5vdGhpbmcgaWYgaW4g YmFja2dyb3VuZC4gKi8KLSAgICAgIHJldHVybigwKTsKLSAgICBlc2NjaHIgPSBlc2M7ICAgICAg ICAgICAgICAgICAgICAgICAvKiBNYWtlIHRoaXMgYXZhaWxhYmxlIHRvIG90aGVyIGZucyAqLwot ICAgIGNreGVjaCA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByb2dyYW0gY2FuIGVj aG8gY2hhcmFjdGVycyAqLwotI2lmZGVmIGFlZ2lzCi0gICAgY29uYnVmbiA9IDA7Ci0gICAgaWYg KGNvbmNycCkgcmV0dXJuKHdyaXRlKDEsICJcMDM1XDAwMiIsIDIpKTsKLSAgICBpZiAoY29udWlk ID09IGlucHV0X3BhZF8kdWlkKSB7cGFkXyRyYXcoaW9zXyRzdGRpbiwgc3QpOyByZXR1cm4oMCk7 fQotI2VuZGlmIC8qIGFlZ2lzICovCi0KLSNpZmRlZiBDT0hFUkVOVAotI2RlZmluZSBTVk9SUE9T SVgKLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotCi0jaWZkZWYgUGxhbjkKLSAgICB4ID0gcDljb25j YigpOwotI2Vsc2UKLSNpZm5kZWYgU1ZPUlBPU0lYCQkJLyogQlNELCBWNywgZXRjICovCi0gICAg ZGVidWcoRjEwMSwiY2NjYnJrLnNnX2ZsYWdzIGNvbmNiIDEiLCIiLCBjY2Nicmsuc2dfZmxhZ3Mp OwotICAgIGRlYnVnKEYxMDEsImNvbmNiIHN0dHkgQ0JSRUFLIiwiIiwwKTsKLSAgICBjY2Nicmsu c2dfZmxhZ3MgfD0gKENCUkVBS3xDUk1PRCk7CS8qIFNldCB0byBjaGFyYWN0ZXIgd2FrZXVwLCAq LwotICAgIGNjY2Jyay5zZ19mbGFncyAmPSB+RUNITzsgICAgICAgICAgIC8qIG5vIGVjaG8uICov Ci0gICAgZGVidWcoRjEwMSwiY2NjYnJrLnNnX2ZsYWdzIGNvbmNiIDIiLCIiLCBjY2Nicmsuc2df ZmxhZ3MpOwotICAgIGVycm5vID0gMDsKLS8qCi0gIEJTRCBzdHR5KCkgY2xlYXJzIHRoZSBjb25z b2xlIGJ1ZmZlci4gIFNvIGlmIGFueXRoaW5nIGlzIHdhaXRpbmcgaW4gaXQsCi0gIHdlIGhhdmUg dG8gcmVhZCBpdCBub3cgdG8gYXZvaWQgbG9zaW5nIGl0LgotKi8KLSAgICB4ID0gY29uY2hrKCk7 Ci0gICAgaWYgKHggPiAwKQotICAgICAgY29uZ2V0YnVmKHgpOwotCi0jaWZkZWYgQkVMTFYxMAot ICAgIHggPSBpb2N0bCgwLFRJT0NTRVRQLCZjY2NicmspOwotI2Vsc2UKLSAgICB4ID0gc3R0eSgw LCZjY2NicmspOwotICAgIGRlYnVnKEYxMDEsImNjY2Jyay5zZ19mbGFncyBjb25jYiB4IiwiIiwg eCk7Ci0jZW5kaWYgLyogQkVMTFYxMCAqLwotI2Vsc2UJCQkJCS8qIFN5cyBWIGFuZCBQT1NJWCAq LwotI2lmbmRlZiBPWE9TCi0gICAgZGVidWcoRjEwMSwiY29uY2IgY2NjYnJrLmNfZmxhZyIsIiIs Y2NjYnJrLmNfbGZsYWcpOwotI2lmZGVmIFFOWAotICAgIC8qIERvbid0IG1lc3Mgd2l0aCBJRVhU RU4gKi8KLSAgICBjY2NicmsuY19sZmxhZyAmPSB+KElDQU5PTnxFQ0hPKTsKLSNlbHNlCi0jaWZk ZWYgQ09IRVJFTlQKLSAgICBjY2NicmsuY19sZmxhZyAmPSB+KElDQU5PTnxFQ0hPKTsKLSNlbHNl Ci0gICAgY2NjYnJrLmNfbGZsYWcgJj0gfihJQ0FOT058RUNIT3xJRVhURU4pOwotI2VuZGlmIC8q IENPSEVSRU5UICovCi0jZW5kaWYgLyogUU5YICovCi0gICAgY2NjYnJrLmNfbGZsYWcgfD0gSVNJ RzsJCS8qIEFsbG93IHNpZ25hbHMgaW4gY29tbWFuZCBtb2RlLiAqLwotICAgIGNjY2Jyay5jX2lm bGFnIHw9IElHTkJSSzsJCS8qIEJ1dCBpZ25vcmUgQlJFQUsgc2lnbmFsICovCi0gICAgY2NjYnJr LmNfaWZsYWcgJj0gfkJSS0lOVDsKLQotI2Vsc2UgLyogT1hPUyAqLwotICAgIGRlYnVnKEYxMDAs ImNvbmNiIE9YT1MgaXMgZGVmaW5lZCIsIiIsMCk7Ci0gICAgY2NjYnJrLmNfbGZsYWcgJj0gfihJ Q0FOT058RUNITyk7Ci0gICAgY2NjYnJrLmNfY2NbVkRJU0NBUkRdID0gY2NjYnJrLmNfY2NbVkxO RVhUXSA9IENESVNBQkxFOwotI2VuZGlmIC8qIE9YT1MgKi8KLSNpZmRlZiBDT01NRU5UCi0vKgot ICBCZWxpZXZlIGl0IG9yIG5vdCwgaW4gU0NPIFVOSVgsIFZTVVNQIGlzIGdyZWF0ZXIgdGhhbiBO Q0MsIGFuZCBzbyB0aGlzCi0gIGFycmF5IHJlZmVyZW5jZSBpcyBvdXQgb2YgYm91bmRzLiAgSXQn cyBvbmx5IGEgZGVidWcoKSBjYWxsIHNvIHdobyBuZWVkcyBpdC4KLSovCi0jaWZkZWYgVlNVU1AK LSAgICBkZWJ1ZyhGMTAxLCJjb25jYiBjX2NjW1ZTVVNQXSIsIiIsY2NjYnJrLmNfY2NbVlNVU1Bd KTsKLSNlbmRpZiAvKiBWU1VTUCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNpZm5kZWYgVklO VFIKLSAgICBkZWJ1ZyhGMTAxLCJjb25jYiBjX2NjWzBdIiwiIixjY2NicmsuY19jY1swXSk7Ci0g ICAgY2NjYnJrLmNfY2NbMF0gPSAwMDM7ICAgICAgICAgICAgICAgLyogSW50ZXJydXB0IGNoYXIg aXMgQ29udHJvbC1DICovCi0jZWxzZQotICAgIGRlYnVnKEYxMDEsImNvbmNiIGNfY2NbVklOVFJd IiwiIixjY2NicmsuY19jY1swXSk7Ci0gICAgY2NjYnJrLmNfY2NbVklOVFJdID0gMDAzOwotI2Vu ZGlmIC8qIFZJTlRSICovCi0jaWZuZGVmIFZRVUlUCi0gICAgY2NjYnJrLmNfY2NbMV0gPSBlc2Nj aHI7ICAgICAgICAgICAgLyogZXNjYXBlIGR1cmluZyBwYWNrZXQgbW9kZXMgKi8KLSNlbHNlCi0g ICAgY2NjYnJrLmNfY2NbVlFVSVRdID0gZXNjY2hyOwotI2VuZGlmIC8qIFZRVUlUICovCi0jaWZu ZGVmIFZFT0YKLSAgICBjY2NicmsuY19jY1s0XSA9IDE7Ci0jZWxzZQotI2lmbmRlZiBPWE9TCi0j aWZkZWYgVk1JTgotICAgIGNjY2Jyay5jX2NjW1ZNSU5dID0gMTsKLSNlbmRpZiAvKiBWTUlOICov Ci0jZWxzZSAvKiBPWE9TICovCi0gICAgY2NjYnJrLmNfbWluID0gMTsKLSNlbmRpZiAvKiBPWE9T ICovCi0jZW5kaWYgLyogVkVPRiAqLwotI2lmZGVmIFpJTE9HCi0gICAgY2NjYnJrLmNfY2NbNV0g PSAwOwotI2Vsc2UKLSNpZm5kZWYgVkVPTAotICAgIGNjY2Jyay5jX2NjWzVdID0gMTsKLSNlbHNl Ci0jaWZuZGVmIE9YT1MKLSNpZmRlZiBWVElNRQotICAgIGNjY2Jyay5jX2NjW1ZUSU1FXSA9IDE7 Ci0jZW5kaWYgLyogVlRJTUUgKi8KLSNlbHNlIC8qIE9YT1MgKi8KLSAgICBjY2NicmsuY190aW1l ID0gMTsKLSNlbmRpZiAvKiBPWE9TICovCi0jZW5kaWYgLyogVkVPTCAqLwotI2VuZGlmIC8qIFpJ TE9HICovCi0gICAgZXJybm8gPSAwOwotI2lmZGVmIEJTRDQ0T1JQT1NJWAkJCS8qIFNldCBuZXcg bW9kZXMgKi8KLSAgICB4ID0gdGNzZXRhdHRyKDAsVENTQURSQUlOLCZjY2NicmspOwotI2Vsc2Ug LyogQVRUU1YgKi8gICAgICAJCQkvKiBvciB0aGUgUE9TSVggd2F5ICovCi0gICAgeCA9IGlvY3Rs KDAsVENTRVRBVywmY2NjYnJrKTsJLyogdGhlIFN5cyBWIHdheSAqLwotI2VuZGlmIC8qIEJTRDQ0 T1JQT1NJWCAqLwotI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwotCi0jaWZkZWYgQ09IRVJFTlQKLSN1 bmRlZiBTVk9SUE9TSVgKLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotCi0gICAgZGVidWcoRjEwMSwi Y29uY2IgeCIsIiIseCk7Ci0gICAgZGVidWcoRjEwMSwiY29uY2IgZXJybm8iLCIiLGVycm5vKTsK LQotI2lmZGVmICBWNwotI2lmbmRlZiBNSU5JWAotICAgIGlmIChrbWVtW0NPTl0gPCAwKSB7Ci0g ICAgICAgIHFhZGRyW0NPTl0gPSBpbml0cmF3cSgwKTsKLSAgICAgICAgaWYoKGttZW1bQ09OXSA9 IG9wZW4oIi9kZXYva21lbSIsIDApKSA8IDApIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJy LCAiQ2FuJ3QgcmVhZCAvZGV2L2ttZW0gaW4gY29uY2IuXG4iKTsKLSAgICAgICAgICAgIHBlcnJv cigiL2Rldi9rbWVtIik7Ci0gICAgICAgICAgICBleGl0KDEpOwotICAgICAgICB9Ci0gICAgfQot I2VuZGlmIC8qIE1JTklYICovCi0jZW5kaWYgLyogVjcgKi8KLSNlbmRpZiAvKiBQbGFuOSAqLwot Ci0gICAgaWYgKHggPiAtMSkKLSAgICAgIGNvbnN0YXRlID0gQ09OX0NCOwotCi0gICAgZGVidWco RjEwMSwiY29uY2IgcmV0dXJucyIsIiIseCk7Ci0gICAgcmV0dXJuKHgpOwotfQotCi0vKiAgQyBP IE4gQiBJIE4gIC0tICBQdXQgY29uc29sZSBpbiBiaW5hcnkgbW9kZSAgKi8KLQotLyogIFJldHVy bnMgMCBpZiBvaywgLTEgaWYgbm90ICAqLwotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotY29uYmlu KGNoYXIgZXNjKQotI2Vsc2UKLWNvbmJpbihlc2MpIGNoYXIgZXNjOwotI2VuZGlmIC8qIENLX0FO U0lDICovCi0vKiBjb25iaW4gKi8gIHsKLQotICAgIGludCB4OwotCi0gICAgZGVidWcoRjEwMSwi Y29uYmluIGNvbnN0YXRlIiwiIixjb25zdGF0ZSk7Ci0KLSAgICBpZiAoY29uc3RhdGUgPT0gQ09O X0JJTikKLSAgICAgIHJldHVybigwKTsKLQotICAgIGlmICghaXNhdHR5KDApKSByZXR1cm4oMCk7 ICAgICAgICAgIC8qIG9ubHkgZm9yIHJlYWwgdHR5cyAqLwotICAgIGNvbmdtKCk7CQkJCS8qIEdl dCBtb2RlcyBpZiBuZWNlc3NhcnkuICovCi0gICAgZGVidWcoRjEwMCwiY29uYmluIiwiIiwwKTsK LSAgICBlc2NjaHIgPSBlc2M7ICAgICAgICAgICAgICAgICAgICAgICAvKiBNYWtlIHRoaXMgYXZh aWxhYmxlIHRvIG90aGVyIGZucyAqLwotICAgIGNreGVjaCA9IDE7ICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFByb2dyYW0gY2FuIGVjaG8gY2hhcmFjdGVycyAqLwotI2lmZGVmIGFlZ2lzCi0g ICAgY29uYnVmbiA9IDA7Ci0gICAgaWYgKGNvbmNycCkgcmV0dXJuKHdyaXRlKDEsICJcMDM1XDAw MiIsIDIpKTsKLSAgICBpZiAoY29udWlkID09IGlucHV0X3BhZF8kdWlkKSB7Ci0JcGFkXyRyYXco aW9zXyRzdGRpbiwgc3QpOwotCXJldHVybigwKTsKLSAgICAgIH0KLSNlbmRpZiAvKiBhZWdpcyAq LwotCi0jaWZkZWYgQ09IRVJFTlQKLSNkZWZpbmUgU1ZPUlBPU0lYCi0jZW5kaWYgLyogQ09IRVJF TlQgKi8KLQotI2lmZGVmIFBsYW45Ci0gICAgcmV0dXJuIHA5Y29uYmluKCk7Ci0jZWxzZQotI2lm ZGVmIFNWT1JQT1NJWAotI2lmbmRlZiBPWE9TCi0jaWZkZWYgUU5YCi0gICAgY2NyYXcuY19sZmxh ZyAmPSB+KElTSUd8SUNBTk9OfEVDSE8pOwotI2Vsc2UKLSNpZmRlZiBDT0hFUkVOVAotICAgIGNj cmF3LmNfbGZsYWcgJj0gfihJU0lHfElDQU5PTnxFQ0hPKTsKLSNlbHNlCi0gICAgY2NyYXcuY19s ZmxhZyAmPSB+KElTSUd8SUNBTk9OfEVDSE98SUVYVEVOKTsKLSNlbmRpZiAvKiBDT0hFUkVOVCAq LwotI2VuZGlmIC8qIFFOWCAqLwotI2Vsc2UgLyogT1hPUyAqLwotICAgIGNjcmF3LmNfbGZsYWcg Jj0gfihJU0lHfElDQU5PTnxFQ0hPKTsKLSAgICBjY3Jhdy5jX2NjW1ZESVNDQVJEXSA9IGNjcmF3 LmNfY2NbVkxORVhUXSA9IENESVNBQkxFOwotI2VuZGlmIC8qIE9YT1MgKi8KLSAgICBjY3Jhdy5j X2lmbGFnIHw9IElHTlBBUjsKLS8qCi0gIE5vdGUgdGhhdCBmb3IgdGVybWluYWwgc2Vzc2lvbnMg d2UgZGlzYWJsZSBYb24vWG9mZiBmbG93IGNvbnRyb2wgdG8gYWxsb3cKLSAgdGhlIHBhc3NhZ2Ug XlEgYW5kIF5TIGFzIGRhdGEgY2hhcmFjdGVycyBmb3IgRU1BQ1MsIGFuZCB0byBhbGxvdyBYTU9E RU0KLSAgdHJhbnNmZXJzIHRvIHdvcmsgd2hlbiBDLUtlcm1pdCBpcyBpbiB0aGUgbWlkZGxlLCBl dGMuICBIYXJkd2FyZSBmbG93Ci0gIGNvbnRyb2wsIGlmIGluIHVzZSwgaXMgbm90IGFmZmVjdGVk LgotKi8KLSNpZmRlZiBBVFRTVgotI2lmZGVmIEJTRDQ0Ci0gICAgY2NyYXcuY19pZmxhZyAmPSB+ KElHTkJSS3xJTkxDUnxJR05DUnxJQ1JOTHxJWE9OfElYQU5ZfElYT0ZGCi0gICAgICAgICAgICAg ICAgICAgICAgICB8SU5QQ0t8SVNUUklQKTsKLSNlbHNlCi0gICAgY2NyYXcuY19pZmxhZyAmPSB+ KElHTkJSS3xJTkxDUnxJR05DUnxJQ1JOTHxJVUNMQ3xJWE9OfElYQU5ZfElYT0ZGCi0gICAgICAg ICAgICAgICAgICAgICAgICB8SU5QQ0t8SVNUUklQKTsKLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2Vs c2UgLyogUE9TSVggKi8KLSAgICBjY3Jhdy5jX2lmbGFnICY9IH4oSUdOQlJLfElOTENSfElHTkNS fElDUk5MfElYT058SVhPRkZ8SU5QQ0t8SVNUUklQKTsKLSNlbmRpZiAvKiBBVFRTViAqLwotICAg IGNjcmF3LmNfb2ZsYWcgJj0gfk9QT1NUOwotI2lmZGVmIENPTU1FTlQKLS8qCi0gIFdIQVQgVEhF IEhFQ0sgV0FTIFRISVMgRk9SPwotICBUaGUgQjk2MDAgc2V0dGluZyAob2J2aW91c2x5KSBwcmV2 ZW50cyBDT05ORUNUIGZyb20gd29ya2luZyBhdCBhbnkKLSAgc3BlZWQgb3RoZXIgdGhhbiA5NjAw IHdoZW4geW91IGFyZSBsb2dnZWQgaW4gdG8gdGhlIDczMDAgb24gYSBzZXJpYWwKLSAgbGluZS4g IE1heWJlIHNvbWUgb2YgdGhlIG90aGVyIGZsYWdzIGFyZSBuZWNlc3NhcnkgLS0gaWYgc28sIHB1 dCBiYWNrCi0gIHRoZSBvbmVzIHRoYXQgYXJlIG5lZWRlZC4gIFRoaXMgY29kZSBpcyBzdXBwb3Nl ZCB0byB3b3JrIHRoZSBzYW1lLCBubwotICBtYXR0ZXIgd2hldGhlciB5b3UgYXJlIGxvZ2dlZCBp biB0byB0aGUgNzMwMCBvbiB0aGUgcmVhbCBjb25zb2xlIGRldmljZSwKLSAgb3IgdGhyb3VnaCBh IHNlcmlhbCBwb3J0LgotKi8KLSNpZmRlZiBBVFQ3MzAwCi0gICAgY2NyYXcuY19jZmxhZyA9IENM T0NBTCB8IEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTDsKLSNlbmRpZiAvKiBBVFQ3MzAwICov Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0vKioqIEtlcm1pdCB1c2VkIHRvIHB1dCB0aGUgY29u c29sZSBpbiA4LWJpdCByYXcgbW9kZSwgYnV0IHNvbWUgdXNlcnMgaGF2ZQotICoqKiBwb2ludGVk IG91dCB0aGF0IHRoaXMgc2hvdWxkIG5vdCBiZSBkb25lLCBzaW5jZSBzb21lIHNpdGVzIGFjdHVh bGx5Ci0gKioqIHVzZSB0ZXJtaW5hbHMgd2l0aCBwYXJpdHkgc2V0dGluZ3Mgb24gdGhlaXIgVW5p eCBzeXN0ZW1zLCBhbmQgaWYgd2UKLSAqKiogb3ZlcnJpZGUgdGhlIGN1cnJlbnQgc2V0dGluZ3Mg YW5kIHN0b3AgZG9pbmcgcGFyaXR5LCB0aGVuIHRoZWlyIHRlcm1pbmFscwotICoqKiB3aWxsIGRp c3BsYXkgYmxvdGNoZXMgZm9yIGNoYXJhY3RlcnMgd2hvc2UgcGFyaXR5IGlzIHdyb25nLiAgVGhl cmVmb3JlLAotICoqKiB0aGUgZm9sbG93aW5nIHR3byBsaW5lcyBhcmUgY29tbWVudGVkIG91dCAo TGFycnkgQWZyaW4sIENsZW1zb24gVSk6Ci0gKioqCi0gKioqICAgY2NyYXcuY19jZmxhZyAmPSB+ KFBBUkVOQnxDU0laRSk7Ci0gKioqICAgY2NyYXcuY19jZmxhZyB8PSAoQ1M4fENSRUFEKTsKLSAq KioKLSAqKiogU3lzIElJSS9WIHNpdGVzIHRoYXQgaGF2ZSB0cm91YmxlIHdpdGggdGhpcyBjYW4g cmVzdG9yZSB0aGVzZSBsaW5lcy4KLSAqKiovCi0jaWZuZGVmIFZJTlRSCi0gICAgY2NyYXcuY19j Y1swXSA9IDAwMzsJCS8qIEludGVycnVwdCBjaGFyIGlzIEN0cmwtQyAqLwotI2Vsc2UKLSAgICBj Y3Jhdy5jX2NjW1ZJTlRSXSA9IDAwMzsKLSNlbmRpZiAvKiBWSU5UUiAqLwotI2lmbmRlZiBWUVVJ VAotICAgIGNjcmF3LmNfY2NbMV0gPSBlc2NjaHI7CQkvKiBFc2NhcGUgZHVyaW5nIHBhY2tldCBt b2RlICovCi0jZWxzZQotICAgIGNjcmF3LmNfY2NbVlFVSVRdID0gZXNjY2hyOwotI2VuZGlmIC8q IFZRVUlUICovCi0jaWZuZGVmIFZFT0YKLSAgICBjY3Jhdy5jX2NjWzRdID0gMTsKLSNlbHNlCi0j aWZuZGVmIE9YT1MKLSNpZmRlZiBWTUlOCi0gICAgY2NyYXcuY19jY1tWTUlOXSA9IDE7Ci0jZW5k aWYgLyogVk1JTiAqLwotI2Vsc2UgLyogT1hPUyAqLwotICAgIGNjcmF3LmNfbWluID0gMTsKLSNl bmRpZiAvKiBPWE9TICovCi0jZW5kaWYgLyogVkVPRiAqLwotCi0jaWZkZWYgWklMT0cKLSAgICBj Y3Jhdy5jX2NjWzVdID0gMDsKLSNlbHNlCi0jaWZuZGVmIFZFT0wKLSAgICBjY3Jhdy5jX2NjWzVd ID0gMTsKLSNlbHNlCi0jaWZuZGVmIE9YT1MKLSNpZmRlZiBWVElNRQotICAgIGNjcmF3LmNfY2Nb VlRJTUVdID0gMTsKLSNlbmRpZiAvKiBWVElNRSAqLwotI2Vsc2UgLyogT1hPUyAqLwotICAgIGNj cmF3LmNfdGltZSA9IDE7Ci0jZW5kaWYgLyogT1hPUyAqLwotI2VuZGlmIC8qIFZFT0wgKi8KLSNl bmRpZiAvKiBaSUxPRyAqLwotCi0jaWZkZWYgQlNENDRPUlBPU0lYCi0gICAgeCA9IHRjc2V0YXR0 cigwLFRDU0FEUkFJTiwmY2NyYXcpOwkvKiBTZXQgbmV3IG1vZGVzLiAqLwotI2Vsc2UKLSAgICB4 ID0gaW9jdGwoMCxUQ1NFVEFXLCZjY3Jhdyk7Ci0jZW5kaWYgLyogQlNENDRPUlBPU0lYICovCi0j ZWxzZSAvKiBCZXJrZWxleSwgZXRjLiAqLwotICAgIHggPSBjb25jaGsoKTsJCQkvKiBCZWNhdXNl IHN0dHkoKSBpcyBkZXN0cnVjdGl2ZSAqLwotICAgIGlmICh4ID4gMCkKLSAgICAgIGNvbmdldGJ1 Zih4KTsKLSAgICBjY3Jhdy5zZ19mbGFncyB8PSAoUkFXfFRBTkRFTSk7ICAgICAvKiBTZXQgcmF3 bW9kZSwgWE9OL1hPRkYgKGhhKSAqLwotICAgIGNjcmF3LnNnX2ZsYWdzICY9IH4oRUNIT3xDUk1P RCk7ICAgIC8qIFNldCBjaGFyIHdha2V1cCwgbm8gZWNobyAqLwotI2lmZGVmIEJFTExWMTAKLSAg ICB4ID0gaW9jdGwoMCxUSU9DU0VUUCwmY2NyYXcpOwotI2Vsc2UKLSAgICB4ID0gc3R0eSgwLCZj Y3Jhdyk7Ci0jZW5kaWYgLyogQkVMTFYxMCAqLwotI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwotI2Vu ZGlmIC8qIFBsYW45ICovCi0KLSAgICBpZiAoeCA+IC0xKQotICAgICAgY29uc3RhdGUgPSBDT05f QklOOwotCi0gICAgZGVidWcoRjEwMSwiY29uYmluIHJldHVybnMiLCIiLHgpOwotICAgIHJldHVy bih4KTsKLQotI2lmZGVmIENPSEVSRU5UCi0jdW5kZWYgU1ZPUlBPU0lYCi0jZW5kaWYgLyogQ09I RVJFTlQgKi8KLQotfQotCi0KLS8qICBDIE8gTiBSIEUgUyAgLS0gIFJlc3RvcmUgdGhlIGNvbnNv bGUgdGVybWluYWwgICovCi0KLWludAotY29ucmVzKCkgewotICAgIGludCB4OwotICAgIGRlYnVn KEYxMDEsImNvbnJlcyBjZ21mIiwiIixjZ21mKTsKLSAgICBkZWJ1ZyhGMTAxLCJjb25yZXMgY29u c3RhdGUiLCIiLGNvbnN0YXRlKTsKLQotICAgIGlmIChjZ21mIDwgMSkJCQkvKiBEbyBub3RoaW5n IGlmIG1vZGVzIHVuY2hhbmdlZCAqLwotICAgICAgcmV0dXJuKDApOwotICAgIGlmIChjb25zdGF0 ZSA9PSBDT05fUkVTKQotICAgICAgcmV0dXJuKDApOwotCi0gICAgaWYgKCFpc2F0dHkoMCkpIHJl dHVybigwKTsgICAgICAgICAgLyogb25seSBmb3IgcmVhbCB0dHlzICovCi0gICAgZGVidWcoRjEw MCwiY29ucmVzIGlzYXR0eSBvayIsIiIsMCk7Ci0gICAgY2t4ZWNoID0gMDsgICAgICAgICAgICAg ICAgICAgICAgICAgLyogU3lzdGVtIHNob3VsZCBlY2hvIGNoYXJzICovCi0KLSNpZmRlZiBhZWdp cwotICAgIGNvbmJ1Zm4gPSAwOwotICAgIGlmIChjb25jcnApIHJldHVybih3cml0ZSgxLCAiXDAz NVwwMDEiLCAyKSk7Ci0gICAgaWYgKGNvbnVpZCA9PSBpbnB1dF9wYWRfJHVpZCkgewotCXBhZF8k Y29va2VkKGlvc18kc3RkaW4sIHN0KTsKLQljb25zdGF0ZSA9IENPTl9SRVM7Ci0JcmV0dXJuKDAp OwotICAgIH0KLSNlbmRpZiAvKiBhZWdpcyAqLwotCi0jaWZkZWYgUGxhbjkKLSAgICBwOWNvbnJl cygpOwotI2Vsc2UKLSNpZmRlZiBCU0Q0NE9SUE9TSVgKLSAgICBkZWJ1ZyhGMTAwLCJjb25yZXMg cmVzdG9yaW5nIHRjc2V0YXR0ciIsIiIsMCk7Ci0gICAgeCA9IHRjc2V0YXR0cigwLFRDU0FEUkFJ TiwmY2NvbGQpOwotI2Vsc2UKLSNpZmRlZiBBVFRTVgotICAgIGRlYnVnKEYxMDAsImNvbnJlcyBy ZXN0b3JpbmcgaW9jdGwiLCIiLDApOwotICAgIHggPSBpb2N0bCgwLFRDU0VUQVcsJmNjb2xkKTsK LSNlbHNlIC8qIEJTRCwgVjcsIGFuZCBmcmllbmRzICovCi0jaWZkZWYgc29ueV9uZXdzCQkJLyog U29ueSBORVdTICovCi0gICAgaWYgKGttX2NvbiAhPSAtMSkKLSAgICAgIGlvY3RsKDAsVElPQ0tT RVQsJmttX2Nvbik7CS8qIFJlc3RvcmUgY29uc29sZSBLYW5qaSBtb2RlICovCi0jZW5kaWYgLyog c29ueV9uZXdzICovCi0gICAgbXNsZWVwKDEwMCk7Ci0gICAgZGVidWcoRjEwMCwiY29ucmVzIHJl c3RvcmluZyBzdHR5IiwiIiwwKTsKLSAgICB4ID0gY29uY2hrKCk7CQkJLyogQmVjYXVzZSBzdHR5 KCkgaXMgZGVzdHJ1Y3RpdmUgKi8KLSAgICBpZiAoeCA+IDApCi0gICAgICBjb25nZXRidWYoeCk7 Ci0jaWZkZWYgQkVMTFYxMAotICAgIHggPSBpb2N0bCgwLFRJT0NTRVRQLCZjY29sZCk7Ci0jZWxz ZQotICAgIHggPSBzdHR5KDAsJmNjb2xkKTsKLSNlbmRpZiAvKiBCRUxMVjEwICovCi0jZW5kaWYg LyogQVRUU1YgKi8KLSNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KLSNlbmRpZiAvKiBQbGFuOSAq LwotICAgIGlmICh4ID4gLTEpCi0gICAgICBjb25zdGF0ZSA9IENPTl9SRVM7Ci0KLSAgICBkZWJ1 ZyhGMTAxLCJjb25yZXMgcmV0dXJucyIsIiIseCk7Ci0gICAgcmV0dXJuKHgpOwotfQotCi0vKiAg QyBPIE4gTyBDICAtLSAgT3V0cHV0IGEgY2hhcmFjdGVyIHRvIHRoZSBjb25zb2xlIHRlcm1pbmFs ICAqLwotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotY29ub2MoY2hhciBjKQotI2Vsc2UKLWNvbm9j KGMpIGNoYXIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogY29ub2MgKi8gewotCi0jaWZk ZWYgSUtTRAotICAgIGlmIChpbnNlcnZlciAmJiAhbG9jYWwpCi0gICAgICByZXR1cm4odHRvYyhj KSk7Ci0KLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgaWYgKGluc2VydmVyICYmIFRFTE9QVF9N RShURUxPUFRfRU5DUllQVElPTikpCi0gICAgICAgIGNrX3RuX2VuY3J5cHQoJmMsMSk7Ci0jZW5k aWYgLyogQ0tfRU5DUllQVElPTiAqLwotI2VuZGlmIC8qIElLU0QgKi8KLQotI2lmZGVmIFBsYW45 Ci0gICAgcmV0dXJuIGNvbndyaXRlKCZjLDEpOwotI2Vsc2UKLSAgICByZXR1cm4od3JpdGUoMSwm YywxKSk7Ci0jZW5kaWYgLyogUGxhbjkgKi8KLX0KLQotLyogIEMgTyBOIFggTyAgLS0gIFdyaXRl IHggY2hhcmFjdGVycyB0byB0aGUgY29uc29sZSB0ZXJtaW5hbCAgKi8KLQotaW50Ci1jb254byh4 LHMpIGludCB4OyBjaGFyICpzOyB7Ci0KLSNpZmRlZiBJS1NECi0gICAgaWYgKGluc2VydmVyICYm ICFsb2NhbCkKLSAgICAgIHJldHVybih0dG9sKChDSEFSICopcyx4KSk7Ci0KLSNpZmRlZiBDS19F TkNSWVBUSU9OCi0gICAgaWYgKGluc2VydmVyICYmIFRFTE9QVF9NRShURUxPUFRfRU5DUllQVElP TikpCi0gICAgICAgIGNrX3RuX2VuY3J5cHQocyx4KTsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9O ICovCi0jZW5kaWYgLyogSUtTRCAqLwotCi0jaWZkZWYgUGxhbjkKLSAgICByZXR1cm4oY29ud3Jp dGUocyx4KSk7Ci0jZWxzZQotICAgIHJldHVybih3cml0ZSgxLHMseCkpOwotI2VuZGlmIC8qIFBs YW45ICovCi19Ci0KLS8qICBDIE8gTiBPIEwgIC0tICBXcml0ZSBhIGxpbmUgdG8gdGhlIGNvbnNv bGUgdGVybWluYWwgICovCi0KLWludAotY29ub2wocykgY2hhciAqczsgewotICAgIGludCBsZW47 Ci0gICAgaWYgKCFzKSBzID0gIiI7CQkJLyogQWx3YXlzIGRvIHRoaXMhICovCi0gICAgbGVuID0g c3RybGVuKHMpOwotICAgIGlmIChsZW4gPT0gMCkKLSAgICAgIHJldHVybigwKTsKLQotI2lmZGVm IElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIgJiYgIWxvY2FsKQotICAgICAgcmV0dXJuKHR0b2woKENI QVIgKilzLGxlbikpOwotCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgIGlmIChpbnNlcnZlciAm JiBURUxPUFRfTUUoVEVMT1BUX0VOQ1JZUFRJT04pKSB7Ci0JaWYgKG54cGFja2V0IDwgbGVuKSB7 Ci0JICAgIGlmICh4cGFja2V0KSB7Ci0JCWZyZWUoeHBhY2tldCk7Ci0JCXhwYWNrZXQgPSBOVUxM OwotCQlueHBhY2tldCA9IDA7Ci0JICAgIH0KLQkgICAgbGVuID0gbGVuID4gMTAyNDAgPyBsZW4g OiAxMDI0MDsKLQkgICAgeHBhY2tldCA9IChDSEFSICopbWFsbG9jKGxlbik7Ci0JICAgIGlmICgh eHBhY2tldCkgewotCQlmcHJpbnRmKHN0ZGVyciwidHRvbCBtYWxsb2MgZmFpbHVyZVxuIik7Ci0J CXJldHVybigtMSk7Ci0JICAgIH0gZWxzZQotCSAgICAgIG54cGFja2V0ID0gbGVuOwotCX0KLQlt ZW1jcHkoeHBhY2tldCxzLGxlbik7Ci0JcyA9IChjaGFyICopeHBhY2tldDsKLQlja190bl9lbmNy eXB0KHMsbGVuKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotI2VuZGlmIC8q IElLU0QgKi8KLQotI2lmZGVmIFBsYW45Ci0gICAgcmV0dXJuKGNvbndyaXRlKHMsbGVuKSk7Ci0j ZWxzZQotICAgIHJldHVybih3cml0ZSgxLHMsbGVuKSk7Ci0jZW5kaWYgLyogUGxhbjkgKi8KLX0K LQotLyogIEMgTyBOIE8gTCBBICAtLSAgV3JpdGUgYW4gYXJyYXkgb2YgbGluZXMgdG8gdGhlIGNv bnNvbGUgdGVybWluYWwgKi8KLQotaW50Ci1jb25vbGEocykgY2hhciAqc1tdOyB7Ci0gICAgY2hh ciAqIHA7Ci0gICAgaW50IGksIHg7Ci0KLQotICAgIGlmICghcykgcmV0dXJuKDApOwotICAgIGZv ciAoaSA9IDA7IDsgaSsrKSB7Ci0JcCA9IHNbaV07Ci0JaWYgKCFwKSBwID0gIiI7CQkJLyogTGV0 J3Mgbm90IGR1bXAgY29yZSBzaGFsbCB3ZT8gKi8KLQlpZiAoISpwKQotCSAgYnJlYWs7Ci0jaWZk ZWYgSUtTRAotCWlmIChpbnNlcnZlciAmJiAhbG9jYWwpCi0JICB4ID0gdHRvbCgoQ0hBUiAqKXAs KGludClzdHJsZW4ocCkpOwotCWVsc2UKLSNlbmRpZiAvKiBJS1NEICovCi0JICB4ID0gY29ub2wo cCk7Ci0JaWYgKHggPCAwKQotCSAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgcmV0dXJuKDApOwot fQotCi0vKiAgQyBPIE4gTyBMIEwgIC0tICBPdXRwdXQgYSBzdHJpbmcgZm9sbG93ZWQgYnkgQ1JM RiAgKi8KLQotaW50Ci1jb25vbGwocykgY2hhciAqczsgewotICAgIENIQVIgYnVmWzNdOwotICAg IGJ1ZlswXSA9ICdccic7Ci0gICAgYnVmWzFdID0gJ1xuJzsKLSAgICBidWZbMl0gPSAnXDAnOwot ICAgIGlmICghcykgcyA9ICIiOwotCi0jaWZkZWYgSUtTRAotICAgIGlmIChpbnNlcnZlciAmJiAh bG9jYWwpIHsKLQlpZiAoKnMpIHR0b2woKENIQVIgKilzLChpbnQpc3RybGVuKHMpKTsKLQlyZXR1 cm4odHRvbChidWYsMikpOwotICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0KLSAgICBpZiAoKnMp IGNvbm9sKHMpOwotI2lmZGVmIElLU0QKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgaWYgKGlu c2VydmVyICYmIFRFTE9QVF9NRShURUxPUFRfRU5DUllQVElPTikpCi0gICAgICBja190bl9lbmNy eXB0KChjaGFyICopYnVmLDIpOwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNlbmRpZiAv KiBJS1NEICovCi0KLSNpZmRlZiBQbGFuOQotICAgIHJldHVybihjb253cml0ZShidWYsIDIpKTsK LSNlbHNlCi0gICAgcmV0dXJuKHdyaXRlKDEsYnVmLDIpKTsKLSNlbmRpZiAvKiBQbGFuOSAqLwot fQotCi0vKiAgQyBPIE4gQyBIIEsgIC0tICBSZXR1cm4gaG93IG1hbnkgY2hhcmFjdGVycyBhdmFp bGFibGUgYXQgY29uc29sZSAgKi8KLS8qCi0gIFdlIGNvdWxkIGFsc28gdXNlIHNlbGVjdCgpIGhl cmUgdG8gY292ZXIgYSBmZXcgbW9yZSBzeXN0ZW1zIHRoYXQgYXJlIG5vdAotICBjb3ZlcmVkIGJ5 IGFueSBvZiB0aGUgZm9sbG93aW5nLCBlLmcuIEhQLVVYIDkuMHggb24gdGhlIG1vZGVsIDgwMC4K LSovCi1pbnQKLWNvbmNoaygpIHsKLSAgICBzdGF0aWMgaW50IGNvbnR5cCA9IDA7CQkvKiArMSBm b3IgaXNhdHR5LCAtMSBvdGhlcndpc2UgKi8KLQotICAgIGlmIChjb250eXAgPT0gMCkJCQkvKiBU aGlzIHByZXZlbnRzIHVubmVjZXNzYXJ5ICovCi0gICAgICBjb250eXAgPSAoaXNhdHR5KDApID8g MSA6IC0xKTsJLyogZHVwbGljYXRlZCBjYWxscyB0byBpc2F0dHkoKSAqLwotICAgIGRlYnVnKEYx MDEsImNvbmNoayBjb250eXAiLCIiLGNvbnR5cCk7Ci0gICAgaWYgKGJhY2tncmQgfHwgKGNvbnR5 cCA8IDApKQotICAgICAgcmV0dXJuKDApOwotCi0jaWZkZWYgYWVnaXMKLSAgICBpZiAoY29uYnVm biA+IDApIHJldHVybihjb25idWZuKTsgICAvKiB1c2Ugb2xkIGNvdW50IGlmIG5vbnplcm8gKi8K LQotICAgIC8qIHJlYWQgaW4gbW9yZSBjaGFyYWN0ZXJzICovCi0gICAgY29uYnVmbiA9IGlvc18k Z2V0KGlvc18kc3RkaW4sCi0gICAgICAgICAgICAgIGlvc18kY29uZF9vcHQsIGNvbmJ1ZiwgKGxv bmcpc2l6ZW9mKGNvbmJ1ZiksIHN0KTsKLSAgICBpZiAoc3QuYWxsICE9IHN0YXR1c18kb2spIGNv bmJ1Zm4gPSAwOwotICAgIGNvbmJ1ZnAgPSBjb25idWY7Ci0gICAgcmV0dXJuKGNvbmJ1Zm4pOwot I2Vsc2UKLSNpZmRlZiBJS1NECi0gICAgaWYgKGluc2VydmVyICYmICFsb2NhbCkKLSAgICAgIHJl dHVybihpbl9jaGsoMSx0dHlmZCkpOwotICAgIGVsc2UKLSNlbmRpZiAvKiBJS1NEICovCi0gICAg ICByZXR1cm4oaW5fY2hrKDAsMCkpOwotI2VuZGlmIC8qIGFlZ2lzICovCi19Ci0KLS8qICBDIE8g TiBJIE4gQyAgLS0gIEdldCBhIGNoYXJhY3RlciBmcm9tIHRoZSBjb25zb2xlICAqLwotLyoKLSAg Q2FsbCB3aXRoIHRpbW8gPiAwIHRvIGRvIGEgdGltZWQgcmVhZCwgdGltbyA9PSAwIHRvIGRvIGFu IHVudGltZWQgYmxvY2tpbmcKLSAgcmVhZC4gIFVwb24gc3VjY2VzcywgcmV0dXJucyB0aGUgY2hh cmFjdGVyLiAgVXBvbiBmYWlsdXJlLCByZXR1cm5zIC0xLgotICBBIHRpbWVkIHJlYWQgdGhhdCBk b2VzIG5vdCBjb21wbGV0ZSB3aXRoaW4gdGhlIHRpbWVvdXQgcGVyaW9kIHJldHVybnMgLTIuCi0q LwotaW50Ci1jb25pbmModGltbykgaW50IHRpbW87IHsKLSAgICBpbnQgbiA9IDA7IENIQVIgY2g7 Ci0gICAgaW50IHh4OwotCi0gICAgaWYgKGNvbmJ1Zm4gPiAwKSB7CQkJLyogSWYgc29tZXRoaW5n IGFscmVhZHkgYnVmZmVyZWQgKi8KLQktLWNvbmJ1Zm47Ci0JcmV0dXJuKCh1bnNpZ25lZCkoKmNv bmJ1ZnArKyAmIDB4ZmYpKTsKLSAgICB9Ci0KLSAgICBlcnJubyA9IDA7CQkJCS8qIENsZWFyIHRo aXMgKi8KLSNpZmRlZiBJS1NECi0gICAgaWYgKGluc2VydmVyICYmICFsb2NhbCkgewotCXh4ID0g dHRpbmModGltbyk7Ci0JaWYgKHh4IDwgMCkKLQkgIHJldHVybih0dGluY3RpbW8gPyAtMiA6IC0x KTsKLQllbHNlCi0JICByZXR1cm4oeHgpOwotICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0KLSNp ZmRlZiBhZWdpcwkJCQkvKiBBcG9sbG8gQWVnaXMgb25seS4uLiAqLwotICAgIGRlYnVnKEYxMDEs ImNvbmluYyB0aW1vIiwiIix0aW1vKTsKLSAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICBpZiAoY29u Y2hrKCkgPiAwKSB7Ci0JLS1jb25idWZuOwotCXJldHVybigodW5zaWduZWQpKCpjb25idWZwKysg JiAweGZmKSk7Ci0gICAgfQotI2VuZGlmIC8qIGFlZ2lzICovCi0KLSNpZmRlZiBUVExFQlVGCi0g ICAgaWYgKAotI2lmZGVmIElLU0QKLQlpbnNlcnZlciAmJgotI2VuZGlmIC8qIElLU0QgKi8KLQkh eGxvY2FsCi0JKSB7Ci0JaWYgKHR0cHVzaCA+PSAwKSB7Ci0JICAgIGRlYnVnKEYxMTEsInR0aW5j IiwidHRwdXNoIix0dHB1c2gpOwotCSAgICBjaCA9IHR0cHVzaDsKLQkgICAgdHRwdXNoID0gLTE7 Ci0JICAgIHJldHVybihjaCk7Ci0JfQotCWlmIChsZV9kYXRhKSB7Ci0JICAgIGlmIChsZV9nZXRj aGFyKCZjaCkgPiAwKSB7Ci0JCWRlYnVnKEYxMTEsInR0aW5jIExvY2FsRWNob0luQnVmIiwiY2gi LGNoKTsKLQkJcmV0dXJuKGNoKTsKLQkgICAgfQotCX0KLSAgICB9Ci0jZW5kaWYgLyogVFRMRUJV RiAqLwotCi0gICAgaWYgKHRpbW8gPD0gMCkgewkJCS8qIFVudGltZWQsIGJsb2NraW5nIHJlYWQu ICovCi0Jd2hpbGUgKDEpIHsJCQkvKiBLZWVwIHRyeWluZyB0aWxsIHdlIGdldCBvbmUuICovCi0J ICAgIG4gPSByZWFkKDAsICZjaCwgMSk7CS8qIFJlYWQgYSBjaGFyYWN0ZXIuICovCi0JICAgIGlm IChuID09IDApIGNvbnRpbnVlOwkvKiBTaG91bGRuJ3QgaGFwcGVuLiAqLwotCSAgICBpZiAobiA+ IDApIHsJCS8qIElmIHJlYWQgd2FzIHN1Y2Nlc3NmdWwsICovCi0jaWZkZWYgSUtTRAotI2lmZGVm IENLX0VOQ1JZUFRJT04KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJjb25pbmMgZGVjcnlw dCAxIiwiIiwwKTsKLSAgICAgICAgICAgICAgICBpZiAoaW5zZXJ2ZXIgJiYgIWxvY2FsICYmIFRF TE9QVF9VKFRFTE9QVF9FTkNSWVBUSU9OKSkKLQkJICBja190bl9kZWNyeXB0KChjaGFyICopJmNo LDEpOwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNlbmRpZiAvKiBJS1NEICovCi0JCXJl dHVybigodW5zaWduZWQpKGNoICYgMHhmZikpOyAvKiByZXR1cm4gdGhlIGNoYXJhY3Rlci4gKi8K LSAgICAgICAgICAgIH0KLQotLyogQ29tZSBoZXJlIGlmIHJlYWQoKSByZXR1cm5lZCBhbiBlcnJv ci4gKi8KLQotCSAgICBkZWJ1ZyhGMTAxLCAiY29uaW5jKDApIGVycm5vIiwiIixlcnJubyk7IC8q IExvZyB0aGUgZXJyb3IuICovCi0jaWZuZGVmIE9YT1MKLSNpZmRlZiBTVk9SUE9TSVgKLSNpZmRl ZiBDSUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENJRSBSZWd1bHVzIGhhcyBubyBF SU5UUiBzeW1ib2w/ICovCi0jaWZuZGVmIEVJTlRSCi0jZGVmaW5lIEVJTlRSIDQKLSNlbmRpZiAv KiBFSU5UUiAqLwotI2VuZGlmIC8qIENJRSAqLwotLyoKLSAgVGhpcyByb3V0aW5lIGlzIHVzZWQg Zm9yIHNldmVyYWwgZGlmZmVyZW50IHB1cnBvc2VzLiAgSW4gQ09OTkVDVCBtb2RlLCBpdCBpcwot ICB1c2VkIHRvIGRvIGFuIHVudGltZWQsIGJsb2NraW5nIHJlYWQgZnJvbSB0aGUga2V5Ym9hcmQg aW4gdGhlIGxvd2VyIENPTk5FQ1QKLSAgZm9yay4gIER1cmluZyBsb2NhbC1tb2RlIGZpbGUgdHJh bnNmZXIsIGl0IHJlYWRzIGEgY2hhcmFjdGVyIGZyb20gdGhlCi0gIGNvbnNvbGUgdG8gaW50ZXJy dXB0IHRoZSBmaWxlIHRyYW5zZmVyIChsaWtlIEEgZm9yIGEgc3RhdHVzIHJlcG9ydCwgWCB0bwot ICBjYW5jZWwgYSBmaWxlLCBldGMpLiAgT2J2aW91c2x5LCB3ZSBkb24ndCB3YW50IHRoZSByZWFk cyBpbiB0aGUgbGF0dGVyIGNhc2UKLSAgdG8gYmUgYmxvY2tpbmcsIG9yIHRoZSBmaWxlIHRyYW5z ZmVyIHdvdWxkIHN0b3AgdW50aWwgdGhlIHVzZXIgdHlwZWQKLSAgc29tZXRoaW5nLiAgVW5mb3J0 dW5hdGVseSwgU3lzdGVtIFYgZG9lcyBub3QgYWxsb3cgdGhlIGNvbnNvbGUgZGV2aWNlIGlucHV0 Ci0gIGJ1ZmZlciB0byBiZSBzYW1wbGVkIG5vbmRlc3RydWN0aXZlbHkgKGUuZy4gYnkgY29uY2hr KCkpLCBzbyBhIGtsdWRnZSBpcwotICB1c2VkIGluc3RlYWQuICBEdXJpbmcgbG9jYWwtbW9kZSBm aWxlIHRyYW5zZmVyLCB0aGUgU0lHUVVJVCBzaWduYWwgaXMgYXJtZWQKLSAgYW5kIHRyYXBwZWQg YnkgZXNjdHJwKCksIGFuZCB0aGlzIHJvdXRpbmUgcHJldGVuZHMgdG8gaGF2ZSByZWFkIHRoZSBx dWl0Ci0gIGNoYXJhY3RlciBmcm9tIHRoZSBrZXlib2FyZCBub3JtYWxseS4gIEJ1dCwga2x1ZGdl IG9yIG5vIGtsdWRnZSwgdGhlIHJlYWQoKQotICBpc3N1ZWQgYnkgdGhpcyBjb21tYW5kLCB1bmRl ciBTeXN0ZW0gViBvbmx5LCBjYW4gZmFpbCBpZiBhIHNpZ25hbCAtLSBBTlkKLSAgc2lnbmFsIC0t IGlzIGNhdWdodCB3aGlsZSB0aGUgcmVhZCBpcyBwZW5kaW5nLiAgVGhpcyBjYW4gb2NjdXIgbm90 IG9ubHkgd2hlbgotICB0aGUgdXNlciB0eXBlcyB0aGUgcXVpdCBjaGFyYWN0ZXIsIGJ1dCBhbHNv IGR1cmluZyB0ZWxuZXQgbmVnb3RpYXRpb25zLCB3aGVuCi0gIHRoZSBsb3dlciBDT05ORUNUIGZv cmsgc2lnbmFscyB0aGUgdXBwZXIgb25lIGFib3V0IGFuIGVjaG9pbmcgbW9kZSBjaGFuZ2UuCi0g IFdoZW4gdGhpcyBoYXBwZW5zLCB3ZSBoYXZlIHRvIHBvc3QgdGhlIHJlYWQoKSBhZ2Fpbi4gIFRo aXMgaXMgYXBwYXJlbnRseSBub3QKLSAgYSBwcm9ibGVtIGluIEJTRC1iYXNlZCBVTklYIHZlcnNp b25zLgotKi8KLQkgICAgaWYgKGVycm5vID09IEVJTlRSKQkJLyogUmVhZCBpbnRlcnJ1cHRlZC4g Ki8KLQkgICAgICBpZiAoY29uZXNjKSAgewkJLyogSWYgYnkgU0lHUVVJVCwgKi8KLSAJCSBjb25l c2MgPSAwOwkJLyogdGhlIGNvbmVzYyB2YXJpYWJsZSBpcyBzZXQsICovCi0gCQkgcmV0dXJuKGVz Y2Nocik7CS8qIHNvIHJldHVybiB0aGUgZXNjYXBlIGNoYXJhY3Rlci4gKi8KLQkgICAgIH0gZWxz ZSBjb250aW51ZTsJCS8qIEJ5IG90aGVyIHNpZ25hbCwgdHJ5IGFnYWluLiAqLwotI2Vsc2UKLS8q Ci0gIFRoaXMgbWlnaHQgYmUgZGFuZ2Vyb3VzLCBidXQgbGV0J3MgZG8gdGhpcyBvbiBub24tU3lz dGVtIFYgdmVyc2lvbnMgdG9vLAotICBzaW5jZSBhdCBsZWFzdCBvbmUgU3VuT1MgNC4xLjIgdXNl ciBjb21wbGFpbnMgb2YgaW1tZWRpYXRlIGRpc2Nvbm5lY3Rpb25zCi0gIHVwb24gZmlyc3QgbWFr aW5nIGEgVEVMTkVUIGNvbm5lY3Rpb24uCi0qLwotCSAgICBpZiAoZXJybm8gPT0gRUlOVFIpCQkv KiBSZWFkIGludGVycnVwdGVkLiAqLwotCSAgICAgIGNvbnRpbnVlOwotI2VuZGlmIC8qIFNWT1JQ T1NJWCAqLwotI2Vsc2UgLyogT1hPUyAqLwotCSAgICBpZiAoZXJybm8gPT0gRUlOVFIpCQkvKiBS ZWFkIGludGVycnVwdGVkLiAqLwotCSAgICAgIGNvbnRpbnVlOwotI2VuZGlmIC8qIE9YT1MgKi8K LQkgICAgcmV0dXJuKC0xKTsJCQkvKiBFcnJvciAqLwotCX0KLSAgICB9Ci0jaWZkZWYgREVCVUcK LSAgICBpZiAoZGVibG9nICYmIHRpbW8gPD0gMCkgewotCWRlYnVnKEYxMDAsImNvbmluYyB0aW1l b3V0IGxvZ2ljIGVycm9yIiwiIiwwKTsKLQl0aW1vID0gMTsKLSAgICB9Ci0jZW5kaWYgLyogREVC VUcgKi8KLQotLyogVGltZWQgcmVhZC4uLiAqLwotCi0gICAgc2F2YWwgPSBzaWduYWwoU0lHQUxS TSx0aW1lcmgpOwkvKiBTZXQgdXAgdGltZW91dCBoYW5kbGVyLiAqLwotICAgIHh4ID0gYWxhcm0o dGltbyk7CQkJLyogU2V0IHRoZSBhbGFybS4gKi8KLSAgICBkZWJ1ZyhGMTAxLCJjb25pbmMgYWxh cm0gc2V0IiwiIix0aW1vKTsKLSAgICBpZiAoCi0jaWZkZWYgQ0tfUE9TSVhfU0lHCi0Jc2lnc2V0 am1wKHNqYnVmLDEpCi0jZWxzZQotCXNldGptcChzamJ1ZikKLSNlbmRpZiAvKiBDS19QT1NJWF9T SUcgKi8KLQkpCQkJCS8qIFRoZSByZWFkKCkgdGltZWQgb3V0LiAqLwotICAgICAgbiA9IC0yOwkJ CQkvKiBDb2RlIGZvciB0aW1lb3V0LiAqLwotICAgIGVsc2UKLSAgICAgIG4gPSByZWFkKDAsICZj aCwgMSk7Ci0gICAgdHRpbW9mZigpOwkJCQkvKiBUdXJuIG9mZiB0aW1lciAqLwotICAgIGlmIChu ID4gMCkgewkJCS8qIEdvdCBjaGFyYWN0ZXIgT0suICovCi0jaWZkZWYgSUtTRAotI2lmZGVmIENL X0VOQ1JZUFRJT04KLSAgICAgICAgZGVidWcoRjEwMCwiY29uaW5jIGRlY3J5cHQgMiIsIiIsMCk7 Ci0gICAgICAgIGlmIChpbnNlcnZlciAmJiAhbG9jYWwgJiYgVEVMT1BUX1UoVEVMT1BUX0VOQ1JZ UFRJT04pKQotCSAgY2tfdG5fZGVjcnlwdCgoY2hhciAqKSZjaCwxKTsKLSNlbmRpZiAvKiBDS19F TkNSWVBUSU9OICovCi0jZW5kaWYgLyogSUtTRCAqLwotCXJldHVybigodW5zaWduZWQpKGNoICYg MHhmZikpOwkvKiBSZXR1cm4gaXQuICovCi0gICAgfQotLyoKLSAgcmVhZCgpIHJldHVybmVkIGFu IGVycm9yLiAgU2FtZSBkZWFsIGFzIGFib3ZlLCBidXQgd2l0aG91dCB0aGUgbG9vcC4KLSovCi0g ICAgZGVidWcoRjEwMSwgImNvbmluYyh0aW1vKSBuIiwiIixuKTsKLSAgICBkZWJ1ZyhGMTAxLCAi Y29uaW5jKHRpbW8pIGVycm5vIiwiIixlcnJubyk7Ci0jaWZuZGVmIE9YT1MKLSNpZmRlZiBTVk9S UE9TSVgKLSAgICBpZiAobiA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUiAmJiBjb25lc2MgIT0gMCkg ewotCWNvbmVzYyA9IDA7Ci0JcmV0dXJuKGVzY2Nocik7CQkJLyogVXNlciBlbnRlcmVkIGVzY2Fw ZSBjaGFyYWN0ZXIuICovCi0gICAgfQotI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwotICAgIGlmIChu ID09IDAgJiYgZXJybm8gPiAwKSB7CQkvKiBJdCdzIGFuIGVycm9yICovCi0JcmV0dXJuKC0xKTsK LSAgICB9Ci0jZW5kaWYgLyogISBPWE9TICovCi0gICAgcmV0dXJuKG4pOwotfQotCi0vKiAgQyBP IE4gRyBLIFMgIC0tICBDb25zb2xlIEdldCBLZXlib2FyZCBTY2FuY29kZSAgKi8KLQotI2lmbmRl ZiBjb25na3MKLS8qCi0gIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgZmlsbGVkIGluIHdpdGgg dGhlIHZhcmlvdXMgc3lzdGVtLWRlcGVuZGVudAotICBzeXN0ZW0gY2FsbHMgdXNlZCBieSBTVU5P UywgTmVYVCBPUywgWGVuaXgsIEF2aWlvbiwgZXRjLCB0byByZWFkIGEgZnVsbAotICBrZXlib2Fy ZCBzY2FuIGNvZGUuICBVbmZvcnR1bmF0ZWx5IHRoZXJlIGFyZW4ndCBhbnkuCi0qLwotaW50Ci1j b25na3ModGltbykgaW50IHRpbW87IHsKLQotI2lmZGVmIElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIg JiYgIWxvY2FsKQotICAgICAgcmV0dXJuKHR0aW5jKHRpbW8pKTsKLSNlbmRpZiAvKiBJS1NEICov Ci0KLSAgICByZXR1cm4oY29uaW5jKHRpbW8pKTsKLX0KLSNlbmRpZiAvKiBjb25na3MgKi8KLQot I2lmZGVmIEFUVDczMDAKLQotLyogIEEgVCBUIEQgSSBBIEwgIC0tICBEaWFsIHVwIHRoZSByZW1v dGUgc3lzdGVtIHVzaW5nIGludGVybmFsIG1vZGVtCi0gKiBQdXJwb3NlOiB0byBvcGVuIGFuZCBk aWFsIGEgbnVtYmVyIG9uIHRoZSBpbnRlcm5hbCBtb2RlbSBhdmFpbGFibGUgb24gdGhlCi0gKiBB VFQ3MzAwIFVOSVggUEMuICBXcml0dGVuIGJ5IEpvZSBEb3VwbmlrLiBTdXBlcmNlZWRzIHZlcnNp b24gd3JpdHRlbiBieQotICogUmljaGFyZCBFLiBIaWxsLCBEaWNraW5zb24sIFRYLiB3aGljaCBl bXBsb3llZCBkaWFsKDNjKS4KLSAqIFVzZXMgaW5mb3JtYXRpb24gaW4gPHN5cy9waG9uZS5oPiBh bmQgb3VyIHN0YXR1cyBpbnQgYXR0bW9kZW0uCi0gKi8KLWF0dGRpYWwodHRuYW1lLHNwZWVkLHRl bG5icikgY2hhciAqdHRuYW1lLCp0ZWxuYnI7IGxvbmcgc3BlZWQ7IHsKLSAgICBjaGFyICp0ZWxu dW07Ci0KLSAgICBhdHRtb2RlbSAmPSB+SVNNT0RFTTsgICAgICAgICAgICAgICAgICAgICAgIC8q IG1vZGVtIG5vdCBpbiB1c2UgeWV0ICovCi0gICAgICAgICAgICAgICAgICAgIC8qIEVuc3VyZSBP X05ERUxBWSBpcyBzZXQsIGVsc2UgaS9vIHRyYWZmaWMgaGFuZ3MgKi8KLSAgICAgICAgICAgICAg ICAgICAgLyogV2UgdHVybiB0aGlzIGZsYWcgb2ZmIG9uY2UgdGhlIGRpYWwgaXMgY29tcGxldGUg Ki8KLSAgICBmY250bCh0dHlmZCwgRl9TRVRGTCwgZmNudGwodHR5ZmQsIEZfR0VURkwsIDApIHwg T19OREVMQVkpOwotCi0gICAgLyogQ29uZGl0aW9uIGxpbmUsIGNoZWNrIGF2YWlsYWJpbGl0eSAm IERBVEEgbW9kZSwgdHVybiBvbiBzcGVha2VyICovCi0gICAgaWYgKGlvY3RsKHR0eWZkLFBJT0NP RkZIT09LLCAmZGlhbGVyKSA9PSAtMSkgewotICAgICAgICBwcmludGYoImNhbm5vdCBhY2Nlc3Mg cGhvbmVcbiIpOwotICAgICAgICB0dGNsb3MoMCk7Ci0gICAgICAgIHJldHVybiAoLTIpOwotICAg IH0KLSAgICBpb2N0bCh0dHlmZCxQSU9DR0VUUCwmZGlhbGVyKTsgICAgICAvKiBnZXQgcGhvbmUg ZGlhbGVyIHBhcmFtZXRlcnMgKi8KLQotICAgIGlmIChkaWFsZXIuY19saW5lcGFyYW0gJiBWT0lD RSkgewkvKiBwaG9uZSBtdXN0IGJlIGluIERBVEEgbW9kZSAqLwotICAgICAgICBwcmludGYoIiBT aG91bGQgbm90IGRpYWwgd2l0aCBtb2RlbSBpbiBWT0lDRSBtb2RlLlxuIik7Ci0gICAgICAgIHBy aW50ZigiIEV4aXQgS2VybWl0LCBzd2l0Y2ggdG8gREFUQSBhbmQgcmV0cnkgY2FsbC5cbiIpOwot ICAgICAgICB0dGNsb3MoMCk7Ci0gICAgICAgIHJldHVybiAoLTIpOwotICAgIH0KLSNpZmRlZiBB VFRUT05FRAkJCQkvKiBPbGQgd2F5LCB0b25lIGRpYWxpbmcgb25seS4gKi8KLSAgICBkaWFsZXIu Y19saW5lcGFyYW0gPSBEQVRBIHwgRFRNRjsJLyogRGlhbCB3aXRoIHRvbmVzLCAqLwotICAgIGRp YWxlci5jX2xpbmVwYXJhbSAmPSB+UFVMU0U7CS8qIG5vdCB3aXRoIHB1bHNlcy4gKi8KLSNlbHNl Ci0gICAgLyogTGVhdmUgY3VycmVudCBwdWxzZS90b25lIHN0YXRlIGFsb25lLiAqLwotICAgIC8q IEJ1dCB3aGF0IGFib3V0IERBVEE/ICBBZGQgaXQgYmFjayBpZiB5b3UgaGF2ZSB0cm91YmxlLiAq LwotICAgIC8qIHN5cy9waG9uZSBzYXlzIHlvdSBnZXQgREFUQSBhdXRvbWF0aWNhbGx5IGJ5IG9w ZW5pbmcgZGV2aWNlIFJEV1IgKi8KLSNlbmRpZgotICAgIGRpYWxlci5jX3dhaXRkaWFsdG9uZSA9 IDU7ICAgICAgICAgICAgICAgICAgLyogd2FpdCA1IHNlYyBmb3IgZGlhbHRvbmUgKi8KLSNpZmRl ZiBDT01NRU5UCi0gICAgZGlhbGVyLmNfZmVlZGJhY2sgPSBTUEVBS0VST058Tk9STVNQS3xSSU5H T047ICAvKiBjb250cm9sIHNwZWFrZXIgKi8KLSNlbHNlCi0gICAgLyogc3lzL3Bob25lIHNheXMg UklOR09OIHVzZWQgb25seSBmb3IgaW5jb21pbmcgdm9pY2UgY2FsbHMgKi8KLSAgICBkaWFsZXIu Y19mZWVkYmFjayAmPSB+KFNPRlRTUEt8TE9VRFNQSyk7Ci0gICAgZGlhbGVyLmNfZmVlZGJhY2sg fD0gU1BFQUtFUk9OfE5PUk1TUEs7Ci0jZW5kaWYKLSAgICBkaWFsZXIuY193YWl0Zmxhc2ggPSA1 MDA7ICAgICAgICAgICAgICAgICAgIC8qIDAuNSBzZWMgZmxhc2ggaG9vayAqLwotICAgIGlmKGlv Y3RsKHR0eWZkLFBJT0NTRVRQLCZkaWFsZXIpID09IC0xKSB7ICAgLyogc2V0IHBob25lIHBhcmFt ZXRlcnMgKi8KLSAgICAgICAgcHJpbnRmKCJDYW5ub3Qgc2V0IG1vZGVtIGNoYXJhY3RlcmlzdGlj c1xuIik7Ci0gICAgICAgIHR0Y2xvcygwKTsKLSAgICAgICAgcmV0dXJuICgtMik7Ci0gICAgfQot ICAgIGlvY3RsKHR0eWZkLFBJT0NSRUNPTk4sMCk7CQkvKiBUdXJucyBvbiBzcGVha2VyIGZvciBw dWxzZSAqLwotCi0jaWZkZWYgQ09NTUVOVAotICAgIGZwcmludGYoc3RkZXJyLCJQaG9uZSBsaW5l IHN0YXR1cy4gbGluZV9wYXI6JW8gZGlhbHRvbmVfd2FpdDolbyBcCi1saW5lX3N0YXR1czolbyBm ZWVkYmFjazolb1xuIiwKLSAgICBkaWFsZXIuY19saW5lcGFyYW0sIGRpYWxlci5jX3dhaXRkaWFs dG9uZSwKLSAgICBkaWFsZXIuY19saW5lc3RhdHVzLCBkaWFsZXIuY19mZWVkYmFjayk7Ci0jZW5k aWYKLQotICAgIGF0dG1vZGVtIHw9IElTTU9ERU07ICAgICAgICAgICAgICAgICAgICAgICAgLyog bW9kZW0gaXMgbm93IGluLXVzZSAqLwotICAgIHNsZWVwKDEpOwotICAgIGZvciAodGVsbnVtID0g dGVsbmJyOyAqdGVsbnVtICE9ICdcMCc7IHRlbG51bSsrKSAgICAvKiBkaWFsIG51bWJlciAqLwot I2lmZGVmIEFUVFRPTkVECi0gICAgICAvKiBUb25lIGRpYWxpbmcgb25seSAqLwotICAgICAgaWYg KGlvY3RsKHR0eWZkLFBJT0NESUFMLHRlbG51bSkgIT0gMCkgewotCSAgcGVycm9yKCJFcnJvciBp biBkaWFsaW5nIik7Ci0JICB0dGNsb3MoMCk7Ci0JICByZXR1cm4oLTIpOwotICAgICAgfQotI2Vs c2UgLyogQWxsb3cgUHVsc2Ugb3IgVG9uZSBkaWFsaW5nICovCi0gICAgc3dpdGNoICgqdGVsbnVt KSB7Ci0gICAgICBjYXNlICd0JzogY2FzZSAnVCc6IGNhc2UgJyUnOgkvKiBUb25lIGRpYWxpbmcg cmVxdWVzdGVkICovCi0JZGlhbGVyLmNfbGluZXBhcmFtIHw9IERUTUY7Ci0JZGlhbGVyLmNfbGlu ZXBhcmFtICY9IH5QVUxTRTsKLQlpZiAoaW9jdGwodHR5ZmQsUElPQ1NFVFAsJmRpYWxlcikgPT0g LTEpIHsKLQkgICAgcHJpbnRmKCJDYW5ub3Qgc2V0IG1vZGVtIHRvIHRvbmUgZGlhbGluZ1xuIik7 Ci0JICAgIHR0Y2xvcygwKTsKLQkgICAgcmV0dXJuKC0yKTsKLQl9Ci0JYnJlYWs7Ci0gICAgICBj YXNlICdkJzogY2FzZSAnRCc6IGNhc2UgJ3AnOiBjYXNlICdQJzogY2FzZSAnXic6Ci0JZGlhbGVy LmNfbGluZXBhcmFtIHw9IFBVTFNFOwotCWRpYWxlci5jX2xpbmVwYXJhbSAmPSB+RFRNRjsKLQlp ZiAoaW9jdGwodHR5ZmQsUElPQ1NFVFAsJmRpYWxlcikgPT0gLTEpIHsKLQkgICAgcHJpbnRmKCJD YW5ub3Qgc2V0IG1vZGVtIHRvIHB1bHNlIGRpYWxpbmdcbiIpOwotCSAgICB0dGNsb3MoMCk7Ci0J ICAgIHJldHVybigtMik7Ci0JfQotCWJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgaWYg KGlvY3RsKHR0eWZkLFBJT0NESUFMLHRlbG51bSkgIT0gMCkgewotCSAgICBwZXJyb3IoIkRpYWxp bmcgZXJyb3IiKTsKLQkgICAgdHRjbG9zKDApOwotCSAgICByZXR1cm4oLTIpOwotCX0KLQlicmVh azsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGlvY3RsKHR0eWZkLFBJT0NESUFMLCJAIik7CQkvKiB0 ZXJtaW5hdG9yIGZvciBkYXRhIGNhbGwgKi8KLSAgICBkbyB7CQkJCS8qIHdhaXQgZm9yIG1vZGVt cyB0byBDb25uZWN0ICovCi0gICAgICAgIGlmIChpb2N0bCh0dHlmZCxQSU9DR0VUUCwmZGlhbGVy KSAhPSAwKQl7IC8qIGdldCBwYXJhbXMgKi8KLQkgICAgcGVycm9yKCJDYW5ub3QgZ2V0IG1vZGVt cyB0byBjb25uZWN0Iik7Ci0JICAgIHR0Y2xvcygwKTsKLQkgICAgcmV0dXJuKC0yKTsKLQl9Ci0g ICAgfSB3aGlsZSAoKGRpYWxlci5jX2xpbmVzdGF0dXMgJiBNT0RFTUNPTk5FQ1RFRCkgPT0gMCk7 Ci0gICAgLyogVHVybiBvZmYgT19OREVMQVkgZmxhZyBub3cuICovCi0gICAgZmNudGwodHR5ZmQs IEZfU0VURkwsIGZjbnRsKHR0eWZkLCBGX0dFVEZMLCAwKSAmIH5PX05ERUxBWSk7Ci0gICAgc2ln bmFsKFNJR0hVUCwgc2lnaHVwKTsgICAgICAgICAgICAgLyogaGFuZ3VwIG9uIGxvc3Mgb2YgY2Fy cmllciAqLwotICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldHVy biBzdWNjZXNzICovCi19Ci0KLS8qCi0gIE9mZmdldHR5LCBvbmdldHR5IGZ1bmN0aW9ucy4gVGhl c2UgZnVuY3Rpb24gZ2V0IHRoZSAnZ2V0dHkoMW0pJyBvZmYKLSAgYW5kIHJlc3RvcmUgaXQgdG8g dGhlIGluZGljYXRlZCBsaW5lLiAgU2hlbGwncyByZXR1cm4gY29kZXMgYXJlOgotICAgIDA6IENh bid0IGRvIGl0LiAgUHJvYmFibHkgYSB1c2VyIGxvZ2dlZCBvbi4KLSAgICAxOiBObyBuZWVkLiAg Tm8gZ2V0dHkgb24gdGhhdCBsaW5lLgotICAgIDI6IERvbmUsIHlvdSBzaG91bGQgcmVzdG9yZSB0 aGUgZ2V0dHkgd2hlbiB5b3UncmUgZG9uZS4KLSAgRE9HRVRZIFN5c3RlbSgzKSwgaG93ZXZlciwg cmV0dXJucyB0aGVtIGFzIDAsIDI1NiwgNTEyLCByZXNwZWN0aXZlbHkuCi0gIFRoYW5rcyB0byBL ZXZpbiBPJ0dvcm1hbiwgQW5hcm0gU29mdHdhcmUgU3lzdGVtcy4KLQotICAgZ2V0b2ZmLnNoIGxv b2tzIGxpa2U6ICAgZ2V0b24uc2ggbG9va3MgbGlrZToKLSAgICAgc2V0Z2V0dHkgJDEgMCAgICAg ICAgICAgc2V0Z2V0dHkgJDEgMQotICAgICBlcnI9JD8gICAgICAgICAgICAgICAgICBleGl0ICQ/ Ci0gICAgIHNsZWVwIDIKLSAgICAgZXhpdCAkZXJyCi0qLwotCi0vKiAgTyBGIEYgRyBFIFQgVCBZ ICAtLSAgVHVybiBvZmYgZ2V0dHkoMW0pIGZvciB0aGUgY29tbXVuaWNhdGlvbnMgdHR5IGxpbmUK LSAqIGFuZCBnZXQgc3RhdHVzIHNvIGl0IGNhbiBiZSByZXN0YXJ0ZWQgYWZ0ZXIgdGhlIGxpbmUg aXMgaHVuZyB1cC4KLSAqLwotaW50Ci1vZmZnZXR0eSh0dG5hbWUpIGNoYXIgKnR0bmFtZTsgewot ICAgIGNoYXIgdGVtcFszMF07Ci0gICAgd2hpbGUgKCp0dG5hbWUgIT0gJ1wwJykgdHRuYW1lKys7 ICAgICAgIC8qIHNlZWsgdGVybWluYXRvciBvZiBwYXRoICovCi0gICAgdHRuYW1lIC09IDM7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdldCBsYXN0IDMgY2hhcnMgb2YgbmFtZSAqLwot ICAgIHNwcmludGYodGVtcCwiL3Vzci9iaW4vZ2V0b2ZmLnNoICVzIix0dG5hbWUpOwotICAgIHJl dHVybih6c3lzY21kKHRlbXApKTsKLX0KLQotLyogIE8gTiBHIEUgVCBUIFkgIC0tICBUdXJuIG9u IGdldHR5KDFtKSBmb3IgdGhlIGNvbW11bmljYXRpb25zIHR0eSBsaW5lICovCi0KLWludAotb25n ZXR0eSh0dG5hbWUpIGNoYXIgKnR0bmFtZTsgewotICAgIGNoYXIgdGVtcFszMF07Ci0gICAgd2hp bGUgKCp0dG5hbWUgIT0gJ1wwJykgdHRuYW1lKys7ICAgICAgIC8qIGNvbW1zIHR0eSBwYXRoIG5h bWUgKi8KLSAgICB0dG5hbWUgLT0gMzsKLSAgICBzcHJpbnRmKHRlbXAsIi91c3IvYmluL2dldG9u LnNoICVzIix0dG5hbWUpOwotICAgIHJldHVybih6c3lzY21kKHRlbXApKTsKLX0KLSNlbmRpZiAv KiBBVFQ3MzAwICovCi0KLS8qICBUIFQgUyBDIEEgUiBSICAtLSAgU2V0IHR0Y2FyciB2YXJpYWJs ZSwgY29udHJvbGxpbmcgY2FycmllciBoYW5kbGluZy4KLSAqCi0gKiAgMCA9IE9mZjogQWx3YXlz IGlnbm9yZSBjYXJyaWVyLiBFLmcuIHlvdSBjYW4gY29ubmVjdCB3aXRob3V0IGNhcnJpZXIuCi0g KiAgMSA9IE9uOiBIZWVkIGNhcnJpZXIsIGV4Y2VwdCBkdXJpbmcgZGlhbGluZy4gQ2FycmllciBs b3NzIGdpdmVzIGRpc2Nvbm5lY3QuCi0gKiAgMiA9IEF1dG86IEZvciAibW9kZW0gZGlyZWN0Ijog VGhlIHNhbWUgYXMgIk9mZiIuCi0gKiAgICAgICAgICAgIEZvciByZWFsIG1vZGVtIHR5cGVzOiBI ZWVkIGNhcnJpZXIgZHVyaW5nIGNvbm5lY3QsIGJ1dCBpZ25vcmUKLSAqICAgICAgICAgICAgICAg IGl0IGFueXRpbWUgZWxzZS4gIENvbXBhdGlibGUgd2l0aCBwcmUtNUEgQy1LZXJtaXQgdmVyc2lv bnMuCi0gKgotICogQXMgeW91IGNhbiBzZWUsIHRoaXMgc2V0dGluZyBkb2VzIG5vdCBhZmZlY3Qg ZGlhbGluZywgd2hpY2ggYWx3YXlzIGlnbm9yZXMKLSAqIGNhcnJpZXIgKHVubGVzcyB0aGVyZSBp cyBzb21lIHNwZWNpYWwgZXhjZXB0aW9uIGZvciBzb21lIG1vZGVtIHR5cGUpLiAgSXQKLSAqIGRv ZXMgYWZmZWN0IHR0b3BlbigpIGlmIGl0IGlzIHNldCBiZWZvcmUgdHRvcGVuKCkgaXMgdXNlZC4g IFRoaXMgc2V0dGluZwotICogdGFrZXMgZWZmZWN0IG9uIHRoZSBuZXh0IGNhbGwgdG8gdHRvcGVu KCkvdHRwa3QoKS90dHZ0KCkuICBBbmQgdGhleSBhcmUKLSAqIChvciBzaG91bGQgYmUpIGFsd2F5 cyBjYWxsZWQgYmVmb3JlIGFueSBjb21tdW5pY2F0aW9ucyBpcyB0cmllZCwgd2hpY2gKLSAqIG1l YW5zIHRoYXQsIHByYWN0aWNhbGx5IHNwZWFraW5nLCB0aGUgZWZmZWN0IGlzIGltbWVkaWF0ZS4K LSAqCi0gKiBPZiBjb3Vyc2UsIG5vdGhpbmcgb2YgdGhpcyBhcHBsaWVzIHRvIHJlbW90ZSBtb2Rl ICh4bG9jYWwgPSAwKS4KLSAqCi0gKiBTb21lb25lIGhhcyB5ZXQgdG8gdW5jb3ZlciBob3cgdG8g bWFuaXB1bGF0ZSB0aGUgY2FycmllciBpbiB0aGUgQlNECi0gKiBlbnZpcm9ubWVudCAob3IgYW55 IG5vbi10ZXJtaW8gdXNpbmcgZW52aXJvbm1lbnQpLiAgVW50aWwgdGhhdCB0aW1lLCB0aGlzCi0g KiB3aWxsIHNpbXBseSBiZSBhIG5vLW9wIGZvciBCU0QuCi0gKgotICogTm90ZSB0aGF0IGluIHBy ZXZpb3VzIHZlcnNpb25zLCB0aGUgY2FycmllciB3YXMgbW9zdCBvZnRlbiBsZWZ0IHVuY2hhbmdl ZAotICogaW4gdHRwa3QoKS90dHZ0KCkgdW5sZXNzIHRoZXkgd2VyZSBjYWxsZWQgd2l0aCBGTE9f RElBTCBvciBGTE9fRElBWC4gIFRoaXMKLSAqIGhhcyBjaGFuZ2VkLiAgTm93IGl0IGlzIGNvbnRy b2xsZWQgYnkgdHRjYXJyIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlc2UKLSAqIG1vZGVzLgotICov Ci1pbnQKLXR0c2NhcnIoY2FycmllcikgaW50IGNhcnJpZXI7IHsKLSAgICB0dGNhcnIgPSBjYXJy aWVyOwotICAgIGRlYnVnKEYxMDEsICJ0dHNjYXJyIiwiIix0dGNhcnIpOwotICAgIHJldHVybih0 dGNhcnIpOwotfQotCi0vKiBDIEEgUiBSIEMgVCBMICAtLSAgU2V0IHR0eSBtb2RlcyBmb3IgY2Fy cmllciB0cmVhdG1lbnQuCi0gKgotICogU2V0cyB0aGUgYXBwcm9wcmlhdGUgYml0cyBpbiBhIHRl cm1pbyBvciBzZ3R0eWIgc3RydWN0IGZvciBjYXJyaWVyIGNvbnRyb2wKLSAqIChhY3R1YWxseSwg dGhlcmUgYXJlIG5vIGJpdHMgaW4gc2d0dHliIGZvciB0aGF0KSwgb3IgcGVyZm9ybXMgYW55IG90 aGVyCi0gKiBvcGVyYXRpb25zIG5lZWRlZCB0byBjb250cm9sIHRoaXMgb24gdGhlIGN1cnJlbnQg c3lzdGVtLiAgVGhlIGZ1bmN0aW9uIGRvZXMKLSAqIG5vdCBkbyB0aGUgYWN0dWFsIFRDU0VUQSBv ciBzdHR5LCBzaW5jZSBvZnRlbiB3ZSB3YW50IHRvIHNldCBvdGhlciBiaXRzIHRvbwotICogZmly c3QuICBEb24ndCBjYWxsIHRoaXMgZnVuY3Rpb24gd2hlbiB4bG9jYWwgaXMgMCwgb3IgdGhlIHR0 eSBpcyBub3Qgb3BlbmVkLgotICoKLSAqIFdlIGRvbid0IGtub3cgaG93IHRvIGRvIGFueXRoaW5n IGxpa2UgY2FycmllciBjb250cm9sIG9uIG5vbi1BVFRTViBzeXN0ZW1zLAotICogZXhjZXB0LCBh cHBhcmVudGx5LCB1bHRyaXguICBTZWUgYWJvdmUuICBJdCBpcyBhbHNvIGtub3duIHRoYXQgdGhp cyBkb2Vzbid0Ci0gKiBoYXZlIG11Y2ggZWZmZWN0IG9uIGEgWGVuaXggc3lzdGVtLiAgRm9yIFhl bml4LCBvbmUgc2hvdWxkIHN3aXRjaCBiYWNrIGFuZAotICogZm9ydGggYmV0d2VlbiB0aGUgdXBw ZXIgYW5kIGxvd2VyIGNhc2UgZGV2aWNlIGZpbGVzLiAgTWF5YmUgbGF0ZXIuCi0gKiBQcmVzZW50 bHksIFhlbml4IHdpbGwgc3RpY2sgdG8gdGhlIG1vZGUgaXQgd2FzIG9wZW5lZCB3aXRoLgotICoK LSAqIGNhcnJpZXI6IDAgPSBpZ25vcmUgY2FycmllciwgMSA9IHJlcXVpcmUgY2Fycmllci4KLSAq IFRoZSBjdXJyZW50IHN0YXRlIGlzIHNhdmVkIGluIGN1cmNhcnIsIGFuZCBjaGVja2VkIHRvIHNh dmUgbGFib3VyLgotICovCi0jaWZkZWYgU1ZPUlBPU0lYCi1pbnQKLSNpZmRlZiBCU0Q0NE9SUE9T SVgKLWNhcnJjdGwodHRwYXIsIGNhcnJpZXIpCXN0cnVjdCB0ZXJtaW9zICp0dHBhcjsgaW50IGNh cnJpZXI7Ci0jZWxzZSAvKiBBVFRTViAqLwotY2FycmN0bCh0dHBhciwgY2FycmllcikJc3RydWN0 IHRlcm1pbyAqdHRwYXI7IGludCBjYXJyaWVyOwotI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLwot LyogY2FycmN0bCAqLyB7Ci0gICAgZGVidWcoRjEwMSwgImNhcnJjdGwiLCIiLGNhcnJpZXIpOwot ICAgIGlmIChjYXJyaWVyKQotICAgICAgdHRwYXItPmNfY2ZsYWcgJj0gfkNMT0NBTDsKLSAgICBl bHNlCi0gICAgICB0dHBhci0+Y19jZmxhZyB8PSBDTE9DQUw7Ci0gICAgcmV0dXJuKDApOwotfQot I2Vsc2UgLyogQmVya2VsZXksIFY3LCBldCBhbC4uLiAqLwotaW50Ci1jYXJyY3RsKHR0cGFyLCBj YXJyaWVyKSBzdHJ1Y3Qgc2d0dHliICp0dHBhcjsgaW50IGNhcnJpZXI7IHsKLSAgICBkZWJ1ZyhG MTAxLCAiY2FycmN0bCIsIiIsY2Fycmllcik7Ci0gICAgaWYgKGNhcnJpZXIgPT0gY3VyY2FycikK LSAgICAgIHJldHVybigwKTsKLSAgICBjdXJjYXJyID0gY2FycmllcjsKLSNpZmRlZiB1bHRyaXgK LSNpZmRlZiBDT01NRU5UCi0vKgotICBPbGQgY29kZSBmcm9tIHNvbWVib2R5IGF0IERFQyB0aGF0 IHRlbmRzIHRvIGdldCBzdHVjaywgdGltZSBvdXQsIGV0Yy4KLSovCi0gICAgaWYgKGNhcnJpZXIp IHsKLQlpb2N0bCh0dHlmZCwgVElPQ01PREVNLCAmdGVtcCk7Ci0JaW9jdGwodHR5ZmQsIFRJT0NI UENMLCAwKTsKLSAgICB9IGVsc2UgewotCS8qIChBY2NvcmRpbmcgdG8gdGhlIG1hbnVhbHMsIFRJ T0NOQ0FSIHNob3VsZCBiZSBwcmVmZXJyZWQgKi8KLQkvKiBvdmVyIFRJT0NOTU9ERU0uLi4pICov Ci0JaW9jdGwodHR5ZmQsIFRJT0NOTU9ERU0sICZ0ZW1wKTsKLSAgICB9Ci0jZWxzZQotLyoKLSAg TmV3IGNvZGUgZnJvbSBKYW1pZSBXYXRzb24gdGhhdCwgaGUgc2F5cywgZWxpbWluYXRlcyB0aGUg cHJvYmxlbXMuCi0qLwotICAgIGlmIChjYXJyaWVyKSB7Ci0JaW9jdGwodHR5ZmQsIFRJT0NDQVIp OwotCWlvY3RsKHR0eWZkLCBUSU9DSFBDTCk7Ci0gICAgfSBlbHNlIHsKLQlpb2N0bCh0dHlmZCwg VElPQ05DQVIpOwotICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZW5kaWYgLyogdWx0cml4 ICovCi0gICAgcmV0dXJuKDApOwotfQotI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwotCi0KLS8qICBU IFQgRyBNIEQgTSAgLS0gIEdldCBtb2RlbSBzaWduYWxzICAqLwotLyoKLSBMb29rcyBmb3IgUlMt MjMyIG1vZGVtIHNpZ25hbHMsIGFuZCByZXR1cm5zIHRob3NlIHRoYXQgYXJlIG9uIGluIGFzIGl0 cwotIHJldHVybiB2YWx1ZSwgaW4gYSBiaXQgbWFzayBjb21wb3NlZCBvZiB0aGUgQk1feHh4IHZh bHVlcyBkZWZpbmVkIGluIGNrY2RlYi5oLgotIFJldHVybnM6Ci0gLTMgTm90IGltcGxlbWVudGVk Ci0gLTIgaWYgdGhlIGNvbW11bmljYXRpb24gZGV2aWNlIGRvZXMgbm90IGhhdmUgbW9kZW0gY29u dHJvbCAoZS5nLiB0ZWxuZXQpCi0gLTEgb24gZXJyb3IuCi0gPj0gMCBvbiBzdWNjZXNzLCB3aXRo IGEgYml0IG1hc2sgY29udGFpbmluZyB0aGUgbW9kZW0gc2lnbmFscyB0aGF0IGFyZSBvbi4KLSov Ci0KLS8qCi0gIERlZmluZSB0aGUgc3ltYm9sIEtfTURNQ1RMIGlmIHdlIGhhdmUgU3lzIFYgUjMg LyA0LjMgQlNEIHN0eWxlCi0gIG1vZGVtIGNvbnRyb2wsIG5hbWVseSB0aGUgVElPQ01HRVQgaW9j dGwuCi0qLwotCi0jaWZkZWYgQlNENDMKLSNkZWZpbmUgS19NRE1DVEwKLSNlbmRpZiAvKiBCU0Q0 MyAqLwotCi0jaWZkZWYgU1VOT1M0Ci0jZGVmaW5lIEtfTURNQ1RMCi0jZW5kaWYgLyogU1VOT1M0 ICovCi0KLS8qCi0gIFNDTyBPcGVuU2VydmVyIFI1LjAuNC4gIFRoZSBUSU9DTUdFVCBkZWZpbml0 aW9uIGlzIGhhcmR3aXJlZCBpbiBiZWNhdXNlIGl0Ci0gIGlzIHNraXBwZWQgaW4gdGVybWlvLmgg d2hlbiBfUE9TSVhfU09VUkNFIGlzIGRlZmluZWQuICBCdXQgX1BPU0lYX1NPVVJDRQotICBtdXN0 IGJlIGRlZmluZWQgaW4gb3JkZXIgdG8gZ2V0IHRoZSBoaWdoIHNlcmlhbCBzcGVlZHMgdGhhdCBh cmUgbmV3IHRvCi0gIDUuMC40LiAgSG93ZXZlciwgdGhlIHJlZ3VsYXIgU0NPIGRyaXZlcnMgZG8g bm90IGltcGxlbWVudCBUSU9DTUdFVCwgc28gdGhlCi0gIGlvY3RsKCkgcmV0dXJucyAtMSB3aXRo IGVycm5vIDIyIChpbnZhbGlkIGZ1bmN0aW9uKS4gIEJ1dCB0aGlyZC1wYXJ0eQotICBkcml2ZXJz LCBlLmcuIGZvciBEaWdpYm9hcmQsIGRvIGltcGxlbWVudCBpdCwgYW5kIHNvIGl0IHNob3VsZCB3 b3JrIG9uIHBvcnRzCi0gIGRyaXZlbiBieSB0aG9zZSBkcml2ZXJzLgotKi8KLSNpZmRlZiBTQ09f T1NSNTA0Ci0jaWZuZGVmIFRJT0NNR0VUCi0jZGVmaW5lIFRJT0NNR0VUICgoJ3QnPDw4KXwyOSkK LSNlbmRpZiAvKiBUSU9DTUdFVCAqLwotI2VuZGlmIC8qIFNDT19PU1I1MDQgKi8KLQotI2lmZGVm IENLX1NDT1Y1Ci0vKiBCZWNhdXNlIFBPU0lYIHN0cmljdG5lc3MgaW4gPHN5cy90ZXJtaW8uaD4g d29uJ3QgbGV0IHVzIHNlZSB0aGVzZS4gKi8KLSNpZm5kZWYgVElPQ01fRFRSCi0jZGVmaW5lIFRJ T0NNX0RUUgkweDAwMDIJCS8qIGRhdGEgdGVybWluYWwgcmVhZHkgKi8KLSNkZWZpbmUgVElPQ01f UlRTCTB4MDAwNAkJLyogcmVxdWVzdCB0byBzZW5kICovCi0jZGVmaW5lIFRJT0NNX0NUUwkweDAw MjAJCS8qIGNsZWFyIHRvIHNlbmQgKi8KLSNkZWZpbmUgVElPQ01fQ0FSCTB4MDA0MAkJLyogY2Fy cmllciBkZXRlY3QgKi8KLSNkZWZpbmUgVElPQ01fUk5HCTB4MDA4MAkJLyogcmluZyAqLwotI2Rl ZmluZSBUSU9DTV9EU1IJMHgwMTAwCQkvKiBkYXRhIHNldCByZWFkeSAqLwotI2RlZmluZSBUSU9D TV9DRAlUSU9DTV9DQVIKLSNkZWZpbmUgVElPQ01fUkkJVElPQ01fUk5HCi0jZW5kaWYgLyogVElP Q01fRFRSICovCi0jZW5kaWYgLyogQ0tfU0NPVjUgKi8KLQotI2lmZGVmIFFOWAotI2RlZmluZSBL X01ETUNUTAotI2Vsc2UKLSNpZmRlZiBUSU9DTUdFVAotI2RlZmluZSBLX01ETUNUTAotI2VuZGlm IC8qIFRJT0NNR0VUICovCi0jZW5kaWYgLyogUU5YICovCi0vKgotICAiQSBzZXJpYWwgY29tbXVu aWNhdGlvbiBwcm9ncmFtIHRoYXQgY2FuJ3QgcmVhZCBtb2RlbSBzaWduYWxzCi0gICBpcyBsaWtl IGEgY2FyIHdpdGhvdXQgd2luZG93cy4iCi0qLwotaW50Ci10dGdtZG0oKSB7Ci0KLSNpZmRlZiBR TlgKLSNpbmNsdWRlIDxzeXMvcWlvY3RsLmg+Ci0KLSAgICB1bnNpZ25lZCBsb25nIHksIG1kbWJp dHNbMl07Ci0gICAgaW50IHgsIHogPSAwOwotCi0gICAgaWYgKHhsb2NhbCAmJiB0dHlmZCA8IDAp Ci0gICAgICByZXR1cm4oLTEpOwotCi0jaWZkZWYgTkVUQ09OTgotICAgIGlmIChuZXRjb25uKSB7 CQkJLyogTmV0d29yayBjb25uZWN0aW9uICovCi0jaWZkZWYgVE5fQ09NUE9SVAotICAgICAgICBp ZiAoaXN0bmNvbXBvcnQoKSkgewotCSAgICBnb3RzaWdzID0gMTsKLQkgICAgcmV0dXJuKHRuZ21k bSgpKTsKLQl9IGVsc2UKLSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0JICByZXR1cm4oLTIpOwkJ CS8qIE5vIG1vZGVtIHNpZ25hbHMgKi8KLSAgICB9Ci0jZW5kaWYgLyogTkVUQ09OTiAqLwotCi0j aWZkZWYgTkVUQ01ECi0gICAgaWYgKHR0cGlwZSkgcmV0dXJuKC0yKTsKLSNlbmRpZiAvKiBORVRD TUQgKi8KLSNpZmRlZiBORVRQVFkKLSAgICBpZiAodHRwdHkpIHJldHVybigtMik7Ci0jZW5kaWYg LyogTkVUUFRZICovCi0KLSAgICBtZG1iaXRzWzBdID0gMEw7Ci0gICAgbWRtYml0c1sxXSA9IDBM OwotLyoKLSAqIEZyb20gPHN5cy9xaW9jdGwuaD46Ci0gKgotICogU0VSSUFMIGRldmljZXMgICAo YWxsIERldi5zZXIgdmVyc2lvbnMpCi0gKiAwIDogRFRSICAgICAgICAgICA4ID0gRGF0YSBCaXRz IDAgIDE2IC0gcmVzZXJ2ZWQgICAgIDI0IC0gcmVzZXJ2ZWQKLSAqIDEgOiBSVFMgICAgICAgICAg IDkgPSBEYXRhIEJpdHMgMSAgMTcgLSByZXNlcnZlZCAgICAgMjUgLSByZXNlcnZlZAotICogMiA9 IE91dCAxICAgICAgICAxMCA9IFN0b3AgQml0cyAgICAxOCAtIHJlc2VydmVkICAgICAyNiAtIHJl c2VydmVkCi0gKiAzID0gSW50IEVuYWJsZSAgIDExID0gUGFyIEVuYWJsZSAgIDE5IC0gcmVzZXJ2 ZWQgICAgIDI3IC0gcmVzZXJ2ZWQKLSAqIDQgPSBMb29wICAgICAgICAgMTIgPSBQYXIgRXZlbiAg ICAgMjAgPSBDVFMgICAgICAgICAgMjggLSByZXNlcnZlZAotICogNSAtIHJlc2VydmVkICAgICAx MyA9IFBhciBTdGljayAgICAyMSA9IERTUiAgICAgICAgICAyOSAtIHJlc2VydmVkCi0gKiA2IC0g cmVzZXJ2ZWQgICAgIDE0IDogQnJlYWsgICAgICAgIDIyID0gUkkgICAgICAgICAgIDMwIC0gcmVz ZXJ2ZWQKLSAqIDcgLSByZXNlcnZlZCAgICAgMTUgPSAwICAgICAgICAgICAgMjMgPSBDRCAgICAg ICAgICAgMzEgLSByZXNlcnZlZAotICovCi0gICAgZXJybm8gPSAwOwotICAgIHggPSBxbnhfaW9j dGwodHR5ZmQsIFFDVExfREVWX0NUTCwgJm1kbWJpdHNbMF0sIDgsICZtZG1iaXRzWzBdLCA0KTsK LSAgICBkZWJ1ZyhGMTAxLCJ0dGdtZG0gcW54X2lvY3RsIiwiIix4KTsKLSAgICBkZWJ1ZyhGMTAx LCJ0dGdtZG0gcW54X2lvY3RsIGVycm5vIiwiIixlcnJubyk7Ci0gICAgaWYgKCF4KSB7Ci0JZGVi dWcoRjEwMSwidHRnbWRtIHFueF9pb2N0bCBtZG1iaXRzWzBdIiwiIixtZG1iaXRzWzBdKTsKLQlk ZWJ1ZyhGMTAxLCJ0dGdtZG0gcW54X2lvY3RsIG1kbWJpdHNbMV0iLCIiLG1kbWJpdHNbMV0pOwot CXkgPSBtZG1iaXRzWzBdOwotCWlmICh5ICYgMHgwMDAwMDFMKSB6IHw9IEJNX0RUUjsJLyogQml0 ICAwICovCi0JaWYgKHkgJiAweDAwMDAwMkwpIHogfD0gQk1fUlRTOwkvKiBCaXQgIDEgKi8KLQlp ZiAoeSAmIDB4MTAwMDAwTCkgeiB8PSBCTV9DVFM7CS8qIEJpdCAyMCAqLwotCWlmICh5ICYgMHgy MDAwMDBMKSB6IHw9IEJNX0RTUjsJLyogQml0IDIxICovCi0JaWYgKHkgJiAweDQwMDAwMEwpIHog fD0gQk1fUk5HOwkvKiBCaXQgMjIgKi8KLQlpZiAoeSAmIDB4ODAwMDAwTCkgeiB8PSBCTV9EQ0Q7 CS8qIEJpdCAyMyAqLwotCWRlYnVnKEYxMDEsInR0Z21kbSBxbnggcmVzdWx0IiwiIix6KTsKLQlk ZWJ1ZyhGMTEwLCJ0dGdtZG0gcW54IENEID0gIiwoeiAmIEJNX0RDRCkgPyAiT24iIDogIk9mZiIs IDApOwotCWdvdHNpZ3MgPSAxOwotCXJldHVybih6KTsKLSAgICB9IGVsc2UgcmV0dXJuKC0xKTsK LSNlbHNlIC8qIFFOWCAqLwotI2lmZGVmIEhQVVgJCQkJLyogSFBVWCBoYXMgaXRzIG93biB3YXkg Ki8KLSAgICBpbnQgeCwgejsKLQotI2lmZGVmIEhQVVgxMAkJCQkvKiBNb2RlbSBmbGFnIHdvcmQg Ki8KLSAgICBtZmxhZyB5OwkJCQkvKiBtZmxhZyB0eXBlZGVmJ2QgaW4gPHN5cy9tb2RlbS5oPiAq LwotI2Vsc2UKLSNpZmRlZiBIUFVYOQotICAgIG1mbGFnIHk7Ci0jZWxzZQotI2lmZGVmIEhQVVg4 Ci0gICAgbWZsYWcgeTsKLSNlbHNlCi0gICAgdW5zaWduZWQgbG9uZyB5OwkJCS8qIE5vdCBzdXJl IGFib3V0IHByZS04LjAuLi4gKi8KLSNlbmRpZiAvKiBIUFVYOCAqLwotI2VuZGlmIC8qIEhQVVg5 ICovCi0jZW5kaWYgLyogSFBVWDEwICovCi0KLSAgICBpZiAoeGxvY2FsICYmIHR0eWZkIDwgMCkK LSAgICAgIHJldHVybigtMSk7Ci0KLSNpZmRlZiBORVRDT05OCi0gICAgaWYgKG5ldGNvbm4pIHsJ CQkvKiBOZXR3b3JrIGNvbm5lY3Rpb24gKi8KLSNpZmRlZiBUTl9DT01QT1JUCi0gICAgICAgIGlm IChpc3RuY29tcG9ydCgpKSB7Ci0JICAgIGdvdHNpZ3MgPSAxOwotCSAgICByZXR1cm4odG5nbWRt KCkpOwotCX0gZWxzZQotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLQkgIHJldHVybigtMik7CQkJ LyogTm8gbW9kZW0gc2lnbmFscyAqLwotICAgIH0KLSNlbmRpZiAvKiBORVRDT05OICovCi0KLSNp ZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaXBlKSByZXR1cm4oLTIpOwotI2VuZGlmIC8qIE5FVENN RCAqLwotI2lmZGVmIE5FVFBUWQotICAgIGlmICh0dHB0eSkgcmV0dXJuKC0yKTsKLSNlbmRpZiAv KiBORVRQVFkgKi8KLQotICAgIGlmICh4bG9jYWwpCQkJCS8qIEdldCBtb2RlbSBzaWduYWxzICov Ci0gICAgICB4ID0gaW9jdGwodHR5ZmQsTUNHRVRBLCZ5KTsKLSAgICBlbHNlCi0gICAgICB4ID0g aW9jdGwoMCxNQ0dFVEEsJnkpOwotICAgIGlmICh4IDwgMCkgcmV0dXJuKC0xKTsKLSAgICBkZWJ1 ZyhGMTAxLCJ0dGdtZG0iLCIiLHkpOwotCi0gICAgeiA9IDA7CQkJCS8qIEluaXRpYWxpemUgcmV0 dXJuIHZhbHVlICovCi0KLS8qIE5vdyBzZXQgYml0cyBmb3IgZWFjaCBtb2RlbSBzaWduYWwgdGhh dCBpcyByZXBvcnRlZCB0byBiZSBvbi4gKi8KLQotI2lmZGVmIE1DVFMKLSAgICAvKiBDbGVhciBU byBTZW5kICovCi0gICAgZGVidWcoRjEwMSwidHRnbWRtIEhQVVggQ1RTIiwiIix5ICYgTUNUUyk7 Ci0gICAgaWYgKHkgJiBNQ1RTKSB6IHw9IEJNX0NUUzsKLSNlbmRpZgotI2lmZGVmIE1EU1IKLSAg ICAvKiBEYXRhIFNldCBSZWFkeSAqLwotICAgIGRlYnVnKEYxMDEsInR0Z21kbSBIUFVYIERTUiIs IiIseSAmIE1EU1IpOwotICAgIGlmICh5ICYgTURTUikgeiB8PSBCTV9EU1I7Ci0jZW5kaWYKLSNp ZmRlZiBNRENECi0gICAgLyogQ2FycmllciAqLwotICAgIGRlYnVnKEYxMDEsInR0Z21kbSBIUFVY IERDRCIsIiIseSAmIE1EQ0QpOwotICAgIGlmICh5ICYgTURDRCkgeiB8PSBCTV9EQ0Q7Ci0jZW5k aWYKLSNpZmRlZiBNUkkKLSAgICAvKiBSaW5nIEluZGljYXRlICovCi0gICAgZGVidWcoRjEwMSwi dHRnbWRtIEhQVVggUkkiLCIiLHkgJiBNUkkpOwotICAgIGlmICh5ICYgTVJJKSB6IHw9IEJNX1JO RzsKLSNlbmRpZgotI2lmZGVmIE1EVFIKLSAgICAvKiBEYXRhIFRlcm1pbmFsIFJlYWR5ICovCi0g ICAgZGVidWcoRjEwMSwidHRnbWRtIEhQVVggRFRSIiwiIix5ICYgTURUUik7Ci0gICAgaWYgKHkg JiBNRFRSKSB6IHw9IEJNX0RUUjsKLSNlbmRpZgotI2lmZGVmIE1SVFMKLSAgICAvKiBSZXF1ZXN0 IFRvIFNlbmQgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ0dGdtZG0gSFBVWCBSVFMiLCIiLHkgJiBNUlRT KTsKLSAgICBpZiAoeSAmIE1SVFMpIHogfD0gQk1fUlRTOwotI2VuZGlmCi0gICAgZ290c2lncyA9 IDE7Ci0gICAgcmV0dXJuKHopOwotCi0jZWxzZSAvKiAhIEhQVVggKi8KLQotI2lmZGVmIEtfTURN Q1RMCi0vKgotICBOb3RlLCBUSU9DTUdFVCBtaWdodCBhbHJlYWR5IGhhdmUgYmVlbiBkZWZpbmVk IGluIDxzeXMvaW9jdGwuaD4gb3IgZWxzZXdoZXJlLgotICBJZiBub3QsIHdlIHRyeSBpbmNsdWRp bmcgPHN5cy90dHljb20uaD4gLS0gaWYgdGhpcyBibG93cyB1cCB0aGVuIG1vcmUgaWZkZWZzCi0g IGFyZSBuZWVkZWQuCi0qLwotI2lmbmRlZiBUSU9DTUdFVAotI2luY2x1ZGUgPHN5cy90dHljb20u aD4KLSNlbmRpZiAvKiBUSU9DTUdFVCAqLwotCi0gICAgaW50IHgsIHksIHo7Ci0KLSAgICBkZWJ1 ZyhGMTAwLCJ0dGdtZG0gS19NRE1DVEwgZGVmaW5lZCIsIiIsMCk7Ci0KLSNpZmRlZiBORVRDT05O Ci0gICAgaWYgKG5ldGNvbm4pIHsJCQkvKiBOZXR3b3JrIGNvbm5lY3Rpb24gKi8KLSNpZmRlZiBU Tl9DT01QT1JUCi0gICAgICAgIGlmIChpc3RuY29tcG9ydCgpKSB7Ci0JICAgIGdvdHNpZ3MgPSAx OwotCSAgICByZXR1cm4odG5nbWRtKCkpOwotCX0gZWxzZQotI2VuZGlmIC8qIFROX0NPTVBPUlQg Ki8KLQkgIHJldHVybigtMik7CQkJLyogTm8gbW9kZW0gc2lnbmFscyAqLwotICAgIH0KLSNlbmRp ZiAvKiBORVRDT05OICovCi0KLSNpZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaXBlKSByZXR1cm4o LTIpOwotI2VuZGlmIC8qIE5FVENNRCAqLwotI2lmZGVmIE5FVFBUWQotICAgIGlmICh0dHB0eSkg cmV0dXJuKC0yKTsKLSNlbmRpZiAvKiBORVRQVFkgKi8KLQotICAgIGlmICh4bG9jYWwgJiYgdHR5 ZmQgPCAwKQotICAgICAgcmV0dXJuKC0xKTsKLQotICAgIGlmICh4bG9jYWwpCi0gICAgICB4ID0g aW9jdGwodHR5ZmQsVElPQ01HRVQsJnkpOwkvKiBHZXQgbW9kZW0gc2lnbmFscy4gKi8KLSAgICBl bHNlCi0gICAgICB4ID0gaW9jdGwoMCxUSU9DTUdFVCwmeSk7Ci0gICAgZGVidWcoRjEwMSwidHRn bWRtIFRJT0NNR0VUIGlvY3RsIiwiIix4KTsKLSAgICBpZiAoeCA8IDApIHsKLQlkZWJ1ZyhGMTAx LCJ0dGdtZG0gZXJybm8iLCIiLGVycm5vKTsKLQlyZXR1cm4oLTEpOwotICAgIH0KLSAgICBkZWJ1 ZyhGMTAxLCJ0dGdtZG0gYml0cyIsIiIseSk7Ci0KLSAgICB6ID0gMDsJCQkJLyogSW5pdGlhbGl6 ZSByZXR1cm4gdmFsdWUuICovCi0jaWZkZWYgVElPQ01fQ1RTCi0gICAgLyogQ2xlYXIgVG8gU2Vu ZCAqLwotICAgIGlmICh5ICYgVElPQ01fQ1RTKSB6IHw9IEJNX0NUUzsKLSAgICBkZWJ1ZyhGMTAx LCJ0dGdtZG0gVElPQ01fQ1RTIGRlZmluZWQiLCIiLFRJT0NNX0NUUyk7IAotI2Vsc2UKLSAgICBk ZWJ1ZyhGMTAwLCJ0dGdtZG0gVElPQ01fQ1RTIG5vdCBkZWZpbmVkIiwiIiwwKTsKLSNlbmRpZgot I2lmZGVmIFRJT0NNX0RTUgotICAgIC8qIERhdGEgU2V0IFJlYWR5ICovCi0gICAgaWYgKHkgJiBU SU9DTV9EU1IpIHogfD0gQk1fRFNSOwotICAgIGRlYnVnKEYxMDEsInR0Z21kbSBUSU9DTV9EU1Ig ZGVmaW5lZCIsIiIsVElPQ01fRFNSKTsgCi0jZWxzZQotICAgIGRlYnVnKEYxMDAsInR0Z21kbSBU SU9DTV9EU1Igbm90IGRlZmluZWQiLCIiLDApOwotI2VuZGlmCi0jaWZkZWYgVElPQ01fQ0FSCi0g ICAgLyogQ2FycmllciAqLwotICAgIGlmICh5ICYgVElPQ01fQ0FSKSB6IHw9IEJNX0RDRDsKLSAg ICBkZWJ1ZyhGMTAxLCJ0dGdtZG0gVElPQ01fQ0FSIGRlZmluZWQiLCIiLFRJT0NNX0NBUik7IAot I2Vsc2UKLSAgICBkZWJ1ZyhGMTAwLCJ0dGdtZG0gVElPQ01fQ0FSIG5vdCBkZWZpbmVkIiwiIiww KTsKLSNlbmRpZgotI2lmZGVmIFRJT0NNX1JORwotICAgIC8qIFJpbmcgSW5kaWNhdGUgKi8KLSAg ICBpZiAoeSAmIFRJT0NNX1JORykgeiB8PSBCTV9STkc7Ci0gICAgZGVidWcoRjEwMSwidHRnbWRt IFRJT0NNX1JORyBkZWZpbmVkIiwiIixUSU9DTV9STkcpOyAKLSNlbHNlCi0gICAgZGVidWcoRjEw MCwidHRnbWRtIFRJT0NNX1JORyBub3QgZGVmaW5lZCIsIiIsMCk7Ci0jZW5kaWYKLSNpZmRlZiBU SU9DTV9EVFIKLSAgICAvKiBEYXRhIFRlcm1pbmFsIFJlYWR5ICovCi0gICAgaWYgKHkgJiBUSU9D TV9EVFIpIHogfD0gQk1fRFRSOwotICAgIGRlYnVnKEYxMDEsInR0Z21kbSBUSU9DTV9EVFIgZGVm aW5lZCIsIiIsVElPQ01fRFRSKTsgCi0jZWxzZQotICAgIGRlYnVnKEYxMDAsInR0Z21kbSBUSU9D TV9EVFIgbm90IGRlZmluZWQiLCIiLDApOwotI2VuZGlmCi0jaWZkZWYgVElPQ01fUlRTCi0gICAg LyogUmVxdWVzdCBUbyBTZW5kICovCi0gICAgaWYgKHkgJiBUSU9DTV9SVFMpIHogfD0gQk1fUlRT OwotICAgIGRlYnVnKEYxMDEsInR0Z21kbSBUSU9DTV9SVFMgZGVmaW5lZCIsIiIsVElPQ01fUlRT KTsgCi0jZWxzZQotICAgIGRlYnVnKEYxMDAsInR0Z21kbSBUSU9DTV9SVFMgbm90IGRlZmluZWQi LCIiLDApOwotI2VuZGlmCi0gICAgZ290c2lncyA9IDE7Ci0gICAgcmV0dXJuKHopOwotCi0jZWxz ZSAvKiAhS19NRE1DVEwgY2F0Y2gtQWxsICovCi0KLSAgICBkZWJ1ZyhGMTAwLCJ0dGdtZG0gS19N RE1DVEwgbm90IGRlZmluZWQiLCIiLDApOwotI2lmZGVmIFRJT0NNR0VUCi0gICAgZGVidWcoRjEw MCwidHRnbWRtIFRJT0NNR0VUIGRlZmluZWQiLCIiLDApOwotI2Vsc2UKLSAgICBkZWJ1ZyhGMTAw LCJ0dGdtZG0gVElPQ01HRVQgbm90IGRlZmluZWQiLCIiLDApOwotI2VuZGlmIC8qIFRJT0NNR0VU ICovCi0jaWZkZWYgX1NWSUQzCi0gICAgZGVidWcoRjEwMCwidHRnbWRtIF9TVklEMyBkZWZpbmVk IiwiIiwwKTsKLSNlbHNlCi0gICAgZGVidWcoRjEwMCwidHRnbWRtIF9TVklEMyBub3QgZGVmaW5l ZCIsIiIsMCk7Ci0jZW5kaWYgLyogX1NWSUQzICovCi0KLSNpZmRlZiBORVRDT05OCi0gICAgaWYg KG5ldGNvbm4pIHsJCQkvKiBOZXR3b3JrIGNvbm5lY3Rpb24gKi8KLSNpZmRlZiBUTl9DT01QT1JU Ci0gICAgICAgIGlmIChpc3RuY29tcG9ydCgpKSB7Ci0JICAgIGdvdHNpZ3MgPSAxOwotCSAgICBy ZXR1cm4odG5nbWRtKCkpOwotCX0gZWxzZQotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLQkgIHJl dHVybigtMik7CQkJLyogTm8gbW9kZW0gc2lnbmFscyAqLwotICAgIH0KLSNlbmRpZiAvKiBORVRD T05OICovCi0KLSNpZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaXBlKSByZXR1cm4oLTIpOwotI2Vu ZGlmIC8qIE5FVENNRCAqLwotI2lmZGVmIE5FVFBUWQotICAgIGlmICh0dHB0eSkgcmV0dXJuKC0y KTsKLSNlbmRpZiAvKiBORVRQVFkgKi8KLQotICAgIHJldHVybigtMyk7CQkJCS8qIFNvcnJ5LCBJ IGRvbid0IGtub3cgaG93Li4uICovCi0KLSNlbmRpZiAvKiBLX01ETUNUTCAqLwotI2VuZGlmIC8q IEhQVVggKi8KLSNlbmRpZiAvKiBRTlggKi8KLX0KLQotLyogIFAgUyBVIFMgUCBFIE4gRCAgLS0g IFB1dCB0aGlzIHByb2Nlc3MgaW4gdGhlIGJhY2tncm91bmQuICAqLwotCi0vKgotICBDYWxsIHdp dGggZmxhZyBub256ZXJvIGlmIHN1c3BlbmRpbmcgaXMgYWxsb3dlZCwgemVybyBpZiBub3QgYWxs b3dlZC4KLSAgUmV0dXJucyAwIG9uIGFwcGFyZW50IHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUgKGZs YWcgd2FzIHplcm8sIG9yCi0gIGtpbGwoKSByZXR1cm5lZCBhbiBlcnJvciBjb2RlLgotKi8KLWlu dAotcHN1c3BlbmQoZmxhZykgaW50IGZsYWc7IHsKLQotI2lmZGVmIFJUVQotICAgIGV4dGVybiBp bnQgcnR1X2J1ZzsKLSNlbmRpZiAvKiBSVFUgKi8KLQotICAgIGlmIChmbGFnID09IDApIHJldHVy bigtMSk7Ci0KLSNpZmRlZiBOT0pDCi0gICAgcmV0dXJuKC0xKTsKLSNlbHNlCi0jaWZkZWYgU0lH VFNUUAotLyoKLSAgVGhlIGJpZyBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgam9iIGNvbnRyb2wg aXMgKnJlYWxseSogc3VwcG9ydGVkLgotICBUaGVyZSdzIG5vIHdheSBLZXJtaXQgY2FuIGtub3cg Zm9yIHN1cmUuICBUaGUgZmFjdCB0aGF0IFNJR1RTVFAgaXMKLSAgZGVmaW5lZCBkb2VzIG5vdCBn dWFyYW50ZWUgdGhlIFVuaXgga2VybmVsIHN1cHBvcnRzIGl0LCBhbmQgdGhlIGZhY3QKLSAgdGhh dCB0aGUgVW5peCBrZXJuZWwgc3VwcG9ydHMgaXQgZG9lc24ndCBndWFyYW50ZWUgdGhhdCB0aGUg dXNlcidzCi0gIHNoZWxsIChvciBvdGhlciBwcm9jZXNzIHRoYXQgaW52b2tlZCBLZXJtaXQpIHN1 cHBvcnRzIGl0LgotKi8KLSNpZmRlZiBSVFUKLSAgICBydHVfYnVnID0gMTsKLSNlbmRpZiAvKiBS VFUgKi8KLSAgICBpZiAoa2lsbCgwLFNJR1NUT1ApIDwgMAotI2lmZGVmIE1JUFMKLS8qIExldCdz IHRyeSB0aGlzIGZvciBNSVBTIHRvby4gKi8KLQkmJiBraWxsKGdldHBpZCgpLFNJR1NUT1ApIDwg MAotI2VuZGlmIC8qIE1JUFMgKi8KLQkpIHsJCQkJLyogSWYgam9iIGNvbnRyb2wsIHN1c3BlbmQg dGhlIGpvYiAqLwotCXBlcnJvcigic3VzcGVuZCIpOwotCWRlYnVnKEYxMDEsInBzdXNwZW5kIGVy cm9yIiwiIixlcnJubyk7Ci0JcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgZGVidWcoRjEwMCwicHN1 c3BlbmQgb2siLCIiLDApOwotICAgIHJldHVybigwKTsKLSNlbHNlCi0gICAgcmV0dXJuKC0xKTsK LSNlbmRpZiAvKiBTSUdUU1RQICovCi0jZW5kaWYgLyogTk9KQyAqLwotfQotCi0vKgotICBzZXR1 aWQgcGFja2FnZSwgYnkgS3Jpc3RvZmZlciBFcmlrc3Nvbiwgd2l0aCBjb250cmlidXRpb25zIGZy b20gRGVhbgotICBMb25nIGFuZCBmZGMuCi0qLwotCi0vKiBUaGUgZm9sbG93aW5nIGlzIGZvciBT Q08gd2hlbiBDS19BTlNJTElCUyBpcyBkZWZpbmVkLi4uICovCi0jaWZkZWYgTV9VTklYCi0jaWZk ZWYgQ0tfQU5TSUxJQlMKLSNpZm5kZWYgTk9HRVRJRF9QUk9UT1MKLSNkZWZpbmUgTk9HRVRJRF9Q Uk9UT1MKLSNlbmRpZiAvKiBOT0dFVElEX1BST1RPUyAqLwotI2VuZGlmIC8qIENLX0FOU0lMSUJT ICovCi0jZW5kaWYgLyogTV9VTklYICovCi0KLSNpZm5kZWYgX1BPU0lYX1NPVVJDRQotI2lmbmRl ZiBTVU5PUzQKLSNpZm5kZWYgTkVYVAotI2lmbmRlZiBQUzJBSVgxMAotI2lmbmRlZiBzZXF1ZW50 Ci0jaWZuZGVmIEhQVVg5Ci0jaWZuZGVmIEhQVVgxMAotI2lmbmRlZiBDT0hFUkVOVAotI2lmbmRl ZiBOT0dFVElEX1BST1RPUwotX1BST1RPVFlQKCBVSURfVCBnZXR1aWQsICh2b2lkKSApOwotX1BS T1RPVFlQKCBVSURfVCBnZXRldWlkLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggVUlEX1QgZ2V0cmV1 aWQsICh2b2lkKSApOwotX1BST1RPVFlQKCBVSURfVCBnZXRnaWQsICh2b2lkKSApOwotX1BST1RP VFlQKCBVSURfVCBnZXRlZ2lkLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggVUlEX1QgZ2V0cmVnaWQs ICh2b2lkKSApOwotI2VuZGlmIC8qIE5PR0VUSURfUFJPVE9TICovCi0jZWxzZQotX1BST1RPVFlQ KCBVSURfVCBnZXRyZXVpZCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIFVJRF9UIGdldHJlZ2lkLCAo dm9pZCkgKTsKLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotI2VuZGlmIC8qIEhQVVgxMCAqLwotI2Vu ZGlmIC8qIEhQVVg5ICovCi0jZW5kaWYgLyogc2VxdWVudCAqLwotI2VuZGlmIC8qIFBTMkFJWDEw ICovCi0jZW5kaWYgLyogTkVYVCAqLwotI2VuZGlmIC8qIFNVTk9TNCAqLwotI2VuZGlmIC8qIF9Q T1NJWF9TT1VSQ0UgKi8KLQotLyoKLVN1YmplY3Q6IFNldC11c2VyLWlkCi1UbzogZmRjQHdhdHN1 bi5jYy5jb2x1bWJpYS5lZHUgKEZyYW5rIGRhIENydXopCi1EYXRlOiBTYXQsIDIxIEFwciA5MCA0 OjQ4OjI1IE1FUwotRnJvbTogS3Jpc3RvZmZlciBFcmlrc3NvbiA8c2tlQHBrbWFiLnNlPgotCi1U aGlzIGlzIGEgc2V0IG9mIGZ1bmN0aW9ucyB0byBiZSB1c2VkIGluIHByb2dyYW1zIHRoYXQgbWF5 IGJlIHJ1biBzZXQtdXNlci1pZAotYW5kL29yIHNldC1ncm91cC1pZC4gVGhleSBoYW5kbGUgYm90 aCB0aGUgY2FzZSB3aGVyZSB0aGUgcHJvZ3JhbSBpcyBub3QgcnVuCi13aXRoIHN1Y2ggcHJpdmls ZWdlcyAobm90aGluZyBzcGVjaWFsIGhhcHBlbnMgdGhlbiksIGFuZCB0aGUgY2FzZSB3aGVyZSBv bmUKLW9yIGJvdGggb2YgdGhlc2Ugc2V0LWlkIG1vZGVzIGFyZSB1c2VkLiAgVGhlIHByb2dyYW0g aXMgbWFkZSB0byBydW4gd2l0aCB0aGUKLXVzZXIncyByZWFsIHVzZXIgYW5kIGdyb3VwIGlkcyBt b3N0IG9mIHRoZSB0aW1lLCBleGNlcHQgZm9yIHdoZW4gbW9yZQotcHJpdmlsZWdlcyBhcmUgbmVl ZGVkLiAgRG9uJ3Qgc2V0LXVzZXItaWQgdG8gInJvb3QiLgotCi1UaGlzIHdvcmtzIG9uIFN5c3Rl bSBWIGFuZCBQT1NJWC4gIEluIEJTRCwgaXQgZGVwZW5kcyBvbiB0aGUKLSJzYXZlZC1zZXQtdXNl ci1pZCIgZmVhdHVyZS4KLSovCi0KLSNkZWZpbmUgVUlEX1JPT1QgMAkJCS8qIFJvb3QgdXNlciBh bmQgZ3JvdXAgaWRzICovCi0jZGVmaW5lIEdJRF9ST09UIDAKLQotLyoKLSAgVGhlIGZvbGxvd2lu ZyBjb2RlIGRlZmluZXMgdGhlIHN5bWJvbCBTRVRFVUlEIGZvciBVTklYIHN5c3RlbXMgYmFzZWQK LSAgb24gQlNENC40IChlaXRoZXIgLUVuY3VtYmVyZWQgb3IgLUxpdGUpLiAgVGhpcyBwcm9ncmFt IHdpbGwgdGhlbiB1c2UKLSAgc2V0ZXVpZCgpIGFuZCBzZXRlZ2lkKCkgaW5zdGVhZCBvZiBzZXR1 aWQoKSBhbmQgc2V0Z2lkKCksIHdoaWNoIHN0aWxsCi0gIGRvbid0IGFsbG93IGFyYml0cmFyeSBz d2l0Y2hpbmcuICBJdCBhbHNvIGF2b2lkcyBzZXRyZXVpZCgpIGFuZAotICBzZXRyZWdpZCgpLCB3 aGljaCBhcmUgaW5jbHVkZWQgaW4gQlNENC40IGZvciBjb21wYXRpYmlsaXR5IG9ubHksIGFyZQot ICBpbnNlY3VyZSwgYW5kIHByaW50IHdhcm5pbmdzIHRvIHN0ZGVyciB1bmRlciBhdCBsZWFzdCBv bmUgc3lzdGVtIChOZXRCU0QKLSAgMS4wKS4gIE5vdGUgdGhhdCBQT1NJWCBzeXN0ZW1zIHNob3Vs ZCBzdGlsbCB1c2Ugc2V0dWlkKCkgYW5kIHNldGdpZCgpOwotICB0aGUgc2V0ZXVpZCgpIGFuZCBz ZXRlZ2lkKCkgZnVuY3Rpb25zIGFyZSBCU0Q0LjQgZXh0ZW5zaW9ucyB0byB0aGUKLSAgUE9TSVgg bW9kZWwuICBNaWtlIExvbmcgPG1pa2UubG9uZ0BhbmFsb2cuY29tPiwgOC85NC4KLSovCi0jaWZk ZWYgQlNENDQKLSNkZWZpbmUgU0VURVVJRAotI2VuZGlmIC8qIEJTRDQ0ICovCi0KLS8qCi0gIFRo ZSBmb2xsb3dpbmcgY29uc3RydWN0aW9uIGF1dG9tYXRpY2FsbHkgZGVmaW5lcyB0aGUgc3ltYm9s IFNFVFJFVUlEIGZvcgotICBVTklYIHZlcnNpb25zIGJhc2VkIG9uIEJlcmtlbGV5IFVuaXggNC4y IGFuZCA0LjMuICBJZiB0aGlzIHN5bWJvbCBpcwotICBkZWZpbmVkLCB0aGVuIHRoaXMgcHJvZ3Jh bSB3aWxsIHVzZSBnZXRyZXVpZCgpIGFuZCBnZXRyZWdpZCgpIGNhbGxzIGluCi0gIHByZWZlcmVu Y2UgdG8gZ2V0dWlkKCkgYW5kIGdldGdpZCgpLCB3aGljaCBpbiBCZXJrZWxleS1iYXNlZCBVbml4 ZXMgZG8KLSAgbm90IGFsbG93IGFyYml0cmFyeSBzd2l0Y2hpbmcgYmFjayBhbmQgZm9ydGggb2Yg cmVhbCAmIGVmZmVjdGl2ZSB1aWQuCi0gIFRoaXMgY29uc3RydWN0aW9uIGFsc28gYWxsb3dzIC1E U0VUUkVVSUQgdG8gYmUgcHV0IG9uIHRoZSBjYyBjb21tYW5kIGxpbmUKLSAgZm9yIGFueSBzeXN0 ZW0gdGhhdCBoYXMgYW5kIHdhbnRzIHRvIHVzZSBzZXRyZVt1Z11pZCgpLiAgSXQgYWxzbyBwcmV2 ZW50cwotICBhdXRvbWF0aWMgZGVmaW5pdGlvbiBvZiBTRVRSRVVJRCBpZiAtRE5PU0VUUkVVIGlz IGluY2x1ZGVkIG9uIHRoZSBjYwotICBjb21tYW5kIGxpbmUgKG9yIG90aGVyd2lzZSBkZWZpbmVk KS4KLSovCi0jaWZkZWYgRlQxOAkJCQkvKiBOb25lIG9mIHRoaXMgZm9yIEZvcnR1bmUuICovCi0j ZGVmaW5lIE5PU0VUUkVVCi0jZW5kaWYgLyogRlQxOCAqLwotCi0jaWZkZWYgQU5ZQlNECi0jaWZu ZGVmIEJTRDI5Ci0jaWZuZGVmIEJTRDQxCi0jaWZuZGVmIFNFVFJFVUlECi0jaWZuZGVmIE5PU0VU UkVVCi0jaWZuZGVmIFNFVEVVSUQKLSNkZWZpbmUgU0VUUkVVSUQKLSNlbmRpZiAvKiBTRVRFVUlE ICovCi0jZW5kaWYgLyogTk9TRVRSRVUgKi8KLSNlbmRpZiAvKiBTRVRSRVVJRCAqLwotI2VuZGlm IC8qICFCU0Q0MSAqLwotI2VuZGlmIC8qICFCU0QyOSAqLwotI2VuZGlmIC8qIEFOWUJTRCAqLwot Ci0vKiBWYXJpYWJsZXMgZm9yIHVzZXIgYW5kIGdyb3VwIElEcy4gKi8KLQotc3RhdGljIFVJRF9U IHJlYWx1aWQgPSAoVUlEX1QpIC0xLCBwcml2dWlkID0gKFVJRF9UKSAtMTsKLXN0YXRpYyBHSURf VCByZWFsZ2lkID0gKEdJRF9UKSAtMSwgcHJpdmdpZCA9IChHSURfVCkgLTE7Ci0KLQotLyogUCBS IEkgViBfIEkgTiBJICAtLSAgSW5pdGlhbGl6ZSBwcml2aWxlZ2VzIHBhY2thZ2UgICovCi0KLS8q IENhbGxlZCBhcyBlYXJseSBhcyBwb3NzaWJsZSBpbiBhIHNldC11aWQgb3Igc2V0LWdpZCBwcm9n cmFtIHRvIHN0b3JlIHRoZQotICogc2V0LXRvIHVpZCBhbmQvb3IgZ2lkIGFuZCBzdGVwIGRvd24g dG8gdGhlIHVzZXJzIHJlYWwgdWlkIGFuZCBnaWQuIFRoZQotICogc3RvcmVkIGlkJ3MgY2FuIGJl IHRlbXBvcmFyaWx5IHJlc3RvcmVkIChhbGxvd2VkIGluIFN5c3RlbSBWKSBkdXJpbmcKLSAqIG9w ZXJhdGlvbnMgdGhhdCByZXF1aXJlIHRoZSBwcml2aWxlZ2UuICBNb3N0IG9mIHRoZSB0aW1lLCB0 aGUgcHJvZ3JhbQotICogc2hvdWxkIGV4ZWN1dGUgaW4gdW5wcml2aWxpZ2VkIHN0YXRlLCB0byBu b3QgaW1wb3NlIGFueSBzZWN1cml0eSB0aHJlYXQuCi0gKgotICogTm90ZTogRG9uJ3QgZm9yZ2V0 IHRoYXQgYWNjZXNzKCkgYWx3YXlzIHVzZXMgdGhlIHJlYWwgaWQ6cyB0byBkZXRlcm1pbmUKLSAq IGZpbGUgYWNjZXNzLCBldmVuIHdpdGggcHJpdmlsZWdlcyByZXN0b3JlZC4KLSAqCi0gKiBSZXR1 cm5zIGFuIGVycm9yIG1hc2ssIHdpdGggZXJyb3IgdmFsdWVzIG9yOmVkIHRvZ2V0aGVyOgotICog ICAxIGlmIHNldHVpZCgpIGZhaWxzLAotICogICAyIGlmIHNldGdpZCgpIGZhaWxzLCBhbmQKLSAq ICAgNCBpZiB0aGUgcHJvZ3JhbSBpcyBzZXQtdXNlci1pZCB0byAicm9vdCIsIHdoaWNoIGNhbid0 IGJlIGhhbmRsZWQuCi0gKgotICogT25seSB0aGUgcmV0dXJuIHZhbHVlIDAgaW5kaWNhdGVzIHJl YWwgc3VjY2Vzcy4gSW4gY2FzZSBvZiBmYWlsdXJlLAotICogdGhvc2UgcHJpdmlsZWdlcyB0aGF0 IGNvdWxkIGJlIHJlZHVjZWQgaGF2ZSBiZWVuLCBhdCBsZWFzdCwgYnV0IHRoZQotICogcHJvZ3Jh bSBzaG91bGQgYmUgYWJvcnRlZCBub25lLXRoZS1sZXNzLgotICoKLSAqIEFsc28gbm90ZSB0aGF0 IHRoZXNlIGZ1bmN0aW9ucyBkbyBub3QgZXhwZWN0IHRoZSB1aWQgb3IgZ2lkIHRvIGNoYW5nZQot ICogd2l0aG91dCB0aGVpciBrbm93aW5nLiBJdCBtYXkgd29yayBpZiBpdCBpcyBvbmx5IGRvbmUg dGVtcG9yYXJpbHksIGJ1dAotICogeW91J3JlIG9uIHlvdXIgb3duLgotICovCi1pbnQKLXByaXZf aW5pKCkgewotICAgIGludCBlcnIgPSAwOwotCi0jaWZuZGVmIEhBVkVfTE9DS0RFVgotCi0gICAg LyogU2F2ZSByZWFsIElEOnMuICovCi0gICAgcmVhbHVpZCA9IGdldHVpZCgpOwotICAgIHJlYWxn aWQgPSBnZXRnaWQoKTsKLQotICAgIC8qIFNhdmUgY3VycmVudCBlZmZlY3RpdmUgSUQ6cywgdGhv c2Ugc2V0IHRvIGF0IHByb2dyYW0gZXhlYy4gKi8KLSAgICBwcml2dWlkID0gZ2V0ZXVpZCgpOwot ICAgIHByaXZnaWQgPSBnZXRlZ2lkKCk7Ci0KLSAgICAvKiBJZiBydW5uaW5nIHNldC11aWQsIGdv IGRvd24gdG8gcmVhbCB1aWQsIG90aGVyd2lzZSByZW1lbWJlciB0aGF0Ci0gICAgICogbm8gcHJp dmlsZWdlZCB1aWQgaXMgYXZhaWxhYmxlLgotICAgICAqCi0gICAgICogRXhjZXB0aW9uczoKLSAg ICAgKgotICAgICAqIDEpIElmIHRoZSByZWFsIHVpZCBpcyBhbHJlYWR5ICJyb290IiBhbmQgdGhl IHNldC11aWQgdWlkICh0aGUKLSAgICAgKiBpbml0aWFsIGVmZmVjdGl2ZSB1aWQpIGlzIG5vdCAi cm9vdCIsIHRoZW4gd2Ugd291bGQgaGF2ZSB0cm91YmxlCi0gICAgICogaWYgd2Ugd2VudCAiZG93 biIgdG8gInJvb3QiIGhlcmUsIGFuZCB0aGVuIHRlbXBvcmFyaWx5IGJhY2sgdG8gdGhlCi0gICAg ICogc2V0LXVpZCB1aWQgKG5vdCAicm9vdCIpIGFuZCB0aGVuIGFnYWluIHRyaWVkIHRvIGJlY29t ZSAicm9vdCIuIEkKLSAgICAgKiB0aGluayB0aGUgInNhdmVkIHNldC11aWQiIGlzIGxvc3Qgd2hl biBjaGFuZ2luZyB1aWQgZnJvbSBlZmZlY3RpdmUKLSAgICAgKiB1aWQgInJvb3QiLCB3aGljaCBj aGFuZ2VzIGFsbCB1aWQsIG5vdCBvbmx5IHRoZSBlZmZlY3RpdmUgdWlkLiBCdXQKLSAgICAgKiBp biB0aGlzIHNpdHVhdGlvbiwgd2UgY2FuIHNpbXBseSBnbyB0byAicm9vdCIgYW5kIHN0YXkgdGhl cmUgYWxsCi0gICAgICogdGhlIHRpbWUuIFRoYXQgc2hvdWxkIGdpdmUgc3VmZmljaWVudCBwcml2 aWxlZ2UgKHVuZGVyc3RhdGVtZW50ISksCi0gICAgICogYW5kIGdpdmUgdGhlIHJpZ2h0IHVpZHMg Zm9yIHN1YnByb2Nlc3Nlcy4KLSAgICAgKgotICAgICAqIDIpIElmIHRoZSBzZXQtdWlkICh0aGUg aW5pdGlhbCBlZmZlY3RpdmUgdWlkKSBpcyAicm9vdCIsIGFuZCB3ZQotICAgICAqIGNoYW5nZSB1 aWQgdG8gdGhlIHJlYWwgdWlkLCB3ZSBjYW4ndCBjaGFuZ2UgaXQgYmFjayB0byAicm9vdCIgd2hl bgotICAgICAqIHdlIG5lZWQgdGhlIHByaXZpbGVnZSwgZm9yIHRoZSBzYW1lIHJlYXNvbiBhcyBp biAxKS4gVGh1cywgd2UgY2FuJ3QKLSAgICAgKiBoYW5kbGUgcHJvZ3JhbXMgdGhhdCBhcmUgc2V0 LXVzZXItaWQgdG8gInJvb3QiIGF0IGFsbC4gVGhlIHByb2dyYW0KLSAgICAgKiBzaG91bGQgYmUg c3RvcHBlZC4gIFVzZSBzb21lIG90aGVyIHVpZC4gICJyb290IiBpcyBwcm9iYWJseSB0b28KLSAg ICAgKiBwcml2aWxlZ2VkIGZvciBzdWNoIHRoaW5ncywgYW55d2F5LiAoVGhlIHVpZCBpcyByZXZl cnRlZCB0byB0aGUKLSAgICAgKiByZWFsIHVpZCB1bnRpbCB0ZXJtaW5hdGlvbi4pCi0gICAgICoK LSAgICAgKiBUaGVzZSB0d28gZXhjZXB0aW9ucyBoYXZlIHRoZSBlZmZlY3QgdGhhdCB0aGUgInJv b3QiIHVpZCB3aWxsIG5ldmVyCi0gICAgICogYmUgb25lIG9mIHRoZSB0d28gdWlkcyB0aGF0IGFy ZSBiZWluZyBzd2l0Y2hlZCBiZXR3ZWVuLCB3aGljaCBhbHNvCi0gICAgICogbWVhbnMgd2UgZG9u J3QgaGF2ZSB0byBjaGVjayBmb3Igc3VjaCBjYXNlcyBpbiB0aGUgc3dpdGNoaW5nCi0gICAgICog ZnVuY3Rpb25zLgotICAgICAqCi0gICAgICogTm90ZSB0aGF0IGV4Y2VwdGlvbiAxKSBpcyBoYW5k bGVkIGJ5IHRoZXNlIHJvdXRpbmVzIChieSBjb25zdGFudGx5Ci0gICAgICogcnVubmluZyB3aXRo IHVpZCAicm9vdCIsIHdoaWxlIGV4Y2VwdGlvbiAyKSBpcyBhIHNlcmlvdXMgZXJyb3IsIGFuZAot ICAgICAqIGlzIG5vdCBwcm92aWRlZCBmb3IgYXQgYWxsIGluIHRoZSBzd2l0Y2hpbmcgZnVuY3Rp b25zLgotICAgICAqLwotICAgIGlmIChyZWFsdWlkID09IHByaXZ1aWQpCi0JcHJpdnVpZCA9IChV SURfVCkgLTE7CQkvKiBOb3QgcnVubmluZyBzZXQtdXNlci1pZC4gKi8KLQotICAgIC8qIElmIHJ1 bm5pbmcgc2V0LWdpZCwgZ28gZG93biB0byByZWFsIGdpZCwgb3RoZXJ3aXNlIHJlbWVtYmVyIHRo YXQKLSAgICAgKiBubyBwcml2aWxlZ2VkIGdpZCBpcyBhdmFpbGFibGUuCi0gICAgICoKLSAgICAg KiBUaGVyZSBhcmUgbm8gZXhjZXB0aW9uIGxpa2UgdGhlcmUgaXMgZm9yIHRoZSB1c2VyIGlkLCBz aW5jZSB0aGVyZQotICAgICAqIGlzIG5vIGdyb3VwIGlkIHRoYXQgaXMgcHJpdmlsZWdlZCBpbiB0 aGUgbWFubmVyIG9mIHVpZCAicm9vdCIuCi0gICAgICogVGhlcmUgY291bGQgYmUgZXF1aXZhbGVu dCBwcm9ibGVtcyBmb3IgZ3JvdXAgY2hhbmdpbmcgaWYgdGhlCi0gICAgICogcHJvZ3JhbSBzb21l dGltZXMgcmFuIHdpdGggdWlkICJyb290IiBhbmQgc29tZXRpbWVzIG5vdCwgYnV0Ci0gICAgICog dGhhdCBpcyBhbHJlYWR5IGF2b2lkZWQgYXMgZXhwbGFpbmVkIGFib3ZlLgotICAgICAqCi0gICAg ICogVGh1cyB3ZSBjYW4gZXhwZWN0IGFsd2F5cyB0byBiZSBhYmxlIHRvIHN3aXRjaCB0byB0aGUg InNhdmVkIHNldC0KLSAgICAgKiBnaWQiIHdoZW4gd2Ugd2FudCwgYW5kIGJhY2sgdG8gdGhlIHJl YWwgZ2lkIGFnYWluLiBZb3UgbWF5IGFsc28KLSAgICAgKiBkcmF3IHRoZSBjb25jbHVzaW9uIHRo YXQgc2V0LWdpZCBwcm92aWRlcyBmb3IgZmV3ZXIgaGFzc2xlcyB0aGFuCi0gICAgICogc2V0LXVp ZC4KLSAgICAgKi8KLQotI2lmZGVmIFNVSURERUJVRwotICAgIGZwcmludGYoc3RkZXJyLCJVSURf Uk9PVD0lZFxuIixVSURfUk9PVCk7Ci0gICAgZnByaW50ZihzdGRlcnIsInJlYWx1aWQ9JWRcbiIs cmVhbHVpZCk7Ci0gICAgZnByaW50ZihzdGRlcnIsInByaXZ1aWQ9JWRcbiIscHJpdnVpZCk7Ci0j ZW5kaWYgLyogU1VJRERFQlVHICovCi0KLSAgICBpZiAocmVhbGdpZCA9PSBwcml2Z2lkKQkJLyog SWYgbm90IHJ1bm5pbmcgc2V0LXVzZXItaWQsICovCi0gICAgICBwcml2Z2lkID0gKEdJRF9UKSAt MTsJCS8qICByZW1lbWJlciBpdCB0aGlzIHdheS4gKi8KLQotICAgIGVyciA9IHByaXZfb2ZmKCk7 CQkJLyogVHVybiBvZmYgc2V0dWlkIHByaXZpbGVnZS4gKi8KLQotICAgIGlmIChwcml2dWlkID09 IFVJRF9ST09UKQkJLyogSWYgc2V0dWlkIHRvIHJvb3QsICovCi0gICAgICBlcnIgfD0gNDsJCQkJ LyogcmV0dXJuIHRoaXMgZXJyb3IuICovCi0KLSAgICBpZiAocmVhbHVpZCA9PSBVSURfUk9PVCkg ewkJLyogSWYgcmVhbCBpZCBpcyByb290LCAqLwotCXByaXZ1aWQgPSAoVUlEX1QpIC0xOwkJLyog c3RheSByb290IGF0IGFsbCB0aW1lcy4gKi8KLSNpZmRlZiBBVFQ3MzAwCi0JLyogSWYgS2VybWl0 IGluc3RhbGxlZCBTVUlEIHV1Y3AgYW5kIHVzZXIgaXMgcnVubmluZyBhcyByb290ICovCi0JZXJy ICY9IH4xOwkJCS8qIFN5c3RlbSBWIFIwIGRvZXMgbm90IHNhdmUgVUlEICovCi0jZW5kaWYgLyog QVRUNzMwMCAqLwotICAgIH0KLSNlbmRpZiAvKiBIQVZFX0xPQ0tERVYgKi8KLSAgICByZXR1cm4o ZXJyKTsKLX0KLQotCi0vKiBNYWNyb3MgZm9yIGhpZGluZyB0aGUgZGlmZmVyZW5jZXMgaW4gVUlE L0dJRCBzZXR0aW5nIGJldHdlZW4gdmFyaW91cyBVbml4Ci0gKiBzeXN0ZW1zLiBUaGVzZSBtYWNy b3Mgc2hvdWxkIGFsd2F5cyBiZSBjYWxsZWQgd2l0aCBib3RoIHRoZSBwcml2aWxlZ2VkIElECi0g KiBhbmQgdGhlIG5vbi1wcml2aWxlZ2VkIElELiBUaGUgb25lIGluIHRoZSBzZWNvbmQgYXJndW1l bnQsIHdpbGwgYmVjb21lIHRoZQotICogZWZmZWN0aXZlIElELiBUaGUgb25lIGluIHRoZSBmaXJz dCBhcmd1bWVudCB3aWxsIGJlIHJldGFpbmVkIGZvciBsYXRlcgotICogcmV0cmlldmFsLgotICov Ci0jaWZkZWYgU0VUUkVVSUQKLSNpZmRlZiBTQVZFRFVJRAotLyogT24gQlNEIHN5c3RlbXMgd2l0 aCB0aGUgc2F2ZWQtVUlEIGZlYXR1cmUsIHdlIGp1c3QganVnZ2xlIHRoZSBlZmZlY3RpdmUKLSAq IFVJRCBiYWNrIGFuZCBmb3J0aCwgYW5kIGxlYXZlIHRoZSByZWFsIFVJRCBhdCBpdHMgdHJ1ZSB2 YWx1ZS4gIFRoZSBrZXJuZWwKLSAqIGFsbG93cyBzd2l0Y2hpbmcgdG8gYm90aCB0aGUgY3VycmVu dCByZWFsIFVJRCwgdGhlIGVmZmVjdGl2ZSBVSUQsIGFuZCB0aGUKLSAqIFVJRCB3aGljaCB0aGUg cHJvZ3JhbSBpcyBzZXQtVUlEIHRvLiAgVGhlIHNhdmVkIHNldC1VSUQgYWx3YXlzIGhvbGRzIHRo ZQotICogcHJpdmlsZWdlZCBVSUQgZm9yIHVzLCBhbmQgdGhlIHJlYWwgVUlEIHdpbGwgYWx3YXlz IGJlIHRoZSBub24tcHJpdmlsZWdlZCwKLSAqIGFuZCB3ZSBjYW4gZnJlZWx5IGNob29zZSBvbmUg b2YgdGhlbSBmb3IgdGhlIGVmZmVjdGl2ZSBVSUQgYXQgYW55IHRpbWUuCi0gKi8KLSNkZWZpbmUg c3dpdGNodWlkKGhpZGRlbixhY3RpdmUpIHNldHJldWlkKCAoVUlEX1QpIC0xLCBhY3RpdmUpCi0j ZGVmaW5lIHN3aXRjaGdpZChoaWRkZW4sYWN0aXZlKSBzZXRyZWdpZCggKEdJRF9UKSAtMSwgYWN0 aXZlKQotCi0jZWxzZSAgIC8qIFNFVFJFVUlELCFTQVZFRFVJRCAqLwotCi0vKiBPbiBzeXN0ZW1z IHdpdGggc2V0cmVYaWQoKSBidXQgd2l0aG91dCB0aGUgc2F2ZWQtVUlEIGZlYXR1cmUsIG5vdGFi bHkKLSAqIEJTRCA0LjIsIHdlIHN3YXAgdGhlIHJlYWwgYW5kIGVmZmVjdGl2ZSBVSURzIGVhY2gg dGltZS4gIEl0J3MKLSAqIHRoZSBlZmZlY3RpdmUgVUlEIHRoYXQgd2UgYXJlIGludGVyZXN0ZWQg aW4sIGJ1dCB3ZSBoYXZlIHRvIHJldGFpbiB0aGUKLSAqIHVudXNlZCBVSUQgc29tZXdoZXJlIHRv IGVuYWJsZSB1cyB0byByZXN0b3JlIGl0IGxhdGVyLCBhbmQgd2UgZG8gdGhpcwotICogaW4gdGhl IHJlYWwgVUlELiAgVGhlIGtlcm5lbCBvbmx5IGFsbG93cyBzd2l0Y2hpbmcgdG8gZWl0aGVyIHRo ZSBjdXJyZW50Ci0gKiByZWFsIG9yIHRoZSBlZmZlY3RpdmUgVUlELCB1bmxlc3MgeW91J3JlICJy b290Ii4KLSAqLwotI2RlZmluZSBzd2l0Y2h1aWQoaGlkZGVuLGFjdGl2ZSkJc2V0cmV1aWQoaGlk ZGVuLGFjdGl2ZSkKLSNkZWZpbmUgc3dpdGNoZ2lkKGhpZGRlbixhY3RpdmUpCXNldHJlZ2lkKGhp ZGRlbixhY3RpdmUpCi0jZW5kaWYKLQotI2Vsc2UgLyogIVNFVFJFVUlELCAhU0FWRURVSUQgKi8K LQotI2lmZGVmIFNFVEVVSUQKLS8qCi0gIEJTRCA0LjQgd29ya3Mgc2ltaWxhcmx5IHRvIFN5c3Rl bSBWIGFuZCBQT1NJWCAoc2VlIGJlbG93KSwgYnV0IHVzZXMKLSAgc2V0ZVhpZCgpIGluc3RlYWQg b2Ygc2V0WGlkKCkgdG8gY2hhbmdlIGVmZmVjdGl2ZSBJRHMuICBJbiBhZGRpdGlvbiwgdGhlCi0g IHNldGVYaWQoKSBmdW5jdGlvbnMgd29yayB0aGUgc2FtZSBmb3IgInJvb3QiIGFzIGZvciBvdGhl ciB1c2Vycy4KLSovCi0jZGVmaW5lIHN3aXRjaHVpZChoaWRkZW4sYWN0aXZlKQlzZXRldWlkKGFj dGl2ZSkKLSNkZWZpbmUgc3dpdGNoZ2lkKGhpZGRlbixhY3RpdmUpCXNldGVnaWQoYWN0aXZlKQot Ci0jZWxzZSAvKiAhU0VURVVJRCAqLwotCi0vKiBPbiBTeXN0ZW0gViBhbmQgUE9TSVgsIHRoZSBv bmx5IHRoaW5nIHdlIGNhbiBjaGFuZ2UgaXMgdGhlIGVmZmVjdGl2ZSBVSUQKLSAqICh1bmxlc3Mg dGhlIGN1cnJlbnQgZWZmZWN0aXZlIFVJRCBpcyAicm9vdCIsIGJ1dCBpbml0c3VpZCgpIGF2b2lk cyB0aGF0IGZvcgotICogdXMpLiAgVGhlIGtlcm5lbCBhbGxvd3Mgc3dpdGNoaW5nIHRvIHRoZSBj dXJyZW50IHJlYWwgVUlEIG9yIHRvIHRoZSBzYXZlZAotICogc2V0LVVJRC4gIFRoZXNlIGFyZSBh bHdheXMgc2V0IHRvIHRoZSBub24tcHJpdmlsZWdlZCBVSUQgYW5kIHRoZSBwcml2aWxlZ2VkCi0g KiBVSUQsIHJlc3BlY3RpdmVseSwgYW5kIHdlIG9ubHkgY2hhbmdlIHRoZSBlZmZlY3RpdmUgVUlE LiAgVGhpcyBicmVha3MgaWYKLSAqIHRoZSBjdXJyZW50IGVmZmVjdGl2ZSBVSUQgaXMgInJvb3Qi LCB0aG91Z2gsIGJlY2F1c2UgZm9yICJyb290IiBzZXR1aWQvZ2lkCi0gKiBiZWNvbWVzIG1vcmUg cG93ZXJmdWwsIHdoaWNoIGlzIHdoeSBpbml0c3VpZCgpIHRyZWF0cyAicm9vdCIgc3BlY2lhbGx5 LgotICogTm90ZTogVGhhdCBzcGVjaWFsIHRyZWF0bWVudCBtYXliZSBjb3VsZCBiZSBpZ25vcmVk IGZvciBCU0Q/ICBOb3RlOiBGb3IKLSAqIHN5c3RlbXMgdGhhdCBkb24ndCBmaXQgYW55IG9mIHRo ZXNlIGZvdXIgY2FzZXMsIHdlIHNpbXBseSBjYW4ndCBzdXBwb3J0Ci0gKiBzZXQtVUlELgotICov Ci0jZGVmaW5lIHN3aXRjaHVpZChoaWRkZW4sYWN0aXZlKQlzZXR1aWQoYWN0aXZlKQotI2RlZmlu ZSBzd2l0Y2hnaWQoaGlkZGVuLGFjdGl2ZSkJc2V0Z2lkKGFjdGl2ZSkKLQotI2VuZGlmIC8qIFNF VEVVSUQgKi8KLSNlbmRpZiAvKiBTRVRSRVVJRCAqLwotCi0KLS8qIFAgUiBJIFYgXyBPIE4gIC0t ICBUdXJuIG9uIHRoZSBzZXR1aWQgYW5kL29yIHNldGdpZCAqLwotCi0vKiBHbyB0byB0aGUgcHJp dmlsZWdlZCB1aWQgKGdpZCkgdGhhdCB0aGUgcHJvZ3JhbSBpcyBzZXQtdXNlci1pZAotICogKHNl dC1ncm91cC1pZCkgdG8sIHVubGVzcyB0aGUgcHJvZ3JhbSBpcyBydW5uaW5nIHVucHJpdmlsZWdl ZC4KLSAqIElmIHNldHVpZCgpIGZhaWxzLCByZXR1cm4gdmFsdWUgd2lsbCBiZSAxLiBJZiBnZXR1 aWQoKSBmYWlscyBpdAotICogd2lsbCBiZSAyLiAgUmV0dXJuIGltbWVkaWF0ZWx5IGFmdGVyIGZp cnN0IGZhaWx1cmUsIGFuZCB0aGUgZnVuY3Rpb24KLSAqIHRyaWVzIHRvIHJlc3RvcmUgYW55IHBh cnRpYWwgd29yayBkb25lLiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MuCi0gKiBHcm91cCBpZCBpcyBj aGFuZ2VkIGZpcnN0LCBzaW5jZSBpdCBpcyBsZXNzIHNlcmlvdXMgdGhhbiB1c2VyIGlkLgotICov Ci1pbnQKLXByaXZfb24oKSB7Ci0jaWZuZGVmIEhBVkVfTE9DS0RFVgotICAgIGlmIChwcml2Z2lk ICE9IChHSURfVCkgLTEpCi0gICAgICBpZiAoc3dpdGNoZ2lkKHJlYWxnaWQscHJpdmdpZCkpCi0g ICAgICAgIHJldHVybigyKTsKLQotICAgIGlmIChwcml2dWlkICE9IChVSURfVCkgLTEpCi0gICAg ICBpZiAoc3dpdGNodWlkKHJlYWx1aWQscHJpdnVpZCkpIHsKLQkgIGlmIChwcml2Z2lkICE9IChH SURfVCkgLTEpCi0JICAgIHN3aXRjaGdpZChwcml2Z2lkLHJlYWxnaWQpOwotCSAgcmV0dXJuKDEp OwotICAgICAgfQotI2VuZGlmIC8qIEhBVkVfTE9DS0RFViAqLwotICAgIHJldHVybigwKTsKLX0K LQotLyogUCBSIEkgViBfIE8gRiBGICAtLSAgVHVybiBvbiB0aGUgcmVhbCB1aWQgYW5kIGdpZCAq LwotCi0vKiBSZXR1cm4gdG8gdGhlIHVucHJpdmlsZWdlZCB1aWQgKGdpZCkgYWZ0ZXIgYW4gdGVt cG9yYXJ5IHZpc2l0IHRvCi0gKiBwcml2aWxlZ2VkIHN0YXR1cywgdW5sZXNzIHRoZSBwcm9ncmFt IGlzIHJ1bm5pbmcgd2l0aG91dCBzZXQtdXNlci1pZAotICogKHNldC1ncm91cC1pZCkuIFJldHVy bnMgMSBmb3IgZmFpbHVyZSBpbiBzZXR1aWQoKSBhbmQgMiBmb3IgZmFpbHVyZQotICogaW4gc2V0 Z2lkKCkgb3I6ZWQgdG9nZXRoZXIuIFRoZSBmdW5jdGlvbnMgdHJpZXMgdG8gcmV0dXJuIGJvdGgg dWlkCi0gKiBhbmQgZ2lkIHRvIHVucHJpdmlsZWdlZCBzdGF0ZSwgcmVnYXJkbGVzcyBvZiBlcnJv cnMuIFJldHVybnMgMCBvbgotICogc3VjY2Vzcy4KLSAqLwotaW50Ci1wcml2X29mZigpIHsKLSAg ICBpbnQgZXJyID0gMDsKLSNpZm5kZWYgSEFWRV9MT0NLREVWCi0gICAgaWYgKHByaXZ1aWQgIT0g KFVJRF9UKSAtMSkKLSAgICAgICBpZiAoc3dpdGNodWlkKHByaXZ1aWQscmVhbHVpZCkpCi0JICBl cnIgfD0gMTsKLQotICAgIGlmIChwcml2Z2lkICE9IChHSURfVCkgLTEpCi0gICAgICAgaWYgKHN3 aXRjaGdpZChwcml2Z2lkLHJlYWxnaWQpKQotCWVyciB8PSAyOwotI2VuZGlmIC8qIEhBVkVfTE9D S0RFViAqLwotICAgIHJldHVybihlcnIpOwotfQotCi0vKiBUdXJuIG9mZiBwcml2aWxlZ2UgcGVy bWFuZW50bHkuICBObyBnb2luZyBiYWNrLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVmb3JlCi0gKiBh IGZvcmsoKSBvbiBCU0Q0MyBtYWNoaW5lcyB0aGF0IGRvbid0IHNhdmUgdGhlIHNldFVJRCBvciBz ZXRHSUQsIGJlY2F1c2UKLSAqIHdlIHN3YXAgdGhlIHJlYWwgYW5kIGVmZmVjdGl2ZSBpZHMsIGFu ZCB3ZSBkb24ndCB3YW50IHRvIGxldCB0aGUgZm9ya2VkCi0gKiBwcm9jZXNzIHN3YXAgdGhlbSBh Z2FpbiBhbmQgZ2V0IHRoZSBwcml2aWxlZ2UgYmFjay4gSXQgd2lsbCB3b3JrIG9uIG90aGVyCi0g KiBtYWNoaW5lcyB0b28sIHN1Y2ggdGhhdCB5b3UgY2FuIHJlbHkgb24gaXRzIGVmZmVjdCBhbHdh eXMgYmVpbmcgdGhlIHNhbWUsCi0gKiBmb3IgaW5zdGFuY2UsIGV2ZW4gd2hlbiB5b3UncmUgaW4g cHJpdl9vbigpIHN0YXRlIHdoZW4gdGhpcyBpcyBjYWxsZWQuCi0gKiAoV2VsbCwgdGhhdCBwYXJ0 IGFib3V0ICJwZXJtYW5lbnQiIGlzIG9uIFN5c3RlbSBWIG9ubHkgdHJ1ZSBpZiB5b3UgZm9sbG93 Ci0gKiB0aGlzIHdpdGggYSBjYWxsIHRvIGV4ZWMoKSwgYnV0IHRoYXQncyB3aGF0IHdlIHdhbnQg aXQgZm9yIGFueXdheS4pCi0gKiBBZGRlZCBieSBEZWFuIExvbmcgLS0gZGxvbmdAbWlkZ2FyZC51 Y3NjLmVkdQotICovCi1pbnQKLXByaXZfY2FuKCkgewotI2lmbmRlZiBIQVZFX0xPQ0tERVYKLSNp ZmRlZiBTRVRSRVVJRAotICAgIGludCBlcnIgPSAwOwotICAgIGlmIChwcml2dWlkICE9IChVSURf VCkgLTEpCi0gICAgICAgaWYgKHNldHJldWlkKHJlYWx1aWQscmVhbHVpZCkpCi0JICBlcnIgfD0g MTsKLQotICAgIGlmIChwcml2Z2lkICE9IChHSURfVCkgLTEpCi0gICAgICAgIGlmIChzZXRyZWdp ZChyZWFsZ2lkLHJlYWxnaWQpKQotIAkgIGVyciB8PSAyOwotCi0gICAgcmV0dXJuKGVycik7Ci0K LSNlbHNlCi0jaWZkZWYgU0VURVVJRAotICAgIGludCBlcnIgPSAwOwotICAgIGlmIChwcml2dWlk ICE9IChVSURfVCkgLTEpCi0JaWYgKHNldHVpZChyZWFsdWlkKSkgewotCSAgICBkZWJ1ZyhGMTAx LCJzZXR1aWQgZmFpbGVkIiwiIixlcnJubyk7Ci0JICAgIGVyciB8PSAxOwotCSAgICBkZWJ1ZyhG MTAxLCJydWlkIiwiIixnZXR1aWQoKSk7Ci0JICAgIGRlYnVnKEYxMDEsImV1aWQiLCIiLGdldGV1 aWQoKSk7Ci0JfQotICAgIGRlYnVnKEYxMDEsInNldHVpZCIsIiIscmVhbHVpZCk7Ci0gICAgaWYg KHByaXZnaWQgIT0gKEdJRF9UKSAtMSkKLSAgICAgICAgaWYgKHNldGdpZChyZWFsZ2lkKSkgewot CSAgICBkZWJ1ZyhGMTAxLCJzZXRnaWQgZmFpbGVkIiwiIixlcnJubyk7Ci0JICAgIGVyciB8PSAy OwotCSAgICBkZWJ1ZyhGMTAxLCJyZ2lkIiwiIixnZXRnaWQoKSk7Ci0JICAgIGRlYnVnKEYxMDEs ImVnaWQiLCIiLGdldGVnaWQoKSk7Ci0JfQotICAgIGRlYnVnKEYxMDEsInNldGdpZCIsIiIscmVh bGdpZCk7Ci0gICAgcmV0dXJuKGVycik7Ci0jZWxzZQotICAgIC8qIEVhc3kgd2F5IG9mIHVzaW5n IHNldHVpZCgpL3NldGdpZCgpIGluc3RlYWQgb2Ygc2V0cmV1aWQoKS9zZXRyZWdpZCgpLiovCi0g ICAgcmV0dXJuKHByaXZfb2ZmKCkpOwotI2VuZGlmIC8qIFNFVEVVSUQgKi8KLSNlbmRpZiAvKiBT RVRSRVVJRCAqLwotI2Vsc2UKLSAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogSEFWRV9MT0NLREVW ICovCi19Ci0KLS8qIFAgUiBJIFYgXyBPIFAgTiAgLS0gIEZvciBvcGVuaW5nIHByb3RlY3RlZCBm aWxlcyBvciBkZXZpY2VzLiAqLwotCi1pbnQKLXByaXZfb3BuKG5hbWUsIG1vZGVzKSBjaGFyICpu YW1lOyBpbnQgbW9kZXM7IHsKLSAgICBpbnQgeDsKLSAgICBwcml2X29uKCk7CQkJCS8qIFR1cm4g cHJpdmlsZWdlcyBvbiAqLwotICAgIGRlYnVnKEYxMTEsInByaXZfb3BuIixuYW1lLG1vZGVzKTsK LSAgICBlcnJubyA9IDA7Ci0gICAgeCA9IG9wZW4obmFtZSwgbW9kZXMpOwkJLyogVHJ5IHRvIG9w ZW4gdGhlIGRldmljZSAqLwotICAgIGRlYnVnKEYxMDEsInByaXZfb3BuIHJlc3VsdCIsIiIseCk7 Ci0gICAgZGVidWcoRjEwMSwicHJpdl9vcG4gZXJybm8iLCIiLGVycm5vKTsKLSAgICBwcml2X29m ZigpOwkJCQkvKiBUdXJuIHByaXZpbGVnZXMgb2ZmICovCi0gICAgcmV0dXJuKHgpOwkJCQkvKiBS ZXR1cm4gb3BlbidzIHJldHVybiBjb2RlICovCi19Ci0KLS8qICBQIFIgSSBWIF8gQyBIIEsgIC0t ICBDaGVjayBwcml2aWxlZ2VzLiAgKi8KLQotLyogIFRyeSB0byB0dXJuIHRoZW0gb2ZmLiAgSWYg dHVybmluZyB0aGVtIG9mZiBkaWQgbm90IHN1Y2NlZWQsIGNhbmNlbCB0aGVtICovCi0KLWludAot cHJpdl9jaGsoKSB7Ci0gICAgaW50IHgsIHkgPSAwOwotICAgIHggPSBwcml2X29mZigpOwkJCS8q IFR1cm4gb2ZmIHByaXZzLiAqLwotICAgIGlmICh4ICE9IDAgfHwgZ2V0dWlkKCkgPT0gcHJpdnVp ZCB8fCBnZXRldWlkKCkgPT0gcHJpdnVpZCkKLSAgICAgIHkgPSBwcml2X2NhbigpOwotICAgIGlm ICh4ICE9IDAgfHwgZ2V0Z2lkKCkgPT0gcHJpdmdpZCB8fCBnZXRlZ2lkKCkgPT0gcHJpdmdpZCkK LSAgICAgIHkgPSB5IHwgcHJpdl9jYW4oKTsKLSAgICByZXR1cm4oeSk7Ci19Ci0KLVVJRF9UCi1y ZWFsX3VpZCgpIHsKLSAgICByZXR1cm4ocmVhbHVpZCk7Ci19Ci0KLVZPSUQKLXR0aW1vZmYoKSB7 CQkJCS8qIFR1cm4gb2ZmIGFueSB0aW1lciBpbnRlcnJ1cHRzICovCi0gICAgLyogaW50IHh4OyAq LwotLyoKLSAgQXMgb2YgNUEoMTgzKSwgd2Ugc2V0IFNJR0FMUk0gdG8gU0lHX0lHTiAodG8gaWdu b3JlIGFsYXJtcykgcmF0aGVyIHRoYW4gdG8KLSAgU0lHX0RGTCAodG8gY2F0Y2ggYWxhcm1zLCBv ciBpZiB0aGVyZSBpcyBubyBoYW5kbGVyLCB0byBleGl0KS4gIFRoaXMgaXMgdG8KLSAgY3VyZSAo bWFzaywgcmVhbGx5KSBhIGRlZXBlciBwcm9ibGVtIHdpdGggc3RyYXkgYWxhcm1zIHRoYXQgb2Nj dXJzIG9uIHNvbWUKLSAgc3lzdGVtcywgcG9zc2libHkgaGF2aW5nIHRvIGRvIHdpdGggc2xlZXAo KSwgdGhhdCBjYXVzZWQgY29yZSBkdW1wcy4gIEl0Ci0gIHNob3VsZCBiZSBPSyB0byBkbyB0aGlz LCBiZWNhdXNlIG5vIGNvZGUgaW4gdGhpcyBtb2R1bGUgdXNlcyBuZXN0ZWQgYWxhcm1zLgotICAo QnV0IHdlIHN0aWxsIGhhdmUgdG8gd2F0Y2ggb3V0IGZvciBTQ1JJUFQgYW5kIERJQUwuLi4pCi0q LwotICAgIC8qIHh4ID0gKi8gYWxhcm0oMCk7Ci0gICAgLyogZGVidWcoRjEwMSwidHRpbW9mZiBh bGFybSIsIiIseHgpOyAqLwotICAgIGlmIChzYXZhbCkgewkJCS8qIFJlc3RvcmUgYW55IHByZXZp b3VzICovCi0Jc2lnbmFsKFNJR0FMUk0sc2F2YWwpOwkJLyogYWxhcm0gaGFuZGxlci4gKi8KLQkv KiBkZWJ1ZyhGMTAxLCJ0dGltb2ZmIGFsYXJtIHJlc3RvcmluZyBzYXZhbCIsIiIsc2F2YWwpOyAq LwotCXNhdmFsID0gTlVMTDsKLSAgICB9IGVsc2UgewotCXNpZ25hbChTSUdBTFJNLFNJR19JR04p OwkvKiBVc2VkIHRvIGJlIFNJR19ERkwgKi8KLQkvKiBkZWJ1ZyhGMTAwLCJ0dGltb2ZmIGFsYXJt IFNJR19JR04iLCIiLDApOyAqLwotICAgIH0KLX0KLQotCi1pbnQKLXR0X2lzX3NlY3VyZSgpIHsJ ICAvKiBUZWxscyB3aGV0aGVyIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gaXMgc2VjdXJlICovCi0K LSAgICBpZiAodHR5ZmQgPT0gLTEpCi0gICAgICByZXR1cm4oMCk7Ci0KLSAgICBpZiAoMAotI2lm ZGVmIFNTSEJVSUxUSU4KLQl8fCBJU19TU0goKQotI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KLSNp ZmRlZiBDS19FTkNSWVBUSU9OCi0JfHwgY2tfdG5fZW5jcnlwdGluZygpICYmIGNrX3RuX2RlY3J5 cHRpbmcoKQotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNpZmRlZiBDS19TU0wKLQl8fCB0 bHNfYWN0aXZlX2ZsYWcgfHwgc3NsX2FjdGl2ZV9mbGFnCi0jZW5kaWYgLyogQ0tfU1NMICovCi0j aWZkZWYgUkxPR0NPREUKLSNpZmRlZiBDS19LRVJCRVJPUwotI2lmZGVmIENLX0VOQ1JZUFRJT04K LQl8fCB0dG5wcm90byA9PSBOUF9FSzRMT0dJTiB8fCB0dG5wcm90byA9PSBOUF9FSzVMT0dJTgot I2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotI2Vu ZGlmIC8qIFJMT0dDT0RFICovCi0JKQotICAgICAgcmV0dXJuKDEpOwotICAgIHJldHVybigwKTsK LX0KLQotI2lmZGVmIENLX1JFRElSCi0gIAotLyogRXh0ZXJuYWwgcHJvdG9jb2wgaGFuZGxlciBw YXJhbWV0ZXJzIGZyb20gY2t1dXMzLmMgKi8KLWV4dGVybiBpbnQgZXhwX2hhbmRsZXIsIGV4cF9z dGRlcnIsIGV4cF90aW1vOwotCi0jaWZkZWYgU0VMRUNUCi0jaWZkZWYgTkVUUFRZCi0KLS8qIFRo ZSByaWdodCBzaXplIGlzIDI0NTc2ICovCi0KLSNpZm5kZWYgUFRZX1BCVUZfU0laRQkJCS8qIFNp emUgb2YgYnVmZmVyIHRvIHJlYWQgZnJvbSBwdHkgKi8KLSNkZWZpbmUgUFRZX1BCVUZfU0laRSAy NDU3NgkJLyogYW5kIHdyaXRlIHRvIG5ldC4gKi8KLSNlbmRpZgkvKiBQVFlfUEJVRl9TSVpFICov Ci0KLSNpZm5kZWYgUFRZX1RCVUZfU0laRQkJCS8qIFNpemUgb2YgYnVmZmVyIHRvIHJlYWQgZnJv bSBuZXQgKi8KLSNkZWZpbmUgUFRZX1RCVUZfU0laRSAyNDU3NgkJLyogYW5kIHdyaXRlIHRvIHB0 eS4gKi8KLSNlbmRpZgkvKiBQVFlfVEJVRl9TSVpFICovCi0KLSNpZmRlZiBPX05ERUxBWQkJCQkv KiBXaGV0aGVyIHRvIHVzZSBub25ibG9ja2luZyAqLwotI2lmbmRlZiBQVFlfTk9fTkRFTEFZCQkJ LyogcmVhZHMgb24gdGhlIHBzZXVkb3Rlcm1pbmFsICovCi0jaWZuZGVmIFBUWV9VU0VfTkRFTEFZ Ci0jZGVmaW5lIFBUWV9VU0VfTkRFTEFZCi0jZW5kaWYJLyogUFRZX1VTRV9OREVMQVkgKi8KLSNl bmRpZgkvKiBQVFlfTk9fTkRFTEFZICovCi0jZW5kaWYJLyogT19OREVMQVkgKi8KLQotI2lmbmRl ZiBIQVZFX09QRU5QVFkKLSNpZm5kZWYgVVNFX0NLVVBUWV9DCi0jZGVmaW5lIFVTRV9DS1VQVFlf QwotI2VuZGlmIC8qIFVTRV9DS1VQVFlfQyAqLwotI2VuZGlmIC8qIEhBVkVfT1BFTlBUWSAqLwot Ci0jaWZkZWYgSEFWRV9PUEVOUFRZCi0jaW5jbHVkZSA8cHR5Lmg+Ci0jZW5kaWYKLQotVk9JRAot cHR5X21ha2VfcmF3KGZkKSBpbnQgZmQ7IHsKLSAgICBpbnQgeCA9IC0yMywgaTsKLQotI2lmZGVm IEJTRDQ0T1JQT1NJWAkJCS8qIFBPU0lYICovCi0gICAgc3RydWN0IHRlcm1pb3MgdHA7Ci0jZWxz ZQotI2lmZGVmIEFUVFNWCQkJCS8qIEFUJlQgVU5JWCAqLwotI2lmZGVmIENLX0FOU0lDCi0gICAg c3RydWN0IHRlcm1pbyB0cCA9IHswfTsKLSNlbHNlCi0gICAgc3RydWN0IHRlcm1pbyB0cDsKLSNl bmRpZgkvKiBDS19BTlNJQyAqLwotI2Vsc2UKLSAgICBzdHJ1Y3Qgc2d0dHliIHRwOwkJCS8qIFRy YWRpdGlvbmFsICovCi0jZW5kaWYgLyogQVRUU1YgKi8KLSNlbmRpZiAvKiBCU0Q0NE9SUE9TSVgg Ki8KLQotICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyBmZCIsIiIsZmQpOwotICAgIGVycm5v ID0gMDsKLQotI2lmZGVmIEJTRDQ0T1JQT1NJWAkJCS8qIFBPU0lYICovCi0gICAgeCA9IHRjZ2V0 YXR0cihmZCwmdHApOwotICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyB0Y2dldGF0dHIiLCIi LHgpOwotI2Vsc2UKLSNpZmRlZiBBVFRTVgkJCQkvKiBBVCZUIFVOSVggKi8KLSAgICB4ID0gaW9j dGwoZmQsVENHRVRBLCZ0cCk7Ci0gICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IFRDR0VUQSBp b2N0bCIsIiIseCk7Ci0jZWxzZQotICAgIHggPSBndHR5KGZkLCZ0cCk7Ci0gICAgZGVidWcoRjEw MSwicHR5X21ha2VfcmF3IHR0dHkiLCIiLHgpOwotI2VuZGlmIC8qIEFUVFNWICovCi0jZW5kaWYg LyogQlNENDRPUlBPU0lYICovCi0gICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IEdFVCBlcnJu byIsIiIsZXJybm8pOwotCi0jaWZkZWYgVVNFX0NGTUFLRVJBVwotICAgIGVycm5vID0gMDsKLSAg ICBjZm1ha2VyYXcoJnRwKTsKLSAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgY2ZtYWtlcmF3 IGVycm5vIiwiIixlcnJubyk7Ci0jZWxzZSAgLyogVVNFX0NGTUFLRVJBVyAqLwotCi0jaWZkZWYg Q09NTUVOVAotCi0vKiBUaGlzIHZlcnkgc2ltcGxlIHZlcnNpb24gcmVjb21tZW5kZWQgYnkgU2Vy ZyBJYWtvbGV2IGRvZXNuJ3Qgd29yayAqLwotCi0gICAgdHAuY19sZmxhZyAmPSB+KEVDSE98SUNB Tk9OfElFWFRFTnxJU0lHKTsKLSAgICB0cC5jX2lmbGFnICY9IH4oQlJLSU5UfElDUk5MfElOUENL fElTVFJJUHxJWE9OKTsKLSAgICB0cC5jX2NmbGFnICY9IH4oQ1NJWkV8UEFSRU5CKTsKLSAgICB0 cC5jX2NmbGFnIHw9IENTODsKLSAgICB0cC5jX29mbGFnICY9IH4oT1BPU1QpOwotICAgIHRwLmNf Y2NbVk1JTl0gPSAxOwotICAgIHRwLmNfY2NbVlRJTUVdID0gMDsKLQotICAgIGRlYnVnKEYxMDEs InB0eV9tYWtlX3JhdyAxIGNfY2NbXSBOQ0NTIiwiIixOQ0NTKTsKLSAgICBkZWJ1ZyhGMTAxLCJw dHlfbWFrZV9yYXcgMSBpZmxhZ3MiLCIiLHRwLmNfaWZsYWcpOwotICAgIGRlYnVnKEYxMDEsInB0 eV9tYWtlX3JhdyAxIG9mbGFncyIsIiIsdHAuY19vZmxhZyk7Ci0gICAgZGVidWcoRjEwMSwicHR5 X21ha2VfcmF3IDEgbGZsYWdzIiwiIix0cC5jX2xmbGFnKTsKLSAgICBkZWJ1ZyhGMTAxLCJwdHlf bWFrZV9yYXcgMSBjZmxhZ3MiLCIiLHRwLmNfY2ZsYWcpOwotCi0jZWxzZQotI2lmZGVmIENPTU1F TlQKLS8qCi0gIEluIHRoaXMgdmVyc2lvbiB3ZSB1bnNldCBldmVyeXRoaW5nIGFuZCB0aGVuIHNl dCBvbmx5IHRoZQotICBiaXRzIHdlIGtub3cgd2UgbmVlZC4KLSovCi0gICAgLyogaWZsYWdzICov Ci0gICAgdHAuY19pZmxhZyA9IDBMOwotICAgIHRwLmNfaWZsYWcgfD0gSUdOQlJLOwotI2lmZGVm IElNQVhCRUwKLSAgICB0cC5jX2lmbGFnIHw9IElNQVhCRUw7Ci0jZW5kaWYgLyogSU1BWEJFTCAq LwotCi0gICAgLyogb2ZsYWdzICovCi0gICAgdHAuY19vZmxhZyA9IDBMOwotCi0gICAgLyogbGZs YWdzICovCi0gICAgdHAuY19sZmxhZyA9IDBMOwotI2lmZGVmIE5PS0VSTklORk8KLSAgICB0cC5j X2xmbGFnIHw9IE5PS0VSTklORk87Ci0jZW5kaWYJLyogTk9LRVJOSU5GTyAqLwotCi0gICAgLyog Y2ZsYWdzICovCi0gICAgdHAuY19jZmxhZyA9IDBMOwotICAgIHRwLmNfY2ZsYWcgfD0gQ1M4fENS RUFEOwotCi0gICAgZm9yIChpID0gMDsgaSA8IE5DQ1M7IGkrKykgewkvKiBObyBzcGVjaWFsIGNo YXJhY3RlcnMgKi8KLQl0cC5jX2NjW2ldID0gMDsKLSAgICB9Ci0jaWZkZWYgVk1JTgotICAgIHRw LmNfY2NbVk1JTl0gPSAxOwkJCS8qIEJ1dCBhbHdheXMgd2FpdCBmb3IgaW5wdXQgKi8KLSNlbmRp ZgkvKiBWTUlOICovCi0gICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IDIgY19jY1tdIE5DQ1Mi LCIiLE5DQ1MpOwotICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyAyIGlmbGFncyIsIiIsdHAu Y19pZmxhZyk7Ci0gICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IDIgb2ZsYWdzIiwiIix0cC5j X29mbGFnKTsKLSAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgMiBsZmxhZ3MiLCIiLHRwLmNf bGZsYWcpOwotICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyAyIGNmbGFncyIsIiIsdHAuY19j ZmxhZyk7Ci0KLSNlbHNlICAvKiBDT01NRU5UICovCi0vKgotICBJbiB0aGlzIHZlcnNpb24gd2Ug c2V0IG9yIHVuc2V0IGV2ZXJ5IHNpbmdsZSBmbGFnIGV4cGxpY2l0bHkuICBJdCB3b3JrcyBhCi0g IGJpdCBiZXR0ZXIgdGhhbiB0aGUgc2ltcGxlIHZlcnNpb24ganVzdCBhYm92ZSwgYnV0IGl0J3Mg c3RpbGwgZmFyIGZyb20KLSAgYWRlcXVhdGUuCi0qLwotICAgIC8qIGlmbGFncyAqLwotICAgIHRw LmNfaWZsYWcgJj0gfihQQVJNUkt8SVNUUklQfEJSS0lOVHxJTkxDUnxJR05DUnxJQ1JOTCk7Ci0g ICAgdHAuY19pZmxhZyAmPSB+KElOUENLfElHTlBBUnxJWEFOWXxJWE9OfElYT0ZGKTsKLSAgICB0 cC5jX2lmbGFnIHw9IElHTkJSSzsKLSNpZmRlZiBJTUFYQkVMCi0jaWZkZWYgQ09NTUVOVAotICAg IHRwLmNfaWZsYWcgfD0gSU1BWEJFTDsKLSNlbHNlCi0gICAgdHAuY19pZmxhZyAmPSB+SU1BWEJF TDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZW5kaWYgLyogSU1BWEJFTCAqLwotI2lmZGVmIElV Q0xDCi0gICAgdHAuY19pZmxhZyAmPSB+SVVDTEM7Ci0jZW5kaWYgLyogSVVDTEMgKi8KLQotICAg IC8qIG9mbGFncyAqLwotI2lmZGVmIEJTRExZCi0gICAgdHAuY19vZmxhZyAmPSB+QlNETFk7Ci0j ZW5kaWYgLyogQlNETFkgKi8KLSNpZmRlZiBDUkRMWQotICAgIHRwLmNfb2ZsYWcgJj0gfkNSRExZ OwotI2VuZGlmIC8qIENSRExZICovCi0jaWZkZWYgRkZETFkKLSAgICB0cC5jX29mbGFnICY9IH5G RkRMWTsKLSNlbmRpZiAvKiBGRkRMWSAqLwotI2lmZGVmIE5MRExZCi0gICAgdHAuY19vZmxhZyAm PSB+TkxETFk7Ci0jZW5kaWYgLyogTkxETFkgKi8KLSNpZmRlZiBUQUJETFkKLSAgICB0cC5jX29m bGFnICY9IH5UQUJETFk7Ci0jZW5kaWYgLyogVEFCRExZICovCi0jaWZkZWYgVlRETFkKLSAgICB0 cC5jX29mbGFnICY9IH5WVERMWTsKLSNlbmRpZiAvKiBWVERMWSAqLwotI2lmZGVmIE9GREVMCi0g ICAgdHAuY19vZmxhZyAmPSB+T0ZERUw7Ci0jZW5kaWYgLyogT0ZERUwgKi8KLSNpZmRlZiBPRklM TAotICAgIHRwLmNfb2ZsYWcgJj0gfk9GSUxMOwotI2VuZGlmIC8qIE9GSUxMICovCi0jaWZkZWYg T0xDVUMKLSAgICB0cC5jX29mbGFnICY9IH5PTENVQzsKLSNlbmRpZiAvKiBPTENVQyAqLwotI2lm ZGVmIENNU1BBUgotICAgIHRwLmNfb2ZsYWcgJj0gfkNNU1BBUjsKLSNlbmRpZiAvKiBDTVNQQVIg Ki8KLSAgICB0cC5jX29mbGFnICY9IH5PUE9TVDsKLSNpZmRlZiBPWFRBQlMKLSAgICB0cC5jX29m bGFnICY9IH5PWFRBQlM7Ci0jZW5kaWYgLyogT1hUQUJTICovCi0jaWZkZWYgQ09NTUVOVAotI2lm ZGVmIE9OT0NSCi0gICAgdHAuY19vZmxhZyAmPSB+T05PQ1I7CQkvKiBNYXliZSBzaG91bGQgYmUg fD0/ICovCi0gICAgdHAuY19vZmxhZyB8PSBPTk9DUjsJCS8qIG1ha2VzIG5vIGRpZmZlcmVuY2Ug ZWl0aGVyIHdheSAqLwotI2VuZGlmIC8qIE9OT0NSICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwot I2lmZGVmIE9OT0VPVAotICAgIHRwLmNfb2ZsYWcgJj0gfk9OT0VPVDsKLSNlbmRpZiAvKiBPTk9F T1QgKi8KLSNpZmRlZiBPTkxSRVQKLSAgICB0cC5jX29mbGFnICY9IH5PTkxSRVQ7Ci0jZW5kaWYg LyogT05MUkVUICovCi0jaWZkZWYgT05MQ1IKLSAgICB0cC5jX29mbGFnICY9IH5PTkxDUjsKLSNl bmRpZiAvKiBPTkxDUiAqLwotI2lmZGVmIE9DUk5MCi0gICAgdHAuY19vZmxhZyAmPSB+T0NSTkw7 Ci0jZW5kaWYgLyogT0NSTkwgKi8KLQotICAgIC8qIGxmbGFncyAqLwotICAgIHRwLmNfbGZsYWcg Jj0gfkVDSE87Ci0jaWZkZWYgRUNIT0UKLSAgICB0cC5jX2xmbGFnICY9IH5FQ0hPRTsKLSNlbmRp ZiAvKiBFQ0hPRSAqLwotI2lmZGVmIEVDSE9OTAotICAgIHRwLmNfbGZsYWcgJj0gfkVDSE9OTDsK LSNlbmRpZiAvKiBFQ0hPTkwgKi8KLSNpZmRlZiBFQ0hPUFJUCi0gICAgdHAuY19sZmxhZyAmPSB+ RUNIT1BSVDsKLSNlbmRpZiAvKiBFQ0hPUFJUICovCi0jaWZkZWYgRUNIT0tFCi0gICAgdHAuY19s ZmxhZyAmPSB+RUNIT0tFOwotI2VuZGlmIC8qIEVDSE9LRSAqLwotI2lmZGVmIEVDSE9DVEwKLSAg ICB0cC5jX2xmbGFnICY9IH5FQ0hPQ1RMOwotI2VuZGlmIC8qIEVDSE9DVEwgKi8KLSNpZmRlZiBY Q0FTRQotICAgIHRwLmNfbGZsYWcgJj0gflhDQVNFOwotI2VuZGlmIC8qIFhDQVNFICovCi0jaWZk ZWYgQUxUV0VSQVNFCi0gICAgdHAuY19sZmxhZyAmPSB+QUxUV0VSQVNFOwotI2VuZGlmIC8qIEFM VFdFUkFTRSAqLwotI2lmZGVmIEVYVFBST0MKLSAgICB0cC5jX2xmbGFnICY9IH4oSUNBTk9OfElT SUd8SUVYVEVOfFRPU1RPUHxGTFVTSE98UEVORElOfEVYVFBST0MpOwotI2Vsc2UKLSAgICB0cC5j X2xmbGFnICY9IH4oSUNBTk9OfElTSUd8SUVYVEVOfFRPU1RPUHxGTFVTSE98UEVORElOKTsKLSNl bmRpZgkvKiBFWFRQUk9DICovCi0jaWZkZWYgTk9LRVJOSU5GTwotICAgIHRwLmNfbGZsYWcgfD0g Tk9LRVJOSU5GTzsKLSNlbmRpZgkvKiBOT0tFUk5JTkZPICovCi0jaWZuZGVmIENPTU1FTlQKLSAg ICB0cC5jX2xmbGFnICY9IH5OT0ZMU0g7CQkvKiBUUlkgSVQgVEhFIE9USEVSIFdBWT8gKi8KLSNl bHNlCi0gICAgdHAuY19sZmxhZyB8PSBOT0ZMU0g7CQkvKiBObywgdGhpcyB3YXkgaXMgd29yc2Ug Ki8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICAvKiBjZmxhZ3MgKi8KLSAgICB0cC5jX2Nm bGFnICY9IH4oQ1NJWkV8UEFSRU5CfFBBUk9ERCk7Ci0gICAgdHAuY19jZmxhZyB8PSBDUzh8Q1JF QUQ7Ci0KLSNpZmRlZiBNRE1CVUYKLSAgICB0cC5jX2NmbGFnICY9IH4oTURNQlVGKTsKLSNlbHNl Ci0jaWZkZWYgQ0NBUl9PRkxPVwotICAgIHRwLmNfY2ZsYWcgJj0gfihDQ0FSX09GTE9XKTsJLyog dHdvIG5hbWVzIGZvciB0aGUgc2FtZSB0aGluZyAqLwotI2VuZGlmIC8qIENDQVJfT0ZMT1cgKi8K LSNlbmRpZiAvKiBNRE1CVUYgKi8KLQotI2lmZGVmIENDVFNfT0ZMT1cKLSAgICB0cC5jX2NmbGFn ICY9IH4oQ0NUU19PRkxPVyk7Ci0jZW5kaWYgLyogQ0NUU19PRkxPVyAqLwotI2lmZGVmIENEU1Jf T0ZMT1cKLSAgICB0cC5jX2NmbGFnICY9IH4oQ0RTUl9PRkxPVyk7Ci0jZW5kaWYgLyogQ0RTUl9P RkxPVyAqLwotI2lmZGVmIENEVFJfSUZMT1cKLSAgICB0cC5jX2NmbGFnICY9IH4oQ0RUUl9JRkxP Vyk7Ci0jZW5kaWYgLyogQ0RUUl9JRkxPVyAqLwotI2lmZGVmIENSVFNfSUZMT1cKLSAgICB0cC5j X2NmbGFnICY9IH4oQ1JUU19JRkxPVyk7Ci0jZW5kaWYgLyogQ1JUU19JRkxPVyAqLwotI2lmZGVm IENSVFNYT0ZGCi0gICAgdHAuY19jZmxhZyAmPSB+KENSVFNYT0ZGKTsKLSNlbmRpZiAvKiBDUlRT WE9GRiAqLwotI2lmZGVmIENSVFNDVFMKLSAgICB0cC5jX2NmbGFnICY9IH4oQ1JUU0NUUyk7Ci0j ZW5kaWYgLyogQ1JUU0NUUyAqLwotI2lmZGVmIENMT0NBTAotICAgIHRwLmNfY2ZsYWcgJj0gfihD TE9DQUwpOwotI2VuZGlmIC8qIENMT0NBTCAqLwotI2lmZGVmIENTVE9QQgotICAgIHRwLmNfY2Zs YWcgJj0gfihDU1RPUEIpOwotI2VuZGlmIC8qIENTVE9QQiAqLwotI2lmZGVmIEhVUENMCi0gICAg dHAuY19jZmxhZyAmPSB+KEhVUENMKTsKLSNlbmRpZiAvKiBIVVBDTCAqLwotCi0gICAgZm9yIChp ID0gMDsgaSA8IE5DQ1M7IGkrKykgewkvKiBObyBzcGVjaWFsIGNoYXJhY3RlcnMgKi8KLQl0cC5j X2NjW2ldID0gMDsKLSAgICB9Ci0jaWZkZWYgVk1JTgotICAgIHRwLmNfY2NbVk1JTl0gPSAxOwkJ CS8qIEJ1dCBhbHdheXMgd2FpdCBmb3IgaW5wdXQgKi8KLSNlbmRpZgkvKiBWTUlOICovCi0gICAg ZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IDMgY19jY1tdIE5DQ1MiLCIiLE5DQ1MpOwotICAgIGRl YnVnKEYxMDEsInB0eV9tYWtlX3JhdyAzIGlmbGFncyIsIiIsdHAuY19pZmxhZyk7Ci0gICAgZGVi dWcoRjEwMSwicHR5X21ha2VfcmF3IDMgb2ZsYWdzIiwiIix0cC5jX29mbGFnKTsKLSAgICBkZWJ1 ZyhGMTAxLCJwdHlfbWFrZV9yYXcgMyBsZmxhZ3MiLCIiLHRwLmNfbGZsYWcpOwotICAgIGRlYnVn KEYxMDEsInB0eV9tYWtlX3JhdyAzIGNmbGFncyIsIiIsdHAuY19jZmxhZyk7Ci0jZW5kaWYgLyog Q09NTUVOVCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgIGVycm5vID0gMDsKLSNpZmRl ZiBCU0Q0NE9SUE9TSVgJCQkvKiBQT1NJWCAqLwotICAgIHggPSB0Y3NldGF0dHIoZmQsVENTQU5P VywmdHApOwotICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyB0Y3NldGF0dHIiLCIiLHgpOwot I2Vsc2UKLSNpZmRlZiBBVFRTVgkJCQkvKiBBVCZUIFVOSVggKi8KLSAgICB4ID0gaW9jdGwoZmQs VENTRVRBLCZ0cCk7Ci0gICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IGlvY3RsIiwiIix4KTsK LSNlbHNlCi0gICAgeCA9IHN0dHkoZmQsJnRwKTsJCQkvKiBUcmFkaXRpb25hbCAqLwotICAgIGRl YnVnKEYxMDEsInB0eV9tYWtlX3JhdyBzdHR5IiwiIix4KTsKLSNlbmRpZiAvKiBBVFRTViAqLwot I2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLwotICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyBl cnJubyIsIiIsZXJybm8pOwotCi0jZW5kaWYgLyogX19OZXRCU0RfXyAqLwotfQotCi1zdGF0aWMg aW50Ci1wdHlfY2hrKGZkKSBpbnQgZmQ7IHsKLSAgICBpbnQgeCwgbiA9IDA7Ci0gICAgZXJybm8g PSAwOwotI2lmZGVmIEZJT05SRUFECi0gICAgeCA9IGlvY3RsKGZkLCBGSU9OUkVBRCwgJm4pOwkv KiBCU0QgYW5kIG1vc3Qgb3RoZXJzICovCi0gICAgY2ttYWttc2cobXNnYnVmLDUwMCwKLQkgICAg ICJwdHlfY2hrIGlvY3RsIEZJT05SRUFEIGVycm5vPSIsCi0JICAgICBja2l0b2EoZXJybm8pLAot CSAgICAgIiBjb3VudD0iLAotCSAgICAgY2tpdG9hKG4pKTsKLSAgICBkZWJ1ZyhGMTAwLG1zZ2J1 ZiwiIiwwKTsKLSNlbHNlCi0jaWZkZWYgUkRDSEsKLSAgICBuID0gcmRjaGsoZmQpOwotICAgIGRl YnVnKEYxMDEsInB0eV9jaGsgcmRjaGsiLCIiLG4pOwotI2Vsc2UKLSAgICBuID0gMTsKLSNlbmRp ZgkvKiBSRENISyAqLwotI2VuZGlmCS8qIEZJT05SRUFEICovCi0gICAgcmV0dXJuKChuID4gLTEp ID8gbiA6IDApOwotfQotCi1zdGF0aWMgaW50Ci1wdHlfZ2V0X3N0YXR1cyhmZCxwaWQpIGludCBm ZDsgUElEX1QgcGlkOyB7Ci0gICAgaW50IHgsIHN0YXR1cyA9IC0xOwotICAgIFBJRF9UIHc7Ci0K LSAgICBkZWJ1ZyhGMTAxLCJwdHlfZ2V0X3N0YXR1cyBmZCIsIiIsZmQpOwotICAgIGRlYnVnKEYx MDEsInB0eV9nZXRfc3RhdHVzIHBpZCIsIiIscGlkKTsKLQotICAgIGlmIChwZXhpdHN0YXQgPiAt MSkKLSAgICAgIHJldHVybihwZXhpdHN0YXQpOwotCi0jaWZkZWYgQ09NTUVOVAotICAgIC8qIE5v dCBvbmx5IHVubmVjZXNzYXJ5IGJ1dCBoYXJtZnVsICovCi0gICAgZXJybm8gPSAwOwotICAgIHgg PSBraWxsKHB0eV9mb3JrX3BpZCwwKTsKLSAgICBkZWJ1ZyhGMTAxLCJwdHlfZ2V0X3N0YXR1cyBr aWxsIHZhbHVlIiwiIix4KTsKLSAgICBkZWJ1ZyhGMTAxLCJwdHlfZ2V0X3N0YXR1cyBraWxsIGVy cm5vIiwiIixlcnJubyk7Ci0gICAgaWYgKHggPiAtMSAmJiBlcnJubyAhPSBFU1JDSCkKLSAgICAg IHJldHVybigtMSk7CQkJLyogRm9yayBzdGlsbCB0aGVyZSAqLwotICAgIC8qIEZvcmsgc2VlbXMg dG8gYmUgZ29uZSAqLwotI2VuZGlmCS8qIENPTU1FTlQgKi8KLQotICAgIGVycm5vID0gMDsKLSAg ICB4ID0gd2FpdHBpZChwdHlfZm9ya19waWQsJnN0YXR1cyxXTk9IQU5HKTsKLSAgICBkZWJ1ZyhG MTExLCJwdHlfZ2V0X3N0YXR1cyB3YWl0cGlkIixja2l0b2EoZXJybm8pLHgpOwotICAgIGlmICh4 IDw9IDAgJiYgZXJybm8gPT0gMCkgewotCWRlYnVnKEYxMDEsInB0eV9nZXRfc3RhdHVzIHdhaXRw aWQgcmV0dXJuIiwiIiwtMSk7Ci0JcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgaWYgKHggPiAwKSB7 Ci0JaWYgKHggIT0gcHR5X2ZvcmtfcGlkKQotCSAgZGVidWcoRjEwMSwKLQkJInB0eV9nZXRfc3Rh dHVzIHdhaXRwaWQgcGlkIGRvZXNuJ3QgbWF0Y2giLCIiLHB0eV9mb3JrX3BpZCk7IAotCWRlYnVn KEYxMDEsInB0eV9nZXRfc3RhdHVzIHdhaXRwaWQgc3RhdHVzIiwiIixzdGF0dXMpOwotCWRlYnVn KEYxMDEsInB0eV9nZXRfc3RhdHVzIHdhaXRwaWQgZXJybm8iLCIiLGVycm5vKTsKLQlpZiAoV0lG RVhJVEVEKHN0YXR1cykpIHsKLQkgICAgZGVidWcoRjEwMCwicHR5X2dldF9zdGF0dXMgV0lGRVhJ VEVEIiwiIiwwKTsKLQkgICAgc3RhdHVzID0gV0VYSVRTVEFUVVMoc3RhdHVzKTsKLQkgICAgZGVi dWcoRjEwMSwicHR5X2dldF9zdGF0dXMgZm9yayBleGl0IHN0YXR1cyIsIiIsc3RhdHVzKTsKLSNp ZmRlZiBDT01NRU5UCi0JICAgIGVuZF9wdHkoKTsKLSNlbmRpZgkvKiBDT01NRU5UICovCi0JICAg IGNsb3NlKGZkKTsKLQkgICAgcGV4aXRzdGF0ID0gc3RhdHVzOwotCX0gZWxzZSB7Ci0JICAgIGRl YnVnKEYxMDAsInB0eV9nZXRfc3RhdHVzIHdhaXRwaWQgdW5leHBlY3RlZCBzdGF0dXMiLCIiLDAp OwotCX0KLSAgICB9Ci0gICAgZGVidWcoRjEwMSwicHR5X2dldF9zdGF0dXMgcmV0dXJuIHN0YXR1 cyIsIiIsc3RhdHVzKTsKLSAgICByZXR1cm4oc3RhdHVzKTsKLX0KLQotLyogdCB0IHAgdCB5IGMg bSBkICAtLSAgUnVuIGNvbW1hbmQgb24gcHR5IGFuZCBmb3J3YXJkIHRvIG5ldCAqLwotCi0vKgot ICBOZWVkZWQgZm9yIHJ1bm5pbmcgZXh0ZXJuYWwgcHJvdG9jb2xzIG9uIHNlY3VyZSBjb25uZWN0 aW9ucy4KLSAgRm9yIGV4YW1wbGUsIGlmIEMtS2VybWl0IGhhcyBtYWRlIGFuIFNTTC9UTFMgb3Ig S2VyYmVyb3MgVGVsbmV0Ci0gIGNvbm5lY3Rpb24sIGFuZCB0aGVuIG5lZWRzIHRvIHRyYW5zZmVy IGEgZmlsZSB3aXRoIFptb2RlbSwgd2hpY2ggaXMKLSAgYW4gZXh0ZXJuYWwgcHJvZ3JhbSwgdGhp cyByb3V0aW5lIHJlYWRzIFptb2RlbSdzIG91dHB1dCwgZW5jcnlwdHMgaXQsCi0gIGFuZCB0aGVu IGZvcndhcmRzIGl0IG91dCB0aGUgY29ubmVjdGlvbiwgYW5kIHJlYWRzIHRoZSBlbmNyeXB0ZWQg ZGF0YQotICBzdHJlYW0gY29taW5nIGluIGZyb20gdGhlIGNvbm5lY3Rpb24sIGRlY3J5cHRzIGl0 LCBhbmQgZm9yd2FyZHMgaXQgdG8KLSAgWm1vZGVtLgotCi0gIFdvcmtzIGxpa2UgYSBUQ1AvSVAg cG9ydCBmb3J3YXJkZXIgZXhjZXB0IG9uZSBlbmQgaXMgYSBwdHkgcmF0aGVyCi0gIHRoYW4gYSBz b2NrZXQsIHdoaWNoIGludHJvZHVjZXMgc29tZSBjb21wbGljYXRpb25zOgotCi0gICAuIE9uIG1v c3QgcGxhdGZvcm1zLCBzZWxlY3QoKSBhbHdheXMgaW5kaWNhdGVzIHRoZSBvdXRwdXQgc2lkZSBv ZgotICAgICB0aGUgcHR5IGhhcyBjaGFyYWN0ZXJzIHdhaXRpbmcgdG8gYmUgcmVhZCwgZXZlbiB3 aGVuIGl0IGRvZXNuJ3QsCi0gICAgIGV2ZW4gd2hlbiB0aGUgcHR5IHByb2Nlc3MgaGFzIGFscmVh ZHkgZXhpdGVkLgotCi0gICAuIE5vbmJsb2NraW5nIHJlYWRzIG11c3QgYmUgdXNlZCBvbiB0aGUg cHR5LCBiZWNhdXNlIHRoZXJlIGlzIG5vCi0gICAgIHdheSBvbiBjZXJ0YWluIHBsYXRmb3JtcyAo ZS5nLiBOZXRCU0QpIHRvIGZpbmQgb3V0IGhvdyBtYW55IGNoYXJhY3RlcnMKLSAgICAgYXJlIGF2 YWlsYWJsZSB0byBiZSByZWFkICh0aGUgRklPTlJFQUQgaW9jdGwgYWx3YXlzIHNheXMgMCkuICBU aGUgY29kZQotICAgICBhbHNvIGFsbG93cyBmb3IgYmxvY2tpbmcgcmVhZHMgKGlmIE9fTkRFTEFZ IGFuZCBPX05PTkJMT0NLIGFyZSBub3QKLSAgICAgZGVmaW5lZCwgb3IgaWYgUFRZX05PX05ERUxB WSBpcyBkZWZpbmVkKSwgYnV0IG9uIHNvbWUgcGxhdGZvcm1zIHRoaXMgY2FuCi0gICAgIHJlc3Vs dCBpbiBzaW5nbGUtYnl0ZSByZWFkcyBhbmQgd3JpdGVzIChOZXRCU0QgYWdhaW4pLgotCi0gICAu IFRlc3RpbmcgZm9yICJFT0YiIG9uIHRoZSBwdHkgaXMgcHJvYmxlbWF0aWMuICBzZWxlY3QoKSBu ZXZlciBnaXZlcwotICAgICBhbnkgaW5kaWNhdGlvbi4gIEFmdGVyIHRoZSBwdHkgcHJvY2VzcyBo YXMgZXhpdGVkIGFuZCB0aGUgZm9yayBoYXMKLSAgICAgZGlzYXBwZWFyZWQsIHJlYWQoKSBjYW4g c3RpbGwgcmV0dXJuIHdpdGggMCBieXRlcyByZWFkIGJ1dCB3aXRob3V0IGFuCi0gICAgIGVycm9y IChOZXRCU0QpOyBubyBrbm93biB0ZXN0IG9uIHRoZSBwdHkgZmlsZSBkZXNjcmlwdG9yIHdpbGwg aW5kaWNhdGUKLSAgICAgdGhhdCBpdCBpcyBubyBsb25nZXIgdmFsaWQuICBUaGUgcHJvY2VzcyBJ RCBvZiB0aGUgcHR5IGZvcmsgY2FuIGJlCi0gICAgIHRlc3RlZCBvbiBzb21lIHBsYXRmb3JtcyAo TmV0QlNELCBsdWNraWx5KSBidXQgbm90IG90aGVycyAoU29sYXJpcywKLSAgICAgTGludXgpLgot Ci0gIE9uIHRoZSBuZXR3b3JrIHNpZGUsIHdlIHVzZSB0dGluYygpIGFuZCB0dG9jKCksIHdoaWNo LCBmb3IgbmV0d29yayAKLSAgY29ubmVjdGlvbnMsIGhhbmRsZSBhbnkgYWN0aXZlIHNlY3VyaXR5 IG1ldGhvZHMuCi0KLSAgQ2FsbCB3aXRoIHMgPSBjb21tYW5kLgotICBSZXR1cm5zIDAgb24gZmFp bHVyZSwgMSBvbiBzdWNjZXNzLgotICBmZGMgLSBEZWNlbWJlciAyMDA2IC0gQXVndXN0IDIwMDcu Ci0KLSAgTk9URTogVGhpcyBjb2RlIGRlZmF1bHRzIHRvIG5vbmJsb2NraW5nIHJlYWRzIGlmIE9f TkRFTEFZIG9yIE9fTk9OQkxPQ0sgYXJlCi0gIGRlZmluZWQgaW4gdGhlIGhlYWRlciBmaWxlcywg d2hpY2ggc2hvdWxkIGJlIHRydWUgb2YgZXZlcnkgcmVjZW50IFVuaXgKLSAgcGxhdGZvcm0uICBJ ZiB0aGlzIGNhdXNlcyB0cm91YmxlIHNvbWV3aGVyZSwgZGVmaW5lIFBUWV9OT19OREVMQVksIGUu Zy4gd2hlbgotICBidWlsZGluZyBDLUtlcm1pdDoKLQotICAgIHRvdWNoIGNrdXRpby5jCi0gICAg bWFrZSBwbGF0Zm9ybW5hbWUgS0ZMQUdTPS1EUFRZX05PX05PREVMQVkKLSovCi1zdGF0aWMgaW50 IGhhdmVfcHR5ID0gMDsJCS8qIERvIHdlIGhhdmUgYSBwdHk/ICovCi0KLXN0YXRpYyBTSUdUWVAg KCpzYXZlX3NpZ2NobGQpKCkgPSBOVUxMOwkvKiBGb3IgY2F0Y2hpbmcgU0lHQ0hMRCAqLwotCi1z dGF0aWMgVk9JRAotc2lnY2hsZF9oYW5kbGVyKHNpZykgaW50IHNpZzsgewotICAgIGhhdmVfcHR5 ID0gMDsJCQkvKiBXZSBkb24ndCBoYXZlIGEgcHR5ICovCi0jaWZkZWYgREVCVUcKLSAgICBpZiAo c2F2ZV9zaWdjaGxkKSB7Ci0JKFZPSUQpIHNpZ25hbChTSUdDSExELHNhdmVfc2lnY2hsZCk7Ci0J c2F2ZV9zaWdjaGxkID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKGRlYmxvZykgewotCWRlYnVnKEYx MDAsIioqKioqKioqKioqKioqIiwiIiwwKTsKLQlkZWJ1ZyhGMTAwLCJTSUdDSExEIGNhdWdodCIs IiIsMCk7Ci0JZGVidWcoRjEwMCwiKioqKioqKioqKioqKioiLCIiLDApOwotICAgIH0KLSNlbmRp ZgkvKiBERUJVRyAqLwotfQotI2RlZmluZSBIQVZFX0lBQyAxCi0jZGVmaW5lIEhBVkVfQ1IgIDIK LQotaW50Ci10dHB0eWNtZChzKSBjaGFyICpzOyB7Ci0gICAgQ0hBUiB0YnVmW1BUWV9UQlVGX1NJ WkVdOwkJLyogUmVhZCBmcm9tIG5ldCwgd3JpdGUgdG8gcHR5ICovCi0gICAgaW50IHRidWZfYXZh aWwgPSAwOwkJCS8qIFBvaW50ZXJzIGZvciB0YnVmICovCi0gICAgaW50IHRidWZfd3JpdHRlbiA9 IDA7Ci0gICAgc3RhdGljIGludCBpbl9zdGF0ZSA9IDA7CQkvKiBGb3IgVEVMTkVUIElBQyBhbmQg TlZUIGluICovCi0gICAgc3RhdGljIGludCBvdXRfcHJldiA9IDA7CQkvKiBTaW1wbGVyIHNjaGVt ZSBmb3Igb3V0ICovCi0KLSAgICBDSEFSIHBidWZbUFRZX1BCVUZfU0laRV07CQkvKiBSZWFkIGZy b20gcHR5LCB3cml0ZSB0byBuZXQgKi8KLSAgICBDSEFSIGRidWZbUFRZX1BCVUZfU0laRSArIFBU WV9QQlVGX1NJWkUgKyAxXTsgLyogRG91YmxlLXNpemUgYnVmZmVyICovCi0gICAgaW50IHBidWZf YXZhaWwgPSAwOwkJCS8qIFBvaW50ZXJzIGZvciBwYnVmICovCi0gICAgaW50IHBidWZfd3JpdHRl biA9IDA7Ci0KLSAgICBpbnQgcHR5ZmQgPSAtMTsJCQkvKiBQdHkgZmlsZSBkZXNjcmlwdG9yICov Ci0gICAgaW50IGhhdmVfbmV0ID0gMDsJCQkvKiBXZSBoYXZlIGEgbmV0d29yayBjb25uZWN0aW9u ICovCi0gICAgaW50IHB0eV9lcnIgPSAwOwkJCS8qIEdvdCBlcnJvciBvbiBwdHkgKi8KLSAgICBp bnQgbmV0X2VyciA9IDA7CQkJLyogR290IGVycm9yIG9uIG5ldCAqLwotICAgIGludCBzdGF0dXMg PSAtMTsJCQkvKiBQdHkgcHJvY2VzcyBleGl0IHN0YXR1cyAqLwotICAgIGludCByYyA9IDA7CQkJ CS8qIE91ciByZXR1cm4gY29kZSAqLwotCi0gICAgaW50IHgxID0gMCwgeDIgPSAwOwkJCS8qIFdv cmtlcnMuLi4gKi8KLSAgICBpbnQgYywgbiwgbSwgdCwgeDsJCQkvKiBXb3JrZXJzICovCi0KLSAg ICBsb25nIHNlY29uZHNfdG9fd2FpdCA9IDBMOwkJLyogc2VsZWN0KCkgdGltZW91dCAqLwotICAg IHN0cnVjdCB0aW1ldmFsIHR2LCAqdHYyOwkJLyogRm9yIHNlbGVjdCgpICovCi0jaWZkZWYgSU5U U0VMRUNUCi0gICAgaW50IGluLCBvdXQsIGVycjsJCQkvKiBGb3Igc2VsZWN0KCkgKi8KLSNlbHNl Ci0gICAgZmRfc2V0IGluLCBvdXQsIGVycjsKLSNlbmRpZiAvKiBJTlRTRUxFQ1QgKi8KLSAgICBp bnQgbmZkcyA9IDA7CQkJLyogRm9yIHNlbGVjdCgpICovCi0KLSAgICBpbnQgcHNldCA9IDAsIHRz ZXQgPSAwLCBwbm90c2V0ID0gMCwgdG5vdHNldCA9IDA7IC8qIHN0YXRzL2RlYnVnZ2luIG9ubHkg Ki8KLSAgICBpbnQgcmVhZF9uZXRfYnl0ZXMgPSAwOwkJLyogU3RhdHMgKi8KLSAgICBpbnQgd3Jp dGVfbmV0X2J5dGVzID0gMDsJCS8qIFN0YXRzICovCi0gICAgaW50IHJlYWRfcHR5X2J5dGVzID0g MDsJCS8qIFN0YXRzICovCi0gICAgaW50IHdyaXRlX3B0eV9ieXRlcyA9IDA7CQkvKiBTdGF0cyAq LwotICAgIGludCBpc190biA9IDA7CQkJLyogVEVMTkVUIHByb3RvY29sIGlzIGFjdGl2ZSAqLwot Ci0gICAgaW50IG1hc3RlcmZkID0gLTE7Ci0gICAgaW50IHNsYXZlZmQgPSAtMTsKLSNpZm5kZWYg VVNFX0NLVVBUWV9DCi0gICAgc3RydWN0IHRlcm1pb3MgdGVybTsKLSAgICBzdHJ1Y3Qgd2luc2l6 ZSB0d2luOwotICAgIHN0cnVjdCBzdHJpbmdhcnJheSAqIHE7Ci0gICAgY2hhciAqKiBhcmdzID0g TlVMTDsKLSNlbmRpZiAvKiBVU0VfQ0tVUFRZX0MgKi8KLQotICAgIGluX3N0YXRlID0gMDsJCQkv KiBObyBwcmV2aW91cyBjaGFyYWN0ZXIgeWV0ICovCi0KLSAgICBpZiAodHR5ZmQgPT0gLTEpIHsK LQlwcmludGYoIj9Tb3JyeSwgY29tbXVuaWNhdGlvbiBjaGFubmVsIGlzIG5vdCBvcGVuXG4iKTsK LQlyZXR1cm4oMCk7Ci0gICAgfSBlbHNlIHsKLQloYXZlX25ldCA9IDE7Ci0gICAgfQotICAgIGlm IChub3B1c2gpIHsKLQlkZWJ1ZyhGMTAwLCJ0dHB0eWNtZCBmYWlsOiBub3B1c2giLCIiLDApOwot CXJldHVybigwKTsKLSAgICB9Ci0gICAgaWYgKCFzKSBzID0gIiI7CQkJLyogRGVmZW5zZSBkZSBi b2d1cyBhcmd1bWVudHMgKi8KLSAgICBpZiAoISpzKSByZXR1cm4oMCk7Ci0gICAgcGV4aXRzdGF0 ID0gLTE7CQkJLyogRm9yayBwcm9jZXNzIGV4aXQgc3RhdHVzICovCi0KLSNpZmRlZiBUTkNPREUK LSAgICBpc190biA9ICh4bG9jYWwgJiYgbmV0Y29ubiAmJiBJU19URUxORVQoKSkgfHwgLyogVGVs bmV0IHByb3RvY29sIGFjdGl2ZSAqLwotCSAgICAoIXhsb2NhbCAmJiBzc3RlbG5ldCk7Ci0jZW5k aWYgLyogVE5DT0RFICovCi0KLSAgICBkZWJ1ZyhGMTEwLCJ0dHB0eWNtZCBjb21tYW5kIixzLDAp OwotICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIHR0eWZkIiwiIix0dHlmZCk7Ci0gICAgZGVidWco RjEwMSwidHRwdHljbWQgaXNfdG4iLCIiLGlzX3RuKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNt ZCBja2VybWl0IHBpZCIsIiIsZ2V0cGlkKCkpOwotCi0jaWZkZWYgVVNFX0NLVVBUWV9DCi0gICAg LyogQ2FsbCBja3VwdHkuYyBtb2R1bGUgdG8gZ2V0IGFuZCBzZXQgdXAgdGhlIHB0eSBmb3JrICov Ci0gICAgLyogZmMgMSA9PSAicnVuIGFuIGV4dGVybmFsIHByb3RvY29sIiAqLwotICAgIGRlYnVn KEYxMDAsInR0cHR5Y21kIHVzaW5nIGNrdXB0eS5jIiwiIiwwKTsKLSAgICBpZiAoZG9fcHR5KCZw dHlmZCxzLDEpIDwgMCkgewkvKiBTdGFydCB0aGUgY29tbWFuZCBvbiBhIHB0eSAqLwotCWRlYnVn KEYxMDAsInR0cHR5Y21kIGRvX3B0eSBmYWlscyIsIiIsMCk7Ci0JcmV0dXJuKDApOwotICAgIH0K LSAgICBtYXN0ZXJmZCA9IHB0eWZkOwotICAgIHB0eV9tYXN0ZXJfZmQgPSBwdHlmZDsKLSNpZmRl ZiBDT01NRU5UCi0gICAgc2xhdmVmZCA9IHB0eV9zbGF2ZV9mZDsJCS8qIFRoaXMgaXMgbm90IHZp c2libGUgdG8gdXMgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgZGVidWcoRjExMSwidHRw dHljbWQgcHR5ZmQiLCJVU0VfQ0tVUFRZX0MiLHB0eWZkKTsKLSAgICBkZWJ1ZyhGMTExLCJ0dHB0 eWNtZCBtYXN0ZXJmZCIsIlVTRV9DS1VQVFlfQyIsbWFzdGVyZmQpOwotICAgIGRlYnVnKEYxMTEs InR0cHR5Y21kIGZvcmsgcGlkIiwiVVNFX0NLVVBUWV9DIixwdHlfZm9ya19waWQpOwotI2lmbmRl ZiBTT0xBUklTCi0gICAgLyogImlvY3RsIGluYXBwcm9wcmlhdGUgb24gZGV2aWNlIiBmb3IgcHR5 IG1hc3RlciAqLwotICAgIHB0eV9tYWtlX3JhdyhtYXN0ZXJmZCk7Ci0jZW5kaWYgLyogU09MQVJJ UyAqLwotCi0jZWxzZSAvKiBVU0VfQ0tVUFRZX0MgKi8KLQotICAgIGRlYnVnKEYxMDAsInR0cHR5 Y21kIE9QRU5QVFkiLCIiLDApOwotICAgIGlmICh0Y2dldGF0dHIoMCwgJnRlcm0pID09IC0xKSB7 CS8qIEdldCBjb250cm9sbGluZyB0ZXJtaW5hbCdzIG1vZGVzICovCi0JcGVycm9yKCJ0Y2dldGF0 dHIiKTsKLQlyZXR1cm4oMCk7Ci0gICAgfQotICAgIGlmIChpb2N0bCgwLCBUSU9DR1dJTlNaLCAo Y2hhciAqKSAmdHdpbikgPT0gLTEpIHsgLyogYW5kIHdpbmRvdyBzaXplICovCi0JcGVycm9yKCJp b2N0bCBUSU9DR1dJTlNaIik7Ci0JcmV0dXJuKDApOwotICAgIH0KLSAgICBpZiAob3BlbnB0eSgm bWFzdGVyZmQsICZzbGF2ZWZkLCBOVUxMLCBOVUxMLCBOVUxMKSA9PSAtMSkgewotCWRlYnVnKEYx MDEsInR0cHR5Y21kIG9wZW5wdHkgZmFpbGVkIGVycm5vIiwiIixlcnJubyk7Ci0JcGVycm9yKCJv cGVudHB5Iik7Ci0JcmV0dXJuKDApOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBv cGVucHR5IG1hc3RlcmZkIiwiIixtYXN0ZXJmZCk7Ci0gICAgZGVidWcoRjEwMSwidHRwdHljbWQg b3BlbnB0eSBzbGF2ZWZkIiwiIixzbGF2ZWZkKTsKLSAgICBwdHlfbWFzdGVyX2ZkID0gbWFzdGVy ZmQ7Ci0gICAgcHR5X3NsYXZlX2ZkID0gc2xhdmVmZDsKLSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNt ZCBvcGVucHR5IHB0eV9tYXN0ZXJfZmQiLCIiLHB0eV9tYXN0ZXJfZmQpOwotCi0gICAgLyogUHV0 IHB0eSBtYXN0ZXIgaW4gcmF3IG1vZGUgYnV0IGxldCBmb3JrZWQgYXBwIGNvbnRyb2wgdGhlIHNs YXZlICovCi0gICAgcHR5X21ha2VfcmF3KG1hc3RlcmZkKTsKLQotI2lmZGVmIENPTU1FTlQKLSNp ZmRlZiBUSU9DUkVNT1RFCi0gICAgLyogVElPQ1JFTU9URSwwID0gZGlzYWJsZSBhbGwgdGVybWlv IHByb2Nlc3NpbmcgKi8KLSAgICB4ID0gaW9jdGwobWFzdGVyZmQsIFRJT0NSRU1PVEUsIDEpOwot ICAgIGRlYnVnKEYxMTEsInR0cHR5Y21kIGlvY3RsIFRJT0NSRU1PVEUiLGNraXRvYSh4KSxlcnJu byk7Ci0jZW5kaWYJLyogVElPQ1JFTU9URSAqLwotI2lmZGVmIFRJT0NUVFkKLSAgICAvKiBUSU9D VFRZLDAgPSBkaXNhYmxlIGFsbCB0ZXJtaW8gcHJvY2Vzc2luZyAqLwotICAgIHggPSBpb2N0bCht YXN0ZXJmZCwgVElPQ1RUWSwgMCk7Ci0gICAgZGVidWcoRjExMSwidHRwdHljbWQgaW9jdGwgVElP Q1RUWSIsY2tpdG9hKHgpLGVycm5vKTsKLSNlbmRpZgkvKiBUSU9DVFRZICovCi0jZW5kaWYgLyog Q09NTUVOVCAqLwotCi0gICAgaGF2ZV9wdHkgPSAxOwkJCS8qIFdlIGhhdmUgYW4gb3BlbiBwdHkg Ki8KLSAgICBzYXZlX3NpZ2NobGQgPSBzaWduYWwoU0lHQ0hMRCwgc2lnY2hsZF9oYW5kbGVyKTsg LyogQ2F0Y2ggZm9yayBxdWl0ICovCi0KLSAgICBwdHlfZm9ya19waWQgPSBmb3JrKCk7CQkvKiBN YWtlIGZvcmsgZm9yIGV4dGVybmFsIHByb3RvY29sICovCi0gICAgZGVidWcoRjEwMSwidHRwdHlj bWQgcHR5X2ZvcmtfcGlkIiwiIixwdHlfZm9ya19waWQpOwotICAgIGlmIChwdHlfZm9ya19waWQg PT0gLTEpIHsKLQlwZXJyb3IoImZvcmsiKTsKLQlyZXR1cm4oMCk7Ci0gICAgfSBlbHNlIGlmIChw dHlfZm9ya19waWQgPT0gMCkgewkvKiBJbiBuZXcgZm9yayAqLwotCWludCB4OwotCWRlYnVnKEYx MDEsInR0cHR5Y21kIG5ldyBmb3JrIHBpZCIsIiIsZ2V0cGlkKCkpOwotCWNsb3NlKG1hc3RlcmZk KTsJCS8qIFNsYXZlIHF1YXJ0ZXJzIG5vIG1hc3RlcnMgYWxsb3dlZCAqLwotCXggPSBzZXRzaWQo KTsKLQlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBuZXcgZm9yayBzZXRzaWQiLCIiLHgpOwotCWlmICh4 ID09IC0xKSB7Ci0JICAgIHBlcnJvcigidHRwdHljbWQgc2V0c2lkIik7Ci0JICAgIGV4aXQoMSk7 Ci0JfQotCXNpZ25hbChTSUdJTlQsU0lHX0lHTik7CQkvKiBMZXQgdXBwZXIgZm9yayBjYXRjaCB0 aGlzICovCi0JCi0jaWZkZWYgQ09NTUVOVAotI2lmZGVmIFRJT0NTQ1RUWQotCS8qIE1ha2UgcHR5 IHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbCBmb3IgdGhlIHByb2Nlc3MgKi8KLQkvKiBUSElTIENB VVNFUyBBTiBJTkZJTklURSBTSUdXSU5DSCBJTlRFUlJVUFQgTE9PUCAqLwotCXggPSBpb2N0bChz bGF2ZWZkLCBUSU9DU0NUVFksIE5VTEwpOwotCWRlYnVnKEYxMDEsInR0cHR5Y21kIFRJT0NTQ1RU WSIsIiIseCk7Ci0jZW5kaWYJLyogVElPQ1NDVFRZICovCi0jZW5kaWYJLyogQ09NTUVOVCAqLwot Ci0JLyogSW5pdGlhbGl6ZSBzbGF2ZSBwdHkgbW9kZXMgYW5kIHNpemUgdG8gdGhvc2Ugb2Ygb3Vy IHRlcm1pbmFsICovCi0JaWYgKHRjc2V0YXR0cihzbGF2ZWZkLCBUQ1NBTk9XLCAmdGVybSkgPT0g LTEpIHsKLQkgICAgcGVycm9yKCJ0dHB0eWNtZCB0Y3NldGF0dHIiKTsKLQkgICAgZXhpdCgxKTsK LQl9Ci0JaWYgKGlvY3RsKHNsYXZlZmQsIFRJT0NTV0lOU1osICZ0d2luKSA9PSAtMSkgewotCSAg ICBwZXJyb3IoInR0cHR5Y21kIGlvY3RsIik7Ci0JICAgIGV4aXQoMSk7Ci0JfQotI2lmZGVmIENP TU1FTlQKLSNpZmRlZiBUSU9DTk9UVFkKLQkvKiBEaXNhc3NvY2lhdGUgdGhpcyBwcm9jZXNzIGZy b20gaXRzIHRlcm1pbmFsICovCi0JLyogVEhJUyBIQVMgTk8gRUZGRUNUICovCi0JeCA9IGlvY3Rs KHNsYXZlZmQsIFRJT0NOT1RUWSwgTlVMTCk7Ci0JZGVidWcoRjEwMSwidHRwdHljbWQgVElPQ05P VFRZIiwiIix4KTsKLSNlbmRpZgkvKiBUSU9DTk9UVFkgKi8KLSNlbmRpZgkvKiBDT01NRU5UICov Ci0KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgU0lHVFRPVQkKLQkvKiBJZ25vcmUgdGVybWluYWwg b3V0cHV0IGludGVycnVwdHMgKi8KLQkvKiBUSElTIEhBUyBOTyBFRkZFQ1QgKi8KLQlkZWJ1ZyhG MTAwLCJ0dHB0eWNtZCBpZ25vcmluZyBTSUdUVE9VIiwiIiwwKTsKLQlzaWduYWwoU0lHVFRPVSwg U0lHX0lHTik7Ci0jZW5kaWYJLyogU0lHVFRPVSAqLwotI2lmZGVmIFNJR1RTVFAJCi0JLyogSWdu b3JlIHRlcm1pbmFsIG91dHB1dCBpbnRlcnJ1cHRzICovCi0JLyogVEhJUyBIQVMgTk8gRUZGRUNU ICovCi0JZGVidWcoRjEwMCwidHRwdHljbWQgaWdub3JpbmcgU0lHVFNUUCIsIiIsMCk7Ci0Jc2ln bmFsKFNJR1RTVFAsIFNJR19JR04pOwotI2VuZGlmCS8qIFNJR1RTVFAgKi8KLSNlbmRpZgkvKiBD T01NRU5UICovCi0KLQlwdHlfbWFrZV9yYXcoc2xhdmVmZCk7CQkvKiBQdXQgaXQgaW4gcmF3bW9k ZSAqLwotCi0JZXJybm8gPSAwOwotCWlmIChkdXAyKHNsYXZlZmQsIFNURElOX0ZJTEVOTykgIT0g U1RESU5fRklMRU5PIHx8Ci0JICAgIGR1cDIoc2xhdmVmZCwgU1RET1VUX0ZJTEVOTykgIT0gU1RE T1VUX0ZJTEVOTykgewotCSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBuZXcgZm9yayBkdXAyIGVy cm9yIiwiIixlcnJubyk7Ci0JICAgIHBlcnJvcigidHRwdHljbWQgZHVwMiIpOwotCSAgICBleGl0 KDEpOwotCX0KLQlkZWJ1ZyhGMTAwLCJ0dHB0eWNtZCBuZXcgZm9yayBkdXAyIG9rIiwiIiwwKTsK LQotCS8qIFBhcnNlIGV4dGVybmFsIHByb3RvY29sIGNvbW1hbmQgbGluZSAqLwotCXEgPSBja3Nw bGl0KDEsMCxzLE5VTEwsIlxcJVtdJiQrLS89Kl5fQCF7fS88PnwuI34nYDo7PyIsNywwLDApOwot CWlmICghcSkgewotCSAgICBkZWJ1ZyhGMTAwLCJ0dHB0eWNtZCBja3NwbGl0IGZhaWxlZCIsIiIs MCk7Ci0JICAgIGV4aXQoMSk7Ci0JfSBlbHNlIHsKLQkgICAgaW50IGksIG47Ci0JICAgIGRlYnVn KEYxMDAsInR0cHR5Y21kIGNrc3BsaXQgb2siLCIiLDApOwotCSAgICBuID0gcS0+YV9zaXplOwot CSAgICBhcmdzID0gcS0+YV9oZWFkICsgMTsKLQkgICAgZm9yIChpID0gMDsgaSA8PSBuOyBpKysp IHsKLQkJaWYgKCFhcmdzW2ldKSB7Ci0JCSAgICBicmVhazsKLQkJfSBlbHNlIHsKLQkJICAgIC8q IHNvbWV0aW1lcyBja3NwbGl0KCkgZG9lc24ndCB0ZXJtaW5hdGUgdGhlIGxpc3QgKi8KLQkJICAg IGlmICgoaSA9PSBuKSAmJiBhcmdzW2ldKSB7Ci0JCQlpZiAoKGludClzdHJsZW4oYXJnc1tpXSkg PT0gMCkKLQkJCSAgbWFrZXN0cigmKGFyZ3NbaV0pLE5VTEwpOwotCQkgICAgfQotCQl9Ci0JICAg IH0JICAgIAotCX0KLSNpZmRlZiBDT01NRU5UCi0vKgotICBQdXR0aW5nIHRoZSBzbGF2ZSBwdHkg aW4gcmF3bW9kZSBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZQotICBleHRlcm5h bCBwcm90b2NvbCBwcm9ncmFtIGlzIHN1cHBvc2VkIHRvIGRvIHRoYXQgaXRzZWxmLiAgWWV0IGRv aW5nIHRoaXMKLSAgaGVyZSBjdXRzIGRvd24gb24gWm1vZGVtIGJpbmFyeS1maWxlIHRyYW5zbWlz c2lvbiBlcnJvcnMgYnkgMzAtNTAlIGJ1dAotICBzdGlsbCBkb2Vzbid0IGVsaW1pbmF0ZSB0aGVt LgotKi8KLQlwdHlfbWFrZV9yYXcoU1RESU5fRklMRU5PKTsKLQlwdHlfbWFrZV9yYXcoU1RET1VU X0ZJTEVOTyk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0JZGVidWcoRjEwMCwidHRwdHljbWQg ZXhlY3ZwJ2luZyBleHRlcm5hbCBwcm90b2NvbCIsIiIsMCk7Ci0JZXhlY3ZwKGFyZ3NbMF0sYXJn cyk7Ci0JcGVycm9yKCJleGVjdnAgZmFpbGVkIik7Ci0JZGVidWcoRjEwMSwidHRwdHljbWQgZXhl Y3ZwIGZhaWxlZCIsIiIsZXJybm8pOwotCWNsb3NlKHNsYXZlZmQpOwotCWV4aXQoMSk7Ci0gICAg fSAKLSAgICAvKiAodGhlcmUgYXJlIGJldHRlciB3YXlzIHRvIGRvIHRoaXMuLi4pICovCi0gICAg bXNsZWVwKDEwMDApOwkJICAvKiBNYWtlIHBhcmVudCB3YWl0IGZvciBjaGlsZCB0byBiZSByZWFk eSAqLwotICAgIHB0eWZkID0gbWFzdGVyZmQ7CQkJLyogV2UgdGFsayB0byB0aGUgbWFzdGVyICov Ci0KLSNlbmRpZiAvKiBVU0VfQ0tVUFRZX0MgKi8KLQotICAgIGRlYnVnKEYxMDEsInR0cHR5Y21k IHB0eWZkIiwiIixwdHlmZCk7Ci0gICAgaWYgKHB0eWZkIDwgMCkgewotCXByaW50ZigiP0ZhaWx1 cmUgdG8gZ2V0IHB0eVxuIik7Ci0JcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgaGF2ZV9wdHkgPSAx OwkgICAgICAvKiBXZSBoYXZlIGFuIG9wZW4gcHR5IG9yIHdlIHdvdWxkbid0IGhlIGhlcmUgKi8K LQotICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIFBUWV9QQlVGX1NJWkUiLCIiLFBUWV9QQlVGX1NJ WkUpOwotICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIFBUWV9UQlVGX1NJWkUiLCIiLFBUWV9UQlVG X1NJWkUpOwotCi0jaWZkZWYgUFRZX1VTRV9OREVMQVkKLSAgICAvKiAKLSAgICAgICBOT1RFOiBJ ZiBzZWxlY3QoKSBhbmQgaW9jdGwocHR5ZmQsRklPTlJFQUQsJm4pIHJldHVybiB0cnVlIGluZGlj YXRpb25zCi0gICAgICAgb24gdGhlIHB0eSwgd2UgZG9uJ3QgbmVlZCBub25ibG9ja2luZyByZWFk cy4gIFBlcmZvcm1hbmNlIG9mIGVpdGhlcgotICAgICAgIG1ldGhvZCBzZWVtcyB0byBiZSBhYm91 dCB0aGUgc2FtZSwgc28gdXNlIHdoYXRldmVyIHdvcmtzLgotICAgICovCi0gICAgZXJybm8gPSAw OwotICAgIHggPSBmY250bChwdHlmZCxGX1NFVEZMLGZjbnRsKHB0eWZkLEZfR0VURkwsIDApfE9f TkRFTEFZKTsKLSAgICBja21ha21zZyhtc2didWYsNTAwLAotCSAgICAgInR0cHR5Y21kIHNldCBP X05ERUxBWSBlcnJubz0iLAotCSAgICAgY2tpdG9hKGVycm5vKSwKLQkgICAgICIgZmNudGw9IiwK LQkgICAgIGNraXRvYSh4KSk7Ci0gICAgZGVidWcoRjEwMCxtc2didWYsIiIsMCk7Ci0jZW5kaWYg LyogUFRZX1VTRV9OREVMQVkgKi8KLQotI2lmZGVmIENPTU1FTlQKLS8qIE5vdCBuZWNlc3Nhcnks IHRoZSBwcm90b2NvbCBtb2R1bGUgYWxyZWFkeSBkaWQgdGhpcyAqLwotCi0jaWZkZWYgVVNFX0NG TUFLRVJBVwotICAgIGlmICh0Y2dldGF0dHIodHR5ZmQsICZ0ZXJtKSA+IC0xKSB7Ci0JY2ZtYWtl cmF3KCZ0ZXJtKTsKLQlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBuZXQgY2ZtYWtlcmF3IGVycm5vIiwi IixlcnJubyk7Ci0JeCB0Y3NldGF0dHIodHR5ZmQsIFRDU0FOT1csICZ0ZXJtKTsKLQlkZWJ1ZyhG MTAxLCJ0dHB0eWNtZCBuZXQgdGNzZXRhdHRyIiwiIix4KTsKLQlkZWJ1ZyhGMTAxLCJ0dHB0eWNt ZCBuZXQgdGNzZXRhdHRyIiwiIixlcnJubyk7Ci0gICAgfQotI2Vsc2UKLSAgICBpZiAobG9jYWwp CQkJCS8qIFB1dCBuZXR3b3JrIGNvbm5lY3Rpb24gaW4gKi8KLSAgICAgIHR0cGt0KHR0c3BlZWQs dHRmbG93LHR0cHJ0eSk7CS8qICJwYWNrZXQgbW9kZSIuICovCi0gICAgZWxzZQotICAgICAgY29u YmluKChjaGFyKWVzY2Nocik7CQkvKiBPUi4uLiBwdHlfbWFrZV9yYXcoMCkgKi8KLSNlbmRpZiAv KiBVU0VfQ0ZNQUtFUkFXICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0jaWZkZWYgVE5DT0RF Ci0gICAgaWYgKGlzX3RuKSB7Ci0gICAgICBkZWJ1ZyhGMTAxLCI8PDwgdHRwdHljbWQgVEVMT1BU X01FX0JJTkFSWSIsIiIsVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpKTsKLSAgICAgIGRlYnVnKEYx MDEsIjw8PCB0dHB0eWNtZCBURUxPUFRfVV9CSU5BUlkiLCIiLFRFTE9QVF9VKFRFTE9QVF9CSU5B UlkpKTsKLSAgICB9Ci0jZW5kaWYgLyogVE5DT0RFICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJ0dHB0 eWNtZCBlbnRlcmluZyBsb29wIC0gc2Vjb25kc190b193YWl0IiwiIixzZWNvbmRzX3RvX3dhaXQp OwotCi0gICAgd2hpbGUgKGhhdmVfcHR5IHx8IGhhdmVfbmV0KSB7Ci0JRkRfWkVSTygmaW4pOwkJ CS8qIEluaXRpYWxpemUgc2VsZWN0KCkgc3RydWN0cyAqLwotCUZEX1pFUk8oJm91dCk7Ci0JRkRf WkVSTygmZXJyKTsJCQkvKiAobm90IHVzZWQgYmVjYXVzZSB1c2VsZXNzKSAqLwotCW5mZHMgPSAt MTsKLQotCWRlYnVnKEYxMDEsInR0cHR5Y21kIGxvb3AgdG9wIGhhdmVfcHR5IiwiIixoYXZlX3B0 eSk7Ci0JZGVidWcoRjEwMSwidHRwdHljbWQgbG9vcCB0b3AgaGF2ZV9uZXQiLCIiLGhhdmVfbmV0 KTsKLQotCS8qIFB0eSBpcyBvcGVuIGFuZCB3ZSBoYXZlIHJvb20gdG8gcmVhZCBmcm9tIGl0PyAq LwotCWlmIChoYXZlX3B0eSAmJiBwYnVmX2F2YWlsIDwgUFRZX1BCVUZfU0laRSkgewotCSAgICBk ZWJ1ZyhGMTAwLCJ0dHB0eWNtZCBGRF9TRVQgcHR5ZmQgaW4iLCIiLDApOwotICAgICAgICAgICAg RkRfU0VUKHB0eWZkLCAmaW4pOwotCSAgICBuZmRzID0gcHR5ZmQ7Ci0gICAgICAgIH0KLQkvKiBO ZXR3b3JrIGlzIG9wZW4gYW5kIHdlIGhhdmUgcm9vbSB0byByZWFkIGZyb20gaXQ/ICovCi0gICAg ICAgIGlmIChoYXZlX25ldCAmJiBoYXZlX3B0eSAmJiB0YnVmX2F2YWlsIDwgUFRZX1RCVUZfU0la RSkgewotCSAgICBkZWJ1ZyhGMTAwLCJ0dHB0eWNtZCBGRF9TRVQgdHR5ZmQgaW4iLCIiLDApOwot ICAgICAgICAgICAgRkRfU0VUKHR0eWZkLCAmaW4pOwotCSAgICBpZiAodHR5ZmQgPiBuZmRzKSBu ZmRzID0gdHR5ZmQ7Ci0gICAgICAgIH0KLQkvKiBQdHkgaXMgb3BlbiBhbmQgd2UgaGF2ZSBzdHVm ZiB0byB3cml0ZSB0byBpdD8gKi8KLSAgICAgICAgaWYgKGhhdmVfcHR5ICYmIHRidWZfYXZhaWwg LSB0YnVmX3dyaXR0ZW4gPiAwKSB7Ci0JICAgIGRlYnVnKEYxMDAsInR0cHR5Y21kIEZEX1NFVCBw dHlmZCBvdXQiLCIiLDApOwotICAgICAgICAgICAgRkRfU0VUIChwdHlmZCwgJm91dCk7Ci0JICAg IGlmIChwdHlmZCA+IG5mZHMpIG5mZHMgPSBwdHlmZDsKLSAgICAgICAgfQotCS8qIE5ldCBpcyBv cGVuIGFuZCB3ZSBoYXZlIHN0dWZmIHRvIHdyaXRlIHRvIGl0PyAqLwotCWRlYnVnKEYxMDEsInR0 cHR5Y21kIHBidWZfYXZhaWwtcGJ1Zl93cml0dGVuIiwiIiwKLQkgICAgICBwYnVmX2F2YWlsIC0g cGJ1Zl93cml0dGVuKTsKLSAgICAgICAgaWYgKGhhdmVfbmV0ICYmIHBidWZfYXZhaWwgLSBwYnVm X3dyaXR0ZW4gPiAwKSB7Ci0JICAgIGRlYnVnKEYxMDAsInR0cHR5Y21kIEZEX1NFVCB0dHlmZCBv dXQiLCIiLDApOwotICAgICAgICAgICAgRkRfU0VUICh0dHlmZCwgJm91dCk7Ci0JICAgIGlmICh0 dHlmZCA+IG5mZHMpIG5mZHMgPSB0dHlmZDsKLSAgICAgICAgfQotCS8qIFdlIGRvbid0IHVzZSBl cnIgYmVjYXVzZSBpdCdzIG5vdCByZWFsbHkgZm9yIGVycm9ycywgKi8KLQkvKiBidXQgZm9yIG91 dCBvZiBiYW5kIGRhdGEgb24gdGhlIFRDUCBzb2NrZXQsIHdoaWNoLCBpZiBpdCBpcyAqLwotCS8q IHRvIGJlIGhhbmRsZWQgYXQgYWxsLCBpcyBoYW5kbGVkIGluIHRoZSB0dCooKSByb3V0aW5lcyAq LwotCi0JbmZkcysrOwkJCQkvKiAwLWJhc2VkIHRvIDEtYmFzZWQgKi8KLQlkZWJ1ZyhGMTAxLCJ0 dHB0eWNtZCBuZmRzIiwiIixuZmRzKTsKLQlpZiAoIW5mZHMpIHsKLQkgICAgZGVidWcoRjEwMCwi dHRwdHljbWQgTk8gRkRzIHNldCBmb3Igc2VsZWN0IiwiIiwwKTsKLQkgICAgaWYgKGhhdmVfcHR5 KSB7Ci0JCS8qIFRoaXMgaXMgbm90IHJpZ2h0IC0tIHNsZWVwaW5nIHdvbid0IGFjY29tcGxpc2gg YW55dGhpbmcgKi8KLQkJZGVidWcoRjEwMSwidHRwdHljbWQgbXNsZWVwIiwiIiwxMDApOwotCQlt c2xlZXAoMTAwKTsJICAgIAotCSAgICB9IGVsc2UgewotCQlkZWJ1ZyhGMTAwLCJ0dHB0eWNtZCBu byBwdHkgLSBxdWl0dGluZyBsb29wIiwiIiwwKTsKLQkJYnJlYWs7Ci0JICAgIH0KLQl9Ci0JZXJy bm8gPSAwOwotCi0JaWYgKHNlY29uZHNfdG9fd2FpdCA+IDBMKSB7CS8qIFRpbWVvdXQgaW4gY2Fz ZSBub3RoaW5nIGhhcHBlbnMgKi8KLQkgICAgdHYudHZfc2VjID0gc2Vjb25kc190b193YWl0OyAv KiBmb3IgYSBsb25nIHRpbWUgKi8KLQkgICAgdHYudHZfdXNlYyA9IDBMOwkJCi0JICAgIHR2MiA9 ICZ0djsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHR2MiA9IE5VTEw7Ci0JfQotCXgg PSBzZWxlY3QobmZkcywgJmluLCAmb3V0LCBOVUxMLCB0djIpOwotCWRlYnVnKEYxMDEsInR0cHR5 Y21kIHNlbGVjdCIsIiIseCk7Ci0JaWYgKHggPCAwKSB7Ci0JICAgIGlmIChlcnJubyA9PSBFSU5U UikKLQkgICAgICBjb250aW51ZTsKLQkgICAgZGVidWcoRjEwMSwidHRwdHljbWQgc2VsZWN0IGVy cm9yIiwiIixlcnJubyk7Ci0JICAgIGJyZWFrOwotCX0KLQlpZiAoeCA9PSAwKSB7Ci0JICAgIGRl YnVnKEYxMDEsInR0cHR5Y21kICsrKyBzZWxlY3QgdGltZW91dCIsIiIsc2Vjb25kc190b193YWl0 KTsgCi0JICAgIGlmIChoYXZlX3B0eSkgewotCQlzdGF0dXMgPSBwdHlfZ2V0X3N0YXR1cyhwdHlm ZCxwdHlfZm9ya19waWQpOwotCQlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBwdHlfZ2V0X3N0YXR1cyBB IiwiIixzdGF0dXMpOwotCQlpZiAoc3RhdHVzID4gLTEpIHBleGl0c3RhdCA9IHN0YXR1czsKLQkJ aGF2ZV9wdHkgPSAwOwotCSAgICB9Ci0JICAgIGJyZWFrOwotCX0KLQkvKiBXZSB3YW50IHRvIGhh bmRsZSBhbnkgcGVuZGluZyB3cml0ZXMgZmlyc3QgdG8gbWFrZSByb29tICovCi0JLyogZm9yIG5l dyBpbmNvbWluZy4gKi8KLQotCWlmIChGRF9JU1NFVCh0dHlmZCwgJm91dCkpIHsJLyogQ2FuIHdy aXRlIHRvIG5ldD8gKi8KLQkgICAgQ0hBUiAqIHM7Ci0JICAgIHMgPSBwYnVmICsgcGJ1Zl93cml0 dGVuOwkvKiBDdXJyZW50IHNwb3QgZm9yIHNlbmRpbmcgKi8KLSNpZmRlZiBUTkNPREUKLQkgICAg aWYgKGlzX3RuKSB7CQkvKiB0dG9sKCkgZG9lc24ndCBkb3VibGUgSUFDcyAqLwotCQlDSEFSIGM7 CQkJLyogUmV3cml0ZSBzdHJpbmcgd2l0aCBJQUNzIGRvdWJsZWQgKi8KLQkJaW50IGk7Ci0JCXMg PSBwYnVmICsgcGJ1Zl93cml0dGVuOyAvKiBTb3VyY2UgKi8KLQkJeCA9IDA7CQkgCSAvKiBDb3Vu dCAqLwotCQlmb3IgKGkgPSAwOyBpIDwgcGJ1Zl9hdmFpbCAtIHBidWZfd3JpdHRlbjsgaSsrKSB7 Ci0JCSAgICBjID0gc1tpXTsJCS8qIE5leHQgY2hhcmFjdGVyICovCi0JCSAgICBpZiAoYyA9PSBJ QUMpIHsJLyogSWYgaXQncyBJQUMgKi8KLQkJCWRidWZbeCsrXSA9IGM7CS8qIHB1dCBhbm90aGVy IG9uZSAqLwotCQkJZGVidWcoRjAwMCwiPj4+IFFVT1RFRCBJQUMiLCIiLGMpOwotCQkgICAgfSBl bHNlIGlmIChjICE9IDB4MGEgJiYgb3V0X3ByZXYgPT0gMHgwZCkgewkvKiBCYXJlIENSICovCi0J CQlpZiAoIVRFTE9QVF9NRShURUxPUFRfQklOQVJZKSkgeyAvKiBOVlQgcnVsZSAqLwotCQkJICAg IGMgPSAweDAwOwotCQkJICAgIGRidWZbeCsrXSA9IGM7Ci0JCQkgICAgZGVidWcoRjAwMCwiPj4+ IENSLU5VTCIsIiIsYyk7Ci0JCQl9CQkJCi0JCSAgICB9Ci0JCSAgICBkYnVmW3grK10gPSBjOwkv KiBDb3B5IGFuZCBjb3VudCBpdCAqLwotCQkgICAgZGVidWcoRjAwMCwiPj4+IGNoYXIiLGNraXRv YShpbl9zdGF0ZSksYyk7Ci0JCSAgICBvdXRfcHJldiA9IGM7Ci0JCX0KLQkJcyA9IGRidWY7CQkv KiBOZXcgc291cmNlICovCi0JICAgIH0gZWxzZQotI2VuZGlmIC8qIFROQ09ERSAqLwotCSAgICAg IHggPSBwYnVmX2F2YWlsIC0gcGJ1Zl93cml0dGVuOyAvKiBIb3cgbXVjaCB0byBzZW5kICovCi0K LQkgICAgZGVidWcoRjEwMSwidHRwdHljbWQgYnl0ZXMgdG8gc2VuZCIsIiIseCk7Ci0JICAgIHgg PSB0dG9sKHMsIHgpOwotCSAgICBkZWJ1ZyhGMTAxLCI+Pj4gdHRvbCIsIiIseCk7Ci0JICAgIGlm ICh4IDwgMCkgewotCQluZXRfZXJyKys7Ci0JCWRlYnVnKEYxMTEsInR0cHR5Y21kIHR0b2wgZXJy b3IiLGNraXRvYSh4KSxlcnJubyk7Ci0JCXggPSAwOwotCSAgICB9Ci0JICAgIHdyaXRlX25ldF9i eXRlcyArPSB4OwotCSAgICBwYnVmX3dyaXR0ZW4gKz0geDsKLQl9Ci0JaWYgKEZEX0lTU0VUKHB0 eWZkLCAmb3V0KSkgewkvKiBDYW4gd3JpdGUgdG8gcHR5PyAqLwotCSAgICBkZWJ1ZyhGMTAwLCJ0 dHB0eWNtZCBGRF9JU1NFVCBwdHlmZCBvdXQiLCIiLDApOwotCSAgICBlcnJubyA9IDA7Ci0jaWZu ZGVmIENPTU1FTlQKLQkgICAgeCA9IHdyaXRlKHB0eWZkLHRidWYgKyB0YnVmX3dyaXR0ZW4sdGJ1 Zl9hdmFpbCAtIHRidWZfd3JpdHRlbik7Ci0jZWxzZQotCSAgICAvKiBCeXRlIGxvb3AgdG8gcnVs ZSBvdXQgZGF0YSBvdmVycnVucyBpbiB0aGUgcHR5ICovCi0JICAgIC8qIChpdCBtYWtlcyBubyBk aWZmZXJlbmNlKSAqLwotCSAgICB7Ci0JCWNoYXIgKnAgPSB0YnVmK3RidWZfd3JpdHRlbjsKLQkJ aW50IG4gPSB0YnVmX2F2YWlsIC0gdGJ1Zl93cml0dGVuOwotCQlmb3IgKHggPSAwOyB4IDwgbjsg eCsrKSB7Ci0JCSAgICBtc2xlZXAoMTApOwotCQkgICAgaWYgKHdyaXRlKHB0eWZkLCYocFt4XSks MSkgPCAwKQotCQkgICAgICBicmVhazsKLQkJfQotCSAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAq LwotCSAgICBkZWJ1ZyhGMTExLCJ0dHB0eWNtZCBwdHlmZCB3cml0ZSIsY2tpdG9hKGVycm5vKSx4 KTsKLQkgICAgaWYgKHggPiAwKSB7Ci0JCXRidWZfd3JpdHRlbiArPSB4OwotCQl3cml0ZV9wdHlf Ynl0ZXMgKz0geDsKLQkgICAgfSBlbHNlIHsKLQkJeCA9IDA7Ci0JCXB0eV9lcnIrKzsKLQkJaWYg KHBleGl0c3RhdCA8IDApIHsKLQkJICAgIHN0YXR1cyA9IHB0eV9nZXRfc3RhdHVzKHB0eWZkLHB0 eV9mb3JrX3BpZCk7Ci0JCSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBwdHlfZ2V0X3N0YXR1cyBC IiwiIixzdGF0dXMpOwotCQkgICAgaWYgKHN0YXR1cyA+IC0xKSBwZXhpdHN0YXQgPSBzdGF0dXM7 Ci0JCSAgICBoYXZlX3B0eSA9IDA7Ci0JCX0KLQkJZGVidWcoRjEwMCwidHRwdHljbWQgKysrIHB0 eWZkIHdyaXRlIGVycm9yIiwiIiwwKTsKLQkgICAgfQotCX0KLQlpZiAoRkRfSVNTRVQodHR5ZmQs ICZpbikpIHsJLyogQ2FuIHJlYWQgZnJvbSBuZXQ/ICovCi0JICAgIHRzZXQrKzsKLQkgICAgZGVi dWcoRjEwMCwidHRwdHljbWQgRkRfSVNTRVQgdHR5ZmQgaW4iLCIiLDApOwotCSAgICBuID0gaW5f Y2hrKDEsdHR5ZmQpOwotCSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBpbl9jaGsodHR5ZmQpIiwi IixuKTsgCi0JICAgIGlmIChuIDwgMCB8fCB0dHlmZCA9PSAtMSkgewotCQlkZWJ1ZyhGMTAxLCJ0 dHB0eWNtZCArKysgdHR5ZmQgZXJybm8iLCIiLGVycm5vKTsKLQkJbmV0X2VycisrOwotCSAgICB9 IGVsc2UgaWYgKG4gPiAwKSB7Ci0JCWlmIChuID4gUFRZX1RCVUZfU0laRSAtIHRidWZfYXZhaWwp Ci0JCSAgbiA9IFBUWV9UQlVGX1NJWkUgLSB0YnVmX2F2YWlsOwotCQlkZWJ1ZyhGMTAxLCJ0dHB0 eWNtZCBuZXQgcmVhZCBzaXplIGFkanVzdGVkIiwiIixuKTsgCi0JCWlmICh4bG9jYWwgJiYgbmV0 Y29ubikgewotCQkgICAgLyoKLQkJICAgICAgV2UgaGF2ZSB0byB1c2UgYSBieXRlIGxvb3AgaGVy ZSBiZWNhdXNlIHR0eGluKCkKLQkJICAgICAgZG9lcyBub3QgZGVjcnlwdCBvciwgZm9yIHRoYXQg bWF0dGVyLCBoYW5kbGUgVGVsbmV0LgotCQkgICAgKi8KLQkJICAgIGludCBjOwotCQkgICAgQ0hB UiAqIHA7Ci0JCSAgICBwID0gdGJ1ZiArIHRidWZfYXZhaWw7Ci0JCSAgICBmb3IgKHggPSAwOyB4 IDwgbjsgeCsrKSB7Ci0JCQlpZiAoKGMgPSB0dGluYygwKSkgPCAwKQotCQkJICBicmVhazsKLQkJ CWlmICghaXNfdG4pIHsJLyogTm90IFRlbG5ldCAtIGtlZXAgYWxsIGJ5dGVzICovCi0JCQkgICAg KnArKyA9IChDSEFSKWM7Ci0JCQkgICAgZGVidWcoRjAwMCwiPDw8IGNoYXIiLCIiLGMpOwotI2lm ZGVmIFROQ09ERQotCQkJfSBlbHNlIHsJLyogVGVsbmV0IC0gbXVzdCBoYW5kbGUgSUFDIGFuZCBO VlQgKi8KLQkJCSAgICBkZWJ1ZyhGMDAwLCI8PDwgY2hhciIsY2tpdG9hKGluX3N0YXRlKSxjKTsK LQkJCSAgICBzd2l0Y2ggKGMpIHsKLQkJCSAgICAgIGNhc2UgMHgwMDogLyogTlVMICovCi0JCQkJ aWYgKGluX3N0YXRlID09IEhBVkVfQ1IpIHsKLQkJCQkgICAgZGVidWcoRjAwMCwiPDw8IFNLSVAi LCIiLGMpOwotCQkJCX0gZWxzZSB7Ci0JCQkJICAgICpwKysgPSBjOwotCQkJCSAgICBkZWJ1ZyhG MDAwLCI8PDwgS2VlcCIsIiIsYyk7Ci0JCQkJfQotCQkJCWluX3N0YXRlID0gMDsKLQkJCQlicmVh azsKLQkJCSAgICAgIGNhc2UgMHgwZDogLyogQ1IgKi8KLQkJCQlpZiAoIVRFTE9QVF9VKFRFTE9Q VF9CSU5BUlkpKQotCQkJCSAgaW5fc3RhdGUgPSBIQVZFX0NSOwotCQkJCSpwKysgPSBjOwotCQkJ CWRlYnVnKEYwMDAsIjw8PCBLZWVwIiwiIixjKTsKLQkJCQlicmVhazsKLSNpZmRlZiBDT01NRU5U Ci0JCQkgICAgICBjYXNlIDB4MGY6IC8qIEN0cmwtTyAqLwotCQkJICAgICAgY2FzZSAweDE2OiAv KiBDdHJsLVYgKi8KLQkJCQkqcCsrID0gMHgxNjsKLQkJCQkqcCsrID0gYzsKLQkJCQlkZWJ1ZyhG MDAwLCI8PDwgUVVPVCIsIiIsYyk7Ci0JCQkJYnJlYWs7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwot CQkJICAgICAgY2FzZSAweGZmOiAvKiBJQUMgKi8KLQkJCQlpZiAoaW5fc3RhdGUgPT0gSEFWRV9J QUMpIHsKLQkJCQkgICAgZGVidWcoRjAwMCwiPDw8IEtFRVAiLCIiLGMpOwotCQkJCSAgICAqcCsr ID0gYzsKLQkJCQkgICAgaW5fc3RhdGUgPSAwOwotCQkJCX0gZWxzZSB7Ci0JCQkJICAgIGRlYnVn KEYwMDAsIjw8PCBTS0lQIiwiIixjKTsKLQkJCQkgICAgaW5fc3RhdGUgPSBIQVZFX0lBQzsKLQkJ CQl9Ci0JCQkJYnJlYWs7Ci0JCQkgICAgICBkZWZhdWx0OgkvKiBBbGwgb3RoZXJzICovCi0JCQkJ aWYgKGluX3N0YXRlID09IEhBVkVfSUFDKSB7Ci0jaWZkZWYgQ09NTUVOVAotLyoKLSAgdG5fZG9v cCgpIHdpbGwgY29uc3VtZSBhbiB1bmtub3duIG51bWJlciBvZiBieXRlcyBhbmQgd2UnbGwgb3Zl cnNob290Ci0gIHRoZSBmb3ItbG9vcC4gIFRoZSBvbmx5IFRlbG5ldCBjb21tYW5kIEkndmUgZXZl ciBzZWVuIGFycml2ZSBoZXJlIGlzCi0gIGEgRGF0YSBNYXJrLCB3aGljaCBjb21lcyB3aGVuIHRo ZSByZW1vdGUgcHJvdG9jb2wgZXhpdHMgYW5kIHRoZSByZW1vdGUKLSAgam9iIHJldHVybnMgdG8g aXRzIHNoZWxsIHByb21wdC4gIE9uIHRoZSBhc3N1bXB0aW9uIGl0J3MgYSAxLWJ5dGUgY29tbWFu ZCwKLSAgd2UgZG9uJ3Qgd3JpdGUgb3V0IHRoZSBJQUMgb3IgdGhlIGNvbW1hbmQsIGFuZCB3ZSBj bGVhciB0aGUgc3RhdGUuICBJZgotICB3ZSBjYWxsZWQgdG5fZG9vcCgpIHdlJ2QgaGF2ZSBubyB3 YXkgb2Yga25vd2luZyBob3cgbWFueSBieXRlcyBpdCB0b29rCi0gIGZyb20gdGhlIGlucHV0IHN0 cmVhbS4KLSovCi0JCQkJICAgIGludCB4eDsKLQkJCQkgICAgeHggPSB0bl9kb29wKChDSEFSKWMs ZHVwbGV4LHR0aW5jKTsKLQkJCQkgICAgZGVidWcoRjExMSwiPDw8IERPT1AiLGNrY3RvYShjKSx4 eCk7Ci0jZWxzZQotCQkJCSAgICBkZWJ1ZyhGMTAxLCI8PDwgRE9PUCIsIiIsYyk7Ci0jZW5kaWYJ LyogQ09NTUVOVCAqLwotCQkJCSAgICBpbl9zdGF0ZSA9IDA7Ci0JCQkJfSBlbHNlIHsKLQkJCQkg ICAgKnArKyA9IGM7Ci0JCQkJICAgIGRlYnVnKEYwMDAsIjw8PCBrZWVwIiwiIixjKTsKLQkJCQkg ICAgaW5fc3RhdGUgPSAwOwotCQkJCX0KLQkJCSAgICB9Ci0jZW5kaWYJLyogVE5DT0RFICovCi0J CQl9Ci0JCSAgICB9Ci0JCSAgICBja21ha21zZyhtc2didWYsNTAwLAotCQkJICAgICAidHRwdHlj bWQgcmVhZCBuZXQgW3R0aW5jIGxvb3BdIGVycm5vPSIsCi0JCQkgICAgIGNraXRvYShlcnJubyks Ci0JCQkgICAgICIgY291bnQ9IiwKLQkJCSAgICAgY2tpdG9hKHgpKTsKLQkJICAgIGRlYnVnKEYx MDAsbXNnYnVmLCIiLDApOwotCQl9IGVsc2UgewotCQkgICAgeCA9IHR0eGluKG4sdGJ1Zit0YnVm X2F2YWlsKTsKLQkJICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIHR0eGluIHgiLCIiLHgpOyAKLQkJ fQotCi0JCWlmICh4IDwgMCkgewotCQkgICAgZGVidWcoRjEwMSwidHRwdHljbWQgcmVhZCBuZXQg ZXJyb3IiLCIiLHgpOwotCQkgICAgbmV0X2VycisrOwotCQl9Ci0JCXRidWZfYXZhaWwgKz0geDsK LQkJcmVhZF9uZXRfYnl0ZXMgKz0geDsKLQkgICAgfQotCi0JfSBlbHNlCi0JICB0bm90c2V0Kys7 Ci0KLQlpZiAoRkRfSVNTRVQocHR5ZmQsICZpbikpIHsJLyogUmVhZCBmcm9tIHB0eT8gKi8KLQkg ICAgcHNldCsrOwotCSAgICBkZWJ1ZyhGMTAwLCJ0dHB0eWNtZCBGRF9JU1NFVCBwdHlmZCBpbiIs IiIsMCk7Ci0jaWZkZWYgUFRZX1VTRV9OREVMQVkKLQkgICAgbiA9IFBUWV9QQlVGX1NJWkU7Ci0j ZWxzZQotCSAgICAvKgotCSAgICAgIFRoaXMgZG9lcyBub3Qgd29yayBvbiBub25ibG9ja2luZyBj aGFubmVscwotCSAgICAgIG9uIGNlcnRhaW4gcGxhdGZvcm1zIHN1Y2ggYXMgTmV0QlNELgotCSAg ICAqLwotCSAgICBuID0gcHR5X2NoayhwdHlmZCk7Ci0jZW5kaWYgLyogUFRZX1VTRV9OREVMQVkg Ki8KLQkgICAgZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2NoaygpIG4iLCIiLG4pOyAKLQotCSAg ICBpZiAobiA8IDApCi0JICAgICAgbiA9IDA7Ci0JICAgIGlmIChuID4gMCkgewotCQlpZiAobiA+ IFBUWV9QQlVGX1NJWkUgLSBwYnVmX2F2YWlsKQotCQkgIG4gPSBQVFlfUEJVRl9TSVpFIC0gcGJ1 Zl9hdmFpbDsKLQkJZGVidWcoRjEwMSwidHRwdHljbWQgcHR5IHJlYWQgc2l6ZSBhZGp1c3RlZCIs IiIsbik7IAotCQllcnJubyA9IDA7Ci0JCXggPSByZWFkKHB0eWZkLHBidWYrcGJ1Zl9hdmFpbCxu KTsKLSNpZmRlZiBERUJVRwotCQlpZiAoZGVibG9nKSB7Ci0JCSAgICBja21ha21zZyhtc2didWYs NTAwLAotCQkJICAgICAidHRwdHljbWQgcmVhZCBwdHkgZXJybm89IiwKLQkJCSAgICAgY2tpdG9h KGVycm5vKSwKLQkJCSAgICAgIiBjb3VudD0iLAotCQkJICAgICBja2l0b2EoeCkpOwotCQkgICAg ZGVidWcoRjEwMCxtc2didWYsIiIsMCk7Ci0JCX0KLSNlbmRpZgkvKiBERUJVRyAqLwotCi0JCWlm ICh4IDwgMCAmJiBlcnJubyA9PSBFQUdBSU4pCi0JCSAgeCA9IDA7Ci0KLQkJaWYgKHggPCAwKSB7 CQkvKiBUaGlzIHdvcmtzIG9uIFNvbGFyaXMgYW5kIExpbnV4ICovCi0JCSAgICBwdHlfZXJyKys7 CQkvKiBidXQgbm90IE5ldEJTRCAqLwotCQkgICAgZGVidWcoRjEwMCwiVEVSTUlOQVRJT04gVEVT VCBBIiwiIiwwKTsKLSNpZmRlZiBDT01NRU5UCi0JCSAgICBpZiAoZXJybm8gPT0gRUlPKQotCQkg ICAgICByYyA9IDE7Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwotCQkgICAgaWYgKHBleGl0c3RhdCA8 IDApIHsKLQkJCXN0YXR1cyA9IHB0eV9nZXRfc3RhdHVzKHB0eWZkLHB0eV9mb3JrX3BpZCk7Ci0J CQlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBwdHlfZ2V0X3N0YXR1cyBDIiwiIixzdGF0dXMpOwotCQkJ aWYgKHN0YXR1cyA+IC0xKSBwZXhpdHN0YXQgPSBzdGF0dXM7Ci0JCSAgICB9Ci0JCSAgICBoYXZl X3B0eSA9IDA7Ci0JCSAgICB4ID0gMDsKLQkJfQotCQlpZiAoeCA9PSAwICYmICFwdHlfZXJyKSB7 IC8qIFRoaXMgd29ya3Mgb24gTmV0QlNEIGJ1dCAqLwotCQkgICAgZGVidWcoRjEwMCwiVEVSTUlO QVRJT04gVEVTVCBCIiwiIiwwKTsKLQkJICAgIHN0YXR1cyA9IHBleGl0c3RhdCA+IC0xID8gcGV4 aXRzdGF0IDoKLQkJCXB0eV9nZXRfc3RhdHVzKHB0eWZkLHB0eV9mb3JrX3BpZCk7Ci0JCSAgICBk ZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBwdHlfZ2V0X3N0YXR1cyBEIiwiIixzdGF0dXMpOwotCQkgICAg aWYgKHN0YXR1cyA+IC0xKSB7Ci0JCQlwZXhpdHN0YXQgPSBzdGF0dXM7Ci0JCQlwdHlfZXJyKys7 Ci0JCQloYXZlX3B0eSA9IDA7Ci0JCSAgICB9IGVsc2UgewkJLyogU2VsZWN0KCkgbGllZCAqLwot CQkJcHR5X2VyciA9IDA7CS8qIHB0eSBzdGlsbCB0aGVyZSBidXQgaGFzIG5vdGhpbmcgKi8KLQkJ CW1zbGVlcCgxMDApOwkvKiBzbGVlcCBhIGJpdCAqLwotCQkgICAgfQotCQkgICAgeCA9IDA7Ci0J CX0gCi0JCS8qIEhvcGVmdWxseSB0aGUgbmV4dCB0d28gYXJlIG5vIGxvbmdlciBuZWVkZWQuLi4g Ki8KLQkJaWYgKCFwdHlfZXJyICYmICgKLSNpZm5kZWYgUFRZX1VTRV9OREVMQVkKLQkJICAgIHgg PCAxIHx8IGVycm5vCi0jZWxzZQotCQkgICAgZXJybm8gIT0gMCAmJiBlcnJubyAhPSBFQUdBSU4K LSNlbmRpZiAvKiBQVFlfVVNFX05ERUxBWSAqLwotCQkgICAgKSkgewotCQkgICAgZGVidWcoRjEw MCwiVEVSTUlOQVRJT04gVEVTVCBDIiwiIiwwKTsKLQkJICAgIHB0eV9lcnIrKzsKLQkJICAgIGRl YnVnKEYxMDEsInR0cHR5Y21kIFNFVCBwdHlfZXJyIiwiIixwdHlfZXJyKTsKLQkJICAgIGlmIChl cnJubyA9PSBFSU8pCS8qIGVycm5vID09IEVJTyBpcyBsaWtlIEVPRiAqLwotCQkgICAgICByYyA9 IDE7Ci0JCSAgICBpZiAoeCA8IDApCi0JCSAgICAgIHggPSAwOwotCQl9Ci0jaWZkZWYgQ09NTUVO VAotI2lmZGVmIERFQlVHCi0JCWlmIChkZWJsb2cpIHsKLQkJICAgIHBidWZbcGJ1Zl9hdmFpbCAr IHhdID0gJ1wwJzsKLQkJICAgIGRlYnVnKEYxMTEsInR0cHR5Y21kIGFkZGVkIHRvIHB0eSBidWZm ZXIiLAotCQkJICBwYnVmK3BidWZfYXZhaWwseCk7Ci0JCX0KLSNlbmRpZgkvKiBERUJVRyAqLwot I2VuZGlmCS8qIENPTU1FTlQgKi8KLQkJcGJ1Zl9hdmFpbCArPSB4OwotCQlyZWFkX3B0eV9ieXRl cyArPSB4OwotCSAgICB9IGVsc2UgewkJCS8qIG4gPT0gMCB3aXRoIGJsb2NraW5nIHJlYWRzICov Ci0JCWRlYnVnKEYxMDAsCi0JCSAgICAgICJQVFkgUkVBRCBSRVRVUk5FRCBaRVJPIEJZVEVTIC0g U0hPVUxEIE5PVCBIQVBQRU4iLAotCQkgICAgICAiIiwwKTsKLQkgICAgfQotCX0gZWxzZQotCSAg cG5vdHNldCsrOwotCi0JLyogSWYgd3JpdGVzIGhhdmUgY2F1Z2h0IHVwIHRvIHJlYWRzLCByZXNl dCB0aGUgYnVmZmVycyAqLwotCi0JaWYgKHBidWZfd3JpdHRlbiA9PSBwYnVmX2F2YWlsKQotCSAg cGJ1Zl93cml0dGVuID0gcGJ1Zl9hdmFpbCA9IDA7Ci0JaWYgKHRidWZfd3JpdHRlbiA9PSB0YnVm X2F2YWlsKQotCSAgdGJ1Zl93cml0dGVuID0gdGJ1Zl9hdmFpbCA9IDA7Ci0KLQkvKiBTZWUgaWYg d2UgY2FuIGV4aXQgKi8KLQotCXgxID0gcGJ1Zl9hdmFpbCAtIHBidWZfd3JpdHRlbjsgCi0JeDIg PSB0YnVmX2F2YWlsIC0gdGJ1Zl93cml0dGVuOwotCi0JZGVidWcoRjEwMSwidHRwdHljbWQgcHR5 X2VyciBMT09QIEVYSVQgVEVTVCBwdHlfZXJyIiwiIixwdHlfZXJyKTsKLQlkZWJ1ZyhGMTAxLCJ0 dHB0eWNtZCBwdHlfZXJyIExPT1AgRVhJVCBURVNUIHgxIFt3cml0ZSB0byBuZXRdIiwiIix4MSk7 Ci0JZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2VyciBMT09QIEVYSVQgVEVTVCB4MiBbd3JpdGUg dG8gcHR5XSIsIiIseDIpOwotCWRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eV9lcnIgTE9PUCBFWElU IFRFU1QgcmMiLCIiLHJjKTsKLQlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBwdHlfZXJyIExPT1AgRVhJ VCBURVNUIHN0YXR1cyIsIiIsc3RhdHVzKTsKLQlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBwdHlfZXJy IExPT1AgRVhJVCBURVNUIHBleGl0c3RhdCIsIiIscGV4aXRzdGF0KTsKLQotCWlmIChuZXRfZXJy KSB7CQkJLyogTmV0IGVycm9yPyAqLwotCSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBuZXRfZXJy IExPT1AgRVhJVCBURVNUIG5ldF9lcnIiLCIiLG5ldF9lcnIpOwotCSAgICBpZiAoaGF2ZV9uZXQp IHsKLQkJaWYgKGxvY2FsKSB7Ci0JCSAgICB0dGNsb3MoMCk7Ci0JCSAgICBwcmludGYoIj9Db25u ZWN0aW9uIGNsb3NlZFxuIik7Ci0JCX0KLQkJaGF2ZV9uZXQgPSAwOwotCSAgICB9Ci0JICAgIGRl YnVnKEYxMDEsInR0cHR5Y21kIG5ldF9lcnIgTE9PUCBFWElUIFRFU1QgeDEiLCIiLHgxKTsKLQkg ICAgaWYgKHgxID09IDApCi0JICAgICAgYnJlYWs7Ci0JfQotCWlmIChwdHlfZXJyKSB7CQkJLyog UHR5IGVycm9yPyAqLwotCSAgICBpZiAoaGF2ZV9wdHkpIHsKLQkJaWYgKHBleGl0c3RhdCA8IDAp IHsJCQotCQkgICAgc3RhdHVzID0gcHR5X2dldF9zdGF0dXMocHR5ZmQscHR5X2ZvcmtfcGlkKTsK LQkJICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eV9nZXRfc3RhdHVzIEUiLCIiLHN0YXR1cyk7 Ci0JCSAgICBpZiAoc3RhdHVzID4gLTEpIHBleGl0c3RhdCA9IHN0YXR1czsKLQkJfQotCQloYXZl X3B0eSA9IDA7Ci0JICAgIH0KLQkgICAgaWYgKHgxID09IDAgJiYgeDIgPT0gMCkgewkvKiBJZiBi dWZmZXJzIGFyZSBjYXVnaHQgdXAgKi8KLQkJcmMgPSAxOwkJCS8qIHNldCBwcmVsaW1pbmFyeSBy ZXR1cm4gdG8gc3VjY2VzcyAqLwotCQlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBwdHlfZXJyIExPT1Ag RVhJVCBURVNUIHJjIDIiLCIiLHJjKTsKLQkJYnJlYWs7CQkJLyogYW5kIGV4aXQgdGhlIGxvb3Ag Ki8KLQkgICAgfQotCX0KLSAgICB9Ci0gICAgZGVidWcoRjEwMSwidHRwdHljbWQgKysrIGhhdmVf cHR5IiwiIixoYXZlX3B0eSk7Ci0gICAgaWYgKGhhdmVfcHR5KSB7CQkJLyogSW4gY2FzZSBzZWxl Y3QoKSBmYWlsZWQgKi8KLSNpZmRlZiBVU0VfQ0tVUFRZX0MKLQllbmRfcHR5KCk7Ci0JY2xvc2Uo cHR5ZmQpOwotI2Vsc2UKLQljbG9zZShzbGF2ZWZkKTsKLQljbG9zZShtYXN0ZXJmZCk7Ci0jZW5k aWYgLyogVVNFX0NLVVBUWV9DICovCi0gICAgfQotICAgIHB0eV9tYXN0ZXJfZmQgPSAtMTsKLSAg ICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCArKysgcGV4aXRzdGF0IiwiIixwZXhpdHN0YXQpOwotICAg IGlmIChwZXhpdHN0YXQgPCAwKSB7CQkvKiBUcnkgb25lIGxhc3QgdGltZSB0byBnZXQgc3RhdHVz ICovCi0Jc3RhdHVzID0gcHR5X2dldF9zdGF0dXMocHR5ZmQscHR5X2ZvcmtfcGlkKTsKLQlkZWJ1 ZyhGMTAxLCJ0dHB0eWNtZCBwdHlfZ2V0X3N0YXR1cyBGIiwiIixzdGF0dXMpOwotCWlmIChzdGF0 dXMgPiAtMSkgcGV4aXRzdGF0ID0gc3RhdHVzOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJ0dHB0 eWNtZCArKysgZmluYWwgcGV4aXRzdGF0IiwiIixwZXhpdHN0YXQpOwotICAgIGlmIChkZWJsb2cp IHsJCQkvKiBTdGF0cyBmb3IgZGVidWcgbG9nICovCi0JZGVidWcoRjEwMSwidHRwdHljbWQgKysr IHBzZXQJIiwiIixwc2V0KTsKLQlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCArKysgcG5vdHNldCIsIiIs cG5vdHNldCk7Ci0JZGVidWcoRjEwMSwidHRwdHljbWQgKysrIHRzZXQJIiwiIix0c2V0KTsKLQlk ZWJ1ZyhGMTAxLCJ0dHB0eWNtZCArKysgdG5vdHNldCIsIiIsdG5vdHNldCk7Ci0KLQlkZWJ1ZyhG MTAxLCJ0dHB0eWNtZCArKysgIHJlYWRfcHR5X2J5dGVzIiwiIixyZWFkX3B0eV9ieXRlcyk7Ci0J ZGVidWcoRjEwMSwidHRwdHljbWQgKysrIHdyaXRlX25ldF9ieXRlcyIsIiIsd3JpdGVfbmV0X2J5 dGVzKTsKLQlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCArKysgIHJlYWRfbmV0X2J5dGVzIiwiIixyZWFk X25ldF9ieXRlcyk7Ci0JZGVidWcoRjEwMSwidHRwdHljbWQgKysrIHdyaXRlX3B0eV9ieXRlcyIs IiIsd3JpdGVfcHR5X2J5dGVzKTsKLSAgICB9Ci0vKgotICBJZiB3ZSBnb3QgdGhlIGV4dGVybmFs IHByb3RvY29sJ3MgZXhpdCBzdGF0dXMgZnJvbSB3YWl0cGlkKCksIHdlIHVzZSB0aGF0Ci0gIHRv IHNldCBvdXIgcmV0dXJuIGNvZGUuICBJZiBub3QsIHdlIGZhbGwgYmFjayBvbiB3aGF0ZXZlciBy YyB3YXMgcHJldmlvdXNseQotICBzZXQgdG8sIG5hbWVseSAxIChzdWNjZXNzKSBpZiB0aGUgcHR5 IGZvcmsgc2VlbWVkIHRvIHRlcm1pbmF0ZSwgMCBvdGhlcndpc2UuCi0qLwotICAgIGlmIChzYXZl X3NpZ2NobGQpIHsJCQkvKiBSZXN0b3JlIHRoaXMgaWYgd2UgY2hhbmdlZCBpdCAqLwotCShWT0lE KSBzaWduYWwoU0lHQ0hMRCxzYXZlX3NpZ2NobGQpOwotCXNhdmVfc2lnY2hsZCA9IE5VTEw7Ci0g ICAgfQotICAgIG1zbGVlcCg1MDApOwotICAgIHggPSBraWxsKHB0eV9mb3JrX3BpZCxTSUdIVVAp OwkvKiBJbiBjYXNlIGl0J3Mgc3RpbGwgdGhlcmUgKi8KLSAgICBwdHlfZm9ya19waWQgPSAtMTsK LSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBmb3JrIGtpbGwgU0lHSFVQIiwiIix4KTsKLSAgICBp ZiAocGV4aXRzdGF0ID4gLTEpCi0gICAgICByYyA9IChwZXhpdHN0YXQgPT0gMCA/IDEgOiAwKTsK LSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCArKysgcmMiLCIiLHJjKTsKLSAgICBpZiAoIWxvY2Fs KSB7CQkJLyogSWYgaW4gcmVtb3RlIG1vZGUgKi8KLQljb25yZXMoKTsJCQkvKiByZXN0b3JlIGNv bnNvbGUgdG8gQ0JSRUFLIG1vZGUgKi8KLQljb25jYigoY2hhcillc2NjaHIpOwotICAgIH0KLSAg ICByZXR1cm4ocmMpOwotfQotI2VuZGlmCS8qIE5FVFBUWSAqLwotI2VuZGlmCS8qIFNFTEVDVCAq LwotCi0vKiBUIFQgUiBVIE4gQyBNIEQgIC0tICBSZWRpcmVjdCBhbiBleHRlcm5hbCBjb21tYW5k IG92ZXIgdGhlIGNvbm5lY3Rpb24uICovCi0KLS8qCi0gIFRUUlVOQ01EIGlzIHRoZSByb3V0aW5l IHRoYXQgd2FzIG9yaWdpbmFsbHkgdXNlZCBmb3IgcnVubmluZyBleHRlcm5hbAotICBwcm90b2Nv bHMuICBJdCBpcyB2ZXJ5IHNpbXBsZSBhbmQgd29ya3MgZmluZSBwcm92aWRlZCAoYSkgdGhlIGNv bm5lY3Rpb24KLSAgaXMgbm90IGVuY3J5cHRlZCwgYW5kIChiKSB0aGUgZXh0ZXJuYWwgcHJvdG9j b2wgdXNlcyBzdGFuZGFyZCBpL28KLSAgKGZpbGUgZGVzY3JpcHRvcnMgMCBhbmQgMSkgZm9yIGZp bGUgdHJhbnNmZXIuCi0qLwotCi1pbnQKLXR0cnVuY21kKHMpIGNoYXIgKnM7IHsKLSAgICBQSURf VCBwaWQ7CQkJCS8qIHBpZCBvZiBsb3dlciBmb3JrICovCi0gICAgaW50IHdzdGF0OwkJCQkvKiBm b3Igd2FpdCgpICovCi0gICAgaW50IHg7Ci0gICAgaW50IHN0YXR1c3A7Ci0KLSAgICBpZiAodHR5 ZmQgPT0gLTEpIHsKLQlwcmludGYoIj9Tb3JyeSwgZGV2aWNlIGlzIG5vdCBvcGVuXG4iKTsKLQly ZXR1cm4oMCk7Ci0gICAgfQotICAgIGlmIChub3B1c2gpIHsKLQlkZWJ1ZyhGMTAwLCJ0dHJ1bmNt ZCBmYWlsOiBub3B1c2giLCIiLDApOwotCXJldHVybigwKTsKLSAgICB9Ci0KLSNpZmRlZiBORVRQ VFkKLS8qKioqKioqKioqKioqKioKLSAgSXQgbWlnaHQgYWxzbyBiZSBuZWNlc3NhcnkgdG8gdXNl IHRoZSBwdHkgcm91dGluZSBmb3Igb3RoZXIgcmVhc29ucywKLSAgZS5nLiBiZWNhdXNlIHRoZSBl eHRlcm5hbCBwcm9ncmFtIGRvZXMgbm90IHVzZSBzdGRpby4KLSovCi0jaWZkZWYgTkVUQ09OTgot LyoKLSAgSWYgd2UgaGF2ZSBhIG5ldHdvcmsgY29ubmVjdGlvbiB3ZSB1c2UgYSBkaWZmZXJlbnQg cm91dGluZSBiZWNhdXNlCi0gIChhKSBpZiB0aGUgY29ubmVjdGlvbiBpcyBlbmNyeXB0ZWQsIHRo ZSBtZWNoYW5pc20gdXNlZCBoZXJlIGNhbid0IGRlYWwKLSAgd2l0aCBpdDsgYW5kIChiKSBpdCB3 b24ndCBoYW5kbGUgYW55IG5ldHdvcmsgcHJvdG9jb2xzIGVpdGhlciwgZS5nLgotICBUZWxuZXQs IFJsb2dpbiwgSzUgVS10by1VLCBldGMuICBIb3dldmVyLCB0aGlzIHJvdXRpbmUgd29ya3MgbXVj aAotICBiZXR0ZXIgKGZhc3RlciwgbW9yZSB0cmFuc3BhcmVudCkgb24gc2VyaWFsIGNvbm5lY3Rp b25zIGFuZCB3aGVuCi0gIEMtS2VybWl0IGlzIGluIHJlbW90ZSBtb2RlIChpLmUuIGlzIG9uIHRo ZSBmYXIgZW5kKS4KLSovCi0gICAgLyogRm9yIHRlc3RpbmcgYWx3YXlzIHVzZSB0aGlzICovCi0g ICAgaWYgKG5ldGNvbm4pCi0gICAgICByZXR1cm4odHRwdHljbWQocykpOwotI2VuZGlmIC8qIE5F VENPTk4gKi8KLQotLyoqKioqKioqKioqKioqKi8KLSNlbHNlICAvKiBORVRQVFkgKi8KLSAgICBp ZiAodHRfaXNfc2VjdXJlKCkpIHsKLQlwcmludGYoIj9Tb3JyeSwgXAotZXh0ZXJuYWwgcHJvdG9j b2xzIG92ZXIgc2VjdXJlIGNvbm5lY3Rpb25zIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBPUy5cbiIK LSAgICAgICAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZgkvKiBO RVRQVFkgKi8KLQotICAgIGNvbnJlcygpOwkJCQkvKiBNYWtlIGNvbnNvbGUgbm9ybWFsICAqLwot ICAgIHBleGl0c3RhdCA9IC00OwotICAgIGlmICgocGlkID0gZm9yaygpKSA9PSAwKSB7CQkvKiBN YWtlIGEgY2hpbGQgZm9yayAqLwotCWlmIChwcml2X2NhbigpKQkJCS8qIENoaWxkOiB0dXJuIG9m ZiBwcml2cy4gKi8KLQkgIGV4aXQoMSk7Ci0JZHVwMih0dHlmZCwgMCk7CQkJLyogR2l2ZSBzdGRp bi9vdXQgdG8gdGhlIGxpbmUgKi8KLQlkdXAyKHR0eWZkLCAxKTsKLQl4ID0gc3lzdGVtKHMpOwot CWRlYnVnKEYxMDEsInR0cnVuY21kIHN5c3RlbSIscyx4KTsKLQlfZXhpdCh4ID8gQkFEX0VYSVQg OiAwKTsKLSAgICB9IGVsc2UgewotCVNJR1RZUCAoKmlzdGF0KSgpLCAoKnFzdGF0KSgpOwotCWlm IChwaWQgPT0gKFBJRF9UKSAtMSkJCS8qIGZvcmsoKSBmYWlsZWQ/ICovCi0JICByZXR1cm4oMCk7 Ci0JaXN0YXQgPSBzaWduYWwoU0lHSU5ULFNJR19JR04pOyAvKiBMZXQgdGhlIGZvcmsgaGFuZGxl IGtleWJvYXJkICovCi0JcXN0YXQgPSBzaWduYWwoU0lHUVVJVCxTSUdfSUdOKTsgLyogaW50ZXJy dXB0cyBpdHNlbGYuLi4gKi8KLQotI2lmZGVmIENPTU1FTlQKLSAgICAJd2hpbGUgKCgod3N0YXQg PSB3YWl0KCZzdGF0dXNwKSkgIT0gcGlkKSAmJiAod3N0YXQgIT0gLTEpKSA7Ci0jZWxzZSAgLyog Tm90IENPTU1FTlQgKi8KLSAgICAJd2hpbGUgKDEpIHsKLQkgICAgd3N0YXQgPSB3YWl0KCZzdGF0 dXNwKTsKLQkgICAgZGVidWcoRjEwMSwidHRydW5jbWQgd2FpdCIsIiIsd3N0YXQpOwotCSAgICBp ZiAod3N0YXQgPT0gcGlkIHx8IHdzdGF0ID09IC0xKQotCSAgICAgIGJyZWFrOwotCX0KLSNlbmRp ZiAvKiBDT01NRU5UICovCi0KLQlwZXhpdHN0YXQgPSAoc3RhdHVzcCAmIDB4ZmYpID8gc3RhdHVz cCA6IHN0YXR1c3AgPj4gODsKLQlkZWJ1ZyhGMTAxLCJ0dHJ1bmNtZCB3YWl0IHN0YXR1c3AiLCIi LHN0YXR1c3ApOwotCWRlYnVnKEYxMDEsInR0cnVuY21kIHdhaXQgcGV4aXRzdGF0IiwiIixwZXhp dHN0YXQpOwotCXNpZ25hbChTSUdJTlQsaXN0YXQpOwkJLyogUmVzdG9yZSBpbnRlcnJ1cHRzICov Ci0Jc2lnbmFsKFNJR1FVSVQscXN0YXQpOwotICAgIH0KLSAgICBjb25jYigoY2hhcillc2NjaHIp OwkJLyogUmVzdG9yZSBjb25zb2xlIHRvIENCUkVBSyBtb2RlICovCi0gICAgcmV0dXJuKHN0YXR1 c3AgPT0gMCA/IDEgOiAwKTsKLX0KLSNlbmRpZgkvKiBDS19SRURJUiAqLwotCi1zdHJ1Y3QgdG0g KgotI2lmZGVmIENLX0FOU0lDCi1jbWRhdGUydG0oY2hhciAqIGRhdGUsIGludCBnbXQpICAgICAg ICAgLyogZGF0ZSBhcyAieXl5eW1tZGQgaGg6bW06c3MiICovCi0jZWxzZQotY21kYXRlMnRtKGRh dGUsZ210KSBjaGFyICogZGF0ZTsgaW50IGdtdDsKLSNlbmRpZgotewotICAgIC8qIGRhdGUgYXMg Inl5eXltbWRkIGhoOm1tOnNzIiAqLwotICAgIHN0YXRpYyBzdHJ1Y3QgdG0gX3RtOwotICAgIHRp bWVfdCBub3c7Ci0KLSAgICBpZiAoc3RybGVuKGRhdGUpICE9IDE3IHx8Ci0JZGF0ZVs4XSAhPSAn ICcgfHwKLQlkYXRlWzExXSAhPSAnOicgfHwKLQlkYXRlWzE0XSAhPSAnOicpCi0gICAgICByZXR1 cm4oTlVMTCk7Ci0KLSAgICB0aW1lKCZub3cpOwotICAgIGlmIChnbXQpCi0gICAgICBfdG0gPSAq Z210aW1lKCZub3cpOwotICAgIGVsc2UKLSAgICAgIF90bSA9ICpsb2NhbHRpbWUoJm5vdyk7Ci0g ICAgX3RtLnRtX3llYXIgPSAoZGF0ZVswXS0nMCcpKjEwMDAgKyAoZGF0ZVsxXS0nMCcpKjEwMCAr Ci0gICAgICAgICAgICAgICAgICAoZGF0ZVsyXS0nMCcpKjEwICAgKyAoZGF0ZVszXS0nMCcpLTE5 MDA7Ci0gICAgX3RtLnRtX21vbiAgPSAoZGF0ZVs0XS0nMCcpKjEwICAgKyAoZGF0ZVs1XS0nMCcp LTE7Ci0gICAgX3RtLnRtX21kYXkgPSAoZGF0ZVs2XS0nMCcpKjEwICAgKyAoZGF0ZVs3XS0nMCcp OwotICAgIF90bS50bV9ob3VyID0gKGRhdGVbOV0tJzAnKSoxMCAgICsgKGRhdGVbMTBdLScwJyk7 Ci0gICAgX3RtLnRtX21pbiAgPSAoZGF0ZVsxMl0tJzAnKSoxMCAgKyAoZGF0ZVsxM10tJzAnKTsK LSAgICBfdG0udG1fc2VjICA9IChkYXRlWzE1XS0nMCcpKjEwICArIChkYXRlWzE2XS0nMCcpOwot Ci0gICAgLyogU2hvdWxkIHdlIHNldCBfdG0udG1faXNkc3QgdG8gLTEgaGVyZT8gKi8KLQotICAg IF90bS50bV93ZGF5ID0gMDsKLSAgICBfdG0udG1feWRheSA9IDA7Ci0KLSAgICByZXR1cm4oJl90 bSk7Ci19Ci0KLSNpZmRlZiBPWE9TCi0jdW5kZWYga2lsbAotI2VuZGlmIC8qIE9YT1MgKi8KLQot I2lmZGVmIE9YT1MKLWludAotcHJpdl9raWxsKHBpZCwgc2lnKSBpbnQgcGlkLCBzaWc7IHsKLSAg ICBpbnQJaTsKLQotICAgIGlmIChwcml2X29uKCkpCi0JZGVidWcoRjEwMCwicHJpdl9raWxsIHBy aXZfb24gZmFpbGVkIiwiIiwwKTsKLSAgICBpID0ga2lsbChwaWQsIHNpZyk7Ci0gICAgaWYgKHBy aXZfb2ZmKCkpCi0JZGVidWcoRjEwMCwicHJpdl9raWxsIHByaXZfb2ZmIGZhaWxlZCIsIiIsMCk7 Ci0gICAgcmV0dXJuKGkpOwotfQotI2VuZGlmIC8qIE9YT1MgKi8KLQotI2lmZGVmIEJFT1NPUkJF Qk9YCi0vKiAjaWZkZWYgQkVfRFJfNyAqLwotLyoKLSAgYWxhcm0oKSBmdW5jdGlvbiBub3Qgc3Vw cGxpZWQgd2l0aCBCZSBPUyBEUjcgLSB0aGlzIG9uZSBjb250cmlidXRlZCBieQotICBOZWFsIFAu IE11cnBoeS4KLSovCi0KLS8qCi0gIFRoaXMgc2hvdWxkIG1pbWljIHRoZSBVTklYL1BPU0lYIGFs YXJtKCkgZnVuY3Rpb24gd2VsbCBlbm91Z2gsIHdpdGggdGhlCi0gIGNhdmVhdCB0aGF0IG9uZSdz IFNJR0FMUk0gaGFuZGxlciBtdXN0IGNhbGwgYWxhcm1fZXhwaXJlZCgpIHRvIGNsZWFuIHVwIHZh cnMKLSAgYW5kIHdhaXQgZm9yIHRoZSBhbGFybSB0aHJlYWQgdG8gZmluaXNoLgotKi8KLXVuc2ln bmVkIGludAotYWxhcm0odW5zaWduZWQgaW50IHNlY29uZHMpIHsKLSAgICBsb25nIHRpbWVfbGVm dCA9IDA7Ci0KLS8qIElmIGFuIGFsYXJtIGlzIGFjdGl2ZSwgdHVybiBpdCBvZmYsIHNhdmluZyB0 aGUgdW51c2VkIHRpbWUgKi8KLSAgICBpZiAoYWxhcm1fdGhyZWFkICE9IC0xKSB7Ci0gICAgICAg IC8qIFdlJ2xsIGJlIGdlbmVyb3VzIGFuZCBjb3VudCBwYXJ0aWFsIHNlY29uZHMgYXMgd2hvbGUg c2Vjb25kcy4gKi8KLSAgICAgICAgdGltZV9sZWZ0ID0gYWxhcm1fc3RydWN0LnRpbWUgLQotCSAg KChzeXN0ZW1fdGltZSgpIC0gdGltZV9zdGFydGVkKSAvIDEwMDAwMDAuMCk7Ci0KLSAgICAgICAg LyogS2lsbCB0aGUgYWxhcm0gdGhyZWFkICovCi0gICAgICAgIGtpbGxfdGhyZWFkIChhbGFybV90 aHJlYWQpOwotCi0gICAgICAgIC8qIFdlIG5lZWQgdG8gY2xlYW4gdXAgYXMgdGhvdWdoIHRoZSBh bGFybSBvY2N1cmVkLiAqLwotICAgICAgICB0aW1lX3N0YXJ0ZWQgPSAwOwotICAgICAgICBhbGFy bV9zdHJ1Y3QudGhyZWFkID0gLTE7Ci0gICAgICAgIGFsYXJtX3N0cnVjdC50aW1lID0gMDsKLSAg ICAgICAgYWxhcm1fZXhwaXJlZCgpOwotICAgIH0KLQotLyogU2V0IGEgbmV3IGFsYXJtIGNsb2Nr LCBpZiByZXF1ZXN0ZWQuICovCi0gICAgaWYgKHNlY29uZHMgPiAwKSB7Ci0gICAgICAgIGFsYXJt X3N0cnVjdC50aHJlYWQgPSBmaW5kX3RocmVhZChOVUxMKTsKLSAgICAgICAgYWxhcm1fc3RydWN0 LnRpbWUgPSBzZWNvbmRzOwotICAgICAgICB0aW1lX3N0YXJ0ZWQgPSBzeXN0ZW1fdGltZSgpOwot ICAgICAgICBhbGFybV90aHJlYWQgPSBzcGF3bl90aHJlYWQgKGRvX2FsYXJtLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGFybV90aHJlYWQiLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEJfTk9STUFMX1BSSU9SSVRZLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopICZhbGFybV9zdHJ1Y3QKLQkJCQkgICAg ICk7Ci0gICAgICAgIHJlc3VtZV90aHJlYWQgKGFsYXJtX3RocmVhZCk7Ci0gICAgfQotCi0vKiBO b3cgcmV0dXJuIFt1bnVzZWQgdGltZSB8IDBdICovCi0gICAgcmV0dXJuICgodW5zaWduZWQgaW50 KSB0aW1lX2xlZnQpOwotfQotCi0vKgotICBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBkZXBhcnR1cmUg ZnJvbSBVTklYL1BPU0lYIGFsYXJtIGhhbmRsaW5nLiBJbiB0aGUgY2FzZQotICBvZiBCZSdzIG1p c3NpbmcgYWxhcm0oKSBmdW5jdGlvbiwgdGhpcyBzdHVmZiBuZWVkcyB0byBiZSBkb25lIGluIHRo ZSBTSUdBTFJNCi0gIGhhbmRsZXIuIFdoZW4gQmUgaW1wbGVtZW50cyBhbGFybSgpLCB0aGlzIGZ1 bmN0aW9uIGNhbGwgY2FuIGJlIGVsaW1pbmF0ZWQKLSAgZnJvbSB1c2VyJ3MgU0lHQUxSTSBzaWdu YWwgaGFuZGxlcnMuCi0qLwotCi12b2lkCi1hbGFybV9leHBpcmVkKHZvaWQpIHsKLSAgICBsb25n IHJldF92YWw7Ci0KLSAgICBpZiAoYWxhcm1fdGhyZWFkICE9IC0xKSB7Ci0gICAgICAgIHdhaXRf Zm9yX3RocmVhZCAoYWxhcm1fdGhyZWFkLCAmcmV0X3ZhbCk7Ci0gICAgICAgIGFsYXJtX3RocmVh ZCA9IC0xOwotICAgIH0KLX0KLQotLyoKLSAgVGhpcyBpcyB0aGUgZnVuY3Rpb24gdGhhdCBzbm9v emVzIHRoZSByZXF1aXNpdGUgbnVtYmVyIG9mIHNlY29uZHMgYW5kIHRoZW4KLSAgU0lHQUxSTXMg dGhlIGNhbGxpbmcgdGhyZWFkLiBOb3RlIHRoYXQga2lsbCgpIHdhbnRzIGEgcGlkX3QgYXJnLCB3 aGlsc3QgQmUKLSAgdXNlcyB0aHJlYWRfaWQ7IGN1cnJlbnRseSB0aGV5IGFyZSBib3RoIHR5cGRl ZidlZCBhcyBsb25nLCBidXQgSSdsbCBkbyB0aGUKLSAgY2FzdCBhbnl3YXkuIFRoaXMgZnVuY3Rp b24gaXMgcnVuIGluIGEgc2VwYXJhdGUgdGhyZWFkLgotKi8KLQotbG9uZwotZG9fYWxhcm0gKHZv aWQgKmFsYXJtX3N0cnVjdCkgewotICAgIHNub296ZSAoKGRvdWJsZSkgKChzdHJ1Y3QgQUxBUk1f U1RSVUNUICopIGFsYXJtX3N0cnVjdCktPnRpbWUgKiAxMDAwMDAwLjApOwotICAgIGtpbGwgKChw aWRfdCkoKHN0cnVjdCBBTEFSTV9TVFJVQ1QgKikgYWxhcm1fc3RydWN0KS0+dGhyZWFkLCBTSUdB TFJNKTsKLSAgICB0aW1lX3N0YXJ0ZWQgPSAwOwotICAgICgoc3RydWN0IEFMQVJNX1NUUlVDVCAq KSBhbGFybV9zdHJ1Y3QpLT50aHJlYWQgPSAtMTsKLSAgICAoKHN0cnVjdCBBTEFSTV9TVFJVQ1Qg KikgYWxhcm1fc3RydWN0KS0+dGltZSA9IDA7Ci19Ci0vKiAjZW5kaWYgKi8gLyogQkVfRFJfNyAq LwotI2VuZGlmIC8qIEJFT1NPUkJFQk9YICovCi0KLSNpZmRlZiBQbGFuOQotCi1pbnQKLXA5dHR5 Y3RsKGNoYXIgbGV0dGVyLCBpbnQgbnVtLCBpbnQgcGFyYW0pIHsKLSAgICBjaGFyIGNtZFsyMF07 Ci0gICAgaW50IGxlbjsKLQotICAgIGlmICh0dHljdGxmZCA8IDApCi0gICAgICByZXR1cm4gLTE7 Ci0KLSAgICBjbWRbMF0gPSBsZXR0ZXI7Ci0gICAgaWYgKG51bSkKLSAgICAgIGxlbiA9IHNwcmlu dGYoY21kICsgMSwgIiVkIiwgcGFyYW0pICsgMTsKLSAgICBlbHNlIHsKLQljbWRbMV0gPSBwYXJh bTsKLQlsZW4gPSAyOwotICAgIH0KLSAgICBpZiAod3JpdGUodHR5Y3RsZmQsIGNtZCwgbGVuKSA9 PSBsZW4pIHsKLQljbWRbbGVuXSA9IDA7Ci0JLyogZnByaW50ZihzdGRvdXQsICJ3cm90ZSAnJXMn XG4iLCBjbWQpOyAqLwotCXJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLWlu dAotcDl0dHlwYXJpdHkoY2hhciBsKSB7Ci0gICAgcmV0dXJuIHA5dHR5Y3RsKCdwJywgMCwgbCk7 Ci19Ci0KLWludAotcDl0dGhmbG93KGludCBmbG93LCBpbnQgc3RhdHVzKSB7Ci0gICAgcmV0dXJu IHA5dHR5Y3RsKCdtJywgMSwgc3RhdHVzKTsKLX0KLQotaW50Ci1wOXR0c3NwZChpbnQgY3BzKSB7 Ci0gICAgaWYgKHA5dHR5Y3RsKCdiJywgMSwgY3BzICogMTApIDwgMCkKLSAgICAgIHJldHVybiAt MTsKLSAgICB0dHlsYXN0c3BlZWQgPSBjcHMgKiAxMDsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50 Ci1wOW9wZW50dHljdGwoY2hhciAqdHRuYW1lKSB7Ci0gICAgY2hhciBuYW1lWzEwMF07Ci0KLSAg ICBpZiAodHR5Y3RsZmQgPj0gMCkgewotCWNsb3NlKHR0eWN0bGZkKTsKLQl0dHljdGxmZCA9IC0x OwotCXR0eWxhc3RzcGVlZCA9IC0xOwotICAgIH0KLSAgICBzcHJpbnRmKG5hbWUsICIlc2N0bCIs IHR0bmFtZSk7Ci0gICAgdHR5Y3RsZmQgPSBvcGVuKG5hbWUsIDEpOwotICAgIHJldHVybiB0dHlj dGxmZDsKLX0KLQotaW50Ci1wOWNvbmNiKCkgewotICAgIGlmIChjb25zY3RsZmQgPj0gMCkgewot CWlmICh3cml0ZShjb25zY3RsZmQsICJyYXdvbiIsIDUpID09IDUpCi0JICByZXR1cm4gMDsKLSAg ICB9Ci0gICAgcmV0dXJuIC0xOwotfQotCi1pbnQKLXA5Y29uYmluKCkgewotICAgIHJldHVybiBw OWNvbmNiKCk7Ci19Ci0KLWludAotcDljb25yZXMoKSB7Ci0gICAgaWYgKGNvbnNjdGxmZCA+PSAw KSB7Ci0JaWYgKHdyaXRlKGNvbnNjdGxmZCwgInJhd29mZiIsIDYpID09IDYpCi0JICByZXR1cm4g MDsKLSAgICB9Ci0gICAgcmV0dXJuIC0xOwotfQotCi1pbnQKLXA5c25kYnJrKGludCBtc2VjKSB7 Ci0gICAgaWYgKHR0eWN0bGZkID49IDApIHsKLQljaGFyIGNtZFsyMF07Ci0JaW50IGkgPSBzcHJp bnRmKGNtZCwgImslZCIsIG1zZWMpOwotCWlmICh3cml0ZSh0dHljdGxmZCwgY21kLCBpKSA9PSBp KQotCSAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiAtMTsKLX0KLQotaW50Ci1jb253cml0 ZShjaGFyICpidWYsIGludCBuKSB7Ci0gICAgaW50IHg7Ci0gICAgc3RhdGljIGludCBsZW5ndGgg PSAwOwotICAgIHN0YXRpYyBpbnQgaG9sZGluZ2NyID0gMDsKLSAgICBpbnQgbm9ybWFsID0gMDsK LSAgICBmb3IgKHggPSAwOyB4IDwgbjsgeCsrKSB7Ci0JY2hhciBjID0gYnVmW3hdOwotCWlmIChj ID09IDAwNykgewotCSAgICBpZiAobm9ybWFsKSB7Ci0JCXdyaXRlKDEsIGJ1ZiArICh4IC0gbm9y bWFsKSwgbm9ybWFsKTsKLQkJbGVuZ3RoICs9IG5vcm1hbDsKLQkJbm9ybWFsID0gMDsKLQkgICAg fQotCSAgICAvKiB3cml0ZShub2lzZWZkLCAiMTAwMCAzMDAiLCA4KTsgKi8KLQkgICAgaG9sZGlu Z2NyID0gMDsKLQl9IGVsc2UgaWYgKGMgPT0gJ1xyJykgewotCSAgICBpZiAobm9ybWFsKSB7Ci0J CXdyaXRlKDEsIGJ1ZiArICh4IC0gbm9ybWFsKSwgbm9ybWFsKTsKLQkJbGVuZ3RoICs9IG5vcm1h bDsKLQkJbm9ybWFsID0gMDsKLQkgICAgfQotCSAgICBob2xkaW5nY3IgPSAxOwotCX0gZWxzZSBp ZiAoYyA9PSAnXG4nKSB7Ci0JICAgIHdyaXRlKDEsIGJ1ZiArICh4IC0gbm9ybWFsKSwgbm9ybWFs ICsgMSk7Ci0JICAgIG5vcm1hbCA9IDA7Ci0JICAgIGxlbmd0aCA9IDA7Ci0JICAgIGhvbGRpbmdj ciA9IDA7Ci0JfSBlbHNlIGlmIChjID09ICdcYicpIHsKLQkgICAgaWYgKG5vcm1hbCkgewotCQl3 cml0ZSgxLCBidWYgKyAoeCAtIG5vcm1hbCksIG5vcm1hbCk7Ci0JCWxlbmd0aCArPSBub3JtYWw7 Ci0JCW5vcm1hbCA9IDA7Ci0JICAgIH0KLQkgICAgaWYgKGxlbmd0aCkgewotCQl3cml0ZSgxLCAm YywgMSk7Ci0JCWxlbmd0aC0tOwotCSAgICB9Ci0JICAgIGhvbGRpbmdjciA9IDA7Ci0JfSBlbHNl IHsKLQkgICAgaWYgKGhvbGRpbmdjcikgewotCQljaGFyIGIgPSAnXGInOwotCQl3aGlsZSAobGVu Z3RoLS0gPiAwKQotCQkgIHdyaXRlKDEsICZiLCAxKTsKLQkJbGVuZ3RoID0gMDsJLyogY29tcGls ZXIgYnVnICovCi0JICAgIH0KLQkgICAgaG9sZGluZ2NyID0gMDsKLQkgICAgbm9ybWFsKys7Ci0J fQotICAgIH0KLSAgICBpZiAobm9ybWFsKSB7Ci0Jd3JpdGUoMSwgYnVmICsgKHggLSBub3JtYWwp LCBub3JtYWwpOwotCWxlbmd0aCArPSBub3JtYWw7Ci0gICAgfQotICAgIHJldHVybiBuOwotfQot Ci12b2lkCi1jb25wcmludChjaGFyICpmbXQsIC4uLikgewotICAgIHN0YXRpYyBjaGFyIGJ1Zlsx MDAwXTsJCS8qIG5vdCBzYWZlIGlmIG9uIHRoZSBzdGFjayAqLwotCi0gICAgdmFfbGlzdCBhcDsK LSAgICBpbnQgaTsKLQotICAgIHZhX3N0YXJ0KGFwLCBmbXQpOwotICAgIGkgPSB2c3ByaW50Zihi dWYsIGZtdCwgYXApOwotICAgIGNvbndyaXRlKGJ1ZiwgaSk7Ci19Ci0jZW5kaWYgLyogUGxhbjkg Ki8KLQotLyogZnByaW50ZiwgcHJpbnRmLCBwZXJyb3IgcmVwbGFjZW1lbnRzLi4uICovCi0KLS8q IGYgcCByIGkgbiB0IGYgKi8KLQotI2lmZGVmIFVOSVgKLSNpZmRlZiBDS19BTlNJQwotI2luY2x1 ZGUgPHN0ZGFyZy5oPgotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLSNpZmRlZiBfX0dOVUNfXwotI2lu Y2x1ZGUgPHN0ZGFyZy5oPgotI2Vsc2UKLSNpbmNsdWRlIDx2YXJhcmdzLmg+Ci0jZW5kaWYJLyog X19HTlVDX18gKi8KLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotI2lmZGVmIGZwcmludGYKLSN1bmRl ZiBmcHJpbnRmCi1zdGF0aWMgY2hhciBzdHIxWzQwOTZdOwotc3RhdGljIGNoYXIgc3RyMls0MDk2 XTsKLWludAotI2lmZGVmIENLX0FOU0lDCi1ja3hmcHJpbnRmKEZJTEUgKiBmaWxlLCBjb25zdCBj aGFyICogZm9ybWF0LCAuLi4pCi0jZWxzZSAvKiBDS19BTlNJQyAqLwotY2t4ZnByaW50Zih2YV9h bGlzdCkgdmFfZGNsCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGNreGZwcmludGYgKi8gewot ICAgIGludCBpLCBqLCBsZW4sIGdvdF9jcjsKLSAgICB2YV9saXN0IGFyZ3M7Ci0gICAgaW50IHJj ID0gMDsKLQotI2lmZGVmIENLX0FOU0lDCi0gICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKLSNl bHNlIC8qIENLX0FOU0lDICovCi0gICAgY2hhciAqIGZvcm1hdDsKLSAgICBGSUxFICogZmlsZTsK LSAgICB2YV9zdGFydChhcmdzKTsKLSAgICBmaWxlID0gdmFfYXJnKGFyZ3MsRklMRSAqKTsKLSAg ICBmb3JtYXQgPSB2YV9hcmcoYXJncyxjaGFyICopOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0K LSAgICBpZiAoIWluc2VydmVyIHx8IChmaWxlICE9IHN0ZG91dCAmJiBmaWxlICE9IHN0ZGVyciAm JiBmaWxlICE9IHN0ZGluKSkgewotCXJjID0gdmZwcmludGYoZmlsZSxmb3JtYXQsYXJncyk7Ci0g ICAgfSBlbHNlIHsKLQl1bnNpZ25lZCBpbnQgYzsKLSAgICAgICAgcmMgPSB2c3ByaW50ZihzdHIx LCBmb3JtYXQsIGFyZ3MpOwotICAgICAgICBsZW4gPSBzdHJsZW4oc3RyMSk7Ci0gICAgICAgIGlm IChsZW4gPj0gc2l6ZW9mKHN0cjEpKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJja3hmcHJp bnRmKCkgYnVmZmVyIG92ZXJmbG93IiwiIixsZW4pOwotICAgICAgICAgICAgZG9leGl0KEJBRF9F WElULDEpOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaSA9IDAsIGogPSAwLCBnb3RfY3IgPSAw OwotCSAgICAgaSA8IGxlbiAmJiBqIDwgc2l6ZW9mKHN0cjEpLTI7Ci0JICAgICBpKyssIGorKyAp IHsKLQkgICAgLyogV2UgY2FuJ3QgdXNlIDI1NSBhcyBhIGNhc2UgbGFiZWwgYmVjYXVzZSBvZiBz aWduZWQgY2hhcnMgKi8KLQkgICAgYyA9ICh1bnNpZ25lZCkoc3RyMVtpXSAmIDB4ZmYpOwotI2lm ZGVmIFROQ09ERQotCSAgICBpZiAoYyA9PSAyNTUpIHsKLQkJaWYgKGdvdF9jciAmJiAhVEVMT1BU X01FKFRFTE9QVF9CSU5BUlkpKQotCQkgIHN0cjJbaisrXSA9ICdcMCc7Ci0JCXN0cjJbaisrXSA9 IElBQzsKLQkJc3RyMltqXSA9IElBQzsKLQkJZ290X2NyID0gMDsKLQkgICAgfSBlbHNlCi0jZW5k aWYgLyogVE5DT0RFICovCi0JICAgIHN3aXRjaCAoYykgewotCSAgICAgIGNhc2UgJ1xyJzoKLSAg ICAgICAgICAgICAgICBpZiAoZ290X2NyCi0jaWZkZWYgVE5DT0RFCi0JCSAgICAmJiAhVEVMT1BU X01FKFRFTE9QVF9CSU5BUlkpCi0jZW5kaWYgLyogVE5DT0RFICovCi0JCSAgICApCi0JCSAgc3Ry MltqKytdID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBzdHIyW2pdID0gc3RyMVtpXTsKLSAgICAg ICAgICAgICAgICBnb3RfY3IgPSAxOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCSAgICAgIGNh c2UgJ1xuJzoKLSAgICAgICAgICAgICAgICBpZiAoIWdvdF9jcikKLQkJICBzdHIyW2orK10gPSAn XHInOwotICAgICAgICAgICAgICAgIHN0cjJbal0gPSBzdHIxW2ldOwotICAgICAgICAgICAgICAg IGdvdF9jciA9IDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0JICAgICAgZGVmYXVsdDoKLSAg ICAgICAgICAgICAgICBpZiAoZ290X2NyCi0jaWZkZWYgVE5DT0RFCi0JCSAgICAmJiAhVEVMT1BU X01FKFRFTE9QVF9CSU5BUlkpCi0jZW5kaWYgLyogVE5DT0RFICovCi0JCSAgICApCi0JCSAgc3Ry MltqKytdID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBzdHIyW2pdID0gc3RyMVtpXTsKLSAgICAg ICAgICAgICAgICBnb3RfY3IgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg IGlmIChnb3RfY3IKLSNpZmRlZiBUTkNPREUKLSAgICAgICAgICAgICAmJiAhVEVMT1BUX01FKFRF TE9QVF9CSU5BUlkpCi0jZW5kaWYgLyogVE5DT0RFICovCi0gICAgICAgICAgICAgKQotICAgICAg ICAgICAgc3RyMltqKytdID0gJ1wwJzsKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0jaWZkZWYgVE5D T0RFCi0gICAgICAgIGlmIChURUxPUFRfTUUoVEVMT1BUX0VOQ1JZUFRJT04pKQotCSAgY2tfdG5f ZW5jcnlwdChzdHIyLGopOwotI2VuZGlmIC8qIFROQ09ERSAqLwotI2VuZGlmIC8qIENLX0VOQ1JZ UFRJT04gKi8KLSNpZmRlZiBDS19TU0wKLQlpZiAoaW5zZXJ2ZXIgJiYgKHNzbF9hY3RpdmVfZmxh ZyB8fCB0bHNfYWN0aXZlX2ZsYWcpKSB7Ci0JICAgIC8qIFdyaXRlIHVzaW5nIFNTTCAqLwotICAg ICAgICAgICAgY2hhciAqIHAgPSBzdHIyOwotICAgICAgICAgIHNzbF9yZXRyeToKLSAgICAgICAg ICAgIGlmIChzc2xfYWN0aXZlX2ZsYWcpCi0JICAgICAgcmMgPSBTU0xfd3JpdGUoc3NsX2Nvbiwg cCwgaik7Ci0gICAgICAgICAgICBlbHNlCi0JICAgICAgcmMgPSBTU0xfd3JpdGUodGxzX2Nvbiwg cCwgaik7Ci0JICAgIGRlYnVnKEYxMTEsImNreGZwcmludGYiLCJTU0xfd3JpdGUiLHJjKTsKLSAg ICAgICAgICAgIHN3aXRjaCAoU1NMX2dldF9lcnJvcihzc2xfYWN0aXZlX2ZsYWc/c3NsX2Nvbjp0 bHNfY29uLHJjKSkgewotCSAgICAgIGNhc2UgU1NMX0VSUk9SX05PTkU6Ci0gICAgICAgICAgICAg ICAgaWYgKHJjID09IGopCi0JCSAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcCArPSByYzsKLSAg ICAgICAgICAgICAgICBqIC09IHJjOwotICAgICAgICAgICAgICAgIGdvdG8gc3NsX3JldHJ5Owot CSAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6Ci0JICAgICAgY2FzZSBTU0xfRVJST1Jf V0FOVF9SRUFEOgotCSAgICAgIGNhc2UgU1NMX0VSUk9SX1NZU0NBTEw6Ci0gICAgICAgICAgICAg ICAgaWYgKHJjICE9IDApCi0JCSAgcmV0dXJuKC0xKTsKLQkgICAgICBjYXNlIFNTTF9FUlJPUl9X QU5UX1g1MDlfTE9PS1VQOgotCSAgICAgIGNhc2UgU1NMX0VSUk9SX1NTTDoKLQkgICAgICBjYXNl IFNTTF9FUlJPUl9aRVJPX1JFVFVSTjoKLQkgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg IHJjID0gMDsKLSAgICAgICAgICAgIH0KLQl9IGVsc2UKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAg ICAgICAgZndyaXRlKHN0cjIsc2l6ZW9mKGNoYXIpLGosc3Rkb3V0KTsKLSAgICB9Ci0gICAgdmFf ZW5kKGFyZ3MpOwotICAgIHJldHVybihyYyk7Ci19Ci0jZW5kaWYgLyogZnByaW50ZiAqLwotCi0v KiBwIHIgaSBuIHQgZiAqLwotCi0jaWZkZWYgcHJpbnRmCi0jdW5kZWYgcHJpbnRmCi1pbnQKLSNp ZmRlZiBDS19BTlNJQwotY2t4cHJpbnRmKGNvbnN0IGNoYXIgKiBmb3JtYXQsIC4uLikKLSNlbHNl IC8qIENLX0FOU0lDICovCi1ja3hwcmludGYodmFfYWxpc3QpIHZhX2RjbAotI2VuZGlmIC8qIENL X0FOU0lDICovCi0vKiBja3hwcmludGYgKi8gewotICAgIGludCBpLCBqLCBsZW4sIGdvdF9jcjsK LSAgICB2YV9saXN0IGFyZ3M7Ci0gICAgaW50IHJjID0gMDsKLQotI2lmZGVmIENLX0FOU0lDCi0g ICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKLSNlbHNlIC8qIENLX0FOU0lDICovCi0gICAgY2hh ciAqIGZvcm1hdDsKLSAgICB2YV9zdGFydChhcmdzKTsKLSAgICBmb3JtYXQgPSB2YV9hcmcoYXJn cyxjaGFyICopOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0KLSAgICBpZiAoIWluc2VydmVyKSB7 Ci0JcmMgPSB2cHJpbnRmKGZvcm1hdCwgYXJncyk7Ci0gICAgfSBlbHNlIHsKLQl1bnNpZ25lZCBp bnQgYzsKLSAgICAgICAgcmMgPSB2c3ByaW50ZihzdHIxLCBmb3JtYXQsIGFyZ3MpOwotICAgICAg ICBsZW4gPSBzdHJsZW4oc3RyMSk7Ci0gICAgICAgIGlmIChsZW4gPj0gc2l6ZW9mKHN0cjEpKSB7 Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJja3hwcmludGYoKSBidWZmZXIgb3ZlcmZsb3ciLCIi LGxlbik7Ci0gICAgICAgICAgICBkb2V4aXQoQkFEX0VYSVQsMSk7Ci0gICAgICAgIH0KLSAgICAg ICAgZm9yIChpID0gMCwgaiA9IDAsIGdvdF9jcj0wOwotCSAgICAgaSA8IGxlbiAmJiBqIDwgc2l6 ZW9mKHN0cjEpLTI7Ci0JICAgICBpKyssIGorKyApIHsKLQkgICAgYyA9ICh1bnNpZ25lZCkoc3Ry MVtpXSAmIDB4ZmYpOwotI2lmZGVmIFROQ09ERQotCSAgICBpZiAoYyA9PSAyNTUpIHsKLQkJaWYg KGdvdF9jciAmJiAhVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpKQotCQkgIHN0cjJbaisrXSA9ICdc MCc7Ci0JCXN0cjJbaisrXSA9IElBQzsKLQkJc3RyMltqXSA9IElBQzsKLQkJZ290X2NyID0gMDsK LQkgICAgfSBlbHNlCi0jZW5kaWYgLyogVE5DT0RFICovCi0JICAgIHN3aXRjaCAoYykgewotCSAg ICAgIGNhc2UgJ1xyJzoKLSAgICAgICAgICAgICAgICBpZiAoZ290X2NyCi0jaWZkZWYgVE5DT0RF Ci0JCSAgICAmJiAhVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpCi0jZW5kaWYgLyogVE5DT0RFICov Ci0JCSAgICApCi0JCSAgc3RyMltqKytdID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBzdHIyW2pd ID0gc3RyMVtpXTsKLSAgICAgICAgICAgICAgICBnb3RfY3IgPSAxOwotICAgICAgICAgICAgICAg IGJyZWFrOwotCSAgICAgIGNhc2UgJ1xuJzoKLSAgICAgICAgICAgICAgICBpZiAoIWdvdF9jcikK LQkJICBzdHIyW2orK10gPSAnXHInOwotICAgICAgICAgICAgICAgIHN0cjJbal0gPSBzdHIxW2ld OwotICAgICAgICAgICAgICAgIGdvdF9jciA9IDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0J ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAoZ290X2NyCi0jaWZkZWYgVE5DT0RF Ci0JCSAgICAmJiAhVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpCi0jZW5kaWYgLyogVE5DT0RFICov Ci0JCSAgICApCi0JCSAgc3RyMltqKytdID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBzdHIyW2pd ID0gc3RyMVtpXTsKLSAgICAgICAgICAgICAgICBnb3RfY3IgPSAwOwotICAgICAgICAgICAgICAg IGJyZWFrOwotCSAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGdvdF9jcgotI2lmZGVmIFRO Q09ERQotICAgICAgICAgICAgICYmICFURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkKLSNlbmRpZiAv KiBUTkNPREUgKi8KLSAgICAgICAgICAgICApCi0gICAgICAgICAgICBzdHIyW2orK10gPSAnXDAn OwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSNpZmRlZiBUTkNPREUKLSAgICAgICAgaWYgKFRFTE9Q VF9NRShURUxPUFRfRU5DUllQVElPTikpCi0JICBja190bl9lbmNyeXB0KHN0cjIsaik7Ci0jZW5k aWYgLyogVE5DT0RFICovCi0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotI2lmZGVmIENLX1NT TAotCWlmIChpbnNlcnZlciAmJiAoc3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykp IHsKLSAgICAgICAgICAgIGNoYXIgKiBwID0gc3RyMjsKLQkgICAgLyogV3JpdGUgdXNpbmcgU1NM ICovCi0gICAgICAgICAgc3NsX3JldHJ5OgotICAgICAgICAgICAgaWYgKHNzbF9hY3RpdmVfZmxh ZykKLQkgICAgICByYyA9IFNTTF93cml0ZShzc2xfY29uLCBwLCBqKTsKLSAgICAgICAgICAgIGVs c2UKLQkgICAgICByYyA9IFNTTF93cml0ZSh0bHNfY29uLCBwLCBqKTsKLQkgICAgZGVidWcoRjEx MSwiY2t4cHJpbnRmIiwiU1NMX3dyaXRlIixyYyk7Ci0gICAgICAgICAgICBzd2l0Y2ggKFNTTF9n ZXRfZXJyb3Ioc3NsX2FjdGl2ZV9mbGFnP3NzbF9jb246dGxzX2NvbixyYykpIHsKLQkgICAgICBj YXNlIFNTTF9FUlJPUl9OT05FOgotICAgICAgICAgICAgICAgIGlmIChyYyA9PSBqKQotCQkgIGJy ZWFrOwotICAgICAgICAgICAgICAgIHAgKz0gcmM7Ci0gICAgICAgICAgICAgICAgaiAtPSByYzsK LSAgICAgICAgICAgICAgICBnb3RvIHNzbF9yZXRyeTsKLQkgICAgICBjYXNlIFNTTF9FUlJPUl9X QU5UX1dSSVRFOgotCSAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfUkVBRDoKLQkgICAgICBjYXNl IFNTTF9FUlJPUl9TWVNDQUxMOgotICAgICAgICAgICAgICAgIGlmIChyYyAhPSAwKQotCQkgIHJl dHVybigtMSk7Ci0JICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUDoKLQkgICAg ICBjYXNlIFNTTF9FUlJPUl9TU0w6Ci0JICAgICAgY2FzZSBTU0xfRVJST1JfWkVST19SRVRVUk46 Ci0JICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByYyA9IDA7Ci0gICAgICAgICAgICB9 Ci0JfSBlbHNlCi0jZW5kaWYgLyogQ0tfU1NMICovCi0JICByYyA9IGZ3cml0ZShzdHIyLHNpemVv ZihjaGFyKSxqLHN0ZG91dCk7Ci0gICAgfQotICAgIHZhX2VuZChhcmdzKTsKLSAgICByZXR1cm4o cmMpOwotfQotI2VuZGlmIC8qIHByaW50ZiAqLwotCi0vKiAgcCBlIHIgciBvIHIgICovCi0KLSNp ZmRlZiBwZXJyb3IKLSN1bmRlZiBwZXJyb3IKLV9QUk9UT1RZUChjaGFyICogY2tfZXJyc3RyLChW T0lEKSk7Ci0jaWZkZWYgTkVYVAotdm9pZAotI2Vsc2UKLSNpZmRlZiBDS19TQ09WNQotdm9pZAot I2Vsc2UKLWludAotI2VuZGlmIC8qIENLX1NDT1Y1ICovCi0jZW5kaWYgLyogTkVYVCAqLwotI2lm ZGVmIENLX0FOU0lDCi1ja3hwZXJyb3IoY29uc3QgY2hhciAqIHN0cikKLSNlbHNlIC8qIENLX0FO U0lDICovCi1ja3hwZXJyb3Ioc3RyKSBjaGFyICogc3RyOwotI2VuZGlmIC8qIENLX0FOU0lDICov Ci0vKiBja3hwZXJyb3IgKi8gewotICAgIGNoYXIgKiBlcnJzdHIgPSBja19lcnJzdHIoKTsKLSNp Zm5kZWYgTkVYVAotI2lmbmRlZiBDS19TQ09WNQotICAgIHJldHVybgotI2VuZGlmIC8qIENLX1ND T1Y1ICovCi0jZW5kaWYgLyogTkVYVCAqLwotICAgICAgY2t4cHJpbnRmKCIlcyVzICVzXG4iLHN0 ciwqZXJyc3RyPyI6IjoiIixlcnJzdHIpOwotfQotI2VuZGlmIC8qIHBlcnJvciAqLwotI2VuZGlm IC8qIFVOSVggKi8KLQotI2lmZGVmIE1JTklYMgotCi0vKiBNaW5peCBkb2Vzbid0IGhhdmUgYSBn ZXR0aW1lb2ZkYXkgY2FsbCAoYnV0IE1JTklYMyBkb2VzKS4KLSAqIFdlIGZha2Ugb25lIGhlcmUg dXNpbmcgdGltZSgyKQotICovCi0KLSNpZm5kZWYgTUlOSVgzCi1pbnQKLWdldHRpbWVvZmRheShz dHJ1Y3QgdGltZXZhbCAqdHAsIHN0cnVjdCB0aW1lem9uZSAqdHpwKSB7Ci0gICAgdHAtPnR2X3Vz ZWMgPSAwTDsJCQkvKiBDbG9zZSBlbm91Z2ggZm9yIGhvcnNlc2hvZXMgKi8KLSAgICBpZih0aW1l KCYodHAtPnR2X3NlYykpPT0tMSkKLSAgICAgIHJldHVybigtMSk7Ci0gICAgcmV0dXJuKDApOwot fQotI2VuZGlmCS8qIE1JTklYMyAqLwotCi0jaWZuZGVmIE1JTklYMwotaW50Ci1yZWFkbGluayhj b25zdCBjaGFyICpwYXRoLCB2b2lkICpidWYsIHNpemVfdCBidWZzaXopIHsKLSAgICBlcnJubyA9 IEVOT1NZUzsKLSAgICByZXR1cm4oLTEpOwotfQotI2VuZGlmCS8qIE1JTklYMyAqLwotCi0jZW5k aWYgLyogTUlOSVgyICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJt aXQtOS4wLjMwMi9ja3V0aW8uYy5jOTkgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05 LjAuMzAyL2NrdXRpby5jLmM5OQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDU1NjRk ZS4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2Nr dXRpby5jLmM5OQorKysgL2Rldi9udWxsCkBAIC0xLDE2MDUwICswLDAgQEAKLSNkZWZpbmUgQ0tV VElPX0MKLQotI2lmZGVmIGFlZ2lzCi1jaGFyICpja3h2ID0gIkFlZ2lzIENvbW11bmljYXRpb25z IHN1cHBvcnQsIDkuMC4zMjYsIDIwIEF1Z3VzdCAyMDExIjsKLSNlbHNlCi0jaWZkZWYgUGxhbjkK LWNoYXIgKmNreHYgPSAiUGxhbiA5IENvbW11bmljYXRpb25zIHN1cHBvcnQsIDkuMC4zMjYsIDIw IEF1Z3VzdCAyMDExIjsKLSNlbHNlCi1jaGFyICpja3h2ID0gIlVOSVggQ29tbXVuaWNhdGlvbnMg c3VwcG9ydCwgOS4wLjMyNiwgMjAgQXVndXN0IDIwMTEiOwotI2VuZGlmIC8qIFBsYW45ICovCi0j ZW5kaWYgLyogYWVnaXMgKi8KLQotLyogIEMgSyBVIFQgSSBPICAqLwotCi0vKiBDLUtlcm1pdCBp bnRlcnJ1cHQsIGNvbW11bmljYXRpb25zIGNvbnRyb2wgYW5kIEkvTyBmdW5jdGlvbnMgZm9yIFVO SVggKi8KLQotLyoKLSAgQXV0aG9yOiBGcmFuayBkYSBDcnV6IChmZGNAY29sdW1iaWEuZWR1KSwK LSAgQ29sdW1iaWEgVW5pdmVyc2l0eSBBY2FkZW1pYyBJbmZvcm1hdGlvbiBTeXN0ZW1zLCBOZXcg WW9yayBDaXR5LgotCi0gIENvcHlyaWdodCAoQykgMTk4NSwgMjAxMSwKLSAgICBUcnVzdGVlcyBv ZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgotICAgIEFsbCBy aWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhl Ci0gICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1l ciBhbmQgcGVybWlzc2lvbnMuCi0qLwotCi0vKgotICBOT1RFIFRPIENPTlRSSUJVVE9SUzogVGhp cyBmaWxlLCBhbmQgYWxsIHRoZSBvdGhlciBDLUtlcm1pdCBmaWxlcywgbXVzdCBiZQotICBjb21w YXRpYmxlIHdpdGggQyBwcmVwcm9jZXNzb3JzIHRoYXQgc3VwcG9ydCBvbmx5ICNpZmRlZiwgI2Vs c2UsICNlbmRpZiwKLSAgI2RlZmluZSwgYW5kICN1bmRlZi4gIFBsZWFzZSBkbyBub3QgdXNlICNp ZiwgbG9naWNhbCBvcGVyYXRvcnMsIG9yIG90aGVyCi0gIHByZXByb2Nlc3NvciBmZWF0dXJlcyBp biBhbnkgb2YgdGhlIHBvcnRhYmxlIEMtS2VybWl0IG1vZHVsZXMuICBZb3UgY2FuLAotICBvZiBj b3Vyc2UsIHVzZSB0aGVzZSBjb25zdHJ1Y3Rpb25zIGluIHBsYXRmb3JtLXNwZWNpZmljIG1vZHVs ZXMgd2hlbiB0aGV5Ci0gIGFyZSBzdXBwb3J0ZWQgYnkgYWxsIGNvbXBpbGVycy9wcmVwcm9jZXNz b3JzIHRoYXQgY291bGQgYmUgdXNlZCBvbiB0aGF0Ci0gIHBsYXRmb3JtLgotKi8KLQotZXh0ZXJu IGludCBuZXR0eXBlOwkJCS8qIERlZmluZWQgaW4gY2tjbWFpLmMgKi8KLWV4dGVybiBpbnQgZHVw bGV4OwotCi0vKiBJbmNsdWRlcyAqLwotCi0jaW5jbHVkZSAiY2tjc3ltLmgiCQkJLyogVGhpcyBt dXN0IGdvIGZpcnN0ICAgKi8KLSNpbmNsdWRlICJja2NkZWIuaCIJCQkvKiBUaGlzIG11c3QgZ28g c2Vjb25kICAqLwotCi0jaWZkZWYgT1NGMTMKLSNpZmRlZiBDS19BTlNJQwotI2lmZGVmIF9OT19Q Uk9UTwotI3VuZGVmIF9OT19QUk9UTwotI2VuZGlmIC8qIF9OT19QUk9UTyAqLwotI2VuZGlmIC8q IENLX0FOU0lDICovCi0jZW5kaWYgLyogT1NGMTMgKi8KLQotI2lmbmRlZiBIUFVYUFJFNjUKLSNp bmNsdWRlIDxlcnJuby5oPgkJCS8qIEVycm9yIG51bWJlciBzeW1ib2xzICovCi0jZWxzZQotI2lm bmRlZiBFUlJOT19JTkNMVURFRAotI2luY2x1ZGUgPGVycm5vLmg+CQkJLyogRXJyb3IgbnVtYmVy IHN5bWJvbHMgKi8KLSNlbmRpZgkvKiBFUlJOT19JTkNMVURFRCAqLwotI2VuZGlmCS8qIEhQVVhQ UkU2NSAqLwotCi0jaWZkZWYgX18zODZCU0RfXwotI2RlZmluZSBFTk9UQ09OTiA1NwotI2Vsc2UK LSNpZmRlZiBfX2JzZGlfXwotI2RlZmluZSBFTk9UQ09OTiA1NwotI2Vsc2UKLSNpZmRlZiBfX0Zy ZWVCU0RfXwotI2RlZmluZSBFTk9UQ09OTiA1NwotI2VuZGlmIC8qIF9fRnJlZUJTRF9fICovCi0j ZW5kaWYgLyogX19ic2RpX18gKi8KLSNlbmRpZiAvKiBfXzM4NkJTRF9fICovCi0KLSNpZmRlZiBT Q09fT1NSNTA0Ci0jZGVmaW5lIE5CQlkgOAotI2VuZGlmIC8qIFNDT19PU1I1MDQgKi8KLQotI2lm ZGVmIFBsYW45Ci0jZGVmaW5lIFNFTEVDVAotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jaW5jbHVk ZSA8c2VsZWN0Lmg+Ci0jZGVmaW5lIEZEX1NFVFNJWkUgKDMgKiBzaXplb2YobG9uZykgKiA4KQot c3RhdGljIHN0cnVjdCB0aW1ldmFsIHR2OwotI2VuZGlmIC8qIFBsYW45ICovCi0KLSNpZmRlZiBD TElYCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZiAvKiBDTElYICovCi0KLSNpbmNsdWRl ICJja2NuZXQuaCIJCQkvKiBTeW1ib2xzIGZvciBuZXR3b3JrIHR5cGVzLiAqLwotI2lmZGVmIENL X1NTTAotI2luY2x1ZGUgImNrX3NzbC5oIgotI2VuZGlmIC8qIENLX1NTTCAqLwotCi0vKgotICBU aGUgZGlyZWN0b3J5LXJlbGF0ZWQgaW5jbHVkZXMgYXJlIGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRv IHRlc3Qgc29tZQotICBmaWxlLXN5c3RlbS1yZWxhdGVkIHN5bWJvbHMgdG8gZmluZCBvdXQgd2hp Y2ggc3lzdGVtIHdlJ3JlIGJlaW5nIGNvbXBpbGVkCi0gIHVuZGVyLiAgRm9yIGV4YW1wbGUsIE1B WE5BTUxFTiBpcyBkZWZpbmVkIGluIEJTRDQuMiBidXQgbm90IDQuMS4KLSovCi0jaWZkZWYgU0RJ UkVOVAkJCQkvKiBEaXJlY3RvcnkgYml0cy4uLiAqLwotI2RlZmluZSBESVJFTlQKLSNlbmRpZiAv KiBTRElSRU5UICovCi0KLSNpZmRlZiBYTkRJUgotI2luY2x1ZGUgPHN5cy9uZGlyLmg+Ci0jZWxz ZSAvKiAhWE5ESVIgKi8KLSNpZmRlZiBORElSCi0jaW5jbHVkZSA8bmRpci5oPgotI2Vsc2UgLyog IU5ESVIsICFYTkRJUiAqLwotI2lmZGVmIFJUVQotI2luY2x1ZGUgIi91c3IvbGliL25kaXIuaCIK LSNlbHNlIC8qICFSVFUsICFORElSLCAhWE5ESVIgKi8KLSNpZmRlZiBESVJFTlQKLSNpZmRlZiBT RElSRU5UCi0jaW5jbHVkZSA8c3lzL2RpcmVudC5oPgotI2Vsc2UKLSNpbmNsdWRlIDxkaXJlbnQu aD4KLSNlbmRpZiAvKiBTRElSRU5UICovCi0jZWxzZSAvKiAhUlRVLCAhTkRJUiwgIVhORElSLCAh RElSRU5ULCBpLmUuIGFsbCBvdGhlcnMgKi8KLSNpbmNsdWRlIDxzeXMvZGlyLmg+Ci0jZW5kaWYg LyogRElSRU5UICovCi0jZW5kaWYgLyogUlRVICovCi0jZW5kaWYgLyogTkRJUiAqLwotI2VuZGlm IC8qIFhORElSICovCi0KLSNpZmRlZiBRTlgKLSNpbmNsdWRlIDxzeXMvZGV2Lmg+Ci0jZW5kaWYg LyogUU5YICovCi0KLSNpZmRlZiBIUFVYNQotI2lmbmRlZiBUQ1BTT0NLRVQKLS8qIEkgZG9uJ3Qg a25vdyB3aHkgdGhpcyBpcyBuZWVkZWQgaGVyZSBzaW5jZSB3ZSBuZXZlciByZWZlcmVuY2UgYnpl cm8oKS4gKi8KLS8qIEJ1dCB3aXRob3V0IGl0IEMtS2VybWl0IHdvbid0IGxpbmsgaW4gYW4gSFAt VVggNS54eCBub24tVENQIGJ1aWxkLiAqLwotdm9pZAotYnplcm8ocyxuKSBjaGFyICpzOyBpbnQg bjsgewotICAgIGV4dGVybiBjaGFyICogbWVtc2V0KCk7Ci0gICAgbWVtc2V0KHMsMCxuKTsKLX0K LSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNlbmRpZiAvKiBIUFVYNSAqLwotCi0vKiBEZWZpbml0 aW9uIG9mIEhaLCB1c2VkIGluIG1zbGVlcCgpICovCi0KLSNpZmRlZiBNSVBTCi0jZGVmaW5lIEha ICggMTAwMCAvIENMT0NLX1RJQ0sgKQotI2Vsc2UgIC8qIE1JUFMgKi8KLSNpZmRlZiBBVFRTVgot I2lmbmRlZiBOQVAKLSNpZmRlZiBUUlMxNgotI2RlZmluZSBIWiAoIDEwMDAgLyBDTE9DS19USUNL ICkKLSNlbmRpZiAvKiBUUlMxNiAqLwotI2lmZGVmIE5BUEhBQ0sKLSNkZWZpbmUgbmFwKHgpICh2 b2lkKXN5c2NhbGwoMzExMiwgKHgpKQotI2RlZmluZSBOQVAKLSNlbmRpZiAvKiBOQVBIQUNLICov Ci0jZW5kaWYgLyogTkFQICovCi0jZW5kaWYgLyogQVRUU1YgKi8KLSNlbmRpZiAvKiBNSVBTICov Ci0KLSNpZmRlZiBNX1VOSVgKLSN1bmRlZiBOR1JPVVBTX01BWAkJLyogUHJldmVudCBtdWx0aXBs ZSBkZWZpbml0aW9uIHdhcm5pbmdzICovCi0jZW5kaWYgLyogTV9VTklYICovCi0KLS8qCi0gIE5P VEU6IEhQLVVYIDguMCBoYXMgYSA8c3lzL3BvbGwuaD4sIGJ1dCB0aGVyZSBpcyBubyBjb3JyZXNw b25kaW5nCi0gIGxpYnJhcnkgcm91dGluZSwgc28gX3BvbGwgY29tZXMgdXAgdW5kZWZpbmVkIGF0 IGxpbmsgdGltZS4KLSovCi0jaWZkZWYgQ0tfUE9MTAotI2lmbmRlZiBBSVhSUwkJCS8qIElCTSBB SVggbmVlZHMgc3BlY2lhbCBoYW5kbGluZyAqLwotI2luY2x1ZGUgPHBvbGwuaD4JCS8qICJzdGFu ZGFyZCIgKFNWSUQpIGkvbyBtdWx0aXBsZXhpbmcsIGV0YyAqLwotI2Vsc2UgLyogQUlYUlMgKi8K LSNpZmRlZiBTVlI0CQkJLyogQUlYIDMuMiBpcyBsaWtlIFNWSUQuLi4gKi8KLSNpbmNsdWRlIDxw b2xsLmg+Ci0jZWxzZQkJCQkvKiBCdXQgQUlYIDMuMSBpcyBub3QgLi4uICovCi0jaW5jbHVkZSA8 c3lzL3BvbGwuaD4JCS8qIFRoZSBpbmNsdWRlIGZpbGUgaXMgaW4gaW5jbHVkZS9zeXMgKi8KLSNk ZWZpbmUgZXZlbnRzIHJlcWV2ZW50cwkvKiBBbmQgaXQgZG9lcyBub3QgbWFwIElCTS1zcGVjaWZp YyBtZW1iZXIgKi8KLSNkZWZpbmUgcmV2ZW50cyBydG5ldmVudHMJLyogbmFtZXMgdG8gdGhlIFN5 c3RlbSBWIGVxdWl2YWxlbnRzICovCi0jZW5kaWYgLyogU1ZSNCAqLwotI2VuZGlmIC8qIEFJWFJT ICovCi0jZW5kaWYgLyogQ0tfUE9MTCAqLwotCi0jaW5jbHVkZSA8c2lnbmFsLmg+ICAgICAgICAg ICAgICAgICAgICAgLyogU2lnbmFscyAqLwotCi0vKiBGb3Igc2V0am1wIGFuZCBsb25nam1wICov Ci0KLSNpZm5kZWYgWklMT0cKLSNpbmNsdWRlIDxzZXRqbXAuaD4KLSNlbHNlCi0jaW5jbHVkZSA8 c2V0cmV0Lmg+Ci0jZW5kaWYgLyogWklMT0cgKi8KLQotLyoKLSAgVGhlIGZvbGxvd2luZyB0ZXN0 IGRpZmZlcmVudGlhdGVzIGJldHdlZW4gNC4xIEJTRCBhbmQgNC4yICYgbGF0ZXIuCi0gIElmIHlv dSBoYXZlIGEgNC4xQlNEIHN5c3RlbSB3aXRoIHRoZSBESVJFTlQgbGlicmFyeSwgdGhpcyB0ZXN0 IGNvdWxkCi0gIG1pc3Rha2VubHkgZGlhZ25vc2UgNC4yQlNEIGFuZCB0aGVuIGxhdGVyIGVuYWJs ZSB0aGUgdXNlIG9mIHN5c3RlbSBjYWxscwotICB0aGF0IGFyZW4ndCBkZWZpbmVkLiAgSWYgaW5k ZWVkIHRoZXJlIGFyZSBzdWNoIHN5c3RlbXMsIHdlIGNhbiB1c2Ugc29tZQotICBvdGhlciB3YXkg b2YgdGVzdGluZyBmb3IgNC4xQlNELCBvciBhZGQgeWV0IGFub3RoZXIgY29tcGlsZS10aW1lIHN3 aXRjaC4KLSovCi0jaWZkZWYgQlNENAotI2lmZGVmIE1BWE5BTUxFTgotI2lmbmRlZiBGVDIxCQkJ CS8qIEV4Y2VwdCBmb3IgRm9ydHVuZS4gKi8KLSNpZm5kZWYgRlQxOAotI2lmbmRlZiBCRUxMVjEw CQkJCS8qIEFuZCBCZWxsIExhYnMgUmVzZWFyY2ggVU5JWCBWMTAgKi8KLSNkZWZpbmUgQlNENDIK LSNlbmRpZiAvKiBCRUxMVjEwICovCi0jZW5kaWYgLyogRlQxOCAqLwotI2VuZGlmIC8qIEZUMjEg Ki8KLSNlbmRpZiAvKiBNQVhOQU1MRU4gKi8KLSNlbmRpZiAvKiBCU0Q0ICovCi0KLSNpZmRlZiBT VU5PUzQxCQkJCS8qIEZyb20gQ2hyaXN0aWFuIENvcnRpICovCi0jZGVmaW5lIEJTRDQ0T1JQT1NJ WAkJCS8qIFVuaSBTdHV0dGdhcnQgKi8KLSNkZWZpbmUgU1ZPUlBPU0lYCQkJLyogRmVicnVhcnkg MjAxMCAqLwotI2luY2x1ZGUgPHRlcm1pb3MuaD4KLSNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KLSNp bmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbmRpZgkvKiBTVU5PUzQx ICovCi0KLSNpZmRlZiBTTkk1NDIKLSNpbmNsdWRlIDxzeXMvZmlsaW8uaD4JCQkvKiAyOTkgZm9y IEZJT05SRUFEICovCi0jZW5kaWYJLyogU05JNTQyICovCi0KLS8qCi0gIE1pbml4IDIuMCBzdXBw b3J0IGFkZGVkIGJ5IFRlcnJ5IE1jQ29ubmVsbCwKLSAgU3lyYWN1c2UgVW5pdmVyc2l0eSA8dG1j QGJhcm55YXJkLnN5ci5lZHU+Ci0gIE5vIG1vcmUgc2d0dHkgaW50ZXJmYWNlLCBwb3NpeCBjb21w bGlhbnQuCi0qLwotI2lmZGVmIE1JTklYMgotI2RlZmluZSBfTUlOSVggICAvKiBOZWVkZWQgZm9y IHNvbWUgTWluaXggaGVhZGVyIGZpbGVzICovCi0jZGVmaW5lIEJTRDQ0T1JQT1NJWAotI2RlZmlu ZSBTVk9SUE9TSVgKLSNpZm5kZWYgTUlOSVgzCi0jZGVmaW5lIERDTFRJTUVWQUwKLSNlbmRpZgkv KiBNSU5JWDMgKi8KLSNkZWZpbmUgTk9GSUxFSAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lu Y2x1ZGUgPHN5cy9pb2N0bC5oPgotI2luY2x1ZGUgPHRlcm1pb3MuaD4KLSNpbmNsdWRlIDxsaW1p dHMuaD4KLSN1bmRlZiBUSU9DR0VUQyAgICAvKiBkZWZpbmVkIGluIHN5cy9pb2N0bC5oLCBidXQg bm90IHJlYWxseSBzdXBwb3J0ZWQgKi8KLSNkZWZpbmUgVEFOREVNIDAKLSNlbmRpZiAvKiBNSU5J WDIgKi8KLQotLyoKLSBNSU5JWCAxLjAgc3VwcG9ydCBhZGRlZCBieSBDaGFybGVzIEhlZHJpY2ss Ci0gUnV0Z2VycyBVbml2ZXJzaXR5IDxoZWRyaWNrQGFyYW1pcy5ydXRnZXJzLmVkdT4uCi0gTUlO SVggYWxzbyBoYXMgVjcgZW5hYmxlZC4KLSovCi0jaWZkZWYgTUlOSVgKLSNkZWZpbmUgVEFOREVN IDAKLSNkZWZpbmUgTVlSRUFECi0jZGVmaW5lIE5PU1lTSU9DVExICi0jaW5jbHVkZSA8bGltaXRz Lmg+Ci0jZW5kaWYgLyogTUlOSVggKi8KLQotI2lmZGVmIENLX1JFRElSCQkvKiA8c3lzL3dhaXQu aD4gbmVlZGVkIG9ubHkgZm9yIFJFRElSRUNUIGNvbW1hbmQuICovCi0vKgotICBJZiBhbnlib2R5 IGNhbiBmaWd1cmUgb3V0IGhvdyB0byBtYWtlIHRoaXMgd29yayB3aXRoIE5lWFRTVEVQLCBiZQot ICBteSBndWVzdCEgIChOZVhUQmxhaC9OZVhUQmxhaC9ic2Qvc3lzL3dhaXQuaCBkb2VzIG5vdCBk ZWZpbmUgV0VYSVRTVEFUVVMpCi0qLwotI2lmbmRlZiBDS19XQUlUX0gJCQkvKiBJZiB3YWl0Lmgg bm90IGFscmVhZHkgaW5jbHVkZWQuLi4gKi8KLSNpZmRlZiBPU0YJCQkJLyogZm9yY2UgT1NGIHRv IHNlbGVjdCBQT1NJWCB3YWl0ICovCi0jaWZkZWYgX0JTRAkJCQkvKiBpbnN0ZWFkIG9mIEJTRCAo c2VlIGNrY2RlYi5oKSAqLwotI2RlZmluZSBDS19PU0ZfQlNECi0jdW5kZWYgX0JTRAotI2VuZGlm IC8qIF9CU0QgKi8KLSNlbmRpZiAvKiBPU0YgKi8KLSNpbmNsdWRlIDxzeXMvd2FpdC5oPgkJCS8q IEluY2x1ZGUgaXQgKi8KLSNpZmRlZiBPU0YKLSNpZmRlZiBDS19PU0ZfQlNECi0jZGVmaW5lIF9C U0QJCQkJLyogUmVzdG9yZSBpdCAqLwotI3VuZGVmIENLX09TRl9CU0QKLSNlbmRpZiAvKiBDS19P U0ZfQlNEICovCi0jZW5kaWYgLyogT1NGICovCi0jZW5kaWYgLyogQ0tfV0FJVF9IICovCi0jZW5k aWYgLyogQ0tfUkVESVIgKi8KLQotI2luY2x1ZGUgImNrdXZlci5oIgkJCS8qIFZlcnNpb24gaGVy YWxkICovCi1jaGFyICpja3hzeXMgPSBIRVJBTEQ7Ci0KLSNpZmRlZiBDS19VVFNOQU1FCi0jaW5j bHVkZSA8c3lzL3V0c25hbWUuaD4KLQotI2lmZGVmIFRSVTY0CQkJCS8qIFRydTY0IFVOSVggNC4w IGFuZCBsYXRlciAqLwotLyogVmVyaWZpZWQgb24gVHJ1NjQgNC4wRiAtIG1pZ2h0IGJyZWFrIG9u IDQuMEUgb3IgZWFybGllciAqLwotI2luY2x1ZGUgPHN5cy9zeXNpbmZvLmg+CQkvKiAoZG9uJ3Qg a25vdyBhYm91dCBPU0YvMSBvciBEVSkgKi8KLSNpbmNsdWRlIDxtYWNoaW5lL2hhbF9zeXNpbmZv Lmg+Ci0jZW5kaWYgLyogVFJVNjQgKi8KLQotI2lmZGVmIFNPTEFSSVMyNQkJCS8qIFNvbGFyaXMg Mi41IGFuZCBsYXRlciAqLwotI2luY2x1ZGUgPHN5cy9zeXN0ZW1pbmZvLmg+CQkvKiAoZG9uJ3Qg a25vdyBhYm91dCBlYXJsaWVyIG9uZXMpICovCi0jZW5kaWYgLyogU09MQVJJUzI1ICovCi0KLSNp ZmRlZiBVVzcKLSNpZm5kZWYgU1lTX05NTE4KLSNkZWZpbmUgU1lTX05NTE4gMjU3Ci0jZW5kaWYg LyogTk1MTiAqLwotI2VuZGlmIC8qIFVXNyAqLwotI2lmZGVmIEhQVVg5UExVUwotc3RhdGljIGlu dCBocGlzODAwID0gMDsKLSNlbmRpZiAvKiBIUFVYOVBMVVMgKi8KLSNpZmRlZiBTWVNfTk1MTgot I2RlZmluZSBDS19TWVNOTUxOIFNZU19OTUxOCi0jZWxzZQotI2lmZGVmIF9TWVNfTk1MTgotI2Rl ZmluZSBDS19TWVNOTUxOIF9TWVNfTk1MTgotI2Vsc2UKLSNpZmRlZiBVVFNMRU4KLSNkZWZpbmUg Q0tfU1lTTk1MTiBVVFNMRU4KLSNlbHNlCi0jZGVmaW5lIENLX1NZU05NTE4gMzEKLSNlbmRpZiAv KiBVVFNMRU4gKi8KLSNlbmRpZiAvKiBfU1lTX05NTE4gKi8KLSNlbmRpZiAvKiBTWVNfTk1MTiAq LwotY2hhciB1bm1fbWNoW0NLX1NZU05NTE4rMV0gPSB7ICdcMCcsICdcMCcgfTsKLWNoYXIgdW5t X21vZFtDS19TWVNOTUxOKzFdID0geyAnXDAnLCAnXDAnIH07Ci1jaGFyIHVubV9uYW1bQ0tfU1lT Tk1MTisxXSA9IHsgJ1wwJywgJ1wwJyB9OwotY2hhciB1bm1fcmVsW0NLX1NZU05NTE4rMV0gPSB7 ICdcMCcsICdcMCcgfTsKLWNoYXIgdW5tX3ZlcltDS19TWVNOTUxOKzFdID0geyAnXDAnLCAnXDAn IH07Ci0jZW5kaWYgLyogQ0tfVVRTTkFNRSAqLwotCi0jaWZkZWYgQ0lFCi0jaW5jbHVkZSA8c3Rh dC5oPgkJCS8qIEZvciBjaGFzaW5nIHN5bWxpbmtzLCBldGMuICovCi0jZWxzZQotI2luY2x1ZGUg PHN5cy9zdGF0Lmg+Ci0jZW5kaWYgLyogQ0lFICovCi0KLSNpZmRlZiBRTlgJCQkJLyogMjk5ICov Ci0jaWZuZGVmIElYQU5ZCi0jZGVmaW5lIElYQU5ZIDAKLSNlbmRpZgkvKiBJWEFOWSAqLwotI2Vu ZGlmCS8qIFFOWCAqLwotCi0vKiBVVUNQIGxvY2tmaWxlIG1hdGVyaWFsLi4uICovCi0KLSNpZm5k ZWYgTk9VVUNQCi0jaWZkZWYgVVNFVFRZTE9DSwotI2lmZGVmIEhBVkVfTE9DS0RFVgkJCS8qIFJl ZCBIYXQgYmF1ZGJveS9sb2NrZGV2ICovCi0vKgotICBXYXRjaCBvdXQ6IGJhdWRib3kuaCByZWZl cmVuY2VzIG9wZW4oKSB3aXRob3V0IG1ha2luZyBzdXJlIGl0IGhhcyBiZWVuCi0gIGRlY2xhcmVk LCByZXN1bHRpbmcgaW4gd2FybmluZ3Mgb24gYXQgbGVhc3QgUmVkIEhhdCA3LjMuICBJdCdzIGRl Y2xhcmVkIGluCi0gIGZjbnRsLmgsIGJ1dCB3ZSBkb24ndCBpbmNsdWRlIHRoYXQgdW50aWwgbGF0 ZXIuICBJbiB0aGlzIGNhc2Ugb25seSwgd2UKLSAgaW5jbHVkZSBpdCBoZXJlLCBhbmQgdGhlbiB0 aGUgc2Vjb25kIGluY2x1ZGUgaXMgaGFybWxlc3MgYmVjYXVzZSBpbiBSZWQgSGF0Ci0gIExpbnV4 ICh0aGUgb25seSBwbGFjZSB3aGVyZSB5b3UgZmluZCBiYXVkYm95LmgpIGZjbnRsLmggaXMgcHJv dGVjdGVkIGZyb20KLSAgbXVsdGlwbGUgaW5jbHVzaW9uIGJ5IF9GQ05UTF9ILiAgIC0gZmRjLCAx MCBNYXkgMjAwNC4KLQotICBOT1RFOiBBbHRob3VnaCBMaW51eCAvdXNyL3NiaW4vbG9ja2RldiBv YnZpYXRlcyB0aGUgbmVlZCBmb3Igc2V0dWlkIG9yCi0gIHNldGdpZCBiaXRzIHRvIGFjY2VzcyB0 aGUgbG9ja2ZpbGUsIEMtS2VybWl0IHdpbGwgc3RpbGwgbmVlZCB0aGVtIHRvIGFjY2VzcwotICB0 aGUgc2VyaWFsIHBvcnQgaXRzZWxmIHVubGVzcyB0aGUgcG9ydCBpcyBvcGVuIGZvciB3b3JsZCBy ZWFkL3dyaXRlLgotICBOb3JtYWxseSBzZXRnaWQgdXVjcCBkb2VzIHRoZSB0cmljay4KLQotICBF eHRyYTogSEFWRV9MT0NLREVWIGhhcyBiZWVuIGFkZGVkIGFscyBvcGVuU3VTRSA+PSAxMS4zIGRv ZXNuJ3QgdXNlIGJhdWRib3kKLSAgYnV0IHR0eWxvY2suICAtIGpiLCAyNiBKdWwgMjAxMAotKi8K LSNpbmNsdWRlIDxmY250bC5oPgkJCS8qIFRoaXMgaGFzIHRvIGNvbWUgYmVmb3JlIGJhdWRib3kg Ki8KLSNpZmRlZiBIQVZFX0JBVURCT1kJCQkvKiBSZWQgSGF0IGJhdWRib3kvbG9ja2RldiAqLwot I2luY2x1ZGUgPGJhdWRib3kuaD4KLSNlbHNlICAvKiAhSEFWRV9CQVVEQk9ZICovCQkvKiBvcGVu U3VTRSBsb2NrIHZpYSB0dHlsb2NrICovCi0jaW5jbHVkZSA8dHR5bG9jay5oPgotI2VuZGlmICAv KiBIQVZFX0JBVURCT1kgKi8KLSNkZWZpbmUgTE9DS19ESVIgIi92YXIvbG9jayIJCS8qIChldmVu IHRob3VnaCB3ZSBkb24ndCBjYXJlKSAqLwotCi0jZWxzZSAgLyogIUhBVkVfTE9DS0RFViAqLwot Ci0jaWZkZWYgVVNFX1VVX0xPQ0sKLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2luY2x1ZGUgPGxpYnV0 aWwuaD4JCQkvKiBGcmVlQlNEICovCi0jZWxzZQotI2luY2x1ZGUgPHV0aWwuaD4JCQkvKiBPcGVu QlNEICovCi0jZW5kaWYgLyogSEFWRV9MT0NLREVWICovCi0jZW5kaWYgLyogX19GcmVlQlNEICov Ci0jZW5kaWYgLyogVVNFX1VVX0xPQ0sgKi8KLSNlbHNlICAvKiBVU0VUVFlMT0NLICovCi0KLS8q IE5hbWUgb2YgVVVDUCB0dHkgZGV2aWNlIGxvY2tmaWxlICovCi0KLSNpZmRlZiBMSU5VWEZTU1RO RAotI2lmbmRlZiBIREJVVUNQCi0jZGVmaW5lIEhEQlVVQ1AKLSNlbmRpZiAvKiBIREJVVUNQICov Ci0jZW5kaWYgLyogTElOVVhGU1NUTkQgKi8KLQotI2lmZGVmIEFDVUNOVFJMCi0jZGVmaW5lIExD S0RJUgotI2VuZGlmIC8qIEFDVUNOVFJMICovCi0KLS8qCi0gIFBJRFNUUklORyBtZWFucyB1c2Ug QVNDSUkgc3RyaW5nIHRvIHJlcHJlc2VudCBwaWQgaW4gbG9ja2ZpbGUuCi0qLwotI2lmbmRlZiBQ SURTVFJJTkcKLSNpZmRlZiBIREJVVUNQCi0jZGVmaW5lIFBJRFNUUklORwotI2Vsc2UKLSNpZmRl ZiBCU0Q0NAotI2RlZmluZSBQSURTVFJJTkcKLSNlbHNlCi0jaWZkZWYgUlRBSVgKLSNkZWZpbmUg UElEU1RSSU5HCi0jZWxzZQotI2lmZGVmIEFJWFJTCi0jZGVmaW5lIFBJRFNUUklORwotI2Vsc2UK LSNpZmRlZiBDT0hFUkVOVAotI2RlZmluZSBQSURTVFJJTkcKLSNlbmRpZiAvKiBDT0hFUkVOVCAq LwotI2VuZGlmIC8qIEFJWFJTICovCi0jZW5kaWYgLyogUlRBSVggKi8KLSNlbmRpZiAvKiBCU0Q0 NCAqLwotI2VuZGlmIC8qIEhEQlVVQ1AgKi8KLSNlbmRpZiAvKiBQSURTVFJJTkcgKi8KLQotLyog Tm93IHRoZSBQSURTVFJJTkcgZXhjZXB0aW9ucy4uLiAqLwotCi0jaWZkZWYgUElEU1RSSU5HCi0j aWZkZWYgSFBVWAotI3VuZGVmIFBJRFNUUklORwotI2VuZGlmIC8qIEhQVVggKi8KLSNlbmRpZiAv KiBQSURTVFJJTkcgKi8KLQotI2lmZGVmIF9fYnNkaV9fCQkJCS8qIEJTREkgKGF0IGxlYXN0IHRo cnUgMS4xKSAqLwotI2lmZGVmIFBJRFNUUklORwotI3VuZGVmIFBJRFNUUklORwotI2VuZGlmIC8q IFBJRFNUUklORyAqLwotI2VuZGlmIC8qIF9fYnNkaV9fICovCi0KLSNpZmRlZiBPU0YzMgkJCQkv KiBEaWdpdGFsIFVOSVggKE9TRi8xKSAzLjIgKi8KLSNpZmRlZiBQSURTVFJJTkcKLSN1bmRlZiBQ SURTVFJJTkcKLSNlbmRpZiAvKiBQSURTVFJJTkcgKi8KLSNlbmRpZiAvKiBPU0YzMiAqLwotCi0v KgotICBMT0NLX0RJUiBpcyB0aGUgbmFtZSBvZiB0aGUgbG9ja2ZpbGUgZGlyZWN0b3J5LgotICBJ ZiBMT0NLX0RJUiBpcyBhbHJlYWR5IGRlZmluZWQgKGUuZy4gb24gY29tbWFuZCBsaW5lKSwgd2Ug ZG9uJ3QgY2hhbmdlIGl0LgotKi8KLQotI2lmbmRlZiBMT0NLX0RJUgotI2lmZGVmIE1BQ09TWAot I2RlZmluZSBMT0NLX0RJUiAiL3Zhci9zcG9vbC9sb2NrIgotI2VuZGlmIC8qIE1BQ09TWCAqLwot I2VuZGlmLyogTE9DS19ESVIgKi8KLQotI2lmbmRlZiBMT0NLX0RJUgotI2lmZGVmIEJTRDQ0Ci0j aWZkZWYgX18zODZCU0RfXwotI2RlZmluZSBMT0NLX0RJUiAiL3Zhci9zcG9vbC9sb2NrIgotI2Vs c2UKLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2RlZmluZSBMT0NLX0RJUiAiL3Zhci9zcG9vbC9sb2Nr IgotI2Vsc2UKLSNpZmRlZiBfX05ldEJTRF9fCi0jZGVmaW5lIExPQ0tfRElSICIvdmFyL3Nwb29s L2xvY2siCi0jZWxzZQotI2lmZGVmIF9fT3BlbkJTRF9fCi0jZGVmaW5lIExPQ0tfRElSICIvdmFy L3Nwb29sL2xvY2siCi0jZWxzZQotLyogU28gd2hpY2ggb25lcyBpcyB0aGlzIGZvcj8gKi8KLS8q IFByb2JhYmx5IG9yaWdpbmFsIDQuNEJTRCBvbiBWYW5nb2doICovCi0vKiBQbHVzIHdobyBrbm93 cyBhYm91dCBNYWMgT1MgWC4uLiBJdCBkb2Vzbid0IGV2ZW4gaGF2ZSBhIGN1IHByb2dyYW0gKi8K LSNkZWZpbmUgTE9DS19ESVIgIi92YXIvc3Bvb2wvdXVjcCIKLSNlbmRpZiAvKiBfX09wZW5CU0Rf XyAqLwotI2VuZGlmIC8qIF9fTmV0QlNEX18gKi8KLSNlbmRpZiAvKiBfX0ZyZWVCU0RfXyAqLwot I2VuZGlmIC8qIF9fMzg2QlNEX18gKi8KLSNlbHNlCi0jaWZkZWYgREdVWDQzMAotI2RlZmluZSBM T0NLX0RJUiAiL3Zhci9zcG9vbC9sb2NrcyIKLSNlbHNlCi0jaWZkZWYgSFBVWDEwCi0jZGVmaW5l IExPQ0tfRElSICIvdmFyL3Nwb29sL2xvY2tzIgotI2Vsc2UKLSNpZmRlZiBSVEFJWAkJCQkvKiBJ Qk0gUlQgUEMgQUlYIDIuMi4xICovCi0jZGVmaW5lIExPQ0tfRElSICIvZXRjL2xvY2tzIgotI2Vs c2UKLSNpZmRlZiBBSVhSUwotI2RlZmluZSBMT0NLX0RJUiAiL2V0Yy9sb2NrcyIKLSNlbHNlCi0j aWZkZWYgSVNJSUkKLSNkZWZpbmUgTE9DS19ESVIgIi9ldGMvbG9ja3MiCi0jZWxzZQotI2lmZGVm IEhEQlVVQ1AKLSNpZmRlZiBNX1NZUzUKLSNkZWZpbmUgTE9DS19ESVIgIi91c3Ivc3Bvb2wvdXVj cCIKLSNlbHNlCi0jaWZkZWYgTV9VTklYCi0jZGVmaW5lIExPQ0tfRElSICIvdXNyL3Nwb29sL3V1 Y3AiCi0jZWxzZQotI2lmZGVmIFNWUjQKLSNkZWZpbmUgTE9DS19ESVIgIi92YXIvc3Bvb2wvbG9j a3MiCi0jZWxzZQotI2lmZGVmIFNVTk9TNAotI2RlZmluZSBMT0NLX0RJUiAiL3Zhci9zcG9vbC9s b2NrcyIKLSNlbHNlCi0jaWZkZWYgTElOVVhGU1NUTkQKLSNkZWZpbmUgTE9DS19ESVIgIi92YXIv bG9jayI7Ci0jZWxzZQotI2RlZmluZSBMT0NLX0RJUiAiL3Vzci9zcG9vbC9sb2NrcyIKLSNlbmRp ZiAvKiBMSU5VWEZTU1RORCAqLwotI2VuZGlmIC8qIFNVTk9TNCAqLwotI2VuZGlmIC8qIFNWUjQg Ki8KLSNlbmRpZiAvKiBNX1VOSVggKi8KLSNlbmRpZiAvKiBNX1NZUzUgKi8KLSNlbHNlCi0jaWZk ZWYgTENLRElSCi0jZGVmaW5lIExPQ0tfRElSICIvdXNyL3Nwb29sL3V1Y3AvTENLIgotI2Vsc2UK LSNpZmRlZiBDT0hFUkVOVAotI2RlZmluZSBMT0NLX0RJUiAiL3Vzci9zcG9vbC91dWNwIgotI2Vs c2UKLSNkZWZpbmUgTE9DS19ESVIgIi91c3Ivc3Bvb2wvdXVjcCIKLSNlbmRpZiAvKiBDT0hFUkVO VCAqLwotI2VuZGlmIC8qIExDS0RJUiAqLwotI2VuZGlmIC8qIEhEQlVVQ1AgKi8KLSNlbmRpZiAv KiBJU0lJSSAqLwotI2VuZGlmIC8qIEFJWFJTICovCi0jZW5kaWYgLyogUlRBSVggKi8KLSNlbmRp ZiAvKiBIUFVYMTAgKi8KLSNlbmRpZiAvKiBER1VYNDMwICovCi0jZW5kaWYgLyogQlNENDQgKi8K LSNlbmRpZiAvKiAhTE9DS19ESVIgKG91dHNpZGUgaWZuZGVmKSAqLwotCi0jaWZkZWYgT1NGMgkJ CQkvKiBPU0YvMSAyLjAgb3IgbGF0ZXIgKi8KLSNpZmRlZiBMT0NLX0RJUgkJCQkvKiAobWF5YmUg MS54IHRvbywgd2hvIGtub3dzLi4uKSAqLwotI3VuZGVmIExPQ0tfRElSCi0jZGVmaW5lIExPQ0tf RElSICIvdmFyL3Nwb29sL2xvY2tzIgotI2VuZGlmIC8qIExPQ0tfRElSICovCi0jZW5kaWYgLyog T1NGMiAqLwotCi0jaWZkZWYgQ09NTUVOVAotLyogU29ycnkgbm8gbW9yZSBsb2NrZigpIC0tIHdl IGxvY2sgZmlyc3QgYW5kIFRIRU4gb3BlbiB0aGUgZGV2aWNlLiAqLwotI2lmZGVmIFNWUjQKLSNp Zm5kZWYgQlNENDQKLSNpZm5kZWYgTE9DS0YKLSNkZWZpbmUgTE9DS0YJCQkJLyogVXNlIGxvY2tm KCkgb24gdHR5IGRldmljZSBpbiBTVlI0ICovCi0jZW5kaWYgLyogTE9DS0YgKi8KLSNlbmRpZiAv KiBCU0Q0NCAqLwotI2VuZGlmIC8qIFNWUjQgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSNp ZmRlZiBOT0xPQ0tGCQkJCS8qIEJ1dCBOT0xPQ0tGIGNhbmNlbHMgTE9DS0YgKi8KLSNpZmRlZiBM T0NLRgotI3VuZGVmIExPQ0tGCi0jZW5kaWYgLyogTE9DS0YgKi8KLSNlbmRpZiAvKiBOT0xPQ0tG ICovCi0KLS8qIE1vcmUgYWJvdXQgdGhpcyBiZWxvdy4uLiAqLwotCi0jZW5kaWYgLyogVVNFVFRZ TE9DSyAqLwotI2VuZGlmIC8qIE5PVVVDUCAqLwotCi0vKgotICBNWVJFQUQgbWVhbnMgdXNlIG91 ciBpbnRlcm5hbGx5IGRlZmluZWQgbm9uYmxvY2tpbmcgYnVmZmVyZWQgcmVhZCByb3V0aW5lLgot Ki8KLSNpZmRlZiBBVFRTVgotI2RlZmluZSBNWVJFQUQKLSNlbmRpZiAvKiBBVFRTViAqLwotCi0j aWZkZWYgQVRUNzMwMAotI2lmbmRlZiBNWVJFQUQKLSNkZWZpbmUgTVlSRUFECi0jZW5kaWYgLyog TVlSRUFEICovCi0vKiBiaXRzIGZvciBhdHRtb2RlbTogaW50ZXJuYWwgbW9kZW0gaW4gdXNlLCBy ZXN0YXJ0IGdldHR5ICovCi0jZGVmaW5lIElTTU9ERU0gMQotI2RlZmluZSBET0dFVFkgNTEyCi0j ZW5kaWYgIC8qIEFUVDczMDAgKi8KLQotI2lmZGVmIEJTRDQyCi0jZGVmaW5lIE1ZUkVBRAotI2Vu ZGlmIC8qIEJTRDQyICovCi0KLSNpZmRlZiBQT1NJWAotI2RlZmluZSBNWVJFQUQKLSNlbmRpZiAv KiBQT1NJWCAqLwotI2lmZGVmIF9fYnNkaV9fCi0jaWZuZGVmIE9fTkRFTEFZCi0jZGVmaW5lIE9f TkRFTEFZIE9fTk9OQkxPQ0sKLSNlbmRpZiAvKiBPX05ERUxBWSAqLwotI2VuZGlmIC8qIF9fYnNk aV9fICovCi0KLS8qCi0gVmFyaWFibGVzIGF2YWlsYWJsZSB0byBvdXRzaWRlIHdvcmxkOgotCi0g ICBkZnR0eSAgLS0gUG9pbnRlciB0byBkZWZhdWx0IHR0eSBuYW1lIHN0cmluZywgbGlrZSAiL2Rl di90dHkiLgotICAgZGZsb2MgIC0tIDAgaWYgZGZ0dHkgaXMgY29uc29sZSwgMSBpZiBleHRlcm5h bCBsaW5lLgotICAgZGZwcnR5IC0tIERlZmF1bHQgcGFyaXR5Ci0gICBkZmZsb3cgLS0gRGVmYXVs dCBmbG93IGNvbnRyb2wKLSAgIGNreGVjaCAtLSBGbGFnIGZvciB3aG8gZWNob2VzIGNvbnNvbGUg dHlwZWluOgotICAgICAxIC0gVGhlIHByb2dyYW0gKHN5c3RlbSBlY2hvIGlzIHR1cm5lZCBvZmYp Ci0gICAgIDAgLSBUaGUgc3lzdGVtIChvciBmcm9udCBlbmQsIG9yIHRlcm1pbmFsKS4KLSAgIGZ1 bmN0aW9ucyB0aGF0IHdhbnQgdG8gZG8gdGhlaXIgb3duIGVjaG9pbmcgc2hvdWxkIGNoZWNrIHRo aXMgZmxhZwotICAgYmVmb3JlIGRvaW5nIHNvLgotCi0gICBmbGZuYW0gIC0tIE5hbWUgb2YgbG9j ayBmaWxlLCBpbmNsdWRpbmcgaXRzIHBhdGgsIGUuZy4sCi0gICAgICAgICAgICAgICAgIi91c3Iv c3Bvb2wvdXVjcC9MQ0suLmN1bDAiIG9yICIvZXRjL2xvY2tzL3R0eTc3IgotICAgbGtmbGZuICAt LSBOYW1lIG9mIGxpbmsgdG8gbG9jayBmaWxlLCBpbmNsdWRpbmcgaXRzIHBhdGhzCi0gICBoYXNs b2NrIC0tIEZsYWcgc2V0IGlmIHRoaXMga2VybWl0IGVzdGFibGlzaGVkIGEgdXVjcCBsb2NrLgot ICAgbG9ja3BpZCAtLSBQSUQgb2Ygb3RoZXIgcHJvY2VzcyB0aGF0IGhhcyBkZXNpcmVkIGxpbmUg b3BlbiwgYXMgc3RyaW5nLgotICAgYmFja2dyZCAtLSBGbGFnIGluZGljYXRpbmcgcHJvZ3JhbSBl eGVjdXRpbmcgaW4gYmFja2dyb3VuZCAoICYgb24KLSAgICAgICAgICAgICAgICBlbmQgb2Ygc2hl bGwgY29tbWFuZCkuIFVzZWQgdG8gaWdub3JlIElOVCBhbmQgUVVJVCBzaWduYWxzLgotICAgcnR1 X2J1ZyAtLSBTZXQgYnkgc3RwdHJhcCgpLiAgUlRVIHRyZWF0cyBeWiBhcyBFT0YgKGJ1dCBvbmx5 IHdoZW4gd2UgaGFuZGxlCi0gICAgICAgICAgICAgICAgU0lHVFNUUCkKLQotIEZ1bmN0aW9ucyBm b3IgYXNzaWduZWQgY29tbXVuaWNhdGlvbiBsaW5lIChlaXRoZXIgZXh0ZXJuYWwgb3IgY29uc29s ZSB0dHkpOgotCi0gICBzeXNpbml0KCkgICAgICAgICAgICAgICAtLSBTeXN0ZW0gZGVwZW5kZW50 IHByb2dyYW0gaW5pdGlhbGl6YXRpb24KLSAgIHN5c2NsZWFudXAoKSAgICAgICAgICAgIC0tIFN5 c3RlbSBkZXBlbmRlbnQgcHJvZ3JhbSBzaHV0ZG93bgotICAgdHRvcGVuKHR0bmFtZSxsb2NhbCxt ZG10eXAsdGltbykgLS0gT3BlbiB0aGUgbmFtZWQgdHR5IGZvciBleGNsdXNpdmUgYWNjZXNzLgot ICAgdHRjbG9zKCkgICAgICAgICAgICAgICAgLS0gQ2xvc2UgJiByZXNldCB0aGUgdHR5LCByZWxl YXNpbmcgYW55IGFjY2VzcyBsb2NrLgotICAgdHRzc3BkKGNwcykgICAgICAgICAgICAgLS0gU2V0 IHRoZSB0cmFuc21pc3Npb24gc3BlZWQgb2YgdGhlIHR0eS4KLSAgIHR0Z3NwZCgpICAgICAgICAg ICAgICAgIC0tIEdldCAocmVhZCkgdGhlIHRoZSB0cmFuc21pc3Npb24gc3BlZWQgb2YgdGhlIHR0 eS4KLSAgIHR0cGt0KHNwZWVkLGZsb3cscGFyaXR5KSAtLSBQdXQgdGhlIHR0eSBpbiBwYWNrZXQg bW9kZSBhbmQgc2V0IHRoZSBzcGVlZC4KLSAgIHR0dnQoc3BlZWQsZmxvdykgICAgICAgIC0tIFB1 dCB0aGUgdHR5IGluIHZpcnR1YWwgdGVybWluYWwgbW9kZS4KLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgb3IgaW4gRElBTElORyBvciBDT05ORUNURUQgbW9kZW0gY29udHJvbCBzdGF0 ZS4KLSAgIHR0cmVzKCkgICAgICAgICAgICAgICAgIC0tIFJlc3RvcmUgb3JpZ2luYWwgdHR5IG1v ZGVzLgotICAgdHRzY2FycihjYXJyaWVyKSAgICAgICAgLS0gU2V0IGNhcnJpZXIgY29udHJvbCBt b2RlLCBvbi9vZmYvYXV0by4KLSAgIHR0aW5sKGRlc3QsbWF4LHRpbW8pICAgIC0tIFRpbWVkIHJl YWQgbGluZSBmcm9tIHRoZSB0dHkuCi0gICB0dGluYyh0aW1vKSAgICAgICAgICAgICAtLSBUaW1l ZCByZWFkIGNoYXJhY3RlciBmcm9tIHR0eS4KLSAgIG15cmVhZCgpICAgICAgICAgICAgICAgIC0t IFJhdyBtb2RlIGJ1bGsgYnVmZmVyIHJlYWQsIGdpdmVzIHN1YnNlcXVlbnQKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2hhcnMgb25lIGF0IGEgdGltZSBhbmQgc2ltdWxhdGVzIEZJ T05SRUFELgotICAgbXl1bnJkKGMpICAgICAgICAgICAgICAgLS0gUGxhY2VzIGMgYmFjayBpbiBi dWZmZXIgdG8gYmUgcmVhZCAob25lIG9ubHkpCi0gICB0dGNoaygpICAgICAgICAgICAgICAgICAt LSBTZWUgaG93IG1hbnkgY2hhcmFjdGVycyBpbiB0dHkgaW5wdXQgYnVmZmVyLgotICAgdHR4aW4o bixidWYpICAgICAgICAgICAgLS0gUmVhZCBuIGNoYXJhY3RlcnMgZnJvbSB0dHkgKHVudGltZWQp LgotICAgdHRvbChzdHJpbmcsbGVuZ3RoKSAgICAgLS0gV3JpdGUgYSBzdHJpbmcgdG8gdGhlIHR0 eS4KLSAgIHR0b2MoYykgICAgICAgICAgICAgICAgIC0tIFdyaXRlIGEgY2hhcmFjdGVyIHRvIHRo ZSB0dHkuCi0gICB0dGZsdWkoKSAgICAgICAgICAgICAgICAtLSBGbHVzaCB0dHkgaW5wdXQgYnVm ZmVyLgotICAgdHRzbmRiKCkgICAgICAgICAgICAgICAgLS0gU2VuZCBCUkVBSyBzaWduYWwuCi0g ICB0dHNuZGxiKCkgICAgICAgICAgICAgICAtLSBTZW5kIExvbmcgQlJFQUsgc2lnbmFsLgotCi0g ICB0dGxvY2sodHRuYW1lKSAgICAgICAgICAtLSAiTG9jayIgdHR5IGRldmljZSBhZ2FpbnN0IHV1 Y3AgY29sbGlzaW9ucy4KLSAgIHR0dW5sY2soKSAgICAgICAgICAgICAgIC0tIFVubG9jayB0dHkg ZGV2aWNlLgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgQVRUNzMwMC9Vbml4 IFBDLCBTeXN0ZW0gVjoKLSAgIGF0dGRpYWwodHRuYW1lLHNwZWVkLHRlbG5icikgLS0gZGlhbHMg QVRUNzMwMC9Vbml4IFBDIGludGVybmFsIG1vZGVtCi0gICBvZmZnZXR0eSh0dG5hbWUpICAgICAg ICAtLSBUdXJucyBvZmYgZ2V0dHkoMW0pIGZvciBjb21tcyBsaW5lCi0gICBvbmdldHR5KHR0bmFt ZSkgICAgICAgICAtLSBSZXN0b3JlcyBnZXR0eSgpIHRvIGNvbW1zIGxpbmUKLSovCi0KLS8qCi1G dW5jdGlvbnMgZm9yIGNvbnNvbGUgdGVybWluYWw6Ci0KLSAgIGNvbmdtKCkgICAtLSBHZXQgY29u c29sZSB0ZXJtaW5hbCBtb2Rlcy4KLSAgIGNvbmNiKGVzYykgLS0gUHV0IHRoZSBjb25zb2xlIGlu IHNpbmdsZS1jaGFyYWN0ZXIgd2FrZXVwIG1vZGUgd2l0aCBubyBlY2hvLgotICAgY29uYmluKGVz YykgLS0gUHV0IHRoZSBjb25zb2xlIGluIGJpbmFyeSAocmF3KSBtb2RlLgotICAgY29ucmVzKCkg IC0tIFJlc3RvcmUgdGhlIGNvbnNvbGUgdG8gbW9kZSBvYnRhaW5lZCBieSBjb25nbSgpLgotICAg Y29ub2MoYykgIC0tIFVuYnVmZmVyZWQgb3V0cHV0LCBvbmUgY2hhcmFjdGVyIHRvIGNvbnNvbGUu Ci0gICBjb25vbChzKSAgLS0gVW5idWZmZXJlZCBvdXRwdXQsIG51bGwtdGVybWluYXRlZCBzdHJp bmcgdG8gdGhlIGNvbnNvbGUuCi0gICBjb25vbGEocykgLS0gVW5idWZmZXJlZCBvdXRwdXQsIGFy cmF5IG9mIHN0cmluZ3MgdG8gdGhlIGNvbnNvbGUuCi0gICBjb254byhuLHMpIC0tIFVuYnVmZmVy ZWQgb3V0cHV0LCBuIGNoYXJhY3RlcnMgdG8gdGhlIGNvbnNvbGUuCi0gICBjb25jaGsoKSAgLS0g Q2hlY2sgaWYgY2hhcmFjdGVycyBhdmFpbGFibGUgYXQgY29uc29sZSAoYnNkIDQuMikuCi0gICAg ICAgICAgICAgICAgQ2hlY2sgaWYgZXNjYXBlIGNoYXIgKF5cKSB0eXBlZCBhdCBjb25zb2xlIChT eXN0ZW0gSUlJL1YpLgotICAgY29uaW5jKHRpbW8pICAtLSBUaW1lZCBnZXQgYSBjaGFyYWN0ZXIg ZnJvbSB0aGUgY29uc29sZS4KLSAgIGNvbmdrcyh0aW1vKSAgLS0gVGltZWQgZ2V0IGtleWJvYXJk IHNjYW4gY29kZS4KLSAgIGNvbmludCgpICAtLSBFbmFibGUgdGVybWluYWwgaW50ZXJydXB0cyBv biB0aGUgY29uc29sZSBpZiBub3QgYmFja2dyb3VuZC4KLSAgIGNvbm5vaSgpICAtLSBEaXNhYmxl IHRlcm1pbmFsIGludGVycnVwdHMgb24gdGhlIGNvbnNvbGUgaWYgbm90IGJhY2tncm91bmQuCi0K LVRpbWUgZnVuY3Rpb25zCi0KLSAgIG1zbGVlcChtKSAtLSBNaWxsaXNlY29uZCBzbGVlcAotICAg enRpbWUoJnMpIC0tIFJldHVybiBwb2ludGVyIHRvIGRhdGUvdGltZSBzdHJpbmcKLSAgIHJ0aW1l cigpIC0tICBSZXNldCB0aW1lcgotICAgZ3RpbWVyKCkgIC0tIEdldCBlbGFwc2VkIHRpbWUgc2lu Y2UgbGFzdCBjYWxsIHRvIHJ0aW1lcigpCi0qLwotCi0vKiBDb25kaXRpb25hbCBJbmNsdWRlcyAq LwotCi0vKiBXaGV0aGVyIHRvIGluY2x1ZGUgPHN5cy9maWxlLmg+ICovCi0KLSNpZmRlZiBSVFUJ CQkJLyogUlRVIGRvZXNuJ3QgKi8KLSNkZWZpbmUgTk9GSUxFSAotI2VuZGlmIC8qIFJUVSAqLwot Ci0jaWZkZWYgQ0lFCQkJCS8qIENJRSBkb2VzLiAqLwotI3VuZGVmIE5PRklMRUgKLSNlbmRpZiAv KiBDSUUgKi8KLQotI2lmZGVmIEJTRDQxCQkJCS8qIDQuMSBCU0QgZG9lc24ndCAqLwotI2RlZmlu ZSBOT0ZJTEVICi0jZW5kaWYgLyogQlNENDEgKi8KLQotI2lmZGVmIGlzNjhrCQkJCS8qIEludGVn cmF0ZWQgU29sdXRpb25zIDY4MDAwIFVOSVggICovCi0jZGVmaW5lIE5PRklMRUgJCQkJLyogZS5n LiBvbiBQbGV4dXggUDYwIGFuZCBTdW4tMSAqLwotI2VuZGlmIC8qIGlzNjhrICovCi0KLSNpZmRl ZiBNSU5JWAkJCQkvKiBNSU5JWCAqLwotI2RlZmluZSBOT0ZJTEVICi0jZW5kaWYgLyogTUlOSVgg Ki8KLQotI2lmZGVmIENPSEVSRU5UCQkJCS8qIENvaGVyZW50ICovCi0jZGVmaW5lIE5PRklMRUgK LSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotCi0jaWZuZGVmIE5PRklMRUgJCQkJLyogTm93IGluY2x1 ZGUgaWYgc2VsZWN0ZWQuICovCi0jaW5jbHVkZSA8c3lzL2ZpbGUuaD4KLSNlbmRpZiAvKiBOT0ZJ TEVIICovCi0KLS8qIFBPU0lYICovCi0KLSNpZmRlZiBCU0Q0NE9SUE9TSVgJCQkvKiBQT1NJWCB1 c2VzIHRlcm1pb3MuaCAqLwotI2RlZmluZSBURVJNSU9TCi0jaWZkZWYgX19ic2RpX18KLSNpZmRl ZiBQT1NJWAotI3VuZGVmIF9QT1NJWF9TT1VSQ0UJCQkvKiBHZXQgZXh0cmEgc3R1ZmYgZnJvbSB0 ZXJtaW9zLmggKi8KLSNlbmRpZiAvKiBQT1NJWCAqLwotI2VuZGlmIC8qIF9fYnNkaV9fICovCi0j aW5jbHVkZSA8dGVybWlvcy5oPgotI2lmZGVmIExJTlVYCi0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+ Ci0jZW5kaWYgLyogTElOVVggKi8KLSNpZmRlZiBRTlgxNgotI2luY2x1ZGUgPGlvY3RsLmg+Ci0j ZWxzZQotI2lmZGVmIFFOWDYKLSNpbmNsdWRlIDxpb2N0bC5oPgotI2VuZGlmIC8qIFFOWDYgKi8K LSNlbmRpZiAvKiBRTlgxNiAqLwotI2lmZGVmIF9fYnNkaV9fCi0jaWZkZWYgUE9TSVgKLSNkZWZp bmUgX1BPU0lYX1NPVVJDRQotI2VuZGlmIC8qIFBPU0lYICovCi0jZW5kaWYgLyogX19ic2RpX18g Ki8KLSNpZm5kZWYgQlNENDQJCQkJLyogUmVhbGx5IFBPU0lYICovCi0jaWZuZGVmIENLX1FOWDMy CQkJLyogd2FzIENLX1FOWDMyICovCi0jZGVmaW5lIE5PU1lTSU9DVExICQkJLyogTm8gaW9jdGwn cyBhbGxvd2VkLiAqLwotI3VuZGVmIHVsdHJpeAkJCQkvKiBUdXJuIG9mZiBhbnkgdWx0cml4IGZl YXR1cmVzLiAqLwotI2VuZGlmIC8qIENLX1FOWDMyICovCi0jZW5kaWYgLyogQlNENDQgKi8KLSNl bmRpZiAvKiBQT1NJWCAqLwotCi0vKiBTeXN0ZW0gSUlJLCBTeXN0ZW0gViAqLwotCi0jaWZkZWYg QVRUU1YKLSNpZm5kZWYgQlNENDQKLSNpZm5kZWYgUE9TSVgKLSNpbmNsdWRlIDx0ZXJtaW8uaD4K LSNlbmRpZiAvKiBQT1NJWCAqLwotI2VuZGlmIC8qIEJTRDQ0ICovCi0jaWZkZWYgVEVSTUlPWAot LyogTmVlZCB0aGlzIGZvciB0ZXJtaW94IHN0cnVjdHVyZSwgUlRTL0NUUyBhbmQgRFRSL0NEIGZs b3cgY29udHJvbCAqLwotI2luY2x1ZGUgPHRlcm1pb3guaD4KLSAgc3RydWN0IHRlcm1pb3ggcmN0 c3g7Ci0jZWxzZQotI2lmZGVmIFNURVJNSU9YCi0jaWZkZWYgU0NPX09TUjUwNAotLyogU29ycnks IHRoaXMgaXMgdHJ1bHkgZGlzZ3VzdGluZyBidXQgaXQncyBTQ08ncyBmYXVsdC4gKi8KLSNpZm5k ZWYgX1NWSUQzCi0jZGVmaW5lIF9DS19TVklEM19YCi0jZGVmaW5lIF9TVklEMwotI2VuZGlmIC8q IF9TVklEMyAqLwotI2VuZGlmIC8qIFNDT19PU1I1MDQgKi8KLSNpbmNsdWRlIDxzeXMvdGVybWlv eC5oPgotICBzdHJ1Y3QgdGVybWlveCByY3RzeDsKLSNpZmRlZiBDS19TVklEM19YCi0jdW5kZWYg X1NWSUQzCi0jdW5kZWYgQ0tfU1ZJRDNfWAotI2VuZGlmIC8qIENLX1NWSUQzX1ggKi8KLSNlbmRp ZiAvKiBTVEVSTUlPWCAqLwotI2VuZGlmIC8qIFRFUk1JT1ggKi8KLSNlbmRpZiAvKiBBVFRTViAq LwotCi0jaWZkZWYgQ09IRVJFTlQJCQkvKiBVc2UgdGVybWlvLmgsIG5vdCBzZ3R0eS5oIGZvciBD b2hlcmVudCAqLwotI2luY2x1ZGUgPHRlcm1pby5oPgotI2VuZGlmIC8qIENPSEVSRU5UICovCi0K LSNpZmRlZiBNSU5JWAkJCQkvKiBNSU5JWCB1c2VzIGlvY3RsJ3MgKi8KLSNkZWZpbmUgTk9TWVNJ T0NUTEgJCQkvKiBidXQgaGFzIG5vIDxzeXMvaW9jdGwuaD4gKi8KLSNlbmRpZiAvKiBNSU5JWCAq LwotCi0vKiBPdGhlcnMgKi8KLQotI2lmbmRlZiBOT1NZU0lPQ1RMSAkJCS8qIE90aGVycyB1c2Ug aW9jdGwoKSAqLwotI2lmZGVmIFNVTjRTNQotLyoKLSAgVGhpcyBpcyB0byBnZXQgcmlkIG9mIGNw cCB3YXJuaW5nIG1lc3NhZ2VzIHRoYXQgb2NjdXIgYmVjYXVzZSBhbGwgb2YKLSAgdGhlc2Ugc3lt Ym9scyBhcmUgZGVmaW5lZCBieSBib3RoIHRlcm1pb3MuaCBhbmQgaW9jdGwuaCBvbiB0aGUgU1VO LgotKi8KLSN1bmRlZiBFQ0hPCi0jdW5kZWYgTkwwCi0jdW5kZWYgTkwxCi0jdW5kZWYgVEFCMAot I3VuZGVmIFRBQjEKLSN1bmRlZiBUQUIyCi0jdW5kZWYgWFRBQlMKLSN1bmRlZiBDUjAKLSN1bmRl ZiBDUjEKLSN1bmRlZiBDUjIKLSN1bmRlZiBDUjMKLSN1bmRlZiBGRjAKLSN1bmRlZiBGRjEKLSN1 bmRlZiBCUzAKLSN1bmRlZiBCUzEKLSN1bmRlZiBUT1NUT1AKLSN1bmRlZiBGTFVTSE8KLSN1bmRl ZiBQRU5ESU4KLSN1bmRlZiBOT0ZMU0gKLSNlbmRpZiAvKiBTVU40UzUgKi8KLSNpbmNsdWRlIDxz eXMvaW9jdGwuaD4KLSNlbmRpZiAvKiBOT1NZU0lPQ1RMSCAqLwotLyoKLSAgV2UgcmVhbGx5LCBy ZWFsbHksIFJFQUxMWSB3YW50IEZJT05SRUFELCBiZWNhdXNlIGl0IGlzIHRoZSBvbmx5IHdheSB0 byBmaW5kCi0gIG91dCBub3QganVzdCAqaWYqIHN0dWZmIGlzIHdhaXRpbmcgdG8gYmUgcmVhZCwg YnV0IGhvdyBtdWNoLCB3aGljaCBpcwotICBjcml0aWNhbCB0byBvdXIgc2xpZGluZy13aW5kb3cg YW5kIHN0cmVhbWluZyBwcm9jZWR1cmVzLCBub3QgdG8gbWVudGlvbgotICBlZmZpY2llbmN5IG9m IENPTk5FQ1QsIGV0Yy4KLSovCi0jaWZkZWYgQkVMTFYxMAotI2luY2x1ZGUgPHN5cy9maWxpby5o PgkJCS8qIEZvciBGSU9OUkVBRCAqLwotI2lmZGVmIEZJT05SRUFECi0jZGVmaW5lIE1ZUkVBRAot I2VuZGlmIC8qIE1ZUkVBRCAqLwotI2VuZGlmIC8qIEJFTExWMTAgKi8KLQotI2lmbmRlZiBGSU9O UkVBRAotLyogSXQgd2Fzbid0IGZvdW5kIGluIGlvY3RsLmggb3IgdGVybSouaCAtIHRyeSB0aGVz ZSBwbGFjZXM6ICovCi0jaWZkZWYgVU5JWFdBUkUKLSNpbmNsdWRlIDxzeXMvZmlsaW8uaD4KLSNl bHNlCi0jaWZkZWYgU09MQVJJUwotI2luY2x1ZGUgPHN5cy9maWxpby5oPgotI2VuZGlmIC8qIFNP TEFSSVMgKi8KLSNlbmRpZiAvKiBVTklYV0FSRSAqLwotI2VuZGlmIC8qIEZJT05SRUFEICovCi0K LSNpZmRlZiBYRU5JWCAvKiBXYXMgTV9VTklYIGJ1dCBYRU5JWCBpbXBsaWVzIE1fVU5JWCBhbmQg YXBwbGllcyB0byBYRU5JWCB0b28gKi8KLS8qCi0gIDxzeXMvc29ja2V0Lmg+IGluY2x1ZGVkIGFi b3ZlIHZpYSAiY2tjbmV0LmgiIGRlZmluZXMgRklPTlJFQUQgYXMKLSAgc29tZXRoaW5nLiAgRHVl IHRvIHRoaXMsIGluX2NoaygpIHVzZXMgdGhlIEZJT05SRUFEIGluc3RlYWQgb2YgUkRDSEsKLSAg YW5kIHRoZSBob3Qga2V5cyBkdXJpbmcgZmlsZSB0cmFuc2ZlciAoWCB0byBjYW5jZWwgZmlsZSBl dGMpIGRvIG5vdAotICB3b3JrIGJlY2F1c2UgRklPTlJFQUQgZG9lc24ndCB3b3JrIGV2ZW4gdGhv dWdoIGl0IGlzIGRlZmluZWQuCi0KLSAgTk9URTogVGhpcyBtaWdodCBhbHNvIGJlIHRydWUgZWxz ZXdoZXJlLgotKi8KLSNpZmRlZiBGSU9OUkVBRAotI3VuZGVmIEZJT05SRUFECi0jZW5kaWYgLyog RklPTlJFQUQgKi8KLSNlbmRpZiAvKiBYRU5JWCAqLwotCi0jaWZkZWYgQ0tfU0NPVjUJCQkJLyog RGl0dG8gZm9yIFNDTyBPcGVuU2VydmVyIDUuMCAqLwotI2lmbmRlZiBTQ09fT1NSNTA3CQkJLyog Mjk5ICovCi0jaWZkZWYgRklPTlJFQUQKLSN1bmRlZiBGSU9OUkVBRAotI2VuZGlmIC8qIEZJT05S RUFEICovCi0jZW5kaWYJLyogU0NPX09TUjUwNyAqLwotI2VuZGlmIC8qIENLX1NDT1Y1ICovCi0K LSNpZmRlZiBTQ09fT1NSNTA3CQkJLyogMjk5ICovCi0jaWZkZWYgUkRDSEsKLSN1bmRlZiBSRENI SwotI2VuZGlmCS8qIFJEQ0hLICovCi0jZW5kaWYJLyogU0NPX09TUjUwNyAqLwotCi0vKiBXaGV0 aGVyIHRvIGluY2x1ZGUgPGZjbnRsLmg+ICovCi0KLSNpZm5kZWYgaXM2OGsJCQkJLyogT25seSBh IGZldyBkb24ndCBoYXZlIHRoaXMgb25lLiAqLwotI2lmbmRlZiBCU0Q0MQotI2lmbmRlZiBGVDIx Ci0jaWZuZGVmIEZUMTgKLSNpZm5kZWYgQ09IRVJFTlQKLSNpbmNsdWRlIDxmY250bC5oPgotI2Vu ZGlmIC8qIENPSEVSRU5UICovCi0jZW5kaWYgLyogRlQxOCAqLwotI2VuZGlmIC8qIEZUMjEgKi8K LSNlbmRpZiAvKiBCU0Q0MSAqLwotI2VuZGlmIC8qIG5vdCBpczY4ayAqLwotCi0jaWZkZWYgQ09I RVJFTlQKLSNpZmRlZiBfSTM4NgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jZWxzZQotI2luY2x1ZGUg PHN5cy9mY250bC5oPgotI2VuZGlmIC8qIF9JMzg2ICovCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8K LQotI2lmZGVmIEFUVDczMDAJCQkJLyogVW5peCBQQywgaW50ZXJuYWwgbW9kZW0gZGlhbGVyICov Ci0jaW5jbHVkZSA8c3lzL3Bob25lLmg+Ci0jZW5kaWYgLyogQVRUNzMwMCAqLwotCi0jaWZkZWYg SFBVWAkJCQkvKiBIUC1VWCB2YXJpYXRpb25zLiAqLwotI2RlZmluZSBIUFVYSk9CQ1RMCi0jaW5j bHVkZSA8c3lzL21vZGVtLmg+CQkJLyogSFAtVVggbW9kZW0gc2lnbmFscyAqLwotI2lmZGVmIGhw OTAwMHM1MDAJCQkvKiBNb2RlbCA1MDAgKi8KLSN1bmRlZiBIUFVYSk9CQ1RMCi0jZW5kaWYgLyog aHA5MDAwczUwMCAqLwotI2lmZGVmIEhQVVhQUkU2NQotI3VuZGVmIEhQVVhKT0JDVEwKLXR5cGVk ZWYgbG9uZyBtZmxhZzsKLSNlbmRpZiAvKiBIUFVYUFJFNjUgKi8KLSNpZmRlZiBIUFVYSk9CQ1RM Ci0jaW5jbHVkZSA8c3lzL2JzZHR0eS5oPgkJCS8qIEhQLVVYIEJlcmtlbGV5IHR0eSBzdXBwb3J0 ICovCi0jZW5kaWYgLyogSFBVWEpPQkNUTCAqLwotI2VuZGlmIC8qIEhQVVggKi8KLQotLyoKLSAg V2hpY2ggdGltZS5oIGZpbGVzIHRvIGluY2x1ZGUuLi4gU2VlIGNrY2RlYi5oIGZvciBkZWZhdWx0 cy4KLSAgTm90ZSB0aGF0IDAsIDEsIDIsIG9yIGFsbCAzIG9mIHRoZXNlIGNhbiBiZSBpbmNsdWRl ZCBhY2NvcmRpbmcgdG8KLSAgdGhlIHN5bWJvbCBkZWZpbml0aW9ucy4KLSovCi0jaWZuZGVmIE5P VElNRUgKLSNpZmRlZiBUSU1FSAotI2luY2x1ZGUgPHRpbWUuaD4KLSNlbmRpZiAvKiBUSU1FSCAq LwotI2VuZGlmIC8qIE5PVElNRUggKi8KLQotI2lmbmRlZiBOT1NZU1RJTUVICi0jaWZkZWYgU1lT VElNRUgKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmIC8qIFNZU1RJTUVIICovCi0jZW5k aWYgLyogTk9TWVNUSU1FSCAqLwotCi0jaWZuZGVmIE5PU1lTVElNRUJICi0jaWZkZWYgU1lTVElN RUJICi0jaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jZW5kaWYgLyogU1lTVElNRUJIICovCi0jZW5k aWYgLyogTk9TWVNUSU1FQkggKi8KLQotI2lmbmRlZiBOT0RDTFRJTUVWQUwKLSNpZmRlZiBEQ0xU SU1FVkFMCi0vKgotICBJbiBjZXJ0YWluIFBPU0lYIGJ1aWxkcyAobGlrZSBVbml4d2FyZSA3KSwg PFtzeXMvXXRpbWUuaD4gcmVmdXNlcyB0bwotICBkZWZpbmUgdGhlIHN0cnVjdHMgd2UgbmVlZCB0 byBhY2Nlc3MgdGhlIGhpZ2hlciBzcGVlZHMsIHNvIHdlIGhhdmUgdG8KLSAgZG8gaXQgb3Vyc2Vs dmVzLgotKi8KLXN0cnVjdCB0aW1ldmFsIHsKLSAgICBsb25nIHR2X3NlYzsKLSAgICBsb25nIHR2 X3VzZWM7Ci19Owotc3RydWN0IHRpbWV6b25lIHsKLSAgICBpbnQgdHpfbWludXRlc3dlc3Q7Ci0g ICAgaW50IHR6X2RzdHRpbWU7Ci19OwotI2VuZGlmIC8qIERDTFRJTUVWQUwgKi8KLSNlbmRpZiAv KiBOT0RDTFRJTUVWQUwgKi8KLQotI2lmZGVmIF9fbGludXhfXwotLyogVEhJUyBJUyBPQlNPTEVU RSBzaW5jZSBhYm91dCBMaW51eCAwLjkyICovCi0jaWZkZWYgT0xJTlVYSElTUEVFRAotI2luY2x1 ZGUgPGxpbnV4L3NlcmlhbC5oPgotI2VuZGlmIC8qIE9MSU5VWEhJU1BFRUQgKi8KLSNpZmRlZiBf X2FscGhhX18JCQkvKiBMaW51eCBvbiBERUMgQWxwaGEgKi8KLSNpZm5kZWYgX19HTElCQ19fCQkJ LyogQnV0IG5vdCB3aXRoIGdsaWJjICovCi0jaW5jbHVkZSA8YXNtL3Rlcm1pb3MuaD4KLSNlbmRp ZiAvKiBfX0dMSUJDX18gKi8KLSNlbmRpZiAvKiBfX2FscGhhX18gKi8KLSNlbmRpZiAvKiBfX2xp bnV4X18gKi8KLQotI2lmZGVmIE5PSUVYVEVOCQkJCS8qIFRoaXMgaXMgYnJva2VuIG9uIHNvbWUg c3lzdGVtcyAqLwotI3VuZGVmIElFWFRFTgkJCQkvKiBsaWtlIENvbnZleC9PUyA5LjEgKi8KLSNl bmRpZiAvKiBOT0lFWFRFTiAqLwotI2lmbmRlZiBJRVhURU4JCQkJLyogVHVybiBvZmYgXk8vXlYg cHJvY2Vzc2luZy4gKi8KLSNkZWZpbmUgSUVYVEVOIDAJCQkvKiBOZWVkZWQsIGF0IGxlYXN0LCBv biBCU0RJLiAqLwotI2VuZGlmIC8qIElFWFRFTiAqLwotLyoKLSAgUGljayB1cCBkZWZpbml0aW9u cyBuZWVkZWQgZm9yIHNlbGVjdCgpIGlmIHdlIGRvbid0IGhhdmUgdGhlbSBhbHJlYWR5LgotICBO b3JtYWxseSB0aGV5IGNvbWUgZnJvbSA8c3lzL3R5cGVzLmg+IGJ1dCBzb21lIHN5c3RlbXMgZ2V0 IHRoZW0gZnJvbQotICA8c3lzL3NlbGVjdC5oPi4uLiAgUmF0aGVyIHRoYW4gaGFyZHdpcmUgYWxs IG9mIHRoZW0gaW50byB0aGUgc291cmNlLCB3ZQotICBpbmNsdWRlIGl0IGlmIFNFTEVDVF9IIGlz IGRlZmluZWQgaW4gY29tcGlsZS10aW1lIENGTEFHUy4KLSovCi0jaWZuZGVmIFNDT19PU1I1MDQK LSNpZmRlZiBTRUxFQ1RfSAotI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KLSNlbmRpZiAvKiBTRUxF Q1RfSCAqLwotI2VuZGlmIC8qIFNDT19PU1I1MDQgKi8KLQotI2lmZGVmIGFlZ2lzCi0jaW5jbHVk ZSAiL3N5cy9pbnMvYmFzZS5pbnMuYyIKLSNpbmNsdWRlICIvc3lzL2lucy9lcnJvci5pbnMuYyIK LSNpbmNsdWRlICIvc3lzL2lucy9pb3MuaW5zLmMiCi0jaW5jbHVkZSAiL3N5cy9pbnMvc2lvLmlu cy5jIgotI2luY2x1ZGUgIi9zeXMvaW5zL3BhZC5pbnMuYyIKLSNpbmNsdWRlICIvc3lzL2lucy90 aW1lLmlucy5jIgotI2luY2x1ZGUgIi9zeXMvaW5zL3BmbS5pbnMuYyIKLSNpbmNsdWRlICIvc3lz L2lucy9wZ20uaW5zLmMiCi0jaW5jbHVkZSAiL3N5cy9pbnMvZWMyLmlucy5jIgotI2luY2x1ZGUg Ii9zeXMvaW5zL3R5cGVfdWlkcy5pbnMuYyIKLSNpbmNsdWRlIDxkZWZhdWx0X2FjbC5oPgotI3Vu ZGVmIFRJT0NFWENMCi0jdW5kZWYgRklPTlJFQUQKLSNlbmRpZiAvKiBhZWdpcyAqLwotCi0jaWZk ZWYgc3hhRTUwCQkJCS8qIFBGVSBDb21wYWN0IEEgU1gvQSBUSVNQIFYxMC9MNTAgKi8KLSN1bmRl ZiBGSU9OUkVBRAotI2VuZGlmIC8qIHN4YUU1MCAqLwotCi0vKiBUaGUgZm9sbG93aW5nICNkZWZp bmVzIGFyZSBjYXRjaC1hbGxzIGZvciB0aG9zZSBzeXN0ZW1zICovCi0vKiB0aGF0IGRpZG4ndCBo YXZlIG9yIGNvdWxkbid0IGZpbmQgPGZpbGUuaD4uLi4gKi8KLQotI2lmbmRlZiBGUkVBRAotI2Rl ZmluZSBGUkVBRCAweDAxCi0jZW5kaWYgLyogRlJFQUQgKi8KLQotI2lmbmRlZiBGV1JJVEUKLSNk ZWZpbmUgRldSSVRFIDB4MTAKLSNlbmRpZiAvKiBGV1JJVEUgKi8KLQotI2lmbmRlZiBPX1JET05M WQotI2RlZmluZSBPX1JET05MWSAwMDAKLSNlbmRpZiAvKiBPX1JET05MWSAqLwotCi0vKiBUaGlz IGlzIGZvciBhbmNpZW50IFVuaXhlcyB0aGF0IGRvbid0IGhhdmUgdGhlc2UgdHR5IHN5bWJvbHMg ZGVmaW5lZC4gKi8KLQotI2lmbmRlZiBQRU5ESU4KLSNkZWZpbmUgUEVORElOIElDQU5PTgotI2Vu ZGlmIC8qIFBFTkRJTiAqLwotI2lmbmRlZiBGTFVTSE8KLSNkZWZpbmUgRkxVU0hPIElDQU5PTgot I2VuZGlmIC8qIEZMVVNITyAqLwotI2lmbmRlZiBFWFRQUk9DCi0jZGVmaW5lIEVYVFBST0MgSUNB Tk9OCi0jZW5kaWYgLyogRVhUUFJPQyAqLwotCi0jaWZkZWYgU1ZPUlBPU0lYCi0vKgotICBNb2Rl bSBzaWduYWxzIGFyZSBhbHNvIGZvcmJpZGRlbiBpbiB0aGUgUE9TSVggd29ybGQuICBCdXQgc29t ZSBQT1NJWC1iYXNlZAotICBwbGF0Zm9ybXMgbGV0IHVzIGF0IHRoZW0gYW55d2F5IGlmIHdlIGtu b3cgd2hlcmUgdG8gbG9vay4KLSovCi0jaWZuZGVmIE5FRURNRE1ERUZTCi0vKiBEb2Vzbid0IHdv cmsgZm9yIExpbnV4ICovCi0jaWZkZWYgVU5JWFdBUkU3Ci0jZGVmaW5lIE5FRURNRE1ERUZTCi0j ZW5kaWYgLyogVU5JWFdBUkU3ICovCi0jZW5kaWYgLyogTkVFRE1ETURFRlMgKi8KLQotI2lmZGVm IE5FRURNRE1ERUZTCi0jaWZuZGVmIFRJT0NNR0VUCi0jZGVmaW5lIFRJT0NNR0VUICgoJ3QnPDw4 KXwyOSkKLSNlbmRpZiAvKiBUSU9DTUdFVCAqLwotCi0jaWZuZGVmIFRJT0NNX0RUUgotI2RlZmlu ZSBUSU9DTV9EVFIgMHgwMDAyCi0jZW5kaWYgLyogVElPQ01fRFRSICovCi0jaWZuZGVmIFRJT0NN X1JUUwotI2RlZmluZSBUSU9DTV9SVFMgMHgwMDA0Ci0jZW5kaWYgLyogVElPQ01fUlRTICovCi0j aWZuZGVmIFRJT0NNX0NUUwotI2RlZmluZSBUSU9DTV9DVFMgMHgwMDIwCi0jZW5kaWYgLyogVElP Q01fQ1RTICovCi0jaWZuZGVmIFRJT0NNX0NBUgotI2RlZmluZSBUSU9DTV9DQVIgMHgwMDQwCi0j ZW5kaWYgLyogVElPQ01fQ0FSICovCi0jaWZuZGVmIFRJT0NNX1JORwotI2RlZmluZSBUSU9DTV9S TkcgMHgwMDgwCi0jZW5kaWYgLyogVElPQ01fUk5HICovCi0jaWZuZGVmIFRJT0NNX0RTUgotI2Rl ZmluZSBUSU9DTV9EU1IgMHgwMTAwCi0jZW5kaWYgLyogVElPQ01fRFNSICovCi0jZW5kaWYgLyog TkVFRE1ETURFRlMgKi8KLSNlbmRpZiAvKiBTVk9SUE9TSVggKi8KLQotLyogRGVjbGFyYXRpb25z ICovCi0KLSNpZmRlZiBPWE9TCi0jdW5kZWYgVENHRVRBCi0jdW5kZWYgVENTRVRBCi0jdW5kZWYg VENTRVRBVwotI3VuZGVmIFRDU0VUQUYKLSNkZWZpbmUgVENHRVRBIFRDR0VUUwotI2RlZmluZSBU Q1NFVEEgVENTRVRTCi0jZGVmaW5lIFRDU0VUQVcgVENTRVRTVwotI2RlZmluZSBUQ1NFVEFGIFRD U0VUU0YKLSNkZWZpbmUgdGVybWlvIHRlcm1pb3MKLSNlbmRpZiAvKiBPWE9TICovCi0KLSNpZmRl ZiBTVk9SUE9TSVgJCQkvKiBBVCZUIFN5cyBWIG9yIFBPU0lYICovCi0jaWZkZWYgVU5JWFdBUkVQ T1NJWAkJCS8qIFVuaXhXYXJlIDcgUE9TSVggYnVpbGQgKi8KLS8qCi0gIEluIFVuaXh3YXJlIFBP U0lYIGJ1aWxkcywgPFtzeXMvXXRpbWUuaD4gcmVmdXNlcyB0byBkZWZpbmUgdGhlCi0gIHN0cnVj dHMgd2UgbmVlZCB0byBhY2Nlc3MgdGhlIGhpZ2hlciBzcGVlZHMsIHNvIHdlIGhhdmUgdG8gZG8g aXQKLSAgb3Vyc2VsdmVzLgotKi8KLXN0cnVjdCB0aW1ldmFsIHsKLSAgICBsb25nIHR2X3NlYzsK LSAgICBsb25nIHR2X3VzZWM7Ci19Owotc3RydWN0IHRpbWV6b25lIHsKLSAgICBpbnQgdHpfbWlu dXRlc3dlc3Q7Ci0gICAgaW50IHR6X2RzdHRpbWU7Ci19OwotI2VuZGlmIC8qIFVOSVhXQVJFUE9T SVggKi8KLSNlbmRpZiAvKiBTVk9SUE9TSVggKi8KLQotI2lmZGVmIF9fR05VQ19fCi0jaWZkZWYg WEVOSVgKLS8qCi0gIEJlY2F1c2UgWGVuaXggPHRpbWUuaD4gZG9lc24ndCBkZWNsYXJlIHRpbWUo KSBpZiB3ZSdyZSB1c2luZyBnY2MuCi0qLwotdGltZV90IHRpbWUoKTsKLSNlbmRpZiAvKiBYRU5J WCAqLwotI2VuZGlmIC8qIF9fR05VQ19fICovCi0KLS8qIFNwZWNpYWwgc3R1ZmYgZm9yIFY3IGlu cHV0IGJ1ZmZlciBwZWVraW5nICovCi0KLSNpZmRlZiAgVjcKLWludCBrbWVtWzJdID0geyAtMSwg LTF9OwotY2hhciAqaW5pdHJhd3EoKSwgKnFhZGRyWzJdPXswLDB9OwotI2RlZmluZSBDT04gMAot I2RlZmluZSBUVFkgMQotI2VuZGlmIC8qIFY3ICovCi0KLS8qIGRmdHR5IGlzIHRoZSBkZXZpY2Ug bmFtZSBvZiB0aGUgZGVmYXVsdCBkZXZpY2UgZm9yIGZpbGUgdHJhbnNmZXIgKi8KLS8qIGRmbG9j IGlzIDAgaWYgZGZ0dHkgaXMgdGhlIHVzZXIncyBjb25zb2xlIHRlcm1pbmFsLCAxIGlmIGFuIGV4 dGVybmFsIGxpbmUgKi8KLQotI2lmZGVmIEJFT1MKLSAgICBjaGFyICogZGZ0dHkgPSBOVUxMOwot ICAgIGNoYXIgKiBkZm1kbSA9ICJub25lIjsKLSAgICBpbnQgZGZsb2MgPSAwOyAgICAgICAgICAg ICAgICAgIC8qIHRoYXQgZ29lcyBpbiBsb2NhbCBtb2RlIGJ5IGRlZmF1bHQgKi8KLSNlbHNlCi0j aWZuZGVmIERGVFRZCi0jaWZkZWYgUFJPVlgxCi0gICAgY2hhciAqZGZ0dHkgPSAiL2Rldi9jb20x LmRvdXQiOyAvKiBPbmx5IGV4YW1wbGUgc28gZmFyIG9mIGEgc3lzdGVtICovCi0gICAgY2hhciAq ZGZtZG0gPSAibm9uZSI7Ci0gICAgaW50IGRmbG9jID0gMTsgICAgICAgICAgICAgICAgICAvKiB0 aGF0IGdvZXMgaW4gbG9jYWwgbW9kZSBieSBkZWZhdWx0ICovCi0jZWxzZQotICAgIGNoYXIgKmRm dHR5ID0gQ1RUTkFNOyAgICAgICAgICAgICAgIC8qIFJlbW90ZSBieSBkZWZhdWx0LCB1c2Ugbm9y bWFsICovCi0gICAgY2hhciAqZGZtZG0gPSAibm9uZSI7Ci0gICAgaW50IGRmbG9jID0gMDsgICAg ICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxpbmcgdGVybWluYWwgbmFtZS4gKi8KLSNlbmRp ZiAvKiBQUk9WWDEgKi8KLSNlbHNlCi0gICAgY2hhciAqZGZ0dHkgPSBERlRUWTsJCS8qIERlZmF1 bHQgbG9jYXRpb24gc3BlY2lmaWVkIG9uICovCi0gICAgY2hhciAqZGZtZG0gPSAibm9uZSI7CQkv KiBjb21tYW5kIGxpbmUuICovCi0gICAgaW50IGRmbG9jID0gMTsgICAgICAgICAgICAgICAgICAg ICAgLyogY29udHJvbGxpbmcgdGVybWluYWwgbmFtZS4gKi8KLSNlbmRpZiAvKiBERlRUWSAqLwot I2VuZGlmIC8qIEJFT1MgKi8KLQotI2RlZmluZSBDT05fUkVTIDAJCQkvKiBDb25zb2xlIHN0YXRl IGlzICJyZXNldCIgKi8KLSNkZWZpbmUgQ09OX0NCICAxCQkJLyogQ29uc29sZSBzdGF0ZSBpcyBD QlJFQUsgKi8KLSNkZWZpbmUgQ09OX0JJTiAyCQkJLyogQ29uc29sZSBzdGF0ZSBpcyBiaW5hcnkg Ki8KLSAgICBzdGF0aWMgaW50IGNvbnN0YXRlID0gQ09OX1JFUzsKLQotI2RlZmluZSBDT05JX1JF UyAwCQkJLyogQ29uc29sZSBpbnRlcnJ1cHRzIGFyZSAicmVzZXQiICovCi0jZGVmaW5lIENPTklf SU5UIDEJCQkvKiBDb25zb2xlIGludHRlcnVwdHMgYXJlIHNldCAqLwotI2RlZmluZSBDT05JX05P SSAyCQkJLyogQ29uc29sZSBpbnR0ZXJ1cHRzIGFyZSBkaXNhYmxlZCAqLwotICAgIHN0YXRpYyBp bnQgY29uaXN0YXRlID0gQ09OSV9SRVM7Ci0KLSNpZmRlZiBDS19TTUFMTAotI2RlZmluZSBDT05C VUZTSVogMTUKLSNlbHNlCi0jZGVmaW5lIENPTkJVRlNJWiAyNTUKLSNlbmRpZiAvKiBDS19TTUFM TCAqLwotICAgIHN0YXRpYyBjaGFyIGNvbmJ1ZltDT05CVUZTSVpdOwkvKiBDb25zb2xlIHJlYWRh aGVhZCBidWZmZXIgKi8KLSAgICBzdGF0aWMgaW50ICBjb25idWZuID0gMDsJCS8qIENoYXJzIGlu IHJlYWRhaGVhZCBidWZmZXIgKi8KLSAgICBzdGF0aWMgY2hhciAqY29uYnVmcCA9IGNvbmJ1ZjsJ LyogTmV4dCBjaGFyIGluIHJlYWRhaGVhZCBidWZmZXIgKi8KLQotICAgIGNoYXIgY3R0bmFtW0RF Vk5BTUxFTisxXSA9IHsgJ1wwJywgJ1wwJyB9OyAvKiBEZXRlcm1pbmVkIGF0IHJ1bnRpbWUgKi8K LQotI2lmZGVmIFJUVQotICAgIGludCBydHVfYnVnID0gMDsJCSAgICAvKiBzZXQgdG8gMSB3aGVu IHJldHVybmluZyBmcm9tIFNJR1RTVFAgKi8KLSNlbmRpZiAvKiBSVFUgKi8KLQotICAgIGludCBk ZnBydHkgPSBERUZQQVI7ICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgcGFyaXR5ICgwID0gbm9u ZSkgKi8KLSAgICBpbnQgdHRwcnR5ID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgcGFy aXR5IHRoYXQgaXMgaW4gdXNlLiAqLwotICAgIHN0YXRpYyBpbnQgdHRwbXNrID0gMHhmZjsJCS8q IFBhcml0eSBzdHJpcHBpbmcgbWFzay4gKi8KLSAgICBpbnQgdHRtZG0gPSAwOyAgICAgICAgICAg ICAgICAgICAgICAvKiBNb2RlbSBpbiB1c2UuICovCi0gICAgaW50IHR0Y2FyciA9IENBUl9BVVQ7 CQkvKiBDYXJyaWVyIGhhbmRsaW5nIG1vZGUuICovCi0gICAgaW50IGRmZmxvdyA9IEZMT19OT05F OwkJLyogRGVmYXVsdCBmbG93IGNvbnRyb2wgaXMgTk9ORSAqLwotICAgIGludCBiYWNrZ3JkID0g MDsgICAgICAgICAgICAgICAgICAgIC8qIEFzc3VtZSBpbiBmb3JlZ3JvdW5kIChubyAnJicgKSAq LwotI2lmZGVmIEZfU0VURkwKLSAgICBpbnQgaW5pZmxhZ3MgPSAtMTsJCQkvKiBmY250bCBmbGFn cyBmb3IgdHR5ZmQgKi8KLSNlbmRpZiAvKiBGX1NFVEZMICovCi0gICAgaW50IGZkZmxhZyA9IDA7 CQkJLyogRmxhZyBmb3IgcmVkaXJlY3RlZCBzdGRpbyAqLwotICAgIGludCB0dGZkZmxnID0gMDsJ CQkvKiBPcGVuIEZpbGUgZGVzY3JpcHRvciB3YXMgZ2l2ZW4gKi8KLSAgICBpbnQgdHZ0ZmxnID0g MDsJCQkvKiBGbGFnIHRoYXQgdHR2dCBoYXMgYmVlbiBjYWxsZWQgKi8KLSAgICBsb25nIHR0c3Bl ZWQgPSAtMUw7CQkJLyogRm9yIHNhdmluZyBzcGVlZCAqLwotICAgIGludCB0dGZsb3cgPSAtOTsJ CQkvKiBGb3Igc2F2aW5nIGZsb3cgKi8KLSAgICBpbnQgdHRsZCA9IC0xOwkJCS8qIExpbmUgZGlz Y2lwbGluZSAqLwotCi0jaWZkZWYgc29ueV9uZXdzCi0gICAgc3RhdGljIGludCBrbV9jb24gPSAt MTsJCS8qIEthbmppIG1vZGUgZm9yIGNvbnNvbGUgdHR5ICovCi0gICAgc3RhdGljIGludCBrbV9l eHQgPSAtMTsJCS8qIEthbmppIG1vZGUgZm9yIGV4dGVybmFsIGRldmljZSAqLwotI2VuZGlmIC8q IHNvbnlfbmV3cyAqLwotCi0jaWZkZWYgUEFSU0VOU0UKLSAgICBzdGF0aWMgaW50IG5lZWRwY2hr ID0gMTsJCS8qIE5lZWQgcGFyaXR5IGNoZWNrICovCi0jZWxzZQotICAgIHN0YXRpYyBpbnQgbmVl ZHBjaGsgPSAwOwotI2VuZGlmIC8qIFBBUlNFTlNFICovCi0KLSAgICBleHRlcm4gaW50IHN0b3Bi aXRzOwkJLyogU3RvcCBiaXRzICovCi0jaWZkZWYgSFdQQVJJVFkKLS8qCi0gIFVuZm9ydHVuYXRl bHkgd2UgbXVzdCBkbyB0aGlzIHdpdGggZ2xvYmFsIHZhcmlhYmxlcyByYXRoZXIgdGhhbiB0aHJv dWdoIHRoZQotICB0dC4uLigpIEFQSXMgdG8gYXZvaWQgY2hhbmdpbmcgdGhlIEFQSXMgYW5kIHRo ZSBtYW55IG1vZHVsZXMgdGhhdCB1c2UgdGhlbS4KLSAgSWYgaHdwYXJpdHkgIT0gMCwgdGhpcyBp bmRpY2F0ZXMgOCBkYXRhIGJpdHMgKyBwYXJpdHksIHJhdGhlciB0aGFuIDcgZGF0YQotICBiaXRz ICsgcGFyaXR5IG9yIDggZGF0YSBiaXRzIGFuZCBubyBwYXJpdHksIGFuZCBvdmVycmlkZXMgdGhl IHJlZ3VsYXIgcGFyaXR5Ci0gIHZhcmlhYmxlLCB3aGljaCBpcyBjb21tdW5pY2F0ZWQgdG8gdGhp cyBtb2R1bGUgdGhydSB0dHBrdCgpLCBhbmQgcmVwcmVzZW50ZWQKLSAgbG9jYWxseSBieSB0aGUg dHRwcnR5IHZhcmlhYmxlLgotKi8KLSAgICBleHRlcm4gaW50IGh3cGFyaXR5OwkJLyogSGFyZHdh cmUgcGFyaXR5ICovCi0jZW5kaWYgLyogSFdQQVJJVFkgKi8KLQotI2lmZGVmIFRDUFNPQ0tFVAot I2lmZGVmIFRDUF9OT0RFTEFZCi1zdGF0aWMgaW50IG5vZGVsYXlfc2F2ID0gLTE7Ci0jZW5kaWYg LyogVENQX05PREVMQVkgKi8KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLQotc3RhdGljIGludCBz aWdpbnRfaWduID0gMDsJCS8qIFNJR0lOVCBpcyBpZ25vcmVkICovCi0KLS8qCi0gIEhhdmluZyB0 aGlzIG1vZHVsZSByZWx5IG9uIGV4dGVybmFsIGdsb2JhbHMgaXMgYmFkLCBidXQgZml4aW5nIHRo aXMKLSAgcmVxdWlyZXMgb3ZlcmhhdWwgb2YgdGhlIGNrKnRpby5jIG1vZHVsZXMgZm9yIGFsbCB0 aGUgZGlmZmVyZW50IG9wZXJhdGluZwotICBzeXN0ZW1zIHN1cHBvcnRlZCBieSBDLUtlcm1pdC4g IExlZnQgZm9yIGEgZnV0dXJlIHJlbGVhc2UuCi0qLwotZXh0ZXJuIGludCB0dG5wcm90bzsJCQkv KiBEZWZpbmVkIGluIGNrY25ldC5jICovCi1leHRlcm4gaW50IHR0bmV0OwkJCS8qIERlZmluZWQg aW4gY2tjbmV0LmMgKi8KLWV4dGVybiBpbnQgbm9wdXNoLCB4ZnJjYW4sIHhmcmNociwgeGZybnVt OyAvKiBEZWZpbmVkIGluIGNrY21haS5jICovCi1leHRlcm4gaW50IHhzdXNwZW5kLCB3YXNjbG9z ZWQ7Ci1leHRlcm4gaW50IGluc2VydmVyLCBsb2NhbDsKLQotaW50IGNreGVjaCA9IDA7IC8qIDAg aWYgc3lzdGVtIG5vcm1hbGx5IGVjaG9lcyBjb25zb2xlIGNoYXJhY3RlcnMsIGVsc2UgMSAqLwot Ci1pbnQgY2ttYXhmaWxlcyA9IDA7CQkJLyogTWF4IG51bWJlciBvZiBvcGVuIGZpbGVzICovCi0K LSNpZmRlZiBDS19FTkNSWVBUSU9OCQkJLyogS2VyYmVyb3MgKi8KLSNpbmNsdWRlICJja3VhdGgu aCIKLWV4dGVybiBpbnQgbWVfZW5jcnlwdCwgdV9lbmNyeXB0OwotI2VuZGlmIC8qIENLX0VOQ1JZ UFRJT04gKi8KLQotLyogRGVjbGFyYXRpb25zIG9mIHZhcmlhYmxlcyBnbG9iYWwgd2l0aGluIHRo aXMgbW9kdWxlICovCi0KLSNpZmRlZiBUVExFQlVGCQkJCS8qIFNlZSBja2NuZXQuaCAqLwotaW50 IHR0cHVzaCA9IC0xOwotI2RlZmluZSBMRUJVRlNJWiA0MDk2Ci1zdGF0aWMgQ0hBUiBsZV9idWZb TEVCVUZTSVpdOwotc3RhdGljIGludCBsZV9zdGFydCA9IDAsIGxlX2VuZCA9IDAsIGxlX2RhdGEg PSAwOwotI2VuZGlmIC8qIFRUTEVCVUYgKi8KLQotI2RlZmluZSBNU0dCVUZfU0laRSAxMDI0CQkv KiBGb3IgZGVidWdnaW5nICovCi1zdGF0aWMgY2hhciBtc2didWZbTVNHQlVGX1NJWkVdOwotCi1z dGF0aWMgaW50IGdvdHNpZ3MgPSAwOwotCi1zdGF0aWMgdGltZV90IHRjb3VudCA9ICh0aW1lX3Qp MDsJLyogRWxhcHNlZCB0aW1lIGNvdW50ZXIgKi8KLQotc3RhdGljIFNJR1RZUCAoKnNhdmFsKSgp ICAgICA9IE5VTEw7CS8qIEZvciBzYXZpbmcgYWxhcm0oKSBoYW5kbGVyICovCi1zdGF0aWMgU0lH VFlQICgqc2F2cXVpdCkoKSAgID0gTlVMTDsJLyogYW5kIG90aGVyIHNpZ25hbCBoYW5kbGVycyAq LwotI2lmZGVmIFNJR1VTUjEKLXN0YXRpYyBTSUdUWVAgKCpzYXZ1c3IxKSgpICAgPSBOVUxMOwot I2VuZGlmIC8qIFNJR1VTUjEgKi8KLSNpZmRlZiBTSUdVU1IyCi1zdGF0aWMgU0lHVFlQICgqc2F2 dXNyMikoKSAgID0gTlVMTDsKLSNlbmRpZiAvKiBTSUdVU1IyICovCi0jaWZkZWYgU0lHUElQRQot c3RhdGljIFNJR1RZUCAoKnNhdnBpcGUpKCkgICA9IE5VTEw7Ci0jZW5kaWYgLyogU0lHUElQRSAq LwotI2lmZGVmIFNJR0RBTkdFUgotc3RhdGljIFNJR1RZUCAoKnNhdmRhbmdlcikoKSA9IE5VTEw7 Ci0jZW5kaWYgLyogU0lHREFOR0VSICovCi0KLSNpZm5kZWYgTk9KQwotc3RhdGljIFNJR1RZUCAo KmpjaGRscikoKSAgICA9IE5VTEw7CS8qIEZvciBjaGVja2luZyBzdXNwZW5kIGhhbmRsZXIgKi8K LSNlbmRpZiAvKiBOT0pDICovCi1zdGF0aWMgaW50IGpjc2hlbGwgPSAtMTsJCS8qIEFuZCBmbGFn IGZvciByZXN1bHQgKi8KLQotLyoKLSAgQlJFQUtOVUxTIGlzIGRlZmluZWQgZm9yIHN5c3RlbXMg dGhhdCBzaW11bGF0ZSBzZW5kaW5nIGEgQlJFQUsgc2lnbmFsCi0gIGJ5IHNlbmRpbmcgYSBidW5j aCBvZiBOVUwgY2hhcmFjdGVycyBhdCBsb3cgc3BlZWQuCi0qLwotI2lmZGVmIFBST1ZYMQotI2lm bmRlZiBCUkVBS05VTFMKLSNkZWZpbmUgQlJFQUtOVUxTCi0jZW5kaWYgLyogQlJFQUtOVUxTICov Ci0jZW5kaWYgLyogUFJPVlgxICovCi0KLSNpZmRlZiBWNwotI2lmbmRlZiBCUkVBS05VTFMKLSNk ZWZpbmUgQlJFQUtOVUxTCi0jZW5kaWYgLyogQlJFQUtOVUxTICovCi0jZW5kaWYgLyogVjcgKi8K LQotI2lmZGVmIEJSRUFLTlVMUwotc3RhdGljIGNoYXIJCQkJLyogQSBzdHJpbmcgb2YgbnVsbHMg Ki8KLSpicm51bHMgPSAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDBcMCI7Ci0jZW5kaWYgLyogQlJFQUtOVUxTICovCi0KLSNpZmRlZiBDS19QT1NJWF9T SUcJCQkvKiBMb25nanVtcCBidWZmZXJzICovCi1zdGF0aWMgc2lnam1wX2J1ZiBzamJ1ZjsJCS8q IFBPU0lYIHNpZ25hbCBoYW5kbGluZyAqLwotI2Vsc2UKLXN0YXRpYyBqbXBfYnVmIHNqYnVmOwot I2VuZGlmIC8qIENLX1BPU0lYX1NJRyAqLwotCi0jaWZkZWYgVjcKLXN0YXRpYyBqbXBfYnVmIGpq YnVmOwotI2VuZGlmIC8qIFY3ICovCi0KLS8qIHN0YXRpYyAqLwkJCQkvKiAoTm90IHN0YXRpYyBh bnkgbW9yZSkgKi8KLWludCB0dHlmZCA9IC0xOwkJCQkvKiBUVFkgZmlsZSBkZXNjcmlwdG9yICov Ci0KLWludCB0dHBpcGUgPSAwOwkJCQkvKiBORVRDTUQ6IFVzZSBwaXBlIGluc3RlYWQgb2YgdHR5 ZmQgKi8KLWludCB0dHB0eSAgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBORVRQVFk6 IFVzZSBwdHkgaW5zdGVhZCBvZiB0dGZ5ZCAqLwotCi0jaWZkZWYgTkVUUFRZCQkJCS8qIFRoZXNl IGFyZSBpbiBja3VwdHkuYyAqLwotZXh0ZXJuIFBJRF9UIHB0eV9mb3JrX3BpZDsKLWV4dGVybiBp bnQgcHR5X21hc3Rlcl9mZCwgcHR5X3NsYXZlX2ZkOwotI2VuZGlmCS8qIE5FVFBUWSAqLwotCi0j aWZkZWYgTkVUQ01ECi0jaWZkZWYgTkVUQ09OTgotc3RhdGljIGludCBwaXBlMFsyXSwgcGlwZTFb Ml07CQkvKiBQaXBlcyBmb3IgbmV0IGkvbyAqLwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLXN0YXRp YyBQSURfVCB0dHBpZCA9IDA7CQkJLyogUHJvY2VzcyBJRCBmb3IgZm9yayAqLwotc3RhdGljIGlu dCBmZGluLCBmZG91dDsJCQkvKiBGaWxlIGRlc2NyaXB0b3JzIGZvciBwaXBlICovCi1zdGF0aWMg RklMRSAqIHR0b3V0ID0gTlVMTDsJCS8qIEZpbGUgcG9pbnRlciBmb3Igb3V0cHV0IHBpcGUgKi8K LSNpZmRlZiBEQ0xGRE9QRU4KLS8qIGZkb3BlbigpIG5lZWRzIGRlY2xhcmluZyBiZWNhdXNlIGl0 J3Mgbm90IGRlY2xhcmVkIGluIDxzdGRpby5oPiAqLwotX1BST1RPVFlQKCBGSUxFICogZmRvcGVu LCAoaW50LCBjaGFyICopICk7Ci0jZW5kaWYgLyogRENMRkRPUEVOICovCi0jZW5kaWYgLyogTkVU Q01EICovCi0KLWV4dGVybiBpbnQgcGV4aXRzdGF0LCBxdWlldDsKLQotI2lmZGVmIFBsYW45Ci1p bnQgdHR5Y3RsZmQgID0gLTE7ICAgLyogVFRZIGNvbnRyb2wgY2hhbm5lbCAtIFdoYXQ/IFVOSVgg ZG9lc24ndCBoYXZlIG9uZT8gKi8KLWludCBjb25zY3RsZmQgPSAtMTsJCQkvKiBDb25zb2xlIGNv bnRyb2wgY2hhbm5lbCAqLwotaW50IG5vaXNlZmQgPSAtMTsJCQkvKiB0b25lIGNoYW5uZWwgKi8K LXN0YXRpYyBpbnQgdHR5bGFzdHNwZWVkID0gLTE7CQkvKiBTbyB3ZSBjYW4gbGllIGFib3V0IHRo ZSBzcGVlZCAqLwotI2VuZGlmIC8qIFBsYW45ICovCi0KLWludCB0ZWxuZXRmZCA9IDA7CQkJLyog RmlsZSBkZXNjcmlwdG9yIGlzIGZvciB0ZWxuZXQgKi8KLSNpZmRlZiBORVRDT05OCi1pbnQgeDI1 ZmQgPSAwOwkJCQkvKiBGaWxlIGRlc2NyaXB0b3IgaXMgZm9yIFguMjUgKi8KLSNlbmRpZiAvKiBO RVRDT05OICovCi0KLWNoYXIgbG9ja3BpZFsxNl0gPSB7ICdcMCcsICdcMCcgfTsJLyogUElEIHN0 b3JlZCBpbiBsb2NrZmlsZSwgYXMgc3RyaW5nICovCi0KLXN0YXRpYyBpbnQgbGtmID0gMCwgICAg ICAgICAgICAgICAgICAgICAvKiBMaW5lIGxvY2sgZmxhZyAqLwotICAgIGNnbWYgPSAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgdGhhdCBjb25zb2xlIG1vZGVzIHNhdmVkICov Ci0gICAgeGxvY2FsID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgdHR5 IGxvY2FsIG9yIHJlbW90ZSAqLwotICAgIGN1cmNhcnIgPSAwOwkJCS8qIENhcnJpZXIgbW9kZTog cmVxdWlyZS9pZ25vcmUuICovCi0KLXN0YXRpYyBpbnQgbmV0Y29ubiA9IDA7CQkJLyogMSBpZiBu ZXR3b3JrIGNvbm5lY3Rpb24gYWN0aXZlICovCi0KLXN0YXRpYyBjaGFyIGVzY2NocjsgICAgICAg ICAgICAgICAgICAgICAvKiBFc2NhcGUgb3IgYXR0biBjaGFyYWN0ZXIgKi8KLQotI2lmZGVmIENL X1NDTzMyVjQKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmIC8qIENLX1NDTzMyVjQgKi8K LQotI2lmZGVmIEhBVkVfVFYKLSAgICBzdGF0aWMgc3RydWN0IHRpbWV2YWwgdHY7CQkvKiBGb3Ig Z2V0dGluZyB0aW1lLCBmcm9tIHN5cy90aW1lLmggKi8KLSNlbmRpZiAvKiBIQVZFX1RWICovCi0j aWZkZWYgSEFWRV9UWgotICAgIHN0YXRpYyBzdHJ1Y3QgdGltZXpvbmUgdHo7Ci0jZW5kaWYgLyog SEFWRV9UWiAqLwotCi0jaWZkZWYgT1NGCi0gICAgc3RhdGljIHN0cnVjdCB0aW1lYiBmdHA7ICAg ICAgICAgICAgLyogQW5kIGZyb20gc3lzL3RpbWViLmggKi8KLSNlbmRpZiAvKiBPU0YgKi8KLQot I2lmZGVmIEJTRDI5Ci0gICAgc3RhdGljIGxvbmcgeGNsb2NrOwkJCS8qIEZvciBnZXR0aW5nIHRp bWUgZnJvbSBzeXMvdGltZS5oICovCi0gICAgc3RhdGljIHN0cnVjdCB0aW1lYiBmdHA7ICAgICAg ICAgICAgLyogQW5kIGZyb20gc3lzL3RpbWViLmggKi8KLSNlbmRpZiAvKiBCU0QyOSAqLwotCi0j aWZkZWYgQlNENDEKLSAgICBzdGF0aWMgbG9uZyB4Y2xvY2s7CQkJLyogRm9yIGdldHRpbmcgdGlt ZSBmcm9tIHN5cy90aW1lLmggKi8KLSAgICBzdGF0aWMgc3RydWN0IHRpbWViIGZ0cDsgICAgICAg ICAgICAvKiBBbmQgZnJvbSBzeXMvdGltZWIuaCAqLwotI2VuZGlmIC8qIEJTRDQxICovCi0KLSNp ZmRlZiBCRUxMVjEwCi0gICAgc3RhdGljIGxvbmcgeGNsb2NrOwkJCS8qIEZvciBnZXR0aW5nIHRp bWUgZnJvbSBzeXMvdGltZS5oICovCi0gICAgc3RhdGljIHN0cnVjdCB0aW1lYiBmdHA7ICAgICAg ICAgICAgLyogQW5kIGZyb20gc3lzL3RpbWViLmggKi8KLSNlbmRpZiAvKiBCRUxMVjEwICovCi0K LSNpZmRlZiBGVDIxCi0gICAgc3RhdGljIGxvbmcgeGNsb2NrOwkJCS8qIEZvciBnZXR0aW5nIHRp bWUgZnJvbSBzeXMvdGltZS5oICovCi0gICAgc3RhdGljIHN0cnVjdCB0aW1lYiBmdHA7ICAgICAg ICAgICAgLyogQW5kIGZyb20gc3lzL3RpbWViLmggKi8KLSNlbmRpZiAvKiBGVDIxICovCi0KLSNp ZmRlZiBUT1dFUjEKLSAgICBzdGF0aWMgbG9uZyB4Y2xvY2s7CQkJLyogRm9yIGdldHRpbmcgdGlt ZSBmcm9tIHN5cy90aW1lLmggKi8KLSAgICBzdGF0aWMgc3RydWN0IHRpbWViIGZ0cDsJCS8qIEFu ZCBmcm9tIHN5cy90aW1lYi5oICovCi0jZW5kaWYgLyogVE9XRVIxICovCi0KLSNpZmRlZiBDT0hF UkVOVAotICAgIHN0YXRpYyBsb25nIHhjbG9jazsJCQkvKiBGb3IgZ2V0dGluZyB0aW1lIGZyb20g c3lzL3RpbWUuaCAqLwotICAgIHN0YXRpYyBzdHJ1Y3QgdGltZWIgZnRwOwkJLyogQW5kIGZyb20g c3lzL3RpbWViLmggKi8KLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotCi0jaWZkZWYgVjcKLSAgICBz dGF0aWMgbG9uZyB4Y2xvY2s7Ci0jZW5kaWYgLyogVjcgKi8KLQotLyogc2d0dHkvdGVybWlvIGlu Zm9ybWF0aW9uLi4uICovCi0KLSNpZmRlZiBCU0Q0NE9SUE9TSVgJCQkvKiBQT1NJWCBvciBCU0Q0 NCAqLwotICBzdGF0aWMgc3RydWN0IHRlcm1pb3MKLSAgICB0dG9sZCwgdHRyYXcsIHR0dHZ0LCB0 dGN1ciwKLSAgICBjY29sZCwgY2NyYXcsIGNjY2JyazsKLSNlbHNlCQkJCQkvKiBCU0QsIFY3LCBl dGMgKi8KLQotI2lmZGVmIENPSEVSRU5UCQkJCS8qIEhhY2sgYWxlcnQuLi4gKi8KLSNkZWZpbmUg QVRUU1YKLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotCi0jaWZkZWYgQVRUU1YKLSAgc3RhdGljIHN0 cnVjdCB0ZXJtaW8gdHRvbGQgPSB7MH07CS8qIEluaXQnZCBmb3Igd29yZCBhbGlnbm1lbnQsICov Ci0gIHN0YXRpYyBzdHJ1Y3QgdGVybWlvIHR0cmF3ID0gezB9OwkvKiB3aGljaCBpcyBpbXBvcnRh bnQgZm9yIHNvbWUgKi8KLSAgc3RhdGljIHN0cnVjdCB0ZXJtaW8gdHR0dnQgPSB7MH07CS8qIHN5 c3RlbXMsIGxpa2UgWmlsb2cuLi4gKi8KLSAgc3RhdGljIHN0cnVjdCB0ZXJtaW8gdHRjdXIgPSB7 MH07Ci0gIHN0YXRpYyBzdHJ1Y3QgdGVybWlvIGNjb2xkID0gezB9OwotICBzdGF0aWMgc3RydWN0 IHRlcm1pbyBjY3JhdyA9IHswfTsKLSAgc3RhdGljIHN0cnVjdCB0ZXJtaW8gY2NjYnJrID0gezB9 OwotI2Vsc2UKLSAgc3RhdGljIHN0cnVjdCBzZ3R0eWIgICAgICAgICAgICAgICAgICAvKiBzZ3R0 eSBpbmZvLi4uICovCi0gICAgdHRvbGQsIHR0cmF3LCB0dHR2dCwgdHRjdXIsIAkvKiBmb3IgY29t bXVuaWNhdGlvbiBsaW5lICovCi0gICAgY2NvbGQsIGNjcmF3LCBjY2Nicms7CQkvKiBhbmQgZm9y IGNvbnNvbGUgKi8KLSNpZmRlZiBCRUxMVjEwCi0gIHN0YXRpYyBzdHJ1Y3QgdHR5ZGV2YgkJCS8q IERldmljZSBpbmZvLi4uICovCi0gICAgdGRvbGQsIHRkY3VyOwkJCS8qIGZvciBjb21tdW5pY2F0 aW9uIGRldmljZSAqLwotI2VuZGlmIC8qIEJFTExWMTAgKi8KLSNpZmRlZiBUSU9DR0VUQwotICBz dGF0aWMgc3RydWN0IHRjaGFycyB0Y2hvbGQsIHRjaG5vaTsKLQotICBzdGF0aWMgaW50IHRjaGFy ZjsKLSNlbmRpZiAvKiBUSU9DR0VUQyAqLwotI2lmZGVmIFRJT0NHTFRDCi0gIHN0YXRpYyBzdHJ1 Y3QgbHRjaGFycyBsdGNob2xkLCBsdGNobm9pOwotICBzdGF0aWMgaW50IGx0Y2hhcmY7Ci0jZW5k aWYgLyogVElPQ0dMVEMgKi8KLSAgaW50IGxtb2RlZiA9IDA7CQkJLyogTG9jYWwgbW9kZXMgKi8K LSAgaW50IGxtb2RlID0gMDsKLSNlbmRpZiAvKiBBVFRTViAqLwotI2VuZGlmIC8qIEJTRDQ0T1JQ T1NJWCAqLwotCi0jaWZkZWYgQ09NTUVOVAotLyogSXQgcGlja3MgdXAgdGhlIHNwZWVkcyBidXQg dGhleSBkb24ndCB3b3JrICovCi0jaWZkZWYgVU5JWFdBUkUJCQkJLyogRm9yIGhpZ2hlciBzZXJp YWwgc3BlZWRzICovCi0jaWZkZWYgVVc3CQkJCS8qIGluIFVuaXh3YXJlIDcuMCAqLwotI2luY2x1 ZGUgPHN5cy9hc3ljLmg+CQkJLyogVGhpcyBwaWNrcyB1cCA1NzYwMCBhbmQgMTE1MjAwICovCi0j ZW5kaWYgLyogVVc3ICovCi0jZW5kaWYgLyogVU5JWFdBUkUgKi8KLSNlbmRpZiAvKiBDT01NRU5U ICovCi0KLSNpZmRlZiBQUk9WWDEKLSAgc3RhdGljIHN0cnVjdCBzZ3R0eWIgdHRidWY7Ci0jZW5k aWYgLyogUFJPVlgxICovCi0KLSNpZmRlZiB1bHRyaXgKLS8qIGRvIHdlIHJlYWxseSBuZWVkIHRo aXM/ICovCi0gIHN0YXRpYyBzdHJ1Y3Qgc2d0dHliIHZhbmlsbGE7Ci0jZW5kaWYgLyogdWx0cml4 ICovCi0KLSNpZmRlZiBBVFQ3MzAwCi1zdGF0aWMgaW50IGF0dG1vZGVtID0gMDsgICAgICAgICAg ICAgICAgLyogQVRUNzMwMCBpbnRlcm5hbC1tb2RlbSBzdGF0dXMgKi8KLXN0cnVjdCB1cGRhdGEg ZGlhbGVyID0gezB9OwkJLyogQ29uZGl0aW9uIGRpYWxlciBmb3IgZGF0YSBjYWxsICovCi0jZW5k aWYgLyogQVRUNzMwMCAqLwotCi0jaWZuZGVmIE5PVVVDUAotI2RlZmluZSBGTEZOQU1MIDEyOAot I2lmbmRlZiBVU0VUVFlMT0NLCi0jaWZkZWYgUlRBSVgKLWNoYXIgbGtmbGZuW0ZMRk5BTUxdID0g eyAnXDAnLCAnXDAnIH07CS8qIGFuZCBwb3NzaWJsZSBsaW5rIHRvIGl0ICovCi0jZW5kaWYgLyog UlRBSVggKi8KLWNoYXIgbG9jazJbRkxGTkFNTF0gPSAgeyAnXDAnLCAnXDAnIH07CS8qIE5hbWUg b2Ygc2Vjb25kIGxvY2tmaWxlICovCi0jZW5kaWYgLyogVVNFVFRZTE9DSyAqLwotI2Vsc2UKLSNk ZWZpbmUgRkxGTkFNTCA3Ci0jZW5kaWYgLyogTk9VVUNQICovCi1jaGFyIGZsZm5hbVtGTEZOQU1M KzFdID0geyAnXDAnLCAnXDAnIH07IC8qIFVVQ1AgbG9jayBmaWxlIHBhdGggbmFtZSAqLwotCi1p bnQgaGFzbG9jayA9IDA7CQkJLyogPTEgaWYgdGhpcyBrZXJtaXQgbG9ja2VkIHV1Y3AgKi8KLQot I2lmbmRlZiBPWE9TCi0jaWZkZWYgU1ZPUlBPU0lYCi1zdGF0aWMgaW50IGNvbmVzYyA9IDA7ICAg ICAgICAgICAgICAgICAgLyogc2V0IHRvIDEgaWYgZXNjIGNoYXIgKF5cKSB0eXBlZCAqLwotI2Vs c2UKLSNpZmRlZiBWNwotc3RhdGljIGludCBjb25lc2MgPSAwOwotI2Vsc2UKLSNpZmRlZiBDNzAK LXN0YXRpYyBpbnQgY29uZXNjID0gMDsKLSNlbmRpZiAvKiBDNzAgKi8KLSNlbmRpZiAvKiBWNyAq LwotI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwotI2VuZGlmIC8qIE9YT1MgKi8KLQotLyogTG9jYWwg Y29weSBvZiBjb21tIGRldmljZSBuYW1lIG9yIG5ldHdvcmsgaG9zdCAqLwotc3RhdGljIGNoYXIg dHRubXN2W0RFVk5BTUxFTisxXSA9IHsgJ1wwJywgJ1wwJyB9OwotI2lmZGVmIFVTRVRUWUxPQ0sK LXN0YXRpYyBjaGFyIGxvY2tuYW1lW0RFVk5BTUxFTisxXTsJLyogRGl0dG8sIHRoZSBwYXJ0IGFm dGVyICIvZGV2LyIuICovCi0jZW5kaWYgLyogVVNFVFRZTE9DSyAqLwotCi0jaWZkZWYgYWVnaXMK LXN0YXRpYyBzdGF0dXNfJHQgc3Q7ICAgICAgICAgICAgICAgICAgICAvKiBlcnJvciBzdGF0dXMg cmV0dXJuIHZhbHVlICovCi1zdGF0aWMgc2hvcnQgY29uY3JwID0gMDsgICAgICAgICAgICAgICAg LyogdHJ1ZSBpZiBjb25zb2xlIGlzIENSUCBwYWQgKi8KLXN0YXRpYyB1aWRfJHQgdHR5dWlkOyAg ICAgICAgICAgICAgICAgICAvKiB0dHkgdHlwZSB1aWQgKi8KLXN0YXRpYyB1aWRfJHQgY29udWlk OyAgICAgICAgICAgICAgICAgICAvKiBzdGRvdXQgdHlwZSB1aWQgKi8KLQotLyogQVBPTExPIEFl Z2lzIG1haW4oKQotICogZXN0YWJsaXNoIGFjbCB1c2FnZSBhbmQgY2xlYW51cCBoYW5kbGluZwot ICogICAgdGhpcyBtYWtlcyBzdXJlIHRoYXQgQ1JQIHBhZHMKLSAqICAgIGdldCByZXN0b3JlZCB0 byBhIHVzYWJsZSBtb2RlCi0gKi8KLW1haW4oYXJnYyxhcmd2KSBpbnQgYXJnYzsgY2hhciAqKmFy Z3Y7IHsKLSAgICAgICAgc3RhdHVzXyR0IHN0YXR1czsKLSAgICAgICAgcGZtXyRjbGVhbnVwX3Jl YyBkaXJ0eTsKLQotICAgICAgICBQSURfVCBwaWQgPSBnZXRwaWQoKTsKLQotICAgICAgICAvKiBh Y2wgdXNhZ2UgYWNjb3JkaW5nIHRvIGludm9raW5nIGVudmlyb25tZW50ICovCi0gICAgICAgIGRl ZmF1bHRfYWNsKFVTRV9ERUZFTlYpOwotCi0gICAgICAgIC8qIGVzdGFibGlzaCBhIGNsZWFudXAg Y29udGludWF0aW9uICovCi0gICAgICAgIHN0YXR1cyA9IHBmbV8kY2xlYW51cChkaXJ0eSk7Ci0g ICAgICAgIGlmIChzdGF0dXMuYWxsICE9IHBmbV8kY2xlYW51cF9zZXQpIHsKLSAgICAgICAgICAg ICAgICAvKiBvbmx5IGhhbmRsZSBmYXVsdHMgZm9yIHRoZSBvcmlnaW5hbCBwcm9jZXNzICovCi0g ICAgICAgICAgICAgICAgaWYgKHBpZCA9PSBnZXRwaWQoKSAmJiBzdGF0dXMuYWxsID4gcGdtXyRt YXhfc2V2ZXJpdHkpIHsKLQkJICAgIC8qIGJsZXcgdXAgaW4gbWFpbiBwcm9jZXNzICovCi0JCSAg ICBzdGF0dXNfJHQgcXVvOwotCQkgICAgcGZtXyRjbGVhbnVwX3JlYyBjbGVhbjsKLQotCQkgICAg LyogcmVzdG9yZSB0aGUgY29uc29sZSBpbiBhbnkgY2FzZSAqLwotCQkgICAgY29ucmVzKCk7Ci0K LQkJICAgIC8qIGF0dGVtcHQgYSBjbGVhbiBleGl0ICovCi0JCSAgICBkZWJ1ZyhGMTAxLCAiY2xl YW51cCBmYXVsdCBzdGF0dXMiLCAiIiwgc3RhdHVzLmFsbCk7Ci0KLQkJICAgIC8qIGRvZXhpdCgp LCB0aGVuIHNlbmQgc3RhdHVzIHRvIGNvbnRpbnVhdGlvbiAqLwotCQkgICAgcXVvID0gcGZtXyRj bGVhbnVwKGNsZWFuKTsKLQkJICAgIGlmIChxdW8uYWxsID09IHBmbV8kY2xlYW51cF9zZXQpCi0J CSAgICAgIGRvZXhpdChwZ21fJHByb2dyYW1fZmF1bHRlZCwtMSk7Ci0JCSAgICBlbHNlIGlmIChx dW8uYWxsID4gcGdtXyRtYXhfc2V2ZXJpdHkpCi0JCSAgICAgIHBmbV8kc2lnbmFsKHF1byk7IC8q IGJsZXcgdXAgaW4gZG9leGl0KCkgKi8KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgLyogc2VuZCB0byB0aGUgb3JpZ2luYWwgY29udGludWF0aW9uICovCi0gICAgICAgICAgICAg ICAgcGZtXyRzaWduYWwoc3RhdHVzKTsKLSAgICAgICAgICAgICAgICAvKk5PVFJFQUNIRUQqLwot CSAgICB9Ci0gICAgICAgIHJldHVybihja2NtYWkoYXJnYywgYXJndikpOwotfQotI2VuZGlmIC8q IGFlZ2lzICovCi0KLS8qIEFOU0ktc3R5bGUgcHJvdG90eXBlcyBmb3IgaW50ZXJuYWwgZnVuY3Rp b25zLiAqLwotLyogRnVuY3Rpb25zIHVzZWQgb3V0c2lkZSB0aGlzIG1vZHVsZSBhcmUgcHJvdG90 eXBlZCBpbiBja2NrZXIuaC4gKi8KLQotI2lmZGVmIGFwb2xsbwotX1BST1RPVFlQKCBTSUdUWVAg dGltZXJoLCAoKSApOwotX1BST1RPVFlQKCBTSUdUWVAgY2N0cmFwLCAoKSApOwotX1BST1RPVFlQ KCBTSUdUWVAgZXNjdHJwLCAoKSApOwotX1BST1RPVFlQKCBTSUdUWVAgc2lnX2lnbiwgKCkgKTsK LSNlbHNlCi1fUFJPVE9UWVAoIFNJR1RZUCB0aW1lcmgsIChpbnQpICk7Ci1fUFJPVE9UWVAoIFNJ R1RZUCBjY3RyYXAsIChpbnQpICk7Ci1fUFJPVE9UWVAoIFNJR1RZUCBlc2N0cnAsIChpbnQpICk7 Ci0jZW5kaWYgLyogYXBvbGxvICovCi1fUFJPVE9UWVAoIGludCBkb19vcGVuLCAoY2hhciAqKSAp OwotX1BST1RPVFlQKCBzdGF0aWMgaW50IGluX2NoaywgKGludCwgaW50KSApOwotX1BST1RPVFlQ KCBzdGF0aWMgaW50IHR0cnBpZCwgKGNoYXIgKikgKTsKLV9QUk9UT1RZUCggc3RhdGljIGludCB0 dGNoa3BpZCwgKGNoYXIgKikgKTsKLV9QUk9UT1RZUCggc3RhdGljIGludCB0dGxvY2ssIChjaGFy ICopICk7Ci1fUFJPVE9UWVAoIHN0YXRpYyBpbnQgdHR1bmxjaywgKHZvaWQpICk7Ci1fUFJPVE9U WVAoIHN0YXRpYyBWT0lEIHNpZ2NobGRfaGFuZGxlciwgKGludCkgKTsKLV9QUk9UT1RZUCggaW50 IG15Z2V0YnVmLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IG15ZmlsbGJ1ZiwgKHZvaWQpICk7 Ci1fUFJPVE9UWVAoIFZPSUQgY29uYmd0LCAoaW50KSApOwotI2lmZGVmIEFDVUNOVFJMCi1fUFJP VE9UWVAoIFZPSUQgYWN1Y250cmwsIChjaGFyICosIGNoYXIgKikgKTsKLSNlbmRpZiAvKiBBQ1VD TlRSTCAqLwotCi0jaWZkZWYgQlNENDRPUlBPU0lYCi1fUFJPVE9UWVAoIGludCBjYXJyY3RsLCAo c3RydWN0IHRlcm1pb3MgKiwgaW50KSApOwotI2Vsc2UKLSNpZmRlZiBBVFRTVgotX1BST1RPVFlQ KCBpbnQgY2FycmN0bCwgKHN0cnVjdCB0ZXJtaW8gKiwgaW50KSApOwotI2Vsc2UKLV9QUk9UT1RZ UCggaW50IGNhcnJjdGwsIChzdHJ1Y3Qgc2d0dHliICosIGludCkgKTsKLSNlbmRpZiAvKiBBVFRT ViAqLwotI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLwotCi0jaWZkZWYgQVRUNzMwMAotX1BST1RP VFlQKCBpbnQgYXR0ZGlhbCwgKGNoYXIgKiwgbG9uZywgY2hhciAqKSApOwotX1BST1RPVFlQKCBp bnQgb2ZmZ2V0dHksIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIGludCBvbmdldHR5LCAoY2hhciAq KSApOwotI2VuZGlmIC8qIEFUVDczMDAgKi8KLQotI2lmZGVmIEJFT1NPUkJFQk9YCi0jaWZkZWYg U0VMRUNUCi0gICAgLyogQmVPUyBpcyBub3QgY2FwYWJsZSBvZiB1c2luZyBTRUxFQ1Qgb24gYW55 dGhpbmcgYnV0IHNvY2tldHMgKi8KLSN1bmRlZiBTRUxFQ1QKLSNlbmRpZiAvKiBTRUxFQ1QgKi8K LSNpbmNsdWRlIDxrZXJuZWwvT1MuaD4KLS8qICNpZmRlZiBCRV9EUl83ICovCi1zdGF0aWMgZG91 YmxlIHRpbWVfc3RhcnRlZCA9IDAuMDsKLXN0cnVjdCBBTEFSTV9TVFJVQ1QgewotICAgIHRocmVh ZF9pZCB0aHJlYWQ7Ci0gICAgaW50IHRpbWU7Ci19Owotc3RhdGljIHRocmVhZF9pZCBhbGFybV90 aHJlYWQgPSAtMTsKLXN0YXRpYyBzdHJ1Y3QgQUxBUk1fU1RSVUNUIGFsYXJtX3N0cnVjdDsKLV9Q Uk9UT1RZUCggbG9uZyBkb19hbGFybSwgKHZvaWQgKikgKTsKLV9QUk9UT1RZUCggdW5zaWduZWQg aW50IGFsYXJtLCAodW5zaWduZWQgaW50KSApOwotX1BST1RPVFlQKCB2b2lkIGFsYXJtX2V4cGly ZWQsICh2b2lkKSApOwotLyogI2VuZGlmICovIC8qIEJFX0RSXzcgKi8KLSNlbmRpZiAvKiBCRU9T T1JCRUJPWCAqLwotCi0jaWZuZGVmIHh1bmNoYXIKLSNkZWZpbmUgeHVuY2hhcihjaCkgKCgoY2gp IC0gMzIgKSAmIDB4RkYgKQkvKiBDaGFyYWN0ZXIgdG8gbnVtYmVyICovCi0jZW5kaWYgLyogeHVu Y2hhciAqLwotCi0jaWZkZWYgQ0tfQU5TSUMKLXN0YXRpYyBjaGFyICoKLXh4bGFzdChjaGFyICpz LCBjaGFyIGMpCi0jZWxzZQotc3RhdGljIGNoYXIgKgoteHhsYXN0KHMsYykgY2hhciAqczsgY2hh ciBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB4eGxhc3QgKi8gewkJLyogIExhc3Qgb2Nj dXJyZW5jZSBvZiBjaGFyYWN0ZXIgYyBpbiBzdHJpbmcgcy4gKi8KLSAgICBpbnQgaTsKLSAgICBm b3IgKGkgPSAoaW50KXN0cmxlbihzKTsgaSA+IDA7IGktLSkKLSAgICAgIGlmIChzW2ktMV0gPT0g YyApIHJldHVybihzICsgKGkgLSAxKSk7Ci0gICAgcmV0dXJuKE5VTEwpOwotfQotCi0vKiBUaW1l b3V0IGhhbmRsZXIgZm9yIGNvbW11bmljYXRpb24gbGluZSBpbnB1dCBmdW5jdGlvbnMgKi8KLQot LypBUkdTVVNFRCovCi1TSUdUWVAKLXRpbWVyaChmb28pIGludCBmb287IHsKLSAgICB0dGltb2Zm KCk7Ci0jaWZkZWYgQkVPU09SQkVCT1gKLS8qICNpZmRlZiBCRV9EUl83ICovCi0gICAgYWxhcm1f ZXhwaXJlZCgpOwotLyogI2VuZGlmICovIC8qIEJFX0RSXzcgKi8KLSNlbmRpZiAvKiBCRU9TT1JC RUJPWCAqLwotI2lmZGVmIENLX1BPU0lYX1NJRwotICAgIHNpZ2xvbmdqbXAoc2pidWYsMSk7Ci0j ZWxzZQotICAgIGxvbmdqbXAoc2pidWYsMSk7Ci0jZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCi19 Ci0KLS8qQVJHU1VTRUQqLwotU0lHVFlQCi14dGltZXJoKGZvbykgaW50IGZvbzsgewkJCS8qIExp a2UgdGltZXJoKCkgYnV0IGRvZXMgKi8KLSNpZmRlZiBCRU9TT1JCRUJPWAkJCS8qIG5vdCByZXNl dCB0aGUgdGltZXIgaXRzZWxmICovCi0vKiAjaWZkZWYgQkVfRFJfNyAqLwotICAgIGFsYXJtX2V4 cGlyZWQoKTsKLS8qICNlbmRpZiAqLyAvKiBCRV9EUl83ICovCi0jZW5kaWYgLyogQkVPU09SQkVC T1ggKi8KLSNpZmRlZiBDS19QT1NJWF9TSUcKLSAgICBzaWdsb25nam1wKHNqYnVmLDEpOwotI2Vs c2UKLSAgICBsb25nam1wKHNqYnVmLDEpOwotI2VuZGlmIC8qIENLX1BPU0lYX1NJRyAqLwotfQot Ci0KLS8qIENvbnRyb2wtQyB0cmFwIGZvciBjb21tdW5pY2F0aW9uIGxpbmUgaW5wdXQgZnVuY3Rp b25zICovCi0KLWludCBjY19pbnQ7CQkJCS8qIEZsYWcgKi8KLVNJR1RZUCAoKiBvY2N0KSgpOwkJ CS8qIEZvciBzYXZpbmcgb2xkIFNJR0lOVCBoYW5kbGVyICovCi0KLS8qQVJHU1VTRUQqLwotU0lH VFlQCi1jY3RyYXAoZm9vKSBpbnQgZm9vOyB7CQkJLyogTmVlZHMgYXJnIGZvciBBTlNJIEMgKi8K LSAgY2NfaW50ID0gMTsJCQkJLyogc2lnbmFsKCkgcHJvdG90eXBlLiAqLwotICByZXR1cm47Ci19 Ci0KLS8qICBTIFkgUyBJIE4gSSBUICAtLSAgU3lzdGVtLWRlcGVuZGVudCBwcm9ncmFtIGluaXRp YWxpemF0aW9uLiAgKi8KLQotLyoKLSAqIHR0Z3dzaXooKSByZXR1cm5zOgotICoJMSAgICB0dF9y b3dzIGFuZCB0dF9jb2xzIGFyZSBrbm93biwgYm90aCBhbHRlcmVkLCBib3RoID4gMAotICoJMCAg ICB0dF9yb3dzIGFuZC9vciB0dF9jb2xzIGFyZSBrbm93biwgYm90aCBhbHRlcmVkLCBvbmUgb3Ig Ym90aCA8PSAwCi0gKgktMSAgIHR0X3Jvd3MgYW5kIHR0X2NvbHMgYXJlIHVua25vd24gYW5kIHVu YWx0ZXJlZAotICovCi0KLWV4dGVybiBpbnQgdHRfcm93cywgdHRfY29sczsKLQotc3RhdGljIGlu dAoteHR0Z3dzaXooKSB7Ci0gICAgY2hhciAqcDsKLSAgICBpbnQgcm93cyA9IDAsIGNvbHMgPSAw OwotICAgIHAgPSBnZXRlbnYoIkxJTkVTIik7Ci0gICAgZGVidWcoRjExMCwieHR0Z3dzaXogTElO RVMiLHAsMCk7Ci0gICAgaWYgKHApIHsKLQlyb3dzID0gYXRvbChwKTsKLQlpZiAocm93cyA+IDAp IHsKLQkgICAgcCA9IGdldGVudigiQ09MVU1OUyIpOwotCSAgICBkZWJ1ZyhGMTEwLCJ4dHRnd3Np eiBDT0xVTU5TIixwLDApOwotCSAgICBpZiAocCkgewotCQljb2xzID0gYXRvbChwKTsKLQkJaWYg KGNvbHMgPiAwKSB7Ci0JCSAgICB0dF9yb3dzID0gcm93czsKLQkJICAgIHR0X2NvbHMgPSBjb2xz OwotCQkgICAgcmV0dXJuKDEpOwotCQl9Ci0JCXJldHVybigwKTsKLQkgICAgfQotCX0KLSAgICB9 Ci0gICAgcmV0dXJuKC0xKTsKLX0KLQotI2lmZGVmIFRUTEVCVUYKLVZPSUQKLWxlX2luaXQoKSB7 CQkJCS8qIExvY2FsRWNob0luaXQoKSAqLwotICAgIGludCBpOwotICAgIGZvciAoaSA9IDA7IGkg PCBMRUJVRlNJWjsgaSsrKQotICAgICAgbGVfYnVmW2ldID0gJ1wwJzsKLSAgICBsZV9zdGFydCA9 IDA7Ci0gICAgbGVfZW5kID0gMDsKLSAgICBsZV9kYXRhID0gMDsKLX0KLQotVk9JRAotbGVfY2xl YW4oKSB7CQkJCS8qIExvY2FsRWNob0NsZWFudXAoKSAqLwotICAgIGxlX2luaXQoKTsKLSAgICBy ZXR1cm47Ci19Ci0KLWludAotbGVfaW5idWYoKSB7Ci0gICAgaW50IHJjID0gMDsKLSAgICBpZiAo bGVfc3RhcnQgIT0gbGVfZW5kKSB7Ci0JcmMgPSAobGVfZW5kIC0KLQkgICAgICBsZV9zdGFydCAr Ci0JICAgICAgTEVCVUZTSVopICUgTEVCVUZTSVo7Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsImxl X2luYnVmIiwiY2hhcnMgd2FpdGluZyIscmMpOwotICAgIHJldHVybihyYyk7Ci19Ci0KLWludAot I2lmZGVmIENLX0FOU0lDCi1sZV9wdXRjaGFyKENIQVIgY2gpCi0jZWxzZQotbGVfcHV0Y2hhcihj aCkgQ0hBUiBjaDsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogbGVfcHV0Y2hhciAqLyB7Ci0j aWZkZWYgQ09NTUVOVAotICAgIC8qIEluIFVOSVggd2UgZG8gbm90IGhhdmUgYW5vdGhlciB0aHJl YWQgdGFraW5nIGNoYXJzIG91dCBvZiB0aGUgYnVmZmVyICovCi0gICAgd2hpbGUgKChsZV9zdGFy dCAtIGxlX2VuZCA9PSAxKSB8fAotICAgICAgICAgICAgKGxlX3N0YXJ0ID09IDAgJiYgbGVfZW5k ID09IExFQlVGU0laIC0gMSkpIHsKLQkvKiBCdWZmZXIgaXMgZnVsbCAqLwotICAgICAgICBkZWJ1 ZyhGMTExLCJsZV9wdXRjaGFyIiwiQnVmZmVyIGlzIEZ1bGwiLGNoKTsKLSAgICAgICAgUmVsZWFz ZUxvY2FsRWNob011dGV4KCkgOwotICAgICAgICBtc2xlZXAoMjUwKTsKLSAgICAgICAgUmVxdWVz dExvY2FsRWNob011dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICkgOwotICAgIH0KLSNlbHNlCi0g ICAgaWYgKChsZV9zdGFydCAtIGxlX2VuZCArIExFQlVGU0laKSVMRUJVRlNJWiA9PSAxKSB7Ci0g ICAgICAgIGRlYnVnKEYxMTAsImxlX3B1dGNoYXIiLCJidWZmZXIgaXMgZnVsbCIsMCk7Ci0gICAg ICAgIHJldHVybigtMSk7Ci0gICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICBsZV9idWZb bGVfZW5kKytdID0gY2g7Ci0gICAgaWYgKGxlX2VuZCA9PSBMRUJVRlNJWikKLSAgICAgIGxlX2Vu ZCA9IDA7Ci0gICAgbGVfZGF0YSA9IDE7Ci0gICAgcmV0dXJuKDApOwotfQotCi1pbnQKLSNpZmRl ZiBDS19BTlNJQwotbGVfcHV0cyhDSEFSICogcywgaW50IG4pCi0jZWxzZQotbGVfcHV0cyhzLG4p IENIQVIgKiBzOyBpbnQgbjsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogbGVfcHV0cyAqLyB7 Ci0gICAgaW50IHJjID0gMDsKLSAgICBpbnQgaSA9IDA7Ci0gICAgQ0hBUiAqIHAgPSAoQ0hBUiAq KSJsZV9wdXRzIjsKLSAgICBja2hleGR1bXAocCxzLG4pOwotICAgIGZvciAoaSA9IDA7IGkgPCBu OyBpKyspCi0gICAgICByYyA9IGxlX3B1dGNoYXIoKGNoYXIpc1tpXSk7Ci0gICAgZGVidWcoRjEw MSwibGVfcHV0cyIsIiIscmMpOwotICAgIHJldHVybihyYyk7Ci19Ci0KLWludAotI2lmZGVmIENL X0FOU0lDCi1sZV9wdXRzdHIoQ0hBUiAqIHMpCi0jZWxzZQotbGVfcHV0c3RyKHMpIENIQVIgKiBz OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBsZV9wdXRzICovIHsKLSAgICBDSEFSICogcDsK LSAgICBpbnQgcmMgPSAwOwotICAgIHAgPSAoQ0hBUiAqKSJsZV9wdXRzdHIiOwotICAgIGNraGV4 ZHVtcChwLHMsKGludClzdHJsZW4oKGNoYXIgKilzKSk7Ci0gICAgZm9yIChwID0gczsgKnAgJiYg IXJjOyBwKyspCi0gICAgICByYyA9IGxlX3B1dGNoYXIoKnApOwotICAgIHJldHVybihyYyk7Ci19 Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi1sZV9nZXRjaGFyKENIQVIgKiBwY2gpCi0jZWxzZSAv KiBDS19BTlNJQyAqLwotbGVfZ2V0Y2hhcihwY2gpIENIQVIgKiBwY2g7Ci0jZW5kaWYgLyogQ0tf QU5TSUMgKi8KLS8qIGxlX2dhdGNoYXIgKi8gewotICAgIGludCByYyA9IDA7Ci0gICAgaWYgKGxl X3N0YXJ0ICE9IGxlX2VuZCkgewotICAgICAgICAqcGNoID0gbGVfYnVmW2xlX3N0YXJ0XTsKLSAg ICAgICAgbGVfYnVmW2xlX3N0YXJ0XSA9IDA7Ci0gICAgICAgIGxlX3N0YXJ0Kys7Ci0KLSAgICAg ICAgaWYgKGxlX3N0YXJ0ID09IExFQlVGU0laKQotICAgICAgICAgIGxlX3N0YXJ0ID0gMDsKLQot ICAgICAgICBpZiAobGVfc3RhcnQgPT0gbGVfZW5kKSB7Ci0gICAgICAgICAgICBsZV9kYXRhID0g MDsKLSAgICAgICAgfQotICAgICAgICByYysrOwotICAgIH0gZWxzZSB7Ci0gICAgICAgICpwY2gg PSAwOwotICAgIH0KLSAgICByZXR1cm4ocmMpOwotfQotI2VuZGlmIC8qIFRUTEVCVUYgKi8KLQot I2lmZGVmIENPTU1FTlQKLS8qCi0gIFNvbWUgc3lzdGVtcyBsaWtlIE9TRi8xIHVzZSBUSU9DR1NJ WkUgaW5zdGVhZCBvZiBUSU9DR1dJTlNaLgotICBCdXQgYXMgZmFyIGFzIEkga25vdywgd2hlbmV2 ZXIgVElPQ0dTSVpFIGlzIGRlZmluZWQsIGl0IGlzCi0gIGVxdWF0ZWQgdG8gVElPQ0dXSU5TWi4g IEZvciBjYXNlcyB3aGVyZSB0aGlzIGlzIG5vdCBkb25lLCB0cnkgdGhpczoKLSovCi0jaWZuZGVm IFRJT0NHV0lOU1oKLSNpZmRlZiBUSU9DR1NJWkUKLSNkZWZpbmUgVElPQ0dXSU5TWiBUSU9DR1NJ WkUKLSNlbmRpZiAvKiBUSU9DR1NJWkUgKi8KLSNlbmRpZiAvKiBUSU9DR1dJTlNaICovCi0jZW5k aWYgLyogQ09NTUVOVCAqLwotCi1zdGF0aWMgaW50IHR0X3hwaXhlbCA9IDAsIHR0X3lwaXhlbCA9 IDA7Ci0KLWludAotdHRnd3NpeigpIHsKLSAgICBpbnQgeCA9IDA7Ci0jaWZuZGVmIE5PTkFXUwot I2lmZGVmIFFOWAotLyoKLSAgTk9URTogVElPQ0dXU0laIHdvcmtzIGhlcmUgdG9vLCBidXQgb25s eSBpbiB0aGUgMzItYml0IHZlcnNpb24uCi0gIFRoaXMgY29kZSB3b3JrcyBmb3IgYm90aCB0aGUg MTYtIGFuZCAzMi1iaXQgdmVyc2lvbnMuCi0qLwotICAgIGV4dGVybiBpbnQgZGV2X3NpemUoaW50 LCBpbnQsIGludCwgaW50ICosIGludCAqKTsKLSAgICBpbnQgciwgYzsKLQotICAgIGlmIChkZXZf c2l6ZSgwLCAtMSwgLTEsICZyLCAmYykgPT0gMCkgewotCWRlYnVnKEYxMDEsInR0Z3dzaXogUU5Y IHIiLCIiLHIpOwotCWRlYnVnKEYxMDEsInR0Z3dzaXogUU5YIGMiLCIiLGMpOwotCXR0X3Jvd3Mg PSByOwotCXR0X2NvbHMgPSBjOwotCXJldHVybiAoKHIgPiAwICYmIGMgPiAwKSA/IDEgOiAwKTsK LSAgICB9IGVsc2UgcmV0dXJuKHh0dGd3c2l6KCkpOwotI2Vsc2UgLyogUU5YICovCi0jaWZkZWYg VElPQ0dXSU5TWgotCi0vKiBOb3RlLCB0aGlzIHdhcyBNX1VOSVgsIGNoYW5nZWQgdG8gWEVOSVgg dG8gYWxsb3cgY3Jvc3MgY29tcGlsYXRpb24uLi4gKi8KLSNpZmRlZiBYRU5JWAkJCQkvKiBTQ08g VU5JWCAzLjJ2NC4wICovCi0jaW5jbHVkZSA8c3lzL3N0cmVhbS5oPgkJCS8qIHR5cGVkZWYgbWJs a190IG5lZWRlZCBieSBwdGVtLmggKi8KLSNpbmNsdWRlIDxzeXMvcHRlbS5oPgkJCS8qIGZvciB0 dGd3c2l6KCkgKi8KLSNlbmRpZiAvKiBYRU5JWCAqLwotCi0jaWZkZWYgSTM4NklYCQkJCS8qIERp dHRvIGZvciBJbnRlcmFjdGl2ZSAqLwotI2luY2x1ZGUgPHN5cy9zdHJlYW0uaD4KLSNpbmNsdWRl IDxzeXMvcHRlbS5oPgotI2VuZGlmIC8qIEkzODZJWCAqLwotCi0vKiBOb3RlLCB0aGUgYWJvdmUg bWlnaHQgYmUgbmVlZGVkIGZvciBzb21lIG90aGVyIG9sZGVyIFNWUjMgSW50ZWwgbWFrZXMuLi4g Ki8KLQotICAgIHN0cnVjdCB3aW5zaXplIHc7Ci0gICAgdHRfeHBpeGVsID0gMDsKLSAgICB0dF95 cGl4ZWwgPSAwOwotCi0jaWZkZWYgSUtTRAotICAgIGlmIChpbnNlcnZlcikKLSAgICAgIHJldHVy bih4dHRnd3NpeigpKTsKLSNlbmRpZiAvKiBJS1NEICovCi0gICAgeCA9IGlvY3RsKDAsIChpbnQp VElPQ0dXSU5TWiwgKGNoYXIgKikmdyk7Ci0gICAgZGVidWcoRjEwMSwidHRnd3NpeiBUSU9DR1dJ TlNaIiwiIix4KTsKLSAgICBpZiAoeCA8IDApIHsKLQlyZXR1cm4oeHR0Z3dzaXooKSk7Ci0gICAg fSBlbHNlIGlmICh3LndzX3JvdyA+IDAgJiYgdy53c19jb2wgPiAwKSB7Ci0JdHRfcm93cyA9IHcu d3Nfcm93OwotCXR0X2NvbHMgPSB3LndzX2NvbDsKLQl0dF94cGl4ZWwgPSB3LndzX3hwaXhlbDsK LQl0dF95cGl4ZWwgPSB3LndzX3lwaXhlbDsKLQlkZWJ1ZyhGMTAxLCJ0dGd3c2l6IHR0X3Jvd3Mi LCIiLHR0X3Jvd3MpOwotCWRlYnVnKEYxMDEsInR0Z3dzaXogdHRfY29scyIsIiIsdHRfY29scyk7 Ci0JcmV0dXJuKDEpOwotICAgIH0gZWxzZSB7Ci0JZGVidWcoRjEwMCwidHRnd3NpeiBUSU9DR1dJ TlNaIDAwIiwiIiwwKTsKLQlyZXR1cm4oeHR0Z3dzaXooKSk7Ci0gICAgfQotI2Vsc2UKLSAgICBy ZXR1cm4oeHR0Z3dzaXooKSk7Ci0jZW5kaWYgLyogVElPQ0dXSU5TWiAqLwotI2VuZGlmIC8qIFFO WCAqLwotI2VuZGlmIC8qIE5PTkFXUyAqLwotfQotCi0KLSNpZmRlZiBSTE9HQ09ERQotX1BST1RP VFlQKCBpbnQgcmxvZ19uYXdzLCAodm9pZCkgKTsKLSNlbmRpZgkvKiBSTE9HQ09ERSAqLwotCi0j aWZuZGVmIE5PU0lHV0lOQ0gKLSNpZmRlZiBTSUdXSU5DSAotU0lHVFlQCi13aW5jaGgoZm9vKSBp bnQgZm9vOyB7CQkJLyogU0lHV0lOQ0ggaGFuZGxlciAqLwotICAgIGludCB4ID0gMDsKLSNpZmRl ZiBDS19UVFlGRAotI2lmbmRlZiBWTVMKLSAgICBleHRlcm4gaW50IHR0eWZkOwotI2VuZGlmIC8q IFZNUyAqLwotI2VuZGlmIC8qIENLX1RUWUZEICovCi0gICAgZXh0ZXJuIGludCB0dF9yb3dzLCB0 dF9jb2xzLCBjbWRfcm93cywgY21kX2NvbHM7Ci0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9n KSB7Ci0JZGVidWcoRjEwMCwiKioqKioqKioqKioqKioqIiwiIiwwKTsKLQlkZWJ1ZyhGMTAwLCJT SUdXSU5DSCBjYXVnaHQiLCIiLDApOwotCWRlYnVnKEYxMDAsIioqKioqKioqKioqKioqKiIsIiIs MCk7Ci0jaWZkZWYgTkVUUFRZCi0JZGVidWcoRjEwMSwiU0lHV0lOQ0ggcHR5X2ZvcmtfcGlkIiwi IixwdHlfZm9ya19waWQpOwotI2VuZGlmIC8qIE5FVFBUWSAqLwotICAgIH0KLSNlbmRpZiAvKiBE RVVCICovCi0gICAgc2lnbmFsKFNJR1dJTkNILHdpbmNoaCk7ICAgICAgICAgICAgLyogUmUtYXJt IHRoZSBzaWduYWwgKi8KLSAgICB4ID0gdHRnd3NpeigpOyAgICAgICAgICAgICAgICAgICAgICAv KiBHZXQgbmV3IHdpbmRvdyBzaXplICovCi0gICAgY21kX3Jvd3MgPSB0dF9yb3dzOwkJCS8qIEFk anVzdCBjb21tYW5kIHNjcmVlbiB0b28gKi8KLSAgICBjbWRfY29scyA9IHR0X2NvbHM7Ci0KLSNp ZmRlZiBDS19UVFlGRAotICAgIGlmCQkJCQkvKiBJZiB3ZSBkb24ndCBoYXZlIGEgY29ubmVjdGlv biAqLwotI2lmZGVmIFZNUwkJCQkvKiB3ZSdyZSBkb25lLiAqLwotICAgICAgKHZtc3R0eWZkKCkg PT0gLTEpCi0jZWxzZQotICAgICAgKHR0eWZkID09IC0xKQotI2VuZGlmIC8qIFZNUyAqLwotI2Vs c2UKLSAgICAgICghbG9jYWwpCi0jZW5kaWYgLyogQ0tfVFRZRkQgKi8KLSAgICAgICAgcmV0dXJu OwotCi0jaWZkZWYgTkVUUFRZCi0gICAgaWYgKHB0eV9mb3JrX3BpZCA+IC0xKSB7CQkvKiAic2V0 IGhvc3QiIHRvIGEgUFRZPyAqLwotCWludCB4OwotCi0jaWZkZWYgVElPQ1NXSU5TWgotCXN0cnVj dCB3aW5zaXplIHc7CQkvKiBSZXNpemUgdGhlIFBUWSAqLwotCWVycm5vID0gMDsKLQl3LndzX2Nv bCA9IHR0X2NvbHM7Ci0Jdy53c19yb3cgPSB0dF9yb3dzOwotCXcud3NfeHBpeGVsID0gdHRfeHBp eGVsOwotCXcud3NfeXBpeGVsID0gdHRfeXBpeGVsOwotCXggPSBpb2N0bCh0dHlmZCxUSU9DU1dJ TlNaLCZ3KTsKLQlkZWJ1ZyhGMTAxLCJ3aW5jaGggVElPQ1NXSU5TWiIsIiIseCk7Ci0JZGVidWco RjEwMSwid2luY2hoIFRJT0NTV0lOU1ogZXJybm8iLCIiLGVycm5vKTsKLSNlbmRpZiAvKiBUSU9D U1dJTlNaICovCi0KLQllcnJubyA9IDA7Ci0JeCA9IGtpbGwocHR5X2ZvcmtfcGlkLFNJR1dJTkNI KTsKLQlkZWJ1ZyhGMTAxLCJ3aW5jaGgga2lsbCIsIiIseCk7Ci0JZGVidWcoRjEwMSwid2luY2ho IGtpbGwgZXJybm8iLCIiLGVycm5vKTsKLSAgICB9Ci0jZW5kaWYgLyogTkVUUFRZICovCi0KLS8q Ci0gIFRoaXMgc2hvdWxkIGJlIE9LLiAgSXQgbWlnaHQgc2VlbSB0aGF0IHNlbmRpbmcgdGhpcyBm cm9tCi0gIGludGVycnVwdCBsZXZlbCBjb3VsZCBpbnRlcmZlcmUgd2l0aCBhbm90aGVyIFRFTE5F VCBJQUMgc3RyaW5nCi0gIHRoYXQgd2FzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHNlbnQuICBC dXQgd2UgYWx3YXlzIHNlbmQKLSAgVEVMTkVUIHN0cmluZ3Mgd2l0aCBhIHNpbmdsZSB3cml0ZSgp LCB3aGljaCBzaG91bGQgcHJldmVudCBtaXh1cHMuCi0gIGJsYWhfc25hd3MoKSBzaG91bGQgcHJv dGVjdCB0aGVtc2VsdmVzIGZyb20gYmVpbmcgY2FsbGVkIG9uIHRoZQotICB3cm9uZyBraW5kIG9m IGNvbm5lY3Rpb24uCi0qLwotI2lmZGVmIFRDUFNPQ0tFVAotI2lmbmRlZiBOT1RUR1dTSVoKLSAg ICBpZiAoeCA+IDAgJiYgdHRfcm93cyA+IDAgJiYgdHRfY29scyA+IDApIHsKLSAgICAgICAgdG5f c25hd3MoKTsKLSNpZmRlZiBSTE9HQ09ERQotICAgICAgICBybG9nX25hd3MoKTsKLSNlbmRpZiAv KiBSTE9HQ09ERSAqLwotICAgIH0KLSNlbmRpZiAvKiBOT1RUR1dTSVogKi8KLSNlbmRpZiAvKiBU Q1BTT0NLRVQgKi8KLSAgICBTSUdSRVRVUk47Ci19Ci0jZW5kaWYgLyogU0lHV0lOQ0ggKi8KLSNl bmRpZiAvKiBOT1NJR1dJTkNIICovCi0KLVNJR1RZUAotc2lnaHVwKGZvbykgaW50IGZvbzsgewkJ CS8qIFNJR0hVUCBoYW5kbGVyICovCi0gICAgYmFja2dyZCA9IDE7Ci0gICAgZGVidWcoRjEwMCwi KioqKioqKioqKioqKioqIiwiIiwwKTsKLSAgICBkZWJ1ZyhGMTAwLCJTSUdIVVAgcmVjZWl2ZWQi LCIiLDApOwotICAgIGRlYnVnKEYxMDAsIioqKioqKioqKioqKioqKiIsIiIsMCk7Ci0gICAgZG9l eGl0KEJBRF9FWElULC0xKTsKLSAgICAvKk5PVFJFQUNIRUQqLwotICAgIFNJR1JFVFVSTjsJCQkJ LyogU2h1dCBwaWNreSBjb21waWxlcnMgdXAuLi4gKi8KLX0KLQotI2lmZGVmIENLX1NDTzMyVjQK LS8qIEV4aXN0cyBidXQgdGhlcmUgaXMgbm8gcHJvdG90eXBlIGluIHRoZSBoZWFkZXIgZmlsZXMg Ki8KLV9QUk9UT1RZUCggY2hhciAqIHR0eW5hbWUsIChpbnQpICk7Ci0jZWxzZQotI2lmZGVmIFNW NjhSM1Y2Ci1fUFJPVE9UWVAoIGNoYXIgKiB0dHluYW1lLCAoaW50KSApOwotI2Vsc2UKLSNpZmRl ZiB1bHRyaXgKLV9QUk9UT1RZUCggY2hhciAqIHR0eW5hbWUsIChpbnQpICk7Ci0jZWxzZQotI2lm ZGVmIEhQVVg2Ci1fUFJPVE9UWVAoIGNoYXIgKiB0dHluYW1lLCAoaW50KSApOwotI2Vsc2UKLSNp ZmRlZiBIUFVYNQotX1BST1RPVFlQKCBjaGFyICogdHR5bmFtZSwgKGludCkgKTsKLSNlbHNlCi0j aWZkZWYgUFMyQUlYMTAKLV9QUk9UT1RZUCggY2hhciAqIHR0eW5hbWUsIChpbnQpICk7Ci0jZWxz ZQotI2lmZGVmIEJTRDQyCi1fUFJPVE9UWVAoIGNoYXIgKiB0dHluYW1lLCAoaW50KSApOwotI2Vu ZGlmIC8qIEJTRDQyICovCi0jZW5kaWYgLyogUFMyQUlYMTAgKi8KLSNlbmRpZiAvKiBIUFVYNSAq LwotI2VuZGlmIC8qIEhQVVg2ICovCi0jZW5kaWYgLyogdWx0cml4ICovCi0jZW5kaWYgLyogU1Y2 OFIzVjYgKi8KLSNlbmRpZiAvKiBDS19TQ08zMlY0ICovCi0KLSNpZm5kZWYgU0lHVVNSMQkJCQkv KiBVc2VyLWRlZmluZWQgc2lnbmFscyAqLwotI2RlZmluZSBTSUdVU1IxIDMwCi0jZW5kaWYgLyog U0lHVVNSMSAqLwotCi0jaWZuZGVmIFNJR1VTUjIKLSNkZWZpbmUgU0lHVVNSMiAzMQotI2VuZGlm IC8qIFNJR1VTUjIgKi8KLQotLyoKLSAgaWdub3JzaWdzKCkgc2V0cyBjZXJ0YWluIHNpZ25hbHMg dG8gU0lHX0lHTi4gIEJ1dCB3aGVuIGEgc2lnbmFsIGlzCi0gIGlnbm9yZWQsIGl0IHJlbWFpbnMg aWdub3JlZCBhY3Jvc3MgZXhlYygpLCBzbyB3ZSBoYXZlIHRvIHJlc3RvcmUgdGhlc2UKLSAgc2ln bmFscyBiZWZvcmUgZXhlYygpLCB3aGljaCBpcyB0aGUgcHVycG9zZSBvZiByZXN0b3JzaWdzKCku Ci0qLwotc3RhdGljIFZPSUQKLWlnbm9yc2lncygpIHsJCQkJLyogSWdub3JlIHRoZXNlIHNpZ25h bHMgKi8KLSAgICBzYXZxdWl0ID0gc2lnbmFsKFNJR1FVSVQsU0lHX0lHTik7CS8qIElnbm9yZSBR dWl0IHNpZ25hbCAqLwotCi0jaWZkZWYgU0lHREFOR0VSCQkJLyogSWdub3JlIGRhbmdlciBzaWdu YWxzICovCi0vKgotICBUaGlzIHNpZ25hbCBpcyBzZW50IHdoZW4gdGhlIHN5c3RlbSBpcyBsb3cg b24gc3dhcCBzcGFjZS4gIFByb2Nlc3NlcwotICB0aGF0IGRvbid0IGhhbmRsZSBpdCBhcmUgY2Fu ZGlkYXRlcyBmb3IgdGVybWluYXRpb24uICBJZiBzd2FwIHNwYWNlIGRvZXNuJ3QKLSAgY2xlYXIg b3V0IGVub3VnaCwgd2Ugc3RpbGwgbWlnaHQgYmUgdGVybWluYXRlZCB2aWEga2lsbCgpIC0tIG5v dGhpbmcgd2UgY2FuCi0gIGRvIGFib3V0IHRoYXQhICBDb25jZWl2YWJseSwgdGhpcyBjb3VsZCBi ZSBpbXByb3ZlZCBieSBpbnN0YWxsaW5nIGEgcmVhbAotICBzaWduYWwgaGFuZGxlciB0aGF0IHdh cm5zIHRoZSB1c2VyLCBidXQgdGhhdCB3b3VsZCBiZSBwcmV0dHkgY29tcGxpY2F0ZWQsCi0gIHNp bmNlIHdlIGFyZSBub3QgYWx3YXlzIGluIGNvbnRyb2wgb2YgdGhlIHNjcmVlbiAtLSBlLmcuIGR1 cmluZyByZW1vdGUtbW9kZQotICBmaWxlIHRyYW5zZmVyLgotKi8KLSAgICBzYXZkYW5nZXIgPSBz aWduYWwoU0lHREFOR0VSLFNJR19JR04pOyAvKiBlLmcuIGluIEFJWCAqLwotI2VuZGlmIC8qIFNJ R0RBTkdFUiAqLwotI2lmZGVmIFNJR1BJUEUKLS8qCi0gIFRoaXMgb25lIGNvbWVzIHdoZW4gYSBU Q1AvSVAgY29ubmVjdGlvbiBpcyBicm9rZW4gYnkgdGhlIHJlbW90ZS4KLSAgV2UgcHJlZmVyIHRv IGNhdGNoIHRoaXMgc2l0dWF0aW9uIGJ5IGV4YW1pbmluZyBlcnJvciBjb2RlcyBmcm9tIHdyaXRl KCkuCi0qLwotICAgIHNhdnBpcGUgPSBzaWduYWwoU0lHUElQRSxTSUdfSUdOKTsKLSNlbmRpZiAv KiBTSUdQSVBFICovCi0gICAgc2F2dXNyMSA9IHNpZ25hbChTSUdVU1IxLFNJR19JR04pOwkvKiBJ Z25vcmUgdXNlci1kZWZpbmVkIHNpZ25hbHMgKi8KLSAgICBzYXZ1c3IyID0gc2lnbmFsKFNJR1VT UjIsU0lHX0lHTik7Ci19Ci0KLVZPSUQKLXJlc3RvcnNpZ3MoKSB7CQkJCS8qIFJlc3RvcmUgdGhl c2Ugc2lnbmFscyAqLwotICAgIChWT0lEKSBzaWduYWwoU0lHUVVJVCxzYXZxdWl0KTsJLyogKHVz ZWQgaW4gY2t1ZmlvLmMpICovCi0jaWZkZWYgU0lHREFOR0VSCi0gICAgKFZPSUQpIHNpZ25hbChT SUdEQU5HRVIsc2F2ZGFuZ2VyKTsKLSNlbmRpZiAvKiBTSUdEQU5HRVIgKi8KLSNpZmRlZiBTSUdQ SVBFCi0gICAgKFZPSUQpIHNpZ25hbChTSUdQSVBFLHNhdnBpcGUpOwotI2VuZGlmIC8qIFNJR1BJ UEUgKi8KLSAgICAoVk9JRCkgc2lnbmFsKFNJR1VTUjEsc2F2dXNyMSk7Ci0gICAgKFZPSUQpIHNp Z25hbChTSUdVU1IyLHNhdnVzcjIpOwotfQotCi1pbnQKLXN5c2luaXQoKSB7Ci0gICAgaW50IHg7 Ci0gICAgY2hhciAqIHM7Ci0jaWZkZWYgQ0tfVVRTTkFNRQotICAgIHN0cnVjdCB1dHNuYW1lIG5h bWU7Ci0jZW5kaWYgLyogQ0tfVVRTTkFNRSAqLwotCi0gICAgZXh0ZXJuIGNoYXIgc3RhcnR1cGRp cltdOwotLyoKLSAgQkVGT1JFIEFOWVRISU5HIEVMU0U6IEluaXRpYWxpemUgdGhlIHNldHVpZCBw YWNrYWdlLgotICBDaGFuZ2UgdG8gdGhlIHVzZXIncyByZWFsIHVzZXIgYW5kIGdyb3VwIElELgot ICBJZiB0aGlzIGNhbid0IGJlIGRvbmUsIGRvbid0IHJ1biBhdCBhbGwuCi0qLwotICAgIHggPSBw cml2X2luaSgpOwotI2lmZGVmIFNVSURERUJVRwotICAgIGZwcmludGYoc3RkZXJyLCJQUklWX0lO ST0lZFxuIix4KTsKLSNlbmRpZiAvKiBTVUlEREVCVUcgKi8KLSAgICBpZiAoeCkgewotCWlmICh4 ICYgMSkgZnByaW50ZihzdGRlcnIsIkZhdGFsOiBzZXR1aWQgZmFpbHVyZS5cbiIpOwotCWlmICh4 ICYgMikgZnByaW50ZihzdGRlcnIsIkZhdGFsOiBzZXRnaWQgZmFpbHVyZS5cbiIpOwotCWlmICh4 ICYgNCkgZnByaW50ZihzdGRlcnIsIkZhdGFsOiBDLUtlcm1pdCBzZXR1aWQgdG8gcm9vdCFcbiIp OwotCWV4aXQoMSk7Ci0gICAgfQotICAgIHNpZ25hbChTSUdJTlQsU0lHX0lHTik7CQkvKiBJZ25v cmUgaW50ZXJydXB0cyBhdCBmaXJzdCAqLwotICAgIHNpZ25hbChTSUdGUEUsU0lHX0lHTik7CQkv KiBJZ25vcmUgZmxvYXRpbmctcG9pbnQgZXhjZXB0aW9ucyAqLwotICAgIHNpZ25hbChTSUdIVVAs c2lnaHVwKTsJCS8qIENhdGNoIFNJR0hVUCAqLwotI2lmbmRlZiBOT1NJR1dJTkNICi0jaWZkZWYg U0lHV0lOQ0gKLSAgICBzaWduYWwoU0lHV0lOQ0gsd2luY2hoKTsJCS8qIENhdGNoIHdpbmRvdy1z aXplIGNoYW5nZSAqLwotI2VuZGlmIC8qIFNJR1dJTkNIICovCi0jZW5kaWYgLyogTk9TSUdXSU5D SCAqLwotCi0jaWZkZWYgU0lHWEZTWgotICAgIHNpZ25hbChTSUdYRlNaLFNJR19JR04pOwkJLyog SWdub3JlIHdyaXRpbmcgcGFzdCBmaWxlIGxpbWl0ICovIAotI2VuZGlmCS8qIFNJR1hGU1ogKi8K LQotI2lmbmRlZiBOT0pDCi0vKgotICBHZXQgdGhlIGluaXRpYWwgam9iIGNvbnRyb2wgc3RhdGUu Ci0gIElmIGl0IGlzIFNJR19JR04sIHRoYXQgbWVhbnMgdGhlIHNoZWxsIGRvZXMgbm90IHN1cHBv cnQgam9iIGNvbnRyb2wsCi0gIGFuZCBzbyB3ZSdkIGJldHRlciBub3Qgc3VzcGVuZCBvdXJzZWx2 ZXMuCi0qLwotI2lmZGVmIFNJR1RTVFAKLSAgICBqY2hkbHIgPSBzaWduYWwoU0lHVFNUUCxTSUdf SUdOKTsKLSAgICBpZiAoamNoZGxyID09IFNJR19JR04pIHsKLQlqY3NoZWxsID0gMDsKLQlkZWJ1 ZyhGMTAwLCJzeXNpbml0IGpjaGRscjogU0lHX0lHTiIsIiIsMCk7Ci0gICAgfSBlbHNlIGlmIChq Y2hkbHIgPT0gU0lHX0RGTCkgewotCWRlYnVnKEYxMDAsInN5c2luaXQgamNoZGxyOiBTSUdfREZM IiwiIiwwKTsKLQlqY3NoZWxsID0gMTsKLSAgICB9IGVsc2UgewotCWRlYnVnKEYxMDAsInN5c2lu aXQgamNoZGxyOiBvdGhlciIsIiIsMCk7Ci0JamNzaGVsbCA9IDM7Ci0gICAgfQotICAgIChWT0lE KSBzaWduYWwoU0lHVFNUUCxqY2hkbHIpOwkvKiBQdXQgaXQgYmFjay4uLiAqLwotI2VuZGlmIC8q IFNJR1RTVFAgKi8KLSNlbmRpZiAvKiBOT0pDICovCi0KLSAgICBjb25iZ3QoMCk7CQkJCS8qIFNl ZSBpZiB3ZSdyZSBpbiB0aGUgYmFja2dyb3VuZCAqLwotICAgIGNvbmdtKCk7CQkJCS8qIEdldCBj b25zb2xlIG1vZGVzICovCi0KLSAgICAoVk9JRCkgc2lnbmFsKFNJR0FMUk0sU0lHX0lHTik7CS8q IElnbm9yZSBhbGFybXMgKi8KLQotICAgIGlnbm9yc2lncygpOwkJCS8qIElnbm9yZSBzb21lIG90 aGVyIHNpZ25hbHMgKi8KLQotI2lmZGVmIEZfU0VURkwKLSAgICBpbmlmbGFncyA9IGZjbnRsKDAs Rl9HRVRGTCwwKTsJLyogR2V0IHN0ZGluIGZsYWdzICovCi0jZW5kaWYgLyogRl9TRVRGTCAqLwot Ci0jaWZkZWYgdWx0cml4Ci0gICAgZ3R0eSgwLCZ2YW5pbGxhKTsJCQkvKiBHZXQgc2d0dHkgaW5m byAqLwotI2Vsc2UKLSNpZmRlZiBBVVgKLSAgICBzZXQ0MnNpZygpOwkJCQkvKiBEb24ndCBhc2sh IChoYWthbnNvbkBjcy5vcnN0LmVkdSkgKi8KLSNlbmRpZiAvKiBBVVggKi8KLSNlbmRpZiAvKiB1 bHRyaXggKi8KLS8qCi0gIFdhcm5pbmc6IG9uIHNvbWUgVU5JWCBzeXN0ZW1zIChTVlI0PyksIHR0 eW5hbWUoKSByZXBvcnRlZGx5IG9wZW5zIC9kZXYgYnV0Ci0gIG5ldmVyIGNsb3NlcyBpdC4gIElm IGl0IGlzIGNhbGxlZCBvZnRlbiBlbm91Z2gsIHdlIHJ1biBvdXQgb2YgZmlsZQotICBkZXNjcmlw dG9ycyBhbmQgc3Vic2VxdWVudCBvcGVuKCkncyBvZiBvdGhlciBkZXZpY2VzIG9yIGZpbGVzIGNh biBmYWlsLgotKi8KLSAgICBzID0gTlVMTDsKLSNpZm5kZWYgTUlOSVgKLSAgICBpZiAoaXNhdHR5 KDApKQkJCS8qIE5hbWUgb2YgY29udHJvbGxpbmcgdGVybWluYWwgKi8KLSAgICAgIHMgPSB0dHlu YW1lKDApOwotICAgIGVsc2UgaWYgKGlzYXR0eSgxKSkKLSAgICAgIHMgPSB0dHluYW1lKDEpOwot ICAgIGVsc2UgaWYgKGlzYXR0eSgyKSkKLSAgICAgIHMgPSB0dHluYW1lKDIpOwotICAgIGRlYnVn KEYxMTAsInN5c2luaXQgdHR5bmFtZSgwKSIscywwKTsKLSNlbmRpZiAvKiBNSU5JWCAqLwotCi0j aWZkZWYgQkVPUwotICAgIGlmICghZGZ0dHkpCi0gICAgICBtYWtlc3RyKCZkZnR0eSxzKTsKLSNl bmRpZiAvKiBCRU9TICovCi0KLSAgICBpZiAocykKLSAgICAgIGNrc3RybmNweSgoY2hhciAqKWN0 dG5hbSxzLERFVk5BTUxFTisxKTsKLSNpZmRlZiBTVk9SUE9TSVgKLSAgICBpZiAoIWN0dG5hbVsw XSkKLSAgICAgIGN0ZXJtaWQoY3R0bmFtKTsKLSNlbmRpZiAvKiBTVk9SUE9TSVggKi8KLSAgICBp ZiAoIWN0dG5hbVswXSkKLSAgICAgIGNrc3RybmNweSgoY2hhciAqKWN0dG5hbSxkZnR0eSxERVZO QU1MRU4rMSk7Ci0gICAgZGVidWcoRjExMCwic3lzaW5pdCBDVFROQU0iLENUVE5BTSwwKTsKLSAg ICBkZWJ1ZyhGMTEwLCJzeXNpbml0IGN0dG5hbSIsY3R0bmFtLDApOwotCi0gICAgdHRnd3Npeigp OwkJCQkvKiBHZXQgd2luZG93IChzY3JlZW4pIGRpbWVuc2lvbnMuICovCi0KLSNpZm5kZWYgTk9T WVNDT05GCi0jaWZkZWYgX1NDX09QRU5fTUFYCi0gICAgY2ttYXhmaWxlcyA9IHN5c2NvbmYoX1ND X09QRU5fTUFYKTsKLSNlbmRpZiAvKiBfU0NfT1BFTl9NQVggKi8KLSNlbmRpZiAvKiBOT1NZU0NP TkYgKi8KLQotI2lmZGVmIFBsYW45Ci0gICAgaWYgKCFiYWNrZ3JkKSB7Ci0gICAgCWNvbnNjdGxm ZCA9IG9wZW4oIi9kZXYvY29uc2N0bCIsIE9fV1JPTkxZKTsKLSAgICAJLypub2lzZWZkID0gb3Bl bigiL2Rldi9ub2lzZSIsIE9fV1JPTkxZKSovCi0gICAgfQotICAgIGNreGVjaCA9IDE7Ci0jZW5k aWYgLyogUGxhbjkgKi8KLQotI2lmZGVmIENLX1VUU05BTUUKLSAgICBpZiAodW5hbWUoJm5hbWUp ID4gLTEpIHsKLQlja3N0cm5jcHkodW5tX21jaCxuYW1lLm1hY2hpbmUsQ0tfU1lTTk1MTik7Ci0J Y2tzdHJuY3B5KHVubV9uYW0sbmFtZS5zeXNuYW1lLENLX1NZU05NTE4pOwotCWNrc3RybmNweSh1 bm1fcmVsLG5hbWUucmVsZWFzZSxDS19TWVNOTUxOKTsKLQlja3N0cm5jcHkodW5tX3ZlcixuYW1l LnZlcnNpb24sQ0tfU1lTTk1MTik7Ci0jaWZkZWYgREVCVUcKLQlpZiAoZGVibG9nKSB7Ci0JICAg IGRlYnVnKEYxMTAsInN5c2luaXQgdW5hbWUgbWFjaGluZSIsdW5tX21jaCwwKTsKLQkgICAgZGVi dWcoRjExMCwic3lzaW5pdCB1bmFtZSBzeXNuYW1lIix1bm1fbmFtLDApOwotCSAgICBkZWJ1ZyhG MTEwLCJzeXNpbml0IHVuYW1lIHJlbGVhc2UiLHVubV9yZWwsMCk7Ci0JICAgIGRlYnVnKEYxMTAs InN5c2luaXQgdW5hbWUgdmVyc2lvbiIsdW5tX3ZlciwwKTsKLQl9Ci0jZW5kaWYgLyogREVCVUcg Ki8KLQotI2lmZGVmIEhQVVg5UExVUwotCWlmIChuYW1lLm1hY2hpbmVbNV0gPT0gJzgnKQotCSAg aHBpczgwMCA9IDE7Ci0JZWxzZQotCSAgaHBpczgwMCA9IDA7Ci0JZGVidWcoRjEwMSwic3lzaW5p dCBocGlzODAwIiwiIixocGlzODAwKTsKLSNlbmRpZiAvKiBIUFVYOVBMVVMgKi8KLSNpZmRlZiBU UlU2NAotICAgICAgICBnZXRzeXNpbmZvKEdTSV9QTEFURk9STV9OQU1FLCB1bm1fbW9kLCBDS19T WVNOTUxOLCAwLCAwKTsKLSAgICAgICAgZGVidWcoRjExMCwic3lzaW5pdCBnZXRzeXNpbmZvIG1v ZGVsIix1bm1fbW9kLDApOwotI2VuZGlmIC8qIFRSVTY0ICovCi0jaWZkZWYgU09MQVJJUzI1Ci0g ICAgICAgIHN5c2luZm8oU0lfUExBVEZPUk0sIHVubV9tb2QsIENLX1NZU05NTE4pOwotICAgICAg ICBkZWJ1ZyhGMTEwLCJzeXNpbml0IHN5c2luZm8gbW9kZWwiLHVubV9tb2QsMCk7Ci0jZW5kaWYg LyogU09MQVJJUzI1ICovCi0gICAgfQotI2VuZGlmIC8qIENLX1VUU05BTUUgKi8KLQotI2lmZGVm IENLX0VOVklST05NRU5UCi0gICAgewotI2lmZGVmIFROQ09ERQotCWV4dGVybiBjaGFyIHRuX2Vu dl9hY2N0W10sIHRuX2Vudl9kaXNwW10sIHRuX2Vudl9qb2JbXSwKLQl0bl9lbnZfcHJudFtdLCB0 bl9lbnZfc3lzW107Ci0jZW5kaWYgLyogVE5DT0RFICovCi0JZXh0ZXJuIGNoYXIgdWlkYnVmW107 Ci0gICAgICAgIGV4dGVybiBjaGFyICogd2hvYW1pKCk7Ci0JY2hhciAqcDsKLSNpZmRlZiBDS1NF TkRVSUQKLSAgICAgICAgdWlkYnVmWzBdID0gJ1wwJzsKLSNpZmRlZiBJS1NECi0gICAgICAgIGlm ICghaW5zZXJ2ZXIpIHsKLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAgICAgICBwID0gZ2V0ZW52 KCJVU0VSIik7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzeXNpbml0IHVpZGJ1ZiBmcm9tIFVT RVIiLHVpZGJ1ZiwwKTsKLQkgICAgaWYgKCFwKSBwID0gIiI7Ci0gICAgICAgICAgICBpZiAoISpw KSB7Ci0gICAgICAgICAgICAgICAgcCA9IGdldGVudigiTE9HTkFNRSIpOwotICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTAsInN5c2luaXQgdWlkYnVmIGZyb20gTE9HTkFNRSIsdWlkYnVmLDApOwot ICAgICAgICAgICAgfQotCSAgICBpZiAoIXApIHAgPSAiIjsKLSAgICAgICAgICAgIGlmICghKnAp IHsKLSAgICAgICAgICAgICAgICBwID0gd2hvYW1pKCk7Ci0gICAgICAgICAgICAgICAgZGVidWco RjExMCwic3lzaW5pdCB1aWRidWYgZnJvbSB3aG9hbWkoKSIsdWlkYnVmLDApOwotICAgICAgICAg ICAgfQotCSAgICBpZiAoIXApIHAgPSAiIjsKLQkgICAgY2tzdHJuY3B5KHVpZGJ1ZiwgKnAgPyBw IDogIlVOS05PV04iLCBVSURCVUZMRU4pOwotI2lmZGVmIElLU0QKLSAgICAgICAgfQotI2VuZGlm IC8qIElLU0QgKi8KLQlkZWJ1ZyhGMTEwLCJzeXNpbml0IGZpbmFsIHVpZGJ1ZiIsdWlkYnVmLDAp OwotI2VuZGlmIC8qIENLU0VORFVJRCAqLwotCi0jaWZkZWYgVE5DT0RFCi0JaWYgKChwID0gZ2V0 ZW52KCJKT0IiKSkpIGNrc3RybmNweSh0bl9lbnZfam9iLHAsNjMpOwotCWlmICgocCA9IGdldGVu digiQUNDVCIpKSkgY2tzdHJuY3B5KHRuX2Vudl9hY2N0LHAsNjMpOwotCWlmICgocCA9IGdldGVu digiUFJJTlRFUiIpKSkgY2tzdHJuY3B5KHRuX2Vudl9wcm50LHAsNjMpOwotCWlmICgocCA9IGdl dGVudigiRElTUExBWSIpKSkgY2tzdHJuY3B5KHRuX2Vudl9kaXNwLHAsNjMpOwotI2lmZGVmIGFl Z2lzCi0JY2tzdHJuY3B5KHRuX2Vudl9zeXMsIkFlZ2lzIiw2NCk7Ci0jZWxzZQotI2lmZGVmIFBs YW45Ci0JY2tzdHJuY3B5KHRuX2Vudl9zeXMsIlBsYW45Iiw2NCk7Ci0jZWxzZQotCWNrc3RybmNw eSh0bl9lbnZfc3lzLCJVTklYIiw2NCk7Ci0jZW5kaWYgLyogUGxhbjkgKi8KLSNlbmRpZiAvKiBh ZWdpcyAqLwotI2VuZGlmIC8qIFROQ09ERSAqLwotICAgIH0KLSNlbmRpZiAvKiBDS19FTlZJUk9O TUVOVCAqLwotI2lmZGVmIENLX1NORExPQwotICAgIHsKLQlleHRlcm4gY2hhciAqIHRuX2xvYzsK LQljaGFyICpwOwotCWlmIChwID0gZ2V0ZW52KCJMT0NBVElPTiIpKQotCSAgaWYgKHRuX2xvYyA9 IChjaGFyICopbWFsbG9jKChpbnQpc3RybGVuKHApKzEpKQotCSAgICBzdHJjcHkodG5fbG9jLHAp OwkJLyogc2FmZSAqLwotICAgIH0KLSNlbmRpZiAvKiBDS19TTkRMT0MgKi8KLQotICAgIGNrc3Ry bmNweShzdGFydHVwZGlyLCB6Z3RkaXIoKSwgQ0tNQVhQQVRIKTsKLSAgICBzdGFydHVwZGlyW0NL TUFYUEFUSF0gPSAnXDAnOwotICAgIHggPSBzdHJsZW4oc3RhcnR1cGRpcik7Ci0gICAgaWYgKHgg PD0gMCkgewotCXN0YXJ0dXBkaXJbMF0gPSAnLyc7Ci0Jc3RhcnR1cGRpclsxXSA9ICdcMCc7Ci0g ICAgfSBlbHNlIGlmIChzdGFydHVwZGlyW3gtMV0gIT0gJy8nKSB7Ci0Jc3RhcnR1cGRpclt4XSA9 ICcvJzsKLQlzdGFydHVwZGlyW3grMV0gPSAnXDAnOwotICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJz eXNpbml0IHN0YXJ0dXBkaXIiLHN0YXJ0dXBkaXIsMCk7Ci0jaWZkZWYgVFRMRUJVRgotICAgIGxl X2luaXQoKTsKLSNlbmRpZiAvKiBUVExFQlVGICovCi0jaWZkZWYgQlNENDRPUlBPU0lYCi0gICAg LyogVGhpcyBzaG91bGQgY2F0Y2ggdGhlIG5jdXJzZXMgcGxhdGZvcm1zICovCi0gICAgLyogU29t ZSBwbGF0Zm9ybXMgZG9uJ3QgaGF2ZSBwdXRlbnYoKSwgbGlrZSBOZVhUU1RFUCAqLwotICAgIHB1 dGVudigiTkNVUlNFU19OT19TRVRCVUY9MSIpOwotI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLwot ICAgIHJldHVybigwKTsKLX0KLQotLyogIFMgWSBTIEMgTCBFIEEgTiBVIFAgIC0tICBTeXN0ZW0t ZGVwZW5kZW50IHByb2dyYW0gY2xlYW51cC4gICovCi0KLWludAotc3lzY2xlYW51cCgpIHsKLSNp ZmRlZiBGX1NFVEZMCi0gICAgaWYgKGluaWZsYWdzID4gLTEpCi0gICAgICBmY250bCgwLEZfU0VU RkwsaW5pZmxhZ3MpOwkvKiBSZXN0b3JlIHN0ZGluIGZsYWdzICovCi0jZW5kaWYgLyogRl9TRVRG TCAqLwotI2lmZGVmIHVsdHJpeAotICAgIHN0dHkoMCwmdmFuaWxsYSk7ICAgICAgICAgICAgICAg ICAgIC8qIEdldCBzZ3R0eSBpbmZvICovCi0jZW5kaWYgLyogdWx0cml4ICovCi0jaWZkZWYgTkVU Q01ECi0gICAgaWYgKHR0cGlkKSBraWxsKHR0cGlkLDkpOwotI2VuZGlmIC8qIE5FVENNRCAqLwot ICAgIHJldHVybigwKTsKLX0KLQotLyogIFQgVCBPIFAgRSBOICAtLSAgT3BlbiBhIHR0eSBmb3Ig ZXhjbHVzaXZlIGFjY2Vzcy4gICovCi0KLS8qCi0gIENhbGwgd2l0aDoKLSAgICB0dG5hbWU6IGNo YXJhY3RlciBzdHJpbmcgLSBkZXZpY2UgbmFtZSBvciBuZXR3b3JrIGhvc3QgbmFtZS4KLSAgICBs Y2w6Ci0gIElmIGNhbGxlZCB3aXRoIGxjbCA8IDAsIHNldHMgdmFsdWUgb2YgbGNsIGFzIGZvbGxv d3M6Ci0gIDA6IHRoZSB0ZXJtaW5hbCBuYW1lZCBieSB0dG5hbWUgaXMgdGhlIGpvYidzIGNvbnRy b2xsaW5nIHRlcm1pbmFsLgotICAxOiB0aGUgdGVybWluYWwgbmFtZWQgYnkgdHRuYW1lIGlzIG5v dCB0aGUgam9iJ3MgY29udHJvbGxpbmcgdGVybWluYWwuCi0gIEJ1dCB3YXRjaCBvdXQ6IGlmIGEg bGluZSBpcyBhbHJlYWR5IG9wZW4sIG9yIGlmIHJlcXVlc3RlZCBsaW5lIGNhbid0Ci0gIGJlIG9w ZW5lZCwgdGhlbiBsY2wgcmVtYWlucyAoYW5kIGlzIHJldHVybmVkIGFzKSAtMS4KLSAgICBtb2Rl bToKLSAgTGVzcyB0aGFuIHplcm86IHR0bmFtZSBpcyBhIG5ldHdvcmsgaG9zdCBuYW1lLgotICBa ZXJvIG9yIGdyZWF0ZXI6IHR0bmFtZSBpcyBhIHRlcm1pbmFsIGRldmljZSBuYW1lLgotICBaZXJv IG1lYW5zIGEgbG9jYWwgY29ubmVjdGlvbiAoZG9uJ3QgdXNlIG1vZGVtIHNpZ25hbHMpLgotICBQ b3NpdGl2ZSBtZWFucyB1c2UgbW9kZW0gc2lnbmFscy4KLSAgIHRpbW86Ci0gIDAgPSBubyB0aW1l ci4KLSAgbm9uemVybyA9IG51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgZm9yIG9wZW4oKSB0byBy ZXR1cm4gYmVmb3JlIHRpbWluZyBvdXQuCi0KLSAgUmV0dXJuczoKLSAgICAwIG9uIHN1Y2Nlc3MK LSAgIC01IGlmIGRldmljZSBpcyBpbiB1c2UKLSAgIC00IGlmIGFjY2VzcyB0byBkZXZpY2UgaXMg ZGVuaWVkCi0gICAtMyBpZiBhY2Nlc3MgdG8gbG9jayBkaXJlY3RvcnkgZGVuaWVkCi0gICAtMiB1 cG9uIHRpbWVvdXQgd2FpdGluZyBmb3IgZGV2aWNlIHRvIG9wZW4KLSAgIC0xIG9uIG90aGVyIGVy cm9yCi0qLwotc3RhdGljIGludCB0dG90bW8gPSAwOwkJCS8qIFRpbWVvdXQgZmxhZyAqLwotLyog RmxhZyBrZXB0IGhlcmUgdG8gYXZvaWQgYmVpbmcgY2xvYmJlcmVkIGJ5IGxvbmdqbXAuICAqLwot Ci1pbnQKLXR0b3Blbih0dG5hbWUsbGNsLG1vZGVtLHRpbW8pIGNoYXIgKnR0bmFtZTsgaW50ICps Y2wsIG1vZGVtLCB0aW1vOyB7Ci0KLSNpZmRlZiBCU0Q0NAotI2RlZmluZSBjdGVybWlkKHgpIHN0 cmNweSh4LCIiKQotI2Vsc2UKLSNpZmRlZiBTVk9SUE9TSVgKLSNpZm5kZWYgQ0lFCi0gICAgZXh0 ZXJuIGNoYXIgKmN0ZXJtaWQoKTsJCS8qIFdpc2ggdGhleSBhbGwgaGFkIHRoaXMhICovCi0jZWxz ZQkJCQkJLyogQ0lFIFJlZ3VsdXMgKi8KLSNkZWZpbmUgY3Rlcm1pZCh4KSBzdHJjcHkoeCwiIikK LSNlbmRpZiAvKiBDSUUgKi8KLSNlbmRpZiAvKiBTVk9SUE9TSVggKi8KLSNlbmRpZiAvKiBCU0Q0 NCAqLwotCi0jaWZkZWYgdWx0cml4Ci0gICAgaW50IHRlbXAgPSAwOwotI2VuZGlmIC8qIHVsdHJp eCAqLwotCi0jaWZuZGVmIE9QRU5GSVJTVAotICAgIGNoYXIgZnVsbG5hbWVbREVWTkFNTEVOKzFd OwotI2VuZGlmIC8qIE9QRU5GSVJTVCAqLwotCi0gICAgY2hhciAqIGZuYW07CQkJLyogRnVsbCBu YW1lIGFmdGVyIGV4cGFuc2lvbiAqLwotCi0gICAgaW50IHk7Ci0KLSNpZm5kZWYgcGRwMTEKLSNk ZWZpbmUgTkFNRUZECSAvKiBGZWF0dXJlIHRvIGFsbG93IG5hbWUgdG8gYmUgYW4gb3BlbiBmaWxl IGRlc2NyaXB0b3IgKi8KLSNlbmRpZiAvKiBwZHAxMSAqLwotCi0jaWZkZWYgTkFNRUZECi0gICAg Y2hhciAqcDsKLSAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gdGVsbmV0ZmQiLCIiLHRlbG5ldGZkKTsK LSNlbmRpZiAvKiBOQU1FRkQgKi8KLQotICAgIGRlYnVnKEYxMTAsInR0b3BlbiB0dG5hbWUiLHR0 bmFtZSwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJ0dG9wZW4gdHRubXN2Iix0dG5tc3YsMCk7Ci0gICAg ZGVidWcoRjEwMSwidHRvcGVuIG1vZGVtIiwiIixtb2RlbSk7Ci0gICAgZGVidWcoRjEwMSwidHRv cGVuIG5ldGNvbm4iLCIiLG5ldGNvbm4pOwotICAgIGRlYnVnKEYxMDEsInR0b3BlbiB0dHlmZCIs IiIsdHR5ZmQpOwotICAgIGRlYnVnKEYxMDEsInR0b3BlbiAqbGNsIiwiIiwqbGNsKTsKLSAgICBk ZWJ1ZyhGMTAxLCJ0dG9wZW4gdHRtZG0iLCIiLHR0bWRtKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dG9w ZW4gdHRuZXQiLCIiLHR0bmV0KTsKLQotICAgIHR0cG1zayA9IDB4ZmY7Ci0gICAgbG9ja3BpZFsw XSA9ICdcMCc7Ci0KLSAgICBpZiAodHR5ZmQgPiAtMSkgewkJCS8qIElmIGRldmljZSBhbHJlYWR5 IG9wZW5lZCAqLwotICAgICAgICBpZiAoIXN0cm5jbXAodHRuYW1lLHR0bm1zdixERVZOQU1MRU4p KSAvKiBhcmUgbmV3ICYgb2xkIG5hbWVzIGVxdWFsPyAqLwotCSAgcmV0dXJuKDApOwkJCS8qIFll cywgbm90aGluZyB0byBkbyAtIGp1c3QgcmV0dXJuICovCi0JdHRubXN2WzBdID0gJ1wwJzsJCS8q IE5vLCBjbGVhciBvdXQgb2xkIG5hbWUgKi8KLQl0dGNsb3ModHR5ZmQpOwkJCS8qIGNsb3NlIG9s ZCBjb25uZWN0aW9uLiAgKi8KLSAgICB9Ci0gICAgd2FzY2xvc2VkID0gMDsJCQkvKiBOZXcgY29u bmVjdGlvbiwgbm90IGNsb3NlZCB5ZXQuICovCi0gICAgdHRwaXBlID0gMDsJCQkJLyogQXNzdW1l IGl0J3Mgbm90IGEgcGlwZSAqLwotICAgIHR0cHR5ID0gMDsJCQkJLyogb3IgYSBwdHkuLi4gKi8K LQotI2lmZGVmIE5FVENPTk4KLS8qCi0gIFRoaXMgaXMgYSBiaXQgdHJpY2t5Li4uICBTdXBwb3Nl IHRoYXQgcHJldmlvdXNseSBLZXJtaXQgaGFkIGRpYWxlZCBhIHRlbG5ldAotICBtb2RlbSBzZXJ2 ZXIgKCJzZXQgaG9zdCB4eHg6MjAwMSwgc2V0IG1vZGVtIHR5cGUgdXNyLCBkaWFsIC4uLiIpLiAg VGhlbiB0aGUKLSAgY29ubmVjdGlvbiB3YXMgY2xvc2VkICh0dHlmZCA9IC0xKSwgYW5kIHRoZW4g YSBSRURJQUwgY29tbWFuZCB3YXMgZ2l2ZW4uICBBdAotICB0aGlzIHBvaW50IHdlJ3ZlIG9ibGl0 ZXJhdGVkIHRoZSBuZWdhdGl2ZSBtb2RlbSB0eXBlIGhhY2ssIGFuZCBzbyB3b3VsZAotICB0cmVh dCB0aGUgSVAgaG9zdG5hbWUgYXMgYSBkZXZpY2UgbmFtZSwgYW5kIHdvdWxkIHRoZW4gZmFpbCBi ZWNhdXNlIG9mICJObwotICBzdWNoIGRldmljZSBvciBkaXJlY3RvcnkiLiAgQnV0IHRoZSBwcmV2 aW91cyBjb25uZWN0aW9uIGhhcyBsZWZ0IGJlaGluZCBzb21lCi0gIGNsdWVzLCBzbyBsZXQncyB1 c2UgdGhlbS4uLgotKi8KLSAgICBpZiAodHR5ZmQgPCAwKSB7CQkJLyogQ29ubmVjdGlvbiBpcyBu b3Qgb3BlbiAqLwotCWlmICghc3RyY21wKHR0bmFtZSx0dG5tc3YpKSB7CS8qIE9sZCBhbmQgbmV3 IG5hbWVzIHRoZSBzYW1lPyAqLwotCSAgICBpZiAoKChuZXRjb25uID4gMCkgJiYgKHR0bWRtIDwg MCkpIHx8Ci0JCSgodHRuZXQgPiAwKSAmJgotCQkgKCFja3N0cmNocih0dG5hbWUsJy8nKSkgJiYg KGNrc3RyY2hyKHR0bmFtZSwnOicpKSkKLQkJKSB7Ci0JCWludCB4LCByYzsKLQkJeCA9ICh0dG1k bSA8IDApID8gLXR0bWRtIDogdHRuZXQ7Ci0JCXJjID0gbmV0b3Blbih0dG5hbWUsIGxjbCwgeCk7 Ci0JCWRlYnVnKEYxMTEsInR0b3BlbiBSRU9QRU4gbmV0b3BlbiIsdHRuYW1lLHJjKTsKLQkJaWYg KHJjID4gLTEpIHsKLQkJICAgIG5ldGNvbm4gPSAxOwotCQkgICAgeGxvY2FsID0gKmxjbCA9IDE7 Ci0JCX0gZWxzZSB7Ci0JCSAgICBuZXRjb25uID0gMDsKLQkJfQotCQlnb3RzaWdzID0gMDsKLQkJ cmV0dXJuKHJjKTsKLQkgICAgfQotCX0KLSAgICB9Ci0jZW5kaWYgLyogTkVUQ09OTiAqLwotCi0j aWZkZWYgTUFYTkFNTEVOCi0gICAgZGVidWcoRjEwMCwidHRvcGVuIE1BWE5BTUxFTiBkZWZpbmVk IiwiIiwwKTsKLSNlbHNlCi0gICAgZGVidWcoRjEwMCwidHRvcGVuIE1BWE5BTUxFTiAqTk9UKiBk ZWZpbmVkIiwiIiwwKTsKLSNlbmRpZgotCi0jaWZkZWYgQlNENAotICAgIGRlYnVnKEYxMDAsInR0 b3BlbiBCU0Q0IGRlZmluZWQiLCIiLDApOwotI2Vsc2UKLSAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4g QlNENCAqTk9UKiBkZWZpbmVkIiwiIiwwKTsKLSNlbmRpZiAvKiBCU0Q0ICovCi0KLSNpZmRlZiBC U0Q0MgotICAgIGRlYnVnKEYxMDAsInR0b3BlbiBCU0Q0MiBkZWZpbmVkIiwiIiwwKTsKLSNlbHNl Ci0gICAgZGVidWcoRjEwMCwidHRvcGVuIEJTRDQyICpOT1QqIGRlZmluZWQiLCIiLDApOwotI2Vu ZGlmIC8qIEJTRDQyICovCi0KLSNpZmRlZiBNWVJFQUQKLSAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4g TVlSRUFEIGRlZmluZWQiLCIiLDApOwotI2Vsc2UKLSAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gTVlS RUFEICpOT1QqIGRlZmluZWQiLCIiLDApOwotI2VuZGlmIC8qIE1ZUkVBRCAqLwotCi0jaWZkZWYJ TkVUQ09OTgotICAgIGlmIChtb2RlbSA8IDApIHsJCQkvKiBtb2RlbSA8IDAgPSBjb2RlIGZvciBu ZXR3b3JrICovCi0JaW50IHg7Ci0JdHRtZG0gPSBtb2RlbTsKLQltb2RlbSA9IC1tb2RlbTsJCQkv KiBQb3NpdGl2ZSBuZXR3b3JrIHR5cGUgbnVtYmVyICovCi0JZmRmbGFnID0gMDsJCQkvKiBTdGRp byBub3QgcmVkaXJlY3RlZC4gKi8KLQluZXRjb25uID0gMTsJCQkvKiBBbmQgaXQncyBhIG5ldHdv cmsgY29ubmVjdGlvbiAqLwotCWRlYnVnKEYxMTEsInR0b3BlbiBuZXQiLHR0bmFtZSxtb2RlbSk7 Ci0jaWZkZWYgTkFNRUZECi0JZm9yIChwID0gdHRuYW1lOyBpc2RpZ2l0KCpwKTsgcCsrKSA7IC8q IENoZWNrIGZvciBhbGwgZGlnaXRzICovCi0gCWlmICgqcCA9PSAnXDAnICYmICh0ZWxuZXRmZCB8 fCB4MjVmZCkpIHsgLyogQXZvaWQgWC4xMjEgYWRkcmVzc2VzICovCi0JICAgIHR0eWZkID0gYXRv aSh0dG5hbWUpOwkvKiBJcyB0aGVyZSBhIHdheSB0byB0ZXN0IGl0J3Mgb3Blbj8gKi8KLQkgICAg dHRmZGZsZyA9IDE7CQkvKiBXZSBnb3QgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IgKi8KLQkgICAg ZGVidWcoRjExMSwidHRvcGVuIG5ldCB0dGZkZmxnIix0dG5hbWUsdHRmZGZsZyk7Ci0JICAgIGRl YnVnKEYxMDEsInR0b3BlbiBuZXQgdHR5ZmQiLCIiLHR0eWZkKTsKLQkgICAgY2tzdHJuY3B5KHR0 bm1zdix0dG5hbWUsREVWTkFNTEVOKTsgLyogUmVtZW1iZXIgdGhlICJuYW1lIi4gKi8KLQkgICAg eCA9IDE7CQkJLyogUmV0dXJuIGNvZGUgaXMgImdvb2QiLiAqLwotCSAgICBpZiAodGVsbmV0ZmQp IHsKLQkJdHRuZXQgPSBORVRfVENQQjsKLQkJaWYgKHR0bnByb3RvICE9IE5QX1RDUFJBVykKLQkJ ICB0dG5wcm90byA9IE5QX1RFTE5FVDsKLSNpZmRlZiBTVU5YMjUKLQkgICAgfSBlbHNlIGlmICh4 MjVmZCkgewotCQl0dG5ldCA9IE5FVF9TWDI1OwotCQl0dG5wcm90byA9IE5QX05PTkU7Ci0jZW5k aWYgLyogU1VOWDI1ICovCi0JICAgIH0KLQl9IGVsc2UgewkJCS8qIEhvc3QgbmFtZSBvciBhZGRy ZXNzIGdpdmVuICovCi0jaWZkZWYgTkVUUFRZCi0JICAgIGlmIChtb2RlbSA9PSBORVRfUFRZKSB7 Ci0JCWludCB4OwotCQlpZiAobm9wdXNoKSB7Ci0JCSAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gUFRZ OiBub3B1c2giLCIiLDApOwotCQkgICAgcmV0dXJuKC0xKTsKLQkJfQotICAgICAgICAgICAgICAg IHR0bmV0ID0gTkVUX1BUWTsKLQkJdHRucHJvdG8gPSBOUF9OT05FOwotICAgICAgICAgICAgICAg IG5ldGNvbm4gPSAxOyAgICAgICAgICAgIC8qIGJ1dCB3ZSBkb24ndCB1c2UgbmV0d29yayBpL28g Ki8KLSAgICAgICAgICAgICAgICB0dHB0eSA9IDE7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEx MCwidHRvcGVuIFBUWSIsdHRuYW1lLDApOwotCQl4ID0gZG9fcHR5KCZ0dHlmZCx0dG5hbWUsMCk7 Ci0JCWlmICh4ID4gLTEpIHsKLQkJICAgIGNrc3RybmNweSh0dG5tc3YsdHRuYW1lLERFVk5BTUxF Tik7Ci0JCSAgICB4bG9jYWwgPSAqbGNsID0gMTsJLyogSXQncyBsb2NhbCAqLwotCQl9IGVsc2Ug ewotCQkgICAgdHRwdHkgPSAwOwotCQkgICAgbmV0Y29ubiA9IDA7Ci0JCX0KLQkJZ290c2lncyA9 IDA7Ci0JCXJldHVybih4KTsKLQkgICAgfQotI2VuZGlmIC8qIE5FVFBUWSAqLwotI2lmZGVmIE5F VENNRAotLyoKLSAgZHVwMigpIGlzIG5vdCBhdmFpbGFibGUgb24gb2xkZXIgU3lzdGVtIFYgcGxh dGZvcm1zIGxpa2UgQVQmVCAzQnguICBGb3IKLSAgdGhvc2Ugc3lzdGVtcyB3ZSBwdW50IGJ5IG5v dCBkZWZpbmluZyBORVRDTUQsIGJ1dCB3ZSBtaWdodCBiZSBhYmxlIHRvIGRvCi0gIGJldHRlciAt LSBzZWUgd29ya2Fyb3VuZHMgZm9yIHRoaXMgcHJvYmxlbSBpbiBja3VmaW8uYyAoc2VhcmNoIGZv ciBkdXAyKS4KLSovCi0JICAgIGlmIChtb2RlbSA9PSBORVRfQ01EKSB7Ci0JCWlmIChub3B1c2gp IHsKLQkJICAgIGRlYnVnKEYxMDAsInR0b3BlbiBwaXBlOiBub3B1c2giLCIiLDApOwotCQkgICAg cmV0dXJuKC0xKTsKLQkJfQotCQlpZiAocGlwZShwaXBlMCkgfHwgcGlwZShwaXBlMSkpIHsKLQkJ ICAgIHBlcnJvcigiUGlwZSBlcnJvciIpOwotCQkgICAgcmV0dXJuKC0xKTsKLQkJfQotCQl0dHBp ZCA9IGZvcmsoKTsJCS8qIE1ha2UgYSBmb3JrICovCi0KLQkJc3dpdGNoICh0dHBpZCkgewotCQkg IGNhc2UgLTE6CQkvKiBFcnJvciBtYWtpbmcgZm9yayAqLwotCQkgICAgY2xvc2UocGlwZTBbMF0p OwotCQkgICAgY2xvc2UocGlwZTBbMV0pOwotCQkgICAgY2xvc2UocGlwZTFbMF0pOwotCQkgICAg Y2xvc2UocGlwZTFbMV0pOwotCQkgICAgcGVycm9yKCJGb3JrIGVycm9yIik7Ci0JCSAgICByZXR1 cm4oLTEpOwotCQkgIGNhc2UgMDoJCS8qIENoaWxkLiAqLwotCQkgICAgY2xvc2UocGlwZTBbMF0p OwotCQkgICAgY2xvc2UocGlwZTFbMV0pOwotCQkgICAgZHVwMihwaXBlMFsxXSwgMSk7Ci0JCSAg ICBjbG9zZShwaXBlMFsxXSk7Ci0JCSAgICBkdXAyKHBpcGUxWzBdLCAwKTsKLQkJICAgIGNsb3Nl KHBpcGUxWzBdKTsKLQkJICAgIHN5c3RlbSh0dG5hbWUpOwotCQkgICAgX2V4aXQoMCk7Ci0JCSAg ZGVmYXVsdDoJCS8qIFBhcmVudCAqLwotCQkgICAgY2xvc2UocGlwZTBbMV0pOwotCQkgICAgY2xv c2UocGlwZTFbMF0pOwotCQkgICAgZmRpbiA9IHBpcGUwWzBdOwkvKiBSZWFkIGZyb20gcGlwZSAq LwotCQkgICAgZmRvdXQgPSBwaXBlMVsxXTsJLyogV3JpdGUgdG8gcGlwZSAqLwotCQkgICAgdHRv dXQgPSBmZG9wZW4oZmRvdXQsInciKTsgLyogR2V0IHN0cmVhbSBzbyB3ZSBjYW4gKi8KLQkJICAg IGlmICghdHRvdXQpIHsJLyogbWFrZSBpdCB1bmJ1ZmZlcmVkLiAqLwotCQkJcGVycm9yKCJmZG9w ZW4gZmFpbHVyZSIpOwotCQkJcmV0dXJuKC0xKTsKLQkJICAgIH0KLQkJICAgIHNldGJ1Zih0dG91 dCxOVUxMKTsKLQkJICAgIGNrc3RybmNweSh0dG5tc3YsdHRuYW1lLERFVk5BTUxFTik7Ci0JCSAg ICB4bG9jYWwgPSAqbGNsID0gMTsJLyogSXQncyBsb2NhbCAqLwotCQkgICAgbmV0Y29ubiA9IDE7 CS8qIENhbGwgaXQgYSBuZXR3b3JrIGNvbm5lY3Rpb24gKi8KLQkJICAgIHR0bWRtID0gbW9kZW07 CS8qIFJlbWVtYmVyIG5ldHdvcmsgdHlwZSAqLwotCQkgICAgdHR5ZmQgPSBmZGluOwotCQkgICAg dHRwaXBlID0gMTsKLQkJICAgIGdvdHNpZ3MgPSAwOwotCQkgICAgcmV0dXJuKDApOwotCQl9Ci0J ICAgIH0KLSNlbmRpZiAvKiBORVRDTUQgKi8KLSNlbmRpZiAvKiBOQU1FRkQgKi8KLQkgICAgeCA9 IG5ldG9wZW4odHRuYW1lLCBsY2wsIG1vZGVtKTsgLyogKHNlZSBja2NuZXQuaCkgKi8KLQkgICAg aWYgKHggPiAtMSkgewotCQlja3N0cm5jcHkodHRubXN2LHR0bmFtZSxERVZOQU1MRU4pOwotCSAg ICB9IGVsc2UgbmV0Y29ubiA9IDA7Ci0jaWZkZWYgTkFNRUZECi0JfQotI2VuZGlmIC8qIE5BTUVG RCAqLwotCi0jaWZkZWYgc29ueV9uZXdzCQkJLyogU29ueSBORVdTICovCi0JaWYgKGlvY3RsKHR0 eWZkLFRJT0NLR0VULCZrbV9leHQpIDwgMCkgeyAvKiBHZXQgS2FuamkgbW9kZSAqLwotCSAgICBw ZXJyb3IoInR0b3BlbiBlcnJvciBnZXR0aW5nIEthbmppIG1vZGUgKG5ldHdvcmspIik7Ci0JICAg IGRlYnVnKEYxMTEsInR0b3BlbiBlcnJvciBnZXR0aW5nIEthbmppIG1vZGUiLCJuZXR3b3JrIiww KTsKLQkgICAga21fZXh0ID0gLTE7CQkvKiBNYWtlIHN1cmUgdGhpcyBzdGF5cyB1bmRlZmluZWQu ICovCi0JfQotI2VuZGlmIC8qIHNvbnlfbmV3cyAqLwotCi0JeGxvY2FsID0gKmxjbCA9IDE7CQkv KiBOZXR3b3JrIGNvbm5lY3Rpb25zIGFyZSBsb2NhbC4gKi8KLQlkZWJ1ZyhGMTAxLCJ0dG9wZW4g bmV0IHgiLCIiLHgpOwotI2lmZGVmIENPTU1FTlQKLS8qIExldCBuZXRvcGVuKCkgZG8gdGhpcyAq LwotCWlmICh4ID4gLTEgJiYgIXgyNWZkKQotCSAgeCA9IHRuX2luaSgpOwkJCS8qIEluaXRpYWxp emUgVEVMTkVUIHByb3RvY29sICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCWdvdHNpZ3MgPSAw OwotCXJldHVybih4KTsKLSAgICB9IGVsc2UgewkJCQkvKiBUZXJtaW5hbCBkZXZpY2UgKi8KLSNl bmRpZgkvKiBORVRDT05OICovCi0KLSNpZmRlZiBOQU1FRkQKLS8qCi0gIFRoaXMgY29kZSBsZXRz IHlvdSBnaXZlIEtlcm1pdCBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvciBmb3IgYSBzZXJpYWwKLSAg Y29tbXVuaWNhdGlvbiBkZXZpY2UsIHJhdGhlciB0aGFuIGEgZGV2aWNlIG5hbWUuICBLZXJtaXQg YXNzdW1lcyB0aGF0IHRoZQotICBsaW5lIGlzIGFscmVhZHkgb3BlbiwgbG9ja2VkLCBjb25kaXRp b25lZCB3aXRoIHRoZSByaWdodCBwYXJhbWV0ZXJzLCBldGMuCi0qLwotCWZvciAocCA9IHR0bmFt ZTsgaXNkaWdpdCgqcCk7IHArKykgOyAvKiBDaGVjayBmb3IgYWxsLWRpZ2l0cyAqLwotCWlmICgq cCA9PSAnXDAnKSB7Ci0JICAgIHR0eWZkID0gYXRvaSh0dG5hbWUpOwkvKiBJcyB0aGVyZSBhIHdh eSB0byB0ZXN0IGl0J3Mgb3Blbj8gKi8KLQkgICAgZGVidWcoRjExMSwidHRvcGVuIGdvdCBvcGVu IGZkIix0dG5hbWUsdHR5ZmQpOwotCSAgICBja3N0cm5jcHkodHRubXN2LHR0bmFtZSxERVZOQU1M RU4pOyAvKiBSZW1lbWJlciB0aGUgIm5hbWUiLiAqLwotCSAgICBpZiAodHR5ZmQgPj0gMCAmJiB0 dHlmZCA8IDMpIC8qIElmIGl0J3Mgc3RkaW8uLi4gKi8KLQkgICAgICB4bG9jYWwgPSAqbGNsID0g MDsJLyogd2UncmUgaW4gcmVtb3RlIG1vZGUgKi8KLQkgICAgZWxzZQkJCS8qIG90aGVyd2lzZSAq LwotCSAgICAgIHhsb2NhbCA9ICpsY2wgPSAxOwkvKiBsb2NhbCBtb2RlLiAqLwotCSAgICBuZXRj b25uID0gMDsJCS8qIEFzc3VtZSBpdCdzIG5vdCBhIG5ldHdvcmsuICovCi0JICAgIHR2dGZsZyA9 IDA7CQkJLyogTWlnaHQgbmVlZCB0byBpbml0aWFsaXplIG1vZGVzLiAqLwotCSAgICB0dG1kbSA9 IG1vZGVtOwkJLyogUmVtZW1iZXIgbW9kZW0gdHlwZS4gKi8KLQkgICAgZmRmbGFnID0gMDsJCQkv KiBTdGRpbyBub3QgcmVkaXJlY3RlZC4gKi8KLQkgICAgdHRmZGZsZyA9IDE7CQkvKiBGbGFnIHdl IHdlcmUgb3BlbmVkIHRoaXMgd2F5LiAqLwotCSAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4gbm9uLW5l dCB0dGZkZmxnIix0dG5hbWUsdHRmZGZsZyk7Ci0JICAgIGRlYnVnKEYxMDEsInR0b3BlbiBub24t bmV0IHR0eWZkIiwiIix0dHlmZCk7Ci0KLSNpZmRlZiBzb255X25ld3MJCQkvKiBTb255IE5FV1Mg Ki8KLQkgICAgLyogR2V0IGRldmljZSBLYW5qaSBtb2RlICovCi0JICAgIGlmIChpb2N0bCh0dHlm ZCxUSU9DS0dFVCwma21fZXh0KSA8IDApIHsKLQkJcGVycm9yKCJ0dG9wZW4gZXJyb3IgZ2V0dGlu ZyBLYW5qaSBtb2RlIik7Ci0JCWRlYnVnKEYxMDEsInR0b3BlbiBlcnJvciBnZXR0aW5nIEthbmpp IG1vZGUiLCIiLDApOwotCQlrbV9leHQgPSAtMTsJCS8qIE1ha2Ugc3VyZSB0aGlzIHN0YXlzIHVu ZGVmaW5lZC4gKi8KLQkgICAgfQotI2VuZGlmIC8qIHNvbnlfbmV3cyAqLwotCSAgICBnb3RzaWdz ID0gMDsKLQkgICAgcmV0dXJuKDApOwkJCS8qIFJldHVybiBzdWNjZXNzICovCi0JfQotI2VuZGlm IC8qIE5BTUVGRCAqLwotI2lmZGVmIE5FVENPTk4KLSAgICB9Ci0jZW5kaWYgLyogTkVUQ09OTiAq LwotCi0vKiBIZXJlIHdlIGhhdmUgdG8gb3BlbiBhIHNlcmlhbCBkZXZpY2Ugb2YgdGhlIGdpdmVu IG5hbWUuICovCi0KLSAgICBuZXRjb25uID0gMDsJCQkvKiBTbyBpdCdzIG5vdCBhIG5ldHdvcmsg Y29ubmVjdGlvbiAqLwotICAgIG9jY3QgPSBzaWduYWwoU0lHSU5ULCBjY3RyYXApOwkvKiBTZXQg Q29udHJvbC1DIHRyYXAsIHNhdmUgb2xkIG9uZSAqLwotICAgIHNpZ2ludF9pZ24gPSAwOwotCi0g ICAgdHZ0ZmxnID0gMDsJCQkvKiBGbGFnIGZvciB1c2UgYnkgdHR2dCgpLiAqLwotCQkJCS8qIDAg PSB0dHZ0IG5vdCBjYWxsZWQgeWV0IGZvciB0aGlzIGRldmljZSAqLwotCi0gICAgZmRmbGFnID0g KCFpc2F0dHkoMCkgfHwgIWlzYXR0eSgxKSk7IC8qIEZsYWcgZm9yIHN0ZGlvIHJlZGlyZWN0ZWQg Ki8KLSAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gZmRmbGFnIiwiIixmZGZsYWcpOwotCi0gICAgdHRt ZG0gPSBtb2RlbTsgICAgICAgICAgICAgICAgICAgICAgLyogTWFrZSB0aGlzIGF2YWlsYWJsZSB0 byBvdGhlciBmbnMgKi8KLSAgICB4bG9jYWwgPSAqbGNsOyAgICAgICAgICAgICAgICAgICAgICAv KiBNYWtlIHRoaXMgYXZhaWxhYmxlIHRvIG90aGVyIGZucyAqLwotCi0vKiBDb2RlIGZvciBoYW5k bGluZyBiaWRpcmVjdGlvbmFsIHR0eSBsaW5lcyBnb2VzIGhlcmUuICovCi0vKiBVc2Ugc3BlY2lm aWVkIG1ldGhvZCBmb3IgdHVybmluZyBvZmYgbG9naW5zIGFuZCBzdXBwcmVzc2luZyBnZXR0eS4g Ki8KLQotI2lmZGVmIEFDVUNOVFJMCi0gICAgLyogU2hvdWxkIHB1dCBjYWxsIHRvIHByaXZfb24o KSBoZXJlLCBidXQgdGhhdCB3b3VsZCBiZSB2ZXJ5IHJpc2t5ISAqLwotICAgIGFjdWNudHJsKCJk aXNhYmxlIix0dG5hbWUpOyAgICAgICAgIC8qIGFjdWNudHJsKCkgcHJvZ3JhbS4gKi8KLSAgICAv KiBhbmQgcHJpdl9vZmYoKSBoZXJlLi4uICovCi0jZWxzZQotI2lmZGVmIEFUVDczMDAKLSAgICBp ZiAoKGF0dG1vZGVtICYgRE9HRVRZKSA9PSAwKSAgICAgICAvKiBvZmZnZXR0eSgpIHByb2dyYW0u ICovCi0gICAgICBhdHRtb2RlbSB8PSBvZmZnZXR0eSh0dG5hbWUpOwkvKiBSZW1lbWJlciByZXNw b25zZS4gICovCi0jZW5kaWYgLyogQVRUNzMwMCAqLwotI2VuZGlmIC8qIEFDVUNOVFJMICovCi0K LSNpZmRlZiBPUEVORklSU1QKLS8qCi0gMTk4NS0yMDAxOiBvcGVucyBkZXZpY2UgZmlyc3QgdGhl biBnZXRzIGxvY2s7IHJlYXNvbjoKLSBLZXJtaXQgdXN1YWxseSBoYXMgdG8gcnVuIHNldHVpZCBv ciBzZXRnaWQgaW4gb3JkZXIgdG8gY3JlYXRlIGEgbG9ja2ZpbGUuCi0gSWYgeW91IGdpdmUgYSBT RVQgTElORSBjb21tYW5kIGZvciBhIGRldmljZSB0aGF0IGhhcHBlbnMgdG8gYmUgeW91ciBqb2In cwotIGNvbnRyb2xsaW5nIHRlcm1pbmFsLCBLZXJtaXQgZG9lc24ndCBoYXZlIHRvIGNyZWF0ZSBh IGxvY2tmaWxlLCBhbmQgaW4gZmFjdAotIHNob3VsZCBub3QgY3JlYXRlIG9uZSwgYW5kIHdvdWxk IGZhaWwgaWYgaXQgdHJpZWQgdG8gaWYgaXQgZGlkIG5vdCBoYXZlIHRoZQotIHJlcXVpcmVkIHBy aXZpbGVnZXMuICBCdXQgeW91IGNhbid0IGZpbmQgb3V0IGlmIHR3byB0dHkgZGV2aWNlIG5hbWVz IGFyZQotIGVxdWl2YWxlbnQgdW50aWwgeW91IGhhdmUgYSBmaWxlIGRlc2NyaXB0b3IgdGhhdCB5 b3UgY2FuIGdpdmUgdG8gdHR5bmFtZSgpLgotIEJ1dCB0aGlzIGNhbiBjYXVzZSBhIHJhY2UgY29u ZGl0aW9uIGJldHdlZW4gS2VybWl0IGFuZCBbbV1nZXR0eS4gIFNvIHNlZQotIHRoZSBbI11lbHNl IHBhcnQuLi4KLSovIAotCi0vKgotIEluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbiwgd2Ugb3BlbiB0 aGUgdHR5IGRldmljZSBmb3IgcmVhZC93cml0ZS4KLSBJZiBhIG1vZGVtIGhhcyBiZWVuIHNwZWNp ZmllZCB2aWEgInNldCBtb2RlbSIgcHJpb3IgdG8gInNldCBsaW5lIgotIHRoZW4gdGhlIE9fTkRF TEFZIHBhcmFtZXRlciBpcyB1c2VkIGluIHRoZSBvcGVuLCBwcm92aWRlZCB0aGlzIHN5bWJvbAot IGlzIGRlZmluZWQgKGUuZy4gaW4gZmNudGwuaCksIHNvIHRoYXQgdGhlIHByb2dyYW0gZG9lcyBu b3QgaGFuZyB3YWl0aW5nCi0gZm9yIGNhcnJpZXIgKHdoaWNoIGluIG1vc3QgY2FzZXMgd29uJ3Qg YmUgcHJlc2VudCBiZWNhdXNlIGEgY29ubmVjdGlvbgotIGhhcyBub3QgYmVlbiBkaWFsZWQgeWV0 KS4gIE9fTkRFTEFZIGlzIHJlbW92ZWQgbGF0ZXIgb24gaW4gdHRvcGVuKCkuICBJdAotIHdvdWxk IG1ha2UgbW9yZSBzZW5zZSB0byBmaXJzdCBkZXRlcm1pbmUgaWYgdGhlIGxpbmUgaXMgbG9jYWwg YmVmb3JlCi0gZG9pbmcgdGhpcywgYnV0IGJlY2F1c2UgdHR5bmFtZSgpIHJlcXVpcmVzIGEgZmls ZSBkZXNjcmlwdG9yLCB3ZSBoYXZlCi0gdG8gb3BlbiBpdCBmaXJzdC4gIFNlZSBkb19vcGVuKCku Ci0KLSBOb3cgb3BlbiB0aGUgZGV2aWNlIHVzaW5nIHRoZSBkZXNpcmVkIHRyZWF0bWVudCBvZiBj YXJyaWVyLgotIElmIGNhcnJpZXIgaXMgUkVRVUlSRUQsIHRoZW4gb3BlbiBjb3VsZCBoYW5nIGZv cmV2ZXIsIHNvIGFuIG9wdGlvbmFsCi0gdGltZXIgaXMgcHJvdmlkZWQuICBJZiBjYXJyaWVyIGlz IG5vdCByZXF1aXJlZCwgdGhlIHRpbWVyIHNob3VsZCBuZXZlcgotIGdvIG9mZiwgYW5kIHNob3Vs ZCBkbyBubyBoYXJtLi4uCi0qLwotICAgIHR0b3RtbyA9IDA7CQkJCS8qIEZsYWcgbm8gdGltZW91 dCAqLwotICAgIGRlYnVnKEYxMDEsInR0b3BlbiB0aW1vIiwiIix0aW1vKTsKLSAgICBkZWJ1ZyhG MTAxLCJ0dG9wZW4geGxvY2FsIiwiIix4bG9jYWwpOwotICAgIGlmICh0aW1vID4gMCkgewotCWlu dCB4eDsKLQlzYXZhbCA9IHNpZ25hbChTSUdBTFJNLHRpbWVyaCk7CS8qIFRpbWVkLCBzZXQgdXAg dGltZXIuICovCi0JeHggPSBhbGFybSh0aW1vKTsJCS8qIFRpbWVkIG9wZW4oKSAqLwotCWRlYnVn KEYxMDEsInR0b3BlbiBhbGFybSIsIiIseHgpOwotCWlmICgKLSNpZmRlZiBDS19QT1NJWF9TSUcK LQkgICAgc2lnc2V0am1wKHNqYnVmLDEpCi0jZWxzZQotCSAgICBzZXRqbXAoc2pidWYpCi0jZW5k aWYgLyogQ0tfUE9TSVhfU0lHICovCi0JICAgICkgewotCSAgICB0dG90bW8gPSAxOwkJCS8qIEZs YWcgdGltZW91dC4gKi8KLQl9IGVsc2UgdHR5ZmQgPSBkb19vcGVuKHR0bmFtZSk7Ci0JdHRpbW9m ZigpOwotCWRlYnVnKEYxMTEsInR0b3BlbiIsIm1vZGVtIixtb2RlbSk7Ci0JZGVidWcoRjEwMSwi dHRvcGVuIHR0eWZkIiwiIix0dHlmZCk7Ci0JZGVidWcoRjEwMSwidHRvcGVuIGFsYXJtIHJldHVy biIsIiIsdHRvdG1vKTsKLSAgICB9IGVsc2UgewotCWVycm5vID0gMDsKLQl0dHlmZCA9IGRvX29w ZW4odHRuYW1lKTsKLSAgICB9Ci0gICAgZGVidWcoRjExMSwidHRvcGVuIHR0eWZkIix0dG5hbWUs dHR5ZmQpOwotICAgIGlmICh0dHlmZCA8IDApIHsJCQkvKiBJZiBjb3VsZG4ndCBvcGVuLCBmYWls LiAqLwotCWRlYnVnKEYxMDEsInR0b3BlbiBlcnJubyIsIiIsZXJybm8pOwotCWlmIChlcnJubyA+ IDAgJiYgIXF1aWV0KQotCSAgcGVycm9yKHR0bmFtZSk7CQkvKiBQcmludCBtZXNzYWdlICovCi0K LSNpZmRlZiBBVFQ3MzAwCi0JaWYgKGF0dG1vZGVtICYgRE9HRVRZKQkJLyogd2FzIGdldHR5KDFt KSBydW5uaW5nIGJlZm9yZSB1cz8gKi8KLQkgIG9uZ2V0dHkodHRubXN2KTsJCS8qIHllcywgcmVz dGFydCBvbiB0dHkgbGluZSAqLwotCWF0dG1vZGVtICY9IH5ET0dFVFk7CQkvKiBubyBwaG9uZSBp biB1c2UsIGdldHR5IHJlc3RvcmVkICovCi0jZWxzZQotI2lmZGVmIEFDVUNOVFJMCi0gICAgICAg IC8qIFNob3VsZCBwdXQgY2FsbCB0byBwcml2X29uKCkgaGVyZSwgYnV0IHRoYXQgd291bGQgYmUg cmlza3khICovCi0JYWN1Y250cmwoImVuYWJsZSIsdHRuYW1lKTsJLyogYWN1Y250cmwoKSBwcm9n cmFtLiAqLwotCS8qIGFuZCBwcml2X29mZigpIGhlcmUuLi4gKi8KLSNlbmRpZiAvKiBBQ1VOVFJM ICovCi0jZW5kaWYgLyogQVRUNzMwMCAqLwotCi0Jc2lnbmFsKFNJR0lOVCxvY2N0KTsJCS8qIFB1 dCBvbGQgQ3RybC1DIHRyYXAgYmFjay4gKi8KLQlpZiAoZXJybm8gPT0gRUFDQ0VTKSB7CQkvKiBE ZXZpY2UgaXMgcHJvdGVjdGVkIGFnYWluc3QgdXNlciAqLwotCSAgICBkZWJ1ZyhGMTEwLCJ0dG9w ZW4gRUFDQ0VTUyIsdHRuYW1lLDApOyAvKiBSZXR1cm4gLTQgKi8KLQkgICAgcmV0dXJuKC00KTsK LQl9IGVsc2UgcmV0dXJuKHR0b3RtbyA/IC0yIDogLTEpOyAvKiBPdGhlcndpc2UgLTIgaWYgdGlt ZW91dCwgb3IgLTEgKi8KLSAgICB9Ci0KLSNpZmRlZiBRTlgKLSAgICB7Ci0JZXh0ZXJuIGludCBx bnhwb3J0bG9jazsKLQl4ID0gcW54b3BlbmNvdW50KCk7Ci0JZGVidWcoRjEwMSwidHRvcGVuIHFu eG9wZW5jb3VudCIsIiIseCk7Ci0JZGVidWcoRjEwMSwidHRvcGVuIHFueHBvcnRsb2NrIiwiIixx bnhwb3J0bG9jayk7Ci0JaWYgKHggPCAwICYmIHFueHBvcnRsb2NrKSB7Ci0JICAgIHR0Y2xvcygw KTsKLQkgICAgcHJpbnRmKCI/Q2FuJ3QgZ2V0IHBvcnQgb3BlbiBjb3VudFxuIik7Ci0JICAgIHBy aW50ZigiKFRyeSBhZ2FpbiB3aXRoIFNFVCBRTlgtUE9SVC1MT0NLIE9GRilcbiIpOwotCSAgICBy ZXR1cm4oLTEpOwkJCS8qIEluZGljYXRlIGRldmljZSBpcyBpbiB1c2UgKi8KLQl9Ci0JaWYgKHgg PiAxKSB7CQkJLyogMSA9PSBtZSAqLwotCSAgICBpZiAocW54cG9ydGxvY2spCi0JICAgICAgdHRj bG9zKDApOwotCSAgICAgIHJldHVybigtMik7CQkvKiBJbmRpY2F0ZSBkZXZpY2UgaXMgaW4gdXNl ICovCi0JICAgIGVsc2UgaWYgKCFxdWlldCkKLQkgICAgICBwcmludGYoIldBUk5JTkc6IFwiJXNc IiBsb29rcyBidXN5Li4uXG4iLHR0ZGV2KTsKLQl9Ci0gICAgfQotI2VuZGlmIC8qIFFOWCAqLwot Ci0jaWZkZWYgUGxhbjkKLSAgICAvKiB0YWtlIHRoaXMgb3Bwb3J0dW5pdHkgdG8gb3BlbiB0aGUg Y29udHJvbCBjaGFubmVsICovCi0gICAgaWYgKHA5b3BlbnR0eWN0bCh0dG5hbWUpIDwgMCkKLSNl bHNlCi0gICAgLyogTWFrZSBzdXJlIGl0J3MgYSByZWFsIHR0eS4gKi8KLSAgICBpZiAoIXR0ZmRm bGcgJiYgIWlzYXR0eSh0dHlmZCkgJiYgc3RyY21wKHR0bmFtZSwiL2Rldi9udWxsIikpCi0jZW5k aWYgLyogUGxhbjkgKi8KLSAgICAgIHsKLQlmcHJpbnRmKHN0ZGVyciwiJXMgaXMgbm90IGEgdGVy bWluYWwgZGV2aWNlXG4iLHR0bmFtZSk7Ci0JZGVidWcoRjExMSwidHRvcGVuIG5vdCBhIHR0eSIs dHRuYW1lLGVycm5vKTsKLQljbG9zZSh0dHlmZCk7Ci0JdHR5ZmQgPSAtMTsKLQl3YXNjbG9zZWQg PSAxOwotCXNpZ25hbChTSUdJTlQsb2NjdCk7Ci0JcmV0dXJuKC0xKTsKLSAgICB9Ci0KLSNpZmRl ZiBhZWdpcwotCS8qIEFwb2xsbyBDIHJ1bnRpbWUgY2xhaW1zIHRoYXQgY29uc29sZSBwYWRzIGFy ZSB0dHkgZGV2aWNlcywgd2hpY2gKLQkgKiBpcyByZWFzb25hYmxlLCBidXQgdGhleSBhcmVuJ3Qg YW55IGdvb2QgZm9yIHBhY2tldCB0cmFuc2Zlci4gKi8KLQlpb3NfJGlucV90eXBlX3VpZCgoc2hv cnQpdHR5ZmQsIHR0eXVpZCwgc3QpOwotCWlmIChzdC5hbGwgIT0gc3RhdHVzXyRvaykgewotCSAg ICBmcHJpbnRmKHN0ZGVyciwgInByb2JsZW0gZ2V0dGluZyB0dHkgb2JqZWN0IHR5cGU6ICIpOwot CSAgICBlcnJvcl8kcHJpbnQoc3QpOwotCX0gZWxzZSBpZiAodHR5dWlkICE9IHNpb18kdWlkKSB7 IC8qIHJlamVjdCBub24tU0lPIGxpbmVzICovCi0JICAgIGNsb3NlKHR0eWZkKTsgdHR5ZmQgPSAt MTsKLQkgICAgd2FzY2xvc2VkID0gMTsKLQkgICAgZXJybm8gPSBFTk9UVFk7IHBlcnJvcih0dG5h bWUpOwotCSAgICBzaWduYWwoU0lHSU5ULG9jY3QpOwotCSAgICByZXR1cm4oLTEpOwotCX0KLSNl bmRpZiAvKiBhZWdpcyAqLwotCi0gICAgc2lnaW50X2lnbiA9IChvY2N0ID09IFNJR19JR04pID8g MSA6IDA7Ci0KLSAgICBja3N0cm5jcHkodHRubXN2LHR0bmFtZSxERVZOQU1MRU4pOwkvKiBLZWVw IGNvcHkgb2YgbmFtZSBsb2NhbGx5LiAqLwotCi0vKiBDYWxsZXIgd2FudHMgdXMgdG8gZmlndXJl IG91dCBpZiBsaW5lIGlzIGNvbnRyb2xsaW5nIHR0eSAqLwotCi0gICAgaWYgKCpsY2wgPCAwKSB7 Ci0gICAgICAgIGlmIChzdHJjbXAodHRuYW1lLENUVE5BTSkgPT0gMCkgeyAvKiAiL2Rldi90dHki IGFsd2F5cyByZW1vdGUgKi8KLSAgICAgICAgICAgIHhsb2NhbCA9IDA7Ci0JICAgIGRlYnVnKEYx MTEsInR0b3BlbiB0dG5hbWU9Q1RUTkFNIix0dG5hbWUseGxvY2FsKTsKLSAgICAgICAgfSBlbHNl IGlmIChzdHJjbXAodHRuYW1lLGN0dG5hbSkgPT0gMCkgewotICAgICAgICAgICAgeGxvY2FsID0g MDsKLQkgICAgZGVidWcoRjExMSwidHRvcGVuIHR0bmFtZT1jdHRuYW0iLHR0bmFtZSx4bG9jYWwp OwotCX0gZWxzZSBpZiAoY3R0bmFtWzBdKSB7Ci0jaWZkZWYgQkVCT1hfRFI3Ci0gICAgICAgICAg ICB4ID0gdHRubXN2OwkJCS8qIHR0eW5hbWUoKSBpcyBicm9rZW4gKi8KLSNlbHNlCi0gICAgICAg ICAgICB4ID0gdHR5bmFtZSh0dHlmZCk7ICAgICAgICAgLyogR2V0IHJlYWwgbmFtZSBvZiB0dG5h bWUuICovCi0jZW5kaWYgLyogQkVCT1hfRFI3ICovCi0JICAgIGlmICgheCkgeCA9ICIiOwotCSAg ICBpZiAoKngpCi0JICAgICAgeGxvY2FsID0gKChzdHJuY21wKHgsY3R0bmFtLERFVk5BTUxFTikg PT0gMCkgPyAwIDogMSk7Ci0JICAgIGVsc2UKLQkgICAgICB4bG9jYWwgPSAxOwotICAgICAgICAg ICAgZGVidWcoRjExMSwidHRvcGVuIHR0eW5hbWUodHR5ZmQpIHhsb2NhbCIseCx4bG9jYWwpOwot ICAgICAgICB9Ci0gICAgfQotCi0jaWZuZGVmIE5PRkRaRVJPCi0vKiBOb3RlLCB0aGUgZm9sbG93 aW5nIGNvZGUgd2FzIGFkZGVkIHNvIHRoYXQgVW5peCAiaWRsZS1saW5lIiBzbm9vcGVycyAqLwot Lyogd291bGQgbm90IHRoaW5rIEtlcm1pdCB3YXMgaWRsZSB3aGVuIGl0IHdhcyB0cmFuc2ZlcnJp bmcgZmlsZXMsIGFuZCAqLwotLyogbWF5YmUgbG9nIHBlb3BsZSBvdXQuICovCi0gICAgaWYgKHhs b2NhbCA9PSAwKSB7CQkJLyogUmVtb3RlIG1vZGUgKi8KLQlpZiAoZmRmbGFnID09IDApIHsJCS8q IFN0YW5kYXJkIGkvbyBpcyBub3QgcmVkaXJlY3RlZCAqLwotCSAgICBkZWJ1ZyhGMTAwLCJ0dG9w ZW4gc2V0dGluZyB0dHlmZCA9IDAiLCIiLDApOwotI2lmZGVmIExZTlhPUwotCSAgICAvKiBPbiBM eW54IE9TLCBmZCAwIGlzIG9wZW4gZm9yIHJlYWQgb25seS4gKi8KLQkgICAgZHVwMih0dHlmZCww KTsKLSNlbmRpZiAvKiBMWU5YT1MgKi8KLQkgICAgY2xvc2UodHR5ZmQpOwkJLyogVXNlIGZpbGUg ZGVzY3JpcHRvciAwICovCi0JICAgIHR0eWZkID0gMDsKLQl9IGVsc2UgewkJCS8qIFN0YW5kYXJk IGkvbyBpcyByZWRpcmVjdGVkICovCi0JICAgIGRlYnVnKEYxMDEsInR0b3BlbiBzdGRpbyByZWRp cmVjdGVkIiwiIix0dHlmZCk7Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBOT0ZEWkVSTyAqLwotCi0v KiBOb3cgY2hlY2sgaWYgbGluZSBpcyBsb2NrZWQgLS0gaWYgc28gZmFpbCwgZWxzZSBsb2NrIGZv ciBvdXJzZWx2ZXMgKi8KLS8qIE5vdGU6IEFmdGVyIGhhdmluZyBkb25lIHRoaXMsIGRvbid0IGZv cmdldCB0byBkZWxldGUgdGhlIGxvY2sgaWYgeW91ICovCi0vKiBsZWF2ZSB0dG9wZW4oKSB3aXRo IGFuIGVycm9yIGNvbmRpdGlvbi4gKi8KLQotICAgIGxrZiA9IDA7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIENoZWNrIGxvY2sgKi8KLSAgICBpZiAoeGxvY2FsID4gMCkgewotCWludCB4 eDsgaW50IHhwaWQ7Ci0gICAgICAgIGlmICgoeHggPSB0dGxvY2sodHRuYW1lKSkgPCAwKSB7IC8q IENhbid0IGxvY2sgaXQuICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4gdHRsb2Nr IGZhaWxzIix0dG5hbWUseHgpOwotCSAgICAvKiBXQVJOSU5HIC0gVGhpcyBjbG9zZSgpIGNhbiBo YW5nIGlmIHR0eSBpcyBhbiBlbXB0eSBzb2NrZXQuLi4gKi8KLSAgICAgICAgICAgIGNsb3NlKHR0 eWZkKTsJCS8qIENsb3NlIHRoZSBkZXZpY2UuICovCi0JICAgIHR0eWZkID0gLTE7CQkJLyogRXJh c2UgaXRzIGZpbGUgZGVzY3JpcHRvci4gKi8KLQkgICAgd2FzY2xvc2VkID0gMTsKLQkgICAgc2ln bmFsKFNJR0lOVCxvY2N0KTsJLyogUHV0IG9sZCBTSUdJTlQgYmFjay4gKi8KLQkgICAgc2lnaW50 X2lnbiA9IChvY2N0ID09IFNJR19JR04pID8gMSA6IDA7Ci0JICAgIGlmICh4eCA9PSAtMikgewkJ LyogSWYgbG9ja2ZpbGUgc2F5cyBkZXZpY2UgaW4gdXNlLCAqLwotI2lmbmRlZiBOT1VVQ1AKLQkJ ZGVidWcoRjExMSwidHRvcGVuIHJlYWRpbmcgbG9ja2ZpbGUgcGlkIixmbGZuYW0seHgpOwotCQl4 cGlkID0gdHRycGlkKGZsZm5hbSk7CS8qIFRyeSB0byByZWFkIHBpZCBmcm9tIGxvY2tmaWxlICov Ci0JCWlmICh4cGlkID4gLTEpIHsJLyogSWYgd2UgZ290IGEgcGlkICovCi0gICAgICAgICAgICAg ICAgICAgIGlmICghcXVpZXQpCi0JCSAgICAgIHByaW50ZigiTG9ja2VkIGJ5IHByb2Nlc3MgJWRc biIseHBpZCk7IC8qIHRlbGwgdGhlbS4gKi8KLQkJICAgIHNwcmludGYobG9ja3BpZCwiJWQiLHhw aWQpOwkvKiBSZWNvcmQgaXQgdG9vICovCi0JCSAgICBkZWJ1ZyhGMTEwLCJ0dG9wZW4gbG9ja3Bp ZCIsbG9ja3BpZCwwKTsKLQkJfSBlbHNlIGlmICgqZmxmbmFtKSB7Ci0JCSAgICBleHRlcm4gY2hh ciAqRElSQ01EOwotCQkgICAgY2hhciAqcCA9IE5VTEw7Ci0JCSAgICBpbnQgeDsKLQkJICAgIHgg PSAoaW50KXN0cmxlbihmbGZuYW0pICsgKGludClzdHJsZW4oRElSQ01EKSArIDI7Ci0JCSAgICBw ID0gbWFsbG9jKHgpOwkvKiBQcmludCBhIGRpcmVjdG9yeSBsaXN0aW5nLiAqLwotLyoKLSAgTm90 ZTogcHJpdl9vbigpIHdvbid0IGhlbHAgaGVyZSwgYmVjYXVzZSB3ZSBkbyBub3QgcGFzcyBwcml2 cyBhbG9uZyB0bwotICB0byBpbmZlcmlvciBwcm9jZXNzZXMsIGluIHRoaXMgY2FzZSBscy4gIFNv IGlmIHRoZSByZWFsIHVzZXIgZG9lcyBub3QgaGF2ZQotICBkaXJlY3RvcnktbGlzdGluZyBhY2Nl c3MgdG8gdGhlIGxvY2tmaWxlIGRpcmVjdG9yeSwgdGhpcyB3aWxsIHJlc3VsdCBpbgotICBzb21l dGhpbmcgbGlrZSAibm90IGZvdW5kIi4gIFRoYXQncyB3aHkgd2UgdHJ5IHRoaXMgb25seSBhcyBh IGxhc3QgcmVzb3J0LgotKi8KLQkJICAgIGlmIChwKSB7CQkvKiBJZiB3ZSBnb3QgdGhlIHNwYWNl Li4uICovCi0JCQlja21ha21zZyhwLHgsRElSQ01ELCIgIixmbGZuYW0sTlVMTCk7Ci0JCQl6c3lz Y21kKHApOwkvKiBHZXQgbGlzdGluZy4gKi8KLQkJCWlmIChwKSB7CS8qIGZyZWUgdGhlIHNwYWNl ICovCi0JCQkgICAgZnJlZShwKTsKLQkJCSAgICBwID0gTlVMTDsKLQkJCX0KLQkJICAgIH0KLQkJ fQotI2VuZGlmIC8qIE5PVVVDUCAqLwotCQlyZXR1cm4oLTUpOwkJLyogQ29kZSBmb3IgZGV2aWNl IGluIHVzZSAqLwotCSAgICB9IGVsc2UgcmV0dXJuKC0zKTsJCS8qIEFjY2VzcyBkZW5pZWQgKi8K LSAgICAgICAgfSBlbHNlIGxrZiA9IDE7Ci0gICAgfQotI2Vsc2UgIC8qIE9QRU5GSVJTVCAqLwot Ci0vKgotICAyNyBPY3QgMjAwMTogTmV3IHNpbXBsZXIgY29kZSB0aGF0IGdldHMgdGhlIGxvY2sg Zmlyc3QgYW5kIHRoZW4gb3BlbnMgdGhlCi0gIGRldmljZSwgd2hpY2ggZWxpbWluYXRlcyB0aGUg cmFjZSBjb25kaXRpb24uICBUaGUgZG93bnNpZGUgaXMgeW91IGNhbiBubwotICBsb25nZXIgc2F5 ICJzZXQgbGluZSAvZGV2L3R0eXAwIiBvciB3aGF0ZXZlciwgd2hlcmUgL2Rldi90dHlwMCBpcyB5 b3VyIGxvZ2luCi0gIHRlcm1pbmFsLCB3aXRob3V0IHRyeWluZyB0byBjcmVhdGUgYSBsb2NrZmls ZSwgd2hpY2ggZmFpbHMgaWYgQy1LZXJtaXQgbGFja3MKLSAgcHJpdnMsIGFuZCBpZiBpdCBzdWNj ZWVkcywgaXQgaGFzIGNyZWF0ZWQgYSBsb2NrZmlsZSB3aGVyZSBpdCBkaWRuJ3QgY3JlYXRlCi0g IG9uZSBiZWZvcmUuCi0qLwotICAgIHhsb2NhbCA9ICpsY2w7CQkJLyogSXMgdGhlIGRldmljZSBt eSBsb2dpbiB0ZXJtaW5hbD8gKi8KLSAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4geGxvY2FsIiwiQSIs eGxvY2FsKTsKLSAgICBmbmFtID0gdHRuYW1lOwotICAgIGlmIChzdHJjbXAodHRuYW1lLENUVE5B TSkgJiYgbmV0Y29ubiA9PSAwKSB7Ci0JaWYgKHpmbnFmcCh0dG5hbWUsREVWTkFNTEVOKzEsZnVs bG5hbWUpKSB7Ci0JICAgIGlmICgoaW50KXN0cmxlbihmdWxsbmFtZSkgPiAwKQotCSAgICAgIGZu YW0gPSBmdWxsbmFtZTsKLQl9Ci0gICAgfQotICAgIGRlYnVnKEYxMTAsInR0b3BlbiBmbmFtIixm bmFtLDApOwotICAgIGlmICh4bG9jYWwgPCAwKSB7Ci0JeGxvY2FsID0gKHN0cmNtcChmbmFtLENU VE5BTSkgIT0gMCk7Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsInR0b3BlbiB4bG9jYWwiLCJCIix4 bG9jYWwpOwotCi0gICAgbGtmID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8g bG9jayB5ZXQgKi8KLSAgICBpZiAoeGxvY2FsID4gMCkgewkJCS8qIElmIG5vdC4uLiAqLwotCWlu dCB4eDsgaW50IHhwaWQ7Ci0JeHggPSB0dGxvY2soZm5hbSk7CQkvKiBUcnkgdG8gbG9jayBpdC4g Ki8KLQlkZWJ1ZyhGMTAxLCJ0dG9wZW4gdHRsb2NrIiwiIix4eCk7Ci0gICAgICAgIGlmICh4eCA8 IDApIHsJCQkvKiBDYW4ndCBsb2NrIGl0LiAqLwotICAgICAgICAgICAgZGVidWcoRjExMSwidHRv cGVuIHR0bG9jayBmYWlscyIsZm5hbSx4eCk7Ci0JICAgIGlmICh4eCA9PSAtMikgewkJLyogSWYg bG9ja2ZpbGUgc2F5cyBkZXZpY2UgaW4gdXNlLCAqLwotI2lmbmRlZiBOT1VVQ1AKLQkJZGVidWco RjExMSwidHRvcGVuIHJlYWRpbmcgbG9ja2ZpbGUgcGlkIixmbGZuYW0seHgpOwotCQl4cGlkID0g dHRycGlkKGZsZm5hbSk7CS8qIFRyeSB0byByZWFkIHBpZCBmcm9tIGxvY2tmaWxlICovCi0JCWlm ICh4cGlkID4gLTEpIHsJLyogSWYgd2UgZ290IGEgcGlkICovCi0gICAgICAgICAgICAgICAgICAg IGlmICghcXVpZXQpCi0JCSAgICAgIHByaW50ZigiTG9ja2VkIGJ5IHByb2Nlc3MgJWRcbiIseHBp ZCk7IC8qIHRlbGwgdGhlbS4gKi8KLQkJICAgIGNrc3RybmNweShsb2NrcGlkLGNraXRvYSh4cGlk KSwxNik7Ci0JCSAgICBkZWJ1ZyhGMTEwLCJ0dG9wZW4gbG9ja3BpZCIsbG9ja3BpZCwwKTsKLSNp Zm5kZWYgTk9QVVNICi0JCX0gZWxzZSBpZiAoZmxmbmFtWzBdICYmICFub3B1c2gpIHsKLQkJICAg IGV4dGVybiBjaGFyICpESVJDTUQ7Ci0JCSAgICBjaGFyICpwID0gTlVMTDsKLQkJICAgIGludCB4 OwotCQkgICAgeCA9IChpbnQpc3RybGVuKGZsZm5hbSkgKyAoaW50KXN0cmxlbihESVJDTUQpICsg MjsKLQkJICAgIHAgPSBtYWxsb2MoeCk7CS8qIFByaW50IGEgZGlyZWN0b3J5IGxpc3RpbmcuICov Ci0vKgotICBOb3RlOiBwcml2X29uKCkgd29uJ3QgaGVscCBoZXJlLCBiZWNhdXNlIHdlIGRvIG5v dCBwYXNzIHByaXZzIGFsb25nIHRvCi0gIHRvIGluZmVyaW9yIHByb2Nlc3NlcywgaW4gdGhpcyBj YXNlIGxzLiAgU28gaWYgdGhlIHJlYWwgdXNlciBkb2VzIG5vdCBoYXZlCi0gIGRpcmVjdG9yeS1s aXN0aW5nIGFjY2VzcyB0byB0aGUgbG9ja2ZpbGUgZGlyZWN0b3J5LCB0aGlzIHdpbGwgcmVzdWx0 IGluCi0gIHNvbWV0aGluZyBsaWtlICJub3QgZm91bmQiLiAgVGhhdCdzIHdoeSB3ZSB0cnkgdGhp cyBvbmx5IGFzIGEgbGFzdCByZXNvcnQuCi0qLwotCQkgICAgaWYgKHApIHsJCS8qIElmIHdlIGdv dCB0aGUgc3BhY2UuLi4gKi8KLQkJCWNrbWFrbXNnKHAseCxESVJDTUQsIiAiLGZsZm5hbSxOVUxM KTsKLQkJCXpzeXNjbWQocCk7CS8qIEdldCBsaXN0aW5nLiAqLwotCQkJaWYgKHApIHsJLyogZnJl ZSB0aGUgc3BhY2UgKi8KLQkJCSAgICBmcmVlKHApOwotCQkJICAgIHAgPSBOVUxMOwotCQkJfQot CQkgICAgfQotI2VuZGlmIC8qIE5PUFVTSCAqLwotCQl9Ci0jZW5kaWYgLyogTk9VVUNQICovCi0J CXJldHVybigtNSk7CQkvKiBDb2RlIGZvciBkZXZpY2UgaW4gdXNlICovCi0JICAgIH0gZWxzZSBy ZXR1cm4oLTMpOwkJLyogQWNjZXNzIGRlbmllZCAqLwotICAgICAgICB9IGVsc2UgbGtmID0gMTsK LSAgICB9Ci0gICAgLyogSGF2ZSBsb2NrIC0tIG5vdyBpdCdzIHNhZmUgdG8gb3BlbiB0aGUgZGV2 aWNlICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gbGtmIiwiIixsa2YpOwotICAgIGRlYnVn KEYxMDEsInR0b3BlbiB0aW1vIiwiIix0aW1vKTsKLQotICAgIHR0b3RtbyA9IDA7CQkJCS8qIEZs YWcgbm8gdGltZW91dCAqLwotICAgIGlmICh0aW1vID4gMCkgewotCWludCB4eDsKLQlzYXZhbCA9 IHNpZ25hbChTSUdBTFJNLHRpbWVyaCk7CS8qIFRpbWVkLCBzZXQgdXAgdGltZXIuICovCi0JeHgg PSBhbGFybSh0aW1vKTsJCS8qIFRpbWVkIG9wZW4oKSAqLwotCWRlYnVnKEYxMDEsInR0b3BlbiBh bGFybSIsIiIseHgpOwotCWlmICgKLSNpZmRlZiBDS19QT1NJWF9TSUcKLQkgICAgc2lnc2V0am1w KHNqYnVmLDEpCi0jZWxzZQotCSAgICBzZXRqbXAoc2pidWYpCi0jZW5kaWYgLyogQ0tfUE9TSVhf U0lHICovCi0JICAgICkgewotCSAgICB0dG90bW8gPSAxOwkJCS8qIEZsYWcgdGltZW91dC4gKi8K LQl9IGVsc2UgewotCSAgICB0dHlmZCA9IGRvX29wZW4oZm5hbSk7Ci0JfQotCXR0aW1vZmYoKTsK LQlkZWJ1ZyhGMTExLCJ0dG9wZW4gdGltZWQgdHR5ZmQiLGZuYW0sdHR5ZmQpOwotICAgIH0gZWxz ZSB7Ci0JZXJybm8gPSAwOwotCXR0eWZkID0gZG9fb3BlbihmbmFtKTsKLQlkZWJ1ZyhGMTExLCJ0 dG9wZW4gdW50aW1lZCB0dHlmZCIsZm5hbSx0dHlmZCk7Ci0gICAgfQotICAgIGlmICh0dHlmZCA8 IDApIHsJCQkvKiBJZiBjb3VsZG4ndCBvcGVuLCBmYWlsLiAqLwotCWRlYnVnKEYxMTEsInR0b3Bl biBlcnJubyIsZm5hbSxlcnJubyk7Ci0JZGVidWcoRjExMSwidHRvcGVuIHhsb2NhbCIsIkMiLHhs b2NhbCk7Ci0JaWYgKHhsb2NhbCA9PSAwKSB7Ci0JICAgIGRlYnVnKEYxMDAsInR0b3BlbiBzdWJz dGl0dXRpbmcgMCIsIiIsMCk7Ci0JICAgIHR0eWZkID0gMDsKLQl9IGVsc2UgewotCSAgICBpZiAo ZXJybm8gPiAwICYmICFxdWlldCkgewotCSAgICAgICAgZGVidWcoRjExMSwidHRvcGVuIHBlcnJv ciIsZm5hbSxlcnJubyk7Ci0JCXBlcnJvcihmbmFtKTsJCS8qIFByaW50IG1lc3NhZ2UgKi8KLQkg ICAgfQotCSAgICBpZiAodHR1bmxjaygpKSAgICAgICAgICAgICAgICAgIC8qIFJlbGVhc2UgdGhl IGxvY2sgZmlsZSAqLwotCSAgICAgIGZwcmludGYoc3RkZXJyLCJXYXJuaW5nLCBwcm9ibGVtIHJl bGVhc2luZyBsb2NrXHJcbiIpOwotCX0KLSAgICB9Ci0KLSAgICBpZiAodHR5ZmQgPCAwKSB7CQkJ LyogdHR5ZmQgaXMgc3RpbGwgPCAwPyAqLwotI2lmZGVmIEFUVDczMDAKLQlpZiAoYXR0bW9kZW0g JiBET0dFVFkpCQkvKiB3YXMgZ2V0dHkoMW0pIHJ1bm5pbmcgYmVmb3JlIHVzPyAqLwotCSAgb25n ZXR0eSh0dG5tc3YpOwkJLyogeWVzLCByZXN0YXJ0IG9uIHR0eSBsaW5lICovCi0JYXR0bW9kZW0g Jj0gfkRPR0VUWTsJCS8qIG5vIHBob25lIGluIHVzZSwgZ2V0dHkgcmVzdG9yZWQgKi8KLSNlbHNl Ci0jaWZkZWYgQUNVQ05UUkwKLSAgICAgICAgLyogU2hvdWxkIHB1dCBjYWxsIHRvIHByaXZfb24o KSBoZXJlLCBidXQgdGhhdCB3b3VsZCBiZSByaXNreSEgKi8KLQlhY3VjbnRybCgiZW5hYmxlIixm bmFtKTsJLyogYWN1Y250cmwoKSBwcm9ncmFtLiAqLwotCS8qIGFuZCBwcml2X29mZigpIGhlcmUu Li4gKi8KLSNlbmRpZiAvKiBBQ1VOVFJMICovCi0jZW5kaWYgLyogQVRUNzMwMCAqLwotCi0Jc2ln bmFsKFNJR0lOVCxvY2N0KTsJCS8qIFB1dCBvbGQgQ3RybC1DIHRyYXAgYmFjay4gKi8KLQlpZiAo ZXJybm8gPT0gRUFDQ0VTKSB7CQkvKiBEZXZpY2UgaXMgcHJvdGVjdGVkIGFnYWluc3QgdXNlciAq LwotCSAgICBkZWJ1ZyhGMTEwLCJ0dG9wZW4gRUFDQ0VTUyIsZm5hbSwwKTsgLyogUmV0dXJuIC00 ICovCi0JICAgIHJldHVybigtNCk7Ci0JfSBlbHNlIHJldHVybih0dG90bW8gPyAtMiA6IC0xKTsg LyogT3RoZXJ3aXNlIC0yIGlmIHRpbWVvdXQsIG9yIC0xICovCi0gICAgfQotCi0vKiBNYWtlIHN1 cmUgaXQncyBhIHJlYWwgdHR5LiAqLwotCi0jaWZkZWYgUGxhbjkKLSAgICAvKiB0YWtlIHRoaXMg b3Bwb3J0dW5pdHkgdG8gb3BlbiB0aGUgY29udHJvbCBjaGFubmVsICovCi0gICAgaWYgKHA5b3Bl bnR0eWN0bChmbmFtKSA8IDApICAgICAgIAotI2Vsc2UKLSAgICAgIGlmICghdHRmZGZsZyAmJiAh aXNhdHR5KHR0eWZkKSAmJiBzdHJjbXAoZm5hbSwiL2Rldi9udWxsIikpCi0jZW5kaWYgLyogUGxh bjkgKi8KLQl7Ci0JICAgIGZwcmludGYoc3RkZXJyLCIlcyBpcyBub3QgYSB0ZXJtaW5hbCBkZXZp Y2VcbiIsZm5hbSk7Ci0JICAgIGRlYnVnKEYxMTEsInR0b3BlbiBub3QgYSB0dHkiLGZuYW0sZXJy bm8pOwotCSAgICBpZiAodHR1bmxjaygpKQkJLyogUmVsZWFzZSB0aGUgbG9jayBmaWxlICovCi0J ICAgICAgZnByaW50ZihzdGRlcnIsIldhcm5pbmcsIHByb2JsZW0gcmVsZWFzaW5nIGxvY2tcclxu Iik7Ci0JICAgIGNsb3NlKHR0eWZkKTsKLQkgICAgdHR5ZmQgPSAtMTsKLQkgICAgd2FzY2xvc2Vk ID0gMTsKLQkgICAgc2lnbmFsKFNJR0lOVCxvY2N0KTsKLQkgICAgcmV0dXJuKC0xKTsKLQl9Ci0K LSNpZmRlZiBhZWdpcwotICAgIC8qCi0gICAgICBBcG9sbG8gQyBydW50aW1lIGNsYWltcyB0aGF0 IGNvbnNvbGUgcGFkcyBhcmUgdHR5IGRldmljZXMsIHdoaWNoCi0gICAgICBpcyByZWFzb25hYmxl LCBidXQgdGhleSBhcmVuJ3QgYW55IGdvb2QgZm9yIHBhY2tldCB0cmFuc2Zlci4KLSAgICAqLwot ICAgIGlvc18kaW5xX3R5cGVfdWlkKChzaG9ydCl0dHlmZCwgdHR5dWlkLCBzdCk7Ci0gICAgaWYg KHN0LmFsbCAhPSBzdGF0dXNfJG9rKSB7Ci0JZnByaW50ZihzdGRlcnIsICJwcm9ibGVtIGdldHRp bmcgdHR5IG9iamVjdCB0eXBlOiAiKTsKLQllcnJvcl8kcHJpbnQoc3QpOwotICAgIH0gZWxzZSBp ZiAodHR5dWlkICE9IHNpb18kdWlkKSB7CS8qIFJlamVjdCBub24tU0lPIGxpbmVzICovCi0JY2xv c2UodHR5ZmQpOyB0dHlmZCA9IC0xOwotCXdhc2Nsb3NlZCA9IDE7Ci0JZXJybm8gPSBFTk9UVFk7 IHBlcnJvcihmbmFtKTsKLQlzaWduYWwoU0lHSU5ULG9jY3QpOwotCXJldHVybigtMSk7Ci0gICAg fQotI2VuZGlmIC8qIGFlZ2lzICovCi0KLSAgICBzaWdpbnRfaWduID0gKG9jY3QgPT0gU0lHX0lH TikgPyAxIDogMDsKLQotICAgIGNrc3RybmNweSh0dG5tc3YsdHRuYW1lLERFVk5BTUxFTik7CS8q IEtlZXAgY29weSBvZiBuYW1lIGxvY2FsbHkuICovCi0KLS8qIENhbGxlciB3YW50cyB1cyB0byBm aWd1cmUgb3V0IGlmIGxpbmUgaXMgY29udHJvbGxpbmcgdHR5ICovCi0KLSAgICBpZiAoKmxjbCA8 IDApIHsKLQljaGFyICogczsKLSAgICAgICAgaWYgKHN0cmNtcChmbmFtLENUVE5BTSkgPT0gMCkg eyAvKiAiL2Rldi90dHkiIGFsd2F5cyByZW1vdGUgKi8KLSAgICAgICAgICAgIHhsb2NhbCA9IDA7 Ci0JICAgIGRlYnVnKEYxMTEsInR0b3BlbiBmbmFtPUNUVE5BTSIsZm5hbSx4bG9jYWwpOwotICAg ICAgICB9IGVsc2UgaWYgKHN0cmNtcChmbmFtLGN0dG5hbSkgPT0gMCkgewotICAgICAgICAgICAg eGxvY2FsID0gMDsKLQkgICAgZGVidWcoRjExMSwidHRvcGVuIGZuYW09Y3R0bmFtIixmbmFtLHhs b2NhbCk7Ci0JfSBlbHNlIGlmIChjdHRuYW1bMF0pIHsKLSNpZmRlZiBCRUJPWF9EUjcKLSAgICAg ICAgICAgIHMgPSB0dG5tc3Y7CQkJLyogdHR5bmFtZSgpIGlzIGJyb2tlbiAqLwotI2Vsc2UKLSAg ICAgICAgICAgIHMgPSB0dHluYW1lKHR0eWZkKTsgICAgICAgICAvKiBHZXQgcmVhbCBuYW1lIG9m IHR0bmFtZS4gKi8KLSNlbmRpZiAvKiBCRUJPWF9EUjcgKi8KLQkgICAgaWYgKCFzKSBzID0gIiI7 Ci0JICAgIGlmICgqcykKLQkgICAgICB4bG9jYWwgPSAoKHN0cm5jbXAocyxjdHRuYW0sREVWTkFN TEVOKSA9PSAwKSA/IDAgOiAxKTsKLQkgICAgZWxzZQotCSAgICAgIHhsb2NhbCA9IDE7Ci0gICAg ICAgICAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4gdHR5bmFtZSh0dHlmZCkgeGxvY2FsIixzLHhsb2Nh bCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNpZm5kZWYgTk9GRFpFUk8KLS8qIE5vdGUsIHRoZSBm b2xsb3dpbmcgY29kZSB3YXMgYWRkZWQgc28gdGhhdCBVbml4ICJpZGxlLWxpbmUiIHNub29wZXJz ICovCi0vKiB3b3VsZCBub3QgdGhpbmsgS2VybWl0IHdhcyBpZGxlIHdoZW4gaXQgd2FzIHRyYW5z ZmVycmluZyBmaWxlcywgYW5kICovCi0vKiBtYXliZSBsb2cgcGVvcGxlIG91dC4gKi8KLSAgICBp ZiAoeGxvY2FsID09IDApIHsJCQkvKiBSZW1vdGUgbW9kZSAqLwotCWlmIChmZGZsYWcgPT0gMCkg ewkJLyogU3RhbmRhcmQgaS9vIGlzIG5vdCByZWRpcmVjdGVkICovCi0JICAgIGRlYnVnKEYxMDAs InR0b3BlbiBzZXR0aW5nIHR0eWZkID0gMCIsIiIsMCk7Ci0jaWZkZWYgTFlOWE9TCi0JICAgIC8q IE9uIEx5bnggT1MsIGZkIDAgaXMgb3BlbiBmb3IgcmVhZCBvbmx5LiAqLwotCSAgICBkdXAyKHR0 eWZkLDApOwotI2VuZGlmIC8qIExZTlhPUyAqLwotCSAgICBjbG9zZSh0dHlmZCk7CQkvKiBVc2Ug ZmlsZSBkZXNjcmlwdG9yIDAgKi8KLQkgICAgdHR5ZmQgPSAwOwotCX0gZWxzZSB7CQkJLyogU3Rh bmRhcmQgaS9vIGlzIHJlZGlyZWN0ZWQgKi8KLQkgICAgZGVidWcoRjEwMSwidHRvcGVuIHN0ZGlv IHJlZGlyZWN0ZWQiLCIiLHR0eWZkKTsKLQl9Ci0gICAgfQotI2VuZGlmIC8qIE5PRkRaRVJPICov Ci0jZW5kaWYgLyogT1BFTkZJUlNUICovCi0KLS8qIEdvdCB0aGUgbGluZSwgbm93IHNldCB0aGUg ZGVzaXJlZCB2YWx1ZSBmb3IgbG9jYWwuICovCi0KLSAgICBpZiAoKmxjbCAhPSAwKSAqbGNsID0g eGxvY2FsOwotCi0vKiBTb21lIHNwZWNpYWwgc3R1ZmYgZm9yIHY3Li4uICovCi0KLSNpZmRlZiAg VjcKLSNpZm5kZWYgTUlOSVgKLSAgICBpZiAoa21lbVtUVFldIDwgMCkgewkJLyogIElmIG9wZW4s IHRoZW4gc2tpcCB0aGlzLiAgKi8KLQlxYWRkcltUVFldID0gaW5pdHJhd3EodHR5ZmQpOyAgIC8q IEluaXQgdGhlIHF1ZXVlLiAqLwotCWlmICgoa21lbVtUVFldID0gb3BlbigiL2Rldi9rbWVtIiwg MCkpIDwgMCkgewotCSAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbid0IHJlYWQgL2Rldi9rbWVtIGlu IHR0b3Blbi5cbiIpOwotCSAgICBwZXJyb3IoIi9kZXYva21lbSIpOwotCSAgICBleGl0KDEpOwot CX0KLSAgICB9Ci0jZW5kaWYgLyogIU1JTklYICovCi0jZW5kaWYgLyogVjcgKi8KLQotLyogTm8g ZmFpbHVyZSByZXR1cm5zIGFmdGVyIHRoaXMgcG9pbnQgKi8KLQotI2lmZGVmIHVsdHJpeAotICAg IGlvY3RsKHR0eWZkLCBUSU9DTU9ERU0sICZ0ZW1wKTsKLSNpZmRlZiBUSU9DU0lOVVNFCi0gICAg aWYgKHhsb2NhbCAmJiBpb2N0bCh0dHlmZCwgVElPQ1NJTlVTRSwgTlVMTCkgPCAwKSB7Ci0JaWYg KCFxdWlldCkKLQkgIHBlcnJvcihmbmFtKTsKLSAgICB9Ci0jZW5kaWYgLyogVElPQ1NJTlVTRSAq LwotI2VuZGlmIC8qIHVsdHJpeCAqLwotCi0vKiBHZXQgdHR5IGRldmljZSBzZXR0aW5ncyAgKi8K LQotI2lmZGVmIEJTRDQ0T1JQT1NJWAkJCS8qIFBPU0lYICovCi0gICAgdGNnZXRhdHRyKHR0eWZk LCZ0dG9sZCk7Ci0gICAgZGVidWcoRjEwMSwidHRvcGVuIHRjZ2V0YXR0ciB0dG9sZC5jX2xmbGFn IiwiIix0dG9sZC5jX2xmbGFnKTsKLSAgICB0Y2dldGF0dHIodHR5ZmQsJnR0cmF3KTsKLSAgICBk ZWJ1ZyhGMTAxLCJ0dG9wZW4gdGNnZXRhdHRyIHR0cmF3LmNfbGZsYWciLCIiLHR0cmF3LmNfbGZs YWcpOwotICAgIHRjZ2V0YXR0cih0dHlmZCwmdHR0dnQpOwotICAgIGRlYnVnKEYxMDEsInR0b3Bl biB0Y2dldGF0dHIgdHR0dnQuY19sZmxhZyIsIiIsdHR0dnQuY19sZmxhZyk7Ci0jZWxzZQkJCQkJ LyogQlNELCBWNywgYW5kIGFsbCBvdGhlcnMgKi8KLSNpZmRlZiBBVFRTVgkJCQkvKiBBVCZUIFVO SVggKi8KLSAgICBpb2N0bCh0dHlmZCxUQ0dFVEEsJnR0b2xkKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0 dG9wZW4gaW9jdGwgVENHRVRBIHR0b2xkLmNfbGZsYWciLCIiLHR0b2xkLmNfbGZsYWcpOwotICAg IGlvY3RsKHR0eWZkLFRDR0VUQSwmdHRyYXcpOwotICAgIGlvY3RsKHR0eWZkLFRDR0VUQSwmdHR0 dnQpOwotI2Vsc2UKLSNpZmRlZiBCRUxMVjEwCi0gICAgaW9jdGwodHR5ZmQsVElPQ0dFVFAsJnR0 b2xkKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gQkVMTFYxMCB0dG9sZC5zZ19mbGFncyIsIiIs dHRvbGQuc2dfZmxhZ3MpOwotICAgIGlvY3RsKHR0eWZkLFRJT0NHREVWLCZ0ZG9sZCk7Ci0gICAg ZGVidWcoRjEwMSwidHRvcGVuIEJFTExWMTAgdGRvbGQuZmxhZ3MiLCIiLHRkb2xkLmZsYWdzKTsK LSNlbHNlCi0gICAgZ3R0eSh0dHlmZCwmdHRvbGQpOwotICAgIGRlYnVnKEYxMDEsInR0b3BlbiBn dHR5IHR0b2xkLnNnX2ZsYWdzIiwiIix0dG9sZC5zZ19mbGFncyk7Ci0jZW5kaWYgLyogQkVMTFYx MCAqLwotCi0jaWZkZWYgc29ueV9uZXdzCQkJLyogU29ueSBORVdTICovCi0gICAgaWYgKGlvY3Rs KHR0eWZkLFRJT0NLR0VULCZrbV9leHQpIDwgMCkgeyAvKiBHZXQgY29uc29sZSBLYW5qaSBtb2Rl ICovCi0JcGVycm9yKCJ0dG9wZW4gZXJyb3IgZ2V0dGluZyBLYW5qaSBtb2RlIik7Ci0JZGVidWco RjEwMSwidHRvcGVuIGVycm9yIGdldHRpbmcgS2FuamkgbW9kZSIsIiIsMCk7Ci0Ja21fZXh0ID0g LTE7CQkJLyogTWFrZSBzdXJlIHRoaXMgc3RheXMgdW5kZWZpbmVkLiAqLwotICAgIH0KLSNlbmRp ZiAvKiBzb255X25ld3MgKi8KLQotI2lmZGVmIFRJT0NHRVRDCi0gICAgZGVidWcoRjEwMCwidHRv cGVuIFRJT0NHRVRDIiwiIiwwKTsKLSAgICB0Y2hhcmYgPSAwOwkJCQkvKiBJbiByZW1vdGUgbW9k ZSwgYWxzbyBnZXQgKi8KLSAgICBpZiAoeGxvY2FsID09IDApIHsJCQkvKiBzcGVjaWFsIGNoYXJh Y3RlcnMgKi8KLQlpZiAoaW9jdGwodHR5ZmQsVElPQ0dFVEMsJnRjaG9sZCkgPCAwKSB7Ci0JICAg IGRlYnVnKEYxMDAsInR0b3BlbiBUSU9DR0VUQyBmYWlsZWQiLCIiLDApOwotCX0gZWxzZSB7Ci0J ICAgIHRjaGFyZiA9IDE7CQkJLyogSXQgd29ya2VkLiAqLwotCSAgICBpb2N0bCh0dHlmZCxUSU9D R0VUQywmdGNobm9pKTsgLyogR2V0IGFub3RoZXIgY29weSAqLwotCSAgICBkZWJ1ZyhGMTAwLCJ0 dG9wZW4gVElPQ0dFVEMgb2siLCIiLDApOwotCX0KLSAgICB9Ci0jZWxzZQotICAgIGRlYnVnKEYx MDAsInR0b3BlbiBUSU9DR0VUQyBub3QgZGVmaW5lZCIsIiIsMCk7Ci0jZW5kaWYgLyogVElPQ0dF VEMgKi8KLQotI2lmZGVmIFRJT0NHTFRDCi0gICAgZGVidWcoRjEwMCwidHRvcGVuIFRJT0NHTFRD IiwiIiwwKTsKLSAgICBsdGNoYXJmID0gMDsJCQkvKiBJbiByZW1vdGUgbW9kZSwgYWxzbyBnZXQg Ki8KLSAgICBpZiAoeGxvY2FsID09IDApIHsJCQkvKiBsb2NhbCBzcGVjaWFsIGNoYXJhY3RlcnMg Ki8KLQlpZiAoaW9jdGwodHR5ZmQsVElPQ0dMVEMsJmx0Y2hvbGQpIDwgMCkgewotCSAgICBkZWJ1 ZyhGMTAwLCJ0dG9wZW4gVElPQ0dMVEMgZmFpbGVkIiwiIiwwKTsKLQl9IGVsc2UgewotCSAgICBs dGNoYXJmID0gMTsJCS8qIEl0IHdvcmtlZC4gKi8KLQkgICAgaW9jdGwodHR5ZmQsVElPQ0dMVEMs Jmx0Y2hub2kpOyAvKiBHZXQgYW5vdGhlciBjb3B5ICovCi0JICAgIGRlYnVnKEYxMDAsInR0b3Bl biBUSU9DR0xUQyBvayIsIiIsMCk7Ci0JfQotICAgIH0KLSNlbHNlCi0gICAgZGVidWcoRjEwMCwi dHRvcGVuIFRJT0NHTFRDIG5vdCBkZWZpbmVkIiwiIiwwKTsKLSNlbmRpZiAvKiBUSU9DR0xUQyAq LwotCi0jaWZkZWYgVElPQ0xHRVQKLSAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gVElPQ0xHRVQiLCIi LDApOwotICAgIGxtb2RlZiA9IDA7Ci0gICAgaWYgKGlvY3RsKHR0eWZkLFRJT0NMR0VULCZsbW9k ZSkgPCAwKSB7Ci0JZGVidWcoRjEwMCwidHRvcGVuIFRJT0NMR0VUIGZhaWxlZCIsIiIsMCk7Ci0g ICAgfSBlbHNlIHsKLQlsbW9kZWYgPSAxOwotCWRlYnVnKEYxMDAsInR0b3BlbiBUSU9DTEdFVCBv ayIsIiIsMCk7Ci0gICAgfQotI2VuZGlmIC8qIFRJT0NMR0VUICovCi0KLSNpZmRlZiBCRUxMVjEw Ci0gICAgaW9jdGwodHR5ZmQsVElPQ0dFVFAsJnR0cmF3KTsKLSAgICBpb2N0bCh0dHlmZCxUSU9D R0VUUCwmdHR0dnQpOwotI2Vsc2UKLSAgICBndHR5KHR0eWZkLCZ0dHJhdyk7ICAgICAgICAgICAg ICAgICAvKiBBbmQgYSBjb3B5IG9mIGl0IGZvciBwYWNrZXRzKi8KLSAgICBndHR5KHR0eWZkLCZ0 dHR2dCk7ICAgICAgICAgICAgICAgICAvKiBBbmQgb25lIGZvciB2aXJ0dWFsIHR0eSBzZXJ2aWNl ICovCi0jZW5kaWYgLyogQkVMTFYxMCAqLwotCi0jZW5kaWYgLyogQVRUU1YgKi8KLSNlbmRpZiAv KiBCU0Q0NE9SUE9TSVggKi8KLQotLyogU2VjdGlvbiBmb3IgY2hhbmdpbmcgbGluZSBkaXNjaXBs aW5lLiAgSXQncyByZXN0b3JlZCBpbiB0dHJlcygpLiAqLwotCi0jaWZkZWYgQUlYUlMKLSNpZm5k ZWYgQUlYNDEKLSAgICB7IHVuaW9uIHR4bmFtZSBsZF9uYW1lOyBpbnQgbGRfaWR4ID0gMDsKLSAg ICAgIHR0bGQgPSAwOwotICAgICAgICBkbyB7Ci0gIAkgIGxkX25hbWUudHhfd2hpY2ggPSBsZF9p ZHgrKzsKLSAgCSAgaW9jdGwodHR5ZmQsIFRYR0VUQ0QsICZsZF9uYW1lKTsKLQkgIGlmICghc3Ry bmNtcChsZF9uYW1lLnR4X25hbWUsICJydHMiLCAzKSkKLSAgCSAgICB0dGxkIHw9IDE7Ci0gICAg ICAgIH0gd2hpbGUgKCpsZF9uYW1lLnR4X25hbWUpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJBSVgg bGluZSBkaXNjaXBsaW5lIiwiIix0dGxkKTsKLSAgICAgIH0KLSNlbmRpZiAvKiBBSVg0MSAqLwot I2VuZGlmIC8qIEFJWFJTICovCi0KLSNpZmRlZiBCU0Q0MQotLyogRm9yIDQuMUJTRCBvbmx5LCBm b3JjZSAib2xkIiB0dHkgZHJpdmVyLCBuZXcgb25lIGJvdGNoZXMgVEFOREVNLiAqLwotICAgIHsg aW50IGs7Ci0gICAgICBpb2N0bCh0dHlmZCwgVElPQ0dFVEQsICZ0dGxkKTsJLyogR2V0IGFuZCBz YXZlIGxpbmUgZGlzY2lwbGluZSAqLwotICAgICAgZGVidWcoRjEwMSwiNC4xYnNkIGxpbmUgZGlz Y2lwbGluZSIsIiIsdHRsZCk7Ci0gICAgICBrID0gT1RUWURJU0M7CQkJLyogU3dpdGNoIHRvICJv bGQiIGRpc2NpcGxpbmUgKi8KLSAgICAgIGsgPSBpb2N0bCh0dHlmZCwgVElPQ1NFVEQsICZrKTsK LSAgICAgIGRlYnVnKEYxMDEsIjQuMWJzZCB0aW9jc2V0ZCIsIiIsayk7Ci0gICAgfQotI2VuZGlm IC8qIEJTRDQxICovCi0KLSNpZmRlZiBhZWdpcwotICAgIC8qIFRoaXMgd2FzIHByZXZpb3VzbHkg ZG9uZSBiZWZvcmUgdGhlIGxhc3QgdHdvIFRDR0VUQSBvciBndHR5IGFib3ZlLAotICAgICAqIGlu IGJvdGggdGhlIEFUVFNWIGFuZCBub3QtQVRUU1YgY2FzZS4gIElmIGl0IGlzIG5vdCBva2F5IHRv IGhhdmUgb25seQotICAgICAqIG9uZSBjb3B5IGlmIGl0IGhlcmUgaW5zdGVhZCwgZ2l2ZSB1cyBh IHNob3V0IQotICAgICAqLwotICAgIHNpb18kY29udHJvbCgoc2hvcnQpdHR5ZmQsIHNpb18kcmF3 X25sLCBmYWxzZSwgc3QpOwotICAgIGlmICh4bG9jYWwpIHsgICAgICAgLyogaWdub3JlIGJyZWFr cyBmcm9tIGxvY2FsIGxpbmUgKi8KLSAgICAgICAgc2lvXyRjb250cm9sKChzaG9ydCl0dHlmZCwg c2lvXyRpbnRfZW5hYmxlLCBmYWxzZSwgc3QpOwotICAgICAgICBzaW9fJGNvbnRyb2woKHNob3J0 KXR0eWZkLCBzaW9fJHF1aXRfZW5hYmxlLCBmYWxzZSwgc3QpOwotICAgIH0KLSNlbmRpZiAvKiBh ZWdpcyAqLwotCi0jaWZkZWYgVlhWRQotICAgIHR0cmF3LmNfbGluZSA9IDA7ICAgICAgICAgICAg ICAgICAgIC8qIFNUVFkgbGluZSAwIGZvciBWWC9WRSAqLwotICAgIHR0dHZ0LmNfbGluZSA9IDA7 ICAgICAgICAgICAgICAgICAgIC8qIFNUVFkgbGluZSAwIGZvciBWWC9WRSAqLwotICAgIGlvY3Rs KHR0eWZkLFRDU0VUQSwmdHRyYXcpOwotI2VuZGlmIC8qIHZ4dmUgKi8KLQotLyogSWYgT19OREVM QVkgd2FzIHVzZWQgZHVyaW5nIG9wZW4oKSwgdGhlbiByZW1vdmUgaXQgbm93LiAqLwotCi0jaWZk ZWYgT19OREVMQVkKLSAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gT19OREVMQVkiLCIiLDApOwotICAg IGlmICh4bG9jYWwgPiAwKSB7Ci0gICAgICBpZiAoZmNudGwodHR5ZmQsIEZfR0VURkwsIDApICYg T19OREVMQVkpIHsKLQlkZWJ1ZyhGMTAwLCJ0dG9wZW4gZmNudGwgT19OREVMQVkiLCIiLDApOwot I2lmbmRlZiBhZWdpcwotCWlmIChmY250bCh0dHlmZCxGX1NFVEZMLCBmY250bCh0dHlmZCwgRl9H RVRGTCwgMCkgJiB+T19OREVMQVkpIDwgMCkgewotCSAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gZmNu dGwgZmFpbHVyZSB0byB1bnNldCBPX05ERUxBWSIsIiIsMCk7Ci0JICAgIHBlcnJvcigiQ2FuJ3Qg dW5zZXQgT19OREVMQVkiKTsKLQl9Ci0jZW5kaWYgLyogYWVnaXMgKi8KLQkvKiBTb21lIHN5c3Rl bXMsIG5vdGFibHkgWGVuaXggKGRvbid0IGtub3cgaG93IGNvbW1vbiB0aGlzIGlzIGluCi0JICog b3RoZXIgc3lzdGVtcyksIG5lZWQgc3BlY2lhbCB0cmVhdG1lbnQgdG8gZ2V0IHJpZCBvZiB0aGUg T19OREVMQVkKLQkgKiBiZWhhdmlvdXIgb24gcmVhZCgpIHdpdGggcmVzcGVjdCB0byBjYXJyaWVy IHByZXNlbmNlIChpLmUuIHJlYWQoKQotCSAqIHJldHVybmluZyAwIHdoZW4gY2FycmllciBhYnNl bnQpLCBldmVuIHRob3VnaCB0aGUgYWJvdmUgZmNudGwoKQotCSAqIGlzIGVub3VnaCB0byBtYWtl IHJlYWQoKSB3YWl0IGZvciBpbnB1dCB3aGVuIGNhcnJpZXIgaXMgcHJlc2VudC4KLQkgKiBUaGlz IG1hZ2ljLCBpbiB0dXJuLCByZXF1aXJlcyBDTE9DQUwgZm9yIHdvcmtpbmcgd2hlbiB0aGUgY2Fy cmllcgotCSAqIGlzIGFic2VudC4gQnV0IGlmIHhsb2NhbCA9PSAwLCBwcmVzdW1hYmx5IHlvdSBh bHJlYWR5IGhhdmUgQ0xPQ0FMCi0JICogb3IgeW91IGhhdmUgYSBjYXJyaWVyLCBvdGhlcndpc2Ug eW91IHdvdWxkbid0IGJlIHJ1bm5pbmcgdGhpcy4KLQkgKi8KLQlkZWJ1ZyhGMTAxLCJ0dG9wZW4g eGxvY2FsIiwiIix4bG9jYWwpOwotI2lmZGVmIEFUVFNWCi0jaWZkZWYgQlNENDRPUlBPU0lYCi0j aWZkZWYgQ09NTUVOVAkJCQkvKiAxMiBBdWcgMTk5NyAqLwotI2lmZGVmIF9fYnNkaV9fCi0JaWYg KHhsb2NhbCkKLQkgIHR0cmF3LmNfY2ZsYWcgfD0gQ0xPQ0FMOwotI2Vsc2UKLSNpZmRlZiBfX0Zy ZWVCU0RfXwotCWlmICh4bG9jYWwpCi0JICB0dHJhdy5jX2NmbGFnIHw9IENMT0NBTDsKLSNlbmRp ZiAvKiBfX0ZyZWVCU0RfXyAqLwotI2VuZGlmIC8qIF9fYnNkaV9fICovCi0jZWxzZSAvKiBOb3Qg Q09NTUVOVCAqLwotI2lmZGVmIENMT0NBTAotCWlmICh4bG9jYWwpCQkJLyogVW5zZXQgdGhpcyBp ZiBpdCdzIGRlZmluZWQuICovCi0JICB0dHJhdy5jX2NmbGFnIHw9IENMT0NBTDsKLSNlbmRpZiAv KiBDTE9DQUwgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0JZGVidWcoRjEwMSwidHRvcGVuIEJT RDQ0T1JQT1NJWCBjYWxsaW5nIHRjc2V0YXR0ciIsIiIsVENTQURSQUlOKTsKLQlpZiAodGNzZXRh dHRyKHR0eWZkLCBUQ1NBRFJBSU4sICZ0dHJhdykgPCAwKSB7Ci0JICAgIGRlYnVnKEYxMDAsInR0 b3BlbiBQT1NJWCB0Y3NlYXR0ciBmYWlscyIsIiIsMCk7Ci0JICAgIHBlcnJvcigidGNzZXRhdHRy Iik7Ci0JfQotI2Vsc2UgLyogIUJTRDQ0T1JQT1NJWCAqLwotCWlmICh4bG9jYWwpIHsKLQkgICAg dHRyYXcuY19jZmxhZyB8PSBDTE9DQUw7Ci0JICAgIGRlYnVnKEYxMDAsInR0b3BlbiBjYWxsaW5n IGlvY3RsKFRDU0VUQSkiLCIiLDApOwotCSAgICBlcnJubyA9IDA7Ci0JICAgIGlmIChpb2N0bCh0 dHlmZCwgVENTRVRBLCAmdHRyYXcpIDwgMCkgewotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEs InR0b3BlbiBpb2N0bChUQ1NFVEEpIGZhaWxzIiwiIixlcnJubyk7Ci0gICAgICAgICAgICAgICAg cGVycm9yKCJpb2N0bChUQ1NFVEEpIik7Ci0gICAgICAgICAgICB9Ci0JfQotI2VuZGlmIC8qIEJT RDQ0T1JQT1NJWCAqLwotI2VuZGlmIC8qIEFUVFNWICovCi0jaWZuZGVmIE5PQ09URk1DIC8qID0g Tk8gQ2xvc2UoT3BlbigpKSBUbyBGb3JjZSBNb2RlIENoYW5nZSAqLwotLyogUmVwb3J0ZWRseSBs ZXRzIHV1Z2V0dHkgZ3JhYiB0aGUgZGV2aWNlIGluIFNDTyBVTklYIDMuMiAvIFhFTklYIDIuMyAq LwotCWRlYnVnKEYxMDAsInR0b3BlbiBleGVjdXRpbmcgY2xvc2Uvb3BlbiIsIiIsMCk7Ci0JY2xv c2UoIHByaXZfb3BuKGZuYW0sIE9fUkRXUikgKTsgLyogTWFnaWMgdG8gZm9yY2UgY2hhbmdlLiAq LwotI2VuZGlmIC8qIE5PQ09URk1DICovCi0gICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIE9fTkRF TEFZICovCi0KLS8qIEluc3RydWN0IHRoZSBzeXN0ZW0gaG93IHRvIHRyZWF0IHRoZSBjYXJyaWVy LCBhbmQgc2V0IGEgZmV3IG90aGVyIHR0eQotICogcGFyYW1ldGVycy4KLSAqCi0gKiBUaGlzIGFs c28gdW5kb2VzIHRoZSB0ZW1wb3Jhcnkgc2V0dGluZyBvZiBDTE9DQUwgdGhhdCBtYXkgaGF2ZSBi ZWVuIGRvbmUKLSAqIGZvciB0aGUgY2xvc2Uob3BlbigpKSBhYm92ZSAoZXhjZXB0IGluIFhlbml4 KS4gIEFsc28gdGhyb3cgaW4gfkVDSE8sIHRvCi0gKiBwcmV2ZW50IHRoZSBvdGhlciBlbmQgb2Yg dGhlIGxpbmUgZnJvbSBzaXR0aW5nIHRoZXJlIHRhbGtpbmcgdG8gaXRzZWxmLAotICogcHJvZHVj aW5nIGdhcmJhZ2Ugd2hlbiB0aGUgdXNlciBwZXJmb3JtcyBhIGNvbm5lY3QuCi0gKgotICogU0NP IFhlbml4IHVuZm9ydHVuYXRlbHkgc2VlbXMgdG8gaWdub3JlIHRoZSBhY3R1YWwgc3RhdGUgb2Yg Q0xPQ0FMLgotICogTm93IGl0IHRoaW5rcyBDTE9DQUwgaXMgYWx3YXlzIG9uLiBJdCBzZWVtcyB0 aGUgb25seSByZWFsIHNvbHV0aW9uIGZvcgotICogWGVuaXggaXMgdG8gc3dpdGNoIGJldHdlZW4g dGhlIGxvd2VyIGFuZCB1cHBlciBjYXNlIGRldmljZSBuYW1lcy4KLSAqCi0gKiBUaGlzIHNlY3Rp b24gbWF5IGF0IHNvbWUgZnV0dXJlIHRpbWUgZXhwYW5kIGludG8gc2V0dGluZyBhIGNvbXBsZXRl Ci0gKiBjb2xsZWN0aW9uIG9mIHR0eSBwYXJhbWV0ZXJzLCBvciBjYWxsIGEgZnVuY3Rpb24gc2hh cmVkIHdpdGggdHRwa3QoKS8KLSAqIHR0dnQoKSB0aGF0IGRvZXMgc28uICBPbiB0aGUgb3RoZXIg aGFuZCwgdGhlIGluaXRpYWwgcGFyYW1ldGVycyBhcmUgbm90Ci0gKiB0aGF0IGltcG9ydGFudCwg c2luY2UgdHRwa3QoKSBvciB0dHZ0KCkgc2hvdWxkIGFsd2F5cyBmaXggdGhhdCBiZWZvcmUKLSAq IGFueSBjb21tdW5pY2F0aW9uIGlzIGRvbmUuICBXZWxsLCB3ZSdsbCBzZWUuLi4KLSAqLwotICAg IGlmICh4bG9jYWwpIHsKLSAgICAJY3VyY2FyciA9IC0yOwotCWRlYnVnKEYxMDAsInR0b3BlbiBj YWxsaW5nIGNhcnJjdGwiLCIiLDApOwotCWNhcnJjdGwoJnR0cmF3LCB0dGNhcnIgPT0gQ0FSX09O KTsKLQlkZWJ1ZyhGMTAwLCJ0dG9wZW4gY2FycmN0bCBvayIsIiIsMCk7Ci0KLSNpZmRlZiBDT0hF UkVOVAotI2RlZmluZSBTVk9SUE9TSVgKLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotCi0jaWZkZWYg U1ZPUlBPU0lYCi0JdHRyYXcuY19sZmxhZyAmPSB+RUNITzsKLQl0dG9sZC5jX2xmbGFnICY9IH5F Q0hPOwotI2lmZGVmIEJTRDQ0T1JQT1NJWAotCXkgPSB0Y3NldGF0dHIodHR5ZmQsIFRDU0FEUkFJ TiwgJnR0cmF3KTsKLQlkZWJ1ZyhGMTAxLCJ0dG9wZW4gdGNzZXRhdHRyIiwiIix5KTsKLSNlbHNl Ci0JeSA9IGlvY3RsKHR0eWZkLCBUQ1NFVEEsICZ0dHJhdyk7Ci0JZGVidWcoRjEwMCwidHRvcGVu IGlvY3RsIiwiIix5KTsKLSNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KLQotI2Vsc2UgLyogQlNE LCBldGMgKi8KLQl0dHJhdy5zZ19mbGFncyAmPSB+RUNITzsKLQl0dG9sZC5zZ19mbGFncyAmPSB+ RUNITzsKLSNpZmRlZiBCRUxMVjEwCi0JeSA9IGlvY3RsKHR0eWZkLFRJT0NTRVRQLCZ0dHJhdyk7 Ci0JZGVidWcoRjEwMCwidHRvcGVuIGlvY3RsIiwiIix5KTsKLSNlbHNlCi0JeSA9IHN0dHkodHR5 ZmQsJnR0cmF3KTsKLQlkZWJ1ZyhGMTAwLCJ0dG9wZW4gc3R0eSIsIiIseSk7Ci0jZW5kaWYgLyog QkVMTFYxMCAqLwotI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwotCi0jaWZkZWYgQ09IRVJFTlQKLSN1 bmRlZiBTVk9SUE9TSVgKLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotCi0JLyogdHRmbHVpKCk7ICov ICAvKiAgVGhpcyBmYWlscyBmb3Igc29tZSByZWFzb24uICAqLwotICAgIH0KLQotICAgIC8qIEdl dCBjdXJyZW50IHNwZWVkICovCi0KLSNpZm5kZWYgQkVCT1gKLSAgICB0dHNwZWVkID0gdHRnc3Bk KCk7Ci0jZWxzZQotICAgIHR0c3BlZWQgPSAxOTIwMDsKLSNlbmRpZiAvKiAhQkVCT1ggKi8KLSAg ICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gdHRzcGVlZCIsIiIsdHRzcGVlZCk7Ci0KLSAgICAvKiBEb25l LCBtYWtlIGVudHJpZXMgaW4gZGVidWcgbG9nLCByZXN0b3JlIEN0cmwtQyB0cmFwLCBhbmQgcmV0 dXJuLiAqLwotCi0gICAgZGVidWcoRjEwMSwidHRvcGVuIHR0eWZkIiwiIix0dHlmZCk7Ci0gICAg ZGVidWcoRjEwMSwidHRvcGVuICpsY2wiLCIiLCpsY2wpOwotICAgIGRlYnVnKEYxMTEsInR0b3Bl biBsb2NrIGZpbGUiLGZsZm5hbSxsa2YpOwotICAgIHNpZ25hbChTSUdJTlQsb2NjdCk7Ci0gICAg c2lnaW50X2lnbiA9IChvY2N0ID09IFNJR19JR04pID8gMSA6IDA7Ci0gICAgZ290c2lncyA9IDA7 Ci0gICAgcmV0dXJuKDApOwotfQotCi0KLS8qICBEIE8gXyBPIFAgRSBOICAtLSAgRG8gdGhlIHJp Z2h0IGtpbmQgb2Ygb3BlbigpIGNhbGwgZm9yIHRoZSB0dHkuICovCi0KLWludAotZG9fb3Blbih0 dG5hbWUpIGNoYXIgKnR0bmFtZTsgewotICAgIGludCBmbGFnczsKLQotI2lmZGVmIFFOWDYKLSAg ICAvKiBPX05PTkJMT0NLIG9uIC9kZXYvdHR5IG1ha2VzIG9wZW4oKSBmYWlsICovCi0gICAgcmV0 dXJuKHByaXZfb3BuKHR0bmFtZSwgT19SRFdSIHwKLQkJICAgICgKLQkJICAgICAoKGludClzdHJj bXAodHRuYW1lLCIvZGV2L3R0eSIpID09IDApID8KLQkJICAgICAwIDoKLQkJICAgICAodHRjYXJy ICE9IENBUl9PTikgPyBPX05PTkJMT0NLIDogMCkKLQkJICAgICkKLQkgICApOyAKLSNlbHNlICAv KiAhUU5YNiAqLwotCi0jaWZuZGVmCU9fTkRFTEFZCQkJLyogT19OREVMQVkgbm90IGRlZmluZWQg Ki8KLSAgICByZXR1cm4ocHJpdl9vcG4odHRuYW1lLDIpKTsKLSNlbHNlCQkJCQkvKiBPX05ERUxB WSBkZWZpbmVkICovCi0KLSNpZmRlZiBBVFQ3MzAwCi0vKgotIE9wZW4gY29tbXMgbGluZSB3aXRo b3V0IHdhaXRpbmcgZm9yIGNhcnJpZXIgc28gaW5pdGlhbCBjYWxsIGRvZXMgbm90IGhhbmcKLSBi ZWNhdXNlIHN0YXRlIG9mICJtb2RlbSIgaXMgbGlrZWx5IHVua25vd24gYXQgdGhlIGluaXRpYWwg Y2FsbCAgLWpyZC4KLSBJZiB0aGlzIGlzIG5lZWRlZCBmb3IgdGhlIGdldHR5IHN0dWZmIHRvIHdv cmssIGFuZCB0aGUgb3BlbiB3b3VsZCBub3Qgd29yawotIHdpdGhvdXQgT19OREVMQVkgd2hlbiBn ZXR0eSBpcyBzdGlsbCBvbiwgdGhlbiB0aGlzIHNwZWNpYWwgY2FzZSBpcyBvay4KLSBPdGhlcndp c2UsIGdldCByaWQgb2YgaXQuIC1za2UKLSovCi0gICAgcmV0dXJuKHByaXZfb3BuKHR0bmFtZSwg T19SRFdSIHwgT19OREVMQVkpKTsKLQotI2Vsc2UJLyogIUFUVDczMDAgKi8KLQotICAgIC8qIE5v cm1hbCBjYXNlLiBVc2UgT19OREVMQVkgYWNjb3JkaW5nIHRvIFNFVCBDQVJSSUVSLiBTZWUgdHRz Y2FycigpLiAqLwotICAgIGZsYWdzID0gT19SRFdSOwotICAgIGRlYnVnKEYxMDEsImRvX29wZW4g eGxvY2FsIiwiIix4bG9jYWwpOwotICAgIGRlYnVnKEYxMTEsImRvX29wZW4gZmxhZ3MgQSIsdHRu YW1lLGZsYWdzKTsKLSAgICBpZiAoeGxvY2FsICYmICh0dGNhcnIgIT0gQ0FSX09OKSkKLSAgICAg IGZsYWdzIHw9IE9fTkRFTEFZOwotICAgIGRlYnVnKEYxMTEsImRvX29wZW4gZmxhZ3MgQiIsdHRu YW1lLGZsYWdzKTsKLSAgICByZXR1cm4ocHJpdl9vcG4odHRuYW1lLCBmbGFncykpOwotI2VuZGlm IC8qICFBVFQ3MzAwICovCi0jZW5kaWYgLyogT19OREVMQVkgKi8KLSNlbmRpZiAvKiBRTlg2ICov Ci19Ci0KLS8qICBUIFQgQyBMIE8gUyAgLS0gIENsb3NlIHRoZSBUVFksIHJlbGVhc2luZyBhbnkg bG9jay4gICovCi0KLXN0YXRpYyBpbnQgdHRjX3N0YXRlID0gMDsJCS8qIHR0Y2xvc2UoKSBzdGF0 ZSAqLwotc3RhdGljIGNoYXIgKiB0dGNfbmFtW10gPSB7ICJzZXR1cCIsICJoYW5ndXAiLCAicmVz ZXQiLCAiY2xvc2UiIH07Ci0KLWludAotdHRjbG9zKGZvbykgaW50IGZvbzsgewkJCS8qIEFyZyBy ZXEnZCBmb3Igc2lnbmFsKCkgcHJvdG90eXBlICovCi0gICAgaW50IHh4LCB4ID0gMDsKLSAgICBl eHRlcm4gaW50IGV4aXRoYW5ndXA7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJ0dGNsb3MgdHR5ZmQiLCIi LHR0eWZkKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dGNsb3MgbmV0Y29ubiIsIiIsbmV0Y29ubik7Ci0g ICAgZGVidWcoRjEwMSwidHRjbG9zIHhsb2NhbCIsIiIseGxvY2FsKTsKLSNpZmRlZiBOT0ZEWkVS TwotICAgIGRlYnVnKEYxMDAsInR0Y2xvcyBOT0ZEWkVSTyIsIiIsMCk7Ci0jZW5kaWYgLyogTk9G RFpFUk8gKi8KLQotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBUVExFQlVGCi0gICAgbGVfaW5pdCgp OwkJCQkvKiBObyBuZWVkIGZvciBhbnkgb2YgdGhpcyAqLwotI2VuZGlmIC8qIFRUTEVCVUYgKi8K LSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICBpZiAodHR5ZmQgPCAwKQkJCS8qIFdhc24ndCBv cGVuLiAqLwotICAgICAgcmV0dXJuKDApOwotCi0gICAgaWYgKHR0ZmRmbGcpCQkJLyogSWYgd2Ug aW5oZXJpdGVkIHR0eWZkIGZyb20gKi8KLSAgICAgIHJldHVybigwKTsJCQkvKiBhbm90aGVyIHBy b2Nlc3MsIGRvbid0IGNsb3NlIGl0LiAqLwotCi0gICAgdHZ0ZmxnID0gMDsJCQkJLyogKHNvbWUg ZGF5IGdldCByaWQgb2YgdGhpcy4uLikgKi8KLSAgICBnb3RzaWdzID0gMDsKLQotI2lmZGVmIElL U0QKLSAgICBpZiAoaW5zZXJ2ZXIpIHsKLSNpZmRlZiBUTkNPREUKLSAgICAgICAgICB0bl9wdXNo KCk7ICAgICAgICAgICAgICAgICAgICAvKiBQbGFjZSBhbnkgd2FpdGluZyBkYXRhIGludG8gaW5w dXQqLwotICAgICAgICAgIHRuX3NvcHQoRE8sVEVMT1BUX0xPR09VVCk7ICAgIC8qIFNlbmQgTE9H T1VUIG9wdGlvbiBiZWZvcmUgY2xvc2UgKi8KLSAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9E TyhURUxPUFRfTE9HT1VUKSA9IDE7Ci0gICAgICAgICAgdG5fcmVzZXQoKTsgICAgICAgICAgICAg ICAgICAgLyogVGhlIFJlc2V0IFRlbG5ldCBPcHRpb24gdGFibGUuICAqLwotI2VuZGlmIC8qIFRO Q09ERSAqLwotI2lmZGVmIENLX1NTTAotCSAgaWYgKHNzbF9hY3RpdmVfZmxhZykgewotCSAgICAg IGlmIChzc2xfZGVidWdfZmxhZykKLQkJQklPX3ByaW50ZihiaW9fZXJyLCJjYWxsaW5nIFNTTF9z aHV0ZG93bihzc2wpXG4iKTsKLQkgICAgICBTU0xfc2h1dGRvd24oc3NsX2Nvbik7Ci0JICAgICAg U1NMX2ZyZWUoc3NsX2Nvbik7Ci0JICAgICAgc3NsX2NvbiA9IE5VTEw7Ci0JICAgICAgc3NsX2Fj dGl2ZV9mbGFnID0gMDsKLQkgIH0KLQkgIGlmICh0bHNfYWN0aXZlX2ZsYWcpIHsKLQkgICAgICBp ZiAoc3NsX2RlYnVnX2ZsYWcpCi0JCUJJT19wcmludGYoYmlvX2VyciwiY2FsbGluZyBTU0xfc2h1 dGRvd24odGxzKVxuIik7Ci0JICAgICAgU1NMX3NodXRkb3duKHRsc19jb24pOwotCSAgICAgIFNT TF9mcmVlKHRsc19jb24pOwotCSAgICAgIHRsc19jb24gPSBOVUxMOwotCSAgICAgIHRsc19hY3Rp dmVfZmxhZyA9IDA7Ci0JICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgfQotI2VuZGlmIC8q IElLU0QgKi8KLSNpZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaXBlKSB7CQkJLyogV2UndmUgYmVl biB1c2luZyBhIHBpcGUgKi8KLQkvKiB0dHBpcGUgPSAwOyAqLwotCWlmICh0dHBpZCA+IDApIHsK LQkgICAgaW50IHdzdGF0OwotCSAgICBpbnQgc3RhdHVzcDsKLQkgICAgY2xvc2UoZmRpbik7CQkv KiBDbG9zZSB0aGVzZS4gKi8KLQkgICAgY2xvc2UoZmRvdXQpOwotCSAgICBmZGluID0gZmRvdXQg PSAtMTsKLQkgICAga2lsbCh0dHBpZCwxKTsJCS8qIEtpbGwgZm9yayB3aXRoIFNJR0hVUCAqLwot CSAgICB3aGlsZSAoMSkgewotCQl3c3RhdCA9IHdhaXQoJnN0YXR1c3ApOwotCQlpZiAod3N0YXQg PT0gdHRwaWQgfHwgd3N0YXQgPT0gLTEpCi0JCSAgYnJlYWs7Ci0JCXBleGl0c3RhdCA9IChzdGF0 dXNwICYgMHhmZikgPyBzdGF0dXNwIDogc3RhdHVzcCA+PiA4OwotCSAgICB9Ci0JICAgIHR0cGlk ID0gMDsKLQl9Ci0JbmV0Y29ubiA9IDA7Ci0Jd2FzY2xvc2VkID0gMTsKLQl0dHlmZCA9IC0xOwot CXJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogTkVUQ01EICovCi0jaWZkZWYgTkVUUFRZCi0g ICAgaWYgKHR0cHR5KSB7Ci0jaWZuZGVmIE5PRE9QVFkKLSAgICAgICAgZW5kX3B0eSgpOwotI2Vu ZGlmIC8qIE5PRE9QVFkgKi8KLSAgICAgICAgY2xvc2UodHR5ZmQpOwotCW5ldGNvbm4gPSAwOwot CXdhc2Nsb3NlZCA9IDE7Ci0gICAgICAgIHR0cHR5ID0gMDsKLSAgICAgICAgdHR5ZmQgPSAtMTsK LSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBORVRQVFkgKi8KLQotI2lmZGVm CU5FVENPTk4KLSAgICBpZiAobmV0Y29ubikgewkJCS8qIElmIGl0J3MgYSBuZXR3b3JrIGNvbm5l Y3Rpb24uICovCi0JZGVidWcoRjEwMCwidHRjbG9zIGNsb3NpbmcgbmV0IiwiIiwwKTsKLQluZXRj bG9zKCk7CQkJLyogTGV0IHRoZSBuZXR3b3JrIG1vZHVsZSBjbG9zZSBpdC4gKi8KLQluZXRjb25u ID0gMDsJCQkvKiBObyBtb3JlIG5ldHdvcmsgY29ubmVjdGlvbi4gKi8KLQlkZWJ1ZyhGMTAxLCJ0 dGNsb3MgdHR5ZmQgYWZ0ZXIgbmV0Y2xvcyIsIiIsdHR5ZmQpOyAvKiBTaG91bGQgYmUgLTEgKi8K LQlyZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmCS8qIE5FVENPTk4gKi8KLQotICAgIGlmICh4bG9j YWwpIHsJCQkvKiBXZSdyZSBjbG9zaW5nIGEgU0VUIExJTkUgZGV2aWNlICovCi0jaWZkZWYgRlQy MQkJCQkvKiBGb3J0dW5lIDIuMS1zcGVjaWZpYyBpdGVtcyAuLi4gKi8KLQlpb2N0bCh0dHlmZCxU SU9DSFBDTCwgTlVMTCk7Ci0jZW5kaWYgLyogRlQyMSAqLwotI2lmZGVmIHVsdHJpeAkJCQkvKiBV bHRyaXgtc3BlY2lmaWMgaXRlbXMgLi4uICovCi0jaWZkZWYgVElPQ1NJTlVTRQotCS8qIFVuc2V0 IHRoZSBJTlVTRSBmbGFnIHRoYXQgd2Ugc2V0IGluIHR0b3BlbigpICovCi0JaW9jdGwodHR5ZmQs IFRJT0NTSU5VU0UsIE5VTEwpOwotI2VuZGlmIC8qIFRJT0NTSU5VU0UgKi8KLQlpb2N0bCh0dHlm ZCwgVElPQ05NT0RFTSwgJngpOwotI2lmZGVmIENPTU1FTlQKLQkvKiBXaGF0IHdhcyB0aGlzPyAq LwotCWlvY3RsKHR0eWZkLCBUSU9DTkNBUiwgTlVMTCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwot I2VuZGlmIC8qIHVsdHJpeCAqLwotICAgIH0KLQotICAgIC8qIFRoaXMgaXMgdG8gcHJldmVudCB1 cyBmcm9tIHN0aWNraW5nIGluIHR0aGFuZygpIG9yIGNsb3NlKCkuICovCi0KLSNpZmRlZiBPX05E RUxBWQotI2lmbmRlZiBhZWdpcwotICAgIGlmICh0dHlmZCA+IDApIHsJCQkvKiBCdXQgc2tpcCBp dCBvbiBzdGRpbi4gKi8KLQlkZWJ1ZyhGMTAwLCJ0dGNsb3Mgc2V0dGluZyBPX05ERUxBWSIsIiIs MCk7Ci0JeCA9IGZjbnRsKHR0eWZkLEZfU0VURkwsZmNudGwodHR5ZmQsRl9HRVRGTCwgMCl8T19O REVMQVkpOwotI2lmZGVmIERFQlVHCi0JaWYgKGRlYmxvZyAmJiB4ID09IC0xKSB7Ci0JICAgIHBl cnJvcigiV2FybmluZyAtIENhbid0IHNldCBPX05ERUxBWSIpOwotCSAgICBkZWJ1ZyhGMTAxLCJ0 dGNsb3MgZmNudGwgZmFpbHVyZSB0byBzZXQgT19OREVMQVkiLCIiLHgpOwotCX0KLSNlbmRpZiAv KiBERUJVRyAqLwotICAgIH0KLSNlbmRpZiAvKiBhZWdpcyAqLwotI2VuZGlmIC8qIE9fTkRFTEFZ ICovCi0KLSAgICB4ID0gMDsKLSAgICB0dGNfc3RhdGUgPSAwOwotICAgIGlmICh4bG9jYWwKLSNp ZmRlZiBOT0ZEWkVSTwotCXx8IHR0eWZkID4gMAotI2VuZGlmIC8qIE5PRkRaRVJPICovCi0JKSB7 Ci0Jc2F2YWwgPSBzaWduYWwoU0lHQUxSTSx4dGltZXJoKTsgLyogRW5hYmxlIHRpbWVyIGludGVy cnVwdC4gKi8KLQl4eCA9IGFsYXJtKDgpOwkJCS8qIEFsbG93IDggc2Vjb25kcy4gKi8KLQlkZWJ1 ZyhGMTAxLCJ0dGNsb3MgYWxhcm0iLCIiLHh4KTsKLQlpZiAoCi0jaWZkZWYgQ0tfUE9TSVhfU0lH Ci0JICAgIHNpZ3NldGptcChzamJ1ZiwxKQotI2Vsc2UKLQkgICAgc2V0am1wKHNqYnVmKQotI2Vu ZGlmIC8qIENLX1BPU0lYX1NJRyAqLwotCSAgICApIHsJCQkJLyogVGltZXIgd2VudCBvZmY/ICov Ci0JICAgIHggPSAtMTsKLSNpZmRlZiBERUJVRwotCSAgICBkZWJ1ZyhGMTExLCJ0dGNsb3MgQUxB Uk0gVFJBUCBlcnJubyIsY2tpdG9hKHR0Y19zdGF0ZSksZXJybm8pOwotCSAgICBwcmludGYoInR0 Y2xvcygpIHRpbWVvdXQ6ICVzXG4iLCB0dGNfbmFtW3R0Y19zdGF0ZV0pOwotI2VuZGlmIC8qIERF QlVHICovCi0JfQotCS8qIEhhbmcgdXAgdGhlIGRldmljZSAoZHJvcCBEVFIpICovCi0KLQllcnJu byA9IDA7Ci0JZGVidWcoRjExMSwidHRjbG9zIEEiLGNraXRvYSh4KSx0dGNfc3RhdGUpOwotCWlm ICh0dGNfc3RhdGUgPCAxKSB7Ci0JICAgIHR0Y19zdGF0ZSA9IDE7Ci0JICAgIGRlYnVnKEYxMDEs InR0Y2xvcyBleGl0aGFuZ3VwIiwiIixleGl0aGFuZ3VwKTsKLQkgICAgaWYgKGV4aXRoYW5ndXAp IHsKLQkJYWxhcm0oOCk7CQkvKiBSZS1hcm0gdGhlIHRpbWVyICovCi0JCWRlYnVnKEYxMDEsInR0 Y2xvcyBjYWxsaW5nIHR0aGFuZygpIiwiIix4KTsKLQkJeCA9IHR0aGFuZygpOwkJLyogSGFuZyB1 cCBmaXJzdCwgdGhlbi4uLiAqLwotCQlkZWJ1ZyhGMTAxLCJ0dGNsb3MgdHRoYW5nKCkiLCIiLHgp OwotCSAgICB9Ci0jaWZuZGVmIENLX05PSFVQQ0wKLS8qCi0gIE9jdCAyMDA2IC0gTGVhdmUgRFRS IG9uIGlmIFNFVCBFWElUIEhBTkdVUCBPRkYuCi0gIFN1Z2dlc3RlZCBieSBTb2V3b25vIEVmZmVu ZGkuCi0qLwotI2lmZGVmIEhVUENMCi0JICAgIGVsc2UgewotCQl0dG9sZC5jX2NmbGFnICY9IH5I VVBDTDsgLyogTGV0J3Mgc2VlIGhvdyB0aGlzIHRyYXZlbHMgKi8KLSNpZmRlZiBCU0Q0NE9SUE9T SVgKLQkJdGNzZXRhdHRyKHR0eWZkLFRDU0FOT1csJnR0b2xkKTsKLSNlbHNlIC8qICFCU0Q0NE9S UE9TSVggKi8KLSNpZmRlZiBBVFRTVgotCQlpb2N0bCh0dHlmZCxUQ1NFVEFXLCZ0dG9sZCk7CQkK LSNlbHNlICAvKiAhQVRUU1YgKi8KLQkJc3R0eSh0dHlmZCwmdHRvbGQpOwotI2VuZGlmCS8qIEFU VFNWICovCi0jZW5kaWYJLyogQlNENDRPUlBPU0lYICovCi0JICAgIH0KLSNlbmRpZgkvKiBIVVBD TCAqLwotI2VuZGlmCS8qIENLX05PSFVQQ0wgKi8KLQl9Ci0JLyogUHV0IGJhY2sgZGV2aWNlIG1v ZGVzIGFzIHdlIGZvdW5kIHRoZW0gKi8KLQotCWVycm5vID0gMDsKLQlkZWJ1ZyhGMTExLCJ0dGNs b3MgQiIsY2tpdG9hKHgpLHR0Y19zdGF0ZSk7Ci0JaWYgKHR0Y19zdGF0ZSA8IDIpIHsKLQkgICAg dHRjX3N0YXRlID0gMjsKLQkgICAgLyogRG9uJ3QgdHJ5IHRvIG1lc3Mgd2l0aCB0dHkgbW9kZXMg aWYgdHRoYW5nIGZhaWxlZCgpICovCi0JICAgIC8qIHNpbmNlIGl0IHByb2JhYmx5IHdvbid0IHdv cmsuICovCi0JICAgIGlmICh4ID4gLTEpIHsKLQkJZGVidWcoRjEwMSwidHRjbG9zIGNhbGxpbmcg dHRyZXMoKSIsIiIseCk7Ci0JCXNpZ25hbChTSUdBTFJNLHh0aW1lcmgpOyAvKiBSZS1lbmFibGUg dGhlIGFsYXJtLiAqLwotCQlhbGFybSg4KTsJCS8qIFJlLWFybSB0aGUgdGltZXIgKi8KLQkJeCA9 IHR0cmVzKCk7CQkvKiBSZXNldCBkZXZpY2UgbW9kZXMuICovCi0JCWRlYnVnKEYxMDEsInR0Y2xv cyB0dHJlcygpIiwiIix4KTsKLQkJYWxhcm0oMCk7Ci0JICAgIH0KLQl9Ci0JLyogQ2xvc2UgdGhl IGRldmljZSAqLwotCi0JZXJybm8gPSAwOwotCWRlYnVnKEYxMDEsInR0Y2xvcyBDIiwiIix0dGNf c3RhdGUpOwotCWlmICh0dGNfc3RhdGUgPCAzKSB7Ci0JICAgIHR0Y19zdGF0ZSA9IDM7Ci0JICAg IGVycm5vID0gMDsKLQkgICAgZGVidWcoRjEwMSwidHRjbG9zIGNhbGxpbmcgY2xvc2UiLCIiLHgp OwotCSAgICBzaWduYWwoU0lHQUxSTSx4dGltZXJoKTsJLyogUmUtZW5hYmxlIGFsYXJtLiAqLwot CSAgICBhbGFybSg4KTsJCQkvKiBSZS1hcm0gdGhlIHRpbWVyICovCi0JICAgIHggPSBjbG9zZSh0 dHlmZCk7CQkvKiBDbG9zZSB0aGUgZGV2aWNlLiAqLwotCSAgICBkZWJ1ZyhGMTAxLCJ0dGNsb3Mg Y2xvc2UoKSIsIiIseCk7Ci0JICAgIGlmICh4ID4gLTEpCi0JICAgICAgdHRjX3N0YXRlID0gMzsK LQl9Ci0JZGVidWcoRjEwMSwidHRjbG9zIEQiLCIiLHR0Y19zdGF0ZSk7Ci0JdHRpbW9mZigpOwkJ CS8qIFR1cm4gb2ZmIHRpbWVyLiAqLwotCWlmICh4IDwgMCkgewotCSAgICBwcmludGYoIj9XQVJO SU5HIC0gY2xvc2UgZmFpbGVkOiAlc1xuIix0dG5tc3YpOwotI2lmZGVmIERFQlVHCi0JICAgIGlm IChkZWJsb2cpIHsKLQkJcHJpbnRmKCJlcnJubyA9ICVkXG4iLCBlcnJubyk7Ci0JCWRlYnVnKEYx MDEsInR0Y2xvcyBmYWlsZWQiLCIiLGVycm5vKTsKLQkgICAgfQotI2VuZGlmIC8qIERFQlVHICov Ci0JfQotCS8qIFVubG9jayBhZnRlciBjbG9zaW5nIGJ1dCBiZWZvcmUgYW55IGdldHR5IG11bWJv IGp1bWJvICovCi0KLQlkZWJ1ZyhGMTAwLCJ0dGNsb3MgYWJvdXQgdG8gY2FsbCB0dHVubGNrIiwi IiwwKTsKLSAgICAgICAgaWYgKHR0dW5sY2soKSkgICAgICAgICAgICAgICAgICAvKiBSZWxlYXNl IHV1Y3Atc3R5bGUgbG9jayAqLwotCSAgZnByaW50ZihzdGRlcnIsIldhcm5pbmcsIHByb2JsZW0g cmVsZWFzaW5nIGxvY2tcclxuIik7Ci0gICAgfQotCi0vKiBGb3IgYmlkaXJlY3Rpb25hbCBsaW5l cywgcmVzdG9yZSBnZXR0eSBpZiBpdCB3YXMgdGhlcmUgYmVmb3JlLiAqLwotCi0jaWZkZWYgQUNV Q05UUkwJCQkJLyogNC4zQlNEIGFjdWNudHJsKCkgbWV0aG9kLiAqLwotICAgIGlmICh4bG9jYWwp IHsKLQlkZWJ1ZyhGMTAwLCJ0dGNsb3MgQUNVQ05UUkwiLCIiLDApOwotCWFjdWNudHJsKCJlbmFi bGUiLHR0bm1zdik7CS8qIEVuYWJsZSBnZXR0eSBvbiB0aGUgZGV2aWNlLiAqLwotICAgIH0KLSNl bHNlCi0jaWZkZWYgQVRUNzMwMAkJCQkvKiBBVFQgVU5JWCBQQyAoM0IxLCA3MzAwKSBtZXRob2Qu ICovCi0gICAgaWYgKHhsb2NhbCkgewotCWRlYnVnKEYxMDAsInR0Y2xvcyBBVFQ3MzAwIG9uZ2V0 dHkiLCIiLDApOwotCWlmIChhdHRtb2RlbSAmIERPR0VUWSkJCS8qIFdhcyBnZXR0eSgxbSkgcnVu bmluZyBiZWZvcmUgdXM/ICovCi0JICBvbmdldHR5KHR0bm1zdik7CQkvKiBZZXMsIHJlc3RhcnQg Z2V0dHkgb24gdHR5IGxpbmUgKi8KLQlhdHRtb2RlbSAmPSB+RE9HRVRZOwkJLyogTm8gcGhvbmUg aW4gdXNlLCBnZXR0eSByZXN0b3JlZCAqLwotICAgIH0KLSNlbmRpZiAvKiBBVFQ3MzAwICovCi0j ZW5kaWYgLyogU3lzdGVtLWRlcGVuZGVudCBnZXR0eS1yZXN0b3JpbmcgbWV0aG9kcyAqLwotCi0j aWZkZWYgc29ueV9uZXdzCi0gICAga21fZXh0ID0gLTE7CQkJLyogSW52YWxpZGF0ZSBkZXZpY2Un cyBLYW5qaS1tb2RlICovCi0jZW5kaWYgLyogc29ueV9uZXdzICovCi0KLSAgICB0dHlmZCA9IC0x OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnZhbGlkYXRlIHRoZSBmaWxlIGRlc2NyaXB0 b3IuICovCi0gICAgd2FzY2xvc2VkID0gMTsKLSAgICBkZWJ1ZyhGMTAwLCJ0dGNsb3MgZG9uZSIs IiIsMCk7Ci0gICAgcmV0dXJuKDApOwotfQotCi0vKiAgVCBUIEggQSBOIEcgIC0tICBIYW5ndXAg cGhvbmUgbGluZSBvciBuZXR3b3JrIGNvbm5lY3Rpb24uICAqLwotLyoKLSAgUmV0dXJuczoKLSAg MCBpZiBpdCBkb2VzIG5vdGhpbmcuCi0gIDEgaWYgaXQgYmVsaWV2ZXMgdGhhdCBpdCBodW5nIHVw IHN1Y2Nlc3NmdWxseS4KLSAtMSBpZiBpdCBiZWxpZXZlcyB0aGF0IHRoZSBoYW5ndXAgYXR0ZW1w dCBmYWlsZWQuCi0qLwotCi0jZGVmaW5lIEhVUFRJTUUgNTAwCQkJLyogTWlsbGlzZWNvbmRzIGZv ciBoYW5ndXAgKi8KLQotI2lmZGVmIENPTU1FTlQKLS8qIFRoZSBmb2xsb3dpbmcgZGlkbid0IHdv cmsgYnV0IFRJT0NTRFRSIGRvZXMgd29yayAqLwotI2lmZGVmIFVOSVhXQVJFCi0vKiBEZWZpbmUg SFVQX1BPU0lYIHRvIGZvcmNlIG5vbi1QT1NJWCBidWlsZHMgdG8gdXNlIHRoZSBQT1NJWCBoYW5n dXAgbWV0aG9kICovCi0jaWZuZGVmIFBPU0lYCQkJCS8qIFN1Y2ggYXMgVW5peHdhcmUgMS54LCAy LnggKi8KLSNpZm5kZWYgSFVQX1BPU0lYCi0jZGVmaW5lIEhVUF9QT1NJWAotI2VuZGlmIC8qIEhV UF9QT1NJWCAqLwotI2VuZGlmIC8qIFBPU0lYICovCi0jZW5kaWYgLyogVU5JWFdBUkUgKi8KLSNl bmRpZiAvKiBDT01NRU5UICovCi0KLSNpZm5kZWYgVVNFX1RJT0NTRFRSCi0jaWZkZWYgX19OZXRC U0RfXwotLyogQmVjYXVzZSB0aGUgUE9TSVggbWV0aG9kIChzZXQgb3V0cHV0IHNwZWVkIHRvIDAp IGRvZXNuJ3Qgd29yayBpbiBOZXRCU0QgKi8KLSNpZmRlZiBUSU9DU0RUUgotI2lmZGVmIFRJT0ND RFRSCi0jZGVmaW5lIFVTRV9USU9DU0RUUgotI2VuZGlmIC8qIFRJT0NDRFRSICovCi0jZW5kaWYg LyogVElPQ1NEVFIgKi8KLSNlbmRpZiAvKiBfX05ldEJTRF9fICovCi0jZW5kaWYgLyogVVNFX1RJ T0NTRFRSICovCi0KLSNpZm5kZWYgSFVQX0NMT1NFX1BPU0lYCi0jaWZkZWYgT1U4Ci0jZGVmaW5l IEhVUF9DTE9TRV9QT1NJWAotI2Vsc2UKLSNpZmRlZiBDS19TQ09WNQotI2RlZmluZSBIVVBfQ0xP U0VfUE9TSVgKLSNlbmRpZiAvKiBDS19TQ09WNSAqLwotI2VuZGlmIC8qIE9VOCAqLwotI2VuZGlm IC8qIEhVUF9DTE9TRV9QT1NJWCAqLwotCi0jaWZkZWYgTk9fSFVQX0NMT1NFX1BPU0lYCi0jaWZk ZWYgSFVQX0NMT1NFX1BPU0lYCi0jdW5kZWYgSFVQX0NMT1NFX1BPU0lYCi0jZW5kaWYgLyogSFVQ X0NMT1NFX1BPU0lYICovCi0jZW5kaWYgLyogTk9fSFVQX0NMT1NFX1BPU0lYICovCi0KLWludAot dHRoYW5nKCkgewotI2lmZGVmIE5PTE9DQUwKLSAgICByZXR1cm4oMCk7Ci0jZWxzZQotICAgIGlu dCB4ID0gMDsJCQkJLyogU29tZXRpbWVzIHVzZWQgYXMgcmV0dXJuIGNvZGUuICovCi0jaWZuZGVm IFBPU0lYCi0gICAgaW50IHo7CQkJCS8qIHdvcmtlciAqLwotI2VuZGlmIC8qIFBPU0lYICovCi0K LSNpZmRlZiBDT0hFUkVOVAotI2RlZmluZSBTVk9SUE9TSVgKLSNlbmRpZiAvKiBDT0hFUkVOVCAq LwotCi0jaWZkZWYgU1ZPUlBPU0lYCQkJLyogQVQmVCwgUE9TSVgsIEhQVVggZGVjbGFyYXRpb25z LiAqLwotICAgIGludCBzcGRzYXY7CQkJCS8qIGZvciBzYXZpbmcgc3BlZWQgKi8KLSNpZmRlZiBI VVBfUE9TSVgKLSAgICBpbnQgc3Bkc2F2aTsKLSNlbHNlCi0jaWZkZWYgQlNENDRPUlBPU0lYCi0g ICAgaW50IHNwZHNhdmk7Ci0jZW5kaWYgLyogQlNENDRPUlBPU0lYICovCi0jZW5kaWYgLyogSFVQ X1BPU0lYICovCi0jaWZkZWYgSFBVWAotLyoKLSAgRWFybHkgdmVyc2lvbnMgb2YgSFAtVVggb21p dHRlZCB0aGUgbWZsYWcgdHlwZWRlZi4gIElmIHlvdSBnZXQgY29tcGxhaW50cwotICBhYm91dCBp dCwganVzdCBjaGFuZ2UgaXQgdG8gbG9uZyAob3IgYmV0dGVyIHN0aWxsLCB1bnNpZ25lZCBsb25n KS4KLSovCi0gICAgbWZsYWcKLSAgICAgIGR0cl9kb3duID0gMDAwMDAwMDAwMDAsCi0gICAgICBt b2RlbV9ydG4sCi0gICAgICBtb2RlbV9zYXY7Ci0gICAgY2hhciBtb2RlbV9zdGF0ZVs2NF07Ci0j ZW5kaWYgLyogSFBVWCAqLwotICAgIGludCBmbGFnczsJCQkJLyogZmNudGwgZmxhZ3MgKi8KLSAg ICB1bnNpZ25lZCBzaG9ydCB0dGNfc2F2ZTsKLSNlbmRpZiAvKiBTVk9SUE9TSVggKi8KLQotICAg IGlmICh0dHlmZCA8IDApIHJldHVybigwKTsgICAgICAgICAgIC8qIERvbid0IGRvIHRoaXMgaWYg bm90IG9wZW4gICovCi0gICAgaWYgKHhsb2NhbCA8IDEpIHJldHVybigwKTsJCS8qIERvbid0IGRv IHRoaXMgaWYgbm90IGxvY2FsICovCi0KLSNpZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaXBlKQot ICAgICAgcmV0dXJuKCh0dGNsb3MoMCkgPCAwKSA/IC0xIDogMSk7Ci0jZW5kaWYgLyogTkVUQ01E ICovCi0jaWZkZWYgTkVUUFRZCi0gICAgaWYgKHR0cHR5KQotICAgICAgcmV0dXJuKCh0dGNsb3Mo MCkgPCAwKSA/IC0xIDogMSk7Ci0jZW5kaWYgLyogTkVUUFRZICovCi0jaWZkZWYgTkVUQ09OTgot ICAgIGlmIChuZXRjb25uKSB7CQkJLyogTmV0d29yayBjb25uZWN0aW9uLiAqLwotI2lmZGVmIFRO X0NPTVBPUlQKLSAgICAgICAgaWYgKGlzdG5jb21wb3J0KCkpIHsKLSAgICAgICAgICAgIGludCBy YyA9IHRuY19zZXRfZHRyX3N0YXRlKDApOwotICAgICAgICAgICAgaWYgKHJjID49IDApIHsKLSAg ICAgICAgICAgICAgICBtc2xlZXAoSFVQVElNRSk7Ci0gICAgICAgICAgICAgICAgcmMgPSB0bmNf c2V0X2R0cl9zdGF0ZSgxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybihyYyA+ PSAwID8gMSA6IC0xKTsKLSAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyogVE5fQ09NUE9SVCAqLwot CSAgcmV0dXJuKChuZXRjbG9zKCkgPCAwKSA/IC0xIDogMSk7IC8qIEp1c3QgY2xvc2UgaXQuICov Ci0gIH0KLSNlbmRpZiAvKiBORVRDT05OICovCi0KLS8qIEZyb20gaGVyZSBkb3duLCB3ZSBoYW5k bGUgcmVhbCB0dHkgZGV2aWNlcy4gKi8KLSNpZmRlZiBIVVBfUE9TSVgKLS8qCi0gIGUuZy4gZm9y IFVuaXh3YXJlIDIsIHdoZXJlIHdlIGRvbid0IGhhdmUgYSBmdWxsIFBPU0lYIGJ1aWxkLCB3ZQot ICBzdGlsbCBoYXZlIHRvIHVzZSBQT1NJWC1zdHlsZSBoYW5ndXAuICBUaHVzIHRoZSBkdXBsaWNh dGlvbiBvZiB0aGlzCi0gIGFuZCB0aGUgbmV4dCBjYXNlLCB0aGUgb25seSBkaWZmZXJlbmNlIGJl aW5nIHdlIHVzZSBhIGxvY2FsIHRlcm1pb3MKLSAgc3RydWN0IGhlcmUsIHNpbmNlIGEgZGlmZmVy ZW50IG1vZGVsIGlzIHVzZWQgZWxzZXdoZXJlLgotCi0gIE5PIExPTkdFUiBVU0VEIGFzIG9mIEMt S2VybWl0IDguMCAtLSBpdCB0dXJucyBvdXQgdGhhdCB0aGlzIG1ldGhvZCwKLSAgZXZlbiB0aG91 Z2ggaXQgY29tcGlsZXMgYW5kIGV4ZWN1dGVzIHdpdGhvdXQgZXJyb3IsIGRvZXNuJ3QgYWN0dWFs bHkKLSAgd29yayAoaS5lLiBEVFIgZG9lcyBub3QgZHJvcCksIHdoZXJlYXMgdGhlIFRJT0NTRFRS IG1ldGhvZCB3b3JrcyBqdXN0IGZpbmUsCi0qLwotICAgIHsKLQlzdHJ1Y3QgdGVybWlvcyB0dGN1 cjsKLQlpbnQgeDsKLQlkZWJ1ZyhGMTAwLCJ0dGhhbmcgSFVQX1BPU0lYIHN0eWxlIiwiIiwwKTsK LQl4ID0gdGNnZXRhdHRyKHR0eWZkLCAmdHRjdXIpOwkvKiBHZXQgY3VycmVudCBhdHRyaWJ1dGVz ICovCi0JZGVidWcoRjExMSwidHRoYW5nIHRjZ2V0YXR0ciIsY2tpdG9hKGVycm5vKSx4KTsKLQlp ZiAoeCA8IDApIHJldHVybigtMSk7Ci0Jc3Bkc2F2ID0gY2ZnZXRvc3BlZWQoJnR0Y3VyKTsJLyog R2V0IGN1cnJlbnQgc3BlZWQgKi8KLQlkZWJ1ZyhGMTExLCJ0dGhhbmcgY2ZnZXRvc3BlZWQiLGNr aXRvYShlcnJubyksc3Bkc2F2KTsKLQlzcGRzYXZpID0gY2ZnZXRpc3BlZWQoJnR0Y3VyKTsJLyog R2V0IGN1cnJlbnQgc3BlZWQgKi8KLQlkZWJ1ZyhGMTExLCJ0dGhhbmcgY2ZnZXRpc3BlZWQiLGNr aXRvYShlcnJubyksc3Bkc2F2aSk7Ci0JeCA9IGNmc2V0b3NwZWVkKCZ0dGN1cixCMCk7CS8qIFJl cGxhY2UgYnkgMCAqLwotCWRlYnVnKEYxMTEsInR0aGFuZyBjZnNldG9zcGVlZCIsY2tpdG9hKGVy cm5vKSx4KTsKLQlpZiAoeCA8IDApIHJldHVybigtMSk7Ci0JeCA9IGNmc2V0aXNwZWVkKCZ0dGN1 cixCMCk7Ci0JZGVidWcoRjExMSwidHRoYW5nIGNmc2V0aXNwZWVkIixja2l0b2EoZXJybm8pLHgp OwotCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKLQl4ID0gdGNzZXRhdHRyKHR0eWZkLFRDU0FEUkFJ TiwmdHRjdXIpOwotCWRlYnVnKEYxMTEsInR0aGFuZyB0Y3NldGF0dHIgQjAiLGNraXRvYShlcnJu bykseCk7Ci0JaWYgKHggPCAwKSByZXR1cm4oLTEpOwotCW1zbGVlcChIVVBUSU1FKTsJCS8qIFNs ZWVwIDAuNSBzZWMgKi8KLQl4ID0gY2ZzZXRvc3BlZWQoJnR0Y3VyLHNwZHNhdik7IC8qIFJlc3Rv cmUgcHJldiBzcGVlZCAqLwotCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKLQlkZWJ1ZyhGMTExLCJ0 dGhhbmcgY2ZzZXRvc3BlZWQgcHJldiIsY2tpdG9hKGVycm5vKSx4KTsKLQl4ID0gY2ZzZXRpc3Bl ZWQoJnR0Y3VyLHNwZHNhdmkpOwotCWRlYnVnKEYxMTEsInR0aGFuZyBjZnNldGlzcGVlZCBwcmV2 Iixja2l0b2EoZXJybm8pLHgpOwotCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKLQl4ID0gdGNzZXRh dHRyKHR0eWZkLFRDU0FEUkFJTiwmdHRjdXIpOwotCWRlYnVnKEYxMTEsInR0aGFuZyB0Y3NldGF0 dHIgcmVzdG9yZSIsY2tpdG9hKGVycm5vKSx4KTsKLQlpZiAoeCA8IDApIHJldHVybigtMSk7Ci0J cmV0dXJuKDEpOwotICAgIH0KLSNlbHNlCi0jaWZkZWYgQlNENDRPUlBPU0lYCi0jaWZkZWYgUU5Y Ci0gICAgewotCWludCB4OwotCXggPSB0Y2Ryb3BsaW5lKHR0eWZkLDUwMCk7Ci0JZGVidWcoRjEw MSwidHRoYW5nIFFOWCB0Y2Ryb3BsaW5lIiwiIix4KTsKLQl0dGN1ci5jX2NmbGFnIHw9IENMT0NB TDsKLQl4ID0gdGNzZXRhdHRyKHR0eWZkLFRDU0FEUkFJTiwmdHRjdXIpOwotCWRlYnVnKEYxMDEs InR0aGFuZyBRTlggdGNzZXRhdHRyIHJlc3RvcmUiLCIiLHgpOwotCWlmICh4IDwgMCkgewotCSAg ICBkZWJ1ZyhGMTAxLCJ0dGhhbmcgUU5YIHRjc2V0YXR0ciByZXN0b3JlIGVycm5vIiwiIixlcnJu byk7Ci0JICAgIHJldHVybigtMSk7Ci0JfQotCS8qIEZpeCBmbGFncyAtIGVuc3VyZSBPX05PTkJM T0NLIGlzIG9mZiAqLwotCi0JZXJybm8gPSAwOwotCWRlYnVnKEYxMDEsInR0aGFuZyBRTlggaW5p ZmxhZ3MiLCIiLGluaWZsYWdzKTsKLQlpZiAoZmNudGwodHR5ZmQsIEZfU0VURkwsIGluaWZsYWdz KSA9PSAtMSkgewotCSAgICBkZWJ1ZyhGMTAxLCJ0dGhhbmcgUU5YIEZfU0VURkwgZXJybm8iLCIi LGVycm5vKTsKLQkgICAgcmV0dXJuKC0xKTsKLQl9Ci0JcmV0dXJuKHgpOwotICAgIH0KLSNlbHNl ICAvKiBRTlggKi8KLSAgICB7Ci0JaW50IHg7Ci0jaWZkZWYgVVNFX1RJT0NTRFRSCi0JZGVidWco RjEwMCwidHRoYW5nIEJTRDQ0T1JQT1NJWCBVU0VfVElPQ1NEVFIiLCIiLDApOwotCWVycm5vID0g MDsKLQl4ID0gaW9jdGwodHR5ZmQsIFRJT0NDRFRSLCBOVUxMKTsKLQlkZWJ1ZyhGMTExLCJ0dGhh bmcgQlNENDRPUlBPU0lYIGlvY3RsIFRJT0NDRFRSIixja2l0b2EoZXJybm8pLHgpOwotCWlmICh4 IDwgMCkgcmV0dXJuKC0xKTsKLQltc2xlZXAoSFVQVElNRSk7CQkvKiBTbGVlcCAwLjUgc2VjICov Ci0JZXJybm8gPSAwOwotCXggPSBpb2N0bCh0dHlmZCwgVElPQ1NEVFIsIE5VTEwpOwotCWRlYnVn KEYxMTEsInR0aGFuZyBCU0Q0NE9SUE9TSVggaW9jdGwgVElPQ1NEVFIiLGNraXRvYShlcnJubyks eCk7Ci0JaWYgKHggPCAwKSByZXR1cm4oLTEpOwotI2Vsc2UgIC8qIFVTRV9USU9DU0RUUiAqLwot Ci0jaWZkZWYgSFVQX0NMT1NFX1BPU0lYCi0vKgotICBJbiBPU1I1IHZlcnNpb25zIHdoZXJlIFRJ T0NTRFRSIGlzIG5vdCBkZWZpbmVkICh1cCB0byBhbmQgaW5jbHVkaW5nIGF0Ci0gIGxlYXN0IDUu MC42YSkgdGhlIFBPU0lYIEFQSXMgaW4gdGhlICIjZWxzZSIgcGFydCBiZWxvdyBhcmUgYXZhaWxh YmxlIGJ1dAotICBkb24ndCB3b3JrLCBhbmQgbm8gb3RoZXIgQVBJcyBhcmUgYXZhaWxhYmxlIHRo YXQgZG8gd29yay4gIEluIHRoaXMgY2FzZQotICB3ZSBoYXZlIHRvIGRyb3AgRFRSIGJ5IGJydXRl IGZvcmNlOiBjbG9zZSBhbmQgcmVvcGVuIHRoZSBwb3J0LiAgVGhpcwotICBjb2RlIGFjdHVhbGx5 IHdvcmtzLCBidXQgYWxsIHRoZSBzdGVwcyBhcmUgY3J1Y2lhbDogc2V0dGluZyBDTE9DQUwsIHRo ZQotICBPX05ERUxBWSBtYW5pcHVsYXRpb25zLCBldGMuCi0qLwotCWRlYnVnKEYxMDAsInR0aGFu ZyBIVVBfQ0xPU0VfUE9TSVggY2xvc2Uvb3BlbiIsIiIsMCk7Ci0JZGVidWcoRjEwMSwidHRoYW5n IEhVUF9DTE9TRV9QT1NJWCBPX05PTkJMT0NLIiwiIixPX05PTkJMT0NLKTsKLQlkZWJ1ZyhGMTAx LCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIE9fTkRFTEFZIiwiIixPX05ERUxBWSk7Ci0JZXJybm8g PSAwOwotCXggPSB0Y2dldGF0dHIodHR5ZmQsICZ0dGN1cik7CS8qIEdldCBjdXJyZW50IGF0dHJp YnV0ZXMgKi8KLQlkZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIHRjZ2V0YXR0ciIs IiIseCk7Ci0JaWYgKHggPCAwKSB7Ci0JICAgIGRlYnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xPU0Vf UE9TSVggdGNnZXRhdHRyIGVycm5vIiwiIixlcnJubyk7Ci0JICAgIHJldHVybigtMSk7Ci0JfQot CWVycm5vID0gMDsKLQotCXggPSBjbG9zZSh0dHlmZCk7CQkvKiBDbG9zZSB3aXRob3V0IHJlbGVh c2luZyBsb2NrICovCi0JaWYgKHggPCAwKSB7Ci0JICAgIGRlYnVnKEYxMDEsInR0aGFuZyBIVVBf Q0xPU0VfUE9TSVggY2xvc2UgZXJybm8iLCIiLGVycm5vKTsKLQkgICAgcmV0dXJuKC0xKTsKLQl9 Ci0JZXJybm8gPSAwOwotCXggPSBtc2xlZXAoNTAwKTsJCS8qIFBhdXNlIGhhbGYgYSBzZWNvbmQg Ki8KLQlpZiAoeCA8IDApIHsJCQkvKiBPciBpZiB0aGF0IGRvZXNuJ3Qgd29yaywgMSBzZWMgKi8K LQkgICAgZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCBtc2xlZXAgZXJybm8iLCIi LGVycm5vKTsKLQkgICAgc2xlZXAoMSk7Ci0JfQotCWVycm5vID0gMDsKLQl0dHlmZCA9IHByaXZf b3BuKHR0bm1zdiwgKE9fUkRXUnxPX05ERUxBWSkpOyAvKiBSZW9wZW4gdGhlIGRldmljZSAqLwot CWRlYnVnKEYxMTEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggcmVvcGVuIix0dG5tc3YsdHR5ZmQp OwotCWlmICh0dHlmZCA8IDApIHsKLQkgICAgZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9Q T1NJWCByZW9wZW4gZXJybm8iLCIiLGVycm5vKTsKLQkgICAgcmV0dXJuKC0xKTsKLQl9Ci0JZGVi dWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCByZS10dG9wZW4gdHR5ZmQiLCIiLHR0eWZk KTsKLQotCS8qIFJlc3RvcmUgcHJldmlvdXMgYXR0cmlidXRlcyAqLwotCi0JZXJybm8gPSAwOwot CXR2dGZsZyA9IDA7Ci0JdHRjdXIuY19jZmxhZyB8PSBDTE9DQUw7Ci0JeCA9IHRjc2V0YXR0cih0 dHlmZCxUQ1NBRFJBSU4sJnR0Y3VyKTsKLQlkZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQX0NMT1NFX1BP U0lYIHRjc2V0YXR0ciByZXN0b3JlIiwiIix4KTsKLQlpZiAoeCA8IDApIHsKLQkgICAgZGVidWco RjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCB0Y3NldGF0dHIgcmVzdG9yZSBlcnJubyIsCi0J CSAgIiIsZXJybm8pOwotCSAgICByZXR1cm4oLTEpOwotCX0KLQkvKiBGaXggZmxhZ3MgLSBlbnN1 cmUgT19OREVMQVkgYW5kIE9fTk9OQkxPQ0sgYXJlIG9mZiAqLwotCi0JZXJybm8gPSAwOwotICAg ICAgICBpZiAoKHggPSBmY250bCh0dHlmZCwgRl9HRVRGTCwgMCkpID09IC0xKSB7Ci0JICAgIGRl YnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggRl9HRVRGTCBlcnJubyIsIiIsZXJybm8p OwotCSAgICByZXR1cm4oLTEpOwotCX0KLQlkZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQX0NMT1NFX1BP U0lYIGZsYWdzIiwiIix4KTsKLQllcnJubyA9IDA7Ci0gICAgICAgIHggJj0gfihPX05PTkJMT0NL fE9fTkRFTEFZKTsKLQlkZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIGZsYWdzIHRv IHNldCIsIiIseCk7Ci0JZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCBpbmlmbGFn cyIsIiIsaW5pZmxhZ3MpOwotCWlmIChmY250bCh0dHlmZCwgRl9TRVRGTCwgeCkgPT0gLTEpIHsK LQkgICAgZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCBGX1NFVEZMIGVycm5vIiwi IixlcnJubyk7Ci0JICAgIHJldHVybigtMSk7Ci0JfQotI2lmZGVmIERFQlVHCi0JaWYgKGRlYmxv ZykgewotCSAgICBpZiAoKHggPSBmY250bCh0dHlmZCwgRl9HRVRGTCwgMCkpID4gLTEpIHsKLQkJ ZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCBmbGFncyIsIiIseCk7Ci0JCWRlYnVn KEYxMDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggZmxhZ3MgJiBPX05PTkJMT0NLIiwKLQkJICAg ICAgIiIseCZPX05PTkJMT0NLKTsKLQkJZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJ WCBmbGFncyAmIE9fTkRFTEFZIiwKLQkJICAgICAgIiIseCZPX05ERUxBWSk7Ci0JICAgIH0KLQl9 Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotI2Vsc2UgIC8qIEhVUF9DTE9TRV9QT1NJWCAqLwotCQot CS8qIEdlbmVyYWwgQlNENDRPUlBPU0lYIGNhc2UgKExpbnV4LCBCU0RJLCBGcmVlQlNELCBldGMp ICovCi0KLQlkZWJ1ZyhGMTAwLCJ0dGhhbmcgQlNENDRPUlBPU0lYIEIwIiwiIiwwKTsKLQl4ID0g dGNnZXRhdHRyKHR0eWZkLCAmdHRjdXIpOwkvKiBHZXQgY3VycmVudCBhdHRyaWJ1dGVzICovCi0J ZGVidWcoRjExMSwidHRoYW5nIEJTRDQ0T1JQT1NJWCB0Y2dldGF0dHIiLGNraXRvYShlcnJubyks eCk7Ci0JaWYgKHggPCAwKSByZXR1cm4oLTEpOwotCXNwZHNhdiA9IGNmZ2V0b3NwZWVkKCZ0dGN1 cik7CS8qIEdldCBjdXJyZW50IHNwZWVkICovCi0JZGVidWcoRjExMSwidHRoYW5nIEJTRDQ0T1JQ T1NJWCBjZmdldG9zcGVlZCIsY2tpdG9hKGVycm5vKSxzcGRzYXYpOwotCXNwZHNhdmkgPSBjZmdl dGlzcGVlZCgmdHRjdXIpOwkvKiBHZXQgY3VycmVudCBzcGVlZCAqLwotCWRlYnVnKEYxMTEsInR0 aGFuZyBCU0Q0NE9SUE9TSVggY2ZnZXRpc3BlZWQiLGNraXRvYShlcnJubyksc3Bkc2F2aSk7Ci0J eCA9IGNmc2V0b3NwZWVkKCZ0dGN1cixCMCk7CS8qIFJlcGxhY2UgYnkgMCAqLwotCWRlYnVnKEYx MTEsInR0aGFuZyBCU0Q0NE9SUE9TSVggY2ZzZXRvc3BlZWQiLGNraXRvYShlcnJubykseCk7Ci0J aWYgKHggPCAwKSByZXR1cm4oLTEpOwotCXggPSBjZnNldGlzcGVlZCgmdHRjdXIsQjApOwotCWRl YnVnKEYxMTEsInR0aGFuZyBCU0Q0NE9SUE9TSVggY2ZzZXRpc3BlZWQiLGNraXRvYShlcnJubyks eCk7Ci0JaWYgKHggPCAwKSByZXR1cm4oLTEpOwotCS8qIFRoaXMgZ2V0cyBFSU5WQUwgb24gTmV0 QlNEIDEuNC4xIGJlY2F1c2Ugb2YgQjAuLi4gKi8KLQl4ID0gdGNzZXRhdHRyKHR0eWZkLFRDU0FE UkFJTiwmdHRjdXIpOwotCWRlYnVnKEYxMTEsInR0aGFuZyBCU0Q0NE9SUE9TSVggdGNzZXRhdHRy IEIwIixja2l0b2EoZXJybm8pLHgpOwotCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKLQltc2xlZXAo SFVQVElNRSk7CQkvKiBTbGVlcCAwLjUgc2VjICovCi0JZGVidWcoRjEwMSwidHRoYW5nIEJTRDQ0 T1JQT1NJWCByZXN0b3JlIG91dHB1dCBzcGVlZCIsIiIsc3Bkc2F2KTsKLQl4ID0gY2ZzZXRvc3Bl ZWQoJnR0Y3VyLHNwZHNhdik7IC8qIFJlc3RvcmUgcHJldiBzcGVlZCAqLwotCWRlYnVnKEYxMTEs InR0aGFuZyBCU0Q0NE9SUE9TSVggY2ZzZXRvc3BlZWQgcHJldiIsY2tpdG9hKGVycm5vKSx4KTsK LQlpZiAoeCA8IDApIHJldHVybigtMSk7Ci0JZGVidWcoRjEwMSwidHRoYW5nIEJTRDQ0T1JQT1NJ WCByZXN0b3JlIGlucHV0IHNwZWVkIiwiIixzcGRzYXZpKTsKLQl4ID0gY2ZzZXRpc3BlZWQoJnR0 Y3VyLHNwZHNhdmkpOwotCWRlYnVnKEYxMTEsInR0aGFuZyBCU0Q0NE9SUE9TSVggY2ZzZXRpc3Bl ZWQgcHJldiIsY2tpdG9hKGVycm5vKSx4KTsKLQlpZiAoeCA8IDApIHJldHVybigtMSk7Ci0JdHRj dXIuY19jZmxhZyB8PSBDTE9DQUw7CS8qIERvbid0IGV4cGVjdCBDRCBhZnRlciBoYW5ndXAgKi8K LQl4ID0gdGNzZXRhdHRyKHR0eWZkLFRDU0FEUkFJTiwmdHRjdXIpOwotCWRlYnVnKEYxMTEsInR0 aGFuZyBCU0Q0NE9SUE9TSVggdGNzZXRhdHRyIHJlc3RvcmUiLGNraXRvYShlcnJubykseCk7Ci0J aWYgKHggPCAwKSByZXR1cm4oLTEpOwotCi0jZW5kaWYgLyogSFVQX0NMT1NFX1BPU0lYICovCi0j ZW5kaWYgLyogVVNFX1RJT0NTRFRSICovCi0KLQlyZXR1cm4oMSk7Ci0gICAgfQotCi0jZW5kaWYg LyogUU5YICovCi0jZWxzZSAvKiBCU0Q0NE9SUE9TSVggKi8KLQotI2lmZGVmIGFlZ2lzCQkJCS8q IEFwb2xsbyBBZWdpcyAqLwotICAgIHNpb18kY29udHJvbCgoc2hvcnQpdHR5ZmQsIHNpb18kZHRy LCBmYWxzZSwgc3QpOyAgICAvKiBEVFIgZG93biAqLwotICAgIG1zbGVlcChIVVBUSU1FKTsJCQkJ CS8qIHBhdXNlICovCi0gICAgc2lvXyRjb250cm9sKChzaG9ydCl0dHlmZCwgc2lvXyRkdHIsIHRy dWUsICBzdCk7ICAgIC8qIERUUiB1cCAqLwotICAgIHJldHVybigxKTsKLSNlbmRpZiAvKiBhZWdp cyAqLwotCi0jaWZkZWYgQU5ZQlNECQkJCS8qIEFueSBCU0QgdmVyc2lvbi4gKi8KLSNpZmRlZiBU SU9DQ0RUUgkJCQkvKiBFeGNlcHQgdGhvc2UgdGhhdCBkb24ndCBoYXZlIHRoaXMgKi8KLSAgICBk ZWJ1ZyhGMTAwLCJ0dGhhbmcgQlNEIHN0eWxlIiwiIiwwKTsKLSAgICBpZiAoaW9jdGwodHR5ZmQs VElPQ0NEVFIsMCkgPCAwKSB7CS8qIENsZWFyIERUUi4gKi8KLQlkZWJ1ZyhGMTAxLCJ0dGhhbmcg VElPQ0NEVFIgZmFpbHMiLCIiLGVycm5vKTsKLQlyZXR1cm4oLTEpOwotICAgIH0KLSAgICBtc2xl ZXAoSFVQVElNRSk7CQkJLyogRm9yIGFib3V0IDEvMiBzZWMgKi8KLSAgICBlcnJubyA9IDA7Ci0g ICAgeCA9IGlvY3RsKHR0eWZkLFRJT0NTRFRSLDApOwkvKiBSZXN0b3JlIERUUiAqLwotICAgIGlm ICh4IDwgMCkgewotCS8qCi0JICBGb3Igc29tZSByZWFzb24sIHRoaXMgdGVuZHMgdG8gZmFpbCB3 aXRoICJubyBzdWNoIGRldmljZSBvciBhZGRyZXNzIgotCSAgYnV0IHRoZSBvcGVyYXRpb24gc3Rp bGwgd29ya3MsIHByb2JhYmx5IGJlY2F1c2Ugb2YgdGhlIGNsb3NlL29wZW4KLQkgIGxhdGVyIG9u LiAgU28gbGV0J3Mgbm90IHNjYXJlIHRoZSB1c2VyIHVubmVjZXNzYXJpbHkgaGVyZS4KLQkqLwot CWRlYnVnKEYxMDEsInR0aGFuZyBUSU9DU0RUUiBlcnJubyIsIiIsZXJybm8pOyAvKiBMb2cgdGhl IGVycm9yICovCi0JeCA9IDE7CQkJCS8qIFByZXRlbmQgd2Ugc3VjY2VlZGVkICovCi0gICAgfSBl bHNlIGlmICh4ID09IDApIHggPSAxOwkJLyogU3VjY2VzcyAqLwotI2lmZGVmIENPTU1FTlQKLSNp ZmRlZiBGVDIxCi0gICAgaW9jdGwodHR5ZmQsIFRJT0NTQVZFTU9ERVMsIDApOwotICAgIGlvY3Rs KHR0eWZkLCBUSU9DSFBDTCwgMCk7Ci0gICAgY2xvc2UodHR5ZmQpOwkJCS8qIFllcywgbXVzdCBk byB0aGlzIHR3aWNlICovCi0gICAgaWYgKCh0dHlmZCA9IG9wZW4odHRubXN2LDIpKSA8IDApCS8q IG9uIEZvcnR1bmUgY29tcHV0ZXJzLi4uICovCi0gICAgICByZXR1cm4oLTEpOwkJCS8qIChidXQg d2h5PykgKi8KLSAgICBlbHNlIHggPSAxOwotI2VuZGlmIC8qIEZUMjEgKi8KLSNlbmRpZiAvKiBD T01NRU5UICovCi0jZW5kaWYgLyogVElPQ0NEVFIgKi8KLSAgICBjbG9zZShkb19vcGVuKHR0bm1z dikpOwkJLyogQ2xlYXIgaS9vIGVycm9yIGNvbmRpdGlvbiAqLwotICAgIGVycm5vID0gMDsKLSNp ZmRlZiBDT01NRU5UCi0vKiBUaGlzIGlzIGRlZmluaXRlbHkgZGFuZ2Vyb3VzLiAgV2h5IHdhcyBp dCBoZXJlPyAqLwotICAgIHogPSB0dHZ0KHR0c3BlZWQsdHRmbG93KTsJCS8qIFJlc3RvcmUgbW9k ZXMuICovCi0gICAgZGVidWcoRjEwMSwidHRoYW5nIHR0dnQgcmV0dXJucyIsIiIseik7Ci0gICAg cmV0dXJuKHogPCAwID8gLTEgOiAxKTsKLSNlbHNlCi0gICAgcmV0dXJuKHgpOwotI2VuZGlmIC8q IENPTU1FTlQgKi8KLSNlbmRpZiAvKiBBTllCU0QgKi8KLQotI2lmZGVmIEFUVFNWCi0vKiBBVCZU IFVOSVggc2VjdGlvbiwgaW5jbHVkZXMgSFAtVVggYW5kIGdlbmVyaWMgQVQmVCBTeXN0ZW0gSUlJ L1YuLi4gKi8KLQotI2lmZGVmIEhQVVgKLS8qIEhld2xldHQgUGFja2FyZCBhbGxvd3MgZXhwbGlj aXQgbWFuaXB1bGF0aW9uIG9mIG1vZGVtIHNpZ25hbHMuICovCi0KLSNpZmRlZiBDT01NRU5UCi0v KiBPbGQgd2F5Li4uICovCi0gICAgZGVidWcoRjEwMCwidHRoYW5nIEhQLVVYIHN0eWxlIiwiIiww KTsKLSAgICBpZiAoaW9jdGwodHR5ZmQsTUNTRVRBRiwmZHRyX2Rvd24pIDwgMCkgICAgICAgIC8q IGxvd2VyIERUUiAqLwotICAgICAgcmV0dXJuKC0xKTsJCSAgICAJICAgICAgICAgICAvKiBvb3Bz LCBjYW4ndC4gKi8KLSAgICBtc2xlZXAoSFVQVElNRSk7CQkJICAgICAgICAgICAvKiBQYXVzZSBo YWxmIGEgc2Vjb25kLiAqLwotICAgIHggPSAxOwkJCQkgICAgICAgICAgIC8qIFNldCByZXR1cm4g Y29kZSAqLwotICAgIGlmIChpb2N0bCh0dHlmZCxNQ0dFVEEsJm1vZGVtX3J0bikgPiAtMSkgeyAg ICAgLyogR2V0IGxpbmUgc3RhdHVzLiAqLwotCWlmICgobW9kZW1fcnRuICYgTURDRCkgIT0gMCkg ICAgICAJICAgLyogQ2hlY2sgaWYgQ0QgaXMgbG93LiAqLwotCSAgeCA9IC0xOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBDRCBkaWRuJ3QgZHJvcCwgZmFpbC4gKi8KLSAgICB9 IGVsc2UgeCA9IC0xOwotCi0gICAgLyogRXZlbiBpZiBhYm92ZSBjYWxscyBmYWlsLCBSVFMgJiBE VFIgc2hvdWxkIGJlIHR1cm5lZCBiYWNrIG9uLiAqLwotICAgIG1vZGVtX3J0biA9IE1SVFMgfCBN RFRSOwotICAgIGlmIChpb2N0bCh0dHlmZCxNQ1NFVEFGLCZtb2RlbV9ydG4pIDwgMCkgeCA9IC0x OwotICAgIHJldHVybih4KTsKLSNlbHNlCi0vKiBOZXcgd2F5LCBmcm9tIEhlbGxtdXRoIE1pY2hh ZWxpcyAqLwotICAgIGRlYnVnKEYxMDAsInR0aGFuZyBIUC1VWCBzdHlsZSwgSFBVWERFQlVHIiwi IiwwKTsKLSAgICBpZiAoaW9jdGwodHR5ZmQsTUNHRVRBLCZtb2RlbV9ydG4pID09IC0xKSB7IC8q IEdldCBjdXJyZW50IHN0YXR1cy4gKi8KLQlkZWJ1ZyhGMTAwLCJ0dGhhbmcgSFAtVVg6IGNhbid0 IGdldCBtb2RlbSBsaW5lcywgTk8gSEFOR1VQISIsIiIsMCk7Ci0JcmV0dXJuKC0xKTsKLSAgICB9 Ci0gICAgc3ByaW50Zihtb2RlbV9zdGF0ZSwiJSNseCIsbW9kZW1fcnRuKTsKLSAgICBkZWJ1ZyhG MTEwLCJ0dGhhbmcgSFAtVVg6IG1vZGVtIGxpbmVzID0gIixtb2RlbV9zdGF0ZSwwKTsKLSAgICBt b2RlbV9zYXYgPSBtb2RlbV9ydG47CQkvKiBTYXZlIGN1cnJlbnQgbW9kZW0gc2lnbmFscyAqLwot ICAgIG1vZGVtX3J0biAmPSB+TURUUjsJCQkvKiBUdXJuIERUUiBiaXQgb2ZmICovCi0gICAgc3By aW50Zihtb2RlbV9zdGF0ZSwiJSNseCIsbW9kZW1fcnRuKTsKLSAgICBkZWJ1ZyhGMTEwLCJ0dGhh bmcgSFAtVVg6IERUUiBkb3duID0gIixtb2RlbV9zdGF0ZSwwKTsKLSAgICBpZiAoaW9jdGwodHR5 ZmQsTUNTRVRBRiwmbW9kZW1fcnRuKSA8IDApIHsgLyogbG93ZXIgRFRSICovCi0JZGVidWcoRjEw MCwidHRoYW5nIEhQLVVYOiBjYW4ndCBsb3dlciBEVFIhIiwiIiwwKTsKLQlyZXR1cm4oLTEpOwkJ CS8qIG9vcHMsIGNhbid0LiAqLwotICAgIH0KLSAgICBtc2xlZXAoSFVQVElNRSk7CQkJLyogUGF1 c2UgaGFsZiBhIHNlY29uZC4gKi8KLSAgICB4ID0gMTsJCQkJLyogU2V0IHJldHVybiBjb2RlICov Ci0gICAgaWYgKGlvY3RsKHR0eWZkLE1DR0VUQSwmbW9kZW1fcnRuKSA+IC0xKSB7IC8qIEdldCBs aW5lIHN0YXR1cy4gKi8KLQlzcHJpbnRmKG1vZGVtX3N0YXRlLCIlI2x4Iixtb2RlbV9ydG4pOwot CWRlYnVnKEYxMTAsInR0aGFuZyBIUC1VWDogbW9kZW0gbGluZXMgZ290ID0gIixtb2RlbV9zdGF0 ZSwwKTsKLQlpZiAoKG1vZGVtX3J0biAmIE1EQ0QpICE9IDApIHsJLyogQ2hlY2sgaWYgQ0QgaXMg bG93LiAqLwotCSAgICBkZWJ1ZyhGMTAwLCJ0dGhhbmcgSFAtVVg6IERDRCBub3QgZG93biIsIiIs MCk7Ci0JICAgIHggPSAtMTsJCQkvKiBDRCBkaWRuJ3QgZHJvcCwgZmFpbC4gKi8KLQl9IGVsc2Ug ewotCSAgICBkZWJ1ZyhGMTAwLCJ0dGhhbmcgSFAtVVg6IERDRCBkb3duIiwiIiwwKTsKLQl9Ci0g ICAgfSBlbHNlIHsKLQl4ID0gLTE7Ci0JZGVidWcoRjEwMCwidHRoYW5nIEhQLVVYOiBjYW4ndCBn ZXQgRENEIHN0YXR1cyAhIiwiIiwwKTsKLSAgICB9Ci0KLSAgICAvKiBFdmVuIGlmIGFib3ZlIGNh bGxzIGZhaWwsIERUUiBzaG91bGQgYmUgdHVybmVkIGJhY2sgb24uICovCi0KLSAgICBtb2RlbV9z YXYgfD0gTURUUjsKLSAgICBpZiAoaW9jdGwodHR5ZmQsTUNTRVRBRiwmbW9kZW1fc2F2KSA8IDAp IHsKLQl4ID0gLTE7Ci0JZGVidWcoRjEwMCwidHRoYW5nIEhQLVVYOiBjYW4ndCBzZXQgc2F2ZWQg c3RhdGUiLCIiLDApOwotICAgIH0gZWxzZSB7Ci0Jc3ByaW50Zihtb2RlbV9zdGF0ZSwiJSNseCIs bW9kZW1fc2F2KTsKLQlkZWJ1ZyhGMTEwLCJ0dGhhbmcgSFAtVVg6IGZpbmFsIG1vZGVtIGxpbmVz ID0gIixtb2RlbV9zdGF0ZSwwKTsKLSAgICB9Ci0gICAgcmV0dXJuKHgpOwotI2VuZGlmIC8qIENP TU1FTlQgKi8KLQotI2Vsc2UgLyogQVQmVCBidXQgbm90IEhQLVVYICovCi0KLS8qIFNWSUQgZm9y IEFUJlQgU3lzdGVtIFYgUjMgZGVmaW5lcyBpb2N0bCdzIGZvciBoYW5kbGluZyBtb2RlbSBzaWdu YWxzLiAqLwotLyogSXQgaXMgbm90IGtub3duIGhvdyBtYW55LCBpZiBhbnksIHN5c3RlbXMgYWN0 dWFsbHkgaW1wbGVtZW50IHRoZW0sICovCi0vKiBzbyB3ZSBpbmNsdWRlIHRoZW0gaGVyZSBpbiBp ZmRlZidzLiAqLwotCi0vKgotICBVbml4d2FyZSBoYXMgdGhlIFRJT0NNeHh4IHN5bWJvbHMgZGVm aW5lZCwgYnV0IGNhbGxpbmcgaW9jdGwoKSB3aXRoIHRoZW0KLSAgZ2l2ZXMgZXJyb3IgMjIgKGlu dmFsaWQgYXJndW1lbnQpLgotKi8KLSNpZm5kZWYgX0lCTVIyCi0vKgotICBObyBtb2RlbS1zaWdu YWwgdHdpZGRsaW5nIGZvciBJQk0gUlQgUEMgb3IgUlMvNjAwMC4KLSAgSW4gQUlYIDMuMSBhbmQg ZWFybGllciwgdGhlIGlvY3RsKCkgY2FsbCBpcyBicm9rZW4uCi0gIFRoaXMgY29kZSBjb3VsZCBi ZSBhY3RpdmF0ZWQgZm9yIEFJWCAzLjEgd2l0aCBQVEYgMjAwNiBvciBsYXRlcgotICAoZS5nLiBB SVggMy4yKSwgYnV0IGNsb3NlL29wZW4gZG9lcyB0aGUgam9iIHRvbywgc28gd2h5IGJvdGhlci4K LSovCi0jaWZkZWYgVElPQ01CSVMJCQkJLyogQml0IFNldCAqLwotI2lmZGVmIFRJT0NNQklDCQkJ CS8qIEJpdCBDbGVhciAqLwotI2lmZGVmIFRJT0NNX0RUUgkJCS8qIERUUiAqLwotCi0vKiBDbGVh ciBEVFIsIHNsZWVwIDMwMCBtc2VjLCB0dXJuIGl0IGJhY2sgb24uICovCi0vKiBJZiBhbnkgb2Yg dGhlIGlvY3RsJ3MgcmV0dXJuIGZhaWx1cmUsIGdvIG9uIHRvIHRoZSBuZXh0IHNlY3Rpb24uICov Ci0KLSAgICB6ID0gVElPQ01fRFRSOwkJCS8qIENvZGUgZm9yIERUUi4gKi8KLSNpZmRlZiBDT01N RU5UCi0vKgotICBUaGlzIHdhcyB0aGUgY2F1c2Ugb2YgdGhlIHRyb3VibGVzIHdpdGggdGhlIFNv bGFyaXMgUG9ydCBNb25pdG9yLgotICBUaGUgcHJvYmxlbSBpczogUlRTIG5ldmVyIGNvbWVzIGJh Y2sgb24uICBNb3JhbDogRG9uJ3QgZG8gaXQhCi0gIChCdXQgd2h5IGRvZXNuJ3QgaXQgY29tZSBi YWNrIG9uPyAgU2VlIHRoZSBUSU9DTUJJUyBjYWxsLi4uKQotKi8KLSNpZmRlZiBUSU9DTV9SVFMJ CQkvKiBMb3dlciBSVFMgdG9vIGlmIHN5bWJvbCBpcyBrbm93bi4gKi8KLSAgICB6IHw9IFRJT0NN X1JUUzsKLSNlbmRpZiAvKiBUSU9DTV9SVFMgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAg ICBkZWJ1ZyhGMTAxLCJ0dGhhbmcgVElPQ00gc2lnbmFsIG1hc2siLCIiLHopOwotICAgIGlmIChp b2N0bCh0dHlmZCxUSU9DTUJJQywmeikgPiAtMSkgeyAgIC8qIFRyeSB0byBsb3dlciBEVFIuICov Ci0JZGVidWcoRjEwMCwidHRoYW5nIFRJT0NNQklDIG9rIiwiIiwwKTsKLQltc2xlZXAoSFVQVElN RSk7CQkgICAvKiBQYXVzZSBoYWxmIGEgc2Vjb25kLiAqLwotCWlmIChpb2N0bCh0dHlmZCxUSU9D TUJJUywmeikgPiAtMSkgeyAvKiBUcnkgdG8gdHVybiBpdCBiYWNrIG9uLiAqLwotCSAgICBkZWJ1 ZyhGMTAwLCJ0dGhhbmcgVElPQ01CSVMgb2siLCIiLDApOwotI2lmbmRlZiBDTFNPUE4KLQkgICAg cmV0dXJuKDEpOwkJCS8qIFN1Y2Nlc3MsIGRvbmUuICovCi0jZW5kaWYgLyogQ0xTT1BOICovCi0J fSBlbHNlIHsJCQkvKiBDb3VsZG4ndCByYWlzZSwgY29udGludWUuICovCi0JICAgIGRlYnVnKEYx MDEsInR0aGFuZyBUSU9DTUJJUyBlcnJubyIsIiIsZXJybm8pOwotCX0KLSAgICB9IGVsc2UgewkJ CQkvKiBDb3VsZG4ndCBsb3dlciwgY29udGludWUuICovCi0gCWRlYnVnKEYxMDEsInR0aGFuZyBU SU9DTUJJQyBlcnJubyIsIiIsZXJybm8pOwotICAgIH0KLSNlbmRpZiAvKiBUSU9DTV9EVFIgKi8K LSNlbmRpZiAvKiBUSU9DTUJJQyAqLwotI2VuZGlmIC8qIFRJT0NNQklTICovCi0jZW5kaWYgLyog X0lCTVIyICovCi0KLS8qCi0gIEdlbmVyYWwgQVQmVCBVTklYIGNhc2UsIG5vdCBIUFVYLiAgVGhl IGZvbGxvd2luZyBjb2RlIGlzIGhpZ2hseSBzdXNwZWN0LiAgTm8KLSAgdHdvIEFUJlQtYmFzZWQg c3lzdGVtcyBzZWVtIHRvIGRvIHRoaXMgdGhlIHNhbWUgd2F5LiAgVGhlIG9iamVjdCBpcyBzaW1w bHkKLSAgdG8gdHVybiBvZmYgRFRSIGFuZCB0aGVuIHR1cm4gaXQgYmFjayBvbi4gIFNWSUQgc2F5 cyB0aGUgdW5pdmVyc2FsIG1ldGhvZAotICBmb3IgdHVybmluZyBvZmYgRFRSIGlzIHRvIHNldCB0 aGUgc3BlZWQgdG8gemVybywgYW5kIHRoaXMgZG9lcyBzZWVtIHRvIGRvCi0gIHRoZSB0cmljayBp biBhbGwgY2FzZXMuICBCdXQgbmVpdGhlciBTVklEIG5vciBhbnkga25vd24gbWFuIHBhZ2VzIHNh eSBob3cgdG8KLSAgdHVybiBEVFIgYmFjayBvbiBhZ2Fpbi4gIFNvbWUgdmFyaWFudHMsIGxpa2Ug bW9zdCBYZW5peCBpbXBsZW1lbnRhdGlvbnMsCi0gIHJhaXNlIERUUiBhZ2FpbiB3aGVuIHRoZSBz cGVlZCBpcyByZXN0b3JlZCB0byBhIG5vbnplcm8gdmFsdWUuICBPdGhlcnMKLSAgcmVxdWlyZSB0 aGUgZGV2aWNlIHRvIGJlIGNsb3NlZCBhbmQgb3BlbmVkIGFnYWluLCBidXQgdGhpcyBpcyByaXNr eSBiZWNhdXNlCi0gIGdldHR5IGNvdWxkIHNlaXplIHRoZSBkZXZpY2UgZHVyaW5nIHRoZSBpbnN0 YW50IGl0IGlzIGNsb3NlZC4KLSovCi0KLS8qIFJldHVybiBjb2RlIGZvciBpb2N0bCBmYWlsdXJl cy4uLiAqLwotI2lmZGVmIEFUVDYzMDAKLSAgICB4ID0gMTsJCQkJLyogQVRUNjMwMCBkb2Vzbid0 IHdhbnQgdG8gZmFpbC4uLiAqLwotI2Vsc2UKLSAgICB4ID0gLTE7Ci0jZW5kaWYgLyogQVRUNjMw MCAqLwotCi0gICAgZGVidWcoRjEwMCwidHRoYW5nIGdldCBzZXR0aW5ncyIsIiIsMCk7Ci0gICAg aWYgKGlvY3RsKHR0eWZkLFRDR0VUQSwmdHRjdXIpIDwgMCkgLyogR2V0IGN1cnJlbnQgc2V0dGlu Z3MuICovCi0gICAgICByZXR1cm4oeCk7CQkJLyogRmFpbCBpZiB0aGlzIGRvZXNuJ3Qgd29yay4g Ki8KLSAgICBpZiAoKGZsYWdzID0gZmNudGwodHR5ZmQsRl9HRVRGTCwwKSkgPCAwKSAvKiBHZXQg ZGV2aWNlIGZsYWdzLiAqLwotICAgICAgcmV0dXJuKHgpOwotICAgIHR0Y19zYXZlID0gdHRjdXIu Y19jZmxhZzsJCS8qIFJlbWVtYmVyIGN1cnJlbnQgc3BlZWQuICovCi0gICAgc3Bkc2F2ID0gdHRj X3NhdmUgJiBDQkFVRDsKLSAgICBkZWJ1ZyhGMTAxLCJ0dGhhbmcgc3BlZWQiLCIiLHNwZHNhdik7 Ci0KLSNpZmRlZiBPX05ERUxBWQotICAgIGRlYnVnKEYxMDAsInR0aGFuZyB0dXJuaW5nIE9fTkRF TEFZIG9uIiwiIiwwKTsKLSAgICBmY250bCh0dHlmZCwgRl9TRVRGTCwgZmxhZ3MgfCBPX05ERUxB WSk7IC8qIEFjdGl2YXRlIE9fTkRFTEFZICovCi0jZW5kaWYgLyogT19OREVMQVkgKi8KLQotI2lm ZGVmIEFUVDczMDAgLyogVGhpcyBpcyB0aGUgd2F5IGl0IGlzIFNVUFBPU0VEIHRvIHdvcmsgKi8K LSAgICB0dGN1ci5jX2NmbGFnICY9IH5DQkFVRDsJCS8qIENoYW5nZSB0aGUgc3BlZWQgdG8gemVy by4gICovCi0jZWxzZQotI2lmZGVmIFJUQUlYCi0gICAgdHRjdXIuY19jZmxhZyAmPSB+Q0JBVUQ7 CQkvKiBDaGFuZ2UgdGhlIHNwZWVkIHRvIHplcm8uICAqLwotI2Vsc2UgICAgICAgICAgLyogVGhp cyB3YXkgcmVhbGx5IHdvcmtzIGJ1dCBtYXkgYmUgZGFuZ2Vyb3VzICovCi0jaWZkZWYgdTNiMgot ICAgIHR0Y3VyLmNfY2ZsYWcgPSB+KENCQVVEfENMT0NBTCk7CS8qIFNwZWNpYWwgZm9yIEFUJlQg M0IycyAqLwotCQkJCQkvKiAoQ0xPQ0FMIG11c3QgYmUgT0ZGKSAqLwotI2Vsc2UKLSNpZmRlZiBT Q08zUjIJCQkJLyogU0NPIFVOSVggMy4yICovCi0vKgotICBUaGlzIGlzIGNvbXBsZXRlIG5vbnNl bnNlLCBidXQgYW4gU0NPIHVzZXIgY2xhaW1lZCB0aGlzIGNoYW5nZSBtYWRlCi0gIGhhbmdpbmcg dXAgd29yay4gIENvbW1lbnRzIGZyb20gb3RoZXIgU0NPIFVOSVggMy4yIHVzZXJzIHdvdWxkIGJl Ci0gIGFwcHJlY2lhdGVkLgotKi8KLSAgICB0dGN1ci5jX2NmbGFnID0gQ0JBVUR8QjA7Ci0jZWxz ZQotI2lmZGVmIEFJWFJTCQkJCS8qIEFJWCBvbiBSUy82MDAwICovCi0vKgotICBDYW4ndCBzZXQg c3BlZWQgdG8gemVybyBvbiBBSVggMy4xIG9uIFJTLzYwMDAgNjQtcG9ydCBhZGFwdGVyLAotICBl dmVuIHRob3VnaCB5b3UgY2FuIGRvIGl0IG9uIHRoZSBidWlsdC1pbiBwb3J0IGFuZCB0aGUgOC0g YW5kIDE2LXBvcnQKLSAgYWRhcHRlcnMuICAoVW50ZXN0ZWQgb24gMTI4LXBvcnQgYWRhcHRlci4p Ci0qLwotICAgIHR0Y3VyLmNfY2ZsYWcgPSBDTE9DQUx8SFVQQ0x8c3Bkc2F2OyAvKiBTcGVlZCAw IGNhdXNlcyBFSU5WQUwgKi8KLSNlbHNlCQkJCQkvKiBOb25lIG9mIHRoZSBhYm92ZSAqLwotLyoK LSAgU2V0IGV2ZXJ5dGhpbmcsIGluY2x1ZGluZyB0aGUgc3BlZWQsIHRvIHplcm8sIGV4Y2VwdCBm b3IgdGhlIENMT0NBTAotICBhbmQgSFVQQ0wgYml0cy4KLSovCi0gICAgdHRjdXIuY19jZmxhZyA9 IENMT0NBTHxIVVBDTDsKLSNlbmRpZiAvKiBBSVhSUyAqLwotI2VuZGlmIC8qIFNDTzNSMiAqLwot I2VuZGlmIC8qIHUzYjIgKi8KLSNlbmRpZiAvKiBSVEFJWCAqLwotI2VuZGlmIC8qIEFUVDczMDAg Ki8KLQotI2lmZGVmIENPTU1FTlQKLSAgICAvKiBhbmQgaWYgbm9uZSBvZiB0aG9zZSB3b3JrLCB0 cnkgb25lIG9mIHRoZXNlLi4uICovCi0gICAgdHRjdXIuY19jZmxhZyA9IDA7Ci0gICAgdHRjdXIu Y19jZmxhZyA9IENMT0NBTDsKLSAgICB0dGN1ci5jX2NmbGFnICY9IH4oQ0JBVUR8SFVQQ0wpOwot ICAgIHR0Y3VyLmNfY2ZsYWcgJj0gfihDQkFVRHxDUkVBRCk7Ci0gICAgdHRjdXIuY19jZmxhZyAm PSB+KENCQVVEfENSRUFEfEhVUENMKTsKLSAgICAvKiBvciBvdGhlciBjb21iaW5hdGlvbnMgKi8K LSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSNpZmRlZiBUQ1hPTkMKLSAgICBkZWJ1ZyhGMTAwLCJ0 dGhhbmcgVENYT05DIiwiIiwwKTsKLSAgICBpZiAoaW9jdGwodHR5ZmQsIFRDWE9OQywgMSkgPCAw KSB7Ci0JZGVidWcoRjEwMSwidHRoYW5nIFRDWE9OQyBmYWlsZWQiLCIiLGVycm5vKTsKLSAgICB9 Ci0jZW5kaWYgLyogVENYT05DICovCi0KLSNpZmRlZiBUSU9DU1RBUlQKLSAgICBkZWJ1ZyhGMTAw LCJ0dGhhbmcgVElPQ1NUQVJUIiwiIiwwKTsKLSAgICBpZiAoaW9jdGwodHR5ZmQsIFRJT0NTVEFS VCwgMCkgPCAwKSB7Ci0JZGVidWcoRjEwMSwidHRoYW5nIFRJT0NTVEFSVCBmYWlsZWQiLCIiLGVy cm5vKTsKLSAgICB9Ci0jZW5kaWYgLyogVElPQ1NUQVJUICovCi0KLSAgICBpZiAoaW9jdGwodHR5 ZmQsVENTRVRBRiwmdHRjdXIpIDwgMCkgeyAvKiBGYWlsIGlmIHdlIGNhbid0LiAqLwotCWRlYnVn KEYxMDEsInR0aGFuZyBUQ1NFVEFGIGZhaWxlZCIsIiIsZXJybm8pOwotCWZjbnRsKHR0eWZkLCBG X1NFVEZMLCBmbGFncyk7CS8qIFJlc3RvcmUgZmxhZ3MgKi8KLQlyZXR1cm4oLTEpOwkJCS8qIGJl Zm9yZSByZXR1cm5pbmcuICovCi0gICAgfQotICAgIG1zbGVlcCgzMDApOwkJCS8qIEdpdmUgbW9k ZW0gdGltZSB0byBub3RpY2UuICovCi0KLSNpZm5kZWYgTk9DT1RGTUMKLQotLyogTm93LCBldmVu IHRob3VnaCBpdCBkb2Vzbid0IHNheSB0aGlzIGluIFNWSUQgb3IgYW55IG1hbiBwYWdlLCB3ZSBo YXZlICovCi0vKiB0byBjbG9zZSBhbmQgcmVvcGVuIHRoZSBkZXZpY2UuICBUaGlzIGlzIG5vdCBu ZWNlc3NhcnkgZm9yIGFsbCBzeXN0ZW1zLCAqLwotLyogYnV0IGl0J3MgaW1wb3NzaWJsZSB0byBw cmVkaWN0IHdoaWNoIG9uZXMgbmVlZCBpdCBhbmQgd2hpY2ggb25lcyBkb24ndC4gKi8KLQotI2lm ZGVmIEFUVDczMDAKLS8qCi0gIFNwZWNpYWwgaGFuZGxpbmcgZm9yIEFUVCA3MzAwIFVOSVggUEMg YW5kIDNCMSwgd2hpY2ggaGF2ZSAicGhvbmUiCi0gIHJlbGF0ZWQgaW9jdGwncyBmb3IgdGhlaXIg aW50ZXJuYWwgbW9kZW1zLiAgYXR0bW9kZW0gaGFzIGdldHR5IHN0YXR1cyBhbmQKLSAgbW9kZW0t aW4tdXNlIGJpdC4gIFJlcG9ydGVkbHkgdGhlIEFUVDczMDAvM0IxIFBJT0NESVNDIGNhbGwgaXMg bmVjZXNzYXJ5LAotICBidXQgYWxzbyBydWlucyB0aGUgZmlsZSBkZXNjcmlwdG9yLCBhbmQgbm8g b3RoZXIgcGhvbmUoNykgaW9jdGwgY2FsbCBjYW4gZml4Ci0gIGl0LiAgV2hhdGV2ZXIgaXQgZG9l cywgaXQgc2VlbXMgdG8gZXNjYXBlIGRldGVjdGlvbiB3aXRoIFBJT0NHRVRBIGFuZCBUQ0dFVEEu Ci0gIFRoZSBvbmx5IHdheSB0byB1bmRvIHRoZSBkYW1hZ2UgaXMgdG8gY2xvc2UgdGhlIGZkIGFu ZCB0aGVuIHJlb3BlbiBpdC4KLSovCi0gICAgaWYgKGF0dG1vZGVtICYgSVNNT0RFTSkgewotCWRl YnVnKEYxMDAsInR0aGFuZyBhdHRtb2RlbSBjbG9zZS9vcGVuIiwiIiwwKTsKLQlpb2N0bCh0dHlm ZCxQSU9DVU5IT0xELCZkaWFsZXIpOyAvKiBSZXR1cm4gY2FsbCB0byBoYW5kc2V0LiAqLwotCWlv Y3RsKHR0eWZkLFBJT0NESVNDLCZkaWFsZXIpOwkvKiBEaXNjb25uZWN0IHBob25lLiAqLwotCWNs b3NlKHR0eWZkKTsJCQkvKiBDbG9zZSBhbmQgcmVvcGVuIHRoZSBmZC4gKi8KLQl0dHlmZCA9IHBy aXZfb3BuKHR0bm1zdiwgT19SRFdSIHwgT19OREVMQVkpOwotCWF0dG1vZGVtICY9IH5JU01PREVN OwkJLyogUGhvbmUgbm8gbG9uZ2VyIGluIHVzZS4gKi8KLSAgICB9Ci0jZWxzZSAvKiAhQVRUNzMw MCAqLwotLyogSXQgc2VlbXMgd2UgaGF2ZSB0byBjbG9zZSBhbmQgb3BlbiB0aGUgZGV2aWNlIGZv ciBvdGhlciBBVCZUIHN5c3RlbXMgKi8KLS8qIHRvbywgYW5kIHRoaXMgaXMgdGhlIHBsYWNlIHRv IGRvIGl0LiAgVGhlIGZvbGxvd2luZyBjb2RlIGRvZXMgdGhlICovCi0vKiBmYW1vdXMgY2xvc2Uo b3BlbiguLi4pKSBtYWdpYyBieSBkZWZhdWx0LiAgSWYgdGhhdCBkb2Vzbid0IHdvcmsgZm9yIHlv dSwgKi8KLS8qIHRoZW4gdHJ5IHVuY29tbWVudGluZyB0aGUgZm9sbG93aW5nIHN0YXRlbWVudCBv ciBwdXR0aW5nIC1EQ0xTT1BOIGluICovCi0vKiB0aGUgbWFrZWZpbGUgQ0ZMQUdTLiAqLwotCi0v KiAjZGVmaW5lIENMU09QTiAqLwotCi0jaWZuZGVmIFNDTzMyIC8qIE5vdCBuZWVkZWQgYnksIGFu ZCBoYXJtZnVsIHRvLCBTQ08gVU5JWCAzLjIgLyBYZW5peCAyLjMgKi8KLQotI2lmZGVmIE9fTkRF TEFZCi0jZGVmaW5lIE9QRU5GTEdTIE9fUkRXUiB8IE9fTkRFTEFZCi0jZWxzZQotI2RlZmluZSBP UEVORkxHUyBPX1JEV1IKLSNlbmRpZgotCi0jaWZuZGVmIENMU09QTgotLyogVGhpcyBtZXRob2Qg aXMgdXNlZCBieSBkZWZhdWx0LCBpLmUuIHVubGVzcyBDTFNPUE4gaXMgZGVmaW5lZC4gKi8KLS8q IEl0IGlzIHRob3VnaHQgdG8gYmUgc2FmZXIgYmVjYXVzZSB0aGVyZSBpcyBubyB3aW5kb3cgd2hl cmUgZ2V0dHkgKi8KLS8qIGNhbiBzZWl6ZSBjb250cm9sIG9mIHRoZSBkZXZpY2UuICBUaGUgZHJh d2JhY2sgaXMgdGhhdCBpdCBtaWdodCBub3Qgd29yay4gKi8KLQotICAgIGRlYnVnKEYxMDEsInR0 aGFuZyBjbG9zZShvcGVuKCkpLCBPUEVORkxHUyIsIiIsT1BFTkZMR1MpOwotICAgIGNsb3NlKHBy aXZfb3BuKHR0bm1zdiwgT1BFTkZMR1MpKTsKLQotI2Vsc2UKLS8qIFRoaXMgbWV0aG9kIGlzIHVz ZWQgaWYgeW91ICNkZWZpbmUgQ0xTT1BOLiAgSXQgaXMgbW9yZSBsaWtlbHkgdG8gd29yayAqLwot LyogdGhhbiB0aGUgcHJldmlvdXMgbWV0aG9kLCBidXQgaXQncyBhbHNvIG1vcmUgZGFuZ2Vyb3Vz LiAqLwotCi0gICAgZGVidWcoRjEwMSwidHRoYW5nIGNsb3NlL29wZW4sIE9QRU5GTEdTIiwiIixP UEVORkxHUyk7Ci0gICAgY2xvc2UodHR5ZmQpOwotICAgIG1zbGVlcCgxMCk7Ci0gICAgdHR5ZmQg PSBwcml2X29wbih0dG5tc3YsIE9QRU5GTEdTKTsJLyogT3BlbiBpdCBhZ2FpbiAqLwotI2VuZGlm IC8qIENMU09QTiAqLwotI3VuZGVmIE9QRU5GTEdTCi0KLSNlbmRpZiAvKiBTQ08zMiAqLwotI2Vu ZGlmIC8qIEFUVDczMDAgKi8KLQotI2VuZGlmIC8qIE5PQ09URk1DICovCi0KLS8qIE5vdyBwdXQg YWxsIGZsYWdzICYgbW9kZXMgYmFjayB0aGUgd2F5IHdlIGZvdW5kIHRoZW0uICovCi0vKiAoRG9l cyB0aGUgb3JkZXIgb2YgaW9jdGwgJiBmY250bCBtYXR0ZXIgPyApICovCi0KLSAgICBkZWJ1ZyhG MTAwLCJ0dGhhbmcgcmVzdG9yZSBzZXR0aW5ncyIsIiIsMCk7Ci0gICAgdHRjdXIuY19jZmxhZyA9 IHR0Y19zYXZlOwkJLyogR2V0IG9sZCBzcGVlZCBiYWNrLiAqLwotICAgIGlmIChpb2N0bCh0dHlm ZCxUQ1NFVEFGLCZ0dGN1cikgPCAwKSAvKiBpb2N0bCBwYXJhbWV0ZXJzLiAqLwotICAgICAgcmV0 dXJuKC0xKTsKLSNpZmRlZiBPX05ERUxBWQotLyoKLSAgVGhpcyBpcyByZXF1aXJlZCBmb3IgSUJN IFJUIGFuZCBSUy82MDAwLCBwcm9iYWJseSBoZWxwcyBlbHNld2hlcmUgdG9vICg/KS4KLSAgQWZ0 ZXIgY2xvc2luZyBhIG1vZGVtIGxpbmUsIHRoZSBtb2RlbSB3aWxsIHByb2JhYmx5IG5vdCBiZSBh c3NlcnRpbmcKLSAgY2FycmllciBhbnkgbW9yZSwgc28gd2Ugc2hvdWxkIG5vdCByZXF1aXJlIGNh cnJpZXIgYW55IG1vcmUuICBJZiB0aGlzCi0gIGNhdXNlcyB0cm91YmxlIG9uIG5vbi1JQk0gVU5J WGVzLCBjaGFuZ2UgdGhlICNpZmRlZiB0byB1c2UgX0lCTVIyIHJhdGhlcgotICB0aGFuIE9fTkRF TEFZLgotKi8KLSAgICBmbGFncyAmPSB+T19OREVMQVk7CQkJLyogRG9uJ3QgcmVxdWlyZSBjYXJy aWVyIG9uIHJlb3BlbiAqLwotI2VuZGlmIC8qIE9fTkRFTEFZICovCi0gICAgaWYgKGZjbnRsKHR0 eWZkLEZfU0VURkwsZmxhZ3MpIDwgMCkJLyogZmNudGwgcGFyYW1ldGVycyAqLwotICAgICAgcmV0 dXJuKC0xKTsKLQotICAgIHJldHVybigxKTsKLSNlbmRpZiAvKiBub3QgSFBVWCAqLwotI2VuZGlm IC8qIEFUVFNWICovCi0jZW5kaWYgLyogQlNENDRPUlBPU0lYICovCi0jZW5kaWYgLyogSFVQX1BP U0lYICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotfQotCi0vKgotICBNYWpvciBjaGFuZ2UgaW4g NUEoMTc0KS4gIFdlIHVzZWQgdG8gdXNlIExQQVNTOCwgaWYgaXQgd2FzIGRlZmluZWQsIHRvCi0g IGFsbG93IDgtYml0IGRhdGEgYW5kIFhvbi9Yb2ZmIGZsb3cgY29udHJvbCBhdCB0aGUgc2FtZSB0 aW1lLiAgQnV0IHRoaXMKLSAgTFBBU1M4IGJ1c2luZXNzIHNlZW1zIHRvIGhhdmUgYmVlbiBjYXVz aW5nIHRyb3VibGUgZm9yIGV2ZXJ5Ym9keSBidXQgbWUhCi0gIEZvciBleGFtcGxlLCBBbm5leCB0 ZXJtaW5hbCBzZXJ2ZXJzLCBjb21tb25seSB1c2VkIHdpdGggRW5jb3JlIGNvbXB1dGVycywKLSAg ZG8gbm90IHN1cHBvcnQgTFBBU1M4IGV2ZW4gdGhvdWdoIHRoZSBFbmNvcmUgaXRzZWxmIGRvZXMu ICBEaXR0byBmb3IgbWFueQotICBvdGhlciB0ZXJtaW5hbCBzZXJ2ZXJzLCBURUxORVQgY29ubmVj dGlvbnMsIHJsb2dpbiBjb25uZWN0aW9ucywgZXRjIGV0Yy4KLSAgTm93LCByZXBvcnRlZGx5LCBl dmVuIHZhbmlsbGEgNC4zIEJTRCBzeXN0ZW1zIGNhbid0IGRvIHRoaXMgcmlnaHQgb24gdGhlaXIK LSAgc2VyaWFsIGxpbmVzLCBldmVuIHRob3VnaCBMUEFTUzggaXMgYSBmZWF0dXJlIG9mIDQuM0JT RC4gIFNvIGxldCdzIHR1cm4gaXQKLSAgb2ZmIGZvciBldmVyeWJvZHkuICBUaGF0IG1lYW5zIHdl IGdvZXMgYmFjayB0byB1c2luZyByYXcgbW9kZSwgd2l0aCBubwotICBmbG93IGNvbnRyb2wuICBQ aG9vZXkuCi0KLSAgTk9URTogVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHRoZSBmaXJzdCByZWZl cmVuY2UgdG8gTFBBU1M4IGluIHRoaXMgZmlsZSwKLSAgYW5kIGFmdGVyIHRoZSBsYXN0ICNpbmNs dWRlIHN0YXRtZW50LgotKi8KLSNpZmRlZiBMUEFTUzgKLSN1bmRlZiBMUEFTUzgKLSNlbmRpZiAv KiBMUEFTUzggKi8KLQotLyogIFQgVCBSIEUgUyAgLS0gIFJlc3RvcmUgdGVybWluYWwgdG8gIm5v cm1hbCIgbW9kZS4gICovCi0KLS8qIHNrZUBwa21hYi5zZTogVGhlcmUgYXJlIHR3byBjaG9pY2Vz IGZvciB3aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGRvLgotICogKDEpIFJlc3RvcmUgdGhlIHR0 eSB0byBjdXJyZW50ICJub3JtYWwiIG1vZGUsIHdpdGggY2FycmllciB0cmVhdG1lbnQKLSAqIGFj Y29yZGluZyB0byB0dGNhcnIsIHRvIGJlIHVzZWQgYWZ0ZXIgZXZlcnkga2VybWl0IGNvbW1hbmQu ICgyKSBSZXN0b3JlCi0gKiB0aGUgdHR5IHRvIHRoZSBzdGF0ZSBpdCB3YXMgaW4gYmVmb3JlIGtl cm1pdCBvcGVuZWQgaXQuIFRoZXNlIGNob2ljZXMKLSAqIGNvbmZsaWN0LCBzaW5jZSB0dG9sZCBj YW4ndCBob2xkIGJvdGggY2hvaWNlcyBvZiB0dHkgcGFyYW1ldGVycy4gIHR0cmVzKCkKLSAqIGlz IGN1cnJlbnRseSBiZWluZyBjYWxsZWQgYXMgaW4gY2hvaWNlICgxKSwgYnV0IHR0b2xkIGJhc2lj YWxseSBob2xkcwotICogdGhlIGluaXRpYWwgcGFyYW1ldGVycywgYXMgaW4gKDIpLCBhbmQgdGhl IGRlc2NyaXB0aW9uIGF0IHRoZSBiZWdpbm5pbmcKLSAqIG9mIHRoaXMgZmlsZSBzYXlzICgyKS4K LSAqCi0gKiBJIGRvbid0IHRoaW5rIHJlc3RvcmluZyB0dHkgcGFyYW1ldGVycyBhZnRlciBhbGwg a2VybWl0IGNvbW1hbmRzIG1ha2VzCi0gKiBtdWNoIG9mIGEgZGlmZmVyZW5jZS4gIFJlc3Rvcmlu ZyB0aGVtIHVwb24gZXhpdCBmcm9tIGtlcm1pdCBtYXkgYmUgb2YKLSAqIHNvbWUgdXNlIGluIHNv bWUgY2FzZXMgKHdoZW4gdGhlIGxpbmUgaXMgbm90IHJlc3RvcmVkIGF1dG9tYXRpY2FsbHkgb24K LSAqIGNsb3NlLCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSkuCi0gKgotICogSSBjYW4ndCBjaG9v c2Ugd2hpY2ggb25lIGl0IHNob3VsZCBiZSwgc28gSSBoYXZlbid0IGNoYW5nZWQgaXQuIEl0Ci0g KiBwcm9iYWJseSB3b3JrcyBhcyBpdCBpcywgdG9vLiBJdCB3b3VsZCBwcm9iYWJseSBldmVuIHdv cmsgZXZlbiB3aXRoCi0gKiB0dHJlcygpIGVudGlyZWx5IGRlbGV0ZWQuLi4KLSAqCi0gKiAoZnJv bSBmZGM6IEFjdHVhbGx5LCB0aGlzIGZ1bmN0aW9uIG9wZXJhdGVzIGluIHJlbW90ZSBtb2RlIHRv bywgc28KLSAqIGl0IHJlc3RvcmVzIHRoZSBjb25zb2xlIChjb21tYW5kKSB0ZXJtaW5hbCB0byB3 aGF0ZXZlciBtb2RlIGl0IHdhcwotICogaW4gYmVmb3JlIHBhY2tldCBvcGVyYXRpb25zIGJlZ2Fu LCBzbyB0aGF0IGNvbW1hbmRzIHdvcmsgcmlnaHQgYWdhaW4uKQotICovCi1pbnQKLXR0cmVzKCkg eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIHRoZSB0dHkgdG8gbm9y bWFsLiAqLwotICAgIGludCB4OwotCi0gICAgaWYgKHR0eWZkIDwgMCkgcmV0dXJuKC0xKTsgICAg ICAgICAgLyogTm90IG9wZW4uICovCi0KLSAgICBpZiAodHRmZGZsZykgcmV0dXJuKDApOwkJLyog RG9uJ3QgbWVzcyB3aXRoIHRlcm1pbmFsIG1vZGVzIGlmICovCi0JCQkJCS8qIHdlIGdvdCB0dHlm ZCBmcm9tIGFub3RoZXIgcHJvY2VzcyAqLwotI2lmZGVmCU5FVENPTk4KLSAgICBpZiAobmV0Y29u bikgewkJCS8qIE5ldHdvcmsgY29ubmVjdGlvbiAqLwotICAgICAgICB0dnRmbGcgPSAwOwotI2lm ZGVmIFRDUFNPQ0tFVAotI2lmZGVmIFRDUF9OT0RFTEFZCi0gICAgICAgIHsKLQkgICAgZXh0ZXJu IGludCB0Y3Bfbm9kZWxheTsJLyogSnVzdCBwdXQgdGhpcyBiYWNrIGlmIG5lY2Vzc2FyeSAqLwot CSAgICBpZiAodHRuZXQgPT0gTkVUX1RDUEIpIHsKLQkJaWYgKG5vZGVsYXlfc2F2ID4gLTEpIHsK LQkJICAgIG5vX2RlbGF5KHR0eWZkLG5vZGVsYXlfc2F2KTsKLQkJICAgIG5vZGVsYXlfc2F2ID0g LTE7Ci0JCX0KLQkgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLyogVENQX05PREVMQVkgKi8KLSNp ZmRlZiBUTl9DT01QT1JUCi0gICAgICAgIGlmIChpc3RuY29tcG9ydCgpKSB7Ci0gICAgICAgICAg ICBpbnQgcmMgPSAtMTsKLSAgICAgICAgICAgIGlmICgocmMgPSB0bnNldGZsb3codHRmbG93KSkg PCAwKQotCSAgICAgIHJldHVybihyYyk7Ci0gICAgICAgICAgICBpZiAodHRzcGVlZCA8PSAwKSAK LQkgICAgICB0dHNwZWVkID0gdG5jX2dldF9iYXVkKCk7Ci0gICAgICAgICAgICBlbHNlIGlmICgo cmMgPSB0bmNfc2V0X2JhdWQodHRzcGVlZCkpIDwgMCkKLQkgICAgICByZXR1cm4ocmMpOwotICAg ICAgICAgICAgdG5jX3NldF9kYXRhc2l6ZSg4KTsKLQkgICAgdG5jX3NldF9zdG9wc2l6ZShzdG9w Yml0cyk7Ci0KLSNpZmRlZiBIV1BBUklUWQotICAgICAgICAgICAgaWYgKGh3cGFyaXR5KSB7Ci0g ICAgICAgICAgICAgICAgc3dpdGNoIChod3Bhcml0eSkgewotCQkgIGNhc2UgJ2UnOgkJCS8qIEV2 ZW4gKi8KLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwidHRyZXMgOCBiaXRzICsgZXZl biBwYXJpdHkiLCIiLDApOwotICAgICAgICAgICAgICAgICAgICB0bmNfc2V0X3Bhcml0eSgzKTsK LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0JCSAgY2FzZSAnbyc6CQkJLyogT2RkICovCi0g ICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0cmVzIDggYml0cyArIG9kZCBwYXJpdHki LCIiLDApOwotICAgICAgICAgICAgICAgICAgICB0bmNfc2V0X3Bhcml0eSgyKTsKLSAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0JCSAgY2FzZSAnbSc6CQkJLyogTWFyayAqLwotICAgICAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dHJlcyA4IGJpdHMgKyBpbnZhbGlkIHBhcml0eTogbWFy ayIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgICAgIHRuY19zZXRfcGFyaXR5KDQpOwotICAgICAg ICAgICAgICAgICAgICBicmVhazsKLQkJICBjYXNlICdzJzoJCQkvKiBTcGFjZSAqLwotICAgICAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dHJlcyA4IGJpdHMgKyBpbnZhbGlkIHBhcml0eTog c3BhY2UiLCIiLDApOwotICAgICAgICAgICAgICAgICAgICB0bmNfc2V0X3Bhcml0eSg1KTsKLSAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg fSBlbHNlCi0jZW5kaWYgLyogSFdQQVJJVFkgKi8KLQkgICAgewotICAgICAgICAgICAgICAgIHRu Y19zZXRfcGFyaXR5KDEpOyAgICAgICAgICAgICAgLyogTm9uZSAqLwotICAgICAgICAgICAgfQot ICAgICAgICAgICAgdHZ0ZmxnID0gMDsKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAg fQotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLQlyZXR1 cm4oMCk7Ci0gICAgfQotI2VuZGlmCS8qIE5FVENPTk4gKi8KLSNpZmRlZiBORVRDTUQKLSAgICBp ZiAodHRwaXBlKSByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTkVUQ01EICovCi0jaWZkZWYgTkVUUFRZ Ci0gICAgaWYgKHR0cHR5KSByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTkVUUFRZICovCi0KLS8qIFJl YWwgdGVybWluYWwgZGV2aWNlLCBzbyByZXN0b3JlIGl0cyBvcmlnaW5hbCBtb2RlcyAqLwotCi0j aWZkZWYgQlNENDRPUlBPU0lYCQkJLyogRm9yIFBPU0lYIGxpa2UgdGhpcyAqLwotICAgIGRlYnVn KEYxMDAsInR0cmVzIEJTRDQ0T1JQT1NJWCIsIiIsMCk7Ci0gICAgeCA9IHRjc2V0YXR0cih0dHlm ZCxUQ1NBRFJBSU4sJnR0b2xkKTsKLSNlbHNlCQkJCQkvKiBGb3IgYWxsIG90aGVycy4uLiAqLwot I2lmZGVmIEFUVFNWICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBBVCZUIHZlcnNp b25zLi4uICovCi0gICAgZGVidWcoRjEwMCwidHRyZXMgQVRUU1YiLCIiLDApOwotICAgIHggPSBp b2N0bCh0dHlmZCxUQ1NFVEFXLCZ0dG9sZCk7CS8qIFJlc3RvcmUgdHR5IG1vZGVzIHRoaXMgd2F5 LiAqLwotI2Vsc2UKLS8qIEhlcmUgd2UgcmVzdG9yZSB0aGUgbW9kZXMgZm9yIEJTRCAqLwotCi0j aWZkZWYgTFBBU1M4CQkJCS8qIFVuZG8gInBhc3M4IiBpZiBpdCB3ZXJlIGRvbmUgKi8KLSAgICBp ZiAobG1vZGVmKSB7Ci0JaWYgKGlvY3RsKHR0eWZkLFRJT0NMU0VULCZsbW9kZSkgPCAwKQotCSAg ZGVidWcoRjEwMCwidHRyZXMgVElPQ0xTRVQgZmFpbGVkIiwiIiwwKTsKLQllbHNlCi0JICBkZWJ1 ZyhGMTAwLCJ0dHJlcyBUSU9DTFNFVCBvayIsIiIsMCk7Ci0gICAgfQotI2VuZGlmIC8qIExQQVNT OCAqLwotCi0jaWZkZWYgQ0tfRFRSQ1RTCQkgICAvKiBVbmRvIGhhcmR3YXJlIGZsb3cgaWYgaXQg d2VyZSBkb25lICovCi0gICAgaWYgKGxtb2RlZikgewotIAlpZiAoaW9jdGwodHR5ZmQsVElPQ0xT RVQsJmxtb2RlKSA8IDApCi0gCSAgZGVidWcoRjEwMCwidHRyZXMgVElPQ0xTRVQgZmFpbGVkIiwi IiwwKTsKLSAJZWxzZQotIAkgIGRlYnVnKEYxMDAsInR0cmVzIFRJT0NMU0VUIG9rIiwiIiwwKTsK LSAgICB9Ci0jZW5kaWYgLyogQ0tfRFRSQ1RTICovCi0KLSNpZmRlZiBUSU9DR0VUQwkJCQkvKiBQ dXQgYmFjayBzcGVjaWFsIGNoYXJhY3RlcnMgKi8KLSAgICBpZiAodGNoYXJmICYmICh4bG9jYWwg PT0gMCkpIHsKLQlpZiAoaW9jdGwodHR5ZmQsVElPQ1NFVEMsJnRjaG9sZCkgPCAwKQotCSAgZGVi dWcoRjEwMCwidHRyZXMgVElPQ1NFVEMgZmFpbGVkIiwiIiwwKTsKLQllbHNlCi0JICBkZWJ1ZyhG MTAwLCJ0dHJlcyBUSU9DU0VUQyBvayIsIiIsMCk7Ci0gICAgfQotI2VuZGlmIC8qIFRJT0NHRVRD ICovCi0KLSNpZmRlZiBUSU9DR0xUQwkJCQkvKiBQdXQgYmFjayBsb2NhbCBzcGVjaWFsIGNoYXJh Y3RlcnMgKi8KLSAgICBpZiAobHRjaGFyZiAmJiAoeGxvY2FsID09IDApKSB7Ci0JaWYgKGlvY3Rs KHR0eWZkLFRJT0NTTFRDLCZsdGNob2xkKSA8IDApCi0JICBkZWJ1ZyhGMTAwLCJ0dHJlcyBUSU9D U0xUQyBmYWlsZWQiLCIiLDApOwotCWVsc2UKLQkgIGRlYnVnKEYxMDAsInR0cmVzIFRJT0NTTFRD IG9rIiwiIiwwKTsKLSAgICB9Ci0jZW5kaWYgLyogVElPQ0dMVEMgKi8KLQotI2lmZGVmIEJFTExW MTAKLSAgICBkZWJ1ZyhGMTAwLCJ0dHJlcyBCRUxMVjEwIiwiIiwwKTsKLSAgICB4ID0gaW9jdGwo dHR5ZmQsVElPQ1NFVFAsJnR0b2xkKTsJLyogUmVzdG9yZSBib3RoIHN0cnVjdHMgKi8KLSAgICB4 ID0gaW9jdGwodHR5ZmQsVElPQ1NERVYsJnRkb2xkKTsKLSNlbHNlCi0gICAgZGVidWcoRjEwMCwi dHRyZXMgc3R0eSIsIiIsMCk7Ci0gICAgeCA9IHN0dHkodHR5ZmQsJnR0b2xkKTsgICAgICAgICAg ICAgLyogUmVzdG9yZSB0dHkgbW9kZXMgdGhlIG9sZCB3YXkuICovCi0jZW5kaWYgLyogQkVMTFYx MCAqLwotCi0gICAgaWYgKCF4bG9jYWwpCi0gICAgICBtc2xlZXAoMTAwKTsJCQkvKiBUaGlzIHJl cGxhY2VzIHNsZWVwKDEpLi4uICovCi0JCQkJCS8qIFB1dCBiYWNrIHNsZWVwKDEpIGlmIHR0eSBp cyAqLwotCQkJCQkvKiBtZXNzZWQgdXAgYWZ0ZXIgY2xvc2UuICovCi0jZW5kaWYgLyogQVRUU1Yg Ki8KLSNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KLQotICAgIGRlYnVnKEYxMDEsInR0cmVzIHJl c3VsdCIsIiIseCk7Ci0jaWZuZGVmIFFOWAotICAgIGlmICh4IDwgMCkgZGVidWcoRjEwMSwidHRy ZXMgZXJybm8iLCIiLGVycm5vKTsKLSNlbmRpZiAvKiBRTlggKi8KLQotI2lmZGVmIEFJWFJTCi0j aWZuZGVmIEFJWDQxCi0gICAgeCA9IGlvY3RsKHR0eWZkLCB0dGxkICYgMSA/IFRYQUREQ0QgOiBU WERFTENELCAicnRzIik7Ci0gICAgZGVidWcoRjEwMSwidHRyZXMgQUlYIGxpbmUgZGlzY2lwbGlu ZSBydHMgcmVzdG9yZSIsIiIseCk7Ci0jZW5kaWYgLyogQUlYNDEgKi8KLSNlbmRpZiAvKiBBSVhS UyAqLwotCi0jaWZkZWYgQlNENDEKLSAgICBpZiAodHRsZCA+IC0xKSB7CQkJLyogUHV0IGJhY2sg bGluZSBkaXNjaXBsaW5lICovCi0JeCA9IGlvY3RsKHR0eWZkLCBUSU9DU0VURCwgJnR0bGQpOwot CWRlYnVnKEYxMDEsInR0cmVzIEJTRDQxIGxpbmUgZGlzY2lwbGluZSByZXN0b3JlIiwiIix4KTsK LQlpZiAoeCA8IDApIGRlYnVnKEYxMDEsIi4uLmlvY3RsIGVycm5vIiwiIixlcnJubyk7Ci0JdHRs ZCA9IC0xOwotICAgIH0KLSNlbmRpZiAvKiBCU0Q0MSAqLwotCi0jaWZkZWYgc29ueV9uZXdzCi0g ICAgeCA9IHhsb2NhbCA/IGttX2V4dCA6IGttX2NvbjsJLyogUmVzdG9yZSBLYW5qaSBtb2RlLiAq LwotICAgIGlmICh4ICE9IC0xKSB7CQkJLyogTWFrZSBzdXJlIHdlIGtub3cgb3JpZ2luYWwgbW9k ZXMuICovCi0JaWYgKGlvY3RsKHR0eWZkLFRJT0NLU0VULCAmeCkgPCAwKSB7Ci0JICAgIHBlcnJv cigidHRyZXMgY2FuJ3Qgc2V0IEthbmppIG1vZGUiKTsKLQkgICAgZGVidWcoRjEwMSwidHRyZXMg ZXJyb3Igc2V0dGluZyBLYW5qaSBtb2RlIiwiIix4KTsKLQkgICAgcmV0dXJuKC0xKTsKLQl9Ci0g ICAgfQotICAgIGRlYnVnKEYxMDAsInR0cmVzIHNldCBLYW5qaSBtb2RlIG9rIiwiIiwwKTsKLSNl bmRpZiAvKiBzb255X25ld3MgKi8KLQotICAgIHR2dGZsZyA9IDA7CQkJCS8qIEludmFsaWRhdGUg dGVybWluYWwgbW9kZSBzZXR0aW5ncyAqLwotICAgIGRlYnVnKEYxMDEsInR0cmVzIHJldHVybiBj b2RlIiwiIix4KTsKLSAgICByZXR1cm4oeCk7Ci19Ci0KLSNpZm5kZWYgTk9VVUNQCi0KLS8qICBU IFQgQyBIIEsgUCBJIEQgIC0tICBDaGVjayBsb2NrZmlsZSBwaWQgICovCi0vKgotICBSZWFkIHBp ZCBmcm9tIGxvY2tmaWxlIG5hbWVkIGYsIGNoZWNrIHRoYXQgaXQncyBzdGlsbCB2YWxpZC4KLSAg SWYgc28sIHJldHVybiAxLgotICBPbiBmYWlsdXJlIHRvIHJlYWQgcGlkLCByZXR1cm4gMS4KLSAg T3RoZXJ3aXNlLCB0cnkgdG8gZGVsZXRlIGxvY2tmaWxlIGYgYW5kIHJldHVybiAwIGlmIHN1Y2Nl c3NmdWwsIGVsc2UgMS4KLSovCi1zdGF0aWMgaW50Ci10dGNoa3BpZChmKSBjaGFyICpmOyB7Ci0g ICAgaW50IHBpZCwgbXlwaWQsIHg7Ci0gICAgcGlkID0gdHRycGlkKGYpOwkJCS8qIFJlYWQgcGlk IGZyb20gZmlsZS4gKi8KLSAgICBpZiAocGlkID4gLTEpIHsJCQkvKiBJZiB3ZSB3ZXJlIGFibGUg dG8gcmVhZCB0aGUgcGlkLi4gKi8KLQlkZWJ1ZyhGMTAxLCJ0dGNoa3BpZCBsb2NrIHBpZCIsIiIs cGlkKTsKLQllcnJubyA9IDA7CQkJLyogU2VlIGlmIHByb2Nlc3Mgc3RpbGwgZXhpc3RzLiAqLwot CW15cGlkID0gKGludClnZXRwaWQoKTsJCS8qIEdldCBteSBvd24gcGlkLiAqLwotCWRlYnVnKEYx MDEsInR0Y2hrcGlkIG15IHBpZCIsIiIsbXlwaWQpOwotCWlmIChwaWQgPT0gbXlwaWQpIHsJCS8q IEl0J3MgbWUhICovCi0JICAgIHggPSAtMTsJCQkvKiBTbyBJIGNhbiBkZWxldGUgaXQgKi8KLQkg ICAgZXJybm8gPSBFU1JDSDsJCS8qIHByZXRlbmQgaXQncyBpbnZhbGlkICovCi0JfSBlbHNlIHsJ CQkvKiBJdCdzIG5vdCBtZSAqLwotCSAgICB4ID0ga2lsbCgoUElEX1QpcGlkLCAwKTsJLyogU2Vl IGlmIGl0J3MgYSBsaXZlIHByb2Nlc3MgKi8KLQkgICAgZGVidWcoRjEwMSwidHRjaGtwaWQga2ls bCBlcnJubyIsIiIsZXJybm8pOwotCX0KLQlkZWJ1ZyhGMTAxLCJ0dGNoa3BpZCBwaWQgdGVzdCIs IiIseCk7Ci0JaWYgKHggPCAwICYmIGVycm5vID09IEVTUkNIKSB7IC8qIHBpZCBpcyBpbnZhbGlk ICovCi0JICAgIGRlYnVnKEYxMTEsInJlbW92aW5nIHN0YWxlIGxvY2siLGYscGlkKTsKLQkgICAg aWYgKCFiYWNrZ3JkKQotCSAgICAgIHByaW50ZigiUmVtb3Zpbmcgc3RhbGUgbG9jayAlcyAocGlk ICVkIHRlcm1pbmF0ZWQpXG4iLCBmLCBwaWQpOwotCSAgICBwcml2X29uKCk7Ci0JICAgIHggPSB1 bmxpbmsoZik7CQkvKiBSZW1vdmUgdGhlIGxvY2tmaWxlLiAqLwotCSAgICBwcml2X29mZigpOwot CSAgICBkZWJ1ZyhGMTExLCJ0dGNoa3BpZCB1bmxpbmsiLGYseCk7Ci0JICAgIGlmICh4ID4gLTEp Ci0JICAgICAgcmV0dXJuKDApOwkJLyogRGV2aWNlIGlzIG5vdCBsb2NrZWQgYWZ0ZXIgYWxsICov Ci0JICAgIGVsc2UgaWYgKCFiYWNrZ3JkKQotCSAgICAgIHBlcnJvcihmKTsKLQl9Ci0JcmV0dXJu KDEpOwotICAgIH0KLSAgICByZXR1cm4oMSk7CQkJCS8qIEZhaWx1cmUgdG8gcmVhZCBwaWQgKi8K LX0KLQotI2lmZGVmIEhQVVgKLQotLyogQWxpYXNlcyAoZGlmZmVyZW50IGRyaXZlcnMpIGZvciBI UC1VWCBkaWFsb3V0IGRldmljZXM6ICovCi0KLXN0YXRpYyBjaGFyICpkZXZwcmVmaXhbXSA9IHsg InR0eSIsICJ0dHlkIiwgImN1bCIsICJjdWEiLCAiY3VhZCIsICJjdWxkIiwgIiIgfTsKLXN0YXRp YyBpbnQgdHR5ZGV4aXN0cyA9IDA7Ci0KLSNlbmRpZiAvKiBIUFVYICovCi0KLS8qICBUIFQgUiBQ IEkgRCAgLS0gIFJlYWQgcGlkIGZyb20gbG9ja2ZpbGUgIm5hbWUiICovCi0KLXN0YXRpYyBpbnQK LXR0cnBpZChuYW1lKSBjaGFyICpuYW1lOyB7Ci0gICAgbG9uZyBsZW47Ci0gICAgaW50IHgsIGZk LCBwaWQ7Ci0gICAgc2hvcnQgc3BpZDsKLSAgICBjaGFyIGJ1ZlszMl07Ci0KLSAgICBkZWJ1ZyhG MTEwLCJ0dHJwaWQiLG5hbWUsMCk7Ci0gICAgaWYgKCFuYW1lKSByZXR1cm4oLTEpOwotICAgIGlm ICghKm5hbWUpIHJldHVybigtMSk7Ci0gICAgcHJpdl9vbigpOwotICAgIGxlbiA9IHpjaGtpKG5h bWUpOwkJCS8qIEdldCBmaWxlIGxlbmd0aCAqLwotICAgIHByaXZfb2ZmKCk7Ci0gICAgZGVidWco RjEwMSwidHRycGlkIHpjaGtpIiwiIixsZW4pOwotICAgIGlmIChsZW4gPCAwKQotICAgICAgcmV0 dXJuKC0xKTsKLSAgICBpZiAobGVuID4gMzEpCi0gICAgICByZXR1cm4oLTEpOwotICAgIHByaXZf b24oKTsKLSAgICBmZCA9IG9wZW4obmFtZSxPX1JET05MWSk7CQkvKiBUcnkgdG8gb3BlbiBsb2Nr ZmlsZS4gKi8KLSAgICBwcml2X29mZigpOwotICAgIGRlYnVnKEYxMDEsInR0cnBpZCBmZCIsIiIs ZmQpOwotICAgIGlmIChmZCA8PSAwKQotICAgICAgcmV0dXJuKC0xKTsKLS8qCi0gIEhlcmUgd2Ug dHJ5IHRvIGJlIGZsZXhpYmxlIGFuZCBhbGxvdyBmb3IgYWxsIGRpZmZlcmVudCBiaW5hcnkgYW5k IHN0cmluZwotICBmb3JtYXRzIGF0IHJ1bnRpbWUsIHJhdGhlciB0aGFuIGEgc3BlY2lmaWMgZm9y bWF0IGZvciBlYWNoIGNvbmZpZ3VyYXRpb24KLSAgaGFyZHdpcmVkIGF0IGNvbXBpbGUgdGltZS4K LSovCi0gICAgcGlkID0gLTE7Ci0jaWZuZGVmIENPSEVSRU5UCi0vKgotICBDT0hFUkVOVCB1c2Vz IGEgc3RyaW5nIFBJRCBidXQgd2l0aG91dCBsZWFkaW5nIHNwYWNlcyBvciAwJ3MsIHNvIHRoZXJl IGlzCi0gIG5vIHdheSB0byB0ZWxsIGZyb20gdGhlIGZpbGUncyBsZW5ndGggd2hldGhlciBpdCBj b250YWlucyBhIHN0cmluZyBvciBiaW5hcnkKLSAgcGlkLiAgU28gZm9yIENPSEVSRU5UIG9ubHks IHdlIG9ubHkgYWxsb3cgc3RyaW5nIHBpZHMuICBGb3IgYWxsIG90aGVycywgd2UKLSAgZGVjaWRl IGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZSBsb2NrZmlsZS4KLSovCi0gICAgaWYgKGxlbiA+IDQp IHsJCQkvKiBJZiBmaWxlID4gNCBieXRlcyBpdCdzIGEgc3RyaW5nICovCi0jZW5kaWYgLyogQ09I RVJFTlQgKi8KLQl4ID0gcmVhZChmZCxidWYsKGludClsZW4pOwotCWRlYnVnKEYxMTEsInR0cnBp ZCBzdHJpbmcgcmVhZCIsYnVmLHgpOwotCWlmICh4IDwgMCkgewotCSAgICBwaWQgPSAtMTsKLQl9 IGVsc2UgewotCSAgICBidWZbMzFdID0gJ1wwJzsKLQkgICAgeCA9IHNzY2FuZihidWYsIiVkIiwm cGlkKTsJLyogR2V0IHRoZSBpbnRlZ2VyIHBpZCBmcm9tIGl0LiAqLwotCX0KLSNpZm5kZWYgQ09I RVJFTlQKLSAgICB9IGVsc2UgaWYgKGxlbiA9PSA0KSB7CQkvKiA0IGJ5dGVzIHNvIGJpbmFyeSAq LwotCXggPSByZWFkKGZkLCAoY2hhciAqKSZwaWQsIDQpOwkvKiBSZWFkIHRoZSBieXRlcyBpbnRv IGFuIGludCAqLwotCWRlYnVnKEYxMDEsInR0cnBpZCBpbnRlZ2VyIHJlYWQiLCIiLHgpOwotCWlm ICh4IDwgNCkKLQkgIHBpZCA9IC0xOwotICAgIH0gZWxzZSBpZiAobGVuID09IDIpIHsJCS8qIDIg Ynl0ZXMgYmluYXJ5ICovCi0JeCA9IHJlYWQoZmQsIChjaGFyICopJnNwaWQsIDIpOwkvKiBSZWFk IHRoZSBieXRlcyBpbnRvIGEgc2hvcnQgKi8KLQlkZWJ1ZyhGMTAxLCJ0dHJwaWQgc2hvcnQgcmVh ZCIsIiIseCk7Ci0JaWYgKHggPCAyKQotCSAgcGlkID0gLTE7Ci0JZWxzZQotCSAgcGlkID0gc3Bp ZDsKLSAgICB9IGVsc2UKLSAgICAgIHBpZCA9IC0xOwotI2VuZGlmIC8qIENPSEVSRU5UICovCi0g ICAgY2xvc2UoZmQpOwkJCQkvKiBDbG9zZSB0aGUgbG9ja2ZpbGUgKi8KLSAgICBkZWJ1ZyhGMTAx LCJ0dHJwaWQgcGlkIiwiIixwaWQpOwotICAgIHJldHVybihwaWQpOwotfQotI2VuZGlmIC8qIE5P VVVDUCAqLwotCi0vKiAgVCBUIEwgTyBDIEsgICovCi0KLS8qCi0gIFRoaXMgZnVuY3Rpb24gYXR0 ZW1wdHMgdG8gY29vcmRpbmF0ZSB1c2Ugb2YgdGhlIGNvbW11bmljYXRpb24gZGV2aWNlIHdpdGgK LSAgb3RoZXIgY29waWVzIG9mIEtlcm1pdCBhbmQgYW55IG90aGVyIHByb2dyYW0gdGhhdCBmb2xs b3dzIHRoZSBVVUNQCi0gIGRldmljZS1sb2NraW5nIGNvbnZlbnRpb25zLCB3aGljaCwgdW5mb3J0 dW5hdGVseSwgdmFyeSBhbW9uZyBkaWZmZXJlbnQgVU5JWAotICBpbXBsZW1lbnRhdGlvbnMuICBU aGUgaWRlYSBpcyB0byBsb29rIGZvciBhIGZpbGUgb2YgYSBjZXJ0YWluIG5hbWUsIHRoZQotICAi bG9ja2ZpbGUiLCBpbiBhIGNlcnRhaW4gZGlyZWN0b3J5LiAgSWYgc3VjaCBhIGZpbGUgaXMgZm91 bmQsIHRoZW4gdGhlIGxpbmUKLSAgaXMgcHJlc3VtZWQgdG8gYmUgaW4gdXNlLCBhbmQgS2VybWl0 IHNob3VsZCBub3QgdXNlIGl0LiAgSWYgbm8gc3VjaCBmaWxlIGlzCi0gIGZvdW5kLCBLZXJtaXQg YXR0ZW1wdHMgdG8gY3JlYXRlIG9uZSBzbyB0aGF0IG90aGVyIHByb2dyYW1zIHdpbGwgbm90IHVz ZSB0aGUKLSAgc2FtZSBsaW5lIGF0IHRoZSBzYW1lIHRpbWUuICBCZWNhdXNlIHRoZSBsb2NrZmls ZSBhbmQvb3IgdGhlIGRpcmVjdG9yeSBpdCdzCi0gIGluIG1pZ2h0IGxhY2sgd3JpdGUgcGVybWlz c2lvbiBmb3IgdGhlIHBlcnNvbiBydW5uaW5nIEtlcm1pdCwgS2VybWl0IGNvdWxkCi0gIGZpbmQg aXRzZWxmIHJ1bm5pbmcgc2V0dWlkIHRvIHV1Y3Agb3Igb3RoZXIgdXNlciB0aGF0IGRvZXMgaGF2 ZSB0aGUKLSAgbmVjZXNzYXJ5IHBlcm1pc3Npb25zLiAgQXQgc3RhcnR1cCwgS2VybWl0IGhhcyBj aGFuZ2VkIGl0cyBlZmZlY3RpdmUgdWlkIHRvCi0gIHRoZSB1c2VyJ3MgcmVhbCB1aWQsIGFuZCBz byB0dGxvY2soKSBtdXN0IHN3aXRjaCBiYWNrIHRvIHRoZSBvcmlnaW5hbAotICBlZmZlY3RpdmUg dWlkIGluIG9yZGVyIHRvIGNyZWF0ZSB0aGUgbG9ja2ZpbGUsIGFuZCB0aGVuIGJhY2sgYWdhaW4g dG8gdGhlCi0gIHJlYWwgdWlkIHRvIHByZXZlbnQgdW5hdXRob3JpemVkIGFjY2VzcyB0byBvdGhl ciBkaXJlY3RvcmllcyBvciBmaWxlcyBvd25lZAotICBieSB0aGUgdXNlciB0aGUgcHJvZ3JhbSBp cyBzZXR1aWQgdG8uCi0KLSAgVG90YWxseSByZXdyaXR0ZW4gZm9yIEMtS2VybWl0IDVBIHRvIGVs aW1pbmF0ZSB3aW5kb3dzIG9mIHZ1bG5lcmFiaWxpdHksCi0gIGJhc2VkIG9uIHN1Z2dlc3Rpb25z IGZyb20gV2FycmVuIFR1Y2tlci4gIENhbGwgd2l0aCBwb2ludGVyIHRvIG5hbWUgb2YKLSAgdHR5 IGRldmljZS4gIFJldHVybnM6Ci0KLSAgIDAgb24gc3VjY2VzcwotICAtMSBvbiBmYWlsdXJlCi0K LSAgTm90ZTogT25jZSBwcml2aWxlZ2VzIGFyZSB0dXJuZWQgb24gdXNpbmcgcHJpdl9vbigpLCBp dCBpcyBlc3NlbnRpYWwgdGhhdAotICB0aGV5IGFyZSB0dXJuZWQgb2ZmIGFnYWluIGJlZm9yZSB0 aGlzIGZ1bmN0aW9uIHJldHVybnMuCi0qLwotI2lmZGVmIFNWUjQJCQkJLyogTG9ja2ZpbGUgdXNl cyBkZXZpY2UgbnVtYmVycy4gKi8KLS8qCi0gIEFsdGhvdWdoIEkgY2FuJ3QgZmluZCB0aGlzIGlu IHdyaXRpbmcgYW55d2hlcmUgKGUuZy4gaW4gU1ZJRCBmb3IgU1ZSNCksCi0gIGl0IGlzIHRoZSBi ZWhhdmlvciBvZiB0aGUgInJlZmVyZW5jZSB2ZXJzaW9uIiBvZiBTVlI0LCBpLmUuIHRoZSBJbnRl bAotICBwb3J0IGZyb20gVU5JWCBTeXN0ZW1zIExhYm9yYXRvcmllcywgdGhlbiBjYWxsZWQgVW5p dmVsIFVuaXhXYXJlLAotICB0aGVuIGNhbGxlZCBOb3ZlbGwgVW5peFdhcmUsIHRoZW4gY2FsbGVk IFNDTyBVbml4d2FyZSwgdGhlbiBjYWxsZWQgQ2FsZGVyYQotICBPcGVuIFVOSVguLi4gIEl0IGFs c28gbWFrZXMgbXVjaCBtb3JlIHNlbnNlIHRoYW4gZGV2aWNlLW5hbWUtYmFzZWQgbG9ja2ZpbGVz Ci0gIHNpbmNlIHRoZXJlIGNhbiBiZSBtdWx0aXBsZSBuYW1lcyBmb3IgdGhlIHNhbWUgZGV2aWNl LCBzeW1saW5rcywgZXRjLgotKi8KLSNpZm5kZWYgTk9MRkRFVk5PCi0jaWZuZGVmIExGREVWTk8J CQkJLyogRGVmaW5lIHRoaXMgZm9yIFNWUjQgKi8KLSNpZm5kZWYgQUlYUlMJCQkJLyogQnV0IG5v dCBmb3IgUlMvNjAwMCBBSVggMy4yLCBldGMuICovCi0jaWZuZGVmIEJTRDQ0CQkJCS8qIElmIGFu eWJvZHkgZWxzZSBuZWVkcyBpdC4uLiAqLwotI2lmbmRlZiBfXzM4NkJTRF9fCi0jaWZuZGVmIF9f RnJlZUJTRF9fCi0jaWZuZGVmIEhQVVgxMAotI2lmbmRlZiBJUklYNTEJCQkJLyogU0dJIElSSVgg NS4xIG9yIGxhdGVyICovCi0jaWZuZGVmIENLX1NDT1Y1CQkJLyogU0NPIE9wZW4gU2VydmVyIDUu MCAqLwotI2RlZmluZSBMRkRFVk5PCi0jZW5kaWYgLyogQ0tfU0NPVjUgKi8KLSNlbmRpZiAvKiBJ UklYNTEgKi8KLSNlbmRpZiAvKiBIUFVYMTAgKi8KLSNlbmRpZiAvKiBfX0ZyZWVCU0RfXyAqLwot I2VuZGlmIC8qIF9fMzg2QlNEX18gKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2VuZGlmIC8qIEFJ WFJTICovCi0jZW5kaWYgLyogTEZERVZOTyAqLwkJCS8qIC4uLiBkZWZpbmUgaXQgaGVyZSBvciBv biBDQyAqLwotI2VuZGlmIC8qIE5PTEZERVZOTyAqLwotI2VuZGlmIC8qIFNWUjQgKi8JCQkvKiBj b21tYW5kIGxpbmUuICovCi0KLSNpZmRlZiBDT0hFUkVOVAotI2RlZmluZSBMRkRFVk5PCi0jZW5k aWYgLyogQ09IRVJFTlQgKi8KLQotLyoKLSAgRm9yIHBsYXRmb3JtcyB3aGVyZSB0aGUgbG9ja2Zp bGUgbmFtZSBpcyBtYWRlIGZyb20gZGV2aWNlL21ham9yL21pbm9yCi0gIGRldmljZSBudW1iZXIs IGFzIGluIFNWUjQuICBXaGljaCwgaWYgd2UgbXVzdCBoYXZlIGxvY2tmaWxlcyBhdCBhbGwsIGlz Ci0gIGJ5IGZhciB0aGUgYmVzdCBmb3JtYXQsIHNpbmNlIGl0IGVsaW1pbmF0ZXMgYWxsIHRoZSBj b25mdXNpb24gdGhhdCBzdGVtcwotICBmcm9tIG11bHRpcGxlIG5hbWVzIChvciBkcml2ZXJzKSBm b3IgdGhlIHNhbWUgcG9ydCwgbm90IHRvIG1lbnRpb24KLSAgc3ltbGlua3MuICBJdCBtaWdodCBl dmVuIGJlIGEgZ29vZCBpZGVhIHRvIHN0YXJ0IHVzaW5nIHRoaXMgZm9ybSBldmVuCi0gIG9uIHBs YXRmb3JtcyB3aGVyZSBpdCdzIG5vdCBzdXBwb3J0ZWQsIGFsb25nc2lkZSB0aGUgbm9ybWFsIGZv cm1zIGZvciB0aG9zZQotICBwbGF0Zm9ybXMsIGluIG9yZGVyIHRvIGdldCBwZW9wbGUgdXNlZCB0 byBpdC4uLgotKi8KLSNpZmRlZiBMRkRFVk5PCi0jaWZuZGVmIG1ham9yCQkJCS8qIElmIHdlIGRp ZG4ndCBmaW5kIGl0ICovCi0jaWZkZWYgU1ZSNAkJCQkvKiB0aGVuIGZvciBTeXMgViBSNCAqLwot I2luY2x1ZGUgPHN5cy9ta2Rldi5oPgkJCS8qIGxvb2sgaGVyZSAqLwotI2Vsc2UJCQkJCS8qIG9y IGZvciBTdW5PUyB2ZXJzaW9ucyAqLwotI2lmZGVmIFNVTk9TNAkJCQkvKiAuLi4gKi8KLSNpbmNs dWRlIDxzeXMvc3lzbWFjcm9zLmg+CQkvKiBsb29rIGhlcmUgKi8KLSNlbHNlCQkJCQkvKiBPdGhl cndpc2UgdGFrZSBhIGNoYW5jZTogKi8KLSNkZWZpbmUJbWFqb3IoZGV2KSAoIChpbnQpICggKCh1 bnNpZ25lZCkoZGV2KSA+PiA4KSAmIDB4ZmYpKQotI2RlZmluZQltaW5vcihkZXYpICggKGludCkg KCAoZGV2KSAmIDB4ZmYpKQotI2VuZGlmIC8qIFNVTk9TNCAqLwotI2VuZGlmIC8qIFNWUjQgKi8K LSNlbmRpZiAvKiBtYWpvciAqLwotI2VuZGlmIC8qIExGREVWTk8gKi8KLQotLyogTm8gYWR2aXNv cnkgbG9ja3MgaWYgRl9UTE9DSyBhbmQgRl9VTE9DSyBhcmUgbm90IGRlZmluZWQgYXQgdGhpcyBw b2ludCAqLwotCi0jaWZkZWYgTE9DS0YKLSNpZm5kZWYgRl9UTE9DSwotI3VuZGVmIExPQ0tGCi0j aWZuZGVmIE5PTE9DS0YKLSNkZWZpbmUgTk9MT0NLRgotI2VuZGlmIC8qIE5PTE9DS0YgKi8KLSNl bmRpZiAvKiBGX1RMT0NLICovCi0jZW5kaWYgLyogTE9DS0YgKi8KLQotI2lmZGVmIExPQ0tGCi0j aWZuZGVmIEZfVUxPQ0sKLSN1bmRlZiBMT0NLRgotI2lmbmRlZiBOT0xPQ0tGCi0jZGVmaW5lIE5P TE9DS0YKLSNlbmRpZiAvKiBOT0xPQ0tGICovCi0jZW5kaWYgLyogRl9VTE9DSyAqLwotI2VuZGlm IC8qIExPQ0tGICovCi0KLXN0YXRpYyBjaGFyIGxpbmt0b1tERVZOQU1MRU4rMV07Ci1zdGF0aWMg Y2hhciAqIGxpbmtkZXYgPSBOVUxMOwotCi0jaWZuZGVmIE5PVVVDUAotI2lmZGVmIFVTRVRUWUxP Q0sKLSNpZmRlZiBMT0NLX0RJUgotY2hhciAqIHV1Y3Bsb2NrZGlyID0gTE9DS19ESVI7Ci0jZWxz ZQotY2hhciAqIHV1Y3Bsb2NrZGlyID0gIiI7Ci0jZW5kaWYgLyogTE9DS19ESVIgKi8KLSNlbHNl Ci0jaWZkZWYgTE9DS19ESVIKLWNoYXIgKiB1dWNwbG9ja2RpciA9IExPQ0tfRElSOwotI2Vsc2UK LWNoYXIgKiB1dWNwbG9ja2RpciA9ICIiOwotI2VuZGlmIC8qIExPQ0tfRElSICovCi0jZW5kaWYg LyogVVNFVFRZTE9DSyAqLwotI2Vsc2UKLWNoYXIgKiB1dWNwbG9ja2RpciA9ICIiOwotI2VuZGlm IC8qIE5PVVVDUCAqLwotCi0jaWZkZWYgUU5YCQkJCS8qIE9ubHkgZm9yIFFOWDQgKi8KLWludAkJ CQkJLyogVmlzaWJsZSB0byBvdXRzaWRlIHdvcmxkICovCi1xbnhvcGVuY291bnQoKSB7CQkJLyog R2V0IFFOWCBkZXZpY2Ugb3BlbiBjb3VudCAqLwotICAgIHN0cnVjdCBfZGV2X2luZm9fZW50cnkg aW5mbzsKLSAgICBpbnQgeDsKLQotICAgIHggPSAtMTsJCQkJLyogVW5rbm93biAqLwotICAgIGlm ICh0dHlmZCA+IC0xKSB7Ci0JaWYgKCFkZXZfaW5mbyh0dHlmZCwgJmluZm8pKSB7Ci0JICAgIGRl YnVnKEYxMDEsInR0bG9jayBRTlggb3Blbl9jb3VudCIsIiIsaW5mby5vcGVuX2NvdW50KTsKLQkg ICAgeCA9IGluZm8ub3Blbl9jb3VudDsKLQl9Ci0gICAgfQotICAgIHJldHVybih4KTsKLX0KLSNl bmRpZiAvKiBRTlggKi8KLQotY2hhciAqCi10dGdsY2tkaXIoKSB7CQkJCS8qIEdldCBMb2NrZmls ZSBkaXJlY3RvcnkgbmFtZSAqLwotI2lmZGVmIF9fT3BlbkJTRF9fCi0gICAgcmV0dXJuKCIvdmFy L3Nwb29sL2xvY2siKTsKLSNlbHNlIC8qIF9fT3BlbkJTRF9fICovCi0jaWZkZWYgX19GcmVlQlNE X18KLSAgICByZXR1cm4oIi92YXIvc3Bvb2wvbG9jayIpOwotI2Vsc2UgIC8qIF9fRnJlZUJTRF9f ICovCi0jaWZkZWYgTE9DS19ESVIKLSAgICBjaGFyICogcyA9IExPQ0tfRElSOwotI2VuZGlmIC8q IExPQ0tfRElSICovCi0jaWZkZWYgTk9VVUNQCi0gICAgcmV0dXJuKCIiKTsKLSNlbHNlICAvKiBO T1VVQ1AgKi8KLSNpZmRlZiBMT0NLX0RJUgotICAgIHJldHVybihzKTsKLSNlbHNlICAvKiBMT0NL X0RJUiAqLwotICAgIHJldHVybigiIik7Ci0jZW5kaWYgLyogTE9DS19ESVIgKi8KLSNlbmRpZiAv KiBOT1VVQ1AgKi8KLSNlbmRpZiAvKiBfX0ZyZWVCU0RfXyAqLwotI2VuZGlmIC8qIF9fT3BlbkJT RF9fICovCi19Ci0KLXN0YXRpYyBpbnQKLXR0bG9jayh0dGRldikgY2hhciAqdHRkZXY7IHsKLQot ICAgIGludCB4LCBuOwotICAgIGludCBpc2xpbmsgPSAwOwotI2lmZGVmIF9fRnJlZUJTRF9fCi0g ICAgY2hhciAqZGV2bmFtZTsKLSNlbmRpZgkvKiBfX0ZyZWVCU0RfXyAqLwotCi0jaWZkZWYgTk9V VUNQCi0gICAgZGVidWcoRjEwMCwidHRsb2NrIE5PVVVDUCIsIiIsMCk7Ci0gICAgY2tzdHJuY3B5 KGZsZm5hbSwiTk9MT0NLIixGTEZOQU1MKTsKLSAgICBoYXNsb2NrID0gMTsKLSAgICByZXR1cm4o MCk7Ci0jZWxzZSAvKiAhTk9VVUNQICovCi0KLSNpZmRlZiBVU0VUVFlMT0NLCi0gICAgaGFzbG9j ayA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IGxvY2tlZCB5ZXQuICovCi0gICAg KmZsZm5hbSA9ICdcMCc7CQkJLyogTG9ja2ZpbGUgbmFtZSBpcyBlbXB0eS4gKi8KLSNpZmRlZiBf X0ZyZWVCU0RfXwotICAgIGlmICgoZGV2bmFtZSA9IHh4bGFzdCh0dGRldiwnLycpKSAhPSBOVUxM KQotI2lmZGVmIEZSRUVCU0Q4Ci0gICAgICBja3N0cm5jYXQobG9ja25hbWUsZGV2bmFtZSsxLERF Vk5BTUxFTi1ja3N0cm5jcHkobG9ja25hbWUsInB0cyIsNCkpOwotI2Vsc2UKLSAgICAgIGNrc3Ry bmNweShsb2NrbmFtZSxkZXZuYW1lKzEsREVWTkFNTEVOKTsKLSNlbmRpZgkvKiBGUkVFQlNEOCAq LwotI2Vsc2UKLSAgICBpZiAoIXN0cm5jbXAodHRkZXYsIi9kZXYvIiw1KSAmJiB0dGRldls1XSkK LSAgICAgIGNrc3RybmNweShsb2NrbmFtZSx0dGRldis1LERFVk5BTUxFTik7Ci0jZW5kaWYJLyog X19GcmVlQlNEX18gKi8KLSAgICBlbHNlCi0gICAgICBja3N0cm5jcHkobG9ja25hbWUsdHRkZXYs REVWTkFNTEVOKTsKLS8qCi0gIFRoaXMgbWlnaHQgYmUgb3ZlcmtpbGwsIGJ1dCBpdCdzIG5vdCBj bGVhciBmcm9tIHRoZSBtYW4gcGFnZXMgd2hldGhlcgotICB0dHlsb2NrKCkgY2FuIGJlIGNhbGxl ZCB3aXRob3V0IGNhbGxpbmcgdHR5bG9ja2VkKCkgZmlyc3QsIHNpbmNlIHRoZSBkb2MKLSAgc2F5 cyB0aGF0IHR0eWxvY2tlZCgpIHJlbW92ZXMgYW55IHN0YWxlIGxvY2tmaWxlcywgYnV0IGl0IGRv ZXMgbm90IHNheSB0aGlzCi0gIGFib3V0IHR0eWxvY2soKS4gIEFsc28gdGhlIGRvY3MgZG9uJ3Qg c2F5IHdoYXQgdHR5bG9ja2VkKCkgcmV0dXJucyBpbiB0aGUKLSAgY2FzZSB3aGVuIGl0IGZpbmRz IGFuZCByZW1vdmVzIGEgc3RhbGUgbG9ja2ZpbGUuICBTbyBvbmUgb3IgYm90aCBjYWxscyB0bwot ICB0byB0dHlsb2NrZWQoKSBtaWdodCBiZSBzdXBlcmZsdW91cywgYnV0IHRoZXkgc2hvdWxkIGRv IG5vIGhhcm0uICBBbHNvIEknbQotICBhc3N1bWluZyB0aGF0IHdlIGhhdmUgdG8gZG8gYWxsIHRo ZSBzYW1lIElEIHN3YXBwaW5nLCBldGMsIHdpdGggdGhlc2UKLSAgcm91dGluZXMgYXMgd2UgZG8g d2l0aG91dCB0aGVtLiAgVGh1cyB0aGUgcHJpdl9vbi9vZmYoKSBzYW5kd2ljaC4KLSovCi0jaWZk ZWYgVVNFX1VVX0xPQ0sKLSAgICBwcml2X29uKCk7CQkJCS8qIFR1cm4gb24gcHJpdnMgKi8KLSAg ICB4ID0gdXVfbG9jayhsb2NrbmFtZSk7CQkvKiBUcnkgdG8gc2V0IHRoZSBsb2NrICovCi0gICAg cHJpdl9vZmYoKTsJCQkJLyogVHVybiBwcml2cyBvZmYgKi8KLSAgICBkZWJ1ZyhGMTExLCJ0dGxv Y2sgdXVfbG9jayIsbG9ja25hbWUseCk7Ci0gICAgc3dpdGNoICh4KSB7Ci0gICAgICBjYXNlIFVV X0xPQ0tfSU5VU0U6Ci0JcmV0dXJuKC0yKTsKLSAgICAgIGNhc2UgVVVfTE9DS19PSzoKLSNpZmRl ZiBCU0Q0NAotCWNrbWFrbXNnKGZsZm5hbSxGTEZOQU1MLCIvdmFyL3Nwb29sL2xvY2svTENLLi4i LGxvY2tuYW1lLE5VTEwsTlVMTCk7Ci0jZW5kaWYgLyogQlNENDQgKi8KLQloYXNsb2NrID0gMTsK LQlyZXR1cm4oMCk7Ci0gICAgICBkZWZhdWx0OgotCXJldHVybigtMSk7Ci0gICAgfQotI2Vsc2Ug IC8qIFVTRV9VVV9MT0NLICovCi0gICAgcHJpdl9vbigpOwkJCQkvKiBUdXJuIG9uIHByaXZzICov Ci0gICAgaWYgKHR0eWxvY2tlZChsb2NrbmFtZSkpIHsJCS8qIFRoaXMgc2hvdWxkIHJlbW92ZSBh bnkgc3RhbGUgbG9jayAqLwotCWlmICh0dHlsb2NrZWQobG9ja25hbWUpKSB7CS8qIHNvIGNoZWNr IGFnYWluLiAqLwotCSAgICBwcml2X29mZigpOwotCSAgICByZXR1cm4oLTUpOwkJCS8qIFN0aWxs IGxvY2tlZCwgZmFpbC4gKi8KLQl9Ci0gICAgfQotICAgIHggPSB0dHlsb2NrKGxvY2tuYW1lKTsJ CS8qIExvY2sgaXQuICovCi0gICAgcHJpdl9vZmYoKTsJCQkJLyogVHVybiBvZmYgcHJpdnMgKi8K LQotICAgIGRlYnVnKEYxMTEsInR0bG9jayBsb2NrbmFtZSIsbG9ja25hbWUseCk7Ci0gICAgaWYg KHggPiAtMSkgewotCS8qCi0JICBXZSBkb24ndCByZWFsbHkga25vdyB0aGUgbmFtZSBvZiB0aGUg bG9ja2ZpbGUsIGJ1dAotCSAgdGhpcyBpcyB3aGF0IHRoZSBtYW4gcGFnZSBzYXlzIGl0IGlzLiAg SW4gVVNFVFRZTE9DSwotICAgICAgICAgIGJ1aWxkcywgaXQgaXMgdXNlZCBvbmx5IGZvciBkaXNw bGF5IGJ5IFNIT1cgQ09NTS4KLQkqLwotCWNrbWFrbXNnKGZsZm5hbSxGTEZOQU1MLCIvZXRjL2xv Y2tzL0xDSy4uIixsb2NrbmFtZSxOVUxMLE5VTEwpOwotCWhhc2xvY2sgPSAxOwotICAgIH0KLSAg ICByZXR1cm4oeCk7Ci0jZW5kaWYgLyogVVNFX1VVX0xPQ0sgKi8KLSNlbHNlICAvKiBTeXN0ZW1z IHRoYXQgZG9uJ3QgaGF2ZSB0dHlsb2NrKCkuLi4gKi8KLQotI2lmbmRlZiBIUFVYCi0KLSAgICBp bnQgbG9ja2ZkOwkJCQkvKiBGaWxlIGRlc2NyaXB0b3IgZm9yIGxvY2sgZmlsZS4gKi8KLSAgICBQ SURfVCBwaWQ7CQkJCS8qIFByb2Nlc3MgaWQgb2YgdGhpcyBwcm9jZXNzLiAqLwotICAgIGludCB0 cmllczsJCQkJLyogSG93IG1hbnkgdGltZXMgd2UndmUgdHJpZWQuLi4gKi8KLSAgICBzdHJ1Y3Qg c3RhdCBkZXZidWY7CQkJLyogRm9yIGRldmljZSBudW1iZXJzIChTVlI0KS4gKi8KLQotI2lmZGVm IFBJRFNUUklORwotICAgIGNoYXIgcGlkX3N0clszMl07CQkJLyogTXkgcGlkIGluIHN0cmluZyBm b3JtYXQuICovCi0jZW5kaWYgLyogUElEU1RSSU5HICovCi0KLSAgICBjaGFyICpkZXZpY2UsICpk ZXZuYW1lOwotCi0jZGVmaW5lIExGTkFNTCAyNTYJCQkvKiBNYXggbGVuZ3RoIGZvciBsb2NrIGZp bGUgbmFtZS4gKi8KLSAgICBjaGFyIGxvY2tmaWxbTEZOQU1MXTsJCS8qIExvY2sgZmlsZSBuYW1l ICovCi0jaWZkZWYgUlRBSVgKLSAgICBjaGFyIGxrbG9ja2ZbTEZOQU1MXTsJCS8qIE5hbWUgZm9y IGxpbmsgdG8gbG9jayBmaWxlICAqLwotI2VuZGlmIC8qIFJUQUlYICovCi0jaWZkZWYgQ0tTWU1M SU5LCi0gICAgY2hhciBzeW1sb2NrW0xGTkFNTF07CQkvKiBOYW1lIGZvciBzeW1saW5rIGxvY2tm aWxlIG5hbWUgKi8KLSNlbmRpZiAvKiBDS1NZTUxJTksgKi8KLSAgICBjaGFyIHRtcG5hbVtMRk5B TUwrMzBdOwkJLyogVGVtcG9yYXJ5IGxvY2tmaWxlIG5hbWUuICovCi0gICAgY2hhciAqbG9ja2Rp ciA9IExPQ0tfRElSOwkJLyogRGVmaW5lZCBuZWFyIHRvcCBvZiB0aGlzIGZpbGUsICovCi0JCQkJ CS8qIG9yIG9uIGNjIGNvbW1hbmQgbGluZS4gKi8KLSAgICBoYXNsb2NrID0gMDsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBOb3QgbG9ja2VkIHlldC4gKi8KLSAgICAqZmxmbmFtID0gJ1wwJzsJ CQkvKiBMb2NrZmlsZSBuYW1lIGlzIGVtcHR5LiAqLwotICAgIGxvY2syWzBdID0gJ1wwJzsJCQkv KiBDbGVhciBzZWNvbmRhcnkgbG9ja2ZpbGUgbmFtZS4gKi8KLSAgICBwaWQgPSBnZXRwaWQoKTsJ CQkvKiBHZXQgaWQgb2YgdGhpcyBwcm9jZXNzLiAqLwotCi0vKiAgQ29uc3RydWN0IG5hbWUgb2Yg bG9ja2ZpbGUgYW5kIHRlbXBvcmFyeSBmaWxlICovCi0KLS8qICBkZXZpY2UgID0gbmFtZSBvZiB0 dHkgZGV2aWNlIHdpdGhvdXQgdGhlIHBhdGgsIGUuZy4gInR0eWg4IiAqLwotLyogIGxvY2tmaWwg PSBuYW1lIG9mIGxvY2sgZmlsZSwgd2l0aG91dCBwYXRoLCBlLmcuICJMQ0suLnR0eWg4IiAqLwot Ci0gICAgZGV2aWNlID0gKChkZXZuYW1lID0geHhsYXN0KHR0ZGV2LCcvJykpICE9IE5VTEwgPyBk ZXZuYW1lKzEgOiB0dGRldik7Ci0KLSAgICBpZiAoc3RhdCh0dGRldiwmZGV2YnVmKSA8IDApCi0g ICAgICByZXR1cm4oLTEpOwotCi0jaWZkZWYgQ0tTWU1MSU5LCi0gICAgaXNsaW5rID0gMTsJCQkJ LyogQXNzdW1lIGl0J3MgYSBzeW1saW5rICovCi0gICAgbGlua3RvWzBdID0gJ1wwJzsJCQkvKiBC dXQgd2UgZG9uJ3Qga25vdyB0byB3aGF0ICovCi0jaWZkZWYgQ09NTUVOVAotLyoKLSAgVGhpcyBp cyB1bmRlcGVuZGFibGUuICBJZiBpdCB3b3JrZWQgaXQgd291bGQgc2F2ZSB0aGUgcmVhZGxpbmsg Y2FsbCBpZgotICB3ZSBrbmV3IHRoZSBkZXZpY2UgbmFtZSB3YXMgbm90IGEgbGluay4KLSovCi0j aWZkZWYgU19JU0xOSwotICAgIGlzbGluayA9IFNfSVNMTksoZGV2YnVmLnN0X21vZGUpOwotICAg IGRlYnVnKEYxMDEsInR0bG9jayBzdGF0IFNfSVNMTksiLCIiLGlzbGluayk7Ci0jZW5kaWYgLyog U19JU0xOSyAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICBpZiAoaXNsaW5rKSB7Ci0JbiA9 IHJlYWRsaW5rKHR0ZGV2LGxpbmt0byxERVZOQU1MRU4pOyAvKiBTZWUgaWYgaXQncyBhIGxpbmsg Ki8KLQlkZWJ1ZyhGMTExLCJ0dGxvY2sgcmVhZGxpbmsiLHR0ZGV2LG4pOwotCWlmIChuID4gLTEp CQkJLyogSXQgaXMgKi8KLQkgIGxpbmt0b1tuXSA9ICdcMCc7Ci0JZWxzZQkJCQkvKiBJdCdzIG5v dCAqLwotCSAgaXNsaW5rID0gMDsKLQlkZWJ1ZyhGMTExLCJ0dGxvY2sgbGluayIsbGlua3RvLGlz bGluayk7Ci0gICAgfQotICAgIGlmIChpc2xpbmspIHsKLQlsaW5rZGV2ID0gKGRldm5hbWUgPSB4 eGxhc3QobGlua3RvLCcvJykpID8gZGV2bmFtZSArIDEgOiBsaW5rdG87Ci0JZGVidWcoRjExMCwi dHRsb2NrIGxpbmtkZXYiLGxpbmtkZXYsMCk7Ci0gICAgfQotI2VuZGlmIC8qIENLU1lNTElOSyAq LwotCi0vKgotICBPbiBTQ08gcGxhdGZvcm1zLCBpZiB3ZSBkb24ndCBoYXZlIGEgc3ltbGluaywg dGhlbiBsZXQncyBwcmV0ZW5kIHRoZQotICBuYW1lIGdpdmVuIGZvciB0aGUgZGV2aWNlIGlzIGEg c3ltbGluaywgYmVjYXVzZSBsYXRlciB3ZSB3aWxsIGNoYW5nZQotICB0aGUgbmFtZSBpZiBpdCBj b250YWlucyBhbnkgdXBwZXJjYXNlIGNoYXJhY3RlcnMuCi0qLwotI2lmZGVmIENLX1NDT1Y1CQkJ CS8qIFNDTyBPcGVuIFNlcnZlciA1LjAgKi8KLSAgICBpZiAoIWlzbGluaykgewotCWlzbGluayA9 IDE7Ci0JY2tzdHJuY3B5KGxpbmt0byx0dGRldixERVZOQU1MRU4pOwotCWxpbmtkZXYgPSAoZGV2 bmFtZSA9IHh4bGFzdChsaW5rdG8sJy8nKSkgPyBkZXZuYW1lICsgMSA6IGxpbmt0bzsKLQlkZWJ1 ZyhGMTEwLCJ0dGxvY2sgbGlua2RldiIsbGlua2RldiwwKTsKLSAgICB9Ci0jZWxzZQotI2lmZGVm IE1fWEVOSVgJCQkJLyogU0NPIFhlbml4IG9yIFVOSVggKi8KLSAgICBpZiAoIWlzbGluaykgewot CWlzbGluayA9IDE7Ci0JY2tzdHJuY3B5KGxpbmt0byx0dGRldixERVZOQU1MRU4pOwotCWxpbmtk ZXYgPSAoZGV2bmFtZSA9IHh4bGFzdChsaW5rdG8sJy8nKSkgPyBkZXZuYW1lICsgMSA6IGxpbmt0 bzsKLQlkZWJ1ZyhGMTEwLCJ0dGxvY2sgbGlua2RldiIsbGlua2RldiwwKTsKLSAgICB9Ci0jZW5k aWYgLyogTV9YRU5JWCAqLwotI2VuZGlmIC8qIENLX1NDT1Y1ICovCi0KLSNpZmRlZiBJU0lJSQkJ CQkvKiBJbnRlcmFjdGl2ZSBTeXN0ZW0gSUlJLCBQQy9JWCAqLwotICAgIGNrc3RybmNweShsb2Nr ZmlsLCBkZXZpY2UsIERFVk5BTUxFTik7Ci0jZWxzZSAgLyogbm90IElTSUlJICovCi0jaWZkZWYg TEZERVZOTwkJCQkvKiBMb2NrZmlsZW5hbWUgaGFzIGRldmljZSBudW1iZXJzLiAqLwotI2lmZGVm IENPSEVSRU5UCi0gICAgc3ByaW50Zihsb2NrZmlsLCJMQ0suLiVkLiVkIiwJLyogU0FGRSAqLwot CSAgICBtYWpvcihkZXZidWYuc3RfcmRldiksCSAgIC8qIG1ham9yIGRldmljZSBudW1iZXIgKi8K LQkgICAgMHgxZiAmIG1pbm9yKGRldmJ1Zi5zdF9yZGV2KSk7IC8qIG1pbm9yIGRldmljZSBudW1i ZXIgKi8KLSNlbHNlCi0gICAgLyogTm90ZTogJWQgY2hhbmdlZCB0byAldSBpbiA4LjAgLS0gJXUg aXMgcGFydCBvZiBTVklEIGZvciBTVlI0ICovCi0gICAgLyogTG9ja2ZpbGUgbmFtZSBmb3JtYXQg dmVyaWZpZWQgdG8gYWdyZWUgd2l0aCBTb2xhcmlzIGN1LCBEZWMgMjAwMSAqLwotICAgIHNwcmlu dGYobG9ja2ZpbCwiTEsuJTAzdS4lMDN1LiUwM3UiLCAvKiBTQUZFICovCi0JICAgIG1ham9yKGRl dmJ1Zi5zdF9kZXYpLAkvKiBkZXZpY2UgKi8KLQkgICAgbWFqb3IoZGV2YnVmLnN0X3JkZXYpLAkv KiBtYWpvciBkZXZpY2UgbnVtYmVyICovCi0JICAgIG1pbm9yKGRldmJ1Zi5zdF9yZGV2KSk7CS8q IG1pbm9yIGRldmljZSBudW1iZXIgKi8KLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotI2Vsc2UgIC8q IE5vdCBMRkRFVk5PICovCi0jaWZkZWYgUFRYCQkJCS8qIER5bml4IFBUWCAqLwotICAgIGlmICgo ZGV2aWNlICE9ICZ0dGRldls1XSkgJiYgKHN0cm5jbXAodHRkZXYsIi9kZXYvIiw1KSA9PSAwKSkg ewotCWlmICgoaW50KXN0cmxlbihkZXZpY2UpICsgOCA8IExGTkFNTCkKLQkgIHNwcmludGYobG9j a2ZpbCwiTENLLi4lLjNzJXMiLCAmdHRkZXZbNV0sIGRldmljZSk7Ci0JZWxzZQotCSAgY2tzdHJu Y3B5KGxvY2tmaWwsIkxPQ0tGSUxFX05BTUVfVE9PX0xPTkciLExGTkFNTCk7Ci0gICAgfSBlbHNl Ci0jZW5kaWYgLyogUFRYICovCi0gICAgICBpZiAoKGludClzdHJsZW4oZGV2aWNlKSArIDUgPCBM Rk5BTUwpCi0Jc3ByaW50Zihsb2NrZmlsLCJMQ0suLiVzIiwgZGV2aWNlKTsKLSAgICAgIGVsc2UK LQlja3N0cm5jcHkobG9ja2ZpbCwiTE9DS0ZJTEVfTkFNRV9UT09fTE9ORyIsTEZOQU1MKTsKLSNp ZmRlZiBSVEFJWAotICAgIGNrc3RybmNweShsa2xvY2tmLGRldmljZSxERVZOQU1MRU4pOwotI2Vu ZGlmIC8qIFJUQUlYICovCi0jaWZkZWYgQ0tTWU1MSU5LCi0gICAgc3ltbG9ja1swXSA9ICdcMCc7 Ci0gICAgaWYgKGlzbGluaykKLSAgICAgIGNrbWFrbXNnKHN5bWxvY2ssTEZOQU1MLCAiTENLLi4i LCBsaW5rZGV2LCBOVUxMLCBOVUxMKTsKLSNlbmRpZiAvKiBDS1NZTUxJTksgKi8KLSNlbmRpZiAv KiBMRkRFVk5PICovCi0jZW5kaWYgLyogSVNJSUkgKi8KLQotI2lmZGVmIENLX1NDT1Y1CQkJCS8q IFNDTyBPcGVuIFNlcnZlciA1LjAgKi8KLSAgICB7Ci0JLyogTG93ZXJjYXNlIHRoZSBlbnRpcmUg ZmlsZW5hbWUuICovCi0gICAgICAgIC8qIFNDTyBzYXlzIHdlIG11c3QgZG8gdGhpcyBpbiBWNS4w IGFuZCBsYXRlci4gKi8KLQkvKiBCVVQuLi4gd2F0Y2ggb3V0IGZvciBkZXZpY2VzIC0tIGxpa2Ug RGlnaWJvYXJkIFBvcnRzZXJ2ZXIgKi8KLQkvKiBUaGF0IGNhbiBoYXZlIGh1bmRyZWRzIG9mIHBv cnRzLi4uICovCi0JY2hhciAqcCA9IChjaGFyICopKGxvY2tmaWwgKyA1KTsKLQl3aGlsZSAoKnAp IHsgaWYgKGlzdXBwZXIoKnApKSAqcCA9IChjaGFyKSB0b2xvd2VyKCpwKTsgcCsrOyB9Ci0gICAg fQotI2lmZGVmIENLU1lNTElOSwotICAgIGlmIChpc2xpbmspIHsJCQkvKiBJZiBubyBjaGFuZ2Ug Ki8KLQlpZiAoIXN0cmNtcChsb2NrZmlsLHN5bWxvY2spKSB7CS8qIHRoZW4gbm8gc2Vjb25kIGxv Y2tmaWxlIG5lZWRlZCAqLwotCSAgICBpc2xpbmsgPSAwOwotCSAgICBzeW1sb2NrWzBdID0gJ1ww JzsKLQl9Ci0gICAgfQotI2VuZGlmIC8qIENLU1lNTElOSyAqLwotI2Vsc2UKLSNpZmRlZiBNX1hF TklYCQkJCS8qIFNDTyBYZW5peCBvciBVTklYICovCi0gICAgewotCWludCB4OyBjaGFyIGM7Ci0J eCA9IChpbnQpc3RybGVuKGxvY2tmaWwpIC0gMTsJLyogR2V0IGxhc3QgbGV0dGVyIG9mIGRldmlj ZSBuYW1lLiAqLwotCWlmICh4ID4gMCkgewkJCS8qIElmIGl0J3MgdXBwZXJjYXNlLCBsb3dlciBp dC4gKi8KLQkgICAgYyA9IGxvY2tmaWxbeF07Ci0JICAgIGlmIChjID49ICdBJyAmJiBjIDw9ICda JykgbG9ja2ZpbFt4XSArPSAoJ2EnIC0gJ0EnKTsKLQl9Ci0gICAgfQotI2lmZGVmIENLU1lNTElO SwotICAgIGlmIChpc2xpbmspIHsKLQlpZiAoIXN0cmNtcChsb2NrZmlsLHN5bWxvY2spKSB7CS8q IE5vIGNoYW5nZSAqLwotCSAgICBpc2xpbmsgPSAwOwkJCS8qIHNvIG5vIHNlY29uZCBsb2NrZmls ZSAqLwotCSAgICBzeW1sb2NrWzBdID0gJ1wwJzsKLQl9Ci0gICAgfQotI2VuZGlmIC8qIENLU1lN TElOSyAqLwotI2VuZGlmIC8qIE1fWEVOSVggKi8KLSNlbmRpZiAvKiBDS19TQ09WNSAqLwotCi0v KiAgZmxmbmFtID0gZnVsbCBsb2NrZmlsZSBwYXRobmFtZSwgZS5nLiAiL3Vzci9zcG9vbC91dWNw L0xDSy4udHR5aDgiICovCi0vKiAgdG1wbmFtID0gdGVtcG9yYXJ5IHVuaXF1ZSwgZS5nLiAiL3Vz ci9zcG9vbC91dWNwL0xUTVAuLnBpZCIgKi8KLQotICAgIGNrbWFrbXNnKGZsZm5hbSxMRk5BTUws bG9ja2RpciwiLyIsbG9ja2ZpbCxOVUxMKTsKLQotI2lmZGVmIFJUQUlYCi0gICAgY2ttYWttc2co bGtmbGZuLEZMRk5BTUwsbG9ja2RpciwiLyIsbGtsb2NrZixOVUxMKTsKLSNlbmRpZiAvKiBSVEFJ WCAqLwotCi0jaWZuZGVmIExGREVWTk8KLSNpZmRlZiBDS1NZTUxJTksKLSAgICAvKiBJZiBpdCdz IGEgbGluayB0aGVuIGFsc28gbWFrZSBhIGxvY2tmaWxlIGZvciB0aGUgcmVhbCBuYW1lICovCi0g ICAgZGVidWcoRjExMSwidHRsb2NrIGxpbmsgc3ltbG9jayIsc3ltbG9jayxpc2xpbmspOwotICAg IGlmIChpc2xpbmsgJiYgc3ltbG9ja1swXSkgewotCS8qIEJ1dCBvbmx5IGlmIHRoZSBsb2NrZmls ZSBuYW1lcyB3b3VsZCBiZSBkaWZmZXJlbnQuICovCi0JLyogV0FSTklORzogVGhleSB3b24ndCBi ZSwgZS5nLiBmb3IgL2Rldi90dHlkMiA9PiAvaHcvdHR5cy90dHlkMiAqLwotCWNrbWFrbXNnKGxv Y2syLEZMRk5BTUwsbG9ja2RpciwiLyIsc3ltbG9jayxOVUxMKTsKLQlkZWJ1ZyhGMTEwLCJ0dGxv Y2sgbG9jazIiLGxvY2syLDApOwotCWlmICghc3RyY21wKGxvY2syLGZsZm5hbSkpIHsJLyogQXJl IGxvY2tmaWxlIG5hbWVzIHRoZSBzYW1lPyAqLwotCSAgICBkZWJ1ZyhGMTAwLCJ0dGxvY2sgbG9j azIgY2xlYXJlZCIsIiIsMCk7Ci0JICAgIGxvY2syWzBdID0gJ1wwJzsJCS8qIENsZWFyIHNlY29u ZGFyeSBsb2NrZmlsZSBuYW1lLiAqLwotCX0KLSAgICB9Ci0jZW5kaWYgLyogQ0tTWU1MSU5LICov Ci0jZW5kaWYgLyogTEZERVZOTyAqLwotCi0gICAgc3ByaW50Zih0bXBuYW0sIiVzL0xUTVAuJTA1 ZCIsbG9ja2RpciwoaW50KSBwaWQpOyAvKiBzYWZlICovCi0gICAgZGVidWcoRjExMCwidHRsb2Nr IGZsZm5hbSIsZmxmbmFtLDApOwotICAgIGRlYnVnKEYxMTAsInR0bG9jayB0bXBuYW0iLHRtcG5h bSwwKTsKLQotICAgIHByaXZfb24oKTsJCQkJLyogVHVybiBvbiBwcml2aWxlZ2VzIGlmIHBvc3Np YmxlLiAqLwotICAgIGxvY2tmZCA9IGNyZWF0KHRtcG5hbSwgMDQ0NCk7CS8qIFRyeSB0byBjcmVh dGUgdGVtcCBsb2NrIGZpbGUuICovCi0gICAgaWYgKGxvY2tmZCA8IDApIHsJCQkvKiBDcmVhdGUg ZmFpbGVkLiAqLwotCWRlYnVnKEYxMTEsInR0bG9jayBjcmVhdCBmYWlsZWQiLHRtcG5hbSxlcnJu byk7Ci0JaWYgKGVycm5vID09IEVOT0VOVCkgewotCSAgICBwZXJyb3IobG9ja2Rpcik7Ci0JICAg IHByaW50ZigiVVVDUCBub3QgaW5zdGFsbGVkIG9yIEtlcm1pdCBtaXNjb25maWd1cmVkXG4iKTsK LQl9IGVsc2UgewotCSAgICBpZiAoIXF1aWV0KQotCSAgICAgIHBlcnJvcihsb2NrZGlyKTsKLQkg ICAgdW5saW5rKHRtcG5hbSk7CQkvKiBHZXQgcmlkIG9mIHRoZSB0ZW1wb3JhcnkgZmlsZS4gKi8K LQl9Ci0JcHJpdl9vZmYoKTsJCQkvKiBUdXJuIG9mZiBwcml2aWxlZ2VzISEhICovCi0JcmV0dXJu KC0xKTsJCQkvKiBSZXR1cm4gZmFpbHVyZSBjb2RlLiAqLwotICAgIH0KLS8qIE5vdyB3cml0ZSB0 aGUgcGlkIGludG8gdGhlIHRlbXAgbG9ja2ZpbGUgaW4gdGhlIGFwcHJvcHJpYXRlIGZvcm1hdCAq LwotCi0jaWZkZWYgUElEU1RSSU5HCQkJLyogRm9yIEhvbmV5IERhbkJlciBVVUNQLCAqLwotICAg IHNwcmludGYoCQkJCS8qIHdyaXRlIFBJRCBhcyBkZWNpbWFsIHN0cmluZyAqLwotCSAgICBwaWRf c3RyLAotI2lmZGVmIExJTlVYRlNTVE5ECQkJLyogVGhlICJMaW51eCBGaWxlIFN5c3RlbSBTdGFu ZGFyZCIgKi8KLSNpZmRlZiBGU1NUTkQxMAkJCQkvKiBWZXJzaW9uIDEuMCBjYWxscyBmb3IgKi8K LQkgICAgIiUwMTBkXG4iLAkJCS8qIGxlYWRpbmcgemVyb3MgKi8KLSNlbHNlCQkJCQkvKiB3aGls ZSB2ZXJzaW9uIDEuMiBjYWxscyBmb3IgKi8KLQkgICAgIiUxMGRcbiIsCQkJLyogbGVhZGluZyBz cGFjZXMgKi8KLSNlbmRpZiAvKiBGU1NUTkQxMCAqLwotI2Vsc2UKLSNpZmRlZiBDT0hFUkVOVAot CSAgICAiJWRcbiIsCQkJLyogd2l0aCBsZWFkaW5nIG5vdGhpbmcgKi8KLSNlbHNlCi0JICAgICIl MTBkXG4iLAkJCS8qIHdpdGggbGVhZGluZyBibGFua3MgKi8KLSNlbmRpZiAvKiBDT0hFUkVOVCAq LwotI2VuZGlmIC8qIExJTlVYRlNTVE5EICovCi0JICAgIChpbnQpIHBpZAotCSAgICApOwkJCQkv KiBzYWZlICovCi0gICAgd3JpdGUobG9ja2ZkLCBwaWRfc3RyLCAxMSk7Ci0gICAgZGVidWcoRjEx MSwidHRsb2NrIGhkYiBwaWQgc3RyaW5nIixwaWRfc3RyLChpbnQpIHBpZCk7Ci0KLSNlbHNlIC8q IE5vdCBQSURTVFJJTkcsIHVzZSBpbnRlZ2VyIFBJRCAqLwotCi0gICAgd3JpdGUobG9ja2ZkLCAo Y2hhciAqKSZwaWQsIHNpemVvZihwaWQpICk7Ci0gICAgZGVidWcoRjEwMSwidHRsb2NrIHBpZCIs IiIsKGludCkgcGlkKTsKLQotI2VuZGlmIC8qIFBJRFNUUklORyAqLwotCi0vKiBOb3cgdHJ5IHRv IHJlbmFtZSB0aGUgdGVtcCBmaWxlIHRvIHRoZSByZWFsIGxvY2sgZmlsZSBuYW1lLiAqLwotLyog VGhpcyB3aWxsIGZhaWwgaWYgYSBsb2NrIGZpbGUgb2YgdGhhdCBuYW1lIGFscmVhZHkgZXhpc3Rz LiAgKi8KLQotICAgIGNsb3NlKGxvY2tmZCk7CQkJLyogQ2xvc2UgdGhlIHRlbXAgbG9ja2ZpbGUu ICovCi0gICAgY2htb2QodG1wbmFtLDA0NDQpOwkJCS8qIFBlcm1pc3Npb24gZm9yIGEgdmFsaWQg bG9jay4gKi8KLSAgICB0cmllcyA9IDA7Ci0gICAgd2hpbGUgKCFoYXNsb2NrICYmIHRyaWVzKysg PCAyKSB7Ci0JaGFzbG9jayA9IChsaW5rKHRtcG5hbSxmbGZuYW0pID09IDApOyAvKiBDcmVhdGUg YSBsaW5rIHRvIGl0LiAqLwotCWlmIChoYXNsb2NrKSB7CQkJICAgICAgLyogSWYgd2UgZ290IHRo ZSBsb2NrZmlsZSAqLwotI2lmZGVmIFJUQUlYCi0JICAgIGxpbmsoZmxmbmFtLGxrZmxmbik7Ci0j ZW5kaWYgLyogUlRBSVggKi8KLSNpZmRlZiBDS1NZTUxJTksKLSNpZm5kZWYgTEZERVZOTwotCSAg ICBpZiAoaXNsaW5rICYmIGxvY2syWzBdKQotCSAgICAgIGxpbmsoZmxmbmFtLGxvY2syKTsKLSNl bmRpZiAvKiBMRkRFVk5PICovCi0jZW5kaWYgLyogQ0tTWU1MSU5LICovCi0KLSNpZmRlZiBDT01N RU5UCi0vKiBDYW4ndCBkbyB0aGlzIGFueSBtb3JlIGJlY2F1c2UgZGV2aWNlIGlzIG5vdCBvcGVu IHlldCBzbyBubyB0dHlmZC4gKi8KLSNpZmRlZiBMT0NLRgotLyoKLSAgQWR2aXNvcnkgZmlsZSBs b2NraW5nIHdvcmtzIG9uIFNWUjQsIHNvIHdlIHVzZSBpdC4gIEluIGZhY3QsIGl0IGlzCi0gIG5l Y2Vzc2FyeSBpbiBzb21lIGNhc2VzLCBlLmcuIHdoZW4gU0xJUCBpcyBpbnZvbHZlZC4gIEJ1dCBp dCBzdGlsbCBkb2Vzbid0Ci0gIHNlZW0gdG8gcHJldmVudCBtdWx0aXBsZSB1c2VycyBhY2Nlc3Np bmcgdGhlIHNhbWUgZGV2aWNlIGJ5IGRpZmZlcmVudCBuYW1lcy4KLSovCi0gICAgICAgICAgICB3 aGlsZSAobG9ja2YodHR5ZmQsIEZfVExPQ0ssIDBMKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAg ZGVidWcoRjExMSwgInR0bG9jayBsb2NrZiByZXR1cm5zIGVycm5vIiwgIiIsIGVycm5vKTsKLSAg ICAgICAgICAgICAgICBpZiAoKCsrdHJpZXMgPj0gMykgfHwgKGVycm5vICE9IEVBR0FJTikpIHsK LSAgICAgICAgICAgICAgICAgICAgeCA9IHVubGluayhmbGZuYW0pOyAvKiByZW1vdmUgdGhlIGxv Y2tmaWxlICovCi0jaWZkZWYgUlRBSVgKLQkJICAgIHVubGluayhsa2ZsZm4pOwkvKiBBbmQgYW55 IGxpbmtzIHRvIGl0Li4uICovCi0jZW5kaWYgLyogUlRBSVggKi8KLSNpZmRlZiBDS1NZTUxJTksK LSNpZm5kZWYgTEZERVZOTwotCQkgICAgaWYgKGlzbGluayAmJiBsb2NrMlswXSkKLQkJICAgICAg dW5saW5rKGxvY2syKTsJLyogZGl0dG8uLi4gKi8KLSNlbmRpZiAvKiBMRkRFVk5PICovCi0jZW5k aWYgLyogQ0tTWU1MSU5LICovCi0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsInR0bG9j ayB1bmxpbmsiLGZsZm5hbSx4KTsKLSAgICAgICAgICAgICAgICAgICAgaGFzbG9jayA9IDA7Ci0J CSAgICBicmVhazsKLQkJfQotICAgICAgICAgICAgICAgIHNsZWVwKDIpOwotCSAgICB9Ci0JICAg IGlmIChoYXNsb2NrKQkJLyogSWYgd2UgZ290IGFuIGFkdmlzb3J5IGxvY2sgKi8KLSNlbmRpZiAv KiBMT0NLRiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkgICAgICBicmVhazsJCQkvKiBXZSdy ZSBkb25lLiAqLwotCi0JfSBlbHNlIHsJCQkvKiBXZSBkaWRuJ3QgY3JlYXRlIGEgbmV3IGxvY2tm aWxlLiAqLwotCSAgICBwcml2X29mZigpOwotCSAgICBpZiAodHRjaGtwaWQoZmxmbmFtKSkgewkv KiBDaGVjayBleGlzdGluZyBsb2NrZmlsZSAqLwotCQlwcml2X29uKCk7CQkvKiBjYXVzZSB0dGNo a3BpZCB0dXJucyBwcml2X29mZi4uLiAqLwotCQl1bmxpbmsodG1wbmFtKTsJCS8qIERlbGV0ZSB0 aGUgdGVtcGZpbGUgKi8KLQkJZGVidWcoRjEwMCwidHRsb2NrIGZvdW5kIHR0eSBsb2NrZWQiLCIi LDApOwotCQlwcml2X29mZigpOwkJLyogVHVybiBvZmYgcHJpdnMgKi8KLQkJcmV0dXJuKC0yKTsJ CS8qIENvZGUgZm9yIGRldmljZSBpcyBpbiB1c2UuICovCi0JICAgIH0KLQkgICAgcHJpdl9vbigp OwotCX0KLSAgICB9Ci0gICAgdW5saW5rKHRtcG5hbSk7CQkJLyogVW5saW5rIChyZW1vdmUpIHRo ZSB0ZW1wIGZpbGUuICovCi0gICAgcHJpdl9vZmYoKTsJCQkJLyogVHVybiBvZmYgcHJpdnMgKi8K LSAgICByZXR1cm4oaGFzbG9jayA/IDAgOiAtMSk7CQkvKiBSZXR1cm4gbGluaydzIHJldHVybiBj b2RlLiAqLwotCi0jZWxzZSAvKiBIUFVYICovCi0KLS8qCi0gIEhQLVVYIGdldHMgaXRzIG93biBj b3B5IG9mIHRoaXMgcm91dGluZSwgbW9kZWxlZCBhZnRlciB0aGUgb2JzZXJ2ZWQgYmVoYXZpb3IK LSAgb2YgdGhlIEhQLVVYICdjdScgcHJvZ3JhbS4gIEhQLVVYIHNlcmlhbCBkZXZpY2UgbmFtZXMg Y29uc2lzdCBvZiBhIGJhc2UgbmFtZQotICBzdWNoIGFzICJ0dHkiLCAidHR5ZCIsICJjdWEiLCAi Y3VsIiwgImN1YWQiLCBvciAiY3VsZCIsIGZvbGxvd2VkIGJ5IGEgdW5pdAotICBkZXNpZ25hdG9y IHdoaWNoIGlzIGEgc3RyaW5nIG9mIGRpZ2l0cywgcG9zc2libHkgY29udGFpbmluZyBhbiBpbWJl ZGRlZAotICBsZXR0ZXIgInAiLiAgRXhhbXBsZXMgKGZvciBiYXNlIG5hbWUgInR0eSIpOgotCi0g ICAgIC9kZXYvdHR5MCwgL2Rldi90dHkwMCwgZGV2L3R0eWQwMCwgL2Rldi90dHkwcDAKLQotICBB Y2NvcmRpbmcgdG8gdGhlIEhQLVVYIFVVQ1AgbWFudWFsIG9mIDE5ODgsIHRoZSAiMHAwIiBub3Rh dGlvbiBoYXMgYmVlbgotICB1c2VkIG9uIFNlcmllcyA4MDAgc2luY2UgSFAtVVggMi4wMCwgYW5k IHRoZSAibm9uLXAiIG5vdGF0aW9uIHdhcyB1c2VkCi0gIG9uIG90aGVyIG1vZGVscy4gIEluIEhQ LVVYIDEwLjAwLCAiMHAwIiBub3RhdGlvbiB3YXMgYWRvcHRlZCBmb3IgYWxsIG1vZGVscy4KLSAg SG93ZXZlciwgd2UgbWFrZSBhbmQgZW5mb3JjZSBubyBzdWNoIGRpc3RpbmN0aW9uczsgZWl0aGVy IG5vdGF0aW9uIGlzCi0gIGFjY2VwdGVkIG9uIGFueSBtb2RlbCBvciBIUC1VWCB2ZXJzaW9uIGFz IGEgdmFsaWQgdW5pdCBkZXNpZ25hdG9yLgotCi0gIElmIGEgdmFsaWQgdW5pdCBpcyBzcGVjaWZp ZWQgKGFzIG9wcG9zZWQgdG8gYSBkZXNpZ25lciBuYW1lIG9yIHN5bWxpbmspLCB3ZQotICBjaGVj ayBmb3IgYWxsIGFsaWFzZXMgb2YgdGhlIGdpdmVuIHVuaXQgYWNjb3JkaW5nIHRvIHRoZSBkZXZw cmVmaXhbXSBhcnJheS4KLSAgSWYgbm8gbG9ja2ZpbGVzIGFyZSBmb3VuZCBmb3IgdGhlIGdpdmVu IHVuaXQsIHdlIGNhbiBoYXZlIHRoZSBkZXZpY2U7IHdlCi0gIGNyZWF0ZSBhIGxvY2tmaWxlIExD Sy4ubmFtZSBpbiB0aGUgbG9ja2ZpbGUgZGlyZWN0b3J5IGFwcHJvcHJpYXRlIGZvciB0aGUKLSAg SFAtVVggdmVyc2lvbiAoL3Zhci9zcG9vbC9sb2NrcyBmb3IgMTAuMDAgYW5kIGxhdGVyLCAvdXNy L3Nwb29sL3V1Y3AgZm9yCi0gIDkueHggYW5kIGVhcmxpZXIpLiAgSWYgaXQgaXMgYSAiY3VhIiBv ciAiY3VsIiBkZXZpY2UsIGEgc2Vjb25kIGxvY2tmaWxlIGlzCi0gIGNyZWF0ZWQgd2l0aCB0aGUg InR0eWQiIHByZWZpeC4gIFRoaXMgaXMgZXhhY3RseSB3aGF0IGN1IGRvZXMuCi0KLSAgSWYgdGhl ICJzZXQgbGluZSIgZGV2aWNlIGRvZXMgbm90IGhhdmUgYSB2YWxpZCB1bml0IGRlc2lnbmF0b3Is IHRoZW4gaXQgaXMKLSAgdXNlZCBsaXRlcmFsbHkgYW5kIG5vIHN5bm9teW1zIGFyZSBzZWFyY2hl ZCBmb3IgYW5kIG9ubHkgb25lIGxvY2tmaWxlIGlzCi0gIGNyZWF0ZWQuCi0KLSAgLWZkYywgTWFy Y2ggMTk5OC4KLSovCi0jZGVmaW5lIExGTkFNTCA4MAkJCS8qIE1heCBsZW5ndGggZm9yIGxvY2sg ZmlsZSBuYW1lLiAqLwotCi0gICAgaW50IGxvY2tmZDsJCQkJLyogRmlsZSBkZXNjcmlwdG9yIGZv ciBsb2NrIGZpbGUuICovCi0gICAgUElEX1QgcGlkOwkJCQkvKiBQcm9jZXNzIElEIG9mIHRoaXMg cHJvY2Vzcy4gKi8KLSAgICBpbnQgZnBpZDsJCQkJLyogcGlkIGZvdW5kIGluIGV4aXN0aW5nIGxv Y2tmaWxlLiAqLwotICAgIGludCB0cmllczsJCQkJLyogSG93IG1hbnkgdGltZXMgd2UndmUgdHJp ZWQuLi4gKi8KLSAgICBpbnQgaSwgazsJCQkJLyogV29ya2VycyAqLwotCi0gICAgY2hhciAqZGV2 aWNlLCAqZGV2bmFtZTsJCS8qICIvZGV2L3h4eCIsICJ4eHgiICovCi0gICAgY2hhciAqdW5pdCwg KnA7CQkJLyogPGluc3RhbmNlPnA8cG9ydD4gcGFydCBvZiB4eHggKi8KLQotICAgIGNoYXIgbG9j a2ZpbFtMRk5BTUxdOwkJLyogTG9ja2ZpbGUgbmFtZSAobm8gcGF0aCkgKi8KLSAgICBjaGFyIHRt cG5hbVtMRk5BTUxdOwkJLyogVGVtcG9yYXJ5IGxvY2tmaWxlIG5hbWUuICovCi0KLSNpZmRlZiBI UFVYMTAJCQkJLyogTG9ja2ZpbGUgZGlyZWN0b3J5ICovCi0gICAgY2hhciAqbG9ja2RpciA9ICIv dmFyL3Nwb29sL2xvY2tzIjsJLyogQWx3YXlzIHRoaXMgZm9yIDEwLjAwIGFuZCBoaWdoZXIgKi8K LSNlbHNlICAvKiBIUC1VWCA5Lnh4IGFuZCBiZWxvdyAqLwotI2lmZGVmIExPQ0tfRElSCi0gICAg Y2hhciAqbG9ja2RpciA9IExPQ0tfRElSOwkJLyogRGVmaW5lZCBuZWFyIHRvcCBvZiB0aGlzIGZp bGUgKi8KLSNlbHNlCi0gICAgY2hhciAqbG9ja2RpciA9ICIvdXNyL3Nwb29sL3V1Y3AiOwkvKiBv ciBub3QuLi4gKi8KLSNlbmRpZiAvKiBMT0NLX0RJUiAqLwotI2VuZGlmIC8qIEhQVVgxMCAqLwot Ci0gICAgaGFzbG9jayA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IGxvY2tlZCB5 ZXQuICovCi0gICAgKmZsZm5hbSA9ICdcMCc7CQkJLyogTG9ja2ZpbGUgbmFtZSBpcyBlbXB0eS4g Ki8KLSAgICBsb2NrMlswXSA9ICdcMCc7CQkJLyogU2Vjb25kIG9uZSB0b28uICovCi0gICAgcGlk ID0gZ2V0cGlkKCk7CQkJLyogR2V0IG15IHByb2Nlc3MgSUQgKi8KLS8qCi0gIENvbnN0cnVjdCBu YW1lIG9mIGxvY2tmaWxlIGFuZCB0ZW1wb3JhcnkgZmlsZS4uLgotICBkZXZpY2UgID0gbmFtZSBv ZiB0dHkgZGV2aWNlIHdpdGhvdXQgdGhlIHBhdGgsIGUuZy4gInR0eTBwMCIKLSAgbG9ja2ZpbCA9 IG5hbWUgb2YgbG9jayBmaWxlLCB3aXRob3V0IHBhdGgsIGUuZy4gIkxDSy4udHR5MHAwIgotKi8K LSAgICBkZXZpY2UgPSAoKGRldm5hbWUgPSB4eGxhc3QodHRkZXYsJy8nKSkgIT0gTlVMTCA/IGRl dm5hbWUrMSA6IHR0ZGV2KTsKLSAgICBkZWJ1ZyhGMTEwLCJUVExPQ0sgZGV2aWNlIixkZXZpY2Us MCk7Ci0gICAgY2ttYWttc2cobG9ja2ZpbCxMRk5BTUwsIkxDSy4uIixkZXZpY2UsTlVMTCxOVUxM KTsKLQotICAgIGsgPSAwOwkJCQkvKiBBc3N1bWUgZGV2aWNlIGlzIG5vdCBsb2NrZWQgKi8KLSAg ICBuID0gMDsJCQkJLyogRGlnaXQgY291bnRlciAqLwotICAgIHVuaXQgPSBkZXZpY2U7CQkJLyog VW5pdCA9IDxpbnN0YW5jZT5wPHBvcnQ+ICovCi0gICAgd2hpbGUgKCp1bml0ICYmICFpc2RpZ2l0 KCp1bml0KSkJLyogU2VhcmNoIGZvciBkaWdpdC4uLiAqLwotICAgICAgdW5pdCsrOwotICAgIHAg PSB1bml0OwkJCQkvKiBWZXJpZnkgPG51bT5wPG51bT4gZm9ybWF0Li4uICovCi0gICAgZGVidWco RjExMCwiVFRMT0NLIHVuaXQgMSIsdW5pdCwwKTsKLS8qCi0gIFRoZSB1bml0IG51bWJlciBpcyBy ZWNvZ25pemVkIGFzOgotICAoYSkgYW55IHNlcXVlbmNlIG9mIGRpZ2l0cyB0aGF0IHJ1bnMgdG8g dGhlIGVuZCBvZiB0aGUgc3RyaW5nLgotICAoYikgYW55IChhKSB0aGF0IGluY2x1ZGVzIG9uZSBh bmQgb25seSBvbmUgbGV0dGVyICJwIiwgd2l0aCBhdCBsZWFzdAotICAgICAgb25lIGRpZ2l0IGJl Zm9yZSBhbmQgYWZ0ZXIgaXQuCi0qLwotICAgIHdoaWxlIChpc2RpZ2l0KCpwKSkgcCsrLCBuKys7 CS8qIEdldCBhIHJ1biBvZiBkaWdpdHMgKi8KLSAgICBpZiAoKnAgJiYgbiA+IDApIHsJCQkvKiBI YXZlIGEgInAiPyAqLwotCWlmICgqcCA9PSAncCcgJiYgaXNkaWdpdCgqKHArMSkpKSB7Ci0JICAg IHArKzsKLQkgICAgbiA9IDA7Ci0JICAgIHdoaWxlIChpc2RpZ2l0KCpwKSkgcCsrLCBuKys7Ci0J fQotICAgIH0KLSAgICBpZiAobiA9PSAwIHx8ICpwKSB1bml0ID0gIiI7Ci0gICAgZGVidWcoRjEx MCwiVFRMT0NLIHVuaXQgMiIsdW5pdCwwKTsKLQotICAgIGlmICgqdW5pdCkgewkJCS8qIERldmlj ZSBuYW1lIGhhcyB1bml0IG51bWJlci4gKi8KLQkvKiBUaGUgZm9sbG93aW5nIGxvb3Agbm90IG9u bHkgc2VhcmNoZXMgZm9yIHRoZSB2YXJpb3VzIGxvY2tmaWxlICAgICovCi0JLyogc3lub255bXMs IGJ1dCBhbHNvIHJlbW92ZXMgYWxsIC0tIG5vdCBqdXN0IG9uZSAtLSBzdGFsZSBsb2NrZmlsZSAq LwotCS8qIGZvciB0aGUgZGV2aWNlLCBzaG91bGQgdGhlcmUgYmUgbW9yZSB0aGFuIG9uZS4gIFNl ZSB0dGNoa3BpZCgpLiAgKi8KLQl0dHlkZXhpc3RzID0gMDsKLQlmb3IgKGkgPSAwOyAqZGV2cHJl Zml4W2ldOyBpKyspIHsgLyogRm9yIGVhY2ggZHJpdmVyLi4uICovCi0JICAgIC8qIE1ha2UgZGV2 aWNlIG5hbWUgKi8KLQkgICAgY2ttYWttc2cobG9jazIsRkxGTkFNTCwiL2Rldi8iLGRldnByZWZp eFtpXSx1bml0LE5VTEwpOwotCSAgICBwcml2X29uKCk7CQkJLyogUHJpdnMgb24gKi8KLQkgICAg ayA9IHpjaGtpKGxvY2syKSAhPSAtMTsJLyogU2VlIGlmIGRldmljZSBleGlzdHMgKi8KLQkgICAg cHJpdl9vZmYoKTsJCQkvKiBQcml2cyBvZmYgKi8KLQkgICAgZGVidWcoRjExMSwiVFRMT0NLIGV4 aXN0Iixsb2NrMixrKTsKLSAgICAgICAgICAgIGlmIChrKSB7Ci0JCWlmICghc3RyY21wKGRldnBy ZWZpeFtpXSwidHR5ZCIpKSAvKiB0dHlkIGRldmljZSBleGlzdHMgKi8KLQkJICB0dHlkZXhpc3Rz ID0gMTsKLQkJLyogTWFrZSBsb2NrZmlsZSBuYW1lICovCi0JCWNrbWFrbXNnKGxvY2syLEZMRk5B TUwsbG9ja2RpciwiL0xDSy4uIixkZXZwcmVmaXhbaV0sdW5pdCk7Ci0JCWRlYnVnKEYxMTAsIlRU TE9DSyBjaGVja2luZyIsbG9jazIsMCk7Ci0JCXByaXZfb24oKTsJCS8qIFByaXZzIG9uICovCi0J CWsgPSB6Y2hraShsb2NrMikgIT0gLTE7CS8qIFNlZSBpZiBsb2NrZmlsZSBleGlzdHMgKi8KLQkJ cHJpdl9vZmYoKTsJCS8qIFByaXZzIG9mZiAqLwotCQlkZWJ1ZyhGMTExLCJUVExPQ0sgY2hlY2sg Zm9yIGxvY2sgQSIsbG9jazIsayk7Ci0JCWlmIChrKSBpZiAodHRjaGtwaWQobG9jazIpKSB7IC8q IElmIHBpZCBzdGlsbCBhY3RpdmUsIGZhaWwuICovCi0JCSAgICBja3N0cm5jcHkoZmxmbmFtLGxv Y2syLEZMRk5BTUwpOwotCQkgICAgcmV0dXJuKC0yKTsKLQkJfQotCSAgICB9Ci0JfQotICAgIH0g ZWxzZSB7CQkJCS8qIFNvbWUgb3RoZXIgZGV2aWNlLW5hbWUgZm9ybWF0ICovCi0JLyogVGhpcyB0 YWtlcyBjYXJlIG9mIHN5bWJvbGljIGxpbmtzLCBldGMuLi4gKi8KLQkvKiBCdXQgZG9lcyBub3Qg Y2hhc2UgdGhlbSBkb3duISAqLwotCWNrbWFrbXNnKGxvY2syLEZMRk5BTUwsbG9ja2RpciwiL0xD Sy4uIixkZXZpY2UsTlVMTCk7Ci0JcHJpdl9vbigpOwotCWsgPSB6Y2hraShsb2NrMikgIT0gLTE7 CQkvKiBDaGVjayBmb3IgZXhpc3RpbmcgbG9ja2ZpbGUgKi8KLQlwcml2X29mZigpOwotCWRlYnVn KEYxMTEsIlRUTE9DSyBjaGVjayBmb3IgbG9jayBCIixsb2NrMixrKTsKLQlpZiAoaykgaWYgKHR0 Y2hrcGlkKGxvY2syKSkgewkvKiBDaGVjayBwaWQgZnJvbSBsb2NrZmlsZSAqLwotCSAgICBja3N0 cm5jcHkoZmxmbmFtLGxvY2syLEZMRk5BTUwpOwotCSAgICBkZWJ1ZyhGMTEwLCJUVExPQ0sgaW4g dXNlIixkZXZpY2UsMCk7Ci0JICAgIGRlYnVnKEYxMDEsIlRUTE9DSyByZXR1cm5zIiwiIiwtMik7 Ci0JICAgIHJldHVybigtMik7Ci0JfQotICAgIH0KLS8qCi0gIEdldCBoZXJlIG9ubHkgaWYgdGhl cmUgaXMgbm8gKG1vcmUpIGxvY2tmaWxlLCBzbyBub3cgd2UgbWFrZSBvbmUgKG9yIHR3bykuLi4K LSAgZmxmbmFtID0gZnVsbCBsb2NrZmlsZSBwYXRobmFtZSwgZS5nLiAiL3Vzci9zcG9vbC91dWNw L0xDSy4uY3VsMHAwIi4KLSAgdG1wbmFtID0gdW5pcXVlIHRlbXBvcmFyeSBmaWxuYW1lLCBlLmcu ICIvdXNyL3Nwb29sL3V1Y3AvTFRNUC4ucGlkIi4KLSovCi0gICAgY2ttYWttc2coZmxmbmFtLEZM Rk5BTUwsbG9ja2RpciwiLyIsbG9ja2ZpbCxOVUxMKTsgLyogU0VUIExJTkUgZGV2aWNlICovCi0K LSAgICAvKiBJZiBkaWFsb3V0IGRldmljZSwgYWxzbyBtYWtlIG9uZSBmb3IgY29ycmVzcG9uZGlu ZyBkaWFsaW4gZGV2aWNlICovCi0gICAgbG9jazJbMF0gPSAnXDAnOwotICAgIGlmICghc3RybmNt cChkZXZpY2UsImN1IiwyKSAmJiAqdW5pdCAmJiB0dHlkZXhpc3RzKQotICAgICAgY2ttYWttc2co bG9jazIsRkxGTkFNTCxsb2NrZGlyLCIvTENLLi50dHlkIix1bml0LE5VTEwpOwotCi0gICAgaWYg KChpbnQpc3RybGVuKGxvY2tkaXIpKzEyIDwgTEZOQU1MKQotICAgICAgc3ByaW50Zih0bXBuYW0s IiVzL0xUTVAuJTA1ZCIsbG9ja2RpciwoaW50KSBwaWQpOyAvKiBNYWtlIHRlbXAgbmFtZSAqLwot I2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewotCWRlYnVnKEYxMTAsIlRUTE9DSyBmbGZu YW0iLGZsZm5hbSwwKTsKLQlkZWJ1ZyhGMTEwLCJUVExPQ0sgbG9jazIiLGxvY2syLDApOwotCWRl YnVnKEYxMTAsIlRUTE9DSyB0bXBuYW0iLHRtcG5hbSwwKTsKLSAgICB9Ci0jZW5kaWYgLyogREVC VUcgKi8KLS8qCi0gICBMb2NrZmlsZSBwZXJtaXNzaW9ucy4uLgotICAgNDQ0IGlzIHN0YW5kYXJk LCBIUC1VWCAxMC4wMCB1c2VzIDY2NC4gIEl0IGRvZXNuJ3QgbWF0dGVyLgotICAgS2VybWl0IHVz ZXMgNDQ0OyB0aGUgZGlmZmVyZW5jZSBsZXRzIHVzIHRlbGwgd2hldGhlciBLZXJtaXQgY3JlYXRl ZAotICAgdGhlIGxvY2sgZmlsZS4KLSovCi0gICAgcHJpdl9vbigpOwkJCQkvKiBUdXJuIG9uIHBy aXZpbGVnZXMuICovCi0gICAgbG9ja2ZkID0gY3JlYXQodG1wbmFtLCAwNDQ0KTsJLyogVHJ5IHRv IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZS4gKi8KLSAgICBpZiAobG9ja2ZkIDwgMCkgewkJCS8qIENy ZWF0ZSBmYWlsZWQuICovCi0JZGVidWcoRjExMSwiVFRMT0NLIGNyZWF0IGZhaWxlZCIsdG1wbmFt LGVycm5vKTsKLQlpZiAoZXJybm8gPT0gRU5PRU5UKSB7Ci0JICAgIHBlcnJvcihsb2NrZGlyKTsK LQkgICAgcHJpbnRmKCJVVUNQIG5vdCBpbnN0YWxsZWQgb3IgS2VybWl0IG1pc2NvbmZpZ3VyZWRc biIpOwotCX0gZWxzZSB7Ci0JICAgIGlmICghcXVpZXQpCi0JICAgICAgcGVycm9yKGxvY2tkaXIp OwotCSAgICB1bmxpbmsodG1wbmFtKTsJCS8qIEdldCByaWQgb2YgdGhlIHRlbXBvcmFyeSBmaWxl LiAqLwotCX0KLQlwcml2X29mZigpOwkJCS8qIFR1cm4gb2ZmIHByaXZpbGVnZXMhISEgKi8KLQlk ZWJ1ZyhGMTAxLCJUVExPQ0sgcmV0dXJucyIsIiIsLTEpOwotCXJldHVybigtMSk7CQkJLyogUmV0 dXJuIGZhaWx1cmUgY29kZS4gKi8KLSAgICB9Ci0gICAgZGVidWcoRjExMCwiVFRMT0NLIHRlbXAg b2siLHRtcG5hbSwwKTsKLQotLyogTm93IHdyaXRlIG91ciBwaWQgaW50byB0aGUgdGVtcCBsb2Nr ZmlsZSBpbiBpbnRlZ2VyIGZvcm1hdC4gKi8KLQotICAgIGkgPSB3cml0ZShsb2NrZmQsIChjaGFy ICopJnBpZCwgc2l6ZW9mKHBpZCkpOwotCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKSB7 Ci0JZGVidWcoRjEwMSwiVFRMT0NLIHBpZCIsIiIscGlkKTsKLQlkZWJ1ZyhGMTAxLCJUVExPQ0sg c2l6ZW9mIHBpZCIsIiIsc2l6ZW9mKHBpZCkpOwotCWRlYnVnKEYxMDEsIlRUTE9DSyB3cml0ZSBw aWQgcmV0dXJucyIsIiIsaSk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0KLS8qCi0gIE5v dyB0cnkgdG8gcmVuYW1lIHRoZSB0ZW1wb3JhcnkgZmlsZSB0byB0aGUgcmVhbCBsb2NrZmlsZSBu YW1lLgotICBUaGlzIHdpbGwgZmFpbCBpZiBhIGxvY2sgZmlsZSBvZiB0aGF0IG5hbWUgYWxyZWFk eSBleGlzdHMsIHdoaWNoCi0gIHdpbGwgY2F0Y2ggcmFjZSBjb25kaXRpb25zIHdpdGggb3RoZXIg dXNlcnMuCi0qLwotICAgIGNsb3NlKGxvY2tmZCk7CQkJLyogQ2xvc2UgdGhlIHRlbXAgbG9ja2Zp bGUuICovCi0gICAgY2htb2QodG1wbmFtLDA0NDQpOwotCi0gICAgdHJpZXMgPSAwOwotICAgIHdo aWxlICghaGFzbG9jayAmJiB0cmllcysrIDwgMikgewotCWhhc2xvY2sgPSAobGluayh0bXBuYW0s ZmxmbmFtKSA9PSAwKTsgLyogQ3JlYXRlIGEgbGluayB0byBpdC4gKi8KLQlkZWJ1ZyhGMTAxLCJU VExPQ0sgbGluayIsIiIsaGFzbG9jayk7Ci0JaWYgKGhhc2xvY2spIHsJCQkvKiBJZiB3ZSBtYWRl IHRoZSBsb2NrZmlsZS4uLiAqLwotCi0jaWZkZWYgQ09NTUVOVAotLyogV2UgY2FuJ3QgZG8gdGhp cyBhbnkgbW9yZSBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYSBmaWxlIGRlc2NyaXB0b3IgeWV0LiAq LwotI2lmZGVmIExPQ0tGCQkJCS8qIENhbiBiZSBjYW5jZWxlZCB3aXRoIC1ETk9MT0NLRiAqLwot LyoKLSAgQ3JlYXRlIGFuIGFkdmlzb3J5IGxvY2sgb24gdGhlIGRldmljZSB0aHJvdWdoIGl0cyBm aWxlIGRlc2NyaXB0b3IuCi0gIFRoaXMgY29kZSBhY3R1YWxseSBzZWVtcyB0byB3b3JrLiAgSWYg aXQgaXMgZXhlY3V0ZWQsIGFuZCB0aGVuIGFub3RoZXIKLSAgcHJvY2VzcyB0cmllcyB0byBvcGVu IHRoZSBzYW1lIGRldmljZSB1bmRlciBhIGRpZmZlcmVudCBuYW1lIHRvIGNpcmN1bXZlbnQKLSAg dGhlIGxvY2tmaWxlLCB0aGV5IGdldCBhICJkZXZpY2UgYnVzeSIgZXJyb3IuCi0qLwotCSAgICBk ZWJ1ZyhGMTAwLCJUVExPQ0sgTE9DS0YgY29kZS4uLiIsIiIsMCk7Ci0gICAgICAgICAgICB3aGls ZSAoIGxvY2tmKHR0eWZkLCBGX1RMT0NLLCAwTCkgIT0gMCApIHsKLSAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTExLCAiVFRMT0NLIGxvY2tmIGVycm9yIiwgIiIsIGVycm5vKTsKLSAgICAgICAgICAg ICAgICBpZiAoKCsrdHJpZXMgPj0gMykgfHwgKGVycm5vICE9IEVBR0FJTikpIHsKLSAgICAgICAg ICAgICAgICAgICAgeCA9IHVubGluayhmbGZuYW0pOyAvKiBSZW1vdmUgdGhlIGxvY2tmaWxlICov Ci0JCSAgICBpZiAoZXJybm8gPT0gRUFDQ0VTICYmICFxdWlldCkKLQkJICAgICAgcHJpbnRmKCJE ZXZpY2UgYWxyZWFkeSBsb2NrZWQgYnkgYW5vdGhlciBwcm9jZXNzXG4iKTsKLSAgICAgICAgICAg ICAgICAgICAgaGFzbG9jayA9IDA7Ci0JCSAgICBicmVhazsKLQkJfQotICAgICAgICAgICAgICAg IHNsZWVwKDIpOwotCSAgICB9Ci0jZW5kaWYgLyogTE9DS0YgKi8KLSNlbmRpZiAvKiBDT01NRU5U ICovCi0KLQkgICAgaWYgKGhhc2xvY2spIHsJCS8qIElmIHdlIG1hZGUgdGhlIGxvY2tmaWxlIC4u LiAqLwotCQlpZiAobG9jazJbMF0pIHsJCS8qIGlmIHRoZXJlIGlzIHRvIGJlIGEgMm5kIGxvY2tm aWxlICovCi0JCSAgICBsb2NrZmQgPSBjcmVhdChsb2NrMiwgMDQ0NCk7IC8qIENyZWF0ZSBpdCAq LwotCQkgICAgZGVidWcoRjExMSwiVFRMT0NLIGxvY2syIGNyZWF0IiwgbG9jazIsIGxvY2tmZCk7 Ci0JCSAgICBpZiAobG9ja2ZkID4gLTEpIHsJLyogQ3JlYXRlZCBPSywgd3JpdGUgcGlkLiAqLwot CQkJd3JpdGUobG9ja2ZkLCAoY2hhciAqKSZwaWQsIHNpemVvZihwaWQpICk7Ci0JCQljbG9zZShs b2NrZmQpOwkvKiBDbG9zZSBhbmQgKi8KLQkJCWNobW9kKGxvY2syLCAwNDQ0KTsgLyogc2V0IHBl cm1pc3Npb25zLiAqLwotCQkgICAgfSBlbHNlIHsJCSAvKiBOb3QgT0ssIGJ1dCBkb24ndCBmYWls LiAqLwotCQkJbG9jazJbMF0gPSAnXDAnOyAvKiBKdXN0IHJlbWVtYmVyIGl0J3Mgbm90IHRoZXJl LiAqLwotCQkgICAgfQotCQl9Ci0JCWJyZWFrOwkJCS8qIGFuZCB3ZSdyZSBkb25lLiAqLwotCSAg ICB9Ci0JfQotICAgIH0KLSAgICB1bmxpbmsodG1wbmFtKTsJCQkvKiBVbmxpbmsgKHJlbW92ZSkg dGhlIHRlbXAgZmlsZS4gKi8KLSAgICBwcml2X29mZigpOwkJCQkvKiBUdXJuIG9mZiBwcml2cyAq LwotICAgIGkgPSBoYXNsb2NrID8gMCA6IC0xOwkJLyogT3VyIHJldHVybiB2YWx1ZSAqLwotICAg IGRlYnVnKEYxMDEsIlRUTE9DSyByZXR1cm5zIiwiIixpKTsKLSAgICByZXR1cm4oaSk7Ci0jZW5k aWYgLyogSFBVWCAqLwotI2VuZGlmIC8qIFVTRVRUWUxPQ0sgKi8KLSNlbmRpZiAvKiAhTk9VVUNQ ICovCi19Ci0KLS8qICBUIFQgVSBOIEwgTyBDIEsgICovCi0KLXN0YXRpYyBpbnQKLXR0dW5sY2so KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZW1vdmUgVVVDUCBsb2NrZmlsZShz KS4gKi8KLSNpZm5kZWYgTk9VVUNQCi0gICAgaW50IHg7Ci0KLSAgICBkZWJ1ZyhGMTExLCJ0dHVu bGNrIixmbGZuYW0saGFzbG9jayk7Ci0KLSNpZmRlZiBVU0VUVFlMT0NLCi0KLSAgICBpZiAoaGFz bG9jayAmJiAqZmxmbmFtKSB7Ci0JaW50IHg7Ci0JcHJpdl9vbigpOwkJCS8qIFR1cm4gb24gcHJp dnMgKi8KLSNpZmRlZiBVU0VfVVVfTE9DSwotCXggPSB1dV91bmxvY2sobG9ja25hbWUpOwotI2Vs c2UgIC8qIFVTRV9VVV9MT0NLICovCi0JeCA9IHR0eXVubG9jayhsb2NrbmFtZSk7CS8qIFRyeSB0 byB1bmxvY2sgKi8KLSNlbmRpZiAvKiBVU0VfVVVfTE9DSyAqLwotCXByaXZfb2ZmKCk7CQkJLyog VHVybiBvZmYgcHJpdnMgKi8KLQlpZiAoeCA8IDAgJiYgIXF1aWV0KQotCSAgcHJpbnRmKCJXYXJu aW5nIC0gQ2FuJ3QgcmVtb3ZlIGxvY2tmaWxlOiAlc1xuIiwgZmxmbmFtKTsKLQotCSpmbGZuYW0g PSAnXDAnOwkJCS8qIEVyYXNlIHRoZSBuYW1lLiAqLwotCWhhc2xvY2sgPSAwOwotCXJldHVybigw KTsKLSAgICB9Ci0KLSNlbHNlICAvKiBObyB0dHlsb2NrKCkuLi4gKi8KLQotICAgIGlmIChoYXNs b2NrICYmICpmbGZuYW0pIHsKLQkvKiBEb24ndCByZW1vdmUgbG9ja2ZpbGUgaWYgd2UgZGlkbid0 IG1ha2UgaXQgb3Vyc2VsdmVzICovCi0JaWYgKCh4ID0gdHRycGlkKGZsZm5hbSkpICE9IChpbnQp Z2V0cGlkKCkpIHsKLQkgICAgZGVidWcoRjExMSwidHR1bmxjayBsb2NrZmlsZSBzZWl6ZWQiLGZs Zm5hbSx4KTsKLQkgICAgcHJpbnRmKCJXYXJuaW5nIC0gTG9ja2ZpbGUgJXMgc2VpemVkIGJ5IHBp ZCAlZFxuIiwKLQkJICAgZmxmbmFtLAotCQkgICB4Ci0JCSAgICk7Ci0JICAgIHJldHVybigwKTsK LQl9Ci0JcHJpdl9vbigpOwkJCS8qIFR1cm4gcHJpdmlsZWdlcyBvbi4gICovCi0JZXJybm8gPSAw OwotCXggPSB1bmxpbmsoZmxmbmFtKTsJCS8qIFJlbW92ZSB0aGUgbG9ja2ZpbGUuICovCi0JZGVi dWcoRjExMSwidHR1bmxjayB1bmxpbmsiLGZsZm5hbSx4KTsKLQlpZiAoeCA8IDApIHsKLQkgICAg aWYgKGVycm5vICYmICFxdWlldCkKLQkgICAgICBwZXJyb3IodHRubXN2KTsKLQkgICAgcHJpbnRm KCJXYXJuaW5nIC0gQ2FuJ3QgcmVtb3ZlIGxvY2tmaWxlOiAlc1xuIiwgZmxmbmFtKTsKLQl9Ci0J aGFzbG9jayA9IDA7Ci0JKmZsZm5hbSA9ICdcMCc7CQkJLyogRXJhc2UgdGhlIG5hbWUuICovCi0K LSNpZmRlZiBSVEFJWAotCWVycm5vID0gMDsKLQl4ID0gdW5saW5rKGxrZmxmbik7CQkvKiBSZW1v dmUgbGluayB0byBsb2NrZmlsZSAqLwotCWRlYnVnKEYxMTEsInR0dW5sY2sgQUlYIGxpbmsgdW5s aW5rIixsa2ZsZm4seCk7Ci0JaWYgKHggPCAwKSB7Ci0JICAgIGlmIChlcnJubyAmJiAhcXVpZXQp Ci0JICAgICAgcGVycm9yKHR0bm1zdik7Ci0JICAgIHByaW50ZigiV2FybmluZyAtIENhbid0IHJl bW92ZSBsaW5rIHRvIGxvY2tmaWxlOiAlc1xuIiwgbGtmbGZuKTsKLQl9Ci0JKmxrZmxmbiA9ICdc MCc7Ci0jZWxzZQotCWlmIChsb2NrMlswXSkgewkJCS8qIElmIHRoZXJlIGlzIGEgc2Vjb25kIGxv Y2tmaWxlLCAqLwotCSAgICBlcnJubyA9IDA7Ci0JICAgIHggPSB1bmxpbmsobG9jazIpOwkJLyog IHJlbW92ZSBpdCB0b28uICovCi0JICAgIGRlYnVnKEYxMTEsInR0dW5sY2sgbG9jazIgdW5saW5r Iixsb2NrMix4KTsKLQkgICAgaWYgKHggPCAwKSB7Ci0JCWlmIChlcnJubyAmJiAhcXVpZXQpCi0J CSAgcGVycm9yKHR0bm1zdik7Ci0JCXByaW50ZigiV2FybmluZyAtIENhbid0IHJlbW92ZSBzZWNv bmRhcnkgbG9ja2ZpbGU6ICVzXG4iLAotCQkgICAgICAgbG9jazIKLQkJICAgICAgICk7Ci0JICAg IH0KLQkgICAgbG9jazJbMF0gPSAnXDAnOwkJLyogRm9yZ2V0IGl0cyBuYW1lLiAqLwotCX0KLSNl bmRpZiAvKiBSVEFJWCAqLwotCi0jaWZkZWYgQ09NTUVOVAotI2lmZGVmIExPQ0tGCi0gICAgICAg IChWT0lEKSBsb2NrZih0dHlmZCwgRl9VTE9DSywgMEwpOyAvKiBSZW1vdmUgYWR2aXNvcnkgbG9j ayAqLwotI2VuZGlmIC8qIExPQ0tGICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0JcHJpdl9v ZmYoKTsJCQkvKiBUdXJuIHByaXZpbGVnZXMgb2ZmLiAqLwotICAgIH0KLSNlbmRpZiAvKiBVU0VU VFlMT0NLICovCi0jZW5kaWYgLyogIU5PVVVDUCAqLwotICAgIHJldHVybigwKTsKLX0KLQotLyoK LSAgNC4zQlNELXN0eWxlIFVVQ1AgbGluZSBkaXJlY3Rpb24gY29udHJvbC4KLSAgKFN0YW4gQmFy YmVyLCBSaWNlIFUsIDE5ODAtc29tZXRoaW5nLi4uKQotKi8KLSNpZm5kZWYgTk9VVUNQCi0jaWZk ZWYgQUNVQ05UUkwKLVZPSUQKLWFjdWNudHJsKGZsYWcsdHRuYW1lKSBjaGFyICpmbGFnLCAqdHRu YW1lOyB7Ci0gICAgY2hhciB4W0RFVk5BTUxFTiszMl0sICpkZXZpY2UsICpkZXZuYW1lOwotCi0g ICAgaWYgKHN0cmNtcCh0dG5hbWUsQ1RUTkFNKSA9PSAwIHx8IHhsb2NhbCA9PSAwKSAvKiBJZiBu b3QgbG9jYWwsICovCi0gICAgICByZXR1cm47CQkJCS8qIGp1c3QgcmV0dXJuLiAqLwotICAgIGRl dmljZSA9ICgoZGV2bmFtZSA9IHh4bGFzdCh0dG5hbWUsJy8nKSkgIT0gTlVMTCA/IGRldm5hbWUr MSA6IHR0bmFtZSk7Ci0gICAgaWYgKHN0cm5jbXAoZGV2aWNlLCJMQ0suLiIsNCkgPT0gMCkgZGV2 aWNlICs9IDU7Ci0gICAgY2ttYWttc2coeCxERVZOQU1MRU4rMzIsIi91c3IvbGliL3V1Y3AvYWN1 Y250cmwgIixmbGFnLCIgIixkZXZpY2UpOwotICAgIGRlYnVnKEYxMTAsImNhbGxlZCAiLHgsMCk7 Ci0gICAgenN5c2NtZCh4KTsKLX0KLSNlbmRpZiAvKiBBQ1VDTlRSTCAqLwotI2VuZGlmIC8qIE5P VVVDUCAqLwotCi0vKgotICBUIFQgSCBGIEwgTyBXICAtLSAgU2V0IG9yIFJlc2V0IGhhcmR3YXJl IGZsb3cgY29udHJvbC4KLQotICBUaGlzIGlzIGFuIGF0dGVtcHQgdG8gY29sbGVjdCBhbGwgaGFy ZHdhcmUtZmxvdy1jb250cm9sIHJlbGF0ZWQgY29kZQotICBpbnRvIGEgc2luZ2xlIG1vZHVsZS4g IFRoYW5rcyB0byBSaWNrIFNsYWRrZXkgYW5kIEpvaG4gS29obCBmb3IgbG90cyBvZgotICBoZWxw IGhlcmUuICBPdmVydmlldzoKLQotICBIYXJkd2FyZSBmbG93IGNvbnRyb2wgaXMgbm90IHN1cHBv cnRlZCBpbiBtYW55IFVOSVggaW1wbGVtZW50aW9ucy4gIEV2ZW4KLSAgd2hlbiBpdCBpcyBzdXBw b3J0ZWQsIHRoZXJlIGlzIG5vIChoYSBoYSkgInN0YW5kYXJkIiBmb3IgdGhlIHByb2dyYW1taW5n Ci0gIGludGVyZmFjZS4gIEluIGdlbmVyYWwsIDQuM0JTRCBhbmQgZWFybGllciAoc29tZXRpbWVz KSwgNC40QlNELCBTeXN0ZW0gViwKLSAgU3VuT1MsIEFJWCwgZXRjLCBoYXZlIHRvdGFsbHkgZGlm ZmVyZW50IG1ldGhvZHMuICAoQW5kLCBub3Qgc3RyaWN0bHkKLSAgcmVsZXZhbnQgaGVyZSwgdGhl IHByb2dyYW1taW5nIGludGVyZmFjZSBvZnRlbiBicmluZ3Mgb25lIG9ubHkgdG8gYSBuby1vcAot ICBpbiB0aGUgZGV2aWNlIGRyaXZlciEpCi0KLSAgQW1vbmcgYWxsIHRoZXNlLCB3ZSBoYXZlIHR3 byBtYWpvciB0eXBlcyBvZiBBUElzOiB0aG9zZSBpbiB3aGljaCBoYXJkd2FyZQotICBmbG93IGNv bnRyb2wgaXMgZGV0ZXJtaW5lZCBieSBiaXRzIGluIHRoZSBzYW1lIHRlcm1pby90ZXJtaW9zL3Nn dHR5IG1vZGUKLSAgd29yZChzKSB0aGF0IGFyZSB1c2VkIGZvciBjb250cm9sbGluZyBzdWNoIGl0 ZW1zIGFzIENCUkVBSyB2cyBSQVcgbW9kZSwgYW5kCi0gIHdoaWNoIGFyZSBhbHNvIHVzZWQgYnkg dGhlIHR0dnQoKSwgdHRwa3QoKSwgY29uYmluKCksIGFuZCBjb25jYigpIHJvdXRpbmVzCi0gIGZv ciBjaGFuZ2luZyB0ZXJtaW5hbCBtb2Rlcy4gIEFuZCB0aG9zZSB0aGF0IHVzZSBlbnRpcmVseSBk aWZmZXJlbnQKLSAgbWVjaGFuaXNtcy4KLQotICBJbiB0aGUgZmlyc3QgY2F0ZWdvcnksIGl0IGlz IGltcG9ydGFudCB0aGF0IGFueSBjaGFuZ2UgaW4gdGhlIG1vZGUgYml0cyBiZQotICByZWZsZWN0 ZWQgaW4gdGhlIHJlbGV2YW50IHRlcm1pbyhzKS9zZ3R0eSBzdHJ1Y3R1cmUsIHNvIHRoYXQgc3Vi c2VxdWVudAotICBjaGFuZ2VzIHRvIHRoYXQgc3RydWN0dXJlIGRvIG5vdCB3aXBlIG91dCB0aGUg ZWZmZWN0cyBvZiB0aGlzIHJvdXRpbmUuICBUaGF0Ci0gIGlzIHdoeSBhIHBvaW50ZXIsIGF0dHJz LCB0byB0aGUgYXBwcm9wcmlhdGUgc3RydWN0dXJlIGlzIHBhc3NlZCBhcyBhCi0gIHBhcmFtZXRl ciB0byB0aGlzIHJvdXRpbmUuCi0KLSAgVGhlIHNlY29uZCBjYXRlZ29yeSBzaG91bGQgZ2l2ZSB1 cyBubyB3b3JyaWVzLCBzaW5jZSBhbnkgY2hhbmdlcyB0byBoYXJkd2FyZQotICBmbG93IGNvbnRy b2wgYWNjb21wbGlzaGVkIGJ5IHRoaXMgcm91dGluZSBzaG91bGQgbm90IGFmZmVjdCB0aGUgdGVy bWlvKHMpLwotICBzZ3R0eSBzdHJ1Y3R1cmVzLCBhbmQgdGhlcmVmb3JlIHdpbGwgbm90IGJlIHVu ZG9uZSBieSBsYXRlciBjaGFuZ2VzIHRvIHRoZW0uCi0KLSAgVGhlIHNlY29uZCBhcmd1bWVudCwg c3RhdHVzLCBtZWFucyB0byB0dXJuIG9uIGhhcmR3YXJlIGZsb3cgY29udHJvbCBpZgotICBub256 ZXJvLCBhbmQgdG8gdHVybiBpdCBvZmYgaWYgemVyby4KLQotICBSZXR1cm5zOiAwIG9uIGFwcGFy ZW50IHN1Y2Nlc3MsIC0xIG9uIHByb2JhYmxlIGZhaWx1cmUuCi0qLwotCi0vKgotICBUaGUgZm9s bG93aW5nIGJ1c2luZXNzIGlzIGZvciBCU0RJLCB3aGVyZSBpdCB3YXMgZGlzY292ZXJlZCB0aGF0 IHR3bwotICBzZXBhcmF0ZSBiaXRzLCBDQ1RTX09GTE9XIGFuZCBDUlRTX0lGTE9XLCBhcmUgdXNl ZCBpbiBoYXJkd2FyZSBmbG93IGNvbnRyb2wsCi0gIGJ1dCBDVFJTQ1RTIGlzIGRlZmluZWQgKGlu IDx0ZXJtaW9zLmg+KSB0byBiZSBqdXN0IENDVFNfT0ZMT1cgcmF0aGVyIGJvdGgKLSAgYml0cywg c28gaHdmYyBvbmx5IHdvcmtzIGluIG9uZSBkaXJlY3Rpb24gaWYgeW91IHVzZSBDUlRTQ1RTIHRv IGNvbnRyb2wgaXQuCi0gIE90aGVyIDQuNEJTRC1iYXNlZCBVbml4ZXMgc3VjaCBhcyBGcmVlQlNE IDQuMSwgd2hpY2ggdXNlIHRoZXNlIHR3byBiaXRzLAotICBkZWZpbmUgQ1JUU0NUUyBjb3JyZWN0 bHkuCi0qLwotI2lmZGVmIEZJWENSVFNDVFMKLSNpZmRlZiBDUlRTQ1RTCi0jaWZkZWYgQ0NUU19P RkxPVwotI2lmZGVmIENSVFNfSUZMT1cKLSN1bmRlZiBDUlRTQ1RTCi0jZGVmaW5lIENSVFNDVFMg KENSVFNfSUZMT1d8Q0NUU19PRkxPVykKLSNlbmRpZiAvKiBDUlRTX0lGTE9XICovCi0jZW5kaWYg LyogQ0NUU19PRkxPVyAqLwotI2VuZGlmIC8qIENSVFNDVFMgKi8KLSNlbmRpZiAvKiBGSVhDUlRT Q1RTICovCi0KLXN0YXRpYyBpbnQKLXR0aGZsb3coZmxvdywgc3RhdHVzLCBhdHRycykKLSAgICBp bnQgZmxvdywJCQkJLyogVHlwZSBvZiBmbG93IGNvbnRyb2wgKGNrY2RlYi5oKSAqLwotICAgIHN0 YXR1czsJCQkJLyogTm9uemVybyA9IHR1cm4gaXQgb24gKi8KLQkJCQkJLyogWmVybyA9IHR1cm4g aXQgb2ZmICovCi0jaWZkZWYgQlNENDRPUlBPU0lYCQkJLyogUE9TSVggb3IgQlNENDQgKi8KLSAg ICBzdHJ1Y3QgdGVybWlvcyAqYXR0cnM7Ci0jZWxzZQkJCQkJLyogU3lzdGVtIFYgKi8KLSNpZmRl ZiBBVFRTVgotI2lmZGVmIEFUVDczMDAKLSNpZmRlZiBVTklYMzUxTQotLyogQVQmVCBVTklYIDMu NTFtIGNhbiBzZXQgYnV0IG5vdCB0ZXN0IGZvciBoYXJkd2FyZSBmbG93IGNvbnRyb2wgKi8KLSNk ZWZpbmUgUlRTRkxPVyBDVFNDRAotI2RlZmluZSBDVFNGTE9XIENUU0NECi0jZW5kaWYgLyogQVRU NzMwMCAqLwotI2VuZGlmIC8qIFVOSVgzNTFNICovCi0gICAgc3RydWN0IHRlcm1pbyAqYXR0cnM7 Ci0jZWxzZQkJCQkJLyogQlNELCBWNywgZXRjICovCi0gICAgc3RydWN0IHNndHR5YiAqYXR0cnM7 CQkvKiBzZ3R0eSBpbmZvLi4uICovCi0jZW5kaWYgLyogQVRUU1YgKi8KLSNlbmRpZiAvKiBCU0Q0 NE9SUE9TSVggKi8KLS8qIHR0aGZsb3cgKi8gewotCi0gICAgaW50IHggPSAwOwkJCQkvKiB0dGhm bG93KCkgcmV0dXJuIGNvZGUgKi8KLQotI2lmZGVmIFBsYW45Ci0gICAgcmV0dXJuIHA5dHRoZmxv dyhmbG93LCBzdGF0dXMpOwotI2Vsc2UKLQotI2lmbmRlZiBPWE9TCQkJCS8qIE5PVCBPbGl2ZXR0 aSBYL09TLi4uICovCi0vKgotICBGb3IgU3VuT1MgNC4wIGFuZCBsYXRlciBpbiB0aGUgQlNEIGVu dmlyb25tZW50IC4uLgotCi0gIFRoZSBkZWNsYXJhdGlvbnMgYXJlIGNvcGllZCBhbmQgaW50ZXJw cmV0ZWQgZnJvbSB0aGUgU3lzdGVtIFYgaGVhZGVyIGZpbGVzLAotICBzbyB3ZSBkb24ndCBhY3R1 YWxseSBoYXZlIHRvIHB1bGwgaW4gYWxsIHRoZSBTeXN0ZW0gViBqdW5rIHdoZW4gYnVpbGRpbmcK LSAgQy1LZXJtaXQgZm9yIFN1bk9TIGluIHRoZSBCU0QgZW52aXJvbm1lbnQsIHdoaWNoIHdvdWxk IGJlIGRhbmdlcm91cyBiZWNhdXNlCi0gIGhhdmluZyB0aG9zZSBzeW1ib2xzIGRlZmluZWQgd291 bGQgY2F1c2UgdXMgdG8gdGFrZSB0aGUgd3JvbmcgcGF0aHMgdGhyb3VnaAotICB0aGUgY29kZS4g IFRoZSBjb2RlIGluIHRoaXMgc2VjdGlvbiBpcyB1c2VkIGluIGJvdGggdGhlIEJTRCBhbmQgU3lz IFYgU3VuT1MKLSAgdmVyc2lvbnMuCi0qLwotI2lmZGVmIFNVTk9TNDEKLS8qCi0gIEluIFN1bk9T IDQuMSBhbmQgbGF0ZXIsIHdlIHVzZSB0aGUgUE9TSVggY2FsbHMgcmF0aGVyIHRoYW4gaW9jdGwg Y2FsbHMKLSAgYmVjYXVzZSBHTlUgQ0MgdXNlcyBkaWZmZXJlbnQgZm9ybWF0cyBmb3IgdGhlIF9J T3h4eCBtYWNyb3MgdGhhbiByZWd1bGFyIENDOwotICB0aGUgUE9TSVggZm9ybXMgd29yayBmb3Ig Ym90aC4gIEJ1dCB0aGUgUE9TSVggY2FsbHMgYXJlIG5vdCBhdmFpbGFibGUgaW4KLSAgU3VuT1Mg NC4wLgotKi8KLSNkZWZpbmUgQ1JUU0NUUyAweDgwMDAwMDAwCQkvKiBSVFMvQ1RTIGZsb3cgY29u dHJvbCAqLwotI2RlZmluZSBUQ1NBTk9XIDAJCQkvKiBEbyBpdCBub3cgKi8KLQotICAgIHN0cnVj dCB0ZXJtaW9zIHsKLQl1bnNpZ25lZCBsb25nIGNfaWZsYWc7CQkvKiBJbnB1dCBtb2RlcyAqLwot CXVuc2lnbmVkIGxvbmcgY19vZmxhZzsJCS8qIE91dHB1dCBtb2RlcyAqLwotCXVuc2lnbmVkIGxv bmcgY19jZmxhZzsJCS8qIENvbnRyb2wgbW9kZXMgKi8KLQl1bnNpZ25lZCBsb25nIGNfbGZsYWc7 CQkvKiBMaW5lIGRpc2NpcGxpbmUgbW9kZXMgKi8KLQljaGFyIGNfbGluZTsKLQlDSEFSIGNfY2Nb MTddOwotICAgIH07Ci0gICAgc3RydWN0IHRlcm1pb3MgdGVtcDsKLQotX1BST1RPVFlQKCBpbnQg dGNnZXRhdHRyLCAoaW50LCBzdHJ1Y3QgdGVybWlvcyAqKSApOwotX1BST1RPVFlQKCBpbnQgdGNz ZXRhdHRyLCAoaW50LCBpbnQsIHN0cnVjdCB0ZXJtaW9zICopICk7Ci0vKgotICBXaGVuIENSVFND VFMgaXMgc2V0LCBTdW5PUyB3b24ndCBkbyBvdXRwdXQgdW5sZXNzIGJvdGggQ1RTIGFuZCBDRCBh cmUKLSAgYXNzZXJ0ZWQuICBTbyB3ZSBkb24ndCBzZXQgQ1JUU0NUUyB1bmxlc3MgQ0QgaXMgdXAu ICBUaGlzIHNob3VsZCBiZSBPSywKLSAgc2luY2Ugd2UgZG9uJ3QgbmVlZCBSVFMvQ1RTIGR1cmlu ZyBkaWFsaW5nLCBhbmQgYWZ0ZXIgZGlhbGluZyBpcyBjb21wbGV0ZSwKLSAgd2Ugc2hvdWxkIGhh dmUgQ0QuICBJZiBub3QsIHdlIHN0aWxsIGNvbW11bmljYXRlLCBidXQgd2l0aG91dCBSVFMvQ1RT LgotKi8KLSAgICBpbnQgbWZsYWdzOwkJCQkvKiBNb2RlbSBzaWduYWwgZmxhZ3MgKi8KLQotI2lm ZGVmIE5FVENNRAotICAgIGlmICh0dHBpcGUpIHJldHVybigwKTsKLSNlbmRpZiAvKiBORVRDTUQg Ki8KLSNpZmRlZiBORVRQVFkKLSAgICBpZiAodHRwdHkpIHJldHVybigwKTsKLSNlbmRpZiAvKiBO RVRQVFkgKi8KLQotICAgIGRlYnVnKEYxMDEsInR0aGZsb3cgU1VOT1M0MSBlbnRyeSBzdGF0dXMi LCIiLHN0YXR1cyk7Ci0gICAgaWYgKCFzdGF0dXMpIHsJCQkvKiBUdXJuIGhhcmQgZmxvdyBvZmYg Ki8KLQlpZiAodGNnZXRhdHRyKHR0eWZkLCAmdGVtcCkgPiAtMSAmJiAvKiBHZXQgZGV2aWNlIGF0 dHJpYnV0ZXMgKi8KLQkgICAgKHRlbXAuY19jZmxhZyAmIENSVFNDVFMpKSB7IC8qIENoZWNrIGZv ciBSVFMvQ1RTICovCi0JICAgIHRlbXAuY19jZmxhZyAmPSB+Q1JUU0NUUzsJLyogSXQncyB0aGVy ZSwgcmVtb3ZlIGl0ICovCi0JICAgIHggPSB0Y3NldGF0dHIodHR5ZmQsVENTQU5PVywmdGVtcCk7 Ci0JfQotICAgIH0gZWxzZSB7CQkJCS8qIFR1cm4gaGFyZCBmbG93IG9uICovCi0JaWYgKGlvY3Rs KHR0eWZkLFRJT0NNR0VULCZtZmxhZ3MpID4gLTEgJiYgLyogR2V0IG1vZGVtIHNpZ25hbHMgKi8K LQkgICAgKG1mbGFncyAmIFRJT0NNX0NBUikpIHsJCS8qIENoZWNrIGZvciBDRCAqLwotCSAgICBk ZWJ1ZyhGMTAwLCJ0dGhmbG93IFN1bk9TIGhhcyBDRCIsIiIsMCk7Ci0JICAgIGlmICh0Y2dldGF0 dHIodHR5ZmQsICZ0ZW1wKSA+IC0xICYmIC8qIEdldCBkZXZpY2UgYXR0cmlidXRlcyAqLwotCQkh KHRlbXAuY19jZmxhZyAmIENSVFNDVFMpKSB7IC8qIENoZWNrIGZvciBSVFMvQ1RTICovCi0JCXRl bXAuY19jZmxhZyB8PSBDUlRTQ1RTOwkvKiBOb3QgdGhlcmUsIGFkZCBpdCAqLwotCQl4ID0gdGNz ZXRhdHRyKHR0eWZkLFRDU0FOT1csJnRlbXApOwotCSAgICB9Ci0JfSBlbHNlIHsKLQkgICAgeCA9 IC0xOwotCSAgICBkZWJ1ZyhGMTAwLCJ0dGhmbG93IFN1bk9TIG5vIENEIiwiIiwwKTsKLQl9Ci0g ICAgfQotI2Vsc2UKLSNpZmRlZiBRTlgKLSAgICBzdHJ1Y3QgdGVybWlvcyB0ZW1wOwotI2lmZGVm IE5FVENNRAotICAgIGlmICh0dHBpcGUpIHJldHVybigwKTsKLSNlbmRpZiAvKiBORVRDTUQgKi8K LSNpZmRlZiBORVRQVFkKLSAgICBpZiAodHRwdHkpIHJldHVybigwKTsKLSNlbmRpZiAvKiBORVRQ VFkgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ0dGhmbG93IFFOWCBlbnRyeSBzdGF0dXMiLCIiLHN0YXR1 cyk7Ci0gICAgaWYgKHRjZ2V0YXR0cih0dHlmZCwgJnRlbXApID4gLTEpIHsJLyogR2V0IGRldmlj ZSBhdHRyaWJ1dGVzICovCi0JaWYgKCFzdGF0dXMpIHsJCQkvKiBUdXJuIGhhcmQgZmxvdyBvZmYg Ki8KLQkgICAgaWYgKCh0ZW1wLmNfY2ZsYWcgJiAoSUhGTE9XfE9IRkxPVykpID09IChJSEZMT1d8 T0hGTE9XKSkgewotCQl0ZW1wLmNfY2ZsYWcgJj0gfihJSEZMT1d8T0hGTE9XKTsgLyogSXQncyB0 aGVyZSwgcmVtb3ZlIGl0ICovCi0JCWF0dHJzLT5jX2NmbGFnICY9IH4oSUhGTE9XfE9IRkxPVyk7 Ci0JCXggPSB0Y3NldGF0dHIodHR5ZmQsVENTQU5PVywmdGVtcCk7Ci0JICAgIH0KLQl9IGVsc2Ug ewkJCS8qIFR1cm4gaGFyZCBmbG93IG9uICovCi0JICAgIGlmICgodGVtcC5jX2NmbGFnICYgKElI RkxPV3xPSEZMT1cpKSAhPSAoSUhGTE9XfE9IRkxPVykpIHsKLQkJdGVtcC5jX2NmbGFnIHw9IChJ SEZMT1d8T0hGTE9XKTsgLyogTm90IHRoZXJlLCBhZGQgaXQgKi8KLQkJdGVtcC5jX2lmbGFnICY9 IH4oSVhPTnxJWE9GRik7ICAgLyogQnllIHRvIElYT04vSVhPRkYgKi8KLQkJdHRyYXcuY19sZmxh ZyB8PSBJRVhURU47ICAgICAgICAgLyogTXVzdCBiZSBvbiAqLwotCQl4ID0gdGNzZXRhdHRyKHR0 eWZkLFRDU0FOT1csJnRlbXApOwotCQlhdHRycy0+Y19jZmxhZyB8PSAoSUhGTE9XfE9IRkxPVyk7 Ci0JCWF0dHJzLT5jX2lmbGFnICY9IH4oSVhPTnxJWE9GRik7Ci0JICAgIH0KLQl9Ci0gICAgfSBl bHNlIHsKLQl4ID0gLTE7Ci0JZGVidWcoRjEwMCwgInR0aGZsb3cgUU5YIGdldGF0dHIgZmFpbHMi LCAiIiwgMCk7Ci0gICAgfQotI2Vsc2UKLSNpZmRlZiBQT1NJWF9DUlRTQ1RTCi0vKgotICBQT1NJ WF9DUlRTQ1RTIGlzIGRlZmluZWQgaW4gY2tjZGViLmggb3Igb24gQ0MgY29tbWFuZCBsaW5lLgot ICBOb3RlOiBEbyBub3QgYXNzdW1lIENSVFNDVFMgaXMgYSBvbmUtYml0IGZpZWxkIQotKi8KLSAg ICBzdHJ1Y3QgdGVybWlvcyB0ZW1wOwotI2lmZGVmIE5FVENNRAotICAgIGlmICh0dHBpcGUpIHJl dHVybigwKTsKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSNpZmRlZiBORVRQVFkKLSAgICBpZiAodHRw dHkpIHJldHVybigwKTsKLSNlbmRpZiAvKiBORVRQVFkgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ0dGhm bG93IFBPU0lYX0NSVFNDVFMgZW50cnkgc3RhdHVzIiwiIixzdGF0dXMpOwotICAgIGVycm5vID0g MDsKLSAgICB4ID0gdGNnZXRhdHRyKHR0eWZkLCAmdGVtcCk7Ci0gICAgZGVidWcoRjExMSwidHRo ZmxvdyBQT1NJWF9DUlRTQ1RTIHRjZ2V0YXR0ciIsY2tpdG9hKHgpLGVycm5vKTsKLSAgICBlcnJu byA9IDA7Ci0gICAgaWYgKHggPCAwKSB7Ci0JeCA9IC0xOwotICAgIH0gZWxzZSB7Ci0JaWYgKCFz dGF0dXMpIHsJCQkvKiBUdXJuIGhhcmQgZmxvdyBvZmYgKi8KLQkgICAgaWYgKAotI2lmZGVmIENP TU1FTlQKLQkJLyogVGhpcyBjYW4gZmFpbCBiZWNhdXNlIG9mIHNpZ24gZXh0ZW5zaW9uICovCi0J CS8qIGUuZy4gaW4gTGludXggd2hlcmUgaXQncyBCaXQgMzEgKi8KLQkJKHRlbXAuY19jZmxhZyAm IENSVFNDVFMpID09IENSVFNDVFMKLSNlbHNlCi0JCSh0ZW1wLmNfY2ZsYWcgJiBDUlRTQ1RTKSAh PSAwCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCQkpIHsKLQkJdGVtcC5jX2NmbGFnICY9IH5DUlRT Q1RTOyAvKiBJdCdzIHRoZXJlLCByZW1vdmUgaXQgKi8KLQkJYXR0cnMtPmNfY2ZsYWcgJj0gfkNS VFNDVFM7Ci0JCXggPSB0Y3NldGF0dHIodHR5ZmQsVENTQU5PVywmdGVtcCk7Ci0JCWRlYnVnKEYx MTEsInR0aGZsb3cgUE9TSVhfQ1JUU0NUUyBPRkYgdGNzZXRhdHRyIiwKLQkJICAgICAgY2tpdG9h KHgpLGVycm5vKTsKLQkgICAgfSBlbHNlIHsJCQkvKiBKb2huIER1bmxhcCAyMDEwLTAxLTI2ICov Ci0JCWRlYnVnKEYwMDEsCi0JCSAgICAgICJ0dGhmbG93IGJlZm9yZSBmb3JjaW5nIG9mZiBhdHRy cyBDUlRTQ1RTIiwKLQkJICAgICAgIiIsCi0JCSAgICAgIGF0dHJzLT5jX2NmbGFnJkNSVFNDVFMK LQkJICAgICAgKTsKLQkJYXR0cnMtPmNfY2ZsYWcgJj0gfkNSVFNDVFM7IC8qIGZvcmNlIGl0IG9m ZiBpZiAhc3RhdHVzICovCi0JCWRlYnVnKEYwMDEsCi0JCSAgICAgICJ0dGhmbG93IGFmdGVyIGZv cmNpbmcgb2ZmIGF0dHJzIENSVFNDVFMiLAotCQkgICAgICAiIiwKLQkJICAgICAgYXR0cnMtPmNf Y2ZsYWcmQ1JUU0NUUwotCQkgICAgICApOwotCQl9Ci0JfSBlbHNlIHsJCQkvKiBUdXJuIGhhcmQg ZmxvdyBvbiAqLwotCSAgICBpZiAoCi0jaWZkZWYgQ09NTUVOVAotCQkvKiBUaGlzIGNhbiBmYWls IGJlY2F1c2Ugb2Ygc2lnbiBleHRlbnNpb24gKi8KLQkJKHRlbXAuY19jZmxhZyAmIENSVFNDVFMp ICE9IENSVFNDVFMKLSNlbHNlCi0JCSh0ZW1wLmNfY2ZsYWcgJiBDUlRTQ1RTKSA9PSAwCi0jZW5k aWYgLyogQ09NTUVOVCAqLwotCQkpIHsKLQkJdGVtcC5jX2NmbGFnIHw9IENSVFNDVFM7IC8qIE5v dCB0aGVyZSwgYWRkIGl0ICovCi0JCXRlbXAuY19pZmxhZyAmPSB+KElYT058SVhPRkZ8SVhBTlkp OyAvKiBCeWUgdG8gSVhPTi9JWE9GRiAqLwotCQl4ID0gdGNzZXRhdHRyKHR0eWZkLFRDU0FOT1cs JnRlbXApOwotCQlkZWJ1ZyhGMTExLCJ0dGhmbG93IFBPU0lYX0NSVFNDVFMgT04gdGNzZXRhdHRy IiwKLQkJICAgICAgY2tpdG9hKHgpLGVycm5vKTsKLQkJYXR0cnMtPmNfY2ZsYWcgfD0gQ1JUU0NU UzsKLQkJYXR0cnMtPmNfaWZsYWcgJj0gfihJWE9OfElYT0ZGfElYQU5ZKTsKLQkgICAgfQotCX0K LSAgICB9Ci0jZWxzZQotI2lmZGVmIFNVTk9TNAotLyoKLSAgU3VuT1MgNC4wIChhbmQgbWF5YmUg ZWFybGllcj8pLiAgVGhpcyBjb2RlIGlzIGRhbmdlcm91cyBiZWNhdXNlIGl0Ci0gIHByZXZlbnRz IGNvbXBpbGF0aW9uIHdpdGggR05VIGdjYywgd2hpY2ggdXNlcyBkaWZmZXJlbnQgZm9ybWF0cyBm b3IgdGhlCi0gIF9JT1J4eHggbWFjcm9zIHRoYW4gcmVndWxhciBjYy4gIFN1bk9TIDQuMSBhbmQg bGF0ZXIgY2FuIHVzZSB0aGUgUE9TSVgKLSAgcm91dGluZXMgYWJvdmUsIHdoaWNoIHdvcmsgZm9y IGJvdGggY2MgYW5kIGdjYy4KLSovCi0jZGVmaW5lIFRDR0VUUyBfSU9SKFQsIDgsIHN0cnVjdCB0 ZXJtaW9zKSAvKiBHZXQgbW9kZXMgaW50byB0ZXJtaW9zIHN0cnVjdCAqLwotI2RlZmluZSBUQ1NF VFMgX0lPVyhULCA5LCBzdHJ1Y3QgdGVybWlvcykgLyogU2V0IG1vZGVzIGZyb20gdGVybWlvcyBz dHJ1Y3QgKi8KLSNkZWZpbmUgQ1JUU0NUUyAweDgwMDAwMDAwCQkgIC8qIFJUUy9DVFMgZmxvdyBj b250cm9sICovCi0KLSAgICBzdHJ1Y3QgdGVybWlvcyB7Ci0JdW5zaWduZWQgbG9uZyBjX2lmbGFn OwkJLyogSW5wdXQgbW9kZXMgKi8KLQl1bnNpZ25lZCBsb25nIGNfb2ZsYWc7CQkvKiBPdXRwdXQg bW9kZXMgKi8KLQl1bnNpZ25lZCBsb25nIGNfY2ZsYWc7CQkvKiBDb250cm9sIG1vZGVzICovCi0J dW5zaWduZWQgbG9uZyBjX2xmbGFnOwkJLyogTGluZSBkaXNjaXBsaW5lIG1vZGVzICovCi0JY2hh ciBjX2xpbmU7Ci0JQ0hBUiBjX2NjWzE3XTsKLSAgICB9OwotICAgIHN0cnVjdCB0ZXJtaW9zIHRl bXA7Ci0jaWZkZWYgTkVUQ01ECi0gICAgaWYgKHR0cGlwZSkgcmV0dXJuKDApOwotI2VuZGlmIC8q IE5FVENNRCAqLwotI2lmZGVmIE5FVFBUWQotICAgIGlmICh0dHB0eSkgcmV0dXJuKDApOwotI2Vu ZGlmIC8qIE5FVFBUWSAqLwotICAgIGRlYnVnKEYxMDEsInR0aGZsb3cgZW50cnkgc3RhdHVzIiwi IixzdGF0dXMpOwotICAgIGlmIChpb2N0bCh0dHlmZCxUQ0dFVFMsJnRlbXApID4gLTEpIHsgLyog R2V0IHRlcm1pbmFsIG1vZGVzLiAqLwotCWlmIChzdGF0dXMpIHsJCQkvKiBUdXJuIGhhcmQgZmxv dyBvbiAqLwotCSAgICB0ZW1wLmNfY2ZsYWcgfD0gQ1JUU0NUUzsJLyogQWRkIFJUUy9DVFMgdG8g dGhlbS4gKi8KLQkgICAgeCA9IGlvY3RsKHR0eWZkLFRDU0VUUywmdGVtcCk7IC8qIFNldCB0aGVt IGFnYWluLiAqLwotCSAgICBhdHRycy0+Y19jZmxhZyB8PSBDUlRTQ1RTOwkvKiBBZGQgdG8gZ2xv YmFsIGluZm8uICovCi0JfSBlbHNlIHsJCQkvKiBUdXJuIGhhcmQgZmxvdyBvZmYgKi8KLQkgICAg dGVtcC5jX2NmbGFnICY9IH5DUlRTQ1RTOwotCSAgICB4ID0gaW9jdGwodHR5ZmQsVENTRVRTLCZ0 ZW1wKTsKLQkgICAgYXR0cnMtPmNfY2ZsYWcgJj0gfkNSVFNDVFM7Ci0JfQotICAgIH0KLSNlbHNl CQkJCQkvKiBOb3QgU3VuT1MgNC4wIG9yIGxhdGVyICovCi0jaWZkZWYgQUlYUlMJCQkJLyogSUJN IEFJWCBSUy82MDAwICovCi0jaWZuZGVmIEFJWDQxCQkJCS8qIEJ1dCBvbmx5IHByZS00LnggPT0g U1ZSNCAqLwotI2lmZGVmIE5FVENNRAotICAgIGlmICh0dHBpcGUpIHJldHVybigwKTsKLSNlbmRp ZiAvKiBORVRDTUQgKi8KLSNpZmRlZiBORVRQVFkKLSAgICBpZiAodHRwdHkpIHJldHVybigwKTsK LSNlbmRpZiAvKiBORVRQVFkgKi8KLSAgICBpZiAoc3RhdHVzKSB7Ci0JaWYgKCh4ID0gaW9jdGwo dHR5ZmQsIFRYQUREQ0QsICJydHMiKSkgPCAwICYmIGVycm5vICE9IEVCVVNZKQotCSAgZGVidWco RjEwMCwiaGFyZGZsb3cgVFhBRERDRCAocnRzKSBlcnJvciIsICIiLCAwKTsKLSAgICB9IGVsc2Ug ewotCWlmICgoeCA9IGlvY3RsKHR0eWZkLCBUWERFTENELCAicnRzIikpIDwgMCAmJiBlcnJubyAh PSBFSU5WQUwpCi0JICBkZWJ1ZyhGMTAwLCJoYXJkZmxvdyBUWERFTENEIChydHMpIGVycm9yIiwg IiIsIDApOwotICAgIH0KLSNlbmRpZiAvKiBBSVg0MSAqLwotI2Vsc2UJCQkJCS8qIE5vdCBBSVgg UlMvNjAwMCAqLwotCi0jaWZkZWYgQVRUU1YJCQkJLyogU3lzdGVtIFYuLi4gKi8KLQotI2lmZGVm IENLX1NDT1Y1CQkJCS8qIFNDTyBPcGVuIFNlcnZlciA1LjAgKi8KLSNkZWZpbmUgQ0tfU0NPVU5J WAotI2Vsc2UKLSNpZmRlZiBNX1VOSVgJCQkJLyogU0NPIFVOSVggMy4ydjQueCBvciBlYXJsaWVy ICovCi0jZGVmaW5lIENLX1NDT1VOSVgKLSNlbmRpZiAvKiBNX1VOSVggKi8KLSNlbmRpZiAvKiBD S19TQ09WNSAqLwotCi0jaWZkZWYgU0NPX0ZPUkNFX1JUU1hPRkYKLSNpZmRlZiBDS19TQ09VTklY CQkJLyogQnV0IG5vdCBTQ08gT3BlblNlcnZlciA1LjAuNCAqLwotI2lmZGVmIFNDT19PU1I1MDQJ CQkvKiBvciBsYXRlci4uLiAqLwotI3VuZGVmIENLX1NDT1VOSVgKLSNlbmRpZiAvKiBTQ09fT1NS NTA0ICovCi0jZW5kaWYgLyogQ0tfU0NPVU5JWCAqLwotI2VuZGlmIC8qIFNDT19GT1JDRV9SVFNY T0ZGICovCi0KLSNpZmRlZiBDS19TQ09VTklYCi0jaWZkZWYgUE9TSVgKLSAgICBzdHJ1Y3QgdGVy bWlvcyB0ZW1wOwotI2lmZGVmIE5FVENNRAotICAgIGlmICh0dHBpcGUpIHJldHVybigwKTsKLSNl bmRpZiAvKiBORVRDTUQgKi8KLSNpZmRlZiBORVRQVFkKLSAgICBpZiAodHRwdHkpIHJldHVybigw KTsKLSNlbmRpZiAvKiBORVRQVFkgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ0dGhmbG93IFNDT1VOSVgg UE9TSVggZW50cnkgc3RhdHVzIiwiIixzdGF0dXMpOwotICAgIGVycm5vID0gMDsKLSAgICB4ID0g dGNnZXRhdHRyKHR0eWZkLCAmdGVtcCk7Ci0gICAgZGVidWcoRjExMSwidHRoZmxvdyBTQ08gVU5J WCBQT1NJWCB0Y2dldGF0dHIiLGNraXRvYSh4KSxlcnJubyk7Ci0jZWxzZSAvKiBQT1NJWCAqLwot ICAgIHN0cnVjdCB0ZXJtaW8gdGVtcDsKLSNpZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaXBlKSBy ZXR1cm4oMCk7Ci0jZW5kaWYgLyogTkVUQ01EICovCi0jaWZkZWYgTkVUUFRZCi0gICAgaWYgKHR0 cHR5KSByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTkVUUFRZICovCi0gICAgZGVidWcoRjEwMSwidHRo ZmxvdyBTQ09VTklYIG5vbi1QT1NJWCBlbnRyeSBzdGF0dXMiLCIiLHN0YXR1cyk7Ci0gICAgeCA9 IGlvY3RsKHR0eWZkLCBUQ0dFVEEsICZ0ZW1wKTsKLSAgICBkZWJ1ZyhGMTExLCJ0dGhmbG93IFND TyBVTklYIG5vbi1QT1NJWCBUQ0dFVEEiLGNraXRvYSh4KSxlcnJubyk7Ci0jZW5kaWYgLyogUE9T SVggKi8KLS8qCi0gIFRoaXMgaXMgbm90IHJlYWxseSBQT1NJWCwgc2luY2UgUE9TSVggZG9lcyBu b3QgZGVhbCB3aXRoIGhhcmR3YXJlIGZsb3cKLSAgY29udHJvbCwgYnV0IHdlIGFyZSB1c2luZyB0 aGUgUE9TSVggQVBJcy4gIEluIGZhY3QsIFJUU0ZMT1cgYW5kIENUU0ZMT1cKLSAgYXJlIGRlZmlu ZWQgaW4gdGVybWlvLmgsIGJ1dCB3aXRoaW4gI2lmbmRlZiBfUE9TSVhfU09VUkNFLi4jZW5kaWYu ICBTbwotICBsZXQncyB0cnkgZm9yY2luZyB0aGVpciBkZWZpbml0aW9ucyBoZXJlLgotKi8KLSNp Zm5kZWYgQ1RTRkxPVwotI2RlZmluZSBDVFNGTE9XIDAwMjAwMDAKLSAgICBkZWJ1ZyhGMTAxLCJ0 dGhmbG93IFNDTyBkZWZpbmluZyBDVFNGTE9XIiwiIixDVFNGTE9XKTsKLSNlbHNlCi0gICAgZGVi dWcoRjEwMSwidHRoZmxvdyBTQ08gQ1RTRkxPVyIsIiIsQ1RTRkxPVyk7Ci0jZW5kaWYgLyogQ1RT RkxPVyAqLwotI2lmbmRlZiBSVFNGTE9XCi0jZGVmaW5lIFJUU0ZMT1cgMDA0MDAwMAotICAgIGRl YnVnKEYxMDEsInR0aGZsb3cgU0NPIGRlZmluaW5nIFJUU0ZMT1ciLCIiLFJUU0ZMT1cpOwotI2Vs c2UKLSAgICBkZWJ1ZyhGMTAxLCJ0dGhmbG93IFNDTyBSVFNGTE9XIiwiIixSVFNGTE9XKTsKLSNl bmRpZiAvKiBSVFNGTE9XICovCi0jaWZuZGVmIE9SVFNGTAotI2RlZmluZSBPUlRTRkwgMDEwMDAw MAotICAgIGRlYnVnKEYxMDEsInR0aGZsb3cgU0NPIGRlZmluaW5nIE9SVFNGTCIsIiIsT1JUU0ZM KTsKLSNlbHNlCi0gICAgZGVidWcoRjEwMSwidHRoZmxvdyBTQ08gT1JUU0ZMIiwiIixPUlRTRkwp OwotI2VuZGlmIC8qIE9SVFNGTCAqLwotCi0gICAgaWYgKHggIT0gLTEpIHsKLQlpZiAoc3RhdHVz KSB7CQkJLyogVHVybiBpdCBPTiAqLwotCSAgICB0ZW1wLmNfY2ZsYWcgfD0gUlRTRkxPV3xDVFNG TE9XOwotCSAgICBhdHRycy0+Y19jZmxhZyB8PSBSVFNGTE9XfENUU0ZMT1c7Ci0jaWZkZWYgT1JU U0ZMCi0JICAgIHRlbXAuY19jZmxhZyAmPSB+T1JUU0ZMOwotCSAgICBhdHRycy0+Y19jZmxhZyAm PSB+T1JUU0ZMOwotI2VuZGlmIC8qIE9SVFNGTCAqLwotCSAgICB0ZW1wLmNfaWZsYWcgJj0gfihJ WE9OfElYT0ZGfElYQU5ZKTsKLQkgICAgYXR0cnMtPmNfaWZsYWcgJj0gfihJWE9OfElYT0ZGfElY QU5ZKTsKLQl9IGVsc2UgewkJCS8qIFR1cm4gaXQgT0ZGICovCi0jaWZkZWYgT1JUU0ZMCi0JICAg IHRlbXAuY19jZmxhZyAmPSB+KFJUU0ZMT1d8Q1RTRkxPV3xPUlRTRkwpOwotCSAgICBhdHRycy0+ Y19jZmxhZyAmPSB+KFJUU0ZMT1d8Q1RTRkxPV3xPUlRTRkwpOwotI2Vsc2UgIC8qIE9SVFNGTCAq LwotCSAgICB0ZW1wLmNfY2ZsYWcgJj0gfihSVFNGTE9XfENUU0ZMT1cpOwotCSAgICBhdHRycy0+ Y19jZmxhZyAmPSB+KFJUU0ZMT1d8Q1RTRkxPVyk7Ci0jZW5kaWYgLyogT1JUU0ZMICovCi0JfQot I2lmZGVmIFBPU0lYCi0JeCA9IHRjc2V0YXR0cih0dHlmZCwgVENTQURSQUlOLCAmdGVtcCk7Ci0j ZWxzZQotCXggPSBpb2N0bCh0dHlmZCwgVENTRVRBLCAmdGVtcCk7Ci0jZW5kaWYgLyogUE9TSVgg Ki8KLQlkZWJ1ZyhGMTAxLCJ0dGhmbG93IFNDTyBzZXQgbW9kZXMiLCIiLHgpOwotICAgIH0KLSNl bHNlIC8qIE5vdCBTQ08gVU5JWCAqLwotI2lmZGVmIE5FVENNRAotICAgIGlmICh0dHBpcGUpIHJl dHVybigwKTsKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSNpZmRlZiBORVRQVFkKLSAgICBpZiAodHRw dHkpIHJldHVybigwKTsKLSNlbmRpZiAvKiBORVRQVFkgKi8KLSAgICBpZiAoIXN0YXR1cykgewkJ CS8qIFR1cm4gaXQgT0ZGICovCi0jaWZkZWYgUlRTWE9GRgotCWRlYnVnKEYxMDAsInR0aGZsb3cg QVRUU1YgUlRTL0NUUyBPRkYiLCIiLDApOwotCXJjdHN4LnhfaGZsYWcgJj0gfihSVFNYT0ZGfENU U1hPTik7Ci0jaWZkZWYgVENTRVRYCi0JeCA9IGlvY3RsKHR0eWZkLFRDU0VUWCwmcmN0c3gpOwot CWRlYnVnKEYxMDEsInR0aGZsb3cgQVRUU1YgVENTRVRYIE9GRiIsIiIseCk7Ci0jZWxzZQotCXgg PSAtMQotCWRlYnVnKEYxMDAsInR0aGZsb3cgVENTRVRYIG5vdCBkZWZpbmVkIiwiIiwwKTsKLSNl bmRpZiAvKiBUQ1NFVFggKi8KLSNlbHNlCi0JZGVidWcoRjEwMCwidHRoZmxvdyBBVFRTViBSVFNY T0ZGIG5vdCBkZWZpbmVkIiwiIiwwKTsKLSNlbmRpZiAvKiBSVFNYT0ZGICovCi0jaWZkZWYgRFRS WE9GRgotCWRlYnVnKEYxMDAsInR0aGZsb3cgQVRUU1YgRFRSL0NEIE9GRiIsIiIsMCk7Ci0JcmN0 c3gueF9oZmxhZyAmPSB+KERUUlhPRkZ8Q0RYT04pOwotCXggPSBpb2N0bCh0dHlmZCxUQ1NFVFgs JnJjdHN4KTsKLQlkZWJ1ZyhGMTAxLCJ0dGhmbG93IEFUVFNWIERUUlhPRkYgT0ZGIiwiIix4KTsK LSNlbHNlCi0JZGVidWcoRjEwMCwidHRoZmxvdyBBVFRTViBEVFJYT0ZGIG5vdCBkZWZpbmVkIiwi IiwwKTsKLSNlbmRpZiAvKiBEVFJYT0ZGICovCi0gICAgfSBlbHNlIHsJCQkJLyogVHVybiBpdCBP Ti4gKi8KLQlpZiAoZmxvdyA9PSBGTE9fUlRTQykgewkvKiBSVFMvQ1RTIEZsb3cgY29udHJvbC4u LiAqLwotCSAgICBkZWJ1ZyhGMTAwLCJ0dGhmbG93IEFUVFNWIFJUUy9DVFMgT04iLCIiLDApOwot I2lmZGVmIFJUU1hPRkYKLQkgICAgLyogVGhpcyBpcyB0aGUgcHJlZmVycmVkIHdheSwgYWNjb3Jk aW5nIHRvIFNWSUQzICovCi0jaWZkZWYgVENHRVRYCi0JICAgIHggPSBpb2N0bCh0dHlmZCxUQ0dF VFgsJnJjdHN4KTsKLQkgICAgZGVidWcoRjEwMSwidHRoZmxvdyBUQ0dFVFgiLCIiLHgpOwotCSAg ICBpZiAoeCA+IC0xKSB7Ci0JCXJjdHN4LnhfaGZsYWcgfD0gUlRTWE9GRiB8IENUU1hPTjsKLQkJ eCA9IGlvY3RsKHR0eWZkLFRDU0VUWCwmcmN0c3gpOwotCQlkZWJ1ZyhGMTAwLCJ0dGhmbG93IEFU VFNWIGlvY3RsIiwiIix4KTsKLQkgICAgfQotI2Vsc2UKLQkgICAgZGVidWcoRjEwMCwidHRoZmxv dyBUQ0dFVFggbm90IGRlZmluZWQiLCIiLDApOwotCSAgICB4ID0gLTEKLSNlbmRpZiAvKiBUQ0dF VFggKi8KLSNlbHNlCi0JICAgIGRlYnVnKEYxMDAsInR0aGZsb3cgUlRTWE9GRiBub3QgZGVmaW5l ZCIsIiIsMCk7Ci0JICAgIHggPSAtMTsKLSNlbmRpZiAvKiBSVFNYT0ZGICovCi0JfSBlbHNlIGlm IChmbG93ID09IEZMT19EVFJDKSB7CS8qIERUUi9DRCBGbG93IGNvbnRyb2wuLi4gKi8KLQkgICAg ZGVidWcoRjEwMCwidHRoZmxvdyBBVFRTViBEVFIvQ0QgT04iLCIiLDApOwotI2lmZGVmIERUUlhP RkYKLQkgICAgLyogVGhpcyBpcyBzdHJhaWdodCBvdXQgb2YgU1ZJRCBSNCAqLwotCSAgICBpZiAo aW9jdGwodHR5ZmQsVENHRVRYLCZyY3RzeCkgPiAtMSkgewotCQlyY3RzeC54X2hmbGFnICY9IH4o RFRSWE9GRnxDRFhPTik7Ci0JCXggPSBpb2N0bCh0dHlmZCxUQ1NFVFgsJnJjdHN4KTsKLQkgICAg fQotI2Vsc2UKLQkgICAgZGVidWcoRjEwMCwidHRoZmxvdyBBVFRTViBEVFJYT0ZGIG5vdCBkZWZp bmVkIiwiIiwwKTsKLQkgICAgeCA9IC0xOwotI2VuZGlmIC8qIERUUlhPRkYgKi8KLQl9Ci0gICAg fQotI2VuZGlmIC8qIENLX1NDT1VOSVggKi8KLQotI2Vsc2UgLyogbm90IFN5c3RlbSBWLi4uICov Ci0KLSNpZmRlZiBDS19EVFJDVFMKLSNpZmRlZiBMRE9EVFIKLSNpZmRlZiBMRE9DVFMKLSNpZmRl ZiBORVRDTUQKLSAgICBpZiAodHRwaXBlKSByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTkVUQ01EICov Ci0jaWZkZWYgTkVUUFRZCi0gICAgaWYgKHR0cHR5KSByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTkVU UFRZICovCi0gICAgeCA9IExET0RUUiB8IExET0NUUzsJCS8qIEZvdW5kIG9ubHkgb24gVVRFSz8g Ki8KLSAgICBpZiAoZmxvdyA9PSBGTE9fRFRSVCAmJiBzdGF0dXMpIHsJLyogVXNlIGhhcmR3YXJl IGZsb3cgY29udHJvbCAqLwotCWlmIChsbW9kZWYpIHsKLQkgICAgeCA9IGlvY3RsKHR0eWZkLFRJ T0NMQklTLCZ4KTsKLQkgICAgaWYgKHggPCAwKSB7Ci0JICAgICAgICBkZWJ1ZyhGMTAwLCJoYXJk ZmxvdyBUSU9DTEJJUyBlcnJvciIsIiIsMCk7Ci0JICAgIH0gZWxzZSB7Ci0JCWxtb2RlZisrOwot CQlkZWJ1ZyhGMTAwLCJoYXJkZmxvdyBUSU9DTEJJUyBvayIsIiIsMCk7Ci0JICAgIH0KLQl9Ci0g ICAgfSBlbHNlIHsKLQlpZiAobG1vZGVmKSB7Ci0JICAgIHggPSBpb2N0bCh0dHlmZCxUSU9DTEJJ QywmeCk7Ci0JICAgIGlmICh4IDwgMCkgewotCSAgICAgICAgZGVidWcoRjEwMCwiaGFyZGZsb3cg VElPQ0xCSUMgZXJyb3IiLCIiLDApOwotCSAgICB9IGVsc2UgewotCQlsbW9kZWYrKzsKLQkJZGVi dWcoRjEwMCwiaGFyZGZsb3cgVElPQ0xCSUMgb2siLCIiLDApOwotCSAgICB9Ci0JfQotICAgIH0K LSNlbmRpZiAvKiBMRE9EVFIgKi8KLSNlbmRpZiAvKiBMRE9DVFMgKi8KLSNlbmRpZiAvKiBDS19E VFJDVFMgKi8KLSNlbmRpZiAvKiBBVFRTViAqLwotI2VuZGlmIC8qIEFJWFJTICovCi0jZW5kaWYg LyogU1VOT1M0ICovCi0jZW5kaWYgLyogUU5YICovCi0jZW5kaWYgLyogUE9TSVhfQ1JUU0NUUyAq LwotI2VuZGlmIC8qIFNVTk9TNDEgKi8KLQotI2Vsc2UgLyogT1hPUyAqLwotCi0gICAgc3RydWN0 IHRlcm1pb3MgdGVtcDsJCS8qIE9saXZldHRpIFgvT1MgLi4uICovCi0KLSNpZmRlZiBORVRDTUQK LSAgICBpZiAodHRwaXBlKSByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTkVUQ01EICovCi0jaWZkZWYg TkVUUFRZCi0gICAgaWYgKHR0cHR5KSByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTkVUUFRZICovCi0g ICAgeCA9IGlvY3RsKHR0eWZkLFRDR0VUUywmdGVtcCk7Ci0gICAgaWYgKHggPT0gMCkgewotCXRl bXAuY19jZmxhZyAmPSB+KENSVFNDVFN8Q0RUUkNUU3xDQlJLRkxPV3xDRFRSRFNSfENSVFNEU1Ip OwotCWlmIChzdGF0dXMpIHsKLQkgICAgc3dpdGNoIChmbG93KSB7Ci0JICAgICAgY2FzZSBGTE9f UlRTQzogdGVtcC5jX2NmbGFnIHw9IENSVFNDVFM7IC8qIFJUUy9DVFMgKGhhcmQpICovCi0JCWJy ZWFrOwotCSAgICAgIGNhc2UgRkxPX0RUUlQ6IHRlbXAuY19jZmxhZyB8PSBDRFRSQ1RTOyAvKiBE VFIvQ1RTIChoYXJkKSAqLwotCQlicmVhazsKLQkgICAgfQotCX0KLQl4ID0gaW9jdGwodHR5ZmQs VENTRVRTLCZ0ZW1wKTsKLSAgICB9Ci0jZW5kaWYgLyogT1hPUyAqLwotICAgIHJldHVybih4KTsK LQotI2VuZGlmIC8qIFBsYW45ICovCi19Ci0KLS8qICBUIFQgUCBLIFQgIC0tICBDb25kaXRpb24g dGhlIGNvbW11bmljYXRpb24gbGluZSBmb3IgcGFja2V0cyAqLwotLyogICAgICAgICAgICAgICAg IG9yIGZvciBtb2RlbSBkaWFsaW5nICovCi0KLS8qCi0gIElmIGNhbGxlZCB3aXRoIHNwZWVkID4g LTEsIGFsc28gc2V0IHRoZSBzcGVlZC4KLSAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZh aWx1cmUuCi0KLSAgTk9URTogdGhlICJ4ZmxvdyIgcGFyYW1ldGVyIGlzIHN1cHBvc2VkIHRvIGJl IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQKLSAgdHlwZSBvZiBmbG93IGNvbnRyb2wsIGJ1dCBmb3Ig aGlzdG9yaWNhbCByZWFzb25zLCB0aGlzIHBhcmFtZXRlciBpcyBhbHNvCi0gIHVzZWQgdG8gaW5k aWNhdGUgdGhhdCB3ZSBhcmUgZGlhbGluZy4gIFRoZXJlZm9yZSwgd2hlbiB0aGUgdHJ1ZSBmbG93 Ci0gIGNvbnRyb2wgc2V0dGluZyBpcyBuZWVkZWQsIHdlIGFjY2VzcyB0aGUgZXh0ZXJuYWwgdmFy aWFibGUgImZsb3ciLCByYXRoZXIKLSAgdGhhbiB0cnVzdGluZyBvdXIgInhmbG93IiBhcmd1bWVu dC4KLSovCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotdHRwa3QobG9uZyBzcGVlZCwgaW50IHhmbG93 LCBpbnQgcGFyaXR5KQotI2Vsc2UKLXR0cGt0KHNwZWVkLHhmbG93LHBhcml0eSkgbG9uZyBzcGVl ZDsgaW50IHhmbG93LCBwYXJpdHk7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHR0cGt0ICov IHsKLSNpZm5kZWYgTk9MT0NBTAotICAgIGludCBzMjsKLSAgICBpbnQgcyA9IC0xOwotI2VuZGlm IC8qIE5PTE9DQUwgKi8KLSAgICBpbnQgeDsKLSAgICBleHRlcm4gaW50IGZsb3c7CQkJLyogUkVB TCBmbG93LWNvbnRyb2wgc2V0dGluZyAqLwotCi0gICAgaWYgKHR0eWZkIDwgMCkgcmV0dXJuKC0x KTsgICAgICAgICAgLyogTm90IG9wZW4uICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJ0dHBrdCBwYXJp dHkiLCIiLHBhcml0eSk7Ci0gICAgZGVidWcoRjEwMSwidHRwa3QgeGZsb3ciLCIiLHhmbG93KTsK LSAgICBkZWJ1ZyhGMTAxLCJ0dHBrdCBzcGVlZCIsIiIsKGludCkgc3BlZWQpOwotCi0gICAgdHRw cnR5ID0gcGFyaXR5OyAgICAgICAgICAgICAgICAgICAgLyogTGV0IG90aGVyIHR0IGZ1bmN0aW9u cyBzZWUgdGhlc2UuICovCi0gICAgdHRzcGVlZCA9IHNwZWVkOwkJCS8qIE1ha2UgZ2xvYmFsIGNv cHkgZm9yIHRoaXMgbW9kdWxlICovCi0gICAgdHRwbXNrID0gdHRwcnR5ID8gMDE3NyA6IDAzNzc7 CS8qIFBhcml0eSBzdHJpcHBpbmcgbWFzayAqLwotI2lmZGVmIFBBUlNFTlNFCi0gICAgbmVlZHBj aGsgPSB0dHBydHkgPyAwIDogMTsJCS8qIFBhcml0eSBjaGVjayBuZWVkZWQ/ICovCi0jZWxzZQot ICAgIG5lZWRwY2hrID0gMDsKLSNlbmRpZiAvKiBQQVJTRU5TRSAqLwotCi0gICAgZGVidWcoRjEw MSwidHRwa3QgdHRwbXNrIiwiIix0dHBtc2spOwotICAgIGRlYnVnKEYxMDEsInR0cGt0IG5ldGNv bm4iLCIiLG5ldGNvbm4pOwotCi0jaWZkZWYgTkVUQ09OTgkJCQkvKiBObyBtb2RlLWNoYW5naW5n IGZvciB0ZWxuZXQgKi8KLSAgICBpZiAobmV0Y29ubikgewotI2lmZGVmIFRDUFNPQ0tFVAotI2lm ZGVmIFRDUF9OT0RFTEFZCi0gICAgICAgIGlmICh0dG5ldCA9PSBORVRfVENQQikgewkvKiBCdXQg dHVybiBvZmYgTmFnbGUgKi8KLSAgICAgICAgICAgIGV4dGVybiBpbnQgdGNwX25vZGVsYXk7Ci0g ICAgICAgICAgICBub2RlbGF5X3NhdiA9IHRjcF9ub2RlbGF5OwotICAgICAgICAgICAgbm9fZGVs YXkodHR5ZmQsMSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBUQ1BfTk9ERUxBWSAqLwotI2lmZGVm IFROX0NPTVBPUlQKLSAgICAgICAgaWYgKGlzdG5jb21wb3J0KCkpIHsKLSAgICAgICAgICAgIGlu dCByYyA9IC0xOwotICAgICAgICAgICAgaWYgKHR2dGZsZyA9PSAwICYmIHNwZWVkID09IHR0c3Bl ZWQgJiYgZmxvdyA9PSB0dGZsb3cKLSAgICAgICAgICAgICAgICAgLyogJiYgdHRjYXJyID09IGN1 cmNhcnIgKi8gKSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMCwidHRwa3QgbW9kZXMgYWxy ZWFkeSBzZXQsIHNraXBwaW5nLi4uIiwiIiwwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oMCk7 CQkvKiBBbHJlYWR5IGJlZW4gY2FsbGVkLiAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAg aWYgKGZsb3cgIT0gdHRmbG93KSB7Ci0gICAgICAgICAgICAgICAgaWYgKChyYyA9IHRuc2V0Zmxv dyhmbG93KSkgPCAwKQotCQkgIHJldHVybihyYyk7Ci0gICAgICAgICAgICAgICAgdHRmbG93ID0g ZmxvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzcGVlZCAhPSB0dHNwZWVkKSB7 Ci0gICAgICAgICAgICAgICAgaWYgKHNwZWVkIDw9IDApIAotCQkgIHNwZWVkID0gdG5jX2dldF9i YXVkKCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoKHJjID0gdG5jX3NldF9iYXVkKHNwZWVk KSkgPCAwKQotCQkgIHJldHVybihyYyk7Ci0gICAgICAgICAgICAgICAgdHRzcGVlZCA9IHNwZWVk OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdG5jX3NldF9kYXRhc2l6ZSg4KTsKLQkgICAg dG5jX3NldF9zdG9wc2l6ZShzdG9wYml0cyk7Ci0KLSNpZmRlZiBIV1BBUklUWQotICAgICAgICAg ICAgaWYgKGh3cGFyaXR5KSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChod3Bhcml0eSkgewot CQkgIGNhc2UgJ2UnOgkJCS8qIEV2ZW4gKi8KLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEw MCwidHRyZXMgOCBiaXRzICsgZXZlbiBwYXJpdHkiLCIiLDApOwotICAgICAgICAgICAgICAgICAg ICB0bmNfc2V0X3Bhcml0eSgzKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0JCSAgY2Fz ZSAnbyc6CQkJLyogT2RkICovCi0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0cmVz IDggYml0cyArIG9kZCBwYXJpdHkiLCIiLDApOwotICAgICAgICAgICAgICAgICAgICB0bmNfc2V0 X3Bhcml0eSgyKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0JCSAgY2FzZSAnbSc6CQkJ LyogTWFyayAqLwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dHJlcyA4IGJpdHMg KyBpbnZhbGlkIHBhcml0eTogbWFyayIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgICAgIHRuY19z ZXRfcGFyaXR5KDQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQkJICBjYXNlICdzJzoJ CQkvKiBTcGFjZSAqLwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dHJlcyA4IGJp dHMgKyBpbnZhbGlkIHBhcml0eTogc3BhY2UiLCIiLDApOwotICAgICAgICAgICAgICAgICAgICB0 bmNfc2V0X3Bhcml0eSg1KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIAotI2VuZGlmIC8qIEhXUEFSSVRZICovCi0JICAg IHsKLSAgICAgICAgICAgICAgICB0bmNfc2V0X3Bhcml0eSgxKTsgICAgICAgICAgICAgIC8qIE5v bmUgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHR2dGZsZyA9IDA7Ci0gICAgICAgICAg ICByZXR1cm4oMCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0jZW5kaWYg LyogVENQU09DS0VUICovCi0gICAgICAgIHR2dGZsZyA9IDA7Ci0gICAgICAgIHJldHVybigwKTsK LSAgICB9Ci0jZW5kaWYgLyogTkVUQ09OTiAqLwotI2lmZGVmIE5FVENNRAotICAgIGlmICh0dHBp cGUpIHJldHVybigwKTsKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSNpZmRlZiBORVRQVFkKLSAgICBp ZiAodHRwdHkpIHJldHVybigwKTsKLSNlbmRpZiAvKiBORVRQVFkgKi8KLQotI2lmbmRlZiBQbGFu OQotICAgIGlmICh0dGZkZmxnICYmICFpc2F0dHkodHR5ZmQpKSByZXR1cm4oMCk7Ci0jZW5kaWYg LyogUGxhbjkgKi8KLQotI2lmZGVmIENPSEVSRU5UCi0jZGVmaW5lIFNWT1JQT1NJWAotI2VuZGlm IC8qIENPSEVSRU5UICovCi0KLSNpZm5kZWYgU1ZPUlBPU0lYCQkJLyogQmVya2VsZXksIFY3LCBl dGMuICovCi0jaWZkZWYgTFBBU1M4Ci0vKgotIEZvciBzb21lIHJlYXNvbiwgd2l0aCBCU0QgdGVy bWluYWwgZHJpdmVycywgeW91IGNhbid0IHNldCBGTE9XIHRvIFhPTi9YT0ZGCi0gYWZ0ZXIgaGF2 aW5nIHByZXZpb3VzbHkgc2V0IGl0IHRvIE5PTkUgd2l0aG91dCBjbG9zaW5nIGFuZCByZW9wZW5p bmcgdGhlCi0gZGV2aWNlLiAgVW5sZXNzIHRoZXJlJ3Mgc29tZXRoaW5nIEkgb3Zlcmxvb2tlZCBi ZWxvdy4uLgotKi8KLSAgICBpZiAodHRmbG93ID09IEZMT19OT05FICYmIGZsb3cgPT0gRkxPX1hP TlggJiYgeGxvY2FsID09IDApIHsKLQlkZWJ1ZyhGMTAxLCJ0dHBrdCBleGVjdXRpbmcgaG9ycmli bGUgZmxvdyBrbHVkZ2UiLCIiLDApOwotCXR0Y2xvcygwKTsJCQkvKiBDbG9zZSBpdCAqLwotCXgg PSAwOwotCXR0b3Blbih0dG5tc3YsJngsdHRtZG0sMCk7CS8qIE9wZW4gaXQgYWdhaW4gKi8KLSAg ICB9Ci0jZW5kaWYgLyogTFBBU1M4ICovCi0jZW5kaWYgLyogU1ZPUlBPU0lYICovCi0KLSNpZmRl ZiBDT0hFUkVOVAkJCQkvKiBUaGlzIG11c3QgYmUgdmVzdGlnaWFsIHNpbmNlIHdlICovCi0jdW5k ZWYgU1ZPUlBPU0lYCQkJLyogcmV2ZXJzZSBpdCBhIGZldyBsaW5lcyBiZWxvdy4uLiAqLwotI2Vu ZGlmIC8qIENPSEVSRU5UICovCi0KLSAgICBpZiAoeGZsb3cgIT0gRkxPX0RJQUwgJiYgeGZsb3cg IT0gRkxPX0RJQVgpCi0gICAgICB0dGZsb3cgPSB4ZmxvdzsJCQkvKiBOb3cgbWFrZSB0aGlzIGF2 YWlsYWJsZSB0b28uICovCi0KLSNpZm5kZWYgTk9MT0NBTAotICAgIGlmICh4bG9jYWwpIHsKLQlz MiA9IChpbnQpIChzcGVlZCAvIDEwTCk7CS8qIENvbnZlcnQgYnBzIHRvIGNwcyAqLwotCWRlYnVn KEYxMDEsInR0cGt0IGNhbGxpbmcgdHRzc3BkIiwiIixzMik7Ci0JcyA9IHR0c3NwZChzMik7CQkJ LyogQ2hlY2sgYW5kIHNldCB0aGUgc3BlZWQgKi8KLQlkZWJ1ZyhGMTAxLCJ0dHBrdCB0dHNzcGQg cmVzdWx0IiwiIixzKTsKLSAJY2FycmN0bCgmdHRyYXcsIHhmbG93ICE9IEZMT19ESUFMIC8qIENh cnJpZXIgY29udHJvbCAqLwotCQkmJiAodHRjYXJyID09IENBUl9PTiB8fCAodHRjYXJyID09IENB Ul9BVVQgJiYgdHRtZG0gIT0gMCkpKTsKLQl0dnRmbGcgPSAwOwkJCS8qIFNvIHR0dnQoKSB3aWxs IHdvcmsgbmV4dCB0aW1lICovCi0gICAgfQotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmZGVm IENPSEVSRU5UCi0jZGVmaW5lIFNWT1JQT1NJWAotI2VuZGlmIC8qIENPSEVSRU5UICovCi0KLSNp Zm5kZWYgU1ZPUlBPU0lYCQkJLyogQlNEIHNlY3Rpb24gKi8KLSAgICBpZiAoZmxvdyA9PSBGTE9f UlRTQyB8fAkJLyogSGFyZHdhcmUgZmxvdyBjb250cm9sICovCi0JZmxvdyA9PSBGTE9fRFRSQyB8 fAotCWZsb3cgPT0gRkxPX0RUUlQpIHsKLQl0dGhmbG93KGZsb3csIDEsICZ0dHJhdyk7Ci0JZGVi dWcoRjEwMCwidHRwa3QgaGFyZCBmbG93LCBUQU5ERU0gb2ZmLCBSQVcgb24iLCIiLDApOwotCXR0 cmF3LnNnX2ZsYWdzICY9IH5UQU5ERU07CS8qIFR1cm4gb2ZmIHNvZnR3YXJlIGZsb3cgY29udHJv bCAqLwotCXR0cmF3LnNnX2ZsYWdzIHw9IFJBVzsJCS8qIEVudGVyIHJhdyBtb2RlICovCi0gICAg fSBlbHNlIGlmIChmbG93ID09IEZMT19OT05FKSB7CS8qIE5vIGZsb3cgY29udHJvbCAqLwotCWRl YnVnKEYxMDAsInR0cGt0IG5vIGZsb3csIFRBTkRFTSBvZmYsIFJBVyBvbiIsIiIsMCk7Ci0JdHRy YXcuc2dfZmxhZ3MgJj0gflRBTkRFTTsJLyogVHVybiBvZmYgc29mdHdhcmUgZmxvdyBjb250cm9s ICovCi0JdHRoZmxvdyhmbG93LCAwLCAmdHRyYXcpOwkvKiBUdXJuIG9mZiBhbnkgaGFyZHdhcmUg Zi9jIHRvbyAqLwotCXR0cmF3LnNnX2ZsYWdzIHw9IFJBVzsJCS8qIEVudGVyIHJhdyBtb2RlICov Ci0gICAgfSBlbHNlIGlmIChmbG93ID09IEZMT19LRUVQKSB7CS8qIEtlZXAgZGV2aWNlJ3Mgb3Jp Z2luYWwgc2V0dGluZyAqLwotCWRlYnVnKEYxMDAsInR0cGt0IGtlZXBpbmcgb3JpZ2luYWwgVEFO REVNIiwiIiwwKTsKLQl0dHJhdy5zZ19mbGFncyAmPSB+VEFOREVNOwotCXR0cmF3LnNnX2ZsYWdz IHw9ICh0dG9sZC5zZ19mbGFncyAmIFRBTkRFTSk7Ci0JLyogTk9URTogV2Ugc2hvdWxkIGFsc28g aGFuZGxlIGhhcmR3YXJlIGZsb3cgY29udHJvbCBoZXJlISAqLwotICAgIH0KLQotLyogU0VUIEZM T1cgWE9OL1hPRkYgaXMgaW4gZWZmZWN0LCBvciBTRVQgRkxPVyBLRUVQIHJlc3VsdGVkIGluIFhv bi9Yb2ZmICovCi0KLSAgICBpZiAoKGZsb3cgPT0gRkxPX1hPTlgpIHx8ICh0dHJhdy5zZ19mbGFn cyAmIFRBTkRFTSkpIHsKLQlkZWJ1ZyhGMTAwLCJ0dHBrdCB0dXJuaW5nIG9uIFRBTkRFTSIsIiIs MCk7Ci0JdHRyYXcuc2dfZmxhZ3MgfD0gVEFOREVNOwkvKiBTbyBhc2sgZm9yIGl0LiAqLwotCi0j aWZkZWYgTFBBU1M4CQkJCS8qIENhbiBwYXNzIDgtYml0IGRhdGEgdGhyb3VnaD8gKi8KLS8qIElm IHRoZSBMUEFTUzggbG9jYWwgbW9kZSBpcyBhdmFpbGFibGUsIHRoZW4gZmxvdyBjb250cm9sIGNh biBhbHdheXMgICovCi0vKiBiZSB1c2VkLCBldmVuIGlmIHBhcml0eSBpcyBub25lIGFuZCB3ZSBh cmUgdHJhbnNmZXJyaW5nIDgtYml0IGRhdGEuICAqLwotLyogQnV0IHdlIG9ubHkgbmVlZCB0byBk byBhbGwgdGhpcyBpZiBYb24vWG9mZiBpcyByZXF1ZXN0ZWQuICovCi0vKiBCVVQuLi4gdGhpcyB0 ZW5kcyBub3QgdG8gd29yayB0aHJvdWdoIElQIG9yIExBVCBjb25uZWN0aW9ucywgdGVybWluYWwg Ki8KLS8qIHNlcnZlcnMsIHRlbG5ldCwgcmxvZ2luLCBldGMsIHNvIGl0IGlzIGN1cnJlbnRseSBk aXNhYmxlZC4gKi8KLQl4ID0gTFBBU1M4OwkJCS8qIElmIExQQVNTOCBkZWZpbmVkLCB0aGVuICov Ci0JZGVidWcoRjEwMCwidHRwa3QgZXhlY3V0aW5nIExQQVNTOCBjb2RlIiwiIiwwKTsKLQlpZiAo bG1vZGVmKSB7CQkJLyogVElPQ0xCSVMgbXVzdCBiZSB0b28uICovCi0JICAgIHggPSBpb2N0bCh0 dHlmZCxUSU9DTEJJUywmeCk7IC8qIFRyeSB0byBzZXQgTFBBU1M4LiAqLwotCSAgICBpZiAoeCA8 IDApIHsKLQkJZGVidWcoRjEwMCwidHRwa3QgVElPQ0xCSVMgZXJyb3IiLCIiLDApOwotCSAgICB9 IGVsc2UgewotCQlsbW9kZWYrKzsKLQkJZGVidWcoRjEwMCwidHRwa3QgVElPQ0xCSVMgb2siLCIi LDApOwotCSAgICB9Ci0JfQotLyoKLSBCdXQgaWYgd2UgdXNlIExQQVNTOCBtb2RlLCB3ZSBtdXN0 IGV4cGxpY2l0bHkgdHVybiBvZmYKLSB0ZXJtaW5hbCBpbnRlcnJ1cHRzIG9mIGFsbCBraW5kcy4K LSovCi0jaWZkZWYgVElPQ0dFVEMJCQkJLyogTm90IHJhd21vZGUsICovCi0JaWYgKHRjaGFyZiAm JiAoeGxvY2FsID09IDApKSB7CS8qIG11c3QgdHVybiBvZmYgKi8KLQkgICAgdGNobm9pLnRfaW50 cmMgPSAtMTsJLyogaW50ZXJydXB0IGNoYXJhY3RlciAqLwotCSAgICB0Y2hub2kudF9xdWl0YyA9 IC0xOwkvKiBhbmQgcXVpdCBjaGFyYWN0ZXIuICovCi0JICAgIHRjaG5vaS50X3N0YXJ0YyA9IDE3 OwkvKiBNYWtlIHN1cmUgeG9uICovCi0JICAgIHRjaG5vaS50X3N0b3BjID0gMTk7CS8qIGFuZCB4 b2ZmIG5vdCBpZ25vcmVkLiAqLwotI2lmbmRlZiBOT0JSS0MKLQkgICAgdGNobm9pLnRfZW9mYyA9 IC0xOwkJLyogZW9mIGNoYXJhY3Rlci4gKi8KLQkgICAgdGNobm9pLnRfYnJrYyA9IC0xOwkJLyog YnJrIGNoYXJhY3Rlci4gKi8KLSNlbmRpZiAvKiBOT0JSS0MgKi8KLQkgICAgaWYgKGlvY3RsKHR0 eWZkLFRJT0NTRVRDLCZ0Y2hub2kpIDwgMCkgewotCQlkZWJ1ZyhGMTAwLCJ0dHBrdCBUSU9DU0VU QyBmYWlsZWQiLCIiLDApOwotCSAgICB9IGVsc2UgewotCQl0Y2hhcmYgPSAxOwotCQlkZWJ1ZyhG MTAwLCJ0dHBrdCBUSU9DU0VUQyBvayIsIiIsMCk7Ci0JICAgIH0KLSNpZmRlZiBDT01NRU5UCi0v KiBvbmx5IGZvciBwYXJhbm9pZCBkZWJ1Z2dpbmcgKi8KLQkgICAgaWYgKHRjaGFyZikgewotCQlz dHJ1Y3QgdGNoYXJzIGZvbzsKLQkJY2hhciB0Y2hidWZbMTAwXTsKLQkJaW9jdGwoMCxUSU9DR0VU QywmZm9vKTsKLQkJc3ByaW50Zih0Y2hidWYsCi0JCSAgICAiaW50cj0lZCxxdWl0PSVkLCBzdGFy dD0lZCwgc3RvcD0lZCwgZW9mPSVkLCBicms9JWQiLAotCQkgICAgZm9vLnRfaW50cmMsIGZvby50 X3F1aXRjLCBmb28udF9zdGFydGMsCi0JCSAgICBmb28udF9zdG9wYywgZm9vLnRfZW9mYywgIGZv by50X2Jya2MpOwotCQlkZWJ1ZyhGMTEwLCJ0dHBrdCBjaGFycyIsdGNoYnVmLDApOwotCSAgICB9 Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCX0KLQl0dHJhdy5zZ19mbGFncyB8PSBDQlJFQUs7CS8q IE5lZWRlZCBmb3IgdW5rbm93biByZWFzb24gKi8KLSNlbmRpZiAvKiBUSU9DR0VUQyAqLwotCi0v KiBQcmV2ZW50IHN1c3BlbmQgZHVyaW5nIHBhY2tldCBtb2RlICovCi0jaWZkZWYgVElPQ0dMVEMJ CQkJLyogTm90IHJhd21vZGUsICovCi0JaWYgKGx0Y2hhcmYgJiYgKHhsb2NhbCA9PSAwKSkgewkv KiBtdXN0IHR1cm4gb2ZmICovCi0JICAgIGx0Y2hub2kudF9zdXNwYyA9IC0xOwkvKiBzdXNwZW5k IGNoYXJhY3RlciAqLwotCSAgICBsdGNobm9pLnRfZHN1c3BjID0gLTE7CS8qIGFuZCBkZWxheWVk IHN1c3BlbmQgY2hhcmFjdGVyICovCi0JICAgIGlmIChpb2N0bCh0dHlmZCxUSU9DU0xUQywmdGNo bm9pKSA8IDApIHsKLQkJZGVidWcoRjEwMCwidHRwa3QgVElPQ1NMVEMgZmFpbGVkIiwiIiwwKTsK LQkgICAgfSBlbHNlIHsKLQkJbHRjaGFyZiA9IDE7Ci0JCWRlYnVnKEYxMDAsInR0cGt0IFRJT0NT TFRDIG9rIiwiIiwwKTsKLQkgICAgfQotCX0KLSNlbmRpZiAvKiBUSU9DR0xUQyAqLwotCi0jZWxz ZSAvKiBMUEFTUzggbm90IGRlZmluZWQgKi8KLQotLyogUHJldmlvdXNseSwgQlNELWJhc2VkIGlt cGxlbWVudGF0aW9ucyBhbHdheXMgKi8KLS8qIHVzZWQgcmF3bW9kZSBmb3IgcGFja2V0cy4gIE5v dywgd2UgdXNlIHJhd21vZGUgb25seSBpZiBwYXJpdHkgaXMgTk9ORS4gKi8KLS8qIFRoaXMgYWxs b3dzIHRoZSBmbG93IGNvbnRyb2wgcmVxdWVzdGVkIGFib3ZlIHRvIGFjdHVhbGx5IHdvcmssIGJ1 dCBvbmx5ICovCi0vKiBpZiB0aGUgdXNlciBhc2tzIGZvciBwYXJpdHkgKHdoaWNoIGFsc28gbWVh bnMgdGhleSBnZXQgOHRoLWJpdCBxdW90aW5nKS4gKi8KLQotCWlmIChwYXJpdHkpIHsJCQkvKiBJ ZiBwYXJpdHksICovCi0JICAgIHR0cmF3LnNnX2ZsYWdzICY9IH5SQVc7CS8qIHVzZSBjb29rZWQg bW9kZSAqLwotI2lmZGVmIENPTU1FTlQKLS8qIFdIWT8/PyAqLwotCSAgICBpZiAoeGxvY2FsKQot I2VuZGlmIC8qIENPTU1FTlQgKi8KLQkgICAgICB0dHJhdy5zZ19mbGFncyB8PSBDQlJFQUs7Ci0J ICAgIGRlYnVnKEYxMDEsInR0cGt0IGNvb2tlZCwgY2JyZWFrLCBwYXJpdHkiLCIiLHBhcml0eSk7 Ci0jaWZkZWYgVElPQ0dFVEMJCQkJLyogTm90IHJhd21vZGUsICovCi0JICAgIGlmICh0Y2hhcmYg JiYgKHhsb2NhbCA9PSAwKSkgeyAvKiBtdXN0IHR1cm4gb2ZmICovCi0JCXRjaG5vaS50X2ludHJj ID0gLTE7CS8qIGludGVycnVwdCBjaGFyYWN0ZXIgKi8KLQkJdGNobm9pLnRfcXVpdGMgPSAtMTsJ LyogYW5kIHF1aXQgY2hhcmFjdGVyLiAqLwotCQl0Y2hub2kudF9zdGFydGMgPSAxNzsJLyogTWFr ZSBzdXJlIHhvbiAqLwotCQl0Y2hub2kudF9zdG9wYyA9IDE5OwkvKiBhbmQgeG9mZiBub3QgaWdu b3JlZC4gKi8KLSNpZm5kZWYgTk9CUktDCi0JCXRjaG5vaS50X2VvZmMgPSAtMTsJLyogZW9mIGNo YXJhY3Rlci4gKi8KLQkJdGNobm9pLnRfYnJrYyA9IC0xOwkvKiBicmsgY2hhcmFjdGVyLiAqLwot I2VuZGlmIC8qIE5PQlJLQyAqLwotCQlpZiAoaW9jdGwodHR5ZmQsVElPQ1NFVEMsJnRjaG5vaSkg PCAwKSB7Ci0JCSAgICBkZWJ1ZyhGMTAwLCJ0dHBrdCBUSU9DU0VUQyBmYWlsZWQiLCIiLDApOwot CQl9IGVsc2UgewotCQkgICAgdGNoYXJmID0gMTsKLQkJICAgIGRlYnVnKEYxMDAsInR0cGt0IFRJ T0NTRVRDIG9rIiwiIiwwKTsKLQkJfQotCSAgICB9Ci0jZW5kaWYgLyogVElPQ0dFVEMgKi8KLSNp ZmRlZiBUSU9DR0xUQwkJCQkvKiBOb3QgcmF3bW9kZSwgKi8KLS8qIFByZXZlbnQgc3VzcGVuZCBk dXJpbmcgcGFja2V0IG1vZGUgKi8KLQkgICAgaWYgKGx0Y2hhcmYgJiYgKHhsb2NhbCA9PSAwKSkg eyAvKiBtdXN0IHR1cm4gb2ZmICovCi0JCWx0Y2hub2kudF9zdXNwYyA9IC0xOwkvKiBzdXNwZW5k IGNoYXJhY3RlciAqLwotCQlsdGNobm9pLnRfZHN1c3BjID0gLTE7CS8qIGFuZCBkZWxheWVkIHN1 c3BlbmQgY2hhcmFjdGVyICovCi0JCWlmIChpb2N0bCh0dHlmZCxUSU9DU0xUQywmdGNobm9pKSA8 IDApIHsKLQkJICAgIGRlYnVnKEYxMDAsInR0cGt0IFRJT0NTTFRDIGZhaWxlZCIsIiIsMCk7Ci0J CX0gZWxzZSB7Ci0JCSAgICBsdGNoYXJmID0gMTsKLQkJICAgIGRlYnVnKEYxMDAsInR0cGt0IFRJ T0NTTFRDIG9rIiwiIiwwKTsKLQkJfQotCSAgICB9Ci0jZW5kaWYgLyogVElPQ0dMVEMgKi8KLQl9 IGVsc2UgewkJCS8qIElmIG5vIHBhcml0eSwgKi8KLQkgICAgdHRyYXcuc2dfZmxhZ3MgfD0gUkFX OwkvKiBtdXN0IHVzZSA4LWJpdCByYXcgbW9kZS4gKi8KLQkgICAgZGVidWcoRjEwMSwidHRwa3Qg c2V0dGluZyByYXdtb2RlLCBwYXJpdHkiLCIiLHBhcml0eSk7Ci0JfQotI2VuZGlmIC8qIExQQVNT OCAqLwotICAgIH0gLyogRW5kIG9mIFhvbi9Yb2ZmIHNlY3Rpb24gKi8KLQotICAgIC8qIERvbid0 IGVjaG8sIGRvbid0IG1hcCBDUiB0byBDUkxGIG9uIG91dHB1dCwgZG9uJ3QgZm9vbCB3aXRoIGNh c2UgKi8KLSNpZmRlZiBMQ0FTRQotICAgIHR0cmF3LnNnX2ZsYWdzICY9IH4oRUNIT3xDUk1PRHxM Q0FTRSk7Ci0jZWxzZQotICAgIHR0cmF3LnNnX2ZsYWdzICY9IH4oRUNIT3xDUk1PRCk7Ci0jZW5k aWYgLyogTENBU0UgKi8KLQotI2lmZGVmIFRPV0VSMQotICAgIHR0cmF3LnNnX2ZsYWdzICY9IH5B TllQOyAgICAgICAgICAgIC8qIE11c3Qgc2V0IHRoaXMgb24gb2xkIFRvd2VycyAqLwotI2VuZGlm IC8qIFRPV0VSMSAqLwotCi0jaWZkZWYgQkVMTFYxMAotICAgIGlmIChpb2N0bCh0dHlmZCxUSU9D U0VUUCwmdHRyYXcpIDwgMCkgLyogU2V0IHRoZSBuZXcgbW9kZXMuICovCi0gICAgICByZXR1cm4o LTEpOwotI2Vsc2UKLSAgICBlcnJubyA9IDA7Ci0gICAgaWYgKHN0dHkodHR5ZmQsJnR0cmF3KSA8 IDApIHsgICAgICAgLyogU2V0IHRoZSBuZXcgbW9kZXMuICovCi0gICAgICAgIGRlYnVnKEYxMDEs InR0cGt0IHN0dHkgZmFpbGVkIiwiIixlcnJubyk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAg fQotI2VuZGlmIC8qIEJFTExWMTAgKi8KLSAgICBkZWJ1ZyhGMTAwLCJ0dHBrdCBzdHR5IG9rIiwi IiwwKTsKLQotI2lmZGVmIHNvbnlfbmV3cwotICAgIHggPSB4bG9jYWwgPyBrbV9leHQgOiBrbV9j b247CS8qIFB1dCBsaW5lIGluIEFTQ0lJIG1vZGUuICovCi0gICAgaWYgKHggIT0gLTEpIHsJCQkv KiBNYWtlIHN1cmUgd2Uga25vdyBvcmlnaW5hbCBtb2Rlcy4gKi8KLQl4ICY9IH5LTV9UVFlQRTsK LQl4IHw9IEtNX0FTQ0lJOwotCWlmIChpb2N0bCh0dHlmZCxUSU9DS1NFVCwgJngpIDwgMCkgewot CSAgICBwZXJyb3IoInR0cGt0IGNhbid0IHNldCBBU0NJSSBtb2RlIik7Ci0JICAgIGRlYnVnKEYx MDEsInR0cGt0IGVycm9yIHNldHRpbmcgQVNDSUkgbW9kZSIsIiIseCk7Ci0JICAgIHJldHVybigt MSk7Ci0JfQotICAgIH0KLSAgICBkZWJ1ZyhGMTAwLCJ0dHBrdCBzZXQgQVNDSUkgbW9kZSBvayIs IiIsMCk7Ci0jZW5kaWYgLyogc29ueV9uZXdzICovCi0KLSAgICBpZiAoeGxvY2FsID09IDApIHsJ CQkvKiBUdXJuIHRoaXMgb2ZmIHNvIHdlIGNhbiByZWFkICovCi0Jc2lnbmFsKFNJR0lOVCxTSUdf SUdOKTsJCS8qIEN0cmwtQyBjaGFycyB0eXBlZCBhdCBjb25zb2xlICovCi0Jc2lnaW50X2lnbiA9 IDE7Ci0gICAgfQotICAgIHR2dGZsZyA9IDA7CQkJCS8qIFNvIHR0dnQoKSB3aWxsIHdvcmsgbmV4 dCB0aW1lICovCi0gICAgZGVidWcoRjEwMCwidHRwa3Qgc3VjY2VzcyIsIiIsMCk7Ci0gICAgcmV0 dXJuKDApOwotCi0jZW5kaWYgLyogTm90IEFUVFNWIG9yIFBPU0lYICovCi0KLS8qIEFUJlQgVU5J WCBhbmQgUE9TSVggKi8KLQotI2lmZGVmIENPSEVSRU5UCi0jZGVmaW5lIFNWT1JQT1NJWAotI2Vu ZGlmIC8qIENPSEVSRU5UICovCi0KLSNpZmRlZiBTVk9SUE9TSVgKLSAgICBpZiAoZmxvdyA9PSBG TE9fWE9OWCkgewkJLyogWG9uL1hvZmYgKi8KLQl0dHJhdy5jX2lmbGFnIHw9IChJWE9OfElYT0ZG KTsKLQl0dGhmbG93KGZsb3csIDAsICZ0dHJhdyk7Ci0gICAgfSBlbHNlIGlmIChmbG93ID09IEZM T19OT05FKSB7CS8qIE5vbmUgKi8KLQkvKiBOT1RFOiBXZSBzaG91bGQgYWxzbyB0dXJuIG9mZiBo YXJkd2FyZSBmbG93IGNvbnRyb2wgaGVyZSEgKi8KLQl0dHJhdy5jX2lmbGFnICY9IH4oSVhPTnxJ WE9GRik7Ci0JdHRoZmxvdyhmbG93LCAwLCAmdHRyYXcpOwotICAgIH0gZWxzZSBpZiAoZmxvdyA9 PSBGTE9fS0VFUCkgewkvKiBLZWVwICovCi0JdHRyYXcuY19pZmxhZyAmPSB+KElYT058SVhPRkYp OwkvKiBUdXJuIG9mZiBYb24vWG9mZiBmbGFncyAqLwotCXR0cmF3LmNfaWZsYWcgfD0gKHR0b2xk LmNfaWZsYWcgJiAoSVhPTnxJWE9GRikpOyAvKiBPUiBpbiBvbGQgb25lcyAqLwotCS8qIE5PVEU6 IFdlIHNob3VsZCBhbHNvIGhhbmRsZSBoYXJkd2FyZSBmbG93IGNvbnRyb2wgaGVyZSEgKi8KLSNp ZmRlZiBQT1NJWF9DUlRTQ1RTCi0vKiBJbiBMaW51eCBjYXNlLCB3ZSBkbyB0aGlzLCB3aGljaCBp cyB1bmxpa2VseSB0byBiZSBwb3J0YWJsZSAqLwotICAgICAgICB0dHJhdy5jX2NmbGFnICY9IH5D UlRTQ1RTOwkvKiBUdXJuIG9mZiBSVFMvQ1RTIGZsYWcgKi8KLSAgICAgICAgdHRyYXcuY19jZmxh ZyB8PSAodHRvbGQuY19jZmxhZyAmIENSVFNDVFMpOyAvKiBPUiBpbiBvbGQgb25lICovCi0jZW5k aWYgLyogUE9TSVhfQ1JUU0NUUyAqLwotICAgIH0gZWxzZSBpZiAoZmxvdyA9PSBGTE9fUlRTQyB8 fAkvKiBIYXJkd2FyZSAqLwotCSAgICAgICBmbG93ID09IEZMT19EVFJDIHx8Ci0JICAgICAgIGZs b3cgPT0gRkxPX0RUUlQpIHsKLQl0dHJhdy5jX2lmbGFnICY9IH4oSVhPTnxJWE9GRik7CS8qICgx OTApICovCi0JdHRoZmxvdyhmbG93LCAxLCAmdHRyYXcpOwotICAgIH0KLSAgICB0dHJhdy5jX2xm bGFnICY9IH4oSUNBTk9OfEVDSE8pOwotICAgIHR0cmF3LmNfbGZsYWcgJj0gfklTSUc7CQkvKiBE byBOT1QgY2hlY2sgZm9yIGludGVycnVwdCBjaGFycyAqLwotCi0jaWZuZGVmIE9YT1MKLSNpZmRl ZiBRTlgKLSAgICBpZiAoZmxvdyAhPSBGTE9fUlRTQyAmJiBmbG93ICE9IEZMT19EVFJDICYmIGZs b3cgIT0gRkxPX0RUUlQpCi0jZW5kaWYgLyogUU5YICovCi0jaWZuZGVmIENPSEVSRU5UCi0gICAg ICB0dHJhdy5jX2xmbGFnICY9IH5JRVhURU47CQkvKiBUdXJuIG9mZiBeTy9eViBwcm9jZXNzaW5n ICovCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLSNlbHNlIC8qIE9YT1MgKi8KLSAgICB0dHJhdy5j X2NjW1ZESVNDQVJEXSA9IHR0cmF3LmNfY2NbVkxORVhUXSA9IENESVNBQkxFOwotI2VuZGlmIC8q IE9YT1MgKi8KLSAgICB0dHJhdy5jX2xmbGFnIHw9IE5PRkxTSDsJCS8qIERvbid0IGZsdXNoICov Ci0gICAgdHRyYXcuY19pZmxhZyB8PSBJR05QQVI7CQkvKiBJZ25vcmUgcGFyaXR5IGVycm9ycyAq LwotI2lmZGVmIEFUVFNWCi0jaWZkZWYgQlNENDQKLSAgICB0dHJhdy5jX2lmbGFnICY9IH4oSUdO QlJLfElOTENSfElHTkNSfElDUk5MfElOUENLfElTVFJJUHxJWEFOWSk7Ci0jZWxzZQotICAgIHR0 cmF3LmNfaWZsYWcgJj0gfihJR05CUkt8SU5MQ1J8SUdOQ1J8SUNSTkx8SVVDTEN8SU5QQ0t8SVNU UklQfElYQU5ZKTsKLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2Vsc2UgLyogUE9TSVggKi8KLSAgICB0 dHJhdy5jX2lmbGFnICY9IH4oSUdOQlJLfElOTENSfElHTkNSfElDUk5MfElOUENLfElTVFJJUCk7 Ci0jZW5kaWYgLyogQVRUU1YgKi8KLSAgICB0dHJhdy5jX29mbGFnICY9IH5PUE9TVDsKLSAgICB0 dHJhdy5jX2NmbGFnICY9IH4oQ1NJWkUpOwotICAgIHR0cmF3LmNfY2ZsYWcgfD0gKENTOHxDUkVB RHxIVVBDTCk7Ci0KLSNpZmRlZiBDU1RPUEIKLSAgICBpZiAoeGxvY2FsKSB7Ci0JaWYgKHN0b3Bi aXRzID09IDIpIHsKLQkgICAgdHRyYXcuY19jZmxhZyB8PSBDU1RPUEI7CS8qIDIgc3RvcCBiaXRz ICovCi0JICAgIGRlYnVnKEYxMDAsInR0cGt0IDIgc3RvcGJpdHMiLCIiLDApOwotCX0gZWxzZSBp ZiAoc3RvcGJpdHMgPT0gMSkgewotCSAgICB0dHJhdy5jX2NmbGFnICY9IH4oQ1NUT1BCKTsJLyog MSBzdG9wIGJpdCAqLwotCSAgICBkZWJ1ZyhGMTAwLCJ0dHBrdCAxIHN0b3BiaXQiLCIiLDApOwot CX0KLSAgICB9Ci0jZW5kaWYgLyogQ1NUT1BCICovCi0KLSNpZmRlZiBIV1BBUklUWQotICAgIGlm IChod3Bhcml0eSAmJiB4bG9jYWwpIHsJCS8qIEhhcmR3YXJlIHBhcml0eSAqLwotCXR0cmF3LmNf Y2ZsYWcgfD0gUEFSRU5COwkvKiBFbmFibGUgcGFyaXR5ICovCi0jaWZkZWYgQ09NTUVOVAotLyog VW5jb21tZW50IHRoaXMgb25seSBpZiBuZWVkZWQgLS0gSSBkb24ndCB0aGluayBpdCBpcyAqLwot CXR0cmF3LmNfY2ZsYWcgJj0gfihDU0laRSk7CS8qIENsZWFyIG91dCBjaGFyYWN0ZXItc2l6ZSBt YXNrICovCi0JdHRyYXcuY19jZmxhZyB8PSBDUzg7CQkvKiBBbmQgc2V0IGl0IHRvIDggKi8KLSNl bmRpZiAvKiBDT01NRU5UICovCi0jaWZkZWYgSUdOUEFSCi0JdHRyYXcuY19pZmxhZyB8PSBJR05Q QVI7CS8qIERvbid0IGRpc2NhcmQgaW5jb21pbmcgYnl0ZXMgKi8KLQlkZWJ1ZyhGMTAwLCJ0dHBr dCBJR05QQVIiLCIiLDApOyAvKiB0aGF0IGhhdmUgcGFyaXR5IGVycm9ycyAqLwotI2VuZGlmIC8q IElHTlBBUiAqLwotCXN3aXRjaCAoaHdwYXJpdHkpIHsKLQkgIGNhc2UgJ2UnOgkJCS8qIEV2ZW4g Ki8KLQkgICAgdHRyYXcuY19jZmxhZyAmPSB+KFBBUk9ERCk7Ci0JICAgIGRlYnVnKEYxMDAsInR0 cGt0IDggYml0cyArIGV2ZW4gcGFyaXR5IiwiIiwwKTsKLQkgICAgYnJlYWs7Ci0JICBjYXNlICdv JzoJCQkvKiBPZGQgKi8KLQkgICAgdHRyYXcuY19jZmxhZyB8PSBQQVJPREQ7Ci0JICAgIGRlYnVn KEYxMDAsInR0cGt0IDggYml0cyArIG9kZCBwYXJpdHkiLCIiLDApOwotCSAgICBicmVhazsKLQkg IGNhc2UgJ20nOgkJCS8qIE1hcmsgKi8KLQkgIGNhc2UgJ3MnOgkJCS8qIFNwYWNlICovCi0JICAg IC8qIFBBUkVYVCBpcyBtZW50aW9uZWQgaW4gU1ZJRCBidXQgdGhlIGRldGFpbHMgYXJlIG5vdCBn aXZlbi4gKi8KLQkgICAgLyogUEFSRVhUIGlzIG5vdCBpbmNsdWRlZCBpbiBQT1NJWCBJU08vSUVD IDk5NDUtMS4gKi8KLQkgICAgZGVidWcoRjEwMCwidHRwa3QgOCBiaXRzICsgaW52YWxpZCBwYXJp dHkiLCIiLDApOwotCSAgICBicmVhazsKLQl9Ci0gICAgfSBlbHNlIHsJCQkJLyogV2UgaGFuZGxl IHBhcml0eSBvdXJzZWx2ZXMgKi8KLSNlbmRpZiAvKiBIV1BBUklUWSAqLwotCXR0cmF3LmNfY2Zs YWcgJj0gfihQQVJFTkIpOwkvKiBEb24ndCBlbmFibGUgcGFyaXR5ICovCi0jaWZkZWYgSFdQQVJJ VFkKLSAgICB9Ci0jZW5kaWYgLyogSFdQQVJJVFkgKi8KLQotI2lmZGVmIElYMzcwCi0gICAgdHRy YXcuY19jY1s0XSA9IDQ4OyAgLyogU28gU2VyaWVzLzEgZG9lc24ndCBpbnRlcnJ1cHQgb24gZXZl cnkgY2hhciAqLwotICAgIHR0cmF3LmNfY2NbNV0gPSAxOwotI2Vsc2UKLSNpZm5kZWYgVkVPRgkJ CQkvKiBmb3IgREdVWCB0aGlzIGlzIFZFT0YsIG5vdCBWTUlOICovCi0gICAgdHRyYXcuY19jY1s0 XSA9IDE7ICAgLyogW1ZNSU5dICByZXR1cm4gbWF4IG9mIHRoaXMgbWFueSBjaGFyYWN0ZXJzIG9y ICovCi0jZWxzZQotI2lmbmRlZiBPWE9TCi0jaWZkZWYgVk1JTgotICAgIHR0cmF3LmNfY2NbVk1J Tl0gPSAxOwotI2VuZGlmIC8qIFZNSU4gKi8KLSNlbHNlIC8qIE9YT1MgKi8KLSAgICB0dHJhdy5j X21pbiA9IDE7Ci0jZW5kaWYgLyogT1hPUyAqLwotI2VuZGlmIC8qIFZFT0YgKi8KLSNpZm5kZWYg VkVPTAkJCQkvKiBmb3IgREdVWCB0aGlzIGlzIFZFT0wsIG5vdCBWVElNRSAqLwotICAgIHR0cmF3 LmNfY2NbNV0gPSAwOwkgLyogW1ZUSU1FXSB3aGVuIHRoaXMgbWFueSBzZWNzLzEwIGV4cGlyZSB3 L25vIGlucHV0ICovCi0jZWxzZQotI2lmbmRlZiBPWE9TCi0jaWZkZWYgVlRJTUUKLSAgICB0dHJh dy5jX2NjW1ZUSU1FXSA9IDA7Ci0jZW5kaWYgLyogVlRJTUUgKi8KLSNlbHNlIC8qIE9YT1MgKi8K LSAgICB0dHJhdy5jX3RpbWUgPSAwOwotI2VuZGlmIC8qIE9YT1MgKi8KLSNlbmRpZiAvKiBWRU9M ICovCi0jZW5kaWYgLyogSVgzNzAgKi8KLQotI2lmZGVmIFZJTlRSCQkJCS8qIFR1cm4gb2ZmIGlu dGVycnVwdCBjaGFyYWN0ZXIgKi8KLSAgICBpZiAoeGxvY2FsID09IDApCQkJLyogc28gXkNeQyBj YW4gYnJlYWsgdXMgb3V0IG9mICovCi0gICAgICB0dHJhdy5jX2NjW1ZJTlRSXSA9IDA7CQkvKiBw YWNrZXQgbW9kZS4gKi8KLSNlbmRpZiAvKiBWSU5UUiAqLwotCi0jaWZkZWYgUGxhbjkKLSAgICBp ZiAocDl0dHlwYXJpdHkoJ24nKSA8IDApCi0JcmV0dXJuIC0xOwotI2Vsc2UKLSNpZmRlZiBCU0Q0 NE9SUE9TSVgKLSAgICBlcnJubyA9IDA7Ci0jaWZkZWYgQkVPU09SQkVCT1gKLSAgICB0dHJhdy5j X2NjW1ZNSU5dID0gMDsJCS8qIERSNyBjYW4gb25seSBwb2xsLiAqLwotI2VuZGlmIC8qIEJFT1NP UkJFQk9YICovCi0KLSNkZWZpbmUgVEVTVElORzIzNAotI2lmZGVmIFRFU1RJTkcyMzQKLSAgICBp ZiAoMSkgewotCWRlYnVnKEYxMDAsInR0cGt0IFRFU1RJTkcyMzQgcmF3bW9kZSIsIiIsMCk7Ci0K LQkvKiBpZmxhZ3MgKi8KLQl0dHJhdy5jX2lmbGFnICY9IH4oUEFSTVJLfElTVFJJUHxCUktJTlR8 SU5MQ1J8SUdOQ1J8SUNSTkwpOwotCXR0cmF3LmNfaWZsYWcgJj0gfihJTlBDS3xJR05QQVJ8SVhP TnxJWE9GRik7Ci0JdHRyYXcuY19pZmxhZyB8PSBJR05CUks7Ci0jaWZkZWYgSU1BWEJFTAotCXR0 cmF3LmNfaWZsYWcgJj0gfklNQVhCRUw7Ci0jZW5kaWYJLyogSU1BWEJFTCAqLwotI2lmZGVmIElY QU5ZCi0JdHRyYXcuY19pZmxhZyAmPSB+SVhBTlk7Ci0jZW5kaWYJLyogSVhBTlkgKi8KLSNpZmRl ZiBJVUNMQwotCXR0cmF3LmNfaWZsYWcgJj0gfklVQ0xDOwotI2VuZGlmIC8qIElVQ0xDICovCi0K LQkvKiBvZmxhZ3MgKi8KLQl0dHJhdy5jX29mbGFnICY9IH5PUE9TVDsKLSNpZmRlZiBPWFRBQlMK LQl0dHJhdy5jX29mbGFnICY9IH5PWFRBQlM7Ci0jZW5kaWYgLyogT1hUQUJTICovCi0jaWZkZWYg T05PQ1IKLQl0dHJhdy5jX29mbGFnICY9IH5PTk9DUjsKLSNlbmRpZiAvKiBPTk9DUiAqLwotI2lm ZGVmIE9OTFJFVAotCXR0cmF3LmNfb2ZsYWcgJj0gfk9OTFJFVDsKLSNlbmRpZiAvKiBPTkxSRVQg Ki8KLSNpZmRlZiBPTkxDUgotCXR0cmF3LmNfb2ZsYWcgJj0gfk9OTENSOwotI2VuZGlmIC8qIE9O TENSICovCi0KLQkvKiBsZmxhZ3MgKi8KLQl0dHJhdy5jX2xmbGFnICY9IH5FQ0hPOwotI2lmZGVm IEVDSE9FCi0JdHRyYXcuY19sZmxhZyAmPSB+RUNIT0U7Ci0jZW5kaWYgLyogRUNIT0UgKi8KLSNp ZmRlZiBFQ0hPTkwKLQl0dHJhdy5jX2xmbGFnICY9IH5FQ0hPTkw7Ci0jZW5kaWYgLyogRUNIT05M ICovCi0jaWZkZWYgRUNIT1BSVAotCXR0cmF3LmNfbGZsYWcgJj0gfkVDSE9QUlQ7Ci0jZW5kaWYg LyogRUNIT1BSVCAqLwotI2lmZGVmIEVDSE9LRQotCXR0cmF3LmNfbGZsYWcgJj0gfkVDSE9LRTsK LSNlbmRpZiAvKiBFQ0hPS0UgKi8KLSNpZmRlZiBFQ0hPQ1RMCi0JdHRyYXcuY19sZmxhZyAmPSB+ RUNIT0NUTDsKLSNlbmRpZiAvKiBFQ0hPQ1RMICovCi0jaWZkZWYgQUxUV0VSQVNFCi0JdHRyYXcu Y19sZmxhZyAmPSB+QUxUV0VSQVNFOwotI2VuZGlmIC8qIEFMVFdFUkFTRSAqLwotI2lmZGVmIEVY VFBST0MKLQl0dHJhdy5jX2xmbGFnICY9IH5FWFRQUk9DOwotI2VuZGlmIC8qIEVYVFBST0MgKi8K LQl0dHJhdy5jX2xmbGFnICY9IH4oSUNBTk9OfElTSUd8SUVYVEVOfFRPU1RPUHxGTFVTSE98UEVO RElOKTsKLSNpZmRlZiBOT0tFUk5JTkZPCi0JdHRyYXcuY19sZmxhZyB8PSBOT0tFUk5JTkZPOwot I2VuZGlmCS8qIE5PS0VSTklORk8gKi8KLQkvKiB0dHJhdy5jX2xmbGFnIHw9IE5PRkxTSDsgKi8K LQl0dHJhdy5jX2xmbGFnICY9IH5OT0ZMU0g7Ci0KLQkvKiBjZmxhZ3MgKi8KLQl0dHJhdy5jX2Nm bGFnICY9IH4oQ1NJWkV8UEFSRU5CfFBBUk9ERCk7Ci0JdHRyYXcuY19jZmxhZyB8PSBDUzh8Q1JF QUQ7Ci0jaWZkZWYgVk1JTgotCXR0cmF3LmNfY2NbVk1JTl0gPSAxOwkJLyogU3VwcG9zZWRseSBu ZWVkZWQgZm9yIEFJWCAqLwotI2VuZGlmCS8qIFZNSU4gKi8KLQotICAgIH0KLSNlbmRpZiAvKiBU RVNUSU5HMjM0ICovCi0KLSAgICBkZWJ1ZyhGMTAwLCJ0dHBrdCBjYWxsaW5nIHRjc2V0YXR0cihU Q1NFVEFXKSIsIiIsMCk7Ci0gICAgeCA9IHRjc2V0YXR0cih0dHlmZCxUQ1NBRFJBSU4sJnR0cmF3 KTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dHBrdCBCU0Q0NE9SUE9TSVggdGNzZXRhdHRyIiwiIix4KTsK LSAgICBpZiAoeCA8IDApIHsKLQlkZWJ1ZyhGMTAxLCJ0dHBrdCBCU0Q0NE9SUE9TSVggdGNzZXRh dHRyIGVycm5vIiwiIixlcnJubyk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotI2Vsc2Ug LyogQlNENDRPUlBPU0lYICovCi0gICAgeCA9IGlvY3RsKHR0eWZkLFRDU0VUQVcsJnR0cmF3KTsK LSAgICBkZWJ1ZyhGMTAxLCJ0dHBrdCBBVFRTViBpb2N0bCBUQ1NFVEFXIiwiIix4KTsKLSAgICBp ZiAoeCA8IDApIHsgIC8qIHNldCBuZXcgbW9kZXMgLiAqLwotCWRlYnVnKEYxMDEsInR0cGt0IEFU VFNWIGlvY3RsIFRDU0VUQVcgZXJybm8iLCIiLGVycm5vKTsKLSAgICAgICAgcmV0dXJuKC0xKTsK LSAgICB9Ci0jZW5kaWYgLyogQlNENDRPUlBPU0lYICovCi0jZW5kaWYgLyogUGxhbjkgKi8KLSAg ICB0dnRmbGcgPSAwOwotICAgIGRlYnVnKEYxMDAsInR0cGt0IG9rIiwiIiwwKTsKLSAgICByZXR1 cm4oMCk7Ci0jZW5kaWYgLyogQVRUU1YgKi8KLQotI2lmZGVmIENPSEVSRU5UCi0jdW5kZWYgU1ZP UlBPU0lYCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLQotfQotCi0vKiAgVCBUIFMgRSBUIEYgTCBP IFcgIC0tICBTZXQgZmxvdyBjb250cm9sIGltbWVkaWF0ZWx5LiAgKi8KLQotI2lmZGVmIENPSEVS RU5UCi0jZGVmaW5lIFNWT1JQT1NJWAotI2VuZGlmIC8qIENPSEVSRU5UICovCi0KLWludAotdHRz ZXRmbG93KGZsb3cpIGludCBmbG93OyB7Ci0gICAgaWYgKHR0eWZkIDwgMCkJCQkvKiBBIGNoYW5u ZWwgbXVzdCBiZSBvcGVuICovCi0gICAgICByZXR1cm4oLTEpOwotCi0gICAgZGVidWcoRjEwMSwi dHRzZXRmbG93IGZsb3ciLCIiLGZsb3cpOwotCi0jaWZkZWYgVE5fQ09NUE9SVAotICAgIGlmIChu ZXRjb25uICYmIGlzdG5jb21wb3J0KCkpIHsKLQlkZWJ1ZyhGMTAxLCJ0dHNldGZsb3cgbmV0IG1v ZGVtIiwiIix0dG1kbSk7Ci0JcmV0dXJuKHRuc2V0ZmxvdyhmbG93KSk7Ci0gICAgfQotI2VuZGlm IC8qIFROX0NPTVBPUlQgKi8KLSNpZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaXBlKSByZXR1cm4o MCk7Ci0jZW5kaWYgLyogTkVUQ01EICovCi0jaWZkZWYgTkVUUFRZCi0gICAgaWYgKHR0cHR5KSBy ZXR1cm4oMCk7Ci0jZW5kaWYgLyogTkVUUFRZICovCi0KLSNpZmRlZiBDT01NRU5UCi0gICAgLyog VGhpcyBzZWVtcyB0byBodXJ0Li4uICovCi0gICAgaWYgKGZsb3cgPT0gRkxPX0tFRVApCi0gICAg ICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgaWYgKGZsb3cgPT0gRkxP X1JUU0MgfHwJCS8qIEhhcmR3YXJlIGZsb3cgY29udHJvbC4uLiAqLwotCWZsb3cgPT0gRkxPX0RU UkMgfHwKLQlmbG93ID09IEZMT19EVFJUKSB7Ci0JdHRoZmxvdyhmbG93LCAxLCAmdHRyYXcpOwot I2lmbmRlZiBTVk9SUE9TSVgKLQl0dHJhdy5zZ19mbGFncyAmPSB+VEFOREVNOwkvKiBUdXJuIG9m ZiBzb2Z0d2FyZSBmbG93IGNvbnRyb2wgKi8KLSNlbHNlCi0JdHRyYXcuY19pZmxhZyAmPSB+KElY T058SVhPRkYpOwotI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwotCi0gICAgfSBlbHNlIGlmIChmbG93 ID09IEZMT19YT05YKSB7CS8qIFhvbi9Yb2ZmLi4uICovCi0KLSNpZm5kZWYgU1ZPUlBPU0lYCi0J dHRyYXcuc2dfZmxhZ3MgfD0gVEFOREVNOwotI2Vsc2UKLQl0dHJhdy5jX2lmbGFnIHw9IChJWE9O fElYT0ZGKTsKLSNlbmRpZiAvKiBTVk9SUE9TSVggKi8KLQl0dGhmbG93KEZMT19SVFNDLCAwLCAm dHRyYXcpOwkvKiBUdXJuIG9mZiBoYXJkd2FyZSBmbG93IGNvbnRyb2wgKi8KLQotICAgIH0gZWxz ZSBpZiAoZmxvdyA9PSBGTE9fTk9ORSkgewkvKiBObyBmbG93IGNvbnRyb2wgKi8KLQotI2lmbmRl ZiBTVk9SUE9TSVgKLQl0dHJhdy5zZ19mbGFncyAmPSB+VEFOREVNOwkvKiBUdXJuIG9mZiBzb2Z0 d2FyZSBmbG93IGNvbnRyb2wgKi8KLSNlbHNlCi0JdHRyYXcuY19pZmxhZyAmPSB+KElYT058SVhP RkYpOwotI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwotCXR0aGZsb3coRkxPX1JUU0MsIDAsICZ0dHJh dyk7CS8qIFR1cm4gb2ZmIGFueSBoYXJkd2FyZSBmL2MgdG9vICovCi0gICAgfQotCi0vKiBTZXQg dGhlIG5ldyBtb2Rlcy4uLiAqLwotCi0jaWZuZGVmIFNWT1JQT1NJWAkJCS8qIEJTRCBhbmQgZnJp ZW5kcyAqLwotI2lmZGVmIEJFTExWMTAKLSAgICBpZiAoaW9jdGwodHR5ZmQsVElPQ1NFVFAsJnR0 cmF3KSA8IDApCi0gICAgICByZXR1cm4oLTEpOwotI2Vsc2UKLSNpZm5kZWYgTUlOSVgyCi0gICAg aWYgKHN0dHkodHR5ZmQsJnR0cmF3KSA8IDApCi0gICAgICByZXR1cm4oLTEpOwotI2VuZGlmIC8q IE1JTklYMiAqLwotI2VuZGlmIC8qIEJFTExWMTAgKi8KLSNlbHNlCi0jaWZkZWYgQlNENDRPUlBP U0lYCQkJLyogUE9TSVggKi8KLSAgICBpZiAodGNzZXRhdHRyKHR0eWZkLFRDU0FEUkFJTiwmdHRy YXcpIDwgMCkKLSAgICAgIHJldHVybigtMSk7Ci0jZWxzZQkJCQkJLyogU3lzdGVtIFYgKi8KLSAg ICBpZiAoaW9jdGwodHR5ZmQsVENTRVRBVywmdHRyYXcpIDwgMCkKLSAgICAgIHJldHVybigtMSk7 Ci0jZW5kaWYgLyogQlNENDRPUlBPU0lYICovCi0jZW5kaWYgLyogU1ZPUlBPU0lYICovCi0gICAg cmV0dXJuKDApOwotfQotI2lmZGVmIENPSEVSRU5UCi0jdW5kZWYgU1ZPUlBPU0lYCi0jZW5kaWYg LyogQ09IRVJFTlQgKi8KLQotLyogIFQgVCBWIFQgLS0gQ29uZGl0aW9uIGNvbW11bmljYXRpb24g ZGV2aWNlIGZvciB1c2UgYXMgdmlydHVhbCB0ZXJtaW5hbC4gKi8KLQotaW50Ci0jaWZkZWYgQ0tf QU5TSUMKLXR0dnQobG9uZyBzcGVlZCwgaW50IGZsb3cpCi0jZWxzZQotdHR2dChzcGVlZCxmbG93 KSBsb25nIHNwZWVkOyBpbnQgZmxvdzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogdHR2dCAq LyB7Ci0gICAgaW50IHMsIHMyLCB4OwotCi0gICAgZGVidWcoRjEwMSwidHR2dCB0dHlmZCIsIiIs dHR5ZmQpOwotICAgIGRlYnVnKEYxMDEsInR0dnQgdHZ0ZmxnIiwiIix0dnRmbGcpOwotICAgIGRl YnVnKEYxMTEsInR0dnQgc3BlZWQiLGNraXRvYSh0dHNwZWVkKSxzcGVlZCk7Ci0gICAgZGVidWco RjExMSwidHR2dCBmbG93Iixja2l0b2EodHRmbG93KSxmbG93KTsKLSAgICBkZWJ1ZyhGMTExLCJ0 dHZ0IGN1cmNhcnIiLGNraXRvYSh0dGNhcnIpLGN1cmNhcnIpOwotCi0vKiBOb3RlOiBOZXRCU0Qg YW5kIG1heWJlIG90aGVyIEJTRDQ0cyBoYXZlIGNmbWFrZXJhdygpICovCi0vKiBNYXliZSBpdCB3 b3VsZCBiZSBzaW1wbGVyIHRvIHVzZSBpdC4uLiAqLwotCi0gICAgdHRwbXNrID0gMHhmZjsKLSNp ZmRlZiBOT0xPQ0FMCi0gICAgcmV0dXJuKGNvbmJpbigoY2hhcillc2NjaHIpKTsKLSNlbHNlCi0g ICAgaWYgKHR0eWZkIDwgMCkgewkJCS8qIE5vdCBvcGVuLiAqLwotCWlmICh0dGNoaygpIDwgMCkK LQkgIHJldHVybigtMSk7Ci0JZWxzZQkJCQkvKiBCdXQgbWF5YmUgc29tZXRoaW5nIGJ1ZmZlcmVk LiAqLwotCSAgcmV0dXJuKDApOwotICAgIH0KLSNpZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaXBl KSByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTkVUQ01EICovCi0jaWZkZWYgTkVUUFRZCi0gICAgaWYg KHR0cHR5KSByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTkVUUFRZICovCi0jaWZkZWYgTkVUQ09OTgot ICAgIGlmIChuZXRjb25uKSB7Ci0jaWZkZWYgVENQU09DS0VUCi0jaWZkZWYgVENQX05PREVMQVkK LSAgICAgICAgewotCSAgICBleHRlcm4gaW50IHRjcF9ub2RlbGF5OwotCSAgICBpZiAodHRuZXQg PT0gTkVUX1RDUEIpIHsKLQkJaWYgKG5vZGVsYXlfc2F2ID4gLTEpIHsKLQkJICAgIG5vX2RlbGF5 KHR0eWZkLG5vZGVsYXlfc2F2KTsKLQkJICAgIG5vZGVsYXlfc2F2ID0gLTE7Ci0JCX0KLQkgICAg fQotICAgICAgICB9Ci0jZW5kaWYgLyogVENQX05PREVMQVkgKi8KLSNpZmRlZiBUTl9DT01QT1JU Ci0gICAgICAgIGlmIChpc3RuY29tcG9ydCgpKSB7Ci0gICAgICAgICAgICBpbnQgcmMgPSAtMTsK LSAgICAgICAgICAgIGlmICh0dnRmbGcgIT0gMCAmJiBzcGVlZCA9PSB0dHNwZWVkICYmIGZsb3cg PT0gdHRmbG93Ci0gICAgICAgICAgICAgICAgIC8qICYmIHR0Y2FyciA9PSBjdXJjYXJyICovICkg ewotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0dnQgbW9kZXMgYWxyZWFkeSBzZXQsIHNr aXBwaW5nLi4uIiwiIiwwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oMCk7CQkJLyogQWxyZWFk eSBiZWVuIGNhbGxlZC4gKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmbG93ICE9 IHR0ZmxvdykgewotICAgICAgICAgICAgICAgIGlmICgocmMgPSB0bnNldGZsb3coZmxvdykpIDwg MCkKLQkJICByZXR1cm4ocmMpOwotICAgICAgICAgICAgICAgIHR0ZmxvdyA9IGZsb3c7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3BlZWQgIT0gdHRzcGVlZCkgewotICAgICAgICAg ICAgICAgIGlmIChzcGVlZCA8PSAwKSAKLQkJICBzcGVlZCA9IHRuY19nZXRfYmF1ZCgpOwotICAg ICAgICAgICAgICAgIGVsc2UgaWYgKChyYyA9IHRuY19zZXRfYmF1ZChzcGVlZCkpIDwgMCkKLQkJ ICByZXR1cm4ocmMpOwotICAgICAgICAgICAgICAgIHR0c3BlZWQgPSBzcGVlZDsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIHRuY19zZXRfZGF0YXNpemUoOCk7Ci0JICAgIHRuY19zZXRfc3Rv cHNpemUoc3RvcGJpdHMpOwotCi0jaWZkZWYgSFdQQVJJVFkKLSAgICAgICAgICAgIGlmIChod3Bh cml0eSkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAoaHdwYXJpdHkpIHsKLQkJICBjYXNlICdl JzoJCS8qIEV2ZW4gKi8KLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwidHRyZXMgOCBi aXRzICsgZXZlbiBwYXJpdHkiLCIiLDApOwotICAgICAgICAgICAgICAgICAgICB0bmNfc2V0X3Bh cml0eSgzKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0JCSAgY2FzZSAnbyc6CQkvKiBP ZGQgKi8KLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwidHRyZXMgOCBiaXRzICsgb2Rk IHBhcml0eSIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgICAgIHRuY19zZXRfcGFyaXR5KDIpOwot ICAgICAgICAgICAgICAgICAgICBicmVhazsKLQkJICBjYXNlICdtJzoJCS8qIE1hcmsgKi8KLSAg ICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwidHRyZXMgOCBiaXRzICsgaW52YWxpZCBwYXJp dHk6IG1hcmsiLCIiLDApOwotICAgICAgICAgICAgICAgICAgICB0bmNfc2V0X3Bhcml0eSg0KTsK LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0JCSAgY2FzZSAncyc6CQkvKiBTcGFjZSAqLwot ICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dHJlcyA4IGJpdHMgKyBpbnZhbGlkIHBh cml0eTogc3BhY2UiLCIiLDApOwotICAgICAgICAgICAgICAgICAgICB0bmNfc2V0X3Bhcml0eSg1 KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgfSBlbHNlCi0jZW5kaWYgLyogSFdQQVJJVFkgKi8KLSAgICAgICAgICAgIHsKLSAgICAg ICAgICAgICAgICB0bmNfc2V0X3Bhcml0eSgxKTsJLyogTm9uZSAqLwotICAgICAgICAgICAgfQot ICAgICAgICAgICAgdHZ0ZmxnID0gMTsKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAg fQotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLQl0dnRm bGcgPSAxOwkJCS8qIE5ldHdvcmsgY29ubmVjdGlvbnMuLi4gKi8KLQlkZWJ1ZyhGMTAwLCJ0dHZ0 IG5ldHdvcmsgY29ubmVjdGlvbiwgc2tpcHBpbmcuLi4iLCIiLDApOwotCXJldHVybigwKTsJCQkv KiAuLi4gcmVxdWlyZSBubyBzcGVjaWFsIHNldHVwICovCi0gICAgfQotI2VuZGlmIC8qIE5FVENP Tk4gKi8KLQotICAgIGlmICh0dnRmbGcgIT0gMCAmJiBzcGVlZCA9PSB0dHNwZWVkICYmIGZsb3cg PT0gdHRmbG93Ci0JLyogJiYgdHRjYXJyID09IGN1cmNhcnIgKi8gKQotICAgICAgewotCSAgZGVi dWcoRjEwMCwidHR2dCBtb2RlcyBhbHJlYWR5IHNldCwgc2tpcHBpbmcuLi4iLCIiLDApOwotCSAg cmV0dXJuKDApOwkJCS8qIEFscmVhZHkgYmVlbiBjYWxsZWQuICovCi0gICAgICB9Ci0KLSAgICBp ZiAodHRmZGZsZwotI2lmbmRlZiBQbGFuOQotCSYmICFpc2F0dHkodHR5ZmQpCi0jZW5kaWYgLyog UGxhbjkgKi8KLQkpIHsKLQlkZWJ1ZyhGMTAwLCJ0dHZ0IHVzaW5nIGV4dGVybmFsIGZkLCBza2lw cGluZy4uLiIsIiIsMCk7Ci0JcmV0dXJuKDApOwotICAgIH0KLQotICAgIGRlYnVnKEYxMDAsInR0 dnQgc2V0dGluZyBtb2Rlcy4uLiIsIiIsMCk7Ci0KLSAgICBpZiAoeGxvY2FsKSB7CQkJLyogRm9y IGV4dGVybmFsIGxpbmVzLi4uICovCi0JczIgPSAoaW50KSAoc3BlZWQgLyAxMEwpOwotCXMgPSB0 dHNzcGQoczIpOwkJCS8qIENoZWNrL3NldCB0aGUgc3BlZWQgKi8KLQljYXJyY3RsKCZ0dHR2dCwg ZmxvdyAhPSBGTE9fRElBTCAvKiBEbyBjYXJyaWVyIGNvbnRyb2wgKi8KLQkJJiYgKHR0Y2FyciA9 PSBDQVJfT04gfHwgKHR0Y2FyciA9PSBDQVJfQVVUICYmIHR0bWRtICE9IDApKSk7Ci0gICAgfSBl bHNlCi0gICAgICBzID0gczIgPSAtMTsKLQotI2lmZGVmIENPSEVSRU5UCi0jZGVmaW5lIFNWT1JQ T1NJWAotI2VuZGlmIC8qIENPSEVSRU5UICovCi0KLSNpZm5kZWYgU1ZPUlBPU0lYCi0gICAgLyog QmVya2VsZXksIFY3LCBldGMgKi8KLSAgICBpZiAoZmxvdyA9PSBGTE9fUlRTQyB8fAkJLyogSGFy ZHdhcmUgZmxvdyBjb250cm9sICovCi0JZmxvdyA9PSBGTE9fRFRSQyB8fAotCWZsb3cgPT0gRkxP X0RUUlQpIHsKLQl0dGhmbG93KGZsb3csIDEsICZ0dHR2dCk7Ci0JZGVidWcoRjEwMCwidHR2dCBo YXJkIGZsb3csIFRBTkRFTSBvZmYiLCIiLDApOwotCXR0dHZ0LnNnX2ZsYWdzICY9IH5UQU5ERU07 CS8qIFR1cm4gb2ZmIHNvZnR3YXJlIGZsb3cgY29udHJvbCAqLwotICAgIH0gZWxzZSBpZiAoZmxv dyA9PSBGTE9fWE9OWCkgewkvKiBYb24vWG9mZiBmbG93IGNvbnRyb2wgKi8KLQlkZWJ1ZyhGMTAw LCJ0dHZ0IFRBTkRFTSBvbiIsIiIsMCk7Ci0JdHR0dnQuc2dfZmxhZ3MgfD0gVEFOREVNOwkvKiBB c2sgZm9yIGl0LiAqLwotCXR0aGZsb3coZmxvdywgMCwgJnR0dHZ0KTsJLyogVHVybiBvZmYgaGFy ZHdhcmUgZi9jICovCi0gICAgfSBlbHNlIGlmIChmbG93ID09IEZMT19OT05FKSB7Ci0JZGVidWco RjEwMCwidHR2dCBubyBmbG93LCBUQU5ERU0gb2ZmLCBSQVcgb24iLCIiLDApOwotCXR0dHZ0LnNn X2ZsYWdzICY9IH5UQU5ERU07CS8qIFR1cm4gb2ZmIHNvZnR3YXJlIGZsb3cgY29udHJvbCAqLwot CXR0aGZsb3coZmxvdywgMCwgJnR0dHZ0KTsJLyogVHVybiBvZmYgYW55IGhhcmR3YXJlIGYvYyB0 b28gKi8KLQl0dHR2dC5zZ19mbGFncyB8PSBSQVc7CQkvKiBFbnRlciByYXcgbW9kZSAqLwotICAg IH0gZWxzZSBpZiAoZmxvdyA9PSBGTE9fS0VFUCkgewkvKiBLZWVwIGRldmljZSdzIG9yaWdpbmFs IHNldHRpbmcgKi8KLQlkZWJ1ZyhGMTAwLCJ0dHZ0IGtlZXBpbmcgb3JpZ2luYWwgVEFOREVNIiwi IiwwKTsKLQl0dHR2dC5zZ19mbGFncyAmPSB+VEFOREVNOwotCXR0dHZ0LnNnX2ZsYWdzIHw9ICh0 dG9sZC5zZ19mbGFncyAmIFRBTkRFTSk7Ci0JLyogTk9URTogV2Ugc2hvdWxkIGFsc28gaGFuZGxl IGhhcmR3YXJlIGZsb3cgY29udHJvbCBoZXJlISAqLwotICAgIH0KLSAgICB0dHR2dC5zZ19mbGFn cyB8PSBSQVc7ICAgICAgICAgICAgICAvKiBSYXcgbW9kZSBpbiBhbGwgY2FzZXMgKi8KLSNpZmRl ZiBUT1dFUjEKLSAgICB0dHR2dC5zZ19mbGFncyAmPSB+KEVDSE98QU5ZUCk7ICAgICAvKiBObyBl Y2hvIG9yIHBhcml0eSAqLwotI2Vsc2UKLSAgICB0dHR2dC5zZ19mbGFncyAmPSB+RUNITzsgICAg ICAgICAgICAvKiBObyBlY2hvICovCi0jZW5kaWYgLyogVE9XRVIxICovCi0KLSNpZmRlZiBCRUxM VjEwCi0gICAgaWYgKGlvY3RsKHR0eWZkLFRJT0NTRVRQLCZ0dHR2dCkgPCAwKSAvKiBTZXQgdGhl IG5ldyBtb2RlcyAqLwotICAgICAgcmV0dXJuKC0xKTsKLSNlbHNlCi0gICAgaWYgKHN0dHkodHR5 ZmQsJnR0dHZ0KSA8IDApCQkvKiBTZXQgdGhlIG5ldyBtb2RlcyAqLwotICAgICAgcmV0dXJuKC0x KTsKLSNlbmRpZiAvKiBCRUxMVjEwICovCi0KLSNlbHNlIC8qIEl0IGlzIEFUVFNWIG9yIFBPU0lY ICovCi0KLSAgICBpZiAoZmxvdyA9PSBGTE9fWE9OWCkgewkJLyogU29mdHdhcmUgZmxvdyBjb250 cm9sICovCi0JdHR0dnQuY19pZmxhZyB8PSAoSVhPTnxJWE9GRik7CS8qIE9uIGlmIHJlcXVlc3Rl ZC4gKi8KLQl0dGhmbG93KGZsb3csIDAsICZ0dHR2dCk7CS8qIFR1cm4gb2ZmIGhhcmR3YXJlIGYv YyAqLwotCWRlYnVnKEYxMDAsInR0dnQgU1ZPUlBPU0lYIGZsb3cgWE9OL1hPRkYiLCIiLDApOwot ICAgIH0gZWxzZSBpZiAoZmxvdyA9PSBGTE9fTk9ORSkgewkvKiBOT05FICovCi0JdHR0dnQuY19p ZmxhZyAmPSB+KElYT058SVhPRkYpOwkvKiBUdXJuIG9mZiBYb24vWG9mZiAqLwotCXR0aGZsb3co ZmxvdywgMCwgJnR0dHZ0KTsJLyogVHVybiBvZmYgaGFyZHdhcmUgZi9jICovCi0JZGVidWcoRjEw MCwidHR2dCBTVk9SUE9TSVggZmxvdyBOT05FIiwiIiwwKTsKLSAgICB9IGVsc2UgaWYgKGZsb3cg PT0gRkxPX0tFRVApIHsKLQl0dHR2dC5jX2lmbGFnICY9IH4oSVhPTnxJWE9GRik7CS8qIFR1cm4g b2ZmIFhvbi9Yb2ZmIGZsYWdzICovCi0JdHR0dnQuY19pZmxhZyB8PSAodHRvbGQuY19pZmxhZyAm IChJWE9OfElYT0ZGKSk7IC8qIE9SIGluIG9sZCBvbmVzICovCi0jaWZkZWYgUE9TSVhfQ1JUU0NU UwotICAgICAgICB0dHR2dC5jX2NmbGFnICY9IH5DUlRTQ1RTOwkvKiBUdXJuIG9mZiBSVFMvQ1RT IGZsYWcgKi8KLSAgICAgICAgdHR0dnQuY19jZmxhZyB8PSAodHRvbGQuY19jZmxhZyAmIENSVFND VFMpOyAvKiBPUiBpbiBvbGQgb25lICovCi0jZW5kaWYgLyogUE9TSVhfQ1JUU0NUUyAqLwotCWRl YnVnKEYxMDAsInR0dnQgU1ZPUlBPU0lYIGZsb3cgS0VFUCIsIiIsMCk7Ci0gICAgfSBlbHNlIGlm IChmbG93ID09IEZMT19SVFNDIHx8CS8qIEhhcmR3YXJlIGZsb3cgY29udHJvbCAqLwotCSAgICAg ICBmbG93ID09IEZMT19EVFJDIHx8Ci0JICAgICAgIGZsb3cgPT0gRkxPX0RUUlQpIHsKLQl0dHR2 dC5jX2lmbGFnICY9IH4oSVhPTnxJWE9GRik7CS8qICgxOTYpICovCi0JdHRoZmxvdyhmbG93LCAx LCAmdHR0dnQpOwotCWRlYnVnKEYxMDAsInR0dnQgU1ZPUlBPU0lYIGZsb3cgSEFSRCIsIiIsMCk7 Ci0gICAgfQotI2lmbmRlZiBPWE9TCi0jaWZkZWYgQ09IRVJFTlQKLSAgICB0dHR2dC5jX2xmbGFn ICY9IH4oSVNJR3xJQ0FOT058RUNITyk7Ci0jZWxzZQotICAgIHR0dHZ0LmNfbGZsYWcgJj0gfihJ U0lHfElDQU5PTnxFQ0hPfElFWFRFTik7Ci0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLSNpZmRlZiBR TlgKLSAgICAvKiBOZWVkZWQgZm9yIGh3ZmMgKi8KLSAgICBpZiAoZmxvdyA9PSBGTE9fUlRTQyB8 fCBmbG93ID09IEZMT19EVFJDIHx8IGZsb3cgPT0gRkxPX0RUUlQpCi0gICAgICB0dHR2dC5jX2xm bGFnIHw9IElFWFRFTjsKLSNlbmRpZiAvKiBRTlggKi8KLSNlbHNlIC8qIE9YT1MgKi8KLSAgICB0 dHR2dC5jX2xmbGFnICY9IH4oSVNJR3xJQ0FOT058RUNITyk7Ci0gICAgdHR0dnQuY19jY1tWRElT Q0FSRF0gPSB0dHR2dC5jX2NjW1ZMTkVYVF0gPSBDRElTQUJMRTsKLSNlbmRpZiAvKiBPWE9TICov Ci0KLSAgICB0dHR2dC5jX2lmbGFnIHw9IChJR05CUkt8SUdOUEFSKTsKLQotLyogU3RvcCBiaXRz ICovCi0KLSNpZmRlZiBDU1RPUEIKLSAgICBpZiAoeGxvY2FsKSB7Ci0JaWYgKHN0b3BiaXRzID09 IDIpIHsKLQkgICAgdHR0dnQuY19jZmxhZyB8PSBDU1RPUEI7CS8qIDIgc3RvcCBiaXRzICovCi0J ICAgIGRlYnVnKEYxMDAsInR0dnQgMiBzdG9wYml0cyIsIiIsMCk7Ci0JfSBlbHNlIGlmIChzdG9w Yml0cyA9PSAxKSB7Ci0JICAgIHR0dHZ0LmNfY2ZsYWcgJj0gfihDU1RPUEIpOwkvKiAxIHN0b3Ag Yml0ICovCi0JICAgIGRlYnVnKEYxMDAsInR0dnQgMSBzdG9wYml0IiwiIiwwKTsKLQl9Ci0gICAg fQotI2VuZGlmIC8qIENTVE9QQiAqLwotCi0vKiBQYXJpdHkgKi8KLQotI2lmZGVmIEhXUEFSSVRZ Ci0gICAgaWYgKGh3cGFyaXR5ICYmIHhsb2NhbCkgewkJLyogSGFyZHdhcmUgcGFyaXR5ICovCi0j aWZkZWYgQ09NTUVOVAotLyogVW5jb21tZW50IHRoaXMgb25seSBpZiBuZWVkZWQgLS0gSSBkb24n dCB0aGluayBpdCBpcyAqLwotCXR0cmF3LmNfY2ZsYWcgJj0gfihDU0laRSk7CS8qIENsZWFyIG91 dCBjaGFyYWN0ZXItc2l6ZSBtYXNrICovCi0JdHRyYXcuY19jZmxhZyB8PSBDUzg7CQkvKiBBbmQg c2V0IGl0IHRvIDggKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0jaWZkZWYgSUdOUEFSCi0JZGVi dWcoRjEwMSwidHR2dCBod3Bhcml0eSBJR05QQVIiLCIiLElHTlBBUik7Ci0JdHR0dnQuY19pZmxh ZyB8PSBJR05QQVI7CS8qIERvbid0IGRpc2NhcmQgaW5jb21pbmcgYnl0ZXMgKi8KLSNlbmRpZiAv KiBJR05QQVIgKi8KLQl0dHR2dC5jX2NmbGFnIHw9IFBBUkVOQjsJLyogRW5hYmxlIHBhcml0eSAq LwotCi0Jc3dpdGNoIChod3Bhcml0eSkgewotCSAgY2FzZSAnZSc6CQkJLyogRXZlbiAqLwotCSAg ICB0dHR2dC5jX2NmbGFnICY9IH4oUEFST0REKTsKLQkgICAgZGVidWcoRjEwMCwidHR2dCA4IGJp dHMgKyBldmVuIHBhcml0eSIsIiIsMCk7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSAnbyc6CQkJLyog T2RkICovCi0JICAgIHR0dHZ0LmNfY2ZsYWcgfD0gUEFST0REOwotCSAgICBkZWJ1ZyhGMTAwLCJ0 dHZ0IDggYml0cyArIG9kZCBwYXJpdHkiLCIiLDApOwotCSAgICBicmVhazsKLQkgIGNhc2UgJ20n OgkJCS8qIE1hcmsgKi8KLQkgIGNhc2UgJ3MnOgkJCS8qIFNwYWNlICovCi0JICAgIC8qIFBBUkVY VCBpcyBtZW50aW9uZWQgaW4gU1ZJRCBidXQgdGhlIGRldGFpbHMgYXJlIG5vdCBnaXZlbi4gKi8K LQkgICAgLyogUEFSRVhUIGlzIG5vdCBpbmNsdWRlZCBpbiBQT1NJWCBJU08vSUVDIDk5NDUtMS4g Ki8KLQkgICAgZGVidWcoRjEwMCwidHR2dCA4IGJpdHMgKyBpbnZhbGlkIHBhcml0eSIsIiIsMCk7 Ci0JICAgIGJyZWFrOwotCX0KLSAgICB9IGVsc2UgewkJCQkvKiBXZSBoYW5kbGUgcGFyaXR5IG91 cnNlbHZlcyAqLwotI2VuZGlmIC8qIEhXUEFSSVRZICovCi0JdHR0dnQuY19jZmxhZyAmPSB+KFBB UkVOQik7CS8qIERvbid0IGVuYWJsZSBwYXJpdHkgKi8KLSNpZmRlZiBIV1BBUklUWQotICAgIH0K LSNlbmRpZiAvKiBIV1BBUklUWSAqLwotCi0jaWZkZWYgQVRUU1YKLSNpZmRlZiBCU0Q0NAotICAg IC8qIFRoaW5ncyBub3QgdG8gZG8uLi4gKi8KLSAgICB0dHR2dC5jX2lmbGFnICY9IH4oSU5MQ1J8 SUdOQ1J8SUNSTkx8SU5QQ0t8SVNUUklQfElYQU5ZKTsKLSNlbHNlCi0gICAgdHR0dnQuY19pZmxh ZyAmPSB+KElOTENSfElHTkNSfElDUk5MfElVQ0xDfElOUENLfElTVFJJUHxJWEFOWSk7Ci0jZW5k aWYgLyogQlNENDQgKi8KLSNlbHNlIC8qIFBPU0lYICovCi0gICAgdHR0dnQuY19pZmxhZyAmPSB+ KElOTENSfElHTkNSfElDUk5MfElOUENLfElTVFJJUCk7Ci0jZW5kaWYgLyogQVRUU1YgKi8KLSAg ICB0dHR2dC5jX2NmbGFnICY9IH4oQ1NJWkUpOwkJLyogWmVybyBvdXQgdGhlIGNoYXIgc2l6ZSBm aWVsZCAqLwotICAgIHR0dHZ0LmNfY2ZsYWcgfD0gKENTOHxDUkVBRHxIVVBDTCk7CS8qIENoYXIg c2l6ZSA4LCBlbmFibGUgcmVjZWl2ZXIsIGh1cCAqLwotICAgIHR0dHZ0LmNfb2ZsYWcgJj0gfk9Q T1NUOwkJLyogRG9uJ3QgcG9zdHByb2Nlc3Mgb3V0cHV0ICovCi0jaWZuZGVmIFZFT0YgLyogREdV WCB0ZXJtaW8gaGFzIFZFT0YgYXQgZW50cnkgNCwgc2VlIGNvbW1lbnQgYWJvdmUgKi8KLSAgICB0 dHR2dC5jX2NjWzRdID0gMTsKLSNlbHNlCi0jaWZuZGVmIE9YT1MKLSNpZmRlZiBWTUlOCi0gICAg dHR0dnQuY19jY1tWTUlOXSA9IDE7Ci0jZW5kaWYgLyogVk1JTiAqLwotI2Vsc2UgLyogT1hPUyAq LwotICAgIHR0dHZ0LmNfbWluID0gMTsKLSNlbmRpZiAvKiBPWE9TICovCi0jZW5kaWYgLyogVkVP RiAqLwotI2lmbmRlZiBWRU9MCS8qIERHVVggdGVybWlvIGhhcyBWRU9MIGF0IGVudHJ5IDUsIHNl ZSBjb21tZW50IGFib3ZlICovCi0gICAgdHR0dnQuY19jY1s1XSA9IDA7Ci0jZWxzZQotI2lmbmRl ZiBPWE9TCi0jaWZkZWYgVlRJTUUKLSAgICB0dHR2dC5jX2NjW1ZUSU1FXSA9IDA7Ci0jZW5kaWYg LyogVlRJTUUgKi8KLSNlbHNlIC8qIE9YT1MgKi8KLSAgICB0dHR2dC5jX3RpbWUgPSAwOwotI2Vu ZGlmIC8qIE9YT1MgKi8KLSNlbmRpZiAvKiBWRU9MICovCi0KLSNpZmRlZiBQbGFuOQotICAgIGlm IChwOXR0eXBhcml0eSgnbicpIDwgMCkKLSAgICAgIHJldHVybiAtMTsKLSNlbHNlCi0jaWZkZWYg QlNENDRPUlBPU0lYCi0gICAgZXJybm8gPSAwOwotI2lmZGVmIEJFT1NPUkJFQk9YCi0gICAgdHR0 dnQuY19jY1tWTUlOXSA9IDA7CQkvKiBEUjcgY2FuIG9ubHkgcG9sbC4gKi8KLSNlbmRpZiAvKiBC RU9TT1JCRUJPWCAqLwotCi0gICAgeCA9IHRjc2V0YXR0cih0dHlmZCxUQ1NBRFJBSU4sJnR0dHZ0 KTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dHZ0IEJTRDQ0T1JQT1NJWCB0Y3NldGF0dHIiLCIiLHgpOwot ICAgIGlmICh4IDwgMCkgewotCWRlYnVnKEYxMDEsInR0dnQgQlNENDRPUlBPU0lYIHRjc2V0YXR0 ciBlcnJubyIsIiIsZXJybm8pOwotCXJldHVybigtMSk7Ci0gICAgfQotI2Vsc2UgLyogQVRUU1Yg Ki8KLSAgICB4ID0gaW9jdGwodHR5ZmQsVENTRVRBVywmdHR0dnQpOwotICAgIGRlYnVnKEYxMDEs InR0dnQgQVRUU1YgaW9jdGwgVENTRVRBVyIsIiIseCk7Ci0gICAgaWYgKHggPCAwKSB7CQkJLyog c2V0IG5ldyBtb2RlcyAuICovCi0JZGVidWcoRjEwMSwidHR2dCBBVFRTViBpb2N0bCBUQ1NFVEFX IGVycm5vIiwiIixlcnJubyk7Ci0JcmV0dXJuKC0xKTsJCi0gICAgfQotI2VuZGlmIC8qIEJTRDQ0 T1JQT1NJWCAqLwotI2VuZGlmIC8qIFBsYW45ICovCi0jZW5kaWYgLyogQVRUU1YgKi8KLQotICAg IHR0c3BlZWQgPSBzcGVlZDsJCQkvKiBEb25lLCByZW1lbWJlciBob3cgd2Ugd2VyZSAqLwotICAg IHR0ZmxvdyA9IGZsb3c7CQkJLyogY2FsbGVkLCBzbyB3ZSBjYW4gZGVjaWRlIGhvdyB0byAqLwot ICAgIHR2dGZsZyA9IDE7CQkJCS8qIHJlc3BvbmQgbmV4dCB0aW1lLiAqLwotICAgIGRlYnVnKEYx MDAsInR0dnQgb2siLCIiLDApOwotICAgIHJldHVybigwKTsKLQotI2lmZGVmIENPSEVSRU5UCi0j dW5kZWYgU1ZPUlBPU0lYCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLQotI2VuZGlmIC8qIE5PTE9D QUwgKi8KLX0KLQotI2lmbmRlZiBOT0xPQ0FMCi0KLS8qIFNlcmlhbCBzcGVlZCBkZXBhcnRtZW50 IC4gLiAuICovCi0KLS8qCi0gIFNDTyBPU1I1LjAueCBtaWdodCBvciBtaWdodCBub3Qgc3VwcG9y dCBoaWdoIHNwZWVkcy4gIFNvbWV0aW1lcyB0aGV5IGFyZSBub3QKLSAgZGVmaW5lZCBpbiB0aGUg aGVhZGVyIGZpbGVzIGJ1dCB0aGV5IGFyZSBzdXBwb3J0ZWQgKGUuZy4gd2hlbiBidWlsZGluZyB3 aXRoCi0gIFVESyBjb21waWxlciByYXRoZXIgdGhhbiAvYmluL2NjKSwgc29tZXRpbWVzIHZpY2Ug dmVyc2EuICBFdmVuIHRob3VnaCA1LjAuNAotICB3YXMgdGhlIGZpcnN0IHJlbGVhc2UgdGhhdCBj YW1lIHdpdGggaGlnaCBzZXJpYWwgc3BlZWRzIHN0YW5kYXJkLCByZWxlYXNlcwotICBiYWNrIHRv IDUuMC4wIGNvdWxkIHVzZSB0aGVtIGlmIGNlcnRhaW4gcGF0Y2hlcyAob3IgInN1cHBsZW1lbnRz Iikgd2VyZQotICBhcHBsaWVkIHRvIHRoZSBTSU8gZHJpdmVyLiAgUGx1cyBhIGxvdCBvZiBTQ08g aW5zdGFsbGF0aW9ucyBydW4gdGhpcmQtcGFydHkKLSAgZHJpdmVycy4KLSovCi0jaWZkZWYgQ0tf U0NPVjUKLSNpZm5kZWYgQjM4NDAwCi0jZGVmaW5lCUIzODQwMAkwMDAwMDE3Ci0jZW5kaWYgLyog QjM4NDAwICovCi0jaWZuZGVmIEI1NzYwMAotI2RlZmluZQlCNTc2MDAJMDAwMDAyMQotI2VuZGlm IC8qIEI1NzYwMCAqLwotI2lmbmRlZiBCNzY4MDAKLSNkZWZpbmUJQjc2ODAwCTAwMDAwMjIKLSNl bmRpZiAvKiBCNzY4MDAgKi8KLSNpZm5kZWYgQjExNTIwMAotI2RlZmluZQlCMTE1MjAwCTAwMDAw MjMKLSNlbmRpZiAvKiBCMTE1MjAwICovCi0jaWZuZGVmIEIyMzA0MDAKLSNkZWZpbmUJQjIzMDQw MAkwMDAwMDI0Ci0jZW5kaWYgLyogQjIzMDQwMCAqLwotI2lmbmRlZiBCNDYwODAwCi0jZGVmaW5l CUI0NjA4MDAJMDAwMDAyNQotI2VuZGlmIC8qIEI0NjA4MDAgKi8KLSNpZm5kZWYgQjkyMTYwMAot I2RlZmluZQlCOTIxNjAwCTAwMDAwMjYKLSNlbmRpZiAvKiBCOTIxNjAwICovCi0jZW5kaWYgLyog Q0tfU0NPVjUgKi8KLS8qCi0gIFBsYW4gOSdzIG5hdGl2ZSBzcGVlZCBzZXR0aW5nIGludGVyZmFj ZSBsZXRzIHlvdSBzZXQgYW55dGhpbmcgeW91IGxpa2UsCi0gIGJ1dCB3aWxsIGZhaWwgaWYgdGhl IGhhcmR3YXJlIGRvZXNuJ3QgbGlrZSBpdCwgc28gd2UgYWxsb3cgYWxsIHRoZSBjb21tb24KLSAg c3BlZWRzLgotKi8KLSNpZmRlZiBQbGFuOQotI2lmbmRlZiBCNTAKLSNkZWZpbmUgQjUwIDUwCi0j ZW5kaWYgLyogQjUwICovCi0jaWZuZGVmIEI3NQotI2RlZmluZSBCNzUgNzUKLSNlbmRpZiAvKiBC NzUgKi8KLSNpZm5kZWYgQjExMAotI2RlZmluZSBCMTEwIDExMAotI2VuZGlmIC8qIEIxMTAgKi8K LSNpZm5kZWYgQjEzNAotI2RlZmluZSBCMTM0IDEzNAotI2VuZGlmIC8qIEIxMzQgKi8KLSNpZm5k ZWYgQjIwMAotI2RlZmluZSBCMjAwIDIwMAotI2VuZGlmIC8qIEIyMDAgKi8KLSNpZm5kZWYgQjMw MAotI2RlZmluZSBCMzAwIDMwMAotI2VuZGlmIC8qIEIzMDAgKi8KLSNpZm5kZWYgQjEyMDAKLSNk ZWZpbmUgQjEyMDAgMTIwMAotI2VuZGlmIC8qIEIxMjAwICovCi0jaWZuZGVmIEIxODAwCi0jZGVm aW5lIEIxODAwIDE4MDAKLSNlbmRpZiAvKiBCMTgwMCAqLwotI2lmbmRlZiBCMjQwMAotI2RlZmlu ZSBCMjQwMCAyNDAwCi0jZW5kaWYgLyogQjI0MDAgKi8KLSNpZm5kZWYgQjQ4MDAKLSNkZWZpbmUg QjQ4MDAgNDgwMAotI2VuZGlmIC8qIEI0ODAwICovCi0jaWZuZGVmIEI5NjAwCi0jZGVmaW5lIEI5 NjAwIDk2MDAKLSNlbmRpZiAvKiBCOTYwMCAqLwotI2lmbmRlZiBCMTQ0MDAKLSNkZWZpbmUgQjE0 NDAwIDE0NDAwCi0jZW5kaWYgLyogQjE0NDAwICovCi0jaWZuZGVmIEIxOTIwMAotI2RlZmluZSBC MTkyMDAgMTkyMDAKLSNlbmRpZiAvKiBCMTkyMDAgKi8KLSNpZm5kZWYgQjI4ODAwCi0jZGVmaW5l IEIyODgwMCAyODgwMAotI2VuZGlmIC8qIEIyODgwMCAqLwotI2lmbmRlZiBCMzg0MDAKLSNkZWZp bmUgQjM4NDAwIDM4NDAwCi0jZW5kaWYgLyogQjM4NDAwICovCi0jaWZuZGVmIEI1NzYwMAotI2Rl ZmluZSBCNTc2MDAgNTc2MDAKLSNlbmRpZiAvKiBCNTc2MDAgKi8KLSNpZm5kZWYgQjc2ODAwCi0j ZGVmaW5lIEI3NjgwMCA3NjgwMAotI2VuZGlmIC8qIEI3NjgwMCAqLwotI2lmbmRlZiBCMTE1MjAw Ci0jZGVmaW5lIEIxMTUyMDAgMTE1MjAwCi0jZW5kaWYgLyogQjExNTIwMCAqLwotI2lmbmRlZiBC MjMwNDAwCi0jZGVmaW5lIEIyMzA0MDAgMjMwNDAwCi0jZW5kaWYgLyogQjIzMDQwMCAqLwotI2lm bmRlZiBCNDYwODAwCi0jZGVmaW5lIEI0NjA4MDAgNDYwODAwCi0jZW5kaWYgLyogQjQ2MDgwMCAq LwotI2lmbmRlZiBCOTIxNjAwCi0jZGVmaW5lIEI5MjE2MDAgOTIxNjAwCi0jZW5kaWYgLyogQjky MTYwMCAqLwotI2VuZGlmIC8qIFBsYW45ICovCi0KLS8qICBUIFQgUyBTIFAgRCAgLS0gIENoZWNr cyBhbmQgc2V0cyB0cmFuc21pc3Npb24gcmF0ZS4gICovCi0KLS8qICBDYWxsIHdpdGggc3BlZWQg aW4gY2hhcmFjdGVycyAobm90IGJpdHMhKSBwZXIgc2Vjb25kLiAqLwotLyogIFJldHVybnMgLTEg b24gZmFpbHVyZSwgMCBpZiBpdCBkaWQgbm90aGluZywgMSBpZiBpdCBjaGFuZ2VkIHRoZSBzcGVl ZC4gKi8KLQotI2lmZGVmIFVTRVRDU0VUU1BFRUQKLS8qCi0gIFRoZSB0Y3NldHNwZWVkKCkgLyB0 Y2dldHNwZWVkKCkgaW50ZXJmYWNlIGxldHMgeW91IHBhc3MgYW55IG51bWJlciBhdCBhbGwKLSAg dG8gYmUgdXNlZCBhcyBhIHNwZWVkIHRvIGJlIHNldCwgcmF0aGVyIHRoYW4gZm9yY2luZyBhIGNo b2ljZSBmcm9tIGEKLSAgcHJlZGVmaW5lZCBsaXN0LiAgSXQgc2VlbXMgdG8gYmUgcGVjdWxpYXIg dG8gVW5peFdhcmUgNy4KLQotICBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9uIGNvZGVzIHRvIGJlIHBh c3NlZCB0byB0Y1tnc11ldHNwZWVkKCksCi0gIGJ1dCBmb3Igc29tZSByZWFzb24gdGhleSBkb24n dCBzZWVtIHRvIGJlIHBpY2tlZCB1cCBmcm9tIHRlcm1pb3MuaC4KLSovCi0jaWZuZGVmIFRDU19B TEwKLSNkZWZpbmUgVENTX0FMTCAwCi0jZW5kaWYgLyogVENTX0FMTCAqLwotI2lmbmRlZiBUQ1Nf SU4KLSNkZWZpbmUgVENTX0lOIDEKLSNlbmRpZiAvKiBUQ1NfSU4gKi8KLSNpZm5kZWYgVENTX09V VAotI2RlZmluZSBUQ1NfT1VUIDIKLSNlbmRpZiAvKiBUQ1NfT1VUICovCi0jZW5kaWYgLyogVVNF VENTRVRTUEVFRCAqLwotCi1pbnQKLXR0c3NwZChjcHMpIGludCBjcHM7IHsKLSAgICBpbnQgeDsK LSNpZmRlZiBQT1NJWAotLyogV2F0Y2ggb3V0LCBzcGVlZF90IHNob3VsZCBiZSB1bnNpZ25lZCwg c28gZG9uJ3QgY29tcGFyZSB3aXRoIC0xLCBldGMuLi4gKi8KLSAgICBzcGVlZF90Ci0jZWxzZQot ICAgIGludAotI2VuZGlmIC8qIFBPU0lYICovCi0gICAgICBzLCBzMjsKLSAgICBpbnQgb2sgPSAx OwkJCQkvKiBTcGVlZCBjaGVjayByZXN1bHQsIGFzc3VtZSBvayAqLwotCi0jaWZkZWYgT0xJTlVY SElTUEVFRAotICAgIHVuc2lnbmVkIGludCBzcGRfZmxhZ3MgPSAwOwotICAgIHN0cnVjdCBzZXJp YWxfc3RydWN0IHNlcmluZm87Ci0jZW5kaWYgLyogT0xJTlVYSElTUEVFRCAqLwotCi0gICAgZGVi dWcoRjEwMSwidHRzc3BkIGNwcyIsIiIsY3BzKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNzcGQgdHR5 ZmQiLCIiLHR0eWZkKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNzcGQgeGxvY2FsIiwiIix4bG9jYWwp OwotCi0gICAgaWYgKHR0eWZkIDwgMCB8fCB4bG9jYWwgPT0gMCkJLyogRG9uJ3Qgc2V0IHNwZWVk IG9uIGNvbnNvbGUgKi8KLSAgICAgIHJldHVybigwKTsKLQotI2lmZGVmCU5FVENPTk4KLSAgICBp ZiAobmV0Y29ubikgewotI2lmZGVmIFROX0NPTVBPUlQKLSAgICAgICAgaWYgKGlzdG5jb21wb3J0 KCkpCi0JICByZXR1cm4odG5jX3NldF9iYXVkKGNwcyAqIDEwKSk7Ci0gICAgICAgIGVsc2UKLSNl bmRpZiAvKiBUTl9DT01QT1JUICovCi0JcmV0dXJuKDApOwotICB9Ci0jZW5kaWYJLyogTkVUQ09O TiAqLwotI2lmZGVmIE5FVENNRAotICAgIGlmICh0dHBpcGUpIHJldHVybigwKTsKLSNlbmRpZiAv KiBORVRDTUQgKi8KLSNpZmRlZiBORVRQVFkKLSAgICBpZiAodHRwdHkpIHJldHVybigwKTsKLSNl bmRpZiAvKiBORVRQVFkgKi8KLQotICAgIGlmIChjcHMgPCAwKSByZXR1cm4oLTEpOwotICAgIHMg PSBzMiA9IDA7CQkJCS8qIE5COiBzIGFuZCBzMiBtaWdodCBiZSB1bnNpZ25lZCAqLwotCi0jaWZk ZWYgVVNFVENTRVRTUEVFRAotCi0gICAgcyA9IGNwcyAqIDEwTDsKLQotICAgIHggPSB0Y2dldGF0 dHIodHR5ZmQsJnR0Y3VyKTsJLyogR2V0IGN1cnJlbnQgc3BlZWQgKi8KLSAgICBkZWJ1ZyhGMTAx LCJ0dHNzcGQgdGNnZXRhdHRyIiwiIix4KTsKLSAgICBpZiAoeCA8IDApCi0gICAgICByZXR1cm4o LTEpOwotICAgIGRlYnVnKEYxMDEsInR0c3NwZCBUQ1NFVFNQRUVEIHNwZWVkIiwiIixzKTsKLQot ICAgIGVycm5vID0gMDsKLSAgICBpZiAocyA9PSA4ODgwTCkgewkJCS8qIDc1LzEyMDAgc3BsaXQg c3BlZWQgcmVxdWVzdGVkICovCi0JdGNzZXRzcGVlZChUQ1NfSU4sICZ0dGN1ciwgMTIwMEwpOwot CXRjc2V0c3BlZWQoVENTX09VVCwgJnR0Y3VyLCA3NUwpOwotICAgIH0gZWxzZQotICAgICAgdGNz ZXRzcGVlZChUQ1NfQUxMLCAmdHRjdXIsIHMpOwkvKiBQdXQgbmV3IHNwZWVkIGluIHN0cnVjdHMg Ki8KLSNpZmRlZiBERUJVRwotICAgIGlmIChlcnJubyAmIGRlYmxvZykgewotCWRlYnVnKEYxMDEs InR0c3NwZCBUQ1NFVFNQRUVEIGVycm5vIiwiIixlcnJubyk7Ci0gICAgfQotI2VuZGlmIC8qIERF QlVHICovCi0KLSNpZmRlZiBDT01NRU5UCi0gICAgdGNzZXRzcGVlZChUQ1NfQUxMLCAmdHRyYXcs IHMpOwotICAgIHRjc2V0c3BlZWQoVENTX0FMTCwgJnR0dHZ0LCBzKTsKLSAgICB0Y3NldHNwZWVk KFRDU19BTEwsICZ0dG9sZCwgcyk7Ci0jZWxzZQotICAgIGlmIChzID09IDg4ODBMKSB7CQkJLyog NzUvMTIwMCBzcGxpdCBzcGVlZCByZXF1ZXN0ZWQgKi8KLQl0Y3NldHNwZWVkKFRDU19JTiwgJnR0 cmF3LCAxMjAwTCk7Ci0JdGNzZXRzcGVlZChUQ1NfT1VULCAmdHRyYXcsIDc1TCk7Ci0JdGNzZXRz cGVlZChUQ1NfSU4sICZ0dHR2dCwgMTIwMEwpOwotCXRjc2V0c3BlZWQoVENTX09VVCwgJnR0dHZ0 LCA3NUwpOwotCXRjc2V0c3BlZWQoVENTX0lOLCAmdHRvbGQsIDEyMDBMKTsKLQl0Y3NldHNwZWVk KFRDU19PVVQsICZ0dG9sZCwgNzVMKTsKLSAgICB9IGVsc2UgewotCXRjc2V0c3BlZWQoVENTX0FM TCwgJnR0cmF3LCBzKTsKLQl0Y3NldHNwZWVkKFRDU19BTEwsICZ0dHR2dCwgcyk7Ci0JdGNzZXRz cGVlZChUQ1NfQUxMLCAmdHRvbGQsIHMpOwotICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0K LSAgICB4ID0gdGNzZXRhdHRyKHR0eWZkLFRDU0FEUkFJTiwmdHRjdXIpOyAvKiBTZXQgdGhlIHNw ZWVkICovCi0gICAgZGVidWcoRjEwMSwidHRzc3BkIHRjc2V0YXR0ciIsIiIseCk7Ci0gICAgaWYg KHggPCAwKQotICAgICAgcmV0dXJuKC0xKTsKLQotI2Vsc2UgIC8qIE5vdCBVU0VUQ1NFVFNQRUVE ICovCi0KLSAgICAvKiBGaXJzdCBjaGVjayB0aGF0IHRoZSBnaXZlbiBzcGVlZCBpcyB2YWxpZC4g Ki8KLQotICAgIHN3aXRjaCAoY3BzKSB7Ci0jaWZuZGVmIE1JTklYCi0gICAgICBjYXNlIDA6ICAg cyA9IEIwOyAgICBicmVhazsKLSAgICAgIGNhc2UgNTogICBzID0gQjUwOyAgIGJyZWFrOwotICAg ICAgY2FzZSA3OiAgIHMgPSBCNzU7ICAgYnJlYWs7Ci0jZW5kaWYgLyogTUlOSVggKi8KLSAgICAg IGNhc2UgMTE6ICBzID0gQjExMDsgIGJyZWFrOwotI2lmbmRlZiBNSU5JWAotICAgICAgY2FzZSAx MzogIHMgPSBCMTM0OyAgYnJlYWs7Ci0gICAgICBjYXNlIDE1OiAgcyA9IEIxNTA7ICBicmVhazsK LSAgICAgIGNhc2UgMjA6ICBzID0gQjIwMDsgIGJyZWFrOwotI2VuZGlmIC8qIE1JTklYICovCi0g ICAgICBjYXNlIDMwOiAgcyA9IEIzMDA7ICBicmVhazsKLSNpZm5kZWYgTUlOSVgKLSAgICAgIGNh c2UgNjA6ICBzID0gQjYwMDsgIGJyZWFrOwotI2VuZGlmIC8qIE1JTklYICovCi0gICAgICBjYXNl IDEyMDogcyA9IEIxMjAwOyBicmVhazsKLSNpZm5kZWYgTUlOSVgKLSAgICAgIGNhc2UgMTgwOiBz ID0gQjE4MDA7IGJyZWFrOwotI2VuZGlmIC8qIE1JTklYICovCi0gICAgICBjYXNlIDI0MDogcyA9 IEIyNDAwOyBicmVhazsKLSAgICAgIGNhc2UgNDgwOiBzID0gQjQ4MDA7IGJyZWFrOwotI2lmbmRl ZiBNSU5JWAotICAgICAgY2FzZSA4ODg6IHMgPSBCNzU7IHMyID0gQjEyMDA7IGJyZWFrOyAvKiA4 ODggPSA3NS8xMjAwIHNwbGl0IHNwZWVkICovCi0jZW5kaWYgLyogTUlOSVggKi8KLSNpZmRlZiBC NzIwMAotICAgICAgY2FzZSA3MjA6IHMgPSBCNzIwMDsgYnJlYWs7Ci0jZW5kaWYgLyogQjcyMDAg Ki8KLSAgICAgIGNhc2UgOTYwOiBzID0gQjk2MDA7IGJyZWFrOwotI2lmZGVmIEIxNDQwMAotICAg ICAgY2FzZSAxNDQwOiBzID0gQjE0NDAwOyBicmVhazsKLSNlbmRpZiAvKiBCMTQ0MDAgKi8KLSNp ZmRlZiBCMTkyMDAKLSAgICAgIGNhc2UgMTkyMDogcyA9IEIxOTIwMDsgYnJlYWs7Ci0jZWxzZQot I2lmZGVmIEVYVEEKLSAgICAgIGNhc2UgMTkyMDogcyA9IEVYVEE7IGJyZWFrOwotI2VuZGlmIC8q IEVYVEEgKi8KLSNlbmRpZiAvKiBCMTkyMDAgKi8KLSNpZmRlZiBCMjg4MDAKLSAgICAgIGNhc2Ug Mjg4MDogcyA9IEIyODgwMDsgYnJlYWs7Ci0jZW5kaWYgLyogQjI4ODAwICovCi0jaWZkZWYgQjM4 NDAwCi0gICAgICBjYXNlIDM4NDA6IHMgPSBCMzg0MDA7Ci0jaWZkZWYgT0xJTlVYSElTUEVFRAot ICAgICAgICBzcGRfZmxhZ3MgPSB+QVNZTkNfU1BEX01BU0s7CS8qIE5vbnplcm8sIGJ1dCB6ZXJv IGZsYWdzICovCi0jZW5kaWYgLyogT0xJTlVYSElTUEVFRCAqLwotCWJyZWFrOwotI2Vsc2UgLyog QjM4NDAwIG5vdCBkZWZpbmVkLi4uICovCi0jaWZkZWYgRVhUQgotICAgICAgY2FzZSAzODQwOiBz ID0gRVhUQjsgYnJlYWs7Ci0jZW5kaWYgLyogRVhUQiAqLwotI2VuZGlmIC8qIEIzODQwMCAqLwot Ci0jaWZkZWYgSFBVWAotI2lmZGVmIF9CNTc2MDAKLSAgICAgIGNhc2UgNTc2MDogcyA9IF9CNTc2 MDA7IGJyZWFrOwotI2VuZGlmIC8qIF9CNTc2MDAgKi8KLSNpZmRlZiBfQjExNTIwMAotICAgICAg Y2FzZSAxMTUyMDogcyA9IF9CMTE1MjAwOyBicmVhazsKLSNlbmRpZiAvKiBfQjExNTIwMCAqLwot I2Vsc2UKLSNpZmRlZiBPTElOVVhISVNQRUVECi0vKgotICBUaGlzIGJpdCBmcm9tIDxjYXJsb0Bz Zy50bi50dWRlbGZ0Lm5sPjoKLSAgIk9ubHkgbm90ZSB0byBtYWtlIGlzIG1heWJlIHRoaXM6IFdo ZW4gdGhlIEFTWU5DX1NQRF9DVVNUIGZsYWdzIGFyZSBzZXQgdGhlbgotICBzZXR0aW5nIHRoZSBz cGVlZCB0byAzODQwMCB3aWxsIHNldCB0aGUgY3VzdG9tIHNwZWVkIChhbmQgdHRnc3BkIHJldHVy bnMKLSAgMzg0MDApLCBidXQgc3BlZWRzIDU3NjAwIGFuZCAxMTUyMDAgd29uJ3Qgd29yayBhbnkg bW9yZSBiZWNhdXNlIEkgZGlkbid0Ci0gIHdhbnQgdG8gbWVzcyB1cCB0aGUgc3BlZWQgZmxhZ3Mg d2hlbiBzb21lb25lIGlzIGRvaW5nIHNvcGhpc3RpY2F0ZWQgc3R1ZmYKLSAgbGlrZSBjdXN0b20g c3BlZWRzLi4uIgotKi8KLSAgICAgIGNhc2UgNTc2MDogcyA9IEIzODQwMDsgc3BkX2ZsYWdzID0g QVNZTkNfU1BEX0hJOyBicmVhazsKLSAgICAgIGNhc2UgMTE1MjA6IHMgPSBCMzg0MDA7IHNwZF9m bGFncyA9IEFTWU5DX1NQRF9WSEk7IGJyZWFrOwotI2Vsc2UKLSNpZmRlZiBCNTc2MDAKLSAgICAg IGNhc2UgNTc2MDogcyA9IEI1NzYwMDsgYnJlYWs7Ci0jZW5kaWYgLyogQjU3NjAwICovCi0jaWZk ZWYgQjc2ODAwCi0gICAgICBjYXNlIDc2ODA6IHMgPSBCNzY4MDA7IGJyZWFrOwotI2VuZGlmIC8q IEI3NjgwMCAqLwotI2lmZGVmIEIxMTUyMDAKLSAgICAgIGNhc2UgMTE1MjA6IHMgPSBCMTE1MjAw OyBicmVhazsKLSNlbmRpZiAvKiBCMTE1MjAwICovCi0jZW5kaWYgLyogT0xJTlVYSElTUEVFRCAq LwotI2lmZGVmIEIxNTM2MDAKLSAgICAgIGNhc2UgMTUzNjA6IHMgPSBCMTUzNjAwOyBicmVhazsK LSNlbmRpZiAvKiBCMTUzNjAwICovCi0jaWZkZWYgQjIzMDQwMAotICAgICAgY2FzZSAyMzA0MDog cyA9IEIyMzA0MDA7IGJyZWFrOwotI2VuZGlmIC8qIEIyMzA0MDAgKi8KLSNpZmRlZiBCMzA3MjAw Ci0gICAgICBjYXNlIDMwNzIwOiBzID0gQjMwNzIwMDsgYnJlYWs7Ci0jZW5kaWYgLyogQjMwNzIw MCAqLwotI2lmZGVmIEI0NjA4MDAKLSAgICAgIGNhc2UgNDYwODA6IHMgPSBCNDYwODAwOyBicmVh azsKLSNlbmRpZiAvKiA0NjA4MDAgKi8KLSNpZmRlZiBCOTIxNjAwCi0gICAgICBjYXNlIDkyMTYw OiBzID0gQjkyMTYwMDsgYnJlYWs7Ci0jZW5kaWYgLyogQjkyMTYwMCAqLwotI2VuZGlmIC8qIEhQ VVggKi8KLSAgICAgIGRlZmF1bHQ6Ci0Jb2sgPSAwOwkJCQkvKiBHb29kIHNwZWVkIG5vdCBmb3Vu ZCwgc28gbm90IG9rICovCi0JYnJlYWs7Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsInR0c3NwZCBv ayIsIiIsb2spOwotICAgIGRlYnVnKEYxMDEsInR0c3NwZCBzIiwiIixzKTsKLQotICAgIGlmICgh b2spIHsKLQlkZWJ1ZyhGMTAwLCJ0dHNzcGQgZmFpbHMiLCIiLDApOwotCXJldHVybigtMSk7Ci0g ICAgfSBlbHNlIHsKLQlpZiAoIXMyKSBzMiA9IHM7CQkvKiBTZXQgaW5wdXQgc3BlZWQgKi8KLSNp ZmRlZiBQbGFuOQotCWlmIChwOXR0c3NwZChjcHMpIDwgMCkKLQkgIHJldHVybigtMSk7Ci0jZWxz ZQotI2lmZGVmIEJTRDQ0T1JQT1NJWAotCXggPSB0Y2dldGF0dHIodHR5ZmQsJnR0Y3VyKTsJLyog R2V0IGN1cnJlbnQgc3BlZWQgKi8KLQlkZWJ1ZyhGMTAxLCJ0dHNzcGQgdGNnZXRhdHRyIiwiIix4 KTsKLQlpZiAoeCA8IDApCi0JICByZXR1cm4oLTEpOwotI2lmZGVmIE9MSU5VWEhJU1BFRUQKLQlk ZWJ1ZyhGMTAxLCJ0dHNzcGQgc3BkX2ZsYWdzIiwiIixzcGRfZmxhZ3MpOwotCWlmIChzcGRfZmxh Z3MgJiYgc3BkX2ZsYWdzICE9IEFTWU5DX1NQRF9DVVNUKSB7Ci0JICAgIGlmIChpb2N0bCh0dHlm ZCwgVElPQ0dTRVJJQUwsICZzZXJpbmZvKSA8IDApIHsKLQkJZGVidWcoRjEwMCwidHRzc3BkOiBU SU9DR1NFUklBTCBmYWlsZWQiLCIiLDApOwotCQlyZXR1cm4oLTEpOwotCSAgICB9IGVsc2UgZGVi dWcoRjEwMCwidHRzc3BkOiBUSU9DR1NFUklBTCBvayIsIiIsMCk7Ci0JICAgIHNlcmluZm8uZmxh Z3MgJj0gfkFTWU5DX1NQRF9NQVNLOwotCSAgICBzZXJpbmZvLmZsYWdzIHw9IChzcGRfZmxhZ3Mg JiBBU1lOQ19TUERfTUFTSyk7Ci0JICAgIGlmIChpb2N0bCh0dHlmZCwgVElPQ1NTRVJJQUwsICZz ZXJpbmZvKSA8IDApCi0JICAgICAgcmV0dXJuKC0xKTsKLQl9Ci0jZW5kaWYgLyogT0xJTlVYSElT UEVFRCAqLwotCWNmc2V0b3NwZWVkKCZ0dGN1cixzKTsKLQljZnNldGlzcGVlZCgmdHRjdXIsczIp OwotCWNmc2V0b3NwZWVkKCZ0dHJhdyxzKTsKLQljZnNldGlzcGVlZCgmdHRyYXcsczIpOwotCWNm c2V0b3NwZWVkKCZ0dHR2dCxzKTsKLQljZnNldGlzcGVlZCgmdHR0dnQsczIpOwotCWNmc2V0b3Nw ZWVkKCZ0dG9sZCxzKTsKLQljZnNldGlzcGVlZCgmdHRvbGQsczIpOwotCXggPSB0Y3NldGF0dHIo dHR5ZmQsVENTQURSQUlOLCZ0dGN1cik7Ci0JZGVidWcoRjEwMSwidHRzc3BkIHRjc2V0YXR0ciIs IiIseCk7Ci0JaWYgKHggPCAwKSByZXR1cm4oLTEpOwotI2Vsc2UKLSNpZmRlZiBBVFRTVgotCWlm IChjcHMgPT0gODg4KSByZXR1cm4oLTEpOwkvKiBObyBzcGxpdCBzcGVlZHMsIHNvcnJ5LiAqLwot CXggPSBpb2N0bCh0dHlmZCxUQ0dFVEEsJnR0Y3VyKTsKLQlkZWJ1ZyhGMTAxLCJ0dHNzcGQgVENH RVRBIGlvY3RsIiwiIix4KTsKLQlpZiAoeCA8IDApIHJldHVybigtMSk7Ci0JdHRjdXIuY19jZmxh ZyAmPSB+Q0JBVUQ7Ci0JdHRjdXIuY19jZmxhZyB8PSBzOwotCXR0dHZ0LmNfY2ZsYWcgJj0gfkNC QVVEOwotCXR0dHZ0LmNfY2ZsYWcgfD0gczsKLQl0dHJhdy5jX2NmbGFnICY9IH5DQkFVRDsKLQl0 dHJhdy5jX2NmbGFnIHw9IHM7Ci0JdHRvbGQuY19jZmxhZyAmPSB+Q0JBVUQ7Ci0JdHRvbGQuY19j ZmxhZyB8PSBzOwotCXggPSBpb2N0bCh0dHlmZCxUQ1NFVEFXLCZ0dGN1cik7Ci0JZGVidWcoRjEw MSwidHRzc3BkIFRDU0VUQVcgaW9jdGwiLCIiLHgpOwotCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsK LSNlbHNlCi0jaWZkZWYgQkVMTFYxMAotCXggPSBpb2N0bCh0dHlmZCxUSU9DR0RFViwmdGRjdXIp OwotCWRlYnVnKEYxMDEsInR0c3NwZCBUSU9DR0RFViBpb2N0bCIsIiIseCk7Ci0JaWYgKHggPCAw KSByZXR1cm4oLTEpOwotCXRkY3VyLmlzcGVlZCA9IHMyOwotCXRkY3VyLm9zcGVlZCA9IHM7Ci0J ZXJybm8gPSAwOwotCW9rID0gaW9jdGwodHR5ZmQsVElPQ1NERVYsJnRkY3VyKTsKLQlkZWJ1ZyhG MTAxLCJ0dHNzcGQgQkVMTFYxMCBpb2N0bCIsIiIsb2spOwotCWlmIChvayA8IDApIHsKLQkgICAg cGVycm9yKHR0bm1zdik7Ci0JICAgIGRlYnVnKEYxMDEsInR0c3NwZCBCRUxMVjEwIGVycm5vIiwi Iixvayk7Ci0JICAgIHJldHVybigtMSk7Ci0JfQotI2Vsc2UKLQl4ID0gZ3R0eSh0dHlmZCwmdHRj dXIpOwotCWRlYnVnKEYxMDEsInR0c3NwZCBndHR5IiwiIix4KTsKLQlpZiAoeCA8IDApIHJldHVy bigtMSk7Ci0JdHRjdXIuc2dfb3NwZWVkID0gczsgdHRjdXIuc2dfaXNwZWVkID0gczI7Ci0JdHR0 dnQuc2dfb3NwZWVkID0gczsgdHR0dnQuc2dfaXNwZWVkID0gczI7Ci0JdHRyYXcuc2dfb3NwZWVk ID0gczsgdHRyYXcuc2dfaXNwZWVkID0gczI7Ci0JdHRvbGQuc2dfb3NwZWVkID0gczsgdHRvbGQu c2dfaXNwZWVkID0gczI7Ci0JeCA9IHN0dHkodHR5ZmQsJnR0Y3VyKTsKLQlkZWJ1ZyhGMTAxLCJ0 dHNzcGQgc3R0eSIsIiIseCk7Ci0JaWYgKHggPCAwKSByZXR1cm4oLTEpOwotI2VuZGlmIC8qIEJF TExWMTAgKi8KLSNlbmRpZiAvKiBBVFRTViAqLwotI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLwot I2VuZGlmIC8qIFBsYW45ICovCi0gICAgfQotICAgIHJldHVybigxKTsJCQkJLyogUmV0dXJuIDEg PSBzdWNjZXNzLiAqLwotI2VuZGlmIC8qIFVTRVRDU0VUU1BFRUQgKi8KLX0KLQotI2VuZGlmIC8q IE5PTE9DQUwgKi8KLQotLyogQyBPIE4gRyBTIFAgRCAgLSAgR2V0IHNwZWVkIG9mIGNvbnNvbGUg dGVybWluYWwgICovCi0KLWxvbmcKLWNvbmdzcGQoKSB7Ci0vKgotICBUaGlzIGlzIGEgZGlzZ3Vz dGluZyBoYWNrLiAgVGhlIHJpZ2h0IHdheSB0byBkbyB0aGlzIHdvdWxkIGJlIHRvIHBhc3MgYW4K LSAgYXJndW1lbnQgdG8gdHRnc3BkKCksIGJ1dCB0aGVuIHdlJ2QgbmVlZCB0byBjaGFuZ2UgdGhl IEtlcm1pdCBBUEkgYW5kCi0gIGFsbCBvZiB0aGUgY2s/dGlvLmMgbW9kdWxlcy4gIChDdXJyZW50 bHkgdXNlZCBvbmx5IGZvciBybG9naW4uKQotKi8KLSAgICBpbnQgdDE7Ci0gICAgbG9uZyBzcGQ7 Ci0jaWZkZWYgTkVUQ09OTgotICAgIGludCB0MiA9IG5ldGNvbm47Ci0gICAgbmV0Y29ubiA9IDA7 Ci0jZW5kaWYgLyogTkVUQ09OTiAqLwotICAgIHQxID0gdHR5ZmQ7Ci0gICAgdHR5ZmQgPSAtMTsK LSAgICBzcGQgPSB0dGdzcGQoKTsKLSAgICBkZWJ1ZyhGMTAxLCJjb25nc3BkIiwiIixzcGQpOwot I2lmZGVmIE5FVENPTk4KLSAgICBuZXRjb25uID0gdDI7Ci0jZW5kaWYgLyogTkVUQ09OTiAqLwot ICAgIHR0eWZkID0gdDE7Ci0gICAgcmV0dXJuKHNwZCk7Ci19Ci0KLS8qICBUIFQgUyBQIEQgTCBJ IFMgVCAgLS0gR2V0IGxpc3Qgb2Ygc2VyaWFsIHNwZWVkcyBhbGxvd2VkIG9uIHRoaXMgcGxhdGZv cm0gKi8KLQotI2RlZmluZSBOU1BETElTVCA2NAotc3RhdGljIGxvbmcgc3BkbGlzdFtOU1BETElT VF07Ci0vKgotICBBcyB3cml0dGVuLCB0aGlzIHBpY2tzIHVwIHRoZSBzcGVlZHMga25vd24gYXQg Y29tcGlsZSB0aW1lLCBhbmQgdGh1cwotICBhcHBseSB0byB0aGUgc3lzdGVtIHdoZXJlIEMtS2Vy bWl0IHdhcyBidWlsdCwgcmF0aGVyIHRoYW4gdG8gdGhlIG9uZSB3aGVyZQotICBpdCBpcyBydW5u aW5nLiAgU3VnZ2VzdGlvbnMgZm9yIGltcHJvdmVtZW50IGFyZSBhbHdheXMgd2VsY29tZS4KLSov Ci1sb25nICoKLXR0c3BkbGlzdCgpIHsKLSAgICBpbnQgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwg TlNQRExJU1Q7IGkrKykJLyogSW5pdGlhbGl6ZSB0aGUgbGlzdCAqLwotICAgICAgc3BkbGlzdFtp XSA9IC0xTDsKLSAgICBpID0gMTsKLQotI2lmZGVmIFVTRVRDU0VUU1BFRUQJCQkvKiBObyB3YXkg dG8gZmluZCBvdXQgd2hhdCdzIGxlZ2FsICovCi0gICAgZGVidWcoRjEwMCwidHRzcGRsaXN0IFVT RVRDU0VUU1BFRUQiLCIiLDApOwotICAgIHNwZGxpc3RbaSsrXSA9IDUwTDsKLSNpZm5kZWYgVVc3 Ci0gICAgc3BkbGlzdFtpKytdID0gNzVMOwotI2VuZGlmIC8qIFVXNyAqLwotICAgIHNwZGxpc3Rb aSsrXSA9IDExMEw7Ci0jaWZuZGVmIFVXNwotICAgIHNwZGxpc3RbaSsrXSA9IDEzNEw7Ci0jZW5k aWYgLyogVVc3ICovCi0gICAgc3BkbGlzdFtpKytdID0gMTUwTDsKLSAgICBzcGRsaXN0W2krK10g PSAyMDBMOwotICAgIHNwZGxpc3RbaSsrXSA9IDMwMEw7Ci0gICAgc3BkbGlzdFtpKytdID0gNjAw TDsKLSAgICBzcGRsaXN0W2krK10gPSAxMjAwTDsKLSAgICBzcGRsaXN0W2krK10gPSAxODAwTDsK LSAgICBzcGRsaXN0W2krK10gPSAyNDAwTDsKLSAgICBzcGRsaXN0W2krK10gPSA0ODAwTDsKLSAg ICBzcGRsaXN0W2krK10gPSA4ODgwTDsKLSAgICBzcGRsaXN0W2krK10gPSA5NjAwTDsKLSAgICBz cGRsaXN0W2krK10gPSAxNDQwMEw7Ci0gICAgc3BkbGlzdFtpKytdID0gMTkyMDBMOwotICAgIHNw ZGxpc3RbaSsrXSA9IDI4ODAwTDsKLSNpZm5kZWYgVVc3Ci0gICAgc3BkbGlzdFtpKytdID0gMzM2 MDBMOwotI2VuZGlmIC8qIFVXNyAqLwotICAgIHNwZGxpc3RbaSsrXSA9IDM4NDAwTDsKLSAgICBz cGRsaXN0W2krK10gPSA1NzYwMEw7Ci0gICAgc3BkbGlzdFtpKytdID0gNzY4MDBMOwotICAgIHNw ZGxpc3RbaSsrXSA9IDExNTIwMEw7Ci0jaWZuZGVmIFVXNwotICAgIHNwZGxpc3RbaSsrXSA9IDE1 MzYwMEw7Ci0gICAgc3BkbGlzdFtpKytdID0gMjMwNDAwTDsKLSAgICBzcGRsaXN0W2krK10gPSAz MDcyMDBMOwotICAgIHNwZGxpc3RbaSsrXSA9IDQ2MDgwMEw7Ci0gICAgc3BkbGlzdFtpKytdID0g OTIxNjAwTDsKLSNlbmRpZiAvKiBVVzcgKi8KLQotI2Vsc2UgIC8qIFVTRVRDU0VUU1BFRUQgKi8K LQotICAgIGRlYnVnKEYxMDAsInR0c3BkbGlzdCBubyBVU0VUQ1NFVFNQRUVEIiwiIiwwKTsKLQot I2lmZGVmIEI1MAotICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCNTAiLCIiLEI1MCk7Ci0gICAg c3BkbGlzdFtpKytdID0gNTBMOwotI2VuZGlmIC8qIEI1MCAqLwotI2lmZGVmIEI3NQotICAgIGRl YnVnKEYxMDEsInR0c3BkbGlzdCBCNzUiLCIiLEI3NSk7Ci0gICAgc3BkbGlzdFtpKytdID0gNzVM OwotI2VuZGlmIC8qIEI3NSAqLwotI2lmZGVmIEIxMTAKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxp c3QgQjExMCIsIiIsQjExMCk7Ci0gICAgc3BkbGlzdFtpKytdID0gMTEwTDsKLSNlbmRpZiAvKiBC MTEwICovCi0jaWZkZWYgQjEzNAotICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCMTM0IiwiIixC MTM0KTsKLSAgICBzcGRsaXN0W2krK10gPSAxMzRMOwotI2VuZGlmIC8qIEIxMzQgKi8KLSNpZmRl ZiBCMTUwCi0gICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEIxNTAiLCIiLEIxNTApOwotICAgIHNw ZGxpc3RbaSsrXSA9IDE1MEw7Ci0jZW5kaWYgLyogQjE1MCAqLwotI2lmZGVmIEIyMDAKLSAgICBk ZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjIwMCIsIiIsQjIwMCk7Ci0gICAgc3BkbGlzdFtpKytdID0g MjAwTDsKLSNlbmRpZiAvKiBCMjAwICovCi0jaWZkZWYgQjMwMAotICAgIGRlYnVnKEYxMDEsInR0 c3BkbGlzdCBCMzAwIiwiIixCMzAwKTsKLSAgICBzcGRsaXN0W2krK10gPSAzMDBMOwotI2VuZGlm IC8qIEIzMDAgKi8KLSNpZmRlZiBCNjAwCi0gICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEI2MDAi LCIiLEI2MDApOwotICAgIHNwZGxpc3RbaSsrXSA9IDYwMEw7Ci0jZW5kaWYgLyogQjYwMCAqLwot I2lmZGVmIEIxMjAwCi0gICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEIxMjAwIiwiIixCMTIwMCk7 Ci0gICAgc3BkbGlzdFtpKytdID0gMTIwMEw7Ci0jZW5kaWYgLyogQjEyMDAgKi8KLSNpZmRlZiBC MTgwMAotICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCMTgwMCIsIiIsQjE4MDApOwotICAgIHNw ZGxpc3RbaSsrXSA9IDE4MDBMOwotI2VuZGlmIC8qIEIxODAwICovCi0jaWZkZWYgQjI0MDAKLSAg ICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjI0MDAiLCIiLEIyNDAwKTsKLSAgICBzcGRsaXN0W2kr K10gPSAyNDAwTDsKLSNlbmRpZiAvKiBCMjQwMCAqLwotI2lmZGVmIEI0ODAwCi0gICAgZGVidWco RjEwMSwidHRzcGRsaXN0IEI0ODAwIiwiIixCNDgwMCk7Ci0gICAgc3BkbGlzdFtpKytdID0gNDgw MEw7Ci0jZW5kaWYgLyogQjQ4MDAgKi8KLSNpZmRlZiBCOTYwMAotICAgIGRlYnVnKEYxMDEsInR0 c3BkbGlzdCBCOTYwMCIsIiIsQjk2MDApOwotICAgIHNwZGxpc3RbaSsrXSA9IDk2MDBMOwotI2Vu ZGlmIC8qIEI5NjAwICovCi0jaWZkZWYgQjE0NDAwCi0gICAgZGVidWcoRjEwMSwidHRzcGRsaXN0 IEIxNDQwMCIsIiIsQjE0NDAwKTsKLSAgICBzcGRsaXN0W2krK10gPSAxNDQwMEw7Ci0jZW5kaWYg LyogQjE0NDAwICovCi0jaWZkZWYgQjE5MjAwCi0gICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEIx OTIwMCIsIiIsQjE5MjAwKTsKLSAgICBzcGRsaXN0W2krK10gPSAxOTIwMEw7Ci0jZWxzZQotI2lm ZGVmIEVYVEEKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgRVhUQSIsIiIsRVhUQSk7Ci0gICAg c3BkbGlzdFtpKytdID0gMTkyMDBMOwotI2VuZGlmIC8qIEVYVEEgKi8KLSNlbmRpZiAvKiBCMTky MDAgKi8KLSNpZmRlZiBCMjg4MDAKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjI4ODAwIiwi IixCMjg4MDApOwotICAgIHNwZGxpc3RbaSsrXSA9IDI4ODAwTDsKLSNlbmRpZiAvKiBCMjg4MDAg Ki8KLSNpZmRlZiBCMzM2MDAKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjMzNjAwIiwiIixC MzM2MDApOwotICAgIHNwZGxpc3RbaSsrXSA9IDMzNjAwTDsKLSNlbmRpZiAvKiBCMzM2MDAgKi8K LSNpZmRlZiBCMzg0MDAKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjM4NDAwIiwiIixCMzg0 MDApOwotICAgIHNwZGxpc3RbaSsrXSA9IDM4NDAwTDsKLSNlbHNlCi0jaWZkZWYgRVhUQgotICAg IGRlYnVnKEYxMDEsInR0c3BkbGlzdCBFWFRCIiwiIixFWFRCKTsKLSAgICBzcGRsaXN0W2krK10g PSAzODQwMEw7Ci0jZW5kaWYgLyogRVhUQiAqLwotI2VuZGlmIC8qIEIzODQwMCAqLwotI2lmZGVm IF9CNTc2MDAKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgX0I1NzYwMCIsIiIsX0I1NzYwMCk7 Ci0gICAgc3BkbGlzdFtpKytdID0gNTc2MDBMOwotI2Vsc2UKLSNpZmRlZiBCNTc2MDAKLSAgICBk ZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjU3NjAwIiwiIixCNTc2MDApOwotICAgIHNwZGxpc3RbaSsr XSA9IDU3NjAwTDsKLSNlbmRpZiAvKiBCNTc2MDAgKi8KLSNlbmRpZiAvKiBfQjU3NjAwICovCi0j aWZkZWYgQjc2ODAwCi0gICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEI3NjgwMCIsIiIsQjc2ODAw KTsKLSAgICBzcGRsaXN0W2krK10gPSA3NjgwMEw7Ci0jZW5kaWYgLyogQjc2ODAwICovCi0jaWZk ZWYgX0IxMTUyMDAKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgX0IxMTUyMDAiLCIiLF9CMTE1 MjAwKTsKLSAgICBzcGRsaXN0W2krK10gPSAxMTUyMDBMOwotI2Vsc2UKLSNpZmRlZiBCMTE1MjAw Ci0gICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEIxMTUyMDAiLCIiLEIxMTUyMDApOwotICAgIHNw ZGxpc3RbaSsrXSA9IDExNTIwMEw7Ci0jZW5kaWYgLyogQjExNTIwMCAqLwotI2VuZGlmIC8qIF9C MTE1MjAwICovCi0jaWZkZWYgQjE1MzYwMAotICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCMTUz NjAwIiwiIixCMTUzNjAwKTsKLSAgICBzcGRsaXN0W2krK10gPSAxNTM2MDBMOwotI2VuZGlmIC8q IEIxNTM2MDAgKi8KLSNpZmRlZiBCMjMwNDAwCi0gICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEIy MzA0MDAiLCIiLEIyMzA0MDApOwotICAgIHNwZGxpc3RbaSsrXSA9IDIzMDQwMEw7Ci0jZW5kaWYg LyogQjIzMDQwMCAqLwotI2lmZGVmIEIzMDcyMDAKLSAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3Qg QjMwNzIwMCIsIiIsQjMwNzIwMCk7Ci0gICAgc3BkbGlzdFtpKytdID0gMzA3MjAwTDsKLSNlbmRp ZiAvKiBCMzA3MjAwICovCi0jaWZkZWYgQjQ2MDgwMAotICAgIGRlYnVnKEYxMDEsInR0c3BkbGlz dCBCNDYwODAwIiwiIixCNDYwODAwKTsKLSAgICBzcGRsaXN0W2krK10gPSA0NjA4MDBMOwotI2Vu ZGlmIC8qIEI0NjA4MDAgKi8KLSNpZmRlZiBCOTIxNjAwCi0gICAgZGVidWcoRjEwMSwidHRzcGRs aXN0IEI5MjE2MDAiLCIiLEI5MjE2MDApOwotICAgIHNwZGxpc3RbaSsrXSA9IDkyMTYwMEw7Ci0j ZW5kaWYgLyogQjkyMTYwMCAqLwotI2VuZGlmIC8qIFVTRVRDU0VUU1BFRUQgKi8KLSAgICBzcGRs aXN0WzBdID0gaSAtIDE7CQkJLyogUmV0dXJuIGNvdW50IGluIDB0aCBlbGVtZW50ICovCi0gICAg ZGVidWcoRjExMSwidHRzcGRsaXN0IHNwZGxpc3QiLCIwIixzcGRsaXN0WzBdKTsKLSAgICByZXR1 cm4oKGxvbmcgKilzcGRsaXN0KTsKLX0KLQotLyogVCBUIEcgUyBQIEQgIC0gIEdldCBzcGVlZCBv ZiBjdXJyZW50bHkgc2VsZWN0ZWQgdHR5IGxpbmUgICovCi0KLS8qCi0gIFVucmVsaWFibGUuICBB ZnRlciBTRVQgTElORSwgaXQgcmV0dXJucyBhbiBhY3R1YWwgc3BlZWQsIGJ1dCBub3QgbmVjZXNz YXJpbHkKLSAgdGhlIHJlYWwgc3BlZWQuICBPbiBzb21lIHN5c3RlbXMsIGl0IHJldHVybnMgdGhl IGxpbmUncyBub21pbmFsIHNwZWVkLCBmcm9tCi0gIC9ldGMvdHR5dGFiLiAgRXZlbiBpZiB5b3Ug U0VUIFNQRUVEIHRvIHNvbWV0aGluZyBlbHNlLCB0aGlzIGZ1bmN0aW9uIG1pZ2h0Ci0gIG5vdCBu b3RpY2UuCi0qLwotbG9uZwotdHRnc3BkKCkgewkJCQkvKiBHZXQgY3VycmVudCBzZXJpYWwgZGV2 aWNlIHNwZWVkICovCi0jaWZkZWYgTk9MT0NBTAotICAgIHJldHVybigtMUwpOwotI2Vsc2UKLSNp ZmRlZiBQT1NJWAotICAgIHNwZWVkX3QJCQkJLyogU2hvdWxkIGJlIHVuc2lnbmVkICovCi0jZWxz ZQotICAgIGludAkJCQkJLyogSXNuJ3QgdW5zaWduZWQgKi8KLSNlbmRpZiAvKiBQT1NJWCAqLwot ICAgICAgczsKLSAgICBpbnQgeDsKLSAgICBsb25nIHNzOwotI2lmZGVmIE9MSU5VWEhJU1BFRUQK LSAgICB1bnNpZ25lZCBpbnQgc3BkX2ZsYWdzID0gMDsKLSAgICBzdHJ1Y3Qgc2VyaWFsX3N0cnVj dCBzZXJpbmZvOwotI2VuZGlmIC8qIE9MSU5VWEhJU1BFRUQgKi8KLQotI2lmZGVmIE5FVENPTk4K LSAgICBpZiAobmV0Y29ubikgewotI2lmZGVmIFROX0NPTVBPUlQKLQlpZiAoaXN0bmNvbXBvcnQo KSkKLQkgIHJldHVybih0bmNfZ2V0X2JhdWQoKSk7Ci0JZWxzZQotI2VuZGlmIC8qIFROX0NPTVBP UlQgKi8KLQkgIHJldHVybigtMSk7CQkJLyogLTEgaWYgbmV0d29yayBjb25uZWN0aW9uICovCi0g ICAgfQotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSNpZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaXBl KSByZXR1cm4oLTEpOwotI2VuZGlmIC8qIE5FVENNRCAqLwotI2lmZGVmIE5FVFBUWQotICAgIGlm ICh0dHB0eSkgcmV0dXJuKC0xKTsKLSNlbmRpZiAvKiBORVRQVFkgKi8KLQotICAgIGRlYnVnKEYx MDEsInR0Z3NwZCB0dHlmZCIsIiIsdHR5ZmQpOwotCi0jaWZkZWYgVVNFVENTRVRTUEVFRAotCi0g ICAgeCA9IHRjZ2V0YXR0cih0dHlmZCwmdHRjdXIpOwkvKiBHZXQgY3VycmVudCBzcGVlZCAqLwot ICAgIGRlYnVnKEYxMDEsInR0Z3NwZCB0Y2dldGF0dHIiLCIiLHgpOwotICAgIGlmICh4IDwgMCkK LSAgICAgIHJldHVybigtMSk7Ci0gICAgZXJybm8gPSAwOwotICAgIHMgPSB0Y2dldHNwZWVkKFRD U19BTEwsICZ0dGN1cik7Ci0gICAgZGVidWcoRjEwMSwidHRzc3BkIFRDR0VUU1BFRUQgc3BlZWQi LCIiLHMpOwotICAgIGlmIChzID09IDApIHsKLQlsb25nIHMxLCBzMjsKLQlzMSA9IHRjZ2V0c3Bl ZWQoVENTX0lOLCAmdHRjdXIpOwotCXMyID0gdGNnZXRzcGVlZChUQ1NfT1VULCAmdHRjdXIpOwot CWlmIChzMSA9PSAxMjAwTCAmJiBzMiA9PSA3NUwpCi0JICByZXR1cm4oODg4MEwpOwotICAgIH0K LSNpZmRlZiBERUJVRwotICAgIGlmIChlcnJubyAmIGRlYmxvZykgewotCWRlYnVnKEYxMDEsInR0 c3NwZCBUQ0dFVFNQRUVEIGVycm5vIiwiIixlcnJubyk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVH ICovCi0gICAgcmV0dXJuKHMpOwotCi0jZWxzZSAgLyogTm90IFVTRVRDU0VUU1BFRUQgKi8KLQot I2lmZGVmIFBsYW45Ci0gICAgaWYgKHR0eWZkIDwgMCkKLSAgICAgIHNzID0gLTE7Ci0gICAgZWxz ZQotICAgICAgc3MgPSB0dHlsYXN0c3BlZWQ7Ci0jZWxzZQotI2lmZGVmIE9MSU5VWEhJU1BFRUQK LSAgICBkZWJ1ZyhGMTAwLCJ0dGdzcGQgTGludXggT0xJTlVYSElTUEVFRCIsIiIsMCk7Ci0jZW5k aWYgLyogT0xJTlVYSElTUEVFRCAqLwotCi0gICAgaWYgKHR0eWZkIDwgMCkgewotI2lmZGVmIEJT RDQ0T1JQT1NJWAotCXMgPSBjZmdldG9zcGVlZCgmY2NvbGQpOwotCWRlYnVnKEYxMDEsInR0Z3Nw ZCBjZmdldG9zcGVlZCAxIFBPU0lYIiwiIixzKTsKLSNlbHNlCi0jaWZkZWYgQVRUU1YKLQlzID0g Y2NvbGQuY19jZmxhZyAmIENCQVVEOwotCWRlYnVnKEYxMDEsInR0Z3NwZCBjX2NmbGFnIENCQVVE IDEgQVRUU1YiLCIiLHMpOwotI2Vsc2UKLQlzID0gY2NvbGQuc2dfb3NwZWVkOwkJLyogKG9idGFp bmVkIGJ5IGNvbmdtKCkpICovCi0JZGVidWcoRjEwMSwidHRnc3BkIHNnX29zcGVlZCAxIiwiIixz KTsKLSNlbmRpZiAvKiBBVFRTViAqLwotI2VuZGlmIC8qIEJTRDQ0UE9TSVggKi8KLQotICAgIH0g ZWxzZSB7Ci0jaWZkZWYgQlNENDRPUlBPU0lYCi0JaWYgKHRjZ2V0YXR0cih0dHlmZCwmdHRjdXIp IDwgMCkgcmV0dXJuKC0xKTsKLQlzID0gY2ZnZXRvc3BlZWQoJnR0Y3VyKTsKLQlkZWJ1ZyhGMTAx LCJ0dGdzcGQgY2ZnZXRvc3BlZWQgMiBCU0RPUlBPU0lYIiwiIixzKTsKLSNpZmRlZiBPTElOVVhI SVNQRUVECi0JaWYgKGlvY3RsKHR0eWZkLFRJT0NHU0VSSUFMLCZzZXJpbmZvKSA+IC0xKQotCSAg c3BkX2ZsYWdzID0gc2VyaW5mby5mbGFncyAmIEFTWU5DX1NQRF9NQVNLOwotCWRlYnVnKEYxMDEs InR0Z3NwZCBzcGRfZmxhZ3MiLCIiLHNwZF9mbGFncyk7Ci0jZW5kaWYgLyogT0xJTlVYSElTUEVF RCAqLwotI2Vsc2UKLSNpZmRlZiBBVFRTVgotCXggPSBpb2N0bCh0dHlmZCxUQ0dFVEEsJnR0Y3Vy KTsKLQlkZWJ1ZyhGMTAxLCJ0dGdzcGQgaW9jdGwgMiBBVFRTViB4IiwiIix4KTsKLQlkZWJ1ZyhG MTAxLCJ0dGdzcGQgaW9jdGwgMiBBVFRTViBlcnJubyIsIiIsZXJybm8pOwotCWlmICh4IDwgMCkg cmV0dXJuKC0xKTsKLQlzID0gdHRjdXIuY19jZmxhZyAmIENCQVVEOwotCWRlYnVnKEYxMDEsInR0 Z3NwZCBpb2N0bCAyIEFUVFNWIHNwZWVkIiwiIixzKTsKLSNlbHNlCi0jaWZkZWYgQkVMTFYxMAot CXggPSBpb2N0bCh0dHlmZCxUSU9DR0RFViwmdGRjdXIpOwotCWRlYnVnKEYxMDEsInR0Z3NwZCBp b2N0bCAyIEJFTExWMTAgeCIsIiIseCk7Ci0JaWYgKHggPCAwKSByZXR1cm4oLTEpOwotCXMgPSB0 ZGN1ci5vc3BlZWQ7Ci0JZGVidWcoRjEwMSwidHRnc3BkIGlvY3RsIDIgQkVMTFYxMCBzcGVlZCIs IiIscyk7Ci0jZWxzZQotCXggPSBndHR5KHR0eWZkLCZ0dGN1cik7Ci0JZGVidWcoRjEwMSwidHRn c3BkIGd0dHkgMiB4IiwiIix4KTsKLQlkZWJ1ZyhGMTAxLCJ0dGdzcGQgZ3R0eSAyIGVycm5vIiwi IixlcnJubyk7Ci0JaWYgKHggPCAwKSByZXR1cm4oLTEpOwotCXMgPSB0dGN1ci5zZ19vc3BlZWQ7 Ci0JZGVidWcoRjEwMSwidHRnc3BkIGd0dHkgMiBzcGVlZCIsIiIscyk7Ci0jZW5kaWYgLyogQkVM TFYxMCAqLwotI2VuZGlmIC8qIEFUVFNWICovCi0jZW5kaWYgLyogQlNENDRPUlBPU0lYICovCi0g ICAgfQotICAgIGRlYnVnKEYxMDEsInR0Z3NwZCBjb2RlIiwiIixzKTsKLSNpZmRlZiBPTElOVVhI SVNQRUVECi0gICAgZGVidWcoRjEwMSwidHRnc3BkIHNwZF9mbGFncyIsIiIsc3BkX2ZsYWdzKTsK LSNlbmRpZiAvKiBPTElOVVhISVNQRUVEICovCi0gICAgc3dpdGNoIChzKSB7Ci0jaWZkZWYgQjAK LSAgICAgIGNhc2UgQjA6ICAgIHNzID0gMEw7IGJyZWFrOwotI2VuZGlmIC8qIEIwICovCi0KLSNp Zm5kZWYgTUlOSVgKLS8qCi0gTUlOSVggZGVmaW5lcyB0aGUgQnh4IHN5bWJvbHMgdG8gYmUgYnBz LzEwMCwgc28gQjUwPT1CNzUsIEIxMTA9PUIxMzQ9PUIxNTAsCi0gZXRjLCBtYWtpbmcgZm9yIG1h bnkgImR1cGxpY2F0ZSBjYXNlIGluIHN3aXRjaCIgZXJyb3JzLCB3aGljaCBhcmUgZmF0YWwuCi0q LwotI2lmZGVmIEI1MAotICAgICAgY2FzZSBCNTA6ICAgc3MgPSA1MEw7IGJyZWFrOwotI2VuZGlm IC8qIEI1MCAqLwotI2lmZGVmIEI3NQotICAgICAgY2FzZSBCNzU6ICAgc3MgPSA3NUw7IGJyZWFr OwotI2VuZGlmIC8qIEI3NSAqLwotI2VuZGlmIC8qIE1JTklYICovCi0KLSNpZmRlZiBCMTEwCi0g ICAgICBjYXNlIEIxMTA6ICBzcyA9IDExMEw7IGJyZWFrOwotI2VuZGlmIC8qIEIxMTAgKi8KLQot I2lmbmRlZiBNSU5JWAotI2lmZGVmIEIxMzQKLSAgICAgIGNhc2UgQjEzNDogIHNzID0gMTM0TDsg YnJlYWs7Ci0jZW5kaWYgLyogQjEzNCAqLwotI2lmZGVmIEIxNTAKLSAgICAgIGNhc2UgQjE1MDog IHNzID0gMTUwTDsgYnJlYWs7Ci0jZW5kaWYgLyogQjE1MCAqLwotI2VuZGlmIC8qIE1JTklYICov Ci0KLSNpZmRlZiBCMjAwCi0gICAgICBjYXNlIEIyMDA6ICBzcyA9IDIwMEw7IGJyZWFrOwotI2Vu ZGlmIC8qIEIyMDAgKi8KLQotI2lmZGVmIEIzMDAKLSAgICAgIGNhc2UgQjMwMDogIHNzID0gMzAw TDsgYnJlYWs7Ci0jZW5kaWYgLyogQjMwMCAqLwotCi0jaWZkZWYgQjYwMAotICAgICAgY2FzZSBC NjAwOiAgc3MgPSA2MDBMOyBicmVhazsKLSNlbmRpZiAvKiBCNjAwICovCi0KLSNpZmRlZiBCMTIw MAotICAgICAgY2FzZSBCMTIwMDogc3MgPSAxMjAwTDsgYnJlYWs7Ci0jZW5kaWYgLyogQjEyMDAg Ki8KLQotI2lmZGVmIEIxODAwCi0gICAgICBjYXNlIEIxODAwOiBzcyA9IDE4MDBMOyBicmVhazsK LSNlbmRpZiAvKiBCMTgwMCAqLwotCi0jaWZkZWYgQjI0MDAKLSAgICAgIGNhc2UgQjI0MDA6IHNz ID0gMjQwMEw7IGJyZWFrOwotI2VuZGlmIC8qIEIyNDAwICovCi0KLSNpZmRlZiBCNDgwMAotICAg ICAgY2FzZSBCNDgwMDogc3MgPSA0ODAwTDsgYnJlYWs7Ci0jZW5kaWYgLyogQjQ4MDAgKi8KLQot I2lmZGVmIEI3MjAwCi0gICAgICBjYXNlIEI3MjAwOiBzcyA9IDcyMDBMOyBicmVhazsKLSNlbmRp ZiAvKiBCNzIwMCAqLwotCi0jaWZkZWYgQjk2MDAKLSAgICAgIGNhc2UgQjk2MDA6IHNzID0gOTYw MEw7IGJyZWFrOwotI2VuZGlmIC8qIEI5NjAwICovCi0KLSNpZmRlZiBCMTkyMDAKLSAgICAgIGNh c2UgQjE5MjAwOiBzcyA9IDE5MjAwTDsgYnJlYWs7Ci0jZWxzZQotI2lmZGVmIEVYVEEKLSAgICAg IGNhc2UgRVhUQTogc3MgPSAxOTIwMEw7IGJyZWFrOwotI2VuZGlmIC8qIEVYVEEgKi8KLSNlbmRp ZiAvKiBCMTkyMDAgKi8KLQotI2lmbmRlZiBNSU5JWAotI2lmZGVmIEIzODQwMAotICAgICAgY2Fz ZSBCMzg0MDA6Ci0gICAgICAgIHNzID0gMzg0MDBMOwotI2lmZGVmIE9MSU5VWEhJU1BFRUQKLSAg ICAgICAgc3dpdGNoKHNwZF9mbGFncykgewotICAgICAgICAgIGNhc2UgQVNZTkNfU1BEX0hJOiAg c3MgPSAgNTc2MDBMOyBicmVhazsKLSAgICAgICAgICBjYXNlIEFTWU5DX1NQRF9WSEk6IHNzID0g MTE1MjAwTDsgYnJlYWs7Ci0JfQotI2VuZGlmIC8qIE9MSU5VWEhJU1BFRUQgKi8KLSAgICAgICAg YnJlYWs7Ci0jZWxzZQotI2lmZGVmIEVYVEIKLSAgICAgIGNhc2UgRVhUQjogc3MgPSAzODQwMEw7 IGJyZWFrOwotI2VuZGlmIC8qIEVYVEIgKi8KLSNlbmRpZiAvKiBCMzg0MDAgKi8KLSNlbmRpZiAv KiBNSU5JWCAqLwotCi0jaWZkZWYgSFBVWAotI2lmZGVmIF9CNTc2MDAKLSAgICAgIGNhc2UgX0I1 NzYwMDogc3MgPSA1NzYwMEw7IGJyZWFrOwotI2VuZGlmIC8qIF9CNTc2MDAgKi8KLSNpZmRlZiBf QjExNTIwMAotICAgICAgY2FzZSBfQjExNTIwMDogc3MgPSAxMTUyMDBMOyBicmVhazsKLSNlbmRp ZiAvKiBfQjExNTIwMCAqLwotI2Vsc2UKLSNpZmRlZiBCNTc2MDAKLSAgICAgIGNhc2UgQjU3NjAw OiBzcyA9IDU3NjAwTDsgYnJlYWs7Ci0jZW5kaWYgLyogQjU3NjAwICovCi0jaWZkZWYgQjc2ODAw Ci0gICAgICBjYXNlIEI3NjgwMDogc3MgPSA3NjgwMEw7IGJyZWFrOwotI2VuZGlmIC8qIEI3Njgw MCAqLwotI2lmZGVmIEIxMTUyMDAKLSAgICAgIGNhc2UgQjExNTIwMDogc3MgPSAxMTUyMDBMOyBi cmVhazsKLSNlbmRpZiAvKiBCMTE1MjAwICovCi0jaWZkZWYgQjE1MzYwMAotICAgICAgY2FzZSBC MTUzNjAwOiBzcyA9IDE1MzYwMEw7IGJyZWFrOwotI2VuZGlmIC8qIEIxNTM2MDAgKi8KLSNpZmRl ZiBCMjMwNDAwCi0gICAgICBjYXNlIEIyMzA0MDA6IHNzID0gMjMwNDAwTDsgYnJlYWs7Ci0jZW5k aWYgLyogQjIzMDQwMCAqLwotI2lmZGVmIEIzMDcyMDAKLSAgICAgIGNhc2UgQjMwNzIwMDogc3Mg PSAzMDcyMDBMOyBicmVhazsKLSNlbmRpZiAvKiBCMzA3MjAwICovCi0jaWZkZWYgQjQ2MDgwMAot ICAgICAgY2FzZSBCNDYwODAwOiBzcyA9IDQ2MDgwMEw7IGJyZWFrOwotI2VuZGlmIC8qIEI0NjA4 MDAgKi8KLSNlbmRpZiAvKiBIUFVYICovCi0jaWZkZWYgQjkyMTYwMAotICAgICAgY2FzZSBCOTIx NjAwOiBzcyA9IDkyMTYwMEw7IGJyZWFrOwotI2VuZGlmIC8qIEI5MjE2MDAgKi8KLSAgICAgIGRl ZmF1bHQ6Ci0Jc3MgPSAtMTsgYnJlYWs7Ci0gICAgfQotI2VuZGlmIC8qIFBsYW45ICovCi0gICAg ZGVidWcoRjEwMSwidHRnc3BkIHNwZWVkIiwiIixzcyk7Ci0gICAgcmV0dXJuKHNzKTsKLQotI2Vu ZGlmIC8qIFVTRVRDU0VUU1BFRUQgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi19Ci0jaWZkZWYg TUlOSVgyCQkJCS8qIEFub3RoZXIgaGFjayBhbGVydCAqLwotI2RlZmluZSBNSU5JWAotI2VuZGlm IC8qIE1JTklYMiAqLwotCi0vKgotICBGSU9OUkVBRCBkYXRhIHR5cGUuLi4gIFRoaXMgaGFzIGJl ZW4gZGVmaW5lZCBhcyAibG9uZyIgZm9yIG1hbnksIG1hbnkKLSAgeWVhcnMsIGFuZCBpdCB3b3Jr ZWQgT0sgdW50aWwgNjQtYml0IHBsYXRmb3JtcyBhcHBlYXJlZC4gIFRodXMgd2UgdXNlCi0gIGlu dCBmb3IgNjQtYml0IHBsYXRmb3JtcywgYnV0IGtlZXAgbG9uZyBmb3IgdGhlIG90aGVycy4gIElm IHdlIGNoYW5nZWQKLSAgdGhlIGRlZmF1bHQgUEVFS1RZUEUgdG8gaW50LCB0aGlzIHdvdWxkIHBy b2JhYmx5IGJyZWFrIDE2LWJpdCBidWlsZHMKLSAgKG5vdGUgdGhhdCBzaXplb2YobG9uZykgPT0g c2l6ZW9mKGludCkgb24gbW9zdCAzMi1iaXQgcGxhdGZvcm1zKSwgbWFueQotICBvZiB3aGljaCB3 ZSBoYXZlIG5vIHdheSBvZiB0ZXN0aW5nIGFueSBtb3JlLiAgVGhlcmVmb3JlLCBkbyBub3QgY2hh bmdlCi0gIHRoZSBkZWZhdWx0IGRlZmluaXRpb24gb2YgUEVFS1RZUEUgLS0gb25seSBhZGQgZXhj ZXB0aW9ucyB0byBpdCBhcyBuZWVkZWQuCi0qLwotI2lmZGVmIENPSEVSRU5UCi0jaWZkZWYgRklP TlJFQUQKLSN1bmRlZiBGSU9OUkVBRAotI2VuZGlmIC8qIEZJT05SRUFEICovCi0vKiAjZGVmaW5l IEZJT05SRUFEIFRJT0NRVUVSWSAqLwotLyogI2RlZmluZSBQRUVLVFlQRSBpbnQgKi8KLSNlbHNl ICAvKiBOb3QgQ09IRVJFTlQuLi4gKi8KLQotI2lmZGVmIE9TRjMyCQkJCS8qIERpZ2l0YWwgVU5J WCAzLjIgb3IgaGlnaGVyICovCi0jZGVmaW5lIFBFRUtUWVBFIGludAotI2Vsc2UKLSNkZWZpbmUg UEVFS1RZUEUgbG9uZwkJCS8qIEVsc2V3aGVyZSAoc2VlIG5vdGVzIGFib3ZlKSAqLwotI2VuZGlm IC8qIE9TRjMyICovCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLQotLyogY2t1bXlyLmMgYnkgS3Jp c3RvZmZlciBFcmlrc3Nvbiwgc2tlQHBrbWFiLnNlLCAxNSBNYXIgMTk5MC4gKi8KLQotI2lmZGVm IE1ZUkVBRAotCi0vKiBQcml2YXRlIGJ1ZmZlciBmb3IgbXlyZWFkKCkgYW5kIGl0cyBjb21wYW5p b25zLiAgTm90IGZvciB1c2UgYnkgYW55dGhpbmcKLSAqIGVsc2UuICB0dGZsdWkoKSBpcyBhbGxv d2VkIHRvIHJlc2V0IHRoZW0gdG8gaW5pdGlhbCB2YWx1ZXMuICB0dGNoaygpIGlzCi0gKiBhbGxv d2VkIHRvIHJlYWQgbXlfY291bnQuCi0gKgotICogbXlfaXRlbSBpcyBhbiBpbmRleCBpbnRvIG15 YnVmW10uICBJbmNyZW1lbnQgaXQgKmJlZm9yZSogcmVhZGluZyBteWJ1ZltdLgotICoKLSAqIEEg Z2xvYmFsIHBhcml0eSBtYXNrIHZhcmlhYmxlIGNvdWxkIGJlIHVzZWZ1bCB0b28uICBXZSBjb3Vs ZCB1c2UgaXQgdG8KLSAqIGxldCBteXJlYWQoKSBzdHJpcCB0aGUgcGFyaXR5IG9uIGl0cyBvd24s IGluc3RlYWQgb2Ygc3RyaXBwaW5nIHNpZ24KLSAqIGJpdHMgYXMgaXQgZG9lcyBub3cuCi0gKi8K LSNpZmRlZiBCSUdCVUZPSwotI2RlZmluZSBNWUJVRkxFTiAzMjc2OAotI2Vsc2UKLSNpZmRlZiBw ZHAxMQotI2RlZmluZSBNWUJVRkxFTiAyNTYKLSNlbHNlCi0jZGVmaW5lIE1ZQlVGTEVOIDEwMjQK LSNlbmRpZiAvKiBwZHAxMSAqLwotI2VuZGlmIC8qIEJJR0JVRk9LICovCi0KLSNpZmRlZiBBTllY MjUKLSN1bmRlZiBNWUJVRkxFTgotI2RlZmluZSBNWUJVRkxFTiAyNTYKLS8qCi0gIE9uIFguMjUg Y29ubmVjdGlvbnMsIHRoZXJlIGlzIGFuIGV4dHJhIGNvbnRyb2wgYnl0ZSBhdCB0aGUgYmVnaW5u aW5nLgotKi8KLXN0YXRpYyBDSEFSIHgyNWJ1ZltNWUJVRkxFTisxXTsJCS8qIENvbW11bmljYXRp b24gZGV2aWNlIGlucHV0IGJ1ZmZlciAqLwotc3RhdGljIENIQVIgICpteWJ1ZiA9IHgyNWJ1Zisx OwotI2Vsc2UKLXN0YXRpYyBDSEFSIG15YnVmW01ZQlVGTEVOXTsKLSNlbmRpZiAvKiBBTllYMjUg Ki8KLQotc3RhdGljIGludCBteV9jb3VudCA9IDA7CQkvKiBOdW1iZXIgb2YgY2hhcnMgc3RpbGwg aW4gbXlidWYgKi8KLXN0YXRpYyBpbnQgbXlfaXRlbSA9IC0xOwkJLyogTGFzdCBpbmRleCByZWFk IGZyb20gbXlidWZbXSAgICovCi0KLS8qICBUIFQgUCBFIEUgSyAgLS0gIFBlZWsgaW50byBvdXIg aW50ZXJuYWwgY29tbXVuaWNhdGlvbnMgaW5wdXQgYnVmZmVycy4gKi8KLQotLyoKLSAgTk9URTog VGhpcyByb3V0aW5lIGlzIHBlY3VsaWFyIHRvIFVOSVgsIGFuZCBpcyB1c2VkIG9ubHkgYnkgdGhl Ci0gIHNlbGVjdCgpLWJhc2VkIENPTk5FQ1QgbW9kdWxlLCBja3VjbnMuYy4gIEl0IG5lZWQgbm90 IGJlIHJlcGxpY2F0ZWQgaW4KLSAgdGhlIGNrP3Rpby5jIG9mIG90aGVyIHBsYXRmb3Jtcy4KLSov Ci1pbnQKLXR0cGVlaygpIHsKLSNpZmRlZiBUVExFQlVGCi0gICAgaW50IHJjID0gMDsKLSAgICBp ZiAodHRwdXNoID49IDApCi0gICAgICByYysrOwotICAgIHJjICs9IGxlX2luYnVmKCk7Ci0gICAg aWYgKHJjID4gMCkKLSAgICAgIHJldHVybihyYyk7Ci0gICAgZWxzZQotI2VuZGlmIC8qIFRUTEVC VUYgKi8KLQotI2lmZGVmIE1ZUkVBRAotICAgIHJldHVybihteV9jb3VudCk7Ci0jZWxzZQotICAg IHJldHVybigwKTsKLSNlbmRpZiAvKiBNWVJFQUQgKi8KLX0KLQotLyogbXlyZWFkKCkgLS0gRWZm aWNpZW50IHJlYWQgb2Ygb25lIGNoYXJhY3RlciBmcm9tIGNvbW11bmljYXRpb25zIGxpbmUuCi0g KgotICogTk9URTogbXlyZWFkKCkgYW5kIGl0cyBoZWxwZXJzIG15Z2V0YnVmKCkgYW5kIG15Zmls bGJ1ZigpIHJldHVybiByYXcKLSAqIGJ5dGVzIGZyb20gY29ubmVjdGlvbiwgc28gd2hlbiB0aGUg Y29ubmVjdGlvbiBpcyBlbmNyeXB0ZWQsIHRoZXNlIGJ5dGVzCi0gKiBtdXN0IGJlIGRlY3J5cHRl ZC4KLSAqCi0gKiBVc2VzIGEgcHJpdmF0ZSBidWZmZXIgdG8gbWluaW1pemUgdGhlIG51bWJlciBv ZiBleHBlbnNpdmUgcmVhZCgpIHN5c3RlbQotICogY2FsbHMuICBFc3NlbnRpYWxseSBwZXJmb3Jt cyB0aGUgZXF1aXZhbGVudCBvZiByZWFkKCkgb2YgMSBjaGFyYWN0ZXIsIHdoaWNoCi0gKiBpcyB0 aGVuIHJldHVybmVkLiAgQnkgcmVhZGluZyBhbGwgYXZhaWxhYmxlIGlucHV0IGZyb20gdGhlIHN5 c3RlbSBidWZmZXJzCi0gKiB0byB0aGUgcHJpdmF0ZSBidWZmZXIgaW4gb25lIGNodW5rLCBhbmQg dGhlbiB3b3JraW5nIGZyb20gdGhpcyBidWZmZXIsIHRoZQotICogbnVtYmVyIG9mIHN5c3RlbSBj YWxscyBpcyByZWR1Y2VkIGluIGFueSBjYXNlIHdoZXJlIG1vcmUgdGhhbiBvbmUgY2hhcmFjdGVy Ci0gKiBhcnJpdmVzIGR1cmluZyB0aGUgcHJvY2Vzc2luZyBvZiB0aGUgcHJldmlvdXMgY2h1bmss IGZvciBpbnN0YW5jZSBoaWdoCi0gKiBiYXVkIHJhdGVzIG9yIG5ldHdvcmsgdHlwZSBjb25uZWN0 aW9ucyB3aGVyZSBpbnB1dCBhcnJpdmVzIGluIHBhY2tldHMuCi0gKiBJZiB0aGUgdGltZSBuZWVk ZWQgZm9yIGEgcmVhZCgpIHN5c3RlbSBjYWxsIGFwcHJvYWNoZXMgdGhlIHRpbWUgZm9yIG1vcmUK LSAqIHRoYW4gb25lIGNoYXJhY3RlciB0byBhcnJpdmUsIHRoZW4gdGhpcyBtZWNoYW5pc20gYXV0 b21hdGljYWxseSBjb21wZW5zYXRlcwotICogZm9yIHRoYXQgYnkgcGVyZm9ybWluZyBiaWdnZXIg cmVhZCgpcyBsZXNzIGZyZXF1ZW50bHkuICBJZiB0aGUgc3lzdGVtIGxvYWQKLSAqIGlzIGhpZ2gs IHRoZSBzYW1lIG1lY2hhbmlzbSBjb21wZW5zYXRlcyBmb3IgdGhhdCB0b28uCi0gKgotICogbXly ZWFkKCkgaXMgYSBtYWNybyB0aGF0IHJldHVybnMgdGhlIG5leHQgY2hhcmFjdGVyIGZyb20gdGhl IGJ1ZmZlci4gIElmIHRoZQotICogYnVmZmVyIGlzIGVtcHR5LCBteWdldGJ1ZigpIGlzIGNhbGxl ZC4gIFNlZSBteWdldGJ1ZigpIGZvciBwb3NzaWJsZSBlcnJvcgotICogcmV0dXJucy4KLSAqCi0g KiBUaGlzIHNob3VsZCBiZSBlZmZpY2llbnQgZW5vdWdoIGZvciBhbnkgb25lLWNoYXJhY3Rlci1h dC1hLXRpbWUgbG9vcHMuCi0gKiBGb3IgZXZlbiBiZXR0ZXIgZWZmaWNpZW5jeSB5b3UgbWlnaHQg dXNlIG1lbWNweSgpL2Jjb3B5KCkgb3Igc3VjaCBiZXR3ZWVuCi0gKiBidWZmZXJzIChzaW5jZSB0 aGV5IGFyZSBvZnRlbiBiZXR0ZXIgb3B0aW1pemVkIGZvciBjb3B5aW5nKSwgYnV0IGl0IG1heSBu b3QKLSAqIGJlIHdvcnRoIGl0IGlmIHlvdSBoYXZlIHRvIHRha2UgYW4gZXh0cmEgcGFzcyBvdmVy IHRoZSBidWZmZXIgdG8gc3RyaXAKLSAqIHBhcml0eSBhbmQgY2hlY2sgZm9yIENUUkwtQyBhbnl3 YXkuCi0gKgotICogTm90ZSB0aGF0IGlmIHlvdSBoYXZlIGJlZW4gdXNpbmcgbXlyZWFkKCkgZnJv bSBhbm90aGVyIHByb2dyYW0gbW9kdWxlLCB5b3UKLSAqIG1heSBoYXZlIHNvbWUgdHJvdWJsZSBh Y2Nlc3NpbmcgdGhpcyBtYWNybyB2ZXJzaW9uIGFuZCB0aGUgcHJpdmF0ZSB2YXJpYWJsZXMKLSAq IGl0IHVzZXMuICBJbiB0aGF0IGNhc2UsIGp1c3QgYWRkIGEgZnVuY3Rpb24gaW4gdGhpcyBtb2R1 bGUsIHRoYXQgaW52b2tlcyB0aGUKLSAqIG1hY3JvLgotICovCi0jZGVmaW5lIG15cmVhZCgpICgt LW15X2NvdW50IDwgMCA/IG15Z2V0YnVmKCkgOiAyNTUgJiAoaW50KW15YnVmWysrbXlfaXRlbV0p Ci0KLS8qIFNwZWNpZmljYXRpb246IFB1c2ggYmFjayB1cCB0byBvbmUgY2hhcmFjdGVyIG9udG8g bXlyZWFkKCkncyBxdWV1ZS4KLSAqCi0gKiBUaGlzIGltcGxlbWVudGF0aW9uOiBQdXNoIGJhY2sg Y2hhcmFjdGVycyBpbnRvIG15YnVmLiBBdCBsZWFzdCBvbmUgY2hhcmFjdGVyCi0gKiBtdXN0IGhh dmUgYmVlbiByZWFkIHRocm91Z2ggbXlyZWFkKCkgYmVmb3JlIG15dW5yZCgpIG1heSBiZSB1c2Vk LiAgQWZ0ZXIKLSAqIEVPRiBvciByZWFkIGVycm9yLCBhZ2FpbiwgbXl1bnJkKCkgY2FuIG5vdCBi ZSB1c2VkLiAgU29tZXRpbWVzIG1vcmUgdGhhbgotICogb25lIGNoYXJhY3RlciBjYW4gYmUgcHVz aGVkIGJhY2ssIGJ1dCBvbmx5IG9uZSBjaGFyYWN0ZXIgaXMgZ3VhcmFudGVlZC4KLSAqIFNpbmNl IGEgcHJldmlvdXMgbXlyZWFkKCkgbXVzdCBoYXZlIHJlYWQgaXRzIGNoYXJhY3RlciBvdXQgb2Yg bXlidWZbXSwKLSAqIHRoYXQgZ3VhcmFudGVlcyB0aGF0IHRoZXJlIGlzIHNwYWNlIGZvciBhdCBs ZWFzdCBvbmUgY2hhcmFjdGVyLiAgSWYgcHVzaAotICogYmFjayB3YXMgcmVhbGx5IG5lZWRlZCBh ZnRlciBFT0YsIGEgc21hbGwgYWRkaXRpb24gY291bGQgcHJvdmlkZSB0aGF0LgotICoKLSAqIEFz IG9mIDAyLzIwMDcgbXl1bnJkKCkgaXMgdXNlZCBieSB0dGlubCgpLgotICovCi1WT0lECi0jaWZk ZWYgQ0tfQU5TSUMKLW15dW5yZChDSEFSIGNoKQotI2Vsc2UKLW15dW5yZChjaCkgQ0hBUiBjaDsK LSNlbmRpZgkvKiBDS19BTlNJQyAqLwotewotICAgIGlmIChteV9pdGVtID49IDApIHsKLQlteWJ1 ZltteV9pdGVtLS1dID0gY2g7Ci0JKytteV9jb3VudDsKLSAgICB9Ci19Ci0KLS8qICBUIFQgUCBV IFMgSCBCIEEgQyBLICAtLSAgUHV0IG4gYnl0ZXMgYmFjayBpbnRvIHRoZSBteXJlYWQgYnVmZmVy ICovCi0KLXN0YXRpYyBDSEFSICogcHVzaGJ1ZiA9IE5VTEw7Ci0vKiBzdGF0aWMgaW50IHB1c2hl ZCA9IDA7ICovCi0KLWludAotdHRwdXNoYmFjayhzLG4pIENIQVIgKiBzOyBpbnQgbjsgewotICAg IGRlYnVnKEYxMDEsInR0cHVzaGJhY2sgbiIsIiIsbik7Ci0gICAgaWYgKHB1c2hidWYgfHwgbiA+ IE1ZQlVGTEVOIHx8IG4gPCAxKQotICAgICAgcmV0dXJuKC0xKTsKLSAgICBkZWJ1ZyhGMTAxLCJ0 dHB1c2hiYWNrIG15X2NvdW50IiwiIixteV9jb3VudCk7Ci0gICAgaWYgKG15X2NvdW50ID4gMCkg ewotCWlmICghKHB1c2hidWYgPSAoQ0hBUiAqKW1hbGxvYyhuKzEpKSkKLQkgIHJldHVybigtMSk7 Ci0JbWVtY3B5KHB1c2hidWYsbXlidWYsbXlfY291bnQpOwotCS8qIHB1c2hlZCA9IG15X2NvdW50 OyAqLyAvKiAoc2V0IGJ1dCBuZXZlciB1c2VkKSAqLwotICAgIH0KLSAgICBtZW1jcHkobXlidWYs cyxuKTsKLSAgICBteV9jb3VudCA9IG47Ci0gICAgbXlfaXRlbSA9IC0xOwotICAgIHJldHVybigw KTsKLX0KLQotLyogbXlnZXRidWYoKSAtLSBGaWxsIGJ1ZmZlciBmb3IgbXlyZWFkKCkgYW5kIHJl dHVybiBmaXJzdCBjaGFyYWN0ZXIuCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyB3aGF0IG15cmVh ZCgpIHVzZXMgd2hlbiBpdCBjYW4ndCBnZXQgdGhlIG5leHQgY2hhcmFjdGVyCi0gKiBkaXJlY3Rs eSBmcm9tIGl0cyBidWZmZXIuICBGaXJzdCwgaXQgY2FsbHMgYSBzeXN0ZW0gZGVwZW5kZW50IG15 ZmlsbGJ1ZigpCi0gKiB0byByZWFkIGF0IGxlYXN0IG9uZSBuZXcgY2hhcmFjdGVyIGludG8gdGhl IGJ1ZmZlciwgYW5kIHRoZW4gaXQgcmV0dXJucwotICogdGhlIGZpcnN0IGNoYXJhY3RlciBqdXN0 IGFzIG15cmVhZCgpIHdvdWxkIGhhdmUgZG9uZS4gIFRoaXMgZnVuY3Rpb24gYWxzbwotICogaXMg cmVzcG9uc2libGUgZm9yIGFsbCBlcnJvciBjb25kaXRpb25zIHRoYXQgbXlyZWFkKCkgY2FuIGlu ZGljYXRlLgotICoKLSAqIFJldHVybnM6IFdoZW4gT0sJPT4gYSBwb3NpdGl2ZSBjaGFyYWN0ZXIs IDAgb3IgZ3JlYXRlci4KLSAqCSAgICBXaGVuIEVPRgk9PiAtMi4KLSAqCSAgICBXaGVuIGVycm9y CT0+IC0zLCBlcnJvciBjb2RlIGluIGVycm5vLgotICoKLSAqIE9sZGVyIG15cmVhZCgpcyBhZGRp dGlvbmFsbHkgcmV0dXJuZWQgLTEgdG8gaW5kaWNhdGUgdGhhdCB0aGVyZSB3YXMgbm90aGluZwot ICogdG8gcmVhZCwgdXBvbiB3aGljaCB0aGUgY2FsbGVyIHdvdWxkIGNhbGwgbXlyZWFkKCkgYWdh aW4gdW50aWwgaXQgZ290Ci0gKiBzb21ldGhpbmcuICBUaGUgbmV3IG15cmVhZCgpL215Z2V0YnVm KCkgYWx3YXlzIGdldHMgc29tZXRoaW5nLiAgSWYgaXQKLSAqIGRvZXNuJ3QsIHRoZW4gbWFrZSBp dCBkbyBzbyEgIEFueSBwcm9ncmFtIHRoYXQgYWN0dWFsbHkgZGVwZW5kcyBvbiB0aGUgb2xkCi0g KiBiZWhhdmlvdXIgd2lsbCBicmVhay4KLSAqCi0gKiBUaGUgb2xkZXIgdmVyc2lvbiBhbHNvIHVz ZWQgdG8gcmV0dXJuIC0yIGJvdGggZm9yIEVPRiBhbmQgb3RoZXIgZXJyb3JzLAotICogYW5kIHVz ZWQgdG8gc2V0IGVycm5vIHRvIDk5OTkgb24gRU9GLiAgVGhlIGVycm5vIHN0dWZmIGlzIGdvbmUs IEVPRiBhbmQKLSAqIG90aGVyIGVycm9ycyBub3cgcmV0dXJuIGRpZmZlcmVudCByZXN1bHRzLCBh bHRob3VnaCBLZXJtaXQgY3VycmVudGx5IG5ldmVyCi0gKiBjaGVja3MgdG8gc2VlIHdoaWNoIGl0 IHdhcy4gIEl0IGp1c3QgZGlzY29ubmVjdHMgaW4gYm90aCBjYXNlcy4KLSAqCi0gKiBLZXJtaXQg bGV0cyB0aGUgdXNlciB1c2UgdGhlIHF1aXQga2V5IHRvIHBlcmZvcm0gc29tZSBzcGVjaWFsIGNv bW1hbmRzCi0gKiBkdXJpbmcgZmlsZSB0cmFuc2Zlci4gIFRoaXMgY2F1c2VzIHJlYWQoKSwgYW5k IHRodXMgYWxzbyBteWdldGJ1ZigpLCB0bwotICogZmluaXNoIHdpdGhvdXQgcmVhZGluZyBhbnl0 aGluZyBhbmQgcmV0dXJuIHRoZSBFSU5UUiBlcnJvci4gIFRoaXMgc2hvdWxkCi0gKiBiZSBjaGVj a2VkIGJ5IHRoZSBjYWxsZXIuICBNeWdldGJ1ZigpIGNvdWxkIHJldHJ5IHRoZSByZWFkKCkgb24g RUlOVFIsCi0gKiBidXQgaWYgdGhlcmUgaXMgbm90aGluZyB0byByZWFkLCB0aGlzIGNvdWxkIGRl bGF5IEtlcm1pdCdzIHJlYWN0aW9uIHRvCi0gKiB0aGUgY29tbWFuZCwgYW5kIG1ha2UgS2VybWl0 IGFwcGVhciB1bnJlc3BvbnNpdmUuCi0gKgotICogVGhlIGRlYnVnKCkgY2FsbCBzaG91bGQgYmUg cmVtb3ZlZCBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS4KLSAqLwotaW50Ci1teWdldGJ1ZigpIHsK LSAgICBpbnQgeDsKLSAgICBlcnJubyA9IDA7Ci0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9n ICYmIG15X2NvdW50ID4gMCkKLSAgICAgIGRlYnVnKEYxMDEsIm15Z2V0YnVmIElNUFJPUEVSTFkg Q0FMTEVEIHdpdGggbXlfY291bnQiLCIiLG15X2NvdW50KTsKLSNlbmRpZiAvKiBERUJVRyAqLwot ICAgIGlmIChteV9jb3VudCA8PSAwKQotICAgICAgbXlfY291bnQgPSBteWZpbGxidWYoKTsKLQot I2lmZGVmIERFQlVHCi0jaWZkZWYgQ09NTUVOVAotICAgIGlmIChkZWJsb2cpIGRlYnVnKEYxMDEs ICJteWdldGJ1ZiByZWFkIiwgIiIsIG15X2NvdW50KTsKLSNlbHNlIC8qIENPTU1FTlQgKi8KLSAg ICBja2hleGR1bXAoIm15Z2V0YnVmIHJlYWQiLCBteWJ1ZiwgbXlfY291bnQpOwotI2VuZGlmIC8q IENPTU1FTlQgKi8KLSNlbmRpZiAvKiBERUJVRyAqLwotICAgIHggPSBteV9jb3VudDsKLSAgICBp ZiAobXlfY291bnQgPD0gMCkgewotCW15X2NvdW50ID0gMDsKLQlteV9pdGVtID0gLTE7Ci0JZGVi dWcoRjEwMSwibXlnZXRidWYgZXJybm8iLCIiLGVycm5vKTsKLSNpZmRlZiBUQ1BTT0NLRVQKLQlp ZiAobmV0Y29ubiAmJiB0dG5ldCA9PSBORVRfVENQQiAmJiBlcnJubyAhPSAwKSB7Ci0JICAgIGlm IChlcnJubyAhPSBFSU5UUikgewotCQlkZWJ1ZyhGMTAxLCJteWdldGJ1ZiBUQ1AgZXJyb3IiLCIi LGVycm5vKTsKLQkJdHRjbG9zKDApOwkJLyogQ2xvc2UgdGhlIGNvbm5lY3Rpb24uICovCi0JICAg IH0KLQkgICAgcmV0dXJuKC0zKTsKLQl9Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0JaWYgKCFu ZXRjb25uICYmIHhsb2NhbCAmJiBlcnJubykgewotCSAgICBpZiAoZXJybm8gIT0gRUlOVFIpIHsK LQkJZGVidWcoRjEwMSwibXlnZXRidWYgU0VSSUFMIGVycm9yIiwiIixlcnJubyk7Ci0JCXggPSAt MzsKLQkJdHRjbG9zKDApOwkJLyogQ2xvc2UgdGhlIGNvbm5lY3Rpb24uICovCi0JICAgIH0KLQl9 Ci0JcmV0dXJuKCh4IDwgMCkgPyAtMyA6IC0yKTsKLSAgICB9Ci0gICAgLS1teV9jb3VudDsKLSAg ICByZXR1cm4oKHVuc2lnbmVkKSgweGZmICYgbXlidWZbbXlfaXRlbSA9IDBdKSk7Ci19Ci0KLS8q IG15ZmlsbGJ1ZigpOgotICogU3lzdGVtLWRlcGVuZGVudCByZWFkKCkgaW50byBteWJ1ZltdLCBh cyBtYW55IGNoYXJhY3RlcnMgYXMgcG9zc2libGUuCi0gKgotICogUmV0dXJuczogT0sgPT4gbnVt YmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgYWx3YXlzIG1vcmUgdGhhbiB6ZXJvLgotICogICAgICAg ICAgRU9GID0+IDAKLSAqICAgICAgICAgIEVycm9yID0+IC0xLCBlcnJvciBjb2RlIGluIGVycm5v LgotICoKLSAqIElmIHRoZXJlIGlzIGlucHV0IGF2YWlsYWJsZSBpbiB0aGUgc3lzdGVtJ3MgYnVm ZmVycywgYWxsIG9mIGl0IHNob3VsZCBiZQotICogcmVhZCBpbnRvIG15YnVmW10gYW5kIHRoZSBm dW5jdGlvbiByZXR1cm4gaW1tZWRpYXRlbHkuICBJZiBubyBpbnB1dCBpcwotICogYXZhaWxhYmxl LCBpdCBzaG91bGQgd2FpdCBmb3IgYSBjaGFyYWN0ZXIgdG8gYXJyaXZlLCBhbmQgcmV0dXJuIHdp dGggdGhhdAotICogb25lIGluIG15YnVmW10gYXMgc29vbiBhcyBwb3NzaWJsZS4gIEl0IG1heSB3 YWl0IHNvbWV3aGF0IHBhc3QgdGhlIGZpcnN0Ci0gKiBjaGFyYWN0ZXIsIGJ1dCBiZSBhd2FyZSB0 aGF0IGFueSBzdWNoIGRlbGF5IGxlbmd0aGVucyB0aGUgcGFja2V0IHR1cm5hcm91bmQKLSAqIHRp bWUgZHVyaW5nIGtlcm1pdCBmaWxlIHRyYW5zZmVycy4gIFNob3VsZCBuZXZlciByZXR1cm4gd2l0 aCB6ZXJvIGNoYXJhY3RlcnMKLSAqIHVubGVzcyBFT0Ygb3IgaXJyZWNvdmVyYWJsZSByZWFkIGVy cm9yLgotICoKLSAqIENvcnJlY3QgZnVuY3Rpb25pbmcgZGVwZW5kcyBvbiB0aGUgY29ycmVjdCB0 dHkgcGFyYW1ldGVycyBiZWluZyB1c2VkLgotICogQmV0dGVyIGNvbnRyb2wgb2YgY3VycmVudCBw YXJhbWV0ZXJzIGlzIHJlcXVpcmVkIHRoYW4gbWF5IGhhdmUgYmVlbiB0aGUKLSAqIGNhc2UgaW4g b2xkZXIgS2VybWl0IHJlbGVhc2VzLiAgRm9yIGluc3RhbmNlLCBPX05ERUxBWSAob3IgZXF1aXZh bGVudCkgY2FuCi0gKiBubyBsb25nZXIgYmUgc29tZXRpbWVzIG9mZiBhbmQgc29tZXRpbWVzIG9u IGxpa2UgaXQgdXNlZCB0bywgdW5sZXNzIGEKLSAqIHNwZWNpYWwgbXlmaWxsYnVmKCkgaXMgd3Jp dHRlbiB0byBoYW5kbGUgdGhhdC4gIE90aGVyd2lzZSB0aGUgb3JkaW5hcnkKLSAqIG15ZmlsbGJ1 ZigpcyBtYXkgdGhpbmsgdGhleSBoYXZlIGNvbWUgdG8gRU9GLgotICoKLSAqIElmIHlvdXIgc3lz dGVtIGhhcyBhIGZhY2lsaXR5IHRvIGRpcmVjdGx5IHBlcmZvcm0gdGhlIGZ1bmN0aW9uaW5nIG9m Ci0gKiBteWZpbGxidWYoKSwgdGhlbiB1c2UgaXQuICBJZiB0aGUgc3lzdGVtIGNhbiB0ZWxsIHlv dSBob3cgbWFueSBjaGFyYWN0ZXJzCi0gKiBhcmUgYXZhaWxhYmxlIGluIGl0cyBidWZmZXJzLCB0 aGVuIHJlYWQgdGhhdCBhbW91bnQgKGJ1dCBub3QgbGVzcyB0aGFuIDEpLgotICogSWYgdGhlIHN5 c3RlbSBjYW4gcmV0dXJuIGEgc3BlY2lhbCBpbmRpY2F0aW9uIHdoZW4geW91IHRyeSB0byByZWFk IHdpdGhvdXQKLSAqIGFueXRoaW5nIHRvIHJlYWQsIHdoaWxlIGFsbG93aW5nIHlvdSB0byByZWFk IGFsbCB0aGVyZSBpcyB3aGVuIHRoZXJlIGlzCi0gKiBzb21ldGhpbmcsIHlvdSBtYXkgbG9vcCB1 bnRpbCB0aGVyZSBpcyBzb21ldGhpbmcgdG8gcmVhZCwgYnV0IHByb2JhYmx5IHRoYXQKLSAqIGlz IG5vdCBnb29kIGZvciB0aGUgc3lzdGVtIGxvYWQuCi0gKi8KLQotI2lmZGVmIFNWT1JQT1NJWAot CS8qIFRoaXMgaXMgZm9yIFN5c3RlbSBJSUkvViB3aXRoIFZNSU4+MCwgVlRJTUU9MCBhbmQgT19O REVMQVkgb2ZmLAotCSAqIGFuZCBDTE9DQUwgc2V0IGFueSB3YXkgeW91IGxpa2UuICBUaGlzIHdh eSwgcmVhZCgpIHdpbGwgZG8gZXhhY3RseQotCSAqIHdoYXQgaXMgcmVxdWlyZWQgYnkgbXlmaWxs YnVmKCk6IElmIHRoZXJlIGlzIGRhdGEgaW4gdGhlIGJ1ZmZlcnMKLQkgKiBvZiB0aGUgTy5TLiwg YWxsIGF2YWlsYWJsZSBkYXRhIGlzIHJlYWQgaW50byBteWJ1ZiwgdXAgdG8gdGhlIHNpemUKLQkg KiBvZiBteWJ1Zi4gIElmIHRoZXJlIGlzIG5vbmUsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgdG8gYXJy aXZlIGlzCi0JICogYXdhaXRlZCBhbmQgcmV0dXJuZWQuCi0JICovCi1pbnQKLW15ZmlsbGJ1Zigp IHsKLSAgICBpbnQgZmQsIG47Ci0jaWZkZWYgTkVUQ01ECi0gICAgaWYgKHR0cGlwZSkKLSAgICAg IGZkID0gZmRpbjsKLSAgICBlbHNlCi0jZW5kaWYgLyogTkVUQ01EICovCi0gICAgICBmZCA9IHR0 eWZkOwotCi0jaWZkZWYgc3hhRTUwCi0gICAgLyogRnJvbSBTLiBEZXphd2EgYXQgRnVqaWZpbG0g aW4gSmFwYW4uICBJIGRvbid0IGtub3cgd2h5IHRoaXMgaXMgKi8KLSAgICAvKiBuZWNlc3Nhcnkg Zm9yIHRoZSBzeGEgRTUwLCBidXQgaXQgaXMuICovCi0gICAgcmV0dXJuIHJlYWQoZmQsIG15YnVm LCAyNTUpOwotI2Vsc2UKLSNpZmRlZiBCRU9TT1JCRUJPWAotICAgIHdoaWxlICgxKSB7Ci0jaWZk ZWYgTkVUQ09OTgotICAgICAgICBpZiAobmV0Y29ubikgewotICAgICAgICAgICAgbiA9IG5ldHhp bihzaXplb2YobXlidWYpLCAoY2hhciAqKW15YnVmKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEs IkJFQk9YIFNWT1JQT1NJWCBuZXR3b3JrIG15ZmlsbGJ1ZiIsIiIsbik7Ci0JfQotICAgICAgICBl bHNlCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotCSAgbiA9IHJlYWQoZmQsIG15YnVmLCBzaXplb2Yo bXlidWYpKTsKLQlkZWJ1ZyhGMTAxLCJCRUJPWCBTVk9SUE9TSVggbm90bmV0IG15ZmlsbGJ1ZiIs IiIsbik7Ci0gICAgICAgIGlmIChuID4gMCkKLQkgIHJldHVybihuKTsKLSAgICAgICAgc25vb3pl KDEwMDAuMCk7Ci0gICAgfQotI2Vsc2UgLyogQkVPU09SQkVCT1ggKi8KLSAgICBlcnJubyA9IDA7 Ci0gICAgLyogZGVidWcoRjEwMSwiU1ZPUlBPU0lYIG15ZmlsbGJ1ZiBjYWxsaW5nIHJlYWQoKSBm ZCIsIiIsZmQpOyAqLwotI2lmZGVmIElCTVgyNQotICAgIGlmIChuZXRjb25uICYmIChuZXR0eXBl ID09IE5FVF9JWDI1KSkgewotCS8qIGNhbid0IHVzZSBzaXplb2YgYmVjYXVzZSBteWJ1ZiBpcyBh IHBvaW50ZXIsIGFuZCBub3QgYW4gYXJyYXkhICovCi0JbiA9IHgyNXhpbiggTVlCVUZMRU4sIG15 YnVmICk7Ci0gICAgfSBlbHNlCi0jZW5kaWYgLyogSUJNWDI1ICovCi0KLSNpZmRlZiBDS19TU0wK LSAgICAgIGlmIChzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSB7Ci0JICBpbnQg ZXJyb3IsIG4gPSAwOwotCSAgZGVidWcoRjEwMCwibXlmaWxsYnVmIGNhbGxpbmcgU1NMX3JlYWQo KSBmZCIsIiIsMCk7Ci0JICB3aGlsZSAobiA9PSAwKSB7Ci0JICAgICAgaWYgKHNzbF9hY3RpdmVf ZmxhZykKLSAgICAgICAgICAgICAgICBuID0gU1NMX3JlYWQoc3NsX2NvbiwgKGNoYXIgKilteWJ1 Ziwgc2l6ZW9mKG15YnVmKSk7Ci0JICAgICAgZWxzZSBpZiAodGxzX2FjdGl2ZV9mbGFnKQotICAg ICAgICAgICAgICAgIG4gPSBTU0xfcmVhZCh0bHNfY29uLCAoY2hhciAqKW15YnVmLCBzaXplb2Yo bXlidWYpKTsKLSAgICAgICAgICAgICAgZWxzZQotCQlicmVhazsKLQkgICAgICBzd2l0Y2ggKFNT TF9nZXRfZXJyb3Ioc3NsX2FjdGl2ZV9mbGFnP3NzbF9jb246dGxzX2NvbixuKSkgewotCQljYXNl IFNTTF9FUlJPUl9OT05FOgotCQkgIGlmIChuID4gMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0 dXJuKG4pOwotCQkgIGlmIChuIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0yKTsK LQkJICBtc2xlZXAoNTApOwotCQkgIGJyZWFrOwotCQljYXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRF OgotCQljYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6Ci0JCSAgcmV0dXJuKC0xKTsKLQkJY2FzZSBT U0xfRVJST1JfU1lTQ0FMTDoKLQkJICBpZiAobiAhPSAwKQotCQkgICAgcmV0dXJuKC0xKTsKLQkJ Y2FzZSBTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUDoKLQkJY2FzZSBTU0xfRVJST1JfU1NMOgot CQljYXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVSTjoKLQkJZGVmYXVsdDoKLQkJICB0dGNsb3MoMCk7 Ci0JCSAgcmV0dXJuKC0zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSNlbmRp ZiAvKiBDS19TU0wgKi8KLSNpZmRlZiBDS19LRVJCRVJPUwotI2lmZGVmIEtSQjQKLSNpZmRlZiBS TE9HQ09ERQotICAgIGlmICh0dG5wcm90byA9PSBOUF9FSzRMT0dJTikgewotCWRlYnVnKEYxMDEs Im15ZmlsbGJ1ZiBjYWxsaW5nIGtyYjRfZGVzX3JlYWQoKSBmZCIsIiIsdHR5ZmQpOwotICAgICAg ICBpZiAoKG4gPSBrcmI0X2Rlc19yZWFkKHR0eWZkLChjaGFyICopbXlidWYsc2l6ZW9mKG15YnVm KSkpIDwgMCkKLQkgIHJldHVybigtMyk7Ci0gICAgICAgIGVsc2UKLQkgIHJldHVybihuKTsKLSAg ICB9Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNlbmRpZiAvKiBLUkI0ICovCi0jaWZkZWYgS1JC NQotI2lmZGVmIFJMT0dDT0RFCi0gICAgaWYgKHR0bnByb3RvID09IE5QX0VLNUxPR0lOKSB7Ci0J ZGVidWcoRjEwMSwibXlmaWxsYnVmIGNhbGxpbmcga3JiNV9kZXNfcmVhZCgpIGZkIiwiIix0dHlm ZCk7Ci0gICAgICAgIGlmICgobiA9IGtyYjVfZGVzX3JlYWQodHR5ZmQsKGNoYXIgKilteWJ1Zixz aXplb2YobXlidWYpLDApKSA8IDApCi0JICByZXR1cm4oLTMpOwotICAgICAgICBlbHNlCi0JICBy ZXR1cm4obik7Ci0gICAgfQotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0jaWZkZWYgS1JCNV9VMlUK LSAgICBpZiAodHRucHJvdG8gPT0gTlBfSzVVMlUpIHsKLQlkZWJ1ZyhGMTAxLCJteWZpbGxidWYg Y2FsbGluZyBrcmI1X3UydV9yZWFkKCkgZmQiLCIiLHR0eWZkKTsKLSAgICAgICAgaWYgKChuID0g a3JiNV91MnVfcmVhZCh0dHlmZCwoY2hhciAqKW15YnVmLHNpemVvZihteWJ1ZikpKSA8IDApCi0J ICByZXR1cm4oLTMpOwotICAgICAgICBlbHNlCi0JICByZXR1cm4obik7Ci0gICAgfQotI2VuZGlm IC8qIEtSQjVfVTJVICovCi0jZW5kaWYgLyogS1JCNSAqLwotI2VuZGlmIC8qIENLX0tFUkJFUk9T ICovCi0KLSNpZmRlZiBORVRQVFkKLSNpZmRlZiBIQVZFX1BUWVRSQVAKLSAgICAvKiBTcGVjaWFs IGhhbmRsaW5nIGZvciBIUC1VWCBwdHkgaS9vICovCi0gIHB0eXJlYWQ6Ci0gICAgaWYgKHR0cHR5 ICYmIHB0eV90cmFwX3BlbmRpbmcodHR5ZmQpID4gMCkgewotCWRlYnVnKEYxMDEsIm15ZmlsbGJ1 ZiBjYWxsaW5nIHB0eV90cmFwX2hhbmRsZXIoKSBmZCIsIiIsdHR5ZmQpOwotICAgICAgICBpZiAo cHR5X3RyYXBfaGFuZGxlcih0dHlmZCkgPiAwKSB7Ci0gICAgICAgICAgICB0dGNsb3MoMCk7Ci0g ICAgICAgICAgICByZXR1cm4oLTMpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIEhBVkVf UFRZVFJBUCAqLwotI2VuZGlmIC8qIE5FVFBUWSAqLwotICAgIGRlYnVnKEYxMDEsIm15ZmlsbGJ1 ZiBjYWxsaW5nIHJlYWQoKSBmZCIsIiIsdHR5ZmQpOwotICAgIG4gPSByZWFkKGZkLCBteWJ1Ziwg c2l6ZW9mKG15YnVmKSk7Ci0gICAgZGVidWcoRjEwMSwiU1ZPUlBPU0lYIG15ZmlsbGJ1ZiByZWFk IiwiIixuKTsKLSAgICBkZWJ1ZyhGMTAxLCJTVk9SUE9TSVggbXlmaWxsYnVmIGVycm5vIiwiIixl cnJubyk7Ci0gICAgZGVidWcoRjEwMSwiU1ZPUlBPU0lYIG15ZmlsbGJ1ZiB0dGNhcnIiLCIiLHR0 Y2Fycik7Ci0gICAgaWYgKG4gPCAxKSB7Ci0jaWZkZWYgTkVUUFRZCi0jaWZkZWYgSEFWRV9QVFlU UkFQCi0gICAgICAgIC8qIFdoZW4gd2UgaGF2ZSBhIFBUWSB0cmFwIGluIHBsYWNlIHRoZSBjb25u ZWN0aW9uIGNhbm5vdCAqLwotICAgICAgICAvKiBiZSBjbG9zZWQgdW50aWwgdGhlIHRyYXAgcmVj ZWl2ZXMgYSBjbG9zZSBpbmRpY2F0aW9uLiAgKi8KLSAgICAgICAgaWYgKG4gPT0gMCAmJiB0dHB0 eSkKLSAgICAgICAgICAgIGdvdG8gcHR5cmVhZDsKLSNlbmRpZiAvKiBIQVZFX1BUWVRSQVAgKi8K LSNlbmRpZiAvKiBORVRQVFkgKi8KLSAgICAgICAgcmV0dXJuKC0zKTsKLSAgICB9Ci0gICAgcmV0 dXJuKG4pOwotI2VuZGlmIC8qIEJFT1NPUkJFQk9YICovCi0jZW5kaWYgLyogc3hhRTUwICovCi19 Ci0KLSNlbHNlIC8qIG5vdCBBVCZUIG9yIFBPU0lYICovCi0KLSNpZmRlZiBhZWdpcwotCS8qIFRo aXMgaXMgcXVvdGVkIGZyb20gdGhlIG9sZCBteXJlYWQoKS4gIFRoZSBzZW1hbnRpY3Mgc2VlbSB0 byBiZQotCSAqIGFscmlnaHQsIGJ1dCBtYXliZSBlcnJubyB3b3VsZCBub3QgbmVlZCB0byBiZSBz ZXQgZXZlbiB3aGVuCi0JICogdGhlcmUgaXMgbm8gZXJyb3I/ICBJIGRvbid0IGtub3cgYWVnaXMu Ci0JICovCi1pbnQKLW15ZmlsbGJ1ZigpIHsKLSAgICBpbnQgY291bnQ7Ci0jaWZkZWYgTkVUQ01E Ci0gICAgaWYgKHR0cGlwZSkKLSAgICAgIGZkID0gZmRpbjsKLSAgICBlbHNlCi0jZW5kaWYgLyog TkVUQ01EICovCi0gICAgICBmZCA9IHR0eWZkOwotCi0gICAgY291bnQgPSBpb3NfJGdldCgoc2hv cnQpZmQsIGlvc18kY29uZF9vcHQsIG15YnVmLCAyNTZMLCBzdCk7Ci0gICAgZXJybm8gPSBFSU87 Ci0gICAgaWYgKHN0LmFsbCA9PSBpb3NfJGdldF9jb25kaXRpb25hbF9mYWlsZWQpIC8qIGdldCBh dCBsZWFzdCBvbmUgKi8KLSAgICAgIGNvdW50ID0gaW9zXyRnZXQoKHNob3J0KWZkLCAwLCBteWJ1 ZiwgMUwsIHN0KTsKLSAgICBpZiAoc3QuYWxsID09IGlvc18kZW5kX29mX2ZpbGUpCi0gICAgICBy ZXR1cm4oLTMpOwotICAgIGVsc2UgaWYgKHN0LmFsbCAhPSBzdGF0dXNfJG9rKSB7Ci0JZXJybm8g PSBFSU87Ci0JcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgcmV0dXJuKGNvdW50ID4gMCA/IGNvdW50 IDogLTMpOwotfQotI2Vsc2UgLyogIWFlZ2lzICovCi0KLSNpZmRlZiBGSU9OUkVBRAotCS8qIFRo aXMgaXMgZm9yIHN5c3RlbXMgd2l0aCBGSU9OUkVBRC4gIEZJT05SRUFEIHJldHVybnMgdGhlIG51 bWJlcgotCSAqIG9mIGNoYXJhY3RlcnMgYXZhaWxhYmxlIGZvciByZWFkaW5nLiBJZiBub25lIGFy ZSBhdmFpbGFibGUsIHdhaXQKLQkgKiB1bnRpbCBzb21ldGhpbmcgYXJyaXZlcywgb3RoZXJ3aXNl IHJldHVybiBhbGwgdGhlcmUgaXMuCi0JICovCi1pbnQKLW15ZmlsbGJ1ZigpIHsKLSAgICBQRUVL VFlQRSBhdmFpbCA9IDA7Ci0gICAgaW50IHgsIGZkOwotI2lmZGVmIE5FVENNRAotICAgIGlmICh0 dHBpcGUpCi0gICAgICBmZCA9IGZkaW47Ci0gICAgZWxzZQotI2VuZGlmIC8qIE5FVENNRCAqLwot ICAgICAgZmQgPSB0dHlmZDsKLQotI2lmZGVmIFNVTlgyNQotLyoKLSAgU3VuTGluayBYLjI1IHN1 cHBvcnQgaW4gdGhpcyByb3V0aW5lIGZyb20gU3RlZmFhbiBBLiBFZWNrZWxzLCBFdXJvc3RhdCAo Q0VDKS4KLSAgRGVwZW5kcyBvbiBTdW5PUyBoYXZpbmcgRklPTlJFQUQsIG5vdCBiZWNhdXNlIHdl IHVzZSBpdCwgYnV0IGp1c3Qgc28gdGhpcwotICBjb2RlIGlzIGdyb3VwZWQgY29ycmVjdGx5IHdp dGhpbiB0aGUgI2lmZGVmcy4gIExldCdzIGhvcGUgU29sYXJpcyBrZWVwcyBpdC4KLQotICBXZSBj YWxsIHgyNXhpbigpIGluc3RlYWQgb2YgcmVhZCgpIHNvIHRoYXQgUS1CaXQgcGFja2V0cywgd2hp Y2ggY29udGFpbgotICBYLjI1IHNlcnZpY2UtbGV2ZWwgaW5mb3JtYXRpb24gKGUuZy4gUEFEIHBh cmFtZXRlciBjaGFuZ2VzKSwgY2FuIGJlIHByb2Nlc3NlZAotICB0cmFuc3BhcmVudGx5IHRvIHRo ZSB1cHBlci1sZXZlbCBjb2RlLiAgVGhpcyBpcyBhIGJsb2NraW5nIHJlYWQsIGFuZCBzbwotICB3 ZSBkZXBlbmQgb24gaGlnaGVyLWxldmVsIGNvZGUgKHN1Y2ggYXMgdHRpbmMoKSkgdG8gc2V0IGFu eSBuZWNlc3NhcnkgYWxhcm1zLgotKi8KLSAgICBleHRlcm4gaW50IG5ldHR5cGU7Ci0gICAgaWYg KG5ldGNvbm4gJiYgbmV0dHlwZSA9PSBORVRfU1gyNSkgewotCXdoaWxlICgoeCA9IHgyNXhpbihz aXplb2YoeDI1YnVmKSwgeDI1YnVmKSkgPCAxKSA7Ci0JcmV0dXJuKHggLSAxKTsJICAgICAgICAv KiAiLTEiIGNvbXBlbnNhdGVzIGZvciBleHRyYSBzdGF0dXMgYnl0ZSAqLwotICAgIH0KLSNlbmRp ZiAvKiBTVU5YMjUgKi8KLQotI2lmZGVmIENLX1NTTAotICAgIGlmIChzc2xfYWN0aXZlX2ZsYWcg fHwgdGxzX2FjdGl2ZV9mbGFnKSB7Ci0gICAgICAgIGludCBlcnJvciwgbiA9IDA7Ci0gICAgICAg IHdoaWxlIChuID09IDApIHsKLSAgICAgICAgICAgIGlmIChzc2xfYWN0aXZlX2ZsYWcpCi0JICAg ICAgbiA9IFNTTF9yZWFkKHNzbF9jb24sIChjaGFyICopbXlidWYsIHNpemVvZihteWJ1ZikpOwot ICAgICAgICAgICAgZWxzZQotCSAgICAgIG4gPSBTU0xfcmVhZCh0bHNfY29uLCAoY2hhciAqKW15 YnVmLCBzaXplb2YobXlidWYpKTsKLSAgICAgICAgICAgIHN3aXRjaCAoU1NMX2dldF9lcnJvcihz c2xfYWN0aXZlX2ZsYWc/c3NsX2Nvbjp0bHNfY29uLG4pKSB7Ci0JICAgICAgY2FzZSBTU0xfRVJS T1JfTk9ORToKLSAgICAgICAgICAgICAgICBpZiAobiA+IDApCi0JCSAgcmV0dXJuKG4pOwotICAg ICAgICAgICAgICAgIGlmIChuIDwgMCkKLQkJICByZXR1cm4oLTIpOwotICAgICAgICAgICAgICAg IG1zbGVlcCg1MCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0JICAgICAgY2FzZSBTU0xfRVJS T1JfV0FOVF9XUklURToKLQkgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6Ci0gICAgICAg ICAgICAgICAgcmV0dXJuKC0xKTsKLQkgICAgICBjYXNlIFNTTF9FUlJPUl9TWVNDQUxMOgotCQlp ZiAobiAhPSAwKQotCQkgIHJldHVybigtMSk7Ci0JICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9Y NTA5X0xPT0tVUDoKLQkgICAgICBjYXNlIFNTTF9FUlJPUl9TU0w6Ci0JICAgICAgY2FzZSBTU0xf RVJST1JfWkVST19SRVRVUk46Ci0JICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICB0dGNs b3MoMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgfQotICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNpZmRlZiBDS19LRVJCRVJPUwotI2lm ZGVmIEtSQjQKLSNpZmRlZiBSTE9HQ09ERQotICAgIGlmICh0dG5wcm90byA9PSBOUF9FSzRMT0dJ TikgewotICAgICAgICBpZiAoKHggPSBrcmI0X2Rlc19yZWFkKHR0eWZkLG15YnVmLHNpemVvZiht eWJ1ZikpKSA8IDApCi0JICByZXR1cm4oLTEpOwotICAgICAgICBlbHNlCi0JICByZXR1cm4oeCk7 Ci0gICAgfQotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0jZW5kaWYgLyogS1JCNCAqLwotI2lmZGVm IEtSQjUKLSNpZmRlZiBSTE9HQ09ERQotICAgIGlmICh0dG5wcm90byA9PSBOUF9FSzVMT0dJTikg ewotICAgICAgICBpZiAoKHggPSBrcmI1X2Rlc19yZWFkKHR0eWZkLG15YnVmLHNpemVvZihteWJ1 ZiksMCkpIDwgMCkKLQkgIHJldHVybigtMSk7Ci0gICAgICAgIGVsc2UKLQkgIHJldHVybih4KTsK LSAgICB9Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNpZmRlZiBLUkI1X1UyVQotICAgIGlmICh0 dG5wcm90byA9PSBOUF9LNVUyVSkgewotICAgICAgICBpZiAoKHggPSBrcmI1X3UydV9yZWFkKHR0 eWZkLG15YnVmLHNpemVvZihteWJ1ZikpKSA8IDApCi0JICByZXR1cm4oLTEpOwotICAgICAgICBl bHNlCi0JICByZXR1cm4oeCk7Ci0gICAgfQotI2VuZGlmIC8qIEtSQjVfVTJVICovCi0jZW5kaWYg LyogS1JCNSAqLwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0KLSAgICBlcnJubyA9IDA7Ci0g ICAgZGVidWcoRjEwMSwibXlmaWxsYnVmIGNhbGxpbmcgRklPTlJFQUQgaW9jdGwiLCIiLHhsb2Nh bCk7Ci0gICAgeCA9IGlvY3RsKGZkLCBGSU9OUkVBRCwgJmF2YWlsKTsKLSNpZmRlZiBERUJVRwot ICAgIGlmIChkZWJsb2cpIHsKLQlkZWJ1ZyhGMTAxLCJteWZpbGxidWYgRklPTlJFQUQiLCIiLHgp OwotCWRlYnVnKEYxMDEsIm15ZmlsbGJ1ZiBGSU9OUkVBRCBhdmFpbCIsIiIsYXZhaWwpOwotCWRl YnVnKEYxMDEsIm15ZmlsbGJ1ZiBGSU9OUkVBRCBlcnJubyIsIiIsZXJybm8pOwotICAgIH0KLSNl bmRpZiAvKiBERUJVRyAqLwotICAgIGlmICh4IDwgMCB8fCBhdmFpbCA9PSAwKQotICAgICAgYXZh aWwgPSAxOwotCi0gICAgaWYgKGF2YWlsID4gTVlCVUZMRU4pCi0gICAgICBhdmFpbCA9IE1ZQlVG TEVOOwotCi0gICAgZXJybm8gPSAwOwotCi0gICAgeCA9IHJlYWQoZmQsIG15YnVmLCAoaW50KSBh dmFpbCk7Ci0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKSB7Ci0JZGVidWcoRjEwMSwibXlm aWxsYnVmIGF2YWlsIiwiIixhdmFpbCk7Ci0JZGVidWcoRjEwMSwibXlmaWxsYnVmIHJlYWQiLCIi LHgpOwotCWRlYnVnKEYxMDEsIm15ZmlsbGJ1ZiByZWFkIGVycm5vIiwiIixlcnJubyk7Ci0gICAg ICAgIGlmICh4ID4gMCkKLQkgIGNraGV4ZHVtcCgibXlmaWxsYnVmIG15YnVmIixteWJ1Zix4KTsK LSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICBpZiAoeCA8IDEpIHggPSAtMzsJCQkvKiBy ZWFkIDAgPT0gY29ubmVjdGlvbiBsb3NzICovCi0gICAgcmV0dXJuKHgpOwotfQotCi0jZWxzZSAv KiAhRklPTlJFQUQgKi8KLS8qIEFkZCBvdGhlciBzeXN0ZW1zIGhlcmUsIGJldHdlZW4gI2lmZGVm IGFuZCAjZWxzZSwgZS5nLiBORVRDT05OLiAqLwotLyogV2hlbiB0aGVyZSBpcyBubyBvdGhlciBw b3NzaWJpbGl0eSwgcmVhZCAxIGNoYXJhY3RlciBhdCBhIHRpbWUuICovCi1pbnQKLW15ZmlsbGJ1 ZigpIHsKLSAgICBpbnQgeDsKLQotI2lmZGVmIENLX1NTTAotICAgIGlmIChzc2xfYWN0aXZlX2Zs YWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSB7Ci0gICAgICAgIGludCBlcnJvciwgbiA9IDA7Ci0gICAg ICAgIHdoaWxlIChuID09IDApIHsKLSAgICAgICAgICAgIGlmIChzc2xfYWN0aXZlX2ZsYWcpCi0J ICAgICAgbiA9IFNTTF9yZWFkKHNzbF9jb24sIChjaGFyICopbXlidWYsIHNpemVvZihteWJ1Zikp OwotICAgICAgICAgICAgZWxzZQotCSAgICAgIGNvdW50ID0gU1NMX3JlYWQodGxzX2NvbiwgKGNo YXIgKilteWJ1Ziwgc2l6ZW9mKG15YnVmKSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKFNTTF9nZXRf ZXJyb3Ioc3NsX2FjdGl2ZV9mbGFnP3NzbF9jb246dGxzX2NvbixuKSkgewotCSAgICAgIGNhc2Ug U1NMX0VSUk9SX05PTkU6Ci0gICAgICAgICAgICAgICAgaWYgKG4gPiAwKQotCQkgIHJldHVybihu KTsKLSAgICAgICAgICAgICAgICBpZiAobiA8IDApCi0JCSAgcmV0dXJuKC0yKTsKLSAgICAgICAg ICAgICAgICBtc2xlZXAoNTApOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCSAgICAgIGNhc2Ug U1NMX0VSUk9SX1dBTlRfV1JJVEU6Ci0JICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgot ICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0JICAgICAgY2FzZSBTU0xfRVJST1JfU1lTQ0FM TDoKLQkJaWYgKG4gIT0gMCkKLQkJICByZXR1cm4oLTEpOwotCSAgICAgIGNhc2UgU1NMX0VSUk9S X1dBTlRfWDUwOV9MT09LVVA6Ci0JICAgICAgY2FzZSBTU0xfRVJST1JfU1NMOgotCSAgICAgIGNh c2UgU1NMX0VSUk9SX1pFUk9fUkVUVVJOOgotCSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg ICAgdHRjbG9zKDApOwotICAgICAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0jaWZkZWYgQ0tfS0VSQkVS T1MKLSNpZmRlZiBLUkI0Ci0jaWZkZWYgUkxPR0NPREUKLSAgICBpZiAodHRucHJvdG8gPT0gTlBf RUs0TE9HSU4pIHsKLSAgICAgICAgaWYgKChsZW4gPSBrcmI0X2Rlc19yZWFkKHR0eWZkLG15YnVm LHNpemVvZihteWJ1ZikpKSA8IDApCi0JICByZXR1cm4oLTEpOwotICAgICAgICBlbHNlCi0JICBy ZXR1cm4obGVuKTsKLSAgICB9Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNlbmRpZiAvKiBLUkI0 ICovCi0jaWZkZWYgS1JCNQotI2lmZGVmIFJMT0dDT0RFCi0gICAgaWYgKHR0bnByb3RvID09IE5Q X0VLNUxPR0lOKSB7Ci0gICAgICAgIGlmICgobGVuID0ga3JiNV9kZXNfcmVhZCh0dHlmZCxteWJ1 ZixzaXplb2YobXlidWYpLDApKSA8IDApCi0JICByZXR1cm4oLTEpOwotICAgICAgICBlbHNlCi0J ICByZXR1cm4obGVuKTsKLSAgICB9Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNpZmRlZiBLUkI1 X1UyVQotICAgIGlmICh0dG5wcm90byA9PSBOUF9LNVUyVSkgewotICAgICAgICBpZiAoKGxlbiA9 IGtyYjVfdTJ1X3JlYWQodHR5ZmQsbXlidWYsc2l6ZW9mKG15YnVmKSkpIDwgMCkKLQkgIHJldHVy bigtMSk7Ci0gICAgICAgIGVsc2UKLQkgIHJldHVybihsZW4pOwotICAgIH0KLSNlbmRpZiAvKiBL UkI1X1UyVSAqLwotI2VuZGlmIC8qIEtSQjUgKi8KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwot Ci0jaWZkZWYgTkVUQ01ECi0gICAgaWYgKHR0cGlwZSkKLSAgICAgIGZkID0gZmRpbjsKLSAgICBl bHNlCi0jZW5kaWYgLyogTkVUQ01EICovCi0gICAgICBmZCA9IHR0eWZkOwotICAgIHggPSByZWFk KGZkLCBteWJ1ZiwgMSk7Ci0gICAgcmV0dXJuKHggPiAwID8geCA6IC0zKTsKLX0KLQotI2VuZGlm IC8qICFGSU9OUkVBRCAqLwotI2VuZGlmIC8qICFhZWdpcyAqLwotI2VuZGlmIC8qICFBVFRTViAq LwotCi0jZW5kaWYgLyogTVlSRUFEICovCi0KLS8qICBUIFQgXyBUIE4gTyBQIFQgIC0tICBIYW5k bGUgVGVsbmV0IG5lZ290aW9ucyBpbiBpbmNvbWluZyBkYXRhICovCi0vKgotICBDYWxsIHdpdGgg dGhlIElBQyB0aGF0IHdhcyBlbmNvdW50ZXJlZC4KLSAgUmV0dXJuczoKLSAgIC0zOiBJZiBjb25u ZWN0aW9uIGhhcyBkcm9wcGVkIG9yIGdvbmUgYmFkLgotICAgLTI6IE9uIFRlbG5ldCBwcm90b2Nv bCBlcnJvciByZXN1bHRpbmcgaW4gaW5jb25zaXN0ZW50IHN0YXRlcy4KLSAgICAwOiBJZiBuZWdv dGlhdGlvbiBPSyBhbmQgY2FsbGVyIGhhcyBub3RoaW5nIHRvIGRvLgotICAgIDE6IElmIHBhY2tl dCBzdGFydCBjaGFyYWN0ZXIgaGFzIGNoYW5nZWQgKG5ldyB2YWx1ZSBpcyBpbiBnbG9iYWwgc3Rj aHIpLgotICAyNTU6IElmIHRoZXJlIHdhcyBhIHF1b3RlZCBJQUMgYXMgZGF0YS4KLSAgIG9yOiBO b3QgYXQgYWxsIGlmIHdlIGdvdCBhIGxlZ2l0aW1hdGUgVGVsbmV0IExvZ291dCByZXF1ZXN0Lgot Ki8KLSNpZmRlZiBUQ1BTT0NLRVQKLXN0YXRpYyBpbnQKLXR0X3Rub3B0KG4pIGludCBuOyB7CQkJ LyogSGFuZGxlIFRlbG5ldCBvcHRpb25zICovCi0gICAgLyogSW4gY2FzZSBjYWxsZXIgZGlkIG5v dCBhbHJlYWR5IGNoZWNrIHRoZXNlIGNvbmRpdGlvbnMuLi4gICovCi0gICAgaWYgKG4gPT0gSUFD ICYmCi0JKCh4bG9jYWwgJiYgbmV0Y29ubiAmJiBJU19URUxORVQoKSkgfHwKLQkgKCF4bG9jYWwg JiYgc3N0ZWxuZXQpKSkgewotCWV4dGVybiBpbnQgc2VydmVyOwotCWludCB0eCA9IDA7Ci0JZGVi dWcoRjEwMCwidHRpbmwgY2FsbGluZyB0bl9kb29wKCkiLCIiLDApOwotCXR4ID0gdG5fZG9vcCgo Q0hBUikobiAmIDB4ZmYpLGR1cGxleCx0dGluYyk7Ci0JZGVidWcoRjExMSwidHRpbmwgdG5fZG9v cCgpIHJldHVybmVkIiwidHgiLHR4KTsKLQlzd2l0Y2ggKHR4KSB7Ci0JICBjYXNlIDA6Ci0JICAg IHJldHVybigwKTsKLQkgIGNhc2UgLTE6CQkJLyogSS9PIGVycm9yICovCi0JICAgIHR0aW1vZmYo KTsJCQkvKiBUdXJuIG9mZiB0aW1lciAqLwotCSAgICByZXR1cm4oLTMpOwotICAgICAgICAgIGNh c2UgLTI6CQkJLyogQ29ubmVjdGlvbiBmYWlsZWQuICovCi0gICAgICAgICAgY2FzZSAtMzoKLQkg ICAgdHRpbW9mZigpOwkJCS8qIFR1cm4gb2ZmIHRpbWVyICovCi0JICAgIHR0Y2xvcygwKTsKLQkg ICAgcmV0dXJuKC0zKTsKLQkgIGNhc2UgMToJCQkvKiBFQ0hPIGNoYW5nZSAqLwotCSAgICBkdXBs ZXggPSAxOwotCSAgICByZXR1cm4oMCk7Ci0JICBjYXNlIDI6CQkJLyogRUNITyBjaGFuZ2UgKi8K LQkgICAgZHVwbGV4ID0gMDsKLQkgICAgcmV0dXJuKDApOwotCSAgY2FzZSAzOgkJCS8qIFF1b3Rl ZCBJQUMgKi8KLQkgICAgbiA9IDI1NTsKLQkgICAgcmV0dXJuKCh1bnNpZ25lZCkyNTUpOwotI2lm ZGVmIElLU19PUFRJT04KLQkgIGNhc2UgNDogewotCSAgICAgIGlmIChURUxPUFRfU0IoVEVMT1BU X0tFUk1JVCkua2VybWl0LnVfc3RhcnQgJiYgc2VydmVyCi0jaWZkZWYgSUtTRAotCQkgICYmICFp bnNlcnZlcgotI2VuZGlmIC8qIElLU0QgKi8KLQkJICApIHsJCQkvKiBSZW1vdGUgaW4gU2VydmVy IG1vZGUgKi8KLQkJICB0dGltb2ZmKCk7CQkvKiBUdXJuIG9mZiB0aW1lciAqLwotCQkgIGRlYnVn KEYxMDAsInVfc3RhcnQgYW5kICFpbnNlcnZlciIsIiIsMCk7Ci0JCSAgcmV0dXJuKC0yKTsJCS8q IEVuZCBzZXJ2ZXIgbW9kZSAqLwotCSAgICAgIH0gZWxzZSBpZiAoIVRFTE9QVF9TQihURUxPUFRf S0VSTUlUKS5rZXJtaXQubWVfc3RhcnQgJiYKLQkJCSBzZXJ2ZXIKLQkJCSApIHsJCS8qIEknbSBu byBsb25nZXIgaW4gU2VydmVyIE1vZGUgKi8KLQkJICBkZWJ1ZyhGMTAwLCJtZV9zdGFydCBhbmQg c2VydmVyIiwiIiwwKTsKLQkJICB0dGltb2ZmKCk7Ci0JCSAgcmV0dXJuKC0yKTsKLQkgICAgICB9 Ci0JICAgICAgcmV0dXJuKDApOwotCSAgfQotCSAgY2FzZSA1OiB7CQkJLyogU3RhcnQgY2hhcmFj dGVyIGNoYW5nZSAqLwotCSAgICAgIC8qIGV4dGVybiBDSEFSIHN0Y2hyOyAqLwotCSAgICAgIC8q IHN0YXJ0ID0gc3RjaHI7ICovCi0JICAgICAgcmV0dXJuKDEpOwotCSAgfQotI2VuZGlmIC8qIElL U19PUFRJT04gKi8KLQkgIGNhc2UgNjoJCQkvKiBSZW1vdGUgTG9nb3V0ICovCi0JICAgIHR0aW1v ZmYoKTsKLQkgICAgdHRjbG9zKDApOwotI2lmZGVmIElLU0QKLQkgICAgaWYgKGluc2VydmVyICYm ICFsb2NhbCkKLQkgICAgICBkb2V4aXQoR09PRF9FWElULDApOwotCSAgICBlbHNlCi0jZW5kaWYg LyogSUtTRCAqLwotCSAgICAgIHJldHVybigtMik7Ci0JICBkZWZhdWx0OgotCSAgICByZXR1cm4o MCk7Ci0JfQotICAgIH0gZWxzZQotICAgICAgcmV0dXJuKDApOwotfQotI2VuZGlmIC8qIFRDUFNP Q0tFVCAqLwotCi0vKiAgVCBUIEYgTCBVIEkgIC0tICBGbHVzaCB0dHkgaW5wdXQgYnVmZmVyICov Ci0KLXZvaWQKLXR0Zmx1eCgpIHsJCQkJLyogQnV0IGZpcnN0Li4uICovCi0jaWZkZWYgTVlSRUFE Ci0vKgotICBGbHVzaCBpbnRlcm5hbCBNWVJFQUQgYnVmZmVyLgotKi8KLSNpZmRlZiBUQ1BTT0NL RVQKLSAgICBpbnQgZG90bm9wdHMsIHg7Ci0gICAgZG90bm9wdHMgPSAoKCh4bG9jYWwgJiYgbmV0 Y29ubiAmJiBJU19URUxORVQoKSkgfHwKLQkJICgheGxvY2FsICYmIHNzdGVsbmV0KSkpOwotI2Vu ZGlmIC8qIFRDUFNPQ0tFVCAqLwotICAgIGRlYnVnKEYxMDEsInR0Zmx1eCBteV9jb3VudCIsIiIs bXlfY291bnQpOwotI2lmZGVmIFRDUFNPQ0tFVAotICAgIGlmIChkb3Rub3B0cykgewotCUNIQVIg Y2ggPSAnXDAnOwotICAgICAgICB3aGlsZSAobXlfY291bnQgPiAwKSB7Ci0JICAgIGNoID0gbXly ZWFkKCk7Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICAgICAgaWYgKFRFTE9QVF9VKFRF TE9QVF9FTkNSWVBUSU9OKSkKLQkgICAgICBja190bl9kZWNyeXB0KChjaGFyICopJmNoLDEpOwot I2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSAgICAgICAgICAgIGlmIChjaCA9PSBJQUMpCi0J ICAgICAgeCA9IHR0X3Rub3B0KGNoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotI2VuZGlmIC8q IFRDUFNPQ0tFVCAqLwotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAg aWYgKFRFTE9QVF9VKFRFTE9QVF9FTkNSWVBUSU9OKSAmJiBteV9jb3VudCA+IDApCi0gICAgICBj a190bl9kZWNyeXB0KCZteWJ1ZltteV9pdGVtKzFdLG15X2NvdW50KTsKLSNlbmRpZiAvKiBDS19F TkNSWVBUSU9OICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIG15X2NvdW50ID0gMDsJCQkv KiBSZXNldCBjb3VudCB0byB6ZXJvICovCi0gICAgbXlfaXRlbSA9IC0xOwkJCS8qIEFuZCBidWZm ZXIgaW5kZXggdG8gLTEgKi8KLSNlbmRpZiAvKiBNWVJFQUQgKi8KLX0KLQotaW50Ci10dGZsdWko KSB7Ci0gICAgaW50IG4sIGZkOwotI2lmZGVmIFRDUFNPQ0tFVAotICAgIGludCBkb3Rub3B0czsK LSAgICBkb3Rub3B0cyA9ICgoKHhsb2NhbCAmJiBuZXRjb25uICYmIElTX1RFTE5FVCgpKSB8fAot CQkgKCF4bG9jYWwgJiYgc3N0ZWxuZXQpKSk7Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0KLSNp ZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaXBlKQotICAgICAgZmQgPSBmZGluOwotICAgIGVsc2UK LSNlbmRpZiAvKiBORVRDTUQgKi8KLSAgICAgIGZkID0gdHR5ZmQ7Ci0KLSNpZmRlZiBUVExFQlVG Ci0gICAgdHRwdXNoID0gLTE7CQkJLyogQ2xlYXIgdGhlIHBlZWstYWhlYWQgY2hhciAqLwotICAg IHdoaWxlIChsZV9kYXRhICYmIChsZV9pbmJ1ZigpID4gMCkpIHsKLSAgICAgICAgQ0hBUiBjaCA9 ICdcMCc7Ci0gICAgICAgIGlmIChsZV9nZXRjaGFyKCZjaCkgPiAwKSB7CS8qIENsZWFyIGFueSBt b3JlLi4uICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ0dGZsdWkgbGVfaW5idWYgY2giLCIi LGNoKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBUVExFQlVGICovCi0gICAgZGVidWco RjEwMSwidHRmbHVpIHR0cGlwZSIsIiIsdHRwaXBlKTsKLQotI2lmZGVmIE1ZUkVBRAotLyoKLSAg Rmx1c2ggaW50ZXJuYWwgTVlSRUFEIGJ1ZmZlciAqTkVYVCosIGluIGFsbCBjYXNlcy4KLSovCi0g ICAgdHRmbHV4KCk7Ci0jZW5kaWYgLyogTVlSRUFEICovCi0KLSNpZmRlZiBORVRDT05OCi0vKiBO ZXR3b3JrIGZsdXNoIGlzIGRvbmUgc3BlY2lhbGx5LCBpbiB0aGUgbmV0d29yayBzdXBwb3J0IG1v ZHVsZS4gKi8KLSAgICBpZiAoKG5ldGNvbm4gfHwgc3N0ZWxuZXQpICYmICF0dHBpcGUgJiYgIXR0 cHR5KSB7Ci0JZGVidWcoRjEwMCwidHRmbHVpIG5ldGZsdWkiLCIiLDApOwotI2lmZGVmIENPTU1F TlQKLSNpZmRlZiBUTl9DT01QT1JUCi0JaWYgKGlzdG5jb21wb3J0KCkpCi0gICAgICAgICAgICB0 bmNfc2VuZF9wdXJnZV9kYXRhKFROQ19QVVJHRV9SRUNFSVZFKTsKLSNlbmRpZiAvKiBUTl9DT01Q T1JUICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCXJldHVybihuZXRmbHVpKCkpOwotICAgIH0K LSNlbmRpZiAvKiBORVRDT05OICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJ0dGZsdWkgdHR5ZmQiLCIi LHR0eWZkKTsgLyogTm90IG5ldHdvcmsgKi8KLSAgICBpZiAodHR5ZmQgPCAwKQotICAgICAgcmV0 dXJuKC0xKTsKLQotI2lmZGVmIGFlZ2lzCi0gICAgc2lvXyRjb250cm9sKChzaG9ydCl5ZmQsIHNp b18kZmx1c2hfaW4sIHRydWUsIHN0KTsKLSAgICBpZiAoc3QuYWxsICE9IHN0YXR1c18kb2spIHsK LQlmcHJpbnRmKHN0ZGVyciwgImZsdXNoIGZhaWxlZDogIik7IGVycm9yXyRwcmludChzdCk7Ci0g ICAgfSBlbHNlIHsgICAgICAvKiBzb21ldGltZXMgdGhlIGZsdXNoIGRvZXNuJ3Qgd29yayAqLwot ICAgICAgICBmb3IgKDs7KSB7Ci0JICAgIGNoYXIgYnVmWzI1Nl07Ci0gICAgICAgICAgICAvKiBl YXQgYWxsIHRoZSBjaGFyYWN0ZXJzIHRoYXQgc2hvdWxkbid0IGJlIGF2YWlsYWJsZSAqLwotICAg ICAgICAgICAgaW9zXyRnZXQoKHNob3J0KWZkLCBpb3NfJGNvbmRfb3B0LCBidWYsIDI1NkwsIHN0 KTsgLyogKHZvaWQpICovCi0gICAgICAgICAgICBpZiAoc3QuYWxsID09IGlvc18kZ2V0X2NvbmRp dGlvbmFsX2ZhaWxlZCkgYnJlYWs7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImZsdXNo IGZhaWxlZCgyKTogIik7IGVycm9yXyRwcmludChzdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxz ZQotI2lmZGVmIEJTRDQ0CQkJCS8qIDQuNCBCU0QgKi8KLSAgICBuID0gRlJFQUQ7ICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBTcGVjaWZ5IHJlYWQgcXVldWUgKi8KLSAgICBkZWJ1ZyhGMTAw LCJ0dGZsdWkgQlNENDQiLCIiLDApOwotICAgIGlvY3RsKGZkLFRJT0NGTFVTSCwmbik7Ci0jZWxz ZQotI2lmZGVmIFBsYW45Ci0jdW5kZWYgUE9TSVgJCQkJLyogVWggb2guLi4gKi8KLSNlbmRpZiAv KiBQbGFuOSAqLwotI2lmZGVmIFBPU0lYCQkJCS8qIFBPU0lYICovCi0gICAgZGVidWcoRjEwMCwi dHRmbHVpIFBPU0lYIiwiIiwwKTsKLSAgICB0Y2ZsdXNoKGZkLFRDSUZMVVNIKTsKLSNlbHNlCi0j aWZkZWYgQVRUU1YJCQkJLyogU3lzdGVtIFYgKi8KLSNpZm5kZWYgVlhWRQotICAgIGRlYnVnKEYx MDAsInR0Zmx1aSBBVFRTViIsIiIsMCk7Ci0gICAgaW9jdGwoZmQsVENGTFNILDApOwotI2VuZGlm IC8qIFZYVkUgKi8KLSNlbHNlCQkJCQkvKiBOb3QgQlNENDQsIFBPU0lYLCBvciBTeXMgViAqLwot I2lmZGVmIFRJT0NGTFVTSAkJCS8qIFRob3NlIHdpdGggVElPQ0ZMVVNIIGRlZmluZWQgKi8KLSNp ZmRlZiBBTllCU0QJCQkJLyogQmVya2VsZXkgKi8KLSAgICBuID0gRlJFQUQ7ICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBTcGVjaWZ5IHJlYWQgcXVldWUgKi8KLSAgICBkZWJ1ZyhGMTAwLCJ0 dGZsdWkgVElPQ0ZMVVNIIEFOWUJTRCIsIiIsMCk7Ci0gICAgaW9jdGwoZmQsVElPQ0ZMVVNILCZu KTsKLSNlbHNlCQkJCQkvKiBPdGhlcnMgKFY3LCBldGMpICovCi0gICAgZGVidWcoRjEwMCwidHRm bHVpIFRJT0NGTFVTSCIsIiIsMCk7Ci0gICAgaW9jdGwoZmQsVElPQ0ZMVVNILDApOwotI2VuZGlm IC8qIEFOWUJTRCAqLwotI2Vsc2UJCQkJCS8qIEFsbCBvdGhlcnMuLi4gKi8KLS8qCi0gIE5vIHN5 c3RlbSBjYWxsICh0aGF0IHdlIGtub3cgYWJvdXQpIGZvciBpbnB1dCBidWZmZXIgZmx1c2hpbmcu Ci0gIFNvIHNlZSBob3cgbWFueSB0aGVyZSBhcmUgYW5kIHJlYWQgdGhlbSBpbiBhIGxvb3AsIHVz aW5nIHR0aW5jKCkuCi0gIHR0aW5jKCkgaXMgYnVmZmVyZWQsIHNvIHdlJ3JlIG5vdCBnZXR0aW5n IGNoYXJnZWQgd2l0aCBhIHN5c3RlbSBjYWxsCi0gIHBlciBjaGFyYWN0ZXIsIGp1c3QgYSBmdW5j dGlvbiBjYWxsLgotKi8KLSAgICBpZiAoKG4gPSB0dGNoaygpKSA+IDApIHsKLQlkZWJ1ZyhGMTAx LCJ0dGZsdWkgcmVhZCBsb29wIiwiIixuKTsKLQl3aGlsZSAoKG4tLSkgJiYgdHRpbmMoMCkgPiAw KSA7Ci0gICAgfQotI2VuZGlmIC8qIFRJT0NGTFVTSCAqLwotI2VuZGlmIC8qIEFUVFNWICovCi0j ZW5kaWYgLyogUE9TSVggKi8KLSNpZmRlZiBQbGFuOQotI2RlZmluZSBQT1NJWAotI2VuZGlmIC8q IFBsYW45ICovCi0jZW5kaWYgLyogQlNENDQgKi8KLSNlbmRpZiAvKiBhZWdpcyAqLwotICAgIHJl dHVybigwKTsKLX0KLQotaW50Ci10dGZsdW8oKSB7CQkJCS8qIEZsdXNoIG91dHB1dCBidWZmZXIg Ki8KLSAgICBpbnQgZmQ7Ci0jaWZkZWYgTkVUQ01ECi0gICAgaWYgKHR0cGlwZSkKLSAgICAgIGZk ID0gZmRvdXQ7Ci0gICAgZWxzZQotI2VuZGlmIC8qIE5FVENNRCAqLwotICAgICAgZmQgPSB0dHlm ZDsKLQotI2lmZGVmIFBsYW45Ci0gICAgcmV0dXJuIDA7Ci0jZWxzZQotI2lmZGVmIFBPU0lYCi0g ICAgcmV0dXJuKHRjZmx1c2goZmQsVENPRkxVU0gpKTsKLSNlbHNlCi0jaWZkZWYgT1hPUwotICAg IHJldHVybihpb2N0bChmZCxUQ0ZMU0gsMSkpOwotI2Vsc2UKLSAgICByZXR1cm4oMCk7CQkJCS8q IEFsbCBvdGhlcnMsIG5vdGhpbmcgKi8KLSNlbmRpZiAvKiBPWE9TICovCi0jZW5kaWYgLyogUE9T SVggKi8KLSNlbmRpZiAvKiBQbGFuOSAqLwotfQotCi0vKiBJbnRlcnJ1cHQgRnVuY3Rpb25zICov Ci0KLS8qIFNldCB1cCB0ZXJtaW5hbCBpbnRlcnJ1cHRzIG9uIGNvbnNvbGUgdGVybWluYWwgKi8K LQotI2lmbmRlZiBGSU9OUkVBRAkJCS8qIFdlIGRvbid0IG5lZWQgZXNjdHJwKCkgKi8KLSNpZm5k ZWYgU0VMRUNUCQkJCS8qIGlmIHdlIGhhdmUgYW55IG9mIHRoZXNlLi4uICovCi0jaWZuZGVmIENL X1BPTEwKLSNpZm5kZWYgUkRDSEsKLQotI2lmbmRlZiBPWE9TCi0jaWZkZWYgU1ZPUlBPU0lYCi1T SUdUWVAKLWVzY3RycChmb28pIGludCBmb287IHsJCQkvKiB0cmFwIGNvbnNvbGUgZXNjYXBlcyAo XlwpICovCi0gICAgc2lnbmFsKFNJR1FVSVQsU0lHX0lHTik7ICAgICAgICAgICAgLyogaWdub3Jl IHVudGlsIHRyYXBwZWQgKi8KLSAgICBjb25lc2MgPSAxOwotICAgIGRlYnVnKEYxMDEsImVzY3Ry cCBjYXVnaHQgU0lHUVVJVCIsIiIsY29uZXNjKTsKLX0KLSNlbmRpZiAvKiBTVk9SUE9TSVggKi8K LSNlbmRpZiAvKiBPWE9TICovCi0KLSNpZmRlZiBWNwotI2lmbmRlZiBNSU5JWDIKLVNJR1RZUAot ZXNjdHJwKGZvbykgaW50IGZvbzsgewkJCS8qIHRyYXAgY29uc29sZSBlc2NhcGVzICheXCkgKi8K LSAgICBzaWduYWwoU0lHUVVJVCxTSUdfSUdOKTsgICAgICAgICAgICAvKiBpZ25vcmUgdW50aWwg dHJhcHBlZCAqLwotICAgIGNvbmVzYyA9IDE7Ci0gICAgZGVidWcoRjEwMSwiZXNjdHJwIGNhdWdo dCBTSUdRVUlUIiwiIixjb25lc2MpOwotfQotI2VuZGlmIC8qIE1JTklYMiAqLwotI2VuZGlmIC8q IFY3ICovCi0KLSNpZmRlZiBDNzAKLVNJR1RZUAotZXNjdHJwKGZvbykgaW50IGZvbzsgewkJCS8q IHRyYXAgY29uc29sZSBlc2NhcGVzICheXCkgKi8KLSAgICBjb25lc2MgPSAxOwotICAgIHNpZ25h bChTSUdRVUlULFNJR19JR04pOyAgICAgICAgICAgIC8qIGlnbm9yZSB1bnRpbCB0cmFwcGVkICov Ci19Ci0jZW5kaWYgLyogQzcwICovCi0KLSNlbmRpZiAvKiBSRENISyAqLwotI2VuZGlmIC8qIENL X1BPTEwgKi8KLSNlbmRpZiAvKiBTRUxFQ1QgKi8KLSNlbmRpZiAvKiBGSU9OUkVBRCAqLwotCi0v KiAgQyBPIE4gQiBHIFQgIC0tICBCYWNrZ3JvdW5kIFRlc3QgICovCi0KLXN0YXRpYyBpbnQgamMg PSAwOwkJCS8qIDAgPSBubyBqb2IgY29udHJvbCAqLwotCi0vKgotICBDYWxsIHdpdGggZmxhZyA9 PSAxIHRvIHByZXZlbnQgc2lnbmFsIHRlc3QsIHdoaWNoIGNhbiBub3QgYmUgZXhwZWN0ZWQKLSAg dG8gd29yayBkdXJpbmcgZmlsZSB0cmFuc2Zlciwgd2hlbiBTSUdJTlQgcHJvYmFibHkgKmlzKiBz ZXQgdG8gU0lHX0lHTi4KLQotICBDYWxsIHdpdGggZmxhZyA9PSAwIHRvIHVzZSB0aGUgc2lnbmFs IHRlc3QsIGJ1dCBvbmx5IGlmIHRoZSBwcm9jZXNzLWdyb3VwCi0gIHRlc3QgZmFpbHMsIGFzIGl0 IGRvZXMgb24gc29tZSBVTklYIHN5c3RlbXMsIHdoZXJlIGdldHBncnAoKSBpcyBidWdneSwKLSAg cmVxdWlyZXMgYW4gYXJndW1lbnQgd2hlbiB0aGUgbWFuIHBhZ2Ugc2F5cyBpdCBkb2Vzbid0LCBv ciB2aWNlIHZlcnNhLgotCi0gIElmIGZsYWcgPT0gMCBhbmQgdGhlIHByb2Nlc3MtZ3JvdXAgdGVz dCBmYWlscywgdGhlbiB3ZSBkZXRlcm1pbmUgYmFja2dyb3VuZAotICBzdGF0dXMgc2ltcGx5IChi dXQgbm90IG5lY2Vzc2FyaWx5IHJlbGlhYmx5KSBmcm9tIGlzYXR0eSgpLgotCi0gIGNvbmJndCgp IHNldHMgdGhlIGdsb2JhbCBiYWNrZ3JkID0gMSBpZiB3ZSBhcHBlYXIgdG8gYmUgaW4gdGhlIGJh Y2tncm91bmQsCi0gIGFuZCB0byAwIGlmIHdlIHNlZW0gdG8gYmUgaW4gdGhlIGZvcmVncm91bmQu ICBjb25iZ3QoKSBpcyBoaWdobHkgcHJvbmUgdG8KLSAgbWlzYmVoYXZpb3IuCi0qLwotVk9JRAot Y29uYmd0KGZsYWcpIGludCBmbGFnOyB7Ci0gICAgaW50IHggPSAtMSwJCQkJLyogcHJvY2VzcyBn cm91cCBvciBTSUdJTlQgdGVzdCAqLwotICAgICAgICB5ID0gMDsJCQkJLyogaXNhdHR5KCkgdGVz dCAqLwotLyoKLSAgQ2hlY2sgZm9yIGJhY2tncm91bmQgb3BlcmF0aW9uLCBldmVuIGlmIG5vdCBy dW5uaW5nIG9uIHJlYWwgdHR5LCBzbyB0aGF0Ci0gIGJhY2tncm91bmQgZmxhZyBjYW4gYmUgc2V0 IGNvcnJlY3RseS4gIElmIGJhY2tncm91bmQgc3RhdHVzIGlzIGRldGVjdGVkLAotICB0aGVuIEtl cm1pdCB3aWxsIG5vdCBpc3N1ZSBpdHMgaW50ZXJhY3RpdmUgcHJvbXB0IG9yIG1vc3QgbWVzc2Fn ZXMuCi0gIElmIHlvdXIgcHJvbXB0IGdvZXMgYXdheSwgeW91IGNhbiBibGFtZSAoYW5kIGZpeD8p IHRoaXMgZnVuY3Rpb24uCi0qLwotCi0vKiBVc2UgcHJvY2Vzcy1ncm91cCB0ZXN0IGlmIHBvc3Np YmxlLiAqLwotCi0jaWZkZWYgUE9TSVgJCQkJLyogV2UgY2FuIGRvIGl0IGluIFBPU0lYICovCi0j ZGVmaW5lIFBHUk9VUF9UCi0jZWxzZQotI2lmZGVmIEJTRDQJCQkJLyogYW5kIGluIEJTRCA0Lngu ICovCi0jZGVmaW5lIFBHUk9VUF9UCi0jZWxzZQotI2lmZGVmIEhQVVhKT0JDVEwJCQkvKiBhbmQg aW4gbW9zdCBIUC1VWCdzICovCi0jZGVmaW5lIFBHUk9VUF9UCi0jZWxzZQotI2lmZGVmIFRJT0NH UEdSUAkJCS8qIGFuZCBhbnlwbGFjZSB0aGF0IGhhcyB0aGlzIGlvY3RsLiAqLwotI2RlZmluZSBQ R1JPVVBfVAotI2VuZGlmIC8qIFRJT0NHUEdSUCAqLwotI2VuZGlmIC8qIEhQVVhKT0JDVEwgKi8K LSNlbmRpZiAvKiBCU0Q0ICovCi0jZW5kaWYgLyogUE9TSVggKi8KLQotI2lmZGVmIE1JUFMJCQkJ LyogRXhjZXB0IGlmIGl0IGRvZXNuJ3Qgd29yay4uLiAqLwotI3VuZGVmIFBHUk9VUF9UCi0jZW5k aWYgLyogTUlQUyAqLwotCi0jaWZkZWYgTUlOSVgKLSN1bmRlZiBQR1JPVVBfVAotI2VuZGlmCS8q IE1JTklYICovCi0KLSNpZmRlZiBQR1JPVVBfVAotLyoKLSAgU2VtaS1yZWxpYWJsZSBwcm9jZXNz LWdyb3VwIHRlc3QuICBDaGVjayB3aGV0aGVyIHRoaXMgcHJvY2VzcydzIGdyb3VwIGlzCi0gIHRo ZSBzYW1lIGFzIHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbCdzIHByb2Nlc3MgZ3JvdXAuICBUaGlz IHdvcmtzIGlmIHRoZQotICBnZXRwZ3JwKCkgY2FsbCBkb2Vzbid0IGxpZSAoYXMgaXQgZG9lcyBp biB0aGUgU1VOT1MgU3lzdGVtIFYgZW52aXJvbm1lbnQpLgotKi8KLSAgICBQSURfVCBteXBncnAg PSAoUElEX1QpMDsJCS8qIEtlcm1pdCdzIHByb2Nlc3MgZ3JvdXAgKi8KLSAgICBQSURfVCBjdHBn cnAgPSAoUElEX1QpMDsJCS8qIFRoZSB0ZXJtaW5hbCdzIHByb2Nlc3MgZ3JvdXAgKi8KLSNpZm5k ZWYgX1BPU0lYX1NPVVJDRQotLyoKLSAgVGhlIGdldHBncnAoKSBwcm90b3R5cGUgaXMgb2J0YWlu ZWQgZnJvbSBzeXN0ZW0gaGVhZGVyIGZpbGVzIGZvciBQT1NJWAotICBhbmQgU3lzIFYgUjQgY29t cGlsYXRpb25zLiAgT3RoZXIgc3lzdGVtcywgd2hvIGtub3dzLiAgU29tZSBjb21wbGFpbiBhYm91 dAotICBhIGR1cGxpY2F0ZSBkZWNsYXJhdGlvbiBoZXJlLCBvdGhlcnMgZG9uJ3QsIHNvIGl0J3Mg c2FmZXIgdG8gbGVhdmUgaXQgaW4KLSAgaWYgd2UgZG9uJ3Qga25vdyBmb3IgY2VydGFpbi4KLSov Ci0jaWZuZGVmIFNWUjQKLSNpZm5kZWYgUFMyQUlYMTAKLSNpZm5kZWYgSFBVWDkKLSAgICBleHRl cm4gUElEX1QgZ2V0cGdycCgpOwotI2VuZGlmIC8qIEhQVVg5ICovCi0jZW5kaWYgLyogUFMyQUlY MTAgKi8KLSNlbmRpZiAvKiBTVlI0ICovCi0jZW5kaWYgLyogX1BPU0lYX1NPVVJDRSAqLwotCi0v KiBHZXQgbXkgcHJvY2VzcyBncm91cC4gKi8KLQotI2lmZGVmIFNWUjMgLyogTWF5YmUgdGhpcyBz aG91bGQgYmUgQVRUU1Y/ICovCi0vKiBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBkZXNjcmliZWQgaW4g U1ZJRCBSMiAqLwotICAgIG15cGdycCA9IGdldHBncnAoKTsKLSAgICAvKiBkZWJ1ZyhGMTAxLCJB VFRTViBjb25iZ3QgcHJvY2VzcyBncm91cCIsIiIsKGludCkgbXlwZ3JwKTsgKi8KLSNlbHNlCi0j aWZkZWYgUE9TSVgKLSAgICBteXBncnAgPSBnZXRwZ3JwKCk7Ci0gICAgLyogZGVidWcoRjEwMSwi UE9TSVggY29uYmd0IHByb2Nlc3MgZ3JvdXAiLCIiLChpbnQpIG15cGdycCk7ICovCi0jZWxzZQot I2lmZGVmIE9TRlBDCi0gICAgbXlwZ3JwID0gZ2V0cGdycCgpOwotICAgIC8qIGRlYnVnKEYxMDEs Ik9TRiBjb25iZ3QgcHJvY2VzcyBncm91cCIsIiIsKGludCkgbXlwZ3JwKTsgKi8KLSNlbHNlCi0j aWZkZWYgUU5YCi0gICAgbXlwZ3JwID0gZ2V0cGdycCgpOwotICAgIC8qIGRlYnVnKEYxMDEsIlFO WCBjb25iZ3QgcHJvY2VzcyBncm91cCIsIiIsKGludCkgbXlwZ3JwKTsgKi8KLSNlbHNlCi0jaWZk ZWYgT1NGMzIJCQkJLyogKHdhcyBPU0Y0MCkgKi8KLSAgICBteXBncnAgPSBnZXRwZ3JwKCk7Ci0g ICAgLyogZGVidWcoRjEwMSwiRGlnaXRhbCBVTklYIGNvbmJndCBwcm9jZXNzIGdyb3VwIiwiIiwo aW50KSBteXBncnApOyAqLwotI2Vsc2UgLyogQlNELCBWNywgZXRjICovCi0jaWZkZWYgTUlOSVgy Ci0gICAgbXlwZ3JwID0gZ2V0cGdycCgpOwotI2Vsc2UKLSAgICBteXBncnAgPSBnZXRwZ3JwKDAp OwotI2VuZGlmIC8qIE1JTklYMiAqLwotICAgIC8qIGRlYnVnKEYxMDEsIkJTRCBjb25iZ3QgcHJv Y2VzcyBncm91cCIsIiIsKGludCkgbXlwZ3JwKTsgKi8KLSNlbmRpZiAvKiBPU0YzMiAqLwotI2Vu ZGlmIC8qIFFOWCAqLwotI2VuZGlmIC8qIE9TRlBDICovCi0jZW5kaWYgLyogUE9TSVggKi8KLSNl bmRpZiAvKiBTVlIzICovCi0KLSNpZmRlZiBNSU5JWAotICAgIC8qIE1JTklYIGRvZXMgbm90IHN1 cHBvcnQgam9iIGNvbnRyb2wgc28gS2VybWl0IGlzIGFsd2F5cyBpbiBmb3JlZ3JvdW5kICovCi0g ICAgeCA9IDA7Ci0KLSNlbHNlICAvKiBOb3QgTUlOSVggKi8KLQotLyogTm93IGdldCBjb250cm9s bGluZyB0dHkncyBwcm9jZXNzIGdyb3VwICovCi0jaWZkZWYgQlNENDRPUlBPU0lYCi0gICAgY3Rw Z3JwID0gdGNnZXRwZ3JwKDEpOwkJLyogVGhlIFBPU0lYIHdheSAqLwotICAgIC8qIGRlYnVnKEYx MDEsIlBPU0lYIGNvbmJndCB0ZXJtaW5hbCBwcm9jZXNzIGdyb3VwIiwiIiwoaW50KSBjdHBncnAp OyAqLwotI2Vsc2UKLSAgICBpb2N0bCgxLCBUSU9DR1BHUlAsICZjdHBncnApOwkvKiBPciB0aGUg QlNEIHdheSAqLwotICAgLyogZGVidWcoRjEwMSwibm9uLVBPU0lYIGNvbmJndCB0ZXJtaW5hbCBw cm9jZXNzIGdyb3VwIiwiIiwoaW50KSBjdHBncnApOyAqLwotI2VuZGlmIC8qIEJTRDQ0T1JQT1NJ WCAqLwotCi0gICAgaWYgKChteXBncnAgPiAoUElEX1QpIDApICYmIChjdHBncnAgPiAoUElEX1Qp IDApKQotICAgICAgeCA9IChteXBncnAgPT0gY3RwZ3JwKSA/IDAgOiAxOwkvKiBJZiB0aGV5IGRp ZmZlciwgdGhlbiBiYWNrZ3JvdW5kLiAqLwotICAgIGVsc2UgeCA9IC0xOwkJCS8qIElmIGVycm9y LCByZW1lbWJlci4gKi8KLSAgICBkZWJ1ZyhGMTAxLCJjb25iZ3QgcHJvY2VzcyBncm91cCB0ZXN0 IiwiIix4KTsKLSNlbmRpZiAvKiBQR1JPVVBfVCAqLwotI2VuZGlmCS8qIE1JTklYICovCi0KLS8q IFRyeSB0byBzZWUgaWYgam9iIGNvbnRyb2wgaXMgYXZhaWxhYmxlICovCi0KLSNpZmRlZiBOT0pD CQkJCS8qIFVzZXIgb3ZlcnJpZGUgKi8KLSAgICBqYyA9IDA7CQkJCS8qIE5vIGpvYiBjb250cm9s IGFsbG93ZWQgKi8KLSAgICBkZWJ1ZyhGMTExLCJOT0pDIiwiamMiLGpjKTsKLSNlbHNlCi0jaWZk ZWYgQlNENDQKLSAgICBqYyA9IDE7Ci0jZWxzZQotI2lmZGVmIFNWUjRPUlBPU0lYCQkJLyogUE9T SVggYWN0dWFsbHkgdGVsbHMgdXMgKi8KLSAgICBkZWJ1ZyhGMTAwLCJTVlI0T1JQT1NJWCBqYyB0 ZXN0Li4uIiwiIiwwKTsKLSNpZmRlZiBfU0NfSk9CX0NPTlRST0wKLSNpZmRlZiBfX2JzZGlfXwot ICAgIGpjID0gMTsKLSNlbHNlCi0jaWZkZWYgX18zODZCU0RfXwotICAgIGpjID0gMTsKLSNlbHNl Ci0gICAgamMgPSBzeXNjb25mKF9TQ19KT0JfQ09OVFJPTCk7CS8qIFdoYXRldmVyIHN5c3RlbSBz YXlzICovCi0gICAgaWYgKGpjIDwgMCkgewotCWRlYnVnKEYxMDEsInN5c2NvbmYgZmFpbHMsIGpj c2hlbGwiLCIiLGpjc2hlbGwpOwotCWpjID0gKGpjaGRsciA9PSBTSUdfREZMKSA/IDEgOiAwOwot ICAgIH0gZWxzZQotICAgICAgZGVidWcoRjExMSwic3lzY29uZihfU0NfSk9CX0NPTlRST0wpIiwi amMiLGpjKTsKLSNlbmRpZiAvKiBfXzM4NkJTRF9fICovCi0jZW5kaWYgLyogX19ic2RpX18gKi8K LSNlbHNlCi0jaWZkZWYgX1BPU0lYX0pPQl9DT05UUk9MCi0gICAgamMgPSAxOwkJCQkvKiBCeSBk ZWZpbml0aW9uICovCi0gICAgZGVidWcoRjExMSwiX1BPU0lYX0pPQl9DT05UUk9MIGlzIGRlZmlu ZWQiLCJqYyIsamMpOwotI2Vsc2UKLSAgICBqYyA9IDA7CQkJCS8qIEFzc3VtZSBqb2IgY29udHJv bCBub3QgYWxsb3dlZCAqLwotICAgIGRlYnVnKEYxMTEsIlNWUjRPUlBPU0lYIF9TQy9QT1NJWF9K T0JfQ09OVFJPTCBub3QgZGVmaW5lZCIsImpjIixqYyk7Ci0jZW5kaWYgLyogX1BPU0lYX0pPQl9D T05UUk9MICovCi0jZW5kaWYgLyogX1NDX0pPQl9DT05UUk9MICovCi0jZWxzZQotI2lmZGVmIEJT RDQKLSAgICBqYyA9IDE7CQkJCS8qIEpvYiBjb250cm9sIGFsbG93ZWQgKi8KLSAgICBkZWJ1ZyhG MTExLCJCU0Qgam9iIGNvbnRyb2wiLCJqYyIsamMpOwotI2Vsc2UKLSNpZmRlZiBTVlIzSkMKLSAg ICBqYyA9IDE7CQkJCS8qIEpDIGFsbG93ZWQgKi8KLSAgICBkZWJ1ZyhGMTExLCJTVlIzIGpvYiBj b250cm9sIiwiamMiLGpjKTsKLSNlbHNlCi0jaWZkZWYgT1hPUwotICAgIGpjID0gMTsJCQkJLyog SkMgYWxsb3dlZCAqLwotICAgIGRlYnVnKEYxMTEsIlgvT1Mgam9iIGNvbnRyb2wiLCJqYyIsamMp OwotI2Vsc2UKLSNpZmRlZiBIUFVYOQotICAgIGpjID0gMTsJCQkJLyogSkMgYWxsb3dlZCAqLwot ICAgIGRlYnVnKEYxMTEsIkhQLVVYIDkuMCBqb2IgY29udHJvbCIsImpjIixqYyk7Ci0jZWxzZQot I2lmZGVmIEhQVVgxMAotICAgIGpjID0gMTsJCQkJLyogSkMgYWxsb3dlZCAqLwotICAgIGRlYnVn KEYxMTEsIkhQLVVYIDEwLjAgam9iIGNvbnRyb2wiLCJqYyIsamMpOwotI2Vsc2UKLSAgICBqYyA9 IDA7CQkJCS8qIEpDIG5vdCBhbGxvd2VkICovCi0gICAgZGVidWcoRjExMSwiam9iIGNvbnRyb2wg Y2F0Y2gtYWxsIiwiamMiLGpjKTsKLSNlbmRpZiAvKiBIUFVYMTAgKi8KLSNlbmRpZiAvKiBIUFVY OSAqLwotI2VuZGlmIC8qIE9YT1MgKi8KLSNlbmRpZiAvKiBTVlIzSkMgKi8KLSNlbmRpZiAvKiBC U0Q0ICovCi0jZW5kaWYgLyogU1ZSNE9SUE9TSVggKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2Vu ZGlmIC8qIE5PSkMgKi8KLSAgICBkZWJ1ZyhGMTAxLCJjb25iZ3QgamMiLCIiLGpjKTsKLSNpZm5k ZWYgTk9KQwotICAgIGRlYnVnKEYxMDEsImNvbmJndCBqY3NoZWxsIiwiIixqY3NoZWxsKTsKLS8q Ci0gIEF0IHRoaXMgcG9pbnQsIGlmIGpjID09IDEgYnV0IGpjc2hlbGwgPT0gMCwgaXQgbWVhbnMg dGhhdCB0aGUgT1Mgc3VwcG9ydHMKLSAgam9iIGNvbnRyb2wsIGJ1dCB0aGUgc2hlbGwgb3Igb3Ro ZXIgcHJvY2VzcyB3ZSBhcmUgcnVubmluZyB1bmRlciBkb2VzIG5vdAotICAoamNzaGVsbCBpcyBz ZXQgaW4gc3lzaW5pdCgpKSBhbmQgc28gaWYgd2Ugc3VzcGVuZCBvdXJzZWx2ZXMsIG5vdGhpbmcg Z29vZAotICB3aWxsIGNvbWUgb2YgaXQuICBTby4uLgotKi8KLSAgICBpZiAoamMgPCAwKSBqYyA9 IDA7Ci0gICAgaWYgKGpjID4gMCAmJiBqY3NoZWxsID09IDApIGpjID0gMDsKLSNlbmRpZiAvKiBO T0pDICovCi0KLS8qCi0gIEFub3RoZXIgYmFja2dyb3VuZCB0ZXN0LgotICBUZXN0IGlmIFNJR0lO VCAodGVybWluYWwgaW50ZXJydXB0KSBpcyBzZXQgdG8gU0lHX0lHTiAoaWdub3JlKSwKLSAgd2hp Y2ggaXMgZG9uZSBieSB0aGUgc2hlbGwgKHNoKSBpZiB0aGUgcHJvZ3JhbSBpcyBzdGFydGVkIHdp dGggJyYnLgotICBVbmZvcnR1bmF0ZWx5LCB0aGlzIGlzIE5PVCBkb25lIGJ5IGNzaCBvciBrc2gg c28gd2F0Y2ggb3V0IQotICBOb3RlLCBpdCdzIHNhZmUgdG8gc2V0IFNJR0lOVCB0byBTSUdfSUdO IGhlcmUsIGJlY2F1c2UgZnVydGhlciBkb3duCi0gIHdlIGFsd2F5cyBzZXQgaXQgdG8gc29tZXRo aW5nIGVsc2UuCi0gIE5vdGU6IGFzIG9mIDE2IEp1bCAxOTk5LCB3ZSBhbHNvIHNraXAgdGhpcyB0 ZXN0IGlmIHdlIHNldCBTSUdJTlQgdG8KLSAgU0lHX0lHTiBvdXJzZWx2ZXMuCi0qLwotICAgIGlm ICh4IDwgMCAmJiAhZmxhZyAmJiAhc2lnaW50X2lnbikgeyAvKiBEaWRuJ3QgZ2V0IGdvb2QgcmVz dWx0cyBhYm92ZS4uLiAqLwotCi0JU0lHVFlQICgqb3NpZ2ludCkoKTsKLQotCW9zaWdpbnQgPSBz aWduYWwoU0lHSU5ULFNJR19JR04pOwkvKiBXaGF0IGlzIFNJR0lOVCBzZXQgdG8/ICovCi0Jc2ln aW50X2lnbiA9IDE7Ci0JeCA9IChvc2lnaW50ID09IFNJR19JR04pID8gMSA6IDA7CS8qIFNJR19J R04/ICovCi0JLyogZGVidWcoRjEwMSwiY29uYmd0IG9zaWdpbnQiLCIiLG9zaWdpbnQpOyAqLwot CS8qIGRlYnVnKEYxMDEsImNvbmJndCBzaWduYWwgdGVzdCIsIiIseCk7ICovCi0gICAgfQotCi0v KiBBbHNvIGNoZWNrIHRvIHNlZSBpZiB3ZSdyZSBydW5uaW5nIHdpdGggcmVkaXJlY3RlZCBzdGRp by4gKi8KLS8qIFRoaXMgaXMgbm90IHJlYWxseSBiYWNrZ3JvdW5kIG9wZXJhdGlvbiwgYnV0IHdl IHdhbnQgdG8gYWN0IGFzIHRob3VnaCAqLwotLyogaXQgd2VyZS4gKi8KLQotI2lmZGVmIElLU0QK LSAgICBpZiAoaW5zZXJ2ZXIpIHsJCQkvKiBJbnRlcm5ldCBLZXJtaXQgU2VydmVyICovCi0JYmFj a2dyZCA9IDA7CQkJLyogaXMgbm90IGluIHRoZSBiYWNrZ3JvdW5kICovCi0JcmV0dXJuOwotICAg IH0KLSNlbmRpZiAvKiBJS1NEICovCi0KLSAgICB5ID0gKGlzYXR0eSgwKSAmJiBpc2F0dHkoMSkp ID8gMSA6IDA7Ci0gICAgZGVidWcoRjEwMSwiY29uYmd0IGlzYXR0eSB0ZXN0IiwiIix5KTsKLQot I2lmZGVmIEJTRDI5Ci0vKiBUaGUgcHJvY2VzcyBncm91cCBhbmQvb3Igc2lnbmFsIHRlc3QgZG9l c24ndCB3b3JrIHVuZGVyIHRoZXNlLi4uICovCi0gICAgYmFja2dyZCA9ICF5OwotI2Vsc2UKLSNp ZmRlZiBzeGFFNTAKLSAgICBiYWNrZ3JkID0gIXk7Ci0jZWxzZQotI2lmZGVmIE1JTklYCi0gICAg YmFja2dyZCA9ICF5OwotI2Vsc2UKLSNpZmRlZiBNSU5JWDIKLSAgICBiYWNrZ3JkID0gIXk7Ci0j ZWxzZQotICAgIGlmICh4ID4gLTEpCi0gICAgICBiYWNrZ3JkID0gKHggfHwgIXkpID8gMSA6IDA7 Ci0gICAgZWxzZSBiYWNrZ3JkID0gIXk7Ci0jZW5kaWYgLyogQlNEMjkgKi8KLSNlbmRpZiAvKiBz eGFFNTAgKi8KLSNlbmRpZiAvKiBNSU5JWCAqLwotI2VuZGlmIC8qIE1JTklYMiAqLwotICAgIGRl YnVnKEYxMDEsImNvbmJndCBiYWNrZ3JkIiwiIixiYWNrZ3JkKTsKLX0KLQotLyogIEMgTyBOIEkg TiBUICAtLSAgQ29uc29sZSBJbnRlcnJ1cHQgc2V0dGVyICAqLwotCi0vKgotICBGaXJzdCBhcmcg aXMgcG9pbnRlciB0byBmdW5jdGlvbiB0byBoYW5kbGUgU0lHVEVSTSAmIFNJR0lOVCAobGlrZSBD dHJsLUMpLgotICBTZWNvbmQgYXJnIGlzIHBvaW50ZXIgdG8gZnVuY3Rpb24gdG8gaGFuZGxlIFNJ R1RTVFAgKHN1c3BlbmQpLgotKi8KLQotVk9JRAkJCQkJLyogU2V0IHRlcm1pbmFsIGludGVycnVw dCB0cmFwcy4gKi8KLSNpZmRlZiBDS19BTlNJQwotI2lmZGVmIGFwb2xsbwotY29uaW50KGYscykg U0lHVFlQICgqZikoKSwgKCpzKSgpOwotI2Vsc2UKLWNvbmludChTSUdUWVAgKCpmKShpbnQpLCBT SUdUWVAgKCpzKShpbnQpKQotI2VuZGlmIC8qIGFwb2xsbyAqLwotI2Vsc2UKLWNvbmludChmLHMp IFNJR1RZUCAoKmYpKCksICgqcykoKTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogY29uaW50 ICovIHsKLQotICAgIGRlYnVnKEYxMDEsImNvbmludCBjb25pc3RhdGUiLCIiLGNvbmlzdGF0ZSk7 Ci0KLSAgICBjb25iZ3QoMCk7CQkJCS8qIERvIGJhY2tncm91bmQgdGVzdC4gKi8KLQotLyogU2V0 IHRoZSBkZXNpcmVkIGhhbmRsZXJzIGZvciBoYW5ndXAgYW5kIHNvZnR3YXJlIHRlcm1pbmF0aW9u LiAqLwotCi0jaWZkZWYgU0lHVEVSTQotICAgIHNpZ25hbChTSUdURVJNLGYpOyAgICAgICAgICAg ICAgICAgIC8qIFNvZnR3YXJlIHRlcm1pbmF0aW9uICovCi0jZW5kaWYgLyogU0lHVEVSTSAqLwot Ci0vKgotICBQcmlvciB0byBKdWx5IDE5OTkgd2UgdXNlZCB0byBjYWxsIHNpZ2h1cCgpIGhlcmUg YnV0IG5vdyBpdCdzIGNhbGxlZCBpbgotICBzeXNpbml0KCkgc28gU0lHSFVQIGNhbiBiZSBjYXVn aHQgZHVyaW5nIGV4ZWN1dGlvbiBvZiB0aGUgaW5pdCBmaWxlIG9yCi0gIGEga2VyYmFuZyBzY3Jp cHQuCi0qLwotCi0vKiBOb3cgaGFuZGxlIGtleWJvYXJkIHN0b3AsIHF1aXQsIGFuZCBpbnRlcnJ1 cHQgc2lnbmFscy4gKi8KLS8qIENoZWNrIGlmIGludm9rZWQgaW4gYmFja2dyb3VuZCAtLSBpZiBz byBzaWduYWxzIHNldCB0byBiZSBpZ25vcmVkLiAqLwotLyogSG93ZXZlciwgaWYgcnVubmluZyB1 bmRlciBhIGpvYiBjb250cm9sIHNoZWxsLCBkb24ndCBpZ25vcmUgdGhlbS4gKi8KLS8qIFdlIHdv bid0IGJlIGdldHRpbmcgYW55LCBhcyB3ZSBhcmVuJ3QgaW4gdGhlIHRlcm1pbmFsJ3MgcHJvY2Vz cyBncm91cC4gKi8KLQotICAgIGRlYnVnKEYxMDEsImNvbmludCBiYWNrZ3JkIiwiIixiYWNrZ3Jk KTsKLSAgICBkZWJ1ZyhGMTAxLCJjb25pbnQgamMiLCIiLGpjKTsKLQotICAgIGlmIChiYWNrZ3Jk ICYmICFqYykgewkJLyogSW4gYmFja2dyb3VuZCwgaWdub3JlIHNpZ25hbHMgKi8KLQlkZWJ1ZyhG MTAxLCJjb25pbnQgYmFja2dyb3VuZCBpZ25vcmluZyBzaWduYWxzLCBqYyIsIiIsamMpOwotI2lm ZGVmIFNJR1RTVFAKLSAgICAgICAgc2lnbmFsKFNJR1RTVFAsU0lHX0lHTik7ICAgICAgICAvKiBL ZXlib2FyZCBzdG9wICovCi0jZW5kaWYgLyogU0lHVFNUUCAqLwotICAgICAgICBzaWduYWwoU0lH UVVJVCxTSUdfSUdOKTsgICAgICAgIC8qIEtleWJvYXJkIHF1aXQgKi8KLSAgICAgICAgc2lnbmFs KFNJR0lOVCxTSUdfSUdOKTsgICAgICAgICAvKiBLZXlib2FyZCBpbnRlcnJ1cHQgKi8KLQlzaWdp bnRfaWduID0gMTsKLQljb25pc3RhdGUgPSBDT05JX05PSTsKLSAgICB9IGVsc2UgewkJCQkvKiBF bHNlIGluIGZvcmVncm91bmQgb3Igc3VzcGVuZGVkICovCi0JZGVidWcoRjEwMSwiY29uaW50IGZv cmVncm91bmQgY2F0Y2hpbmcgc2lnbmFscywgamMiLCIiLGpjKTsKLSAgICAgICAgc2lnbmFsKFNJ R0lOVCxmKTsgICAgICAgICAgICAgICAvKiBDYXRjaCB0ZXJtaW5hbCBpbnRlcnJ1cHQgKi8KLQlz aWdpbnRfaWduID0gKGYgPT0gU0lHX0lHTikgPyAxIDogMDsKLQotI2lmZGVmIFNJR1RTVFAJCQkJ LyogS2V5Ym9hcmQgc3RvcCAoc3VzcGVuZCkgKi8KLQkvKiBkZWJ1ZyhGMTAxLCJjb25pbnQgU0lH U1RTVFAiLCIiLHMpOyAqLwotCWlmIChzID09IE5VTEwpIHMgPSBTSUdfREZMOwotI2lmZGVmIE5P SkMJCQkJLyogTm8gam9iIGNvbnRyb2wgYWxsb3dlZC4gKi8KLQlzaWduYWwoU0lHVFNUUCxTSUdf SUdOKTsKLSNlbHNlCQkJCQkvKiBKb2IgY29udHJvbCBhbGxvd2VkICovCi0JaWYgKGpjKQkJCQkv KiBpZiBhdmFpbGFibGUuICovCi0JICBzaWduYWwoU0lHVFNUUCxzKTsKLQllbHNlCi0JICBzaWdu YWwoU0lHVFNUUCxTSUdfSUdOKTsKLSNlbmRpZiAvKiBOT0pDICovCi0jZW5kaWYgLyogU0lHVFNU UCAqLwotCi0jaWZuZGVmIE9YT1MKLSNpZmRlZiBTVk9SUE9TSVgKLSNpZm5kZWYgRklPTlJFQUQJ CQkvKiBXYXRjaCBvdXQsIHdlIGRvbid0IGtub3cgdGhpcy4uLiAqLwotI2lmbmRlZiBTRUxFQ1QK LSNpZm5kZWYgQ0tfUE9MTAotI2lmbmRlZiBSRENISwotICAgICAgICBzaWduYWwoU0lHUVVJVCxl c2N0cnApOyAgICAgICAgIC8qIFF1aXQgc2lnbmFsLCBTeXMgSUlJL1YuICovCi0jZW5kaWYgLyog UkRDSEsgKi8KLSNlbmRpZiAvKiBDS19QT0xMICovCi0jZW5kaWYgLyogU0VMRUNUICovCi0jZW5k aWYgLyogRklPTlJFQUQgKi8KLSAgICAgICAgaWYgKGNvbmVzYykgY29uZXNjID0gMDsgICAgICAg ICAvKiBDbGVhciBvdXQgcGVuZGluZyBlc2NhcGVzICovCi0jZWxzZQotI2lmZGVmIFY3Ci0gICAg ICAgIHNpZ25hbChTSUdRVUlULGVzY3RycCk7ICAgICAgICAgLyogVjcgbGlrZSBTeXMgSUlJL1Yg Ki8KLSAgICAgICAgaWYgKGNvbmVzYykgY29uZXNjID0gMDsKLSNlbHNlCi0jaWZkZWYgYWVnaXMK LSAgICAgICAgc2lnbmFsKFNJR1FVSVQsZik7ICAgICAgICAgICAgICAvKiBBcG9sbG8sIGNhdGNo IGl0IGxpa2Ugb3RoZXJzLiAqLwotI2Vsc2UKLSAgICAgICAgc2lnbmFsKFNJR1FVSVQsU0lHX0lH Tik7ICAgICAgICAvKiBPdGhlcnMsIGlnbm9yZSBsaWtlIDREICYgZWFybGllci4gKi8KLSNlbmRp ZiAvKiBhZWdpcyAqLwotI2VuZGlmIC8qIFY3ICovCi0jZW5kaWYgLyogU1ZPUlBPU0lYICovCi0j ZW5kaWYgLyogT1hPUyAqLwotCWNvbmlzdGF0ZSA9IENPTklfSU5UOwotICAgIH0KLX0KLQotCi0v KiAgQyBPIE4gTiBPIEkgIC0tICBSZXNldCBjb25zb2xlIHRlcm1pbmFsIGludGVycnVwdHMgKi8K LQotVk9JRAotY29ubm9pKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnNv bGUtbm8taW50ZXJydXB0cyAqLwotCi0gICAgZGVidWcoRjEwMSwiY29ubm9pIGNvbmlzdGF0ZSIs IiIsY29uaXN0YXRlKTsKLSNpZmRlZiBTSUdUU1RQCi0gICAgc2lnbmFsKFNJR1RTVFAsU0lHX0lH Tik7CQkvKiBTdXNwZW5kICovCi0jZW5kaWYgLyogU0lHVFNUUCAqLwotICAgIGNvbmludChTSUdf SUdOLFNJR19JR04pOwkJLyogSW50ZXJydXB0ICovCi0gICAgc2lnaW50X2lnbiA9IDE7CQkJLyog UmVtZW1iZXIgd2UgZGlkIHRoaXMgb3Vyc2VsdmVzICovCi0jaWZkZWYgU0lHUVVJVAotICAgIHNp Z25hbChTSUdRVUlULFNJR19JR04pOwkJLyogUXVpdCAqLwotI2VuZGlmIC8qIFNJR1FVSVQgKi8K LSNpZmRlZiBTSUdURVJNCi0gICAgc2lnbmFsKFNJR1RFUk0sU0lHX0lHTik7CQkvKiBUZXJtICov Ci0jZW5kaWYgLyogU0lHVEVSTSAqLwotICAgIGNvbmlzdGF0ZSA9IENPTklfTk9JOwotfQotCi0v KiAgSSBOIEkgVCBSIEEgVyBRICAtLSAgU2V0IHVwIHRvIHJlYWQgL2Rldi9rbWVtIGZvciBjaGFy YWN0ZXIgY291bnQuICAqLwotCi0jaWZkZWYgIFY3Ci0vKgotIFVzZWQgaW4gVmVyc2lvbiA3IHRv IHNpbXVsYXRlIEJlcmtlbGV5J3MgRklPTlJFQUQgaW9jdGwgY2FsbC4gIFRoaXMKLSBlbGltaW5h dGVzIGJsb2NraW5nIG9uIGEgcmVhZCwgYmVjYXVzZSB3ZSBjYW4gcmVhZCAvZGV2L2ttZW0gdG8g Z2V0IHRoZQotIG51bWJlciBvZiBjaGFyYWN0ZXJzIGF2YWlsYWJsZSBmb3IgcmF3IGlucHV0LiAg SWYgeW91ciBzeXN0ZW0gY2FuJ3QKLSBvciB5b3Ugd29uJ3QgbGV0IHRoZSB3b3JsZCByZWFkIC9k ZXYva21lbSB0aGVuIHlvdSBtdXN0IGZpZ3VyZSBvdXQgYQotIGRpZmZlcmVudCB3YXkgdG8gZG8g dGhlIGNvdW50aW5nIG9mIGNoYXJhY3RlcnMgYXZhaWxhYmxlLCBvciBlbHNlIHJlcGxhY2UKLSB0 aGlzIGJ5IGEgZHVtbXkgZnVuY3Rpb24gdGhhdCBhbHdheXMgcmV0dXJucyAwLgotKi8KLS8qCi0g KiBDYWxsIHRoaXMgcm91dGluZSBhczogaW5pdHJhd3EodHR5KQotICogd2hlcmUgdHR5IGlzIHRo ZSBmaWxlIGRlc2NyaXB0b3Igb2YgYSB0ZXJtaW5hbC4gIEl0IHdpbGwgcmV0dXJuCi0gKiAoYXMg YSBjaGFyICopIHRoZSBrZXJuZWwtbW9kZSBtZW1vcnkgYWRkcmVzcyBvZiB0aGUgcmF3cSBjaGFy YWN0ZXIKLSAqIGNvdW50LCB3aGljaCBtYXkgdGhlbiBiZSByZWFkLiAgSXQgaGFzIHRoZSBzaWRl LWVmZmVjdCBvZiBmbHVzaGluZwotICogaW5wdXQgb24gdGhlIHRlcm1pbmFsLgotICovCi0vKgot ICogSm9obiBNYWNraW4sIFBoeXNpb2xvZ3kgRGVwdC4sIFVuaXZlcnNpdHkgb2YgU3lkbmV5IChB dXN0cmFsaWEpCi0gKiAuLi4hZGVjdmF4IW11bGdhIXBoeXNpb2wuc3Uub3oham9obgotICoKLSAq IFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gZG8gYW55dGhpbmcgd2l0aCB0aGlzIGNv ZGUsIGFzCi0gKiBsb25nIGFzIHRoaXMgY29tbWVudCBpcyByZXRhaW5lZCB1bm1vZGlmaWVkIGFu ZCBubyBjb21tZXJjaWFsCi0gKiBhZHZhbnRhZ2UgaXMgZ2FpbmVkLgotICovCi0jaWZuZGVmIE1J TklYCi0jaWZuZGVmIE1JTklYMgotI2lmbmRlZiBDT0hFUkVOVAotI2luY2x1ZGUgPGEub3V0Lmg+ Ci0jaW5jbHVkZSA8c3lzL3Byb2MuaD4KLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotI2VuZGlmIC8q IE1JTklYMiAqLwotI2VuZGlmIC8qIE1JTklYICovCi0KLSNpZmRlZiBDT0hFUkVOVAotI2luY2x1 ZGUgPGwub3V0Lmg+Ci0jaW5jbHVkZSA8c3lzL3Byb2MuaD4KLSNlbmRpZiAvKiBDT0hFUkVOVCAq LwotCi1jaGFyICoKLWluaXRyYXdxKHR0eSkgaW50IHR0eTsgewotI2lmZGVmIE1JTklYCi0gICAg cmV0dXJuKDApOwotI2Vsc2UKLSNpZmRlZiBNSU5JWDIKLSAgICByZXR1cm4oMCk7Ci0jZWxzZQot I2lmZGVmIFVUUzI0Ci0gICAgcmV0dXJuKDApOwotI2Vsc2UKLSNpZmRlZiBCU0QyOQotICAgIHJl dHVybigwKTsKLSNlbHNlCi0gICAgbG9uZyBsc2VlaygpOwotICAgIHN0YXRpYyBzdHJ1Y3Qgbmxp c3QgbmxbXSA9IHsKLSAgICAgICAge1BST0NOQU1FfSwKLSAgICAgICAge05QUk9DTkFNRX0sCi0g ICAgICAgIHsiIn0KLSAgICB9OwotICAgIHN0YXRpYyBzdHJ1Y3QgcHJvYyAqcHA7Ci0gICAgY2hh ciAqcWFkZHIsICpwLCBjOwotICAgIGludCBtOwotICAgIFBJRF9UIHBpZCwgbWU7Ci0gICAgTlBU WVBFIHhwcm9jOyAgICAgICAgICAgICAgICAgICAgICAgLyogSXRzIHR5cGUgaXMgZGVmaW5lZCBp biBtYWtlZmlsZS4gKi8KLSAgICBpbnQgY2F0Y2goKTsKLQotICAgIG1lID0gZ2V0cGlkKCk7Ci0g ICAgaWYgKChtID0gb3BlbigiL2Rldi9rbWVtIiwgMCkpIDwgMCkgZXJyKCJrbWVtIik7Ci0gICAg bmxpc3QoQk9PVE5BTUUsIG5sKTsKLSAgICBpZiAobmxbMF0ubl90eXBlID09IDApIGVycigicHJv YyBhcnJheSIpOwotCi0gICAgaWYgKG5sWzFdLm5fdHlwZSA9PSAwKSBlcnIoIm5wcm9jIik7Ci0K LSAgICBsc2VlayhtLCAobG9uZykobmxbMV0ubl92YWx1ZSksIDApOwotICAgIHJlYWQgKG0sICZ4 cHJvYywgc2l6ZW9mKHhwcm9jKSk7Ci0gICAgc2F2YWwgPSBzaWduYWwoU0lHQUxSTSwgY2F0Y2gp OwotICAgIGlmICgocGlkID0gZm9yaygpKSA9PSAwKSB7Ci0gICAgICAgIHdoaWxlKDEpCi0gICAg ICAgICAgICByZWFkKHR0eSwgJmMsIDEpOwotICAgIH0KLSAgICBhbGFybSgyKTsKLQotICAgIGlm KHNldGptcChqamJ1ZikgPT0gMCkgewotICAgICAgICB3aGlsZSgxKQotCSAgcmVhZCh0dHksICZj LCAxKTsKLSAgICB9Ci0gICAgc2lnbmFsKFNJR0FMUk0sIFNJR19ERkwpOwotCi0jaWZkZWYgRElS RUNUCi0gICAgcHAgPSAoc3RydWN0IHByb2MgKikgbmxbMF0ubl92YWx1ZTsKLSNlbHNlCi0gICAg aWYgKGxzZWVrKG0sIChsb25nKShubFswXS5uX3ZhbHVlKSwgMCkgPCAwTCkgZXJyKCJzZWVrIik7 Ci0gICAgaWYgKHJlYWQobSwgJnBwLCBzaXplb2YocHApKSAhPSBzaXplb2YocHApKSAgZXJyKCJu byByZWFkIG9mIHByb2MgcHRyIik7Ci0jZW5kaWYKLSAgICBsc2VlayhtLCAobG9uZykobmxbMV0u bl92YWx1ZSksIDApOwotICAgIHJlYWQobSwgJnhwcm9jLCBzaXplb2YoeHByb2MpKTsKLQotICAg IGlmIChsc2VlayhtLCAobG9uZylwcCwgMCkgPCAwTCkgZXJyKCJDYW4ndCBzZWVrIHRvIHByb2Mi KTsKLSAgICBpZiAoKHAgPSBtYWxsb2MoeHByb2MgKiBzaXplb2Yoc3RydWN0IHByb2MpKSkgPT0g TlVMTCkgZXJyKCJtYWxsb2MiKTsKLSAgICBpZiAocmVhZChtLHAseHByb2MgKiBzaXplb2Yoc3Ry dWN0IHByb2MpKSAhPSB4cHJvYypzaXplb2Yoc3RydWN0IHByb2MpKQotICAgICAgICBlcnIoInJl YWQgcHJvYyB0YWJsZSIpOwotICAgIGZvciAocHAgPSAoc3RydWN0IHByb2MgKilwOyB4cHJvYyA+ IDA7IC0teHByb2MsICsrcHApIHsKLSAgICAgICAgaWYgKHBwIC0+IHBfcGlkID09IChzaG9ydCkg cGlkKSBnb3RvIGlvdXQ7Ci0gICAgfQotICAgIGVycigibm8gc3VjaCBwcm9jIik7Ci0KLWlvdXQ6 Ci0gICAgY2xvc2UobSk7Ci0gICAgcWFkZHIgPSAoY2hhciAqKShwcCAtPiBwX3djaGFuKTsKLSAg ICBmcmVlIChwKTsKLSAgICBraWxsKHBpZCwgU0lHS0lMTCk7Ci0gICAgd2FpdCgoV0FJVF9UICop MCk7Ci0gICAgcmV0dXJuIChxYWRkcik7Ci0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYK LX0KLQotLyogIE1vcmUgVjctc3VwcG9ydCBmdW5jdGlvbnMuLi4gICovCi0KLXN0YXRpYyBWT0lE Ci1lcnIocykgY2hhciAqczsgewotICAgIGNoYXIgYnVmWzIwMF07Ci0KLSAgICBja21ha21zZyhi dWYsMjAwLCJmYXRhbCBlcnJvciBpbiBpbml0cmF3cTogIiwgcywgTlVMTCwgTlVMTCk7Ci0gICAg cGVycm9yKGJ1Zik7Ci0gICAgZG9leGl0KDEsLTEpOwotfQotCi1zdGF0aWMgVk9JRAotY2F0Y2go Zm9vKSBpbnQgZm9vOyB7Ci0gICAgbG9uZ2ptcChqamJ1ZiwgLTEpOwotfQotCi0KLS8qICBHIEUg TiBCIFIgSyAgLS0gIFNpbXVsYXRlIGEgbW9kZW0gYnJlYWsuICAqLwotCi0jaWZkZWYgTUlOSVgK LSNkZWZpbmUgQlNQRUVEIEIxMTAKLSNlbHNlCi0jaWZkZWYgTUlOSVgyCi0jZGVmaW5lIEJTUEVF RCBCMTEwCi0jZWxzZQotI2RlZmluZSBCU1BFRUQgQjE1MAotI2VuZGlmIC8qIE1JTklYMiAqLwot I2VuZGlmIC8qIE1JTklYICovCi0KLSNpZm5kZWYgTUlOSVgyCi1WT0lECi1nZW5icmsoZm4sbXNl YykgaW50IGZuLCBtc2VjOyB7Ci0gICAgc3RydWN0IHNndHR5YiB0dGJ1ZjsKLSAgICBpbnQgcmV0 LCBzb3NwZWVkLCB4LCB5OwotCi0gICAgcmV0ID0gaW9jdGwoZm4sIFRJT0NHRVRQLCAmdHRidWYp OwotICAgIHNvc3BlZWQgPSB0dGJ1Zi5zZ19vc3BlZWQ7Ci0gICAgdHRidWYuc2dfb3NwZWVkID0g QlNQRUVEOwotICAgIHJldCA9IGlvY3RsKGZuLCBUSU9DU0VUUCwgJnR0YnVmKTsKLSAgICB5ID0g KGludClzdHJsZW4oYnJudWxzKTsKLSAgICB4ID0gKCBCU1BFRUQgKiAxMDAgKSAvIG1zZWM7Ci0g ICAgaWYgKHggPiB5KSB4ID0geTsKLSAgICByZXQgPSB3cml0ZShmbiwgYnJudWxzLCAoKCBCU1BF RUQgKiAxMDAgKSAvIG1zZWMgKSk7Ci0gICAgdHRidWYuc2dfb3NwZWVkID0gc29zcGVlZDsKLSAg ICByZXQgPSBpb2N0bChmbiwgVElPQ1NFVFAsICZ0dGJ1Zik7Ci0gICAgcmV0ID0gd3JpdGUoZm4s ICJAIiwgMSk7Ci0gICAgcmV0dXJuOwotfQotI2VuZGlmIC8qIE1JTklYMiAqLwotCi0jaWZkZWYg TUlOSVgyCi1pbnQKLWdlbmJyayhmbixtc2VjKSBpbnQgZm4sIG1zZWM7IHsKLSAgICBzdHJ1Y3Qg dGVybWlvcyB0dGJ1ZjsKLSAgICBpbnQgcmV0LCB4LCB5OwotICAgIHNwZWVkX3Qgc29zcGVlZDsK LQotICAgIHJldCA9IHRjZ2V0YXR0cihmbiwgJnR0YnVmKTsKLSAgICBzb3NwZWVkID0gdHRidWYu Y19vc3BlZWQ7Ci0gICAgdHRidWYuY19vc3BlZWQgPSBCU1BFRUQ7Ci0gICAgcmV0ID0gdGNzZXRh dHRyKGZuLFRDU0FEUkFJTiwgJnR0YnVmKTsKLSAgICB5ID0gKGludClzdHJsZW4oYnJudWxzKTsK LSAgICB4ID0gKCBCU1BFRUQgKiAxMDAgKSAvIG1zZWM7Ci0gICAgaWYgKHggPiB5KSB4ID0geTsK LSAgICByZXQgPSB3cml0ZShmbiwgYnJudWxzLCAoKCBCU1BFRUQgKiAxMDAgKSAvIG1zZWMgKSk7 Ci0gICAgdHRidWYuY19vc3BlZWQgPSBzb3NwZWVkOwotICAgIHJldCA9IHRjc2V0YXR0cihmbiwg VENTQURSQUlOLCAmdHRidWYpOwotICAgIHJldCA9IHdyaXRlKGZuLCAiQCIsIDEpOwotICAgIHJl dHVybiByZXQ7Ci19Ci0jZW5kaWYgLyogTUlOSVgyICovCi0jZW5kaWYgLyogVjcgKi8KLQotLyoK LSAgSSBOIEMgSCBLICAtLSAgQ2hlY2sgaWYgY2hhcnMgd2FpdGluZyB0byBiZSByZWFkIG9uIGdp dmVuIGZpbGUgZGVzY3JpcHRvci4KLQotICBUaGlzIHJvdXRpbmUgaXMgYSBtZXJnZXIgb2YgdHRj aGsoKSBhbmQgY29uY2hrKCkuCi0gIENhbGwgd2l0aDoKLSAgICBjaGFubmVsID09IDAgdG8gY2hl Y2sgY29uc29sZS4KLSAgICBjaGFubmVsID09IDEgdG8gY2hlY2sgY29tbXVuaWNhdGlvbnMgY29u bmVjdGlvbi4KLSAgYW5kOgotICAgIGZkID0gZmlsZSBkZXNjcmlwdG9yLgotICBSZXR1cm5zOgot ICAgPj0gMDogbnVtYmVyIG9mIGNoYXJhY3RlcnMgd2FpdGluZywgMCBvciBncmVhdGVyLAotICAg ICAtMTogb24gYW55IGtpbmQgb2YgZXJyb3IsCi0gICAgIC0yOiBpZiB0aGVyZSBpcyAoZGVmaW5p dGVseSkgbm8gY29ubmVjdGlvbi4KLSAgTm90ZTogSW4gVU5JWCB3ZSBkb24ndCBoYXZlIHRvIGNh bGwgbmV0dGNoaygpIGJlY2F1c2UgYSBzb2NrZXQKLSAgZmlsZSBkZXNjcmlwdG9yIHdvcmtzIGp1 c3QgbGlrZSBpbiBzZXJpYWwgaS9vLCBpb2N0bHMgYW5kIGFsbC4KLSAgKEJ1dCB0aGlzIHdpbGwg Y2hhbmdlIGlmIHdlIGFkZCBub24tZmlsZS1kZXNjcmlwdG9yIGNoYW5uZWxzLAotICBzdWNoIGFz IElCTSBYLjI1IGZvciBBSVguLi4pCi0qLwotc3RhdGljIGludAotaW5fY2hrKGNoYW5uZWwsIGZk KSBpbnQgY2hhbm5lbCwgZmQ7IHsKLSAgICBpbnQgeCwgbiA9IDA7CQkJLyogV29ya2VycywgbiA9 IHJldHVybiB2YWx1ZSAqLwotICAgIGV4dGVybiBpbnQgY2xzb25kaXNjOwkJLyogQ2xvc2Ugb24g ZGlzY29ubmVjdCAqLwotLyoKLSAgVGhlIGZpcnN0IHNlY3Rpb24gY2hlY2tzIHRvIG1ha2Ugc3Vy ZSB3ZSBoYXZlIGEgY29ubmVjdGlvbiwKLSAgYnV0IG9ubHkgaWYgd2UncmUgaW4gbG9jYWwgbW9k ZS4KLSovCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKSB7Ci0JZGVidWcoRjExMSwiaW5f Y2hrIGVudHJ5Iixja2l0b2EoZmQpLGNoYW5uZWwpOwotCWRlYnVnKEYxMDEsImluX2NoayB0dHlm ZCIsIiIsdHR5ZmQpOwotCWRlYnVnKEYxMDEsImluX2NoayB0dHB0eSIsIiIsdHRwdHkpOwotICAg IH0KLSNlbmRpZiAvKiBERUJVRyAqLwotLyoKLSAgQnV0IGRvbid0IHNheSBjb25uZWN0aW9uIGlz IGdvbmUgaWYgd2UgaGF2ZSBhbnkgYnVmZmVyZWQtc3R1ZmYuCi0qLwotI2lmZGVmIFRUTEVCVUYK LSAgICBkZWJ1ZyhGMTAxLCJpbl9jaGsgdHRwdXNoIiwiIix0dHB1c2gpOwotICAgIGlmIChjaGFu bmVsID09IDEpIHsKLQlpZiAodHRwdXNoID49IDApCi0JICBuKys7Ci0JbiArPSBsZV9pbmJ1Zigp OwotCWlmIChuID4gMCkKLQkgIHJldHVybihuKTsKLSAgICB9Ci0jZW5kaWYgLyogVFRMRUJVRiAq LwotCi0jaWZkZWYgTkVUUFRZCi0jaWZkZWYgSEFWRV9QVFlUUkFQCi0gICAgLyogU3BlY2lhbCBo YW5kbGluZyBmb3IgSFAtVVggcHR5IGkvbyAqLwotICAgIGlmICh0dHB0eSAmJiBwdHlfdHJhcF9w ZW5kaW5nKHR0eWZkKSA+IDApIHsKLSAgICAgICAgaWYgKHB0eV90cmFwX2hhbmRsZXIodHR5ZmQp ID4gMCkgewotICAgICAgICAgICAgdHRjbG9zKDApOwotICAgICAgICAgICAgcmV0dXJuKC0yKTsK LSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBIQVZFX1BUWVRSQVAgKi8KLSNlbmRpZiAvKiBO RVRQVFkgKi8KLQotICAgIGlmIChjaGFubmVsKSB7CQkJLyogQ2hlY2tpbmcgY29tbXVuaWNhdGlv bnMgY2hhbm5lbCAqLwotCWlmICh0dHlmZCA8IDApIHsJCS8qIE5vIGNvbm5lY3Rpb24gKi8KLQkg IHJldHVybigtMik7CQkJLyogVGhhdCdzIHdoYXQgdGhpcyBtZWFucyAqLwotCX0gZWxzZSBpZiAo eGxvY2FsICYmCQkvKiBJbiBsb2NhbCBtb2RlICovCi0JCSAgICghbmV0Y29ubgkJLyogU2VyaWFs IGNvbm5lY3Rpb24gb3IgKi8KLSNpZmRlZiBUTl9DT01QT1JUCi0JCSAgICB8fCBpc3RuY29tcG9y dCgpICAgIC8qIFRlbG5ldCBDb20gUG9ydCAqLwotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLQkJ ICAgKSAmJiB0dGNhcnIgIT0gQ0FSX09GRiAvKiB3aXRoIENBUlJJRVIgV0FUQ0ggT04gKG9yIEFV VE8pICovCi0jaWZkZWYgQ09NTUVOVAotI2lmZGVmIE1ZUkVBRAotLyoKLSAgU2VlbXMgbGlrZSB0 aGlzIHdvdWxkIGJlIGEgZ29vZCBpZGVhIGJ1dCBpdCBwcmV2ZW50cyBDLUtlcm1pdCBmcm9tCi0g IHBvcHBpbmcgYmFjayB0byB0aGUgcHJvbXB0IGF1dG9tYXRpY2FsbHkgd2hlbiBjYXJyaWVyIGRy b3BzLiAgSG93ZXZlciwKLSAgY29tbWVudGluZyB0aGlzIG91dCBwcmV2ZW50cyB1cyBmcm9tIHNl ZWluZyB0aGUgTk8gQ0FSUklFUiBtZXNzYWdlLgotICBOZWVkcyBtb3JlIHdvcmsuLi4KLSovCi0J CSAgICYmIG15X2NvdW50IDwgMQkvKiBOb3RoaW5nIGluIG91ciBpbnRlcm5hbCBidWZmZXIgKi8K LSNlbmRpZiAvKiBNWVJFQUQgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0JCSAgICkgewotCSAg ICBpbnQgeDsKLQkgICAgeCA9IHR0Z21kbSgpOwkJLyogU28gZ2V0IG1vZGVtIHNpZ25hbHMgKi8K LQkgICAgZGVidWcoRjEwMSwiaW5fY2hrIGNsb3NlLW9uLWRpc2Nvbm5lY3QiLCIiLGNsc29uZGlz Yyk7Ci0JICAgIGlmICh4ID4gLTEpIHsJCS8qIENoZWNrIGZvciBjYXJyaWVyICovCi0JCWlmICgh KHggJiBCTV9EQ0QpKSB7CS8qIE5vIGNhcnJpZXIgKi8KLQkJICAgIGRlYnVnKEYxMDEsImluX2No ayBjYXJyaWVyIGxvc3QiLCIiLHgpOwotCQkgICAgaWYgKGNsc29uZGlzYykJLyogSWYgImNsb3Nl LW9uLWRpc2Nvbm5lY3QiICovCi0JCSAgICAgIHR0Y2xvcygwKTsJLyogY2xvc2UgZGV2aWNlICYg cmVsZWFzZSBsb2NrLiAqLwotCQkgICAgcmV0dXJuKC0yKTsJCS8qIFRoaXMgbWVhbnMgImRpc2Nv bm5lY3RlZCIgKi8KLQkJfQotCSAgICAvKiBJbiBjYXNlIEkvTyB0byBkZXZpY2UgYWZ0ZXIgQ0Qg ZHJvcHBlZCBhbHdheXMgZmFpbHMgKi8KLQkgICAgLyogYXMgaW4gRGViaWFuIExpbnV4IDIuMSBh bmQgVW5peHdhcmUgMi4xLi4uICovCi0JICAgIH0gZWxzZSB7Ci0JICAgICAgICBkZWJ1ZyhGMTAx LCJpbl9jaGsgdHRnbWRtIEkvTyBlcnJvciIsIiIsZXJybm8pOwotCSAgICAgICAgZGVidWcoRjEw MSwiaW5fY2hrIHR0Z21kbSBnb3RzaWdzIiwiIixnb3RzaWdzKTsKLQkgICAgICAgIGlmIChnb3Rz aWdzKSB7CQkvKiBJZiB3ZSBnb3Qgc2lnbmFscyBiZWZvcmUuLi4gKi8KLQkJICAgIGlmIChlcnJu byA9PSA1IHx8IGVycm5vID09IDYpIHsgLyogSS9PIGVycm9yIGV0YyAqLwotCQkgICAgICAgIGlm IChjbHNvbmRpc2MpCS8qIGxpa2Ugd2hlbiBtb2RlbSBoYW5ncyB1cCAqLwotCQkJICB0dGNsb3Mo MCk7Ci0JCQlyZXR1cm4oLTIpOwotCQkgICAgfQotCQl9Ci0JCS8qIElmIHdlIG5ldmVyIGdvdCBt b2RlbSBzaWduYWxzIHN1Y2Nlc3NmdWxseSBvbiB0aGlzICovCi0JCS8qIGNvbm5lY3Rpb24gYmVm b3JlLCB3ZSBjYW4ndCBjb25jbHVkZSB0aGF0IFRISVMgZmFpbHVyZSAqLwotCQkvKiBtZWFucyB0 aGUgY29ubmVjdGlvbiB3YXMgbG9zdC4gKi8KLQkJcmV0dXJuKDApOwotCSAgICB9Ci0JfQotICAg IH0KLQotLyogV2Ugc2VlbSB0byBoYXZlIGEgY29ubmVjdGlvbiBzbyBub3cgc2VlIGlmIGFueSBi eXRlcyBhcmUgd2FpdGluZyBvbiBpdCAqLwotCi0jaWZkZWYgQ0tfU1NMCi0gICAgaWYgKHNzbF9h Y3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpIHsKLSAgICAgICAgbiArPSBTU0xfcGVuZGlu Zyhzc2xfYWN0aXZlX2ZsYWc/c3NsX2Nvbjp0bHNfY29uKTsKLSAgICAgICAgZGVidWcoRjEwMSwi aW5fY2hrIFNTTF9wZW5kaW5nIiwiIixuKTsKLSAgICAgICAgaWYgKG4gPCAwKSB7Ci0gICAgICAg ICAgICB0dGNsb3MoMCk7Ci0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9IGVsc2Ug aWYgKG4gPiAwKSB7Ci0gICAgICAgICAgICByZXR1cm4obik7Ci0gICAgICAgIH0KLSAgICB9Ci0j ZW5kaWYgLyogQ0tfU1NMICovCi0jaWZkZWYgUkxPR0NPREUKLSNpZmRlZiBDS19LRVJCRVJPUwot ICAgIC8qIEl0IGlzIG5vdCBzYWZlIHRvIHJlYWQgYW55IGRhdGEgd2hlbiB1c2luZyBlbmNyeXB0 ZWQgS2xvZ2luICovCi0gICAgaWYgKHR0bnByb3RvID09IE5QX0VLNExPR0lOIHx8IHR0bnByb3Rv ID09IE5QX0VLNUxPR0lOKSB7Ci0jaWZkZWYgS1JCNAotICAgICAgICBpZiAodHRucHJvdG8gPT0g TlBfRUs0TE9HSU4pIHsKLSAgICAgICAgICAgIG4gKz0ga3JiNF9kZXNfYXZhaWwodHR5ZmQpOwot ICAgICAgICAgICAgZGVidWcoRjEwMSwiaW5fY2hrIGtyYjRfZGVzX2F2YWlsIiwiIixuKTsKLSAg ICAgICAgfQotI2VuZGlmIC8qIEtSQjQgKi8KLSNpZmRlZiBLUkI1Ci0gICAgICAgIGlmICh0dG5w cm90byA9PSBOUF9FSzVMT0dJTikgewotICAgICAgICAgICAgbiArPSBrcmI1X2Rlc19hdmFpbCh0 dHlmZCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJpbl9jaGsga3JiNV9kZXNfYXZhaWwiLCIi LG4pOwotICAgICAgICB9Ci0jaWZkZWYgS1JCNV9VMlUKLSAgICAgICAgaWYgKHR0bnByb3RvID09 IE5QX0s1VTJVKSB7Ci0gICAgICAgICAgICBuICs9IGtyYjVfdTJ1X2F2YWlsKHR0eWZkKTsKLSAg ICAgICAgICAgIGRlYnVnKEYxMDEsImluX2NoayBrcmI1X2Rlc19hdmFpbCIsIiIsbik7Ci0gICAg ICAgIH0KLSNlbmRpZiAvKiBLUkI1X1UyVSAqLwotI2VuZGlmIC8qIEtSQjUgKi8KLSAgICAgICAg aWYgKG4gPCAwKQkJCS8qIElzIHRoaXMgcmlnaHQ/ICovCi0JICByZXR1cm4oLTEpOwotICAgICAg ICBlbHNlCi0JICByZXR1cm4obik7Ci0gICAgfQotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0j ZW5kaWYgLyogUkxPR0NPREUgKi8KLQotICAgIGVycm5vID0gMDsJCQkJLyogUmVzZXQgdGhpcyBz byB3ZSBsb2cgZ29vZCBpbmZvICovCi0jaWZkZWYgRklPTlJFQUQKLSAgICB4ID0gaW9jdGwoZmQs IEZJT05SRUFELCAmbik7CS8qIEJTRCBhbmQgbG90cyBvZiBvdGhlcnMgKi8KLSNpZmRlZiBERUJV RwkJCQkvKiAodGhlIG1vcmUgdGhlIGJldHRlcikgKi8KLSAgICBpZiAoZGVibG9nKSB7Ci0JZGVi dWcoRjEwMSwiaW5fY2hrIEZJT05SRUFEIHJldHVybiBjb2RlIiwiIix4KTsKLQlkZWJ1ZyhGMTAx LCJpbl9jaGsgRklPTlJFQUQgY291bnQiLCIiLG4pOwotCWRlYnVnKEYxMDEsImluX2NoayBGSU9O UkVBRCBlcnJubyIsIiIsZXJybm8pOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotI2Vsc2Ug LyogRklPTlJFQUQgbm90IGRlZmluZWQgKi8KLS8qCi0gIEhlcmUsIGlmIChuZXRjb25uICYmIHR0 bmV0ID09IE5FVF9UQ1BCKSwgd2UgbWlnaHQgdHJ5IGNhbGxpbmcgcmVjdm1zZygpCi0gIHdpdGgg ZmxhZ3MgTVNHX1BFRUt8TVNHX0RPTlRXQUlUIG9uIHRoZSBzb2NrZXQgKHR0eWZkKSwgZXhjZXB0 IHRoaXMgaXMgbm90Ci0gIHBvcnRhYmxlIChNU0dfRE9OVFdBSVQgaXNuJ3QgZGVmaW5lZCBpbiBh bnkgb2YgdGhlIDxzeXMvc29ja2V0Lmg+IGZpbGVzCi0gIHRoYXQgSSBsb29rZWQgYXQsIGJ1dCBp dCBpcyBuZWVkZWQgdG8gcHJldmVudCB0aGUgY2FsbCBmcm9tIGJsb2NraW5nKSwgYW5kCi0gIHRo ZSBtc2doZHIgc3RydWN0IGRpZmZlcnMgZnJvbSBwbGFjZSB0byBwbGFjZSwgc28gd2Ugd291bGQg bmVlZCBhbm90aGVyCi0gIGF2YWxhbmNoZSBvZiBpZmRlZnMuICBTdGlsbCwgd2hlbiBGSU9OUkVB RCBpcyBub3QgYXZhaWxhYmxlLCB0aGlzIGlzIHRoZQotICBvbmx5IG90aGVyIGtub3duIG1ldGhv ZCBvZiBhc2tpbmcgdGhlIE9TIGZvciB0aGUgKm51bWJlciogb2YgY2hhcmFjdGVycwotICBhdmFp bGFibGUgZm9yIHJlYWRpbmcuCi0qLwotI2lmZGVmIFY3CQkJCS8qIFVOSVggVjc6IGxvb2sgaW4g a2VybmVsIG1lbW9yeSAqLwotI2lmZGVmIE1JTklYCi0gICAgbiA9IDA7CQkJCS8qIEJ1dCBub3Qg aW4gTUlOSVggKi8KLSNlbHNlCi0jaWZkZWYgTUlOSVgyCi0gICAgbiA9IDA7Ci0jZWxzZQotICAg IGxzZWVrKGttZW1bVFRZXSwgKGxvbmcpIHFhZGRyW1RUWV0sIDApOyAvKiA3dGggRWRpdGlvbiBV bml4ICovCi0gICAgeCA9IHJlYWQoa21lbVtUVFldLCAmbiwgc2l6ZW9mKGludCkpOwotICAgIGlm ICh4ICE9IHNpemVvZihpbnQpKQotICAgICAgbiA9IDA7Ci0jZW5kaWYgLyogTUlOSVgyICovCi0j ZW5kaWYgLyogTUlOSVggKi8KLSNlbHNlIC8qIE5vdCBWNyAqLwotI2lmZGVmIFBST1ZYMQotICAg IHggPSBpb2N0bChmZCwgVElPQ1FDTlQsICZ0dGJ1Zik7CS8qIERFQyBQcm8vM3h4IFZlbml4IFYu MSAqLwotICAgIG4gPSB0dGJ1Zi5zZ19pc3BlZWQgJiAwMzc3OwkJLyogQ2lyY2EgMTk4NCAqLwot ICAgIGlmICh4IDwgMCkgbiA9IDA7Ci0jZWxzZQotI2lmZGVmIE1ZUkVBRAotLyoKLSAgSGVyZSB3 ZSBza2lwIGFsbCB0aGUgdW5kZXBlbmRhYmxlIGFuZCBleHBlbnNpdmUgY2FsbHMgYmVsb3cgaWYg d2UKLSAgYWxyZWFkeSBoYXZlIHNvbWV0aGluZyBpbiBvdXIgaW50ZXJuYWwgYnVmZmVyLiAgVGhp cyB0ZW5kcyB0byB3b3JrIHF1aXRlCi0gIG5pY2VseSwgc28gdGhlIG9ubHkgcmVhbGx5IGJhZCBj YXNlIHJlbWFpbmluZyBpcyB0aGUgb25lIGluIHdoaWNoIG5laXRoZXIKLSAgRklPTlJFQUQgb3Ig TVlSRUFEIGFyZSBkZWZpbmVkLCB3aGljaCBpcyBpbmNyZWFzaW5nbHkgcmFyZSB0aGVzZSBkYXlz LgotKi8KLSAgICBpZiAoY2hhbm5lbCAhPSAwICYmIG15X2NvdW50ID4gMCkgewotCWRlYnVnKEYx MDEsImluX2NoayBidWYgbXlfY291bnQiLCIiLG15X2NvdW50KTsKLQluID0gbXlfY291bnQ7CQkJ LyogbiB3YXMgMCBiZWZvcmUgd2UgZ290IGhlcmUgKi8KLQlyZXR1cm4obik7Ci0gICAgfQotI2Vu ZGlmIC8qIE1ZUkVBRCAqLwotLyoKLSAgcmRjaGsoKSwgc2VsZWN0KCksIGFuZCBwb2xsKCkgdGVs bCB1cyAqaWYqIGRhdGEgaXMgYXZhaWxhYmxlIHRvIGJlIHJlYWQsIGJ1dAotICBub3QgaG93IG11 Y2gsIHNvIHRoZXNlIHNob3VsZCBiZSB1c2VkIG9ubHkgYXMgYSBmaW5hbCByZXNvcnQuICBFc3Bl Y2lhbGx5Ci0gIHNpbmNlIHRoZXNlIGNhbGxzIHRlbmQgdG8gYWRkIGEgbG90IG92ZXJoZWFkLgot Ki8KLSNpZmRlZiBSRENISwkJCQkvKiBUaGlzIG1vc3RseSBTQ08tc3BlY2lmaWMgKi8KLSAgICBu ID0gcmRjaGsoZmQpOwotICAgIGRlYnVnKEYxMDEsImluX2NoayByZGNoayIsIiIsbik7Ci0jZWxz ZSAvKiBObyBSRENISyAqLwotI2lmZGVmIFNFTEVDVAotI2lmZGVmIFBsYW45Ci0gICAgLyogT25s eSBhbGxvd3Mgc2VsZWN0IG9uIHRoZSBjb25zb2xlIC4uLiBkb24ndCBhc2sgKi8KLSAgICBpZiAo Y2hhbm5lbCA9PSAwKQotI2VuZGlmIC8qIFBsYW45ICovCi0gICAgICB7Ci0JZmRfc2V0IHJmZHM7 CQkJLyogUmVhZCBmaWxlIGRlc2NyaXB0b3JzICovCi0jaWZkZWYgQkVMTFYxMAotCUZEX1pFUk8o cmZkcyk7CQkJLyogSW5pdGlhbGl6ZSB0aGVtICovCi0JRkRfU0VUKGZkLHJmZHMpOwkJLyogV2Ug d2FudCB0byBsb29rIGF0IHRoaXMgZmQgKi8KLSNlbHNlCi0JRkRfWkVSTygmcmZkcyk7CQkJLyog SW5pdGlhbGl6ZSB0aGVtICovCi0JRkRfU0VUKGZkLCZyZmRzKTsJCS8qIFdlIHdhbnQgdG8gbG9v ayBhdCB0aGlzIGZkICovCi0JdHYudHZfc2VjID0gdHYudHZfdXNlYyA9IDBMOwkvKiBBIDAtdmFs dWVkIHRpbWV2YWwgc3RydWN0dXJlICovCi0jZW5kaWYgLyogQkVMTFYxMCAqLwotI2lmZGVmIFBs YW45Ci0JbiA9IHNlbGVjdCggRkRfU0VUU0laRSwgJnJmZHMsIChmZF9zZXQgKikwLCAoZmRfc2V0 ICopMCwgJnR2ICk7Ci0JZGVidWcoRjEwMSwiaW5fY2hrIFBsYW4gOSBzZWxlY3QiLCIiLG4pOwot I2Vsc2UKLSNpZmRlZiBCRUxMVjEwCi0JbiA9IHNlbGVjdCggMTI4LCByZmRzLCAoZmRfc2V0ICop MCwgKGZkX3NldCAqKTAsIDAgKTsKLQlkZWJ1ZyhGMTAxLCJpbl9jaGsgQkVMTFYxMCBzZWxlY3Qi LCIiLG4pOwotI2Vsc2UKLSNpZmRlZiBCU0Q0NAotCW4gPSBzZWxlY3QoIEZEX1NFVFNJWkUsICZy ZmRzLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0diApOwotCWRlYnVnKEYxMDEsImluX2No ayBCU0Q0NCBzZWxlY3QiLCIiLG4pOwotI2Vsc2UKLSNpZmRlZiBCU0Q0MwotCW4gPSBzZWxlY3Qo IEZEX1NFVFNJWkUsICZyZmRzLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0diApOwotCWRl YnVnKEYxMDEsImluX2NoayBCU0Q0MyBzZWxlY3QiLCIiLG4pOwotI2Vsc2UKLSNpZmRlZiBTT0xB UklTCi0JbiA9IHNlbGVjdCggRkRfU0VUU0laRSwgJnJmZHMsIChmZF9zZXQgKikwLCAoZmRfc2V0 ICopMCwgJnR2ICk7Ci0JZGVidWcoRjEwMSwiaW5fY2hrIFNPTEFSSVMgc2VsZWN0IiwiIixuKTsK LSNlbHNlCi0jaWZkZWYgUU5YNgotCW4gPSBzZWxlY3QoIEZEX1NFVFNJWkUsICZyZmRzLCAoZmRf c2V0ICopMCwgKGZkX3NldCAqKTAsICZ0diApOwotCWRlYnVnKEYxMDEsImluX2NoayBRTlg2IHNl bGVjdCIsIiIsbik7Ci0jZWxzZQotI2lmZGVmIFFOWAotCW4gPSBzZWxlY3QoIEZEX1NFVFNJWkUs ICZyZmRzLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0diApOwotCWRlYnVnKEYxMDEsImlu X2NoayBRTlggc2VsZWN0IiwiIixuKTsKLSNlbHNlCi0jaWZkZWYgQ09IRVJFTlQKLQluID0gc2Vs ZWN0KCBGRF9TRVRTSVpFLCAmcmZkcywgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYgKTsK LQlkZWJ1ZyhGMTAxLCJpbl9jaGsgQ09IRVJFTlQgc2VsZWN0IiwiIixuKTsKLSNlbHNlCi0jaWZk ZWYgU1ZSNAotCW4gPSBzZWxlY3QoIEZEX1NFVFNJWkUsICZyZmRzLCAoZmRfc2V0ICopMCwgKGZk X3NldCAqKTAsICZ0diApOwotCWRlYnVnKEYxMDEsImluX2NoayBTVlI0IHNlbGVjdCIsIiIsbik7 Ci0jZWxzZQotI2lmZGVmIF9fbGludXhfXwotCW4gPSBzZWxlY3QoIEZEX1NFVFNJWkUsICZyZmRz LCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0diApOwotCWRlYnVnKEYxMDEsImluX2NoayBM SU5VWCBzZWxlY3QiLCIiLG4pOwotI2lmZGVmIE9TRgotCW4gPSBzZWxlY3QoIEZEX1NFVFNJWkUs ICZyZmRzLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0diApOwotCWRlYnVnKEYxMDEsImlu X2NoayBPU0Ygc2VsZWN0IiwiIixuKTsKLSNlbHNlCi0JbiA9IHNlbGVjdCggRkRfU0VUU0laRSwg JnJmZHMsIChpbnQgKikwLCAoaW50ICopMCwgJnR2ICk7Ci0JZGVidWcoRjEwMSwiaW5fY2hrIGNh dGNoYWxsIHNlbGVjdCIsIiIsbik7Ci0jZW5kaWYgLyogT1NGICovCi0jZW5kaWYgLyogX19saW51 eF9fICovCi0jZW5kaWYgLyogU1ZSNCAqLwotI2VuZGlmIC8qIENPSEVSRU5UICovCi0jZW5kaWYg LyogUU5YICovCi0jZW5kaWYgLyogUU5YNiAqLwotI2VuZGlmIC8qIFNPTEFSSVMgKi8KLSNlbmRp ZiAvKiBCU0Q0MyAqLwotI2VuZGlmIC8qIEJTRDQ0ICovCi0jZW5kaWYgLyogQkVMTFYxMCAqLwot I2VuZGlmIC8qIFBsYW45ICovCi0gICAgfQotI2Vsc2UgIC8qIE5vdCBTRUxFQ1QgKi8KLSNpZmRl ZiBDS19QT0xMCi0gICAgewotICAgICAgc3RydWN0IHBvbGxmZCBwZmQ7Ci0KLSAgICAgIHBmZC5m ZCA9IGZkOwotICAgICAgcGZkLmV2ZW50cyA9IFBPTExJTjsKLSAgICAgIHBmZC5yZXZlbnRzID0g MDsKLSAgICAgIG4gPSBwb2xsKCZwZmQsIDEsIDApOwotICAgICAgZGVidWcoRjEwMSwiaW5fY2hr IHBvbGwiLCIiLG4pOwotICAgICAgaWYgKChuID4gMCkgJiYgKHBmZC5yZXZlbnRzICYgUE9MTElO KSkKLQluID0gMTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfUE9MTCAqLwotI2VuZGlmIC8qIFNFTEVD VCAqLwotI2VuZGlmIC8qIFJEQ0hLICovCi0jZW5kaWYgLyogUFJPVlgxICovCi0jZW5kaWYgLyog VjcgKi8KLSNlbmRpZiAvKiBGSU9OUkVBRCAqLwotCi0vKiBGcm9tIGhlcmUgZG93biwgdHJlYXQg Y29uc29sZSBhbmQgY29tbXVuaWNhdGlvbiBkZXZpY2UgZGlmZmVyZW50bHkuLi4gKi8KLQotICAg IGlmIChjaGFubmVsID09IDApIHsJCQkvKiBDb25zb2xlICovCi0KLSNpZmRlZiBTVk9SUE9TSVgK LSNpZm5kZWYgRklPTlJFQUQKLSNpZm5kZWYgU0VMRUNUCi0jaWZuZGVmIENLX1BPTEwKLSNpZm5k ZWYgUkRDSEsKLS8qCi0gIFRoaXMgaXMgdGhlIGhpZGVvdXMgaGFjayB1c2VkIGluIFN5c3RlbSBW IGFuZCBQT1NJWCBzeXN0ZW1zIHRoYXQgZG9uJ3QKLSAgc3VwcG9ydCBGSU9OUkVBRCwgcmRjaGso KSwgc2VsZWN0KCksIHBvbGwoKSwgZXRjLCBpbiB3aGljaCB0aGUgdXNlcidzCi0gIENPTk5FQ1Qt bW9kZSBlc2NhcGUgY2hhcmFjdGVyIGlzIGF0dGFjaGVkIHRvIFNJR1FVSVQuICBVc2VkLCBvYnZp b3VzbHksCi0gIG9ubHkgb24gdGhlIGNvbnNvbGUuCi0qLwotCWlmIChjb25lc2MpIHsJCQkvKiBF c2NhcGUgY2hhcmFjdGVyIHR5cGVkID09IFNJR1FVSVQgKi8KLQkgICAgZGVidWcoRjEwMCwiaW5f Y2hrIGNvbmVzYyIsIiIsY29uZXNjKTsKLQkgICAgY29uZXNjID0gMDsKLQkgICAgc2lnbmFsKFNJ R1FVSVQsZXNjdHJwKTsJLyogUmVzdG9yZSBzaWduYWwgKi8KLQkgICAgbiArPSAxOwotCX0KLSNl bmRpZiAvKiBSRENISyAqLwotI2VuZGlmIC8qIENLX1BPTEwgKi8KLSNlbmRpZiAvKiBTRUxFQ1Qg Ki8KLSNlbmRpZiAvKiBGSU9OUkVBRCAqLwotI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwotCi0JcmV0 dXJuKG4pOwkJCS8qIERvbmUgd2l0aCBjb25zb2xlICovCi0gICAgfQotCi0gICAgaWYgKGNoYW5u ZWwgIT0gMCkgewkJCS8qIENvbW11bmljYXRpb25zIGNvbm5lY3Rpb24gKi8KLQotI2lmZGVmIE1Z UkVBRAotI2lmbmRlZiBGSU9OUkVBRAotLyoKLSAgc2VsZWN0KCkgb3IgcmRjaGsoKSwgZXRjLCBo YXMgdG9sZCB1cyB0aGF0IHNvbWV0aGluZyBpcyB3YWl0aW5nLCBidXQgd2UKLSAgZG9uJ3Qga25v dyBob3cgbXVjaC4gIFNvIHdlIGRvIGEgcmVhZCB0byBnZXQgaXQgYW5kIHRoZW4gd2Uga25vdy4g IE5vdGU6Ci0gIFRoaXMgcmVhZCBpcyBOT1Qgbm9uYmxvY2tpbmcgaWYgbm90aGluZyBpcyB0aGVy ZSAoYmVjYXVzZSBvZiBWTUlOPTEpLCBidXQKLSAgaXQgc2hvdWxkIGJlIHNhZmUgaW4gdGhpcyBj YXNlIHNpbmNlIHRoZSBPUyB0ZWxscyB1cyBhdCBsZWFzdCBvbmUgYnl0ZSBpcwotICB3YWl0aW5n IHRvIGJlIHJlYWQsIGFuZCBNWVJFQUQgcmVhZHMgcmV0dXJuIGFzIG11Y2ggYXMgaXMgdGhlcmUg d2l0aG91dAotICB3YWl0aW5nIGZvciBhbnkgbW9yZS4gIENvbnRyb2xsZWQgdGVzdHMgb24gU29s YXJpcyBhbmQgVW5peHdhcmUgKHdpdGgKLSAgRklPTlJFQUQgZGVsaWJlcmF0ZWx5IHVuZGVmaW5l ZCkgc2hvdyB0aGlzIHRvIGJlIHRydWUuCi0qLwotCWRlYnVnKEYxMDEsImluX2NoayByZWFkIG15 X2NvdW50IiwiIixteV9jb3VudCk7Ci0JZGVidWcoRjEwMSwiaW5fY2hrIHJlYWQgbiIsIiIsbik7 Ci0JaWYgKG4gPiAwICYmIG15X2NvdW50ID09IDApIHsKLQkgICAgLyogVGhpcyBhbHNvIGNhdGNo ZXMgZGlzY29ubmVjdHMgZXRjICovCi0JICAgIC8qIERvIHdoYXQgbXlnZXRidWYgZG9lcyBleGNl cHQgZG9uJ3QgZ3JhYiBhIGNoYXJhY3RlciAqLwotCSAgICBteV9jb3VudCA9IG15ZmlsbGJ1Zigp OwotCSAgICBteV9pdGVtID0gLTE7CQkvKiBeXl4gKi8KLQkgICAgZGVidWcoRjEwMSwiaW5fY2hr IG15ZmlsbGJ1ZiBteV9jb3VudCIsIiIsbXlfY291bnQpOwotCSAgICBpZiAobXlfY291bnQgPCAw KQotCSAgICAgIHJldHVybigtMSk7Ci0JICAgIGVsc2UKLQkgICAgICBuID0gMDsJCQkvKiBOQjog biBpcyByZXBsYWNlZCBieSBteV9jb3VudCAqLwotCX0KLSNlbmRpZiAvKiBGSU9OUkVBRCAqLwot LyoKLSAgSGVyZSB3ZSBhZGQgd2hhdGV2ZXIgd2UgdGhpbmsgaXMgdW5yZWFkIHRvIHdoYXQgaXMg c3RpbGwgaW4gb3VyCi0gIG91ciBpbnRlcm5hbCBidWZmZXIuICBUaHVzIHRoZSBpbXBvcnRhbmNl IG9mIHNldHRpbmcgbiB0byAwIGp1c3QgYWJvdmUuCi0qLwotCWRlYnVnKEYxMDEsImluX2NoayBt eV9jb3VudCIsIiIsbXlfY291bnQpOwotCWRlYnVnKEYxMDEsImluX2NoayBuIiwiIixuKTsKLQlp ZiAobXlfY291bnQgPiAwKQotCSAgbiArPSBteV9jb3VudDsKLSNlbmRpZiAvKiBNWVJFQUQgKi8K LSAgICB9Ci0gICAgZGVidWcoRjEwMSwiaW5fY2hrIHJlc3VsdCIsIiIsbik7Ci0KLSAgICAvKiBF cnJvcnMgaGVyZSBkb24ndCBwcm92ZSB0aGUgY29ubmVjdGlvbiBoYXMgZHJvcHBlZCBzbyBqdXN0 IHNheSAwICovCi0KLSAgICByZXR1cm4obiA8IDAgPyAwIDogbik7Ci19Ci0KLQotLyogIFQgVCBD IEggSyAgLS0gIFRlbGwgaG93IG1hbnkgY2hhcmFjdGVycyBhcmUgd2FpdGluZyBpbiB0dHkgaW5w dXQgYnVmZmVyICAqLwotCi1pbnQKLXR0Y2hrKCkgewotICAgIGludCBmZDsKLSNpZmRlZiBORVRD TUQKLSAgICBpZiAodHRwaXBlKQotICAgICAgZmQgPSBmZGluOwotICAgIGVsc2UKLSNlbmRpZiAv KiBORVRDTUQgKi8KLSAgICAgIGZkID0gdHR5ZmQ7Ci0gICAgcmV0dXJuKGluX2NoaygxLGZkKSk7 Ci19Ci0KLS8qICBUIFQgWCBJIE4gIC0tICBHZXQgbiBjaGFyYWN0ZXJzIGZyb20gdHR5IGlucHV0 IGJ1ZmZlciAgKi8KLQotLyogIFJldHVybnMgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWN0dWFsbHkg Z290dGVuLCBvciAtMSBvbiBmYWlsdXJlICAqLwotCi0vKiAgSW50ZW5kZWQgZm9yIHVzZSBvbmx5 IHdoZW4gaXQgaXMga25vd24gdGhhdCBuIGNoYXJhY3RlcnMgYXJlIGFjdHVhbGx5ICovCi0vKiAg QXZhaWxhYmxlIGluIHRoZSBpbnB1dCBidWZmZXIuICAqLwotCi1pbnQKLXR0eGluKG4sYnVmKSBp bnQgbjsgQ0hBUiAqYnVmOyB7Ci0gICAgcmVnaXN0ZXIgaW50IHggPSAwLCBjID0gLTI7Ci0jaWZk ZWYgVFRMRUJVRgotICAgIHJlZ2lzdGVyIGludCBpID0gMDsKLSNlbmRpZiAvKiBUVExFQlVGICov Ci0gICAgaW50IGZkOwotCi0gICAgaWYgKG4gPCAxKQkJCQkvKiBOb3RoaW5nIHRvIGRvICovCi0g ICAgICByZXR1cm4oMCk7Ci0KLSNpZmRlZiBUVExFQlVGCi0gICAgaWYgKHR0cHVzaCA+PSAwKSB7 Ci0gICAgICAgIGJ1ZlswXSA9IHR0cHVzaDsJCS8qIFB1dCBwdXNoZWQgY2hhciBpbiBidWZmZXIq LwotICAgICAgICB0dHB1c2ggPSAtMTsJCQkvKiBDbGVhciB0aGUgcHVzaCBidWZmZXIgKi8KLSAg ICAgICAgaWYgKHR0Y2hrKCkgPiAwKQotCSAgcmV0dXJuKHR0eGluKG4tMSwgJmJ1ZlsxXSkgKyAx KTsKLSAgICAgICAgZWxzZQotCSAgcmV0dXJuKDEpOwotICAgIH0KLSAgICBpZiAobGVfZGF0YSkg ewotICAgICAgICB3aGlsZSAobGVfaW5idWYoKSA+IDApIHsKLQkgICAgaWYgKGxlX2dldGNoYXIo JmJ1ZltpXSkpIHsKLSAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICAgICAgbi0tOwot ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICh0dGNoaygpID4gMCkKLQkgIHJl dHVybih0dHhpbihuLCZidWZbaV0pK2kpOwotICAgICAgICBlbHNlCi0JICByZXR1cm4oaSk7Ci0g ICAgfQotI2VuZGlmIC8qIFRUTEVCVUYgKi8KLQotI2lmZGVmIE5FVENNRAotICAgIGlmICh0dHBp cGUpCi0gICAgICBmZCA9IGZkaW47Ci0gICAgZWxzZQotI2VuZGlmIC8qIE5FVENNRCAqLwotICAg ICAgZmQgPSB0dHlmZDsKLQotI2lmZGVmIFNVTlgyNQotICAgIGlmIChuZXRjb25uICYmICh0dG5l dCA9PSBORVRfU1gyNSkpCS8qIFguMjUgY29ubmVjdGlvbiAqLwotICAgICAgcmV0dXJuKHgyNXhp bihuLGJ1ZikpOwotI2VuZGlmIC8qIFNVTlgyNSAqLwotCi0jaWZkZWYgSUJNWDI1Ci0gICAgLyog cmllaG06IHBvc3NpYmx5IG5vdCBuZWVkZWQuIFRlc3Qgd29ya2VkIHdpdGggbm9ybWFsIHJlYWRz IGFuZCB3cml0ZXMgKi8KLSAgICBpZiAobmV0Y29ubiAmJiAodHRuZXQgPT0gTkVUX0lYMjUpKQl7 IC8qIFguMjUgY29ubmVjdGlvbiAqLwotCXggPSB4MjV4aW4obixidWYpOwotCWlmICh4ID4gMCkg YnVmW3hdID0gJ1wwJzsKLQlyZXR1cm4oeCk7Ci0gICAgfQotI2VuZGlmIC8qIElCTVgyNSAqLwot Ci0jaWZkZWYgTVlSRUFECi0gICAgZGVidWcoRjEwMSwidHR4aW4gTVlSRUFEIiwiIixuKTsKLSAg ICB3aGlsZSAoeCA8IG4pIHsKLQljID0gbXlyZWFkKCk7Ci0JaWYgKGMgPCAwKSB7Ci0JICAgIGRl YnVnKEYxMDEsInR0eGluIG15cmVhZCByZXR1cm5zIiwiIixjKTsKLQkgICAgaWYgKGMgPT0gLTMp IHggPSAtMTsKLQkgICAgYnJlYWs7Ci0gICAgICAgIH0KLQlidWZbeCsrXSA9IGMgJiB0dHBtc2s7 Ci0jaWZkZWYgUkxPR0NPREUKLSNpZmRlZiBDS19LRVJCRVJPUwotICAgICAgICAvKiBJdCBpcyBp bXBvc3NpYmxlIHRvIGtub3cgaG93IG1hbnkgY2hhcmFjdGVycyBhcmUgd2FpdGluZyAqLwotICAg ICAgICAvKiB0byBiZSByZWFkIHdoZW4geW91IGFyZSB1c2luZyBFbmNyeXB0ZWQgUmxvZ2luIG9y IFNTTCAgICAqLwotICAgICAgICAvKiBhcyB0aGUgdHJhbnNwb3J0IHNpbmNlIHRoZSBudW1iZXIg b2YgcmVhbCBkYXRhIGJ5dGVzICAgICAqLwotICAgICAgICAvKiBjYW4gYmUgZ3JlYXRlciBvciBs ZXNzIHRoYW4gdGhlIG51bWJlciBvZiBieXRlcyBvbiB0aGUgICAqLwotICAgICAgICAvKiB3aXJl IHdoaWNoIGlzIHdoYXQgdHRjaGsoKSByZXR1cm5zLiAgICAgICAgICAgICAgICAgICAgICAqLwot ICAgICAgICBpZiAobmV0Y29ubiAmJiAodHRucHJvdG8gPT0gTlBfRUs0TE9HSU4gfHwgdHRucHJv dG8gPT0gTlBfRUs1TE9HSU4pKQotCSAgaWYgKHR0Y2hrKCkgPD0gMCkKLQkgICAgYnJlYWs7Ci0j ZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotI2lmZGVmIENL X1NTTAotICAgICAgICBpZiAoc3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykKLQkg IGlmICh0dGNoaygpIDw9IDApCi0JICAgIGJyZWFrOwotI2VuZGlmIC8qIENLX1NTTCAqLwotICAg IH0KLSNlbHNlCi0gICAgZGVidWcoRjEwMSwidHR4aW4gUkVBRCIsIiIsbik7Ci0gICAgeCA9IHJl YWQoZmQsYnVmLG4pOwotICAgIGZvciAoYyA9IDA7IGMgPCBuOyBjKyspCQkvKiBTdHJpcCBhbnkg cGFyaXR5ICovCi0gICAgICBidWZbY10gJj0gdHRwbXNrOwotI2VuZGlmIC8qIE1ZUkVBRCAqLwot Ci0gICAgZGVidWcoRjEwMSwidHR4aW4geCIsIiIseCk7CQkvKiBEb25lICovCi0gICAgaWYgKHgg PiAwKSBidWZbeF0gPSAnXDAnOwotICAgIGlmICh4IDwgMCkgeCA9IC0xOwotICAgIHJldHVybih4 KTsKLX0KLQotLyogIFQgVCBPIEwgIC0tICBXcml0ZSBzdHJpbmcgcywgbGVuZ3RoIG4sIHRvIGNv bW11bmljYXRpb24gZGV2aWNlLiAgKi8KLS8qCi0gIFJldHVybnM6Ci0gICA+PSAwIG9uIHN1Y2Nl c3MsIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFjdHVhbGx5IHdyaXR0ZW4uCi0gICAtMSBvbiBmYWls dXJlLgotKi8KLSNpZmRlZiBDS19FTkNSWVBUSU9OCi1DSEFSICogeHBhY2tldCA9IE5VTEw7Ci1p bnQgbnhwYWNrZXQgPSAwOwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLQotI2RlZmluZSBU VE9MTUFYVCA1Ci1pbnQKLXR0b2wocyxuKSBpbnQgbjsgQ0hBUiAqczsgewotICAgIGludCB4LCBs ZW4sIHRyaWVzLCBmZDsKLSNpZmRlZiBDS1hYQ0hBUgotICAgIGV4dGVybiBpbnQgZGJsZmxhZzsJ CQkvKiBGb3IgU0VUIFNFTkQgRE9VQkxFLUNIQVJBQ1RFUiAqLwotICAgIGV4dGVybiBzaG9ydCBk Ymx0W107Ci0gICAgQ0hBUiAqcCA9IE5VTEwsICpwMiwgKnMyLCBjOwotICAgIGludCBuMiA9IDA7 Ci0jZW5kaWYgLyogQ0tYWENIQVIgKi8KLQotICAgIGlmICh0dHlmZCA8IDApCQkJLyogTm90IG9w ZW4/ICovCi0gICAgICByZXR1cm4oLTMpOwotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykg ewotCS8qIGRlYnVnKEYxMDEsInR0b2wgdHR5ZmQiLCIiLHR0eWZkKTsgKi8KLQlja2hleGR1bXAo InR0b2wgcyIscyxuKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotI2lmZGVmIE5FVENN RAotICAgIGlmICh0dHBpcGUpCi0gICAgICBmZCA9IGZkb3V0OwotICAgIGVsc2UKLSNlbmRpZiAv KiBORVRDTUQgKi8KLSAgICAgIGZkID0gdHR5ZmQ7Ci0KLSNpZmRlZiBDS1hYQ0hBUgotLyogIERv dWJsZSBhbnkgY2hhcmFjdGVycyB0aGF0IG11c3QgYmUgZG91YmxlZC4gICovCi0gICAgZGVidWco RjEwMSwidHRvbCBkYmxmbGFnIiwiIixkYmxmbGFnKTsKLSAgICBpZiAoZGJsZmxhZykgewotCXAg PSAoQ0hBUiAqKSBtYWxsb2MobiArIG4gKyAxKTsKLQlpZiAocCkgewotCSAgICBzMiA9IHM7Ci0J ICAgIHAyID0gcDsKLQkgICAgbjIgPSAwOwotCSAgICB3aGlsZSAoKnMyKSB7Ci0JCWMgPSAqczIr KzsKLQkJKnAyKysgPSBjOwotCQluMisrOwotCQlpZiAoZGJsdFsodW5zaWduZWQpIGNdICYgMikg ewotCQkgICAgKnAyKysgPSBjOwotCQkgICAgbjIrKzsKLQkJfQotCSAgICB9Ci0JICAgIHMgPSBw OwotCSAgICBuID0gbjI7Ci0JICAgIHNbbl0gPSAnXDAnOwotCX0KLSNpZmRlZiBERUJVRwotICAg ICAgICBja2hleGR1bXAoInR0b2wgZG91YmxlZCBzIixzLG4pOwotI2VuZGlmIC8qIERFQlVHICov Ci0gICAgfQotI2VuZGlmIC8qIENLWFhDSEFSICovCi0KLSAgICB0cmllcyA9IFRUT0xNQVhUOwkJ CS8qIEFsbG93IHVwIHRvIHRoaXMgbWFueSB0cmllcyAqLwotICAgIGxlbiA9IG47CQkJCS8qIFJl bWVtYmVyIG9yaWdpbmFsIGxlbmd0aCAqLwotCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotLyoKLSAg VGhpcyBpcyB0byBhdm9pZCBlbmNyeXB0aW5nIGEgcGFja2V0IHRoYXQgaXMgYWxyZWFkeSBlbmNy eXB0ZWQsIGUuZy4KLSAgd2hlbiB3ZSByZXNlbmQgYSBwYWNrZXQgZGlyZWN0bHkgb3V0IG9mIHRo ZSBwYWNrZXQgYnVmZmVyLCBhbmQgYWxzbyB0bwotICBhdm9pZCBlbmNyeXB0aW5nIGEgY29uc3Rh bnQgKGxpdGVyYWwpIHN0cmluZywgd2hpY2ggY2FuIGNhdXNlIGEgbWVtb3J5Ci0gIGZhdWx0Lgot Ki8KLSAgICBpZiAoVEVMT1BUX01FKFRFTE9QVF9FTkNSWVBUSU9OKSkgewotCWludCB4OwotCWlm IChueHBhY2tldCA8IG4pIHsKLQkgICAgaWYgKHhwYWNrZXQpIHsKLQkJZnJlZSh4cGFja2V0KTsK LQkJeHBhY2tldCA9IE5VTEw7Ci0JCW54cGFja2V0ID0gMDsKLQkgICAgfQotCSAgICB4ID0gbiA+ IDEwMjQwID8gbiA6IDEwMjQwOwotCSAgICB4cGFja2V0ID0gKENIQVIgKiltYWxsb2MoeCk7Ci0J ICAgIGlmICgheHBhY2tldCkgewotCQlmcHJpbnRmKHN0ZGVyciwidHRvbCBtYWxsb2MgZmFpbHVy ZVxuIik7Ci0JCXJldHVybigtMSk7Ci0JICAgIH0gZWxzZQotCSAgICAgIG54cGFja2V0ID0geDsK LQl9Ci0JbWVtY3B5KChjaGFyICopeHBhY2tldCwoY2hhciAqKXMsbik7Ci0JcyA9IHhwYWNrZXQ7 Ci0JY2tfdG5fZW5jcnlwdCgoY2hhciAqKXMsbik7Ci0gICAgfQotI2VuZGlmIC8qIENLX0VOQ1JZ UFRJT04gKi8KLQotICAgIHdoaWxlIChuID4gMCAmJgotCSAgICh0cmllcy0tID4gMAotI2lmZGVm IENLX0VOQ1JZUFRJT04KLQkgICAgLyoga2VlcCB0cnlpbmcgaWYgd2UgYXJlIGVuY3J5cHRpbmcg Ki8KLQkgICAgfHwgVEVMT1BUX01FKFRFTE9QVF9FTkNSWVBUSU9OKQotI2VuZGlmIC8qIENLX0VO Q1JZUFRJT04gKi8KLSAgICAgICAgICAgICkpIHsJCQkvKiBCZSBwZXJzaXN0ZW50ICovCi0JZGVi dWcoRjEwMSwidHRvbCB0cnkiLCIiLFRUT0xNQVhUIC0gdHJpZXMpOwotI2lmZGVmIEJFT1NPUkJF Qk9YCi0gICAgICAgIGlmIChuZXRjb25uICYmICF0dHBpcGUgJiYgIXR0cHR5KQotCSAgeCA9IG5l dHRvbCgoY2hhciAqKXMsbik7CS8qIFdyaXRlIHN0cmluZyB0byBkZXZpY2UgKi8KLSAgICAgICAg ZWxzZQotI2VuZGlmIC8qIEJFT1NPUkJFQk9YICovCi0jaWZkZWYgSUJNWDI1Ci0JICBpZiAodHRu ZXQgPT0gTkVUX0lYMjUpCi0JICAgIC8qCi0JICAgICAqIHRoaXMgaXMgYSBtb3JlIGNvbnRyb2xs ZWQgd2F5IG9mIHdyaXRpbmcgdG8gWDI1Ci0JICAgICAqIFNUUkVBTVMsIGhvd2V2ZXIgd3JpdGUg c2hvdWxkIGFsc28gd29yayEKLQkgICAgICovCi0JICAgIHggPSB4MjV3cml0ZSh0dHlmZCwgcywg bik7Ci0JICBlbHNlCi0jZW5kaWYgLyogSUJNWDI1ICovCi0jaWZkZWYgQ0tfU1NMCi0JICAgIGlm IChzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSB7Ci0JCWludCBlcnJvcjsKLQkJ LyogV3JpdGUgdXNpbmcgU1NMICovCi0gICAgICAgICAgICAgICAgc3NsX3JldHJ5OgotCQlpZiAo c3NsX2FjdGl2ZV9mbGFnKQotICAgICAgICAgICAgICAgICAgeCA9IFNTTF93cml0ZShzc2xfY29u LCBzLCBuKTsKLQkJZWxzZQotICAgICAgICAgICAgICAgICAgeCA9IFNTTF93cml0ZSh0bHNfY29u LCBzLCBuKTsKLQkJc3dpdGNoIChTU0xfZ2V0X2Vycm9yKHNzbF9hY3RpdmVfZmxhZz9zc2xfY29u OnRsc19jb24seCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9OT05FOgotICAg ICAgICAgICAgICAgICAgICBpZiAoeCA9PSBuKQotCQkgICAgICByZXR1cm4obGVuKTsKLSAgICAg ICAgICAgICAgICAgICAgcyArPSB4OwotICAgICAgICAgICAgICAgICAgICBuIC09IHg7Ci0gICAg ICAgICAgICAgICAgICAgIGdvdG8gc3NsX3JldHJ5OwotCQkgIGNhc2UgU1NMX0VSUk9SX1dBTlRf V1JJVEU6Ci0JCSAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgotCQkgICAgeCA9IDA7Ci0JCSAg ICBicmVhazsKLQkJICBjYXNlIFNTTF9FUlJPUl9TWVNDQUxMOgotICAgICAgICAgICAgICAgICAg ICBpZiAoeCAhPSAwKQotCQkgICAgICByZXR1cm4oLTEpOwotCQkgIGNhc2UgU1NMX0VSUk9SX1dB TlRfWDUwOV9MT09LVVA6Ci0JCSAgY2FzZSBTU0xfRVJST1JfU1NMOgotCQkgIGNhc2UgU1NMX0VS Uk9SX1pFUk9fUkVUVVJOOgotCQkgIGRlZmF1bHQ6Ci0JCSAgICB0dGNsb3MoMCk7Ci0JCSAgICBy ZXR1cm4oLTMpOwotCQl9Ci0JICAgIH0gZWxzZQotI2VuZGlmIC8qIENLX1NTTCAqLwotI2lmZGVm IENLX0tFUkJFUk9TCi0jaWZkZWYgS1JCNAotI2lmZGVmIFJMT0dDT0RFCi0JICAgIGlmICh0dG5w cm90byA9PSBOUF9FSzRMT0dJTikgewotCQlyZXR1cm4oa3JiNF9kZXNfd3JpdGUodHR5ZmQscyxu KSk7Ci0JICAgIH0gZWxzZQotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0jZW5kaWYgLyogS1JCNCAq LwotI2lmZGVmIEtSQjUKLSNpZmRlZiBSTE9HQ09ERQotICAgICAgICAgICAgaWYgKHR0bnByb3Rv ID09IE5QX0VLNUxPR0lOKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKGtyYjVfZGVzX3dyaXRl KHR0eWZkLChjaGFyICopcyxuLDApKTsKLSAgICAgICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIFJM T0dDT0RFICovCi0jaWZkZWYgS1JCNV9VMlUKLSAgICAgICAgICAgIGlmICh0dG5wcm90byA9PSBO UF9LNVUyVSkgewotICAgICAgICAgICAgICAgIHJldHVybihrcmI1X3UydV93cml0ZSh0dHlmZCwo Y2hhciAqKXMsbikpOwotICAgICAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyogS1JCNV9VMlUgKi8K LSNlbmRpZiAvKiBLUkI1ICovCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLQkgICAgICB4ID0g d3JpdGUoZmQscyxuKTsJLyogV3JpdGUgc3RyaW5nIHRvIGRldmljZSAqLwotCi0JaWYgKHggPT0g bikgewkJCS8qIFdvcmtlZD8gKi8KLQkgICAgZGVidWcoRjEwMSwidHRvbCBvayIsIiIseCk7CS8q IE9LICovCi0jaWZkZWYgQ0tYWENIQVIKLQkgICAgaWYgKHApIGZyZWUocCk7Ci0jZW5kaWYgLyog Q0tYWENIQVIgKi8KLQkgICAgcmV0dXJuKGxlbik7CQkvKiBEb25lICovCi0JfSBlbHNlIGlmICh4 IDwgMCkgewkJLyogTm8sIGdvdCBlcnJvcj8gKi8KLQkgICAgZGVidWcoRjEwMSwidHRvbCB3cml0 ZSBlcnJvciIsIiIsZXJybm8pOwotI2lmZGVmIEVXT1VMREJMT0NLCi0JICAgIGlmIChlcnJubyA9 PSBFV09VTERCTE9DSykgewotCQltc2xlZXAoMTApOwotCQljb250aW51ZTsKLQkgICAgfSBlbHNl Ci0jZW5kaWYgLyogRVdPVUxEQkxPQ0sgKi8KLSNpZmRlZiBUQ1BTT0NLRVQKLQkgICAgaWYgKG5l dGNvbm4gJiYgdHRuZXQgPT0gTkVUX1RDUEIpIHsKLQkJZGVidWcoRjEwMSwidHRvbCBUQ1AgZXJy b3IiLCIiLGVycm5vKTsKLQkJdHRjbG9zKDApOwkJLyogQ2xvc2UgdGhlIGNvbm5lY3Rpb24uICov Ci0JCXggPSAtMzsKLQkgICAgfQotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2lmZGVmIENLWFhD SEFSCi0JICAgIGlmIChwKSBmcmVlKHApOwotI2VuZGlmIC8qIENLWFhDSEFSICovCi0JICAgIHJl dHVybih4KTsKLQl9IGVsc2UgewkJCS8qIE5vIGVycm9yLCBzbyBwYXJ0aWFsIHN1Y2Nlc3MgKi8K LQkgICAgZGVidWcoRjEwMSwidHRvbCBwYXJ0aWFsIiwiIix4KTsgLyogVGhpcyBuZXZlciBoYXBw ZW5zICovCi0JICAgIHMgKz0geDsJCQkvKiBQb2ludCB0byBwYXJ0IG5vdCB3cml0dGVuIHlldCAq LwotCSAgICBuIC09IHg7CQkJLyogQWRqdXN0IGxlbmd0aCAqLwotCSAgICBpZiAoeCA+IDApIG1z bGVlcCgxMCk7CS8qIFdhaXQgMTAgbXNlYyAqLwotCX0JCQkJLyogR28gYmFjayBhbmQgdHJ5IGFn YWluICovCi0gICAgfQotI2lmZGVmIENLWFhDSEFSCi0gICAgaWYgKHApIGZyZWUocCk7Ci0jZW5k aWYgLyogQ0tYWENIQVIgKi8KLSAgICByZXR1cm4obiA8IDEgPyBsZW4gOiAtMSk7CQkvKiBSZXR1 cm4gdGhlIHJlc3VsdHMgKi8KLX0KLQotLyogIFQgVCBPIEMgIC0tICBPdXRwdXQgYSBjaGFyYWN0 ZXIgdG8gdGhlIGNvbW11bmljYXRpb24gbGluZSAgKi8KLQotLyoKLSBUaGlzIGZ1bmN0aW9uIHNo b3VsZCBvbmx5IGJlIHVzZWQgZm9yIGludGVyYWN0aXZlLCBjaGFyYWN0ZXItbW9kZSBvcGVyYXRp b25zLAotIGxpa2UgdGVybWluYWwgY29ubmVjdGlvbiwgc2NyaXB0IGV4ZWN1dGlvbiwgZGlhbGVy IGkvbywgd2hlcmUgdGhlIG92ZXJoZWFkCi0gb2YgdGhlIHNpZ25hbHMgYW5kIGFsYXJtcyBkb2Vz IG5vdCBjcmVhdGUgYSBib3R0bGVuZWNrLgotKi8KLWludAotI2lmZGVmIENLX0FOU0lDCi10dG9j KGNoYXIgYykKLSNlbHNlCi10dG9jKGMpIGNoYXIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot LyogdHRvYyAqLyB7Ci0jZGVmaW5lIFRUT0NfVE1PIDE1CQkJLyogVGltZW91dCBpbiBjYXNlIHdl IGdldCBzdHVjayAqLwotICAgIGludCB4eCwgZmQ7Ci0KLSAgICBpZiAodHR5ZmQgPCAwKQkJCS8q IENoZWNrIGZvciBub3Qgb3Blbi4gKi8KLSAgICAgIHJldHVybigtMSk7Ci0KLSNpZmRlZiBORVRD TUQKLSAgICBpZiAodHRwaXBlKQotICAgICAgZmQgPSBmZG91dDsKLSAgICBlbHNlCi0jZW5kaWYg LyogTkVUQ01EICovCi0gICAgICBmZCA9IHR0eWZkOwotCi0gICAgYyAmPSAweGZmOwotICAgIC8q IGRlYnVnKEYxMDEsInR0b2MiLCIiLChDSEFSKSBjKTsgKi8KLSAgICBzYXZhbCA9IHNpZ25hbChT SUdBTFJNLHRpbWVyaCk7CS8qIEVuYWJsZSB0aW1lciBpbnRlcnJ1cHQgKi8KLSAgICB4eCA9IGFs YXJtKFRUT0NfVE1PKTsJCS8qIGZvciB0aGlzIG1hbnkgc2Vjb25kcy4gKi8KLSAgICBpZiAoeHgg PCAwKSB4eCA9IDA7CQkJLyogU2F2ZSBvbGQgYWxhcm0gdmFsdWUuICovCi0gICAgLyogZGVidWco RjEwMSwidHRvYyBhbGFybSIsIiIseHgpOyAqLwotICAgIGlmICgKLSNpZmRlZiBDS19QT1NJWF9T SUcKLQlzaWdzZXRqbXAoc2pidWYsMSkKLSNlbHNlCi0Jc2V0am1wKHNqYnVmKQotI2VuZGlmIC8q IENLX1BPU0lYX1NJRyAqLwotCSkgewkJLyogVGltZXIgd2VudCBvZmY/ICovCi0JdHRpbW9mZigp OwkJCS8qIFllcywgY2FuY2VsIHRoaXMgYWxhcm0uICovCi0JaWYgKHh4IC0gVFRPQ19UTU8gPiAw KSBhbGFybSh4eCAtIFRUT0NfVE1PKTsgLyogUmVzdG9yZSBwcmV2aW91cyBvbmUgKi8KLSAgICAg ICAgLyogZGVidWcoRjEwMCwidHRvYyB0aW1lb3V0IiwiIiwwKTsgKi8KLSNpZmRlZiBORVRDT05O Ci0JaWYgKCFuZXRjb25uKSB7Ci0jZW5kaWYgLyogTkVUQ09OTiAqLwotCSAgICBkZWJ1ZyhGMTAx LCJ0dG9jIHRpbWVvdXQiLCIiLGMpOwotCSAgICBpZiAodHRmbG93ID09IEZMT19YT05YKSB7Ci0J CWRlYnVnKEYxMDEsInR0b2MgZmxvdyIsIiIsdHRmbG93KTsgLyogTWF5YmUgd2UncmUgeG9mZidk ICovCi0jaWZuZGVmIFBsYW45Ci0jaWZkZWYgUE9TSVgKLQkJLyogUE9TSVggd2F5IHRvIHVuc3Rp Y2suICovCi0JCWRlYnVnKEYxMDAsInR0b2MgdGNmbG93IiwiIix0Y2Zsb3codHR5ZmQsVENPT04p KTsKLSNlbHNlCi0jaWZkZWYgQlNENAkJCQkvKiBCZXJrZWxleSB3YXkgdG8gZG8gaXQuICovCi0j aWZkZWYgVElPQ1NUQVJUCi0vKiAuLi4uIFVzZWQgdG8gYmUgImlvY3RsKHR0eWZkLCBUSU9DU1RB UlQsIDApOyIuICBXaG8ga25vd3M/ICovCi0JCXsKLQkJICBpbnQgeCA9IDA7Ci0JCSAgZGVidWco RjEwMSwidHRvYyBUSU9DU1RBUlQiLCIiLGlvY3RsKHR0eWZkLCBUSU9DU1RBUlQsICZ4KSk7Ci0J CX0KLSNlbmRpZiAvKiBUSU9DU1RBUlQgKi8KLSNlbmRpZiAvKiBCU0Q0ICovCi0JCQkJCS8qIElz IHRoZXJlIGEgU3lzIFYgd2F5IHRvIGRvIHRoaXM/ICovCi0jZW5kaWYgLyogUE9TSVggKi8KLSNl bmRpZiAvKiBQbGFuOSAqLwotCSAgICB9Ci0jaWZkZWYgTkVUQ09OTgotICAgICAgICB9Ci0jZW5k aWYgLyogTkVUQ09OTiAqLwotCXJldHVybigtMSk7CQkJLyogUmV0dXJuIGZhaWx1cmUgY29kZS4g Ki8KLSAgICB9IGVsc2UgewotICAgICAgICBpbnQgcmM7Ci0jaWZkZWYgQkVPU09SQkVCT1gKLSNp ZmRlZiBORVRDT05OCi0gICAgICAgIGlmIChuZXRjb25uICYmICF0dHBpcGUgJiYgIXR0cHR5KQot CSAgcmMgPSBuZXR0b2MoYyk7Ci0gICAgICAgIGVsc2UKLSNlbmRpZiAvKiAgQkVPU09SQkVCT1gg Ki8KLSNlbmRpZiAvKiBORVRDT05OICovCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotCSAgaWYgKFRF TE9QVF9NRShURUxPUFRfRU5DUllQVElPTikpCi0JICAgIGNrX3RuX2VuY3J5cHQoJmMsMSk7Ci0j ZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotI2lmZGVmIElCTVgyNQotCS8qIHJpZWhtOiBtYXli ZSB0aGlzIGlzbid0IG5lY2Vzc2FyeSBhZnRlciBhbGwuIFRlc3QgcHJvZ3JhbQotCSAqIHdvcmtl ZCBmaW5lIHdpdGggZGF0YSBiZWluZyBzZW50IGFuZCByZXRyaWV2ZWQgd2l0aCBub3JtYWwKLQkg KiByZWFkJ3MgYW5kIHdyaXRlcyEKLQkgKi8KLQlpZiAodHRuZXQgPT0gTkVUX0lYMjUpCi0JICBy YyA9IHgyNXdyaXRlKHR0eWZkLCZjLDEpOyAvKiBhcyBhYm92ZSBmb3IgWDI1IHN0cmVhbXMgKi8K LQllbHNlCi0jZW5kaWYgLyogSUJNWDI1ICovCi0jaWZkZWYgQ0tfU1NMCi0JICBpZiAoc3NsX2Fj dGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykgewotCSAgICAgIGludCBlcnJvcjsKLQkgICAg ICAvKiBXcml0ZSB1c2luZyBTU0wgKi8KLQkgICAgICBpZiAoc3NsX2FjdGl2ZV9mbGFnKQotICAg ICAgICAgICAgICAgIHJjID0gU1NMX3dyaXRlKHNzbF9jb24sICZjLCAxKTsKLQkgICAgICBlbHNl Ci0gICAgICAgICAgICAgICAgcmMgPSBTU0xfd3JpdGUodGxzX2NvbiwgJmMsIDEpOwotCSAgICAg IHN3aXRjaCAoU1NMX2dldF9lcnJvcihzc2xfYWN0aXZlX2ZsYWc/c3NsX2Nvbjp0bHNfY29uLHJj KSl7Ci0JCWNhc2UgU1NMX0VSUk9SX05PTkU6Ci0JCSAgYnJlYWs7Ci0JCWNhc2UgU1NMX0VSUk9S X1dBTlRfV1JJVEU6Ci0JCWNhc2UgU1NMX0VSUk9SX1dBTlRfUkVBRDoKLQkJICByYyA9IDA7Ci0J CSAgYnJlYWs7Ci0JCWNhc2UgU1NMX0VSUk9SX1NZU0NBTEw6Ci0JCSAgaWYgKHJjICE9IDApCi0J CSAgICByZXR1cm4oLTEpOwotCQljYXNlIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQOgotCQlj YXNlIFNTTF9FUlJPUl9TU0w6Ci0JCWNhc2UgU1NMX0VSUk9SX1pFUk9fUkVUVVJOOgotCQlkZWZh dWx0OgotCQkgIHR0Y2xvcygwKTsKLQkJICByZXR1cm4oLTEpOwotCSAgICAgIH0KLQkgIH0gZWxz ZQotI2VuZGlmIC8qIENLX1NTTCAqLwotI2lmZGVmIENLX0tFUkJFUk9TCi0jaWZkZWYgS1JCNAot I2lmZGVmIFJMT0dDT0RFCi0JICBpZiAodHRucHJvdG8gPT0gTlBfRUs0TE9HSU4pIHsKLQkgICAg ICByYyA9IChrcmI0X2Rlc193cml0ZSh0dHlmZCwoY2hhciAqKSZjLDEpID09IDEpOwotCSAgfSBl bHNlCi0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNlbmRpZiAvKiBLUkI0ICovCi0jaWZkZWYgS1JC NQotI2lmZGVmIFJMT0dDT0RFCi0gICAgICAgICAgaWYgKHR0bnByb3RvID09IE5QX0VLNUxPR0lO KSB7Ci0gICAgICAgICAgICAgIHJjID0gKGtyYjVfZGVzX3dyaXRlKHR0eWZkLCZjLDEsMCkgPT0g MSk7Ci0gICAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNpZmRlZiBLUkI1 X1UyVQotICAgICAgICAgIGlmICh0dG5wcm90byA9PSBOUF9LNVUyVSkgewotICAgICAgICAgICAg ICByYyA9IChrcmI1X3UydV93cml0ZSh0dHlmZCwmYywxKSA9PSAxKTsKLSAgICAgICAgICB9IGVs c2UKLSNlbmRpZiAvKiBLUkI1X1UyVSAqLwotI2VuZGlmIC8qIEtSQjUgKi8KLSNlbmRpZiAvKiBD S19LRVJCRVJPUyAqLwotCSAgICByYyA9IHdyaXRlKGZkLCZjLDEpOwkvKiBUcnkgdG8gd3JpdGUg dGhlIGNoYXJhY3Rlci4gKi8KLQlpZiAocmMgPCAxKSB7CQkJLyogRmFpbGVkICovCi0JICAgIHR0 aW1vZmYoKTsJCQkvKiBUdXJuIG9mZiB0aGUgYWxhcm0uICovCi0JICAgIGFsYXJtKHh4KTsJCQkv KiBSZXN0b3JlIHByZXZpb3VzIGFsYXJtLiAqLwotCSAgICBkZWJ1ZyhGMTAxLCJ0dG9jIGVycm5v IiwiIixlcnJubyk7IC8qIExvZyB0aGUgZXJyb3IsICovCi0JICAgIHJldHVybigtMSk7CQkJLyog YW5kIHJldHVybiB0aGUgZXJyb3IgY29kZS4gKi8KLQl9Ci0gICAgfQotICAgIHR0aW1vZmYoKTsJ CQkJLyogU3VjY2VzcywgdHVybiBvZmYgdGhlIGFsYXJtLiAqLwotICAgIGFsYXJtKHh4KTsJCQkJ LyogUmVzdG9yZSBwcmV2aW91cyBhbGFybS4gKi8KLSAgICByZXR1cm4oMCk7CQkJCS8qIFJldHVy biBnb29kIGNvZGUuICovCi19Ci0KLS8qICBUIFQgSSBOIEwgIC0tICBSZWFkIGEgcmVjb3JkICh1 cCB0byBicmVhayBjaGFyYWN0ZXIpIGZyb20gY29tbSBsaW5lLiAgKi8KLS8qCi0gIFJlYWRzIHVw IHRvICJtYXgiIGNoYXJhY3RlcnMgZnJvbSB0aGUgY29ubmVjdGlvbiwgdGVybWluYXRpbmcgb246 Ci0gICAgKGEpIHRoZSBwYWNrZXQgbGVuZ3RoIGZpZWxkIGlmIHRoZSAidHVybiIgYXJndW1lbnQg aXMgemVybywgb3IKLSAgICAoYikgb24gdGhlIHBhY2tldC1lbmQgY2hhcmFjdGVyIChlb2wpIGlm IHRoZSAidHVybiIgYXJndW1lbnQgaXMgbm9uemVybwotICAgIChjKSBhIGNlcnRhaW4gbnVtYmVy IG9mIEN0cmwtQydzIGluIGEgcm93Ci0KLSAgUmV0dXJuczoKLSAgICA+PSAwLCB0aGUgbnVtYmVy IG9mIGNoYXJhY3RlcnMgcmVhZCB1cG9uIHN1Y2Nlc3M7Ci0gICAgLTEgaWYgIm1heCIgZXhjZWVk ZWQsIHRpbWVvdXQsIG9yIG90aGVyIGNvcnJlY3RhYmxlIGVycm9yOwotICAgIC0yIG9uIHVzZXIg aW50ZXJydXB0aW9uIChjKTsKLSAgICAtMyBvbiBmYXRhbCBlcnJvciBsaWtlIGNvbm5lY3Rpb24g bG9zdC4KLQotICBUaGUgbmFtZSBvZiB0aGlzIHJvdXRpbmUgZGF0ZXMgZnJvbSB0aGUgZWFybHkg ZGF5cyB3aGVuIEtlcm1pdCBwYWNrZXRzCi0gIHdlcmUsIGluZGVlZCwgYWx3YXlzIGxpbmVzIG9m IHRleHQuICBUaGF0IHdhcyBiZWZvcmUgY29udHJvbC1jaGFyYWN0ZXIKLSAgdW5wcmVmaXhpbmcg YW5kIGxlbmd0aC1kcml2ZW4gcGFja2V0IGZyYW1pbmcgd2VyZSBpbnRyb2R1Y2VkLCB3aGljaCB0 aGlzCi0gIHZlcnNpb24gaGFuZGxlLiAgTkI6IHRoaXMgcm91dGluZSBpcyBPTkxZIGZvciByZWFk aW5nIGluY29taW5nIEtlcm1pdAotICBwYWNrZXRzLCBub3RoaW5nIGVsc2UuICBUbyByZWFkIG90 aGVyIGtpbmRzIG9mIGluY29taW5nIG1hdGVyaWFsLCB1c2UKLSAgdHRpbmMoKSBvciB0dHhpbigp LgotCi0gIFRoZSBieXRlcyB0aGF0IHdlcmUgaW5wdXQgYXJlIGNvcGllZCBpbnRvICJkZXN0IiB3 aXRoIHRoZWlyIHBhcml0eSBiaXRzCi0gIHN0cmlwcGVkIGlmIHBhcml0eSB3YXMgc2VsZWN0ZWQu ICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZC4KLSAgQnl0ZXMgYWZ0ZXIgdGhlIGVv bCBhcmUgYXZhaWxhYmxlIHVwb24gdGhlIG5leHQgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLgotCi0g IFRoZSBpZGVhIGlzIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2Ygc3lzdGVtIGNhbGxzIHBlciBw YWNrZXQsIGFuZCBhbHNvIHRvCi0gIG1pbmltaXplIHRpbWVvdXRzLiAgVGhpcyBmdW5jdGlvbiBp cyB0aGUgaW5uZXIgbG9vcCBvZiB0aGUgcHJvdG9jb2wgYW5kIG11c3QKLSAgYmUgYXMgZWZmaWNp ZW50IGFzIHBvc3NpYmxlLiAgVGhlIGN1cnJlbnQgc3RyYXRlZ3kgaXMgdG8gdXNlIG15cmVhZCgp LCBhCi0gIG1hY3JvIHRvIG1hbmFnZSBidWZmZXJlZCAoYW5kIGdlbmVyYWxseSBub25ibG9ja2lu ZykgcmVhZHMuCi0KLSAgV0FSTklORzogVGhpcyBmdW5jdGlvbiBjYWxscyBwYXJjaGsoKSwgd2hp Y2ggaXMgZGVmaW5lZCBpbiBhbm90aGVyIG1vZHVsZS4KLSAgTm9ybWFsbHksIGNrdXRpby5jIGRv ZXMgbm90IGRlcGVuZCBvbiBjb2RlIGZyb20gYW55IG90aGVyIG1vZHVsZSwgYnV0IHRoZXJlCi0g IGlzIGFuIGV4Y2VwdGlvbiBpbiB0aGlzIGNhc2UgYmVjYXVzZSBhbGwgdGhlIG90aGVyIGNrP3Rp by5jIG1vZHVsZXMgYWxzbwotICBuZWVkIHRvIGNhbGwgcGFyY2hrKCksIHNvIGl0J3MgYmV0dGVy IHRvIGhhdmUgaXQgZGVmaW5lZCBpbiBhIGNvbW1vbiBwbGFjZS4KLSovCi0jaWZkZWYgQ1RSTEMK LSN1bmRlZiBDVFJMQwotI2VuZGlmIC8qIENUUkxDICovCi0jZGVmaW5lIENUUkxDICdcMDMnCi0v KgotICBXZSBoYXZlIGZvdXIgZGlmZmVyZW50IGRlY2xhcmF0aW9ucyBoZXJlIGJlY2F1c2U6Ci0g IChhKSB0byBhbGxvdyBLZXJtaXQgdG8gYmUgYnVpbHQgd2l0aG91dCB0aGUgYXV0b21hdGljIHBh cml0eSBzZW5zaW5nIGZlYXR1cmUKLSAgKGIpIG9uZSBvZiBlYWNoIHR5cGUgZm9yIEFOU0kgQywg b25lIGZvciBub24tQU5TSS4KLSovCi0jaWZuZGVmIE5PWEZFUgotCi1zdGF0aWMgaW50IHB1c2hl ZGJhY2sgPSAwOwotCi1pbnQKLSNpZmRlZiBQQVJTRU5TRQotI2lmZGVmIENLX0FOU0lDCi10dGlu bChDSEFSICpkZXN0LCBpbnQgbWF4LGludCB0aW1vLCBDSEFSIGVvbCwgQ0hBUiBzdGFydCwgaW50 IHR1cm4pCi0jZWxzZQotdHRpbmwoZGVzdCxtYXgsdGltbyxlb2wsc3RhcnQsdHVybikgaW50IG1h eCx0aW1vLHR1cm47IENIQVIgKmRlc3QsIGVvbCwgc3RhcnQ7Ci0jZW5kaWYgLyogQ0tfQU5TSUMg Ki8KLSNlbHNlIC8qIG5vdCBQQVJTRU5TRSAqLwotI2lmZGVmIENLX0FOU0lDCi10dGlubChDSEFS ICpkZXN0LCBpbnQgbWF4LGludCB0aW1vLCBDSEFSIGVvbCkKLSNlbHNlCi10dGlubChkZXN0LG1h eCx0aW1vLGVvbCkgaW50IG1heCx0aW1vOyBDSEFSICpkZXN0LCBlb2w7Ci0jZW5kaWYgLyogQ0tf QU5TSUMgKi8KLSNlbmRpZiAvKiBQQVJTRU5TRSAqLwotLyogdHRpbmwgKi8gewotCi0jaWZuZGVm IE1ZUkVBRAotICAgIENIQVIgY2gsIGR1bTsKLSNlbmRpZiAvKiBNWVJFQUQgKi8KLSNpZmRlZiBQ QVJTRU5TRQotICAgIGludCBwa3RsZW4gPSAtMTsKLSAgICBpbnQgbHBsZW4gPSAwOwotICAgIGlu dCBoYXZlbGVuID0gMDsKLSNlbmRpZiAvKiBQQVJTRU5TRSAqLwotICAgIGludCBmZDsKLSAgICBp bnQgc29wbWFzayA9IDB4ZmY7CQkJLyogU3RhcnQtT2YtUGFja2V0IG1hc2sgKi8KLSNpZmRlZiBD S1hYQ0hBUgotICAgIGV4dGVybiBzaG9ydCBkYmx0W107CQkvKiBJZ25vcmUtY2hhcmFjdGVyIHRh YmxlICovCi0gICAgZXh0ZXJuIGludCBpZ25mbGFnOwotI2VuZGlmIC8qIENLWFhDSEFSICovCi0j aWZkZWYgVENQU09DS0VUCi0gICAgZXh0ZXJuIENIQVIgc3RjaHI7Ci0jZW5kaWYgLyogVENQU09D S0VUICovCi0gICAgaW50IHg7Ci0jaWZkZWYgU1RSRUFNSU5HCi0gICAgZXh0ZXJuIGludCBzdHJl YW1pbmc7Ci0gICAgZXh0ZXJuIGludCBzbmR0eXA7Ci0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0K LSAgICBpZiAodHR5ZmQgPCAwKSByZXR1cm4oLTMpOyAgICAgICAgICAvKiBOb3Qgb3Blbi4gKi8K LS8qCi0gIEluIEZlYnJ1YXJ5IDIwMDcgSSBmaXhlZCB0dGlubCgpIHRvIHdvcmsgYmV0dGVyIHVu ZGVyIHRoZSB0cnVseSBhd2Z1bAotICBjb25kaXRpb25zIGVuY291bnRlcmVkIGJ5IHRoZSBBTS1B UEVYIG9jZWFub2dyYXBoaWMgZmxvYXRzIHRoYXQgZ2F0aGVyCi0gIGh1cnJpY2FuZSBkYXRhIGFu ZCBwaG9uZSBob21lIHVzaW5nIElyaWRpdW0gc2F0ZWxsaXRlIG1vZGVtcywgd2hpY2ggdW5kZXIK LSAgY2VydGFpbiBjb25kaXRpb25zLCBjYW4gc2VuZCB0d28gcGFja2V0cyBiYWNrIHRvIGJhY2sg YWZ0ZXIgYSBsb25nIHBhdXNlLgotICBJbiB0aGlzIGNhc2UgdGhlIHNlY29uZCBwYWNrZXQgd291 bGQgYmUgaWdub3JlZCBiZWNhdXNlIHRoZSBTT0ggd2FzIHNraXBwZWQKLSAgZHVlIHRvIHRoZSB0 dGZsdWkoKSBjYWxsLiAgQnV0IHRoZSByZXdvcmtlZCBsb29rYWhlYWQvcHVzaGJhY2sgbG9naWMg YnJva2UKLSAgS2VybWl0IHRyYW5zZmVycyBvbiBlbmNyeXB0ZWQgY29ubmVjdGlvbnMuICBUaGlz IHdhcyBmaXhlZCAxMi0xMyBBdWd1c3QKLSAgMjAwNy4gIEFsbCBvZiB0aGlzIGhhcHBlbmVkIGFm dGVyIDguMC4yMTIgRGV2LjI3IHdhcyByZWxlYXNlZCBhbmQgYmVmb3JlCi0gIERldi4yOCwgc28g bm8gaGFybSBkb25lIG90aGVyIHRoYW4gdGhlIGRlbGF5LgotKi8KLSAgICBkZWJ1ZyhGMTAxLCJ0 dGlubCBtYXgiLCIiLG1heCk7Ci0gICAgZGVidWcoRjEwMSwidHRpbmwgdGltbyIsIiIsdGltbyk7 Ci0KLSNpZmRlZiBORVRDTUQKLSAgICBpZiAodHRwaXBlKQotICAgICAgZmQgPSBmZGluOwotICAg IGVsc2UKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSAgICAgIGZkID0gdHR5ZmQ7Ci0KLSNpZmRlZiBD T01NRU5UCi0gICAgaWYgKHhsb2NhbCAmJiBjb25jaGsoKSA+IDApCQkvKiBBbGxvdyBmb3IgY29u c29sZSBpbnRlcnJ1cHRpb25zICovCi0gICAgICByZXR1cm4oLTEpOwotI2VuZGlmIC8qIENPTU1F TlQgKi8KLQotICAgICpkZXN0ID0gJ1wwJzsgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFy IGRlc3RpbmF0aW9uIGJ1ZmZlciAqLwotICAgIGlmICh0aW1vIDwgMCkgdGltbyA9IDA7CQkvKiBT YWZldHkgKi8KLSAgICBpZiAodGltbykgewkJCQkvKiBEb24ndCB0aW1lIG91dCBpZiB0aW1vID09 IDAgKi8KLQlpbnQgeHg7Ci0Jc2F2YWwgPSBzaWduYWwoU0lHQUxSTSx0aW1lcmgpOwkvKiBFbmFi bGUgdGltZXIgaW50ZXJydXB0ICovCi0JeHggPSBhbGFybSh0aW1vKTsJCS8qIFNldCBpdC4gKi8K LQlkZWJ1ZyhGMTAxLCJ0dGlubCBhbGFybSIsIiIseHgpOwotICAgIH0KLSAgICBpZiAoCi0jaWZk ZWYgQ0tfUE9TSVhfU0lHCi0Jc2lnc2V0am1wKHNqYnVmLDEpCi0jZWxzZQotCXNldGptcChzamJ1 ZikKLSNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KLQkpIHsJCQkJLyogVGltZXIgd2VudCBvZmY/ ICovCi0JZGVidWcoRjEwMCwidHRpbmwgdGltb3V0IiwiIiwwKTsgLyogR2V0IGhlcmUgb24gdGlt ZW91dC4gKi8KLQkvKiBkZWJ1ZyhGMTEwLCIgd2l0aCIsKGNoYXIgKikgZGVzdCwwKTsgKi8KLQl0 dGltb2ZmKCk7CQkJLyogVHVybiBvZmYgdGltZXIgKi8KLQlyZXR1cm4oLTEpOwkJCS8qIGFuZCBy ZXR1cm4gZXJyb3IgY29kZS4gKi8KLSAgICB9IGVsc2UgewotCXJlZ2lzdGVyIGludCBpLCBuID0g LTE7CQkvKiBsb2NhbCB2YXJpYWJsZXMgKi8KLQlpbnQgY2NuID0gMDsKLSNpZmRlZiBQQVJTRU5T RQotCXJlZ2lzdGVyIGludCBmbGFnID0gMDsKLQlkZWJ1ZyhGMDAwLCJ0dGlubCBzdGFydCIsIiIs c3RhcnQpOwotI2VuZGlmIC8qIFBBUlNFTlNFICovCi0KLQl0dHBtc2sgPSB0dHBydHkgPyAwMTc3 IDogMDM3NzsJLyogU2V0IHBhcml0eSBzdHJpcHBpbmcgbWFzay4gKi8KLQlzb3BtYXNrID0gbmVl ZHBjaGsgPyAwMTc3IDogdHRwbXNrOyAvKiBBbmQgU09QIG1hdGNoaW5nIG1hc2suICovCi0KLS8q IE5vdyByZWFkIGludG8gZGVzdGluYXRpb24sIHN0cmlwcGluZyBwYXJpdHkgYW5kIGxvb2tpbmcg Zm9yIHRoZSAqLwotLyogdGhlIHBhY2tldCB0ZXJtaW5hdG9yLCBhbmQgYWxzbyBmb3Igc2V2ZXJh bCBDdHJsLUMncyB0eXBlZCBpbiBhIHJvdy4gKi8KLQotCWkgPSAwOwkJCQkvKiBEZXN0aW5hdGlv biBpbmRleCAqLwotCWRlYnVnKEYxMDEsInR0aW5sIGVvbCIsIiIsZW9sKTsKLQotCXdoaWxlIChp IDwgbWF4LTEpIHsKLSNpZmRlZiBNWVJFQUQKLQkgICAgZXJybm8gPSAwOwotCSAgICAvKiBPbiBl bmNyeXB0ZWQgY29ubmVjdGlvbnMgbXlyZWFkIHJldHVybnMgZW5jcnlwdGVkIGJ5dGVzICovCi0J ICAgIG4gPSBteXJlYWQoKTsKLQkgICAgZGVidWcoRjAwMCwiVFRJTkwgbXlyZWFkIGNoYXIiLCIi LG4pOwotCSAgICBpZiAobiA8IDApIHsJLyogVGltZW91dCBvciBpL28gZXJyb3I/ICovCi0jaWZk ZWYgREVCVUcKLQkJaWYgKGRlYmxvZykgewotCQkgICAgZGVidWcoRjEwMSwidHRpbmwgbXlyZWFk IGZhaWx1cmUsIG4iLCIiLG4pOwotCQkgICAgZGVidWcoRjEwMSwidHRpbmwgbXlyZWFkIGVycm5v IiwiIixlcnJubyk7Ci0JCX0KLSNlbmRpZiAvKiBERUJVRyAqLwotCQkvKiBEb24ndCBsZXQgRUlO VFIgYnJlYWsgcGFja2V0cy4gKi8KLQkJaWYgKG4gPT0gLTMpIHsKLQkJICAgIGlmIChlcnJubyA9 PSBFSU5UUiAmJiBpID4gMCkgewotCQkJZGVidWcoRjExMSwidHRpbmwgRUlOVFIgbXlyZWFkIGki LCJjb250aW51aW5nIixpKTsKLQkJCWNvbnRpbnVlOwotCQkgICAgfSBlbHNlIHsKLQkJCWRlYnVn KEYxMTAsInR0aW5sIG5vbi1FSU5UUiAtMyIsImNsb3NpbmciLDApOwotCQkJd2FzY2xvc2VkID0g MTsKLQkJCXR0aW1vZmYoKTsJLyogVHVybiBvZmYgdGltZXIgKi8KLQkJCXR0Y2xvcygwKTsKLQkJ CXJldHVybihuKTsKLQkJICAgIH0KLQkJfSBlbHNlIGlmIChuID09IC0yICYmIG5ldGNvbm4gLyog JiYgdGltbyA9PSAwICovICkgewotCQkgICAgLyogSGVyZSB3ZSB0cnkgdG8gY2F0Y2ggYnJva2Vu IG5ldHdvcmsgY29ubmVjdGlvbnMgKi8KLQkJICAgIC8qIGV2ZW4gd2hlbiBpb2N0bCgpIGFuZCBy ZWFkKCkgZG8gbm90IGNhdGNoIHRoZW0gKi8KLQkJICAgIGRlYnVnKEYxMTEsInR0aW5sIG5ldHdv cmsgbXlyZWFkIGZhaWx1cmUiLCJjbG9zaW5nIixuKTsKLQkJICAgIHdhc2Nsb3NlZCA9IDE7Ci0J CSAgICB0dGltb2ZmKCk7Ci0JCSAgICB0dGNsb3MoMCk7Ci0JCSAgICByZXR1cm4oLTMpOwotCQl9 Ci0jaWZkZWYgU1RSRUFNSU5HCi0JCS8qIFN0cmVhbWluZyBhbmQgbm8gZGF0YSB0byByZWFkICov Ci0JCWVsc2UgaWYgKG4gPT0gMCAmJiBzdHJlYW1pbmcgJiYgc25kdHlwID09ICdEJykKLQkJICBy ZXR1cm4oMCk7Ci0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0JCWJyZWFrOwkJCS8qIEJyZWFrIG91 dCBvZiB3aGlsZSBsb29wICovCi0JICAgIH0KLQotI2Vsc2UgLyogbm90IE1ZUkVBRCAoaXMgdGhp cyBjb2RlIHVzZWQgYW55d2hlcmUgYW55IG1vcmU/KSAqLwotLyoKLSAgVGhlIG5vbi1NWVJFQUQg Y29kZSBkYXRlcyBmcm9tIHRoZSAxOTgwcyBhbmQgd2FzIG5lZWRlZCBvbiBjZXJ0YWluIHBsYXRm b3JtcwotICB3aGVyZSB0aGVyZSB3ZXJlIG5vIG5vbmJsb2NraW5nIHJlYWRzLiAgLWZkYywgMjAw Ny8wMi8yMi4KLSovCi0JICAgIGlmICgobiA9IHJlYWQoZmQsICZuLCAxKSkgPCAxKQotCSAgICAg IGJyZWFrOwkJCS8qIEVycm9yIC0gYnJlYWsgb3V0IG9mIHdoaWxlIGxvb3AgKi8KLQotI2VuZGlm IC8qIE1ZUkVBRCAqLwotCi0JICAgIC8qIEdldCBoZXJlIHdpdGggY2hhciBpbiBuICovCi0KLSNp ZmRlZiBDS19FTkNSWVBUSU9OCi0JICAgIGlmIChURUxPUFRfVShURUxPUFRfRU5DUllQVElPTikg JiYgIXB1c2hlZGJhY2spIHsKLQkJQ0hBUiBjaCA9IG47Ci0JCWNrX3RuX2RlY3J5cHQoKGNoYXIg KikmY2gsMSk7Ci0JCW4gPSBjaDsKLQkJZGVidWcoRjAwMCwiVFRJTkwgZGVjcnlwIGNoYXIiLCIi LG4pOwotCSAgICB9Ci0JICAgIHB1c2hlZGJhY2sgPSAwOwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJ T04gKi8KLQotI2lmZGVmIFRDUFNPQ0tFVAotCSAgICBpZiAobiA9PSBJQUMgJiYJCS8qIEhhbmRs ZSBUZWxuZXQgb3B0aW9ucyAqLwotCQkoKHhsb2NhbCAmJiBuZXRjb25uICYmIElTX1RFTE5FVCgp KSB8fAotCQkoIXhsb2NhbCAmJiBzc3RlbG5ldCkpKSB7Ci0JCW4gPSB0dF90bm9wdChuKTsKLQkJ aWYgKG4gPCAwKQotCQkgIHJldHVybihuKTsKLSNpZm5kZWYgTk9QQVJTRU4KLQkJZWxzZSBpZiAo biA9PSAxKQotCQkgIHN0YXJ0ID0gc3RjaHI7Ci0jZW5kaWYgLyogTk9QQVJTRU4gKi8KLQkJaWYg KG4gIT0gMjU1KQkJLyogTm8gZGF0YSAtIGdvIGJhY2sgZm9yIG5leHQgY2hhciAqLwotCQkgIGNv bnRpbnVlOwotCSAgICB9CQkJCS8qIFF1b3RlZCBJQUMgLSBrZWVwIGdvaW5nICovCi0jZW5kaWYg LyogVENQU09DS0VUICovCi0KLSNpZmRlZiBDS1hYQ0hBUgotCSAgICBpZiAoaWduZmxhZykKLQkg ICAgICBpZiAoZGJsdFsodW5zaWduZWQpIG5dICYgMSkgLyogQ2hhcmFjdGVyIHRvIGlnbm9yZT8g Ki8KLQkJY29udGludWU7Ci0jZW5kaWYgLyogQ0tYWENIQVIgKi8KLS8qCi0gIFVzZSBwYXJpdHkg bWFzaywgcmF0aGVyIHRoYW4gYWx3YXlzIHN0cmlwcGluZyBwYXJpdHksIHRvIGNoZWNrIGZvcgot ICBjYW5jZWxsYXRpb24uICBPdGhlcndpc2UsIHJ1bnMgbGlrZSBceDAzXHg4M1x4MDMgaW4gYSBw YWNrZXQgY291bGQgY2FuY2VsCi0gIHRoZSB0cmFuc2ZlciB3aGVuIHBhcml0eSBpcyBOT05FLiAg KE5vdGUgdGhhdCBceDAzXHgwM1x4MDMgaXMgZXh0cmVtZWx5Ci0gIHVubGlrZWx5IGR1ZSB0byBy dW4tbGVuZ3RoIGVuY29kaW5nLikKLSovCi0JICAgIC8qIENoZWNrIGNhbmNlbGxhdGlvbiAqLwot CSAgICBpZiAoIXhsb2NhbCAmJiB4ZnJjYW4gJiYgKChuICYgdHRwbXNrKSA9PSB4ZnJjaHIpKSB7 Ci0JCWlmICgrK2NjbiA+PSB4ZnJudW0pIHsJLyogSWYgeGZybnVtIGluIGEgcm93LCBiYWlsIG91 dC4gKi8KLQkJICAgIGlmICh0aW1vKSB7CQkvKiBDbGVhciB0aW1lci4gKi8KLQkJCXR0aW1vZmYo KTsKLQkJICAgIH0KLQkJICAgIGlmICh4ZnJjaHIgPCAzMikKLQkJICAgICAgcHJpbnRmKCJeJWMu Li5cclxuIiwoY2hhcikoeGZyY2hyKzY0KSk7Ci0JCSAgICBlbHNlCi0JCSAgICAgIHByaW50Zigi Q2FuY2VsZWQuLi5cclxuIik7Ci0JCSAgICByZXR1cm4oLTIpOwotCQl9Ci0JICAgIH0gZWxzZSBj Y24gPSAwOwkJLyogTm8gY2FuY2VsbGF0aW9uLCByZXNldCBjb3VudGVyLCAqLwotCi0jaWZkZWYg UEFSU0VOU0UKLS8qCi0gIFJlc3RydWN0dXJlZCBjb2RlIGFsbG93cyBmb3IgYSBuZXcgcGFja2V0 IHRvIGFwcGVhciBzb21ld2hlcmUgaW4gdGhlCi0gIG1pZGRsZSBvZiBhIHByZXZpb3VzIG9uZS4g IC1mZGMsIDI0IEZlYiAyMDA3LgotKi8KLQkgICAgaWYgKChuICYgc29wbWFzaykgPT0gc3RhcnQp IHsgLyogU3RhcnQgb2YgUGFja2V0ICovCi0JCWRlYnVnKEYxMDEsInR0aW5sIFNPUCBpIiwiIixp KTsKLQkJZmxhZyA9IDE7CQkvKiBGbGFnIHRoYXQgd2UgYXJlIGluIGEgcGFja2V0ICovCi0JCWhh dmVsZW4gPSAwOwkJLyogSW52YWxpZGF0ZSBwcmV2aW91cyBsZW5ndGggKi8KLQkJcGt0bGVuID0g LTE7CQkvKiAoaWYgYW55KSBpbiBjYXNlIHdlIHdlcmUgKi8KLQkJbHBsZW4gPSAwOwkJLyogYWxy ZWFkIHByb2Nlc3NhbmQgYSBwYWNrZXQgKi8KLQkJaSA9IDA7CQkJLyogYW5kIHJlc2V0IHRoZSBk ZXN0IGJ1ZmZlciBwb2ludGVyICovCi0JICAgIH0KLQkgICAgaWYgKGZsYWcgPT0gMCkgewkJLyog Tm8gU09QIHlldC4uLiAqLwotCQlkZWJ1ZyhGMDAwLCJ0dGlubCBza2lwcGluZyIsIiIsbik7Ci0J CWNvbnRpbnVlOwotCSAgICB9Ci0JICAgIGRlc3RbaSsrXSA9IG4gJiB0dHBtc2s7Ci0vKgotICBJ ZiB3ZSBoYXZlIG5vdCBiZWVuIGluc3RydWN0ZWQgdG8gd2FpdCBmb3IgYSB0dXJuYXJvdW5kIGNo YXJhY3Rlciwgd2UgY2FuIGdvCi0gIGJ5IHRoZSBwYWNrZXQgbGVuZ3RoIGZpZWxkLiAgSWYgdHVy biAhPSAwLCB3ZSBtdXN0IHdhaXQgZm9yIHRoZSBlbmQgb2YgbGluZQotICAoZW9sKSBjaGFyYWN0 ZXIgYmVmb3JlIHJldHVybmluZy4gIFRoaXMgaXMgYW4gZWdyZWdpb3VzIHZpb2xhdGlvbiBvZiBh bGwKLSAgcHJpbmNpcGxlcyBvZiBsYXllcmluZy4uLiAgKExlc3MgZWdyZWdpb3VzIGluIEMtS2Vy bWl0IDkuMCwgaW4gd2hpY2ggd2UgZ28KLSAgYnkgdGhlIGxlbmd0aCBmaWVsZCBidXQgYWxzbyBs b29rIGZvciB0aGUgZW9sIGluIGNhc2UgaXQgYXJyaXZlcyBlYXJseSwKLSAgZS5nLiBpZiB0aGUg bGVuZ3RoIGZpZWxkIHdhcyBjb3JydXB0ZWQgdXB3YXJkcy4pCi0qLwotCSAgICBpZiAoIWhhdmVs ZW4pIHsKLQkJaWYgKGkgPT0gMikgewotCQkgICAgaWYgKChkZXN0WzFdICYgMHg3ZikgPCAzMikg LyogR2FyYmFnZSBpbiBsZW5ndGggZmllbGQgKi8KLQkJICAgICAgcmV0dXJuKC0xKTsJLyogZmRj IC0gMTMgQXByIDIwMTAgKi8KLQkJICAgIHBrdGxlbiA9IHh1bmNoYXIoZGVzdFsxXSAmIDB4N2Yp OwotICAgICAgICAgICAgICAgICAgICBpZiAocGt0bGVuID4gOTQpCS8qIFJ1Ym91dCBpbiBsZW5n dGggZmllbGQgKi8KLQkJICAgICAgcmV0dXJuKC0xKTsJLyogZmRjIC0gMTMgQXByIDIwMTAgKi8K LQkJICAgIGlmIChwa3RsZW4gPiAxKSB7Ci0JCQloYXZlbGVuID0gMTsKLQkJCWRlYnVnKEYxMDEs InR0aW5sIHBrdGxlbiB2YWx1ZSIsIiIscGt0bGVuKTsKLQkJICAgIH0KLQkJfSBlbHNlIGlmIChp ID09IDUgJiYgcGt0bGVuID09IDApIHsKLQkJICAgIGxwbGVuID0geHVuY2hhcihkZXN0WzRdICYg MHg3Zik7Ci0JCX0gZWxzZSBpZiAoaSA9PSA2ICYmIHBrdGxlbiA9PSAwKSB7Ci0JCSAgICBwa3Rs ZW4gPSBscGxlbiAqIDk1ICsgeHVuY2hhcihkZXN0WzVdICYgMHg3ZikgKyA1OwotCQkgICAgaGF2 ZWxlbiA9IDE7Ci0JCSAgICBkZWJ1ZyhGMTAxLCJ0dGlubCBleHRlbmRlZCBsZW5ndGgiLCIiLHBr dGxlbik7Ci0JCX0KLQkgICAgfQotCi0vKgotICBTdXBwb3NlIHdlIGxvb2tlZCBhdCB0aGUgc2Vx dWVuY2UgbnVtYmVyIGhlcmUgYW5kIGZvdW5kIGl0IHdhcyBvdXQgb2YKLSAgcmFuZ2U/ICBUaGlz IHdvdWxkIG1lYW4gZWl0aGVyIChhKSBpbmNvbWluZyBwYWNrZXRzIGhhZCBTT1AgdW5wcmVmaXhl ZAotICBhbmQgd2UgYXJlIG91dCBvZiBzeW5jLCBvciAoYikgdGhlIHBhY2tldCBpcyBkYW1hZ2Vk LiAgU2luY2UgKGEpIGlzIGJhZAotICBwcmFjdGljZSwgbGV0J3MgaWdub3JlIGl0LiAgU28gd2hh dCBzaG91bGQgd2UgZG8gaGVyZSBpZiB3ZSBrbm93IHRoZQotICBwYWNrZXQgaXMgZGFtYWdlZD8K LQotICAgMS4gTm90aGluZyAtLSBrZWVwIHRyeWluZyB0byByZWFkIHRoZSBwYWNrZXQgdGlsbCB3 ZSBmaW5kIHdoYXQgd2UgdGhpbmsKLSAgICAgIGlzIHRoZSBlbmQsIG9yIHdlIHRpbWUgb3V0LCBh bmQgbGV0IHRoZSB1cHBlciBsYXllciBkZWNpZGUgd2hhdCB0bwotICAgICAgZG8uICBCdXQgc2lu Y2UgZWl0aGVyIHRoZSBwYWNrZXQgaXMgY29ycnVwdCBvciB3ZSBhcmUgb3V0IG9mIHN5bmMsCi0g ICAgICBvdXIgY3JpdGVyaW9uIGZvciBmaW5kaW5nIHRoZSBlbmQgZG9lcyBub3QgYXBwbHkgYW5k IHdlIGFyZSBsaWtlbHkKLSAgICAgIHRvIHRpbWUgb3V0IChvciBzd2FsbG93IGEgcGllY2Ugb2Yg dGhlIG5leHQgcGFja2V0KSBpZiBvdXIgYXNzdW1lZAotICAgICAgbGVuZ3RoIGlzIHRvbyBsb25n LiAgKFRoaXMgd2FzIHRoZSBiZWhhdmlvciBwcmlvciB0byB2ZXJzaW9uIDcuMC4pCi0KLSAgIDIu IHNldCBmbGFnID0gMCBhbmQgY29udGludWU/ICBUaGlzIHdvdWxkIGZvcmNlIHVzIHRvIHdhaXQg Zm9yIHRoZQotICAgICAgbmV4dCBwYWNrZXQgdG8gY29tZSBpbiwgYW5kIHRoZXJlZm9yZSAoaW4g dGhlIG5vbndpbmRvd2luZyBjYXNlKSwKLSAgICAgIHdvdWxkIGZvcmNlIGEgdGltZW91dCBpbiB0 aGUgb3RoZXIgS2VybWl0LgotCi0gICAzLiBzZXQgZmxhZyA9IDAgYW5kIGNvbnRpbnVlLCBidXQg b25seSBpZiB0aGUgd2luZG93IHNpemUgaXMgPiAxIGFuZAotICAgICAgdGhlIHdpbmRvdyBpcyBu b3QgYmxvY2tlZD8gIFRhbGsgYWJvdXQgY2hlYXRpbmchCi0KLSAgIDQuIFJldHVybiBhIGZhaWx1 cmUgY29kZSBhbmQgbGV0IHRoZSB1cHBlciBsYXllciBkZWNpZGUgd2hhdCB0byBkby4KLSAgICAg IFRoaXMgc2hvdWxkIGJlIGVxdWl2YWxlbnQgdG8gMywgYnV0IHdpdGhvdXQgdGhlIGNoZWF0aW5n LiAgU28gbGV0J3MKLSAgICAgIGRvIGl0IHRoYXQgd2F5Li4uICBCdXQgbm90ZSB0aGF0IHdlIG11 c3QgaWdub3JlIHRoZSBwYXJpdHkgYml0Ci0gICAgICBpbiBjYXNlIHRoaXMgaXMgdGhlIGZpcnN0 IHBhY2tldCBhbmQgd2UgaGF2ZSBub3QgeWV0IHJ1biBwYXJjaGsoKS4KLSovCi0JICAgIGlmIChp ID09IDMpIHsJCS8qIFBlZWsgYXQgc2VxdWVuY2UgbnVtYmVyICovCi0JCXggPSB4dW5jaGFyKChk ZXN0W2ktMV0gJiAweDdmKSk7IC8qIElmIGl0J3Mgbm90IGluIHJhbmdlLi4uICovCi0JCWlmICh4 IDwgMCB8fCB4ID4gNjMpIHsKLQkJICAgIGRlYnVnKEYxMTEsInR0aW5sIGJhZCBzZXEiLGRlc3Qs eCk7Ci0JCSAgICBpZiAodGltbykgdHRpbW9mZigpOwotCQkgICAgcmV0dXJuKC0xKTsJCS8qIHJl dHVybiBhIG5vbmZhdGFsIGVycm9yICovCi0JCX0KLQkgICAgfQotCi0jZWxzZSAvKiBQQVJTRU5T RSAqLwotCSAgICBkZXN0W2krK10gPSBuICYgdHRwbXNrOwotI2VuZGlmIC8qIFBBUlNFTlNFICov Ci0KLSAgICAvKiBDaGVjayBmb3IgZW5kIG9mIHBhY2tldCAqLwotCi0JICAgIGlmICgKLQkJKChu ICYgdHRwbXNrKSA9PSBlb2wpCS8qIEFsd2F5cyBicmVhayBvbiB0aGUgZW9sIGNoYXIgKi8KLSNp ZmRlZiBQQVJTRU5TRQotCQkgfHwJCQkvKiBmZGMgLSBzZWUgbm90ZXMgb2YgMTMgQXByIDIwMTAg Ki8KLS8qCi0gIFB1cmVseSBsZW5ndGgtZHJpdmVuIGlmIFNFVCBIQU5EU0hBS0UgTk9ORSAoaS5l LiB0dXJuID09IDApLgotICBUaGlzIGFsbG93cyBwYWNrZXQgdGVybWluYXRvcnMgYW5kIGhhbmRz aGFrZSBjaGFyYWN0ZXJzIHRvIGFwcGVhcgotICBsaXRlcmFsbHkgaW5zaWRlIGEgcGFja2V0IGRh dGEgZmllbGQuCi0qLwotCQkoaGF2ZWxlbiAmJiAoaSA+IHBrdGxlbisxKSAmJgotCQkgKCF0dXJu IHx8ICh0dXJuICYmIChuICYgMHg3ZikgPT0gdHVybikpKSAvKiAodHVybiwgbm90IGVvbCkgKi8K LQotI2VuZGlmIC8qIFBBUlNFTlNFICovCi0JCSkgewotLyoKLSAgSGVyZSB3ZSBoYXZlIGVpdGhl ciByZWFkIHRoZSBsYXN0IGJ5dGUgb2YgdGhlIHBhY2tldCBiYXNlZCBvbiBpdHMgbGVuZ3RoCi0g IGZpZWxkLCBvciBlbHNlIHdlIGhhdmUgcmVhZCB0aGUgcGFja2V0IHRlcm1pbmF0b3IgKGVvbCkg b3IgdGhlIGhhbGYtZHVwbGV4Ci0gIGxpbmUtdHVybmFyb3VuZCBjaGFyICh0dXJuKS4KLSovCi0j aWZuZGVmIFBBUlNFTlNFCi0JCWRlYnVnKEYxMDEsInR0aW5sIGdvdCBlb2wiLCIiLGVvbCk7IC8q IChvciB0dXJuKSAqLwotCQlkZXN0W2ldID0gJ1wwJzsJCS8qIFllcywgdGVybWluYXRlIHRoZSBz dHJpbmcsICovCi0JCS8qIGRlYnVnKEYxMDEsInR0aW5sIGkiLCIiLGkpOyAqLwotCi0jZWxzZSAg LyogUEFSU0VOU0UgKi8KLQotI2lmZGVmIERFQlVHCi0JCWlmIChkZWJsb2cpIHsKLQkJICAgIGlm ICgobiAmIHR0cG1zaykgIT0gZW9sKSB7Ci0JCQlkZWJ1ZyhGMTAxLCJ0dGlubCBFT1AgbGVuZ3Ro IiwiIixwa3RsZW4pOwotCQkJZGVidWcoRjAwMCwidHRpbmwgRU9QIGN1cnJlbnQgY2hhciIsIiIs bik7Ci0JCQlkZWJ1ZyhGMTAxLCJ0dGlubCBFT1AgcGFja2V0IGJ1ZiBpbmRleCIsIiIsaSk7Ci0J CSAgICB9IGVsc2UgZGVidWcoRjEwMSwidHRpbmwgZ290IGVvbCIsIiIsZW9sKTsKLQkJfQotI2Vu ZGlmIC8qIERFQlVHICovCi0KLSNpZmRlZiBNWVJFQUQKLS8qCi0gIFRoZSBwYWNrZXQgd2FzIHJl YWQgYmFzZWQgb24gaXRzIGxlbmd0aC4gIFRoaXMgbGVhdmVzIHRoZSBwYWNrZXQgdGVybWluYXRv cgotICB1bnJlYWQsIGFuZCBzbyB0dGNoaygpIHdpbGwgYWx3YXlzIHJldHVybiBhdCBsZWFzdCAx IGJlY2F1c2Ugb2YgdGhpcywKLSAgcG9zc2libHkgZ2l2aW5nIGEgZmFsc2UgcG9zaXRpdmUgdG8g dGhlICJpcyB0aGVyZSBhbm90aGVyIHBhY2tldCB3YWl0aW5nPyIKLSAgdGVzdC4gIEJ1dCBpZiB3 ZSBrbm93IHRoZSB0ZXJtaW5hdG9yIChvciBhbnkgb3RoZXIgaW50ZXJwYWNrZXQganVuaykgaXMK LSAgdGhlcmUsIHdlIGNhbiBzYWZlbHkgZ2V0IHJpZCBvZiBpdC4KLQotICBOT1RFOiBUaGlzIGNv ZGUgcmV3b3JrZWQgdG8gKGEpIGV4ZWN1dGUgZXZlbiBpZiB0aGUgZGVidWcgbG9nIGlzbid0IGFj dGl2ZTsKLSAgYW5kIChiKSBhY3R1YWxseSB3b3JrLiAgLWZkYywgMjAwNy8wMi8yMi4gIEFuZCBh Z2FpbiAyMDA3LzA4LzEyLTEzIHRvIGFsc28KLSAgd29yayBvbiBlbmNyeXB0ZWQgY29ubmVjdGlv bnMuCi0qLwkKLQkJZGVidWcoRjEwMSwiVFRJTkwgbXlfY291bnQiLCIiLG15X2NvdW50KTsKLQkJ aWYgKChuICYgdHRwbXNrKSAhPSBlb2wpIHsgLyogTm90IHRoZSBwYWNrZXQgdGVybWluYXRvciAq LwotCQkgICAgaW50IHg7Ci0JCSAgICB3aGlsZSAobXlfY291bnQgPiAwKSB7Ci0JCQl4ID0gbXly ZWFkKCk7CSAgIC8qICh3YXMgdHRpbmMoMCkgKi8KLQkJCWRlYnVnKEYwMDAsIlRUSU5MIGxrcmVh ZCBjaGFyIiwiIix4KTsKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0JCQlpZiAoVEVMT1BUX1UoVEVM T1BUX0VOQ1JZUFRJT04pKSB7Ci0JCQkgICAgQ0hBUiBjaCA9IHg7Ci0JCQkgICAgY2tfdG5fZGVj cnlwdCgoY2hhciAqKSZjaCwxKTsKLQkJCSAgICB4ID0gY2g7Ci0JCQkgICAgZGVidWcoRjAwMCwi VFRJTkwgbGtkZWNyIGNoYXIiLCIiLHgpOyAKLQkJCX0KLSNlbmRpZgkvKiBDS19FTkNSWVBUSU9O ICovCi0JCQkvKgotCQkJICBOb3RlOiB3aGlsZSBpdCBtaWdodCBzZWVtIG1vcmUgZWxlZ2FudCB0 byBzaW1wbHkKLQkJCSAgcHVzaCBiYWNrIHRoZSBlbmNyeXB0ZWQgYnl0ZSwgdGhhdCBkZXN5bmNo cm9uaXplcwotCQkJICB0aGUgZGVjcnlwdGlvbiBzdHJlYW07IHRoZSBmbGFnIGlzIG5lY2Vzc2Fy eSBzbyB3ZQotCQkJICBkb24ndCB0cnkgdG8gZGVjcnlwdCB0aGUgc2FtZSBieXRlIHR3aWNlLgot CQkJKi8KLQkJCWlmICgoeCAmIHR0cG1zaykgPT0gc3RhcnQpIHsgLyogU3RhcnQgb2YgbmV4dCBw YWNrZXQgKi8KLQkJCSAgICBteXVucmQoeCk7CS8qIFB1c2ggYmFjayB0aGUgZGVjcnlwdGVkIGJ5 dGUgKi8KLQkJCSAgICBwdXNoZWRiYWNrID0gMTsgLyogQW5kIHNldCBmbGFnICovCi0JCQkgICAg ZGVidWcoRjAwMCwiVFRJTkwgbGtwdXNoIGNoYXIiLCIiLHgpOwotCQkJICAgIGJyZWFrOwotCQkJ fQotCQkgICAgfQotCQl9Ci0jZW5kaWYgLyogTVlSRUFEICovCi0KLQkJZGVzdFtpXSA9ICdcMCc7 CQkvKiBUZXJtaW5hdGUgdGhlIHN0cmluZywgKi8KLQkgICAgICAgIGlmIChuZWVkcGNoaykgewkJ LyogUGFyaXR5IGNoZWNrZWQgeWV0PyAqLwotCQkgICAgaWYgKHR0cHJ0eSA9PSAwKSB7CS8qIE5v LCBjaGVjay4gKi8KLQkJCWlmICgodHRwcnR5ID0gcGFyY2hrKGRlc3Qsc3RhcnQsaSkpID4gMCkg ewotCQkJICAgIGludCBqOwotCQkJICAgIGRlYnVnKEYxMDEsInR0aW5sIHNlbnNlcyBwYXJpdHki LCIiLHR0cHJ0eSk7Ci0JCQkgICAgZGVidWcoRjExMCwidHRpbmwgcGFja2V0IGJlZm9yZSIsZGVz dCwwKTsKLQkJCSAgICB0dHBtc2sgPSAweDdmOwotCQkJICAgIGZvciAoaiA9IDA7IGogPCBpOyBq KyspCi0JCQkgICAgICBkZXN0W2pdICY9IDB4N2Y7CS8qIFN0cmlwIHBhcml0eSBmcm9tIHBhY2tl dCAqLwotCQkJICAgIGRlYnVnKEYxMTAsInR0aW5sIHBhY2tldCBhZnRlciAiLGRlc3QsMCk7Ci0J CQl9IGVsc2UgdHRwcnR5ID0gMDsgLyogUmVzdG9yZSBpZiBwYXJjaGsgZXJyb3IgKi8KLQkJICAg IH0KLQkJICAgIHNvcG1hc2sgPSB0dHBtc2s7Ci0JCSAgICBuZWVkcGNoayA9IDA7Ci0JCX0KLSNl bmRpZiAvKiBQQVJTRU5TRSAqLwotCi0JCWlmICh0aW1vKQkJLyogVHVybiBvZmYgdGltZXIgaWYg aXQgd2FzIG9uICovCi0JCSAgdHRpbW9mZigpOwotICAgICAgICAgICAgICAgIGNraGV4ZHVtcCgi dHRpbmwgZ290IixkZXN0LGkpOwotCi0jaWZkZWYgU1RSRUFNSU5HCi0JCS8qIHR0aW5sKCkgd2Fz IGNhbGxlZCBiZWNhdXNlIHRoZXJlIHdhcyBub24tcGFja2V0ICovCi0JCS8qIGRhdGEgc2l0dGlu ZyBpbiB0aGUgYmFjayBjaGFubmVsLiAgSWdub3JlIGl0LiAgICovCi0JCWlmIChzdHJlYW1pbmcg JiYgc25kdHlwID09ICdEJykKLQkJICByZXR1cm4oLTEpOwotI2VuZGlmIC8qIFNUUkVBTUlORyAq LwotCQlyZXR1cm4oaSk7Ci0JICAgIH0KLQl9IC8qIEVuZCBvZiB3aGlsZSgpICovCi0JdHRpbW9m ZigpOwotCXJldHVybihuKTsKLSAgICB9Ci19Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLS8qICBU IFQgSSBOIEMgLS0gIFJlYWQgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgY29tbXVuaWNhdGlvbiBsaW5l ICAqLwotLyoKLSBPbiBzdWNjZXNzLCByZXR1cm5zIHRoZSBjaGFyYWN0ZXIgdGhhdCB3YXMgcmVh ZCwgPj0gMC4KLSBPbiBmYWlsdXJlLCByZXR1cm5zIC0xIG9yIG90aGVyIG5lZ2F0aXZlIG15cmVh ZCBlcnJvciBjb2RlLAotICAgb3IgLTIgaWYgY29ubmVjdGlvbiBpcyBicm9rZW4gb3IgdHR5ZmQg PCAwLgotICAgb3IgLTMgaWYgc2Vzc2lvbiBsaW1pdCBoYXMgZXhwaXJlZCwKLSAgIG9yIC00IGlm IHNvbWV0aGluZyBvciBvdGhlci4uLgotIE5PVEU6IFRoZSBBUEkgZG9lcyBub3QgcHJvdmlkZSBm b3IgdHRpbmMoKSByZXR1cm5pbmcgYSBzcGVjaWFsIGNvZGUKLSB1cG9uIHRpbWVvdXQsIGJ1dCB3 ZSBuZWVkIGl0LiAgU28gZm9yIHRoaXMgd2UgaGF2ZSBhIGdsb2JhbCB2YXJpYWJsZSwKLSB0dGlu Y3RpbW8uCi0qLwotc3RhdGljIGludCB0dGluY3RpbW8gPSAwOwkJLyogWXVrICovCi0KLWludAot dHRpbmModGltbykgaW50IHRpbW87IHsKLQotICAgIGludCBuID0gMCwgZmQ7Ci0gICAgaW50IGlz X3RuID0gMDsKLSAgICBDSEFSIGNoID0gMDsKLQotICAgIHR0aW5jdGltbyA9IDA7Ci0KLSAgICBp ZiAodHR5ZmQgPCAwKSByZXR1cm4oLTIpOyAgICAgICAgICAvKiBOb3Qgb3Blbi4gKi8KLQotICAg IGlzX3RuID0gKHhsb2NhbCAmJiBuZXRjb25uICYmIElTX1RFTE5FVCgpKSB8fAotCSAgICAoIXhs b2NhbCAmJiBzc3RlbG5ldCk7Ci0KLSNpZmRlZiBUVExFQlVGCi0gICAgaWYgKHR0cHVzaCA+PSAw KSB7Ci0gICAgICAgIGRlYnVnKEYxMTEsInR0aW5jIiwidHRwdXNoIix0dHB1c2gpOwotICAgICAg ICBjaCA9IHR0cHVzaDsKLSAgICAgICAgdHRwdXNoID0gLTE7Ci0gICAgICAgIHJldHVybihjaCk7 Ci0gICAgfQotICAgIGlmIChsZV9kYXRhKSB7Ci0gICAgICAgIGlmIChsZV9nZXRjaGFyKCZjaCkg PiAwKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0dGluYyBsZV9nZXRjaGFyIiwiY2giLGNo KTsKLSAgICAgICAgICAgIHJldHVybihjaCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyog VFRMRUJVRiAqLwotCi0jaWZkZWYgTkVUQ01ECi0gICAgaWYgKHR0cGlwZSkKLSAgICAgIGZkID0g ZmRpbjsKLSAgICBlbHNlCi0jZW5kaWYgLyogTkVUQ01EICovCi0gICAgICBmZCA9IHR0eWZkOwot Ci0gICAgaWYgKCh0aW1vIDw9IDApCQkJLyogVW50aW1lZC4gKi8KLSNpZmRlZiBNWVJFQUQKLQl8 fCAobXlfY291bnQgPiAwKQkJLyogQnVmZmVyZWQgY2hhciBhbHJlYWR5IHdhaXRpbmcuICovCi0j ZW5kaWYgLyogTVlSRUFEICovCi0JKSB7Ci0jaWZkZWYgTVlSRUFECi0gICAgICAgIC8qIENvbW0g bGluZSBmYWlsdXJlIHJldHVybnMgLTEgdGhydSBteXJlYWQsIHNvIG5vICY9IDAzNzcgKi8KLQlu ID0gbXlyZWFkKCk7CQkJLyogV2FpdCBmb3IgYSBjaGFyYWN0ZXIuLi4gKi8KLQkvKiBkZWJ1ZyhG MDAwLCJ0dGluYyBNWVJFQUQgbiIsIiIsbik7ICovCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotCS8q IGRlYnVnKEYxMDEsInR0aW5jIHVfZW5jcnlwdCIsIiIsVEVMT1BUX1UoVEVMT1BUX0VOQ1JZUFRJ T04pKTsgKi8KLQlpZiAoVEVMT1BUX1UoVEVMT1BUX0VOQ1JZUFRJT04pICYmIG4gPj0gMCkgewot CSAgICBjaCA9IG47Ci0JICAgIGNrX3RuX2RlY3J5cHQoKGNoYXIgKikmY2gsMSk7Ci0JICAgIG4g PSBjaDsKLQl9Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotCi0jaWZkZWYgTkVUUFRZCi0J aWYgKHR0cHR5ICYmIG4gPCAwKSB7Ci0JICAgIGRlYnVnKEYxMDEsInR0aW5jIGVycm9yIG9uIHB0 eSIsIiIsbik7Ci0JICAgIHR0Y2xvcygwKTsKLQkgICAgcmV0dXJuKG4pOwotCX0KLSNlbmRpZiAv KiBORVRQVFkgKi8KLQotI2lmZGVmIFROQ09ERQotCWlmICgobiA+IC0xKSAmJiBpc190bikKLQkg IHJldHVybigodW5zaWduZWQpKG4gJiAweGZmKSk7Ci0JZWxzZQotI2VuZGlmIC8qIFROQ09ERSAq LwotCSAgcmV0dXJuKG4gPCAwID8gbiA6ICh1bnNpZ25lZCkobiAmIHR0cG1zaykpOwotCi0jZWxz ZSAgLyogTVlSRUFEICovCi0KLSAgICAgICAgd2hpbGUgKChuID0gcmVhZChmZCwmY2gsMSkpID09 IDApIC8qIFdhaXQgZm9yIGEgY2hhcmFjdGVyLiAqLwotICAgICAgICAvKiBTaG91bGRuJ3QgaGF2 ZSB0byBsb29wIGluIHZlciA1QS4gKi8KLSNpZmRlZiBORVRDT05OCi0JICBpZiAobmV0Y29ubikg ewkJLyogU3BlY2lhbCBoYW5kbGluZyBmb3IgbmV0ICovCi0JICAgICAgbmV0Y2xvcygpOwkJLyog SWYgcmVhZCgpIHJldHVybnMgMCBpdCBtZWFucyAqLwotCSAgICAgIG5ldGNvbm4gPSAwOwkJLyog dGhlIGNvbm5lY3Rpb24gaGFzIGRyb3BwZWQuICovCi0JICAgICAgZXJybm8gPSBFTk9UQ09OTjsK LQkgICAgICByZXR1cm4oLTIpOwotCSAgfQotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQkgIDsKLQkv KiBkZWJ1ZyhGMTAxLCJ0dGluYyIsIiIsY2gpOyAqLwotI2lmZGVmIFROQ09ERQotCWlmICgobiA+ IDApICYmIGlzX3RuKSB7Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotCSAgICBpZiAoVEVMT1BUX1Uo VEVMT1BUX0VOQ1JZUFRJT04pKSB7Ci0JCWNrX3RuX2RlY3J5cHQoJmNoLDEpOwotCQluID0gY2g7 Ci0JICAgIH0KLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0JICAgIHJldHVybigodW5zaWdu ZWQpKGNoICYgMHhmZikpOwotCX0gZWxzZQotI2VuZGlmIC8qIFROQ09ERSAqLwotICAgICAgICBy ZXR1cm4oKG4gPCAwKSA/IC00IDogKChuID09IDApID8gLTEgOiAodW5zaWduZWQpKGNoICYgdHRw bXNrKSkpOwotI2VuZGlmIC8qIE1ZUkVBRCAqLwotCi0gICAgfSBlbHNlIHsJCQkJLyogVGltZWQg cmVhZCAqLwotCi0JaW50IG9sZGFsYXJtOwotCXNhdmFsID0gc2lnbmFsKFNJR0FMUk0sdGltZXJo KTsJLyogU2V0IHVwIGhhbmRsZXIsIHNhdmUgb2xkIG9uZS4gKi8KLQlvbGRhbGFybSA9IGFsYXJt KHRpbW8pOwkJLyogU2V0IGFsYXJtLCBzYXZlIG9sZCBvbmUuICovCi0JaWYgKAotI2lmZGVmIENL X1BPU0lYX1NJRwotCSAgICBzaWdzZXRqbXAoc2pidWYsMSkKLSNlbHNlCi0JICAgIHNldGptcChz amJ1ZikKLSNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KLQkgICAgKSB7CQkJCS8qIFRpbWVyIGV4 cGlyZWQgKi8KLQkgICAgdHRpbmN0aW1vID0gMTsKLQkgICAgbiA9IC0xOwkJCS8qIHNldCBmbGFn ICovCi0JfSBlbHNlIHsKLSNpZmRlZiBNWVJFQUQKLQkgICAgbiA9IG15cmVhZCgpOwkJLyogSWYg bWFuYWdpbmcgb3duIGJ1ZmZlci4uLiAqLwotCSAgICBkZWJ1ZyhGMTAxLCJ0dGluYyBteXJlYWQi LCIiLG4pOwotCSAgICBjaCA9IG47Ci0jZWxzZQotCSAgICBuID0gcmVhZChmZCwmY2gsMSk7CQkv KiBPdGhlcndpc2UgY2FsbCB0aGUgc3lzdGVtLiAqLwotCSAgICBpZiAobiA9PSAwKSBuID0gLTE7 Ci0JICAgIGRlYnVnKEYxMDEsInR0aW5jIHJlYWQiLCIiLG4pOwotI2VuZGlmIC8qIE1ZUkVBRCAq LwotCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotCSAgICBpZiAoVEVMT1BUX1UoVEVMT1BUX0VOQ1JZ UFRJT04pICYmIG4gPj0gMCkgewotCQlja190bl9kZWNyeXB0KChjaGFyICopJmNoLDEpOwotCSAg ICB9Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotCSAgICBpZiAobiA+PSAwKQotCSAgICAg IG4gPSAodW5zaWduZWQpIChjaCAmIDB4ZmYpOwotCSAgICBlbHNlCi0JICAgICAgbiA9IChuIDwg MCkgPyAtNCA6IC0yOwkvKiBTcGVjaWFsIHJldHVybiBjb2Rlcy4gKi8KLQl9Ci0JdHRpbW9mZigp OwkJCS8qIFR1cm4gb2ZmIHRoZSB0aW1lciAqLwotCWlmIChvbGRhbGFybSA+IDApIHsKLQkgICAg aWYgKG4gPT0gLTEpCQkvKiBhbmQgcmVzdG9yZSBhbnkgcHJldmlvdXMgYWxhcm0gKi8KLQkgICAg ICBvbGRhbGFybSAtPSB0aW1vOwotCSAgICBpZiAob2xkYWxhcm0gPCAwKQkJLyogYWRqdXN0ZWQg Ynkgb3VyIHRpbWVvdXQgaW50ZXJ2YWwgKi8KLQkgICAgICBvbGRhbGFybSA9IDA7Ci0JICAgIGlm IChvbGRhbGFybSkgewotCSAgICAgICAgZGVidWcoRjEwMSwidHRpbmMgcmVzdG9yaW5nIG9sZGFs YXJtIiwiIixvbGRhbGFybSk7Ci0JCWFsYXJtKG9sZGFsYXJtKTsKLQkgICAgfQotCX0KLSNpZmRl ZiBORVRDT05OCi0JaWYgKG5ldGNvbm4pIHsKLQkgICAgaWYgKG4gPT0gLTIpIHsJCS8qIHJlYWQo KSByZXR1cm5zIDAgKi8KLQkJbmV0Y2xvcygpOwkJLyogb24gbmV0d29yayByZWFkIGZhaWx1cmUg Ki8KLQkJbmV0Y29ubiA9IDA7Ci0JCWVycm5vID0gRU5PVENPTk47Ci0JICAgIH0KLQl9Ci0jZW5k aWYJLyogTkVUQ09OTiAqLwotI2lmZGVmIFROQ09ERQotCWlmICgobiA+IC0xKSAmJiBpc190bikK LQkgIHJldHVybigodW5zaWduZWQpKG4gJiAweGZmKSk7Ci0JZWxzZQotI2VuZGlmIC8qIFROQ09E RSAqLwotCSAgLyogUmV0dXJuIG1hc2tlZCBjaGFyIG9yIG5lZy4gKi8KLQkgIHJldHVybiggKG4g PCAwKSA/IG4gOiAodW5zaWduZWQpKG4gJiB0dHBtc2spICk7Ci0gICAgfQotfQotCi0vKiAgUyBO IEQgQiBSIEsgIC0tICBTZW5kIGEgQlJFQUsgc2lnbmFsIG9mIHRoZSBnaXZlbiBkdXJhdGlvbiAg Ki8KLQotc3RhdGljIGludAotI2lmZGVmIENLX0FOU0lDCi1zbmRicmsoaW50IG1zZWMpIHsJCQkv KiBBcmd1bWVudCBpcyBtaWxsaXNlY29uZHMgKi8KLSNlbHNlCi1zbmRicmsobXNlYykgaW50IG1z ZWM7IHsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotI2lmbmRlZiBQT1NJWAotICAgIGludCB4LCBu OwotI2VuZGlmIC8qIFBPU0lYICovCi0KLSNpZmRlZiBPWE9TCi0jZGVmaW5lIEJTREJSRUFLCi0j ZW5kaWYgLyogT1hPUyAqLwotCi0jaWZkZWYgQU5ZQlNECi0jZGVmaW5lIEJTREJSRUFLCi0jZW5k aWYgLyogQU5ZQlNEICovCi0KLSNpZmRlZiBCU0Q0NAotI2RlZmluZSBCU0RCUkVBSwotI2VuZGlm IC8qIEJTRDQ0ICovCi0KLSNpZmRlZiBDT0hFUkVOVAotI2lmZGVmIEJTREJSRUFLCi0jdW5kZWYg QlNEQlJFQUsKLSNlbmRpZiAvKiBCU0RCUkVBSyAqLwotI2VuZGlmIC8qIENPSEVSRU5UICovCi0K LSNpZmRlZiBCRUxMVjEwCi0jaWZkZWYgQlNEQlJFQUsKLSN1bmRlZiBCU0RCUkVBSwotI2VuZGlm IC8qIEJTREJSRUFLICovCi0jZW5kaWYgLyogQkVMTFYxMCAqLwotCi0jaWZkZWYgUFJPVlgxCi0g ICAgY2hhciBzcGQ7Ci0jZW5kaWYgLyogUFJPVlgxICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJ0dHNu ZGIgdHR5ZmQiLCIiLHR0eWZkKTsKLSAgICBpZiAodHR5ZmQgPCAwKSByZXR1cm4oLTEpOyAgICAg ICAgICAvKiBOb3Qgb3Blbi4gKi8KLQotI2lmZGVmIFBsYW45Ci0gICAgcmV0dXJuIHA5c25kYnJr KG1zZWMpOwotI2Vsc2UKLSNpZmRlZiBORVRDT05OCi0jaWZkZWYgTkVUQ01ECi0gICAgaWYgKHR0 cGlwZSkJCQkJLyogUGlwZSAqLwotICAgICAgcmV0dXJuKHR0b2MoJ1wwJykpOwotI2VuZGlmIC8q IE5FVENNRCAqLwotI2lmZGVmIE5FVFBUWQotICAgIGlmICh0dHB0eSkKLSAgICAgIHJldHVybih0 dG9jKCdcMCcpKTsKLSNlbmRpZiAvKiBORVRQVFkgKi8KLSAgICBpZiAobmV0Y29ubikgCQkJLyog U2VuZCBuZXR3b3JrIEJSRUFLICovCi0gICAgICByZXR1cm4obmV0YnJlYWsoKSk7Ci0jZW5kaWYg LyogTkVUQ09OTiAqLwotCi0gICAgaWYgKG1zZWMgPCAxIHx8IG1zZWMgPiA1MDAwKSByZXR1cm4o LTEpOyAvKiBCYWQgYXJndW1lbnQgKi8KLQotI2lmZGVmIFBPU0lYCQkJCS8qIEVhc3kgaW4gUE9T SVggKi8KLSAgICB7Ci0JaW50IHg7Ci0JZGVidWcoRjExMSwic25kYnJrIFBPU0lYIixja2l0b2Eo bXNlYyksKG1zZWMvMzc1KSk7Ci0JZXJybm8gPSAwOwotCXggPSB0Y3NlbmRicmVhayh0dHlmZCxt c2VjIC8gMzc1KTsKLQlkZWJ1ZyhGMTExLCJzbmRicmsgdGNzZW5kYnJlYWsiLGNraXRvYShlcnJu bykseCk7Ci0JcmV0dXJuKHgpOwotICAgIH0KLSNlbHNlCi0jaWZkZWYgUFJPVlgxCi0gICAgZ3R0 eSh0dHlmZCwmdHRidWYpOyAgICAgICAgICAgICAgICAgLyogR2V0IGN1cnJlbnQgdHR5IGZsYWdz ICovCi0gICAgc3BkID0gdHRidWYuc2dfb3NwZWVkOyAgICAgICAgICAgICAgLyogU2F2ZSBzcGVl ZCAqLwotICAgIHR0YnVmLnNnX29zcGVlZCA9IEI1MDsgICAgICAgICAgICAgIC8qIENoYW5nZSB0 byA1MCBiYXVkICovCi0gICAgc3R0eSh0dHlmZCwmdHRidWYpOyAgICAgICAgICAgICAgICAgLyog IC4uLiAqLwotICAgIG4gPSAoaW50KXN0cmxlbihicm51bHMpOwkJLyogU2VuZCB0aGUgcmlnaHQg bnVtYmVyIG9mIG51bGxzICovCi0gICAgeCA9IG1zZWMgLyA5MTsKLSAgICBpZiAoeCA+IG4pIHgg PSBuOwotICAgIHdyaXRlKHR0eWZkLGJybnVscyxuKTsKLSAgICB0dGJ1Zi5zZ19vc3BlZWQgPSBz cGQ7ICAgICAgICAgICAgICAvKiBSZXN0b3JlIHNwZWVkICovCi0gICAgc3R0eSh0dHlmZCwmdHRi dWYpOyAgICAgICAgICAgICAgICAgLyogIC4uLiAqLwotICAgIHJldHVybigwKTsKLSNlbHNlCi0j aWZkZWYgYWVnaXMKLSAgICBzaW9fJGNvbnRyb2woKHNob3J0KXR0eWZkLCBzaW9fJHNlbmRfYnJl YWssIG1zZWMsIHN0KTsKLSAgICByZXR1cm4oMCk7Ci0jZWxzZQotI2lmZGVmIEJTREJSRUFLCi0g ICAgbiA9IEZXUklURTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmx1c2ggb3V0cHV0IHF1 ZXVlLiAqLwotLyogV2F0Y2ggb3V0IGZvciBpbnQgdnMgbG9uZyBwcm9ibGVtcyBpbiAmbiBhcmch ICovCi0gICAgZGVidWcoRjEwMSwic25kYnJrIEJTREJSRUFLIiwiIixtc2VjKTsKLSAgICBpb2N0 bCh0dHlmZCxUSU9DRkxVU0gsJm4pOyAgICAgICAgICAvKiBJZ25vcmUgYW55IGVycm9ycy4uICov Ci0gICAgaWYgKGlvY3RsKHR0eWZkLFRJT0NTQlJLLChjaGFyICopMCkgPCAwKSB7ICAvKiBUdXJu IG9uIEJSRUFLICovCi0gICAgICAgIHBlcnJvcigiQ2FuJ3Qgc2VuZCBCUkVBSyIpOwotICAgICAg ICByZXR1cm4oLTEpOwotICAgIH0KLSAgICB4ID0gbXNsZWVwKG1zZWMpOyAgICAgICAgICAgICAg ICAgICAgLyogU2xlZXAgZm9yIHNvIG1hbnkgbWlsbGlzZWNvbmRzICovCi0gICAgaWYgKGlvY3Rs KHR0eWZkLFRJT0NDQlJLLChjaGFyICopMCkgPCAwKSB7ICAvKiBUdXJuIG9mZiBCUkVBSyAqLwot ICAgICAgICBwZXJyb3IoIkJSRUFLIHN0dWNrISEhIik7Ci0gICAgICAgIGRvZXhpdChCQURfRVhJ VCwtMSk7CQkvKiBHZXQgb3V0LCBjbG9zaW5nIHRoZSBsaW5lLiAqLwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgd2l0aCBiYWQgZXhpdCBzdGF0dXMgKi8KLSAg ICB9Ci0gICAgcmV0dXJuKHgpOwotI2Vsc2UKLSNpZmRlZiBBVFRTVgotLyoKLSAgTm8gd2F5IHRv IHNlbmQgYSBsb25nIEJSRUFLIGluIFN5cyBWLCBzbyBzZW5kIGEgYnVuY2ggb2YgcmVndWxhciBv bmVzLgotICAoQWN0dWFsbHksIFN5cyBWIFI0IGlzICpzdXBwb3NlZCogdG8gaGF2ZSB0aGUgUE9T SVggdGNzZW5kYnJlYWsoKSBmdW5jdGlvbiwKLSAgYnV0IHRoZXJlJ3Mgbm8gd2F5IGZvciB0aGlz IGNvZGUgdG8ga25vdyBmb3Igc3VyZS4pCi0qLwotICAgIGRlYnVnKEYxMDEsInNuZGJyayBBVFRT ViIsIiIsbXNlYyk7Ci0gICAgeCA9IG1zZWMgLyAyNzU7Ci0gICAgZm9yIChuID0gMDsgbiA8IHg7 IG4rKykgewotCS8qIFJlcG9ydGVkbHkgdGhlIGNhc3QgYnJlYWtzIHRoaXMgZnVuY3Rpb24gb24g c29tZSBzeXN0ZW1zICovCi0JLyogQnV0IHRoZW4gd2h5IHdhcyBpdCBoZXJlIGluIHRoZSBmaXJz dCBwbGFjZT8gKi8KLQlpZiAoaW9jdGwodHR5ZmQsVENTQlJLLCAvKiAoY2hhciAqKSAqLyAwKSA8 IDApIHsKLQkgICAgcGVycm9yKCJDYW4ndCBzZW5kIEJSRUFLIik7Ci0JICAgIHJldHVybigtMSk7 Ci0JfQotICAgIH0KLSAgICByZXR1cm4oMCk7Ci0jZWxzZQotI2lmZGVmICBWNwotICAgIGRlYnVn KEYxMDEsInNuZGJyayBWNyIsIiIsbXNlYyk7Ci0gICAgcmV0dXJuKGdlbmJyayh0dHlmZCwyNTAp KTsJCS8qIFNpbXVsYXRlIGEgQlJFQUsgKi8KLSNlbHNlCi0gICAgZGVidWcoRjEwMSwic25kYnJr IGNhdGNoYWxsIiwiIixtc2VjKTsKLSAgICB0dG9jKDApO3R0b2MoMCk7dHRvYygwKTt0dG9jKDAp OwotICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBWNyAqLwotI2VuZGlmIC8qIEJTREJSRUFLICov Ci0jZW5kaWYgLyogQVRUU1YgKi8KLSNlbmRpZiAvKiBhZWdpcyAqLwotI2VuZGlmIC8qIFBST1ZY MSAqLwotI2VuZGlmIC8qIFBPU0lYICovCi0jZW5kaWYgLyogUGxhbjkgKi8KLX0KLQotLyogIFQg VCBTIE4gRCBCICAtLSAgU2VuZCBhIEJSRUFLIHNpZ25hbCAgKi8KLQotaW50Ci10dHNuZGIoKSB7 Ci0jaWZkZWYgVE5fQ09NUE9SVAotICAgIGlmIChuZXRjb25uICYmIGlzdG5jb21wb3J0KCkpCi0g ICAgICByZXR1cm4oKHRuc25kYigyNzVMKSA+PSAwKSA/IDAgOiAtMSk7Ci0gICAgZWxzZQotI2Vu ZGlmIC8qIFROX0NPTVBPUlQgKi8KLSAgICAgIHJldHVybihzbmRicmsoMjc1KSk7Ci19Ci0KLS8q ICBUIFQgUyBOIEQgTCBCICAtLSAgU2VuZCBhIExvbmcgQlJFQUsgc2lnbmFsICAqLwotCi1pbnQK LXR0c25kbGIoKSB7Ci0jaWZkZWYgVE5fQ09NUE9SVAotICAgIGlmIChuZXRjb25uICYmIGlzdG5j b21wb3J0KCkpCi0gICAgICByZXR1cm4oKHRuc25kYigxODAwTCkgPj0gMCkgPyAwIDogLTEpOwot ICAgIGVsc2UKLSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0gICAgcmV0dXJuKHNuZGJyaygxNTAw KSk7Ci19Ci0KLS8qICBNIFMgTCBFIEUgUCAgLS0gIE1pbGxpc2Vjb25kIHZlcnNpb24gb2Ygc2xl ZXAoKS4gICovCi0KLS8qCi0gIENhbGwgd2l0aCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzICh0aG91 c2FuZHRocyBvZiBzZWNvbmRzKSB0byBzbGVlcC4KLSAgSW50ZW5kZWQgb25seSBmb3Igc21hbGwg aW50ZXJ2YWxzLiAgRm9yIGJpZyBvbmVzLCBqdXN0IHVzZSBzbGVlcCgpLgotICBIaWdobHkgc3lz dGVtLWRlcGVuZGVudC4KLSAgUmV0dXJucyAwIGFsd2F5cywgZXZlbiBpZiBpdCBkaWRuJ3Qgd29y ay4KLSovCi0KLS8qIERlZmluZSBNU0xGVElNRSBmb3Igc3lzdGVtcyB0aGF0IG11c3QgdXNlIGFu IGZ0aW1lKCkgbG9vcC4gKi8KLSNpZmRlZiBBTllCU0QJCQkJLyogRm9yIHByZS00LjIgQlNEIHZl cnNpb25zICovCi0jaWZuZGVmIEJTRDQKLSNkZWZpbmUgTVNMRlRJTUUKLSNlbmRpZiAvKiBCU0Q0 ICovCi0jZW5kaWYgLyogQU5ZQlNEICovCi0KLSNpZmRlZiBUT1dFUjEJCQkJLyogTkNSIFRvd2Vy IE9TIDEuMCAqLwotI2RlZmluZSBNU0xGVElNRQotI2VuZGlmIC8qIFRPV0VSMSAqLwotCi0jaWZk ZWYgQ09IRVJFTlQgICAgICAgICAvKiBDb2hlcmVudC4uLiAqLwotI2lmbmRlZiBfSTM4NiAgICAg ICAgICAgLyogTWF5YmUgQ29oZXJlbnQvMzg2IHNob3VsZCBnZXQgdGhpcywgdG9vICovCi0jZGVm aW5lIE1TTEZUSU1FICAgICAgICAvKiBPcGluaW9ucyBhcmUgZGl2aWRlZCAqLwotI2VuZGlmIC8q IF9JMzg2ICovCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLQotI2lmZGVmIENPTU1FTlQKLSNpZmRl ZiBHRVRNU0VDCi0KLS8qIE1pbGxpc2Vjb25kIHRpbWVyICovCi0KLXN0YXRpYyBsb25nIG1zZWNi YXNlID0gMEw7CQkvKiBVbnNpZ25lZCBsb25nIG5vdCBwb3J0YWJsZSAqLwotCi1sb25nCi1nZXRt c2VjKCkgewkJCQkvKiBNaWxsaXNlY29uZHMgc2luY2UgYmFzZSB0aW1lICovCi0gICAgc3RydWN0 IHRpbWV2YWwgeHY7Ci0gICAgc3RydWN0IHRpbWV6b25lIHh6OwotICAgIGxvbmcgc2VjcywgbXNl Y3M7Ci0gICAgaWYgKAotI2lmZGVmIEdUT0RPTkVBUkcKLQlnZXR0aW1lb2ZkYXkoJnR2KQotI2Vs c2UKLSNpZmRlZiBQVFgKLQlnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKQotI2Vsc2UKLQlnZXR0aW1l b2ZkYXkoJnR2LCAmdHopCi0jZW5kaWYgLyogUFRYICovCi0jZW5kaWYgLyogR1RPRE9ORUFSRyAq LwotCTwgMCkKLSAgICAgIHJldHVybigtMSk7Ci0gICAgaWYgKG1zZWNiYXNlID09IDBMKSB7CQkv KiBGaXJzdCBjYWxsLCBzZXQgYmFzZSB0aW1lLiAqLwotCW1zZWNiYXNlID0gdHYudHZfc2VjOwot CWRlYnVnKEYxMDEsImdldG1zZWMgYmFzZSIsIiIsbXNlY2Jhc2UpOwotICAgIH0KLSAgICByZXR1 cm4oKCh0di50dl9zZWMgLSBtc2VjYmFzZSkgKiAxMDAwTCkgKyAodHYudHZfdXNlYyAvIDEwMDBM KSk7Ci19Ci0jZW5kaWYgLyogR0VUTVNFQyAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2lm ZGVmIFNFTEVDVAotaW50Ci10dHdhaXQoZmQsIHNlY3MpIGludCBmZCwgc2VjczsgewotICAgIGlu dCB4OwotICAgIGZkX3NldCByZmRzOwotICAgIEZEX1pFUk8oJnJmZHMpOwotICAgIEZEX1NFVChm ZCwmcmZkcyk7Ci0gICAgdHYudHZfc2VjID0gc2VjczsKLSAgICB0di50dl91c2VjID0gMEw7Ci0g ICAgZXJybm8gPSAwOwotICAgIGlmICgoeCA9IHNlbGVjdChGRF9TRVRTSVpFLAotI2lmZGVmIEhQ VVg5Ci0JCSAgICAoaW50ICopCi0jZWxzZQotI2lmZGVmIEhQVVgxMDAwCi0JCSAgICAoaW50ICop Ci0jZW5kaWYgLyogSFBVWDEwMDAgKi8KLSNlbmRpZiAvKiBIUFVYOSAqLwotCQkgICAgJnJmZHMs Ci0JCSAgICAwLCAwLCAmdHYpKSA8IDApIHsKLQlkZWJ1ZyhGMTAxLCJ0dHdhaXQgc2VsZWN0IGVy cm5vIiwiIixlcnJubyk7Ci0JcmV0dXJuKDApOwotICAgIH0gZWxzZSB7Ci0JZGVidWcoRjEwMSwi dHR3YWl0IE9LIiwiIixlcnJubyk7Ci0JeCA9IEZEX0lTU0VUKGZkLCAmcmZkcyk7Ci0JZGVidWco RjEwMSwidHR3YWl0IHNlbGVjdCB4IiwiIix4KTsKLQlyZXR1cm4oeCA/IDEgOiAwKTsKLSAgICB9 Ci19Ci0jZW5kaWYgLyogU0VMRUNUICovCi0KLWludAotbXNsZWVwKG0pIGludCBtOyB7Ci0vKgot ICBPdGhlciBwb3NzaWJpbGl0aWVzIGhlcmUgYXJlOgotICAgbmFub3NsZWVwKCksIHJlcG9ydGVk bHkgZGVmaW5lZCBpbiBQT1NJWC40LgotICAgc2dpbmFwKCksIElSSVggb25seSAoYmFjayB0byB3 aGF0IElSSVggdmVyc2lvbiBJIGRvbid0IGtub3cpLgotKi8KLSNpZmRlZiBQbGFuOQotICAgIHJl dHVybiBfU0xFRVAobSk7Ci0jZWxzZQotI2lmZGVmIEJFT1NPUkJFQk9YCi0gICAgc25vb3plKG0q MTAwMCk7Ci0jZWxzZSAvKiBCRU9TT1JCRUJPWCAqLwotI2lmZGVmIFNFTEVDVAotICAgIGludCB0 MSwgeDsKLSAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgU0VMRUNUIDEiLCIiLG0pOwotICAgIGlmICht IDw9IDApIHJldHVybigwKTsKLSAgICBpZiAobSA+PSAxMDAwKSB7CQkJLyogQ2F0Y2ggYmlnIGFy Z3VtZW50cy4gKi8KLQlzbGVlcChtLzEwMDApOwotCW0gPSBtICUgMTAwMDsKLQlpZiAobSA8IDEw KSByZXR1cm4oMCk7Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBTRUxFQ1QgMiIsIiIs bSk7Ci0jaWZkZWYgQkVMTFYxMAotICAgIHggPSBzZWxlY3QoIDAsIChmZF9zZXQgKikwLCAoZmRf c2V0ICopMCwgKGZkX3NldCAqKTAsIG0gKTsKLSAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgQkVMTFYx MCBzZWxlY3QiLCIiLHgpOwotI2Vsc2UgLyogQkVMTFYxMCAqLwotI2lmZGVmIEhQVVg5Ci0gICAg Z2V0dGltZW9mZGF5KCZ0diwgJnR6KTsKLSNlbHNlCi0KLSNpZm5kZWYgQ09IRVJFTlQKLSNpZmRl ZiBHVE9ET05FQVJHCi0gICAgaWYgKGdldHRpbWVvZmRheSgmdHYpIDwgMCkKLSNlbHNlCi0jaWZk ZWYgUFRYCi0gICAgaWYgKGdldHRpbWVvZmRheSgmdHYsTlVMTCkgPCAwKQotI2Vsc2UKLSNpZmRl ZiBOT1RJTUVaT05FCi0gICAgaWYgKGdldHRpbWVvZmRheSgmdHYsIE5VTEwpIDwgMCkJLyogd29u ZGVyIHdoYXQgdGhpcyBkb2VzLi4uICovCi0jZWxzZQotICAgIGlmIChnZXR0aW1lb2ZkYXkoJnR2 LCAmdHopIDwgMCkKLSNlbmRpZiAvKiBOT1RJTUVaT05FICovCi0jZW5kaWYgLyogUFRYICovCi0j ZW5kaWYgLyogR1RPRE9ORUFSRyAqLwotICAgICAgcmV0dXJuKC0xKTsKLSAgICB0MSA9IHR2LnR2 X3NlYzsgICAgICAgICAgICAgICAgICAgICAvKiBTZWNvbmRzICovCi0jZW5kaWYgLyogQ09IRVJF TlQgKi8KLSNlbmRpZiAvKiBIUFVYOSAqLwotICAgIHR2LnR2X3NlYyA9IDA7ICAgICAgICAgICAg ICAgICAgICAgIC8qIFVzZSBzZWxlY3QoKSAqLwotICAgIHR2LnR2X3VzZWMgPSBtICogMTAwMEw7 Ci0jaWZkZWYgQlNENDQKLSAgICB4ID0gc2VsZWN0KCAwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAq KTAsIChmZF9zZXQgKikwLCAmdHYgKTsKLSAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgQlNENDQgc2Vs ZWN0IiwiIix4KTsKLSNlbHNlIC8qIEJTRDQ0ICovCi0jaWZkZWYgX19saW51eF9fCi0gICAgeCA9 IHNlbGVjdCggMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgJnR2ICk7 Ci0gICAgZGVidWcoRjEwMSwibXNsZWVwIF9fbGludXhfXyBzZWxlY3QiLCIiLHgpOwotI2Vsc2Ug LyogX19saW51eF9fICovCi0jaWZkZWYgQlNENDMKLSAgICB4ID0gc2VsZWN0KCAwLCAoZmRfc2V0 ICopMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYgKTsKLSAgICBkZWJ1ZyhGMTAxLCJt c2xlZXAgQlNENDMgc2VsZWN0IiwiIix4KTsKLSNlbHNlIC8qIEJTRDQzICovCi0jaWZkZWYgUU5Y NgotICAgIHggPSBzZWxlY3QoIDAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAq KTAsICZ0diApOwotICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBRTlg2IHNlbGVjdCIsIiIseCk7Ci0j ZWxzZSAvKiBRTlg2ICovCi0jaWZkZWYgUU5YCi0gICAgeCA9IHNlbGVjdCggMCwgKGZkX3NldCAq KTAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgJnR2ICk7Ci0gICAgZGVidWcoRjEwMSwibXNs ZWVwIFFOWCBzZWxlY3QiLCIiLHgpOwotI2Vsc2UgLyogUU5YICovCi0jaWZkZWYgQ09IRVJFTlQK LSAgICB4ID0gc2VsZWN0KCAwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikw LCAmdHYgKTsKLSAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgQ09IRVJFTlQgc2VsZWN0IiwiIix4KTsK LSNlbHNlIC8qIENPSEVSRU5UICovCi0jaWZkZWYgSFBVWDEwMDAJCQkJLyogMTAuMDAgb25seSwg bm90IDEwLjEwIG9yIGxhdGVyICovCi0gICAgeCA9IHNlbGVjdCggMCwgKGludCAqKTAsIChpbnQg KikwLCAoaW50ICopMCwgJnR2ICk7Ci0gICAgZGVidWcoRjEwMSwibXNsZWVwIEhQLVVYIDEwLjAw IHNlbGVjdCIsIiIseCk7Ci0jZWxzZSAvKiBIUFVYMTAwMCAqLwotI2lmZGVmIFNWUjQKLSAgICB4 ID0gc2VsZWN0KCAwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYg KTsKLSAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgU1ZSNCBzZWxlY3QiLCIiLHgpOwotI2Vsc2UgLyog U1ZSNCAqLwotI2lmZGVmIE9TRjQwCi0gICAgeCA9IHNlbGVjdCggMCwgKGZkX3NldCAqKTAsIChm ZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgJnR2ICk7Ci0gICAgZGVidWcoRjEwMSwibXNsZWVwIE9T RjQwIHNlbGVjdCIsIiIseCk7Ci0jZWxzZSAvKiBPU0Y0MCAqLwotI2lmZGVmIFBUWAotICAgIHgg PSBzZWxlY3QoIDAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0diAp OwotICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBPU0Y0MCBzZWxlY3QiLCIiLHgpOwotI2Vsc2UKLSAg ICB4ID0gc2VsZWN0KCAwLCAoaW50ICopMCwgKGludCAqKTAsIChpbnQgKikwLCAmdHYgKTsKLSAg ICBkZWJ1ZyhGMTAxLCJtc2xlZXAgY2F0Y2gtYWxsIHNlbGVjdCIsIiIseCk7Ci0jZW5kaWYgLyog UFRYICovCi0jZW5kaWYgLyogT1NGNDAgKi8KLSNlbmRpZiAvKiBIUDEwMDAgKi8KLSNlbmRpZiAv KiBTVlI0ICovCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLSNlbmRpZiAvKiBRTlggKi8KLSNlbmRp ZiAvKiBRTlg2ICovCi0jZW5kaWYgLyogQlNENDMgKi8KLSNlbmRpZiAvKiBfX2xpbnV4X18gKi8K LSNlbmRpZiAvKiBCU0Q0NCAqLwotI2VuZGlmIC8qIEJFTExWMTAgKi8KLSAgICByZXR1cm4oMCk7 Ci0KLSNlbHNlCQkJCQkvKiBOb3QgU0VMRUNUICovCi0jaWZkZWYgQ0tfUE9MTAkJCQkvKiBXZSBo YXZlIHBvbGwoKSAqLwotICAgIHN0cnVjdCBwb2xsZmQgcGZkOwkJCS8qIFN1cHBseSBhIHZhbGlk IGFkZHJlc3MgZm9yIHBvbGwoKSAqLwotCi0jaWZkZWYgT0RUMzAJCQkJLyogQnV0IGluIFNDTyBP RFQgMy4wICovCi0jaWZkZWYgTkFQCQkJCS8qIHdlIHNob3VsZCB1c2UgbmFwKCkgaW5zdGVhZCAq LwotICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBPRFQgMy4wIE5BUCIsIiIsbSk7IC8qIGJlY2F1c2Ug dXNpbmcgcG9sbCgpIGhlcmUgKi8KLSAgICBuYXAoKGxvbmcpbSk7CQkJICAgLyogc2VlbXMgdG8g YnJlYWsgZGlhbGluZy4gKi8KLSAgICByZXR1cm4oMCk7Ci0jZWxzZQotICAgIGRlYnVnKEYxMDEs Im1zbGVlcCBPRFQgMy4wIFBPTEwiLCIiLG0pOwotICAgIHBvbGwoJnBmZCwgMCwgbSk7Ci0gICAg cmV0dXJuKDApOwotI2VuZGlmIC8qIE5BUCAqLwotI2Vsc2UKLSAgICBkZWJ1ZyhGMTAxLCJtc2xl ZXAgUE9MTCIsIiIsbSk7Ci0gICAgcG9sbCgmcGZkLCAwLCBtKTsKLSAgICByZXR1cm4oMCk7Ci0j ZW5kaWYgLyogT0RUMzAgKi8KLQotLyoKLSAgV2UgY291bGQgaGFuZGxlIHRoZSBhYm92ZSBtb3Jl IGNsZWFubHkgYnkganVzdCBsZXR0aW5nIG5hcCgpIGFsd2F5cwotICB0YWtlIHByZWNlZGVuY2Ug b3ZlciBwb2xsKCkgaW4gdGhpcyByb3V0aW5lLCBidXQgdGhlcmUgaXMgbm8gd2F5IHRvIGtub3cK LSAgd2hldGhlciB0aGF0IHdvdWxkIGJyZWFrIHNvbWV0aGluZyBlbHNlLgotKi8KLQotI2Vsc2UJ CQkJCS8qIE5vdCBQT0xMICovCi0jaWZkZWYgVVNMRUVQCi0vKgotICAiVGhpcyByb3V0aW5lIGlz IGltcGxlbWVudGVkIHVzaW5nIHNldGl0aW1lcigyKTsgaXQgcmVxdWlyZXMgZWlnaHQKLSAgc3lz dGVtIGNhbGxzLi4uIi4gIEluIG90aGVyIHdvcmRzLCBpdCBtaWdodCB0YWtlIDUgbWludXRlcyB0 byBzbGVlcAotICAxMCBtaWxsaXNlY29uZHMuLi4KLSovCi0gICAgZGVidWcoRjEwMSwibXNsZWVw IFVTTEVFUCIsIiIsbSk7Ci0gICAgaWYgKG0gPj0gMTAwMCkgewkJCS8qIENhdGNoIGJpZyBhcmd1 bWVudHMuICovCi0Jc2xlZXAobS8xMDAwKTsKLQltID0gbSAlIDEwMDA7Ci0JaWYgKG0gPCAxMCkg cmV0dXJuKDApOwotICAgIH0KLSAgICB1c2xlZXAoKHVuc2lnbmVkIGludCkobSAqIDEwMDApKTsK LSAgICByZXR1cm4oMCk7Ci0jZWxzZQotI2lmZGVmIGFlZ2lzCi0gICAgdGltZV8kY2xvY2tfdCBk dXI7Ci0gICAgZGVidWcoRjEwMSwibXNsZWVwIGFlZ2lzIiwiIixtKTsKLSAgICBkdXIuYzIuaGln aDE2ID0gMDsKLSAgICBkdXIuYzIubG93MzIgID0gMjUwICogbTsgLyogb25lIG1pbGxpc2Vjb25k ID0gMjUwIGZvdXIgbWljcm9zZWNvbmQgdGlja3MgKi8KLSAgICB0aW1lXyR3YWl0KHRpbWVfJHJl bGF0aXZlLCBkdXIsIHN0KTsKLSAgICByZXR1cm4oMCk7Ci0jZWxzZQotI2lmZGVmIFBST1ZYMQot ICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBWZW5peCIsIiIsbSk7Ci0gICAgaWYgKG0gPD0gMCkgcmV0 dXJuKDApOwotICAgIHNsZWVwKC0oKG0gKiA2MCArIDUwMCkgLyAxMDAwKSk7Ci0gICAgcmV0dXJu KDApOwotI2Vsc2UKLSNpZmRlZiBOQVAKLSAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgTkFQIiwiIixt KTsKLSAgICBuYXAoKGxvbmcpbSk7Ci0gICAgcmV0dXJuKDApOwotI2Vsc2UKLSNpZmRlZiBBVFRT VgotI2lmbmRlZiBCU0Q0NAotICAgIGV4dGVybiBsb25nIHRpbWVzKCk7CQkvKiBPciAjaW5jbHVk ZSA8dGltZXMuaD4gPyAqLwotI2VuZGlmIC8qIEJTRDQ0ICovCi0gICAgbG9uZyB0MSwgdDIsIHRh cnJheVs0XTsKLSAgICBpbnQgdDM7Ci0gICAgY2hhciAqY3AgPSBnZXRlbnYoIkhaIik7Ci0gICAg aW50IENMT0NLX1RJQ0s7Ci0gICAgaW50IGhlcnR6OwotCi0gICAgaWYgKGNwICYmIChoZXJ0eiA9 IGF0b2koY3ApKSkgewotICAgICAgICBDTE9DS19USUNLICA9IDEwMDAgLyBoZXJ0ejsKLSAgICB9 IGVsc2UgewkJCQkvKiBwcm9iYWJseSBzaW5nbGUgdXNlciBtb2RlICovCi0jaWZkZWYgSFoKLSAg ICAgICAgQ0xPQ0tfVElDSyAgPSAxMDAwIC8gSFo7Ci0jZWxzZQotCXN0YXRpYyB3YXJuZWQgPSAw OwotCS8qIEhaIGFsd2F5cyBleGlzdHMgaW4sIGZvciBpbnN0YW5jZSwgU0NPIFhlbml4LCBzbyB5 b3UgZG9uJ3QgaGF2ZSB0bwotCSAqIG1ha2Ugc3BlY2lhbCAjaWZkZWZzIGZvciBYRU5JWCBoZXJl LCBsaWtlIGluIHZlciA0Ri4gQWxzbywgaWYgeW91Ci0JICogaGF2ZSBYZW5peCwgeW91IGhhdmUg c2hvdWxkIGhhdmUgbmFwKCksIHNvIHRoZSBiZXN0IGlzIHRvIHVzZSAtRE5BUAotCSAqIGluIHRo ZSBtYWtlZmlsZS4gTW9zdCBzeXN0ZW1zIGhhdmUgSFouCi0JICovCi0JQ0xPQ0tfVElDSyA9IDE3 OwkJLyogMS82MCBzZWMgKi8KLQlpZiAoIXdhcm5lZCkgewotICAgICAgICAgIHByaW50Zigid2Fy bmluZzogZW52aXJvbm1lbnQgdmFyaWFibGUgSFogYmFkLi4uIHVzaW5nIEhaPSVkXHJcbiIsCi0J CSAxMDAwIC8gQ0xPQ0tfVElDSyk7Ci0gICAgICAgICAgd2FybmVkID0gMTsKLQl9Ci0jZW5kaWYg LyogIUhaICovCi0gICAgfQotICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBBVFRTViIsIiIsbSk7Ci0g ICAgaWYgKG0gPD0gMCkgcmV0dXJuKDApOwotICAgIGlmIChtID49IDEwMDApIHsJCQkvKiBDYXRj aCBiaWcgYXJndW1lbnRzLiAqLwotCXNsZWVwKG0vMTAwMCk7Ci0JbSA9IG0gJSAxMDAwOwotCWlm IChtIDwgMTApIHJldHVybigwKTsKLSAgICB9Ci0gICAgaWYgKCh0MSA9IHRpbWVzKHRhcnJheSkp IDwgMCkgcmV0dXJuKC0xKTsKLSAgICB3aGlsZSAoMSkgewotICAgICAgICBpZiAoKHQyID0gdGlt ZXModGFycmF5KSkgPCAwKSByZXR1cm4oLTEpOwotICAgICAgICB0MyA9ICgoaW50KSh0MiAtIHQx KSkgKiBDTE9DS19USUNLOwotICAgICAgICBpZiAodDMgPiBtKSByZXR1cm4odDMpOwotICAgIH0K LSNlbHNlIC8qIE5vdCBBVFRTViAqLwotI2lmZGVmIE1TTEZUSU1FCQkJCS8qIFVzZSBmdGltZSgp IGxvb3AuLi4gKi8KLSAgICBpbnQgdDEsIHQzID0gMDsKLSAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAg TVNMRlRJTUUiLCIiLG0pOwotICAgIGlmIChtIDw9IDApIHJldHVybigwKTsKLSAgICBpZiAobSA+ PSAxMDAwKSB7CQkJLyogQ2F0Y2ggYmlnIGFyZ3VtZW50cy4gKi8KLQlzbGVlcChtLzEwMDApOwot CW0gPSBtICUgMTAwMDsKLQlpZiAobSA8IDEwKSByZXR1cm4oMCk7Ci0gICAgfQotI2lmZGVmIFFO WAotICAgIGZ0aW1lKCZmdHApOwkJCS8qIHZvaWQgZnRpbWUoKSBpbiBRTlggKi8KLSNlbHNlCi0g ICAgaWYgKGZ0aW1lKCZmdHApIDwgMCkgcmV0dXJuKC0xKTsJLyogR2V0IGJhc2UgdGltZS4gKi8K LSNlbmRpZiAvKiBRTlggKi8KLSAgICB0MSA9ICgoZnRwLnRpbWUgJiAweGZmKSAqIDEwMDApICsg ZnRwLm1pbGxpdG07Ci0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgZnRpbWUoJmZ0cCk7CQkJLyog R2V0IGN1cnJlbnQgdGltZSBhbmQgY29tcGFyZS4gKi8KLSAgICAgICAgdDMgPSAoKChmdHAudGlt ZSAmIDB4ZmYpICogMTAwMCkgKyBmdHAubWlsbGl0bSkgLSB0MTsKLSAgICAgICAgaWYgKHQzID4g bSkgcmV0dXJuKDApOwotICAgIH0KLSNlbHNlCi0vKiBUaGlzIGluY2x1ZGVzIHRydWUgUE9TSVgs IHdoaWNoIGhhcyBubyB3YXkgdG8gZG8gdGhpcy4gKi8KLSAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAg YnVzeSBsb29wIiwiIixtKTsKLSAgICBpZiAobSA+PSAxMDAwKSB7CQkJLyogQ2F0Y2ggYmlnIGFy Z3VtZW50cy4gKi8KLQlzbGVlcChtLzEwMDApOwotCW0gPSBtICUgMTAwMDsKLQlpZiAobSA8IDEw KSByZXR1cm4oMCk7Ci0gICAgfQotICAgIGlmIChtID4gMCkgd2hpbGUgKG0gPiAwKSBtLS07CS8q IEp1c3QgYSBkdW1iIGJ1c3kgbG9vcCAqLwotICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBNU0xG VElNRSAqLwotI2VuZGlmIC8qIEFUVFNWICovCi0jZW5kaWYgLyogTkFQICovCi0jZW5kaWYgLyog UFJPVlgxICovCi0jZW5kaWYgLyogYWVnaXMgKi8KLSNlbmRpZiAvKiBDS19QT0xMICovCi0jZW5k aWYgLyogU0VMRUNUICovCi0jZW5kaWYgLyogQkVPU09SQkVCT1ggKi8KLSNlbmRpZiAvKiBVU0xF RVAgKi8KLSNlbmRpZiAvKiBQbGFuOSAqLwotfQotCi0vKiAgUiBUIEkgTSBFIFIgLS0gIFJlc2V0 IGVsYXBzZWQgdGltZSBjb3VudGVyICAqLwotCi1WT0lECi1ydGltZXIoKSB7Ci0gICAgdGNvdW50 ID0gdGltZSggKHRpbWVfdCAqKSAwICk7Ci19Ci0KLQotLyogIEcgVCBJIE0gRSBSIC0tICBHZXQg Y3VycmVudCB2YWx1ZSBvZiBlbGFwc2VkIHRpbWUgY291bnRlciBpbiBzZWNvbmRzICAqLwotCi1p bnQKLWd0aW1lcigpIHsKLSAgICBpbnQgeDsKLSAgICB4ID0gKGludCkgKHRpbWUoICh0aW1lX3Qg KikgMCApIC0gdGNvdW50KTsKLSAgICBkZWJ1ZyhGMTAxLCJndGltZXIiLCIiLHgpOwotICAgIHJl dHVybiggKHggPCAwKSA/IDAgOiB4ICk7Ci19Ci0KLSNpZmRlZiBHRlRJTUVSCi0vKgotICBGbG9h dGluZy1wb2ludCB0aW1lcnMuICBSZXF1aXJlIG5vdCBvbmx5IGZsb2F0aW5nIHBvaW50IHN1cHBv cnQsIGJ1dAotICBhbHNvIGdldHRpbWVvZmRheSgpLgotKi8KLXN0YXRpYyBzdHJ1Y3QgdGltZXZh bCB0emVybzsKLQotVk9JRAotcmZ0aW1lcigpIHsKLSNpZmRlZiBHVE9ET05FQVJHCQkJLyogQWNj b3VudCBmb3IgTW90J3MgZGVmaW5pdGlvbiAqLwotICAgIChWT0lEKSBnZXR0aW1lb2ZkYXkoJnR6 ZXJvKTsKLSNlbHNlCi0gICAgKFZPSUQpIGdldHRpbWVvZmRheSgmdHplcm8sIChzdHJ1Y3QgdGlt ZXpvbmUgKikwKTsKLSNlbmRpZiAvKiBHVE9ET05FQVJHICovCi19Ci0KLUNLRkxPQVQKLWdmdGlt ZXIoKSB7Ci0gICAgc3RydWN0IHRpbWV2YWwgdG5vdywgdGRlbHRhOwotICAgIENLRkxPQVQgczsK LSNpZmRlZiBERUJVRwotICAgIGNoYXIgZnBidWZbNjRdOwotI2VuZGlmIC8qIERFQlVHICovCi0j aWZkZWYgR1RPRE9ORUFSRwkJCS8qIEFjY291bnQgZm9yIE1vdCdzIGRlZmluaXRpb24gKi8KLSAg ICAoVk9JRCkgZ2V0dGltZW9mZGF5KCZ0bm93KTsKLSNlbHNlCi0gICAgKFZPSUQpIGdldHRpbWVv ZmRheSgmdG5vdywgKHN0cnVjdCB0aW1lem9uZSAqKTApOwotI2VuZGlmIC8qIEdUT0RPTkVBUkcg Ki8KLQotICAgIHRkZWx0YS50dl9zZWMgPSB0bm93LnR2X3NlYyAtIHR6ZXJvLnR2X3NlYzsKLSAg ICB0ZGVsdGEudHZfdXNlYyA9IHRub3cudHZfdXNlYyAtIHR6ZXJvLnR2X3VzZWM7Ci0KLSAgICBp ZiAodGRlbHRhLnR2X3VzZWMgPCAwKSB7Ci0JdGRlbHRhLnR2X3NlYy0tOwotCXRkZWx0YS50dl91 c2VjICs9IDEwMDAwMDA7Ci0gICAgfQotICAgIHMgPSAoQ0tGTE9BVCkgdGRlbHRhLnR2X3NlYyAr ICgoQ0tGTE9BVCkgdGRlbHRhLnR2X3VzZWMgLyAxMDAwMDAwLjApOwotICAgIGlmIChzIDwgR0ZN SU5USU1FKQotICAgICAgcyA9IEdGTUlOVElNRTsKLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJs b2cpIHsKLQlzcHJpbnRmKGZwYnVmLCIlZiIscyk7Ci0JZGVidWcoRjExMCwiZ2Z0aW1lciIsZnBi dWYsMCk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0gICAgcmV0dXJuKHMpOwotfQotI2Vu ZGlmIC8qIEdGVElNRVIgKi8KLQotLyogIFogVCBJIE0gRSAgLS0gIFJldHVybiBhc2N0aW1lKCkt Zm9ybWF0IGRhdGUvdGltZSBzdHJpbmcgICovCi0vKgotICBOT1RFOiBhcyBhIHNpZGUgZWZmZWN0 IG9mIGNhbGxpbmcgdGhpcyByb3V0aW5lLCB3ZSBjYW4gYWxzbyBzZXQgdGhlCi0gIGZvbGxvd2lu ZyB0d28gdmFyaWFibGVzLCBnaXZpbmcgdGhlIG1pY3JvLSBhbmQgbWlsbGlzZWNvbmRzIChmcmFj dGlvbnMgb2YKLSAgc2Vjb25kcykgb2YgdGhlIGNsb2NrIHRpbWUuICBDdXJyZW50bHkgdGhpcyBp cyBkb25lIG9ubHkgaW4gQlNELWJhc2VkIGJ1aWxkcwotICB0aGF0IHVzZSBnZXR0aW1lb2ZkYXko KS4gIFdoZW4gdGhlc2UgdmFyaWFibGVzIGFyZSBub3QgZmlsbGVkIGluLCB0aGV5IGFyZQotICBs ZWZ0IHdpdGggYSB2YWx1ZSBvZiAtMUwuCi0qLwotc3RhdGljIGNoYXIgYXNjdG1idWZbNjRdOwot Ci1WT0lECi16dGltZShzKSBjaGFyICoqczsgewotCi0jaWZkZWYgR0ZUSU1FUgotLyoKLSAgVGhl IGdldHRpbWVvZmRheSgpIG1ldGhvZCwgd2hpY2ggYWxzbyBzZXRzIHp0bXNlYyBhbmQgenR1c2Vj LCB3b3JrcyBmb3IKLSAgYWxsIEdGVElNRVIgYnVpbGRzLiAgTk9URTogenRtc2VjIGFuZCB6dHVz ZWMgYXJlIGRlZmluZWQgaW4gY2tjbWFpLmMsCi0gIGFuZCBleHRlcm4gZGVjbGFyYXRpb25zIGZv ciB0aGVtIGFyZSBpbiBja2NkZWIuaDsgdGh1cyB0aGV5IGFyZQotICBkZWNsYXJlZCBpbiB0aGlz IGZpbGUgYnkgaW5jbHVzaW9uIG9mIGNrY2RlYi5oLgotKi8KLSAgICBjaGFyICphc2N0aW1lKCk7 Ci0gICAgc3RydWN0IHRtICpsb2NhbHRpbWUoKTsKLSAgICBzdHJ1Y3QgdG0gKnRwOwotICAgIHp0 bXNlYyA9IC0xTDsKLSAgICB6dHVzZWMgPSAtMUw7Ci0KLSAgICBpZiAoIXMpCi0gICAgICBkZWJ1 ZyhGMTAwLCJ6dGltZSBzPT1OVUxMIiwiIiwwKTsKLQotI2lmZGVmIEdUT0RPTkVBUkcKLSAgICAv KiBObyAybmQgYXJnIGluIE1vdG9yb2xhIFNWODggYW5kIHNvbWUgb3RoZXJzICovCi0gICAgaWYg KGdldHRpbWVvZmRheSgmdHYpID4gLTEpCi0jZWxzZQotI2lmbmRlZiBDT0hFUkVOVAotI2lmZGVm IFBUWAotICAgIGlmIChnZXR0aW1lb2ZkYXkoJnR2LE5VTEwpID4gLTEpCi0jZWxzZQotI2lmZGVm IE5PVElNRVpPTkUKLSAgICBpZiAoZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCkgPiAtMSkJLyogd29u ZGVyIHdoYXQgdGhpcyBkb2VzLi4uICovCi0jZWxzZQotICAgIGlmIChnZXR0aW1lb2ZkYXkoJnR2 LCAmdHopID4gLTEpCi0jZW5kaWYgLyogTk9USU1FWk9ORSAqLwotI2VuZGlmIC8qIFBUWCAqLwot I2VuZGlmIC8qIENPSEVSRU5UICovCi0jZW5kaWYgLyogR1RPRE9ORUFSRyAqLwotICAgICAgewkJ CQkJLyogRmlsbCBpbiB0bSBzdHJ1Y3QgKi8KLQl6dHVzZWMgPSB0di50dl91c2VjOwkJLyogTWlj cm9zZWNvbmRzICovCi0JenRtc2VjID0genR1c2VjIC8gMTAwMEw7CS8qIE1pbGxpc2Vjb25kcyAq LwotI2lmZGVmIEhQVVg5Ci0JewotCSAgICB0aW1lX3Qgeno7Ci0JICAgIHp6ID0gdHYudHZfc2Vj OwotCSAgICB0cCA9IGxvY2FsdGltZSgmenopOwkvKiBDb252ZXJ0IHRvIGxvY2FsIHRpbWUgKi8K LQl9Ci0jZWxzZQotI2lmZGVmIEhQVVgxMDAwCi0JewotCSAgICB0aW1lX3Qgeno7Ci0JICAgIHp6 ID0gdHYudHZfc2VjOwotCSAgICB0cCA9IGxvY2FsdGltZSgmenopOwotCX0KLSNlbHNlCi0jaWZk ZWYgTElOVVgKLQl7ICAgLyogYXZvaWQgdW5hbGlnbmVkIGFjY2VzcyB0cmFwIG9uIDY0LWJpdCBw bGF0Zm9ybXMgKi8KLQkgICAgdGltZV90IHp6OwotCSAgICB6eiA9IHR2LnR2X3NlYzsKLQkgICAg dHAgPSBsb2NhbHRpbWUoJnp6KTsKLQl9Ci0jZWxzZQotI2lmZGVmIE1BQ09TWAotCXRwID0gbG9j YWx0aW1lKCh0aW1lX3QgKikmdHYudHZfc2VjKTsgLyogQ29udmVydCB0byBsb2NhbCB0aW1lICov Ci0jZWxzZQotCXRwID0gbG9jYWx0aW1lKCZ0di50dl9zZWMpOwotI2VuZGlmIC8qIE1BQ09TWCAq LwotI2VuZGlmIC8qIExJTlVYICovCi0jZW5kaWYgLyogSFBVWDEwMDAgKi8KLSNlbmRpZiAvKiBI UFVYOSAqLwotCWlmIChzKSB7Ci0JICAgIGNoYXIgKiBzMjsKLQkgICAgczIgPSBhc2N0aW1lKHRw KTsJCS8qIENvbnZlcnQgcmVzdWx0IHRvIEFTQ0lJIHN0cmluZyAqLwotCSAgICBhc2N0bWJ1Zlsw XSA9ICdcMCc7Ci0JICAgIGlmIChzMikgY2tzdHJuY3B5KGFzY3RtYnVmLHMyLDY0KTsKLQkgICAg KnMgPSBhc2N0bWJ1ZjsKLQkgICAgZGVidWcoRjExMSwienRpbWUgR0ZUSU1FUiBnZXR0aW1lb2Zk YXkiLCpzLHp0dXNlYyk7Ci0JfQotICAgIH0KLSNlbHNlICAvKiBOb3QgR0ZUSU1FUiAqLwotCi0j dW5kZWYgWlRJTUVWNwkJCQkvKiBXaGljaCBzeXN0ZW1zIG5lZWQgdG8gdXNlICovCi0jaWZkZWYg Q09IRVJFTlQJCQkJLyogb2xkIFVOSVggVmVyc2lvbiA3IHdheS4uLiAqLwotI2RlZmluZSBaVElN RVY3Ci0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLSNpZmRlZiBUT1dFUjEKLSNkZWZpbmUgWlRJTUVW NwotI2VuZGlmIC8qIFRPV0VSMSAqLwotI2lmZGVmIEFOWUJTRAotI2lmbmRlZiBCU0Q0MgotI2Rl ZmluZSBaVElNRVY3Ci0jZW5kaWYgLyogQlNENDIgKi8KLSNlbmRpZiAvKiBBTllCU0QgKi8KLSNp ZmRlZiBWNwotI2lmbmRlZiBNSU5JWAotI2RlZmluZSBaVElNRVY3Ci0jZW5kaWYgLyogTUlOSVgg Ki8KLSNlbmRpZiAvKiBWNyAqLwotI2lmZGVmIFBPU0lYCi0jZGVmaW5lIFpUSU1FVjcKLSNlbmRp ZiAvKiBQT1NJWCAqLwotCi0jaWZkZWYgSFBVWDEwMjAKLS8qCi0gIFByb3RvdHlwZXMgYXJlIGlu IDx0aW1lLmg+LCBpbmNsdWRlZCBhYm92ZS4KLSovCi0gICAgdGltZV90IGNsb2NrX3N0b3JhZ2U7 Ci0gICAgY2xvY2tfc3RvcmFnZSA9IHRpbWUoKHZvaWQgKikgMCk7Ci0gICAgaWYgKHMpIHsKLQkq cyA9IGN0aW1lKCZjbG9ja19zdG9yYWdlKTsKLQlkZWJ1ZyhGMTEwLCJ6dGltZTogSFBVWCAxMC4y MCIsKnMsMCk7Ci0gICAgfQotI2Vsc2UKLSNpZmRlZiBBVFRTVgkJCQkvKiBBVCZUIHdheSAqLwot LyogIGV4dGVybiBsb25nIHRpbWUoKTsgKi8JCS8qIFRoZW9yZXRpY2FsbHkgdGhlc2Ugc2hvdWxk ICovCi0gICAgY2hhciAqY3RpbWUoKTsJCQkvKiBhbHJlYWR5IGJlZW4gZGNsJ2QgaW4gPHRpbWUu aD4gKi8KLSAgICB0aW1lX3QgY2xvY2tfc3RvcmFnZTsKLSAgICBjbG9ja19zdG9yYWdlID0gdGlt ZSgKLSNpZmRlZiBJUklYNjAKLQkJCSAodGltZV90ICopCi0jZWxzZQotI2lmZGVmIEJTRDQ0Ci0J CQkgKHRpbWVfdCAqKQotI2Vsc2UKLQkJCSAobG9uZyAqKQotI2VuZGlmIC8qIEJTRDQ0ICovCi0j ZW5kaWYgLyogSVJJWDYwICovCi0JCQkgMCApOwotICAgIGlmIChzKSB7Ci0JKnMgPSBjdGltZSgg JmNsb2NrX3N0b3JhZ2UgKTsKLQlkZWJ1ZyhGMTEwLCJ6dGltZTogQVRUU1YiLCpzLDApOwotICAg IH0KLSNlbHNlCi0jaWZkZWYgUFJPVlgxCQkJCS8qIFZlbml4IDEuMCB3YXkgKi8KLSAgICBpbnQg dXRpbWVbMl07Ci0gICAgdGltZSh1dGltZSk7Ci0gICAgaWYgKHMpIHsKLQkqcyA9IGN0aW1lKHV0 aW1lKTsKLQlkZWJ1ZyhGMTEwLCJ6dGltZTogUFJPVlgxIiwqcywwKTsKLSAgICB9Ci0jZWxzZQot I2lmZGVmIEJTRDQyCQkJCS8qIDQuMkJTRCB3YXkgKi8KLSAgICBjaGFyICphc2N0aW1lKCk7Ci0g ICAgc3RydWN0IHRtICpsb2NhbHRpbWUoKTsKLSAgICBzdHJ1Y3QgdG0gKnRwOwotICAgIGdldHRp bWVvZmRheSgmdHYsICZ0eik7Ci0gICAgenR1c2VjID0gdHYudHZfdXNlYzsKLSAgICB6dG1zZWMg PSB0di50dl91c2VjIC8gMTAwMEw7Ci0gICAgdHAgPSBsb2NhbHRpbWUoJnR2LnR2X3NlYyk7Ci0g ICAgaWYgKHMpIHsKLQkqcyA9IGFzY3RpbWUodHApOwotCWRlYnVnKEYxMTEsInp0aW1lOiBCU0Q0 MiIsKnMsenR1c2VjKTsKLSAgICB9Ci0jZWxzZQotI2lmZGVmIE1JTklYCQkJCS8qIE1JTklYIHdh eSAqLwotI2lmZGVmIENPTU1FTlQKLSAgICBleHRlcm4gbG9uZyB0aW1lKCk7CQkJLyogQWxyZWFk eSBnb3QgdGhlc2UgZnJvbSA8dGltZS5oPiAqLwotICAgIGV4dGVybiBjaGFyICpjdGltZSgpOwot I2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB0aW1lX3QgdXRpbWVbMl07Ci0gICAgdGltZSh1dGlt ZSk7Ci0gICAgaWYgKHMpIHsKLQkqcyA9IGN0aW1lKHV0aW1lKTsKLQlkZWJ1ZyhGMTEwLCJ6dGlt ZTogTUlOSVgiLCpzLDApOwotICAgIH0KLSNlbHNlCi0jaWZkZWYgWlRJTUVWNwkJCQkvKiBUaGUg cmVndWxhciB3YXkgKi8KLSAgICBjaGFyICphc2N0aW1lKCk7Ci0gICAgc3RydWN0IHRtICpsb2Nh bHRpbWUoKTsKLSAgICBzdHJ1Y3QgdG0gKnRwOwotICAgIGxvbmcgeGNsb2NrOwkJCS8qIG9yIHVu c2lnbmVkIGxvbmcgZm9yIEJlQm94PyAqLwotICAgIHRpbWUoJnhjbG9jayk7Ci0gICAgdHAgPSBs b2NhbHRpbWUoJnhjbG9jayk7Ci0gICAgaWYgKHMpIHsKLQkqcyA9IGFzY3RpbWUodHApOwotCWRl YnVnKEYxMTAsInp0aW1lOiBaVElNRVY3IiwqcywwKTsKLSAgICB9Ci0jZWxzZQkJCQkJLyogQ2F0 Y2gtYWxsIGZvciBvdGhlcnMuLi4gKi8KLSAgICBpZiAocykgewotCSpzID0gIkRheSBNb24gMDAg MDA6MDA6MDAgMDAwMFxuIjsgLyogRHVtbXkgaW4gYXNjdGltZSgpIGZvcm1hdCAqLwotCWRlYnVn KEYxMTAsInp0aW1lOiBjYXRjaC1hbGwiLCpzLDApOwotICAgIH0KLSNlbmRpZiAvKiBaVElNRVY3 ICovCi0jZW5kaWYgLyogTUlOSVggKi8KLSNlbmRpZiAvKiBCU0Q0MiAqLwotI2VuZGlmIC8qIFBS T1ZYMSAqLwotI2VuZGlmIC8qIEFUVFNWICovCi0jZW5kaWYgLyogSFBVWDEwMjAgKi8KLSNlbmRp ZiAvKiBHRlRJTUVSICovCi19Ci0KLS8qICBDIE8gTiBHIE0gIC0tICBHZXQgY29uc29sZSB0ZXJt aW5hbCBtb2Rlcy4gICovCi0KLS8qCi0gIFNhdmVzIGluaXRpYWwgY29uc29sZSBtb2RlLCBhbmQg ZXN0YWJsaXNoZXMgdmFyaWFibGVzIGZvciBzd2l0Y2hpbmcKLSAgYmV0d2VlbiBjdXJyZW50IChw cmVzdW1hYmx5IG5vcm1hbCkgbW9kZSBhbmQgb3RoZXIgbW9kZXMuCi0gIFNob3VsZCBiZSBjYWxs ZWQgd2hlbiBwcm9ncmFtIHN0YXJ0cywgYnV0IG9ubHkgYWZ0ZXIgZXN0YWJsaXNoaW5nCi0gIHdo ZXRoZXIgcHJvZ3JhbSBpcyBpbiB0aGUgZm9yZWdyb3VuZCBvciBiYWNrZ3JvdW5kLgotICBSZXR1 cm5zIDEgaWYgaXQgZ290IHRoZSBtb2RlcyBPSywgMCBpZiBpdCBkaWQgbm90aGluZywgLTEgb24g ZXJyb3IuCi0qLwotaW50Ci1jb25nbSgpIHsKLSAgICBpbnQgZmQ7Ci0gICAgaWYgKGJhY2tncmQg fHwgIWlzYXR0eSgwKSkgewkvKiBJZiBpbiBiYWNrZ3JvdW5kLiAqLwotCWNnbWYgPSAtMTsJCQkv KiBEb24ndCBib3RoZXIsIG1vZGVzIGFyZSBnYXJiYWdlLiAqLwotCXJldHVybigtMSk7Ci0gICAg fQotICAgIGlmIChjZ21mID4gMCkgcmV0dXJuKDApOwkJLyogQWxyZWFkeSBkaWQgdGhpcy4gKi8K LSAgICBkZWJ1ZyhGMTAwLCJjb25nbSBnZXR0aW5nIG1vZGVzIiwiIiwwKTsgLyogTmVlZCB0byBk byBpdC4gKi8KLSNpZmRlZiBhZWdpcwotICAgIGlvc18kaW5xX3R5cGVfdWlkKGlvc18kc3RkaW4s IGNvbnVpZCwgc3QpOwotICAgIGlmIChzdC5hbGwgIT0gc3RhdHVzXyRvaykgewotCWZwcmludGYo c3RkZXJyLCAicHJvYmxlbSBnZXR0aW5nIHN0ZGluIG9ianR5cGU6ICIpOwotCWVycm9yXyRwcmlu dChzdCk7Ci0gICAgfQotICAgIGNvbmNycCA9IChjb251aWQgPT0gbWJ4XyR1aWQpOwotICAgIGNv bmJ1Zm4gPSAwOwotI2VuZGlmIC8qIGFlZ2lzICovCi0KLSNpZm5kZWYgQkVCT1gKLSAgICBpZiAo KGZkID0gb3BlbihDVFROQU0sMikpIDwgMCkgewkvKiBPcGVuIGNvbnRyb2xsaW5nIHRlcm1pbmFs ICovCi0jaWZkZWYgQ09NTUVOVAotCWZwcmludGYoc3RkZXJyLCJFcnJvciBvcGVuaW5nICVzXG4i LCBDVFROQU0pOwotCXBlcnJvcigiY29uZ20iKTsKLQlyZXR1cm4oLTEpOwotI2Vsc2UKLQlmZCA9 IDA7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIH0KLSNlbHNlCi0gICAgZmQgPSAwOwotI2Vu ZGlmIC8qICFCRUJPWCAqLwotI2lmZGVmIEJTRDQ0T1JQT1NJWAotICAgIGlmICh0Y2dldGF0dHIo ZmQsJmNjb2xkKSA8IDApIHJldHVybigtMSk7Ci0gICAgaWYgKHRjZ2V0YXR0cihmZCwmY2NjYnJr KSA8IDApIHJldHVybigtMSk7Ci0gICAgaWYgKHRjZ2V0YXR0cihmZCwmY2NyYXcpIDwgMCkgcmV0 dXJuKC0xKTsKLSNlbHNlCi0jaWZkZWYgQVRUU1YKLSAgICBpZiAoaW9jdGwoZmQsVENHRVRBLCZj Y29sZCkgIDwgMCkgcmV0dXJuKC0xKTsKLSAgICBpZiAoaW9jdGwoZmQsVENHRVRBLCZjY2Nicmsp IDwgMCkgcmV0dXJuKC0xKTsKLSAgICBpZiAoaW9jdGwoZmQsVENHRVRBLCZjY3JhdykgIDwgMCkg cmV0dXJuKC0xKTsKLSNpZmRlZiBWWFZFCi0gICAgY2NjYnJrLmNfbGluZSA9IDA7CQkJLyogU1RU WSBsaW5lIDAgZm9yIENEQyBWWC9WRSAqLwotICAgIGlmIChpb2N0bChmZCxUQ1NFVEEsJmNjY2Jy aykgPCAwKSByZXR1cm4oLTEpOwotICAgIGNjcmF3LmNfbGluZSA9IDA7CQkJLyogU1RUWSBsaW5l IDAgZm9yIENEQyBWWC9WRSAqLwotICAgIGlmIChpb2N0bChmZCxUQ1NFVEEsJmNjcmF3KSA8IDAp IHJldHVybigtMSk7Ci0jZW5kaWYgLyogVlhWRSAqLwotI2Vsc2UKLSNpZmRlZiBCRUxMVjEwCi0g ICAgaWYgKGlvY3RsKGZkLFRJT0NHRVRQLCZjY29sZCkgPCAwKSByZXR1cm4oLTEpOwotICAgIGlm IChpb2N0bChmZCxUSU9DR0VUUCwmY2NjYnJrKSA8IDApIHJldHVybigtMSk7Ci0gICAgaWYgKGlv Y3RsKGZkLFRJT0NHRVRQLCZjY3JhdykgPCAwKSByZXR1cm4oLTEpOwotICAgIGRlYnVnKEYxMDEs ImNjY2Jyay5zZ19mbGFncyBvcmlnIiwiIiwgY2NjYnJrLnNnX2ZsYWdzKTsKLSNlbHNlCi0gICAg aWYgKGd0dHkoZmQsJmNjb2xkKSA8IDApIHJldHVybigtMSk7Ci0gICAgaWYgKGd0dHkoZmQsJmNj Y2JyaykgPCAwKSByZXR1cm4oLTEpOwotICAgIGlmIChndHR5KGZkLCZjY3JhdykgPCAwKSByZXR1 cm4oLTEpOwotI2VuZGlmIC8qIEJFTExWMTAgKi8KLSNlbmRpZiAvKiBBVFRTViAqLwotI2VuZGlm IC8qIEJTRDQ0T1JQT1NJWCAqLwotI2lmZGVmIHNvbnlfbmV3cwkJCS8qIFNvbnkgTkVXUyAqLwot ICAgIGlmIChpb2N0bChmZCxUSU9DS0dFVCwma21fY29uKSA8IDApIHsgLyogR2V0IGNvbnNvbGUg S2FuamkgbW9kZSAqLwotCXBlcnJvcigiY29uZ20gZXJyb3IgZ2V0dGluZyBLYW5qaSBtb2RlIik7 Ci0JZGVidWcoRjEwMSwiY29uZ20gZXJyb3IgZ2V0dGluZyBLYW5qaSBtb2RlIiwiIiwwKTsKLQlr bV9jb24gPSAtMTsJCQkvKiBNYWtlIHN1cmUgdGhpcyBzdGF5cyB1bmRlZmluZWQuICovCi0JcmV0 dXJuKC0xKTsKLSAgICB9Ci0jZW5kaWYgLyogc29ueV9uZXdzICovCi0gICAgaWYgKGZkID4gMCkK LSAgICAgIGNsb3NlKGZkKTsKLSAgICBjZ21mID0gMTsJCQkJLyogRmxhZyB0aGF0IHdlIGdvdCB0 aGVtLiAqLwotICAgIHJldHVybigxKTsKLX0KLQotCi1zdGF0aWMgVk9JRAotY29uZ2V0YnVmKHgp IGludCB4OyB7Ci0gICAgaW50IG47Ci0gICAgbiA9IENPTkJVRlNJWiAtIChjb25idWZwIC0gY29u YnVmKTsJLyogSG93IG11Y2ggcm9vbSBsZWZ0IGluIGJ1ZmZlcj8gKi8KLSAgICBpZiAoeCA+IG4p IHsKLQlkZWJ1ZyhGMTAxLCJjb25nZXRidWYgY2hhciBsb3NzIiwiIix4LW4pOwotCXggPSBuOwot ICAgIH0KLSAgICB4ID0gcmVhZCgwLGNvbmJ1ZnAseCk7Ci0gICAgY29uYnVmbiArPSB4OwotICAg IGRlYnVnKEYxMTEsImNvbmdldGJ1ZiByZWFkYWhlYWQiLGNvbmJ1Zix4KTsKLX0KLQotCi0vKiAg QyBPIE4gQyBCIC0tICBQdXQgY29uc29sZSBpbiBjYnJlYWsgbW9kZS4gICovCi0KLS8qICBSZXR1 cm5zIDAgaWYgb2ssIC0xIGlmIG5vdCAgKi8KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWNvbmNi KGNoYXIgZXNjKQotI2Vsc2UKLWNvbmNiKGVzYykgY2hhciBlc2M7Ci0jZW5kaWYgLyogQ0tfQU5T SUMgKi8KLS8qIGNvbmNiICovIHsKLSAgICBpbnQgeCwgeSA9IDA7Ci0gICAgZGVidWcoRjEwMSwi Y29uY2IgY29uc3RhdGUiLCIiLGNvbnN0YXRlKTsKLSAgICBkZWJ1ZyhGMTAxLCJjb25jYiBjZ21m IiwiIixjZ21mKTsKLSAgICBkZWJ1ZyhGMTAxLCJjb25jYiBiYWNrZ3JkIiwiIixiYWNrZ3JkKTsK LQotICAgIGlmIChjb25zdGF0ZSA9PSBDT05fQ0IpCi0gICAgICByZXR1cm4oMCk7Ci0KLSAgICBp ZiAoY2dtZiA8IDEpCQkJLyogRGlkIHdlIGdldCBjb25zb2xlIG1vZGVzIHlldD8gKi8KLSAgICAg IGlmICghYmFja2dyZCkJCQkvKiBObywgaW4gYmFja2dyb3VuZD8gKi8KLQljb25nbSgpOwkJCS8q IE5vLCB0cnkgdG8gZ2V0IHRoZW0gbm93LiAqLwotICAgIGlmIChjZ21mIDwgMSkJCQkvKiBTdGls bCBkb24ndCBoYXZlIHRoZW0/ICovCi0gICAgICByZXR1cm4oMCk7CQkJLyogR2l2ZSB1cC4gKi8K LSAgICBkZWJ1ZyhGMTAxLCJjb25jYiB0dHlmZCIsIiIsdHR5ZmQpOwotICAgIGRlYnVnKEYxMDEs ImNvbmNiIHR0ZmRmbGciLCIiLHR0ZmRmbGcpOwotI2lmZGVmIENPTU1FTlQKLSAgICAvKiBUaGlz IGJyZWFrcyByZXR1cm5pbmcgdG8gcHJvbXB0IGFmdGVyIHByb3RvY29sIHdpdGggIi1sIDAiICov Ci0gICAgLyogQ29tbWVudGVkIG91dCBKdWx5IDE5OTggKi8KLSAgICBpZiAodHRmZGZsZyAmJiB0 dHlmZCA+PSAwICYmIHR0eWZkIDwgMykKLSAgICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBDT01N RU5UICovCi0gICAgeCA9IGlzYXR0eSgwKTsKLSAgICBkZWJ1ZyhGMTAxLCJjb25jYiBpc2F0dHki LCIiLHgpOwotICAgIGlmICgheCkgcmV0dXJuKDApOwkJCS8qIE9ubHkgd2hlbiBydW5uaW5nIG9u IHJlYWwgdHR5cyAqLwotICAgIGRlYnVnKEYxMDEsImNvbmNiIHhzdXNwZW5kIiwiIix4c3VzcGVu ZCk7Ci0gICAgaWYgKGJhY2tncmQpCQkJLyogRG8gbm90aGluZyBpZiBpbiBiYWNrZ3JvdW5kLiAq LwotICAgICAgcmV0dXJuKDApOwotICAgIGVzY2NociA9IGVzYzsgICAgICAgICAgICAgICAgICAg ICAgIC8qIE1ha2UgdGhpcyBhdmFpbGFibGUgdG8gb3RoZXIgZm5zICovCi0gICAgY2t4ZWNoID0g MTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJvZ3JhbSBjYW4gZWNobyBjaGFyYWN0ZXJz ICovCi0jaWZkZWYgYWVnaXMKLSAgICBjb25idWZuID0gMDsKLSAgICBpZiAoY29uY3JwKSByZXR1 cm4od3JpdGUoMSwgIlwwMzVcMDAyIiwgMikpOwotICAgIGlmIChjb251aWQgPT0gaW5wdXRfcGFk XyR1aWQpIHtwYWRfJHJhdyhpb3NfJHN0ZGluLCBzdCk7IHJldHVybigwKTt9Ci0jZW5kaWYgLyog YWVnaXMgKi8KLQotI2lmZGVmIENPSEVSRU5UCi0jZGVmaW5lIFNWT1JQT1NJWAotI2VuZGlmIC8q IENPSEVSRU5UICovCi0KLSNpZmRlZiBQbGFuOQotICAgIHggPSBwOWNvbmNiKCk7Ci0jZWxzZQot I2lmbmRlZiBTVk9SUE9TSVgJCQkvKiBCU0QsIFY3LCBldGMgKi8KLSAgICBkZWJ1ZyhGMTAxLCJj Y2Nicmsuc2dfZmxhZ3MgY29uY2IgMSIsIiIsIGNjY2Jyay5zZ19mbGFncyk7Ci0gICAgZGVidWco RjEwMSwiY29uY2Igc3R0eSBDQlJFQUsiLCIiLDApOwotICAgIGNjY2Jyay5zZ19mbGFncyB8PSAo Q0JSRUFLfENSTU9EKTsJLyogU2V0IHRvIGNoYXJhY3RlciB3YWtldXAsICovCi0gICAgY2NjYnJr LnNnX2ZsYWdzICY9IH5FQ0hPOyAgICAgICAgICAgLyogbm8gZWNoby4gKi8KLSAgICBkZWJ1ZyhG MTAxLCJjY2Nicmsuc2dfZmxhZ3MgY29uY2IgMiIsIiIsIGNjY2Jyay5zZ19mbGFncyk7Ci0gICAg ZXJybm8gPSAwOwotLyoKLSAgQlNEIHN0dHkoKSBjbGVhcnMgdGhlIGNvbnNvbGUgYnVmZmVyLiAg U28gaWYgYW55dGhpbmcgaXMgd2FpdGluZyBpbiBpdCwKLSAgd2UgaGF2ZSB0byByZWFkIGl0IG5v dyB0byBhdm9pZCBsb3NpbmcgaXQuCi0qLwotICAgIHggPSBjb25jaGsoKTsKLSAgICBpZiAoeCA+ IDApCi0gICAgICBjb25nZXRidWYoeCk7Ci0KLSNpZmRlZiBCRUxMVjEwCi0gICAgeCA9IGlvY3Rs KDAsVElPQ1NFVFAsJmNjY2Jyayk7Ci0jZWxzZQotICAgIHggPSBzdHR5KDAsJmNjY2Jyayk7Ci0g ICAgZGVidWcoRjEwMSwiY2NjYnJrLnNnX2ZsYWdzIGNvbmNiIHgiLCIiLCB4KTsKLSNlbmRpZiAv KiBCRUxMVjEwICovCi0jZWxzZQkJCQkJLyogU3lzIFYgYW5kIFBPU0lYICovCi0jaWZuZGVmIE9Y T1MKLSAgICBkZWJ1ZyhGMTAxLCJjb25jYiBjY2NicmsuY19mbGFnIiwiIixjY2NicmsuY19sZmxh Zyk7Ci0jaWZkZWYgUU5YCi0gICAgLyogRG9uJ3QgbWVzcyB3aXRoIElFWFRFTiAqLwotICAgIGNj Y2Jyay5jX2xmbGFnICY9IH4oSUNBTk9OfEVDSE8pOwotI2Vsc2UKLSNpZmRlZiBDT0hFUkVOVAot ICAgIGNjY2Jyay5jX2xmbGFnICY9IH4oSUNBTk9OfEVDSE8pOwotI2Vsc2UKLSAgICBjY2Nicmsu Y19sZmxhZyAmPSB+KElDQU5PTnxFQ0hPfElFWFRFTik7Ci0jZW5kaWYgLyogQ09IRVJFTlQgKi8K LSNlbmRpZiAvKiBRTlggKi8KLSAgICBjY2NicmsuY19sZmxhZyB8PSBJU0lHOwkJLyogQWxsb3cg c2lnbmFscyBpbiBjb21tYW5kIG1vZGUuICovCi0gICAgY2NjYnJrLmNfaWZsYWcgfD0gSUdOQlJL OwkJLyogQnV0IGlnbm9yZSBCUkVBSyBzaWduYWwgKi8KLSAgICBjY2NicmsuY19pZmxhZyAmPSB+ QlJLSU5UOwotCi0jZWxzZSAvKiBPWE9TICovCi0gICAgZGVidWcoRjEwMCwiY29uY2IgT1hPUyBp cyBkZWZpbmVkIiwiIiwwKTsKLSAgICBjY2NicmsuY19sZmxhZyAmPSB+KElDQU5PTnxFQ0hPKTsK LSAgICBjY2NicmsuY19jY1tWRElTQ0FSRF0gPSBjY2NicmsuY19jY1tWTE5FWFRdID0gQ0RJU0FC TEU7Ci0jZW5kaWYgLyogT1hPUyAqLwotI2lmZGVmIENPTU1FTlQKLS8qCi0gIEJlbGlldmUgaXQg b3Igbm90LCBpbiBTQ08gVU5JWCwgVlNVU1AgaXMgZ3JlYXRlciB0aGFuIE5DQywgYW5kIHNvIHRo aXMKLSAgYXJyYXkgcmVmZXJlbmNlIGlzIG91dCBvZiBib3VuZHMuICBJdCdzIG9ubHkgYSBkZWJ1 ZygpIGNhbGwgc28gd2hvIG5lZWRzIGl0LgotKi8KLSNpZmRlZiBWU1VTUAotICAgIGRlYnVnKEYx MDEsImNvbmNiIGNfY2NbVlNVU1BdIiwiIixjY2NicmsuY19jY1tWU1VTUF0pOwotI2VuZGlmIC8q IFZTVVNQICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2lmbmRlZiBWSU5UUgotICAgIGRlYnVn KEYxMDEsImNvbmNiIGNfY2NbMF0iLCIiLGNjY2Jyay5jX2NjWzBdKTsKLSAgICBjY2NicmsuY19j Y1swXSA9IDAwMzsgICAgICAgICAgICAgICAvKiBJbnRlcnJ1cHQgY2hhciBpcyBDb250cm9sLUMg Ki8KLSNlbHNlCi0gICAgZGVidWcoRjEwMSwiY29uY2IgY19jY1tWSU5UUl0iLCIiLGNjY2Jyay5j X2NjWzBdKTsKLSAgICBjY2NicmsuY19jY1tWSU5UUl0gPSAwMDM7Ci0jZW5kaWYgLyogVklOVFIg Ki8KLSNpZm5kZWYgVlFVSVQKLSAgICBjY2NicmsuY19jY1sxXSA9IGVzY2NocjsgICAgICAgICAg ICAvKiBlc2NhcGUgZHVyaW5nIHBhY2tldCBtb2RlcyAqLwotI2Vsc2UKLSAgICBjY2NicmsuY19j Y1tWUVVJVF0gPSBlc2NjaHI7Ci0jZW5kaWYgLyogVlFVSVQgKi8KLSNpZm5kZWYgVkVPRgotICAg IGNjY2Jyay5jX2NjWzRdID0gMTsKLSNlbHNlCi0jaWZuZGVmIE9YT1MKLSNpZmRlZiBWTUlOCi0g ICAgY2NjYnJrLmNfY2NbVk1JTl0gPSAxOwotI2VuZGlmIC8qIFZNSU4gKi8KLSNlbHNlIC8qIE9Y T1MgKi8KLSAgICBjY2NicmsuY19taW4gPSAxOwotI2VuZGlmIC8qIE9YT1MgKi8KLSNlbmRpZiAv KiBWRU9GICovCi0jaWZkZWYgWklMT0cKLSAgICBjY2NicmsuY19jY1s1XSA9IDA7Ci0jZWxzZQot I2lmbmRlZiBWRU9MCi0gICAgY2NjYnJrLmNfY2NbNV0gPSAxOwotI2Vsc2UKLSNpZm5kZWYgT1hP UwotI2lmZGVmIFZUSU1FCi0gICAgY2NjYnJrLmNfY2NbVlRJTUVdID0gMTsKLSNlbmRpZiAvKiBW VElNRSAqLwotI2Vsc2UgLyogT1hPUyAqLwotICAgIGNjY2Jyay5jX3RpbWUgPSAxOwotI2VuZGlm IC8qIE9YT1MgKi8KLSNlbmRpZiAvKiBWRU9MICovCi0jZW5kaWYgLyogWklMT0cgKi8KLSAgICBl cnJubyA9IDA7Ci0jaWZkZWYgQlNENDRPUlBPU0lYCQkJLyogU2V0IG5ldyBtb2RlcyAqLwotICAg IHggPSB0Y3NldGF0dHIoMCxUQ1NBRFJBSU4sJmNjY2Jyayk7Ci0jZWxzZSAvKiBBVFRTViAqLyAg ICAgIAkJCS8qIG9yIHRoZSBQT1NJWCB3YXkgKi8KLSAgICB4ID0gaW9jdGwoMCxUQ1NFVEFXLCZj Y2NicmspOwkvKiB0aGUgU3lzIFYgd2F5ICovCi0jZW5kaWYgLyogQlNENDRPUlBPU0lYICovCi0j ZW5kaWYgLyogU1ZPUlBPU0lYICovCi0KLSNpZmRlZiBDT0hFUkVOVAotI3VuZGVmIFNWT1JQT1NJ WAotI2VuZGlmIC8qIENPSEVSRU5UICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJjb25jYiB4IiwiIix4 KTsKLSAgICBkZWJ1ZyhGMTAxLCJjb25jYiBlcnJubyIsIiIsZXJybm8pOwotCi0jaWZkZWYgIFY3 Ci0jaWZuZGVmIE1JTklYCi0gICAgaWYgKGttZW1bQ09OXSA8IDApIHsKLSAgICAgICAgcWFkZHJb Q09OXSA9IGluaXRyYXdxKDApOwotICAgICAgICBpZigoa21lbVtDT05dID0gb3BlbigiL2Rldi9r bWVtIiwgMCkpIDwgMCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW4ndCByZWFk IC9kZXYva21lbSBpbiBjb25jYi5cbiIpOwotICAgICAgICAgICAgcGVycm9yKCIvZGV2L2ttZW0i KTsKLSAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogTUlO SVggKi8KLSNlbmRpZiAvKiBWNyAqLwotI2VuZGlmIC8qIFBsYW45ICovCi0KLSAgICBpZiAoeCA+ IC0xKQotICAgICAgY29uc3RhdGUgPSBDT05fQ0I7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJjb25jYiBy ZXR1cm5zIiwiIix4KTsKLSAgICByZXR1cm4oeCk7Ci19Ci0KLS8qICBDIE8gTiBCIEkgTiAgLS0g IFB1dCBjb25zb2xlIGluIGJpbmFyeSBtb2RlICAqLwotCi0vKiAgUmV0dXJucyAwIGlmIG9rLCAt MSBpZiBub3QgICovCi0KLWludAotI2lmZGVmIENLX0FOU0lDCi1jb25iaW4oY2hhciBlc2MpCi0j ZWxzZQotY29uYmluKGVzYykgY2hhciBlc2M7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGNv bmJpbiAqLyAgewotCi0gICAgaW50IHg7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJjb25iaW4gY29uc3Rh dGUiLCIiLGNvbnN0YXRlKTsKLQotICAgIGlmIChjb25zdGF0ZSA9PSBDT05fQklOKQotICAgICAg cmV0dXJuKDApOwotCi0gICAgaWYgKCFpc2F0dHkoMCkpIHJldHVybigwKTsgICAgICAgICAgLyog b25seSBmb3IgcmVhbCB0dHlzICovCi0gICAgY29uZ20oKTsJCQkJLyogR2V0IG1vZGVzIGlmIG5l Y2Vzc2FyeS4gKi8KLSAgICBkZWJ1ZyhGMTAwLCJjb25iaW4iLCIiLDApOwotICAgIGVzY2NociA9 IGVzYzsgICAgICAgICAgICAgICAgICAgICAgIC8qIE1ha2UgdGhpcyBhdmFpbGFibGUgdG8gb3Ro ZXIgZm5zICovCi0gICAgY2t4ZWNoID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJv Z3JhbSBjYW4gZWNobyBjaGFyYWN0ZXJzICovCi0jaWZkZWYgYWVnaXMKLSAgICBjb25idWZuID0g MDsKLSAgICBpZiAoY29uY3JwKSByZXR1cm4od3JpdGUoMSwgIlwwMzVcMDAyIiwgMikpOwotICAg IGlmIChjb251aWQgPT0gaW5wdXRfcGFkXyR1aWQpIHsKLQlwYWRfJHJhdyhpb3NfJHN0ZGluLCBz dCk7Ci0JcmV0dXJuKDApOwotICAgICAgfQotI2VuZGlmIC8qIGFlZ2lzICovCi0KLSNpZmRlZiBD T0hFUkVOVAotI2RlZmluZSBTVk9SUE9TSVgKLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotCi0jaWZk ZWYgUGxhbjkKLSAgICByZXR1cm4gcDljb25iaW4oKTsKLSNlbHNlCi0jaWZkZWYgU1ZPUlBPU0lY Ci0jaWZuZGVmIE9YT1MKLSNpZmRlZiBRTlgKLSAgICBjY3Jhdy5jX2xmbGFnICY9IH4oSVNJR3xJ Q0FOT058RUNITyk7Ci0jZWxzZQotI2lmZGVmIENPSEVSRU5UCi0gICAgY2NyYXcuY19sZmxhZyAm PSB+KElTSUd8SUNBTk9OfEVDSE8pOwotI2Vsc2UKLSAgICBjY3Jhdy5jX2xmbGFnICY9IH4oSVNJ R3xJQ0FOT058RUNIT3xJRVhURU4pOwotI2VuZGlmIC8qIENPSEVSRU5UICovCi0jZW5kaWYgLyog UU5YICovCi0jZWxzZSAvKiBPWE9TICovCi0gICAgY2NyYXcuY19sZmxhZyAmPSB+KElTSUd8SUNB Tk9OfEVDSE8pOwotICAgIGNjcmF3LmNfY2NbVkRJU0NBUkRdID0gY2NyYXcuY19jY1tWTE5FWFRd ID0gQ0RJU0FCTEU7Ci0jZW5kaWYgLyogT1hPUyAqLwotICAgIGNjcmF3LmNfaWZsYWcgfD0gSUdO UEFSOwotLyoKLSAgTm90ZSB0aGF0IGZvciB0ZXJtaW5hbCBzZXNzaW9ucyB3ZSBkaXNhYmxlIFhv bi9Yb2ZmIGZsb3cgY29udHJvbCB0byBhbGxvdwotICB0aGUgcGFzc2FnZSBeUSBhbmQgXlMgYXMg ZGF0YSBjaGFyYWN0ZXJzIGZvciBFTUFDUywgYW5kIHRvIGFsbG93IFhNT0RFTQotICB0cmFuc2Zl cnMgdG8gd29yayB3aGVuIEMtS2VybWl0IGlzIGluIHRoZSBtaWRkbGUsIGV0Yy4gIEhhcmR3YXJl IGZsb3cKLSAgY29udHJvbCwgaWYgaW4gdXNlLCBpcyBub3QgYWZmZWN0ZWQuCi0qLwotI2lmZGVm IEFUVFNWCi0jaWZkZWYgQlNENDQKLSAgICBjY3Jhdy5jX2lmbGFnICY9IH4oSUdOQlJLfElOTENS fElHTkNSfElDUk5MfElYT058SVhBTll8SVhPRkYKLSAgICAgICAgICAgICAgICAgICAgICAgIHxJ TlBDS3xJU1RSSVApOwotI2Vsc2UKLSAgICBjY3Jhdy5jX2lmbGFnICY9IH4oSUdOQlJLfElOTENS fElHTkNSfElDUk5MfElVQ0xDfElYT058SVhBTll8SVhPRkYKLSAgICAgICAgICAgICAgICAgICAg ICAgIHxJTlBDS3xJU1RSSVApOwotI2VuZGlmIC8qIEJTRDQ0ICovCi0jZWxzZSAvKiBQT1NJWCAq LwotICAgIGNjcmF3LmNfaWZsYWcgJj0gfihJR05CUkt8SU5MQ1J8SUdOQ1J8SUNSTkx8SVhPTnxJ WE9GRnxJTlBDS3xJU1RSSVApOwotI2VuZGlmIC8qIEFUVFNWICovCi0gICAgY2NyYXcuY19vZmxh ZyAmPSB+T1BPU1Q7Ci0jaWZkZWYgQ09NTUVOVAotLyoKLSAgV0hBVCBUSEUgSEVDSyBXQVMgVEhJ UyBGT1I/Ci0gIFRoZSBCOTYwMCBzZXR0aW5nIChvYnZpb3VzbHkpIHByZXZlbnRzIENPTk5FQ1Qg ZnJvbSB3b3JraW5nIGF0IGFueQotICBzcGVlZCBvdGhlciB0aGFuIDk2MDAgd2hlbiB5b3UgYXJl IGxvZ2dlZCBpbiB0byB0aGUgNzMwMCBvbiBhIHNlcmlhbAotICBsaW5lLiAgTWF5YmUgc29tZSBv ZiB0aGUgb3RoZXIgZmxhZ3MgYXJlIG5lY2Vzc2FyeSAtLSBpZiBzbywgcHV0IGJhY2sKLSAgdGhl IG9uZXMgdGhhdCBhcmUgbmVlZGVkLiAgVGhpcyBjb2RlIGlzIHN1cHBvc2VkIHRvIHdvcmsgdGhl IHNhbWUsIG5vCi0gIG1hdHRlciB3aGV0aGVyIHlvdSBhcmUgbG9nZ2VkIGluIHRvIHRoZSA3MzAw IG9uIHRoZSByZWFsIGNvbnNvbGUgZGV2aWNlLAotICBvciB0aHJvdWdoIGEgc2VyaWFsIHBvcnQu Ci0qLwotI2lmZGVmIEFUVDczMDAKLSAgICBjY3Jhdy5jX2NmbGFnID0gQ0xPQ0FMIHwgQjk2MDAg fCBDUzggfCBDUkVBRCB8IEhVUENMOwotI2VuZGlmIC8qIEFUVDczMDAgKi8KLSNlbmRpZiAvKiBD T01NRU5UICovCi0KLS8qKiogS2VybWl0IHVzZWQgdG8gcHV0IHRoZSBjb25zb2xlIGluIDgtYml0 IHJhdyBtb2RlLCBidXQgc29tZSB1c2VycyBoYXZlCi0gKioqIHBvaW50ZWQgb3V0IHRoYXQgdGhp cyBzaG91bGQgbm90IGJlIGRvbmUsIHNpbmNlIHNvbWUgc2l0ZXMgYWN0dWFsbHkKLSAqKiogdXNl IHRlcm1pbmFscyB3aXRoIHBhcml0eSBzZXR0aW5ncyBvbiB0aGVpciBVbml4IHN5c3RlbXMsIGFu ZCBpZiB3ZQotICoqKiBvdmVycmlkZSB0aGUgY3VycmVudCBzZXR0aW5ncyBhbmQgc3RvcCBkb2lu ZyBwYXJpdHksIHRoZW4gdGhlaXIgdGVybWluYWxzCi0gKioqIHdpbGwgZGlzcGxheSBibG90Y2hl cyBmb3IgY2hhcmFjdGVycyB3aG9zZSBwYXJpdHkgaXMgd3JvbmcuICBUaGVyZWZvcmUsCi0gKioq IHRoZSBmb2xsb3dpbmcgdHdvIGxpbmVzIGFyZSBjb21tZW50ZWQgb3V0IChMYXJyeSBBZnJpbiwg Q2xlbXNvbiBVKToKLSAqKioKLSAqKiogICBjY3Jhdy5jX2NmbGFnICY9IH4oUEFSRU5CfENTSVpF KTsKLSAqKiogICBjY3Jhdy5jX2NmbGFnIHw9IChDUzh8Q1JFQUQpOwotICoqKgotICoqKiBTeXMg SUlJL1Ygc2l0ZXMgdGhhdCBoYXZlIHRyb3VibGUgd2l0aCB0aGlzIGNhbiByZXN0b3JlIHRoZXNl IGxpbmVzLgotICoqKi8KLSNpZm5kZWYgVklOVFIKLSAgICBjY3Jhdy5jX2NjWzBdID0gMDAzOwkJ LyogSW50ZXJydXB0IGNoYXIgaXMgQ3RybC1DICovCi0jZWxzZQotICAgIGNjcmF3LmNfY2NbVklO VFJdID0gMDAzOwotI2VuZGlmIC8qIFZJTlRSICovCi0jaWZuZGVmIFZRVUlUCi0gICAgY2NyYXcu Y19jY1sxXSA9IGVzY2NocjsJCS8qIEVzY2FwZSBkdXJpbmcgcGFja2V0IG1vZGUgKi8KLSNlbHNl Ci0gICAgY2NyYXcuY19jY1tWUVVJVF0gPSBlc2NjaHI7Ci0jZW5kaWYgLyogVlFVSVQgKi8KLSNp Zm5kZWYgVkVPRgotICAgIGNjcmF3LmNfY2NbNF0gPSAxOwotI2Vsc2UKLSNpZm5kZWYgT1hPUwot I2lmZGVmIFZNSU4KLSAgICBjY3Jhdy5jX2NjW1ZNSU5dID0gMTsKLSNlbmRpZiAvKiBWTUlOICov Ci0jZWxzZSAvKiBPWE9TICovCi0gICAgY2NyYXcuY19taW4gPSAxOwotI2VuZGlmIC8qIE9YT1Mg Ki8KLSNlbmRpZiAvKiBWRU9GICovCi0KLSNpZmRlZiBaSUxPRwotICAgIGNjcmF3LmNfY2NbNV0g PSAwOwotI2Vsc2UKLSNpZm5kZWYgVkVPTAotICAgIGNjcmF3LmNfY2NbNV0gPSAxOwotI2Vsc2UK LSNpZm5kZWYgT1hPUwotI2lmZGVmIFZUSU1FCi0gICAgY2NyYXcuY19jY1tWVElNRV0gPSAxOwot I2VuZGlmIC8qIFZUSU1FICovCi0jZWxzZSAvKiBPWE9TICovCi0gICAgY2NyYXcuY190aW1lID0g MTsKLSNlbmRpZiAvKiBPWE9TICovCi0jZW5kaWYgLyogVkVPTCAqLwotI2VuZGlmIC8qIFpJTE9H ICovCi0KLSNpZmRlZiBCU0Q0NE9SUE9TSVgKLSAgICB4ID0gdGNzZXRhdHRyKDAsVENTQURSQUlO LCZjY3Jhdyk7CS8qIFNldCBuZXcgbW9kZXMuICovCi0jZWxzZQotICAgIHggPSBpb2N0bCgwLFRD U0VUQVcsJmNjcmF3KTsKLSNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KLSNlbHNlIC8qIEJlcmtl bGV5LCBldGMuICovCi0gICAgeCA9IGNvbmNoaygpOwkJCS8qIEJlY2F1c2Ugc3R0eSgpIGlzIGRl c3RydWN0aXZlICovCi0gICAgaWYgKHggPiAwKQotICAgICAgY29uZ2V0YnVmKHgpOwotICAgIGNj cmF3LnNnX2ZsYWdzIHw9IChSQVd8VEFOREVNKTsgICAgIC8qIFNldCByYXdtb2RlLCBYT04vWE9G RiAoaGEpICovCi0gICAgY2NyYXcuc2dfZmxhZ3MgJj0gfihFQ0hPfENSTU9EKTsgICAgLyogU2V0 IGNoYXIgd2FrZXVwLCBubyBlY2hvICovCi0jaWZkZWYgQkVMTFYxMAotICAgIHggPSBpb2N0bCgw LFRJT0NTRVRQLCZjY3Jhdyk7Ci0jZWxzZQotICAgIHggPSBzdHR5KDAsJmNjcmF3KTsKLSNlbmRp ZiAvKiBCRUxMVjEwICovCi0jZW5kaWYgLyogU1ZPUlBPU0lYICovCi0jZW5kaWYgLyogUGxhbjkg Ki8KLQotICAgIGlmICh4ID4gLTEpCi0gICAgICBjb25zdGF0ZSA9IENPTl9CSU47Ci0KLSAgICBk ZWJ1ZyhGMTAxLCJjb25iaW4gcmV0dXJucyIsIiIseCk7Ci0gICAgcmV0dXJuKHgpOwotCi0jaWZk ZWYgQ09IRVJFTlQKLSN1bmRlZiBTVk9SUE9TSVgKLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotCi19 Ci0KLQotLyogIEMgTyBOIFIgRSBTICAtLSAgUmVzdG9yZSB0aGUgY29uc29sZSB0ZXJtaW5hbCAg Ki8KLQotaW50Ci1jb25yZXMoKSB7Ci0gICAgaW50IHg7Ci0gICAgZGVidWcoRjEwMSwiY29ucmVz IGNnbWYiLCIiLGNnbWYpOwotICAgIGRlYnVnKEYxMDEsImNvbnJlcyBjb25zdGF0ZSIsIiIsY29u c3RhdGUpOwotCi0gICAgaWYgKGNnbWYgPCAxKQkJCS8qIERvIG5vdGhpbmcgaWYgbW9kZXMgdW5j aGFuZ2VkICovCi0gICAgICByZXR1cm4oMCk7Ci0gICAgaWYgKGNvbnN0YXRlID09IENPTl9SRVMp Ci0gICAgICByZXR1cm4oMCk7Ci0KLSAgICBpZiAoIWlzYXR0eSgwKSkgcmV0dXJuKDApOyAgICAg ICAgICAvKiBvbmx5IGZvciByZWFsIHR0eXMgKi8KLSAgICBkZWJ1ZyhGMTAwLCJjb25yZXMgaXNh dHR5IG9rIiwiIiwwKTsKLSAgICBja3hlY2ggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBTeXN0ZW0gc2hvdWxkIGVjaG8gY2hhcnMgKi8KLQotI2lmZGVmIGFlZ2lzCi0gICAgY29uYnVm biA9IDA7Ci0gICAgaWYgKGNvbmNycCkgcmV0dXJuKHdyaXRlKDEsICJcMDM1XDAwMSIsIDIpKTsK LSAgICBpZiAoY29udWlkID09IGlucHV0X3BhZF8kdWlkKSB7Ci0JcGFkXyRjb29rZWQoaW9zXyRz dGRpbiwgc3QpOwotCWNvbnN0YXRlID0gQ09OX1JFUzsKLQlyZXR1cm4oMCk7Ci0gICAgfQotI2Vu ZGlmIC8qIGFlZ2lzICovCi0KLSNpZmRlZiBQbGFuOQotICAgIHA5Y29ucmVzKCk7Ci0jZWxzZQot I2lmZGVmIEJTRDQ0T1JQT1NJWAotICAgIGRlYnVnKEYxMDAsImNvbnJlcyByZXN0b3JpbmcgdGNz ZXRhdHRyIiwiIiwwKTsKLSAgICB4ID0gdGNzZXRhdHRyKDAsVENTQURSQUlOLCZjY29sZCk7Ci0j ZWxzZQotI2lmZGVmIEFUVFNWCi0gICAgZGVidWcoRjEwMCwiY29ucmVzIHJlc3RvcmluZyBpb2N0 bCIsIiIsMCk7Ci0gICAgeCA9IGlvY3RsKDAsVENTRVRBVywmY2NvbGQpOwotI2Vsc2UgLyogQlNE LCBWNywgYW5kIGZyaWVuZHMgKi8KLSNpZmRlZiBzb255X25ld3MJCQkvKiBTb255IE5FV1MgKi8K LSAgICBpZiAoa21fY29uICE9IC0xKQotICAgICAgaW9jdGwoMCxUSU9DS1NFVCwma21fY29uKTsJ LyogUmVzdG9yZSBjb25zb2xlIEthbmppIG1vZGUgKi8KLSNlbmRpZiAvKiBzb255X25ld3MgKi8K LSAgICBtc2xlZXAoMTAwKTsKLSAgICBkZWJ1ZyhGMTAwLCJjb25yZXMgcmVzdG9yaW5nIHN0dHki LCIiLDApOwotICAgIHggPSBjb25jaGsoKTsJCQkvKiBCZWNhdXNlIHN0dHkoKSBpcyBkZXN0cnVj dGl2ZSAqLwotICAgIGlmICh4ID4gMCkKLSAgICAgIGNvbmdldGJ1Zih4KTsKLSNpZmRlZiBCRUxM VjEwCi0gICAgeCA9IGlvY3RsKDAsVElPQ1NFVFAsJmNjb2xkKTsKLSNlbHNlCi0gICAgeCA9IHN0 dHkoMCwmY2NvbGQpOwotI2VuZGlmIC8qIEJFTExWMTAgKi8KLSNlbmRpZiAvKiBBVFRTViAqLwot I2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLwotI2VuZGlmIC8qIFBsYW45ICovCi0gICAgaWYgKHgg PiAtMSkKLSAgICAgIGNvbnN0YXRlID0gQ09OX1JFUzsKLQotICAgIGRlYnVnKEYxMDEsImNvbnJl cyByZXR1cm5zIiwiIix4KTsKLSAgICByZXR1cm4oeCk7Ci19Ci0KLS8qICBDIE8gTiBPIEMgIC0t ICBPdXRwdXQgYSBjaGFyYWN0ZXIgdG8gdGhlIGNvbnNvbGUgdGVybWluYWwgICovCi0KLWludAot I2lmZGVmIENLX0FOU0lDCi1jb25vYyhjaGFyIGMpCi0jZWxzZQotY29ub2MoYykgY2hhciBjOwot I2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBjb25vYyAqLyB7Ci0KLSNpZmRlZiBJS1NECi0gICAg aWYgKGluc2VydmVyICYmICFsb2NhbCkKLSAgICAgIHJldHVybih0dG9jKGMpKTsKLQotI2lmZGVm IENLX0VOQ1JZUFRJT04KLSAgICBpZiAoaW5zZXJ2ZXIgJiYgVEVMT1BUX01FKFRFTE9QVF9FTkNS WVBUSU9OKSkKLSAgICAgICAgY2tfdG5fZW5jcnlwdCgmYywxKTsKLSNlbmRpZiAvKiBDS19FTkNS WVBUSU9OICovCi0jZW5kaWYgLyogSUtTRCAqLwotCi0jaWZkZWYgUGxhbjkKLSAgICByZXR1cm4g Y29ud3JpdGUoJmMsMSk7Ci0jZWxzZQotICAgIHJldHVybih3cml0ZSgxLCZjLDEpKTsKLSNlbmRp ZiAvKiBQbGFuOSAqLwotfQotCi0vKiAgQyBPIE4gWCBPICAtLSAgV3JpdGUgeCBjaGFyYWN0ZXJz IHRvIHRoZSBjb25zb2xlIHRlcm1pbmFsICAqLwotCi1pbnQKLWNvbnhvKHgscykgaW50IHg7IGNo YXIgKnM7IHsKLQotI2lmZGVmIElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIgJiYgIWxvY2FsKQotICAg ICAgcmV0dXJuKHR0b2woKENIQVIgKilzLHgpKTsKLQotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAg ICBpZiAoaW5zZXJ2ZXIgJiYgVEVMT1BUX01FKFRFTE9QVF9FTkNSWVBUSU9OKSkKLSAgICAgICAg Y2tfdG5fZW5jcnlwdChzLHgpOwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNlbmRpZiAv KiBJS1NEICovCi0KLSNpZmRlZiBQbGFuOQotICAgIHJldHVybihjb253cml0ZShzLHgpKTsKLSNl bHNlCi0gICAgcmV0dXJuKHdyaXRlKDEscyx4KSk7Ci0jZW5kaWYgLyogUGxhbjkgKi8KLX0KLQot LyogIEMgTyBOIE8gTCAgLS0gIFdyaXRlIGEgbGluZSB0byB0aGUgY29uc29sZSB0ZXJtaW5hbCAg Ki8KLQotaW50Ci1jb25vbChzKSBjaGFyICpzOyB7Ci0gICAgaW50IGxlbjsKLSAgICBpZiAoIXMp IHMgPSAiIjsJCQkvKiBBbHdheXMgZG8gdGhpcyEgKi8KLSAgICBsZW4gPSBzdHJsZW4ocyk7Ci0g ICAgaWYgKGxlbiA9PSAwKQotICAgICAgcmV0dXJuKDApOwotCi0jaWZkZWYgSUtTRAotICAgIGlm IChpbnNlcnZlciAmJiAhbG9jYWwpCi0gICAgICByZXR1cm4odHRvbCgoQ0hBUiAqKXMsbGVuKSk7 Ci0KLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgaWYgKGluc2VydmVyICYmIFRFTE9QVF9NRShU RUxPUFRfRU5DUllQVElPTikpIHsKLQlpZiAobnhwYWNrZXQgPCBsZW4pIHsKLQkgICAgaWYgKHhw YWNrZXQpIHsKLQkJZnJlZSh4cGFja2V0KTsKLQkJeHBhY2tldCA9IE5VTEw7Ci0JCW54cGFja2V0 ID0gMDsKLQkgICAgfQotCSAgICBsZW4gPSBsZW4gPiAxMDI0MCA/IGxlbiA6IDEwMjQwOwotCSAg ICB4cGFja2V0ID0gKENIQVIgKiltYWxsb2MobGVuKTsKLQkgICAgaWYgKCF4cGFja2V0KSB7Ci0J CWZwcmludGYoc3RkZXJyLCJ0dG9sIG1hbGxvYyBmYWlsdXJlXG4iKTsKLQkJcmV0dXJuKC0xKTsK LQkgICAgfSBlbHNlCi0JICAgICAgbnhwYWNrZXQgPSBsZW47Ci0JfQotCW1lbWNweSh4cGFja2V0 LHMsbGVuKTsKLQlzID0gKGNoYXIgKil4cGFja2V0OwotCWNrX3RuX2VuY3J5cHQocyxsZW4pOwot ICAgIH0KLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jZW5kaWYgLyogSUtTRCAqLwotCi0j aWZkZWYgUGxhbjkKLSAgICByZXR1cm4oY29ud3JpdGUocyxsZW4pKTsKLSNlbHNlCi0gICAgcmV0 dXJuKHdyaXRlKDEscyxsZW4pKTsKLSNlbmRpZiAvKiBQbGFuOSAqLwotfQotCi0vKiAgQyBPIE4g TyBMIEEgIC0tICBXcml0ZSBhbiBhcnJheSBvZiBsaW5lcyB0byB0aGUgY29uc29sZSB0ZXJtaW5h bCAqLwotCi1pbnQKLWNvbm9sYShzKSBjaGFyICpzW107IHsKLSAgICBjaGFyICogcDsKLSAgICBp bnQgaSwgeDsKLQotCi0gICAgaWYgKCFzKSByZXR1cm4oMCk7Ci0gICAgZm9yIChpID0gMDsgOyBp KyspIHsKLQlwID0gc1tpXTsKLQlpZiAoIXApIHAgPSAiIjsJCQkvKiBMZXQncyBub3QgZHVtcCBj b3JlIHNoYWxsIHdlPyAqLwotCWlmICghKnApCi0JICBicmVhazsKLSNpZmRlZiBJS1NECi0JaWYg KGluc2VydmVyICYmICFsb2NhbCkKLQkgIHggPSB0dG9sKChDSEFSICopcCwoaW50KXN0cmxlbihw KSk7Ci0JZWxzZQotI2VuZGlmIC8qIElLU0QgKi8KLQkgIHggPSBjb25vbChwKTsKLQlpZiAoeCA8 IDApCi0JICByZXR1cm4oLTEpOwotICAgIH0KLSAgICByZXR1cm4oMCk7Ci19Ci0KLS8qICBDIE8g TiBPIEwgTCAgLS0gIE91dHB1dCBhIHN0cmluZyBmb2xsb3dlZCBieSBDUkxGICAqLwotCi1pbnQK LWNvbm9sbChzKSBjaGFyICpzOyB7Ci0gICAgQ0hBUiBidWZbM107Ci0gICAgYnVmWzBdID0gJ1xy JzsKLSAgICBidWZbMV0gPSAnXG4nOwotICAgIGJ1ZlsyXSA9ICdcMCc7Ci0gICAgaWYgKCFzKSBz ID0gIiI7Ci0KLSNpZmRlZiBJS1NECi0gICAgaWYgKGluc2VydmVyICYmICFsb2NhbCkgewotCWlm ICgqcykgdHRvbCgoQ0hBUiAqKXMsKGludClzdHJsZW4ocykpOwotCXJldHVybih0dG9sKGJ1Ziwy KSk7Ci0gICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLQotICAgIGlmICgqcykgY29ub2wocyk7Ci0j aWZkZWYgSUtTRAotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICBpZiAoaW5zZXJ2ZXIgJiYgVEVM T1BUX01FKFRFTE9QVF9FTkNSWVBUSU9OKSkKLSAgICAgIGNrX3RuX2VuY3J5cHQoKGNoYXIgKili dWYsMik7Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotI2VuZGlmIC8qIElLU0QgKi8KLQot I2lmZGVmIFBsYW45Ci0gICAgcmV0dXJuKGNvbndyaXRlKGJ1ZiwgMikpOwotI2Vsc2UKLSAgICBy ZXR1cm4od3JpdGUoMSxidWYsMikpOwotI2VuZGlmIC8qIFBsYW45ICovCi19Ci0KLS8qICBDIE8g TiBDIEggSyAgLS0gIFJldHVybiBob3cgbWFueSBjaGFyYWN0ZXJzIGF2YWlsYWJsZSBhdCBjb25z b2xlICAqLwotLyoKLSAgV2UgY291bGQgYWxzbyB1c2Ugc2VsZWN0KCkgaGVyZSB0byBjb3ZlciBh IGZldyBtb3JlIHN5c3RlbXMgdGhhdCBhcmUgbm90Ci0gIGNvdmVyZWQgYnkgYW55IG9mIHRoZSBm b2xsb3dpbmcsIGUuZy4gSFAtVVggOS4weCBvbiB0aGUgbW9kZWwgODAwLgotKi8KLWludAotY29u Y2hrKCkgewotICAgIHN0YXRpYyBpbnQgY29udHlwID0gMDsJCS8qICsxIGZvciBpc2F0dHksIC0x IG90aGVyd2lzZSAqLwotCi0gICAgaWYgKGNvbnR5cCA9PSAwKQkJCS8qIFRoaXMgcHJldmVudHMg dW5uZWNlc3NhcnkgKi8KLSAgICAgIGNvbnR5cCA9IChpc2F0dHkoMCkgPyAxIDogLTEpOwkvKiBk dXBsaWNhdGVkIGNhbGxzIHRvIGlzYXR0eSgpICovCi0gICAgZGVidWcoRjEwMSwiY29uY2hrIGNv bnR5cCIsIiIsY29udHlwKTsKLSAgICBpZiAoYmFja2dyZCB8fCAoY29udHlwIDwgMCkpCi0gICAg ICByZXR1cm4oMCk7Ci0KLSNpZmRlZiBhZWdpcwotICAgIGlmIChjb25idWZuID4gMCkgcmV0dXJu KGNvbmJ1Zm4pOyAgIC8qIHVzZSBvbGQgY291bnQgaWYgbm9uemVybyAqLwotCi0gICAgLyogcmVh ZCBpbiBtb3JlIGNoYXJhY3RlcnMgKi8KLSAgICBjb25idWZuID0gaW9zXyRnZXQoaW9zXyRzdGRp biwKLSAgICAgICAgICAgICAgaW9zXyRjb25kX29wdCwgY29uYnVmLCAobG9uZylzaXplb2YoY29u YnVmKSwgc3QpOwotICAgIGlmIChzdC5hbGwgIT0gc3RhdHVzXyRvaykgY29uYnVmbiA9IDA7Ci0g ICAgY29uYnVmcCA9IGNvbmJ1ZjsKLSAgICByZXR1cm4oY29uYnVmbik7Ci0jZWxzZQotI2lmZGVm IElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIgJiYgIWxvY2FsKQotICAgICAgcmV0dXJuKGluX2Noaygx LHR0eWZkKSk7Ci0gICAgZWxzZQotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgIHJldHVybihpbl9j aGsoMCwwKSk7Ci0jZW5kaWYgLyogYWVnaXMgKi8KLX0KLQotLyogIEMgTyBOIEkgTiBDICAtLSAg R2V0IGEgY2hhcmFjdGVyIGZyb20gdGhlIGNvbnNvbGUgICovCi0vKgotICBDYWxsIHdpdGggdGlt byA+IDAgdG8gZG8gYSB0aW1lZCByZWFkLCB0aW1vID09IDAgdG8gZG8gYW4gdW50aW1lZCBibG9j a2luZwotICByZWFkLiAgVXBvbiBzdWNjZXNzLCByZXR1cm5zIHRoZSBjaGFyYWN0ZXIuICBVcG9u IGZhaWx1cmUsIHJldHVybnMgLTEuCi0gIEEgdGltZWQgcmVhZCB0aGF0IGRvZXMgbm90IGNvbXBs ZXRlIHdpdGhpbiB0aGUgdGltZW91dCBwZXJpb2QgcmV0dXJucyAtMi4KLSovCi1pbnQKLWNvbmlu Yyh0aW1vKSBpbnQgdGltbzsgewotICAgIGludCBuID0gMDsgQ0hBUiBjaDsKLSAgICBpbnQgeHg7 Ci0KLSAgICBpZiAoY29uYnVmbiA+IDApIHsJCQkvKiBJZiBzb21ldGhpbmcgYWxyZWFkeSBidWZm ZXJlZCAqLwotCS0tY29uYnVmbjsKLQlyZXR1cm4oKHVuc2lnbmVkKSgqY29uYnVmcCsrICYgMHhm ZikpOwotICAgIH0KLQotICAgIGVycm5vID0gMDsJCQkJLyogQ2xlYXIgdGhpcyAqLwotI2lmZGVm IElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIgJiYgIWxvY2FsKSB7Ci0JeHggPSB0dGluYyh0aW1vKTsK LQlpZiAoeHggPCAwKQotCSAgcmV0dXJuKHR0aW5jdGltbyA/IC0yIDogLTEpOwotCWVsc2UKLQkg IHJldHVybih4eCk7Ci0gICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLQotI2lmZGVmIGFlZ2lzCQkJ CS8qIEFwb2xsbyBBZWdpcyBvbmx5Li4uICovCi0gICAgZGVidWcoRjEwMSwiY29uaW5jIHRpbW8i LCIiLHRpbW8pOwotICAgIGZmbHVzaChzdGRvdXQpOwotICAgIGlmIChjb25jaGsoKSA+IDApIHsK LQktLWNvbmJ1Zm47Ci0JcmV0dXJuKCh1bnNpZ25lZCkoKmNvbmJ1ZnArKyAmIDB4ZmYpKTsKLSAg ICB9Ci0jZW5kaWYgLyogYWVnaXMgKi8KLQotI2lmZGVmIFRUTEVCVUYKLSAgICBpZiAoCi0jaWZk ZWYgSUtTRAotCWluc2VydmVyICYmCi0jZW5kaWYgLyogSUtTRCAqLwotCSF4bG9jYWwKLQkpIHsK LQlpZiAodHRwdXNoID49IDApIHsKLQkgICAgZGVidWcoRjExMSwidHRpbmMiLCJ0dHB1c2giLHR0 cHVzaCk7Ci0JICAgIGNoID0gdHRwdXNoOwotCSAgICB0dHB1c2ggPSAtMTsKLQkgICAgcmV0dXJu KGNoKTsKLQl9Ci0JaWYgKGxlX2RhdGEpIHsKLQkgICAgaWYgKGxlX2dldGNoYXIoJmNoKSA+IDAp IHsKLQkJZGVidWcoRjExMSwidHRpbmMgTG9jYWxFY2hvSW5CdWYiLCJjaCIsY2gpOwotCQlyZXR1 cm4oY2gpOwotCSAgICB9Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBUVExFQlVGICovCi0KLSAgICBp ZiAodGltbyA8PSAwKSB7CQkJLyogVW50aW1lZCwgYmxvY2tpbmcgcmVhZC4gKi8KLQl3aGlsZSAo MSkgewkJCS8qIEtlZXAgdHJ5aW5nIHRpbGwgd2UgZ2V0IG9uZS4gKi8KLQkgICAgbiA9IHJlYWQo MCwgJmNoLCAxKTsJLyogUmVhZCBhIGNoYXJhY3Rlci4gKi8KLQkgICAgaWYgKG4gPT0gMCkgY29u dGludWU7CS8qIFNob3VsZG4ndCBoYXBwZW4uICovCi0JICAgIGlmIChuID4gMCkgewkJLyogSWYg cmVhZCB3YXMgc3VjY2Vzc2Z1bCwgKi8KLSNpZmRlZiBJS1NECi0jaWZkZWYgQ0tfRU5DUllQVElP TgotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsImNvbmluYyBkZWNyeXB0IDEiLCIiLDApOwot ICAgICAgICAgICAgICAgIGlmIChpbnNlcnZlciAmJiAhbG9jYWwgJiYgVEVMT1BUX1UoVEVMT1BU X0VOQ1JZUFRJT04pKQotCQkgIGNrX3RuX2RlY3J5cHQoKGNoYXIgKikmY2gsMSk7Ci0jZW5kaWYg LyogQ0tfRU5DUllQVElPTiAqLwotI2VuZGlmIC8qIElLU0QgKi8KLQkJcmV0dXJuKCh1bnNpZ25l ZCkoY2ggJiAweGZmKSk7IC8qIHJldHVybiB0aGUgY2hhcmFjdGVyLiAqLwotICAgICAgICAgICAg fQotCi0vKiBDb21lIGhlcmUgaWYgcmVhZCgpIHJldHVybmVkIGFuIGVycm9yLiAqLwotCi0JICAg IGRlYnVnKEYxMDEsICJjb25pbmMoMCkgZXJybm8iLCIiLGVycm5vKTsgLyogTG9nIHRoZSBlcnJv ci4gKi8KLSNpZm5kZWYgT1hPUwotI2lmZGVmIFNWT1JQT1NJWAotI2lmZGVmIENJRSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogQ0lFIFJlZ3VsdXMgaGFzIG5vIEVJTlRSIHN5bWJvbD8g Ki8KLSNpZm5kZWYgRUlOVFIKLSNkZWZpbmUgRUlOVFIgNAotI2VuZGlmIC8qIEVJTlRSICovCi0j ZW5kaWYgLyogQ0lFICovCi0vKgotICBUaGlzIHJvdXRpbmUgaXMgdXNlZCBmb3Igc2V2ZXJhbCBk aWZmZXJlbnQgcHVycG9zZXMuICBJbiBDT05ORUNUIG1vZGUsIGl0IGlzCi0gIHVzZWQgdG8gZG8g YW4gdW50aW1lZCwgYmxvY2tpbmcgcmVhZCBmcm9tIHRoZSBrZXlib2FyZCBpbiB0aGUgbG93ZXIg Q09OTkVDVAotICBmb3JrLiAgRHVyaW5nIGxvY2FsLW1vZGUgZmlsZSB0cmFuc2ZlciwgaXQgcmVh ZHMgYSBjaGFyYWN0ZXIgZnJvbSB0aGUKLSAgY29uc29sZSB0byBpbnRlcnJ1cHQgdGhlIGZpbGUg dHJhbnNmZXIgKGxpa2UgQSBmb3IgYSBzdGF0dXMgcmVwb3J0LCBYIHRvCi0gIGNhbmNlbCBhIGZp bGUsIGV0YykuICBPYnZpb3VzbHksIHdlIGRvbid0IHdhbnQgdGhlIHJlYWRzIGluIHRoZSBsYXR0 ZXIgY2FzZQotICB0byBiZSBibG9ja2luZywgb3IgdGhlIGZpbGUgdHJhbnNmZXIgd291bGQgc3Rv cCB1bnRpbCB0aGUgdXNlciB0eXBlZAotICBzb21ldGhpbmcuICBVbmZvcnR1bmF0ZWx5LCBTeXN0 ZW0gViBkb2VzIG5vdCBhbGxvdyB0aGUgY29uc29sZSBkZXZpY2UgaW5wdXQKLSAgYnVmZmVyIHRv IGJlIHNhbXBsZWQgbm9uZGVzdHJ1Y3RpdmVseSAoZS5nLiBieSBjb25jaGsoKSksIHNvIGEga2x1 ZGdlIGlzCi0gIHVzZWQgaW5zdGVhZC4gIER1cmluZyBsb2NhbC1tb2RlIGZpbGUgdHJhbnNmZXIs IHRoZSBTSUdRVUlUIHNpZ25hbCBpcyBhcm1lZAotICBhbmQgdHJhcHBlZCBieSBlc2N0cnAoKSwg YW5kIHRoaXMgcm91dGluZSBwcmV0ZW5kcyB0byBoYXZlIHJlYWQgdGhlIHF1aXQKLSAgY2hhcmFj dGVyIGZyb20gdGhlIGtleWJvYXJkIG5vcm1hbGx5LiAgQnV0LCBrbHVkZ2Ugb3Igbm8ga2x1ZGdl LCB0aGUgcmVhZCgpCi0gIGlzc3VlZCBieSB0aGlzIGNvbW1hbmQsIHVuZGVyIFN5c3RlbSBWIG9u bHksIGNhbiBmYWlsIGlmIGEgc2lnbmFsIC0tIEFOWQotICBzaWduYWwgLS0gaXMgY2F1Z2h0IHdo aWxlIHRoZSByZWFkIGlzIHBlbmRpbmcuICBUaGlzIGNhbiBvY2N1ciBub3Qgb25seSB3aGVuCi0g IHRoZSB1c2VyIHR5cGVzIHRoZSBxdWl0IGNoYXJhY3RlciwgYnV0IGFsc28gZHVyaW5nIHRlbG5l dCBuZWdvdGlhdGlvbnMsIHdoZW4KLSAgdGhlIGxvd2VyIENPTk5FQ1QgZm9yayBzaWduYWxzIHRo ZSB1cHBlciBvbmUgYWJvdXQgYW4gZWNob2luZyBtb2RlIGNoYW5nZS4KLSAgV2hlbiB0aGlzIGhh cHBlbnMsIHdlIGhhdmUgdG8gcG9zdCB0aGUgcmVhZCgpIGFnYWluLiAgVGhpcyBpcyBhcHBhcmVu dGx5IG5vdAotICBhIHByb2JsZW0gaW4gQlNELWJhc2VkIFVOSVggdmVyc2lvbnMuCi0qLwotCSAg ICBpZiAoZXJybm8gPT0gRUlOVFIpCQkvKiBSZWFkIGludGVycnVwdGVkLiAqLwotCSAgICAgIGlm IChjb25lc2MpICB7CQkvKiBJZiBieSBTSUdRVUlULCAqLwotIAkJIGNvbmVzYyA9IDA7CQkvKiB0 aGUgY29uZXNjIHZhcmlhYmxlIGlzIHNldCwgKi8KLSAJCSByZXR1cm4oZXNjY2hyKTsJLyogc28g cmV0dXJuIHRoZSBlc2NhcGUgY2hhcmFjdGVyLiAqLwotCSAgICAgfSBlbHNlIGNvbnRpbnVlOwkJ LyogQnkgb3RoZXIgc2lnbmFsLCB0cnkgYWdhaW4uICovCi0jZWxzZQotLyoKLSAgVGhpcyBtaWdo dCBiZSBkYW5nZXJvdXMsIGJ1dCBsZXQncyBkbyB0aGlzIG9uIG5vbi1TeXN0ZW0gViB2ZXJzaW9u cyB0b28sCi0gIHNpbmNlIGF0IGxlYXN0IG9uZSBTdW5PUyA0LjEuMiB1c2VyIGNvbXBsYWlucyBv ZiBpbW1lZGlhdGUgZGlzY29ubmVjdGlvbnMKLSAgdXBvbiBmaXJzdCBtYWtpbmcgYSBURUxORVQg Y29ubmVjdGlvbi4KLSovCi0JICAgIGlmIChlcnJubyA9PSBFSU5UUikJCS8qIFJlYWQgaW50ZXJy dXB0ZWQuICovCi0JICAgICAgY29udGludWU7Ci0jZW5kaWYgLyogU1ZPUlBPU0lYICovCi0jZWxz ZSAvKiBPWE9TICovCi0JICAgIGlmIChlcnJubyA9PSBFSU5UUikJCS8qIFJlYWQgaW50ZXJydXB0 ZWQuICovCi0JICAgICAgY29udGludWU7Ci0jZW5kaWYgLyogT1hPUyAqLwotCSAgICByZXR1cm4o LTEpOwkJCS8qIEVycm9yICovCi0JfQotICAgIH0KLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJs b2cgJiYgdGltbyA8PSAwKSB7Ci0JZGVidWcoRjEwMCwiY29uaW5jIHRpbWVvdXQgbG9naWMgZXJy b3IiLCIiLDApOwotCXRpbW8gPSAxOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0vKiBU aW1lZCByZWFkLi4uICovCi0KLSAgICBzYXZhbCA9IHNpZ25hbChTSUdBTFJNLHRpbWVyaCk7CS8q IFNldCB1cCB0aW1lb3V0IGhhbmRsZXIuICovCi0gICAgeHggPSBhbGFybSh0aW1vKTsJCQkvKiBT ZXQgdGhlIGFsYXJtLiAqLwotICAgIGRlYnVnKEYxMDEsImNvbmluYyBhbGFybSBzZXQiLCIiLHRp bW8pOwotICAgIGlmICgKLSNpZmRlZiBDS19QT1NJWF9TSUcKLQlzaWdzZXRqbXAoc2pidWYsMSkK LSNlbHNlCi0Jc2V0am1wKHNqYnVmKQotI2VuZGlmIC8qIENLX1BPU0lYX1NJRyAqLwotCSkJCQkJ LyogVGhlIHJlYWQoKSB0aW1lZCBvdXQuICovCi0gICAgICBuID0gLTI7CQkJCS8qIENvZGUgZm9y IHRpbWVvdXQuICovCi0gICAgZWxzZQotICAgICAgbiA9IHJlYWQoMCwgJmNoLCAxKTsKLSAgICB0 dGltb2ZmKCk7CQkJCS8qIFR1cm4gb2ZmIHRpbWVyICovCi0gICAgaWYgKG4gPiAwKSB7CQkJLyog R290IGNoYXJhY3RlciBPSy4gKi8KLSNpZmRlZiBJS1NECi0jaWZkZWYgQ0tfRU5DUllQVElPTgot ICAgICAgICBkZWJ1ZyhGMTAwLCJjb25pbmMgZGVjcnlwdCAyIiwiIiwwKTsKLSAgICAgICAgaWYg KGluc2VydmVyICYmICFsb2NhbCAmJiBURUxPUFRfVShURUxPUFRfRU5DUllQVElPTikpCi0JICBj a190bl9kZWNyeXB0KChjaGFyICopJmNoLDEpOwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8K LSNlbmRpZiAvKiBJS1NEICovCi0JcmV0dXJuKCh1bnNpZ25lZCkoY2ggJiAweGZmKSk7CS8qIFJl dHVybiBpdC4gKi8KLSAgICB9Ci0vKgotICByZWFkKCkgcmV0dXJuZWQgYW4gZXJyb3IuICBTYW1l IGRlYWwgYXMgYWJvdmUsIGJ1dCB3aXRob3V0IHRoZSBsb29wLgotKi8KLSAgICBkZWJ1ZyhGMTAx LCAiY29uaW5jKHRpbW8pIG4iLCIiLG4pOwotICAgIGRlYnVnKEYxMDEsICJjb25pbmModGltbykg ZXJybm8iLCIiLGVycm5vKTsKLSNpZm5kZWYgT1hPUwotI2lmZGVmIFNWT1JQT1NJWAotICAgIGlm IChuID09IC0xICYmIGVycm5vID09IEVJTlRSICYmIGNvbmVzYyAhPSAwKSB7Ci0JY29uZXNjID0g MDsKLQlyZXR1cm4oZXNjY2hyKTsJCQkvKiBVc2VyIGVudGVyZWQgZXNjYXBlIGNoYXJhY3Rlci4g Ki8KLSAgICB9Ci0jZW5kaWYgLyogU1ZPUlBPU0lYICovCi0gICAgaWYgKG4gPT0gMCAmJiBlcnJu byA+IDApIHsJCS8qIEl0J3MgYW4gZXJyb3IgKi8KLQlyZXR1cm4oLTEpOwotICAgIH0KLSNlbmRp ZiAvKiAhIE9YT1MgKi8KLSAgICByZXR1cm4obik7Ci19Ci0KLS8qICBDIE8gTiBHIEsgUyAgLS0g IENvbnNvbGUgR2V0IEtleWJvYXJkIFNjYW5jb2RlICAqLwotCi0jaWZuZGVmIGNvbmdrcwotLyoK LSAgVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSBmaWxsZWQgaW4gd2l0aCB0aGUgdmFyaW91cyBz eXN0ZW0tZGVwZW5kZW50Ci0gIHN5c3RlbSBjYWxscyB1c2VkIGJ5IFNVTk9TLCBOZVhUIE9TLCBY ZW5peCwgQXZpaW9uLCBldGMsIHRvIHJlYWQgYSBmdWxsCi0gIGtleWJvYXJkIHNjYW4gY29kZS4g IFVuZm9ydHVuYXRlbHkgdGhlcmUgYXJlbid0IGFueS4KLSovCi1pbnQKLWNvbmdrcyh0aW1vKSBp bnQgdGltbzsgewotCi0jaWZkZWYgSUtTRAotICAgIGlmIChpbnNlcnZlciAmJiAhbG9jYWwpCi0g ICAgICByZXR1cm4odHRpbmModGltbykpOwotI2VuZGlmIC8qIElLU0QgKi8KLQotICAgIHJldHVy bihjb25pbmModGltbykpOwotfQotI2VuZGlmIC8qIGNvbmdrcyAqLwotCi0jaWZkZWYgQVRUNzMw MAotCi0vKiAgQSBUIFQgRCBJIEEgTCAgLS0gIERpYWwgdXAgdGhlIHJlbW90ZSBzeXN0ZW0gdXNp bmcgaW50ZXJuYWwgbW9kZW0KLSAqIFB1cnBvc2U6IHRvIG9wZW4gYW5kIGRpYWwgYSBudW1iZXIg b24gdGhlIGludGVybmFsIG1vZGVtIGF2YWlsYWJsZSBvbiB0aGUKLSAqIEFUVDczMDAgVU5JWCBQ Qy4gIFdyaXR0ZW4gYnkgSm9lIERvdXBuaWsuIFN1cGVyY2VlZHMgdmVyc2lvbiB3cml0dGVuIGJ5 Ci0gKiBSaWNoYXJkIEUuIEhpbGwsIERpY2tpbnNvbiwgVFguIHdoaWNoIGVtcGxveWVkIGRpYWwo M2MpLgotICogVXNlcyBpbmZvcm1hdGlvbiBpbiA8c3lzL3Bob25lLmg+IGFuZCBvdXIgc3RhdHVz IGludCBhdHRtb2RlbS4KLSAqLwotYXR0ZGlhbCh0dG5hbWUsc3BlZWQsdGVsbmJyKSBjaGFyICp0 dG5hbWUsKnRlbG5icjsgbG9uZyBzcGVlZDsgewotICAgIGNoYXIgKnRlbG51bTsKLQotICAgIGF0 dG1vZGVtICY9IH5JU01PREVNOyAgICAgICAgICAgICAgICAgICAgICAgLyogbW9kZW0gbm90IGlu IHVzZSB5ZXQgKi8KLSAgICAgICAgICAgICAgICAgICAgLyogRW5zdXJlIE9fTkRFTEFZIGlzIHNl dCwgZWxzZSBpL28gdHJhZmZpYyBoYW5ncyAqLwotICAgICAgICAgICAgICAgICAgICAvKiBXZSB0 dXJuIHRoaXMgZmxhZyBvZmYgb25jZSB0aGUgZGlhbCBpcyBjb21wbGV0ZSAqLwotICAgIGZjbnRs KHR0eWZkLCBGX1NFVEZMLCBmY250bCh0dHlmZCwgRl9HRVRGTCwgMCkgfCBPX05ERUxBWSk7Ci0K LSAgICAvKiBDb25kaXRpb24gbGluZSwgY2hlY2sgYXZhaWxhYmlsaXR5ICYgREFUQSBtb2RlLCB0 dXJuIG9uIHNwZWFrZXIgKi8KLSAgICBpZiAoaW9jdGwodHR5ZmQsUElPQ09GRkhPT0ssICZkaWFs ZXIpID09IC0xKSB7Ci0gICAgICAgIHByaW50ZigiY2Fubm90IGFjY2VzcyBwaG9uZVxuIik7Ci0g ICAgICAgIHR0Y2xvcygwKTsKLSAgICAgICAgcmV0dXJuICgtMik7Ci0gICAgfQotICAgIGlvY3Rs KHR0eWZkLFBJT0NHRVRQLCZkaWFsZXIpOyAgICAgIC8qIGdldCBwaG9uZSBkaWFsZXIgcGFyYW1l dGVycyAqLwotCi0gICAgaWYgKGRpYWxlci5jX2xpbmVwYXJhbSAmIFZPSUNFKSB7CS8qIHBob25l IG11c3QgYmUgaW4gREFUQSBtb2RlICovCi0gICAgICAgIHByaW50ZigiIFNob3VsZCBub3QgZGlh bCB3aXRoIG1vZGVtIGluIFZPSUNFIG1vZGUuXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgRXhpdCBL ZXJtaXQsIHN3aXRjaCB0byBEQVRBIGFuZCByZXRyeSBjYWxsLlxuIik7Ci0gICAgICAgIHR0Y2xv cygwKTsKLSAgICAgICAgcmV0dXJuICgtMik7Ci0gICAgfQotI2lmZGVmIEFUVFRPTkVECQkJCS8q IE9sZCB3YXksIHRvbmUgZGlhbGluZyBvbmx5LiAqLwotICAgIGRpYWxlci5jX2xpbmVwYXJhbSA9 IERBVEEgfCBEVE1GOwkvKiBEaWFsIHdpdGggdG9uZXMsICovCi0gICAgZGlhbGVyLmNfbGluZXBh cmFtICY9IH5QVUxTRTsJLyogbm90IHdpdGggcHVsc2VzLiAqLwotI2Vsc2UKLSAgICAvKiBMZWF2 ZSBjdXJyZW50IHB1bHNlL3RvbmUgc3RhdGUgYWxvbmUuICovCi0gICAgLyogQnV0IHdoYXQgYWJv dXQgREFUQT8gIEFkZCBpdCBiYWNrIGlmIHlvdSBoYXZlIHRyb3VibGUuICovCi0gICAgLyogc3lz L3Bob25lIHNheXMgeW91IGdldCBEQVRBIGF1dG9tYXRpY2FsbHkgYnkgb3BlbmluZyBkZXZpY2Ug UkRXUiAqLwotI2VuZGlmCi0gICAgZGlhbGVyLmNfd2FpdGRpYWx0b25lID0gNTsgICAgICAgICAg ICAgICAgICAvKiB3YWl0IDUgc2VjIGZvciBkaWFsdG9uZSAqLwotI2lmZGVmIENPTU1FTlQKLSAg ICBkaWFsZXIuY19mZWVkYmFjayA9IFNQRUFLRVJPTnxOT1JNU1BLfFJJTkdPTjsgIC8qIGNvbnRy b2wgc3BlYWtlciAqLwotI2Vsc2UKLSAgICAvKiBzeXMvcGhvbmUgc2F5cyBSSU5HT04gdXNlZCBv bmx5IGZvciBpbmNvbWluZyB2b2ljZSBjYWxscyAqLwotICAgIGRpYWxlci5jX2ZlZWRiYWNrICY9 IH4oU09GVFNQS3xMT1VEU1BLKTsKLSAgICBkaWFsZXIuY19mZWVkYmFjayB8PSBTUEVBS0VST058 Tk9STVNQSzsKLSNlbmRpZgotICAgIGRpYWxlci5jX3dhaXRmbGFzaCA9IDUwMDsgICAgICAgICAg ICAgICAgICAgLyogMC41IHNlYyBmbGFzaCBob29rICovCi0gICAgaWYoaW9jdGwodHR5ZmQsUElP Q1NFVFAsJmRpYWxlcikgPT0gLTEpIHsgICAvKiBzZXQgcGhvbmUgcGFyYW1ldGVycyAqLwotICAg ICAgICBwcmludGYoIkNhbm5vdCBzZXQgbW9kZW0gY2hhcmFjdGVyaXN0aWNzXG4iKTsKLSAgICAg ICAgdHRjbG9zKDApOwotICAgICAgICByZXR1cm4gKC0yKTsKLSAgICB9Ci0gICAgaW9jdGwodHR5 ZmQsUElPQ1JFQ09OTiwwKTsJCS8qIFR1cm5zIG9uIHNwZWFrZXIgZm9yIHB1bHNlICovCi0KLSNp ZmRlZiBDT01NRU5UCi0gICAgZnByaW50ZihzdGRlcnIsIlBob25lIGxpbmUgc3RhdHVzLiBsaW5l X3BhcjolbyBkaWFsdG9uZV93YWl0OiVvIFwKLWxpbmVfc3RhdHVzOiVvIGZlZWRiYWNrOiVvXG4i LAotICAgIGRpYWxlci5jX2xpbmVwYXJhbSwgZGlhbGVyLmNfd2FpdGRpYWx0b25lLAotICAgIGRp YWxlci5jX2xpbmVzdGF0dXMsIGRpYWxlci5jX2ZlZWRiYWNrKTsKLSNlbmRpZgotCi0gICAgYXR0 bW9kZW0gfD0gSVNNT0RFTTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBtb2RlbSBpcyBub3cg aW4tdXNlICovCi0gICAgc2xlZXAoMSk7Ci0gICAgZm9yICh0ZWxudW0gPSB0ZWxuYnI7ICp0ZWxu dW0gIT0gJ1wwJzsgdGVsbnVtKyspICAgIC8qIGRpYWwgbnVtYmVyICovCi0jaWZkZWYgQVRUVE9O RUQKLSAgICAgIC8qIFRvbmUgZGlhbGluZyBvbmx5ICovCi0gICAgICBpZiAoaW9jdGwodHR5ZmQs UElPQ0RJQUwsdGVsbnVtKSAhPSAwKSB7Ci0JICBwZXJyb3IoIkVycm9yIGluIGRpYWxpbmciKTsK LQkgIHR0Y2xvcygwKTsKLQkgIHJldHVybigtMik7Ci0gICAgICB9Ci0jZWxzZSAvKiBBbGxvdyBQ dWxzZSBvciBUb25lIGRpYWxpbmcgKi8KLSAgICBzd2l0Y2ggKCp0ZWxudW0pIHsKLSAgICAgIGNh c2UgJ3QnOiBjYXNlICdUJzogY2FzZSAnJSc6CS8qIFRvbmUgZGlhbGluZyByZXF1ZXN0ZWQgKi8K LQlkaWFsZXIuY19saW5lcGFyYW0gfD0gRFRNRjsKLQlkaWFsZXIuY19saW5lcGFyYW0gJj0gflBV TFNFOwotCWlmIChpb2N0bCh0dHlmZCxQSU9DU0VUUCwmZGlhbGVyKSA9PSAtMSkgewotCSAgICBw cmludGYoIkNhbm5vdCBzZXQgbW9kZW0gdG8gdG9uZSBkaWFsaW5nXG4iKTsKLQkgICAgdHRjbG9z KDApOwotCSAgICByZXR1cm4oLTIpOwotCX0KLQlicmVhazsKLSAgICAgIGNhc2UgJ2QnOiBjYXNl ICdEJzogY2FzZSAncCc6IGNhc2UgJ1AnOiBjYXNlICdeJzoKLQlkaWFsZXIuY19saW5lcGFyYW0g fD0gUFVMU0U7Ci0JZGlhbGVyLmNfbGluZXBhcmFtICY9IH5EVE1GOwotCWlmIChpb2N0bCh0dHlm ZCxQSU9DU0VUUCwmZGlhbGVyKSA9PSAtMSkgewotCSAgICBwcmludGYoIkNhbm5vdCBzZXQgbW9k ZW0gdG8gcHVsc2UgZGlhbGluZ1xuIik7Ci0JICAgIHR0Y2xvcygwKTsKLQkgICAgcmV0dXJuKC0y KTsKLQl9Ci0JYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBpZiAoaW9jdGwodHR5ZmQs UElPQ0RJQUwsdGVsbnVtKSAhPSAwKSB7Ci0JICAgIHBlcnJvcigiRGlhbGluZyBlcnJvciIpOwot CSAgICB0dGNsb3MoMCk7Ci0JICAgIHJldHVybigtMik7Ci0JfQotCWJyZWFrOwotICAgIH0KLSNl bmRpZgotCi0gICAgaW9jdGwodHR5ZmQsUElPQ0RJQUwsIkAiKTsJCS8qIHRlcm1pbmF0b3IgZm9y IGRhdGEgY2FsbCAqLwotICAgIGRvIHsJCQkJLyogd2FpdCBmb3IgbW9kZW1zIHRvIENvbm5lY3Qg Ki8KLSAgICAgICAgaWYgKGlvY3RsKHR0eWZkLFBJT0NHRVRQLCZkaWFsZXIpICE9IDApCXsgLyog Z2V0IHBhcmFtcyAqLwotCSAgICBwZXJyb3IoIkNhbm5vdCBnZXQgbW9kZW1zIHRvIGNvbm5lY3Qi KTsKLQkgICAgdHRjbG9zKDApOwotCSAgICByZXR1cm4oLTIpOwotCX0KLSAgICB9IHdoaWxlICgo ZGlhbGVyLmNfbGluZXN0YXR1cyAmIE1PREVNQ09OTkVDVEVEKSA9PSAwKTsKLSAgICAvKiBUdXJu IG9mZiBPX05ERUxBWSBmbGFnIG5vdy4gKi8KLSAgICBmY250bCh0dHlmZCwgRl9TRVRGTCwgZmNu dGwodHR5ZmQsIEZfR0VURkwsIDApICYgfk9fTkRFTEFZKTsKLSAgICBzaWduYWwoU0lHSFVQLCBz aWdodXApOyAgICAgICAgICAgICAvKiBoYW5ndXAgb24gbG9zcyBvZiBjYXJyaWVyICovCi0gICAg cmV0dXJuKDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIHN1Y2Nlc3MgKi8K LX0KLQotLyoKLSAgT2ZmZ2V0dHksIG9uZ2V0dHkgZnVuY3Rpb25zLiBUaGVzZSBmdW5jdGlvbiBn ZXQgdGhlICdnZXR0eSgxbSknIG9mZgotICBhbmQgcmVzdG9yZSBpdCB0byB0aGUgaW5kaWNhdGVk IGxpbmUuICBTaGVsbCdzIHJldHVybiBjb2RlcyBhcmU6Ci0gICAgMDogQ2FuJ3QgZG8gaXQuICBQ cm9iYWJseSBhIHVzZXIgbG9nZ2VkIG9uLgotICAgIDE6IE5vIG5lZWQuICBObyBnZXR0eSBvbiB0 aGF0IGxpbmUuCi0gICAgMjogRG9uZSwgeW91IHNob3VsZCByZXN0b3JlIHRoZSBnZXR0eSB3aGVu IHlvdSdyZSBkb25lLgotICBET0dFVFkgU3lzdGVtKDMpLCBob3dldmVyLCByZXR1cm5zIHRoZW0g YXMgMCwgMjU2LCA1MTIsIHJlc3BlY3RpdmVseS4KLSAgVGhhbmtzIHRvIEtldmluIE8nR29ybWFu LCBBbmFybSBTb2Z0d2FyZSBTeXN0ZW1zLgotCi0gICBnZXRvZmYuc2ggbG9va3MgbGlrZTogICBn ZXRvbi5zaCBsb29rcyBsaWtlOgotICAgICBzZXRnZXR0eSAkMSAwICAgICAgICAgICBzZXRnZXR0 eSAkMSAxCi0gICAgIGVycj0kPyAgICAgICAgICAgICAgICAgIGV4aXQgJD8KLSAgICAgc2xlZXAg MgotICAgICBleGl0ICRlcnIKLSovCi0KLS8qICBPIEYgRiBHIEUgVCBUIFkgIC0tICBUdXJuIG9m ZiBnZXR0eSgxbSkgZm9yIHRoZSBjb21tdW5pY2F0aW9ucyB0dHkgbGluZQotICogYW5kIGdldCBz dGF0dXMgc28gaXQgY2FuIGJlIHJlc3RhcnRlZCBhZnRlciB0aGUgbGluZSBpcyBodW5nIHVwLgot ICovCi1pbnQKLW9mZmdldHR5KHR0bmFtZSkgY2hhciAqdHRuYW1lOyB7Ci0gICAgY2hhciB0ZW1w WzMwXTsKLSAgICB3aGlsZSAoKnR0bmFtZSAhPSAnXDAnKSB0dG5hbWUrKzsgICAgICAgLyogc2Vl ayB0ZXJtaW5hdG9yIG9mIHBhdGggKi8KLSAgICB0dG5hbWUgLT0gMzsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogZ2V0IGxhc3QgMyBjaGFycyBvZiBuYW1lICovCi0gICAgc3ByaW50Zih0 ZW1wLCIvdXNyL2Jpbi9nZXRvZmYuc2ggJXMiLHR0bmFtZSk7Ci0gICAgcmV0dXJuKHpzeXNjbWQo dGVtcCkpOwotfQotCi0vKiAgTyBOIEcgRSBUIFQgWSAgLS0gIFR1cm4gb24gZ2V0dHkoMW0pIGZv ciB0aGUgY29tbXVuaWNhdGlvbnMgdHR5IGxpbmUgKi8KLQotaW50Ci1vbmdldHR5KHR0bmFtZSkg Y2hhciAqdHRuYW1lOyB7Ci0gICAgY2hhciB0ZW1wWzMwXTsKLSAgICB3aGlsZSAoKnR0bmFtZSAh PSAnXDAnKSB0dG5hbWUrKzsgICAgICAgLyogY29tbXMgdHR5IHBhdGggbmFtZSAqLwotICAgIHR0 bmFtZSAtPSAzOwotICAgIHNwcmludGYodGVtcCwiL3Vzci9iaW4vZ2V0b24uc2ggJXMiLHR0bmFt ZSk7Ci0gICAgcmV0dXJuKHpzeXNjbWQodGVtcCkpOwotfQotI2VuZGlmIC8qIEFUVDczMDAgKi8K LQotLyogIFQgVCBTIEMgQSBSIFIgIC0tICBTZXQgdHRjYXJyIHZhcmlhYmxlLCBjb250cm9sbGlu ZyBjYXJyaWVyIGhhbmRsaW5nLgotICoKLSAqICAwID0gT2ZmOiBBbHdheXMgaWdub3JlIGNhcnJp ZXIuIEUuZy4geW91IGNhbiBjb25uZWN0IHdpdGhvdXQgY2Fycmllci4KLSAqICAxID0gT246IEhl ZWQgY2FycmllciwgZXhjZXB0IGR1cmluZyBkaWFsaW5nLiBDYXJyaWVyIGxvc3MgZ2l2ZXMgZGlz Y29ubmVjdC4KLSAqICAyID0gQXV0bzogRm9yICJtb2RlbSBkaXJlY3QiOiBUaGUgc2FtZSBhcyAi T2ZmIi4KLSAqICAgICAgICAgICAgRm9yIHJlYWwgbW9kZW0gdHlwZXM6IEhlZWQgY2FycmllciBk dXJpbmcgY29ubmVjdCwgYnV0IGlnbm9yZQotICogICAgICAgICAgICAgICAgaXQgYW55dGltZSBl bHNlLiAgQ29tcGF0aWJsZSB3aXRoIHByZS01QSBDLUtlcm1pdCB2ZXJzaW9ucy4KLSAqCi0gKiBB cyB5b3UgY2FuIHNlZSwgdGhpcyBzZXR0aW5nIGRvZXMgbm90IGFmZmVjdCBkaWFsaW5nLCB3aGlj aCBhbHdheXMgaWdub3JlcwotICogY2FycmllciAodW5sZXNzIHRoZXJlIGlzIHNvbWUgc3BlY2lh bCBleGNlcHRpb24gZm9yIHNvbWUgbW9kZW0gdHlwZSkuICBJdAotICogZG9lcyBhZmZlY3QgdHRv cGVuKCkgaWYgaXQgaXMgc2V0IGJlZm9yZSB0dG9wZW4oKSBpcyB1c2VkLiAgVGhpcyBzZXR0aW5n Ci0gKiB0YWtlcyBlZmZlY3Qgb24gdGhlIG5leHQgY2FsbCB0byB0dG9wZW4oKS90dHBrdCgpL3R0 dnQoKS4gIEFuZCB0aGV5IGFyZQotICogKG9yIHNob3VsZCBiZSkgYWx3YXlzIGNhbGxlZCBiZWZv cmUgYW55IGNvbW11bmljYXRpb25zIGlzIHRyaWVkLCB3aGljaAotICogbWVhbnMgdGhhdCwgcHJh Y3RpY2FsbHkgc3BlYWtpbmcsIHRoZSBlZmZlY3QgaXMgaW1tZWRpYXRlLgotICoKLSAqIE9mIGNv dXJzZSwgbm90aGluZyBvZiB0aGlzIGFwcGxpZXMgdG8gcmVtb3RlIG1vZGUgKHhsb2NhbCA9IDAp LgotICoKLSAqIFNvbWVvbmUgaGFzIHlldCB0byB1bmNvdmVyIGhvdyB0byBtYW5pcHVsYXRlIHRo ZSBjYXJyaWVyIGluIHRoZSBCU0QKLSAqIGVudmlyb25tZW50IChvciBhbnkgbm9uLXRlcm1pbyB1 c2luZyBlbnZpcm9ubWVudCkuICBVbnRpbCB0aGF0IHRpbWUsIHRoaXMKLSAqIHdpbGwgc2ltcGx5 IGJlIGEgbm8tb3AgZm9yIEJTRC4KLSAqCi0gKiBOb3RlIHRoYXQgaW4gcHJldmlvdXMgdmVyc2lv bnMsIHRoZSBjYXJyaWVyIHdhcyBtb3N0IG9mdGVuIGxlZnQgdW5jaGFuZ2VkCi0gKiBpbiB0dHBr dCgpL3R0dnQoKSB1bmxlc3MgdGhleSB3ZXJlIGNhbGxlZCB3aXRoIEZMT19ESUFMIG9yIEZMT19E SUFYLiAgVGhpcwotICogaGFzIGNoYW5nZWQuICBOb3cgaXQgaXMgY29udHJvbGxlZCBieSB0dGNh cnIgaW4gY29uanVuY3Rpb24gd2l0aCB0aGVzZQotICogbW9kZXMuCi0gKi8KLWludAotdHRzY2Fy cihjYXJyaWVyKSBpbnQgY2FycmllcjsgewotICAgIHR0Y2FyciA9IGNhcnJpZXI7Ci0gICAgZGVi dWcoRjEwMSwgInR0c2NhcnIiLCIiLHR0Y2Fycik7Ci0gICAgcmV0dXJuKHR0Y2Fycik7Ci19Ci0K LS8qIEMgQSBSIFIgQyBUIEwgIC0tICBTZXQgdHR5IG1vZGVzIGZvciBjYXJyaWVyIHRyZWF0bWVu dC4KLSAqCi0gKiBTZXRzIHRoZSBhcHByb3ByaWF0ZSBiaXRzIGluIGEgdGVybWlvIG9yIHNndHR5 YiBzdHJ1Y3QgZm9yIGNhcnJpZXIgY29udHJvbAotICogKGFjdHVhbGx5LCB0aGVyZSBhcmUgbm8g Yml0cyBpbiBzZ3R0eWIgZm9yIHRoYXQpLCBvciBwZXJmb3JtcyBhbnkgb3RoZXIKLSAqIG9wZXJh dGlvbnMgbmVlZGVkIHRvIGNvbnRyb2wgdGhpcyBvbiB0aGUgY3VycmVudCBzeXN0ZW0uICBUaGUg ZnVuY3Rpb24gZG9lcwotICogbm90IGRvIHRoZSBhY3R1YWwgVENTRVRBIG9yIHN0dHksIHNpbmNl IG9mdGVuIHdlIHdhbnQgdG8gc2V0IG90aGVyIGJpdHMgdG9vCi0gKiBmaXJzdC4gIERvbid0IGNh bGwgdGhpcyBmdW5jdGlvbiB3aGVuIHhsb2NhbCBpcyAwLCBvciB0aGUgdHR5IGlzIG5vdCBvcGVu ZWQuCi0gKgotICogV2UgZG9uJ3Qga25vdyBob3cgdG8gZG8gYW55dGhpbmcgbGlrZSBjYXJyaWVy IGNvbnRyb2wgb24gbm9uLUFUVFNWIHN5c3RlbXMsCi0gKiBleGNlcHQsIGFwcGFyZW50bHksIHVs dHJpeC4gIFNlZSBhYm92ZS4gIEl0IGlzIGFsc28ga25vd24gdGhhdCB0aGlzIGRvZXNuJ3QKLSAq IGhhdmUgbXVjaCBlZmZlY3Qgb24gYSBYZW5peCBzeXN0ZW0uICBGb3IgWGVuaXgsIG9uZSBzaG91 bGQgc3dpdGNoIGJhY2sgYW5kCi0gKiBmb3J0aCBiZXR3ZWVuIHRoZSB1cHBlciBhbmQgbG93ZXIg Y2FzZSBkZXZpY2UgZmlsZXMuICBNYXliZSBsYXRlci4KLSAqIFByZXNlbnRseSwgWGVuaXggd2ls bCBzdGljayB0byB0aGUgbW9kZSBpdCB3YXMgb3BlbmVkIHdpdGguCi0gKgotICogY2Fycmllcjog MCA9IGlnbm9yZSBjYXJyaWVyLCAxID0gcmVxdWlyZSBjYXJyaWVyLgotICogVGhlIGN1cnJlbnQg c3RhdGUgaXMgc2F2ZWQgaW4gY3VyY2FyciwgYW5kIGNoZWNrZWQgdG8gc2F2ZSBsYWJvdXIuCi0g Ki8KLSNpZmRlZiBTVk9SUE9TSVgKLWludAotI2lmZGVmIEJTRDQ0T1JQT1NJWAotY2FycmN0bCh0 dHBhciwgY2FycmllcikJc3RydWN0IHRlcm1pb3MgKnR0cGFyOyBpbnQgY2FycmllcjsKLSNlbHNl IC8qIEFUVFNWICovCi1jYXJyY3RsKHR0cGFyLCBjYXJyaWVyKQlzdHJ1Y3QgdGVybWlvICp0dHBh cjsgaW50IGNhcnJpZXI7Ci0jZW5kaWYgLyogQlNENDRPUlBPU0lYICovCi0vKiBjYXJyY3RsICov IHsKLSAgICBkZWJ1ZyhGMTAxLCAiY2FycmN0bCIsIiIsY2Fycmllcik7Ci0gICAgaWYgKGNhcnJp ZXIpCi0gICAgICB0dHBhci0+Y19jZmxhZyAmPSB+Q0xPQ0FMOwotICAgIGVsc2UKLSAgICAgIHR0 cGFyLT5jX2NmbGFnIHw9IENMT0NBTDsKLSAgICByZXR1cm4oMCk7Ci19Ci0jZWxzZSAvKiBCZXJr ZWxleSwgVjcsIGV0IGFsLi4uICovCi1pbnQKLWNhcnJjdGwodHRwYXIsIGNhcnJpZXIpIHN0cnVj dCBzZ3R0eWIgKnR0cGFyOyBpbnQgY2FycmllcjsgewotICAgIGRlYnVnKEYxMDEsICJjYXJyY3Rs IiwiIixjYXJyaWVyKTsKLSAgICBpZiAoY2FycmllciA9PSBjdXJjYXJyKQotICAgICAgcmV0dXJu KDApOwotICAgIGN1cmNhcnIgPSBjYXJyaWVyOwotI2lmZGVmIHVsdHJpeAotI2lmZGVmIENPTU1F TlQKLS8qCi0gIE9sZCBjb2RlIGZyb20gc29tZWJvZHkgYXQgREVDIHRoYXQgdGVuZHMgdG8gZ2V0 IHN0dWNrLCB0aW1lIG91dCwgZXRjLgotKi8KLSAgICBpZiAoY2FycmllcikgewotCWlvY3RsKHR0 eWZkLCBUSU9DTU9ERU0sICZ0ZW1wKTsKLQlpb2N0bCh0dHlmZCwgVElPQ0hQQ0wsIDApOwotICAg IH0gZWxzZSB7Ci0JLyogKEFjY29yZGluZyB0byB0aGUgbWFudWFscywgVElPQ05DQVIgc2hvdWxk IGJlIHByZWZlcnJlZCAqLwotCS8qIG92ZXIgVElPQ05NT0RFTS4uLikgKi8KLQlpb2N0bCh0dHlm ZCwgVElPQ05NT0RFTSwgJnRlbXApOwotICAgIH0KLSNlbHNlCi0vKgotICBOZXcgY29kZSBmcm9t IEphbWllIFdhdHNvbiB0aGF0LCBoZSBzYXlzLCBlbGltaW5hdGVzIHRoZSBwcm9ibGVtcy4KLSov Ci0gICAgaWYgKGNhcnJpZXIpIHsKLQlpb2N0bCh0dHlmZCwgVElPQ0NBUik7Ci0JaW9jdGwodHR5 ZmQsIFRJT0NIUENMKTsKLSAgICB9IGVsc2UgewotCWlvY3RsKHR0eWZkLCBUSU9DTkNBUik7Ci0g ICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNlbmRpZiAvKiB1bHRyaXggKi8KLSAgICByZXR1 cm4oMCk7Ci19Ci0jZW5kaWYgLyogU1ZPUlBPU0lYICovCi0KLQotLyogIFQgVCBHIE0gRCBNICAt LSAgR2V0IG1vZGVtIHNpZ25hbHMgICovCi0vKgotIExvb2tzIGZvciBSUy0yMzIgbW9kZW0gc2ln bmFscywgYW5kIHJldHVybnMgdGhvc2UgdGhhdCBhcmUgb24gaW4gYXMgaXRzCi0gcmV0dXJuIHZh bHVlLCBpbiBhIGJpdCBtYXNrIGNvbXBvc2VkIG9mIHRoZSBCTV94eHggdmFsdWVzIGRlZmluZWQg aW4gY2tjZGViLmguCi0gUmV0dXJuczoKLSAtMyBOb3QgaW1wbGVtZW50ZWQKLSAtMiBpZiB0aGUg Y29tbXVuaWNhdGlvbiBkZXZpY2UgZG9lcyBub3QgaGF2ZSBtb2RlbSBjb250cm9sIChlLmcuIHRl bG5ldCkKLSAtMSBvbiBlcnJvci4KLSA+PSAwIG9uIHN1Y2Nlc3MsIHdpdGggYSBiaXQgbWFzayBj b250YWluaW5nIHRoZSBtb2RlbSBzaWduYWxzIHRoYXQgYXJlIG9uLgotKi8KLQotLyoKLSAgRGVm aW5lIHRoZSBzeW1ib2wgS19NRE1DVEwgaWYgd2UgaGF2ZSBTeXMgViBSMyAvIDQuMyBCU0Qgc3R5 bGUKLSAgbW9kZW0gY29udHJvbCwgbmFtZWx5IHRoZSBUSU9DTUdFVCBpb2N0bC4KLSovCi0KLSNp ZmRlZiBCU0Q0MwotI2RlZmluZSBLX01ETUNUTAotI2VuZGlmIC8qIEJTRDQzICovCi0KLSNpZmRl ZiBTVU5PUzQKLSNkZWZpbmUgS19NRE1DVEwKLSNlbmRpZiAvKiBTVU5PUzQgKi8KLQotLyoKLSAg U0NPIE9wZW5TZXJ2ZXIgUjUuMC40LiAgVGhlIFRJT0NNR0VUIGRlZmluaXRpb24gaXMgaGFyZHdp cmVkIGluIGJlY2F1c2UgaXQKLSAgaXMgc2tpcHBlZCBpbiB0ZXJtaW8uaCB3aGVuIF9QT1NJWF9T T1VSQ0UgaXMgZGVmaW5lZC4gIEJ1dCBfUE9TSVhfU09VUkNFCi0gIG11c3QgYmUgZGVmaW5lZCBp biBvcmRlciB0byBnZXQgdGhlIGhpZ2ggc2VyaWFsIHNwZWVkcyB0aGF0IGFyZSBuZXcgdG8KLSAg NS4wLjQuICBIb3dldmVyLCB0aGUgcmVndWxhciBTQ08gZHJpdmVycyBkbyBub3QgaW1wbGVtZW50 IFRJT0NNR0VULCBzbyB0aGUKLSAgaW9jdGwoKSByZXR1cm5zIC0xIHdpdGggZXJybm8gMjIgKGlu dmFsaWQgZnVuY3Rpb24pLiAgQnV0IHRoaXJkLXBhcnR5Ci0gIGRyaXZlcnMsIGUuZy4gZm9yIERp Z2lib2FyZCwgZG8gaW1wbGVtZW50IGl0LCBhbmQgc28gaXQgc2hvdWxkIHdvcmsgb24gcG9ydHMK LSAgZHJpdmVuIGJ5IHRob3NlIGRyaXZlcnMuCi0qLwotI2lmZGVmIFNDT19PU1I1MDQKLSNpZm5k ZWYgVElPQ01HRVQKLSNkZWZpbmUgVElPQ01HRVQgKCgndCc8PDgpfDI5KQotI2VuZGlmIC8qIFRJ T0NNR0VUICovCi0jZW5kaWYgLyogU0NPX09TUjUwNCAqLwotCi0jaWZkZWYgQ0tfU0NPVjUKLS8q IEJlY2F1c2UgUE9TSVggc3RyaWN0bmVzcyBpbiA8c3lzL3Rlcm1pby5oPiB3b24ndCBsZXQgdXMg c2VlIHRoZXNlLiAqLwotI2lmbmRlZiBUSU9DTV9EVFIKLSNkZWZpbmUgVElPQ01fRFRSCTB4MDAw MgkJLyogZGF0YSB0ZXJtaW5hbCByZWFkeSAqLwotI2RlZmluZSBUSU9DTV9SVFMJMHgwMDA0CQkv KiByZXF1ZXN0IHRvIHNlbmQgKi8KLSNkZWZpbmUgVElPQ01fQ1RTCTB4MDAyMAkJLyogY2xlYXIg dG8gc2VuZCAqLwotI2RlZmluZSBUSU9DTV9DQVIJMHgwMDQwCQkvKiBjYXJyaWVyIGRldGVjdCAq LwotI2RlZmluZSBUSU9DTV9STkcJMHgwMDgwCQkvKiByaW5nICovCi0jZGVmaW5lIFRJT0NNX0RT UgkweDAxMDAJCS8qIGRhdGEgc2V0IHJlYWR5ICovCi0jZGVmaW5lIFRJT0NNX0NECVRJT0NNX0NB UgotI2RlZmluZSBUSU9DTV9SSQlUSU9DTV9STkcKLSNlbmRpZiAvKiBUSU9DTV9EVFIgKi8KLSNl bmRpZiAvKiBDS19TQ09WNSAqLwotCi0jaWZkZWYgUU5YCi0jZGVmaW5lIEtfTURNQ1RMCi0jZWxz ZQotI2lmZGVmIFRJT0NNR0VUCi0jZGVmaW5lIEtfTURNQ1RMCi0jZW5kaWYgLyogVElPQ01HRVQg Ki8KLSNlbmRpZiAvKiBRTlggKi8KLS8qCi0gICJBIHNlcmlhbCBjb21tdW5pY2F0aW9uIHByb2dy YW0gdGhhdCBjYW4ndCByZWFkIG1vZGVtIHNpZ25hbHMKLSAgIGlzIGxpa2UgYSBjYXIgd2l0aG91 dCB3aW5kb3dzLiIKLSovCi1pbnQKLXR0Z21kbSgpIHsKLQotI2lmZGVmIFFOWAotI2luY2x1ZGUg PHN5cy9xaW9jdGwuaD4KLQotICAgIHVuc2lnbmVkIGxvbmcgeSwgbWRtYml0c1syXTsKLSAgICBp bnQgeCwgeiA9IDA7Ci0KLSAgICBpZiAoeGxvY2FsICYmIHR0eWZkIDwgMCkKLSAgICAgIHJldHVy bigtMSk7Ci0KLSNpZmRlZiBORVRDT05OCi0gICAgaWYgKG5ldGNvbm4pIHsJCQkvKiBOZXR3b3Jr IGNvbm5lY3Rpb24gKi8KLSNpZmRlZiBUTl9DT01QT1JUCi0gICAgICAgIGlmIChpc3RuY29tcG9y dCgpKSB7Ci0JICAgIGdvdHNpZ3MgPSAxOwotCSAgICByZXR1cm4odG5nbWRtKCkpOwotCX0gZWxz ZQotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLQkgIHJldHVybigtMik7CQkJLyogTm8gbW9kZW0g c2lnbmFscyAqLwotICAgIH0KLSNlbmRpZiAvKiBORVRDT05OICovCi0KLSNpZmRlZiBORVRDTUQK LSAgICBpZiAodHRwaXBlKSByZXR1cm4oLTIpOwotI2VuZGlmIC8qIE5FVENNRCAqLwotI2lmZGVm IE5FVFBUWQotICAgIGlmICh0dHB0eSkgcmV0dXJuKC0yKTsKLSNlbmRpZiAvKiBORVRQVFkgKi8K LQotICAgIG1kbWJpdHNbMF0gPSAwTDsKLSAgICBtZG1iaXRzWzFdID0gMEw7Ci0vKgotICogRnJv bSA8c3lzL3Fpb2N0bC5oPjoKLSAqCi0gKiBTRVJJQUwgZGV2aWNlcyAgIChhbGwgRGV2LnNlciB2 ZXJzaW9ucykKLSAqIDAgOiBEVFIgICAgICAgICAgIDggPSBEYXRhIEJpdHMgMCAgMTYgLSByZXNl cnZlZCAgICAgMjQgLSByZXNlcnZlZAotICogMSA6IFJUUyAgICAgICAgICAgOSA9IERhdGEgQml0 cyAxICAxNyAtIHJlc2VydmVkICAgICAyNSAtIHJlc2VydmVkCi0gKiAyID0gT3V0IDEgICAgICAg IDEwID0gU3RvcCBCaXRzICAgIDE4IC0gcmVzZXJ2ZWQgICAgIDI2IC0gcmVzZXJ2ZWQKLSAqIDMg PSBJbnQgRW5hYmxlICAgMTEgPSBQYXIgRW5hYmxlICAgMTkgLSByZXNlcnZlZCAgICAgMjcgLSBy ZXNlcnZlZAotICogNCA9IExvb3AgICAgICAgICAxMiA9IFBhciBFdmVuICAgICAyMCA9IENUUyAg ICAgICAgICAyOCAtIHJlc2VydmVkCi0gKiA1IC0gcmVzZXJ2ZWQgICAgIDEzID0gUGFyIFN0aWNr ICAgIDIxID0gRFNSICAgICAgICAgIDI5IC0gcmVzZXJ2ZWQKLSAqIDYgLSByZXNlcnZlZCAgICAg MTQgOiBCcmVhayAgICAgICAgMjIgPSBSSSAgICAgICAgICAgMzAgLSByZXNlcnZlZAotICogNyAt IHJlc2VydmVkICAgICAxNSA9IDAgICAgICAgICAgICAyMyA9IENEICAgICAgICAgICAzMSAtIHJl c2VydmVkCi0gKi8KLSAgICBlcnJubyA9IDA7Ci0gICAgeCA9IHFueF9pb2N0bCh0dHlmZCwgUUNU TF9ERVZfQ1RMLCAmbWRtYml0c1swXSwgOCwgJm1kbWJpdHNbMF0sIDQpOwotICAgIGRlYnVnKEYx MDEsInR0Z21kbSBxbnhfaW9jdGwiLCIiLHgpOwotICAgIGRlYnVnKEYxMDEsInR0Z21kbSBxbnhf aW9jdGwgZXJybm8iLCIiLGVycm5vKTsKLSAgICBpZiAoIXgpIHsKLQlkZWJ1ZyhGMTAxLCJ0dGdt ZG0gcW54X2lvY3RsIG1kbWJpdHNbMF0iLCIiLG1kbWJpdHNbMF0pOwotCWRlYnVnKEYxMDEsInR0 Z21kbSBxbnhfaW9jdGwgbWRtYml0c1sxXSIsIiIsbWRtYml0c1sxXSk7Ci0JeSA9IG1kbWJpdHNb MF07Ci0JaWYgKHkgJiAweDAwMDAwMUwpIHogfD0gQk1fRFRSOwkvKiBCaXQgIDAgKi8KLQlpZiAo eSAmIDB4MDAwMDAyTCkgeiB8PSBCTV9SVFM7CS8qIEJpdCAgMSAqLwotCWlmICh5ICYgMHgxMDAw MDBMKSB6IHw9IEJNX0NUUzsJLyogQml0IDIwICovCi0JaWYgKHkgJiAweDIwMDAwMEwpIHogfD0g Qk1fRFNSOwkvKiBCaXQgMjEgKi8KLQlpZiAoeSAmIDB4NDAwMDAwTCkgeiB8PSBCTV9STkc7CS8q IEJpdCAyMiAqLwotCWlmICh5ICYgMHg4MDAwMDBMKSB6IHw9IEJNX0RDRDsJLyogQml0IDIzICov Ci0JZGVidWcoRjEwMSwidHRnbWRtIHFueCByZXN1bHQiLCIiLHopOwotCWRlYnVnKEYxMTAsInR0 Z21kbSBxbnggQ0QgPSAiLCh6ICYgQk1fRENEKSA/ICJPbiIgOiAiT2ZmIiwgMCk7Ci0JZ290c2ln cyA9IDE7Ci0JcmV0dXJuKHopOwotICAgIH0gZWxzZSByZXR1cm4oLTEpOwotI2Vsc2UgLyogUU5Y ICovCi0jaWZkZWYgSFBVWAkJCQkvKiBIUFVYIGhhcyBpdHMgb3duIHdheSAqLwotICAgIGludCB4 LCB6OwotCi0jaWZkZWYgSFBVWDEwCQkJCS8qIE1vZGVtIGZsYWcgd29yZCAqLwotICAgIG1mbGFn IHk7CQkJCS8qIG1mbGFnIHR5cGVkZWYnZCBpbiA8c3lzL21vZGVtLmg+ICovCi0jZWxzZQotI2lm ZGVmIEhQVVg5Ci0gICAgbWZsYWcgeTsKLSNlbHNlCi0jaWZkZWYgSFBVWDgKLSAgICBtZmxhZyB5 OwotI2Vsc2UKLSAgICB1bnNpZ25lZCBsb25nIHk7CQkJLyogTm90IHN1cmUgYWJvdXQgcHJlLTgu MC4uLiAqLwotI2VuZGlmIC8qIEhQVVg4ICovCi0jZW5kaWYgLyogSFBVWDkgKi8KLSNlbmRpZiAv KiBIUFVYMTAgKi8KLQotICAgIGlmICh4bG9jYWwgJiYgdHR5ZmQgPCAwKQotICAgICAgcmV0dXJu KC0xKTsKLQotI2lmZGVmIE5FVENPTk4KLSAgICBpZiAobmV0Y29ubikgewkJCS8qIE5ldHdvcmsg Y29ubmVjdGlvbiAqLwotI2lmZGVmIFROX0NPTVBPUlQKLSAgICAgICAgaWYgKGlzdG5jb21wb3J0 KCkpIHsKLQkgICAgZ290c2lncyA9IDE7Ci0JICAgIHJldHVybih0bmdtZG0oKSk7Ci0JfSBlbHNl Ci0jZW5kaWYgLyogVE5fQ09NUE9SVCAqLwotCSAgcmV0dXJuKC0yKTsJCQkvKiBObyBtb2RlbSBz aWduYWxzICovCi0gICAgfQotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQotI2lmZGVmIE5FVENNRAot ICAgIGlmICh0dHBpcGUpIHJldHVybigtMik7Ci0jZW5kaWYgLyogTkVUQ01EICovCi0jaWZkZWYg TkVUUFRZCi0gICAgaWYgKHR0cHR5KSByZXR1cm4oLTIpOwotI2VuZGlmIC8qIE5FVFBUWSAqLwot Ci0gICAgaWYgKHhsb2NhbCkJCQkJLyogR2V0IG1vZGVtIHNpZ25hbHMgKi8KLSAgICAgIHggPSBp b2N0bCh0dHlmZCxNQ0dFVEEsJnkpOwotICAgIGVsc2UKLSAgICAgIHggPSBpb2N0bCgwLE1DR0VU QSwmeSk7Ci0gICAgaWYgKHggPCAwKSByZXR1cm4oLTEpOwotICAgIGRlYnVnKEYxMDEsInR0Z21k bSIsIiIseSk7Ci0KLSAgICB6ID0gMDsJCQkJLyogSW5pdGlhbGl6ZSByZXR1cm4gdmFsdWUgKi8K LQotLyogTm93IHNldCBiaXRzIGZvciBlYWNoIG1vZGVtIHNpZ25hbCB0aGF0IGlzIHJlcG9ydGVk IHRvIGJlIG9uLiAqLwotCi0jaWZkZWYgTUNUUwotICAgIC8qIENsZWFyIFRvIFNlbmQgKi8KLSAg ICBkZWJ1ZyhGMTAxLCJ0dGdtZG0gSFBVWCBDVFMiLCIiLHkgJiBNQ1RTKTsKLSAgICBpZiAoeSAm IE1DVFMpIHogfD0gQk1fQ1RTOwotI2VuZGlmCi0jaWZkZWYgTURTUgotICAgIC8qIERhdGEgU2V0 IFJlYWR5ICovCi0gICAgZGVidWcoRjEwMSwidHRnbWRtIEhQVVggRFNSIiwiIix5ICYgTURTUik7 Ci0gICAgaWYgKHkgJiBNRFNSKSB6IHw9IEJNX0RTUjsKLSNlbmRpZgotI2lmZGVmIE1EQ0QKLSAg ICAvKiBDYXJyaWVyICovCi0gICAgZGVidWcoRjEwMSwidHRnbWRtIEhQVVggRENEIiwiIix5ICYg TURDRCk7Ci0gICAgaWYgKHkgJiBNRENEKSB6IHw9IEJNX0RDRDsKLSNlbmRpZgotI2lmZGVmIE1S SQotICAgIC8qIFJpbmcgSW5kaWNhdGUgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ0dGdtZG0gSFBVWCBS SSIsIiIseSAmIE1SSSk7Ci0gICAgaWYgKHkgJiBNUkkpIHogfD0gQk1fUk5HOwotI2VuZGlmCi0j aWZkZWYgTURUUgotICAgIC8qIERhdGEgVGVybWluYWwgUmVhZHkgKi8KLSAgICBkZWJ1ZyhGMTAx LCJ0dGdtZG0gSFBVWCBEVFIiLCIiLHkgJiBNRFRSKTsKLSAgICBpZiAoeSAmIE1EVFIpIHogfD0g Qk1fRFRSOwotI2VuZGlmCi0jaWZkZWYgTVJUUwotICAgIC8qIFJlcXVlc3QgVG8gU2VuZCAqLwot ICAgIGRlYnVnKEYxMDEsInR0Z21kbSBIUFVYIFJUUyIsIiIseSAmIE1SVFMpOwotICAgIGlmICh5 ICYgTVJUUykgeiB8PSBCTV9SVFM7Ci0jZW5kaWYKLSAgICBnb3RzaWdzID0gMTsKLSAgICByZXR1 cm4oeik7Ci0KLSNlbHNlIC8qICEgSFBVWCAqLwotCi0jaWZkZWYgS19NRE1DVEwKLS8qCi0gIE5v dGUsIFRJT0NNR0VUIG1pZ2h0IGFscmVhZHkgaGF2ZSBiZWVuIGRlZmluZWQgaW4gPHN5cy9pb2N0 bC5oPiBvciBlbHNld2hlcmUuCi0gIElmIG5vdCwgd2UgdHJ5IGluY2x1ZGluZyA8c3lzL3R0eWNv bS5oPiAtLSBpZiB0aGlzIGJsb3dzIHVwIHRoZW4gbW9yZSBpZmRlZnMKLSAgYXJlIG5lZWRlZC4K LSovCi0jaWZuZGVmIFRJT0NNR0VUCi0jaW5jbHVkZSA8c3lzL3R0eWNvbS5oPgotI2VuZGlmIC8q IFRJT0NNR0VUICovCi0KLSAgICBpbnQgeCwgeSwgejsKLQotICAgIGRlYnVnKEYxMDAsInR0Z21k bSBLX01ETUNUTCBkZWZpbmVkIiwiIiwwKTsKLQotI2lmZGVmIE5FVENPTk4KLSAgICBpZiAobmV0 Y29ubikgewkJCS8qIE5ldHdvcmsgY29ubmVjdGlvbiAqLwotI2lmZGVmIFROX0NPTVBPUlQKLSAg ICAgICAgaWYgKGlzdG5jb21wb3J0KCkpIHsKLQkgICAgZ290c2lncyA9IDE7Ci0JICAgIHJldHVy bih0bmdtZG0oKSk7Ci0JfSBlbHNlCi0jZW5kaWYgLyogVE5fQ09NUE9SVCAqLwotCSAgcmV0dXJu KC0yKTsJCQkvKiBObyBtb2RlbSBzaWduYWxzICovCi0gICAgfQotI2VuZGlmIC8qIE5FVENPTk4g Ki8KLQotI2lmZGVmIE5FVENNRAotICAgIGlmICh0dHBpcGUpIHJldHVybigtMik7Ci0jZW5kaWYg LyogTkVUQ01EICovCi0jaWZkZWYgTkVUUFRZCi0gICAgaWYgKHR0cHR5KSByZXR1cm4oLTIpOwot I2VuZGlmIC8qIE5FVFBUWSAqLwotCi0gICAgaWYgKHhsb2NhbCAmJiB0dHlmZCA8IDApCi0gICAg ICByZXR1cm4oLTEpOwotCi0gICAgaWYgKHhsb2NhbCkKLSAgICAgIHggPSBpb2N0bCh0dHlmZCxU SU9DTUdFVCwmeSk7CS8qIEdldCBtb2RlbSBzaWduYWxzLiAqLwotICAgIGVsc2UKLSAgICAgIHgg PSBpb2N0bCgwLFRJT0NNR0VULCZ5KTsKLSAgICBkZWJ1ZyhGMTAxLCJ0dGdtZG0gVElPQ01HRVQg aW9jdGwiLCIiLHgpOwotICAgIGlmICh4IDwgMCkgewotCWRlYnVnKEYxMDEsInR0Z21kbSBlcnJu byIsIiIsZXJybm8pOwotCXJldHVybigtMSk7Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsInR0Z21k bSBiaXRzIiwiIix5KTsKLQotICAgIHogPSAwOwkJCQkvKiBJbml0aWFsaXplIHJldHVybiB2YWx1 ZS4gKi8KLSNpZmRlZiBUSU9DTV9DVFMKLSAgICAvKiBDbGVhciBUbyBTZW5kICovCi0gICAgaWYg KHkgJiBUSU9DTV9DVFMpIHogfD0gQk1fQ1RTOwotICAgIGRlYnVnKEYxMDEsInR0Z21kbSBUSU9D TV9DVFMgZGVmaW5lZCIsIiIsVElPQ01fQ1RTKTsgCi0jZWxzZQotICAgIGRlYnVnKEYxMDAsInR0 Z21kbSBUSU9DTV9DVFMgbm90IGRlZmluZWQiLCIiLDApOwotI2VuZGlmCi0jaWZkZWYgVElPQ01f RFNSCi0gICAgLyogRGF0YSBTZXQgUmVhZHkgKi8KLSAgICBpZiAoeSAmIFRJT0NNX0RTUikgeiB8 PSBCTV9EU1I7Ci0gICAgZGVidWcoRjEwMSwidHRnbWRtIFRJT0NNX0RTUiBkZWZpbmVkIiwiIixU SU9DTV9EU1IpOyAKLSNlbHNlCi0gICAgZGVidWcoRjEwMCwidHRnbWRtIFRJT0NNX0RTUiBub3Qg ZGVmaW5lZCIsIiIsMCk7Ci0jZW5kaWYKLSNpZmRlZiBUSU9DTV9DQVIKLSAgICAvKiBDYXJyaWVy ICovCi0gICAgaWYgKHkgJiBUSU9DTV9DQVIpIHogfD0gQk1fRENEOwotICAgIGRlYnVnKEYxMDEs InR0Z21kbSBUSU9DTV9DQVIgZGVmaW5lZCIsIiIsVElPQ01fQ0FSKTsgCi0jZWxzZQotICAgIGRl YnVnKEYxMDAsInR0Z21kbSBUSU9DTV9DQVIgbm90IGRlZmluZWQiLCIiLDApOwotI2VuZGlmCi0j aWZkZWYgVElPQ01fUk5HCi0gICAgLyogUmluZyBJbmRpY2F0ZSAqLwotICAgIGlmICh5ICYgVElP Q01fUk5HKSB6IHw9IEJNX1JORzsKLSAgICBkZWJ1ZyhGMTAxLCJ0dGdtZG0gVElPQ01fUk5HIGRl ZmluZWQiLCIiLFRJT0NNX1JORyk7IAotI2Vsc2UKLSAgICBkZWJ1ZyhGMTAwLCJ0dGdtZG0gVElP Q01fUk5HIG5vdCBkZWZpbmVkIiwiIiwwKTsKLSNlbmRpZgotI2lmZGVmIFRJT0NNX0RUUgotICAg IC8qIERhdGEgVGVybWluYWwgUmVhZHkgKi8KLSAgICBpZiAoeSAmIFRJT0NNX0RUUikgeiB8PSBC TV9EVFI7Ci0gICAgZGVidWcoRjEwMSwidHRnbWRtIFRJT0NNX0RUUiBkZWZpbmVkIiwiIixUSU9D TV9EVFIpOyAKLSNlbHNlCi0gICAgZGVidWcoRjEwMCwidHRnbWRtIFRJT0NNX0RUUiBub3QgZGVm aW5lZCIsIiIsMCk7Ci0jZW5kaWYKLSNpZmRlZiBUSU9DTV9SVFMKLSAgICAvKiBSZXF1ZXN0IFRv IFNlbmQgKi8KLSAgICBpZiAoeSAmIFRJT0NNX1JUUykgeiB8PSBCTV9SVFM7Ci0gICAgZGVidWco RjEwMSwidHRnbWRtIFRJT0NNX1JUUyBkZWZpbmVkIiwiIixUSU9DTV9SVFMpOyAKLSNlbHNlCi0g ICAgZGVidWcoRjEwMCwidHRnbWRtIFRJT0NNX1JUUyBub3QgZGVmaW5lZCIsIiIsMCk7Ci0jZW5k aWYKLSAgICBnb3RzaWdzID0gMTsKLSAgICByZXR1cm4oeik7Ci0KLSNlbHNlIC8qICFLX01ETUNU TCBjYXRjaC1BbGwgKi8KLQotICAgIGRlYnVnKEYxMDAsInR0Z21kbSBLX01ETUNUTCBub3QgZGVm aW5lZCIsIiIsMCk7Ci0jaWZkZWYgVElPQ01HRVQKLSAgICBkZWJ1ZyhGMTAwLCJ0dGdtZG0gVElP Q01HRVQgZGVmaW5lZCIsIiIsMCk7Ci0jZWxzZQotICAgIGRlYnVnKEYxMDAsInR0Z21kbSBUSU9D TUdFVCBub3QgZGVmaW5lZCIsIiIsMCk7Ci0jZW5kaWYgLyogVElPQ01HRVQgKi8KLSNpZmRlZiBf U1ZJRDMKLSAgICBkZWJ1ZyhGMTAwLCJ0dGdtZG0gX1NWSUQzIGRlZmluZWQiLCIiLDApOwotI2Vs c2UKLSAgICBkZWJ1ZyhGMTAwLCJ0dGdtZG0gX1NWSUQzIG5vdCBkZWZpbmVkIiwiIiwwKTsKLSNl bmRpZiAvKiBfU1ZJRDMgKi8KLQotI2lmZGVmIE5FVENPTk4KLSAgICBpZiAobmV0Y29ubikgewkJ CS8qIE5ldHdvcmsgY29ubmVjdGlvbiAqLwotI2lmZGVmIFROX0NPTVBPUlQKLSAgICAgICAgaWYg KGlzdG5jb21wb3J0KCkpIHsKLQkgICAgZ290c2lncyA9IDE7Ci0JICAgIHJldHVybih0bmdtZG0o KSk7Ci0JfSBlbHNlCi0jZW5kaWYgLyogVE5fQ09NUE9SVCAqLwotCSAgcmV0dXJuKC0yKTsJCQkv KiBObyBtb2RlbSBzaWduYWxzICovCi0gICAgfQotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQotI2lm ZGVmIE5FVENNRAotICAgIGlmICh0dHBpcGUpIHJldHVybigtMik7Ci0jZW5kaWYgLyogTkVUQ01E ICovCi0jaWZkZWYgTkVUUFRZCi0gICAgaWYgKHR0cHR5KSByZXR1cm4oLTIpOwotI2VuZGlmIC8q IE5FVFBUWSAqLwotCi0gICAgcmV0dXJuKC0zKTsJCQkJLyogU29ycnksIEkgZG9uJ3Qga25vdyBo b3cuLi4gKi8KLQotI2VuZGlmIC8qIEtfTURNQ1RMICovCi0jZW5kaWYgLyogSFBVWCAqLwotI2Vu ZGlmIC8qIFFOWCAqLwotfQotCi0vKiAgUCBTIFUgUyBQIEUgTiBEICAtLSAgUHV0IHRoaXMgcHJv Y2VzcyBpbiB0aGUgYmFja2dyb3VuZC4gICovCi0KLS8qCi0gIENhbGwgd2l0aCBmbGFnIG5vbnpl cm8gaWYgc3VzcGVuZGluZyBpcyBhbGxvd2VkLCB6ZXJvIGlmIG5vdCBhbGxvd2VkLgotICBSZXR1 cm5zIDAgb24gYXBwYXJlbnQgc3VjY2VzcywgLTEgb24gZmFpbHVyZSAoZmxhZyB3YXMgemVybywg b3IKLSAga2lsbCgpIHJldHVybmVkIGFuIGVycm9yIGNvZGUuCi0qLwotaW50Ci1wc3VzcGVuZChm bGFnKSBpbnQgZmxhZzsgewotCi0jaWZkZWYgUlRVCi0gICAgZXh0ZXJuIGludCBydHVfYnVnOwot I2VuZGlmIC8qIFJUVSAqLwotCi0gICAgaWYgKGZsYWcgPT0gMCkgcmV0dXJuKC0xKTsKLQotI2lm ZGVmIE5PSkMKLSAgICByZXR1cm4oLTEpOwotI2Vsc2UKLSNpZmRlZiBTSUdUU1RQCi0vKgotICBU aGUgYmlnIHF1ZXN0aW9uIGhlcmUgaXMgd2hldGhlciBqb2IgY29udHJvbCBpcyAqcmVhbGx5KiBz dXBwb3J0ZWQuCi0gIFRoZXJlJ3Mgbm8gd2F5IEtlcm1pdCBjYW4ga25vdyBmb3Igc3VyZS4gIFRo ZSBmYWN0IHRoYXQgU0lHVFNUUCBpcwotICBkZWZpbmVkIGRvZXMgbm90IGd1YXJhbnRlZSB0aGUg VW5peCBrZXJuZWwgc3VwcG9ydHMgaXQsIGFuZCB0aGUgZmFjdAotICB0aGF0IHRoZSBVbml4IGtl cm5lbCBzdXBwb3J0cyBpdCBkb2Vzbid0IGd1YXJhbnRlZSB0aGF0IHRoZSB1c2VyJ3MKLSAgc2hl bGwgKG9yIG90aGVyIHByb2Nlc3MgdGhhdCBpbnZva2VkIEtlcm1pdCkgc3VwcG9ydHMgaXQuCi0q LwotI2lmZGVmIFJUVQotICAgIHJ0dV9idWcgPSAxOwotI2VuZGlmIC8qIFJUVSAqLwotICAgIGlm IChraWxsKDAsU0lHU1RPUCkgPCAwCi0jaWZkZWYgTUlQUwotLyogTGV0J3MgdHJ5IHRoaXMgZm9y IE1JUFMgdG9vLiAqLwotCSYmIGtpbGwoZ2V0cGlkKCksU0lHU1RPUCkgPCAwCi0jZW5kaWYgLyog TUlQUyAqLwotCSkgewkJCQkvKiBJZiBqb2IgY29udHJvbCwgc3VzcGVuZCB0aGUgam9iICovCi0J cGVycm9yKCJzdXNwZW5kIik7Ci0JZGVidWcoRjEwMSwicHN1c3BlbmQgZXJyb3IiLCIiLGVycm5v KTsKLQlyZXR1cm4oLTEpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAwLCJwc3VzcGVuZCBvayIsIiIs MCk7Ci0gICAgcmV0dXJuKDApOwotI2Vsc2UKLSAgICByZXR1cm4oLTEpOwotI2VuZGlmIC8qIFNJ R1RTVFAgKi8KLSNlbmRpZiAvKiBOT0pDICovCi19Ci0KLS8qCi0gIHNldHVpZCBwYWNrYWdlLCBi eSBLcmlzdG9mZmVyIEVyaWtzc29uLCB3aXRoIGNvbnRyaWJ1dGlvbnMgZnJvbSBEZWFuCi0gIExv bmcgYW5kIGZkYy4KLSovCi0KLS8qIFRoZSBmb2xsb3dpbmcgaXMgZm9yIFNDTyB3aGVuIENLX0FO U0lMSUJTIGlzIGRlZmluZWQuLi4gKi8KLSNpZmRlZiBNX1VOSVgKLSNpZmRlZiBDS19BTlNJTElC UwotI2lmbmRlZiBOT0dFVElEX1BST1RPUwotI2RlZmluZSBOT0dFVElEX1BST1RPUwotI2VuZGlm IC8qIE5PR0VUSURfUFJPVE9TICovCi0jZW5kaWYgLyogQ0tfQU5TSUxJQlMgKi8KLSNlbmRpZiAv KiBNX1VOSVggKi8KLQotI2lmbmRlZiBfUE9TSVhfU09VUkNFCi0jaWZuZGVmIFNVTk9TNAotI2lm bmRlZiBORVhUCi0jaWZuZGVmIFBTMkFJWDEwCi0jaWZuZGVmIHNlcXVlbnQKLSNpZm5kZWYgSFBV WDkKLSNpZm5kZWYgSFBVWDEwCi0jaWZuZGVmIENPSEVSRU5UCi0jaWZuZGVmIE5PR0VUSURfUFJP VE9TCi1fUFJPVE9UWVAoIFVJRF9UIGdldHVpZCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIFVJRF9U IGdldGV1aWQsICh2b2lkKSApOwotX1BST1RPVFlQKCBVSURfVCBnZXRyZXVpZCwgKHZvaWQpICk7 Ci1fUFJPVE9UWVAoIFVJRF9UIGdldGdpZCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIFVJRF9UIGdl dGVnaWQsICh2b2lkKSApOwotX1BST1RPVFlQKCBVSURfVCBnZXRyZWdpZCwgKHZvaWQpICk7Ci0j ZW5kaWYgLyogTk9HRVRJRF9QUk9UT1MgKi8KLSNlbHNlCi1fUFJPVE9UWVAoIFVJRF9UIGdldHJl dWlkLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggVUlEX1QgZ2V0cmVnaWQsICh2b2lkKSApOwotI2Vu ZGlmIC8qIENPSEVSRU5UICovCi0jZW5kaWYgLyogSFBVWDEwICovCi0jZW5kaWYgLyogSFBVWDkg Ki8KLSNlbmRpZiAvKiBzZXF1ZW50ICovCi0jZW5kaWYgLyogUFMyQUlYMTAgKi8KLSNlbmRpZiAv KiBORVhUICovCi0jZW5kaWYgLyogU1VOT1M0ICovCi0jZW5kaWYgLyogX1BPU0lYX1NPVVJDRSAq LwotCi0vKgotU3ViamVjdDogU2V0LXVzZXItaWQKLVRvOiBmZGNAd2F0c3VuLmNjLmNvbHVtYmlh LmVkdSAoRnJhbmsgZGEgQ3J1eikKLURhdGU6IFNhdCwgMjEgQXByIDkwIDQ6NDg6MjUgTUVTCi1G cm9tOiBLcmlzdG9mZmVyIEVyaWtzc29uIDxza2VAcGttYWIuc2U+Ci0KLVRoaXMgaXMgYSBzZXQg b2YgZnVuY3Rpb25zIHRvIGJlIHVzZWQgaW4gcHJvZ3JhbXMgdGhhdCBtYXkgYmUgcnVuIHNldC11 c2VyLWlkCi1hbmQvb3Igc2V0LWdyb3VwLWlkLiBUaGV5IGhhbmRsZSBib3RoIHRoZSBjYXNlIHdo ZXJlIHRoZSBwcm9ncmFtIGlzIG5vdCBydW4KLXdpdGggc3VjaCBwcml2aWxlZ2VzIChub3RoaW5n IHNwZWNpYWwgaGFwcGVucyB0aGVuKSwgYW5kIHRoZSBjYXNlIHdoZXJlIG9uZQotb3IgYm90aCBv ZiB0aGVzZSBzZXQtaWQgbW9kZXMgYXJlIHVzZWQuICBUaGUgcHJvZ3JhbSBpcyBtYWRlIHRvIHJ1 biB3aXRoIHRoZQotdXNlcidzIHJlYWwgdXNlciBhbmQgZ3JvdXAgaWRzIG1vc3Qgb2YgdGhlIHRp bWUsIGV4Y2VwdCBmb3Igd2hlbiBtb3JlCi1wcml2aWxlZ2VzIGFyZSBuZWVkZWQuICBEb24ndCBz ZXQtdXNlci1pZCB0byAicm9vdCIuCi0KLVRoaXMgd29ya3Mgb24gU3lzdGVtIFYgYW5kIFBPU0lY LiAgSW4gQlNELCBpdCBkZXBlbmRzIG9uIHRoZQotInNhdmVkLXNldC11c2VyLWlkIiBmZWF0dXJl LgotKi8KLQotI2RlZmluZSBVSURfUk9PVCAwCQkJLyogUm9vdCB1c2VyIGFuZCBncm91cCBpZHMg Ki8KLSNkZWZpbmUgR0lEX1JPT1QgMAotCi0vKgotICBUaGUgZm9sbG93aW5nIGNvZGUgZGVmaW5l cyB0aGUgc3ltYm9sIFNFVEVVSUQgZm9yIFVOSVggc3lzdGVtcyBiYXNlZAotICBvbiBCU0Q0LjQg KGVpdGhlciAtRW5jdW1iZXJlZCBvciAtTGl0ZSkuICBUaGlzIHByb2dyYW0gd2lsbCB0aGVuIHVz ZQotICBzZXRldWlkKCkgYW5kIHNldGVnaWQoKSBpbnN0ZWFkIG9mIHNldHVpZCgpIGFuZCBzZXRn aWQoKSwgd2hpY2ggc3RpbGwKLSAgZG9uJ3QgYWxsb3cgYXJiaXRyYXJ5IHN3aXRjaGluZy4gIEl0 IGFsc28gYXZvaWRzIHNldHJldWlkKCkgYW5kCi0gIHNldHJlZ2lkKCksIHdoaWNoIGFyZSBpbmNs dWRlZCBpbiBCU0Q0LjQgZm9yIGNvbXBhdGliaWxpdHkgb25seSwgYXJlCi0gIGluc2VjdXJlLCBh bmQgcHJpbnQgd2FybmluZ3MgdG8gc3RkZXJyIHVuZGVyIGF0IGxlYXN0IG9uZSBzeXN0ZW0gKE5l dEJTRAotICAxLjApLiAgTm90ZSB0aGF0IFBPU0lYIHN5c3RlbXMgc2hvdWxkIHN0aWxsIHVzZSBz ZXR1aWQoKSBhbmQgc2V0Z2lkKCk7Ci0gIHRoZSBzZXRldWlkKCkgYW5kIHNldGVnaWQoKSBmdW5j dGlvbnMgYXJlIEJTRDQuNCBleHRlbnNpb25zIHRvIHRoZQotICBQT1NJWCBtb2RlbC4gIE1pa2Ug TG9uZyA8bWlrZS5sb25nQGFuYWxvZy5jb20+LCA4Lzk0LgotKi8KLSNpZmRlZiBCU0Q0NAotI2Rl ZmluZSBTRVRFVUlECi0jZW5kaWYgLyogQlNENDQgKi8KLQotLyoKLSAgVGhlIGZvbGxvd2luZyBj b25zdHJ1Y3Rpb24gYXV0b21hdGljYWxseSBkZWZpbmVzIHRoZSBzeW1ib2wgU0VUUkVVSUQgZm9y Ci0gIFVOSVggdmVyc2lvbnMgYmFzZWQgb24gQmVya2VsZXkgVW5peCA0LjIgYW5kIDQuMy4gIElm IHRoaXMgc3ltYm9sIGlzCi0gIGRlZmluZWQsIHRoZW4gdGhpcyBwcm9ncmFtIHdpbGwgdXNlIGdl dHJldWlkKCkgYW5kIGdldHJlZ2lkKCkgY2FsbHMgaW4KLSAgcHJlZmVyZW5jZSB0byBnZXR1aWQo KSBhbmQgZ2V0Z2lkKCksIHdoaWNoIGluIEJlcmtlbGV5LWJhc2VkIFVuaXhlcyBkbwotICBub3Qg YWxsb3cgYXJiaXRyYXJ5IHN3aXRjaGluZyBiYWNrIGFuZCBmb3J0aCBvZiByZWFsICYgZWZmZWN0 aXZlIHVpZC4KLSAgVGhpcyBjb25zdHJ1Y3Rpb24gYWxzbyBhbGxvd3MgLURTRVRSRVVJRCB0byBi ZSBwdXQgb24gdGhlIGNjIGNvbW1hbmQgbGluZQotICBmb3IgYW55IHN5c3RlbSB0aGF0IGhhcyBh bmQgd2FudHMgdG8gdXNlIHNldHJlW3VnXWlkKCkuICBJdCBhbHNvIHByZXZlbnRzCi0gIGF1dG9t YXRpYyBkZWZpbml0aW9uIG9mIFNFVFJFVUlEIGlmIC1ETk9TRVRSRVUgaXMgaW5jbHVkZWQgb24g dGhlIGNjCi0gIGNvbW1hbmQgbGluZSAob3Igb3RoZXJ3aXNlIGRlZmluZWQpLgotKi8KLSNpZmRl ZiBGVDE4CQkJCS8qIE5vbmUgb2YgdGhpcyBmb3IgRm9ydHVuZS4gKi8KLSNkZWZpbmUgTk9TRVRS RVUKLSNlbmRpZiAvKiBGVDE4ICovCi0KLSNpZmRlZiBBTllCU0QKLSNpZm5kZWYgQlNEMjkKLSNp Zm5kZWYgQlNENDEKLSNpZm5kZWYgU0VUUkVVSUQKLSNpZm5kZWYgTk9TRVRSRVUKLSNpZm5kZWYg U0VURVVJRAotI2RlZmluZSBTRVRSRVVJRAotI2VuZGlmIC8qIFNFVEVVSUQgKi8KLSNlbmRpZiAv KiBOT1NFVFJFVSAqLwotI2VuZGlmIC8qIFNFVFJFVUlEICovCi0jZW5kaWYgLyogIUJTRDQxICov Ci0jZW5kaWYgLyogIUJTRDI5ICovCi0jZW5kaWYgLyogQU5ZQlNEICovCi0KLS8qIFZhcmlhYmxl cyBmb3IgdXNlciBhbmQgZ3JvdXAgSURzLiAqLwotCi1zdGF0aWMgVUlEX1QgcmVhbHVpZCA9IChV SURfVCkgLTEsIHByaXZ1aWQgPSAoVUlEX1QpIC0xOwotc3RhdGljIEdJRF9UIHJlYWxnaWQgPSAo R0lEX1QpIC0xLCBwcml2Z2lkID0gKEdJRF9UKSAtMTsKLQotCi0vKiBQIFIgSSBWIF8gSSBOIEkg IC0tICBJbml0aWFsaXplIHByaXZpbGVnZXMgcGFja2FnZSAgKi8KLQotLyogQ2FsbGVkIGFzIGVh cmx5IGFzIHBvc3NpYmxlIGluIGEgc2V0LXVpZCBvciBzZXQtZ2lkIHByb2dyYW0gdG8gc3RvcmUg dGhlCi0gKiBzZXQtdG8gdWlkIGFuZC9vciBnaWQgYW5kIHN0ZXAgZG93biB0byB0aGUgdXNlcnMg cmVhbCB1aWQgYW5kIGdpZC4gVGhlCi0gKiBzdG9yZWQgaWQncyBjYW4gYmUgdGVtcG9yYXJpbHkg cmVzdG9yZWQgKGFsbG93ZWQgaW4gU3lzdGVtIFYpIGR1cmluZwotICogb3BlcmF0aW9ucyB0aGF0 IHJlcXVpcmUgdGhlIHByaXZpbGVnZS4gIE1vc3Qgb2YgdGhlIHRpbWUsIHRoZSBwcm9ncmFtCi0g KiBzaG91bGQgZXhlY3V0ZSBpbiB1bnByaXZpbGlnZWQgc3RhdGUsIHRvIG5vdCBpbXBvc2UgYW55 IHNlY3VyaXR5IHRocmVhdC4KLSAqCi0gKiBOb3RlOiBEb24ndCBmb3JnZXQgdGhhdCBhY2Nlc3Mo KSBhbHdheXMgdXNlcyB0aGUgcmVhbCBpZDpzIHRvIGRldGVybWluZQotICogZmlsZSBhY2Nlc3Ms IGV2ZW4gd2l0aCBwcml2aWxlZ2VzIHJlc3RvcmVkLgotICoKLSAqIFJldHVybnMgYW4gZXJyb3Ig bWFzaywgd2l0aCBlcnJvciB2YWx1ZXMgb3I6ZWQgdG9nZXRoZXI6Ci0gKiAgIDEgaWYgc2V0dWlk KCkgZmFpbHMsCi0gKiAgIDIgaWYgc2V0Z2lkKCkgZmFpbHMsIGFuZAotICogICA0IGlmIHRoZSBw cm9ncmFtIGlzIHNldC11c2VyLWlkIHRvICJyb290Iiwgd2hpY2ggY2FuJ3QgYmUgaGFuZGxlZC4K LSAqCi0gKiBPbmx5IHRoZSByZXR1cm4gdmFsdWUgMCBpbmRpY2F0ZXMgcmVhbCBzdWNjZXNzLiBJ biBjYXNlIG9mIGZhaWx1cmUsCi0gKiB0aG9zZSBwcml2aWxlZ2VzIHRoYXQgY291bGQgYmUgcmVk dWNlZCBoYXZlIGJlZW4sIGF0IGxlYXN0LCBidXQgdGhlCi0gKiBwcm9ncmFtIHNob3VsZCBiZSBh Ym9ydGVkIG5vbmUtdGhlLWxlc3MuCi0gKgotICogQWxzbyBub3RlIHRoYXQgdGhlc2UgZnVuY3Rp b25zIGRvIG5vdCBleHBlY3QgdGhlIHVpZCBvciBnaWQgdG8gY2hhbmdlCi0gKiB3aXRob3V0IHRo ZWlyIGtub3dpbmcuIEl0IG1heSB3b3JrIGlmIGl0IGlzIG9ubHkgZG9uZSB0ZW1wb3JhcmlseSwg YnV0Ci0gKiB5b3UncmUgb24geW91ciBvd24uCi0gKi8KLWludAotcHJpdl9pbmkoKSB7Ci0gICAg aW50IGVyciA9IDA7Ci0KLSNpZm5kZWYgSEFWRV9MT0NLREVWCi0KLSAgICAvKiBTYXZlIHJlYWwg SUQ6cy4gKi8KLSAgICByZWFsdWlkID0gZ2V0dWlkKCk7Ci0gICAgcmVhbGdpZCA9IGdldGdpZCgp OwotCi0gICAgLyogU2F2ZSBjdXJyZW50IGVmZmVjdGl2ZSBJRDpzLCB0aG9zZSBzZXQgdG8gYXQg cHJvZ3JhbSBleGVjLiAqLwotICAgIHByaXZ1aWQgPSBnZXRldWlkKCk7Ci0gICAgcHJpdmdpZCA9 IGdldGVnaWQoKTsKLQotICAgIC8qIElmIHJ1bm5pbmcgc2V0LXVpZCwgZ28gZG93biB0byByZWFs IHVpZCwgb3RoZXJ3aXNlIHJlbWVtYmVyIHRoYXQKLSAgICAgKiBubyBwcml2aWxlZ2VkIHVpZCBp cyBhdmFpbGFibGUuCi0gICAgICoKLSAgICAgKiBFeGNlcHRpb25zOgotICAgICAqCi0gICAgICog MSkgSWYgdGhlIHJlYWwgdWlkIGlzIGFscmVhZHkgInJvb3QiIGFuZCB0aGUgc2V0LXVpZCB1aWQg KHRoZQotICAgICAqIGluaXRpYWwgZWZmZWN0aXZlIHVpZCkgaXMgbm90ICJyb290IiwgdGhlbiB3 ZSB3b3VsZCBoYXZlIHRyb3VibGUKLSAgICAgKiBpZiB3ZSB3ZW50ICJkb3duIiB0byAicm9vdCIg aGVyZSwgYW5kIHRoZW4gdGVtcG9yYXJpbHkgYmFjayB0byB0aGUKLSAgICAgKiBzZXQtdWlkIHVp ZCAobm90ICJyb290IikgYW5kIHRoZW4gYWdhaW4gdHJpZWQgdG8gYmVjb21lICJyb290Ii4gSQot ICAgICAqIHRoaW5rIHRoZSAic2F2ZWQgc2V0LXVpZCIgaXMgbG9zdCB3aGVuIGNoYW5naW5nIHVp ZCBmcm9tIGVmZmVjdGl2ZQotICAgICAqIHVpZCAicm9vdCIsIHdoaWNoIGNoYW5nZXMgYWxsIHVp ZCwgbm90IG9ubHkgdGhlIGVmZmVjdGl2ZSB1aWQuIEJ1dAotICAgICAqIGluIHRoaXMgc2l0dWF0 aW9uLCB3ZSBjYW4gc2ltcGx5IGdvIHRvICJyb290IiBhbmQgc3RheSB0aGVyZSBhbGwKLSAgICAg KiB0aGUgdGltZS4gVGhhdCBzaG91bGQgZ2l2ZSBzdWZmaWNpZW50IHByaXZpbGVnZSAodW5kZXJz dGF0ZW1lbnQhKSwKLSAgICAgKiBhbmQgZ2l2ZSB0aGUgcmlnaHQgdWlkcyBmb3Igc3VicHJvY2Vz c2VzLgotICAgICAqCi0gICAgICogMikgSWYgdGhlIHNldC11aWQgKHRoZSBpbml0aWFsIGVmZmVj dGl2ZSB1aWQpIGlzICJyb290IiwgYW5kIHdlCi0gICAgICogY2hhbmdlIHVpZCB0byB0aGUgcmVh bCB1aWQsIHdlIGNhbid0IGNoYW5nZSBpdCBiYWNrIHRvICJyb290IiB3aGVuCi0gICAgICogd2Ug bmVlZCB0aGUgcHJpdmlsZWdlLCBmb3IgdGhlIHNhbWUgcmVhc29uIGFzIGluIDEpLiBUaHVzLCB3 ZSBjYW4ndAotICAgICAqIGhhbmRsZSBwcm9ncmFtcyB0aGF0IGFyZSBzZXQtdXNlci1pZCB0byAi cm9vdCIgYXQgYWxsLiBUaGUgcHJvZ3JhbQotICAgICAqIHNob3VsZCBiZSBzdG9wcGVkLiAgVXNl IHNvbWUgb3RoZXIgdWlkLiAgInJvb3QiIGlzIHByb2JhYmx5IHRvbwotICAgICAqIHByaXZpbGVn ZWQgZm9yIHN1Y2ggdGhpbmdzLCBhbnl3YXkuIChUaGUgdWlkIGlzIHJldmVydGVkIHRvIHRoZQot ICAgICAqIHJlYWwgdWlkIHVudGlsIHRlcm1pbmF0aW9uLikKLSAgICAgKgotICAgICAqIFRoZXNl IHR3byBleGNlcHRpb25zIGhhdmUgdGhlIGVmZmVjdCB0aGF0IHRoZSAicm9vdCIgdWlkIHdpbGwg bmV2ZXIKLSAgICAgKiBiZSBvbmUgb2YgdGhlIHR3byB1aWRzIHRoYXQgYXJlIGJlaW5nIHN3aXRj aGVkIGJldHdlZW4sIHdoaWNoIGFsc28KLSAgICAgKiBtZWFucyB3ZSBkb24ndCBoYXZlIHRvIGNo ZWNrIGZvciBzdWNoIGNhc2VzIGluIHRoZSBzd2l0Y2hpbmcKLSAgICAgKiBmdW5jdGlvbnMuCi0g ICAgICoKLSAgICAgKiBOb3RlIHRoYXQgZXhjZXB0aW9uIDEpIGlzIGhhbmRsZWQgYnkgdGhlc2Ug cm91dGluZXMgKGJ5IGNvbnN0YW50bHkKLSAgICAgKiBydW5uaW5nIHdpdGggdWlkICJyb290Iiwg d2hpbGUgZXhjZXB0aW9uIDIpIGlzIGEgc2VyaW91cyBlcnJvciwgYW5kCi0gICAgICogaXMgbm90 IHByb3ZpZGVkIGZvciBhdCBhbGwgaW4gdGhlIHN3aXRjaGluZyBmdW5jdGlvbnMuCi0gICAgICov Ci0gICAgaWYgKHJlYWx1aWQgPT0gcHJpdnVpZCkKLQlwcml2dWlkID0gKFVJRF9UKSAtMTsJCS8q IE5vdCBydW5uaW5nIHNldC11c2VyLWlkLiAqLwotCi0gICAgLyogSWYgcnVubmluZyBzZXQtZ2lk LCBnbyBkb3duIHRvIHJlYWwgZ2lkLCBvdGhlcndpc2UgcmVtZW1iZXIgdGhhdAotICAgICAqIG5v IHByaXZpbGVnZWQgZ2lkIGlzIGF2YWlsYWJsZS4KLSAgICAgKgotICAgICAqIFRoZXJlIGFyZSBu byBleGNlcHRpb24gbGlrZSB0aGVyZSBpcyBmb3IgdGhlIHVzZXIgaWQsIHNpbmNlIHRoZXJlCi0g ICAgICogaXMgbm8gZ3JvdXAgaWQgdGhhdCBpcyBwcml2aWxlZ2VkIGluIHRoZSBtYW5uZXIgb2Yg dWlkICJyb290Ii4KLSAgICAgKiBUaGVyZSBjb3VsZCBiZSBlcXVpdmFsZW50IHByb2JsZW1zIGZv ciBncm91cCBjaGFuZ2luZyBpZiB0aGUKLSAgICAgKiBwcm9ncmFtIHNvbWV0aW1lcyByYW4gd2l0 aCB1aWQgInJvb3QiIGFuZCBzb21ldGltZXMgbm90LCBidXQKLSAgICAgKiB0aGF0IGlzIGFscmVh ZHkgYXZvaWRlZCBhcyBleHBsYWluZWQgYWJvdmUuCi0gICAgICoKLSAgICAgKiBUaHVzIHdlIGNh biBleHBlY3QgYWx3YXlzIHRvIGJlIGFibGUgdG8gc3dpdGNoIHRvIHRoZSAic2F2ZWQgc2V0LQot ICAgICAqIGdpZCIgd2hlbiB3ZSB3YW50LCBhbmQgYmFjayB0byB0aGUgcmVhbCBnaWQgYWdhaW4u IFlvdSBtYXkgYWxzbwotICAgICAqIGRyYXcgdGhlIGNvbmNsdXNpb24gdGhhdCBzZXQtZ2lkIHBy b3ZpZGVzIGZvciBmZXdlciBoYXNzbGVzIHRoYW4KLSAgICAgKiBzZXQtdWlkLgotICAgICAqLwot Ci0jaWZkZWYgU1VJRERFQlVHCi0gICAgZnByaW50ZihzdGRlcnIsIlVJRF9ST09UPSVkXG4iLFVJ RF9ST09UKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwicmVhbHVpZD0lZFxuIixyZWFsdWlkKTsKLSAg ICBmcHJpbnRmKHN0ZGVyciwicHJpdnVpZD0lZFxuIixwcml2dWlkKTsKLSNlbmRpZiAvKiBTVUlE REVCVUcgKi8KLQotICAgIGlmIChyZWFsZ2lkID09IHByaXZnaWQpCQkvKiBJZiBub3QgcnVubmlu ZyBzZXQtdXNlci1pZCwgKi8KLSAgICAgIHByaXZnaWQgPSAoR0lEX1QpIC0xOwkJLyogIHJlbWVt YmVyIGl0IHRoaXMgd2F5LiAqLwotCi0gICAgZXJyID0gcHJpdl9vZmYoKTsJCQkvKiBUdXJuIG9m ZiBzZXR1aWQgcHJpdmlsZWdlLiAqLwotCi0gICAgaWYgKHByaXZ1aWQgPT0gVUlEX1JPT1QpCQkv KiBJZiBzZXR1aWQgdG8gcm9vdCwgKi8KLSAgICAgIGVyciB8PSA0OwkJCQkvKiByZXR1cm4gdGhp cyBlcnJvci4gKi8KLQotICAgIGlmIChyZWFsdWlkID09IFVJRF9ST09UKSB7CQkvKiBJZiByZWFs IGlkIGlzIHJvb3QsICovCi0JcHJpdnVpZCA9IChVSURfVCkgLTE7CQkvKiBzdGF5IHJvb3QgYXQg YWxsIHRpbWVzLiAqLwotI2lmZGVmIEFUVDczMDAKLQkvKiBJZiBLZXJtaXQgaW5zdGFsbGVkIFNV SUQgdXVjcCBhbmQgdXNlciBpcyBydW5uaW5nIGFzIHJvb3QgKi8KLQllcnIgJj0gfjE7CQkJLyog U3lzdGVtIFYgUjAgZG9lcyBub3Qgc2F2ZSBVSUQgKi8KLSNlbmRpZiAvKiBBVFQ3MzAwICovCi0g ICAgfQotI2VuZGlmIC8qIEhBVkVfTE9DS0RFViAqLwotICAgIHJldHVybihlcnIpOwotfQotCi0K LS8qIE1hY3JvcyBmb3IgaGlkaW5nIHRoZSBkaWZmZXJlbmNlcyBpbiBVSUQvR0lEIHNldHRpbmcg YmV0d2VlbiB2YXJpb3VzIFVuaXgKLSAqIHN5c3RlbXMuIFRoZXNlIG1hY3JvcyBzaG91bGQgYWx3 YXlzIGJlIGNhbGxlZCB3aXRoIGJvdGggdGhlIHByaXZpbGVnZWQgSUQKLSAqIGFuZCB0aGUgbm9u LXByaXZpbGVnZWQgSUQuIFRoZSBvbmUgaW4gdGhlIHNlY29uZCBhcmd1bWVudCwgd2lsbCBiZWNv bWUgdGhlCi0gKiBlZmZlY3RpdmUgSUQuIFRoZSBvbmUgaW4gdGhlIGZpcnN0IGFyZ3VtZW50IHdp bGwgYmUgcmV0YWluZWQgZm9yIGxhdGVyCi0gKiByZXRyaWV2YWwuCi0gKi8KLSNpZmRlZiBTRVRS RVVJRAotI2lmZGVmIFNBVkVEVUlECi0vKiBPbiBCU0Qgc3lzdGVtcyB3aXRoIHRoZSBzYXZlZC1V SUQgZmVhdHVyZSwgd2UganVzdCBqdWdnbGUgdGhlIGVmZmVjdGl2ZQotICogVUlEIGJhY2sgYW5k IGZvcnRoLCBhbmQgbGVhdmUgdGhlIHJlYWwgVUlEIGF0IGl0cyB0cnVlIHZhbHVlLiAgVGhlIGtl cm5lbAotICogYWxsb3dzIHN3aXRjaGluZyB0byBib3RoIHRoZSBjdXJyZW50IHJlYWwgVUlELCB0 aGUgZWZmZWN0aXZlIFVJRCwgYW5kIHRoZQotICogVUlEIHdoaWNoIHRoZSBwcm9ncmFtIGlzIHNl dC1VSUQgdG8uICBUaGUgc2F2ZWQgc2V0LVVJRCBhbHdheXMgaG9sZHMgdGhlCi0gKiBwcml2aWxl Z2VkIFVJRCBmb3IgdXMsIGFuZCB0aGUgcmVhbCBVSUQgd2lsbCBhbHdheXMgYmUgdGhlIG5vbi1w cml2aWxlZ2VkLAotICogYW5kIHdlIGNhbiBmcmVlbHkgY2hvb3NlIG9uZSBvZiB0aGVtIGZvciB0 aGUgZWZmZWN0aXZlIFVJRCBhdCBhbnkgdGltZS4KLSAqLwotI2RlZmluZSBzd2l0Y2h1aWQoaGlk ZGVuLGFjdGl2ZSkgc2V0cmV1aWQoIChVSURfVCkgLTEsIGFjdGl2ZSkKLSNkZWZpbmUgc3dpdGNo Z2lkKGhpZGRlbixhY3RpdmUpIHNldHJlZ2lkKCAoR0lEX1QpIC0xLCBhY3RpdmUpCi0KLSNlbHNl ICAgLyogU0VUUkVVSUQsIVNBVkVEVUlEICovCi0KLS8qIE9uIHN5c3RlbXMgd2l0aCBzZXRyZVhp ZCgpIGJ1dCB3aXRob3V0IHRoZSBzYXZlZC1VSUQgZmVhdHVyZSwgbm90YWJseQotICogQlNEIDQu Miwgd2Ugc3dhcCB0aGUgcmVhbCBhbmQgZWZmZWN0aXZlIFVJRHMgZWFjaCB0aW1lLiAgSXQncwot ICogdGhlIGVmZmVjdGl2ZSBVSUQgdGhhdCB3ZSBhcmUgaW50ZXJlc3RlZCBpbiwgYnV0IHdlIGhh dmUgdG8gcmV0YWluIHRoZQotICogdW51c2VkIFVJRCBzb21ld2hlcmUgdG8gZW5hYmxlIHVzIHRv IHJlc3RvcmUgaXQgbGF0ZXIsIGFuZCB3ZSBkbyB0aGlzCi0gKiBpbiB0aGUgcmVhbCBVSUQuICBU aGUga2VybmVsIG9ubHkgYWxsb3dzIHN3aXRjaGluZyB0byBlaXRoZXIgdGhlIGN1cnJlbnQKLSAq IHJlYWwgb3IgdGhlIGVmZmVjdGl2ZSBVSUQsIHVubGVzcyB5b3UncmUgInJvb3QiLgotICovCi0j ZGVmaW5lIHN3aXRjaHVpZChoaWRkZW4sYWN0aXZlKQlzZXRyZXVpZChoaWRkZW4sYWN0aXZlKQot I2RlZmluZSBzd2l0Y2hnaWQoaGlkZGVuLGFjdGl2ZSkJc2V0cmVnaWQoaGlkZGVuLGFjdGl2ZSkK LSNlbmRpZgotCi0jZWxzZSAvKiAhU0VUUkVVSUQsICFTQVZFRFVJRCAqLwotCi0jaWZkZWYgU0VU RVVJRAotLyoKLSAgQlNEIDQuNCB3b3JrcyBzaW1pbGFybHkgdG8gU3lzdGVtIFYgYW5kIFBPU0lY IChzZWUgYmVsb3cpLCBidXQgdXNlcwotICBzZXRlWGlkKCkgaW5zdGVhZCBvZiBzZXRYaWQoKSB0 byBjaGFuZ2UgZWZmZWN0aXZlIElEcy4gIEluIGFkZGl0aW9uLCB0aGUKLSAgc2V0ZVhpZCgpIGZ1 bmN0aW9ucyB3b3JrIHRoZSBzYW1lIGZvciAicm9vdCIgYXMgZm9yIG90aGVyIHVzZXJzLgotKi8K LSNkZWZpbmUgc3dpdGNodWlkKGhpZGRlbixhY3RpdmUpCXNldGV1aWQoYWN0aXZlKQotI2RlZmlu ZSBzd2l0Y2hnaWQoaGlkZGVuLGFjdGl2ZSkJc2V0ZWdpZChhY3RpdmUpCi0KLSNlbHNlIC8qICFT RVRFVUlEICovCi0KLS8qIE9uIFN5c3RlbSBWIGFuZCBQT1NJWCwgdGhlIG9ubHkgdGhpbmcgd2Ug Y2FuIGNoYW5nZSBpcyB0aGUgZWZmZWN0aXZlIFVJRAotICogKHVubGVzcyB0aGUgY3VycmVudCBl ZmZlY3RpdmUgVUlEIGlzICJyb290IiwgYnV0IGluaXRzdWlkKCkgYXZvaWRzIHRoYXQgZm9yCi0g KiB1cykuICBUaGUga2VybmVsIGFsbG93cyBzd2l0Y2hpbmcgdG8gdGhlIGN1cnJlbnQgcmVhbCBV SUQgb3IgdG8gdGhlIHNhdmVkCi0gKiBzZXQtVUlELiAgVGhlc2UgYXJlIGFsd2F5cyBzZXQgdG8g dGhlIG5vbi1wcml2aWxlZ2VkIFVJRCBhbmQgdGhlIHByaXZpbGVnZWQKLSAqIFVJRCwgcmVzcGVj dGl2ZWx5LCBhbmQgd2Ugb25seSBjaGFuZ2UgdGhlIGVmZmVjdGl2ZSBVSUQuICBUaGlzIGJyZWFr cyBpZgotICogdGhlIGN1cnJlbnQgZWZmZWN0aXZlIFVJRCBpcyAicm9vdCIsIHRob3VnaCwgYmVj YXVzZSBmb3IgInJvb3QiIHNldHVpZC9naWQKLSAqIGJlY29tZXMgbW9yZSBwb3dlcmZ1bCwgd2hp Y2ggaXMgd2h5IGluaXRzdWlkKCkgdHJlYXRzICJyb290IiBzcGVjaWFsbHkuCi0gKiBOb3RlOiBU aGF0IHNwZWNpYWwgdHJlYXRtZW50IG1heWJlIGNvdWxkIGJlIGlnbm9yZWQgZm9yIEJTRD8gIE5v dGU6IEZvcgotICogc3lzdGVtcyB0aGF0IGRvbid0IGZpdCBhbnkgb2YgdGhlc2UgZm91ciBjYXNl cywgd2Ugc2ltcGx5IGNhbid0IHN1cHBvcnQKLSAqIHNldC1VSUQuCi0gKi8KLSNkZWZpbmUgc3dp dGNodWlkKGhpZGRlbixhY3RpdmUpCXNldHVpZChhY3RpdmUpCi0jZGVmaW5lIHN3aXRjaGdpZCho aWRkZW4sYWN0aXZlKQlzZXRnaWQoYWN0aXZlKQotCi0jZW5kaWYgLyogU0VURVVJRCAqLwotI2Vu ZGlmIC8qIFNFVFJFVUlEICovCi0KLQotLyogUCBSIEkgViBfIE8gTiAgLS0gIFR1cm4gb24gdGhl IHNldHVpZCBhbmQvb3Igc2V0Z2lkICovCi0KLS8qIEdvIHRvIHRoZSBwcml2aWxlZ2VkIHVpZCAo Z2lkKSB0aGF0IHRoZSBwcm9ncmFtIGlzIHNldC11c2VyLWlkCi0gKiAoc2V0LWdyb3VwLWlkKSB0 bywgdW5sZXNzIHRoZSBwcm9ncmFtIGlzIHJ1bm5pbmcgdW5wcml2aWxlZ2VkLgotICogSWYgc2V0 dWlkKCkgZmFpbHMsIHJldHVybiB2YWx1ZSB3aWxsIGJlIDEuIElmIGdldHVpZCgpIGZhaWxzIGl0 Ci0gKiB3aWxsIGJlIDIuICBSZXR1cm4gaW1tZWRpYXRlbHkgYWZ0ZXIgZmlyc3QgZmFpbHVyZSwg YW5kIHRoZSBmdW5jdGlvbgotICogdHJpZXMgdG8gcmVzdG9yZSBhbnkgcGFydGlhbCB3b3JrIGRv bmUuICBSZXR1cm5zIDAgb24gc3VjY2Vzcy4KLSAqIEdyb3VwIGlkIGlzIGNoYW5nZWQgZmlyc3Qs IHNpbmNlIGl0IGlzIGxlc3Mgc2VyaW91cyB0aGFuIHVzZXIgaWQuCi0gKi8KLWludAotcHJpdl9v bigpIHsKLSNpZm5kZWYgSEFWRV9MT0NLREVWCi0gICAgaWYgKHByaXZnaWQgIT0gKEdJRF9UKSAt MSkKLSAgICAgIGlmIChzd2l0Y2hnaWQocmVhbGdpZCxwcml2Z2lkKSkKLSAgICAgICAgcmV0dXJu KDIpOwotCi0gICAgaWYgKHByaXZ1aWQgIT0gKFVJRF9UKSAtMSkKLSAgICAgIGlmIChzd2l0Y2h1 aWQocmVhbHVpZCxwcml2dWlkKSkgewotCSAgaWYgKHByaXZnaWQgIT0gKEdJRF9UKSAtMSkKLQkg ICAgc3dpdGNoZ2lkKHByaXZnaWQscmVhbGdpZCk7Ci0JICByZXR1cm4oMSk7Ci0gICAgICB9Ci0j ZW5kaWYgLyogSEFWRV9MT0NLREVWICovCi0gICAgcmV0dXJuKDApOwotfQotCi0vKiBQIFIgSSBW IF8gTyBGIEYgIC0tICBUdXJuIG9uIHRoZSByZWFsIHVpZCBhbmQgZ2lkICovCi0KLS8qIFJldHVy biB0byB0aGUgdW5wcml2aWxlZ2VkIHVpZCAoZ2lkKSBhZnRlciBhbiB0ZW1wb3JhcnkgdmlzaXQg dG8KLSAqIHByaXZpbGVnZWQgc3RhdHVzLCB1bmxlc3MgdGhlIHByb2dyYW0gaXMgcnVubmluZyB3 aXRob3V0IHNldC11c2VyLWlkCi0gKiAoc2V0LWdyb3VwLWlkKS4gUmV0dXJucyAxIGZvciBmYWls dXJlIGluIHNldHVpZCgpIGFuZCAyIGZvciBmYWlsdXJlCi0gKiBpbiBzZXRnaWQoKSBvcjplZCB0 b2dldGhlci4gVGhlIGZ1bmN0aW9ucyB0cmllcyB0byByZXR1cm4gYm90aCB1aWQKLSAqIGFuZCBn aWQgdG8gdW5wcml2aWxlZ2VkIHN0YXRlLCByZWdhcmRsZXNzIG9mIGVycm9ycy4gUmV0dXJucyAw IG9uCi0gKiBzdWNjZXNzLgotICovCi1pbnQKLXByaXZfb2ZmKCkgewotICAgIGludCBlcnIgPSAw OwotI2lmbmRlZiBIQVZFX0xPQ0tERVYKLSAgICBpZiAocHJpdnVpZCAhPSAoVUlEX1QpIC0xKQot ICAgICAgIGlmIChzd2l0Y2h1aWQocHJpdnVpZCxyZWFsdWlkKSkKLQkgIGVyciB8PSAxOwotCi0g ICAgaWYgKHByaXZnaWQgIT0gKEdJRF9UKSAtMSkKLSAgICAgICBpZiAoc3dpdGNoZ2lkKHByaXZn aWQscmVhbGdpZCkpCi0JZXJyIHw9IDI7Ci0jZW5kaWYgLyogSEFWRV9MT0NLREVWICovCi0gICAg cmV0dXJuKGVycik7Ci19Ci0KLS8qIFR1cm4gb2ZmIHByaXZpbGVnZSBwZXJtYW5lbnRseS4gIE5v IGdvaW5nIGJhY2suICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWZvcmUKLSAqIGEgZm9yaygpIG9uIEJT RDQzIG1hY2hpbmVzIHRoYXQgZG9uJ3Qgc2F2ZSB0aGUgc2V0VUlEIG9yIHNldEdJRCwgYmVjYXVz ZQotICogd2Ugc3dhcCB0aGUgcmVhbCBhbmQgZWZmZWN0aXZlIGlkcywgYW5kIHdlIGRvbid0IHdh bnQgdG8gbGV0IHRoZSBmb3JrZWQKLSAqIHByb2Nlc3Mgc3dhcCB0aGVtIGFnYWluIGFuZCBnZXQg dGhlIHByaXZpbGVnZSBiYWNrLiBJdCB3aWxsIHdvcmsgb24gb3RoZXIKLSAqIG1hY2hpbmVzIHRv bywgc3VjaCB0aGF0IHlvdSBjYW4gcmVseSBvbiBpdHMgZWZmZWN0IGFsd2F5cyBiZWluZyB0aGUg c2FtZSwKLSAqIGZvciBpbnN0YW5jZSwgZXZlbiB3aGVuIHlvdSdyZSBpbiBwcml2X29uKCkgc3Rh dGUgd2hlbiB0aGlzIGlzIGNhbGxlZC4KLSAqIChXZWxsLCB0aGF0IHBhcnQgYWJvdXQgInBlcm1h bmVudCIgaXMgb24gU3lzdGVtIFYgb25seSB0cnVlIGlmIHlvdSBmb2xsb3cKLSAqIHRoaXMgd2l0 aCBhIGNhbGwgdG8gZXhlYygpLCBidXQgdGhhdCdzIHdoYXQgd2Ugd2FudCBpdCBmb3IgYW55d2F5 LikKLSAqIEFkZGVkIGJ5IERlYW4gTG9uZyAtLSBkbG9uZ0BtaWRnYXJkLnVjc2MuZWR1Ci0gKi8K LWludAotcHJpdl9jYW4oKSB7Ci0jaWZuZGVmIEhBVkVfTE9DS0RFVgotI2lmZGVmIFNFVFJFVUlE Ci0gICAgaW50IGVyciA9IDA7Ci0gICAgaWYgKHByaXZ1aWQgIT0gKFVJRF9UKSAtMSkKLSAgICAg ICBpZiAoc2V0cmV1aWQocmVhbHVpZCxyZWFsdWlkKSkKLQkgIGVyciB8PSAxOwotCi0gICAgaWYg KHByaXZnaWQgIT0gKEdJRF9UKSAtMSkKLSAgICAgICAgaWYgKHNldHJlZ2lkKHJlYWxnaWQscmVh bGdpZCkpCi0gCSAgZXJyIHw9IDI7Ci0KLSAgICByZXR1cm4oZXJyKTsKLQotI2Vsc2UKLSNpZmRl ZiBTRVRFVUlECi0gICAgaW50IGVyciA9IDA7Ci0gICAgaWYgKHByaXZ1aWQgIT0gKFVJRF9UKSAt MSkKLQlpZiAoc2V0dWlkKHJlYWx1aWQpKSB7Ci0JICAgIGRlYnVnKEYxMDEsInNldHVpZCBmYWls ZWQiLCIiLGVycm5vKTsKLQkgICAgZXJyIHw9IDE7Ci0JICAgIGRlYnVnKEYxMDEsInJ1aWQiLCIi LGdldHVpZCgpKTsKLQkgICAgZGVidWcoRjEwMSwiZXVpZCIsIiIsZ2V0ZXVpZCgpKTsKLQl9Ci0g ICAgZGVidWcoRjEwMSwic2V0dWlkIiwiIixyZWFsdWlkKTsKLSAgICBpZiAocHJpdmdpZCAhPSAo R0lEX1QpIC0xKQotICAgICAgICBpZiAoc2V0Z2lkKHJlYWxnaWQpKSB7Ci0JICAgIGRlYnVnKEYx MDEsInNldGdpZCBmYWlsZWQiLCIiLGVycm5vKTsKLQkgICAgZXJyIHw9IDI7Ci0JICAgIGRlYnVn KEYxMDEsInJnaWQiLCIiLGdldGdpZCgpKTsKLQkgICAgZGVidWcoRjEwMSwiZWdpZCIsIiIsZ2V0 ZWdpZCgpKTsKLQl9Ci0gICAgZGVidWcoRjEwMSwic2V0Z2lkIiwiIixyZWFsZ2lkKTsKLSAgICBy ZXR1cm4oZXJyKTsKLSNlbHNlCi0gICAgLyogRWFzeSB3YXkgb2YgdXNpbmcgc2V0dWlkKCkvc2V0 Z2lkKCkgaW5zdGVhZCBvZiBzZXRyZXVpZCgpL3NldHJlZ2lkKCkuKi8KLSAgICByZXR1cm4ocHJp dl9vZmYoKSk7Ci0jZW5kaWYgLyogU0VURVVJRCAqLwotI2VuZGlmIC8qIFNFVFJFVUlEICovCi0j ZWxzZQotICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBIQVZFX0xPQ0tERVYgKi8KLX0KLQotLyog UCBSIEkgViBfIE8gUCBOICAtLSAgRm9yIG9wZW5pbmcgcHJvdGVjdGVkIGZpbGVzIG9yIGRldmlj ZXMuICovCi0KLWludAotcHJpdl9vcG4obmFtZSwgbW9kZXMpIGNoYXIgKm5hbWU7IGludCBtb2Rl czsgewotICAgIGludCB4OwotICAgIHByaXZfb24oKTsJCQkJLyogVHVybiBwcml2aWxlZ2VzIG9u ICovCi0gICAgZGVidWcoRjExMSwicHJpdl9vcG4iLG5hbWUsbW9kZXMpOwotICAgIGVycm5vID0g MDsKLSAgICB4ID0gb3BlbihuYW1lLCBtb2Rlcyk7CQkvKiBUcnkgdG8gb3BlbiB0aGUgZGV2aWNl ICovCi0gICAgZGVidWcoRjEwMSwicHJpdl9vcG4gcmVzdWx0IiwiIix4KTsKLSAgICBkZWJ1ZyhG MTAxLCJwcml2X29wbiBlcnJubyIsIiIsZXJybm8pOwotICAgIHByaXZfb2ZmKCk7CQkJCS8qIFR1 cm4gcHJpdmlsZWdlcyBvZmYgKi8KLSAgICByZXR1cm4oeCk7CQkJCS8qIFJldHVybiBvcGVuJ3Mg cmV0dXJuIGNvZGUgKi8KLX0KLQotLyogIFAgUiBJIFYgXyBDIEggSyAgLS0gIENoZWNrIHByaXZp bGVnZXMuICAqLwotCi0vKiAgVHJ5IHRvIHR1cm4gdGhlbSBvZmYuICBJZiB0dXJuaW5nIHRoZW0g b2ZmIGRpZCBub3Qgc3VjY2VlZCwgY2FuY2VsIHRoZW0gKi8KLQotaW50Ci1wcml2X2NoaygpIHsK LSAgICBpbnQgeCwgeSA9IDA7Ci0gICAgeCA9IHByaXZfb2ZmKCk7CQkJLyogVHVybiBvZmYgcHJp dnMuICovCi0gICAgaWYgKHggIT0gMCB8fCBnZXR1aWQoKSA9PSBwcml2dWlkIHx8IGdldGV1aWQo KSA9PSBwcml2dWlkKQotICAgICAgeSA9IHByaXZfY2FuKCk7Ci0gICAgaWYgKHggIT0gMCB8fCBn ZXRnaWQoKSA9PSBwcml2Z2lkIHx8IGdldGVnaWQoKSA9PSBwcml2Z2lkKQotICAgICAgeSA9IHkg fCBwcml2X2NhbigpOwotICAgIHJldHVybih5KTsKLX0KLQotVUlEX1QKLXJlYWxfdWlkKCkgewot ICAgIHJldHVybihyZWFsdWlkKTsKLX0KLQotVk9JRAotdHRpbW9mZigpIHsJCQkJLyogVHVybiBv ZmYgYW55IHRpbWVyIGludGVycnVwdHMgKi8KLSAgICAvKiBpbnQgeHg7ICovCi0vKgotICBBcyBv ZiA1QSgxODMpLCB3ZSBzZXQgU0lHQUxSTSB0byBTSUdfSUdOICh0byBpZ25vcmUgYWxhcm1zKSBy YXRoZXIgdGhhbiB0bwotICBTSUdfREZMICh0byBjYXRjaCBhbGFybXMsIG9yIGlmIHRoZXJlIGlz IG5vIGhhbmRsZXIsIHRvIGV4aXQpLiAgVGhpcyBpcyB0bwotICBjdXJlIChtYXNrLCByZWFsbHkp IGEgZGVlcGVyIHByb2JsZW0gd2l0aCBzdHJheSBhbGFybXMgdGhhdCBvY2N1cnMgb24gc29tZQot ICBzeXN0ZW1zLCBwb3NzaWJseSBoYXZpbmcgdG8gZG8gd2l0aCBzbGVlcCgpLCB0aGF0IGNhdXNl ZCBjb3JlIGR1bXBzLiAgSXQKLSAgc2hvdWxkIGJlIE9LIHRvIGRvIHRoaXMsIGJlY2F1c2Ugbm8g Y29kZSBpbiB0aGlzIG1vZHVsZSB1c2VzIG5lc3RlZCBhbGFybXMuCi0gIChCdXQgd2Ugc3RpbGwg aGF2ZSB0byB3YXRjaCBvdXQgZm9yIFNDUklQVCBhbmQgRElBTC4uLikKLSovCi0gICAgLyogeHgg PSAqLyBhbGFybSgwKTsKLSAgICAvKiBkZWJ1ZyhGMTAxLCJ0dGltb2ZmIGFsYXJtIiwiIix4eCk7 ICovCi0gICAgaWYgKHNhdmFsKSB7CQkJLyogUmVzdG9yZSBhbnkgcHJldmlvdXMgKi8KLQlzaWdu YWwoU0lHQUxSTSxzYXZhbCk7CQkvKiBhbGFybSBoYW5kbGVyLiAqLwotCS8qIGRlYnVnKEYxMDEs InR0aW1vZmYgYWxhcm0gcmVzdG9yaW5nIHNhdmFsIiwiIixzYXZhbCk7ICovCi0Jc2F2YWwgPSBO VUxMOwotICAgIH0gZWxzZSB7Ci0Jc2lnbmFsKFNJR0FMUk0sU0lHX0lHTik7CS8qIFVzZWQgdG8g YmUgU0lHX0RGTCAqLwotCS8qIGRlYnVnKEYxMDAsInR0aW1vZmYgYWxhcm0gU0lHX0lHTiIsIiIs MCk7ICovCi0gICAgfQotfQotCi0KLWludAotdHRfaXNfc2VjdXJlKCkgewkgIC8qIFRlbGxzIHdo ZXRoZXIgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiBpcyBzZWN1cmUgKi8KLQotICAgIGlmICh0dHlm ZCA9PSAtMSkKLSAgICAgIHJldHVybigwKTsKLQotICAgIGlmICgwCi0jaWZkZWYgU1NIQlVJTFRJ TgotCXx8IElTX1NTSCgpCi0jZW5kaWYgLyogU1NIQlVJTFRJTiAqLwotI2lmZGVmIENLX0VOQ1JZ UFRJT04KLQl8fCBja190bl9lbmNyeXB0aW5nKCkgJiYgY2tfdG5fZGVjcnlwdGluZygpCi0jZW5k aWYgLyogQ0tfRU5DUllQVElPTiAqLwotI2lmZGVmIENLX1NTTAotCXx8IHRsc19hY3RpdmVfZmxh ZyB8fCBzc2xfYWN0aXZlX2ZsYWcKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNpZmRlZiBSTE9HQ09E RQotI2lmZGVmIENLX0tFUkJFUk9TCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotCXx8IHR0bnByb3Rv ID09IE5QX0VLNExPR0lOIHx8IHR0bnByb3RvID09IE5QX0VLNUxPR0lOCi0jZW5kaWYgLyogQ0tf RU5DUllQVElPTiAqLwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0jZW5kaWYgLyogUkxPR0NP REUgKi8KLQkpCi0gICAgICByZXR1cm4oMSk7Ci0gICAgcmV0dXJuKDApOwotfQotCi0jaWZkZWYg Q0tfUkVESVIKLSAgCi0vKiBFeHRlcm5hbCBwcm90b2NvbCBoYW5kbGVyIHBhcmFtZXRlcnMgZnJv bSBja3V1czMuYyAqLwotZXh0ZXJuIGludCBleHBfaGFuZGxlciwgZXhwX3N0ZGVyciwgZXhwX3Rp bW87Ci0KLSNpZmRlZiBTRUxFQ1QKLSNpZmRlZiBORVRQVFkKLQotLyogVGhlIHJpZ2h0IHNpemUg aXMgMjQ1NzYgKi8KLQotI2lmbmRlZiBQVFlfUEJVRl9TSVpFCQkJLyogU2l6ZSBvZiBidWZmZXIg dG8gcmVhZCBmcm9tIHB0eSAqLwotI2RlZmluZSBQVFlfUEJVRl9TSVpFIDI0NTc2CQkvKiBhbmQg d3JpdGUgdG8gbmV0LiAqLwotI2VuZGlmCS8qIFBUWV9QQlVGX1NJWkUgKi8KLQotI2lmbmRlZiBQ VFlfVEJVRl9TSVpFCQkJLyogU2l6ZSBvZiBidWZmZXIgdG8gcmVhZCBmcm9tIG5ldCAqLwotI2Rl ZmluZSBQVFlfVEJVRl9TSVpFIDI0NTc2CQkvKiBhbmQgd3JpdGUgdG8gcHR5LiAqLwotI2VuZGlm CS8qIFBUWV9UQlVGX1NJWkUgKi8KLQotI2lmZGVmIE9fTkRFTEFZCQkJCS8qIFdoZXRoZXIgdG8g dXNlIG5vbmJsb2NraW5nICovCi0jaWZuZGVmIFBUWV9OT19OREVMQVkJCQkvKiByZWFkcyBvbiB0 aGUgcHNldWRvdGVybWluYWwgKi8KLSNpZm5kZWYgUFRZX1VTRV9OREVMQVkKLSNkZWZpbmUgUFRZ X1VTRV9OREVMQVkKLSNlbmRpZgkvKiBQVFlfVVNFX05ERUxBWSAqLwotI2VuZGlmCS8qIFBUWV9O T19OREVMQVkgKi8KLSNlbmRpZgkvKiBPX05ERUxBWSAqLwotCi0jaWZuZGVmIEhBVkVfT1BFTlBU WQotI2lmbmRlZiBVU0VfQ0tVUFRZX0MKLSNkZWZpbmUgVVNFX0NLVVBUWV9DCi0jZW5kaWYgLyog VVNFX0NLVVBUWV9DICovCi0jZW5kaWYgLyogSEFWRV9PUEVOUFRZICovCi0KLVZPSUQKLXB0eV9t YWtlX3JhdyhmZCkgaW50IGZkOyB7Ci0gICAgaW50IHggPSAtMjMsIGk7Ci0KLSNpZmRlZiBCU0Q0 NE9SUE9TSVgJCQkvKiBQT1NJWCAqLwotICAgIHN0cnVjdCB0ZXJtaW9zIHRwOwotI2Vsc2UKLSNp ZmRlZiBBVFRTVgkJCQkvKiBBVCZUIFVOSVggKi8KLSNpZmRlZiBDS19BTlNJQwotICAgIHN0cnVj dCB0ZXJtaW8gdHAgPSB7MH07Ci0jZWxzZQotICAgIHN0cnVjdCB0ZXJtaW8gdHA7Ci0jZW5kaWYJ LyogQ0tfQU5TSUMgKi8KLSNlbHNlCi0gICAgc3RydWN0IHNndHR5YiB0cDsJCQkvKiBUcmFkaXRp b25hbCAqLwotI2VuZGlmIC8qIEFUVFNWICovCi0jZW5kaWYgLyogQlNENDRPUlBPU0lYICovCi0K LSAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgZmQiLCIiLGZkKTsKLSAgICBlcnJubyA9IDA7 Ci0KLSNpZmRlZiBCU0Q0NE9SUE9TSVgJCQkvKiBQT1NJWCAqLwotICAgIHggPSB0Y2dldGF0dHIo ZmQsJnRwKTsKLSAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgdGNnZXRhdHRyIiwiIix4KTsK LSNlbHNlCi0jaWZkZWYgQVRUU1YJCQkJLyogQVQmVCBVTklYICovCi0gICAgeCA9IGlvY3RsKGZk LFRDR0VUQSwmdHApOwotICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyBUQ0dFVEEgaW9jdGwi LCIiLHgpOwotI2Vsc2UKLSAgICB4ID0gZ3R0eShmZCwmdHApOwotICAgIGRlYnVnKEYxMDEsInB0 eV9tYWtlX3JhdyB0dHR5IiwiIix4KTsKLSNlbmRpZiAvKiBBVFRTViAqLwotI2VuZGlmIC8qIEJT RDQ0T1JQT1NJWCAqLwotICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyBHRVQgZXJybm8iLCIi LGVycm5vKTsKLQotI2lmZGVmIFVTRV9DRk1BS0VSQVcKLSAgICBlcnJubyA9IDA7Ci0gICAgY2Zt YWtlcmF3KCZ0cCk7Ci0gICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IGNmbWFrZXJhdyBlcnJu byIsIiIsZXJybm8pOwotI2Vsc2UgIC8qIFVTRV9DRk1BS0VSQVcgKi8KLQotI2lmZGVmIENPTU1F TlQKLQotLyogVGhpcyB2ZXJ5IHNpbXBsZSB2ZXJzaW9uIHJlY29tbWVuZGVkIGJ5IFNlcmcgSWFr b2xldiBkb2Vzbid0IHdvcmsgKi8KLQotICAgIHRwLmNfbGZsYWcgJj0gfihFQ0hPfElDQU5PTnxJ RVhURU58SVNJRyk7Ci0gICAgdHAuY19pZmxhZyAmPSB+KEJSS0lOVHxJQ1JOTHxJTlBDS3xJU1RS SVB8SVhPTik7Ci0gICAgdHAuY19jZmxhZyAmPSB+KENTSVpFfFBBUkVOQik7Ci0gICAgdHAuY19j ZmxhZyB8PSBDUzg7Ci0gICAgdHAuY19vZmxhZyAmPSB+KE9QT1NUKTsKLSAgICB0cC5jX2NjW1ZN SU5dID0gMTsKLSAgICB0cC5jX2NjW1ZUSU1FXSA9IDA7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJwdHlf bWFrZV9yYXcgMSBjX2NjW10gTkNDUyIsIiIsTkNDUyk7Ci0gICAgZGVidWcoRjEwMSwicHR5X21h a2VfcmF3IDEgaWZsYWdzIiwiIix0cC5jX2lmbGFnKTsKLSAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFr ZV9yYXcgMSBvZmxhZ3MiLCIiLHRwLmNfb2ZsYWcpOwotICAgIGRlYnVnKEYxMDEsInB0eV9tYWtl X3JhdyAxIGxmbGFncyIsIiIsdHAuY19sZmxhZyk7Ci0gICAgZGVidWcoRjEwMSwicHR5X21ha2Vf cmF3IDEgY2ZsYWdzIiwiIix0cC5jX2NmbGFnKTsKLQotI2Vsc2UKLSNpZmRlZiBDT01NRU5UCi0v KgotICBJbiB0aGlzIHZlcnNpb24gd2UgdW5zZXQgZXZlcnl0aGluZyBhbmQgdGhlbiBzZXQgb25s eSB0aGUKLSAgYml0cyB3ZSBrbm93IHdlIG5lZWQuCi0qLwotICAgIC8qIGlmbGFncyAqLwotICAg IHRwLmNfaWZsYWcgPSAwTDsKLSAgICB0cC5jX2lmbGFnIHw9IElHTkJSSzsKLSNpZmRlZiBJTUFY QkVMCi0gICAgdHAuY19pZmxhZyB8PSBJTUFYQkVMOwotI2VuZGlmIC8qIElNQVhCRUwgKi8KLQot ICAgIC8qIG9mbGFncyAqLwotICAgIHRwLmNfb2ZsYWcgPSAwTDsKLQotICAgIC8qIGxmbGFncyAq LwotICAgIHRwLmNfbGZsYWcgPSAwTDsKLSNpZmRlZiBOT0tFUk5JTkZPCi0gICAgdHAuY19sZmxh ZyB8PSBOT0tFUk5JTkZPOwotI2VuZGlmCS8qIE5PS0VSTklORk8gKi8KLQotICAgIC8qIGNmbGFn cyAqLwotICAgIHRwLmNfY2ZsYWcgPSAwTDsKLSAgICB0cC5jX2NmbGFnIHw9IENTOHxDUkVBRDsK LQotICAgIGZvciAoaSA9IDA7IGkgPCBOQ0NTOyBpKyspIHsJLyogTm8gc3BlY2lhbCBjaGFyYWN0 ZXJzICovCi0JdHAuY19jY1tpXSA9IDA7Ci0gICAgfQotI2lmZGVmIFZNSU4KLSAgICB0cC5jX2Nj W1ZNSU5dID0gMTsJCQkvKiBCdXQgYWx3YXlzIHdhaXQgZm9yIGlucHV0ICovCi0jZW5kaWYJLyog Vk1JTiAqLwotICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyAyIGNfY2NbXSBOQ0NTIiwiIixO Q0NTKTsKLSAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgMiBpZmxhZ3MiLCIiLHRwLmNfaWZs YWcpOwotICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyAyIG9mbGFncyIsIiIsdHAuY19vZmxh Zyk7Ci0gICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IDIgbGZsYWdzIiwiIix0cC5jX2xmbGFn KTsKLSAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgMiBjZmxhZ3MiLCIiLHRwLmNfY2ZsYWcp OwotCi0jZWxzZSAgLyogQ09NTUVOVCAqLwotLyoKLSAgSW4gdGhpcyB2ZXJzaW9uIHdlIHNldCBv ciB1bnNldCBldmVyeSBzaW5nbGUgZmxhZyBleHBsaWNpdGx5LiAgSXQgd29ya3MgYQotICBiaXQg YmV0dGVyIHRoYW4gdGhlIHNpbXBsZSB2ZXJzaW9uIGp1c3QgYWJvdmUsIGJ1dCBpdCdzIHN0aWxs IGZhciBmcm9tCi0gIGFkZXF1YXRlLgotKi8KLSAgICAvKiBpZmxhZ3MgKi8KLSAgICB0cC5jX2lm bGFnICY9IH4oUEFSTVJLfElTVFJJUHxCUktJTlR8SU5MQ1J8SUdOQ1J8SUNSTkwpOwotICAgIHRw LmNfaWZsYWcgJj0gfihJTlBDS3xJR05QQVJ8SVhBTll8SVhPTnxJWE9GRik7Ci0gICAgdHAuY19p ZmxhZyB8PSBJR05CUks7Ci0jaWZkZWYgSU1BWEJFTAotI2lmZGVmIENPTU1FTlQKLSAgICB0cC5j X2lmbGFnIHw9IElNQVhCRUw7Ci0jZWxzZQotICAgIHRwLmNfaWZsYWcgJj0gfklNQVhCRUw7Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotI2VuZGlmIC8qIElNQVhCRUwgKi8KLSNpZmRlZiBJVUNMQwot ICAgIHRwLmNfaWZsYWcgJj0gfklVQ0xDOwotI2VuZGlmIC8qIElVQ0xDICovCi0KLSAgICAvKiBv ZmxhZ3MgKi8KLSNpZmRlZiBCU0RMWQotICAgIHRwLmNfb2ZsYWcgJj0gfkJTRExZOwotI2VuZGlm IC8qIEJTRExZICovCi0jaWZkZWYgQ1JETFkKLSAgICB0cC5jX29mbGFnICY9IH5DUkRMWTsKLSNl bmRpZiAvKiBDUkRMWSAqLwotI2lmZGVmIEZGRExZCi0gICAgdHAuY19vZmxhZyAmPSB+RkZETFk7 Ci0jZW5kaWYgLyogRkZETFkgKi8KLSNpZmRlZiBOTERMWQotICAgIHRwLmNfb2ZsYWcgJj0gfk5M RExZOwotI2VuZGlmIC8qIE5MRExZICovCi0jaWZkZWYgVEFCRExZCi0gICAgdHAuY19vZmxhZyAm PSB+VEFCRExZOwotI2VuZGlmIC8qIFRBQkRMWSAqLwotI2lmZGVmIFZURExZCi0gICAgdHAuY19v ZmxhZyAmPSB+VlRETFk7Ci0jZW5kaWYgLyogVlRETFkgKi8KLSNpZmRlZiBPRkRFTAotICAgIHRw LmNfb2ZsYWcgJj0gfk9GREVMOwotI2VuZGlmIC8qIE9GREVMICovCi0jaWZkZWYgT0ZJTEwKLSAg ICB0cC5jX29mbGFnICY9IH5PRklMTDsKLSNlbmRpZiAvKiBPRklMTCAqLwotI2lmZGVmIE9MQ1VD Ci0gICAgdHAuY19vZmxhZyAmPSB+T0xDVUM7Ci0jZW5kaWYgLyogT0xDVUMgKi8KLSNpZmRlZiBD TVNQQVIKLSAgICB0cC5jX29mbGFnICY9IH5DTVNQQVI7Ci0jZW5kaWYgLyogQ01TUEFSICovCi0g ICAgdHAuY19vZmxhZyAmPSB+T1BPU1Q7Ci0jaWZkZWYgT1hUQUJTCi0gICAgdHAuY19vZmxhZyAm PSB+T1hUQUJTOwotI2VuZGlmIC8qIE9YVEFCUyAqLwotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBP Tk9DUgotICAgIHRwLmNfb2ZsYWcgJj0gfk9OT0NSOwkJLyogTWF5YmUgc2hvdWxkIGJlIHw9PyAq LwotICAgIHRwLmNfb2ZsYWcgfD0gT05PQ1I7CQkvKiBtYWtlcyBubyBkaWZmZXJlbmNlIGVpdGhl ciB3YXkgKi8KLSNlbmRpZiAvKiBPTk9DUiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNpZmRl ZiBPTk9FT1QKLSAgICB0cC5jX29mbGFnICY9IH5PTk9FT1Q7Ci0jZW5kaWYgLyogT05PRU9UICov Ci0jaWZkZWYgT05MUkVUCi0gICAgdHAuY19vZmxhZyAmPSB+T05MUkVUOwotI2VuZGlmIC8qIE9O TFJFVCAqLwotI2lmZGVmIE9OTENSCi0gICAgdHAuY19vZmxhZyAmPSB+T05MQ1I7Ci0jZW5kaWYg LyogT05MQ1IgKi8KLSNpZmRlZiBPQ1JOTAotICAgIHRwLmNfb2ZsYWcgJj0gfk9DUk5MOwotI2Vu ZGlmIC8qIE9DUk5MICovCi0KLSAgICAvKiBsZmxhZ3MgKi8KLSAgICB0cC5jX2xmbGFnICY9IH5F Q0hPOwotI2lmZGVmIEVDSE9FCi0gICAgdHAuY19sZmxhZyAmPSB+RUNIT0U7Ci0jZW5kaWYgLyog RUNIT0UgKi8KLSNpZmRlZiBFQ0hPTkwKLSAgICB0cC5jX2xmbGFnICY9IH5FQ0hPTkw7Ci0jZW5k aWYgLyogRUNIT05MICovCi0jaWZkZWYgRUNIT1BSVAotICAgIHRwLmNfbGZsYWcgJj0gfkVDSE9Q UlQ7Ci0jZW5kaWYgLyogRUNIT1BSVCAqLwotI2lmZGVmIEVDSE9LRQotICAgIHRwLmNfbGZsYWcg Jj0gfkVDSE9LRTsKLSNlbmRpZiAvKiBFQ0hPS0UgKi8KLSNpZmRlZiBFQ0hPQ1RMCi0gICAgdHAu Y19sZmxhZyAmPSB+RUNIT0NUTDsKLSNlbmRpZiAvKiBFQ0hPQ1RMICovCi0jaWZkZWYgWENBU0UK LSAgICB0cC5jX2xmbGFnICY9IH5YQ0FTRTsKLSNlbmRpZiAvKiBYQ0FTRSAqLwotI2lmZGVmIEFM VFdFUkFTRQotICAgIHRwLmNfbGZsYWcgJj0gfkFMVFdFUkFTRTsKLSNlbmRpZiAvKiBBTFRXRVJB U0UgKi8KLSNpZmRlZiBFWFRQUk9DCi0gICAgdHAuY19sZmxhZyAmPSB+KElDQU5PTnxJU0lHfElF WFRFTnxUT1NUT1B8RkxVU0hPfFBFTkRJTnxFWFRQUk9DKTsKLSNlbHNlCi0gICAgdHAuY19sZmxh ZyAmPSB+KElDQU5PTnxJU0lHfElFWFRFTnxUT1NUT1B8RkxVU0hPfFBFTkRJTik7Ci0jZW5kaWYJ LyogRVhUUFJPQyAqLwotI2lmZGVmIE5PS0VSTklORk8KLSAgICB0cC5jX2xmbGFnIHw9IE5PS0VS TklORk87Ci0jZW5kaWYJLyogTk9LRVJOSU5GTyAqLwotI2lmbmRlZiBDT01NRU5UCi0gICAgdHAu Y19sZmxhZyAmPSB+Tk9GTFNIOwkJLyogVFJZIElUIFRIRSBPVEhFUiBXQVk/ICovCi0jZWxzZQot ICAgIHRwLmNfbGZsYWcgfD0gTk9GTFNIOwkJLyogTm8sIHRoaXMgd2F5IGlzIHdvcnNlICovCi0j ZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgLyogY2ZsYWdzICovCi0gICAgdHAuY19jZmxhZyAm PSB+KENTSVpFfFBBUkVOQnxQQVJPREQpOwotICAgIHRwLmNfY2ZsYWcgfD0gQ1M4fENSRUFEOwot Ci0jaWZkZWYgTURNQlVGCi0gICAgdHAuY19jZmxhZyAmPSB+KE1ETUJVRik7Ci0jZWxzZQotI2lm ZGVmIENDQVJfT0ZMT1cKLSAgICB0cC5jX2NmbGFnICY9IH4oQ0NBUl9PRkxPVyk7CS8qIHR3byBu YW1lcyBmb3IgdGhlIHNhbWUgdGhpbmcgKi8KLSNlbmRpZiAvKiBDQ0FSX09GTE9XICovCi0jZW5k aWYgLyogTURNQlVGICovCi0KLSNpZmRlZiBDQ1RTX09GTE9XCi0gICAgdHAuY19jZmxhZyAmPSB+ KENDVFNfT0ZMT1cpOwotI2VuZGlmIC8qIENDVFNfT0ZMT1cgKi8KLSNpZmRlZiBDRFNSX09GTE9X Ci0gICAgdHAuY19jZmxhZyAmPSB+KENEU1JfT0ZMT1cpOwotI2VuZGlmIC8qIENEU1JfT0ZMT1cg Ki8KLSNpZmRlZiBDRFRSX0lGTE9XCi0gICAgdHAuY19jZmxhZyAmPSB+KENEVFJfSUZMT1cpOwot I2VuZGlmIC8qIENEVFJfSUZMT1cgKi8KLSNpZmRlZiBDUlRTX0lGTE9XCi0gICAgdHAuY19jZmxh ZyAmPSB+KENSVFNfSUZMT1cpOwotI2VuZGlmIC8qIENSVFNfSUZMT1cgKi8KLSNpZmRlZiBDUlRT WE9GRgotICAgIHRwLmNfY2ZsYWcgJj0gfihDUlRTWE9GRik7Ci0jZW5kaWYgLyogQ1JUU1hPRkYg Ki8KLSNpZmRlZiBDUlRTQ1RTCi0gICAgdHAuY19jZmxhZyAmPSB+KENSVFNDVFMpOwotI2VuZGlm IC8qIENSVFNDVFMgKi8KLSNpZmRlZiBDTE9DQUwKLSAgICB0cC5jX2NmbGFnICY9IH4oQ0xPQ0FM KTsKLSNlbmRpZiAvKiBDTE9DQUwgKi8KLSNpZmRlZiBDU1RPUEIKLSAgICB0cC5jX2NmbGFnICY9 IH4oQ1NUT1BCKTsKLSNlbmRpZiAvKiBDU1RPUEIgKi8KLSNpZmRlZiBIVVBDTAotICAgIHRwLmNf Y2ZsYWcgJj0gfihIVVBDTCk7Ci0jZW5kaWYgLyogSFVQQ0wgKi8KLQotICAgIGZvciAoaSA9IDA7 IGkgPCBOQ0NTOyBpKyspIHsJLyogTm8gc3BlY2lhbCBjaGFyYWN0ZXJzICovCi0JdHAuY19jY1tp XSA9IDA7Ci0gICAgfQotI2lmZGVmIFZNSU4KLSAgICB0cC5jX2NjW1ZNSU5dID0gMTsJCQkvKiBC dXQgYWx3YXlzIHdhaXQgZm9yIGlucHV0ICovCi0jZW5kaWYJLyogVk1JTiAqLwotICAgIGRlYnVn KEYxMDEsInB0eV9tYWtlX3JhdyAzIGNfY2NbXSBOQ0NTIiwiIixOQ0NTKTsKLSAgICBkZWJ1ZyhG MTAxLCJwdHlfbWFrZV9yYXcgMyBpZmxhZ3MiLCIiLHRwLmNfaWZsYWcpOwotICAgIGRlYnVnKEYx MDEsInB0eV9tYWtlX3JhdyAzIG9mbGFncyIsIiIsdHAuY19vZmxhZyk7Ci0gICAgZGVidWcoRjEw MSwicHR5X21ha2VfcmF3IDMgbGZsYWdzIiwiIix0cC5jX2xmbGFnKTsKLSAgICBkZWJ1ZyhGMTAx LCJwdHlfbWFrZV9yYXcgMyBjZmxhZ3MiLCIiLHRwLmNfY2ZsYWcpOwotI2VuZGlmIC8qIENPTU1F TlQgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICBlcnJubyA9IDA7Ci0jaWZkZWYgQlNE NDRPUlBPU0lYCQkJLyogUE9TSVggKi8KLSAgICB4ID0gdGNzZXRhdHRyKGZkLFRDU0FOT1csJnRw KTsKLSAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgdGNzZXRhdHRyIiwiIix4KTsKLSNlbHNl Ci0jaWZkZWYgQVRUU1YJCQkJLyogQVQmVCBVTklYICovCi0gICAgeCA9IGlvY3RsKGZkLFRDU0VU QSwmdHApOwotICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyBpb2N0bCIsIiIseCk7Ci0jZWxz ZQotICAgIHggPSBzdHR5KGZkLCZ0cCk7CQkJLyogVHJhZGl0aW9uYWwgKi8KLSAgICBkZWJ1ZyhG MTAxLCJwdHlfbWFrZV9yYXcgc3R0eSIsIiIseCk7Ci0jZW5kaWYgLyogQVRUU1YgKi8KLSNlbmRp ZiAvKiBCU0Q0NE9SUE9TSVggKi8KLSAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgZXJybm8i LCIiLGVycm5vKTsKLQotI2VuZGlmIC8qIF9fTmV0QlNEX18gKi8KLX0KLQotc3RhdGljIGludAot cHR5X2NoayhmZCkgaW50IGZkOyB7Ci0gICAgaW50IHgsIG4gPSAwOwotICAgIGVycm5vID0gMDsK LSNpZmRlZiBGSU9OUkVBRAotICAgIHggPSBpb2N0bChmZCwgRklPTlJFQUQsICZuKTsJLyogQlNE IGFuZCBtb3N0IG90aGVycyAqLwotICAgIGNrbWFrbXNnKG1zZ2J1Ziw1MDAsCi0JICAgICAicHR5 X2NoayBpb2N0bCBGSU9OUkVBRCBlcnJubz0iLAotCSAgICAgY2tpdG9hKGVycm5vKSwKLQkgICAg ICIgY291bnQ9IiwKLQkgICAgIGNraXRvYShuKSk7Ci0gICAgZGVidWcoRjEwMCxtc2didWYsIiIs MCk7Ci0jZWxzZQotI2lmZGVmIFJEQ0hLCi0gICAgbiA9IHJkY2hrKGZkKTsKLSAgICBkZWJ1ZyhG MTAxLCJwdHlfY2hrIHJkY2hrIiwiIixuKTsKLSNlbHNlCi0gICAgbiA9IDE7Ci0jZW5kaWYJLyog UkRDSEsgKi8KLSNlbmRpZgkvKiBGSU9OUkVBRCAqLwotICAgIHJldHVybigobiA+IC0xKSA/IG4g OiAwKTsKLX0KLQotc3RhdGljIGludAotcHR5X2dldF9zdGF0dXMoZmQscGlkKSBpbnQgZmQ7IFBJ RF9UIHBpZDsgewotICAgIGludCB4LCBzdGF0dXMgPSAtMTsKLSAgICBQSURfVCB3OwotCi0gICAg ZGVidWcoRjEwMSwicHR5X2dldF9zdGF0dXMgZmQiLCIiLGZkKTsKLSAgICBkZWJ1ZyhGMTAxLCJw dHlfZ2V0X3N0YXR1cyBwaWQiLCIiLHBpZCk7Ci0KLSAgICBpZiAocGV4aXRzdGF0ID4gLTEpCi0g ICAgICByZXR1cm4ocGV4aXRzdGF0KTsKLQotI2lmZGVmIENPTU1FTlQKLSAgICAvKiBOb3Qgb25s eSB1bm5lY2Vzc2FyeSBidXQgaGFybWZ1bCAqLwotICAgIGVycm5vID0gMDsKLSAgICB4ID0ga2ls bChwdHlfZm9ya19waWQsMCk7Ci0gICAgZGVidWcoRjEwMSwicHR5X2dldF9zdGF0dXMga2lsbCB2 YWx1ZSIsIiIseCk7Ci0gICAgZGVidWcoRjEwMSwicHR5X2dldF9zdGF0dXMga2lsbCBlcnJubyIs IiIsZXJybm8pOwotICAgIGlmICh4ID4gLTEgJiYgZXJybm8gIT0gRVNSQ0gpCi0gICAgICByZXR1 cm4oLTEpOwkJCS8qIEZvcmsgc3RpbGwgdGhlcmUgKi8KLSAgICAvKiBGb3JrIHNlZW1zIHRvIGJl IGdvbmUgKi8KLSNlbmRpZgkvKiBDT01NRU5UICovCi0KLSAgICBlcnJubyA9IDA7Ci0gICAgeCA9 IHdhaXRwaWQocHR5X2ZvcmtfcGlkLCZzdGF0dXMsV05PSEFORyk7Ci0gICAgZGVidWcoRjExMSwi cHR5X2dldF9zdGF0dXMgd2FpdHBpZCIsY2tpdG9hKGVycm5vKSx4KTsKLSAgICBpZiAoeCA8PSAw ICYmIGVycm5vID09IDApIHsKLQlkZWJ1ZyhGMTAxLCJwdHlfZ2V0X3N0YXR1cyB3YWl0cGlkIHJl dHVybiIsIiIsLTEpOwotCXJldHVybigtMSk7Ci0gICAgfQotICAgIGlmICh4ID4gMCkgewotCWlm ICh4ICE9IHB0eV9mb3JrX3BpZCkKLQkgIGRlYnVnKEYxMDEsCi0JCSJwdHlfZ2V0X3N0YXR1cyB3 YWl0cGlkIHBpZCBkb2Vzbid0IG1hdGNoIiwiIixwdHlfZm9ya19waWQpOyAKLQlkZWJ1ZyhGMTAx LCJwdHlfZ2V0X3N0YXR1cyB3YWl0cGlkIHN0YXR1cyIsIiIsc3RhdHVzKTsKLQlkZWJ1ZyhGMTAx LCJwdHlfZ2V0X3N0YXR1cyB3YWl0cGlkIGVycm5vIiwiIixlcnJubyk7Ci0JaWYgKFdJRkVYSVRF RChzdGF0dXMpKSB7Ci0JICAgIGRlYnVnKEYxMDAsInB0eV9nZXRfc3RhdHVzIFdJRkVYSVRFRCIs IiIsMCk7Ci0JICAgIHN0YXR1cyA9IFdFWElUU1RBVFVTKHN0YXR1cyk7Ci0JICAgIGRlYnVnKEYx MDEsInB0eV9nZXRfc3RhdHVzIGZvcmsgZXhpdCBzdGF0dXMiLCIiLHN0YXR1cyk7Ci0jaWZkZWYg Q09NTUVOVAotCSAgICBlbmRfcHR5KCk7Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwotCSAgICBjbG9z ZShmZCk7Ci0JICAgIHBleGl0c3RhdCA9IHN0YXR1czsKLQl9IGVsc2UgewotCSAgICBkZWJ1ZyhG MTAwLCJwdHlfZ2V0X3N0YXR1cyB3YWl0cGlkIHVuZXhwZWN0ZWQgc3RhdHVzIiwiIiwwKTsKLQl9 Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsInB0eV9nZXRfc3RhdHVzIHJldHVybiBzdGF0dXMiLCIi LHN0YXR1cyk7Ci0gICAgcmV0dXJuKHN0YXR1cyk7Ci19Ci0KLS8qIHQgdCBwIHQgeSBjIG0gZCAg LS0gIFJ1biBjb21tYW5kIG9uIHB0eSBhbmQgZm9yd2FyZCB0byBuZXQgKi8KLQotLyoKLSAgTmVl ZGVkIGZvciBydW5uaW5nIGV4dGVybmFsIHByb3RvY29scyBvbiBzZWN1cmUgY29ubmVjdGlvbnMu Ci0gIEZvciBleGFtcGxlLCBpZiBDLUtlcm1pdCBoYXMgbWFkZSBhbiBTU0wvVExTIG9yIEtlcmJl cm9zIFRlbG5ldAotICBjb25uZWN0aW9uLCBhbmQgdGhlbiBuZWVkcyB0byB0cmFuc2ZlciBhIGZp bGUgd2l0aCBabW9kZW0sIHdoaWNoIGlzCi0gIGFuIGV4dGVybmFsIHByb2dyYW0sIHRoaXMgcm91 dGluZSByZWFkcyBabW9kZW0ncyBvdXRwdXQsIGVuY3J5cHRzIGl0LAotICBhbmQgdGhlbiBmb3J3 YXJkcyBpdCBvdXQgdGhlIGNvbm5lY3Rpb24sIGFuZCByZWFkcyB0aGUgZW5jcnlwdGVkIGRhdGEK LSAgc3RyZWFtIGNvbWluZyBpbiBmcm9tIHRoZSBjb25uZWN0aW9uLCBkZWNyeXB0cyBpdCwgYW5k IGZvcndhcmRzIGl0IHRvCi0gIFptb2RlbS4KLQotICBXb3JrcyBsaWtlIGEgVENQL0lQIHBvcnQg Zm9yd2FyZGVyIGV4Y2VwdCBvbmUgZW5kIGlzIGEgcHR5IHJhdGhlcgotICB0aGFuIGEgc29ja2V0 LCB3aGljaCBpbnRyb2R1Y2VzIHNvbWUgY29tcGxpY2F0aW9uczoKLQotICAgLiBPbiBtb3N0IHBs YXRmb3Jtcywgc2VsZWN0KCkgYWx3YXlzIGluZGljYXRlcyB0aGUgb3V0cHV0IHNpZGUgb2YKLSAg ICAgdGhlIHB0eSBoYXMgY2hhcmFjdGVycyB3YWl0aW5nIHRvIGJlIHJlYWQsIGV2ZW4gd2hlbiBp dCBkb2Vzbid0LAotICAgICBldmVuIHdoZW4gdGhlIHB0eSBwcm9jZXNzIGhhcyBhbHJlYWR5IGV4 aXRlZC4KLQotICAgLiBOb25ibG9ja2luZyByZWFkcyBtdXN0IGJlIHVzZWQgb24gdGhlIHB0eSwg YmVjYXVzZSB0aGVyZSBpcyBubwotICAgICB3YXkgb24gY2VydGFpbiBwbGF0Zm9ybXMgKGUuZy4g TmV0QlNEKSB0byBmaW5kIG91dCBob3cgbWFueSBjaGFyYWN0ZXJzCi0gICAgIGFyZSBhdmFpbGFi bGUgdG8gYmUgcmVhZCAodGhlIEZJT05SRUFEIGlvY3RsIGFsd2F5cyBzYXlzIDApLiAgVGhlIGNv ZGUKLSAgICAgYWxzbyBhbGxvd3MgZm9yIGJsb2NraW5nIHJlYWRzIChpZiBPX05ERUxBWSBhbmQg T19OT05CTE9DSyBhcmUgbm90Ci0gICAgIGRlZmluZWQsIG9yIGlmIFBUWV9OT19OREVMQVkgaXMg ZGVmaW5lZCksIGJ1dCBvbiBzb21lIHBsYXRmb3JtcyB0aGlzIGNhbgotICAgICByZXN1bHQgaW4g c2luZ2xlLWJ5dGUgcmVhZHMgYW5kIHdyaXRlcyAoTmV0QlNEIGFnYWluKS4KLQotICAgLiBUZXN0 aW5nIGZvciAiRU9GIiBvbiB0aGUgcHR5IGlzIHByb2JsZW1hdGljLiAgc2VsZWN0KCkgbmV2ZXIg Z2l2ZXMKLSAgICAgYW55IGluZGljYXRpb24uICBBZnRlciB0aGUgcHR5IHByb2Nlc3MgaGFzIGV4 aXRlZCBhbmQgdGhlIGZvcmsgaGFzCi0gICAgIGRpc2FwcGVhcmVkLCByZWFkKCkgY2FuIHN0aWxs IHJldHVybiB3aXRoIDAgYnl0ZXMgcmVhZCBidXQgd2l0aG91dCBhbgotICAgICBlcnJvciAoTmV0 QlNEKTsgbm8ga25vd24gdGVzdCBvbiB0aGUgcHR5IGZpbGUgZGVzY3JpcHRvciB3aWxsIGluZGlj YXRlCi0gICAgIHRoYXQgaXQgaXMgbm8gbG9uZ2VyIHZhbGlkLiAgVGhlIHByb2Nlc3MgSUQgb2Yg dGhlIHB0eSBmb3JrIGNhbiBiZQotICAgICB0ZXN0ZWQgb24gc29tZSBwbGF0Zm9ybXMgKE5ldEJT RCwgbHVja2lseSkgYnV0IG5vdCBvdGhlcnMgKFNvbGFyaXMsCi0gICAgIExpbnV4KS4KLQotICBP biB0aGUgbmV0d29yayBzaWRlLCB3ZSB1c2UgdHRpbmMoKSBhbmQgdHRvYygpLCB3aGljaCwgZm9y IG5ldHdvcmsgCi0gIGNvbm5lY3Rpb25zLCBoYW5kbGUgYW55IGFjdGl2ZSBzZWN1cml0eSBtZXRo b2RzLgotCi0gIENhbGwgd2l0aCBzID0gY29tbWFuZC4KLSAgUmV0dXJucyAwIG9uIGZhaWx1cmUs IDEgb24gc3VjY2Vzcy4KLSAgZmRjIC0gRGVjZW1iZXIgMjAwNiAtIEF1Z3VzdCAyMDA3LgotCi0g IE5PVEU6IFRoaXMgY29kZSBkZWZhdWx0cyB0byBub25ibG9ja2luZyByZWFkcyBpZiBPX05ERUxB WSBvciBPX05PTkJMT0NLIGFyZQotICBkZWZpbmVkIGluIHRoZSBoZWFkZXIgZmlsZXMsIHdoaWNo IHNob3VsZCBiZSB0cnVlIG9mIGV2ZXJ5IHJlY2VudCBVbml4Ci0gIHBsYXRmb3JtLiAgSWYgdGhp cyBjYXVzZXMgdHJvdWJsZSBzb21ld2hlcmUsIGRlZmluZSBQVFlfTk9fTkRFTEFZLCBlLmcuIHdo ZW4KLSAgYnVpbGRpbmcgQy1LZXJtaXQ6Ci0KLSAgICB0b3VjaCBja3V0aW8uYwotICAgIG1ha2Ug cGxhdGZvcm1uYW1lIEtGTEFHUz0tRFBUWV9OT19OT0RFTEFZCi0qLwotc3RhdGljIGludCBoYXZl X3B0eSA9IDA7CQkvKiBEbyB3ZSBoYXZlIGEgcHR5PyAqLwotCi1zdGF0aWMgU0lHVFlQICgqc2F2 ZV9zaWdjaGxkKSgpID0gTlVMTDsJLyogRm9yIGNhdGNoaW5nIFNJR0NITEQgKi8KLQotc3RhdGlj IFZPSUQKLXNpZ2NobGRfaGFuZGxlcihzaWcpIGludCBzaWc7IHsKLSAgICBoYXZlX3B0eSA9IDA7 CQkJLyogV2UgZG9uJ3QgaGF2ZSBhIHB0eSAqLwotI2lmZGVmIERFQlVHCi0gICAgaWYgKHNhdmVf c2lnY2hsZCkgewotCShWT0lEKSBzaWduYWwoU0lHQ0hMRCxzYXZlX3NpZ2NobGQpOwotCXNhdmVf c2lnY2hsZCA9IE5VTEw7Ci0gICAgfQotICAgIGlmIChkZWJsb2cpIHsKLQlkZWJ1ZyhGMTAwLCIq KioqKioqKioqKioqKiIsIiIsMCk7Ci0JZGVidWcoRjEwMCwiU0lHQ0hMRCBjYXVnaHQiLCIiLDAp OwotCWRlYnVnKEYxMDAsIioqKioqKioqKioqKioqIiwiIiwwKTsKLSAgICB9Ci0jZW5kaWYJLyog REVCVUcgKi8KLX0KLSNkZWZpbmUgSEFWRV9JQUMgMQotI2RlZmluZSBIQVZFX0NSICAyCi0KLWlu dAotdHRwdHljbWQocykgY2hhciAqczsgewotICAgIENIQVIgdGJ1ZltQVFlfVEJVRl9TSVpFXTsJ CS8qIFJlYWQgZnJvbSBuZXQsIHdyaXRlIHRvIHB0eSAqLwotICAgIGludCB0YnVmX2F2YWlsID0g MDsJCQkvKiBQb2ludGVycyBmb3IgdGJ1ZiAqLwotICAgIGludCB0YnVmX3dyaXR0ZW4gPSAwOwot ICAgIHN0YXRpYyBpbnQgaW5fc3RhdGUgPSAwOwkJLyogRm9yIFRFTE5FVCBJQUMgYW5kIE5WVCBp biAqLwotICAgIHN0YXRpYyBpbnQgb3V0X3ByZXYgPSAwOwkJLyogU2ltcGxlciBzY2hlbWUgZm9y IG91dCAqLwotCi0gICAgQ0hBUiBwYnVmW1BUWV9QQlVGX1NJWkVdOwkJLyogUmVhZCBmcm9tIHB0 eSwgd3JpdGUgdG8gbmV0ICovCi0gICAgQ0hBUiBkYnVmW1BUWV9QQlVGX1NJWkUgKyBQVFlfUEJV Rl9TSVpFICsgMV07IC8qIERvdWJsZS1zaXplIGJ1ZmZlciAqLwotICAgIGludCBwYnVmX2F2YWls ID0gMDsJCQkvKiBQb2ludGVycyBmb3IgcGJ1ZiAqLwotICAgIGludCBwYnVmX3dyaXR0ZW4gPSAw OwotCi0gICAgaW50IHB0eWZkID0gLTE7CQkJLyogUHR5IGZpbGUgZGVzY3JpcHRvciAqLwotICAg IGludCBoYXZlX25ldCA9IDA7CQkJLyogV2UgaGF2ZSBhIG5ldHdvcmsgY29ubmVjdGlvbiAqLwot ICAgIGludCBwdHlfZXJyID0gMDsJCQkvKiBHb3QgZXJyb3Igb24gcHR5ICovCi0gICAgaW50IG5l dF9lcnIgPSAwOwkJCS8qIEdvdCBlcnJvciBvbiBuZXQgKi8KLSAgICBpbnQgc3RhdHVzID0gLTE7 CQkJLyogUHR5IHByb2Nlc3MgZXhpdCBzdGF0dXMgKi8KLSAgICBpbnQgcmMgPSAwOwkJCQkvKiBP dXIgcmV0dXJuIGNvZGUgKi8KLQotICAgIGludCB4MSA9IDAsIHgyID0gMDsJCQkvKiBXb3JrZXJz Li4uICovCi0gICAgaW50IGMsIG4sIG0sIHQsIHg7CQkJLyogV29ya2VycyAqLwotCi0gICAgbG9u ZyBzZWNvbmRzX3RvX3dhaXQgPSAwTDsJCS8qIHNlbGVjdCgpIHRpbWVvdXQgKi8KLSAgICBzdHJ1 Y3QgdGltZXZhbCB0diwgKnR2MjsJCS8qIEZvciBzZWxlY3QoKSAqLwotI2lmZGVmIElOVFNFTEVD VAotICAgIGludCBpbiwgb3V0LCBlcnI7CQkJLyogRm9yIHNlbGVjdCgpICovCi0jZWxzZQotICAg IGZkX3NldCBpbiwgb3V0LCBlcnI7Ci0jZW5kaWYgLyogSU5UU0VMRUNUICovCi0gICAgaW50IG5m ZHMgPSAwOwkJCS8qIEZvciBzZWxlY3QoKSAqLwotCi0gICAgaW50IHBzZXQgPSAwLCB0c2V0ID0g MCwgcG5vdHNldCA9IDAsIHRub3RzZXQgPSAwOyAvKiBzdGF0cy9kZWJ1Z2dpbiBvbmx5ICovCi0g ICAgaW50IHJlYWRfbmV0X2J5dGVzID0gMDsJCS8qIFN0YXRzICovCi0gICAgaW50IHdyaXRlX25l dF9ieXRlcyA9IDA7CQkvKiBTdGF0cyAqLwotICAgIGludCByZWFkX3B0eV9ieXRlcyA9IDA7CQkv KiBTdGF0cyAqLwotICAgIGludCB3cml0ZV9wdHlfYnl0ZXMgPSAwOwkJLyogU3RhdHMgKi8KLSAg ICBpbnQgaXNfdG4gPSAwOwkJCS8qIFRFTE5FVCBwcm90b2NvbCBpcyBhY3RpdmUgKi8KLQotICAg IGludCBtYXN0ZXJmZCA9IC0xOwotICAgIGludCBzbGF2ZWZkID0gLTE7Ci0jaWZuZGVmIFVTRV9D S1VQVFlfQwotICAgIHN0cnVjdCB0ZXJtaW9zIHRlcm07Ci0gICAgc3RydWN0IHdpbnNpemUgdHdp bjsKLSAgICBzdHJ1Y3Qgc3RyaW5nYXJyYXkgKiBxOwotICAgIGNoYXIgKiogYXJncyA9IE5VTEw7 Ci0jZW5kaWYgLyogVVNFX0NLVVBUWV9DICovCi0KLSAgICBpbl9zdGF0ZSA9IDA7CQkJLyogTm8g cHJldmlvdXMgY2hhcmFjdGVyIHlldCAqLwotCi0gICAgaWYgKHR0eWZkID09IC0xKSB7Ci0JcHJp bnRmKCI/U29ycnksIGNvbW11bmljYXRpb24gY2hhbm5lbCBpcyBub3Qgb3BlblxuIik7Ci0JcmV0 dXJuKDApOwotICAgIH0gZWxzZSB7Ci0JaGF2ZV9uZXQgPSAxOwotICAgIH0KLSAgICBpZiAobm9w dXNoKSB7Ci0JZGVidWcoRjEwMCwidHRwdHljbWQgZmFpbDogbm9wdXNoIiwiIiwwKTsKLQlyZXR1 cm4oMCk7Ci0gICAgfQotICAgIGlmICghcykgcyA9ICIiOwkJCS8qIERlZmVuc2UgZGUgYm9ndXMg YXJndW1lbnRzICovCi0gICAgaWYgKCEqcykgcmV0dXJuKDApOwotICAgIHBleGl0c3RhdCA9IC0x OwkJCS8qIEZvcmsgcHJvY2VzcyBleGl0IHN0YXR1cyAqLwotCi0jaWZkZWYgVE5DT0RFCi0gICAg aXNfdG4gPSAoeGxvY2FsICYmIG5ldGNvbm4gJiYgSVNfVEVMTkVUKCkpIHx8IC8qIFRlbG5ldCBw cm90b2NvbCBhY3RpdmUgKi8KLQkgICAgKCF4bG9jYWwgJiYgc3N0ZWxuZXQpOwotI2VuZGlmIC8q IFROQ09ERSAqLwotCi0gICAgZGVidWcoRjExMCwidHRwdHljbWQgY29tbWFuZCIscywwKTsKLSAg ICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCB0dHlmZCIsIiIsdHR5ZmQpOwotICAgIGRlYnVnKEYxMDEs InR0cHR5Y21kIGlzX3RuIiwiIixpc190bik7Ci0gICAgZGVidWcoRjEwMSwidHRwdHljbWQgY2tl cm1pdCBwaWQiLCIiLGdldHBpZCgpKTsKLQotI2lmZGVmIFVTRV9DS1VQVFlfQwotICAgIC8qIENh bGwgY2t1cHR5LmMgbW9kdWxlIHRvIGdldCBhbmQgc2V0IHVwIHRoZSBwdHkgZm9yayAqLwotICAg IC8qIGZjIDEgPT0gInJ1biBhbiBleHRlcm5hbCBwcm90b2NvbCIgKi8KLSAgICBkZWJ1ZyhGMTAw LCJ0dHB0eWNtZCB1c2luZyBja3VwdHkuYyIsIiIsMCk7Ci0gICAgaWYgKGRvX3B0eSgmcHR5ZmQs cywxKSA8IDApIHsJLyogU3RhcnQgdGhlIGNvbW1hbmQgb24gYSBwdHkgKi8KLQlkZWJ1ZyhGMTAw LCJ0dHB0eWNtZCBkb19wdHkgZmFpbHMiLCIiLDApOwotCXJldHVybigwKTsKLSAgICB9Ci0gICAg bWFzdGVyZmQgPSBwdHlmZDsKLSAgICBwdHlfbWFzdGVyX2ZkID0gcHR5ZmQ7Ci0jaWZkZWYgQ09N TUVOVAotICAgIHNsYXZlZmQgPSBwdHlfc2xhdmVfZmQ7CQkvKiBUaGlzIGlzIG5vdCB2aXNpYmxl IHRvIHVzICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIGRlYnVnKEYxMTEsInR0cHR5Y21k IHB0eWZkIiwiVVNFX0NLVVBUWV9DIixwdHlmZCk7Ci0gICAgZGVidWcoRjExMSwidHRwdHljbWQg bWFzdGVyZmQiLCJVU0VfQ0tVUFRZX0MiLG1hc3RlcmZkKTsKLSAgICBkZWJ1ZyhGMTExLCJ0dHB0 eWNtZCBmb3JrIHBpZCIsIlVTRV9DS1VQVFlfQyIscHR5X2ZvcmtfcGlkKTsKLSNpZm5kZWYgU09M QVJJUwotICAgIC8qICJpb2N0bCBpbmFwcHJvcHJpYXRlIG9uIGRldmljZSIgZm9yIHB0eSBtYXN0 ZXIgKi8KLSAgICBwdHlfbWFrZV9yYXcobWFzdGVyZmQpOwotI2VuZGlmIC8qIFNPTEFSSVMgKi8K LQotI2Vsc2UgLyogVVNFX0NLVVBUWV9DICovCi0KLSAgICBkZWJ1ZyhGMTAwLCJ0dHB0eWNtZCBP UEVOUFRZIiwiIiwwKTsKLSAgICBpZiAodGNnZXRhdHRyKDAsICZ0ZXJtKSA9PSAtMSkgewkvKiBH ZXQgY29udHJvbGxpbmcgdGVybWluYWwncyBtb2RlcyAqLwotCXBlcnJvcigidGNnZXRhdHRyIik7 Ci0JcmV0dXJuKDApOwotICAgIH0KLSAgICBpZiAoaW9jdGwoMCwgVElPQ0dXSU5TWiwgKGNoYXIg KikgJnR3aW4pID09IC0xKSB7IC8qIGFuZCB3aW5kb3cgc2l6ZSAqLwotCXBlcnJvcigiaW9jdGwg VElPQ0dXSU5TWiIpOwotCXJldHVybigwKTsKLSAgICB9Ci0gICAgaWYgKG9wZW5wdHkoJm1hc3Rl cmZkLCAmc2xhdmVmZCwgTlVMTCwgTlVMTCwgTlVMTCkgPT0gLTEpIHsKLQlkZWJ1ZyhGMTAxLCJ0 dHB0eWNtZCBvcGVucHR5IGZhaWxlZCBlcnJubyIsIiIsZXJybm8pOwotCXBlcnJvcigib3BlbnRw eSIpOwotCXJldHVybigwKTsKLSAgICB9Ci0gICAgZGVidWcoRjEwMSwidHRwdHljbWQgb3BlbnB0 eSBtYXN0ZXJmZCIsIiIsbWFzdGVyZmQpOwotICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIG9wZW5w dHkgc2xhdmVmZCIsIiIsc2xhdmVmZCk7Ci0gICAgcHR5X21hc3Rlcl9mZCA9IG1hc3RlcmZkOwot ICAgIHB0eV9zbGF2ZV9mZCA9IHNsYXZlZmQ7Ci0gICAgZGVidWcoRjEwMSwidHRwdHljbWQgb3Bl bnB0eSBwdHlfbWFzdGVyX2ZkIiwiIixwdHlfbWFzdGVyX2ZkKTsKLQotICAgIC8qIFB1dCBwdHkg bWFzdGVyIGluIHJhdyBtb2RlIGJ1dCBsZXQgZm9ya2VkIGFwcCBjb250cm9sIHRoZSBzbGF2ZSAq LwotICAgIHB0eV9tYWtlX3JhdyhtYXN0ZXJmZCk7Ci0KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYg VElPQ1JFTU9URQotICAgIC8qIFRJT0NSRU1PVEUsMCA9IGRpc2FibGUgYWxsIHRlcm1pbyBwcm9j ZXNzaW5nICovCi0gICAgeCA9IGlvY3RsKG1hc3RlcmZkLCBUSU9DUkVNT1RFLCAxKTsKLSAgICBk ZWJ1ZyhGMTExLCJ0dHB0eWNtZCBpb2N0bCBUSU9DUkVNT1RFIixja2l0b2EoeCksZXJybm8pOwot I2VuZGlmCS8qIFRJT0NSRU1PVEUgKi8KLSNpZmRlZiBUSU9DVFRZCi0gICAgLyogVElPQ1RUWSww ID0gZGlzYWJsZSBhbGwgdGVybWlvIHByb2Nlc3NpbmcgKi8KLSAgICB4ID0gaW9jdGwobWFzdGVy ZmQsIFRJT0NUVFksIDApOwotICAgIGRlYnVnKEYxMTEsInR0cHR5Y21kIGlvY3RsIFRJT0NUVFki LGNraXRvYSh4KSxlcnJubyk7Ci0jZW5kaWYJLyogVElPQ1RUWSAqLwotI2VuZGlmIC8qIENPTU1F TlQgKi8KLQotICAgIGhhdmVfcHR5ID0gMTsJCQkvKiBXZSBoYXZlIGFuIG9wZW4gcHR5ICovCi0g ICAgc2F2ZV9zaWdjaGxkID0gc2lnbmFsKFNJR0NITEQsIHNpZ2NobGRfaGFuZGxlcik7IC8qIENh dGNoIGZvcmsgcXVpdCAqLwotCi0gICAgcHR5X2ZvcmtfcGlkID0gZm9yaygpOwkJLyogTWFrZSBm b3JrIGZvciBleHRlcm5hbCBwcm90b2NvbCAqLwotICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIHB0 eV9mb3JrX3BpZCIsIiIscHR5X2ZvcmtfcGlkKTsKLSAgICBpZiAocHR5X2ZvcmtfcGlkID09IC0x KSB7Ci0JcGVycm9yKCJmb3JrIik7Ci0JcmV0dXJuKDApOwotICAgIH0gZWxzZSBpZiAocHR5X2Zv cmtfcGlkID09IDApIHsJLyogSW4gbmV3IGZvcmsgKi8KLQlpbnQgeDsKLQlkZWJ1ZyhGMTAxLCJ0 dHB0eWNtZCBuZXcgZm9yayBwaWQiLCIiLGdldHBpZCgpKTsKLQljbG9zZShtYXN0ZXJmZCk7CQkv KiBTbGF2ZSBxdWFydGVycyBubyBtYXN0ZXJzIGFsbG93ZWQgKi8KLQl4ID0gc2V0c2lkKCk7Ci0J ZGVidWcoRjEwMSwidHRwdHljbWQgbmV3IGZvcmsgc2V0c2lkIiwiIix4KTsKLQlpZiAoeCA9PSAt MSkgewotCSAgICBwZXJyb3IoInR0cHR5Y21kIHNldHNpZCIpOwotCSAgICBleGl0KDEpOwotCX0K LQlzaWduYWwoU0lHSU5ULFNJR19JR04pOwkJLyogTGV0IHVwcGVyIGZvcmsgY2F0Y2ggdGhpcyAq LwotCQotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBUSU9DU0NUVFkKLQkvKiBNYWtlIHB0eSB0aGUg Y29udHJvbGxpbmcgdGVybWluYWwgZm9yIHRoZSBwcm9jZXNzICovCi0JLyogVEhJUyBDQVVTRVMg QU4gSU5GSU5JVEUgU0lHV0lOQ0ggSU5URVJSVVBUIExPT1AgKi8KLQl4ID0gaW9jdGwoc2xhdmVm ZCwgVElPQ1NDVFRZLCBOVUxMKTsKLQlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBUSU9DU0NUVFkiLCIi LHgpOwotI2VuZGlmCS8qIFRJT0NTQ1RUWSAqLwotI2VuZGlmCS8qIENPTU1FTlQgKi8KLQotCS8q IEluaXRpYWxpemUgc2xhdmUgcHR5IG1vZGVzIGFuZCBzaXplIHRvIHRob3NlIG9mIG91ciB0ZXJt aW5hbCAqLwotCWlmICh0Y3NldGF0dHIoc2xhdmVmZCwgVENTQU5PVywgJnRlcm0pID09IC0xKSB7 Ci0JICAgIHBlcnJvcigidHRwdHljbWQgdGNzZXRhdHRyIik7Ci0JICAgIGV4aXQoMSk7Ci0JfQot CWlmIChpb2N0bChzbGF2ZWZkLCBUSU9DU1dJTlNaLCAmdHdpbikgPT0gLTEpIHsKLQkgICAgcGVy cm9yKCJ0dHB0eWNtZCBpb2N0bCIpOwotCSAgICBleGl0KDEpOwotCX0KLSNpZmRlZiBDT01NRU5U Ci0jaWZkZWYgVElPQ05PVFRZCi0JLyogRGlzYXNzb2NpYXRlIHRoaXMgcHJvY2VzcyBmcm9tIGl0 cyB0ZXJtaW5hbCAqLwotCS8qIFRISVMgSEFTIE5PIEVGRkVDVCAqLwotCXggPSBpb2N0bChzbGF2 ZWZkLCBUSU9DTk9UVFksIE5VTEwpOwotCWRlYnVnKEYxMDEsInR0cHR5Y21kIFRJT0NOT1RUWSIs IiIseCk7Ci0jZW5kaWYJLyogVElPQ05PVFRZICovCi0jZW5kaWYJLyogQ09NTUVOVCAqLwotCi0j aWZkZWYgQ09NTUVOVAotI2lmZGVmIFNJR1RUT1UJCi0JLyogSWdub3JlIHRlcm1pbmFsIG91dHB1 dCBpbnRlcnJ1cHRzICovCi0JLyogVEhJUyBIQVMgTk8gRUZGRUNUICovCi0JZGVidWcoRjEwMCwi dHRwdHljbWQgaWdub3JpbmcgU0lHVFRPVSIsIiIsMCk7Ci0Jc2lnbmFsKFNJR1RUT1UsIFNJR19J R04pOwotI2VuZGlmCS8qIFNJR1RUT1UgKi8KLSNpZmRlZiBTSUdUU1RQCQotCS8qIElnbm9yZSB0 ZXJtaW5hbCBvdXRwdXQgaW50ZXJydXB0cyAqLwotCS8qIFRISVMgSEFTIE5PIEVGRkVDVCAqLwot CWRlYnVnKEYxMDAsInR0cHR5Y21kIGlnbm9yaW5nIFNJR1RTVFAiLCIiLDApOwotCXNpZ25hbChT SUdUU1RQLCBTSUdfSUdOKTsKLSNlbmRpZgkvKiBTSUdUU1RQICovCi0jZW5kaWYJLyogQ09NTUVO VCAqLwotCi0JcHR5X21ha2VfcmF3KHNsYXZlZmQpOwkJLyogUHV0IGl0IGluIHJhd21vZGUgKi8K LQotCWVycm5vID0gMDsKLQlpZiAoZHVwMihzbGF2ZWZkLCBTVERJTl9GSUxFTk8pICE9IFNURElO X0ZJTEVOTyB8fAotCSAgICBkdXAyKHNsYXZlZmQsIFNURE9VVF9GSUxFTk8pICE9IFNURE9VVF9G SUxFTk8pIHsKLQkgICAgZGVidWcoRjEwMSwidHRwdHljbWQgbmV3IGZvcmsgZHVwMiBlcnJvciIs IiIsZXJybm8pOwotCSAgICBwZXJyb3IoInR0cHR5Y21kIGR1cDIiKTsKLQkgICAgZXhpdCgxKTsK LQl9Ci0JZGVidWcoRjEwMCwidHRwdHljbWQgbmV3IGZvcmsgZHVwMiBvayIsIiIsMCk7Ci0KLQkv KiBQYXJzZSBleHRlcm5hbCBwcm90b2NvbCBjb21tYW5kIGxpbmUgKi8KLQlxID0gY2tzcGxpdCgx LDAscyxOVUxMLCJcXCVbXSYkKy0vPSpeX0Ahe30vPD58LiN+J2A6Oz8iLDcsMCwwKTsKLQlpZiAo IXEpIHsKLQkgICAgZGVidWcoRjEwMCwidHRwdHljbWQgY2tzcGxpdCBmYWlsZWQiLCIiLDApOwot CSAgICBleGl0KDEpOwotCX0gZWxzZSB7Ci0JICAgIGludCBpLCBuOwotCSAgICBkZWJ1ZyhGMTAw LCJ0dHB0eWNtZCBja3NwbGl0IG9rIiwiIiwwKTsKLQkgICAgbiA9IHEtPmFfc2l6ZTsKLQkgICAg YXJncyA9IHEtPmFfaGVhZCArIDE7Ci0JICAgIGZvciAoaSA9IDA7IGkgPD0gbjsgaSsrKSB7Ci0J CWlmICghYXJnc1tpXSkgewotCQkgICAgYnJlYWs7Ci0JCX0gZWxzZSB7Ci0JCSAgICAvKiBzb21l dGltZXMgY2tzcGxpdCgpIGRvZXNuJ3QgdGVybWluYXRlIHRoZSBsaXN0ICovCi0JCSAgICBpZiAo KGkgPT0gbikgJiYgYXJnc1tpXSkgewotCQkJaWYgKChpbnQpc3RybGVuKGFyZ3NbaV0pID09IDAp Ci0JCQkgIG1ha2VzdHIoJihhcmdzW2ldKSxOVUxMKTsKLQkJICAgIH0KLQkJfQotCSAgICB9CSAg ICAKLQl9Ci0jaWZkZWYgQ09NTUVOVAotLyoKLSAgUHV0dGluZyB0aGUgc2xhdmUgcHR5IGluIHJh d21vZGUgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgYmVjYXVzZSB0aGUKLSAgZXh0ZXJuYWwgcHJv dG9jb2wgcHJvZ3JhbSBpcyBzdXBwb3NlZCB0byBkbyB0aGF0IGl0c2VsZi4gIFlldCBkb2luZyB0 aGlzCi0gIGhlcmUgY3V0cyBkb3duIG9uIFptb2RlbSBiaW5hcnktZmlsZSB0cmFuc21pc3Npb24g ZXJyb3JzIGJ5IDMwLTUwJSBidXQKLSAgc3RpbGwgZG9lc24ndCBlbGltaW5hdGUgdGhlbS4KLSov Ci0JcHR5X21ha2VfcmF3KFNURElOX0ZJTEVOTyk7Ci0JcHR5X21ha2VfcmF3KFNURE9VVF9GSUxF Tk8pOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotCWRlYnVnKEYxMDAsInR0cHR5Y21kIGV4ZWN2 cCdpbmcgZXh0ZXJuYWwgcHJvdG9jb2wiLCIiLDApOwotCWV4ZWN2cChhcmdzWzBdLGFyZ3MpOwot CXBlcnJvcigiZXhlY3ZwIGZhaWxlZCIpOwotCWRlYnVnKEYxMDEsInR0cHR5Y21kIGV4ZWN2cCBm YWlsZWQiLCIiLGVycm5vKTsKLQljbG9zZShzbGF2ZWZkKTsKLQlleGl0KDEpOwotICAgIH0gCi0g ICAgLyogKHRoZXJlIGFyZSBiZXR0ZXIgd2F5cyB0byBkbyB0aGlzLi4uKSAqLwotICAgIG1zbGVl cCgxMDAwKTsJCSAgLyogTWFrZSBwYXJlbnQgd2FpdCBmb3IgY2hpbGQgdG8gYmUgcmVhZHkgKi8K LSAgICBwdHlmZCA9IG1hc3RlcmZkOwkJCS8qIFdlIHRhbGsgdG8gdGhlIG1hc3RlciAqLwotCi0j ZW5kaWYgLyogVVNFX0NLVVBUWV9DICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBwdHlm ZCIsIiIscHR5ZmQpOwotICAgIGlmIChwdHlmZCA8IDApIHsKLQlwcmludGYoIj9GYWlsdXJlIHRv IGdldCBwdHlcbiIpOwotCXJldHVybigtOSk7Ci0gICAgfQotICAgIGhhdmVfcHR5ID0gMTsJICAg ICAgLyogV2UgaGF2ZSBhbiBvcGVuIHB0eSBvciB3ZSB3b3VsZG4ndCBoZSBoZXJlICovCi0KLSAg ICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBQVFlfUEJVRl9TSVpFIiwiIixQVFlfUEJVRl9TSVpFKTsK LSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBQVFlfVEJVRl9TSVpFIiwiIixQVFlfVEJVRl9TSVpF KTsKLQotI2lmZGVmIFBUWV9VU0VfTkRFTEFZCi0gICAgLyogCi0gICAgICAgTk9URTogSWYgc2Vs ZWN0KCkgYW5kIGlvY3RsKHB0eWZkLEZJT05SRUFELCZuKSByZXR1cm4gdHJ1ZSBpbmRpY2F0aW9u cwotICAgICAgIG9uIHRoZSBwdHksIHdlIGRvbid0IG5lZWQgbm9uYmxvY2tpbmcgcmVhZHMuICBQ ZXJmb3JtYW5jZSBvZiBlaXRoZXIKLSAgICAgICBtZXRob2Qgc2VlbXMgdG8gYmUgYWJvdXQgdGhl IHNhbWUsIHNvIHVzZSB3aGF0ZXZlciB3b3Jrcy4KLSAgICAqLwotICAgIGVycm5vID0gMDsKLSAg ICB4ID0gZmNudGwocHR5ZmQsRl9TRVRGTCxmY250bChwdHlmZCxGX0dFVEZMLCAwKXxPX05ERUxB WSk7Ci0gICAgY2ttYWttc2cobXNnYnVmLDUwMCwKLQkgICAgICJ0dHB0eWNtZCBzZXQgT19OREVM QVkgZXJybm89IiwKLQkgICAgIGNraXRvYShlcnJubyksCi0JICAgICAiIGZjbnRsPSIsCi0JICAg ICBja2l0b2EoeCkpOwotICAgIGRlYnVnKEYxMDAsbXNnYnVmLCIiLDApOwotI2VuZGlmIC8qIFBU WV9VU0VfTkRFTEFZICovCi0KLSNpZmRlZiBDT01NRU5UCi0vKiBOb3QgbmVjZXNzYXJ5LCB0aGUg cHJvdG9jb2wgbW9kdWxlIGFscmVhZHkgZGlkIHRoaXMgKi8KLQotI2lmZGVmIFVTRV9DRk1BS0VS QVcKLSAgICBpZiAodGNnZXRhdHRyKHR0eWZkLCAmdGVybSkgPiAtMSkgewotCWNmbWFrZXJhdygm dGVybSk7Ci0JZGVidWcoRjEwMSwidHRwdHljbWQgbmV0IGNmbWFrZXJhdyBlcnJubyIsIiIsZXJy bm8pOwotCXggdGNzZXRhdHRyKHR0eWZkLCBUQ1NBTk9XLCAmdGVybSk7Ci0JZGVidWcoRjEwMSwi dHRwdHljbWQgbmV0IHRjc2V0YXR0ciIsIiIseCk7Ci0JZGVidWcoRjEwMSwidHRwdHljbWQgbmV0 IHRjc2V0YXR0ciIsIiIsZXJybm8pOwotICAgIH0KLSNlbHNlCi0gICAgaWYgKGxvY2FsKQkJCQkv KiBQdXQgbmV0d29yayBjb25uZWN0aW9uIGluICovCi0gICAgICB0dHBrdCh0dHNwZWVkLHR0Zmxv dyx0dHBydHkpOwkvKiAicGFja2V0IG1vZGUiLiAqLwotICAgIGVsc2UKLSAgICAgIGNvbmJpbigo Y2hhcillc2NjaHIpOwkJLyogT1IuLi4gcHR5X21ha2VfcmF3KDApICovCi0jZW5kaWYgLyogVVNF X0NGTUFLRVJBVyAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2lmZGVmIFROQ09ERQotICAg IGlmIChpc190bikgewotICAgICAgZGVidWcoRjEwMSwiPDw8IHR0cHR5Y21kIFRFTE9QVF9NRV9C SU5BUlkiLCIiLFRFTE9QVF9NRShURUxPUFRfQklOQVJZKSk7Ci0gICAgICBkZWJ1ZyhGMTAxLCI8 PDwgdHRwdHljbWQgVEVMT1BUX1VfQklOQVJZIiwiIixURUxPUFRfVShURUxPUFRfQklOQVJZKSk7 Ci0gICAgfQotI2VuZGlmIC8qIFROQ09ERSAqLwotCi0gICAgZGVidWcoRjEwMSwidHRwdHljbWQg ZW50ZXJpbmcgbG9vcCAtIHNlY29uZHNfdG9fd2FpdCIsIiIsc2Vjb25kc190b193YWl0KTsKLQot ICAgIHdoaWxlIChoYXZlX3B0eSB8fCBoYXZlX25ldCkgewotCUZEX1pFUk8oJmluKTsJCQkvKiBJ bml0aWFsaXplIHNlbGVjdCgpIHN0cnVjdHMgKi8KLQlGRF9aRVJPKCZvdXQpOwotCUZEX1pFUk8o JmVycik7CQkJLyogKG5vdCB1c2VkIGJlY2F1c2UgdXNlbGVzcykgKi8KLQluZmRzID0gLTE7Ci0K LQlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBsb29wIHRvcCBoYXZlX3B0eSIsIiIsaGF2ZV9wdHkpOwot CWRlYnVnKEYxMDEsInR0cHR5Y21kIGxvb3AgdG9wIGhhdmVfbmV0IiwiIixoYXZlX25ldCk7Ci0K LQkvKiBQdHkgaXMgb3BlbiBhbmQgd2UgaGF2ZSByb29tIHRvIHJlYWQgZnJvbSBpdD8gKi8KLQlp ZiAoaGF2ZV9wdHkgJiYgcGJ1Zl9hdmFpbCA8IFBUWV9QQlVGX1NJWkUpIHsKLQkgICAgZGVidWco RjEwMCwidHRwdHljbWQgRkRfU0VUIHB0eWZkIGluIiwiIiwwKTsKLSAgICAgICAgICAgIEZEX1NF VChwdHlmZCwgJmluKTsKLQkgICAgbmZkcyA9IHB0eWZkOwotICAgICAgICB9Ci0JLyogTmV0d29y ayBpcyBvcGVuIGFuZCB3ZSBoYXZlIHJvb20gdG8gcmVhZCBmcm9tIGl0PyAqLwotICAgICAgICBp ZiAoaGF2ZV9uZXQgJiYgaGF2ZV9wdHkgJiYgdGJ1Zl9hdmFpbCA8IFBUWV9UQlVGX1NJWkUpIHsK LQkgICAgZGVidWcoRjEwMCwidHRwdHljbWQgRkRfU0VUIHR0eWZkIGluIiwiIiwwKTsKLSAgICAg ICAgICAgIEZEX1NFVCh0dHlmZCwgJmluKTsKLQkgICAgaWYgKHR0eWZkID4gbmZkcykgbmZkcyA9 IHR0eWZkOwotICAgICAgICB9Ci0JLyogUHR5IGlzIG9wZW4gYW5kIHdlIGhhdmUgc3R1ZmYgdG8g d3JpdGUgdG8gaXQ/ICovCi0gICAgICAgIGlmIChoYXZlX3B0eSAmJiB0YnVmX2F2YWlsIC0gdGJ1 Zl93cml0dGVuID4gMCkgewotCSAgICBkZWJ1ZyhGMTAwLCJ0dHB0eWNtZCBGRF9TRVQgcHR5ZmQg b3V0IiwiIiwwKTsKLSAgICAgICAgICAgIEZEX1NFVCAocHR5ZmQsICZvdXQpOwotCSAgICBpZiAo cHR5ZmQgPiBuZmRzKSBuZmRzID0gcHR5ZmQ7Ci0gICAgICAgIH0KLQkvKiBOZXQgaXMgb3BlbiBh bmQgd2UgaGF2ZSBzdHVmZiB0byB3cml0ZSB0byBpdD8gKi8KLQlkZWJ1ZyhGMTAxLCJ0dHB0eWNt ZCBwYnVmX2F2YWlsLXBidWZfd3JpdHRlbiIsIiIsCi0JICAgICAgcGJ1Zl9hdmFpbCAtIHBidWZf d3JpdHRlbik7Ci0gICAgICAgIGlmIChoYXZlX25ldCAmJiBwYnVmX2F2YWlsIC0gcGJ1Zl93cml0 dGVuID4gMCkgewotCSAgICBkZWJ1ZyhGMTAwLCJ0dHB0eWNtZCBGRF9TRVQgdHR5ZmQgb3V0Iiwi IiwwKTsKLSAgICAgICAgICAgIEZEX1NFVCAodHR5ZmQsICZvdXQpOwotCSAgICBpZiAodHR5ZmQg PiBuZmRzKSBuZmRzID0gdHR5ZmQ7Ci0gICAgICAgIH0KLQkvKiBXZSBkb24ndCB1c2UgZXJyIGJl Y2F1c2UgaXQncyBub3QgcmVhbGx5IGZvciBlcnJvcnMsICovCi0JLyogYnV0IGZvciBvdXQgb2Yg YmFuZCBkYXRhIG9uIHRoZSBUQ1Agc29ja2V0LCB3aGljaCwgaWYgaXQgaXMgKi8KLQkvKiB0byBi ZSBoYW5kbGVkIGF0IGFsbCwgaXMgaGFuZGxlZCBpbiB0aGUgdHQqKCkgcm91dGluZXMgKi8KLQot CW5mZHMrKzsJCQkJLyogMC1iYXNlZCB0byAxLWJhc2VkICovCi0JZGVidWcoRjEwMSwidHRwdHlj bWQgbmZkcyIsIiIsbmZkcyk7Ci0JaWYgKCFuZmRzKSB7Ci0JICAgIGRlYnVnKEYxMDAsInR0cHR5 Y21kIE5PIEZEcyBzZXQgZm9yIHNlbGVjdCIsIiIsMCk7Ci0JICAgIGlmIChoYXZlX3B0eSkgewot CQkvKiBUaGlzIGlzIG5vdCByaWdodCAtLSBzbGVlcGluZyB3b24ndCBhY2NvbXBsaXNoIGFueXRo aW5nICovCi0JCWRlYnVnKEYxMDEsInR0cHR5Y21kIG1zbGVlcCIsIiIsMTAwKTsKLQkJbXNsZWVw KDEwMCk7CSAgICAKLQkgICAgfSBlbHNlIHsKLQkJZGVidWcoRjEwMCwidHRwdHljbWQgbm8gcHR5 IC0gcXVpdHRpbmcgbG9vcCIsIiIsMCk7Ci0JCWJyZWFrOwotCSAgICB9Ci0JfQotCWVycm5vID0g MDsKLQotCWlmIChzZWNvbmRzX3RvX3dhaXQgPiAwTCkgewkvKiBUaW1lb3V0IGluIGNhc2Ugbm90 aGluZyBoYXBwZW5zICovCi0JICAgIHR2LnR2X3NlYyA9IHNlY29uZHNfdG9fd2FpdDsgLyogZm9y IGEgbG9uZyB0aW1lICovCi0JICAgIHR2LnR2X3VzZWMgPSAwTDsJCQotCSAgICB0djIgPSAmdHY7 Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0djIgPSBOVUxMOwotCX0KLQl4ID0gc2Vs ZWN0KG5mZHMsICZpbiwgJm91dCwgTlVMTCwgdHYyKTsKLQlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBz ZWxlY3QiLCIiLHgpOwotCWlmICh4IDwgMCkgewotCSAgICBpZiAoZXJybm8gPT0gRUlOVFIpCi0J ICAgICAgY29udGludWU7Ci0JICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIHNlbGVjdCBlcnJvciIs IiIsZXJybm8pOwotCSAgICBicmVhazsKLQl9Ci0JaWYgKHggPT0gMCkgewotCSAgICBkZWJ1ZyhG MTAxLCJ0dHB0eWNtZCArKysgc2VsZWN0IHRpbWVvdXQiLCIiLHNlY29uZHNfdG9fd2FpdCk7IAot CSAgICBpZiAoaGF2ZV9wdHkpIHsKLQkJc3RhdHVzID0gcHR5X2dldF9zdGF0dXMocHR5ZmQscHR5 X2ZvcmtfcGlkKTsKLQkJZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2dldF9zdGF0dXMgQSIsIiIs c3RhdHVzKTsKLQkJaWYgKHN0YXR1cyA+IC0xKSBwZXhpdHN0YXQgPSBzdGF0dXM7Ci0JCWhhdmVf cHR5ID0gMDsKLQkgICAgfQotCSAgICBicmVhazsKLQl9Ci0JLyogV2Ugd2FudCB0byBoYW5kbGUg YW55IHBlbmRpbmcgd3JpdGVzIGZpcnN0IHRvIG1ha2Ugcm9vbSAqLwotCS8qIGZvciBuZXcgaW5j b21pbmcuICovCi0KLQlpZiAoRkRfSVNTRVQodHR5ZmQsICZvdXQpKSB7CS8qIENhbiB3cml0ZSB0 byBuZXQ/ICovCi0JICAgIENIQVIgKiBzOwotCSAgICBzID0gcGJ1ZiArIHBidWZfd3JpdHRlbjsJ LyogQ3VycmVudCBzcG90IGZvciBzZW5kaW5nICovCi0jaWZkZWYgVE5DT0RFCi0JICAgIGlmIChp c190bikgewkJLyogdHRvbCgpIGRvZXNuJ3QgZG91YmxlIElBQ3MgKi8KLQkJQ0hBUiBjOwkJCS8q IFJld3JpdGUgc3RyaW5nIHdpdGggSUFDcyBkb3VibGVkICovCi0JCWludCBpOwotCQlzID0gcGJ1 ZiArIHBidWZfd3JpdHRlbjsgLyogU291cmNlICovCi0JCXggPSAwOwkJIAkgLyogQ291bnQgKi8K LQkJZm9yIChpID0gMDsgaSA8IHBidWZfYXZhaWwgLSBwYnVmX3dyaXR0ZW47IGkrKykgewotCQkg ICAgYyA9IHNbaV07CQkvKiBOZXh0IGNoYXJhY3RlciAqLwotCQkgICAgaWYgKGMgPT0gSUFDKSB7 CS8qIElmIGl0J3MgSUFDICovCi0JCQlkYnVmW3grK10gPSBjOwkvKiBwdXQgYW5vdGhlciBvbmUg Ki8KLQkJCWRlYnVnKEYwMDAsIj4+PiBRVU9URUQgSUFDIiwiIixjKTsKLQkJICAgIH0gZWxzZSBp ZiAoYyAhPSAweDBhICYmIG91dF9wcmV2ID09IDB4MGQpIHsJLyogQmFyZSBDUiAqLwotCQkJaWYg KCFURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkpIHsgLyogTlZUIHJ1bGUgKi8KLQkJCSAgICBjID0g MHgwMDsKLQkJCSAgICBkYnVmW3grK10gPSBjOwotCQkJICAgIGRlYnVnKEYwMDAsIj4+PiBDUi1O VUwiLCIiLGMpOwotCQkJfQkJCQotCQkgICAgfQotCQkgICAgZGJ1Zlt4KytdID0gYzsJLyogQ29w eSBhbmQgY291bnQgaXQgKi8KLQkJICAgIGRlYnVnKEYwMDAsIj4+PiBjaGFyIixja2l0b2EoaW5f c3RhdGUpLGMpOwotCQkgICAgb3V0X3ByZXYgPSBjOwotCQl9Ci0JCXMgPSBkYnVmOwkJLyogTmV3 IHNvdXJjZSAqLwotCSAgICB9IGVsc2UKLSNlbmRpZiAvKiBUTkNPREUgKi8KLQkgICAgICB4ID0g cGJ1Zl9hdmFpbCAtIHBidWZfd3JpdHRlbjsgLyogSG93IG11Y2ggdG8gc2VuZCAqLwotCi0JICAg IGRlYnVnKEYxMDEsInR0cHR5Y21kIGJ5dGVzIHRvIHNlbmQiLCIiLHgpOwotCSAgICB4ID0gdHRv bChzLCB4KTsKLQkgICAgZGVidWcoRjEwMSwiPj4+IHR0b2wiLCIiLHgpOwotCSAgICBpZiAoeCA8 IDApIHsKLQkJbmV0X2VycisrOwotCQlkZWJ1ZyhGMTExLCJ0dHB0eWNtZCB0dG9sIGVycm9yIixj a2l0b2EoeCksZXJybm8pOwotCQl4ID0gMDsKLQkgICAgfQotCSAgICB3cml0ZV9uZXRfYnl0ZXMg Kz0geDsKLQkgICAgcGJ1Zl93cml0dGVuICs9IHg7Ci0JfQotCWlmIChGRF9JU1NFVChwdHlmZCwg Jm91dCkpIHsJLyogQ2FuIHdyaXRlIHRvIHB0eT8gKi8KLQkgICAgZGVidWcoRjEwMCwidHRwdHlj bWQgRkRfSVNTRVQgcHR5ZmQgb3V0IiwiIiwwKTsKLQkgICAgZXJybm8gPSAwOwotI2lmbmRlZiBD T01NRU5UCi0JICAgIHggPSB3cml0ZShwdHlmZCx0YnVmICsgdGJ1Zl93cml0dGVuLHRidWZfYXZh aWwgLSB0YnVmX3dyaXR0ZW4pOwotI2Vsc2UKLQkgICAgLyogQnl0ZSBsb29wIHRvIHJ1bGUgb3V0 IGRhdGEgb3ZlcnJ1bnMgaW4gdGhlIHB0eSAqLwotCSAgICAvKiAoaXQgbWFrZXMgbm8gZGlmZmVy ZW5jZSkgKi8KLQkgICAgewotCQljaGFyICpwID0gdGJ1Zit0YnVmX3dyaXR0ZW47Ci0JCWludCBu ID0gdGJ1Zl9hdmFpbCAtIHRidWZfd3JpdHRlbjsKLQkJZm9yICh4ID0gMDsgeCA8IG47IHgrKykg ewotCQkgICAgbXNsZWVwKDEwKTsKLQkJICAgIGlmICh3cml0ZShwdHlmZCwmKHBbeF0pLDEpIDwg MCkKLQkJICAgICAgYnJlYWs7Ci0JCX0KLQkgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkg ICAgZGVidWcoRjExMSwidHRwdHljbWQgcHR5ZmQgd3JpdGUiLGNraXRvYShlcnJubykseCk7Ci0J ICAgIGlmICh4ID4gMCkgewotCQl0YnVmX3dyaXR0ZW4gKz0geDsKLQkJd3JpdGVfcHR5X2J5dGVz ICs9IHg7Ci0JICAgIH0gZWxzZSB7Ci0JCXggPSAwOwotCQlwdHlfZXJyKys7Ci0JCWlmIChwZXhp dHN0YXQgPCAwKSB7Ci0JCSAgICBzdGF0dXMgPSBwdHlfZ2V0X3N0YXR1cyhwdHlmZCxwdHlfZm9y a19waWQpOwotCQkgICAgZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2dldF9zdGF0dXMgQiIsIiIs c3RhdHVzKTsKLQkJICAgIGlmIChzdGF0dXMgPiAtMSkgcGV4aXRzdGF0ID0gc3RhdHVzOwotCQkg ICAgaGF2ZV9wdHkgPSAwOwotCQl9Ci0JCWRlYnVnKEYxMDAsInR0cHR5Y21kICsrKyBwdHlmZCB3 cml0ZSBlcnJvciIsIiIsMCk7Ci0JICAgIH0KLQl9Ci0JaWYgKEZEX0lTU0VUKHR0eWZkLCAmaW4p KSB7CS8qIENhbiByZWFkIGZyb20gbmV0PyAqLwotCSAgICB0c2V0Kys7Ci0JICAgIGRlYnVnKEYx MDAsInR0cHR5Y21kIEZEX0lTU0VUIHR0eWZkIGluIiwiIiwwKTsKLQkgICAgbiA9IGluX2Noaygx LHR0eWZkKTsKLQkgICAgZGVidWcoRjEwMSwidHRwdHljbWQgaW5fY2hrKHR0eWZkKSIsIiIsbik7 IAotCSAgICBpZiAobiA8IDAgfHwgdHR5ZmQgPT0gLTEpIHsKLQkJZGVidWcoRjEwMSwidHRwdHlj bWQgKysrIHR0eWZkIGVycm5vIiwiIixlcnJubyk7Ci0JCW5ldF9lcnIrKzsKLQkgICAgfSBlbHNl IGlmIChuID4gMCkgewotCQlpZiAobiA+IFBUWV9UQlVGX1NJWkUgLSB0YnVmX2F2YWlsKQotCQkg IG4gPSBQVFlfVEJVRl9TSVpFIC0gdGJ1Zl9hdmFpbDsKLQkJZGVidWcoRjEwMSwidHRwdHljbWQg bmV0IHJlYWQgc2l6ZSBhZGp1c3RlZCIsIiIsbik7IAotCQlpZiAoeGxvY2FsICYmIG5ldGNvbm4p IHsKLQkJICAgIC8qCi0JCSAgICAgIFdlIGhhdmUgdG8gdXNlIGEgYnl0ZSBsb29wIGhlcmUgYmVj YXVzZSB0dHhpbigpCi0JCSAgICAgIGRvZXMgbm90IGRlY3J5cHQgb3IsIGZvciB0aGF0IG1hdHRl ciwgaGFuZGxlIFRlbG5ldC4KLQkJICAgICovCi0JCSAgICBpbnQgYzsKLQkJICAgIENIQVIgKiBw OwotCQkgICAgcCA9IHRidWYgKyB0YnVmX2F2YWlsOwotCQkgICAgZm9yICh4ID0gMDsgeCA8IG47 IHgrKykgewotCQkJaWYgKChjID0gdHRpbmMoMCkpIDwgMCkKLQkJCSAgYnJlYWs7Ci0JCQlpZiAo IWlzX3RuKSB7CS8qIE5vdCBUZWxuZXQgLSBrZWVwIGFsbCBieXRlcyAqLwotCQkJICAgICpwKysg PSAoQ0hBUiljOwotCQkJICAgIGRlYnVnKEYwMDAsIjw8PCBjaGFyIiwiIixjKTsKLSNpZmRlZiBU TkNPREUKLQkJCX0gZWxzZSB7CS8qIFRlbG5ldCAtIG11c3QgaGFuZGxlIElBQyBhbmQgTlZUICov Ci0JCQkgICAgZGVidWcoRjAwMCwiPDw8IGNoYXIiLGNraXRvYShpbl9zdGF0ZSksYyk7Ci0JCQkg ICAgc3dpdGNoIChjKSB7Ci0JCQkgICAgICBjYXNlIDB4MDA6IC8qIE5VTCAqLwotCQkJCWlmIChp bl9zdGF0ZSA9PSBIQVZFX0NSKSB7Ci0JCQkJICAgIGRlYnVnKEYwMDAsIjw8PCBTS0lQIiwiIixj KTsKLQkJCQl9IGVsc2UgewotCQkJCSAgICAqcCsrID0gYzsKLQkJCQkgICAgZGVidWcoRjAwMCwi PDw8IEtlZXAiLCIiLGMpOwotCQkJCX0KLQkJCQlpbl9zdGF0ZSA9IDA7Ci0JCQkJYnJlYWs7Ci0J CQkgICAgICBjYXNlIDB4MGQ6IC8qIENSICovCi0JCQkJaWYgKCFURUxPUFRfVShURUxPUFRfQklO QVJZKSkKLQkJCQkgIGluX3N0YXRlID0gSEFWRV9DUjsKLQkJCQkqcCsrID0gYzsKLQkJCQlkZWJ1 ZyhGMDAwLCI8PDwgS2VlcCIsIiIsYyk7Ci0JCQkJYnJlYWs7Ci0jaWZkZWYgQ09NTUVOVAotCQkJ ICAgICAgY2FzZSAweDBmOiAvKiBDdHJsLU8gKi8KLQkJCSAgICAgIGNhc2UgMHgxNjogLyogQ3Ry bC1WICovCi0JCQkJKnArKyA9IDB4MTY7Ci0JCQkJKnArKyA9IGM7Ci0JCQkJZGVidWcoRjAwMCwi PDw8IFFVT1QiLCIiLGMpOwotCQkJCWJyZWFrOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkJCSAg ICAgIGNhc2UgMHhmZjogLyogSUFDICovCi0JCQkJaWYgKGluX3N0YXRlID09IEhBVkVfSUFDKSB7 Ci0JCQkJICAgIGRlYnVnKEYwMDAsIjw8PCBLRUVQIiwiIixjKTsKLQkJCQkgICAgKnArKyA9IGM7 Ci0JCQkJICAgIGluX3N0YXRlID0gMDsKLQkJCQl9IGVsc2UgewotCQkJCSAgICBkZWJ1ZyhGMDAw LCI8PDwgU0tJUCIsIiIsYyk7Ci0JCQkJICAgIGluX3N0YXRlID0gSEFWRV9JQUM7Ci0JCQkJfQot CQkJCWJyZWFrOwotCQkJICAgICAgZGVmYXVsdDoJLyogQWxsIG90aGVycyAqLwotCQkJCWlmIChp bl9zdGF0ZSA9PSBIQVZFX0lBQykgewotI2lmZGVmIENPTU1FTlQKLS8qCi0gIHRuX2Rvb3AoKSB3 aWxsIGNvbnN1bWUgYW4gdW5rbm93biBudW1iZXIgb2YgYnl0ZXMgYW5kIHdlJ2xsIG92ZXJzaG9v dAotICB0aGUgZm9yLWxvb3AuICBUaGUgb25seSBUZWxuZXQgY29tbWFuZCBJJ3ZlIGV2ZXIgc2Vl biBhcnJpdmUgaGVyZSBpcwotICBhIERhdGEgTWFyaywgd2hpY2ggY29tZXMgd2hlbiB0aGUgcmVt b3RlIHByb3RvY29sIGV4aXRzIGFuZCB0aGUgcmVtb3RlCi0gIGpvYiByZXR1cm5zIHRvIGl0cyBz aGVsbCBwcm9tcHQuICBPbiB0aGUgYXNzdW1wdGlvbiBpdCdzIGEgMS1ieXRlIGNvbW1hbmQsCi0g IHdlIGRvbid0IHdyaXRlIG91dCB0aGUgSUFDIG9yIHRoZSBjb21tYW5kLCBhbmQgd2UgY2xlYXIg dGhlIHN0YXRlLiAgSWYKLSAgd2UgY2FsbGVkIHRuX2Rvb3AoKSB3ZSdkIGhhdmUgbm8gd2F5IG9m IGtub3dpbmcgaG93IG1hbnkgYnl0ZXMgaXQgdG9vawotICBmcm9tIHRoZSBpbnB1dCBzdHJlYW0u Ci0qLwotCQkJCSAgICBpbnQgeHg7Ci0JCQkJICAgIHh4ID0gdG5fZG9vcCgoQ0hBUiljLGR1cGxl eCx0dGluYyk7Ci0JCQkJICAgIGRlYnVnKEYxMTEsIjw8PCBET09QIixja2N0b2EoYykseHgpOwot I2Vsc2UKLQkJCQkgICAgZGVidWcoRjEwMSwiPDw8IERPT1AiLCIiLGMpOwotI2VuZGlmCS8qIENP TU1FTlQgKi8KLQkJCQkgICAgaW5fc3RhdGUgPSAwOwotCQkJCX0gZWxzZSB7Ci0JCQkJICAgICpw KysgPSBjOwotCQkJCSAgICBkZWJ1ZyhGMDAwLCI8PDwga2VlcCIsIiIsYyk7Ci0JCQkJICAgIGlu X3N0YXRlID0gMDsKLQkJCQl9Ci0JCQkgICAgfQotI2VuZGlmCS8qIFROQ09ERSAqLwotCQkJfQot CQkgICAgfQotCQkgICAgY2ttYWttc2cobXNnYnVmLDUwMCwKLQkJCSAgICAgInR0cHR5Y21kIHJl YWQgbmV0IFt0dGluYyBsb29wXSBlcnJubz0iLAotCQkJICAgICBja2l0b2EoZXJybm8pLAotCQkJ ICAgICAiIGNvdW50PSIsCi0JCQkgICAgIGNraXRvYSh4KSk7Ci0JCSAgICBkZWJ1ZyhGMTAwLG1z Z2J1ZiwiIiwwKTsKLQkJfSBlbHNlIHsKLQkJICAgIHggPSB0dHhpbihuLHRidWYrdGJ1Zl9hdmFp bCk7Ci0JCSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCB0dHhpbiB4IiwiIix4KTsgCi0JCX0KLQot CQlpZiAoeCA8IDApIHsKLQkJICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIHJlYWQgbmV0IGVycm9y IiwiIix4KTsKLQkJICAgIG5ldF9lcnIrKzsKLQkJfQotCQl0YnVmX2F2YWlsICs9IHg7Ci0JCXJl YWRfbmV0X2J5dGVzICs9IHg7Ci0JICAgIH0KLQotCX0gZWxzZQotCSAgdG5vdHNldCsrOwotCi0J aWYgKEZEX0lTU0VUKHB0eWZkLCAmaW4pKSB7CS8qIFJlYWQgZnJvbSBwdHk/ICovCi0JICAgIHBz ZXQrKzsKLQkgICAgZGVidWcoRjEwMCwidHRwdHljbWQgRkRfSVNTRVQgcHR5ZmQgaW4iLCIiLDAp OwotI2lmZGVmIFBUWV9VU0VfTkRFTEFZCi0JICAgIG4gPSBQVFlfUEJVRl9TSVpFOwotI2Vsc2UK LQkgICAgLyoKLQkgICAgICBUaGlzIGRvZXMgbm90IHdvcmsgb24gbm9uYmxvY2tpbmcgY2hhbm5l bHMKLQkgICAgICBvbiBjZXJ0YWluIHBsYXRmb3JtcyBzdWNoIGFzIE5ldEJTRC4KLQkgICAgKi8K LQkgICAgbiA9IHB0eV9jaGsocHR5ZmQpOwotI2VuZGlmIC8qIFBUWV9VU0VfTkRFTEFZICovCi0J ICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eV9jaGsoKSBuIiwiIixuKTsgCi0KLQkgICAgaWYg KG4gPCAwKQotCSAgICAgIG4gPSAwOwotCSAgICBpZiAobiA+IDApIHsKLQkJaWYgKG4gPiBQVFlf UEJVRl9TSVpFIC0gcGJ1Zl9hdmFpbCkKLQkJICBuID0gUFRZX1BCVUZfU0laRSAtIHBidWZfYXZh aWw7Ci0JCWRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eSByZWFkIHNpemUgYWRqdXN0ZWQiLCIiLG4p OyAKLQkJZXJybm8gPSAwOwotCQl4ID0gcmVhZChwdHlmZCxwYnVmK3BidWZfYXZhaWwsbik7Ci0j aWZkZWYgREVCVUcKLQkJaWYgKGRlYmxvZykgewotCQkgICAgY2ttYWttc2cobXNnYnVmLDUwMCwK LQkJCSAgICAgInR0cHR5Y21kIHJlYWQgcHR5IGVycm5vPSIsCi0JCQkgICAgIGNraXRvYShlcnJu byksCi0JCQkgICAgICIgY291bnQ9IiwKLQkJCSAgICAgY2tpdG9hKHgpKTsKLQkJICAgIGRlYnVn KEYxMDAsbXNnYnVmLCIiLDApOwotCQl9Ci0jZW5kaWYJLyogREVCVUcgKi8KLQotCQlpZiAoeCA8 IDAgJiYgZXJybm8gPT0gRUFHQUlOKQotCQkgIHggPSAwOwotCi0JCWlmICh4IDwgMCkgewkJLyog VGhpcyB3b3JrcyBvbiBTb2xhcmlzIGFuZCBMaW51eCAqLwotCQkgICAgcHR5X2VycisrOwkJLyog YnV0IG5vdCBOZXRCU0QgKi8KLQkJICAgIGRlYnVnKEYxMDAsIlRFUk1JTkFUSU9OIFRFU1QgQSIs IiIsMCk7Ci0jaWZkZWYgQ09NTUVOVAotCQkgICAgaWYgKGVycm5vID09IEVJTykKLQkJICAgICAg cmMgPSAxOwotI2VuZGlmCS8qIENPTU1FTlQgKi8KLQkJICAgIGlmIChwZXhpdHN0YXQgPCAwKSB7 Ci0JCQlzdGF0dXMgPSBwdHlfZ2V0X3N0YXR1cyhwdHlmZCxwdHlfZm9ya19waWQpOwotCQkJZGVi dWcoRjEwMSwidHRwdHljbWQgcHR5X2dldF9zdGF0dXMgQyIsIiIsc3RhdHVzKTsKLQkJCWlmIChz dGF0dXMgPiAtMSkgcGV4aXRzdGF0ID0gc3RhdHVzOwotCQkgICAgfQotCQkgICAgaGF2ZV9wdHkg PSAwOwotCQkgICAgeCA9IDA7Ci0JCX0KLQkJaWYgKHggPT0gMCAmJiAhcHR5X2VycikgeyAvKiBU aGlzIHdvcmtzIG9uIE5ldEJTRCBidXQgKi8KLQkJICAgIGRlYnVnKEYxMDAsIlRFUk1JTkFUSU9O IFRFU1QgQiIsIiIsMCk7Ci0JCSAgICBzdGF0dXMgPSBwZXhpdHN0YXQgPiAtMSA/IHBleGl0c3Rh dCA6Ci0JCQlwdHlfZ2V0X3N0YXR1cyhwdHlmZCxwdHlfZm9ya19waWQpOwotCQkgICAgZGVidWco RjEwMSwidHRwdHljbWQgcHR5X2dldF9zdGF0dXMgRCIsIiIsc3RhdHVzKTsKLQkJICAgIGlmIChz dGF0dXMgPiAtMSkgewotCQkJcGV4aXRzdGF0ID0gc3RhdHVzOwotCQkJcHR5X2VycisrOwotCQkJ aGF2ZV9wdHkgPSAwOwotCQkgICAgfSBlbHNlIHsJCS8qIFNlbGVjdCgpIGxpZWQgKi8KLQkJCXB0 eV9lcnIgPSAwOwkvKiBwdHkgc3RpbGwgdGhlcmUgYnV0IGhhcyBub3RoaW5nICovCi0JCQltc2xl ZXAoMTAwKTsJLyogc2xlZXAgYSBiaXQgKi8KLQkJICAgIH0KLQkJICAgIHggPSAwOwotCQl9IAot CQkvKiBIb3BlZnVsbHkgdGhlIG5leHQgdHdvIGFyZSBubyBsb25nZXIgbmVlZGVkLi4uICovCi0J CWlmICghcHR5X2VyciAmJiAoCi0jaWZuZGVmIFBUWV9VU0VfTkRFTEFZCi0JCSAgICB4IDwgMSB8 fCBlcnJubwotI2Vsc2UKLQkJICAgIGVycm5vICE9IDAgJiYgZXJybm8gIT0gRUFHQUlOCi0jZW5k aWYgLyogUFRZX1VTRV9OREVMQVkgKi8KLQkJICAgICkpIHsKLQkJICAgIGRlYnVnKEYxMDAsIlRF Uk1JTkFUSU9OIFRFU1QgQyIsIiIsMCk7Ci0JCSAgICBwdHlfZXJyKys7Ci0JCSAgICBkZWJ1ZyhG MTAxLCJ0dHB0eWNtZCBTRVQgcHR5X2VyciIsIiIscHR5X2Vycik7Ci0JCSAgICBpZiAoZXJybm8g PT0gRUlPKQkvKiBlcnJubyA9PSBFSU8gaXMgbGlrZSBFT0YgKi8KLQkJICAgICAgcmMgPSAxOwot CQkgICAgaWYgKHggPCAwKQotCQkgICAgICB4ID0gMDsKLQkJfQotI2lmZGVmIENPTU1FTlQKLSNp ZmRlZiBERUJVRwotCQlpZiAoZGVibG9nKSB7Ci0JCSAgICBwYnVmW3BidWZfYXZhaWwgKyB4XSA9 ICdcMCc7Ci0JCSAgICBkZWJ1ZyhGMTExLCJ0dHB0eWNtZCBhZGRlZCB0byBwdHkgYnVmZmVyIiwK LQkJCSAgcGJ1ZitwYnVmX2F2YWlsLHgpOwotCQl9Ci0jZW5kaWYJLyogREVCVUcgKi8KLSNlbmRp ZgkvKiBDT01NRU5UICovCi0JCXBidWZfYXZhaWwgKz0geDsKLQkJcmVhZF9wdHlfYnl0ZXMgKz0g eDsKLQkgICAgfSBlbHNlIHsJCQkvKiBuID09IDAgd2l0aCBibG9ja2luZyByZWFkcyAqLwotCQlk ZWJ1ZyhGMTAwLAotCQkgICAgICAiUFRZIFJFQUQgUkVUVVJORUQgWkVSTyBCWVRFUyAtIFNIT1VM RCBOT1QgSEFQUEVOIiwKLQkJICAgICAgIiIsMCk7Ci0JICAgIH0KLQl9IGVsc2UKLQkgIHBub3Rz ZXQrKzsKLQotCS8qIElmIHdyaXRlcyBoYXZlIGNhdWdodCB1cCB0byByZWFkcywgcmVzZXQgdGhl IGJ1ZmZlcnMgKi8KLQotCWlmIChwYnVmX3dyaXR0ZW4gPT0gcGJ1Zl9hdmFpbCkKLQkgIHBidWZf d3JpdHRlbiA9IHBidWZfYXZhaWwgPSAwOwotCWlmICh0YnVmX3dyaXR0ZW4gPT0gdGJ1Zl9hdmFp bCkKLQkgIHRidWZfd3JpdHRlbiA9IHRidWZfYXZhaWwgPSAwOwotCi0JLyogU2VlIGlmIHdlIGNh biBleGl0ICovCi0KLQl4MSA9IHBidWZfYXZhaWwgLSBwYnVmX3dyaXR0ZW47IAotCXgyID0gdGJ1 Zl9hdmFpbCAtIHRidWZfd3JpdHRlbjsKLQotCWRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eV9lcnIg TE9PUCBFWElUIFRFU1QgcHR5X2VyciIsIiIscHR5X2Vycik7Ci0JZGVidWcoRjEwMSwidHRwdHlj bWQgcHR5X2VyciBMT09QIEVYSVQgVEVTVCB4MSBbd3JpdGUgdG8gbmV0XSIsIiIseDEpOwotCWRl YnVnKEYxMDEsInR0cHR5Y21kIHB0eV9lcnIgTE9PUCBFWElUIFRFU1QgeDIgW3dyaXRlIHRvIHB0 eV0iLCIiLHgyKTsKLQlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBwdHlfZXJyIExPT1AgRVhJVCBURVNU IHJjIiwiIixyYyk7Ci0JZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2VyciBMT09QIEVYSVQgVEVT VCBzdGF0dXMiLCIiLHN0YXR1cyk7Ci0JZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2VyciBMT09Q IEVYSVQgVEVTVCBwZXhpdHN0YXQiLCIiLHBleGl0c3RhdCk7Ci0KLQlpZiAobmV0X2VycikgewkJ CS8qIE5ldCBlcnJvcj8gKi8KLQkgICAgZGVidWcoRjEwMSwidHRwdHljbWQgbmV0X2VyciBMT09Q IEVYSVQgVEVTVCBuZXRfZXJyIiwiIixuZXRfZXJyKTsKLQkgICAgaWYgKGhhdmVfbmV0KSB7Ci0J CWlmIChsb2NhbCkgewotCQkgICAgdHRjbG9zKDApOwotCQkgICAgcHJpbnRmKCI/Q29ubmVjdGlv biBjbG9zZWRcbiIpOwotCQl9Ci0JCWhhdmVfbmV0ID0gMDsKLQkgICAgfQotCSAgICBkZWJ1ZyhG MTAxLCJ0dHB0eWNtZCBuZXRfZXJyIExPT1AgRVhJVCBURVNUIHgxIiwiIix4MSk7Ci0JICAgIGlm ICh4MSA9PSAwKQotCSAgICAgIGJyZWFrOwotCX0KLQlpZiAocHR5X2VycikgewkJCS8qIFB0eSBl cnJvcj8gKi8KLQkgICAgaWYgKGhhdmVfcHR5KSB7Ci0JCWlmIChwZXhpdHN0YXQgPCAwKSB7CQkK LQkJICAgIHN0YXR1cyA9IHB0eV9nZXRfc3RhdHVzKHB0eWZkLHB0eV9mb3JrX3BpZCk7Ci0JCSAg ICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBwdHlfZ2V0X3N0YXR1cyBFIiwiIixzdGF0dXMpOwotCQkg ICAgaWYgKHN0YXR1cyA+IC0xKSBwZXhpdHN0YXQgPSBzdGF0dXM7Ci0JCX0KLQkJaGF2ZV9wdHkg PSAwOwotCSAgICB9Ci0JICAgIGlmICh4MSA9PSAwICYmIHgyID09IDApIHsJLyogSWYgYnVmZmVy cyBhcmUgY2F1Z2h0IHVwICovCi0JCXJjID0gMTsJCQkvKiBzZXQgcHJlbGltaW5hcnkgcmV0dXJu IHRvIHN1Y2Nlc3MgKi8KLQkJZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2VyciBMT09QIEVYSVQg VEVTVCByYyAyIiwiIixyYyk7Ci0JCWJyZWFrOwkJCS8qIGFuZCBleGl0IHRoZSBsb29wICovCi0J ICAgIH0KLQl9Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kICsrKyBoYXZlX3B0eSIs IiIsaGF2ZV9wdHkpOwotICAgIGlmIChoYXZlX3B0eSkgewkJCS8qIEluIGNhc2Ugc2VsZWN0KCkg ZmFpbGVkICovCi0jaWZkZWYgVVNFX0NLVVBUWV9DCi0JZW5kX3B0eSgpOwotCWNsb3NlKHB0eWZk KTsKLSNlbHNlCi0JY2xvc2Uoc2xhdmVmZCk7Ci0JY2xvc2UobWFzdGVyZmQpOwotI2VuZGlmIC8q IFVTRV9DS1VQVFlfQyAqLwotICAgIH0KLSAgICBwdHlfbWFzdGVyX2ZkID0gLTE7Ci0gICAgZGVi dWcoRjEwMSwidHRwdHljbWQgKysrIHBleGl0c3RhdCIsIiIscGV4aXRzdGF0KTsKLSAgICBpZiAo cGV4aXRzdGF0IDwgMCkgewkJLyogVHJ5IG9uZSBsYXN0IHRpbWUgdG8gZ2V0IHN0YXR1cyAqLwot CXN0YXR1cyA9IHB0eV9nZXRfc3RhdHVzKHB0eWZkLHB0eV9mb3JrX3BpZCk7Ci0JZGVidWcoRjEw MSwidHRwdHljbWQgcHR5X2dldF9zdGF0dXMgRiIsIiIsc3RhdHVzKTsKLQlpZiAoc3RhdHVzID4g LTEpIHBleGl0c3RhdCA9IHN0YXR1czsKLSAgICB9Ci0gICAgZGVidWcoRjEwMSwidHRwdHljbWQg KysrIGZpbmFsIHBleGl0c3RhdCIsIiIscGV4aXRzdGF0KTsKLSAgICBpZiAoZGVibG9nKSB7CQkJ LyogU3RhdHMgZm9yIGRlYnVnIGxvZyAqLwotCWRlYnVnKEYxMDEsInR0cHR5Y21kICsrKyBwc2V0 CSIsIiIscHNldCk7Ci0JZGVidWcoRjEwMSwidHRwdHljbWQgKysrIHBub3RzZXQiLCIiLHBub3Rz ZXQpOwotCWRlYnVnKEYxMDEsInR0cHR5Y21kICsrKyB0c2V0CSIsIiIsdHNldCk7Ci0JZGVidWco RjEwMSwidHRwdHljbWQgKysrIHRub3RzZXQiLCIiLHRub3RzZXQpOwotCi0JZGVidWcoRjEwMSwi dHRwdHljbWQgKysrICByZWFkX3B0eV9ieXRlcyIsIiIscmVhZF9wdHlfYnl0ZXMpOwotCWRlYnVn KEYxMDEsInR0cHR5Y21kICsrKyB3cml0ZV9uZXRfYnl0ZXMiLCIiLHdyaXRlX25ldF9ieXRlcyk7 Ci0JZGVidWcoRjEwMSwidHRwdHljbWQgKysrICByZWFkX25ldF9ieXRlcyIsIiIscmVhZF9uZXRf Ynl0ZXMpOwotCWRlYnVnKEYxMDEsInR0cHR5Y21kICsrKyB3cml0ZV9wdHlfYnl0ZXMiLCIiLHdy aXRlX3B0eV9ieXRlcyk7Ci0gICAgfQotLyoKLSAgSWYgd2UgZ290IHRoZSBleHRlcm5hbCBwcm90 b2NvbCdzIGV4aXQgc3RhdHVzIGZyb20gd2FpdHBpZCgpLCB3ZSB1c2UgdGhhdAotICB0byBzZXQg b3VyIHJldHVybiBjb2RlLiAgSWYgbm90LCB3ZSBmYWxsIGJhY2sgb24gd2hhdGV2ZXIgcmMgd2Fz IHByZXZpb3VzbHkKLSAgc2V0IHRvLCBuYW1lbHkgMSAoc3VjY2VzcykgaWYgdGhlIHB0eSBmb3Jr IHNlZW1lZCB0byB0ZXJtaW5hdGUsIDAgb3RoZXJ3aXNlLgotKi8KLSAgICBpZiAoc2F2ZV9zaWdj aGxkKSB7CQkJLyogUmVzdG9yZSB0aGlzIGlmIHdlIGNoYW5nZWQgaXQgKi8KLQkoVk9JRCkgc2ln bmFsKFNJR0NITEQsc2F2ZV9zaWdjaGxkKTsKLQlzYXZlX3NpZ2NobGQgPSBOVUxMOwotICAgIH0K LSAgICBtc2xlZXAoNTAwKTsKLSAgICB4ID0ga2lsbChwdHlfZm9ya19waWQsU0lHSFVQKTsJLyog SW4gY2FzZSBpdCdzIHN0aWxsIHRoZXJlICovCi0gICAgcHR5X2ZvcmtfcGlkID0gLTE7Ci0gICAg ZGVidWcoRjEwMSwidHRwdHljbWQgZm9yayBraWxsIFNJR0hVUCIsIiIseCk7Ci0gICAgaWYgKHBl eGl0c3RhdCA+IC0xKQotICAgICAgcmMgPSAocGV4aXRzdGF0ID09IDAgPyAxIDogMCk7Ci0gICAg ZGVidWcoRjEwMSwidHRwdHljbWQgKysrIHJjIiwiIixyYyk7Ci0gICAgaWYgKCFsb2NhbCkgewkJ CS8qIElmIGluIHJlbW90ZSBtb2RlICovCi0JY29ucmVzKCk7CQkJLyogcmVzdG9yZSBjb25zb2xl IHRvIENCUkVBSyBtb2RlICovCi0JY29uY2IoKGNoYXIpZXNjY2hyKTsKLSAgICB9Ci0gICAgcmV0 dXJuKHJjKTsKLX0KLSNlbmRpZgkvKiBORVRQVFkgKi8KLSNlbmRpZgkvKiBTRUxFQ1QgKi8KLQot LyogVCBUIFIgVSBOIEMgTSBEICAtLSAgUmVkaXJlY3QgYW4gZXh0ZXJuYWwgY29tbWFuZCBvdmVy IHRoZSBjb25uZWN0aW9uLiAqLwotCi0vKgotICBUVFJVTkNNRCBpcyB0aGUgcm91dGluZSB0aGF0 IHdhcyBvcmlnaW5hbGx5IHVzZWQgZm9yIHJ1bm5pbmcgZXh0ZXJuYWwKLSAgcHJvdG9jb2xzLiAg SXQgaXMgdmVyeSBzaW1wbGUgYW5kIHdvcmtzIGZpbmUgcHJvdmlkZWQgKGEpIHRoZSBjb25uZWN0 aW9uCi0gIGlzIG5vdCBlbmNyeXB0ZWQsIGFuZCAoYikgdGhlIGV4dGVybmFsIHByb3RvY29sIHVz ZXMgc3RhbmRhcmQgaS9vCi0gIChmaWxlIGRlc2NyaXB0b3JzIDAgYW5kIDEpIGZvciBmaWxlIHRy YW5zZmVyLgotKi8KLQotaW50Ci10dHJ1bmNtZChzKSBjaGFyICpzOyB7Ci0gICAgUElEX1QgcGlk OwkJCQkvKiBwaWQgb2YgbG93ZXIgZm9yayAqLwotICAgIGludCB3c3RhdDsJCQkJLyogZm9yIHdh aXQoKSAqLwotICAgIGludCB4OwotICAgIGludCBzdGF0dXNwOwotCi0gICAgaWYgKHR0eWZkID09 IC0xKSB7Ci0JcHJpbnRmKCI/U29ycnksIGRldmljZSBpcyBub3Qgb3BlblxuIik7Ci0JcmV0dXJu KDApOwotICAgIH0KLSAgICBpZiAobm9wdXNoKSB7Ci0JZGVidWcoRjEwMCwidHRydW5jbWQgZmFp bDogbm9wdXNoIiwiIiwwKTsKLQlyZXR1cm4oMCk7Ci0gICAgfQotCi0jaWZkZWYgTkVUUFRZCi0v KioqKioqKioqKioqKioqCi0gIEl0IG1pZ2h0IGFsc28gYmUgbmVjZXNzYXJ5IHRvIHVzZSB0aGUg cHR5IHJvdXRpbmUgZm9yIG90aGVyIHJlYXNvbnMsCi0gIGUuZy4gYmVjYXVzZSB0aGUgZXh0ZXJu YWwgcHJvZ3JhbSBkb2VzIG5vdCB1c2Ugc3RkaW8uCi0qLwotI2lmZGVmIE5FVENPTk4KLS8qCi0g IElmIHdlIGhhdmUgYSBuZXR3b3JrIGNvbm5lY3Rpb24gd2UgdXNlIGEgZGlmZmVyZW50IHJvdXRp bmUgYmVjYXVzZQotICAoYSkgaWYgdGhlIGNvbm5lY3Rpb24gaXMgZW5jcnlwdGVkLCB0aGUgbWVj aGFuaXNtIHVzZWQgaGVyZSBjYW4ndCBkZWFsCi0gIHdpdGggaXQ7IGFuZCAoYikgaXQgd29uJ3Qg aGFuZGxlIGFueSBuZXR3b3JrIHByb3RvY29scyBlaXRoZXIsIGUuZy4KLSAgVGVsbmV0LCBSbG9n aW4sIEs1IFUtdG8tVSwgZXRjLiAgSG93ZXZlciwgdGhpcyByb3V0aW5lIHdvcmtzIG11Y2gKLSAg YmV0dGVyIChmYXN0ZXIsIG1vcmUgdHJhbnNwYXJlbnQpIG9uIHNlcmlhbCBjb25uZWN0aW9ucyBh bmQgd2hlbgotICBDLUtlcm1pdCBpcyBpbiByZW1vdGUgbW9kZSAoaS5lLiBpcyBvbiB0aGUgZmFy IGVuZCkuCi0qLwotICAgIC8qIEZvciB0ZXN0aW5nIGFsd2F5cyB1c2UgdGhpcyAqLwotICAgIGlm IChuZXRjb25uKQotICAgICAgcmV0dXJuKHR0cHR5Y21kKHMpKTsKLSNlbmRpZiAvKiBORVRDT05O ICovCi0KLS8qKioqKioqKioqKioqKiovCi0jZWxzZSAgLyogTkVUUFRZICovCi0gICAgaWYgKHR0 X2lzX3NlY3VyZSgpKSB7Ci0JcHJpbnRmKCI/U29ycnksIFwKLWV4dGVybmFsIHByb3RvY29scyBv dmVyIHNlY3VyZSBjb25uZWN0aW9ucyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgT1MuXG4iCi0gICAg ICAgICAgICAgICk7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYJLyogTkVUUFRZ ICovCi0KLSAgICBjb25yZXMoKTsJCQkJLyogTWFrZSBjb25zb2xlIG5vcm1hbCAgKi8KLSAgICBw ZXhpdHN0YXQgPSAtNDsKLSAgICBpZiAoKHBpZCA9IGZvcmsoKSkgPT0gMCkgewkJLyogTWFrZSBh IGNoaWxkIGZvcmsgKi8KLQlpZiAocHJpdl9jYW4oKSkJCQkvKiBDaGlsZDogdHVybiBvZmYgcHJp dnMuICovCi0JICBleGl0KDEpOwotCWR1cDIodHR5ZmQsIDApOwkJCS8qIEdpdmUgc3RkaW4vb3V0 IHRvIHRoZSBsaW5lICovCi0JZHVwMih0dHlmZCwgMSk7Ci0JeCA9IHN5c3RlbShzKTsKLQlkZWJ1 ZyhGMTAxLCJ0dHJ1bmNtZCBzeXN0ZW0iLHMseCk7Ci0JX2V4aXQoeCA/IEJBRF9FWElUIDogMCk7 Ci0gICAgfSBlbHNlIHsKLQlTSUdUWVAgKCppc3RhdCkoKSwgKCpxc3RhdCkoKTsKLQlpZiAocGlk ID09IChQSURfVCkgLTEpCQkvKiBmb3JrKCkgZmFpbGVkPyAqLwotCSAgcmV0dXJuKDApOwotCWlz dGF0ID0gc2lnbmFsKFNJR0lOVCxTSUdfSUdOKTsgLyogTGV0IHRoZSBmb3JrIGhhbmRsZSBrZXli b2FyZCAqLwotCXFzdGF0ID0gc2lnbmFsKFNJR1FVSVQsU0lHX0lHTik7IC8qIGludGVycnVwdHMg aXRzZWxmLi4uICovCi0KLSNpZmRlZiBDT01NRU5UCi0gICAgCXdoaWxlICgoKHdzdGF0ID0gd2Fp dCgmc3RhdHVzcCkpICE9IHBpZCkgJiYgKHdzdGF0ICE9IC0xKSkgOwotI2Vsc2UgIC8qIE5vdCBD T01NRU5UICovCi0gICAgCXdoaWxlICgxKSB7Ci0JICAgIHdzdGF0ID0gd2FpdCgmc3RhdHVzcCk7 Ci0JICAgIGRlYnVnKEYxMDEsInR0cnVuY21kIHdhaXQiLCIiLHdzdGF0KTsKLQkgICAgaWYgKHdz dGF0ID09IHBpZCB8fCB3c3RhdCA9PSAtMSkKLQkgICAgICBicmVhazsKLQl9Ci0jZW5kaWYgLyog Q09NTUVOVCAqLwotCi0JcGV4aXRzdGF0ID0gKHN0YXR1c3AgJiAweGZmKSA/IHN0YXR1c3AgOiBz dGF0dXNwID4+IDg7Ci0JZGVidWcoRjEwMSwidHRydW5jbWQgd2FpdCBzdGF0dXNwIiwiIixzdGF0 dXNwKTsKLQlkZWJ1ZyhGMTAxLCJ0dHJ1bmNtZCB3YWl0IHBleGl0c3RhdCIsIiIscGV4aXRzdGF0 KTsKLQlzaWduYWwoU0lHSU5ULGlzdGF0KTsJCS8qIFJlc3RvcmUgaW50ZXJydXB0cyAqLwotCXNp Z25hbChTSUdRVUlULHFzdGF0KTsKLSAgICB9Ci0gICAgY29uY2IoKGNoYXIpZXNjY2hyKTsJCS8q IFJlc3RvcmUgY29uc29sZSB0byBDQlJFQUsgbW9kZSAqLwotICAgIHJldHVybihzdGF0dXNwID09 IDAgPyAxIDogMCk7Ci19Ci0jZW5kaWYJLyogQ0tfUkVESVIgKi8KLQotc3RydWN0IHRtICoKLSNp ZmRlZiBDS19BTlNJQwotY21kYXRlMnRtKGNoYXIgKiBkYXRlLCBpbnQgZ210KSAgICAgICAgIC8q IGRhdGUgYXMgInl5eXltbWRkIGhoOm1tOnNzIiAqLwotI2Vsc2UKLWNtZGF0ZTJ0bShkYXRlLGdt dCkgY2hhciAqIGRhdGU7IGludCBnbXQ7Ci0jZW5kaWYKLXsKLSAgICAvKiBkYXRlIGFzICJ5eXl5 bW1kZCBoaDptbTpzcyIgKi8KLSAgICBzdGF0aWMgc3RydWN0IHRtIF90bTsKLSAgICB0aW1lX3Qg bm93OwotCi0gICAgaWYgKHN0cmxlbihkYXRlKSAhPSAxNyB8fAotCWRhdGVbOF0gIT0gJyAnIHx8 Ci0JZGF0ZVsxMV0gIT0gJzonIHx8Ci0JZGF0ZVsxNF0gIT0gJzonKQotICAgICAgcmV0dXJuKE5V TEwpOwotCi0gICAgdGltZSgmbm93KTsKLSAgICBpZiAoZ210KQotICAgICAgX3RtID0gKmdtdGlt ZSgmbm93KTsKLSAgICBlbHNlCi0gICAgICBfdG0gPSAqbG9jYWx0aW1lKCZub3cpOwotICAgIF90 bS50bV95ZWFyID0gKGRhdGVbMF0tJzAnKSoxMDAwICsgKGRhdGVbMV0tJzAnKSoxMDAgKwotICAg ICAgICAgICAgICAgICAgKGRhdGVbMl0tJzAnKSoxMCAgICsgKGRhdGVbM10tJzAnKS0xOTAwOwot ICAgIF90bS50bV9tb24gID0gKGRhdGVbNF0tJzAnKSoxMCAgICsgKGRhdGVbNV0tJzAnKS0xOwot ICAgIF90bS50bV9tZGF5ID0gKGRhdGVbNl0tJzAnKSoxMCAgICsgKGRhdGVbN10tJzAnKTsKLSAg ICBfdG0udG1faG91ciA9IChkYXRlWzldLScwJykqMTAgICArIChkYXRlWzEwXS0nMCcpOwotICAg IF90bS50bV9taW4gID0gKGRhdGVbMTJdLScwJykqMTAgICsgKGRhdGVbMTNdLScwJyk7Ci0gICAg X3RtLnRtX3NlYyAgPSAoZGF0ZVsxNV0tJzAnKSoxMCAgKyAoZGF0ZVsxNl0tJzAnKTsKLQotICAg IC8qIFNob3VsZCB3ZSBzZXQgX3RtLnRtX2lzZHN0IHRvIC0xIGhlcmU/ICovCi0KLSAgICBfdG0u dG1fd2RheSA9IDA7Ci0gICAgX3RtLnRtX3lkYXkgPSAwOwotCi0gICAgcmV0dXJuKCZfdG0pOwot fQotCi0jaWZkZWYgT1hPUwotI3VuZGVmIGtpbGwKLSNlbmRpZiAvKiBPWE9TICovCi0KLSNpZmRl ZiBPWE9TCi1pbnQKLXByaXZfa2lsbChwaWQsIHNpZykgaW50IHBpZCwgc2lnOyB7Ci0gICAgaW50 CWk7Ci0KLSAgICBpZiAocHJpdl9vbigpKQotCWRlYnVnKEYxMDAsInByaXZfa2lsbCBwcml2X29u IGZhaWxlZCIsIiIsMCk7Ci0gICAgaSA9IGtpbGwocGlkLCBzaWcpOwotICAgIGlmIChwcml2X29m ZigpKQotCWRlYnVnKEYxMDAsInByaXZfa2lsbCBwcml2X29mZiBmYWlsZWQiLCIiLDApOwotICAg IHJldHVybihpKTsKLX0KLSNlbmRpZiAvKiBPWE9TICovCi0KLSNpZmRlZiBCRU9TT1JCRUJPWAot LyogI2lmZGVmIEJFX0RSXzcgKi8KLS8qCi0gIGFsYXJtKCkgZnVuY3Rpb24gbm90IHN1cHBsaWVk IHdpdGggQmUgT1MgRFI3IC0gdGhpcyBvbmUgY29udHJpYnV0ZWQgYnkKLSAgTmVhbCBQLiBNdXJw aHkuCi0qLwotCi0vKgotICBUaGlzIHNob3VsZCBtaW1pYyB0aGUgVU5JWC9QT1NJWCBhbGFybSgp IGZ1bmN0aW9uIHdlbGwgZW5vdWdoLCB3aXRoIHRoZQotICBjYXZlYXQgdGhhdCBvbmUncyBTSUdB TFJNIGhhbmRsZXIgbXVzdCBjYWxsIGFsYXJtX2V4cGlyZWQoKSB0byBjbGVhbiB1cCB2YXJzCi0g IGFuZCB3YWl0IGZvciB0aGUgYWxhcm0gdGhyZWFkIHRvIGZpbmlzaC4KLSovCi11bnNpZ25lZCBp bnQKLWFsYXJtKHVuc2lnbmVkIGludCBzZWNvbmRzKSB7Ci0gICAgbG9uZyB0aW1lX2xlZnQgPSAw OwotCi0vKiBJZiBhbiBhbGFybSBpcyBhY3RpdmUsIHR1cm4gaXQgb2ZmLCBzYXZpbmcgdGhlIHVu dXNlZCB0aW1lICovCi0gICAgaWYgKGFsYXJtX3RocmVhZCAhPSAtMSkgewotICAgICAgICAvKiBX ZSdsbCBiZSBnZW5lcm91cyBhbmQgY291bnQgcGFydGlhbCBzZWNvbmRzIGFzIHdob2xlIHNlY29u ZHMuICovCi0gICAgICAgIHRpbWVfbGVmdCA9IGFsYXJtX3N0cnVjdC50aW1lIC0KLQkgICgoc3lz dGVtX3RpbWUoKSAtIHRpbWVfc3RhcnRlZCkgLyAxMDAwMDAwLjApOwotCi0gICAgICAgIC8qIEtp bGwgdGhlIGFsYXJtIHRocmVhZCAqLwotICAgICAgICBraWxsX3RocmVhZCAoYWxhcm1fdGhyZWFk KTsKLQotICAgICAgICAvKiBXZSBuZWVkIHRvIGNsZWFuIHVwIGFzIHRob3VnaCB0aGUgYWxhcm0g b2NjdXJlZC4gKi8KLSAgICAgICAgdGltZV9zdGFydGVkID0gMDsKLSAgICAgICAgYWxhcm1fc3Ry dWN0LnRocmVhZCA9IC0xOwotICAgICAgICBhbGFybV9zdHJ1Y3QudGltZSA9IDA7Ci0gICAgICAg IGFsYXJtX2V4cGlyZWQoKTsKLSAgICB9Ci0KLS8qIFNldCBhIG5ldyBhbGFybSBjbG9jaywgaWYg cmVxdWVzdGVkLiAqLwotICAgIGlmIChzZWNvbmRzID4gMCkgewotICAgICAgICBhbGFybV9zdHJ1 Y3QudGhyZWFkID0gZmluZF90aHJlYWQoTlVMTCk7Ci0gICAgICAgIGFsYXJtX3N0cnVjdC50aW1l ID0gc2Vjb25kczsKLSAgICAgICAgdGltZV9zdGFydGVkID0gc3lzdGVtX3RpbWUoKTsKLSAgICAg ICAgYWxhcm1fdGhyZWFkID0gc3Bhd25fdGhyZWFkIChkb19hbGFybSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiYWxhcm1fdGhyZWFkIiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBCX05PUk1BTF9QUklPUklUWSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAmYWxhcm1fc3RydWN0Ci0JCQkJICAgICApOwot ICAgICAgICByZXN1bWVfdGhyZWFkIChhbGFybV90aHJlYWQpOwotICAgIH0KLQotLyogTm93IHJl dHVybiBbdW51c2VkIHRpbWUgfCAwXSAqLwotICAgIHJldHVybiAoKHVuc2lnbmVkIGludCkgdGlt ZV9sZWZ0KTsKLX0KLQotLyoKLSAgVGhpcyBmdW5jdGlvbiBpcyB0aGUgZGVwYXJ0dXJlIGZyb20g VU5JWC9QT1NJWCBhbGFybSBoYW5kbGluZy4gSW4gdGhlIGNhc2UKLSAgb2YgQmUncyBtaXNzaW5n IGFsYXJtKCkgZnVuY3Rpb24sIHRoaXMgc3R1ZmYgbmVlZHMgdG8gYmUgZG9uZSBpbiB0aGUgU0lH QUxSTQotICBoYW5kbGVyLiBXaGVuIEJlIGltcGxlbWVudHMgYWxhcm0oKSwgdGhpcyBmdW5jdGlv biBjYWxsIGNhbiBiZSBlbGltaW5hdGVkCi0gIGZyb20gdXNlcidzIFNJR0FMUk0gc2lnbmFsIGhh bmRsZXJzLgotKi8KLQotdm9pZAotYWxhcm1fZXhwaXJlZCh2b2lkKSB7Ci0gICAgbG9uZyByZXRf dmFsOwotCi0gICAgaWYgKGFsYXJtX3RocmVhZCAhPSAtMSkgewotICAgICAgICB3YWl0X2Zvcl90 aHJlYWQgKGFsYXJtX3RocmVhZCwgJnJldF92YWwpOwotICAgICAgICBhbGFybV90aHJlYWQgPSAt MTsKLSAgICB9Ci19Ci0KLS8qCi0gIFRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgc25vb3plcyB0 aGUgcmVxdWlzaXRlIG51bWJlciBvZiBzZWNvbmRzIGFuZCB0aGVuCi0gIFNJR0FMUk1zIHRoZSBj YWxsaW5nIHRocmVhZC4gTm90ZSB0aGF0IGtpbGwoKSB3YW50cyBhIHBpZF90IGFyZywgd2hpbHN0 IEJlCi0gIHVzZXMgdGhyZWFkX2lkOyBjdXJyZW50bHkgdGhleSBhcmUgYm90aCB0eXBkZWYnZWQg YXMgbG9uZywgYnV0IEknbGwgZG8gdGhlCi0gIGNhc3QgYW55d2F5LiBUaGlzIGZ1bmN0aW9uIGlz IHJ1biBpbiBhIHNlcGFyYXRlIHRocmVhZC4KLSovCi0KLWxvbmcKLWRvX2FsYXJtICh2b2lkICph bGFybV9zdHJ1Y3QpIHsKLSAgICBzbm9vemUgKChkb3VibGUpICgoc3RydWN0IEFMQVJNX1NUUlVD VCAqKSBhbGFybV9zdHJ1Y3QpLT50aW1lICogMTAwMDAwMC4wKTsKLSAgICBraWxsICgocGlkX3Qp KChzdHJ1Y3QgQUxBUk1fU1RSVUNUICopIGFsYXJtX3N0cnVjdCktPnRocmVhZCwgU0lHQUxSTSk7 Ci0gICAgdGltZV9zdGFydGVkID0gMDsKLSAgICAoKHN0cnVjdCBBTEFSTV9TVFJVQ1QgKikgYWxh cm1fc3RydWN0KS0+dGhyZWFkID0gLTE7Ci0gICAgKChzdHJ1Y3QgQUxBUk1fU1RSVUNUICopIGFs YXJtX3N0cnVjdCktPnRpbWUgPSAwOwotfQotLyogI2VuZGlmICovIC8qIEJFX0RSXzcgKi8KLSNl bmRpZiAvKiBCRU9TT1JCRUJPWCAqLwotCi0jaWZkZWYgUGxhbjkKLQotaW50Ci1wOXR0eWN0bChj aGFyIGxldHRlciwgaW50IG51bSwgaW50IHBhcmFtKSB7Ci0gICAgY2hhciBjbWRbMjBdOwotICAg IGludCBsZW47Ci0KLSAgICBpZiAodHR5Y3RsZmQgPCAwKQotICAgICAgcmV0dXJuIC0xOwotCi0g ICAgY21kWzBdID0gbGV0dGVyOwotICAgIGlmIChudW0pCi0gICAgICBsZW4gPSBzcHJpbnRmKGNt ZCArIDEsICIlZCIsIHBhcmFtKSArIDE7Ci0gICAgZWxzZSB7Ci0JY21kWzFdID0gcGFyYW07Ci0J bGVuID0gMjsKLSAgICB9Ci0gICAgaWYgKHdyaXRlKHR0eWN0bGZkLCBjbWQsIGxlbikgPT0gbGVu KSB7Ci0JY21kW2xlbl0gPSAwOwotCS8qIGZwcmludGYoc3Rkb3V0LCAid3JvdGUgJyVzJ1xuIiwg Y21kKTsgKi8KLQlyZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIC0xOwotfQotCi1pbnQKLXA5 dHR5cGFyaXR5KGNoYXIgbCkgewotICAgIHJldHVybiBwOXR0eWN0bCgncCcsIDAsIGwpOwotfQot Ci1pbnQKLXA5dHRoZmxvdyhpbnQgZmxvdywgaW50IHN0YXR1cykgewotICAgIHJldHVybiBwOXR0 eWN0bCgnbScsIDEsIHN0YXR1cyk7Ci19Ci0KLWludAotcDl0dHNzcGQoaW50IGNwcykgewotICAg IGlmIChwOXR0eWN0bCgnYicsIDEsIGNwcyAqIDEwKSA8IDApCi0gICAgICByZXR1cm4gLTE7Ci0g ICAgdHR5bGFzdHNwZWVkID0gY3BzICogMTA7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludAotcDlv cGVudHR5Y3RsKGNoYXIgKnR0bmFtZSkgewotICAgIGNoYXIgbmFtZVsxMDBdOwotCi0gICAgaWYg KHR0eWN0bGZkID49IDApIHsKLQljbG9zZSh0dHljdGxmZCk7Ci0JdHR5Y3RsZmQgPSAtMTsKLQl0 dHlsYXN0c3BlZWQgPSAtMTsKLSAgICB9Ci0gICAgc3ByaW50ZihuYW1lLCAiJXNjdGwiLCB0dG5h bWUpOwotICAgIHR0eWN0bGZkID0gb3BlbihuYW1lLCAxKTsKLSAgICByZXR1cm4gdHR5Y3RsZmQ7 Ci19Ci0KLWludAotcDljb25jYigpIHsKLSAgICBpZiAoY29uc2N0bGZkID49IDApIHsKLQlpZiAo d3JpdGUoY29uc2N0bGZkLCAicmF3b24iLCA1KSA9PSA1KQotCSAgcmV0dXJuIDA7Ci0gICAgfQot ICAgIHJldHVybiAtMTsKLX0KLQotaW50Ci1wOWNvbmJpbigpIHsKLSAgICByZXR1cm4gcDljb25j YigpOwotfQotCi1pbnQKLXA5Y29ucmVzKCkgewotICAgIGlmIChjb25zY3RsZmQgPj0gMCkgewot CWlmICh3cml0ZShjb25zY3RsZmQsICJyYXdvZmYiLCA2KSA9PSA2KQotCSAgcmV0dXJuIDA7Ci0g ICAgfQotICAgIHJldHVybiAtMTsKLX0KLQotaW50Ci1wOXNuZGJyayhpbnQgbXNlYykgewotICAg IGlmICh0dHljdGxmZCA+PSAwKSB7Ci0JY2hhciBjbWRbMjBdOwotCWludCBpID0gc3ByaW50Zihj bWQsICJrJWQiLCBtc2VjKTsKLQlpZiAod3JpdGUodHR5Y3RsZmQsIGNtZCwgaSkgPT0gaSkKLQkg IHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLWludAotY29ud3JpdGUoY2hh ciAqYnVmLCBpbnQgbikgewotICAgIGludCB4OwotICAgIHN0YXRpYyBpbnQgbGVuZ3RoID0gMDsK LSAgICBzdGF0aWMgaW50IGhvbGRpbmdjciA9IDA7Ci0gICAgaW50IG5vcm1hbCA9IDA7Ci0gICAg Zm9yICh4ID0gMDsgeCA8IG47IHgrKykgewotCWNoYXIgYyA9IGJ1Zlt4XTsKLQlpZiAoYyA9PSAw MDcpIHsKLQkgICAgaWYgKG5vcm1hbCkgewotCQl3cml0ZSgxLCBidWYgKyAoeCAtIG5vcm1hbCks IG5vcm1hbCk7Ci0JCWxlbmd0aCArPSBub3JtYWw7Ci0JCW5vcm1hbCA9IDA7Ci0JICAgIH0KLQkg ICAgLyogd3JpdGUobm9pc2VmZCwgIjEwMDAgMzAwIiwgOCk7ICovCi0JICAgIGhvbGRpbmdjciA9 IDA7Ci0JfSBlbHNlIGlmIChjID09ICdccicpIHsKLQkgICAgaWYgKG5vcm1hbCkgewotCQl3cml0 ZSgxLCBidWYgKyAoeCAtIG5vcm1hbCksIG5vcm1hbCk7Ci0JCWxlbmd0aCArPSBub3JtYWw7Ci0J CW5vcm1hbCA9IDA7Ci0JICAgIH0KLQkgICAgaG9sZGluZ2NyID0gMTsKLQl9IGVsc2UgaWYgKGMg PT0gJ1xuJykgewotCSAgICB3cml0ZSgxLCBidWYgKyAoeCAtIG5vcm1hbCksIG5vcm1hbCArIDEp OwotCSAgICBub3JtYWwgPSAwOwotCSAgICBsZW5ndGggPSAwOwotCSAgICBob2xkaW5nY3IgPSAw OwotCX0gZWxzZSBpZiAoYyA9PSAnXGInKSB7Ci0JICAgIGlmIChub3JtYWwpIHsKLQkJd3JpdGUo MSwgYnVmICsgKHggLSBub3JtYWwpLCBub3JtYWwpOwotCQlsZW5ndGggKz0gbm9ybWFsOwotCQlu b3JtYWwgPSAwOwotCSAgICB9Ci0JICAgIGlmIChsZW5ndGgpIHsKLQkJd3JpdGUoMSwgJmMsIDEp OwotCQlsZW5ndGgtLTsKLQkgICAgfQotCSAgICBob2xkaW5nY3IgPSAwOwotCX0gZWxzZSB7Ci0J ICAgIGlmIChob2xkaW5nY3IpIHsKLQkJY2hhciBiID0gJ1xiJzsKLQkJd2hpbGUgKGxlbmd0aC0t ID4gMCkKLQkJICB3cml0ZSgxLCAmYiwgMSk7Ci0JCWxlbmd0aCA9IDA7CS8qIGNvbXBpbGVyIGJ1 ZyAqLwotCSAgICB9Ci0JICAgIGhvbGRpbmdjciA9IDA7Ci0JICAgIG5vcm1hbCsrOwotCX0KLSAg ICB9Ci0gICAgaWYgKG5vcm1hbCkgewotCXdyaXRlKDEsIGJ1ZiArICh4IC0gbm9ybWFsKSwgbm9y bWFsKTsKLQlsZW5ndGggKz0gbm9ybWFsOwotICAgIH0KLSAgICByZXR1cm4gbjsKLX0KLQotdm9p ZAotY29ucHJpbnQoY2hhciAqZm10LCAuLi4pIHsKLSAgICBzdGF0aWMgY2hhciBidWZbMTAwMF07 CQkvKiBub3Qgc2FmZSBpZiBvbiB0aGUgc3RhY2sgKi8KLQotICAgIHZhX2xpc3QgYXA7Ci0gICAg aW50IGk7Ci0KLSAgICB2YV9zdGFydChhcCwgZm10KTsKLSAgICBpID0gdnNwcmludGYoYnVmLCBm bXQsIGFwKTsKLSAgICBjb253cml0ZShidWYsIGkpOwotfQotI2VuZGlmIC8qIFBsYW45ICovCi0K LS8qIGZwcmludGYsIHByaW50ZiwgcGVycm9yIHJlcGxhY2VtZW50cy4uLiAqLwotCi0vKiBmIHAg ciBpIG4gdCBmICovCi0KLSNpZmRlZiBVTklYCi0jaWZkZWYgQ0tfQU5TSUMKLSNpbmNsdWRlIDxz dGRhcmcuaD4KLSNlbHNlIC8qIENLX0FOU0lDICovCi0jaWZkZWYgX19HTlVDX18KLSNpbmNsdWRl IDxzdGRhcmcuaD4KLSNlbHNlCi0jaW5jbHVkZSA8dmFyYXJncy5oPgotI2VuZGlmCS8qIF9fR05V Q19fICovCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSNpZmRlZiBmcHJpbnRmCi0jdW5kZWYgZnBy aW50Zgotc3RhdGljIGNoYXIgc3RyMVs0MDk2XTsKLXN0YXRpYyBjaGFyIHN0cjJbNDA5Nl07Ci1p bnQKLSNpZmRlZiBDS19BTlNJQwotY2t4ZnByaW50ZihGSUxFICogZmlsZSwgY29uc3QgY2hhciAq IGZvcm1hdCwgLi4uKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLWNreGZwcmludGYodmFfYWxpc3Qp IHZhX2RjbAotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBja3hmcHJpbnRmICovIHsKLSAgICBp bnQgaSwgaiwgbGVuLCBnb3RfY3I7Ci0gICAgdmFfbGlzdCBhcmdzOwotICAgIGludCByYyA9IDA7 Ci0KLSNpZmRlZiBDS19BTlNJQwotICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7Ci0jZWxzZSAv KiBDS19BTlNJQyAqLwotICAgIGNoYXIgKiBmb3JtYXQ7Ci0gICAgRklMRSAqIGZpbGU7Ci0gICAg dmFfc3RhcnQoYXJncyk7Ci0gICAgZmlsZSA9IHZhX2FyZyhhcmdzLEZJTEUgKik7Ci0gICAgZm9y bWF0ID0gdmFfYXJnKGFyZ3MsY2hhciAqKTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotCi0gICAg aWYgKCFpbnNlcnZlciB8fCAoZmlsZSAhPSBzdGRvdXQgJiYgZmlsZSAhPSBzdGRlcnIgJiYgZmls ZSAhPSBzdGRpbikpIHsKLQlyYyA9IHZmcHJpbnRmKGZpbGUsZm9ybWF0LGFyZ3MpOwotICAgIH0g ZWxzZSB7Ci0JdW5zaWduZWQgaW50IGM7Ci0gICAgICAgIHJjID0gdnNwcmludGYoc3RyMSwgZm9y bWF0LCBhcmdzKTsKLSAgICAgICAgbGVuID0gc3RybGVuKHN0cjEpOwotICAgICAgICBpZiAobGVu ID49IHNpemVvZihzdHIxKSkgewotICAgICAgICAgICAgZGVidWcoRjEwMSwiY2t4ZnByaW50Zigp IGJ1ZmZlciBvdmVyZmxvdyIsIiIsbGVuKTsKLSAgICAgICAgICAgIGRvZXhpdChCQURfRVhJVCwx KTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGkgPSAwLCBqID0gMCwgZ290X2NyID0gMDsKLQkg ICAgIGkgPCBsZW4gJiYgaiA8IHNpemVvZihzdHIxKS0yOwotCSAgICAgaSsrLCBqKysgKSB7Ci0J ICAgIC8qIFdlIGNhbid0IHVzZSAyNTUgYXMgYSBjYXNlIGxhYmVsIGJlY2F1c2Ugb2Ygc2lnbmVk IGNoYXJzICovCi0JICAgIGMgPSAodW5zaWduZWQpKHN0cjFbaV0gJiAweGZmKTsKLSNpZmRlZiBU TkNPREUKLQkgICAgaWYgKGMgPT0gMjU1KSB7Ci0JCWlmIChnb3RfY3IgJiYgIVRFTE9QVF9NRShU RUxPUFRfQklOQVJZKSkKLQkJICBzdHIyW2orK10gPSAnXDAnOwotCQlzdHIyW2orK10gPSBJQUM7 Ci0JCXN0cjJbal0gPSBJQUM7Ci0JCWdvdF9jciA9IDA7Ci0JICAgIH0gZWxzZQotI2VuZGlmIC8q IFROQ09ERSAqLwotCSAgICBzd2l0Y2ggKGMpIHsKLQkgICAgICBjYXNlICdccic6Ci0gICAgICAg ICAgICAgICAgaWYgKGdvdF9jcgotI2lmZGVmIFROQ09ERQotCQkgICAgJiYgIVRFTE9QVF9NRShU RUxPUFRfQklOQVJZKQotI2VuZGlmIC8qIFROQ09ERSAqLwotCQkgICAgKQotCQkgIHN0cjJbaisr XSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgc3RyMltqXSA9IHN0cjFbaV07Ci0gICAgICAgICAg ICAgICAgZ290X2NyID0gMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQkgICAgICBjYXNlICdc bic6Ci0gICAgICAgICAgICAgICAgaWYgKCFnb3RfY3IpCi0JCSAgc3RyMltqKytdID0gJ1xyJzsK LSAgICAgICAgICAgICAgICBzdHIyW2pdID0gc3RyMVtpXTsKLSAgICAgICAgICAgICAgICBnb3Rf Y3IgPSAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCSAgICAgIGRlZmF1bHQ6Ci0gICAgICAg ICAgICAgICAgaWYgKGdvdF9jcgotI2lmZGVmIFROQ09ERQotCQkgICAgJiYgIVRFTE9QVF9NRShU RUxPUFRfQklOQVJZKQotI2VuZGlmIC8qIFROQ09ERSAqLwotCQkgICAgKQotCQkgIHN0cjJbaisr XSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgc3RyMltqXSA9IHN0cjFbaV07Ci0gICAgICAgICAg ICAgICAgZ290X2NyID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAo Z290X2NyCi0jaWZkZWYgVE5DT0RFCi0gICAgICAgICAgICAgJiYgIVRFTE9QVF9NRShURUxPUFRf QklOQVJZKQotI2VuZGlmIC8qIFROQ09ERSAqLwotICAgICAgICAgICAgICkKLSAgICAgICAgICAg IHN0cjJbaisrXSA9ICdcMCc7Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotI2lmZGVmIFROQ09ERQot ICAgICAgICBpZiAoVEVMT1BUX01FKFRFTE9QVF9FTkNSWVBUSU9OKSkKLQkgIGNrX3RuX2VuY3J5 cHQoc3RyMixqKTsKLSNlbmRpZiAvKiBUTkNPREUgKi8KLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9O ICovCi0jaWZkZWYgQ0tfU1NMCi0JaWYgKGluc2VydmVyICYmIChzc2xfYWN0aXZlX2ZsYWcgfHwg dGxzX2FjdGl2ZV9mbGFnKSkgewotCSAgICAvKiBXcml0ZSB1c2luZyBTU0wgKi8KLSAgICAgICAg ICAgIGNoYXIgKiBwID0gc3RyMjsKLSAgICAgICAgICBzc2xfcmV0cnk6Ci0gICAgICAgICAgICBp ZiAoc3NsX2FjdGl2ZV9mbGFnKQotCSAgICAgIHJjID0gU1NMX3dyaXRlKHNzbF9jb24sIHAsIGop OwotICAgICAgICAgICAgZWxzZQotCSAgICAgIHJjID0gU1NMX3dyaXRlKHRsc19jb24sIHAsIGop OwotCSAgICBkZWJ1ZyhGMTExLCJja3hmcHJpbnRmIiwiU1NMX3dyaXRlIixyYyk7Ci0gICAgICAg ICAgICBzd2l0Y2ggKFNTTF9nZXRfZXJyb3Ioc3NsX2FjdGl2ZV9mbGFnP3NzbF9jb246dGxzX2Nv bixyYykpIHsKLQkgICAgICBjYXNlIFNTTF9FUlJPUl9OT05FOgotICAgICAgICAgICAgICAgIGlm IChyYyA9PSBqKQotCQkgIGJyZWFrOwotICAgICAgICAgICAgICAgIHAgKz0gcmM7Ci0gICAgICAg ICAgICAgICAgaiAtPSByYzsKLSAgICAgICAgICAgICAgICBnb3RvIHNzbF9yZXRyeTsKLQkgICAg ICBjYXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRFOgotCSAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRf UkVBRDoKLQkgICAgICBjYXNlIFNTTF9FUlJPUl9TWVNDQUxMOgotICAgICAgICAgICAgICAgIGlm IChyYyAhPSAwKQotCQkgIHJldHVybigtMSk7Ci0JICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9Y NTA5X0xPT0tVUDoKLQkgICAgICBjYXNlIFNTTF9FUlJPUl9TU0w6Ci0JICAgICAgY2FzZSBTU0xf RVJST1JfWkVST19SRVRVUk46Ci0JICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByYyA9 IDA7Ci0gICAgICAgICAgICB9Ci0JfSBlbHNlCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAg IGZ3cml0ZShzdHIyLHNpemVvZihjaGFyKSxqLHN0ZG91dCk7Ci0gICAgfQotICAgIHZhX2VuZChh cmdzKTsKLSAgICByZXR1cm4ocmMpOwotfQotI2VuZGlmIC8qIGZwcmludGYgKi8KLQotLyogcCBy IGkgbiB0IGYgKi8KLQotI2lmZGVmIHByaW50ZgotI3VuZGVmIHByaW50ZgotaW50Ci0jaWZkZWYg Q0tfQU5TSUMKLWNreHByaW50Zihjb25zdCBjaGFyICogZm9ybWF0LCAuLi4pCi0jZWxzZSAvKiBD S19BTlNJQyAqLwotY2t4cHJpbnRmKHZhX2FsaXN0KSB2YV9kY2wKLSNlbmRpZiAvKiBDS19BTlNJ QyAqLwotLyogY2t4cHJpbnRmICovIHsKLSAgICBpbnQgaSwgaiwgbGVuLCBnb3RfY3I7Ci0gICAg dmFfbGlzdCBhcmdzOwotICAgIGludCByYyA9IDA7Ci0KLSNpZmRlZiBDS19BTlNJQwotICAgIHZh X3N0YXJ0KGFyZ3MsIGZvcm1hdCk7Ci0jZWxzZSAvKiBDS19BTlNJQyAqLwotICAgIGNoYXIgKiBm b3JtYXQ7Ci0gICAgdmFfc3RhcnQoYXJncyk7Ci0gICAgZm9ybWF0ID0gdmFfYXJnKGFyZ3MsY2hh ciAqKTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotCi0gICAgaWYgKCFpbnNlcnZlcikgewotCXJj ID0gdnByaW50Zihmb3JtYXQsIGFyZ3MpOwotICAgIH0gZWxzZSB7Ci0JdW5zaWduZWQgaW50IGM7 Ci0gICAgICAgIHJjID0gdnNwcmludGYoc3RyMSwgZm9ybWF0LCBhcmdzKTsKLSAgICAgICAgbGVu ID0gc3RybGVuKHN0cjEpOwotICAgICAgICBpZiAobGVuID49IHNpemVvZihzdHIxKSkgewotICAg ICAgICAgICAgZGVidWcoRjEwMSwiY2t4cHJpbnRmKCkgYnVmZmVyIG92ZXJmbG93IiwiIixsZW4p OwotICAgICAgICAgICAgZG9leGl0KEJBRF9FWElULDEpOwotICAgICAgICB9Ci0gICAgICAgIGZv ciAoaSA9IDAsIGogPSAwLCBnb3RfY3I9MDsKLQkgICAgIGkgPCBsZW4gJiYgaiA8IHNpemVvZihz dHIxKS0yOwotCSAgICAgaSsrLCBqKysgKSB7Ci0JICAgIGMgPSAodW5zaWduZWQpKHN0cjFbaV0g JiAweGZmKTsKLSNpZmRlZiBUTkNPREUKLQkgICAgaWYgKGMgPT0gMjU1KSB7Ci0JCWlmIChnb3Rf Y3IgJiYgIVRFTE9QVF9NRShURUxPUFRfQklOQVJZKSkKLQkJICBzdHIyW2orK10gPSAnXDAnOwot CQlzdHIyW2orK10gPSBJQUM7Ci0JCXN0cjJbal0gPSBJQUM7Ci0JCWdvdF9jciA9IDA7Ci0JICAg IH0gZWxzZQotI2VuZGlmIC8qIFROQ09ERSAqLwotCSAgICBzd2l0Y2ggKGMpIHsKLQkgICAgICBj YXNlICdccic6Ci0gICAgICAgICAgICAgICAgaWYgKGdvdF9jcgotI2lmZGVmIFROQ09ERQotCQkg ICAgJiYgIVRFTE9QVF9NRShURUxPUFRfQklOQVJZKQotI2VuZGlmIC8qIFROQ09ERSAqLwotCQkg ICAgKQotCQkgIHN0cjJbaisrXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgc3RyMltqXSA9IHN0 cjFbaV07Ci0gICAgICAgICAgICAgICAgZ290X2NyID0gMTsKLSAgICAgICAgICAgICAgICBicmVh azsKLQkgICAgICBjYXNlICdcbic6Ci0gICAgICAgICAgICAgICAgaWYgKCFnb3RfY3IpCi0JCSAg c3RyMltqKytdID0gJ1xyJzsKLSAgICAgICAgICAgICAgICBzdHIyW2pdID0gc3RyMVtpXTsKLSAg ICAgICAgICAgICAgICBnb3RfY3IgPSAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCSAgICAg IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKGdvdF9jcgotI2lmZGVmIFROQ09ERQotCQkg ICAgJiYgIVRFTE9QVF9NRShURUxPUFRfQklOQVJZKQotI2VuZGlmIC8qIFROQ09ERSAqLwotCQkg ICAgKQotCQkgIHN0cjJbaisrXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgc3RyMltqXSA9IHN0 cjFbaV07Ci0gICAgICAgICAgICAgICAgZ290X2NyID0gMDsKLSAgICAgICAgICAgICAgICBicmVh azsKLQkgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChnb3RfY3IKLSNpZmRlZiBUTkNPREUK LSAgICAgICAgICAgICAmJiAhVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpCi0jZW5kaWYgLyogVE5D T0RFICovCi0gICAgICAgICAgICAgKQotICAgICAgICAgICAgc3RyMltqKytdID0gJ1wwJzsKLSNp ZmRlZiBDS19FTkNSWVBUSU9OCi0jaWZkZWYgVE5DT0RFCi0gICAgICAgIGlmIChURUxPUFRfTUUo VEVMT1BUX0VOQ1JZUFRJT04pKQotCSAgY2tfdG5fZW5jcnlwdChzdHIyLGopOwotI2VuZGlmIC8q IFROQ09ERSAqLwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNpZmRlZiBDS19TU0wKLQlp ZiAoaW5zZXJ2ZXIgJiYgKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpKSB7Ci0g ICAgICAgICAgICBjaGFyICogcCA9IHN0cjI7Ci0JICAgIC8qIFdyaXRlIHVzaW5nIFNTTCAqLwot ICAgICAgICAgIHNzbF9yZXRyeToKLSAgICAgICAgICAgIGlmIChzc2xfYWN0aXZlX2ZsYWcpCi0J ICAgICAgcmMgPSBTU0xfd3JpdGUoc3NsX2NvbiwgcCwgaik7Ci0gICAgICAgICAgICBlbHNlCi0J ICAgICAgcmMgPSBTU0xfd3JpdGUodGxzX2NvbiwgcCwgaik7Ci0JICAgIGRlYnVnKEYxMTEsImNr eHByaW50ZiIsIlNTTF93cml0ZSIscmMpOwotICAgICAgICAgICAgc3dpdGNoIChTU0xfZ2V0X2Vy cm9yKHNzbF9hY3RpdmVfZmxhZz9zc2xfY29uOnRsc19jb24scmMpKSB7Ci0JICAgICAgY2FzZSBT U0xfRVJST1JfTk9ORToKLSAgICAgICAgICAgICAgICBpZiAocmMgPT0gaikKLQkJICBicmVhazsK LSAgICAgICAgICAgICAgICBwICs9IHJjOwotICAgICAgICAgICAgICAgIGogLT0gcmM7Ci0gICAg ICAgICAgICAgICAgZ290byBzc2xfcmV0cnk7Ci0JICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9X UklURToKLQkgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6Ci0JICAgICAgY2FzZSBTU0xf RVJST1JfU1lTQ0FMTDoKLSAgICAgICAgICAgICAgICBpZiAocmMgIT0gMCkKLQkJICByZXR1cm4o LTEpOwotCSAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfWDUwOV9MT09LVVA6Ci0JICAgICAgY2Fz ZSBTU0xfRVJST1JfU1NMOgotCSAgICAgIGNhc2UgU1NMX0VSUk9SX1pFUk9fUkVUVVJOOgotCSAg ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmMgPSAwOwotICAgICAgICAgICAgfQotCX0g ZWxzZQotI2VuZGlmIC8qIENLX1NTTCAqLwotCSAgcmMgPSBmd3JpdGUoc3RyMixzaXplb2YoY2hh ciksaixzdGRvdXQpOwotICAgIH0KLSAgICB2YV9lbmQoYXJncyk7Ci0gICAgcmV0dXJuKHJjKTsK LX0KLSNlbmRpZiAvKiBwcmludGYgKi8KLQotLyogIHAgZSByIHIgbyByICAqLwotCi0jaWZkZWYg cGVycm9yCi0jdW5kZWYgcGVycm9yCi1fUFJPVE9UWVAoY2hhciAqIGNrX2VycnN0ciwoVk9JRCkp OwotI2lmZGVmIE5FWFQKLXZvaWQKLSNlbHNlCi0jaWZkZWYgQ0tfU0NPVjUKLXZvaWQKLSNlbHNl Ci1pbnQKLSNlbmRpZiAvKiBDS19TQ09WNSAqLwotI2VuZGlmIC8qIE5FWFQgKi8KLSNpZmRlZiBD S19BTlNJQwotY2t4cGVycm9yKGNvbnN0IGNoYXIgKiBzdHIpCi0jZWxzZSAvKiBDS19BTlNJQyAq LwotY2t4cGVycm9yKHN0cikgY2hhciAqIHN0cjsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyog Y2t4cGVycm9yICovIHsKLSAgICBjaGFyICogZXJyc3RyID0gY2tfZXJyc3RyKCk7Ci0jaWZuZGVm IE5FWFQKLSNpZm5kZWYgQ0tfU0NPVjUKLSAgICByZXR1cm4KLSNlbmRpZiAvKiBDS19TQ09WNSAq LwotI2VuZGlmIC8qIE5FWFQgKi8KLSAgICAgIGNreHByaW50ZigiJXMlcyAlc1xuIixzdHIsKmVy cnN0cj8iOiI6IiIsZXJyc3RyKTsKLX0KLSNlbmRpZiAvKiBwZXJyb3IgKi8KLSNlbmRpZiAvKiBV TklYICovCi0KLSNpZmRlZiBNSU5JWDIKLQotLyogTWluaXggZG9lc24ndCBoYXZlIGEgZ2V0dGlt ZW9mZGF5IGNhbGwgKGJ1dCBNSU5JWDMgZG9lcykuCi0gKiBXZSBmYWtlIG9uZSBoZXJlIHVzaW5n IHRpbWUoMikKLSAqLwotCi0jaWZuZGVmIE1JTklYMwotaW50Ci1nZXR0aW1lb2ZkYXkoc3RydWN0 IHRpbWV2YWwgKnRwLCBzdHJ1Y3QgdGltZXpvbmUgKnR6cCkgewotICAgIHRwLT50dl91c2VjID0g MEw7CQkJLyogQ2xvc2UgZW5vdWdoIGZvciBob3JzZXNob2VzICovCi0gICAgaWYodGltZSgmKHRw LT50dl9zZWMpKT09LTEpCi0gICAgICByZXR1cm4oLTEpOwotICAgIHJldHVybigwKTsKLX0KLSNl bmRpZgkvKiBNSU5JWDMgKi8KLQotI2lmbmRlZiBNSU5JWDMKLWludAotcmVhZGxpbmsoY29uc3Qg Y2hhciAqcGF0aCwgdm9pZCAqYnVmLCBzaXplX3QgYnVmc2l6KSB7Ci0gICAgZXJybm8gPSBFTk9T WVM7Ci0gICAgcmV0dXJuKC0xKTsKLX0KLSNlbmRpZgkvKiBNSU5JWDMgKi8KLQotI2VuZGlmIC8q IE1JTklYMiAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTku MC4zMDIvY2t1dHV0b3IudHh0IGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMw Mi9ja3V0dXRvci50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMmFlYmUuLjAw MDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V0dXRv ci50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxOTQ4ICswLDAgQEAKLQotICAgWzFdVGhlIENvbHVt YmlhIENyb3duIFRoZSBLZXJtaXQgUHJvamVjdCB8IENvbHVtYmlhIFVuaXZlcnNpdHkKLSAgIDYx MiBXZXN0IDExNXRoIFN0cmVldCwgTmV3IFlvcmsgTlkgMTAwMjUgVVNBIG8gWzJda2VybWl0QGNv bHVtYmlhLmVkdQotICAgLi4uc2luY2UgMTk4MQotICAgWzNdSG9tZSBbNF1LZXJtaXQgOTUgWzVd Qy1LZXJtaXQgWzZdU2NyaXB0cyBbN11DdXJyZW50IFs4XU5ldyBbOV1GQVEKLSAgIFsxMF1TdXBw b3J0Ci0KLSAgIEMtS0VSTUlUIDkuMCBVTklYIE1BTlVBTCBQQUdFIEFORCBUVVRPUklBTAotCi0g ICAgIEZyYW5rIGRhIENydXoKLSAgICAgWzExXVRoZSBLZXJtaXQgUHJvamVjdCwgWzEyXUNvbHVt YmlhIFVuaXZlcnNpdHkKLQotICAgWyBbMTNdUERGIHZlcnNpb24gXSBbIFsxNF1Ocm9mZiB2ZXJz aW9uIF0KLQotICAgICBUaGlzIGRvY3VtZW50IGlzIGludGVuZGVkIHRvIGdpdmUgdGhlIGJlZ2lu bmVyIHN1ZmZpY2llbnQKLSAgICAgaW5mb3JtYXRpb24gdG8gbWFrZSBiYXNpYyAoaWYgbm90IGFk dmFuY2VkKSB1c2Ugb2YgQy1LZXJtaXQgOS4wLgotICAgICBBbHRob3VnaCBpdCBtaWdodCBiZSBy YXRoZXIgbG9uZyBmb3IgYSBVbml4IG1hbnVhbCBwYWdlIChhYm91dCAxNjAwCi0gICAgIGxpbmVz KSwgaXQncyBzdGlsbCBmYXIgc2hvcnRlciB0aGFuIHRoZSBbMTVdQy1LZXJtaXQgbWFudWFsLCB3 aGljaAotICAgICBzaG91bGQgYmUgY29uc3VsdGVkIGZvciBhZHZhbmNlZCB0b3BpY3Mgc3VjaCBh cyBjdXN0b21pemF0aW9uLAotICAgICBjaGFyYWN0ZXItc2V0cywgc2NyaXB0aW5nLCBldGMuIFdl IGFsc28gYXR0ZW1wdCB0byBwcm92aWRlIGEgY2xlYXIKLSAgICAgc3RydWN0dXJhbCBvdmVydmll dyBvZiBDLUtlcm1pdCdzIG1hbnkgY2FwYWJpbGl0aWVzLCBmdW5jdGlvbmFsCi0gICAgIGFyZWFz LCBzdGF0ZXMsIGFuZCBtb2RlcyBhbmQgdGhlaXIgaW50ZXJyZWxhdGlvbiwgdGhhdCBzaG91bGQg YmUKLSAgICAgaGVscGZ1bCB0byBiZWdpbm5lcnMgYW5kIHZldGVyYW5zIGFsaWtlLCBhcyB3ZWxs IGFzIHRvIHRob3NlCi0gICAgIHVwZ3JhZGluZyB0byB0aGUgbmV3IHJlbGVhc2UuIFRoYW5rcyB0 byBDaHJpc3RpbmUgR2lhbm9uZSBmb3IgaGVyCi0gICAgIHdvcmsgb24gdGhpcyBkb2N1bWVudCBi ZWZvcmUgc2hlIHdhcyBsYWlkIG9mZiBpbiAyMDA1LgotCi0gICBNb3N0IHJlY2VudCB1cGRhdGU6 IEZyaSBKdWwgMSAxNDoxMjozMSAyMDExCi0KLUNPTlRFTlRTCi0KLSAgICAgKiBbMTZdREVTQ1JJ UFRJT04KLSAgICAgKiBbMTddU1lOT1BTSVMKLSAgICAgKiBbMThdT1BUSU9OUwotICAgICAqIFsx OV1DT01NQU5EIExBTkdVQUdFCi0gICAgICogWzIwXUlOSVRJQUxJWkFUSU9OIEZJTEUKLSAgICAg KiBbMjFdTU9ERVMgT0YgT1BFUkFUSU9OCi0gICAgICogWzIyXU1BS0lORyBDT05ORUNUSU9OUwot ICAgICAqIFsyM11UUkFOU0ZFUlJJTkcgRklMRVMgV0lUSCBLRVJNSVQKLSAgICAgKiBbMjRdS0VS TUlUIENMSUVOVC9TRVJWRVIgQ09OTkVDVElPTlMKLQotICAgICAqIFsyNV1LRVJNSVQnUyBCVUlM VC1JTiBGVFAgQU5EIEhUVFAgQ0xJRU5UUwotICAgICAqIFsyNl1JTlRFUk5FVCBLRVJNSVQgU0VS VklDRQotICAgICAqIFsyN11TRUNVUklUWQotICAgICAqIFsyOF1BTFRFUk5BVElWRSBDT01NQU5E LUxJTkUgUEVSU09OQUxJVElFUwotICAgICAqIFsyOV1MSUNFTlNFCi0gICAgICogWzMwXU9USEVS IFRPUElDUwotICAgICAqIFszMV1ET0NVTUVOVEFUSU9OIEFORCBVUERBVEVTCi0gICAgICogWzMy XUZJTEVTCi0gICAgICogWzMzXUFVVEhPUlMKLQotREVTQ1JJUFRJT04KLQotICAgWzM0XVRvcCAg IFszNV1Db250ZW50cyAgIFszNl1OZXh0Ci0KLSAgIFszN11DLUtlcm1pdCBpcyBhbiBhbGwtcHVy cG9zZSBjb21tdW5pY2F0aW9ucyBzb2Z0d2FyZSBwYWNrYWdlIGZyb20gdGhlCi0gICBbMzhdS2Vy bWl0IFByb2plY3QgYXQgWzM5XUNvbHVtYmlhIFVuaXZlcnNpdHkgdGhhdDoKLQotICAgICAqIElz IHBvcnRhYmxlIHRvIG1hbnkgcGxhdGZvcm1zLCBVbml4IGFuZCBub24tVW5peCBhbGlrZS4KLSAg ICAgKiBDYW4gbWFrZSBib3RoIHNlcmlhbCBhbmQgbmV0d29yayBjb25uZWN0aW9ucy4KLSAgICAg KiBDYW4gY29uZHVjdCBpbnRlcmFjdGl2ZSB0ZXJtaW5hbCBzZXNzaW9ucyBvdmVyIGl0cyBjb25u ZWN0aW9uLgotICAgICAqIENhbiB0cmFuc2ZlciB0ZXh0IG9yIGJpbmFyeSBmaWxlcyBvdmVyIHRo ZSBzYW1lIGNvbm5lY3Rpb24uCi0gICAgICogQ2FuIGNvbnZlcnQgdGV4dC1maWxlIGNoYXJhY3Rl ciBzZXRzIGluIHRlcm1pbmFsIG1vZGUgb3IgZmlsZQotICAgICAgIHRyYW5zZmVyLgotICAgICAq IElzIGN1c3RvbWl6YWJsZSBpbiBldmVyeSBhc3BlY3Qgb2YgaXRzIG9wZXJhdGlvbi4KLQotICAg Qy1LZXJtaXQgaXMgYSBtb2RlbSBwcm9ncmFtLCBhIFRlbG5ldCBjbGllbnQsIGFuIFJsb2dpbiBj bGllbnQsIGFuIEZUUAotICAgY2xpZW50LCBhbiBIVFRQIGNsaWVudCwgYW5kIG9uIHNlbGVjdGVk IHBsYXRmb3JtcywgYWxzbyBhbiBYLjI1IGNsaWVudC4KLSAgIEl0IGNhbiBtYWtlIGl0cyBvd24g c2VjdXJlIEludGVybmV0IGNvbm5lY3Rpb25zIHVzaW5nIElFVEYtYXBwcm92ZWQKLSAgIHNlY3Vy aXR5IG1ldGhvZHMgaW5jbHVkaW5nIEtlcmJlcm9zIElWLCBLZXJiZXJvcyBWLCBTU0wvVExTLCBh bmQgU1JQCi0gICBhbmQgaXQgY2FuIGFsc28gbWFrZSBTU0ggKFNlY3VyZSBTaGVsbCkgY29ubmVj dGlvbnMgdGhyb3VnaCB5b3VyCi0gICBleHRlcm5hbCBTU0ggY2xpZW50IGFwcGxpY2F0aW9uLiBJ dCBjYW4gYmUgdGhlIGZhci1lbmQgZmlsZS10cmFuc2ZlciBvcgotICAgY2xpZW50L3NlcnZlciBw YXJ0bmVyIG9mIHlvdXIgZGVza3RvcCBLZXJtaXQgY2xpZW50LiBJdCBjYW4gYWxzbyBhY2NlcHQK LSAgIGluY29taW5nIGRpYWxlZCBhbmQgbmV0d29yayBjb25uZWN0aW9ucy4gSXQgY2FuIGV2ZW4g YmUgaW5zdGFsbGVkIGFzIGFuCi0gICBJbnRlcm5ldCBzZXJ2aWNlIG9uIGl0cyBvd24gc3RhbmRh cmQgVENQIHNvY2tldCwgMTY0OSBbWzQwXVJGQzI4MzksCi0gICBbNDFdUkZDMjg0MF0uCi0KLSAg IEFuZCBwZXJoYXBzIG1vc3QgaW1wb3J0YW50LCBldmVyeXRoaW5nIHlvdSBjYW4gZG8gImJ5IGhh bmQiCi0gICAoaW50ZXJhY3RpdmVseSkgd2l0aCBDLUtlcm1pdCwgY2FuIGJlICJzY3JpcHRlZCIg KGF1dG9tYXRlZCkgdXNpbmcgaXRzCi0gICBidWlsdC1pbiBjcm9zcy1wbGF0Zm9ybSB0cmFuc3Bv cnQtaW5kZXBlbmRlbnQgc2NyaXB0IHByb2dyYW1taW5nCi0gICBsYW5ndWFnZSwgd2hpY2ggaGFw cGVucyB0byBiZSBpZGVudGljYWwgdG8gaXRzIGludGVyYWN0aXZlIGNvbW1hbmQKLSAgIGxhbmd1 YWdlLgotCi0gICBUaGlzIG1hbnVhbCBwYWdlIG9mZmVycyBhbiBvdmVydmlldyBvZiBDLUtlcm1p dCA5LjAgZm9yIFVuaXggKCJVbml4IiBpcwotICAgYW4gb3BlcmF0aW5nIHN5c3RlbSBmYW1pbHkg dGhhdCBpbmNsdWRlcyBBSVgsIERHL1VYLCBGcmVlQlNELCBIUC1VWCwKLSAgIElSSVgsIExpbnV4 LCBNYWMgT1MgWCwgTmV0QlNELCBPcGVuQlNELCBPcGVuIFNlcnZlciwgT3BlbiBVbml4LCBRTlgs Ci0gICBTb2xhcmlzLCBTdW5PUywgU3lzdGVtIFYgUjMsIFN5c3RlbSBWIFI0LCBUcnU2NCBVbml4 LCBVbml4d2FyZSwgWGVuaXgsCi0gICBhbmQgbWFueSBvdGhlcnMpLiBGb3IgdGhvcm91Z2ggY292 ZXJhZ2UsIHBsZWFzZSBjb25zdWx0IHRoZSBwdWJsaXNoZWQKLSAgIEMtS2VybWl0IG1hbnVhbCBh bmQgc3VwcGxlbWVudHMgKHNlZSBbNDJdRE9DVU1FTlRBVElPTiBiZWxvdykuIEZvcgotICAgZnVy dGhlciBpbmZvcm1hdGlvbiBhYm91dCBDLUtlcm1pdCwgS2VybWl0IHNvZnR3YXJlIGZvciBvdGhl cgotICAgcGxhdGZvcm1zLCBhbmQgS2VybWl0IG1hbnVhbHMsIHZpc2l0IHRoZSBLZXJtaXQgUHJv amVjdCB3ZWJzaXRlOgotCi0gIFs0M11odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvCi0K LSAgIFRoaXMgaXMgYSBsb25nZXItdGhhbi1hdmVyYWdlIG1hbnVhbCBwYWdlLCBhbmQgeWV0IGl0 IGJhcmVseSBzY3JhdGNoZXMKLSAgIHRoZSBzdXJmYWNlLiBEb24ndCBiZSBkYXVudGVkLiBDLUtl cm1pdCBpcyBhIGxhcmdlIGFuZCBjb21wbGV4IHBhY2thZ2UsCi0gICBldm9sdmluZyBvdmVyIGRl Y2FkZXMgb2YgcHJhY3RpY2UgYW5kIGV4cGVyaWVuY2UsIGJ1dCB0aGF0IGRvZXNuJ3QgbWVhbgot ICAgaXQncyBoYXJkIHRvIGxlYXJuIG9yIHVzZS4gSXRzIG1vc3QgY29tbW9ubHkgdXNlZCBmdW5j dGlvbnMgYXJlCi0gICBleHBsYWluZWQgaGVyZSB3aXRoIHBvaW50ZXJzIHRvIGFkZGl0aW9uYWwg aW5mb3JtYXRpb24gZWxzZXdoZXJlLgotCi0gICBbNDRdS2VybWl0IEhvbWUgWzQ1XUMtS2VybWl0 IEhvbWUgWzQ2XUMtS2VybWl0IEZBUQotCi1TWU5PUFNJUwotCi0gICBbNDddVG9wIFs0OF1Db250 ZW50cyBbNDldTmV4dCBbNTBdUHJldmlvdXMKLQotICAgVXNhZ2U6ICBrZXJtaXQgW2ZpbGVuYW1l XSBbLXggYXJnIFsteCBhcmddLi4uWy15eXldLi5dIFsgez0sLS0sK30gdGV4dAotICAgXSBdCi0g ICBPcjogICAga2VybWl0IFVSTAotCi0gICAgICogLXggaXMgYW4gb3B0aW9uIHJlcXVpcmluZyBh biBhcmd1bWVudDsKLSAgICAgKiAteSBpcyBhbiBvcHRpb24gd2l0aCBubyBhcmd1bWVudC4KLQot ICAgSWYgdGhlIGZpcnN0IGNvbW1hbmQtbGluZSBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiBhIGZp bGUsCi0gICBpbnRlcmFjdGl2ZS1tb2RlIGNvbW1hbmRzIGFyZSBleGVjdXRlZCBmcm9tIHRoZSBm aWxlLiBUaGUgJz0nIChvciAiLS0iKQotICAgYXJndW1lbnQgdGVsbHMgS2VybWl0IG5vdCB0byBw YXJzZSB0aGUgcmVtYWluZGVyIG9mIHRoZSBjb21tYW5kIGxpbmUsCi0gICBidXQgdG8gbWFrZSB0 aGUgd29yZHMgZm9sbG93aW5nICc9JyBhdmFpbGFibGUgYXMgXCUxLCBcJTIsIC4uLiBcJTkuIFRo ZQotICAgIisiIGFyZ3VtZW50IGlzIGxpa2UgIj0iIGJ1dCBmb3IgdXNlIGluICJrZXJiYW5nIHNj cmlwdHMiIChleHBsYWluZWQKLSAgIFs1MV1iZWxvdykuIEEgc2Vjb25kIGNvbW1hbmQtbGluZSBm b3JtYXQgYWxsb3dzIHRoZSBvbmUgYW5kIG9ubHkKLSAgIGFyZ3VtZW50IHRvIGJlIGEgWzUyXVRl bG5ldCwgRlRQLCBIVFRQLCBvciBJS1NEIFVSTC4KLQotICAgT3JkZXIgb2YgZXhlY3V0aW9uOgot Ci0gICAgMS4gWzUzXVRoZSBjb21tYW5kIGZpbGUgKGlmIGFueSkuCi0gICAgMi4gWzU0XVRoZSBp bml0aWFsaXphdGlvbiBmaWxlLCBpZiBhbnksIHVubGVzcyBzdXBwcmVzc2VkIHdpdGggLVkuCi0g ICAgMy4gWzU1XVRoZSBjdXN0b21pemF0aW9uIGZpbGUgKGlmIGl0IGlzIGV4ZWN1dGVkIGJ5IHRo ZSBpbml0aWFsaXphdGlvbgotICAgICAgIGZpbGUpLgotICAgIDQuIFs1Nl1UaGUgY29tbWFuZC1s aW5lIFVSTCAoaWYgYW55LCBhbmQgaWYgc28sIGV4ZWN1dGlvbiBzdG9wcyBoZXJlKS4KLSAgICA1 LiBbNTddQ29tbWFuZC1saW5lIG9wdGlvbnMgKGlmIGFueSkuCi0gICAgNi4gWzU4XUludGVyYWN0 aXZlIGNvbW1hbmRzLgotCi0gICBTb21lIGNvbW1hbmQtbGluZSBvcHRpb25zIGNhbiBjYXVzZSBh Y3Rpb25zIChzdWNoIGFzIC1zIHRvIHNlbmQgYQotICAgZmlsZSk7IG90aGVycyBqdXN0IHNldCBw YXJhbWV0ZXJzLiBJZiBhbnkgYWN0aW9uIG9wdGlvbnMgYXJlIGluY2x1ZGVkCi0gICBvbiB0aGUg Y29tbWFuZCBsaW5lLCBLZXJtaXQgZXhpdHMgd2hlbiBmaW5pc2hlZCB1bmxlc3MgYWxzbyBnaXZl biB0aGUKLSAgIC1TICgic3RheSIpIG9wdGlvbi4gSWYgbm8gYWN0aW9uIG9wdGlvbnMgYXJlIGdp dmVuLCBubyBpbml0aWFsaXphdGlvbgotICAgb3IgY29tbWFuZCBmaWxlcyBjb250YWluZWQgYW4g RVhJVCBvciBRVUlUIGNvbW1hbmQsIGFuZCBubyBmYXRhbCBlcnJvcnMKLSAgIG9jY3VycmVkLCBL ZXJtaXQgaXNzdWVzIGl0cyBwcm9tcHQgYW5kIHdhaXRzIGZvciB5b3UgdG8gdHlwZSBjb21tYW5k cy4KLQotICAgICBCZWFyIGluIG1pbmQgdGhhdCBDLUtlcm1pdCBjYW4gYmUgYnVpbHQgd2l0aCBz ZWxlY3RlZCBmZWF0dXJlcwotICAgICBkaXNhYmxlZCwgYW5kIGFsc28gdGhhdCBjZXJ0YWluIGZl YXR1cmVzIGFyZSBub3QgYXZhaWxhYmxlIG9uIGFsbAotICAgICBwbGF0Zm9ybXMuIEZvciBleGFt cGxlLCBDLUtlcm1pdCBjYW4ndCBiZSBidWlsdCB3aXRoIFRDUC9JUCBzdXBwb3J0Ci0gICAgIG9u IGEgcGxhdGZvcm0gdGhhdCBkb2VzIG5vdCBoYXZlIFRDUC9JUCBoZWFkZXIgZmlsZXMgYW5kIGxp YnJhcmllcwotICAgICAoYW5kIGV2ZW4gaWYgS2VybWl0IGRvZXMgaW5jbHVkZSBUQ1AvSVAgc3Vw cG9ydCwgaXQgY2FuJ3QgYmUgdXNlZCB0bwotICAgICBtYWtlIFRDUC9JUCBjb25uZWN0aW9ucyBv biBhIGNvbXB1dGVyIHRoYXQgZG9lcyBub3QgaGF2ZSBhIFRDUC9JUAotICAgICBzdGFjayBpbnN0 YWxsZWQpLiBJZiB5b3VyIHZlcnNpb24gb2YgQy1LZXJtaXQgbGFja3MgYSBmZWF0dXJlCi0gICAg IG1lbnRpb25lZCBoZXJlLCB1c2UgaXRzIFNIT1cgRkVBVFVSRVMgY29tbWFuZCB0byBzZWUgd2hh dCBtaWdodCBoYXZlCi0gICAgIGJlZW4gZXhjbHVkZWQuCi0KLSAgIEMtS2VybWl0IGhhcyB0aHJl ZSBraW5kcyBvZiBjb21tYW5kczogcmVndWxhciBzaW5nbGUtbGV0dGVyCi0gICBjb21tYW5kLWxp bmUgb3B0aW9ucywgZXh0ZW5kZWQtZm9ybWF0IGNvbW1hbmQtbGluZSBvcHRpb25zLCBhbmQKLSAg IGludGVyYWN0aXZlIGNvbW1hbmRzLgotCi0gICBbNTldS2VybWl0IEhvbWUgWzYwXUMtS2VybWl0 IEhvbWUgWzYxXUMtS2VybWl0IEZBUQotCi1PUFRJT05TCi0KLSAgIFs2Ml1Ub3AgWzYzXUNvbnRl bnRzIFs2NF1OZXh0IFs2NV1QcmV2aW91cyAgPC0gKE1vc3QgcGVvcGxlIHNob3VsZAotICAgY2xp Y2sgTmV4dCB0byBza2lwIGFyb3VuZCB0aGlzIHNlY3Rpb24uLi4pCi0KLSAgIExpa2UgbW9zdCBV bml4IGNvbW1hbmRzLCBDLUtlcm1pdCBjYW4gYmUgYmUgZ2l2ZW4gb3B0aW9ucyBvbiB0aGUKLSAg IGNvbW1hbmQgbGluZS4gQnV0IEMtS2VybWl0IGFsc28gY2FuIGJlIHVzZWQgaW50ZXJhY3RpdmVs eSBieSBnaXZpbmcgaXQKLSAgIFs2Nl1jb21tYW5kcyBjb21wb3NlZCBvZiB3b3Jkcywgd2hpY2gg YXJlIG1vcmUgaW50dWl0aXZlIHRoYW4gY3J5cHRpYwotICAgY29tbWFuZC1saW5lIG9wdGlvbnMs IGFuZCBtb3JlIGZsZXhpYmxlIHRvby4gSW4gb3RoZXIgd29yZHMsIHlvdSBkb24ndAotICAgaGF2 ZSB0byB1c2UgQy1LZXJtaXQncyBjb21tYW5kLWxpbmUgb3B0aW9ucywgYnV0IHRoZXkgYXJlIGF2 YWlsYWJsZSBpZgotICAgeW91IHdhbnQgdG8uIChCeSB0aGUgc2FtZSB0b2tlbiwgeW91IGRvbid0 IGhhdmUgdG8gdXNlIGl0cyBpbnRlcmFjdGl2ZQotICAgY29tbWFuZHMgZWl0aGVyIC0tIHlvdSBj YW4gdXNlIGVpdGhlciBvciBib3RoIGluIGFueSBjb21iaW5hdGlvbi4pCi0KLSAgIEMtS2VybWl0 IGlzIGdlbmVyYWxseSBpbnN0YWxsZWQgaW4gdGhlIFBBVEggYXMgImtlcm1pdCIsIGFuZCB0aGVy ZWZvcmUKLSAgIGlzIGludm9rZWQgYnkgdHlwaW5nIHRoZSB3b3JkICJrZXJtaXQiIChsb3dlcmNh c2UpIGF0IHRoZSBzaGVsbCBwcm9tcHQsCi0gICBhbmQgdGhlbiBwcmVzc2luZyB0aGUgUmV0dXJu IG9yIEVudGVyIGtleS4gSWYgeW91IHdpc2ggdG8gaW5jbHVkZQotICAgY29tbWFuZC1saW5lIG9w dGlvbnMsIHB1dCB0aGVtIGFmdGVyIHRoZSB3b3JkICJrZXJtaXQiIGJ1dCBiZWZvcmUKLSAgIHBy ZXNzaW5nIFJldHVybiBvciBFbnRlciwgc2VwYXJhdGVkIGJ5IHNwYWNlcywgZm9yIGV4YW1wbGU6 Ci0KLSAgJCBrZXJtaXQgLXMgY2tlcm1pdC50YXIuZ3oKLQotICAgKCckJyBpcyB0aGUgc2hlbGwg cHJvbXB0OyAia2VybWl0IC1zIGNrZXJtaXQudGFyLmd6IiBpcyB3aGF0IHlvdSB0eXBlLAotICAg Zm9sbG93ZWQgYnkgUmV0dXJuIG9yIEVudGVyLikKLQotICAgSGVyZSBpcyBhIGxpc3Qgb2YgQy1L ZXJtaXQncyBzaW5nbGUtbGV0dGVyIGNvbW1hbmQtbGluZSBvcHRpb25zLCB3aGljaAotICAgc3Rh cnQgd2l0aCBhIHNpbmdsZSBkYXNoICgtKSwgaW4gQVNDSUkgKCJhbHBoYWJldGljYWwiKSBvcmRl ci4KLSAgIEFscGhhYmV0aWMgY2FzZSBpcyBzaWduaWZpY2FudCAoLUEgaXMgbm90IHRoZSBzYW1l IGFzIC1hKS4gVGhlIEFjdGlvbj8KLSAgIGNvbHVtbiBjb250YWlucyBZIGZvciBhY3Rpb24gb3B0 aW9ucyBhbmQgTiBmb3Igbm9uLWFjdGlvbiBvcHRpb25zLgotCi0gICBPcHRpb24gQWN0aW9uPyBE ZXNjcmlwdGlvbgotICAgLTAgTiAoZGlnaXQgemVybykgMTAwJSB0cmFuc3BhcmVudCBDb25uZWN0 IHN0YXRlIGZvciAiaW4tdGhlLW1pZGRsZSIKLSAgIG9wZXJhdGlvbjogOCBiaXRzLCBubyBwYXJp dHksIG5vIGVzY2FwZSBjaGFyYWN0ZXIsIGV2ZXJ5dGhpbmcgcGFzc2VzCi0gICB0aHJvdWdoLgot ICAgLTggTiAoZGlnaXQgZWlnaHQpIENvbm5lY3Rpb24gaXMgOC1iaXQgY2xlYW4gKHRoaXMgaXMg dGhlIGRlZmF1bHQgaW4KLSAgIEMtS2VybWl0IDkuMCkuIEVxdWl2YWxlbnQgdG8gdGhlIEVJR0hU QklUIGNvbW1hbmQsIHdoaWNoIGluIHR1cm4gaXMgYQotICAgc2hvcnRjdXQgZm9yIFNFVCBURVJN SU5BTCBCWVRFU0laRSA4LCBTRVQgQ09NTUFORCBCWVRFU0laRSA4LCBTRVQKLSAgIFBBUklUWSBO T05FLgotICAgLTkgYXJnIE4gKGRpZ2l0IG5pbmUpIE1ha2UgYSBjb25uZWN0aW9uIHRvIGFuIEZU UCBzZXJ2ZXIuIEVxdWl2YWxlbnQgdG8KLSAgIHRoZSBGVFAgT1BFTiBjb21tYW5kLgotICAgQXJn dW1lbnQ6IElQLWFkZHJlc3Mtb3ItaG9zdG5hbWVbOm9wdGlvbmFsLVRDUC1wb3J0XS4KLSAgIE5P VEU6IEMtS2VybWl0IGFsc28gaGFzIGEgc2VwYXJhdGUgRlRQIGNvbW1hbmQtbGluZSBwZXJzb25h bGl0eSwgd2l0aAotICAgcmVndWxhciBGVFAtbGlrZSBjb21tYW5kLWxpbmUgc3ludGF4LiBbNjdd TW9yZSBhYm91dCB0aGlzIGJlbG93LgotICAgLUEgTiBLZXJtaXQgaXMgdG8gYmUgc3RhcnRlZCBh cyBhbiBJbnRlcm5ldCBzZXJ2aWNlIChJS1NEKSAob25seSBmcm9tCi0gICBpbmV0ZC5jb25mKS4K LSAgIC1CIE4gS2VybWl0IGlzIHJ1bm5pbmcgaW4gQmF0Y2ggb3IgQmFja2dyb3VuZCAobm8gY29u dHJvbGxpbmcKLSAgIHRlcm1pbmFsKS4gVG8gYmUgdXNlZCBpbiBjYXNlIEtlcm1pdCBkb2Vzbid0 IGF1dG9tYXRpY2FsbHkgc2Vuc2UgaXRzCi0gICBiYWNrZ3JvdW5kIHN0YXR1cy4gRXF1aXZhbGVu dCB0byB0aGUgU0VUIEJBQ0tHUk9VTkQgT04gY29tbWFuZC4KLSAgIC1DIGFyZyBOIEludGVyYWN0 aXZlLW1vZGUgQ29tbWFuZHMgdG8gYmUgZXhlY3V0ZWQuCi0gICBBcmd1bWVudDogQ29tbWFuZHMg c2VwYXJhdGVkIGJ5IGNvbW1hcywgbGlzdCBpbiBkb3VibGVxdW90ZXMuCi0gICAtRCBhcmcgTiBE ZWxheSBiZWZvcmUgc3RhcnRpbmcgdG8gc2VuZCBpbiBSZW1vdGUgbW9kZS4gRXF1aXZhbGVudCB0 bwotICAgdGhlIFNFVCBERUxBWSBjb21tYW5kLgotICAgQXJndW1lbnQ6IE51bWJlciBvZiBzZWNv bmRzLgotICAgLUUgTiBFeGl0IGF1dG9tYXRpY2FsbHkgd2hlbiBjb25uZWN0aW9uIGNsb3Nlcy4g RXF1aXZhbGVudCB0byBTRVQgRVhJVAotICAgT04tRElTQ09OTkVDVCBPTi4KLSAgIC1GIGFyZyBO IFVzZSBhbiBvcGVuIFRDUCBjb25uZWN0aW9uLgotICAgQXJndW1lbnQ6IE51bWVyaWMgZmlsZSBk ZXNjcmlwdG9yIG9mIG9wZW4gVENQIGNvbm5lY3Rpb24uCi0gICBBbHNvIHNlZTogLWosIC1KLgot ICAgLUcgYXJnIFkgR2V0IGZpbGUocykgZnJvbSBzZXJ2ZXIsIHNlbmQgY29udGVudHMgdG8gc3Rh bmRhcmQgb3V0cHV0LAotICAgd2hpY2ggbm9ybWFsbHkgd291bGQgYmUgcGlwZWQgdG8gYW5vdGhl ciBwcm9jZXNzLgotICAgQXJndW1lbnQ6IFJlbW90ZSBmaWxlIHNwZWNpZmljYXRpb24sIGluIHF1 b3RlcyBpZiBpdCBjb250YWlucwotICAgbWV0YWNoYXJhY3RlcnMuCi0gICBBbHNvIHNlZTogLWcs IC1rLgotICAgLUggTiBTdXBwcmVzcyBwcm9ncmFtIHN0YXJ0dXAgSGVyYWxkIGFuZCBncmVldGlu Zy4KLSAgIC1JIE4gVGVsbCBLZXJtaXQgaXQgaGFzIGEgcmVsaWFibGUgY29ubmVjdGlvbiwgdG8g Zm9yY2Ugc3RyZWFtaW5nIHRvIGJlCi0gICB1c2VkIHdoZXJlIGl0IG5vcm1hbGx5IHdvdWxkIG5v dCBiZS4gRXF1aXZhbGVudCB0byB0aGUgU0VUIFJFTElBQkxFIE9OCi0gICBjb21tYW5kLgotICAg LUogYXJnIE4gIkJlIGxpa2UgVGVsbmV0LiIgTGlrZSAtaiBidXQgaW1wbGllcyAtRS4KLSAgIEFy Z3VtZW50OiBJUCBob3N0bmFtZS9hZGRyZXNzIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgc2Vydmlj ZS4KLSAgIE5PVEU6IEMtS2VybWl0IGFsc28gaGFzIGEgc2VwYXJhdGUgVGVsbmV0IGNvbW1hbmQt bGluZSBwZXJzb25hbGl0eSwKLSAgIHdpdGggcmVndWxhciBUZWxuZXQtbGlrZSBjb21tYW5kLWxp bmUgc3ludGF4LiBbNjhdTW9yZSBhYm91dCB0aGlzCi0gICBiZWxvdy4KLSAgIC1MIE4gUmVjdXJz aXZlIGRpcmVjdG9yeSBkZXNjZW50IGZvciBmaWxlcyBpbiAtcyBvcHRpb24uCi0gICAtTSBhcmcg TiBNeSB1c2VyIG5hbWUgKGZvciB1c2Ugd2l0aCBUZWxuZXQsIFJsb2dpbiwgRlRQLCBldGMpLgot ICAgRXF1aXZhbGVudCB0byB0aGUgU0VUIExPR0lOIFVTRVIgY29tbWFuZC4KLSAgIEFyZ3VtZW50 OiBVc2VybmFtZSBzdHJpbmcuCi0gICAtTyBZIChVcHBlcmNhc2UgbGV0dGVyIE8pIEJlIGEgc2Vy dmVyIGZvciBPbmUgY29tbWFuZCBvbmx5LiBBbHNvIHNlZToKLSAgIC14LgotICAgLVAgTiBEb24n dCBjb252ZXJ0IGZpbGUgKFBhdGgpIG5hbWVzIG9mIHRyYW5zZmVycmVkIGZpbGVzLiBFcXVpdmFs ZW50Ci0gICB0byBTRVQgRklMRSBOQU1FUyBMSVRFUkFMLgotICAgLVEgTiBRdWljayBLZXJtaXQg cHJvdG9jb2wgc2V0dGluZ3MuIEVxdWl2YWxlbnQgdG8gdGhlIEZBU1QgY29tbWFuZC4KLSAgIFRo aXMgaXMgdGhlIGRlZmF1bHQgaW4gQy1LZXJtaXQgNy4wIGFuZCBsYXRlci4KLSAgIC1SIE4gUmVt b3RlLW9ubHkgKHRoaXMganVzdCBtYWtlcyBJRiBSRU1PVEUgdHJ1ZSkuCi0gICAtUyBOIFN0YXkg KGVudGVyIGNvbW1hbmQgcGFyc2VyIGFmdGVyIGFjdGlvbiBvcHRpb25zKS4KLSAgIC1UIE4gRm9y Y2UgVGV4dCBtb2RlIGZvciBmaWxlIHRyYW5zZmVyOyBpbXBsaWVzIC1WLiBFcXVpdmFsZW50IHRv IFNFVAotICAgVFJBTlNGRVIgTU9ERSBNQU5VQUwsIFNFVCBGSUxFIFRZUEUgVEVYVC4KLSAgIC1W IE4gRGlzYWJsZSBhdXRvbWF0aWMgcGVyLWZpbGUgdGV4dC9iaW5hcnkgc3dpdGNoaW5nLiBFcXVp dmFsZW50IHRvCi0gICBTRVQgVFJBTlNGRVIgTU9ERSBNQU5VQUwuCi0gICAtWSBOIFNraXAgKGRv bid0IGV4ZWN1dGUpIHRoZSBpbml0aWFsaXphdGlvbiBmaWxlLgotICAgLWEgYXJnIE4gQXMtbmFt ZSBmb3IgZmlsZShzKSBpbiAtcywgLXIsIG9yIC1nLgotICAgQXJndW1lbnQ6IEFzLW5hbWUgc3Ry aW5nIChhbHRlcm5hdGl2ZSBmaWxlbmFtZSkuIFdoZW4gcmVjZWl2aW5nIGZpbGVzLAotICAgdGhp cyBjYW4gYmUgYSBkaXJlY3RvcnkgbmFtZS4KLSAgIC1iIGFyZyBOIFNwZWVkIGZvciBzZXJpYWwg ZGV2aWNlLiBFcXVpdmFsZW50IHRvIFNFVCBTUEVFRC4KLSAgIEFyZ3VtZW50OiBOdW1lcmljIEJp dHMgcGVyIHNlY29uZCBmb3Igc2VyaWFsIGNvbm5lY3Rpb25zLgotICAgLWMgWSBFbnRlciBDb25u ZWN0IHN0YXRlIGJlZm9yZSB0cmFuc2ZlcnJpbmcgZmlsZXMuCi0gICAtZCBOIENyZWF0ZSBhIGRl YnVnLmxvZyBmaWxlIHdpdGggZGV0YWlsZWQgZGVidWdnaW5nIGluZm9ybWF0aW9uIChhCi0gICBz ZWNvbmQgLWQgYWRkcyB0aW1lc3RhbXBzKS4gRXF1aXZhbGVudCB0byBMT0cgREVCVUcgYnV0IHRh a2VzIGVmZmVjdAotICAgc29vbmVyLgotICAgLWUgYXJnIE4gTWF4aW11bSBsZW5ndGggZm9yIGlu Y29taW5nIEtlcm1pdCBmaWxlLXRyYW5zZmVyIHBhY2tldHMuCi0gICBFcXVpdmFsZW50IHRvIFNF VCBSRUNFSVZFIFBBQ0tFVC1MRU5HVEguCi0gICBBcmd1bWVudDogTGVuZ3RoIGluIGJ5dGVzLgot ICAgLWYgWSBTZW5kIGEgRklOSVNIIGNvbW1hbmQgdG8gYSBLZXJtaXQgc2VydmVyLgotICAgLWcg YXJnIE4gR2V0IGZpbGUocykgZnJvbSBhIEtlcm1pdCBzZXJ2ZXIuCi0gICBBcmd1bWVudDogRmls ZSBzcGVjaWZpY2F0aW9uIG9uIG90aGVyIGNvbXB1dGVyLCBpbiBxdW90ZXMgaWYgaXQKLSAgIGNv bnRhaW5zIG1ldGFjaGFyYWN0ZXJzLiBFcXVpdmFsZW50IHRvIEdFVC4KLSAgIEFsc28gc2VlOiAt YSwgLUcsIC1yLgotICAgLWggWSBQcmludCBIZWxwIHRleHQgZm9yIHNpbmdsZS1sZXR0ZXIgY29t bWFuZC1saW5lIG9wdGlvbnMgKHBpcGUgdGhydQotICAgJ21vcmUnIHRvIHByZXZlbnQgc2Nyb2xs aW5nKS4KLSAgIC1pIE4gRm9yY2UgYmluYXJ5IChJbWFnZSkgbW9kZSBmb3IgZmlsZSB0cmFuc2Zl cjsgaW1wbGllcyAtVi4KLSAgIEVxdWl2YWxlbnQgdG8gU0VUIFRSQU5TRkVSIE1PREUgTUFOVUFM LCBTRVQgRklMRSBUWVBFIEJJTkFSWS4KLSAgIC1qIGFyZyBOIE1ha2UgYSBUQ1AvSVAgY29ubmVj dGlvbi4KLSAgIEFyZ3VtZW50OiBJUCBob3N0IG5hbWUvYWRkcmVzcyBhbmQgb3B0aW9uYWwgc2Vy dmljZSBuYW1lIG9yIG51bWJlci4KLSAgIEVxdWl2YWxlbnQgdG8gdGhlIFRFTE5FVCBjb21tYW5k LgotICAgQWxzbyBzZWU6IC1KLCAtRi4KLSAgIC1rIFkgUmVjZWl2ZSBmaWxlKHMpIHRvIHN0YW5k YXJkIG91dHB1dCwgd2hpY2ggbm9ybWFsbHkgd291bGQgYmUgcGlwZWQKLSAgIHRvIGFub3RoZXIg cHJvY2Vzcy4KLSAgIEFsc28gc2VlOiAtciwgLUcuCi0gICAtbCBhcmcgTiAoTG93ZXJjYXNlIGxl dHRlciBMKSBNYWtlIGEgY29ubmVjdGlvbiBvbiB0aGUgZ2l2ZW4gc2VyaWFsCi0gICBjb21tdW5p Y2F0aW9ucyBkZXZpY2UuIEVxdWl2YWxlbnQgdG8gdGhlIFNFVCBMSU5FIChTRVQgUE9SVCkgY29t bWFuZC4KLSAgIEFyZ3VtZW50OiBTZXJpYWwgZGV2aWNlIG5hbWUsIGUuZy4gL2Rldi90dHlTMC4K LSAgIC1tIGFyZyBOIE1vZGVtIHR5cGUgZm9yIHVzZSB3aXRoIHRoZSAtbCBkZXZpY2UuIEVxdWl2 YWxlbnQgdG8gdGhlIFNFVAotICAgTU9ERU0gVFlQRSBjb21tYW5kLgotICAgQXJndW1lbnQ6IE1v ZGVtIG5hbWUgYXMgaW4gU0VUIE1PREVNIFRZUEUgY29tbWFuZCwgZS5nLiAidXNyb2JvdGljcyIu Ci0gICAtbiBZIEVudGVyIENvbm5lY3Qgc3RhdGUgYWZ0ZXIgdHJhbnNmZXJyaW5nIGZpbGVzICho aXN0b3JpY2FsKS4KLSAgIC1wIGFyZyBOIFBhcml0eS4gRXF1aXZhbGVudCB0byB0aGUgU0VUIFBB UklUWSBjb21tYW5kLgotICAgQXJndW1lbnQ6IE9uZSBvZiB0aGUgZm9sbG93aW5nOiBlKHZlbiks IG8oZGQpLCBtKGFyayksIG4ob25lKSwgcyhwYWNlKS4KLSAgIC1xIE4gUXVpZXQgKHN1cHByZXNz IG1vc3QgbWVzc2FnZXMpLiBFcXVpdmFsZW50IHRvIFNFVCBRVUlFVCBPTi4KLSAgIC1yIFkgUmVj ZWl2ZSBmaWxlKHMpLiBFcXVpdmFsZW50IHRvIHRoZSBSRUNFSVZFIGNvbW1hbmQuCi0gICBBcmd1 bWVudDogKG5vbmUsIGJ1dCBzZWUgLWEpCi0gICAtcyBhcmcgTiBTZW5kIGZpbGUocykuCi0gICBB cmd1bWVudDogT25lIG9yIG1vcmUgbG9jYWwgZmlsZSBzcGVjaWZpY2F0aW9ucy4gRXF1aXZhbGVu dCB0byB0aGUgU0VORAotICAgY29tbWFuZC4KLSAgIEFsc28gc2VlOiAtYS4KLSAgIC10IE4gKEhp c3RvcmljYWwpIFhvbiAoQ3RybC1RKSBUdXJuYXJvdW5kIGNoYXJhY3RlciBmb3IgaGFsZi1kdXBs ZXgKLSAgIGNvbm5lY3Rpb25zICh1c2VkIG9uIHNlcmlhbCBsaW5lbW9kZSBjb25uZWN0aW9ucyB0 byBvbGQgbWFpbmZyYW1lcykuCi0gICBFcXVpdmFsZW50IHRvIFNFVCBEVVBMRVggSEFMRiwgU0VU IEhBTkRTSEFLRSBYT04uCi0gICAtdiBhcmcgTiBXaW5kb3cgc2l6ZSBmb3IgS2VybWl0IHByb3Rv Y29sIChpZ25vcmVkIHdoZW4gc3RyZWFtaW5nKS4KLSAgIEVxdWl2YWxlbnQgdG8gU0VUIFdJTkRP Vy1TSVpFLgotICAgQXJndW1lbnQ6IE51bWJlciwgMSB0byAzMi4KLSAgIC13IE4gSW5jb21pbmcg ZmlsZXMgV3JpdGUgb3ZlciBleGlzdGluZyBmaWxlcy4gRXF1aXZhbGVudCB0byBTRVQgRklMRQot ICAgQ09MTElTSU9OIE9WRVJXUklURS4KLSAgIC14IFkgRW50ZXIgc2VydmVyIG1vZGUuIEVxdWl2 YWxlbnQgdG8gdGhlIFNFUlZFUiBjb21tYW5kLiBBbHNvIHNlZTogLU8uCi0gICAteSBhcmcgTiBB bHRlcm5hdGl2ZSBpbml0aWFsaXphdGlvbiBmaWxlLgotICAgQXJndW1lbnQ6IEZpbGVuYW1lLgot ICAgLXogTiBGb3JjZSBmb3JlZ3JvdW5kIGJlaGF2aW9yLiBUbyBiZSB1c2VkIGluIGNhc2UgS2Vy bWl0IGRvZXNuJ3QKLSAgIGF1dG9tYXRpY2FsbHkgc2Vuc2UgaXRzIGZvcmVncm91bmQgc3RhdHVz LiBFcXVpdmFsZW50IHRvIHRoZSBTRVQKLSAgIEJBQ0tHUk9VTkQgT0ZGIGNvbW1hbmQuCi0KLSAg IEV4dGVuZGVkIGNvbW1hbmQtbGluZSBvcHRpb25zIChuZWNlc3NhcnkgYmVjYXVzZSBzaW5nbGUt bGV0dGVyIG9uZXMgYXJlCi0gICBhYm91dCB1c2VkIHVwKSBzdGFydCB3aXRoIHR3byBkYXNoZXMg KC0tKSwgd2l0aCB3b3JkcyByYXRoZXIgdGhhbgotICAgc2luZ2xlIGxldHRlcnMgYXMgb3B0aW9u IG5hbWVzLiBJZiBhbiBleHRlbmRlZCBvcHRpb24gdGFrZXMgYW4KLSAgIGFyZ3VtZW50LCBpdCBp cyBzZXBhcmF0ZWQgZnJvbSB0aGUgb3B0aW9uIHdvcmQgYnkgYSBjb2xvbiAoOikuIEV4dGVuZGVk Ci0gICBvcHRpb25zIGluY2x1ZGU6Ci0KLSAgIE9wdGlvbiBEZXNjcmlwdGlvbgotICAgLS1iYW5u ZXJmaWxlOmZpbGVuYW1lIEZpbGUgdG8gZGlzcGxheSB1cG9uIHN0YXJ0dXAgb3IgSUtTRCBsb2dp bi4KLSAgIC0tY2RmaWxlOmZpbGVuYW1lIEZpbGUgdG8gYmUgc2VudCBmb3IgZGlzcGxheSB0byB0 aGUgY2xpZW50IHdoZW4gc2VydmVyCi0gICBjaGFuZ2VzIGRpcmVjdG9yeSAoZmlsZW5hbWUgaXMg cmVsYXRpdmUgdG8gdGhlIGNoYW5nZWQtdG8gZGlyZWN0b3J5KS4KLSAgIC0tY2RtZXNzYWdlOntv bixvZmZ9IEVuYWJsZS9kaXNhYmxlIHRoZSBzZXJ2ZXIgQ0QgbWVzc2FnZSBmZWF0dXJlLgotICAg LS1oZWxwIFByaW50cyB1c2FnZSBtZXNzYWdlIGZvciBleHRlbmRlZCBvcHRpb25zLgotICAgLS1o ZWxwZmlsZTpmaWxlbmFtZSBEZXNpZ25hdGVzIGEgZmlsZSBjb250YWluaW5nIGN1c3RvbSB0ZXh0 IHRvIHJlcGxhY2UKLSAgIHRoZSB0b3AtbGV2ZWwgSEVMUCBjb21tYW5kLgotICAgLS1ub2ludGVy cnVwdHMgRGlzYWJsZXMga2V5Ym9hcmQgaW50ZXJydXB0cy4KLSAgIC0tbm9wZXJtcyBEaXNhYmxl cyB0aGUgS2VybWl0IHByb3RvY29sIGZpbGUgUGVybWlzc2lvbnMgYXR0cmlidXRlLCB0bwotICAg cHJldmVudCB0cmFuc21pc3Npb24gb2YgZmlsZSBwZXJtaXNzaW9ucyAocHJvdGVjdGlvbikgZnJv bSBzZW5kZXIgdG8KLSAgIHJlY2VpdmVyLgotCi0gICBQbHVzIHNldmVyYWwgb3RoZXIgWzY5XUlL U0QtT25seSBvcHRpb25zLgotCi0gICBTZWUgdGhlIFs3MF1maWxlLXRyYW5zZmVyIHNlY3Rpb24g Zm9yIGV4YW1wbGVzIG9mIGNvbW1hbmQtbGluZQotICAgaW52b2NhdGlvbi4KLQotQ09NTUFORCBM QU5HVUFHRQotCi0gICBbNzFdVG9wIFs3Ml1Db250ZW50cyBbNzNdTmV4dCBbNzRdUHJldmlvdXMK LQotICAgICAqIFs3NV1Db21tYW5kIEZpbGVzLCBNYWNyb3MsIGFuZCBTY3JpcHRzCi0gICAgICog Wzc2XUNvbW1hbmQgTGlzdAotCi0gICBDLUtlcm1pdCdzIGludGVyYWN0aXZlIGNvbW1hbmQgbGFu Z3VhZ2UgaXMgdGhlIHN1YmplY3Qgb2YgYQotICAgWzc3XTYyMi1wYWdlIGJvb2sgYW5kIGFub3Ro ZXIgc2V2ZXJhbCBodW5kcmVkIHBhZ2VzIG9mIHVwZGF0ZXMsIGZhciB0b28KLSAgIG11Y2ggZm9y IGEgbWFudWFsIHBhZ2UuIEJ1dCBpdCdzIG5vdCBoYXJkIHRvIGdldCBzdGFydGVkLiBBdCB0aGUg c2hlbGwKLSAgIHByb21wdCwganVzdCB0eXBlICJrZXJtaXQiIHRvIGdldCBDLUtlcm1pdCdzIGlu dGVyYWN0aXZlIGNvbW1hbmQKLSAgIHByb21wdDoKLQotICAkIGtlcm1pdAotICAoL2N1cnJlbnQv ZGlyZWN0b3J5KSBDLUtlcm1pdD4KLQotICAgQmVnaW4gYnkgdHlwaW5nICJoZWxwIiAoYW5kIHRo ZW4gcHJlc3MgdGhlIFJldHVybiBvciBFbnRlciBrZXkpIGZvciBhCi0gICB0b3AtbGV2ZWwgb3Zl cnZpZXcsIHJlYWQgaXQsIGFuZCBnbyBmcm9tIHRoZXJlLiBZb3VyIHNlY29uZCBjb21tYW5kCi0g ICBzaG91bGQgcHJvYmFibHkgYmUgImludHJvIiAoaW50cm9kdWN0aW9uKS4gTm90ZSB0aGUgcHJv bXB0IHNob3dzIHlvdXIKLSAgIGN1cnJlbnQgZGlyZWN0b3J5ICh1bmxlc3MgeW91IHRlbGwgS2Vy bWl0IHRvIHByb21wdCB5b3Ugd2l0aCBzb21ldGhpbmcKLSAgIGVsc2UpLgotCi0gICBJbnRlcmFj dGl2ZSBjb21tYW5kcyBhcmUgY29tcG9zZWQgbWFpbmx5IG9mIHJlZ3VsYXIgRW5nbGlzaCB3b3Jk cywKLSAgIHVzdWFsbHkgaW4gdGhlIGZvcm0gb2YgaW1wZXJhdGl2ZSBzZW50ZW5jZXMsIHN1Y2gg YXM6Ci0KLSAgc2VuZCBvb2ZhLnR4dAotCi0gICB3aGljaCB0ZWxscyBLZXJtaXQgdG8gc2VuZCAo dHJhbnNmZXIpIHRoZSBmaWxlIHdob3NlIG5hbWUgaXMgb29mYS50eHQsCi0gICBvcjoKLQotICBz ZXQgdHJhbnNmZXIgbW9kZSBhdXRvbWF0aWMKLQotICAgd2hpY2ggc2V0cyBLZXJtaXQncyAidHJh bnNmZXIgbW9kZSIgdG8gImF1dG9tYXRpYyIgKHdoYXRldmVyIHRoYXQKLSAgIG1lYW5zKS4KLQot ICAgV2hpbGUgdHlwaW5nIGNvbW1hbmRzLCB5b3UgY2FuIGFiYnJldmlhdGUsIGFzayBmb3IgaGVs cCAoYnkgcHJlc3NpbmcKLSAgIHRoZSAiPyIga2V5IGFueXdoZXJlIGluIGEgY29tbWFuZCksIGNv bXBsZXRlIGtleXdvcmRzIG9yIGZpbGVuYW1lcwotICAgKHdpdGggdGhlIFRhYiBvciBFc2Mga2V5 KSwgYW5kIGVkaXQgeW91ciB0eXBpbmcgd2l0aCBCYWNrc3BhY2Ugb3IKLSAgIERlbGV0ZSwgQ3Ry bC1XLCBDdHJsLVUsIGV0Yy4gWW91IGNhbiBhbHNvIHJlY2FsbCBwcmV2aW91cyBjb21tYW5kcywK LSAgIHNhdmUgeW91ciBjb21tYW5kIGhpc3RvcnksIGFuZCB3aG8ga25vd3Mgd2hhdCBlbHNlLiBH aXZlIHRoZSBJTlRSTwotICAgY29tbWFuZCBmb3IgZGV0YWlscy4KLQotICAgQy1LZXJtaXQgaGFz IGh1bmRyZWRzIG9mIGNvbW1hbmRzLCBhbmQgdGhleSBjYW4gYmUgaXNzdWVkIGluIGluZmluaXRl Ci0gICB2YXJpZXR5IGFuZCBjb21iaW5hdGlvbnMsIGluY2x1ZGluZyBjb21tYW5kcyBmb3I6Ci0K LSAgICAgKiBNYWtpbmcgY29ubmVjdGlvbnMgKFNFVCBMSU5FLCBESUFMLCBURUxORVQsIFNTSCwg RlRQLCBDT05ORUNULCAuLi4pCi0gICAgICogQnJlYWtpbmcgY29ubmVjdGlvbnMgKEhBTkdVUCwg Q0xPU0UpCi0gICAgICogVHJhbnNmZXJyaW5nIGZpbGVzIChTRU5ELCBHRVQsIFJFQ0VJVkUsIE1P VkUsIFJFU0VORCwgLi4uKQotICAgICAqIEVzdGFibGlzaGluZyBwcmVmZXJlbmNlcyAoU0VUKQot ICAgICAqIERpc3BsYXlpbmcgcHJlZmVyZW5jZXMgKFNIT1cpCi0gICAgICogTWFuYWdpbmcgbG9j YWwgZmlsZXMgKENELCBERUxFVEUsIE1LRElSLCBESVJFQ1RPUlksIFJFTkFNRSwgVFlQRSwKLSAg ICAgICAuLi4pCi0gICAgICogTWFuYWdpbmcgcmVtb3RlIGZpbGVzIChSQ0QsIFJERUwsIFJNS0RJ UiwgUkRJUiwgLi4uKQotICAgICAqIFVzaW5nIGxvY2FsIGZpbGVzIChGT1BFTiwgRkNMT1NFLCBG UkVBRCwgRldSSVRFKQotICAgICAqIFByb2dyYW1taW5nIChUQUtFLCBERUZJTkUsIElGLCBGT1Is IFdISUxFLCBTV0lUQ0gsIERFQ0xBUkUsIC4uLikKLSAgICAgKiBJbnRlcmFjdGluZyB3aXRoIHRo ZSB1c2VyIChFQ0hPLCBBU0ssIC4uLikKLSAgICAgKiBJbnRlcmFjdGluZyB3aXRoIGEgcmVtb3Rl IGNvbXB1dGVyIChJTlBVVCwgT1VUUFVULCAuLi4pCi0gICAgICogSW50ZXJhY3Rpbmcgd2l0aCBs b2NhbCBwcm9ncmFtcyAoUlVOLCBFWEVDLCBQVFksIC4uLikKLSAgICAgKiBMb2dnaW5nIHRoaW5n cyAoTE9HIFNFU1NJT04sIExPRyBQQUNLRVRTLCBMT0cgREVCVUcsIC4uLikKLQotICAgQW5kIG9m IGNvdXJzZSBRVUlUIG9yIEVYSVQgdG8gZ2V0IG91dCBhbmQgSEVMUCB0byBnZXQgaGVscCwgYW5k IGZvcgotICAgcHJvZ3JhbW1lcnM6IGxvb3BzLCBkZWNpc2lvbiBtYWtpbmcsIHZhcmlhYmxlcywg YXJyYXlzLCBhc3NvY2lhdGl2ZQotICAgYXJyYXlzLCBpbnRlZ2VyIGFuZCBmbG9hdGluZyBwb2lu dCBhcml0aG1ldGljLCBtYWNyb3MsIGJ1aWx0LWluIGFuZAotICAgdXNlci1kZWZpbmVkIGZ1bmN0 aW9ucywgc3RyaW5nIG1hbmlwdWxhdGlvbiwgcGF0dGVybiBtYXRjaGluZywgYmxvY2sKLSAgIHN0 cnVjdHVyZSwgc2NvcGluZywgcmVjdXJzaW9uLCBhbmQgYWxsIHRoZSByZXN0LiBUbyBnZXQgYSBs aXN0IG9mIGFsbAotICAgQy1LZXJtaXQncyBjb21tYW5kcywgdHlwZSBhIHF1ZXN0aW9uIG1hcmsg KD8pIGF0IHRoZSBwcm9tcHQuIFRvIGdldCBhCi0gICBkZXNjcmlwdGlvbiBvZiBhbnkgY29tbWFu ZCwgdHlwZSBIRUxQIGZvbGxvd2VkIGJ5IHRoZSBuYW1lIG9mIHRoZQotICAgY29tbWFuZCwgZm9y IGV4YW1wbGU6Ci0KLSAgaGVscCBzZW5kCi0KLSAgIFRoZSBjb21tYW5kIGludGVycnVwdGlvbiBj aGFyYWN0ZXIgaXMgQ3RybC1DIChob2xkIGRvd24gdGhlIEN0cmwga2V5Ci0gICBhbmQgcHJlc3Mg dGhlIEMga2V5KS4KLQotICAgVGhlIGNvbW1hbmQgbGFuZ3VhZ2UgImVzY2FwZSBjaGFyYWN0ZXIi LCB1c2VkIHRvIGludHJvZHVjZSB2YXJpYWJsZQotICAgbmFtZXMsIGZ1bmN0aW9uIGludm9jYXRp b25zLCBhbmQgc28gb24sIGlzIGJhY2tzbGFzaCAoXCkuIElmIHlvdSBuZWVkCi0gICB0byBpbmNs dWRlIGEgbGl0ZXJhbCBiYWNrc2xhc2ggaW4gYSBjb21tYW5kLCB0eXBlIHR3byBvZiB0aGVtLCBl LmcuOgotCi0gIGdldCBjOlxcazk1XFxrOTVjdXN0b20uaW5pCi0KLUNvbW1hbmQgRmlsZXMsIE1h Y3JvcywgYW5kIFNjcmlwdHMKLQotICAgQSBmaWxlIGNvbnRhaW5pbmcgS2VybWl0IGNvbW1hbmRz IGlzIGNhbGxlZCBhIEtlcm1pdCBjb21tYW5kIGZpbGUgb3IKLSAgIEtlcm1pdCBzY3JpcHQuIEl0 IGNhbiBiZSBleGVjdXRlZCB3aXRoIEtlcm1pdCdzIFRBS0UgY29tbWFuZDoKLQotICAoL2N1cnJl bnQvZGlyKSBDLUtlcm1pdD4gdGFrZSBjb21tYW5kZmlsZQotCi0gICAod2hlcmUgImNvbW1hbmRm aWxlIiBpcyB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZCBmaWxlKS4gUGxlYXNlIGRvbid0Ci0gICBw aXBlIGEgY29tbWFuZCBmaWxlIGludG8gS2VybWl0J3Mgc3RhbmRhcmQgaW5wdXQgKHdoaWNoIG1p Z2h0IG9yIG1pZ2h0Ci0gICBub3Qgd29yayk7IGlmIHlvdSBoYXZlIEtlcm1pdCBjb21tYW5kcyBp biBhIGZpbGUsIHRlbGwgS2VybWl0IHRvIFRBS0UKLSAgIHRoZSBmaWxlLgotCi0gICBJbiBVbml4 IG9ubHksIGEgS2VybWl0IGNvbW1hbmQgZmlsZSBjYW4gYWxzbyBiZSBleGVjdXRlZCBkaXJlY3Rs eSBieQotICAgaW5jbHVkaW5nIGEgImtlcmJhbmciIGxpbmUgYXMgdGhlIGZpcnN0IGxpbmUgb2Yg dGhlIGZpbGU6Ci0KLSAgIyEvdXNyL2xvY2FsL2Jpbi9rZXJtaXQgKwotCi0gICBUaGF0IGlzLCBh IHRvcCBsaW5lIHRoYXQgc3RhcnRzIHdpdGggIiMhIiwgZm9sbG93ZWQgaW1tZWRpYXRlbHkgYnkg dGhlCi0gICBmdWxsIHBhdGggb2YgdGhlIEtlcm1pdCBleGVjdXRhYmxlLCBhbmQgdGhlbiwgaWYg dGhlIEtlcm1pdCBzY3JpcHQgaXMKLSAgIHRvIGJlIGdpdmVuIGFyZ3VtZW50cyBvbiB0aGUgY29t bWFuZCBsaW5lLCBhIHNwYWNlIGFuZCBhIHBsdXMgc2lnbi4gVGhlCi0gICBzY3JpcHQgZmlsZSBt dXN0IGFsc28gaGF2ZSBleGVjdXRlIHBlcm1pc3Npb246Ci0KLSAgY2htb2QgK3ggY29tbWFuZGZp bGUKLQotICAgRXhjZXB0IGZvciB0aGUgIiArIiBwYXJ0LCB0aGlzIGlzIGV4YWN0bHkgdGhlIHNh bWUgYXMgeW91IHdvdWxkIGRvIGZvcgotICAgYSBzaGVsbCBzY3JpcHQsIGEgUGVybCBzY3JpcHQs IGV0Yy4gSGVyZSdzIGEgc2ltcGxlIGJ1dCB1c2VsZXNzIGV4YW1wbGUKLSAgIHNjcmlwdCB0aGF0 IHJlZ3VyZ2l0YXRlcyBpdHMgYXJndW1lbnRzICh1cCB0byB0aHJlZSBvZiB0aGVtKToKLQotICAj IS91c3IvbG9jYWwvYmluL2tlcm1pdCArCi0gIGlmIGRlZmluZWQgXCUxIGVjaG8gIkFyZ3VtZW50 IDE6IFwlMSIKLSAgaWYgZGVmaW5lZCBcJTIgZWNobyAiQXJndW1lbnQgMjogXCUyIgotICBpZiBk ZWZpbmVkIFwlMyBlY2hvICJBcmd1bWVudCAzOiBcJTMiCi0gIGlmIGRlZmluZWQgXCU0IGVjaG8g ImV0Yy4uLiIKLSAgZXhpdAotCi0gICBJZiB0aGlzIGZpbGUgaXMgc3RvcmVkIGluIHlvdXIgY3Vy cmVudCBkaXJlY3RvcnkgYXMgImNvbW1hbmRmaWxlIiwKLSAgIHRoZW46Ci0KLSAgLi9jb21tYW5k ZmlsZSBvbmUgdHdvIHRocmVlIGZvdXIgZml2ZQotCi0gICBwcmludHM6Ci0KLSAgQXJndW1lbnQg MTogb25lCi0gIEFyZ3VtZW50IDI6IHR3bwotICBBcmd1bWVudCAzOiB0aHJlZQotICBldGMuLi4K LQotICAgVGhpcyBpbGx1c3RyYXRlcyB0aGUgYmFzaWMgc3RydWN0dXJlIG9mIGEgc3RhbmRhbG9u ZSBLZXJtaXQgc2NyaXB0OiB0aGUKLSAgICJrZXJiYW5nIGxpbmUiLCB0aGVuIHNvbWUgY29tbWFu ZHMuIEl0IHNob3VsZCBlbmQgd2l0aCAiZXhpdCIgdW5sZXNzCi0gICB5b3Ugd2FudCB0aGUgS2Vy bWl0IHByb21wdCB0byBhcHBlYXIgd2hlbiBpdCBpcyBmaW5pc2hlZC4gXCUxIGlzIHRoZQotICAg Zmlyc3QgYXJndW1lbnQsIFwlMiB0aGUgc2Vjb25kLCBhbmQgc28gb24uCi0KLSAgIFlvdSBjYW4g YWxzbyBjcmVhdGUgeW91ciBvd24gY29tbWFuZHMgYnkgZGVmaW5pbmcgbmFtZWQgbWFjcm9zIGNv bXBvc2VkCi0gICBvZiBvdGhlciBLZXJtaXQgY29tbWFuZHMgKG9yIG1hY3JvcykuIEhlcmUncyBh IHNpbXBsZSBleGFtcGxlOgotCi0gIGRlZmluZSBteWRpYWwgewotICAgICAgc2V0IG1vZGVtIHR5 cGUgdXNyb2JvdGljcwotICAgICAgc2V0IHBvcnQgL2Rldi90dHlTMAotICAgICAgaWYgZmFpbCBl bmQgMQotICAgICAgc2V0IHNwZWVkIDU3NjAwCi0gICAgICBkaWFsIFwlMQotICAgICAgaWYgc3Vj Y2VzcyBjb25uZWN0Ci0gIH0KLQotICAgVGhpcyBzaG93cyBob3cgeW91IGNhbiBjb21iaW5lIG1h bnkgY29tbWFuZHMgaW50byBvbmUgY29tbWFuZCwgIm15ZGlhbCIKLSAgIGluIHRoaXMgY2FzZSAo eW91IGNhbiB1c2UgYW55IG5hbWUgeW91IGxpa2UsIHByb3ZpZGVkIGl0IGRvZXMgbm90IGNsYXNo Ci0gICB3aXRoIHRoZSBuYW1lIG9mIGEgYnVpbHQtaW4gY29tbWFuZCkuIFdoZW4gdGhpcyBtYWNy byBkZWZpbml0aW9uIGlzIGluCi0gICBlZmZlY3QsIHlvdSBjYW4gdHlwZSBjb21tYW5kcyBsaWtl OgotCi0gIG15ZGlhbCA3NjU0MzIxCi0KLSAgIGFuZCBpdCBleGVjdXRlcyBhbGwgdGhlIGNvbW1h bmRzIGluIG1hY3JvIGRlZmluaXRpb24sIHN1YnN0aXR1dGluZyB0aGUKLSAgIGZpcnN0IG9wZXJh bmQgKCI3NjU0MzIxIikgZm9yIHRoZSBmb3JtYWwgcGFyYW1ldGVyICgiXCUxIikgaW4gdGhlCi0g ICBkZWZpbml0aW9uLiBUaGlzIHNhdmVzIHlvdSBmcm9tIGhhdmluZyB0byB0eXBlIGxvdHMgb2Yg Y29tbWFuZHMgZXZlcnkKLSAgIHRpbWUgeW91IHdhbnQgdG8gbWFrZSBhIG1vZGVtIGNhbGwuCi0K LSAgIE9uZSB3YXkgdG8gaGF2ZSB0aGUgbWFjcm8gZGVmaW5pdGlvbiBpbiBlZmZlY3QgaXMgdG8g dHlwZSB0aGUKLSAgIGRlZmluaXRpb24gYXQgdGhlIEtlcm1pdCBwcm9tcHQuIEFub3RoZXIgd2F5 IGlzIHRvIHN0b3JlIHRoZSBkZWZpbml0aW9uCi0gICBpbiBhIGZpbGUgYW5kIFRBS0UgdGhlIGZp bGUuIElmIHlvdSB3YW50IHRoZSBkZWZpbml0aW9uIHRvIGJlIGluIGVmZmVjdAotICAgYXV0b21h dGljYWxseSBldmVyeSB0aW1lIHlvdSBzdGFydCBLZXJtaXQsIHB1dCB0aGUgZGVmaW5pdGlvbiBp biB5b3VyCi0gICBpbml0aWFsaXphdGlvbiBvciBjdXN0b21pemF0aW9uIGZpbGUgKGV4cGxhaW5l ZCBbNzhdYmVsb3cpLgotCi0gICBIZXJlJ3MgYSBzb21ld2hhdCBtb3JlIGFtYml0aW91cyBleGFt cGxlOgotCi0gIGRlZmluZSBteWRlbGV0ZSB7Ci0gICAgICBsb2NhbCB0cmFzaAotICAgICAgYXNz aWduIHRyYXNoIFx2KGhvbWUpdHJhc2hjYW4vCi0gICAgICBpZiBub3QgZGVmaW5lZCBcJTEgZW5k IDEgIkRlbGV0ZSB3aGF0PyIKLSAgICAgIGlmIHdpbGQgXCUxIGVuZCAxICJEZWxldGluZyBtdWx0 aXBsZSBmaWxlcyBpcyB0b28gc2NhcnkiCi0gICAgICBpZiBub3QgZXhpc3QgXCUxIGVuZCAxICJJ IGNhbid0IGZpbmQgXCUxIgotICAgICAgaWYgbm90IGRpcmVjdG9yeSBcbSh0cmFzaCkgewotICAg ICAgICAgIG1rZGlyIFxtKHRyYXNoKQotICAgICAgICAgIGlmIGZhaWwgZW5kIDEgIk5vIHRyYXNo IGNhbiIKLSAgICAgIH0KLSAgICAgIHJlbmFtZSAvbGlzdCBcJTEgXG0odHJhc2gpCi0gIH0KLSAg ZGVmaW5lIG15dW5kZWxldGUgewotICAgICAgbG9jYWwgdHJhc2gKLSAgICAgIGFzc2lnbiB0cmFz aCBcdihob21lKXRyYXNoY2FuLwotICAgICAgaWYgbm90IGRlZmluZWQgXCUxIGVuZCAxICJVbmRl bGV0ZSB3aGF0PyIKLSAgICAgIGlmIHdpbGQgXCUxIGVuZCAxICJVbmRlbGV0aW5nIG11bHRpcGxl IGZpbGVzIGlzIHRvbyBoYXJkIgotICAgICAgaWYgbm90IGRpcmVjdG9yeSBcbSh0cmFzaCkgZW5k IDEgIk5vIHRyYXNoIGNhbiIKLSAgICAgIGlmIG5vdCBleGlzdCBcbSh0cmFzaClcJTEgZW5kIDEg IkkgY2FuJ3QgZmluZCBcJTEgaW4gdHJhc2ggY2FuIgotICAgICAgcmVuYW1lIC9saXN0IFxtKHRy YXNoKVwlMSAuCi0gIH0KLQotICAgVGhlc2UgbWFjcm9zIGFyZSBub3QgZXhhY3RseSBwcm9kdWN0 aW9uIHF1YWxpdHkgKHRoZXkgZG9uJ3QgaGFuZGxlCi0gICBmaWxlbmFtZXMgdGhhdCBpbmNsdWRl IHBhdGggc2VnbWVudHMsIHRoZXkgZG9uJ3QgaGFuZGxlIG11bHRpcGxlIGZpbGVzLAotICAgZXRj KSwgYnV0IHlvdSBnZXQgdGhlIGlkZWE6IHlvdSBjYW4gcGFzcyBhcmd1bWVudHMgdG8gbWFjcm9z LCB0aGV5IGNhbgotICAgY2hlY2sgdGhlbSBhbmQgbWFrZSBvdGhlciBraW5kcyBvZiBkZWNpc2lv bnMsIGFuZCB0aGUgY29tbWFuZHMKLSAgIHRoZW1zZWx2ZXMgYXJlIHJlbGF0aXZlbHkgaW50dWl0 aXZlIGFuZCBpbnRlbGxpZ2libGUuCi0KLSAgIElmIHlvdSBwdXQgdGhlIGFib3ZlIGxpbmVzIGlu dG8geW91ciBpbml0aWFsaXphdGlvbiBvciBjdXN0b21pemF0aW9uCi0gICBmaWxlLCB5b3UnbGwg aGF2ZSBNWURFTEVURSBhbmQgTVlVTkRFTEVURSBjb21tYW5kcyBhdmFpbGFibGUgZXZlcnkgdGlt ZQotICAgeW91IHN0YXJ0IEtlcm1pdCwgYXQgbGVhc3QgYXMgbG9uZyBhcyB5b3UgZG9uJ3Qgc3Vw cHJlc3MgZXhlY3V0aW9uIG9mCi0gICB0aGUgaW5pdGlhbGl6YXRpb24gZmlsZS4gKEV4ZXJjaXNl IGZvciB0aGUgcmVhZGVyOiBNYWtlIHRoZXNlIG1hY3JvcwotICAgZ2VuZXJhbGx5IHVzZWZ1bDog cmVtb3ZlIGxpbWl0YXRpb25zLCBhZGQgdHJhc2hjYW4gZGlzcGxheSwgYnJvd3NpbmcsCi0gICBl bXB0eWluZywgZXRjLikKLQotICAgS2VyYmFuZyBzY3JpcHRzIGV4ZWN1dGUgd2l0aG91dCB0aGUg aW5pdGlhbGl6YXRpb24gZmlsZS4gVGhpcyB0byBrZWVwCi0gICB0aGVtIHBvcnRhYmxlIGFuZCBh bHNvIHRvIG1ha2UgdGhlbSBzdGFydCBmYXN0ZXIuIElmIHlvdSB3YW50IHRvIHdyaXRlCi0gICBL ZXJiYW5nIHNjcmlwdHMgdGhhdCBkZXBlbmQgb24gdGhlIGluaXRpYWxpemF0aW9uIGZpbGUsIGlu Y2x1ZGUgdGhlCi0gICBjb21tYW5kCi0KLSAgdGFrZSBcdihob21lKS5rZXJtcmMKLQotICAgYXQg dGhlIGRlc2lyZWQgc3BvdCBpbiB0aGUgc2NyaXB0LiBCeSB0aGUgd2F5LCBcdih4eHgpIGlzIGEg YnVpbHQtaW4KLSAgIHZhcmlhYmxlICh4eHggaXMgdGhlIHZhcmlhYmxlIG5hbWUsICJob21lIiBp biB0aGlzIGNhc2UpLiBUbyBzZWUgd2hhdAotICAgYnVpbHQtaW4gdmFyaWFibGVzIGFyZSBhdmFp bGFibGUsIHR5cGUgInNob3cgdmFyaWFibGVzIiBhdCB0aGUgQy1LZXJtaXQKLSAgIHByb21wdC4g VG8gc2VlIHdoYXQgZWxzZSB5b3UgY2FuIHNob3csIHR5cGUgInNob3cgPyIuIFxtKHh4eCkgaXMg YSB1c2VyCi0gICBkZWZpbmVkIHZhcmlhYmxlIChzdHJpY3RseSBzcGVha2luZywgaXQgaXMgYSBt YWNybyB1c2VkIGFzIGEgdmFyaWFibGUpLgotCi1Db21tYW5kIExpc3QKLQotICAgQy1LZXJtaXQg aGFzIG1vcmUgdGhhbiAyMDAgdG9wLWxldmVsIGNvbW1hbmRzLCBhbmQgc29tZSBvZiB0aGVzZSwg c3VjaAotICAgYXMgU0VULCBicmFuY2ggb2ZmIGludG8gaHVuZHJlZHMgb2Ygc3ViY29tbWFuZHMg b2YgdGhlaXIgb3duLCBzbyBpdCdzCi0gICBub3QgcHJhY3RpY2FsIHRvIGRlc2NyaWJlIHRoZW0g YWxsIGhlcmUuIEluc3RlYWQsIGhlcmUncyBhIGNvbmNpc2UgbGlzdAotICAgb2YgdGhlIG1vc3Qg Y29tbW9ubHkgdXNlZCB0b3AtbGV2ZWwgY29tbWFuZHMsIGdyb3VwZWQgYnkgY2F0ZWdvcnkuIFRv Ci0gICBsZWFybiBhYm91dCBlYWNoIGNvbW1hbmQsIHR5cGUgImhlbHAiIGZvbGxvd2VkIGJ5IHRo ZSBjb21tYW5kIG5hbWUsCi0gICBlLmcuICJoZWxwIHNldCIuIFRlcm1zIHN1Y2ggYXMgQ29tbWFu ZCBzdGF0ZSBhbmQgQ29ubmVjdCBzdGF0ZSBhcmUKLSAgIGV4cGxhaW5lZCBpbiBzdWJzZXF1ZW50 IHNlY3Rpb25zLgotCi0gICBPcHRpb25hbCBmaWVsZHMgYXJlIHNob3duIGluIFsgaXRhbGljaXpl ZCBicmFja2V0cyBdLiBmaWxlbmFtZSBtZWFucwotICAgdGhlIG5hbWUgb2YgYSBzaW5nbGUgZmls ZS4gZmlsZXNwZWMgbWVhbnMgYSBmaWxlIHNwZWNpZmljYXRpb24gdGhhdCBpcwotICAgYWxsb3dl ZCB0byBjb250YWluIHdpbGRjYXJkIGNoYXJhY3RlcnMgbGlrZSAnKicgdG8gbWF0Y2ggZ3JvdXBz IG9mCi0gICBmaWxlcy4gb3B0aW9ucyBhcmUgKG9wdGlvbmFsKSBzd2l0Y2hlcyBsaWtlIC9QQUdF LCAvTk9QQUdFLCAvUVVJRVQsCi0gICBldGMsIGxpc3RlZCBpbiB0aGUgSEVMUCB0ZXh0IGZvciBl YWNoIGNvbW1hbmQuIEV4YW1wbGU6Ci0KLSAgc2VuZCAvcmVjdXJzaXZlIC9sYXJnZXI6MTAwMDAg L2FmdGVyOi0xd2VlayAvZXhjZXB0OioudHh0ICoKLQotICAgd2hpY2ggY2FuIGJlIHJlYWQgYXMg InNlbmQgYWxsIHRoZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSBhbmQgYWxsIHRoZQotICAgb25l cyB1bmRlcm5lYXRoIGl0IHRoYXQgYXJlIGxhcmdlciB0aGFuIDEwMDAwIGJ5dGVzLCBubyBtb3Jl IHRoYW4gb25lCi0gICB3ZWVrIG9sZCwgYW5kIHdob3NlIG5hbWVzIGRvbid0IGVuZCB3aXRoICIu dHh0Ii4KLQotICAgQmFzaWMgQ29tbWFuZHMKLQotICAgSEVMUCBSZXF1ZXN0cyB0b3AtbGV2ZWwg aGVscC4KLSAgIEhFTFAgY29tbWFuZCBSZXF1ZXN0cyBoZWxwIGFib3V0IHRoZSBnaXZlbiBjb21t YW5kLgotICAgSU5UUk9EVUNUSU9OIFJlcXVlc3RzIGEgYnJpZWYgaW50cm9kdWN0aW9uIHRvIEMt S2VybWl0LgotICAgTElDRU5TRSBEaXNwbGF5cyB0aGUgQy1LZXJtaXQgc29mdHdhcmUgY29weXJp Z2h0IGFuZCBsaWNlbnNlLgotICAgVkVSU0lPTiBEaXNwbGF5cyBDLUtlcm1pdCdzIHZlcnNpb24g bnVtYmVyLgotICAgRVhJVCBbIG51bWJlciBdIEV4aXRzIGZyb20gS2VybWl0IHdpdGggdGhlIGdp dmVuIHN0YXR1cyBjb2RlLiBTeW5vbnltczoKLSAgIFFVSVQsIEUsIFEuCi0gICBUQUtFIGZpbGVu YW1lIFsgcGFyYW1ldGVycy4uLiBdIEV4ZWN1dGVzIGNvbW1hbmRzIGZyb20gdGhlIGdpdmVuIGZp bGUuCi0gICBMT0cgaXRlbSBbIGZpbGVuYW1lIF0gS2VlcHMgYSBsb2cgb2YgdGhlIGdpdmVuIGl0 ZW0gaW4gdGhlIGdpdmVuIGZpbGUuCi0gICBbIERPIF0gbWFjcm8gWyBwYXJhbWV0ZXJzLi4uIF0g ICAgRXhlY3V0ZXMgY29tbWFuZHMgZnJvbSB0aGUgZ2l2ZW4KLSAgIG1hY3JvLgotICAgU0VUIHBh cmFtZXRlciB2YWx1ZSBTZXRzIHRoZSBnaXZlbiBwYXJhbWV0ZXIgdG8gdGhlIGdpdmVuIHZhbHVl LgotICAgU0hPVyBjYXRlZ29yeSBTaG93cyBzZXR0aW5ncyBpbiBhIGdpdmVuIGNhdGVnb3J5Lgot ICAgU1RBVFVTIFRlbGxzIHdoZXRoZXIgcHJldmlvdXMgY29tbWFuZCBzdWNjZWVkZWQgb3IgZmFp bGVkLgotICAgREFURSBbIGRhdGUtYW5kL29yLXRpbWUgXSBTaG93cyBjdXJyZW50IGRhdGUtdGlt ZSBvciBpbnRlcnByZXRzIGdpdmVuCi0gICBkYXRlLXRpbWUuCi0gICBSVU4gWyBleHRlcm4tY29t bWFuZCBbIHBhcmFtZXRlcnMuLi4gXSBSdW5zIHRoZSBnaXZlbiBleHRlcm5hbCBjb21tYW5kLgot ICAgU3lub255bTogIS4KLSAgIEVYRUMgWyBleHRlcm4tY29tbWFuZCBbIHBhcmFtcy4uLiBdIEtl cm1pdCBvdmVybGF5cyBpdHNlbGYgd2l0aCB0aGUKLSAgIGdpdmVuIGNvbW1hbmQuCi0gICBTVVNQ RU5EIFN0b3BzIEtlcm1pdCBhbmQgcHV0cyBpdCBpbiB0aGUgYmFja2dyb3VuZC4gU3lub255bTog Wi4KLQotICAgTG9jYWwgRmlsZSBNYW5hZ2VtZW50Ci0KLSAgIFRZUEUgWyBvcHRpb25zIF0gZmls ZW5hbWUgRGlzcGxheXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBmaWxlLgotICAgTU9SRSBb IG9wdGlvbnMgXSBmaWxlbmFtZSBFcXVpdmFsZW50IHRvIFRZUEUgL1BBR0UgKHBhdXNlIGFmdGVy IGVhY2gKLSAgIHNjcmVlbmZ1bCkuCi0gICBDQVQgWyBvcHRpb25zIF0gZmlsZW5hbWUgRXF1aXZh bGVudCB0byBUWVBFIC9OT1BBR0UuCi0gICBIRUFEIFsgb3B0aW9ucyBdIGZpbGVuYW1lIERpc3Bs YXlzIHRoZSBmaXJzdCBmZXcgbGluZXMgb2YgYSBnaXZlbiBmaWxlLgotICAgVEFJTCBbIG9wdGlv bnMgXSBmaWxlbmFtZSBEaXNwbGF5cyB0aGUgbGFzdCBmZXcgbGluZXMgb2YgYSBnaXZlbiBmaWxl LgotICAgR1JFUCBbIG9wdGlvbnMgXSBwYXR0ZXJuIGZpbGVzcGVjIERpc3BsYXlzIGxpbmVzIGZy b20gZmlsZXMgdGhhdCBtYXRjaAotICAgdGhlIHBhdHRlcm4uIFN5bm9ueW06IEZJTkQuCi0gICBE SVJFQ1RPUlkgWyBvcHRpb25zIF0gWyBmaWxlc3BlYyBdIExpc3RzIGZpbGVzIChidWlsdC1pbiwg bWFueQotICAgb3B0aW9ucykuCi0gICBMUyBbIG9wdGlvbnMgXSBbIGZpbGVzcGVjIF0gTGlzdHMg ZmlsZXMgKHJ1bnMgZXh0ZXJuYWwgImxzIiBjb21tYW5kKS4KLSAgIERFTEVURSBbIG9wdGlvbnMg XSBbIGZpbGVzcGVjIF0gRGVsZXRlcyBmaWxlcy4gU3lub255bTogUk0uCi0gICBQVVJHRSBbIG9w dGlvbnMgXSBbIGZpbGVzcGVjIF0gUmVtb3ZlcyBiYWNrdXAgKCoufm5+KSBmaWxlcy4KLSAgIENP UFkgWyBvcHRpb25zIF0gWyBmaWxlc3BlY3MuLi4gXSBDb3BpZXMgZmlsZXMuIFN5bm9ueW06IENQ LgotICAgUkVOQU1FIFsgb3B0aW9ucyBdIFsgZmlsZXNwZWNzLi4uIF0gUmVuYW1lcyBmaWxlcy4g U3lub255bTogTVYuCi0gICBDSE1PRCBbIG9wdGlvbnMgXSBbIGZpbGVzcGVjcy4uLiBdIENoYW5n ZXMgcGVybWlzc2lvbnMgb2YgZmlsZXMuCi0gICBUUkFOU0xBVEUgZmlsZW5hbWUgY2hhcnNldHMg ZmlsZW5hbWUgXSBDb252ZXJ0cyBmaWxlJ3MgY2hhcmFjdGVyIHNldC4KLSAgIFN5bm9ueW06IFhM QVRFLgotICAgQ0QgQ2hhbmdlcyB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IHRvIHlvdXIgaG9tZSBk aXJlY3RvcnkuCi0gICBDRCBkaXJlY3RvcnkgQ2hhbmdlcyB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5 IHRvIHRoZSBvbmUgZ2l2ZW4uCi0gICBDRFVQIENoYW5nZXMgeW91ciB3b3JraW5nIGRpcmVjdG9y eSBvbmUgbGV2ZWwgdXAuCi0gICBQV0QgRGlzcGxheXMgeW91ciB3b3JraW5nIGRpcmVjdG9yeS4K LSAgIEJBQ0sgUmV0dXJucyB0byB5b3VyIHByZXZpb3VzIHdvcmtpbmcgZGlyZWN0b3J5LgotICAg TUtESVIgWyBkaXJlY3RvcnkgXSBDcmVhdGVzIGEgZGlyZWN0b3J5LgotICAgUk1ESVIgWyBkaXJl Y3RvcnkgXSBSZW1vdmVzIGEgZGlyZWN0b3J5LgotCi0gICBNYWtpbmcgQ29ubmVjdGlvbnMKLQot ICAgU0VUIExJTkUgWyBvcHRpb25zIF0gZGV2aWNlbmFtZSAgICAgICAgT3BlbnMgdGhlIG5hbWVk IHNlcmlhbCBwb3J0LgotICAgU3lub255bTogU0VUIFBPUlQuCi0gICBPUEVOIExJTkUgWyBvcHRp b25zIF0gZGV2aWNlbmFtZSBTYW1lIGFzIFNFVCBMSU5FLiBTeW5vbnltOiBPUEVOIFBPUlQuCi0g ICBTRVQgTU9ERU0gVFlQRSBbIG5hbWUgXSBUZWxscyBLZXJtaXQgd2hhdCBraW5kIG9mIG1vZGVt IGlzIG9uIHRoZSBwb3J0LgotICAgRElBTCBbIG51bWJlciBdIFRlbGxzIEtlcm1pdCB0byBkaWFs IHRoZSBnaXZlbiBwaG9uZSBudW1iZXIgd2l0aCB0aGUKLSAgIG1vZGVtLgotICAgUkVESUFMIFJl ZGlhbHMgdGhlIG1vc3QgcmVjZW50bHkgZGlhbGVkIHBob25lIG51bWJlci4KLSAgIEFOU1dFUiBX YWl0cyBmb3IgYW5kIGFuc3dlcnMgYW4gaW5jb21pbmcgY2FsbCBvbiB0aGUgbW9kZW0uCi0gICBB VVRIRU5USUNBVEUgWyBwYXJhbWV0ZXJzLi4uIF0gUGVyZm9ybXMgc2VjdXJlIGF1dGhlbnRpY2F0 aW9uIG9uIGEKLSAgIFRDUC9JUCBjb25uZWN0aW9uLgotICAgU0VUIE5FVFdPUksgVFlQRSB7IFRD UC9JUCwgWC4yNSwgLi4uIH0gU2VsZWN0cyBuZXR3b3JrIHR5cGUgZm9yCi0gICBzdWJzZXF1ZW50 IFNFVCBIT1NUIGNvbW1hbmRzLgotICAgU0VUIEhPU1QgWyBvcHRpb25zIF0gaG9zdCBbIHBvcnQg XSBPcGVucyBhIG5ldHdvcmsgY29ubmVjdGlvbiB0byB0aGUKLSAgIGdpdmVuIGhvc3QgYW5kIHBv cnQuCi0gICBTRVQgSE9TVCBbIG9wdGlvbnMgXSAqIHBvcnQgV2FpdHMgZm9yIGFuIGluY29taW5n IFRDUC9JUCBjb25uZWN0aW9uIG9uCi0gICB0aGUgZ2l2ZW4gcG9ydC4KLSAgIFRFTE5FVCBbIG9w dGlvbnMgXSBob3N0IE9wZW5zIGEgVGVsbmV0IGNvbm5lY3Rpb24gdG8gdGhlIGhvc3QgYW5kCi0g ICBlbnRlcnMgQ29ubmVjdCBzdGF0ZS4KLSAgIFJMT0dJTiBbIG9wdGlvbnMgXSBob3N0IE9wZW5z IGFuIFJsb2dpbiBjb25uZWN0aW9uIHRvIHRoZSBob3N0IGFuZAotICAgZW50ZXJzIENvbm5lY3Qg c3RhdGUuCi0gICBJS1NEIFsgb3B0aW9ucyBdIGhvc3QgT3BlbnMgYSBjb25uZWN0aW9uIHRvIGFu IEludGVybmV0IEtlcm1pdCBTZXJ2aWNlLgotICAgU1NIIFsgb3B0aW9ucyBdIGhvc3QgT3BlbnMg YW4gU1NIIGNvbm5lY3Rpb24gdG8gdGhlIGhvc3QgYW5kIGVudGVycwotICAgQ29ubmVjdCBzdGF0 ZS4KLSAgIEZUUCBPUEVOIGhvc3QgWyBvcHRpb25zIF0gT3BlbnMgYW4gRlRQIGNvbm5lY3Rpb24g dG8gdGhlIGhvc3QuCi0gICBIVFRQIFsgb3B0aW9ucyBdIE9QRU4gaG9zdCBPcGVucyBhbiBIVFRQ IGNvbm5lY3Rpb24gdG8gdGhlIGhvc3QuCi0gICBQVFkgZXh0ZXJuYWwtY29tbWFuZCBSdW5zIHRo ZSBjb21tYW5kIG9uIGEgcHNldWRvdGVybWluYWwgYXMgaWYgaXQgd2VyZQotICAgYSBjb25uZWN0 aW9uLgotICAgUElQRSBleHRlcm5hbC1jb21tYW5kIFJ1bnMgdGhlIGNvbW1hbmQgdGhyb3VnaCBh IHBpcGUgYXMgaWYgaXQgd2VyZSBhCi0gICBjb25uZWN0aW9uLgotCi0gICBVc2luZyBDb25uZWN0 aW9ucwotCi0gICBDT05ORUNUIFsgb3B0aW9ucyBdICAgICAgICAgICAgICAgICAgICBFbnRlcnMg Q29ubmVjdCAodGVybWluYWwpIHN0YXRlLgotICAgU3lub255bTogQy4KLSAgIFJFRElSRUNUIGNv bW1hbmQgUmVkaXJlY3RzIHRoZSBnaXZlbiBleHRlcm5hbCBjb21tYW5kIG92ZXIgdGhlCi0gICBj b25uZWN0aW9uLgotICAgVEVMT1BUIGNvbW1hbmQgU2VuZHMgYSBUZWxuZXQgcHJvdG9jb2wgY29t bWFuZCAoVGVsbmV0IGNvbm5lY3Rpb25zCi0gICBvbmx5KS4KLSAgIEN0cmwtXEMgIkVzY2FwZXMg YmFjayIgZnJvbSBDb25uZWN0IHN0YXRlIHRvIENvbW1hbmQgc3RhdGUuCi0gICBDdHJsLVxCIChJ biBDb25uZWN0IHN0YXRlKSBTZW5kcyBhIEJSRUFLIHNpZ25hbCAoc2VyaWFsIG9yIFRlbG5ldCku Ci0gICBDdHJsLVwhIChJbiBDb25uZWN0IHN0YXRlKSBFbnRlcnMgaW5mZXJpb3Igc2hlbGw7ICJl eGl0IiB0byByZXR1cm4uCi0gICBDdHJsLVw/IChJbiBDb25uZWN0IHN0YXRlKSBTaG93cyBhIG1l bnUgb2Ygb3RoZXIgZXNjYXBlLWxldmVsIG9wdGlvbnMuCi0gICBDdHJsLVxDdHJsLVwgKEluIENv bm5lY3Qgc3RhdGUpIFR5cGUgdHdvIEN0cmwtQmFja3NsYXNoZXMgdG8gc2VuZCBvbmUKLSAgIG9m IHRoZW0uCi0gICBTRVQgRVNDQVBFIFsgY2hhcmFjdGVyIF0gQ2hhbmdlcyBLZXJtaXQncyBDb25u ZWN0LXN0YXRlIGVzY2FwZQotICAgY2hhcmFjdGVyLgotCi0gICBDbG9zaW5nIENvbm5lY3Rpb25z Ci0KLSAgIEhBTkdVUCBIYW5ncyB1cCB0aGUgY3VycmVudGx5IG9wZW4gc2VyaWFsLXBvcnQgb3Ig bmV0d29yayBjb25uZWN0aW9uLgotICAgQ0xPU0UgQ2xvc2VzIHRoZSBjdXJyZW50bHkgb3BlbiBz ZXJpYWwtcG9ydCBvciBuZXR3b3JrIGNvbm5lY3Rpb24uCi0gICBTRVQgTElORSAod2l0aCBubyBk ZXZpY2VuYW1lKSAgICAgICAgICBDbG9zZXMgdGhlIGN1cnJlbnRseSBvcGVuCi0gICBzZXJpYWwt cG9ydCBvciBuZXR3b3JrIGNvbm5lY3Rpb24uCi0gICBTRVQgSE9TVCAod2l0aCBubyBob3N0bmFt ZSkgQ2xvc2VzIHRoZSBjdXJyZW50bHkgb3BlbiBzZXJpYWwtcG9ydCBvcgotICAgbmV0d29yayBj b25uZWN0aW9uLgotICAgRlRQIENMT1NFIENsb3NlcyB0aGUgY3VycmVudGx5IG9wZW4gRlRQIGNv bm5lY3Rpb24uCi0gICBIVFRQIENMT1NFIENsb3NlcyB0aGUgY3VycmVudGx5IG9wZW4gSFRUUCBj b25uZWN0aW9uLgotICAgRVhJVCBBbHNvIGNsb3NlcyBhbGwgY29ubmVjdGlvbnMuIFN5bm9ueW06 IFFVSVQuCi0gICBTRVQgRVhJVCBXQVJOSU5HIE9GRiBTdXBwcmVzc2VzIHdhcm5pbmcgYWJvdXQg b3BlbiBjb25uZWN0aW9ucyBvbiBleGl0Ci0gICBvciBjbG9zZS4KLQotICAgRmlsZSBUcmFuc2Zl cgotCi0gICBTRU5EIFsgb3B0aW9ucyBdIGZpbGVuYW1lIFsgYXMtbmFtZSBdICBTZW5kcyB0aGUg Z2l2ZW4gZmlsZS4gU3lub255bToKLSAgIFMuCi0gICBTRU5EIFsgb3B0aW9ucyBdIGZpbGVzcGVj IFNlbmRzIGFsbCBmaWxlcyB0aGF0IG1hdGNoLgotICAgUkVTRU5EIFsgb3B0aW9ucyBdIGZpbGVz cGVjIFJlc3VtZXMgYW4gaW50ZXJydXB0ZWQgU0VORCBmcm9tIHRoZSBwb2ludAotICAgb2YgZmFp bHVyZS4KLSAgIFJFQ0VJVkUgWyBvcHRpb25zIF0gWyBhcy1uYW1lIF0gV2FpdHMgcGFzc2l2ZWx5 IGZvciBmaWxlcyB0byBhcnJpdmUuCi0gICBTeW5vbnltOiBSLgotICAgTE9HIFRSQU5TQUNUSU9O UyBbIGZpbGVuYW1lIF0gS2VlcHMgYSByZWNvcmQgb2YgZmlsZSB0cmFuc2ZlcnMuCi0gICBGQVNU IFVzZSBmYXN0IGZpbGUtdHJhbnNmZXIgc2V0dGluZ3MgKGRlZmF1bHQpLgotICAgQ0FVVElPVVMg VXNlIGNhdXRpb3VzIGFuZCBsZXNzIGZhc3QgZmlsZS10cmFuc2ZlciBzZXR0aW5ncy4KLSAgIFJP QlVTVCBVc2UgdWx0cmEtY29uc2VydmF0aXZlIGFuZCBzbG93IGZpbGUtdHJhbnNmZXIgc2V0dGlu Z3MuCi0gICBTVEFUSVNUSUNTIFsgb3B0aW9ucyBdIEdpdmVzIHN0YXRpc3RpY3MgYWJvdXQgdGhl IG1vc3QgcmVjZW50IGZpbGUKLSAgIHRyYW5zZmVyLgotICAgV0hFUkUgQWZ0ZXIgdHJhbnNmZXI6 ICJXaGVyZSBkaWQgbXkgZmlsZXMgZ28/Ii4KLSAgIFRSQU5TTUlUIFsgb3B0aW9ucyBdIFsgZmls ZW5hbWUgXSBTZW5kcyBmaWxlIHdpdGhvdXQgcHJvdG9jb2wuIFN5bm9ueW06Ci0gICBYTUlULgot ICAgTE9HIFNFU1NJT04gWyBmaWxlbmFtZSBdIENhcHR1cmVzIHJlbW90ZSB0ZXh0IG9yIGZpbGVz IHdpdGhvdXQKLSAgIHByb3RvY29sLgotICAgU0VUIFBST1RPQ09MIFsgbmFtZS4uLiBdIFRlbGxz IEtlcm1pdCB0byB1c2UgYW4gZXh0ZXJuYWwgZmlsZS10cmFuc2ZlcgotICAgcHJvdG9jb2wuCi0g ICBGVFAgeyBQVVQsIE1QVVQsIEdFVCwgTUdFVCwgLi4uIH0gRlRQIGNsaWVudCBjb21tYW5kcy4K LSAgIEhUVFAgeyBQVVQsIEdFVCwgSEVBRCwgUE9TVCwgLi4uIH0gSFRUUCBjbGllbnQgY29tbWFu ZHMuCi0KLSAgIEtlcm1pdCBTZXJ2ZXIKLQotICAgRU5BQkxFLCBESVNBQkxFICAgICAgICAgICAg ICAgICAgICAgICAgQ29udHJvbHMgd2hpY2ggZmVhdHVyZXMgY2FuIGJlCi0gICB1c2VkIGJ5IGNs aWVudHMuCi0gICBTRVQgU0VSVkVSIFNldHMgcGFyYW1ldGVycyBwcmlvciB0byBlbnRlcmluZyBT ZXJ2ZXIgc3RhdGUuCi0gICBTRVJWRVIgRW50ZXJzIFNlcnZlciBzdGF0ZS4KLQotICAgQ2xpZW50 IG9mIEtlcm1pdCBvciBGVFAgU2VydmVyCi0KLSAgIFsgUkVNT1RFIF0gTE9HSU4gWyB1c2VyIHBh c3N3b3JkIF0gTG9ncyBpbiB0byBhIEtlcm1pdCBzZXJ2ZXIgb3IgSUtTRAotICAgdGhhdCByZXF1 aXJlcyBpdC4KLSAgIFsgUkVNT1RFIF0gTE9HT1VUIExvZ3Mgb3V0IGZyb20gYSBLZXJtaXQgc2Vy dmVyIG9yIElLU0QuCi0gICBTRU5EIFsgb3B0aW9ucyBdIGZpbGVuYW1lIFsgYXMtbmFtZSBdICBT ZW5kcyB0aGUgZ2l2ZW4gZmlsZSB0byB0aGUKLSAgIHNlcnZlci4gU3lub255bXM6IFMsIFBVVC4K LSAgIFNFTkQgWyBvcHRpb25zIF0gZmlsZXNwZWMgU2VuZHMgYWxsIGZpbGVzIHRoYXQgbWF0Y2gu Ci0gICBSRVNFTkQgWyBvcHRpb25zIF0gZmlsZXNwZWMgUmVzdW1lcyBhbiBpbnRlcnJ1cHRlZCBT RU5EIGZyb20gdGhlIHBvaW50Ci0gICBvZiBmYWlsdXJlLgotICAgR0VUIFsgb3B0aW9ucyBdIHJl bW90ZS1maWxlc3BlYyBBc2tzIHRoZSBzZXJ2ZXIgdG8gc2VuZCB0aGUgZ2l2ZW4KLSAgIGZpbGVz LiBTeW5vbnltOiBHLgotICAgUkVHRVQgWyBvcHRpb25zIF0gcmVtb3RlLWZpbGVzcGVjIFJlc3Vt ZXMgYW4gaW50ZXJydXB0ZWQgR0VUIGZyb20gdGhlCi0gICBwb2ludCBvZiBmYWlsdXJlLgotICAg UkVNT1RFIENEIFsgZGlyZWN0b3J5IF0gQXNrcyBzZXJ2ZXIgdG8gY2hhbmdlIGl0cyB3b3JraW5n IGRpcmVjdG9yeS4KLSAgIFN5bm9ueW06IFJDRC4KLSAgIFJFTU9URSBQV0QgWyBkaXJlY3Rvcnkg XSBBc2tzIHNlcnZlciB0byBkaXNwbGF5IGl0cyB3b3JraW5nIGRpcmVjdG9yeS4KLSAgIFN5bm9u eW06IFJQV0QuCi0gICBSRU1PVEUgRElSRUNUT1JZIFsgZmlsZXNwZWMuLi4gXSBBc2tzIHNlcnZl ciB0byBzZW5kIGEgZGlyZWN0b3J5Ci0gICBsaXN0aW5nLiBTeW5vbnltOiBSRElSLgotICAgUkVN T1RFIERFTEVURSBbIGZpbGVzcGVjLi4uIF0gQXNrcyBzZXJ2ZXIgdG8gZGVsZXRlIGZpbGVzLiBT eW5vbnltOgotICAgUkRFTC4KLSAgIFJFTU9URSBbIGNvbW1hbmQuLi4gXSAoTWFueSBvdGhlciBj b21tYW5kczogInJlbW90ZSA/IiBmb3IgYSBsaXN0KS4KLSAgIE1BSUwgWyBvcHRpb25zIF0gZmls ZXNwZWMgU2VuZHMgZmlsZShzKSB0byBiZSBkZWxpdmVyZWQgYXMgZS1tYWlsCi0gICAoS2VybWl0 IG9ubHkpLgotICAgRklOSVNIIEFza3MgdGhlIHNlcnZlciB0byBleGl0IHNlcnZlciBzdGF0ZSAo S2VybWl0IG9ubHkpLgotICAgQllFIEFza3MgdGhlIHNlcnZlciB0byBsb2cgb3V0IGFuZCBjbG9z ZSB0aGUgY29ubmVjdGlvbi4KLQotICAgU2NyaXB0IFByb2dyYW1taW5nCi0gICAgICAgICAgREVG SU5FLCBERUNMQVJFLCBVTkRFRklORSwgVU5ERUNMQVJFLCBBU1NJR04sIEVWQUxVQVRFLAotICAg ICAgICAgIFNFWFBSRVNTSU9OLCBBUlJBWSwgU09SVCwgSU5QVVQsIE9VVFBVVCwgSUYsIEZPUiwg V0hJTEUsIFNXSVRDSCwKLSAgICAgICAgICBHT1RPLCBFQ0hPLCBBU0ssIEdFVEMsIEdFVE9LLCBB U1NFUlQsIFdBSVQsIFNMRUVQLCBGT1BFTiwgRlJFQUQsCi0gICAgICAgICAgRldSSVRFLCBGQ0xP U0UsIFNUT1AsIEVORCwgUkVUVVJOLCBMRUFSTiwgU0hJRlQsIFRSQUNFLCBWT0lELAotICAgICAg ICAgIElOQ1JFTUVOVCwgREVDUkVNRU5ULCAuLi4gRm9yIHRoZXNlIGFuZCBtYW55IG1vcmUgeW91 J2xsIG5lZWQgdG8KLSAgICAgICAgICBjb25zdWx0IHRoZSBbNzldbWFudWFsIGFuZCBzdXBwbGVt ZW50cywgYW5kL29yIHZpc2l0IHRoZQotICAgICAgICAgIFs4MF1LZXJtaXQgU2NyaXB0IExpYnJh cnksIHdoaWNoIGFsc28gaW5jbHVkZXMgYSBicmllZiB0dXRvcmlhbC4KLSAgICAgICAgICBIaW50 OiBIRUxQIExFQVJOIHRvIGZpbmQgb3V0IGhvdyB0byBnZXQgS2VybWl0IHRvIHdyaXRlIHNpbXBs ZQotICAgICAgICAgIHNjcmlwdHMgZm9yIHlvdS4KLQotICAgTWFueSBvZiBLZXJtaXQncyBjb21t YW5kcyBoYXZlIHN5bm9ueW1zLCB2YXJpYW50cywgcmVsYXRpdmVzLCBhbmQgc28KLSAgIG9uLiBG b3IgZXhhbXBsZSwgTVNFTkQgaXMgYSB2ZXJzaW9uIG9mIFNFTkQgdGhhdCBhY2NlcHRzIGEgbGlz dCBvZiBmaWxlCi0gICBzcGVjaWZpY2F0aW9ucyB0byBiZSBzZW50LCByYXRoZXIgdGhhbiBqdXN0 IG9uZSBmaWxlIHNwZWNpZmljYXRpb24sIGFuZAotICAgTVBVVCBpcyBhIHN5bm9ueW0gb2YgTVNF TkQuIE1PVkUgbWVhbnMgdG8gU0VORCBhbmQgdGhlbiBERUxFVEUgdGhlCi0gICBzb3VyY2UgZmls ZSBpZiBzdWNjZXNzZnVsLiBNTU9WRSBpcyBsaWtlIE1PVkUsIGJ1dCBhY2NlcHRzIGEgbGlzdCBv ZgotICAgZmlsZXNwZWNzLCBhbmQgc28gb24uIFRoZXNlIGFyZSBkZXNjcmliZWQgaW4gdGhlIFs4 MV1mdWxsCi0gICBkb2N1bWVudGF0aW9uLgotCi0gICBVc2UgcXVlc3Rpb24gbWFyayB0byBmZWVs IHlvdXIgd2F5IHRocm91Z2ggYW4gdW5mYW1pbGlhciBjb21tYW5kLCBhcyBpbgotICAgdGhpcyBl eGFtcGxlICh0aGUgcGFydCB5b3UgdHlwZSBpcyB1bmRlcmxpbmVkKToKLQotICBDLUtlcm1pdD4g cmVtb3RlID8gT25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0gICBhc3NpZ24gICAgIGRlbGV0ZSAgICAg aGVscCAgICAgICBsb2dpbiAgICAgIHByaW50ICAgICAgcmVuYW1lICAgICBzcGFjZQotICAgY2Qg ICAgICAgICBkaXJlY3RvcnkgIGhvc3QgICAgICAgbG9nb3V0ICAgICBwd2QgICAgICAgIHJtZGly ICAgICAgdHlwZQotICAgY29weSAgICAgICBleGl0ICAgICAgIGtlcm1pdCAgICAgbWtkaXIgICAg ICBxdWVyeSAgICAgIHNldCAgICAgICAgd2hvCi0gIEMtS2VybWl0PiByZW1vdGUgc2V0ID8gT25l IG9mIHRoZSBmb2xsb3dpbmc6Ci0gICBhdHRyaWJ1dGVzICAgZmlsZSAgICAgICAgIHJldHJ5ICAg ICAgICB0cmFuc2ZlcgotICAgYmxvY2stY2hlY2sgIHJlY2VpdmUgICAgICBzZXJ2ZXIgICAgICAg d2luZG93Ci0gIEMtS2VybWl0PiByZW1vdGUgc2V0IGZpbGUgPyBPbmUgb2YgdGhlIGZvbGxvd2lu ZzoKLSAgIGNoYXJhY3Rlci1zZXQgIGluY29tcGxldGUgICAgIHJlY29yZC1sZW5ndGgKLSAgIGNv bGxpc2lvbiAgICAgIG5hbWVzICAgICAgICAgIHR5cGUKLSAgQy1LZXJtaXQ+IHJlbW90ZSBzZXQg ZmlsZSBuYW1lcyA/IE9uZSBvZiB0aGUgZm9sbG93aW5nOgotICAgY29udmVydGVkICBsaXRlcmFs Ci0gIEMtS2VybWl0PiByZW1vdGUgc2V0IGZpbGUgbmFtZXMgbGl0ZXJhbAotICBDLUtlcm1pdD4K LQotICAgVGhpcyBpcyBjYWxsZWQgbWVudSBvbiBkZW1hbmQ6IHlvdSBnZXQgYSBtZW51IHdoZW4g eW91IHdhbnQgb25lLCBidXQKLSAgIG1lbnVzIGFyZSBub3QgZm9yY2VkIG9uIHlvdSBldmVuIHdo ZW4ga25vdyB3aGF0IHlvdSdyZSBkb2luZy4gTm90ZSB0aGF0Ci0gICB5b3UgY2FuIGFsc28gYWJi cmV2aWF0ZSBtb3N0IGtleXdvcmRzLCBhbmQgeW91IGNhbiBjb21wbGV0ZSB0aGVtIHdpdGgKLSAg IHRoZSBUYWIgb3IgRXNjIGtleS4gQWxzbyBub3RlIHRoYXQgPyB3b3JrcyBmb3IgZmlsZW5hbWVz IHRvbywgYW5kIHRoYXQKLSAgIHlvdSBjYW4gdXNlIGl0IGluIHRoZSBtaWRkbGUgb2YgYSBrZXl3 b3JkIG9yIGZpbGVuYW1lLCBub3QganVzdCBhdCB0aGUKLSAgIGJlZ2lubmluZy4gRm9yIGV4YW1w bGUsICJzZW5kIHg/IiBsaXN0cyBhbGwgdGhlIGZpbGVzIGluIHRoZSBjdXJyZW50Ci0gICBkaXJl Y3Rvcnkgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCAneCcuCi0KLSAgIFs4Ml1LZXJtaXQgSG9tZSBb ODNdQy1LZXJtaXQgSG9tZSBbODRdQy1LZXJtaXQgRkFRCi0KLUlOSVRJQUxJWkFUSU9OIEZJTEUK LQotICAgWzg1XVRvcCBbODZdQ29udGVudHMgWzg3XU5leHQgWzg4XVByZXZpb3VzCi0KLSAgIElu IGl0cyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIEMtS2VybWl0IGV4ZWN1dGVzIGNvbW1hbmRzIGZy b20gYSBmaWxlCi0gICBjYWxsZWQgLmtlcm1yYyBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5IHdoZW4g aXQgc3RhcnRzLCB1bmxlc3MgaXQgaXMKLSAgIGdpdmVuIHRoZSAtWSBvciAteSBjb21tYW5kLWxp bmUgb3B0aW9uLiBDdXN0b20gY29uZmlndXJhdGlvbnMgbWlnaHQKLSAgIHN1YnN0aXR1dGUgYSBz aGFyZWQgc3lzdGVtLXdpZGUgaW5pdGlhbGl6YXRpb24gZmlsZS4gVGhlIFNIT1cgRklMRQotICAg Y29tbWFuZCB0ZWxscyB3aGF0IGluaXRpYWxpemF0aW9uIGZpbGUsIGlmIGFueSwgd2FzIHVzZWQu IFRoZSBzdGFuZGFyZAotICAgaW5pdGlhbGl6YXRpb24gZmlsZSAiY2hhaW5zIiB0byBhbiBpbmRp dmlkdWFsIGN1c3RvbWl6YXRpb24gZmlsZSwKLSAgIC5teWtlcm1jLCBpbiB0aGUgaG9tZSBkaXJl Y3RvcnksIGluIHdoaWNoIGVhY2ggdXNlciBjYW4gZXN0YWJsaXNoCi0gICBoZXIvaGlzIG93biBw cmVmZXJlbmNlcywgZGVmaW5lIG1hY3JvcywgYW5kIHNvIG9uLgotCi0gICBTaW5jZSBleGVjdXRp b24gb2YgdGhlIGluaXRpYWxpemF0aW9uIGZpbGUgKGF0IGxlYXN0IHRoZSBzdGFuZGFyZCBvbmUp Ci0gICBtYWtlcyBDLUtlcm1pdCB0YWtlIGxvbmdlciB0byBzdGFydCwgaXQgbWlnaHQgYmUgYmV0 dGVyIG5vdCB0byBoYXZlIGFuCi0gICBpbml0aWFsaXphdGlvbiBmaWxlLCBlc3BlY2lhbGx5IG5v dyB0aGF0IEtlcm1pdCdzIGRlZmF1bHQgc3RhcnR1cAotICAgY29uZmlndXJhdGlvbiBpcyB3ZWxs IGF0dHVuZWQgdG8gbW9kZXJuIGNvbXB1dGluZyBhbmQgbmV0d29ya2luZyAtLSBpbgotICAgb3Ro ZXIgd29yZHMsIHlvdSBubyBsb25nZXIgaGF2ZSBkbyBhbnl0aGluZyBzcGVjaWFsIHRvIG1ha2Ug S2VybWl0Ci0gICB0cmFuc2ZlcnMgZ28gZmFzdC4gU28gaW5zdGVhZCBvZiBoYXZpbmcgYW4gaW5p dGlhbGl6YXRpb24gZmlsZSB0aGF0IGlzCi0gICBleGVjdXRlZCBldmVyeSB0aW1lIEtlcm1pdCBz dGFydHMsIHlvdSBtaWdodCBjb25zaWRlciBtYWtpbmcgb25lIG9yCi0gICBtb3JlIGtlcmJhbmcg c2NyaXB0cyAod2l0aCBuYW1lcyBvdGhlciB0aGF0IC5rZXJtcmMpIHRoYXQgZG8gTk9UCi0gICBp bmNsdWRlIGFuICJleGl0IiBjb21tYW5kLCBhbmQgaW52b2tlIHRob3NlIHdoZW4geW91IG5lZWQg dGhlIHNldHRpbmdzLAotICAgbWFjcm8gZGVmaW5pdGlvbnMsIGFuZC9vciBzY3JpcHRlZCBhY3Rp b25zIHRoZXkgY29udGFpbiwgYW5kIGludm9rZQotICAgQy1LZXJtaXQgZGlyZWN0bHkgd2hlbiB5 b3UgZG9uJ3QuCi0KLSAgIFRvIHB1dCBpdCBhbm90aGVyIHdheS4uLiBXZSBzdGlsbCBkaXN0cmli dXRlIHRoZSBzdGFuZGFyZAotICAgaW5pdGlhbGl6YXRpb24gZmlsZSBzaW5jZSBpdCdzIGZlYXR1 cmVkIGluIHRoZSBtYW51YWwgYW5kIGJhY2t3YXJkcwotICAgY29tcGF0aWJpbGl0eSBpcyBpbXBv cnRhbnQgdG8gdXMuIEJ1dCB0aGVyZSdzIG5vIGhhcm0gaW4gbm90IHVzaW5nIGl0Ci0gICBpZiB5 b3UgZG9uJ3QgbmVlZCB0aGUgc3R1ZmYgdGhhdCdzIGluIGl0IChzZXJ2aWNlcyBkaXJlY3Rvcnks IGRpYWxpbmcKLSAgIGRpcmVjdG9yeSwgbmV0d29yayBkaXJlY3RvcnksIGFuZCBhc3NvY2lhdGVk IG1hY3JvIGRlZmluaXRpb25zKS4gT24gdGhlCi0gICBvdGhlciBoYW5kLCBpZiB0aGVyZSBhcmUg c2V0dGluZ3Mgb3IgbWFjcm9zIHlvdSB3YW50IGluIGVmZmVjdCBFVkVSWQotICAgdGltZSB5b3Ug dXNlIEtlcm1pdCwgdGhlIGluaXRpYWxpemF0aW9uIGZpbGUgKG9yIHRoZSBjdXN0b21pemF0aW9u IGZpbGUKLSAgIGl0IGNoYWlucyB0bykgaXMgdGhlIHBsYWNlIHRvIHB1dCB0aGVtLCBiZWNhdXNl IHRoYXQncyB0aGUgb25seSBwbGFjZQotICAgS2VybWl0IGxvb2tzIGZvciB0aGVtIGF1dG9tYXRp Y2FsbHkgZWFjaCB0aW1lIHlvdSBzdGFydCBpdC4KLQotICAgWzg5XUtlcm1pdCBIb21lIFs5MF1D LUtlcm1pdCBIb21lIFs5MV1DLUtlcm1pdCBGQVEKLQotTU9ERVMgT0YgT1BFUkFUSU9OCi0KLSAg IFs5Ml1Ub3AgWzkzXUNvbnRlbnRzIFs5NF1OZXh0IFs5NV1QcmV2aW91cwotCi0gICBLZXJtaXQg aXMgc2FpZCB0byBiZSBpbiBMb2NhbCBtb2RlIGlmIGl0IGhhcyBtYWRlIGEgY29ubmVjdGlvbiB0 bwotICAgYW5vdGhlciBjb21wdXRlciwgZS5nLiBieSBkaWFsaW5nIGl0IG9yIGVzdGFibGlzaGlu ZyBhIFRlbG5ldAotICAgY29ubmVjdGlvbiB0byBpdC4gVGhlIG90aGVyIGNvbXB1dGVyIGlzIHJl bW90ZSwgc28gaWYgeW91IHN0YXJ0IGFub3RoZXIKLSAgIGNvcHkgb2YgS2VybWl0IG9uIHRoZSBy ZW1vdGUgY29tcHV0ZXIsIGl0IGlzIHNhaWQgdG8gYmUgaW4gUmVtb3RlIG1vZGUKLSAgIChhcyBs b25nIGFzIGl0IGhhcyBub3QgbWFkZSBhbnkgY29ubmVjdGlvbnMgb2YgaXRzIG93bikuIFRoZSBs b2NhbAotICAgS2VybWl0IGNvbW11bmljYXRlcyBvdmVyIHRoZSBjb21tdW5pY2F0aW9ucyBkZXZp Y2Ugb3IgbmV0d29yawotICAgY29ubmVjdGlvbiwgYWN0aW5nIGFzIGEgY29uZHVpdCBiZXR3ZWVu IHRoZSB0aGUgcmVtb3RlIGNvbXB1dGVyIGFuZAotICAgeW91ciBrZXlib2FyZCBhbmQgc2NyZWVu LiBUaGUgcmVtb3RlIEtlcm1pdCBpcyB0aGUgZmlsZS10cmFuc2ZlcgotICAgcGFydG5lciB0byB0 aGUgbG9jYWwgS2VybWl0IGFuZCBjb21tdW5pY2F0ZXMgb25seSB0aHJvdWdoIGl0cyBzdGFuZGFy ZAotICAgaW5wdXQgYW5kIG91dHB1dC4KLQotICAgQXQgYW55IG1vbWVudCwgYSBLZXJtaXQgcHJv Z3JhbSBjYW4gYmUgaW4gYW55IG9mIHRoZSBmb2xsb3dpbmcgc3RhdGVzLgotICAgSXQncyBpbXBv cnRhbnQgdG8ga25vdyB3aGF0IHRoZXkgYXJlIGFuZCBob3cgdG8gY2hhbmdlIGZyb20gb25lIHRv IHRoZQotICAgb3RoZXIuCi0KLSAgIENvbW1hbmQgc3RhdGUKLSAgICAgICAgICBJbiB0aGlzIHN0 YXRlLCBLZXJtaXQgcmVhZHMgY29tbWFuZHMgZnJvbToKLQotICAgICAgICAgICsgWW91ciBrZXli b2FyZDsgb3I6Ci0gICAgICAgICAgKyBBIGZpbGUsIG9yOgotICAgICAgICAgICsgQSBtYWNybyBk ZWZpbml0aW9uLgotCi0gICAgICAgICAgWW91IGNhbiBleGl0IGZyb20gQ29tbWFuZCBzdGF0ZSBi YWNrIHRvIFVuaXggd2l0aCB0aGUgRVhJVCBvcgotICAgICAgICAgIFFVSVQgY29tbWFuZCAoc2Ft ZSB0aGluZykuIFlvdSBjYW4gZW50ZXIgQ29ubmVjdCBzdGF0ZSB3aXRoIGFueQotICAgICAgICAg IG9mIHZhcmlvdXMgY29tbWFuZHMgKENPTk5FQ1QsIERJQUwsIFRFTE5FVCwgZXRjKS4gWW91IGNh biBlbnRlcgotICAgICAgICAgIGZpbGUgdHJhbnNmZXIgc3RhdGUgd2l0aCBjb21tYW5kcyBsaWtl IFNFTkQsIFJFQ0VJVkUsIGFuZCBHRVQuCi0gICAgICAgICAgWW91IGNhbiBlbnRlciBTZXJ2ZXIg c3RhdGUgd2l0aCB0aGUgU0VSVkVSIGNvbW1hbmQuIFRoZSBUQUtFCi0gICAgICAgICAgY29tbWFu ZCB0ZWxscyBLZXJtaXQgdG8gcmVhZCBhbmQgZXhlY3V0ZSBjb21tYW5kcyBmcm9tIGEgZmlsZS4K LSAgICAgICAgICBUaGUgKHBlcmhhcHMgaW1wbGllZCkgRE8gY29tbWFuZCB0ZWxscyBLZXJtaXQg dG8gcmVhZCBhbmQKLSAgICAgICAgICBleGVjdXRlIGNvbW1hbmRzIGZyb20gYSBtYWNybyBkZWZp bml0aW9uLiBXaGlsZSBpbiBDb21tYW5kCi0gICAgICAgICAgc3RhdGUsIHlvdSBjYW4gaW50ZXJy dXB0IGFueSBjb21tYW5kLCBtYWNybywgb3IgY29tbWFuZCBmaWxlIGJ5Ci0gICAgICAgICAgdHlw aW5nIEN0cmwtQyAoaG9sZCBkb3duIHRoZSBDdHJsIGtleSBhbmQgcHJlc3MgdGhlIEMga2V5KTsg dGhpcwotICAgICAgICAgIG5vcm1hbGx5IGJyaW5ncyB5b3UgYmFjayB0byB0aGUgcHJvbXB0Lgot Ci0gICBTaGVsbCBzdGF0ZQotICAgICAgICAgIFlvdSBjYW4gaW52b2tlIGFuIGluZmVyaW9yIHNo ZWxsIG9yIGV4dGVybmFsIGNvbW1hbmQgZnJvbSB0aGUKLSAgICAgICAgICBLZXJtaXQgY29tbWFu ZCBwcm9tcHQgYnkgdXNpbmcgdGhlIFBVU0gsIFJVTiAoISksIEVESVQsIG9yCi0gICAgICAgICAg QlJPV1NFIGNvbW1hbmQuIFdoaWxlIHRoZSBpbmZlcmlvciBzaGVsbCBvciBjb21tYW5kIGlzIGFj dGl2ZSwKLSAgICAgICAgICBLZXJtaXQgaXMgc3VzcGVuZGVkIGFuZCBkb2VzIG5vdGhpbmcuIFJl dHVybiB0byBLZXJtaXQgQ29tbWFuZAotICAgICAgICAgIHN0YXRlIGJ5IGV4aXRpbmcgZnJvbSB0 aGUgaW5mZXJpb3Igc2hlbGwgb3IgYXBwbGljYXRpb24uCi0KLSAgIENvbm5lY3Qgc3RhdGUKLSAg ICAgICAgICBJbiB0aGlzIHN0YXRlLCB3aGljaCBjYW4gYmUgZW50ZXJlZCBvbmx5IHdoZW4gaW4g TG9jYWwgbW9kZQotICAgICAgICAgIChpLmUuIHdoZW4gS2VybWl0IGhhcyBtYWRlIGEgY29ubmVj dGlvbiB0byBhbm90aGVyIGNvbXB1dGVyKSwKLSAgICAgICAgICBLZXJtaXQgaXMgYWN0aW5nIGFz IGEgdGVybWluYWwgdG8gdGhlIHJlbW90ZSBjb21wdXRlci4gWW91cgotICAgICAgICAgIGtleXN0 cm9rZXMgYXJlIHNlbnQgdG8gdGhlIHJlbW90ZSBjb21wdXRlciBhbmQgY2hhcmFjdGVycyB0aGF0 Ci0gICAgICAgICAgYXJyaXZlIG92ZXIgdGhlIGNvbW11bmljYXRpb24gY29ubmVjdGlvbiBhcmUg ZGlzcGxheWVkIG9uIHlvdXIKLSAgICAgICAgICBzY3JlZW4uIFRoaXMgc3RhdGUgaXMgZW50ZXJl ZCB3aGVuIHlvdSBnaXZlIGEgQ09OTkVDVCwgRElBTCwKLSAgICAgICAgICBURUxORVQsIFJMT0dJ Tiwgb3IgSUtTRCBjb21tYW5kLiBZb3UgY2FuIHJldHVybiB0byBjb21tYW5kIHN0YXRlCi0gICAg ICAgICAgYnkgbG9nZ2luZyBvdXQgb2YgdGhlIHJlbW90ZSBjb21wdXRlciwgb3IgYnkgdHlwaW5n OgotCi0gIEN0cmwtXGMKLQotICAgICAgICAgIFRoYXQgaXM6IEhvbGQgZG93biB0aGUgQ3RybCBr ZXkgYW5kIHByZXNzIHRoZSBiYWNrc2xhc2gga2V5LAotICAgICAgICAgIHRoZW4gbGV0IGdvIG9m IHRoZSBDdHJsIGtleSBhbmQgcHJlc3MgdGhlIEMga2V5LiBUaGlzIGlzIGNhbGxlZAotICAgICAg ICAgIGVzY2FwaW5nIGJhY2suIENlcnRhaW4gb3RoZXIgZXNjYXBlLWxldmVsIGNvbW1hbmRzIGFy ZSBhbHNvCi0gICAgICAgICAgcHJvdmlkZWQ7IHR5cGUgQ3RybC1cPyBmb3IgYSBsaXN0LiBGb3Ig ZXhhbXBsZSwgeW91IGNhbiBlbnRlcgotICAgICAgICAgIFNoZWxsIHN0YXRlIHdpdGg6Ci0KLSAg Q3RybC1cIQotCi0gICAgICAgICAgVG8gc2VuZCBhIEN0cmwtXCB0byB0aGUgaG9zdCB3aGlsZSBp biBDb25uZWN0IHN0YXRlLCB0eXBlIHR3byBvZgotICAgICAgICAgIHRoZW0gaW4gYSByb3cuIFNl ZSBIRUxQIENPTk5FQ1QgYW5kIEhFTFAgU0VUIEVTQ0FQRSBmb3IgbW9yZQotICAgICAgICAgIGlu Zm8uCi0KLSAgIExvY2FsIGZpbGUtdHJhbnNmZXIgc3RhdGUKLSAgICAgICAgICBJbiB0aGlzIHN0 YXRlLCBLZXJtaXQgaXMgc2VuZGluZyBwYWNrZXRzIGJhY2sgYW5kIGZvcnRoIHdpdGggdGhlCi0g ICAgICAgICAgb3RoZXIgY29tcHV0ZXIgaW4gb3JkZXIgdG8gdHJhbnNmZXIgYSBmaWxlIG9yIGFj Y29tcGxpc2ggc29tZQotICAgICAgICAgIG90aGVyIGZpbGUtcmVsYXRlZCB0YXNrLiBBbmQgYXQg dGhlIHNhbWUgdGltZSwgaXQgaXMgZGlzcGxheWluZwotICAgICAgICAgIGl0cyBwcm9ncmVzcyBv biB5b3VyIHNjcmVlbiBhbmQgd2F0Y2hpbmcgeW91ciBrZXlib2FyZCBmb3IKLSAgICAgICAgICBp bnRlcnJ1cHRpb25zLiBJbiB0aGlzIHN0YXRlLCB0aGUgZm9sbG93aW5nIHNpbmdsZS1rZXlzdHJv a2UKLSAgICAgICAgICBjb21tYW5kcyBhcmUgYWNjZXB0ZWQ6Ci0KLSAgICAgIFggICAgICAgIElu dGVycnVwdCB0aGUgY3VycmVudCBmaWxlIGFuZCBnbyBvbiB0byB0aGUgbmV4dCAoaWYgYW55KS4K LSAgICAgIFogICAgICAgIEludGVycnVwdCB0aGUgY3VycmVudCBmaWxlIGFuZCBza2lwIGFsbCB0 aGUgcmVzdC4KLSAgICAgIEUgICAgICAgIExpa2UgWiBidXQgdXNlcyBhICJzdHJvbmdlciIgcHJv dG9jb2wgKHVzZSBpZiBYIG9yIFogZG9uJ3Qgd29yaykuCi0gICAgICBDdHJsLUMgICBJbnRlcnJ1 cHQgZmlsZS10cmFuc2ZlciBtb2RlICh1c2UgaWYgWiBvciBFIGRvbid0IHdvcmspLgotCi0gICAg ICAgICAgS2VybWl0IHJldHVybnMgdG8gaXRzIHByZXZpb3VzIHN0YXRlIChDb21tYW5kIG9yIENv bm5lY3QpIHdoZW4KLSAgICAgICAgICB0aGUgdHJhbnNmZXIgaXMgY29tcGxldGUgb3Igd2hlbiBp bnRlcnJ1cHRlZCBzdWNjZXNzZnVsbHkgYnkgWCwKLSAgICAgICAgICBaLCBFLCBvciBDdHJsLUMg KGhvbGQgZG93biB0aGUgQ3RybCBrZXkgYW5kIHByZXNzIHRoZSBDIGtleSkuCi0KLSAgIFJlbW90 ZSBmaWxlLXRyYW5zZmVyIHN0YXRlCi0gICAgICAgICAgSW4gdGhpcyBzdGF0ZSwgS2VybWl0IGlz IGV4Y2hhbmdpbmcgZmlsZS10cmFuc2ZlciBwYWNrZXRzIHdpdGgKLSAgICAgICAgICBpdHMgbG9j YWwgcGFydG5lciBvdmVyIGl0cyBzdGFuZGFyZCBpL28uIEl0IGxlYXZlcyB0aGlzIHN0YXRlCi0g ICAgICAgICAgYXV0b21hdGljYWxseSB3aGVuIHRoZSB0cmFuc2ZlciBpcyBjb21wbGV0ZS4gSW4g Y2FzZSB5b3UgZmluZAotICAgICAgICAgIHlvdXIgbG9jYWwgS2VybWl0IGluIENvbm5lY3Qgc3Rh dGUgYW5kIHRoZSByZW1vdGUgb25lIGluCi0gICAgICAgICAgRmlsZS10cmFuc2ZlciBzdGF0ZSAo aW4gd2hpY2ggaXQgc2VlbXMgdG8gaWdub3JlIHlvdXIKLSAgICAgICAgICBrZXlzdHJva2VzKSwg eW91IGNhbiB1c3VhbGx5IHJldHVybiBpdCB0byBjb21tYW5kIHN0YXRlIGJ5Ci0gICAgICAgICAg dHlwaW5nIHRocmVlIEN0cmwtQydzIGluIGEgcm93LiBJZiB0aGF0IGRvZXNuJ3Qgd29yaywgcmV0 dXJuCi0gICAgICAgICAgeW91ciBsb2NhbCBLZXJtaXQgdG8gQ29tbWFuZCBzdGF0ZSAoQ3RybC1c IEMpIGFuZCB0eXBlCi0gICAgICAgICAgImUtcGFja2V0IiBhbmQgdGhlbiBwcmVzcyB0aGUgUmV0 dXJuIG9yIEVudGVyIGtleTsgdGhpcyBmb3JjZXMgYQotICAgICAgICAgIGZhdGFsIEtlcm1pdCBw cm90b2NvbCBlcnJvci4KLQotICAgUmVtb3RlIFNlcnZlciBzdGF0ZQotICAgICAgICAgIFRoaXMg aXMgbGlrZSBSZW1vdGUgRmlsZS10cmFuc2ZlciBzdGF0ZSwgZXhjZXB0IGl0IG5ldmVyIHJldHVy bnMKLSAgICAgICAgICBhdXRvbWF0aWNhbGx5IHRvIENvbW1hbmQgc3RhdGUuIFJhdGhlciwgaXQg YXdhaXRzIGZ1cnRoZXIKLSAgICAgICAgICBpbnN0cnVjdGlvbnMgZnJvbSB0aGUgY2xpZW50IHBy b2dyYW07IHRoYXQgaXMsIGZyb20geW91ciBMb2NhbAotICAgICAgICAgIEtlcm1pdCBwcm9ncmFt LiBZb3UgY2FuIHJldHVybiB0aGUgUmVtb3RlIFNlcnZlciB0byBpdHMgcHJldmlvdXMKLSAgICAg ICAgICBzdGF0ZSBieSBpc3N1aW5nIGEgImZpbmlzaCIgY29tbWFuZCB0byB0aGUgY2xpZW50LCBv ciBpZiB5b3UgYXJlCi0gICAgICAgICAgaW4gQ29ubmVjdCBzdGF0ZSwgYnkgdHlwaW5nIHRocmVl IEN0cmwtQydzIGluIGEgcm93LiBZb3UgY2FuCi0gICAgICAgICAgdGVsbCB0aGUgc2VydmVyIGpv YiB0byBsb2cgb3V0IGFuZCBicmVhayB0aGUgY29ubmVjdGlvbiBieQotICAgICAgICAgIGlzc3Vp bmcgYSAiYnllIiBjb21tYW5kIHRvIHRoZSBjbGllbnQuCi0KLSAgIExvY2FsIFNlcnZlciBzdGF0 ZQotICAgICAgICAgIExpa2UgUmVtb3RlLVNlcnZlciBzdGF0ZSwgYnV0IGluIGxvY2FsIG1vZGUs IGFuZCB0aGVyZWZvcmUgd2l0aAotICAgICAgICAgIGl0cyBmaWxlLXRyYW5zZmVyIGRpc3BsYXkg c2hvd2luZywgYW5kIGxpc3RlbmluZyBmb3Igc2luZ2xlLWtleQotICAgICAgICAgIGNvbW1hbmRz LCBhcyBpbiBMb2NhbCBGaWxlLXRyYW5zZmVyIHN0YXRlLiBVc3VhbGx5IHRoaXMgc3RhdGUgaXMK LSAgICAgICAgICBlbnRlcmVkIGF1dG9tYXRpY2FsbHkgd2hlbiBhIHJlbW90ZSBLZXJtaXQgcHJv Z3JhbSBnaXZlcyBhIEdFVAotICAgICAgICAgIGNvbW1hbmQuCi0KLSAgIEMtS2VybWl0LCBLZXJt aXQgOTUsIGFuZCBNUy1ET1MgS2VybWl0IGFsbCBjYW4gc3dpdGNoIGF1dG9tYXRpY2FsbHkKLSAg IGZyb20gQ29ubmVjdCBzdGF0ZSB0byBMb2NhbCBGaWxlLXRyYW5zZmVyIHN0YXRlIHdoZW4geW91 IGluaXRpYXRlIGEKLSAgIGZpbGUgdHJhbnNmZXIgZnJvbSB0aGUgcmVtb3RlIGNvbXB1dGVyIGJ5 IHN0YXJ0aW5nIEtlcm1pdCBhbmQgdGVsbGluZwotICAgaXQgdG8gc2VuZCBvciBnZXQgYSBmaWxl LCBpbiB3aGljaCBjYXNlLCBDb25uZWN0IHN0YXRlIGlzIGF1dG9tYXRpY2FsbHkKLSAgIHJlc3Vt ZWQgYWZ0ZXIgdGhlIGZpbGUgdHJhbnNmZXIgaXMgZmluaXNoZWQuCi0KLSAgIE5vdGUgdGhhdCBD LUtlcm1pdCBpcyBub3QgYSB0ZXJtaW5hbCBlbXVsYXRvci4gSXQgaXMgYSBjb21tdW5pY2F0aW9u cwotICAgYXBwbGljYXRpb24gdGhhdCB5b3UgcnVuIGluIGEgdGVybWluYWwgd2luZG93IChlLmcu IGNvbnNvbGUgb3IgWHRlcm0pLgotICAgVGhlIHNwZWNpZmljIGVtdWxhdGlvbiwgc3VjaCBhcyBW VDEwMCwgVlQyMjAsIExpbnV4IENvbnNvbGUsIG9yIFh0ZXJtLAotICAgaXMgcHJvdmlkZWQgYnkg dGhlIHRlcm1pbmFsIHdpbmRvdyBpbiB3aGljaCB5b3UgYXJlIHJ1bm5pbmcgQy1LZXJtaXQuCi0g ICBLZXJtaXQgOTUgYW5kIE1TLURPUyBLZXJtaXQsIG9uIHRoZSBvdGhlciBoYW5kLCBhcmUgdHJ1 ZSB0ZXJtaW5hbAotICAgZW11bGF0b3JzLiBXaHkgaXMgQy1LZXJtaXQgbm90IGEgdGVybWluYWwg ZW11bGF0b3I/IFs5Nl1DTElDSyBIRVJFIHRvCi0gICByZWFkIGFib3V0IGl0LgotCi0gICBbOTdd S2VybWl0IEhvbWUgWzk4XUMtS2VybWl0IEhvbWUgWzk5XUMtS2VybWl0IEZBUQotCi1NQUtJTkcg Q09OTkVDVElPTlMKLQotICAgWzEwMF1Ub3AgWzEwMV1Db250ZW50cyBbMTAyXU5leHQgWzEwM11Q cmV2aW91cwotCi0gICBIZXJlIGlzIGhvdyB0byBtYWtlIGRpZmZlcmVudCBraW5kcyBvZiBjb25u ZWN0aW9ucyB1c2luZyBpbnRlcmFjdGl2ZQotICAgS2VybWl0IGNvbW1hbmRzIChhcyBub3RlZCBh Ym92ZSwgeW91IGNhbiBhbHNvIG1ha2UgY29ubmVjdGlvbnMgd2l0aAotICAgY29tbWFuZC1saW5l IG9wdGlvbnMpLiBOb3RlIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gbWFrZSBjb25uZWN0aW9ucwot ICAgd2l0aCBLZXJtaXQuIEl0IGNhbiBhbHNvIGJlIHVzZWQgb24gdGhlIGZhciBlbmQgb2YgYSBj b25uZWN0aW9uIGFzIHRoZQotICAgcmVtb3RlIGZpbGUgdHJhbnNmZXIgYW5kIG1hbmFnZW1lbnQg cGFydG5lciBvZiB5b3VyIGxvY2FsCi0gICBjb21tdW5pY2F0aW9ucyBzb2Z0d2FyZS4KLQotICAg TWFraW5nIGEgVGVsbmV0IENvbm5lY3Rpb24KLSAgICAgICAgICBBdCB0aGUgQy1LZXJtaXQgY29t bWFuZCBwcm9tcHQsIHNpbXBseSB0eXBlOgotCi0gIHRlbG5ldCBmb28uYmFyLmNvbSAgICAgICAg IDsgU3Vic3RpdHV0ZSBkZXNpcmVkIGhvc3QgbmFtZSBvciBhZGRyZXNzLgotICB0ZWxuZXQgeHl6 Y29ycC5jb20gMzAwMCAgICA7IFlvdSBjYW4gYWxzbyBpbmNsdWRlIGEgcG9ydCBudW1iZXIuCi0K LSAgICAgICAgICBJZiB0aGUgY29ubmVjdGlvbiBpcyBzdWNjZXNzZnVsLCBLZXJtaXQgYXV0b21h dGljYWxseSBlbnRlcnMKLSAgICAgICAgICBDb25uZWN0IHN0YXRlLiBXaGVuIHlvdSBsb2dvdXQg ZnJvbSB0aGUgcmVtb3RlIGhvc3QsIEtlcm1pdAotICAgICAgICAgIGF1dG9tYXRpY2FsbHkgcmV0 dXJucyB0byBpdHMgcHJvbXB0LiBNb3JlIGluZm86IEhFTFAgVEVMTkVULAotICAgICAgICAgIEhF TFAgU0VUIFRFTE5FVCwgSEVMUCBTRVQgVEVMT1BULiBBbHNvIHNlZSB0aGUgWzEwNF1JS1NEIHNl Y3Rpb24KLSAgICAgICAgICBiZWxvdy4KLQotICAgTWFraW5nIGFuIFJsb2dpbiBjb25uZWN0aW9u Ci0gICAgICAgICAgVGhpcyBpcyBqdXN0IGxpa2UgVGVsbmV0LCBleGNlcHQgeW91IGhhdmUgdG8g YmUgcm9vdCB0byBkbyBpdAotICAgICAgICAgIGJlY2F1c2UgUmxvZ2luIHVzZXMgYSBwcml2aWxl Z2VkIFRDUCBwb3J0OgotCi0gIHJsb2dpbiBmb28uYmFyLmNvbSAgICAgICAgIDsgU3Vic3RpdHV0 ZSBkZXNpcmVkIGhvc3QgbmFtZSBvciBhZGRyZXNzLgotCi0gICAgICAgICAgTW9yZSBpbmZvOiBI RUxQIFJMT0dJTi4KLQotICAgTWFraW5nIGFuIFNTSCBDb25uZWN0aW9uCi0gICAgICAgICAgVW5s aWtlIFRlbG5ldCBhbmQgUmxvZ2luLCBTU0ggY29ubmVjdGlvbnMgYXJlIG5vdCBidWlsdC1pbiwg YnV0Ci0gICAgICAgICAgaGFuZGxlZCBieSBydW5uaW5nIHlvdXIgZXh0ZXJuYWwgU1NIIGNsaWVu dCB0aHJvdWdoIGEKLSAgICAgICAgICBwc2V1ZG90ZXJtaW5hbC4gVXNpbmcgQy1LZXJtaXQgdG8g Y29udHJvbCB0aGUgU1NIIGNsaWVudCBnaXZlcwotICAgICAgICAgIHlvdSBhbGwgb2YgS2VybWl0 J3MgZmVhdHVyZXMgKGZpbGUgdHJhbnNmZXIsIGNoYXJhY3Rlci1zZXQKLSAgICAgICAgICBjb252 ZXJzaW9uLCBzY3JpcHRpbmcsIGV0Yykgb3ZlciBTU0guCi0KLSAgc3NoIGZvby5iYXIuY29tICAg ICAgICAgICAgOyBTdWJzdGl0dXRlIGRlc2lyZWQgaG9zdCBuYW1lIG9yIGFkZHJlc3MuCi0KLSAg ICAgICAgICBNb3JlIGluZm86IEhFTFAgU1NILCBIRUxQIFNFVCBTU0guCi0KLSAgIERpYWxpbmcg d2l0aCBhIE1vZGVtCi0gICAgICAgICAgSWYgaXQncyBhbiBleHRlcm5hbCBtb2RlbSwgbWFrZSBz dXJlIGl0IGlzIGNvbm5lY3RlZCB0byBhIHVzYWJsZQotICAgICAgICAgIHNlcmlhbCBwb3J0IG9u IHlvdXIgY29tcHV0ZXIgd2l0aCBhIHJlZ3VsYXIgKHN0cmFpZ2h0LXRocm91Z2gpCi0gICAgICAg ICAgWzEwNV1tb2RlbSBjYWJsZSwgYW5kIHRvIHRoZSB0ZWxlcGhvbmUgamFjayB3aXRoIGEgdGVs ZXBob25lCi0gICAgICAgICAgY2FibGUsIGFuZCB0aGF0IGl0J3MgdHVybmVkIG9uLiBUaGVuIHVz ZSB0aGVzZSBjb21tYW5kczoKLQotICBzZXQgbW9kZW0gdHlwZSB1c3JvYm90aWNzICA7IE9yIG90 aGVyIHN1cHBvcnRlZCB0eXBlCi0gIHNldCBsaW5lIC9kZXYvdHR5UzAgICAgICAgIDsgU3BlY2lm eSBkZXZpY2UgbmFtZQotICBzZXQgc3BlZWQgNTc2MDAgICAgICAgICAgICA7IE9yIG90aGVyIGRl c2lyZWQgc3BlZWQKLSAgc2V0IGZsb3cgcnRzL2N0cyAgICAgICAgICAgOyBNb3N0IG1vZGVybiBt b2RlbXMgc3VwcG9ydCB0aGlzCi0gIHNldCBkaWFsIG1ldGhvZCB0b25lICAgICAgIDsgKG9yIHB1 bHNlKQotICBkaWFsIDc2NTQzMjEgICAgICAgICAgICAgICA7IERpYWwgdGhlIGRlc2lyZWQgbnVt YmVyCi0KLSAgICAgICAgICBUeXBlICJzZXQgbW9kZW0gdHlwZSA/IiBmb3IgYSBsaXN0IG9mIHN1 cHBvcnRlZCBtb2RlbSB0eXBlcy4gSWYKLSAgICAgICAgICB5b3Ugb21pdCB0aGUgU0VUIE1PREVN IFRZUEUgY29tbWFuZCwgdGhlIGRlZmF1bHQgdHlwZSBpcwotICAgICAgICAgICJnZW5lcmljLWhp Z2gtc3BlZWQiLCB3aGljaCBzaG91bGQgd29yayBmb3IgbW9zdCBtb2Rlcm4KLSAgICAgICAgICBB VC1jb21tYW5kLXNldCBtb2RlbXMuIElmIHRoZSBsaW5lIGlzIGJ1c3ksIEtlcm1pdCByZWRpYWxz Ci0gICAgICAgICAgYXV0b21hdGljYWxseS4gSWYgdGhlIGNhbGwgZG9lcyBub3Qgc3VjY2VlZCwg dXNlICJzZXQgZGlhbAotICAgICAgICAgIGRpc3BsYXkgb24iIGFuZCB0cnkgaXQgYWdhaW4gdG8g d2F0Y2ggd2hhdCBoYXBwZW5zLiBJZiB0aGUgY2FsbAotICAgICAgICAgIHN1Y2NlZWRzLCBLZXJt aXQgZW50ZXJzIENvbm5lY3Qgc3RhdGUgYXV0b21hdGljYWxseSBhbmQgcmV0dXJucwotICAgICAg ICAgIHRvIGl0cyBwcm9tcHQgYXV0b21hdGljYWxseSB3aGVuIHlvdSBsb2cgb3V0IGZyb20gdGhl IHJlbW90ZQotICAgICAgICAgIGNvbXB1dGVyIG9yIHRoZSBjb25uZWN0aW9uIGlzIG90aGVyd2lz ZSBsb3N0LgotCi0gICAgICAgICAgWW91IGNhbiBhbHNvIGRpYWwgZnJvbSBhIG1vZGVtIHRoYXQg aXMgYWNjZXNzaWJsZSBieSBUZWxuZXQsCi0gICAgICAgICAgZS5nLiB0byBhIHJldmVyc2UgdGVy bWluYWwgc2VydmVyLiBJbiB0aGlzIGNhc2UgdGhlIGNvbW1hbmQKLSAgICAgICAgICBzZXF1ZW5j ZSBpczoKLQotICBzZXQgaG9zdCB0cy54eHguY29tIDIwMDAgICA7IFRlcm1pbmFsLXNlcnZlciBh bmQgcG9ydAotICBzZXQgbW9kZW0gdHlwZSB1c3JvYm90aWNzICA7IE9yIG90aGVyIHN1cHBvcnRl ZCB0eXBlCi0gIHNldCBkaWFsIG1ldGhvZCB0b25lICAgICAgIDsgKG9yIHB1bHNlKQotICBkaWFs IDc2NTQzMjEgICAgICAgICAgICAgICA7IERpYWwgdGhlIGRlc2lyZWQgbnVtYmVyCi0KLSAgICAg ICAgICBJZiB0aGUgdGVybWluYWwgc2VydmVyIHN1cHBvcnRzIHRoZSBUZWxuZXQgQ29tIFBvcnQg T3B0aW9uLAotICAgICAgICAgIFsxMDZdUkZDIDIyMTcsIHlvdSBjYW4gYWxzbyBnaXZlIHNlcmlh bC1wb3J0IHJlbGF0ZWQgY29tbWFuZHMKLSAgICAgICAgICBzdWNoIGFzIFNFVCBTUEVFRCwgU0VU IFBBUklUWSwgYW5kIHNvIG9uLCBhbmQgS2VybWl0IHJlbGF5cyB0aGVtCi0gICAgICAgICAgdG8g dGhlIHRlcm1pbmFsIHNlcnZlciB1c2luZyB0aGUgcHJvdG9jb2wgc3BlY2lmaWVkIGluIHRoZSBS RkMuCi0KLSAgICAgICAgICBNb3JlIGluZm86IEhFTFAgU0VUIE1PREVNLCBIRUxQIFNFVCBMSU5F LCBIRUxQIFNFVCBTUEVFRCwgSEVMUAotICAgICAgICAgIFNFVCBGTE9XLCBIRUxQIERJQUwsIEhF TFAgU0VUIERJQUwsIEhFTFAgU0VUIE1PREVNLCBIRUxQIFNFVAotICAgICAgICAgIENBUlJJRVIt V0FUQ0gsIFNIT1cgQ09NTVVOSUNBVElPTlMsIFNIT1cgTU9ERU0sIFNIT1cgRElBTC4KLQotICAg RGlyZWN0IFNlcmlhbCBQb3J0Ci0gICAgICAgICAgQ29ubmVjdCB0aGUgdHdvIGNvbXB1dGVycywg QSBhbmQgQiwgd2l0aCBhIFsxMDddbnVsbCBtb2RlbSBjYWJsZQotICAgICAgICAgIChvciB0d28g bW9kZW0gY2FibGVzIGludGVyY29ubmVjdGVkIHdpdGggYSBudWxsLW1vZGVtIGFkYXB0ZXIgb3IK LSAgICAgICAgICBtb2RlbSBlbGltaW5hdG9yKS4gRnJvbSBDb21wdXRlciBBOgotCi0gIHNldCBt b2RlbSB0eXBlIG5vbmUgICAgICAgIDsgVGhlcmUgaXMgbm8gbW9kZW0KLSAgc2V0IGxpbmUgL2Rl di90dHlTMCAgICAgICAgOyBTcGVjaWZ5IGRldmljZSBuYW1lCi0gIHNldCBjYXJyaWVyLXdhdGNo IG9mZiAgICAgIDsgSWYgRFRSIGFuZCBDRCBhcmUgbm90IGNyb3NzLWNvbm5lY3RlZAotICBzZXQg c3BlZWQgNTc2MDAgICAgICAgICAgICA7IE9yIG90aGVyIGRlc2lyZWQgc3BlZWQKLSAgc2V0IGZs b3cgcnRzL2N0cyAgICAgICAgICAgOyBJZiBSVFMgYW5kIENUUyBhcmUgY3Jvc3MtY29ubmVjdGVk Ci0gIHNldCBmbG93IHhvbi94b2ZmICAgICAgICAgIDsgSWYgeW91IGNhbid0IHVzZSBSVFMvQ1RT Ci0gIHNldCBwYXJpdHkgZXZlbiAgICAgICAgICAgIDsgKG9yICJtYXJrIiBvciAic3BhY2UiLCBp ZiBuZWNlc3NhcnkpCi0gIHNldCBzdG9wLWJpdHMgMiAgICAgICAgICAgIDsgKHJhcmVseSBuZWNl c3NhcnkpCi0gIGNvbm5lY3QgICAgICAgICAgICAgICAgICAgIDsgRW50ZXIgQ29ubmVjdCAodGVy bWluYWwpIHN0YXRlCi0KLSAgICAgICAgICBUaGlzIGFzc3VtZXMgQ29tcHV0ZXIgQiBpcyBzZXQg dXAgdG8gbGV0IHlvdSBsb2cgaW4uIElmIGl0Ci0gICAgICAgICAgaXNuJ3QsIHlvdSBjYW4gcnVu IGEgY29weSBvZiBLZXJtaXQgb24gQ29tcHV0ZXIgQiBhbmQgZm9sbG93Ci0gICAgICAgICAgYXBw cm94aW1hdGVseSB0aGUgc2FtZSBkaXJlY3Rpb25zLiBNb3JlIGluZm86IEFzIGFib3ZlIHBsdXMg SEVMUAotICAgICAgICAgIENPTk5FQ1QuCi0KLSAgIFdpdGggbW9kZW1zIG9yIGRpcmVjdCBzZXJp YWwgY29ubmVjdGlvbnMsIHlvdSBtaWdodCBhbHNvIGhhdmUgdG8gInNldAotICAgcGFyaXR5IGV2 ZW4iIChvciAibWFyayIgb3IgInNwYWNlIikgaWYgaXQncyBhIDctYml0IGNvbm5lY3Rpb24uCi0K LSAgIE9mIHRoZSBjb25uZWN0aW9uIHR5cGVzIGxpc3RlZCBhYm92ZSwgb25seSBvbmUgY2FuIGJl IG9wZW4gYXQgYSB0aW1lLgotICAgSG93ZXZlciwgYW55IG9uZSBvZiB0aGVzZSBjYW4gYmUgb3Bl biBjb25jdXJyZW50bHkgd2l0aCBhbiBbMTA4XUZUUCBvcgotICAgSFRUUCBzZXNzaW9uLiBFYWNo IGNvbm5lY3Rpb24gdHlwZSBjYW4gYmUgY3VzdG9taXplZCB0byBhbnkgZGVzaXJlZAotICAgZGVn cmVlLCBzY3JpcHRlZCwgbG9nZ2VkLCB5b3UgbmFtZSBpdC4gU2VlIHRoZSBtYW51YWwuCi0KLSAg IE5PVEU6IE9uIHNlbGVjdGVkIHBsYXRmb3JtcywgQy1LZXJtaXQgYWxzbyBjYW4gbWFrZSBYLjI1 IGNvbm5lY3Rpb25zLgotICAgU2VlIHRoZSBtYW51YWwgZm9yIGRldGFpbHMuCi0KLSAgIFsxMDld S2VybWl0IEhvbWUgWzExMF1DLUtlcm1pdCBIb21lIFsxMTFdQy1LZXJtaXQgRkFRCi0KLVRSQU5T RkVSUklORyBGSUxFUyBXSVRIIEtFUk1JVAotCi0gICBbMTEyXVRvcCBbMTEzXUNvbnRlbnRzIFsx MTRdTmV4dCBbMTE1XVByZXZpb3VzCi0KLSAgICAgKiBbMTE2XURvd25sb2FkaW5nIEZpbGVzCi0g ICAgICogWzExN11VcGxvYWRpbmcgRmlsZXMKLSAgICAgKiBbMTE4XUtlcm1pdCBUcmFuc2ZlcnMg dGhlIE9sZC1GYXNoaW9uZWQgV2F5Ci0gICAgICogWzExOV1JZiBGaWxlIFRyYW5zZmVyIEZhaWxz Ci0gICAgICogWzEyMF1BZHZhbmNlZCBLZXJtaXQgRmlsZSBUcmFuc2ZlciBGZWF0dXJlcwotICAg ICAqIFsxMjFdTm9uLUtlcm1pdCBGaWxlIFRyYW5zZmVyCi0KLSAgIFRoZXJlIGlzIGEgWzEyMl13 aWRlc3ByZWFkIGFuZCBwZXJzaXN0ZW50IGJlbGllZiB0aGF0IEtlcm1pdCBpcyBhIHNsb3cKLSAg IHByb3RvY29sLiBUaGlzIGlzIGJlY2F1c2UsIHVudGlsIHJlY2VudGx5LCBpdCB1c2VkIGNvbnNl cnZhdGl2ZSB0dW5pbmcKLSAgIGJ5IGRlZmF1bHQgdG8gbWFrZSBzdXJlIGZpbGUgdHJhbnNmZXJz IHN1Y2NlZWRlZCwgcmF0aGVyIHRoYW4gZmFpbGluZwotICAgYmVjYXVzZSB0aGV5IG92ZXJsb2Fk ZWQgdGhlIGNvbm5lY3Rpb24uIFNvbWUgZXh0cmEgY29tbWFuZHMgKG9yCi0gICBjb21tYW5kLWxp bmUgb3B0aW9ucywgbGlrZSAtUSkgd2VyZSBuZWVkZWQgdG8gbWFrZSBpdCBnbyBmYXN0LCBidXQK LSAgIG5vYm9keSBib3RoZXJlZCB0byBmaW5kIG91dCBhYm91dCB0aGVtLiBBbHNvLCBpdCB0YWtl cyB0d28gdG8gdGFuZ286Ci0gICBtb3N0IG5vbi1LZXJtaXQtUHJvamVjdCBLZXJtaXQgcHJvdG9j b2wgaW1wbGVtZW50YXRpb25zIHJlYWxseSBBUkUKLSAgIHNsb3cuIFRoZSBiZXN0IGZpbGUtdHJh bnNmZXIgcGFydG5lcnMgZm9yIEMtS2VybWl0IGFyZTogYW5vdGhlciBjb3B5IG9mCi0gICBbMTIz XUMtS2VybWl0ICg3LjAgb3IgbGF0ZXIpIGFuZCBbMTI0XUtlcm1pdCA5NS4gVGhlc2UgY29tYmlu YXRpb25zCi0gICB3b3JrIHdlbGwgYW5kIHRoZXkgd29yayBmYXN0IGJ5IGRlZmF1bHQuIE1TLURP UyBLZXJtaXQgaXMgZ29vZCB0b28sIGJ1dAotICAgeW91IGhhdmUgdG8gdGVsbCBpdCB0byBnbyBm YXN0IChieSBnaXZpbmcgaXQgdGhlIEZBU1QgY29tbWFuZCkuCi0KLSAgIEZ1cnRoZXJtb3JlLCBh bGwgdGhyZWUgb2YgdGhlc2UgS2VybWl0IHByb2dyYW1zIHN1cHBvcnQgImF1dG9kb3dubG9hZCIK LSAgIGFuZCAiYXV0b3VwbG9hZCIsIG1lYW5pbmcgdGhhdCB3aGVuIHRoZXkgYXJlIGluIENvbm5l Y3Qgc3RhdGUgYW5kIGEKLSAgIEtlcm1pdCBwYWNrZXQgY29tZXMgaW4gZnJvbSB0aGUgcmVtb3Rl LCB0aGV5IGF1dG9tYXRpY2FsbHkgc3dpdGNoIGludG8KLSAgIGZpbGUgdHJhbnNmZXIgbW9kZS4K LQotICAgQW5kIHBsdXMsIEMtS2VybWl0IGFuZCBLOTUgYWxzbyBzd2l0Y2ggYXV0b21hdGljYWxs eSBiZXR3ZWVuIHRleHQgYW5kCi0gICBiaW5hcnkgbW9kZSBmb3IgZWFjaCBmaWxlLCBzbyB0aGVy ZSBpcyBubyBuZWVkIHRvICJzZXQgZmlsZSB0eXBlCi0gICBiaW5hcnkiIG9yICJzZXQgZmlsZSB0 eXBlIHRleHQiLCBvciB0byB3b3JyeSBhYm91dCBmaWxlcyBiZWluZwotICAgY29ycnVwdGVkIGJl Y2F1c2UgdGhleSB3ZXJlIHRyYW5zZmVycmVkIGluIHRoZSB3cm9uZyBtb2RlLgotCi0gICBXaGF0 IGFsbCBvZiB0aGVzZSB3b3JkcyBhZGQgdXAgdG8gaXMgdGhhdCBub3csIHdoZW4geW91IHVzZSB1 cC10by1kYXRlCi0gICBLZXJtaXQgc29mdHdhcmUgZnJvbSB0aGUgS2VybWl0IFByb2plY3QsIGZp bGUgdHJhbnNmZXIgaXMgbm90IG9ubHkKLSAgIGZhc3QsIGl0J3MgcmlkaWN1bG91c2x5IGVhc3ku IFlvdSBiYXJlbHkgaGF2ZSB0byBnaXZlIGFueSBjb21tYW5kcyBhdAotICAgYWxsLgotCi0gICBE b3dubG9hZGluZyBGaWxlcwotICAgICAgICAgIExldCdzIHNheSB5b3UgaGF2ZSBbMTI1XUtlcm1p dCA5NSwgWzEyNl1DLUtlcm1pdCwgb3IgWzEyN11NUy1ET1MKLSAgICAgICAgICBLZXJtaXQgb24g eW91ciBkZXNrdG9wIGNvbXB1dGVyLCB3aXRoIGEgY29ubmVjdGlvbiB0byBhIFVuaXgKLSAgICAg ICAgICBjb21wdXRlciB0aGF0IGhhcyBDLUtlcm1pdCBpbnN0YWxsZWQgYXMgImtlcm1pdCIuIFRv IGRvd25sb2FkIGEKLSAgICAgICAgICBmaWxlIChzZW5kIGl0IGZyb20gVW5peCB0byB5b3VyIGRl c2t0b3AgY29tcHV0ZXIpLCBqdXN0IHR5cGUgdGhlCi0gICAgICAgICAgZm9sbG93aW5nIGNvbW1h bmQgYXQgeW91ciBVbml4IHNoZWxsIHByb21wdDoKLQotICBrZXJtaXQgLXMgb29mYS50eHQKLQot ICAgICAgICAgICh3aGVyZSBvb2ZhLnR4dCBpcyB0aGUgZmlsZW5hbWUpLiBJZiB5b3Ugd2FudCB0 byBzZW5kIG1vcmUgdGhhbgotICAgICAgICAgIG9uZSBmaWxlLCB5b3UgY2FuIHB1dCBhcyBtYW55 IGZpbGVuYW1lcyBhcyB5b3Ugd2FudCBvbiB0aGUKLSAgICAgICAgICBjb21tYW5kIGxpbmUsIGFu ZCB0aGV5IGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgdGV4dCBhbmQKLSAgICAgICAgICBiaW5h cnk6Ci0KLSAga2VybWl0IC1zIG9vZmEudHh0IG9vZmEuemlwIG9vZmEuaHRtbCBvb2ZhLnRhci5n egotCi0gICAgICAgICAgYW5kL29yIHlvdSBjYW4gdXNlIHdpbGRjYXJkcyB0byBzZW5kIGdyb3Vw cyBvZiBmaWxlczoKLQotICBrZXJtaXQgLXMgb29mYS4qCi0KLSAgICAgICAgICBJZiB5b3Ugd2Fu dCB0byBzZW5kIGEgZmlsZSB1bmRlciBhbiBhc3N1bWVkIG5hbWUsIHVzZToKLQotICBrZXJtaXQg LXMgZnJpZGF5LnR4dCAtYSB0b2RheS50eHQKLQotICAgICAgICAgIFRoaXMgc2VuZHMgdGhlIGZp bGUgZnJpZGF5LnR4dCBidXQgdGVsbHMgdGhlIHJlY2VpdmluZyBLZXJtaXQKLSAgICAgICAgICB0 aGF0IGl0cyBuYW1lIGlzIHRvZGF5LnR4dC4gSW4gYWxsIGNhc2VzLCBhcyBub3RlZCwgd2hlbiB0 aGUKLSAgICAgICAgICBmaWxlIHRyYW5zZmVyIGlzIGZpbmlzaGVkLCB5b3VyIGRlc2t0b3AgS2Vy bWl0IHJldHVybnMKLSAgICAgICAgICBhdXRvbWF0aWNhbGx5IHRvIENvbm5lY3Qgc3RhdGUuIE5v IHdvcnJpZXMgYWJvdXQgZXNjYXBpbmcgYmFjaywKLSAgICAgICAgICByZS1jb25uZWN0aW5nLCB0 ZXh0L2JpbmFyeSBtb2RlIHN3aXRjaGluZy4gQWxtb3N0IHRvbyBlYXN5LAotICAgICAgICAgIHJp Z2h0PwotCi0gICBVcGxvYWRpbmcgRmlsZXMKLSAgICAgICAgICBUbyB1cGxvYWQgZmlsZXMgKHNl bmQgdGhlbSBmcm9tIHlvdXIgZGVza3RvcCBjb21wdXRlciB0byB0aGUKLSAgICAgICAgICByZW1v dGUgVW5peCBjb21wdXRlcikgZG8gdGhlIHNhbWUgdGhpbmcsIGJ1dCB1c2UgdGhlIC1nIChHRVQp Ci0gICAgICAgICAgb3B0aW9uIGluc3RlYWQgb2YgLXM6Ci0KLSAga2VybWl0IC1nIG9vZmEudHh0 Ci0KLSAgICAgICAgICBUaGlzIGNhdXNlcyB5b3VyIGxvY2FsIEtlcm1pdCB0byBlbnRlciBzZXJ2 ZXIgbW9kZTsgdGhlbiB0aGUKLSAgICAgICAgICByZW1vdGUgS2VybWl0IHByb2dyYW0gcmVxdWVz dHMgdGhlIG5hbWVkIGZpbGUgYW5kIHRoZSBsb2NhbAotICAgICAgICAgIEtlcm1pdCBzZW5kcyBp dCBhbmQgcmV0dXJucyBhdXRvbWF0aWNhbGx5IHRvIENvbm5lY3Qgc3RhdGUgd2hlbgotICAgICAg ICAgIGRvbmUuCi0KLSAgICAgICAgICBJZiB5b3Ugd2FudCB0byB1cGxvYWQgbXVsdGlwbGUgZmls ZXMsIHlvdSBoYXZlIGhhdmUgdXNlIHNoZWxsCi0gICAgICAgICAgcXVvdGluZyBydWxlcywgc2lu Y2UgdGhlc2UgYXJlbid0IGxvY2FsIGZpbGVzOgotCi0gIGtlcm1pdCAtZyAib29mYS50eHQgb29m YS56aXAgb29mYS5odG1sIG9vZmEudGFyLmd6IgotICBrZXJtaXQgLWcgIm9vZmEuKiIKLQotICAg ICAgICAgIElmIHlvdSB3YW50IHRvIHVwbG9hZCBhIGZpbGUgYnV0IHN0b3JlIGl0IHVuZGVyIGEg ZGlmZmVyZW50Ci0gICAgICAgICAgbmFtZSwgdXNlOgotCi0gIGtlcm1pdCAtZyBmcmlkYXkudHh0 IC1hIHRvZGF5LnR4dAotCi0gICBLZXJtaXQgVHJhbnNmZXJzIHRoZSBPbGQtRmFzaGlvbmVkIFdh eQotICAgICAgICAgIElmIHlvdXIgZGVza3RvcCBjb21tdW5pY2F0aW9ucyBzb2Z0d2FyZSBkb2Vz IG5vdCBzdXBwb3J0Ci0gICAgICAgICAgYXV0b3VwbG9hZCBvciBhdXRvZG93bmxvYWQsIG9yIGl0 IGRvZXMgbm90IGluY2x1ZGUgS2VybWl0IHNlcnZlcgotICAgICAgICAgIG1vZGUsIHRoZSBwcm9j ZWR1cmUgcmVxdWlyZXMgbW9yZSBzdGVwcy4KLQotICAgICAgICAgIFRvIGRvd25sb2FkIGEgZmls ZSwgdHlwZToKLQotICBrZXJtaXQgLXMgZmlsZW5hbWUKLQotICAgICAgICAgIG9uIHRoZSBob3N0 IGFzIGJlZm9yZSwgYnV0IGlmIG5vdGhpbmcgaGFwcGVucyBhdXRvbWF0aWNhbGx5IGluCi0gICAg ICAgICAgcmVzcG9uc2UgdG8gdGhpcyBjb21tYW5kLCB5b3UgaGF2ZSB0byBzd2l0Y2ggeW91ciBk ZXNrdG9wCi0gICAgICAgICAgY29tbXVuaWNhdGlvbnMgc29mdHdhcmUgaW50byBLZXJtaXQgUmVj ZWl2ZSBzdGF0ZS4gVGhpcyBtaWdodCBiZQotICAgICAgICAgIGRvbmUgYnkgZXNjYXBpbmcgYmFj ayB1c2luZyBrZXlib2FyZCBjaGFyYWN0ZXJzIG9yIGhvdCBrZXlzCi0gICAgICAgICAgKEFsdC14 IGlzIHR5cGljYWwpIGFuZC9vciB3aXRoIGEgY29tbWFuZCAobGlrZSBSRUNFSVZFKSBvciBhCi0g ICAgICAgICAgbWVudS4gV2hlbiB0aGUgZmlsZSB0cmFuc2ZlciBpcyBjb21wbGV0ZSwgeW91IGhh dmUgdG8gZ28gYmFjayB0bwotICAgICAgICAgIENvbm5lY3Qgc3RhdGUsIFRlcm1pbmFsIGVtdWxh dGlvbiwgb3Igd2hhdGV2ZXIgdGVybWlub2xvZ3kKLSAgICAgICAgICBhcHBsaWVzIHRvIHlvdXIg ZGVza3RvcCBjb21tdW5pY2F0aW9ucyBzb2Z0d2FyZS4KLQotICAgICAgICAgIFRvIHVwbG9hZCBh IGZpbGUsIHR5cGU6Ci0KLSAga2VybWl0IC1yCi0KLSAgICAgICAgICBvbiB0aGUgaG9zdCAocmF0 aGVyIHRoYW4gImtlcm1pdCAtZyIpLiBUaGlzIHRlbGxzIEMtS2VybWl0IHRvCi0gICAgICAgICAg d2FpdCBwYXNzaXZlbHkgZm9yIGEgZmlsZSB0byBzdGFydCBhcnJpdmluZy4gVGhlbiByZWdhaW4g dGhlCi0gICAgICAgICAgYXR0ZW50aW9uIG9mIHlvdXIgZGVza3RvcCBzb2Z0d2FyZSAoQWx0LXgg b3Igd2hhdGV2ZXIpIGFuZAotICAgICAgICAgIGluc3RydWN0IGl0IHRvIHNlbmQgdGhlIGRlc2ly ZWQgZmlsZShzKSB3aXRoIEtlcm1pdCBwcm90b2NvbC4KLSAgICAgICAgICBXaGVuIHRoZSB0cmFu c2ZlciBpcyBmaW5pc2hlZCwgcmV0dXJuIHRvIHRoZSBDb25uZWN0IG9yIFRlcm1pbmFsCi0gICAg ICAgICAgc2NyZWVuLgotCi0gICBJZiBGaWxlIFRyYW5zZmVyIEZhaWxzCi0gICAgICAgICAgQWx0 aG91Z2ggZXZlcnkgYXNwZWN0IG9mIEtlcm1pdCdzIG9wZXJhdGlvbiBjYW4gYmUgZmluZWx5IHR1 bmVkLAotICAgICAgICAgIHRoZXJlIGFyZSBhbHNvIHRocmVlIHNob3J0IGFuZCBzaW1wbGUgIm9t bmlidXMgdHVuaW5nIiBjb21tYW5kcwotICAgICAgICAgIHlvdSBjYW4gdXNlIGZvciB0cm91Ymxl c2hvb3Rpbmc6Ci0KLSAgICAgICAgRkFTVAotICAgICAgICAgICAgICAgIFVzZSBmYXN0IGZpbGUt dHJhbnNmZXIgc2V0dGluZ3MuIFRoaXMgaGFzIGJlZW4gdGhlIGRlZmF1bHQKLSAgICAgICAgICAg ICAgICBzaW5jZSBDLUtlcm1pdCA3LjAgbm93IHRoYXQgbW9zdCBtb2Rlcm4gY29tcHV0ZXJzIGFu ZAotICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25zIHN1cHBvcnQgaXQuIElmIHRyYW5zZmVycyBm YWlsIHdpdGggZmFzdAotICAgICAgICAgICAgICAgIHNldHRpbmdzLCB0cnkgLiAuIC4KLQotICAg ICAgICBDQVVUSU9VUwotICAgICAgICAgICAgICAgIFVzZSBjYXV0aW91cyBidXQgbm90IHBhcmFu b2lkIHNldHRpbmdzLiBGaWxlIHRyYW5zZmVycywgaWYKLSAgICAgICAgICAgICAgICB0aGV5IHdv cmssIHdpbGwgZ28gYXQgbWVkaXVtIHNwZWVkLiBJZiBub3QsIHRyeSAuIC4gLgotCi0gICAgICAg IFJPQlVTVAotICAgICAgICAgICAgICAgIFVzZSB0aGUgbW9zdCByb2J1c3QsIHJlc2lsaWVudCwg Y29uc2VydmF0aXZlLCBzYWZlLCBhbmQKLSAgICAgICAgICAgICAgICByZWxpYWJsZSBzZXR0aW5n cy4gRmlsZSB0cmFuc2ZlcnMgd2lsbCBhbG1vc3QgY2VydGFpbmx5Ci0gICAgICAgICAgICAgICAg d29yaywgYnV0IHRoZXkgd2lsbCBiZSBxdWl0ZSBzbG93IChvZiBjb3Vyc2UgdGhpcyBpcyBhCi0g ICAgICAgICAgICAgICAgY2xhc3NpYyB0cmFkZW9mZjsgUk9CVVNUIHdhcyBDLUtlcm1pdCdzIGRl ZmF1bHQgdHVuaW5nIGluCi0gICAgICAgICAgICAgICAgdmVyc2lvbnMgNi4wIGFuZCBlYXJsaWVy LCB3aGljaCBtYWRlIGV2ZXJ5Ym9keSB0aGluawotICAgICAgICAgICAgICAgIEtlcm1pdCBwcm90 b2NvbCB3YXMgc2xvdykuIElmIFJPQlVTVCBkb2Vzbid0IGRvIHRoZSB0cmljaywKLSAgICAgICAg ICAgICAgICB0cnkgYWdhaW4gd2l0aCBTRVQgUEFSSVRZIFNQQUNFIGZpcnN0IGluIGNhc2UgaXQn cyBub3QgYW4KLSAgICAgICAgICAgICAgICA4LWJpdCBjb25uZWN0aW9uLgotCi0gICAgICAgICAg T2J2aW91c2x5IHRoZSBzdWNjZXNzIGFuZCBwZXJmb3JtYW5jZSBvZiBhIGZpbGUgdHJhbnNmZXIg YWxzbwotICAgICAgICAgIGRlcGVuZHMgb24gQy1LZXJtaXQncyBmaWxlIHRyYW5zZmVyIHBhcnRu ZXIuIFVwLXRvLWRhdGUsIHJlYWwKLSAgICAgICAgICBbMTI4XUtlcm1pdCBQcm9qZWN0IHBhcnRu ZXJzIGFyZSByZWNvbW1lbmRlZCBiZWNhdXNlIHRoZXkKLSAgICAgICAgICBjb250YWluIHRoZSBi ZXN0IEtlcm1pdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbnMgYW5kIGJlY2F1c2UKLSAgICAgICAg ICBbMTI5XXdlIGNhbiBzdXBwb3J0IHRoZW0gaW4gY2FzZSBvZiB0cm91YmxlLgotCi0gICAgICAg ICAgSWYgeW91IHN0aWxsIGhhdmUgdHJvdWJsZSwgY29uc3VsdCBDaGFwdGVyIDEwIG9mIFsxMzBd VXNpbmcKLSAgICAgICAgICBDLUtlcm1pdCwgb3Igc2VuZCBlbWFpbCB0byBbMTMxXWtlcm1pdC1z dXBwb3J0QGNvbHVtYmlhLmVkdS4KLQotICAgQWR2YW5jZWQgS2VybWl0IEZpbGUtVHJhbnNmZXIg RmVhdHVyZXMKLSAgICAgICAgICBPYnZpb3VzbHkgdGhlcmUgaXMgYSBsb3QgbW9yZSB0byBLZXJt aXQgZmlsZSB0cmFuc2ZlciwgaW5jbHVkaW5nCi0gICAgICAgICAgYWxsIHNvcnRzIG9mIGludGVy YWN0aXZlIGNvbW1hbmRzLCBwcmVmZXJlbmNlcywgb3B0aW9ucywKLSAgICAgICAgICBsb2dnaW5n LCBkZWJ1Z2dpbmcsIHRyb3VibGVzaG9vdGluZywgYW5kIGFueXRoaW5nIGVsc2UgeW91IGNhbgot ICAgICAgICAgIGltYWdpbmUgYnV0IHRoYXQncyB3aGF0IHRoZSBbMTMyXW1hbnVhbCBhbmQgdXBk YXRlcyBhcmUgZm9yLgotICAgICAgICAgIEhlcmUgYXJlIGEgZmV3IHRvcGljcyB5b3UgY2FuIGV4 cGxvcmUgaWYgeW91J3JlIGludGVyZXN0ZWQgYnkKLSAgICAgICAgICBUeXBpbmcgSEVMUCBmb3Ig dGhlIGxpc3RlZCBjb21tYW5kczoKLQotICAgICAgICBMb2dnaW5nIHRyYW5zZmVyczoKLSAgICAg ICAgICAgICAgICBMT0cgVFJBTlNBQ1RJT05TIChIRUxQIExPRykKLQotICAgICAgICBBdXRvbWF0 aWMgcGVyLWZpbGUgdGV4dC9iaW5hcnkgbW9kZSBzd2l0Y2hpbmc6Ci0gICAgICAgICAgICAgICAg U0VUIFRSQU5TRkVSIE1PREUgeyBBVVRPTUFUSUMsIE1BTlVBTCB9IChIRUxQIFNFVAotICAgICAg ICAgICAgICAgIFRSQU5TRkVSKS4KLQotICAgICAgICBDcm9zcy1wbGF0Zm9ybSByZWN1cnNpdmUg ZGlyZWN0b3J5IHRyZWUgdHJhbnNmZXI6Ci0gICAgICAgICAgICAgICAgU0VORCAvUkVDVVJTSVZF LCBHRVQgL1JFQ1VSU0lWRSAoSEVMUCBTRU5ELCBIRUxQIEdFVCkuCi0KLSAgICAgICAgRmlsZSBj b2xsaXNpb24gb3B0aW9uczoKLSAgICAgICAgICAgICAgICBTRVQgRklMRSBDT0xMSVNJT04geyBP VkVSV1JJVEUsIEJBQ0tVUCwgRElTQ0FSRCwgLi4uIH0KLSAgICAgICAgICAgICAgICAoSEVMUCBT RVQgRklMRSkuCi0KLSAgICAgICAgVXBkYXRlIG1vZGUgKG9ubHkgdHJhbnNmZXIgZmlsZXMgdGhh dCBjaGFuZ2VkIHNpbmNlIGxhc3QgdGltZSk6Ci0gICAgICAgICAgICAgICAgU0VUIEZJTEUgQ09M TElTSU9OIFVQREFURSAoSEVMUCBTRVQgRklMRSkuCi0KLSAgICAgICAgRmlsZW5hbWUgc2VsZWN0 aW9uIHBhdHRlcm5zOgotICAgICAgICAgICAgICAgIChIRUxQIFdJTERDQVJEKS4KLQotICAgICAg ICBGbGV4aWJsZSBmaWxlIHNlbGVjdGlvbjoKLSAgICAgICAgICAgICAgICBTRU5EIChvciBHRVQp IC9CRUZPUkUgL0FGVEVSIC9MQVJHRVIgL1NNQUxMRVIgL1RZUEUKLSAgICAgICAgICAgICAgICAv RVhDRVBULCAuLi4KLQotICAgICAgICBDaGFyYWN0ZXItc2V0IGNvbnZlcnNpb246Ci0gICAgICAg ICAgICAgICAgU0VUIHsgRklMRSwgVFJBTlNGRVIgfSBDSEFSQUNURVItU0VULCBBU1NPQ0lBVEUs IC4uLgotCi0gICAgICAgIEZpbGUvUGF0aG5hbWUgY29udHJvbDoKLSAgICAgICAgICAgICAgICBT RVQgeyBTRU5ELCBSRUNFSVZFIH0gUEFUSE5BTUVTLCBTRVQgRklMRSBOQU1FUy4KLQotICAgICAg ICBBdG9taWMgZmlsZSBtb3ZlbWVudDoKLSAgICAgICAgICAgICAgICBTRU5EIChvciBHRVQpIC9E RUxFVEUgL1JFTkFNRSAvTU9WRS1UTwotCi0gICAgICAgIFRyYW5zZmVycmluZyB0by9mcm9tIHN0 YW5kYXJkIGkvbyBvZiBvdGhlciBjb21tYW5kczoKLSAgICAgICAgICAgICAgICBTRU5EIChvciBH RVQpIC9DT01NQU5ECi0KLSAgICAgICAgUmVjb3Zlcnkgb2YgaW50ZXJydXB0ZWQgdHJhbnNmZXIg ZnJvbSBwb2ludCBvZiBmYWlsdXJlOgotICAgICAgICAgICAgICAgIFJFU0VORCwgUkVHRVQgKEhF TFAgUkVTRU5ELCBIRUxQIFJFR0VUKS4KLQotICAgTm9uLUtlcm1pdCBGaWxlIFRyYW5zZmVyCi0g ICAgICAgICAgWW91IGNhbiBhbHNvIHVzZSBDLUtlcm1pdCB0byB0cmFuc2ZlciBmaWxlcyB3aXRo IEZUUCBvciBIVFRQCi0gICAgICAgICAgSW50ZXJuZXQgcHJvdG9jb2xzOyBbMTMzXXNlZSBiZWxv dy4KLQotICAgICAgICAgIE9uIGEgcmVndWxhciBzZXJpYWwgb3IgVGVsbmV0IGNvbm5lY3Rpb24g d2hlcmUgdGhlIG90aGVyCi0gICAgICAgICAgY29tcHV0ZXIgZG9lc24ndCBzdXBwb3J0IEtlcm1p dCBwcm90b2NvbCBhdCBhbGwsIHlvdSBoYXZlCi0gICAgICAgICAgc2V2ZXJhbCBvcHRpb25zLiBG b3IgZXhhbXBsZSwgaWYgeW91ciBkZXNrdG9wIGNvbW11bmljYXRpb25zCi0gICAgICAgICAgc29m dHdhcmUgc3VwcG9ydHMgWm1vZGVtLCB1c2UgInJ6IiBhbmQgInN6IiBvbiB0aGUgaG9zdCByYXRo ZXIKLSAgICAgICAgICB0aGFuIEtlcm1pdC4gQnV0IGlmIEtlcm1pdCBpcyB5b3VyIGRlc2t0b3Ag c29mdHdhcmUsIGFuZCB5b3UgYXJlCi0gICAgICAgICAgdXNpbmcgaXQgdG8gbWFrZSBjYWxscyBv ciBuZXR3b3JrIGNvbm5lY3Rpb25zIHRvIG90aGVyIGNvbXB1dGVycwotICAgICAgICAgIHRoYXQg ZG9uJ3Qgc3VwcG9ydCBLZXJtaXQgcHJvdG9jb2wgKG9yIHRoYXQgZG9uJ3QgaGF2ZSBhIGdvb2QK LSAgICAgICAgICBpbXBsZW1lbnRhdGlvbiBvZiBpdCksIHRoZW4gaWYgeW91ciBjb21wdXRlciBh bHNvIGhhcyBleHRlcm5hbAotICAgICAgICAgIFgsIFksIG9yIFptb2RlbSBwcm9ncmFtcyB0aGF0 IGFyZSByZWRpcmVjdGFibGUsIEtlcm1pdCBjYW4gdXNlCi0gICAgICAgICAgdGhlbSBhcyBleHRl cm5hbCBwcm90b2NvbHMuIEhFTFAgU0VUIFBST1RPQ09MIGZvciBkZXRhaWxzLgotCi0gICAgICAg ICAgWW91IGNhbiBhbHNvIGNhcHR1cmUgInJhdyIgZGF0YSBzdHJlYW1zIGZyb20gdGhlIG90aGVy IGNvbXB1dGVyCi0gICAgICAgICAgd2l0aCBMT0cgU0VTU0lPTiAoSEVMUCBMT0cgYW5kIEhFTFAg U0VUIFNFU1NJT04tTE9HIGZvcgotICAgICAgICAgIGRldGFpbHMpLCBhbmQgeW91IGNhbiB1cGxv YWQgZmlsZXMgd2l0aG91dCBhbnkgcHJvdG9jb2wgYXQgYWxsCi0gICAgICAgICAgd2l0aCBUUkFO U01JVCAoSEVMUCBUUkFOU01JVCwgSEVMUCBTRVQgVFJBTlNNSVQpLgotCi0gICBbMTM0XUtlcm1p dCBIb21lIFsxMzVdQy1LZXJtaXQgSG9tZSBbMTM2XUMtS2VybWl0IEZBUQotCi1LRVJNSVQgQ0xJ RU5UL1NFUlZFUiBDT05ORUNUSU9OUwotCi0gICBbMTM3XVRvcCBbMTM4XUNvbnRlbnRzIFsxMzld TmV4dCBbMTQwXVByZXZpb3VzCi0KLSAgIE9uIGFueSBraW5kIG9mIGNvbm5lY3Rpb24geW91IGNh biBtYWtlIHdpdGggS2VybWl0IC0tIHNlcmlhbCwgVENQL0lQLAotICAgWC4yNSwgZXRjIC0tIHlv dSBjYW4gc2V0IHVwIGEgY29udmVuaWVudCBjbGllbnQvc2VydmVyIHJlbGF0aW9uc2hpcAotICAg YmV0d2VlbiB5b3VyIEtlcm1pdCBjbGllbnQgKHRoZSBvbmUgdGhhdCBtYWRlIHRoZSBjb25uZWN0 aW9uKSBhbmQgdGhlCi0gICBLZXJtaXQgcHJvZ3JhbSBvbiB0aGUgZmFyIGVuZCBvZiB0aGUgY29u bmVjdGlvbiAodGhlIHJlbW90ZSBLZXJtaXQpIGJ5Ci0gICBwdXR0aW5nIHRoZSByZW1vdGUgS2Vy bWl0IGluIHNlcnZlciBtb2RlLiBUaGlzIGlzIG5vcm1hbGx5IGRvbmUgYnkKLSAgIGdpdmluZyBp dCBhIFNFUlZFUiBjb21tYW5kLCBvciBieSBzdGFydGluZyBpdCB3aXRoIHRoZSAteCBjb21tYW5k LWxpbmUKLSAgIG9wdGlvbi4gSW4gc29tZSBjYXNlcyAoWzE0MV1JbnRlcm5ldCBLZXJtaXQgU2Vy dmljZSwgU1NIIGNvbm5lY3Rpb25zIHRvCi0gICBhIEtlcm1pdCBzdWJzeXN0ZW0sIG9yIHNwZWNp YWxseSBjb25maWd1cmVkIGhvc3RzKSwgdGhlcmUgaXMgYWxyZWFkeSBhCi0gICBLZXJtaXQgc2Vy dmVyIHdhaXRpbmcgb24gdGhlIGZhciBlbmQuIEhlcmUgaXMgYSBxdWljayBzeW5vcHNpcyBvZiB0 aGUKLSAgIGNvbW1hbmRzIHlvdSBjYW4gZ2l2ZSB0byB0aGUgY2xpZW50IGZvciBpbnRlcmFjdGlu ZyB3aXRoIHRoZSBzZXJ2ZXI6Ci0KLSAgIFNFTkQgWyBzd2l0Y2hlcyBdIGZpbGVuYW1lCi0gICAg ICAgICAgU2VuZHMgdGhlIG5hbWVkIGZpbGUgdG8gdGhlIHNlcnZlci4gVGhlIGZpbGVuYW1lIGNh biBpbmNsdWRlCi0gICAgICAgICAgd2lsZGNhcmRzLiBMb3RzIG9mIHN3aXRjaGVzIGFyZSBhdmFp bGFibGUgZm9yIGZpbGUgc2VsZWN0aW9uLAotICAgICAgICAgIGV0Yy4gVHlwZSBIRUxQIFNFTkQg YXQgdGhlIGNsaWVudCBwcm9tcHQgZm9yIGRldGFpbHMuCi0KLSAgIEdFVCBbIHN3aXRjaGVzIF0g ZmlsZW5hbWUKLSAgICAgICAgICBBc2tzIHRoZSBzZXJ2ZXIgdG8gc2VuZCB0aGUgbmFtZWQgZmls ZS4gVGhlIGZpbGVuYW1lIGNhbiBpbmNsdWRlCi0gICAgICAgICAgd2lsZGNhcmRzLiBUeXBlIEhF TFAgR0VUIGF0IHRoZSBjbGllbnQgcHJvbXB0IGZvciBkZXRhaWxzLgotCi0gICBCWUUKLSAgICAg ICAgICBUZXJtaW5hdGVzIHRoZSBzZXJ2ZXIgYW5kIGNsb3NlcyB5b3VyIGNvbm5lY3Rpb24gdG8g aXQuCi0KLSAgIEZJTklTSAotICAgICAgICAgIFRlcm1pbmF0ZXMgdGhlIHNlcnZlci4gSWYgeW91 IHN0YXJ0ZWQgdGhlIHNlcnZlciB5b3Vyc2VsZiwgdGhpcwotICAgICAgICAgIGxlYXZlcyB0aGUg cmVtb3RlIGhvc3QgYXQgaXRzIHNoZWxsIHByb21wdC4gSWYgaXQgd2FzIGEKLSAgICAgICAgICBk ZWRpY2F0ZWQgc2VydmVyIChzdWNoIGFzIElLU0Qgb3IgYW4gU1NIIHN1YnN5c3RlbSksIEZJTklT SCBpcwotICAgICAgICAgIGVxdWl2YWxlbnQgdG8gQllFLgotCi0gICBTRVQgTE9DVVMgeyBMT0NB TCwgUkVNT1RFLCBBVVRPIH0KLSAgICAgICAgICAoQy1LZXJtaXQgOC4wLjIwMSBhbmQgbGF0ZXIs IEs5NSAxLjEuMjEgYW5kIGxhdGVyKSBUaGlzIHRlbGxzCi0gICAgICAgICAgdGhlIGNsaWVudCB3 aGV0aGVyIGZpbGUtbWFuYWdlbWVudCBjb21tYW5kcyBsaWtlIENELCBQV0QsCi0gICAgICAgICAg RElSRUNUT1JZLCBERUxFVEUsIE1LRElSLCBldGMsIHNob3VsZCBiZSBleGVjdXRlZCBsb2NhbGx5 IG9yIGJ5Ci0gICAgICAgICAgdGhlIHNlcnZlci4gSW4gdGhpcyB0eXBlIG9mIGNvbm5lY3Rpb24s IHRoZSBkZWZhdWx0IGlzIExPQ0FMLgotICAgICAgICAgIFVzZSBTRVQgTE9DVVMgUkVNT1RFIGlm IHlvdSB3YW50IEtlcm1pdCB0byBiZWhhdmUgbGlrZSBhbiBGVFAKLSAgICAgICAgICBjbGllbnQs IGluIHdoaWNoIGNhc2UgdGhlc2UgY29tbWFuZHMgYXJlIGV4ZWN1dGVkIHJlbW90ZWx5LCBhbmQK LSAgICAgICAgICB0aGVpciBsb2NhbCB2ZXJzaW9ucyBtdXN0IGhhdmUgYW4gTCBwcmVmaXg6IExD RCwgTFBXRCwKLSAgICAgICAgICBMRElSRUNUT1JZLCBldGMuIFdoZW4gTE9DVVMgaXMgTE9DQUws IHRoZW4gdGhlIHJlbW90ZSB2ZXJzaW9ucwotICAgICAgICAgIG11c3QgaGF2ZSBhbiBSIHByZWZp eDogUkNELCBSUFdELCBSRElSRUNUT1JZLCBldGMuIEhFTFAgU0VUCi0gICAgICAgICAgTE9DVVMg Zm9yIGRldGFpbHMuIFNIT1cgQ09NTUFORCB0byBzZWUgY3VycmVudCBsb2N1cy4KLQotICAgVGhl IGZvbGxvd2luZyBjb21tYW5kcyBhcmUgYWZmZWN0ZWQgYnkgU0VUIExPQ1VTOgotCi0gICBDRCwg TENELCBSQ0QKLSAgICAgICAgICBDaGFuZ2UgKHdvcmtpbmcsIGN1cnJlbnQpIGRpcmVjdG9yeS4g SEVMUCBDRCBmb3IgZGV0YWlscy4KLQotICAgQ0RVUCwgTENEVVAsIFJDRFVQCi0gICAgICAgICAg Q0Qgb25lIGxldmVsIHVwLgotCi0gICBESVJFQ1RPUlksIExESVJFQ1RPUlksIFJESVJFQ1RPUlkK LSAgICAgICAgICBQcm9kdWNlIGEgZGlyZWN0b3J5IGxpc3RpbmcuIE1hbnkgb3B0aW9ucyBhcmUg YXZhaWxhYmxlIGZvcgotICAgICAgICAgIGxvY2FsIGxpc3RpbmdzLiBIRUxQIERJUkVDVE9SWSBm b3IgZGV0YWlscy4KLQotICAgREVMRVRFLCBMREVMRVRFLCBSREVMRVRFCi0gICAgICAgICAgRGVs ZXRlcyBmaWxlcyBvciBkaXJlY3Rvcmllcy4gTWFueSBvcHRpb25zIGF2YWlsYWJsZSwgSEVMUAot ICAgICAgICAgIERFTEVURS4KLQotICAgUkVOQU1FLCBMUkVOQU1FLCBSUkVOQU1FCi0gICAgICAg ICAgUmVuYW1lcyBmaWxlcyBvciBkaXJlY3Rvcmllcy4gTWFueSBvcHRpb25zIGF2YWlsYWJsZSwg SEVMUAotICAgICAgICAgIFJFTkFNRS4KLQotICAgTUtESVIsIExNS0RJUiwgUk1LRElSCi0gICAg ICAgICAgQ3JlYXRlcyBhIGRpcmVjdG9yeS4gSEVMUCBNS0RJUi4KLQotICAgUk1ESVIsIExSTURJ UiwgUlJNRElSCi0gICAgICAgICAgUmVtb3ZlcyBhIGRpcmVjdG9yeS4gSEVMUCBSTURJUi4KLQot ICAgVGhlcmUgYXJlIGRvemVucyAtLSBtYXliZSBodW5kcmVkcyAtLSBvZiBvdGhlciBjb21tYW5k cywgZGVzY3JpYmVkIGluCi0gICB0aGUgYnVpbHQtaW4gaGVscCwgb24gdGhlIHdlYnNpdGUsIGFu ZC9vciBpbiB0aGUgcHVibGlzaGVkIG9yIG9ubGluZQotICAgbWFudWFscy4gQnV0IGV2ZW4gaWYg eW91IGRvbid0IGhhdmUgYWNjZXNzIHRvIGRvY3VtZW50YXRpb24sIHlvdSBjYW4KLSAgICJzZXQg bG9jdXMgcmVtb3RlIiBhbmQgdGhlbiB1c2UgcHJldHR5IG11Y2ggdGhlIHNhbWUgY29tbWFuZHMg eW91IHdvdWxkCi0gICB1c2Ugd2l0aCBhbnkgRlRQIGNsaWVudC4KLQotICAgWzE0Ml1LZXJtaXQg SG9tZSBbMTQzXUMtS2VybWl0IEhvbWUgWzE0NF1DLUtlcm1pdCBGQVEKLQotS0VSTUlUJ1MgQlVJ TFQtSU4gRlRQIEFORCBIVFRQIENMSUVOVFMKLQotICAgWzE0NV1Ub3AgWzE0Nl1Db250ZW50cyBb MTQ3XU5leHQgWzE0OF1QcmV2aW91cwotCi0gICBLZXJtaXQncyBGVFAgY2xpZW50IGlzIGxpa2Ug dGhlIHJlZ3VsYXIgVW5peCBGVFAgY2xpZW50IHRoYXQgeW91J3JlCi0gICB1c2VkIHRvLCBidXQg d2l0aCBzb21lIGRpZmZlcmVuY2VzOgotCi0gICAgICogSXQgaGFzIGxvdHMgbW9yZSBjb21tYW5k cyBhbmQgZmVhdHVyZXMuCi0gICAgICogWW91IGNhbiBoYXZlIGFuIEZUUCBzZXNzaW9uIGFuZCBh IHJlZ3VsYXIgS2VybWl0IHNlcmlhbCBvciBUZWxuZXQKLSAgICAgICBzZXNzaW9uIG9wZW4gYXQg dGhlIHNhbWUgdGltZS4KLSAgICAgKiBGVFAgc2Vzc2lvbnMgY2FuIGJlIGZ1bGx5IGF1dG9tYXRl ZC4KLQotICAgQnkgZGVmYXVsdCBLZXJtaXQncyBGVFAgY2xpZW50IHRyaWVzIGl0cyBiZXN0IHRv IHByZXNlbnQgdGhlIHNhbWUgdXNlcgotICAgaW50ZXJmYWNlIGFzIGEgcmVndWxhciBGVFAgY2xp ZW50OiBQVVQsIEdFVCwgRElSLCBDRCwgQllFLCBldGMsIHNob3VsZAotICAgd29yayB0aGUgc2Ft ZSwgZXZlbiB0aG91Z2ggc29tZSBvZiB0aGVzZSBjb21tYW5kcyBoYXZlIGRpZmZlcmVudAotICAg bWVhbmluZyBpbiBLZXJtaXQtdG8tS2VybWl0IGNvbm5lY3Rpb25zOyBmb3IgZXhhbXBsZSwgQ0Qs IERJUiwgUkVOQU1FLAotICAgZXRjLCBpbiBLZXJtaXQgYWN0IGxvY2FsbHksIHdoZXJlYXMgaW4g RlRQIHRoZXkgYXJlIGNvbW1hbmRzIGZvciB0aGUKLSAgIHNlcnZlci4gVGhpcyBtaWdodCBjYXVz ZSBzb21lIGNvbmZ1c2lvbiwgYnV0IGFzIGluIGFsbCB0aGluZ3MgS2VybWl0LAotICAgeW91IGhh dmUgdG90YWwgY29udHJvbDoKLQotICAgICAqIFRoZSBbMTQ5XVNFVCBMT0NVUyBjb21tYW5kIGxl dHMgeW91IHNwZWNpZnkgd2hlcmUgZmlsZSBtYW5hZ2VtZW50Ci0gICAgICAgY29tbWFuZHMgc2hv dWxkIGJlIGV4ZWN1dGVkIC0tIGxvY2FsbHkgb3IgcmVtb3RlbHkgLS0gZm9yIGFueSBraW5kCi0g ICAgICAgb2YgY29ubmVjdGlvbi4KLSAgICAgKiBBbnkgRlRQIGNvbW1hbmQgY2FuIGJlIHByZWZp eGVkIHdpdGggdGhlIHdvcmQgIkZUUCIgdG8gcmVtb3ZlIGFueQotICAgICAgIGFtYmlndWl0eS4K LQotICAgUGVuZGluZyBwdWJsaWNhdGlvbiBvZiB0aGUgbmV4dCBlZGl0aW9uIG9mIHRoZSBtYW51 YWwsIHRoZSBLZXJtaXQgRlRQCi0gICBjbGllbnQgaXMgdGhvcm91Z2hseSBkb2N1bWVudGVkIGF0 IHRoZSBLZXJtaXQgUHJvamVjdCB3ZWJzaXRlOgotCi0gIFsxNTBdaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2Z0cGNsaWVudC5odG1sCi0KLSAgIFlvdSBhbHNvIGNhbiB1c2UgSEVMUCBG VFAgYW5kIEhFTFAgU0VUIEZUUCB0byBnZXQgZGVzY3JpcHRpb25zIG9mCi0gICBLZXJtaXQncyBG VFAtcmVsYXRlZCBjb21tYW5kcy4KLQotICAgVGhlIEhUVFAgY2xpZW50IGlzIHNpbWlsYXIgdG8g dGhlIEZUUCBvbmUsIGV4Y2VwdCB5b3UgcHJlZml4IGVhY2gKLSAgIGNvbW1hbmQgd2l0aCBIVFRQ IGluc3RlYWQgb2YgRlRQOiBIVFRQIE9QRU4sIEhUVFAgR0VULCBIVFRQIFBVVCwgSFRUUAotICAg Q0xPU0UsIGV0Yy4gVHlwZSBIRUxQIEhUVFAgZm9yIGRldGFpbHMsIG9yIHZpc2l0IHRoZSB0byB2 aWV3IHRoZQotICAgWzE1MV1tYW51YWwgc3VwcGxlbWVudHMuIEhUVFAgY29ubmVjdGlvbnMgY2Fu IGJlIG9wZW4gYXQgdGhlIHNhbWUgdGltZQotICAgYXMgcmVndWxhciBzZXJpYWwgb3IgVGVsbmV0 IGNvbm5lY3Rpb25zIGFuZCBGVFAgY29ubmVjdGlvbnMuIFNvIEtlcm1pdAotICAgY2FuIG1hbmFn ZSB1cCB0byB0aHJlZSB0eXBlcyBjb25uZWN0aW9ucyBzaW11bHRhbmVvdXNseS4KLQotICAgWzE1 Ml1LZXJtaXQgSG9tZSBbMTUzXUMtS2VybWl0IEhvbWUgWzE1NF1DLUtlcm1pdCBGQVEgWzE1NV1G VFAgQ2xpZW50Ci0gICBbMTU2XUhUVFAgQ2xpZW50Ci0KLUlOVEVSTkVUIEtFUk1JVCBTRVJWSUNF Ci0KLSAgIFsxNTddVG9wIFsxNThdQ29udGVudHMgWzE1OV1OZXh0IFsxNjBdUHJldmlvdXMKLQot ICAgQy1LZXJtaXQgY2FuIGJlIGNvbmZpZ3VyZWQgYW5kIHJ1biBhcyBhbiBJbnRlcm5ldCBzZXJ2 aWNlIChjYWxsZWQKLSAgIElLU0QpLCBzaW1pbGFyIHRvIGFuIEZUUCBzZXJ2ZXIgKEZUUEQpIGV4 Y2VwdCB5b3UgY2FuIChidXQgbmVlZCBub3QpCi0gICBpbnRlcmFjdCB3aXRoIGl0IGRpcmVjdGx5 LCBwbHVzIGl0IGRvZXMgYSBsb3QgbW9yZSB0aGFuIGFuIEZUUCBzZXJ2ZXIKLSAgIGNhbiBkby4g VGhlIFRDUCBwb3J0IGZvciBJS1NEIGlzIDE2NDkuIEl0IHVzZXMgVGVsbmV0IHByb3RvY29sLgot ICAgQy1LZXJtaXQgY2FuIGJlIGFuIEludGVybmV0IEtlcm1pdCBTZXJ2ZXIsIG9yIGl0IGNhbiBi ZSBhIGNsaWVudCBvZiBhbgotICAgSUtTRC4gWW91IGNhbiBtYWtlIGNvbm5lY3Rpb25zIGZyb20g Qy1LZXJtaXQgdG8gYW4gSUtTRCB3aXRoIGFueSBvZiB0aGUKLSAgIGZvbGxvd2luZyBjb21tYW5k czoKLQotICB0ZWxuZXQgZm9vLmJhci5lZHUgMTY0OQotICB0ZWxuZXQgZm9vLmJhci5lZHUga2Vy bWl0ICAgOyBpZiAia2VybWl0IiBpcyBsaXN0ZWQgaW4gL2V0Yy9zZXJ2aWNlcwotICBpa3NkIGZv by5iYXIuZWR1Ci0KLSAgIFRoZSBJS1NEIGNvbW1hbmQgaXMgZXF1aXZhbGVudCB0byBhIFRFTE5F VCBjb21tYW5kIHNwZWNpZnlpbmcgcG9ydAotICAgMTY0OS4gRm9yIG1vcmUgaW5mb3JtYXRpb24g YWJvdXQgbWFraW5nIGFuZCB1c2luZyBjb25uZWN0aW9ucyB0byBhbgotICAgSUtTRCwgc2VlOgot Ci0gIFsxNjFdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2N1aWtzZC5odG1sCi0KLSAg IFlvdSBjYW4gcnVuIGFuIEludGVybmV0IEtlcm1pdCBTZXJ2aWNlIG9uIHlvdXIgb3duIGNvbXB1 dGVyIHRvbyAoaWYgeW91Ci0gICBhcmUgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yKS4gRm9yIGlu c3RydWN0aW9ucywgc2VlOgotCi0gIFsxNjJdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2lrc2QuaHRtbAotCi0gICBbMTYzXUtlcm1pdCBIb21lIFsxNjRdQy1LZXJtaXQgSG9tZSBbMTY1 XUMtS2VybWl0IEZBUQotCi1TRUNVUklUWQotCi0gICBbMTY2XVRvcCBbMTY3XUNvbnRlbnRzIFsx NjhdTmV4dCBbMTY5XVByZXZpb3VzCi0KLSAgIEFsbCBvZiBDLUtlcm1pdCdzIGJ1aWx0LWluIFRD UC9JUCBuZXR3b3JraW5nIG1ldGhvZHMgKFRlbG5ldCwgUmxvZ2luLAotICAgSUtTRCwgRlRQLCBh bmQgSFRUUCkgY2FuIGJlIHNlY3VyZWQgYnkgb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZwot ICAgSUVURi1hcHByb3ZlZCBtZXRob2RzOgotCi0gICAgICogTUlUIEtlcmJlcm9zIElWCi0gICAg ICogTUlUIEtlcmJlcm9zIFYKLSAgICAgKiBTU0wvVExTCi0gICAgICogU3RhbmZvcmQgU1JQCi0K LSAgIEZvciBjb21wbGV0ZSBpbnN0cnVjdGlvbnMgc2VlOgotCi0gIFsxNzBdaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L3NlY3VyaXR5Lmh0bWwKLQotICAgQW5kIGFzIG5vdGVkIHByZXZp b3VzbHksIHlvdSBjYW4gYWxzbyBtYWtlIFNTSCBjb25uZWN0aW9ucyB3aXRoCi0gICBDLUtlcm1p dCBpZiB5b3UgYWxyZWFkeSBoYXZlIGFuIFNTSCBjbGllbnQgaW5zdGFsbGVkLgotCi0gICBbMTcx XUtlcm1pdCBIb21lIFsxNzJdQy1LZXJtaXQgSG9tZSBbMTczXUMtS2VybWl0IEZBUQotCi1BTFRF Uk5BVElWRSBDT01NQU5ELUxJTkUgUEVSU09OQUxJVElFUwotCi0gICBbMTc0XVRvcCBbMTc1XUNv bnRlbnRzIFsxNzZdTmV4dCBbMTc3XVByZXZpb3VzCi0KLSAgIFdoZW4gaW52b2tlZCBhcyAia2Vy bWl0IiBvciBhbnkgb3RoZXIgbmFtZSBiZXNpZGVzIGFueSBvZiB0aGUgc3BlY2lhbAotICAgb25l cywgQy1LZXJtaXQgaGFzIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucyBkZXNjcmliZWQgYWJvdmUg aW4gdGhlCi0gICBbMTc4XU9QVElPTlMgc2VjdGlvbi4gSG93ZXZlciwgaWYgeW91IGludm9rZSBD LUtlcm1pdCB1c2luZyBhbnkgb2YgdGhlCi0gICBmb2xsb3dpbmcgbmFtZXM6Ci0KLSAgICAgdGVs bmV0ICBUZWxuZXQgY2xpZW50Ci0gICAgIGZ0cCAgICAgRlRQIGNsaWVudAotICAgICBodHRwICAg IEhUVFAgY2xpZW50Ci0gICAgIGh0dHBzICAgU2VjdXJlIEhUVFAgY2xpZW50Ci0KLSAgIEtlcm1p dCdzIGNvbW1hbmQtbGluZSBwZXJzb25hbGl0eSBjaGFuZ2VzIHRvIG1hdGNoLiBUaGlzIGNhbiBi ZSBkb25lCi0gICAoYW1vbmcgb3RoZXIgd2F5cykgd2l0aCBzeW1ib2xpYyBsaW5rcyAoc3ltbGlu a3MpLiBGb3IgZXhhbXBsZSwgaWYgeW91Ci0gICB3YW50IEMtS2VybWl0IHRvIGJlIHlvdXIgcmVn dWxhciBUZWxuZXQgY2xpZW50LCBvciB0aGUgVGVsbmV0IGhlbHBlciBvZgotICAgeW91ciBXZWIg YnJvd3NlciwgeW91IGNhbiBjcmVhdGUgYSBsaW5rIGxpa2UgdGhlIGZvbGxvd2luZyBpbiBhCi0g ICBkaXJlY3RvcnkgdGhhdCBsaWVzIGluIHlvdXIgUEFUSCBhaGVhZCBvZiB0aGUgcmVndWxhciB0 ZWxuZXQgcHJvZ3JhbToKLQotICBsbiAtcyAvdXNyL2xvY2FsL2Jpbi9rZXJtaXQgdGVsbmV0Ci0K LSAgIE5vdyB3aGVuIHlvdSBnaXZlIGEgInRlbG5ldCIgY29tbWFuZCwgeW91IGFyZSBpbnZva2lu ZyBLZXJtaXQgaW5zdGVhZCwKLSAgIGJ1dCB3aXRoIGl0cyBUZWxuZXQgY29tbWFuZC1saW5lIHBl cnNvbmFsaXR5IHNvLCBmb3IgZXhhbXBsZToKLQotICB0ZWxuZXQgeHl6Y29ycC5jb20KLQotICAg TWFrZXMgYSBUZWxuZXQgY29ubmVjdGlvbiB0byB4eXpjb3JwLmNvbSwgYW5kIEtlcm1pdCBleGl0 cwotICAgYXV0b21hdGljYWxseSB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZCAoanVzdCBs aWtlIHRoZSByZWd1bGFyCi0gICBUZWxuZXQgY2xpZW50KS4gVHlwZSAidGVsbmV0IC1oIiB0byBn ZXQgYSBsaXN0IG9mIEtlcm1pdCdzCi0gICBUZWxuZXQtcGVyc29uYWxpdHkgY29tbWFuZC1saW5l IG9wdGlvbnMsIHdoaWNoIGFyZSBpbnRlbmRlZCB0byBiZSBhcwotICAgY29tcGF0aWJsZSBhcyBw b3NzaWJsZSB3aXRoIHRoZSByZWd1bGFyIFRlbG5ldCBjbGllbnQuCi0KLSAgIFNpbWlsYXJseSBm b3IgRlRQOgotCi0gIGxuIC1zIC91c3IvbG9jYWwvYmluL2tlcm1pdCBmdHAKLQotICAgQW5kIG5v dyB0eXBlICJmdHAgLWgiIHRvIHNlZSBpdHMgY29tbWFuZC1saW5lIG9wdGlvbnMsIGFuZCB1c2Ug Y29tbWFuZAotICAgbGluZXMganVzdCBsaWtlIHlvdSB3b3VsZCBnaXZlIHlvdXIgcmVndWxhciBG VFAgY2xpZW50OgotCi0gIGZ0cCAtbiB4eXpjb3JwLmNvbQotCi0gICBidXQgd2l0aCBhZGRpdGlv bmFsIG9wdGlvbnMgYWxsb3dpbmcgYW4gZW50aXJlIHNlc3Npb24gdG8gYmUgc3BlY2lmaWVkCi0g ICBvbiB0aGUgY29tbWFuZCBsaW5lLCBhcyBleHBsYWluZWQgaW4gdGhlIEMtS2VybWl0IFsxNzld RlRQIGNsaWVudAotICAgZG9jdW1lbnRhdGlvbi4KLQotICAgQW5kIHNpbWlsYXJseSBmb3IgSFRU UDoKLQotICBsbiAtcyAvdXNyL2xvY2FsL2Jpbi9rZXJtaXQgaHR0cAotICAuL2h0dHAgLWgKLSAg Li9odHRwIHd3dy5jb2x1bWJpYS5lZHUgLWcga2VybWl0L2luZGV4Lmh0bWwKLQotICAgRmluYWxs eSwgaWYgS2VybWl0J3MgZmlyc3QgY29tbWFuZC1saW5lIG9wdGlvbiBpcyBhIFRlbG5ldCwgRlRQ LCBJS1NELAotICAgb3IgSFRUUCBVUkwsIEtlcm1pdCBhdXRvbWF0aWNhbGx5IG1ha2VzIHRoZSBh cHByb3ByaWF0ZSBraW5kIG9mCi0gICBjb25uZWN0aW9uIGFuZCwgaWYgaW5kaWNhdGVkIGJ5IHRo ZSBVUkwsIHRha2VzIHRoZSBkZXNpcmVkIGFjdGlvbjoKLQotICBrZXJtaXQgdGVsbmV0Onh5emNv cnAuY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgT3BlbnMgYSBUZWxuZXQgc2Vzc2lv bgotICBrZXJtaXQgdGVsbmV0Oi8vb2xnYUB4eXpjb3JwLmNvbSAgICAgICAgICAgICAgICAgICAg IDsgRGl0dG8gZm9yIHVzZXIgb2xnYQotICBrZXJtaXQgZnRwOi8vb2xnYUB4eXpjb3JwLmNvbS9w dWJsaWMvb29mYS56aXAgICAgICAgIDsgRG93bmxvYWRzIGEgZmlsZQotICBrZXJtaXQga2VybWl0 Oi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9SRUFELk1FIDsgRGl0dG8gZm9yIElLU0QK LSAga2VybWl0IGlrc2Q6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL1JFQUQuTUUgICA7 IChUaGlzIHdvcmtzIHRvbykKLSAga2VybWl0IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9pbmRleC5odG1sICAgICA7IEdyYWJzIGEgd2ViIHBhZ2UKLSAga2VybWl0IGh0dHBzOi8vd3d3 cy54eXpjb3JwLmNvbS9zZWNyZXQvcGxhbi5odG1sICAgICA7IEdyYWJzIGEgc2VjdXJlIHdlYiBw YWdlCi0KLSAgIFsxODBdS2VybWl0IEhvbWUgWzE4MV1DLUtlcm1pdCBIb21lIFsxODJdQy1LZXJt aXQgRkFRCi0KLUxJQ0VOU0UKLQotICAgWzE4M11Ub3AgWzE4NF1Db250ZW50cyBbMTg1XU5leHQg WzE4Nl1QcmV2aW91cwotCi0gICBPbiBvciBiZWZvcmUgMzAgSnVuZSAyMDExLCBiYXJyaW5nIHVu Zm9yZXNlZW4gY2lyY3Vtc3RhbmNlcywKLSAgIFsxODddQy1LZXJtaXQgOS4wIHdpbGwgYmUgcmVs ZWFzZWQgd2l0aCB0aGUgWzE4OF1SZXZpc2VkIDMtQ2xhdXNlIEJTRAotICAgTGljZW5zZS4gVGhp cyBpcyBhIGNlcnRpZmllZCBbMTg5XU9wZW4gU291cmNlIGxpY2Vuc2UsIGFuZCBpdCBtZWFucwot ICAgdGhhdCBDLUtlcm1pdCBubyBsb25nZXIgbmVlZHMgdG8gYmUgbGljZW5zZWQgZm9yIGNvbW1l cmNpYWwKLSAgIHJlZGlzdHJpYnV0aW9uLiBUZWNobmljYWwgc3VwcG9ydCBmb3IgS2VybWl0IHNv ZnR3YXJlIHdpbGwgbm90IGJlCi0gICBhdmFpbGFibGUgZnJvbSBDb2x1bWJpYSBVbml2ZXJzaXR5 IGFmdGVyIEp1bmUgMzB0aC4KLQotICAgWzE5MF1LZXJtaXQgSG9tZSBbMTkxXUMtS2VybWl0IEhv bWUgWzE5Ml1DLUtlcm1pdCBGQVEKLQotT1RIRVIgVE9QSUNTCi0KLSAgIFsxOTNdVG9wIFsxOTRd Q29udGVudHMgWzE5NV1OZXh0IFsxOTZdUHJldmlvdXMKLQotICAgVGhlcmUncyB3YXkgbW9yZSB0 byBDLUtlcm1pdCB0aGFuIHdlJ3ZlIHRvdWNoZWQgb24gaGVyZSAtLQotICAgdHJvdWJsZXNob290 aW5nLCBjdXN0b21pemF0aW9uLCBjaGFyYWN0ZXIgc2V0cywgZGlhbGluZyBkaXJlY3RvcmllcywK LSAgIHNlbmRpbmcgcGFnZXMsIHNjcmlwdCB3cml0aW5nLCBhbmQgb24gYW5kIG9uLCBhbGwgb2Yg d2hpY2ggYXJlIGNvdmVyZWQKLSAgIGluIHRoZSBtYW51YWwgYW5kIHVwZGF0ZXMgYW5kIHN1cHBs ZW1lbnRzLiBGb3IgdGhlIG1vc3QgdXAtdG8tZGF0ZQotICAgaW5mb3JtYXRpb24gb24gZG9jdW1l bnRhdGlvbiAob3IgdXBkYXRlZCBkb2N1bWVudGF0aW9uIGl0c2VsZikgdmlzaXQKLSAgIHRoZSBL ZXJtaXQgUHJvamVjdCB3ZWJzaXRlOgotCi0gIFsxOTddaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0LwotCi0gICBUaGVyZSB5b3Ugd2lsbCBhbHNvIGZpbmQgWzE5OF1LZXJtaXQgc29mdHdh cmUgcGFja2FnZXMgZm9yIG90aGVyCi0gICBwbGF0Zm9ybXM6IGRpZmZlcmVudCBVbml4IHZhcmll dGllcywgV2luZG93cywgRE9TLCBWTVMsIElCTSBtYWluZnJhbWVzLAotICAgYW5kIG1hbnkgb3Ro ZXJzOiAyMCsgeWVhcnMnIHdvcnRoLgotCi0gICBbMTk5XUtlcm1pdCBIb21lIFsyMDBdQy1LZXJt aXQgSG9tZSBbMjAxXUMtS2VybWl0IEZBUQotCi1ET0NVTUVOVEFUSU9OIEFORCBVUERBVEVTCi0K LSAgIFsyMDJdVG9wIFsyMDNdQ29udGVudHMgWzIwNF1OZXh0IFsyMDVdUHJldmlvdXMKLQotICAg VGhlIG1hbnVhbCBmb3IgQy1LZXJtaXQgaXM6Ci0KLSAgICAxLiBGcmFuayBkYSBDcnV6IGFuZCBD aHJpc3RpbmUgTS4gR2lhbm9uZSwgWzIwNl1Vc2luZyBDLUtlcm1pdCwgU2Vjb25kCi0gICAgICAg RWRpdGlvbiwgRGlnaXRhbCBQcmVzcyAvIEJ1dHRlcndvcnRoLUhlaW5lbWFubiwgV29idXJuLCBN QSwgMTk5NywKLSAgICAgICA2MjIgcGFnZXMsIElTQk4gMS01NTU1OC0xNjQtMS4gVGhpcyBpcyBh IHByaW50ZWQgYm9vaywgbm93IGFsc28KLSAgICAgICBhdmFpbGFibGUgYXMgYSBbMjA3XUtpbmRs ZSBFLUJvb2suIEl0IGNvdmVycyBDLUtlcm1pdCA2LjAuCi0gICAgMi4gVGhlIEMtS2VybWl0IDcu MCBTdXBwbGVtZW50OgotICAgICAgIFsyMDhdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sCi0gICAgMy4gVGhlIEMtS2VybWl0IDguMCBTdXBwbGVtZW50OgotICAg ICAgIFsyMDldaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sCi0g ICAgNC4gVGhlIEMtS2VybWl0IDkuMCBTdXBwbGVtZW50OgotICAgICAgIFsyMTBdaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ5MC5odG1sCi0KLSAgIFRoZSBDLUtlcm1pdCBo b21lIHBhZ2UgaXMgaGVyZToKLQotICBbMjExXWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0Lmh0bWwKLQotICAgVmlzaXQgdGhpcyBwYWdlIHRvIGxlYXJuIGFib3V0IG5ldyB2 ZXJzaW9ucywgQmV0YSB0ZXN0cywgYW5kIG90aGVyCi0gICBuZXdzOyB0byByZWFkIGNhc2Ugc3R1 ZGllcyBhbmQgdHV0b3JpYWxzOyB0byBkb3dubG9hZCBzb3VyY2UgY29kZSwKLSAgIGluc3RhbGwg cGFja2FnZXMsIGFuZCBbMjEyXXByZWJ1aWx0IGJpbmFyaWVzIGZvciBtYW55IHBsYXRmb3Jtcy4g QWxzbwotICAgdmlzaXQ6Ci0KLSAgIFsyMTNdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L3NjcmlwdGxpYi5odG1sCi0gICAgICAgICAgVGhlIEtlcm1pdCBzY3JpcHQgbGlicmFyeSBhbmQg dHV0b3JpYWwKLQotICAgWzIxNF1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvbmV3ZmFx Lmh0bWwKLSAgICAgICAgICBUaGUgS2VybWl0IEZBUSAoRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlv bnMgYWJvdXQgS2VybWl0KQotCi0gICBbMjE1XWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2ZhcS5odG1sCi0gICAgICAgICAgVGhlIEMtS2VybWl0IEZBUSAoRnJlcXVlbnRseSBBc2tl ZCBRdWVzdGlvbnMgYWJvdXQgQy1LZXJtaXQpCi0KLSAgIFsyMTZdaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L3NlY3VyaXR5Lmh0bWwKLSAgICAgICAgICBUaGUgS2VybWl0IHNlY3VyaXR5 IHJlZmVyZW5jZS4KLQotICAgWzIxN11odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvdGVs bmV0Lmh0bWwKLSAgICAgICAgICBDLUtlcm1pdCBUZWxuZXQgY2xpZW50IGRvY3VtZW50YXRpb24u Ci0KLSAgIFsyMThdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3N0dWRpZXMuaHRtbAot ICAgICAgICAgIENhc2Ugc3R1ZGllcy4KLQotICAgWzIxOV1odHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tjYndyLmh0bWwKLSAgICAgICAgICBHZW5lcmFsIEMtS2VybWl0IEhpbnRzIGFu ZCBUaXBzLgotCi0gICBbMjIwXWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3Iu aHRtbAotICAgICAgICAgIFVuaXggQy1LZXJtaXQgSGludHMgYW5kIFRpcHMuCi0KLSAgIFsyMjFd aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdmJ3ci5odG1sCi0gICAgICAgICAgVk1T IEMtS2VybWl0IEhpbnRzIGFuZCBUaXBzLgotCi0gICBbMjIyXWh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3VpbnMuaHRtbAotICAgICAgICAgIFVuaXggQy1LZXJtaXQgSW5zdGFsbGF0 aW9uIEluc3RydWN0aW9ucwotCi0gICBbMjIzXWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3ZpbnMuaHRtbAotICAgICAgICAgIFZNUyBDLUtlcm1pdCBJbnN0YWxsYXRpb24gSW5zdHJ1 Y3Rpb25zCi0KLSAgIFsyMjRdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3N1cHBvcnQu aHRtbAotICAgICAgICAgIFRlY2huaWNhbCBzdXBwb3J0LgotCi0gICBbMjI1XWh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9rOTV0dXRvcmlhbC5odG1sCi0gICAgICAgICAgS2VybWl0IDk1 IHR1dG9yaWFsICh0aGlzIGRvY3VtZW50KS4KLQotICAgWzIyNl1jb21wLnByb3RvY29scy5rZXJt aXQubWlzYwotICAgICAgICAgIFRoZSBLZXJtaXQgbmV3c2dyb3VwICh1bm1vZGVyYXRlZCkuCi0K LSAgIFsyMjddS2VybWl0IEhvbWUgWzIyOF1DLUtlcm1pdCBIb21lIFsyMjldQy1LZXJtaXQgRkFR Ci0KLUZJTEVTCi0KLSAgIFsyMzBdVG9wIFsyMzFdQ29udGVudHMgWzIzMl1OZXh0IFsyMzNdUHJl dmlvdXMKLQotICAgICAgICAgIFsyMzRdVGhlIFJldmlzZWQgMy1DbGF1c2UgTGljZW5zZQotICAg ICAgICAgIEMtS2VybWl0IGxpY2Vuc2UuCi0KLSAgIFsyMzVdfi8ua2VybXJjCi0gICAgICAgICAg SW5pdGlhbGl6YXRpb24gZmlsZS4KLQotICAgWzIzNl1+Ly5teWtlcm1yYwotICAgICAgICAgIEN1 c3RvbWl6YXRpb24gZmlsZS4KLQotICAgfi8ua2RkCi0gICAgICAgICAgS2VybWl0IGRpYWxpbmcg ZGlyZWN0b3J5IChzZWUgbWFudWFsKS4KLQotICAgfi8ua25kCi0gICAgICAgICAgS2VybWl0IG5l dHdvcmsgZGlyZWN0b3J5IChzZWUgbWFudWFsKS4KLQotICAgfi8ua3NkCi0gICAgICAgICAgS2Vy bWl0IHNlcnZpY2VzIGRpcmVjdG9yeSAoc2VlIG1hbnVhbCkuCi0KLSAgIFsyMzddY2t1aW5zLmh0 bWwKLSAgICAgICAgICBJbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIGZvciBVbml4LgotCi0gICBb MjM4XWNrY2J3ci5odG1sCi0gICAgICAgICAgR2VuZXJhbCBDLUtlcm1pdCBidWdzLCBoaW50cywg dGlwcy4KLQotICAgWzIzOV1ja3Vid3IuaHRtbAotICAgICAgICAgIFVuaXgtc3BlY2lmaWMgQy1L ZXJtaXQgYnVncywgaGludHMsIHRpcHMuCi0KLSAgIFsyNDBdY2tjcGxtLmh0bWwKLSAgICAgICAg ICBDLUtlcm1pdCBwcm9ncmFtIGxvZ2ljIG1hbnVhbC4KLQotICAgWzI0MV1ja2NjZmcuaHRtbAot ICAgICAgICAgIEMtS2VybWl0IGNvbXBpbGUtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuCi0K LSAgIHNzaAotICAgICAgICAgIChpbiB5b3VyIFBBVEgpIFNTSCBjb25uZWN0aW9uIGhlbHBlci4K LQotICAgcnosIHN6LCBldGMuCi0gICAgICAgICAgKGluIHlvdXIgUEFUSCkgZXh0ZXJuYWwgcHJv dG9jb2xzIGZvciBYWVptb2RlbS4KLQotICAgL3Zhci9zcG9vbC9sb2NrcyAob3Igd2hhdGV2ZXIp Ci0gICAgICAgICAgVVVDUCBsb2NrZmlsZSBmb3IgZGlhbGluZyBvdXQgKHNlZSBbMjQyXWluc3Rh bGxhdGlvbgotICAgICAgICAgIGluc3RydWN0aW9ucykuCi0KLSAgIFsyNDNdS2VybWl0IEhvbWUg WzI0NF1DLUtlcm1pdCBIb21lIFsyNDVdQy1LZXJtaXQgRkFRCi0KLUFVVEhPUlMKLQotICAgWzI0 Nl1Ub3AgWzI0N11Db250ZW50cyBbMjQ4XVByZXZpb3VzCi0KLSAgICAgRnJhbmsgZGEgQ3J1eiBh bmQgSmVmZnJleSBFIEFsdG1hbgotICAgICBUaGUgS2VybWl0IFByb2plY3QgLSBDb2x1bWJpYSBV bml2ZXJpdHkKLSAgICAgNjEyIFdlc3QgMTE1dGggU3RyZWV0Ci0gICAgIE5ldyBZb3JrIE5ZIDEw MDI1LTc3OTkKLSAgICAgVVNBCi0KLSAgIDE5ODUtcHJlc2VudCwgd2l0aCBjb250cmlidXRpb25z IGZyb20gaHVuZHJlZHMgb2Ygb3RoZXJzIGFsbCBvdmVyIHRoZQotICAgd29ybGQuCi0gICAgIF9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwotCi0KLSAgICBDLUtlcm1pdCA5LjAgVW5peCBNYW51YWwgUGFnZSBhbmQgVHV0b3Jp YWwgLyBbMjQ5XWtlcm1pdEBjb2x1bWJpYS5lZHUKLSAgICAvIDEgSnVseSAyMDExCi0KLVJlZmVy ZW5jZXMKLQotICAgMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUvCi0gICAyLiBtYWlsdG86a2Vy bWl0QGNvbHVtYmlhLmVkdQotICAgMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2lu ZGV4Lmh0bWwKLSAgIDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9rOTUuaHRtbAot ICAgNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotICAgNi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nrc2NyaXB0cy5odG1sCi0gICA3LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY3VycmVudC5odG1sCi0gICA4LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvd2hhdHNuZXcuaHRtbAotICAgOS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZmFxLmh0bWwKLSAgMTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9zdXBwb3J0Lmh0bWwKLSAgMTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC8KLSAgMTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1LwotICAxMy4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLnBkZgotICAxNC4gZnRwOi8va2VybWl0LmNvbHVtYmlh LmVkdS9rZXJtaXQvdGVzdC90ZXh0L2NrdWtlci5ucgotICAxNS4gaHR0cDovL3d3dy5hbWF6b24u Y29tL2dwL3Byb2R1Y3QvMTU1NTU4MTY0MT9pZT1VVEY4JnRhZz1hbGVpZG1vcmVsZG9tLTIwJmxp bmtDb2RlPWFzMiZjYW1wPTE3ODkmY3JlYXRpdmU9OTMyNSZjcmVhdGl2ZUFTSU49MTU1NTU4MTY0 MQotICAxNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjZGVz Y3JpcHRpb24KLSAgMTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5o dG1sI3N5bm9wc2lzCi0gIDE4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0 b3IuaHRtbCNvcHRpb25zCi0gIDE5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 dHV0b3IuaHRtbCNjb21tYW5kcwotICAyMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdXR1dG9yLmh0bWwjaW5pdGZpbGUKLSAgMjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3V0dXRvci5odG1sI21vZGVzCi0gIDIyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1dHV0b3IuaHRtbCNjb25uZWN0aW9ucwotICAyMy4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjdHJhbnNmZXIKLSAgMjQuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3NlcnZlcgotICAyNS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjZnRwCi0gIDI2LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNpa3NkCi0gIDI3LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNzZWN1cml0eQotICAyOC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjcGVyc29uYWUKLSAgMjkuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2xpY2Vuc2UKLSAgMzAuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI290aGVyCi0gIDMxLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNkb2N1bWVudGF0aW9u Ci0gIDMyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNmaWxl cwotICAzMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjYXV0 aG9ycwotICAzNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwj dG9wCi0gIDM1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNj b250ZW50cwotICAzNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0 bWwjc3lub3BzaXMKLSAgMzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 Lmh0bWwKLSAgMzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC8KLSAgMzkuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1LwotICA0MC4gZnRwOi8vZnRwLmlzaS5lZHUvaW4tbm90ZXMvcmZj MjgzOS50eHQKLSAgNDEuIGZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL3JmYzI4NDAudHh0Ci0g IDQyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNkb2N1bWVu dGF0aW9uCi0gIDQzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvCi0gIDQ0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvCi0gIDQ1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gIDQ2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tmYXEuaHRtbAotICA0Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1 dG9yLmh0bWwjdG9wCi0gIDQ4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0 b3IuaHRtbCNjb250ZW50cwotICA0OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dXR1dG9yLmh0bWwjb3B0aW9ucwotICA1MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdXR1dG9yLmh0bWwjc3lub3BzaXMKLSAgNTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3V0dXRvci5odG1sI2tlcmJhbmcKLSAgNTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3V0dXRvci5odG1sI3BlcnNvbmFlCi0gIDUzLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNrZXJiYW5nCi0gIDU0LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNpbml0ZmlsZQotICA1NS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjaW5pdGZpbGUKLSAgNTYuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3BlcnNvbmFlCi0gIDU3LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNvcHRpb25zCi0gIDU4LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNjb21tYW5kcwotICA1 OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0LwotICA2MC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotICA2MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZmFxLmh0bWwKLSAgNjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3V0dXRvci5odG1sI3RvcAotICA2My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdXR1dG9yLmh0bWwjY29udGVudHMKLSAgNjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3V0dXRvci5odG1sI2NvbW1hbmRzCi0gIDY1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNkZXNjcmlwdGlvbgotICA2Ni4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjY29tbWFuZHMKLSAgNjcuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3BlcnNvbmFlCi0gIDY4LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNwZXJzb25hZQotICA2OS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjaWtzZAotICA3MC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjdHJhbnNmZXIKLSAgNzEu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3RvcAotICA3Mi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjY29udGVudHMKLSAg NzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2luaXRmaWxl Ci0gIDc0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNvcHRp b25zCi0gIDc1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNr ZXJiYW5nCi0gIDc2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRt bCNjbWRsaXN0Ci0gIDc3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3Iu aHRtbCNkb2N1bWVudGF0aW9uCi0gIDc4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1dHV0b3IuaHRtbCNpbml0ZmlsZQotICA3OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdXR1dG9yLmh0bWwjZG9jdW1lbnRhdGlvbgotICA4MC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2Nrc2NyaXB0cy5odG1sCi0gIDgxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNkb2N1bWVudGF0aW9uCi0gIDgyLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvCi0gIDgzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdC5odG1sCi0gIDg0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tmYXEu aHRtbAotICA4NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwj dG9wCi0gIDg2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNj b250ZW50cwotICA4Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0 bWwjbW9kZXMKLSAgODguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5o dG1sI2NvbW1hbmRzCi0gIDg5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvCi0gIDkw LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gIDkxLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tmYXEuaHRtbAotICA5Mi4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjdG9wCi0gIDkzLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNjb250ZW50cwotICA5NC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjY29ubmVjdGlvbnMKLSAgOTUuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2luaXRmaWxlCi0gIDk2 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tmYXEuaHRtbCN0ZXJtCi0gIDk3LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvCi0gIDk4LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gIDk5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tmYXEuaHRtbAotIDEwMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dXR1dG9yLmh0bWwjdG9wCi0gMTAxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 dHV0b3IuaHRtbCNjb250ZW50cwotIDEwMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdXR1dG9yLmh0bWwjdHJhbnNmZXIKLSAxMDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3V0dXRvci5odG1sI21vZGVzCi0gMTA0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1dHV0b3IuaHRtbCNpa3NkCi0gMTA1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2FibGUuaHRtbAotIDEwNi4gZnRwOi8vZnRwLmlzaS5lZHUvaW4tbm90ZXMvcmZjMjIx Ny50eHQKLSAxMDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jYWJsZS5odG1sCi0g MTA4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNmdHAKLSAx MDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC8KLSAxMTAuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAxMTEuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2ZhcS5odG1sCi0gMTEyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1dHV0b3IuaHRtbCN0b3AKLSAxMTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3V0dXRvci5odG1sI2NvbnRlbnRzCi0gMTE0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1dHV0b3IuaHRtbCNzZXJ2ZXIKLSAxMTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3V0dXRvci5odG1sI2Nvbm5lY3Rpb25zCi0gMTE2LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNkb3dubG9hZAotIDExNy4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjdXBsb2FkCi0gMTE4LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNvbGRmYXNoaW9uZWQKLSAxMTkuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3Ryb3VibGUKLSAxMjAu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2FkdmFuY2VkCi0g MTIxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNub25rZXJt aXQKLSAxMjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9rZXJtaXQuaHRtbCNub3Rz bG93Ci0gMTIzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0g MTI0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvazk1Lmh0bWwKLSAxMjUuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9rOTUuaHRtbAotIDEyNi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDEyNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L21za2VybWl0Lmh0bWwKLSAxMjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC8KLSAxMjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zdXBwb3J0Lmh0bWwK LSAxMzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja21hbnVhbC5odG1sCi0gMTMx LiBtYWlsdG86a2VybWl0LXN1cHBvcnRAY29sdW1iaWEuZWR1Ci0gMTMyLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNkb2N1bWVudGF0aW9uCi0gMTMzLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNmdHAKLSAxMzQuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC8KLSAxMzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0Lmh0bWwKLSAxMzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2ZhcS5odG1sCi0gMTM3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0 b3IuaHRtbCN0b3AKLSAxMzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRv ci5odG1sI2NvbnRlbnRzCi0gMTM5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 dHV0b3IuaHRtbCNmdHAKLSAxNDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0 dXRvci5odG1sI3RyYW5zZmVyCi0gMTQxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1dHV0b3IuaHRtbCNpa3NkCi0gMTQyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Ci0gMTQzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gMTQ0 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tmYXEuaHRtbAotIDE0NS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjdG9wCi0gMTQ2LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNjb250ZW50cwotIDE0Ny4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjaWtzZAotIDE0OC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjdHJhbnNmZXIKLSAxNDku IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3NlcnZlcgotIDE1 MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Z0cGNsaWVudC5odG1sCi0gMTUxLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNkb2N1bWVudGF0aW9u Ci0gMTUyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvCi0gMTUzLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0gMTU0LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tmYXEuaHRtbAotIDE1NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQzLmh0bWwjeDMKLSAxNTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0My5odG1sI3gyLjIKLSAxNTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3V0dXRvci5odG1sI3RvcAotIDE1OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdXR1dG9yLmh0bWwjY29udGVudHMKLSAxNTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3V0dXRvci5odG1sI3NlY3VyaXR5Ci0gMTYwLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNmdHAKLSAxNjEuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9jdWlrc2QuaHRtbAotIDE2Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2lrc2QuaHRtbAotIDE2My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0LwotIDE2 NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDE2NS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZmFxLmh0bWwKLSAxNjYuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3RvcAotIDE2Ny4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjY29udGVudHMKLSAxNjguIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3BlcnNvbmFlCi0gMTY5LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNpa3NkCi0gMTcwLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2VjdXJpdHkuaHRtbAotIDE3MS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0LwotIDE3Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQuaHRtbAotIDE3My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZmFxLmh0bWwKLSAxNzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5o dG1sI3RvcAotIDE3NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0 bWwjY29udGVudHMKLSAxNzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRv ci5odG1sI2xpY2Vuc2UKLSAxNzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0 dXRvci5odG1sI2lrc2QKLSAxNzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0 dXRvci5odG1sI29wdGlvbnMKLSAxNzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0My5odG1sI3gzLjEuMgotIDE4MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 LwotIDE4MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAotIDE4 Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZmFxLmh0bWwKLSAxODMuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3RvcAotIDE4NC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjY29udGVudHMKLSAxODUuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI290aGVyCi0gMTg2LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNwZXJzb25hZQotIDE4 Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrOTAuaHRtbAotIDE4OC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2N1LWJzZC1saWNlbnNlLmh0bWwKLSAxODkuIGh0dHA6 Ly93d3cub3BlbnNvdXJjZS5vcmcvCi0gMTkwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvCi0gMTkxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCi0g MTkyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tmYXEuaHRtbAotIDE5My4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjdG9wCi0gMTk0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNjb250ZW50cwotIDE5NS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjZG9jdW1lbnRhdGlv bgotIDE5Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjbGlj ZW5zZQotIDE5Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0LwotIDE5OC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2hvd3RvZ2V0Lmh0bWwKLSAxOTkuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC8KLSAyMDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0Lmh0bWwKLSAyMDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Zh cS5odG1sCi0gMjAyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRt bCN0b3AKLSAyMDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1s I2NvbnRlbnRzCi0gMjA0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3Iu aHRtbCNmaWxlcwotIDIwNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9y Lmh0bWwjb3RoZXIKLSAyMDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja21hbnVh bC5odG1sCi0gMjA3LiBodHRwOi8vd3d3LmFtYXpvbi5jb20vZ3AvcHJvZHVjdC9CMDAyQUNQRjlN P2llPVVURjgmdGFnPWFsZWlkbW9yZWxkb20tMjAmbGlua0NvZGU9YXMyJmNhbXA9MTc4OSZjcmVh dGl2ZT0zOTA5NTcmY3JlYXRpdmVBU0lOPUIwMDJBQ1BGOU0KLSAyMDguIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbAotIDIwOS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sCi0gMjEwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwKLSAyMTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0Lmh0bWwKLSAyMTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j azgwYmluYXJpZXMuaHRtbAotIDIxMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3Nj cmlwdGxpYi5odG1sCi0gMjE0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvbmV3ZmFx Lmh0bWwKLSAyMTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2ZhcS5odG1sCi0g MjE2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2VjdXJpdHkuaHRtbAotIDIxNy4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3RlbG5ldC5odG1sCi0gMjE4LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc3R1ZGllcy5odG1sCi0gMjE5LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwKLSAyMjAuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbAotIDIyMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdmJ3ci5odG1sCi0gMjIyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 aW5zLmh0bWwKLSAyMjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3ZpbnMuaHRt bAotIDIyNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3N1cHBvcnQuaHRtbAotIDIy NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2s5NXR1dG9yaWFsLmh0bWwKLSAyMjYu IG5ld3M6Y29tcC5wcm90b2NvbHMua2VybWl0Lm1pc2MKLSAyMjcuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC8KLSAyMjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0Lmh0bWwKLSAyMjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2ZhcS5odG1s Ci0gMjMwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCN0b3AK LSAyMzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2NvbnRl bnRzCi0gMjMyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNh dXRob3JzCi0gMjMzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRt bCNkb2N1bWVudGF0aW9uCi0gMjM0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY3Ut YnNkLWxpY2Vuc2UuaHRtbAotIDIzNS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQv Yy1rZXJtaXQvY2tlcm1pdC5pbmkKLSAyMzYuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2Vy bWl0L2Mta2VybWl0L2NrZXJtb2QuaW5pCi0gMjM3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1aW5zLmh0bWwKLSAyMzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2Nid3IuaHRtbAotIDIzOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sCi0gMjQwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwKLSAy NDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbAotIDI0Mi4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sCi0gMjQzLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvCi0gMjQ0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdC5odG1sCi0gMjQ1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tm YXEuaHRtbAotIDI0Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0 bWwjdG9wCi0gMjQ3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRt bCNjb250ZW50cwotIDI0OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9y Lmh0bWwjZmlsZXMKLSAyNDkuIG1haWx0bzprZXJtaXRAY29sdW1iaWEuZWR1CgpkaWZmIC0tZ2l0 IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1czIuYyBiL2NrZXJt aXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXMyLmMKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IGRiMGRmZTkuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1 aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1czIuYworKysgL2Rldi9udWxsCkBAIC0xLDE0NDkxICsw LDAgQEAKLSNpZmRlZiBTU0hURVNUCi0jZGVmaW5lIFNTSEJVSUxUSU4KLSNlbmRpZiAvKiBTU0hU RVNUICovCi0KLS8qICBDIEsgVSBVIFMgMiAgLS0gIFVzZXIgaW50ZXJmYWNlIHN0cmluZ3MgJiBo ZWxwIHRleHQgbW9kdWxlIGZvciBDLUtlcm1pdCAgKi8KLQotLyoKLSAgQXV0aG9yczoKLSAgICBG cmFuayBkYSBDcnV6IDxmZGNAY29sdW1iaWEuZWR1PiwKLSAgICAgIFRoZSBLZXJtaXQgUHJvamVj dCwgQ29sdW1iaWEgVW5pdmVyc2l0eSwgTmV3IFlvcmsgQ2l0eQotICAgIEplZmZyZXkgRSBBbHRt YW4gPGphbHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20+Ci0gICAgICBTZWN1cmUgRW5kcG9pbnRz IEluYy4sIE5ldyBZb3JrIENpdHkKLQotICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMTEsCi0gICAg VHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4K LSAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBm aWxlIG9yIHRoZQotICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9y IGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgotCi0gIFRoaXMgbW9kdWxlIGNvbnRhaW5zIEhF TFAgY29tbWFuZCBhbmQgb3RoZXIgbG9uZyB0ZXh0IHN0cmluZ3MuCi0KLSAgSU1QT1JUQU5UOiBD aGFyYWN0ZXIgc3RyaW5nIGNvbnN0YW50cyBsb25nZXIgdGhhbiBhYm91dCAyNTAgYXJlIG5vdCBw b3J0YWJsZS4KLSAgTG9uZ2VyIHN0cmluZ3Mgc2hvdWxkIGJlIGJyb2tlbiB1cCBpbnRvIGFycmF5 cyBvZiBzdHJpbmdzIGFuZCBhY2Nlc3NlZCB3aXRoCi0gIGhtc2dhKCkgcmF0aGVyIHRoYW4gaG1z ZygpLiAgKFRoaXMgc3RhdGVtZW50IHdhcyB0cnVlIGluIHRoZSAxOTgwcyBhbmQKLSAgcHJvYmFi bHkgaXMgbm90IGEgYmlnIGNvbmNlcm4gaW4gdGhlIDIxc3QgQ2VudHVyeSwgYnV0IHlvdSBuZXZl ciBrbm93OwotICB0aGVyZSBzdGlsbCBtaWdodCBleGlzdCBzb21lIDE2LWJpdCBwbGF0Zm9ybXMg YW5kIEMgY29tcGlsZXJzIHRoYXQgaGF2ZQotICByZXN0cmljdGlvbnMgbGlrZSB0aGlzLgotKi8K LSNpbmNsdWRlICJja2NzeW0uaCIKLSNpbmNsdWRlICJja2NkZWIuaCIKLSNpbmNsdWRlICJja2Nu ZXQuaCIKLSNpbmNsdWRlICJja2Nhc2MuaCIKLSNpbmNsdWRlICJja2NrZXIuaCIKLSNpbmNsdWRl ICJja3V1c3IuaCIKLSNpbmNsdWRlICJja2N4bGEuaCIKLSNpZmRlZiBPUzIKLSNpZmRlZiBOVAot I2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNlbHNlIC8qIG5vdCBOVCAqLwotI2RlZmluZSBJTkNMX0tC RAotI2lmZGVmIE9TMk1PVVNFCi0jZGVmaW5lIElOQ0xfTU9VCi0jZW5kaWYgLyogT1MyTU9VU0Ug Ki8KLSNkZWZpbmUgSU5DTF9ET1NNSVNDCi0jZGVmaW5lIElOQ0xfRE9TREVWSUNFUwotI2luY2x1 ZGUgPG9zMi5oPiAgICAgICAgICAgICAgICAvKiBUaGlzIHB1bGxzIGluIGEgd2hvbGUgbG9hZCBv ZiBzdHVmZiAqLwotI3VuZGVmIENPTU1FTlQKLSNlbmRpZiAvKiBOVCAqLwotI2luY2x1ZGUgImNr b2Nvbi5oIgotI2luY2x1ZGUgImNrb2t2Yi5oIgotI2luY2x1ZGUgImNrb2tleS5oIgotI2VuZGlm IC8qIE9TMiAqLwotCi1leHRlcm4gY2hhciAqIGNrX2NyeWVhcjsJCS8qIEZvciBjb3B5cmlnaHQg bm90aWNlICovCi0KLWV4dGVybiB4eF9zdHJwIHh4c3RyaW5nOwotZXh0ZXJuIGNoYXIgKiBjY250 YWJbXTsKLS8qCi0gIGhscHRvayBjb250YWlucyB0aGUgc3RyaW5nIGZvciB3aGljaCB0aGUgdXNl ciByZXF1ZXN0ZWQgaGVscC4gIFRoaXMgaXMKLSAgdXNlZnVsIGZvciBkaXN0aW5ndWlzaGluZyBz eW5vbnltcywgaW4gY2FzZSBkaWZmZXJlbnQgaGVscCB0ZXh0IGlzIG5lZWRlZAotICBkZXBlbmRp bmcgb24gd2hpY2ggc3lub255bSB3YXMgZ2l2ZW4uCi0qLwotZXh0ZXJuIGNoYXIgKiBobHB0b2s7 Ci0KLSNpZm5kZWYgTk9JS1NECi0gICAgZXh0ZXJuIGludCBpbnNlcnZlcjsKLSNlbmRpZiAvKiBJ S1NEICovCi0KLSNpZm5kZWYgTk9JQ1AKLWV4dGVybiBpbnQgY21mbGdzOwotCi0jaWZkZWYgRENN REJVRgotZXh0ZXJuIGNoYXIgKmNtZGJ1ZiwgKmF0bWJ1ZjsKLSNlbHNlCi1leHRlcm4gY2hhciBj bWRidWZbXSwgYXRtYnVmW107Ci0jZW5kaWYgLyogRENNREJVRiAqLwotI2VuZGlmIC8qIE5PSUNQ ICovCi0KLWV4dGVybiBjaGFyICp4YXJnMDsKLWV4dGVybiBpbnQgbnJtdCwgbnBybSwgZGZsb2Ms IGxvY2FsLCBwYXJpdHksIGVzY2FwZTsKLWV4dGVybiBpbnQgdHVybiwgZmxvdzsKLWV4dGVybiBp bnQgYmluYXJ5LCBxdWlldCwga2VlcDsKLWV4dGVybiBpbnQgc3VjY2VzcywgeGFza21vcmU7Ci0j aWZkZWYgT1MyCi1leHRlcm4gaW50IHR0X3Jvd3NbXSwgdHRfY29sc1tdOwotI2Vsc2UgLyogT1My ICovCi1leHRlcm4gaW50IHR0X3Jvd3MsIHR0X2NvbHM7Ci0jZW5kaWYgLyogT1MyICovCi1leHRl cm4gaW50IGNtZF9yb3dzLCBjbWRfY29sczsKLQotZXh0ZXJuIGxvbmcgc3BlZWQ7Ci1leHRlcm4g Y2hhciAqZGZ0dHksICp2ZXJzaW8sICpja3hzeXM7Ci0jaWZuZGVmIE5PSEVMUAotZXh0ZXJuIGNo YXIgKmhlbHBmaWxlOwotI2VuZGlmIC8qIE5PSEVMUCAqLwotZXh0ZXJuIHN0cnVjdCBrZXl0YWIg cHJtdGFiW107Ci0jaWZuZGVmIE5PWEZFUgotZXh0ZXJuIHN0cnVjdCBrZXl0YWIgcmVtY21kW107 Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYgTk9JQ1AKLQotLyogIEludGVyYWN0aXZl IGhlbHAgc3RyaW5ncyAgKi8KLQotLyogVG9wLWxldmVsIEhFTFAgdGV4dC4gIElNUE9SVEFOVDog QWxzbyBzZWUgdG9waGxwaVtdIGZvciBJS1NELiAqLwotCi1zdGF0aWMgY2hhciAqdG9waGxwW10g PSB7Ci0iVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcg WW9yay5cbiIsCi0KLSNpZm5kZWYgTk9IRUxQCi0iICBUeXBlIEVYSVQgICAgdG8gZXhpdC4iLAot I2lmZGVmIE9TMgotIiAgVHlwZSBJTlRSTyAgIGZvciBhIGJyaWVmIGludHJvZHVjdGlvbiB0byB0 aGUgS2VybWl0IENvbW1hbmQgc2NyZWVuLiIsCi0iICBUeXBlIExJQ0VOU0UgdG8gc2VlIHRoZSBL ZXJtaXQgOTUgbGljZW5zZS4iLAotI2Vsc2UKLSIgIFR5cGUgSU5UUk8gICBmb3IgYSBicmllZiBp bnRyb2R1Y3Rpb24gdG8gQy1LZXJtaXQuIiwKLSIgIFR5cGUgTElDRU5TRSB0byBzZWUgdGhlIEMt S2VybWl0IGxpY2Vuc2UuIiwKLSNlbmRpZiAvKiBPUzIgKi8KLSIgIFR5cGUgSEVMUCAgICBmb2xs b3dlZCBieSBhIGNvbW1hbmQgbmFtZSBmb3IgaGVscCBhYm91dCBhIHNwZWNpZmljIGNvbW1hbmQu IiwKLSNpZm5kZWYgTk9QVVNICi0jaWZkZWYgVU5JWAotIiAgVHlwZSBNQU5VQUwgIHRvIGFjY2Vz cyB0aGUgQy1LZXJtaXQgbWFudWFsIHBhZ2UuIiwKLSNlbHNlCi0jaWZkZWYgVk1TCi0iICBUeXBl IE1BTlVBTCAgdG8gYWNjZXNzIHRoZSBDLUtlcm1pdCBoZWxwIHRvcGljLiIsCi0jZWxzZQotI2lm ZGVmIE9TMgotIiAgVHlwZSBNQU5VQUwgIHRvIGFjY2VzcyB0aGUgSzk1IG1hbnVhbC4iLAotI2Vs c2UKLSIgIFR5cGUgTUFOVUFMICB0byBhY2Nlc3MgdGhlIEMtS2VybWl0IG1hbnVhbC4iLAotI2Vu ZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRp ZiAvKiBOT1BVU0ggKi8KLSIgIFR5cGUgTkVXUyAgICBmb3IgbmV3cyBhYm91dCBuZXcgZmVhdHVy ZXMuIiwKLSIgIFR5cGUgU1VQUE9SVCB0byBsZWFybiBob3cgdG8gZ2V0IHRlY2huaWNhbCBzdXBw b3J0LiIsCi0iICBQcmVzcyA/ICAgICAgKHF1ZXN0aW9uIG1hcmspIGF0IHRoZSBwcm9tcHQsIG9y IGFueXdoZXJlIHdpdGhpbiBhIGNvbW1hbmQsIiwKLSIgICAgICAgICAgICAgICBmb3IgYSBtZW51 IChjb250ZXh0LXNlbnNpdGl2ZSBoZWxwLCBtZW51IG9uIGRlbWFuZCkuIiwKLSNlbHNlCi0iUHJl c3MgPyBmb3IgYSBsaXN0IG9mIGNvbW1hbmRzOyBzZWUgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWls ZWQgZGVzY3JpcHRpb25zLiIsCi0jZW5kaWYgLyogTk9IRUxQICovCi0KLSNpZm5kZWYgTk9DTURM Ci0jaWZuZGVmIE5PSEVMUAotIiAiLAotIiAgVHlwZSBIRUxQIE9QVElPTlMgZm9yIGhlbHAgd2l0 aCBjb21tYW5kLWxpbmUgb3B0aW9ucy4iLAotI2VuZGlmIC8qIE5PSEVMUCAqLwotI2VuZGlmIC8q IE5PQ01ETCAqLwotIiAiLAotI2lmbmRlZiBPUzIKLSNpZmRlZiBNQUMKLSJEb2N1bWVudGF0aW9u IGZvciBDb21tYW5kIFdpbmRvdzogXCJVc2luZyBDLUtlcm1pdFwiIGJ5IEZyYW5rIGRhIENydXog YW5kIiwKLSJDaHJpc3RpbmUgTS4gR2lhbm9uZSwgRGlnaXRhbCBQcmVzcywgMTk5NywgSVNCTjog MS01NTU1OC0xNjQtMSIsCi0jZWxzZQotIkRPQ1VNRU5UQVRJT046IFwiVXNpbmcgQy1LZXJtaXRc IiBieSBGcmFuayBkYSBDcnV6IGFuZCBDaHJpc3RpbmUgTS4gR2lhbm9uZSwiLAotIjJuZCBFZGl0 aW9uLCBEaWdpdGFsIFByZXNzIC8gQnV0dGVyd29ydGgtSGVpbmVtYW5uIDE5OTcsIElTQk4gMS01 NTU1OC0xNjQtMSwiLAotInBsdXMgc3VwcGxlbWVudHMgYXQgaHR0cDovL2tlcm1pdC5jb2x1bWJp YS5lZHUvY2tlcm1pdC5odG1sI2RvYy4iLAotI2VuZGlmIC8qIE1BQyAqLwotI2VuZGlmIC8qIE9T MiAqLwotI2lmZGVmIE1BQwotIiAiLAotIkFsc28gc2VlIHRoZSBNYWMgS2VybWl0IERvYyBhbmQg QndyIGZpbGVzIG9uIHRoZSBNYWMgS2VybWl0IGRpc2tldHRlLlxuIiwKLSNlbHNlCi0jaWZkZWYg SFBVWDEwCi0iICIsCi0iU2VlIHRoZSBmaWxlcyBpbiAvdXNyL3NoYXJlL2xpYi9rZXJtaXQvIGZv ciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLiIsCi0jZW5kaWYgLyogSFBVWDEwICovCi0jZW5kaWYg LyogTUFDICovCi0iIgotfTsKLQotI2lmbmRlZiBOT0lLU0QKLXN0YXRpYyBjaGFyICp0b3BobHBp W10gPSB7ICAgICAgICAgICAgICAvKiBUb3AtbGV2ZWwgaGVscCBmb3IgSUtTRCAqLwotCi0iVHJ1 c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay5cbiIs Ci0KLSNpZm5kZWYgTk9IRUxQCi0iICBUeXBlIElOVFJPICAgZm9yIGEgYnJpZWYgaW50cm9kdWN0 aW9uIHRvIEtlcm1pdCBjb21tYW5kcy4iLAotIiAgVHlwZSBWRVJTSU9OIGZvciB2ZXJzaW9uIGFu ZCBjb3B5cmlnaHQgaW5mb3JtYXRpb24uIiwKLSIgIFR5cGUgSEVMUCAgICBmb2xsb3dlZCBieSBh IGNvbW1hbmQgbmFtZSBmb3IgaGVscCBhYm91dCBhIHNwZWNpZmljIGNvbW1hbmQuIiwKLSIgIFR5 cGUgU1VQUE9SVCB0byBsZWFybiBob3cgdG8gZ2V0IHRlY2huaWNhbCBzdXBwb3J0LiIsCi0iICBU eXBlIExPR09VVCAgKG9yIEVYSVQpIHRvIGxvZyBvdXQuIiwKLSIgIFByZXNzID8gICAgICAocXVl c3Rpb24gbWFyaykgYXQgdGhlIHByb21wdCwgb3IgYW55d2hlcmUgd2l0aGluIGEgY29tbWFuZCwi LAotIiAgICAgICAgICAgICAgIGZvciBhIG1lbnUgKGNvbnRleHQtc2Vuc2l0aXZlIGhlbHAsIG1l bnUgb24gZGVtYW5kKS4iLAotI2Vsc2UKLSJQcmVzcyA/IGZvciBhIGxpc3Qgb2YgY29tbWFuZHM7 IHNlZSBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxlZCBkZXNjcmlwdGlvbnMuIiwKLSNlbmRpZiAv KiBOT0hFTFAgKi8KLSIgIiwKLSJET0NVTUVOVEFUSU9OOiBcIlVzaW5nIEMtS2VybWl0XCIgYnkg RnJhbmsgZGEgQ3J1eiBhbmQgQ2hyaXN0aW5lIE0uIEdpYW5vbmUsIiwKLSIybmQgRWRpdGlvbiwg RGlnaXRhbCBQcmVzcyAoMTk5NyksIElTQk4gMS01NTU1OC0xNjQtMS4gIE1vcmUgaW5mbyBhdCB0 aGUiLAotIktlcm1pdCBQcm9qZWN0IHdlYnNpdGUsIGh0dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1 Ly4iLAotIiIKLX07Ci0jZW5kaWYgLyogTk9JS1NEICovCi0KLSNpZm5kZWYgTk9IRUxQCi1jaGFy ICpuZXdzdHh0W10gPSB7Ci0jaWZkZWYgT1MyCi0iV2VsY29tZSB0byBLZXJtaXQgOTUgMy54Lngu ICBNYWpvciBuZXcgZmVhdHVyZXMgc2luY2UgMi4xLjMgaW5jbHVkZToiLAotI2Vsc2UKLSJXZWxj b21lIHRvIEMtS2VybWl0IDkuMC4zMDAuICBOZXcgZmVhdHVyZXMgc2luY2UgOC4wLjIxMSBpbmNs dWRlOiIsCi0jZW5kaWYgLyogT1MyICovCi0iIC4gT3BlbiBTb3VyY2UgU2ltcGxpZmllZCAzLUNs YXVzZSBCU0QgTGljZW5zZSIsCi0iIC4gRnVsbCA2NC1iaXQgbWVtb3J5IG1vZGVsIG9uIHBsYXRm b3JtcyB0aGF0IHN1cHBvcnQgaXQiLAotIiAuIExhcmdlIGZpbGUgc3VwcG9ydCAoNjQtYml0IGZp bGUgc2l6ZSkgb24gbW9zdCBwbGF0Zm9ybXMiLAotIiAuIExvbmcgaW50ZWdlciB2YXJpYWJsZXMg YW5kIGNvbnN0YW50cyBpbiBjb21tYW5kcyBhbmQgc2NyaXB0cyIsCi0iIC4gQmlnZ2VyIG1heGlt dW0gY29tbWFuZCBhbmQgbWFjcm8gbGVuZ3RocyIsCi0iIC4gQmlnZ2VyIGZpbGVuYW1lIGV4cGFu c2lvbiBzcGFjZSIsCi0iIC4gTmV3IHN1cGVyLWZsZXhpYmxlIFJFTkFNRSBjb21tYW5kIiwKLSIg LiBOZXcgQ09QWSBhbmQgRElSRUNUT1JZIGNvbW1hbmQgb3B0aW9ucyIsCi0iIC4gTmV3IFRPVUNI IGNvbW1hbmQiLAotIiAuIFJhdyBTU0wvVExTIGNvbm5lY3Rpb25zIGZvciBjb25uZWN0aW5nIHRv IFBPUDMgYW5kIHNpbWlsYXIgc2VydmljZXMiLAotIiAuIEF0IHByb21wdCwgQ3RybC1LIHJlY2Fs bHMgbW9zdCByZWNlbnQgZmlsZW5hbWUiLAotIiAuIFNjcmlwdGluZyBhbmQgcGVyZm9ybWFuY2Ug aW1wcm92ZW1lbnRzIGFuZCBidWcgZml4ZXMiLAotIiAiLAotIkRvY3VtZW50YXRpb246IiwKLSIg MS4gaHR0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUvdXNpbmdja2VybWl0Lmh0bWwiLAotIiAgICBc IlVzaW5nIEMtS2VybWl0XCIsIHNlY29uZCBlZGl0aW9uICgxOTk3KSwgY3VycmVudCB3aXRoIEMt S2VybWl0IDYuMC4iLAotIiAiLAotIiAyLiBodHRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9ja2Vy bWl0NzAuaHRtbCIsCi0iICAgIHdoaWNoIGRvY3VtZW50cyB0aGUgbmV3IGZlYXR1cmVzIG9mIEMt S2VybWl0IDcuMC4iLAotIiAiLAotIiAzLiBodHRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9ja2Vy bWl0ODAuaHRtbCIsCi0iICAgIHdoaWNoIGRvY3VtZW50cyB0aGUgbmV3IGZlYXR1cmVzIG9mIEMt S2VybWl0IDguMC4iLAotIiAiLAotIiA0LiBodHRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9ja2Vy bWl0OTAuaHRtbCIsCi0iICAgIHdoaWNoIGRvY3VtZW50cyB0aGUgbmV3IGZlYXR1cmVzIG9mIEMt S2VybWl0IDkuMC4iLAotIiAiLAotIklmIHRoZSByZWxlYXNlIGRhdGUgc2hvd24gYnkgdGhlIFZF UlNJT04gY29tbWFuZCBpcyBsb25nIHBhc3QsIGJlIHN1cmUgdG8iLAotImNoZWNrIHdpdGggdGhl IEtlcm1pdCB3ZWJzaXRlIHRvIHNlZSBpZiB0aGVyZSBoYXZlIGJlZW4gdXBkYXRlczoiLAotIiAi LAotI2lmZGVmIE9TMgotIiAgaHR0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUvazk1Lmh0bWwgICAg IChLZXJtaXQgOTUgaG9tZSBwYWdlKSIsCi0jZWxzZQotIiAgaHR0cDovL2tlcm1pdC5jb2x1bWJp YS5lZHUvY2tlcm1pdC5odG1sIChDLUtlcm1pdCBob21lIHBhZ2UpIiwKLSNlbmRpZgkvKiBPUzIg Ki8KLSIgIGh0dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1LyAgICAgICAgICAgICAoS2VybWl0IFBy b2plY3QgaG9tZSBwYWdlKSIsCi0iIgotfTsKLSNlbmRpZiAvKiBOT0hFTFAgKi8KLQotI2lmbmRl ZiBOT0hFTFAKLWNoYXIgKmludHJvdHh0W10gPSB7Ci0jaWZkZWYgT1MyCi0iV2VsY29tZSB0byBL LTk1LCBLZXJtaXQgY29tbXVuaWNhdGlvbnMgc29mdHdhcmUgZm9yOiIsCi0jZWxzZQotI2lmZGVm IFVOSVgKLSNpZmRlZiBIUFVYCi0iV2VsY29tZSB0byBIUC1VWCBDLUtlcm1pdCBjb21tdW5pY2F0 aW9ucyBzb2Z0d2FyZSBmb3I6IiwKLSNlbHNlCi0iV2VsY29tZSB0byBVTklYIEMtS2VybWl0IGNv bW11bmljYXRpb25zIHNvZnR3YXJlIGZvcjoiLAotI2VuZGlmIC8qIEhQVVggKi8KLSNlbHNlCi0j aWZkZWYgVk1TCi0iV2VsY29tZSB0byBWTVMgQy1LZXJtaXQgY29tbXVuaWNhdGlvbnMgc29mdHdh cmUgZm9yOiIsCi0jZWxzZQotI2lmZGVmIFZPUwotIldlbGNvbWUgdG8gVk9TIEMtS2VybWl0IGNv bW11bmljYXRpb25zIHNvZnR3YXJlIGZvcjoiLAotI2Vsc2UKLSNpZmRlZiBNQUMKLSJXZWxjb21l IHRvIE1hYyBLZXJtaXQgY29tbXVuaWNhdGlvbnMgc29mdHdhcmUgZm9yOiIsCi0jZWxzZQotIldl bGNvbWUgdG8gQy1LZXJtaXQgY29tbXVuaWNhdGlvbnMgc29mdHdhcmUgZm9yOiIsCi0jZW5kaWYg LyogTUFDICovCi0jZW5kaWYgLyogVk9TICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyog VU5JWCAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2lmbmRlZiBOT1hGRVIKLSIgLiBFcnJvci1mcmVl IGFuZCBlZmZpY2llbnQgZmlsZSB0cmFuc2ZlciIsCi0jZW5kaWYgLyogTk9YRkVSICovCi0jaWZu ZGVmIE5PTE9DQUwKLSNpZmRlZiBPUzIKLSIgLiBWVDMyMC8yMjAvMTAyLzEwMC81MiwgQU5TSSwg V3lzZSwgTGludXgsIFRlbGV2aWRlbywgYW5kIG90aGVyIGVtdWxhdGlvbnMiLAotI2Vsc2UKLSNp ZmRlZiBNQUMKLSIgLiBWVDIyMCB0ZXJtaW5hbCBlbXVsYXRpb24iLAotI2Vsc2UKLSIgLiBUZXJt aW5hbCBjb25uZWN0aW9uIiwKLSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNl bmRpZiAvKiBOT0xPQ0FMICovCi0jaWZuZGVmIE5PU1BMCi0iIC4gU2NyaXB0IHByb2dyYW1taW5n IiwKLSNlbmRpZiAvKiBOT1NQTCAqLwotI2lmbmRlZiBOT0lDUwotIiAuIEludGVybmF0aW9uYWwg Y2hhcmFjdGVyIHNldCBjb252ZXJzaW9uIiwKLSNlbmRpZiAvKiBOT0lDUyAqLwotI2lmbmRlZiBO T0RJQUwKLSNpZm5kZWYgTk9TUEwKLSIgLiBOdW1lcmljIGFuZCBhbHBoYW51bWVyaWMgcGFnaW5n IiwKLSNlbmRpZiAvKiBOT1NQTCAqLwotI2VuZGlmIC8qIE5PRElBTCAqLwotCi0jaWZuZGVmIE5P TE9DQUwKLSIgIiwKLSJTdXBwb3J0aW5nOiIsCi0iIC4gU2VyaWFsIGNvbm5lY3Rpb25zLCBkaXJl Y3Qgb3IgZGlhbGVkLiIsCi0jaWZuZGVmIE5PRElBTAotIiAuIEF1dG9tYXRpYyBtb2RlbSBkaWFs aW5nIiwKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLSNpZmRlZiBUQ1BTT0NLRVQKLSIgLiBUQ1AvSVAg bmV0d29yayBjb25uZWN0aW9uczoiLAotI2lmZGVmIFROQ09ERQotIiAgIC0gVGVsbmV0IHNlc3Np b25zIiwKLSNlbmRpZiAvKiBUTkNPREUgKi8KLSNpZmRlZiBTU0hCVUlMVElOCi0iICAgLSBTU0gg djEgYW5kIHYyIGNvbm5lY3Rpb25zIiwKLSNlbHNlCi0jaWZkZWYgQU5ZU1NICi0iICAgLSBTU0gg Y29ubmVjdGlvbnMgdmlhIGV4dGVybmFsIGFnZW50IiwKLSNlbmRpZiAvKiBBTllTU0ggKi8KLSNl bmRpZiAvKiBTU0hCVUlMVElOICovCi0jaWZkZWYgUkxPR0NPREUKLSIgICAtIFJsb2dpbiBzZXNz aW9ucyIsCi0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNpZmRlZiBORVdGVFAKLSIgICAtIEZUUCBz ZXNzaW9ucyIsCi0jZW5kaWYgLyogTkVXRlRQICovCi0jaWZkZWYgQ0tIVFRQCi0iICAgLSBIVFRQ IDEuMSBzZXNzaW9ucyIsCi0jZW5kaWYgLyogQ0tIVFRQICovCi0jaWZkZWYgSUtTRAotIiAgIC0g SW50ZXJuZXQgS2VybWl0IFNlcnZpY2UiLAotI2VuZGlmIC8qIElLU0QgKi8KLSNlbmRpZiAvKiBU Q1BTT0NLRVQgKi8KLSNpZmRlZiBBTllYMjUKLSIgLiBYLjI1IG5ldHdvcmsgY29ubmVjdGlvbnMi LAotI2VuZGlmIC8qIEFOWVgyNSAqLwotI2lmZGVmIE9TMgotI2lmZGVmIERFQ05FVAotIiAuIERF Q25ldC9QQVRIV09SS1MgTEFUIEV0aGVybmV0IGNvbm5lY3Rpb25zIiwKLSNlbmRpZiAvKiBERUNO RVQgKi8KLSNpZmRlZiBTVVBFUkxBVAotIiAuIE1lcmlkaWFuIFRlY2hub2xvZ2llcycgU3VwZXJM QVQgY29ubmVjdGlvbnMiLAotI2VuZGlmIC8qIFNVUEVSTEFUICovCi0jaWZkZWYgTlBJUEUKLSIg LiBOYW1lZC1waXBlIGNvbm5lY3Rpb25zIiwKLSNlbmRpZiAvKiBOUElQRSAqLwotI2lmZGVmIENL X05FVEJJT1MKLSIgLiBORVRCSU9TIGNvbm5lY3Rpb25zIiwKLSNlbmRpZiAvKiBDS19ORVRCSU9T ICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0iICIsCi0iV2hp bGUgdHlwaW5nIGNvbW1hbmRzLCB5b3UgbWF5IHVzZSB0aGUgZm9sbG93aW5nIHNwZWNpYWwgY2hh cmFjdGVyczoiLAotIiAuIERFTCwgUlVCT1VULCBCQUNLU1BBQ0UsIENUUkwtSDogRGVsZXRlIHRo ZSBtb3N0IHJlY2VudCBjaGFyYWN0ZXIgdHlwZWQuIiwKLSIgLiBDVFJMLVc6ICAgICAgRGVsZXRl IHRoZSBtb3N0IHJlY2VudCB3b3JkIHR5cGVkLiIsCi0iIC4gQ1RSTC1VOiAgICAgIERlbGV0ZSB0 aGUgY3VycmVudCBsaW5lLiIsCi0iIC4gQ1RSTC1SOiAgICAgIFJlZGlzcGxheSB0aGUgY3VycmVu dCBsaW5lLiIsCi0KLSNpZmRlZiBDS19SRUNBTEwKLSNpZmRlZiBPUzIKLSIgLiBVcGFycm93OiAg ICAgQ29tbWFuZCByZWNhbGwgLSBnbyBiYWNrd2FyZHMgaW4gY29tbWFuZCByZWNhbGwgYnVmZmVy LiIsCi0iIC4gRG93bmFycm93OiAgIENvbW1hbmQgcmVjYWxsIC0gZ28gZm9yd2FyZCBpbiBjb21t YW5kIHJlY2FsbCBidWZmZXIuIiwKLSNpZm5kZWYgTk9JS1NECi0iICAgKE5vdGU6IEFycm93IGtl eXMgY2FuIGJlIHVzZWQgb25seSBvbiB0aGUgUEMncyBwaHlzaWNhbCBrZXlib2FyZC4pIiwKLSNl bmRpZiAvKiBOT0lLU0QgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSIgLiBDVFJMLVA6ICAgICAgQ29t bWFuZCByZWNhbGwgLSBnbyBiYWNrd2FyZHMgaW4gY29tbWFuZCByZWNhbGwgYnVmZmVyLiIsCi0i IC4gQ1RSTC1COiAgICAgIENvbW1hbmQgcmVjYWxsIC0gc2FtZSBhcyBDdHJsLVAuIiwKLSIgLiBD VFJMLU46ICAgICAgQ29tbWFuZCByZWNhbGwgLSBnbyBmb3J3YXJkIGluIGNvbW1hbmQgcmVjYWxs IGJ1ZmZlci4iLAotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotI2lmbmRlZiBOT0xBU1RGSUxFCi0i IC4gQ1RSTC1LOiAgICAgIEluc2VydCB0aGUgbW9zdCByZWNlbnRseSBlbnRlcmVkIGxvY2FsIGZp bGUgc3BlY2lmaWN0aW9uLiIsCi0jZW5kaWYJLyogTk9MQVNURklMRSAqLwotCi0iIC4gPyAgICAg ICAgICAgIChxdWVzdGlvbiBtYXJrKSBEaXNwbGF5IGEgbWVudSBmb3IgdGhlIGN1cnJlbnQgY29t bWFuZCBmaWVsZC4iCi0sCi0iIC4gRVNDICAgICAgICAgIChvciBUQUIgb3IgQ3RybC1JKSBBdHRl bXB0IHRvIGNvbXBsZXRlIHRoZSBjdXJyZW50IGZpZWxkLiIsCi0iIC4gXFwgICAgICAgICAgICAo YmFja3NsYXNoKSBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyIGxpdGVyYWxseSIsCi0j aWZuZGVmIE5PU1BMCi0iICAgICAgICAgICAgICAgIG9yIGludHJvZHVjZSBhIGJhY2tzbGFzaCBj b2RlLCB2YXJpYWJsZSwgb3IgZnVuY3Rpb24uIiwKLSNlbHNlCi0iICAgICAgICAgICAgICAgIG9y IGludHJvZHVjZSBhIG51bWVyaWMgYmFja3NsYXNoIGNvZGUuIiwKLSNlbmRpZiAvKiBOT1NQTCAq LwotIiAiLAotCi0iSU1QT1JUQU5UOiBTaW5jZSBiYWNrc2xhc2ggKFxcKSBpcyBLZXJtaXQncyBj b21tYW5kLWxpbmUgZXNjYXBlIGNoYXJhY3RlciwiLAotInlvdSBtdXN0IGVudGVyIERPUywgV2lu ZG93cywgb3IgT1MvMiBwYXRobmFtZXMgdXNpbmcgZWl0aGVyIGZvcndhcmQgc2xhc2ggKC8pIgot LAotIm9yIGRvdWJsZSBiYWNrc2xhc2ggKFxcXFwpIGFzIHRoZSBkaXJlY3Rvcnkgc2VwYXJhdG9y IGluIG1vc3QgY29udGV4dHMuIiwKLSJFeGFtcGxlczogQzovVE1QL1JFQURNRS5UWFQsIEM6XFxc XFRNUFxcXFxSRUFETUUuVFhULiIsCi0iICIsCi0KLSJDb21tYW5kIHdvcmRzIG90aGVyIHRoYW4g ZmlsZW5hbWVzIGNhbiBiZSBhYmJyZXZpYXRlZCBpbiBtb3N0IGNvbnRleHRzLiIsCi0iICIsCi0K LSJCYXNpYyBjb21tYW5kczoiLAotIiAgRVhJVCAgICAgICAgICBFeGl0IGZyb20gS2VybWl0IiwK LSIgIEhFTFAgICAgICAgICAgUmVxdWVzdCBnZW5lcmFsIGhlbHAiLAotIiAgSEVMUCBjb21tYW5k ICBSZXF1ZXN0IGhlbHAgYWJvdXQgdGhlIGdpdmVuIGNvbW1hbmQiLAotIiAgVEFLRSAgICAgICAg ICBFeGVjdXRlIGNvbW1hbmRzIGZyb20gYSBmaWxlIiwKLSIgIFRZUEUgICAgICAgICAgRGlzcGxh eSBhIGZpbGUgb24geW91ciBzY3JlZW4iLAotIiAgT1JJRU5UQVRJT04gICBFeHBsYWlucyBkaXJl Y3Rvcnkgc3RydWN0dXJlIiwKLSIgIiwKLQotI2lmbmRlZiBOT1hGRVIKLSJDb21tYW5kcyBmb3Ig ZmlsZSB0cmFuc2ZlcjoiLAotIiAgU0VORCAgICAgICAgICBTZW5kIGZpbGVzIiwKLSIgIFJFQ0VJ VkUgICAgICAgUmVjZWl2ZSBmaWxlcyIsCi0iICBHRVQgICAgICAgICAgIEdldCBmaWxlcyBmcm9t IGEgS2VybWl0IHNlcnZlciIsCi0jaWZkZWYgQ0tfUkVTRU5ECi0iICBSRVNFTkQgICAgICAgIFJl Y292ZXIgYW4gaW50ZXJydXB0ZWQgc2VuZCIsCi0iICBSRUdFVCAgICAgICAgIFJlY292ZXIgYW4g aW50ZXJydXB0ZWQgZ2V0IGZyb20gYSBzZXJ2ZXIiLAotI2VuZGlmIC8qIENLX1JFU0VORCAqLwot I2lmbmRlZiBOT1NFUlZFUgotIiAgU0VSVkVSICAgICAgICBCZSBhIEtlcm1pdCBzZXJ2ZXIiLAot I2VuZGlmIC8qIE5PU0VSVkVSICovCi0iICIsCi0iRmlsZS10cmFuc2ZlciBzcGVlZCBzZWxlY3Rp b246IiwKLSIgIEZBU1QgICAgICAgICAgVXNlIGZhc3Qgc2V0dGluZ3MgLS0gVEhJUyBJUyBUSEUg REVGQVVMVCIsCi0iICBDQVVUSU9VUyAgICAgIFVzZSBzbG93ZXIsIG1vcmUgY2F1dGlvdXMgc2V0 dGluZ3MiLAotIiAgUk9CVVNUICAgICAgICBVc2UgZXh0cmVtZWx5IHNsb3cgYW5kIGNhdXRpb3Vz IHNldHRpbmdzIiwKLSIgIiwKLSJGaWxlLXRyYW5zZmVyIHBlcmZvcm1hbmNlIGZpbmUgdHVuaW5n OiIsCi0iICBTRVQgUkVDRUlWRSBQQUNLRVQtTEVOR1RIICBLZXJtaXQgcGFja2V0IHNpemUiLAot IiAgU0VUIFdJTkRPVyAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIHNsaWRpbmcgd2luZG93IHNs b3RzIiwKLSIgIFNFVCBQUkVGSVhJTkcgICAgICAgICAgICAgIEFtb3VudCBvZiBjb250cm9sLWNo YXJhY3RlciBwcmVmaXhpbmciLAotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZuZGVmIE5PTE9D QUwKLSIgIiwKLSJUbyBtYWtlIGEgZGlyZWN0IHNlcmlhbCBjb25uZWN0aW9uOiIsCi0jaWZkZWYg T1MyCi0jaWZkZWYgTlQKLSNpZmRlZiBDS19UQVBJCi0iICBTRVQgUE9SVCBUQVBJIFNlbGVjdCBU QVBJIGNvbW11bmljYXRpb24gZGV2aWNlIiwKLSNlbmRpZiAvKiBDS19UQVBJICovCi0iICBTRVQg UE9SVCAgICAgIFNlbGVjdCBzZXJpYWwgY29tbXVuaWNhdGlvbiBkZXZpY2UiLAotI2Vsc2UKLSIg IFNFVCBQT1JUICAgICAgU2VsZWN0IHNlcmlhbCBjb21tdW5pY2F0aW9uIHBvcnQgb3Igc2VydmVy IiwKLSNlbmRpZiAvKiBOVCAqLwotI2Vsc2UKLSIgIFNFVCBMSU5FICAgICAgU2VsZWN0IHNlcmlh bCBjb21tdW5pY2F0aW9uIGRldmljZSIsCi0jZW5kaWYgLyogT1MyICovCi0iICBTRVQgU1BFRUQg ICAgIFNlbGVjdCBjb21tdW5pY2F0aW9uIHNwZWVkIiwKLSIgIFNFVCBQQVJJVFkgICAgQ29tbXVu aWNhdGlvbnMgcGFyaXR5IChpZiBuZWNlc3NhcnkpIiwKLSNpZmRlZiBDS19SVFNDVFMKLSIgIFNF VCBGTE9XICAgICAgQ29tbXVuaWNhdGlvbnMgZmxvdyBjb250cm9sLCBzdWNoIGFzIFJUUy9DVFMi LAotI2Vsc2UKLSIgIFNFVCBGTE9XICAgICAgQ29tbXVuaWNhdGlvbnMgZmxvdyBjb250cm9sLCBz dWNoIGFzIFhPTi9YT0ZGIiwKLSNlbmRpZiAvKiBDS19SVFNDVFMgKi8KLSIgIENPTk5FQ1QgICAg ICAgQmVnaW4gdGVybWluYWwgY29ubmVjdGlvbiIsCi0KLSNpZm5kZWYgTk9ESUFMCi0iICIsCi0i VG8gZGlhbCBvdXQgd2l0aCBhIG1vZGVtOiIsCi0iICBTRVQgRElBTCBESVJFQ1RPUlkgICAgIFNw ZWNpZnkgZGlhbGluZyBkaXJlY3RvcnkgZmlsZSAob3B0aW9uYWwpIiwKLSIgIFNFVCBESUFMIENP VU5UUlktQ09ERSAgQ291bnRyeSB5b3UgYXJlIGRpYWxpbmcgZnJvbSAoKikiLAotIiAgU0VUIERJ QUwgQVJFQS1DT0RFICAgICBBcmVhLWNvZGUgeW91IGFyZSBkaWFsaW5nIGZyb20gKCopIiwKLSIg IExPT0tVUCAgICAgICAgICAgICAgICAgTG9va3VwIGVudHJpZXMgaW4geW91ciBkaWFsaW5nIGRp cmVjdG9yeSAoKikiLAotIiAgU0VUIE1PREVNIFRZUEUgICAgICAgICBTZWxlY3QgbW9kZW0gdHlw ZSIsCi0jaWZkZWYgT1MyCi0jaWZkZWYgTlQKLSNpZmRlZiBDS19UQVBJCi0iICBTRVQgUE9SVCBU QVBJICAgICAgICAgIFNlbGVjdCBUQVBJIGNvbW11bmljYXRpb24gZGV2aWNlIiwKLSNlbmRpZiAv KiBDS19UQVBJICovCi0iICBTRVQgUE9SVCAgICAgICAgICAgICAgIFNlbGVjdCBzZXJpYWwgY29t bXVuaWNhdGlvbiBkZXZpY2UiLAotI2Vsc2UKLSIgIFNFVCBQT1JUICAgICAgICAgICAgICAgU2Vs ZWN0IHNlcmlhbCBjb21tdW5pY2F0aW9uIHBvcnQgb3Igc2VydmVyIiwKLSNlbmRpZiAvKiBOVCAq LwotI2Vsc2UKLSIgIFNFVCBMSU5FICAgICAgICAgICAgICAgU2VsZWN0IHNlcmlhbCBjb21tdW5p Y2F0aW9uIGRldmljZSIsCi0jZW5kaWYgLyogT1MyICovCi0iICBTRVQgU1BFRUQgICAgICAgICAg ICAgIFNlbGVjdCBjb21tdW5pY2F0aW9uIHNwZWVkIiwKLSIgIFNFVCBQQVJJVFkgICAgICAgICAg ICAgQ29tbXVuaWNhdGlvbnMgcGFyaXR5IChpZiBuZWNlc3NhcnkpIiwKLSIgIERJQUwgICAgICAg ICAgICAgICAgICAgRGlhbCB0aGUgcGhvbmUgbnVtYmVyIiwKLSIgIENPTk5FQ1QgICAgICAgICAg ICAgICAgQmVnaW4gdGVybWluYWwgY29ubmVjdGlvbiIsCi0iICIsCi0jaWZkZWYgT1MyCi0iRnVy dGhlciBpbmZvOiAgIEhFTFAgRElBTCwgSEVMUCBTRVQgTU9ERU0sIEhFTFAgU0VUIFBPUlQsIEhF TFAgU0VUIERJQUwiLAotI2Vsc2UKLSJGdXJ0aGVyIGluZm86ICAgSEVMUCBESUFMLCBIRUxQIFNF VCBNT0RFTSwgSEVMUCBTRVQgTElORSwgSEVMUCBTRVQgRElBTCIsCi0jZW5kaWYgLyogT1MyICov Ci0iKCopIChGb3IgdXNlIHdpdGggb3B0aW9uYWwgZGlhbGluZyBkaXJlY3RvcnkpIiwKLSNlbmRp ZiAvKiBOT0RJQUwgKi8KLQotI2lmZGVmIE5FVENPTk4KLSIgIiwKLSJUbyBtYWtlIGEgbmV0d29y ayBjb25uZWN0aW9uOiIsCi0jaWZuZGVmIE5PRElBTAotIiAgU0VUIE5FVFdPUksgRElSRUNUT1JZ ICBTcGVjaWZ5IGEgbmV0d29yayBzZXJ2aWNlcyBkaXJlY3RvcnkgKG9wdGlvbmFsKSIsCi0iICBM T09LVVAgICAgICAgICAgICAgICAgIExvb2t1cCBlbnRyaWVzIGluIHlvdXIgbmV0d29yayBkaXJl Y3RvcnkiLAotI2VuZGlmIC8qIE5PRElBTCAqLwotIiAgU0VUIE5FVFdPUksgVFlQRSAgICAgICBT ZWxlY3QgbmV0d29yayB0eXBlIChpZiBtb3JlIHRoYW4gb25lIGF2YWlsYWJsZSkiLAotIiAgU0VU IEhPU1QgICAgICAgICAgICAgICBNYWtlIGEgbmV0d29yayBjb25uZWN0aW9uIGJ1dCBzdGF5IGlu IGNvbW1hbmQgbW9kZSIsCi0iICBDT05ORUNUICAgICAgICAgICAgICAgIEJlZ2luIHRlcm1pbmFs IGNvbm5lY3Rpb24iLAotI2lmZGVmIFROQ09ERQotIiAgVEVMTkVUICAgICAgICAgICAgICAgICBT ZWxlY3QgYSBUZWxuZXQgaG9zdCBhbmQgQ09OTkVDVCB0byBpdCIsCi0jZW5kaWYgLyogVE5DT0RF ICovCi0jaWZkZWYgUkxPR0NPREUKLSIgIFJMT0dJTiAgICAgICAgICAgICAgICAgU2VsZWN0IGFu IFJsb2dpbiBob3N0IGFuZCBDT05ORUNUIHRvIGl0IiwKLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwot I2lmZGVmIEFOWVNTSAotIiAgU1NIIFsgT1BFTiBdICAgICAgICAgICBTZWxlY3QgYW4gU1NIIGhv c3QgYW5kIENPTk5FQ1QgdG8gaXQiLAotI2VuZGlmIC8qIEFOWVNTSCAqLwotI2lmZGVmIE5FV0ZU UAotIiAgRlRQIFsgT1BFTiBdICAgICAgICAgICBNYWtlIGFuIEZUUCBjb25uZWN0aW9uIiwKLSNl bmRpZiAvKiBORVdGVFAgKi8KLSNpZmRlZiBDS0hUVFAKLSIgIEhUVFAgT1BFTiAgICAgICAgICAg ICAgTWFrZSBhbiBIVFRQIGNvbm5lY3Rpb24iLAotI2VuZGlmIC8qIENLSFRUUCAqLwotI2VuZGlm IC8qIE5FVENPTk4gKi8KLQotI2lmZGVmIE5UCi0iICIsCi0iVG8gcmV0dXJuIGZyb20gdGhlIHRl cm1pbmFsIHdpbmRvdyB0byB0aGUgSy05NT4gcHJvbXB0OiIsCi0jZWxzZQotI2lmZGVmIE9TMgot IiAiLAotIlRvIHJldHVybiBmcm9tIHRoZSB0ZXJtaW5hbCB3aW5kb3cgdG8gdGhlIEsvMj4gcHJv bXB0OiIsCi0jZWxzZQotIiAiLAotIlRvIHJldHVybiBmcm9tIGEgdGVybWluYWwgY29ubmVjdGlv biB0byB0aGUgQy1LZXJtaXQgcHJvbXB0OiIsCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyog TlQgKi8KLSNpZmRlZiBPUzIKLSIgIFwKLVByZXNzIHRoZSBrZXkgb3Iga2V5LWNvbWJpbmF0aW9u IHNob3duIGFmdGVyIFwiQ29tbWFuZDpcIiBpbiB0aGUgc3RhdHVzIGxpbmUiLAotIiAgKHN1Y2gg YXMgQWx0LXgpIG9yIHR5cGUgeW91ciBlc2NhcGUgY2hhcmFjdGVyIGZvbGxvd2VkIGJ5IHRoZSBs ZXR0ZXIgQy4iLAotI2Vsc2UKLSIgIFR5cGUgeW91ciBlc2NhcGUgY2hhcmFjdGVyIGZvbGxvd2Vk IGJ5IHRoZSBsZXR0ZXIgQy4iLAotI2VuZGlmIC8qIE9TMiAqLwotIiAiLAotIlRvIGRpc3BsYXkg eW91ciBlc2NhcGUgY2hhcmFjdGVyOiIsCi0iICBTSE9XIEVTQ0FQRSIsCi0iICIsCi0iVG8gZGlz cGxheSBvdGhlciBzZXR0aW5nczoiLAotIiAgU0hPVyBDT01NVU5JQ0FUSU9OUywgU0hPVyBURVJN SU5BTCwgU0hPVyBGSUxFLCBTSE9XIFBST1RPQ09MLCBldGMuIiwKLSNlbHNlICAvKiAhTk9MT0NB TCAqLwotIiAiLAotIlRvIGRpc3BsYXkgc2V0dGluZ3M6IiwKLSIgIFNIT1cgQ09NTVVOSUNBVElP TlMsIFNIT1cgRklMRSwgU0hPVyBQUk9UT0NPTCwgZXRjLiIsCi0jZW5kaWYgLyogTk9MT0NBTCAq LwotIiAiLAotIlRoZSBtYW51YWwgZm9yIEMtS2VybWl0IGlzIHRoZSBib29rIFwiVXNpbmcgQy1L ZXJtaXRcIi4gIEZvciBpbmZvcm1hdGlvbiIsCi0iYWJvdXQgdGhlIG1hbnVhbCwgdmlzaXQ6IiwK LSIgIGh0dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L3VzaW5nY2tlcm1pdC5odG1sIiwKLSIgIiwK LSNpZmRlZiBPUzIKLSJGb3IgYSBLZXJtaXQgOTUgdHV0b3JpYWwsIHZpc2l0OiIsCi0iICBodHRw Oi8va2VybWl0LmNvbHVtYmlhLmVkdS9rOTV0dXRvci5odG1sIiwKLSIgIiwKLSNlbmRpZiAvKiBP UzIgKi8KLSJGb3IgYW4gb25saW5lIEMtS2VybWl0IHR1dG9yaWFsLCB2aXNpdDoiLAotIiAgaHR0 cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUvY2t1dHV0b3IuaHRtbCIsCi0iICIsCi0iVG8gbGVhcm4g YWJvdXQgc2NyaXB0IHByb2dyYW1taW5nIGFuZCBhdXRvbWF0aW9uOiIsCi0iICBodHRwOi8va2Vy bWl0LmNvbHVtYmlhLmVkdS9ja3NjcmlwdHMuaHRtbCIsCi0iICIsCi0iRm9yIGZ1cnRoZXIgaW5m b3JtYXRpb24gYWJvdXQgYSBwYXJ0aWN1bGFyIGNvbW1hbmQsIHR5cGUgSEVMUCB4eHgsIiwKLSJ3 aGVyZSB4eHggaXMgdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQuICBGb3IgZG9jdW1lbnRhdGlvbiwg bmV3cyBvZiBuZXciLAotInJlbGVhc2VzLCBhbmQgaW5mb3JtYXRpb24gYWJvdXQgb3RoZXIgS2Vy bWl0IHNvZnR3YXJlLCB2aXNpdCB0aGUiLAotIktlcm1pdCBQcm9qZWN0IHdlYnNpdGU6IiwKLSIg IiwKLSIgIGh0dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1LyIsCi0iICIsCi0iRm9yIGluZm9ybWF0 aW9uIGFib3V0IHRlY2huaWNhbCBzdXBwb3J0IHBsZWFzZSB2aXNpdCB0aGlzIHBhZ2U6IiwKLSIg IiwKLSIgIGh0dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L3N1cHBvcnQuaHRtbCIsCi0iIgotfTsK LQotc3RhdGljIGNoYXIgKiBobXh5bWF0Y2hbXSA9IHsKLSJTRVQgTUFUQ0ggeyBET1RGSUxFLCBG SUZPIH0geyBPTiwgT0ZGIH0iLAotIiAgVGVsbHMgd2hldGhlciB3aWxkY2FyZHMgc2hvdWxkIG1h dGNoIGRvdGZpbGVzIChmaWxlcyB3aG9zZSBuYW1lcyBiZWdpbiIsCi0iICB3aXRoIHBlcmlvZCkg b3IgVU5JWCBGSUZPIHNwZWNpYWwgZmlsZXMuICBNQVRDSCBGSUZPIGRlZmF1bHQgaXMgT0ZGLiIs Ci0iICBNQVRDSCBET1RGSUxFIGRlZmF1bHQgaXMgT0ZGIGluIFVOSVgsIE9OIGVsc2V3aGVyZS4i LAotIiIKLX07Ci0KLSNpZm5kZWYgTk9TRVhQCi1zdGF0aWMgY2hhciAqIGhteHlzZXhwW10gPSB7 Ci0iU0VUIFNFWFBSRVNTSU9OIHsgREVQVEgtTElNSVQsIEVDSE8tUkVTVUxULCBUUlVOQ0FURS1B TEwtUkVTVUxUUyB9IiwKLSIgIERFUFRILUxJTUlUIHNldHMgYSBsaW1pdCBvbiB0aGUgZGVwdGgg b2YgbmVzdGluZyBvciByZWN1cnNpb24gaW4iLAotIiAgUy1FeHByZXNzaW9ucyB0byBwcmV2ZW50 IHRoZSBwcm9ncmFtIGZyb20gY3Jhc2hpbmcgZnJvbSBtZW1vcnkgZXhoYXVzdGlvbi4iLAotIiAg RUNITy1SRVNVTFQgdGVsbHMgd2hldGhlciBTLUV4cHJlc3Npb24gcmVzdWx0cyBzaG91bGQgYmUg ZGlzcGxheWVkIGFzIiwKLSIgIGEgcmVzdWx0IG9mIGV2YWx1YXRpbmcgYW4gZXhwcmVzc2lvbjsg dGhlIGRlZmF1bHQgaXMgdG8gZGlzcGxheSBvbmx5IGF0IiwKLSIgIHRvcCAoaW50ZXJhY3RpdmUp IGxldmVsOyBPRkYgbWVhbnMgbmV2ZXIgZGlzcGxheTsgT04gbWVhbnMgYWx3YXlzIGRpc3BsYXku IiwKLSIgIFRSVU5DQVRFLUFMTC1SRVNVTFRTIE9OIG1lYW5zIHRoZSByZXN1bHRzIG9mIGFsbCBh cml0aG1ldGljIG9wZXJhdGlvbnMiLAotIiAgc2hvdWxkIGJlIGZvcmNlZCB0byBpbnRlZ2VycyAo d2hvbGUgbnVtYmVycykgYnkgZGlzY2FyZGluZyBhbnkgZnJhY3Rpb25hbCIsCi0iICBwYXJ0LiAg VGhlIGRlZmF1bHQgaXMgT0ZGLiAgU0hPVyBTRVhQUkVTU0lPTiBkaXNwbGF5cyB0aGUgY3VycmVu dCBzZXR0aW5ncy4iCi0sIiIKLX07Ci0jZW5kaWYJLyogTk9TRVhQICovCi0KLSNpZmRlZiBPUzIK LSNpZmRlZiBLVUkKLXN0YXRpYyBjaGFyICogaG14eWd1aVtdID0gewotIlNFVCBHVUkgQ0xPU0Ug T0ZGIiwKLSIgIERpc2FibGVzIHRoZSBTeXN0ZW0gTWVudSBDbG9zZSBhbmQgRmlsZS0+RXhpdCBm dW5jdGlvbnMgd2hpY2ggY291bGQgYmUiLAotIiAgdXNlZCB0byBleGl0IEtlcm1pdC4gIE9uY2Ug ZGlzYWJsZWQgdGhlc2UgZnVuY3Rpb25zIGNhbm5vdCBiZSByZS1lbmFibGVkIiwKLSIgIGFuZCB0 aGUgb25seSB3YXkgdG8gZXhpdCBLZXJtaXQgaXMgdmlhIHRoZSBLZXJtaXQgU2NyaXB0IEVYSVQg Y29tbWFuZC4iLAotIiAiLAotIlNFVCBHVUkgRElBTE9HUyB7IE9OLCBPRkYgfSIsCi0iICBPTiBt ZWFucyB0aGF0IHBvcHVwcywgYWxlcnRzLCB1c2UgR1VJIGRpYWxvZ3M7IE9GRiBtZWFucyB0byB1 c2UiLAotIiAgdGV4dC1tb2RlIHBvcHVwcyBvciBwcm9tcHRzLiAgT04gYnkgZGVmYXVsdC4iLAot IiAiLAotIlNFVCBHVUkgRk9OVCBuYW1lIHNpemUiLAotIiAgQ2hvb3NlcyB0aGUgZm9udCBhbmQg c2l6ZS4gIFR5cGUgXCJzZXQgZ3VpIGZvbnQgP1wiIHRvIHNlZSB0aGUgbGlzdCBvZiIsCi0iICBj aG9pY2VzLiAgVGhlIHNpemUgY2FuIGJlIGEgd2hvbGUgbnVtYmVyIG9yIGNhbiBjb250YWluIGEg ZGVjaW1hbCBwb2ludCIsCi0iICBhbmQgYSBmcmFjdGlvbiAod2hpY2ggaXMgcm91bmRlZCB0byB0 aGUgbmVhcmVzdCBoYWxmIHBvaW50KS4iLAotIiAiLAotIlNFVCBHVUkgTUVOVUJBUiBPRkYiLAot IiAgRGlzYWJsZXMgbWVudWJhciBmdW5jdGlvbnMgd2hpY2ggY291bGQgYmUgdXNlZCB0byBtb2Rp ZnkgdGhlIEtlcm1pdCIsCi0iICBzZXNzaW9uIGNvbmZpZ3VyYXRpb24uICBPbmNlIGRpc2FibGVk IHRoZSBtZW51YmFyIGZ1bmN0aW9ucyBjYW5ub3QgYmUiLAotIiAgcmUtZW5hYmxlZC4iLCAKLSIg IiwKLSJTRVQgR1VJIFJHQkNPTE9SIGNvbG9ybmFtZSByZWR2YWx1ZSBncmVlbnZhbHVlIGJsdWV2 YWx1ZSIsCi0iICBTcGVjaWZpZXMgdGhlIHJlZC1ncmVlbi1ibHVlIG1peHR1cmUgdG8gYmUgdXNl ZCB0byByZW5kZXIgdGhlIGdpdmVuIiwKLSIgIGNvbG9yIG5hbWUuICBUeXBlIFwic2V0IGd1aSBy Z2Jjb2xvclwiIHRvIHNlZSBhIGxpc3Qgb2YgY29sb3JuYW1lcy4iLAotIiAgdGhlIFJHQiB2YWx1 ZXMgYXJlIHdob2xlIG51bWJlcnMgZnJvbSAwIHRvIDI1NS4iLAotIiAiLAotIlNFVCBHVUkgVE9P TEJBUiBPRkYiLCAKLSIgIERpc2FibGVzIHRvb2xiYXIgZnVuY3Rpb25zIHdoaWNoIGNvdWxkIGJl IHVzZWQgdG8gbW9kaWZ5IHRoZSBLZXJtaXQiLAotIiAgc2Vzc2lvbiBjb25maWd1cmF0aW9uLiAg T25jZSBkaXNhYmxlZCB0aGUgdG9vbGJhciBmdW5jdGlvbnMgY2Fubm90IGJlIiwKLSIgIHJlLWVu YWJsZWQuIiwgCi0iICIsCi0iU0VUIEdVSSBXSU5ET1cgUE9TSVRJT04geCB5IiwKLSIgIE1vdmVz IHRoZSBLOTUgd2luZG93IHRvIHRoZSBnaXZlbiBYLFkgY29vcmRpbmF0ZXMsIHBpeGVscyBmcm9t IHRvcCBsZWZ0LiIsCi0iICAoTm90IHlldCBpbXBsZW1lbnRlZCAtLSB1c2UgY29tbWFuZC1saW5l IG9wdGlvbnMgdG8gZG8gdGhpcy4pIiwKLSIgIiwKLSJTRVQgR1VJIFdJTkRPVyBSRVNJWkUtTU9E RSB7IENIQU5HRS1ESU1FTlNJT05TLCBTQ0FMRS1GT05UIH0iLAotIiAgRGVmYXVsdCBpcyBDSEFO R0UtRElNRU5TSU9OUy4iLAotIiIsCi0iU0VUIEdVSSBXSU5ET1cgUlVOLU1PREUgeyBNQVhJTUla RSwgTUlOSU1JWkUsIFJFU1RPUkUgfSIsCi0iICBDaGFuZ2VzIHRoZSBydW4gbW9kZSBzdGF0ZSBv ZiB0aGUgR1VJIHdpbmRvdy4iLAotIiIKLX07Ci0jZW5kaWYgLyogS1VJICovCi0jZW5kaWYgLyog T1MyICovCi0KLSNpZmRlZiBBTllTU0gKLXN0YXRpYyBjaGFyICogaG14eHNzaFtdID0gewotI2lm ZGVmIFNTSEJVSUxUSU4KLSJTeW50YXg6IFNTSCB7IEFERCwgQUdFTlQsIENMRUFSLCBLRVksIFsg T1BFTiBdLCBWMiB9IG9wZXJhbmRzLi4uIiwKLSIgIFBlcmZvcm1zIGFuIFNTSC1yZWxhdGVkIGFj dGlvbiwgZGVwZW5kaW5nIG9uIHRoZSBrZXl3b3JkIHRoYXQgZm9sbG93czoiLAotIiAiLAotIlNT SCBBREQgTE9DQUwtUE9SVC1GT1JXQVJEIGxvY2FsLXBvcnQgaG9zdCBwb3J0IiwKLSIgIEFkZHMg YSBwb3J0IGZvcndhcmRpbmcgdHJpcGxldCB0byB0aGUgbG9jYWwgcG9ydCBmb3J3YXJkaW5nIGxp c3QuIiwKLSIgIFRoZSB0cmlwbGV0IHNwZWNpZmllcyBhIGxvY2FsIHBvcnQgdG8gYmUgZm9yd2Fy ZGVkIGFuZCB0aGUgaG9zdG5hbWUgLyIsCi0iICBpcC1hZGRyZXNzIGFuZCBwb3J0IG51bWJlciB0 byB3aGljaCB0aGUgcG9ydCBzaG91bGQgYmUgZm9yd2FyZGVkIGZyb20iLAotIiAgdGhlIHJlbW90 ZSBob3N0LiAgUG9ydCBmb3J3YXJkaW5nIGlzIGFjdGl2YXRlZCBhdCBjb25uZWN0aW9uIiwKLSIg IGVzdGFibGlzaG1lbnQgYW5kIGNvbnRpbnVlcyB1bnRpbCB0aGUgY29ubmVjdGlvbiBpcyB0ZXJt aW5hdGVkLiIsCi0iICIsCi0iU1NIIEFERCBSRU1PVEUtUE9SVC1GT1JXQVJEIHJlbW90ZS1wb3J0 IGhvc3QgcG9ydCIsCi0iICBBZGRzIGEgcG9ydCBmb3J3YXJkaW5nIHRyaXBsZXQgdG8gdGhlIHJl bW90ZSBwb3J0IGZvcndhcmRpbmcgbGlzdC4iLAotIiAgVGhlIHRyaXBsZXQgc3BlY2lmaWVzIGEg cmVtb3RlIHBvcnQgdG8gYmUgZm9yd2FyZGVkIGFuZCB0aGUiLAotIiAgaG9zdG5hbWUvaXAtYWRk cmVzcyBhbmQgcG9ydCBudW1iZXIgdG8gd2hpY2ggdGhlIHBvcnQgc2hvdWxkIGJlIiwKLSIgIGZv cndhcmRlZCBmcm9tIHRoZSBsb2NhbCBtYWNoaW5lLiAgUG9ydCBmb3J3YXJkaW5nIGlzIGFjdGl2 YXRlZCBhdCIsCi0iICBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGNvbnRpbnVlcyB1bnRp bCB0aGUgY29ubmVjdGlvbiBpcyIsCi0iICB0ZXJtaW5hdGVkLiIsCi0iICIsCi0iU1NIIEFHRU5U IEFERCBbIGlkZW50aXR5LWZpbGUgXSIsCi0iICBBZGRzIHRoZSBjb250ZW50cyBvZiB0aGUgaWRl bnRpdHktZmlsZSAoaWYgYW55KSB0byB0aGUgU1NIIEFHRU5UIiwKLSIgIHByaXZhdGUga2V5IGNh Y2hlLiAgSWYgbm8gaWRlbnRpdHktZmlsZSBpcyBzcGVjaWZpZWQsIGFsbCBmaWxlcyIsCi0iICBz cGVjaWZpZWQgd2l0aCBTRVQgU1NIIElERU5USVRZLUZJTEUgYXJlIGFkZGVkIHRvIHRoZSBjYWNo ZS4iLAotIiAiLAotIlNTSCBBR0VOVCBERUxFVEUgWyBpZGVudGl0eS1maWxlIF0iLAotIiAgRGVs ZXRlcyB0aGUgY29udGVudHMgb2YgdGhlIGlkZW50aXR5LWZpbGUgKGlmIGFueSkgZnJvbSB0aGUg U1NIIEFHRU5UIiwKLSIgIHByaXZhdGUga2V5IGNhY2hlLiAgSWYgbm8gaWRlbnRpdHktZmlsZSBp cyBzcGVjaWZpZWQsIGFsbCBmaWxlcyIsCi0iICBzcGVjaWZpZWQgd2l0aCBTRVQgU1NIIElERU5U SVRZLUZJTEUgYXJlIGRlbGV0ZWQgZnJvbSB0aGUgY2FjaGUuIiwKLSIgIiwKLSJTU0ggQUdFTlQg TElTVCBbIC9GSU5HRVJQUklOVCBdIiwKLSIgIExpc3RzIHRoZSBjb250ZW50cyBvZiB0aGUgU1NI IEFHRU5UIHByaXZhdGUga2V5IGNhY2hlLiAgSWYgL0ZJTkdFUlBSSU5UIiwKLSIgIGlzIHNwZWNp ZmllZCwgdGhlIGZpbmdlcnByaW50IG9mIHRoZSBwcml2YXRlIGtleXMgYXJlIGRpc3BsYXllZCBp bnN0ZWFkIiwKLSIgIG9mIHRoZSBrZXlzLiIsCi0iICIsCi0iU1NIIENMRUFSIExPQ0FMLVBPUlQt Rk9SV0FSRCIsCi0iICBDbGVhcnMgdGhlIGxvY2FsIHBvcnQgZm9yd2FyZGluZyBsaXN0LiIsCi0i ICIsCi0iU1NIIENMRUFSIFJFTU9URS1QT1JULUZPUldBUkQiLAotIiAgQ2xlYXJzIHRoZSByZW1v dGUgcG9ydCBmb3J3YXJkaW5nIGxpc3QuIiwKLSIgIiwKLSJTU0ggS0VZIGNvbW1hbmRzOiIsCi0i ICBUaGUgU1NIIEtFWSBjb21tYW5kcyBjcmVhdGUgYW5kIG1hbmFnZSBwdWJsaWMgYW5kIHByaXZh dGUga2V5IHBhaXJzIiwKLSIgIChpZGVudGl0aWVzKS4gIFRoZXJlIGFyZSB0aHJlZSBmb3JtcyBv ZiBTU0gga2V5cy4gIEVhY2gga2V5IHBhaXIgaXMiLAotIiAgc3RvcmVkIGluIGl0cyBvd24gc2V0 IG9mIGZpbGVzOiIsCi0iICIsCi0iICAgS2V5IFR5cGUgICAgICBQcml2YXRlIEtleSBGaWxlICAg ICAgICAgICBQdWJsaWMgS2V5IEZpbGUiLAotIiAgICB2MSBSU0Ega2V5cyAgIFxcdihhcHBkYXRh KXNzaC9pZGVudGl0eSAgIFxcdihhcHBkYXRhKXNzaC9pZGVudGl0eS5wdWIiLAotIiAgICB2MiBS U0Ega2V5cyAgIFxcdihhcHBkYXRhKXNzaC9pZF9yc2EgICAgIFxcdihhcHBkYXRhKXNzaC9pZF9y c2EucHViIiwKLSIgICAgdjIgRFNBIGtleXMgICBcXHYoYXBwZGF0YSlzc2gvaWRfZHNhICAgICBc XHYoYXBwZGF0YSlzc2gvaWRfZHNhLnB1YiIsCi0iICIsCi0iICBLZXlzIGFyZSBzdG9yZWQgdXNp bmcgdGhlIE9wZW5TU0gga2V5ZmlsZSBmb3JtYXQuICBUaGUgcHJpdmF0ZSBrZXkiLAotIiAgZmls ZXMgY2FuIGJlIChvcHRpb25hbGx5KSBwcm90ZWN0ZWQgYnkgc3BlY2lmeWluZyBhIHBhc3NwaHJh c2UuICBBIiwKLSIgIHBhc3NwaHJhc2UgaXMgYSBsb25nZXIgdmVyc2lvbiBvZiBhIHBhc3N3b3Jk LiAgRW5nbGlzaCB0ZXh0IHByb3ZpZGVzIiwKLSIgIG5vIG1vcmUgdGhhbiAyIGJpdHMgb2Yga2V5 IGRhdGEgcGVyIGNoYXJhY3Rlci4gIDU2LWJpdCBrZXlzIGNhbiBiZSIsCi0iICBicm9rZW4gYnkg YSBicnV0ZSBmb3JjZSBhdHRhY2sgaW4gYXBwcm94aW1hdGVseSAyNCBob3Vycy4gIFdoZW4gdXNl ZCwiLAotIiAgcHJpdmF0ZSBrZXkgZmlsZXMgc2hvdWxkIHRoZXJlZm9yZSBiZSBwcm90ZWN0ZWQg YnkgYSBwYXNzcGhyYXNlIG9mIGF0IiwKLSIgIGxlYXN0IDQwIGNoYXJhY3RlcnMgKGFib3V0IDgw IGJpdHMpLiIsCi0iICIsCi0iICBUbyBpbnN0YWxsIGEgcHVibGljIGtleSBmaWxlIG9uIHRoZSBo b3N0LCB5b3UgbXVzdCB0cmFuc2ZlciB0aGUgZmlsZSIsCi0iICB0byB0aGUgaG9zdCBhbmQgYXBw ZW5kIGl0IHRvIHlvdXIgXCJhdXRob3JpemVkX2tleXNcIiBmaWxlLiAgVGhlIGZpbGUiLAotIiAg cGVybWlzc2lvbnMgbXVzdCBiZSA2MDAgKG9yIGVxdWl2YWxlbnQpLiIsCi0iICIsCi0iU1NIIEtF WSBDSEFOR0UtUEFTU1BIUkFTRSBbIC9ORVctUEFTU1BIUkFTRTpwYXNzcGhyYXNlIiwKLSIgICAg ICAvT0xELVBBU1NQSFJBU0U6cGFzc3BocmFzZSBdIGZpbGVuYW1lIiwKLSIgIFRoaXMgcmUtZW5j cnlwdHMgdGhlIHNwZWNpZmllZCBwcml2YXRlIGtleSBmaWxlIHdpdGggYSBuZXcgcGFzc3BocmFz ZS4iLAotIiAgVGhlIG9sZCBwYXNzcGhyYXNlIGlzIHJlcXVpcmVkLiAgSWYgdGhlIHBhc3NwaHJh c2VzIChhbmQgZmlsZW5hbWUpIGFyZSIsCi0iICBub3QgcHJvdmlkZWQgS2VybWl0IHByb21wdHMg eW91ciBmb3IgdGhlbS4iLAotIiAiLAotIlNTSCBLRVkgQ1JFQVRFIFsgL0JJVFM6Yml0cyAvUEFT U1BIUkFTRTpwYXNzcGhyYXNlIiwKLSIgICAgL1RZUEU6eyBWMS1SU0EsIFYyLURTQSwgVjItUlNB IH0gL1YxLVJTQS1DT01NRU5UOmNvbW1lbnQgXSBmaWxlbmFtZSIsCi0iICBUaGlzIGNvbW1hbmQg Y3JlYXRlcyBhIG5ldyBwcml2YXRlL3B1YmxpYyBrZXkgcGFpci4gIFRoZSBkZWZhdWx0cyBhcmU6 IiwKLSIgIEJJVFM6MTAyNCBhbmQgVFlQRTpWMi1SU0EuICBUaGUgZmlsZW5hbWUgaXMgdGhlIG5h bWUgb2YgdGhlIHByaXZhdGUiLAotIiAga2V5IGZpbGUuICBUaGUgcHVibGljIGtleSBpcyBjcmVh dGVkIHdpdGggdGhlIHNhbWUgbmFtZSB3aXRoIC5wdWIiLAotIiAgYXBwZW5kZWQgdG8gaXQuICBJ ZiBhIGZpbGVuYW1lIGlzIG5vdCBzcGVjaWZpZWQgS2VybWl0IHByb21wdHMgeW91IGZvciIsCi0i ICBpdC4gIFYxIFJTQSBrZXkgZmlsZXMgbWF5IGhhdmUgYW4gb3B0aW9uYWwgY29tbWVudCwgd2hp Y2ggaXMgaWdub3JlZCIsCi0iICBmb3Igb3RoZXIga2V5IHR5cGVzLiIsCi0iICIsCi0iU1NIIEtF WSBESVNQTEFZIFsgL0ZPUk1BVDp7RklOR0VSUFJJTlQsSUVURixPUEVOU1NILFNTSC5DT019IF0g ZmlsZW5hbWUiLAotIiAgVGhpcyBjb21tYW5kIGRpc3BsYXlzIHRoZSBjb250ZW50cyBvZiBhIHB1 YmxpYyBvciBwcml2YXRlIGtleSBmaWxlLiIsCi0iICBUaGUgZGVmYXVsdCBmb3JtYXQgaXMgT1BF TlNTSC4iLAotIiAiLAotIlNTSCBLRVkgVjEgU0VULUNPTU1FTlQgZmlsZW5hbWUgY29tbWVudCIs Ci0iICBUaGlzIGNvbW1hbmQgcmVwbGFjZXMgdGhlIGNvbW1lbnQgYXNzb2NpYXRlZCB3aXRoIGEg VjEgUlNBIGtleSBmaWxlLiIsCi0iICIsCi0iU1NIIFsgT1BFTiBdIGhvc3QgWyBwb3J0IF0gWyAv Q09NTUFORDpjb21tYW5kIC9VU0VSOnVzZXJuYW1lIiwKLSIgICAgICAvUEFTU1dPUkQ6cHdkIC9W RVJTSU9OOnsgMSwgMiB9IC9YMTEtRk9SV0FSRElORzp7IE9OLCBPRkYgfSBdIiwKLSIgIFRoaXMg Y29tbWFuZCBlc3RhYmxpc2hlcyBhIG5ldyBjb25uZWN0aW9uIHVzaW5nIFNTSCB2ZXJzaW9uIDEg b3IiLAotIiAgdmVyc2lvbiAyIHByb3RvY29sLiAgVGhlIGNvbm5lY3Rpb24gaXMgbWFkZSB0byB0 aGUgc3BlY2lmaWVkIGhvc3Qgb24iLAotIiAgdGhlIFNTSCBwb3J0ICh5b3UgY2FuIG92ZXJyaWRl IHRoZSBwb3J0IGJ5IGluY2x1ZGluZyBhIHBvcnQgbmFtZSBvciIsCi0iICBudW1iZXIgYWZ0ZXIg dGhlIGhvc3QgbmFtZSkuICBPbmNlIHRoZSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkIHRoZSIs Ci0iICBhdXRoZW50aWNhdGlvbiBuZWdvdGlhdGlvbnMgYmVnaW4uICBJZiB0aGUgYXV0aGVudGlj YXRpb24gaXMgYWNjZXB0ZWQsIiwKLSIgIHRoZSBsb2NhbCBhbmQgcmVtb3RlIHBvcnQgZm9yd2Fy ZGluZyBsaXN0cyBhcmUgdXNlZCB0byBlc3RhYmxpc2ggdGhlIiwKLSIgIGRlc2lyZWQgY29ubmVj dGlvbnMuICBJZiBYMTEgRm9yd2FyZGluZyBpcyBhY3RpdmUsIHRoaXMgcmVzdWx0cyBpbiBhIiwK LSIgIHJlbW90ZSBwb3J0IGZvcndhcmRpbmcgYmV0d2VlbiB0aGUgWDExIGNsaWVudHMgb24gdGhl IHJlbW90ZSBob3N0IGFuZCIsCi0iICBYMTEgU2VydmVyIG9uIHRoZSBsb2NhbCBtYWNoaW5lLiAg SWYgYSAvQ09NTUFORCBpcyBwcm92aWRlZCwgdGhlIiwKLSIgIGNvbW1hbmQgaXMgZXhlY3V0ZWQg b24gdGhlIHJlbW90ZSBob3N0IGluIHBsYWNlIG9mIHlvdXIgZGVmYXVsdCBzaGVsbC4iLAotIiAi LAotIiAgQW4gZXhhbXBsZSBvZiBhIC9DT01NQU5EIHRvIGV4ZWN1dGUgQy1LZXJtaXQgaW4gU0VS VkVSIG1vZGUgaXM6IiwKLSIgICAgIFNTSCBPUEVOIGhvc3RuYW1lIC9DT01NQU5EOntrZXJtaXQg LXggLWwgMH0iLAotIiAiLAotIlNTSCBWMiBSRUtFWSIsCi0iICBSZXF1ZXN0cyB0aGF0IGFuIGV4 aXN0aW5nIFNTSCBWMiBjb25uZWN0aW9uIGdlbmVyYXRlIG5ldyBzZXNzaW9uIGtleXMuIiwKLSNl bHNlICAvKiBTU0hCVUlMVElOICovCi0iU3ludGF4OiBTU0ggWyBvcHRpb25zIF0gPGhvc3RuYW1l PiBbIGNvbW1hbmQgXSIsCi0iICBNYWtlcyBhbiBTU0ggY29ubmVjdGlvbiB1c2luZyB0aGUgZXh0 ZXJuYWwgc3NoIHByb2dyYW0gdmlhIHRoZSBTRVQgU1NIIiwKLSIgIENPTU1BTkQgc3RyaW5nLCB3 aGljaCBpcyBcInNzaCAtZSBub25lXCIgYnkgZGVmYXVsdC4gIE9wdGlvbnMgZm9yIHRoZSIsCi0i ICBleHRlcm5hbCBzc2ggcHJvZ3JhbSBtYXkgYmUgaW5jbHVkZWQuICBJZiB0aGUgaG9zdG5hbWUg aXMgZm9sbG93ZWQgYnkgYSIsCi0iICBjb21tYW5kLCB0aGUgY29tbWFuZCBpcyBleGVjdXRlZCBv biB0aGUgaG9zdCBpbnN0ZWFkIG9mIGFuIGludGVyYWN0aXZlIiwKLSIgIHNoZWxsLiIsCi0jZW5k aWYgLyogU1NIQlVJTFRJTiAqLwotIiIKLX07Ci0KLXN0YXRpYyBjaGFyICpobXh5c3NoW10gPSB7 Ci0jaWZkZWYgU1NIQlVJTFRJTgotIlNFVCBTU0ggQUdFTlQtRk9SV0FSRElORyB7IE9OLCBPRkYg fSIsCi0iICBJZiBhbiBhdXRoZW50aWNhdGlvbiBhZ2VudCBpcyBpbiB1c2UsIHNldHRpbmcgdGhp cyB2YWx1ZSB0byBPTiIsCi0iICByZXN1bHRzIGluIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBhZ2Vu dCBiZWluZyBmb3J3YXJkZWQgdG8gdGhlIHJlbW90ZSIsCi0iICBjb21wdXRlci4gIFRoZSBkZWZh dWx0IGlzIE9GRi4iLAotIiAiLAotIlNFVCBTU0ggQ0hFQ0stSE9TVC1JUCB7IE9OLCBPRkYgfSIs Ci0iICBTcGVjaWZpZXMgd2hldGhlciB0aGUgcmVtb3RlIGhvc3QncyBpcC1hZGRyZXNzIHNob3Vs ZCBiZSBjaGVja2VkIiwKLSIgIGFnYWluc3QgdGhlIG1hdGNoaW5nIGhvc3Qga2V5IGluIHRoZSBr bm93bl9ob3N0cyBmaWxlLiAgVGhpcyBjYW4gYmUiLAotIiAgdXNlZCB0byBkZXRlcm1pbmUgaWYg dGhlIGhvc3Qga2V5IGNoYW5nZWQgYXMgYSByZXN1bHQgb2YgRE5TIHNwb29maW5nLiIsCi0iICBU aGUgZGVmYXVsdCBpcyBPTi4iLAotIiAiLAotIlNFVCBTU0ggQ09NUFJFU1NJT04geyBPTiwgT0ZG IH0iLAotIiAgU3BlY2lmaWVzIHdoZXRoZXIgY29tcHJlc3Npb24gd2lsbCBiZSB1c2VkLiAgVGhl IGRlZmF1bHQgaXMgT04uIiwKLSIgIiwKLSJTRVQgU1NIIERZTkFNSUMtRk9SV0FSRElORyB7IE9O LCBPRkYgfSIsCi0iICBTcGVjaWZpZXMgd2hldGhlciBLZXJtaXQgaXMgdG8gYWN0IGFzIGEgU09D S1M0IHNlcnZpY2Ugb24gcG9ydCAxMDgwIiwKLSIgIHdoZW4gY29ubmVjdGVkIHRvIGEgcmVtb3Rl IGhvc3QgdmlhIFNTSC4gIFdoZW4gS2VybWl0IGFjdHMgYXMgYSBTT0NLUzQiLAotIiAgc2Vydmlj ZSwgaXQgYWNjZXB0cyBjb25uZWN0aW9uIHJlcXVlc3RzIGFuZCBmb3J3YXJkcyB0aGUgY29ubmVj dGlvbnMiLAotIiAgdGhyb3VnaCB0aGUgcmVtb3RlIGhvc3QuICBUaGUgZGVmYXVsdCBpcyBPRkYu IiwKLSIgIiwKLSJTRVQgU1NIIEdBVEVXQVktUE9SVFMgeyBPTiwgT0ZGIH0iLAotIiAgU3BlY2lm aWVzIHdoZXRoZXIgS2VybWl0IHNob3VsZCBhY3QgYXMgYSBnYXRld2F5IGZvciBmb3J3YXJkZWQi LAotIiAgY29ubmVjdGlvbnMgcmVjZWl2ZWQgZnJvbSB0aGUgcmVtb3RlIGhvc3QuICBUaGUgZGVm YXVsdCBpcyBPRkYuIiwKLSIgIiwKLSJTRVQgU1NIIEdTU0FQSSBERUxFR0FURS1DUkVERU5USUFM UyB7IE9OLCBPRkYgfSIsCi0iICBTcGVjaWZpZXMgd2hldGhlciBLZXJtaXQgc2hvdWxkIGRlbGVn YXRlIEdTU0FQSSBjcmVkZW50aWFscyB0byAiLAotIiAgdGhlIHJlbW90ZSBob3N0IGFmdGVyIGF1 dGhlbnRpY2F0aW9uLiAgRGVsZWdhdGluZyBjcmVkZW50aWFscyBhbGxvd3MiLAotIiAgdGhlIGNy ZWRlbnRpYWxzIHRvIGJlIHVzZWQgZnJvbSB0aGUgcmVtb3RlIGhvc3QuICBUaGUgZGVmYXVsdCBp cyBPRkYuIiwKLSIgIiwKLSJTRVQgU1NIIEhFQVJUQkVBVC1JTlRFUlZBTCA8c2Vjb25kcz4iLAot IiAgU3BlY2lmaWVzIGEgbnVtYmVyIG9mIHNlY29uZHMgb2YgaWRsZSB0aW1lIGFmdGVyIHdoaWNo IGFuIElHTk9SRSIsCi0iICBtZXNzYWdlIHdpbGwgYmUgc2VudCB0byB0aGUgc2VydmVyLiAgVGhp cyBwdWxzZSBpcyB1c2VmdWwgZm9yIiwKLSIgIG1haW50YWluaW5nIGNvbm5lY3Rpb25zIHRocm91 Z2ggSFRUUCBQcm94eSBzZXJ2ZXJzIGFuZCBOZXR3b3JrIiwKLSIgIEFkZHJlc3MgVHJhbnNsYXRv cnMuICBUaGUgZGVmYXVsdCBpcyBPRkYgKDAgc2Vjb25kcykuIiwKLSIgIiwKLSJTRVQgU1NIIElE RU5USVRZLUZJTEUgZmlsZW5hbWUgWyBmaWxlbmFtZSBbIC4uLiBdIF0iLAotIiAgU3BlY2lmaWVz IG9uZSBvciBtb3JlIGZpbGVzIGZyb20gd2hpY2ggdGhlIHVzZXIncyBhdXRob3JpemF0aW9uIiwK LSIgIGlkZW50aXRpZXMgKHByaXZhdGUga2V5cykgYXJlIHRvIGJlIHJlYWQgd2hlbiB1c2luZyBw dWJsaWMga2V5IiwKLSIgIGF1dGhvcml6YXRpb24uICBUaGVzZSBhcmUgZmlsZXMgdXNlZCBpbiBh ZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBmaWxlczoiLAotIiAiLAotIiAgICBcXHYoYXBwZGF0YSlz c2gvaWRlbnRpdHkgICAgICBWMSBSU0EiLAotIiAgICBcXHYoYXBwZGF0YSlzc2gvaWRfcnNhICAg ICAgICBWMiBSU0EiLAotIiAgICBcXHYoYXBwZGF0YSlzc2gvaWRfZHNhICAgICAgICBWMiBEU0Ei LAotIiAiLAotIlNFVCBTU0ggS0VSQkVST1M0IFRHVC1QQVNTSU5HIHsgT04sIE9GRiB9IiwKLSIg IFNwZWNpZmllcyB3aGV0aGVyIEtlcm1pdCBzaG91bGQgZm9yd2FyZCBLZXJiZXJvcyA0IFRHVHMg dG8gdGhlIGhvc3QuIiwKLSIgIFRoZSBkZWZhdWx0IGlzIE9GRi4iLAotIiAiLAotIlNFVCBTU0gg S0VSQkVST1M1IFRHVC1QQVNTSU5HIHsgT04sIE9GRiB9IiwKLSIgIFNwZWNpZmllcyB3aGV0aGVy IEtlcm1pdCBzaG91bGQgZm9yd2FyZCBLZXJiZXJvcyA1IFRHVHMgdG8gdG8gdGhlIiwKLSIgIGhv c3QuICBUaGUgZGVmYXVsdCBpcyBPRkYuIiwKLSIgIiwKLSJTRVQgU1NIIFBSSVZJTEVHRUQtUE9S VCB7IE9OLCBPRkYgfSIsCi0iICBTcGVjaWZpZXMgd2hldGhlciBhIHByaXZpbGVnZWQgcG9ydCAo bGVzcyB0aGFuIDEwMjQpIHNob3VsZCBiZSB1c2VkIiwKLSIgIHdoZW4gY29ubmVjdGluZyB0byB0 aGUgaG9zdC4gIFByaXZpbGVnZWQgcG9ydHMgYXJlIG5vdCByZXF1aXJlZCBleGNlcHQiLAotIiAg d2hlbiB1c2luZyBTU0ggVjEgd2l0aCBSaG9zdHMgb3IgUmhvc3RzUlNBIGF1dGhvcml6YXRpb24u ICBUaGUgZGVmYXVsdCIsCi0iICBpcyBPRkYuIiwKLSIgIiwKLSJTRVQgU1NIIFFVSUVUIHsgT04s IE9GRiB9IiwKLSIgIFNwZWNpZmllcyB3aGV0aGVyIGFsbCBtZXNzYWdlcyBnZW5lcmF0ZWQgaW4g Y29uanVuY3Rpb24gd2l0aCBTU0giLAotIiAgcHJvdG9jb2xzIHNob3VsZCBiZSBzdXBwcmVzc2Vk LiAgVGhlIGRlZmF1bHQgaXMgT0ZGLiIsCi0iICIsCi0iU0VUIFNTSCBTVFJJQ1QtSE9TVC1LRVkt Q0hFQ0sgeyBBU0ssIE9OLCBPRkYgfSIsCi0iICBTcGVjaWZpZXMgaG93IEtlcm1pdCBzaG91bGQg YmVoYXZlIGlmIHRoZSB0aGUgaG9zdCBrZXkgY2hlY2sgZmFpbHMuIiwKLSIgIFdoZW4gc3RyaWN0 IGhvc3Qga2V5IGNoZWNraW5nIGlzIE9GRiwgdGhlIG5ldyBob3N0IGtleSBpcyBhZGRlZCB0byB0 aGUiLAotIiAgcHJvdG9jb2wtdmVyc2lvbi1zcGVjaWZpYyB1c2VyLWtub3duLWhvc3RzLWZpbGUu ICBXaGVuIHN0cmljdCBob3N0IGtleSIsCi0iICBjaGVja2luZyBpcyBPTiwgdGhlIG5ldyBob3N0 IGtleSBpcyByZWZ1c2VkIGFuZCB0aGUgY29ubmVjdGlvbiBpcyIsCi0iICBkcm9wcGVkLiAgV2hl biBzZXQgdG8gQVNLLCBLZXJtaXQgcHJvbXB0IHlvdSB0byBzYXkgd2hldGhlciB0aGUgbmV3IiwK LSIgIGhvc3Qga2V5IHNob3VsZCBiZSBhY2NlcHRlZC4gIFRoZSBkZWZhdWx0IGlzIEFTSy4iLAot IiAiLAotIiAgU3RyaWN0IGhvc3Qga2V5IGNoZWNraW5nIHByb3RlY3RzIHlvdSBhZ2FpbnN0IFRy b2phbiBob3JzZSBhdHRhY2tzLiIsCi0iICBJdCBkZXBlbmRzIG9uIHlvdSB0byBtYWludGFpbiB0 aGUgY29udGVudHMgb2YgdGhlIGtub3duLWhvc3RzLWZpbGUiLAotIiAgd2l0aCBjdXJyZW50IGFu ZCB0cnVzdGVkIGhvc3Qga2V5cy4iLAotIiAiLAotIlNFVCBTU0ggVVNFLU9QRU5TU0gtQ09ORklH IHsgT04sIE9GRiB9IiwKLSIgIFNwZWNpZmllcyB3aGV0aGVyIEtlcm1pdCBzaG91bGQgcGFyc2Ug YW4gT3BlblNTSCBjb25maWd1cmF0aW9uIGZpbGUiLAotIiAgYWZ0ZXIgYXBwbHlpbmcgS2VybWl0 J3MgU0VUIFNTSCBjb21tYW5kcy4gIFRoZSBjb25maWd1cmF0aW9uIGZpbGUiLAotIiAgd291bGQg YmUgbG9jYXRlZCBhdCBcXHYoaG9tZSlzc2gvc3NoX2NvbmZpZy4gIFRoZSBkZWZhdWx0IGlzIE9G Ri4iLAotIiAiLAotIlNFVCBTU0ggVjEgQ0lQSEVSIHsgM0RFUywgQkxPV0ZJU0gsIERFUyB9IiwK LSIgIFNwZWNpZmllcyB3aGljaCBjaXBoZXIgc2hvdWxkIGJlIHVzZWQgdG8gcHJvdGVjdCBTU0gg dmVyc2lvbiAxIiwKLSIgIGNvbm5lY3Rpb25zLiAgVGhlIGRlZmF1bHQgaXMgM0RFUy4iLAotIiAi LAotIlNFVCBTU0ggVjEgR0xPQkFMLUtOT1dOLUhPU1RTLUZJTEUgZmlsZW5hbWUiLAotIiAgU3Bl Y2lmaWVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3lzdGVtLXdpZGUga25vd24taG9zdHMgZmlsZS4g IFRoZSIsCi0iICBkZWZhdWx0IGlzOiIsCi0iICIsCi0iICAgIFx2KGNvbW1vbilzc2hfa25vd25f aG9zdHMiLAotIiAiLAotIlNFVCBTU0ggVjEgVVNFUi1LTk9XTi1IT1NUUy1GSUxFIGZpbGVuYW1l IiwKLSIgIFNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgdGhlIHVzZXIta25vd24taG9zdHMtZmls ZS4gIFRoZSBkZWZhdWx0IiwKLSIgIGxvY2F0aW9uIGlzOiIsCi0iICIsCi0iICAgIFxcdihhcHBk YXRhKXNzaC9rbm93bl9ob3N0cyIsCi0iICIsCi0iU0VUIFNTSCBWMiBBVVRIRU5USUNBVElPTiB7 IEVYVEVSTkFMLUtFWVgsIEdTU0FQSSwgSE9TVEJBU0VELCAiLAotIiAgICBLRVlCT0FSRC1JTlRF UkFDVElWRSwgUEFTU1dPUkQsIFBVQktFWSwgU1JQLUdFWC1TSEExIH0gWyAuLi4gXSIsCi0iICBT cGVjaWZpZXMgYW4gb3JkZXJlZCBsaXN0IG9mIFNTSCB2ZXJzaW9uIDIgYXV0aGVudGljYXRpb24g bWV0aG9kcyB0byIsCi0iICBiZSB1c2VkIHdoZW4gY29ubmVjdGluZyB0byB0aGUgcmVtb3RlIGhv c3QuICBUaGUgZGVmYXVsdCBsaXN0IGlzOiIsCi0iICIsCi0iICAgIGV4dGVybmFsLWtleXggZ3Nz YXBpIGhvc3RiYXNlZCBwdWJsaWNrZXkgc3JwLWdleC1zaGExIHB1YmxpY2tleSIsCi0iICAgIGtl eWJvYXJkLWludGVyYWN0aXZlIHBhc3N3b3JkIG5vbmUiLAotIiAiLAotIlNFVCBTU0ggVjIgQVVU Ty1SRUtFWSB7IE9OLCBPRkYgfSIsCi0iICBTcGVjaWZpZXMgd2hldGhlciBLZXJtaXQgYXV0b21h dGljYWxseSBpc3N1ZXMgcmVrZXlpbmcgcmVxdWVzdHMiLAotIiAgb25jZSBhbiBob3VyIHdoZW4g U1NIIHZlcnNpb24gMiBpbiBpbiB1c2UuICBUaGUgZGVmYXVsdCBpcyBPTi4iLAotIiAiLAotIlNF VCBTU0ggVjIgQ0lQSEVSUyB7IDNERVMtQ0JDLCBBRVMxMjgtQ0JDIEFFUzE5Mi1DQkMgQUVTMjU2 LUNCQyIsCi0iICAgICBBUkNGT1VSIEJMT1dGSVNILUNCQyBDQVNUMTI4LUNCQyBSSUpOREFFTDEy OC1DQkMgUklKTkRBRUwxOTItQ0JDIiwKLSIgICAgIFJJSk5EQUVMMjU2LUNCQyB9IiwKLSIgIFNw ZWNpZmllcyBhbiBvcmRlcmVkIGxpc3Qgb2YgU1NIIHZlcnNpb24gY2lwaGVycyB0byBiZSB1c2Vk IHRvIGVuY3J5cHQiLAotIiAgdGhlIGVzdGFibGlzaGVkIGNvbm5lY3Rpb24uICBUaGUgZGVmYXVs dCBsaXN0IGlzOiIsCi0iICIsCi0iICAgIGFlczEyOC1jYmMgM2Rlcy1jYmMgYmxvd2Zpc2gtY2Jj IGNhc3QxMjgtY2JjIGFyY2ZvdXIgYWVzMTkyLWNiYyIsCi0iICAgIGFlczI1Ni1jYmMiLAotIiAi LAotIiAgXCJyaWpuZGFlbFwiIGlzIGFuIGFsaWFzIGZvciBcImFlc1wiLiIsCi0iICIsCi0iU0VU IFNTSCBWMiBHTE9CQUwtS05PV04tSE9TVFMtRklMRSBmaWxlbmFtZSIsCi0iICBTcGVjaWZpZXMg dGhlIGxvY2F0aW9uIG9mIHRoZSBzeXN0ZW0td2lkZSBrbm93bi1ob3N0cyBmaWxlLiAgVGhlIGRl ZmF1bHQiLAotIiAgbG9jYXRpb24gaXM6IiwKLSIgIiwKLSIgICAgXFx2KGNvbW1vbilzc2gva25v d25faG9zdHMyIiwKLSIgIiwKLSJTRVQgU1NIIFYyIEhPU1RLRVktQUxHT1JJVEhNUyB7IFNTSC1E U1MsIFNTSC1SU0EgfSIsCi0iICBTcGVjaWZpZXMgYW4gb3JkZXJlZCBsaXN0IG9mIGhvc3RrZXkg YWxnb3JpdGhtcyB0byBiZSB1c2VkIHRvIHZlcmlmeSIsCi0iICB0aGUgaWRlbnRpdHkgb2YgdGhl IGhvc3QuICBUaGUgZGVmYXVsdCBsaXN0IGlzIiwKLSIgIiwKLSIgICAgc3NoLXJzYSBzc2gtZHNz IiwKLSIgIiwKLSJTRVQgU1NIIFYyIE1BQ1MgeyBITUFDLU1ENSBITUFDLU1ENS05NiBITUFDLVJJ UEVNRDE2MCBITUFDLVNIQTEiLAotIiAgICAgSE1BQy1TSEExLTk2IH0iLAotIiAgU3BlY2lmaWVz IGFuIG9yZGVyZWQgbGlzdCBvZiBNZXNzYWdlIEF1dGhlbnRpY2F0aW9uIENvZGUgYWxnb3JpdGht cyB0byIsCi0iICBiZSB1c2VkIGZvciBpbnRlZ3JpdHkgIHByb3RlY3Rpb24gb2YgdGhlIGVzdGFi bGlzaGVkIGNvbm5lY3Rpb24uICBUaGUiLAotIiAgZGVmYXVsdCBsaXN0IGlzOiIsCi0iICIsCi0i ICAgIGhtYWMtbWQ1IGhtYWMtc2hhMSBobWFjLXJpcGVtZDE2MCBobWFjLXNoYTEtOTYgaG1hYy1t ZDUtOTYiLAotIiAiLAotIlNFVCBTU0ggVjIgVVNFUi1LTk9XTi1IT1NUUy1GSUxFIGZpbGVuYW1l IiwKLSIgIFNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgdGhlIHVzZXIta25vd24taG9zdHMgZmls ZS4gIFRoZSBkZWZhdWx0IiwKLSIgIGxvY2F0aW9uIGlzOiIsCi0iICIsCi0iICAgIFxcdihhcHBk YXRhKXNzaC9rbm93bl9ob3N0czIiLAotIiAiLAotIlNFVCBTU0ggVkVSQk9TRSBsZXZlbCIsCi0i ICBTcGVjaWZpZXMgaG93IG1hbnkgbWVzc2FnZXMgc2hvdWxkIGJlIGdlbmVyYXRlZCBieSB0aGUg T3BlblNTSCBlbmdpbmUuIiwKLSIgIFRoZSBsZXZlbCBjYW4gcmFuZ2UgZnJvbSAwIHRvIDcuICBU aGUgZGVmYXVsdCB2YWx1ZSBpcyAyLiIsCi0iICIsCi0iU0VUIFNTSCBWRVJTSU9OIHsgMSwgMiwg QVVUT01BVElDIH0iLAotIiAgU3BlY2lmaWVzIHdoaWNoIFNTSCB2ZXJzaW9uIHNob3VsZCBiZSBu ZWdvdGlhdGVkLiAgVGhlIGRlZmF1bHQgaXMiLAotIiAgQVVUT01BVElDIHdoaWNoIG1lYW5zIHVz ZSB2ZXJzaW9uIDIgaWYgc3VwcG9ydGVkOyBvdGhlcndpc2UgdG8gZmFsbCIsCi0iICBiYWNrIHRv IHZlcnNpb24gMS4iLAotIiAiLAotIlNFVCBTU0ggWDExLUZPUldBUkRJTkcgeyBPTiwgT0ZGIH0i LAotIiAgU3BlY2lmaWVzIHdoZXRoZXIgWCBXaW5kb3dzIFN5c3RlbSBEYXRhIGlzIHRvIGJlIGZv cndhcmRlZCBhY3Jvc3MgdGhlIiwKLSIgIGVzdGFibGlzaGVkIFNTSCBjb25uZWN0aW9uLiAgVGhl IGRlZmF1bHQgaXMgT0ZGLiAgV2hlbiBPTiwgdGhlIERJU1BMQVkiLAotIiAgdmFsdWUgaXMgZWl0 aGVyIHNldCB1c2luZyB0aGUgU0VUIFRFTE5FVCBFTlYgRElTUExBWSBjb21tYW5kIG9yIHJlYWQi LAotIiAgZnJvbSB0aGUgRElTUExBWSBlbnZpcm9ubWVudCB2YXJpYWJsZS4iLAotIiAiLAotIlNF VCBTU0ggWEFVVEgtTE9DQVRJT04gZmlsZW5hbWUiLAotIiAgU3BlY2lmaWVzIHRoZSBsb2NhdGlv biBvZiB0aGUgeGF1dGggZXhlY3V0YWJsZSAoaWYgcHJvdmlkZWQgd2l0aCB0aGUiLAotIiAgWDEx IFNlcnZlciBzb2Z0d2FyZS4pIiwKLSNlbHNlICAvKiBTU0hCVUlMVElOICovCi0iU3ludGF4OiBT RVQgU1NIIENPTU1BTkQgY29tbWFuZCIsCi0iICBTcGVjaWZpZXMgdGhlIGV4dGVybmFsIGNvbW1h bmQgdG8gYmUgdXNlZCB0byBtYWtlIGFuIFNTSCBjb25uZWN0aW9uLiIsCi0iICBCeSBkZWZhdWx0 IGl0IGlzIFwic3NoIC1lIG5vbmVcIiAoc3NoIHdpdGggbm8gZXNjYXBlIGNoYXJhY3RlcikuIiwK LSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0iIgotfTsKLSNlbmRpZiAvKiBBTllTU0ggKi8KLQot I2lmZGVmIE5FV0ZUUAotc3RhdGljIGNoYXIgKmhteHlncHJbXSA9IHsKLSJTeW50YXg6IFNFVCBH RVQtUFVULVJFTU9URSB7IEFVVE8sIEZUUCwgS0VSTUlUfSIsCi0iICBUZWxscyBLZXJtaXQgd2hl dGhlciBHRVQsIFBVVCwgYW5kIFJFTU9URSBjb21tYW5kcyBzaG91bGQgYmUgZGlyZWN0ZWQiLAot IiAgYXQgYSBLZXJtaXQgc2VydmVyIG9yIGFuIEZUUCBzZXJ2ZXIuICBUaGUgZGVmYXVsdCBpcyBB VVRPLCBtZWFuaW5nIHRoYXQiLAotIiAgaWYgeW91IGhhdmUgb25seSBvbmUgYWN0aXZlIGNvbm5l Y3Rpb24sIHRoZSBhcHByb3ByaWF0ZSBhY3Rpb24gaXMgdGFrZW4iLAotIiAgd2hlbiB5b3UgZ2l2 ZSBhIEdFVCwgUFVULCBvciBSRU1PVEUgY29tbWFuZC4gIFNFVCBHRVQtUFVULVJFTU9URSBGVFAg Zm9yY2VzIgotLAotIiAgS2VybWl0IHRvIHRyZWF0IEdFVCwgUFVULCBhbmQgUkVNT1RFIGFzIEZU UCBjbGllbnQgY29tbWFuZHM7IHNldHRpbmcgdGhpcyIsCi0iICB0byBLRVJNSVQgZm9yY2VzIHRo ZXNlIGNvbW1hbmRzIHRvIGJlIHRyZWF0ZWQgYXMgS2VybWl0IGNsaWVudCBjb21tYW5kcy4iLAot IiAgTk9URTogUFVUIGluY2x1ZGVzIFNFTkQsIE1QVVQsIE1TRU5ELCBhbmQgYWxsIG90aGVyIHNp bWlsYXIgY29tbWFuZHMuIiwKLSIgIEFsc28gc2VlIEhFTFAgUkVNT1RFLCBIRUxQIFNFVCBMT0NV UywgSEVMUCBGVFAuIiwKLSIiCi19OwotI2VuZGlmIC8qIE5FV0ZUUCAqLwotCi0jaWZkZWYgTE9D VVMKLXN0YXRpYyBjaGFyICpobXh5bG9jdXNbXSA9IHsKLSNpZmRlZiBLVUkKLSJTeW50YXg6IFNF VCBMT0NVUyB7IEFTSywgQVVUTywgTE9DQUwsIFJFTU9URSB9IiwKLSNlbHNlCi0iU3ludGF4OiBT RVQgTE9DVVMgeyBBVVRPLCBMT0NBTCwgUkVNT1RFIH0iLAotI2VuZGlmIC8qIEtVSSAqLwotIiAg U3BlY2lmaWVzIHdoZXRoZXIgdW5wcmVmaXhlZCBmaWxlIG1hbmFnZW1lbnQgY29tbWFuZHMgc2hv dWxkIG9wZXJhdGUiLAotIiAgbG9jYWxseSBvciAod2hlbiB0aGVyZSBpcyBhIGNvbm5lY3Rpb24g dG8gYSByZW1vdGUgRlRQIG9yIEtlcm1pdCIsCi0iICBzZXJ2ZXIpIHNlbnQgdG8gdGhlIHNlcnZl ci4gIFRoZSBhZmZlY3RlZCBjb21tYW5kcyBhcmU6IENEIChDV0QpLCBQV0QsIiwKLSIgIENEVVAs IERJUkVDVE9SWSwgREVMRVRFLCBSRU5BTUUsIE1LRElSLCBhbmQgUk1ESVIuICBUbyBmb3JjZSBh bnkgb2YiLAotIiAgdGhlc2UgY29tbWFuZHMgdG8gYmUgZXhlY3V0ZWQgbG9jYWxseSwgZ2l2ZSBp dCBhbiBMLXByZWZpeDogTENELCBMRElSLCIsCi0iICBldGMuICBUbyBmb3JjZSByZW1vdGUgZXhl Y3V0aW9uLCB1c2UgdGhlIFItcHJlZml4OiBSQ0QsIFJESVIsIGFuZCBzbyIsCi0iICBvbi4gIFNI T1cgQ09NTUFORCBzaG93cyB0aGUgY3VycmVudCBMb2N1cy4iLAotIiAiLAotIiAgQnkgZGVmYXVs dCwgdGhlIExvY3VzIGZvciBmaWxlIG1hbmFnZW1lbnQgY29tbWFuZHMgaXMgc3dpdGNoZWQiLAot IiAgYXV0b21hdGljYWxseSB3aGVuZXZlciB5b3UgbWFrZSBvciBjbG9zZSBhIGNvbm5lY3Rpb246 IGlmIHlvdSBtYWtlIGFuIiwKLSIgIEZUUCBjb25uZWN0aW9uLCB0aGUgTG9jdXMgYmVjb21lcyBS RU1PVEU7IGlmIHlvdSBjbG9zZSBhbiBGVFAgY29ubmVjdGlvbiIsCi0iICBvciBtYWtlIGFueSBv dGhlciBraW5kIG9mIGNvbm5lY3Rpb24sIHRoZSBMb2N1cyBiZWNvbWVzIExPQ0FMLiIsCi0jaWZk ZWYgS1VJCi0iICIsCi0iICBUaGVyZSBhcmUgdHdvIGtpbmRzIG9mIGF1dG9tYXRpYyBzd2l0Y2hp bmc6IEFTSyAodGhlIGRlZmF1bHQpIHdoaWNoIiwKLSIgIGFza3MgeW91IGlmIGl0J3MgT0sgdG8g c3dpdGNoLCBhbmQgQVVUTywgd2hpY2ggc3dpdGNoZXMgd2l0aG91dCBhc2tpbmcuIiwKLSNlbmRp ZiAvKiBLVUkgKi8KLSIgIiwKLSIgIElmIHlvdSBnaXZlIGEgU0VUIExPQ1VTIExPQ0FMIG9yIFNF VCBMT0NVUyBSRU1PVEUgY29tbWFuZCwgdGhpcyBzZXRzIiwKLSIgIHRoZSBsb2N1cyBhcyBpbmRp Y2F0ZWQgYW5kIGRpc2FibGVzIGF1dG9tYXRpYyBzd2l0Y2hpbmcuIiwKLSNpZmRlZiBLVUkKLSIg IFNFVCBMT0NVUyBBVVRPIG9yIFNFVCBMT0NVUyBBU0sgcmVzdG9yZXMgYXV0b21hdGljIHN3aXRj aGluZy4iLAotIiAgWW91IGNhbiBhbHNvIGNoYW5nZSBMb2N1cyBzd2l0Y2hpbmcgYW5kIGJlaGF2 aW9yIGluIHRoZSBBY3Rpb25zIG1lbnUuIiwKLSNlbHNlCi0iICBTRVQgTE9DVVMgQVVUTyByZXN0 b3JlcyBhdXRvbWF0aWMgc3dpdGNoaW5nLiIsCi0jZW5kaWYgLyogS1VJICovCi0iIiwKLX07Ci0j ZW5kaWYgLyogTE9DVVMgKi8KLQotI2lmZGVmIFVOSVgKLSNpZm5kZWYgTk9QVVRFTlYKLXN0YXRp YyBjaGFyICpobXh4cHV0ZW52W10gPSB7Ci0iU3ludGF4OiBQVVRFTlYgbmFtZSB2YWx1ZSIsCi0i ICBDcmVhdGVzIG9yIG1vZGlmaWVzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aXRoIHRoZSBn aXZlbiBuYW1lIHRvIGhhdmUiLAotIiAgdGhlIGdpdmVuIHZhbHVlLiAgUHVycG9zZTogdG8gcGFz cyBwYXJhbWV0ZXJzIHRvIHN1YnByb2Nlc3NlcyB3aXRob3V0IiwKLSIgIGhhdmluZyB0aGVtIGFw cGVhciBvbiB0aGUgY29tbWFuZCBsaW5lLiAgSWYgdGhlIHZhbHVlIGlzIGJsYW5rIChlbXB0eSks IiwKLSIgIHRoZSB2YXJpYWJsZSBpcyBkZWxldGVkLiAgVGhlIHJlc3VsdCBpcyB2aXNpYmxlIHRv IHRoaXMgaW5zdGFudGlhdGlvbiBvZiIsCi0iICBDLUtlcm1pdCB2aWEgXFwkKG5hbWUpIGFuZCB0 byBhbnkgaW5mZXJpb3IgcHJvY2Vzc2VzIGJ5IHdoYXRldmVyIG1ldGhvZCIsCi0iICB0aGV5IHVz ZSB0byBhY2Nlc3MgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgVGhlIHZhbHVlIG1heSBiZSBlbmNs b3NlZCBpbiIsCi0iICBkb3VibGVxdW90ZXMgb3IgYnJhY2VzLCBidXQgaXQgbmVlZCBub3QgYmU7 IGlmIGl0IGlzIHRoZSBvdXRlcm1vc3QiLAotIiAgZG91YmxlcXVvdGVzIG9yIGJyYWNlcyBhcmUg cmVtb3ZlZC4iLAotIiAiLAotIiAgTm90ZSB0aGUgc3ludGF4OiIsCi0iICAgIFBVVEVOViBuYW1l IHZhbHVlIiwKLSIgIG5vdDoiLAotIiAgICBQVVRFTlYgbmFtZT12YWx1ZSIsCi0iICIsCi0iICBU aGVyZSBpcyBubyBlcXVhbCBzaWduIGJldHdlZW4gbmFtZSBhbmQgdmFsdWUsIGFuZCB0aGUgbmFt ZSBpdHNlbGYgbWF5IiwKLSIgIG5vdCBpbmNsdWRlIGFuIGVxdWFsIHNpZ24uIiwKLSIiLAotfTsK LSNlbmRpZgkvKiBOT1BVVEVOViAqLwotI2VuZGlmCS8qIFVOSVggKi8KLQotc3RhdGljIGNoYXIg KmhteHh0YWtbXSA9IHsKLSJTeW50YXg6IFRBS0UgZmlsZW5hbWUgWyBhcmd1bWVudHMgXSIsCi0i ICBUZWxscyBLZXJtaXQgdG8gZXhlY3V0ZSBjb21tYW5kcyBmcm9tIHRoZSBuYW1lZCBmaWxlLiAg T3B0aW9uYWwgYXJndW1lbnQiLAotIiAgd29yZHMsIGFyZSBhdXRvbWF0aWNhbGx5IGFzc2lnbmVk IHRvIHRoZSBtYWNybyBhcmd1bWVudCB2YXJpYWJsZXMgXFwlMSIsCi0iICB0aHJvdWdoIFxcJTku ICBLZXJtaXQgY29tbWFuZCBmaWxlcyBtYXkgdGhlbXNlbHZlcyBjb250YWluIFRBS0UgY29tbWFu ZHMsIiwKLSIgIHVwIHRvIGFueSByZWFzb25hYmxlIGRlcHRoIG9mIG5lc3RpbmcuIiwKLSIiCi19 OwotCi0jaWZkZWYgVENQU09DS0VUCi1zdGF0aWMgY2hhciAqaG14eGZpcmV3W10gPSB7Ci0jaWZk ZWYgT1MyCi0iRmlyZXdhbGwgVHJhdmVyc2FsIGluIEtlcm1pdCA5NSIsCi0jZWxzZQotIkZpcmV3 YWxsIFRyYXZlcnNhbCBpbiBDLUtlcm1pdCIsCi0jZW5kaWYKLSIgIiwKLSNpZm5kZWYgTkVXRlRQ Ci0jaWZuZGVmIENLSFRUUAotI2lmbmRlZiBDS19TT0NLUwotI2RlZmluZSBOT0ZJUkVXQUxMCi0j ZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0jaWZkZWYgTk9GSVJFV0FMTAotIlRoaXMgdmVyc2lvbiBv ZiBLZXJtaXQgd2FzIGJ1aWx0IHdpdGggbm8gc3VwcG9ydCBmb3IgZmlyZXdhbGwgdHJhdmVyc2Fs IiwKLSJwcm90b2NvbHMuICBLZXJtaXQgY2FuIGJlIGJ1aWx0IHdpdGggc3VwcG9ydCBmb3IgSFRU UCBQcm94eSBTZXJ2ZXJzLCIsCi0iU09DS1MgYXV0aG9yaXplZCBmaXJld2FsbCB0cmF2ZXJzYWws IGFuZCBGVFAgUGFzc2l2ZSBjb25uZWN0aW9uIG1vZGVzLiIsCi0iICIsCi0jZWxzZSAvKiBOT0ZJ UkVXQUxMICovCi0jaWZkZWYgQ0tIVFRQCi0iVGhlIHNpbXBsaXN0IGZvcm0gb2YgZmlyZXdhbGwg dHJhdmVyc2FsIGlzIHRoZSBIVFRQIENPTk5FQ1QgY29tbWFuZC4gVGhlIiwKLSJDT05ORUNUIGNv bW1hbmQgd2FzIGltcGxlbWVudGVkIHRvIGFsbG93IGEgcHVibGljIHdlYiBzZXJ2ZXIgd2hpY2gg dXN1YWxseSIsCi0icmVzaWRlcyBvbiB0aGUgYm91bmRhcnkgYmV0d2VlbiB0aGUgcHVibGljIGFu ZCBwcml2YXRlIG5ldHdvcmtzIHRvIGZvcndhcmQiLAotIkhUVFAgcmVxdWVzdHMgZnJvbSBjbGll bnRzIG9uIHRoZSBwcml2YXRlIG5ldHdvcmsgdG8gcHVibGljIHdlYiBzaXRlcy4gIFRvIiwKLSJh bGxvdyBzZWN1cmUgd2ViIGNvbm5lY3Rpb25zLCB0aGUgSFRUUCBDT05ORUNUIGNvbW1hbmQgYXV0 aGVudGljYXRlcyB0aGUiLAotImNsaWVudCB3aXRoIGEgdXNlcm5hbWUvcGFzc3dvcmQgYW5kIHRo ZW4gZXN0YWJsaXNoZXMgYSB0dW5uZWwgdG8gdGhlIiwKLSJkZXNpcmVkIGhvc3QuIiwKLQotIiAi LAotCi0iV2ViIHNlcnZlcnMgdGhhdCBzdXBwb3J0IHRoZSBDT05ORUNUIGNvbW1hbmQgY2FuIGJl IGNvbmZpZ3VyZWQgdG8gYWxsb3ciLAotIm91dGJvdW5kIGNvbm5lY3Rpb25zIGZvciBhdXRoZW50 aWNhdGVkIHVzZXJzIHRvIGFueSBUQ1AvSVAgaG9zdG5hbWUtcG9ydCIsCi0iY29tYmluYXRpb24g YWNjZXNzaWJsZSB0byB0aGUgV2ViIHNlcnZlci4gIEhUVFAgQ09OTkVDVCBjYW4gYmUgdXNlZCBv bmx5IiwKLSJ3aXRoIFRDUC1iYXNlZCBwcm90b2NvbHMuICBQcm90b2NvbHMgc3VjaCBhcyBLZXJi ZXJvcyBhdXRoZW50aWNhdGlvbiB0aGF0IiwKLSJ1c2UgVURQL0lQIGNhbm5vdCBiZSB0dW5uZWxl ZCB1c2luZyBIVFRQIENPTk5FQ1QuIiwKLQotIiAiLAotCi0iU0VUIFRDUCBIVFRQLVBST1hZIFtz d2l0Y2hlc10gWzxob3N0bmFtZSBvciBpcC1hZGRyZXNzPls6PHBvcnQ+XV0iLAotIiAgSWYgYSBo b3N0bmFtZSBvciBpcC1hZGRyZXNzIGlzIHNwZWNpZmllZCwgS2VybWl0IHVzZXMgdGhlIGdpdmVu IiwKLSIgIHByb3h5IHNlcnZlciB3aGVuIGF0dGVtcHRpbmcgb3V0Z29pbmcgVENQIGNvbm5lY3Rp b25zLiAgSWYgbm8gaG9zdG5hbWVyIiwKLSIgIG9yIGlwLWFkZHJlc3MgaXMgc3BlY2lmaWVkLCBh bnkgcHJldmlvdXNseSBzcGVjaWZpZWQgUHJveHkgc2VydmVyIGlzIiwKLSIgIHJlbW92ZWQuICBJ ZiBubyBwb3J0IG51bWJlciBpcyBzcGVjaWZpZWQsIHRoZSBcImh0dHBcIiBzZXJ2aWNlIGlzIHVz ZWQuIiwKLSIgIFtzd2l0Y2hlc10gY2FuIGJlIG9uZSBvciBtb3JlIG9mOiIsCi0iICAgICAvQUdF TlQ6PGFnZW50PiAvVVNFUjo8dXNlcj4gL1BBU1NXT1JEOjxwYXNzd29yZD4iLAotIiAgU3dpdGNo IHBhcmFtZXRlcnMgYXJlIHVzZWQgd2hlbiBjb25uZWN0aW5nIHRvIHRoZSBwcm94eSBzZXJ2ZXIg YW5kIiwKLSIgIG92ZXJyaWRlIGFueSBvdGhlciB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBj b25uZWN0aW9uLiIsCi0iICIsCi0KLSNlbmRpZiAvKiBDS0hUVFAgKi8KLSNpZmRlZiBDS19TT0NL UwotCi0iSW4gdGhlIGVhcmx5IDE5OTBzIGFzIGZpcmV3YWxscyB3ZXJlIGJlY29taW5nIHByZXZh bGVudCwgRGF2aWQgS29ibGFzIiwKLSJkZXZlbG9wZWQgdGhlIFNPQ0tTIHByb3RvY29sIGZvciBU Q1AvSVAgZmlyZXdhbGwgdHJhdmVyc2FsLiAgVHdvIHZlcnNpb25zIiwKLSJvZiBTT0NLUyBhcmUg Y3VycmVudGx5IGluIHVzZTogVmVyc2lvbiA0LjIgbGV0cyBUQ1AvSVAgY2xpZW50IGFwcGxpY2F0 aW9ucyIsCi0idHJhdmVyc2UgZmlyZXdhbGxzLCBzaW1pbGFyIHRvIEhUVFAgQ09OTkVDVCwgZXhj ZXB0IHRoYXQgdGhlIFNPQ0tTIGNsaWVudCIsCi0iaXMgYXdhcmUgb2YgdGhlIHB1YmxpYyBzb3Vy Y2UgSVAgYWRkcmVzcyBhbmQgcG9ydCwgd2hpY2ggY2FuIGJlIHVzZWQgd2l0aGluIiwKLSJ0aGUg YXBwbGljYXRpb24gcHJvdG9jb2wgdG8gYXNzaXN0IGluIHNlY3VyaW5nIHRoZSBjb25uZWN0aW9u IChlLmcuIEZUUCIsCi0ic2Vzc2lvbnMgc2VjdXJlZCB3aXRoIEdTU0FQSSBLZXJiZXJvcyA1KS4i LAotCi0iICIsCi0KLSJJbiAxOTk1IHRoZSBJRVRGIGlzc3VlZCBTT0NLUyBQcm90b2NvbCBWZXJz aW9uIDUgKFJGQyAxOTI4KSwgd2hpY2ggaXMiLAotInNpZ25pZmljYW50bHkgbW9yZSBnZW5lcmFs IHRoYW4gdmVyc2lvbiA0LiAgQmVzaWRlcyBzdXBwb3J0aW5nIGNsaWVudC0iLAotInRvLXNlcnZl ciBUQ1AvSVAgY29ubmVjdGlvbnMsIGl0IGFsc28gaW5jbHVkZXM6IiwKLQotIiAiLAotIiAuIEF1 dGhlbnRpY2F0ZWQgZmlyZXdhbGwgdHJhdmVyc2FsIG9mIFVEUC9JUCBwYWNrZXRzLiIsCi0iIC4g QXV0aGVudGljYXRlZCBiaW5kaW5nIG9mIGluY29taW5nIHB1YmxpYyBwb3J0cyBvbiB0aGUgZmly ZXdhbGwuIiwKLSIgIiwKLQotIlRoaXMgbGV0cyBhIHNlcnZpY2Ugb24gdGhlIHByaXZhdGUgbmV0 d29yayBvZmZlciBwdWJsaWMgc2VydmljZXMuICBJdCBhbHNvIiwKLSJsZXRzIGNsaWVudCBhcHBs aWNhdGlvbnMgbGlrZSBGVFAgZXN0YWJsaXNoIGEgdGVtcG9yYXJ5IHB1YmxpYyBwcmVzZW5jZSIs Ci0idGhhdCBjYW4gYmUgdXNlZCBieSB0aGUgRlRQIHNlcnZlciB0byBjcmVhdGUgYSBkYXRhIGNo YW5uZWwuICBCeSBhbGxvd2luZyIsCi0idGhlIGNsaWVudCB0byBiaW5kIHRvIGEgcHVibGljIHBv cnQgb24gdGhlIGZpcmV3YWxsIGFuZCBiZSBhd2FyZSBvZiB0aGUiLAotInB1YmxpYyBhZGRyZXNz LCBTT0NLUyA1IGxldHMgdGhlIGFwcGxpY2F0aW9uIHByb3RvY29sIGNvbW11bmljYXRlIHRoaXMi LAotImluZm9ybWF0aW9uIHRvIHRoZSBzZXJ2ZXIuIiwKLQotIiAiLAotCi0jaWZkZWYgT1MyCi0j aWZkZWYgTlQKLSJLZXJtaXQgOTUgc3VwcG9ydHMgU09DS1MgNC4yLiAgVGhlIFNPQ0tTIFNlcnZl ciBpcyBzcGVjaWZpZWQgd2l0aDoiLAotIiAiLAotIiAgU0VUIFRDUCBTT0NLUy1TRVJWRVIgaG9z dG5hbWUvaXAtYWRkcmVzcyIsCi0iICIsCi0iVGhlIFNPQ0tTLkNPTkYgZmlsZSBpcyBmb3VuZCBi eSBleGFtaW5pbmcgdGhlIEVUQyBlbnZpcm9ubWVudCB2YXJpYWJsZTsiLAotInNlYXJjaGluZyBp biBcXFdJTkRPV1Mgb24gV2luZG93cyA5NS85OC9NRTsgb3IgdGhlIiwKLSJcXFdJTkRPV1NcXFNZ U1RFTVxcRFJJVkVSU1xcRVRDIGRpcmVjdG9yeSBvbiBOVFxcMjAwMFxcWFAgc3lzdGVtcy4iLAot Ci0jZWxzZSAvKiBOVCAqLwotCi0iS2VybWl0LzIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgU09DS1Mg NC4yIHNlcnZlcnMgd2hlbiB1c2luZyBJQk0gVENQL0lQIDIuMCwiLAotIklCTSBPUy8yIFdBUlAs IG9yIGEgY29tcGF0aWJsZSBwcm90b2NvbCBzdGFjay4gU09DS1MgaXMgb25lIHBvcHVsYXIgbWVh bnMiLAotIm9mIGltcGxlbWVudGluZyBhIGZpcmV3YWxsIGJldHdlZW4gYSBwcml2YXRlIG5ldHdv cmsgYW5kIHRoZSBJbnRlcm5ldC4iLAotIiAiLAotIktlcm1pdC8yIHNoYXJlcyB0aGUgc2FtZSBT T0NLUyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXMgSUJNIEdvcGhlci4gSXQgYWxzbyIsCi0ic3Vw cG9ydHMgdGhlIHVzZSBvZiBsb2NhbCBTT0NLUyBjb25maWd1cmF0aW9uIGZpbGVzLiIsCi0iICIs Ci0iVG8gc3BlY2lmeSB0aGUgZGVmYXVsdCBTT0NLUyBTZXJ2ZXIsIGFkZCBTRVQgU09DS1NfU0VS VkVSPSB0byB5b3VyIiwKLSJDT05GSUcuU1lTIGZpbGUuIiwKLSIgIiwKLSJJZiB5b3UgbXVzdCB1 c2UgYSBTT0NLUyBEaXN0cmlidXRlZCBOYW1lIFNlcnZlciwgYWRkIFNFVCBTT0NLU19OUz0gdG8g eW91ciIsCi0iQ09ORklHLlNZUyBmaWxlLiIsCi0iICIsCi0KLSJJZiB5b3UgbXVzdCB1c2UgYSBz cGVjaWZpYyB3aXRoIHlvdXIgU09DS1Mgc2VydmVyLCBiZSBzdXJlIHRvIGFkZCBTRVQgVVNFUj0i LAotInRvIHlvdXIgQ09ORklHLlNZUyBmaWxlLiBPdGhlcndpc2UsIFwib3MydXNlclwiIGlzIHVz ZWQgYnkgZGVmYXVsdC4iLAotCi0iICIsCi0KLSJUaGUgU09DS1MgY29uZmlndXJhdGlvbiBmaWxl IG11c3QgYmUgcGxhY2VkIGluIHRoZSBkaXJlY3RvcnkgcG9pbnRlZCB0byBieSIsCi0idGhlIEVU QyBlbnZpcm9ubWVudCB2YXJpYWJsZSBhcyBkZWNsYXJlZCBpbiB5b3VyIENPTkZJRy5TWVMgZmls ZS4gVGhlIG5hbWUiLAotInNob3VsZCBiZSBTT0NLUy5DT05GLiBPbiBhIEZBVCBmaWxlIHN5c3Rl bSwgdXNlIFNPQ0tTLkNORi4iLAotCi0iICIsCi0iVGhlIGZvcm1hdCBvZiB0aGUgbGluZXMgaW4g dGhlIFNPQ0tTIGNvbmZpZ3VyYXRpb24gZmlsZSBhcmUgYXMgZm9sbG93czoiLAotIiAiLAotIiAu ICMgY29tbWVudHMiLAotIiAuIGRlbnkgWyo9dXNlcmxpc3RdIGRzdF9hZGRyIGRzdF9tYXNrIFtv cCBwb3J0XSIsCi0iIC4gZGlyZWN0IFsqPXVzZXJsaXN0XSBkc3RfYWRkciBkc3RfbWFzayBbb3Ag cG9ydF0iLAotIiAuIHNvY2tkIFtAPXNlcnZlcmxpc3RdIFsqPXVzZXJsaXN0XSBkc3RfYWRkciBk c3RfbWFzayBbb3AgcG9ydF0iLAotIiAiLAotCi0ib3AgbXVzdCBiZSBvbmUgb2YgJ2VxJywgJ25l cScsICdsdCcsICdndCcsICdsZScsIG9yICdnZScuIGRzdF9hZGRyLCIsCi0iZHN0X21hc2ssIGFu ZCBwb3J0IG1heSBiZSBlaXRoZXIgbnVtZXJpYyBvciBuYW1lIGVxdWl2YWxlbnRzLiIsCi0KLSIg IiwKLQotIktlcm1pdC8yIGlnbm9yZXMgdGhlIFsqPXVzZXJsaXN0XSBhbmQgW0A9c2VydmVybGlz dF0gZmllbGRzLiBNYXRjaGVzIGFyZSIsCi0iZGV0ZXJtaW5lZCBvbiBhIGZpcnN0IG1hdGNoIG5v dCBhIGJlc3QgbWF0Y2ggYmFzaXMuIEFkZHJlc3NlcyBmb3Igd2hpY2ggbm8iLAotIm1hdGNoIGlz IGZvdW5kIGRlZmF1bHQgdG8gXCJzb2NrZFwiLiIsCi0KLSIgIiwKLQotIkZvciBjb21wbGV0ZW5l c3M6IEZpZWxkcyBpbiBzcXVhcmUgYnJhY2tldHMgYXJlIG9wdGlvbmFsLiBUaGUgb3B0aW9uYWwi LAotIkA9c2VydmVybGlzdCBmaWVsZCB3aXRoIGEgJ3NvY2tkJyBsaW5lIHNwZWNpZmllcyB0aGUg bGlzdCBvZiBTT0NLUyBzZXJ2ZXJzIiwKLSJ0aGUgY2xpZW50IHNob3VsZCB0cnkgKGluIHRoZSBn aXZlbiBvcmRlcikgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBTT0NLUyIsCi0ic2VydmVyLiBJZiB0 aGUgQD1zZXJ2ZXJsaXN0IHBhcnQgaXMgb21pdHRlZCwgdGhlbiB0aGUgZGVmYXVsdCBTT0NLUyBz ZXJ2ZXIiLAotImlzIHVzZWQuICBDb21tYXMgYXJlIHVzZWQgaW4gdGhlIHVzZXJsaXN0IGFuZCBz ZXJ2ZXJsaXN0IGFzIHNlcGFyYXRvcnMsIG5vIiwKLSJ3aGl0ZSBzcGFjZXMgYXJlIGFsbG93ZWQu IiwKLQotI2VuZGlmIC8qIE5UICovCi0KLSIgIiwKLQotI2Vsc2UgLyogT1MyICovCi0jaWZkZWYg Q0tfU09DS1M1Ci0iVGhpcyB2ZXJzaW9uIG9mIEMtS2VybWl0IHN1cHBvcnRzIFNPQ0tTIHZlcnNp b24gNS4iLAotI2Vsc2UgLyogQ0tfU09DS1M1ICovCi0iVGhpcyB2ZXJzaW9uIG9mIEMtS2VybWl0 IHN1cHBvcnRzIFNPQ0tTIHZlcnNpb24gNC4iLAotI2VuZGlmIC8qIENLX1NPQ0tTNSAqLwotCi0i U2VlIHRoZSBtYW4gcGFnZSAob3Igb3RoZXIgc3lzdGVtIGRvY3VtZW50YXRpb24pIGZvciBpbmZv cm1hdGlvbiBvbiIsCi0iY29uZmlndXJpbmcgdGhlIFNPQ0tTIGxpYnJhcnkgdmlhIHRoZSAvZXRj L3NvY2tzLmNvbmYgZmlsZS4iLAotCi0jZW5kaWYgLyogT1MyICovCi0iICIsCi0jZW5kaWYgLyog Q0tfU09DS1MgKi8KLQotI2lmZGVmIE5FV0ZUUAotCi0iRlRQIGlzIG9uZSBvZiB0aGUgZmV3IHdl bGwta25vd24gSW50ZXJuZXQgc2VydmljZXMgdGhhdCByZXF1aXJlcyIsCi0ibXVsdGlwbGUgY29u bmVjdGlvbnMuICBBcyBkZXNjcmliZWQgYWJvdmUsIEZUUCBvcmlnaW5hbGx5IHJlcXVpcmVkIHRo ZSIsCi0ic2VydmVyIHRvIGVzdGFibGlzaCB0aGUgZGF0YSBjb25uZWN0aW9uIHRvIHRoZSBjbGll bnQgdXNpbmcgYSBkZXN0aW5hdGlvbiIsCi0iYWRkcmVzcyBhbmQgcG9ydCBwcm92aWRlZCBieSB0 aGUgY2xpZW50LiAgVGhpcyBkb2Vzbid0IHdvcmsgd2l0aCBwb3J0IiwKLSJmaWx0ZXJpbmcgZmly ZXdhbGxzLiIsCi0KLSIgIiwKLQotIkxhdGVyLCBGVFAgcHJvdG9jb2wgYWRkZWQgYSBcInBhc3Np dmVcIiBtb2RlLCBpbiB3aGljaCBjb25uZWN0aW9ucyBmb3IiLAotInRoZSBkYXRhIGNoYW5uZWxz IGFyZSBjcmVhdGVkIGluIHRoZSByZXZlcnNlIGRpcmVjdGlvbi4gIEluc3RlYWQgb2YgdGhlIiwK LSJzZXJ2ZXIgZXN0YWJsaXNoaW5nIGEgY29ubmVjdGlvbiB0byB0aGUgY2xpZW50LCB0aGUgY2xp ZW50IG1ha2VzIGEgc2Vjb25kIiwKLSJjb25uZWN0aW9uIHdpdGggdGhlIHNlcnZlciBhcyB0aGUg ZGVzdGluYXRpb24uICBUaGlzIHdvcmtzIGp1c3QgZmluZSBhcyIsCi0ibG9uZyBhcyB0aGUgY2xp ZW50IGlzIGJlaGluZCB0aGUgZmlyZXdhbGwgYW5kIHRoZSBzZXJ2ZXIgaXMgaW4gcHVibGljIiwK LSJhZGRyZXNzIHNwYWNlLiAgSWYgdGhlIHNlcnZlciBpcyBiZWhpbmQgYSBmaXJld2FsbCB0aGVu IHRoZSB0cmFkaXRpb25hbCIsCi0iYWN0aXZlIG1vZGUgbXVzdCBiZSB1c2VkLiAgSWYgYm90aCB0 aGUgY2xpZW50IGFuZCBzZXJ2ZXIgYXJlIGJlaGluZCB0aGVpciIsCi0ib3duIHBvcnQgZmlsdGVy aW5nIGZpcmV3YWxscyB0aGVuIGRhdGEgY2hhbm5lbHMgY2Fubm90IGJlIGVzdGFibGlzaGVkLiIs Ci0KLSIgIiwKLQotIkluIEtlcm1pdCdzIEZUUCBjbGllbnQsIHBhc3NpdmUgbW9kZSBpcyBjb250 cm9sbGVkIHdpdGggdGhlIGNvbW1hbmQ6IiwKLQotIiAiLAotIiAgU0VUIEZUUCBQQVNTSVZFLU1P REUgeyBPTiwgT0ZGIH0iLAotIiAiLAotCi0iVGhlIGRlZmF1bHQgaXMgT04sIG1lYW5pbmcgdG8g dXNlIHBhc3NpdmUgbW9kZS4iLAotCi0jZW5kaWYgLyogTkVXRlRQICovCi0jZW5kaWYgLyogTk9G SVJFV0FMTCAqLwotCi0iIgotfTsKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLQotc3RhdGljIGNo YXIgKmhteHhzYXZlW10gPSB7Ci0iU3ludGF4OiBTQVZFIGl0ZW0gZmlsZW5hbWUgeyBORVcsIEFQ UEVORCB9IiwKLSIgIFNhdmVzIHRoZSByZXF1ZXN0ZWQgbWF0ZXJpYWwgaW4gdGhlIGdpdmVuIGZp bGUuICBBIG5ldyBmaWxlIGlzIGNyZWF0ZWQiLAotIiAgYnkgZGVmYXVsdDsgaW5jbHVkZSBBUFBF TkQgYXQgdGhlIGVuZCBvZiB0aGUgY29tbWFuZCB0byBhcHBlbmQgdG8gYW4iLAotIiAgZXhpc3Rp bmcgZmlsZS4gIEl0ZW1zOiIsCi0jaWZuZGVmIE5PU0VUS0VZCi0iICAgIEtFWU1BUCAgICAgICAg ICAgICAgIFNhdmVzIHRoZSBjdXJyZW50IGtleSBzZXR0aW5ncy4iLAotI2VuZGlmIC8qIE5PU0VU S0VZICovCi0jaWZkZWYgQ0tfUkVDQUxMCi0iICAgIENPTU1BTkQgSElTVE9SWSAgICAgIFNhdmVz IHRoZSBjdXJyZW50IGNvbW1hbmQgcmVjYWxsIChoaXN0b3J5KSBidWZmZXIiLAotI2VuZGlmIC8q IENLX1JFQ0FMTCAqLwotI2lmZGVmIE9TMgotIiAgICBDT01NQU5EIFNDUk9MTEJBQ0sgICBTYXZl cyB0aGUgY3VycmVudCBjb21tYW5kLXNjcmVlbiBzY3JvbGxiYWNrIGJ1ZmZlciIsCi0iICAgIFRF Uk1JTkFMIFNDUk9MTEJBQ0sgIFNhdmVzIHRoZSBjdXJyZW50IHRlcm1pbmFsLXNjcmVlbiBzY3Jv bGxiYWNrIGJ1ZmZlciIsCi0jZW5kaWYgLyogT1MyICovCi0iIgotfTsKLQotI2lmZGVmIENLUk9P VAotc3RhdGljIGNoYXIgKmhteHhjaHJvb3RbXSA9IHsKLSJTeW50YXg6IFNFVCBST09UIGRpcmVj dG9yeW5hbWUiLAotIiAgU2V0cyB0aGUgcm9vdCBmb3IgZmlsZSBhY2Nlc3MgdG8gdGhlIGdpdmVu IGRpcmVjdG9yeSBhbmQgZGlzYWJsZXMgYWNjZXNzIiwKLSIgIHRvIHN5c3RlbSBhbmQgc2hlbGwg Y29tbWFuZHMgYW5kIGV4dGVybmFsIHByb2dyYW1zLiAgT25jZSB0aGlzIGNvbW1hbmQiLAotIiAg aXMgZ2l2ZW4sIG5vIGZpbGVzIG9yIGRpcmVjdG9yaWVzIG91dHNpZGUgdGhlIHRyZWUgcm9vdGVk IGJ5IHRoZSBnaXZlbiIsCi0iICBkaXJlY3RvcnkgY2FuIGJlIG9wZW5lZCwgcmVhZCwgbGlzdGVk LCBkZWxldGVkLCByZW5hbWVkLCBvciBhY2Nlc3NlZCBpbiIsCi0iICBhbnkgb3RoZXIgd2F5LiAg VGhpcyBjb21tYW5kIGNhbiBub3QgYmUgdW5kb25lIGJ5IGEgc3Vic2VxdWVudCBTRVQgUk9PVCIs Ci0iICBjb21tYW5kLiAgUHJpbWFyaWx5IGZvciB1c2Ugd2l0aCBzZXJ2ZXIgbW9kZSwgdG8gcmVz dHJpY3QgYWNjZXNzIG9mIiwKLSIgIGNsaWVudHMgdG8gYSBwYXJ0aWN1bGFyIGRpcmVjdG9yeSB0 cmVlLiAgU3lub255bTogQ0hST09ULiIsCi0iIgotfTsKLSNlbmRpZiAvKiBDS1JPT1QgKi8KLQot c3RhdGljIGNoYXIgKmhteHhzY3JuW10gPSB7Ci0iU3ludGF4OiBTQ1JFRU4geyBDTEVBUiwgQ0xF T0wsIE1PVkUgcm93IGNvbHVtbiB9IiwKLSNpZmRlZiBPUzIKLSIgIFBlcmZvcm1zIHNjcmVlbi1m b3JtYXR0aW5nIGFjdGlvbnMuIiwKLSNlbHNlCi0iICBQZXJmb3JtcyBzY3JlZW4tZm9ybWF0dGlu ZyBhY3Rpb25zLiAgQ29ycmVjdCBvcGVyYXRpb24gb2YgdGhlc2UgY29tbWFuZHMiLAotIiAgZGVw ZW5kcyBvbiBwcm9wZXIgdGVybWluYWwgc2V0dXAgb24gYm90aCBlbmRzIG9mIHRoZSBjb25uZWN0 aW9uIC0tIG1haW5seSIsCi0iICB0aGF0IHRoZSBob3N0IHRlcm1pbmFsIHR5cGUgaXMgc2V0IHRv IGFncmVlIHdpdGggdGhlIGtpbmQgb2YgdGVybWluYWwgb3IiLAotIiAgdGhlIGVtdWxhdGlvbiB5 b3UgYXJlIHZpZXdpbmcgQy1LZXJtaXQgdGhyb3VnaC4iLAotI2VuZGlmIC8qIE9TMiAqLwotIiAi LAotIlNDUkVFTiBDTEVBUiIsCi0iICBNb3ZlcyB0aGUgY3Vyc29yIHRvIGhvbWUgcG9zaXRpb24g YW5kIGNsZWFycyB0aGUgZW50aXJlIHNjcmVlbi4iLAotI2lmZGVmIE9TMgotIiAgU3lub255bXM6 IENMUywgQ0xFQVIgU0NSRUVOLCBDTEVBUiBDT01NQU5ELVNDUkVFTiBBTEwiLAotI2Vsc2UKLSIg IFN5bm9ueW1zOiBDTFMsIENMRUFSIFNDUkVFTi4iLAotI2VuZGlmIC8qIE9TMiAqLwotIiAiLAot IlNDUkVFTiBDTEVPTCIsCi0iICBDbGVhcnMgZnJvbSB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRp b24gdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4iLAotI2lmZGVmIE9TMgotIiAgU3lub255bTogQ0xF QVIgQ09NTUFORC1TQ1JFRU4gRU9MIiwKLSNlbmRpZiAvKiBPUzIgKi8KLSIgIiwKLSJTQ1JFRU4g TU9WRSByb3cgY29sdW1uIiwKLSIgIE1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIGluZGljYXRlZCBy b3cgYW5kIGNvbHVtbi4gIFRoZSByb3cgYW5kIGNvbHVtbiIsCi0iICBudW1iZXJzIGFyZSAxLWJh c2VkIHNvIG9uIGEgMjR4ODAgc2NyZWVuLCB0aGUgaG9tZSBwb3NpdGlvbiBpcyAxIDEgYW5kIiwK LSIgIHRoZSBsb3dlciByaWdodCBjb3JuZXIgaXMgMjQgODAuICBJZiBhIHJvdyBvciBjb2x1bW4g bnVtYmVyIGlzIGdpdmVuIHRoYXQiLAotIiAgdG9vIGxhcmdlIGZvciB3aGF0IEtlcm1pdCBvciB0 aGUgb3BlcmF0aW5nIHN5c3RlbSB0aGlua3MgaXMgeW91ciBzY3JlZW4iLAotIiAgc2l6ZSwgdGhl IGFwcHJvcHJpYXRlIG51bWJlciBpcyBzdWJzdGl0dXRlZC4iLAotIiAiLAotIkFsc28gc2VlOiIs Ci0jaWZkZWYgT1MyCi0iICBIRUxQIEZVTkNUSU9OIFNDUk5DVVJYLCBIRUxQIEZVTkNUSU9OIFND Uk5DVVJZLCBIRUxQIEZVTkNUSU9OIFNDUlNUUiwiLAotI2VuZGlmIC8qIE9TMiAqLwotIiAgU0hP VyBWQVJJQUJMRSBURVJNSU5BTCwgU0hPVyBWQVJJQUJMRSBDT0xTLCBTSE9XIFZBUiBST1dTLCBT SE9XIENPTU1BTkQuIiwKLSIiCi19OwotCi0jaWZuZGVmIE5PU1BMCi1zdGF0aWMgY2hhciAqaG1m d29yZFtdID0gewotIkZ1bmN0aW9uIFxcZndvcmQoczEsbjEsczIsczMsbjIsbjMpIC0gRXh0cmFj dHMgYSB3b3JkIGZyb20gYSBzdHJpbmcuIiwKLSIgICAgczEgPSBzb3VyY2Ugc3RyaW5nLiIsCi0i ICAgIG4xID0gd29yZCBudW1iZXIgKDEtYmFzZWQpIGNvdW50aW5nIGZyb20gbGVmdDsgaWYgbmVn YXRpdmUsIGZyb20gcmlnaHQuIiwKLSIgICAgczIgPSBvcHRpb25hbCBicmVhayBzZXQuIiwKLSIg ICAgczMgPSBvcHRpb25hbCBpbmNsdWRlIHNldCAob3IgQUxMLCBDU1YsIG9yIFRTVikuIiwKLSIg ICAgbjIgPSBvcHRpb25hbCBncm91cGluZyBtYXNrLiIsCi0iICAgIG4zID0gb3B0aW9uYWwgc2Vw YXJhdG9yIGZsYWc6IiwKLSIgICAgICAgMCA9IGNvbGxhcHNlIGFkamFjZW50IHNlcGFyYXRvcnM7 IiwKLSIgICAgICAgMSA9IGRvbid0IGNvbGxhcHNlIGFkamFjZW50IHNlcGFyYXRvcnMuIiwKLSIg IiwKLSIgIFxcZndvcmQoKSByZXR1cm5zIHRoZSBuMXRoIFwid29yZFwiIG9mIHRoZSBzdHJpbmcg czEsIGFjY29yZGluZyB0byB0aGUiLAotIiAgY3JpdGVyaWEgc3BlY2lmaWVkIGJ5IHRoZSBvdGhl ciBwYXJhbWV0ZXJzLiIsCi0iICIsCi0iICBUaGUgQlJFQUsgU0VUIGlzIHRoZSBzZXQgb2YgYWxs IGNoYXJhY3RlcnMgdGhhdCBzZXBhcmF0ZSB3b3Jkcy4gVGhlIiwKLSIgIGRlZmF1bHQgYnJlYWsg c2V0IGlzIGFsbCBjaGFyYWN0ZXJzIGV4Y2VwdCBBU0NJSSBsZXR0ZXJzIGFuZCBkaWdpdHMuIiwK LSIgIEFTQ0lJIChDMCkgY29udHJvbCBjaGFyYWN0ZXJzIGFyZSB0cmVhdGVkIGFzIGJyZWFrIGNo YXJhY3RlcnMgYnkgZGVmYXVsdCwiLAotIiAgYXMgYXJlIHNwYWNpbmcgYW5kIHB1bmN0dWF0aW9u IGNoYXJhY3RlcnMsIGJyYWNrZXRzLCBhbmQgc28gb24sIGFuZCIsCi0iICBhbGwgOC1iaXQgY2hh cmFjdGVycy4iLAotIiAiLAotIiAgVGhlIElOQ0xVREUgU0VUIGlzIHRoZSBzZXQgb2YgY2hhcmFj dGVycyB0aGF0IGFyZSB0byBiZSB0cmVhdGVkIGFzICIsCi0iICBwYXJ0cyBvZiB3b3JkcyBldmVu IHRob3VnaCB0aGV5IG5vcm1hbGx5IHdvdWxkIGJlIHNlcGFyYXRvcnMuICBUaGUiLAotIiAgZGVm YXVsdCBpbmNsdWRlIHNldCBpcyBlbXB0eS4gIFRocmVlIHNwZWNpYWwgc3ltYm9saWMgaW5jbHVk ZSBzZXRzIGFyZSIsCi0iICBhbHNvIGFsbG93ZWQ6IiwKLSIgICAiLAotIiAgICBBTEwgKG1lYW5p bmcgaW5jbHVkZSBhbGwgYnl0ZXMgdGhhdCBhcmUgbm90IGluIHRoZSBicmVhayBzZXQpIiwKLSIg ICAgQ1NWIChzcGVjaWFsIHRyZWF0bWVudCBmb3IgQ29tbWEtU2VwYXJhdGVkLVZhbHVlIHJlY29y ZHMpIiwKLSIgICAgVFNWIChzcGVjaWFsIHRyZWF0bWVudCBmb3IgVGFiLVNlcGFyYXRlZC1WYWx1 ZSByZWNvcmRzKSIsCi0iICIsCi0iICBGb3Igb3BlcmF0aW5nIG9uIDgtYml0IGNoYXJhY3RlciBz ZXRzLCB0aGUgaW5jbHVkZSBzZXQgc2hvdWxkIGJlIEFMTC4iLAotIiAiLAotIiAgSWYgdGhlIEdS T1VQSU5HIE1BU0sgaXMgZ2l2ZW4gYW5kIGlzIG5vbnplcm8sIHdvcmRzIGNhbiBiZSBncm91cGVk IGJ5IiwKLSIgIHF1b3RlcyBvciBicmFja2V0cyBzZWxlY3RlZCBieSB0aGUgc3VtIG9mIHRoZSBm b2xsb3dpbmc6IiwKLSIgIiwKLSIgICAgIDEgPSBkb3VibGVxdW90ZXM6ICAgIFwiYSBiIGNcIiIs Ci0iICAgICAyID0gYnJhY2VzOiAgICAgICAgICB7YSBiIGN9IiwKLSIgICAgIDQgPSBhcG9zdHJv cGhlczogICAgICdhIGIgYyciLAotIiAgICAgOCA9IHBhcmVudGhlc2VzOiAgICAgKGEgYiBjKSIs Ci0iICAgIDE2ID0gc3F1YXJlIGJyYWNrZXRzOiBbYSBiIGNdIiwKLSIgICAgMzIgPSBhbmdsZSBi cmFja2V0czogIDxhIGIgYz4iLAotIiAiLAotIiAgTmVzdGluZyBpcyBwb3NzaWJsZSB3aXRoIHt9 KClbXTw+IGJ1dCBub3Qgd2l0aCBxdW90ZXMgb3IgYXBvc3Ryb3BoZXMuIiwKLSIgIiwKLSJSZXR1 cm5zIHN0cmluZzoiLAotIiAgV29yZCBudW1iZXIgbjEsIGlmIHRoZXJlIGlzIG9uZSwgb3RoZXJ3 aXNlIGFuIGVtcHR5IHN0cmluZy4iLAotIiAiLAotIkFsc28gc2VlOiIsCi0iICBIRUxQIEZVTkNU SU9OIFNQTElUIiwKLSIiCi19OwotCi1zdGF0aWMgY2hhciAqaG14eHByb21wdFtdID0gewotIlN5 bnRheDogUFJPTVBUIFsgdGV4dCBdIiwKLSIgIEVudGVycyBpbnRlcmFjdGl2ZSBjb21tYW5kIGxl dmVsIGZyb20gd2l0aGluIGEgc2NyaXB0IGluIHN1Y2ggYSB3YXkgdGhhdCIsCi0iICB0aGUgc2Ny aXB0IGNhbiBiZSBjb250aW51ZWQgd2l0aCBhbiBFTkQgb3IgUkVUVVJOIGNvbW1hbmQuICBTVE9Q LCBFWElULCIsCi0iICBTSE9XIFNUQUNLLCBUUkFDRSwgYW5kIEN0cmwtQyBhbGwgaGF2ZSB0aGVp ciBub3JtYWwgZWZmZWN0cy4gIFRoZSBQUk9NUFQiLAotIiAgY29tbWFuZCBhbGxvd3MgdmFyaWFi bGVzIHRvIGJlIGV4YW1pbmVkIG9yIGNoYW5nZWQsIG9yIGFueSBvdGhlciBjb21tYW5kcyIsCi0i ICB0byBiZSBnaXZlbiwgaW4gYW55IG51bWJlciwgcHJpb3IgdG8gcmV0dXJuaW5nIHRvIHRoZSBz Y3JpcHQsIGFsbG93aW5nIiwKLSIgIEtlcm1pdCB0byBzZXJ2ZSBhcyBpdHMgb3duIGRlYnVnZ2Vy OyBhZGRpbmcgdGhlIFBST01QVCBjb21tYW5kIHRvIGEgc2NyaXB0IiwKLSIgIGlzIGxpa2Ugc2V0 dGluZyBhIGJyZWFrcG9pbnQuICBJZiB0aGUgb3B0aW9uYWwgdGV4dCBpcyBpbmNsdWRlZCwgaXQg aXMiLAotIiAgdXNlZCBhcyB0aGUgbmV3IHByb21wdCBmb3IgdGhpcyBsZXZlbCwgZS5nLiBcInBy b21wdCBCcmVha3BvaW50XzE+XCIuIiwKLSIiCi19OwotCi1zdGF0aWMgY2hhciAqaHh4aW5wW10g PSB7Ci0iU3ludGF4OiAgSU5QVVQgWyAvQ09VTlQ6biAvQ0xFQVIgL05PTUFUQ0ggL05PV1JBUCBd IFwKLXsgbnVtYmVyLW9mLXNlY29uZHMsIHRpbWUtb2YtZGF5IH0gWyB0ZXh0IF0iLAotIiAiLAot IkV4YW1wbGVzOiIsCi0iICBJTlBVVCA1IExvZ2luOiIsCi0iICBJTlBVVCAyMzo1OTo1OSBSSU5H IiwKLSIgIElOUFVUIC9OT01BVENIIDEwIiwKLSIgIElOUFVUIC9DTEVBUiAxMCBcXDEzXFwxMCIs Ci0iICBJTlBVVCAvQ0xFQVIgMTAgXFwxM1xcMTAkXDMyIiwKLSIgIElOUFVUIC9DT1VOVDoyNTYg MTAiLAotIiAgSU5QVVQgMTAgXFxmcGF0dGVybig8KkAqLio+KSIsCi0iICIsCi0iICBXYWl0cyB1 cCB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMsIG9yIHVudGlsIHRoZSBnaXZlbiB0aW1l IG9mIGRheSwiLAotIiAgZm9yIHRoZSBnaXZlbiB0ZXh0IHRvIGFycml2ZSBvbiB0aGUgY29ubmVj dGlvbi4gRm9yIHVzZSBpbiBzY3JpcHQgcHJvZ3JhbXMiLAotIiAgd2l0aCBJRiBGQUlMVVJFIG9y IElGIFNVQ0NFU1MsIHdoaWNoIHRlbGwgd2hldGhlciB0aGUgZGVzaXJlZCB0ZXh0IGFycml2ZWQi LAotIiAgd2l0aGluIHRoZSBnaXZlbiBhbW91bnQgb2YgdGltZS4iLAotIiAiLAotIiAgVGhlIHRl eHQsIGlmIGdpdmVuLCBjYW4gYmUgYSByZWd1bGFyIHRleHQgb3IgaXQgY2FuIGJlIGEgXFxwYXR0 ZXJuKCkiLAotIiAgaW52b2NhdGlvbiwgaW4gd2hpY2ggY2FzZSBpdCBpcyB0cmVhdGVkIGFzIGEg cGF0dGVybiByYXRoZXIgdGhhbiBhIGxpdGVyYWwiLAotIiAgc3RyaW5nIChIRUxQIFBBVFRFUk5T IGZvciBkZXRhaWxzKS4iLAotIiAiLAotIiAgSWYgdGhlIC9DT1VOVDogc3dpdGNoIGlzIGluY2x1 ZGVkLCBJTlBVVCB3YWl0cyBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiIsCi0iICBjaGFyYWN0ZXJz IHRvIGFycml2ZS4iLAotIiAiLAotIiAgSWYgbm8gdGV4dCBpcyBzcGVjaWZpZWQsIElOUFVUIHdh aXRzIGZvciB0aGUgZmlyc3QgY2hhcmFjdGVyIHRoYXQgYXJyaXZlcyIsCi0iICBhbmQgbWFrZXMg aXQgYXZhaWxhYmxlIGluIHRoZSBcXHYoaW5jaGFyKSB2YXJpYWJsZS4gIFRoaXMgaXMgZXF1aXZh bGVudCB0byIsCi0iICBpbmNsdWRpbmcgYSAvQ09VTlQ6IHN3aXRjaCB3aXRoIGFuIGFyZ3VtZW50 IG9mIDEuIiwKLSIgIiwKLSIgIElmIHRoZSAvTk9NQVRDSCBzd2l0Y2ggaXMgaW5jbHVkZWQsIElO UFVUIGRvZXMgbm90IGF0dGVtcHQgdG8gbWF0Y2ggYW55IiwKLSIgIGNoYXJhY3RlcnMsIGJ1dCBj b250aW51ZXMgcmVhZGluZyBmcm9tIHRoZSBjb21tdW5pY2F0aW9uIGNvbm5lY3Rpb24gdW50aWwi LAotIiAgdGhlIHRpbWVvdXQgaW50ZXJ2YWwgZXhwaXJlcy4gIElmIHRoZSB0aW1lb3V0IGludGVy dmFsIGlzIDAsIHRoZSBJTlBVVCIsCi0iICBjb21tYW5kIGRvZXMgbm90IHdhaXQ7IGkuZS4gdGhl IGdpdmVuIHRleHQgbXVzdCBhbHJlYWR5IGJlIGF2YWlsYWJsZSBmb3IiLAotIiAgcmVhZGluZyBm b3IgdGhlIElOUFVUIGNvbW1hbmQgdG8gc3VjY2VlZC4gIElmIHRoZSBpbnRlcnZhbCBpcyBuZWdh dGl2ZSwiLAotIiAgdGhlIElOUFVUIGNvbW1hbmQgd2FpdHMgZm9yZXZlci4iLAotIiAiLAotIiAg VGhlIElOUFVUIGJ1ZmZlciwgXFx2KGlucHV0KSwgaXMgbm9ybWFsbHkgY2lyY3VsYXIuICBJbmNv bWluZyBtYXRlcmlhbCBpcyIsCi0iICBhcHBlbmRlZCB0byBpdCB1bnRpbCBpdCByZWFjaGVzIHRo ZSBlbmQsIGFuZCB0aGVuIGl0IHdyYXBzIGFyb3VuZCB0byB0aGUiLAotIiAgYmVnaW5uaW5nLiAg SWYgdGhlIC9DTEVBUiBzd2l0Y2ggaXMgZ2l2ZW4sIElOUFVUIGNsZWFycyBpdHMgYnVmZmVyIGJl Zm9yZSIsCi0iICByZWFkaW5nIGZyb20gdGhlIGNvbm5lY3Rpb24uIiwKLSIgIiwKLSIgIFR5cGlj YWwgZXhhbXBsZSBvZiB1c2U6IiwKLSIgIiwKLSIgICAgSU5QVVQgMTAgbG9naW46IiwKLSIgICAg SUYgRkFJTCBFWElUIDEgXCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgbG9naW4gcHJvbXB0XCIiLAot IiAgICBMSU5FT1VUIG15dXNlcmlkIiwKLSIgICAgSU5QVVQgMTAgUGFzc3dvcmQ6IiwKLSIgICAg SUYgRkFJTCBFWElUIDEgXCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgUGFzc3dvcmQgcHJvbXB0XCIi LAotIiAgICBMSU5FT1VUIHh4eHh4eHgiLAotIiAiLAotIiAgVGhlIC9OT1dSQVAgc3dpdGNoIG1l YW5zIHRoYXQgSU5QVVQgc2hvdWxkIHJldHVybiB3aXRoIGZhaWx1cmUgc3RhdHVzIiwKLSIgIGFu ZCB3aXRoIFxcdihpbnN0YXR1cykgc2V0IHRvIDYgaWYgaXRzIGludGVybmFsIGJ1ZmZlciBmaWxs cyB1cCBiZWZvcmUiLAotIiAgYW55IG9mIHRoZSBvdGhlciBjb21wbGV0aW9uIGNyaXRlcmlhIGFy ZSBtZXQuICBUaGlzIGFsbG93cyBmb3IgY2FwdHVyZSIsCi0iICBvZiB0aGUgY29tcGxldGUgaW5j b21pbmcgZGF0YSBzdHJlYW0gKGV4Y2VwdCBOVUwgYnl0ZXMsIHdoaWNoIGFyZSIsCi0iICBkaXNj YXJkZWQpLiAgQ0FVVElPTjogaWYgdGhlIHNlYXJjaCB0YXJnZXQgKGlmIGFueSkgc3BhbnMgdGhl IElOUFVUIGJ1ZmZlciIsCi0iICBib3VuZGFyeSwgSU5QVVQgd2lsbCBub3Qgc3VjY2VlZC4iLAot IiAiLAotIiAgXAotXFx2KGluc3RhdHVzKSB2YWx1ZXMgYXJlOiAwIChzdWNjZXNzKSwgMSAodGlt ZWQgb3V0KSwgMiAoa2V5Ym9hcmQgaW50ZXJydXB0KSwiLAotIiAgMyAoaW50ZXJuYWwgZXJyb3Ip LCA0IChJL08gZXJyb3Igb3IgY29ubmVjdGlvbiBsb3N0KSwgNSAoSU5QVVQgZGlzYWJsZWQpLCIs Ci0iICBhbmQgNiAoYnVmZmVyIGZpbGxlZCBhbmQgL05PV1JBUCBzZXQpOyB0aGVzZSBhcmUgc2hv d24gYnkgXFx2KGlubWVzc2FnZSkuIiwKLSIgIiwKLSIgIEFsc28gc2VlIE9VVFBVVCwgTUlOUFVU LCBSRUlOUFVULCBTRVQgSU5QVVQgYW5kIENMRUFSLiAgU2VlIEhFTFAgUEFVU0UgZm9yIiwKLSIg IGRldGFpbHMgb24gdGltZS1vZi1kYXkgZm9ybWF0IGFuZCBIRUxQIFBBVFRFUk5TIGZvciBwYXR0 ZXJuIHN5bnRheC4iLAotIiJ9OwotCi1zdGF0aWMgY2hhciAqaHh4b3V0W10gPSB7Ci0iU3ludGF4 OiBPVVRQVVQgdGV4dCIsCi0iICBTZW5kcyB0aGUgdGV4dCBvdXQgdGhlIGNvbW11bmljYXRpb25z IGNvbm5lY3Rpb24sIGFzIGlmIHlvdSBoYWQgdHlwZWQgaXQiLAotIiAgZHVyaW5nIENPTk5FQ1Qg bW9kZS4gIFRoZSB0ZXh0IG1heSBjb250YWluIGJhY2tzbGFzaCBjb2RlcywgdmFyaWFibGVzLCIs Ci0iICBldGMsIHBsdXMgdGhlIGZvbGxvd2luZyBzcGVjaWFsIGNvZGVzOiIsCi0iICIsCi0iICAg IFxcTiAtIFNlbmQgYSBOVUwgKEFTQ0lJIDApIGNoYXJhY3RlciAoeW91IGNhbid0IHVzZSBcXDAg Zm9yIHRoaXMpLiIsCi0iICAgIFxcQiAtIFNlbmQgYSBCUkVBSyBzaWduYWwuIiwKLSIgICAgXFxM IC0gU2VuZCBhIExvbmcgQlJFQUsgc2lnbmFsLiIsCi0iICIsCi0iQWxzbyBzZWUgU0VUIE9VVFBV VC4iLAotIiIgfTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi1zdGF0aWMgY2hhciAqaHh5cGFyaVtd ID0gewotIlNFVCBQQVJJVFkgTk9ORSIsCi0iICBDaG9vc2VzIDggZGF0YSBiaXRzIGFuZCBubyBw YXJpdHkuIiwKLSIgIiwKLSJTRVQgUEFSSVRZIHsgRVZFTiwgT0RELCBNQVJLLCBTUEFDRSB9IiwK LSIgIENob29zZXMgNyBkYXRhIGJpdHMgcGx1cyB0aGUgaW5kaWNhdGVkIGtpbmQgb2YgcGFyaXR5 LiIsCi0iICBGb3JjZXMgOHRoLWJpdCBwcmVmaXhpbmcgZHVyaW5nIGZpbGUgdHJhbnNmZXIuIiwK LSIgIiwKLSNpZmRlZiBIV1BBUklUWQotIlNFVCBQQVJJVFkgSEFSRFdBUkUgeyBFVkVOLCBPREQg fSIsCi0iICBDaG9vc2VzIDggZGF0YSBiaXRzIHBsdXMgdGhlIGluZGljYXRlZCBraW5kIG9mIHBh cml0eS4iLAotIiAiLAotIkFsc28gc2VlIFNFVCBURVJNSU5BTCBCWVRFU0laRSwgU0VUIFNFUklB TCwgYW5kIFNFVCBTVE9QLUJJVFMuIiwKLSNlbHNlCi0iQWxzbyBzZWUgU0VUIFRFUk1JTkFMIEJZ VEVTSVpFIGFuZCBTRVQgU0VSSUFMLiIsCi0jZW5kaWYgLyogSFdQQVJJVFkgKi8KLSIifTsKLQot I2lmbmRlZiBOT0xPQ0FMCi1zdGF0aWMgY2hhciAqaHh5ZXNjW10gPSB7Ci0jaWZkZWYgT1MyCi0i U3ludGF4OiBTRVQgRVNDQVBFIG51bWJlciIsCi0iICBEZWNpbWFsIEFTQ0lJIHZhbHVlIGZvciBl c2NhcGUgY2hhcmFjdGVyIGR1cmluZyBDT05ORUNULCBub3JtYWxseSAyOSIsCi0iICAoQ29udHJv bC1dKS4gIFR5cGUgdGhlIGVzY2FwZSBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkgQyB0byBnZXQgYmFj ayB0byB0aGUiLAotIiAgQy1LZXJtaXQgcHJvbXB0IG9yIGZvbGxvd2VkIGJ5ID8gdG8gc2VlIG90 aGVyIG9wdGlvbnMsIG9yIHVzZSB0aGUgXFxLZXhpdCIsCi0iICBrZXlib2FyZCB2ZXJiLCBub3Jt YWxseSBhc3NpZ25lZCB0byBBbHQteC4iLAotI2Vsc2UKLSNpZmRlZiBORVhUCi0iU3ludGF4OiBT RVQgRVNDQVBFIG51bWJlciIsCi0iICBEZWNpbWFsIEFTQ0lJIHZhbHVlIGZvciBlc2NhcGUgY2hh cmFjdGVyIGR1cmluZyBDT05ORUNULCBub3JtYWxseSAyOSIsCi0iICAoQ29udHJvbC1dKS4gIFR5 cGUgdGhlIGVzY2FwZSBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkgQyB0byBnZXQgYmFjayB0byB0aGUi LAotIiAgQy1LZXJtaXQgcHJvbXB0IG9yIGZvbGxvd2VkIGJ5ID8gdG8gc2VlIG90aGVyIG9wdGlv bnMuIiwKLSNlbHNlCi0iU3ludGF4OiBTRVQgRVNDQVBFIG51bWJlciIsCi0iICBEZWNpbWFsIEFT Q0lJIHZhbHVlIGZvciBlc2NhcGUgY2hhcmFjdGVyIGR1cmluZyBDT05ORUNULCBub3JtYWxseSAy OCIsCi0iICAoQ29udHJvbC1cXCkuICBUeXBlIHRoZSBlc2NhcGUgY2hhcmFjdGVyIGZvbGxvd2Vk IGJ5IEMgdG8gZ2V0IGJhY2sgdG8gdGhlIiwKLSIgIEMtS2VybWl0IHByb21wdCBvciBmb2xsb3dl ZCBieSA/IHRvIHNlZSBvdGhlciBvcHRpb25zLiIsCi0jZW5kaWYgLyogTkVYVCAqLwotI2VuZGlm IC8qIE9TMiAqLwotIiAiLAotIllvdSBtYXkgYWxzbyBlbnRlciB0aGUgZXNjYXBlIGNoYXJhY3Rl ciBhcyBeWCAoY2lyY3VtZmxleCBmb2xsb3dlZCBieSBhIiwKLSJsZXR0ZXIgb3Igb25lIG9mOiBA LCBeLCBfLCBbLCBcXCwgb3IgXSwgdG8gaW5kaWNhdGUgYSBjb250cm9sIGNoYXJhY3RlcjsiLAot ImZvciBleGFtcGxlLCBTRVQgRVNDIF5fIHNldHMgeW91ciBlc2NhcGUgY2hhcmFjdGVyIHRvIEN0 cmwtVW5kZXJzY29yZS4iLAotIiAiLAotIllvdSBjYW4gYWxzbyBzcGVjaWZ5IGFuIDgtYml0IGNo YXJhY3RlciAoMTI4LTI1NSkgYXMgeW91ciBlc2NhcGUgY2hhcmFjdGVyLCIsCi0iZWl0aGVyIGJ5 IHR5cGluZyBpdCBsaXRlcmFsbHkgb3IgYnkgZW50ZXJpbmcgaXRzIG51bWVyaWMgY29kZS4iLAot IiIgfTsKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSNpZm5kZWYgTk9TUEwKLXN0YXRpYyBjaGFy ICpoeHlvdXRbXSA9IHsKLSJTRVQgT1VUUFVUIFBBQ0lORyA8bnVtYmVyPiIsCi0iICBIb3cgbWFu eSBtaWxsaXNlY29uZHMgdG8gcGF1c2UgYWZ0ZXIgc2VuZGluZyBlYWNoIE9VVFBVVCBjaGFyYWN0 ZXIsIiwKLSIgIG5vcm1hbGx5IDAuIiwKLSIgIiwKLSJTRVQgT1VUUFVUIFNQRUNJQUwtRVNDQVBF UyB7IE9OLCBPRkYgfSIsCi0iICBXaGV0aGVyIHRvIHByb2Nlc3MgdGhlIHNwZWNpYWwgT1VUUFVU LW9ubHkgZXNjYXBlcyBcXEIsIFxcTCwgYW5kIFxcTi4iLAotIiAgTm9ybWFsbHkgT04gKHRoZXkg YXJlIHByb2Nlc3NlZCkuIiwKLSIiIH07Ci0KLXN0YXRpYyBjaGFyICpoeHlpbnBbXSA9IHsKLSJT eW50YXg6IFNFVCBJTlBVVCBwYXJhbWV0ZXIgdmFsdWUiLAotIiAiLAotI2lmZGVmIENLX0FVVE9E TAotIlNFVCBJTlBVVCBBVVRPRE9XTkxPQUQgeyBPTiwgT0ZGIH0iLAotIiAgQ29udHJvbHMgd2hl dGhlciBhdXRvZG93bmxvYWRzIGFyZSBhbGxvd2VkIGR1cmluZyBJTlBVVCBjb21tYW5kIGV4ZWN1 dGlvbi4iLAotIiAiLAotI2VuZGlmIC8qIENLX0FVVE9ETCAqLwotIlNFVCBJTlBVVCBCVUZGRVIt TEVOR1RIIG51bWJlci1vZi1ieXRlcyIsCi0iICBSZW1vdmVzIHRoZSBvbGQgSU5QVVQgYnVmZmVy IGFuZCBjcmVhdGVzIGEgbmV3IG9uZSB3aXRoIHRoZSBnaXZlbiBsZW5ndGguIiwKLSIgIiwKLSJT RVQgSU5QVVQgQ0FOQ0VMTEFUSU9OIHsgT04sIE9GRiB9IiwKLSIgIFdoZXRoZXIgYW4gSU5QVVQg aW4gcHJvZ3Jlc3MgY2FuIGJlIGNhbiBpbnRlcnJ1cHRlZCBmcm9tIHRoZSBrZXlib2FyZC4iLAot IiAiLAotIlNFVCBJTlBVVCBDQVNFIHsgSUdOT1JFLCBPQlNFUlZFIH0iLAotIiAgVGVsbHMgd2hl dGhlciBhbHBoYWJldGljIGNhc2UgaXMgdG8gYmUgc2lnbmlmaWNhbnQgaW4gc3RyaW5nIGNvbXBh cmlzb25zLiIsCi0iICBUaGlzIHNldHRpbmcgaXMgbG9jYWwgdG8gdGhlIGN1cnJlbnQgbWFjcm8g b3IgY29tbWFuZCBmaWxlLCBhbmQgaXMiLAotIiAgaW5oZXJpdGVkIGJ5IHN1Ym9yZGluYXRlIG1h Y3JvcyBhbmQgdGFrZSBmaWxlcy4iLAotIiAiLAotIlNFVCBJTlBVVCBFQ0hPIHsgT04sIE9GRiB9 IiwKLSIgIFRlbGxzIHdoZXRoZXIgdG8gZGlzcGxheSBhcnJpdmluZyBjaGFyYWN0ZXJzIHJlYWQg YnkgSU5QVVQgb24gdGhlIHNjcmVlbi4iLAotIiAiLAotI2lmZGVmIENLRkxPQVQKLSJTRVQgSU5Q VVQgU0NBTEUtRkFDVE9SIDxudW1iZXI+IiwKLSIgIEEgbnVtYmVyIHRvIG11bHRpcGx5IGFsbCBJ TlBVVCB0aW1lb3V0cyBieSwgd2hpY2ggbWF5IGluY2x1ZGUgYSBmcmFjdGlvbmFsIiwKLSIgIHBh cnQsIGUuZy4gMi41LiAgQWxsIElOUFVUIGNvbW1hbmRzIHRoYXQgc3BlY2lmeSBhIHRpbWVvdXQg aW4gc2Vjb25kcyIsCi0iICAoYXMgb3Bwb3NlZCB0byBhIHNwZWNpZmljIHRpbWUgb2YgZGF5KSBo YXZlIHRoZWlyIHRpbWUgbGltaXQgYWRqdXN0ZWQiLAotIiAgYXV0b21hdGljYWxseSBieSB0aGlz IGZhY3Rvciwgd2hpY2ggaXMgYWxzbyBhdmFpbGFibGUgaW4gdGhlIGJ1aWx0LWluIiwKLSIgIHJl YWQtb25seSB2YXJpYWJsZSBcXHYoaW5zY2FsZSkuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxLjAu IiwKLSIgIiwKLQotI2VuZGlmCS8qIENLRkxPQVQgKi8KLQotIlNFVCBJTlBVVCBTSUxFTkNFIDxu dW1iZXI+IiwKLSIgIFRoZSBtYXhpbXVtIG51bWJlciB0byBzZWNvbmRzIG9mIHNpbGVuY2UgKG5v IGlucHV0IGF0IGFsbCkgYmVmb3JlIHRoZSIsCi0iICBJTlBVVCBjb21tYW5kIHRpbWVzIG91dCwg MCBmb3Igbm8gbWF4aW11bS4iLAotIiAiLAotI2lmZGVmIE9TMgotIlNFVCBJTlBVVCBURVJNSU5B TCB7IE9OLCBPRkYgfSIsCi0iICBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGRhdGEgcmVjZWl2ZWQg ZHVyaW5nIGFuIElOUFVUIGNvbW1hbmQgaXMgZGlzcGxheWVkIiwKLSIgIGluIHRoZSB0ZXJtaW5h bCB3aW5kb3cuICBEZWZhdWx0IGlzIE9OLiIsCi0iICIsCi0jZW5kaWYgLyogT1MyICovCi0iU0VU IElOUFVUIFRJTUVPVVQtQUNUSU9OIHsgUFJPQ0VFRCwgUVVJVCB9IiwKLSIgIFRlbGxzIHdoZXRo ZXIgdG8gcHJvY2VlZCBvciBxdWl0IGZyb20gYSBzY3JpcHQgcHJvZ3JhbSBpZiBhbiBJTlBVVCBj b21tYW5kIiwKLSIgIGZhaWxzLiAgUFJPQ0VFRCAoZGVmYXVsdCkgYWxsb3dzIHVzZSBvZiBJRiBT VUNDRVNTIC8gSUYgRkFJTFVSRSBjb21tYW5kcy4iLAotIiAgVGhpcyBzZXR0aW5nIGlzIGxvY2Fs IHRvIHRoZSBjdXJyZW50IG1hY3JvIG9yIGNvbW1hbmQgZmlsZSwgYW5kIGlzIiwKLSIgIGluaGVy aXRlZCBieSBzdWJvcmRpbmF0ZSBtYWNyb3MgYW5kIHRha2UgZmlsZXMuIiwKLSIiIH07Ci0KLXN0 YXRpYyBjaGFyICpoeHlmdW5jW10gPSB7Ci0iU0VUIEZVTkNUSU9OIERJQUdOT1NUSUNTIHsgT04s IE9GRiB9IiwKLSIgIFdoZXRoZXIgdG8gaXNzdWUgZGlhZ25vc3RpYyBtZXNzYWdlcyBmb3IgaWxs ZWdhbCBmdW5jdGlvbiBjYWxscyBhbmQiLAotIiAgcmVmZXJlbmNlcyB0byBub25leGlzdGVudCBi dWlsdC1pbiB2YXJpYWJsZXMuICBPTiBieSBkZWZhdWx0LiIsCi0iICIsCi0iU0VUIEZVTkNUSU9O IEVSUk9SIHsgT04sIE9GRiB9IiwKLSIgIFdoZXRoZXIgYW4gaWxsZWdhbCBmdW5jdGlvbiBjYWxs IG9yIHJlZmVyZW5jZSB0byBhIG5vbmV4aXN0ZW50IGJ1aWx0LWluIiwKLSIgIHZhcmlhYmxlIHNo b3VsZCBjYXVzZSBhIGNvbW1hbmQgdG8gZmFpbC4gIE9GRiBieSBkZWZhdWx0LiIsCi0iIiB9Owot I2VuZGlmIC8qIE5PU1BMICovCi0KLXN0YXRpYyBjaGFyICpoeHl4eXpbXSA9IHsKLSNpZmRlZiBD S19YWVoKLSNpZmRlZiBYWVpfSU5URVJOQUwKLQotLyogVGhpcyBpcyBmb3IgYnVpbHQtaW4gcHJv dG9jb2xzICovCi0KLSJTeW50YXg6IFNFVCBQUk9UT0NPTCB7IEtFUk1JVCwgWE1PREVNLCBZTU9E RU0sIFpNT0RFTSB9IFsgczEgczIgWyBzMyBdIF0iLAotIiAgU2VsZWN0cyBwcm90b2NvbCB0byB1 c2UgZm9yIHRyYW5zZmVycmluZyBmaWxlcy4gIFN0cmluZyBzMSBpcyBhIGNvbW1hbmQgdG8iLAot IiAgc2VuZCB0byB0aGUgcmVtb3RlIGhvc3QgcHJpb3IgdG8gU0VORGluZyBmaWxlcyB3aXRoIHRo aXMgcHJvdG9jb2wgaW4iLAotIiAgYmluYXJ5IG1vZGU7IHN0cmluZyBzMiBpcyB0aGUgc2FtZSB0 aGluZyBidXQgZm9yIHRleHQgbW9kZS4gIFVzZSBcIiVzXCIgaW4iLAotIiAgYW55IG9mIHRoZXNl IHN0cmluZ3MgdG8gcmVwcmVzZW50IHRoZSBmaWxlbmFtZShzKS4gIElmIHRoZSBwcm90b2NvbCBp cyIsCi0iICBLRVJNSVQsIHlvdSBtYXkgYWxzbyBzcGVjaWZ5IGEgc3RyaW5nIHMzLCB0aGUgY29t bWFuZCB0byBzdGFydCBhIEtlcm1pdCIsCi0iICBzZXJ2ZXIgb24gdGhlIHJlbW90ZSBob3N0IHdo ZW4geW91IGdpdmUgYSBHRVQsIFJFR0VULCBSRU1PVEUsIG9yIG90aGVyIiwKLSIgIGNsaWVudCBj b21tYW5kLiAgVXNlIHsgYnJhY2VzIH0gaWYgYW55IGNvbW1hbmQgY29udGFpbnMgc3BhY2VzLiAg RXhhbXBsZXM6IiwKLSIgIiwKLSIgICAgc2V0IHByb3RvIHhtb2RlbSB7cnggJXN9IHtyeCAtYSAl c30iLAotIiAgICBzZXQgcHJvdG8ga2VybWl0IHtrZXJtaXQgLVlRaXJ9IHtrZXJtaXQgLVlRVHJ9 IHtrZXJtaXQgLVlReH0iLAotCi0jZWxzZSAvKiBUaGlzIGlzIGZvciB3aGVuIG5vbi1LZXJtaXQg cHJvdG9jb2xzIGFyZSBleHRlcm5hbCAqLwotCi0iU3ludGF4OiBcCi1TRVQgUFJPVE9DT0wgeyBL RVJNSVQsIFhNT0RFTSwgWU1PREVNLCBaTU9ERU0gfSBbIHMxIHMyIHMzIHM0IHM1IHM2IF0iLAot IiAgU2VsZWN0cyBwcm90b2NvbCB0byB1c2UgZm9yIHRyYW5zZmVycmluZyBmaWxlcy4gIHMxIGFu ZCBzMiBhcmUgY29tbWFuZHMgdG8iLAotIiAgb3V0cHV0IHByaW9yIHRvIFNFTkRpbmcgd2l0aCB0 aGlzIHByb3RvY29sLCB0byBhdXRvbWF0aWNhbGx5IHN0YXJ0IHRoZSIsCi0iICBSRUNFSVZFIHBy b2Nlc3Mgb24gdGhlIG90aGVyIGVuZCBpbiBiaW5hcnkgb3IgdGV4dCBtb2RlLCByZXNwZWN0aXZl bHkuIiwKLSIgIElmIHRoZSBwcm90b2NvbCBpcyBLRVJNSVQsIHMzIGlzIHRoZSBjb21tYW5kIHRv IHN0YXJ0IGEgS2VybWl0IHNlcnZlciBvbiIsCi0iICB0aGUgcmVtb3RlIGNvbXB1dGVyLCBhbmQg dGhlcmUgYXJlIG5vIHM0LXM2IGNvbW1hbmRzLiAgT3RoZXJ3aXNlLCBzMyBhbmQiLAotIiAgczQg YXJlIGNvbW1hbmRzIHVzZWQgb24gdGhpcyBjb21wdXRlciBmb3Igc2VuZGluZyBmaWxlcyB3aXRo IHRoaXMgcHJvdG9jb2wiLAotIiAgaW4gYmluYXJ5IG9yIHRleHQgbW9kZSwgcmVzcGVjdGl2ZWx5 OyBzNSBhbmQgczYgYXJlIHRoZSBjb21tYW5kcyBmb3IiLAotIiAgcmVjZWl2aW5nIGZpbGVzIHdp dGggdGhpcyBwcm90b2NvbC4gIFVzZSBcIiVzXCIgaW4gYW55IG9mIHRoZXNlIHN0cmluZ3MiLAot IiAgdG8gcmVwcmVzZW50IHRoZSBmaWxlbmFtZShzKS4gIFVzZSB7IGJyYWNlcyB9IGlmIGFueSBj b21tYW5kIGNvbnRhaW5zIiwKLSIgIHNwYWNlcy4gIEV4YW1wbGVzOiIsCi0iICIsCi0iICAgIHNl dCBwcm90byBrZXJtaXQge2tlcm1pdCAtWVFpcn0ge2tlcm1pdCAtWVFUcn0ge2tlcm1pdCAtWVF4 fSIsCi0iICAgIHNldCBwcm90byB5bW9kZW0gcmIge3JiIC1hfSB7c2IgJXN9IHtzYiAtYSAlc30g cmIgcmIiLAotIiAiLAotIkV4dGVybmFsIHByb3RvY29scyByZXF1aXJlIFJFRElSRUNUIGFuZCBl eHRlcm5hbCBmaWxlIHRyYW5zZmVyIHByb2dyYW1zIHRoYXQiLAotInVzZSByZWRpcmVjdGFibGUg c3RhbmRhcmQgaW5wdXQvb3V0cHV0LiIsCi0jZW5kaWYgLyogWFlaX0lOVEVSTkFMICovCi0jZWxz ZQotIlN5bnRheDogXAotU0VUIFBST1RPQ09MIEtFUk1JVCBbIHMxIFsgczIgWyBzMyBdIF0gXSIs Ci0iICBMZXRzIHlvdSBzcGVjaWZ5IHRoZSBhdXRvdXBsb2FkIGJpbmFyeSwgYXV0b3VwbG9hZCB0 ZXh0LCBhbmQgYXV0b3NlcnZlciIsCi0iICBjb21tYW5kIHN0cmluZ3MgdG8gYmUgc2VudCB0byB0 aGUgcmVtb3RlIHN5c3RlbSBpbiBhZHZhbmNlIG9mIGFueSBTRU5EIiwKLSIgIG9yIEdFVCBjb21t YW5kcy4gIEJ5IGRlZmF1bHQgdGhlc2UgYXJlIFwia2VybWl0IC1pclwiLCBcImtlcm1pdCAtclwi LCBhbmQiLAotIiAgXCJrZXJtaXQgLXhcIi4gIFVzZSB7IGJyYWNlcyB9IGFyb3VuZCBhbnkgY29t bWFuZCB0aGF0IGNvbnRhaW5zIHNwYWNlcy4iLAotIiAgRXhhbXBsZToiLAotIiAiLAotIiAgICBz ZXQgcHJvdG8ga2VybWl0IHtrZXJtaXQgLVlpcn0ge2tlcm1pdCAtWVRyfSB7a2VybWl0IC1ZeH0i LAotI2VuZGlmIC8qIENLX1hZWiAqLwotIiAiLAotIiAgU0hPVyBQUk9UT0NPTCBkaXNwbGF5cyB0 aGUgY3VycmVudCBzZXR0aW5ncy4iLAotIiJ9OwotCi1zdGF0aWMgY2hhciAqaG14eGJ5ZSA9ICJT eW50YXg6IEJZRVxuXAotICBTaHV0IGRvd24gYW5kIGxvZyBvdXQgYSByZW1vdGUgS2VybWl0IHNl cnZlciI7Ci0KLSNpZmRlZiBDS19QRVJNUwotI2lmZGVmIFVOSVgKLXN0YXRpYyBjaGFyICpobXh4 Y2htb2RbXSA9IHsKLSJTeW50YXg6IENITU9EIFsgc3dpdGNoZXMgXSBjb2RlIGZpbGVzcGVjIiwK LSIgIFVOSVggb25seS4gIENoYW5nZXMgcGVybWlzc2lvbnMgb2YgdGhlIGdpdmVuIGZpbGUocykg dG8gdGhlIGdpdmVuIGNvZGUsIiwKLSIgIHdoaWNoIG11c3QgYmUgYW4gb2N0YWwgbnVtYmVyIHN1 Y2ggYXMgNjY0IG9yIDc3NS4gIE9wdGlvbmFsIHN3aXRjaGVzOiIsCi0iICIsCi0iICAgL0ZJTEVT ICAgICAgICBPbmx5IGNoYW5nZSBwZXJtaXNzaW9ucyBvZiByZWd1bGFyIGZpbGVzLiIsCi0iICAg L0RJUkVDVE9SSUVTICBPbmx5IGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBkaXJlY3RvcnkgZmlsZXMu IiwKLSIgICAvVFlQRTpCSU5BUlkgIE9ubHkgY2hhbmdlIHBlcm1pc3Npb25zIG9mIGJpbmFyeSBm aWxlcy4iLAotIiAgIC9UWVBFOlRFWFQgICAgT25seSBjaGFuZ2UgcGVybWlzc2lvbnMgb2YgdGV4 dCBmaWxlcy4iLAotIiAgIC9ET1RGSUxFUyAgICAgSW5jbHVkZSBmaWxlcyB3aG9zZSBuYW1lcyBi ZWdpbiB3aXRoIGRvdCAoLikuIiwKLSIgICAvUkVDVVJTSVZFICAgIENoYW5nZSBwZXJtaXNzaW9u cyBpbiBzdWJkaXJlY3RvcmllcyB0b28uIiwKLSIgICAvTElTVCAgICAgICAgIExpc3QgZWFjaCBm aWxlIChzeW5vbnltOiAvVkVSQk9TRSkuIiwKLSIgICAvTk9MSVNUICAgICAgIE9wZXJhdGUgc2ls ZW50bHkgKHN5bm9ueW06IC9RVUlFVCkuIiwKLSIgICAvUEFHRSAgICAgICAgIFdoZW4gbGlzdGlu ZywgcGF1c2UgYXQgZW5kIG9mIGVhY2ggc2NyZWVuIChpbXBsaWVzIC9MSVNUKS4iLAotIiAgIC9O T1BBR0UgICAgICAgV2hlbiBsaXN0aW5nLCBkb24ndCBwYXVzZSBhdCBlbmQgb2YgZWFjaCBzY3Jl ZW4uIiwKLSIgICAvU0lNVUxBVEUgICAgIFNob3cgd2hhdCB3b3VsZCBiZSBkb25lIGJ1dCBkb24n dCBhY3R1YWxseSBkbyBpdC4iLAotIiIKLX07Ci0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8q IENLX1BFUk1TICovCi0KLSNpZm5kZWYgTk9TUEwKLSNpZm5kZWYgTk9TRVhQCi1zdGF0aWMgY2hh ciAqaG14eHNleHBbXSA9IHsKLSJTeW50YXg6IChvcGVyYXRpb24gb3BlcmFuZCBbIG9wZXJhbmQg WyAuLi4gXSBdKSIsCi0iICIsCi0iICBDLUtlcm1pdCBpbmNsdWRlcyBhIHNpbXBsZSBMSVNQLWxp a2UgUy1FeHByZXNzaW9uIHBhcnNlciBvcGVyYXRpbmcgb24iLAotIiAgbnVtYmVycyBvbmx5LiAg QW4gUy1FeHByZXNzaW9uIGlzIGFsd2F5cyBlbmNsb3NlZCBpbiBwYXJlbnRoZXNlcy4gIFRoZSIs Ci0iICBwYXJlbnRoZXNlcyBjYW4gY29udGFpbiAoYSkgYSBudW1iZXIsIChiKSBhIHZhcmlhYmxl LCAoYykgYSBmdW5jdGlvbiB0aGF0IiwKLSIgIHJldHVybnMgYSBudW1iZXIsIG9yIChkKSBhbiBv cGVyYXRvciBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSBvcGVyYW5kcy4iLAotIiAgT3BlcmFuZHMg Y2FuIGJlIGFueSBvZiAoYSkgdGhyb3VnaCAoYykgb3IgYW4gUy1FeHByZXNzaW9uLiAgTnVtYmVy cyBjYW4gYmUiLAotIiAgaW50ZWdlcnMgb3IgZmxvYXRpbmctcG9pbnQuICBBbnkgb3BlcmFuZCB0 aGF0IGlzIG5vdCBhIG51bWJlciBhbmQgZG9lcyBub3QiLAotIiAgc3RhcnQgd2l0aCBiYWNrc2xh c2ggKFxcKSBpcyB0cmVhdGVkIGFzIGEgS2VybWl0IG1hY3JvIG5hbWUuICBPcGVyYXRvcnM6IiwK LSIgIiwKLSIgT3BlcmF0b3IgIEFjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEV4YW1wbGUgICAgICAgICAgIFZhbHVlIiwKLSIgIEVWQUwgKC4pICBSZXR1cm5zIHRoZSBjb250 YWluZWQgdmFsdWUgICAgICAgICAgICAoNikgICAgICAgICAgICAgICA2IiwKLSIgIFFVT1RFICgn KSBJbmhpYml0cyBldmFsdWF0aW9uIG9mIGZvbGxvd2luZyB2YWx1ZSAocXVvdGUgYSkgICAgICAg ICBhIiwKLSIgIFNFVFEgICAgICBBc3NpZ25zIGEgdmFsdWUgdG8gYSBnbG9iYWwgdmFyaWFibGUg ICAoc2V0cSBhIDIpICAgICAgICAyIiwKLSIgIExFVCAgICAgICBBc3NpZ25zIGEgdmFsdWUgdG8g YSBsb2NhbCB2YXJpYWJsZSAgICAobGV0IGIgLTEuMykgICAgIC0xLjMiLAotIiAgKyAgICAgICAg IEFkZHMgYWxsIG9wZXJhbmRzICgxIG9yIG1vcmUpICAgICAgICAgICgrIGEgYikgICAgICAgICAg IDAuNyIsCi0iICAtICAgICAgICAgU3VidHJhY3RzIGFsbCBvcGVyYW5kcyAoMSBvciBtb3JlKSAg ICAgKC0gOSA1IDIgMSkgICAgICAgMSIsCi0iICAqICAgICAgICAgTXVsdGlwbGllcyBhbGwgb3Bl cmFuZHMgKDEgb3IgbW9yZSkgICAgKCogYSAoKyBiIDEpIDMpICAtMS44IiwKLSIgIC8gICAgICAg ICBEaXZpZGVzIGFsbCBvcGVyYW5kcyAoMSBvciBtb3JlKSAgICAgICAoLyBiIGEgMikgICAgICAg IC0wLjMyNSIsCi0iICBeICAgICAgICAgUmFpc2UgZ2l2ZW4gbnVtYmVyIHRvIGdpdmVuIHBvd2Vy ICAgICAgKF4gMyAyKSAgICAgICAgICAgOSIsCi0iICArKyAgICAgICAgSW5jcmVtZW50cyBhIHZh cmlhYmxlICAgICAgICAgICAgICAgICAgKCsrIGEgMS4yKSAgICAgICAgMy4yIiwKLSIgIC0tICAg ICAgICBEZWNyZW1lbnRzIGEgdmFyaWFibGUgICAgICAgICAgICAgICAgICAoLS0gYSkgICAgICAg ICAgICAxIiwKLSIgIEFCUyAgICAgICBBYnNvbHV0ZSB2YWx1ZSBvZiAxIG9wZXJhbmQgICAgICAg ICAgICAoYWJzICgqIGEgYiAzKSkgICA3LjgiLAotIiAgTUFYICAgICAgIE1heGltdW0gb2YgYWxs IG9wZXJhbmRzICgxIG9yIG1vcmUpICAgIChtYXggMSAyIDMgNCkgICAgIDQiLAotIiAgTUlOICAg ICAgIE1pbmltdW0gb2YgYWxsIG9wZXJhbmRzICgxIG9yIG1vcmUpICAgIChtaW4gMSAyIDMgNCkg ICAgIDEiLAotIiAgTU9EICAgICAgIE1vZHVsdXMgb2YgYWxsIG9wZXJhbmRzICgxIG9yIG1vcmUp ICAgIChtb2QgNyA0IDIpICAgICAgIDEiLAotIiAgVFJVTkNBVEUgIEludGVnZXIgcGFydCBvZiBm bG9hdGluZy1wb2ludCBvcGVyYW5kICh0cnVuY2F0ZSAxLjMzMykgIDEiLAotIiAgQ0VJTElORyAg IENlaWxpbmcgb2YgZmxvYXRpbmctcG9pbnQgb3BlcmFuZCAgICAgIChjZWlsaW5nIDEuMjUpICAg IDIiLAotIiAgRkxPT1IgICAgIEZsb29yIG9mIGZsb2F0aW5nLXBvaW50IG9wZXJhbmQgICAgICAg IChmbG9vciAxLjI1KSAgICAgIDEiLAotIiAgUk9VTkQgICAgIE9wZXJhbmQgcm91bmRlZCB0byBu ZWFyZXN0IGludGVnZXIgICAgIChyb3VuZCAxLjc1KSAgICAgIDIiLAotIiAgU1FSVCAgICAgIFNx dWFyZSByb290IG9mIDEgb3BlcmFuZCAgICAgICAgICAgICAgIChzcXJ0IDIpICAgICAgICAgIDEu NDE0Li4iLAotIiAgRVhQICAgICAgIGUgKDIuNzE4MjguLikgdG8gdGhlIGdpdmVuIHBvd2VyICAg ICAgIChleHAgLTEpICAgICAgICAgIDAuMzY3Li4iLAotIiAgU0lOICAgICAgIFNpbmUgb2YgYW5n bGUgZXhwcmVzc2VkIGluIHJhZGlhbnMgICAgIChzaW4gKC8gcGkgMikpICAgIDEuMCIsCi0iICBD T1MgICAgICAgQ29zaW5lIG9mIGdpdmVuIG51bWJlciAgICAgICAgICAgICAgICAgKGNvcyBwaSkg ICAgICAgICAtMS4wIiwKLSIgIFRBTiAgICAgICBUYW5nZW50IG9mIGdpdmVuIG51bWJlciAgICAg ICAgICAgICAgICAodGFuIHBpKSAgICAgICAgICAwLjAiLAotIiAgTE9HICAgICAgIE5hdHVyYWwg bG9nIChiYXNlIGUpIG9mIGdpdmVuIG51bWJlciAgIChsb2cgMi43MTgzKSAgICAgIDEuMDAwLi4i LAotIiAgTE9HMTAgICAgIExvZyBiYXNlIDEwIG9mIGdpdmVuIG51bWJlciAgICAgICAgICAgIChs b2cxMCAxMDAwKSAgICAgIDMuMCIsCi0iICIsCi0iUHJlZGljYXRlIG9wZXJhdG9ycyByZXR1cm4g MCBpZiBmYWxzZSwgMSBpZiB0cnVlLCBhbmQgaWYgaXQgaXMgdGhlIG91dGVybW9zdCIsCi0ib3Bl cmF0b3IsIHNldHMgU1VDQ0VTUyBvciBGQUlMVVJFIGFjY29yZGluZ2x5OiIsCi0iICIsCi0iICA8 ICAgICAgICAgT3BlcmFuZHMgaW4gc3RyaWN0bHkgZGVzY2VuZGluZyBvcmRlciAgKDwgNiA1IDQg MyAyIDEpICAgMSIsCi0iICA8PSAgICAgICAgT3BlcmFuZHMgaW4gZGVzY2VuZGluZyBvcmRlciAg ICAgICAgICAgKDw9IDYgNiA1IDQgMyAyKSAgMSIsCi0iICAhPSAgICAgICAgT3BlcmFuZHMgYXJl IG5vdCBlcXVhbCAgICAgICAgICAgICAgICAgKCE9IDEgMSAxLjApICAgICAgMCIsCi0iICA9ICAg KD09KSAgQWxsIG9wZXJhbmRzIGFyZSBlcXVhbCAgICAgICAgICAgICAgICAgKD0gMyAzIDMgMykg ICAgICAgMSIsCi0iICA+ICAgICAgICAgT3BlcmFuZHMgaW4gc3RyaWN0bHkgYXNjZW5kaW5nIG9y ZGVyICAgKD4gMSAyIDMgNCA1IDYpICAgMSIsCi0iICA+PSAgICAgICAgT3BlcmFuZHMgaW4gYXNj ZW5kaW5nIG9yZGVyICAgICAgICAgICAgKD4gMSAxIDIgMyA0IDUpICAgMSIsCi0iICBBTkQgKCYm KSAgT3BlcmFuZHMgYXJlIGFsbCB0cnVlICAgICAgICAgICAgICAgICAgKGFuZCAxIDEgMSAxIDAp ICAgMCIsCi0iICBPUiAgKHx8KSAgQXQgbGVhc3Qgb25lIG9wZXJhbmQgaXMgdHJ1ZSAgICAgICAg ICAgKG9yIDEgMSAxIDEgMCkgICAgMSIsCi0iICBYT1IgICAgICAgTG9naWNhbCBFeGNsdXNpdmUg T1IgICAgICAgICAgICAgICAgICAgKHhvciAzIDEpICAgICAgICAgMCIsCi0iICBOT1QgKCEpICAg UmV2ZXJzZXMgdHJ1dGggdmFsdWUgb2Ygb3BlcmFuZCAgICAgICAgKG5vdCAzKSAgICAgICAgICAg MCIsCi0iICIsCi0iQml0LW9yaWVudGVkIG9wZXJhdG9yczoiLAotIiAiLAotIiAgJiAgICAgICAg IEJpdHdpc2UgQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICgmIDcgMikgICAgICAgICAg IDIiLAotIiAgfCAgICAgICAgIEJpdHdpc2UgT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICh8IDEgMiAzIDQpICAgICAgIDciLAotIiAgIyAgICAgICAgIEJpdHdpc2UgRXhjbHVzaXZlIE9S ICAgICAgICAgICAgICAgICAgICgjIDMgMSkgICAgICAgICAgIDIiLAotIiAgfiAgICAgICAgIFJl dmVyc2VzIGFsbCBiaXRzICAgICAgICAgICAgICAgICAgICAgICh+IDMpICAgICAgICAgICAgLTQi LAotIiAiLAotIk9wZXJhdG9ycyB0aGF0IHdvcmsgb24gdHJ1dGggdmFsdWVzOiIsCi0iICIsCi0i ICBJRiAgICAgICAgQ29uZGl0aW9uYWwgZXZhbHVhdGlvbiAgICAgICAgICAgICAgICAgKGlmICgx KSAyIDMpICAgICAgMiIsCi0iICIsCi0iT3BlcmF0b3JzIGNhbiBhbHNvIGJlIG5hbWVzIG9mIEtl cm1pdCBtYWNyb3MgdGhhdCByZXR1cm4gZWl0aGVyIG51bWVyaWMiLAotInZhbHVlcyBvciBubyB2 YWx1ZSBhdCBhbGwuIiwKLSIgIiwKLSJCdWlsdC1pbiBjb25zdGFudHMgYXJlOiIsCi0iICIsCi0i ICB0ICAgICAgICAgVHJ1ZSAoMSkiLAotIiAgbmlsICAgICAgIEZhbHNlIChlbXB0eSkiLAotIiAg cGkgICAgICAgIFRoZSB2YWx1ZSBvZiBQaSAoMy4xNDE1OTI2Li4uKSIsCi0iICIsCi0iSWYgU0VU IFNFWFBSRVNTSU9OIFRSVU5DQVRFLUFMTC1SRVNVTFRTIGlzIE9OLCBhbGwgcmVzdWx0cyBhcmUg dHJ1bmN0YXRlZCIsCi0idG8gaW50ZWdlciB2YWx1ZXMgYnkgZGlzY2FyZGluZyBhbnkgZnJhY3Rp b25hbCBwYXJ0LiAgT3RoZXJ3aXNlIHJlc3VsdHMiLAotImFyZSBmbG9hdGluZy1wb2ludCBpZiB0 aGVyZSBmcmFjdGlvbmFsIHBhcnQgYW5kIGludGVnZXIgb3RoZXJ3aXNlLiIsCi0iSWYgU0VUIFNF WFBSRVNTSU9OIEVDSE8tUkVTVUxUIGlzIEFVVE8gKHRoZSBkZWZhdWx0KSwgdGhlIHZhbHVlIG9m IHRoZSIsCi0iUy1FeHByZXNzaW9uIGlzIHByaW50ZWQgaWYgdGhlIFMtRXhwcmVzc2lvbiBpcyBn aXZlbiBhdCB0b3AgbGV2ZWw7IGlmIE9OLCIsCi0iaXQgaXMgcHJpbnRlZCBhdCBhbnkgbGV2ZWw7 IGlmIE9GRiBpdCBpcyBub3QgcHJpbnRlZC4gIEF0IGFsbCBsZXZlbHMsIHRoZSIsCi0idmFyaWFi bGUgXFx2KHNleHByZXNzaW9uKSBpcyBzZXQgdG8gdGhlIG1vc3QgcmVjZW50IFMtRXhwcmVzc2lv biwgYW5kIiwKLSJcXHYoc3ZhbHVlKSBpcyBzZXQgdG8gaXRzIHZhbHVlLiAgWW91IGNhbiB1c2Ug dGhlIFxcZnNleHByZXNzc2lvbigpIGZ1bmN0aW9uIiwKLSJ0byBldmFsdWF0ZSBhbiBTLUV4cHJl c3Npb24gYW55d2hlcmUgaW4gYSBLZXJtaXQgY29tbWFuZC4iLAotIiIKLX07Ci0jZW5kaWYgLyog Tk9TRVhQICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotc3RhdGljIGNoYXIgKmhteHhncmVwW10g PSB7Ci0jaWZkZWYgVU5JWE9ST1NLCi0iU3ludGF4OiBHUkVQIFsgb3B0aW9ucyBdIHBhdHRlcm4g ZmlsZXNwZWMiLAotI2Vsc2UKLSJTeW50YXg6IEZJTkQgWyBvcHRpb25zIF0gcGF0dGVybiBmaWxl c3BlYyIsCi0jZW5kaWYgLyogVU5JWE9ST1NLICovCi0iICBTZWFyY2hlcyB0aHJvdWdoIHRoZSBn aXZlbiBmaWxlIG9yIGZpbGVzIGZvciB0aGUgZ2l2ZW4gY2hhcmFjdGVyIHN0cmluZyIsCi0iICBv ciBwYXR0ZXJuLiAgSW4gdGhlIG5vcm1hbCBjYXNlLCBhbGwgbGluZXMgY29udGFpbmluZyBhbnkg dGV4dCB0aGF0IG1hdGNoZXMiCi0sCi0iICB0aGUgcGF0dGVybiBhcmUgcHJpbnRlZC4gIFBhdHRl cm4gc3ludGF4IGlzIGFzIGRlc2NyaWJlZCBpbiBIRUxQIFBBVFRFUk5TIiwKLSIgIGV4Y2VwdCB0 aGF0ICcqJyBpcyBpbXBsaWVkIGF0IHRoZSBiZWdpbm5pbmcgdW5sZXNzIHRoZSBwYXR0ZXJuIHN0 YXJ0cyB3aXRoIiwKLSIgICdeJyBhbmQgYWxzbyBhdCB0aGUgZW5kIHVubGVzcyB0aGUgcGF0dGVy biBlbmRzIHdpdGggJyQnLiAgVGhlcmVmb3JlLCIsCi0iICBcImdyZXAgc29tZXRoaW5nICoudHh0 XCIgbGlzdHMgYWxsIGxpbmVzIGluIGFsbCAqLnR4dCBmaWxlcyB0aGF0IGNvbnRhaW4iLAotIiAg dGhlIHdvcmQgXCJzb21ldGhpbmdcIiwgYnV0IFwiZ3JlcCBec29tZXRoaW5nICoudHh0XCIgbGlz dHMgb25seSB0aGUgbGluZXMiLAotIiAgdGhhdCBTVEFSVCB3aXRoIFwic29tZXRoaW5nXCIuICBU aGUgY29tbWFuZCBzdWNjZWVkcyBpZiBhbnkgb2YgdGhlIGdpdmVuIiwKLSIgIGZpbGVzIGNvbnRh aW5lZCBhbnkgbGluZXMgdGhhdCBtYXRjaCB0aGUgcGF0dGVybiwgb3RoZXJ3aXNlIGl0IGZhaWxz LiIsCi0jaWZkZWYgVU5JWE9ST1NLCi0iICBTeW5vbnltOiBGSU5ELiIsCi0jZWxzZQotIiAgU3lu b255bTogR1JFUC4iLAotI2VuZGlmIC8qIFVOSVhPUk9TSyAqLwotIiAiLAotIkZpbGUgc2VsZWN0 aW9uIG9wdGlvbnM6IiwKLSIgIC9OT0JBQ0tVUEZJTEVTIiwKLSIgICAgRXhjbHVkZXMgYmFja3Vw IGZpbGVzIChsaWtlIG9vZmEudHh0Ln4zfikgZnJvbSB0aGUgc2VhcmNoLiIsCi0iICAvRE9URklM RVMiLAotIiAgICBJbmNsdWRlcyBmaWxlcyB3aG9zZSBuYW1lcyBzdGFydCB3aXRoIGRvdCAoLikg aW4gdGhlIHNlYXJjaC4iLAotIiAgL05PRE9URklMRVMiLAotIiAgICBFeGNsdWRlcyBmaWxlcyB3 aG9zZSBuYW1lcyBzdGFydCB3aXRoIGRvdCAoLikgZnJvbSB0aGUgc2VhcmNoLiIsCi0jaWZkZWYg UkVDVVJTSVZFCi0iICAvUkVDVVJTSVZFIiwKLSIgICAgU2VhcmNoZXMgdGhyb3VnaCBmaWxlcyBp biBzdWJkaXJlY3RvcmllcyB0b28uIiwKLSNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KLSIgIC9UWVBF OlRFWFQiLAotIiAgICBTZWFyY2ggb25seSB0ZXh0IGZpbGVzIChyZXF1aXJlcyBGSUxFIFNDQU4g T04pLiIsCi0iICAvVFlQRTpCSU5BUlkiLAotIiAgICBTZWFyY2ggb25seSBiaW5hcnkgZmlsZXMg KHJlcXVpcmVzIEZJTEUgU0NBTiBPTikuIiwKLSIgIiwKLSJQYXR0ZXJuLW1hdGNoaW5nIG9wdGlv bnM6IiwKLSIgIC9OT0NBU0UiLAotIiAgICBJZ25vcmVzIGNhc2Ugb2YgbGV0dGVycyAoQVNDSUkg b25seSkgd2hlbiBjb21wYXJpbmcuIiwKLSIgIC9OT01BVENIIiwKLSIgICAgU2VhcmNoZXMgZm9y IGxpbmVzIHRoYXQgZG8gTk9UIG1hdGNoIHRoZSBwYXR0ZXJuLiIsCi0iICAvRVhDRVBUOnBhdHRl cm4iLAotIiAgICBFeGNsdWRlIGxpbmVzIHRoYXQgbWF0Y2ggdGhlIG1haW4gcGF0dGVybiB0aGF0 IGFsc28gbWF0Y2ggdGhpcyBwYXR0ZXJuLiIsCi0iICIsCi0iRGlzcGxheSBvcHRpb25zOiIsCi0i ICAvQ09VTlQ6dmFyaWFibGUtbmFtZSIsCi0iICAgIEZvciBlYWNoIGZpbGUsIHByaW50cyBvbmx5 IHRoZSBmaWxlbmFtZSBhbmQgYSBjb3VudCBvZiBtYXRjaGluZyBsaW5lcyIsCi0iICAgIGFuZCBh c3NpZ25zIHRoZSB0b3RhbCBtYXRjaCBjb3VudCB0byB0aGUgdmFyaWFibGUsIGlmIG9uZSBpcyBn aXZlbi4iLAotIiAgL05BTUVPTkxZIiwKLSIgICAgUHJpbnRzIHRoZSBuYW1lIG9mIGVhY2ggZmls ZSB0aGF0IGNvbnRhaW5zIGF0IGxlYXN0IG9uZSBtYXRjaGluZyBsaW5lLCIsCi0iICAgIG9uZSBu YW1lIHBlciBsaW5lLCByYXRoZXIgdGhhbiBzaG93aW5nIGVhY2ggbWF0Y2hpbmcgbGluZS4iLAot IiAgL05PTElTVCIsCi0iICAgIERvZXNuJ3QgcHJpbnQgYW55dGhpbmcgKGJ1dCBzZXRzIFNVQ0NF U1Mgb3IgRkFJTFVSRSBhcHByb3ByaWF0ZWx5KS4iLAotIiAgL0xJTkVOVU1CRVJTIiwKLSIgICAg UHJlY2VkZXMgZWFjaCBmaWxlIGxpbmUgYnkgaXRzIGxpbmUgbnVtYmVyIHdpdGhpbiB0aGUgZmls ZS4iLAotIiAgL1BBR0UiLAotIiAgICBQYXVzZXMgYWZ0ZXIgZWFjaCBzY3JlZW5mdWwuIiwKLSIg IC9OT1BBR0UiLAotIiAgICBEb2Vzbid0IHBhdXNlIGFmdGVyIGVhY2ggc2NyZWVuZnVsLiIsCi0i ICAvT1VUUFVUOm5hbWUiLAotIiAgICBTZW5kcyByZXN1bHRzIHRvIHRoZSBnaXZlbiBmaWxlLiAg SWYgdGhpcyBzd2l0Y2ggaXMgb21pdHRlZCwgdGhlIiwKLSIgICAgcmVzdWx0cyBhcHBlYXIgb24g eW91ciBzY3JlZW4uICBUaGlzIHN3aXRjaCBvdmVycmlkZXMgYW55IGV4cHJlc3Mgb3IiLAotIiAg ICBpbXBsaWVkIC9QQUdFIHN3aXRjaC4iLAotIiJ9OwotCi1zdGF0aWMgY2hhciAqaG14eGRpcltd ID0gewotI2lmZGVmIERPTVlESVIKLSJTeW50YXg6IERJUkVDVE9SWSBbIHN3aXRjaGVzIF0gWyBm aWxlc3BlYyBbIGZpbGVzcGVjIFsgLi4uIF0gXSBdIiwKLSNpZmRlZiBMT0NVUwotIiAgSWYgTE9D VVMgaXMgUkVNT1RFIG9yIExPQ1VTIGlzIEFVVE8gYW5kIHlvdSBoYXZlIGFuIEZUUCBjb25uZWN0 aW9uLCIsCi0iICB0aGlzIGNvbW1hbmQgaXMgZXF1aXZhbGVudCB0byBSRU1PVEUgRElSRUNUT1JZ IChSRElSKS4gIE90aGVyd2lzZToiLAotIiAiLAotI2VuZGlmIC8qIExPQ1VTICovCi0iICBMaXN0 cyBsb2NhbCBmaWxlcy4gIFRoZSBmaWxlc3BlYyBtYXkgYmUgYSBmaWxlbmFtZSwgcG9zc2libHkg Y29udGFpbmluZyIsCi0iICB3aWxkY2FyZCBjaGFyYWN0ZXJzLCBvciBhIGRpcmVjdG9yeSBuYW1l LiAgSWYgbm8gZmlsZXNwZWMgaXMgZ2l2ZW4sIGFsbCIsCi0iICBmaWxlcyBpbiB0aGUgY3VycmVu dCBkaXJlY3RvcnkgYXJlIGxpc3RlZC4gIElmIGEgZGlyZWN0b3J5IG5hbWUgaXMgZ2l2ZW4sIiwK LSIgIGFsbCB0aGUgIGZpbGVzIGluIGl0IGFyZSBsaXN0ZWQuICBNdWx0aXBsZSBmaWxlc3BlY3Mg Y2FuIGJlIGdpdmVuLiIsCi0iICBPcHRpb25hbCBzd2l0Y2hlczoiLAotIiAiLAotIiAgIC9CUklF RiAgICAgICAgICAgTGlzdCBmaWxlbmFtZXMgb25seS4iLAotI2lmZGVmIENLX1BFUk1TCi0iICAg L1ZFUkJPU0UgICAgICAgKyBBbHNvIGxpc3QgcGVybWlzc2lvbnMsIHNpemUsIGFuZCBkYXRlLiIs Ci0jZWxzZQotIiAgIC9WRVJCT1NFICAgICAgICsgQWxzbyBsaXN0IGRhdGUgYW5kIHNpemUuIiwK LSNlbmRpZiAvKiBDS19QRVJNUyAqLwotIiAgIC9GSUxFUyAgICAgICAgICAgU2hvdyBmaWxlcyBi dXQgbm90IGRpcmVjdG9yaWVzLiIsCi0iICAgL0RJUkVDVE9SSUVTICAgICBTaG93IGRpcmVjdG9y aWVzIGJ1dCBub3QgZmlsZXMuIiwKLSIgICAvQUxMICAgICAgICAgICArIFNob3cgYm90aCBmaWxl cyBhbmQgZGlyZWN0b3JpZXMuIiwKLSIgICAvQVJSQVk6JmEgICAgICAgIFN0b3JlIGZpbGUgbGlz dCBpbiBzcGVjaWZpZWQgYXJyYXkgKGUuZy4gXFwlYVtdKS4iLAotIiAgIC9QQUdFICAgICAgICAg ICAgUGF1c2UgYWZ0ZXIgZWFjaCBzY3JlZW5mdWwuIiwKLSIgICAvTk9QQUdFICAgICAgICAgIERv bid0IHBhdXNlIGFmdGVyIGVhY2ggc2NyZWVuZnVsLiIsCi0iICAgL1RPUDpuICAgICAgICAgICBP bmx5IHNob3cgdGhlIHRvcCBuIGxpbmVzIG9mIHRoZSBkaXJlY3RvcnkgbGlzdGluZy4iLAotI2lm ZGVmIFVOSVhPUk9TSwotIiAgIC9ET1RGSUxFUyAgICAgICAgSW5jbHVkZSBmaWxlcyB3aG9zZSBu YW1lcyBzdGFydCB3aXRoIGRvdCAocGVyaW9kKS4iLAotIiAgIC9OT0RPVEZJTEVTICAgICsgRG9u J3QgaW5jbHVkZSBmaWxlcyB3aG9zZSBuYW1lcyBzdGFydCB3aXRoIGRvdC4iLAotIiAgIC9GT0xM T1dMSU5LUyAgICAgRm9sbG93IHN5bWJvbGljIGxpbmtzLiIsCi0iICAgL05PRk9MTE9XTElOS1Mg KyBEb24ndCBmb2xsb3cgc3ltYm9saWMgbGlua3MuIiwKLSIgICAvTk9MSU5LUyAgICAgICAgIERv bid0IGxpc3Qgc3ltYm9saWMgbGlua3MgYXQgYWxsLiIsCi0iICAgL0JBQ0tVUCAgICAgICAgKyBJ bmNsdWRlIGJhY2t1cCBmaWxlcyAobmFtZXMgZW5kIHdpdGggLn5ufikuIiwKLSIgICAvTk9CQUNL VVBGSUxFUyAgIERvbid0IGluY2x1ZGUgYmFja3VwIGZpbGVzLiIsCi0jZW5kaWYgLyogVU5JWE9S T1NLICovCi0iICAgL09VVFBVVDpmaWxlICAgICBTdG9yZSBkaXJlY3RvcnkgbGlzdGluZyBpbiB0 aGUgZ2l2ZW4gZmlsZS4iLAotIiAgIC9IRUFESU5HICAgICAgICAgSW5jbHVkZSBoZWFkaW5nIGFu ZCBzdW1tYXJ5LiIsCi0iICAgL05PSEVBRElORyAgICAgKyBEb24ndCBpbmNsdWRlIGhlYWRpbmcg b3Igc3VtbWFyeS4iLAotIiAgIC9DT1VOVDp2YXIgICAgICAgUHV0IHRoZSBudW1iZXIgb2YgbWF0 Y2hpbmcgZmlsZXMgaW4gdGhlIGdpdmVuIHZhcmlhYmxlLiIsCi0iICAgL1NVTU1BUlkgICAgICAg ICBQcmludCBvbmx5IGNvdW50IGFuZCB0b3RhbCBzaXplIG9mIG1hdGNoaW5nIGZpbGVzLiIsCi0i ICAgL1hGRVJNT0RFICAgICAgICBTaG93IHBhdHRlcm4tYmFzZWQgdHJhbnNmZXIgbW9kZSAoVD1U ZXh0LCBCPUJpbmFyeSkuIiwKLSIgICAvVFlQRTogICAgICAgICAgIFNob3cgb25seSBmaWxlcyBv ZiB0aGUgc3BlY2lmaWVkIHR5cGUgKHRleHQgb3IgYmluYXJ5KS4iLAotIiAgIC9NRVNTQUdFOnRl eHQgICAgQWRkIGJyaWVmIG1lc3NhZ2UgdG8gZWFjaCBsaXN0aW5nIGxpbmUuIiwKLSIgICAvTk9N RVNTQUdFICAgICArIERvbid0IGFkZCBtZXNzYWdlIHRvIGVhY2ggbGlzdGluZyBsaW5lLiIsCi0i ICAgL05PWEZFUk1PREUgICAgKyBEb24ndCBzaG93IHBhdHRlcm4tYmFzZWQgdHJhbnNmZXIgbW9k ZSIsCi0iICAgL0lTT0RBVEUgICAgICAgKyBJbiB2ZXJib3NlIGxpc3RpbmdzLCBzaG93IGRhdGUg aW4gSVNPIDgwNjEgZm9ybWF0LiIsCi0iICAgL0VOR0xJU0hEQVRFICAgICBJbiB2ZXJib3NlIGxp c3RpbmdzLCBzaG93IGRhdGUgaW4gXCJFbmdsaXNoXCIgZm9ybWF0LiIsCi0jaWZkZWYgUkVDVVJT SVZFCi0iICAgL1JFQ1VSU0lWRSAgICAgICBEZXNjZW5kIHRocm91Z2ggc3ViZGlyZWN0b3JpZXMu IiwKLSIgICAvTk9SRUNVUlNJVkUgICArIERvbid0IGRlc2NlbmQgdGhyb3VnaCBzdWJkaXJlY3Rv cmllcy4iLAotI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLwotIiAgIC9TT1JUOmtleSAgICAgICAgU29y dCBieSBrZXksIE5BTUUsIERBVEUsIG9yIFNJWkU7IGRlZmF1bHQga2V5IGlzIE5BTUUuIiwKLSIg ICAvTk9TT1JUICAgICAgICArIERvbid0IHNvcnQuIiwKLSIgICAvQVNDRU5ESU5HICAgICArIElm IHNvcnRpbmcsIHNvcnQgaW4gYXNjZW5kaW5nIG9yZGVyLiIsCi0iICAgL1JFVkVSU0UgICAgICAg ICBJZiBzb3J0aW5nLCBzb3J0IGluIHJldmVyc2Ugb3JkZXIuIiwKLSIgIiwKLSJGYWN0b3J5IGRl ZmF1bHRzIGFyZSBtYXJrZWQgd2l0aCArLiAgRGVmYXVsdCBmb3IgcGFnaW5nIGRlcGVuZHMgb24g U0VUIiwKLSJDT01NQU5EIE1PUkUtUFJPTVBUSU5HLiAgVXNlIFNFVCBPUFRJT05TIERJUkVDVE9S WSBbIHN3aXRjaGVzIF0gdG8gY2hhbmdlIiwKLSJkZWZhdWx0czsgdXNlIFNIT1cgT1BUSU9OUyB0 byBkaXNwbGF5IGN1c3RvbWl6ZWQgZGVmYXVsdHMuICBBbHNvIHNlZSIsCi0iV0RJUkVDVE9SWS4i LAotI2Vsc2UKLSJTeW50YXg6IERJUkVDVE9SWSBbIGZpbGVzcGVjIF0iLAotIiAgTGlzdHMgdGhl IHNwZWNpZmllZCBmaWxlIG9yIGZpbGVzLiAgSWYgbm8gZmlsZXNwZWMgaXMgZ2l2ZW4sIGFsbCBm aWxlcyIsCi0iICBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgYXJlIGxpc3RlZC4iLAotI2VuZGlm IC8qIERPTVlESVIgKi8KLSIifTsKLQotc3RhdGljIGNoYXIgKmhteHh0b3VjW10gPSB7Ci0iU3lu dGF4OiBUT1VDSCBbIHN3aXRjaGVzIF0gZmlsZXNwZWMiLAotIiAgVXBkYXRlcyB0aGUgbW9kaWZp Y2F0aW9uIHRpbWUgb2YgdGhlIGdpdmVuIGZpbGUgb3IgZmlsZXMgdG8gdGhlIGN1cnJlbnQiLAot IiAgZGF0ZSBhbmQgdGltZS4gIElmIHRoZSBmaWxlc3BlYyBpcyB0aGUgbmFtZSBvZiBhIHNpbmds ZSBmaWxlIHRoYXQgZG9lcyBub3QiLAotIiAgZXhpc3QsIHRoZSBmaWxlIGlzIGNyZWF0ZWQuICBU aGUgb3B0aW9uYWwgc3dpdGNoZXMgYXJlIHRoZSBzYW1lIGFzIGZvciIsCi0iICB0aGUgRElSRUNU T1JZIGNvbW1hbmQuICBUT1VDSCBvcGVyYXRlcyBzaWxlbnRseSB1bmxlc3MgdGhlIC9WRVJCT1NF IiwKLSIgIHN3aXRjaCBpcyBnaXZlbiwgaW4gd2hpY2ggY2FzZSBpdCBsaXN0cyBlYWNoIGZpbGUg aXQgYWZmZWN0cy4iLAotIiJ9OwotCi0jaWZuZGVmIE5PU1BMCi1zdGF0aWMgY2hhciAqaG14eGtj ZFtdID0gewotIlN5bnRheDogS0NEIHN5bWJvbGljLWRpcmVjdG9yeS1uYW1lIiwKLSIgIEtlcm1p dCBDaGFuZ2UgRGlyZWN0b3J5OiBMaWtlIENEIChxLnYuKSBidXQgKGEpIGFsd2F5cyBhY3RzIGxv Y2FsbHksIGFuZCIsCi0iICAoYikgdGFrZXMgYSBzeW1ib2xpYyBkaXJlY3RvcnkgbmFtZSByYXRo ZXIgdGhhbiBhbiBhY3R1YWwgZGlyZWN0b3J5IG5hbWUuIiwKLSIgIFRoZSBzeW1ib2xpYyBuYW1l cyBjb3JyZXNwb25kIHRvIEtlcm1pdCdzIGRpcmVjdG9yeS12YWx1ZWQgYnVpbHQtaW4iLAotIiAg dmFyaWFibGVzLCBzdWNoIGFzIFxcdihkb3dubG9hZCksIFxcdihleGVkaXIpLCBhbmQgc28gb24u ICBIZXJlJ3MgdGhlIGxpc3Q6IgotLAotIiAiLAotI2lmZGVmIE5UCi0iICAgIGFwcGRhdGEgICAg ICAgWW91ciBwZXJzb25hbCBLZXJtaXQgOTUgYXBwbGljYXRpb24gZGF0YSBkaXJlY3RvcnkiLAot IiAgICBjb21tb24gICAgICAgIEtlcm1pdCA5NSdzIGFwcGxpY2F0aW9uIGRhdGEgZGlyZWN0b3J5 IGZvciBhbGwgdXNlcnMiLAotIiAgICBkZXNrdG9wICAgICAgIFlvdXIgV2luZG93cyBkZXNrdG9w IiwKLSNlbmRpZiAvKiBOVCAqLwotIiAgICBkb3dubG9hZCAgICAgIFlvdXIgZG93bmxvYWQgZGly ZWN0b3J5IChpZiBhbnkpIiwKLSNpZmRlZiBPUzJPUlVOSVgKLSIgICAgZXhlZGlyICAgICAgICBU aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBLZXJtaXQgZXhlY3V0YWJsZSByZXNpZGVzIiwKLSNlbmRp ZiAvKiBPUzJPUlVOSVggKi8KLSIgICAgaG9tZSAgICAgICAgICBZb3VyIGhvbWUsIGxvZ2luLCBv ciBkZWZhdWx0IGRpcmVjdG9yeSIsCi0iICAgIGluaWRpciAgICAgICAgVGhlIGRpcmVjdG9yeSB3 aGVyZSBLZXJtaXQncyBpbml0aWFsaXphdGlvbiB3YXMgZm91bmQiLAotI2lmZGVmIFVOSVgKLSIg ICAgbG9ja2RpciAgICAgICBUaGUgVU5JWCBVVUNQIGxvY2tmaWxlIGRpcmVjdG9yeSBvbiB0aGlz IGNvbXB1dGVyIiwKLSNlbmRpZiAvKiBVTklYICovCi0jaWZkZWYgTlQKLSIgICAgcGVyc29uYWwg ICAgICBZb3VyIFwiTXkgRG9jdW1lbnRzXCIgZGlyZWN0b3J5IiwKLSNlbmRpZiAvKiBOVCAqLwot IiAgICBzdGFydHVwICAgICAgIFlvdXIgY3VycmVudCBkaXJlY3RvcnkgYXQgdGhlIHRpbWUgS2Vy bWl0IHN0YXJ0ZWQiLAotIiAgICB0ZXh0ZGlyICAgICAgIFRoZSBkaXJlY3Rvcnkgd2hlcmUgS2Vy bWl0IHRleHQgZmlsZXMgcmVzaWRlLCBpZiBhbnkiLAotIiAgICB0bXBkaXIgICAgICAgIFlvdXIg dGVtcG9yYXJ5IGRpcmVjdG9yeSIsCi0iICIsCi0iICBBbHNvIHNlZSBDRCwgU0VUIEZJTEUgRE9X TkxPQUQsIFNFVCBURU1QLURJUkVDVE9SWS4iLAotIiIKLX07Ci0jZW5kaWYgLyogTk9TUEwgKi8K LQotc3RhdGljIGNoYXIgKmhteHhjd2RbXSA9IHsKLSNpZmRlZiBMT0NVUwotIiAgSWYgTE9DVVMg aXMgUkVNT1RFIG9yIExPQ1VTIGlzIEFVVE8gYW5kIHlvdSBoYXZlIGFuIEZUUCBjb25uZWN0aW9u LCIsCi0iICB0aGlzIGNvbW1hbmQgaXMgZXF1aXZhbGVudCB0byBSRU1PVEUgQ0QgKFJDRCkuICBP dGhlcndpc2U6IiwKLSIgIiwKLSNlbmRpZiAvKiBMT0NVUyAqLwotI2lmZGVmIHZtcwotIlN5bnRh eDogQ0QgWyBkaXJlY3Rvcnkgb3IgZGV2aWNlOmRpcmVjdG9yeSBdIiwKLSIgIENoYW5nZSBXb3Jr aW5nIERpcmVjdG9yeS4gIEVxdWl2YWxlbnQgdG8gVk1TIFNFVCBERUZBVUxUIGNvbW1hbmQuIiwK LSNlbHNlCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSJDaGFuZ2UgV29ya2luZyBEaXJlY3RvcnksIGVx dWl2YWxlbnQgdG8gQU9TL1ZTICdkaXInIGNvbW1hbmQuIiwKLSNlbHNlCi0jaWZkZWYgT1MyCi0i U3ludGF4OiBDRCBbIGRpc2sgb3IgZGlyZWN0b3J5IG5hbWUgXSIsCi0iICBDaGFuZ2UgRGlzayBv ciBEaXJlY3RvcnkuICBJZiBhIGRpc2sgb3IgZGlyZWN0b3J5IG5hbWUgaXMgbm90IHNwZWNpZmll ZCwiLAotIiAgeW91ciBjdXJyZW50IGRpcmVjdG9yeSBiZWNvbWVzIHRoZSBvbmUgc3BlY2lmaWVk IGJ5IEhPTUUgZW52aXJvbm1lbnQiLAotIiAgdmFyaWFibGUsIGlmIGFueS4gIEEgZGlzayBsZXR0 ZXIgbXVzdCBiZSBmb2xsb3dlZCBieSBhIGNvbG9uLiIsCi0jZWxzZQotIlN5bnRheDogQ0QgWyBk aXJlY3RvcnkgbmFtZSBdIiwKLSIgIENoYW5nZSBEaXJlY3RvcnkuICBDaGFuZ2VzIHlvdXIgY3Vy cmVudCwgd29ya2luZywgZGVmYXVsdCBkaXJlY3RvcnkgdG8gdGhlIiwKLSIgIG9uZSBnaXZlbiwg c28gdGhhdCBmdXR1cmUgbm9uLWFic29sdXRlIGZpbGVuYW1lIHJlZmVyZW5jZXMgYXJlIHJlbGF0 aXZlIHRvIiwKLSIgIHRoaXMgZGlyZWN0b3J5LiAgSWYgdGhlIGRpcmVjdG9yeSBuYW1lIGlzIG9t aXR0ZWQsIHlvdXIgaG9tZSAobG9naW4pIiwKLSIgIGRpcmVjdG9yeSBpcyBzdXBwbGllZC4iLAot I2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyogdm1z ICovCi0iICBDLUtlcm1pdCdzIGRlZmF1bHQgcHJvbXB0IHNob3dzIHlvdXIgY3VycmVudCBkaXJl Y3RvcnkuIiwKLSIgIFN5bm9ueW1zOiBMQ0QsIENXRC4iLAotI2lmZGVmIExPQ1VTCi0iICBBbHNv IHNlZTogU0VUIExPQ1VTLCBQV0QsIENEVVAsIEJBQ0ssIFJFTU9URSBDRCAoUkNEKSwgU0VUIENE LCBTRVQgUFJPTVBULiIsCi0jZWxzZQotIiAgQWxzbyBzZWU6IFBXRCwgQ0RVUCwgQkFDSywgUkVN T1RFIENEIChSQ0QpLCBTRVQgQ0QsIFNFVCBQUk9NUFQuIiwKLSNlbmRpZiAvKiBMT0NVUyAqLwot I2lmbmRlZiBOT1NQTAotIiAgQW5kIHNlZTogSEVMUCBLQ0QuIiwKLSNlbmRpZiAvKiBOT1NQTCAq LwotIiAgUmVsZXZhbnQgZW52aXJvbm1lbnQgdmFyaWFibGVzOiBDRFBBVEgsIEhPTUUuIiwKLSIi fTsKLQotc3RhdGljIGNoYXIgKmhteHhkZWxbXSA9IHsKLSJTeW50YXg6IERFTEVURSBbIHN3aXRj aGVzLi4uIF0gZmlsZXNwZWMiLAotI2lmZGVmIExPQ1VTCi0iICBJZiBMT0NVUyBpcyBSRU1PVEUg b3IgTE9DVVMgaXMgQVVUTyBhbmQgeW91IGhhdmUgYW4gRlRQIGNvbm5lY3Rpb24sIiwKLSIgIHRo aXMgY29tbWFuZCBpcyBlcXVpdmFsZW50IHRvIFJFTU9URSBERUxFVEUgKFJERUxFVEUpLiAgT3Ro ZXJ3aXNlOiIsCi0iICIsCi0jZW5kaWYgLyogTE9DVVMgKi8KLSIgIERlbGV0ZXMgYSBmaWxlIG9y IGZpbGVzIG9uIHRoZSBjb21wdXRlciB3aGVyZSBDLUtlcm1pdCBpcyBydW5uaW5nLiIsCi0iICBU aGUgZmlsZXNwZWMgbWF5IGRlbm90ZSBhIHNpbmdsZSBmaWxlIG9yIGNhbiBpbmNsdWRlIHdpbGRj YXJkIGNoYXJhY3RlcnMiLAotIiAgdG8gbWF0Y2ggbXVsdGlwbGUgZmlsZXMuICBSTSBpcyBhIHN5 bm9ueW0gZm9yIERFTEVURS4gIFN3aXRjaGVzIGluY2x1ZGU6IiwKLSIgIiwKLSIvQUZURVI6ZGF0 ZS10aW1lIiwKLSNpZmRlZiBWTVMKLSIgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMg Y3JlYXRlZCBhZnRlciB0aGUgZ2l2ZW4gZGF0ZS10aW1lIGFyZSIsCi0jZWxzZQotIiAgU3BlY2lm aWVzIHRoYXQgb25seSB0aG9zZSBmaWxlcyBtb2RpZmllZCBhZnRlciB0aGUgZ2l2ZW4gZGF0ZS10 aW1lIGFyZSIsCi0jZW5kaWYgLyogVk1TICovCi0iICB0byBiZSBkZWxldGVkLiAgSEVMUCBEQVRF IGZvciBpbmZvIGFib3V0IGRhdGUtdGltZSBmb3JtYXRzLiIsCi0iICIsCi0iL0JFRk9SRTpkYXRl LXRpbWUiLAotI2lmZGVmIFZNUwotIiAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBmaWxlcyBt b2RpZmllZCBiZWZvcmUgdGhlIGdpdmVuIGRhdGUtdGltZSIsCi0jZWxzZQotIiAgU3BlY2lmaWVz IHRoYXQgb25seSB0aG9zZSBmaWxlcyBtb2RpZmllZCBiZWZvcmUgdGhlIGdpdmVuIGRhdGUtdGlt ZSIsCi0jZW5kaWYgLyogVk1TICovCi0iICBhcmUgdG8gYmUgZGVsZXRlZC4iLAotIiAiLAotIi9O T1QtQUZURVI6ZGF0ZS10aW1lIiwKLSNpZmRlZiBWTVMKLSIgIFNwZWNpZmllcyB0aGF0IG9ubHkg dGhvc2UgZmlsZXMgbW9kaWZpZWQgYXQgb3IgYmVmb3JlIHRoZSBnaXZlbiBkYXRlLXRpbWUiLAot I2Vsc2UKLSIgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMgbW9kaWZpZWQgYXQgb3Ig YmVmb3JlIHRoZSBnaXZlbiBkYXRlLXRpbWUiLAotI2VuZGlmIC8qIFZNUyAqLwotIiAgYXJlIHRv IGJlIGRlbGV0ZWQuIiwKLSIgIiwKLSIvTk9ULUJFRk9SRTpkYXRlLXRpbWUiLAotI2lmZGVmIFZN UwotIiAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBmaWxlcyBtb2RpZmllZCBhdCBvciBhZnRl ciB0aGUgZ2l2ZW4gZGF0ZS10aW1lIiwKLSNlbHNlCi0iICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRo b3NlIGZpbGVzIG1vZGlmaWVkIGF0IG9yIGFmdGVyIHRoZSBnaXZlbiBkYXRlLXRpbWUiLAotI2Vu ZGlmIC8qIFZNUyAqLwotIiAgYXJlIHRvIGJlIGRlbGV0ZWQuIiwKLSIgIiwKLSIvTEFSR0VSLVRI QU46bnVtYmVyIiwKLSIgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMgbG9uZ2VyIHRo YW4gdGhlIGdpdmVuIG51bWJlciBvZiBieXRlcyBhcmUiLAotIiAgdG8gYmUgZGVsZXRlZC4iLAot IiAiLAotIi9TTUFMTEVSLVRIQU46bnVtYmVyIiwKLSIgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhv c2UgZmlsZXMgc21hbGxlciB0aGFuIHRoZSBnaXZlbiBudW1iZXIgb2YgYnl0ZXMgYXJlIiwKLSIg IHRvIGJlIHNlbnQuIiwKLSIgIiwKLSIvRVhDRVBUOnBhdHRlcm4iLAotIiAgU3BlY2lmaWVzIHRo YXQgYW55IGZpbGVzIHdob3NlIG5hbWVzIG1hdGNoIHRoZSBwYXR0ZXJuLCB3aGljaCBjYW4gYmUg YSIsCi0iICByZWd1bGFyIGZpbGVuYW1lIG9yIG1heSBjb250YWluIHdpbGRjYXJkcywgYXJlIG5v dCB0byBiZSBkZWxldGVkLiAgVG8iLAotIiAgc3BlY2lmeSBtdWx0aXBsZSBwYXR0ZXJucyAodXAg dG8gOCksIHVzZSBvdXRlciBicmFjZXMgYXJvdW5kIHRoZSBncm91cCIsCi0iICBhbmQgaW5uZXIg YnJhY2VzIGFyb3VuZCBlYWNoIHBhdHRlcm46IiwKLSIgIiwKLSIgICAgL0VYQ0VQVDp7e3BhdHRl cm4xfXtwYXR0ZXJuMn0uLi59IiwKLSIgIiwKLSNpZmRlZiBVTklYT1JPU0sKLSIvRE9URklMRVMi LAotIiAgSW5jbHVkZSAoZGVsZXRlKSBmaWxlcyB3aG9zZSBuYW1lcyBiZWdpbiB3aXRoIFwiLlwi LiIsCi0iICIsCi0iL05PRE9URklMRVMiLAotIiAgU2tpcCAoZG9uJ3QgZGVsZXRlKSBmaWxlcyB3 aG9zZSBuYW1lcyBiZWdpbiB3aXRoIFwiLlwiLiIsCi0iICIsCi0jZW5kaWYgLyogVU5JWE9ST1NL ICovCi0iL1RZUEU6VEVYVCIsCi0iICBEZWxldGUgb25seSByZWd1bGFyIHRleHQgZmlsZXMgKHJl cXVpcmVzIEZJTEUgU0NBTiBPTikiLAotIiAiLAotIi9UWVBFOkJJTkFSWSIsCi0iICBEZWxldGUg b25seSByZWd1bGFyIGJpbmFyeSBmaWxlcyAocmVxdWlyZXMgRklMRSBTQ0FOIE9OKSIsCi0iICIs Ci0iL0RJUkVDVE9SSUVTIiwKLSIgIEluY2x1ZGUgZGlyZWN0b3JpZXMuICBJZiB0aGlzIHN3aXRj aCBpcyBub3QgZ2l2ZW4sIG9ubHkgcmVndWxhciBmaWxlcyIsCi0iICBhcmUgZGVsZXRlZC4gIElm IGl0IGlzIGdpdmVuLCBLZXJtaXQgYXR0ZW1wdHMgdG8gZGVsZXRlIGFueSBkaXJlY3RvcmllcyIs Ci0iICB0aGF0IG1hdGNoIHRoZSBnaXZlbiBmaWxlIHNwZWNpZmljYXRpb24sIHdoaWNoIHN1Y2Nl ZWRzIG9ubHkgaWYgdGhlIiwKLSIgIGRpcmVjdG9yeSBpcyBlbXB0eS4iLAotIiAiLAotI2lmZGVm IFJFQ1VSU0lWRQotIi9SRUNVUlNJVkUiLAotIiAgVGhlIERFTEVURSBjb21tYW5kIGFwcGxpZXMg dG8gdGhlIGVudGlyZSBkaXJlY3RvcnkgdHJlZSByb290ZWQgaW4gdGhlIiwKLSIgIGN1cnJlbnQg b3Igc3BlY2lmaWVkIGRpcmVjdG9yeS4gIFdoZW4gdGhlIC9ESVJFQ1RPUklFUyBzd2l0Y2ggaXMg YWxzbyIsCi0iICBnaXZlbiwgS2VybWl0IGRlbGV0ZXMgYWxsIHRoZSAobWF0Y2hpbmcpIGZpbGVz IGluIGVhY2ggZGlyZWN0b3J5IGJlZm9yZSIsCi0iICBhdHRlbXB0aW5nIHRvIGRlbGV0ZSB0aGUg ZGlyZWN0b3J5IGl0c2VsZi4iLAotIiAiLAotI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLwotI2lmZGVm IFVOSVgKLSNpZmRlZiBSRUNVUlNJVkUKLSIvQUxMIiwKLSIgIFRoaXMgaXMgYSBzaG9ydGN1dCBm b3IgL1JFQ1VSU0lWRSAvRElSRUNUT1JJRVMgL0RPVEZJTEVTLiIsCi0jZWxzZQotIi9BTEwiLAot IiAgVGhpcyBpcyBhIHNob3J0Y3V0IGZvciAvRElSRUNUT1JJRVMgL0RPVEZJTEVTLiIsCi0jZW5k aWYgLyogUkVDVVJTSVZFICovCi0jZWxzZSAgLyogIVVOSVggKi8KLSNpZmRlZiBSRUNVUlNJVkUK LSIvQUxMIiwKLSIgIFRoaXMgaXMgYSBzaG9ydGN1dCBmb3IgL1JFQ1VSU0lWRSAvRElSRUNUT1JJ RVMuIiwKLSNlbHNlCi0iL0FMTCIsCi0iICBUaGlzIGlzIGEgc3lub255bSBmb3IgL0RJUkVDVE9S SUVTLiIsCi0jZW5kaWYgLyogUkVDVVJTSVZFICovCi0jZW5kaWYgLyogVU5JWCAqLwotIiAiLAot Ii9MSVNUIiwKLSIgIExpc3QgZWFjaCBmaWxlIGFuZCB0ZWxsIHdoZXRoZXIgaXQgd2FzIGRlbGV0 ZWQuICBTeW5vbnltczogL0xPRywgL1ZFUkJPU0UuIiwKLSIgIiwKLSIvTk9MSVNUIiwKLSIgIERv bid0IGxpc3QgZmlsZXMgd2hpbGUgZGVsZXRpbmcuICBTeW5vbnltczogL05PTE9HLCAvUVVJRVQu IiwKLSIgIiwKLSIvSEVBRElORyIsCi0iICBQcmludCBoZWFkaW5nIGFuZCBzdW1tYXJ5IGluZm9y bWF0aW9uLiIsCi0iICIsCi0iL05PSEVBRElORyIsCi0iICBEb24ndCBwcmludCBoZWFkaW5nIGFu ZCBzdW1tYXJ5IGluZm9ybWF0aW9uLiIsCi0iICIsCi0iL1NVTU1BUlkiLAotIiAgTGlrZSAvSEVB RElORyAvTk9MSVNULCBidXQgb25seSBwcmludHMgdGhlIHN1bW1hcnkgbGluZS4iLAotIiAiLAot Ii9QQUdFIiwKLSIgIElmIGxpc3RpbmcsIHBhdXNlIGFmdGVyIGVhY2ggc2NyZWVuZnVsLiIsCi0i ICIsCi0iL05PUEFHRSIsCi0iICBEb24ndCBwYXVzZSBhZnRlciBlYWNoIHNjcmVlbmZ1bC4iLAot IiAiLAotIi9BU0siLAotIiAgSW50ZXJhY3RpdmVseSBhc2sgcGVybWlzc2lvbiB0byBkZWxldGUg ZWFjaCBmaWxlLiAgUmVwbHkgWWVzIG9yIE9LIHRvIiwKLSIgIGRlbGV0ZSBpdCwgTm8gbm90IHRv IGRlbGV0ZSBpdCwgUXVpdCB0byBjYW5jZWwgdGhlIERFTEVURSBjb21tYW5kLCBhbmQiLAotIiAg R28gdG8gZ28gYWhlYWQgYW5kIGRlbGV0ZSBhbGwgdGhlIHJlc3Qgb2YgdGhlIGZpbGVzIHdpdGhv dXQgYXNraW5nLiIsCi0iICIsCi0iL05PQVNLIiwKLSIgIERlbGV0ZSBmaWxlcyB3aXRob3V0IGFz a2luZyBwZXJtaXNzaW9uLiIsCi0iICIsCi0iL1NJTVVMQVRFIiwKLSIgIFByZXZpZXcgZmlsZXMg c2VsZWN0ZWQgZm9yIGRlbGV0aW9uIHdpdGhvdXQgYWN0dWFsbHkgZGVsZXRpbmcgdGhlbS4iLAot IiAgSW1wbGllcyAvTElTVC4iLAotIiAiLAotIlVzZSBTRVQgT1BUSU9OUyBERUxFVEUgdG8gbWFr ZSBzZWxlY3RlZCBzd2l0Y2hlcyBlZmZlY3RpdmUgZm9yIGV2ZXJ5IERFTEVURSIsCi0iY29tbWFu ZCBcCi11bmxlc3MgeW91IG92ZXJyaWRlIHRoZW07IHVzZSBTSE9XIE9QVElPTlMgdG8gc2VlIHNl bGVjdGlvbnMgY3VycmVudGx5IiwKLSNpZmRlZiBMT0NVUwotImluIGVmZmVjdC4gIEFsc28gc2Vl IEhFTFAgU0VUIExPQ1VTLCBIRUxQIFBVUkdFLCBIRUxQIFdJTERDQVJELiIsCi0jZWxzZQotImlu IGVmZmVjdC4gIEFsc28gc2VlIEhFTFAgUFVSR0UsIEhFTFAgV0lMRENBUkQuIiwKLSNlbmRpZiAv KiBMT0NVUyAqLwotIiJ9OwotCi0jaWZuZGVmIE5PSFRUUAotc3RhdGljIGNoYXIgKmhteHhodHRw W10gPSB7Ci0iU3ludGF4OiIsCi0jaWZkZWYgQ0tfU1NMCi0iSFRUUCBbIDxzd2l0Y2hlcz4gXSBP UEVOIFt7IC9TU0wsIC9UTFMgfV0gPGhvc3RuYW1lPiA8c2VydmljZS9wb3J0PiIsCi0jZWxzZQot IkhUVFAgWyA8c3dpdGNoZXM+IF0gT1BFTiA8aG9zdG5hbWU+IDxzZXJ2aWNlL3BvcnQ+IiwKLSNl bmRpZiAvKkNLX1NTTCAqLwotIiAgSW5zdHJ1Y3RzIEtlcm1pdCB0byBvcGVuIGEgbmV3IGNvbm5l Y3Rpb24gZm9yIEhUVFAgY29tbXVuaWNhdGlvbiB3aXRoIiwKLSIgIHRoZSBzcGVjaWZpZWQgaG9z dCBvbiB0aGUgc3BlY2lmaWVkIHBvcnQuICBUaGUgZGVmYXVsdCBwb3J0IGlzIFwiaHR0cFwiLiIs Ci0jaWZkZWYgQ0tfU1NMCi0iICBJZiAvU1NMIG9yIC9UTFMgYXJlIHNwZWNpZmllZCBvciBpZiB0 aGUgc2VydmljZSBpcyBcImh0dHBzXCIgb3IgcG9ydCA0NDMsIiwKLSIgIGEgc2VjdXJlIGNvbm5l Y3Rpb24gd2lsbCBiZSBlc3RhYmxpc2hlZCB1c2luZyB0aGUgY3VycmVudCBhdXRoZW50aWNhdGlv biIsCi0iICBzZXR0aW5ncy4gIFNlZSBIRUxQIFNFVCBBVVRIIGZvciBkZXRhaWxzLiIsCi0jZW5k aWYgLyogQ0tfU1NMICovCi0iICBJZiA8c3dpdGNoZXM+IGFyZSBzcGVjaWZpZWQsIHRoZXkgYXJl IGFwcGxpZWQgdG8gYWxsIHN1YnNlcXVlbnQgSFRUUCIsCi0iICBhY3Rpb25zIChHRVQsIFBVVCwg Li4uKSB1bnRpbCBhbiBIVFRQIENMT1NFIGNvbW1hbmQgaXMgZXhlY3V0ZWQuIiwKLSIgIEEgVVJM IGNhbiBiZSBpbmNsdWRlZCBpbiBwbGFjZSBvZiB0aGUgaG9zdG5hbWUgYW5kIHNlcnZpY2Ugb3Ig cG9ydC4iLAotIiAiLAotIkhUVFAgQ0xPU0UiLAotIiAgSW5zdHJ1Y3RzIEtlcm1pdCB0byBjbG9z ZSBhbnkgb3BlbiBIVFRQIGNvbm5lY3Rpb24gYW5kIGNsZWFyIGFueSBzYXZlZCIsCi0iICBzd2l0 Y2ggdmFsdWVzLiIsCi0iICIsCi0iSFRUUCBbIDxzd2l0Y2hlcz4gXSBDT05ORUNUIDxob3N0Pls6 PHBvcnQ+XSIsCi0iICBJbnN0cnVjdHMgdGhlIHNlcnZlciB0byBlc3RhYmxpc2ggYSBjb25uZWN0 aW9uIHdpdGggdGhlIHNwZWNpZmllZCBob3N0IiwKLSIgIGFuZCB0byByZWRpcmVjdCBhbGwgZGF0 YSB0cmFuc21pdHRlZCBiZXR3ZWVuIEtlcm1pdCBhbmQgdGhlIGhvc3QgZm9yIHRoZSIsCi0iICBs aWZlIG9mIHRoZSBjb25uZWN0aW9uLiIsCi0iICIsCi0iSFRUUCBbIDxzd2l0Y2hlcz4gXSBHRVQg PHJlbW90ZS1maWxlbmFtZT4gWyA8bG9jYWwtZmlsZW5hbWU+IF0iLAotIiAgUmV0cmlldmVzIHRo ZSBuYW1lZCBmaWxlIG9uIHRoZSBjdXJyZW50bHkgb3BlbiBIVFRQIGNvbm5lY3Rpb24uICBUaGUi LAotIiAgZGVmYXVsdCBsb2NhbCBmaWxlbmFtZSBpcyB0aGUgc2FtZSBhcyB0aGUgcmVtb3RlIGZp bGVuYW1lLCBidXQgd2l0aCBhbnkiLAotIiAgcGF0aCBzdHJpcHBlZC4gIElmIHlvdSB3YW50IHRo ZSBmaWxlIHRvIGJlIGRpc3BsYXllZCBvbiB0aGUgc2NyZWVuIGluc3RlYWQiLAotIiAgb2Ygc3Rv cmVkIG9uIGRpc2ssIGluY2x1ZGUgdGhlIC9UT1NDUkVFTiBzd2l0Y2ggYW5kIG9taXQgdGhlIGxv Y2FsIiwKLSIgIGZpbGVuYW1lLiAgSWYgeW91IGdpdmUgYSBVUkwgaW5zdGVhZCBvZiBhIHJlbW90 ZSBmaWxlbmFtZSwgdGhpcyBjb21tYW5kcyIsCi0iICBvcGVucyB0aGUgY29ubmVjdGlvbiwgR0VU cyB0aGUgZmlsZSwgYW5kIGNsb3NlcyB0aGUgY29ubmVjdGlvbjsgdGhlIHNhbWUiLAotIiAgaXMg dHJ1ZSBmb3IgdGhlIHJlbWFpbmluZyBIVFRQIGNvbW1hbmRzIGZvciB3aGljaCB5b3UgY2FuIHNw ZWNpZnkgYSIsCi0iICByZW1vdGUgZmlsZW5hbWUsIGRpcmVjdG9yeSBuYW1lLCBvciBwYXRoLiIs Ci0iICIsCi0iSFRUUCBbIDxzd2l0Y2hlcz4gXSBIRUFEIDxyZW1vdGUtZmlsZW5hbWU+IFsgPGxv Y2FsLWZpbGVuYW1lPiBdIiwKLSIgIExpa2UgR0VUIGV4Y2VwdCB3aXRob3V0IGFjdHVhbGx5IGdl dHRpbmcgdGhlIGZpbGU7IGluc3RlYWQgaXQgZ2V0cyBvbmx5IiwKLSIgIHRoZSBoZWFkZXJzLCBz dG9yaW5nIHRoZW0gaW50byB0aGUgZ2l2ZW4gZmlsZSAoaWYgYSBsb2NhbCBmaWxlbmFtZSBpcyIs Ci0iICBzcGVjaWZpZWQpLCBvbmUgbGluZSBwZXIgaGVhZGVyIGl0ZW0gYXMgc2hvd24gaW4gdGhl IC9BUlJBWTogc3dpdGNoIiwKLSIgIGRlc2NyaXB0aW9uLiIsCi0iICIsCi0iSFRUUCBbIDxzd2l0 Y2hlcz4gXSBJTkRFWCA8cmVtb3RlLWRpcmVjdG9yeT4gWyA8bG9jYWwtZmlsZW5hbWU+IF0iLAot IiAgUmV0cmlldmVzIHRoZSBmaWxlIGxpc3RpbmcgZm9yIHRoZSBnaXZlbiBzZXJ2ZXIgZGlyZWN0 b3J5LiIsCi0iICBOT1RFOiBUaGlzIGNvbW1hbmQgaXMgbm90IHN1cHBvcnRlZCBieSBtb3N0IFdl YiBzZXJ2ZXJzLCBhbmQgZXZlbiB3aGVuIiwKLSIgIHRoZSBzZXJ2ZXIgdW5kZXJzdGFuZCBpdCwg dGhlcmUgaXMgbm8gc3RhcmRhcmQgcmVzcG9uc2UgZm9ybWF0LiIsCi0iICIsCi0iSFRUUCBbIDxz d2l0Y2hlcz4gXSBQT1NUIFsgL01JTUUtVFlQRTo8dHlwZT4gXSA8bG9jYWwtZmlsZT4gPHJlbW90 ZS1wYXRoPiIsCi0iICAgICBbIDxkZXN0LWZpbGU+IF0iLAotIiAgVXNlZCB0byBzZW5kIGEgcmVz cG9uc2UgYXMgaWYgaXQgd2VyZSBzZW50IGZyb20gYSBmb3JtLiAgVGhlIGRhdGEgdG8gYmUiLAot IiAgcG9zdGVkIG11c3QgYmUgcmVhZCBmcm9tIGEgZmlsZS4iLAotIiAiLAotIkhUVFAgWyA8c3dp dGNoZXM+IF0gUFVUIFsgL01JTUUtVFlQRTo8dHlwZT4gXSA8bG9jYWwtZmlsZT4gPHJlbW90ZS1m aWxlPiIsCi0iICAgICBbIDxkZXN0LWZpbGU+IF0iLAotIiAgVXBsb2FkcyB0aGUgZ2l2ZW4gbG9j YWwgZmlsZSB0byBzZXJ2ZXIgZmlsZS4gIElmIHRoZSByZW1vdGUgZmlsZW5hbWUgaXMiLAotIiAg b21pdHRlZCwgdGhlIGxvY2FsIG5hbWUgaXMgdXNlZCwgYnV0IHdpdGggYW55IHBhdGggc3RyaXBw ZWQuIiwKLSIgIiwKLSJIVFRQIFsgPHN3aXRjaGVzPiBdIERFTEVURSA8cmVtb3RlLWZpbGVuYW1l PiIsCi0iICBJbnN0cnVjdHMgdGhlIHNlcnZlciB0byBkZWxldGUgdGhlIHNwZWNpZmllZCBmaWxl bmFtZS4iLAotIiAiLAotIndoZXJlIDxzd2l0Y2hlcz4gYXJlOiIsCi0iL0FHRU5UOjx1c2VyLWFn ZW50PiIsCi0iICBJZGVudGlmaWVzIHRoZSBjbGllbnQgdG8gdGhlIHNlcnZlcjsgXCJDLUtlcm1p dFwiIG9yIFwiS2VybWl0LTk1XCIiLAotIiAgYnkgZGVmYXVsdC4iLAotIiAiLAotIi9IRUFERVI6 PGhlYWRlci1saW5lPiIsCi0iICBVc2VkIGZvciBzcGVjaWZ5aW5nIGFueSBvcHRpb25hbCBoZWFk ZXJzLiAgQSBsaXN0IG9mIGhlYWRlcnMgaXMgcHJvdmlkZWQiLAotIiAgdXNpbmcgYnJhY2VzIGZv ciBncm91cGluZzoiLAotIiAiLAotIiAgICAvSEVBREVSOnt7PHRhZz46PHZhbHVlPn17PHRhZz46 PHZhbHVlPn0uLi59IiwKLSIgIiwKLSIgIEZvciBhIGxpc3Rpbmcgb2YgdmFsaWQgPHRhZz4gdmFs dWUgYW5kIDx2YWx1ZT4gZm9ybWF0cyBzZWUgUkZDIDE5NDU6IiwKLSIgIFwiSHlwZXJ0ZXh0IFRy YW5zZmVyIFByb3RvY29sIC0tIEhUVFAvMS4wXCIuICBBIG1heGltdW0gb2YgZWlnaHQgaGVhZGVy cyIsCi0iICBtYXkgYmUgc3BlY2lmaWVkLiIsCi0iICIsCi0iL1RPU0NSRUVOIiwKLSIgIERpc3Bs YXkgc2VydmVyIHJlc3BvbnNlcyBvbiB0aGUgc2NyZWVuLiIsCi0iICIsCi0iL1VTRVI6PG5hbWU+ IiwKLSIgIEluIGNhc2UgYSBwYWdlIHJlcXVpcmVzIGEgdXNlcm5hbWUgZm9yIGFjY2Vzcy4iLAot IiAiLAotIi9QQVNTV09SRDo8cGFzc3dvcmQ+IiwKLSIgIEluIGNhc2UgYSBwYWdlIHJlcXVpcmVz IGEgcGFzc3dvcmQgZm9yIGFjY2Vzcy4iLAotIiAiLAotIi9BUlJBWTo8YXJyYXluYW1lPiIsCi0i ICBUZWxscyBLZXJtaXQgdG8gc3RvcmUgdGhlIHJlc3BvbnNlIGhlYWRlcnMgaW4gdGhlIGdpdmVu IGFycmF5LCBvbmUgbGluZSIsCi0iICBwZXIgZWxlbWVudC4gIFRoZSBhcnJheSBuZWVkIG5vdCBi ZSBkZWNsYXJlZCBpbiBhZHZhbmNlLiAgRXhhbXBsZToiLAotIiAiLAotIiAgICBodHRwIC9hcnJh eTpjIGdldCBrZXJtaXQvaW5kZXguaHRtbCIsCi0iICAgIHNob3cgYXJyYXkgYyIsCi0iICAgIERp bWVuc2lvbiA9IDkiLAotIiAgICAxLiBEYXRlOiBGcmksIDI2IE5vdiAxOTk5IDIzOjEyOjIyIEdN VCIsCi0iICAgIDIuIFNlcnZlcjogQXBhY2hlLzEuMy40IChVbml4KSIsCi0iICAgIDMuIExhc3Qt TW9kaWZpZWQ6IE1vbiwgMDYgU2VwIDE5OTkgMjI6MzU6NTggR01UIiwKLSIgICAgNC4gRVRhZzog XCJiYzA0OS1mNzItMzdkNDQxY2VcIiIsCi0iICAgIDUuIEFjY2VwdC1SYW5nZXM6IGJ5dGVzIiwK LSIgICAgNi4gQ29udGVudC1MZW5ndGg6IDM5NTQiLAotIiAgICA3LiBDb25uZWN0aW9uOiBjbG9z ZSAgICAgIiwKLSIgICAgOC4gQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwiLAotIiAiLAotIkFzIHlv dSBjYW4gc2VlLCB0aGUgaGVhZGVyIGxpbmVzIGFyZSBsaWtlIE1JTUUgZS1tYWlsIGhlYWRlciBs aW5lczoiLAotImlkZW50aWZpZXIsIGNvbG9uLCB2YWx1ZS4gIFRoZSAvQVJSQVkgc3dpdGNoIGlz IHRoZSBvbmx5IG1ldGhvZCBhdmFpbGFibGUiLAotInRvIGEgc2NyaXB0IHRvIHByb2Nlc3MgdGhl IHNlcnZlciByZXNwb25zZXMgZm9yIGEgUE9TVCBvciBQVVQgY29tbWFuZC4iLAotIiAiLAotIiIK LX07Ci0jZW5kaWYgLyogTk9IVFRQICovCi0KLSNpZmRlZiBDS19LRVJCRVJPUwotc3RhdGljIGNo YXIgKmhteHhhdXRoW10gPSB7Ci0iU3ludGF4OiIsCi0iQVVUSEVOVElDQVRFIHsgS0VSQkVST1M0 LCBLRVJCRVJPUzUgWyBzd2l0Y2hlcyBdIH0gPGFjdGlvbj4gWyBzd2l0Y2hlcyBdIiwKLSIgIE9i dGFpbnMgb3IgZGVzdHJveXMgS2VyYmVyb3MgdGlja2V0cyBhbmQgbGlzdHMgaW5mb3JtYXRpb24g YWJvdXQgdGhlbS4iLAotIiAgQWN0aW9ucyBhcmUgSU5JVElBTElaRSwgREVTVFJPWSwgYW5kIExJ U1QtQ1JFREVOVElBTFMuICBLRVJCRVJPUzQgY2FuIGJlIiwKLSIgIGFiYnJldmlhdGVkIEs0IG9y IEtSQjQ7IEtFUkJFUk9TNSBjYW4gYmUgYWJicmV2aWF0ZWQgSzUgb3IgS1JCNS4gIFVzZSA/IHRv IiwKLSIgIHNlZSB3aGljaCBrZXl3b3Jkcywgc3dpdGNoZXMsIG9yIG90aGVyIHF1YW50aXRpZXMg YXJlIHZhbGlkIGF0IGVhY2ggcG9pbnQiLAotIiAgaW4gdGhlIGNvbW1hbmQuIiwKLSIgIiwKLSIg IFRoZSBhY3Rpb25zIGFyZSBJTklUSUFMSVpFLCBERVNUUk9ZLCBhbmQgTElTVC1DUkVERU5USUFM UzoiLAotIiAiLAotIiAgICBBVVRIIHsgSzQsIEs1IH0geyBJTklUSUFMSVpFIFtzd2l0Y2hlc10s IERFU1RST1ksIiwKLSIgICAgICBMSVNULUNSRURFTlRJQUxTIFtzd2l0Y2hlc10gfSIsCi0iICIs Ci0iICBUaGUgSU5JVElBTElaRSBhY3Rpb24gaXMgdGhlIG1vc3QgY29tcGxleCwgYW5kIGl0cyBm b3JtYXQgaXMgZGlmZmVyZW50IiwKLSIgIGZvciBLZXJiZXJvcyA0IGFuZCBLZXJiZXJvcyA1LiAg VGhlIGZvcm1hdCBmb3IgS2VyYmVyb3MgNCBpczoiLAotIiAiLAotIiAgQVVUSCBLNCBJTklUSUFM SVpFIFsgL0lOU1RBTkNFOjxuYW1lPiAvTElGRVRJTUU6PG1pbnV0ZXM+IC0iLAotIiAgICAvUEFT U1dPUkQ6PHBhc3N3b3JkPiAvUFJFQVVUSCAvUkVBTE06PG5hbWU+IDxwcmluY2lwYWw+IF0iLAot IiAiLAotIiAgQWxsIHN3aXRjaGVzIGFyZSBvcHRpb25hbC4gIEtlcmJlcm9zIDQgSU5JVElBTEla RSBzd2l0Y2hlcyBhcmU6IiwKLSIgIiwKLSIgIC9JTlNUQU5DRTo8bmFtZT4iLAotIiAgICBBbGxv d3MgYW4gSW5zdGFuY2UgKHN1Y2ggYXMgYSBob3N0bmFtZSkgdG8gYmUgc3BlY2lmaWVkLiIsCi0i ICIsCi0iICAvTElGRVRJTUU6PG51bWJlcj4iLAotIiAgICBTcGVjaWZpZXMgdGhlIHJlcXVlc3Rl ZCBsaWZldGltZSBpbiBtaW51dGVzIGZvciB0aGUgdGlja2V0LiAgSWYgbm8iLAotIiAgICBsaWZl dGltZSBpcyBzcGVjaWZpZWQsIDYwMCBtaW51dGVzIGlzIHVzZWQuICBJZiB0aGUgbGlmZXRpbWUg aXMgZ3JlYXRlciIsCi0iICAgIHRoYW4gdGhlIG1heGltdW0gc3VwcG9ydGVkIGJ5IHRoZSB0aWNr ZXQgZ3JhbnRpbmcgc2VydmljZSwgdGhlIHJlc3VsdGluZyIsCi0iICAgIGxpZmV0aW1lIGlzIHNo b3J0ZW5lZCBhY2NvcmRpbmdseS4iLAotIiAiLAotIiAgL05PVC1QUkVBVVRIIiwKLSIgICAgSW5z dHJ1Y3RzIEtlcm1pdCB0byBzZW5kIGEgdGlja2V0IGdldHRpbmcgdGlja2V0IChUR1QpIHJlcXVl c3QgdG8gdGhlIiwKLSIgICAgS0RDIHdpdGhvdXQgYW55IHByZWF1dGhlbnRpY2F0aW9uIGRhdGEu IiwKLSIgIiwKLSIgIC9QQVNTV09SRDo8c3RyaW5nPiIsCi0iICAgIEFsbG93cyBhIHBhc3N3b3Jk IHRvIGJlIGluY2x1ZGVkIG9uIHRoZSBjb21tYW5kIGxpbmUgb3IgaW4gYSBzY3JpcHQiLAotIiAg ICBmaWxlLiAgSWYgbm8gL1BBU1NXT1JEIHN3aXRjaCBpcyBpbmNsdWRlZCwgeW91IGFyZSBwcm9t cHRlZCBvbiBhIHNlcGFyYXRlIgotLAotIiAgICBsaW5lLiAgVGhlIHBhc3N3b3JkIHN3aXRjaCBp cyBwcm92aWRlZCBvbiBhIHVzZS1hdC15b3VyLW93bi1yaXNrIGJhc2lzIiwKLSIgICAgZm9yIHVz ZSBpbiBhdXRvbWF0ZWQgc2NyaXB0cy4gIFdBUk5JTkc6IFBhc3N3b3JkcyBzaG91bGQgbm90IGJl IHN0b3JlZCBpbiIKLSwKLSIgICAgZmlsZXMuIiwKLSIgIiwKLSIgIC9QUkVBVVRIIiwKLSIgICAg SW5zdHJ1Y3RzIEtlcm1pdCB0byBzZW5kIGEgcHJlYXV0aGVudGljYXRlZCBUaWNrZXQtR2V0dGlu ZyBUaWNrZXQgKFRHVCkiLAotIiAgICByZXF1ZXN0IHRvIHRoZSBLREMgaW5zdGVhZCBvZiBhIHBs YWludGV4dCByZXF1ZXN0LiAgVGhlIGRlZmF1bHQgd2hlbiIsCi0iICAgIHN1cHBvcnRlZCBieSB0 aGUgS2VyYmVyb3MgbGlicmFyaWVzLiIsCi0iICIsCi0iICAvUkVBTE06PG5hbWU+IiwKLSIgICAg QWxsb3dzIGEgcmVhbG0gdG8gYmUgc3BlY2lmaWVkIChvdmVycmlkaW5nIHRoZSBkZWZhdWx0IHJl YWxtKS4iLAotIiAiLAotIiAgPHByaW5jaXBhbD4iLAotIiAgICBZb3VyIGlkZW50aXR5IGluIHRo ZSBnaXZlbiBvciBkZWZhdWx0IEtlcmJlcm9zIHJlYWxtLCBvZiB0aGUgZm9ybToiLAotIiAgICB1 c2VyaWRbLmluc3RhbmNlWy5pbnN0YW5jZV1dQFtyZWFsbV0gICIsCi0iICAgIENhbiBiZSBvbWl0 dGVkIGlmIGl0IGlzIHRoZSBzYW1lIGFzIHlvdXIgdXNlcm5hbWUgb3IgU0VUIExPR0lOIFVTRVJJ RCIsCi0iICAgIHZhbHVlIG9uIHRoZSBjbGllbnQgc3lzdGVtLiIsCi0iICIsCi0iICBUaGUgZm9y bWF0IGZvciBLZXJiZXJvcyA1IGlzIGFzIGZvbGxvd3M6IiwKLSIgIiwKLSIgIEFVVEggSzUgWyAv Q0FDSEU6PGZpbGVuYW1lPiBdIHsgSU5JVElBTElaRSBbIHN3aXRjaGVzIF0sIERFU1RST1ksIiwK LSIgICAgTElTVC1DUkVERU5USUFMUyAuLi59IiwKLSIgIiwKLSJUaGUgSU5JVElBTElaRSBjb21t YW5kIGZvciBLZXJiZXJvcyA1IGNhbiBpbmNsdWRlIGEgbnVtYmVyIG9mIHN3aXRjaGVzOyIsCi0i YWxsIGFyZSBvcHRpb25hbDoiLAotIiAiLAotIkFVVEggSzUgWyAvQ0FDSEU6PGZpbGVuYW1lPiBd IElOSVRJVElBTElaRSBbIC9BRERSRVNTRVM6PGFkZHItbGlzdD4iLAotIiAgL0ZPUldBUkRBQkxF IC9LRVJCRVJPUzQgL0xJRkVUSU1FOjxtaW51dGVzPiAvUEFTU1dPUkQ6PHBhc3N3b3JkPiIsCi0i ICAvUE9TVERBVEU6PGRhdGUtdGltZT4gL1BST1hJQUJMRSAvUkVBTE06PG5hbWU+IC9SRU5FVyAv UkVORVdBQkxFOjxtaW51dGVzPiIsCi0iICAvU0VSVklDRTo8bmFtZT4gL1ZBTElEQVRFIDxwcmlu Y2lwYWw+IF0iLAotIiAiLAotIiAgQWxsIEtlcmJlcm9zIDUgSU5JVElBTElaRSBzd2l0Y2hlcyBh cmUgb3B0aW9uYWw6IiwKLSIgIiwKLSIgIC9BRERSRVNTRVM6e2xpc3Qgb2YgaXAtYWRkcmVzc2Vz fSIsCi0iICAgIFNwZWNpZmllcyBhIGxpc3Qgb2YgSVAgYWRkcmVzc2VzIHRoYXQgc2hvdWxkIGJl IHBsYWNlZCBpbiB0aGUgVGlja2V0IiwKLSIgICAgR2V0dGluZyBUaWNrZXQgaW4gYWRkaXRpb24g dG8gdGhlIGxvY2FsIG1hY2hpbmUgYWRkcmVzc2VzLiIsCi0iICIsCi0iICAvRk9SV0FSREFCTEUi LAotIiAgICBSZXF1ZXN0cyBmb3J3YXJkYWJsZSB0aWNrZXRzLiIsCi0iICIsCi0iICAvSU5TVEFO Q0U6PG5hbWU+IiwKLSIgICAgQWxsb3dzIGFuIEluc3RhbmNlIChzdWNoIGFzIGEgaG9zdG5hbWUp IHRvIGJlIHNwZWNpZmllZC4iLAotIiAiLAotIiAgL0tFUkJFUk9TNCIsCi0iICAgIEluc3RydWN0 cyBLZXJtaXQgdG8gZ2V0IEtlcmJlcm9zIDQgdGlja2V0cyBpbiBhZGRpdGlvbiB0byBLZXJiZXJv cyA1IiwKLSIgICAgdGlja2V0cy4gIElmIEtlcmJlcm9zIDUgdGlja2V0cyBhcmUgbm90IHN1cHBv cnRlZCBieSB0aGUgc2VydmVyLCBhIiwKLSIgICAgbWlsZCB3YXJuaW5nIGlzIHByaW50ZWQgYW5k IEtlcmJlcm9zIDQgdGlja2V0cyBhcmUgcmVxdWVzdGVkLiIsCi0iICIsCi0iICAvTElGRVRJTUU6 PG51bWJlcj4iLAotIiAgICBTcGVjaWZpZXMgdGhlIHJlcXVlc3RlZCBsaWZldGltZSBpbiBtaW51 dGVzIGZvciB0aGUgdGlja2V0LiAgSWYgbm8iLAotIiAgICBsaWZldGltZSBpcyBzcGVjaWZpZWQs IDYwMCBtaW51dGVzIGlzIHVzZWQuICBJZiB0aGUgbGlmZXRpbWUgaXMgZ3JlYXRlciIsCi0iICAg IHRoYW4gdGhlIG1heGltdW0gc3VwcG9ydGVkIGJ5IHRoZSB0aWNrZXQgZ3JhbnRpbmcgc2Vydmlj ZSwgdGhlIHJlc3VsdGluZyIsCi0iICAgIGxpZmV0aW1lIGlzIHNob3J0ZW5lZC4iLAotIiAiLAot IiAgL05PLUtFUkJFUk9TNCIsCi0iICAgIEluc3RydWN0cyBLZXJtaXQgdG8gbm90IGF0dGVtcHQg dG8gcmV0cmlldmUgS2VyYmVyb3MgNCBjcmVkZW50aWFscy4iLAotIiAiLAotIiAgL05PVC1GT1JX QVJEQUJMRSIsCi0iICAgIFJlcXVlc3RzIG5vbi1mb3J3YXJkYWJsZSB0aWNrZXRzLiIsCi0iICIs Ci0iICAvTk9ULVBST1hJQUJMRSIsCi0iICAgIFJlcXVlc3RzIG5vbi1wcm94aWFibGUgdGlja2V0 cy4iLAotIiAiLAotIiAgL1BBU1NXT1JEOjxzdHJpbmc+IiwKLSIgICAgQWxsb3dzIGEgcGFzc3dv cmQgdG8gYmUgaW5jbHVkZWQgb24gdGhlIGNvbW1hbmQgbGluZSBvciBpbiBhIHNjcmlwdCIsCi0i ICAgIGZpbGUuICBJZiBubyAvUEFTU1dPUkQgc3dpdGNoIGlzIGluY2x1ZGVkLCB5b3UgYXJlIHBy b21wdGVkIG9uIGEgc2VwYXJhdGUiCi0sCi0iICAgIGxpbmUuICBUaGUgcGFzc3dvcmQgc3dpdGNo IGlzIHByb3ZpZGVkIG9uIGEgdXNlLWF0LXlvdXItb3duLXJpc2sgYmFzaXMiLAotIiAgICBmb3Ig dXNlIGluIGF1dG9tYXRlZCBzY3JpcHRzLiAgV0FSTklORzogUGFzc3dvcmRzIHNob3VsZCBub3Qg YmUgc3RvcmVkIGluIgotLAotIiAgICBmaWxlcy4iLAotIiAiLAotIiAgL1BPU1REQVRFOjxkYXRl LXRpbWU+IiwKLSIgICAgUmVxdWVzdHMgYSBwb3N0ZGF0ZWQgdGlja2V0LCB2YWxpZCBzdGFydGlu ZyBhdCA8ZGF0ZS10aW1lPi4gIFBvc3RkYXRlZCIsCi0iICAgIHRpY2tldHMgYXJlIGlzc3VlZCB3 aXRoIHRoZSBpbnZhbGlkIGZsYWcgc2V0LCBhbmQgbmVlZCB0byBiZSBmZWQgYmFjayB0byIsCi0i ICAgIHRoZSBLREMgYmVmb3JlIHVzZSB3aXRoIHRoZSAvVkFMSURBVEUgc3dpdGNoLiAgVHlwZSBI RUxQIERBVEUgZm9yIGluZm8iLAotIiAgICBvbiBkYXRlLXRpbWUgZm9ybWF0cy4iLAotIiAiLAot IiAgL1BST1hJQUJMRSIsCi0iICAgIFJlcXVlc3RzIHByb3hpYWJsZSB0aWNrZXRzLiIsCi0iICIs Ci0iICAvUkVBTE06PHN0cmluZz4iLAotIiAgICBBbGxvd3MgYW4gYWx0ZXJuYXRpdmUgcmVhbG0g dG8gYmUgc3BlY2lmaWVkLiIsCi0iICIsCi0iICAvUkVORVciLAotIiAgICBSZXF1ZXN0cyByZW5l d2FsIG9mIGEgcmVuZXdhYmxlIFRpY2tldC1HcmFudGluZyBUaWNrZXQuICBOb3RlIHRoYXQgIiwK LSIgICAgYW4gZXhwaXJlZCB0aWNrZXQgY2Fubm90IGJlIHJlbmV3ZWQgZXZlbiBpZiBpdCBpcyB3 aXRoaW4gaXRzIHJlbmV3YWJsZSAiLAotIiAgICBsaWZldGltZS4iLAotIiAiLAotIiAgL1JFTkVX QUJMRTo8bnVtYmVyPiIsCi0iICAgIFJlcXVlc3RzIHJlbmV3YWJsZSB0aWNrZXRzLCB3aXRoIGEg dG90YWwgbGlmZXRpbWUgb2YgPG51bWJlcj4gbWludXRlcy4iLAotIiAiLAotIiAgL1NFUlZJQ0U6 PHN0cmluZz4iLAotIiAgICBBbGxvd3MgYSBzZXJ2aWNlIG90aGVyIHRoYW4gdGhlIHRpY2tldCBn cmFudGluZyBzZXJ2aWNlIHRvIGJlIHNwZWNpZmllZC4iLAotIiAiLAotIiAgL1ZBTElEQVRFIiwK LSIgICAgUmVxdWVzdHMgdGhhdCB0aGUgVGlja2V0IEdyYW50aW5nIFRpY2tldCBpbiB0aGUgY2Fj aGUgKHdpdGggdGhlIGludmFsaWQiLAotIiAgICBmbGFnIHNldCkgYmUgcGFzc2VkIHRvIHRoZSBL REMgZm9yIHZhbGlkYXRpb24uICBJZiB0aGUgdGlja2V0IGlzIHdpdGhpbiIsCi0iICAgIGl0cyBy ZXF1ZXN0ZWQgdGltZSByYW5nZSwgdGhlIGNhY2hlIGlzIHJlcGxhY2VkIHdpdGggdGhlIHZhbGlk YXRlZCIsCi0iICAgIHRpY2tldC4iLAotIiAiLAotIiAgPHByaW5jaXBhbD4iLAotIiAgICBZb3Vy IGlkZW50aXR5IGluIHRoZSBnaXZlbiBvciBkZWZhdWx0IEtlcmJlcm9zIHJlYWxtLCBvZiB0aGUg Zm9ybToiLAotIiAgICB1c2VyaWRbL2luc3RhbmNlXVtAcmVhbG1dICAiLAotIiAgICBDYW4gYmUg b21pdHRlZCBpZiBpdCBpcyB0aGUgc2FtZSBhcyB5b3VyIHVzZXJuYW1lIG9yIFNFVCBMT0dJTiBV U0VSSUQiLAotIiAgICB2YWx1ZSBvbiB0aGUgY2xpZW50IHN5c3RlbS4iLAotIiAiLAotIiAgTm90 ZTogS2VyYmVyb3MgNSBhbHdheXMgYXR0ZW1wdHMgdG8gcmV0cmlldmUgYSBUaWNrZXQtR2V0dGlu ZyBUaWNrZXQgKFRHVCkiLAotIiAgdXNpbmcgdGhlIHByZWF1dGhlbnRpY2F0ZWQgVEdUIHJlcXVl c3QuIiwKLSIgIiwKLSIgIEFVVEhPUklaRSBLNSBMSVNULUNSRURFTlRJQUxTIFsgL0FERFJFU1NF UyAvRkxBR1MgL0VOQ1JZUFRJT04gXSIsCi0iICIsCi0iICBTaG93cyBzdGFydCB0aW1lLCBleHBp cmF0aW9uIHRpbWUsIHNlcnZpY2Ugb3IgcHJpbmNpcGFsIG5hbWUsIHBsdXMiLAotIiAgdGhlIGZv bGxvd2luZyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGRlcGVuZGluZyB0aGUgc3dpdGNoZXM6IiwK LSIgIiwKLSIgIC9BRERSRVNTRVMgZGlzcGxheXMgdGhlIGhvc3RuYW1lcyBhbmQvb3IgSVAgYWRk cmVzc2VzIGVtYmVkZGVkIHdpdGhpbiIsCi0iICAgIHRoZSB0aWNrZXRzLiIsCi0iICIsCi0iICAv RkxBR1MgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiAoaWYgYXBwbGljYWJsZSkg Zm9yIGVhY2ggdGlja2V0OiIsCi0iICAgIEYgLSBUaWNrZXQgaXMgRm9yd2FyZGFibGUiLAotIiAg ICBmIC0gVGlja2V0IHdhcyBGb3J3YXJkZWQiLAotIiAgICBQIC0gVGlja2V0IGlzIFByb3hpYWJs ZSIsCi0iICAgIHAgLSBUaWNrZXQgaXMgYSBQcm94eSIsCi0iICAgIEQgLSBUaWNrZXQgbWF5IGJl IFBvc3RkYXRlZCIsCi0iICAgIGQgLSBUaWNrZXQgaGFzIGJlZW4gUG9zdGRhdGVkIiwKLSIgICAg aSAtIFRpY2tldCBpcyBJbnZhbGlkIiwKLSIgICAgUiAtIFRpY2tldCBpcyBSZW5ld2FibGUiLAot IiAgICBJIC0gVGlja2V0IGlzIHRoZSBJbml0aWFsIFRpY2tldCIsCi0iICAgIEggLSBUaWNrZXQg aGFzIGJlZW4gYXV0aGVudGljYXRlZCBieSBIYXJkd2FyZSIsCi0iICAgIEEgLSBUaWNrZXQgaGFz IGJlZW4gUHJlLWF1dGhlbnRpY2F0ZWQiLAotIiAiLAotIiAgL0VOQ1JZUFRJT04gZGlzcGxheXMg dGhlIGVuY3J5cHRpb24gdXNlZCBieSBlYWNoIHRpY2tldCAoaWYgYXBwbGljYWJsZSk6IiwKLSIg ICAgREVTLUNCQy1DUkMiLAotIiAgICBERVMtQ0JDLU1ENCIsCi0iICAgIERFUy1DQkMtTUQ1IiwK LSIgICAgREVTMy1DQkMtU0hBIiwKLSIiCi19OwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0K LSNpZm5kZWYgTk9DU0VUUwotc3RhdGljIGNoYXIgKmhteHhhc3NvY1tdID0gewotIkFTU09DSUFU RSBGSUxFLUNIQVJBQ1RFUi1TRVQgPGZpbGUtY2hhcmFjdGVyLXNldD4gPHRyYW5zZmVyLWNoYXJh Y3Rlci1zZXQ+IiwKLSIgIFRlbGxzIEMtS2VybWl0IHRoYXQgd2hlbmV2ZXIgdGhlIGdpdmVuIGZp bGUtY2hhcmFjdGVyIHNldCBpcyBzZWxlY3RlZCwgYW5kIiwKLSIgIFNFTkQgQ0hBUkFDVEVSLVNF VCAocS52LikgaXMgQVVUT01BVElDLCB0aGUgZ2l2ZW4gdHJhbnNmZXIgY2hhcmFjdGVyLXNldCIs Ci0iICBpcyBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5LiIsCi0iICIsCi0iQVNTT0NJQVRFIFhGRVIt Q0hBUkFDVEVSLVNFVCA8eGZlci1jaGFyYWN0ZXItc2V0PiA8ZmlsZS1jaGFyYWN0ZXItc2V0PiIs Ci0iICBUZWxscyBDLUtlcm1pdCB0aGF0IHdoZW5ldmVyIHRoZSBnaXZlbiB0cmFuc2Zlci1jaGFy YWN0ZXIgc2V0IGlzIHNlbGVjdGVkLCIsCi0iICBlaXRoZXIgYnkgY29tbWFuZCBvciBieSBhbiBh bm5vdW5jZXIgYXR0YWNoZWQgdG8gYW4gaW5jb21pbmcgdGV4dCBmaWxlLCIsCi0iICBhbmQgU0VO RCBDSEFSQUNURVItU0VUIGlzIEFVVE9NQVRJQywgdGhlIHNwZWNpZmllZCBmaWxlIGNoYXJhY3Rl ci1zZXQgaXMiLAotIiAgdG8gYmUgc2VsZWN0ZWQgYXV0b21hdGljYWxseS4gIFN5bm9ueW06IEFT U09DSUFURSBUUkFOU0ZFUi1DSEFSQUNURVItU0VULiIsCi0iICIsCi0iVXNlIFNIT1cgQVNTT0NJ QVRJT05TIHRvIGxpc3QgdGhlIGN1cnJlbnQgY2hhcmFjdGVyLXNldCBhc3NvY2lhdGlvbnMsIGFu ZCIsCi0iU0hPVyBDSEFSQUNURVItU0VUUyB0byBsaXN0IHRoZSBjdXJyZW50IHNldHRpbmdzLiIs Ci0iIgotfTsKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLXN0YXRpYyBjaGFyICpobXh4cGF0W10g PSB7Ci0iQSBcInBhdHRlcm5cIiBpcyBub3RhdGlvbiB1c2VkIGluIGEgc2VhcmNoIHN0cmluZyB3 aGVuIHNlYXJjaGluZyB0aHJvdWdoIiwKLSJ0ZXh0LiAgQy1LZXJtaXQgdXNlcyB0aHJlZSBraW5k cyBvZiBwYXR0ZXJuczogZmxvYXRpbmcgcGF0dGVybnMsIGFuY2hvcmVkIiwKLSJwYXR0ZXJucywg YW5kIHdpbGRjYXJkcy4gIFdpbGRjYXJkcyBhcmUgYW5jaG9yZWQgcGF0dGVybnMgdGhhdCBhcmUg dXNlZCB0byIsCi0ibWF0Y2ggZmlsZSBuYW1lczsgdHlwZSBIRUxQIFdJTERDQVJEIHRvIGxlYXJu IGFib3V0IHRoZW0uIiwKLSIgIiwKLSJJbiBhIHBhdHRlcm4sIGNlcnRhaW4gY2hhcmFjdGVycyBh cmUgc3BlY2lhbDoiLAotIiAiLAotIiogTWF0Y2hlcyBhbnkgc2VxdWVuY2Ugb2YgemVybyBvciBt b3JlIGNoYXJhY3RlcnMuICBGb3IgZXhhbXBsZSwgXCJrKnRcIiIsCi0iICBtYXRjaGVzIGFsbCBz dHJpbmdzIHRoYXQgc3RhcnQgd2l0aCBcImtcIiBhbmQgZW5kIHdpdGggXCJ0XCIgaW5jbHVkaW5n IiwKLSIgIFwia3RcIiwgXCJraXRcIiwgXCJrbmlnaHRcIiwgb3IgXCJrZXJtaXRcIi4iLAotIiAi LAotI2lmZGVmIFZNUwotIiUgTWF0Y2hlcyBhbnkgc2luZ2xlIGNoYXJhY3Rlci4gIEZvciBleGFt cGxlLCBcImslJSUldFwiIG1hdGNoZXMgYWxsIHN0cmluZ3MiLAotI2Vsc2UKLSI/IE1hdGNoZXMg YW55IHNpbmdsZSBjaGFyYWN0ZXIuICBGb3IgZXhhbXBsZSwgXCJrPz8/P3RcIiBtYXRjaGVzIGFs bCBzdHJpbmdzIiwKLSNlbmRpZiAvKiBWTVMgKi8KLSIgIHRoYXQgYXJlIGV4YWN0bHkgNiBjaGFy YWN0ZXJzIGxvbmcgYW5kIHN0YXJ0IHdpdGggXCJrXCIgYW5kIGVuZCB3aXRoIiwKLSNpZmRlZiBW TVMKLSIgIHdpdGggXCJ0XCIuIiwKLSNlbHNlCi0iICB3aXRoIFwidFwiLiAgV2hlbiB0eXBpbmcg Y29tbWFuZHMgYXQgdGhlIHByb21wdCwgeW91IG11c3QgcHJlY2VkZSBhbnkiLAotIiAgcXVlc3Rp b24gbWFyayB0byBiZSB1c2VkIGZvciBtYXRjaGluZyBieSBhIGJhY2tzbGFzaCAoXFwpIHRvIG92 ZXJyaWRlIHRoZSIsCi0iICBub3JtYWwgZnVuY3Rpb24gb2YgcXVlc3Rpb24gbWFyayBpbiBpbnRl cmFjdGl2ZSBjb21tYW5kcywgd2hpY2ggaXMgdG8iLAotIiAgcHJvdmlkZSBtZW51cyBhbmQgZmls ZSBsaXN0cy4iLAotI2VuZGlmIC8qIFZNUyAqLwotIiAiLAotI2lmZGVmIE9TMk9SVU5JWAotI2lm ZGVmIENLUkVHRVgKLSJbYWJjXSIsCi0iICBTcXVhcmUgYnJhY2tldHMgZW5jbG9zaW5nIGEgbGlz dCBvZiBjaGFyYWN0ZXJzIG1hdGNoZXMgYW55IGNoYXJhY3RlciBpbiIsCi0iICB0aGUgbGlzdC4g IEV4YW1wbGU6IGhbYW91XXQgbWF0Y2hlcyBoYXQsIGhvdCwgYW5kIGh1dC4iLAotIiAiLAotIlth LXpdIiwKLSIgIFNxdWFyZSBicmFja2V0cyBlbmNsb3NpbmcgYSByYW5nZSBvZiBjaGFyYWN0ZXJz IG1hdGNoZXMgYW55IGNoYXJhY3RlciBpbiIsCi0iICB0aGUgcmFuZ2U7IGEgaHlwaGVuICgtKSBz ZXBhcmF0ZXMgdGhlIGxvdyBhbmQgaGlnaCBlbGVtZW50cyBvZiB0aGUgcmFuZ2UuIiwKLSIgIEZv ciBleGFtcGxlLCBbYS16XSBtYXRjaGVzIGFueSBjaGFyYWN0ZXIgZnJvbSBhIHRvIHouIiwKLSIg IiwKLSJbYWNkbS16XSIsCi0iICBMaXN0cyBhbmQgcmFuZ2VzIG1heSBiZSBjb21iaW5lZC4gIFRo aXMgZXhhbXBsZSBtYXRjaGVzIGEsIGMsIGQsIG9yIGFueSIsCi0iICBsZXR0ZXIgZnJvbSBtIHRo cm91Z2ggei4iLAotIiAiLAotIntzdHJpbmcxLHN0cmluZzIsLi4ufSIsCi0iICBCcmFjZXMgZW5j bG9zZSBhIGxpc3Qgb2Ygc3RyaW5ncyB0byBiZSBtYXRjaGVkLiAgRm9yIGV4YW1wbGU6IiwKLSIg IGtlcnttaXQsbmVsLGJlcm9zfSBtYXRjaGVzIGtlcm1pdCwga2VybmVsLCBhbmQga2VyYmVyb3Mu ICBUaGUgc3RyaW5ncyIsCi0iICBtYXkgdGhlbXNlbHZlcyBjb250YWluICosID8sIFthYmNdLCBb YS16XSwgb3Igb3RoZXIgbGlzdHMgb2Ygc3RyaW5ncy4iLAotI2VuZGlmIC8qIENLUkVHRVggKi8K LSNlbmRpZiAvKiBPUzJPUlVOSVggKi8KLSNpZm5kZWYgTk9TUEwKLSIgIiwKLSJUbyBmb3JjZSBh IHNwZWNpYWwgcGF0dGVybiBjaGFyYWN0ZXIgdG8gYmUgdGFrZW4gbGl0ZXJhbGx5LCBwcmVjZWRl IGl0IHdpdGgiLAotImEgYmFja3NsYXNoLCBlLmcuIFthXFwtel0gbWF0Y2hlcyBhLCBoeXBoZW4s IG9yIHogcmF0aGVyIHRoYW4gYSB0aHJvdWdoIHouIiwKLSIgIiwKLSJBIGZsb2F0aW5nICBwYXR0 ZXJuIGNhbiBhbHNvIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBzcGVjaWFsIGNoYXJhY3RlcnM6IiwK LSIgIiwKLSJeIChGaXJzdCBjaGFyYWN0ZXIgb2YgcGF0dGVybikgQW5jaG9ycyB0aGUgcGF0dGVy biBhdCB0aGUgYmVnaW5uaW5nLiIsCi0iJCAoTGFzdCBjaGFyYWN0ZXIgb2YgcGF0dGVybikgQW5j aG9ycyB0aGUgcGF0dGVybiBhdCB0aGUgZW5kLiIsCi0iICIsCi0iSWYgYSBmbG9hdGluZyBwYXR0 ZXJuIGRvZXMgbm90IHN0YXJ0IHdpdGggXCJeXCIsIHRoZSBwYXR0ZXJuIGNhbiBtYXRjaCIsCi0i YW55d2hlcmUgaW4gdGhlIHN0cmluZyBpbnN0ZWFkIG9mIG9ubHkgYXQgdGhlIGJlZ2lubmluZzsg aW4gb3RoZXIgd29yZHMsIGEiLAotImxlYWRpbmcgXCIqXCIgaXMgYXNzdW1lZC4gIFNpbWlsYXJs eSwgaWYgdGhlIHBhdHRlcm4gZG9lc24ndCBlbmQgd2l0aCBcIiRcIiwiLAotImEgdHJhaWxpbmcg XCIqXCIgaXMgYXNzdW1lZC4iLAotIiAiLAotIlRoZSBmb2xsb3dpbmcgY29tbWFuZHMgYW5kIGZ1 bmN0aW9ucyB1c2UgZmxvYXRpbmcgcGF0dGVybnM6IiwKLSIgIEdSRVAgWyA8c3dpdGNoZXM+IF0g PHBhdHRlcm4+IDxmaWxlc3BlYz4iLAotIiAgVFlQRSAvTUFUQ0g6PHBhdHRlcm4+IDxmaWxlPiIs Ci0iICBcXGZhcnJheWxvb2soPHBhdHRlcm4+LDxhcnJheW5hbWU+KSIsCi0iICBcXGZzZWFyY2go PHBhdHRlcm4+LDxzdHJpbmc+Wyw8b2Zmc2V0Pl0pIiwKLSIgIFxcZnJzZWFyY2goPHBhdHRlcm4+ LDxzdHJpbmc+Wyw8b2Zmc2V0Pl0pIiwKLSIgIFRoZSAvRVhDRVBUOiBjbGF1c2UgaW4gU0VORCwg R0VULCBERUxFVEUsIGV0Yy4iLAotIiAiLAotIkV4YW1wbGU6IiwKLSIgIFxcZnNlYXJjaChhYmMs eHhhYmN4eHgpIHN1Y2NlZWRzIGJlY2F1c2UgeHhhYmN4eCBjb250YWlucyBhYmMuIiwKLSIgIFxc ZnNlYXJjaCheYWJjLHh4YWJjeHgpIGZhaWxzIGJlY2F1c2UgeHhhYmN4eCBkb2VzIG5vdCBzdGFy dCB3aXRoIGFiYy4iLAotIiAiLAotCi0iQWxsIG90aGVyIGNvbW1hbmRzIGFuZCBmdW5jdGlvbnMg dXNlIGFuY2hvcmVkIHBhdHRlcm5zLCBtZWFuaW5nIHRoYXQgXiBhbmQgJCIsCi0iYXJlIG5vdCB0 cmVhdGVkIHNwZWNpYWxseSwgYW5kICogaXMgbm90IGFzc3VtZWQgYXQgdGhlIGJlZ2lubmluZyBv ciBlbmQgb2YiLAotInRoZSBwYXR0ZXJuLiAgVGhpcyBpcyB0cnVlIG1haW5seSBvZiBmaWxlbmFt ZSBwYXR0ZXJucyAod2lsZGNhcmRzKSwgc2luY2UiLAotInlvdSB3b3VsZCBub3Qgd2FudCBhIGNv bW1hbmQgbGlrZSBcImRlbGV0ZSB4XCIgdG8gZGVsZXRlIGFsbCBmaWxlcyB3aG9zZSIsIAotIm5h bWVzIGNvbnRhaW5lZCBcInhcIiEiLAotCi0iICIsCi0iWW91IGNhbiB1c2UgYW5jaG9yZWQgcGF0 dGVybnMgbm90IG9ubHkgaW4gZmlsZW5hbWVzLCBidXQgYWxzbyBpbiBTV0lUQ0giLAotImNhc2Ug bGFiZWxzLCBpbiB0aGUgSU5QVVQgYW5kIE1JTlBVVCBjb21tYW5kcywgYW5kIGluIGZpbGUgYmlu YXJ5LSBhbmQiLAotInRleHQtcGF0dGVybnMgZm9yIGZpbGVuYW1lcy4gIFRoZSBJRiBNQVRDSCBw YXR0ZXJuIGlzIGFsc28gYW5jaG9yZWQuIiwKLSNlbmRpZiAvKiBOT1NQTCAqLwotIiIgfTsKLQot c3RhdGljIGNoYXIgKmhteHh3aWxkW10gPSB7Ci0KLSJBIFwid2lsZGNhcmRcIiBpcyBhIG5vdGF0 aW9uIHVzZWQgaW4gYSBmaWxlbmFtZSB0byBtYXRjaCBtdWx0aXBsZSBmaWxlcy4iLAotIkZvciBl eGFtcGxlLCBpbiBcInNlbmQgKi50eHRcIiB0aGUgYXN0ZXJpc2sgaXMgYSB3aWxkY2FyZC4gIEtl cm1pdCBjb21tYW5kcyIsCi0idGhhdCBhY2NlcHQgZmlsZW5hbWVzIGFsc28gYWNjZXB0cyB3aWxk Y2FyZHMsIGV4Y2VwdCBjb21tYW5kcyB0aGF0IGFyZSIsCi0iYWxsb3dlZCB0byBvcGVyYXRlIG9u IG9ubHkgb25lIGZpbGUsIHN1Y2ggYXMgVFJBTlNNSVQuIiwKLSJUaGlzIHZlcnNpb24gb2YgS2Vy bWl0IGFjY2VwdHMgdGhlIGZvbGxvd2luZyB3aWxkY2FyZHM6IiwKLSIgIiwKLSIqIE1hdGNoZXMg YW55IHNlcXVlbmNlIG9mIHplcm8gb3IgbW9yZSBjaGFyYWN0ZXJzLiAgRm9yIGV4YW1wbGUsIFwi Y2sqLmNcIiIsCi0iICBtYXRjaGVzIGFsbCBmaWxlcyB3aG9zZSBuYW1lcyBzdGFydCB3aXRoIFwi Y2tcIiBhbmQgZW5kIHdpdGggXCIuY1wiIiwKLSIgIGluY2x1ZGluZyBcImNrLmNcIi4iLAotIiAi LAotI2lmZGVmIFZNUwotIiUgTWF0Y2hlcyBhbnkgc2luZ2xlIGNoYXJhY3Rlci4gIEZvciBleGFt cGxlLCBcImNrJS5jXCIgbWF0Y2hlcyBhbGwgZmlsZXMiLAotI2Vsc2UKLSI/IE1hdGNoZXMgYW55 IHNpbmdsZSBjaGFyYWN0ZXIuICBGb3IgZXhhbXBsZSwgXCJjaz8uY1wiIG1hdGNoZXMgYWxsIGZp bGVzIiwKLSNlbmRpZiAvKiBWTVMgKi8KLSIgIHdob3NlIG5hbWVzIGFyZSBleGFjdGx5IDUgY2hh cmFjdGVycyBsb25nIGFuZCBzdGFydCB3aXRoIFwiY2tcIiBhbmQgZW5kIiwKLSNpZmRlZiBWTVMK LSIgIHdpdGggXCIuY1wiLiIsCi0jZWxzZQotIiAgd2l0aCBcIi5jXCIuICBXaGVuIHR5cGluZyBj b21tYW5kcyBhdCB0aGUgcHJvbXB0LCB5b3UgbXVzdCBwcmVjZWRlIGFueSIsCi0iICBxdWVzdGlv biBtYXJrIHRvIGJlIHVzZWQgZm9yIG1hdGNoaW5nIGJ5IGEgYmFja3NsYXNoIChcXCkgdG8gb3Zl cnJpZGUgdGhlIiwKLSIgIG5vcm1hbCBmdW5jdGlvbiBvZiBxdWVzdGlvbiBtYXJrIGluIGludGVy YWN0aXZlIGNvbW1hbmRzLCB3aGljaCBpcyB0byIsCi0iICBwcm92aWRlIG1lbnVzIGFuZCBmaWxl IGxpc3RzLiAgWW91IGRvbid0LCBob3dldmVyLCBuZWVkIHRvIHF1b3RlIGZpbGVuYW1lIiwKLSIg IHF1ZXN0aW9uIG1hcmtzIGluIGNvbW1hbmQgZmlsZXMgKHNjcmlwdCBwcm9ncmFtcykuIiwKLSNl bmRpZiAvKiBWTVMgKi8KLSIgIiwKLSNpZmRlZiBPUzJPUlVOSVgKLSNpZmRlZiBDS1JFR0VYCi0i W2FiY10iLAotIiAgU3F1YXJlIGJyYWNrZXRzIGVuY2xvc2luZyBhIGxpc3Qgb2YgY2hhcmFjdGVy cyBtYXRjaGVzIGFueSBjaGFyYWN0ZXIgaW4iLAotIiAgdGhlIGxpc3QuICBFeGFtcGxlOiBja3V1 c3IuW2NoXSBtYXRjaGVzIGNrdXVzci5jIGFuZCBja3V1c3IuaC4iLAotIiAiLAotIlthLXpdIiwK LSIgIFNxdWFyZSBicmFja2V0cyBlbmNsb3NpbmcgYSByYW5nZSBvZiBjaGFyYWN0ZXJzIG1hdGNo ZXMgYW55IGNoYXJhY3RlciBpbiIsCi0iICB0aGUgcmFuZ2U7IGEgaHlwaGVuICgtKSBzZXBhcmF0 ZXMgdGhlIGxvdyBhbmQgaGlnaCBlbGVtZW50cyBvZiB0aGUgcmFuZ2UuIiwKLSIgIEZvciBleGFt cGxlLCBbYS16XSBtYXRjaGVzIGFueSBjaGFyYWN0ZXIgZnJvbSBhIHRvIHouIiwKLSIgIiwKLSJb YWNkbS16XSIsCi0iICBMaXN0cyBhbmQgcmFuZ2VzIG1heSBiZSBjb21iaW5lZC4gIFRoaXMgZXhh bXBsZSBtYXRjaGVzIGEsIGMsIGQsIG9yIGFueSIsCi0iICBsZXR0ZXIgZnJvbSBtIHRocm91Z2gg ei4iLAotIiAiLAotIntzdHJpbmcxLHN0cmluZzIsLi4ufSIsCi0iICBCcmFjZXMgZW5jbG9zZSBh IGxpc3Qgb2Ygc3RyaW5ncyB0byBiZSBtYXRjaGVkLiAgRm9yIGV4YW1wbGU6IiwKLSIgIGNre3Vm aW8sdmNvbixjbWFpfS5jIG1hdGNoZXMgY2t1ZmlvLmMsIGNrdmNvbi5jLCBvciBja2NtYWkuYy4g IFRoZSBzdHJpbmdzIiwKLSIgIG1heSB0aGVtc2VsdmVzIGNvbnRhaW4gKiwgPywgW2FiY10sIFth LXpdLCBvciBvdGhlciBsaXN0cyBvZiBzdHJpbmdzLiIsCi0jZW5kaWYgLyogQ0tSRUdFWCAqLwot I2VuZGlmIC8qIE9TMk9SVU5JWCAqLwotIiAiLAotIlRvIGZvcmNlIGEgc3BlY2lhbCBwYXR0ZXJu IGNoYXJhY3RlciB0byBiZSB0YWtlbiBsaXRlcmFsbHksIHByZWNlZGUgaXQgd2l0aCIsCi0iYSBi YWNrc2xhc2gsIGUuZy4gW2FcXC16XSBtYXRjaGVzIGEsIGh5cGhlbiwgb3IgeiByYXRoZXIgdGhh biBhIHRocm91Z2ggei4iLAotIk9yIHRlbGwgS2VybWl0IHRvIFNFVCBXSUxEQ0FSRC1FWFBBTlNJ T04gT0ZGIGJlZm9yZSBlbnRlcmluZyBvciByZWZlcnJpbmciLAotInRvIHRoZSBmaWxlbmFtZS4i LAotIiAiLAotI2lmbmRlZiBOT1NQTAotIlNpbWlsYXIgbm90YXRpb24gY2FuIGJlIHVzZWQgaW4g Z2VuZXJhbC1wdXJwb3NlIHN0cmluZyBtYXRjaGluZy4gIFR5cGUgSEVMUCIsCi0iUEFUVEVSTlMg Zm9yIGRldGFpbHMuICBBbHNvIHNlZSBIRUxQIFNFVCBNQVRDSC4iLAotI2VuZGlmIC8qIE5PU1BM ICovCi0iIiB9OwotCi0jaWZuZGVmIE5PWEZFUgotc3RhdGljIGNoYXIgKmhteHhmYXN0W10gPSB7 Ci0iRkFTVCwgQ0FVVElPVVMsIGFuZCBST0JVU1QgYXJlIHByZWRlZmluZWQgbWFjcm9zIHRoYXQg c2V0IHNldmVyYWwiLAotImZpbGUtdHJhbnNmZXIgcGFyYW1ldGVycyBhdCBvbmNlIHRvIGFjaGll dmUgdGhlIGRlc2lyZWQgZmlsZS10cmFuc2ZlciBnb2FsLiIsCi0iRkFTVCBjaG9vc2VzIGEgbGFy Z2UgcGFja2V0IHNpemUsIGEgbGFyZ2Ugd2luZG93IHNpemUsIGFuZCBhIGZhaXIgYW1vdW50IG9m IiwKLSJjb250cm9sLWNoYXJhY3RlciB1bnByZWZpeGluZyBhdCB0aGUgcmlzayBvZiBwb3NzaWJs ZSBmYWlsdXJlIG9uIHNvbWUiLAotImNvbm5lY3Rpb25zLiAgRkFTVCBpcyB0aGUgZGVmYXVsdCB0 dW5pbmcgaW4gQy1LZXJtaXQgNy4wIGFuZCBsYXRlci4gIEluIGNhc2UiLAotIkZBU1QgZmlsZSB0 cmFuc2ZlcnMgZmFpbCBmb3IgeW91IG9uIGEgcGFydGljdWxhciBjb25uZWN0aW9uLCB0cnkgQ0FV VElPVVMuIiwKLSJJZiB0aGF0IGZhaWxzIHRvbywgdHJ5IFJPQlVTVC4gIFlvdSBjYW4gYWxzbyBj aGFuZ2UgdGhlIGRlZmluaXRpb25zIG9mIGVhY2giLAotIm1hY3JvIHdpdGggdGhlIERFRklORSBj b21tYW5kLiAgVG8gc2VlIHRoZSBjdXJyZW50IGRlZmluaXRpb25zLCB0eXBlIiwKLSJcInNob3cg bWFjcm8gZmFzdFwiLCBcInNob3cgbWFjcm8gY2F1dGlvdXNcIiwgb3IgXCJzaG93IG1hY3JvIHJv YnVzdFwiLiIsCi0iIgotfTsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmZGVmIFZNUwotc3Rh dGljIGNoYXIgKiBobXh4cHVyZ2VbXSA9IHsKLSJTeW50YXg6IFBVUkdFIFsgc3dpdGNoZXMgXSBb IGZpbGVzcGVjIF0iLAotIiAgUnVucyB0aGUgRENMIFBVUkdFIGNvbW1hbmQuICBTd2l0Y2hlcyBh bmQgZmlsZXNwZWMgYXJlIG5vdCBwYXJzZWQgb3IiLAotIiAgdmVyaWZpZWQgYnkgS2VybWl0LCBi dXQgcGFzc2VkIGRpcmVjdGx5IHRvIERDTC4iLAotIiIKLX07Ci0jZWxzZQotI2lmZGVmIENLUFVS R0UKLXN0YXRpYyBjaGFyICogaG14eHB1cmdlW10gPSB7Ci0iU3ludGF4OiBQVVJHRSBbIHN3aXRj aGVzIF0gWyBmaWxlc3BlYyBdIiwKLSIgIERlbGV0ZXMgYmFja3VwIGZpbGVzOyB0aGF0IGlzLCBm aWxlcyB3aG9zZSBuYW1lcyBlbmQgaW4gXCIufm5+XCIsIHdoZXJlIiwKLSIgIG4gaXMgYSBudW1i ZXIuICBQVVJHRSBieSBpdHNlbGYgZGVsZXRlcyBhbGwgYmFja3VwIGZpbGVzIGluIHRoZSBjdXJy ZW50IiwKLSIgIGRpcmVjdG9yeS4gIFN3aXRjaGVzOiIsCi0KLSIgIiwKLSIvQUZURVI6ZGF0ZS10 aW1lIiwKLSNpZmRlZiBWTVMKLSIgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMgY3Jl YXRlZCBhZnRlciB0aGUgZ2l2ZW4gZGF0ZS10aW1lIGFyZSIsCi0jZWxzZQotIiAgU3BlY2lmaWVz IHRoYXQgb25seSB0aG9zZSBmaWxlcyBtb2RpZmllZCBhZnRlciB0aGUgZ2l2ZW4gZGF0ZS10aW1l IGFyZSIsCi0jZW5kaWYgLyogVk1TICovCi0iICB0byBiZSBwdXJnZWQuICBIRUxQIERBVEUgZm9y IGluZm8gYWJvdXQgZGF0ZS10aW1lIGZvcm1hdHMuIiwKLSIgIiwKLSIvQkVGT1JFOmRhdGUtdGlt ZSIsCi0jaWZkZWYgVk1TCi0iICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3NlIGZpbGVzIG1vZGlm aWVkIGJlZm9yZSB0aGUgZ2l2ZW4gZGF0ZS10aW1lIiwKLSNlbHNlCi0iICBTcGVjaWZpZXMgdGhh dCBvbmx5IHRob3NlIGZpbGVzIG1vZGlmaWVkIGJlZm9yZSB0aGUgZ2l2ZW4gZGF0ZS10aW1lIiwK LSNlbmRpZiAvKiBWTVMgKi8KLSIgIGFyZSB0byBiZSBwdXJnZWQuIiwKLSIgIiwKLSIvTk9ULUFG VEVSOmRhdGUtdGltZSIsCi0jaWZkZWYgVk1TCi0iICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3Nl IGZpbGVzIG1vZGlmaWVkIGF0IG9yIGJlZm9yZSB0aGUgZ2l2ZW4gZGF0ZS10aW1lIiwKLSNlbHNl Ci0iICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3NlIGZpbGVzIG1vZGlmaWVkIGF0IG9yIGJlZm9y ZSB0aGUgZ2l2ZW4gZGF0ZS10aW1lIiwKLSNlbmRpZiAvKiBWTVMgKi8KLSIgIGFyZSB0byBiZSBw dXJnZWQuIiwKLSIgIiwKLSIvTk9ULUJFRk9SRTpkYXRlLXRpbWUiLAotI2lmZGVmIFZNUwotIiAg U3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBmaWxlcyBtb2RpZmllZCBhdCBvciBhZnRlciB0aGUg Z2l2ZW4gZGF0ZS10aW1lIiwKLSNlbHNlCi0iICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3NlIGZp bGVzIG1vZGlmaWVkIGF0IG9yIGFmdGVyIHRoZSBnaXZlbiBkYXRlLXRpbWUiLAotI2VuZGlmIC8q IFZNUyAqLwotIiAgYXJlIHRvIGJlIHB1cmdlZC4iLAotIiAiLAotIi9MQVJHRVItVEhBTjpudW1i ZXIiLAotIiAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBmaWxlcyBsb25nZXIgdGhhbiB0aGUg Z2l2ZW4gbnVtYmVyIG9mIGJ5dGVzIGFyZSIsCi0iICB0byBiZSBwdXJnZWQuIiwKLSIgIiwKLSIv U01BTExFUi1USEFOOm51bWJlciIsCi0iICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3NlIGZpbGVz IHNtYWxsZXIgdGhhbiB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGJ5dGVzIGFyZSIsCi0iICB0byBiZSBw dXJnZWQuIiwKLSIgIiwKLSIvRVhDRVBUOnBhdHRlcm4iLAotIiAgU3BlY2lmaWVzIHRoYXQgYW55 IGZpbGVzIHdob3NlIG5hbWVzIG1hdGNoIHRoZSBwYXR0ZXJuLCB3aGljaCBjYW4gYmUgYSIsCi0i ICByZWd1bGFyIGZpbGVuYW1lIG9yIG1heSBjb250YWluIHdpbGRjYXJkcywgYXJlIG5vdCB0byBi ZSBwdXJnZWQuICBUbyIsCi0iICBzcGVjaWZ5IG11bHRpcGxlIHBhdHRlcm5zICh1cCB0byA4KSwg dXNlIG91dGVyIGJyYWNlcyBhcm91bmQgdGhlIGdyb3VwIiwKLSIgIGFuZCBpbm5lciBicmFjZXMg YXJvdW5kIGVhY2ggcGF0dGVybjoiLAotIiAiLAotIiAgICAvRVhDRVBUOnt7cGF0dGVybjF9e3Bh dHRlcm4yfS4uLn0iLAotIiAiLAotI2lmZGVmIFVOSVhPUk9TSwotIi9ET1RGSUxFUyIsCi0iICBJ bmNsdWRlIChwdXJnZSkgZmlsZXMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCBcIi5cIi4iLAotIiAi LAotIi9OT0RPVEZJTEVTIiwKLSIgIFNraXAgKGRvbid0IHB1cmdlKSBmaWxlcyB3aG9zZSBuYW1l cyBiZWdpbiB3aXRoIFwiLlwiLiIsCi0iICIsCi0jZW5kaWYgLyogVU5JWE9ST1NLICovCi0jaWZk ZWYgUkVDVVJTSVZFCi0iL1JFQ1VSU0lWRSIsCi0iICBEZXNjZW5kcyB0aHJvdWdoIHRoZSBjdXJy ZW50IG9yIHNwZWNpZmllZCBkaXJlY3RvcnkgdHJlZS4iLAotIiAiLAotI2VuZGlmIC8qIFJFQ1VS U0lWRSAqLwotIi9LRUVQOm4iLAotIiAgUmV0YWluIHRoZSAnbicgbW9zdCByZWNlbnQgKGhpZ2hl c3QtbnVtYmVyZWQpIGJhY2t1cCBmaWxlcyBmb3IgZWFjaCBmaWxlLiIsCi0iICBCeSBkZWZhdWx0 LCBub25lIGFyZSBrZXB0LiAgSWYgL0tFRVAgaXMgZ2l2ZW4gd2l0aG91dCBhIG51bWJlciwgMSBp cyB1c2VkLiIsCi0iICIsCi0iL0xJU1QiLAotIiAgRGlzcGxheSBlYWNoIGZpbGUgYXMgaXQgaXMg cHJvY2Vzc2VkIGFuZCBzYXkgd2hldGhlciBpdCBpcyBwdXJnZWQgb3Iga2VwdC4iLAotIiAgU3lu b255bXM6IC9MT0csIC9WRVJCT1NFLiIsCi0iICIsCi0iL05PTElTVCIsCi0iICBUaGUgUFVSR0Ug Y29tbWFuZCBzaG91bGQgb3BlcmF0ZSBzaWxlbnRseSAoZGVmYXVsdCkuIiwKLSIgIFN5bm9ueW1z OiAvTk9MT0csIC9RVUlFVC4iLAotIiAiLAotIi9IRUFESU5HIiwKLSIgIFByaW50IGhlYWRpbmcg YW5kIHN1bW1hcnkgaW5mb3JtYXRpb24uIiwKLSIgIiwKLSIvTk9IRUFESU5HIiwKLSIgIERvbid0 IHByaW50IGhlYWRpbmcgYW5kIHN1bW1hcnkgaW5mb3JtYXRpb24uIiwKLSIgIiwKLSIvUEFHRSIs Ci0iICBXaGVuIC9MSVNUIGlzIGluIGVmZmVjdCwgcGF1c2UgYXQgdGhlIGVuZCBvZiBlYWNoIHNj cmVlbmZ1bCwgZXZlbiBpZiIsCi0iICBDT01NQU5EIE1PUkUtUFJPTVBUSU5HIGlzIE9GRi4iLAot IiAiLAotIi9OT1BBR0UiLAotIiAgRG9uJ3QgcGF1c2UsIGV2ZW4gaWYgQ09NTUFORCBNT1JFLVBS T01QVElORyBpcyBPTi4iLAotIiAiLAotIi9BU0siLAotIiAgSW50ZXJhY3RpdmVseSBhc2sgcGVy bWlzc2lvbiB0byBkZWxldGUgZWFjaCBiYWNrdXAgZmlsZS4iLAotIiAiLAotIi9OT0FTSyIsCi0i ICBQdXJnZSBiYWNrdXAgZmlsZXMgd2l0aG91dCBhc2tpbmcgcGVybWlzc2lvbi4iLAotIiAiLAot Ii9TSU1VTEFURSIsCi0iICBJbmhpYml0cyB0aGUgYWN0dWFsIGRlbGV0aW9uIG9mIGZpbGVzOyB1 c2UgdG8gcHJldmlldyB3aGljaCBmaWxlcyB3b3VsZCIsCi0iICBhY3R1YWxseSBiZSBkZWxldGVk LiAgSW1wbGllcyAvTElTVC4iLAotIiAiLAotIlVzZSBTRVQgT1BUSU9OUyBQVVJHRSBbIHN3aXRj aGVzIF0gdG8gY2hhbmdlIGRlZmF1bHRzOyB1c2UgU0hPVyBPUFRJT05TIHRvIiwKLSJkaXNwbGF5 IGN1c3RvbWl6ZWQgZGVmYXVsdHMuICBBbHNvIHNlZSBIRUxQIERFTEVURSwgSEVMUCBXSUxEQ0FS RC4iLAotIiIKLX07Ci0jZW5kaWYgLyogQ0tQVVJHRSAqLwotI2VuZGlmIC8qIFZNUyAqLwotCi1z dGF0aWMgY2hhciAqaG14eGNsb1tdID0gewotIlN5bnRheDogIENMT1NFIFsgaXRlbSBdIiwKLSIg IENsb3NlIHRoZSBpbmRpY2F0ZWQgaXRlbS4gIFRoZSBkZWZhdWx0IGl0ZW0gaXMgQ09OTkVDVElP Tiwgd2hpY2ggaXMgdGhlIiwKLSIgIGN1cnJlbnQgU0VUIExJTkUgb3IgU0VUIEhPU1QgY29ubmVj dGlvbi4gIFRoZSBvdGhlciBpdGVtcyBhcmU6IiwKLSIgIiwKLSNpZmRlZiBDS0xPR0RJQUwKLSIg ICAgQ1gtTE9HICAgICAgICAgIChjb25uZWN0aW9uIGxvZywgb3BlbmVkIHdpdGggTE9HIENYKSIs Ci0jZW5kaWYgLyogQ0tMT0dESUFMICovCi0jaWZuZGVmIE5PTE9DQUwKLSIgICAgU0VTU0lPTi1M T0cgICAgIChvcGVuZWQgd2l0aCBMT0cgU0VTU0lPTikiLAotI2VuZGlmIC8qIE5PTE9DQUwgKi8K LSNpZmRlZiBUTE9HCi0iICAgIFRSQU5TQUNUSU9OLUxPRyAob3BlbmVkIHdpdGggTE9HIFRSQU5T QUNUSU9OUykiLAotI2VuZGlmIC8qIFRMT0cgKi8KLSIgICAgUEFDS0VULUxPRyAgICAgIChvcGVu ZWQgd2l0aCBMT0cgUEFDS0VUUykiLAotI2lmZGVmIERFQlVHCi0iICAgIERFQlVHLUxPRyAgICAg ICAob3BlbmVkIHdpdGggTE9HIERFQlVHKSIsCi0jZW5kaWYgLyogREVCVUcgKi8KLSNpZm5kZWYg Tk9TUEwKLSIgICAgUkVBRC1GSUxFICAgICAgIChvcGVuZWQgd2l0aCBPUEVOIFJFQUQpIiwKLSIg ICAgV1JJVEUtRklMRSAgICAgIChvcGVuZWQgd2l0aCBPUEVOIFdSSVRFIG9yIE9QRU4gQVBQRU5E KSIsCi0jZW5kaWYgLyogTk9TUEwgKi8KLSIgIiwKLSJUeXBlIEhFTFAgTE9HIGFuZCBIRUxQIE9Q RU4gZm9yIGZ1cnRoZXIgaW5mby4iLAotIiIKLX07Ci0KLSNpZmRlZiBDS0xFQVJOCi1zdGF0aWMg Y2hhciAqIGhteHhsZWFybltdID0gewotIlN5bnRheDogTEVBUk4gWyAvT04gL09GRiAvQ0xPU0Ug XSBbIGZpbGVuYW1lIF0iLAotIiAgUmVjb3JkcyBhIGxvZ2luIHNjcmlwdC4gIElmIHlvdSBnaXZl IGEgZmlsZW5hbWUsIHRoZSBmaWxlIGlzIG9wZW5lZCBmb3IiLAotIiAgc3Vic2VxdWVudCByZWNv cmRpbmcuICBJZiB5b3UgZG9uJ3QgZ2l2ZSBhbnkgc3dpdGNoZXMsIC9PTiBpcyBhc3N1bWVkLiIs Ci0iICAvT04gZW5hYmxlcyByZWNvcmRpbmcgdG8gdGhlIGN1cnJlbnQgZmlsZSAoaWYgYW55KTsg L09GRiBkaXNhYmxlcyIsCi0iICByZWNvcmRpbmcuICAvQ0xPU0UgY2xvc2VzIHRoZSBjdXJyZW50 IGZpbGUgKGlmIGFueSkuICBBZnRlciBMRUFSTiAvQ0xPU0UiLAotIiAgb3IgZXhpdCBmcm9tIEtl cm1pdCwgeW91ciBzY3JpcHQgaXMgYXZhaWxhYmxlIGZvciBleGVjdXRpb24gYnkgdGhlIFRBS0Ui LAotIiAgY29tbWFuZC4iLAotIiIKLX07Ci0jZW5kaWYgLyogQ0tMRUFSTiAqLwotCi0jaWZkZWYg Q0tfTUlOUFVUCi1zdGF0aWMgY2hhciAqaG14eG1pbnBbXSA9IHsKLSJTeW50YXg6ICBNSU5QVVQg WyBzd2l0Y2hlcyBdIG4gWyBzdHJpbmcxIFsgc3RyaW5nMiBbIC4uLiBdIF0gXSIsCi0iRXhhbXBs ZTogTUlOUFVUIDUgTG9naW46IHtVc2VybmFtZTogfSB7Tk8gQ0FSUklFUn0gQlVTWSBSSU5HIiwK LSIgIEZvciB1c2UgaW4gc2NyaXB0IHByb2dyYW1zLiAgV2FpdHMgdXAgdG8gbiBzZWNvbmRzIGZv ciBhbnkgb25lIG9mIHRoZSIsCi0iICBzdHJpbmdzIHRvIGFycml2ZSBvbiB0aGUgY29tbXVuaWNh dGlvbiBkZXZpY2UuICBJZiBubyBzdHJpbmdzIGFyZSBnaXZlbiwiLAotIiAgdGhlIGNvbW1hbmQg d2FpdHMgZm9yIGFueSBjaGFyYWN0ZXIgYXQgYWxsIHRvIGFycml2ZS4gIFN0cmluZ3MgYXJlIiwK LSIgIHNlcGFyYXRlZCBieSBzcGFjZXM7IHVzZSB7YnJhY2VzfSBvciBcImRvdWJsZXF1b3Rlc1wi IGZvciBncm91cGluZy4gIElmIiwKLSIgIGFueSBvZiB0aGUgc3RyaW5ncyBpcyBlbmNvdW50ZXJl ZCB3aXRoaW4gdGhlIHRpbWVvdXQgaW50ZXJ2YWwsIHRoZSBjb21tYW5kIiwKLSIgIHN1Y2NlZWRz IGFuZCB0aGUgXFx2KG1pbnB1dCkgdmFyaWFibGUgaXMgc2V0IHRvIHRoZSBudW1iZXIgb2YgdGhl IHN0cmluZyIsCi0iICB0aGF0IHdhcyBtYXRjaGVkOiAxLCAyLCAzLCBldGMuICBJZiBub25lIG9m IHRoZSBzdHJpbmdzIGFycml2ZXMsIHRoZSIsCi0iICBjb21tYW5kIHRpbWVzIG91dCwgZmFpbHMs IGFuZCBcXHYobWlucHV0KSBpcyBzZXQgdG8gMC4gIEluIGFsbCBvdGhlciIsCi0iICByZXNwZWN0 cywgTUlOUFVUIGlzIGxpa2UgSU5QVVQuICBTZWUgSEVMUCBJTlBVVCBmb3IgdGhlIGF2YWlsYWJs ZSBzd2l0Y2hlcyIsCi0iICBhbmQgb3RoZXIgZGV0YWlscyBvZiBvcGVyYXRpb24uIiwKLSIiIH07 Ci0jZW5kaWYgLyogQ0tfTUlOUFVUICovCi0KLSNpZm5kZWYgTk9MT0NBTAotc3RhdGljIGNoYXIg KmhteHhjb25bXSA9IHsKLSJTeW50YXg6IENPTk5FQ1QgKG9yIEMsIG9yIENRKSBbIHN3aXRjaGVz IF0iLAotIiAgQ29ubmVjdCB0byBhIHJlbW90ZSBjb21wdXRlciB2aWEgdGhlIHNlcmlhbCBjb21t dW5pY2F0aW9ucyBkZXZpY2UgZ2l2ZW4gaW4iLAotI2lmZGVmIE9TMgotIiAgdGhlIG1vc3QgcmVj ZW50IFNFVCBQT1JUIGNvbW1hbmQsIG9yIHRvIHRoZSBuZXR3b3JrIGhvc3QgbmFtZWQgaW4gdGhl IG1vc3QiLAotI2Vsc2UKLSIgIHRoZSBtb3N0IHJlY2VudCBTRVQgTElORSBjb21tYW5kLCBvciB0 byB0aGUgbmV0d29yayBob3N0IG5hbWVkIGluIHRoZSBtb3N0IiwKLSNlbmRpZiAvKiBPUzIgKi8K LSIgIHJlY2VudCBTRVQgSE9TVCBjb21tYW5kLiAgVHlwZSB0aGUgZXNjYXBlIGNoYXJhY3RlciBm b2xsb3dlZCBieSBDIHRvIGdldCIsCi0iICBiYWNrIHRvIHRoZSBDLUtlcm1pdCBwcm9tcHQsIG9y IGZvbGxvd2VkIGJ5ID8gZm9yIGEgbGlzdCBvZiBDT05ORUNULW1vZGUiLAotI2lmZGVmIE9TMgot IiAgZXNjYXBlIGNvbW1hbmRzLiAgWW91IGNhbiBhbHNvIGFzc2lnbiB0aGUgXFxLZXhpdCB2ZXJi IHRvIHRoZSBrZXkgb3IiLAotIiAga2V5LWNvbWJpbmF0aW9uIG9mIHlvdXIgY2hvaWNlOyBieSBk ZWZhdWx0IGl0IGlzIGFzc2lnbmVkIHRvIEFsdC14LiIsCi0jZWxzZQotIiAgZXNjYXBlIGNvbW1h bmRzLiIsCi0iICIsCi0iSW5jbHVkZSB0aGUgL1FVSUVUTFkgc3dpdGNoIHRvIHN1cHByZXNzIHRo ZSBpbmZvcm1hdGlvbmFsIG1lc3NhZ2UgdGhhdCIsCi0idGVsbHMgeW91IGhvdyB0byBlc2NhcGUg YmFjaywgZXRjLiAgQ1EgaXMgYSBzeW5vbnltIGZvciBDT05ORUNUIC9RVUlFVExZLiIsCi0jZW5k aWYgLyogT1MyICovCi0iICIsCi0iT3RoZXIgc3dpdGNoZXMgaW5jbHVkZToiLAotI2lmZGVmIENL X1RSSUdHRVIKLSIgIiwKLSIvVFJJR0dFUjpzdHJpbmciLAotIiAgT25lIG9yIG1vcmUgc3RyaW5n cyB0byBsb29rIGZvciB0aGF0IHdpbGwgY2F1c2UgYXV0b21hdGljIHJldHVybiB0byIsCi0iICBj b21tYW5kIG1vZGUuICBUbyBzcGVjaWZ5IG9uZSBzdHJpbmcsIGp1c3QgcHV0IGl0IHJpZ2h0IGFm dGVyIHRoZSIsCi0iICBjb2xvbiwgZS5nLiBcIi9UUklHR0VSOkdvb2RieWVcIi4gIElmIHRoZSBz dHJpbmcgY29udGFpbnMgYW55IHNwYWNlcywgeW91IiwKLSIgIG11c3QgZW5jbG9zZSBpdCBpbiBi cmFjZXMsIGUuZy4gXCIvVFJJR0dFUjp7UkVBRFkgVE8gU0VORC4uLn1cIi4gIFRvIiwKLSIgIHNw ZWNpZnkgbW9yZSB0aGFuIG9uZSB0cmlnZ2VyLCB1c2UgdGhlIGZvbGxvd2luZyBmb3JtYXQ6IiwK LSIgIiwKLSIgICAgL1RSSUdHRVI6e3tzdHJpbmcxfXtzdHJpbmcyfS4uLntzdHJpbmdufX0iLAot IiAiLAotIiAgVXBvbiByZXR1cm4gZnJvbSBDT05ORUNUIG1vZGUsIHRoZSB2YXJpYWJsZSBcXHYo dHJpZ2dlcikgaXMgc2V0IHRvIHRoZSIsCi0iICB0cmlnZ2VyIHN0cmluZywgaWYgYW55LCB0aGF0 IHdhcyBhY3R1YWxseSBlbmNvdW50ZXJlZC4gIFRoaXMgdmFsdWUsIGxpa2UiLAotIiAgYWxsIG90 aGVyIENPTk5FQ1Qgc3dpdGNoZXMgYXBwbGllcyBvbmx5IHRvIHRoZSBDT05ORUNUIGNvbW1hbmQg d2l0aCB3aGljaCIsCi0iICBpdCBpcyBnaXZlbiwgYW5kIG92ZXJyaWRlcyAodGVtcG9yYXJpbHkp IGFueSBnbG9iYWwgU0VUIFRFUk1JTkFMIFRSSUdHRVIiLAotIiAgc3RyaW5nIHRoYXQgbWlnaHQg YmUgaW4gZWZmZWN0LiIsCi0jZW5kaWYgLyogQ0tfVFJJR0dFUiAqLwotI2lmZGVmIE9TMgotIiAi LAotIi9JRExFLUxJTUlUOm51bWJlciIsCi0iICBUaGUgbnVtYmVyIG9mIHNlY29uZHMgb2YgaWRs ZSB0aW1lLCBhZnRlciB3aGljaCBLZXJtaXQgcmV0dXJucyIsCi0iICBhdXRvbWF0aWNhbGx5IHRv IGNvbW1hbmQgbW9kZTsgZGVmYXVsdCAwIChubyBsaW1pdCkuIiwKLSIgIiwKLSIvSURMRS1JTlRF UlZBTDpudW1iZXIiLAotIiAgVGhlIG51bWJlciBvZiBzZWNvbmRzIG9mIGlkbGUgdGltZSwgYWZ0 ZXIgd2hpY2ggS2VybWl0IGF1dG9tYXRpY2FsbHkiLAotIiAgdHJhbnNtaXRzIHRoZSBpZGxlIHN0 cmluZy4iLAotIiAiLAotIi9JRExFLVNUUklORzpzdHJpbmciLAotIiAgVGhlIHN0cmluZyB0byB0 cmFuc21pdCB3aGVuZXZlciB0aGUgaWRsZSBpbnRlcnZhbCBoYXMgcGFzc2VkLiIsCi0iICIsCi0i L1RJTUUtTElNSVQ6bnVtYmVyIiwKLSIgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzZWNvbmRzIGZv ciB3aGljaCB0aGUgQ09OTkVDVCBzZXNzaW9uIG1heSBsYXN0LiIsCi0iICBUaGUgZGVmYXVsdCBp cyAwIChubyBsaW1pdCkuICBJZiBhIG5vbnplcm8gbnVtYmVyIGlzIGdpdmVuLCBLZXJtaXQgcmV0 dXJucyIsCi0iICBhdXRvbWF0aWNhbGx5IHRvIGNvbW1hbmQgbW9kZSBhZnRlciB0aGlzIG1hbnkg c2Vjb25kcy4iLAotI2VuZGlmIC8qIE9TMiAqLwotIiIgfTsKLSNlbmRpZiAvKiBOT0xPQ0FMICov Ci0KLXN0YXRpYyBjaGFyICpobXh4bWdldFtdID0gewotIlN5bnRheDogTUdFVCBbIHN3aXRjaGVz Li4uIF0gcmVtb3RlLWZpbGVzcGVjIFsgcmVtb3RlLWZpbGVzcGVjIC4uLiBdIiwKLSIgIiwKLSJK dXN0IGxpa2UgR0VUIChxLnYuKSBleGNlcHQgYWxsb3dzIGEgbGlzdCBvZiByZW1vdGUgZmlsZSBz cGVjaWZpY2F0aW9ucywiLAotInNlcGFyYXRlZCBieSBzcGFjZXMuIiwKLSIiCi19OwotCi1zdGF0 aWMgY2hhciAqaG14eGdldFtdID0gewotIlN5bnRheDogR0VUIFsgc3dpdGNoZXMuLi4gXSByZW1v dGUtZmlsZXNwZWMgWyBhcy1uYW1lIF0iLAotIiAgVGVsbHMgdGhlIG90aGVyIEtlcm1pdCwgd2hp Y2ggbXVzdCBiZSBpbiAob3Igc3VwcG9ydCBhdXRvc3dpdGNoaW5nIGludG8pIiwKLSIgIHNlcnZl ciBtb2RlLCB0byBzZW5kIHRoZSBuYW1lZCBmaWxlIG9yIGZpbGVzLiAgSWYgdGhlIHJlbW90ZS1m aWxlc3BlYyBvciIsCi0iICB0aGUgYXMtbmFtZSBjb250YWluIHNwYWNlcywgdGhleSBtdXN0IGJl IGVuY2xvc2VkIGluIGJyYWNlcy4gIElmIGFzLW5hbWUiLAotIiAgaXMgdGhlIG5hbWUgb2YgYW4g ZXhpc3RpbmcgbG9jYWwgZGlyZWN0b3J5LCBpbmNvbWluZyBmaWxlcyBhcmUgcGxhY2VkIGluIiwK LSIgIHRoYXQgZGlyZWN0b3J5OyBpZiBpdCBpcyB0aGUgbmFtZSBvZiBkaXJlY3RvcnkgdGhhdCBk b2VzIG5vdCBleGlzdCwgS2VybWl0IiwKLSIgIHRyaWVzIHRvIGNyZWF0ZSBpdC4gIE9wdGlvbmFs IHN3aXRjaGVzIGluY2x1ZGU6IiwKLSIgIiwKLSIvQVMtTkFNRTp0ZXh0IiwKLSIgIFNwZWNpZmll cyBcInRleHRcIiBhcyB0aGUgbmFtZSB0byBzdG9yZSB0aGUgaW5jb21pbmcgZmlsZSB1bmRlciwg b3IiLAotIiAgZGlyZWN0b3J5IHRvIHN0b3JlIGl0IGluLiAgWW91IGNhbiBhbHNvIHNwZWNpZnkg dGhlIGFzLW5hbWUgYXMgdGhlIHNlY29uZCIsCi0iICBmaWxlbmFtZSBvbiB0aGUgR0VUIGNvbW1h bmQgbGluZS4iLAotIiAiLAotIi9CSU5BUlkiLAotIiAgUGVyZm9ybXMgdGhpcyB0cmFuc2ZlciBp biBiaW5hcnkgbW9kZSB3aXRob3V0IGFmZmVjdGluZyB0aGUgZ2xvYmFsIiwKLSIgIHRyYW5zZmVy IG1vZGUuIiwKLSIgIiwKLSIvQ09NTUFORCIsCi0iICBSZWNlaXZlcyB0aGUgZmlsZSBpbnRvIHRo ZSBzdGFuZGFyZCBpbnB1dCBvZiBhIGNvbW1hbmQsIHJhdGhlciB0aGFuIHNhdmluZyIsCi0iICBp dCBvbiAgZGlzay4gIFRoZSAvQVMtTkFNRSBvciB0aGUgc2Vjb25kIFwiZmlsZW5hbWVcIiBvbiB0 aGUgR0VUIGNvbW1hbmQiLAotIiAgbGluZSBpcyBpbnRlcnByZXRlZCBhcyB0aGUgbmFtZSBvZiBh IGNvbW1hbmQuIiwKLSIgIiwKLSIvREVMRVRFIiwKLSIgIEFza3MgdGhlIG90aGVyIEtlcm1pdCB0 byBkZWxldGUgdGhlIGZpbGUgKG9yIGVhY2ggZmlsZSBpbiB0aGUgZ3JvdXApIiwKLSIgIGFmdGVy IGl0IGhhcyBiZWVuIHRyYW5zZmVycmVkIHN1Y2Nlc3NmdWxseS4iLAotIiAiLAotIi9FWENFUFQ6 cGF0dGVybiIsCi0iICBTcGVjaWZpZXMgdGhhdCBhbnkgZmlsZXMgd2hvc2UgbmFtZXMgbWF0Y2gg dGhlIHBhdHRlcm4sIHdoaWNoIGNhbiBiZSBhIiwKLSIgIHJlZ3VsYXIgZmlsZW5hbWUsIG9yIG1h eSBjb250YWluIFwiKlwiIGFuZC9vciBcIj9cIiBtZXRhY2hhcmFjdGVycywiLAotIiAgYXJlIHRv IGJlIHJlZnVzZWQuICBUbyBzcGVjaWZ5IG11bHRpcGxlIHBhdHRlcm5zICh1cCB0byA4KSwgdXNl IG91dGVyIiwKLSIgIGJyYWNlcyBhcm91bmQgdGhlIGdyb3VwLCBhbmQgaW5uZXIgYnJhY2VzIGFy b3VuZCBlYWNoIHBhdHRlcm46IiwKLSIgIiwKLSIgICAgL0VYQ0VQVDp7e3BhdHRlcm4xfXtwYXR0 ZXJuMn0uLi59IiwKLSIgIiwKLSIvRklMRU5BTUVTOntDT05WRVJURUQsTElURVJBTH0iLAotIiAg T3ZlcnJpZGVzIHRoZSBnbG9iYWwgU0VUIEZJTEUgTkFNRVMgc2V0dGluZyBmb3IgdGhpcyB0cmFu c2ZlciBvbmx5LiIsCi0iICIsCi0iL0ZJTFRFUjpjb21tYW5kIiwKLSIgIENhdXNlcyB0aGUgaW5j b21pbmcgZmlsZSB0byBwYXNzZWQgdGhyb3VnaCB0aGUgZ2l2ZW4gY29tbWFuZCAoc3RhbmRhcmQi LAotIiAgaW5wdXQvb3V0cHV0IGZpbHRlcikgYmVmb3JlIGJlaW5nIHdyaXR0ZW4gdG8gZGlzay4i LAotIiAiLAotI2lmZGVmIFZNUwotIi9JTUFHRSIsCi0iICBUcmFuc2ZlciBpbiBpbWFnZSBtb2Rl LiIsCi0iICIsCi0jZW5kaWYgLyogVk1TICovCi0jaWZkZWYgQ0tfTEFCRUxFRAotIi9MQUJFTEVE IiwKLSIgIFZNUyBhbmQgT1MvMiBvbmx5OiBTcGVjaWZpZXMgbGFiZWxlZCB0cmFuc2ZlciBtb2Rl LiIsCi0iICIsCi0jZW5kaWYgLyogQ0tfTEFCRUxFRCAqLwotCi0iL01PVkUtVE86ZGlyZWN0b3J5 LW5hbWUiLAotIiAgU3BlY2lmaWVzIHRoYXQgZWFjaCBmaWxlIHRoYXQgYXJyaXZlcyBzaG91bGQg YmUgbW92ZWQgdG8gdGhlIHNwZWNpZmllZCIsCi0iICBkaXJlY3RvcnkgYWZ0ZXIsIGFuZCBvbmx5 IGlmLCBpdCBoYXMgYmVlbiByZWNlaXZlZCBzdWNjZXNzZnVsbHkuIiwKLSIgIiwKLSIvUEFUSE5B TUVTOntPRkYsQUJTT0xVVEUsUkVMQVRJVkUsQVVUT30iLAotIiAgT3ZlcnJpZGVzIHRoZSBnbG9i YWwgU0VUIFJFQ0VJVkUgUEFUSE5BTUVTIHNldHRpbmcgZm9yIHRoaXMgdHJhbnNmZXIuIiwKLSIg IiwKLSIvUElQRVM6e09OLE9GRn0iLAotIiAgT3ZlcnJpZGVzIHRoZSBUUkFOU0ZFUiBQSVBFUyBz ZXR0aW5nIGZvciB0aGlzIGNvbW1hbmQgb25seS4gIE9OIGFsbG93cyIsCi0iICByZWNlcHRpb24g b2YgZmlsZXMgd2l0aCBuYW1lcyBsaWtlIFwiIXRhciB4ZiAtXCIgdG8gYmUgYXV0b21hdGljYWxs eSIsCi0iICBkaXJlY3RlZCB0byBhIHBpcGVsaW5lLiIsCi0iICIsCi0iL1FVSUVUIiwKLSIgIFdo ZW4gc2VuZGluZyBpbiBsb2NhbCBtb2RlLCB0aGlzIHN1cHByZXNzZXMgdGhlIGZpbGUtdHJhbnNm ZXIgZGlzcGxheS4iLAotIiAiLAotIi9SRUNPVkVSIiwKLSIgIFVzZWQgdG8gcmVjb3ZlciBmcm9t IGEgcHJldmlvdXNseSBpbnRlcnJ1cHRlZCB0cmFuc2ZlcjsgR0VUIC9SRUNPVkVSIiwKLSIgIGlz IGVxdWl2YWxlbnQgUkVHRVQuICBXb3JrcyBvbmx5IGluIGJpbmFyeSBtb2RlLiIsCi0iICIsCi0i L1JFQ1VSU0lWRSIsCi0iICBUZWxscyB0aGUgc2VydmVyIHRvIGRlc2NlbmQgdGhyb3VnaCB0aGUg ZGlyZWN0b3J5IHRyZWUgd2hlbiBsb2NhdGluZyIsCi0iICB0aGUgZmlsZXMgdG8gYmUgc2VudC4i LAotIiAiLAotIi9SRU5BTUUtVE86c3RyaW5nIiwKLSIgIFNwZWNpZmllcyB0aGF0IGVhY2ggZmls ZSB0aGF0IGFycml2ZXMgc2hvdWxkIGJlIHJlbmFtZWQgYXMgc3BlY2lmaWVkIiwKLSIgIGFmdGVy LCBhbmQgb25seSBpZiwgaXQgaGFzIGJlZW4gcmVjZWl2ZWQgc3VjY2Vzc2Z1bGx5LiAgVGhlIHN0 cmluZyBzaG91bGQiLAotIiAgbm9ybWFsbHkgY29udGFpbiB2YXJpYWJsZXMgbGlrZSBcXHYoZmls ZW5hbWUpIG9yIFxcdihmaWxlbnVtKS4iLAotIiAiLAotIi9URVhUIiwKLSIgIFBlcmZvcm1zIHRo aXMgdHJhbnNmZXIgaW4gdGV4dCBtb2RlIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBnbG9iYWwiLAot IiAgdHJhbnNmZXIgbW9kZS4iLAotIiAiLAotIi9UUkFOU1BBUkVOVCIsCi0iICBJbmhpYml0cyBj aGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uIG9mIGluY29taW5nIHRleHQgZmlsZXMgZm9yIHRoZSBk dXJhdGlvbiIsCi0iICBvZiB0aGUgR0VUIGNvbW1hbmQgd2l0aG91dCBhZmZlY3Rpbmcgc3Vic2Vx dWVudCBjb21tYW5kcy4iLAotIiAiLAotIkFsc28gc2VlIEhFTFAgTUdFVCwgSEVMUCBTRU5ELCBI RUxQIFJFQ0VJVkUsIEhFTFAgU0VSVkVSLCBIRUxQIFJFTU9URS4iLAotIiJ9OwotCi1zdGF0aWMg Y2hhciAqaG14eGxnW10gPSB7Ci0iU3ludGF4OiBMT0cgKG9yIEwpIGxvZy10eXBlIFsgZmlsZW5h bWUgWyB7IE5FVywgQVBQRU5EIH0gXSBdIiwKLSIgIiwKLSJSZWNvcmQgaW5mb3JtYXRpb24gaW4g YSBsb2cgZmlsZToiLAotIiAiLAotI2lmZGVmIENLTE9HRElBTAotIkNYIiwKLSIgIENvbm5lY3Rp b25zIG1hZGUgd2l0aCBTRVQgTElORSwgU0VUIFBPUlQsIFNFVCBIT1NULCBESUFMLCBURUxORVQs IGV0Yy4iLAotIiAgVGhlIGRlZmF1bHQgZmlsZW5hbWUgaXMgQ1guTE9HIGluIHlvdXIgaG9tZSBk aXJlY3RvcnkgYW5kIEFQUEVORCBpcyB0aGUiLAotIiAgZGVmYXVsdCBtb2RlIGZvciBvcGVuaW5n LiIsCi0iICIsCi0jZW5kaWYgLyogQ0tMT0dESUFMICovCi0jaWZkZWYgREVCVUcKLSJERUJVRyIs Ci0iICBEZWJ1Z2dpbmcgaW5mb3JtYXRpb24sIHRvIGhlbHAgdHJhY2sgZG93biBidWdzIGluIHRo ZSBDLUtlcm1pdCBwcm9ncmFtLiIsCi0iICBUaGUgZGVmYXVsdCBsb2cgbmFtZSBpcyBkZWJ1Zy5s b2cgaW4gY3VycmVudCBkaXJlY3RvcnkuIiwKLSIgIiwKLSNlbmRpZiAvKiBERUJVRyAqLwotIlBB Q0tFVFMiLAotIiAgS2VybWl0IHBhY2tldHMsIHRvIGhlbHAgd2l0aCBwcm90b2NvbCBwcm9ibGVt cy4gIFRoZSBkZWZhdWx0IGZpbGVuYW1lIGlzIiwKLSIgIHBhY2tldC5sb2cgaW4gY3VycmVudCBk aXJlY3RvcnkuIiwKLSIgIiwKLSNpZm5kZWYgTk9MT0NBTAotIlNFU1NJT04iLAotIiAgUmVjb3Jk cyB5b3VyIENPTk5FQ1Qgc2Vzc2lvbiAoZGVmYXVsdDogc2Vzc2lvbi5sb2cgaW4gY3VycmVudCBk aXJlY3RvcnkpLiIsCi0iICIsCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2lmZGVmIFRMT0cKLSJU UkFOU0FDVElPTlMiLAotIiAgTmFtZXMgYW5kIHN0YXRpc3RpY3MgYWJvdXQgZmlsZXMgdHJhbnNm ZXJyZWQgKGRlZmF1bHQ6IHRyYW5zYWN0LmxvZyBpbiIsCi0iICBjdXJyZW50IGRpcmVjdG9yeTsg c2VlIEhFTFAgU0VUIFRSQU5TQUNUSU9OLUxPRyBmb3IgdHJhbnNhY3Rpb24tbG9nIGZvcm1hdCIs Ci0iICBvcHRpb25zLikiLAotIiAiLAotI2VuZGlmIC8qIFRMT0cgKi8KLSJJZiB5b3UgaW5jbHVk ZSB0aGUgQVBQRU5EIGtleXdvcmQgYWZ0ZXIgdGhlIGZpbGVuYW1lLCB0aGUgZXhpc3RpbmcgbG9n IGZpbGUsIiwKLSJpZiBhbnksIGlzIGFwcGVuZGVkIHRvOyBvdGhlcndpc2UgYSBuZXcgZmlsZSBp cyBjcmVhdGVkIChleGNlcHQgQVBQRU5EIGlzIiwKLSJ0aGUgZGVmYXVsdCBmb3IgdGhlIGNvbm5l Y3Rpb24gbG9nKS4gIFVzZSBDTE9TRSA8a2V5d29yZD4gdG8gc3RvcCBsb2dnaW5nLiIsCi0jaWZk ZWYgT1MyT1JVTklYCi0iICIsCi0iTm90ZTogVGhlIGZpbGVuYW1lIGNhbiBhbHNvIGJlIGEgcGlw ZSwgZS5nLjoiLAotIiAiLAotIiAgbG9nIHRyYW5zYWN0aW9ucyB8bHByIiwKLSIgIGxvZyBkZWJ1 ZyB7fCBncmVwIFwiXlRFTE5FVFwiID4gZGVidWcubG9nfSIsCi0iICIsCi0iQnJhY2VzIGFyZSBy ZXF1aXJlZCBpZiB0aGUgcGlwZWxpbmUgb3IgZmlsZW5hbWUgY29udGFpbnMgc3BhY2VzLiIsCi0j ZW5kaWYgLyogT1MyT1JVTklYICovCi0iIiB9OwotCi0jaWZuZGVmIE5PU0NSSVBUCi1zdGF0aWMg Y2hhciAqaG14eGxvZ2lbXSA9IHsgIlwKLVN5bnRheDogU0NSSVBUIHRleHQiLAotIiAgQSBsaW1p dGVkIGFuZCBjcnlwdGljIFwibG9naW4gYXNzaXN0YW50XCIsIGNhcnJpZWQgb3ZlciBmcm9tIG9s ZCBDLUtlcm1pdCIsCi0iICByZWxlYXNlcyBmb3IgY29tcHRhYmlsaXR5LCBidXQgbm90IHJlY29t bWVuZGVkIGZvciB1c2UuICBJbnN0ZWFkLCBwbGVhc2UiLAotIiAgdXNlIHRoZSBmdWxsIHNjcmlw dCBwcm9ncmFtbWluZyBsYW5ndWFnZSBkZXNjcmliZWQgaW4gY2hhcHRlcnMgMTctMTkgb2YiLAot IiAgXCJVc2luZyBDLUtlcm1pdFwiLiIsCi0iICIsCi0iICBMb2dpbiB0byBhIHJlbW90ZSBzeXN0 ZW0gdXNpbmcgdGhlIHRleHQgcHJvdmlkZWQuICBUaGUgbG9naW4gc2NyaXB0IiwKLSIgIGlzIGlu dGVuZGVkIHRvIG9wZXJhdGUgc2ltaWxhcmx5IHRvIFVOSVggdXVjcCBcIkwuc3lzXCIgZW50cmll cy4iLAotIiAgQSBsb2dpbiBzY3JpcHQgaXMgYSBzZXF1ZW5jZSBvZiB0aGUgZm9ybToiLAotIiAi LAotIiAgICBleHBlY3Qgc2VuZCBbZXhwZWN0IHNlbmRdIC4gLiAuIiwKLSIgIiwKLSIgIHdoZXJl ICdleHBlY3QnIGlzIGEgcHJvbXB0IG9yIG1lc3NhZ2UgdG8gYmUgaXNzdWVkIGJ5IHRoZSByZW1v dGUgc2l0ZSwgYW5kIiwKLSIgICdzZW5kJyBpcyB0aGUgbmFtZXMsIG51bWJlcnMsIGV0YywgdG8g cmV0dXJuLiAgVGhlIHNlbmQgbWF5IGFsc28gYmUgdGhlIiwKLSIgIGtleXdvcmQgRU9UIHRvIHNl bmQgQ29udHJvbC1ELCBvciBCUkVBSyAob3IgXFxcXGIpIHRvIHNlbmQgYSBicmVhayBzaWduYWwu IiwKLSIgIExldHRlcnMgaW4gc2VuZCBtYXkgYmUgcHJlZml4ZWQgYnkgfiB0byBzZW5kIHNwZWNp YWwgY2hhcmFjdGVyczoiLAotIiAiLAotIiAgfmIgYmFja3NwYWNlLCB+cyBzcGFjZSwgfnEgJz8n LCB+biBsaW5lZmVlZCwgfnIgcmV0dXJuLCB+YyBkb25cJ3QiLAotIiAgYXBwZW5kIGEgcmV0dXJu LCBhbmQgfm9bb1tvXV0gZm9yIG9jdGFsIG9mIGEgY2hhcmFjdGVyLiAgQXMgd2l0aCBzb21lIiwK LSIgIFVVQ1Agc3lzdGVtcywgc2VudCBzdHJpbmdzIGFyZSBmb2xsb3dlZCBieSB+ciB1bmxlc3Mg dGhleSBlbmQgd2l0aCB+Yy4iLAotIiAiLAotIiAgT25seSB0aGUgbGFzdCA3IGNoYXJhY3RlcnMg aW4gZWFjaCBleHBlY3QgYXJlIG1hdGNoZWQuICBBIG51bGwgZXhwZWN0LCIsCi0iICBlLmcuIH4w IG9yIHR3byBhZGphY2VudCBkYXNoZXMsIGNhdXNlcyBhIHNob3J0IGRlbGF5LiAgSWYgeW91IGV4 cGVjdCIsCi0iICB0aGF0IGEgc2VxdWVuY2UgbWlnaHQgbm90IGFycml2ZSwgYXMgd2l0aCB1dWNw LCBjb25kaXRpb25hbCBzZXF1ZW5jZXMiLAotIiAgbWF5IGJlIGV4cHJlc3NlZCBpbiB0aGUgZm9y bToiLAotIiAiLAotIiAgICAtc2VuZC1leHBlY3RbLXNlbmQtZXhwZWN0Wy4uLl1dIiwKLSIgIiwK LSIgIHdoZXJlIGRhc2hlZCBzZXF1ZW5jZXMgYXJlIGZvbGxvd2VkIGFzIGxvbmcgYXMgcHJldmlv dXMgZXhwZWN0cyBmYWlsLiIsCi0iIiB9OwotI2VuZGlmIC8qIE5PU0NSSVBUICovCi0KLSNpZm5k ZWYgTk9GUklMTFMKLXN0YXRpYyBjaGFyICogaG14eHR5cFtdID0gewotIlN5bnRheDogVFlQRSBb IHN3aXRjaGVzLi4uIF0gZmlsZSIsCi0iICBEaXNwbGF5cyBhIGZpbGUgb24gdGhlIHNjcmVlbi4g IFBhdXNlcyBhdXRvbWF0aWNhbGx5IGF0IGVuZCBvZiBlYWNoIiwKLSIgIHNjcmVlbmZ1bCBpZiBD T01NQU5EIE1PUkUtUFJPTVBUSU5HIGlzIE9OLiAgT3B0aW9uYWwgc3dpdGNoZXM6IiwKLSIgIiwK LSIgIC9QQUdFIiwKLSIgICAgIFBhdXNlIGF0IHRoZSBlbmQgb2YgZWFjaCBzY3JlZW5mdWwgZXZl biBpZiBDT01NQU5EIE1PUkUtUFJPTVBUSU5HIE9GRi4iLAotIiAgICAgU3lub255bTogL01PUkUi LAotIiAgL05PUEFHRSIsCi0iICAgICBEb24ndCBwYXVzZSBhdCB0aGUgZW5kIG9mIGVhY2ggc2Ny ZWVuIGV2ZW4gaWYgQ09NTUFORCBNT1JFLVBST01QVElORyBPTi4iCi0sCi0iICAvSEVBRDpuIiwK LSIgICAgIE9ubHkgdHlwZSB0aGUgZmlyc3QgJ24nIGxpbmVzIG9mIHRoZSBmaWxlLiIsCi0iICAv VEFJTDpuIiwKLSIgICAgIE9ubHkgdHlwZSB0aGUgbGFzdCAnbicgbGluZXMgb2YgdGhlIGZpbGUu IiwKLSIgIC9NQVRDSDpwYXR0ZXJuIiwKLSIgICAgIE9ubHkgdHlwZSBsaW5lcyB0aGF0IG1hdGNo IHRoZSBnaXZlbiBwYXR0ZXJuLiAgSEVMUCBXSUxEQ0FSRFMgZm9yIGluZm8iLAotIiAgICAgaW5m byBhYm91dCBwYXR0ZXJucy4gIC9IRUFEIGFuZCAvVEFJTCBhcHBseSBhZnRlciAvTUFUQ0guIiwK LSIgIC9QUkVGSVg6c3RyaW5nIiwKLSIgICAgIFByaW50IHRoZSBnaXZlbiBzdHJpbmcgYXQgdGhl IGJlZ2lubmluZyBvZiBlYWNoIGxpbmUuIiwKLSIgIC9OVU1CRVIiLAotIiAgICAgQWRkIGxpbmUg bnVtYmVycyAoY29uZmxpY3RzIHdpdGggL1BSRUZJWCkiLAotIiAgL1dJRFRIOm51bWJlciIsCi0i ICAgICBUcnVuY2F0ZSBlYWNoIGxpbmUgYXQgdGhlIGdpdmVuIGNvbHVtbiBudW1iZXIgYmVmb3Jl IHByaW50aW5nLiIsCi0jaWZkZWYgS1VJCi0iICAgICBPciB3aGVuIGNvbWJpbmVkIHdpdGggL0dV SSBzcGVjaWZpZXMgdGhlIHdpZHRoIG9mIHRoZSBkaWFsb2cgYm94LiIsCi0iICAvSEVJR0hUOm51 bWJlciIsCi0iICAgICBXaGVuIGNvbWJpbmVkIHdpdGggL0dVSSBzcGVjaWZpZXMgdGhlIGhlaWdo dCBvZiB0aGUgZGlhbG9nIGJveC4iLAotIiAgL0dVSTpzdHJpbmciLAotIiAgICAgU3BlY2lmaWVz IHRoZSB0aXRsZSB0byB1c2UgZm9yIHRoZSBkaWFsb2cgYm94LiIsCi0jZW5kaWYgLyogS1VJICov Ci0iICAvQ09VTlQiLAotIiAgICAgQ291bnQgbGluZXMgKGFuZCBtYXRjaGVzKSBhbmQgcHJpbnQg dGhlIGNvdW50KHMpIGJ1dCBub3QgdGhlIGxpbmVzLiIsCi0jaWZkZWYgVU5JQ09ERQotIiAgL0NI QVJBQ1RFUi1TRVQ6bmFtZSIsCi0iICAgICBUcmFuc2xhdGVzIGZyb20gdGhlIG5hbWVkIGNoYXJh Y3RlciBzZXQuIiwKLSNpZm5kZWYgT1MyCi0iICAvVFJBTlNMQVRFLVRPOm5hbWUiLAotIiAgICAg VHJhbnNsYXRlcyB0byB0aGUgbmFtZWQgY2hhcmFjdGVyIHNldCAoZGVmYXVsdCA9IGN1cnJlbnQg ZmlsZSBjaGFyc2V0KS4iLAotI2VuZGlmIC8qIE9TMiAqLwotIiAgL1RSQU5TUEFSRU5UIiwKLSIg ICAgIEluaGliaXRzIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24uIiwKLSNlbmRpZiAvKiBVTklD T0RFICovCi0iICAvT1VUUFVUOm5hbWUiLAotIiAgICAgU2VuZHMgcmVzdWx0cyB0byB0aGUgZ2l2 ZW4gZmlsZS4gIElmIHRoaXMgc3dpdGNoIGlzIG9taXR0ZWQsIHRoZSIsCi0iICAgICByZXN1bHRz IGFwcGVhciBvbiB5b3VyIHNjcmVlbi4gIFRoaXMgc3dpdGNoIG92ZXJyaWRlcyBhbnkgZXhwcmVz cyBvciIsCi0iICAgICBpbXBsaWVkIC9QQUdFIHN3aXRjaC4iLAotIiAiLAotIllvdSBjYW4gdXNl IFNFVCBPUFRJT05TIFRZUEUgdG8gc2V0IHRoZSBkZWZhdWx0cyBmb3IgL1BBR0Ugb3IgL05PUEFH RSBhbmQiLAotIi9XSURUSC4gIFVzZSBTSE9XIE9QVElPTlMgdG8gc2VlIGN1cnJlbnQgVFlQRSBv cHRpb25zLiIsCi0iIgotfTsKLQotc3RhdGljIGNoYXIgKiBobXh4Y2xlW10gPSB7Ci0iU3ludGF4 OiBDTEVBUiBbIGl0ZW0tbmFtZSBdIiwKLSIgIiwKLSJDbGVhcnMgdGhlIG5hbWVkIGl0ZW0uICBJ ZiBubyBpdGVtIGlzIG5hbWVkLCBERVZJQ0UtQU5ELUlOUFVUIGlzIGFzc3VtZWQuIiwKLSIgIiwK LSIgIEFMQVJNICAgICAgICAgICAgQ2xlYXJzIGFueSBwZW5kaW5nIGFsYXJtIChzZWUgU0VUIEFM QVJNKS4iLAotI2lmZGVmIENLX0FQQwotIiAgQVBDLVNUQVRVUyAgICAgICBDbGVhcnMgQXBwbGlj YXRpb24gUHJvZ3JhbSBDb21tYW5kIHN0YXR1cy4iLAotI2VuZGlmIC8qIENLX0FQQyAqLwotI2lm ZGVmIFBBVFRFUk5TCi0iICBCSU5BUlktUEFUVEVSTlMgIENsZWFycyB0aGUgZmlsZSBiaW5hcnkt cGF0dGVybnMgbGlzdC4iLAotI2VuZGlmIC8qIFBBVFRFUk5TICovCi0jaWZkZWYgT1MyCi0iICBD T01NQU5ELVNDUkVFTiAgIENsZWFycyB0aGUgY3VycmVudCBjb21tYW5kIHNjcmVlbi4iLAotI2Vu ZGlmIC8qIE9TMiAqLwotIiAgREVWSUNFICAgICAgICAgICBDbGVhcnMgdGhlIGN1cnJlbnQgcG9y dCBvciBuZXR3b3JrIGlucHV0IGJ1ZmZlci4iLAotIiAgREVWSUNFLUFORC1JTlBVVCBDbGVhcnMg Ym90aCB0aGUgZGV2aWNlIGFuZCB0aGUgSU5QVVQgYnVmZmVyLiIsCi0iICBESUFMLVNUQVRVUyAg ICAgIENsZWFycyB0aGUgXFx2KGRpYWxzdGF0dXMpIHZhcmlhYmxlLiIsCi0iICBcCi1JTlBVVCAg ICAgICAgICAgIENsZWFycyB0aGUgSU5QVVQtY29tbWFuZCBidWZmZXIgYW5kIHRoZSBcXHYoaW5w dXQpIHZhcmlhYmxlLiIsCi0iICBLRVlCT0FSRC1CVUZGRVIgIENsZWFycyB0aGUgY29tbWFuZCB0 ZXJtaW5hbCBrZXlib2FyZCBpbnB1dCBidWZmZXIuIiwKLSNpZmRlZiBPUzIKLSIgIFwKLVNDUk9M TEJBQ0sgICAgICAgZW1wdGllcyB0aGUgc2Nyb2xsYmFjayBidWZmZXIgaW5jbHVkaW5nIHRoZSBj dXJyZW50IHNjcmVlbi4iLAotI2VuZGlmIC8qIE9TMiAqLwotIiAgU0VORC1MSVNUICAgICAgICBD bGVhcnMgdGhlIGN1cnJlbnQgU0VORCBsaXN0IChzZWUgQUREKS4iLAotI2lmZGVmIE9TMgotIiAg XAotVEVSTUlOQUwtU0NSRUVOICBDbGVhcnMgdGhlIGN1cnJlbnQgc2NyZWVuIGEgcGxhY2VzIGl0 IGludG8gdGhlIHNjcm9sbGJhY2suIiwKLSIgICAgYnVmZmVyLiIsCi0jZW5kaWYgLyogT1MyICov Ci0jaWZkZWYgUEFUVEVSTlMKLSIgIFRFWFQtUEFUVEVSTlMgICAgQ2xlYXJzIHRoZSBmaWxlIHRl eHQtcGF0dGVybnMgbGlzdC4iLAotI2VuZGlmIC8qIFBBVFRFUk5TICovCi0iIn07Ci0jZW5kaWYg LyogTk9GUklMTFMgKi8KLQotc3RhdGljIGNoYXIgKiBobXh4ZGF0ZVtdID0gewotIlN5bnRheDog REFURSBbIGRhdGUtdGltZSBbIHRpbWV6b25lIF0gXSBbIGRlbHRhLXRpbWUgXSIsCi0iICBQcmlu dHMgYSBkYXRlLXRpbWUgaW4gc3RhbmRhcmQgZm9ybWF0OiB5eXl5bW1kZF9oaDptbTpzcy4iLAot IiAgVmFyaW91cyBkYXRlLXRpbWUgZm9ybWF0cyBhcmUgYWNjZXB0ZWQ6IiwKLSIgIiwKLSIgIC4g VGhlIGRhdGUsIGlmIGdpdmVuLCBtdXN0IHByZWNlZGUgdGhlIHRpbWUuIiwKLSIgIC4gVGhlIHll YXIgbXVzdCBiZSBmb3VyIGRpZ2l0cyBvciBlbHNlIGEgMi1kaWdpdCBmb3JtYXQgZGQgbW1tIHl5 LCIsCi0iICAgIGluIHdoaWNoIGNhc2UgaWYgKHl5IDwgNTApIHl5eXkgPSB5eSArIDIwMDA7IGVs c2UgeXl5eSA9IHl5ICsgMTkwMC4iLAotIiAgLiBJZiB0aGUgeWVhciBjb21lcyBmaXJzdCwgdGhl IHNlY29uZCBmaWVsZCBpcyB0aGUgbW9udGguIiwKLSIgIC4gVGhlIGRheSwgbW9udGgsIGFuZCB5 ZWFyIG1heSBiZSBzZXBhcmF0ZWQgYnkgc3BhY2VzLCAvLCAtLCBvciB1bmRlcnNjb3JlLiIKLSwi ICAuIFRoZSBkYXRlIGFuZCB0aW1lIG1heSBiZSBzZXBhcmF0ZWQgYnkgc3BhY2VzIG9yIHVuZGVy c2NvcmUuIiwKLSIgIC4gVGhlIG1vbnRoIG1heSBiZSBudW1lcmljICgxID0gSmFudWFyeSkgb3Ig c3BlbGxlZCBvdXQgb3IgYWJicmV2aWF0ZWQgaW4iLAotIiAgICBFbmdsaXNoLiIsCi0iICAuIFRo ZSB0aW1lIG1heSBiZSBpbiAyNC1ob3VyIGZvcm1hdCBvciAxMi1ob3VyIGZvcm1hdC4iLAotIiAg LiBJZiB0aGUgaG91ciBpcyAxMiBvciBsZXNzLCBBTSBpcyBhc3N1bWVkIHVubGVzcyBBTSBvciBQ TSBpcyBpbmNsdWRlZC4iLAotIiAgLiBJZiB0aGUgZGF0ZSBpcyBvbWl0dGVkIGJ1dCBhIHRpbWUg aXMgZ2l2ZW4sIHRoZSBjdXJyZW50IGRhdGUgaXMgc3VwcGxpZWQuIgotLAotIiAgLiBJZiB0aGUg dGltZSBpcyBnaXZlbiBidXQgZGF0ZSBvbWl0dGVkLCAwMDowMDowMCBpcyBzdXBwbGllZC4iLAot IiAgLiBJZiBib3RoIHRoZSBkYXRlIGFuZCB0aW1lIGFyZSBvbWl0dGVkLCB0aGUgY3VycmVudCBk YXRlIGFuZCB0aW1lIGFyZSIsCi0iICAgIHN1cHBsaWVkLiIsCi0iICIsCi0iICBUaGUgZm9sbG93 aW5nIHNob3J0Y3V0cyBjYW4gYWxzbyBiZSB1c2VkIGluIHBsYWNlIG9mIGRhdGVzOiIsCi0iICIs Ci0iICBOT1ciLAotIiAgICBTdGFuZHMgZm9yIHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUuIiwK LSIgIiwKLSIgIFRPREFZIiwKLSIgICAgVG9kYXkncyBkYXRlLCBvcHRpb25hbGx5IGZvbGxvd2Vk IGJ5IGEgdGltZTsgMDA6MDA6MDAgaWYgbm8gdGltZSBnaXZlbi4iLAotIiAiLAotIiAgWUVTVEVS REFZIiwKLSIgICAgWWVzdGVyZGF5J3MgZGF0ZSwgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhIHRp bWUgKGRlZmF1bHQgMDA6MDA6MDApLiIsCi0iICIsCi0iICBUT01PUlJPVyIsCi0iICAgIFRvbW9y cm93cydzIGRhdGUsIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYSB0aW1lIChkZWZhdWx0IDAwOjAw OjAwKS4iLAotIiAiLAotIiAgVGltZXpvbmUgc3BlY2lmaWNhdGlvbnMgYXJlIHNpbWlsYXIgdG8g dGhvc2UgdXNlZCBpbiBlLW1haWwgYW5kIEhUVFAiLAotIiAgICBoZWFkZXJzLCBlaXRoZXIgYSBV U0EgdGltZXpvbmUgbmFtZSwgZS5nLiBFU1QsIG9yIGEgc2lnbmVkIGZvdXItZGlnaXQiLAotIiAg ICB0aW1lem9uZSBvZmZzZXQsIHsrLC19aGhtbSwgZS5nLiwgLTA1MDA7IGl0IGlzIHVzZWQgdG8g Y29udmVydCBkYXRlLXRpbWUsIgotLAotIiAgICBhIGxvY2FsIHRpbWUgaW4gdGhhdCB0aW1lem9u ZSwgdG8gR01UIHdoaWNoIGlzIHRoZW4gY29udmVydGVkIHRvIHRoZSIsCi0iICAgIGxvY2FsIHRp bWUgYXQgdGhlIGhvc3QuICBJZiBubyB0aW1lem9uZSBpcyBnaXZlbiwgdGhlIGRhdGUtdGltZSBp cyBsb2NhbC4iCi0sIiAgICBUbyBjb252ZXJ0IGxvY2FsIHRpbWUgKG9yIGEgdGltZSBpbiBhIHNw ZWNpZmllZCB0aW1lem9uZSkgdG8gVVRDIChHTVQpLCIsCi0iICAgIHVzZSB0aGUgZnVuY3Rpb24g XGZ1dGNkYXRlKCkuIiwKLSIgIiwKLSIgIERlbHRhIHRpbWVzIGFyZSBnaXZlbiBhcyB7KywtfVtu dW1iZXIgZGF0ZS11bml0c11baGhbOm1tWzpzc11dXSIsCi0iICAgIEEgZGF0ZSBpbiB0aGUgZnV0 dXJlL3Bhc3QgcmVsYXRpdmUgdG8gdGhlIGRhdGUtdGltZTsgZGF0ZS11bml0cyBtYXkgYmUiLAot IiAgICBEQVlTLCBXRUVLUywgTU9OVEhTLCBZRUFSUzogKzNkYXlzLCAtN3dlZWtzLCArMzowMCwg KzFtb250aCA4OjAwLiIsCi0iICIsCi0iQWxsIHRoZSBmb3JtYXRzIHNob3duIGFib3ZlIGFyZSBh Y2NlcHRhYmxlIGFzIGFyZ3VtZW50cyB0byBkYXRlLXRpbWUgc3dpdGNoZXMiCi0sCi0ic3VjaCBh cyAvQUZURVI6IG9yIC9CRUZPUkU6LCBhbmQgdG8gZnVuY3Rpb25zIHN1Y2ggYXMgXFxmY3Z0ZGF0 ZSgpLCIsCi0iXFxmZGlmZmRhdGUoKSwgYW5kIFxcZnV0Y2RhdGUoKSwgdGhhdCB0YWtlIGRhdGUt dGltZSBzdHJpbmdzIGFzIGFyZ3VtZW50cy4iLAotIiIKLX07Ci0KLQotI2lmbmRlZiBOT1hGRVIK LXN0YXRpYyBjaGFyICogaG14eHNlbltdID0gewotIlN5bnRheDogU0VORCAob3IgUykgWyBzd2l0 Y2hlcy4uLl0gWyBmaWxlc3BlYyBbIGFzLW5hbWUgXSBdIiwKLSIgIFNlbmRzIHRoZSBmaWxlIG9y IGZpbGVzIHNwZWNpZmllZCBieSBmaWxlc3BlYy4gIElmIHRoZSBmaWxlc3BlYyBpcyBvbWl0dGVk IiwKLSIgIHRoZSBTRU5ELUxJU1QgaXMgdXNlZCAoSEVMUCBBREQgZm9yIG1vcmUgaW5mbykuICBU aGUgZmlsZXNwZWMgbWF5IGNvbnRhaW4iLAotIiAgd2lsZGNhcmQgY2hhcmFjdGVycy4gIEFuICdh cy1uYW1lJyBtYXkgYmUgZ2l2ZW4gdG8gc3BlY2lmeSB0aGUgbmFtZShzKSIsCi0iICB0aGUgZmls ZXMocykgYXJlIHNlbnQgdW5kZXI7IGlmIHRoZSBhcy1uYW1lIGlzIG9taXR0ZWQsIGVhY2ggZmls ZSBpcyIsCi0iICBzZW50IHVuZGVyIGl0cyBvd24gbmFtZS4gIEFsc28gc2VlIEhFTFAgTVNFTkQs IEhFTFAgV0lMRENBUkQuIiwKLSIgIE9wdGlvbmFsIHN3aXRjaGVzIGluY2x1ZGU6IiwKLSIgIiwK LSNpZm5kZWYgTk9TUEwKLSIvQVJSQVk6PGFycmF5bmFtZT4iLAotIiAgU3BlY2lmaWVzIHRoYXQg dGhlIGRhdGEgdG8gYmUgc2VudCBjb21lcyBmcm9tIHRoZSBnaXZlbiBhcnJheSwgc3VjaCBhcyIs Ci0iICBcXCZhW10uICBBIHJhbmdlIG1heSBiZSBzcGVjaWZpZWQsIGUuZy4gU0VORCAvQVJSQVk6 JmFbMTAwOjE5OV0uICBMZWF2ZSIsCi0iICB0aGUgYnJhY2tldHMgZW1wdHkgb3Igb21pdCB0aGVt IGFsdG9nZXRoZXIgdG8gc2VuZCB0aGUgd2hvbGUgMS1iYXNlZCBhcnJheS4iCi0sCi0iICBJbmNs dWRlIC9URVhUIHRvIGhhdmUgS2VybWl0IHN1cHBseSBhIGxpbmUgdGVybWluYXRvciBhdCB0aGUg ZW5kIG9mIGVhY2giLAotIiAgYXJyYXkgZWxlbWVudCAoYW5kIHRyYW5zbGF0ZSBjaGFyYWN0ZXIg c2V0cyBpZiBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9ucyIsCi0iICBhcmUgc2V0IHVwKSwgb3Ig L0JJTkFSWSB0byB0cmVhdCB0aGUgYXJyYXkgYXMgb25lIGxvbmcgc3RyaW5nIG9mIGNoYXJhY3Rl cnMiCi0sCi0iICB0byBiZSBzZW50IGFzLWlzLiAgSWYgYW4gYXMtbmFtZSBpcyBub3Qgc3BlY2lm aWVkLCB0aGUgYXJyYXkgaXMgc2VudCB3aXRoIiwKLSIgIHRoZSBuYW1lIF9BUlJBWV9YXywgd2hl cmUgXCJYXCIgaXMgcmVwbGFjZWQgYnkgYWN0dWFsIGFycmF5IGxldHRlci4iLAotIiAiLAotI2Vu ZGlmIC8qIE5PU1BMICovCi0KLSIvQVMtTkFNRTo8dGV4dD4iLAotIiAgU3BlY2lmaWVzIDx0ZXh0 PiBhcyB0aGUgbmFtZSB0byBzZW5kIHRoZSBmaWxlIHVuZGVyIGluc3RlYWQgb2YgaXRzIHJlYWwi LAotIiAgbmFtZS4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byBnaXZpbmcgYW4gYXMtbmFtZSBhZnRl ciB0aGUgZmlsZXNwZWMuIiwKLSIgIiwKLSIvQklOQVJZIiwKLSIgIFBlcmZvcm1zIHRoaXMgdHJh bnNmZXIgaW4gYmluYXJ5IG1vZGUgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGdsb2JhbCIsCi0iICB0 cmFuc2ZlciBtb2RlLiIsCi0iICIsCi0iL1RFWFQiLAotIiAgUGVyZm9ybXMgdGhpcyB0cmFuc2Zl ciBpbiB0ZXh0IG1vZGUgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGdsb2JhbCIsCi0iICB0cmFuc2Zl ciBtb2RlLiIsCi0iICIsCi0iL1RSQU5TUEFSRU5UIiwKLSIgIEluaGliaXRzIGNoYXJhY3Rlci1z ZXQgdHJhbnNsYXRpb24gZm9yIHRleHQgZmlsZXMgZm9yIHRoZSBkdXJhdGlvbiBvZiIsCi0iICB0 aGUgU0VORCBjb21tYW5kIHdpdGhvdXQgYWZmZWN0aW5nIHN1YnNlcXVlbnQgY29tbWFuZHMuIiwK LSIgIiwKLSIvTk9CQUNLVVBGSUxFUyIsCi0iICBTa2lwIChkb24ndCBzZW5kKSBLZXJtaXQgb3Ig RU1BQ1MgYmFja3VwIGZpbGVzIChmaWxlcyB3aXRoIG5hbWVzIHRoYXQiLAotIiAgZW5kIHdpdGgg Ln5ufiwgd2hlcmUgbiBpcyBhIG51bWJlcikuIiwKLSIgIiwKLSNpZmRlZiBVTklYT1JPU0sKLSIv RE9URklMRVMiLAotIiAgSW5jbHVkZSAoc2VuZCkgZmlsZXMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0 aCBcIi5cIi4iLAotIiAiLAotIi9OT0RPVEZJTEVTIiwKLSIgIERvbid0IHNlbmQgZmlsZXMgd2hv c2UgbmFtZXMgYmVnaW4gd2l0aCBcIi5cIi4iLAotIiAiLAotIi9GT0xMT1dMSU5LUyIsCi0iICBT ZW5kIGZpbGVzIHRoYXQgYXJlIHBvaW50ZWQgdG8gYnkgc3ltYm9saWMgbGlua3MuIiwKLSIgIiwK LSIvTk9GT0xMT1dMSU5LUyIsCi0iICBTa2lwIG92ZXIgc3ltYm9saWMgbGlua3MgKGRlZmF1bHQp LiIsCi0iICIsCi0jZW5kaWYgLyogVU5JWE9ST1NLICovCi0KLSNpZmRlZiBWTVMKLSIvSU1BR0Ui LAotIiAgUGVyZm9ybXMgdGhpcyB0cmFuc2ZlciBpbiBpbWFnZSBtb2RlIHdpdGhvdXQgYWZmZWN0 aW5nIHRoZSBnbG9iYWwiLAotIiAgdHJhbnNmZXIgbW9kZS4iLAotIiAiLAotI2VuZGlmIC8qIFZN UyAqLwotI2lmZGVmIENLX0xBQkVMRUQKLSIvTEFCRUxFRCIsCi0iICBQZXJmb3JtcyB0aGlzIHRy YW5zZmVyIGluIGxhYmVsZWQgbW9kZSB3aXRob3V0IGFmZmVjdGluZyB0aGUgZ2xvYmFsIiwKLSIg IHRyYW5zZmVyIG1vZGUuIiwKLSIgIiwKLSNlbmRpZiAvKiBDS19MQUJFTEVEICovCi0iL0NPTU1B TkQiLAotIiAgU2VuZHMgdGhlIG91dHB1dCBmcm9tIGEgY29tbWFuZCwgcmF0aGVyIHRoYW4gdGhl IGNvbnRlbnRzIG9mIGEgZmlsZS4iLAotIiAgVGhlIGZpcnN0IFwiZmlsZW5hbWVcIiBvbiB0aGUg U0VORCBjb21tYW5kIGxpbmUgaXMgaW50ZXJwcmV0ZWQgYXMgdGhlIG5hbWUiLAotIiAgb2YgYSBj b21tYW5kOyB0aGUgc2Vjb25kIChpZiBhbnkpIGlzIHRoZSBhcy1uYW1lLiIsCi0iICIsCi0iL0ZJ TEVOQU1FUzp7Q09OVkVSVEVELExJVEVSQUx9IiwKLSIgIE92ZXJyaWRlcyB0aGUgZ2xvYmFsIFNF VCBGSUxFIE5BTUVTIHNldHRpbmcgZm9yIHRoaXMgdHJhbnNmZXIgb25seS4iLAotIiAiLAotIi9Q QVRITkFNRVM6e09GRixBQlNPTFVURSxSRUxBVElWRX0iLAotIiAgT3ZlcnJpZGVzIHRoZSBnbG9i YWwgU0VUIFNFTkQgUEFUSE5BTUVTIHNldHRpbmcgZm9yIHRoaXMgdHJhbnNmZXIuIiwKLSIgIiwK LSIvRklMVEVSOmNvbW1hbmQiLAotIiAgU3BlY2lmaWVzIGEgY29tbWFuZCBcCi0oc3RhbmRhcmQg aW5wdXQvb3V0cHV0IGZpbHRlcikgdG8gcGFzcyB0aGUgZmlsZSB0aHJvdWdoIiwKLSIgIGJlZm9y ZSBzZW5kaW5nIGl0LiIsCi0iICIsCi0iL0RFTEVURSIsCi0iICBEZWxldGVzIHRoZSBmaWxlIChv ciBlYWNoIGZpbGUgaW4gdGhlIGdyb3VwKSBhZnRlciBpdCBoYXMgYmVlbiBzZW50IiwKLSIgIHN1 Y2Nlc3NmdWxseSAoYXBwbGllcyBvbmx5IHRvIHJlYWwgZmlsZXMpLiIsCi0iICIsCi0iL1FVSUVU IiwKLSIgIFdoZW4gc2VuZGluZyBpbiBsb2NhbCBtb2RlLCB0aGlzIHN1cHByZXNzZXMgdGhlIGZp bGUtdHJhbnNmZXIgZGlzcGxheS4iLAotIiAiLAotIi9SRUNPVkVSIiwKLSIgIFVzZWQgdG8gcmVj b3ZlciBmcm9tIGEgcHJldmlvdXNseSBpbnRlcnJ1cHRlZCB0cmFuc2ZlcjsgU0VORCAvUkVDT1ZF UiIsCi0iICBpcyBlcXVpdmFsZW50IFJFU0VORCAodXNlIGluIGJpbmFyeSBtb2RlIG9ubHkpLiIs Ci0iICIsCi0iL1JFQ1VSU0lWRSIsCi0iICBUZWxscyBDLUtlcm1pdCB0byBsb29rIG5vdCBvbmx5 IGluIHRoZSBnaXZlbiBvciBjdXJyZW50IGRpcmVjdG9yeSBmb3IiLAotIiAgZmlsZXMgdGhhdCBt YXRjaCB0aGUgZmlsZXNwZWMsIGJ1dCBhbHNvIGluIGFsbCBpdHMgc3ViZGlyZWN0b3JpZXMsIGFu ZCIsCi0iICBhbGwgdGhlaXIgc3ViZGlyZWN0b3JpZXMsIGV0Yy4iLAotIiAiLAotIi9SRU5BTUUt VE86bmFtZSIsCi0iICBUZWxscyBDLUtlcm1pdCB0byByZW5hbWUgZWFjaCBzb3VyY2UgZmlsZSB0 aGF0IGlzIHNlbnQgc3VjY2Vzc2Z1bGx5IHRvIiwKLSIgIHRoZSBnaXZlbiBuYW1lICh1c3VhbGx5 IHlvdSBzaG91bGQgaW5jbHVkZSBcXHYoZmlsZW5hbWUpIGluIHRoZSBuZXcgbmFtZSwiLAotIiAg d2hpY2ggaXMgcmVwbGFjZWQgYnkgdGhlIG9yaWdpbmFsIGZpbGVuYW1lLiIsCi0iICIsCi0iL01P VkUtVE86ZGlyZWN0b3J5IiwKLSIgIFRlbGxzIEMtS2VybWl0IHRvIG1vdmUgZWFjaCBzb3VyY2Ug ZmlsZSB0aGF0IGlzIHNlbnQgc3VjY2Vzc2Z1bGx5IHRvIiwKLSIgIHRoZSBnaXZlbiBkaXJlY3Rv cnkuIiwKLSIgIiwKLSIvU1RBUlRJTkc6bnVtYmVyIiwKLSIgIFN0YXJ0cyBzZW5kaW5nIHRoZSBm aWxlIGZyb20gdGhlIGdpdmVuIGJ5dGUgcG9zaXRpb24uIiwKLSIgIFNFTkQgL1NUQVJUSU5HOm4g ZmlsZW5hbWUgaXMgZXF1aXZhbGVudCB0byBQU0VORCBmaWxlbmFtZSBuLiIsCi0iICIsCi0iL1NV QkpFQ1Q6dGV4dCIsCi0iICBTcGVjaWZpZXMgdGhlIHN1YmplY3Qgb2YgYW4gZW1haWwgbWVzc2Fn ZSwgdG8gYmUgdXNlZCB3aXRoIC9NQUlMLiAgSWYgdGhlIiwKLSIgIHRleHQgY29udGFpbnMgc3Bh Y2VzLCBpdCBtdXN0IGJlIGVuY2xvc2VkIGluIGJyYWNlcy4iLAotIiAiLAotIi9NQUlMOmFkZHJl c3MiLAotIiAgU2VuZHMgdGhlIGZpbGUgYXMgZS1tYWlsIHRvIHRoZSBnaXZlbiBhZGRyZXNzOyB1 c2Ugd2l0aCAvU1VCSkVDVDouIiwKLSIgIiwKLSIvUFJJTlQ6b3B0aW9ucyIsCi0iICBTZW5kcyB0 aGUgZmlsZSB0byBiZSBwcmludGVkLCB3aXRoIG9wdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSBwcmlu dGVyLiIsCi0iICIsCi0jaWZkZWYgQ0tfWFlaCi0iL1BST1RPQ09MOm5hbWUiLAotIiAgVXNlcyB0 aGUgZ2l2ZW4gcHJvdG9jb2wgdG8gc2VuZCB0aGUgZmlsZSAoS2VybWl0LCBabW9kZW0sIGV0Yykg Zm9yIHRoaXMiLAotIiAgdHJhbnNmZXIgd2l0aG91dCBjaGFuZ2luZyBnbG9iYWwgcHJvdG9jb2wu IiwKLSIgIiwKLSNlbmRpZiAvKiBDS19YWVogKi8KLSIvQUZURVI6ZGF0ZS10aW1lIiwKLSNpZmRl ZiBWTVMKLSIgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMgY3JlYXRlZCBhZnRlciB0 aGUgZ2l2ZW4gZGF0ZS10aW1lIGFyZSIsCi0jZWxzZQotIiAgU3BlY2lmaWVzIHRoYXQgb25seSB0 aG9zZSBmaWxlcyBtb2RpZmllZCBhZnRlciB0aGUgZ2l2ZW4gZGF0ZS10aW1lIGFyZSIsCi0jZW5k aWYgLyogVk1TICovCi0iICB0byBiZSBzZW50LiAgSEVMUCBEQVRFIGZvciBpbmZvIGFib3V0IGRh dGUtdGltZSBmb3JtYXRzLiIsCi0iICIsCi0iL0JFRk9SRTpkYXRlLXRpbWUiLAotI2lmZGVmIFZN UwotIiAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBmaWxlcyBtb2RpZmllZCBiZWZvcmUgdGhl IGdpdmVuIGRhdGUtdGltZSIsCi0jZWxzZQotIiAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBm aWxlcyBtb2RpZmllZCBiZWZvcmUgdGhlIGdpdmVuIGRhdGUtdGltZSIsCi0jZW5kaWYgLyogVk1T ICovCi0iICBhcmUgdG8gYmUgc2VudC4iLAotIiAiLAotIi9OT1QtQUZURVI6ZGF0ZS10aW1lIiwK LSNpZmRlZiBWTVMKLSIgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMgbW9kaWZpZWQg YXQgb3IgYmVmb3JlIHRoZSBnaXZlbiBkYXRlLXRpbWUiLAotI2Vsc2UKLSIgIFNwZWNpZmllcyB0 aGF0IG9ubHkgdGhvc2UgZmlsZXMgbW9kaWZpZWQgYXQgb3IgYmVmb3JlIHRoZSBnaXZlbiBkYXRl LXRpbWUiLAotI2VuZGlmIC8qIFZNUyAqLwotIiAgYXJlIHRvIGJlIHNlbnQuIiwKLSIgIiwKLSIv Tk9ULUJFRk9SRTpkYXRlLXRpbWUiLAotI2lmZGVmIFZNUwotIiAgU3BlY2lmaWVzIHRoYXQgb25s eSB0aG9zZSBmaWxlcyBtb2RpZmllZCBhdCBvciBhZnRlciB0aGUgZ2l2ZW4gZGF0ZS10aW1lIiwK LSNlbHNlCi0iICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3NlIGZpbGVzIG1vZGlmaWVkIGF0IG9y IGFmdGVyIHRoZSBnaXZlbiBkYXRlLXRpbWUiLAotI2VuZGlmIC8qIFZNUyAqLwotIiAgYXJlIHRv IGJlIHNlbnQuIiwKLSIgIiwKLSIvTEFSR0VSLVRIQU46bnVtYmVyIiwKLSIgIFNwZWNpZmllcyB0 aGF0IG9ubHkgdGhvc2UgZmlsZXMgbG9uZ2VyIHRoYW4gdGhlIGdpdmVuIG51bWJlciBvZiBieXRl cyBhcmUiLAotIiAgdG8gYmUgc2VudC4iLAotIiAiLAotIi9TTUFMTEVSLVRIQU46bnVtYmVyIiwK LSIgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMgc21hbGxlciB0aGFuIHRoZSBnaXZl biBudW1iZXIgb2YgYnl0ZXMgYXJlIiwKLSIgIHRvIGJlIHNlbnQuIiwKLSIgIiwKLSIvRVhDRVBU OnBhdHRlcm4iLAotIiAgU3BlY2lmaWVzIHRoYXQgYW55IGZpbGVzIHdob3NlIG5hbWVzIG1hdGNo IHRoZSBwYXR0ZXJuLCB3aGljaCBjYW4gYmUgYSIsCi0iICByZWd1bGFyIGZpbGVuYW1lLCBvciBt YXkgY29udGFpbiBcIipcIiBhbmQvb3IgXCI/XCIgbWV0YWNoYXJhY3RlcnMsIiwKLSIgIGFyZSBu b3QgdG8gYmUgc2VudC4gIFRvIHNwZWNpZnkgbXVsdGlwbGUgcGF0dGVybnMgKHVwIHRvIDgpLCB1 c2Ugb3V0ZXIiLAotIiAgYnJhY2VzIGFyb3VuZCB0aGUgZ3JvdXAsIGFuZCBpbm5lciBicmFjZXMg YXJvdW5kIGVhY2ggcGF0dGVybjoiLAotIiAiLAotIiAgICAvRVhDRVBUOnt7cGF0dGVybjF9e3Bh dHRlcm4yfS4uLn0iLAotIiAiLAotIi9UWVBFOntBTEwsVEVYVCxCSU5BUll9IiwKLSIgIFNlbmQg b25seSBmaWxlcyBvZiB0aGUgZ2l2ZW4gdHlwZSAoc2VlIFNFVCBGSUxFIFNDQU4pLiIsCi0iICIs Ci0iL0xJU1RGSUxFOmZpbGVuYW1lIiwKLSIgIFNwZWNpZmllcyB0aGUgbmFtZSBvZiBhIGZpbGUg dGhhdCBjb250YWlucyB0aGUgbGlzdCBvZiBuYW1lcyBvZiBmaWxlcyIsCi0iICB0aGF0IGFyZSB0 byBiZSBzZW50LiAgVGhlIGZpbGVuYW1lcyBzaG91bGQgYmUgbGlzdGVkIG9uZSBuYW1lIHBlciBs aW5lIiwKLSIgIGluIHRoaXMgZmlsZSAoYnV0IGEgbmFtZSBjYW4gY29udGFpbiB3aWxkY2FyZHMp LiIsCi0iICIsCi0iQWxzbyBzZWUgSEVMUCBSRUNFSVZFLCBIRUxQIEdFVCwgSEVMUCBTRVJWRVIs IEhFTFAgUkVNT1RFLiIsCi0iIn07Ci0KLXN0YXRpYyBjaGFyICpobXh4cmNbXSA9IHsKLSJTeW50 YXg6IFJFQ0VJVkUgKG9yIFIpIFsgc3dpdGNoZXMuLi4gXSBbIGFzLW5hbWUgXSIsCi0iICBXYWl0 IGZvciBhIGZpbGUgdG8gYXJyaXZlIGZyb20gdGhlIG90aGVyIEtlcm1pdCwgd2hpY2ggbXVzdCBi ZSBnaXZlbiBhIiwKLSIgIFNFTkQgY29tbWFuZC4gIElmIHRoZSBvcHRpb25hbCBhcy1uYW1lIGlz IGdpdmVuLCB0aGUgaW5jb21pbmcgZmlsZSBvciIsCi0iICBmaWxlcyBhcmUgc3RvcmVkIHVuZGVy IHRoYXQgbmFtZSwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgc3RvcmVkIHVuZGVyIiwKLSNpZm5kZWYg Q0tfVE1QRElSCi0iICB0aGUgbmFtZSBpdCBhcnJpdmVzIHdpdGguIiwKLSNlbHNlCi0jaWZkZWYg T1MyCi0iICB0aGUgbmFtZSBpdCBhcnJpdmVzIHdpdGguICBJZiB0aGUgZmlsZXNwZWMgZGVub3Rl cyBhIGRpc2sgYW5kL29yIiwKLSIgIGRpcmVjdG9yeSwgdGhlIGluY29taW5nIGZpbGUgb3IgZmls ZXMgd2lsbCBiZSBzdG9yZWQgdGhlcmUuIiwKLSNlbHNlCi0iICB0aGUgbmFtZSBpdCBhcnJpdmVz IHdpdGguICBJZiB0aGUgZmlsZXNwZWMgZGVub3RlcyBhIGRpcmVjdG9yeSwgdGhlIiwKLSIgIGlu Y29taW5nIGZpbGUgb3IgZmlsZXMgd2lsbCBiZSBwbGFjZWQgaW4gdGhhdCBkaXJlY3RvcnkuIiwK LSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBDS19UTVBESVIgKi8KLSIgIiwKLSJPcHRpb25h bCBzd2l0Y2hlcyBpbmNsdWRlOiIsCi0iICIsCi0iL0FTLU5BTUU6dGV4dCIsCi0iICBTcGVjaWZp ZXMgXCJ0ZXh0XCIgYXMgdGhlIG5hbWUgdG8gc3RvcmUgdGhlIGluY29taW5nIGZpbGUgdW5kZXIu IiwKLSIgIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IHRoZSBhcy1uYW1lIGFzIGEgZmlsZW5hbWUgb24g dGhlIGNvbW1hbmQgbGluZS4iLAotIiAiLAotIi9CSU5BUlkiLAotIiAgU2tpcHMgdGV4dC1tb2Rl IGNvbnZlcnNpb25zIHVubGVzcyB0aGUgaW5jb21pbmcgZmlsZSBhcnJpdmVzIHdpdGggYmluYXJ5 IiwKLSIgIGF0dHJpYnV0ZSIsCi0iICIsCi0iL0NPTU1BTkQiLAotIiAgUmVjZWl2ZXMgdGhlIGZp bGUgaW50byB0aGUgc3RhbmRhcmQgaW5wdXQgb2YgYSBjb21tYW5kLCByYXRoZXIgdGhhbiBzYXZp bmciLAotIiAgaXQgb24gZGlzay4gIFRoZSAvQVMtTkFNRSBvciB0aGUgXCJmaWxlbmFtZVwiIG9u IHRoZSBSRUNFSVZFIGNvbW1hbmQgbGluZSIsCi0iICBpcyBpbnRlcnByZXRlZCBhcyB0aGUgbmFt ZSBvZiBhIGNvbW1hbmQuIiwKLSIgIiwKLSIvRVhDRVBUOnBhdHRlcm4iLAotIiAgU3BlY2lmaWVz IHRoYXQgYW55IGZpbGVzIHdob3NlIG5hbWVzIG1hdGNoIHRoZSBwYXR0ZXJuLCB3aGljaCBjYW4g YmUgYSIsCi0iICByZWd1bGFyIGZpbGVuYW1lLCBvciBtYXkgY29udGFpbiBcIipcIiBhbmQvb3Ig XCI/XCIgbWV0YWNoYXJhY3RlcnMsIiwKLSIgIGFyZSB0byBiZSByZWZ1c2VkLiAgVG8gc3BlY2lm eSBtdWx0aXBsZSBwYXR0ZXJucyAodXAgdG8gOCksIHVzZSBvdXRlciIsCi0iICBicmFjZXMgYXJv dW5kIHRoZSBncm91cCwgYW5kIGlubmVyIGJyYWNlcyBhcm91bmQgZWFjaCBwYXR0ZXJuOiIsCi0i ICIsCi0iICAgIC9FWENFUFQ6e3twYXR0ZXJuMX17cGF0dGVybjJ9Li4ufSIsCi0iICIsCi0iL0ZJ TEVOQU1FUzp7Q09OVkVSVEVELExJVEVSQUx9IiwKLSIgIE92ZXJyaWRlcyB0aGUgZ2xvYmFsIFNF VCBGSUxFIE5BTUVTIHNldHRpbmcgZm9yIHRoaXMgdHJhbnNmZXIgb25seS4iLAotIiAiLAotIi9G SUxURVI6Y29tbWFuZCIsCi0iICBDYXVzZXMgdGhlIGluY29taW5nIGZpbGUgdG8gcGFzc2VkIHRo cm91Z2ggdGhlIGdpdmVuIGNvbW1hbmQgKHN0YW5kYXJkIiwKLSIgIGlucHV0L291dHB1dCBmaWx0 ZXIpIGJlZm9yZSBiZWluZyB3cml0dGVuIHRvIGRpc2suIiwKLSIgIiwKLSNpZmRlZiBWTVMKLSIv SU1BR0UiLAotIiAgUmVjZWl2ZXMgdGhlIGZpbGUgaW4gaW1hZ2UgbW9kZS4iLAotIiAiLAotI2Vu ZGlmIC8qIFZNUyAqLwotI2lmZGVmIENLX0xBQkVMRUQKLSIvTEFCRUxFRCIsCi0iICBTcGVjaWZp ZXMgbGFiZWxlZCB0cmFuc2ZlciBtb2RlLiIsCi0iICIsCi0jZW5kaWYgLyogQ0tfTEFCRUxFRCAq LwotCi0iL01PVkUtVE86ZGlyZWN0b3J5LW5hbWUiLAotIiAgU3BlY2lmaWVzIHRoYXQgZWFjaCBm aWxlIHRoYXQgYXJyaXZlcyBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIHNwZWNpZmllZCIsCi0iICBk aXJlY3RvcnkgYWZ0ZXIsIGFuZCBvbmx5IGlmLCBpdCBoYXMgYmVlbiByZWNlaXZlZCBzdWNjZXNz ZnVsbHkuIiwKLSIgIiwKLSIvUEFUSE5BTUVTOntPRkYsQUJTT0xVVEUsUkVMQVRJVkUsQVVUT30i LAotIiAgT3ZlcnJpZGVzIHRoZSBnbG9iYWwgU0VUIFJFQ0VJVkUgUEFUSE5BTUVTIHNldHRpbmcg Zm9yIHRoaXMgdHJhbnNmZXIuIiwKLSIgIiwKLSIvUElQRVM6e09OLE9GRn0iLAotIiAgT3ZlcnJp ZGVzIHRoZSBUUkFOU0ZFUiBQSVBFUyBzZXR0aW5nIGZvciB0aGlzIGNvbW1hbmQgb25seS4gIE9O IGFsbG93cyIsCi0iICByZWNlcHRpb24gb2YgZmlsZXMgd2l0aCBuYW1lcyBsaWtlIFwiIXRhciB4 ZiAtXCIgdG8gYmUgYXV0b21hdGljYWxseSIsCi0iICBkaXJlY3RlZCB0byBhIHBpcGVsaW5lLiIs Ci0iICIsCi0iL1BST1RPQ09MOm5hbWUiLAotIiAgVXNlIHRoZSBnaXZlbiBwcm90b2NvbCB0byBy ZWNlaXZlIHRoZSBpbmNvbWluZyBmaWxlKHMpLiIsCi0iICIsCi0iL1FVSUVUIiwKLSIgIFdoZW4g c2VuZGluZyBpbiBsb2NhbCBtb2RlLCB0aGlzIHN1cHByZXNzZXMgdGhlIGZpbGUtdHJhbnNmZXIg ZGlzcGxheS4iLAotIiAiLAotIi9SRUNVUlNJVkUiLAotIiAgRXF1aXZhbGVudCB0byAvUEFUSE5B TUVTOlJFTEFUSVZFLiIsCi0iICIsCi0iL1JFTkFNRS1UTzpzdHJpbmciLAotIiAgU3BlY2lmaWVz IHRoYXQgZWFjaCBmaWxlIHRoYXQgYXJyaXZlcyBzaG91bGQgYmUgcmVuYW1lZCBhcyBzcGVjaWZp ZWQiLAotIiAgYWZ0ZXIsIGFuZCBvbmx5IGlmLCBpdCBoYXMgYmVlbiByZWNlaXZlZCBzdWNjZXNz ZnVsbHkuICBUaGUgc3RyaW5nIHNob3VsZCIsCi0iICBub3JtYWxseSBjb250YWluIHZhcmlhYmxl cyBsaWtlIFxcdihmaWxlbmFtZSkgb3IgXFx2KGZpbGVudW0pLiIsCi0iICIsCi0iL1RFWFQiLAot IiAgRm9yY2VzIHRleHQtbW9kZSBjb252ZXJzaW9ucyB1bmxlc3MgdGhlIGluY29taW5nIGZpbGUg aGFzIHRoZSBiaW5hcnkiLAotIiAgYXR0cmlidXRlIiwKLSIgIiwKLSIvVFJBTlNQQVJFTlQiLAot IiAgSW5oaWJpdHMgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiBvZiBpbmNvbWluZyB0ZXh0IGZp bGVzIGZvciB0aGUgZHVyYXRpb24iLAotIiAgb2YgdGhlIFJFQ0VJVkUgY29tbWFuZCB3aXRob3V0 IGFmZmVjdGluZyBzdWJzZXF1ZW50IGNvbW1hbmRzLiIsCi0iICIsCi0iQWxzbyBzZWUgSEVMUCBT RU5ELCBIRUxQIEdFVCwgSEVMUCBTRVJWRVIsIEhFTFAgUkVNT1RFLiIsCi0iIiB9OwotCi0jaWZu ZGVmIE5PUkVTRU5ECi1zdGF0aWMgY2hhciAqaG14eHJzZW4gPSAiXAotU3ludGF4OiBSRVNFTkQg ZmlsZXNwZWMgW25hbWVdXG5cblwKLSAgUmVzZW5kcyB0aGUgZmlsZSBvciBmaWxlcywgd2hvc2Ug cHJldmlvdXMgdHJhbnNmZXIgd2FzIGludGVycnVwdGVkLlxuXAotICBQaWNrcyB1cCBmcm9tIHdo ZXJlIHByZXZpb3VzIHRyYW5zZmVyIGxlZnQgb2ZmLCBJRiB0aGUgcmVjZWl2ZXIga2VwdCB0aGVc blwKLSAgcGFydGlhbGx5IHJlY2VpdmVkIGZpbGUuICBXb3JrcyBvbmx5IGZvciBiaW5hcnktbW9k ZSB0cmFuc2ZlcnMuXG5cCi0gIFJlcXVpcmVzIGZpbGUtdHJhbnNmZXIgcGFydG5lciB0byBzdXBw b3J0IHJlY292ZXJ5LiAgU3lub255bTogUkVQVVQuIjsKLQotc3RhdGljIGNoYXIgKmhteHhyZ2V0 ID0gIlwKLVN5bnRheDogUkVHRVQgZmlsZXNwZWNcblxuXAotICBBc2sgYSBzZXJ2ZXIgdG8gUkVT RU5EIGEgZmlsZSB0byBDLUtlcm1pdC4iOwotCi1zdGF0aWMgY2hhciAqaG14eHBzZW4gPSAiXAot U3ludGF4OiBQU0VORCBmaWxlc3BlYyBwb3NpdGlvbiBbbmFtZV1cblxuXAotICBKdXN0IGxpa2Ug U0VORCwgZXhjZXB0IHNlbmRzIHRoZSBmaWxlIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBieXRlIHBv c2l0aW9uLiI7Ci0jZW5kaWYgLyogTk9SRVNFTkQgKi8KLQotI2lmbmRlZiBOT01TRU5ECi1zdGF0 aWMgY2hhciAqaG14eG1zZVtdID0gewotIlN5bnRheDogTVNFTkQgWyBzd2l0Y2hlcy4uLiBdIGZp bGVzcGVjIFsgZmlsZXNwZWMgWyAuLi4gXSBdIiwKLSIgIFNlbmRzIHRoZSBmaWxlcyBzcGVjaWZp ZWQgYnkgdGhlIGZpbGVzcGVjcy4gIE9uZSBvciBtb3JlIGZpbGVzcGVjcyBtYXkgYmUiLAotIiAg bGlzdGVkLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLiAgQW55IG9yIGFsbCBmaWxlc3BlY3MgbWF5IGNv bnRhaW4gd2lsZGNhcmRzIiwKLSIgIGFuZCB0aGV5IG1heSBiZSBpbiBkaWZmZXJlbnQgZGlyZWN0 b3JpZXMuICBBbHRlcm5hdGl2ZSBuYW1lcyBjYW5ub3QgYmUiLAotIiAgZ2l2ZW4uICBTd2l0Y2hl cyBpbmNsdWRlIC9CSU5BUlkgL0RFTEVURSAvTUFJTCAvUFJPVE9DT0wgL1FVSUVUIC9SRUNPVkVS IiwKLSIgIC9URVhUIC9UWVBFOyBzZWUgSEVMUCBTRU5EIGZvciBkZXNjcmlwdGlvbnMuIiwKLSIi Ci19OwotI2VuZGlmIC8qIE5PTVNFTkQgKi8KLQotc3RhdGljIGNoYXIgKmhteHhhZGRbXSA9IHsK LSNpZm5kZWYgTk9NU0VORAotIkFERCBTRU5ELUxJU1QgZmlsZXNwZWMgWyA8bW9kZT4gWyA8YXMt bmFtZT4gXSBdIiwKLSIgIEFkZHMgdGhlIHNwZWNpZmllZCBmaWxlIG9yIGZpbGVzIHRvIHRoZSBj dXJyZW50IFNFTkQgbGlzdC4gIFVzZSBTSE9XIiwKLSIgIFNFTkQtTElTVCBhbmQgQ0xFQVIgU0VO RC1MSVNUIHRvIGRpc3BsYXkgYW5kIGNsZWFyIHRoZSBsaXN0OyB1c2UgU0VORCIsCi0iICBieSBp dHNlbGYgdG8gc2VuZCB0aGUgZmlsZXMgZnJvbSBpdC4iLAotIiAiLAotI2VuZGlmIC8qIE5PTVNF TkQgKi8KLSNpZmRlZiBQQVRURVJOUwotIkFERCBCSU5BUlktUEFUVEVSTlMgWyA8cGF0dGVybj4g WyA8cGF0dGVybj4gLi4uIF0gXSIsCi0iICBBZGRzIHRoZSBwYXR0ZXJuKHMpLCBpZiBhbnksIHRv IHRoZSBTRVQgRklMRSBCSU5BUlktUEFUVEVSTlMgbGlzdC4iLAotIiAiLAotIkFERCBURVhULVBB VFRFUk5TIFsgPHBhdHRlcm4+IFsgPHBhdHRlcm4+IC4uLiBdIF0iLAotIiAgQWRkcyB0aGUgcGF0 dGVybihzKSwgaWYgYW55LCB0byB0aGUgU0VUIEZJTEUgVEVYVC1QQVRURVJOUyBsaXN0LiIsCi0i ICBVc2UgU0hPVyBQQVRURVJOUyB0byBzZWUgdGhlIGxpc3RzLiAgU2VlIEhFTFAgU0VUIEZJTEUg Zm9yIGZ1cnRoZXIgaW5mby4iLAotI2VuZGlmIC8qIFBBVFRFUk5TICovCi0iIn07Ci0KLXN0YXRp YyBjaGFyICpobXh4cmVtdltdID0gewotI2lmZGVmIFBBVFRFUk5TCi0iUkVNT1ZFIEJJTkFSWS1Q QVRURVJOUyBbIDxwYXR0ZXJuPiBbIDxwYXR0ZXJuPiAuLi4gXSBdIiwKLSIgIFJlbW92ZXMgdGhl IHBhdHRlcm4ocyksIGlmIGFueSwgZnJvbSB0aGUgU0VUIEZJTEUgQklOQVJZLVBBVFRFUk5TIGxp c3QiLAotIiAiLAotIlJFTU9WRSBURVhULVBBVFRFUk5TIFsgPHBhdHRlcm4+IFsgPHBhdHRlcm4+ IC4uLiBdIF0iLAotIiAgUmVtb3ZlcyB0aGUgZ2l2ZW4gcGF0dGVybnMgZnJvbSB0aGUgU0VUIEZJ TEUgVEVYVC1QQVRURVJOUyBsaXN0LiIsCi0iICBVc2UgU0hPVyBQQVRURVJOUyB0byBzZWUgdGhl IGxpc3RzLiAgU2VlIEhFTFAgU0VUIEZJTEUgZm9yIGZ1cnRoZXIgaW5mby4iLAotI2VuZGlmIC8q IFBBVFRFUk5TICovCi0iIn07Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYgTk9TRVJW RVIKLXN0YXRpYyBjaGFyICpobXh4c2VyID0gIlN5bnRheDogU0VSVkVSXG5cCi0gIEVudGVyIHNl cnZlciBtb2RlIG9uIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24uICBBbGwgZnVydGhlciBjb21tYW5k c1xuXAotICBhcmUgdGFrZW4gaW4gcGFja2V0IGZvcm0gZnJvbSB0aGUgb3RoZXIgS2VybWl0IHBy b2dyYW0uICBVc2UgRklOSVNILFxuXAotICBCWUUsIG9yIFJFTU9URSBFWElUIHRvIGdldCBDLUtl cm1pdCBvdXQgb2Ygc2VydmVyIG1vZGUuIjsKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotCi1zdGF0 aWMgY2hhciAqaG1oc2V0W10gPSB7Ci0iICBUaGUgU0VUIGNvbW1hbmQgZXN0YWJsaXNoZXMgY29t bXVuaWNhdGlvbiwgZmlsZSwgc2NyaXB0aW5nLCBvciBvdGhlciIsCi0iICBwYXJhbWV0ZXJzLiAg VGhlIFNIT1cgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBkaXNwbGF5IHRoZSB2YWx1ZXMgb2YiLAot IiAgU0VUIHBhcmFtZXRlcnMuICBIZWxwIGlzIGF2YWlsYWJsZSBmb3IgZWFjaCBpbmRpdmlkdWFs IHBhcmFtZXRlcjsiLAotIiAgdHlwZSBIRUxQIFNFVCA/IHRvIHNlZSB3aGF0J3MgYXZhaWxhYmxl LiIsCi0iIiB9OwotCi0jaWZuZGVmIE5PU0VUS0VZCi1zdGF0aWMgY2hhciAqaG1oc2tleVtdID0g ewotIlN5bnRheDogU0VUIEtFWSBrIHRleHQiLAotIk9yOiAgICAgU0VUIEtFWSBDTEVBUiIsCi0i ICBDb25maWd1cmUgdGhlIGtleSB3aG9zZSBcInNjYW4gY29kZVwiIGlzIGsgdG8gc2VuZCB0aGUg Z2l2ZW4gdGV4dCB3aGVuIiwKLSIgIHByZXNzZWQgZHVyaW5nIENPTk5FQ1QgbW9kZS4gIFNFVCBL RVkgQ0xFQVIgcmVzdG9yZXMgYWxsIHRoZSBkZWZhdWx0IiwKLSIgIGtleSBtYXBwaW5ncy4gIElm IHRoZXJlIGlzIG5vIHRleHQsIHRoZSBkZWZhdWx0IGtleSBiaW5kaW5nIGlzIHJlc3RvcmVkIiwK LSNpZm5kZWYgTk9DU0VUUwotIiAgZm9yIHRoZSBrZXkgay4gIFNFVCBLRVkgbWFwcGluZ3MgdGFr ZSBwbGFjZSBiZWZvcmUgdGVybWluYWwgY2hhcmFjdGVyLXNldCIsCi0iICB0cmFuc2xhdGlvbi4i LAotI2Vsc2UKLSIgIHRoZSBrZXkgay4iLAotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSNpZmRlZiBP UzIKLSIgIiwKLSIgIFRoZSB0ZXh0IG1heSBjb250YWluIFwiXFxLdmVyYnNcIiB0byBkZW5vdGUg YWN0aW9ucywgdG8gc3RhbmQgZm9yIERFQyIsCi0iICBrZXlwYWQsIGZ1bmN0aW9uLCBvciBlZGl0 aW5nIGtleXMsIGV0Yy4gIEZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIGtleWJvYXJkIiwKLSIgIHZl cmJzLCB0eXBlIFNIT1cgS1ZFUkJTLiIsCi0jZW5kaWYgLyogT1MyICovCi0iICIsCi0iICBUbyBm aW5kIG91dCB0aGUgc2NhbiBjb2RlIGFuZCBtYXBwaW5nIGZvciBhIHBhcnRpY3VsYXIga2V5LCB1 c2UgdGhlIiwKLSIgIFNIT1cgS0VZIGNvbW1hbmQuIiwKLSIifTsKLSNlbmRpZiAvKiBOT1NFVEtF WSAqLwotCi1zdGF0aWMgY2hhciAqaG14eWNoa3RbXSA9IHsgIlN5bnRheDogU0VUIEJMT0NLLUNI RUNLIG51bWJlciIsCi0iICIsCi0iVHlwZSBvZiBibG9jayBjaGVjayB0byBiZSB1c2VkIGZvciBl cnJvciBkZXRlY3Rpb24gb24gZmlsZS10cmFuc2ZlciIsCi0icGFja2V0czogMSwgMiwgMywgNCwg b3IgNS4gIFRoaXMgY29tbWFuZCBtdXN0IGJlIGdpdmVuIHRvIHRoZSBmaWxlIiwKLSJzZW5kZXIg cHJpb3IgdG8gdGhlIHRyYW5zZmVyLiIsCi0iICIsCi0iVHlwZSAxIGlzIHN0YW5kYXJkIGFuZCBz dXBwb3J0ZWQgYnkgYWxsIEtlcm1pdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbnMsIiwKLSIgIGJ1 dCBpdCdzIG9ubHkgYSA2LWJpdCBjaGVja3N1bSwgcmVwcmVzZW50ZWQgaW4gYSBzaW5nbGUgcHJp bnRhYmxlIEFTQ0lJIiwKLSIgIGNoYXJhY3Rlci4gIEl0J3MgZmluZSBmb3IgcmVsaWFibGUgY29u bmVjdGlvbnMgKGVycm9yLWNvcnJlY3RpbmcgbW9kZW1zLCIsCi0iICBUQ1AvSVAsIGV0YykgYnV0 IHR5cGUgMyBpcyByZWNvbW1lbmRlZCBmb3IgY29ubmVjdGlvbnMgd2hlcmUgZXJyb3JzIGNhbiIs Ci0iICBvY2N1ci4iLAotIiAiLAotIlR5cGUgMiBpcyBhIDEyLWJpdCBjaGVja3N1bSByZXByZXNl bnRlZCBpbiB0d28gcHJpbnRhYmxlIGNoYXJhY3RlcnMuIiwKLSIgIiwKLSJUeXBlIDMgaXMgYSAx Ni1iaXQgY3ljbGljIHJlZHVuZGFuY3kgY2hlY2ssIHRoZSBzdHJvbmdlc3QgZXJyb3IiLAotIiAg ZGV0ZWN0aW9uIG1ldGhvZCBzdXBwb3J0ZWQgYnkgS2VybWl0IHByb3RvY29sLCByZXByZXNlbnRl ZCBpbiB0aHJlZSIsCi0iICBwcmludGFibGUgY2hhcmFjdGVycy4iLAotIiAiLAotIlR5cGUgNCAo YWxpYXMgXCJCTEFOSy1GUkVFLTJcIikgaXMgYSAxMi1iaXQgY2hlY2tzdW0gZ3VhcmFudGVlZCB0 byIsCi0iICBjb250YWluIG5vIGJsYW5rcyBpbiBpdHMgcmVwcmVzZW50YXRpb247IHRoaXMgaXMg bmVlZGVkIGZvciBjb25uZWN0aW9ucyIsCi0iICB3aGVyZSB0cmFpbGluZyBibGFua3MgYXJlIHN0 cmlwcGVkIGZyb20gaW5jb21pbmcgbGluZXMgb2YgdGV4dC4iLAotIiAiLAotIlR5cGUgNSAoYWxp YXMgXCJGT1JDRS0zXCIpIG1lYW5zIHRvIGZvcmNlIGEgVHlwZSAzIGJsb2NrIGNoZWNrIG9uIiwK LSIgIGV2ZXJ5IHBhY2tldCwgaW5jbHVkaW5nIHRoZSBmaXJzdCBwYWNrZXQsIHdoaWNoIG5vcm1h bGx5IGhhcyBhIHR5cGUgMSIsCi0iICBibG9jayBjaGVjay4gIFRoaXMgaXMgZm9yIHVzZSBpbiBj cml0aWNhbCBhcHBsaWNhdGlvbnMgb24gbm9pc3kiLAotIiAgY29ubmVjdGlvbnMuICBBcyB3aXRo IHR5cGVzIDIsIDMsIGFuZCA0LCBpZiB0aGUgS2VybWl0IGZpbGUiLAotIiAgdHJhbnNmZXIgcGFy dG5lciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgdHlwZSwgdGhlIHRyYW5zZmVyIGZhaWxzIiwKLSIg IGltbWVkaWF0ZWx5IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRyYW5zZmVyLiIsCi0iIiB9Owot Ci1zdGF0aWMgY2hhciAqIGhteHlkZWJbXSA9IHsKLSJTeW50YXg6IFNFVCBERUJVRyB7IFNFU1NJ T04sIE9OLCBPRkYsIFRJTUVTVEFNUCwgTUVTU0FHRVMgfSIsCi0iICIsCi0iU0VUIERFQlVHIE9O IiwKLSNpZmRlZiBERUJVRwotIiAgT3BlbnMgYSBkZWJ1ZyBsb2cgZmlsZSBuYW1lZCBkZWJ1Zy5s b2cgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiIsCi0iICBVc2UgTE9HIERFQlVHIGlmIHlvdSB3 YW50IHNwZWNpZnkgYSBkaWZmZXJlbnQgbG9nIGZpbGUgbmFtZSBvciBwYXRoLiIsCi0jZWxzZQot IiAgKEhhcyBubyBlZmZlY3QgaW4gdGhpcyB2ZXJzaW9uIG9mIEtlcm1pdC4pIiwKLSNlbmRpZiAv KiBERUJVRyAqLwotIiAiLAotIlNFVCBERUJVRyBPRkYiLAotIiAgU3RvcHMgZGVidWcgbG9nZ2lu ZyBhbmQgc2Vzc2lvbiBkZWJ1Z2dpbmcuIiwKLSIgIiwKLSJTRVQgREVCVUcgU0VTU0lPTiIsCi0j aWZuZGVmIE5PTE9DQUwKLSIgIERpc3BsYXlzIGNvbnRyb2wgYW5kIDgtYml0IGNoYXJhY3RlcnMg c3ltYm9saWNhbGx5IGR1cmluZyBDT05ORUNUIG1vZGUuIiwKLSIgIEVxdWl2YWxlbnQgdG8gU0VU IFRFUk1JTkFMIERFQlVHIE9OLiIsCi0jZWxzZQotIiAgKEhhcyBubyBlZmZlY3QgaW4gdGhpcyB2 ZXJzaW9uIG9mIEtlcm1pdC4pIiwKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0iICIsCi0iU0VUIERF QlVHIFRJTUVTVEFNUCB7IE9OLCBPRkYgfSIsCi0iICBFbmFibGVzL0Rpc2FibGVzIHRpbWVzdGFt cHMgb24gZGVidWcgbG9nIGVudHJpZXMuIiwKLSIgIiwKLSJTRVQgREVCVUcgTUVTU0FHRVMgeyBP TiwgT0ZGLCBTVERFUlIgfSBbQy1LZXJtaXQgOS4wXSIsCi0iICBFbmFibGVzL0Rpc2FibGVzIG1l c3NhZ2VzIHByaW50ZWQgYnkgdGhlIERFQlVHIGNvbW1hbmQuIiwKLSIgIFNFVCBERUJVRyBPRkYg Y2F1c2VzIERFQlVHIG1lc3NhZ2VzIG5vdCB0byBiZSBwcmludGVkLiIsCi0iICBTRVQgREVCVUcg T04gc2VuZHMgREVCVUcgbWVzc2FnZXMgdG8gc3RhbmRhcmQgb3V0cHV0IChzdGRvdXQpOyIsCi0i ICBTRVQgREVCVUcgU1RERVJSIHNlbmRzIERFQlVHIG1lc3NhZ2VzIHRvIHN0YW5kYXJkIGVycm9y IChzdGRlcnIpOyIsCi0iIiB9OwotCi0jaWZkZWYgQ0tfU1BFRUQKLXN0YXRpYyBjaGFyICpobXh5 cWN0bFtdID0gewotIlN5bnRheDogU0VUIENPTlRST0wtQ0hBUkFDVEVSIHsgUFJFRklYRUQsIFVO UFJFRklYRUQgfSB7IDxjb2RlPi4uLiwgQUxMIH0iLAotIiAiLAotIiAgPGNvZGU+IGlzIHRoZSBu dW1lcmljIEFTQ0lJIGNvZGUgZm9yIGEgY29udHJvbCBjaGFyYWN0ZXIgMS0zMSwxMjctMTU5LDI1 NS4iCi0sCi0iICBUaGUgd29yZCBcIkFMTFwiIG1lYW5zIGFsbCBjaGFyYWN0ZXJzIGluIHRoaXMg cmFuZ2UuIiwKLSIgIiwKLSIgIFBSRUZJWEVEIDxjb2RlPiBtZWFucyB0aGUgZ2l2ZW4gY29udHJv bCBjaGFyYWN0ZXIgbXVzdCBiZSBjb252ZXJ0ZWQgdG8gYSIsCi0iICBwcmludGFibGUgY2hhcmFj dGVyIGFuZCBwcmVmaXhlZCwgdGhlIGRlZmF1bHQgZm9yIGFsbCBjb250cm9sIGNoYXJhY3RlcnMu IiwKLSIgIiwKLSIgIFVOUFJFRklYRUQgPGNvZGU+IG1lYW5zIHlvdSB0aGluayBpdCBpcyBzYWZl IHRvIHNlbmQgdGhlIGdpdmVuIGNvbnRyb2wiLAotIiAgY2hhcmFjdGVyIGFzLWlzLCB3aXRob3V0 IGEgcHJlZml4LiAgVVNFIFRISVMgT1BUSU9OIEFUIFlPVVIgT1dOIFJJU0shIiwKLSIgIiwKLSIg IFNIT1cgQ09OVFJPTCB0byBzZWUgY3VycmVudCBzZXR0aW5ncy4gIFNFVCBDT05UUk9MIFBSRUZJ WEVEIEFMTCBpcyIsCi0iICByZWNvbW1lbmRlZCBmb3Igc2FmZXR5LiAgWW91IGNhbiBpbmNsdWRl IG11bHRpcGxlIDxjb2RlPiB2YWx1ZXMgaW4gb25lIiwKLSIgIGNvbW1hbmQsIHNlcGFyYXRlZCBi eSBzcGFjZXMuIiwKLSIiIH07Ci0jZW5kaWYgLyogQ0tfU1BFRUQgKi8KLQotI2lmbmRlZiBOT0RJ QUwKLXN0YXRpYyBjaGFyICpoeHltb2RtW10gPSB7Ci0iU3ludGF4OiBTRVQgTU9ERU0gPHBhcmFt ZXRlcj4gPHZhbHVlPiAuLi4iLAotIiAiLAotIk5vdGU6IE1hbnkgb2YgdGhlIFNFVCBNT0RFTSBw YXJhbWV0ZXJzIGFyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgd2hlbiIsCi0ieW91IFNFVCBN T0RFTSBUWVBFLCBhY2NvcmRpbmcgdG8gdGhlIG1vZGVtJ3MgY2FwYWJpbGl0aWVzLiAgU0hPVyBN T0RFTSB0byIsCi0ic2VlIHRoZW0uICBBbHNvIHNlZSBIRUxQIERJQUwgYW5kIEhFTFAgU0VUIERJ QUwuIiwKLSIgIiwKLSJTRVQgTU9ERU0gVFlQRSA8bmFtZT4iLAotCi0iIFRlbGxzIEtlcm1pdCB3 aGljaCBraW5kIG9mIG1vZGVtIHlvdSBoYXZlLCBzbyBpdCBjYW4gaXNzdWUgdGhlIiwKLSIgYXBw cm9wcmlhdGUgbW9kZW0tc3BlY2lmaWMgY29tbWFuZHMgZm9yIGNvbmZpZ3VyYXRpb24sIGRpYWxp bmcsIGFuZCIsCi0iIGhhbmdpbmcgdXAuICBGb3IgYSBsaXN0IG9mIHRoZSBtb2RlbSB0eXBlcyBr bm93biB0byBLZXJtaXQsIHR5cGUgXCJzZXQiLAotIiBtb2RlbSB0eXBlID9cIi4gIFRoZSBkZWZh dWx0IG1vZGVtIHR5cGUgaXMgR0VORVJJQywgd2hpY2ggc2hvdWxkIHdvcmsiLAotIiB3aXRoIGFu eSBBVCBjb21tYW5kLXNldCBtb2RlbSB0aGF0IGlzIGNvbmZpZ3VyZWQgZm9yIGVycm9yIGNvcnJl Y3Rpb24sIiwKLSIgZGF0YSBjb21wcmVzc2lvbiwgYW5kIGhhcmR3YXJlIGZsb3cgY29udHJvbC4g IFVzZSBTRVQgTU9ERU0gVFlQRSBOT05FIiwKLSIgZm9yIGRpcmVjdCBzZXJpYWwsIGNvbm5lY3Rp b25zLiAgVXNlIFNFVCBNT0RFTSBUWVBFIFVTRVItREVGSU5FRCB0byB1c2UiLAotIiBhIHR5cGUg b2YgbW9kZW0gdGhhdCBpcyBub3QgYnVpbHQgaW4gdG8gS2VybWl0LCBhbmQgdGhlbiB1c2UgU0VU IE1PREVNIiwKLSIgQ0FQQUJJTElUSUVTLCBTRVQgTU9ERU0sIERJQUwtQ09NTUFORCwgYW5kIFNF VCBNT0RFTSBDT01NQU5EIHRvIHRlbGwiLAotIiBLZXJtaXQgaG93IHRvIGNvbmZpZ3VyZSBhbmQg Y29udHJvbCBpdC4iLAotCi0iICIsCi0KLSJTRVQgTU9ERU0gQ0FQQUJJTElUSUVTIDxsaXN0PiIs Ci0iICBVc2UgdGhpcyBjb21tYW5kIGZvciBjaGFuZ2luZyBLZXJtaXQncyBpZGVhIG9mIHlvdXIg bW9kZW0ncyBjYXBhYmlsaXRpZXMsIiwKLSIgIGZvciBleGFtcGxlLCBpZiB5b3VyIG1vZGVtIGlz IHN1cHBvc2VkIHRvIGhhdmUgYnVpbHQtaW4gZXJyb3IgY29ycmVjdGlvbiIsCi0iICBidXQgaW4g ZmFjdCBkb2VzIG5vdC4gIEFsc28gdXNlIHRoaXMgY29tbWFuZCB0byBkZWZpbmUgdGhlIGNhcGFi aWxpdGllcyIsCi0iICBvZiBhIFVTRVItREVGSU5FRCBtb2RlbS4gIENhcGFiaWxpdGllcyBhcmU6 IiwKLSIgIiwKLSIgICAgQVQgICAgICBBVC1jb21tYW5kcyIsCi0iICAgIERDICAgICAgZGF0YS1j b21wcmVzc2lvbiIsCi0iICAgIEVDICAgICAgZXJyb3ItY29ycmVjdGlvbiIsCi0iICAgIEhXRkMg ICAgaGFyZHdhcmUtZmxvdyIsCi0iICAgIElUVSAgICAgdjI1YmlzLWNvbW1hbmRzIiwKLSIgICAg U1dGQyAgICBzb2Z0d2FyZS1mbG93IiwKLSIgICAgS1MgICAgICBrZXJtaXQtc3Bvb2YiLAotIiAg ICBTQiAgICAgIHNwZWVkLWJ1ZmZlcmluZyIsCi0iICAgIFRCICAgICAgVGVsZWJpdCIsCi0iICIs Ci0iU0VUIE1PREVNIENBUlJJRVItV0FUQ0ggeyBBVVRPLCBPTiwgT0ZGIH0iLAotIiAgU3lub255 bSBmb3IgU0VUIENBUlJJRVItV0FUQ0ggKHEudi4pIiwKLSIgIiwKLSJTRVQgTU9ERU0gQ09NUFJF U1NJT04geyBPTiwgT0ZGIH0iLAotIiAgRW5hYmxlcy9kaXNhYmxlcyB0aGUgbW9kZW0ncyBkYXRh IGNvbXByZXNzaW9uIGZlYXR1cmUsIGlmIGFueS4iLAotIiAiLAotIlNFVCBNT0RFTSBESUFMLUNP TU1BTkQgPHRleHQ+IiwKLSIgIFRoZSB0ZXh0IHJlcGxhY2VzIEtlcm1pdCdzIGJ1aWx0LWluIG1v ZGVtIGRpYWxpbmcgY29tbWFuZC4gIEl0IG11c3QiLAotIiAgaW5jbHVkZSAnJXMnIChwZXJjZW50 IHMpIGFzIGEgcGxhY2UtaG9sZGVyIGZvciB0aGUgdGVsZXBob25lIG51bWJlcnMiLAotIiAgZ2l2 ZW4gaW4geW91ciBESUFMIGNvbW1hbmRzLiIsCi0iICIsCi0iU0VUIE1PREVNIEVSUk9SLUNPUlJF Q1RJT04geyBPTiwgT0ZGIH0iLAotIiAgRW5hYmxlcy9kaXNhYmxlcyB0aGUgbW9kZW0ncyBlcnJv ci1jb3JyZWN0aW9uIGZlYXR1cmUsIGlmIGFueS4iLAotIiAiLAotIlNFVCBNT0RFTSBFU0NBUEUt Q0hBUkFDVEVSIG51bWJlciIsCi0iICBOdW1lcmljIEFTQ0lJIHZhbHVlIG9mIG1vZGVtJ3MgZXNj YXBlIGNoYXJhY3RlciwgZS5nLiA0MyBmb3IgJysnLiIsCi0iICBGb3IgSGF5ZXMtY29tcGF0aWJs ZSBtb2RlbXMsIEtlcm1pdCB1c2VzIHRocmVlIGNvcGllcywgZS5nLiBcIisrK1wiLiIsCi0iICIs Ci0iU0VUIE1PREVNIEZMT1ctQ09OVFJPTCB7QVVUTywgTk9ORSwgUlRTL0NUUywgWE9OL1hPRkZ9 IiwKLSIgIFNlbGVjdHMgdGhlIHR5cGUgb2YgbG9jYWwgZmxvdyBjb250cm9sIHRvIGJlIHVzZWQg YnkgdGhlIG1vZGVtLiIsCi0iICIsCi0iU0VUIE1PREVNIEhBTkdVUC1NRVRIT0QgeyBNT0RFTS1D T01NQU5ELCBSUzIzMi1TSUdOQUwsIERUUiB9IiwKLSIgIEhvdyBoYW5ndXAgb3BlcmF0aW9ucyBz aG91bGQgYmUgZG9uZS4gIE1PREVNLUNPTU1BTkQgbWVhbnMgdHJ5IHRvIiwKLSIgIGVzY2FwZSBi YWNrIHRvIHRoZSBtb2RlbSdzIGNvbW1hbmQgcHJvY2Vzc29yIGFuZCBnaXZlIGEgbW9kZW0tc3Bl Y2lmaWMiLAotIiAgaGFuZ3VwIGNvbW1hbmQuICBSUzIzMi1TSUdOQUwgbWVhbnMgdHVybiBvZmYg dGhlIERUUiBzaWduYWwuICBEVFIgaXMgYSIsCi0iICBzeW5vbnltIGZvciBSUzIzMi1TSUdOQUwu IiwKLSIgIiwKLSJTRVQgTU9ERU0gS0VSTUlULVNQT09GIHtPTiwgT0ZGfSIsCi0iICBJZiB0aGUg c2VsZWN0ZWQgbW9kZW0gdHlwZSBzdXBwb3J0cyB0aGUgS2VybWl0IHByb3RvY29sIGRpcmVjdGx5 LCIsCi0iICB1c2UgdGhpcyBjb21tYW5kIHRvIHR1cm4gaXRzIEtlcm1pdCBwcm90b2NvbCBmdW5j dGlvbiBvbiBvciBvZmYuIiwKLSIgIiwKLSJTRVQgTU9ERU0gTUFYSU1VTS1TUEVFRCA8bnVtYmVy PiIsCi0iICBTcGVjaWZ5IHRoZSBtYXhpbXVtIGludGVyZmFjZSBzcGVlZCBmb3IgdGhlIG1vZGVt LiIsCi0iICIsCi0iU0VUIE1PREVNIE5BTUUgPHRleHQ+IiwKLSIgIERlc2NyaXB0aXZlIG5hbWUg Zm9yIGEgVVNFUi1ERUZJTkVEIG1vZGVtLiIsCi0iICIsCi0iU0VUIE1PREVNIFNQRUFLRVIge09O LCBPRkZ9IiwKLSIgIFR1cm5zIHRoZSBtb2RlbSdzIHNwZWFrZXIgb24gb3Igb2ZmIGR1cmluZyBk aWFsaW5nLiIsCi0iICIsCi0iU0VUIE1PREVNIFNQRUVELU1BVENISU5HIHtPTiwgT0ZGfSIsCi0i ICBPTiBtZWFucyB0aGF0IEMtS2VybWl0IGNoYW5nZXMgaXRzIHNlcmlhbCBpbnRlcmZhY2Ugc3Bl ZWQgdG8gYWdyZWUgd2l0aCIsCi0iICB0aGUgc3BlZWQgcmVwb3J0ZWQgYnkgdGhlIG1vZGVtJ3Mg Q09OTkVDVCBtZXNzYWdlLCBpZiBhbnkuICBPRkYgbWVhbnMiLAotIiAgS2VybWl0IHNob3VsZCBu b3QgY2hhbmdlIGl0cyBpbnRlcmZhY2Ugc3BlZWQuIiwKLSIgIiwKLSJTRVQgTU9ERU0gVk9MVU1F IHtMT1csIE1FRElVTSwgSElHSH0iLAotIiAgU2VsZWN0cyB0aGUgZGVzaXJlZCBtb2RlbSBzcGVh a2VyIHZvbHVtZSBmb3Igd2hlbiB0aGUgc3BlYWtlciBpcyBPTi4iLAotIiAiLAotIlNFVCBNT0RF TSBDT01NQU5EIGNvbW1hbmRzIGFyZSB1c2VkIHRvIG92ZXJyaWRlIGJ1aWx0LWluIG1vZGVtIGNv bW1hbmRzIGZvciIsCi0iZWFjaCBtb2RlbSB0eXBlLCBvciB0byBmaWxsIGluIGNvbW1hbmRzIGZv ciB0aGUgVVNFUi1ERUZJTkVEIG1vZGVtIHR5cGUuIiwKLSJPbWl0dGluZyB0aGUgb3B0aW9uYWwg WyB0ZXh0IF0gcmVzdG9yZXMgdGhlIGJ1aWx0LWluIG1vZGVtLXNwZWNpZmljIGNvbW1hbmQsIiwK LSJpZiBhbnk6IiwKLSIgIiwKLSJTRVQgTU9ERU0gQ09NTUFORCBBVVRPQU5TV0VSIHtPTiwgT0ZG fSBbIHRleHQgXSIsCi0iICBNb2RlbSBjb21tYW5kcyB0byB0dXJuIGF1dG9hbnN3ZXIgb24gYW5k IG9mZi4iLAotIiAiLAotIlNFVCBNT0RFTSBDT01NQU5EIENPTVBSRVNTSU9OIHtPTiwgT0ZGfSBb IHRleHQgXSIsCi0iICBNb2RlbSBjb21tYW5kcyB0byB0dXJuIGRhdGEgY29tcHJlc3Npb24gb24g YW5kIG9mZi4iLAotIiAiLAotIlNFVCBNT0RFTSBDT01NQU5EIEVSUk9SLUNPUlJFQ1RJT04ge09O LCBPRkZ9IFsgdGV4dCBdIiwKLSIgIE1vZGVtIGNvbW1hbmRzIHRvIHR1cm4gZXJyb3IgY29ycmVj dGlvbiBvbiBhbmQgb2ZmLiIsCi0iICIsCi0iU0VUIE1PREVNIENPTU1BTkQgSEFOR1VQIFsgdGV4 dCBdIiwKLSIgIENvbW1hbmQgdGhhdCB0ZWxscyB0aGUgbW9kZW0gdG8gaGFuZyB1cCB0aGUgY29u bmVjdGlvbi4iLAotIiAiLAotIlNFVCBNT0RFTSBDT01NQU5EIElHTk9SRS1ESUFMVE9ORSBbIHRl eHQgXSIsCi0iICBDb21tYW5kIHRoYXQgdGVsbHMgdGhlIG1vZGVtIG5vdCB0byB3YWl0IGZvciBk aWFsdG9uZSBiZWZvcmUgZGlhbGluZy4iLAotIiAiLAotIlNFVCBNT0RFTSBDT01NQU5EIElOSVQt U1RSSU5HIFsgdGV4dCBdIiwKLSIgIFRoZSAndGV4dCcgaXMgYSByZXBsYWNlbWVudCBmb3IgQy1L ZXJtaXQncyBidWlsdC1pbiBpbml0aWFsaXphdGlvbiBjb21tYW5kIiwKLSIgIGZvciB0aGUgbW9k ZW0uIiwKLSIgIiwKLSJTRVQgTU9ERU0gQ09NTUFORCBQUkVESUFMLUlOSVQgWyB0ZXh0IF0iLAot IiAgQSBzZWNvbmQgSU5JVC1TVFJJTkcgdGhhdCBpcyB0byBiZSBzZW50IHRvIHRoZSBtb2RlbSBq dXN0IHByaW9yIHRvIFwKLWRpYWxpbmcuIiwKLSIgIiwKLSJTRVQgTU9ERU0gQ09NTUFORCBIQVJE V0FSRS1GTE9XIFsgdGV4dCBdIiwKLSIgIE1vZGVtIGNvbW1hbmQgdG8gZW5hYmxlIGhhcmR3YXJl IGZsb3cgY29udHJvbCAoUlRTL0NUUykgaW4gdGhlIG1vZGVtLiIsCi0iICIsCi0iU0VUIE1PREVN IENPTU1BTkQgU09GVFdBUkUtRkxPVyBbIHRleHQgXSIsCi0iICBNb2RlbSBjb21tYW5kIHRvIGVu YWJsZSBsb2NhbCBzb2Z0d2FyZSBmbG93IGNvbnRyb2wgKFhvbi9Yb2ZmKSBpbiBtb2RlbS4iLAot IiAiLAotIlNFVCBNT0RFTSBDT01NQU5EIFNQRUFLRVIgeyBPTiwgT0ZGIH0gWyB0ZXh0IF0iLAot IiAgTW9kZW0gY29tbWFuZCB0byB0dXJuIHRoZSBtb2RlbSdzIHNwZWFrZXIgb24gb3Igb2ZmLiIs Ci0iICIsCi0iU0VUIE1PREVNIENPTU1BTkQgTk8tRkxPVy1DT05UUk9MIFsgdGV4dCBdIiwKLSIg IE1vZGVtIGNvbW1hbmQgdG8gZGlzYWJsZSBsb2NhbCBmbG93IGNvbnRyb2wgaW4gdGhlIG1vZGVt LiIsCi0iICIsCi0iU0VUIE1PREVNIENPTU1BTkQgUFVMU0UgWyB0ZXh0IF0iLAotIiAgTW9kZW0g Y29tbWFuZCB0byBzZWxlY3QgcHVsc2UgZGlhbGluZy4iLAotIiAiLAotIlNFVCBNT0RFTSBDT01N QU5EIFRPTkUgWyB0ZXh0IF0iLAotIiAgTW9kZW0gY29tbWFuZCB0byBzZWxlY3QgdG9uZSBkaWFs aW5nLiIsCi0iICIsCi0iU0VUIE1PREVNIENPTU1BTkQgVk9MVU1FIHsgTE9XLCBNRURJVU0sIEhJ R0ggfSBbIHRleHQgXSIsCi0iICBNb2RlbSBjb21tYW5kIHRvIHNldCB0aGUgbW9kZW0ncyBzcGVh a2VyIHZvbHVtZS4iLAotIiJ9OwotCi1zdGF0aWMgY2hhciAqaG14eWRpYWxbXSA9IHsKLSJUaGUg U0VUIERJQUwgY29tbWFuZCBlc3RhYmxpc2hlcyBvciBjaGFuZ2VzIGFsbCBwYXJhbWV0ZXJzIHJl bGF0ZWQgdG8iLAotImRpYWxpbmcgdGhlIHRlbGVwaG9uZS4gIEFsc28gc2VlIEhFTFAgRElBTCBh bmQgSEVMUCBTRVQgTU9ERU0uICBVc2UgU0hPVyIsCi0iRElBTCB0byBkaXNwbGF5IGFsbCBvZiB0 aGUgU0VUIERJQUwgdmFsdWVzLiIsCi0iICIsCi0iU0VUIERJQUwgQ09VTlRSWS1DT0RFIDxudW1i ZXI+IiwKLSIgIFRlbGxzIEtlcm1pdCB0aGUgdGVsZXBob25pYyBjb3VudHJ5LWNvZGUgb2YgdGhl IGNvdW50cnkgeW91IGFyZSBkaWFsaW5nIiwKLSIgIGZyb20sIHNvIGl0IGNhbiB0ZWxsIHdoZXRo ZXIgYSBwb3J0YWJsZS1mb3JtYXQgcGhvbmUgbnVtYmVyIGZyb20geW91ciIsCi0iICBkaWFsaW5n IGRpcmVjdG9yeSB3aWxsIHJlc3VsdCBpbiBhIG5hdGlvbmFsIG9yIGFuIGludGVybmF0aW9uYWwg Y2FsbC4iLAotIiAgRXhhbXBsZXM6IDEgZm9yIFVTQSwgQ2FuYWRhLCBQdWVydG8gUmljbywgZXRj OyA3IGZvciBSdXNzaWEsIDM5IGZvciBJdGFseSwiLAotIiAgMzUxIGZvciBQb3J0dWdhbCwgNDcg Zm9yIE5vcndheSwgNDQgZm9yIHRoZSBVSywgOTcyIGZvciBJc3JhZWwsIDgxIGZvciIsCi0iICBK YXBhbiwgLi4uIiwKLSIgIiwKLSIgIElmIHlvdSBoYXZlIG5vdCBhbHJlYWR5IHNldCB5b3VyIERJ QUwgSU5UTC1QUkVGSVggYW5kIExELVBSRUZJWCwgdGhlbiB0aGlzIiwKLSIgIGNvbW1hbmQgc2V0 cyBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlbTogMDExIGFuZCAxLCByZXNwZWN0aXZlbHksIGZvciBj b3VudHJ5IiwKLSIgIGNvZGUgMTsgMDAgYW5kIDAsIHJlc3BlY3RpdmVseSwgZm9yIGFsbCBvdGhl ciBjb3VudHJ5IGNvZGVzLiAgSWYgdGhlc2UgYXJlIiwKLSIgIG5vdCB5b3VyIHRydWUgaW50ZXJu YXRpb25hbCBhbmQgbG9uZy1kaXN0YW5jZSBkaWFsaW5nIHByZWZpeGVzLCB0aGVuIHlvdSIsCi0i ICBzaG91bGQgZm9sbG93IHRoaXMgY29tbWFuZCBieSBESUFMIElOVEwtUFJFRklYIGFuZCBMRC1Q UkVGSVggdG8gbGV0IEtlcm1pdCIsCi0iICBrbm93IHdoYXQgdGhleSByZWFsbHkgYXJlLiIsCi0i ICIsCi0iU0VUIERJQUwgQVJFQS1DT0RFIFsgPG51bWJlcj4gXSIsCi0iICBUZWxscyBLZXJtaXQg dGhlIGFyZWEgb3IgY2l0eSBjb2RlIHRoYXQgeW91IGFyZSBkaWFsaW5nIGZyb20sIHNvIGl0IGNh biIsCi0iICB0ZWxsIHdoZXRoZXIgYSBwb3J0YWJsZS1mb3JtYXQgcGhvbmUgbnVtYmVyIGZyb20g dGhlIGRpYWxpbmcgZGlyZWN0b3J5IGlzIiwKLSIgIGxvY2FsIG9yIGxvbmcgZGlzdGFuY2UuICBC ZSBjYXJlZnVsIG5vdCB0byBpbmNsdWRlIHlvdXIgbG9uZy1kaXN0YW5jZSIsCi0iICBkaWFsaW5n IHByZWZpeCBhcyBwYXJ0IG9mIHlvdXIgYXJlYSBjb2RlOyBmb3IgZXhhbXBsZSwgdGhlIGFyZWEg Y29kZSBmb3IiLAotIiAgY2VudHJhbCBMb25kb24gaXMgMTcxLCBub3QgMDE3MS4iLAotIiAiLAot IlNFVCBESUFMIENPTkZJUk1BVElPTiB7T04sIE9GRn0iLAotIiAgS2VybWl0IGRvZXMgdmFyaW91 cyB0cmFuc2Zvcm1hdGlvbnMgb24gYSB0ZWxlcGhvbmUgbnVtYmVyIHJldHJpZXZlZCBmcm9tIiwK LSIgIHRoZSBkaWFsaW5nIGRpcmVjdG9yeSBwcmlvciB0byBkaWFsaW5nICh1c2UgTE9PS1VQIDxu YW1lPiB0byBzZWUgdGhlbSkuIiwKLSIgIEluIGNhc2UgdGhlIHJlc3VsdCBtaWdodCBiZSB3cm9u ZywgeW91IGNhbiB1c2UgU0VUIERJQUwgQ09ORklSTSBPTiB0byBoYXZlIiwKLSIgIEtlcm1pdCBh c2sgeW91IGlmIGl0IGlzIE9LIHRvIGRpYWwgdGhlIG51bWJlciwgYW5kIGlmIG5vdCwgdG8gbGV0 IHlvdSB0eXBlIiwKLSIgIGluIGEgcmVwbGFjZW1lbnQuIiwKLSIgIiwKLSJTRVQgRElBTCBDT05O RUNUIHsgQVVUTywgT04sIE9GRiB9IiwKLSIgIFdoZXRoZXIgdG8gQ09OTkVDVCAoZW50ZXIgdGVy bWluYWwgbW9kZSkgYXV0b21hdGljYWxseSBhZnRlciBzdWNjZXNzZnVsbHkiLAotIiAgZGlhbGlu Zy4gIE9OIG1lYW5zIHRvIGRvIHRoaXM7IE9GRiBtZWFucyBub3QgdG8uICBBVVRPICh0aGUgZGVm YXVsdCkgbWVhbnMiLAotIiAgZG8gaXQgaWYgdGhlIERJQUwgY29tbWFuZCB3YXMgZ2l2ZW4gaW50 ZXJhY3RpdmVseSwgYnV0IGRvbid0IGRvIGl0IGlmIHRoZSIsCi0iICBESUFMIGNvbW1hbmQgd2Fz IGlzc3VlZCBmcm9tIGEgbWFjcm8gb3IgY29tbWFuZCBmaWxlLiAgSWYgeW91IHNwZWNpZnkgT04i LAotIiAgb3IgQVVUTywgeW91IG1heSBmb2xsb3cgdGhpcyBieSBvbmUgb2YgdGhlIGtleXdvcmRz IFZFUkJPU0Ugb3IgUVVJRVQsIHRvIiwKLSIgIGluZGljYXRlIHdoZXRoZXIgdGhlIHZlcmJvc2Ug NC1saW5lICdDb25uZWN0aW5nLi4uJyBtZXNzYWdlIGlzIHRvIGJlIiwKLSIgIGRpc3BsYXllZCBp ZiBESUFMIHN1Y2NlZWRzIGFuZCBLZXJtaXQgZ29lcyBpbnRvIENPTk5FQ1QgbW9kZS4iLAotIiAi LAotIlNFVCBESUFMIENPTlZFUlQtRElSRUNUT1JZIHtBU0ssIE9OLCBPRkZ9IiwKLSIgIFRoZSBm b3JtYXQgb2YgS2VybWl0J3MgZGlhbGluZyBkaXJlY3RvcnkgY2hhbmdlZCBpbiB2ZXJzaW9uIDVB KDE5MikuICBUaGlzIiwKLSIgIGNvbW1hbmQgdGVsbHMgS2VybWl0IHdoYXQgdG8gZG8gd2hlbiBp dCBlbmNvdW50ZXJzIGFuIG9sZC1zdHlsZSBkaXJlY3Rvcnk6IiwKLSIgIEFTSyB5b3Ugd2hldGhl ciB0byBjb252ZXJ0IGl0LCBvciBjb252ZXJ0IGl0IGF1dG9tYXRpY2FsbHkgKE9OKSwgb3IgbGVh dmUiLAotIiAgaXQgYWxvbmUgKE9GRikuICBPbGQtc3R5bGUgZGlyZWN0b3JpZXMgY2FuIHN0aWxs IGJlIHVzZWQgd2l0aG91dCIsCi0iICBjb252ZXJzaW9uLCBidXQgdGhlIHBhcml0eSBhbmQgc3Bl ZWQgZmllbGRzIGFyZSBpZ25vcmVkLiIsCi0iICIsCi0iU0VUIERJQUwgRElSRUNUT1JZIFsgZmls ZW5hbWUgWyBmaWxlbmFtZSBbIGZpbGVuYW1lIFsgLi4uIF0gXSBdIF0iLAotIiAgVGhlIG5hbWUo cykgb2YgeW91ciBkaWFsaW5nIGRpcmVjdG9yeSBmaWxlKHMpLiAgSWYgeW91IGRvIG5vdCBzdXBw bHkgYW55IiwKLSIgIGZpbGVuYW1lcywgdGhlICBkaWFsaW5nIGRpcmVjdG9yeSBmZWF0dXJlIGlz IGRpc2FibGVkIGFuZCBhbGwgbnVtYmVycyBhcmUiLAotIiAgZGlhbGVkIGxpdGVyYWxseSBhcyBn aXZlbiBpbiB0aGUgRElBTCBjb21tYW5kLiAgSWYgeW91IHN1cHBseSBtb3JlIHRoYW4iLAotIiAg b25lIGRpcmVjdG9yeSwgYWxsIG9mIHRoZW0gYXJlIHNlYXJjaGVkLiIsCi0iICIsCi0iU0VUIERJ QUwgU09SVCB7T04sIE9GRn0iLAotIiAgV2hlbiBtdWx0aXBsZSBlbnRyaWVzIGFyZSBvYnRhaW5l ZCBmcm9tIHlvdXIgZGlhbGluZyBkaXJlY3RvcnksIHRoZXkgYXJlIiwKLSIgIHNvcnRlZCBpbiBc ImNoZWFwZXN0LWZpcnN0XCIgb3JkZXIuICBJZiB0aGlzIGRvZXMgbm90IHByb2R1Y2UgdGhlIGRl c2lyZWQiLAotIiAgZWZmZWN0LCBTRVQgRElBTCBTT1JUIE9GRiB0byBkaXNhYmxlIHNvcnRpbmcs IGFuZCB0aGUgbnVtYmVycyB3aWxsIGJlIiwKLSIgIGRpYWxlZCBpbiB0aGUgb3JkZXIgaW4gd2hp Y2ggdGhleSB3ZXJlIGZvdW5kLiIsCi0iICIsCi0iU0VUIERJQUwgRElTUExBWSB7T04sIE9GRn0i LAotIiAgV2hldGhlciB0byBkaXNwbGF5IGRpYWxpbmcgcHJvZ3Jlc3Mgb24gdGhlIHNjcmVlbjsg ZGVmYXVsdCBpcyBPRkYuIiwKLSIgIiwKLSJTRVQgRElBTCBIQU5HVVAge09OLCBPRkZ9IiwKLSIg IFdoZXRoZXIgdG8gaGFuZyB1cCB0aGUgcGhvbmUgcHJpb3IgdG8gZGlhbGluZzsgZGVmYXVsdCBp cyBPTi4iLAotIiAiLAotIlNFVCBESUFMIElHTk9SRS1ESUFMVE9ORSB7T04sIE9GRn0iLAotIiAg V2hldGhlciB0byBpZ25vcmUgZGlhbHRvbmUgd2hlbiBkaWFsaW5nOyBkZWZhdWx0IGlzIE9GRi4i LAotIiAiLAotI2lmbmRlZiBOT1NQTAotIlNFVCBESUFMIE1BQ1JPIFsgbmFtZSBdIiwKLSIgIFNw ZWNpZnkgdGhlIG5hbWUgb2YgYSBtYWNybyB0byBleGVjdXRlIG9uIGV2ZXJ5IHBob25lIG51bWJl ciBkaWFsZWQsIGp1c3QiLAotIiAgcHJpb3IgdG8gZGlhbGluZyBpdCwgaW4gb3JkZXIgdG8gcGVy Zm9ybSBhbnkgbGFzdC1taW51dGUgYWx0ZXJhdGlvbnMuIiwKLSIgIiwKLSNlbmRpZiAvKiBOT1NQ TCAqLwotIlNFVCBESUFMIE1FVEhPRCB7QVVUTywgREVGQVVMVCwgVE9ORSwgUFVMU0V9IiwKLSIg IFdoZXRoZXIgdG8gdXNlIHRoZSBtb2RlbSdzIERFRkFVTFQgZGlhbGluZyBtZXRob2QsIG9yIHRv IGZvcmNlIFRPTkUgb3IiLAotIiAgUFVMU0UgZGlhbGluZy4gIEFVVE8gKHRoZSBkZWZhdWx0KSBt ZWFucyB0byBjaG9vc2UgdG9uZSBvciBwdWxzZSBkaWFsaW5nIiwKLSIgIGJhc2VkIG9uIHRoZSBj b3VudHJ5IGNvZGUuICAoQWxzbyBzZWUgU0VUIERJQUwgVE9ORS1DT1VOVFJJRVMgYW5kIFNFVCBE SUFMIiwKLSIgIFBVTFNFLUNPVU5UUklFUy4pIiwKLSIgIiwKLSJTRVQgRElBTCBQQUNJTkcgbnVt YmVyIiwKLSIgIEhvdyBtYW55IG1pbGxpc2Vjb25kcyB0byBwYXVzZSBiZXR3ZWVuIHNlbmRpbmcg ZWFjaCBjaGFyYWN0ZXIgdG8gdGhlIG1vZGVtIiwKLSIgIGRpYWxlci4gIFRoZSBkZWZhdWx0IGlz IC0xLCBtZWFuaW5nIHRvIHVzZSB0aGUgbnVtYmVyIGZyb20gdGhlIGJ1aWx0LWluIiwKLSIgbW9k ZW0gZGF0YWJhc2UuIiwKLSIgICIsCi0iU0VUIERJQUwgUFVMU0UtQ09VTlRSSUVTIFsgY2MgWyBj YyBbIC4uLiBdIF0gXSIsCi0iICBTZXRzIHRoZSBsaXN0IG9mIGNvdW50cmllcyBpbiB3aGljaCBw dWxzZSBkaWFsaW5nIGlzIHJlcXVpcmVkLiAgRWFjaCBjYyIsCi0iICBpcyBhIGNvdW50cnkgY29k ZS4iLAotIiAiLAotIlNFVCBESUFMIFRFU1QgeyBPTiwgT0ZGIH0iLAotIiAgT0ZGIGZvciBub3Jt YWwgZGlhbGluZy4gIFNldCB0byBPTiB0byB0ZXN0IGRpYWxpbmcgcHJvY2VkdXJlcyB3aXRob3V0 IiwKLSIgIGFjdHVhbGx5IGRpYWxpbmcuIiwKLSIgIiwKLSJTRVQgRElBTCBUT05FLUNPVU5UUklF UyBbIGNjIFsgY2MgWyAuLi4gXSBdIF0iLAotIiAgU2V0cyB0aGUgbGlzdCBvZiBjb3VudHJpZXMg aW4gd2hpY2ggdG9uZSBkaWFsaW5nIGlzIGF2YWlsYWJsZS4gIEVhY2ggY2MiLAotIiAgaXMgYSBj b3VudHJ5IGNvZGUuIiwKLSIgIiwKLSJTRVQgRElBTCBUSU1FT1VUIG51bWJlciIsCi0iICBIb3cg bWFueSBzZWNvbmRzIHRvIHdhaXQgZm9yIGEgZGlhbGVkIGNhbGwgdG8gY29tcGxldGUuICBVc2Ug dGhpcyBjb21tYW5kIiwKLSIgIHRvIG92ZXJyaWRlIHRoZSBESUFMIGNvbW1hbmQncyBhdXRvbWF0 aWMgdGltZW91dCBjYWxjdWxhdGlvbi4gIEEgdmFsdWUiLAotIiAgb2YgMCB0dXJucyBvZmYgdGhp cyBmZWF0dXJlIGFuZCByZXR1cm5zIHRvIEtlcm1pdCdzIGF1dG9tYXRpYyBkaWFsIiwKLSIgIHRp bWVvdXQgY2FsY3VsYXRpb24uIiwKLSIgIiwKLSJTRVQgRElBTCBSRVNUUklDVCB7IElOVEVSTkFU SU9OQUwsIExPQ0FMLCBMT05HLURJU1RBTkNFLCBOT05FIH0iLAotIiAgUHJldmVudHMgcGxhY2lu ZyBjYWxscyBvZiB0aGUgdHlwZSBpbmRpY2F0ZWQsIG9yIGdyZWF0ZXIuICBGb3IgZXhhbXBsZSIs Ci0iICBTRVQgRElBTCBSRVNUUklDVCBMT05HIHByZXZlbnRzIHBsYWNpbmcgb2YgbG9uZy1kaXN0 YW5jZSBhbmQgaW50ZXJuYXRpb25hbCIsCi0iICBjYWxscy4gIElmIHRoaXMgY29tbWFuZCBpcyBu b3QgZ2l2ZW4sIHRoZXJlIGFyZSBubyByZXN0cmljdGlvbnMuICBVc2VmdWwiLAotIiAgd2hlbiBk aWFsaW5nIGEgbGlzdCBvZiBudW1iZXJzIGZldGNoZWQgZnJvbSBhIGRpYWxpbmcgZGlyZWN0b3J5 LiIsCi0iICIsCi0iU0VUIERJQUwgUkVUUklFUyA8bnVtYmVyPiIsCi0iICBIb3cgbWFueSB0aW1l cyB0byByZWRpYWwgZWFjaCBudW1iZXIgaWYgdGhlIGRpYWxpbmcgcmVzdWx0IGlzIGJ1c3kgb3Ig bm8iLAotIiAgbm8gYW5zd2VyLCB1bnRpbCB0aGUgY2FsbCBpcyBzdWNjZXNzZnVsbHkgYW5zd2Vy ZWQuICBUaGUgZGVmYXVsdCBpcyAwIiwKLSIgIGJlY2F1c2UgYXV0b21hdGljIHJlZGlhbGluZyBp cyBpbGxlZ2FsIGluIHNvbWUgY291bnRyaWVzLiIsCi0iICIsCi0iU0VUIERJQUwgSU5URVJWQUwg PG51bWJlcj4iLAotIiAgSG93IG1hbnkgc2Vjb25kcyB0byBwYXVzZSBiZXR3ZWVuIGF1dG9tYXRp YyByZWRpYWwgYXR0ZW1wdHM7IGRlZmF1bHQgMTAuIiwKLSIgIiwKLSJUaGUgZm9sbG93aW5nIGNv bW1hbmRzIGFwcGx5IHRvIGFsbCBwaG9uZSBudW1iZXJzLCB3aGV0aGVyIGdpdmVuIGxpdGVyYWxs eSIsCi0ib3IgZm91bmQgaW4gdGhlIGRpYWxpbmcgZGlyZWN0b3J5OiIsCi0iICIsCi0iU0VUIERJ QUwgUFJFRklYIFsgdGV4dCBdIiwKLSIgIEVzdGFibGlzaCBhIHByZWZpeCB0byBiZSBhcHBsaWVk IHRvIGFsbCBwaG9uZSBudW1iZXJzIHRoYXQgYXJlIGRpYWxlZCwiLAotIiAgZm9yIGV4YW1wbGUg dG8gZGlzYWJsZSBjYWxsIHdhaXRpbmcuIiwKLSIgIiwKLSJTRVQgRElBTCBTVUZGSVggWyB0ZXh0 IF0iLAotIiAgRXN0YWJsaXNoIGEgc3VmZml4IHRvIGJlIGFkZGVkIGFmdGVyIGFsbCBwaG9uZSBu dW1iZXJzIHRoYXQgYXJlIGRpYWxlZC4iLAotIiAiLAotIlRoZSBmb2xsb3dpbmcgY29tbWFuZHMg YXBwbHkgb25seSB0byBwb3J0YWJsZS1mb3JtYXQgbnVtYmVycyBvYnRhaW5lZCBmcm9tIiwKLSJ0 aGUgZGlhbGluZyBkaXJlY3Rvcnk7IGkuZS4gbnVtYmVycyB0aGF0IHN0YXJ0IHdpdGggYSBcIitc IiBzaWduIGFuZCIsCi0iY291bnRyeSBjb2RlLCBmb2xsb3dlZCBieSBhcmVhIGNvZGUgaW4gcGFy ZW50aGVzZXMsIGZvbGxvd2VkIGJ5IHRoZSBwaG9uZSIsCi0ibnVtYmVyLiIsCi0iICIsCi0iU0VU IERJQUwgTEMtQVJFQS1DT0RFUyBbIDxsaXN0PiBdIiwKLSIgIFNwZWNpZXMgYSBsaXN0IG9mIGFy ZWEgY29kZXMgdG8gd2hpY2ggZGlhbGluZyBpcyBsb2NhbCwgaS5lLiBkb2VzIG5vdCIsCi0iICBy ZXF1aXJlIHRoZSBMRC1QUkVGSVguICBVcCB0byAzMiBhcmVhIGNvZGVzIG1heSBiZSBsaXN0ZWQs IHNlcGFyYXRlZCBieSIsCi0iICBzcGFjZXMuICBBbnkgYXJlYSBjb2RlcyBpbiB0aGlzIGxpc3Qg d2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgZGlhbCIsCi0iICBzdHJpbmcgc28gZG8gbm90 IGluY2x1ZGUgeW91ciBvd24gYXJlYSBjb2RlIGlmIGl0IHNob3VsZCBub3QgYmUgZGlhbGVkLiIs Ci0iICIsCi0iU0VUIERJQUwgTEMtUFJFRklYIFsgPHRleHQ+IF0iLAotIiAgU3BlY2lmaWVzIGEg cHJlZml4IHRvIGJlIGFwcGxpZWQgdG8gbG9jYWwgY2FsbHMgbWFkZSBmcm9tIHBvcnRhYmxlIGRp YWxpbmciLAotIiAgZGlyZWN0b3J5IGVudHJpZXMuICBOb3JtYWxseSBubyBwcmVmaXggaXMgdXNl ZCBmb3IgbG9jYWwgY2FsbHMuIiwKLSIgIiwKLSJTRVQgRElBTCBMQy1TVUZGSVggWyA8dGV4dD4g XSIsCi0iICBTcGVjaWZpZXMgYSBzdWZmaXggdG8gYmUgYXBwbGllZCB0byBsb2NhbCBjYWxscyBt YWRlIGZyb20gcG9ydGFibGUgZGlhbGluZyIsCi0iICBkaXJlY3RvcnkgZW50cmllcy4gIE5vcm1h bGx5IG5vIHN1ZmZpeCBpcyB1c2VkIGZvciBsb2NhbCBjYWxscy4iLAotIiAiLAotIlNFVCBESUFM IExELVBSRUZJWCBbIDx0ZXh0PiBdIiwKLSIgIFlvdXIgbG9uZy1kaXN0YW5jZSBkaWFsaW5nIHBy ZWZpeCwgdG8gYmUgdXNlZCB3aXRoIHBvcnRhYmxlIGRpYWxpbmciLAotIiAgZGlyZWN0b3J5IGVu dHJpZXMgdGhhdCByZXN1bHQgaW4gbG9uZy1kaXN0YW5jZSBjYWxscy4iLAotIiAiLAotIlNFVCBE SUFMIExELVNVRkZJWCBbIDx0ZXh0PiBdIiwKLSIgIExvbmctZGlzdGFuY2UgZGlhbGluZyBzdWZm aXgsIGlmIGFueSwgdG8gYmUgdXNlZCB3aXRoIHBvcnRhYmxlIGRpYWxpbmciLAotIiAgZGlyZWN0 b3J5IGVudHJpZXMgdGhhdCByZXN1bHQgaW4gbG9uZy1kaXN0YW5jZSBjYWxscy4gIFRoaXMgd291 bGQgbm9ybWFsbHkiLAotIiAgYmUgdXNlZCBmb3IgYXBwZW5kaW5nIGEgY2FsbGluZy1jYXJkIG51 bWJlciB0byB0aGUgcGhvbmUgbnVtYmVyLiIsCi0iICIsCi0iU0VUIERJQUwgRk9SQ0UtTE9ORy1E SVNUQU5DRSB7IE9OLCBPRkYgfSIsCi0iICBXaGV0aGVyIHRvIGZvcmNlIGxvbmctZGlzdGFuY2Ug ZGlhbGluZyBmb3IgY2FsbHMgdGhhdCBub3JtYWxseSB3b3VsZCBiZSIsCi0iICBsb2NhbC4gIEZv ciB1c2UgKGUuZy4pIGluIEZyYW5jZS4iLAotIiAiLAotIlNFVCBESUFMIFRPTEwtRlJFRS1BUkVB LUNPREUgWyA8bnVtYmVyPiBbIDxudW1iZXI+IFsgLi4uIF0gXSBdIiwKLSIgIFRlbGxzIEtlcm1p dCB0aGUgdG9sbC1mcmVlIGFyZWEgY29kZShzKSBpbiB5b3VyIGNvdW50cnkuIiwKLSIgIiwKLSJT RVQgRElBTCBUT0xMLUZSRUUtUFJFRklYIFsgPHRleHQ+IF0iLAotIiAgWW91IHRvbGwtZnJlZSBk aWFsaW5nIHByZWZpeCwgaW4gY2FzZSBpdCBpcyBkaWZmZXJlbnQgZnJvbSB5b3VyIGxvbmctIiwK LSIgIGRpc3RhbmNlIGRpYWxpbmcgcHJlZml4LiIsCi0iICIsCi0iU0VUIERJQUwgSU5UTC1QUkVG SVggPHRleHQ+IiwKLSIgIFlvdXIgaW50ZXJuYXRpb25hbCBkaWFsaW5nIHByZWZpeCwgdG8gYmUg dXNlZCB3aXRoIHBvcnRhYmxlIGRpYWxpbmciLAotIiAgZGlyZWN0b3J5IGVudHJpZXMgdGhhdCBy ZXN1bHQgaW4gaW50ZXJuYXRpb25hbCBjYWxscy4iLAotIiAiLAotIlNFVCBESUFMIElOVEwtU1VG RklYIDx0ZXh0PiIsCi0iICBJbnRlcm5hdGlvbmFsIGRpYWxpbmcgc3VmZml4LCBpZiBhbnksIHRv IGJlIHVzZWQgd2l0aCBwb3J0YWJsZSBkaWFsaW5nIiwKLSIgIGRpcmVjdG9yeSBlbnRyaWVzIHRo YXQgcmVzdWx0IGluIGludGVybmF0aW9uYWwgY2FsbHMuIiwKLSIgIiwKLSJTRVQgRElBTCBQQlgt T1VUU0lERS1QUkVGSVggPHRleHQ+IiwKLSIgIFVzZSB0aGlzIHRvIHRlbGwgS2VybWl0IGhvdyB0 byBnZXQgYW4gb3V0c2lkZSBsaW5lIHdoZW4gZGlhbGluZyBmcm9tIGEiLAotIiAgUHJpdmF0ZSBC cmFuY2ggRXhjaGFuZ2UgKFBCWCkuIiwKLSIgIiwKLSJTRVQgRElBTCBQQlgtRVhDSEFOR0UgPHRl eHQ+IFsgPHRleHQ+IFsgLi4uIF0gXSIsCi0iICBJZiBQQlgtT1VUU0lERS1QUkVGSVggaXMgc2V0 LCB0aGVuIHlvdSBjYW4gdXNlIHRoaXMgY29tbWFuZCB0byB0ZWxsIEtlcm1pdCIsCi0iICB0aGUg bGVhZGluZyBkaWdpdHMgb2Ygb25lIG9yIG1vcmUgbG9jYWwgcGhvbmUgbnVtYmVycyB0aGF0IGlk ZW50aWZ5IGl0IGFzIiwKLSIgIGJlaW5nIG9uIHlvdXIgUEJYLCBzbyBpdCBjYW4gbWFrZSBhbiBp bnRlcm5hbCBjYWxsIGJ5IGRlbGV0aW5nIHRob3NlIGRpZ2l0cyIKLSwKLSIgIGZyb20gdGhlIHBo b25lIG51bWJlci4iLAotIiAiLAotIlNFVCBESUFMIFBCWC1JTlRFUk5BTC1QUkVGSVggPHRleHQ+ IiwKLSIgIElmIFBCWC1FWENIQU5HRSBpcyBzZXQsIGFuZCBLZXJtaXQgZGV0ZXJtaW5lcyBmcm9t IGl0IHRoYXQgYSBjYWxsIGlzIiwKLSIgIGludGVybmFsLCB0aGVuIHRoaXMgcHJlZml4LCBpZiBh bnksIGlzIGFkZGVkIHRvIHRoZSBudW1iZXIgcHJpb3IgdG8iLAotIiAgXAotZGlhbGluZy4gIFVz ZSB0aGlzIGlmIGludGVybmFsIGNhbGxzIGZyb20geW91ciBQQlggcmVxdWlyZSBhIHNwZWNpYWwg cHJlZml4LiIsCi0iIiB9OwotI2VuZGlmIC8qIE5PRElBTCAqLwotCi1zdGF0aWMgY2hhciAqaG14 eWZsb1tdID0geyAiU3ludGF4OiBTRVQgRkxPVyBbIHN3aXRjaCBdIHZhbHVlIiwKLSIgIiwKLSNp Zm5kZWYgTk9MT0NBTAotIiAgU2VsZWN0cyB0aGUgdHlwZSBvZiBmbG93IGNvbnRyb2wgdG8gdXNl IGR1cmluZyBmaWxlIHRyYW5zZmVyLCB0ZXJtaW5hbCIsCi0iICBjb25uZWN0aW9uLCBhbmQgc2Ny aXB0IGV4ZWN1dGlvbi4iLAotI2Vsc2UKLSIgIFNlbGVjdHMgdGhlIHR5cGUgb2YgZmxvdyBjb250 cm9sIHRvIHVzZSBkdXJpbmcgZmlsZSB0cmFuc2Zlci4iLAotI2VuZGlmIC8qIE5PTE9DQUwgKi8K LSIgIiwKLSIgIFN3aXRjaGVzIGxldCB5b3UgYXNzb2NpYXRlIGEgcGFydGljdWxhciBraW5kIG9m IGZsb3cgY29udHJvbCB3aXRoIGVhY2giLAotIiAga2luZCBvZiBjb25uZWN0aW9uOiAvUkVNT1RF LCAvTU9ERU0sIC9ESVJFQ1QtU0VSSUFMLCAvVENQSVAsIGV0YzsgdHlwZSIsCi0iICBcInNldCBm bG93ID9cIiBmb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBzd2l0Y2hlcy4gIFRoZW4gd2hlbmV2ZXIg eW91IG1ha2UiLAotIiAgYSBjb25uZWN0aW9uLCB0aGUgYXNzb2NpYXRlZCBmbG93LWNvbnRyb2wg aXMgY2hvc2VuIGF1dG9tYXRpY2FsbHkuIiwKLSIgIFRoZSBmbG93LWNvbnRyb2wgdmFsdWVzIGFy ZSBOT05FLCBLRUVQLCBYT04vWE9GRiwgYW5kIHBvc3NpYmx5IFJUUy9DVFMiLAotIiAgYW5kIHNv bWUgb3RoZXJzOyBhZ2FpbiwgdHlwZSBcInNldCBmbG93ID9cIiBmb3IgYSBsaXN0LiAgS0VFUCB0 ZWxscyBLZXJtaXQiLAotIiAgbm90IHRvIHRyeSB0byBjaGFuZ2UgdGhlIGN1cnJlbnQgZmxvdy1j b250cm9sIG1ldGhvZCBmb3IgdGhlIGNvbm5lY3Rpb24uIiwKLSIgIiwKLSIgIElmIHlvdSBvbWl0 IHRoZSBzd2l0Y2ggYW5kIHNpbXBseSBzdXBwbHkgYSB2YWx1ZSwgdGhpcyB2YWx1ZSBiZWNvbWVz IHRoZSIsCi0iICBjdXJyZW50IGZsb3cgY29udHJvbCB0eXBlLCBvdmVycmlkaW5nIGFueSBkZWZh dWx0IHZhbHVlIHRoYXQgbWlnaHQgaGF2ZSIsCi0iICBiZWVuIGNob3NlbiBpbiB5b3VyIG1vc3Qg cmVjZW50IFNFVCBMSU5FLCBTRVQgUE9SVCwgb3IgU0VUIEhPU1QsIG9yIG90aGVyIiwKLSIgIGNv bm5lY3Rpb24tZXN0YWJsaXNobWVudCBjb21tYW5kLiIsCi0iICIsCi0iICBUeXBlIFNIT1cgRkxP Vy1DT05UUk9MIHRvIHNlZSB0aGUgY3VycmVudCBkZWZhdWx0cyBmb3IgZWFjaCBjb25uZWN0aW9u IHR5cGUiCi0sCi0iICBhcyB3ZWxsIGFzIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gdHlwZSBhbmQg Zmxvdy1jb250cm9sIHNldHRpbmcuICBTSE9XIiwKLSIgIENPTU1VTklDQVRJT05TIGFsc28gc2hv d3MgdGhlIGN1cnJlbnQgZmxvdy1jb250cm9sIHNldHRpbmcuIiwKLSIifTsKLQotc3RhdGljIGNo YXIgKmhteHlmW10gPSB7Ci0iU3ludGF4OiBTRVQgRklMRSBwYXJhbWV0ZXIgdmFsdWUiLAotIiAi LAotIlNldHMgZmlsZS1yZWxhdGVkIHBhcmFtZXRlcnMuICBVc2UgU0hPVyBGSUxFIHRvIHZpZXcg dGhlbS4gIEFsc28gc2VlIFNFVCIsCi0iKGFuZCBTSE9XKSBUUkFOU0ZFUiBhbmQgUFJPVE9DT0wu IiwKLSIgIiwKLSNpZmRlZiBWTVMKLSJTRVQgRklMRSBUWVBFIHsgVEVYVCwgQklOQVJZLCBJTUFH RSwgTEFCRUxFRCB9IiwKLSNlbHNlCi0jaWZkZWYgU1RSQVRVUwotIlNFVCBGSUxFIFRZUEUgeyBU RVhULCBCSU5BUlksIExBQkVMRUQgfSIsCi0jZWxzZQotI2lmZGVmIE1BQwotIlNFVCBGSUxFIFRZ UEUgeyBURVhULCBCSU5BUlksIE1BQ0JJTkFSWSB9IiwKLSNlbHNlCi0iU0VUIEZJTEUgVFlQRSB7 IFRFWFQsIEJJTkFSWSB9IiwKLSNlbmRpZiAvKiBTVFJBVFVTICovCi0jZW5kaWYgLyogTUFDICov Ci0jZW5kaWYgLyogVk1TICovCi0iICBIb3cgZmlsZSBjb250ZW50cyBhcmUgdG8gYmUgdHJlYXRl ZCBkdXJpbmcgZmlsZSB0cmFuc2ZlciBpbiB0aGUgYWJzZW5jZSIsCi0iICBvZiBhbnkgb3RoZXIg aW5kaWNhdGlvbi4gIFRZUEUgY2FuIGJlIFRFWFQgZm9yIGNvbnZlcnNpb24gb2YgcmVjb3JkIGZv cm1hdCIsCi0iICBhbmQgY2hhcmFjdGVyIHNldCwgd2hpY2ggaXMgdXN1YWxseSBuZWVkZWQgd2hl biB0cmFuc2ZlcnJpbmcgdGV4dCBmaWxlcyIsCi0iICBiZXR3ZWVuIHVubGlrZSBwbGF0Zm9ybXMg KHN1Y2ggYXMgVU5JWCBhbmQgV2luZG93cyksIG9yIEJJTkFSWSBmb3Igbm8iLAotIiAgY29udmVy c2lvbiBpZiBUUkFOU0ZFUiBNT0RFIGlzIE1BTlVBTCwgd2hpY2ggaXMgbm90IHRoZSBkZWZhdWx0 LiAgVXNlIiwKLSIgIEJJTkFSWSB3aXRoIFRSQU5TRkVSIE1PREUgTUFOVUFMIGZvciBleGVjdXRh YmxlIHByb2dyYW1zIG9yIGJpbmFyeSBkYXRhIG9yIiwKLSIgIHdoZW5ldmVyIHlvdSB3aXNoIHRv IGR1cGxpY2F0ZSB0aGUgb3JpZ2luYWwgY29udGVudHMgb2YgdGhlIGZpbGUsIGJ5dGUgZm9yIgot LAotIiAgYnl0ZS4gIEluIG1vc3QgbW9kZXJuIEtlcm1pdCBwcm9ncmFtcywgdGhlIGZpbGUgc2Vu ZGVyIGluZm9ybXMgdGhlIHJlY2VpdmVyIgotLAotIiAgb2YgdGhlIGZpbGUgdHlwZSBhdXRvbWF0 aWNhbGx5LiAgSG93ZXZlciwgd2hlbiBzZW5kaW5nIGZpbGVzIGZyb20gQy1LZXJtaXQiLAotIiAg dG8gYW4gYW5jaWVudCBvciBub24tQ29sdW1iaWEgS2VybWl0IGltcGxlbWVudGF0aW9uLCB5b3Ug bWlnaHQgbmVlZCB0byBzZXQiLAotIiAgdGhlIGNvcnJlc3BvbmRpbmcgZmlsZSB0eXBlIGF0IHRo ZSByZWNlaXZlciBhcyB3ZWxsLiIsCi0iICIsCi0jaWZkZWYgVk1TCi0iICBGSUxFIFRZUEUgc2V0 dGluZ3Mgb2YgVEVYVCBhbmQgQklOQVJZIGhhdmUgbm8gZWZmZWN0IHdoZW4gc2VuZGluZyBmaWxl cywiLAotIiAgc2luY2UgVk1TIEMtS2VybWl0IGRldGVybWluZXMgZWFjaCBmaWxlJ3MgdHlwZSBh dXRvbWF0aWNhbGx5IGZyb20gaXRzIiwKLSIgIHJlY29yZCBmb3JtYXQ6IGJpbmFyeSBmb3IgZml4 ZWQsIHRleHQgZm9yIG90aGVycy4gIEZvciBpbmNvbWluZyBmaWxlcywiLAotIiAgdGhlc2Ugc2V0 dGluZ3MgYXJlIGVmZmVjdGl2ZSBvbmx5IGluIHRoZSBhYnNlbmNlIG9mIGEgZmlsZS10eXBlIGlu ZGljYXRpb24iLAotIiAgZnJvbSB0aGUgc2VuZGVyLiIsCi0iICIsCi0iICBZb3UgbWF5IGluY2x1 ZGUgYW4gb3B0aW9uYWwgcmVjb3JkLWZvcm1hdCBhZnRlciB0aGUgd29yZCBCSU5BUlkuICBUaGlz IG1heSIsCi0iICBiZSBGSVhFRCAodGhlIGRlZmF1bHQpIG9yIFVOREVGSU5FRC4gIFVOREVGSU5F RCBpcyB1c2VkIHdoZW4geW91IG5lZWQgdG8iLAotIiAgcmVjZWl2ZSBiaW5hcnkgZmlsZXMgaW4g YmluYXJ5IG1vZGUgYW5kIGhhdmUgdGhlbSBzdG9yZWQgd2l0aCBVTkRFRklORUQiLAotIiAgcmVj b3JkIGZvcm1hdCwgd2hpY2ggaXMgcmVxdWlyZWQgYnkgY2VydGFpbiBWTVMgYXBwbGljYXRpb25z LiIsCi0iICIsCi0iICBUd28gYWRkaXRpb25hbCBWTVMgZmlsZSB0eXBlcyBhcmUgYWxzbyBzdXBw b3J0ZWQ6IElNQUdFIGFuZCBMQUJFTEVELiIsCi0iICBJTUFHRSBtZWFucyByYXcgYmxvY2sgaS9v LCBubyBpbnRlcmZlcmVuY2UgZnJvbSBSTVMsIGFwcGxpZXMgdG8gZmlsZSIsCi0iICB0cmFuc21p c3Npb24gb25seSwgYW5kIG92ZXJyaWRlcyB0aGUgbm9ybWFsIGF1dG9tYXRpY2EgZmlsZSB0eXBl IiwKLSIgIGRldGVybWluYXRpb24uICAgTEFCRUxFRCBtZWFucyB0byBzZW5kIG9yIGludGVycHJl dCBSTVMgYXR0cmlidXRlcyIsCi0iICB3aXRoIHRoZSBmaWxlLiIsCi0iICIsCi0jZWxzZQotIiAg V2hlbiBUUkFOU0ZFUiBNT0RFIGlzIEFVVE9NQVRJQyAoYXMgaXQgaXMgYnkgZGVmYXVsdCksIHZh cmlvdXMgYXV0b21hdGljIiwKLSIgIG1ldGhvZHMgKGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0p IGFyZSB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIGEgZmlsZSIsCi0iICBpcyB0cmFuc2ZlcnJl ZCBpbiB0ZXh0IG9yIGJpbmFyeSBtb2RlOyB0aGVzZSBtZXRob2RzICh3aGljaCBtaWdodCBpbmNs dWRlIiwKLSIgIGNvbnRlbnQgc2NhbiAoc2VlIFNFVCBGSUxFIFNDQU4gYmVsb3cpLCBmaWxlbmFt ZSBwYXR0ZXJuIG1hdGNoaW5nIChTRVQgRklMRSIKLSwKLSIgIFBBVFRFUk5TKSwgY2xpZW50L3Nl cnZlciBcImtpbmRyZWQtc3Bpcml0XCIgcmVjb2duaXRpb24sIG9yIHNvdXJjZSBmaWxlIiwKLSIg IHJlY29yZCBmb3JtYXQpIHN1cGVyc2VkZSB0aGUgRklMRSBUWVBFIHNldHRpbmcgYnV0IGNhbiwg dGhlbXNlbHZlcywgYmUiLAotIiAgc3VwZXJzZWRlZCBieSBpbmNsdWRpbmcgYSAvQklOQVJZIG9y IC9URVhUIHN3aXRjaCBpbiB0aGUgU0VORCwgR0VULCBvciIsCi0iICBSRUNFSVZFIGNvbW1hbmQu IiwKLSIgIiwKLSIgIFdoZW4gVFJBTlNGRVIgTU9ERSBpcyBNQU5VQUwsIHRoZSBhdXRvbWF0aWMg bWV0aG9kcyBhcmUgc2tpcHBlZCBmb3Igc2VuZGluZyIKLSwKLSIgIGZpbGVzOyB0aGUgRklMRSBU WVBFIHNldHRpbmcgaXMgdXNlZCBpbnN0ZWFkLCB3aGljaCBjYW4gYmUgc3VwZXJzZWRlZCBvbiIs Ci0iICBhIHBlci1jb21tYW5kIGJhc2lzIHdpdGggYSAvVEVYVCBvciAvQklOQVJZIHN3aXRjaC4i LAotI2VuZGlmIC8qIFZNUyAqLwotIiAiLAotCi0jaWZuZGVmIE5PWEZFUgotCi0iU0VUIEZJTEUg QllURVNJWkUgeyA3LCA4IH0iLAotIiAgTm9ybWFsbHkgOC4gIElmIDcsIEtlcm1pdCB0cnVuY2F0 ZXMgdGhlIDh0aCBiaXQgb2YgYWxsIGZpbGUgYnl0ZXMuIiwKLSIgIiwKLSNpZm5kZWYgTk9DU0VU UwotIlNFVCBGSUxFIENIQVJBQ1RFUi1TRVQgbmFtZSIsCi0iICBUZWxscyB0aGUgZW5jb2Rpbmcg b2YgdGhlIGxvY2FsIGZpbGUsIEFTQ0lJIGJ5IGRlZmF1bHQuIiwKLSIgIFRoZSBuYW1lcyBJVEFM SUFOLCBQT1JUVUdVRVNFLCBOT1JXRUdJQU4sIGV0YywgcmVmZXIgdG8gNy1iaXQgSVNPLTY0NiIs Ci0iICBuYXRpb25hbCBjaGFyYWN0ZXIgc2V0cy4gIExBVElOMSBpcyB0aGUgOC1iaXQgSVNPIDg4 NTktMSBMYXRpbiBBbHBoYWJldCAxIiwKLSIgIGZvciBXZXN0ZXJuIEV1cm9wZWFuIGxhbmd1YWdl cy4iLAotIiAgTkVYVCBpcyB0aGUgOC1iaXQgY2hhcmFjdGVyIHNldCBvZiB0aGUgTmVYVCB3b3Jr c3RhdGlvbi4iLAotIiAgVGhlIENQbm5uIHNldHMgYXJlIGZvciBQQ3MuICBNQUNJTlRPU0gtTEFU SU4gaXMgZm9yIHRoZSBNYWNpbnRvc2guIiwKLSNpZm5kZWYgTk9MQVRJTjIKLSIgIExBVElOMiBp cyBJU08gODg1OS0yIGZvciBFYXN0ZXJuIEV1cm9wZWFuIGxhbmd1YWdlcyB0aGF0IGFyZSB3cml0 dGVuIHdpdGgiLAotIiAgUm9tYW4gbGV0dGVycy4gIE1hem92aWEgaXMgYSBQQyBjb2RlIHBhZ2Ug dXNlZCBpbiBQb2xhbmQuIiwKLSNlbmRpZiAvKiBOT0xBVElOMiAqLwotI2lmZGVmIENZUklMTElD Ci0iICBLT0ktQ1lSSUxMSUMsIENZUklMTElDLUlTTywgYW5kIENQODY2IGFyZSA4LWJpdCBDeXJp bGxpYyBjaGFyYWN0ZXIgc2V0cy4iLAotIiAgU0hPUlQtS09JIGlzIGEgNy1iaXQgQVNDSUkgY29k aW5nIGZvciBDeXJpbGxpYy4gIEJVTEdBUklBLVBDIGlzIGEgUEMgY29kZSIsCi0iICBwYWdlIHVz ZWQgaW4gQnVsZ2FyaWEiLAotI2VuZGlmIC8qIENZUklMTElDICovCi0jaWZkZWYgSEVCUkVXCi0i ICBIRUJSRVctSVNPIGlzIElTTyA4ODU5LTggTGF0aW4vSGVicmV3LiAgQ1A4NjIgaXMgdGhlIEhl YnJldyBQQyBjb2RlIHBhZ2UuIiwKLSIgIEhFQlJFVy03IGlzIGxpa2UgQVNDSUkgd2l0aCB0aGUg bG93ZXJjYXNlIGxldHRlcnMgcmVwbGFjZWQgYnkgSGVicmV3LiIsCi0jZW5kaWYgLyogSEVCUkVX ICovCi0jaWZkZWYgR1JFRUsKLSIgIEdSRUVLLUlTTyBpcyBJU08gODg1OS03IExhdGluL0dyZWVr LiAgQ1A4NjkgaXMgdGhlIEdyZWVrIFBDIGNvZGUgcGFnZS4iLAotIiAgRUxPVC05MjcgaXMgbGlr ZSBBU0NJSSB3aXRoIHRoZSBsb3dlcmNhc2UgbGV0dGVycyByZXBsYWNlZCBieSBHcmVlay4iLAot I2VuZGlmIC8qIEdSRUVLICovCi0jaWZkZWYgS0FOSkkKLSIgIEpBUEFORVNFLUVVQywgSklTNy1L QU5KSSwgREVDLUtBTkpJLCBhbmQgU0hJRlQtSklTLUtBTkpJIGFyZSBKYXBhbmVzZSIsCi0iICBL YW5qaSBjaGFyYWN0ZXIgc2V0cy4iLAotI2VuZGlmIC8qIEtBTkpJICovCi0jaWZkZWYgVU5JQ09E RQotIiAgVUNTLTIgaXMgdGhlIDItYnl0ZSBmb3JtIG9mIHRoZSBVbml2ZXJzYWwgQ2hhcmFjdGVy IFNldC4iLAotIiAgVVRGLTggaXMgdGhlIHNlcmlhbGl6ZWQgZm9ybSBvZiB0aGUgVW5pdmVyc2Fs IENoYXJhY3RlciBTZXQuIiwKLSNlbmRpZiAvKiBVTklDT0RFICovCi0iICBUeXBlIFNFVCBGSUxF IENIQVIgPyBmb3IgYSBjb21wbGV0ZSBsaXN0IG9mIGZpbGUgY2hhcmFjdGVyIHNldHMuIiwKLSIg IiwKLSJTRVQgRklMRSBERUZBVUxUIDdCSVQtQ0hBUkFDVEVSLVNFVCIsCi0iICBXaGVuIGF1dG9t YXRpY2FsbHkgc3dpdGNoaW5nIGFtb25nIGRpZmZlcmVudCBraW5kcyBvZiBmaWxlcyB3aGlsZSBz ZW5kaW5nIiwKLSIgIHRoaXMgdGVsbHMgdGhlIGNoYXJhY3RlciBzZXQgdG8gYmUgdXNlZCBmb3Ig Ny1iaXQgdGV4dCBmaWxlcy4iLAotIiAiLAotIlNFVCBGSUxFIERFRkFVTFQgOEJJVC1DSEFSQUNU RVItU0VUIiwKLSIgIFRoaXMgdGVsbHMgdGhlIGNoYXJhY3RlciBzZXQgdG8gYmUgdXNlZCBmb3Ig OC1iaXQgdGV4dCBmaWxlcyB3aGVuIiwKLSIgIHN3aXRjaGluZyBhdXRvbWF0aWNhbGx5IGFtb25n IGRpZmZlcmVudCBraW5kcyBvZiBmaWxlcy4iLAotIiAiLAotI2VuZGlmIC8qIE5PQ1NFVFMgKi8K LQotIlNFVCBGSUxFIENPTExJU0lPTiBvcHRpb24iLAotIiAgVGVsbHMgd2hhdCB0byBkbyB3aGVu IGEgZmlsZSBhcnJpdmVzIHRoYXQgaGFzIHRoZSBzYW1lIG5hbWUgYXMiLAotIiAgYW4gZXhpc3Rp bmcgZmlsZS4gIFRoZSBvcHRpb25zIGFyZToiLAotIiAgIEJBQ0tVUCAoZGVmYXVsdCkgLSBSZW5h bWUgdGhlIG9sZCBmaWxlIHRvIGEgbmV3LCB1bmlxdWUgbmFtZSBhbmQgc3RvcmUiLAotIiAgICAg dGhlIGluY29taW5nIGZpbGUgdW5kZXIgdGhlIG5hbWUgaXQgd2FzIHNlbnQgd2l0aC4iLAotIiAg IE9WRVJXUklURSAtIE92ZXJ3cml0ZSAocmVwbGFjZSkgdGhlIGV4aXN0aW5nIGZpbGUuIiwKLSIg ICBBUFBFTkQgLSBBcHBlbmQgdGhlIGluY29taW5nIGZpbGUgdG8gdGhlIGVuZCBvZiB0aGUgZXhp c3RpbmcgZmlsZS4iLAotIiAgIFJFSkVDVCAtIFJlZnVzZSBhbmQvb3IgZGlzY2FyZCB0aGUgaW5j b21pbmcgZmlsZSAoPSBESVNDQVJEKS4iLAotIiAgIFJFTkFNRSAtIEdpdmUgdGhlIGluY29taW5n IGZpbGUgYSB1bmlxdWUgbmFtZS4iLAotIiAgIFVQREFURSAtIEFjY2VwdCB0aGUgaW5jb21pbmcg ZmlsZSBvbmx5IGlmIG5ld2VyIHRoYW4gdGhlIGV4aXN0aW5nIGZpbGUuIiwKLSIgIiwKLQotIlNF VCBGSUxFIERFU1RJTkFUSU9OIHsgRElTSywgUFJJTlRFUiwgU0NSRUVOLCBOT1dIRVJFIH0iLAot IiAgRElTSyAoZGVmYXVsdCk6IFN0b3JlIGluY29taW5nIGZpbGVzIG9uIGRpc2suIiwKLSIgIFBS SU5URVI6ICAgICAgICBTZW5kIGluY29taW5nIGZpbGVzIHRvIFNFVCBQUklOVEVSIGRldmljZS4i LAotIiAgU0NSRUVOOiAgICAgICAgIERpc3BsYXkgaW5jb21pbmcgZmlsZXMgb24gc2NyZWVuIChs b2NhbCBtb2RlIG9ubHkpLiIsCi0iICBOT1dIRVJFOiAgICAgICAgRG8gbm90IHB1dCBpbmNvbWlu ZyBmaWxlcyBhbnl3aGVyZSAodXNlIGZvciBjYWxpYnJhdGlvbikuIiwKLSIgIiwKLSJTRVQgRklM RSBESVNQTEFZIG9wdGlvbiIsCi0iICBTZWxlY3RzIHRoZSBmb3JtYXQgb2YgdGhlIGZpbGUgdHJh bnNmZXIgZGlzcGxheSBmb3IgbG9jYWwtbW9kZSBmaWxlIiwKLSIgIHRyYW5zZmVyLiAgVGhlIGNo b2ljZXMgYXJlOiIsCi0iICIsCi0iICBCUklFRiAgICAgIEEgbGluZSBwZXIgZmlsZSwgc2hvd2lu ZyBzaXplLCBtb2RlLCBzdGF0dXMsIGFuZCB0aHJvdWdocHV0LiIsCi0iICBTRVJJQUwgICAgIE9u ZSBkb3QgaXMgcHJpbnRlZCBmb3IgZXZlcnkgSyBieXRlcyB0cmFuc2ZlcnJlZC4iLAotIiAgQ1JU ICAgICAgICBOdW1iZXJzIGFyZSBjb250aW51b3VzbHkgdXBkYXRlZCBvbiBhIHNpbmdsZSBzY3Jl ZW4gbGluZS4iLAotIiAgICAgICAgICAgICBUaGlzIGZvcm1hdCBjYW4gYmUgdXNlZCBvbiBhbnkg dmlkZW8gZGlzcGxheSB0ZXJtaW5hbC4iLAotI2lmZGVmIENLX0NVUlNFUwotIiAgRlVMTFNDUkVF TiBBIGZ1bGx5IGZvcm1hdHRlZCAyNHg4MCBzY3JlZW4gc2hvd2luZyBsb3RzIG9mIGluZm9ybWF0 aW9uLiIsCi0iICAgICAgICAgICAgIFRoaXMgcmVxdWlyZXMgYSB0ZXJtaW5hbCBvciB0ZXJtaW5h bCBlbXVsYXRvci4iLAotI2VuZGlmIC8qIENLX0NVUlNFUyAqLwotIiAgTk9ORSAgICAgICBObyBm aWxlIHRyYW5zZmVyIGRpc3BsYXkgYXQgYWxsLiIsCi0iICIsCi0KLSJTRVQgRklMRSBET1dOTE9B RC1ESVJFQ1RPUlkgWyA8ZGlyZWN0b3J5LW5hbWU+IF0iLAotIiAgVGhlIGRpcmVjdG9yeSBpbnRv IHdoaWNoIGFsbCByZWNlaXZlZCBmaWxlcyBzaG91bGQgYmUgcGxhY2VkLiAgQnkgZGVmYXVsdCwi LAotIiAgcmVjZWl2ZWQgZmlsZXMgZ28gaW50byB5b3VyIGN1cnJlbnQgZGlyZWN0b3J5LiIsCi0i ICIsCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZmRlZiBDS19DVFJMWgotIlNFVCBGSUxFIEVP RiB7IENUUkwtWiwgTEVOR1RIIH0iLAotIiAgRW5kLU9mLUZpbGUgZGV0ZWN0aW9uIG1ldGhvZCwg bm9ybWFsbHkgTEVOR1RILiAgQXBwbGllcyBvbmx5IHRvIHRleHQtbW9kZSIsCi0iICB0cmFuc2Zl cnMuICBXaGVuIHNldCB0byBDVFJMLVosIHRoaXMgbWFrZXMgdGhlIGZpbGUgc2VuZGVyIHRyZWF0 IHRoZSBmaXJzdCIsCi0iICBDdHJsLVogaW4gdGhlIGlucHV0IGZpbGUgYXMgdGhlIGVuZCBvZiBm aWxlIChFT0YpLCBhbmQgaXQgbWFrZXMgdGhlIGZpbGUiLAotIiAgcmVjZWl2ZXIgdGFjayBhIEN0 cmwtWiBvbnRvIHRoZSBlbmQgb2YgdGhlIG91dHB1dCBmaWxlIGlmIGl0IGRvZXMgbm90IiwKLSIg IGFscmVhZHkgZW5kIHdpdGggQ3RybC1aLiIsCi0iICIsCi0jZW5kaWYgLyogQ0tfQ1RSTFogKi8K LQotIlNFVCBGSUxFIEVORC1PRi1MSU5FIHsgQ1IsIENSTEYsIExGIH0iLAotIiAgVXNlIHRoaXMg Y29tbWFuZCB0byBzcGVjaWZ5IG5vbnN0YW5kYXJkIGxpbmUgdGVybWluYXRvcnMgZm9yIHRleHQg ZmlsZXMuIiwKLSIgIiwKLQotI2lmbmRlZiBOT1hGRVIKLSJTRVQgRklMRSBJTkNPTVBMRVRFIHsg QVVUTywgS0VFUCwgRElTQ0FSRCB9IiwKLSIgIFdoYXQgdG8gZG8gd2l0aCBhbiBpbmNvbXBsZXRl bHkgcmVjZWl2ZWQgZmlsZTogS0VFUCwgRElTQ0FSRCwgb3IgQVVUTy4iLAotIiAgQVVUTyAodGhl IGRlZmF1bHQpIG1lYW5zIERJU0NBUkQgaWYgdHJhbnNmZXIgaXMgaW4gdGV4dCBtb2RlLCBLRUVQ IGlmIGl0IiwKLSIgIGlzIGluIGJpbmFyeSBtb2RlLiIsCi0iICIsCi0jaWZkZWYgVk1TCi0iU0VU IEZJTEUgTEFCRUwgeyBBQ0wsIEJBQ0tVUC1EQVRFLCBOQU1FLCBPV05FUiwgUEFUSCB9IHsgT04s IE9GRiB9IiwKLSIgIFRlbGxzIHdoaWNoIGl0ZW1zIHRvIGluY2x1ZGUgKE9OKSBvciBleGNsdWRl IChPRkYpIGluIGxhYmVsZWQgZmlsZSIsCi0iICB0cmFuc2ZlcnMiLAotIiAiLAotI2Vsc2UKLSNp ZmRlZiBPUzIKLSJTRVQgRklMRSBMQUJFTCB7IEFSQ0hJVkUsIFJFQUQtT05MWSwgSElEREVOLCBT WVNURU0sIEVYVEVOREVEIH0geyBPTiwgT0ZGIH0iLAotIiAgVGVsbHMgd2hpY2ggaXRlbXMgdG8g aW5jbHVkZSAoT04pIG9yIGV4Y2x1ZGUgKE9GRikgaW4gbGFiZWxlZCBmaWxlIiwKLSIgIHRyYW5z ZmVycy4iLAotIiAiLAotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFZNUyAqLwotCi0jaWZk ZWYgVU5JWAotI2lmZGVmIERZTkFNSUMKLSJTRVQgRklMRSBMSVNUU0laRSBudW1iZXIiLAotIiAg Q2hhbmdlcyB0aGUgc2l6ZSBvZiB0aGUgaW50ZXJuYWwgd2lsZGNhcmQgZXhwYW5zaW9uIGxpc3Qu ICBVc2UgU0hPVyBGSUxFIiwKLSIgIHRvIHNlZSB0aGUgY3VycmVudCBzaXplLiAgVXNlIHRoaXMg Y29tbWFuZCB0byBpbmNyZWFzZSB0aGUgc2l6ZSBpZiB5b3UgZ2V0IiwKLSIgIGEgXCI/VG9vIG1h bnkgZmlsZXNcIiBlcnJvci4gIEFsc28gc2VlIFNFVCBGSUxFIFNUUklOR1NQQUNFLiIsCi0iICIs Ci0jZW5kaWYgLyogRFlOQU1JQyAqLwotI2VuZGlmIC8qIFVOSVggKi8KLQotIlNFVCBGSUxFIE5B TUVTIHsgQ09OVkVSVEVELCBMSVRFUkFMIH0iLAotIiAgRmlsZSBuYW1lcyBhcmUgbm9ybWFsbHkg Q09OVkVSVEVEIHRvIFwiY29tbW9uIGZvcm1cIiBkdXJpbmcgdHJhbnNtaXNzaW9uIiwKLSIgIChl LmcuIGxvd2VyY2FzZSB0byB1cHBlcmNhc2UsIGV4dHJhIHBlcmlvZHMgY2hhbmdlZCB0byB1bmRl cnNjb3JlLCBldGMpLiIsCi0iICBMSVRFUkFMIG1lYW5zIHVzZSBmaWxlbmFtZXMgbGl0ZXJhbGx5 ICh1c2VmdWwgYmV0d2VlbiBsaWtlIHN5c3RlbXMpLiAgQWxzbyIsCi0iICBzZWUgU0VUIFNFTkQg UEFUSE5BTUVTIGFuZCBTRVQgUkVDRUlWRSBQQVRITkFNRVMuIiwKLSIgIiwKLQotI2lmZGVmIFVO SVgKLSJTRVQgRklMRSBPVVRQVVQgeyB7IEJVRkZFUkVELCBVTkJVRkZFUkVEIH0gWyBzaXplIF0s IEJMT0NLSU5HLCBOT05CTE9DS0lORyB9IiwKLSIgIExldHMgeW91IGNvbnRyb2wgdGhlIGRpc2sg b3V0cHV0IGJ1ZmZlciBmb3IgaW5jb21pbmcgZmlsZXMuICBCdWZmZXJlZCIsCi0iICBibG9ja2lu ZyB3cml0ZXMgYXJlIG5vcm1hbC4gIE5vbmJsb2NraW5nIHdyaXRlcyBtaWdodCBiZSBmYXN0ZXIg b24gc29tZSIsCi0iICBzeXN0ZW1zIGJ1dCBtaWdodCBhbHNvIGJlIHJpc2t5LCBkZXBlbmRpbmcg b24gdGhlIHVuZGVybHlpbmcgZmlsZSBzZXJ2aWNlLiIsCi0iICBVbmJ1ZmZlcmVkIHdyaXRlcyBt aWdodCBiZSB1c2VmdWwgaW4gY3JpdGljYWwgYXBwbGljYXRpb25zIHRvIGVuc3VyZSB0aGF0IiwK LSIgIGNhY2hlZCBkaXNrIHdyaXRlcyBhcmUgbm90IGxvc3QgaW4gYSBjcmFzaCwgYnV0IHdpbGwg cHJvYmFibHkgYWxzbyBiZSIsCi0iICBzbG93ZXIuICBUaGUgb3B0aW9uYWwgc2l6ZSBwYXJhbWV0 ZXIgYWZ0ZXIgQlVGRkVSRUQgb3IgVU5CVUZGRVJFRCBsZXRzIHlvdSIsCi0iICBjaGFuZ2UgdGhl IGRpc2sgb3V0cHV0IGJ1ZmZlciBzaXplOyB0aGlzIG1pZ2h0IG1ha2UgYSBkaWZmZXJlbmNlIGlu IiwKLSIgIHBlcmZvcm1hbmNlLiIsCi0iICIsCi0jZW5kaWYgLyogVU5JWCAqLwotCi0jaWZkZWYg UEFUVEVSTlMKLSJTRVQgRklMRSBQQVRURVJOUyB7IE9OLCBPRkYsIEFVVE8gfSIsCi0iICBPTiBt ZWFucyB0byB1c2UgZmlsZW5hbWUgcGF0dGVybiBsaXN0cyB0byBkZXRlcm1pbmUgd2hldGhlciB0 byBzZW5kIGEgZmlsZSIsCi0iICBpbiB0ZXh0IG9yIGJpbmFyeSBtb2RlLiAgT0ZGIG1lYW5zIHRv IHNlbmQgYWxsIGZpbGVzIGluIHRoZSBwcmV2YWlsaW5nIiwKLSIgIG1vZGUuICBBVVRPICh0aGUg ZGVmYXVsdCkgaXMgbGlrZSBPTiBpZiB0aGUgb3RoZXIgS2VybWl0IGFjY2VwdHMgQXR0cmlidXRl IiwKLSIgIHBhY2tldHMgYW5kIGxpa2UgT0ZGIG90aGVyd2lzZS4gIEZJTEUgUEFUVEVSTlMgYXJl IHVzZWQgb25seSBpZiBGSUxFIFNDQU4iLAotIiAgaXMgT0ZGIChzZWUgU0VUIEZJTEUgU0NBTiku IiwKLSIgIiwKLSJTRVQgRklMRSBCSU5BUlktUEFUVEVSTlMgWyA8cGF0dGVybj4gWyA8cGF0dGVy bj4gLi4uIF0gXSIsCi0iICBaZXJvIG9yIG1vcmUgZmlsZW5hbWUgcGF0dGVybnMgd2hpY2gsIGlm IG1hdGNoZWQsIGNhdXNlIGEgZmlsZSB0byBiZSBzZW50IiwKLSIgIGluIGJpbmFyeSBtb2RlIHdo ZW4gRklMRSBQQVRURVJOUyBhcmUgT04uICBIRUxQIFdJTERDQVJEUyBmb3IgYSBkZXNjcmlwdGlv biIKLSwKLSIgIG9mIHBhdHRlcm4gc3ludGF4LiAgU0hPVyBQQVRURVJOUyB0byBzZWUgdGhlIGN1 cnJlbnQgZmlsZSBwYXR0ZXJuIGxpc3RzLiIsCi0iICIsCi0iU0VUIEZJTEUgVEVYVC1QQVRURVJO UyBbIDxwYXR0ZXJuPiBbIDxwYXR0ZXJuPiAuLi4gXSBdIiwKLSIgIFplcm8gb3IgbW9yZSBmaWxl bmFtZSBwYXR0ZXJucyB3aGljaCwgaWYgbWF0Y2hlZCwgY2F1c2UgYSBmaWxlIHRvIGJlIHNlbnQi LAotIiAgaW4gdGV4dCBtb2RlIHdoZW4gRklMRSBQQVRURVJOUyBpcyBPTjsgaWYgYSBmaWxlIGRv ZXMgbm90IG1hdGNoIGEgdGV4dCBvciIsCi0iICBiaW5hcnkgcGF0dGVybiwgdGhlIHByZXZhaWxp bmcgU0VUIEZJTEUgVFlQRSBpcyB1c2VkLiIsCi0iICIsCi0jZW5kaWYgLyogUEFUVEVSTlMgKi8K LQotI2lmZGVmIFZNUwotIlNFVCBGSUxFIFJFQ09SRC1MRU5HVEggbnVtYmVyIiwKLSIgIFNldHMg dGhlIHJlY29yZCBsZW5ndGggZm9yIHJlY2VpdmVkIGZpbGVzIG9mIHR5cGUgQklOQVJZLiAgVXNl IHRoaXMgdG8iLAotIiAgcmVjZWl2ZSBWTVMgQkFDS1VQIHNhdmVzZXRzIG9yIG90aGVyIGZpeGVk LWZvcm1hdCBmaWxlcyB0aGF0IGRvIG5vdCB1c2UiLAotIiAgdGhlIGRlZmF1bHQgcmVjb3JkIGxl bmd0aCBvZiA1MTIuIiwKLSIgIiwKLSNlbmRpZiAvKiBWTVMgKi8KLQotIlNFVCBGSUxFIFNDQU4g eyBPTiBbIHNpemUgXSwgT0ZGIH0iLAotIiAgSWYgVFJBTlNGRVIgTU9ERSBpcyBBVVRPTUFUSUMg YW5kIEZJTEUgU0NBTiBpcyBPTiAoYXMgaXQgaXMgYnkgZGVmYXVsdCkiLAotIiAgS2VybWl0IHBl ZWtzIGF0IHRoZSBmaWxlJ3MgY29udGVudHMgdG8gc2VlIGlmIGl0J3MgdGV4dCBvciBiaW5hcnku ICBVc2UiLAotIiAgU0VUIEZJTEUgU0NBTiBPRkYgdG8gZGlzYWJsZSBmaWxlIHBlZWtpbmcsIHdo aWxlIHN0aWxsIGtlZXBpbmcgVFJBTlNGRVIiLAotIiAgTU9ERSBhdXRvbWF0aWMgdG8gYWxsb3cg bmFtZSBwYXR0ZXJucyBhbmQgb3RoZXIgbWV0aG9kcy4gIFRoZSBvcHRpb25hbCIsCi0iICBzaXpl IGlzIHRoZSBudW1iZXIgb2YgZmlsZSBieXRlcyB0byBzY2FuLCA0OTE1MiBieSBkZWZhdWx0LiAg LTEgbWVhbnMgdG8iLAotIiAgc2NhbiB0aGUgd2hvbGUgZmlsZS4gIEFsc28gc2VlIFNFVCBGSUxF IFBBVFRFUk5TLiIsCi0iICIsCi0KLSNpZmRlZiBVTklYCi0jaWZkZWYgRFlOQU1JQwotIlNFVCBG SUxFIFNUUklOR1NQQUNFIG51bWJlciIsCi0iICBDaGFuZ2VzIHRoZSBzaXplIChpbiBieXRlcykg b2YgdGhlIGludGVybmFsIGJ1ZmZlciB0aGF0IGhvbGRzIGxpc3RzIG9mIiwKLSIgIGZpbGVuYW1l cyBzdWNoIGFzIHdpbGRjYXJkIGV4cGFuc2lvbiBsaXN0cy4gIFVzZSBTSE9XIEZJTEUgdG8gc2Vl IHRoZSIsCi0iICBjdXJyZW50IHNpemUuICBVc2UgdGhpcyBjb21tYW5kIHRvIGluY3JlYXNlIHRo ZSBzaXplIGlmIHlvdSBnZXQgYSIsCi0iICBcIj9TdHJpbmcgc3BhY2UgZXhoYXVzdGVkXCIgZXJy b3IuICBBbHNvIHNlZSBTRVQgRklMRSBMSVNUU0laRS4iLAotIiAiLAotI2VuZGlmIC8qIERZTkFN SUMgKi8KLSNlbmRpZiAvKiBVTklYICovCi0KLSNpZmRlZiBVTklDT0RFCi0iU0VUIEZJTEUgVUNT IEJPTSB7IE9OLCBPRkYgfSIsCi0iICBXaGV0aGVyIHRvIHdyaXRlIGEgQnl0ZSBPcmRlciBNYXJr IHdoZW4gY3JlYXRpbmcgYSBVQ1MtMiBmaWxlLiIsCi0iICIsCi0iU0VUIEZJTEUgVUNTIEJZVEUt T1JERVIgeyBCSUctRU5ESUFOLCBMSVRUTEUtRU5ESUFOIH0iLAotIiAgQnl0ZSBvcmRlciB0byB1 c2Ugd2hlbiBjcmVhdGluZyBVQ1MtMiBmaWxlcywgYW5kIHRvIHVzZSB3aGVuIHJlYWRpbmcgVUNT LTIiLAotIiAgZmlsZXMgdGhhdCBkbyBub3Qgc3RhcnQgd2l0aCBhIEJ5dGUgT3JkZXIgTWFyay4i LAotIiAiLAotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQotIlNFVCBGSUxFIFdBUk5JTkcgeyBPTiwg T0ZGIH0iLAotIiAgU0VUIEZJTEUgV0FSTklORyBpcyBzdXBlcnNlZGVkIGJ5IHRoZSBuZXdlciBj b21tYW5kLCBTRVQgRklMRSIsCi0iICBDT0xMSVNJT04uICBTRVQgRklMRSBXQVJOSU5HIE9OIGlz IGVxdWl2YWxlbnQgdG8gU0VUIEZJTEUgQ09MTElTSU9OIFJFTkFNRSIsCi0iICBhbmQgU0VUIEZJ TEUgV0FSTklORyBPRkYgaXMgZXF1aXZhbGVudCB0byBTRVQgRklMRSBDT0xMSVNJT04gT1ZFUldS SVRFLiIsCi0jZW5kaWYgLyogTk9YRkVSICovCi0iIiB9OwotCi1zdGF0aWMgY2hhciAqaG14eWhz aFtdID0gewotIlN5bnRheDogU0VUIEhBTkRTSEFLRSB7IE5PTkUsIFhPTiwgTEYsIEJFTEwsIEVT QywgQ09ERSBudW1iZXIgfSIsCi0iICBDaGFyYWN0ZXIgdG8gdXNlIGZvciBoYWxmIGR1cGxleCBs aW5lIHR1cm5hcm91bmQgaGFuZHNoYWtlIGR1cmluZyBmaWxlIiwKLSIgIHRyYW5zZmVyLiAgQy1L ZXJtaXQgd2FpdHMgZm9yIHRoaXMgY2hhcmFjdGVyIGZyb20gdGhlIG90aGVyIGNvbXB1dGVyIiwK LSIgIGJlZm9yZSBzZW5kaW5nIGl0cyBuZXh0IHBhY2tldC4gIERlZmF1bHQgaXMgTk9ORTsgeW91 IGNhbiBnaXZlIG9uZSBvZiB0aGUiLAotIiAgb3RoZXIgbmFtZXMgbGlrZSBCRUxMIG9yIEVTQywg b3IgdXNlIFNFVCBIQU5EU0hBS0UgQ09ERSB0byBzcGVjaWZ5IHRoZSIsCi0iICBudW1lcmljIGNv ZGUgdmFsdWUgb2YgdGhlIGhhbmRzaGFrZSBjaGFyYWN0ZXIuICBUeXBlIFNFVCBIQU5EU0ggPyBm b3IgYSIsCi0iICBjb21wbGV0ZSBsaXN0IG9mIHBvc3NpYmlsaXRpZXMuIiwKLSIiIH07Ci0KLSNp Zm5kZWYgTk9TRVJWRVIKLXN0YXRpYyBjaGFyICpoc2V0c3J2W10gPSB7Ci0iU0VUIFNFUlZFUiBD RC1NRVNTQUdFIHtPTixPRkZ9IiwKLSIgIFRlbGxzIHdoZXRoZXIgdGhlIHNlcnZlciwgYWZ0ZXIg c3VjY2Vzc2Z1bGx5IGV4ZWN1dGluZyBhIFJFTU9URSBDRCIsCi0iICBjb21tYW5kLCBzaG91bGQg c2VuZCB0aGUgY29udGVudHMgb2YgdGhlIG5ldyBkaXJlY3RvcnkncyBSRUFELk1FIiwKLSIgIChv ciBzaW1pbGFyKSBmaWxlIHRvIHlvdXIgc2NyZWVuLiIsCi0iICIsCi0iU0VUIFNFUlZFUiBDRC1N RVNTQUdFIEZJTEUgbmFtZSIsCi0iICBUZWxscyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byBiZSBk aXNwbGF5ZWQgYXMgYSBDRC1NRVNTQUdFLCBzdWNoIGFzIiwKLSIgIFJFQUQuTUUgKFNIT1cgU0VS VkVSIHRlbGxzIHRoZSBjdXJyZW50IENELU1FU1NBR0UgRklMRSBuYW1lKS4iLAotIiAgVG8gc3Bl Y2lmeSBtb3JlIHRoYW4gb25lIGZpbGVuYW1lIHRvIGxvb2sgZm9yLCB1c2Uge3tuYW1lMX17bmFt ZTJ9Li59LiIsCi0iICBTeW5vbnltOiBTRVQgQ0QgTUVTU0FHRSBGSUxFIDxsaXN0Pi4iLAotIiAi LAotIlNFVCBTRVJWRVIgRElTUExBWSB7T04sT0ZGfSIsCi0iICBUZWxscyB3aGV0aGVyIGxvY2Fs LW1vZGUgQy1LZXJtaXQgZHVyaW5nIHNlcnZlciBvcGVyYXRpb24gc2hvdWxkIHB1dCBhIiwKLSIg IGZpbGUgdHJhbnNmZXIgZGlzcGxheSBvbiB0aGUgc2NyZWVuLiAgRGVmYXVsdCBpcyBPRkYuIiwK LSIgIiwKLSJTRVQgU0VSVkVSIEdFVC1QQVRIIFsgZGlyZWN0b3J5IFsgZGlyZWN0b3J5IFsgLi4u IF0gXSBdIiwKLSIgIFRlbGxzIHRoZSBDLUtlcm1pdCBzZXJ2ZXIgd2hlcmUgdG8gbG9vayBmb3Ig ZmlsZXMgd2hvc2UgbmFtZXMgaXQgcmVjZWl2ZXMiLAotIiAgZnJvbSBjbGllbnQgR0VUIGNvbW1h bmRzIHdoZW4gdGhlIG5hbWVzIGFyZSBub3QgZnVsbHkgc3BlY2lmaWVkIHBhdGhuYW1lcy4iLAot IiAgRGVmYXVsdCBpcyBubyBHRVQtUEFUSCwgc28gQy1LZXJtaXQgbG9va3Mgb25seSBpbiBpdHMg Y3VycmVudCBkaXJlY3RvcnkuIiwKLSIgIiwKLSJTRVQgU0VSVkVSIElETEUtVElNRU9VVCBzZWNv bmRzIiwKLSIgIElkbGUgdGltZSBsaW1pdCB3aGlsZSBpbiBzZXJ2ZXIgbW9kZSwgMCBmb3Igbm8g bGltaXQuIiwKLSNpZm5kZWYgT1MyCi0iICBOT1RFOiBTRVJWRVIgSURMRS1USU1FT1VUIGFuZCBT RVJWRVIgVElNRU9VVCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIsCi0jZW5kaWYgLyogT1MyICov Ci0iICIsCi0iU0VUIFNFUlZFUiBLRUVQQUxJVkUge09OLE9GRn0iLAotIiAgVGVsbHMgd2hldGhl ciBDLUtlcm1pdCBzaG91bGQgc2VuZCBcImtlZXBhbGl2ZVwiIHBhY2tldHMgd2hpbGUgZXhlY3V0 aW5nIiwKLSIgIFJFTU9URSBIT1NUIGNvbW1hbmRzLCB3aGljaCBpcyB1c2VmdWwgaW4gY2FzZSB0 aGUgY29tbWFuZCB0YWtlcyBhIGxvbmciLAotIiAgdGltZSB0byBwcm9kdWNlIGFueSBvdXRwdXQg YW5kIHRoZXJlZm9yZSBtaWdodCBjYXVzZSB0aGUgb3BlcmF0aW9uIHRvIHRpbWUiLAotIiAgb3V0 LiAgT04gYnkgZGVmYXVsdDsgdHVybiBpdCBPRkYgaWYgaXQgY2F1c2VzIHRyb3VibGUgd2l0aCB0 aGUgY2xpZW50IG9yIiwKLSIgIHNsb3dzIGRvd24gdGhlIHNlcnZlciB0b28gbXVjaC4iLAotIiAi LAotIlNFVCBTRVJWRVIgTE9HSU4gWyB1c2VybmFtZSBbIHBhc3N3b3JkIFsgYWNjb3VudCBdIF0g XSIsCi0iICBTZXRzIHVwIGEgdXNlcm5hbWUgYW5kIG9wdGlvbmFsIHBhc3N3b3JkIHdoaWNoIG11 c3QgYmUgc3VwcGxpZWQgYmVmb3JlIiwKLSIgIHRoZSBzZXJ2ZXIgd2lsbCByZXNwb25kIHRvIGFu eSBjb21tYW5kcyBvdGhlciB0aGFuIFJFTU9URSBMT0dJTi4gIFRoZSIsCi0iICBhY2NvdW50IGlz IGlnbm9yZWQuICBJZiB5b3UgZW50ZXIgU0VUIFNFUlZFUiBMT0dJTiBieSBpdHNlbGYsIHRoZW4g bG9naW4iLAotIiAgaXMgbm8gbG9uZ2VyIHJlcXVpcmVkLiAgT25seSBvbmUgU0VUIFNFUlZFUiBM T0dJTiBjb21tYW5kIGNhbiBiZSBpbiBlZmZlY3QiLAotIiAgYXQgYSB0aW1lOyBDLUtlcm1pdCBk b2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIHVzZXIvcGFzc3dvcmQgcGFpcnMuIiwKLSIgIiwKLSJT RVQgU0VSVkVSIFRJTUVPVVQgbiIsCi0iICBTZXJ2ZXIgY29tbWFuZCB3YWl0IHRpbWVvdXQgaW50 ZXJ2YWwsIGhvdyBvZnRlbiB0aGUgQy1LZXJtaXQgc2VydmVyIGlzc3VlcyIsCi0iICBhIE5BSyB3 aGlsZSB3YWl0aW5nIGZvciBhIGNvbW1hbmQgcGFja2V0LiAgU3BlY2lmeSAwIGZvciBubyBOQUtz IGF0IGFsbC4iLAotIiAgRGVmYXVsdCBpcyAwLiIsCi0iIgotfTsKLSNlbmRpZiAvKiBOT1NFUlZF UiAqLwotCi1zdGF0aWMgY2hhciAqaG1ocm10W10gPSB7Ci0jaWZkZWYgTkVXRlRQCi0iVGhlIFJF TU9URSBjb21tYW5kIHNlbmRzIGZpbGUgbWFuYWdlbWVudCBpbnN0cnVjdGlvbnMgb3Igb3RoZXIg Y29tbWFuZHMiLAotInRvIGEgS2VybWl0IG9yIEZUUCBzZXJ2ZXIuICBJZiB5b3UgaGF2ZSBhIHNp bmdsZSBjb25uZWN0aW9uLCB0aGUgY29tbWFuZCBpcyIsCi0iZGlyZWN0ZWQgdG8gdGhlIHNlcnZl ciB5b3UgYXJlIGNvbm5lY3RlZCB0bzsgaWYgeW91IGhhdmUgbXVsdGlwbGUgY29ubmVjdGlvbnMi Ci0sCi0idGhlIGNvbW1hbmQgaXMgZGlyZWN0ZWQgYWNjb3JkaW5nIHRvIHlvdXIgR0VULVBVVC1S RU1PVEUgc2V0dGluZy4iLAotI2Vsc2UKLSJUaGUgUkVNT1RFIGNvbW1hbmQgc2VuZHMgZmlsZSBt YW5hZ2VtZW50IGluc3RydWN0aW9ucyBvciBvdGhlciBjb21tYW5kcyIsCi0idG8gYSBLZXJtaXQg c2VydmVyLiAgVGhlcmUgc2hvdWxkIGFscmVhZHkgYmUgYSBLZXJtaXQgcnVubmluZyBpbiBzZXJ2 ZXIiLAotIm1vZGUgb24gdGhlIG90aGVyIGVuZCBvZiB0aGUgY29ubmVjdGlvbi4iLAotI2VuZGlm IC8qIE5FV0ZUUCAqLwotIlR5cGUgUkVNT1RFID8gdG8gc2VlIGEgbGlzdCBvZiBhdmFpbGFibGUg cmVtb3RlIGNvbW1hbmRzLiAgVHlwZSBIRUxQIFJFTU9URSIsCi0ieHh4IHRvIGdldCBmdXJ0aGVy IGluZm9ybWF0aW9uIGFib3V0IGEgcGFydGljdWxhciByZW1vdGUgY29tbWFuZCB4eHguIiwKLSIg IiwKLSJBbGwgUkVNT1RFIGNvbW1hbmRzIGV4Y2VwdCBMT0dJTiBhbmQgTE9HT1VUIGhhdmUgUi1j b21tYW5kIHNob3J0Y3V0czsiLAotImZvciBleGFtcGxlLCBSRElSIGZvciBSRU1PVEUgRElSLCBS Q0QgZm9yIFJFTU9URSBDRCwgZXRjLiIsCi0iICIsCi0jaWZkZWYgTkVXRlRQCi0jaWZkZWYgTE9D VVMKLSJBbHNvIHNlZTogSEVMUCBTRVQgTE9DVVMsIEhFTFAgRlRQLCBIRUxQIFNFVCBHRVQtUFVU LVJFTU9URS4iLAotI2Vsc2UKLSJBbHNvIHNlZTogSEVMUCBGVFAsIEhFTFAgU0VUIEdFVC1QVVQt UkVNT1RFLiIsCi0jZW5kaWYgLyogTE9DVVMgKi8KLSNlbHNlCi0jaWZkZWYgTE9DVVMKLSJBbHNv IHNlZTogSEVMUCBTRVQgTE9DVVMuIiwKLSNlbmRpZiAvKiBMT0NVUyAqLwotI2VuZGlmIC8qIE5F V0ZUUCAqLwotIiIgfTsKLQotI2lmbmRlZiBOT1NQTAotc3RhdGljIGNoYXIgKmlmaGxwW10gPSB7 ICJTeW50YXg6IElGIFtOT1RdIGNvbmRpdGlvbiBjb21tYW5kbGlzdCIsCi0iICIsCi0iSWYgdGhl IGNvbmRpdGlvbiBpcyAoaXMgbm90KSB0cnVlLCBkbyB0aGUgY29tbWFuZGxpc3QuICBUaGUgY29t bWFuZGxpc3QiLAotImNhbiBiZSBhIHNpbmdsZSBjb21tYW5kLCBvciBhIGxpc3Qgb2YgY29tbWFu ZHMgc2VwYXJhdGVkIGJ5IGNvbW1hcyBhbmQiLAotImVuY2xvc2VkIGluIGJyYWNlcy4gIFRoZSBj b25kaXRpb24gY2FuIGJlIGEgc2luZ2xlIGNvbmRpdGlvbiBvciBhIGdyb3VwIG9mIiwKLSJjb25k aXRpb25zIHNlcGFyYXRlZCBieSBBTkQgKCYmKSBvciBPUiAofHwpIGFuZCBlbmNsb3NlZCBpbiBw YXJlbnRoZXNlcy4iLAotIklmIHBhcmVudGhlc2VzIGFyZSB1c2VkIHRoZXkgbXVzdCBiZSBzdXJy b3VuZGVkIGJ5IHNwYWNlcy4gIEV4YW1wbGVzOiIsCi0iICIsCi0iICBJRiBFWElTVCBvb2ZhLnR4 dCA8Y29tbWFuZD4iLAotIiAgSUYgKCBFWElTVCBvb2ZhLnR4dCB8fCA9IFxcdihuZGF5KSAzICkg PGNvbW1hbmQ+IiwKLSIgIElGICggRVhJU1Qgb29mYS50eHQgfHwgPSBcXHYobmRheSkgMyApIHsg PGNvbW1hbmQ+LCA8Y29tbWFuZD4sIC4uLiB9IiwKLSIgIiwKLSJUaGUgY29uZGl0aW9ucyBhcmU6 IiwKLSIgIiwKLSIgIFNVQ0NFU1MgICAgIC0gVGhlIHByZXZpb3VzIGNvbW1hbmQgc3VjY2VlZGVk IiwKLSIgIE9LICAgICAgICAgIC0gU3lub255bSBmb3IgU1VDQ0VTUyIsCi0iICBGQUlMVVJFICAg ICAtIFRoZSBwcmV2aW91cyBjb21tYW5kIGZhaWxlZCIsCi0iICBFUlJPUiAgICAgICAtIFN5bm9u eW0gZm9yIEZBSUxVUkUiLAotIiAgRkxBRyAgICAgICAgLSBTdWNjZWVkcyBpZiBTRVQgRkxBRyBP TiwgZmFpbHMgaWYgU0VUIEZMQUcgT0ZGIiwKLSIgIEJBQ0tHUk9VTkQgIC0gQy1LZXJtaXQgaXMg cnVubmluZyBpbiB0aGUgYmFja2dyb3VuZCIsCi0jaWZkZWYgQ0tfSUZSTwotIiAgRk9SRUdST1VO RCAgLSBDLUtlcm1pdCBpcyBydW5uaW5nIGluIHRoZSBmb3JlZ3JvdW5kIiwKLSIgIFJFTU9URS1P TkxZIC0gQy1LZXJtaXQgd2FzIHN0YXJ0ZWQgd2l0aCB0aGUgLVIgY29tbWFuZC1saW5lIG9wdGlv biIsCi0jZWxzZQotIiAgRk9SRUdST1VORCAgLSBDLUtlcm1pdCBpcyBydW5uaW5nIGluIHRoZSBm b3JlZ3JvdW5kIiwKLSNlbmRpZiAvKiBDS19JRlJPICovCi0iICBLRVJCQU5HICAgICAtIEEgS2Vy YmFuZyBzY3JpcHQgaXMgcnVubmluZyIsCi0iICBBTEFSTSAgICAgICAtIFNFVCBBTEFSTSB0aW1l IGhhcyBwYXNzZWQiLAotIiAgQVNLVElNRU9VVCAgLSBUaGUgbW9zdCByZWNlbnQgQVNLLCBBU0tR LCBHRVRDLCBvciBHRVRPSyB0aW1lZCBvdXQiLAotIiAgRU1VTEFUSU9OICAgLSBTdWNjZWVkcyBp ZiBleGVjdXRlZCB3aGlsZSBpbiBDT05ORUNUIG1vZGUiLAotI2lmZGVmIE9TMgotIiAgVEFQSSAg ICAgICAgLSBDdXJyZW50IGNvbm5lY3Rpb24gaXMgdmlhIGEgTWljcm9zb2Z0IFRBUEkgZGV2aWNl IiwKLSNlbmRpZiAvKiBPUzIgKi8KLSIgIiwKLSIgIE1TLUtFUk1JVCAgIC0gUHJvZ3JhbSBpcyBN Uy1ET1MgS2VybWl0IiwKLSIgIEMtS0VSTUlUICAgIC0gUHJvZ3JhbSBpcyBDLUtlcm1pdCIsCi0i ICBLLTk1ICAgICAgICAtIFByb2dyYW0gaXMgS2VybWl0IDk1IiwKLSIgIEdVSSAgICAgICAgIC0g UHJvZ3JhbSBydW5zIGluIGEgR1VJIHdpbmRvdyIsCi0iICIsCi0iICBBVkFJTEFCTEUgQ1JZUFRP ICAgICAgICAgICAgICAgICAgLSBFbmNyeXB0aW9uIGlzIGF2YWlsYWJsZSIsCi0iICBBVkFJTEFC TEUgS0VSQkVST1M0ICAgICAgICAgICAgICAgLSBLZXJiZXJvcyA0IGF1dGhlbnRpY2F0aW9uIGlz IGF2YWlsYWJsZSIsCi0iICBBVkFJTEFCTEUgS0VSQkVST1M1ICAgICAgICAgICAgICAgLSBLZXJi ZXJvcyA1IGF1dGhlbnRpY2F0aW9uIGlzIGF2YWlsYWJsZSIsCi0iICBBVkFJTEFCTEUgTlRMTSAg ICAgICAgICAgICAgICAgICAgLSBOVExNIGF1dGhlbnRpY2F0aW9uIGlzIGF2YWlsYWJsZSIsCi0i ICBBVkFJTEFCTEUgU1JQICAgICAgICAgICAgICAgICAgICAgLSBTUlAgYXV0aGVudGljYXRpb24g aXMgYXZhaWxhYmxlIiwKLSIgIEFWQUlMQUJMRSBTU0wgICAgICAgICAgICAgICAgICAgICAtIFNT TC9UTFMgYXV0aGVudGljYXRpb24gaXMgYXZhaWxhYmxlIiwKLSIgIE1BVENIIHN0cmluZyBwYXR0 ZXJuICAgICAgICAgICAgICAtIFN1Y2NlZWRzIGlmIHN0cmluZyBtYXRjaGVzIHBhdHRlcm4iLAot I2lmZGVmIENLRkxPQVQKLSIgIEZMT0FUIG51bWJlciAgICAgICAgICAgICAgICAgICAgICAtIFN1 Y2NlZWRzIGlmIGZsb2F0aW5nLXBvaW50IG51bWJlciIsCi0jZW5kaWYgLyogQ0tGTE9BVCAqLwot IiAgQ09NTUFORCB3b3JkICAgICAgICAgICAgICAgICAgICAgIC0gU3VjY2VlZHMgaWYgd29yZCBp cyBidWlsdC1pbiBjb21tYW5kIiwKLSIgIERFRklORUQgdmFyaWFibGVuYW1lIG9yIG1hY3JvbmFt ZSAtIFRoZSBuYW1lZCB2YXJpYWJsZSBvciBtYWNybyBpcyBkZWZpbmVkIiwKLSIgIERFQ0xBUkVE IGFycmF5bmFtZSAgICAgICAgICAgICAgICAtIFRoZSBuYW1lZCBhcnJheSBpcyBkZWNsYXJlZCIs Ci0iICBOVU1FUklDIHZhcmlhYmxlIG9yIGNvbnN0YW50ICAgICAgLSBUaGUgdmFyaWFibGUgb3Ig Y29uc3RhbnQgaXMgbnVtZXJpYyIsCi0iICBFWElTVCBmaWxlbmFtZSAgICAgICAgICAgICAgICAg ICAgLSBUaGUgbmFtZWQgZmlsZSBleGlzdHMiLAotIiAgQUJTT0xVVEUgZmlsZW5hbWUgICAgICAg ICAgICAgICAgIC0gVGhlIGZpbGVuYW1lIGlzIGFic29sdXRlLCBub3QgcmVsYXRpdmUiLAotI2lm ZGVmIENLX1RNUERJUgotIiAgRElSRUNUT1JZIHN0cmluZyAgICAgICAgICAgICAgICAgIC0gVGhl IHN0cmluZyBpcyB0aGUgbmFtZSBvZiBhIGRpcmVjdG9yeSIsCi0jZW5kaWYgLyogQ0tfVE1QRElS ICovCi0jaWZkZWYgVU5JWAotIiAgTElOSyBzdHJpbmcgICAgICAgICAgICAgICAgICAgICAgIC0g VGhlIHN0cmluZyBpcyBhIHN5bWJvbGljIGxpbmsiLAotI2VuZGlmCS8qIFVOSVggKi8KLSIgIFJF QURBQkxFIGZpbGVuYW1lICAgICAgICAgICAgICAgICAtIFN1Y2NlZWRzIGlmIHRoZSBmaWxlIGlz IHJlYWRhYmxlIiwKLSIgIFdSSVRFQUJMRSBmaWxlbmFtZSAgICAgICAgICAgICAgICAtIFN1Y2Nl ZWRzIGlmIHRoZSBmaWxlIGlzIHdyaXRlYWJsZSIsCi0jaWZkZWYgWkZDREFUCi0iICBORVdFUiBm aWxlMSBmaWxlMiAgICAgICAgICAgICAgICAgLSBUaGUgMXN0IGZpbGUgaXMgbmV3ZXIgdGhhbiB0 aGUgMm5kIG9uZSIsCi0jZW5kaWYgLyogWkZDREFUICovCi0iICBPUEVOIHsgUkVBRC1GSUxFLFNF U1NJT04tTE9HLC4uLn0gLSBUaGUgZ2l2ZW4gZmlsZSBvciBsb2cgaXMgb3BlbiIsCi0jaWZuZGVm IE5PTE9DQUwKLSIgIE9QRU4gQ09OTkVDVElPTiAgICAgICAgICAgICAgICAgICAtIEEgY29ubmVj dGlvbiBpcyBvcGVuIiwKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0iICBLQkhJVCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLSBBIGtleSBoYXMgYmVlbiBwcmVzc2VkIiwKLSIgIiwKLSIgIFZF UlNJT04gLSBlcXVpdmFsZW50IHRvIFwiaWYgPj0gXFx2KHZlcnNpb24pIC4uLlwiIiwKLSIgIENP VU5UICAgLSBzdWJ0cmFjdCBvbmUgZnJvbSBDT1VOVCwgZXhlY3V0ZSB0aGUgY29tbWFuZCBpZiB0 aGUgcmVzdWx0IGlzIiwKLSIgICAgICAgICAgICBncmVhdGVyIHRoYW4gemVybyAoc2VlIFNFVCBD T1VOVCkiLAotIiAiLAotIiAgRVFVQUwgczEgczIgLSBzMSBhbmQgczIgKGNoYXJhY3RlciBzdHJp bmdzIG9yIHZhcmlhYmxlcykgYXJlIGVxdWFsIiwKLSIgIExMVCBzMSBzMiAgIC0gczEgaXMgbGV4 aWNhbGx5IChhbHBoYWJldGljYWxseSkgbGVzcyB0aGFuIHMyIiwKLSIgIExHVCBzMSBzMSAgIC0g czEgaXMgbGV4aWNhbGx5IChhbHBoYWJldGljYWxseSkgZ3JlYXRlciB0aGFuIHMyIiwKLSIgIiwK LSIgID0gIG4xIG4yIC0gbjEgYW5kIG4yIChudW1iZXJzIG9yIHZhcmlhYmxlcyBjb250YWluaW5n IG51bWJlcnMpIGFyZSBlcXVhbCIsCi0iICA8ICBuMSBuMiAtIG4xIGlzIGFyaXRobWV0aWNhbGx5 IGxlc3MgdGhhbiBuMiIsCi0iICA8PSBuMSBuMiAtIG4xIGlzIGFyaXRobWV0aWNhbGx5IGxlc3Mg dGhhbiBvciBlcXVhbCB0byBuMiIsCi0iICA+ICBuMSBuMiAtIG4xIGlzIGFyaXRobWV0aWNhbGx5 IGdyZWF0ZXIgdGhhbiBuMiIsCi0iICA+PSBuMSBuMiAtIG4xIGlzIGFyaXRobWV0aWNhbGx5IGdy ZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBuMiIsCi0iICIsCi0iICAobnVtYmVyIGJ5IGl0c2VsZikg LSBmYWlscyBpZiB0aGUgbnVtYmVyIGlzIDAsIHN1Y2NlZWRzIG90aGVyd2lzZSIsCi0iICIsCi0i ICBUUlVFICAgICAtIGFsd2F5cyBzdWNjZWVkcyIsCi0iICBGQUxTRSAgICAtIGFsd2F5cyBmYWls cyIsCi0iICIsCi0iVGhlIElGIGNvbW1hbmQgbWF5IGJlIGZvbGxvd2VkIG9uIHRoZSBuZXh0IGxp bmUgYnkgYW4gRUxTRSBjb21tYW5kLiBFeGFtcGxlOiIsCi0iICIsCi0iICBJRiA8IFxcJXggMTAg RUNITyBJdCdzIGxlc3MiLAotIiAgRUxTRSBlY2hvIEl0J3Mgbm90IGxlc3MiLAotIiAiLAotIkl0 IGNhbiBhbHNvIGluY2x1ZGUgYW4gRUxTRSBwYXJ0IG9uIHRoZSBzYW1lIGxpbmUgaWYgYnJhY2Vz IGFyZSB1c2VkOiIsCi0iICIsCi0iICBJRiA8IFxcJXggMTAgeyBFQ0hPIEl0J3MgbGVzcyB9IEVM U0UgeyBFQ0hPIEl0J3Mgbm90IGxlc3MgfSIsCi0iICIsCi0iQWxzbyBzZWUgSEVMUCBXSUxEQ0FS RCAoZm9yIElGIE1BVENIIHBhdHRlcm4gc3ludGF4KS4iLAotIiIgfTsKLQotc3RhdGljIGNoYXIg KmhteHhldmFsW10gPSB7ICJTeW50YXg6IEVWQUxVQVRFIHZhcmlhYmxlIGV4cHJlc3Npb24iLAot IiAgRXZhbHVhdGVzIHRoZSBleHByZXNzaW9uIGFuZCBhc3NpZ25zIGl0cyB2YWx1ZSB0byB0aGUg Z2l2ZW4gdmFyaWFibGUuIiwKLSIgIFRoZSBleHByZXNzaW9uIGNhbiBjb250YWluIG51bWJlcnMg YW5kL29yIG51bWVyaWMtdmFsdWVkIHZhcmlhYmxlcyBvciIsCi0iICBmdW5jdGlvbnMsIGNvbWJp bmVkIHdpdGggbWF0aGVtYXRpY2FsIG9wZXJhdG9ycyBhbmQgcGFyZW50aGVzZXMgaW4iLAotIiAg dHJhZGl0aW9uYWwgbm90YXRpb24uICBPcGVyYXRvcnMgaW5jbHVkZSArLS8qKCksIGV0Yy4gIEV4 YW1wbGU6IiwKLSIgIEVWQUxVQVRFIFxcJW4gKDErMSkgKiAoXFwlYSAvIDMpLiIsCi0iICIsCi0i ICBOT1RFOiBQcmlvciB0byBDLUtlcm1pdCA3LjAsIHRoZSBzeW50YXggd2FzIFwiRVZBTFVBVEUg ZXhwcmVzc2lvblwiIiwKLSIgIChubyB2YXJpYWJsZSksIGFuZCB0aGUgcmVzdWx0IHdhcyBwcmlu dGVkLiAgVXNlIFNFVCBFVkFMIHsgT0xELCBORVcgfSIsCi0iICB0byBjaG9vc2UgdGhlIG9sZCBv ciBuZXcgYmVoYXZpb3IsIHdoaWNoIGlzIE5FVyBieSBkZWZhdWx0LiIsCi0iICIsCi0iQWxzZSBz ZWU6IEhFTFAgRlVOQ1RJT04gRVZBTC4iLAotIiIgfTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi1z dGF0aWMgY2hhciAqaG14eGV4aXRbXSA9IHsKLSJTeW50YXg6IEVYSVQgKG9yIFFVSVQpIFsgbnVt YmVyIFsgdGV4dCBdIF0iLAotIiAgRXhpdHMgZnJvbSB0aGUgS2VybWl0IHByb2dyYW0sIGNsb3Np bmcgYWxsIG9wZW4gZmlsZXMgYW5kIGRldmljZXMuIiwKLSIgIElmIGEgbnVtYmVyIGlzIGdpdmVu IGl0IGJlY29tZXMgS2VybWl0J3MgZXhpdCBzdGF0dXMgY29kZS4gIElmIHRleHQgaXMiLAotIiAg aW5jbHVkZWQsIGl0IGlzIHByaW50ZWQuICBBbHNvIHNlZSBTRVQgRVhJVC4iLAotIiIgfTsKLQot I2lmbmRlZiBOT1NQTAotc3RhdGljIGNoYXIgKmlmeGhscFtdID0geyAiXAotU3ludGF4OiBYSUYg Y29uZGl0aW9uIHsgY29tbWFuZGxpc3QgfSBbIEVMU0UgeyBjb21tYW5kbGlzdCB9IF0iLAotIiAg T2Jzb2xldGUuICBTYW1lIGFzIElGIChzZWUgSEVMUCBJRikuIiwKLSIiIH07Ci0KLXN0YXRpYyBj aGFyICpmb3JobHBbXSA9IHsgIlwKLVN5bnRheDogRk9SIHZhcmlhYmxlbmFtZSBpbml0aWFsLXZh bHVlIGZpbmFsLXZhbHVlIGluY3JlbWVudCB7IGNvbW1hbmRsaXN0IH0iLAotIiAgRk9SIGxvb3Au ICBFeGVjdXRlIHRoZSBjb21tYS1zZXBhcmF0ZWQgY29tbWFuZHMgaW4gdGhlIGNvbW1hbmRsaXN0 IHRoZSIsCi0iICBudW1iZXIgb2YgdGltZXMgZ2l2ZW4gYnkgdGhlIGluaXRpYWwgdmFsdWUsIGZp bmFsIHZhbHVlIGFuZCBpbmNyZW1lbnQuIiwKLSIgIEV4YW1wbGU6ICBGT1IgXFwlaSAxMCAxIC0x IHsgcGF1c2UgMSwgZWNobyBcXCVpIH0iLCAiIiB9OwotCi1zdGF0aWMgY2hhciAqd2hpaGxwW10g PSB7ICJcCi1TeW50YXg6IFdISUxFIGNvbmRpdGlvbiB7IGNvbW1hbmRsaXN0IH0iLAotIiAgV0hJ TEUgbG9vcC4gIEV4ZWN1dGUgdGhlIGNvbW1hLXNlcGFyYXRlZCBjb21tYW5kcyBpbiB0aGUgYnJh Y2tldGVkIiwKLSIgIGNvbW1hbmRsaXN0IHdoaWxlIHRoZSBjb25kaXRpb24gaXMgdHJ1ZS4gIENv bmRpdGlvbnMgYXJlIHRoZSBzYW1lIGFzIGZvciIsCi0iICBJRiBjb21tYW5kcy4iLAotIiIgfTsK LQotc3RhdGljIGNoYXIgKnN3aWhscFtdID0gewotIlN5bnRheDogU1dJVENIIDx2YXJpYWJsZT4g eyBjYXNlLWxpc3QgfSIsCi0iICBTZWxlY3RzIGZyb20gYSBncm91cCBvZiBjb21tYW5kcyBiYXNl ZCBvbiB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZS4iLAotIiAgVGhlIGNhc2UtbGlzdCBpcyBhIHNl cmllcyBvZiBsaW5lcyBsaWtlIHRoZXNlOiIsCi0iICIsCi0iICAgIDp4LCBjb21tYW5kLCBjb21t YW5kLCAuLi4sIGJyZWFrIiwKLSIgIiwKLSIgIHdoZXJlIFwieFwiIGlzIGEgcG9zc2libGUgdmFs dWUgZm9yIHRoZSB2YXJpYWJsZS4gIEF0IHRoZSBlbmQgb2YgdGhlIiwKLSIgIGNhc2UtbGlzdCwg eW91IGNhbiBwdXQgYSBcImRlZmF1bHRcIiBsYWJlbCB0byBjYXRjaCB3aGVuIHRoZSB2YXJpYWJs ZSBkb2VzIiwKLSIgIG5vdCBtYXRjaCBhbnkgb2YgdGhlIGxhYmVsczoiLAotIiAiLAotIiAgICA6 ZGVmYXVsdCwgY29tbWFuZCwgY29tbWFuZCwgLi4uIiwKLSIgIiwKLSJUaGUgY2FzZSBsYWJlbCBc InhcIiBjYW4gYmUgYSBjaGFyYWN0ZXIsIGEgc3RyaW5nLCBhIHZhcmlhYmxlLCBhIGZ1bmN0aW9u IiwKLSJpbnZvY2F0aW9uLCBhIHBhdHRlcm4sIG9yIGFueSBjb21iaW5hdGlvbiBvZiB0aGVzZS4g IFNlZSBIRUxQIFdJTERDQVJEUyIsCi0iZm9yIGluZm9ybWF0aW9uIGFib3V0IHBhdHRlcm5zLiIs Ci0iIn07Ci0KLXN0YXRpYyBjaGFyICpvcGVuaGxwW10gPSB7Ci0iU3ludGF4OiAgT1BFTiBtb2Rl IGZpbGVuYW1lIiwKLSIgIEZvciB1c2Ugd2l0aCBSRUFEIGFuZCBXUklURSBjb21tYW5kcy4gIE9w ZW4gdGhlIGxvY2FsIGZpbGUgaW4gdGhlIiwKLSIgIHNwZWNpZmllZCBtb2RlOiBSRUFELCBXUklU RSwgb3IgQVBQRU5ELiAgIVJFQUQgYW5kICFXUklURSBtZWFuIHRvIHJlYWQiLAotIiAgZnJvbSBv ciB3cml0ZSB0byBhIHN5c3RlbSBjb21tYW5kIHJhdGhlciB0aGFuIGEgZmlsZS4gIEV4YW1wbGVz OiIsCi0iICIsCi0iICAgIE9QRU4gUkVBRCBvb2ZhLnR4dCIsCi0iICAgIE9QRU4gIVJFQUQgc29y dCBmb28uYmFyIiwKLSIiIH07Ci0KLXN0YXRpYyBjaGFyICpoeHhhc2tbXSA9IHsKLSJTeW50YXg6 ICBBU0sgWyBzd2l0Y2hlcyBdIHZhcmlhYmxlbmFtZSBbIHByb21wdCBdIiwKLSJFeGFtcGxlOiBB U0sgXFwlbiB7IFdoYXQgaXMgeW91ciBuYW1lXFw/IH0iLAotIiAgSXNzdWVzIHRoZSBwcm9tcHQg YW5kIGRlZmluZXMgdGhlIHZhcmlhYmxlIHRvIGJlIHdoYXRldmVyIGlzIHR5cGVkIGluIiwKLSIg IHJlc3BvbnNlLCB1cCB0byB0aGUgdGVybWluYXRpbmcgY2FycmlhZ2UgcmV0dXJuLiAgVXNlIGJy YWNlcyB0byBwcmVzZXJ2ZSIsCi0iICBsZWFkaW5nIGFuZC9vciB0cmFpbGluZyBzcGFjZXMgaW4g dGhlIHByb21wdC4iLAotIiAiLAotIlN5bnRheDogIEFTS1EgWyBzd2l0Y2hlcyBdIHZhcmlhYmxl bmFtZSBbIHByb21wdCBdIiwKLSJFeGFtcGxlOiBBU0tRIFxcJXAgeyBQYXNzd29yZDp9IiwKLSIg IExpa2UgQVNLIGV4Y2VwdCB0aGUgcmVzcG9uc2UgZG9lcyBub3QgZWNobyBvbiB0aGUgc2NyZWVu IG9yLCBpZiBzcGVjaWZpZWQiLAotIiAgaXQgZWNob2VzIGFzIGFzdGVyaXNrcyBvciBvdGhlciBz cGVjaWZpZWQgY2hhcmFjdGVyLiIsCi0iICIsCi0iU3dpdGNoZXM6IiwKLSIgL0RFRkFVTFQ6dGV4 dCIsCi0iICBUZXh0IHRvIHN1cHBseSBpZiB0aGUgdXNlciBlbnRlcnMgYSBibGFuayByZXNwb25z ZSBvciB0aGUgL1RJTUVPVVQiLAotIiAgbGltaXQgZXhwaXJlZCB3aXRoIG5vIHJlc3BvbnNlLiIs Ci0iICIsCi0iIC9FQ0hPOmNoYXIiLAotIiAgKEFTS1Egb25seSkgQ2hhcmFjdGVyIHRvIGJlIGVj aG9lZCBlYWNoIHRpbWUgdGhlIHVzZXIgcHJlc3NlcyBhIGtleSIsCi0iICBjb3JyZXNwb25kaW5n IHRvIGEgcHJpbnRhYmxlIGNoYXJhY3Rlci4gIFRoaXMgbGV0cyB1c2VycyBzZWUgd2hhdCB0aGV5 IGFyZSIsCi0iICBkb2luZyB3aGVuIHRoZXkgYXJlIHR5cGluZyAoZS5nLikgcGFzc3dvcmRzLCBh bmQgbWFrZXMgZWRpdGluZyBlYXNpZXIuIiwKLSIgIiwKLSNpZmRlZiBPUzIKLSIgL1BPUFVQIiwK LSIgIFRoZSBwcm9tcHQgYW5kIHJlc3BvbnNlIGRpYWxvZyB0YWtlcyBwbGFjZSBpbiBhIHRleHQt bW9kZSBwb3B1cC4iLAotIiAgSzk1IG9ubHk7IGluIEMtS2VybWl0IHRoaXMgc3dpdGNoIGlzIGln bm9yZWQuIiwKLSIgIiwKLSNpZmRlZiBLVUkKLSIgL0dVSSIsCi0iICBUaGUgcHJvbXB0IGFuZCBy ZXNwb25zZSBkaWFsb2cgdGFrZXMgcGxhY2UgaW4gYSBHVUkgcG9wdXAuIiwKLSIgIEs5NSBHVUkg dmVyc2lvbiBvbmx5OyBpbiBDLUtlcm1pdCBhbmQgdGhlIEs5NSBjb25zb2xlIHZlcnNpb24sIiwg Ci0iICB0aGlzIHN3aXRjaCBpcyBpZ25vcmVkLiIsCi0iICIsCi0jZW5kaWYgLyogS1VJICovCi0j ZW5kaWYgLyogT1MyICovCi0iIC9USU1FT1VUOm51bWJlciIsCi0iICBJZiB0aGUgcmVzcG9uc2Ug aXMgbm90IGVudGVyZWQgd2l0aGluIHRoZSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcywgdGhlIiwK LSIgIGNvbW1hbmQgZmFpbHMuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gc2V0dGluZyBBU0stVElN RVIgdG8gYSBwb3NpdGl2ZSIsCi0iICBudW1iZXIsIGV4Y2VwdCBpdCBhcHBsaWVzIG9ubHkgdG8g dGhpcyBjb21tYW5kLiAgQWxzbyBzZWUgU0VUIEFTSy1USU1FUi4iLAotIiAgTk9URTogSWYgYSAv REVGQVVMVDogdmFsdWUgd2FzIGFsc28gZ2l2ZW4sIGl0IGlzIHN1cHBsaWVkIGF1dG9tYXRpY2Fs bHkiLAotIiAgdXBvbiB0aW1lb3V0IGFuZCB0aGUgY29tbWFuZCBkb2VzIE5PVCBmYWlsLiIsCi0K LSIgIiwKLSIgL1FVSUVUIiwKLSIgIFN1cHByZXNzZXMgXCI/VGltZWQgb3V0XCIgbWVzc2FnZSB3 aGVuIC9USU1FT1VUIGlzIGdpdmVuIGFuZCB1c2VyIGRvZXNuJ3QiLAotIiAgcmVzcG9uZCB3aXRo aW4gdGhlIHRpbWUgbGltaXQuIiwKLSIifTsKLXN0YXRpYyBjaGFyICpoeHhnZXRjW10gPSB7Ci0i U3ludGF4OiAgR0VUQyB2YXJpYWJsZW5hbWUgWyBwcm9tcHQgXSIsCi0iRXhhbXBsZTogR0VUQyBc XCVjIHsgVHlwZSBhbnkgY2hhcmFjdGVyIHRvIGNvbnRpbnVlLi4ufSIsCi0iICBJc3N1ZXMgdGhl IHByb21wdCBhbmQgc2V0cyB0aGUgdmFyaWFibGUgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciB5b3Ug dHlwZS4iLAotIiAgVXNlIGJyYWNlcyB0byBwcmVzZXJ2ZSBsZWFkaW5nIGFuZC9vciB0cmFpbGlu ZyBzcGFjZXMgaW4gdGhlIHByb21wdC4iLAotIiAiLAotIkFsc28gc2VlIFNFVCBBU0stVElNRVIu IiwKLSIifTsKLQotc3RhdGljIGNoYXIgKmhteHl0aW1lcltdID0gewotIlN5bnRheDogU0VUIEFT Sy1USU1FUiBudW1iZXIiLAotIiAgRm9yIHVzZSB3aXRoIEFTSywgQVNLUSwgR0VUT0ssIGFuZCBH RVRDLiAgSWYgQVNLLVRJTUVSIGlzIHNldCB0byBhIG51bWJlciIsCi0iICBncmVhdGVyIHRoYW4g MCwgdGhlc2UgY29tbWFuZHMgd2lsbCB0aW1lIG91dCBhZnRlciB0aGUgZ2l2ZW4gbnVtYmVyIG9m IiwKLSIgIHNlY29uZHMgd2l0aCBubyByZXNwb25zZS4gIFRoaXMgY29tbWFuZCBpcyBcInN0aWNr eVwiLCBzbyB0byByZXZlcnQgdG8iLAotIiBcCi11bnRpbWVkIEFTS3MgYWZ0ZXIgYSB0aW1lZCBv bmUsIHVzZSBTRVQgQVNLLVRJTUVSIDAuICBBbHNvIHNlZSBJRiBBU0tUSU1FT1VULiIsCi0iIn07 Ci0KLXN0YXRpYyBjaGFyICpoeHhkb3RbXSA9IHsKLSJTeW50YXg6IC48dmFyaWFibGUtbmFtZT4g PGFzc2lnbm1lbnQtb3BlcmF0b3I+IDx2YWx1ZT4iLAotIiAgQXNzaWducyB0aGUgdmFsdWUgdG8g dGhlIHZhcmlhYmxlIGluIHRoZSBtYW5uZXIgaW5kaWNhdGVkIGJ5IHRoZSIsCi0iICBhc3NpZ25t ZW50IG9wZXJhdG9yOiIsCi0iICA9ICAgQ29waWVzIHdpdGhvdXQgZXZhbHVhdGlvbiAobGlrZSBE RUZJTkUpLiIsCi0iICA6PSAgQ29waWVzIHdpdGggZXZhbHVhdGlvbiAobGlrZSBBU1NJR04pLiIs Ci0iICA6Oj0gQ29waWVzIHdpdGggYXJpdGhtZXRpYyBldmFsdWF0aW9uIChsaWtlIEVWQUxVQVRF KS4iLAotIiJ9OwotCi1zdGF0aWMgY2hhciAqaHh4ZGVmW10gPSB7Ci0iU3ludGF4OiBERUZJTkUg bmFtZSBbIGRlZmluaXRpb24gXSIsCi0iICBEZWZpbmVzIGEgbWFjcm8gb3IgdmFyaWFibGUuICBJ dHMgdmFsdWUgaXMgdGhlIGRlZmluaXRpb24sIHRha2VuIiwKLSIgIGxpdGVyYWxseS4gIE5vIGV4 cGFuc2lvbiBvciBldmFsdWF0aW9uIG9mIHRoZSBkZWZpbml0aW9uIGlzIGRvbmUuICBUaHVzIiwK LSIgIGlmIHRoZSBkZWZpbml0aW9uIGluY2x1ZGVzIGFueSB2YXJpYWJsZSBvciBmdW5jdGlvbiBy ZWZlcmVuY2VzLCB0aGVpciIsCi0iICBuYW1lcyBhcmUgaW5jbHVkZWQsIHJhdGhlciB0aGFuIHRo ZWlyIHZhbHVlcyAoY29tcGFyZSB3aXRoIEFTU0lHTikuICBJZiIsCi0iICB0aGUgZGVmaW5pdGlv biBpcyBvbWl0dGVkLCB0aGVuIHRoZSBuYW1lZCB2YXJpYWJsZSBvciBtYWNybyBpcyB1bmRlZmlu ZWQuIiwKLSIgIiwKLSJBIHR5cGljYWwgbWFjcm8gZGVmaW5pdGlvbiBsb29rcyBsaWtlIHRoaXM6 IiwKLSIgIiwKLSIgIERFRklORSBuYW1lIGNvbW1hbmQsIGNvbW1hbmQsIGNvbW1hbmQsIC4uLiIs Ci0iICIsCi0iZm9yIGV4YW1wbGU6IiwKLSIgIiwKLSIgIERFRklORSB2YXggc2V0IHBhcml0eSBl dmVuLCBzZXQgZHVwbGV4IGZ1bGwsIHNldCBmbG93IHhvbi94b2ZmIiwKLSIgIiwKLSJ3aGljaCBk ZWZpbmVzIGEgS2VybWl0IGNvbW1hbmQgbWFjcm8gY2FsbGVkICd2YXgnLiAgVGhlIGRlZmluaXRp b24gaXMgYSIsCi0iY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgS2VybWl0IGNvbW1hbmRzLiAgVXNl IHRoZSBETyBjb21tYW5kIHRvIGV4ZWN1dGUiLAotInRoZSBtYWNybywgb3IganVzdCB0eXBlIGl0 cyBuYW1lLCBmb2xsb3dlZCBvcHRpb25hbGx5IGJ5IGFyZ3VtZW50cy4iLAotIiAiLAotIlRoZSBk ZWZpbml0aW9uIG9mIGEgdmFyaWFibGUgY2FuIGJlIGFueXRoaW5nIGF0IGFsbCwgZm9yIGV4YW1w bGU6IiwKLSIgIiwKLSIgIERFRklORSBcXCVhIE1vbmRheSIsCi0iICBERUZJTkUgXFwlYiAzIiwK LSIgIiwKLSJUaGVzZSB2YXJpYWJsZXMgY2FuIGJlIHVzZWQgYWxtb3N0IGFueXdoZXJlLCBmb3Ig ZXhhbXBsZToiLAotIiAiLAotIiAgRUNITyBUb2RheSBpcyBcXCVhIiwKLSIgIFNFVCBCTE9DSy1D SEVDSyBcXCViIiwKLSIiIH07Ci0KLXN0YXRpYyBjaGFyICpoeHhhc3NbXSA9IHsKLSJTeW50YXg6 ICBBU1NJR04gdmFyaWFibGVuYW1lIHN0cmluZy4iLAotIkV4YW1wbGU6IEFTU0lHTiBcXCVhIE15 IG5hbWUgaXMgXFwlYi4iLAotIiAgQXNzaWducyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgc3Ry aW5nIHRvIHRoZSB2YXJpYWJsZSAob3IgbWFjcm8pLiIsCi0iICBUaGUgZGVmaW5pdGlvbiBzdHJp bmcgaXMgZnVsbHkgZXZhbHVhdGVkIGJlZm9yZSBpdCBpcyBhc3NpZ25lZCwgc28gdGhhdCIsCi0i ICB0aGUgdmFsdWVzIG9mIGFueSB2YXJpYWJsZXMgdGhhdCBhcmUgY29udGFpbmVkIGFyZSB1c2Vk LCByYXRoZXIgdGhhbiB0aGVpciIsCi0iICBuYW1lcy4gIENvbXBhcmUgd2l0aCBERUZJTkUuICBU byBpbGx1c3RyYXRlIHRoZSBkaWZmZXJlbmNlLCB0cnkgdGhpczoiLAotIiAiLAotIiAgICBERUZJ TkUgXFwlYSBoZWxsbyIsCi0iICAgIERFRklORSBcXCV4IFxcJWEiLAotIiAgICBBU1NJR04gXFwl eSBcXCVhIiwKLSIgICAgREVGSU5FIFxcJWEgZ29vZGJ5ZSIsCi0iICAgIEVDSE8gXFwleCBcXCV5 IiwKLSIgIiwKLSIgIFRoaXMgcHJpbnRzICdnb29kYnllIGhlbGxvJy4iLCAiIiB9OwotCi1zdGF0 aWMgY2hhciAqaHh4ZGVjW10gPSB7Ci0iU3ludGF4OiBERUNSRU1FTlQgdmFyaWFibGVuYW1lIFsg bnVtYmVyIF0iLAotIiAgRGVjcmVtZW50IChzdWJ0cmFjdCBvbmUgZnJvbSkgdGhlIHZhbHVlIG9m IGEgdmFyaWFibGUgaWYgdGhlIGN1cnJlbnQgdmFsdWUiLAotIiAgaXMgbnVtZXJpYy4gIElmIHRo ZSBudW1iZXIgYXJndW1lbnQgaXMgZ2l2ZW4sIHN1YnRyYWN0IHRoYXQgbnVtYmVyIiwKLSIgIGlu c3RlYWQuIiwKLSIgIiwKLSJFeGFtcGxlczogREVDUiBcXCVhLCBERUNSIFxcJWEgNywgREVDUiBc XCVhIFxcJW4iLCAiIiB9OwotCi1zdGF0aWMgY2hhciAqaHh4aW5jW10gPSB7Ci0iU3ludGF4OiBJ TkNSRU1FTlQgdmFyaWFibGVuYW1lIFsgbnVtYmVyIF0iLAotIiAgSW5jcmVtZW50IChhZGQgb25l IHRvKSB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZSBpZiB0aGUgY3VycmVudCB2YWx1ZSBpcyIsCi0i ICBudW1lcmljLiAgSWYgdGhlIG51bWJlciBhcmd1bWVudCBpcyBnaXZlbiwgYWRkIHRoYXQgbnVt YmVyIGluc3RlYWQuIiwKLSIgIiwKLSJFeGFtcGxlczogSU5DUiBcXCVhLCBJTkNSIFxcJWEgNywg SU5DUiBcXCVhIFxcJW4iLCAiIiB9OwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZmRlZiBBTllY MjUKLSNpZm5kZWYgSUJNWDI1Ci1zdGF0aWMgY2hhciAqaHh4cGFkW10gPSB7Ci0iU3ludGF4OiBQ QUQgY29tbWFuZCIsCi0iWC4yNSBQQUQgY29tbWFuZHM6IiwKLSIgIiwKLSIgICAgUEFEIENMRUFS ICAgICAtIENsZWFyIHRoZSB2aXJ0dWFsIGNhbGwiLAotIiAgICBQQUQgU1RBVFVTICAgIC0gUmV0 dXJuIHRoZSBzdGF0dXMgb2YgdmlydHVhbCBjYWxsIiwKLSIgICAgUEFEIFJFU0VUICAgICAtIFNl bmQgYSByZXNldCBwYWNrZXQiLAotIiAgICBQQUQgSU5URVJSVVBUIC0gU2VuZCBhbiBpbnRlcnJ1 cHQgcGFja2V0IiwKLSIifTsKLSNlbmRpZiAvKiBJQk1YMjUgKi8KLQotc3RhdGljIGNoYXIgKmh4 eXgyNVtdID0gewotIlN5bnRheDogU0VUIFguMjUgb3B0aW9uIHsgT04gWyBkYXRhIF0sIE9GRiB9 IiwKLSIgIiwKLSJYLjI1IGNhbGwgb3B0aW9uczoiLAotIiAgQ0xPU0VELVVTRVItR1JPVVAgeyBP TiBpbmRleCwgT0ZGIH0iLAotIiAgICBFbmFibGUgb3IgZGlzYWJsZSBjbG9zZWQgdXNlciBncm91 cCBjYWxsLCB3aGVyZSBpbmRleCBpcyB0aGUgZ3JvdXAiLAotIiAgICBpbmRleCwgMCB0byA5OS4i LAotIiAgUkVWRVJTRS1DSEFSR0UgeyBPTiwgT0ZGIH0iLAotIiAgICBUZWxsIHdoZXRoZXIgeW91 IHdhbnQgdG8gcmV2ZXJzZSB0aGUgY2hhcmdlcyBmb3IgdGhlIGNhbGwuIiwKLSIgIENBTEwtVVNF Ui1EQVRBIHsgT04gc3RyaW5nLCBPRkYgfSIsCi0iICAgIFNwZWNpZnkgY2FsbCB1c2VyLWRhdGEg Zm9yIHRoZSBYLjI1IGNhbGwuIiwKLSIifTsKLSNlbmRpZiAvKiBBTllYMjUgKi8KLQotc3RhdGlj IGNoYXIgKmh4eXBydHJbXSA9IHsKLSNpZmRlZiBQUklOVFNXSQotIlN5bnRheDogU0VUIFBSSU5U RVIgWyBzd2l0Y2hlcyBdIFsgbmFtZSBdIiwKLSIgIiwKLSIgIFNwZWNpZmllcyB0aGUgcHJpbnRl ciB0byBiZSB1c2VkIGZvciB0cmFuc3BhcmVudC1wcmludCwgYXV0b3ByaW50LCBhbmQiLAotIiAg c2NyZWVuLWR1bXAgbWF0ZXJpYWwgZHVyaW5nIHRlcm1pbmFsIGVtdWxhdGlvbiwgYXMgd2VsbCBh cyBmb3IgdGhlIFBSSU5UIiwKLSIgIGNvbW1hbmQsIHBsdXMgdmFyaW91cyBvcHRpb25zIGdvdmVy bmluZyBwcmludCBiZWhhdmlvci4iLAotIiAiLAotIlN3aXRjaGVzIGZvciBzcGVjaWZ5aW5nIHRo ZSBwcmludGVyIGJ5IHR5cGU6IiwKLSIgIiwKLSIvTk9ORSIsCi0iICBJbmNsdWRlIHRoaXMgc3dp dGNoIHRvIHNwZWNpZnkgdGhhdCBhbGwgcHJpbnRlciBhY3Rpb25zIHNob3VsZCBzaW1wbHkgYmUi LAotIiAgc2tpcHBlZC4gIFVzZSB0aGlzLCBmb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgbm8gcHJp bnRlci4iLAotIiAiLAotIi9ET1MtREVWSUNFWzpuYW1lXSIsCi0iICBJbmNsdWRlIHRoaXMgdG8g ZGVjbGFyZSBhIERPUyBwcmludGVyIGFuZCB0byBzcGVjaWZ5IGl0cyBuYW1lLCBzdWNoIGFzIiwK LSIgIFBSTiwgTFBUMSwgZXRjLiIsCi0iICIsCi0jaWZkZWYgTlQKLSIvV0lORE9XUy1RVUVVRVs6 W3F1ZXVlLW5hbWVdXSIsCi0iICBJbmNsdWRlIHRoaXMgdG8gZGVjbGFyZSBhIFdpbmRvd3MgcHJp bnRlciBhbmQgc3BlY2lmeSBpdHMgcXVldWUgbmFtZS4iLAotIiAgVHlwZSBxdWVzdGlvbiBtYXJr ICg/KSBhZnRlciB0aGUgY29sb24gKDopIHRvIHNlZSBhIGxpc3Qgb2Yga25vd24gcXVldWUiLAot IiAgbmFtZXMuICBJZiB0aGUgY29sb24gaXMgYWJzZW50LCB0aGUgc3dpdGNoIGluZGljYXRlcyB0 aGUgY3VycmVudGx5IiwKLSIgIHNlbGVjdGVkIHByaW50ZXIgaXMgYSBXaW5kb3dzIFByaW50IFF1 ZXVlLiAgSWYgdGhlIGNvbG9uIGlzIHByb3ZpZGVkIiwKLSIgIGFuZCB0aGUgbmFtZSBpcyBhYnNl bnQsIHRoZSBXaW5kb3dzIFByaW50IFF1ZXVlIGNob3NlbiBhcyB0aGUgRGVmYXVsdCIsCi0iICBQ cmludGVyIGlzIHNlbGVjdGVkLiIsCi0iICIsCi0jZW5kaWYgLyogTlQgKi8KLSIvRklMRVs6bmFt ZV0iLAotIiAgU3BlY2lmaWVzIHRoYXQgYWxsIHByaW50ZXIgbWF0ZXJpYWwgaXMgdG8gYmUgYXBw ZW5kZWQgdG8gdGhlIG5hbWVkIGZpbGUsIiwKLSIgIHJhdGhlciB0aGFuIGJlaW5nIHNlbnQgdG8g YSBwcmludGVyLiAgSWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QsIGl0IGlzIiwKLSIgIGNyZWF0 ZWQgdGhlIGZpcnN0IHRpbWUgYW55IG1hdGVyaWFsIGlzIHRvIGJlIHByaW50ZWQuIiwKLSIgIiwK LSIvUElQRVs6bmFtZV0iLAotIiAgU3BlY2lmaWVzIHRoYXQgYWxsIHByaW50ZXIgbWF0ZXJpYWwg aXMgdG8gYmUgc2VudCBhcyBzdGFuZGFyZCBpbnB1dCB0byIsCi0iICB0aGUgcHJvZ3JhbSBvciBj b21tYW5kIHdob3NlIG5hbWUgaXMgZ2l2ZW4uICBFeGFtcGxlOiIsCi0iICIsCi0iICAgIFNFVCBQ UklOVEVSIC9QSVBFOnt0ZXh0cHMgPiBscHQxfSIsCi0iICIsCi0iSWYgeW91IGdpdmUgYSBwcmlu dGVyIG5hbWUgd2l0aG91dCBzcGVjaWZ5aW5nIGFueSBvZiB0aGVzZSBzd2l0Y2hlcywgdGhlbiBp dCIsCi0iaXMgYXNzdW1lZCB0byBiZSBhIERPUyBwcmludGVyIGRldmljZSBvciBmaWxlbmFtZSB1 bmxlc3MgdGhlIG5hbWUgZ2l2ZW4iLAotIihhZnRlciByZW1vdmluZyBlbmNsb3NpbmcgYnJhY2Vz LCBpZiBhbnkpIHN0YXJ0cyB3aXRoIFwifFwiLCBcCi1pbiB3aGljaCBjYXNlIGl0IiwKLSJpcyBh IHBpcGUuICBFeGFtcGxlczoiLAotIiAiLAotIiAgU0VUIFBSSU5URVIgTFBUMSAgICAgICAgICAg ICAgIDwtLSBET1MgZGV2aWNlIiwKLSIgIFNFVCBQUklOVEVSIHt8IHRleHRwcyA+IGxwdDF9ICA8 LS0gUGlwZSIsCi0iICIsCi0iVGhlIG5leHQgZ3JvdXAgb2Ygc3dpdGNoZXMgdGVsbHMgd2hldGhl ciB0aGUgcHJpbnRlciBpcyBvbmUtd2F5IG9yIiwKLSJiaWRpcmVjdGlvbmFsICh0d28td2F5KToi LAotIiAiLAotIi9PVVRQVVQtT05MWSIsCi0iICBJbmNsdWRlIHRoaXMgdG8gZGVjbGFyZSB0aGUg cHJpbnRlciBjYXBhYmxlIG9ubHkgb2YgcmVjZWl2aW5nIG1hdGVyaWFsIHRvIiwKLSIgIGJlIHBy aW50ZWQsIGJ1dCBub3Qgc2VuZGluZyBhbnl0aGluZyBiYWNrLiAgVGhpcyBpcyB0aGUgbm9ybWFs IGtpbmQgb2YiLAotIiAgcHJpbnRlciwgS2VybWl0J3MgZGVmYXVsdCBraW5kLCBhbmQgdGhlIG9w cG9zaXRlIG9mIC9CSURJUkVDVElPTkFMLiIsCi0iICIsCi0iL0JJRElSRUNUSU9OQUwiLAotIiAg SW5jbHVkZSB0aGlzIHRvIGRlY2xhcmUgdGhlIHByaW50ZXIgYmlkaXJlY3Rpb25hbC4gIFRoaXMg aXMgdGhlIG9wcG9zaXRlICIsCi0iICBvZiAvT1VUUFVULU9OTFkuICBZb3UgY2FuIGFsc28gdXNl IHRoaXMgb3B0aW9uIHdpdGggc2VyaWFsIHByaW50ZXJzLCBldmVuIiwKLSIgIGlmIHRoZXkgYXJl bid0IGJpZGlyZWN0aW9uYWwsIGluIGNhc2UgeW91IG5lZWQgdG8gc3BlY2lmeSBzcGVlZCwgZmxv dyIsCi0iICBjb250cm9sLCBvciBwYXJpdHkuIiwKLSIgIiwKLSJUaGUgbmV4dCBncm91cCBhcHBs aWVzIG9ubHkgdG8gYmlkaXJlY3Rpb25hbCBhbmQvb3Igc2VyaWFsIHByaW50ZXJzOiIsCi0iICIs Ci0iL0ZMT1ctQ09OVFJPTDp7Tk9ORSxYT04vWE9GRixSVFMvQ1RTLEtFRVB9IiwKLSIgIEZsb3cg Y29udHJvbCB0byB1c2Ugd2l0aCBhIHNlcmlhbCBiaWRpcmVjdGlvbmFsIHByaW50ZXIsIGRlZmF1 bHQgS0VFUDsiLAotI2lmZGVmIE5UCi0iICBpLmUuIHVzZSB3aGF0ZXZlciB0aGUgV2luZG93cyBk cml2ZXIgZm9yIHRoZSBwb3J0IG5vcm1hbGx5IHVzZXMuIiwKLSNlbHNlCi0iICBpLmUuIHVzZSB3 aGF0ZXZlciB0aGUgT1MvMiBkcml2ZXIgZm9yIHRoZSBwb3J0IG5vcm1hbGx5IHVzZXMuIiwKLSNl bmRpZiAvKiBOVCAqLwotIiAiLAotIi9QQVJJVFk6e05PTkUsRVZFTixPREQsU1BBQ0UsTUFSS30i LAotIiAgUGFyaXR5IHRvIHVzZSB3aXRoIGEgc2VyaWFsIHByaW50ZXIsIGRlZmF1bHQgTk9ORTsg aS5lLiB1c2UgOCBkYXRhIGJpdHMiLAotIiAgYW5kIG5vIHBhcml0eS4gIElmIHlvdSBvbWl0IHRo ZSBjb2xvbiBhbmQgdGhlIGtleXdvcmQsIE5PTkUgaXMgc2VsZWN0ZWQuIiwKLSIgIiwKLSIvU1BF RUQ6bnVtYmVyIiwKLSIgIEludGVyZmFjZSBzcGVlZCwgaW4gYml0cyBwZXIgc2Vjb25kLCB0byB1 c2Ugd2l0aCBhIHNlcmlhbCBwcmludGVyLCBzdWNoIGFzIiwKLSIgIDI0MDAsIDk2MDAsIDE5MjAw LCBldGMuICBUeXBlIFNFVCBQUklOVEVSIC9TUEVFRDo/IGZvciBhIGxpc3Qgb2YgcG9zc2libGUi LAotIiAgc3BlZWRzLiIsCi0iICIsCi0iVGhlIG5leHQgZ3JvdXAgZGVhbHMgd2l0aCBwcmludCBq b2JzIC0tIGhvdyB0byBpZGVudGlmeSB0aGVtLCBob3cgdG8gc3RhcnQiLAotInRoZW0sIGhvdyB0 byB0ZXJtaW5hdGUgdGhlbToiLAotIiAiLAotIi9USU1FT1VUWzpudW1iZXJdIiwKLSIgIFVzZWQg d2l0aCBob3N0LWRpcmVjdGVkIHRyYW5zcGFyZW50IG9yIGF1dG8gcHJpbnRpbmcsIHRoaXMgaXMg dGhlIG51bWJlciIsCi0iICBvZiBzZWNvbmRzIHRvIHdhaXQgYWZ0ZXIgdGhlIGhvc3QgY2xvc2Vz IHRoZSBwcmludGVyIGJlZm9yZSB0ZXJtaW5hdGluZyIsCi0iICB0aGUgcHJpbnQgam9iIGlmIHRo ZSBwcmludGVyIGlzIG5vdCBvcGVuZWQgYWdhaW4gZHVyaW5nIHRoZSBzcGVjaWZpZWQiLAotIiAg YW1vdW50IG9mIHRpbWUuIiwKLSIgIiwKLSIvSk9CLUhFQURFUi1GSUxFWzpmaWxlbmFtZV0iLAot IiAgVGhlIG5hbWUgb2YgYSBmaWxlIHRvIGJlIHNlbnQgdG8gdGhlIHByaW50ZXIgYXQgdGhlIGJl Z2lubmluZyBvZiBlYWNoIiwKLSIgIHByaW50IGpvYiwgYXMgYSBidXJzdCBwYWdlLCBvciB0byBj b25maWd1cmUgdGhlIHByaW50ZXIuICBOb3JtYWxseSBubyBmaWxlIiwKLSIgIGlzIGlzIHNlbnQu IiwKLSIgIiwKLSIvRU5ELU9GLUpPQi1TVFJJTkdbOnN0cmluZ10iLAotIiAgU3RyaW5nIG9mIGNo YXJhY3RlcnMgdG8gYmUgc2VudCB0byB0aGUgcHJpbnRlciBhdCB0aGUgZW5kIG9mIHRoZSBwcmlu dCIsCi0iICBqb2IsIHVzdWFsbHkgdXNlZCB0byBmb3JjZSB0aGUgbGFzdCBvciBvbmx5IHBhZ2Ug b3V0IG9mIHRoZSBwcmludGVyLiAgV2hlbiIsCi0iICBzdWNoIGEgc3RyaW5nIGlzIG5lZWRlZCwg aXQgdXN1YWxseSBjb25zaXN0cyBvZiBhIHNpbmdsZSBmb3JtZmVlZDogXCJzZXQiLAotIiAgcHJp bnRlciAvZW5kLW9mLWpvYjp7XFwxMn1cIi4gIE5vIGVuZC1vZi1qb2Igc3RyaW5nIGlzIHNlbnQg dW5sZXNzIHlvdSIsCi0iICBzcGVjaWZ5IG9uZSB3aXRoIHRoaXMgb3B0aW9uLiAgSWYgdGhlIHN0 cmluZyBjb250YWlucyBhbnkgc3BhY2VzIG9yIiwKLSIgIGNvbnRyb2wgY2hhcmFjdGVycyAoZXZl biBpbiBiYWNrc2xhc2ggbm90YXRpb24sIGFzIGFib3ZlKSwgZW5jbG9zZSBpdCBpbiIsCi0iICBi cmFjZXMuIiwKLSIgIiwKLSJUaGUgbmV4dCBncm91cCBpcyBmb3IgdXNlIHdpdGggcHJpbnRlcnMg dGhhdCBwcmludCBvbmx5IFBvc3RTY3JpcHQ6IiwKLSIgIiwKLSIvUE9TVFNDUklQVCBvciAvUFMi LAotIiAgSW5kaWNhdGVzIHRoYXQgSzk1IHNob3VsZCBjb252ZXJ0IGFsbCB0ZXh0IHRvIFBvc3RT Y3JpcHQgYmVmb3JlIHNlbmRpbmciLAotIiAgaXQgdG8gdGhlIHByaW50ZXIuICBUaGUgZml4ZWQt cGl0Y2ggQ291cmllci0xMSBmb250IGlzIHVzZWQuIiwKLSIgIiwKLSIvV0lEVEg6bnVtYmVyIiwK LSIgIFNwZWNpZmllcyB0aGUgd2lkdGggb2YgdGhlIHBhZ2UgaW4gY2hhcmFjdGVycy4gIElmIHRo aXMgc3dpdGNoIGlzIG5vdCIsCi0iICBnaXZlbiwgODAgaXMgdXNlZC4iLAotIiAiLAotIi9IRUlH SFQ6bnVtYmVyIiwKLSIgIFNwZWNpZmllcyB0aGUgaGVpZ2h0IG9mIHRoZSBwYWdlIGluIGxpbmVz LiAgSWYgdGhpcyBzd2l0Y2ggaXMgbm90IGdpdmVuIiwKLSIgIDY2IGlzIHVzZWQuIiwKLSIgIiwK LSIvTk9QT1NUU0NSSVBUIG9yIC9OT1BTIiwKLSIgIEluZGljYXRlcyB0aGF0IEs5NSBzaG91bGQg bm90IGNvbnZlcnQgYWxsIHRleHQgdG8gUG9zdFNjcmlwdCBiZWZvcmUiLAotIiAgc2VuZGluZyBp dCB0byB0aGUgcHJpbnRlci4iLAotIiAiLAotIlRoZSBmaW5hbCBzd2l0Y2ggaXMgZm9yIHVzZSB3 aXRoIEF1dG9QcmludCBtb2RlIGFuZCBTY3JlZW4gRHVtcHMiLAotIiAiLAotIi9DSEFSQUNURVIt U0VUOjxjaGFyYWN0ZXItc2V0PiIsCi0iICBTcGVjaWZpZXMgdGhlIGNoYXJhY3RlciBzZXQgdXNl ZCBieSB0aGUgcHJpbnRlciB3aGljaCBtYXkgYmUgZGlmZmVyZW50IiwKLSIgIGZyb20gYm90aCB0 aGUgY2hhcmFjdGVyIHNldCB1c2VkIGJ5IHRoZSBob3N0IGFuZCBieSB0aGUgbG9jYWwgY29tcHV0 ZXIuIiwKLSIgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIENQNDM3LiIsCi0iICIsCi0iU0hPVyBQUklO VEVSIGRpc3BsYXlzIHlvdXIgY3VycmVudCBwcmludGVyIHNldHRpbmdzLiIsCi0jZWxzZQotI2lm ZGVmIFVOSVgKLSJTeW50YXg6IFNFVCBQUklOVEVSIFsgeyB8Y29tbWFuZCwgZmlsZW5hbWUgfSBd IiwKLSIgIFNwZWNpZmllcyB0aGUgY29tbWFuZCAoc3VjaCBhcyBcInxscHJcIikgb3IgZmlsZW5h bWUgdG8gYmUgdXNlZCBieSB0aGUiLAotIiAgUFJJTlQgY29tbWFuZC4gIElmIGEgZmlsZW5hbWUg aXMgZ2l2ZW4sIGVhY2ggUFJJTlQgY29tbWFuZCBhcHBlbmRzIHRvIHRoZSIsCi0iICBnaXZlbiBm aWxlLiAgSWYgdGhlIFNFVCBQUklOVEVSIGFyZ3VtZW50IGNvbnRhaW5zIHNwYWNlcywgaXQgbXVz dCBiZSIsCi0iICBlbmNsb3NlZCBpbiBicmFjZXMsIGUuZy4gXCJzZXQgcHJpbnRlciB7fCBscHIg LVBsYXNlcn1cIi4gSWYgdGhlIGFyZ3VtZW50IiwKLSIgIGlzIG9taXR0ZWQgdGhlIGRlZmF1bHQg dmFsdWUgaXMgcmVzdG9yZWQuICBTSE9XIFBSSU5URVIgbGlzdHMgdGhlIGN1cnJlbnQiLAotIiAg cHJpbnRlci4gIFNlZSBIRUxQIFBSSU5UIGZvciBmdXJ0aGVyIGluZm8uIiwKLSNlbHNlCi0iU29y cnksIFNFVCBQUklOVEVSIG5vdCBhdmFpbGFibGUgeWV0LiIsCi0jZW5kaWYgLyogVU5JWCAqLwot I2VuZGlmIC8qIFBSSU5UU1dJICovCi0iIn07Ci0KLSNpZmRlZiBPUzIKLSNpZmRlZiBCUFJJTlQK LXN0YXRpYyBjaGFyICpoeHlicHJ0cltdID0gewotIlN5bnRheDogU0VUIEJQUklOVEVSIFsgcG9y dG5hbWUgc3BlZWQgWyBwYXJpdHkgWyBmbG93LWNvbnRyb2wgXSBdIF0iLAotIiAgKE9ic29sZXRl LCByZXBsYWNlZCBieSBTRVQgUFJJTlRFUiAvQklESVJFQ1RJT05BTC4pIiwKLSIifTsKLSNlbmRp ZiAvKiBCUFJJTlQgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotc3RhdGljIGNoYXIgKmh4eWV4aXRb XSA9IHsKLSJTeW50YXg6IFNFVCBFWElUIEhBTkdVUCB7IE9OLCBPRkYgfSIsCi0iICBXaGVuIE9O ICh3aGljaCBpcyB0aGUgZGVmYXVsdCksIEMtS2VybWl0IGV4ZWN1dGVzIGFuIGltcGxpY2l0IEhB TkdVUCBhbmQiLAotIiAgQ0xPU0UgY29tbWFuZCBvbiB0aGUgY29tbXVuaWNhdGlvbnMgZGV2aWNl IG9yIGNvbm5lY3Rpb24gd2hlbiBpdCBleGl0cy4iLAotIiAgV2hlbiBPRkYsIEtlcm1pdCBza2lw cyB0aGlzIHNlcXVlbmNlLiIsCi0iICIsCi0iU3ludGF4OiBTRVQgRVhJVCBPTi1ESVNDT05ORUNU IHsgT04sIE9GRiB9IiwKLSIgIFdoZW4gT04sIEMtS2VybWl0IEVYSVRzIGF1dG9tYXRpY2FsbHkg d2hlbiBhIG5ldHdvcmsgY29ubmVjdGlvbiIsCi0iICBpcyB0ZXJtaW5hdGVkIGVpdGhlciBieSB0 aGUgaG9zdCBvciBieSBpc3N1aW5nIGEgSEFOR1VQIGNvbW1hbmQuIiwKLSIgIiwKLSJTeW50YXg6 IFNFVCBFWElUIFNUQVRVUyBudW1iZXIiLAotI2lmZGVmIE5PU1BMCi0iICBTZXQgQy1LZXJtaXQn cyBwcm9ncmFtIHJldHVybiBjb2RlIHRvIHRoZSBnaXZlbiBudW1iZXIuIiwKLSNlbHNlCi0iICBT ZXQgQy1LZXJtaXQncyBwcm9ncmFtIHJldHVybiBjb2RlIHRvIHRoZSBnaXZlbiBudW1iZXIsIHdo aWNoIGNhbiBiZSBhIiwKLSIgIGNvbnN0YW50LCB2YXJpYWJsZSwgZnVuY3Rpb24gcmVzdWx0LCBv ciBhcml0aG1ldGljIGV4cHJlc3Npb24uIiwKLSNlbmRpZiAvKiBOT1NQTCAqLwotIiAiLAotIlN5 bnRheDogU0VUIEVYSVQgV0FSTklORyB7IE9OLCBPRkYsIEFMV0FZUyB9IiwKLSIgIFdoZW4gRVhJ VCBXQVJOSU5HIGlzIE9OLCBpc3N1ZSBhIHdhcm5pbmcgbWVzc2FnZSBhbmQgYXNrIGZvciBjb25m aXJtYXRpb24iLAotIiAgYmVmb3JlIEVYSVRpbmcgaWYgYSBjb25uZWN0aW9uIHRvIGFub3RoZXIg Y29tcHV0ZXIgbWlnaHQgc3RpbGwgYmUgb3Blbi4iLAotIiAgV2hlbiBFWElUIFdBUk5JTkcgaXMg QUxXQVlTLCBjb25maXJtYXRpb24gaXMgYWx3YXlzIHJlcXVlc3RlZC4gIFdoZW4gT0ZGIiwKLSIg IGl0IGlzIG5ldmVyIHJlcXVlc3RlZC4gIFRoZSBkZWZhdWx0IGlzIE9OLiIsCi0iIiB9OwotCi0j aWZuZGVmIE5PU1BMCi1zdGF0aWMgY2hhciAqaHh4cGF1W10gPSB7Ci0iU3ludGF4OiAgUEFVU0Ug WyB7IG51bWJlci1vZi1zZWNvbmRzLCBoaDptbTpzcyB9IF0iLAotIkV4YW1wbGU6IFBBVVNFIDMg IG9yICBQQVVTRSAxNDo1MjozMCIsCi0iICBEbyBub3RoaW5nIGZvciB0aGUgc3BlY2lmaWVkIG51 bWJlciBvZiBzZWNvbmRzIG9yIHVudGlsIHRoZSBnaXZlbiB0aW1lIG9mIiwKLSIgIGRheSBpbiAy NC1ob3VyIGhoOm1tOnNzIG5vdGF0aW9uLiAgSWYgdGhlIHRpbWUgb2YgZGF5IGlzIGVhcmxpZXIg dGhhbiB0aGUiLAotIiAgY3VycmVudCB0aW1lLCBpdCBpcyBhc3N1bWVkIHRvIGJlIHRvbW9ycm93 LiAgSWYgbm8gYXJndW1lbnQgZ2l2ZW4sIG9uZSIsCi0iICBzZWNvbmQgaXMgdXNlZC4gIFRoZSBw YXVzZSBjYW4gYmUgaW50ZXJydXB0ZWQgYnkgdHlwaW5nIGFueSBjaGFyYWN0ZXIgb24iLAotIiAg dGhlIGtleWJvYXJkIHVubGVzcyBTTEVFUCBDQU5DRUxMQVRJT04gaXMgT0ZGLiAgSWYgaW50ZXJy dXB0ZWQsIFBBVVNFIiwKLSIgIGZhaWxzLCBvdGhlcndpc2UgaXQgc3VjY2VlZHMuICBTeW5vbnlt OiBTTEVFUC4iLAotIiIgfTsKLQotc3RhdGljIGNoYXIgKmh4eG1zbFtdID0gewotIlN5bnRheDog IE1TTEVFUCBbIG51bWJlciBdIiwKLSJFeGFtcGxlOiBNU0xFRVAgNTAwIiwKLSIgIERvIG5vdGhp bmcgZm9yIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kczsgaWYgbm8gbnVtYmVy IGdpdmVuLCIsCi0iICAxMDAgbWlsbGlzZWNvbmRzLiIsIiIgfTsKLSNlbmRpZiAvKiBOT1NQTCAq LwotCi0jaWZuZGVmIE5PUFVTSAotZXh0ZXJuIGludCBub3B1c2g7Ci1zdGF0aWMgY2hhciAqaHh4 c2hlW10gPSB7Ci0iU3ludGF4OiAhLCBALCBSVU4sIFBVU0gsIG9yIFNQQVdOLCBvcHRpb25hbGx5 IGZvbGxvd2VkIGJ5IGEgY29tbWFuZC4iLAotIiAgR2l2ZXMgdGhlIGNvbW1hbmQgdG8gdGhlIGxv Y2FsIG9wZXJhdGluZyBzeXN0ZW0ncyBjb21tYW5kIHByb2Nlc3NvciwgYW5kIiwKLSIgIGRpc3Bs YXlzIHRoZSByZXN1bHRzIG9uIHRoZSBzY3JlZW4uICBJZiB0aGUgY29tbWFuZCBpcyBvbWl0dGVk LCBlbnRlcnMgdGhlIiwKLSIgIHN5c3RlbSdzIGNvbW1hbmQgbGluZSBpbnRlcnByZXRlciBvciBz aGVsbDsgZXhpdCBmcm9tIGl0ICh0aGUgY29tbWFuZCBmb3IiLAotIiAgdGhpcyBpcyB1c3VhbGx5 IEVYSVQgb3IgUVVJVCBvciBMT0dPVVQpIHRvIHJldHVybiB0byBLZXJtaXQuIiwKLSIiCi19Owot I2VuZGlmIC8qIE5PUFVTSCAqLwotCi0jaWZuZGVmIE5PWE1JVAotc3RhdGljIGNoYXIgKmh4eHht aXRbXSA9IHsKLSJTeW50YXg6IFRSQU5TTUlUIFsgc3dpdGNoZXMgXSBmaWxlbmFtZSIsCi0iICBT ZW5kcyB0aGUgY29udGVudHMgb2YgYSBmaWxlLCB3aXRob3V0IGFueSBlcnJvciBjaGVja2luZyBv ciBjb3JyZWN0aW9uLCIsCi0iICB0byB0aGUgY29tcHV0ZXIgb24gdGhlIG90aGVyIGVuZCBvZiB5 b3VyIFNFVCBMSU5FIG9yIFNFVCBIT1NUIGNvbm5lY3Rpb24iLAotIiAgKG9yIGlmIEMtS2VybWl0 IGlzIGluIHJlbW90ZSBtb2RlLCBkaXNwbGF5cyBpdCBvbiB0aGUgc2NyZWVuKS4gIFRoZSIsCi0i ICBmaWxlbmFtZSBpcyB0aGUgbmFtZSBvZiBhIHNpbmdsZSBmaWxlIChubyB3aWxkY2FyZHMpIHRv IGJlIHNlbnQgb3IsIGlmIiwKLSIgIHRoZSAvUElQRSBzd2l0Y2ggaXMgaW5jbHVkZWQsIHRoZSBu YW1lIG9mIGEgY29tbWFuZCB3aG9zZSBvdXRwdXQgaXMgdG8gYmUiLAotIiAgc2VudC4iLAotIiAi LAotIiAgVGhlIGZpbGUgaXMgc2VudCBhY2NvcmRpbmcgdG8geW91ciBjdXJyZW50IEZJTEUgVFlQ RSBzZXR0aW5nIChCSU5BUlkgb3IiLAotIiAgVEVYVCksIHdoaWNoIHlvdSBjYW4gb3ZlcnJpZGUg d2l0aCBhIC9CSU5BUlkgb3IgL1RFWFQgc3dpdGNoIHdpdGhvdXQiLAotIiAgY2hhbmdpbmcgdGhl IGdsb2JhbCBzZXR0aW5nLiAgSW4gdGV4dCBtb2RlLCBpdCBpcyBzZW50IGEgbGluZSBhdCBhIHRp bWUsIiwKLSIgIHdpdGggY2FycmlhZ2UgcmV0dXJuIGF0IHRoZSBlbmQgb2YgZWFjaCBsaW5lIChh cyBpZiB5b3Ugd2VyZSB0eXBpbmcgaXQgYXQiLAotIiAgeW91ciBrZXlib2FyZCksIGFuZCBDLUtl cm1pdCB3YWl0cyBmb3IgYSBsaW5lZmVlZCB0byBlY2hvIGJlZm9yZSBzZW5kaW5nIiwKLSIgIHRo ZSBuZXh0IGxpbmU7IHVzZSAvTk9XQUlUIHRvIGVsaW1pbmF0ZSB0aGUgZmVlZGJhY2sgcmVxdWly ZW1lbnQuICBJbiIsCi0iICBiaW5hcnkgbW9kZSwgaXQgaXMgc2VudCBhIGNoYXJhY3RlciBhdCBh IHRpbWUsIHdpdGggbm8gZmVlZGJhY2sgcmVxdWlyZWQuIiwKLSIgIiwKLSIgIE5vcm1hbGx5IHRo ZSB0cmFuc21pdHRlZCBtYXRlcmlhbCBpcyBlY2hvZWQgdG8geW91ciBzY3JlZW4uICBVc2UgU0VU IiwKLSIgIFRSQU5TTUlUIEVDSE8gT0ZGIG9yIHRoZSAvTk9FQ0hPIHN3aXRjaCB0byBzdXBwcmVz cyBlY2hvaW5nLiAgTm90ZSB0aGF0IiwKLSIgIFRSQU5TTUlUIC9OT0VDSE8gL05PV0FJVCAvQklO QVJZIGlzIGEgc3BlY2lhbCBjYXNlLCB0aGF0IG1vcmUgb3IgbGVzcyIsCi0iICBibGFzdHMgdGhl IGZpbGUgb3V0IGF0IGZ1bGwgc3BlZWQuIiwKLSIgIiwKLSNpZm5kZWYgTk9DU0VUUwotIiAgQ2hh cmFjdGVyIHNldHMgYXJlIHRyYW5zbGF0ZWQgYWNjb3JkaW5nIHRvIHlvdXIgY3VycmVudCBGSUxF IGFuZCBURVJNSU5BTCIsCi0iICBDSEFSQUNURVItU0VUIHNldHRpbmdzIHdoZW4gVFJBTlNNSVQg aXMgaW4gdGV4dCBtb2RlLiAgSW5jbHVkZSAvVFJBTlNQQVJFTlQiCi0sCi0iICB0byBkaXNhYmxl IGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24gaW4gdGV4dCBtb2RlICgvVFJBTlNQQVJFTlQgaW1w bGllcyIsCi0iICAvVEVYVCkuIiwKLSIgIiwKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0iICBUaGVy ZSBjYW4gYmUgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIG90aGVyIGNvbXB1dGVyIHdpbGwgcmVjZWl2 ZSB0aGUgZmlsZSIsCi0iICBjb3JyZWN0bHkgYW5kIGNvbXBsZXRlbHkuICBCZWZvcmUgeW91IHN0 YXJ0IHRoZSBUUkFOU01JVCBjb21tYW5kLCB5b3UiLAotIiAgbXVzdCBwdXQgdGhlIG90aGVyIGNv bXB1dGVyIGluIGRhdGEgY29sbGVjdGlvbiBtb2RlLCBmb3IgZXhhbXBsZSBieSIsCi0iICBzdGFy dGluZyBhIHRleHQgZWRpdG9yLiAgVFJBTlNNSVQgbWF5IGJlIGludGVycnVwdGVkIGJ5IEN0cmwt Qy4gIFN5bm9ueW06IiwKLSIgIFhNSVQuICBTZWUgSEVMUCBTRVQgVFJBTlNNSVQgZm9yIGZ1cnRo ZXIgaW5mb3JtYXRpb24uIiwKLSIiIH07Ci0jZW5kaWYgLyogTk9YTUlUICovCi0KLSNpZm5kZWYg Tk9DU0VUUwotc3RhdGljIGNoYXIgKmh4eHhsYVtdID0gewotIlN5bnRheDogVFJBTlNMQVRFIGZp bGUxIGNzMSBjczIgWyBmaWxlMiBdIiwKLSIgIFRyYW5zbGF0ZXMgZmlsZTEgZnJvbSB0aGUgY2hh cmFjdGVyIHNldCBjczEgaW50byB0aGUgY2hhcmFjdGVyIHNldCBjczIiLAotIiAgYW5kIHN0b3Jl cyB0aGUgcmVzdWx0IGluIGZpbGUyLiAgVGhlIGNoYXJhY3RlciBzZXRzIGNhbiBiZSBhbnkgb2Yi LAotIiAgQy1LZXJtaXQncyBmaWxlIGNoYXJhY3RlciBzZXRzLiAgSWYgZmlsZTIgaXMgb21pdHRl ZCwgdGhlIHRyYW5zbGF0aW9uIiwKLSIgIGlzIGRpc3BsYXllZCBvbiB0aGUgc2NyZWVuLiAgQW4g YXBwcm9wcmlhdGUgaW50ZXJtZWRpYXRlIGNoYXJhY3Rlci1zZXQiLAotIiAgaXMgY2hvc2VuIGF1 dG9tYXRpY2FsbHksIGlmIG5lY2Vzc2FyeS4gIFN5bm9ueW06IFhMQVRFLiAgRXhhbXBsZToiLAot IiAiLAotIiAgICBUUkFOU0xBVEUgbGFzYWduYS5sYXQgbGF0aW4xIGl0YWxpYW4gbGFzYWduYS5u cmMiLAotIiAiLAotIiAgTXVsdGlwbGUgZmlsZXMgY2FuIGJlIHRyYW5zbGF0ZWQgaWYgZmlsZTIg aXMgYSBkaXJlY3Rvcnkgb3IgZGV2aWNlIG5hbWUsIiwKLSIgIHJhdGhlciB0aGFuIGEgZmlsZW5h bWUsIG9yIGlmIGZpbGUyIGlzIG9taXR0ZWQuIiwKLSIiIH07Ci0jZW5kaWYgLyogTk9DU0VUUyAq LwotCi0jaWZuZGVmIE5PU1BMCi1zdGF0aWMgY2hhciAqaHh4d2FpW10gPSB7Ci0iU3ludGF4OiBX QUlUIHsgbnVtYmVyLW9mLXNlY29uZHMsIGhoOm1tOnNzIH0gWyA8d2hhdD4gXSIsCi0iICIsCi0i RXhhbXBsZXM6IiwKLSIgIHdhaXQgNSBjZCBjdHMiLAotIiAgd2FpdCAyMzo1OTo1OSBjZCIsCi0i ICIsCi0iICBXYWl0cyB1cCB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMgb3IgdGhlIGdp dmVuIHRpbWUgb2YgZGF5IGZvciB0aGUiLAotIiAgc3BlY2lmaWVkIGl0ZW0gb3IgZXZlbnQsIHdo aWNoIGNhbiBiZSBGSUxFLCB0aGUgbmFtZShzKSBvZiBvbmUgb3IgbW9yZSIsCi0iICBtb2RlbSBz aWduYWxzLCBvciBub3RoaW5nLiAgSWYgbm90aGluZyBpcyBzcGVjaWZpZWQsIFdBSVQgYWN0cyBs aWtlIFNMRUVQLiIsCi0iICBJZiBvbmUgb3IgbW9yZSBtb2RlbSBzaWduYWwgbmFtZXMgYXJlIGdp dmVuLCBLZXJtaXQgd2FpdHMgZm9yIHRoZSBzcGVjaWZpZWQiCi0sCi0iICBtb2RlbSBzaWduYWxz IHRvIGFwcGVhciBvbiB0aGUgc2VyaWFsIGNvbW11bmljYXRpb24gZGV2aWNlLiIsCi0iICBTZXRz IEZBSUxVUkUgaWYgdGhlIHNpZ25hbHMgZG8gbm90IGFwcGVhciBpbiB0aGUgZ2l2ZW4gdGltZSBv ciBpbnRlcnJ1cHRlZCIsCi0iICBmcm9tIHRoZSBrZXlib2FyZCBkdXJpbmcgdGhlIHdhaXRpbmcg cGVyaW9kLiIsCi0iICIsCi0iU2lnbmFsczoiLAotIiAgY2QgID0gQ2FycmllciBEZXRlY3Q7IiwK LSIgIGRzciA9IERhdGFzZXQgUmVhZHk7IiwKLSIgIGN0cyA9IENsZWFyIFRvIFNlbmQ7IiwKLSIg IHJpICA9IFJpbmcgSW5kaWNhdGUuIiwKLSIgIiwKLSJJZiB5b3Ugd2FudCBLZXJtaXQgdG8gd2Fp dCBmb3IgYSBmaWxlIGV2ZW50LCB0aGVuIHRoZSBzeW50YXggaXM6IiwKLSIgIiwKLSIgIFdBSVQg PHRpbWU+IEZJTEUgeyBDUkVBVElPTiwgREVMRVRJT04sIE1PRElGSUNBVElPTiB9IDxmaWxlbmFt ZT4iLAotIiAiLAotIndoZXJlIDx0aW1lPiBpcyBhcyBhYm92ZSwgYW5kIDxmaWxlbmFtZT4gaXMg dGhlIG5hbWUgb2YgYSBzaW5nbGUgZmlsZS4iLAotIktlcm1pdCB3YWl0cyB1cCB0byB0aGUgZ2l2 ZW4gYW1vdW50IG9mIHRpbWUgZm9yIHRoZSBzcGVjaWZpZWQgZXZlbnQgdG8gb2NjdXIiLAotIndp dGggdGhlIHNwZWNpZmllZCBmaWxlLCBzdWNjZWVkcyBpZiBpdCBkb2VzLCBmYWlscyBpZiBpdCBk b2Vzbid0LiIsCi0iIiB9OwotI2VuZGlmIC8qIE5PU1BMICovCi0KLXN0YXRpYyBjaGFyICpoeHh3 cmlbXSA9IHsKLSJTeW50YXg6IFdSSVRFIG5hbWUgdGV4dCIsCi0iICBXcml0ZXMgdGhlIGdpdmVu IHRleHQgdG8gdGhlIG5hbWVkIGxvZyBvciBmaWxlLiAgVGhlIHRleHQgdGV4dCBtYXkgaW5jbHVk ZSIsCi0iICBiYWNrc2xhc2ggY29kZXMsIGFuZCBpcyBub3QgdGVybWluYXRlZCBieSBhIG5ld2xp bmUgdW5sZXNzIHlvdSBpbmNsdWRlIHRoZSIsCi0iICBhcHByb3ByaWF0ZSBjb2RlLiAgVGhlIG5h bWUgcGFyYW1ldGVyIGNhbiBiZSBhbnkgb2YgdGhlIGZvbGxvd2luZzoiLAotIiAiLAotIiAgIERF QlVHLUxPRyIsCi0iICAgRVJST1IgKHN0YW5kYXJkIGVycm9yKSIsCi0jaWZuZGVmIE5PU1BMCi0i ICAgRklMRSAodGhlIE9QRU4gV1JJVEUsIE9QRU4gIVdSSVRFLCBvciBPUEVOIEFQUEVORCBmaWxl LCBzZWUgSEVMUCBPUEVOKSIsCi0jZW5kaWYgLyogTk9TUEwgKi8KLSIgICBQQUNLRVQtTE9HIiwK LSIgICBTQ1JFRU4gKGNvbXBhcmUgd2l0aCBFQ0hPKSIsCi0jaWZuZGVmIE5PTE9DQUwKLSIgICBT RVNTSU9OLUxPRyIsCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotIiAgIFRSQU5TQUNUSU9OLUxPRyIs ICIiIH07Ci0KLSNpZm5kZWYgTk9ESUFMCi1zdGF0aWMgY2hhciAqaHh4bG9va1tdID0geyAiU3lu dGF4OiBMT09LVVAgbmFtZSIsCi0iICBMb29rcyB1cCB0aGUgZ2l2ZW4gbmFtZSBpbiB0aGUgZGlh bGluZyBkaXJlY3Rvcnkgb3IgZGlyZWN0b3JpZXMsIGlmIGFueSwiLAotIiAgc3BlY2lmaWVkIGlu IHRoZSBtb3N0IHJlY2VudCBTRVQgRElBTCBESVJFQ1RPUlkgY29tbWFuZC4gIEVhY2ggbWF0Y2hp bmciLAotIiAgZW50cnkgaXMgc2hvd24sIGFsb25nIHdpdGggYW55IHRyYW5zZm9ybWF0aW9ucyB0 aGF0IHdvdWxkIGJlIGFwcGxpZWQgdG8iLAotIiAgcG9ydGFibGUtZm9ybWF0IGVudHJpZXMgYmFz ZWQgb24geW91ciBsb2NhbGUuICBIRUxQIERJQUwsIEhFTFAgU0VUIERJQUwiLAotIiAgZm9yIGZ1 cnRoZXIgaW5mby4iLAotIiIKLX07Ci0KLXN0YXRpYyBjaGFyICpoeHhhbnN3W10gPSB7ICJTeW50 YXg6ICBBTlNXRVIgWyA8c2Vjb25kcz4gXSIsCi0jaWZkZWYgT1MyCi0iICBXYWl0cyBmb3IgYSBt b2RlbSBjYWxsIHRvIGNvbWUgaW4uICBQcmlvciBTRVQgTU9ERU0gVFlQRSBhbmQgU0VUIFBPUlQi LAotI2Vsc2UKLSIgIFdhaXRzIGZvciBhIG1vZGVtIGNhbGwgdG8gY29tZSBpbi4gIFByaW9yIFNF VCBNT0RFTSBUWVBFIGFuZCBTRVQgTElORSIsCi0jZW5kaWYgLyogT1MyICovCi0iICByZXF1aXJl ZC4gIElmIDxzZWNvbmRzPiBpcyAwIG9yIG5vdCBzcGVjaWZpZWQsIEtlcm1pdCB3YWl0cyBmb3Jl dmVyIG9yIiwKLSIgIHVudGlsIGludGVycnVwdGVkLCBvdGhlcndpc2UgS2VybWl0IHdhaXRzIHRo ZSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcy4iLAotIiAgVGhlIEFOU1dFUiBjb21tYW5kIHB1dHMg dGhlIG1vZGVtIGluIGF1dG9hbnN3ZXIgbW9kZS4gIFN1YnNlcXVlbnQgRElBTCIsCi0iICBjb21t YW5kcyB3aWxsIGF1dG9tYXRpY2FsbHkgcHV0IGl0IChiYWNrKSBpbiBvcmlnaW5hdGUgbW9kZS4g IFNIT1cgTU9ERU0sIiwKLSIgIEhFTFAgU0VUIE1PREVNIGZvciBtb3JlIGluZm8uIiwKLSIiCi19 OwotCi1zdGF0aWMgY2hhciAqaHh4ZGlhbFtdID0geyAiU3ludGF4OiAgRElBTCBwaG9uZW51bWJl ciIsCi0iRXhhbXBsZTogRElBTCA3NjU0MzIxIiwKLSIgIFwKLURpYWxzIGEgbnVtYmVyIHVzaW5n IGFuIGF1dG9kaWFsIG1vZGVtLiAgRmlyc3QgeW91IG11c3QgU0VUIE1PREVNIFRZUEUsIHRoZW4i LAotI2lmZGVmIE9TMgotIiAgU0VUIFBPUlQgKG9yIGluIFdpbmRvd3Mgb25seSwgU0VUIFBPUlQg VEFQSSBpbnN0ZWFkIG9mIFNFVCBNT0RFTSBUWVBFIGFuZCIsCi0iICBTRVQgTElORSksIHRoZW4g U0VUIFNQRUVELiBUaGVuIGdpdmUgdGhlIERJQUwgY29tbWFuZCwgaW5jbHVkaW5nIHRoZSBwaG9u ZSIsCi0jZWxzZQotIiAgU0VUIExJTkUsIHRoZW4gU0VUIFNQRUVELiAgVGhlbiBnaXZlIHRoZSBE SUFMIGNvbW1hbmQsIGluY2x1ZGluZyB0aGUgcGhvbmUiLAotI2VuZGlmIC8qIE9TMiAqLwotIiAg bnVtYmVyLCBmb3IgZXhhbXBsZToiLAotIiAiLAotIiAgIERJQUwgNzY1NDMyMSIsCi0jaWZkZWYg TkVUQ09OTgotIiAiLAotIiAgSWYgdGhlIG1vZGVtIGlzIG9uIGEgbmV0d29yayBtb2RlbSBzZXJ2 ZXIsIFNFVCBIT1NUIGZpcnN0LCB0aGVuIFNFVCBNT0RFTSIsCi0iICBUWVBFLCB0aGVuIERJQUwu IiwKLSNlbmRpZiAvKiBORVRDT05OICovCi0iICIsCi0iSWYgeW91IGdpdmUgdGhlIERJQUwgY29t bWFuZCBpbnRlcmFjdGl2ZWx5IGF0IHRoZSBLZXJtaXQgcHJvbXB0LCBhbmQgdGhlIiwKLSJjYWxs IGlzIHBsYWNlZCBzdWNjZXNzZnVsbHksIEtlcm1pdCBhdXRvbWF0aWNhbGx5IGVudGVycyBDT05O RUNUIG1vZGUuIiwKLSJJZiB0aGUgRElBTCBjb21tYW5kIGlzIGdpdmVuIGZyb20gYSBtYWNybyBv ciBjb21tYW5kIGZpbGUsIEtlcm1pdCByZW1haW5zIiwKLSJpbiBjb21tYW5kIG1vZGUgYWZ0ZXIg dGhlIGNhbGwgaXMgcGxhY2VkLCBzdWNjZXNzZnVsbHkgb3Igbm90LiAgWW91IGNhbiIsCi0iY2hh bmdlIHRoaXMgYmVoYXZpb3Igd2l0aCB0aGUgU0VUIERJQUwgQ09OTkVDVCBjb21tYW5kLiIsCi0i ICIsCi0iSWYgdGhlIHBob25lbnVtYmVyIHN0YXJ0cyB3aXRoIGEgbGV0dGVyLCBhbmQgaWYgeW91 IGhhdmUgdXNlZCB0aGUgU0VUIERJQUwiLAotIkRJUkVDVE9SWSBjb21tYW5kIHRvIHNwZWNpZnkg b25lIG9yIG1vcmUgZGlhbGluZy1kaXJlY3RvcnkgZmlsZXMsIEtlcm1pdCIsCi0ibG9va3MgaXQg dXAgaW4gdGhlIGdpdmVuIGZpbGUocyk7IGlmIGl0IGlzIGZvdW5kLCB0aGUgbmFtZSBpcyByZXBs YWNlZCBieSIsCi0idGhlIG51bWJlciBvciBudW1iZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmFt ZS4gIElmIGl0IGlzIG5vdCBmb3VuZCwgdGhlIiwKLSJuYW1lIGlzIHNlbnQgdG8gdGhlIG1vZGVt IGxpdGVyYWxseS4iLAotIiAiLAotIklmIHRoZSBwaG9uZW51bWJlciBzdGFydHMgd2l0aCBhbiBl cXVhbHMgc2lnbiAoXCI9XCIpLCB0aGlzIGZvcmNlcyB0aGUgcGFydCIsCi0iYWZ0ZXIgdGhlID0g dG8gYmUgc2VudCBsaXRlcmFsbHkgdG8gdGhlIG1vZGVtLCBldmVuIGlmIGl0IHN0YXJ0cyB3aXRo IGEiLAotImxldHRlciwgd2l0aG91dCBhbnkgZGlyZWN0b3J5IGxvb2t1cC4iLAotIiAiLAotIllv dSBjYW4gYWxzbyBnaXZlIGEgbGlzdCBvZiBwaG9uZSBudW1iZXJzIGVuY2xvc2VkIGluIGJyYWNl cywgZS5nOiIsCi0iICIsCi0iICBkaWFsIHt7NzY1NDMyMX17ODc2NTQzMn17KzEgKDIxMiA1NTUt MTIxMn19IiwKLSIgIiwKLSIoRWFjaCBudW1iZXIgaXMgZW5jbG9zZWQgaW4gYnJhY2VzIGFuZCB0 aGUgZW50aXJlIGxpc3QgaXMgYWxzbyBlbmNsb3NlZCBpbiIsCi0iYnJhY2VzLikgIEluIHRoaXMg Y2FzZSwgZWFjaCBudW1iZXIgaXMgdHJpZWQgdW50aWwgdGhlcmUgaXMgYW4gYW5zd2VyLiAgVGhl IiwKLSJwaG9uZSBudW1iZXJzIGluIHRoaXMga2luZCBvZiBsaXN0IGNhbiBub3QgYmUgbmFtZXMg b2YgZGlhbGluZyBkaXJlY3RvcnkiLAotImVudHJpZXMuIiwKLSIgIiwKLSJBIGRpYWxpbmcgZGly ZWN0b3J5IGlzIGEgcGxhaW4gdGV4dCBmaWxlLCBvbmUgZW50cnkgcGVyIGxpbmU6IiwKLSIgIiwK LSIgIG5hbWUgIHBob25lbnVtYmVyICA7ICBjb21tZW50cyIsCi0iICIsCi0iZm9yIGV4YW1wbGU6 IiwKLSIgIiwKLSIgIHdvcmsgICAgOTg3NjU0MyAgICAgICAgICAgICAgOyBUaGlzIGlzIGEgY29t bWVudCIsCi0iICBlLW1haWwgICsxICAoMjEyKSA1NTUgNDMyMSAgIDsgTXkgZWxlY3Ryb25pYyBt YWlsYm94IiwKLSIgIGdlcm1hbnkgKzQ5ICg1MTEpIDU1NSAxMjM0ICAgOyBPdXIgYnJhbmNoIGlu IEhhbm92ZXIiLAotIiAiLAotIklmIGEgcGhvbmUgbnVtYmVyIHN0YXJ0cyB3aXRoICssIHRoZW4g aXQgbXVzdCBpbmNsdWRlIGNvdW50cnkgY29kZSBhbmQiLAotImFyZWEgY29kZSwgYW5kIEMtS2Vy bWl0IHdpbGwgdHJ5IHRvIGhhbmRsZSB0aGVzZSBhcHByb3ByaWF0ZWx5IGJhc2VkIG9uIiwKLSJ0 aGUgY3VycmVudCBsb2NhbGUgKEhFTFAgU0VUIERJQUwgZm9yIGZ1cnRoZXIgaW5mbyk7IHRoZXNl IGFyZSBjYWxsZWQiLAotIlBPUlRBQkxFIGVudHJpZXMuICBJZiBpdCBkb2VzIG5vdCBzdGFydCB3 aXRoICssIGl0IGlzIGRpYWxlZCBsaXRlcmFsbHkuIiwKLSIgIiwKLSJJZiBtb3JlIHRoYW4gb25l IGVudHJ5IGlzIGZvdW5kIHdpdGggdGhlIHNhbWUgbmFtZSwgS2VybWl0IGRpYWxzIGFsbCBvZiIs Ci0idGhlbSB1bnRpbCB0aGUgY2FsbCBpcyBjb21wbGV0ZWQ7IGlmIHRoZSBlbnRyaWVzIGFyZSBp biBwb3J0YWJsZSBmb3JtYXQsIiwKLSJLZXJtaXQgZGlhbHMgdGhlbSBpbiBjaGVhcC10by1leHBl bnNpdmUgb3JkZXI6IGludGVybmFsLCB0aGVuIGxvY2FsLCB0aGVuIiwKLSJsb25nLWRpc3RhbmNl LCB0aGVuIGludGVybmF0aW9uYWwsIGJhc2VkIG9uIGl0cyBrbm93bGVkZ2Ugb2YgeW91ciBsb2Nh bCIsCi0iY291bnRyeSBjb2RlIGFuZCBhcmVhIGNvZGUgKHNlZSBIRUxQIFNFVCBESUFMKS4iLAot IiAiLAotIlNwZWNpZnkgeW91ciBkaWFsaW5nIGRpcmVjdG9yeSBmaWxlKHMpIHdpdGggdGhlIFNF VCBESUFMIERJUkVDVE9SWSBjb21tYW5kLiIsCi0iICIsCi0jaWZkZWYgTkVUQ09OTgotIlNlZSBh bHNvIFNFVCBESUFMLCBTRVQgTU9ERU0sIFNFVCBMSU5FLCBTRVQgSE9TVCwgU0VUIFNQRUVELCBS RURJQUwsIGFuZCIsCi0iUERJQUwuIiwKLSNlbHNlCi0iU2VlIGFsc28gU0VUIERJQUwsIFNFVCBN T0RFTSwgU0VUIExJTkUsIFNFVCBTUEVFRCwgUERJQUwsIGFuZCBSRURJQUwuIiwKLSNlbmRpZiAv KiBORVRDT05OICovCi0iIiB9OwotCi0jaWZkZWYgQ0tfVEFQSQotc3RhdGljIGNoYXIgKmh4eHRh cGlbXSA9IHsKLSJUQVBJIENPTkZJR1VSRS1MSU5FIDx0YXBpLWxpbmU+IiwKLSIgIERpc3BsYXlz IHRoZSBUQVBJIENvbmZpZ3VyZSBMaW5lIERpYWxvZyBib3ggYW5kIGFsbG93cyB5b3UgdG8iLAot IiAgYWx0ZXIgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNwZWNpZmllZCA8dGFw aS1saW5lPi4iLAotIiAiLAotIlRBUEkgRElBTElORy1QUk9QRVJUSUVTIiwKLSIgIERpc3BsYXlz IHRoZSBUQVBJIERpYWxpbmcgUHJvcGVydGllcyAobG9jYXRpb25zKSBEaWFsb2cgYm94LiAgVGhl IiwKLSIgIERpYWxpbmcgcnVsZXMgbWF5IGJlIGNoYW5nZWQgYW5kIGxvY2F0aW9ucyBjcmVhdGVk IGFuZCBkZWxldGVkLiIsCi0iICBXaGVuIHRoZSBkaWFsb2cgYm94IGlzIGNsb3NlZCwgSy05NSBp bXBvcnRzIHRoZSBjdXJyZW50IERpYWxpbmciLAotIiAgUHJvcGVydGllcycgTG9jYXRpb24gaW50 byB0aGUgS2VybWl0IERJQUwgY29tbWFuZCBzZXR0aW5ncy4iLAotIiJ9OwotCi1zdGF0aWMgY2hh ciAqaHh5dGFwaVtdID0gewotIlNFVCBUQVBJIExJTkUgPHRhcGktbGluZT4iLAotIiAgT3BlbnMg YSBUQVBJIGRldmljZSBmb3IgdXNlIGJ5IEtlcm1pdC4iLAotIiAiLAotIlNFVCBUQVBJIE1PREVN LURJQUxJTkcge09OLCBbT0ZGXX0iLAotIiAgSWYgVEFQSSBNT0RFTS1ESUFMSU5HIGlzIE9GRiB3 aGVuIFNFVCBUQVBJIExJTkUgaXMgaXNzdWVkLCBLZXJtaXQgb3BlbnMiLAotIiAgdGhlIFRBUEkg ZGV2aWNlIGRpcmVjdGx5IGFzIGEgXCJyYXcgcG9ydFwiLiAgVGhlIGRldmljZSBpcyB1bmF2YWls YWJsZSB0byIsCi0iICBvdGhlciBhcHBsaWNhdGlvbnMgYW5kIEtlcm1pdCBwZXJmb3JtcyBkaWFs aW5nIGZ1bmN0aW9ucyB1c2luZyBpdHMiLAotIiAgYnVpbHQtaW4gZGlhbGluZyBhbmQgbW9kZW0g ZGF0YWJhc2VzLiAgSWYgVEFQSSBNT0RFTS1ESUFMSU5HIGlzIE9OLCBUQVBJIiwKLSIgIGhhbmRs ZXMgYWxsIGRpYWxpbmcgZnVuY3Rpb25zIGFuZCB0aGUgcG9ydCBtYXkgYmUgc2hhcmVkIHdpdGgg b3RoZXIiLAotIiAgYXBwbGljYXRpb25zIHdoZW4gYSBjYWxsIGlzIG5vdCBhY3RpdmUuICBXaGVu IFRBUEkgTU9ERU0tRElBTElORyBpcyBPRkYsIiwKLSIgIFNFVCBNT0RFTSBUWVBFIFRBUEkgS2Vy bWl0IHVzZXMgdGhlIFRBUEkgbW9kZW0gY29tbWFuZHMgaW1wb3J0ZWQgZnJvbSB0aGUiLAotIiAg V2luZG93cyBSZWdpc3RyeSBkdXJpbmcgdGhlIHByZXZpb3VzIFNFVCBUQVBJIExJTkUgY2FsbC4i LAotIiAiLAotIlNFVCBUQVBJIExPQ0FUSU9OIDx0YXBpLWxvY2F0aW9uPiIsCi0iICBTcGVjaWZp ZXMgdGhlIFRBUEkgbG9jYXRpb24gdG8gbWFrZSBjdXJyZW50IGZvciB0aGUgZW50aXJlIHN5c3Rl bS4gIFRoZSIsCi0iICA8dGFwaS1sb2NhdGlvbj4ncyBkaWFsaW5nIHByb3BlcnRpZXMgYXJlIGlt cG9ydGVkIGludG8gS2VybWl0J3MgU0VUIERJQUwiLAotIiAgY29tbWFuZCBkYXRhYmFzZS4iLAot IiAiLAotIlNFVCBUQVBJIFBIT05FLU5VTUJFUi1DT05WRVJTSU9OUyB7T04sIE9GRiwgW0FVVE9d fSIsCi0iICBDb250cm9scyB3aGV0aGVyIHRoZSBwaG9uZSBudW1iZXIgY29udmVyc2lvbnMgYXJl IHBlcmZvcm1lZCBieSBUQVBJIChPTikiLAotIiAgb3IgYnkgS2VybWl0IChPRkYpLCBvciBhY2Nv cmRpbmcgdGhlIHR5cGUgb2YgcG9ydCB0aGF0IHdhcyBzZWxlY3RlZCIsCi0iICAoQVVUTyk7IEFV VE8gaXMgdGhlIGRlZmF1bHQsIGFuZCBpcyBlcXVpdmFsZW50IHRvIE9OIGlmIHRoZSBjdXJyZW50 IiwKLSIgIExJTkUvUE9SVCBpcyBhIFRBUEkgZGV2aWNlIGFuZCBUQVBJIE1PREVNLURJQUxJTkcg aXMgT04sIE9GRiBvdGhlcndpc2UuIiwKLSIgIiwKLSJTRVQgVEFQSSBNT0RFTS1MSUdIVFMge1tP Tl0sIE9GRn0iLAotIiAgRGlzcGxheXMgYSBtb2RlbSBsaWdodHMgaW5kaWNhdG9yIG9uIHRoZSBX aW5kb3dzIDk1IFRhc2tiYXIuICBEb2VzIG5vdGhpbmciLAotIiAgaW4gV2luZG93cyBOVCA0LjAu IiwKLSIgIiwKLSJTRVQgVEFQSSBNQU5VQUwtRElBTElORyB7T04sIFtPRkZdfSIsCi0iICBEaXNw bGF5cyBhIGRpYWxvZyBib3ggZHVyaW5nIGRpYWxpbmcgcmVxdWVzdGluZyB0aGF0IHlvdSBtYW51 YWxseSBkaWFsIHRoZSIsCi0iICBwaG9uZSBiZWZvcmUgY29udGludWluZy4gIEFwcGxpZXMgb25s eSB3aGVuIFRBUEkgTU9ERU0tRElBTElORyBpcyBPTi4iLAotIiAiLAotIlNFVCBUQVBJIFdBSVQt Rk9SLUNSRURJVC1DQVJELVRPTkUgPHNlY29uZHM+IiwKLSIgIFNvbWUgbW9kZW1zIGRvbid0IHN1 cHBvcnQgdGhlICckJyAoQk9ORykgc3ltYm9sIGR1cmluZyBkaWFsaW5nLCB3aGljaCIsCi0iICBt ZWFucyBcIndhaXQgZm9yIGNyZWRpdCBjYXJkIHRvbmUgYmVmb3JlIGNvbnRpbnVpbmcuXCIgIElm IFRBUEkgcmVjb2duaXplcyIsCi0iICB0aGUgbW9kZW0gYXMgb25lIHRoYXQgZG9lcyBub3Qgc3Vw cG9ydCBCT05HLCBpdCByZXBsYWNlcyB0aGUgJyQnIHdpdGgiLAotIiAgPHNlY29uZHM+IHdvcnRo IG9mIHBhdXNlcy4gIFRoZSBkZWZhdWx0IGlzIDggc2Vjb25kcy4gIFRoaXMgY29tbWFuZCIsCi0i ICBhcHBsaWVzIG9ubHkgd2hlbiBUQVBJIE1PREVNLURJQUxJTkcgaXMgT04iLAotIiAiLAotIlNF VCBUQVBJIFBSRS1ESUFMLVRFUk1JTkFMIHtPTiwgW09GRl19IiwKLSJTRVQgVEFQSSBQT1NULURJ QUwtVEVSTUlOQUwge09OLCBbT0ZGXX0iLAotIiAgRGlzcGxheXMgYSBzbWFsbCB0ZXJtaW5hbCB3 aW5kb3cgdGhhdCBtYXkgYmUgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSIsCi0iICBtb2Rl bSBvciB0aGUgaG9zdCBwcmlvciB0byBvciBpbW1lZGlhdGVseSBhZnRlciBkaWFsaW5nOyBhcHBs aWVzIG9ubHkgd2hlbiIsCi0iICBUQVBJIE1PREVNLURJQUxJTkcgaXMgT04iLAotIiAiLAotIlNF VCBUQVBJIElOQUNUSVZJVFktVElNRU9VVCA8bWludXRlcz4iLAotIiAgU3BlY2lmaWVzIHRoZSBu dW1iZXIgb2YgbWludXRlcyBvZiBpbmFjdGl2aXR5IHRoYXQgbWF5IGdvIGJ5IGJlZm9yZSBUQVBJ IiwKLSIgIGRpc2Nvbm5lY3RzIHRoZSBsaW5lLiAgVGhlIGRlZmF1bHQgaXMgMCB3aGljaCBtZWFu cyBkaXNhYmxlIHRoaXMgZnVuY3Rpb24uIiwKLSIgIEFwcGxpZXMgb25seSB3aGVuIFRBUEkgTU9E RU0tRElBTElORyBpcyBPTi4iLAotIiAiLAotIlNFVCBUQVBJIFVTRS1XSU5ET1dTLUNPTkZJR1VS QVRJT04ge09OLCBbT0ZGXX0iLAotIiAgU3BlY2lmaWVzIHdoZXRoZXIgdGhlIFRBUEkgbW9kZW0g dmFsdWVzIGZvciBzcGVlZCwgcGFyaXR5LCBzdG9wIGJpdHMsIGZsb3ciLAotIiAgY29udHJvbCwg ZXRjLiBhcmUgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHZhbHVlcyBzcGVjaWZp ZWQiLAotIiAgd2l0aGluIEtlcm1pdC05NS4iLAotIiAiLAotIiJ9OwotI2VuZGlmIC8qIENLX1RB UEkgKi8KLQotI2VuZGlmIC8qIE5PRElBTCAqLwotCi0jaWZkZWYgVE5DT0RFCi1zdGF0aWMgY2hh ciAqaG14eGlrc1tdID0gewotIlN5bnRheDogSUtTIFsgc3dpdGNoZXMgXSBbIGhvc3QgWyBzZXJ2 aWNlIF0gXSIsCi0iICBFc3RhYmxpc2hlcyBhIG5ldyBjb25uZWN0aW9uIHRvIGFuIEludGVybmV0 IEtlcm1pdCBTZXJ2aWNlIGRhZW1vbi4iLAotIiAgRXF1aXZhbGVudCB0byBTRVQgTkVUV09SSyBU WVBFIFRDUC9JUCwgU0VUIEhPU1QgaG9zdCBLRVJNSVQgL1RFTE5FVCwiLAotIiAgSUYgU1VDQ0VT UyBDT05ORUNULiAgSWYgaG9zdCBpcyBvbWl0dGVkLCB0aGUgcHJldmlvdXMgY29ubmVjdGlvbiAo aWYgYW55KSIsCi0iICBpcyByZXN1bWVkLiAgRGVwZW5kaW5nIG9uIGhvdyBLZXJtaXQgaGFzIGJl ZW4gYnVpbHQgc3dpdGNoZXMgbWF5IGJlIiwKLSIgIGF2YWlsYWJsZSB0byByZXF1aXJlIGEgc2Vj dXJlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBhbmQgYmlkaXJlY3Rpb25hbCIsCi0iICBlbmNyeXB0 aW9uLiAgU2VlIEhFTFAgU0VUIFRFTE5FVCBmb3IgbW9yZSBpbmZvLiIsCi0iICIsCi0jaWZkZWYg Q0tfQVVUSEVOVElDQVRJT04KLSIgL0FVVEg6PHR5cGU+IGlzIGVxdWl2YWxlbnQgdG8gU0VUIFRF TE5FVCBBVVRIIFRZUEUgPHR5cGU+IGFuZCIsCi0iICAgU0VUIFRFTE9QVCBBVVRIIFJFUVVJUkVE IHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zLiAgSWYgdGhlIHR5cGUiLAotIiAgIGlzIEFV VE8sIHRoZW4gU0VUIFRFTE9QVCBBVVRIIFJFUVVFU1RFRCBpcyBleGVjdXRlZCBhbmQgaWYgdGhl IHR5cGUiLAotIiAgIGlzIE5PTkUsIHRoZW4gU0VUIFRFTE9QVCBBVVRIIFJFRlVTRUQgaXMgZXhl Y3V0ZWQuIiwKLSIgIiwKLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotI2lmZGVmIENL X0VOQ1JZUFRJT04KLSIgL0VOQ1JZUFQ6PHR5cGU+IGlzIGVxdWl2YWxlbnQgdG8gU0VUIFRFTE5F VCBFTkNSWVBUIFRZUEUgPHR5cGU+IiwKLSIgICBhbmQgU0VUIFRFTE9QVCBFTkNSWVBUIFJFUVVJ UkVEIFJFUVVJUkVEIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zLiIsCi0iICAgSWYgdGhl IHR5cGUgaXMgQVVUTyB0aGVuIFNFVCBURUxPUFQgQVVUSCBSRVFVRVNURUQgUkVRVUVTVEVEIGlz IGV4ZWN1dGVkIiwKLSIgICBhbmQgaWYgdGhlIHR5cGUgaXMgTk9ORSB0aGVuIFNFVCBURUxPUFQg RU5DUllQVCBSRUZVU0VEIFJFRlVTRUQgaXMiLAotIiAgIGV4ZWN1dGVkLiIsCi0iICIsCi0jZW5k aWYgLyogQ0tfRU5DUllQVElPTiAqLwotIiAvVVNFUklEOls8bmFtZT5dIiwKLSIgICBUaGlzIHN3 aXRjaCBpcyBlcXVpdmFsZW50IHRvIFNFVCBMT0dJTiBVU0VSSUQgPG5hbWU+IG9yIFNFVCBURUxO RVQiLAotIiAgIEVOVklST05NRU5UIFVTRVIgPG5hbWU+LiAgSWYgYSBzdHJpbmcgaXMgZ2l2ZW4s IGl0IHNlbnQgdG8gaG9zdCBkdXJpbmciLAotIiAgIFRlbG5ldCBuZWdvdGlhdGlvbnM7IGlmIHRo aXMgc3dpdGNoIGlzIGdpdmVuIGJ1dCB0aGUgc3RyaW5nIGlzIG9taXR0ZWQsIiwKLSIgICBubyB1 c2VyIElEIGlzIHNlbnQgdG8gdGhlIGhvc3QuICBJZiB0aGlzIHN3aXRjaCBpcyBub3QgZ2l2ZW4s IHlvdXIiLAotIiAgIGN1cnJlbnQgVVNFUklEIHZhbHVlLCBcXHYodXNlcmlkKSwgaXMgc2VudC4g IFdoZW4gYSB1c2VyaWQgaXMgc2VudCB0byB0aGUiLAotIiAgIGhvc3QgaXQgaXMgYSByZXF1ZXN0 IHRvIGxvZ2luIGFzIHRoZSBzcGVjaWZpZWQgdXNlci4iLAotIiAiLAotI2lmZGVmIENLX0FVVEhF TlRJQ0FUSU9OCi0iIC9QQVNTV09SRDpbPHN0cmluZz5dIiwKLSIgICBUaGlzIHN3aXRjaCBpcyBl cXVpdmFsZW50IHRvIFNFVCBMT0dJTiBQQVNTV09SRC4gIElmIGEgc3RyaW5nIGlzIGdpdmVuLCIs Ci0iICAgaXQgaXMgdHJlYXRlZCBhcyB0aGUgcGFzc3dvcmQgdG8gYmUgdXNlZCAoaWYgcmVxdWly ZWQpIGJ5IGFueSBUZWxuZXQiLAotIiAgIEF1dGhlbnRpY2F0aW9uIHByb3RvY29sIChLZXJiZXJv cyBUaWNrZXQgcmV0cmlldmFsLCBTZWN1cmUgUmVtb3RlIiwKLSIgICBQYXNzd29yZCwgb3IgWC41 MDkgY2VydGlmaWNhdGUgcHJpdmF0ZSBrZXkgZGVjcnlwdGlvbi4pICBJZiBubyBwYXNzd29yZCIs Ci0iICAgc3dpdGNoIGlzIHNwZWNpZmllZCBhIHByb21wdCBpcyBpc3N1ZWQgdG8gcmVxdWVzdCB0 aGUgcGFzc3dvcmQgaWYgb25lIiwKLSIgICBpcyByZXF1aXJlZCBmb3IgdGhlIG5lZ290aWF0ZWQg YXV0aGVudGljYXRpb24gbWV0aG9kLiIsCi0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8K LSIifTsKLQotc3RhdGljIGNoYXIgKmhteHh0ZWxbXSA9IHsKLSJTeW50YXg6IFRFTE5FVCBbIHN3 aXRjaGVzIF0gWyBob3N0IFsgc2VydmljZSBdIF0iLAotIiAgRXF1aXZhbGVudCB0byBTRVQgTkVU V09SSyBUWVBFIFRDUC9JUCwgU0VUIEhPU1QgaG9zdCBbIHNlcnZpY2UgXSAvVEVMTkVULCIsCi0i ICBJRiBTVUNDRVNTIENPTk5FQ1QuICBJZiBob3N0IGlzIG9taXR0ZWQsIHRoZSBwcmV2aW91cyBj b25uZWN0aW9uIChpZiBhbnkpIiwKLSIgIGlzIHJlc3VtZWQuICBEZXBlbmRpbmcgb24gaG93IEtl cm1pdCBoYXMgYmVlbiBidWlsdCBzd2l0Y2hlcyBtYXkgYmUiLAotIiAgYXZhaWxhYmxlIHRvIHJl cXVpcmUgYSBzZWN1cmUgYXV0aGVudGljYXRpb24gbWV0aG9kIGFuZCBiaWRpcmVjdGlvbmFsIiwK LSIgIGVuY3J5cHRpb24uICBTZWUgSEVMUCBTRVQgVEVMTkVUIGZvciBtb3JlIGluZm8uIiwKLSIg IiwKLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotIiAvQVVUSDo8dHlwZT4gaXMgZXF1aXZhbGVu dCB0byBTRVQgVEVMTkVUIEFVVEggVFlQRSA8dHlwZT4gYW5kIiwKLSIgICBTRVQgVEVMT1BUIEFV VEggUkVRVUlSRUQgd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbnMuICBJZiB0aGUgdHlwZSIs Ci0iICAgaXMgQVVUTywgdGhlbiBTRVQgVEVMT1BUIEFVVEggUkVRVUVTVEVEIGlzIGV4ZWN1dGVk IGFuZCBpZiB0aGUgdHlwZSIsCi0iICAgaXMgTk9ORSwgdGhlbiBTRVQgVEVMT1BUIEFVVEggUkVG VVNFRCBpcyBleGVjdXRlZC4iLAotIiAiLAotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICov Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotIiAvRU5DUllQVDo8dHlwZT4gaXMgZXF1aXZhbGVudCB0 byBTRVQgVEVMTkVUIEVOQ1JZUFQgVFlQRSA8dHlwZT4iLAotIiAgIGFuZCBTRVQgVEVMT1BUIEVO Q1JZUFQgUkVRVUlSRUQgUkVRVUlSRUQgd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbnMuIiwK LSIgICBJZiB0aGUgdHlwZSBpcyBBVVRPIHRoZW4gU0VUIFRFTE9QVCBBVVRIIFJFUVVFU1RFRCBS RVFVRVNURUQgaXMgZXhlY3V0ZWQiLAotIiAgIGFuZCBpZiB0aGUgdHlwZSBpcyBOT05FIHRoZW4g U0VUIFRFTE9QVCBFTkNSWVBUIFJFRlVTRUQgUkVGVVNFRCBpcyIsCi0iICAgZXhlY3V0ZWQuIiwK LSIgIiwKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0iIC9VU0VSSUQ6WzxuYW1lPl0iLAot IiAgIFRoaXMgc3dpdGNoIGlzIGVxdWl2YWxlbnQgdG8gU0VUIExPR0lOIFVTRVJJRCA8bmFtZT4g b3IgU0VUIFRFTE5FVCIsCi0iICAgRU5WSVJPTk1FTlQgVVNFUiA8bmFtZT4uICBJZiBhIHN0cmlu ZyBpcyBnaXZlbiwgaXQgc2VudCB0byBob3N0IGR1cmluZyIsCi0iICAgVGVsbmV0IG5lZ290aWF0 aW9uczsgaWYgdGhpcyBzd2l0Y2ggaXMgZ2l2ZW4gYnV0IHRoZSBzdHJpbmcgaXMgb21pdHRlZCwi LAotIiAgIG5vIHVzZXIgSUQgaXMgc2VudCB0byB0aGUgaG9zdC4gIElmIHRoaXMgc3dpdGNoIGlz IG5vdCBnaXZlbiwgeW91ciIsCi0iICAgY3VycmVudCBVU0VSSUQgdmFsdWUsIFxcdih1c2VyaWQp LCBpcyBzZW50LiAgV2hlbiBhIHVzZXJpZCBpcyBzZW50IHRvIHRoZSIsCi0iICAgaG9zdCBpdCBp cyBhIHJlcXVlc3QgdG8gbG9naW4gYXMgdGhlIHNwZWNpZmllZCB1c2VyLiIsCi0iICIsCi0jaWZk ZWYgQ0tfQVVUSEVOVElDQVRJT04KLSIgL1BBU1NXT1JEOls8c3RyaW5nPl0iLAotIiAgIFRoaXMg c3dpdGNoIGlzIGVxdWl2YWxlbnQgdG8gU0VUIExPR0lOIFBBU1NXT1JELiAgSWYgYSBzdHJpbmcg aXMgZ2l2ZW4sIiwKLSIgICBpdCBpcyB0cmVhdGVkIGFzIHRoZSBwYXNzd29yZCB0byBiZSB1c2Vk IChpZiByZXF1aXJlZCkgYnkgYW55IFRlbG5ldCIsCi0iICAgQXV0aGVudGljYXRpb24gcHJvdG9j b2wgKEtlcmJlcm9zIFRpY2tldCByZXRyaWV2YWwsIFNlY3VyZSBSZW1vdGUiLAotIiAgIFBhc3N3 b3JkLCBvciBYLjUwOSBjZXJ0aWZpY2F0ZSBwcml2YXRlIGtleSBkZWNyeXB0aW9uLikgIElmIG5v IHBhc3N3b3JkIiwKLSIgICBzd2l0Y2ggaXMgc3BlY2lmaWVkIGEgcHJvbXB0IGlzIGlzc3VlZCB0 byByZXF1ZXN0IHRoZSBwYXNzd29yZCBpZiBvbmUiLAotIiAgIGlzIHJlcXVpcmVkIGZvciB0aGUg bmVnb3RpYXRlZCBhdXRoZW50aWNhdGlvbiBtZXRob2QuIiwKLSNlbmRpZiAvKiBDS19BVVRIRU5U SUNBVElPTiAqLwotIiJ9OwotCi1zdGF0aWMgY2hhciAqaHh0b3B0W10gPSB7Ci0iVEVMT1BUIHsg QU8sIEFZVCwgQlJFQUssIENBTkNFTCwgRUMsIEVMLCBFT0YsIEVPUiwgR0EsIElQLCBETUFSSywg Tk9QLCBTRSwiLAotIiAgICAgICAgIFNVU1AsIFNCIFsgb3B0aW9uIF0sIERPIFsgb3B0aW9uIF0s IERPTlQgWyBvcHRpb24gXSwiLAotIiAgICAgICAgIFdJTEwgWyBvcHRpb24gXSwgV09OVCBbb3B0 aW9uXSB9IiwKLSIgIFRoaXMgY29tbWFuZCBsZXRzIHlvdSBzZW5kIGFsbCB0aGUgVGVsbmV0IHBy b3RvY29sIGNvbW1hbmRzLiAgTm90ZSB0aGF0IiwKLSIgIGNlcnRhaW4gY29tbWFuZHMgZG8gbm90 IHJlcXVpcmUgYSByZXNwb25zZSwgYW5kIHRoZXJlZm9yZSBjYW4gYmUgdXNlZCBhcyIsCi0iICBu b25kZXN0cnVjdGl2ZSBcInByb2Jlc1wiIHRvIHNlZSBpZiB0aGUgVGVsbmV0IHNlc3Npb24gaXMg c3RpbGwgb3BlbjsiLAotIiAgZS5nLjoiLAotIiAiLAotIiAgICBzZXQgaG9zdCB4eXpjb3JwLmNv bSIsCi0iICAgIC4uLiIsCi0iICAgIHRlbG9wdCBub3AiLAotIiAgICB0ZWxvcHQgbm9wIiwKLSIg ICAgaWYgZmFpbCBzdG9wIDEgQ29ubmVjdGlvbiBsb3N0IiwKLSIgIiwKLSIgIFRFTE9QVCBOT1Ag aXMgc2VudCB0d2ljZSBiZWNhdXNlIHRoZSBmYWlsdXJlIG9mIHRoZSBjb25uZWN0aW9uIHdpbGwg bm90IiwKLSIgIGJlIGRldGVjdGVkIHVudGlsIHRoZSBzZWNvbmQgc2VuZCBpcyBhdHRlbXB0ZWQu ICBUaGlzIGNvbW1hbmQgaXMgbWVhbnQiLAotIiAgcHJpbWFyaWx5IGFzIGEgZGVidWdnaW5nIHRv b2wgZm9yIHRoZSBleHBlcnQgdXNlci4iLAotIiJ9OwotI2VuZGlmIC8qIFROQ09ERSAqLwotCi0j ZW5kaWYgLyogTk9IRUxQICovCi0KLS8qICBEIE8gSCBMIFAgIC0tICBHaXZlIGEgaGVscCBtZXNz YWdlICAqLwotCi1fUFJPVE9UWVAoIGludCBkb2hzZXQsIChpbnQpICk7Ci0jaWZuZGVmIE5PQ01E TAotX1BST1RPVFlQKCBpbnQgZG9ob3B0cywgKHZvaWQpICk7Ci0jZW5kaWYgLyogTk9DTURMICov Ci0jaWZuZGVmIE5PU1BMCi1fUFJPVE9UWVAoIGludCBkb2hmdW5jLCAoaW50KSApOwotZXh0ZXJu IHN0cnVjdCBrZXl0YWIgZm5jdGFiW107Ci1leHRlcm4gaW50IG5mdW5jczsKLSNlbmRpZiAvKiBO T1NQTCAqLwotI2lmZGVmIE9TMgotI2lmbmRlZiBOT0tWRVJCUwotX1BST1RPVFlQKCBpbnQgZG9o a3ZlcmIsIChpbnQpICk7Ci1leHRlcm4gc3RydWN0IGtleXRhYiBrdmVyYnNbXTsKLWV4dGVybiBp bnQgbmt2ZXJiczsKLSNlbmRpZiAvKiBOT0tWRVJCUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0j aWZuZGVmIE5PU1BMCi1zdGF0aWMgY2hhciAqIGh4eGRjbFtdID0gewotIlN5bnRheDogQVJSQVkg dmVyYiBvcGVyYW5kcy4uLiIsCi0iICIsCi0iRGVjbGFyZXMgYXJyYXlzIGFuZCBwZXJmb3JtcyB2 YXJpb3VzIG9wZXJhdGlvbnMgb24gdGhlbS4gIEFycmF5cyBoYXZlIiwKLSJ0aGUgZm9sbG93aW5n IHN5bnRheDoiLAotIiAiLAotIiAgXFwmYVtuXSIsCi0iICIsCi0id2hlcmUgXCJhXCIgaXMgYSBs ZXR0ZXIgYW5kIG4gaXMgYSBudW1iZXIgb3IgYSB2YXJpYWJsZSB3aXRoIGEgbnVtZXJpYyB2YWx1 ZSIsCi0ib3IgYW4gYXJpdGhtZXRpYyBleHByZXNzaW9uLiAgVGhlIHZhbHVlIG9mIGFuIGFycmF5 IGVsZW1lbnQgY2FuIGJlIGFueXRoaW5nIiwKLSJhdCBhbGwgLS0gYSBudW1iZXIsIGEgY2hhcmFj dGVyLCBhIHN0cmluZywgYSBmaWxlbmFtZSwgZXRjLiIsCi0iICIsCi0iVGhlIGZvbGxvd2luZyBB UlJBWSB2ZXJicyBhcmUgYXZhaWxhYmxlOiIsCi0iICIsCi0iWyBBUlJBWSBdIERFQ0xBUkUgYXJy YXluYW1lW25dIFsgPSBpbml0aWFsaXplcnMuLi4gXSIsCi0iICBEZWNsYXJlcyBhbiBhcnJheSBv ZiB0aGUgZ2l2ZW4gc2l6ZSwgbi4gIFRoZSByZXN1bHRpbmcgYXJyYXkgaGFzIG4rMSIsCi0iICBl bGVtZW50cywgMCB0aHJvdWdoIG4uICBBcnJheSBlbGVtZW50cyBjYW4gYmUgdXNlZCBqdXN0IGxp a2UgYW55IG90aGVyIiwKLSIgIHZhcmlhYmxlcy4gIEluaXRpYWwgdmFsdWVzIGNhbiBiZSBnaXZl biBmb3IgZWxlbWVudHMgMSwgMiwgLi4uIGJ5IiwKLSIgIGluY2x1ZGluZyA9IGZvbGxvd2VkIGJ5 IG9uZSBvciBtb3JlIHZhbHVlcyBzZXBhcmF0ZWQgYnkgc3BhY2VzLiAgSWYgeW91IiwKLSIgIG9t aXQgdGhlIHNpemUsIHRoZSBhcnJheSBpcyBzaXplZCBhY2NvcmRpbmcgdG8gdGhlIG51bWJlciBv ZiBpbml0aWFsaXplcnM7IiwKLSIgIGlmIG5vbmUgYXJlIGdpdmVuIHRoZSBhcnJheSBpcyBkZXN0 cm95ZWQgYW5kIHVuZGVjbGFyZWQgaWYgaXQgYWxyZWFkeSIsCi0iICBleGlzdGVkLiAgVGhlIEFS UkFZIGtleXdvcmQgaXMgb3B0aW9uYWwuICBTeW5vbnltOiBbIEFSUkFZIF0gRENMLiIsCi0iICIs Ci0iWyBBUlJBWSBdIFVOREVDTEFSRSBhcnJheW5hbWUiLAotIiAgRGVzdHJveXMgYW5kIHVuZGVj bGFyZXMgdGhlIGdpdmVuIGFycmF5LiAgU3lub255bTogQVJSQVkgREVTVFJPWS4iLAotIiAiLAot IkFSUkFZIFNIT1cgWyBhcnJheW5hbWUgXSIsCi0iICBEaXNwbGF5cyB0aGUgY29udGVudHMgb2Yg dGhlIGdpdmVuIGFycmF5LiAgQSByYW5nZSBzcGVjaWZpZXIgY2FuIGJlIiwKLSIgIGluY2x1ZGVk IHRvIGRpc3BsYXkgYSBzZWdtZW50IG9mIHRoZSBhcnJheSwgZS5nLiBcImFycmF5IHNob3cgXFwm YVsxOjI0XS5cIiIKLSwKLSIgIElmIHRoZSBhcnJheW5hbWUgaXMgb21pdHRlZCwgYWxsIGRlY2xh cmVkIGFycmF5cyBhcmUgbGlzdGVkLCBidXQgdGhlaXIiLAotIiAgY29udGVudHMgaXMgbm90IHNo b3duLiAgU3lub255bTogU0hPVyBBUlJBWS4iLAotIiAiLAotIkFSUkFZIENMRUFSIGFycmF5bmFt ZSIsCi0iICBDbGVhcnMgYWxsIGVsZW1lbnRzIG9mIHRoZSBhcnJheSwgaS5lLiBzZXRzIHRoZW0g dG8gZW1wdHkgdmFsdWVzLiIsCi0iICBZb3UgbWF5IGluY2x1ZGUgYSByYW5nZSBzcGVjaWZpZXIg dG8gY2xlYXIgYSBzZWdtZW50IG9mIHRoZSBhcnJheSByYXRoZXIiLAotIiAgdGhhbiB0aGUgd2hv bGUgYXJyYXksIGUuZy4gXCJhcnJheSBjbGVhciBcXCVhWzIyOjM4XVwiIiwKLSIgIiwKLSJBUlJB WSBTRVQgYXJyYXluYW1lIHZhbHVlIiwKLSIgIFNldHMgYWxsIGVsZW1lbnRzIG9mIHRoZSBhcnJh eSB0byB0aGUgZ2l2ZW4gdmFsdWUuICBZb3UgbWF5IHNwZWNpZnkgYSIsCi0iICByYW5nZSB0byBz ZXQgYSBzZWdtZW50IG9mIHRoZSBhcnJheSwgZS5nLiBcImFycmF5IHNldCBcXCVhWzI6OV0gMFwi IiwKLSIgIiwKLSJBUlJBWSBSRVNJWkUgYXJyYXluYW1lIG51bWJlciIsCi0iICBDaGFuZ2VzIHRo ZSBzaXplIG9mIHRoZSBnaXZlbiBhcnJheSwgd2hpY2ggbXVzdCBhbHJlYWR5IGV4aXN0LCB0byB0 aGUiLAotIiAgbnVtYmVyIGdpdmVuLiAgSWYgdGhlIG51bWJlciBpcyBzbWFsbGVyIHRoYW4gdGhl IGN1cnJlbnQgc2l6ZSwgdGhlIGV4dHJhIiwKLSIgIGVsZW1lbnRzIGFyZSBkaXNjYXJkZWQ7IGlm IGl0IGlzIGxhcmdlciwgbmV3IGVtcHR5IGVsZW1lbnRzIGFyZSBhZGRlZC4iLAotIiAiLAotIkFS UkFZIENPUFkgYXJyYXkxIGFycmF5MiIsCi0iICBDb3BpZXMgYXJyYXkxIHRvIGFycmF5Mi4gIElm IGFycmF5MiBoYXMgbm90IGJlZW4gZGVjbGFyZWQsIGl0IGlzIGNyZWF0ZWQiLAotIiAgYXV0b21h dGljYWxseS4gIFJhbmdlIHNwZWNpZmllcnMgbWF5IGJlIGdpdmVuIG9uIG9uZSBvciBib3RoIGFy cmF5cy4iLAotIiAiLAotIkFSUkFZIExJTksgYXJyYXkxIGFycmEyIiwKLSIgIE1ha2VzIGFycmF5 MSBhIGxpbmsgdG8gYXJyYXkyLiIsCi0iICIsCi0iWyBBUlJBWSBdIFNPUlQgWyBzd2l0Y2hlcyBd IGFycmF5LW5hbWUgWyBhcnJheTIgXSIsCi0iICBTb3J0cyB0aGUgZ2l2ZW4gYXJyYXkgbGV4aWNh bGx5IGFjY29yZGluZyB0byB0aGUgc3dpdGNoZXMuICBFbGVtZW50IDAgb2YiLAotIiAgdGhlIGFy cmF5IGlzIGV4Y2x1ZGVkIGZyb20gc29ydGluZyBieSBkZWZhdWx0LiAgVGhlIEFSUkFZIGtleXdv cmQgaXMiLAotIiAgb3B0aW9uYWwuICBJZiBhIHNlY29uZCBhcnJheSBuYW1lIGlzIGdpdmVuLCB0 aGF0IGFycmF5IGlzIHNvcnRlZCBhY2NvcmRpbmciLAotIiAgdG8gdGhlIGZpcnN0IG9uZS4gIFN3 aXRjaGVzOiIsCi0iICIsCi0iICAvQ0FTRTp7T04sT0ZGfSIsCi0iICAgIElmIE9OLCBhbHBoYWJl dGljIGNhc2UgbWF0dGVyczsgaWYgT0ZGIGl0IGlzIGlnbm9yZWQuICBJZiB0aGlzIHN3aXRjaCBp cyIsCi0iICAgIG9taXR0ZWQsIHRoZSBjdXJyZW50IFNFVCBDQVNFIHNldHRpbmcgYXBwbGllcy4i LAotIiAiLAotIiAgL0tFWTpudW1iZXIiLAotIiAgICBcCi1Qb3NpdGlvbiAoMS1iYXNlZCBjb2x1 bW4gbnVtYmVyKSBhdCB3aGljaCBjb21wYXJpc29ucyBiZWdpbiwgMSBieSBkZWZhdWx0LiIsCi0i ICIsCi0iICAvTlVNRVJJQyIsCi0iICAgIFNwZWNpZmllcyBhIG51bWVyaWMgcmF0aGVyIHRoYW4g bGV4aWNhbCBzb3J0LiIsCi0iICIsCi0iICAvUkFOR0U6bG93WzpoaWdoXSIsCi0iICAgIFRoZSBy YW5nZSBvZiBlbGVtZW50cywgbG93IHRocm91Z2ggaGlnaCwgdG8gYmUgc29ydGVkLiAgSWYgdGhp cyBzd2l0Y2giLAotIiAgICBpcyBub3QgZ2l2ZW4sIGVsZW1lbnRzIDEgdGhyb3VnaCB0aGUgZGlt ZW5zaW9uZWQgc2l6ZSBhcmUgc29ydGVkLiAgSWYiLAotIiAgICA6aGlnaCBpcyBvbWl0dGVkLCB0 aGUgZGltZW5zaW9uZWQgc2l6ZSBpcyB1c2VkLiAgVG8gaW5jbHVkZSBlbGVtZW50IDAgaW4iLAot IiAgICBhIHNvcnQsIHVzZSAvUkFOR0U6MCAodG8gc29ydCB0aGUgd2hvbGUgYXJyYXkpIG9yIC9S QU5HRTowOm4gKHRvIHNvcnQiLAotIiAgICBlbGVtZW50cyAwIHRocm91Z2ggbikuICBZb3UgY2Fu IHVzZSBhIHJhbmdlIHNwZWNpZmllciBpbiB0aGUgYXJyYXkgbmFtZSIsCi0iICAgIGluc3RlYWQg b2YgdGhlIC9SQU5HRSBzd2l0Y2guIiwKLSIgIiwKLSIgIC9SRVZFUlNFIiwKLSIgICAgU29ydCBp biByZXZlcnNlIG9yZGVyLiAgSWYgdGhpcyBzd2l0Y2ggaXMgbm90IGdpdmVuLCB0aGUgYXJyYXkg aXMgc29ydGVkIiwKLSIgICAgaW4gYXNjZW5kaW5nIG9yZGVyLiIsCi0iICIsCi0iVmFyaW91cyBm dW5jdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgYXJyYXkgb3BlcmF0aW9uczsgc2VlIEhFTFAgRlVO Q1RJT04gZm9yIiwKLSJkZXRhaWxzLiAgVGhlc2UgaW5jbHVkZSBcXGZkaW1lbnNpb24oKSwgXFxm YXJyYXlsb29rKCksIFxcZmZpbGVzKCksIFwKLVxcZnNwbGl0KCksIiwKLSJhbmQgbWFueSBtb3Jl LiIsCi0iIn07Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmZGVmIFpDT1BZCi1zdGF0aWMgY2hh ciAqIGhteHhjcHlbXSA9IHsKLSJTeW50YXg6IENPUFkgWyBzd2l0Y2hlcyBdIGZpbGUxIGZpbGUy IiwKLSIgIENvcGllcyB0aGUgc291cmNlIGZpbGUgKGZpbGUxKSB0byB0aGUgZGVzdGluYXRpb24g ZmlsZSAoZmlsZTIpLiAgSWYgZmlsZTIiLAotIiAgaXMgYSBkaXJlY3RvcnksIGZpbGUxIGNhbiBj b250YWluIHdpbGRjYXJkcyB0byBkZW5vdGUgYSBncm91cCBvZiBmaWxlcyB0byIsCi0iICBiZSBj b3BpZWQgdG8gdGhlIGdpdmVuIGRpcmVjdG9yeS4gIFN3aXRjaGVzOiIsCi0iICIsCi0iICAvTElT VCIsCi0iICAgIFByaW50IHRoZSBmaWxlbmFtZXMgYW5kIHN0YXR1cyB3aGlsZSBjb3B5aW5nLiAg U3lub255bXM6IC9MT0csIC9WRVJCT1NFLiIsCi0iICIsCi0iICAvTk9MSVNUIiwKLSIgICAgQ29w eSBzaWxlbnRseSAoZGVmYXVsdCkuIFN5bm9ueW1zOiAvTk9MT0csIC9RVUlFVC4iLAotIiAiLAot IiAgL1BSRVNFUlZFIiwKLSIgICAgQ29weSB0aW1lc3RhbXAgYW5kIHBlcm1pc3Npb25zIGZyb20g c291cmNlIGZpbGUgdG8gZGVzdGluYXRpb24gZmlsZS4iLAotIiAiLAotIiAgL09WRVJXUklURTp7 QUxXQVlTLE5FVkVSLE5FV0VSLE9MREVSfSIsCi0iICAgIFdoZW4gY29weWluZyBmcm9tIG9uZSBk aXJlY3RvcnkgdG8gYW5vdGhlciwgdGhpcyB0ZWxscyB3aGF0IHRvIGRvIHdoZW4iLAotIiAgICB0 aGUgZGVzdGluYXRpb24gZmlsZSBhbHJlYWR5IGV4aXN0czogb3ZlcndyaXRlIGl0IGFsd2F5czsg bmV2ZXI7IG9ubHkgaWYiLAotIiAgICB0aGUgc291cmNlIGZpbGUgaXMgbmV3ZXI7IG9yIG9ubHkg aWYgdGhlIHNvdXJjZSBmaWxlIGlzIG9sZGVyLiIsCi0iICIsCi0iICAvQVBQRU5EIiwKLSIgICAg QXBwZW5kIHRoZSBzb3VyY2UgZmlsZSB0byB0aGUgZGVzdGluYXRpb24gZmlsZS4gIEluIHRoaXMg Y2FzZSB0aGUgc291cmNlIiwKLSIgICAgZmlsZSBzcGVjaWZpY2F0aW9uIGNhbiBjb250YWluIHdp bGRjYXJkcywgYW5kIGFsbCB0aGUgbWF0Y2hpbmcgc291cmNlIiwKLSIgICAgZmlsZXMgYXJlIGFw cGVuZGVkLCBvbmUgYWZ0ZXIgdGhlIG90aGVyIGluIGFscGhhYmV0aWNhbCBvcmRlciBieSBuYW1l LCIsCi0iICAgIHRvIHRoZSBkZXN0aW5hdGlvbiBmaWxlLiIsCi0iICIsCi0iICAvU1dBUC1CWVRF UyIsCi0iICAgIFN3YXAgYnl0ZXMgd2hpbGUgY29weWluZyAoZS5nLiBmb3IgY29udmVydGluZyBi ZXR3ZWVuIEJpZy1FbmRpYW4gYW5kIiwKLSIgICAgTGl0dGxlLUVuZGlhbiBiaW5hcnkgZGF0YSBm b3JtYXRzKS4iLAotI2lmbmRlZiBOT1NQTAotIiAiLAotIiAgL0ZST01CNjQiLAotIiAgICBDb252 ZXJ0IGZyb20gQmFzZTY0IGVuY29kaW5nIHdoaWxlIGNvcHlpbmcuIiwKLSIgIiwKLSIgIC9UT0I2 NCIsCi0iICAgIENvbnZlcnQgdG8gQmFzZTY0IGVuY29kaW5nIHdoaWxlIGNvcHlpbmcuIiwKLSNl bmRpZiAvKiBOT1NQTCAqLwotIiIKLX07Ci0jZW5kaWYgLyogWkNPUFkgKi8KLQotI2lmbmRlZiBO T0ZSSUxMUwotc3RhdGljIGNoYXIgKiBobXh4cmVuW10gPSB7Ci0jaWZkZWYgTE9DVVMKLSIgIElm IExPQ1VTIGlzIFJFTU9URSBvciBMT0NVUyBpcyBBVVRPIGFuZCB5b3UgaGF2ZSBhbiBGVFAgY29u bmVjdGlvbiwiLAotIiAgdGhpcyBjb21tYW5kIGlzIGVxdWl2YWxlbnQgdG8gUkVNT1RFIFJFTkFN RSAoUlJFTikuICBPdGhlcndpc2U6IiwKLSIgIiwKLSNlbmRpZiAvKiBMT0NVUyAqLwotIlN5bnRh eDogUkVOQU1FIFsgc3dpdGNoZXMgXSBuYW1lMSBbIG5hbWUyIF0iLAotIiAgUmVuYW1lcyB0aGUg c291cmNlIGZpbGUgKG5hbWUxKSB0byB0aGUgdGFyZ2V0IG5hbWUyLiAgSWYgbmFtZTIgaXMgYSIs Ci0iICBkaXJlY3RvcnksIG5hbWUxIGlzIGFsbG93ZWQgdG8gY29udGFpbiB3aWxkY2FyZHMsIGFu ZCB0aGUgZmlsZShzKSBtYXRjaGluZyIsCi0iICBuYW1lMSBhcmUgbW92ZWQgdG8gZGlyZWN0b3J5 IG5hbWUyLCBzdWJqZWN0IHRvIHJ1bGVzIG9mIHRoZSB1bmRlcmx5aW5nIiwKLSIgIG9wZXJhdGlu ZyBzeXN0ZW0gcmVnYXJkaW5nIHJlbmFtaW5nIGFjcm9zcyBkaXNrIGJvdW5kYXJpZXMsIGV0Yy4g U3dpdGNoZXM6IiwKLSIgIiwKLSIgIC9MSVNUIiwKLSIgICAgUHJpbnQgdGhlIGZpbGVuYW1lcyBh bmQgc3RhdHVzIHdoaWxlIHJlbmFtaW5nLiAgU3lub255bXM6IC9MT0csIC9WRVJCT1NFIiwKLSIg IiwKLSIgIC9OT0xJU1QiLAotIiAgICBSZW5hbWUgc2lsZW50bHkgKGRlZmF1bHQpLiBTeW5vbnlt czogL05PTE9HLCAvUVVJRVQiLAotIiAiLAotIiAgL0NPTExJU0lPTjp7RkFJTCxTS0lQLE9WRVJX UklURX0iLAotIiAgICBUZWxscyB3aGF0IHRvIGRvIGlmIGEgZmlsZSB3aXRoIHRoZSBnaXZlbiAo b3IgZGVyaXZlZCkgbmV3IG5hbWUgYWxyZWFkeSIsCi0iICAgIGV4aXN0czogZmFpbCAoYW5kIHN0 b3Agd2l0aG91dCByZW5hbWluZyBhbnkgZmlsZXMpOyBza2lwIHRoaXMgZmlsZSIsCi0iICAgIHdp dGhvdXQgcmVuYW1pbmcgaXQgYW5kIGdvIG9uIHRvIHRoZSBuZXh0IG9uZSwgaWYgYW55OyBvciBv dmVyd3JpdGUgKHRoZSIsCi0iICAgIGV4aXN0aW5nIGZpbGUpLiAgUFJPQ0VFRCBpcyBhIHN5bm9u eW0gZm9yIFNLSVAuIiwKLSIgIiwKLSIgIC9TSU1VTEFURSIsCi0iICAgIFNob3cgd2hhdCB0aGUg ZWZmZWN0cyBvZiB0aGUgUkVOQU1FIGNvbW1hbmQgd291bGQgYmUgd2l0aG91dCBhY3R1YWxseSIs Ci0iICAgIHJlbmFtaW5nIGFueSBmaWxlcy4iLAotIiAiLAotIiAgV2hlbiBhbnkgb2YgdGhlIGZv bGxvd2luZyBzd2l0Y2hlcyBpcyBnaXZlbiwgbmFtZTIgbXVzdCBlaXRoZXIgYmUgdGhlIiwKLSIg IHRoZSBuYW1lIG9mIGEgZGlyZWN0b3J5LCBvciBlbHNlIG9taXR0ZWQsIGFuZCBuYW1lMSBpcyBh bGxvd2VkIHRvIGNvbnRhaW4iLAotIiAgY29udGFpbiB3aWxkY2FyZHMsIGFsbG93aW5nIG11bHRp cGxlIGZpbGVzIHRvIGJlIHJlbmFtZWQgYXQgb25jZS4gSWYgbmFtZTIiLAotIiAgaXMgZ2l2ZW4s IHRoZW4gYWxsIGZpbGVzIG1hdGNoaW5nIG5hbWUxIGFyZSBtb3ZlZCB0byB0aGUgbmFtZTIgZGly ZWN0b3J5IiwKLSIgIGFmdGVyIGJlaW5nIHJlbmFtZWQuIiwKLSIgIiwKLSIgIC9MT1dFUjp7QUxM LFVQUEVSfSIsCi0iICAgIENvbnZlcnRzIGxldHRlcnMgaW4gdGhlIGZpbGVuYW1lIHRvIGxvd2Vy Y2FzZS4gIEFMTCBtZWFucyB0byBjb252ZXJ0IiwKLSIgICAgYWxsIG1hdGNoaW5nIGZpbGVuYW1l cywgVVBQRVIgbWVhbnMgdG8gY29udmVydCBvbmx5IHRob3NlIGZpbGVuYW1lcyIsCi0iICAgIHRo YXQgY29udGFpbiBubyBsb3dlcmNhc2UgbGV0dGVycy4gIFRoZSBzd2l0Y2ggYXJndW1lbnQgY2Fu IGJlIG9taXR0ZWQsIiwKLSIgICAgaW4gd2hpY2ggY2FzZSBBTEwgZmlsZW5hbWVzIGFyZSBjb252 ZXJ0ZWQuIiwKLSIgIiwKLSIgIC9VUFBFUjp7QUxMLExPV0VSfSIsCi0iICAgIENvbnZlcnRzIGxl dHRlcnMgaW4gdGhlIGZpbGVuYW1lIHRvIHVwcGVyY2FzZS4gIEFMTCBtZWFucyB0byBjb252ZXJ0 IiwKLSIgICAgYWxsIG1hdGNoaW5nIGZpbGVuYW1lcywgTE9XRVIgbWVhbnMgdG8gY29udmVydCBv bmx5IHRob3NlIGZpbGVuYW1lcyIsCi0iICAgIHRoYXQgY29udGFpbiBubyB1cHBlcmNhc2UgbGV0 dGVycy4gIEFzIHdpdGggL0xPV0VSLCBBTEwgaXMgdGhlIGRlZmF1bHQiLAotIiAgICBzd2l0Y2gg YXJndW1lbnQuIiwKLSIgIiwKLSIgIC9GSVhTUEFDRVM6cyIsCi0iICAgIFJlcGxhY2VzIGFsbCBz cGFjZXMgaW4gZWFjaCBtYXRjaGluZyBmaWxlbmFtZSBieSB0aGUgc3RyaW5nIHMsIHdoaWNoIG1h eSIsCi0iICAgIGJlIGVtcHR5LCBhIHNpbmdsZSBjaGFyYWN0ZXIsIG9yIGEgc3RyaW5nIG9mIGNo YXJhY3RlcnMuICBUaGUgZGVmYXVsdCIsCi0iICAgIHJlcGxhY2VtZW50IChpZiBubyBhcmd1bWVu dCBpcyBnaXZlbikgaXMgdW5kZXJzY29yZSAoXykuIiwKLSIgIiwKLSIgIC9SRVBMQUNFOnt7c3Ry aW5nMX17c3RyaW5nMn17b3B0aW9uc319IiwKLSIgICAgUmVwbGFjZXMgYWxsIG9yIHNlbGVjdGVk IG9jY3VycmVuY2VzIG9mIHN0cmluZzEgd2l0aCBzdHJpbmcyIGluIHRoZSIsCi0iICAgIG1hdGNo aW5nIGZpbGVuYW1lcy4gIFRoZSBicmFjZXMgYXJlIHBhcnQgb2YgdGhlIGNvbW1hbmQuICBUaGUg b3B0aW9ucyIsCi0iICAgIHN0cmluZyBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIGNoYXJhY3Rl cnM6IiwKLSIgICAgIEE6IFN0cmluZyBtYXRjaGluZyBpcyBjYXNlLXNlbnNpdGl2ZS4iLAotIiAg ICAgYTogU3RyaW5nIG1hdGNoaW5nIGlzIGNhc2UtaW5zZW5zaXRpdmUuIiwKLSIgICAgIF46IFN0 cmluZyBtYXRjaGluZyBpcyBhbmNob3JlZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlbmFt ZS4iLAotIiAgICAgJDogU3RyaW5nIG1hdGNoaW5nIGlzIGFuY2hvcmVkIHRvIHRoZSBlbmQgb2Yg dGhlIGZpbGVuYW1lLiIsCi0iICAgICAxOiBPbmx5IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRo ZSBzdHJpbmcgKGlmIGFueSkgd2lsbCBiZSBjaGFuZ2VkLiIsCi0iICAgICAyOiBPbmx5IHRoZSBz ZWNvbmQgb2NjdXJyZW5jZSwgYW5kIHNvIG9uIGZvciBhbGwgZGlnaXRzIHVwIHRvIDkuIiwKLSIg ICAgIC06IChiZWZvcmUgYSBkaWdpdCkgT2NjdXJyZW5jZXMgYXJlIGNvdW50ZWQgZnJvbSB0aGUg cmlnaHQuIiwKLSIgICAgIH46IChiZWZvcmUgb2NjdXJyZW5jZSkgQWxsIG9jY3VyZW5jZXMgQlVU IHRoZSBvbmUgZ2l2ZW4gYXJlIGNoYW5nZWQuIiwKLSIgIiwKLSIgIC9DT05WRVJUOmNzZXQxOmNz ZXQxIiwKLSIgICAgQ29udmVydHMgZWFjaCBtYXRjaGluZyBmaWxlbmFtZSBmcm9tIGNoYXJhY3Rl ci1zZXQgMSB0byBjaGFyYWN0ZXItc2V0IDIuIiwKLSIgICAgQ2hhcmFjdGVyIHNldHMgYXJlIHRo ZSBzYW1lIGFzIGZvciBTRVQgRklMRSBDSEFSQUNURVItU0VULiIsCi0iICIsCi0iICBHbG9iYWwg dmFsdWVzIGZvciAvTElTVCBhbmQgQ09MTElTSU9OIGNhbiBiZSBzZXQgd2l0aCBTRVQgUkVOQU1F IGFuZCIsCi0iICBkaXNwbGF5ZWQgd2l0aCBTSE9XIFJFTkFNRS4iLAotIiIKLX07Ci0jZW5kaWYg LyogTk9GUklMTFMgKi8KLQotc3RhdGljIGNoYXIgKgotY21kbGhscFtdID0gewotIkNvbW1hbmQt bGluZSBvcHRpb25zIGFyZSBnaXZlbiBhZnRlciB0aGUgcHJvZ3JhbSBuYW1lIGluIHRoZSBzeXN0 ZW0iLAotImNvbW1hbmQgdGhhdCB5b3UgdXNlIHRvIHN0YXJ0IEtlcm1pdC4gIEV4YW1wbGU6IiwK LSIgIiwKLSIga2VybWl0IC1pIC1zIG9vZmEuZXhlIiwKLSIgIiwKLSJ0ZWxscyBLZXJtaXQgdG8g c2VuZCAoLXMpIHRoZSBmaWxlIG9vZmEuZXhlIGluIGJpbmFyeSAoLWkpIG1vZGUuIiwKLSIgIiwK LSJDb21tYW5kLWxpbmUgb3B0aW9ucyBhcmUgY2FzZS1zZW5zaXRpdmU7IFwiLXNcIiBpcyBkaWZm ZXJlbnQgZnJvbSBcIi1TXCIuIiwKLSNpZmRlZiBWTVMKLSJJbiBWTVMsIHVwcGVyY2FzZSBvcHRp b25zIG11c3QgYmUgZW5jbG9zZWQgaW4gZG91YmxlcXVvdGVzOiAiLAotIiAiLAotIiAkIGtlcm1p dCBcIi1ZXCIgXCItU1wiIC1zIG9vZmEudHh0ICIsCi0jZW5kaWYgLyogVk1TICovCi0iICIsCi0i SWYgYW55IFwiYWN0aW9uIG9wdGlvbnNcIiBhcmUgaW5jbHVkZWQgb24gdGhlIGNvbW1hbmQgbGlu ZSwgS2VybWl0IGV4aXRzIiwKLSJhZnRlciBleGVjdXRpbmcgaXRzIGNvbW1hbmQtbGluZSBvcHRp b25zLiAgSWYgLVMgaXMgaW5jbHVkZWQsIG9yIG5vIGFjdGlvbiIsCi0ib3B0aW9ucyB3ZXJlIGdp dmVuLCBLZXJtaXQgZW50ZXJzIGl0cyBpbnRlcmFjdGl2ZSBjb21tYW5kIHBhcnNlciBhbmQiLAot Imlzc3VlcyBpdHMgcHJvbXB0LiIsCi0iICIsCi0iQ29tbWFuZC1saW5lIG9wdGlvbnMgYXJlIHNp bmdsZSBjaGFyYWN0ZXJzIHByZWNlZGVkIGJ5IGRhc2ggKC0pLiAgU29tZSIsCi0icmVxdWlyZSBh biBcImFyZ3VtZW50LFwiIG90aGVycyBkbyBub3QuICBJZiBhbiBhcmd1bWVudCBjb250YWlucyBz cGFjZXMsIGl0IiwKLSJtdXN0IGJlIGVuY2xvc2VkIGluIGRvdWJsZXF1b3RlczoiLAotIiAiLAot IiBrZXJtaXQgLXMgXCJmaWxlbmFtZSB3aXRoIHNwYWNlc1wiIiwKLSIgIiwKLSJcCi1BbiBvcHRp b24gdGhhdCBkb2VzIG5vdCByZXF1aXJlIGFuIGFyZ3VtZW50IGNhbiBiZSBidW5kbGVkIHdpdGgg b3RoZXIgb3B0aW9uczoiCi0sCi0iICIsCi0iIGtlcm1pdCAtUWlzIG9vZmEuZXhlIiwKLSIgIiwK LSJFeGNlcHRpb25zIHRvIHRoZSBydWxlczoiLAotIiAiLAotIiAuIElmIHRoZSBmaXJzdCBjb21t YW5kLWxpbmUgb3B0aW9uIGlzIGEgZmlsZW5hbWUsIEtlcm1pdCBleGVjdXRlcyBjb21tYW5kcyIs Ci0iICAgZnJvbSB0aGUgZmlsZS4gIEFkZGl0aW9uYWwgY29tbWFuZC1saW5lIG9wdGlvbnMgY2Fu IGZvbGxvdyB0aGUgZmlsZW5hbWUuIiwKLSIgIiwKLSIgLiBUaGUgc3BlY2lhbCBvcHRpb24gXCI9 XCIgKGVxdWFsIHNpZ24pIG9yIFwiLS1cIiAoZG91YmxlIGh5cGhlbikgbWVhbnMgdG8iLAotIiAg IHRyZWF0IHRoZSByZXN0IG9mIHRoZSBjb21tYW5kIGxpbmUgYXMgZGF0YSwgcmF0aGVyIHRoYW4g Y29tbWFuZHM7IHRoaXMiLAotIiAgIGRhdGEgaXMgcGxhY2VkIGluIHRoZSBhcmd1bWVudCB2ZWN0 b3IgYXJyYXksIFxcJkBbXSwgYWxvbmcgd2l0aCB0aGUgb3RoZXIiLAotIiAgIGl0ZW1zIG9uIHRo ZSBjb21tYW5kIGxpbmUsIGFuZCBhbHNvIGluIHRoZSB0b3AtbGV2ZWwgXFwlMS4uXFwlOSB2YXJp YWJsZXMuIgotLAotIiAiLAotI2lmZGVmIEtFUkJBTkcKLSIgLiBBIHNpbWlsYXIgb3B0aW9uIFwi K1wiIChwbHVzIHNpZ24pIG1lYW5zOiB0aGUgbmFtZSBvZiBhIEtlcm1pdCBzY3JpcHQiLAotIiAg IGZpbGUgZm9sbG93cy4gIFRoaXMgZmlsZSBpcyB0byBiZSBleGVjdXRlZCwgYW5kIGl0cyBuYW1l IGFzc2lnbmVkIHRvIFxcJTAiLAotIiAgIGFuZCBcXCZfWzBdLiAgQWxsIHN1YnNlcXVlbnQgY29t bWFuZC1saW5lIGFyZ3VtZW50cyBhcmUgdG8gYmUgaWdub3JlZCBieSIsCi0iICAgS2VybWl0IGJ1 dCBtYWRlIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0IGFzIFxcJTEsIFxcJTIsIC4uLiwgYXMgd2Vs bCBhcyIsCi0iICAgaW4gdGhlIGFyZ3VtZW50LXZlY3RvciBhcnJheXMuICBUaGUgaW5pdGlhbGl6 YXRpb24gZmlsZSBpcyBub3QgZXhlY3V0ZWQiLAotIiAgIGF1dG9tYXRpY2FsbHkgaW4gdGhpcyBj YXNlLiIsCi0iICIsCi0jZW5kaWYgLyogS0VSQkFORyAqLwotIiAuIFRoZSAtcyBvcHRpb24gY2Fu IGFjY2VwdCBtdWx0aXBsZSBmaWxlbmFtZXMsIHNlcGFyYXRlZCBieSBzcGFjZXMuIiwKLSIgIiwK LSIgLiB0aGUgLWogYW5kIC1KIG9wdGlvbnMgYWxsb3cgYW4gb3B0aW9uYWwgc2Vjb25kIGFyZ3Vt ZW50LCB0aGUgVENQIHBvcnQiLAotIiAgIG5hbWUgb3IgbnVtYmVyLiIsCi0iICIsCi0iVHlwZSBc ImhlbHAgb3B0aW9ucyBhbGxcIiB0byBsaXN0IGFsbCB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnMu IiwKLSJUeXBlIFwiaGVscCBvcHRpb24geFwiIHRvIHNlZSB0aGUgaGVscCBtZXNzYWdlIGZvciBv cHRpb24geC4iLAotIiAiLAotIktlcm1pdCBhbHNvIG9mZmVycyBhIHNlbGVjdGlvbiBvZiBcImV4 dGVuZGVkIGNvbW1hbmQtbGluZVwiIG9wdGlvbnMuIiwKLSJUaGVzZSBiZWdpbiB3aXRoIHR3byBk YXNoZXMsIGZvbGxvd2VkIGJ5IGEga2V5d29yZCwgYW5kIHRoZW4sIGlmIHRoZSBvcHRpb24iLAot ImhhcyBhcmd1bWVudHMsIGEgY29sb24gKDopIG9yIGVxdWFsIHNpZ24gKD0pIGZvbGxvd2VkIGJ5 IHRoZSBhcmd1bWVudC4iLAotIlVubGlrZSBzaW5nbGUtbGV0dGVyIG9wdGlvbnMsIGV4dGVuZGVk IG9wdGlvbiBrZXl3b3JkcyBhcmVuJ3QgY2FzZSBzZW5zaXRpdmUiLAotImFuZCB0aGV5IGNhbiBi ZSBhYmJyZXZpYXRlZCB0byBhbnkgbGVuZ3RoIHRoYXQgc3RpbGwgZGlzdGluZ3Vpc2hlcyB0aGVt IGZyb20iLAotIm90aGVyIGV4dGVuZGVkLW9wdGlvbiBrZXl3b3Jkcy4gIEV4YW1wbGU6IiwKLSIg IiwKLSIgIGtlcm1pdCAtLWJhbm5lcjpvb2ZhLnR4dCIsCi0iICIsCi0id2hpY2ggZGVzaWduYXRl cyB0aGUgZmlsZSBvb2ZhLnR4dCB0byBiZSBwcmludGVkIHVwb24gc3RhcnR1cCwgcmF0aGVyIHRo YW4iLAotInRoZSBidWlsdC1pbiBiYW5uZXIgKGdyZWV0aW5nKSB0ZXh0LiAgVG8gb2J0YWluIGEg bGlzdCBvZiBhdmFpbGFibGUiLAotImV4dGVuZGVkIG9wdGlvbnMsIHR5cGUgXCJoZWxwIGV4dGVu ZGVkLW9wdGlvbnMgP1wiLiAgVG8gZ2V0IGhlbHAgYWJvdXQgYWxsIiwKLSJleHRlbmRlZCBvcHRp b25zLCB0eXBlIFwiaGVscCBleHRlbmRlZC1vcHRpb25zXCIuICBUbyBnZXQgaGVscCBhYm91dCBh IiwKLSJwYXJ0aWN1bGFyIGV4dGVuZGVkIG9wdGlvbiwgdHlwZSBcImhlbHAgZXh0ZW5kZWQtb3B0 aW9uIHh4eFwiLCB3aGVyZSBcInh4eFwiIiwKLSJpcyB0aGUgb3B0aW9uIGtleXdvcmQuIiwKLSNp ZmRlZiBDT01NRU5UCi0jaWZuZGVmIE5PSUtTRAotIiAiLAotIkF0IHByZXNlbnQsIG1vc3Qgb2Yg dGhlIGV4dGVuZGVkIG9wdGlvbnMgYXBwbHkgb25seSB0byB0aGUgSW50ZXJuZXQgS2VybWl0IiwK LSJTZXJ2aWNlIERhZW1vbiAoSUtTRCkuICBUeXBlIFwiaGVscCBpa3NkXCIgZm9yIGRldGFpbHMu IiwKLSNlbmRpZiAvKiBOT0lLU0QgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0iIgotfTsKLQot Ci0jaWZuZGVmIE5PSEVMUAotI2lmbmRlZiBOT0NNREwKLWludAotZG94b3B0cygpIHsKLSAgICBl eHRlcm4gY2hhciAqIHhvcHRobHBbXSwgKiB4YXJnaGxwW107Ci0gICAgZXh0ZXJuIHN0cnVjdCBr ZXl0YWIgeGFyZ3RhYltdOwotICAgIGV4dGVybiBpbnQgbnhhcmdzOwotICAgIGludCBpLCB4LCB5 LCBuID0gMDsKLSNpZmRlZiBDS19UVEdXU0laCi0jaWZkZWYgT1MyCi0gICAgdHRnY3dzeigpOwot I2Vsc2UgLyogT1MyICovCi0gICAgLyogQ2hlY2sgd2hldGhlciB3aW5kb3cgc2l6ZSBjaGFuZ2Vk ICovCi0gICAgaWYgKHR0Z3dzaXooKSA+IDApIHsKLSAgICAgICAgaWYgKHR0X3Jvd3MgPiAwICYm IHR0X2NvbHMgPiAwKSB7Ci0gICAgICAgICAgICBjbWRfcm93cyA9IHR0X3Jvd3M7Ci0gICAgICAg ICAgICBjbWRfY29scyA9IHR0X2NvbHM7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogT1My ICovCi0jZW5kaWYgLyogQ0tfVFRHV1NJWiAqLwotICAgIHkgPSBjbWtleSh4YXJndGFiLAotICAg ICAgICAgICAgICBueGFyZ3MsCi0gICAgICAgICAgICAgICJFeHRlbmRlZCBhcmd1bWVudCB3aXRo b3V0IHRoZSBcIi0tXCIgcHJlZml4IiwKLSAgICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICAg IHh4c3RyaW5nCi0gICAgICAgICAgICAgICk7Ci0gICAgaWYgKHkgPT0gLTMpIHsKLQlwcmludGYo IlxuIik7Ci0gICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLQkgIHJldHVybih4KTsKLSAg ICAgICAgZm9yIChpID0gMDsgaSA8PSBYQV9NQVg7IGkrKykgewotICAgICAgICAgICAgaWYgKHhv cHRobHBbaV0pIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIiVzXG4iLHhvcHRobHBbaV0pOwot ICAgICAgICAgICAgICAgIHByaW50ZigiICAgJXNcbiIseGFyZ2hscFtpXSk7Ci0gICAgICAgICAg ICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICAgICAgICAgIG4gKz0gMzsKLSAgICAgICAgICAg ICAgICBpZiAobiA+IChjbWRfcm93cyAtIDYpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh YXNrbW9yZSgpKQotICAgICAgICAgICAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgICAg ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgIG4gPSAwOwotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4oMSk7Ci0gICAg fSBlbHNlIGlmICh5IDwgMCkKLSAgICAgIHJldHVybih5KTsKLSAgICBpZiAoKHggPSBjbWNmbSgp KSA8IDApCi0gICAgICByZXR1cm4oeCk7Ci0gICAgcHJpbnRmKCJcbiVzXG4iLHhvcHRobHBbeV0p OwotICAgIHByaW50ZigiICAgJXNcblxuIix4YXJnaGxwW3ldKTsKLSAgICByZXR1cm4oMSk7Ci19 Ci0KLWludAotZG9ob3B0cygpIHsKLSAgICBpbnQgaSwgbiwgeCwgeSwgeiwgYWxsID0gMCwgbXNn ID0gMDsKLSAgICBjaGFyICpzOwotICAgIGV4dGVybiBjaGFyICpvcHRobHBbXSwgKmFyZ2hscFtd OwotICAgIGV4dGVybiBjaGFyICogeG9wdGhscFtdLCAqIHhhcmdobHBbXTsKLSAgICBleHRlcm4g aW50IG9wdGFjdFtdOwotICAgIGlmICgoeCA9IGNtdHh0KCJBIGNvbW1hbmQtbGluZSBvcHRpb24g Y2hhcmFjdGVyLFxuXAotb3IgdGhlIHdvcmQgQUxMLCBvciBjYXJyaWFnZSByZXR1cm4gZm9yIGFu IG92ZXJ2aWV3IiwKLSAgICAgICAgICAgICAgICAgICAiIiwgJnMsIHh4c3RyaW5nKSkgPCAwKQot ICAgICAgcmV0dXJuKHgpOwotICAgIGlmICghKnMpCi0gICAgICBtc2cgPSAxOwotICAgIGVsc2Ug aWYgKCFzdHJjbXAocywiYWxsIikgfHwgKCFzdHJjbXAocywiQUxMIikpKQotICAgICAgYWxsID0g MTsKLSAgICBlbHNlIGlmICgqcyA9PSAnLScpICAgICAgICAgICAgICAgICAvKiBCZSB0b2xlcmFu dCBvZiBsZWFkaW5nIGh5cGhlbiAqLwotICAgICAgcysrOwotICAgIGlmICghYWxsICYmIChpbnQp c3RybGVuKHMpID4gMSkgewotICAgICAgICBwcmludGYoIj9BIHNpbmdsZSBjaGFyYWN0ZXIsIHBs ZWFzZSwgb3IgY2FycmlhZ2UgdG8gbGlzdCB0aGVtIGFsbC5cbiIpOwotICAgICAgICByZXR1cm4o LTkpOwotICAgIH0KLSAgICBpZiAoYWxsKSB7Ci0gICAgICAgIHkgPSAzMzsKLSAgICAgICAgeiA9 IDEyNzsKLSAgICB9IGVsc2UgewotICAgICAgICB5ID0gKnM7Ci0gICAgICAgIHogPSAoeSA9PSAw KSA/IDEyNyA6IHk7Ci0gICAgICAgIGlmICh5ID09IDApIHkgPSAzMzsKLSAgICB9Ci0jaWZkZWYg Q0tfVFRHV1NJWgotI2lmZGVmIE9TMgotICAgIHR0Z2N3c3ooKTsKLSNlbHNlIC8qIE9TMiAqLwot ICAgIC8qIENoZWNrIHdoZXRoZXIgd2luZG93IHNpemUgY2hhbmdlZCAqLwotICAgIGlmICh0dGd3 c2l6KCkgPiAwKSB7Ci0gICAgICAgIGlmICh0dF9yb3dzID4gMCAmJiB0dF9jb2xzID4gMCkgewot ICAgICAgICAgICAgY21kX3Jvd3MgPSB0dF9yb3dzOwotICAgICAgICAgICAgY21kX2NvbHMgPSB0 dF9jb2xzOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIENL X1RUR1dTSVogKi8KLSAgICBwcmludGYoIlxuIik7Ci0gICAgZm9yIChpID0gMCwgbiA9IDE7IG1z ZyAhPSAwICYmICpjbWRsaGxwW2ldOyBpKyspIHsKLSAgICAgICAgcHJpbnRmKCIlc1xuIixjbWRs aGxwW2ldKTsKLSAgICAgICAgaWYgKCsrbiA+IChjbWRfcm93cyAtIDMpKSB7Ci0gICAgICAgICAg IGlmICghYXNrbW9yZSgpKQotICAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgICAgZWxz ZQotICAgICAgICAgICAgIG4gPSAwOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChhbGwpIHsK LSAgICAgICAgcHJpbnRmKCJUaGUgZm9sbG93aW5nIGNvbW1hbmQtbGluZSBvcHRpb25zIGFyZSBh dmFpbGFibGU6XG5cbiIpOwotICAgICAgICBuICs9IDI7Ci0gICAgfQotICAgIGZvciAoaSA9IHk7 IG1zZyA9PSAwICYmIGkgPD0gejsgaSsrKSB7Ci0gICAgICAgIGlmICghb3B0aGxwW2ldKQotICAg ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYXJnaGxwW2ldKSB7ICAgICAgICAgICAgICAg IC8qIE9wdGlvbiB3aXRoIGFyZyAqLwotICAgICAgICAgICAgcHJpbnRmKCIgLSVjIDxhcmc+JXNc biIsKGNoYXIpaSwob3B0YWN0W2ldPyIgKGFjdGlvbiBvcHRpb24pIjoiIikpOwotCi0gICAgICAg ICAgICBwcmludGYoIiAgICAgJXNcbiIsb3B0aGxwW2ldKTsKLSAgICAgICAgICAgIHByaW50Zigi ICAgICBBcmd1bWVudDogJXNcblxuIixhcmdobHBbaV0pOwotICAgICAgICAgICAgeCA9IDQ7Ci0g ICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogT3B0aW9uIHdpdGhvdXQg YXJnICovCi0gICAgICAgICAgICBwcmludGYoIiAtJWMgICVzJXNcbiIsCi0gICAgICAgICAgICAg ICAgICAgKGNoYXIpaSwgb3B0aGxwW2ldLAotICAgICAgICAgICAgICAgICAgIChvcHRhY3RbaV0/ IiAoYWN0aW9uIG9wdGlvbikiOiIiKQotICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAg IHByaW50ZigiICAgICBBcmd1bWVudDogKG5vbmUpXG5cbiIpOwotICAgICAgICAgICAgeCA9IDM7 Ci0gICAgICAgIH0KLSAgICAgICAgbiArPSB4OwotICAgICAgICBpZiAobiA+IChjbWRfcm93cyAt IHggLSAxKSkgewotICAgICAgICAgICAgaWYgKCFhc2ttb3JlKCkpCi0gICAgICAgICAgICAgIHJl dHVybigwKTsKLSAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBuID0gMDsKLSAgICAgICAg fQotICAgIH0KLSAgICBpZiAoYWxsKSB7CQkJCS8qIEplZmYsIEphbiAyMDAzICovCi0gICAgICAg IHByaW50ZigiXG4iKTsKLSAgICAgICAgaWYgKCsrbiA+PSBjbWRfcm93cykgewotICAgICAgICAg ICAgaWYgKCFhc2ttb3JlKCkpCi0gICAgICAgICAgICAgIHJldHVybigwKTsKLQkgICAgZWxzZQot ICAgICAgICAgICAgICBuID0gMDsKLSAgICAgICAgfQotICAgICAgICBwcmludGYoIlRoZSBmb2xs b3dpbmcgZXh0ZW5kZWQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOlxuIik7Ci0gICAgICAgIGlmICgr K24gPj0gY21kX3Jvd3MpIHsKLSAgICAgICAgICAgIGlmICghYXNrbW9yZSgpKQotICAgICAgICAg ICAgICByZXR1cm4oMCk7Ci0JICAgIGVsc2UKLSAgICAgICAgICAgICAgbiA9IDA7Ci0gICAgICAg IH0KLSAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICBpZiAoKytuID49IGNtZF9yb3dzKSB7 Ci0gICAgICAgICAgICBpZiAoIWFza21vcmUoKSkKLSAgICAgICAgICAgICAgcmV0dXJuKDApOwot CSAgICBlbHNlCi0gICAgICAgICAgICAgIG4gPSAwOwotICAgICAgICB9Ci0gICAgICAgIGZvciAo aSA9IDA7IGkgPD0gWEFfTUFYOyBpKyspIHsKLSAgICAgICAgICAgIGlmICh4b3B0aGxwW2ldKSB7 Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIlc1xuIix4b3B0aGxwW2ldKTsKLSAgICAgICAgICAg ICAgICBwcmludGYoIiAgICVzXG4iLHhhcmdobHBbaV0pOwotICAgICAgICAgICAgICAgIHByaW50 ZigiXG4iKTsKLSAgICAgICAgICAgICAgICBuICs9IDM7Ci0gICAgICAgICAgICAgICAgaWYgKG4g PiAoY21kX3Jvd3MgLSA0KSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWFza21vcmUoKSkK LQkJICAgICAgcmV0dXJuKDApOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0JCSAgICAgIG4g PSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K LSAgICByZXR1cm4oMSk7Ci19Ci0jZW5kaWYgLyogTk9DTURMICovCi0jZW5kaWYgLyogTk9IRUxQ ICovCi0KLSNpZmRlZiBDS0NIQU5ORUxJTwotc3RhdGljIGNoYXIgKiBoeHhmaWxlW10gPSB7Ci0i U3ludGF4OiBGSUxFIDxzdWJjb21tYW5kPiBbIHN3aXRjaGVzIF0gPGNoYW5uZWw+IFsgPGRhdGE+ IF0iLAotIiAgT3BlbnMsIGNsb3NlcywgcmVhZHMsIHdyaXRlcywgYW5kIG1hbmFnZXMgbG9jYWwg ZmlsZXMuIiwKLSIgIiwKLSJUaGUgRklMRSBjb21tYW5kcyBhcmU6IiwKLSIgIiwKLSIgIEZJTEUg T1BFTiAgIChvciBGT1BFTikgICAtLSBPcGVuIGEgbG9jYWwgZmlsZS4iLAotIiAgRklMRSBDTE9T RSAgKG9yIEZDTE9TRSkgIC0tIENsb3NlIGFuIG9wZW4gZmlsZS4iLAotIiAgRklMRSBSRUFEICAg KG9yIEZSRUFEKSAgIC0tIFJlYWQgZGF0YSBmcm9tIGFuIG9wZW4gZmlsZS4iLAotIiAgRklMRSBX UklURSAgKG9yIEZXUklURSkgIC0tIFdyaXRlIGRhdGEgdG8gYW4gb3BlbiBmaWxlLiIsCi0iICBG SUxFIExJU1QgICAob3IgRkxJU1QpICAgLS0gTGlzdCBvcGVuIGZpbGVzLiIsCi0iICBGSUxFIFNU QVRVUyAob3IgRlNUQVRVUykgLS0gU2hvdyBzdGF0dXMgb2YgYSBjaGFubmVsLiIsCi0iICBGSUxF IFJFV0lORCAob3IgRlJFV0lORCkgLS0gUmV3aW5kIGFuIG9wZW4gZmlsZSIsCi0iICBGSUxFIENP VU5UICAob3IgRkNPVU5UKSAgLS0gQ291bnQgbGluZXMgb3IgYnl0ZXMgaW4gYW4gb3BlbiBmaWxl IiwKLSIgIEZJTEUgU0VFSyAgIChvciBGU0VFSykgICAtLSBTZWVrIHRvIHNwZWNpZmllZCBzcG90 IGluIGFuIG9wZW4gZmlsZS4iLAotIiAgRklMRSBGTFVTSCAgKG9yIEZGTFVTSCkgIC0tIEZsdXNo IG91dHB1dCBidWZmZXJzIGZvciBhbiBvcGVuIGZpbGUuIiwKLSIgIiwKLSJUeXBlIEhFTFAgRklM RSBPUEVOIG9yIEhFTFAgRk9QRU4gZm9yIGRldGFpbHMgYWJvdXQgRklMRSBPUEVOOyIsCi0idHlw ZSBIRUxQIEZJTEUgQ0xPU0Ugb3IgSEVMUCBGQ0xPU0UgZm9yIGRldGFpbHMgYWJvdXQgRklMRSBD TE9TRSwgYW5kIHNvIG9uLiIsCi0iICIsCi0iVGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgYXJlIHJl bGF0ZWQgdG8gdGhlIEZJTEUgY29tbWFuZDoiLAotIiAiLAotIiAgXFx2KGZfbWF4KSAgICAgLS0g TWF4aW11bSBudW1iZXIgb2YgZmlsZXMgdGhhdCBjYW4gYmUgb3BlbiBhdCBvbmNlIiwKLSIgIFxc dihmX2Vycm9yKSAgIC0tIENvbXBsZXRpb24gY29kZSBvZiBtb3N0IHJlY2VudCBGSUxFIGNvbW1h bmQgb3IgZnVuY3Rpb24iLAotIiAgXFx2KGZfY291bnQpICAgLS0gUmVzdWx0IG9mIG1vc3QgcmVj ZW50IEZJTEUgQ09VTlQgY29tbWFuZCIsCi0iICIsCi0iVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMg YXJlIHJlbGF0ZWQgdG8gdGhlIEZJTEUgY29tbWFuZDoiLAotIiAiLAotIiAgXFxGX2VvZigpICAg ICAgLS0gQ2hlY2sgaWYgY2hhbm5lbCBpcyBhdCBFT0YiLAotIiAgXFxGX3BvcygpICAgICAgLS0g R2V0IGNoYW5uZWwgcmVhZC93cml0ZSBwb3NpdGlvbiAoYnl0ZSBudW1iZXIpIiwKLSIgIFxcRl9s aW5lKCkgICAgIC0tIEdldCBjaGFubmVsIHJlYWQvd3JpdGUgcG9zaXRpb24gKGxpbmUgbnVtYmVy KSIsCi0iICBcXEZfaGFuZGxlKCkgICAtLSBHZXQgZmlsZSBoYW5kbGUiLAotIiAgXFxGX3N0YXR1 cygpICAgLS0gR2V0IGNoYW5uZWwgc3RhdHVzIiwKLSIgIFxcRl9nZXRjaGFyKCkgIC0tIFJlYWQg Y2hhcmFjdGVyIiwKLSIgIFxcRl9nZXRsaW5lKCkgIC0tIFJlYWQgbGluZSIsCi0iICBcXEZfZ2V0 YmxvY2soKSAtLSBSZWFkIGJsb2NrIiwKLSIgIFxcRl9wdXRjaGFyKCkgIC0tIFdyaXRlIGNoYXJh Y3RlciIsCi0iICBcXEZfcHV0bGluZSgpICAtLSBXcml0ZSBsaW5lIiwKLSIgIFxcRl9wdXRibG9j aygpIC0tIFdyaXRlIGJsb2NrIiwKLSIgIFxcRl9lcnJtc2coKSAgIC0tIEVycm9yIG1lc3NhZ2Ug ZnJvbSBtb3N0IHJlY2VudCBGSUxFIGNvbW1hbmQgb3IgZnVuY3Rpb24iLAotIiAiLAotIlR5cGUg SEVMUCA8ZnVuY3Rpb24tbmFtZT4gZm9yIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggb25lLiIsCi0i IgotfTsKLQotc3RhdGljIGNoYXIgKiBoeHhmX29wW10gPSB7Ci0iU3ludGF4OiBGSUxFIE9QRU4g WyBzd2l0Y2hlcyBdIDx2YXJpYWJsZT4gPGZpbGVuYW1lPiIsCi0iICBPcGVucyB0aGUgZmlsZSBp bmRpY2F0ZWQgYnkgPGZpbGVuYW1lPiBpbiB0aGUgbW9kZSBpbmRpY2F0ZWQgYnkgdGhlIiwKLSIg IHN3aXRjaGVzLCBpZiBhbnksIG9yIGlmIG5vIHN3aXRjaGVzIGFyZSBpbmNsdWRlZCwgaW4gcmVh ZC1vbmx5IG1vZGUsIGFuZCIsCi0iICBhc3NpZ25zIGEgY2hhbm5lbCBudW1iZXIgZm9yIHRoZSBm aWxlIHRvIHRoZSBnaXZlbiB2YXJpYWJsZS4iLAotIiAgU3lub255bTogRk9QRU4uICBTd2l0Y2hl czoiLAotIiAiLAotIi9SRUFEIiwKLSIgIE9wZW4gdGhlIGZpbGUgZm9yIHJlYWRpbmcuIiwKLSIg IiwKLSIvV1JJVEUiLAotIiAgT3BlbiB0aGUgZmlsZSBmb3Igd3JpdGluZy4gIElmIC9SRUFEIHdh cyBub3QgYWxzbyBzcGVjaWZpZWQsIHRoaXMgY3JlYXRlcyIsCi0iICBhIG5ldyBmaWxlLiAgSWYg L1JFQUQgd2FzIHNwZWNpZmllZCwgdGhlIGV4aXN0aW5nIGZpbGUgaXMgcHJlc2VydmVkLCBidXQi LAotIiAgd3JpdGluZyBpcyBhbGxvd2VkLiAgSW4gYm90aCBjYXNlcywgdGhlIHJlYWQvd3JpdGUg cG9pbnRlciBpcyBpbml0aWFsbHkiLAotIiAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4i LAotIiAiLAotIi9BUFBFTkQiLAotIiAgSWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QsIGNyZWF0 ZSBhIG5ldyBmaWxlIGFuZCBvcGVuIGl0IGZvciB3cml0aW5nLiIsCi0iICBJZiB0aGUgZmlsZSBl eGlzdHMsIG9wZW4gaXQgZm9yIHdyaXRpbmcsIGJ1dCB3aXRoIHRoZSB3cml0ZSBwb2ludGVyIiwK LSIgIHBvc2l0aW9uZWQgYXQgdGhlIGVuZC4iLAotIiAiLAotIi9CSU5BUlkiLAotI2lmZGVmIFZN UwotIiAgT3BlbnMgdGhlIGZpbGUgaW4gYmluYXJ5IG1vZGUgdG8gaW5oaWJpdCBlbmQtb2YtbGlu ZSBjb252ZXJzaW9ucy4iLAotI2Vsc2UKLSNpZmRlZiBPUzIKLSIgIE9wZW5zIHRoZSBmaWxlIGlu IGJpbmFyeSBtb2RlIHRvIGluaGliaXQgZW5kLW9mLWxpbmUgY29udmVyc2lvbnMuIiwKLSNlbHNl Ci0jaWZkZWYgVU5JWAotIiAgVGhpcyBvcHRpb24gaXMgaWdub3JlZCBpbiBVTklYLiIsCi0jZWxz ZQotIiAgVGhpcyBvcHRpb24gaXMgaWdub3JlZCBvbiB0aGlzIHBsYXRmb3JtLiIsCi0jZW5kaWYg LyogVU5JWCAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFZNUyAqLwotIiAiLAotIlN3 aXRjaGVzIGNhbiBiZSBjb21iaW5lZCBpbiBhbiB3YXkgdGhhdCBtYWtlcyBzZW5zZSBhbmQgaXMg c3VwcG9ydGVkIGJ5IHRoZSIsCi0idW5kZXJseWluZyBvcGVyYXRpbmcgc3lzdGVtLiIsCi0iIgot fTsKLQotc3RhdGljIGNoYXIgKiBoeHhmX2NsW10gPSB7Ci0iU3ludGF4OiBGSUxFIENMT1NFIDxj aGFubmVsPiIsCi0iICBDbG9zZXMgdGhlIGZpbGUgb24gdGhlIGdpdmVuIGNoYW5uZWwgaWYgaXQg d2FzIG9wZW4uIiwKLSIgIEFsc28gc2VlIEhFTFAgRklMRSBPUEVOLiAgU3lub255bTogRkNMT1NF LiIsCi0iIgotfTsKLQotc3RhdGljIGNoYXIgKiBoeHhmX2ZsW10gPSB7Ci0iU3ludGF4OiBGSUxF IEZMVVNIIDxjaGFubmVsPiIsCi0iICBGbHVzaGVzIG91dHB1dCBidWZmZXJzIG9uIHRoZSBnaXZl biBjaGFubmVsIGlmIGl0IHdhcyBvcGVuLCBmb3JjaW5nIiwKLSIgIGFsbCBtYXRlcmlhbCBwcmV2 aW91c2x5IHdyaXR0ZW4gdG8gYmUgY29tbWl0dGVkIHRvIGRpc2suICBTeW5vbnltOiBGRkxVU0gu IiwKLSIgIEFsc28gYXZhaWxhYmxlIGFzIFxcRl9mbHVzaCgpLiIsCi0iIgotfTsKLQotc3RhdGlj IGNoYXIgKiBoeHhmX2xpW10gPSB7Ci0iU3ludGF4OiBGSUxFIExJU1QiLAotIiAgTGlzdHMgdGhl IGNoYW5uZWwgbnVtYmVyLCBuYW1lLCBtb2RlcywgYW5kIHBvc2l0aW9uIG9mIGVhY2ggZmlsZSBv cGVuZWQiLAotIiAgd2l0aCBGSUxFIE9QRU4uICBTeW5vbnltOiBGTElTVC4iLAotIiIKLX07Ci0K LXN0YXRpYyBjaGFyICogaHh4Zl9yZVtdID0gewotIlN5bnRheDogRklMRSBSRUFEIFsgc3dpdGNo ZXMgXSA8Y2hhbm5lbD4gWyA8dmFyaWFibGU+IF0iLAotIiAgUmVhZHMgZGF0YSBmcm9tIHRoZSBm aWxlIG9uIHRoZSBnaXZlbiBjaGFubmVsIG51bWJlciBpbnRvIHRoZSA8dmFyaWFibGU+LCIsCi0i ICBpZiBvbmUgd2FzIGdpdmVuOyBpZiBubyB2YXJpYWJsZSB3YXMgZ2l2ZW4sIHRoZSByZXN1bHQg aXMgcHJpbnRlZCBvbiIsCi0iICB0aGUgc2NyZWVuLiAgVGhlIHZhcmlhYmxlIHNob3VsZCBiZSBh IG1hY3JvIG5hbWUgcmF0aGVyIHRoYW4gYSBcXCV4IiwKLSIgIHZhcmlhYmxlIG9yIGFycmF5IGVs ZW1lbnQgaWYgeW91IHdhbnQgYmFja3NsYXNoIGNoYXJhY3RlcnMgaW4gdGhlIGZpbGUgdG8iLAot IiAgYmUgdGFrZW4gbGl0ZXJhbGx5LiAgU3lub255bTogRlJFQUQuICBTd2l0Y2hlczoiLAotIiAi LAotIi9MSU5FIiwKLSIgIFNwZWNpZmllcyB0aGF0IGEgbGluZSBvZiB0ZXh0IGlzIHRvIGJlIHJl YWQuICBBIGxpbmUgaXMgZGVmaW5lZCBhY2NvcmRpbmciLAotIiAgdG8gdGhlIHVuZGVybHlpbmcg b3BlcmF0aW5nIHN5c3RlbSdzIHRleHQtZmlsZSBmb3JtYXQuICBGb3IgZXhhbXBsZSwgaW4iLAot IiAgVU5JWCBhIGxpbmUgaXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHVwIHRvIGFuZCBpbmNs dWRpbmcgYSBsaW5lZmVlZC4iLAotIiAgVGhlIGxpbmUgdGVybWluYXRvciAoaWYgYW55KSBpcyBy ZW1vdmVkIGJlZm9yZSBhc3NpZ25pbmcgdGhlIHRleHQgdG8gdGhlIiwKLSIgIHZhcmlhYmxlLiAg SWYgbm8gc3dpdGNoZXMgYXJlIGluY2x1ZGVkIHdpdGggdGhlIEZJTEUgUkVBRCBjb21tYW5kLCAv TElORSIsCi0iICBpcyBhc3N1bWVkLiIsCi0iICIsCi0iL1NJWkU6bnVtYmVyIiwKLSIgIFNwZWNp ZmllcyB0aGF0IHRoZSBnaXZlbiBudW1iZXIgb2YgYnl0ZXMgKGNoYXJhY3RlcnMpIGlzIHRvIGJl IHJlYWQuIiwKLSIgIFRoaXMgZ2l2ZXMgYSBzZW1ibGFuY2Ugb2YgXCJyZWNvcmQgaS9vXCIgZm9y IGZpbGVzIHRoYXQgZG8gbm90IG5lY2Vzc2FyaWx5IiwKLSIgIGNvbnRhaW4gbGluZXMuICBUaGUg cmVzdWx0aW5nIGJsb2NrIG9mIGNoYXJhY3RlcnMgaXMgYXNzaWduZWQgdG8gdGhlIiwKLSIgIHZh cmlhYmxlIHdpdGhvdXQgYW55IGVkaXRpbmcuIiwKLSIgIiwKLSIvQ0hBUkFDVEVSIiwKLSIgIEVx dWl2YWxlbnQgdG8gL1NJWkU6MS4gIElmIEZJTEUgUkVBRCAvQ0hBUiBzdWNjZWVkcyBidXQgdGhl IDx2YXJpYWJsZT4gaXMiLAotIiAgZW1wdHksIHRoaXMgaW5kaWNhdGVzIGEgTlVMIGJ5dGUgd2Fz IHJlYWQuIiwKLSIgIiwKLSIvVFJJTSIsCi0iICBUZWxscyBLZXJtaXQgdG8gdHJpbSB0cmFpbGlu ZyB3aGl0ZXNwYWNlIHdoZW4gdXNlZCB3aXRoIC9MSU5FLiAgSWdub3JlZCIsCi0iICBpZiB1c2Vk IHdpdGggL0NIQVIgb3IgL1NJWkUuIiwKLSIgIiwKLSIvVU5UQUJJRlkiLAotIiAgVGVsbHMgS2Vy bWl0IHRvIGNvbnZlcnQgdGFicyB0byBzcGFjZXMgKGFzc3VtaW5nIHRhYnMgc2V0IGV2ZXJ5IDgg c3BhY2VzKSIsCi0iICB3aGVuIHVzZWQgd2l0aCAvTElORS4gIElnbm9yZWQgaWYgdXNlZCB3aXRo IC9DSEFSIG9yIC9TSVpFLiIsCi0iICIsCi0iU3lub255bTogRlJFQUQuIiwKLSJBbHNvIGF2YWls YWJsZSBhcyBcXEZfZ2V0Y2hhcigpLCBcXEZfZ2V0bGluZSgpLCBcXEZfZ2V0YmxvY2soKS4iLAot IiIKLX07Ci0KLXN0YXRpYyBjaGFyICogaHh4Zl9yd1tdID0gewotIlN5bnRheDogRklMRSBSRVdJ TkQgPGNoYW5uZWw+IiwKLSIgIElmIHRoZSBjaGFubmVsIGlzIG9wZW4sIG1vdmVzIHRoZSByZWFk L3dyaXRlIHBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiIsCi0iICB0aGUgZmlsZS4gIEVxdWl2 YWxlbnQgdG8gRklMRSBTRUVLIDxjaGFubmVsPiAwLiAgU3lub255bTogRlJFV0lORC4iLAotIiAg QWxzbyBhdmFpbGFibGUgYXMgXFxGX3Jld2luZCgpLiIsCi0iIgotfTsKLQotc3RhdGljIGNoYXIg KiBoeHhmX3NlW10gPSB7Ci0iU3ludGF4OiBGSUxFIFNFRUsgWyBzd2l0Y2hlcyBdIDxjaGFubmVs PiB7IFt7KywtfV08bnVtYmVyPiwgRU9GIH0iLAotIiAgU3dpdGNoZXMgYXJlIC9CWVRFLCAvTElO RSwgL1JFTEFUSVZFLCAvQUJTT0xVVEUsIGFuZCAvRklORDpwYXR0ZXJuLiIsCi0iICBNb3ZlcyB0 aGUgZmlsZSBwb2ludGVyIGZvciB0aGlzIGZpbGUgdG8gdGhlIGdpdmVuIHBvc2l0aW9uIGluIHRo ZSIsCi0iICBmaWxlLiAgU3Vic2VxdWVudCBGSUxFIFJFQURzIG9yIFdSSVRFcyB3aWxsIHRha2Ug cGxhY2UgYXQgdGhhdCBwb3NpdGlvbi4iLAotIiAgSWYgbmVpdGhlciB0aGUgL1JFTEFUSVZFIG5v ciAvQUJTT0xVVEUgc3dpdGNoIGlzIGdpdmVuLCBhbiB1bnNpZ25lZCIsCi0iICA8bnVtYmVyPiBp cyBhYnNvbHV0ZTsgYSBzaWduZWQgbnVtYmVyIGlzIHJlbGF0aXZlLiAgRU9GIG1lYW5zIHRvIG1v dmUgdG8iLAotIiAgdGhlIGVuZCBvZiB0aGUgZmlsZS4gIElmIGEgL0ZJTkQ6IHN3aXRjaCBpcyBp bmNsdWRlZCwgS2VybWl0IHNlZWtzIHRvIHRoZSIsCi0iICBzcGVjaWZpZWQgc3BvdCAoZS5nLiAw IGZvciB0aGUgYmVnaW5uaW5nKSBhbmQgdGhlbiBiZWdpbnMgc2VhcmNoaW5nIGxpbmUiLAotIiAg YnkgbGluZSBmb3IgdGhlIGZpcnN0IGxpbmUgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJu LiAgVG8gc3RhcnQiLAotIiAgc2VhcmNoaW5nIGZyb20gdGhlIGN1cnJlbnQgZmlsZSBwb3NpdGlv biBzcGVjaWZ5IGEgbGluZSBudW1iZXIgb2YgKzAuIiwKLSIgIFRvIHN0YXJ0IHNlYXJjaGluZyBm cm9tIHRoZSBsaW5lIGFmdGVyIHRoZSBjdXJyZW50IG9uZSwgdXNlICsxIChldGMpLiIsCi0iICBT eW5vbnltOiBGU0VFSy4iLAotIiIKLX07Ci0KLXN0YXRpYyBjaGFyICogaHh4Zl9zdFtdID0gewot IlN5bnRheDogRklMRSBTVEFUVVMgPGNoYW5uZWw+IiwKLSIgIElmIHRoZSBjaGFubmVsIGlzIG9w ZW4sIHRoaXMgY29tbWFuZCBzaG93cyB0aGUgbmFtZSBvZiB0aGUgZmlsZSwgdGhlIiwKLSIgIHN3 aXRjaGVzIGl0IHdhcyBvcGVuZWQgd2l0aCwgYW5kIHRoZSBjdXJyZW50IHJlYWQvd3JpdGUgcG9z aXRpb24uIiwKLSIgIFN5bm9ueW06IEZTVEFUVVMiLAotIiIKLX07Ci0KLXN0YXRpYyBjaGFyICog aHh4Zl9jb1tdID0gewotIlN5bnRheDogRklMRSBDT1VOVCBbIHsgL0JZVEVTLCAvTElORVMsIC9M SVNULCAvTk9MSVNUIH0gXSA8Y2hhbm5lbD4iLAotIiAgSWYgdGhlIGNoYW5uZWwgaXMgb3Blbiwg dGhpcyBjb21tYW5kIHByaW50cyB0aGUgbnVibWVyIG9mIGJ5dGVzIChkZWZhdWx0KSIsCi0iICBv ciBsaW5lcyBpbiB0aGUgZmlsZSBpZiBhdCB0b3AgbGV2ZWwgb3IgaWYgL0xJU1QgaXMgaW5jbHVk ZWQ7IGlmIC9OT0xJU1QiLAotIiAgaXMgZ2l2ZW4sIHRoZSByZXN1bHQgaXMgbm90IHByaW50ZWQu ICBJbiBhbGwgY2FzZXMgdGhlIHJlc3VsdCBpcyBhc3NpZ25lZCIsCi0iICB0byBcXHYoZl9jb3Vu dCkuICBTeW5vbnltOiBGQ09VTlQiLAotIiIKLX07Ci0KLXN0YXRpYyBjaGFyICogaHh4Zl93cltd ID0gewotIkZJTEUgV1JJVEUgWyBzd2l0Y2hlcyBdIDxjaGFubmVsPiA8dGV4dD4iLAotIiAgV3Jp dGVzIHRoZSBnaXZlbiB0ZXh0IHRvIHRoZSBmaWxlIG9uIHRoZSBnaXZlbiBjaGFubmVsIG51bWJl ci4gIFRoZSA8dGV4dD4iLAotIiAgY2FuIGJlIGxpdGVyYWwgdGV4dCBvciBhIHZhcmlhYmxlLCBv ciBhbnkgY29tYmluYXRpb24uICBJZiB0aGUgdGV4dCBtaWdodCIsCi0iICBjb250YWluIGxlYWRp bmcgb3IgdHJhaWxpbmcgc3BhY2VzLCBpdCBtdXN0IGJlIGVuY2xvc2VkIGluIGJyYWNlcyBpZiB5 b3UiLAotIiAgd2FudCB0byBwcmVzZXJ2ZSB0aGVtLiAgU3lub255bTogRldSSVRFLiAgU3dpdGNo ZXM6IiwKLSIgIiwKLSIvTElORSIsCi0iICBTcGVjaWZpZXMgdGhhdCBhbiBhcHByb3ByaWF0ZSBs aW5lIHRlcm1pbmF0b3IgaXMgdG8gYmUgYWRkZWQgdG8gdGhlIiwKLSIgIGVuZCBvZiB0aGUgPHRl eHQ+LiAgSWYgbm8gc3dpdGNoZXMgYXJlIGluY2x1ZGVkLCAvTElORSBpcyBhc3N1bWVkLiIsCi0i ICIsCi0iL1NJWkU6bnVtYmVyIiwKLSIgIFNwZWNpZmllcyB0aGF0IHRoZSBnaXZlbiBudW1iZXIg b2YgYnl0ZXMgKGNoYXJhY3RlcnMpIGlzIHRvIGJlIHdyaXR0ZW4uIiwKLSIgIElmIHRoZSBnaXZl biA8dGV4dD4gaXMgbG9uZ2VyIHRoYW4gdGhlIHJlcXVlc3RlZCBzaXplLCBpdCBpcyB0cnVuY2F0 ZWQ7IiwKLSIgIGlmIGlzIHNob3J0ZXIsIGl0IGlzIHBhZGRlZCBhY2NvcmRpbmcgL0xQQUQgYW5k IC9SUEFEIHN3aXRjaGVzLiAgU3lub255bToiLAotIiAgL0JMT0NLLiIsCi0iICIsCi0iL0xQQURb OnZhbHVlXSIsCi0iICBJZiAvU0laRSB3YXMgZ2l2ZW4sIGJ1dCB0aGUgPHRleHQ+IGlzIHNob3J0 ZXIgdGhhbiB0aGUgcmVxdWVzdGVkIHNpemUsIiwKLSIgIHRoZSB0ZXh0IGlzIHBhZGRlZCBvbiB0 aGUgbGVmdCB3aXRoIHN1ZmZpY2llbnQgY29waWVzIG9mIHRoZSBjaGFyYWN0ZXIiLAotIiAgd2hv c2UgQVNDSUkgdmFsdWUgaXMgZ2l2ZW4gdG8gd3JpdGUgdGhlIGdpdmVuIGxlbmd0aC4gIElmIG5v IHZhbHVlIGlzIiwKLSIgIHNwZWNpZmllZCwgMzIgKHRoZSBjb2RlIGZvciBTcGFjZSkgaXMgdXNl ZC4gIFRoZSB2YWx1ZSBjYW4gYWxzbyBiZSAwIHRvIiwKLSIgIHdyaXRlIHRoZSBpbmRpY2F0ZWQg bnVtYmVyIG9mIE5VTCBieXRlcy4gIElmIC9TSVpFIHdhcyBub3QgZ2l2ZW4sIHRoaXMiLAotIiAg c3dpdGNoIGlzIGlnbm9yZWQuIiwKLSIgIiwKLSIvUlBBRFs6dmFsdWVdIiwKLSIgIExpa2UgTFBB RCwgYnV0IHBhZHMgb24gdGhlIHJpZ2h0LiIsCi0iICIsCi0iL1NUUklORyIsCi0iICBTcGVjaWZp ZXMgdGhhdCB0aGUgPHRleHQ+IGlzIHRvIGJlIHdyaXR0ZW4gYXMtaXMsIHdpdGggbm8gdGVybWlu YXRvciBhZGRlZC4iCi0sCi0iICIsCi0iL0NIQVJBQ1RFUiIsCi0iICBTcGVjaWZpZXMgdGhhdCBv bmUgY2hhcmFjdGVyIHNob3VsZCBiZSB3cml0dGVuLiAgSWYgdGhlIDx0ZXh0PiBpcyBlbXB0eSBv ciIsCi0iICBub3QgZ2l2ZW4sIGEgTlVMIGNoYXJhY3RlciBpcyB3cml0dGVuOyBvdGhlcndpc2Ug dGhlIGZpcnN0IGNoYXJhY3RlciBvZiIsCi0iICA8dGV4dD4gaXMgZ2l2ZW4uIiwKLSIgIiwKLSJT eW5vbnltIEZXUklURS4iLAotIkFsc28gYXZhaWxhYmxlIGFzIFxcRl9wdXRjaGFyKCksIFxcRl9w dXRsaW5lKCksIFxcRl9wdXRibG9jaygpLiIsCi0iIgotfTsKLQotc3RhdGljIGludAotZG9oZmls ZShjeCkgaW50IGN4OyB7Ci0gICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgZmN0YWJbXTsKLSAgICBl eHRlcm4gaW50IG5mY3RhYjsKLSAgICBpbnQgeDsKLSAgICBpZiAoY3ggPT0gWFhGSUxFKSB7ICAg ICAgICAgICAgICAgICAvKiBGSUxFIGNvbW1hbmQgd2FzIGdpdmVuICovCi0gICAgICAgIC8qIEdl dCBzdWJjb21tYW5kICovCi0gICAgICAgIGlmICgoY3ggPSBjbWtleShmY3RhYixuZmN0YWIsIk9w ZXJhdGlvbiIsIiIseHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAgICAgIGlmIChjeCA9PSAtMykg ewotICAgICAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAg ICAgIHJldHVybih4KTsKLSAgICAgICAgICAgICAgICBjeCA9IFhYRklMRTsKLSAgICAgICAgICAg IH0gZWxzZQotICAgICAgICAgICAgICByZXR1cm4oY3gpOwotICAgICAgICB9Ci0gICAgICAgIGlm ICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIHN3aXRj aCAoY3gpIHsKLSAgICAgICAgICBjYXNlIEZJTF9DTFM6IGN4ID0gWFhGX0NMOyBicmVhazsKLSAg ICAgICAgICBjYXNlIEZJTF9GTFU6IGN4ID0gWFhGX0ZMOyBicmVhazsKLSAgICAgICAgICBjYXNl IEZJTF9MSVM6IGN4ID0gWFhGX0xJOyBicmVhazsKLSAgICAgICAgICBjYXNlIEZJTF9PUE46IGN4 ID0gWFhGX09QOyBicmVhazsKLSAgICAgICAgICBjYXNlIEZJTF9SRUE6IGN4ID0gWFhGX1JFOyBi cmVhazsKLSAgICAgICAgICBjYXNlIEZJTF9SRVc6IGN4ID0gWFhGX1JXOyBicmVhazsKLSAgICAg ICAgICBjYXNlIEZJTF9TRUU6IGN4ID0gWFhGX1NFOyBicmVhazsKLSAgICAgICAgICBjYXNlIEZJ TF9TVEE6IGN4ID0gWFhGX1NUOyBicmVhazsKLSAgICAgICAgICBjYXNlIEZJTF9XUkk6IGN4ID0g WFhGX1dSOyBicmVhazsKLSAgICAgICAgICBjYXNlIEZJTF9DT1U6IGN4ID0gWFhGX0NPOyBicmVh azsKLSAgICAgICAgfQotICAgIH0KLSAgICBzd2l0Y2ggKGN4KSB7Ci0gICAgICBjYXNlIFhYRklM RTogcmV0dXJuKGhtc2dhKGh4eGZpbGUpKTsKLSAgICAgIGNhc2UgWFhGX0NMOiByZXR1cm4oaG1z Z2EoaHh4Zl9jbCkpOwotICAgICAgY2FzZSBYWEZfRkw6IHJldHVybihobXNnYShoeHhmX2ZsKSk7 Ci0gICAgICBjYXNlIFhYRl9MSTogcmV0dXJuKGhtc2dhKGh4eGZfbGkpKTsKLSAgICAgIGNhc2Ug WFhGX09QOiByZXR1cm4oaG1zZ2EoaHh4Zl9vcCkpOwotICAgICAgY2FzZSBYWEZfUkU6IHJldHVy bihobXNnYShoeHhmX3JlKSk7Ci0gICAgICBjYXNlIFhYRl9SVzogcmV0dXJuKGhtc2dhKGh4eGZf cncpKTsKLSAgICAgIGNhc2UgWFhGX1NFOiByZXR1cm4oaG1zZ2EoaHh4Zl9zZSkpOwotICAgICAg Y2FzZSBYWEZfU1Q6IHJldHVybihobXNnYShoeHhmX3N0KSk7Ci0gICAgICBjYXNlIFhYRl9XUjog cmV0dXJuKGhtc2dhKGh4eGZfd3IpKTsKLSAgICAgIGNhc2UgWFhGX0NPOiByZXR1cm4oaG1zZ2Eo aHh4Zl9jbykpOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuKC0yKTsKLSAgICB9Ci19 Ci0jZW5kaWYgLyogQ0tDSEFOTkVMSU8gKi8KLQotaW50Ci1kb2hscCh4eCkgaW50IHh4OyB7Ci0g ICAgaW50IHgseTsKLQotICAgIGRlYnVnKEYxMDEsIkRPSEVMUCB4eCIsIiIseHgpOwotICAgIGlm ICh4eCA8IDApIHJldHVybih4eCk7Ci0KLSNpZmRlZiBOT0hFTFAKLSAgICBpZiAoKHggPSBjbWNm bSgpKSA8IDApCi0gICAgICByZXR1cm4oeCk7Ci0gICAgcHJpbnRmKCJcbiVzLCBDb3B5cmlnaHQg KEMpIDE5ODUsICVzLCIsdmVyc2lvLCBja19jcnllYXIpOwotI2lmbmRlZiBOT0lLU0QKLSAgICBp ZiAoaW5zZXJ2ZXIpCi0gICAgICByZXR1cm4oaG1zZ2EodG9waGxwaSkpOwotICAgIGVsc2UKLSNl bmRpZiAvKiBJS1NEICovCi0gICAgICByZXR1cm4oaG1zZ2EodG9waGxwKSk7Ci0KLSNlbHNlIC8q IGhlbHAgaXMgYXZhaWxhYmxlICovCi0KLSAgICBpZiAoaGVscGZpbGUpCi0gICAgICByZXR1cm4o ZG90eXBlKGhlbHBmaWxlLHhhc2ttb3JlLDAsMCxOVUxMLDAsTlVMTCwwLDAsTlVMTCwwKSk7Ci0K LSNpZmRlZiBDS0NIQU5ORUxJTwotICAgIGlmICh4eCA9PSBYWEZJTEUpCi0gICAgICByZXR1cm4o ZG9oZmlsZSh4eCkpOwotICAgIGVsc2UgaWYgKHh4ID09IFhYRl9SRSB8fCB4eCA9PSBYWEZfV1Ig fHwgeHggPT0gWFhGX09QIHx8Ci0gICAgICAgICAgICAgeHggPT0gWFhGX0NMIHx8IHh4ID09IFhY Rl9TRSB8fCB4eCA9PSBYWEZfUlcgfHwKLSAgICAgICAgICAgICB4eCA9PSBYWEZfRkwgfHwgeHgg PT0gWFhGX0xJIHx8IHh4ID09IFhYRl9TVCB8fCB4eCA9PSBYWEZfQ08pCi0gICAgICByZXR1cm4o ZG9oZmlsZSh4eCkpOwotI2VuZGlmIC8qIENLQ0hBTk5FTElPICovCi0KLSAgICBzd2l0Y2ggKHh4 KSB7Ci0KLSNpZm5kZWYgTk9TUEwKLWNhc2UgWFhBU1M6ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBBU1NJR04gKi8KLSAgICByZXR1cm4oaG1zZ2EoaHh4YXNzKSk7Ci0KLWNhc2UgWFhB U0s6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBU0sgKi8KLWNhc2UgWFhBU0tROiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBU0tRICovCi0gICAgcmV0dXJuKGhtc2dhKGh4 eGFzaykpOwotCi1jYXNlIFhYQVBDOgotICAgIHJldHVybihobXNnKCJTeW50YXg6IEFQQyB0ZXh0 XG5cCi0gIEVjaG9lcyB0aGUgdGV4dCB3aXRoaW4gYSBWVDIyMC8zMjAvNDIwIEFwcGxpY2F0aW9u IFByb2dyYW0gQ29tbWFuZC4iKSk7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT0ZS SUxMUwotY2FzZSBYWEJVRzoKLSAgICByZXR1cm4oaG1zZygiRGVzY3JpYmVzIGhvdyB0byBnZXQg dGVjaG5pY2FsIHN1cHBvcnQuIikpOwotI2VuZGlmIC8qIE5PRlJJTExTICovCi0KLSNpZm5kZWYg Tk9TUEwKLWNhc2UgWFhCRUVQOgotI2lmZGVmIE9TMgotICAgIHJldHVybihobXNnKCJTeW50YXg6 IEJFRVAgWyB7IEVSUk9SLCBJTkZPUk1BVElPTiwgV0FSTklORyB9IF1cblwKLSAgR2VuZXJhdGVz IGEgYmVsbCBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgc2V0dGluZ3MuICBJZiBTRVQgQkVMTCBp cyBzZXQgdG9cblwKLSAgXCJzeXN0ZW0tc291bmRzXCIgdGhlbiB0aGUgYXBwcm9wcmlhdGUgU3lz dGVtIFNvdW5kIHdpbGwgYmUgZ2VuZXJhdGVkLlxuXAotICBEZWZhdWx0IGlzIElORk9STUFUSU9O LiIpKTsKLSNlbHNlIC8qIE9TMiAqLwotICAgIHJldHVybihobXNnKCJTeW50YXg6IEJFRVBcblwK LVNlbmRzIGEgQkVMIGNoYXJhY3RlciB0byB5b3VyIHRlcm1pbmFsLiIpKTsKLSNlbmRpZiAvKiBP UzIgKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi1jYXNlIFhYQllFOiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogQllFICovCi0gICAgcmV0dXJuKGhtc2coaG14eGJ5ZSkpOwotCi1jYXNl IFhYQ0hLOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2hlY2sgKi8KLSAgICByZXR1 cm4oaG1zZygiXAotU3ludGF4OiBDSEVDSyBuYW1lXG5cCi0gIENoZWNrc1wKLSAgdG8gc2VlIGlm IHRoZSBuYW1lZCBmZWF0dXJlIGlzIGluY2x1ZGVkIGluIHRoaXMgdmVyc2lvbiBvZiBLZXJtaXQu XG5cCi0gIFRvIGxpc3QgdGhlIGZlYXR1cmVzIHlvdSBjYW4gY2hlY2ssIHR5cGUgXCJjaGVjayA/ XCIuIikpOwotCi0jaWZuZGVmIE5PRlJJTExTCi1jYXNlIFhYQ0xFOiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogY2xlYXIgKi8KLSAgICByZXR1cm4oaG1zZ2EoaG14eGNsZSkpOwotI2Vu ZGlmIC8qIE5PRlJJTExTICovCi0KLWNhc2UgWFhDTE86ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBjbG9zZSAqLwotICAgIHJldHVybihobXNnYShobXh4Y2xvKSk7Ci0KLWNhc2UgWFhD T006ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb21tZW50ICovCi0jaWZuZGVmIFNU UkFUVVMgLyogQ2FuJ3QgdXNlICMgZm9yIGNvbW1lbnRzIGluIFN0cmF0dXMgVk9TICovCi0gICAg cmV0dXJuKGhtc2coIlwKLVN5bnRheDogQ09NTUVOVCB0ZXh0XG5cCi1FeGFtcGxlOiBDT01NRU5U IC0gdGhpcyBpcyBhIGNvbW1lbnQuXG5cCi0gIEludHJvZHVjZXMgYSBjb21tZW50LiAgQmVnaW5u aW5nIG9mIGNvbW1hbmQgbGluZSBvbmx5LiAgQ29tbWFuZHMgbWF5IGFsc29cblwKLSAgaGF2ZSB0 cmFpbGluZyBjb21tZW50cywgaW50cm9kdWNlZCBieSA7IG9yICMuIikpOwotI2Vsc2UKLSAgICBy ZXR1cm4oaG1zZygiXAotU3ludGF4OiBDT01NRU5UIHRleHRcblwKLUV4YW1wbGU6IENPTU1FTlQg LSB0aGlzIGlzIGEgY29tbWVudC5cblwKLSAgSW50cm9kdWNlcyBhIGNvbW1lbnQuICBCZWdpbm5p bmcgb2YgY29tbWFuZCBsaW5lIG9ubHkuICBDb21tYW5kcyBtYXkgYWxzb1xuXAotICBoYXZlIHRy YWlsaW5nIGNvbW1lbnRzLCBpbnRyb2R1Y2VkIGJ5IDsgKHNlbWljb2xvbikuIikpOwotI2VuZGlm IC8qIFNUUkFUVVMgKi8KLQotI2lmbmRlZiBOT0xPQ0FMCi1jYXNlIFhYQ09OOiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogQ09OTkVDVCAqLwotY2FzZSBYWENROiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIENRID09IENPTk5FQ1QgL1FVSUVUTFkgKi8KLSAgICBobXNnYSho bXh4Y29uKTsKLSAgICBwcmludGYoIllvdXIgZXNjYXBlIGNoYXJhY3RlciBpcyBDdHJsLSVjIChB U0NJSSAlZCwgJXMpXHJcbiIsCi0gICAgICAgICAgIGN0bChlc2NhcGUpLCBlc2NhcGUsIChlc2Nh cGUgPT0gMTI3ID8gIkRFTCIgOiBjY250YWJbZXNjYXBlXSkpOwotICAgIHJldHVybigwKTsKLSNl bmRpZiAvKiBOT0xPQ0FMICovCi0KLSNpZmRlZiBaQ09QWQotY2FzZSBYWENQWToKLSAgICByZXR1 cm4oaG1zZ2EoaG14eGNweSkpOwotI2VuZGlmIC8qIFpDT1BZICovCi0KLSNpZmRlZiBOVAotY2Fz ZSBYWExJTks6Ci1yZXR1cm4oaG1zZygKLSIgIExJTksgc291cmNlIGRlc3RpbmF0aW9uXG5cCi0g ICBjcmVhdGVzIGEgaGFyZCBsaW5rIHRvIHRoZSBmaWxlIHNwZWNpZmllZCBieSBzb3VyY2UgdG8g dGhlIGZpbGVuYW1lXG5cCi0gICBzcGVjaWZpZWQgYnkgZGVzdGluYXRpb24uICBIYXJkIGxpbmtz IGFyZSBvbmx5IHN1cHBvcnRlZCBvbiBOVEZTLlxuXAotICAgZGVzdGluYXRpb24gY2FuIGVpdGhl ciBiZSBhIGZpbGVuYW1lIG9yIGEgZGlyZWN0b3J5LiAgc291cmNlIG1heVxuXAotICAgY29udGFp biB3aWxkY2FyZHMgaWYgZGVzdGluYXRpb24gaXMgYSBkaXJlY3RvcnkuIikpOwotI2VuZGlmIC8q IE5UICovCi0KLSNpZm5kZWYgTk9GUklMTFMKLWNhc2UgWFhMUkVOOiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBMUkVOQU1FICovCi0gICAgcmV0dXJuKGhtc2coCi0iICBMUkVOQU1FIGlz IGFuIGFsaWFzIGZvciB0aGUgUkVOQU1FIGNvbW1hbmQgZm9yY2luZyBpdCB0byBleGVjdXRlXG5c Ci0gIG9uIHRoZSBsb2NhbCBjb21wdXRlci4gIEFsc28gc2VlOiBSRU5BTUUsIFJSRU5BTUUsIFNF VCBMT0NVUy4iKSk7Ci0KLWNhc2UgWFhSRU46Ci0gICAgcmV0dXJuKGhtc2dhKGhteHhyZW4pKTsK LSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotCi1jYXNlIFhYQ0RVUDogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIENEVVAgKi8KLWNhc2UgWFhMQ0RVOgotICAgIHJldHVybihobXNnKAotIkNo YW5nZSB3b3JraW5nIGRpcmVjdG9yeSB0byB0aGUgb25lIGp1c3QgYWJvdmUgdGhlIGN1cnJlbnQg b25lLiIpKTsKLQotY2FzZSBYWExDV0Q6Ci0gICAgcmV0dXJuKGhtc2coCi0iICBMQ0QgKExDV0Qp IGlzIGFuIGFsaWFzIGZvciB0aGUgQ0QgKENXRCkgY29tbWFuZCBmb3JjaW5nIGl0IHRvIGV4ZWN1 dGVcblwKLSAgb24gdGhlIGxvY2FsIGNvbXB1dGVyLiAgQWxzbyBzZWU6IENELCBDRFVQLCBSQ0Qs IFNFVCBMT0NVUy4iKSk7Ci0KLWNhc2UgWFhDV0Q6ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBDRCAvIENXRCAqLwotICAgIHJldHVybihobXNnYShobXh4Y3dkKSk7Ci0KLSNpZm5kZWYg Tk9TUEwKLWNhc2UgWFhLQ0Q6Ci0gICAgcmV0dXJuKGhtc2dhKGhteHhrY2QpKTsKLQotY2FzZSBY WEFSUkFZOgotY2FzZSBYWERDTDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFQ0xB UkUgKi8KLWNhc2UgWFhTT1JUOgotICAgIHJldHVybihobXNnYShoeHhkY2wpKTsKLQotY2FzZSBY WERFRjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFRklORSAqLwotI2lmbmRlZiBO T1NQTAotICAgIGlmIChobHB0b2spICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdoYXQgdGhl eSBhY3R1YWxseSB0eXBlZC4uLiAqLwotICAgICAgaWYgKGhscHRva1swXSA9PSAnLicpCi0gICAg ICAgIHJldHVybihobXNnYShoeHhkb3QpKTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgIHJldHVy bihobXNnYShoeHhkZWYpKTsKLQotY2FzZSBYWFVOREVGOiAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFVOREVGSU5FICovCi0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogIFVOREVGSU5FIHZh cmlhYmxlLW5hbWVcblwKLSAgVW5kZWZpbmVzIGEgbWFjcm8gb3IgdmFyaWFibGUuIikpOwotI2Vu ZGlmIC8qIE5PU1BMICovCi0KLWNhc2UgWFhNU0c6Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDog TUVTU0FHRSB0ZXh0LXRvLXByaW50LWlmLWRlYnVnZ2luZ1xuXAotICBQcmludHMgdGhlIGdpdmVu IHRleHQgdG8gc3Rkb3V0IGlmIFNFVCBERUJVRyBNRVNTQUdFIGlzIE9OOyBwcmludHMgaXRcblwK LSAgdG8gc3RkZXJyIGlmIFNFVCBERUJVRyBNRVNTQUdFIGlzIFNUREVSUjsgZG9lc24ndCBwcmlu dCBpdCBhdCBhbGwgaWYgU0VUXG5cCi0gIERFQlVHIE1FU1NBR0UgaXMgT0ZGLiAgU3lub255bTog TVNHLiIpKTsKLQotI2lmbmRlZiBOT0ZSSUxMUwotY2FzZSBYWExERUw6Ci0gICAgcmV0dXJuKGht c2coCi0iICBMREVMRVRFIGlzIGFuIGFsaWFzIGZvciB0aGUgREVMRVRFIGNvbW1hbmQgZm9yY2lu ZyBpdCB0byBleGVjdXRlXG5cCi0gIG9uIHRoZSBsb2NhbCBjb21wdXRlci4gIEFsc28gc2VlOiBE RUxFVEUsIFJERUxFVEUsIFNFVCBMT0NVUy4iKSk7Ci0KLWNhc2UgWFhERUw6ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBkZWxldGUgKi8KLSAgICByZXR1cm4oaG1zZ2EoaG14eGRlbCkp OwotI2VuZGlmIC8qIE5PRlJJTExTICovCi0KLSNpZm5kZWYgTk9ESUFMCi1jYXNlIFhYRElBTDog ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRElBTCwgZXRjLi4uICovCi0gICAgcmV0dXJu KGhtc2dhKGh4eGRpYWwpKTsKLQotY2FzZSBYWFBESUE6ICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFBESUFMICovCi0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogUERJQUwgcGhvbmVudW1i ZXJcblwKLSAgUGFydGlhbGx5IGRpYWxzIGEgcGhvbmUgbnVtYmVyLiAgTGlrZSBESUFMIGJ1dCBk b2VzIG5vdCB3YWl0IGZvciBjYXJyaWVyXG5cCi0gIG9yIENPTk5FQ1QgbWVzc2FnZS4iKSk7Ci0K LWNhc2UgWFhSRUQ6Ci0gICAgcmV0dXJuKGhtc2coIlJlZGlhbCB0aGUgbnVtYmVyIGdpdmVuIGlu IHRoZSBtb3N0IHJlY2VudCBESUFMIGNvbW1uZC4iKSk7Ci0KLWNhc2UgWFhBTlNXOiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBBTlNXRVIgKi8KLSAgICByZXR1cm4oaG1zZ2EoaHh4YW5z dykpOwotCi1jYXNlIFhYTE9PSzogICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTE9PS1VQ IG51bWJlciBpbiBkaXJlY3RvcnkgKi8KLSAgICByZXR1cm4oaG1zZ2EoaHh4bG9vaykpOwotI2Vu ZGlmIC8qIE5PRElBTCAqLwotCi1jYXNlIFhYTERJUjogICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogTERJUkVDVE9SWSAqLwotICAgIHJldHVybihobXNnKAotIiAgTERJUklSRUNUT1JZIGlz IGFuIGFsaWFzIGZvciB0aGUgRElSRUNUT1JZIGNvbW1hbmQgZm9yY2luZyBpdCB0byBleGVjdXRl XG5cCi0gIG9uIHRoZSBsb2NhbCBjb21wdXRlci4gIEFsc28gc2VlOiBESVJFQ1RPUlksIFNFVCBM T0NVUywgUkRJUkVDVE9SWS4iKSk7Ci0KLWNhc2UgWFhESVI6ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBESVJFQ1RPUlkgKi8KLSAgICByZXR1cm4oaG1zZ2EoaG14eGRpcikpOwotCi1j YXNlIFhYVE9VQzoJCQkJLyogVE9VQ0ggKi8KLSAgICByZXR1cm4oaG1zZ2EoaG14eHRvdWMpKTsK LQotY2FzZSBYWFdESVI6CQkJCS8qIFdESVJFQ1RPUlkgKi8KLSAgcmV0dXJuKGhtc2coIiAgV0RJ UkVDVE9SWSBpcyBzaG9ydGhhbmQgZm9yIERJUkVDVE9SWSAvU09SVDpEQVRFIC9SRVZFUlNFO1xu XAotICBpdCBwcm9kdWNlcyBhIGxpc3RpbmcgaW4gcmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVy LiAgU2VlIHRoZSBESVJFQ1RPUllcblwKLSAgY29tbWFuZCBmb3IgZnVydGhlciBpbmZvcm1hdGlv bi4iKSk7Ci0KLWNhc2UgWFhIRElSOgkJCQkvKiBIRElSRUNUT1JZICovCi0gIHJldHVybihobXNn KCIgIEhESVJFQ1RPUlkgaXMgc2hvcnRoYW5kIGZvciBESVJFQ1RPUlkgL1NPUlQ6U0laRSAvUkVW RVJTRTtcblwKLSAgaXQgcHJvZHVjZXMgYSBsaXN0aW5nIHNob3dpbmcgdGhlIGJpZ2dlc3QgZmls ZXMgZmlyc3QuICBTZWUgdGhlIERJUkVDVE9SWVxuXAotICBjb21tYW5kIGZvciBmdXJ0aGVyIGlu Zm9ybWF0aW9uLiIpKTsKLQotY2FzZSBYWExNS0Q6ICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIExNS0RJUiAqLwotICAgIHJldHVybihobXNnKAotIiAgTE1LRElSIGlzIGFuIGFsaWFzIGZv ciB0aGUgTUtESVIgY29tbWFuZCBmb3JjaW5nIGl0IHRvIGV4ZWN1dGVcblwKLSAgb24gdGhlIGxv Y2FsIGNvbXB1dGVyLiAgQWxzbyBzZWU6IE1LRElSLCBSTUtESVIsIFNFVCBMT0NVUy4iKSk7Ci0K LWNhc2UgWFhNS0RJUjogICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNS0RJUiAqLwotICAg IHJldHVybihobXNnKCJDcmVhdGVzIGEgZGlyZWN0b3J5LiAgQWxzbyBzZWUgTFJNRElSLCBSUk1E SVIsIFNFVCBMT0NVUy4iKSk7Ci0KLWNhc2UgWFhMUk1EOiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBMUk1ESVIgKi8KLSAgICByZXR1cm4oaG1zZygKLSIgIExSTURJUiBpcyBhbiBhbGlh cyBmb3IgdGhlIFJNRElSIGNvbW1hbmQgZm9yY2luZyBpdCB0byBleGVjdXRlXG5cCi0gIG9uIHRo ZSBsb2NhbCBjb21wdXRlci4gIEFsc28gc2VlOiBSTURJUiwgUlJNRElSLCBTRVQgTE9DVVMuIikp OwotCi1jYXNlIFhYUk1ESVI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUk1ESVIgKi8K LSAgICByZXR1cm4oaG1zZygiUmVtb3ZlcyBhIGRpcmVjdG9yeS4gIEFsc28gc2VlIExSTURJUiwg UlJNRElSLCBTRVQgTE9DVVMuIikpOwotCi1jYXNlIFhYTFM6Ci0jaWZkZWYgVU5JWE9ST1NLCi0g ICAgcmV0dXJuKGhtc2coIlN5bnRheDogTFMgWyBhcmdzIF1cblwKLSAgUnVucyBcImxzXCIgd2l0 aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLiIpKTsKLSNlbHNlCi0gICAgcmV0dXJuKGhtc2dhKGhteHhk aXIpKTsKLSNlbmRpZiAvKiBVTklYT1JPU0sgKi8KLQotI2lmbmRlZiBOT1NFUlZFUgotI2lmbmRl ZiBOT0ZSSUxMUwotY2FzZSBYWERJUzoKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBESVNBQkxF IGNvbW1hbmRcblwKLSAgU2VjdXJpdHkgZm9yIHRoZSBLZXJtaXQgc2VydmVyLiAgUHJldmVudHMg dGhlIGNsaWVudCBLZXJtaXQgcHJvZ3JhbSBmcm9tXG5cCi0gIGV4ZWN1dGluZyB0aGUgbmFtZWQg UkVNT1RFIGNvbW1hbmQsIHN1Y2ggYXMgQ0QsIERFTEVURSwgUkVDRUlWRSwgZXRjLiIpKTsKLSNl bmRpZiAvKiBOT0ZSSUxMUyAqLwotI2VuZGlmIC8qIE5PU0VSVkVSICovCi0KLSNpZm5kZWYgTk9T UEwKLWNhc2UgWFhETzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkbyAqLwotICAg IHJldHVybihobXNnKCJTeW50YXg6IFsgRE8gXSBtYWNyb25hbWUgWyBhcmd1bWVudHMgXVxuXAot ICBFeGVjdXRlcyBhIG1hY3JvIHRoYXQgd2FzIGRlZmluZWQgd2l0aCB0aGUgREVGSU5FIGNvbW1h bmQuICBUaGUgd29yZCBET1xuXAotICBjYW4gYmUgb21pdHRlZC4gIFRyYWlsaW5nIGFyZ3VtZW50 IHdvcmRzLCBpZiBhbnksIGFyZSBhdXRvbWF0aWNhbGx5XG5cCi0gIGFzc2lnbmVkIHRvIHRoZSBt YWNybyBhcmd1bWVudCB2YXJpYWJsZXMgXFwlMSB0aHJvdWdoIFxcJTkuIikpOwotI2VuZGlmIC8q IE5PU1BMICovCi0KLSNpZm5kZWYgTk9TUEwKLWNhc2UgWFhERUM6Ci0gICAgcmV0dXJuKGhtc2dh KGh4eGRlYykpOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLWNhc2UgWFhFQ0g6ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBlY2hvICovCi0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogRUNI TyB0ZXh0XG5cCi0gIERpc3BsYXlzIHRoZSB0ZXh0IG9uIHRoZSBzY3JlZW4sIGZvbGxvd2VkIGJ5 IGEgbGluZSB0ZXJtaW5hdG9yLiAgVGhlIEVDSE9cblwKLSAgdGV4dCBtYXkgY29udGFpbiBiYWNr c2xhc2ggY29kZXMuICBFeGFtcGxlOiBFQ0hPIFxcN1dha2UgdXAhXFw3LiAgQWxzbyBzZWVcblwK LSAgWEVDSE8gYW5kIFdSSVRFIFNDUkVFTi4iKSk7Ci0KLWNhc2UgWFhYRUNIOiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiB4ZWNobyAqLwotICAgIHJldHVybihobXNnKCJTeW50YXg6IFhF Q0hPIHRleHRcblwKLSAgSnVzdCBsaWtlIEVDSE8gYnV0IGRvZXMgbm90IGFkZCBhIGxpbmUgdGVy bWluYXRvciB0byB0aGUgdGV4dC4gIFNlZSBFQ0hPLiIpKTsKLQotY2FzZSBYWFZPSUQ6Ci0gICAg cmV0dXJuKGhtc2coIlN5bnRheDogVk9JRCB0ZXh0XG5cCi0gIExpa2UgRUNITyBidXQgZG9lc24n dCBwcmludCBhbnl0aGluZzsgY2FuIGJlIHVzZWQgdG8gaW52b2tlIGZ1bmN0aW9uc1xuXAotICB3 aGVuIHlvdSBkb24ndCBuZWVkIHRvIGRpc3BsYXkgb3IgdXNlIHRoZWlyIHJlc3VsdHMuIikpOwot Ci0jaWZuZGVmIE5PU0VSVkVSCi0jaWZuZGVmIE5PRlJJTExTCi1jYXNlIFhYRU5BOgotICAgIHJl dHVybihobXNnKCJTeW50YXg6IEVOQUJMRSBjYXBhYmlsaXR5XG5cCi0gIEZvciB1c2Ugd2l0aCBz ZXJ2ZXIgbW9kZS4gIEFsbG93cyB0aGUgY2xpZW50IEtlcm1pdCBwcm9ncmFtIGFjY2VzcyB0byB0 aGVcblwKLSAgbmFtZWQgY2FwYWJpbGl0eSwgc3VjaCBhcyBDRCwgREVMRVRFLCBSRUNFSVZFLCBl dGMuICBPcHBvc2l0ZSBvZiBESVNBQkxFLiIpKTsKLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotI2Vu ZGlmIC8qIE5PU0VSVkVSICovCi0KLSNpZm5kZWYgTk9TUEwKLWNhc2UgWFhFTkQ6ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBlbmQgKi8KLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBF TkQgWyBudW1iZXIgWyBtZXNzYWdlIF0gXVxuXAotICBFeGl0cyBmcm9tIHRoZSBjdXJyZW50IG1h Y3JvIG9yIFRBS0UgZmlsZSwgYmFjayB0byB3aGVyZXZlciBpbnZva2VkIGZyb20uXG5cCi0gIE51 bWJlciBpcyByZXR1cm4gY29kZS4gIE1lc3NhZ2UsIGlmIGdpdmVuLCBpcyBwcmludGVkLiIpKTsK LQotY2FzZSBYWEVWQUw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV2YWx1YXRlICov Ci0gICAgcmV0dXJuKGhtc2dhKGhteHhldmFsKSk7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lm bmRlZiBOT0ZSSUxMUwotY2FzZSBYWEVSUjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IGUtcGFja2V0ICovCi0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogRS1QQUNLRVRcblwKLSAgU2Vu ZHMgYW4gRXJyb3IgcGFja2V0IHRvIHRoZSBvdGhlciBLZXJtaXQuIikpOwotI2VuZGlmIC8qIE5P RlJJTExTICovCi0KLWNhc2UgWFhFWEk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBl eGl0ICovCi1jYXNlIFhYUVVJOgotICAgIHJldHVybihobXNnYShobXh4ZXhpdCkpOwotCi1jYXNl IFhYRklOOgotICAgIHJldHVybihobXNnKCJTeW50YXg6IEZJTklTSFxuXAotICBUZWxscyB0aGUg cmVtb3RlIEtlcm1pdCBzZXJ2ZXIgdG8gc2h1dCBkb3duIHdpdGhvdXQgbG9nZ2luZyBvdXQuIikp OwotCi0jaWZuZGVmIE5PU1BMCi0gIGNhc2UgWFhGT1I6Ci0gICAgcmV0dXJuKGhtc2dhKGZvcmhs cCkpOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSAgY2FzZSBYWEdFVDoKLSAgICByZXR1cm4oaG1z Z2EoaG14eGdldCkpOwotICBjYXNlIFhYTUdFVDoKLSAgICByZXR1cm4oaG1zZ2EoaG14eG1nZXQp KTsKLQotI2lmbmRlZiBOT1NQTAotI2lmbmRlZiBOT0ZSSUxMUwotICBjYXNlIFhYR09LOgotICAg IHJldHVybihobXNnKCJTeW50YXg6IEdFVE9LIFsgc3dpdGNoZXMgXSBwcm9tcHRcblwKLSAgUHJp bnRzIHRoZSBwcm9tcHQsIG1ha2VzIHVzZXIgdHlwZSAneWVzJywgJ25vJywgb3IgJ29rJywgYW5k IHNldHMgU1VDQ0VTU1xuXAotICBvciBGQUlMVVJFIGFjY29yZGluZ2x5LiAgVGhlIG9wdGlvbmFs IHN3aXRjaGVzIGFyZSB0aGUgc2FtZSBhcyBmb3IgQVNLLiIpKTsKLSNlbmRpZiAvKiBOT0ZSSUxM UyAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5kZWYgTk9TUEwKLSAgY2FzZSBYWEdPVE86 Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogR09UTyBsYWJlbFxuXAotICBJbiBhIFRBS0UgZmls ZSBvciBtYWNybywgZ28gdG8gdGhlIGdpdmVuIGxhYmVsLiAgQSBsYWJlbCBpcyBhIHdvcmQgb24g dGhlXG5cCi0gIGxlZnQgbWFyZ2luIHRoYXQgc3RhcnRzIHdpdGggYSBjb2xvbiAoOikuICBFeGFt cGxlOlxuXG5cCi0gIDpvb2ZhXG5cCi0gIGVjaG8gSGVsbG8hXG5cCi0gIGdvdG8gb29mYSIpKTsK LSNlbmRpZiAvKiBOT1NQTCAqLwotCi0gIGNhc2UgWFhIQU46Ci0gICAgcmV0dXJuKGhtc2coIlN5 bnRheDogSEFOR1VQXG5cCi1IYW5nIHVwIHRoZSBwaG9uZSBvciBuZXR3b3JrIGNvbm5lY3Rpb24u IikpOwotCi0gIGNhc2UgWFhITFA6Ci0vKgotICBXZSBnZXQgY29uZmlybWF0aW9uIGhlcmUsIGV2 ZW4gdGhvdWdoIHdlIGRvIGl0IGFnYWluIGluIGhtc2dhKCksIHRvIHByZXZlbnQKLSAgdGhlIENv cHlyaWdodCBtZXNzYWdlIGZyb20gYmVpbmcgcHJpbnRlZCBwcmVtYXR1cmVseS4gIFRoaXMgZG9l c24ndCBkbyBhbnkKLSAgaGFybSwgYmVjYXVzZSB0aGUgZmlyc3QgY2FsbCB0byBjbWNmbSgpIHNl dHMgY21mbGdzIHRvIDEsIG1ha2luZyB0aGUgc2Vjb25kCi0gIGNhbGwgcmV0dXJuIGltbWVkaWF0 ZWx5LgotKi8KLSAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAgICByZXR1cm4oeCk7Ci0K LSAgICBpZiAoaGVscGZpbGUpIHsKLSAgICAgICAgcHJpbnRmKCJcbiVzLCBDb3B5cmlnaHQgKEMp IDE5ODUsICVzLFxuXAotVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0 eSBvZiBOZXcgWW9yay5cblxuIiwKLQkgICAgICAgdmVyc2lvLAotCSAgICAgICBja19jcnllYXIK LQkgICAgICAgKTsKLSAgICAgICAgcmV0dXJuKGRvdHlwZShoZWxwZmlsZSx4YXNrbW9yZSwzLDAs TlVMTCwwLE5VTEwsMCwwLE5VTEwsMCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHByaW50Zigi XG4lcywgQ29weXJpZ2h0IChDKSAxOTg1LCAlcywiLHZlcnNpbyxja19jcnllYXIpOwotICAgICAg ICByZXR1cm4oaG1zZ2EodG9waGxwKSk7Ci0gICAgfQotCi1jYXNlIFhYSU5UOgotI2lmZGVmIE9T MgotICAgIHJldHVybihobXNnKCJUaGUgSU5UUk8gY29tbWFuZCBnaXZlcyBhIGJyaWVmIGludHJv ZHVjdGlvbiB0byBLZXJtaXQgOTUuIikpOwotI2Vsc2UKLSAgICByZXR1cm4oaG1zZygiVGhlIElO VFJPIGNvbW1hbmQgZ2l2ZXMgYSBicmllZiBpbnRyb2R1Y3Rpb24gdG8gQy1LZXJtaXQuIikpOwot I2VuZGlmIC8qIE9TMiAqLwotCi0jaWZuZGVmIE5PU1BMCi1jYXNlIFhYSUY6Ci0gICAgcmV0dXJu KGhtc2dhKGlmaGxwKSk7Ci0KLWNhc2UgWFhJTkM6Ci0gICAgcmV0dXJuKGhtc2dhKGh4eGluYykp OwotCi1jYXNlIFhYSU5QOgotICAgcmV0dXJuKGhtc2dhKGh4eGlucCkpOwotI2VuZGlmIC8qIE5P U1BMICovCi0KLSNpZmRlZiBDS19NSU5QVVQKLWNhc2UgWFhNSU5QOgotICAgIHJldHVybihobXNn YShobXh4bWlucCkpOwotI2VuZGlmIC8qIENLX01JTlBVVCAqLwotCi0jaWZuZGVmIE5PU1BMCi1j YXNlIFhYUkVJOgotICAgIHJldHVybihobXNnKCJTeW50YXg6IFJFSU5QVVQgbiBzdHJpbmdcblwK LSAgTG9va3MgZm9yIHRoZSBzdHJpbmcgaW4gdGhlIHRleHQgdGhhdCBoYXMgcmVjZW50bHkgYmVl biBJTlBVVCwgc2V0IFNVQ0NFU1NcblwKLSAgb3IgRkFJTFVSRSBhY2NvcmRpbmdseS4gIFRpbWVv dXQsIG4sIG11c3QgYmUgc3BlY2lmaWVkIGJ1dCBpcyBpZ25vcmVkLiIpKTsKLSNlbmRpZiAvKiBO T1NQTCAqLwotCi0jaWZuZGVmIE5PU1BMCi1jYXNlIFhYTEJMOgotICAgIHJldHVybihobXNnKCJc Ci0gIEludHJvZHVjZXMgYSBsYWJlbCwgbGlrZSA6bG9vcCwgZm9yIHVzZSB3aXRoIEdPVE8gaW4g VEFLRSBmaWxlcyBvciBtYWNyb3MuXG5cCi1TZWUgR09UTy4iKSk7Ci0jZW5kaWYgLyogTk9TUEwg Ki8KLQotY2FzZSBYWExPRzoKLSAgICByZXR1cm4oaG1zZ2EoaG14eGxnKSk7Ci0KLSNpZm5kZWYg Tk9TQ1JJUFQKLWNhc2UgWFhMT0dJOgotICAgIHJldHVybihobXNnYShobXh4bG9naSkpOwotI2Vu ZGlmCi0KLSNpZm5kZWYgTk9GUklMTFMKLWNhc2UgWFhNQUk6Ci0gICAgcmV0dXJuKGhtc2coIlN5 bnRheDogTUFJTCBmaWxlbmFtZSBhZGRyZXNzXG5cCi0gIEVxdWl2YWxlbnQgdG8gU0VORCAvTUFJ TDphZGRyZXNzIGZpbGVuYW1lLiIpKTsKLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotCi0jaWZuZGVm IE5PTVNFTkQKLWNhc2UgWFhNU0U6Ci0gICAgcmV0dXJuKGhtc2dhKGhteHhtc2UpKTsKLQotY2Fz ZSBYWEFERDoKLSAgICByZXR1cm4oaG1zZ2EoaG14eGFkZCkpOwotCi1jYXNlIFhYTU1PVkU6Ci0g ICAgcmV0dXJuKGhtc2coIk1NT1ZFIGlzIGV4YWN0bHkgbGlrZSBNU0VORCwgZXhjZXB0IGVhY2gg ZmlsZSB0aGF0IGlzXG5cCi1zZW50IHN1Y2Nlc3NmdWxseSBpcyBkZWxldGVkIGFmdGVyIGl0IGlz IHNlbnQuIikpOwotI2VuZGlmIC8qIE5PTVNFTkQgKi8KLQotI2lmbmRlZiBOT1NQTAotY2FzZSBY WE9QRToKLSAgICByZXR1cm4oaG1zZ2Eob3BlbmhscCkpOwotI2VuZGlmIC8qIE5PU1BMICovCi0K LWNhc2UgWFhORVc6Ci0gICAgcmV0dXJuKGhtc2coCi0iICBQcmludHMgbmV3cyBvZiBuZXcgZmVh dHVyZXMgc2luY2UgcHVibGljYXRpb24gb2YgXCJVc2luZyBDLUtlcm1pdFwiLiIpKTsKLQotY2Fz ZSBYWFVQRDoKLSAgICByZXR1cm4oaG1zZygKLSIgIE5ldyBmZWF0dXJlcyBhcmUgZGVzY3JpYmVk IGluIHRoZSBvbmxpbmUgS2VybWl0IDk1IG1hbnVhbCxcblwKLSAgIGFjY2Vzc2libGUgdmlhIHRo ZSBNQU5VQUwgY29tbWFuZC4iKSk7Ci0KLSNpZm5kZWYgTk9TUEwKLWNhc2UgWFhPVVQ6Ci0gICAg cmV0dXJuKGhtc2dhKGh4eG91dCkpOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZmRlZiBBTllY MjUKLSNpZm5kZWYgSUJNWDI1Ci1jYXNlIFhYUEFEOgotICAgIHJldHVybihobXNnYShoeHhwYWQp KTsKLSNlbmRpZiAvKiBJQk1YMjUgKi8KLSNlbmRpZiAvKiBBTllYMjUgKi8KLQotI2lmbmRlZiBO T1NQTAotY2FzZSBYWFBBVToKLSAgICByZXR1cm4oaG1zZ2EoaHh4cGF1KSk7Ci0KLWNhc2UgWFhN U0w6Ci0gICAgcmV0dXJuKGhtc2dhKGh4eG1zbCkpOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNp ZmRlZiBUQ1BTT0NLRVQKLWNhc2UgWFhQTkc6Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogUElO RyBbIElQLWhvc3RuYW1lLW9yLW51bWJlciBdXG5cCi0gIENoZWNrcyBpZiB0aGUgZ2l2ZW4gSVAg bmV0d29yayBob3N0IGlzIHJlYWNoYWJsZS4gIERlZmF1bHQgaG9zdCBpcyBmcm9tXG5cCi0gIG1v c3QgcmVjZW50IFNFVCBIT1NUIG9yIFRFTE5FVCBjb21tYW5kLiAgUnVucyBzeXN0ZW0gUElORyBw cm9ncmFtLCBpZiBhbnkuIikKLSAgICAgICAgICAgKTsKLQotY2FzZSBYWEZUUDoKLSNpZmRlZiBT WVNGVFAKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBGVFAgWyBJUC1ob3N0bmFtZS1vci1udW1i ZXIgXVxuXAotICBNYWtlcyBhbiBGVFAgY29ubmVjdGlvbiB0byB0aGUgZ2l2ZW4gSVAgaG9zdCBv ciwgaWYgbm8gaG9zdCBzcGVjaWZpZWQsIHRvXG5cCi0gIHRoZSBjdXJyZW50IGhvc3QuICBVc2Vz IHRoZSBzeXN0ZW0ncyBGVFAgcHJvZ3JhbSwgaWYgYW55LiIpKTsKLSNlbHNlCi0jaWZuZGVmIE5P RlRQCi0gICAgcmV0dXJuKGRvZnRwaGxwKCkpOwotI2VuZGlmIC8qIE5PRlRQICovCi0jZW5kaWYg LyogU1lTRlRQICovCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0KLSNpZm5kZWYgTk9GUklMTFMK LWNhc2UgWFhQUkk6Ci0jaWZkZWYgVU5JWAotICAgIHJldHVybihobXNnKCJTeW50YXg6IFBSSU5U IGZpbGUgWyBvcHRpb25zIF1cblwKLSAgUHJpbnRzIHRoZSBsb2NhbCBmaWxlIG9uIGEgbG9jYWwg cHJpbnRlciB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLiAgQWxzbyBzZWVcblwKLSAgSEVMUCBTRVQg UFJJTlRFUi4iKSk7Ci0jZWxzZQotI2lmZGVmIFZNUwotICAgIHJldHVybihobXNnKCJTeW50YXg6 IFBSSU5UIGZpbGUgWyBvcHRpb25zIF1cblwKLSAgUHJpbnRzIHRoZSBsb2NhbCBmaWxlIG9uIGEg bG9jYWwgcHJpbnRlciB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLiAgQWxzbyBzZWVcblwKLSAgSEVM UCBTRVQgUFJJTlRFUi4iKSk7Ci0jZWxzZQotICAgIHJldHVybihobXNnKCJTeW50YXg6IFBSSU5U IGZpbGVcblwKLSAgUHJpbnRzIHRoZSBsb2NhbCBmaWxlIG9uIGEgbG9jYWwgcHJpbnRlci4gIEFs c28gc2VlIEhFTFAgU0VUIFBSSU5URVIuIikpOwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAv KiBWTVMgKi8KLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotCi1jYXNlIFhYUFdEOgotY2FzZSBYWExQ V0Q6Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogUFdEXG5cCi1QcmludCB0aGUgbmFtZSBvZiB0 aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4iKSk7Ci0KLSNpZm5kZWYgTk9TUEwKLWNhc2Ug WFhSRUE6Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogUkVBRCB2YXJpYWJsZW5hbWVcblwKLSAg UmVhZHMgYSBsaW5lIGZyb20gdGhlIGN1cnJlbnRseSBvcGVuIFJFQUQgb3IgIVJFQUQgZmlsZSBp bnRvIHRoZSB2YXJpYWJsZVxuXAotICAoc2VlIE9QRU4pLiIpKTsKLSNlbmRpZiAvKiBOT1NQTCAq LwotCi0jaWZuZGVmIE5PWEZFUgotY2FzZSBYWFJFQzoKLSAgICByZXR1cm4oaG1zZ2EoaG14eHJj KSk7Ci0KLWNhc2UgWFhSRU06Ci0gICAgeSA9IGNta2V5KHJlbWNtZCxucm10LCJSZW1vdGUgY29t bWFuZCIsIiIseHhzdHJpbmcpOwotICAgIHJldHVybihkb2hybXQoeSkpOwotI2VuZGlmIC8qIE5P WEZFUiAqLwotCi0jaWZuZGVmIE5PU1BMCi1jYXNlIFhYUkVUOgotICAgIHJldHVybihobXNnKCJT eW50YXg6IFJFVFVSTiBbIHZhbHVlIF1cblwKLSAgUmV0dXJuIGZyb20gYSBtYWNyby4gIEFuIG9w dGlvbmFsIHJldHVybiB2YWx1ZSBjYW4gYmUgZ2l2ZW4gZm9yIHVzZSB3aXRoXG5cCi0gIFxcZmV4 ZWN1dGUobWFjcm8pLCB3aGljaCBhbGxvd3MgbWFjcm9zIHRvIGJlIHVzZWQgbGlrZSBmdW5jdGlv bnMuIikpOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5kZWYgTk9YRkVSCi1jYXNlIFhYU0VO OgotICAgIHJldHVybihobXNnYShobXh4c2VuKSk7Ci1jYXNlIFhYTU9WRToKLSAgICByZXR1cm4o aG1zZygiTU9WRSBpcyBleGFjdGx5IGxpa2UgU0VORCwgZXhjZXB0IGVhY2ggZmlsZSB0aGF0IGlz XG5cCi1zZW50IHN1Y2Nlc3NmdWxseSBpcyBkZWxldGVkIGFmdGVyIGl0IGlzIHNlbnQuIikpOwot I2lmbmRlZiBOT1JFU0VORAotY2FzZSBYWFJTRU46Ci0gICAgcmV0dXJuKGhtc2coaG14eHJzZW4p KTsKLWNhc2UgWFhSRUdFVDoKLSAgICByZXR1cm4oaG1zZyhobXh4cmdldCkpOwotY2FzZSBYWFBT RU46Ci0gICAgcmV0dXJuKGhtc2coaG14eHBzZW4pKTsKLSNlbmRpZiAvKiBOT1JFU0VORCAqLwot Ci0jaWZuZGVmIE5PU0VSVkVSCi1jYXNlIFhYU0VSOgotICAgIHJldHVybihobXNnKGhteHhzZXIp KTsKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZuZGVm IE5PSkMKLWNhc2UgWFhTVVM6Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogU1VTUEVORCBvciBa XG5cCi0gIFN1c3BlbmRzIEtlcm1pdC4gIENvbnRpbnVlIEtlcm1pdCB3aXRoIHRoZSBhcHByb3By aWF0ZSBzeXN0ZW0gY29tbWFuZCxcblwKLSAgc3VjaCBhcyBmZy4iKSk7Ci0jZW5kaWYgLyogTk9K QyAqLwotCi1jYXNlIFhYU0VUOgotICAgIHkgPSBjbWtleShwcm10YWIsbnBybSwiUGFyYW1ldGVy IiwiIix4eHN0cmluZyk7Ci0gICAgZGVidWcoRjEwMSwiSEVMUCBTRVQgeSIsIiIseSk7Ci0gICAg cmV0dXJuKGRvaHNldCh5KSk7Ci0KLSNpZm5kZWYgTk9QVVNICi1jYXNlIFhYU0hFOgotICAgIGlm IChub3B1c2gpIHsKLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0g ICAgICAgIHByaW50ZigiU29ycnksIGhlbHAgbm90IGF2YWlsYWJsZSBmb3IgXCIlc1wiXG4iLGNt ZGJ1Zik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0gZWxzZQotICAgICAgIHJldHVybihobXNnYSho eHhzaGUpKTsKLSNpZmRlZiBDS19SRURJUgotY2FzZSBYWEZVTjoKLSAgICByZXR1cm4oaG1zZygi U3ludGF4OiBSRURJUkVDVCBjb21tYW5kXG5cCi0gIFJ1bnMgdGhlIGdpdmVuIGxvY2FsIGNvbW1h bmQgd2l0aCBpdHMgc3RhbmRhcmQgaW5wdXQgYW5kIG91dHB1dCByZWRpcmVjdGVkXG5cCi0gIHRv IHRoZSBjdXJyZW50IFNFVCBMSU5FIG9yIFNFVCBIT1NUIGNvbW11bmljYXRpb25zIHBhdGguXG5c Ci0gIFN5bm9ueW06IDwgKExlZnQgYW5nbGUgYnJhY2tldCkuIikpOwotI2VuZGlmIC8qIENLX1JF RElSICovCi0KLSNpZmRlZiBDS19SRVhYCi1jYXNlIFhYUkVYWDoKLSAgICByZXR1cm4oaG1zZygi U3ludGF4OiBSRVhYIHRleHRcblwKLSAgVGhlIHRleHQgaXMgYSBSZXh4IGNvbW1hbmQgdG8gYmUg ZXhlY3V0ZWQuIFRoZSBcXHYocmV4eCkgdmFyaWFibGUgaXMgc2V0XG5cCi0gIHRvIHRoZSBSZXh4 IGNvbW1hbmQncyByZXR1cm4gdmFsdWUuXG5cCi0gIFRvIGV4ZWN1dGUgYSByZXh4IHByb2dyYW0g ZmlsZSwgdXNlOiAgUkVYWCBjYWxsIDxmaWxlbmFtZT5cblwKLSAgUmV4eCBwcm9ncmFtcyBtYXkg Y2FsbCBLZXJtaXQgZnVuY3Rpb25zIGJ5IHBsYWNpbmcgdGhlIEtlcm1pdCBjb21tYW5kXG5cCi0g IGluIHNpbmdsZSBxdW90ZXMuICBGb3IgaW5zdGFuY2U6ICAnc2V0IHBhcml0eSBub25lJy4iKSk7 Ci0jZW5kaWYgLyogQ0tfUkVYWCAqLwotI2VuZGlmIC8qIE5PUFVTSCAqLwotCi0jaWZuZGVmIE5P U0hPVwotY2FzZSBYWFNITzoKLSAgICByZXR1cm4oaG1zZygiXAotICBEaXNwbGF5IGN1cnJlbnQg dmFsdWVzIG9mIHZhcmlvdXMgaXRlbXMgKFNFVCBwYXJhbWV0ZXJzLCB2YXJpYWJsZXMsIGV0Yyku XG5cCi0gIFR5cGUgU0hPVyA/IGZvciBhIGxpc3Qgb2YgY2F0ZWdvcmllcy4iKSk7Ci0jZW5kaWYg LyogTk9TSE9XICovCi0KLWNhc2UgWFhTUEE6Ci0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICByZXR1 cm4oaG1zZygiXAotICBEaXNwbGF5IGRpc2sgdXNhZ2UgaW4gY3VycmVudCBkZXZpY2UsIGRpcmVj dG9yeSxcblwKLSAgb3IgcmV0dXJuIHNwYWNlIGZvciBhIHNwZWNpZmllZCBkZXZpY2UsIGRpcmVj dG9yeS4iKSk7Ci0jZWxzZQotICAgIHJldHVybihobXNnKCJTeW50YXg6IFNQQUNFXG5cCi0gIERp c3BsYXkgZGlzayB1c2FnZSBpbiBjdXJyZW50IGRldmljZSBhbmQvb3IgZGlyZWN0b3J5IikpOwot I2VuZGlmCi0KLWNhc2UgWFhTVEE6Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogU1RBVElTVElD UyBbL0JSSUVGXVxuXAotICBEaXNwbGF5IHN0YXRpc3RpY3MgYWJvdXQgbW9zdCByZWNlbnQgZmls ZSB0cmFuc2ZlciIpKTsKLQotI2lmbmRlZiBOT1NQTAotY2FzZSBYWFNUTzoKLSAgICByZXR1cm4o aG1zZygiU3ludGF4OiBTVE9QIFsgbnVtYmVyIFsgbWVzc2FnZSBdIF1cblwKLSAgU3RvcCBleGVj dXRpbmcgdGhlIGN1cnJlbnQgbWFjcm8gb3IgVEFLRSBmaWxlIGFuZCByZXR1cm4gaW1tZWRpYXRl bHkgdG9cblwKLSAgdGhlIEtlcm1pdCBwcm9tcHQuICBOdW1iZXIgaXMgYSByZXR1cm4gY29kZS4g IE1lc3NhZ2UgcHJpbnRlZCBpZiBnaXZlbi4iKSk7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotY2Fz ZSBYWFRBSzoKLSAgICByZXR1cm4oaG1zZ2EoaG14eHRhaykpOwotCi0jaWZkZWYgVENQU09DS0VU Ci0jaWZkZWYgVE5DT0RFCi1jYXNlIFhYSUtTRDoKLSAgICByZXR1cm4oaG1zZ2EoaG14eGlrcykp OwotCi1jYXNlIFhYVEVMOgotICAgIHJldHVybihobXNnYShobXh4dGVsKSk7Ci0KLWNhc2UgWFhU RUxPUDoKLSAgICByZXR1cm4oaG1zZ2EoaHh0b3B0KSk7Ci0jZW5kaWYgLyogVE5DT0RFICovCi0K LSNpZmRlZiBSTE9HQ09ERQotY2FzZSBYWFJMT0c6Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDog UkxPR0lOIFsgc3dpdGNoZXMgXSBbIGhvc3QgWyB1c2VybmFtZSBdIF1cblwKLSAgRXF1aXZhbGVu dCB0byBTRVQgTkVUV09SSyBUWVBFIFRDUC9JUCwgU0VUIEhPU1QgaG9zdCBbIHNlcnZpY2UgXSAv UkxPR0lOLFxuXAotICBJRiBTVUNDRVNTIENPTk5FQ1QuICBJZiBob3N0IGlzIG9taXR0ZWQsIHRo ZSBwcmV2aW91cyBjb25uZWN0aW9uIChpZiBhbnkpXG5cCi0gIGlzIHJlc3VtZWQuICBEZXBlbmRp bmcgb24gaG93IEtlcm1pdCBoYXMgYmVlbiBidWlsdCBzd2l0Y2hlcyBtYXkgYmVcblwKLSAgYXZh aWxhYmxlIHRvIHJlcXVpcmUgS2VyYmVyb3MgYXV0aGVudGljYXRpb24gYW5kIERFUyBlbmNyeXB0 aW9uLiIpKTsKLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwot Ci0jaWZuZGVmIE5PWE1JVAotY2FzZSBYWFRSQToKLSAgICByZXR1cm4oaG1zZ2EoaHh4eG1pdCkp OwotI2VuZGlmIC8qIE5PWE1JVCAqLwotCi0jaWZuZGVmIE5PRlJJTExTCi1jYXNlIFhYVFlQOgot ICAgIHJldHVybihobXNnYShobXh4dHlwKSk7Ci1jYXNlIFhYTU9SRToKLSAgICByZXR1cm4oaG1z ZygiU3ludGF4OiBNT1JFIFsgc3dpdGNoZXMgXSBmaWxlbmFtZVxuXAotICBFcXVpdmFsZW50IHRv IFRZUEUgL1BBR0UgZmlsZW5hbWU7IHNlZSBIRUxQIFRZUEUuIikpOwotY2FzZSBYWENBVDoKLSAg ICByZXR1cm4oaG1zZygiU3ludGF4OiBNT1JFIFsgc3dpdGNoZXMgXSBmaWxlbmFtZVxuXAotICBF cXVpdmFsZW50IHRvIFRZUEUgL05PUEFHRSBmaWxlbmFtZTsgc2VlIEhFTFAgVFlQRS4iKSk7Ci1j YXNlIFhYSEVBRDoKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBIRUFEIFsgc3dpdGNoZXMgXSBm aWxlbmFtZVxuXAotICBFcXVpdmFsZW50IHRvIFRZUEUgL0hFQUQgZmlsZW5hbWU7IHNlZSBIRUxQ IFRZUEUuIikpOwotY2FzZSBYWFRBSUw6Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogVEFJTCBb IHN3aXRjaGVzIF0gZmlsZW5hbWVcblwKLSAgRXF1aXZhbGVudCB0byBUWVBFIC9UQUlMIGZpbGVu YW1lOyBzZWUgSEVMUCBUWVBFLiIpKTsKLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotCi0jaWZuZGVm IE5PU1BMCi1jYXNlIFhYV0hJOgotICAgIHJldHVybihobXNnYSh3aGlobHApKTsKLQotY2FzZSBY WFNXSVQ6Ci0gICAgcmV0dXJuKGhtc2dhKHN3aWhscCkpOwotI2VuZGlmIC8qIE5PU1BMICovCi0K LSNpZm5kZWYgTk9DU0VUUwotY2FzZSBYWFhMQToKLSAgICByZXR1cm4oaG1zZ2EoaHh4eGxhKSk7 Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi1jYXNlIFhYVkVSOgotICAgIHJldHVybihobXNnKCJT eW50YXg6IFZFUlNJT05cbkRpc3BsYXlzIHRoZSBwcm9ncmFtIHZlcnNpb24gbnVtYmVyLiIpKTsK LQotI2lmbmRlZiBOT1NQTAotY2FzZSBYWFdBSToKLSAgICByZXR1cm4oaG1zZ2EoaHh4d2FpKSk7 Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT0ZSSUxMUwotY2FzZSBYWFdITzoKLSAg ICByZXR1cm4oaG1zZygiU3ludGF4OiBXSE8gWyB1c2VyIF1cbkRpc3BsYXlzIGluZm8gYWJvdXQg dGhlIHVzZXIuIikpOwotCi1jYXNlIFhYV1JJOgotICAgIHJldHVybihobXNnYShoeHh3cmkpKTsK LQotY2FzZSBYWFdSTDoKLSAgICByZXR1cm4oaG1zZygKLSJXUklURS1MSU5FIChXUklURUxOKSBp cyBqdXN0IGxpa2UgV1JJVEUsIGJ1dCBpbmNsdWRlcyBhIGxpbmUgdGVybWluYXRvclxuXAotYXQg dGhlIGVuZCBvZiB0ZXh0LiAgU2VlIFdSSVRFLiIpKTsKLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwot Ci0jaWZuZGVmIE5PU1BMCi1jYXNlIFhYSUZYOgotICAgIHJldHVybihobXNnYShpZnhobHApKTsK LQotY2FzZSBYWEdFVEM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdFVEMgKi8KLSAg ICByZXR1cm4oaG1zZ2EoaHh4Z2V0YykpOwotCi1jYXNlIFhYRldEOiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogRk9SV0FSRCAqLwotICAgIHJldHVybihobXNnKAotIkxpa2UgR09UTywg YnV0IHNlYXJjaGVzIG9ubHkgZm9yd2FyZCBmb3IgdGhlIGxhYmVsLiAgU2VlIEdPVE8uIikpOwot Ci1jYXNlIFhYTE9DQUw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTE9DQUwgKi8KLSAg ICByZXR1cm4oaG1zZygKLSJEZWNsYXJlcyBhIHZhcmlhYmxlIHRvIGJlIGxvY2FsIHRvIHRoZSBj dXJyZW50IG1hY3JvIG9yIGNvbW1hbmQgZmlsZS4iKSk7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQot Y2FzZSBYWFZJRVc6Ci0gICAgcmV0dXJuKGhtc2coCi0iVmlldyB0aGUgdGVybWluYWwgZW11bGF0 aW9uIHNjcmVlbiBldmVuIHdoZW4gdGhlcmUgaXMgbm8gY29ubmVjdGlvbi4iKSk7Ci0KLSNpZmRl ZiBORVdGVFAKLWNhc2UgWFhBU0M6Ci0gICAgcmV0dXJuKGhtc2coCi0iSW5oaWJpdHMgYXV0b21h dGljIHRyYW5zZmVyLW1vZGUgc3dpdGNoaW5nIGFuZCBmb3JjZXMgVEVYVCAoQVNDSUkpIHRyYW5z ZmVyXG5cCi1tb2RlIGZvciBhbGwgZmlsZXMgaW4gYm90aCBLZXJtaXQgYW5kIEZUUCBwcm90b2Nv bHMuIikpOwotY2FzZSBYWEJJTjoKLSAgICByZXR1cm4oaG1zZygKLSJJbmhpYml0cyBhdXRvbWF0 aWMgdHJhbnNmZXItbW9kZSBzd2l0Y2hpbmcgYW5kIGZvcmNlcyBCSU5BUlkgdHJhbnNmZXIgbW9k ZVxuXAotZm9yIGFsbCBmaWxlcyBpbiBib3RoIEtlcm1pdCBhbmQgRlRQIHByb3RvY29scy4iKSk7 Ci0jZWxzZQotY2FzZSBYWEFTQzoKLSAgICByZXR1cm4oaG1zZygKLSJJbmhpYml0cyBhdXRvbWF0 aWMgdHJhbnNmZXItbW9kZSBzd2l0Y2hpbmcgYW5kIGZvcmNlcyBURVhUIChBU0NJSSkgdHJhbnNm ZXJcblwKLW1vZGUgZm9yIGFsbCBmaWxlcy4iKSk7Ci1jYXNlIFhYQklOOgotICAgIHJldHVybiho bXNnKAotIkluaGliaXRzIGF1dG9tYXRpYyB0cmFuc2Zlci1tb2RlIHN3aXRjaGluZyBhbmQgZm9y Y2VzIEJJTkFSWSB0cmFuc2ZlciBtb2RlXG5cCi1mb3IgYWxsIGZpbGVzLiIpKTsKLSNlbmRpZgkv KiBORVdGVFAgKi8KLQotY2FzZSBYWERBVEU6Ci0gICAgcmV0dXJuKGhtc2dhKGhteHhkYXRlKSk7 Ci0KLWNhc2UgWFhSRVRSOgotICAgIHJldHVybihobXNnKAotIkp1c3QgbGlrZSBHRVQgYnV0IGFz a3MgdGhlIHNlcnZlciB0byBkZWxldGUgZWFjaCBmaWxlIHRoYXQgaGFzIGJlZW5cblwKLXNlbnQg c3VjY2Vzc2Z1bGx5LiIpKTsKLQotY2FzZSBYWEVJR0hUOgotICAgIHJldHVybihobXNnKAotIkVx dWl2YWxlbnQgdG8gU0VUIFBBUklUWSBOT05FLCBTRVQgQ09NTUFORCBCWVRFIDgsIFNFVCBURVJN SU5BTCBCWVRFIDguIikpOwotCi1jYXNlIFhYU0FWRToKLSAgICByZXR1cm4oaG1zZ2EoaG14eHNh dmUpKTsKLQotI2lmbmRlZiBOT0ZSSUxMUwotI2lmbmRlZiBOT1BVU0gKLWNhc2UgWFhFRElUOgot ICAgIHJldHVybihobXNnKCJTeW50YXg6IEVESVQgWyA8ZmlsZT4gXVxuXAotU3RhcnRzIHlvdXIg cHJlZmVycmVkIGVkaXRvciBvbiB0aGUgZ2l2ZW4gZmlsZSwgb3IgaWYgbm9uZSBnaXZlbiwgdGhl IG1vc3RcblwKLXJlY2VudGx5IGVkaXRlZCBmaWxlLCBpZiBhbnkuICBBbHNvIHNlZSBTRVQgRURJ VE9SLiIpKTsKLSNlbmRpZiAvKiBOT1BVU0ggKi8KLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotCi0j aWZkZWYgQlJPV1NFUgotY2FzZSBYWEJST1dTOgotICAgIHJldHVybihobXNnKCJTeW50YXg6IEJS T1dTRSBbIDx1cmw+IF1cblwKLVN0YXJ0cyB5b3VyIHByZWZlcnJlZCBXZWIgYnJvd3NlciBvbiB0 aGUgZ2l2ZW4gVVJMLCBvciBpZiBub25lIGdpdmVuLCB0aGVcblwKLW1vc3QgcmVjZW50bHkgdmlz aXRlZCBVUkwsIGlmIGFueS4gIEFsc28gc2VlIFNFVCBCUk9XU0VSLiIpKTsKLSNlbmRpZiAvKiBC Uk9XU0VSICovCi0KLSNpZmRlZiBDS19UQVBJCi1jYXNlIFhYVEFQSToKLSAgICByZXR1cm4oaG1z Z2EoaHh4dGFwaSkpOwotI2VuZGlmIC8qIENLX1RBUEkgKi8KLQotI2lmZGVmIFBJUEVTRU5ECi1j YXNlIFhYQ1NFTjoKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBDU0VORCBbIHN3aXRjaGVzIF0g PGNvbW1hbmQ+IFsgPGFzLW5hbWU+IF1cblwKLVNlbmRzIGZyb20gdGhlIGdpdmVuIDxjb21tYW5k PiByYXRoZXIgdGhhbiBmcm9tIGEgZmlsZS4gIEVxdWl2YWxlbnQgdG9cblwKLVNFTkQgL0NPTU1B TkQ7IHNlZSBIRUxQIFNFTkQgZm9yIGRldGFpbHMuIikpOwotCi1jYXNlIFhYQ1JFQzoKLSAgICBy ZXR1cm4oaG1zZygiU3ludGF4OiBDUkVDRUlWRSBbIHN3aXRjaGVzIF0gPGNvbW1hbmQ+XG5cCi1S ZWNlaXZlcyB0byB0aGUgZ2l2ZW4gPGNvbW1hbmQ+IHJhdGhlciB0aGFuIHRvIGEgZmlsZS4gIEVx dWl2YWxlbnQgdG9cblwKLVJFQ0VJVkUgL0NPTU1BTkQ7IHNlZSBIRUxQIFJFQ0VJVkUgZm9yIGRl dGFpbHMuIikpOwotCi1jYXNlIFhYQ0dFVDoKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBDR0VU IDxyZW1vdGUtZmlsZS1vci1jb21tYW5kPiA8bG9jYWwtY29tbWFuZD5cblwKLUVxdWl2YWxlbnQg dG8gR0VUIC9DT01NQU5EOyBzZWUgSEVMUCBHRVQgZm9yIGRldGFpbHMuIikpOwotI2VuZGlmIC8q IFBJUEVTRU5EICovCi0KLSNpZm5kZWYgTk9TUEwKLWNhc2UgWFhGVU5DOgotLyoKLSAgVHJpY2t5 IHBhcnNpbmcuICBXZSB3YW50IHRvIGxldCB0aGVtIHR5cGUgdGhlIGZ1bmN0aW9uIG5hbWUgaW4g YW55IGZvcm1hdAotICBhdCBhbGw6IFxmYmxhaCgpLCBcZmJsYWgsIFxcZmJsYWgoKSwgZmJsYWgs IGJsYWgsIGJsYWgoKSwgZXRjLCBidXQgb2YgY291cnNlCi0gIG9ubHkgb25lIG9mIHRoZXNlIGlz IHJlY29nbml6ZWQgYnkgY21rZXkoKS4gIFNvIHdlIGNhbGwgY21rZXl4KCkgKHRoZSAibm8KLSAg Y29tcGxhaW50cyIgdmVyc2lvbiBvZiBjbWtleSgpKSwgYW5kIGlmIGl0IGZhaWxzLCB3ZSB0cnkg dGhlIG90aGVyIGZvcm1hdHMKLSAgc2lsZW50bHksIGFuZCBzdGlsbCBhbGxvdyBmb3IgPG5vLW5h bWUtZ2l2ZW4+LCBlZGl0aW5nIGFuZCByZXBhcnNlLCBldGMuCi0qLwotICAgIHkgPSBjbWtleXgo Zm5jdGFiLG5mdW5jcywiTmFtZSBvZiBmdW5jdGlvbiIsIiIsTlVMTCk7Ci0gICAgaWYgKHkgPT0g LTEpIHsgICAgICAgICAgICAgICAgICAgICAgLyogUmVwYXJzZSBuZWVkZWQgKi8KLSAgICAgICAg cmV0dXJuKHkpOwotICAgIH0gZWxzZSBpZiAoeSA9PSAtMykgewotICAgICAgICBpZiAoKHggPSBj bWNmbSgpKSA8IDApICAgICAgICAgIC8qIEZvciByZWNhbGwgYnVmZmVyLi4uICovCi0gICAgICAg ICAgcmV0dXJuKHgpOwotICAgICAgICByZXR1cm4oZG9oZnVuYyh5KSk7ICAgICAgICAgICAgIC8q IC0zIGdpdmVzIGdlbmVyYWwgbWVzc2FnZSAqLwotICAgIH0KLSAgICBpZiAoeSA8IDApIHsgICAg ICAgICAgICAgICAgICAgICAgICAvKiBTb21ldGhpbmcgZ2l2ZW4gYnV0IGRpZG4ndCBtYXRjaCAq LwotICAgICAgICBpbnQgZHVtbXk7Ci0gICAgICAgIGNoYXIgKiBwOwotICAgICAgICBmb3IgKHAg PSBhdG1idWY7ICpwOyBwKyspIHsgICAgIC8qIENob3Agb2ZmIHRyYWlsaW5nIHBhcmVucyBpZiBh bnkgKi8KLSAgICAgICAgICAgIGlmICgqcCA9PSAnKCcpIHsKLSAgICAgICAgICAgICAgICAqcCA9 IE5VTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot ICAgICAgICAvKiBDaG9wIG9mZiBsZWFkaW5nICJcXGYiIG9yICJcZiIgb3IgImYiICovCi0gICAg ICAgIHAgPSBhdG1idWY7Ci0gICAgICAgIGlmICgqcCA9PSBDTURRKSAgICAgICAgICAgICAgICAg LyogQWxsb3cgZm9yIFxcZi4uLiAqLwotICAgICAgICAgIHArKzsKLSAgICAgICAgaWYgKCpwID09 IENNRFEgJiYgKCoocCsxKSA9PSAnZicgfHwgKihwKzEpID09ICdGJykpIHsgLyogb3IgXGYgKi8K LSAgICAgICAgICAgIHAgKz0gMjsKLSAgICAgICAgfSBlbHNlIGlmICgqcCA9PSAnZicgfHwgKnAg PT0gJ0YnKSB7IC8qIG9yIGp1c3QgZiAqLwotICAgICAgICAgICAgcCsrOwotICAgICAgICB9Ci0g ICAgICAgIHkgPSBsb29rdXAoZm5jdGFiLHAsbmZ1bmNzLCZkdW1teSk7IC8qIExvb2sgdXAgdGhl IHJlc3VsdCAqLwotICAgIH0KLSAgICBpZiAoeSA8IDApIHsKLSAgICAgICAgcHJpbnRmKCI/Tm8g c3VjaCBmdW5jdGlvbiAtIFwiJXNcIlxuIixhdG1idWYpOwotICAgICAgICByZXR1cm4oLTkpOwot ICAgIH0KLSAgICB4ID0gY21nYnJrKCk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBGaW5kIG91 dCBob3cgdXNlciB0ZXJtaW5hdGVkICovCi0gICAgaWYgKHggPT0gTEYgfHwgeCA9PSBDUikgICAg ICAgICAgICAgLyogaWYgd2l0aCBDUiBvciBMRiAqLwotICAgICAgY21mbGdzID0gMTsgICAgICAg ICAgICAgICAgICAgICAgIC8qIHJlc3RvcmUgY21mbGdzIHRvIHNheSBzbyAqLwotICAgIGlmICgo eCA9IGNtY2ZtKCkpIDwgMCkgICAgICAgICAgICAgIC8qIEFuZCBUSEVOIGNvbmZpcm0gc28gY29t bWFuZCB3aWxsICovCi0gICAgICByZXR1cm4oeCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyog Z2V0IGludG8gcmVjYWxsIGJ1ZmZlci4gKi8KLSAgICByZXR1cm4oZG9oZnVuYyh5KSk7Ci0jZW5k aWYgLyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT0NNREwKLWNhc2UgWFhPUFRTOiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBDb21tYW5kLWxpbmUgb3B0aW9ucyAqLwotICAgIHJldHVybihk b2hvcHRzKCkpOwotCi1jYXNlIFhYWE9QVFM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog RXh0ZW5kZWQgY29tbWFuZC1saW5lIG9wdGlvbnMgKi8KLSAgICByZXR1cm4oZG94b3B0cygpKTsK LSNlbmRpZiAvKiBOT0NNREwgKi8KLQotI2lmZGVmIE9TMgotI2lmbmRlZiBOT0tWRVJCUwotY2Fz ZSBYWEtWUkI6IHsKLSAgICB5ID0gY21rZXl4KGt2ZXJicyxua3ZlcmJzLCJOYW1lIG9mIGtleWJv YXJkIHZlcmIgd2l0aG91dCBcXGsiLCIiLE5VTEwpOwotICAgIGlmICh5ID09IC0xKSB7ICAgICAg ICAgICAgICAgICAgICAgIC8qIFJlcGFyc2UgbmVlZGVkICovCi0gICAgICAgIHJldHVybih5KTsK LSAgICB9IGVsc2UgaWYgKHkgPT0gLTMpIHsKLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAw KSAgICAgICAgICAvKiBGb3IgcmVjYWxsIGJ1ZmZlci4uLiAqLwotICAgICAgICAgIHJldHVybih4 KTsKLSAgICAgICAgcmV0dXJuKGRvaGt2ZXJiKHkpKTsgICAgICAgICAgICAvKiAtMyBnaXZlcyBn ZW5lcmFsIG1lc3NhZ2UgKi8KLSAgICB9Ci0gICAgaWYgKHkgPCAwKSB7ICAgICAgICAgICAgICAg ICAgICAgICAgLyogU29tZXRoaW5nIGdpdmVuIGJ1dCBkaWRuJ3QgbWF0Y2ggKi8KLSAgICAgICAg aW50IGR1bW15OwotICAgICAgICBjaGFyICogcDsKLSAgICAgICAgZm9yIChwID0gYXRtYnVmOyAq cDsgcCsrKSB7ICAgICAvKiBDaG9wIG9mZiB0cmFpbGluZyBwYXJlbnMgaWYgYW55ICovCi0gICAg ICAgICAgICBpZiAoKnAgPT0gJygnKSB7Ci0gICAgICAgICAgICAgICAgKnAgPSBOVUw7Ci0gICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLyog Q2hvcCBvZmYgbGVhZGluZyAiXFxrIiBvciAiXGsiIG9yICJrIiAqLwotICAgICAgICBwID0gYXRt YnVmOwotICAgICAgICBpZiAoKnAgPT0gQ01EUSkgICAgICAgICAgICAgICAgIC8qIEFsbG93IGZv ciBcXGsuLi4gKi8KLSAgICAgICAgICBwKys7Ci0gICAgICAgIGlmICgqcCA9PSBDTURRICYmICgq KHArMSkgPT0gJ2snIHx8ICoocCsxKSA9PSAnSycpKSB7IC8qIG9yIFxrICovCi0gICAgICAgICAg ICBwICs9IDI7Ci0gICAgICAgIH0gZWxzZSBpZiAoKnAgPT0gJ2snIHx8ICpwID09ICdLJykgeyAv KiBvciBqdXN0IGsgKi8KLSAgICAgICAgICAgIHArKzsKLSAgICAgICAgfQotICAgICAgICB5ID0g bG9va3VwKGt2ZXJicyxwLG5rdmVyYnMsJmR1bW15KTsgLyogTG9vayB1cCB0aGUgcmVzdWx0ICov Ci0gICAgfQotICAgIGlmICh5IDwgMCkgewotICAgICAgICBwcmludGYoIj9ObyBzdWNoIGZ1bmN0 aW9uIC0gXCIlc1wiXG4iLGF0bWJ1Zik7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfQotICAg IHggPSBjbWdicmsoKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbmQgb3V0IGhvdyB1c2Vy IHRlcm1pbmF0ZWQgKi8KLSAgICBpZiAoeCA9PSBMRiB8fCB4ID09IENSKSAgICAgICAgICAgICAv KiBpZiB3aXRoIENSIG9yIExGICovCi0gICAgICBjbWZsZ3MgPSAxOyAgICAgICAgICAgICAgICAg ICAgICAgLyogcmVzdG9yZSBjbWZsZ3MgdG8gc2F5IHNvICovCi0gICAgaWYgKCh4ID0gY21jZm0o KSkgPCAwKSAgICAgICAgICAgICAgLyogQW5kIFRIRU4gY29uZmlybSBzbyBjb21tYW5kIHdpbGwg Ki8KLSAgICAgIHJldHVybih4KTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBnZXQgaW50byBy ZWNhbGwgYnVmZmVyLiAqLwotICAgIHJldHVybihkb2hrdmVyYih5KSk7Ci19Ci0jZW5kaWYgLyog Tk9LVkVSQlMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotY2FzZSBYWEtFUk1JOgotICAgIHJldHVy bihobXNnKCJTeW50YXg6IEtFUk1JVCBbY29tbWFuZC1saW5lLW9wdGlvbnNdXG5cCi0gIExldHMg eW91IGdpdmUgY29tbWFuZC1saW5lIG9wdGlvbnMgYXQgdGhlIHByb21wdCBvciBpbiBhIHNjcmlw dC5cblwKLSAgSEVMUCBPUFRJT05TIGZvciBtb3JlIGluZm8uIikpOwotCi1jYXNlIFhYQkFDSzoK LSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBCQUNLXG4gIFJldHVybnMgdG8geW91ciBwcmV2aW91 cyBkaXJlY3RvcnkuIikpOwotCi1jYXNlIFhYV0hFUkU6Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRh eDogV0hFUkVcbiAgVGVsbHMgd2hlcmUgeW91ciB0cmFuc2ZlcnJlZCBmaWxlcyB3ZW50LiIpKTsK LQotI2lmbmRlZiBOT1hGRVIKLWNhc2UgWFhSRU1WOgotICAgIHJldHVybihobXNnYShobXh4cmVt dikpOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZkZWYgQ0tfS0VSQkVST1MKLWNhc2UgWFhB VVRIOgotICAgIHJldHVybihobXNnYShobXh4YXV0aCkpOwotI2VuZGlmIC8qIENLX0tFUkJFUk9T ICovCi0KLSNpZm5kZWYgTk9IVFRQCi1jYXNlIFhYSFRUUDoKLSAgICByZXR1cm4oaG1zZ2EoaG14 eGh0dHApKTsKLSNlbmRpZiAvKiBOT0hUVFAgKi8KLQotI2lmZGVmIE5FVENNRAotY2FzZSBYWFBJ UEU6Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogUElQRSBbIGNvbW1hbmQgXVxuXAotTWFrZXMg YSBjb25uZWN0aW9uIHRocm91Z2ggdGhlIHByb2dyYW0gd2hvc2UgY29tbWFuZCBsaW5lIGlzIGdp dmVuLiBFeGFtcGxlOlxuXAotXG4gcGlwZSBybG9naW4geHl6Y29ycC5jb20iKSk7Ci0jZW5kaWYg LyogTkVUQ01EICovCi0KLWNhc2UgWFhTVEFUVVM6Ci0gICAgcmV0dXJuKGhtc2coCi0iU1RBVFVT IGlzIHRoZSBzYW1lIGFzIFNIT1cgU1RBVFVTOyBwcmludHMgU1VDQ0VTUyBvciBGQUlMVVJFIGZv ciB0aGVcblwKLXByZXZpb3VzIGNvbW1hbmQuIikpOwotCi0jaWZuZGVmIE5PU1BMCi1jYXNlIFhY QVNTRVI6Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogQVNTRVJUIDxjb25kaXRpb24+XG5cCi1T dWNjZWVkcyBvciBmYWlscyBkZXBlbmRpbmcgb24gPGNvbmRpdGlvbj47IHNlZSBIRUxQIElGIGZv ciA8Y29uZGl0aW9uPnMuIikpOwotCi1jYXNlIFhYRkFJTDoKLSAgICByZXR1cm4oaG1zZygiQWx3 YXlzIGZhaWxzLiIpKTsKLQotY2FzZSBYWFNVQ0M6Ci0gICAgcmV0dXJuKGhtc2coIkFsd2F5cyBz dWNjZWVkcy4iKSk7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmZGVmIENLX0xPR0lOCi1jYXNl IFhYTE9HT1VUOgotICAgIHJldHVybihobXNnKAotIklmIHlvdSBoYXZlZCBsb2dnZWQgaW4gdG8g S2VybWl0IGFzIGFuIEludGVybmV0IEtlcm1pdCBzZXJ2ZXIsIHRoZSBMT0dPVVRcblwKLWNvbW1h bmQsIGdpdmVuIGF0IHRoZSBwcm9tcHQsIGxvZ3MgeW91IG91dCBhbmQgY2xvc2VzIHlvdXIgc2Vz c2lvbi4iKSk7Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLQotY2FzZSBYWFJFU0VUOgotICAgIHJl dHVybihobXNnKCJDbG9zZXMgYWxsIG9wZW4gZmlsZXMgYW5kIGxvZ3MuIikpOwotCi0jaWZuZGVm IE5PQ1NFVFMKLWNhc2UgWFhBU1NPQzoKLSAgICByZXR1cm4oaG1zZ2EoaG14eGFzc29jKSk7Ci0j ZW5kaWYgLyogTk9DU0VUUyAqLwotCi0jaWZuZGVmIE5PU1BMCi1jYXNlIFhYU0hJRlQ6Ci0gICAg cmV0dXJuKGhtc2coIlN5bnRheDogU0hJRlQgWyBuIF1cblwKLSAgU2hpZnRzIFxcJTEuLjkgdmFy aWFibGVzIG4gcGxhY2VzIHRvIHRoZSBsZWZ0OyBkZWZhdWx0IG4gPSAxLiIpKTsKLSNlbmRpZiAv KiBOT1NQTCAqLwotCi0jaWZuZGVmIE5PUFVTSAotY2FzZSBYWE1BTjoKLSNpZmRlZiBVTklYCi0g ICAgcmV0dXJuKGhtc2coIlN5bnRheDogTUFOVUFMIFsgdG9waWMgXVxuXAotICBSdW5zIHRoZSBc Im1hblwiIGNvbW1hbmQgb24gdGhlIGdpdmVuIHRvcGljIChkZWZhdWx0IFwia2VybWl0XCIpLiIp KTsKLSNlbHNlCi0jaWZkZWYgT1MyCi0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogTUFOVUFMXG5c Ci0gIEFjY2Vzc2VzIHRoZSBLZXJtaXQgOTUgSFRNTCBtYW51YWwgdXNpbmcgdGhlIGN1cnJlbnQg YnJvd3Nlci4iKSk7Ci0jZWxzZQotICAgIHJldHVybihobXNnKCJTeW50YXg6IE1BTlVBTCBbIHRv cGljIF1cblwKLSAgUnVucyB0aGUgXCJoZWxwXCIgY29tbWFuZCBvbiB0aGUgZ2l2ZW4gdG9waWMg KGRlZmF1bHQgXCJrZXJtaXRcIikuIikpOwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFVO SVggKi8KLSNlbmRpZiAvKiBOT1BVU0ggKi8KLQotY2FzZSBYWFdJTEQ6Ci0gICAgcmV0dXJuKGht c2dhKGhteHh3aWxkKSk7Ci0KLSNpZmRlZiBMT0NVUwotY2FzZSBYWExPQ1U6Ci0gICAgcmV0dXJu KGhtc2dhKGhteHlsb2N1cykpOwotI2VuZGlmCS8qIExPQ1VTICovCi0KLWNhc2UgWFhQQVQ6Ci0g ICAgcmV0dXJuKGhtc2dhKGhteHhwYXQpKTsKLQotI2lmbmRlZiBOT1hGRVIKLWNhc2UgWFhGQVNU OgotY2FzZSBYWENBVToKLWNhc2UgWFhST0I6Ci0gICAgcmV0dXJuKGhtc2dhKGhteHhmYXN0KSk7 Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZmRlZiBDS1BVUkdFCi1jYXNlIFhYUFVSR0U6Ci0g ICAgcmV0dXJuKGhtc2dhKGhteHhwdXJnZSkpOwotI2Vsc2UKLSNpZmRlZiBWTVMKLWNhc2UgWFhQ VVJHRToKLSAgICByZXR1cm4oaG1zZ2EoaG14eHB1cmdlKSk7Ci0jZW5kaWYgLyogVk1TICovCi0j ZW5kaWYgLyogQ0tQVVJHRSAqLwotCi0jaWZuZGVmIE5PWEZFUgotICBjYXNlIFhYUkFTRzoKLSAg ICByZXR1cm4oaG1zZygiICBSQVNHIGFuZCBSQVNTSUdOIGFyZSBzaG9ydCBmb3JtcyBvZiBSRU1P VEUgQVNTSUdOLiIpKTsKLSAgY2FzZSBYWFJDV0Q6Ci0gICAgcmV0dXJuKGhtc2coIiAgUkNEIGFu ZCBSQ1dEIGFyZSBzaG9ydCBmb3JtcyBvZiBSRU1PVEUgQ0QuIikpOwotICBjYXNlIFhYUkNQWToK LSAgICByZXR1cm4oaG1zZygiICBSQ09QWSBpcyBhIHNob3J0IGZvcm0gb2YgUkVNT1RFIENPUFku IikpOwotICBjYXNlIFhYUkRFTDoKLSAgICByZXR1cm4oaG1zZygiICBSREVMRVRFIGlzIGEgc2hv cnQgZm9ybSBvZiBSRU1PVEUgUkVMRVRFLiIpKTsKLSAgY2FzZSBYWFJESVI6Ci0gICAgcmV0dXJu KGhtc2coIiAgUkRJUkVDVE9SWSBpcyBhIHNob3J0IGZvcm0gb2YgUkVNT1RFIERJUkVDVE9SWS4i KSk7Ci0gIGNhc2UgWFhSWElUOgotICAgIHJldHVybihobXNnKCIgIFJFWElUIGlzIGEgc2hvcnQg Zm9ybSBvZiBSRU1PVEUgRVhJVC4iKSk7Ci0gIGNhc2UgWFhSSExQOgotICAgIHJldHVybihobXNn KCIgIFJIRUxQIGlzIGEgc2hvcnQgZm9ybSBvZiBSRU1PVEUgSEVMUC4iKSk7Ci0gIGNhc2UgWFhS SE9TOgotICAgIHJldHVybihobXNnKCIgIFJIT1NUIGlzIGEgc2hvcnQgZm9ybSBvZiBSRU1PVEUg SE9TVC4iKSk7Ci0gIGNhc2UgWFhSS0VSOgotICAgIHJldHVybihobXNnKCIgIFJLRVJNSVQgaXMg YSBzaG9ydCBmb3JtIG9mIFJFTU9URSBLRVJNSVQuIikpOwotICBjYXNlIFhYUk1LRDoKLSAgICBy ZXR1cm4oaG1zZygiICBSTUtESVIgaXMgYSBzaG9ydCBmb3JtIG9mIFJFTU9URSBNS0RJUi4iKSk7 Ci0gIGNhc2UgWFhSTVNHOgotICAgIHJldHVybihobXNnKCIgIFJNRVNTQUdFIGFuZCBSTVNHIGFy ZSBzaG9ydCBmb3JtcyBvZiBSRU1PVEUgTUVTU0FHRS4iKSk7Ci0gIGNhc2UgWFhSUFJJOgotICAg IHJldHVybihobXNnKCIgIFJQUklOVCBpcyBhIHNob3J0IGZvcm0gb2YgUkVNT1RFIFBSSU5ULiIp KTsKLSAgY2FzZSBYWFJQV0Q6Ci0gICAgcmV0dXJuKGhtc2coIiAgUlBXRCBpcyBhIHNob3J0IGZv cm0gb2YgUkVNT1RFIFBXRC4iKSk7Ci0gIGNhc2UgWFhSUVVFOgotICAgIHJldHVybihobXNnKCIg IFFVRVJZIGFuZCBSUVVFUlkgYXJlIHNob3J0IGZvcm1zIG9mIFJFTU9URSBRVUVSWS4iKSk7Ci0g IGNhc2UgWFhSUkVOOgotICAgIHJldHVybihobXNnKCIgIFJSRU5BTUUgaXMgYSBzaG9ydCBmb3Jt IG9mIFJFTU9URSBSRU5BTUUuIikpOwotICBjYXNlIFhYUlJNRDoKLSAgICByZXR1cm4oaG1zZygi ICBSUk1ESVIgaXMgYSBzaG9ydCBmb3JtIG9mIFJFTU9URSBSTURJUi4iKSk7Ci0gIGNhc2UgWFhS U0VUOgotICAgIHJldHVybihobXNnKCIgIFJTRVQgaXMgYSBzaG9ydCBmb3JtIG9mIFJFTU9URSBT RVQuIikpOwotICBjYXNlIFhYUlNQQToKLSAgICByZXR1cm4oaG1zZygiICBSU1BBQ0UgaXMgYSBz aG9ydCBmb3JtIG9mIFJFTU9URSBTUEFDRS4iKSk7Ci0gIGNhc2UgWFhSVFlQOgotICAgIHJldHVy bihobXNnKCIgIFJUWVBFIGlzIGEgc2hvcnQgZm9ybSBvZiBSRU1PVEUgVFlQRS4iKSk7Ci0gIGNh c2UgWFhSV0hPOgotICAgIHJldHVybihobXNnKCIgIFJXSE8gaXMgYSBzaG9ydCBmb3JtIG9mIFJF TU9URSBXSE8uIikpOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0gIGNhc2UgWFhTQ1JOOgotICAg IHJldHVybihobXNnYShobXh4c2NybikpOwotCi0jaWZkZWYgQ0tFWEVDCi0gIGNhc2UgWFhFWEVD OgotICAgIHJldHVybihobXNnKCJTeW50YXg6IEVYRUMgPGNvbW1hbmQ+IFsgPGFyZzE+IFsgPGFy ZzI+IFsgLi4uIF0gXVxuXAotICBDLUtlcm1pdCBvdmVybGF5cyBpdHNlbGYgd2l0aCB0aGUgZ2l2 ZW4gc3lzdGVtIGNvbW1hbmQgYW5kIHN0YXJ0cyBpdCB3aXRoXG5cCi0gIHRoZSBnaXZlbiBhcmd1 bWVudHMuICBVcG9uIGFueSBlcnJvciwgY29udHJvbCByZXR1cm5zIHRvIEMtS2VybWl0LiIpKTsK LSNlbmRpZiAvKiBDS0VYRUMgKi8KLQotI2lmbmRlZiBOT1NQTAotICBjYXNlIFhYVFJBQ0U6Ci0g ICAgcmV0dXJuKGhtc2coCi0iU3ludGF4OiBUUkFDRSB7IC9PTiwgL09GRiB9IHsgQVNTSUdOTUVO VFMsIENPTU1BTkQtTEVWRUwsIEFMTCB9XG5cCi0gIFR1cm5zIHRyYWNpbmcgb2YgdGhlIGdpdmVu IG9iamVjdCBvbiBvciBvZmYuIikpOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZmRlZiBDS19Q RVJNUwotI2lmZGVmIFVOSVgKLSAgY2FzZSBYWENITU9EOgotICAgIHJldHVybihobXNnYShobXh4 Y2htb2QpKTsKLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogQ0tfUEVSTVMgKi8KLQotI2lm ZGVmIENLUk9PVAotICBjYXNlIFhYQ0hSVDoKLSAgICByZXR1cm4oaG1zZ2EoaG14eGNocm9vdCkp OwotI2VuZGlmIC8qIENLUk9PVCAqLwotCi0jaWZuZGVmIE5PU1BMCi0gIGNhc2UgWFhQUk9NUDoK LSAgICByZXR1cm4oaG1zZ2EoaG14eHByb21wdCkpOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSAg Y2FzZSBYWEdSRVA6Ci0gICAgcmV0dXJuKGhtc2dhKGhteHhncmVwKSk7Ci0KLSNpZm5kZWYgTk9T RVhQCi0jaWZuZGVmIE5PU1BMCi0gIGNhc2UgWFhTRVhQOgotICAgIHJldHVybihobXNnYShobXh4 c2V4cCkpOwotI2VuZGlmIC8qIE5PU1BMICovCi0jZW5kaWYgLyogTk9TRVhQICovCi0KLSNpZmRl ZiBDS0xFQVJOCi0gIGNhc2UgWFhMRUFSTjoKLSAgICByZXR1cm4oaG1zZ2EoaG14eGxlYXJuKSk7 Ci0jZW5kaWYgLyogQ0tMRUFSTiAqLwotCi0jaWZkZWYgQU5ZU1NICi0gIGNhc2UgWFhTU0g6Ci0g ICAgcmV0dXJuKGhtc2dhKGhteHhzc2gpKTsKLSNlbmRpZiAvKiBBTllTU0ggKi8KLQotI2lmZGVm IFRDUFNPQ0tFVAotICBjYXNlIFhYRklSRVc6Ci0gICAgcmV0dXJuKGhtc2dhKGhteHhmaXJldykp OwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotCi0jaWZkZWYgTkVXRlRQCi0gIGNhc2UgWFhVU0VS OgotICAgIHJldHVybihobXNnKCIgRXF1aXZhbGVudCB0byBGVFAgVVNFUi4iKSk7Ci0gIGNhc2Ug WFhBQ0NUOgotICAgIHJldHVybihobXNnKCIgRXF1aXZhbGVudCB0byBGVFAgQUNDT1VOVC4iKSk7 Ci0jZW5kaWYgLyogTkVXRlRQICovCi0KLSAgY2FzZSBYWE9SSUU6Ci0gICAgcmV0dXJuKGhtc2co IiBTaG93cyB0aGUgZGlyZWN0b3JpZXMgaW1wb3J0YW50IHRvIEtlcm1pdC4iKSk7Ci0KLSAgY2Fz ZSBYWENPTlQ6Ci0gICAgcmV0dXJuKGhtc2coIiBJbiBhIEZPUiBvciBXSElMRSBsb29wOiBjb250 aW51ZSB0aGUgbG9vcC5cblwKLSBBdCB0aGUgcHJvbXB0OiBjb250aW51ZSBhIHNjcmlwdCB0aGF0 IGhhcyBcInNoZWxsZWQgb3V0XCIgdG8gdGhlIHByb21wdC4iKSk7Ci0KLSAgY2FzZSBYWFJFRE86 Ci0gICAgcmV0dXJuKGhtc2coIiBTeW50YXg6IFJFRE8geHh4IChvcikgXnh4eFxuXAotIFJlLWV4 ZWN1dGVzIHRoZSBtb3N0IHJlY2VudCBjb21tYW5kIHN0YXJ0aW5nIHdpdGggeHh4LiIpKTsKLQot I2lmZGVmIFVOSVgKLSNpZm5kZWYgTk9QVVRFTlYKLSAgY2FzZSBYWFBVVEU6Ci0gICAgcmV0dXJu KGhtc2dhKGhteHhwdXRlbnYpKTsKLSNlbmRpZgkvKiBOT1BVVEVOViAqLwotI2VuZGlmCS8qIFVO SVggKi8KLQotICBjYXNlIFhYTk9UQVY6Ci0gICAgcmV0dXJuKGhtc2coIiBUaGlzIGNvbW1hbmQg aXMgbm90IGNvbmZpZ3VyZWQgaW4gdGhpcyB2ZXJzaW9uIG9mIEtlcm1pdC4iKSk7Ci0KLWRlZmF1 bHQ6IHsKLSAgICAgICAgY2hhciAqczsKLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSBy ZXR1cm4oeCk7Ci0gICAgICAgIHMgPSBjbWRidWYgKyAoaW50KXN0cmxlbihjbWRidWYpIC0xOwot ICAgICAgICB3aGlsZSAocyA+PSBjbWRidWYgJiYgKnMgPT0gU1ApCi0gICAgICAgICAgKnMtLSA9 IE5VTDsKLSAgICAgICAgd2hpbGUgKHMgPj0gY21kYnVmICYmICpzICE9IFNQKQotICAgICAgICAg IHMtLTsKLSAgICAgICAgd2hpbGUgKCpzID09IFNQKSBzKys7Ci0gICAgICAgIHByaW50ZigiU29y cnksIGhlbHAgbm90IGF2YWlsYWJsZSBmb3IgXCIlc1wiXG4iLHMpOwotICAgICAgICBicmVhazsK LSAgICAgIH0KLSAgICB9IC8qIHN3aXRjaCAqLwotI2VuZGlmIC8qIE5PSEVMUCAqLwotCi0gICAg cmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLX0KLQotLyogIEggTSBTIEcgIC0tICBHZXQgY29uZmlybWF0 aW9uLCB0aGVuIHByaW50IHRoZSBnaXZlbiBtZXNzYWdlICAqLwotCi1pbnQKLWhtc2cocykgY2hh ciAqczsgewotICAgIGludCB4OwotICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgp OwotICAgIHByaW50ZigiXG4lc1xuXG4iLHMpOwotICAgIHJldHVybigwKTsKLX0KLQotI2lmZGVm IE5PSEVMUAotCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJp bnQgYW4gYXJyYXkgb2YgbGluZXMsICovCi1obXNnYShzKSBjaGFyICpzW107IHsgICAgICAgICAg ICAgICAgICAgLyogY2hlYXAgdmVyc2lvbi4gKi8KLSAgICBpbnQgaTsKLSAgICBpZiAoKGkgPSBj bWNmbSgpKSA8IDApIHJldHVybihpKTsKLSAgICBwcmludGYoIlxuIik7ICAgICAgICAgICAgICAg ICAgICAgICAvKiBTdGFydCBvZmYgd2l0aCBhIGJsYW5rIGxpbmUgKi8KLSAgICBmb3IgKGkgPSAw OyAqc1tpXTsgaSsrKSB7ICAgICAgICAgICAvKiBQcmludCBlYWNoIGxpbmUuICovCi0gICAgICAg IHByaW50ZigiJXNcbiIsc1tpXSk7Ci0gICAgfQotICAgIHByaW50ZigiXG4iKTsKLSAgICByZXR1 cm4oMCk7Ci19Ci0KLSNlbHNlIC8qIE5PSEVMUCBub3QgZGVmaW5lZC4uLiAqLwotCi1pbnQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJpbnQgYW4gYXJyYXkgb2YgbGlu ZXMsICovCi1obXNnYShzKSBjaGFyICpzW107IHsgICAgICAgICAgICAgICAgICAgLyogcGF1c2lu ZyBhdCBlbmQgb2YgZWFjaCBzY3JlZW4uICovCi0gICAgZXh0ZXJuIGludCBobXRvcGxpbmU7ICAg ICAgICAgICAgICAgLyogKFRoaXMgc2hvdWxkIGJlIGEgcGFyYW1ldGVyLi4uKSAqLwotICAgIGlu dCB4LCB5LCBpLCBqLCBrLCBuOwotICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgp OwotCi0jaWZkZWYgQ0tfVFRHV1NJWgotI2lmZGVmIE9TMgotICAgIHR0Z2N3c3ooKTsKLSNlbHNl IC8qIE9TMiAqLwotICAgIC8qIENoZWNrIHdoZXRoZXIgd2luZG93IHNpemUgY2hhbmdlZCAqLwot ICAgIGlmICh0dGd3c2l6KCkgPiAwKSB7Ci0gICAgICAgIGlmICh0dF9yb3dzID4gMCAmJiB0dF9j b2xzID4gMCkgewotICAgICAgICAgICAgY21kX3Jvd3MgPSB0dF9yb3dzOwotICAgICAgICAgICAg Y21kX2NvbHMgPSB0dF9jb2xzOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIE9TMiAqLwot I2VuZGlmIC8qIENLX1RUR1dTSVogKi8KLQotICAgIHByaW50ZigiXG4iKTsgICAgICAgICAgICAg ICAgICAgICAgIC8qIFN0YXJ0IG9mZiB3aXRoIGEgYmxhbmsgbGluZSAqLwotICAgIG4gPSAoaG10 b3BsaW5lID4gMCkgPyBobXRvcGxpbmUgOiAxOyAvKiBMaW5lIGNvdW50ZXIgKi8KLSAgICBmb3Ig KGkgPSAwOyAqc1tpXTsgaSsrKSB7Ci0gICAgICAgIHByaW50ZigiJXNcbiIsc1tpXSk7ICAgICAg ICAgICAgLyogUHJpbnQgYSBsaW5lLiAqLwotICAgICAgICB5ID0gKGludClzdHJsZW4oc1tpXSk7 Ci0gICAgICAgIGsgPSAxOwotICAgICAgICBmb3IgKGogPSAwOyBqIDwgeTsgaisrKSAgICAgICAg IC8qIFNlZSBob3cgbWFueSBuZXdsaW5lcyB3ZXJlICovCi0gICAgICAgICAgaWYgKHNbaV1bal0g PT0gJ1xuJykgaysrOyAgICAgLyogaW4gdGhlIHN0cmluZy4uLiAqLwotICAgICAgICBuICs9IGs7 Ci0gICAgICAgIGlmIChuID4gKGNtZF9yb3dzIC0gMykgJiYgKnNbaSsxXSkgLyogQWZ0ZXIgYSBz Y3JlZW5mdWwsIGdpdmUgdGhlbSAqLwotICAgICAgICAgIGlmICghYXNrbW9yZSgpKSByZXR1cm4o MCk7ICAgIC8qIGEgIm1vcmU/IiBwcm9tcHQuICovCi0gICAgICAgICAgZWxzZSBuID0gMDsKLSAg ICB9Ci0gICAgcHJpbnRmKCJcbiIpOwotICAgIHJldHVybigwKTsKLX0KLQotI2lmbmRlZiBOT0ZS SUxMUwotc3RhdGljIGNoYXIgKiBzdXBwb3J0dGV4dFtdID0gewotCi0iTGl2ZSB0ZWNobmljYWwg c3VwcG9ydCBmb3IgS2VybWl0IHNvZnR3YXJlIGlzIG5vIGxvbmdlciBhdmFpbGFibGUiLAotImZy b20gQ29sdW1iaWEgVW5pdmVyc2l0eSwgYXMgaXQgd2FzIGZyb20gbWlkLTE5ODEgdW50aWwgbWlk LTIwMTEgd2hlbiIsCi0KLSNpZmRlZiBPUzIKLQotInRoZSBLZXJtaXQgUHJvamVjdCB3YXMgY2Fu Y2VsbGVkLiAgQmVnaW5uaW5nIHdpdGggdmVyc2lvbiAzLjAsIEtlcm1pdCA5NSIsCi0KLSNlbHNl Ci0KLSJ0aGUgS2VybWl0IFByb2plY3Qgd2FzIGNhbmNlbGxlZC4gIEJlZ2lubmluZyB3aXRoIHZl cnNpb24gOS4wLCBDLUtlcm1pdCIsCi0KLSNlbmRpZgkvKiBPUzIgKi8KLQotImlzIE9wZW4gU291 cmNlIHNvZnR3YXJlLiAgVGhlIEtlcm1pdCB3ZWJzaXRlIGlzIHN1cHBvc2VkIHJlbWFpbiBvcGVu IiwKLSJpbmRlZmluaXRlbHkgYXQ6IiwKLSIgIiwKLSIgIGh0dHA6Ly9rZXJtaXQuY29sdW1iaWEu ZWR1LyIsCi0iICIsCi0KLSNpZmRlZiBPUzIKLQotIlRoZSBLZXJtaXQgOTUgcGFnZSBpcyBoZXJl OiIsCi0iICIsCi0iICBodHRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rOTUuaHRtbCIsCi0iICIs Ci0iVGhlIEtlcm1pdCA5NSBtYW51YWwgaXMgaGVyZToiLAotIiAiLAotIiAgaHR0cDovL2tlcm1p dC5jb2x1bWJpYS5lZHUvazk1bWFudWFsLyIsCi0iICIsCi0iVGhlIEtlcm1pdCA5NSBGcmVxdWVu dGx5IEFza2VkIFF1ZXN0aW9ucyBwYWdlIGlzIGhlcmU6IiwKLSIgIiwKLSIgIGh0dHA6Ly9rZXJt aXQuY29sdW1iaWEuZWR1L2s5NWZhcS5odG1sIiwKLSIgIiwKLSJhbmQgbWFueSBvdGhlciByZXNv dXJjZXMgYXJlIGxpc3RlZCBvbiB0aGUgS2VybWl0IDk1IGhvbWUgcGFnZS4iLAotIiAiLAotCi0j ZWxzZQotCi0iVGhlIEMtS2VybWl0IGhvbWUgcGFnZSBpcyBoZXJlOiIsCi0iICIsCi0iICBodHRw Oi8va2VybWl0LmNvbHVtYmlhLmVkdS9ja2VybWl0Lmh0bWwiLAotIiAiLAotIlRoZSBkb2N1bWVu dGF0aW9uIGZvciBDLUtlcm1pdCBpcyBsaXN0ZWQgaGVyZToiLAotIiAiLAotIiAgaHR0cDovL2tl cm1pdC5jb2x1bWJpYS5lZHUvY2tlcm1pdC5odG1sI2RvYyIsCi0iICIsCi0iVGhlIEMtS2VybWl0 IEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zIHBhZ2UgaXMgaGVyZToiLAotIiAiLAotIiAgaHR0 cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUvY2tmYXEuaHRtbCIsCi0iICIsCi0iYW5kIG1hbnkgb3Ro ZXIgcmVzb3VyY2VzIGFyZSBsaXN0ZWQgb24gdGhlIEMtS2VybWl0IGhvbWUgcGFnZS4iLAotIiAi LAotCi0jZW5kaWYJLyogT1MyICovCi0KLSJUaW1lIHdpbGwgdGVsbCB3aGF0IHNvcnQgb2YgZGV2 ZWxvcG1lbnQgYW5kIHN1cHBvcnQgc3RydWN0dXJlcyBhcmlzZSIsCi0iaW4gdGhlIE9wZW4gU291 cmNlIGNvbW11bml0eS4iLAotIiIKLX07Ci0KLS8qIERvIHRoZSBCVUcgY29tbWFuZCAqLwotaW50 Ci1kb2J1ZygpIHsKLSAgICByZXR1cm4oaG1zZ2Eoc3VwcG9ydHRleHQpKTsKLX0KLSNlbmRpZiAv KiBOT0ZSSUxMUyAqLwotCi0jaWZuZGVmIE5PWE1JVAotc3RhdGljIGNoYXIgKmhzZXR4bWl0W10g PSB7Ci0iU3ludGF4OiBTRVQgVFJBTlNNSVQgcGFyYW1ldGVyIHZhbHVlIiwKLSIgIiwKLSJDb250 cm9scyB0aGUgYmVoYXZpb3Igb2YgdGhlIFRSQU5TTUlUIGNvbW1hbmQgKHNlZSBIRUxQIFRSQU5T TUlUKToiLAotIiAiLAotIlNFVCBUUkFOU01JVCBFQ0hPIHsgT04sIE9GRiB9IiwKLSIgIFdoZXRo ZXIgdG8gZWNobyB0ZXh0IHRvIHlvdXIgc2NyZWVuIGFzIGl0IGlzIGJlaW5nIHRyYW5zbWl0dGVk LiIsCi0iICIsCi0iU0VUIFRSQU5TTUlUIEVPRiB0ZXh0IiwKLSIgIFRleHQgdG8gc2VuZCBhZnRl ciBlbmQgb2YgZmlsZSBpcyByZWFjaGVkLCBlLmcuIFxcNCBmb3IgQ3RybC1EIiwKLSIgIiwKLSJT RVQgVFJBTlNNSVQgRklMTCBudW1iZXIiLAotIiAgQVNDSUkgdmFsdWUgb2YgYSBjaGFyYWN0ZXIg dG8gaW5zZXJ0IGludG8gYmxhbmsgbGluZXMsIDAgZm9yIG5vbmUuIiwKLSIgIEFwcGxpZXMgb25s eSB0byB0ZXh0IG1vZGUuICAwIGJ5IGRlZmF1bHQuIiwKLSIgIiwKLSJTRVQgVFJBTlNNSVQgTElO RUZFRUQgeyBPTiwgT0ZGIH0iLAotIiAgVHJhbnNtaXQgTGluZWZlZWQgYXMgd2VsbCBhcyBDYXJy aWFnZSBSZXR1cm4gKENSKSBhdCB0aGUgZW5kIG9mIGVhY2ggbGluZS4iLAotIiAgTm9ybWFsbHks IG9ubHkgQ1IgIGlzIHNlbnQuIiwKLSIgIiwKLSJTRVQgVFJBTlNNSVQgTE9DS0lORy1TSElGVCB7 IE9OLCBPRkYgfSIsCi0iICBXaGV0aGVyIHRvIHVzZSBTTy9TSSBmb3IgdHJhbnNtaXR0aW5nIDgt Yml0IGRhdGEgd2hlbiBQQVJJVFkgaXMgbm90IE5PTkUuIiwKLSIgIiwKLSJTRVQgVFJBTlNNSVQg UEFVU0UgbnVtYmVyIiwKLSIgIEhvdyBtYW55IG1pbGxpc2Vjb25kcyB0byBwYXVzZSBhZnRlciB0 cmFuc21pdHRpbmcgZWFjaCBsaW5lICh0ZXh0IG1vZGUpLCIsCi0iICBvciBlYWNoIGNoYXJhY3Rl ciAoYmluYXJ5IG1vZGUpLiIsCi0iICIsCi0iU0VUIFRSQU5TTUlUIFBST01QVCBudW1iZXIiLAot IiAgQVNDSUkgdmFsdWUgb2YgY2hhcmFjdGVyIHRvIGxvb2sgZm9yIGZyb20gaG9zdCBiZWZvcmUg c2VuZGluZyBuZXh0IGxpbmUiLAotIiAgd2hlbiBUUkFOU01JVHRpbmcgaW4gdGV4dCBtb2RlOyBu b3JtYWxseSAxMCAoTGluZWZlZWQpLiAgMCBtZWFucyBub25lOyIsCi0iICBkb24ndCB3YWl0IGZv ciBhIHByb21wdC4iLAotIiAiLAotIlNFVCBUUkFOU01JVCBUSU1FT1VUIG51bWJlciIsCi0iICBO dW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGZvciBlYWNoIGNoYXJhY3RlciB0byBlY2hvIHdoZW4g VFJBTlNNSVQgRUNITyIsCi0iICBpcyBPTiBvciBUUkFOU01JVCBQUk9NUFQgaXMgbm90IDAuICBJ ZiAwIGlzIHNwZWNpZmllZCwgdGhpcyBtZWFucyB3YWl0IiwKLSIgIGluZGVmaW5pdGVseSBmb3Ig ZWFjaCBlY2hvLiIsCi0iICIsCi0iU3lub255bTogU0VUIFhNSVQuICBTSE9XIFRSQU5TTUlUIGRp c3BsYXlzIGN1cnJlbnQgc2V0dGluZ3MuIiwKLSIiIH07Ci0jZW5kaWYgLyogTk9YTUlUICovCi0K LXN0YXRpYyBjaGFyICpoc2V0YmtnW10gPSB7Ci0iU3ludGF4OiBTRVQgQkFDS0dST1VORCB7IE9G RiwgT04gfSIsCi0iICIsCi0iICBTRVQgQkFDS0dST1VORCBPRkYgZm9yY2VzIHByb21wdHMgYW5k IG1lc3NhZ2VzIHRvIGFwcGVhciBvbiB5b3VyIHNjcmVlbiIsCi0iICBldmVuIHRob3VnaCBLZXJt aXQgdGhpbmtzIGl0IGlzIHJ1bm5pbmcgaW4gdGhlIGJhY2tncm91bmQuIiwKLSIiIH07Ci0KLSNp ZmRlZiBEWU5BTUlDCi1zdGF0aWMgY2hhciAqaHNldGJ1ZltdID0gewotIlN5bnRheDogU0VUIEJV RkZFUlMgbjEgWyBuMiBdIiwKLSIgIiwKLSIgIENoYW5nZXMgdGhlIG92ZXJhbGwgYW1vdW50IG9m IG1lbW9yeSBhbGxvY2F0ZWQgZm9yIFNFTkQgYW5kIFJFQ0VJVkUgcGFja2V0IiwKLSIgIGJ1ZmZl cnMsIHJlc3BlY3RpdmVseS4gIEJpZ2dlciBudW1iZXJzIGxldCB5b3UgaGF2ZSBsb25nZXIgcGFj a2V0cyBhbmQiLAotIiAgbW9yZSB3aW5kb3cgc2xvdHMuICBJZiBuMiBpcyBvbWl0dGVkLCB0aGUg c2FtZSB2YWx1ZSBhcyBuMSBpcyB1c2VkLiIsCi0jaWZkZWYgQklHQlVGT0sKLSIgIiwKLSIgIE5P VEU6IFRoaXMgY29tbWFuZCBpcyBub3QgbmVlZGVkIGluIHRoaXMgdmVyc2lvbiBvZiBLZXJtaXQs IHdoaWNoIGlzIiwKLSIgIGFscmVhZHkgY29uZmlndXJlZCBmb3IgbWF4aW11bS1zaXplIHBhY2tl dCBidWZmZXJzLiIsCi0jZW5kaWYgLyogQklHQlVGT0sgKi8KLSIiIH07Ci0jZW5kaWYgLyogRFlO QU1JQyAqLwotCi1zdGF0aWMgY2hhciAqaHNldGNtZFtdID0gewotIlN5bnRheDogU0VUIENPTU1B TkQgcGFyYW1ldGVyIHZhbHVlIiwKLSIgIiwKLQotI2lmZGVmIENLX0FVVE9ETAotIlNFVCBDT01N QU5EIEFVVE9ET1dOTE9BRCB7IE9OLCBPRkYgfSIsCi0iICBFbmFibGVzL0Rpc2FibGVzIGF1dG9t YXRpYyByZWNvZ25pdGlvbiBvZiBLZXJtaXQgcGFja2V0cyB3aGlsZSBpbiIsCi0iICBjb21tYW5k IG1vZGUuICBPTiBieSBkZWZhdWx0LiIsCi0iICIsCi0jZW5kaWYgLyogQ0tfQVVUT0RMICovCi0K LSJTRVQgQ09NTUFORCBCWVRFU0laRSB7IDcsIDggfSIsCi0iICBJbmZvcm1zIEtlcm1pdCBvZiB0 aGUgYnl0ZXNpemUgb2YgdGhlIGNvbW11bmljYXRpb24gcGF0aCBiZXR3ZWVuIGl0c2VsZiIsCi0i ICBhbmQgeW91ciBrZXlib2FyZCBhbmQgc2NyZWVuLiAgOCBpcyBhc3N1bWVkLiAgU0VUIENPTU1B TkQgQllURSA3IG9ubHkgaWYiLAotIiAgOC1iaXQgY2hhcmFjdGVycyBjYW5ub3QgcGFzcy4iLAot IiAiLAotCi0jaWZkZWYgT1MyCi0iU0VUIENPTU1BTkQgQ09MT1IgPGZvcmVncm91bmQtY29sb3I+ IDxiYWNrZ3JvdW5kLWNvbG9yPiIsCi0iICBMZXRzIHlvdSBjaG9vc2UgY29sb3JzIGZvciBDb21t YW5kIHNjcmVlbi4gIFVzZSA/IGluIHRoZSBjb2xvciBmaWVsZHMgdG8iLAotIiAgdG8gZ2V0IGxp c3RzIG9mIGF2YWlsYWJsZSBjb2xvcnMuIiwKLSIgIiwKLSJTRVQgQ09NTUFORCBDVVJTT1ItUE9T SVRJT04gPHJvdz4gPGNvbHVtbj4iLAotIiAgTW92ZXMgdGhlIGNvbW1hbmQtc2NyZWVuIGN1cnNv ciB0byB0aGUgZ2l2ZW4gcG9zaXRpb24gKDEtYmFzZWQpLiAgVGhpcyIsCi0iICBjb21tYW5kIHNo b3VsZCBiZSB1c2VkIGluIHNjcmlwdHMgaW5zdGVhZCBvZiByZWx5aW5nIG9uIEFOU0kuU1lTIGVz Y2FwZSIsCi0iICBzZXF1ZW5jZXMuIiwKLSIgIiwKLSNlbmRpZiAvKiBPUzIgKi8KLQotIlNFVCBD T01NQU5EIEVSUk9SIHsgMCwxLDIsMyB9IiwKLSIgIFNldHMgdGhlIHZlcmJvc2l0eSBsZXZlbCBv ZiBjb21tYW5kIGVycm9yIG1lc3NhZ2VzOyB0aGUgaGlnaGVyIHRoZSBudW1iZXIsIiwKLSIgIHRo ZSBtb3JlIHZlcmJvc2UgdGhlIG1lc3NhZ2UuICBUaGUgZGVmYXVsdCBpcyAxLiAgSGlnaGVyIHZh bHVlcyBhcmUiLAotIiAgdXNlZnVsIG9ubHkgZm9yIGRlYnVnZ2luZyBzY3JpcHRzLiIsCi0iICIs Ci0KLSNpZmRlZiBPUzIKLSNpZmRlZiBOVAotIlNFVCBDT01NQU5EIEhFSUdIVCA8bnVtYmVyPiIs Ci0iICBDaGFuZ2VzIHRoZSBudW1iZXIgb2Ygcm93cyAobGluZXMpIGluIHlvdXIgY29tbWFuZCBz Y3JlZW4sIG5vdCIsCi0iICBjb3VudGluZyB0aGUgc3RhdHVzIGxpbmUuICBSZWNvbW1lbmRlZCB2 YWx1ZXMgYXJlIDI0LCA0MiwgYW5kIDQ5IChvciAyNSwiLAotIiAgNDMsIGFuZCA1MCBpZiBTRVQg Q09NTUFORCBTVEFUVVNMSU5FIGlzIE9GRi4pIiwKLSNlbHNlCi0iU0VUIENPTU1BTkQgSEVJR0hU IDxudW1iZXI+IgotIiAgQ2hhbmdlcyB0aGUgbnVtYmVyIG9mIHJvd3MgKGxpbmVzKSBpbiB5b3Vy IGNvbW1hbmQgc2NyZWVuLCBub3QiLAotIiAgY291bnRpbmcgdGhlIHN0YXR1cyBsaW5lLiAgV2lu ZG93ZWQgc2Vzc2lvbnMgY2FuIHVzZSBhbnkgdmFsdWUgZnJvbSA4IHRvIiwKLSIgIDEwMS4gIEZ1 bGxzY3JlZW4gc2Vzc2lvbnMgYXJlIGxpbWl0ZWQgdG8gMjQsIDQyLCA0OSwgb3IgNTkuICBOb3Qg YWxsIgotIiAgaGVpZ2h0cyBhcmUgc3VwcG9ydGVkIGJ5IGFsbCB2aWRlbyBhZGFwdGVycy4iLAot I2VuZGlmIC8qIE5UICovCi0jZWxzZSAgLyogT1MyICovCi0iU0VUIENPTU1BTkQgSEVJR0hUIDxu dW1iZXI+IiwKLSIgIEluZm9ybXMgS2VybWl0IG9mIHRoZSBudW1iZXIgb2Ygcm93cyBpbiB5b3Vy IGNvbW1hbmQgc2NyZWVuIGZvciB0aGUiLAotIiAgcHVycG9zZXMgb2YgTW9yZT8tcHJvbXB0aW5n LiIsCi0jZW5kaWYgLyogT1MyICovCi0iICIsCi0iU0VUIENPTU1BTkQgV0lEVEggPG51bWJlcj4i LAotIiAgSW5mb3JtcyBLZXJtaXQgb2YgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFjcm9zcyB5 b3VyIHNjcmVlbiBmb3IiLAotIiAgcHVycG9zZXMgb2Ygc2NyZWVuIGZvcm1hdHRpbmcuIiwKLSIg IiwKLSJTRVQgQ09NTUFORCBNT1JFLVBST01QVElORyB7IE9OLCBPRkYgfSIsCi0iICBPTiAodGhl IGRlZmF1bHQpIGVuYWJsZXMgTW9yZT8tcHJvbXB0aW5nIHdoZW4gS2VybWl0IG5lZWRzIHRvIGRp c3BsYXkiLAotIiAgdGV4dCB0aGF0IGRvZXMgbm90IGZpdCB2ZXJ0aWNhbGx5IG9uIHlvdXIgc2Ny ZWVuLiAgT0ZGIGFsbG93cyB0aGUgdGV4dCB0byIsCi0iICBzY3JvbGwgYnkgd2l0aG91dCBpbnRl cnZlbnRpb24uICBJZiB5b3VyIGNvbW1hbmQgd2luZG93IGhhcyBzY3JvbGwgYmFycywiLAotIiAg eW91IG1pZ2h0IHByZWZlciBPRkYuIiwKLSIgIiwKLQotI2lmZGVmIENLX1JFQ0FMTAotIlNFVCBD T01NQU5EIFJFQ0FMTC1CVUZGRVItU0laRSBudW1iZXIiLAotIiAgSG93IGJpZyB5b3Ugd2FudCBL ZXJtaXQncyBjb21tYW5kIHJlY2FsbCBidWZmZXIgdG8gYmUuICBCeSBkZWZhdWx0LCBpdCIsCi0i ICBob2xkcyAxMCBjb21tYW5kcy4gIFlvdSBjYW4gbWFrZSBpdCBhbnkgc2l6ZSB5b3UgbGlrZSwg c3ViamVjdCB0byBtZW1vcnkiLAotIiAgY29uc3RyYWludHMgb2YgdGhlIGNvbXB1dGVyLiAgQSBz aXplIG9mIDAgZGlzYWJsZXMgY29tbWFuZCByZWNhbGwuIiwKLSIgIFdoZW5ldmVyIHlvdSBnaXZl IHRoaXMgY29tbWFuZCwgcHJldmlvdXMgY29tbWFuZCBoaXN0b3J5IGlzIGxvc3QuIiwKLSIgIiwK LSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLQotIlNFVCBDT01NQU5EIFFVT1RJTkcgeyBPTiwgT0ZG IH0iLAotIiAgV2hldGhlciB0byB0cmVhdCBiYWNrc2xhc2ggYW5kIHF1ZXN0aW9uIG1hcmsgYXMg c3BlY2lhbCBjaGFyYWN0ZXJzIChPTiksIiwKLSIgIG9yIGFzIG9yZGluYXJ5IGRhdGEgY2hhcmFj dGVycyAoT0ZGKSBpbiBjb21tYW5kcy4gIE9OIGJ5IGRlZmF1bHQuIiwKLSIgIiwKLSNpZmRlZiBE T1VCTEVRVU9USU5HCi0iU0VUIENPTU1BTkQgRE9VQkxFUVVPVElORyB7IE9OLCBPRkYgfSIsCi0i ICBXaGV0aGVyIHRvIGFsbG93IGRvdWJsZXF1b3RlcyAoXCIpIHRvIGJlIHVzZWQgdG8gZW5jbG9z ZSBmaWVsZHMsIiwKLSIgIGZpbGVuYW1lcywgZGlyZWN0b3J5IG5hbWVzLCBhbmQgbWFjcm8gYXJn dW1lbnRzIHRoYXQgbWlnaHQgY29udGFpbiIsCi0iICBzcGFjZXMuICBPTiBieSBkZWZhdWx0OyB1 c2UgT0ZGIHRvIGZvcmNlIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciIsCi0iICB2ZXJzaW9ucy4i LAotIiAiLAotI2VuZGlmIC8qIERPVUJMRVFVT1RJTkcgKi8KLQotI2lmZGVmIENLX1JFQ0FMTAot IlNFVCBDT01NQU5EIFJFVFJZIHsgT04sIE9GRiB9IiwKLSIgIFdoZXRoZXIgdG8gcmVwcm9tcHQg eW91IHdpdGggdGhlIGNvcnJlY3QgYnV0IGluY29tcGxldGUgcG9ydGlvbiBvZiBhIiwKLSIgIHN5 bnRhY3RpY2FsbHkgaW5jb3JyZWN0IGNvbW1hbmQuICBPTiBieSBkZWZhdWx0LiIsCi0iICIsCi0j ZW5kaWYgLyogQ0tfUkVDQUxMICovCi0KLSNpZmRlZiBPUzIKLSJTRVQgQ09NTUFORCBTQ1JPTExC QUNLIDxsaW5lcz4iLAotIiAgU2V0cyBzaXplIG9mIHZpcnR1YWwgQ29tbWFuZCBzY3JlZW4gYnVm ZmVyIHRvIHRoZSBnaXZlbiBudW1iZXIgb2YgbGluZXMsIiwKLSIgIHdoaWNoIGluY2x1ZGVzIHRo ZSBhY3RpdmUgQ29tbWFuZCBzY3JlZW4uICBUaGUgbWluaW11bSBpcyAyNTYuICBUaGUgbWF4IiwK LSIgIGlzIDIgbWlsbGlvbi4gIFRoZSBkZWZhdWx0IGlzIDUxMi4iLAotIiAiLAotIlNFVCBDT01N QU5EIFNUQVRVU0xJTkUgeyBPTiwgT0ZGIH0iLAotIiAgT04gKGRlZmF1bHQpIGVuYWJsZXMgdGhl IEtlcm1pdCBzdGF0dXMgbGluZSBpbiB0aGUgY29tbWFuZCBzY3JlZW4uIiwKLSIgIE9GRiByZW1v dmVzIGl0LCBtYWtpbmcgdGhlIGxpbmUgYXZhaWxhYmxlIGZvciB1c2UgYnkgdGhlIGhvc3QuIiwK LSIgIiwKLSNlbmRpZiAvKiBPUzIgKi8KLQotIlVzZSBTSE9XIENPTU1BTkQgdG8gZGlzcGxheSB0 aGVzZSBzZXR0aW5ncy4iLAotIiIgfTsKLQotI2lmbmRlZiBOT0xPQ0FMCi1zdGF0aWMgY2hhciAq aHNldGNhcltdID0gewotIlN5bnRheDogU0VUIENBUlJJRVItV0FUQ0ggeyBBVVRPLCBPRkYsIE9O IH0iLAotIiAiLAotIiAgQXR0ZW1wdHMgdG8gY29udHJvbCB0cmVhdG1lbnQgb2YgY2FycmllciAo dGhlIERhdGEgQ2FycmllciBEZXRlY3Qgc2lnbmFsKSIsCi0iICBvbiBzZXJpYWwgY29tbXVuaWNh dGlvbiAoU0VUIExJTkUgb3IgU0VUIFBPUlQpIGRldmljZXMuICBPTiBtZWFucyB0aGF0IiwKLSIg IGNhcnJpZXIgaXMgcmVxdWlyZWQgYXQgYWxsIHRpbWVzLiAgT0ZGIG1lYW5zIGNhcnJpZXIgaXMg bmV2ZXIgcmVxdWlyZWQuIiwKLSIgIEFVVE8gKHRoZSBkZWZhdWx0KSBtZWFucyBjYXJyaWVyIGlz IHJlcXVpcmVkIGF0IGFsbCB0aW1lcyBleGNlcHQgZHVyaW5nIiwKLSIgIHRoZSBESUFMIGNvbW1h bmQuICBDb3JyZWN0IG9wZXJhdGlvbiBvZiBjYXJyaWVyLXdhdGNoIGRlcGVuZHMgb24gdGhlIiwK LSIgIGNhcGFiaWxpdGllcyBvZiB0aGUgdW5kZXJseWluZyBPUywgZHJpdmVycywgZGV2aWNlcywg YW5kIGNhYmxlcy4gIElmIHlvdSIsCi0iICBuZWVkIHRvIENPTk5FQ1QgdG8gYSBzZXJpYWwgZGV2 aWNlIHRoYXQgaXMgbm90IGFzc2VydGluZyBjYXJyaWVyLCBhbmQiLAotIiAgS2VybWl0IHdvbid0 IGxldCB5b3UsIHVzZSBTRVQgQ0FSUklFUi1XQVRDSCBPRkYuICBVc2UgU0hPVyBDT01NVU5JQ0FU SU9OUyIsCi0iICB0byBkaXNwbGF5IHRoZSBDQVJSSUVSLVdBVENIIHNldHRpbmcuIiwKLSIiIH07 Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi1zdGF0aWMgY2hhciAqaHNldGF0W10gPSB7Ci0iU3lu dGF4OiBTRVQgQVRUUklCVVRFUyBuYW1lIE9OIG9yIE9GRiIsCi0iICIsCi0iICBVc2UgdGhpcyBj b21tYW5kIHRvIGVuYWJsZSAoT04pIG9yIGRpc2FibGUgKE9GRikgdGhlIHRyYW5zbWlzc2lvbiBv ZiIsCi0iICBzZWxlY3RlZCBmaWxlIGF0dHJpYnV0ZXMgYWxvbmcgd2l0aCBlYWNoIGZpbGUsIGFu ZCB0byBoYW5kbGUgb3IgaWdub3JlIiwKLSIgIHNlbGVjdGVkIGluY29taW5nIGZpbGUgYXR0cmli dXRlcywgaW5jbHVkaW5nOiIsCi0iICIsCi0jaWZuZGVmIE5PQ1NFVFMKLSIgICBDSEFSQUNURVIt U0VUOiAgVGhlIHRyYW5zZmVyIGNoYXJhY3RlciBzZXQgZm9yIHRleHQgZmlsZXMiLAotI2VuZGlm IC8qIE5PQ1NFVFMgKi8KLSIgICBEQVRFOiAgICAgICAgICAgVGhlIGZpbGUncyBjcmVhdGlvbiBk YXRlIiwKLSIgICBESVNQT1NJVElPTjogICAgVW51c3VhbCB0aGluZ3MgdG8gZG8gd2l0aCB0aGUg ZmlsZSwgbGlrZSBNQUlMIG9yIFBSSU5UIiwKLSIgICBMRU5HVEg6ICAgICAgICAgVGhlIGZpbGUn cyBsZW5ndGgiLAotIiAgIFBST1RFQ1RJT046ICAgICBUaGUgZmlsZSdzIHByb3RlY3Rpb24gKHBl cm1pc3Npb25zKSIsCi0iICAgU1lTVEVNLUlEOiAgICAgIE1hY2hpbmUvT3BlcmF0aW5nIHN5c3Rl bSBvZiBvcmlnaW4iLAotIiAgIFRZUEU6ICAgICAgICAgICBUaGUgZmlsZSdzIHR5cGUgKHRleHQg b3IgYmluYXJ5KSIsCi0iICIsCi0iWW91IGNhbiBhbHNvIHNwZWNpZnkgQUxMIHRvIHNlbGVjdCBh bGwgb2YgdGhlbS4gIEV4YW1wbGVzOiIsCi0iICIsCi0iICAgU0VUIEFUVFIgREFURSBPRkYiLAot IiAgIFNFVCBBVFRSIExFTkdUSCBPTiIsCi0iICAgU0VUIEFUVFIgQUxMIE9GRiIsCi0iICIsCi0i QWxzbyBzZWUgSEVMUCBTRVQgU0VORCBhbmQgSEVMUCBTRVQgUkVDRUlWRS4iLAotIiIKLX07Ci0K LXN0YXRpYyBjaGFyICpoeHl0YWtbXSA9IHsKLSJTeW50YXg6IFNFVCBUQUtFIHBhcmFtZXRlciB2 YWx1ZSIsCi0iICIsCi0iICBDb250cm9scyBiZWhhdmlvciBvZiBUQUtFIGNvbW1hbmQ6IiwKLSIg IiwKLSJTRVQgVEFLRSBFQ0hPIHsgT04sIE9GRiB9IiwKLSIgIFRlbGxzIHdoZXRoZXIgY29tbWFu ZHMgcmVhZCBmcm9tIGEgVEFLRSBmaWxlIHNob3VsZCBiZSBkaXNwbGF5ZWQgb24gdGhlIiwKLSIg IHNjcmVlbiAoaWYgc28sIGVhY2ggY29tbWFuZCBpcyBzaG93biBhdCB0aGUgdGltZSBpdCBpcyBy ZWFkLCBhbmQgbGFiZWxlZCIsCi0iICB3aXRoIGEgbGluZSBudW1iZXIpLiIsCi0iICIsCi0iU0VU IFRBS0UgRVJST1IgeyBPTiwgT0ZGIH0iLAotIiAgVGVsbHMgd2hldGhlciBhIFRBS0UgY29tbWFu ZCBmaWxlIHNob3VsZCBiZSBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZWQgd2hlbiIsCi0iICBhIGNv bW1hbmQgZmFpbHMuICBUaGlzIHNldHRpbmcgaXMgbG9jYWwgdG8gdGhlIGN1cnJlbnQgY29tbWFu ZCBmaWxlLCBhbmQiLAotIiAgaW5oZXJpdGVkIGJ5IHN1Ym9yZGluYXRlIGNvbW1hbmQgZmlsZXMu IiwKLSIiIH07Ci0KLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIE9TMk1PVVNFCi1zdGF0aWMgY2hh ciAqaHh5bW91c2VbXSA9IHsKLSJTeW50YXg6IFNFVCBNT1VTRSBBQ1RJVkFURSB7IE9OLCBPRkYg fSIsCi0iICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBtb3VzZSBpbiBDb25uZWN0IG1vZGUuICBE ZWZhdWx0IGlzIE9OIiwKLSIgIiwKLSJTeW50YXg6IFNFVCBNT1VTRSBCVVRUT04gPG51bWJlcj4g PGtleS1tb2RpZmllcj4gPGFjdGlvbj4gWyA8dGV4dD4gXSIsCi0iIHdoZXJlOiIsCi0iICA8bnVt YmVyPiBpcyB0aGUgbW91c2UgYnV0dG9uIG51bWJlciwgMSwgMiwgb3IgMzsiLAotIiAgPGtleS1t b2RpZmllcj4gZGVub3RlcyBtb2RpZmllciBrZXlzIGhlbGQgZG93biBkdXJpbmcgdGhlIG1vdXNl IGV2ZW50OiIsCi0iICAgQUxULCBBTFQtU0hJRlQsIENUUkwsIENUUkwtQUxUIENUUkwtQUxULVNI SUZULCBDVFJMLVNISUZULCBTSElGVCwgTk9ORTsiLAotIiAgPGFjdGlvbj4gaXMgdGhlIG1vdXNl IGFjdGlvbiwgQ0xJQ0ssIERSQUcsIG9yIERPVUJMRS1DTElDSy4iLAotIiAiLAotIiBUaGUgPHRl eHQ+IGhhcyBleGFjdGx5IHRoZSBzYW1lIHByb3BlcnRpZXMgYXMgdGhlIDx0ZXh0PiBmcm9tIHRo ZSBTRVQgS0VZIiwKLSIgY29tbWFuZCAtLSBpdCBjYW4gYmUgYSBjaGFyYWN0ZXIsIGEgc3RyaW5n LCBvbmUgb3IgbW9yZSBLdmVyYnMsIGEgbWFjcm8iLAotIiBpbnZva2VkIGFzIGEgS3ZlcmIsIG9y IGFueSBjb21iaW5hdGlvbiBvZiB0aGVzZS4gIFRodXMsIGFueXRoaW5nIHRoYXQgY2FuIiwKLSIg YmUgYXNzaWduZWQgdG8gYSBrZXkgY2FuIGFsc28gYmUgYXNzaWduZWQgdG8gdGhlIG1vdXNlIC0t IGFuZCB2aWNlIHZlcnNhLiIsCi0iIElmIHRoZSA8dGV4dD4gaXMgb21pdHRlZCwgdGhlIGFjdGlv biB3aWxsIGJlIGlnbm9yZWQuICBFeGFtcGxlczoiLAotIiAiLAotIiBTRVQgTU9VU0UgQlVUVE9O IDEgTk9ORSBET1VCTEUgXFxLbW91c2VDdXJQb3MiLAotIiBTRVQgTU9VIEIgMiBTSElGVCBDTElD SyBoZWxwXFwxMyIsCi0iICIsCi0iIERSQUcgb3BlcmF0aW9ucyBwZXJmb3JtIGEgXCJtYXJrIG1v ZGVcIiBzZWxlY3Rpb24gb2YgVGV4dC4gWW91IHNob3VsZCIsCi0iIGFzc2lnbiBvbmx5IHRoZSBm b2xsb3dpbmcgYWN0aW9ucyB0byBkcmFnIG9wZXJhdGlvbnM6IiwKLSIgIiwKLSIgIFxcS2R1bXAg ICAgICAgICAtIGNvcHkgbWFya2VkIHRleHQgdG8gcHJpbnRlciAob3IgZmlsZSkiLAotIiAgXFxL bWFya2NvcHljbGlwIC0gY29weSBtYXJrZWQgdGV4dCB0byBQTSBDbGlwYm9hcmQiLAotIiAgXFxL bWFya2NvcHlob3N0IC0gY29weSBtYXJrZWQgdGV4dCBkaXJlY3QgdG8gSG9zdCIsCi0iICBcXEtt b3VzZW1hcmsgICAgLSBtYXJrIHRleHQsIG5vIGNvcHkgb3BlcmF0aW9uIHBlcmZvcm1lZCIsCi0i ICIsCi0iIFRoZSBmb2xsb3dpbmcgS3ZlcmIgaXMgb25seSBmb3IgdXNlIHdpdGggdGhlIG1vdXNl OiIsCi0iICIsCi0iICBcXEttb3VzZUN1clBvcyIsCi0iICIsCi0iIHdoaWNoIHJlcHJlc2VudHMg dGhlIG1vdXNlLWRpcmVjdGVkIHRlcm1pbmFsIGN1cnNvciBmZWF0dXJlLiIsCi0iICIsCi0iU3lu dGF4OiBTRVQgTU9VU0UgQ0xFQVIiLAotIiBSZXN0b3JlcyBhbGwgbW91c2UgZXZlbnRzIHRvIHRo ZWlyIGRlZmF1bHQgZGVmaW5pdGlvbnMiLAotIiAgIEJ1dHRvbiAxIEN0cmwtQ2xpY2sgPSBLdmVy YjogXFxLbW91c2V1cmwiLAotIiAgIEJ1dHRvbiAxIERvdWJsZS1DbGljayA9IEt2ZXJiOiBcXEtt b3VzZWN1cnBvcyIsCi0iICAgQnV0dG9uIDEgRHJhZyA9IEt2ZXJiOiBcXEttYXJrY29weWNsaXAi LAotIiAgIEJ1dHRvbiAxIEFsdC1EcmFnID0gS3ZlcmI6IFxcS21hcmtjb3B5Y2xpcF9ub2VvbCIs Ci0iICAgQnV0dG9uIDEgQ3RybC1EcmFnID0gS3ZlcmI6IFxcS21hcmtjb3B5aG9zdCIsCi0iICAg QnV0dG9uIDEgQ3RybC1BbHQtRHJhZyA9IEt2ZXJiOiBcXEttYXJrY29weWhvc3Rfbm9lb2wiLAot IiAgIEJ1dHRvbiAxIEN0cmwtU2hpZnQtRHJhZyA9IEt2ZXJiOiBcXEtkdW1wIiwKLSIgICBCdXR0 b24gMiBEb3VibGUtQ2xpY2sgPSBLdmVyYjogXFxLcGFzdGUiLAotIiAgIEJ1dHRvbiAyIERyYWcg PSBLdmVyYjogXFxLbWFya2NvcHlob3N0IiwKLSIgICBCdXR0b24gMiBBbHQtRHJhZyA9IEt2ZXJi OiBcXEttYXJrY29weWhvc3Rfbm9lb2wgICAgICIsICAgIAotIiAgIEJ1dHRvbiAzIERvdWJsZS1D bGljayA9IEt2ZXJiOiBcXEtwYXN0ZSIsCi0iIn07Ci0jZW5kaWYgLyogT1MyTU9VU0UgKi8KLQot c3RhdGljIGNoYXIgKmh4eXRlcm1bXSA9IHsKLSJTeW50YXg6IFNFVCBURVJNSU5BTCBwYXJhbWV0 ZXIgdmFsdWUiLAotIiAiLAotI2lmZGVmIE9TMgotIlNFVCBURVJNSU5BTCBUWVBFIHsgQU5TSSwg VlQ1MiwgVlQxMDAsIFZUMTAyLCBWVDIyMCwgVlQzMjAsIC4uLiB9IiwKLSIgIFNlbGVjdHMgdHlw ZSB0eXBlIG9mIHRlcm1pbmFsIHRvIGVtdWxhdGUuICBUeXBlIFNFVCBURVJNSU5BTCBUWVBFID8g dG8iLAotIiAgc2VlIGEgY29tcGxldGUgbGlzdC4iLAotIiAiLAotIlNFVCBURVJNSU5BTCBBTlNX RVJCQUNLIHsgT0ZGLCBPTiB9IiwKLSIgIERpc2FibGVzL2VuYWJsZXMgdGhlIEVOUS9BbnN3ZXJi YWNrIHNlcXVlbmNlIChcIkstOTUgdmVyc2lvbiB0ZXJtLXR5cGVcIikuIiwKLSIgIiwKLSJTRVQg VEVSTUlOQUwgQU5TV0VSQkFDSyBNRVNTQUdFIDxleHRlbnNpb24+IiwKLSIgIEFsbG93cyB5b3Ug dG8gc3BlY2lmeSBhbiBleHRlbnNpb24gdG8gdGhlIGRlZmF1bHQgYW5zd2VyYmFjayBtZXNzYWdl LiIsCi0iICIsCi0jZWxzZQotIlNFVCBURVJNSU5BTCBUWVBFIC4uLiIsCi0iICBUaGlzIGNvbW1h bmQgaXMgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoaXMgdmVyc2lvbiBvZiBLZXJtaXQgZG9lcyBu b3QiLAotIiAgaW5jbHVkZSBhIHRlcm1pbmFsIGVtdWxhdG9yLiAgSW5zdGVhZCwgaXQgaXMgYSBc InNlbWl0cmFuc3BhcmVudCBwaXBlXCIiLAotIiAgKG9yIGEgdG90YWxseSB0cmFuc3BhcmVudCBv bmUsIGlmIHlvdSBjb25maWd1cmUgaXQgdGhhdCB3YXkpIHRvIHRoZSIsCi0iICBjb21wdXRlciBv ciBzZXJ2aWNlIHlvdSBoYXZlIG1hZGUgYSBjb25uZWN0aW9uIHRvLiAgWW91ciBjb25zb2xlLCIs Ci0iICB3b3Jrc3RhdGlvbiB3aW5kb3csIG9yIHRoZSB0ZXJtaW5hbCBlbXVsYXRvciBvciB0ZXJt aW5hbCBmcm9tIHdoaWNoIHlvdSIsCi0iICBhcmUgcnVubmluZyBLZXJtaXQgcHJvdmlkZXMgdGhl IGVtdWxhdGlvbi4iLAotIiAiLAotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgQ0tfQVBDCi0i U0VUIFRFUk1JTkFMIEFQQyB7IE9OLCBPRkYsIE5PLUlOUFVULCBOTy1JTlBVVC1VTkNIRUNLRUQs IFVOQ0hFQ0tFRCB9IiwKLSNpZmRlZiBPUzIKLSIgIENvbnRyb2xzIGV4ZWN1dGlvbiBvZiBBcHBs aWNhdGlvbiBQcm9ncmFtIENvbW1hbmRzIHNlbnQgYnkgdGhlIGhvc3Qgd2hpbGUiLAotIiAgSy05 NSBpcyBlaXRoZXIgaW4gQ09OTkVDVCBtb2RlIG9yIHByb2Nlc3NpbmcgSU5QVVQgY29tbWFuZHMu ICBPTiBhbGxvd3MiLAotIiAgZXhlY3V0aW9uIG9mIFwic2FmZVwiIGNvbW1hbmRzIGFuZCBkaXNh bGxvd3MgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIG9uZXMiLAotIiAgc3VjaCBhcyBERUxFVEUsIFJF TkFNRSwgT1VUUFVULCBhbmQgUlVOLiAgT0ZGIHByZXZlbnRzIGV4ZWN1dGlvbiBvZiBBUENzLiIs Ci0iICBVTkNIRUNLRUQgYWxsb3dzIGV4ZWN1dGlvbiBvZiBhbGwgQVBDcy4gIE9GRiBpcyB0aGUg ZGVmYXVsdC4iLAotI2Vsc2UgLyogT1MyICovCi0iICBDb250cm9scyBleGVjdXRpb24gb2YgQXBw bGljYXRpb24gUHJvZ3JhbSBDb21tYW5kcyBzZW50IGJ5IHRoZSBob3N0IHdoaWxlIiwKLSIgIEMt S2VybWl0IGlzIGluIENPTk5FQ1QgbW9kZS4gIE9OIGFsbG93cyBleGVjdXRpb24gb2YgXCJzYWZl XCIgY29tbWFuZHMgYW5kIiwKLSIgIGRpc2FsbG93cyBwb3RlbnRpYWxseSBkYW5nZXJvdXMgY29t bWFuZHMgc3VjaCBhcyBERUxFVEUsIFJFTkFNRSwgT1VUUFVULCIsCi0iICBhbmQgUlVOLiAgT0ZG IHByZXZlbnRzIGV4ZWN1dGlvbiBvZiBBUENzLiAgVU5DSEVDS0VEIGFsbG93cyBleGVjdXRpb24g b2YiLAotIiAgYWxsIEFQQ3MuICBPRkYgaXMgdGhlIGRlZmF1bHQuIiwKLSNlbmRpZiAvKiBPUzIg Ki8KLSIgIiwKLSNlbmRpZiAvKiBDS19BUEMgKi8KLQotI2lmZGVmIE9TMgotIlNFVCBURVJNSU5B TCBBUlJPVy1LRVlTIHsgQVBQTElDQVRJT04sIENVUlNPUiB9IiwKLSIgIFNldHMgdGhlIG1vZGUg Zm9yIHRoZSBhcnJvdyBrZXlzIGR1cmluZyBWVCB0ZXJtaW5hbCBlbXVsYXRpb24uIiwKLSIgIiwK LSJTRVQgVEVSTUlOQUwgQVRUUklCVVRFIHsgQkxJTkssIERJTSwgUFJPVEVDVEVELCBSRVZFUlNF LCBVTkRFUkxJTkUgfSIsCi0iICBEZXRlcm1pbmVzIGhvdyBhdHRyaWJ1dGVzIGFyZSBkaXNwbGF5 ZWQgYnkgS2VybWl0LTk1LiIsCi0iICIsCi0iU0VUIFRFUk1JTkFMIEFUVFJJQlVURSB7IEJMSU5L LCBESU0sIFJFVkVSU0UsIFVOREVSTElORSB9IHsgT04sIE9GRiB9IiwKLSIgIERldGVybWluZXMg d2hldGhlciByZWFsIEJsaW5raW5nLCBEaW0sIFJldmVyc2UsIGFuZCBVbmRlcmxpbmUgYXJlIHVz ZWQgaW4iLAotIiAgdGhlIHRlcm1pbmFsIGRpc3BsYXkuICBXaGVuIEJMSU5LIGlzIHR1cm5lZCBP RkYsIHJldmVyc2UgYmFja2dyb3VuZCIsCi0iICBpbnRlbnNpdHkgaXMgdXNlZC4gIFdoZW4gRElN IGlzIHR1cm5lZCBPRkYsIGRpbSBjaGFyYWN0ZXJzIGFwcGVhciBCT0xELiIsCi0iICBXaGVuIFJF VkVSU0UgYW5kIFVOREVSTElORSBhcmUgT0ZGLCB0aGUgY29sb3JzIHNlbGVjdGVkIHdpdGggU0VU IiwKLSIgIFRFUk1JTkFMIENPTE9SIHsgUkVWRVJTRSxVTkRFUkxJTkUgfSBhcmUgdXNlZCBpbnN0 ZWFkLiAgVGhpcyBjb21tYW5kIiwKLSIgIGFmZmVjdHMgdGhlIGVudGlyZSBjdXJyZW50IHNjcmVl biBhbmQgdGVybWluYWwgc2Nyb2xsYmFjayBidWZmZXIuIiwKLSIgIiwKLSJTRVQgVEVSTUlOQUwg QVRUUklCVVRFIFBST1RFQ1RFRCBbIC0iLAotIiAgIHsgQk9MRCwgRElNLCBJTlZJU0lCTEUsIE5P Uk1BTCwgUkVWRVJTRSwgVU5ERVJMSU5FRCB9IF0iLAotIiAgU2V0cyB0aGUgYXR0cmlidXRlcyB1 c2VkIHRvIHJlcHJlc2VudCBQcm90ZWN0ZWQgdGV4dCBpbiBXeXNlIGFuZCBUZWxldmlkZW8iLAot IiAgdGVybWluYWwgZW11bGF0aW9ucy4gIEFueSBjb21iaW5hdGlvbiBvZiBhdHRyaWJ1dGVzIG1h eSBiZSB1c2VkLiAgVGhlIiwKLSIgIGRlZmF1bHQgaXMgRElNLikiLAotIiAiLAotI2VuZGlmIC8q IE9TMiAqLwotCi0jaWZkZWYgT1MyCi0jaWZkZWYgQ0tfWFlaCi0iU0VUIFRFUk1JTkFMIEFVVE9E T1dOTE9BRCB7IE9OLCBPRkYsIEVSUk9SIHsgU1RPUCwgQ09OVElOVUUgfSB9IiwKLSIgIGVuYWJs ZXMvZGlzYWJsZXMgYXV0b21hdGljIHN3aXRjaGluZyBpbnRvIGZpbGUtdHJhbnNmZXIgbW9kZSB3 aGVuIGEgS2VybWl0IiwKLSIgIG9yIFpNT0RFTSBmaWxlIHRyYW5zZmVyIGhhcyBiZWVuIGRldGVj dGVkIGR1cmluZyBDT05ORUNUIG1vZGUgb3Igd2hpbGUiLAotIiAgYW4gSU5QVVQgY29tbWFuZCBp cyBhY3RpdmUuICBEZWZhdWx0IGlzIE9GRi4iLAotI2Vsc2UKLSJTRVQgVEVSTUlOQUwgQVVUT0RP V05MT0FEIHsgT04sIE9GRiwgRVJST1IgeyBTVE9QLCBDT05USU5VRSB9IH0iLAotIiAgZW5hYmxl cy9kaXNhYmxlcyBhdXRvbWF0aWMgc3dpdGNoaW5nIGludG8gZmlsZS10cmFuc2ZlciBtb2RlIHdo ZW4gYSBLZXJtaXQiLAotIiAgZmlsZSB0cmFuc2ZlciBoYXMgYmVlbiBkZXRlY3RlZCBkdXJpbmcg Q09OTkVDVCBtb2RlIG9yIHdoaWxlIGFuIElOUFVUIiwKLSIgIGNvbW1hbmQgaXMgYWN0aXZlLiAg RGVmYXVsdCBpcyBPRkYuIiwKLSNlbmRpZiAvKiBDS19YWVogKi8KLQotIiAiLAotIiAgV2hlbiBU RVJNSU5BTCBBVVRPRE9XTkxPQUQgaXMgT04sIHRoZSBURVJNSU5BTCBBVVRPRE9XTkxPQUQgRVJS T1Igc2V0dGluZyIsCi0iICB0ZWxscyB3aGF0IHRvIGRvIGlmIGFuIGVycm9yIG9jY3VycyBkdXJp bmcgYSBmaWxlIHRyYW5zZmVyIG9yIG90aGVyIiwKLSIgIHByb3RvY29sIG9wZXJhdGlvbiBpbml0 aWF0ZWQgYnkgdGhlIHRlcm1pbmFsIGVtdWxhdG9yOiBTVE9QICh0aGUgZGVmYXVsdCkiLAotIiAg bWVhbnMgdG8gcmVtYWluIGluIGNvbW1hbmQgbW9kZSBzbyB5b3UgY2FuIHNlZSB3aGF0IGhhcHBl bmVkOyBDT05USU5VRSIsCi0iICBtZWFucyB0byByZXN1bWUgdGhlIENPTk5FQ1Qgc2Vzc2lvbiAo ZS5nLiBzbyBhIGZhci1lbmQgc2NyaXB0IGNhbiBjb250aW51ZSIsCi0iICBpdHMgd29yaykuIiwK LSIgIiwKLQotI2lmZGVmIENLX1hZWgotIlNFVCBURVJNLi4uIEFVVE8uLi4geyBLRVJNSVQsIFpN T0RFTSB9IEMwLUNPTkZMSUNUUyB7IElHTk9SRUQsIFBST0NFU1NFRCB9IiwKLSIgIERldGVybWlu ZXMgd2hldGhlciB0aGUgYWN0aXZlIHRlcm1pbmFsIGVtdWxhdG9yIHNob3VsZCBwcm9jZXNzIG9y IGlnbm9yZSIsCi0iICBDMCBjb250cm9sIGNoYXJhY3RlcnMgd2hpY2ggYXJlIGFsc28gdXNlZCBm b3IgdGhlIHNwZWNpZmllZCBmaWxlIHRyYW5zZmVyIiwKLSIgIHByb3RvY29sLiAgS2VybWl0IGJ5 IGRlZmF1bHQgdXNlcyBeQSAoU09IKSBhbmQgWm1vZGVtIHVzZXMgXlggKENBTikuIiwKLSIgIERl ZmF1bHQgaXMgUFJPQ0VTU0VELiIsCi0iICIsCi0iU0VUIFRFUk0uLi4gQVVUTy4uLiB7IEtFUk1J VCwgWk1PREVNIH0gREVURUNUSU9OLU1FVEhPRCB7IFBBQ0tFVCwgU1RSSU5HIH0iLAotIiAgRGV0 ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgZmlsZSB0cmFuc2ZlciBwcm90b2NvbCBzaG91 bGQgYmUgZGV0ZWN0ZWQiLAotIiAgYnkgbG9va2luZyBmb3IgdmFsaWQgcGFja2V0cyBvciBieSBp ZGVudGlmeWluZyBhIHNwZWNpZmllZCB0ZXh0IHN0cmluZy4iLAotIiAgRGVmYXVsdCBpcyBQQUNL RVQuIiwKLSIgIiwKLSJTRVQgVEVSTS4uLiBBVVRPLi4uIHsgS0VSTUlULCBaTU9ERU0gfSBTVFJJ TkcgPHRleHQ+IiwKLSIgIExldHMgeW91IGFzc2lnbiBhbiBhdXRvZG93bmxvYWQgZGV0ZWN0aW9u IHN0cmluZyBmb3IgdXNlIHdpdGggdGhlIiwKLSIgIHNwZWNpZmllZCBmaWxlIHRyYW5zZmVyIHBy b3RvY29sLiIsCi0iICBEZWZhdWx0IGZvciBLZXJtaXQgaXMgXCJSRUFEWSBUTyBTRU5ELi4uXCIs IGZvciBabW9kZW0gaXMgXCJyelxcezEzfVwiLiIsCi0iICIsCi0jZWxzZSAvKiBDS19YWVogKi8K LSJTRVQgVEVSTS4uLiBBVVRPLi4uIEtFUk1JVCBDMC1DT05GTElDVFMgeyBJR05PUkVELCBQUk9D RVNTRUQgfSIsCi0iICBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFjdGl2ZSB0ZXJtaW5hbCBlbXVs YXRvciBzaG91bGQgcHJvY2VzcyBvciBpZ25vcmUiLAotIiAgQzAgY29udHJvbCBjaGFyYWN0ZXJz IHdoaWNoIGFyZSBhbHNvIHVzZWQgZm9yIHRoZSBzcGVjaWZpZWQgZmlsZSB0cmFuc2ZlciIsCi0i ICBwcm90b2NvbC4gIEtlcm1pdCBieSBkZWZhdWx0IHVzZXMgXkEgPFNPSD4uICBEZWZhdWx0IGlz IFBST0NFU1NFRC4iLAotIiAiLAotIlNFVCBURVJNLi4uIEFVVE8uLi4gS0VSTUlUIERFVEVDVElP Ti1NRVRIT0QgeyBQQUNLRVQsIFNUUklORyB9IiwKLSIgIERldGVybWluZXMgd2hldGhlciB0aGUg c3BlY2lmaWVkIGZpbGUgdHJhbnNmZXIgcHJvdG9jb2wgc2hvdWxkIGJlIGRldGVjdGVkIiwKLSIg IGJ5IGxvb2tpbmcgZm9yIHZhbGlkIHBhY2tldHMgb3IgYnkgaWRlbnRpZnlpbmcgYSBzcGVjaWZp ZWQgdGV4dCBzdHJpbmcuIiwKLSIgIERlZmF1bHQgaXMgUEFDS0VULiIsCi0iICIsCi0iU0VUIFRF Uk0uLi4gQVVUTy4uLiBLRVJNSVQgU1RSSU5HIDx0ZXh0PiIsCi0iICBMZXRzIHlvdSBhc3NpZ24g YW4gYXV0b2Rvd25sb2FkIGRldGVjdGlvbiBzdHJpbmcgZm9yIHVzZSB3aXRoIHRoZSIsCi0iICBz cGVjaWZpZWQgZmlsZSB0cmFuc2ZlciBwcm90b2NvbC4gIERlZmF1bHQgaXMgXCJSRUFEWSBUTyBT RU5ELi4uXCIuIiwKLSIgIiwKLSNlbmRpZiAvKiBDS19YWVogKi8KLSJTRVQgVEVSTUlOQUwgQVVU T1BBR0UgeyBPTiwgT0ZGIH0iLAotIiAiLAotIlNFVCBURVJNSU5BTCBBVVRPU0NST0xMIHsgT04s IE9GRiB9IiwKLSIgIiwKLSNlbHNlIC8qIE9TMiAqLwotIlNFVCBURVJNSU5BTCBBVVRPRE9XTkxP QUQgeyBPTiwgT0ZGLCBFUlJPUiB7IFNUT1AsIENPTlRJTlVFIH0gfSIsCi0iICBFbmFibGVzL2Rp c2FibGVzIGF1dG9tYXRpYyBzd2l0Y2hpbmcgaW50byBmaWxlLXRyYW5zZmVyIG1vZGUgd2hlbiBh IHZhbGlkIiwKLSNpZmRlZiBDS19YWVoKLSIgIEtlcm1pdCBvciBaTU9ERU0gcGFja2V0IG9mIHRo ZSBhcHByb3ByaWF0ZSB0eXBlIGlzIHJlY2VpdmVkIGR1cmluZyBDT05ORUNUIiwKLSIgIG1vZGUu ICBEZWZhdWx0IGlzIE9GRi4iLAotI2Vsc2UKLSIgIEtlcm1pdCBwYWNrZXQgb2YgdGhlIGFwcHJv cHJpYXRlIHR5cGUgaXMgcmVjZWl2ZWQgZHVyaW5nIENPTk5FQ1QgbW9kZS4iLAotIiAgRGVmYXVs dCBpcyBPRkYuIiwKLSNlbmRpZiAvKiBDS19YWVogKi8KLQotIiAiLAotIiAgV2hlbiBURVJNSU5B TCBBVVRPRE9XTkxPQUQgaXMgT04sIHRoZSBURVJNSU5BTCBBVVRPRE9XTkxPQUQgRVJST1Igc2V0 dGluZyIsCi0iICB0ZWxscyB3aGF0IHRvIGRvIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgYSBm aWxlIHRyYW5zZmVyIG9yIG90aGVyIiwKLSIgIHByb3RvY29sIG9wZXJhdGlvbiBpbml0aWF0ZWQg YnkgdGhlIHRlcm1pbmFsIGVtdWxhdG9yOiBTVE9QICh0aGUgZGVmYXVsdCkiLAotIiAgbWVhbnMg dG8gcmVtYWluIGluIGNvbW1hbmQgbW9kZSBzbyB5b3UgY2FuIHNlZSB3aGF0IGhhcHBlbmVkOyBD T05USU5VRSIsCi0iICBtZWFucyB0byByZXN1bWUgdGhlIENPTk5FQ1Qgc2Vzc2lvbiAoZS5nLiBz byBhIGZhci1lbmQgc2NyaXB0IGNhbiBjb250aW51ZSIsCi0iICBpdHMgd29yaykuIiwKLSIgIiwK LQotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgT1MyCi0iU0VUIFRFUk1JTkFMIEJFTEwgeyBB VURJQkxFLCBWSVNJQkxFLCBOT05FIH0iLAotIiAgU3BlY2lmaWVzIGhvdyBDb250cm9sLUcgKGJl bGwpIGNoYXJhY3RlcnMgYXJlIGhhbmRsZWQuICBBVURJQkxFIG1lYW5zIiwKLSIgIGEgYmVlcCBp cyBzb3VuZGVkOyBWSVNJQkxFIG1lYW5zIHRoZSBzY3JlZW4gaXMgZmxhc2hlZCBtb21lbnRhcmls eS4iLAotIiAiLAotIiAgKFRoaXMgY29tbWFuZCBoYXMgYmVlbiBzdXBlcnNlZGVkIGJ5IFNFVCBC RUxMLikiLAotIiAiLAotI2VuZGlmIC8qIE9TMiAqLwotCi0iU0VUIFRFUk1JTkFMIEJZVEVTSVpF IHsgNywgOCB9IiwKLSIgIFVzZSA3LSBvciA4LWJpdCBjaGFyYWN0ZXJzIGJldHdlZW4gS2VybWl0 IGFuZCB0aGUgcmVtb3RlIGNvbXB1dGVyIGR1cmluZyIsCi0iICB0ZXJtaW5hbCBzZXNzaW9ucy4g IFRoZSBkZWZhdWx0IGlzIDguIiwKLSIgIiwKLQotI2lmbmRlZiBOT0NTRVRTCi0jaWZkZWYgT1My Ci0iU0VUIFRFUk1JTkFMIENIQVJBQ1RFUi1TRVQgPHJlbW90ZS1jcz4iLAotIiAgU3BlY2lmaWVz IHRoZSBjaGFyYWN0ZXIgc2V0IHVzZWQgYnkgdGhlIHJlbW90ZSBob3N0LCA8cmVtb3RlLWNzPi4i LAotIiAgRXF1aXZhbGVudCB0byBTRVQgVEVSTSBSRU1PVEUtQ0hBUkFDVEVSLVNFVCA8cmVtb3Rl LWNzPiBBTEwuICBGb3IgbW9yZSIsCi0iICBjb250cm9sIG92ZXIgdGhlIGRldGFpbHMsIHVzZSBT RVQgVEVSTSBSRU1PVEUtQ0hBUkFDVEVSLVNFVCBhbmQgKGluIiwKLSIgIG5vbi1HVUkgSzk1IHZl cnNpb25zKSBTRVQgVEVSTSBMT0NBTC1DSEFSQUNURVItU0VUOyB0aGVzZSBhcmUgZXhwbGFpbmVk IiwKLSIgIGJlbG93LiAgVGhlIGRlZmF1bHQgVEVSTUlOQUwgQ0hBUkFDVEVSLVNFVCBpcyBMQVRJ TjEgKElTTyA4ODU5LTEpLiIsCi0jZWxzZSAgLyogbm90IE9TMiAqLwotIlNFVCBURVJNSU5BTCBD SEFSQUNURVItU0VUIDxyZW1vdGUtY3M+IFsgPGxvY2FsLWNzPiBdIiwKLSIgIFNwZWNpZmllcyB0 aGUgY2hhcmFjdGVyIHNldCB1c2VkIGJ5IHRoZSByZW1vdGUgaG9zdCwgPHJlbW90ZS1jcz4sIGFu ZCB0aGUiLAotIiAgY2hhcmFjdGVyIHNldCB1c2VkIGJ5IEMtS2VybWl0IGxvY2FsbHksIDxsb2Nh bC1jcz4uICBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSIsCi0iICB0aGUgbG9jYWwgY2hhcmFjdGVyIHNl dCwgdGhlIGN1cnJlbnQgRklMRSBDSEFSQUNURVItU0VUIGlzIHVzZWQuICBXaGVuIiwKLSIgIHlv dSBzcGVjaWZ5IHR3byBkaWZmZXJlbnQgY2hhcmFjdGVyIHNldHMsIEMtS2VybWl0IHRyYW5zbGF0 ZXMgYmV0d2VlbiB0aGVtIiwKLSIgIGR1cmluZyBDT05ORUNULiAgQnkgZGVmYXVsdCwgYm90aCBj aGFyYWN0ZXIgc2V0cyBhcmUgVFJBTlNQQVJFTlQsIGFuZCIsCi0iICBubyB0cmFuc2xhdGlvbiBp cyBkb25lLiIsCi0jZW5kaWYgLyogT1MyICovCi0iICIsCi0jZW5kaWYgLyogTk9DU0VUUyAqLwot Ci0jaWZkZWYgT1MyCi0KLSJTRVQgVEVSTUlOQUwgQ09ERS1QQUdFIDxudW1iZXI+IiwKLSIgIExl dHMgeW91IGNoYW5nZSB0aGUgUEMgY29kZSBwYWdlLiAgT25seSB3b3JrcyBmb3IgY29kZSBwYWdl cyB0aGF0IGFyZSIsCi0iICBzdWNjZXNzZnVsbHkgcHJlcGFyZWQgaW4gQ09ORklHLlNZUy4gIFVz ZSBTSE9XIFRFUk1JTkFMIHRvIGxpc3QgdGhlIiwKLSIgIGN1cnJlbnQgY29kZSBwYWdlIGFuZCB0 aGUgYXZhaWxhYmxlIGNvZGUgcGFnZXMuIiwKLSNpZmRlZiBPUzJPTkxZCi0iICIsCi0iICBBbHNv IHNlZSBTRVQgVEVSTUlOQUwgRk9OVCBpZiB0aGUgZGVzaXJlZCBjb2RlIHBhZ2UgaW4gbm90IGF2 YWlsYWJsZSBpbiIsCi0iICB5b3VyIHZlcnNpb24gb2YgT1MvMi4iLAotI2VuZGlmIC8qIE9TMk9O TFkgKi8KLSIgIiwKLQotI2lmbmRlZiBOVAotIlNFVCBURVJNSU5BTCBDT0xPUiBCT1JERVIgPGZv cmVncm91bmQ+IiwKLSNlbmRpZiAvKiBOVCAqLwotIlNFVCBURVJNSU5BTCBDT0xPUiA8c2NyZWVu cGFydD4gPGZvcmVncm91bmQ+IDxiYWNrZ3JvdW5kPiIsCi0iIFNldHMgdGhlIGNvbG9ycyBvZiB0 aGUgdGVybWluYWwgZW11bGF0aW9uIHNjcmVlbi4iLAotIiA8c2NyZWVucGFydD4gbWF5IGJlIGFu eSBvZiB0aGUgZm9sbG93aW5nOiIsCi0iICBERUJVRywgSEVMUC1URVhULCBSRVZFUlNFLCBTRUxF Q1RJT04sIFNUQVRVUy1MSU5FLCBURVJNSU5BTC1TQ1JFRU4sIG9yIiwKLSIgIFVOREVSTElORUQt VEVYVC4iLAotIiA8Zm9yZWdyb3VuZD4gYW5kIDxiYWNrZ3JvdW5kPiBtYXkgYmUgYW55IG9mOiIs Ci0iICBCTEFDSywgQkxVRSwgR1JFRU4sIENZQU4sIFJFRCwgTUFHRU5UQSwgQlJPV04sIExHUkFZ LCBER1JBWSwgTEJMVUUsIiwKLSIgIExHUkVFTiwgTENZQU4sIExSRUQsIExNQUdFTlRBLCBZRUxM T1cgb3IgV0hJVEUuIiwKLSIgVGhlIEwgcHJlZml4IGZvciB0aGUgY29sb3IgbmFtZXMgbWVhbnMg TGlnaHQuIiwKLSIgIiwKLQotIlNFVCBURVJNSU5BTCBDT0xPUiBFUkFTRSB7IENVUlJFTlQtQ09M T1IsIERFRkFVTFQtQ09MT1IgfSIsCi0iICBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGN1cnJlbnQg Y29sb3IgYXMgc2V0IGJ5IHRoZSBob3N0IG9yIHRoZSBkZWZhdWx0IiwKLSIgIGNvbG9yIGFzIHNl dCBieSB0aGUgdXNlciAoU0VUIFRFUk1JTkFMIENPTE9SIFRFUk1JTkFMKSBpcyB1c2VkIHRvIGNs ZWFyIiwKLSIgIHRoZSBzY3JlZW4gd2hlbiBlcmFzZSBjb21tYW5kcyBhcmUgcmVjZWl2ZWQgZnJv bSB0aGUgaG9zdC4iLAotIiAiLAotCi0iU0VUIFRFUk1JTkFMIENPTE9SIFJFU0VULU9OLUVTQ1sw bSB7IENVUlJFTlQtQ09MT1IsIERFRkFVTFQtQ09MT1IgfSIsCi0iICBEZXRlcm1pbmVzIHdoZXRo ZXIgdGhlIGN1cnJlbnQgY29sb3Igb3IgdGhlIGRlZmF1bHQgY29sb3IgaXMgdXNlZCBhZnRlciIs Ci0iICA8RVNDPlswbSAoXCJyZXNldCBhdHRyaWJ1dGVzXCIpIGNvbW1hbmQgc2VxdWVuY2UgaXMg cmVjZWl2ZWQgZnJvbSB0aGUiLAotIiAgaG9zdC4iLAotIiAiLAotCi0iU0VUIFRFUk1JTkFMIENP TlRST0xTIHsgNywgOCB9IiwKLSIgIERldGVybWluZXMgd2hldGhlciBWVDIyMC8zMjAgb3IgV3lz ZSAzNzAgZnVuY3Rpb24ga2V5cywgYXJyb3cga2V5cywgZXRjLCIsCi0iICB0aGF0IGdlbmVyYXRl IEFOU0ktZm9ybWF0IGVzY2FwZSBzZXF1ZW5jZXMgc2hvdWxkIHNlbmQgOC1iaXQgY29udHJvbCIs Ci0iICBjaGFyYWN0ZXJzIG9yIDctYml0IGVzY2FwZSBzZXF1ZW5jZXMuIiwKLSIgIiwKLSNlbmRp ZiAvKiBPUzIgKi8KLQotIlNFVCBURVJNSU5BTCBDUi1ESVNQTEFZIHsgQ1JMRiwgTk9STUFMIH0i LAotIiAgU3BlY2lmaWVzIGhvdyBpbmNvbWluZyBjYXJyaWFnZSByZXR1cm4gY2hhcmFjdGVycyBh cmUgdG8gYmUgZGlzcGxheWVkIiwKLSIgIG9uIHlvdXIgc2NyZWVuLiIsCi0iICIsCi0KLSNpZmRl ZiBPUzIKLSNpZmRlZiBLVUkKLSJTRVQgVEVSTUlOQUwgQ1VSU09SIHsgRlVMTCwgSEFMRiwgVU5E RVJMSU5FIH0ge09OLCBPRkYsIE5PQkxJTkt9IiwKLSIgIFNlbGVjdHMgdGhlIGN1cnNvciBzdHls ZSBhbmQgdmlzaWJpbGl0eSBmb3IgdGhlIHRlcm1pbmFsIHNjcmVlbi4iLAotI2Vsc2UKLSJTRVQg VEVSTUlOQUwgQ1VSU09SIHsgRlVMTCwgSEFMRiwgVU5ERVJMSU5FIH0ge09OLCBPRkZ9IiwKLSIg IFNlbGVjdHMgdGhlIGN1cnNvciBzdHlsZSBhbmQgdmlzaWJpbGl0eSBmb3IgdGhlIHRlcm1pbmFs IHNjcmVlbi4iLAotI2VuZGlmIC8qIEtVSSAqLwotIiAiLAotI2VuZGlmIC8qIE9TMiAqLwotCi0i U0VUIFRFUk1JTkFMIERFQlVHIHsgT04sIE9GRiB9IiwKLSIgIFR1cm5zIHRlcm1pbmFsIHNlc3Np b24gZGVidWdnaW5nIG9uIGFuZCBvZmYuICBXaGVuIE9OLCBpbmNvbWluZyBjb250cm9sIiwKLSIg IGNoYXJhY3RlcnMgYXJlIGRpc3BsYXllZCBzeW1ib2xpY2FsbHksIHJhdGhlciB0aGFuIGJlIHRh a2VuIGFzIGZvcm1hdHRpbmciLAotIiAgY29tbWFuZHMuICBTRVQgVEVSTUlOQUwgREVCVUcgT04g aW1wbGllcyBTRVQgVEVMTkVUIERFQlVHIE9OLiIsCi0iICIsCi0jaWZkZWYgT1MyCi0iU0VUIFRF Uk1JTkFMIERHLVVOSVgtTU9ERSB7IE9OLCBPRkYgfSIsCi0iICBTcGVjaWZpZXMgd2hldGhlciB0 aGUgRGF0YSBHZW5lcmFsIGVtdWxhdGlvbnMgc2hvdWxkIGFjY2VwdCBjb250cm9sIiwKLSIgIHNl cXVlbmNlcyBpbiBVbml4IGNvbXBhdGlibGUgZm9ybWF0IG9yIGluIG5hdGl2ZSBERyBmb3JtYXQu ICBUaGUiLAotIiAgZGVmYXVsdCBpcyBPRkYsIERHIGZvcm1hdC4iLAotIiAiLAotI2VuZGlmIC8q IE9TMiAqLwotCi0iU0VUIFRFUk1JTkFMIEVDSE8geyBMT0NBTCwgUkVNT1RFIH0iLAotIiAgU3Bl Y2lmaWVzIHdoaWNoIHNpZGUgZG9lcyB0aGUgZWNob2luZyBkdXJpbmcgdGVybWluYWwgY29ubmVj dGlvbi4iLAotIiAiLAotCi0iU0VUIFRFUk1JTkFMIEVTQ0FQRS1DSEFSQUNURVIgeyBFTkFCTEVE LCBESVNBQkxFRCB9IiwKLSIgIFR1cm5zIG9uL29mZiB0aGUgYWJpbGl0eSB0byBlc2NhcGUgYmFj ayBmcm9tIENPTk5FQ1QgbW9kZSB1c2luZyB0aGUgU0VUIiwKLSNpZmRlZiBPUzIKLSIgIEVTQ0FQ RSBjaGFyYWN0ZXIuICBJZiB5b3UgZGlzYWJsZSBpdCB5b3UgY2FuIHN0aWxsIGdldCBiYWNrIHVz aW5nIEFsdC1rZXkiLAotIiAgY29tYmluYXRpb25zIGFzIHNob3duIGluIHRoZSBzdGF0dXMgbGlu ZS4gIEFsc28gc2VlIEhFTFAgU0VUIEVTQ0FQRS4iLAotI2Vsc2UKLSIgIEVTQ0FQRSBjaGFyYWN0 ZXIuICBJZiB5b3UgZGlzYWJsZSBpdCwgS2VybWl0IHJldHVybnMgdG8gaXRzIHByb21wdCBvbmx5 IiwKLSIgIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkIGJ5IHRoZSBvdGhlciBlbmQuICBV U0UgV0lUSCBFWFRSRU1FIENBVVRJT04uIiwKLSIgIEFsc28gc2VlIEhFTFAgU0VUIEVTQ0FQRS4i LAotI2VuZGlmIC8qIE9TMiAqLwotIiAiLAotCi0jaWZkZWYgT1MyCi0jaWZkZWYgS1VJCi0iU0VU IFRFUk1JTkFMIEZPTlQgPGZhY2VuYW1lPiA8aGVpZ2h0PiIsCi0iICBTcGVjaWZpZXMgdGhlIGZv bnQgdG8gYmUgdXNlZCBpbiB0aGUgS2VybWl0IDk1IHdpbmRvdy4gIFRoZSBmb250IGlzIiwKLSIg IGRldGVybWluZWQgYnkgdGhlIGNob2ljZSBvZiBhIGZhY2VuYW1lIGFuZCBhIGhlaWdodCBtZWFz dXJlZCBpbiBQb2ludHMuIiwKLSIgIFRoZSBhdmFpbGFibGUgZmFjZW5hbWVzIGFyZSB0aG9zZSBp bnN0YWxsZWQgaW4gdGhlIEZvbnQgQ29udHJvbCBQYW5lbC4iLAotIiAiLAotI2Vsc2UgLyogS1VJ ICovCi0jaWZkZWYgT1MyT05MWQotIlNFVCBURVJNSU5BTCBGT05UIHsgQ1A0MzcsIENQODUwLCBD UDg1MiwgQ1A4NjIsIENQODY2LCBERUZBVUxUIH0iLAotIiAgQ1A0MzcgLSBPcmlnaW5hbCBQQyBj b2RlIHBhZ2UiLAotIiAgQ1A4NTAgLSBcIk11bHRpbGluZ3VhbFwiIChXZXN0IEV1cm9wZSkgY29k ZSBwYWdlIiwKLSIgIENQODUyIC0gRWFzdCBFdXJvcGUgUm9tYW4gQWxwaGFiZXQgY29kZSBwYWdl IChmb3IgQ3plY2gsIFBvbGlzaCwgZXRjKSIsCi0iICBDUDg2MiAtIEhlYnJldyBjb2RlIHBhZ2Ui LAotIiAgQ1A4NjYgLSBDeXJpbGxpYyAoUnVzc2lhbiwgQmVsb3J1c3NpYW4sIGFuZCBVa3JhaW5p YW4pIGNvZGUgcGFnZSIsCi0iICIsCi0iICBMb2FkcyBhIHNvZnQgaW50byB0aGUgdmlkZW8gYWRh cHRlciBmb3IgdXNlIGR1cmluZyB0ZXJtaW5hbCBlbXVsYXRpb24uIiwKLSIgIFVzZSB0aGlzIGNv bW1hbmQgd2hlbiB5b3VyIE9TLzIgc3lzdGVtIGRvZXMgbm90IGhhdmUgdGhlIGRlc2lyZWQgY29k ZS4iLAotIiAgcGFnZS4gIENhbiBiZSB1c2VkIG9ubHkgaW4gZnVsbC1zY3JlZW4gc2Vzc2lvbnMu ICBBbHNvIHNlZSBTRVQgVEVSTUlOQUwiLAotIiAgQ09ERS1QQUdFIGFuZCBTRVQgVEVSTUlOQUwg UkVNT1RFLUNIQVJBQ1RFUi1TRVQuIiwKLSIgIiwKLSNlbmRpZiAvKiBPUzJPTkxZICovCi0jZW5k aWYgLyogS1VJICovCi0KLSNpZmRlZiBOVAotIlNFVCBURVJNSU5BTCBIRUlHSFQgPG51bWJlcj4i LAotIiAgQ2hhbmdlcyB0aGUgbnVtYmVyIG9mIHJvd3MgKGxpbmVzKSB0byB1c2UgZHVyaW5nIHRl cm1pbmFsIGVtdWxhdGlvbiwgbm90IiwKLSIgIGNvdW50aW5nIHRoZSBzdGF0dXMgbGluZS4gIFJl Y29tbWVuZGVkIHZhbHVlcyBhcmUgMjQsIDQyLCBhbmQgNDkgKG9yIDI1LCIsCi0iICA0MywgYW5k IDUwIGlmIFNFVCBURVJNSU5BTCBTVEFUVVNMSU5FIGlzIE9GRi4pIiwKLSNlbHNlCi0iU0VUIFRF Uk1JTkFMIEhFSUdIVCA8bnVtYmVyPiIKLSIgIENoYW5nZXMgdGhlIG51bWJlciBvZiByb3dzIChs aW5lcykgdG8gdXNlIGR1cmluZyB0ZXJtaW5hbCBlbXVsYXRpb24sIG5vdCIsCi0iICBjb3VudGlu ZyB0aGUgc3RhdHVzIGxpbmUuICBXaW5kb3dlZCBzZXNzaW9ucyBjYW4gdXNlIGFueSB2YWx1ZSBm cm9tIDggdG8iLAotIiAgMTAxLiAgRnVsbHNjcmVlbiBzZXNzaW9ucyBhcmUgbGltaXRlZCB0byAy NCwgNDIsIDQ5LCBvciA1OS4gIE5vdCBhbGwiCi0iICBoZWlnaHRzIGFyZSBzdXBwb3J0ZWQgYnkg YWxsIHZpZGVvIGFkYXB0ZXJzLiIsCi0jZW5kaWYgLyogTlQgKi8KLSNlbHNlICAvKiBPUzIgKi8K LSJTRVQgVEVSTUlOQUwgSEVJR0hUIDxudW1iZXI+IiwKLSIgIFRlbGxzIEMtS2VybWl0IGhvdyBt YW55IHJvd3MgKGxpbmVzKSBhcmUgb24geW91ciBDT05ORUNULW1vZGUgc2NyZWVuLiIsCi0jZW5k aWYgLyogT1MyICovCi0iICIsCi0KLSNpZmRlZiBDS1RJRExFCi0iU0VUIFRFUk1JTkFMIElETEUt VElNRU9VVCA8bnVtYmVyPiIsCi0iICBTZXRzIHRoZSBsaW1pdCBvbiBpZGxlIHRpbWUgaW4gQ09O TkVDVCBtb2RlIHRvIHRoZSBnaXZlbiBudW1iZXIgb2YiLAotIiAgc2Vjb25kcy4gIDAgKHRoZSBk ZWZhdWx0KSBtZWFucyBubyBsaW1pdC4iLAotIiAiLAotIlNFVCBURVJNSU5BTCBJRExFLUFDVElP TiB7IEVYSVQsIEhBTkdVUCwgT1VUUFVUIFsgdGV4dCBdLCBSRVRVUk4gfSIsCi0iICBTcGVjaWZp ZXMgdGhlIGFjdGlvbiB0byBiZSB0YWtlbiB3aGVuIGEgQ09OTkVDVCBzZXNzaW9uIGlzIGlkbGUg Zm9yIHRoZSIsCi0iICBudW1iZXIgb2Ygc2Vjb25kcyBnaXZlbiBieSBTRVQgVEVSTUlOQUwgSURM RS1USU1FT1VULiAgVGhlIGRlZmF1bHQgYWN0aW9uIiwKLSIgIGlzIHRvIFJFVFVSTiB0byBjb21t YW5kIG1vZGUuICBFWElUIGV4aXRzIGZyb20gS2VybWl0OyBIQU5HVVAgaGFuZ3MgdXAgdGhlIiwK LSIgIGNvbm5lY3Rpb24sIGFuZCBPVVRQVVQgc2VuZHMgdGhlIGdpdmVuIHRleHQgdG8gdGhlIGhv c3Qgd2l0aG91dCBsZWF2aW5nIiwKLSIgIENPTk5FQ1QgbW9kZTsgaWYgbm8gdGV4dCBpcyBnaXZl biBhIE5VTCAoMCkgY2hhcmFjdGVyIGlzIHNlbnQuIiwKLSNpZmRlZiBUTkNPREUKLSIgIiwKLSJT RVQgVEVSTUlOQUwgSURMRS1BQ1RJT04geyBURUxORVQtTk9QLCBURUxORVQtQVlUIH0iLAotIiAg Rm9yIFRFTE5FVCBjb25uZWN0aW9ucyBvbmx5OiBTZW5kcyB0aGUgaW5kaWNhdGVkIFRlbG5ldCBw cm90b2NvbCBtZXNzYWdlOiIsCi0iICBObyBPcGVyYXRpb24gKE5PUCkgb3IgXCJBcmUgWW91IFRo ZXJlP1wiIChBWVQpLiIsCi0jZW5kaWYgLyogVE5DT0RFICovCi0iICIsCi0jZW5kaWYgLyogQ0tU SURMRSAqLwotCi0jaWZkZWYgT1MyCi0KLSJTRVQgVEVSTUlOQUwgS0RCLUZPTExPV1MtR0wvR1Ig eyBPTiwgT0ZGIH0iLAotIiBTcGVjaWZpZXMgd2hldGhlciBvciBub3QgdGhlIGtleWJvYXJkIGNo YXJhY3RlciBzZXQgc2hvdWxkIGZvbGxvdyB0aGUiLAotIiAgYWN0aXZlIEdMIGFuZCBHUiBjaGFy YWN0ZXIgc2V0cy4gIFRoaXMgZmVhdHVyZSBpcyBPRkYgYnkgZGVmYXVsdCBhbmQiLAotIiAgc2hv dWxkIG5vdCBiZSB1c2VkIHVubGVzcyBpdCBpcyBzcGVjaWZpY2x5IHJlcXVpcmVkIGJ5IHRoZSBo b3N0IiwKLSIgIGFwcGxpY2F0aW9uLiIsCi0iICIsCi0KLSJTRVQgVEVSTUlOQUwgS0VZIDxtb2Rl PiAvTElURVJBTCA8a2V5Y29kZT4gPHRleHQ+IiwKLSJTRVQgVEVSTUlOQUwgS0VZIDxtb2RlPiBE RUZBVUxUIiwKLSJTRVQgVEVSTUlOQUwgS0VZIDxtb2RlPiBDTEVBUiIsCi0iICBDb25maWd1cmVz IHRoZSBrZXkgd2hvc2UgPGtleWNvZGU+IGlzIGdpdmVuIHRvIHNlbmQgdGhlIGdpdmVuIHRleHQg d2hlbiIsCi0iICBwcmVzc2VkIHdoaWxlIDxtb2RlPiBpcyBhY3RpdmUuICA8bW9kZT4gbWF5IGJl IGFueSBvZiB0aGUgdmFsaWQgdGVybWluYWwiLAotIiAgdHlwZXMgb3IgdGhlIHNwZWNpYWwgbW9k ZXMgXCJFTUFDU1wiLCBcIkhFQlJFV1wiIG9yIFwiUlVTU0lBTlwiLiAgREVGQVVMVCIsCi0iICBy ZXN0b3JlcyBhbGwgZGVmYXVsdCBrZXkgbWFwcGluZ3MgZm9yIHRoZSBzcGVjaWZpZWQgbW9kZS4g IENMRUFSIGVyYXNlcyIsCi0iICBhbGwgdGhlIGtleSBtYXBwaW5ncy4gIElmIHRoZXJlIGlzIG5v IHRleHQsIHRoZSBkZWZhdWx0IGtleSBiaW5kaW5nIGlzIiwKLSNpZm5kZWYgTk9DU0VUUwotIiAg cmVzdG9yZWQgZm9yIHRoZSBrZXkgay4gIFNFVCBURVJNSU5BTCBLRVkgbWFwcGluZ3MgdGFrZSBw bGFjZSBiZWZvcmUiLAotIiAgdGVybWluYWwgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbi4gIFNF VCBLRVkgbWFwcGluZ3MgdGFrZSBwcmVjZWRlbmNlIG92ZXIiLAotIiAgU0VUIFRFUk1JTkFMIEtF WSA8dGVybWluYWwgdHlwZT4gc2V0dGluZ3MuIiwKLSNlbHNlCi0iICByZXN0b3JlZCBmb3IgdGhl IGtleS4gIFNFVCBLRVkgbWFwcGluZ3MgdGFrZSBwcmVjZWRlbmNlIG92ZXIgU0VUIFRFUk1JTkFM IiwKLSIgIEtFWSA8dGVybWluYWwgdHlwZT4gc2V0dGluZ3MuIiwKLSNlbmRpZiAvKiBOT0NTRVRT ICovCi0iICBUaGUgL0xJVEVSQUwgc3dpdGNoIG1heSBiZSB1c2VkIHRvIGluc3RydWN0IEtlcm1p dCB0byBpZ25vcmUgY2hhcmFjdGVyLXNldCIsCi0iICB0cmFuc2xhdGlvbnMgd2hlbiBzZW5kaW5n IHRoaXMgZGVmaW5pdGlvbiB0byB0aGUgaG9zdC4iLAotIiAiLAotIiAgVGhlIHRleHQgbWF5IGNv bnRhaW4gXCJcXEt2ZXJic1wiIHRvIGRlbm90ZSBhY3Rpb25zLCB0byBzdGFuZCBmb3IgREVDIiwK LSIgIGtleXBhZCwgZnVuY3Rpb24sIG9yIGVkaXRpbmcga2V5cywgZXRjLiAgRm9yIGEgbGlzdCBv ZiBhdmFpbGFibGUga2V5Ym9hcmQiLAotIiAgdmVyYnMsIHR5cGUgU0hPVyBLVkVSQlMuIiwKLSIg IiwKLSIgIFRvIGZpbmQgb3V0IHRoZSBrZXljb2RlIGFuZCBtYXBwaW5nIGZvciBhIHBhcnRpY3Vs YXIga2V5LCB1c2UgdGhlIFNIT1ciLAotIiAgS0VZIGNvbW1hbmQuICBVc2UgdGhlIFNBVkUgS0VZ UyBjb21tYW5kIHRvIHNhdmUgYWxsIHNldHRpbmdzIHRvIGEgZmlsZS4iLAotIiAiLAotIlNFVCBU RVJNSU5BTCBLRVlCT0FSRC1NT0RFIHsgTk9STUFMLCBFTUFDUywgUlVTU0lBTiwgSEVCUkVXIH0i LAotIiAgU2VsZWN0IGEgc3BlY2lhbCBrZXlib2FyZCBtb2RlIGZvciB1c2UgaW4gdGhlIHRlcm1p bmFsIHNjcmVlbi4iLAotIiAiLAotCi0iU0VUIFRFUk1JTkFMIEtFWVBBRC1NT0RFIHsgQVBQTElD QVRJT04sIE5VTUVSSUMgfSIsCi0iICBTcGVjaWZpZXMgdGhlIFwibW9kZVwiIG9mIHRoZSBudW1l cmljIGtleXBhZCBmb3IgVlQgdGVybWluYWwgZW11bGF0aW9uLiIsCi0iICBVc2UgdGhpcyBjb21t YW5kIGluIGNhc2UgdGhlIGhvc3Qgb3IgYXBwbGljYXRpb24gd2FudHMgdGhlIGtleXBhZCB0byBi ZSIsCi0iICBpbiBhIGRpZmZlcmVudCBtb2RlIHRoYW4gaXQncyBpbiwgYnV0IGRpZCBub3Qgc2Vu ZCB0aGUgZXNjYXBlIHNlcXVlbmNlIiwKLSIgIHRvIHB1dCBpdCBpbiB0aGUgbmVlZGVkIG1vZGUu IiwKLSIgIiwKLQotI2VuZGlmCS8qIE9TMiAqLwotCi0iU0VUIFRFUk1JTkFMIExGLURJU1BMQVkg eyBDUkxGLCBOT1JNQUwgfSIsCi0iICBTcGVjaWZpZXMgaG93IGluY29taW5nIGxpbmVmZWVkIGNo YXJhY3RlcnMgYXJlIHRvIGJlIGRpc3BsYXllZCIsCi0iICBvbiB5b3VyIHNjcmVlbi4iLAotIiAi LAotCi0jaWZkZWYgT1MyCi0KLSNpZmRlZiBLVUkKLSJTRVQgVEVSTUlOQUwgTElORS1TUEFDSU5H IDxmbG9hdD4iLAotIiAgU3BlY2lmaWVzIHRoZSBsaW5lIHNwYWNpbmcgdXNlZCB3aGVuIGRpc3Bs YXlpbmcgdGV4dC4gIFRoZSBkZWZhdWx0IGlzIDEuMC4iLAotIiAgVmFsaWQgdmFsdWVzIHJhbmdl IGZyb20gMS4wIHRvIDMuMCBpbmNsdXNpdmUuIiwKLSIgIiwKLSNlbmRpZiAvKiBLVUkgKi8KLSNl bmRpZiAvKiBPUzIgKi8KLQotI2lmbmRlZiBOT0NTRVRTCi0jaWZkZWYgT1MyCi0iU0VUIFRFUk1J TkFMIExPQ0FMLUNIQVJBQ1RFUi1TRVQgPGxvY2FsLWNzPiIsCi0iICBTcGVjaWZpZXMgdGhlIGNo YXJhY3RlciBzZXQgdXNlZCBieSBLLTk1IGxvY2FsbHkuICBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSIs Ci0jaWZkZWYgT1MyT05MWQotIiAgdGhlIGxvY2FsIGNoYXJhY3Rlci1zZXQsIHRoZSBjdXJyZW50 IFRFUk1JTkFMIEZPTlQgaXMgdXNlZCBpZiB5b3UgaGF2ZSIsCi0iICBnaXZlbiBhIFNFVCBURVJN SU5BTCBGT05UIGNvbW1hbmQ7IG90aGVyd2lzZSB0aGUgY3VycmVudCBjb2RlcGFnZSBpcyB1c2Vk LiIsCi0jZWxzZQotIiAgdGhlIGxvY2FsIGNoYXJhY3Rlci1zZXQsIHRoZSBjdXJyZW50IGNvZGUg cGFnZSBpcyB1c2VkLiIsCi0jZW5kaWYgLyogT1MyT05MWSAqLwotIiAiLAotIiAgV2hlbiB0aGUg bG9jYWwgYW5kIHJlbW90ZSBjaGFyYWN0ZXIgc2V0cyBkaWZmZXIsIEtlcm1pdCB0cmFuc2xhdGVz IGJldHdlZW4iLAotIiAgdGhlbSBkdXJpbmcgQ09OTkVDVC4gIEJ5IGRlZmF1bHQsIHRoZSByZW1v dGUgY2hhcmFjdGVyIHNldCBpcyBMYXRpbjEgYW5kIiwKLSIgIHRoZSBsb2NhbCBvbmUgaXMgeW91 ciBjdXJyZW50IGNvZGUgcGFnZS4iLAotI2lmZGVmIE5UCi0iICIsCi0iICBJbiBXaW5kb3dzIE5U LCBVbmljb2RlIGlzIHVzZWQgYXMgdGhlIGxvY2FsIGNoYXJhY3Rlci1zZXQgcmVnYXJkbGVzcyBv ZiIsCi0iICB0aGlzIHNldHRpbmcuIiwKLSNlbmRpZiAvKiBOVCAqLwotIiAiLAotIlNlZSBhbHNv IFNFVCBURVJNSU5BTCBSRU1PVEUtQ0hBUkFDVEVSLVNFVCIsCi0iICIsCi0jZW5kaWYgLyogT1My ICovCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi0jaWZkZWYgT1MyCi0iU0VUIFRFUk1JTkFMIExP Q0tJTkctU0hJRlQgeyBPRkYsIE9OIH0iLAotIiAgVGVsbHMgd2hldGhlciB0byBzZW5kIFNoaWZ0 LUluL1NoaWZ0LU91dCAoQ3RybC1PIGFuZCBDdHJsLU4pIHRvIHN3aXRjaCIsCi0iICBiZXR3ZWVu IDctYml0IGFuZCA4LWJpdCBjaGFyYWN0ZXJzIHNlbnQgZHVyaW5nIHRlcm1pbmFsIGVtdWxhdGlv biBvdmVyIiwKLSIgIDctYml0IGNvbm5lY3Rpb25zLiAgT0ZGIGJ5IGRlZmF1bHQuIiwKLSNlbHNl Ci0iU0VUIFRFUk1JTkFMIExPQ0tJTkctU0hJRlQgeyBPRkYsIE9OIH0iLAotIiAgVGVsbHMgS2Vy bWl0IHdoZXRoZXIgdG8gdXNlIFNoaWZ0LUluL1NoaWZ0LU91dCAoQ3RybC1PIGFuZCBDdHJsLU4p IHRvIiwKLSIgIHN3aXRjaCBiZXR3ZWVuIDctYml0IGFuZCA4LWJpdCBjaGFyYWN0ZXJzIGR1cmlu ZyBDT05ORUNULiAgT0ZGIGJ5IGRlZmF1bHQuIiwKLSNlbmRpZiAvKiBPUzIgKi8KLSIgIiwKLQot I2lmZGVmIE9TMgotIlNFVCBURVJNSU5BTCBNQVJHSU4tQkVMTCB7IE9OIFtjb2x1bW5dLCBPRkYg fSIsCi0iICBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIG1hcmdpbi1iZWxsIGlzIGFjdGl2YXRlZCBh bmQgd2hhdCBjb2x1bW4gaXQgc2hvdWxkIiwKLSIgIHJpbmcgYXQuICBPRkYgYnkgZGVmYXVsdC4i LAotIiAiLAotI2VuZGlmIC8qIE9TMiAqLwotCi0iU0VUIFRFUk1JTkFMIE5FV0xJTkUtTU9ERSB7 IE9GRiwgT04gfSIsCi0iICBUZWxscyB3aGV0aGVyIHRvIHNlbmQgQ1JMRiAoQ2FycmlhZ2UgUmV0 dXJuIGFuZCBMaW5lIEZlZWQpIHdoZW4geW91IHR5cGUiLAotIiAgQ1IgKHByZXNzIHRoZSBSZXR1 cm4gb3IgRW50ZXIga2V5KSBpbiBDT05ORUNUIG1vZGUuIiwKLSIgIiwKLQotI2lmZGVmIE9TMgot IlNFVCBURVJNSU5BTCBPVVRQVVQtUEFDSU5HIDxtaWxsaXNlY29uZHM+IiwKLSIgIFRlbGxzIGhv dyBsb25nIHRvIHBhdXNlIGJldHdlZW4gc2VuZGluZyBlYWNoIGNoYXJhY3RlciB0byB0aGUgaG9z dCBkdXJpbmciLAotIiAgQ09OTkVDVCBtb2RlLiAgTm9ybWFsbHkgbm90IG5lZWRlZCBidXQgc29t ZXRpbWVzIHJlcXVpcmVkIHRvIHdvcmsgYXJvdW5kIiwKLSIgIFRSQU5TTUlTU0lPTiBCTE9DS0VE IGNvbmRpdGlvbnMgd2hlbiBwYXN0aW5nIGludG8gdGhlIHRlcm1pbmFsIHdpbmRvdy4iLAotIiAi LAotCi0jaWZkZWYgUENURVJNCi0iU0VUIFRFUk1JTkFMIFBDVEVSTSB7IE9OLCBPRkYgfSIsCi0i ICBBY3RpdmF0ZXMgb3IgZGVhY3RpdmF0ZXMgdGhlIFBDVEVSTSB0ZXJtaW5hbCBlbXVsYXRpb24g a2V5Ym9hcmQgbW9kZS4iLAotIiAgV2hlbiBQQ1RFUk0gaXMgT04gYWxsIGtleXN0cm9rZXMgaW4g dGhlIHRlcm1pbmFsIHNjcmVlbiBhcmUgc2VudCB0byB0aGUiLAotIiAgaG9zdCBhcyBtYWtlL2Jy ZWFrIChkb3duL3VwKSBjb2RlcyBpbnN0ZWFkIG9mIGFzIGNoYXJhY3RlcnMgZnJvbSB0aGUiLAot IiAgUkVNT1RFLUNIQVJBQ1RFUi1TRVQsIGFuZCBhbGwga2V5Ym9hcmQgbWFwcGluZ3MsIGluY2x1 ZGluZyBLdmVyYnMgYW5kIHRoZSIsCi0iICBlc2NhcGUgY2hhcmFjdGVyIGFyZSBkaXNhYmxlZC4g IFRvIHR1cm4gb2ZmIFBDVEVSTSBrZXlib2FyZCBtb2RlIHdoaWxlIGluIiwKLSIgIENPTk5FQ1Qg bW9kZSBwcmVzcyBDb250cm9sLUNhcHNMb2NrLiAgUENURVJNIGlzIE9GRiBieSBkZWZhdWx0LiIs Ci0iICIsCi0jZW5kaWYgLyogUENURVJNICovCi0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBP UzIKLSJTRVQgVEVSTUlOQUwgUFJJTlQgeyBBVVRPLCBDT1BZLCBPRkYsIFVTRVIgfSIsCi0iICBB bGxvd3Mgc2VsZWN0aXZlIGNvbnRyb2wgb2YgdmFyaW91cyB0eXBlcyBvZiBwcmludGluZyBmcm9t IHRoZSBUZXJtaW5hbCIsCi0iICBzZXNzaW9uLiAgQVVUTyBwcmludHMgYSBsaW5lIG9mIHRleHQg ZnJvbSB0aGUgdGVybWluYWwgc2NyZWVuIHdoZW5ldmVyIiwKLSIgIHRoZSBjdXJzb3IgaXMgbW92 ZWQgb2ZmIHRoZSBsaW5lLiAgQ09QWSBwcmludHMgZXZlcnkgYnl0ZSByZWNlaXZlZCBhcyIsCi0i ICBpdCBpcyByZWNlaXZlZCB3aXRob3V0IGludGVycHJldGF0aW9uLiAgVVNFUiBwcmludHMgZXZl cnkgYnl0ZSBhZnRlciIsCi0iICBpbnRlcnByZXRhdGlvbiBieSB0aGUgdGVybWluYWwgZW11bGF0 b3IgdHJhbnNsYXRlcyBjaGFyYWN0ZXItc2V0cyBhbmQiLAotIiAgY29uc3RydWN0IGVzY2FwZSBz ZXF1ZW5jZXMsIC4uLiAgVGhlIGRlZmF1bHQgaXMgT0ZGLiIsCi0iICIsCi0jZWxzZQotI2lmZGVm IFhQUklOVAotIlNFVCBURVJNSU5BTCBQUklOVCB7IE9OLCBPRkYgfSIsCi0iICBFbmFibGVzIGFu ZCBkaXNhYmxlcyBob3N0LWluaXRpYXRlZCB0cmFuc3BhcmVudCBwcmludGluZyBpbiBDT05ORUNU IG1vZGUuIiwKLSIgIiwKLSNlbmRpZiAvKiBYUFJJTlQgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQot I2lmZGVmIE9TMgotI2lmbmRlZiBOT0NTRVRTCi0iU0VUIFRFUk1JTkFMIFJFTU9URS1DSEFSQUNU RVItU0VUIDxyZW1vdGUtY3M+IFsgeyBHMCxHMSxHMixHMyB9Li4uIF0iLAotIiAgU3BlY2lmaWVz IHRoZSBjaGFyYWN0ZXIgc2V0IHVzZWQgYnkgdGhlIHJlbW90ZSBob3N0LCA8cmVtb3RlLWNzPi4i LAotIiAgV2hlbiB0aGUgbG9jYWwgYW5kIHJlbW90ZSBjaGFyYWN0ZXIgc2V0cyBkaWZmZXIsIEtl cm1pdCB0cmFuc2xhdGVzIiwKLSIgIGJldHdlZW4gdGhlbSBkdXJpbmcgQ09OTkVDVC4gIEJ5IGRl ZmF1bHQsIHRoZSByZW1vdGUgY2hhcmFjdGVyIHNldCBpcyIsCi0iICBMYXRpbjEgYW5kIHRoZSBs b2NhbCBvbmUgaXMgeW91ciBjdXJyZW50IGNvZGUgcGFnZS4gIE9wdGlvbmFsbHksIHlvdSBjYW4i LAotIiAgYWxzbyBkZXNpZ25hdGUgdGhlIGNoYXJhY3RlciBzZXQgdG8gdGhlIEcwLi5HMyBncmFw aGljIHRhYmxlcy4iLAotIiAiLAotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSNlbmRpZiAvKiBPUzIg Ki8KLQotI2lmZGVmIE9TMgotIlNFVCBURVJNSU5BTCBST0xMLU1PREUgeyBJTlNFUlQsIE9WRVJX UklURSwgS0VZU1RST0tFUyBbIG9wdGlvbiBdIH0iLAotIiAgVGVsbHMgd2hldGhlciBuZXcgZGF0 YSB3aGVuIHJlY2VpdmVkIGZyb20gdGhlIGhvc3QgaXMgZW50ZXJlZCBpbnRvIHRoZSIsCi0iICBz Y3JvbGxiYWNrIGJ1ZmZlciBhdCB0aGUgY3VycmVudCByb2xsYmFjayBwb3NpdGlvbiAoT1ZFUldS SVRFKSBvciBhdCB0aGUiLAotIiAgZW5kIG9mIHRoZSBidWZmZXIgKElOU0VSVCkuICBUaGUgZGVm YXVsdCBpcyBJTlNFUlQuICBUeXBpbmcgaXMgYWxsb3dlZCIsCi0iICBkdXJpbmcgcm9sbGJhY2tz IGluIGVpdGhlciBtb2RlLCBhY2NvcmRpbmcgdG8gU0VUIFRFUk0gUk9MTCBLRVlTVFJPS0VTOiIs Ci0iICBTRU5EICh0aGUgZGVmYXVsdCkgbWVhbnMgdG8gcHJvY2VzcyBrZXlzdHJva2VzIG5vcm1h bGx5OyBJR05PUkUgbWVhbnMgdG8iLAotIiAgaWdub3JlIHRoZW0gd2hlbiB0aGUgc2NyZWVuIGlz IHNjcm9sbGVkIGJhY2s7IFJFU1RPUkUtQU5ELVNFTkQgaXMgbGlrZSIsCi0iICBTRU5EIGJ1dCBy ZXN0b3JlcyB0aGUgc2NyZWVuIHRvIGl0cyBhY3RpdmUgcG9zaXRpb24gZmlyc3QuIiwKLSIgIiwK LQotIlNFVCBURVJNSU5BTCBTQ1JFRU4tTU9ERSB7IE5PUk1BTCwgUkVWRVJTRSB9IiwKLSIgIFdo ZW4gc2V0IHRvIFJFVkVSU0UgdGhlIGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY29sb3JzIGFy ZSBzd2FwcGVkIGFzIiwKLSIgIHdlbGwgYXMgdGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBmb3JlZ3Jv dW5kIGFuZCBiYWNrZ3JvdW5kIGludGVuc2l0eSBiaXRzLiIsCi0iICBUaGUgZGVmYXVsdCBpcyBO T1JNQUwuIiwKLSIgIiwKLQotIlNFVCBURVJNSU5BTCBTQ1JFRU4tT1BUSU1JWkUgeyBPTiwgT0ZG IH0iLAotIiAgV2hlbiBzZXQgdG8gT04sIHRoZSBkZWZhdWx0LCBLZXJtaXQgb25seSBwYWludHMg dGhlIHNjcmVlbiB3aXRoIGNoYXJhY3RlcnMiLAotIiAgdGhhdCBoYXZlIGNoYW5nZWQgc2luY2Ug dGhlIGxhc3Qgc2NyZWVuIHBhaW50LiAgV2hlbiBPRkYsIHRoZSBzY3JlZW4gaXMiLAotIiAgY29t cGxldGVseSByZXBhaW50ZWQgZWFjaCB0aW1lIHRoZXJlIGlzIGEgY2hhbmdlLiIsCi0iICIsCi0K LSJTRVQgVEVSTUlOQUwgU0NSRUVOLVVQREFURSB7IEZBU1QsIFNNT09USCB9IFsgPG1pbGxpc2Vj b25kcz4gXSIsCi0iICBDaG9vc2VzIHRoZSBtZWNoYW5pc20gdXNlZCBmb3Igc2NyZWVuIHVwZGF0 aW5nIGFuZCB0aGUgdXBkYXRlIGZyZXF1ZW5jeS4iLAotIiAgRGVmYXVsdHMgYXJlIEZBU1Qgc2Ny b2xsaW5nIHdpdGggdXBkYXRlcyBldmVyeSAxMDAgbWlsbGlzZWNvbmRzLiIsCi0iICIsCi0KLSJT RVQgVEVSTUlOQUwgU0NST0xMQkFDSyA8bGluZXM+IiwKLSIgIFNldHMgc2l6ZSBvZiBDT05ORUNU IHZpcnR1YWwgc2NyZWVuIGJ1ZmZlci4gIDxsaW5lcz4gaW5jbHVkZXMgdGhlIGFjdGl2ZSIsCi0i ICB0ZXJtaW5hbCBzY3JlZW4uICBUaGUgbWluaW11bSBpcyAyNTYuICBUaGUgbWF4aW11bSBpcyAy IG1pbGxpb24uICBUaGUiLAotIiAgZGVmYXVsdCBpcyAyMDAwLiIsCi0iICIsCi0KLSJTRVQgVEVS TUlOQUwgU0VORC1EQVRBIHsgT04sIE9GRiB9IiwKLSIgIERldGVybWluZXMgd2hldGhlciBBU0NJ SSBlbXVsYXRpb25zIHN1Y2ggYXMgV1lTRSAzMCw1MCw2MCBvciBUVkkgOTEwKyw5MjUsIiwKLSIg IDk1MCBtYXkgc2VuZCB0aGVpciBzY3JlZW4gY29udGVudHMgdG8gdGhlIGhvc3QgdXBvbiByZXF1 ZXN0LiAgQWxsb3dpbmcgdGhlIiwKLSIgIHNjcmVlbiB0byBiZSByZWFkIGJ5IHRoZSBob3N0IGlz IGEgc2lnbmlmaWNhbnQgc2VjdXJpdHkgcmlzay4gIFRoZSBkZWZhdWx0IiwKLSIgIGlzIE9GRiBh bmQgc2hvdWxkIG9ubHkgYmUgY2hhbmdlZCBhZnRlciBhIHNlY3VyaXR5IGV2YWx1YXRpb24gb2Yg aG9zdCIsCi0iICBlbnZpcm9ubWVudC4iLAotIiAiLAotCi0iU0VUIFRFUk1JTkFMIFNFTkQtRU5E LU9GLUJMT0NLIHsgQ1JMRl9FVFgsIFVTX0NSIH0iLAotIiAgRGV0ZXJtaW5lcyB3aGljaCBzZXQg b2YgY2hhcmFjdGVycyBzaG91bGQgYmUgdXNlZCBhcyBlbmQgb2YgbGluZSBhbmQgZW5kIiwKLSIg IG9mIHRyYW5zbWlzc2lvbiBpbmRpY2F0b3JzIHdoZW4gc2VuZGluZyBzY3JlZW4gZGF0YSB0byB0 aGUgaG9zdCIsCi0iICIsCi0KLSJTRVQgVEVSTUlOQUwgU0dSLUNPTE9SUyB7IE9OLCBPRkYgfSIs Ci0iICBPTiAoZGVmYXVsdCkgbWVhbnMgYWxsb3cgaG9zdCBjb250cm9sIG9mIGNvbG9yczsgT0ZG IG1lYW5zIGlnbm9yZSBob3N0IiwKLSIgIGVzY2FwZSBzZXF1ZW5jZXMgdG8gc2V0IGNvbG9yLiIs Ci0iICIsCi0KLSJTRVQgVEVSTUlOQUwgU05JLUNILkNPREUgeyBPTiwgT0ZGIH0iLAotIiAgVGhp cyBjb21tYW5kIGNvbnRyb2xzIHRoZSBzdGF0ZSBvZiB0aGUgQ0guQ09ERSBrZXkuICBJdCBpcyB0 aGUgZXF1aXZhbGVudCIsCi0iICB0byB0aGUgU05JX0NIX0NPREUgS2V5Ym9hcmQgdmVyYi4gIFRo ZSBTTkkgdGVybWluYWwgdXNlcyBDSC5DT0RFIHRvIiwKLSIgIGVhc2lseSBzd2l0Y2ggYmV0d2Vl biB0aGUgTmF0aW9uYWwgTGFuZ3VhZ2UgY2hhcmFjdGVyIHNldCBhbmQgVS5TLiBBU0NJSS4iLAot IiAgVGhlIGRlZmF1bHQgaXMgT04gd2hpY2ggbWVhbnMgdG8gZGlzcGxheSBjaGFyYWN0ZXJzIGFz IFUuUy4gQVNDSUkuICBXaGVuIiwKLSIgIE9GRiB0aGUgbGFudWFnZSBzcGVjaWZpZWQgYnkgU0VU IFRFUk1JTkFMIFNOSS1MQU5VQUdFIGlzIHVzZWQgdG8gZGlzcGxheSIsCi0iICBjaGFyYWN0ZXJz IHdoZW4gNy1iaXQgY2hhcmFjdGVyIHNldHMgYXJlIGluIHVzZS4iLAotIiAiLAotIlNFVCBURVJN SU5BTCBTTkktRklSTVdBUkUtVkVSU0lPTlMgPGtiZC12ZXJzaW9uPiA8dGVybWluYWwtdmVyc2lv bj4iLAotIiAgU3BlY2lmaWVzIHRoZSBGaXJtd2FyZSBWZXJzaW9uIG51bWJlciB0aGF0IHNob3Vs ZCBiZSByZXBvcnRlZCB0byB0aGUgaG9zdCIsCi0iICB3aGVuIHRoZSB0ZXJtaW5hbCBpcyBxdWVy aWVkLiAgVGhlIGRlZmF1bHQgaXMgOTIwMDMxIGZvciB0aGUga2V5Ym9hcmQiLAotIiAgYW5kIDgz MDg1MSBmb3IgdGhlIHRlcm1pbmFsLiIsCi0iICIsCi0iU0VUIFRFUk1JTkFMIFNOSS1MQU5HVUFH RSA8bmF0aW9uYWwtbGFuZ3VhZ2U+IiwKLSIgIEFuIGFsaWFzIGZvciBTRVQgVEVSTUlOQUwgVlQt TEFOVUFHRSwgdGhpcyBjb21tYW5kIHNwZWNpZmllcyB0aGUgbmF0aW9uYWwiLAotIiAgbGFuZ3Vh Z2UgY2hhcmFjdGVyLXNldCB0aGF0IHNob3VsZCBiZSB1c2VkIHdoZW4gdGhlIE5SQyBtb2RlIGlz IGFjdGl2YXRlZCIsCi0iICBmb3IgVlQgZW11bGF0aW9ucyBvciB3aGVuIENILkNPREUgaXMgT0ZG IGZvciBTTkkgZW11bGF0aW9ucy4gIFRoZSBkZWZhdWx0IiwKLSIgIGxhbmd1YWdlIGZvciBTRVQg VEVSTUlOQUwgVFlQRSBTTkktOTc4MDEgaXMgXCJHZXJtYW5cIi4iLAotIiAiLAotIlNFVCBURVJN SU5BTCBTTkktUEFHRU1PREUgeyBPTiwgT0ZGIH0iLAotIiAgRGV0ZXJtaW5lcyB3aGV0aGVyIG9y IG5vdCBwYWdlIG1vZGUgaXMgYWN0aXZlLiAgT0ZGIGJ5IGRlZmF1bHQuIiwKLSIgIiwKLSJTRVQg VEVSTUlOQUwgU05JLVNDUk9MTE1PREUgeyBPTiwgT0ZGIH0iLAotIiAgRGV0ZXJtaW5lcyB3aGV0 aGVyIG9yIG5vdCBzY3JvbGwgbW9kZSBpcyBhY3RpdmUuICBPRkYgYnkgZGVmYXVsdC4iLAotIiAi LAotIlNFVCBURVJNSU5BTCBTVEFUVVNMSU5FIHsgT04sIE9GRiB9IiwKLSIgIE9OIChkZWZhdWx0 KSBlbmFibGVzIHRoZSBLZXJtaXQgc3RhdHVzIGxpbmUgaW4gdGhlIHRlcm1pbmFsIHNjcmVlbi4i LAotIiAgT0ZGIHJlbW92ZXMgaXQsIG1ha2luZyB0aGUgbGluZSBhdmFpbGFibGUgZm9yIHVzZSBi eSB0aGUgaG9zdC4iLAotIiAiLAotCi0iU0VUIFRFUk1JTkFMIFRSQU5TTUlULVRJTUVPVVQgPHNl Y29uZHM+IiwKLSIgIFNwZWNpZmllcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSBLLTk1IHdh aXRzIGJlZm9yZSByZXR1cm5pbmcgdG8gdGhlIiwKLSIgIHByb21wdCBpZiB5b3VyIGtleXN0cm9r ZXMgY2FuJ3QgYmUgdHJhbnNtaXR0ZWQgZm9yIHNvbWUgcmVhc29uLCBzdWNoIGFzIGEiLAotIiAg Zmxvdy1jb250cm9sIGRlYWRsb2NrLiIsCi0iICIsCi0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRl ZiBDS19UUklHR0VSCi0iU0VUIFRFUk1JTkFMIFRSSUdHRVIgPHN0cmluZz4iLAotIiAgU3BlY2lm aWVzIGEgc3RyaW5nIHRoYXQsIHdoZW4gZGV0ZWN0ZWQgZHVyaW5nIGFueSBzdWJzZXF1ZW50IENP Tk5FQ1QiLAotIiAgc2Vzc2lvbiwgaXMgdG8gY2F1c2UgYXV0b21hdGljIHJldHVybiB0byBjb21t YW5kIG1vZGUuICBHaXZlIHRoaXMgY29tbWFuZCIsCi0iICB3aXRob3V0IGEgc3RyaW5nIHRvIGNh bmNlbCB0aGUgY3VycmVudCB0cmlnZ2VyLiAgU2VlIEhFTFAgQ09OTkVDVCBmb3IiLAotIiAgYWRk aXRpb25hbCBpbmZvcm1hdGlvbi4iLAotIiAiLAotI2VuZGlmIC8qIENLX1RSSUdHRVIgKi8KLQot I2lmZGVmIE9TMgotIlNFVCBURVJNSU5BTCBVUkwtSElHSExJR0hUIHsgT04gPGF0dHJpYnV0ZT4s IE9GRiB9IiwKLSIgIFNwZWNpZmllcyB3aGV0aGVyIEstOTUgc2hvdWxkIGhpZ2hsaWdodCBVUkxz IGFuZCB3aGljaCBzY3JlZW4gYXR0cmlidXRlIiwKLSIgIHNob3VsZCBiZSB1c2VkLiAgVGhlIHNj cmVlbiBhdHRyaWJ1dGVzIGNhbiBiZSBvbmUgb2YgTk9STUFMLCBCTElOSywgQk9MRCwiLAotIiAg RElNLCBJTlZJU0lCTEUsIFJFVkVSU0UsIG9yIFVOREVSTElORS4gIFRoZSBkZWZhdWx0IGlzIE9O IHVzaW5nIHRoZSIsCi0iICBCT0xEIHNjcmVlbiBhdHRyaWJ1dGUuIiwKLSIgIiwKLSJTRVQgVEVS TUlOQUwgVklERU8tQ0hBTkdFIHsgRElTQUJMRUQsIEVOQUJMRUQgfSIsCi0iICBTcGVjaWZpZXMg d2hldGhlciBLLTk1IHNob3VsZCBjaGFuZ2UgdmlkZW8gbW9kZXMgYXV0b21hdGljYWxseSBpbiBy ZXNwb25zZSIsCi0jaWZkZWYgTlQKLSIgIHRvIGVzY2FwZSBzZXF1ZW5jZXMgZnJvbSB0aGUgb3Ro ZXIgY29tcHV0ZXIuICBFTkFCTEVEIGJ5IGRlZmF1bHQgKGV4Y2VwdCIsCi0iICBvbiBXaW5kb3dz IDk1KS4iLAotI2Vsc2UgLyogTlQgKi8KLSIgIHRvIGVzY2FwZSBzZXF1ZW5jZXMgZnJvbSB0aGUg b3RoZXIgY29tcHV0ZXIuICBFTkFCTEVEIGJ5IGRlZmF1bHQuIiwKLSNlbmRpZiAvKiBOVCAqLwot IiAiLAotCi0iU0VUIFRFUk1JTkFMIFZULUxBTkdVQUdFIDxsYW5ndWFnZT4iLAotIiAgU3BlY2lm aWVzIHRoZSBOYXRpb25hbCBSZXBsYWNlbWVudCBDaGFyYWN0ZXIgU2V0IChOUkMpIHRvIGJlIHVz ZWQgd2hlbiIsCi0iICBOUkMgbW9kZSBpcyBhY3RpdmF0ZWQuICBUaGUgZGVmYXVsdCBpcyBcIk5v cnRoIEFtZXJpY2FuXCIuIiwKLSIgIiwKLSJTRVQgVEVSTUlOQUwgVlQtTlJDLU1PREUgeyBPTiwg T0ZGIH0iLAotIiAgT0ZGIChkZWZhdWx0KSBjaG9vc2VzIFZUIG11bHRpbmF0aW9uYWwgQ2hhcmFj dGVyIFNldCBtb2RlLiAgT0ZGIGNob29zZXMiLAotIiAgVlQgTmF0aW9uYWwgUmVwbGFjZW1lbnQg Q2hhcmFjdGVyLXNldCBtb2RlLiAgVGhlIE5SQyBpcyBzZWxlY3RlZCB3aXRoIiwKLSIgIFNFVCBU RVJNSU5BTCBWVC1MQU5HVUFHRSIsCi0iICIsCi0KLSNpZmRlZiBOVAotIlNFVCBURVJNSU5BTCBX SURUSCA8Y29scz4iLAotIiAgVGVsbHMgdGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSB0ZXJt aW5hbCBzY3JlZW4uIiwKLSIgIiwKLSIgIFRoZSBkZWZhdWx0IGlzIDgwLiAgWW91IGNhbiBhbHNv IHVzZSAxMzIuICBPdGhlciB3aWR0aHMgY2FuIGJlIGNob3NlbiBidXQiLAotIiAgYXJlIHVzdWFs bHkgbm90IHN1cHBvcnRlZCBieSBob3N0IHNvZnR3YXJlLiIsCi0iICIsCi0jZWxzZQotIlNFVCBU RVJNSU5BTCBXSURUSCA8Y29scz4iLAotIiAgVGVsbHMgaG93IG1hbnkgY29sdW1ucyBkZWZpbmUg dGhlIHRlcm1pbmFsIHNpemUuIiwKLSIgIiwKLSJEZWZhdWx0IGlzIDgwLiAgSW4gV2luZG93ZWQg T1MvMiAyLnggc2Vzc2lvbnMsIHRoaXMgdmFsdWUgbWF5IG5vdCBiZSBjaGFuZ2VkIiwKLSJJbiBX aW5kb3dlZCBPUy8yIFdBUlAgMy54IHNlc3Npb25zLCB0aGlzIHZhbHVlIG1heSByYW5nZSBmcm9t IDIwIHRvIDI1NS4iLAotIkluIEZ1bGwgc2NyZWVuIHNlc3Npb25zLCB2YWx1ZXMgb2YgNDAsIDgw LCBhbmQgMTMyIGFyZSB2YWxpZC4gIE5vdCBhbGwiLAotImNvbWJpbmF0aW9ucyBvZiBoZWlnaHQg YW5kIHdpZHRoIGFyZSBzdXBwb3J0ZWQgb24gYWxsIGFkYXB0ZXJzLiIsCi0iICIsCi0jZW5kaWYg LyogTlQgKi8KLSJTRVQgVEVSTUlOQUwgV1JBUCB7IE9GRiwgT04gfSIsCi0iICBUZWxscyB3aGV0 aGVyIHRoZSB0ZXJtaW5hbCBlbXVsYXRvciBzaG91bGQgYXV0b21hdGljYWxseSB3cmFwIGxvbmcg bGluZXMiLAotIiAgb24geW91ciBzY3JlZW4uIiwKLSIgIiwKLSNlbHNlCi0KLSJTRVQgVEVSTUlO QUwgV0lEVEggPG51bWJlcj4iLAotIiBcCi1UZWxscyBLZXJtaXQgaG93IG1hbnkgY29sdW1ucyAo Y2hhcmFjdGVycykgYXJlIG9uIHlvdXIgQ09OTkVDVC1tb2RlIHNjcmVlbi4iLAotIiAiLAotI2Vu ZGlmIC8qIE9TMiAqLwotIlR5cGUgU0hPVyBURVJNSU5BTCB0byBzZWUgY3VycmVudCB0ZXJtaW5h bCBzZXR0aW5ncy4iLAotIiIgfTsKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSNpZmRlZiBORVRD T05OCi1zdGF0aWMgY2hhciAqaHh5aG9zdFtdID0gewotIlNFVCBIT1NUIFsgc3dpdGNoZXMgXSBo b3N0bmFtZS1vci1hZGRyZXNzIFsgc2VydmljZSBdIFsgcHJvdG9jb2wtc3dpdGNoIF0iLAotIiAg RXN0YWJsaXNoZXMgYSBjb25uZWN0aW9uIHRvIHRoZSBzcGVjaWZpZWQgbmV0d29yayBob3N0IG9u IHRoZSBjdXJyZW50bHkiLAotIiAgc2VsZWN0ZWQgbmV0d29yayB0eXBlLiAgRm9yIFRDUC9JUCBj b25uZWN0aW9ucywgdGhlIGRlZmF1bHQgc2VydmljZSBpcyIsCi0iICBURUxORVQ7IHNwZWNpZnkg YSBkaWZmZXJlbnQgVENQIHBvcnQgbnVtYmVyIG9yIHNlcnZpY2UgbmFtZSB0byBjaG9vc2UgYSIs Ci0iICBkaWZmZXJlbnQgc2VydmljZS4gIFRoZSBmaXJzdCBzZXQgb2Ygc3dpdGNoZXMgY2FuIGJl OiIsCi0iICIsCi0iIC9ORVRXT1JLLVRZUEU6bmFtZSIsCi0iICAgTWFrZXMgdGhlIGNvbm5lY3Rp b24gb24gdGhlIGdpdmVuIHR5cGUgb2YgbmV0d29yay4gIEVxdWl2YWxlbnQgdG8gU0VUIiwKLSIg ICBORVRXT1JLIFRZUEUgbmFtZSBwcmlvciB0byBTRVQgSE9TVCwgZXhjZXB0IHRoYXQgdGhlIHNl bGVjdGVkIG5ldHdvcmsiLAotIiAgIHR5cGUgaXMgdXNlZCBvbmx5IGZvciB0aGlzIGNvbm5lY3Rp b24uICBUeXBlIFwic2V0IGhvc3QgL25ldDo/XCIgdG8gc2VlIiwKLSNpZmRlZiBORVRDTUQKLSIg ICBhIGxpc3QuICAvTkVUV09SSy1UWVBFOkNPTU1BTkQgbWVhbnMgdG8gbWFrZSB0aGUgY29ubmVj dGlvbiB0aHJvdWdoIHRoZSIsCi0iICAgZ2l2ZW4gc3lzdGVtIGNvbW1hbmQsIHN1Y2ggYXMgXCJy bG9naW5cIiBvciBcImN1XCIuIiwKLSNlbHNlCi0iICAgYSBsaXN0LiIsCi0jZW5kaWYgLyogTkVU Q01EICovCi0iICIsCi0iIC9DT05ORUNUIiwKLSIgICBcCi1FbnRlciBDT05ORUNUICh0ZXJtaW5h bCkgbW9kZSBhdXRvbWF0aWNhbGx5IGlmIHRoZSBjb25uZWN0aW9uIGlzIHN1Y2Nlc3NmdWwuIiwK LSIgIiwKLSIgL1NFUlZFUiIsCi0iICAgRW50ZXIgc2VydmVyIG1vZGUgYXV0b21hdGljYWxseSBp ZiB0aGUgY29ubmVjdGlvbiBpcyBzdWNjZXNzZnVsLiIsCi0iICIsCi0iIC9VU0VSSUQ6WzxuYW1l Pl0iLAotIiAgIFRoaXMgc3dpdGNoIGlzIGVxdWl2YWxlbnQgdG8gU0VUIExPR0lOIFVTRVJJRCA8 bmFtZT4gb3IgU0VUIFRFTE5FVCIsCi0iICAgRU5WSVJPTk1FTlQgVVNFUiA8bmFtZT4uICBJZiBh IHN0cmluZyBpcyBnaXZlbiwgaXQgc2VudCB0byBob3N0IGR1cmluZyIsCi0iICAgVGVsbmV0IG5l Z290aWF0aW9uczsgaWYgdGhpcyBzd2l0Y2ggaXMgZ2l2ZW4gYnV0IHRoZSBzdHJpbmcgaXMgb21p dHRlZCwiLAotIiAgIG5vIHVzZXIgSUQgaXMgc2VudCB0byB0aGUgaG9zdC4gIElmIHRoaXMgc3dp dGNoIGlzIG5vdCBnaXZlbiwgeW91ciIsCi0iICAgY3VycmVudCBVU0VSSUQgdmFsdWUsIFxcdih1 c2VyaWQpLCBpcyBzZW50LiAgV2hlbiBhIHVzZXJpZCBpcyBzZW50IHRvIHRoZSIsCi0iICAgaG9z dCBpdCBpcyBhIHJlcXVlc3QgdG8gbG9naW4gYXMgdGhlIHNwZWNpZmllZCB1c2VyLiIsCi0iICIs Ci0jaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KLSIgL1BBU1NXT1JEOls8c3RyaW5nPl0iLAotIiAg IFRoaXMgc3dpdGNoIGlzIGVxdWl2YWxlbnQgdG8gU0VUIExPR0lOIFBBU1NXT1JELiAgSWYgYSBz dHJpbmcgaXMgZ2l2ZW4sIiwKLSIgICBpdCBpcyB0cmVhdGVkIGFzIHRoZSBwYXNzd29yZCB0byBi ZSB1c2VkIChpZiByZXF1aXJlZCkgYnkgYW55IFRlbG5ldCIsCi0iICAgQXV0aGVudGljYXRpb24g cHJvdG9jb2wgKEtlcmJlcm9zIFRpY2tldCByZXRyaWV2YWwsIFNlY3VyZSBSZW1vdGUiLAotIiAg IFBhc3N3b3JkLCBvciBYLjUwOSBjZXJ0aWZpY2F0ZSBwcml2YXRlIGtleSBkZWNyeXB0aW9uLikg IElmIG5vIHBhc3N3b3JkIiwKLSIgICBzd2l0Y2ggaXMgc3BlY2lmaWVkIGEgcHJvbXB0IGlzIGlz c3VlZCB0byByZXF1ZXN0IHRoZSBwYXNzd29yZCBpZiBvbmUiLAotIiAgIGlzIHJlcXVpcmVkIGZv ciB0aGUgbmVnb3RpYXRlZCBhdXRoZW50aWNhdGlvbiBtZXRob2QuIiwKLSIgIiwKLSNlbmRpZiAv KiBDS19BVVRIRU5USUNBVElPTiAqLwotIlRoZSBwcm90b2NvbC1zd2l0Y2hlcyBjYW4gYmU6IiwK LSIgIiwKLSIgL05PLVRFTE5FVC1JTklUIiwKLSIgICBEbyBub3Qgc2VuZCBpbml0aWFsIFRlbG5l dCBuZWdvdGlhdGlvbnMgZXZlbiBpZiB0aGlzIGlzIGEgVGVsbmV0IHBvcnQuIiwKLSIgIiwKLSIg L1JBVy1TT0NLRVQiLAotIiAgIFRoaXMgaXMgYSBjb25uZWN0aW9uIHRvIGEgcmF3IFRDUCBzb2Nr ZXQuIiwKLSIgIiwKLSNpZmRlZiBSTE9HQ09ERQotIiAvUkxPR0lOIiwKLSIgICBVc2UgUmxvZ2lu IHByb3RvY29sIGV2ZW4gaWYgdGhpcyBpcyBub3QgYW4gUmxvZ2luIHBvcnQuIiwKLSIgIiwKLSNl bmRpZiAvKiBSTE9HQ09ERSAqLwotIiAvVEVMTkVUIiwKLSIgICBTZW5kIGluaXRpYWwgVGVsbmV0 IG5lZ290aWF0aW9ucyBldmVuIGlmIHRoaXMgaXMgbm90IGEgVGVsbmV0IHBvcnQuIiwKLSIgIiwK LSNpZmRlZiBDS19LRVJCRVJPUwotI2lmZGVmIFJMT0dDT0RFCi0jaWZkZWYgS1JCNAotIiAvSzRM T0dJTiIsCi0iICAgVXNlIEtlcmJlcm9zIElWIGtsb2dpbiBwcm90b2NvbCBldmVuIGlmIHRoaXMg aXMgbm90IGEga2xvZ2luIHBvcnQuIiwKLSIgIiwKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0iIC9F SzRMT0dJTiIsCi0iICAgVXNlIEtlcmJlcm9zIElWIEVuY3J5cHRlZCBsb2dpbiBwcm90b2NvbCBl dmVuIGlmIHRoaXMgaXMgbm90IGFuIGVrbG9naW4iLAotIiAgIHBvcnQuIiwKLSIgIiwKLSNlbmRp ZiAvKiBDS19FTkNSWVBUSU9OICovCi0jZW5kaWYgLyogS1JCNCAqLwotI2lmZGVmIEtSQjUKLSIg L0s1TE9HSU4iLAotIiAgIFVzZSBLZXJiZXJvcyBWIGtsb2dpbiBwcm90b2NvbCBldmVuIGlmIHRo aXMgaXMgbm90IGEga2xvZ2luIHBvcnQuIiwKLSIgIiwKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0i IC9FSzVMT0dJTiIsCi0iICAgVXNlIEtlcmJlcm9zIFYgRW5jcnlwdGVkIGxvZ2luIHByb3RvY29s IGV2ZW4gaWYgdGhpcyBpcyBub3QgYW4gZWtsb2dpbiIsCi0iICAgcG9ydC4iLAotIiAiLAotI2Vu ZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNlbmRpZiAvKiBLUkI1ICovCi0jZW5kaWYgLyogUkxP R0NPREUgKi8KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotI2lmZGVmIENLX1NTTAotIiAvU1NM IiwKLSIgICBQZXJmb3JtIFNTTCBuZWdvdGlhdGlvbnMuIiwKLSIgIiwKLSIgL1NTTC1URUxORVQi LAotIiAgIFBlcmZvcm0gU1NMIG5lZ290aWF0aW9ucyBhbmQgaWYgc3VjY2Vzc2Z1bCBzdGFydCBU ZWxuZXQgbmVnb3RpYXRpb25zLiIsCi0iICIsCi0iIC9UTFMiLAotIiAgIFBlcmZvcm0gVExTIG5l Z290aWF0aW9ucy4iLAotIiAiLAotIiAvVExTLVRFTE5FVCIsCi0iICAgUGVyZm9ybSBUTFMgbmVn b3RpYXRpb25zIGFuZCBpZiBzdWNjZXNzZnVsIHN0YXJ0IFRlbG5ldCBuZWdvdGlhdGlvbnMuIiwK LSIgIiwKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSJFeGFtcGxlczoiLAotIiAgU0VUIEhPU1Qga2Vy bWl0LmNvbHVtYmlhLmVkdSIsCi0iICBTRVQgSE9TVCAvQ09OTkVDVCBrZXJtaXQuY29sdW1iaWEu ZWR1IiwKLSIgIFNFVCBIT1NUICogMTY0OSIsCi0iICBTRVQgSE9TVCAvU0VSVkVSICogMTY0OSIs Ci0iICBTRVQgSE9TVCAxMjguNTkuMzkuMiIsCi0iICBTRVQgSE9TVCBtYWRsYWIuc3BybC51bWlj aC5lZHUgMzAwMCIsCi0iICBTRVQgSE9TVCB4eXpjb3JwLmNvbSAyMDAwIC9SQVctU09DS0VUIiwK LSNpZmRlZiBTU0hCVUlMVElOCi0iICBTRVQgSE9TVCAvTkVUOlNTSCBrZXJtaXQuY29sdW1iaWEu ZWR1IC94MTEtZm9yd2FyZGluZzpvbiIsIAotI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KLSNpZmRl ZiBORVRDTUQKLSIgIFNFVCBIT1NUIC9DT05ORUNUIC9DT01NQU5EIHJsb2dpbiB4eXpjb3JwLmNv bSIsCi0jZW5kaWYgLyogTkVUQ01EICovCi0iICIsCi0jaWZkZWYgU1VQRVJMQVQKLSJOb3Rlczoi LAotIiAiLAotIiAuIFRoZSBURUxORVQgY29tbWFuZCBpcyBlcXVpdmFsZW50IHRvIFNFVCBORVRX T1JLIFRZUEUgVENQL0lQLCIsCi0iICAgU0VUIEhPU1QgbmFtZSBbIHBvcnQgXSAvVEVMTkVULCBJ RiBTVUNDRVNTIENPTk5FQ1QiLAotIiAiLAotIiAuIEZvciBTVVBFUkxBVCBjb25uZWN0aW9ucywg dGhlIGhvc3RuYW1lLW9yLWFkZHJlc3MgbWF5IGJlIGVpdGhlciBhIHNlcnZpY2UiLAotIiAgIG5h bWUsIG9yIGEgbm9kZS9wb3J0IGNvbWJpbmF0aW9uLCBhcyByZXF1aXJlZCBieSB5b3VyIExBVCBo b3N0LiIsCi0jZWxzZQotIlRoZSBURUxORVQgY29tbWFuZCBpcyBlcXVpdmFsZW50IHRvIFNFVCBO RVRXT1JLIFRZUEUgVENQL0lQLCIsCi0iU0VUIEhPU1QgbmFtZSBbIHBvcnQgXSAvVEVMTkVULCBJ RiBTVUNDRVNTIENPTk5FQ1QiLAotI2VuZGlmIC8qIFNVUEVSTEFUICovCi0iICIsCi0iQWxzbyBz ZWUgU0VUIE5FVFdPUkssIFRFTE5FVCwgU0VUIFRFTE5FVC4iLAotIiIgfTsKLQotc3RhdGljIGNo YXIgKmhteHlhdXRoW10gPSB7Ci0iU3luYXR4OiBTRVQgQVVUSEVOVElDQVRJT04gPGF1dGhfdHlw ZT4gPHBhcmFtZXRlcj4gPHZhbHVlPiIsCi0iICBTZXRzIGRlZmF1bHRzIGZvciB0aGUgQVVUSEVO VElDQVRFIGNvbW1hbmQ6IiwKLSIgIiwKLSNpZmRlZiBDS19LRVJCRVJPUwotIlNFVCBBVVRIRU5U SUNBVElPTiBLRVJCRVJPUzUgQUREUkVTU0VTIHtsaXN0IG9mIGlwLWFkZHJlc3Nlc30iLAotIiAg U3BlY2lmaWVzIGEgbGlzdCBvZiBJUCBhZGRyZXNzZXMgdGhhdCBzaG91bGQgYmUgcGxhY2VkIGlu IHRoZSBUaWNrZXQiLAotIiAgR2V0dGluZyBUaWNrZXQgaW4gYWRkaXRpb24gdG8gdGhlIGxvY2Fs IG1hY2hpbmUgYWRkcmVzc2VzLiIsCi0iICIsCi0iU0VUIEFVVEhFTlRJQ0FUSU9OIHsgS0VSQkVS T1M0LCBLRVJCRVJPUzUgfSBBVVRPREVTVFJPWSIsCi0iICB7IE9OLUNMT1NFLCBPTi1FWElULCBO RVZFUiB9IiwKLSIgIFdoZW4gT04sIEtlcm1pdCB3aWxsIGRlc3Ryb3kgYWxsIGNyZWRlbnRpYWxz IGluIHRoZSBkZWZhdWx0IiwKLSIgIGNyZWRlbnRpYWxzIGNhY2hlIHVwb24gS2VybWl0IHRlcm1p bmF0aW9uLiAgRGVmYXVsdCBpcyBORVZFUi4iLAotIiAiLAotIlNFVCBBVVRIRU5USUNBVElPTiB7 IEtFUkJFUk9TNCwgS0VSQkVST1M1IH0gQVVUT0dFVCB7IE9OLCBPRkYgfSIsCi0iICBXaGVuIE9O LCBpZiB0aGUgaG9zdCBvZmZlcnMgS2VyYmVyb3MgNCBvciBLZXJiZXJvcyA1IGF1dGhlbnRpY2F0 aW9uIiwKLSIgIGFuZCBLZXJtaXQgaXMgY29uZmlndXJlZCB0byB1c2UgdGhhdCBhdXRoZW50aWNh dGlvbiBtZXRob2QgYW5kIHRoZXJlIiwKLSIgIGlzIG5vIFRHVCwgS2VybWl0IHdpbGwgYXV0b21h dGljYWxseSBhdHRlbXB0IHRvIHJldHJpZXZlIG9uZSBieSIsCi0iICBwcm9tcHRpbmcgZm9yIHRo ZSBwYXNzd29yZCAoYW5kIHByaW5jaXBhbCBpZiBuZWVkZWQuKSAgRGVmYXVsdCBpcyBPTi4iLAot IiAiLAotIlNFVCBBVVRIRU5USUNBVElPTiBLRVJCRVJPUzUgQ1JFREVOVElBTFMtQ0FDSEUgPGZp bGVuYW1lPiIsCi0iICBBbGxvd3MgYW4gYWx0ZXJuYXRpdmUgY3JlZGVudGlhbHMgY2FjaGUgdG8g YmUgc3BlY2lmaWVkLiAgVGhpcyBpcyB1c2VmdWwiLAotIiAgd2hlbiB5b3UgbmVlZCB0byBtYWlu dGFpbiB0d28gb3IgbW9yZSBzZXRzIG9mIGNyZWRlbnRpYWxzIGZvciBkaWZmZXJlbnQiLAotIiAg cmVhbG1zIG9yIHJvbGVzLiAgVGhlIGRlZmF1bHQgaXMgc3BlY2lmaWVkIGJ5IHRoZSBlbnZpcm9u bWVudCB2YXJpYWJsZSIsCi0iICBLUkI1Q0NOQU1FIG9yIGFzIHJlcG9ydGVkIGJ5IHRoZSBLZXJi ZXJvcyA1IGxpYnJhcnkuIiwKLSIgIiwKLSJTRVQgQVVUSEVOVElDQVRJT04gS0VSQkVST1M1IEZP UldBUkRBQkxFIHsgT04sIE9GRiB9IiwKLSIgIFdoZW4gT04sIHNwZWNpZmllcyB0aGF0IEtlcmJl cm9zIDUgY3JlZGVudGlhbHMgc2hvdWxkIGJlIGZvcndhcmRhYmxlIHRvIiwKLSIgIHRoZSBob3N0 LiAgSWYgU0VUIFRFTE5FVCBBVVRIRU5USUNBVElPTiBGT1JXQVJESU5HIGlzIE9OLCBmb3J3YXJk YWJsZSIsCi0iICBjcmVkZW50aWFscyBhcmUgc2VudCB0byB0aGUgaG9zdC4gIFRoZSBkZWZhdWx0 IGlzIE9GRi4iLAotIiAiLAotIlNFVCBBVVRIRU5USUNBVElPTiBLRVJCRVJPUzUgR0VULUs0LVRH VCB7IE9OLCBPRkYgfSIsCi0iICBXaGVuIE9OLCBzcGVjaWZpZXMgdGhhdCBLZXJiZXJvcyA0IGNy ZWRlbnRpYWxzIHNob3VsZCBiZSByZXF1ZXN0ZWQgZWFjaCIsCi0iICB0aW1lIEtlcmJlcm9zIDUg Y3JlZGVudGlhbHMgYXJlIHJlcXVlc3RlZCB3aXRoIEFVVEggS0VSQkVST1M1IElOSVQuIiwKLSIg IERlZmF1bHQgaXMgT0ZGLiIsCi0iICIsCi0iU0VUIEFVVEhFTlRJQ0FUSU9OIEtFUkJFUk9TNCBJ TlNUQU5DRSA8aW5zdGFuY2U+IiwKLSIgIEFsbG93cyBhIEtlcmJlcm9zIDQgaW5zdGFuY2UgdG8g YmUgc3BlY2lmaWVkIGFzIGEgZGVmYXVsdCAoaWYgbmVlZGVkKS4iLAotIiAiLAotIlNFVCBBVVRI RU5USUNBVElPTiB7IEtFUkJFUk9TNCwgS0VSQkVST1M1IH0gS0VZVEFCIDxmaWxlbmFtZT4iLAot IiAgU3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiB0aGUga2V5dGFiIGZpbGUgdXNlZCB0byBhdXRo ZW50aWNhdGUgaW5jb21pbmciLAotIiAgY29ubmVjdGlvbnMuICBUaGUgZGVmYXVsdCBpcyBub25l LCB3aGljaCBtZWFucyB0byB1c2UgdGhlIGRlZmF1bHQgdmFsdWUiLAotIiAgY29uZmlndXJlZCBp biB0aGUgS2VyYmVyb3MgaW5zdGFsbGF0aW9uLiIsCi0iICIsCi0iU0VUIEFVVEhFTlRJQ0FUSU9O IHsgS0VSQkVST1M0LCBLRVJCRVJPUzUgfSBMSUZFVElNRSA8bWludXRlcz4iLAotIiAgU3BlY2lm aWVzIHRoZSBsaWZldGltZSBvZiB0aGUgVEdUcyByZXF1ZXN0ZWQgZnJvbSB0aGUgS0RDLiAgVGhl IGRlZmF1bHQiLAotIiAgaXMgNjAwIG1pbnV0ZXMgKDEwIGhvdXJzKS4iLAotIiAiLAotIlNFVCBB VVRIRU5USUNBVElPTiBLRVJCRVJPUzUgTk8tQUREUkVTU0VTIHsgT04sIE9GRiB9IiwKLSIgIFNw ZWNpZmllcyB3aGV0aGVyIG9yIG5vdCBJUCBhZGRyZXNzZXMgd2lsbCBiZSBpbnNlcnRlZCBpbnRv IHRoZSBUR1QuIgotIiAgRGVmYXVsdCBpcyBPRkYuIiwKLSIgIiwKLSJTRVQgQVVUSEVOVElDQVRJ T04gS0VSQkVST1M0IFBSRUFVVEggeyBPTiwgT0ZGIH0iLAotIiAgQWxsb3dzIEtlcmJlcm9zIDQg cHJlYXV0aGVudGljYXRlZCBUR1QgcmVxdWVzdHMgdG8gYmUgdHVybmVkIG9mZi4gIFRoZSIsCi0i ICBkZWZhdWx0IGlzIE9OLiAgT25seSB1c2UgaWYgYWJzb2x1dGVseSBuZWNlc3NhcnkuICBXZSBy ZWNvbW1lbmQgdGhhdCIsCi0iICBwcmVhdXRoZW50aWNhdGVkIHJlcXVlc3RzIGJlIHJlcXVpcmVk IGZvciBhbGwgdGlja2V0cyByZXR1cm5lZCBieSBhIEtEQyIsCi0iICB0byBhIHJlcXVlc3Rvci4i LAotIiAiLAotIlNFVCBBVVRIRU5USUNBVElPTiB7IEtFUkJFUk9TNCwgS0VSQkVST1M1IH0gUFJJ TkNJUEFMIDxuYW1lPiIsCi0iICBXaGVuIEtlcm1pdCBzdGFydHMsIGl0IGF0dGVtcHRzIHRvIHNl dCB0aGUgcHJpbmNpcGFsIG5hbWUgdG8gdGhhdCBzdG9yZWQiLAotIiAgaW4gdGhlIGN1cnJlbnQg Y3JlZGVudGlhbHMgY2FjaGUuICBJZiBubyBjcmVkZW50aWFsIGNhY2hlIGV4aXN0cywgdGhlIiwK LSIgIGN1cnJlbnQgU0VUIExPR0lOIFVTRVJJRCB2YWx1ZSBpcyB1c2VkLiAgU0VUIExPR0lOIFVT RVJJRCBpcyBzZXQgdG8gdGhlIiwKLSIgIG9wZXJhdGluZyBzeXN0ZW0ncyBjdXJyZW50IHVzZXJu YW1lIHdoZW4gS2VybWl0IGlzIHN0YXJ0ZWQuICBUbyBmb3JjZSIsCi0iICBLZXJtaXQgdG8gcHJv bXB0IHRoZSB1c2VyIGZvciB0aGUgcHJpbmNpcGFsIG5hbWUgd2hlbiByZXF1ZXN0aW5nIFRHVHMs IiwKLSIgIHBsYWNlOiIsCi0iICIsCi0iICAgIFNFVCBBVVRIIEs0IFBSSU5DSVBBTCB7fSIsCi0i ICAgIFNFVCBBVVRIIEs1IFBSSU5DSVBBTCB7fSIsCi0iICIsCi0iICBpbiB0aGUgS2VybWl0IGlu aXRpYWxpemF0aW9uIGZpbGUgb3IgY29ubmVjdGlvbiBzY3JpcHQuIiwKLSIgIiwKLSJTRVQgQVVU SEVOVElDQVRJT04geyBLRVJCRVJPUzQsIEtFUkJFUk9TNSB9IFBST01QVCBQQVNTV09SRCA8cHJv bXB0PiIsCi0iICBTcGVjaWZpZXMgYSBjdXN0b20gcHJvbXB0IHRvIGJlIHVzZWQgd2hlbiBwcm9t cHRpbmcgZm9yIGEgcGFzc3dvcmQuIiwKLSIgIFRoZSBLZXJiZXJvcyBwcm9tcHQgc3RyaW5ncyBt YXkgY29udGFpbiB0d28gJXMgcmVwbGFjZW1lbnQgZmllbGRzLiIsCi0iICBUaGUgZmlyc3QgJXMg aXMgcmVwbGFjZWQgYnkgdGhlIHByaW5jaXBhbCBuYW1lOyB0aGUgc2Vjb25kIGJ5IHRoZSByZWFs bS4iLAotIiAiLAotIlNFVCBBVVRIRU5USUNBVElPTiB7IEtFUkJFUk9TNCwgS0VSQkVST1M1IH0g UFJPTVBUIFBSSU5DSVBBTCA8cHJvbXB0PiIsCi0iICBTcGVjaWZpZXMgYSBjdXN0b20gcHJvbXB0 IHRvIGJlIHVzZWQgd2hlbiBwcm9tcHRpbmcgZm9yIHRoZSBLZXJiZXJvcyIsCi0iICBwcmluY2lw YWwgbmFtZS4gIE5vICVzIHJlcGxhY2VtZW50IGZpZWxkcyBtYXkgYmUgdXNlZC4gIEtlcm1pdCBw cm9tcHRzIiwKLSIgIGZvciBhIHByaW5jaXBhbCBuYW1lIHdoZW4gcmV0cmlldmluZyBhIFRHVCBp ZiB0aGUgY29tbWFuZDoiLAotIiAiLAotIiAgICBTRVQgQVVUSEVOVElDQVRJT04geyBLRVJCRVJP UzQsIEtFUkJFUk9TNSB9IFBSSU5DSVBBTCB7fSIsCi0iICIsCi0iICBoYXMgYmVlbiBpc3N1ZWQu IiwKLSIgIiwKLSJTRVQgQVVUSEVOVElDQVRJT04gS0VSQkVST1M1IFBST1hJQUJMRSB7IE9OLCBP RkYgfSIsCi0iICBXaGVuIE9OLCBzcGVjaWZpZXMgdGhhdCBLZXJiZXJvcyA1IGNyZWRlbnRpYWxz IHNob3VsZCBiZSBwcm94aWFibGUuIiwKLSIgIERlZmF1bHQgaXMgT0ZGLiIsCi0iICIsCi0iU0VU IEFVVEhFTlRJQ0FUSU9OIEtFUkJFUk9TNSBSRU5FV0FCTEUgPG1pbnV0ZXM+IiwKLSIgIFdoZW4g PG1pbnV0ZXM+IGlzIGdyZWF0ZXIgdGhhbiB0aGUgdGlja2V0IGxpZmV0aW1lIGEgVEdUIG1heSBi ZSByZW5ld2VkIiwKLSIgIHdpdGggQVVUSCBLNSBJTklUIC9SRU5FVyBpbnN0ZWFkIG9mIGdldHRp bmcgYSBuZXcgdGlja2V0IGFzIGxvbmcgYXMgdGhlIiwKLSIgIHRpY2tldCBpcyBub3QgZXhwaXJl ZCBhbmQgaXRzIHdpdGhpbiB0aGUgcmVuZXdhYmxlIGxpZmV0aW1lLiAgRGVmYXVsdCBpcyIsCi0i ICAwICh6ZXJvKSBtaW51dGVzLiIsCi0iICIsCi0iU0VUIEFVVEhFTlRJQ0FUSU9OIHsgS0VSQkVS T1M0LCBLRVJCRVJPUzUgfSBSRUFMTSA8bmFtZT4iLAotIiAgSWYgbm8gZGVmYXVsdCBpcyBzZXQs IHRoZSBkZWZhdWx0IHJlYWxtIGNvbmZpZ3VyZWQgZm9yIHRoZSBLZXJiZXJvcyIsCi0iICBsaWJy YXJpZXMgaXMgdXNlZC4gIEFiYnJldmlhdGlvbnMgYWNjZXB0ZWQuIiwKLSIgIiwKLSJTRVQgQVVU SEVOVElDQVRJT04geyBLRVJCRVJPUzQsIEtFUkJFUk9TNSB9IFNFUlZJQ0UtTkFNRSA8bmFtZT4i LAotIiAgVGhpcyBjb21tYW5kIHNwZWNpZmllcyB0aGUgc2VydmljZSB0aWNrZXQgbmFtZSB1c2Vk IHRvIGF1dGhlbnRpY2F0ZSIsCi0iICB0byB0aGUgaG9zdCB3aGVuIEtlcm1pdCBpcyB1c2VkIGFz IGEgY2xpZW50OyBvciB0aGUgc2VydmljZSB0aWNrZXQiLAotIiAgbmFtZSBhY2NlcHRlZCBieSBL ZXJtaXQgd2hlbiBpdCBpcyBhY3RpbmcgYXMgdGhlIGhvc3QuIiwKLSIgIElmIG5vIGRlZmF1bHQg aXMgc2V0LCB0aGUgZGVmYXVsdCBzZXJ2aWNlIG5hbWUgZm9yIEtlcmJlcm9zIDQgaXMiLAotIiAg XCJyY21kXCIgYW5kIGZvciBLZXJiZXJvcyA1IGlzIFwiaG9zdFwiLiIsCi0iICIsCi0jZW5kaWYg LyogQ0tfS0VSQkVST1MgKi8KLSNpZmRlZiBDS19TUlAKLSJTRVQgQVVUSEVOVElDQVRJT04gU1JQ IFBST01QVCBQQVNTV09SRCA8cHJvbXB0PiIsCi0iICBTcGVjaWZpZXMgYSBjdXN0b20gcHJvbXB0 IHRvIGJlIHVzZWQgd2hlbiBwcm9tcHRpbmcgZm9yIGEgcGFzc3dvcmQuIiwKLSIgIFRoZSBTUlAg cHJvbXB0IHN0cmluZyBtYXkgY29udGFpbiBvbmUgJXMgcmVwbGFjZW1lbnQgZmllbGRzIHdoaWNo IGlzIiwKLSIgIHJlcGxhY2VkIGJ5IHRoZSBsb2dpbiB1c2VyaWQuIiwKLSIgIiwKLSNlbmRpZiAv KiBDS19TUlAgKi8KLSNpZmRlZiBDS19TU0wKLSJJbiBhbGwgb2YgdGhlIGZvbGxvd2luZyBjb21t YW5kcyBcIlNTTFwiIGFuZCBcIlRMU1wiIGFyZSBhbGlhc2VzLiIsCi0iICIsCi0iU0VUIEFVVEhF TlRJQ0FUSU9OIHsgU1NMLCBUTFMgfSBDSVBIRVItTElTVCA8bGlzdCBvZiBjaXBoZXJzPiIsCi0i QXBwbGllcyB0byBib3RoIFNTTCBhbmQgVExTLiAgQSBjb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiBh bnkgb2YgdGhlIGZvbGxvd2luZyIsCi0iKGNhc2Ugc2Vuc2l0aXZlKSBvcHRpb25zIGRlcGVuZGlu ZyBvbiB0aGUgb3B0aW9ucyBjaG9zZW4gd2hlbiBPcGVuU1NMIHdhcyAiLAotImNvbXBpbGVkOiAi LAotIiAiLAotIiAgS2V5IEV4Y2hhbmdlIEFsZ29yaXRobXM6IiwKLSIgICAgXCJrUlNBXCIgICAg ICBSU0Ega2V5IGV4Y2hhbmdlIiwKLSIgICAgXCJrREhyXCIgICAgICBEaWZmaWUtSGVsbG1hbiBr ZXkgZXhjaGFuZ2UgKGtleSBmcm9tIFJTQSBjZXJ0KSIsCi0iICAgIFwia0RIZFwiICAgICAgRGlm ZmllLUhlbGxtYW4ga2V5IGV4Y2hhbmdlIChrZXkgZnJvbSBEU0EgY2VydCkiLAotIiAgICBcImtF REhcIiAgICAgIEVwaGVtZXJhbCBEaWZmaWUtSGVsbG1hbiBrZXkgZXhjaGFuZ2UgKHRlbXBvcmFy eSBrZXkpIiwKLSIgICAgXCJrS1JCNVwiICAgICBLZXJiZXJvcyA1IiwKLSIgIiwKLSIgIEF1dGhl bnRpY2F0aW9uIEFsZ29yaXRobToiLAotIiAgICBcImFOVUxMXCIgICAgIE5vIGF1dGhlbnRpY2F0 aW9uIiwKLSIgICAgXCJhUlNBXCIgICAgICBSU0EgYXV0aGVudGljYXRpb24iLAotIiAgICBcImFE U1NcIiAgICAgIERTUyBhdXRoZW50aWNhdGlvbiIsCi0iICAgIFwiYURIXCIgICAgICAgRGlmZmll LUhlbGxtYW4gYXV0aGVudGljYXRpb24iLAotIiAgICBcImFLUkI1XCIgICAgIEtlcmJlcm9zIDUi LAotIiAiLAotIiAgQ2lwaGVyIEVuY29kaW5nIEFsZ29yaXRobToiLAotIiAgICBcImVOVUxMXCIg ICAgIE5vIGVuY29kaWluZyIsCi0iICAgIFwiREVTXCIgICAgICAgREVTIGVuY29kaW5nIiwKLSIg ICAgXCIzREVTXCIgICAgICBUcmlwbGUgREVTIGVuY29kaW5nIiwKLSIgICAgXCJSQzRcIiAgICAg ICBSQzQgZW5jb2RpbmciLAotIiAgICBcIlJDMlwiICAgICAgIFJDMiBlbmNvZGluZyIsCi0iICAg IFwiSURFQVwiICAgICAgSURFQSBlbmNvZGluZyIsCi0iICIsCi0iICBNQUMgRGlnZXN0IEFsZ29y aXRobToiLAotIiAgICBcIk1ENVwiICAgICAgIE1ENSBoYXNoIGZ1bmN0aW9uIiwKLSIgICAgXCJT SEExXCIgICAgICBTSEExIGhhc2ggZnVuY3Rpb24iLAotIiAgICBcIlNIQVwiICAgICAgIFNIQSBo YXNoIGZ1bmN0aW9uIChzaG91bGQgbm90IGJlIHVzZWQpIiwKLSIgIiwKLSIgIEFsaWFzZXM6IiwK LSIgICAgXCJTU0x2MlwiICAgICBhbGwgU1NMIHZlcnNpb24gMi4wIGNpcGhlcnMgKHNob3VsZCBu b3QgYmUgdXNlZCkiLAotIiAgICBcIlNTTHYzXCIgICAgIGFsbCBTU0wgdmVyc2lvbiAzLjAgY2lw aGVycyIsCi0iICAgIFwiRVhQXCIgICAgICAgYWxsIGV4cG9ydCBjaXBoZXJzICg0MC1iaXQpIiwK LSIgICAgXCJFWFBPUlQ1NlwiICBhbGwgZXhwb3J0IGNpcGhlcnMgKDU2LWJpdCkiLAotIiAgICBc IkxPV1wiICAgICAgIGFsbCBsb3cgc3RyZW5ndGggY2lwaGVycyAobm8gZXhwb3J0KSIsCi0iICAg IFwiTUVESVVNXCIgICAgYWxsIGNpcGhlcnMgd2l0aCAxMjgtYml0IGVuY3J5cHRpb24iLAotIiAg ICBcIkhJR0hcIiAgICAgIGFsbCBjaXBoZXJzIHVzaW5nIGdyZWF0ZXIgdGhhbiAxMjgtYml0IGVu Y3J5cHRpb24iLAotIiAgICBcIlJTQVwiICAgICAgIGFsbCBjaXBoZXJzIHVzaW5nIFJTQSBrZXkg ZXhjaGFuZ2UiLAotIiAgICBcIkRIXCIgICAgICAgIGFsbCBjaXBoZXJzIHVzaW5nIERpZmZpZS1I ZWxsbWFuIGtleSBleGNoYW5nZSIsCi0iICAgIFwiRURIXCIgICAgICAgYWxsIGNpcGhlcnMgdXNp bmcgRXBoZW1lcmFsIERpZmZpZS1IZWxsbWFuIGtleSBleGNoYW5nZSIsCi0iICAgIFwiQURIXCIg ICAgICAgYWxsIGNpcGhlcnMgdXNpbmcgQW5vbnltb3VzIERpZmZpZS1IZWxsbWFuIGtleSBleGNo YW5nZSIsCi0iICAgIFwiRFNTXCIgICAgICAgYWxsIGNpcGhlcnMgdXNpbmcgRFNTIGF1dGhlbnRp Y2F0aW9uIiwKLSIgICAgXCJLUkI1XCIgICAgICBhbGwgY2lwaGVycyB1c2luZyBLZXJiZXJvcyA1 IGF1dGhlbnRpY2F0aW9uIiwKLSIgICAgXCJOVUxMXCIgICAgICBhbGwgY2lwaGVycyB1c2luZyBu byBlbmNyeXB0aW9uIiwKLSIgIiwKLSJFYWNoIGl0ZW0gaW4gdGhlIGxpc3QgbWF5IGluY2x1ZGUg YSBwcmVmaXggbW9kaWZpZXI6IiwKLSIgIiwKLSIgICAgXCIrXCIgICAgICAgICBtb3ZlIGNpcGhl cihzKSB0byB0aGUgY3VycmVudCBsb2NhdGlvbiBpbiB0aGUgbGlzdCIsCi0iICAgIFwiLVwiICAg ICAgICAgcmVtb3ZlIGNpcGhlcihzKSBmcm9tIHRoZSBsaXN0IChtYXkgYmUgYWRkZWQgYWdhaW4g YnkiLAotIiAgICAgICAgICAgICAgICBhIHN1YnNlcXVlbnQgbGlzdCBlbnRyeSkiLAotIiAgICBc IiFcIiAgICAgICAgIGtpbGwgY2lwaGVyIGZyb20gdGhlIGxpc3QgKGl0IG1heSBub3QgYmUgYWRk ZWQgYWdhaW4iLAotIiAgICAgICAgICAgICAgICBieSBhIHN1YnNlcXVlbnQgbGlzdCBlbnRyeSki LAotIiAiLAotIklmIG5vIG1vZGlmaWVyIGlzIHNwZWNpZmllZCB0aGUgZW50cnkgaXMgYWRkZWQg dG8gdGhlIGxpc3QgYXQgdGhlIGN1cnJlbnQgIiwKLSJwb3NpdGlvbi4gIFwiK1wiIG1heSBhbHNv IGJlIHVzZWQgdG8gY29tYmluZSB0YWdzIHRvIHNwZWNpZnkgZW50cmllcyBzdWNoIGFzICIKLSwK LSJcIlJTQStSQzRcIiBkZXNjcmliZXMgYWxsIGNpcGhlcnMgdGhhdCB1c2UgYm90aCBSU0EgYW5k IFJDNC4iLAotIiAiLAotIkZvciBleGFtcGxlLCBhbGwgYXZhaWxhYmxlIGNpcGhlcnMgbm90IGlu Y2x1ZGluZyBBREgga2V5IGV4Y2hhbmdlOiIsCi0iICIsCi0iICBBTEw6IUFESDpSQzQrUlNBOitI SUdIOitNRURJVU06K0xPVzorU1NMdjI6K0VYUCIsCi0iICIsCi0iQWxsIGFsZ29yaXRobXMgaW5j bHVkaW5nIEFESCBhbmQgZXhwb3J0IGJ1dCBleGNsdWRpbmcgcGF0ZW50ZWQgYWxnb3JpdGhtczog IiwKLSIgIiwKLSIgIEhJR0g6TUVESVVNOkxPVzpFWFBPUlQ1NjpFWFA6QURIOiFrUlNBOiFhUlNB OiFSQzQ6IVJDMjohSURFQSIsCi0iICIsCi0iVGhlIE9wZW5TU0wgY29tbWFuZCAiLAotIiAiLAot IiAgb3BlbnNzbC5leGUgY2lwaGVycyAtdiA8bGlzdCBvZiBjaXBoZXJzPiAiLAotIiAiLAotIm1h eSBiZSB1c2VkIHRvIGxpc3QgYWxsIG9mIHRoZSBjaXBoZXJzIGFuZCB0aGUgb3JkZXIgZGVzY3Jp YmVkIGJ5IGEgc3BlY2lmaWMiLAotIjxsaXN0IG9mIGNpcGhlcnM+LiIsCi0iICIsCi0iU0VUIEFV VEhFTlRJQ0FUSU9OIHsgU1NMLCBUTFMgfSBDUkwtRElSIDxkaXJlY3Rvcnk+IiwKLSJzcGVjaWZp ZXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uIGZpbGVz IHdoZXJlIGVhY2giLAotImZpbGUgaXMgbmFtZWQgYnkgdGhlIGhhc2ggb2YgdGhlIGNlcnRpZmlj YXRlIHRoYXQgaGFzIGJlZW4gcmV2b2tlZC4iLAotIiAiLAotIiAgT3BlblNTTCBleHBlY3RzIHRo ZSBoYXNoIHN5bWxpbmtzIHRvIGJlIG1hZGUgbGlrZSB0aGlzOiIsCi0iICIsCi0iICAgIGxuIC1z IGNybC5wZW0gYG9wZW5zc2wgY3JsIC1oYXNoIC1ub291dCAtaW4gY3JsLnBlbWAucjAiLAotIiAi LAotIiAgU2luY2Ugbm90IGFsbCBmaWxlIHN5c3RlbXMgaGF2ZSBzeW1saW5rcyB5b3UgY2FuIHVz ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQiLAotIiAgaW4gS2VybWl0IHRvIGNvcHkgdGhlIGNybC5w ZW0gZmlsZSB0byB0aGUgaGFzaCBmaWxlIG5hbWUuIiwKLSIgIiwKLSIgICAgIGNvcHkgY3JsLnBl bSB7XFxmY29tbWFuZChvcGVuc3NsLmV4ZSBjcmwgLWhhc2ggLW5vb3V0IC1pbiBjcmwucGVtKS5y MH0iLAotIiAiLAotIiAgVGhpcyBwcm9kdWNlcyBhIGhhc2ggYmFzZWQgb24gdGhlIGlzc3VlciBm aWVsZCBpbiB0aGUgQ1JMIHN1Y2ggIiwKLSIgIHRoYXQgdGhlIGlzc3VlciBmaWVsZCBvZiBhIENl cnQgbWF5IGJlIHF1aWNrbHkgbWFwcGVkIHRvIHRoZSAiLAotIiAgY29ycmVjdCBDUkwuIiwKLSIg IiwKLSJTRVQgQVVUSEVOVElDQVRJT04geyBTU0wsIFRMUyB9IENSTC1GSUxFIDxmaWxlbmFtZT4i LAotInNwZWNpZmllcyBhIGZpbGUgdGhhdCBjb250YWlucyBhIGxpc3Qgb2YgY2VydGlmaWNhdGUg cmV2b2NhdGlvbnMuIiwKLSIgIiwKLSJTRVQgQVVUSEVOVElDQVRJT04geyBTU0wsIFRMUyB9IERF QlVHIHsgT04sIE9GRiB9IiwKLSJzcGVjaWZpZXMgd2hldGhlciBkZWJ1ZyBpbmZvcm1hdGlvbiBz aG91bGQgYmUgZGlzcGxheWVkIGFib3V0IHRoZSBTU0wvVExTIiwKLSJjb25uZWN0aW9uLiAgV2hl biBERUJVRyBpcyBPTiwgdGhlIFZFUklGWSBjb21tYW5kIGRvZXMgbm90IHRlcm1pbmF0ZSIsCi0i Y29ubmVjdGlvbnMgd2hlbiBzZXQgdG8gRkFJTC1JRi1OTy1QRUVSLUNFUlQgd2hlbiBhIGNlcnRp ZmljYXRlIGlzIiwKLSJwcmVzZW50ZWQgdGhhdCBjYW5ub3QgYmUgc3VjY2Vzc2Z1bGx5IHZlcmlm aWVkLiAgSW5zdGVhZCBlYWNoIGVycm9yIiwKLSJpcyBkaXNwbGF5ZWQgYnV0IHRoZSBjb25uZWN0 aW9uIGF1dG9tYXRpY2FsbHkgY29udGludWVzLiIsCi0iICIsCi0iU0VUIEFVVEhFTlRJQ0FUSU9O IHsgU1NMLCBUTFMgfSBESC1QQVJBTS1GSUxFIDxmaWxlbmFtZT4iLAotIiAgU3BlY2lmaWVzIGEg ZmlsZSBjb250YWluaW5nIERIIHBhcmFtZXRlcnMgd2hpY2ggYXJlIHVzZWQgdG8gZ2VuZXJhdGUi LAotIiAgdGVtcG9yYXJ5IERIIGtleXMuICBJZiBhIERIIHBhcmFtZXRlciBmaWxlIGlzIG5vdCBw cm92aWRlZCBLZXJtaXQgdXNlcyBhIiwKLSIgIGZpeGVkIHNldCBvZiBwYXJhbWV0ZXJzIGRlcGVu ZGluZyBvbiB0aGUgbmVnb3RpYXRlZCBrZXkgbGVuZ3RoLiAgS2VybWl0IiwKLSIgIHByb3ZpZGVz IERIIHBhcmFtZXRlcnMgZm9yIGtleSBsZW5ndGhzIG9mIDUxMiwgNzY4LCAxMDI0LCAxNTM2LCBh bmQgMjA0OCIsCi0iICBiaXRzLiIsCi0iICIsCi0iU0VUIEFVVEhFTlRJQ0FUSU9OIHsgU1NMLCBU TFMgfSBEU0EtQ0VSVC1DSEFJTi1GSUxFIDxmaWxlbmFtZT4iLAotIiAgU3BlY2lmaWVzIGEgZmls ZSBjb250YWluaW5nIGEgRFNBIGNlcnRpZmljYXRlIGNoYWluIHRvIGJlIHNlbnQgYWxvbmcgd2l0 aCIsCi0iICB0aGUgRFNBLUNFUlQgdG8gdGhlIHBlZXIuICBUaGlzIGZpbGUgbXVzdCBvbmx5IGJl IHNwZWNpZmllZCBpZiBLZXJtaXQgaXMiLAotIiAgYmVpbmcgdXNlZCBhcyBhIHNlcnZlciBhbmQg dGhlIERTQSBjZXJ0aWZpY2F0ZSB3YXMgc2lnbmVkIGJ5IGFuIiwKLSIgIGludGVybWVkaWFyeSBj ZXJ0aWZpY2F0ZSBhdXRob3JpdHkuIiwKLSIgIiwKLSJTRVQgQVVUSEVOVElDQVRJT04geyBTU0ws IFRMUyB9IERTQS1DRVJULUZJTEUgPGZpbGVuYW1lPiIsCi0iICBTcGVjaWZpZXMgYSBmaWxlIGNv bnRhaW5pbmcgYSBEU0EgY2VydGlmaWNhdGUgdG8gYmUgc2VudCB0byB0aGUgcGVlciB0byAiLAot IiAgYXV0aGVudGljYXRlIHRoZSBob3N0IG9yIGVuZCB1c2VyLiAgVGhlIGZpbGUgbWF5IGNvbnRh aW4gdGhlIG1hdGNoaW5nIERIICIsCi0iICBwcml2YXRlIGtleSBpbnN0ZWFkIG9mIHVzaW5nIHRo ZSBEU0EtS0VZLUZJTEUgY29tbWFuZC4iLAotIiAiLAotIlNFVCBBVVRIRU5USUNBVElPTiB7IFNT TCwgVExTIH0gRFNBLUtFWS1GSUxFIDxmaWxlbmFtZT4iLAotIlNwZWNpZmllcyBhIGZpbGUgY29u dGFpbmluZyB0aGUgcHJpdmF0ZSBESCBrZXkgdGhhdCBtYXRjaGVzIHRoZSBEU0EgIiwKLSJjZXJ0 aWZpY2F0ZSBzcGVjaWZpZWQgd2l0aCBEU0EtQ0VSVC1GSUxFLiAgVGhpcyBjb21tYW5kIGlzIG9u bHkgbmVjZXNzYXJ5IGlmIiwKLSJ0aGUgcHJpdmF0ZSBrZXkgaXMgbm90IGFwcGVuZGVkIHRvIHRo ZSBjZXJ0aWZpY2F0ZSBpbiB0aGUgZmlsZSBzcGVjaWZpZWQgYnkiLAotIkRTQS1DRVJULUZJTEUu IiwKLSIgIiwKLSIgIE5vdGU6IFdoZW4gZXhlY3V0aW5nIGEgc2NyaXB0IGluIHRoZSBiYWNrZ3Jv dW5kIG9yIHdoZW4gaXQgaXMiLAotIiAgcnVubmluZyBhcyBhbiBJbnRlcm5ldCBLZXJtaXQgU2Vy dmljZSBEYWVtb24sIEtlcm1pdCBjYW5ub3Qgc3VwcG9ydCAiLAotIiAgZW5jcnlwdGVkIHByaXZh dGUga2V5cy4gIFdoZW4gYXR0ZW1wdGluZyB0byBsb2FkIGEgcHJpdmF0ZSBrZXkgdGhhdCBpcyIs Ci0iICBlbmNyeXB0ZWQsIGEgcHJvbXB0IHdpbGwgYmUgZ2VuZXJhdGVkIHJlcXVlc3RpbmcgdGhl IHBhc3NwaHJhc2UgbmVjZXNzYXJ5IiwKLSIgIHRvIGRlY3J5cHQgdGhlIGtleWZpbGUuICBUbyBh dXRvbWF0ZSBhY2Nlc3MgdG8gdGhlIHByaXZhdGUga2V5IHlvdSBtdXN0IiwKLSIgIGRlY3J5cHQg dGhlIGVuY3J5cHRlZCBrZXlmaWxlIGFuZCBjcmVhdGUgYW4gdW5lbmNyeXB0ZWQga2V5ZmlsZSBm b3IgdXNlIiwKLSIgIGJ5IEtlcm1pdC4gIFRoaXMgY2FuIGJlIGFjY29tcGxpc2hlZCBieSB1c2lu ZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQgYW5kIiwKLSIgIHRoZSBwYXNzcGhyYXNlOiIsCi0iICIs Ci0iICBvcGVuc3NsIGRzYSAtaW4gPGVuY3J5cHRlZC1rZXktZmlsZT4gLW91dCA8dW5lbmNyeXB0 ZWQta2V5LWZpbGU+IiwKLSIgIiwKLSJTRVQgQVVUSEVOVElDQVRJT04geyBTU0wsIFRMUyB9IFJB TkRPTS1GSUxFIDxmaWxlbmFtZT4iLAotIiAgU3BlY2lmaWVzIGEgZmlsZSBjb250YWluaW5nIHJh bmRvbSBkYXRhIHRvIGJlIHVzZWQgYXMgc2VlZCBmb3IgdGhlIiwKLSIgIFBzZXVkbyBSYW5kb20g TnVtYmVyIEdlbmVyYXRvci4gIFRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBhcmUiLAotIiAgb3Zl cndyaXR0ZW4gd2l0aCBuZXcgcmFuZG9tIGRhdGEgb24gZWFjaCB1c2UuIiwKLSIgIiwKLSJTRVQg QVVUSEVOVElDQVRJT04geyBTU0wsIFRMUyB9IFJTQS1DRVJULUNIQUlOLUZJTEUgPGZpbGVuYW1l PiIsCi0iICBTcGVjaWZpZXMgYSBmaWxlIGNvbnRhaW5pbmcgYSBSU0EgY2VydGlmaWNhdGUgY2hh aW4gdG8gYmUgc2VudCBhbG9uZyB3aXRoIiwKLSIgIHRoZSBSU0EtQ0VSVCB0byB0aGUgcGVlci4g IFRoaXMgZmlsZSBtdXN0IG9ubHkgYmUgc3BlY2lmaWVkIGlmIEtlcm1pdCBpcyIsCi0iICBiZWlu ZyB1c2VkIGFzIGEgc2VydmVyIGFuZCB0aGUgUlNBIGNlcnRpZmljYXRlIHdhcyBzaWduZWQgYnkg YW4iLAotIiAgaW50ZXJtZWRpYXJ5IGNlcnRpZmljYXRlIGF1dGhvcml0eS4iLAotIiAiLAotIlNF VCBBVVRIRU5USUNBVElPTiB7IFNTTCwgVExTIH0gUlNBLUNFUlQtRklMRSA8ZmlsZW5hbWU+IiwK LSIgIFNwZWNpZmllcyBhIGZpbGUgY29udGFpbmluZyBhIFJTQSBjZXJ0aWZpY2F0ZSB0byBiZSBz ZW50IHRvIHRoZSBwZWVyIHRvICIsCi0iICBhdXRoZW50aWNhdGUgdGhlIGhvc3Qgb3IgZW5kIHVz ZXIuICBUaGUgZmlsZSBtYXkgY29udGFpbiB0aGUgbWF0Y2hpbmcgUlNBICIsCi0iICBwcml2YXRl IGtleSBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBSU0EtS0VZLUZJTEUgY29tbWFuZC4iLAotIiAiLAot IlNFVCBBVVRIRU5USUNBVElPTiB7IFNTTCwgVExTIH0gUlNBLUtFWS1GSUxFIDxmaWxlbmFtZT4i LAotIiAgU3BlY2lmaWVzIGEgZmlsZSBjb250YWluaW5nIHRoZSBwcml2YXRlIFJTQSBrZXkgdGhh dCBtYXRjaGVzIHRoZSBSU0EiLAotIiAgY2VydGlmaWNhdGUgc3BlY2lmaWVkIHdpdGggUlNBLUNF UlQtRklMRS4gIFRoaXMgY29tbWFuZCBpcyBvbmx5IG5lY2Vzc2FyeSIsCi0iICBpZiB0aGUgcHJp dmF0ZSBrZXkgaXMgbm90IGFwcGVuZGVkIHRvIHRoZSBjZXJ0aWZpY2F0ZSBpbiB0aGUgZmlsZSBz cGVjaWZpZWQiCi0sCi0iICBieSBSU0EtQ0VSVC1GSUxFLiAgIiwKLSIgIiwKLSIgIE5vdGU6IFdo ZW4gZXhlY3V0aW5nIGEgc2NyaXB0IGluIHRoZSBiYWNrZ3JvdW5kIG9yIHdoZW4gaXQgaXMiLAot IiAgcnVubmluZyBhcyBhbiBJbnRlcm5ldCBLZXJtaXQgU2VydmljZSBEYWVtb24sIEtlcm1pdCBj YW5ub3Qgc3VwcG9ydCAiLAotIiAgZW5jcnlwdGVkIHByaXZhdGUga2V5cy4gIFdoZW4gYXR0ZW1w dGluZyB0byBsb2FkIGEgcHJpdmF0ZSBrZXkgdGhhdCBpcyIsCi0iICBlbmNyeXB0ZWQsIGEgcHJv bXB0IHdpbGwgYmUgZ2VuZXJhdGVkIHJlcXVlc3RpbmcgdGhlIHBhc3NwaHJhc2UgbmVjZXNzYXJ5 IiwKLSIgIHRvIGRlY3J5cHQgdGhlIGtleWZpbGUuICBUbyBhdXRvbWF0ZSBhY2Nlc3MgdG8gdGhl IHByaXZhdGUga2V5IHlvdSBtdXN0IiwKLSIgIGRlY3J5cHQgdGhlIGVuY3J5cHRlZCBrZXlmaWxl IGFuZCBjcmVhdGUgYW4gdW5lbmNyeXB0ZWQga2V5ZmlsZSBmb3IgdXNlIiwKLSIgIGJ5IEtlcm1p dC4gIFRoaXMgY2FuIGJlIGFjY29tcGxpc2hlZCBieSB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1h bmQgYW5kIiwKLSIgIHRoZSBwYXNzcGhyYXNlOiIsCi0iICIsCi0iICBvcGVuc3NsIHJzYSAtaW4g PGVuY3J5cHRlZC1rZXktZmlsZT4gLW91dCA8dW5lbmNyeXB0ZWQta2V5LWZpbGU+IiwKLSIgIiwK LSJTRVQgQVVUSEVOVElDQVRJT04geyBTU0wsIFRMUyB9IFZFUkJPU0UgeyBPTiwgT0ZGIH0iLAot IiAgU3BlY2lmaWVzIHdoZXRoZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGF1dGhlbnRpY2F0aW9u IChpZSwgdGhlIiwKLSIgIGNlcnRpZmljYXRlIGNoYWluKSBzaG91bGQgYmUgZGlzcGxheWVkIHVw b24gbWFraW5nIGEgY29ubmVjdGlvbi4iLAotIiAiLAotIlNFVCBBVVRIRU5USUNBVElPTiB7IFNT TCwgVExTIH0gVkVSSUZZIHsgTk8sUEVFUi1DRVJULEZBSUwtSUYtTk8tUEVFUi1DRVJUIH0iLAot IiAgU3BlY2lmaWVzIHdoZXRoZXIgY2VydGlmaWNhdGVzIHNob3VsZCBiZSByZXF1ZXN0ZWQgZnJv bSB0aGUgcGVlciB2ZXJpZmllZDsiLAotIiAgd2hldGhlciB0aGV5IHNob3VsZCBiZSB2ZXJpZmll ZCB3aGVuIHRoZXkgYXJlIHByZXNlbnRlZDsgYW5kIHdoZXRoZXIgdGhleSIsCi0iICBzaG91bGQg YmUgcmVxdWlyZWQuICBXaGVuIHNldCB0byBOTyAodGhlIGRlZmF1bHQgZm9yIElLU0QpLCBLZXJt aXQgZG9lcyIsCi0iICBub3QgcmVxdWVzdCB0aGF0IHRoZSBwZWVyIHNlbmQgYSBjZXJ0aWZpY2F0 ZTsgaWYgb25lIGlzIHByZXNlbnRlZCBpdCBpcyIsCi0iICBpZ25vcmVkLiAgV2hlbiBzZXQgdG8g UEVFUi1DRVJUICh0aGUgZGVmYXVsdCB3aGVuIG5vdCBJS1NEKSwgS2VybWl0IiwKLSIgIHJlcXVl c3RzIGEgY2VydGlmaWNhdGUgYmUgc2VudCBieSB0aGUgcGVlci4gIElmIHByZXNlbnRlZCwgdGhl IGNlcnRpZmljYXRlIiwKLSIgIGlzIHZlcmlmaWVkLiAgQW55IGVycm9ycyBkdXJpbmcgdGhlIHZl cmlmaWNhdGlvbiBwcm9jZXNzIHJlc3VsdCBpbiIsCi0iICBxdWVyaWVzIHRvIHRoZSBlbmQgdXNl ci4gIFdoZW4gc2V0IHRvIEZBSUwtSUYtTk8tUEVFUi1DRVJULCBLZXJtaXQiLAotIiAgcmVxdWVz dHMgYSBjZXJ0aWZpY2F0ZSBiZSBzZW50IGJ5IHRoZSBwZWVyLiAgSWYgdGhlIGNlcnRpZmljYXRl IGlzIG5vdCIsCi0iICBwcmVzZW50ZWQgb3IgZmFpbHMgdG8gdmVyaWZ5LCB0aGUgY29ubmVjdGlv biBpcyB0ZXJtaW5hdGVkIHdpdGhvdXQiLAotIiAgcXVlcnlpbmcgdGhlIHVzZXIuIiwKLSIgIiwK LSIgIElmIGFuIGFub255bW91cyBjaXBoZXIgKGkuZS4sIEFESCkgaXMgZGVzaXJlZCwgdGhlIE5P IHNldHRpbmcgbXVzdCBiZSIsCi0iICB1c2VkLiAgT3RoZXJ3aXNlLCB0aGUgcmVjZWlwdCBvZiB0 aGUgcGVlciBjZXJ0aWZpY2F0ZSByZXF1ZXN0IGlzIiwKLSIgIGludGVycHJldGVkIGFzIGEgcHJv dG9jb2wgZXJyb3IgYW5kIHRoZSBuZWdvdGlhdGlvbiBmYWlscy4iLAotIiAiLAotIiAgSWYgeW91 IHdpc2ggdG8gYWxsb3cgdGhlIHBlZXIgdG8gYXV0aGVudGljYXRlIHVzaW5nIGVpdGhlciBhbiBY NTA5IiwKLSIgIGNlcnRpZmljYXRlIHRvIHVzZXJpZCBtYXBwaW5nIGZ1bmN0aW9uIG9yIHZpYSB1 c2Ugb2YgYSB+Ly50bHNsb2dpbiBmaWxlIiwKLSIgIHlvdSBtdXN0IHVzZSBlaXRoZXIgUEVFUi1D RVJUIG9yIEZBSUwtSUYtTk8tUEVFUi1DRVJULiAgT3RoZXJ3aXNlLCBhbnkiLAotIiAgY2VydGlm aWNhdGVzIHRoYXQgYXJlIHByZXNlbnRlZCBpcyBpZ25vcmVkLiAgSW4gb3RoZXIgd29yZHMsIHVz ZSBOTyBpZiB5b3UiLAotIiAgd2FudCB0byBkaXNhYmxlIHRoZSBhYmlsaXR5IHRvIHVzZSBjZXJ0 aWZpY2F0ZXMgdG8gYXV0aGVudGljYXRlIGEgcGVlci4iLAotIiAiLAotIlNFVCBBVVRIRU5USUNB VElPTiB7IFNTTCwgVExTIH0gVkVSSUZZLURJUiA8ZGlyZWN0b3J5PiIsCi0iICBTcGVjaWZpZXMg YSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyByb290IENBIGNlcnRpZmljYXRlIGZpbGVzIHVzZWQg dG8iLAotIiAgdmVyaWZ5IHRoZSBjZXJ0aWZpY2F0ZSBjaGFpbnMgcHJlc2VudGVkIGJ5IHRoZSBw ZWVyLiAgRWFjaCBmaWxlIGlzIG5hbWVkIiwKLSIgIGJ5IGEgaGFzaCBvZiB0aGUgY2VydGlmaWNh dGUuIiwKLSIgIiwKLSIgIE9wZW5TU0wgZXhwZWN0cyB0aGUgaGFzaCBzeW1saW5rcyB0byBiZSBt YWRlIGxpa2UgdGhpczoiLAotIiAiLAotIiAgICBsbiAtcyBjZXJ0LnBlbSBgb3BlbnNzbCB4NTA5 IC1oYXNoIC1ub291dCAtaW4gY2VydC5wZW1gLjAiLAotIiAiLAotIiAgU2luY2Ugbm90IGFsbCBm aWxlIHN5c3RlbXMgaGF2ZSBzeW1saW5rcyB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1h bmQiLAotIiAgaW4gS2VybWl0IHRvIGNvcHkgdGhlIGNlcnQucGVtIGZpbGUgdG8gdGhlIGhhc2gg ZmlsZSBuYW1lLiIsCi0iICIsCi0iICAgIGNvcHkgY2VydC5wZW0ge1xcZmNvbW1hbmQob3BlbnNz bC5leGUgeDUwOSAtaGFzaCAtbm9vdXQgLWluIGNlcnQucGVtKS4wfSIsCi0iICIsCi0iICBUaGlz IHByb2R1Y2VzIGEgaGFzaCBiYXNlZCBvbiB0aGUgc3ViamVjdCBmaWVsZCBpbiB0aGUgY2VydCBz dWNoIHRoYXQgdGhlIiwKLSIgIGNlcnRpZmljYXRlIG1heSBiZSBxdWlja2x5IGZvdW5kLiIsCi0i ICIsCi0iU0VUIEFVVEhFTlRJQ0FUSU9OIHsgU1NMLCBUTFMgfSBWRVJJRlktRklMRSA8ZmlsZT4i LAotIiAgU3BlY2lmaWVzIGEgZmlsZSB0aGF0IGNvbnRhaW5zIHJvb3QgQ0EgY2VydGlmaWNhdGVz IHRvIGJlIHVzZWQgZm9yIiwKLSIgIHZlcmlmeWluZyBjZXJ0aWZpY2F0ZSBjaGFpbnMuIiwKLSIg IiwKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSIiCi19OwotCi1zdGF0aWMgY2hhciAqaHh5bmV0W10g PSB7Ci0iU3ludGF4OiBTRVQgTkVUV09SSyB7IFRZUEUgbmV0d29yay10eXBlLCBESVJFQ1RPUlkg WyBmaWxlKHMpLi4uIF0gfSIsCi0iICIsCi0iU2VsZWN0IHRoZSB0eXBlIG9mIG5ldHdvcmsgdG8g YmUgdXNlZCB3aXRoIFNFVCBIT1NUIGNvbm5lY3Rpb25zOiIsCi0iICIsCi0jaWZkZWYgTkVUQ01E Ci0iICBTRVQgTkVUV09SSyBUWVBFIENPTU1BTkQgICA7IE1ha2UgYSBjb25uZWN0aW9uIHRocm91 Z2ggYW4gZXh0ZXJuYWwgY29tbWFuZCIsCi0jZW5kaWYgLyogTkVUQ01EICovCi0jaWZkZWYgVENQ U09DS0VUCi0iICBTRVQgTkVUV09SSyBUWVBFIFRDUC9JUCAgICA7IEludGVybmV0OiBUZWxuZXQs IFJsb2dpbiwgZXRjLiIsCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0jaWZkZWYgQU5ZWDI1Ci0i ICBTRVQgTkVUV09SSyBUWVBFIFguMjUgICAgICA7IFguMjUgcGVlci10by1wZWVyIGNvbm5lY3Rp b25zLiIsCi0jZW5kaWYgLyogQU5ZWDI1ICovCi0jaWZkZWYgREVDTkVUCi0iICBTRVQgTkVUV09S SyBUWVBFIFBBVEhXT1JLUyB7IExBVCwgQ1RFUk0gfSA7IERFQyBMQVQgb3IgQ1RFUk0gY29ubmVj dGlvbnMuIiwKLSNlbmRpZiAvKiBERUNORVQgKi8KLSNpZmRlZiBOUElQRQotIiAgU0VUIE5FVFdP UksgVFlQRSBOQU1FRC1QSVBFIDxwaXBlbmFtZT4gIDsgT1MvMiBOYW1lZCBQaXBlIGNvbm5lY3Rp b25zLiIsCi0jZW5kaWYgLyogTlBJUEUgKi8KLSNpZmRlZiBDS19ORVRCSU9TCi0iICBTRVQgTkVU V09SSyBUWVBFIE5FVEJJT1MgICAgICAgICAgICAgICAgOyBORVRCSU9TIHBlZXItdG8tcGVlciBj b25uZWN0aW9ucyIsCi0jZW5kaWYgLyogQ0tfTkVUQklPUyAqLwotI2lmZGVmIFNVUEVSTEFUCi0i ICBTRVQgTkVUV09SSyBUWVBFIFNVUEVSTEFUIDsgTEFUIGNvbm5lY3Rpb25zIChNZXJpZGlhbiBU ZWNobm9sb2d5IFN1cGVyTEFUKSIsCi0jZW5kaWYgLyogU1VQRVJMQVQgKi8KLSIgIiwKLSJJZiBv bmx5IG9uZSBuZXR3b3JrIHR5cGUgaXMgbGlzdGVkIGFib3ZlLCB0aGF0IGlzIHRoZSBkZWZhdWx0 IG5ldHdvcmsgZm9yIiwKLSNpZmRlZiBSTE9HQ09ERQotIlNFVCBIT1NUIGNvbW1hbmRzLiAgQWxz byBzZWUgU0VUIEhPU1QsIFRFTE5FVCwgUkxPR0lOLiIsCi0jZWxzZQotI2lmZGVmIFROQ09ERQot IlNFVCBIT1NUIGNvbW1hbmRzLiAgQWxzbyBzZWUgU0VUIEhPU1QsIFRFTE5FVC4iLAotI2Vsc2UK LSJTRVQgSE9TVCBjb21tYW5kcy4gIEFsc28gc2VlIFNFVCBIT1NULiIsCi0jZW5kaWYgLyogVE5D T0RFICovCi0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSIgIiwKLSJTRVQgTkVUV09SSyBESVJFQ1RP UlkgWyBmaWxlIFsgZmlsZSBbIC4uLiBdIF0gXSIsCi0iICBTcGVjaWZpZXMgdGhlIG5hbWUocykg b2YgemVybyBvciBtb3JlIG5ldHdvcmsgZGlyZWN0b3J5IGZpbGVzLCBzaW1pbGFyIHRvIiwKLSIg IGRpYWxpbmcgZGlyZWN0b3JpZXMgKEhFTFAgRElBTCBmb3IgZGV0YWlscykuICBUaGUgZ2VuZXJh bCBmb3JtYXQgb2YgYSIsCi0iICBuZXR3b3JrIGRpcmVjdG9yeSBlbnRyeSBpczoiLAotIiAiLAot IiAgICBuYW1lIG5ldHdvcmstdHlwZSBhZGRyZXNzIFsgbmV0d29yay1zcGVjaWZpYy1pbmZvIF0g WyA7IGNvbW1lbnQgXSIsCi0iICIsCi0iICBGb3IgVENQL0lQLCB0aGUgZm9ybWF0IGlzOiIsCi0i ICIsCi0iICAgIG5hbWUgdGNwL2lwIGlwLWhvc3RuYW1lLW9yLWFkZHJlc3MgWyBzb2NrZXQgXSBb IDsgY29tbWVudCBdIiwKLSIgIiwKLSJZb3UgY2FuIGhhdmUgbXVsdGlwbGUgbmV0d29yayBkaXJl Y3RvcmllcyBhbmQgeW91IGNhbiBoYXZlIG11bHRpcGxlIGVudHJpZXMiLAotIndpdGggdGhlIHNh bWUgbmFtZS4gIFNFVCBIT1NUIDxuYW1lPiBhbmQgVEVMTkVUIDxuYW1lPiBjb21tYW5kcyBsb29r IHVwIHRoZSIsCi0iZ2l2ZW4gPG5hbWU+IGluIHRoZSBkaXJlY3RvcnkgYW5kLCBpZiBmb3VuZCwg ZmlsbCBpbiB0aGUgYWRkaXRpb25hbCBpdGVtcyIsCi0iZnJvbSB0aGUgZW50cnksIGFuZCB0aGVu IHRyeSBhbGwgbWF0Y2hpbmcgZW50cmllcyB1bnRpbCBvbmUgc3VjY2VlZHMuIiwKLSIifTsKLQot I2lmbmRlZiBOT1RDUE9QVFMKLXN0YXRpYyBjaGFyICpoeHl0Y3BbXSA9IHsKLSNpZmRlZiBTT0xf U09DS0VUCi0iU0VUIFRDUCBBRERSRVNTIDxpcC1hZGRyZXNzPiIsCi0iICBUaGlzIGFsbG93cyBh IHNwZWNpZmljIElQIEFkZHJlc3Mgb24gYSBtdWx0aWhvbWVkIGhvc3QgdG8gYmUgdXNlZCIsCi0i ICBpbnN0ZWFkIG9mIGFsbG93aW5nIHRoZSBUQ1AvSVAgc3RhY2sgdG8gY2hvb3NlLiAgVGhpcyBt YXkgYmUgbmVjZXNzYXJ5IiwKLSIgIHdoZW4gdXNpbmcgYXV0aGVudGljYXRpb24gb3IgbGlzdGVu aW5nIGZvciBhbiBpbmNvbWluZyBjb25uZWN0aW9uLiIsCi0iICBTcGVjaWZ5IG5vIDxpcC1hZGRy ZXNzPiB0byByZW1vdmUgdGhlIHByZWZlcmVuY2UuIiwKLSIgIiwKLSJTRVQgVENQIEtFRVBBTElW RSB7IE9OLCBPRkYgfSIsCi0iICBTZXR0aW5nIHRoaXMgT04gbWlnaHQgaGVscCB0byBkZXRlY3Qg YnJva2VuIGNvbm5lY3Rpb25zIG1vcmUgcXVpY2tseS4iLAotIiAgKGRlZmF1bHQgaXMgT04uKSIs Ci0iICIsCi0iU0VUIFRDUCBMSU5HRVIgeyBPTiBbdGltZW91dF0sIE9GRiB9IiwKLSIgIFNldHRp bmcgdGhpcyBPTiBlbnN1cmVzIHRoYXQgYSBjb25uZWN0aW9uIGRvZXNuJ3QgY2xvc2UgYmVmb3Jl IGFsbCIsCi0iICBvdXRzdGFuZGluZyBkYXRhIGhhcyBiZWVuIHRyYW5zZmVycmVkIGFuZCBhY2tu b3dsZWRnZWQuICBUaGUgdGltZW91dCBpcyIsCi0iICBtZWFzdXJlZCBpbiAxMHRocyBvZiBtaWxs aXNlY29uZHMuICBUaGUgZGVmYXVsdCBpcyBPTiB3aXRoIGEgdGltZW91dCBvZiAwLiIsCi0iICIs Ci0iU0VUIFRDUCBOT0RFTEFZIHsgT04sIE9GRiB9IiwKLSIgIE9OIG1lYW5zIHNlbmQgc2hvcnQg VENQIHBhY2tldHMgaW1tZWRpYXRlbHkgcmF0aGVyIHRoYW4gd2FpdGluZyIsCi0iICB0byBhY2N1 bXVsYXRlIGEgYnVuY2ggb2YgdGhlbSBiZWZvcmUgdHJhbnNtaXR0aW5nIChOYWdsZSBBbGdvcml0 aG0pLiIsCi0iICAoZGVmYXVsdCBpcyBPRkYuKSIsCi0iICIsCi0iU0VUIFRDUCBSRUNWQlVGIDxu dW1iZXI+IiwKLSJTRVQgVENQIFNFTkRCVUYgPG51bWJlcj4iLAotIiAgIFRDUCByZWNlaXZlIGFu ZCBzZW5kIGJ1ZmZlciBzaXplcy4gIChkZWZhdWx0IGlzIC0xLCB1c2Ugc3lzdGVtIGRlZmF1bHRz LikiLAotIiAiLAotIlRoZXNlIGl0ZW1zIGxldCB5b3UgdHVuZSBUQ1AgbmV0d29ya2luZyBwZXJm b3JtYW5jZSBvbiBhIHBlci1jb25uZWN0aW9uIiwKLSJiYXNpcyBieSBhZGp1c3RpbmcgcGFyYW1l dGVycyB5b3Ugbm9ybWFsbHkgd291bGQgbm90IGhhdmUgYWNjZXNzIHRvLiAgWW91IiwKLSJzaG91 bGQgdXNlIHRoZXNlIGNvbW1hbmRzIG9ubHkgaWYgeW91IGZlZWwgdGhhdCB0aGUgVENQL0lQIHBy b3RvY29sIHN0YWNrIiwKLSJ0aGF0IEtlcm1pdCBpcyB1c2luZyBpcyBnaXZpbmcgeW91IGluYWRl cXVhdGUgcGVyZm9ybWFuY2UsIGFuZCB0aGVuIG9ubHkgaWYiLAotInlvdSB1bmRlcnN0YW5kIHRo ZSBjb25jZXB0cyAoc2VlLCBmb3IgZXhhbXBsZSwgdGhlIENvbWVyIFRDUC9JUCBib29rcyksIGFu ZCIsCi0idGhlbiBhdCB5b3VyIG93biByaXNrLiAgVGhlc2Ugc2V0dGluZ3MgYXJlIGRpc3BsYXll ZCBieSBTSE9XIE5FVFdPUksuICBOb3QiLAotImFsbCBvcHRpb25zIGFyZSBuZWNlc3NhcmlseSBh dmFpbGFibGUgaW4gYWxsIEtlcm1pdCB2ZXJzaW9uczsgaXQgZGVwZW5kcyBvbiIsCi0idGhlIHVu ZGVybHlpbmcgVENQL0lQIHNlcnZpY2VzLiIsCi0iICIsCi0iVGhlIGZvbGxvd2luZyBUQ1AgYW5k L29yIElQIHBhcmFtZXRlcihzKSBtYXkgYWxzbyBiZSBjaGFuZ2VkOiIsCi0iICIsCi0jZW5kaWYg LyogU09MX1NPQ0tFVCAqLwotIlNFVCBUQ1AgUkVWRVJTRS1ETlMtTE9PS1VQIHsgQVVUTywgT04s IE9GRiB9IiwKLSIgIFRlbGxzIEtlcm1pdCB3aGV0aGVyIHRvIHBlcmZvcm0gcmV2ZXJzZSBETlMg bG9va3VwIG9uIFRDUC9JUCBjb25uZWN0aW9ucyIsCi0iICBzbyBLZXJtaXQgY2FuIGRldGVybWlu ZSB0aGUgYWN0dWFsIGhvc3RuYW1lIG9mIHRoZSBob3N0IGl0IGlzIGNvbm5lY3RlZCIsCi0iICB0 bywgd2hpY2ggaXMgdXNlZnVsIGZvciBjb25uZWN0aW9ucyB0byBob3N0IHBvb2xzLCBhbmQgaXMg cmVxdWlyZWQgZm9yIiwKLSIgIEtlcmJlcm9zIGNvbm5lY3Rpb25zIHRvIGhvc3QgcG9vbHMgYW5k IGZvciBpbmNvbWluZyBjb25uZWN0aW9ucy4gIElmIHRoZSIsCi0iICBvdGhlciBob3N0IGRvZXMg bm90IGhhdmUgYSBETlMgZW50cnksIHRoZSByZXZlcnNlIGxvb2t1cCBjb3VsZCB0YWtlIGEgbG9u ZyIsCi0iICB0aW1lIChtaW51dGVzKSB0byBmYWlsLCBidXQgdGhlIGNvbm5lY3Rpb24gd2lsbCBz dGlsbCBiZSBtYWRlLiAgVHVybiB0aGlzIiwKLSIgIG9wdGlvbiBPRkYgZm9yIHNwZWVkaWVyIGNv bm5lY3Rpb25zIGlmIHlvdSBkbyBub3QgbmVlZCB0byBrbm93IGV4YWN0bHkiLAotIiAgd2hpY2gg aG9zdCB5b3UgYXJlIGNvbm5lY3RlZCB0byBhbmQgeW91IGFyZSBub3QgdXNpbmcgS2VyYmVyb3Mu ICBBVVRPLCB0aGUiLAotIiAgZGVmYXVsdCwgbWVhbnMgdGhlIGxvb2t1cCBpcyBkb25lIG9uIGhv c3RuYW1lcywgYnV0IG5vdCBvbiBudW1lcmljIElQIiwKLSIgIGFkZHJlc3NlcyB1bmxlc3MgS2Vy YmVyb3Mgc3VwcG9ydCBpcyBpbnN0YWxsZWQuIiwKLSNpZmRlZiBDS19ETlNfU1JWCi0iICIsCi0i U0VUIFRDUCBETlMtU0VSVklDRS1SRUNPUkRTIHtPTiwgT0ZGfSIsCi0iICBUZWxscyBLZXJtaXQg d2hldGhlciB0byB0cnkgdG8gdXNlIEROUyBTUlYgcmVjb3JkcyB0byBkZXRlcm1pbmUgdGhlIiwK LSIgIGhvc3QgYW5kIHBvcnQgbnVtYmVyIHVwb24gd2hpY2ggdG8gZmluZCBhbiBhZHZlcnRpc2Vk IHNlcnZpY2UuICBGb3IiLAotIiAgZXhhbXBsZSwgaWYgYSBob3N0IHdhbnRzIHJlZ3VsYXIgVGVs bmV0IGNvbm5lY3Rpb25zIHJlZGlyZWN0ZWQgdG8gc29tZSIsCi0iICBwb3J0IG90aGVyIHRoYW4g MjMsIHRoaXMgZmVhdHVyZSBhbGxvd3MgS2VybWl0IHRvIGFzayB0aGUgaG9zdCB3aGljaCIsCi0i ICBwb3J0IGl0IHNob3VsZCB1c2UuICBTaW5jZSBub3QgYWxsIGRvbWFpbiBzZXJ2ZXJzIGFyZSBz ZXQgdXAgdG8gYW5zd2VyIiwKLSIgIHN1Y2ggcmVxdWVzdHMsIHRoaXMgZmVhdHVyZSBpcyBPRkYg YnkgZGVmYXVsdC4iLAotI2VuZGlmIC8qIENLX0ROU19TUlYgKi8KLSNpZmRlZiBOVAotI2lmZGVm IENLX1NPQ0tTCi0iICIsCi0iU0VUIFRDUCBTT0NLUy1TRVJWRVIgWzxob3N0bmFtZSBvciBpcC1h ZGRyZXNzPl0iLAotIiAgSWYgYSBob3N0bmFtZSBvciBpcC1hZGRyZXNzIGlzIHNwZWNpZmllZCwg S2VybWl0IHdpbGwgdXNlIHRoZSBTT0NLUyIsCi0iICBzZXJ2ZXIgd2hlbiBhdHRlbXB0aW5nIG91 dGdvaW5nIGNvbm5lY3Rpb25zLiAgSWYgbm8gaG9zdG5hbWUgb3IiLAotIiAgaXAtYWRkcmVzcyBp cyBzcGVjaWZpZWQsIGFueSBwcmV2aW91c2x5IHNwZWNpZmllZCBTT0NLUyBzZXJ2ZXIgd2lsbCIs Ci0iICBiZSByZW1vdmVkLiIsCi0jZW5kaWYgLyogQ0tfU09DS1MgKi8KLSNlbmRpZiAvKiBOVCAq LwotI2lmbmRlZiBOT0hUVFAKLSIgIiwKLSJTRVQgVENQIEhUVFAtUFJPWFkgWzxob3N0bmFtZSBv ciBpcC1hZGRyZXNzPls6PHBvcnQ+XV0iLAotIiAgSWYgYSBob3N0bmFtZSBvciBpcC1hZGRyZXNz IGlzIHNwZWNpZmllZCwgS2VybWl0IHdpbGwgdXNlIHRoZSBQcm94eSIsCi0iICBzZXJ2ZXIgd2hl biBhdHRlbXB0aW5nIG91dGdvaW5nIGNvbm5lY3Rpb25zLiAgSWYgbm8gaG9zdG5hbWUgb3IiLAot IiAgaXAtYWRkcmVzcyBpcyBzcGVjaWZpZWQsIGFueSBwcmV2aW91c2x5IHNwZWNpZmllZCBQcm94 eSBzZXJ2ZXIgd2lsbCIsCi0iICBiZSByZW1vdmVkLiAgSWYgbm8gcG9ydCBudW1iZXIgaXMgc3Bl Y2lmaWVkLCB0aGUgXCJodHRwXCIgc2VydmljZSIsCi0iICB3aWxsIGJlIHVzZWQuIiwKLSNlbmRp ZiAvKiBOT0hUVFAgKi8KLSIifTsKLSNlbmRpZiAvKiBOT1RDUE9QVFMgKi8KLSNlbmRpZiAvKiBO RVRDT05OICovCi0KLSNpZmRlZiBUTkNPREUKLXN0YXRpYyBjaGFyICpoeHl0b3B0W10gPSB7Ci0i U0VUIFRFTE9QVCBbIHsgL0NMSUVOVCwgL1NFUlZFUiB9IF0gPG9wdGlvbj4gLSIsCi0iICAgIHsg QUNDRVBURUQsIFJFRlVTRUQsIFJFUVVFU1RFRCwgUkVRVUlSRUQgfSAtIiwKLSIgICAgWyB7IEFD Q0VQVEVELCBSRUZVU0VELCBSRVFVRVNURUQsIFJFUVVJUkVEIH0gXSIsCi0iICBTRVQgVEVMT1BU IGxldHMgeW91IHNwZWNpZnkgcG9saWN5IHJlcXVpcmVtZW50cyBmb3IgS2VybWl0J3MgaGFuZGxp bmcgb2YiLAotIiAgVGVsbmV0IG9wdGlvbiBuZWdvdGlhdGlvbnMuICBTZXR0aW5nIGFuIG9wdGlv biBSRVFVSVJFRCBjYXVzZXMgS2VybWl0IiwKLSIgIHRvIG9mZmVyIHRoZSBvcHRpb24gdG8gdGhl IHBlZXIgYW5kIGRpc2Nvbm5lY3QgaWYgdGhlIG9wdGlvbiBpcyByZWZ1c2VkLiIsCi0iICBSRVFV RVNURUQgY2F1c2VzIEtlcm1pdCB0byBvZmZlciBhbiBvcHRpb24gdG8gdGhlIHBlZXIuICBBQ0NF UFRFRCByZXN1bHRzIiwKLSIgIGluIG5vIG9mZmVyIGJ1dCBLZXJtaXQgd2lsbCBhdHRlbXB0IHRv IG5lZ290aWF0ZSB0aGUgb3B0aW9uIGlmIGl0IGlzIiwKLSIgIHJlcXVlc3RlZC4gIFJFRlVTRUQg aW5zdHJ1Y3RzIEtlcm1pdCB0byByZWZ1c2UgdGhlIG9wdGlvbiBpZiBpdCBpcyIsCi0iICByZXF1 ZXN0ZWQgYnkgdGhlIHBlZXIuIiwKLSIgIiwKLSIgIFNvbWUgb3B0aW9ucyBhcmUgbmVnb3RpYXRl ZCBpbiB0d28gZGlyZWN0aW9ucyBhbmQgYWNjZXB0IHNlcGFyYXRlIHBvbGljaWVzIiwKLSIgIGZv ciBlYWNoIGRpcmVjdGlvbjsgdGhlIGZpcnN0IGtleXdvcmQgYXBwbGllcyB0byBLZXJtaXQgaXRz ZWxmLCB0aGUgc2Vjb25kIiwKLSIgIGFwcGxpZXMgdG8gS2VybWl0J3MgVGVsbmV0IHBhcnRuZXI7 IGlmIHRoZSBzZWNvbmQga2V5d29yZCBpcyBvbWl0dGVkLCBhbiIsCi0iICBhcHByb3ByaWF0ZSAo b3B0aW9uLXNwZWNpZmljKSBkZWZhdWx0IGlzIGFwcGxpZWQuICBZb3UgY2FuIGFsc28gaW5jbHVk ZSBhIiwKLSIgIC9DTElFTlQgb3IgL1NFUlZFUiBzd2l0Y2ggdG8gaW5kaWNhdGUgd2hldGhlciB0 aGUgZ2l2ZW4gcG9saWNpZXMgYXBwbHkiLAotIiAgd2hlbiBLZXJtaXQgaXMgdGhlIFRlbG5ldCBj bGllbnQgb3IgdGhlIFRlbG5ldCBzZXJ2ZXI7IGlmIG5vIHN3aXRjaCBpcyIsCi0iICBnaXZlbiwg dGhlIGNvbW1hbmQgYXBwbGllcyB0byB0aGUgY2xpZW50LiIsCi0iICIsCi0iICBOb3RlIHRoYXQg c29tZSBvZiBLZXJtaXQncyBUZWxuZXQgcGFydG5lcnMgZmFpbCB0byByZWZ1c2Ugb3B0aW9ucyB0 aGF0IiwKLSIgIHRoZXkgZG8gbm90IHJlY29nbml6ZSBhbmQgaW5zdGVhZCBkbyBub3QgcmVzcG9u ZCBhdCBhbGwuICBJbiB0aGlzIGNhc2UgaXQiLAotIiAgaXMgcG9zc2libGUgdG8gdXNlIFNFVCBU RUxPUFQgdG8gaW5zdHJ1Y3QgS2VybWl0IHRvIFJFRlVTRSB0aGUgb3B0aW9uIiwKLSIgIGJlZm9y ZSBjb25uZWN0aW5nIHRvIHRoZSBwcm9ibGVtIGhvc3QsIHRodXMgc2tpcHBpbmcgdGhlIHByb2Js ZW1hdGljIiwKLSIgIG5lZ290aWF0aW9uLiIsCi0iICIsCi0iICBVc2UgU0hPVyBURUxPUFQgdG8g dmlldyBjdXJyZW50IFRlbG5ldCBPcHRpb24gbmVnb3RpYXRpb24gc2V0dGluZ3MuIiwKLSIgIFNI T1cgVEVMTkVUIGRpc3BsYXlzIGN1cnJlbnQgVGVsbmV0IHNldHRpbmdzLiIsCi0iIn07Ci0KLXN0 YXRpYyBjaGFyICpoeHl0ZWxbXSA9IHsKLSJTeW50YXg6IFNFVCBURUxORVQgcGFyYW1ldGVyIHZh bHVlIiwKLSIgIiwKLSJGb3IgVENQL0lQIFRFTE5FVCBjb25uZWN0aW9ucywgd2hpY2ggYXJlIGlu IE5WVCAoQVNDSUkpIG1vZGUgYnkgZGVmYXVsdDoiLAotIiAiLAotI2lmZGVmIENLX0FVVEhFTlRJ Q0FUSU9OCi0jaWZkZWYgQ09NTUVOVAotIlNFVCBURUxORVQgQVVUSEVOSUNBVElPTiB7IEFDQ0VQ VEVELCBSRUZVU0VELCBSRVFVRVNURUQsIFJFUVVJUkVEIH0iLAotIiAgQUNDRVBUIG9yIFJFRlVT RSBhdXRoZW50aWNhdGlvbiBiaWRzLCBvciBhY3RpdmVseSBSRVFVRVNUIGF1dGhlbnRpY2F0aW9u LiIsCi0iICBSRVFVSVJFRCByZWZ1c2VzIHRoZSBjb25uZWN0aW9uIGlmIGF1dGhlbnRpY2F0aW9u IGlzIG5vdCBzdWNjZXNzZnVsbHkiLAotIiAgbmVnb3RpYXRlZC4gIEFDQ0VQVEVEIGJ5IGRlZmF1 bHQuIiwKLSIgIiwKLSNlbmRpZiAvKiBDT01NRU5UICovCi0iU0VUIFRFTE5FVCBBVVRIRU5USUNB VElPTiBUWVBFIHsgQVVUT01BVElDLCBLRVJCRVJPU19JViwgS0VSQkVST1NfViwgLi4uIiwKLSNp ZmRlZiBOVAotIiAgLi4uLCBOVExNLCBTU0wsIFNSUCwgTk9ORSB9IFsuLi5dIiwKLSNlbHNlIC8q IE5UICovCi0iICAuLi4sIFNTTCwgU1JQLCBOT05FIH0gWy4uLl0iLAotI2VuZGlmIC8qIE5UICov Ci0iICBBVVRPTUFUSUMgaXMgdGhlIGRlZmF1bHQuICBBdmFpbGFibGUgb3B0aW9ucyBjYW4gdmFy eSBkZXBlbmRpbmcgb24gdGhlIiwKLSIgIGZlYXR1cmVzIEtlcm1pdCB3YXMgYnVpbHQgdG8gc3Vw cG9ydCBhbmQgdGhlIG9wZXJhdGluZyBzeXN0ZW0iLAotIiAgY29uZmlndXJhdGlvbjsgdHlwZSBT RVQgVEVMTkVUIEFVVEhFTlRJQ0FUSU9OIFRZUEUgPyBmb3IgYSBsaXN0LiIsCi0iICIsCi0iICBX aGVuIEtlcm1pdCBpcyB0aGUgVGVsbmV0IGNsaWVudDoiLAotIiAgICBBVVRPTUFUSUMgYWxsb3dz IHRoZSBob3N0IHRvIGNob29zZSB0aGUgcHJlZmVycmVkIHR5cGUgb2YgYXV0aGVudGljYXRpb24u IgotLAotIiAgICBOT05FIGluc3RydWN0cyBLZXJtaXQgdG8gcmVmdXNlIGFsbCBhdXRoZW50aWNh dGlvbiBtZXRob2RzIHdoZW4gdGhlIiwKLSIgICAgYXV0aGVudGljYXRpb24gb3B0aW9uIGlzIG5l Z290aWF0ZWQuICBBIGxpc3Qgb2Ygb25lIG9yIG1vcmUgb3RoZXIgdmFsdWVzIiwKLSIgICAgYWxs b3cgYSBzcGVjaWZpYyBzdWJzZXQgb2YgdGhlIHN1cHBvcnRlZCBhdXRoZW50aWNhdGlvbiBtZXRo b2RzIHRvIGJlIiwKLSIgICAgdXNlZC4iLAotIiAiLAotIiAgV2hlbiBLZXJtaXQgaXMgdGhlIFRl bG5ldCBzZXJ2ZXI6IiwKLSIgICAgQVVUT01BVElDIHJlc3VsdHMgaW4gYXZhaWxhYmxlIGF1dGhl bnRpY2F0aW9uIG1ldGhvZHMgYmVpbmcgb2ZmZXJlZCIsCi0iICAgIHRvIHRoZSB0ZWxuZXQgY2xp ZW50IGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6IiwKLSIgIiwKLSNpZmRlZiBOVAotIiAgICAgIEtF UkJFUk9TX1YsIEtFUkJFUk9TX0lWLCBTUlAsIFNTTCwgTlRMTSIsCi0jZWxzZSAvKiBOVCAqLwot IiAgICAgIEtFUkJFUk9TX1YsIEtFUkJFUk9TX0lWLCBTUlAsIFNTTCwgTlRMTSIsCi0jZW5kaWYg LyogTlQgKi8KLSIgIiwKLSIgIE5PTkUgcmVzdWx0cyBpbiBubyBhdXRoZW50aWNhdGlvbiBtZXRo b2RzIGJlaW5nIG9mZmVyZWQgdG8gdGhlIFRlbG5ldCIsCi0iICBzZXJ2ZXIgd2hlbiB0aGUgYXV0 aGVudGljYXRpb24gb3B0aW9uIGlzIG5lZ290aWF0ZWQuICBUaGUgcHJlZmVycmVkIiwKLSIgIG1l dGhvZCBvZiBkaXNhYmxpbmcgYXV0aGVudGljYXRpb24gaXM6IiwKLSIgIiwKLSIgICAgU0VUIFRF TE9QVCAvU0VSVkVSIEFVVEhFTlRJQ0FUSU9OIFJFRlVTRSIsCi0iICIsCi0iICBBIGxpc3Qgb2Yg b25lIG9yIG1vcmUgYXV0aGVudGljYXRpb24gbWV0aG9kcyBzcGVjaWZpZXMgdGhlIG9yZGVyIHRo b3NlIiwKLSIgIG1ldGhvZHMgYXJlIHRvIGJlIG9mZmVyZWQgdG8gdGhlIHRlbG5ldCBjbGllbnQu IiwKLSNpZmRlZiBOVAotIiAiLAotIiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgTlRMTSBhdXRoZW50 aWNhdGlvbiB0byBiZSB1c2VkIHdpdGggdGhlIE1pY3Jvc29mdCIsCi0iICBXaW5kb3dzIDIwMDAg b3IgU2VydmljZXMgZm9yIFVuaXggVGVsbmV0IGNsaWVudCB5b3UgbXVzdCBzcGVjaWZ5IGEgbGlz dCIsCi0iICB3aXRoIE5UTE0gYXMgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3QuICBCeSBkZWZh dWx0LCBOVExNIGlzIHRoZSBsYXN0IiwKLSIgIGl0ZW0gaW4gdGhlIGxpc3QgYmVjYXVzZSBpdCBk b2VzIG5vdCBwcm92aWRlIGFueSBmb3JtIG9mIGRhdGEgZW5jcnlwdGlvbi4iLAotI2VuZGlmIC8q IE5UICovCi0iICIsCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSJTRVQgVEVMTkVUIEFVVEhFTlRJQ0FU SU9OIEZPUldBUkRJTkcgeyBPTiwgT0ZGIH0iLAotIiAgU2V0IHRoaXMgdG8gT04gdG8gZm9yd2Fy ZCBLZXJiZXJvcyBWIHRpY2tldC1ncmFudGluZy10aWNrZXRzIHRvIHRoZSBob3N0IiwKLSIgIGFm dGVyIGF1dGhlbnRpY2F0aW9uIGlzIGNvbXBsZXRlLiAgT0ZGIGJ5IGRlZmF1bHQuIiwKLSIgIiwK LSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotIlNFVCBURUxORVQgQVVUSEVOVElDQVRJT04gRU5D UllQVC1GTEFHIHsgQU5ZLCBOT05FLCBURUxPUFQgfSIsCi0iICBVc2UgdGhpcyBjb21tYW5kIHRv IHNwZWNpZnkgd2hpY2ggQVVUSCB0ZWxvcHQgZW5jcnlwdGlvbiBmbGFncyBtYXkgYmUiLAotIiAg YWNjZXB0ZWQgaW4gY2xpZW50IG1vZGUgb3Igb2ZmZXJlZCBpbiBzZXJ2ZXIgbW9kZS4gIFRoZSBk ZWZhdWx0IGlzIEFOWS4iLAotIiAiLAotIlNFVCBURUxORVQgQVVUSEVOVElDQVRJT04gSE9XLUZM QUcgeyBBTlksIE9ORS1XQVksIE1VVFVBTCB9IiwKLSIgIFVzZSB0aGlzIGNvbW1hbmQgdG8gc3Bl Y2lmeSB3aGljaCBBVVRIIHRlbG9wdCBob3cgZmxhZ3MgbWF5IGJlIiwKLSIgIGFjY2VwdGVkIGlu IGNsaWVudCBtb2RlIG9yIG9mZmVyZWQgaW4gc2VydmVyIG1vZGUuICBUaGUgZGVmYXVsdCBpcyBB TlkuIiwKLSIgIiwKLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotI2lmZGVmIENPTU1F TlQKLSJTRVQgVEVMTkVUIEJJTkFSWS1NT0RFIHsgQUNDRVBURUQsIFJFRlVTRUQsIFJFUVVFU1RF RCwgUkVRVUlSRUQgfSIsCi0iICBBQ0NFUFQgb3IgUkVGVVNFIGJpbmFyeS1tb2RlIGJpZHMsIG9y IGFjdGl2ZWx5IFJFUVVFU1QgYmluYXJ5IG1vZGUuIiwKLSIgIFJFUVVJUkVEIHJlZnVzZXMgdGhl IGNvbm5lY3Rpb24gaWYgYmluYXJ5IG1vZGUgaXMgbm90IHN1Y2Nlc3NmdWxseSIsCi0iICBuZWdv dGlhdGVkIGluIGJvdGggZGlyZWN0aW9ucy4gIEFDQ0VQVEVEIGJ5IGRlZmF1bHQuIiwKLSIgIiwK LSNlbmRpZiAvKiBDT01NRU5UICovCi0iU0VUIFRFTE5FVCBCSU5BUlktVFJBTlNGRVItTU9ERSB7 IE9OLCBPRkYgfSIsCi0iICBXaGVuIE9OIChPRkYgYnkgZGVmYXVsdCkgYW5kIEJJTkFSWSBuZWdv dGlhdGlvbnMgYXJlIG5vdCBSRUZVU0VEIEtlcm1pdCIsCi0iICB3aWxsIGF0dGVtcHQgdG8gbmVn b3RpYXRlIEJJTkFSWSBtb2RlIGluIGVhY2ggZGlyZWN0aW9uIGJlZm9yZSB0aGUgc3RhcnQiLAot IiAgb2YgZWFjaCBmaWxlIHRyYW5zZmVyLiAgQWZ0ZXIgdGhlIHRyYW5zZmVyIGlzIGNvbXBsZXRl IEJJTkFSWSBtb2RlIHdpbGwiLAotIiAgYmUgcmVzdG9yZWQgdG8gdGhlIHByZS10cmFuc2ZlciBz dGF0ZS4iLAotIiAiLAotIlNFVCBURUxORVQgQklOQVJZLVRSQU5TRkVSLU1PREUgeyBPTiwgT0ZG IH0iLAotIiAgU2V0IHRoaXMgY29tbWFuZCB0byBPTiBpZiB5b3Ugd2FudCB0byBmb3JjZSBLZXJt aXQgdG8gbmVnb3RpYXRlIiwKLSIgIFRlbG5ldCBCaW5hcnkgaW4gYm90aCBkaXJlY3Rpb25zIHdo ZW4gcGVyZm9ybWluZyBmaWxlIHRyYW5zZmVycy4iLAotIiAgRGVmYXVsdCBpcyBPRkYuICBBbGlh cyBTRVQgVEVMTkVUIEJJTkFSWS1YRkVSLU1PREUuIiwKLSIgIiwKLSJTRVQgVEVMTkVUIEJVRyBB VVRILUtSQjUtREVTIHsgT04sIE9GRiB9IiwKLSIgIERlZmF1bHQgaXMgT04uICBEaXNhYmxlIHRo aXMgYnVnIHRvIGVuYWJsZSB0aGUgdXNlIG9mIGVuY3J5cHRpb24gdHlwZXMiLAotIiAgb3RoZXIg dGhhbiBERVMgc3VjaCBhcyAzREVTIG9yIENBU1QtMTI4IHdoZW4gdGhlIEtlcmJlcm9zIDUgc2Vz c2lvbiBrZXkiLAotIiAgaXMgbG9uZ2VyIHRoYW4gOCBieXRlcy4iLAotIiAiLAotIlNFVCBURUxO RVQgQlVHIEJJTkFSWS1NRS1NRUFOUy1VLVRPTyB7IE9OLCBPRkYgfSIsCi0iICBTZXQgdGhpcyB0 byBPTiB0byB0cnkgdG8gb3ZlcmNvbWUgVEVMTkVUIGJpbmFyeS1tb2RlIG1pc25lZ290aWF0aW9u cyBieSIsCi0iICBLZXJtaXQncyBURUxORVQgcGFydG5lci4iLAotIiAiLAotIlNFVCBURUxORVQg QlVHIEJJTkFSWS1VLU1FQU5TLU1FLVRPTyB7IE9OLCBPRkYgfSIsCi0iICBTZXQgdGhpcyB0byBP TiB0byB0cnkgdG8gb3ZlcmNvbWUgVEVMTkVUIGJpbmFyeS1tb2RlIG1pc25lZ290aWF0aW9ucyBi eSIsCi0iICBLZXJtaXQncyBURUxORVQgcGFydG5lci4iLAotIiAiLAotIlNFVCBURUxORVQgQlVH IElORklOSVRFLUxPT1AtQ0hFQ0sgeyBPTiwgT0ZGIH0iLAotIiAgU2V0IHRoaXMgdG8gT04gdG8g cHJldmVudCBLZXJtaXQgZnJvbSByZXNwb25kaW5nIHRvIGEgdGVsbmV0IG5lZ290aWF0aW9uIiwK LSIgIHNlcXVlbmNlIHRoYXQgZW50ZXJzIGFuIGluZmluaXRlIGxvb3AuICBUaGUgZGVmYXVsdCBp cyBPRkYgYmVjYXVzZSB0aGlzIiwKLSIgIHNob3VsZCBuZXZlciBvY2N1ci4iLAotIiAiLAotIlNF VCBURUxORVQgQlVHIFNCLUlNUExJRVMtV0lMTC1ETyB7IE9OLCBPRkYgfSIsCi0iICBTZXQgdGhp cyB0byBPTiB0byBhbGxvdyBLZXJtaXQgdG8gcmVzcG9uZCB0byB0ZWxuZXQgc3ViLW5lZ290aWF0 aW9ucyBpZiIsCi0iICB0aGUgcGVlciBmb3JnZXRzIHRvIHJlc3BvbmQgdG8gV0lMTCB3aXRoIERP IG9yIHRvIERPIHdpdGggV0lMTC4iLAotIiAiLAotIlNFVCBURUxORVQgREVCVUcgeyBPTiwgT0ZG IH0iLAotIiAgU2V0IHRoaXMgdG8gT04gdG8gZGlzcGxheSB0ZWxuZXQgbmVnb3RpYXRpb25zIGFz IHRoZXkgYXJlIHNlbnQgYW5kIiwKLSIgIHJlY2VpdmVkLiIsCi0iICIsCi0iU0VUIFRFTE5FVCBE RUxBWS1TQiB7IE9OLCBPRkYgfSIsCi0iICBXaGVuIE9OLCB0ZWxuZXQgc3VibmVnb3RpYXRpb24g cmVzcG9uc2VzIGFyZSBkZWxheWVkIHVudGlsIGFmdGVyIGFsbCIsCi0iICBhdXRoZW50aWNhdGlv biBhbmQgZW5jcnlwdGlvbiBvcHRpb25zIGFyZSBlaXRoZXIgc3VjY2Vzc2Z1bGx5IG5lZ290aWF0 ZWQiLAotIiAgb3IgcmVmdXNlZC4gVGhpcyBlbnN1cmVzIHRoYXQgcHJpdmF0ZSBkYXRhIGlzIHBy b3RlY3RlZC4gIFdoZW4gT0ZGLCB0ZWxuZXQiLAotIiAgc3VibmVnb3RpYXRpb24gcmVzcG9uc2Vz IGFyZSBzZW50IGltbWVkaWF0ZWx5LiAgVGhlIGRlZmF1bHQgaXMgT04uIiwKLSIgIiwKLSJTRVQg VEVMTkVUIEVDSE8geyBMT0NBTCwgUkVNT1RFIH0iLAotIiAgS2VybWl0J3MgaW5pdGlhbCBlY2hv aW5nIHN0YXRlIGZvciBURUxORVQgY29ubmVjdGlvbnMsIExPQ0FMIGJ5IGRlZmF1bHQuIiwKLSIg IEFmdGVyIHRoZSBjb25uZWN0aW9uIGlzIG1hZGUsIFRFTE5FVCBuZWdvdGlhdGlvbnMgZGV0ZXJt aW5lIHRoZSBlY2hvaW5nLiIsCi0iICIsCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotI2lmZGVmIENP TU1FTlQKLSJTRVQgVEVMTkVUIEVOQ1JZUFRJT04geyBBQ0NFUFRFRCwgUkVGVVNFRCwgUkVRVUVT VEVELCBSRVFVSVJFRCB9IiwKLSIgIEFDQ0VQVCBvciBSRUZVU0UgZW5jcnlwdGlvbiBiaWRzLCBv ciBhY3RpdmVseSBSRVFVRVNUIGVuY3J5cHRpb24gaW4gYm90aC4iLAotIiAgZGlyZWN0aW9ucy4g IFJFUVVJUkVEIHJlZnVzZXMgdGhlIGNvbm5lY3Rpb24gaWYgZW5jcnlwdGlvbiBpcyBub3QiLAot IiAgc3VjY2Vzc2Z1bGx5IG5lZ290aWF0ZWQgaW4gYm90aCBkaXJlY3Rpb25zLiAgQUNDRVBURUQg YnkgZGVmYXVsdC4iLAotIiAiLAotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSJTRVQgVEVMTkVUIEVO Q1JZUFRJT04gVFlQRSB7IEFVVE9NQVRJQywgQ0FTVDEyOF9DRkI2NCwgQ0FTVDEyOF9PRkI2NCwg IiwKLSIgIENBU1Q1XzQwX0NGQjY0LCBDQVNUNV80MF9PRkI2NCwgREVTX0NGQjY0LCBERVNfT0ZC NjQsIE5PTkUgfSIsCi0iICBBVVRPTUFUSUMgYWxsb3dzIHRoZSBob3N0IHRvIGNob29zZSB0aGUg cHJlZmVycmVkIHR5cGUgb2YgZW5jcnlwdGlvbi4iLAotIiAgT3RoZXIgdmFsdWVzIGFsbG93IGEg c3BlY2lmaWMgZW5jcnlwdGlvbiBtZXRob2QgdG8gYmUgc3BlY2lmaWVkLiIsCi0iICBBVVRPTUFU SUMgaXMgdGhlIGRlZmF1bHQuICBUaGUgbGlzdCBvZiBvcHRpb25zIHdpbGwgdmFyeSBkZXBlbmRp bmciLAotIiAgb24gdGhlIGVuY3J5cHRpb24gdHlwZXMgc2VsZWN0ZWQgYXQgY29tcGlsYXRpb24g dGltZS4iLAotIiAiLAotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNpZmRlZiBDS19FTlZJ Uk9OTUVOVAotI2lmZGVmIENPTU1FTlQKLSJTRVQgVEVMTkVUIEVOVklST05NRU5UIHsgT04sIE9G RiwgdmFyaWFibGUtbmFtZSBbIHZhbHVlIF0gfSIsCi0iICBUaGlzIGZlYXR1cmUgbGV0cyBLZXJt aXQgc2VuZCB0aGUgdmFsdWVzIG9mIGNlcnRhaW4gZW52aXJvbm1lbnQgdmFyaWFibGVzIiwKLSIg IHRvIHRoZSBvdGhlciBjb21wdXRlciBpZiBpdCBhc2tzIGZvciB0aGVtLiAgVGhlIHZhcmlhYmxl LW5hbWUgY2FuIGJlIGFueSIsCi0iICBvZiB0aGUgXCJ3ZWxsLWtub3duXCIgdmFyaWFibGVzIFwi VVNFUlwiLCBcIkpPQlwiLCBcIkFDQ1RcIiwgXCJQUklOVEVSXCIsIiwKLSIgIFwiU1lTVEVNVFlQ RVwiLCBvciBcIkRJU1BMQVlcIi4gIFNvbWUgVGVsbmV0IHNlcnZlcnMsIGlmIGdpdmVuIGEgVVNF UiIsCi0iICB2YWx1ZSBpbiB0aGlzIHdheSwgd2lsbCBhY2NlcHQgaXQgYW5kIHRoZXJlZm9yZSBu b3QgcHJvbXB0IHlvdSBmb3IgdXNlciIsCi0iICBuYW1lIHdoZW4geW91IGxvZyBpbi4gIFRoZSBk ZWZhdWx0IHZhbHVlcyBhcmUgdGFrZW4gZnJvbSB5b3VyIGVudmlyb25tZW50OyIsCi0iICB1c2Ug dGhpcyBjb21tYW5kIHRvIGNoYW5nZSBvciByZW1vdmUgdGhlbS4gIFNlZSBSRkMxNTcyIGZvciBk ZXRhaWxzLiAgWW91IiwKLSIgIG1heSBhbHNvIHNwZWNpZnkgT0ZGIHRvIGRpc2FibGUgdGhpcyBm ZWF0dXJlLCBhbmQgT04gdG8gcmUtZW5hYmxlIGl0LiIsCi0iICIsCi0jZWxzZQotIlNFVCBURUxO RVQgRU5WSVJPTk1FTlQgeyB2YXJpYWJsZS1uYW1lIFsgdmFsdWUgXSB9IiwKLSIgIFRoaXMgZmVh dHVyZSBsZXRzIEtlcm1pdCBzZW5kIHRoZSB2YWx1ZXMgb2YgY2VydGFpbiBlbnZpcm9ubWVudCB2 YXJpYWJsZXMiLAotIiAgdG8gdGhlIG90aGVyIGNvbXB1dGVyIGlmIGl0IGFza3MgZm9yIHRoZW0u ICBUaGUgdmFyaWFibGUtbmFtZSBjYW4gYmUgYW55IiwKLSIgIG9mIHRoZSBcIndlbGwta25vd25c IiB2YXJpYWJsZXMgXCJVU0VSXCIsIFwiSk9CXCIsIFwiQUNDVFwiLCBcIlBSSU5URVJcIiwiLAot IiAgXCJTWVNURU1UWVBFXCIsIG9yIFwiRElTUExBWVwiLiAgU29tZSBUZWxuZXQgc2VydmVycywg aWYgZ2l2ZW4gYSBVU0VSIiwKLSIgIHZhbHVlIGluIHRoaXMgd2F5LCB3aWxsIGFjY2VwdCBpdCBh bmQgdGhlcmVmb3JlIG5vdCBwcm9tcHQgeW91IGZvciB1c2VyIiwKLSIgIG5hbWUgd2hlbiB5b3Ug bG9nIGluLiAgVGhlIGRlZmF1bHQgdmFsdWVzIGFyZSB0YWtlbiBmcm9tIHlvdXIgZW52aXJvbm1l bnQ7IiwKLSIgIHVzZSB0aGlzIGNvbW1hbmQgdG8gY2hhbmdlIG9yIHJlbW92ZSB0aGVtLiAgU2Vl IFJGQzE1NzIgZm9yIGRldGFpbHMuIiwKLSIgIiwKLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZW5k aWYgLyogQ0tfRU5WSVJPTk1FTlQgKi8KLSNpZmRlZiBDS19GT1JXQVJEX1gKLSJTRVQgVEVMTkVU IEZPUldBUkQtWCBYQVVUSE9SSVRZLUZJTEUgPGZpbGU+IiwKLSIgIElmIHlvdXIgWCBTZXJ2ZXIg cmVxdWlyZXMgWCBhdXRoZW50aWNhdGlvbiBhbmQgdGhlIGxvY2F0aW9uIG9mIHRoZSIsCi0iICAu WGF1dGhvcml0eSBmaWxlIGlzIG5vdCBkZWZpbmVkIGJ5IHRoZSBYQVVUSE9SSVRZIGVudmlyb25t ZW50IHZhcmlhYmxlLCIsCi0iICB1c2UgdGhpcyBjb21tYW5kIHRvIHNwZWNpZnkgdGhlIGxvY2F0 aW9uIG9mIHRoZSAuWGF1dGhvcml0eSBmaWxlLiIKLSIgICIsCi0jZW5kaWYgLyogQ0tfRk9SV0FS RF9YICovCi0jaWZkZWYgQ0tfU05ETE9DCi0iU0VUIFRFTE5FVCBMT0NBVElPTiBbIHRleHQgXSIs Ci0iICBMb2NhdGlvbiBzdHJpbmcgdG8gc2VuZCB0byB0aGUgVGVsbmV0IHNlcnZlciBpZiBpdCBh c2tzLiAgQnkgZGVmYXVsdCB0aGlzIiwKLSIgIGlzIHBpY2tlZCB1cCBmcm9tIHRoZSBMT0NBVElP TiBlbnZpcm9ubWVudCB2YXJpYWJsZS4gIEdpdmUgdGhpcyBjb21tYW5kIiwKLSIgIHdpdGggbm8g dGV4dCB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZS4iLAotIiAiLAotI2VuZGlmIC8qIENLX1NORExP QyAqLwotIlNFVCBURUxORVQgTkVXTElORS1NT0RFIHsgTlZULCBCSU5BUlktTU9ERSB9IHsgT0ZG LCBPTiwgUkFXIH0iLAotCi0iICBEZXRlcm1pbmVzIGhvdyBjYXJyaWFnZSByZXR1cm5zIGFyZSBo YW5kbGVkIG9uIFRFTE5FVCBjb25uZWN0aW9ucy4gIFRoZXJlIiwKLSIgIGFyZSBzZXBhcmF0ZSBz ZXR0aW5ncyBmb3IgTlZUIChBU0NJSSkgbW9kZSBhbmQgYmluYXJ5IG1vZGUuICBPTiAoZGVmYXVs dCIsCi0iICBmb3IgTlZUIG1vZGUpIG1lYW5zIENSTEYgcmVwcmVzZW50cyBDUi4gIE9GRiBtZWFu cyBDUiBmb2xsb3dlZCBieSBOVUwiLAotIiAgcmVwcmVzZW50cyBDUi4gIFJBVyAoZGVmYXVsdCBm b3IgQklOQVJZIG1vZGUpIG1lYW5zIENSIHN0YW5kcyBmb3IgaXRzZWxmLiIsCi0iICIsCi0jaWZk ZWYgVENQU09DS0VUCi0iU0VUIFRFTE5FVCBQUk9NUFQtRk9SLVVTRVJJRCA8cHJvbXB0PiIsCi0i ICBTcGVjaWZpZXMgYSBjdXN0b20gcHJvbXB0IHRvIGJlIHVzZWQgd2hlbiBwcm9tcHRpbmcgZm9y IGEgdXNlcmlkLiAgS2VybWl0IiwKLSIgIHByb21wdHMgZm9yIGEgdXNlcmlkIGlmIHRoZSBjb21t YW5kOiIsCi0iICIsCi0iICAgIFNFVCBMT0dJTiBVU0VSSUQge30iLAotIiAiLAotIiAgaGFzIGJl ZW4gaXNzdWVkIHByaW9yIHRvIGEgVGVsbmV0IGF1dGhlbnRpY2F0aW9uIG5lZ290aWF0aW9uIGZv ciBhbiIsCi0iICBhdXRoZW50aWNhdGlvbiB0eXBlIHRoYXQgcmVxdWlyZXMgdGhlIHRyYW5zbWlz c2lvbiBvZiBhIG5hbWUsIHN1Y2ggYXMiLAotIiAgU2VjdXJlIFJlbW90ZSBQYXNzd29yZC4iLAot IiAiLAotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotIlNFVCBURUxORVQgUkVNT1RFLUVDSE8geyBP TiwgT0ZGIH0iLAotIiAgQXBwbGllcyBvbmx5IHRvIGluY29taW5nIGNvbm5lY3Rpb25zIGNyZWF0 ZWQgd2l0aDoiLAotIiAgICBTRVQgSE9TVCAqIDxwb3J0PiAvVEVMTkVUIiwKLSIgIFRoaXMgY29t bWFuZCBkZXRlcm1pbmVzIHdoZXRoZXIgS2VybWl0IHdpbGwgYWN0dWFsbHkgZWNobyBjaGFyYWN0 ZXJzIiwKLSIgIHJlY2VpdmVkIGZyb20gdGhlIHJlbW90ZSB3aGVuIGl0IGhhcyBuZWdvdGlhdGVk IHRvIGRvIHNvLiAgVGhlIGRlZmF1bHQiLAotIiAgaXMgT04uICBSZW1vdGUgZWNob2luZyBtYXkg YmUgdHVybmVkIG9mZiB3aGVuIGl0IGlzIG5lY2Vzc2FyeSB0byByZWFkIiwKLSIgIGEgcGFzc3dv cmQgd2l0aCB0aGUgSU5QVVQgY29tbWFuZC4iLAotIiAiLAotIlNFVCBURUxORVQgVEVSTUlOQUwt VFlQRSBuYW1lIiwKLSIgIFRoZSB0ZXJtaW5hbCB0eXBlIHRvIHNlbmQgdG8gdGhlIHJlbW90ZSBU RUxORVQgaG9zdC4gIElmIG5vbmUgaXMgZ2l2ZW4sIiwKLSNpZmRlZiBPUzIKLSIgIHlvdXIgY3Vy cmVudCBTRVQgVEVSTUlOQUwgVFlQRSB2YWx1ZSBpcyBzZW50LCBlLmcuIFZUMjIwLiIsCi0iICIs Ci0jZWxzZQotIiAgeW91ciBsb2NhbCB0ZXJtaW5hbCB0eXBlIGlzIHNlbnQuIiwKLSIgIiwKLSNl bmRpZiAvKiBPUzIgKi8KLSJTRVQgVEVMTkVUIFdBSVQtRk9SLU5FR09USUFUSU9OUyB7IE9OLCBP RkYgfSIsCi0iICBFYWNoIFRlbG5ldCBvcHRpb24gbXVzdCBiZSBmdWxseSBuZWdvdGlhdGVkIGVp dGhlciBPbiBvciBPZmYgYmVmb3JlIHRoZSIsCi0iICBzZXNzaW9uIGNhbiBjb250aW51ZS4gIFRo aXMgaXMgZXNwZWNpYWxseSB0cnVlIHdpdGggb3B0aW9ucyB0aGF0IHJlcXVpcmUiLAotIiAgc3Vi bmVnb3RpYXRpb25zIHN1Y2ggYXMgQXV0aGVudGljYXRpb24sIEVuY3J5cHRpb24sIGFuZCBLZXJt aXQ7IGZvciIsCi0iICBwcm9wZXIgc3VwcG9ydCBvZiB0aGVzZSBvcHRpb25zIEtlcm1pdCBtdXN0 IHdhaXQgZm9yIHRoZSBuZWdvdGlhdGlvbnMgdG8iLAotIiAgY29tcGxldGUuICBPZiBjb3Vyc2Us IEtlcm1pdCBoYXMgbm8gd2F5IG9mIGtub3dpbmcgd2hldGhlciBhIHJlcGx5IGlzIiwKLSIgIGRl bGF5ZWQgb3Igbm90IGNvbWluZyBhdCBhbGwsIGFuZCBzbyB3aWxsIHdhaXQgYSBtaW51dGUgb3Ig bW9yZSBmb3IiLAotIiAgcmVxdWlyZWQgcmVwbGllcyBiZWZvcmUgY29udGludWluZyB0aGUgc2Vz c2lvbi4gIElmIHlvdSBrbm93IHRoYXQgS2VybWl0J3MiLAotIiAgVGVsbmV0IHBhcnRuZXIgd2ls bCBub3QgYmUgc2VuZGluZyB0aGUgcmVxdWlyZWQgcmVwbGllcywgeW91IGNhbiBzZXQgdGhpcyIs Ci0iICBvcHRpb24gb2YgT0ZGIHRvIGF2b2lkIHRoZSBsb25nIHRpbWVvdXRzLiAgT3IgeW91IGNh biBpbnN0cnVjdCBLZXJtaXQgdG8iLAotIiAgUkVGVVNFIHNwZWNpZmljIG9wdGlvbnMgd2l0aCB0 aGUgU0VUIFRFTE9QVCBjb21tYW5kLiIsCi0iIiwKLSJUeXBlIFNIT1cgVEVMTkVUIHRvIHNlZSB0 aGUgY3VycmVudCB2YWx1ZXMgb2YgdGhlc2UgcGFyYW1ldGVycy4iLAotIiIgfTsKLSNlbmRpZiAv KiBUTkNPREUgKi8KLQotI2lmbmRlZiBOT1NQTAotc3RhdGljIGNoYXIgKmh4eW1hY3JbXSA9IHsK LSJTeW50YXg6IFNFVCBNQUNSTyBwYXJhbWV0ZXIgdmFsdWUiLAotIiAgQ29udHJvbHMgdGhlIGJl aGF2aW9yIG9mIG1hY3Jvcy4iLAotIiAiLAotIlNFVCBNQUNSTyBFQ0hPIHsgT04sIE9GRiB9IiwK LSIgIFRlbGxzIHdoZXRoZXIgY29tbWFuZHMgZXhlY3V0ZWQgZnJvbSBhIG1hY3JvIGRlZmluaXRp b24gc2hvdWxkIGJlIiwKLSIgIGRpc3BsYXllZCBvbiB0aGUgc2NyZWVuLiAgT0ZGIGJ5IGRlZmF1 bHQ7IHVzZSBPTiBmb3IgZGVidWdnaW5nLiIsCi0iICIsCi0iU0VUIE1BQ1JPIEVSUk9SIHsgT04s IE9GRiB9IiwKLSIgIFRlbGxzIHdoZXRoZXIgYSBtYWNybyBzaG91bGQgYmUgYXV0b21hdGljYWxs eSB0ZXJtaW5hdGVkIHVwb24gYSBjb21tYW5kIiwKLSIgIGVycm9yLiAgVGhpcyBzZXR0aW5nIGlz IGxvY2FsIHRvIHRoZSBjdXJyZW50IG1hY3JvLCBhbmQgaW5oZXJpdGVkIGJ5IiwKLSIgIHN1Ym9y ZGluYXRlIG1hY3Jvcy4iLAotIiIgfTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi1zdGF0aWMgY2hh ciAqaG14eXBybVtdID0gewotIlN5bnRheDogU0VUIFBST01QVCBbIHRleHQgXSIsCi0iICIsCi0j aWZkZWYgT1MyCi0iUHJvbXB0IHRleHQgZm9yIHRoaXMgcHJvZ3JhbSwgbm9ybWFsbHkgJ0stOTU+ Jy4gIE1heSBjb250YWluIGJhY2tzbGFzaCIsCi0jZWxzZQotI2lmZGVmIE1BQwotIlByb21wdCB0 ZXh0IGZvciB0aGlzIHByb2dyYW0sIG5vcm1hbGx5ICdNYWMtS2VybWl0PicuICBNYXkgY29udGFp biBiYWNrc2xhc2giLAotI2Vsc2UKLSJQcm9tcHQgdGV4dCBmb3IgdGhpcyBwcm9ncmFtLCBub3Jt YWxseSAnQy1LZXJtaXQ+Jy4gIE1heSBjb250YWluIGJhY2tzbGFzaCIsCi0jZW5kaWYgLyogTUFD ICovCi0jZW5kaWYgLyogT1MyICovCi0iY29kZXMgZm9yIHNwZWNpYWwgZWZmZWN0cy4gIFN1cnJv dW5kIGJ5IHsgfSB0byBwcmVzZXJ2ZSBsZWFkaW5nIG9yIHRyYWlsaW5nIiwKLSNpZmRlZiBPUzIK LSJzcGFjZXMuICBJZiB0ZXh0IG9taXR0ZWQsIHByb21wdCByZXZlcnRzIHRvIEstOTU+LiAgUHJv bXB0IGNhbiBpbmNsdWRlIiwKLSNlbHNlCi0jaWZkZWYgTUFDCi0ic3BhY2VzLiAgSWYgdGV4dCBv bWl0dGVkLCBwcm9tcHQgcmV2ZXJ0cyB0byBNYWMtS2VybWl0Pi4gIFByb21wdCBjYW4gaW5jbHVk ZSIsCi0jZWxzZQotInNwYWNlcy4gIElmIHRleHQgb21pdHRlZCwgcHJvbXB0IHJldmVydHMgdG8g Qy1LZXJtaXQ+LiAgUHJvbXB0IGNhbiBpbmNsdWRlIiwKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRp ZiAvKiBNQUMgKi8KLSJ2YXJpYWJsZXMgbGlrZSBcXHYoZGlyKSBvciBcXHYodGltZSkgdG8gc2hv dyBjdXJyZW50IGRpcmVjdG9yeSBvciB0aW1lLiIsCi0iIiB9OwotCi0jaWZkZWYgVU5JWAotc3Rh dGljIGNoYXIgKmh4eXdpbGRbXSA9IHsKLSJTeW50YXg6IFNFVCBXSUxEQ0FSRC1FWFBBTlNJT04g eyBLRVJNSVQgWyBzd2l0Y2ggXSwgU0hFTEwsIE9OLCBPRkYgfSIsCi0iICBLRVJNSVQgKHRoZSBk ZWZhdWx0KSBtZWFucyBDLUtlcm1pdCBleHBhbmRzIGZpbGVuYW1lIHdpbGRjYXJkcyBpbiBTRU5E IGFuZCIsCi0iICBzaW1pbGFyIGNvbW1hbmRzIGl0c2VsZiwgYW5kIGluIGluY29taW5nIEdFVCBj b21tYW5kcy4gIE9wdGlvbmFsIHN3aXRjaGVzIiwKLSIgIGFyZSAvTk8tTUFUQ0gtRE9ULUZJTEVT IChcIipcIiBhbmQgXCI/XCIgc2hvdWxkIG5vdCBtYXRjaCBhbiBpbml0aWFsIiwKLSIgIHBlcmlv ZCBpbiBhIGZpbGVuYW1lOyB0aGlzIGlzIHRoZSBkZWZhdWx0KSBhbmQgL01BVENILURPVC1GSUxF UyBpZiB5b3UiLAotIiAgd2FudCBmaWxlcyB3aG9zZSBuYW1lcyBiZWdpbiB3aXRoIFwiLlwiIGlu Y2x1ZGVkLiAgU0VUIFdJTERDQVJEIFNIRUxMIiwKLSIgIG1lYW5zIHRoYXQgS2VybWl0IGFza3Mg eW91ciBwcmVmZXJyZWQgc2hlbGwgdG8gZXhwYW5kIHdpbGRjYXJkcyAodGhpcyIsCi0iICBzaG91 bGQgbm90IGJlIG5lY2Vzc2FyeSBpbiBDLUtlcm1pdCA3LjAgYW5kIGxhdGVyKS4gIEhFTFAgV0lM RENBUkQgZm9yIiwKLSIgIGZ1cnRoZXIgaW5mb3JtYXRpb24uIiwKLSIgIiwKLSIgIFRoZSBPTiBh bmQgT0ZGIGNob2ljZXMgYWxsb3cgeW91IHRvIGRpc2FibGUgYW5kIHJlbmFibGUgd2lsZGNhcmQi LAotIiAgcHJvY2Vzc2luZyBpbmRlcGVuZGVudCBvZiB0aGUgS0VSTUlUIC8gU0hFTEwgY2hvaWNl LiAgRGlzYWJsaW5nIHdpbGRjYXJkcyIsCi0iICBhbGxvd3MgeW91IHRvIHByb2Nlc3MgYW4gYXJy YXkgb3IgbGlzdCBvZiBmaWxlbmFtZXMgd2l0aG91dCBoYXZpbmcgdG8iLAotIiAgY29uc2lkZXIg d2hldGhlciB0aGUgbmFtZXMgbWlnaHQgY29udGFpbiBsaXRlcmFsIHdpbGRjYXJkIGNoYXJhY3Rl cnMuIiwKLSIgIFdBUk5JTkc6IFNFVCBXSUxEIE9GRiBhbHNvIGRpc2FibGVzIGludGVybmFsIGZp bGVuYW1lIHBhdHRlcm4tbWF0Y2hpbmcsIiwKLSIgIHVzZWQgKGZvciBleGFtcGxlKSBpbiBjcmVh dGluZyBiYWNrdXAgZmlsZXMuIiwKLSIiIH07Ci0jZWxzZQotc3RhdGljIGNoYXIgKmh4eXdpbGRb XSA9IHsKLSJTeW50YXg6IFNFVCBXSUxEQ0FSRC1FWFBBTlNJT04geyBPTiwgT0ZGIH0iLAotIiAg T04gKHRoZSBkZWZhdWx0KSBtZWFucyB0aGF0IGZpbGVuYW1lcyBnaXZlbiB0byBLZXJtaXQgY29t bWFuZHMgc3VjaCBhcyIsCi0iICBTRU5EIGFuZCBESVJFQ1RPUlkgYXJlIGF1dG9tYXRpY2FsbHkg ZXhwYW5kZWQgaW50byBsaXN0cyBvZiBmaWxlbmFtZXMgaWYiLAotIiAgdGhleSBjb250YWluIHNw ZWNpYWwgJ3dpbGRjYXJkIGNoYXJhY3RlcnMnIHN1Y2ggYXMgJyonLiAgWW91IGNhbiByZWZlcmVu Y2UiLAotIiAgZmlsZXMgd2hvc2UgbmFtZXMgY29udGFpbnMgc3VjaCBjaGFyYWN0ZXJzIGxpdGVy YWxseSBieSBwcmVjZWRpbmcgZWFjaCIsCi0iICBzdWNoIGNoYXJhY3RlciB3aXRoIGEgYmFja3Ns YXNoICdcXCcuICBXaGVuIGRlYWxpbmcgcHJvZ3JhbW1hdGljYWxseSB3aXRoIiwKLSIgIGEgZmls ZSBsaXN0LCBob3dldmVyLCB5b3Ugc2hvdWxkIFNFVCBXSUxEQ0FSRC1FWFBBTlNJT04gT0ZGIHRv IGZvcmNlIiwKLSIgIHRyZWF0IGVhY2ggbmFtZSBpbiB0aGUgbGlzdCBhcyBhIGxpdGVyYWwgbmFt ZS4gIFNlZSBIRUxQIFdJTERDQVJEUyBmb3IiLAotIiAgZGV0YWlscyBhYm91dCB3aWxkY2FyZCBz eW50YXguIiwKLSIiIH07Ci0jZW5kaWYgLyogVU5JWCAqLwotCi0jaWZuZGVmIE5PWEZFUgotc3Rh dGljIGNoYXIgKmh4eXdpbmRbXSA9IHsKLSJTeW50YXg6IFNFVCBXSU5ET1ctU0laRSBudW1iZXIi LAotIiAgU3BlY2lmaWVzIG51bWJlciBvZiBzbG90cyBmb3Igc2xpZGluZyB3aW5kb3dzLCBpLmUu IHRoZSBudW1iZXIgb2YgcGFja2V0cyIsCi0iICB0aGF0IGNhbiBiZSB0cmFuc21pdHRlZCBiZWZv cmUgd2FpdGluZyBmb3IgYWNrbm93bGVkZ2VtZW50LiAgVGhlIGRlZmF1bHQiLAotI2lmZGVmIFhZ Wl9JTlRFUk5BTAotIiAgZm9yIEtlcm1pdCBwcm90b2NvbCBpcyBvbmUsIHRoZSBtYXhpbXVtIGlz IDMyOyBmb3IgWk1PREVNLCB0aGUgZGVmYXVsdCIsCi0iICBpcyBubyB3aW5kb3dpbmcgKDApLiAg Rm9yIFpNT0RFTSwgdGhlIHdpbmRvdyBzaXplIGlzIHJlYWxseSB0aGUgcGFja2V0IiwKLSIgIGxl bmd0aCwgYW5kIGlzIHVzZWQgb25seSB3aGVuIG5vbi13aW5kb3dlZCAoc3RyZWFtaW5nKSB0cmFu c2ZlcnMgZmFpbDsgdGhlIiwKLSIgIFpNT0RFTSB3aW5kb3cgc2l6ZSBzaG91bGQgYmUgYSBsYXJn aXNoIG51bWJlciwgbGlrZSAxMDI0LCBhbmQgaXQgc2hvdWxkIGJlIiwKLSIgIGEgbXVsdGlwbGUg b2YgNjQuIiwKLSNlbHNlCi0iICBpcyBvbmUsIHRoZSBtYXhpbXVtIGlzIDMyLiAgSW5jcmVhc2Vk IHdpbmRvdyBzaXplIG1pZ2h0IHJlc3VsdCBpbiByZWR1Y2VkIiwKLSIgIG1heGltdW0gcGFja2V0 IGxlbmd0aC4gIFVzZSBzbGlkaW5nIHdpbmRvd3MgZm9yIGltcHJvdmVkIGVmZmljaWVuY3kgb24i LAotIiAgY29ubmVjdGlvbnMgd2l0aCBsb25nIGRlbGF5cy4gIEEgZnVsbCBkdXBsZXggY29ubmVj dGlvbiBpcyByZXF1aXJlZCwgYXMiLAotIiAgd2VsbCBhcyBhIGNvb3BlcmF0aW5nIEtlcm1pdCBv biB0aGUgb3RoZXIgZW5kLiIsCi0jZW5kaWYgLyogWFlaX0lOVEVSTkFMICovCi0iIiB9OwotCi1z dGF0aWMgY2hhciAqaHh5cnB0W10gPSB7Ci0iU3ludGF4OiBTRVQgUkVQRUFUIHsgQ09VTlRTIHsg T04sIE9GRiB9LCBQUkVGSVggPGNvZGU+IH0iLAotIiAgU0VUIFJFUEVBVCBDT1VOVFMgdHVybnMg dGhlIHJlcGVhdC1jb3VudCBjb21wcmVzc2lvbiBtZWNoYW5pc20gT04gYW5kIE9GRi4iLAotIiAg VGhlIGRlZmF1bHQgaXMgT04uICBTRVQgUkVQRUFUIFBSRUZJWCA8Y29kZT4gc2V0cyB0aGUgcmVw ZWF0LWNvdW50IHByZWZpeCIsCi0iICBjaGFyYWN0ZXIgdG8gdGhlIGdpdmVuIGNvZGUuICBUaGUg ZGVmYXVsdCBpcyAxMjYgKHRpbGRlKS4iLAotIiIgfTsKLQotc3RhdGljIGNoYXIgKmh4eXJjdltd ID0gewotIlN5bnRheDogU0VUIFJFQ0VJVkUgcGFyYW1ldGVyIHZhbHVlIiwKLSIgIFNwZWNpZmll cyBwYXJhbWV0ZXJzIGZvciBpbmJvdW5kIHBhY2tldHM6IiwKLSIgIiwKLSNpZm5kZWYgTk9DU0VU UwotIlNFVCBSRUNFSVZFIENIQVJBQ1RFUi1TRVQgeyBBVVRPTUFUSUMsIE1BTlVBTCB9IiwKLSIg IFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBzd2l0Y2ggdG8gYW4gYXBwcm9wcmlhdGUgZmlsZS1j aGFyYWN0ZXIgc2V0IGJhc2VkIiwKLSIgIG9uIHRoZSB0cmFuc2ZlciBjaGFyYWN0ZXItc2V0IGFu bm91bmNlciwgaWYgYW55LCBvZiBhbiBpbmNvbWluZyB0ZXh0IGZpbGUuIiwKLSIgIEFVVE9NQVRJ QyBieSBkZWZhdWx0LiAgQWxzbyBzZWUgSEVMUCBBU1NPQ0lBVEUuIiwKLSIgIiwKLSNlbmRpZiAv KiBOT0NTRVRTICovCi0iU0VUIFJFQ0VJVkUgQ09OVFJPTC1QUkVGSVggbnVtYmVyIiwKLSIgIEFT Q0lJIHZhbHVlIG9mIHByZWZpeCBjaGFyYWN0ZXIgdXNlZCBmb3IgcXVvdGluZyBjb250cm9sIGNo YXJhY3RlcnMgaW4iLAotIiAgcGFja2V0cyB0aGF0IEtlcm1pdCByZWNlaXZlcywgbm9ybWFsbHkg MzUgKG51bWJlciBzaWduKS4gIERvbid0IGNoYW5nZSIsCi0iICB0aGlzIHVubGVzcyBzb21ldGhp bmcgaXMgd3Jvbmcgd2l0aCB0aGUgb3RoZXIgS2VybWl0IHByb2dyYW0uIiwKLSIgIiwKLSJTRVQg UkVDRUlWRSBFTkQtT0YtUEFDS0VUIG51bWJlciIsCi0iICBBU0NJSSB2YWx1ZSBvZiBjb250cm9s IGNoYXJhY3RlciB0aGF0IHRlcm1pbmF0ZXMgaW5jb21pbmcgcGFja2V0cywiLAotIiAgbm9ybWFs bHkgMTMgKGNhcnJpYWdlIHJldHVybikuIiwKLSIgIiwKLSNpZmRlZiBDS1hYQ0hBUgotIlNFVCBS RUNFSVZFIElHTk9SRS1DSEFSQUNURVIgbnVtYmVyIiwKLSIgIEFTQ0lJIHZhbHVlIG9mIGNoYXJh Y3RlciB0byBiZSBkaXNjYXJkZWQgd2hlbiByZWNlaXZpbmcgcGFja2V0cywgc3VjaCBhcyIsCi0i ICBsaW5lIGZvbGRpbmcgY2hhcmFjdGVycy4iLAotIiAiLAotI2VuZGlmIC8qIENLWFhDSEFSICov Ci0iU0VUIFJFQ0VJVkUgTU9WRS1UTyBbIGRpcmVjdG9yeSBdIiwKLSIgIElmIGEgZGlyZWN0b3J5 IG5hbWUgaXMgc3BlY2lmaWVkLCB0aGVuIGV2ZXJ5IGZpbGUgdGhhdCBpcyByZWNlaXZlZCIsCi0i ICBzdWNjZXNzZnVsbHkgaXMgbW92ZWQgdG8gdGhlIGdpdmVuIGRpcmVjdG9yeSBpbW1lZGlhdGVs eSBhZnRlciByZWNlcHRpb24iLAotIiAgaXMgY29tcGxldGUuICBPbWl0IHRoZSBkaXJlY3Rvcnkg bmFtZSB0byByZW1vdmUgYW55IHByZXZpb3VzbHkgc2V0IG1vdmUtdG8iLAotIiAgZGlyZWN0b3J5 LiIsCi0iICIsCi0iU0VUIFJFQ0VJVkUgUEFDS0VULUxFTkdUSCBudW1iZXIiLAotIiAgTWF4aW11 bSBsZW5ndGggcGFja2V0IHRoZSBvdGhlciBLZXJtaXQgc2hvdWxkIHNlbmQuIiwKLSIgIiwKLSJT RVQgUkVDRUlWRSBQQURESU5HIG51bWJlciIsCi0iICBOdW1iZXIgb2YgcHJlcGFja2V0IHBhZGRp bmcgY2hhcmFjdGVycyB0byBhc2sgZm9yIChub3JtYWxseSAwKS4iLAotIiAiLAotIlNFVCBSRUNF SVZFIFBBRC1DSEFSQUNURVIgbnVtYmVyIiwKLSIgIEFTQ0lJIHZhbHVlIG9mIGNvbnRyb2wgY2hh cmFjdGVyIHRvIHVzZSBmb3IgcGFkZGluZyAobm9ybWFsbHkgMCkuIiwKLSIgIiwKLSJTRVQgUkVD RUlWRSBQQVRITkFNRVMge09GRiwgQUJTT0xVVEUsIFJFTEFUSVZFLCBBVVRPfSIsCi0iICBJZiBh IHJlY29nbml6YWJsZSBwYXRoIChkaXJlY3RvcnksIGRldmljZSkgc3BlY2lmaWNhdGlvbiBhcHBl YXJzIGluIGFuIiwKLSIgIGluY29taW5nIGZpbGVuYW1lLCBzdHJpcCBpdCBPRkYgYmVmb3JlIHRy eWluZyB0byBjcmVhdGUgdGhlIG91dHB1dCBmaWxlLiIsCi0jaWZkZWYgQ0tfTUtESVIKLSIgIE90 aGVyd2lzZSwgdGhlbiBpZiBhbnkgb2YgdGhlIGRpcmVjdG9yaWVzIGluIHRoZSBwYXRoIGRvbid0 IGV4aXN0LCBLZXJtaXQiLAotIiAgdHJpZXMgdG8gY3JlYXRlIHRoZW0sIHJlbGF0aXZlIHRvIHlv dXIgY3VycmVudCBvciBkb3dubG9hZCBkaXJlY3RvcnksIG9yIiwKLSIgIGFic29sdXRlbHksIGFz IHNwZWNpZmllZC4gIFJFTEFUSVZFIG1lYW5zIGZvcmNlIGFsbCBpbmNvbWluZyBuYW1lcywgZXZl biIsCi0iICBpZiB0aGV5IGFyZSBhYnNvbHV0ZSwgdG8gYmUgcmVsYXRpdmUgdG8geW91ciBjdXJy ZW50IG9yIGRvd25sb2FkIGRpcmVjdG9yeS4iCi0sCi0iICBBVVRPLCB3aGljaCBpcyB0aGUgZGVm YXVsdCwgbWVhbnMgUkVMQVRJVkUgaWYgdGhlIGZpbGUgc2VuZGVyIGluZGljYXRlcyBpbiIsCi0i ICBhZHZhbmNlIHRoYXQgdGhpcyBpcyBhIHJlY3Vyc2l2ZSB0cmFuc2Zlciwgb3RoZXJ3aXNlIE9G Ri4iLAotI2VuZGlmIC8qIENLX01LRElSICovCi0iICIsCi0iU0VUIFJFQ0VJVkUgUEFVU0UgbnVt YmVyIiwKLSIgIE1pbGxpc2Vjb25kcyB0byBwYXVzZSBiZXR3ZWVuIHBhY2tldHMsIG5vcm1hbGx5 IDAuIiwKLSIgIiwKLQotI2lmZGVmIENLX1BFUk1TCi0iU0VUIFJFQ0VJVkUgUEVSTUlTU0lPTlMg eyBPTiwgT0ZGIH0iLAotIiAgV2hldGhlciB0byBjb3B5IGZpbGUgcGVybWlzc2lvbnMgZnJvbSBp bmJvdW5kIEF0dHJpYnV0ZSBwYWNrZXRzLiIsCi0iICIsCi0jZW5kaWYgLyogQ0tfUEVSTVMgKi8K LQotIlNFVCBSRUNFSVZFIFJFTkFNRS1UTyBbIHRlbXBsYXRlIF0iLAotIiAgSWYgYSB0ZW1wbGF0 ZSBpcyBzcGVjaWZpZWQsIHRoZW4gZXZlcnkgZmlsZSB0aGF0IGlzIHJlY2VpdmVkIHN1Y2Nlc3Nm dWxseSIsCi0iICBcCi1pcyByZW5hbWVkIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gdGVtcGxhdGUg aW1tZWRpYXRlbHkgYWZ0ZXIgaXQgaXMgcmVjZWl2ZWQuIiwKLSIgIFwKLVRoZSB0ZW1wbGF0ZSBz aG91bGQgaW5jbHVkZSB2YXJpYWJsZXMgbGlrZSBcXHYoZmlsZW5hbWUpIG9yIFxcdihmaWxlbnVt YmVyKS4iLAotIiAgT21pdCB0aGUgdGVtcGxhdGUgdG8gcmVtb3ZlIGFueSB0ZW1wbGF0ZSBwcmV2 aW91c2x5IHNldC4iLAotIiAiLAotIlNFVCBSRUNFSVZFIFNUQVJULU9GLVBBQ0tFVCBudW1iZXIi LAotIiAgQVNDSUkgdmFsdWUgb2YgY2hhcmFjdGVyIHRoYXQgbWFya3Mgc3RhcnQgb2YgaW5ib3Vu ZCBwYWNrZXQuIiwKLSIgIiwKLSJTRVQgUkVDRUlWRSBUSU1FT1VUIG51bWJlciIsCi0iICBOdW1i ZXIgb2Ygc2Vjb25kcyB0aGUgb3RoZXIgS2VybWl0IHNob3VsZCB3YWl0IGZvciBhIHBhY2tldCBi ZWZvcmUgc2VuZGluZyIsCi0iICBhIE5BSyBvciByZXRyYW5zbWl0dGluZy4iLAotI2lmZGVmIFZN UwotIiAiLAotIlNFVCBSRUNFSVZFIFZFUlNJT04tTlVNQkVSUyB7IE9OLCBPRkYgfSIsCi0iICBJ ZiBPTiwgYW5kIGluIGluY29taW5nIGZpbGVuYW1lIGluY2x1ZGVzIGEgVk1TIHZlcnNpb24gbnVt YmVyLCB1c2UgaXQgd2hlbiIsCi0iICBjcmVhdGluZyB0aGUgZmlsZS4gIElmIE9GRiAod2hpY2gg aXMgdGhlIGRlZmF1bHQpLCBzdHJpcCBhbnkgVk1TIHZlcnNpb24iLAotIiAgbnVtYmVyIGZyb20g aW5jb21pbmcgZmlsZW5hbWVzIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGNyZWF0ZSB0aGUgZmlsZSwg XAotY2F1c2luZyIsCi0iICB0aGUgbmV3IGZpbGUgdG8gcmVjZWl2ZSB0aGUgbmV4dCBoaWdoZXN0 IHZlcnNpb24gbnVtYmVyLiIsCi0jZW5kaWYgLyogVk1TICovCi0iIiB9OwotCi1zdGF0aWMgY2hh ciAqaHh5c25kW10gPSB7Ci0iU3ludGF4OiBTRVQgU0VORCBwYXJhbWV0ZXIgdmFsdWUiLAotIiAg U3BlY2lmaWVzIHBhcmFtZXRlcnMgZm9yIG91dGJvdW5kIGZpbGVzIG9yIHBhY2tldHMuIiwKLSIg IiwKLSJTRVQgU0VORCBCQUNLVVAgeyBPTiwgT0ZGIH0iLAotIiAgVGVsbHMgd2hldGhlciB0byBp bmNsdWRlIGJhY2t1cCBmaWxlcyB3aGVuIHNlbmRpbmcgZmlsZSBncm91cHMuICBCYWNrdXAiLAot IiAgZmlsZXMgYXJlIHRob3NlIGNyZWF0ZWQgYnkgS2VybWl0LCBFTUFDUywgZXRjLCB3aGVuIGNy ZWF0aW5nIGEgbmV3IGZpbGUiLAotIiAgdGhhdCBoYXMgdGhlIHNhbWUgbmFtZSBhcyBhbiBleGlz dGluZyBmaWxlLiAgQSBiYWNrdXAgZmlsZSBoYXMgYSB2ZXJzaW9uIiwKLSIgIGFwcGVuZGVkIHRv IGl0cyBuYW1lLCBlLmcuIG9vZmEudHh0Ln4yM34uICBPTiBpcyB0aGUgZGVmYXVsdCwgbWVhbmlu ZyIsCi0iICBkb24ndCBleGNsdWRlIGJhY2t1cCBmaWxlcy4gIFVzZSBPRkYgdG8gZXhjbHVkZSBi YWNrdXAgZmlsZXMgZnJvbSBncm91cCIsCi0iICB0cmFuc2ZlcnMuIiwKLSIgIiwKLSNpZm5kZWYg Tk9DU0VUUwotIlNFVCBTRU5EIENIQVJBQ1RFUi1TRVQgeyBBVVRPTUFUSUMsIE1BTlVBTCB9IiwK LSIgIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBzd2l0Y2ggdG8gYW4gYXBwcm9wcmlhdGUgZmls ZS1jaGFyYWN0ZXIgd2hlbiBhIiwKLSIgIFNFVCBUUkFOU0ZFUiBDSEFSQUNURVItU0VUIGNvbW1h bmQgaXMgZ2l2ZW4sIG9yIHZpY2UgdmVyc2EuICBBVVRPTUFUSUMgYnkiLAotIiAgZGVmYXVsdC4g IEFsc28gc2VlIEhFTFAgQVNTT0NJQVRFLiIsCi0iICIsCi0jZW5kaWYgLyogTk9DU0VUUyAqLwot Ci0iU0VUIFNFTkQgQ09OVFJPTC1QUkVGSVggbnVtYmVyIiwKLSIgIEFTQ0lJIHZhbHVlIG9mIHBy ZWZpeCBjaGFyYWN0ZXIgdXNlZCBmb3IgcXVvdGluZyBjb250cm9sIGNoYXJhY3RlcnMgaW4iLAot IiAgcGFja2V0cyB0aGF0IEtlcm1pdCBzZW5kcywgbm9ybWFsbHkgMzUgKG51bWJlciBzaWduKS4i LAotIiAiLAotI2lmZGVmIENLWFhDSEFSCi0iU0VUIFNFTkQgRE9VQkxFLUNIQVJBQ1RFUiBudW1i ZXIiLAotIiAgQVNDSUkgdmFsdWUgb2YgY2hhcmFjdGVyIHRvIGJlIGRvdWJsZWQgd2hlbiBzZW5k aW5nIHBhY2tldHMsIHN1Y2ggYXMgYW4iLAotIiAgWC4yNSBQQUQgZXNjYXBlIGNoYXJhY3Rlci4i LAotIiAiLAotI2VuZGlmIC8qIENLWFhDSEFSICovCi0iU0VUIFNFTkQgRU5ELU9GLVBBQ0tFVCBu dW1iZXIiLAotIiAgQVNDSUkgdmFsdWUgb2YgY29udHJvbCBjaGFyYWN0ZXIgdG8gdGVybWluYXRl IGFuIG91dGJvdW5kIHBhY2tldCwiLAotIiAgbm9ybWFsbHkgMTMgKGNhcnJpYWdlIHJldHVybiku IiwKLSIgIiwKLSJTRVQgU0VORCBNT1ZFLVRPIFsgZGlyZWN0b3J5IF0iLAotIiAgXAotSWYgYSBk aXJlY3RvcnkgbmFtZSBpcyBzcGVjaWZpZWQsIHRoZW4gZXZlcnkgZmlsZSB0aGF0IGlzIHNlbnQg c3VjY2Vzc2Z1bGx5IiwKLSIgIGlzIG1vdmVkIHRvIHRoZSBnaXZlbiBkaXJlY3RvcnkgaW1tZWRp YXRlbHkgYWZ0ZXIgaXQgaXMgc2VudC4iLAotIiAgT21pdCB0aGUgZGlyZWN0b3J5IG5hbWUgdG8g cmVtb3ZlIGFueSBwcmV2aW91c2x5IHNldCBtb3ZlLXRvIGRpcmVjdG9yeS4iLAotIiAiLAotIlNF VCBTRU5EIFBBQ0tFVC1MRU5HVEggbnVtYmVyIiwKLSIgIE1heGltdW0gbGVuZ3RoIHBhY2tldCB0 byBzZW5kLCBldmVuIGlmIG90aGVyIEtlcm1pdCBhc2tzIGZvciBsb25nZXIgb25lcy4iLAotIiAg VGhpcyBjb21tYW5kIGNhbiBub3QgYmUgdXNlZCB0byBmb3JjZSBwYWNrZXRzIHRvIGJlIHNlbnQg dGhhdCBhcmUgbG9uZ2VyIiwKLSIgIHRoYW4gdGhlIGxlbmd0aCByZXF1ZXN0ZWQgYnkgdGhlIHJl Y2VpdmVyLiAgVXNlIHRoaXMgY29tbWFuZCBvbmx5IHRvIiwKLSIgIGZvcmNlIHNob3J0ZXIgb25l cy4iLAotIiAiLAotIlNFVCBTRU5EIFBBRERJTkcgbnVtYmVyIiwKLSIgIE51bWJlciBvZiBwcmVw YWNrZXQgcGFkZGluZyBjaGFyYWN0ZXJzIHRvIHNlbmQuIiwKLSIgIiwKLSJTRVQgU0VORCBQQUQt Q0hBUkFDVEVSIG51bWJlciIsCi0iICBBU0NJSSB2YWx1ZSBvZiBjb250cm9sIGNoYXJhY3RlciB0 byB1c2UgZm9yIHBhZGRpbmcuIiwKLSIgIiwKLSJTRVQgU0VORCBQQVRITkFNRVMge09GRiwgQUJT T0xVVEUsIFJFTEFUSVZFfSIsCi0iICBJbmNsdWRlIHRoZSBwYXRoIChkZXZpY2UsIGRpcmVjdG9y eSkgcG9ydGlvbiB3aXRoIHRoZSBmaWxlIG5hbWUgd2hlbiIsCi0iICBzZW5kaW5nIGl0IGFzIHNw ZWNpZmllZDsgQUJTT0xVVEUgbWVhbnMgdG8gc2VuZCB0aGUgd2hvbGUgcGF0aG5hbWUsIiwKLSIg IFJFTEFUSVZFIG1lYW5zIHRvIGluY2x1ZGUgdGhlIHBhdGhuYW1lIHJlbGF0aXZlIHRvIHRoZSBj dXJyZW50IGRpcmVjdG9yeS4iLAotIiAgQXBwbGllcyB0byB0aGUgYWN0dWFsIGZpbGVuYW1lLCBu b3QgdG8gdGhlIFwiYXMtbmFtZVwiLiAgVGhlIGRlZmF1bHQgaXMiLAotIiAgT0ZGLiIsCi0iICIs Ci0iU0VUIFNFTkQgUEFVU0UgbnVtYmVyIiwKLSIgIE1pbGxpc2Vjb25kcyB0byBwYXVzZSBiZXR3 ZWVuIHBhY2tldHMsIG5vcm1hbGx5IDAuIiwKLSIgIiwKLQotI2lmZGVmIENLX1BFUk1TCi0iU0VU IFNFTkQgUEVSTUlTU0lPTlMgeyBPTiwgT0ZGIH0iLAotIiAgV2hldGhlciB0byBpbmNsdWRlIGZp bGUgcGVybWlzc2lvbnMgaW4gb3V0Ym91bmQgQXR0cmlidXRlIHBhY2tldHMuIiwKLSIgIiwKLSNl bmRpZiAvKiBDS19QRVJNUyAqLwotCi0iU0VUIFNFTkQgUkVOQU1FLVRPIFsgdGVtcGxhdGUgXSIs Ci0iICBJZiBhIHRlbXBsYXRlIGlzIHNwZWNpZmllZCwgdGhlbiBldmVyeSBmaWxlIHRoYXQgaXMg c2VudCBzdWNjZXNzZnVsbHkiLAotIiAgaXMgcmVuYW1lZCBhY2NvcmRpbmcgdG8gdGhlIGdpdmVu IHRlbXBsYXRlIGltbWVkaWF0ZWx5IGFmdGVyIGl0IGlzIHNlbnQuIiwKLSIgIFwKLVRoZSB0ZW1w bGF0ZSBzaG91bGQgaW5jbHVkZSB2YXJpYWJsZXMgbGlrZSBcXHYoZmlsZW5hbWUpIG9yIFxcdihm aWxlbnVtYmVyKS4iLAotIiAgT21pdCB0aGUgdGVtcGxhdGUgdG8gcmVtb3ZlIGFueSB0ZW1wbGF0 ZSBwcmV2aW91c2x5IHNldC4iLAotIiAiLAotIlNFVCBTRU5EIFNUQVJULU9GLVBBQ0tFVCBudW1i ZXIiLAotIiAgQVNDSUkgdmFsdWUgb2YgY2hhcmFjdGVyIHRvIG1hcmsgc3RhcnQgb2Ygb3V0Ym91 bmQgcGFja2V0LiIsCi0iICIsCi0jaWZkZWYgQ0tfVElNRVJTCi0iU0VUIFNFTkQgVElNRU9VVCBu dW1iZXIgWyB7IERZTkFNSUMgWyBtaW4gbWF4IF0gXSwgRklYRUQgfSBdIiwKLSNlbHNlCi0iU0VU IFNFTkQgVElNRU9VVCBudW1iZXIiLAotI2VuZGlmIC8qIENLX1RJTUVSUyAqLwotCi0iICBOdW1i ZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGZvciBhIHBhY2tldCBiZWZvcmUgc2VuZGluZyBOQUsgb3Ii LAotI2lmZGVmIENLX1RJTUVSUwotIiAgcmV0cmFuc21pdHRpbmcuICBJbmNsdWRlIHRoZSB3b3Jk IERZTkFNSUMgYWZ0ZXIgdGhlIG51bWJlciBpbiB0aGUiLAotIiAgU0VUIFNFTkQgVElNRU9VVCBj b21tYW5kIHRvIGhhdmUgS2VybWl0IGNvbXB1dGUgdGhlIHRpbWVvdXRzIGR5bmFtaWNhbGx5IiwK LSIgIHRocm91Z2hvdXQgdGhlIHRyYW5zZmVyIGJhc2VkIG9uIHRoZSBwYWNrZXQgcmF0ZS4gIElu Y2x1ZGUgdGhlIHdvcmQgRklYRUQiLAotIiAgdG8gdXNlIHRoZSBcIm51bWJlclwiIGdpdmVuIHRo cm91Z2hvdXQgdGhlIHRyYW5zZmVyLiAgRFlOQU1JQyBpcyB0aGUiLAotIiAgZGVmYXVsdC4gIEFm dGVyIERZTkFNSUMgeW91IG1heSBpbmNsdWRlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzLiIs Ci0iICBTRVQgU0VORCBUSU1FT1VUIC0xIEZJWEVEIG1lYW5zIG5vIHRpbWVvdXRzLiIsCi0jZWxz ZQotIiAgcmV0cmFuc21pdHRpbmcuIiwKLSNlbmRpZiAvKiBDS19USU1FUlMgKi8KLSNpZmRlZiBW TVMKLSIgIiwKLSJTRVQgU0VORCBWRVJTSU9OLU5VTUJFUlMgeyBPTiwgT0ZGIH0iLAotIiAgSWYg T04sIGluY2x1ZGUgVk1TIHZlcnNpb24gbnVtYmVycyBpbiBvdXRib3VuZCBmaWxlbmFtZXMuICBJ ZiBPRkYgKHdoaWNoIiwKLSIgIGlzIHRoZSBkZWZhdWx0KSwgc3RyaXAgdmVyc2lvbiBudW1iZXJz LiIsCi0jZW5kaWYgLyogVk1TICovCi0iIiB9OwotCi1zdGF0aWMgY2hhciAqaHh5eGZlcltdID0g ewotIlN5bnRheDogU0VUIFRSQU5TRkVSIChvciBYRkVSKSBwYXJhbWV0ZXIgdmFsdWUiLAotIiAi LAotIkNob2ljZXM6IiwKLSIgIiwKLSJTRVQgVFJBTlNGRVIgQkVMTCB7IE9GRiwgT04gfSIsCi0i ICBXaGV0aGVyIHRvIHJpbmcgdGhlIHRlcm1pbmFsIGJlbGwgYXQgdGhlIGVuZCBvZiBhIGZpbGUg dHJhbnNmZXIuIiwKLSIgIiwKLSNpZmRlZiBYRlJDQU4KLSJTRVQgVFJBTlNGRVIgQ0FOQ0VMTEFU SU9OIHsgT0ZGLCBPTiBbIDxjb2RlPiBbIDxudW1iZXI+IF0gXSB9IiwKLSIgIE9GRiBkaXNhYmxl cyByZW1vdGUtbW9kZSBwYWNrZXQtbW9kZSBjYW5jZWxsYXRpb24gZnJvbSB0aGUga2V5Ym9hcmQu IiwKLSIgIE9OIGVuYWJsZXMgaXQuICBUaGUgb3B0aW9uYWwgPGNvZGU+IGlzIHRoZSBjb250cm9s IGNoYXJhY3RlciB0byB1c2UgZm9yIiwKLSIgIGNhbmNlbGxhdGlvbjsgdGhlIG9wdGlvbmFsIDxu dW1iZXI+IGlzIGhvdyBtYW55IGNvbnNlY3V0aXZlIG9jY3VycmVuY2VzIiwKLSIgIG9mIHRoZSBn aXZlbiBjb250cm9sIGNoYXJhY3RlciBhcmUgcmVxdWlyZWQgZm9yIGNhbmNlbGxhdGlvbi4iLAot IiAiLAotI2VuZGlmIC8qIFhGUkNBTiAqLwotIlNFVCBUUkFOU0ZFUiBJTlRFUlJVUFRJT04geyBP TiwgT0ZGIH0iLAotIiAgVFJBTlNGRVIgSU5URVJSVVBUSU9OIGlzIG5vcm1hbGx5IE9OLCBhbGxv d2luZyBmb3IgaW50ZXJydXB0aW9uIG9mIGEgZmlsZSIsCi0iICB0cmFuc2ZlciBpbiBwcm9ncmVz cyBieSB0eXBpbmcgY2VydGFpbiBjaGFyYWN0ZXJzIHdoaWxlIHRoZSBmaWxlLXRyYW5zZmVyIiwK LSIgIGRpc3BsYXkgaXMgYWN0aXZlLiAgU0VUIFRSQU5TRkVSIElOVEVSUlVQVElPTiBPRkYgZGlz YWJsZXMgaW50ZXJydXB0aW9uIiwKLSIgIG9mIGZpbGUgdHJhbnNmZXIgZnJvbSB0aGUga2V5Ym9h cmQgaW4gbG9jYWwgbW9kZS4iLAotIiAiLAotI2lmbmRlZiBOT1NQTAotIlNFVCBUUkFOU0ZFUiBD UkMtQ0FMQ1VMQVRJT04geyBPRkYsIE9OIH0iLAotIiAgVGVsbHMgd2hldGhlciBLZXJtaXQgc2hv dWxkIGFjY3VtdWxhdGUgYSBDeWNsaWMgUmVkdW5kYW5jeSBDaGVjayBmb3IgIiwKLSIgIGVhY2gg ZmlsZSB0cmFuc2Zlci4gIE5vcm1hbGx5IE9OLCBpbiB3aGljaCBjYXNlIHRoZSBDUkMgdmFsdWUg aXMgYXZhaWxhYmxlIiwKLSIgIGluIHRoZSBcXHYoY3JjMTYpIHZhcmlhYmxlIGFmdGVyIHRoZSB0 cmFuc2Zlci4gIEFkZHMgc29tZSBvdmVyaGVhZC4gIFVzZSIsCi0iICBTRVQgVFJBTlNGRVIgQ1JD IE9GRiB0byBkaXNhYmxlLiIsCi0iICIsCi0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZm5kZWYgTk9D U0VUUwotIlNFVCBUUkFOU0ZFUiBDSEFSQUNURVItU0VUIG5hbWUiLAotIiAgU2VsZWN0cyB0aGUg Y2hhcmFjdGVyIHNldCB1c2VkIHRvIHJlcHJlc2VudCB0ZXh0dWFsIGRhdGEgaW4gS2VybWl0IiwK LSIgIHBhY2tldHMuICBUZXh0IGNoYXJhY3RlcnMgYXJlIHRyYW5zbGF0ZWQgdG8vZnJvbSB0aGUg RklMRSBDSEFSQUNURVItU0VULiIsCi0iICBDaG9pY2VzOiIsCi0iICIsCi0iICBUUkFOU1BBUkVO VCAobm8gdHJhbnNsYXRpb24sIHRoZSBkZWZhdWx0KSIsCi0iICBBU0NJSSIsCi0iICBMQVRJTjEg KElTTyA4ODU5LTEgTGF0aW4gQWxwaGFiZXQgMSkiLAotI2lmbmRlZiBOT0xBVElOMgotIiAgTEFU SU4yIChJU08gODg1OS0yIExhdGluIEFscGhhYmV0IDIpIiwKLSNlbmRpZiAvKiBOT0xBVElOMiAq LwotIiAgTEFUSU45IChJU08gODg1OS0xNSBMYXRpbiBBbHBoYWJldCA5KSIsCi0jaWZkZWYgQ1lS SUxMSUMKLSIgIENZUklMTElDLUlTTyAoSVNPIDg4NTktNSBMYXRpbi9DeXJpbGxpYykiLAotI2Vu ZGlmIC8qIENZUklMTElDICovCi0jaWZkZWYgR1JFRUsKLSIgIEdSRUVLLUlTTyAoSVNPIDg4NTkt NyBMYXRpbi9HcmVlaykiLAotI2VuZGlmIC8qIEdSRUVLICovCi0jaWZkZWYgSEVCUkVXCi0iICBI RUJSRVctSVNPIChJU08gODg1OS04IExhdGluL0hlYnJldykiLAotI2VuZGlmIC8qIEhFQlJFVyAq LwotI2lmZGVmIEtBTkpJCi0iICBKQVBBTkVTRS1FVUMgKEpJUyBYIDAyMDggS2FuamkgKyBSb21h biBhbmQgS2F0YWthbmEpIiwKLSNlbmRpZiAvKiBLQU5KSSAqLwotI2lmZGVmIFVOSUNPREUKLSIg IFVDUy0yIChJU08gMTA2NDYgLyBVbmljb2RlIDItYnl0ZSBmb3JtKSIsCi0iICBVVEYtOCAoSVNP IDEwNjQ2IC8gVW5pY29kZSA4LWJpdCBzZXJpYWxpemVkIHRyYW5zZm9ybWF0aW9uIGZvcm1hdCki LAotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSIgIiwKLSJTRVQgVFJBTlNGRVIgVFJBTlNMQVRJT04g eyBPTiwgT0ZGIH0iLAotIiAgRW5hYmxlcyBhbmQgZGlzYWJsZXMgZmlsZS10cmFuc2ZlciBjaGFy YWN0ZXItc2V0IHRyYW5zbGF0aW9uLiAgSXQncyIsCi0iICBlbmFibGVkIGJ5IGRlZmF1bHQuIiwK LSNlbmRpZiAvKiBOT0NTRVRTICovCi0iICIsCi0jaWZkZWYgQ0tfQ1VSU0VTCi0iU0VUIFRSQU5T RkVSIERJU1BMQVkgeyBCUklFRiwgQ1JULCBGVUxMU0NSRUVOLCBOT05FLCBTRVJJQUwgfSIsCi0j ZWxzZQotIlNFVCBUUkFOU0ZFUiBESVNQTEFZIHsgQlJJRUYsIENSVCwgTk9ORSwgU0VSSUFMIH0i LAotI2VuZGlmICAvKiBDS19DVVJTRVMgKi8KLSIgIENob29zZSB0aGUgZGVzaXJlZCBmb3JtYXQg Zm9yIHRoZSBwcm9ncmVzcyByZXBvcnQgdG8gYmUgZGlzcGxheWVkIG9uIiwKLSIgIHlvdXIgc2Ny ZWVuIGR1cmluZyBmaWxlIHRyYW5zZmVycyB3aGVuIEtlcm1pdCBpcyBpbiBsb2NhbCBtb2RlLiIs Ci0jaWZkZWYgQ0tfQ1VSU0VTCi0iICBGVUxMU0NSRUVOIHJlcXVpcmVzIHlvdXIgdGVybWluYWwg dHlwZSBiZSBzZXQgY29ycmVjdGx5OyB0aGUgb3RoZXJzIiwKLSIgIGFyZSBpbmRlcGVuZGVudCBv ZiB0ZXJtaW5hbCB0eXBlLiIsCi0jZWxzZQotIiAgZmlsZSB0cmFuc2Zlci4iLAotI2VuZGlmICAv KiBDS19DVVJTRVMgKi8KLSIgIiwKLSJTRVQgVFJBTlNGRVIgTE9DS0lORy1TSElGVCB7IE9GRiwg T04sIEZPUkNFRCB9IiwKLSIgIFRlbGwgd2hldGhlciBsb2NraW5nLXNoaWZ0IHByb3RvY29sIHNo b3VsZCBiZSB1c2VkIGR1cmluZyBmaWxlIHRyYW5zZmVyIiwKLSIgIHRvIGFjaGlldmUgOC1iaXQg dHJhbnNwYXJlbmN5IG9uIGEgNy1iaXQgY29ubmVjdGlvbi4gIE9OIG1lYW5zIHRvIHJlcXVlc3Qi LAotIiAgaXRzIHVzZSBpZiBQQVJJVFkgaXMgbm90IE5PTkUgYW5kIHRvIHVzZSBpdCBpZiB0aGUg b3RoZXIgS2VybWl0IGFncmVlcywiLAotIiAgT0ZGIG1lYW5zIG5vdCB0byB1c2UgaXQsIEZPUkNF RCBtZWFucyB0byB1c2UgaXQgZXZlbiBpZiB0aGUgb3RoZXIgS2VybWl0IiwKLSIgIGRvZXMgbm90 IGFncmVlLiIsCi0iICIsCi0iU0VUIFRSQU5TRkVSIE1PREUgeyBBVVRPTUFUSUMsIE1BTlVBTCB9 IiwKLSIgIEF1dG9tYXRpYyAodGhlIGRlZmF1bHQpIG1lYW5zIEtlcm1pdCBzaG91bGQgYXV0b21h dGljYWxseSBnbyBpbnRvIGJpbmFyeSIsCi0iICBmaWxlLXRyYW5zZmVyIG1vZGUgYW5kIHVzZSBs aXRlcmFsIGZpbGVuYW1lcyBpZiB0aGUgb3RoZXIgS2VybWl0IHNheXMgaXQiLAotIiAgaGFzIGEg Y29tcGF0aWJsZSBmaWxlIHN5c3RlbSwgZS5nLiBVTklYLXRvLVVOSVgsIGJ1dCBub3QgVU5JWC10 by1ET1MuIiwKLSNpZmRlZiBQQVRURVJOUwotIiAgQWxzbywgd2hlbiBzZW5kaW5nIGZpbGVzLCBL ZXJtaXQgc2hvdWxkIHN3aXRjaCBiZXR3ZWVuIGJpbmFyeSBhbmQgdGV4dCIsCi0iICBtb2RlIGF1 dG9tYXRpY2FsbHkgcGVyIGZpbGUgYmFzZWQgb24gdGhlIFNFVCBGSUxFIEJJTkFSWS1QQVRURVJO UyBhbmQgU0VUIiwKLSIgIEZJTEUgVEVYVC1QQVRURVJOUy4iLAotI2VuZGlmIC8qIFBBVFRFUk5T ICovCi0iICIsCi0jaWZkZWYgUElQRVNFTkQKLSJTRVQgVFJBTlNGRVIgUElQRVMgeyBPTiwgT0ZG IH0iLAotIiAgRW5hYmxlcy9EaXNhYmxlcyBhdXRvbWF0aWMgc2VuZGluZyBmcm9tIC8gcmVjZXB0 aW9uIHRvIGNvbW1hbmQgcGlwZXMgd2hlbiIsCi0iICB0aGUgaW5jb21pbmcgZmlsZW5hbWUgc3Rh cnRzIHdpdGggJyEnLiAgQWxzbyBzZWUgQ1NFTkQsIENSRUNFSVZFLiIsCi0iICIsCi0jZW5kaWYg LyogUElQRVNFTkQgKi8KLSNpZmRlZiBDS19YWVoKLSJTRVQgVFJBTlNGRVIgUFJPVE9DT0wgeyBL RVJNSVQsIFhNT0RFTSwgLi4uIH0iLAotIiAgU3lub255bSBmb3IgU0VUIFBST1RPQ09MIChxLnYu KS4iLAotIiAiLAotI2VuZGlmIC8qIENLX1hZWiAqLwotIlNFVCBUUkFOU0ZFUiBSRVBPUlQgeyBP TiwgT0ZGIH0iLAotIiAgRW5hYmxlcy9EaXNhYmxlcyB0aGUgYXV0b21hdGljIHBvc3QtdHJhbnNm ZXIgbWVzc2FnZSB0ZWxsaW5nIHdoYXQgZmlsZXMiLAotIiAgd2VudCB3aGVyZSBmcm9tIEMtS2Vy bWl0IHdoZW4gaXQgaXMgaW4gcmVtb3RlIG1vZGUuICBPTiBieSBkZWZhdWx0LiIsCi0iICIsCi0i U0VUIFRSQU5TRkVSIFNMT1ctU1RBUlQgeyBPRkYsIE9OIH0iLAotIiAgT04gKHRoZSBkZWZhdWx0 KSB0ZWxscyBLZXJtaXQsIHdoZW4gc2VuZGluZyBmaWxlcywgdG8gZ3JhZHVhbGx5IGJ1aWxkIHVw IiwKLSIgIHRoZSBwYWNrZXQgbGVuZ3RoIHRvIHRoZSBtYXhpbXVtIG5lZ290aWF0ZWQgbGVuZ3Ro LiAgT0ZGIG1lYW5zIHN0YXJ0IiwKLSIgIHNlbmRpbmcgdGhlIG1heGltdW0gbGVuZ3RoIHJpZ2h0 IGF3YXkuIiwKLSIgIiwKLSJTeW5vbnltOiBTRVQgWEZFUi4gIFVzZSBTSE9XIFRSQU5TRkVSIChY RkVSKSB0byBzZWUgU0VUIFRSQU5TRkVSIHZhbHVlcy4iLAotIiIgfTsKLSNlbmRpZiAvKiBOT1hG RVIgKi8KLQotI2lmZGVmIE5UCi1zdGF0aWMgY2hhciAqaHh5d2luOTVbXSA9IHsKLSJTRVQgV0lO OTUgOC4zLUZJTEVOQU1FUyB7IE9OLCBPRkYgfSIsCi0iICBJbnN0cnVjdHMgSy05NSB0byByZXBv cnQgYWxsIGZpbGVuYW1lcyB1c2luZyA4LjMgbm90YXRpb24gaW5zdGVhZCBvZiB0aGUiLAotIiAg bm9ybWFsIGxvbmcgZmlsZW5hbWVzLiAgRGVmYXVsdCBpcyBPRkYiLAotIiAiLAotIlNFVCBXSU45 NSBBTFQtR1IgeyBPTiwgT0ZGIH0iLAotIiAgSW5zdHJ1Y3RzIEstOTUsIHdoZW4gdXNlZCBvbiBN UyBXaW5kb3dzIDk1LCB0byBpbnRlcnByZXQgdGhlIFJpZ2h0IEFsdCBrZXkiLAotIiAgYXMgdGhl IEFsdC1HciBrZXkuICBUaGlzIGlzIG5lY2Vzc2FyeSB0byB3b3JrIGFyb3VuZCB0aGUgZmFpbHVy ZSBvZiIsCi0iICBXaW5kb3dzIDk1IHRvIHByb3Blcmx5IHRyYW5zbGF0ZSBub24tVVMga2V5Ym9h cmRzLiAgRGVmYXVsdCBpcyBPRkYuIiwKLSIgIiwKLSJTRVQgV0lOOTUgS0VZQk9BUkQtVFJBTlNM QVRJT04gPGNoYXJhY3Rlci1zZXQ+IiwKLSIgIFNwZWNpZmllcyB0aGUgY2hhcmFjdGVyLXNldCB0 aGF0IFdpbmRvd3MgOTUgaXMgdXNpbmcgdG8gc2VuZCBrZXlzdHJva2VzIiwKLSIgIHRvIEtlcm1p dC05NSB2aWEgdGhlIGtleWJvYXJkIGlucHV0IGZ1bmN0aW9ucy4gIERlZmF1bHQgaXMgTGF0aW4x LUlTTy4iLAotIiAiLAotIlNFVCBXSU45NSBPVkVSTEFQUEVELUlPIHsgT04gPHJlcXVlc3RzPiwg T0ZGIH0iLAotIiAgRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCBLLTk1IHVzZXMgT3ZlcmxhcHBl ZC1JL08gbWV0aG9kcyBmb3IgcmVhZGluZyIsCi0iICBmcm9tIGFuZCB3cml0aW5nIHRvIHNlcmlh bCBhbmQgVEFQSSBjb21tdW5pY2F0aW9uIGRldmljZXMuICA8cmVxdWVzdHM+IiwKLSIgIHNwZWNp ZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzIHdyaXRlIHJlcXVlc3RzIHRo YXQgbWF5IGJlIiwKLSIgIG92ZXJsYXBwZWQsIGZyb20gMSB0byAzMC4gIERlZmF1bHQgaXMgT04u IiwKLSIgIiwKLSJTRVQgV0lOOTUgUE9QVVBTIHsgT04sIE9GRiB9IiwKLSIgIERldGVybWluZXMg d2hldGhlciBvciBub3QgS2VybWl0IDk1IHVzZXMgUG9wdXBzIHRvIHF1ZXJ5IHRoZSB1c2VyIGZv ciIsCi0iICBuZWNlc3NhcnkgaW5mb3JtYXRpb24gc3VjaCBhcyB1c2VyIElEcyBvciBwYXNzd29y ZHMuICBEZWZhdWx0IGlzIE9OLiIsCi0iICIsCi0iU0VUIFdJTjk1IFNFTEVDVC1CVUcgeyBPTiwg T0ZGIH0iCi0iICBTb21lIFRDUC9JUCAoV2luc29jaykgaW1wbGVtZW50YXRpb25zIGZvciBXaW5k b3dzIGhhdmUgYSBkZWZlY3RpdmUiLAotIiAgc2VsZWN0KCkgZnVuY3Rpb24uICBVc2UgdGhpcyBj b21tYW5kIHRvIGF2b2lkIHRoZSB1c2Ugb2Ygc2VsZWN0KCkgaWYiLAotIiAgSzk1IGFwcGVhcnMg dG8gYmUgdW5hYmxlIHRvIHNlbmQgZGF0YSBvdmVyIFRDUC9JUC4gIERlZmF1bHQgaXMgT0ZGLiIs Ci0iIn07Ci0jZW5kaWYgLyogTlQgKi8KLQotc3RhdGljIGNoYXIgKmhteHliZWxbXSA9IHsKLSNp ZmRlZiBPUzIKLSJTeW50YXg6IFNFVCBCRUxMIHsgQVVESUJMRSBbIHsgQkVFUCwgU1lTVEVNLVNP VU5EUyB9IF0sIFZJU0lCTEUsIE5PTkUgfSIsCi0iICBTcGVjaWZpZXMgaG93IGluY29taW5nIEN0 cmwtRyAoYmVsbCkgY2hhcmFjdGVycyBhcmUgaGFuZGxlZCBpbiBDT05ORUNUIiwKLSIgIG1vZGUg YW5kIGhvdyBjb21tYW5kIHdhcm5pbmdzIGFyZSBwcmVzZW50ZWQgaW4gY29tbWFuZCBtb2RlLiAg QVVESUJMRSIsCi0iICBtZWFucyBlaXRoZXIgYSBiZWVwIG9yIGEgc3lzdGVtLXNvdW5kIGlzIGdl bmVyYXRlZDsgVklTSUJMRSBtZWFucyB0aGUiLAotIiAgc2NyZWVuIGlzIGZsYXNoZWQgbW9tZW50 YXJpbHkuIiwKLSNlbHNlCi0iU3ludGF4OiBTRVQgQkVMTCB7IE9GRiwgT04gfSIsCi0iICBPTiAo dGhlIGRlZmF1bHQpIGVuYWJsZXMgcmluZ2luZyBvZiB0aGUgdGVybWluYWwgYmVsbCAoYmVlcCkg ZXhjZXB0IHdoZXJlIiwKLSIgIGl0IGlzIGRpc2FibGVkIGluIGNlcnRhaW4gY2lyY3Vtc3RhbmNl cywgZS5nLiBieSBTRVQgVFJBTlNGRVIgQkVMTC4gIE9GRiIsCi0iICBkaXNhYmxlcyByaW5naW5n IG9mIHRoZSBiZWxsIGluIGFsbCBjaXJjdW1zdGFuY2VzLCBvdmVycmlkaW5nIGFueSBzcGVjaWZp YyIsCi0iICBTRVQgeHh4IEJFTEwgc2VsZWN0aW9ucy4iLAotI2VuZGlmIC8qIE9TMiAqLwotIiJ9 OwotCi0jaWZkZWYgT1MyCi1zdGF0aWMgY2hhciAqaG14eW1za1tdID0gewotIlNFVCBNU0tFUk1J VCBGSUxFLVJFTkFNSU5HIHsgT04sIE9GRiB9IiwKLSIgIE9OIGVuYWJsZXMgdGhlIHVzZSBvZiBN Uy1ET1MgS2VybWl0IGZpbGUgcmVuYW1pbmcgY29udmVudGlvbnMgaW5zdGVhZCBvZiIsCi0iICBD LUtlcm1pdCBjb252ZW50aW9ucy4gIEZpbGUgcmVuYW1pbmcgb2NjdXJzIGR1cmluZyBmaWxlIHRy YW5zZmVycyB3aGVuIiwKLSIgIHRoZXJlIGlzIGEgZmlsZSBuYW1lIGNvbGxpc2lvbiBhbmQgZWl0 aGVyIEJBQ0tVUCBvciBSRU5BTUUgY29sbGlzaW9uIiwKLSIgIG9wdGlvbnMgYXJlIGFjdGl2ZS4g IEMtS2VybWl0IGNvbnZlbnRpb25zIHByZXNlcnZlIHRoZSBvcmlnaW5hbCBmaWxlIG5hbWUiLAot IiAgd2hpbGUgYXBwZW5kaW5nIC5+bnVtfiB0byB0aGUgZW5kLiAgTVMtRE9TIEtlcm1pdCBjb252 ZW50aW9ucyByZXN0cmljdCIsCi0iICBmaWxlbmFtZXMgdG8gOC4zIG5vdGF0aW9uIGFuZCBwcmVz ZXJ2ZSB0aGUgZXh0ZW5zaW9uLiAgVW5pcXVlIG51bWVyaWMiLAotIiAgdmFsdWVzIG92ZXJ3cml0 ZSB0aGUgcmlnaHQgbW9zdCBwb3J0aW9uIG9mIHRoZSBmaWxlIG5hbWUncyBsZWZ0IGhhbmQgc2lk ZS4iLAotIiAiLAotIlNFVCBNU0tFUk1JVCBLRVlDT0RFUyB7IE9OLCBPRkYgfSIsCi0iICBPTiBl bmFibGVzIHRoZSB1c2Ugb2YgTVMtRE9TIEtlcm1pdCBjb21wYXRpYmxlIGtleWNvZGVzIHRvIHBy b3ZpZGUgc2NyaXB0IiwKLSIgIHBvcnRhYmlsaXR5LiIsCi0iIn07Ci0jZW5kaWYgLyogT1MyICov Ci0KLXN0YXRpYyBjaGFyICpobXh5Y2RbXSA9IHsKLSJTeW50YXg6IFNFVCBDRCB7IEhPTUUgPHBh dGg+LCBQQVRIIDxwYXRoPiwgTUVTU0FHRSB7IE9OLCBPRkYsIEZJTEUgPGxpc3Q+IH0gfSIKLSwK LSIgIiwKLSJTRVQgQ0QgSE9NRSA8cGF0aD4iLAotIiAgU3BlY2lmaWVkIHdoaWNoIGRpcmVjdG9y eSB0byBjaGFuZ2UgdG8gaWYgQ0Qgb3IgS0NEIGlzIGdpdmVuIHdpdGhvdXQgYSIsCi0iICBwYXRo bmFtZS4gIElmIHRoaXMgY29tbWFuZCBpcyBub3QgZ2l2ZW4sIHlvdXIgbG9naW4gb3IgSE9NRSBk aXJlY3RvcnkgaXMiLAotIiAgdXNlZC4iLAotIiAiLAotIlNFVCBDRCBQQVRIIDxwYXRoPiIsCi0i ICBPdmVycmlkZXMgbm9ybWFsIENEUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgd2hpY2ggdGVs bHMgdGhlIENEIGNvbW1hbmQiLAotIiAgd2hlcmUgdG8gbG9vayBmb3IgZGlyZWN0b3JpZXMgdG8g Q0QgdG8gaWYgeW91IGRvbid0IHNwZWNpZnkgdGhlbSBmdWxseS4iLAotIiAgVGhlIGZvcm1hdCBp czoiLAotIiAiLAotI2lmZGVmIFVOSVhPUk9TSwotIiAgICBzZXQgY2QgcGF0aCA6ZGlyZWN0b3J5 OmRpcmVjdG9yeTouLi4iLAotIiAiLAotIiAgaW4gb3RoZXIgd29yZHMsIGEgbGlzdCBvZiBkaXJl Y3RvcmllcyBzZXBhcmF0ZWQgYnkgY29sb25zLCB3aXRoIGEgY29sb24iLAotIiAgYXQgdGhlIGJl Z2lubmluZywgZS5nLjoiLAotIiAiLAotIiAgICBzZXQgY2QgcGF0aCA6L3Vzci9vbGdhOi91c3Iv aXZhbi9wdWJsaWM6L3RtcCIsCi0jZWxzZQotI2lmZGVmIE9TMgotIiAgICBzZXQgY2QgcGF0aCBk aXNrOmRpcmVjdG9yeTtkaXNrOmRpcmVjdG9yeTsuLi4iLAotIiAiLAotIiAganVzdCBsaWtlIHRo ZSBET1MgUEFUSDsgaW4gb3RoZXIgd29yZHMsIGEgbGlzdCBvZiBkaXNrOmRpcmVjdG9yeSBuYW1l cyIsCi0iICBzZXBhcmF0ZWQgYnkgc2VtaWNvbG9ucywgZS5nLjoiLAotIiAiLAotIiAgICBTRVQg Q0QgUEFUSCBDOlxcSzk1O0M6XFxIT01FO0M6XFxMT0NBTDtDOlxcIiwKLSNlbHNlCi0jaWZkZWYg Vk1TCi0iICAgIHNldCBjZCBwYXRoIGRpcmVjdG9yeSxkaXJlY3RvcnksLi4uIiwKLSIgIiwKLSIg IGluIG90aGVyIHdvcmRzLCBhIGxpc3Qgb2YgZGlyZWN0b3J5IHNwZWNpZmljYXRpb25zIG9yIGxv Z2ljYWwgbmFtZXMgdGhhdCIsCi0iICByZXByZXNlbnQgdGhlbSwgZS5nLjoiLAotIiAiLAotIiAg ICBTRVQgQ0QgUEFUSCBTWVMkTE9HSU46LCRESVNLMTpbT0xHQV0sJERJU0syW1NDUkFUQ0guSVZB Tl0uIiwKLSNlbHNlCi0iICAodW5rbm93biBmb3IgdGhpcyBwbGF0Zm9ybSkiLAotI2VuZGlmIC8q IFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFVOSVhPUk9TSyAqLwotIiAiLAot IlNFVCBDRCBNRVNTQUdFIHsgT04sIE9GRiB9IiwKLSIgIERlZmF1bHQgaXMgT0ZGLiAgV2hlbiBP TiwgdGhpcyB0ZWxscyBLZXJtaXQgdG8gbG9vayBmb3IgYSBmaWxlIHdpdGggYSIsCi0iICBjZXJ0 YWluIG5hbWUgaW4gYW55IGRpcmVjdG9yeSB0aGF0IHlvdSBDRCB0bywgYW5kIGlmIGl0IGZpbmRz IG9uZSwgdG8iLAotIiAgZGlzcGxheSBpdCBvbiB5b3VyIHNjcmVlbiB3aGVuIHlvdSBnaXZlIHRo ZSBDRCBjb21tYW5kLiAgVGhlIGZpbGVuYW1lLCIsCi0iICBvciBsaXN0IG9mIG5hbWVzLCBpcyBn aXZlbiBpbiB0aGUgU0VUIENEIE1FU1NBR0UgRklMRSBjb21tYW5kLiIsCi0iICIsCi0iU0VUIENE IE1FU1NBR0UgRklMRSBuYW1lIiwKLSIgIG9yOiIsCi0iU0VUIENEIE1FU1NBR0UgRklMRSB7e25h bWUxfXtuYW1lMn0uLi57bmFtZTh9fSIsCi0iICBTcGVjaWZ5IHVwIHRvIDggZmlsZW5hbWVzIHRv IGxvb2sgZm9yIHdoZW4gd2hlbiBDRGluZyB0byBhIG5ldyBkaXJlY3RvcnkiLAotIiAgYW5kIENE IE1FU1NBR0UgaXMgT04uICBUaGUgZmlyc3Qgb25lIGZvdW5kLCBpZiBhbnksIGluIHRoZSBuZXcg ZGlyZWN0b3J5IiwKLSNpZm5kZWYgREZDRE1TRwotIiAgaXMgZGlzcGxheWVkLiIsCi0jZWxzZQot IiAgaXMgZGlzcGxheWVkLiAgVGhlIGRlZmF1bHQgbGlzdCBpczoiLAotIiAiLAotI2lmZGVmIFVO SVhPUk9TSwotIiAgIHt7Li8ucmVhZG1lfXtSRUFETUUuVFhUfXtSRUFELk1FfX0iLAotI2Vsc2UK LSIgICB7e1JFQURNRS5UWFR9e1JFQUQuTUV9fSIsCi0jZW5kaWYgLyogVU5JWE9ST1NLICovCi0i ICIsCi0jZW5kaWYgLyogREZDRE1TRyAqLwotI2lmbmRlZiBOT1NFUlZFUgotIlN5bm9ueW06IFNF VCBTRVJWRVIgQ0QtTUVTU0FHRSBGSUxFLiIsCi0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLSIgIiwK LSJUeXBlIFNIT1cgQ0QgdG8gdmlldyBjdXJyZW50IENEIHNldHRpbmdzLiAgQWxzbyBzZWUgSEVM UCBTRVQgU0VSVkVSLiIsCi0iIgotfTsKLQotI2lmbmRlZiBOT0lLU0QKLXN0YXRpYyBjaGFyICog aHNldGlrc1tdID0gewotI2lmZGVmIE9TMgotIlNFVCBJS1MgQU5PTllNT1VTIEFDQ09VTlQgPHVz ZXJuYW1lPiIsCi0iICBPbiBXaW5kb3dzIE5ULzIwMDAgdGhpcyBpcyB0aGUgYWNjb3VudCB0aGF0 IHdpbGwgYmUgdXNlZCB0byBhbGxvdyIsCi0iICBhbm9ueW1vdXMgYWNjZXNzIHRvIHRoZSBzeXN0 ZW0uICBUaGlzIGFjY291bnQgTVVTVCBoYXZlIG5vIHBhc3N3b3JkIiwKLSIgIGFuZCBpdHMgcHJp dmlsZWdlcyBzaG91bGQgYmUgcmVzdHJpY3RlZCB0byBvbmx5IGFsbG93IHRob3NlIG9wZXJhdGlv bnMiLAotIiAgd2hpY2ggc2hvdWxkIGJlIHBlcm1pdHRlZCB0byB1bmtub3duIHVzZXJzLiAgSW4g cHJhY3RpY2UgdGhpcyBtZWFucyIsCi0iICBMaXN0IERpcmVjdG9yaWVzIGFuZCBSZWFkLUV4ZWN1 dGUgcHJpdmlsZWdlcyBvbmx5LiAgSWYgYSBkaXJlY3RvcnkiLAotIiAgaXMgY29uZmlndXJlZCBm b3IgV3JpdGUgcHJpdmlsZWdlcyB0aGVuIFJlYWQgcHJpdmlsZWdlcyBzaG91bGQgYmUiLAotIiAg ZGVuaWVkIGZvciB0aGF0IGRpcmVjdG9yeS4gIE90aGVyd2lzZSwgeW91ciBzeXN0ZW0gd2lsbCBi ZWNvbWUgdXNlZCIsCi0iICBieSBzb2Z0d2FyZSBwaXJhdGVzLiAgSWYgdGhpcyBjb21tYW5kIGlz IG5vdCBzcGVjaWZpZWQgaW4gdGhlIElLU0QuS1NDIiwKLSIgIGZpbGUgdGhlIHVzZXJuYW1lIFwi R1VFU1RcIiBpcyB1c2VkIGJ5IGRlZmF1bHQuICBUaGlzIGNvbW1hbmQgaGFzIG5vIiwKLSIgIGVm ZmVjdCBvbiBXaW5kb3dzIDk1Lzk4LiIsCi0iICIsCi0jZW5kaWYgLyogT1MyICovCi0iU0VUIElL UyBBTk9OWU1PVVMgSU5JVEZJTEUgZmlsZW5hbWUiLAotI2lmZGVmIE9TMgotIiAgVGhlIGluaXRp YWxpemF0aW9uIGZpbGUgdG8gYmUgZXhlY3V0ZWQgZm9yIGFub255bW91cyBsb2dpbnMuICBCeSBk ZWZhdWx0IiwKLSIgIGl0IGlzIEs5NS5JTkkgaW4gdGhlIGhvbWUgZGlyZWN0b3J5IGFzc29jaWF0 ZWQgd2l0aCB0aGUgQU5OT05ZTU9VUyBhY2NvdW50LiIKLSwKLSIgIEFueSBmaWxlbmFtZSB0aGF0 IHlvdSBzcGVjaWZ5IGhlcmUgbXVzdCBiZSByZWFkYWJsZSBieSB0aGUgQU5PTllNT1VTIiwKLSIg IGFjY291bnQgYW5kIGlmIGEgU0VUIElLUyBBTk9OWU1PVVMgUk9PVCBjb21tYW5kIHdhcyBnaXZl biwgZXhpc3Qgd2l0aGluIiwKLSIgIHRoZSByZXN0cmljdGVkIGRpcmVjdG9yeSB0cmVlLiAgVGhp cyBvcHRpb24gaXMgaW5kZXBlbmRlbnQgb2YgdGhlIFNFVCBJS1MiLAotIiAgSU5JVEZJTEUgY29t bWFuZCB3aGljaCBhcHBsaWVzIG9ubHkgdG8gcmVhbCB1c2Vycy4iLAotI2Vsc2UKLSIgIFRoZSBp bml0aWFsaXphdGlvbiBmaWxlIHRvIGJlIGV4ZWN1dGVkIGZvciBhbm9ueW1vdXMgbG9naW5zLiAg QnkgZGVmYXVsdCIsCi0iICBpdCBpcyAua2VybXJjIGluIHRoZSBhbm9ueW1vdXMgcm9vdCBkaXJl Y3RvcnkuICBUaGlzIG9wdGlvbiBpcyBpbmRlcGVuZGVudCIsCi0iICBvZiB0aGUgU0VUIElLUyBJ TklURklMRSBjb21tYW5kIHdoaWNoIGFwcGxpZXMgb25seSB0byByZWFsIHVzZXJzLiIsCi0jZW5k aWYgLyogT1MyICovCi0iICIsCi0iU0VUIElLUyBBTk9OWU1PVVMgTE9HSU4geyBPTiwgT0ZGIH0i LAotI2lmZGVmIE9TMgotIiAgV2hldGhlciBhbm9ueW1vdXMgbG9naW5zIGFyZSBhbGxvd2VkLiAg QnkgZGVmYXVsdCB0aGV5IGFyZSBOT1QgYWxsb3dlZCwiLAotIiAgc28gdGhpcyBvcHRpb24gbmVl ZCBiZSBpbmNsdWRlZCBvbmx5IHRvIGFsbG93IHRoZW0gKG9yIGZvciBjbGFyaXR5LCB0byIsCi0i ICBlbXBoYXNpemUgdGhhdCB0aGV5IGFyZSBub3QgYWxsb3dlZCkuICBBbm9ueW1vdXMgbG9naW4g b2NjdXJzIHdoZW4gdGhlIiwKLSIgIHVzZXJuYW1lIFwiYW5vbnltb3VzXCIgaXMgc3BlY2lmaWVk IHdpdGggYW55IHBhc3N3b3JkIChhcyB3aXRoIGZ0cGQpLiIsCi0iICBJbiBvcmRlciBmb3IgYW5v bnltb3VzIGxvZ2lucyB0byBzdWNjZWVkIG9uIFdpbmRvd3MgTlQvMjAwMCwgdGhlIiwKLSIgIEFO T05ZTU9VUyBhY2NvdW50IG11c3QgYmUgZW5hYmxlZC4iLAotIiAiLAotIiAgT24gV2luZG93cyBO VCBhbmQgMjAwMCwgYW5vbnltb3VzIHVzZXJzIGhhdmUgdGhlIHNhbWUgYWNjZXNzIHJpZ2h0cyBh cyIsCi0iICB0aGUgQU5PTllNT1VTIGFjY291bnQuICBJbiBXaW5kb3dzIDk1Lzk4LCBhbm9ueW1v dXMgdXNlcnMsIGp1c3QgbGlrZSBhbnkiLAotIiAgb3RoZXIgdXNlcnMsIGhhdmUgZnVsbCBhY2Nl c3MgcmlnaHRzIHRvIHlvdXIgZW50aXJlIFBDLCBzaW5jZSBXaW5kb3dzIDk1IiwKLSIgIGFuZCA5 OCBpbmNsdWRlIG5vIHNlY3VyaXR5IGZlYXR1cmVzLiAgRm9yIHRoaXMgcmVhc29uLCBpZiB5b3Ug YXJlIGFsbG93aW5nIiwKLSIgIGFub255bW91cyBsb2dpbnMsIGJlIHN1cmUgdG8gYWxzbyBTRVQg YW4gSUtTIEFOT05ZTU9VUyBST09UIGRpcmVjdG9yeSB0byIsCi0iICByZXN0cmljdCBhbm9ueW1v dXMgdXNlcnMnIGZpbGUgYWNjZXNzLiIsCi0iICIsCi0iICBBbm9ueW1vdXMgdXNlciBwZXJtaXNz aW9ucyBtYXkgYmUgcmVzdHJpY3RlZCB2aWEgdGhlIHNwZWNpZmljYXRpb24gb2YgIiwKLSIgIERJ U0FCTEUgY29tbWFuZHMgaW4gdGhlIEFOT05ZTU9VUyBpbml0ZmlsZS4gIEFub255bW91cyB1c2Vy cyBhcmUgbm90ICIsCi0iICBwZXJtaXR0ZWQgdG8gZXhlY3V0ZSBhbiBFTkFCTEUgY29tbWFuZC4g IEFub255bW91cyB1c2VycyBhcmUgYWxzbyBwcmV2ZW50ZWQiCi0sCi0iICBmcm9tIFNIT1dpbmcg c2Vuc2l0aXZlIGRhdGEgYWJvdXQgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb3IgdGhlIElLUyIsCi0i ICBjb25maWd1cmF0aW9uLiIsCi0jZWxzZQotIiAgV2hldGhlciBhbm9ueW1vdXMgbG9naW5zIGFy ZSBhbGxvd2VkLiBCeSBkZWZhdWx0IHRoZXkgYXJlIGFsbG93ZWQsIHNvIHRoaXMiLAotIiAgb3B0 aW9uIG5lZWQgYmUgaW5jbHVkZWQgb25seSB0byBkaXNhbGxvdyB0aGVtIChvciBmb3IgY2xhcml0 eSwgdG8gZW1waGFzaXplIgotLAotIiAgdGhleSBhcmUgYWxsb3dlZCkuIEFub255bW91cyBsb2dp biBvY2N1cnMgd2hlbiB0aGUgdXNlcm5hbWUgXCJhbm9ueW1vdXNcIiIsCi0iICBvciBcImZ0cFwi IGlzIGdpdmVuLCB3aXRoIGFueSBwYXNzd29yZCAoYXMgd2l0aCBmdHBkKS4iLAotI2VuZGlmIC8q IE9TMiAqLwotIiAiLAotIlNFVCBJS1MgQU5PTllNT1VTIFJPT1QgPGRpcmVjdG9yeT4iLAotIiAg U3BlY2lmaWVzIGEgZGlyZWN0b3J5IHRyZWUgdG8gd2hpY2ggYW5vbnltb3VzIHVzZXJzIGFyZSBy ZXN0cmljdGVkIGFmdGVyIiwKLSIgIGxvZ2luLiIsCi0iICIsCi0iU0VUIElLUyBCQU5ORVJGSUxF IDxmaWxlbmFtZT4iLAotIiAgVGhlIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBtZXNzYWdl IHRvIGJlIHByaW50ZWQgYWZ0ZXIgdGhlIHVzZXIgbG9ncyIsCi0iICBpbiwgaW4gcGxhY2Ugb2Yg dGhlIG5vcm1hbCBtZXNzYWdlIChjb3B5cmlnaHQgbm90aWNlLCBcIlR5cGUgSEVMUCBvciA/IGZv ciIsCi0iICBoZWxwXCIsIGV0YykuIiwKLSIgIiwKLSJTRVQgSUtTIENERklMRSA8ZmlsZWxpc3Q+ IiwKLSIgIFdoZW4gY2RtZXNzYWdlIGlzIG9uLCB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBcInJl YWQgbWVcIiBmaWxlIHRvIGJlIHNob3duLiIKLSwKLSIgIE5vcm1hbGx5IHlvdSB3b3VsZCBzcGVj aWZ5IGEgcmVsYXRpdmUgKG5vdCBhYnNvbHV0ZSkgbmFtZSwgc2luY2UgdGhlIGZpbGUiLAotIiAg aXMgb3BlbmVkIHVzaW5nIHRoZSBsaXRlcmFsIG5hbWUgeW91IHNwZWNpZmllZCwgYWZ0ZXIgY2hh bmdpbmcgdG8gdGhlIG5ldyIsCi0iICBkaXJlY3RvcnkuICBFeGFtcGxlOiIsCi0iICIsCi0iICAg IFNFVCBJS1MgQ0RGSUxFIFJFQUQuTUUiLAotIiAiLAotIiAgWW91IGNhbiBhbHNvIGdpdmUgYSBs aXN0IG9mIHVwIHRvIDggZmlsZW5hbWVzIGJ5IChhKSBlbmNsb3NpbmcgZWFjaCIsCi0iICBmaWxl bmFtZSBpbiBicmFjZXMsIGFuZCAoYikgZW5jbG9zaW5nIHRoZSBlbnRpcmUgbGlzdCBpbiBicmFj ZXMuICBFeGFtcGxlOiIsCi0iICIsCi0iICAgIFNFVCBJS1MgQ0RGSUxFIHt7UkVBRC5NRX17YWFy ZWFkbWUudHh0fXtSRUFETUV9e3JlYWQtdGhpcy1maXJzdH19IiwKLSIgIiwKLSIgIFdoZW4gYSBs aXN0IGlzIGdpdmVuLCBpdCBpcyBzZWFyY2hlZCBmcm9tIGxlZnQgdG8gcmlnaHQgYW5kIHRoZSBm aXJzdCIsCi0iICBmaWxlIGZvdW5kIGlzIGRpc3BsYXllZC4iLAotIiAiLAotIlNFVCBJS1MgQ0RN RVNTQUdFIHtPTiwgT0ZGLCAwLCAxLCAyfSIsCi0iICBGb3IgdXNlIGluIHRoZSBTZXJ2ZXItU2lk ZSBTZXJ2ZXIgY29uZmlndXJhdGlvbjsgd2hlbmV2ZXIgdGhlIGNsaWVudCIsCi0iICB0ZWxscyB0 aGUgc2VydmVyIHRvIGNoYW5nZSBkaXJlY3RvcnksIHRoZSBzZXJ2ZXIgc2VuZHMgdGhlIGNvbnRl bnRzIG9mIGEiLAotIiAgXCJyZWFkIG1lXCIgZmlsZSB0byB0aGUgY2xpZW50J3Mgc2NyZWVuLiAg VGhpcyBmZWF0dXJlIGlzIE9OIGJ5IGRlZmF1bHQsIiwKLSIgIGFuZCBvcGVyYXRlcyBpbiBjbGll bnQvc2VydmVyIG1vZGUgb25seSB3aGVuIE9OIG9yIDEuICBJZiBzZXQgdG8gMiBvciIsCi0iICBo aWdoZXIsIGl0IGFsc28gb3BlcmF0ZXMgd2hlbiB0aGUgQ0QgY29tbWFuZCBpcyBnaXZlbiBhdCB0 aGUgSUtTRD4gcHJvbXB0LiIsCi0iICBTeW5vbnltOiBTRVQgSUtTIENETVNHLiIsCi0iICIsCi0i U0VUIElLUyBEQVRBQkFTRSB7IE9OLCBPRkYgfSIsCi0iICBUaGlzIGNvbW1hbmQgZGV0ZXJtaW5l cyB3aGV0aGVyIGVudHJpZXMgYXJlIGluc2VydGVkIGludG8gdGhlIFNFVCBJS1MiLAotIiAgREJG SUxFIChJS1NEIGFjdGl2ZSBzZXNzaW9ucyBkYXRhYmFzZSkuIiwKLSIgIiwKLSJTRVQgSUtTIERC RklMRSA8ZmlsZW5hbWU+IiwKLSIgIFNwZWNpZmllcyB0aGUgZmlsZSB3aGljaCBzaG91bGQgYmUg dXNlZCBmb3Igc3RvcmluZyBydW50aW1lIHN0YXR1cyIsCi0jaWZkZWYgT1MyCi0iICBpbmZvcm1h dGlvbiBhYm91dCBhY3RpdmUgY29ubmVjdGlvbnMuICBUaGUgZGVmYXVsdCBpcyBhIGZpbGUgY2Fs bGVkIiwKLSIgIFwiaWtzZC5kYlwiIGluIHRoZSBXSU5ET1dTIGRpcmVjdG9yeS4iLAotI2Vsc2UK LSNpZmRlZiBVTklYCi0iICBpbmZvcm1hdGlvbiBhYm91dCBhY3RpdmUgY29ubmVjdGlvbnMuICBU aGUgZGVmYXVsdCBpcyBhIGZpbGUgY2FsbGVkIiwKLSIgIFwiaWtzZC5kYlwiIGluIHRoZSAvdmFy L2xvZyBkaXJlY3RvcnkuIiwKLSNlbHNlCi0iICBpbmZvcm1hdGlvbiBhYm91dCBhY3RpdmUgY29u bmVjdGlvbnMuIiwKLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogT1MyICovCi0iICIsCi0j aWZkZWYgT1MyCi0iU0VUIElLUyBERUZBVUxULURPTUFJTiA8ZG9tYWluLW5hbWU+IiwKLSIgIEEg dXNlcmlkIG9uIFdpbmRvd3MgaXMgb2YgdGhlIGZvcm0gRE9NQUlOXFxcXHVzZXJpZC4gIFRoaXMg Y29tbWFuZCIsCi0iICBkZXRlcm1pbmVzIHdoaWNoIGRvbWFpbiB3aWxsIGJlIHNlYXJjaGVkIGZv ciB0aGUgdXNlcmlkIGlmIGEgZG9tYWluIiwKLSIgIGlzIG5vdCBzcGVjaWZpZWQgYnkgdGhlIHVz ZXIuICBPbiBXaW5kb3dzIDk1Lzk4IHdoZW4gVXNlci1sZXZlbCIsCi0iICBhY2Nlc3MgaXMgYWN0 aXZhdGVkIGluIHRoZSBOZXR3b3JrIENvbnRyb2wgUGFuZWwsIHRoZSBkZWZhdWx0ICIsCi0iICBk b21haW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHNldC4gIElmIHRoZSBkZWZhdWx0IGRvbWFpbiBp cyBub3QiLAotIiAgc3BlY2lmaWVkLCBhY2NvdW50cyBvbiB0aGUgbG9jYWwgbWFjaGluZSB3aWxs IHRha2UgcHJlY2VkZW5jZSBvdmVyIiwKLSIgIGFjY291bnRzIGluIERvbWFpbnMgdG8gd2hpY2gg dGhlIGxvY2FsIG1hY2hpbmUgYmVsb25ncy4iLAotI2VuZGlmIC8qIE9TMiAqLwotIiAiLAotIlNF VCBJS1MgSEVMUEZJTEUgPGZpbGVuYW1lPiIsCi0iICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgYSBm aWxlIHRvIGJlIGRpc3BsYXllZCBpZiB0aGUgdXNlciB0eXBlcyBIRUxQIiwKLSIgIChub3QgZm9s bG93ZWQgYnkgYSBzcGVjaWZpYyBjb21tYW5kIG9yIHRvcGljKSwgaW4gcGxhY2Ugb2YgdGhlIGJ1 aWx0LWluIiwKLSIgIHRvcC1sZXZlbCBoZWxwIHRleHQuICBUaGUgZmlsZSBuZWVkIG5vdCBmaXQg b24gb25lIHNjcmVlbjsgbW9yZS1wcm9tcHRpbmciLAotIiAgaXMgdXNlZCBpZiB0aGUgZmlsZSBp cyBtb3JlIHRoYW4gb25lIHNjcmVlbiBsb25nIGlmIENPTU1BTkQgTU9SRS1QUk9NUFRJTkciLAot IiAgaXMgT04sIGFzIGl0IGlzIGJ5IGRlZmF1bHQuIiwKLSIgIiwKLSJTRVQgSUtTIElOSVRGSUxF IDxmaWxlbmFtZT4iLAotIiAgRXhlY3V0ZSA8ZmlsZW5hbWU+IHJhdGhlciB0aGFuIHRoZSBub3Jt YWwgaW5pdGlhbGl6YXRpb24gZmlsZSBmb3IgcmVhbCIsCi0iICB1c2VyczsgdGhpcyBvcHRpb24g ZG9lcyBub3QgYXBwbHkgdG8gYW5vbnltb3VzIHVzZXJzLiIsCi0iICIsCi0iU0VUIElLUyBOTy1J TklURklMRSB7IE9OLCBPRkYgfSIsCi0iICBEbyBub3QgZXhlY3V0ZSBhbiBpbml0aWFsaXphdGlv biBmaWxlLCBldmVuIGlmIGEgcmVhbCB1c2VyIGlzIGxvZ2dpbmcgaW4uIiwKLSIgIiwKLSJTRVQg SUtTIFNFUlZFUi1PTkxZIHsgT04sIE9GRiB9IiwKLSIgIElmIHRoaXMgb3B0aW9uIGlzIGluY2x1 ZGVkIG9uIHRoZSBJS1NEIGNvbW1hbmQgbGluZSwgdGhlIENsaWVudCBTaWRlIFNlcnZlciIKLSwK LSIgIGNvbmZpZ3VyYXRpb24gaXMgZGlzYWJsZWQsIGFuZCB0aGUgdXNlciB3aWxsIG5vdCBnZXQg YSBVc2VybmFtZTogb3IiLAotIiAgUGFzc3dvcmQ6IHByb21wdCwgYW5kIHdpbGwgbm90IGJlIGFi bGUgdG8gYWNjZXNzIHRoZSBJS1NEIGNvbW1hbmQgcHJvbXB0LiIsCi0iICBBIEZJTklTSCBjb21t YW5kIHNlbnQgdG8gdGhlIElLU0Qgd2lsbCBsb2cgaXQgb3V0IGFuZCBjbG9zZSB0aGUiLAotIiAg Y29ubmVjdGlvbiwgcmF0aGVyIHRoYW4gcmV0dXJuaW5nIGl0IHRvIGl0cyBwcm9tcHQuIiwKLSIg IiwKLSJTRVQgSUtTIFRJTUVPVVQgPG51bWJlcj4iLAotIiAgVGhpcyBzZXRzIGEgbGltaXQgKGlu IHNlY29uZHMpIG9uIHRoZSBhbW91bnQgb2YgdGltZSB0aGUgY2xpZW50IGhhcyB0byBsb2ciLAot IiAgaW4gb25jZSB0aGUgY29ubmVjdGlvbiBpcyBtYWRlLiAgSWYgc3VjY2Vzc2Z1bCBsb2dpbiBk b2VzIG5vdCBvY2N1ciB3aXRoaW4iLAotIiAgdGhlIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzLCB0 aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQuICBUaGUgZGVmYXVsdCB0aW1lb3V0IgotLAotIiAgaXMg MzAwIHNlY29uZHMgKDUgbWludXRlcykuICBBIHZhbHVlIG9mIDAgb3IgbGVzcyBpbmRpY2F0ZXMg dGhlcmUgaXMgdG8gYmUiLAotIiAgbm8gbGltaXQuIiwKLSIgIiwKLSJTRVQgSUtTIFVTRVJGSUxF IDxmaWxlbmFtZT4iLAotI2lmZGVmIFVOSVgKLSIgIFRoaXMgZmlsZSBjb250YWlucyBhIGxpc3Qg b2YgbG9jYWwgdXNlcm5hbWVzIHRoYXQgYXJlIHRvIGJlIGRlbmllZCBhY2Nlc3MiLAotIiAgdG8g SW50ZXJuZXQgS2VybWl0IFNlcnZpY2UuICBUaGUgZGVmYXVsdCBpcyAvZXRjL2Z0cHVzZXJzLiAg VGhpcyBjYW4gYmUgdGhlIgotLAotIiAgc2FtZSBmaWxlIHRoYXQgaXMgdXNlZCBieSB3dWZ0cGQs IGFuZCB0aGUgc3ludGF4IGlzIHRoZSBzYW1lOiBvbmUgdXNlcm5hbWUiLAotIiAgcGVyIGxpbmU7 IGxpbmVzIHN0YXJ0aW5nIHdpdGggXCIjXCIgYXJlIGlnbm9yZWQuICBVc2UgdGhpcyBvcHRpb24g dG8iLAotIiAgc3BlY2lmeSB0aGUgbmFtZSBvZiBhIGRpZmZlcmVudCBmb3JiaWRkZW4tdXNlciBm aWxlLCBvciB1c2UiLAotIiAgXCJzZXQgaWtzIHVzZXJmaWxlIC9kZXYvbnVsbFwiIHRvIGRpc2Fi bGUgdGhpcyBmZWF0dXJlIGluIGNhc2UgdGhlcmUgaXMgYSIsCi0iICAgL2V0Yy9mdHB1c2VycyBm aWxlIGJ1dCB5b3UgZG9uJ3Qgd2FudCB0byB1c2UgaXQuIiwKLSNlbHNlCi0iICBUaGlzIGZpbGUg Y29udGFpbnMgYSBsaXN0IG9mIGxvY2FsIHVzZXJuYW1lcyB0aGF0IGFyZSB0byBiZSBkZW5pZWQg YWNjZXNzIiwKLSIgIHRvIEludGVybmV0IEtlcm1pdCBTZXJ2aWNlLiAgVGhlIHN5bnRheCBpczog b25lIHVzZXJuYW1lIHBlciBsaW5lOyBsaW5lcyIsCi0iICBzdGFydGluZyB3aXRoIFwiI1wiIGFy ZSBpZ25vcmVkLiIsCi0jZW5kaWYgLyogVU5JWCAqLwotIiAiLAotIlNFVCBJS1MgWEZFUkxPRyB7 IE9OLCBPRkYgfSIsCi0jaWZkZWYgVU5JWAotIiAgV2hldGhlciBhIGZpbGUtdHJhbnNmZXIgbG9n IHNob3VsZCBiZSBrZXB0LiAgT2ZmIGJ5IGRlZmF1bHQuICBJZiBcIm9uXCIsIiwKLSIgIGJ1dCBu byBTRVQgSUtTRCBYRkVSRklMRSBjb21tYW5kIGlzIGdpdmVuLCAvdmFyL2xvZy9pa3NkLmxvZyBp cyB1c2VkLiIsCi0jZWxzZQotIiAgV2hldGhlciBhIGZpbGUtdHJhbnNmZXIgbG9nIHNob3VsZCBi ZSBrZXB0LiAgT2ZmIGJ5IGRlZmF1bHQuIiwKLSNlbmRpZiAvKiBVTklYICovCi0iICIsCi0iU0VU IElLUyBYRkVSRklMRSA8ZmlsZW5hbWU+IiwKLSIgIFVzZSB0aGlzIG9wdGlvbiB0byBzcGVjaWZ5 IGFuIGlrc2QgbG9nIGZpbGUgbmFtZS4gIElmIHlvdSBpbmNsdWRlIHRoaXMiLAotIiAgb3B0aW9u LCBpdCBpbXBsaWVzIFNFVCBJS1MgWEZFUkZJTEUgT04uIiwKLSIiCi19OwotI2VuZGlmIC8qIE5P SUtTRCAqLwotCi0vKiAgRCBPIEggUyBFIFQgIC0tICBHaXZlIGhlbHAgZm9yIFNFVCBjb21tYW5k ICAqLwotCi1pbnQKLWRvaHNldCh4eCkgaW50IHh4OyB7Ci0gICAgaW50IHg7Ci0KLSAgICBpZiAo eHggPT0gLTMpIHJldHVybihobXNnYShobWhzZXQpKTsKLSAgICBpZiAoeHggPCAwKSByZXR1cm4o eHgpOwotCi0jaWZkZWYgTkVXRlRQCi0gICAgaWYgKHh4ID09IFhZRlRQWCkKLSAgICAgIHJldHVy bihkb3NldGZ0cGhscCgpKTsKLSAgICBpZiAoeHggPT0gWFlHUFIpCi0gICAgICByZXR1cm4oaG1z Z2EoaG14eWdwcikpOwotI2VuZGlmIC8qIE5FV0ZUUCAqLwotCi0gICAgaWYgKCh4ID0gY21jZm0o KSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgc3dpdGNoICh4eCkgewotI2lmbmRlZiBOT0lLU0QKLSAg ICAgIGNhc2UgWFlJS1M6Ci0gICAgICAgIHJldHVybihobXNnYShoc2V0aWtzKSk7Ci0jZW5kaWYg LyogTk9JS1NEICovCi0KLWNhc2UgWFlfUkVOOgotICByZXR1cm4oaG1zZygiU0VUIFJFTkFNRSBM SVNUIHsgT04sIE9GRiB9XG5cCi0gIFRlbGxzIHdoZXRoZXIgdGhlIFJFTkFNRSBjb21tYW5kIHNo b3VsZCBsaXN0IGl0cyByZXN1bHRzIGJ5IGRlZmF1bHQuXG5cblwKLVNFVCBSRU5BTUUgQ09MTElT SU9OIHsgRkFJTCwgUFJPQ0VFRCwgT1ZFUldSSVRFIH1cblwKLSAgRXN0YWJsaXNoZXMgdGhlIGRl ZmF1bHQgYWN0aW9uIHdoZW4gcmVuYW1pbmcgYSBmaWxlIHdvdWxkIGRlc3Ryb3kgYW5cblwKLSAg ZXhpc3RpbmcgZmlsZS4gIFNlZSBIRUxQIFJFTkFNRS4iKSk7Ci0KLWNhc2UgWFlBVFRSOgotICAg IHJldHVybihobXNnYShoc2V0YXQpKTsKLQotY2FzZSBYWUJBQ0s6Ci0gICAgcmV0dXJuKGhtc2dh KGhzZXRia2cpKTsKLQotY2FzZSBYWUJFTEw6Ci0gICAgcmV0dXJuKGhtc2dhKGhteHliZWwpKTsK LQotI2lmZGVmIE9TMgotY2FzZSBYWVBSVFk6Ci0gICAgcmV0dXJuKGhtc2coIlNFVCBQUklPUklU WSB7IFJFR1VMQVIsIEZPUkVHUk9VTkQtU0VSVkVSLCBUSU1FLUNSSVRJQ0FMIH1cblwKLSAgU3Bl Y2lmaWVzIGF0IHdoaWNoIHByaW9yaXR5IGxldmVsIHRoZSBjb21tdW5pY2F0aW9uIGFuZCBzY3Jl ZW4gdXBkYXRlXG5cCi0gIHRocmVhZHMgc2hvdWxkIG9wZXJhdGUuICBUaGUgZGVmYXVsdCB2YWx1 ZSBpcyBGT1JFR1JPVU5ELVNFUlZFUi4iKSk7Ci0KLWNhc2UgWFlNU0s6Ci0gICAgcmV0dXJuKGht c2dhKGhteHltc2spKTsKLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIERZTkFNSUMKLWNhc2Ug WFlCVUY6Ci0gICAgcmV0dXJuKGhtc2dhKGhzZXRidWYpKTsKLSNlbmRpZiAvKiBEWU5BTUlDICov Ci0KLSNpZm5kZWYgTk9MT0NBTAotY2FzZSBYWUNBUlI6Ci0gICAgcmV0dXJuKGhtc2dhKGhzZXRj YXIpKTsKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSNpZm5kZWYgTk9TUEwKLWNhc2UgWFlDQVNF OgotICAgIHJldHVybihobXNnKCJTeW50YXg6IFNFVCBDQVNFIHsgT04sIE9GRiB9XG5cCi0gIFRl bGxzIHdoZXRoZXIgYWxwaGFiZXRpYyBjYXNlIGlzIHNpZ25pZmljYW50IGluIHN0cmluZyBjb21w YXJpc29uc1xuXAotICBkb25lIGJ5IElOUFVULCBJRiwgYW5kIG90aGVyIGNvbW1hbmRzLiAgVGhp cyBzZXR0aW5nIGlzIGxvY2FsIHRvIHRoZVxuXAotICBjdXJyZW50IG1hY3JvIG9yIGNvbW1hbmQg ZmlsZSwgYW5kIGluaGVyaXRlZCBieSBzdWJvcmRpbmF0ZXMuIikpOwotCi0jZW5kaWYgLyogTk9T UEwgKi8KLQotY2FzZSBYWUNNRDoKLSAgICByZXR1cm4oaG1zZ2EoaHNldGNtZCkpOwotCi1jYXNl IFhZSUZEOgotICAgIHJldHVybihobXNnKCJTeW50YXg6IFNFVCBJTkNPTVBMRVRFIHsgRElTQ0FS RCwgS0VFUCB9XG5cCi0gIFdoZXRoZXIgdG8gZGlzY2FyZCBvciBrZWVwIGluY29tcGxldGVseSBy ZWNlaXZlZCBmaWxlcywgZGVmYXVsdCBpcyBLRUVQLiIpKTsKLQotI2lmbmRlZiBOT1NQTAotY2Fz ZSBYWUlOUFU6Ci0gICAgcmV0dXJuKGhtc2dhKGh4eWlucCkpOwotI2VuZGlmIC8qIE5PU1BMICov Ci0KLWNhc2UgWFlDSEtUOgotICAgIHJldHVybihobXNnYShobXh5Y2hrdCkpOwotCi0jaWZuZGVm IE5PU1BMCi1jYXNlIFhZQ09VTjoKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiAgU0VUIENPVU5U IG51bWJlclxuXAotIEV4YW1wbGU6IFNFVCBDT1VOVCA1XG5cCi0gIFNldCB1cCBhIGxvb3AgY291 bnRlciwgZm9yIHVzZSB3aXRoIElGIENPVU5ULiAgTG9jYWwgdG8gY3VycmVudCBtYWNyb1xuXAot ICBvciBjb21tYW5kIGZpbGUsIGluaGVyaXRlZCBieSBzdWJvcmRpbmF0ZSBtYWNyb3MgYW5kIGNv bW1hbmQgZmlsZXMuIikpOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLWNhc2UgWFlERUJVOgotICAg IHJldHVybihobXNnYShobXh5ZGViKSk7Ci0KLWNhc2UgWFlERkxUOgotICAgIHJldHVybihobXNn KCJTeW50YXg6IFNFVCBERUZBVUxUIGRpcmVjdG9yeVxuXAotICBDaGFuZ2UgZGlyZWN0b3J5LiAg RXF1aXZhbGVudCB0byBDRCBjb21tYW5kLiIpKTsKLQotY2FzZSBYWURFTEE6Ci0gICAgcmV0dXJu KGhtc2coIlN5bnRheDogU0VUIERFTEFZIG51bWJlclxuXAotICBOdW1iZXIgb2Ygc2Vjb25kcyB0 byB3YWl0IGJlZm9yZSBzZW5kaW5nIGZpcnN0IHBhY2tldCBhZnRlciBTRU5EIGNvbW1hbmQuIikp OwotCi0jaWZuZGVmIE5PRElBTAotY2FzZSBYWURJQUw6Ci0gICAgcmV0dXJuKGhtc2dhKGhteHlk aWFsKSk7Ci0jZW5kaWYgLyogTk9ESUFMICovCi0KLSNpZmRlZiBVTklYCi1jYXNlIFhZU1VTUDoK LSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBTRVQgU1VTUEVORCB7IE9GRiwgT04gfVxuXAotICBE aXNhYmxlcyBTVVNQRU5EIGNvbW1hbmQsIHN1c3BlbmQgc2lnbmFscywgYW5kIDxlc2MtY2hhcj5a IGR1cmluZyBDT05ORUNULiIpCi0gICAgICAgICAgICk7Ci0jZW5kaWYKLQotI2lmbmRlZiBOT1ND UklQVAotY2FzZSBYWVNDUkk6Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogU0VUIFNDUklQVCBF Q0hPIHsgT0ZGLCBPTiB9XG5cCi0gIERpc2FibGVzL0VuYWJsZXMgZWNob2luZyBvZiBTQ1JJUFQg Y29tbWFuZCBvcGVyYXRpb24uIikpOwotI2VuZGlmIC8qIE5PU0NSSVBUICovCi0KLWNhc2UgWFlU QUtFOgotICAgIHJldHVybihobXNnYShoeHl0YWspKTsKLQotI2lmbmRlZiBOT0xPQ0FMCi1jYXNl IFhZVEVSTToKLSAgICByZXR1cm4oaG1zZ2EoaHh5dGVybSkpOwotCi1jYXNlIFhZRFVQTDoKLSAg ICByZXR1cm4oaG1zZygiU3ludGF4OiBTRVQgRFVQTEVYIHsgRlVMTCwgSEFMRiB9XG5cCi0gIER1 cmluZyBDT05ORUNUOiBGVUxMIG1lYW5zIHJlbW90ZSBob3N0IGVjaG9lcywgSEFMRiBtZWFucyBL ZXJtaXRcblwKLSAgZG9lcyBpdHMgb3duIGVjaG9pbmcuIikpOwotCi1jYXNlIFhZTENMRToKLSAg ICByZXR1cm4oaG1zZygiU3ludGF4OiBTRVQgTE9DQUwtRUNITyB7IE9GRiwgT04gfVxuXAotICBE dXJpbmcgQ09OTkVDVDogT0ZGIG1lYW5zIHJlbW90ZSBob3N0IGVjaG9lcywgT04gbWVhbnMgS2Vy bWl0XG5cCi0gIGRvZXMgaXRzIG93biBlY2hvaW5nLiAgU3lub255bSBmb3IgU0VUIERVUExFWCB7 IEZVTEwsIEhBTEYgfS4iKSk7Ci0KLWNhc2UgWFlFU0M6Ci0gICAgcmV0dXJuKGhtc2dhKGh4eWVz YykpOyAgICAgICAgICAgICAgLyogU0VUIEVTQ0FQRSAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8K LQotY2FzZSBYWVBSVFI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBQUklOVEVS ICovCi0gICAgcmV0dXJuKGhtc2dhKGh4eXBydHIpKTsKLQotI2lmZGVmIE9TMgotI2lmZGVmIEJQ UklOVAotY2FzZSBYWUJEQ1A6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBCUFJJ TlRFUiAqLwotICAgIHJldHVybihobXNnYShoeHlicHJ0cikpOwotI2VuZGlmIC8qIEJQUklOVCAq LwotI2VuZGlmIC8qIE9TMiAqLwotCi1jYXNlIFhZRVhJVDoKLSAgICByZXR1cm4oaG1zZ2EoaHh5 ZXhpdCkpOwotCi1jYXNlIFhZRklMRToKLSAgICByZXR1cm4oaG1zZ2EoaG14eWYpKTsKLQotY2Fz ZSBYWUZMT1c6Ci0gICAgcmV0dXJuKGhtc2dhKGhteHlmbG8pKTsKLQotY2FzZSBYWUhBTkQ6Ci0g ICByZXR1cm4oaG1zZ2EoaG14eWhzaCkpOwotCi0jaWZkZWYgTkVUQ09OTgotCi1jYXNlIFhZSE9T VDoKLSAgICByZXR1cm4oaG1zZ2EoaHh5aG9zdCkpOwotCi1jYXNlIFhZTkVUOgotICAgIHJldHVy bihobXNnYShoeHluZXQpKTsKLQotI2lmbmRlZiBOT1RDUE9QVFMKLSNpZmRlZiBTT0xfU09DS0VU Ci1jYXNlIFhZVENQOgotICAgIHJldHVybihobXNnYShoeHl0Y3ApKTsKLSNlbmRpZiAvKiBTT0xf U09DS0VUICovCi0jZW5kaWYgLyogTk9UQ1BPUFRTICovCi0KLSNpZmRlZiBBTllYMjUKLWNhc2Ug WFlYMjU6Ci0gICAgcmV0dXJuKGhtc2dhKGh4eXgyNSkpOwotCi0jaWZuZGVmIElCTVgyNQotY2Fz ZSBYWVBBRDoKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBTRVQgUEFEIG5hbWUgdmFsdWVcblwK LVNldCBhIFBBRCBYLjMgcGFyYW1ldGVyIHdpdGggYSBkZXNpcmVkIHZhbHVlLiIpKTsKLSNlbmRp ZiAvKiBJQk1YMjUgKi8KLSNlbmRpZiAvKiBBTllYMjUgKi8KLSNlbmRpZiAvKiBORVRDT05OICov Ci0KLSNpZm5kZWYgTk9TUEwKLWNhc2UgWFlPVVRQOgotICAgIHJldHVybihobXNnYShoeHlvdXQp KTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVmIE5PU0VUS0VZCi1jYXNlIFhZS0VZOiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0VUIEtFWSAqLwotICAgIHJldHVybihobXNn YShobWhza2V5KSk7Ci0jZW5kaWYgLyogTk9TRVRLRVkgKi8KLQotI2lmbmRlZiBOT0NTRVRTCi1j YXNlIFhZTEFORzoKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBTRVQgTEFOR1VBR0UgbmFtZVxu XAotICBTZWxlY3RzIGxhbmd1YWdlLXNwZWNpZmljIHRyYW5zbGF0aW9uIHJ1bGVzIGZvciB0ZXh0 LW1vZGUgZmlsZSB0cmFuc2ZlcnMuXG5cCi0gIFVzZWQgd2l0aCBTRVQgRklMRSBDSEFSQUNURVIt U0VUIGFuZCBTRVQgVFJBTlNGRVIgQ0hBUkFDVEVSLVNFVCB3aGVuIG9uZVxuXAotICBvZiB0aGVz ZSBpcyBBU0NJSS4iKSk7Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi1jYXNlIFhZTElORToKLSAg ICBwcmludGYoIlxuU3ludGF4OiBTRVQgTElORSAob3IgU0VUIFBPUlQpIFsgc3dpdGNoZXMgXSBb IGRldmljZW5hbWUgXVxuXAotICBTZWxlY3RzIGEgc2VyaWFsLXBvcnQgZGV2aWNlIHRvIHVzZSBm b3IgbWFraW5nIGNvbm5lY3Rpb25zLlxuIik7Ci0jaWZkZWYgT1MyCi0jaWZkZWYgTlQKLSAgICBw cmludGYoIlxuIik7Ci0gICAgcHJpbnRmKAotIiAgWW91IG1heSBhY2Nlc3MgY29tbXVuaWNhdGlv biBwb3J0cyBieSB0aGUgdHJhZGl0aW9uYWwgXCJET1NcIiBwb3J0IG5hbWVcbiIpOwotICAgIHBy aW50ZigKLSIgIChlLmcuIFNFVCBQT1JUIENPTTEpIG9yIGJ5IHRoZSBNaWNyb3NvZnQgVGVsZXBo b255IG1vZGVtIG5hbWUgZnJvbSB0aGVcbiIpOwotICAgIHByaW50ZigKLSIgIE1vZGVtcyBmb2xk ZXIgb2YgdGhlIENvbnRyb2wgUGFuZWwgKGUuZy4gU0VUIFBPUlQgVEFQSSkuIElmIG9uZSBtZXRo b2RcbiIpOwotICAgIHByaW50ZigiICBkb2Vzbid0IHdvcmssIHRyeSB0aGUgb3RoZXIuXG5cbiIp OwotI2VuZGlmIC8qIE5UICovCi0jZWxzZSAgLyogT1MyICovCi0gICAgcHJpbnRmKCIgIFR5cGlj YWwgZGV2aWNlIG5hbWUgZm9yIHRoaXMgcGxhdGZvcm06ICVzLlxuIix0dGd0cG4oKSk7Ci0gICAg cHJpbnRmKCIgIFRoZSBkZWZhdWx0IGRldmljZSBuYW1lIGlzICVzIChpLmUuIG5vbmUpLlxuIixk ZnR0eSk7Ci0gICAgaWYgKCFkZmxvYykgewotICAgICAgICBwcmludGYoCi0iICBJZiB5b3UgZG8g bm90IGdpdmUgYSBTRVQgTElORSBjb21tYW5kIG9yIGlmIHlvdSBnaXZlIGEgU0VUIExJTkUgY29t bWFuZFxuIik7Ci0gICAgICAgIHByaW50ZigKLSIgIHdpdGggbm8gZGV2aWNlIG5hbWUsIG9yIGlm IHlvdSBzcGVjaWZ5ICVzIGFzIHRoZSBkZXZpY2UgbmFtZSxcbiIsZGZ0dHkpOwotICAgICAgICBw cmludGYoCi0iICBLZXJtaXQgd2lsbCBiZSBpbiBcInJlbW90ZSBtb2RlXCIsIHN1aXRhYmxlIGZv ciB1c2Ugb24gdGhlIGZhciBlbmQgb2YgYVxuIik7Ci0gICAgICAgIHByaW50ZigKLSIgIGNvbm5l Y3Rpb24sIGUuZy4gYXMgdGhlIGZpbGUtdHJhbnNmZXIgcGFydG5lciBvZiB5b3VyIGRlc2t0b3Ag Y29tbXVuaWNhdGlvblwKLVxuIik7Ci0gICAgICAgIHByaW50ZigKLSIgIHNvZnR3YXJlLiAgSWYg eW91IFNFVCBMSU5FIHRvIGEgc3BlY2lmaWMgZGV2aWNlIG90aGVyIHRoYW4gJXMsXG4iLCBkZnR0 eSk7Ci0gICAgICAgIHByaW50ZigKLSIgIEtlcm1pdCBpcyBpbiBcImxvY2FsIG1vZGVcIiwgc3Vp dGFibGUgZm9yIG1ha2luZyBhIGNvbm5lY3Rpb24gdG8gYW5vdGhlclxuIgotICAgICAgICAgICAg ICApOwotICAgICAgICBwcmludGYoCi0iICBjb21wdXRlci4gIFNFVCBMSU5FIGFsb25lIHJlc2V0 cyBLZXJtaXQgdG8gcmVtb3RlIG1vZGUuXG4iKTsKLSAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0g ICAgICAgIHByaW50ZigKLSIgIFRvIHVzZSBhIG1vZGVtIHRvIGRpYWwgb3V0LCBmaXJzdCBTRVQg TU9ERU0gVFlQRSAoZS5nLiwgdG8gVVNSKSwgdGhlblxuIik7Ci0gICAgcHJpbnRmKAotI2lmZGVm IE9TMgotIiAgU0VUIFBPUlQgQ09NeCAob3IgU0VUIFBPUlQgVEFQSSksIFNFVCBTUEVFRCwgdGhl biBnaXZlIGEgRElBTCBjb21tYW5kLlxuIik7Ci0jZWxzZQotIiAgU0VUIExJTkUgeHh4LCB0aGVu IFNFVCBTUEVFRCwgdGhlbiBnaXZlIGEgRElBTCBjb21tYW5kLlxuIik7Ci0jZW5kaWYgLyogT1My ICovCi0gICAgcHJpbnRmKAotI2lmZGVmIE9TMgotIiAgRm9yIGRpcmVjdCBudWxsLW1vZGVtIGNv bm5lY3Rpb25zIHVzZSBTRVQgTU9ERU0gVFlQRSBOT05FLCBTRVQgUE9SVCBDT014LFxuIgotI2Vs c2UKLSIgIEZvciBkaXJlY3QgbnVsbC1tb2RlbSBjb25uZWN0aW9ucywgdXNlIFNFVCBNT0RFTSBU WVBFIE5PTkUsIFNFVCBMSU5FIHh4eCxcbiIKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICApOwotICAg IHByaW50ZigKLSIgIHRoZW4gU0VUIEZMT1csIFNFVCBTUEVFRCwgYW5kIENPTk5FQ1QuXG4iKTsK LSAgICBwcmludGYoCi0iXG5PcHRpb25hbCBzd2l0Y2hlczpcblwKLSAgL0NPTk5FQ1QgLSBFbnRl ciBDT05ORUNUIG1vZGUgYXV0b21hdGljYWxseSBpZiBTRVQgTElORSBzdWNjZWVkcy5cbiIpOwot ICAgIHByaW50ZigKLSIgIC9TRVJWRVIgIC0gRW50ZXIgc2VydmVyIG1vZGUgYXV0b21hdGljYWxs eSBpZiBTRVQgTElORSBzdWNjZWVkcy5cbiIpOwotI2lmZGVmIFZNUwotICAgIHByaW50ZigKLSIg IC9TSEFSRSAgIC0gT3BlbiB0aGUgZGV2aWNlIGluIHNoYXJlZCBtb2RlLlxuIik7Ci0gICAgcHJp bnRmKAotIiAgL05PU0hBUkUgLSBPcGVuIHRoZSBkZXZpY2UgaW4gZXhjbHVzaXZlIG1vZGUuXG4i KTsKLSNlbmRpZiAvKiBWTVMgKi8KLSAgICBwcmludGYoIlxuIik7Ci0gICAgcHJpbnRmKAotIkFs c28gc2VlIEhFTFAgU0VUIE1PREVNLCBIRUxQIFNFVCBESUFMLCBIRUxQIFNFVCBTUEVFRCwgSEVM UCBTRVQgRkxPVy5cbiIpOwotICAgIHJldHVybigwKTsKLQotI2lmbmRlZiBOT1NQTAotY2FzZSBY WU1BQ1I6Ci0gICAgcmV0dXJuKGhtc2dhKGh4eW1hY3IpKTsKLSNlbmRpZiAvKiBOT1NQTCAqLwot Ci0jaWZuZGVmIE5PRElBTAotY2FzZSBYWU1PRE06Ci0gICAgcmV0dXJuKGhtc2dhKGh4eW1vZG0p KTsKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLQotY2FzZSBYWVBBUkk6Ci0gICAgcmV0dXJuKGhtc2dh KGh4eXBhcmkpKTsKLQotY2FzZSBYWVBST006Ci0gICAgcmV0dXJuKGhtc2dhKGhteHlwcm0pKTsK LQotY2FzZSBYWVFVSUU6Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogU0VUIFFVSUVUIHtPTiwg T0ZGfVxuXAotICBOb3JtYWxseSBPRkYuICBPTiBkaXNhYmxlcyBtb3N0IGluZm9ybWF0aW9uIG1l c3NhZ2VzIGR1cmluZyBpbnRlcmFjdGl2ZVxuXAotICBvcGVyYXRpb24uIikpOwotCi0jaWZkZWYg Q0tfU1BFRUQKLWNhc2UgWFlRQ1RMOgotICAgIHJldHVybihobXNnYShobXh5cWN0bCkpOwotI2Vu ZGlmIC8qIENLX1NQRUVEICovCi0KLWNhc2UgWFlSRVRSOgotICAgIHJldHVybihobXNnKCJTeW50 YXg6IFNFVCBSRVRSWSBudW1iZXJcblwKLSAgSW4gS2VybWl0IHByb3RvY29sIGZpbGUgdHJhbnNm ZXJzOiBIb3cgbWFueSB0aW1lcyB0byByZXRyYW5zbWl0IGFcblwKLSAgcGFydGljdWxhciBwYWNr ZXQgYmVmb3JlIGdpdmluZyB1cDsgMCA9IG5vIGxpbWl0LiIpKTsKLQotI2lmbmRlZiBOT0xPQ0FM Ci1jYXNlIFhZU0VTUzoKLSNpZmRlZiBVTklYCi0gICAgcmV0dXJuKGhtc2coCi0iU3ludGF4Olxu XAotIFNFVCBTRVNTSU9OLUxPRyB7IEJJTkFSWSwgREVCVUcsIE5VTEwtUEFEREVELCBURVhULCBU SU1FU1RBTVBFRC1URVhUIH1cblwKLSAgSWYgQklOQVJZLCByZWNvcmQgYWxsIENPTk5FQ1QgY2hh cmFjdGVycyBpbiBzZXNzaW9uIGxvZy4gIElmIFRFWFQsIHN0cmlwXG5cCi0gIG91dCBDUiwgTlVM LCBhbmQgWE9OL1hPRkYgY2hhcmFjdGVycy4gIERFQlVHIGlzIHRoZSBzYW1lIGFzIEJJTkFSWSBi dXRcblwKLSAgYWxzbyBpbmNsdWRlcyBUZWxuZXQgbmVnb3RpYXRpb25zIG9uIFRDUC9JUCBjb25u ZWN0aW9ucy4iKSk7Ci0jZWxzZQotI2lmZGVmIGRhdGFnZW5lcmFsCi0gICAgcmV0dXJuKGhtc2co Ci0iU3ludGF4OiBTRVQgU0VTU0lPTi1MT0cgeyBCSU5BUlksIERFQlVHLCBURVhULCBUSU1FU1RB TVBFRC1URVhUIH1cblwKLSAgSWYgQklOQVJZLCByZWNvcmQgYWxsIENPTk5FQ1QgY2hhcmFjdGVy cyBpbiBzZXNzaW9uIGxvZy4gIElmIFRFWFQsIHN0cmlwXG5cCi0gIG91dCBDUiwgTlVMLCBhbmQg WE9OL1hPRkYgY2hhcmFjdGVycy4gIERFQlVHIGlzIHRoZSBzYW1lIGFzIEJJTkFSWSBidXRcblwK LSAgYWxzbyBpbmNsdWRlcyBUZWxuZXQgbmVnb3RpYXRpb25zIG9uIFRDUC9JUCBjb25uZWN0aW9u cy4iKSk7Ci0jZWxzZQotI2lmZGVmIFNUUkFUVVMKLSAgICByZXR1cm4oaG1zZygKLSJTeW50YXg6 IFNFVCBTRVNTSU9OLUxPRyB7IEJJTkFSWSwgREVCVUcsIFRFWFQsIFRJTUVTVEFNUEVELVRFWFQg fVxuXAotICBJZiBCSU5BUlksIHJlY29yZCBhbGwgQ09OTkVDVCBjaGFyYWN0ZXJzIGluIHNlc3Np b24gbG9nLiAgSWYgVEVYVCwgc3RyaXBcblwKLSAgb3V0IENSLCBOVUwsIGFuZCBYT04vWE9GRiBj aGFyYWN0ZXJzLiAgREVCVUcgaXMgdGhlIHNhbWUgYXMgQklOQVJZIGJ1dFxuXAotICBhbHNvIGlu Y2x1ZGVzIFRlbG5ldCBuZWdvdGlhdGlvbnMgb24gVENQL0lQIGNvbm5lY3Rpb25zLiIpKTsKLSNl bHNlCi0jaWZkZWYgQU1JR0EKLSAgICByZXR1cm4oaG1zZygKLSJTeW50YXg6IFNFVCBTRVNTSU9O LUxPRyB7IEJJTkFSWSwgREVCVUcsIFRFWFQsIFRJTUVTVEFNUEVELVRFWFQgfVxuXAotICBJZiBC SU5BUlksIHJlY29yZCBhbGwgQ09OTkVDVCBjaGFyYWN0ZXJzIGluIHNlc3Npb24gbG9nLiAgSWYg VEVYVCwgc3RyaXBcblwKLSAgb3V0IENSLCBOVUwsIGFuZCBYT04vWE9GRiBjaGFyYWN0ZXJzLiAg REVCVUcgaXMgdGhlIHNhbWUgYXMgQklOQVJZIGJ1dFxuXAotICBhbHNvIGluY2x1ZGVzIFRlbG5l dCBuZWdvdGlhdGlvbnMgb24gVENQL0lQIGNvbm5lY3Rpb25zLiIpKTsKLSNlbHNlCi0jaWZkZWYg R0VNRE9TCi0gICAgcmV0dXJuKGhtc2coCi0iU3ludGF4OiBTRVQgU0VTU0lPTi1MT0cgeyBCSU5B UlksIERFQlVHLCBURVhULCBUSU1FU1RBTVBFRC1URVhUIH1cblwKLSAgSWYgQklOQVJZLCByZWNv cmQgYWxsIENPTk5FQ1QgY2hhcmFjdGVycyBpbiBzZXNzaW9uIGxvZy4gIElmIFRFWFQsIHN0cmlw XG5cCi0gIG91dCBDUiwgTlVMLCBhbmQgWE9OL1hPRkYgY2hhcmFjdGVycy4gIERFQlVHIGlzIHRo ZSBzYW1lIGFzIEJJTkFSWSBidXRcblwKLSAgYWxzbyBpbmNsdWRlcyBUZWxuZXQgbmVnb3RpYXRp b25zIG9uIFRDUC9JUCBjb25uZWN0aW9ucy4iKSk7Ci0jZWxzZQotI2lmZGVmIE9TMgotICAgIHJl dHVybihobXNnKAotIlN5bnRheDogU0VUIFNFU1NJT04tTE9HIHsgQklOQVJZLCBERUJVRywgVEVY VCwgVElNRVNUQU1QRUQtVEVYVCB9XG5cCi0gIElmIEJJTkFSWSwgcmVjb3JkIGFsbCBDT05ORUNU IGNoYXJhY3RlcnMgaW4gc2Vzc2lvbiBsb2cuICBJZiBURVhULCBzdHJpcFxuXAotICBvdXQgTlVM IGFuZCBYT04vWE9GRiBjaGFyYWN0ZXJzLiAgREVCVUcgaXMgdGhlIHNhbWUgYXMgQklOQVJZIGJ1 dFxuXAotICBhbHNvIGluY2x1ZGVzIFRlbG5ldCBuZWdvdGlhdGlvbnMgb24gVENQL0lQIGNvbm5l Y3Rpb25zLiIpKTsKLSNlbHNlCi0jaWZkZWYgVk1TCi0gICAgcmV0dXJuKGhtc2coCi0iU3ludGF4 OiBTRVQgU0VTU0lPTi1MT0cgeyBCSU5BUlksIERFQlVHLCBURVhULCBUSU1FU1RBTVBFRC1URVhU IH1cblwKLSAgSWYgQklOQVJZLCByZWNvcmQgYWxsIENPTk5FQ1QgY2hhcmFjdGVycyBpbiBzZXNz aW9uIGxvZy4gIElmIFRFWFQsIHN0cmlwXG5cCi0gIG91dCBDUiwgTlVMLCBhbmQgWE9OL1hPRkYg Y2hhcmFjdGVycy4gIERFQlVHIGlzIHRoZSBzYW1lIGFzIEJJTkFSWSBidXRcblwKLSAgYWxzbyBp bmNsdWRlcyBUZWxuZXQgbmVnb3RpYXRpb25zIG9uIFRDUC9JUCBjb25uZWN0aW9ucy4iKSk7Ci0j ZWxzZQotI2lmZGVmIE9TSwotICAgIHJldHVybihobXNnKAotIlN5bnRheDogU0VUIFNFU1NJT04t TE9HIHsgQklOQVJZLCBERUJVRywgVEVYVCwgVElNRVNUQU1QRUQtVEVYVCB9XG5cCi0gIElmIEJJ TkFSWSwgcmVjb3JkIGFsbCBDT05ORUNUIGNoYXJhY3RlcnMgaW4gc2Vzc2lvbiBsb2cuICBJZiBU RVhULCBzdHJpcFxuXAotICBvdXQgTEYsIE5VTCBhbmQgWE9OL1hPRkYgY2hhcmFjdGVycy4iKSk7 Ci0jZWxzZQotI2lmZGVmIE1BQwotICAgIHJldHVybihobXNnKAotIlN5bnRheDogU0VUIFNFU1NJ T04tTE9HIHsgQklOQVJZLCBERUJVRywgVEVYVCwgVElNRVNUQU1QRUQtVEVYVCB9XG5cCi0gIElm IEJJTkFSWSwgcmVjb3JkIGFsbCBDT05ORUNUIGNoYXJhY3RlcnMgaW4gc2Vzc2lvbiBsb2cuICBJ ZiBURVhULCBzdHJpcFxuXAotICBvdXQgTEYsIE5VTCBhbmQgWE9OL1hPRkYgY2hhcmFjdGVycy4i KSk7Ci0jZW5kaWYgLyogTUFDICovCi0jZW5kaWYgLyogT1NLICovCi0jZW5kaWYgLyogT1MyICov Ci0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogR0VNRE9TICovCi0jZW5kaWYgLyogQU1JR0Eg Ki8KLSNlbmRpZiAvKiBTVFJBVFVTICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRp ZiAvKiBPUzJPUlVOSVggKi8KLQotY2FzZSBYWVNQRUU6Ci0jaWZkZWYgT1MyCi0KLSAgICByZXR1 cm4oaG1zZygiU3ludGF4OiBTRVQgU1BFRUQgbnVtYmVyXG5cCi0gIFNwZWVkIGZvciBzZXJpYWwt cG9ydCBjb21tdW5pY2F0aW9uIGRldmljZSBzcGVjaWZpZWQgaW4gbW9zdCByZWNlbnRcblwKLSAg U0VUIFBPUlQgY29tbWFuZCwgaW4gYml0cyBwZXIgc2Vjb25kLiAgVHlwZSBTRVQgU1BFRUQgPyBm b3IgYSBsaXN0IG9mXG5cCi0gIHBvc3NpYmxlIHNwZWVkcy4iKSk7Ci0jZWxzZQotICAgIHJldHVy bihobXNnKCJTeW50YXg6IFNFVCBTUEVFRCBudW1iZXJcblwKLSAgU3BlZWQgZm9yIHNlcmlhbC1w b3J0IGNvbW11bmljYXRpb24gZGV2aWNlIHNwZWNpZmllZCBpbiBtb3N0IHJlY2VudFxuXAotICBT RVQgTElORSBjb21tYW5kLCBpbiBiaXRzIHBlciBzZWNvbmQuICBUeXBlIFNFVCBTUEVFRCA/IGZv ciBhIGxpc3Qgb2ZcblwKLSAgcG9zc2libGUgc3BlZWRzLiAgSGFzIG5vIGVmZmVjdCBvbiBqb2In cyBjb250cm9sbGluZyB0ZXJtaW5hbC4iKSk7Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyog Tk9MT0NBTCAqLwotCi0jaWZuZGVmIE5PWEZFUgotY2FzZSBYWVJFQ1Y6Ci0gICAgcmV0dXJuKGht c2dhKGh4eXJjdikpOwotY2FzZSBYWVNFTkQ6Ci0gICAgcmV0dXJuKGhtc2dhKGh4eXNuZCkpOwot Y2FzZSBYWVJFUFQ6Ci0gICAgcmV0dXJuKGhtc2dhKGh4eXJwdCkpOwotI2VuZGlmIC8qIE5PWEZF UiAqLwotCi0jaWZuZGVmIE5PU0VSVkVSCi1jYXNlIFhZU0VSVjoKLSAgICByZXR1cm4oaG1zZ2Eo aHNldHNydikpOwotI2VuZGlmIC8qIE5PU0VSVkVSICovCi0KLSNpZmRlZiBUTkNPREUKLWNhc2Ug WFlURUw6Ci0gICAgcmV0dXJuKGhtc2dhKGh4eXRlbCkpOwotCi1jYXNlIFhZVEVMT1A6Ci0gICAg cmV0dXJuKGhtc2dhKGh4eXRvcHQpKTsKLSNlbmRpZiAvKiBUTkNPREUgKi8KLQotI2lmbmRlZiBO T1hNSVQKLWNhc2UgWFlYTUlUOgotICAgIHJldHVybihobXNnYShoc2V0eG1pdCkpOwotI2VuZGlm IC8qIE5PWE1JVCAqLwotCi0jaWZuZGVmIE5PQ1NFVFMKLWNhc2UgWFlVTkNTOgotICAgIHJldHVy bihobXNnKCJTeW50YXg6IFNFVCBVTktOT1dOLUNIQVItU0VUIGFjdGlvblxuXAotICBESVNDQVJE IChkZWZhdWx0KSBtZWFucyByZWplY3QgYW55IGFycml2aW5nIGZpbGVzIGVuY29kZWQgaW4gdW5r bm93blxuXAotICBjaGFyYWN0ZXIgc2V0cy4gIEtFRVAgbWVhbnMgdG8gYWNjZXB0IHRoZW0gYW55 d2F5LiIpKTsKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSNpZmRlZiBVTklYCi1jYXNlIFhZV0lM RDoKLSAgICByZXR1cm4oaG1zZ2EoaHh5d2lsZCkpOwotI2VuZGlmIC8qIFVOSVggKi8KLQotI2lm bmRlZiBOT1hGRVIKLWNhc2UgWFlXSU5EOgotICAgIHJldHVybihobXNnYShoeHl3aW5kKSk7Ci1j YXNlIFhZWEZFUjoKLSAgICByZXR1cm4oaG1zZ2EoaHh5eGZlcikpOwotI2VuZGlmIC8qIE5PWEZF UiAqLwotCi0jaWZuZGVmIE5PTE9DQUwKLSNpZmRlZiBPUzJNT1VTRQotY2FzZSBYWU1PVVNFOgot ICAgIHJldHVybihobXNnYShoeHltb3VzZSkpOwotI2VuZGlmIC8qIE9TMk1PVVNFICovCi0jZW5k aWYgLyogTk9MT0NBTCAqLwotCi1jYXNlIFhZQUxSTToKLSAgICByZXR1cm4oaG1zZygiU3ludGF4 OiBTRVQgQUxBUk0gWyB7IHNlY29uZHMsIGhoOm1tOnNzIH0gXVxuXAotICBOdW1iZXIgb2Ygc2Vj b25kcyBmcm9tIG5vdywgb3IgdGltZSBvZiBkYXksIGFmdGVyIHdoaWNoIElGIEFMQVJNXG5cCi0g IHdpbGwgc3VjY2VlZC4gIDAsIG9yIG5vIHRpbWUgYXQgYWxsLCBtZWFucyBubyBhbGFybS4iKSk7 Ci0KLWNhc2UgWFlQUk9UTzoKLSAgICByZXR1cm4oaG1zZ2EoaHh5eHl6KSk7Ci0KLSNpZmRlZiBD S19TUEVFRAotY2FzZSBYWVBSRUZJWDoKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBTRVQgUFJF RklYSU5HIHsgQUxMLCBDQVVUSU9VUywgTUlOSU1BTCB9XG5cCi0gIFwKLVNlbGVjdHMgdGhlIGRl Z3JlZSBvZiBjb250cm9sLWNoYXJhY3RlciBwcmVmaXhpbmcuICBBbHNvIHNlZSBIRUxQIFNFVCBD T05UUk9MLiIKLSkpOwotI2VuZGlmIC8qIENLX1NQRUVEICovCi0KLSNpZmRlZiBPUzIKLWNhc2Ug WFlMT0dJTjoKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBTRVQgTE9HSU4geyBVU0VSSUQsIFBB U1NXT1JELCBQUk9NUFQgfSA8dGV4dD5cblwKLSAgUHJvdmlkZXMgYWNjZXNzIGluZm9ybWF0aW9u IGZvciB1c2UgYnkgbG9naW4gc2NyaXB0cy4iKSk7Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZm5k ZWYgTk9TUEwKLWNhc2UgWFlUTVBESVI6Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogU0VUIFRF TVAtRElSRUNUT1JZIFsgPGRpcmVjdG9yeS1uYW1lPiBdXG5cCi0gIE92ZXJyaWRlcyBhdXRvbWF0 aWMgYXNzaWdubWVudCBvZiBcXHYodG1wZGlyKSB2YXJpYWJsZS4iKSk7Ci0jZW5kaWYgLyogTk9T UEwgKi8KLQotI2lmZGVmIE9TMgotY2FzZSBYWVRJVExFOgotICAgIHJldHVybihobXNnKCJTeW50 YXg6IFNFVCBUSVRMRSA8dGV4dD5cblwKLSAgU2V0cyB3aW5kb3cgdGl0bGUgdG8gdGV4dCBpbnN0 ZWFkIG9mIHVzaW5nIGN1cnJlbnQgaG9zdC9wb3J0IG5hbWUuIikpOwotI2VuZGlmIC8qIE9TMiAq LwotCi0jaWZuZGVmIE5PUFVTSAotI2lmbmRlZiBOT0ZSSUxMUwotY2FzZSBYWUVESVQ6Ci0gICAg cmV0dXJuKGhtc2coIlN5bnRheDogU0VUIEVESVRPUiBwYXRobmFtZSBbIG9wdGlvbnMgXVxuXAot ICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgeW91ciBwcmVmZXJyZWQgZWRpdG9yLCBwbHVzIGFueSBj b21tYW5kLWxpbmVcblwKLSAgb3B0aW9ucy4gIFNIT1cgRURJVE9SIGRpc3BsYXlzIGl0LiIpKTsK LSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotI2VuZGlmIC8qIE5PUFVTSCAqLwotCi0jaWZkZWYgQlJP V1NFUgotY2FzZSBYWUJST1dTRToKLSNpZmRlZiBOVAotICAgIHJldHVybihobXNnKCJTeW50YXg6 IFNFVCBCUk9XU0VSIFsgcGF0aG5hbWUgWyBvcHRpb25zIF0gXVxuXAotICBTcGVjaWZpZXMgdGhl IG5hbWUgb2YgeW91ciBwcmVmZXJyZWQgYnJvd3NlciBwbHVzIGFueSBjb21tYW5kLWxpbmVcblwK LSAgb3B0aW9ucy4gIFNIT1cgQlJPV1NFUiBkaXNwbGF5cyBpdC4gIE9taXQgcGF0aG5hbWUgYW5k IG9wdGlvbnMgdG8gdXNlXG5cCi0gIFNoZWxsRXhlY3V0ZS4iKSk7Ci0jZWxzZQotICAgIHJldHVy bihobXNnKCJTeW50YXg6IFNFVCBCUk9XU0VSIFsgcGF0aG5hbWUgWyBvcHRpb25zIF0gXVxuXAot ICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgeW91ciBwcmVmZXJyZWQgYnJvd3NlciBwbHVzIGFueSBj b21tYW5kLWxpbmVcblwKLSAgb3B0aW9ucy4gIFNIT1cgQlJPV1NFUiBkaXNwbGF5cyBpdC4iKSk7 Ci0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBCUk9XU0VSICovCi0KLSNpZmRlZiBDS19UQVBJ Ci1jYXNlIFhZVEFQSToKLSAgICByZXR1cm4oaG1zZ2EoaHh5dGFwaSkpOwotI2VuZGlmIC8qIENL X1RBUEkgKi8KLQotI2lmZGVmIE5UCi1jYXNlIFhZV0lOOTU6Ci0gICAgcmV0dXJuKGhtc2dhKGh4 eXdpbjk1KSk7Ci0jZW5kaWYgLyogTlQgKi8KLQotI2lmbmRlZiBOT1NQTAotY2FzZSBYWUZVTkM6 Ci0gICAgcmV0dXJuKGhtc2dhKGh4eWZ1bmMpKTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZk ZWYgQ0tfQVVUSEVOVElDQVRJT04KLWNhc2UgWFlBVVRIOgotICAgIHJldHVybihobXNnYShobXh5 YXV0aCkpOwotI2Vsc2UgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSNpZmRlZiBDS19TU0wKLWNh c2UgWFlBVVRIOgotICAgIHJldHVybihobXNnYShobXh5YXV0aCkpOwotI2VuZGlmIC8qIENLX1NT TCAqLwotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0KLSNpZmRlZiBCUk9XU0VSCi1j YXNlIFhZRlRQOgotICAgIHJldHVybihobXNnKCJTeW50YXg6IFNFVCBGVFAgWyBwYXRobmFtZSBb IG9wdGlvbnMgXSBdXG5cCi0gIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB5b3VyIGZ0cCBjbGllbnQs IHBsdXMgYW55IGNvbW1hbmQtbGluZSBvcHRpb25zLlxuXAotICBTSE9XIEZUUCBkaXNwbGF5cyBp dC4iKSk7Ci0jZW5kaWYgLyogQlJPV1NFUiAqLwotCi1jYXNlIFhZU0xFRVA6Ci0gICAgcmV0dXJu KGhtc2coIlN5bnRheDogU0VUIFNMRUVQIENBTkNFTExBVElPTiB7IE9OLCBPRkYgfVxuXAotICBU ZWxscyB3aGV0aGVyIFNMRUVQIChQQVVTRSkgb3IgV0FJVCBjb21tYW5kcyBjYW4gYmUgaW50ZXJy dXB0ZWQgZnJvbSB0aGVcblwKLSAga2V5Ym9hcmQ7IE9OIGJ5IGRlZmF1bHQuIikpOwotCi1jYXNl IFhZQ0Q6Ci0gICAgcmV0dXJuKGhtc2dhKGhteHljZCkpOwotCi1jYXNlIFhZU0VSSUFMOgotICAg IHJldHVybihobXNnKCJTeW50YXg6IFNFVCBTRVJJQUwgZHBzXG5cCi0gIGQgaXMgZGF0YSBsZW5n dGggaW4gYml0cywgNyBvciA4OyBwIGlzIGZpcnN0IGxldHRlciBvZiBwYXJpdHk7IHMgaXMgc3Rv cFxuXAotICBiaXRzLCAxIG9yIDIuICBFeGFtcGxlczogXCJzZXQgc2VyaWFsIDdlMVwiLCBcInNl dCBzZXJpYWwgOG4xXCIuIikpOwotCi0jaWZkZWYgSFdQQVJJVFkKLWNhc2UgWFlTVE9QOgotICAg IHJldHVybihobXNnKCJTeW50YXg6IFNFVCBTVE9QLUJJVFMgeyAxLCAyIH1cblwKLSAgTnVtYmVy IG9mIHN0b3AgYml0cyB0byB1c2Ugb24gU0VUIExJTkUgY29ubmVjdGlvbnMsIG5vcm1hbGx5IDEu IikpOwotI2VuZGlmIC8qIEhXUEFSSVRZICovCi0KLSNpZm5kZWYgTk9MT0NBTAotY2FzZSBYWURJ U0M6Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogU0VUIERJU0NPTk5FQ1QgeyBPTiwgT0ZGIH1c blwKLSAgV2hldGhlciB0byBjbG9zZSBhbmQgcmVsZWFzZSBhIFNFVCBMSU5FIGRldmljZSBhdXRv bWF0aWNhbGx5IHVwb25cblwKLSAgZGlzY29ubmVjdGlvbjsgT0ZGID0ga2VlcCBkZXZpY2Ugb3Bl biAoZGVmYXVsdCk7IE9OID0gY2xvc2UgYW5kIHJlbGVhc2UuIikpOwotI2VuZGlmIC8qIE5PTE9D QUwgKi8KLQotI2lmZGVmIFNUUkVBTUlORwotY2FzZSBYWVNUUkVBTToKLSAgICByZXR1cm4oaG1z ZygiU3ludGF4OiBTRVQgU1RSRUFNSU5HIHsgT04sIE9GRiwgQVVUTyB9XG5cCi0gIFRlbGxzIEtl cm1pdCB3aGV0aGVyIHN0cmVhbWluZyBwcm90b2NvbCBjYW4gYmUgdXNlZCBkdXJpbmcgS2VybWl0 IGZpbGVcblwKLSAgdHJhbnNmZXJzLiAgRGVmYXVsdCBpcyBBVVRPLCBtZWFuaW5nIHVzZSBpdCBp ZiBjb25uZWN0aW9uIGlzIHJlbGlhYmxlLiIpKTsKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLQot Y2FzZSBYWVJFTFk6Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogU0VUIFJFTElBQkxFIHsgT04s IE9GRiwgQVVUTyB9XG5cCi0gIFRlbGxzIEtlcm1pdCB3aGV0aGVyIGl0cyBjb25uZWN0aW9uIGlz IHJlbGlhYmxlLiAgRGVmYXVsdCBpcyBBVVRPLFxuXAotICBtZWFuaW5nIEtlcm1pdCBzaG91bGQg ZmlndXJlIGl0IG91dCBmb3IgaXRzZWxmLiIpKTsKLQotY2FzZSBYWUNMRUFSOgotICAgIHJldHVy bihobXNnKCJTeW50YXg6IFNFVCBDTEVBUi1DSEFOTkVMIHsgT04sIE9GRiwgQVVUTyB9XG5cCi0g IFRlbGxzIEtlcm1pdCB3aGV0aGVyIGl0cyBjb25uZWN0aW9uIGlzIHRyYW5zcGFyZW50IHRvIGFs bCA4LWJpdCBieXRlcy5cblwKLSAgRGVmYXVsdCBpcyBBVVRPLCBtZWFuaW5nIEtlcm1pdCBmaWd1 cmVzIGl0IG91dCBmcm9tIHRoZSBjb25uZWN0aW9uIHR5cGUuXG5cCi0gIFdoZW4gYm90aCBzZW5k ZXIgYW5kIHJlY2VpdmVyIGFncmVlIGNoYW5uZWwgaXMgY2xlYXIsIFNFVCBQUkVGSVhJTkcgTk9O RVxuXAotICBpcyB1c2VkIGF1dG9tYXRpY2FsbHkuIikpOwotCi0jaWZkZWYgVExPRwotY2FzZSBY WVRMT0c6Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogU0VUIFRSQU5TQUNUSU9OLUxPRyB7IEJS SUVGLCBGVFAsIFZFUkJPU0UgfVxuXAotICBTZWxlY3RzIHRoZSB0cmFuc2FjdGlvbi1sb2cgZm9y bWF0OyBCUklFRiBhbmQgRlRQIGhhdmUgb25lIGxpbmUgcGVyIGZpbGU7XG5cCi0gIEZUUCBpcyBj b21wYXRpYmxlIHdpdGggRlRQIGxvZy4gIFZFUkJPU0UgKHRoZSBkZWZhdWx0KSBoYXMgbW9yZSBp bmZvLiIpKTsKLSNlbmRpZiAvKiBUTE9HICovCi0KLWNhc2UgWFlPUFRTOgotICAgIHJldHVybiho bXNnKCJTeW50YXg6IFNFVCBPUFRJT05TIGNvbW1hbmQgWyBzd2l0Y2hlcy4uLiBdXG5cCi0gIEZv ciB1c2Ugd2l0aCBjb21tYW5kcyB0aGF0IGhhdmUgc3dpdGNoZXM7IHNldHMgdGhlIGRlZmF1bHQg c3dpdGNoZXMgZm9yXG5cCi0gIHRoZSBnaXZlbiBjb21tYW5kLiAgVHlwZSBTRVQgT1BUSU9OUyA/ IGZvciBhIGxpc3Qgb2YgYW1lbmFibGUgY29tbWFuZHMuIikpOwotCi0jaWZuZGVmIE5PU1BMCi1j YXNlIFhZVElNRVI6Ci0gICAgcmV0dXJuKGhtc2dhKGhteHl0aW1lcikpOwotI2VuZGlmIC8qIE5P U1BMICovCi0KLSNpZmRlZiBDS1JPT1QKLSAgY2FzZSBYWVJPT1Q6Ci0gICAgcmV0dXJuKGhtc2dh KGhteHhjaHJvb3QpKTsKLSNlbmRpZiAvKiBYWVJPT1QgKi8KLQotI2lmZGVmIEFOWVNTSAotICBj YXNlIFhZU1NIOgotICAgIHJldHVybihobXNnYShobXh5c3NoKSk7Ci0jZW5kaWYgLyogQU5ZQ01E ICovCi0KLSNpZmRlZiBMT0NVUwotICBjYXNlIFhZTE9DVVM6Ci0gICAgcmV0dXJuKGhtc2dhKGht eHlsb2N1cykpOwotI2VuZGlmIC8qIExPQ1VTICovCi0KLSNpZmRlZiBPUzIKLSNpZmRlZiBLVUkK LSAgY2FzZSBYWUdVSToKLSAgICByZXR1cm4oaG1zZ2EoaG14eWd1aSkpOwotI2VuZGlmIC8qIEtV SSAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0gIGNhc2UgWFlNQVRDSDoKLSAgICByZXR1cm4oaG1z Z2EoaG14eW1hdGNoKSk7Ci0KLSNpZm5kZWYgTk9TRVhQCi0gIGNhc2UgWFlTRVhQOgotICAgIHJl dHVybihobXNnYShobXh5c2V4cCkpOwotI2VuZGlmCS8qIE5PU0VYUCAqLwotCi0jaWZuZGVmIE5P U1BMCi0gIGNhc2UgWFlWQVJFVjoKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBTRVQgVkFSSUFC TEUtRVZBTFVBVElPTiB7IFJFQ1VSU0lWRSwgU0lNUExFIH1cblwKLSAgVGVsbHMgS2VybWl0IHdl YXRoZXIgdG8gZXZhbHVhdGUgXFwleCBhbmQgXFwmeFtdIHZhcmlhYmxlcyByZWN1cnNpdmVseVxu XAotICAod2hpY2ggaXMgdGhlIGRlZmF1bHQgZm9yIGhpc3RvcmljYWwgcmVhc29ucykgb3IgYnkg c2ltcGxlIHN0cmluZ1xuXAotICByZXBsYWNlbWVudCwgd2hpY2ggbGV0cyB5b3UgdXNlIHRoZXNl IHZhcmlhYmxlcyBzYWZlbHkgdG8gc3RvcmUgc3RyaW5nc1xuXAotICAoc3VjaCBhcyBXaW5kb3dz IHBhdGhuYW1lcykgdGhhdCBtaWdodCBjb250YWluIGJhY2tzbGFzaGVzLiIpKTsKLSNlbmRpZgkv KiBOT1NQTCAqLwotCi1kZWZhdWx0OgotICAgIHByaW50ZigiTm90IGF2YWlsYWJsZSAtIFwiJXNc IlxuIixjbWRidWYpOwotICAgIHJldHVybigwKTsKLSAgICB9Ci19Ci0KLSNpZm5kZWYgTk9TUEwK LXN0YXRpYyBjaGFyICogaGZzcGxpdFtdID0gewotIkZ1bmN0aW9uIFxcZnNwbGl0KHMxLCZhLHMy LHMzLG4yLG4zKSAtIEFzc2lnbnMgc3RyaW5nIHdvcmRzIHRvIGFuIGFycmF5LiIsCi0iICBzMSA9 IHNvdXJjZSBzdHJpbmcuIiwKLSIgICZhID0gYXJyYXkgZGVzaWduYXRvci4iLAotIiAgczIgPSBv cHRpb25hbCBicmVhayBzZXQuIiwKLSIgIHMzID0gb3B0aW9uYWwgaW5jbHVkZSBzZXQgKG9yIEFM TCwgQ1NWLCBvciBUU1YpLiIsCi0iICBuMiA9IG9wdGlvbmFsIGdyb3VwaW5nIG1hc2suIiwKLSIg IG4zID0gb3B0aW9uYWwgc2VwYXJhdG9yIGZsYWc6IiwKLSIgICAwID0gY29sbGFwc2UgYWRqYWNl bnQgc2VwYXJhdG9yczsiLAotIiAgIDEgPSBkb24ndCBjb2xsYXBzZSBhZGphY2VudCBzZXBhcmF0 b3JzLiIsCi0iICIsCi0iICBcXGZzcGxpdCgpIGJyZWFrcyB0aGUgc3RyaW5nIHMxIGludG8gXCJ3 b3Jkc1wiIGFzIGluZGljYXRlZCBieSB0aGUgb3RoZXIiLAotIiAgcGFyYW1ldGVycywgYXNzaWdu aW5nIHRoZW0gdG8gZ2l2ZW4gYXJyYXksIGlmIGFueS4gIElmIHRoZSBzcGVjaWZpZWQiLAotIiAg YWxyZWFkeSBleGlzdHMsIGl0IGlzIHJlY3ljbGVkOyBpZiBubyBhcnJheSBpcyBzcGVjaWZpZWQs IHRoZSBjb3VudCBpcyIsCi0iICByZXR1cm5lZCBidXQgbm8gYXJyYXkgaXMgY3JlYXRlZC4gIEFs bCBhcmd1bWVudHMgYXJlIG9wdGlvbmFsIiwKLSIgIChcXGZzcGxpdCgpIHdpdGggbm8gYXJndW1l bnRzIHJldHVybnMgMCkuIiwKLSIgIiwKLSIgIFRoZSBCUkVBSyBTRVQgaXMgdGhlIHNldCBvZiBh bGwgY2hhcmFjdGVycyB0aGF0IHNlcGFyYXRlIHdvcmRzLiBUaGUiLAotIiAgZGVmYXVsdCBicmVh ayBzZXQgaXMgYWxsIGNoYXJhY3RlcnMgZXhjZXB0IEFTQ0lJIGxldHRlcnMgYW5kIGRpZ2l0cy4i LAotIiAgQVNDSUkgKEMwKSBjb250cm9sIGNoYXJhY3RlcnMgYXJlIHRyZWF0ZWQgYXMgYnJlYWsg Y2hhcmFjdGVycyBieSBkZWZhdWx0LCIsCi0iICBhcyBhcmUgc3BhY2luZyBhbmQgcHVuY3R1YXRp b24gY2hhcmFjdGVycywgYnJhY2tldHMsIGFuZCBzbyBvbiwgYW5kIiwKLSIgIGFsbCA4LWJpdCBj aGFyYWN0ZXJzLiIsCi0iICIsCi0iICBUaGUgSU5DTFVERSBTRVQgaXMgdGhlIHNldCBvZiBjaGFy YWN0ZXJzIHRoYXQgYXJlIHRvIGJlIHRyZWF0ZWQgYXMgIiwKLSIgIHBhcnRzIG9mIHdvcmRzIGV2 ZW4gdGhvdWdoIHRoZXkgbm9ybWFsbHkgd291bGQgYmUgc2VwYXJhdG9ycy4gIFRoZSIsCi0iICBk ZWZhdWx0IGluY2x1ZGUgc2V0IGlzIGVtcHR5LiAgVGhyZWUgc3BlY2lhbCBzeW1ib2xpYyBpbmNs dWRlIHNldHMgYXJlIiwKLSIgIGFsc28gYWxsb3dlZDoiLAotIiAiLAotIiAgICBBTEwgKG1lYW5p bmcgaW5jbHVkZSBhbGwgYnl0ZXMgdGhhdCBhcmUgbm90IGluIHRoZSBicmVhayBzZXQpIiwKLSIg ICAgQ1NWIChzcGVjaWFsIHRyZWF0bWVudCBmb3IgQ29tbWEtU2VwYXJhdGVkLVZhbHVlIHJlY29y ZHMpIiwKLSIgICAgVFNWIChzcGVjaWFsIHRyZWF0bWVudCBmb3IgVGFiLVNlcGFyYXRlZC1WYWx1 ZSByZWNvcmRzKSIsCi0iICIsCi0iICBGb3Igb3BlcmF0aW5nIG9uIDgtYml0IGNoYXJhY3RlciBz ZXRzLCB0aGUgaW5jbHVkZSBzZXQgc2hvdWxkIGJlIEFMTC4iLAotIiAiLAotIiAgSWYgdGhlIGdy b3VwaW5nIG1hc2sgaXMgZ2l2ZW4gYW5kIGlzIG5vbnplcm8sIHdvcmRzIGNhbiBiZSBncm91cGVk IGJ5IiwKLSIgIHF1b3RlcyBvciBicmFja2V0cyBzZWxlY3RlZCBieSB0aGUgc3VtIG9mIHRoZSBm b2xsb3dpbmc6IiwKLSIgIiwKLSIgICAgIDEgPSBkb3VibGVxdW90ZXM6ICAgIFwiYSBiIGNcIiIs Ci0iICAgICAyID0gYnJhY2VzOiAgICAgICAgICB7YSBiIGN9IiwKLSIgICAgIDQgPSBhcG9zdHJv cGhlczogICAgICdhIGIgYyciLAotIiAgICAgOCA9IHBhcmVudGhlc2VzOiAgICAgKGEgYiBjKSIs Ci0iICAgIDE2ID0gc3F1YXJlIGJyYWNrZXRzOiBbYSBiIGNdIiwKLSIgICAgMzIgPSBhbmdsZSBi cmFja2V0czogIDxhIGIgYz4iLAotIiAiLAotIiAgTmVzdGluZyBpcyBwb3NzaWJsZSB3aXRoIHt9 KClbXTw+IGJ1dCBub3Qgd2l0aCBxdW90ZXMgb3IgYXBvc3Ryb3BoZXMuIiwKLSIgIiwKLSJSZXR1 cm5zIGludGVnZXI6IiwKLSIgIE51bWJlciBvZiB3b3JkcyBpbiBzb3VyY2Ugc3RyaW5nLiIsCi0i ICIsCi0iQWxzbyBzZWU6IiwKLSIgIEhFTFAgRlVOQ1RJT04gV09SRCIsCi0iIgotfTsKLQotLyog IEQgTyBIIEYgVSBOIEMgIC0tICBHaXZlIGhlbHAgZm9yIGEgZnVuY3Rpb24gICovCi0KLWludAot ZG9oZnVuYyh4eCkgaW50IHh4OyB7Ci0gICAgLyogaW50IHg7ICovCi0gICAgaWYgKHh4ID09IC0z KSB7Ci0gICAgICAgIHByaW50ZigiXG4gVHlwZSBTSE9XIEZVTkNUSU9OUyB0byBzZWUgYSBsaXN0 IG9mIGF2YWlsYWJsZSBmdW5jdGlvbnMuXG4iCi0gICAgICAgICAgICAgICApOwotICAgICAgICBw cmludGYoCi0gICAgICAgICIgVHlwZSBIRUxQIEZVTkNUSU9OIDxuYW1lPiBmb3IgaGVscCBvbiBh IHBhcnRpY3VsYXIgZnVuY3Rpb24uXG4iKTsKLSAgICAgICAgcHJpbnRmKAotICAgICAgICAiIEZv ciBmdW5jdGlvbiBzZXR0aW5ncyB1c2UgSEVMUCBTRVQgRlVOQ1RJT04gYW5kIFNIT1cgU0NSSVBU Uy5cblxuIik7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0gICAgaWYgKHh4ID09IEZOX1dP UkQpICAgICAgICAgICAgICAgICAgLyogTG9uZyBoZWxwIG1lc3NhZ2UgKi8KLSAgICAgICAgcmV0 dXJuKGhtc2dhKGhtZndvcmQpKTsKLQotICAgIHByaW50ZigiXG4iKTsKLSAgICBzd2l0Y2ggKHh4 KSB7Ci0gICAgICBjYXNlIEZOX0lORDogICAgICAgICAgICAgICAgICAgICAgLyogSW5kZXggKG9m IHN0cmluZyAxIGluIHN0cmluZyAyKSAqLwotICAgICAgY2FzZSBGTl9SSVg6ICAgICAgICAgICAg ICAgICAgICAgIC8qIFJpbmRleCAoaW5kZXggZnJvbSByaWdodCkgKi8KLSAgICAgICAgcHJpbnRm KCJcXGYlc2luZGV4KHMxLHMyLG4xLG4yKVxuXAotICBzMSA9IHN0cmluZyB0byBsb29rIGZvci5c blwKLSAgczIgPSBzdHJpbmcgdG8gbG9vayBpbi5cblwKLSAgbjEgPSBvcHRpb25hbCAxLWJhc2Vk IHN0YXJ0aW5nIHBvc2l0aW9uLCBkZWZhdWx0ID0gMS5cblwKLSAgbjIgPSBvcHRpb25hbCBkZXNp cmVkIG9jY3VycmVuY2UgbnVtYmVyLCBkZWZhdWx0ID0gMS5cbiIsCi0gICAgICAgICAgICAgICB4 eCA9PSBGTl9SSVggPyAiciIgOiAiIgotICAgICAgICAgICAgICAgKTsKLSAgICAgICAgcHJpbnRm KCJSZXR1cm5zIGludGVnZXI6XG5cCi0gIDEtYmFzZWQgcG9zaXRpb24gb2YgJXNtb3N0IG9jY3Vy cmVuY2Ugb2YgczEgaW4gczIsIGlnbm9yaW5nIHRoZSAlc21vc3RcblwKLSAgKG4xLTEpIGNoYXJh Y3RlcnMgaW4gczI7IHJldHVybnMgMCBpZiBzMSBub3QgZm91bmQgaW4gczIuXG4iLAotICAgICAg ICAgICAgICAgeHggPT0gRk5fSU5EID8gImxlZnQiIDogInJpZ2h0IiwKLSAgICAgICAgICAgICAg IHh4ID09IEZOX0lORCA/ICJsZWZ0IiA6ICJyaWdodCIKLSAgICAgICAgKTsKLSAgICAgICAgYnJl YWs7Ci0gICAgICBjYXNlIEZOX0NPVU5UOgkJCS8qIENvdW50IG9jY3VycmVuY2VzIG9mIHMxIGlu IHMyICovCi0JcHJpbnRmKCJcXGZjb3VudChzMSxzMixuMSlcblwKLSAgczEgPSBzdHJpbmcgb3Ig Y2hhcmFjdGVyIHRvIGxvb2sgZm9yLlxuXAotICBzMiA9IHN0cmluZyB0byBsb29rIGluLlxuXAot ICBuMSA9IG9wdGlvbmFsIDEtYmFzZWQgc3RhcnRpbmcgcG9zaXRpb24sIGRlZmF1bHQgPSAxLlxu Iik7Ci0JcHJpbnRmKCJSZXR1cm5zIGludGVnZXI6XG5cCi0gIE51bWJlciBvZiBvY2N1cnJlbmNl cyBvZiBzMSBpbiBzMiwgMCBvciBtb3JlLlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBj YXNlIEZOX1NFQVJDSDogICAgICAgICAgICAgICAgICAgLyogU2VhcmNoIGZvciBwYXR0ZXJuICov Ci0gICAgICBjYXNlIEZOX1JTRUFSQ0g6ICAgICAgICAgICAgICAgICAgLyogU2VhcmNoIGZvciBw YXR0ZXJuIGZyb20gcmlnaHQgKi8KLSAgICAgICAgcHJpbnRmKCJcXGYlc3NlYXJjaChzMSxzMixu MSxuMilcblwKLSAgczEgPSBwYXR0ZXJuIHRvIGxvb2sgZm9yLlxuXAotICBzMiA9IHN0cmluZyB0 byBsb29rIGluLlxuXAotICBuMSA9IG9wdGlvbmFsIDEtYmFzZWQgb2Zmc2V0LCBkZWZhdWx0ID0g MS5cblwKLSAgbjIgPSBvcHRpb25hbCBkZXNpcmVkIG9jY3VycmVuY2Ugb2YgbWF0Y2gsIGRlZmF1 bHQgPSAxLlxuIiwKLSAgICAgICAgICAgICAgIHh4ID09IEZOX1JTRUFSQ0ggPyAiciIgOiAiIgot ICAgICAgICAgICAgICAgKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIGludGVnZXI6XG5cCi0g IDEtYmFzZWQgcG9zaXRpb24gb2YgJXNtb3N0IG1hdGNoIGZvciBzMSBpbiBzMiwgaWdub3Jpbmcg dGhlICVzbW9zdFxuXAotICAobjEtMSkgY2hhcmFjdGVycyBpbiBzMjsgcmV0dXJucyAwIGlmIG5v IG1hdGNoLlxuIiwKLSAgICAgICAgICAgICAgIHh4ID09IEZOX1NFQVJDSCA/ICJsZWZ0IiA6ICJy aWdodCIsCi0gICAgICAgICAgICAgICB4eCA9PSBGTl9TRUFSQ0ggPyAibGVmdCIgOiAicmlnaHQi Ci0gICAgICAgICk7Ci0gICAgICAgIHByaW50ZigiICBTZWUgSEVMUCBXSUxEQ0FSRFMgZm9yIGlu Zm8gYWJvdXQgcGF0dGVybnMuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZOX0xF TjogICAgICAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIChvZiBzdHJpbmcpICovCi0gICAgICAg IHByaW50ZigiXFxmbGVuZ3RoKHMxKVxuXAotICBzMSA9IHN0cmluZy5cbiIpOwotICAgICAgICBw cmludGYoIlJldHVybnMgaW50ZWdlcjpcblwKLSAgTGVuZ3RoIG9mIHN0cmluZyBzMS5cbiIpOwot ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRk5fTElUOiAgICAgICAgICAgICAgICAgICAgICAv KiBMaXRlcmFsIChkb24ndCBleHBhbmQgdGhlIHN0cmluZykgKi8KLSAgICAgICAgcHJpbnRmKCJc XGZsaXRlcmFsKHMxKVxuXAotICBzMSA9IHN0cmluZy5cbiIpOwotICAgICAgICBwcmludGYoIlJl dHVybnMgc3RyaW5nOlxuXAotICBzMSBsaXRlcmFsbHkgd2l0aG91dCBldmFsdWF0aW9uLlxuIik7 Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGTl9MT1c6ICAgICAgICAgICAgICAgICAgICAg IC8qIExvd2VyIChjb252ZXJ0IHRvIGxvd2VyY2FzZSkgKi8KLSAgICAgICAgcHJpbnRmKCJcXGZs b3dlcihzMSlcblwKLSAgczEgPSBzdHJpbmcuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5z IHN0cmluZzpcblwKLSAgczEgd2l0aCB1cHBlcmNhc2UgbGV0dGVycyBjb252ZXJ0ZWQgdG8gbG93 ZXJjYXNlLlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGTl9NQVg6ICAgICAgICAg ICAgICAgICAgICAgIC8qIE1heCAobWF4aW11bSkgKi8KLSAgICAgICAgcHJpbnRmKCJcXGZtYXhp bXVtKG4xLG4yKVxuXAotICBuMSA9IGludGVnZXIuXG5cCi0gIG4yID0gaW50ZWdlci5cbiIpOwot ICAgICAgICBwcmludGYoIlJldHVybnMgaW50ZWdlcjpcblwKLSAgVGhlIGdyZWF0ZXIgb2YgbjEg YW5kIG4yLlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGTl9NSU46ICAgICAgICAg ICAgICAgICAgICAgIC8qIE1pbiAobWluaW11bSkgKi8KLSAgICAgICAgcHJpbnRmKCJcXGZtaW5p bXVtKG4xLG4yKVxuXAotICBuMSA9IGludGVnZXIuXG5cCi0gIG4yID0gaW50ZWdlci5cbiIpOwot ICAgICAgICBwcmludGYoIlJldHVybnMgaW50ZWdlcjpcblwKLSAgVGhlIGxlc3NlciBvZiBuMSBh bmQgbjIuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZOX01PRDogICAgICAgICAg ICAgICAgICAgICAgLyogTW9kIChtb2R1bHVzKSAqLwotICAgICAgICBwcmludGYoIlxcZm1vZHVs dXMobjEsbjIpXG5cCi0gIG4xID0gaW50ZWdlci5cblwKLSAgbjIgPSBpbnRlZ2VyLlxuIik7Ci0g ICAgICAgIHByaW50ZigiUmV0dXJucyBpbnRlZ2VyOlxuXAotICBUaGUgcmVtYWluZGVyIGFmdGVy IGRpdmlkaW5nIG4xIGJ5IG4yLlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGTl9F VkE6ICAgICAgICAgICAgICAgICAgICAgIC8qIEV2YWwgKGV2YWx1YXRlIGFyaXRoIGV4cHJlc3Np b24pICovCi0gICAgICAgIHByaW50ZigiXFxmZXZhbHVhdGUoZSlcblwKLSAgZSA9IGFyaXRobWV0 aWMgZXhwcmVzc2lvbi5cbiIpOwotICAgICAgICBwcmludGYoIlJldHVybnMgaW50ZWdlcjpcblwK LSAgVGhlIHJlc3VsdCBvZiBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9uLlxuIik7Ci0gICAgICAg IGJyZWFrOwotICAgICAgY2FzZSBGTl9TVUI6ICAgICAgICAgICAgICAgICAgICAgIC8qIFN1YnN0 ciAoc3Vic3RyaW5nKSAqLwotICAgICAgICBwcmludGYoIlxcZnN1YnN0cmluZyhzMSxuMSxuMilc blwKLSAgczEgPSBzdHJpbmcuXG5cCi0gIG4xID0gaW50ZWdlciwgMS1iYXNlZCBzdGFydGluZyBw b3NpdGlvbiwgZGVmYXVsdCA9IDEuXG5cCi0gIG4yID0gaW50ZWdlciwgbGVuZ3RoLCBkZWZhdWx0 ID0gbGVuZ3RoKHMxKSAtIG4xICsgMS5cbiIpOwotICAgICAgICBwcmludGYoIlJldHVybnMgc3Ry aW5nOlxuXAotICBTdWJzdHJpbmcgb2YgczEgc3RhcnRpbmcgYXQgbjEsIGxlbmd0aCBuMi5cbiIp OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRk5fVVBQOiAgICAgICAgICAgICAgICAgICAg ICAvKiBVcHBlciAoY29udmVydCB0byB1cHBlcmNhc2UpICovCi0gICAgICAgIHByaW50ZigiXFxm dXBwZXIoczEpXG5cCi0gIHMxID0gc3RyaW5nLlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJu cyBzdHJpbmc6XG5cCi0gIHMxIHdpdGggbG93ZXJjYXNlIGxldHRlcnMgY29udmVydGVkIHRvIHVw cGVyY2FzZS5cbiIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRk5fUkVWOiAgICAgICAg ICAgICAgICAgICAgICAvKiBSZXZlcnNlIChhIHN0cmluZykgKi8KLSAgICAgICAgcHJpbnRmKCJc XGZyZXZlcnNlKHMxKVxuXAotICBzMSA9IHN0cmluZy5cbiIpOwotICAgICAgICBwcmludGYoIlJl dHVybnMgc3RyaW5nOlxuXAotICBzMSB3aXRoIGl0cyBjaGFyYWN0ZXJzIGluIHJldmVyc2Ugb3Jk ZXIuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZOX1JFUDogICAgICAgICAgICAg ICAgICAgICAgLyogUmVwZWF0IChhIHN0cmluZykgKi8KLSAgICAgICAgcHJpbnRmKCJcXGZyZXBl YXQoczEsbjEpXG5cCi0gIHMxID0gc3RyaW5nLlxuXAotICBuMSA9IGludGVnZXIuXG4iKTsKLSAg ICAgICAgcHJpbnRmKCJSZXR1cm5zIHN0cmluZzpcblwKLSAgczEgcmVwZWF0ZWQgbjEgdGltZXMu XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZOX0VYRTogICAgICAgICAgICAgICAg ICAgICAgLyogRXhlY3V0ZSAoYSBtYWNybykgKi8KLSAgICAgICAgcHJpbnRmKCJcXGZleGVjdXRl KG0xLGExLGEyLGEzLC4uLilcblwKLSAgbTEgPSBtYWNybyBuYW1lLlxuXAotICBhMSA9IGFyZ3Vt ZW50IDEuXG5cCi0gIGEyID0gYXJndW1lbnQgMiwgZXRjXG4iKTsKLSAgICAgICAgcHJpbnRmKCJS ZXR1cm5zIHN0cmluZzpcblwKLSAgVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgbWFjcm8gKEhFTFAg UkVUVVJOIGZvciBmdXJ0aGVyIGluZm8pLlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz ZSBGTl9MUEE6ICAgICAgICAgICAgICAgICAgICAgIC8qIExQQUQgKGxlZnQgcGFkKSAqLwotICAg ICAgY2FzZSBGTl9SUEE6ICAgICAgICAgICAgICAgICAgICAgIC8qIFJQQUQgKHJpZ2h0IHBhZCkg Ki8KLSAgICAgICAgcHJpbnRmKCJcXGYlY3BhZChzMSxuMSxjMSlcblwKLSAgczEgPSBzdHJpbmcu XG5cCi0gIG4xID0gaW50ZWdlci5cblwKLSAgYzEgPSBjaGFyYWN0ZXIsIGRlZmF1bHQgPSBzcGFj ZS5cbiIsCi0gICAgICAgICAgICAgICAgeHggPT0gRk5fTFBBID8gJ2wnIDogJ3InKTsKLSAgICAg ICAgcHJpbnRmKCJSZXR1cm5zIHN0cmluZzpcblwKLSAgczEgJXMtcGFkZGVkIHdpdGggY2hhcmFj dGVyIGMxIHRvIGxlbmd0aCBuMS5cbiIsCi0gICAgICAgICAgICAgICB4eCA9PSBGTl9MUEEgPyAi bGVmdCIgOiAicmlnaHQiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZOX0RFRjogICAg ICAgICAgICAgICAgICAgICAgLyogRGVmaW5pdGlvbiBvZiBhIG1hY3JvLCB1bmV4cGFuZGVkICov Ci0gICAgICAgIHByaW50ZigiXFxmZGVmaW5pdGlvbihtMSlcblwKLSAgbTEgPSBtYWNybyBuYW1l LlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBzdHJpbmc6XG5cCi0gIExpdGVyYWwgZGVm aW5pdGlvbiBvZiBtYWNybyBtMS5cbiIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRk5f Q09OOiAgICAgICAgICAgICAgICAgICAgICAvKiBDb250ZW50cyBvZiBhIHZhcmlhYmxlLCBkaXR0 byAqLwotICAgICAgICBwcmludGYoIlxcZmNvbnRlbnRzKHYxKVxuXAotICB2MSA9IHZhcmlhYmxl IG5hbWUgc3VjaCBhcyBcXCUlYS5cbiIpOwotICAgICAgICBwcmludGYoIlJldHVybnMgc3RyaW5n OlxuXAotICBMaXRlcmFsIGRlZmluaXRpb24gb2YgdmFyaWFibGUgdjEsIGV2YWx1YXRlZCBvbmUg bGV2ZWwgb25seS5cbiIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRk5fRklMOiAgICAg ICAgICAgICAgICAgICAgICAvKiBOZXh0IGZpbGUgKi8KLSAgICAgICAgcHJpbnRmKCJcXGZuZXh0 ZmlsZSgpXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIHN0cmluZzpcblwKLSAgTmFtZSBv ZiBuZXh0IGZpbGUgZnJvbSBsaXN0IGNyZWF0ZWQgYnkgbW9zdCByZWNlbnQgXFxmW3JdZmlsZXMo KSBvclxuXAotICBcXGZbcl1kaXIoKWludm9jYXRpb24sIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0 aGVyZSBhcmUgbm8gbW9yZSBmaWxlcyBpblxuXAotICB0aGUgbGlzdC5cbiIpOwotICAgICAgICBi cmVhazsKLSAgICAgIGNhc2UgRk5fRkM6ICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIGNv dW50ICovCi0gICAgICAgIHByaW50ZigiXFxmZmlsZXMoZjFbLCZhXSkgLSBGaWxlIGxpc3QuXG5c Ci0gIGYxID0gZmlsZSBzcGVjaWZpY2F0aW9uLCBwb3NzaWJseSBjb250YWluaW5nIHdpbGRjYXJk cy5cblwKLSAgJmEgPSBvcHRpb25hbCBuYW1lIG9mIGFycmF5IHRvIGFzc2lnbiBmaWxlIGxpc3Qg dG8uXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIGludGVnZXI6XG5cCi0gIFRoZSBudW1i ZXIgb2YgcmVndWxhciBmaWxlcyB0aGF0IG1hdGNoIGYxLiAgVXNlIHdpdGggXFxmbmV4dGZpbGUo KS5cbiIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRk5fQ0hSOiAgICAgICAgICAgICAg ICAgICAgICAvKiBDaGFyYWN0ZXIgKGxpa2UgQkFTSUMgQ0hSJCgpKSAqLwotICAgICAgICBwcmlu dGYoIlxcZmNoYXJhY3RlcihuMSlcblwKLSAgbjEgPSBpbnRlZ2VyLlxuIik7Ci0gICAgICAgIHBy aW50ZigiUmV0dXJucyBjaGFyYWN0ZXI6XG5cCi0gIFRoZSBjaGFyYWN0ZXIgd2hvc2UgbnVtZXJp YyBjb2RlIGlzIG4xLlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGTl9SSUc6ICAg ICAgICAgICAgICAgICAgICAgIC8qIFJpZ2h0IChsaWtlIEJBU0lDIFJJR0hUJCgpKSAqLwotICAg ICAgICBwcmludGYoIlxcZnJpZ2h0KHMxLG4xKVxuXAotICBzMSA9IHN0cmluZy5cblwKLSAgbjEg PSBpbnRlZ2VyLCBkZWZhdWx0ID0gbGVuZ3RoKHMxKS5cbiIpOwotICAgICAgICBwcmludGYoIlJl dHVybnMgc3RyaW5nOlxuXAotICBUaGUgcmlnaHRtb3N0IG4xIGNoYXJhY3RlcnMgb2Ygc3RyaW5n IHMxLlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGTl9MRUY6ICAgICAgICAgICAg ICAgICAgICAgIC8qIExlZnQgKGxpa2UgQkFTSUMgTEVGVCQoKSkgKi8KLSAgICAgICAgcHJpbnRm KCJcXGZsZWZ0KHMxLG4xKVxuXAotICBzMSA9IHN0cmluZy5cblwKLSAgbjEgPSBpbnRlZ2VyLCBk ZWZhdWx0ID0gbGVuZ3RoKHMxKS5cbiIpOwotICAgICAgICBwcmludGYoIlJldHVybnMgc3RyaW5n OlxuXAotICBUaGUgbGVmdG1vc3QgbjEgY2hhcmFjdGVycyBvZiBzdHJpbmcgczEuXG4iKTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZOX0NPRDogICAgICAgICAgICAgICAgICAgICAgLyog Q29kZSB2YWx1ZSBvZiBjaGFyYWN0ZXIgKi8KLSAgICAgICAgcHJpbnRmKCJcXGZjb2RlKHMxKVxu XAotICBjMSA9IGNoYXJhY3Rlci5cbiIpOwotICAgICAgICBwcmludGYoIlJldHVybnMgaW50ZWdl cjpcblwKLSAgVGhlIG51bWVyaWMgY29kZSBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHN0cmlu ZyBzMSwgb3IgMCBpZiBzMSBlbXB0eS5cbiIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug Rk5fUlBMOiAgICAgICAgICAgICAgICAgICAgICAvKiBSZXBsYWNlICovCi0gICAgICAgIHByaW50 ZigiXFxmcmVwbGFjZShzMSxzMixzM1ssbjFdKVxuXAotICBzMSA9IG9yaWdpbmFsIHN0cmluZy5c blwKLSAgczIgPSBtYXRjaCBzdHJpbmcuXG5cCi0gIHMzID0gcmVwbGFjZW1lbnQgc3RyaW5nLlxu XAotICBuMSA9IG9jY3VycmVuY2UuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIHN0cmlu ZzpcblwKLSAgczEgd2l0aCBvY2N1cnJlbmNlIG51bWJlciBuMSBvZiBzMiByZXBsYWNlZCBieSBz My5cblwKLSAgSWYgbjEgPSAwIG9yIG9taXR0ZWQsIGFsbCBvY2N1cnJlbmNlcyBhcmUgcmVwbGFj ZWQuXG5cCi0gIElmIG4xIDwgMCwgb2NjdXJyZW5jZXMgYXJlIGNvdW50ZWQgZnJvbSB0aGUgcmln aHQuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRk5fRkQ6ICAgICAgICAgICAg ICAgICAgICAgICAvKiBGaWxlIGRhdGUgKi8KLSAgICAgICAgcHJpbnRmKCJcXGZkYXRlKGYxKVxu XAotICBmMSA9IGZpbGVuYW1lLlxuIik7Ci0jaWZkZWYgVk1TCi0gICAgICAgIHByaW50ZigiUmV0 dXJucyBzdHJpbmc6XG5cCi0gIENyZWF0aW9uIGRhdGUgb2YgZmlsZSBmMSwgZm9ybWF0OiB5eXl5 bW1kZCBoaDptbTpzcy5cbiIpOwotI2Vsc2UKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIHN0cmlu ZzpcblwKLSAgTW9kaWZpY2F0aW9uIGRhdGUgb2YgZmlsZSBmMSwgZm9ybWF0OiB5eXl5bW1kZCBo aDptbTpzcy5cbiIpOwotI2VuZGlmIC8qIFZNUyAqLwotICAgICAgICBicmVhazsKLSAgICAgIGNh c2UgRk5fRlM6ICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIHNpemUgKi8KLSAgICAgICAg cHJpbnRmKCJcXGZzaXplKGYxKVxuXAotICBmMSA9IGZpbGVuYW1lLlxuIik7Ci0gICAgICAgIHBy aW50ZigiUmV0dXJucyBpbnRlZ2VyOlxuXAotICBTaXplIG9mIGZpbGUgZjEuXG4iKTsKLSAgICAg ICAgYnJlYWs7Ci0gICAgICBjYXNlIEZOX1ZFUjogICAgICAgICAgICAgICAgICAgICAgLyogVmVy aWZ5ICovCi0gICAgICAgIHByaW50ZigiXFxmdmVyaWZ5KHMxLHMyLG4xKVxuXAotICBzMSA9IHN0 cmluZyBvZiBjaGFyYWN0ZXJzIHRvIGxvb2sgZm9yLlxuXAotICBzMiA9IHN0cmluZyB0byBsb29r IGluLlxuXAotICBuMSA9IHN0YXJ0aW5nIHBvc2l0aW9uIGluIHMyLlxuIik7Ci0gICAgICAgIHBy aW50ZigiUmV0dXJucyBpbnRlZ2VyOlxuXAotICAxLWJhc2VkIHBvc2l0aW9uIG9mIGZpcnN0IGNo YXJhY3RlciBpbiBzMiB0aGF0IGlzIG5vdCBhbHNvIGluIHMxLFxuXAotICBvciAtMSBpZiBzMSBp cyBlbXB0eSwgb3IgMCBpZiBhbGwgY2hhcmFjdGVycyBpbiBzMiBhcmUgYWxzbyBpbiBzMS5cbiIp OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRk5fSVBBOiAgICAgICAgICAgICAgICAgICAg ICAvKiBGaW5kIGFuZCByZXR1cm4gSVAgYWRkcmVzcyAqLwotICAgICAgICBwcmludGYoIlxcZmlw YWRkcmVzcyhzMSxuMSlcblwKLSAgczEgPSBzdHJpbmcuXG5cCi0gIG4xID0gMS1iYXNlZCBpbnRl Z2VyIHN0YXJ0aW5nIHBvc2l0aW9uLCBkZWZhdWx0ID0gMS5cbiIpOwotICAgICAgICBwcmludGYo IlJldHVybnMgc3RyaW5nOlxuXAotICBGaXJzdCBJUCBhZGRyZXNzIGluIHMxLCBzY2FubmluZyBm cm9tIGxlZnQgc3RhcnRpbmcgYXQgcG9zaXRpb24gbjEuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0g ICAgICBjYXNlIEZOX0hFWDogICAgICAgICAgICAgICAgICAgICAgLyogSGV4aWZ5ICovCi0gICAg ICAgIHByaW50ZigiXFxmaGV4aWZ5KHMxKVxuXAotICBzMSA9IHN0cmluZy5cbiIpOwotICAgICAg ICBwcmludGYoIlJldHVybnMgc3RyaW5nOlxuXAotICBUaGUgaGV4YWRlY2ltYWwgcmVwcmVzZW50 YXRpb24gb2YgczEuICBBbHNvIHNlZSBcXGZuMmhleCgpLlxuIik7Ci0gICAgICAgIGJyZWFrOwot ICAgICAgY2FzZSBGTl9VTkg6ICAgICAgICAgICAgICAgICAgICAgIC8qIFVuaGV4aWZ5ICovCi0g ICAgICAgIHByaW50ZigiXFxmdW5oZXhpZnkoaDEpXG5cCi0gIGgxID0gSGV4YWRlY2ltYWwgc3Ry aW5nLlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBzdHJpbmc6XG5cCi0gIFRoZSByZXN1 bHQgb2YgdW5oZXhpZnlpbmcgczEsIG9yIG5vdGhpbmcgaWYgczEgaXMgbm90IGEgaGV4IHN0cmlu Zy5cbiIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRk5fVU5UQUI6CQkJLyogVW50YWJp ZnkgKi8KLSAgICAgICAgcHJpbnRmKCJcXGZ1bnRhYmlmeShzMSlcblwKLSAgczEgPSBzdHJpbmcu XG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIHN0cmluZzpcblwKLSAgVGhlIHJlc3VsdCBv ZiBjb252ZXJ0aW5nIHRhYnMgaW4gczEgdG8gc3BhY2VzIGFzc3VtaW5nIHRhYiBzdG9wcyBldmVy eVxuXAotICA4IHNwYWNlcy5cbiIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRk5fQlJL OiAgICAgICAgICAgICAgICAgICAgICAvKiBCcmVhayAqLwotICAgICAgY2FzZSBGTl9TUE46ICAg ICAgICAgICAgICAgICAgICAgIC8qIFNwYW4gKi8KLSAgICAgICAgcHJpbnRmKCJcXGYlcyhzMSxz MixuMSlcblwKLSAgczEgPSBzdHJpbmcgdG8gbG9vayBpbi5cblwKLSAgczIgPSBzdHJpbmcgb2Yg Y2hhcmFjdGVycyB0byBsb29rIGZvci5cblwKLSAgbjEgPSAxLWJhc2VkIGludGVnZXIgc3RhcnRp bmcgcG9zaXRpb24sIGRlZmF1bHQgPSAxLlxuIiwKLSAgICAgICAgICAgICAgeHggPT0gRk5fQlJL ID8gImJyZWFrIiA6ICJzcGFuIgotICAgICAgICAgICAgICApOwotICAgICAgICBwcmludGYoIlJl dHVybnMgc3RyaW5nOlxuXAotICBzMSB1cCB0byB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhbnkg Y2hhcmFjdGVyJXNhbHNvIGluIHMyLFxuXAotICBzY2FubmluZyBmcm9tIHRoZSBsZWZ0IHN0YXJ0 aW5nIGF0IHBvc2l0aW9uIG4xLlxuIiwKLSAgICAgICAgICAgICAgIHh4ID09IEZOX1NQTiA/ICIg bm90ICIgOiAiICIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRk5fVFJNOiAgICAgICAg ICAgICAgICAgICAgICAvKiBUcmltICovCi0gICAgICBjYXNlIEZOX0xUUjogICAgICAgICAgICAg ICAgICAgICAgLyogTGVmdC1UcmltICovCi0gICAgICAgIHByaW50ZigiXFxmJXMoczEsczIpXG5c Ci0gIHMxID0gc3RyaW5nIHRvIGxvb2sgaW4uXG5cCi0gIHMyID0gc3RyaW5nIG9mIGNoYXJhY3Rl cnMgdG8gbG9vayBmb3IsIGRlZmF1bHQgPSBibGFua3MgYW5kIHRhYnMuXG4iLAotICAgICAgICAg ICAgICAgeHggPT0gRk5fVFJNID8gInRyaW0iIDogImx0cmltIik7Ci0gICAgICAgIHByaW50Zigi UmV0dXJucyBzdHJpbmc6XG5cCi0gIHMxIHdpdGggYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgYWxz byBpbiBzMiB0cmltbWVkIGZyb20gdGhlICVzLlxuLiIsCi0gICAgICAgICAgICAgICB4eCA9PSBG Tl9UUk0gPyAicmlnaHQiIDogImxlZnQiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZO X0NBUDogICAgICAgICAgICAgICAgICAgICAgLyogQ2FwaXRhbGl6ZSAqLwotICAgICAgICBwcmlu dGYoIlxcZmNhcGl0YWxpemUoczEpXG5cCi0gIHMxID0gc3RyaW5nLlxuIik7Ci0gICAgICAgIHBy aW50ZigiUmV0dXJucyBzdHJpbmc6XG5cCi0gIHMxIHdpdGggaXRzIGZpcnN0IGxldHRlciBjb252 ZXJ0ZWQgdG8gdXBwZXJjYXNlIGFuZCB0aGUgcmVtYWluaW5nXG5cCi0gIGxldHRlcnMgdG8gbG93 ZXJjYXNlLlxuIik7Ci0gICAgICAgIHByaW50ZigiU3lub255bTogXFxmY2FwcyhzMSlcbiIpOwot ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRk5fVE9EOiAgICAgICAgICAgICAgICAgICAgICAv KiBUaW1lLW9mLWRheS10by1zZWNzLXNpbmNlLW1pZG5pdGUgKi8KLSAgICAgICAgcHJpbnRmKCJc XGZ0b2Qyc2VjcyhzMSlcblwKLSAgczEgPSB0aW1lLW9mLWRheSBzdHJpbmcsIGhoOm1tOnNzLCAy NC1ob3VyIGZvcm1hdC5cbiIpOwotICAgICAgICBwcmludGYoIlJldHVybnMgbnVtYmVyOlxuXAot ICBTZWNvbmRzIHNpbmNlIG1pZG5pZ2h0LlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz ZSBGTl9GRk46ICAgICAgICAgICAgICAgICAgICAgIC8qIEZ1bGwgZmlsZSBuYW1lICovCi0gICAg ICAgIHByaW50ZigiXFxmcGF0aG5hbWUoZjEpXG5cCi0gIGYxID0gZmlsZW5hbWUsIHBvc3NpYmx5 IHdpbGQuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIHN0cmluZzpcblwKLSAgRnVsbCBw YXRobmFtZSBvZiBmMS5cbiIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRk5fQ0hLOiAg ICAgICAgICAgICAgICAgICAgICAvKiBDaGVja3N1bSBvZiB0ZXh0ICovCi0gICAgICAgIHByaW50 ZigiXFxmY2hlY2tzdW0oczEpXG5cCi0gIHMxID0gc3RyaW5nLlxuIik7Ci0gICAgICAgIHByaW50 ZigiUmV0dXJucyBpbnRlZ2VyOlxuXAotICAxNi1iaXQgY2hlY2tzdW0gb2Ygc3RyaW5nIHMxLlxu Iik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGTl9DUkM6ICAgICAgICAgICAgICAgICAg ICAgIC8qIENSQy0xNiBvZiB0ZXh0ICovCi0gICAgICAgIHByaW50ZigiXFxmY3JjMTYoczEpXG5c Ci0gIHMxID0gc3RyaW5nLlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBpbnRlZ2VyOlxu XAotICAxNi1iaXQgY3ljbGljIHJlZHVuZGFuY3kgY2hlY2sgb2Ygc3RyaW5nIHMxLlxuIik7Ci0g ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGTl9CU046ICAgICAgICAgICAgICAgICAgICAgIC8q IEJhc2VuYW1lIG9mIGZpbGUgKi8KLSAgICAgICAgcHJpbnRmKCJcXGZiYXNlbmFtZShmMSlcblwK LSAgZjEgPSBmaWxlbmFtZSwgcG9zc2libHkgd2lsZC5cbiIpOwotICAgICAgICBwcmludGYoIlJl dHVybnMgc3RyaW5nOlxuXAotICBGaWxlbmFtZSBmMSBzdHJpcHBlZCBvZiBhbGwgZGV2aWNlIGFu ZCBkaXJlY3RvcnkgaW5mb3JtYXRpb24uXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl IEZOX0NNRDogICAgICAgICAgICAgICAgICAgICAgLyogT3V0cHV0IG9mIGEgY29tbWFuZCAoY29v a2VkKSAqLwotICAgICAgICBwcmludGYoIlxcZmNvbW1hbmQoczEpXG5cCi0gIHMxID0gc3RyaW5n XG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIHN0cmluZzpcblwKLSAgT3V0cHV0IG9mIHN5 c3RlbSBjb21tYW5kIHMxLCBpZiBhbnksIHdpdGggZmluYWwgbGluZSB0ZXJtaW5hdG9yIHN0cmlw cGVkLlxuIgotICAgICAgICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZO X1JBVzogICAgICAgICAgICAgICAgICAgICAgLyogT3V0cHV0IG9mIGEgY29tbWFuZCAocmF3KSAq LwotICAgICAgICBwcmludGYoIlxcZnJhd2NvbW1hbmQoczEpXG5cCi0gIHMxID0gc3RyaW5nXG4i KTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIHN0cmluZzpcblwKLSAgT3V0cHV0IG9mIHN5c3Rl bSBjb21tYW5kIHMxLCBpZiBhbnkuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZO X1NUWDogICAgICAgICAgICAgICAgICAgICAgLyogU3RyaXAgZnJvbSByaWdodCAqLwotICAgICAg ICBwcmludGYoIlxcZnN0cmlweChzMSxjMSlcblwKLSAgczEgPSBzdHJpbmcgdG8gbG9vayBpbi5c blwKLSAgYzEgPSBjaGFyYWN0ZXIgdG8gbG9vayBmb3IsIGRlZmF1bHQgPSBcIi5cIi5cbiIpOwot ICAgICAgICBwcmludGYoIlJldHVybnMgc3RyaW5nOlxuXAotICBzMSB1cCB0byB0aGUgcmlnaHRt b3N0IG9jY3VycmVuY2Ugb2YgY2hhcmFjdGVyIGMxLlxuIgotICAgICAgICApOwotICAgICAgICBi cmVhazsKLQotICAgICAgY2FzZSBGTl9TVEw6ICAgICAgICAgICAgICAgICAgICAgIC8qIFN0cmlw IGZyb20gbGVmdCAqLwotICAgICAgICBwcmludGYoIlxcZmxvcChzMVssYzFbLG4xXV0pXG5cCi0g IHMxID0gc3RyaW5nIHRvIGxvb2sgaW4uXG5cCi0gIGMxID0gY2hhcmFjdGVyIHRvIGxvb2sgZm9y LCBkZWZhdWx0ID0gXCIuXCIuXG5cCi0gIG4xID0gb2NjdXJyZW5jZSBvZiBjMSwgZGVmYXVsdCA9 IDEuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIHN0cmluZzpcblwKLSAgVGhlIHBhcnQg b2YgczEgYWZ0ZXIgdGhlIG4xdGggbGVmdG1vc3Qgb2NjdXJyZW5jZSBvZiBjaGFyYWN0ZXIgYzEu XG4iCi0gICAgICAgICk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEZOX0xPUFg6ICAg ICAgICAgICAgICAgICAgICAgIC8qIFN0cmlwIGZyb20gcmlnaHQgKi8KLSAgICAgICAgcHJpbnRm KCJcXGZsb3B4KHMxLGMxKVxuXAotICBzMSA9IHN0cmluZyB0byBsb29rIGluLlxuXAotICBjMSA9 IGNoYXJhY3RlciB0byBsb29rIGZvciwgZGVmYXVsdCA9IFwiLlwiLlxuXAotICBuMSA9IG9jY3Vy cmVuY2Ugb2YgYzEsIGRlZmF1bHQgPSAxLlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBz dHJpbmc6XG5cCi0gIFRoZSBwYXJ0IG9mIHMxIGFmdGVyIHRoZSBuMXRoIHJpZ2h0bW9zdCBvY2N1 cnJlbmNlIG9mIGNoYXJhY3RlciBjMS5cbiIKLSAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0K LSAgICAgIGNhc2UgRk5fU1ROOiAgICAgICAgICAgICAgICAgICAgICAvKiBTdHJpcCBuIGNoYXJz ICovCi0gICAgICAgIHByaW50ZigiXFxmc3RyaXBuKHMxLG4xKVxuXAotICBzMSA9IHN0cmluZyB0 byBsb29rIGluLlxuXAotICBuMSA9IGludGVnZXIsIGRlZmF1bHQgPSAwLlxuIik7Ci0gICAgICAg IHByaW50ZigiUmV0dXJucyBzdHJpbmc6XG5cCi0gIHMxIHdpdGggbjEgY2hhcmFjdGVycyByZW1v dmVkIGZyb20gdGhlIHJpZ2h0LlxuIgotICAgICAgICApOwotICAgICAgICBicmVhazsKLQotICAg ICAgY2FzZSBGTl9TVEI6ICAgICAgICAgICAgICAgICAgICAgIC8qIFN0cmlwIGVuY2xvc2luZyBi cmFja2V0cyAqLwotICAgICAgICBwcmludGYoIlxcZnN0cmlwYihzMVssYzFbLGMyXV0pXG5cCi0g IHMxID0gb3JpZ2luYWwgc3RyaW5nLlxuXAotICBjMSA9IG9wdGlvbmFsIGZpcnN0IGNoYXJhY3Rl clxuIik7Ci0gICAgICAgIHByaW50ZigiXAotICBjMiA9IG9wdGlvbmFsIGZpbmFsIGNoYXJhY3Rl ci5cbiIpOwotICAgICAgICBwcmludGYoIlJldHVybnMgc3RyaW5nOlxuXAotICBzMSB3aXRoIHRo ZSBpbmRpY2F0ZWQgZW5jbG9zaW5nIGNoYXJhY3RlcnMgcmVtb3ZlZC4gIElmIGMxIGFuZCBjMiBu b3RcblwKLSAgICAgc3BlY2lmaWVkLCBhbnkgbWF0Y2hpbmcgYnJhY2tldHMsIGJyYWNlcywgcGFy ZW50aGVzZXMsIG9yIHF1b3RlcyBhcmVcbiIpOwotICAgICAgICBwcmludGYoIlwKLSAgICAgYXNz dW1lZC4gIElmIGMxIGlzIGdpdmVuIGJ1dCBub3QgYzIsIHRoZSBhcHByb3ByaWF0ZSBjMiBpcyBh c3N1bWVkLlxuXAotICAgICBpZiBib3RoIGMxIGFuZCBjMiBhcmUgZ2l2ZW4sIHRoZXkgYXJlIHVz ZWQgYXMtaXMuXG4iCi0gICAgICAgICAgICAgICApOwotICAgICAgICBwcmludGYoCi0iQWx0ZXJu YXRpdmUgZm9ybWF0OlxuXAotICBJbmNsdWRlIGEgZ3JvdXBpbmcgbWFzayBudW1iZXIgaW4gcGxh Y2Ugb2YgYzEgYW5kIG9taXQgYzIgdG8gc3BlY2lmeSBtb3JlXG5cCi0gIHRoYW4gb25lIHBvc3Np YmlsaXR5IGF0IG9uY2U7IHNlZSBcXGZ3b3JkKCkgZm9yIGRldGFpbHMuXG4iCi0gICAgICAgICAg ICAgICApOwotICAgICAgICBicmVhazsKLQotI2lmZGVmIE9TMgotICAgICAgY2FzZSBGTl9TQ1JO X0NYOiAgICAgICAgICAgICAgICAgIC8qIFNjcmVlbiBDdXJzb3IgWCBQb3MgKi8KLSAgICAgICAg cHJpbnRmKCJcXGZzY3JuY3VyeCgpXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIGludGVn ZXI6XG5cCi0gIFRoZSAwLWJhc2VkIFggY29vcmRpbmF0ZSAoY29sdW1uKSBvZiB0aGUgVGVybWlu YWwgc2NyZWVuIGN1cnNvci5cbiIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRk5fU0NS Tl9DWTogICAgICAgICAgICAgICAgICAvKiBTY3JlZW4gQ3Vyc29yIFkgUG9zICovCi0gICAgICAg IHByaW50ZigiXFxmc2NybmN1cnkoKVxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBpbnRl Z2VyOlxuXAotICBUaGUgMC1iYXNlZCBZIGNvb3JkaW5hdGUgKHJvdykgb2YgdGhlIFRlcm1pbmFs IHNjcmVlbiBjdXJzb3IuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZOX1NDUk5f U1RSOiAgICAgICAgICAgICAgICAgLyogU2NyZWVuIFN0cmluZyAqLwotICAgICAgICBwcmludGYo IlxcZnNjcm5zdHIobnksbngsbjEpXG5cCi0gIG55ID0gaW50ZWdlci5cblwKLSAgbnggPSBpbnRl Z2VyLlxuXAotICBuMSA9IGludGVnZXIuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIHN0 cmluZzpcblwKLSAgVGhlIHN0cmluZyBhdCBUZXJtaW5hbC1zY3JlZW4gY29vcmRpbmF0ZXMgKG54 LG55KSwgbGVuZ3RoIG4xLFxuXAotICBibGFua3MgaW5jbHVkZWQuICBDb29yZGluYXRlcyBzdGFy dCBhdCAwLiAgRGVmYXVsdCB2YWx1ZXMgYXJlXG5cCi0gIDAgZm9yIG55IGFuZCBueCwgYW5kIGxp bmUgd2lkdGggZm9yIG4xLlxuIik7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIE9TMiAqLwot Ci0gICAgICBjYXNlIEZOXzJIRVg6ICAgICAgICAgICAgICAgICAgICAgLyogTnVtIHRvIGhleCAq LwotICAgICAgICBwcmludGYoIlxcZm4yaGV4KG4xKSAtIE51bWJlciB0byBoZXhcbiAgbjEgPSBp bnRlZ2VyLlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBzdHJpbmc6XG4gIFRoZSBoZXhh ZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiBuMS5cbiIpOwotICAgICAgICBicmVhazsKLQotICAg ICAgY2FzZSBGTl8yT0NUOiAgICAgICAgICAgICAgICAgICAgIC8qIE51bSB0byBoZXggKi8KLSAg ICAgICAgcHJpbnRmKCJcXGZuMm9jdGFsKG4xKSAtIE51bWJlciB0byBvY3RhbFxuICBuMSA9IGlu dGVnZXIuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIHN0cmluZzpcbiAgVGhlIG9jdGFs IHJlcHJlc2VudGF0aW9uIG9mIG4xLlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0jaWZkZWYgUkVD VVJTSVZFCi0gICAgICBjYXNlIEZOX0RJUjogICAgICAgICAgICAgICAgICAgICAgLyogUmVjdXJz aXZlIGRpcmVjdG9yeSBjb3VudCAqLwotICAgICAgICBwcmludGYoIlxcZmRpcmVjdG9yaWVzKGYx KSAtIERpcmVjdG9yeSBsaXN0LlxuXAotICBmMSA9IGRpcmVjdG9yeSBzcGVjaWZpY2F0aW9uLCBw b3NzaWJseSBjb250YWluaW5nIHdpbGRjYXJkcy5cblwKLSAgJmEgPSBvcHRpb25hbCBuYW1lIG9m IGFycmF5IHRvIGFzc2lnbiBkaXJlY3RvcnkgbGlzdCB0by5cbiIpOwotICAgICAgICBwcmludGYo IlJldHVybnMgaW50ZWdlcjpcblwKLSAgVGhlIG51bWJlciBvZiBkaXJlY3RvcmllcyB0aGF0IG1h dGNoIGYxOyB1c2Ugd2l0aCBcXGZuZXh0ZmlsZSgpLlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0g ICAgICBjYXNlIEZOX1JGSUw6ICAgICAgICAgICAgICAgICAgICAgLyogUmVjdXJzaXZlIGZpbGUg Y291bnQgKi8KLSAgICAgICAgcHJpbnRmKCJcXGZyZmlsZXMoZjFbLCZhXSkgLSBSZWN1cnNpdmUg ZmlsZSBsaXN0LlxuXAotICBmMSA9IGZpbGUgc3BlY2lmaWNhdGlvbiwgcG9zc2libHkgY29udGFp bmluZyB3aWxkY2FyZHMuXG5cCi0gICZhID0gb3B0aW9uYWwgbmFtZSBvZiBhcnJheSB0byBhc3Np Z24gZmlsZSBsaXN0IHRvLlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBpbnRlZ2VyOlxu XAotICBUaGUgbnVtYmVyIG9mIGZpbGVzIHdob3NlIG5hbWVzIG1hdGNoIGYxIGluIHRoZSBjdXJy ZW50IG9yIGdpdmVuXG5cCi0gIGRpcmVjdG9yeSB0cmVlOyB1c2Ugd2l0aCBcXGZuZXh0ZmlsZSgp LlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEZOX1JESVI6ICAgICAgICAgICAg ICAgICAgICAgLyogUmVjdXJzaXZlIGRpcmVjdG9yeSBjb3VudCAqLwotICAgICAgICBwcmludGYo IlxcZnJkaXJlY3RvcmllcyhmMSkgLSBSZWN1cnNpdmUgZGlyZWN0b3J5IGxpc3QuXG5cCi0gIGYx ID0gZGlyZWN0b3J5IHNwZWNpZmljYXRpb24sIHBvc3NpYmx5IGNvbnRhaW5pbmcgd2lsZGNhcmRz LlxuXAotICAmYSA9IG9wdGlvbmFsIG5hbWUgb2YgYXJyYXkgdG8gYXNzaWduIGRpcmVjdG9yeSBs aXN0IHRvLlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBpbnRlZ2VyOlxuXAotICBUaGUg bnVtYmVyIG9mIGRpcmVjdG9yaWVzIHRoYXQgbWF0Y2ggZjEgaW4gdGhlIGN1cnJlbnQgb3IgZ2l2 ZW4gZGlyZWN0b3J5XG5cCi0gIHRyZWUuICBVc2Ugd2l0aCBcXGZuZXh0ZmlsZSgpLlxuIik7Ci0g ICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLwotCi0gICAgICBjYXNlIEZOX0RO QU06ICAgICAgICAgICAgICAgICAgICAgLyogRGlyZWN0b3J5IHBhcnQgb2YgYSBmaWxlbmFtZSAq LwotICAgICAgICBwcmludGYoIlxcZmRpcm5hbWUoZikgLSBEaXJlY3RvcnkgcGFydCBvZiBhIGZp bGVuYW1lLlxuXAotICBmID0gYSBmaWxlIHNwZWNpZmljYXRpb24uXG4iKTsKLSAgICAgICAgcHJp bnRmKCJSZXR1cm5zIGRpcmVjdG9yeSBuYW1lOlxuXAotICBUaGUgZnVsbCBuYW1lIG9mIHRoZSBk aXJlY3RvcnkgdGhhdCB0aGUgZmlsZSBpcyBpbiwgb3IgaWYgdGhlIGZpbGUgaXMgYVxuXAotICBk aXJlY3RvcnksIGl0cyBmdWxsIG5hbWUuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0KLSNpZm5kZWYg Tk9SQU5ET00KLSAgICAgIGNhc2UgRk5fUkFORDogICAgICAgICAgICAgICAgICAgICAvKiBSYW5k b20gbnVtYmVyICovCi0gICAgICAgIHByaW50ZigiXFxmcmFuZG9tKG4pIC0gUmFuZG9tIG51bWJl ci5cblwKLSAgbiA9IGEgcG9zaXRpdmUgaW50ZWdlci5cbiIpOwotICAgICAgICBwcmludGYoIlJl dHVybnMgaW50ZWdlcjpcblwKLSAgQSByYW5kb20gbnVtYmVyIGJldHdlZW4gMCBhbmQgbi0xLlxu Iik7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIE5PUkFORE9NICovCi0KLSAgICAgIGNhc2Ug Rk5fU1BMSVQ6ICAgICAgICAgICAgICAgICAgICAvKiBTcGxpdCAqLwotI2lmZGVmIENPTU1FTlQK LSAgICAgICAgcHJpbnRmKCJcXGZzcGxpdChzMSwmYSxzMixzMyxuMixuMykgLSBcCi1Bc3NpZ24g c3RyaW5nIHdvcmRzIHRvIGFuIGFycmF5LlxuXAotICBzMSA9IHNvdXJjZSBzdHJpbmdcbiAgJmEg PSBhcnJheSBkZXNpZ25hdG9yXG4gIHMyID0gb3B0aW9uYWwgYnJlYWsgc2V0LlxuIik7Ci0gICAg ICAgIHByaW50ZigiICBzMyA9IG9wdGlvbmFsIGluY2x1ZGUgc2V0LlxuIik7Ci0gICAgICAgIHBy aW50ZigiICBuMiA9IG9wdGlvbmFsIGdyb3VwaW5nIG1hc2suXG4iKTsKLSAgICAgICAgcHJpbnRm KCIgIG4zID0gb3B0aW9uYWwgc2VwYXJhdG9yIGZsYWcuXG4iKTsKLSAgICAgICAgcHJpbnRmKCIg IHMyLCBzMywgbjIsIG4zIGFyZSBhcyBpbiBcXGZ3b3JkKCkuXG4iKTsKLSAgICAgICAgcHJpbnRm KAotIiAgQWxsIGFyZ3VtZW50cyBhcmUgb3B0aW9uYWw7IGlmIFxcJmFbXSBhbHJlYWR5IGV4aXN0 cywgaXQgaXMgcmVjeWNsZWQ7XG5cCi0gIGlmIGFycmF5IG5vdCBzcGVjaWZpZWQsIHRoZSBjb3Vu dCBpcyByZXR1cm5lZCBidXQgbm8gYXJyYXkgaXMgY3JlYXRlZC5cbiIpOwotICAgICAgICBwcmlu dGYoIlJldHVybnMgaW50ZWdlcjpcblwKLSAgTnVtYmVyIG9mIHdvcmRzIGluIHNvdXJjZSBzdHJp bmcuXG4iKTsKLSNlbHNlCi0gICAgICAgIGhtc2dhKGhmc3BsaXQpOwotI2VuZGlmCS8qIENPTU1F TlQgKi8KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRk5fRFRJTTogICAgICAgICAgICAg ICAgICAgICAvKiBDVlREQVRFICovCi0gICAgICAgIHByaW50ZigiXFxmY3Z0ZGF0ZShbZGF0ZS10 aW1lXVssbjFdKSAtIERhdGUvdGltZSBjb252ZXJzaW9uLlxuIik7Ci0gICAgICAgIHByaW50Zigi ICBDb252ZXJ0cyBkYXRlIGFuZC9vciB0aW1lIHRvIHN0YW5kYXJkIGZvcm1hdC5cbiIpOwotICAg ICAgICBwcmludGYoIiAgSWYgbm8gZGF0ZS90aW1lIGdpdmVuLCByZXR1cm5zIGN1cnJlbnQgZGF0 ZS90aW1lLlxuIik7Ci0gICAgICAgIHByaW50ZigiICBbZGF0ZS10aW1lXSwgaWYgZ2l2ZW4sIGlz IGZyZWUtZm9ybWF0IGRhdGUgYW5kL29yIHRpbWUuXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIEhF TFAgREFURSBmb3IgaW5mbyBhYm91dCBkYXRlLXRpbWUgZm9ybWF0cy5cbiIpOwotICAgICAgICBw cmludGYoIlJldHVybnMgc3RyaW5nOlxuXAotICBTdGFuZGFyZC1mb3JtYXQgZGF0ZSBhbmQgdGlt ZTogeXl5eW1tZGQgaGg6bW06c3MgKG51bWVyaWMpXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIElm IG4xIGlzIGdpdmVuOlxuXAotICBuMSA9IDE6IHl5eXktbW1tLWRkIGhoOm1tOnNzIChtbW0gPSBF bmdsaXNoIDMtbGV0dGVyIG1vbnRoIGFiYnJldmlhdGlvbilcblwKLSAgbjEgPSAyOiBkZC1tbW0t eXl5eSBoaDptbTpzcyAoZGl0dG8pXG5cCi0gIG4xID0gMzogeXl5eW1tZGRoaG1tc3MgKGFsbCBu dW1lcmljKVxuXAotICBuMSA9IDQ6IERheSBNb24gZGQgaGg6bW06c3MgeXl5eSAoYXNjdGltZSlc blwKLSAgT3RoZXI6ICB5eXl5bW1kZCBoaDptbTpkZCIpOwotICAgICAgICBicmVhazsKLQotICAg ICAgY2FzZSBGTl9KREFURTogICAgICAgICAgICAgICAgICAgIC8qIERPWSAqLwotICAgICAgICBw cmludGYoIlxcZmRveShbZGF0ZS10aW1lXSkgLSBEYXkgb2YgWWVhci5cbiIpOwotICAgICAgICBw cmludGYoIiAgQ29udmVydHMgZGF0ZSBhbmQvb3IgdGltZSB0byBkYXktb2YteWVhciAoRE9ZKSBm b3JtYXQuXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIElmIG5vIGRhdGUvdGltZSBnaXZlbiwgcmV0 dXJucyBjdXJyZW50IGRhdGUuXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIFtkYXRlLXRpbWVdLCBp ZiBnaXZlbiwgaXMgZnJlZS1mb3JtYXQgZGF0ZSBhbmQvb3IgdGltZS5cbiIpOwotICAgICAgICBw cmludGYoIiAgSEVMUCBEQVRFIGZvciBpbmZvIGFib3V0IGRhdGUtdGltZSBmb3JtYXRzLlxuIik7 Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBudW1lcmljIHN0cmluZzpcblwKLSAgRE9ZOiB5eXl5 ZGRkLCB3aGVyZSBkZGQgaXMgMS1iYXNlZCBkYXkgbnVtYmVyIGluIHllYXIuXG4iKTsKLSAgICAg ICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRk5fUE5DVlQ6Ci0gICAgICAgIHByaW50ZigiXFxmZGlh bGNvbnZlcnQocGhvbmUtbnVtYmVyKSAtIENvbnZlcnQgcGhvbmUgbnVtYmVyLlxuIik7Ci0gICAg ICAgIHByaW50ZigiICBDb252ZXJ0cyB0aGUgZ2l2ZW4gcGhvbmUgbnVtYmVyIGZvciBkaWFsaW5n IGFjY29yZGluZ1xuIik7Ci0gICAgICAgIHByaW50ZigKLSIgIHRvIHRoZSBwcmV2YWlsaW5nIGRp YWxpbmcgcnVsZXMgLS0gY291bnRyeSBjb2RlLCBhcmVhIGNvZGUsIGV0Yy5cbiIpOwotICAgICAg ICBwcmludGYoIlJldHVybnMgc3RyaW5nOlxuXAotICBUaGUgZGlhbCBzdHJpbmcgdGhhdCB3b3Vs ZCBiZSB1c2VkIGlmIHRoZSBzYW1lIHBob25lIG51bWJlciBoYWQgYmVlblxuXAotICBnaXZlbiB0 byB0aGUgRElBTCBjb21tYW5kLlxuIgotICAgICAgICAgICAgICApOwotICAgICAgICBicmVhazsK LQotICAgICAgY2FzZSBGTl9EQVRFSjogICAgICAgICAgICAgICAgICAgIC8qIERPWTJEQVRFICov Ci0gICAgICAgIHByaW50ZigiXFxmZG95MmRhdGUoW2RveVsgdGltZV1dKSAtIERheSBvZiBZZWFy IHRvIERhdGUuXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIENvbnZlcnRzIHl5eXltbW0gdG8geXl5 eW1tZGRcbiIpOwotICAgICAgICBwcmludGYoIiAgSWYgdGltZSBpbmNsdWRlZCwgaXQgaXMgY29u dmVydGVkIHRvIDI0LWhvdXIgZm9ybWF0LiIpOwotICAgICAgICBwcmludGYoCi0gICAgICAgICAg ICAiUmV0dXJucyBzdGFuZGFyZCBkYXRlIG9yIGRhdGUtdGltZSBzdHJpbmcgeXl5eW1tZGQgaGg6 bW06c3NcbiIpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBGTl9NSkQ6Ci0gICAgICAg IHByaW50ZigiXFxmbWpkKFtbZGF0ZV1bIHRpbWVdXSkgLSBNb2RpZmllZCBKdWxpYW4gRGF0ZSAo TUpEKS5cbiIpOwotICAgICAgICBwcmludGYoCi0iICBDb252ZXJ0cyBkYXRlIGFuZC9vciB0aW1l IHRvIE1KRCwgdGhlIG51bWJlciBvZiBkYXlzIHNpbmNlIDE3IE5vdiAxODU4LlxuIik7Ci0gICAg ICAgIHByaW50ZigiICBIRUxQIERBVEUgZm9yIGluZm8gYWJvdXQgZGF0ZS10aW1lIGZvcm1hdHMu XG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zOiBpbnRlZ2VyLlxuIik7Ci0gICAgICAgIGJy ZWFrOwotCi0gICAgICBjYXNlIEZOX01KRDI6Ci0gICAgICAgIHByaW50ZigiXFxmbWpkMmRhdGUo bWpkKSAtIE1vZGlmaWVkIEp1bGlhbiBEYXRlIChNSkQpIHRvIERhdGUuXG4iKTsKLSAgICAgICAg cHJpbnRmKCIgIENvbnZlcnRzIE1KRCB0byBzdGFuZGFyZC1mb3JtYXQgZGF0ZS5cbiIpOwotICAg ICAgICBwcmludGYoIlJldHVybnM6IHl5eXltbWRkLlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0g ICAgICBjYXNlIEZOX0RBWToKLSAgICAgICAgcHJpbnRmKCJcXGZkYXkoW1tkYXRlXVsgdGltZV1d KSAtIERheSBvZiBXZWVrLlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBkYXkgb2Ygd2Vl ayBvZiBnaXZlbiBkYXRlIGFzIE1vbiwgVHVlLCBldGMuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJI RUxQIERBVEUgZm9yIGluZm8gYWJvdXQgZGF0ZS10aW1lIGZvcm1hdHMuXG4iKTsKLSAgICAgICAg YnJlYWs7Ci0KLSAgICAgIGNhc2UgRk5fTkRBWToKLSAgICAgICAgcHJpbnRmKCJcXGZuZGF5KFtb ZGF0ZV1bIHRpbWVdXSkgLSBOdW1lcmljIERheSBvZiBXZWVrLlxuIik7Ci0gICAgICAgIHByaW50 ZigKLSAgICAiUmV0dXJucyBudW1lcmljIGRheSBvZiB3ZWVrIG9mIGdpdmVuIGRhdGUsIDA9U3Vu LCAxPU1vbiwgLi4uLCA2PVNhdC5cbiIpOwotICAgICAgICBwcmludGYoIkhFTFAgREFURSBmb3Ig aW5mbyBhYm91dCBkYXRlLXRpbWUgZm9ybWF0cy5cbiIpOwotICAgICAgICBicmVhazsKLQotICAg ICAgY2FzZSBGTl9USU1FOgotICAgICAgICBwcmludGYoIlxcZnRpbWUoW1tkYXRlXVsgdGltZV1d KSAtIFRpbWUuXG4iKTsKLSAgICAgICAgcHJpbnRmKAotIlJldHVybnMgdGltZSBwb3J0aW9uIG9m IGdpdmVuIGRhdGUgYW5kL29yIHRpbWUgaW4gaGg6bW06c3MgZm9ybWF0LlxuIik7Ci0gICAgICAg IHByaW50ZigiSWYgbm8gYXJndW1lbnQgZ2l2ZW4sIHJldHVybnMgY3VycmVudCB0aW1lLlxuIik7 Ci0gICAgICAgIHByaW50ZigiSEVMUCBEQVRFIGZvciBpbmZvIGFib3V0IGRhdGUtdGltZSBmb3Jt YXRzLlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEZOX05USU06Ci0gICAgICAg IHByaW50ZigiXFxmbnRpbWUoW1tkYXRlXVsgdGltZV1dKSAtIE51bWVyaWMgVGltZS5cbiIpOwot ICAgICAgICBwcmludGYoCi0iUmV0dXJucyB0aW1lIHBvcnRpb24gb2YgZ2l2ZW4gZGF0ZSBhbmQv b3IgdGltZSBhcyBzZWNvbmRzIHNpbmNlIG1pZG5pZ2h0LlxuIik7Ci0gICAgICAgIHByaW50Zigi SWYgbm8gYXJndW1lbnQgZ2l2ZW4sIHJldHVybnMgY3VycmVudCB0aW1lLlxuIik7Ci0gICAgICAg IHByaW50ZigiSEVMUCBEQVRFIGZvciBpbmZvIGFib3V0IGRhdGUtdGltZSBmb3JtYXRzLlxuIik7 Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEZOX04yVElNOgotICAgICAgICBwcmludGYo IlxcZm4ydGltZShzZWNvbmRzKSAtIE51bWVyaWMgVGltZSB0byBUaW1lLlxuIik7Ci0gICAgICAg IHByaW50ZigKLSJSZXR1cm5zIHRoZSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcyBpbiBoaDptbTpz cyBmb3JtYXQuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRk5fUEVSTToKLSAg ICAgICAgcHJpbnRmKCJcXGZwZXJtaXNzaW9ucyhmaWxlKSAtIFBlcm1pc3Npb25zIG9mIEZpbGUu XG4iKTsKLSAgICAgICAgcHJpbnRmKAotI2lmZGVmIFVOSVgKLSJSZXR1cm5zIHBlcm1pc3Npb25z IG9mIGdpdmVuIGZpbGUgYXMgdGhleSB3b3VsZCBiZSBzaG93biBieSBcImxzIC1sXCIuXG4iCi0j ZWxzZQotI2lmZGVmIFZNUwotIlJldHVybnMgcGVybWlzc2lvbnMgb2YgZ2l2ZW4gZmlsZSBhcyB0 aGV5IHdvdWxkIGJlIHNob3duIGJ5IFwiZGlyIC9wcm90XCIuXG4iCi0jZWxzZQotIlJldHVybnMg dGhlIHBlcm1pc3Npb25zIG9mIHRoZSBnaXZlbiBmaWxlLlxuIgotI2VuZGlmIC8qIFZNUyAqLwot I2VuZGlmIC8qIFVOSVggKi8KLSAgICAgICAgICAgICAgICk7Ci0gICAgICAgIGJyZWFrOwotCi0g ICAgICBjYXNlIEZOX0FMT09LOgotICAgICAgICBwcmludGYoIlxcZmFycmF5bG9vayhwYXR0ZXJu LCZhKSAtIExvb2t1cCBwYXR0ZXJuIGluIGFycmF5LlxuXAotICBwYXR0ZXJuID0gU3RyaW5nIG9y IHBhdHRlcm5cbiIpOwotICAgICAgICBwcmludGYoIiAgJmEgPSBhcnJheSBkZXNpZ25hdG9yLCBj YW4gaW5jbHVkZSByYW5nZSBzcGVjaWZpZXIuXG4iKTsKLSAgICAgICAgcHJpbnRmKAotIlJldHVy bnMgbnVtYmVyOlxuXAotICBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IG1hdGNoaW5nIGFycmF5IGVs ZW1lbnQgb3IgLTEgaWYgbm9uZS5cbiIpOwotICAgICAgICBwcmludGYoIk1vcmUgaW5mbzpcblwK LSAgSEVMUCBQQVRURVJOIGZvciBwYXR0ZXJuIHN5bnRheC5cbiAgSEVMUCBBUlJBWSBmb3IgYXJy YXlzLlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEZOX1RMT09LOgotICAgICAg ICBwcmludGYoCi0iXFxmdGFibGVsb29rKGtleXdvcmQsJmEsW2NdKSAtIExvb2t1cCBrZXl3b3Jk IGluIGtleXdvcmQgdGFibGUuXG5cCi0gIHBhdHRlcm4gPSBTdHJpbmdcbiIpOwotICAgICAgICBw cmludGYoIiAga2V5d29yZCA9IGtleXdvcmQgdG8gbG9vayB1cCAoY2FuIGJlIGFiYnJldmlhdGVk KS5cbiIpOwotICAgICAgICBwcmludGYoIiAgJmEgICAgICA9IGFycmF5IGRlc2lnbmF0b3IsIGNh biBpbmNsdWRlIHJhbmdlIHNwZWNpZmllci5cbiIpOwotICAgICAgICBwcmludGYoIiAgICAgICAg ICAgIFRoaXMgYXJyYXkgbXVzdCBiZSBpbiBhbHBoYWJldGljYWwgb3JkZXIuXG4iKTsKLSAgICAg ICAgcHJpbnRmKCIgIGMgICAgICAgPSBPcHRpb25hbCBmaWVsZCBkZWxpbWl0ZXIsIGNvbG9uKDop IGJ5IGRlZmF1bHQuXG4iKTsKLSAgICAgICAgcHJpbnRmKAotIlJldHVybnMgbnVtYmVyOlxuXAot ICAxIG9yIGdyZWF0ZXIsIGluZGV4IG9mIGFycmF5IGVsZW1lbnQgdGhhdCB1bmlxdWVseSBtYXRj aGVzIGdpdmVuIGtleXdvcmQ7XG4iCi0gICAgICAgICAgICAgICApOwotICAgICAgICBwcmludGYo Ci0ib3IgLTIgaWYga2V5d29yZCB3YXMgYW1iaWd1b3VzLCBvciAtMSBpZiBrZXl3b3JkIGVtcHR5 IG9yIG5vdCBmb3VuZC5cbiIKLSAgICAgICAgICAgICAgICk7Ci0gICAgICAgIHByaW50ZigiQWxz byBzZWU6XG5cCi0gIEhFTFAgRlVOQyBBUlJBWUxPT0sgZm9yIGEgc2ltaWxhciBmdW5jdGlvbi5c biAgSEVMUCBBUlJBWSBmb3IgYXJyYXlzLlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBj YXNlIEZOX0FCUzogICAgICAgICAgICAgICAgICAgICAgLyogQWJzb2x1dGUgKi8KLSAgICAgICAg cHJpbnRmKCJcXGZhYnNvbHV0ZShuMSlcblwKLSAgbjEgPSBpbnRlZ2VyLlxuIik7Ci0gICAgICAg IHByaW50ZigiUmV0dXJucyBpbnRlZ2VyOlxuXAotICBUaGUgYWJzb2x1dGUgKHVuc2lnbmVkKSB2 YWx1ZSBvZiBuMS5cbiIpOwotICAgICAgICBicmVhazsKLQotI2lmZGVmIEZORkxPQVQKLSAgICAg IGNhc2UgRk5fRlBBQlM6Ci0gICAgICAgIHByaW50ZigiXFxmZnBhYnNvbHV0ZShmMSxkKVxuXAot ICBmMSA9IGZsb2F0aW5nLXBvaW50IG51bWJlciBvciBpbnRlZ2VyLlxuXAotICAgZCA9IGludGVn ZXIuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIGZsb2F0aW5nLXBvaW50IG51bWJlcjpc blwKLSAgVGhlIGFic29sdXRlICh1bnNpZ25lZCkgdmFsdWUgb2YgZjEgdG8gZCBkZWNpbWFsIHBs YWNlcy5cbiIpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBGTl9GUEFERDoKLSAgICAg ICAgcHJpbnRmKCJcXGZmcGFkZChmMSxmMixkKVxuXAotICBmMSxmMiA9IGZsb2F0aW5nLXBvaW50 IG51bWJlcnMgb3IgaW50ZWdlcnMuXG5cCi0gICAgICBkID0gaW50ZWdlci5cbiIpOwotICAgICAg ICBwcmludGYoIlJldHVybnMgZmxvYXRpbmctcG9pbnQgbnVtYmVyOlxuXAotICBUaGUgc3VtIG9m IGYxIGFuZCBmMiB0byBkIGRlY2ltYWwgcGxhY2VzLlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0g ICAgICBjYXNlIEZOX0ZQU1VCOgotICAgICAgICBwcmludGYoIlxcZmZwc3VidHJhY3QoZjEsZjIs ZClcblwKLSAgZjEsZjIgPSBmbG9hdGluZy1wb2ludCBudW1iZXJzIG9yIGludGVnZXJzLlxuXAot ICAgICAgZCA9IGludGVnZXIuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIGZsb2F0aW5n LXBvaW50IG51bWJlcjpcblwKLSAgZjEgbWludXMgZjIgdG8gZCBkZWNpbWFsIHBsYWNlcy5cbiIp OwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBGTl9GUE1VTDoKLSAgICAgICAgcHJpbnRm KCJcXGZmcG11bHRpcGx5KGYxLGYyLGQpXG5cCi0gIGYxLGYyID0gZmxvYXRpbmctcG9pbnQgbnVt YmVycyBvciBpbnRlZ2Vycy5cblwKLSAgICAgIGQgPSBpbnRlZ2VyLlxuIik7Ci0gICAgICAgIHBy aW50ZigiUmV0dXJucyBmbG9hdGluZy1wb2ludCBudW1iZXI6XG5cCi0gIFRoZSBwcm9kdWN0IG9m IGYxIGFuZCBmMiB0byBkIGRlY2ltYWwgcGxhY2VzLlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0g ICAgICBjYXNlIEZOX0ZQRElWOgotICAgICAgICBwcmludGYoIlxcZmZwZGl2aWRlKGYxLGYyLGQp XG5cCi0gIGYxLGYyID0gZmxvYXRpbmctcG9pbnQgbnVtYmVycyBvciBpbnRlZ2Vycy5cblwKLSAg ICAgIGQgPSBpbnRlZ2VyLlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBmbG9hdGluZy1w b2ludCBudW1iZXI6XG5cCi0gIGYxIGRpdmlkZWQgYnkgZjIgdG8gZCBkZWNpbWFsIHBsYWNlcy5c biIpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBGTl9GUE1BWDoKLSAgICAgICAgcHJp bnRmKCJcXGZmcG1heGltdW0oZjEsZjIsZClcblwKLSAgZjEsZjIgPSBmbG9hdGluZy1wb2ludCBu dW1iZXJzIG9yIGludGVnZXJzLlxuXAotICAgICAgZCA9IGludGVnZXIuXG4iKTsKLSAgICAgICAg cHJpbnRmKCJSZXR1cm5zIGZsb2F0aW5nLXBvaW50IG51bWJlcjpcblwKLSAgVGhlIG1heGltdW0g b2YgZjEgYW5kIGYyIHRvIGQgZGVjaW1hbCBwbGFjZXMuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0K LSAgICAgIGNhc2UgRk5fRlBNSU46Ci0gICAgICAgIHByaW50ZigiXFxmZnBtaW5pbXVtKGYxLGYy LGQpXG5cCi0gIGYxLGYyID0gZmxvYXRpbmctcG9pbnQgbnVtYmVycyBvciBpbnRlZ2Vycy5cblwK LSAgICAgIGQgPSBpbnRlZ2VyLlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBmbG9hdGlu Zy1wb2ludCBudW1iZXI6XG5cCi0gIFRoZSBtaW5pbXVtIG9mIGYxIGFuZCBmMiB0byBkIGRlY2lt YWwgcGxhY2VzLlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEZOX0ZQTU9EOgot ICAgICAgICBwcmludGYoIlxcZmZwbW9kdWx1cyhmMSxmMixkKVxuXAotICBmMSxmMiA9IGZsb2F0 aW5nLXBvaW50IG51bWJlcnMgb3IgaW50ZWdlcnMuXG5cCi0gICAgICBkID0gaW50ZWdlci5cbiIp OwotICAgICAgICBwcmludGYoIlJldHVybnMgZmxvYXRpbmctcG9pbnQgbnVtYmVyOlxuXAotICBU aGUgbW9kdWx1cyBvZiBmMSBhbmQgZjIgdG8gZCBkZWNpbWFsIHBsYWNlcy5cbiIpOwotICAgICAg ICBicmVhazsKLQotICAgICAgY2FzZSBGTl9GUFBPVzoKLSAgICAgICAgcHJpbnRmKCJcXGZmcHJh aXNlKGYxLGYyLGQpXG5cCi0gIGYxLGYyID0gZmxvYXRpbmctcG9pbnQgbnVtYmVycyBvciBpbnRl Z2Vycy5cblwKLSAgICAgIGQgPSBpbnRlZ2VyLlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJu cyBmbG9hdGluZy1wb2ludCBudW1iZXI6XG5cCi0gIGYxIHJhaXNlZCB0byB0aGUgcG93ZXIgZjIs IHRvIGQgZGVjaW1hbCBwbGFjZXMuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2Ug Rk5fRlBDT1M6Ci0gICAgICAgIHByaW50ZigiXFxmZnBjb3NpbmUoZjEsZClcblwKLSAgZjEgPSBm bG9hdGluZy1wb2ludCBudW1iZXIgb3IgaW50ZWdlci5cblwKLSAgIGQgPSBpbnRlZ2VyLlxuIik7 Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBmbG9hdGluZy1wb2ludCBudW1iZXI6XG5cCi0gIFRo ZSBjb3NpbmUgb2YgYW5nbGUgZjEgKGluIHJhZGlhbnMpIHRvIGQgZGVjaW1hbCBwbGFjZXMuXG4i KTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRk5fRlBTSU46Ci0gICAgICAgIHByaW50 ZigiXFxmZnBzaW5lKGYxLGQpXG5cCi0gIGYxID0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIG9yIGlu dGVnZXIuXG5cCi0gICBkID0gaW50ZWdlci5cbiIpOwotICAgICAgICBwcmludGYoIlJldHVybnMg ZmxvYXRpbmctcG9pbnQgbnVtYmVyOlxuXAotICBUaGUgc2luZSBvZiBhbmdsZSBmMSAoaW4gcmFk aWFucykgdG8gZCBkZWNpbWFsIHBsYWNlcy5cbiIpOwotICAgICAgICBicmVhazsKLQotICAgICAg Y2FzZSBGTl9GUFRBTjoKLSAgICAgICAgcHJpbnRmKCJcXGZmcHRhbmdlbnQoZjEsZClcblwKLSAg ZjEgPSBmbG9hdGluZy1wb2ludCBudW1iZXIgb3IgaW50ZWdlci5cblwKLSAgIGQgPSBpbnRlZ2Vy LlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBmbG9hdGluZy1wb2ludCBudW1iZXI6XG5c Ci0gIFRoZSB0YW5nZW50IG9mIGFuZ2xlIGYxIChpbiByYWRpYW5zKSB0byBkIGRlY2ltYWwgcGxh Y2VzLlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEZOX0ZQRVhQOgotICAgICAg ICBwcmludGYoIlxcZmZwZXhwKGYxLGQpXG5cCi0gIGYxID0gZmxvYXRpbmctcG9pbnQgbnVtYmVy IG9yIGludGVnZXIuXG5cCi0gICBkID0gaW50ZWdlci5cbiIpOwotICAgICAgICBwcmludGYoIlJl dHVybnMgZmxvYXRpbmctcG9pbnQgbnVtYmVyOlxuXAotICBlICh0aGUgYmFzZSBvZiBuYXR1cmFs IGxvZ2FyaXRobXMpIHJhaXNlZCB0byB0aGUgZjEgcG93ZXIsXG5cCi0gIHRvIGQgZGVjaW1hbCBw bGFjZXMuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRk5fRlBJTlQ6Ci0gICAg ICAgIHByaW50ZigiXFxmZnBpbnQoZjEpXG5cCi0gIGYxID0gZmxvYXRpbmctcG9pbnQgbnVtYmVy IG9yIGludGVnZXIuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIGludGVnZXI6XG5cCi0g IFRoZSBpbnRlZ2VyIHBhcnQgb2YgZjEuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNh c2UgRk5fRlBMT0c6Ci0gICAgICAgIHByaW50ZigiXFxmZnBsb2cxMChmMSxkKVxuXAotICBmMSA9 IGZsb2F0aW5nLXBvaW50IG51bWJlciBvciBpbnRlZ2VyLlxuXAotICAgZCA9IGludGVnZXIuXG4i KTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIGZsb2F0aW5nLXBvaW50IG51bWJlcjpcblwKLSAg VGhlIGxvZ2FyaXRobSwgYmFzZSAxMCwgb2YgZjEgdG8gZCBkZWNpbWFsIHBsYWNlcy5cbiIpOwot ICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBGTl9GUExOOgotICAgICAgICBwcmludGYoIlxc ZmZwbG9nbihmMSxkKVxuXAotICBmMSA9IGZsb2F0aW5nLXBvaW50IG51bWJlciBvciBpbnRlZ2Vy LlxuXAotICAgZCA9IGludGVnZXIuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIGZsb2F0 aW5nLXBvaW50IG51bWJlcjpcblwKLSAgVGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIGYxIHRvIGQg ZGVjaW1hbCBwbGFjZXMuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRk5fRlBS T1U6Ci0gICAgICAgIHByaW50ZigiXFxmZnByb3VuZChmMSxkKVxuXAotICBmMSA9IGZsb2F0aW5n LXBvaW50IG51bWJlciBvciBpbnRlZ2VyLlxuXAotICAgZCA9IGludGVnZXIuXG4iKTsKLSAgICAg ICAgcHJpbnRmKCJSZXR1cm5zIGZsb2F0aW5nLXBvaW50IG51bWJlcjpcblwKLSAgZjEgcm91bmRl ZCB0byBkIGRlY2ltYWwgcGxhY2VzLlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNl IEZOX0ZQU1FSOgotICAgICAgICBwcmludGYoIlxcZmZwc3FydChmMSxkKVxuXAotICBmMSA9IGZs b2F0aW5nLXBvaW50IG51bWJlciBvciBpbnRlZ2VyLlxuXAotICAgZCA9IGludGVnZXIuXG4iKTsK LSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIGZsb2F0aW5nLXBvaW50IG51bWJlcjpcblwKLSAgVGhl IHNxdWFyZSByb290IG9mIGYxIHRvIGQgZGVjaW1hbCBwbGFjZXMuXG4iKTsKLSAgICAgICAgYnJl YWs7Ci0jZW5kaWYgLyogRk5GTE9BVCAqLwotCi0jaWZkZWYgQ0tDSEFOTkVMSU8KLSAgICAgIGNh c2UgRk5fRkVPRjoKLSAgICAgICAgcHJpbnRmKCJcXGZfZW9mKG4xKVxuXAotICBuMSA9IGNoYW5u ZWwgbnVtYmVyLlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBudW1iZXI6XG5cCi0gIDEg aWYgY2hhbm5lbCBuMSBhdCBlbmQgb2YgZmlsZSwgMCBvdGhlcndpc2UuXG4iKTsKLSAgICAgICAg YnJlYWs7Ci0gICAgICBjYXNlIEZOX0ZQT1M6Ci0gICAgICAgIHByaW50ZigiXFxmX3BvcyhuMSlc blwKLSAgbjEgPSBjaGFubmVsIG51bWJlci5cbiIpOwotICAgICAgICBwcmludGYoIlJldHVybnMg bnVtYmVyOlxuXAotICBSZWFkL3dyaXRlIHBvaW50ZXIgb2YgY2hhbm5lbCBuMSBhcyBieXRlIG51 bWJlci5cbiIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRk5fTkxJTkU6Ci0gICAgICAg IHByaW50ZigiXFxmX2xpbmUobjEpXG5cCi0gIG4xID0gY2hhbm5lbCBudW1iZXIuXG4iKTsKLSAg ICAgICAgcHJpbnRmKCJSZXR1cm5zIG51bWJlcjpcblwKLSAgUmVhZC93cml0ZSBwb2ludGVyIG9m IGNoYW5uZWwgbjEgYXMgbGluZSBudW1iZXIuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj YXNlIEZOX0ZJTE5POgotICAgICAgICBwcmludGYoIlxcZl9oYW5kbGUobjEpXG5cCi0gIG4xID0g Y2hhbm5lbCBudW1iZXIuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIG51bWJlcjpcblwK LSAgRmlsZSAlcyBvZiBvcGVuIGZpbGUgb24gY2hhbm5lbCBuMS5cbiIsCi0jaWZkZWYgT1MyCi0g ICAgICAgICAgICAgICAiaGFuZGxlIgotI2Vsc2UKLSAgICAgICAgICAgICAgICJkZXNjcmlwdG9y IgotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0g ICAgICBjYXNlIEZOX0ZTVEFUOgotICAgICAgICBwcmludGYoIlxcZl9zdGF0dXMobjEpXG5cCi0g IG4xID0gY2hhbm5lbCBudW1iZXIuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zIG51bWJl cjpcblwKLSAgU3VtIG9mIG9wZW4gbW9kZXMgb2YgY2hhbm5lbCBuMTogMSA9IHJlYWQ7IDIgPSB3 cml0ZTsgNCA9IGFwcGVuZCwgb3I6XG5cCi0gIDAgaWYgbm90IG9wZW4uXG4iKTsKLSAgICAgICAg YnJlYWs7Ci0gICAgICBjYXNlIEZOX0ZHQ0hBUjoKLSAgICAgICAgcHJpbnRmKCJcXGZfZ2V0Y2hh cihuMSlcblwKLSAgbjEgPSBjaGFubmVsIG51bWJlci5cbiIpOwotICAgICAgICBwcmludGYoIiAg UmVhZHMgYSBjaGFyYWN0ZXIgZnJvbSBjaGFubmVsIG4xIGFuZCByZXR1cm5zIGl0LlxuIik7Ci0g ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGTl9GR0xJTkU6Ci0gICAgICAgIHByaW50ZigiXFxm X2dldGxpbmUobjEpXG5cCi0gIG4xID0gY2hhbm5lbCBudW1iZXIuXG4iKTsKLSAgICAgICAgcHJp bnRmKCIgIFJlYWRzIGEgbGluZSBmcm9tIGNoYW5uZWwgbjEgYW5kIHJldHVybnMgaXQuXG4iKTsK LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZOX0ZHQkxLOgotICAgICAgICBwcmludGYoIlxc Zl9nZXRibG9jayhuMSxuMilcblwKLSAgbjEgPSBjaGFubmVsIG51bWJlciwgbjIgPSBzaXplXG4i KTsKLSAgICAgICAgcHJpbnRmKAotIiAgUmVhZHMgYSBibG9jayBvZiBuMiBjaGFyYWN0ZXJzIGZy b20gY2hhbm5lbCBuMSBhbmQgcmV0dXJucyBpdC5cbiIpOwotICAgICAgICBicmVhazsKLSAgICAg IGNhc2UgRk5fRlBDSEFSOgotICAgICAgICBwcmludGYoIlxcZl9wdXRjaGFyKG4xLGMpXG5cCi0g IG4xID0gY2hhbm5lbCBudW1iZXIsIGMgPSBjaGFyYWN0ZXJcbiIpOwotICAgICAgICBwcmludGYo IiAgV3JpdGVzIGEgY2hhcmFjdGVyIHRvIGNoYW5uZWwgbjEuXG5cCi1SZXR1cm5zIG51bWJlcjpc blwKLSAgMSBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLlxu Iik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGTl9GUExJTkU6Ci0gICAgICAgIHByaW50 ZigiXFxmX3B1dGxpbmUobjEsczEpXG5cCi0gIG4xID0gY2hhbm5lbCBudW1iZXIsIHMxID0gc3Ry aW5nXG4iKTsKLSAgICAgICAgcHJpbnRmKAotIiAgV3JpdGVzIHRoZSBzdHJpbmcgczEgdG8gY2hh bm5lbCBuMSBhbmQgYWRkcyBhIGxpbmUgdGVybWluYXRvci5cblwKLVJldHVybnMgbnVtYmVyOlxu Iik7Ci0gICAgICAgIHByaW50ZigiICBIb3cgbWFueSBjaGFyYWN0ZXJzIHdyaXR0ZW4gaWYgc3Vj Y2Vzc2Z1bDtcblwKLSAgT3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJyb3IgY29kZS5cbiIKLSAgICAg ICAgICAgICAgICk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGTl9GUEJMSzoKLSAgICAg ICAgcHJpbnRmKCJcXGZfcHV0YmxvY2sobjEsczEpXG5cCi0gIG4xID0gY2hhbm5lbCBudW1iZXIs IHMxID0gc3RyaW5nXG4iKTsKLSAgICAgICAgcHJpbnRmKAotIiAgV3JpdGVzIHRoZSBzdHJpbmcg czEgdG8gY2hhbm5lbCBuMS5cblwKLSAgUmV0dXJucyBudW1iZXI6XG4iKTsKLSAgICAgICAgcHJp bnRmKCIgIEhvdyBtYW55IGNoYXJhY3RlcnMgd3JpdHRlbiBpZiBzdWNjZXNzZnVsO1xuXAotICBP dGhlcndpc2UgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLlxuIgotICAgICAgICAgICAgICAgKTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZOX0ZFUk1TRzoKLSAgICAgICAgcHJpbnRmKCJcXGZf ZXJybXNnKFtuMV0pXG5cCi0gIG4xID0gbnVtZXJpYyBlcnJvciBjb2RlLCBcXHYoZl9lcnJvcikg YnkgZGVmYXVsdC5cbiIpOwotICAgICAgICBwcmludGYoIiAgUmV0dXJucyB0aGUgYXNzb2NpYXRl ZCBlcnJvciBtZXNzYWdlIHN0cmluZy5cbiIpOwotICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBD S0NIQU5ORUxJTyAqLwotCi0gICAgICBjYXNlIEZOX0FBRFVNUDoKLSAgICAgICAgcHJpbnRmKCJc XGZhYWNvbnZlcnQobmFtZSwmYVssJmJdKVxuXAotICBuYW1lID0gbmFtZSBvZiBhc3NvY2lhdGl2 ZSBhcnJheSwgJmEgYW5kICZiID0gbmFtZXMgb2YgcmVndWxhciBhcnJheXMuXG4iKTsKLSAgICAg ICAgcHJpbnRmKAotIiAgQ29udmVydHMgdGhlIGdpdmVuIGFzc29jaWF0aXZlIGFycmF5IGludG8g dHdvIHJlZ3VsYXIgYXJyYXlzLCAmYSBhbmQgJmIsXG5cCi0gIGNvbnRhaW5pbmcgdGhlIGluZGlj ZXMgYW5kIHZhbHVlcywgcmVzcGVjdGl2ZWx5OlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJu cyBudW1iZXI6XG5cCi0gIEhvdyBtYW55IGVsZW1lbnRzIHdlcmUgY29udmVydGVkLlxuIik7Ci0g ICAgICAgIGJyZWFrOwotCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSAgICAgIGNhc2UgRk5fS1JCX1RL OgotICAgICAgICBwcmludGYoIlxcZmtyYnRpY2tldHMobilcblwKLSAgbiA9IEtlcmJlcm9zIHZl cnNpb24gbnVtYmVyICg0IG9yIDUpLlxuXAotICBSZXR1cm5zIHN0cmluZzpcblwKLSAgVGhlIG51 bWJlciBvZiBhY3RpdmUgS2VyYmVyb3MgNCBvciA1IHRpY2tldHMuXG5cCi0gIFJlc2V0cyB0aGUg dGlja2V0IGxpc3QgdXNlZCBieSBcXGZrcmJuZXh0dGlja2V0KG4pLlxuIik7Ci0gICAgICAgIGJy ZWFrOwotCi0gICAgICBjYXNlIEZOX0tSQl9OWDoKLSAgICAgICAgcHJpbnRmKCJcXGZrcmJuZXh0 dGlja2V0KG4pXG5cCi0gIG4gPSBLZXJiZXJvcyB2ZXJzaW9uIG51bWJlciAoNCBvciA1KS5cblwK LSAgUmV0dXJucyBzdHJpbmc6XG5cCi0gICAgVGhlIG5leHQgdGlja2V0IGluIHRoZSBLZXJiZXJv cyA0IG9yIDUgdGlja2V0IGxpc3QgdGhhdCB3YXMgc2V0IHVwIGJ5XG5cCi0gICAgdGhlIG1vc3Qg cmVjZW50IGludm9jYXRpb24gb2YgXFxma3JidGlja2V0cyhuKS5cbiIpOwotICAgICAgICBicmVh azsKLQotICAgICAgY2FzZSBGTl9LUkJfSVY6Ci0gICAgICAgIHByaW50ZigiXFxma3JiaXN2YWxp ZChuLG5hbWUpXG5cCi0gIG4gICAgPSBLZXJiZXJvcyB2ZXJzaW9uIG51bWJlciAoNCBvciA1KS5c blwKLSAgbmFtZSA9IGEgdGlja2V0IG5hbWUgYXMgcmV0dXJuZWQgYnkgXFxma3JibmV4dHRpY2tl dChuKS5cblwKLSAgUmV0dXJucyBudW1iZXI6XG5cCi0gICAgMSBpZiB0aGUgdGlja2V0IGlzIHZh bGlkLCAwIGlmIG5vdCB2YWxpZC5cblwKLSAgICBBIHRpY2tldCBpcyB2YWxpZCBpZiBhbGwgdGhl IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSB0cnVlOlxuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJc blwKLSAgICAoaSkgICBpdCBleGlzdHMgaW4gdGhlIGN1cnJlbnQgY2FjaGUgZmlsZTtcblwKLSAg ICAoaWkpICBpdCBpcyBub3QgZXhwaXJlZDtcblwKLSAgICAoaWlpKSBpdCBpcyBub3QgbWFya2Vk IGludmFsaWQgKEs1IG9ubHkpO1xuXAotICAgIChpdikgIGl0IHdhcyBpc3N1ZWQgZnJvbSB0aGUg Y3VycmVudCBJUCBhZGRyZXNzXG4iKTsKLSAgICAgICAgcHJpbnRmKCJcbiAgVGhpcyB2YWx1ZSBj YW4gYmUgdXNlZCBpbiBhbiBJRiBzdGF0ZW1lbnQsIGUuZy46XG5cbiIpOwotICAgICAgICBwcmlu dGYoIiAgICBpZiBcXGZrcmJpc3ZhbGlkKDQsa3JidGd0LkZPTy5CQVIuRURVQEZPTy5CQVIuRURV KSAuLi5cbiIpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBGTl9LUkJfVFQ6Ci0gICAg ICAgIHByaW50ZigiXFxma3JidGltZWxlZnQobixuYW1lKVxuXAotICBuICAgID0gS2VyYmVyb3Mg dmVyc2lvbiBudW1iZXIgKDQgb3IgNSkuXG5cCi0gIG5hbWUgPSBhIHRpY2tldCBuYW1lIGFzIHJl dHVybmVkIGJ5IFxcZmtyYm5leHR0aWNrZXQobikuXG5cCi0gIFJldHVybnMgc3RyaW5nOlxuXAot ICAgIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyByZW1haW5pbmcgaW4gdGhlIHRpY2tldCdzIGxpZmV0 aW1lLlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEZOX0tSQl9GRzoKLSAgICAg ICAgcHJpbnRmKCJcXGZrcmJmbGFncyhuLG5hbWUpXG5cCi0gIG4gICAgPSBLZXJiZXJvcyB2ZXJz aW9uIG51bWJlciAoNCBvciA1KS5cblwKLSAgbmFtZSA9IGEgdGlja2V0IG5hbWUgYXMgcmV0dXJu ZWQgYnkgXFxma3JibmV4dHRpY2tldChuKS5cblwKLSAgUmV0dXJucyBzdHJpbmc6XG4iKTsKLSAg ICAgICAgcHJpbnRmKAotIiAgICBUaGUgZmxhZ3Mgc3RyaW5nIGFzIHJlcG9ydGVkIHdpdGggQVVU SCBLNSBMSVNUIC9GTEFHUy4gIFRoaXMgc3RyaW5nIGNhblxuXAotICAgIGJlIHNlYXJjaGVkIGZv ciBhIHBhcnRpY3VsYXIgZmxhZyB1c2luZyB0aGUgXFxmaW5kZXgoKSBmdW5jdGlvbiB3aGVuXG5c Ci0gICAgU0VUIENBU0UgaXMgT04gKGZvciBjYXNlIHNlbnNpdGl2ZSBzZWFyY2hlcykuICBGbGFn IHN0cmluZ3MgYXJlIG9ubHlcblwKLSAgICBhdmFpbGFibGUgZm9yIEs1IHRpY2tldHMuXG4iKTsK LSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLQotICAgICAgY2FzZSBG Tl9QQVRURVJOOgotICAgICAgICBwcmludGYoIlxcZnBhdHRlcm4ocylcblwKLSAgcyA9IHN0cmlu Z1xuXAotICBSZXR1cm5zIHN0cmluZzogcyB3aXRoIGFueSB2YXJpYWJsZXMsIGV0YywgZXZhbHVh dGVkIGluIHRoZSBub3JtYWwgbWFubmVyLlxuIgotICAgICAgICAgICAgICAgKTsKLSAgICAgICAg cHJpbnRmKCJcCi0gIEZvciB1c2Ugd2l0aCBJTlBVVCwgTUlOUFVULCBhbmQgUkVJTlBVVCB0byBk ZWNsYXJlIHRoYXQgYSBzZWFyY2ggdGFyZ2V0IGlzXG5cCi0gIGEgcGF0dGVybiByYXRoZXIgdGhh biBhIGxpdGVyYWwgc3RyaW5nLlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEZO X0hFWDJOOgotICAgICAgICBwcmludGYoIlxcZmhleDJuKHMpXG5cCi0gIHMgPSBoZXhhZGVjaW1h bCBudW1iZXJcblwKLSAgUmV0dXJucyBkZWNpbWFsIGVxdWl2YWxlbnQuXG4iKTsKLSAgICAgICAg YnJlYWs7Ci0KLSAgICAgIGNhc2UgRk5fSEVYMklQOgotICAgICAgICBwcmludGYoIlxcZmhleDJp cChzKVxuXAotICBzID0gOC1kaWdpdCBoZXhhZGVjaW1hbCBudW1iZXJcblwKLSAgUmV0dXJucyB0 aGUgZXF1aXZhbGVudCBkZWNpbWFsIGRvdHRlZCBJUCBhZGRyZXNzLlxuIik7Ci0gICAgICAgIGJy ZWFrOwotCi0gICAgICBjYXNlIEZOX0lQMkhFWDoKLSAgICAgICAgcHJpbnRmKCJcXGZpcDJoZXgo cylcblwKLSAgcyA9IGRlY2ltYWwgZG90dGVkIElQIGFkZHJlc3NcblwKLSAgUmV0dXJucyB0aGUg ZXF1aXZhbGVudCA4LWRpZ2l0IGhleGFkZWNpbWFsIG51bWJlci5cbiIpOwotICAgICAgICBicmVh azsKLQotICAgICAgY2FzZSBGTl9PQ1QyTjoKLSAgICAgICAgcHJpbnRmKCJcXGZvY3QybihzKVxu XAotICBzID0gb2N0YWwgbnVtYmVyXG5cCi0gIFJldHVybnMgZGVjaW1hbCBlcXVpdmFsZW50Llxu Iik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEZOX1RPQjY0OgotICAgICAgICBwcmlu dGYoIlxcYjY0ZW5jb2RlKHMpXG5cCi0gIHMgPSBzdHJpbmcgY29udGFpbmluZyBubyBOVUwgYnl0 ZXNcblwKLSAgUmV0dXJucyBCYXNlLTY0IGVuY29kaW5nIG9mIHN0cmluZy5cbiIpOwotICAgICAg ICBicmVhazsKLQotICAgICAgY2FzZSBGTl9GTUI2NDoKLSAgICAgICAgcHJpbnRmKCJcXGI2NGRl Y29kZShzKVxuXAotICBzID0gc3RyaW5nIGluIEJhc2UtNjQgbm90YXRpb25cblwKLSAgUmV0dXJu cyB0aGUgZGVjb2RlZCBzdHJpbmcgb3IgYW4gZXJyb3IgY29kZSBpZiBzIG5vdCB2YWxpZC5cbiIp OwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBGTl9SQURJWDoKLSAgICAgICAgcHJpbnRm KCJcXGZyYWRpeChzLG4xLG4yKVxuXAotICBzID0gbnVtYmVyIGluIHJhZGl4IG4xXG5cCi0gIFJl dHVybnMgdGhlIG51bWJlcidzIHJlcHJlc2VudGF0aW9uIGluIHJhZGl4IG4yLlxuIik7Ci0gICAg ICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEZOX0pPSU46Ci0gICAgICAgIHByaW50ZigiXFxmam9p bigmYVssc1ssbjFbLG4yXV1dKVxuXAotICAmYSA9IGFycmF5IGRlc2lnbmF0b3IsIGNhbiBpbmNs dWRlIHJhbmdlIHNwZWNpZmllci5cblwKLSAgcyAgPSBvcHRpb25hbCBzZXBhcmF0b3IuXG4iKTsK LSAgICAgICAgcHJpbnRmKCJcCi0gIG4xID0gbm9uemVybyB0byBwdXQgZ3JvdXBpbmcgYXJvdW5k IGVsZW1lbnRzIHRoYXQgY29udGFpbiBzcGFjZXM7XG5cCi0gICAgICAgc2VlIFxcZndvcmQoKSBn cm91cGluZyBtYXNrIGZvciB2YWx1ZXMgb2Ygbi5cbiIpOwotICAgICAgICBwcmludGYoIlwKLSAg bjIgPSAwIG9yIG9taXR0ZWQgdG8gcHV0IHNwYWNlcyBiZXR3ZWVuIGVsZW1lbnRzOyBub256ZXJv IHRvIG9taXQgdGhlbS5cbiIpOwotICAgICAgICBwcmludGYoIlwKLSAgUmV0dXJucyB0aGUgKHNl bGVjdGVkKSBlbGVtZW50cyBvZiB0aGUgYXJyYXkgam9pbmVkIHRvIHRvZ2V0aGVyLFxuXAotICBz ZXBhcmF0ZWQgYnkgdGhlIHNlcGFyYXRvci5cbiIpOwotCXByaW50ZigiXG5cCi0gIElmIHMgaXMg Q1NWIChsaXRlcmFsbHkpLCB0aGF0IG1lYW5zIHRoZSBhcnJheSBpcyB0byBiZSB0cmFuc2Zvcm1l ZCBpbnRvIGFcblwKLSAgY29tbWEtc2VwYXJhdGVkIGxpc3QuICBObyBvdGhlciBhcmd1bWVudHMg YXJlIG5lZWRlZC4gIElmIHMgaXMgVFNWLCB0aGVuXG5cCi0gIGEgdGFiLXNlcGFyYXRlZCBsaXN0 IGlzIGNyZWF0ZWQuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRk5fU1VCU1Q6 Ci0gICAgICAgIHByaW50ZigiXFxmc3Vic3RpdHV0ZShzMSxzMixzMylcblwKLSAgczEgPSBTb3Vy Y2Ugc3RyaW5nLlxuXAotICBzMiA9IExpc3Qgb2YgY2hhcmFjdGVycyB0byBiZSB0cmFuc2xhdGVk LlxuXAotICBzMyA9IExpc3Qgb2YgY2hhcmFjdGVycyB0byB0cmFuc2xhdGUgdGhlbSB0by5cbiIp OwotICAgICAgICBwcmludGYoCi0iICBSZXR1cm5zOiBzMSwgd2l0aCBlYWNoIGNoYXJhY3RlciB0 aGF0IGlzIGluIHMyIHJlcGxhY2VkIGJ5IHRoZVxuXAotICBjb3JyZXNwb25kaW5nIGNoYXJhY3Rl ciBpbiBzMy4gIHMyIGFuZCBzMyBjYW4gY29udGFpbiBBU0NJSSByYW5nZXMsXG5cCi0gIGxpa2Ug W2Etel0uICBBbnkgY2hhcmFjdGVycyBpbiBzMiB0aGF0IGRvbid0IGhhdmUgY29ycmVzcG9uZGlu Z1xuXAotICBjaGFyYWN0ZXJzIGluIHMzIChhZnRlciByYW5nZSBleHBhbnNpb24pIGFyZSByZW1v dmVkIGZyb20gdGhlIHJlc3VsdC5cblwKLSAgVGhpcyBmdW5jdGlvbiB3b3JrcyBvbmx5IHdpdGgg c2luZ2xlLWJ5dGUgY2hhcmFjdGVyLXNldHNcbiIpOwotICAgICAgICBicmVhazsKLQotI2lmbmRl ZiBOT1NFWFAKLSAgICAgIGNhc2UgRk5fU0VYUDoKLSAgICAgICAgcHJpbnRmKCJcXGZzZXhwcmVz c2lvbihzMSlcblwKLSAgczEgPSBTLUV4cHJlc3Npb24uXG4iKTsKLSAgICAgICAgcHJpbnRmKCIg IFJldHVybnM6IFRoZSByZXN1bHQgb2YgZXZhbHVhdGluZyBzMS5cbiIpOwotICAgICAgICBicmVh azsKLQotI2VuZGlmIC8qIE5PU0VYUCAqLwotCi0gICAgICBjYXNlIEZOX0NNRFNUSzoKLSAgICAg ICAgcHJpbnRmKCJcXGZjbWRzdGFjayhuMSxuMilcblwKLSAgbjEgPSBDb21tYW5kLXN0YWNrIGxl dmVsLCAwIHRvIFxcdihjbWRsZXZlbCksIGRlZmF1bHQgXFx2KGNtZGxldmVsKS5cblwKLSAgbjIg PSBGdW5jdGlvbiBjb2RlLCAwIG9yIDEuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zOlxu Iik7Ci0gICAgICAgIHByaW50ZigiICBuMiA9IDA6IG5hbWUgb2Ygb2JqZWN0IGF0IHN0YWNrIGxl dmVsIG4xXG5cCi0gIG4yID0gMTogdHlwZSBvZiBvYmplY3QgYXQgc3RhY2sgbGV2ZWwgbjE6XG5c Ci0gICAgIDAgPSBpbnRlcmFjdGl2ZSBwcm9tcHRcblwKLSAgICAgMSA9IGNvbW1hbmQgZmlsZVxu XAotICAgICAyID0gbWFjcm9cbiIKLSAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgYnJlYWs7 Ci0KLSNpZmRlZiBDS0ZMT0FUCi0gICAgICBjYXNlIEZOX0RJRkRBVEU6Ci0gICAgICAgIHByaW50 ZigiXFxmZGlmZmRhdGVzKGQxLGQyKVxuXAotICBkMSA9IGZyZWUtZm9ybWF0IGRhdGUgYW5kL29y IHRpbWUgKGRlZmF1bHQgPSBOT1cpLlxuXAotICBkMiA9IGRpdHRvLlxuIik7Ci0gICAgICAgIHBy aW50ZigiUmV0dXJuczpcbiIpOwotICAgICAgICBwcmludGYoIiAgRGlmZmVyZW5jZSBleHByZXNz ZWQgYXMgZGVsdGEgdGltZTpcbiIpOwotICAgICAgICBwcmludGYoIiAgTmVnYXRpdmUgaWYgZDIg aXMgbGF0ZXIgdGhhbiBkMSwgb3RoZXJ3aXNlIHBvc2l0aXZlLlxuIik7Ci0gICAgICAgIGJyZWFr OwotI2VuZGlmIC8qIENLRkxPQVQgKi8KLQotICAgICAgY2FzZSBGTl9DTVBEQVRFOgotICAgICAg ICBwcmludGYoIlxcZmNtcGRhdGVzKGQxLGQyKVxuXAotICBkMSA9IGZyZWUtZm9ybWF0IGRhdGUg YW5kL29yIHRpbWUgKGRlZmF1bHQgPSBOT1cpLlxuXAotICBkMiA9IGRpdHRvLlxuIik7Ci0gICAg ICAgIHByaW50ZigiUmV0dXJuczpcbiIpOwotICAgICAgICBwcmludGYoIiAgMCBpZiBkMSBpcyBl cXVhbCB0byBkMjtcblwKLSAgMSBpZiBkMSBpcyBsYXRlciB0aGFuIGQyO1xuXAotIC0xIGlmIGQx IGlzIGVhcmxpZXIgdGhhbiBkMi5cbiIpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBG Tl9UT0dNVDoKLSAgICAgICAgcHJpbnRmKCJcXGZ1dGNkYXRlKGQxKVxuXAotICBkMSA9IGZyZWUt Zm9ybWF0IGRhdGUgYW5kL29yIHRpbWUgKGRlZmF1bHQgPSBOT1cpLlxuIik7Ci0gICAgICAgIHBy aW50ZigiUmV0dXJuczpcbiIpOwotICAgICAgICBwcmludGYoIiAgRGF0ZS10aW1lIGNvbnZlcnRl ZCB0byBVVEMgKEdNVCkgeXl5eW1tZGQgaGg6bW06c3MuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0K LSNpZmRlZiBUQ1BTT0NLRVQKLSAgICAgIGNhc2UgRk5fSFNUQUREOgotICAgICAgICBwcmludGYo IlxcZmFkZHIybmFtZShzKVxuXAotICBzID0gbnVtZXJpYyBJUCBhZGRyZXNzLlxuIik7Ci0gICAg ICAgIHByaW50ZigiUmV0dXJuczpcbiIpOwotICAgICAgICBwcmludGYoIiAgQ29ycmVzcG9uZGlu ZyBJUCBob3N0bmFtZSBpZiBmb3VuZCwgb3RoZXJ3aXNlIG51bGwuXG4iKTsKLSAgICAgICAgYnJl YWs7Ci0gICAgICBjYXNlIEZOX0hTVE5BTToKLSAgICAgICAgcHJpbnRmKCJcXGZuYW1lMmFkZHIo cylcblwKLSAgcyA9IElQIGhvc3QgbmFtZS5cbiIpOwotICAgICAgICBwcmludGYoIlJldHVybnM6 XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIENvcnJlc3BvbmRpbmcgbnVtZXJpYyBJUCBhZGRyZXNz IGlmIGZvdW5kLCBlbHNlIG51bGwuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogVENQ U09DS0VUICovCi0KLSAgICAgIGNhc2UgRk5fREVMU0VDOgotICAgICAgICBwcmludGYoIlxcZmRl bHRhMnNlY3MoZHQpXG5cCi0gIGR0ID0gRGVsdGEgdGltZSwgZS5nLiArM2QxNDoyNzo1Mi5cbiIp OwotICAgICAgICBwcmludGYoIlJldHVybnM6XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIFRoZSBj b3JyZXNwb25kaW5nIG51bWJlciBvZiBzZWNvbmRzLlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0g ICAgICBjYXNlIEZOX1BDX0RVOgotICAgICAgICBwcmludGYoIlxcZmRvczJ1bml4cGF0aChwKVxu XAotICBwID0gc3RyaW5nLCBET1MgcGF0aG5hbWUuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1 cm5zOlxuIik7Ci0gICAgICAgIHByaW50ZigiICBUaGUgYXJndW1lbnQgY29udmVydGVkIHRvIGEg VW5peCBwYXRobmFtZS5cbiIpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBGTl9QQ19V RDoKLSAgICAgICAgcHJpbnRmKCJcXGZ1bml4MmRvc3BhdGgocClcblwKLSAgcCA9IHN0cmluZywg VW5peCBwYXRobmFtZS5cbiIpOwotICAgICAgICBwcmludGYoIlJldHVybnM6XG4iKTsKLSAgICAg ICAgcHJpbnRmKCIgIFRoZSBhcmd1bWVudCBjb252ZXJ0ZWQgdG8gYSBET1MgcGF0aG5hbWUuXG4i KTsKLSAgICAgICAgYnJlYWs7Ci0KLSNpZmRlZiBGTl9FUlJNU0cKLSAgICAgIGNhc2UgRk5fRVJS TVNHOgotICAgICAgICBwcmludGYoIlxcZmVycnN0cmluZyhuKVxuXAotICBuID0gcGxhdGZvcm0t ZGVwZW5kZW50IG51bWVyaWMgZXJyb3IgY29kZS5cbiIpOwotICAgICAgICBwcmludGYoIlJldHVy bnM6XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIFRoZSBjb3JyZXNwb25kaW5nIGVycm9yIHN0cmlu Zy5cbiIpOwotICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBGTl9FUlJNU0cgKi8KLQotICAgICAg Y2FzZSBGTl9LV1ZBTDoKLSAgICAgICAgcHJpbnRmKCJcXGZrZXl3b3JkdmFsdWUoczFbLHMyXSlc blwKLSAgczEgPSBzdHJpbmcgb2YgdGhlIGZvcm0gXCJuYW1lPXZhbHVlXCJcblwKLSAgczIgPSBv bmUgbW9yZSBzZXBhcmF0b3IgY2hhcmFjdGVycyAoZGVmYXVsdCBzZXBhcmF0b3IgaXMgXCI9XCIp XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgICAgQXNzaWducyB0aGUgdmFsdWUsIGlmIGFueSwgdG8g dGhlIG5hbWVkIG1hY3JvIGFuZCBzZXRzXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgICAgdGhlIFxc dihsYXN0a2V5d29yZHZhbHVlKSB0byB0aGUgbWFjcm8gbmFtZS5cbiIpOwotICAgICAgICBwcmlu dGYoIiAgICBJZiBubyB2YWx1ZSBpcyBnaXZlbiwgdGhlIG1hY3JvIGlzIHVuZGVmaW5lZC5cbiIp OwotICAgICAgICBwcmludGYoIlJldHVybnM6XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgLTEgb24g ZXJyb3JcbiIpOwotICAgICAgICBwcmludGYoIiAgMCBpZiBubyBrZXl3b3JkIG9yIHZhbHVlIHdl cmUgZm91bmRcbiIpOwotICAgICAgICBwcmludGYoIiAgMSBpZiBhIGtleXdvcmQgd2FzIGZvdW5k IGJ1dCBubyB2YWx1ZVxuIik7Ci0gICAgICAgIHByaW50ZigiICAyIGlmIGEga2V5d29yZCBhbmQg YSB2YWx1ZSB3ZXJlIGZvdW5kXG4iKTsKLSAgICAgICAgcHJpbnRmKCJTeW5vbnltOiBcXGt3dmFs dWUoczFbLHMyXSlcbiIpOwotICAgICAgICBicmVhazsKLQotI2lmZGVmIENPTU1FTlQKLSAgICAg IGNhc2UgRk5fU0xFRVA6Ci0gICAgICAgIHByaW50ZigiXFxmc2xlZXAobilcblwKLSAgbiA9IG51 bWJlciBvZiBzZWNvbmRzXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgICAgUGF1c2VzIGZvciB0aGUg Z2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMuXG4iKTsKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5zOiB0 aGUgZW1wdHkgc3RyaW5nLlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEZOX01T TEVFUDoKLSAgICAgICAgcHJpbnRmKCJcXGZtc2xlZXAobilcblwKLSAgbiA9IG51bWJlciBvZiBt aWxsaXNlY29uZHNcbiIpOwotICAgICAgICBwcmludGYoIiAgICBQYXVzZXMgZm9yIHRoZSBnaXZl biBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLlxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJuczog dGhlIGVtcHR5IHN0cmluZy5cbiIpOwotICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBDT01NRU5U ICovCi0KLSNpZmRlZiBOVAotICAgICAgY2FzZSBGTl9TTkFNRToKLSAgICAgICAgcHJpbnRmKCJc XGZzaG9ydHBhdGhuYW1lKHMpXG5cCi0gIHMgPSBmaWxlIG9yIGRpcmVjdG9yeSBuYW1lIHN0cmlu Z1xuIik7Ci0gICAgICAgIHByaW50ZigiICAgIFJldHVybnMgdGhlIHNob3J0IHBhdGggZm9ybSBv ZiB0aGUgZ2l2ZW4gaW5wdXQuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRk5f TE5BTUU6Ci0gICAgICAgIHByaW50ZigiXFxmbG9uZ3BhdGhuYW1lKHMpXG5cCi0gIHMgPSBmaWxl IG9yIGRpcmVjdG9yeSBuYW1lIHN0cmluZ1xuIik7Ci0gICAgICAgIHByaW50ZigiICAgIFJldHVy bnMgdGhlIGxvbmcgcGF0aCBmb3JtIG9mIHRoZSBnaXZlbiBpbnB1dC5cbiIpOwotICAgICAgICBi cmVhazsKLSNlbHNlCi0gICAgICBjYXNlIEZOX1NOQU1FOgotICAgICAgICBwcmludGYoIlxcZnNo b3J0cGF0aG5hbWUocylcblwKLSAgICBTeW5vbnltIGZvciBcZnBhdGhuYW1lKClcbiIpOwotICAg ICAgICBicmVhazsKLQotICAgICAgY2FzZSBGTl9MTkFNRToKLSAgICAgICAgcHJpbnRmKCJcXGZs b25ncGF0aG5hbWUocylcblwKLSAgICBTeW5vbnltIGZvciBcZnBhdGhuYW1lKClcbiIpOwotICAg ICAgICBicmVhazsKLSNlbmRpZiAvKiBOVCAqLwotCi0gICAgICBjYXNlIEZOX0VNQUlMOgotICAg ICAgICBwcmludGYoIlxcZmVtYWlsYWRkcmVzcyhzKVxuXAotICBzID0gRnJvbTogb3IgU2VuZGVy OiBoZWFkZXIgZnJvbSBhbiBSRkMyODIyLWZvcm1hdCBlbWFpbCBtZXNzYWdlXG4iKTsKLSAgICAg ICAgcHJpbnRmKCIgICAgRXh0cmFjdHMgYW5kIHJldHVybnMgdGhlIGVtYWlsIGFkZHJlc3MuXG4i KTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRk5fUElDVFVSRToKLSAgICAgICAgcHJp bnRmKCJcXGZwaWN0dXJlaW5mbyhzWywmYV0pXG5cCi0gIHMgID0gRmlsZSBzcGVjaWZpY2F0aW9u IG9mIGEgSlBHIG9yIEdJRiBwaWN0dXJlIGZpbGUuXG5cCi0gICZhID0gT3B0aW9uYWwgYXJyYXkg bmFtZS5cblxuIik7Ci0gICAgICAgIHByaW50ZigiUmV0dXJucyBpbnRlZ2VyOlxuXAotICAwIGlm IGZpbGUgbm90IGZvdW5kIG9yIG5vdCByZWNvZ25pemVkO1xuXAotICAxIGlmIG9yaWVudGF0aW9u IGlzIGxhbmRzY2FwZTtcblwKLSAgMiBpZiBvcmllbnRhdGlvbiBpcyBwb3J0cmFpdC5cblxuIik7 IAotCXByaW50ZigiICBJZiBhbiBhcnJheSBuYW1lIGlzIGluY2x1ZGVkLCBlbGVtZW50IDEgaXMg ZmlsbGVkIFwKLWluIHdpdGggdGhlIGltYWdlIHdpZHRoXG5cCi0gIGluIHBpeGVscywgYW5kIGVs ZW1lbnQgMiB0aGUgaW1hZ2UgaGVpZ2h0LlxuIik7Ci0JYnJlYWs7Ci0KLSAgICAgIGNhc2UgRk5f UElEOgotICAgICAgICBwcmludGYoIlxcZmdldHBpZGluZm8objEpXG5cCi0gbjEgPSBOdW1lcmlj IHByb2Nlc3MgSURcbiIpOwotICAgICAgICBwcmludGYoIlJldHVybnMgaW50ZWdlcjpcblwKLSAt MSBvbiBmYWlsdXJlIHRvIGdldCBpbmZvcm1hdGlvbjtcblwKLSAgMSBpZiBuMSBpcyB0aGUgSUQg b2YgYW4gYWN0aXZlIHByb2Nlc3M7XG5cCi0gIDAgaWYgdGhlIHByb2Nlc3MgZG9lcyBub3QgZXhp c3QuXG4iKTsgCi0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEZOX0ZVTkM6Ci0JcHJpbnRm KCJcXGZmdW5jdGlvbihzMSlcblwKLSBzMSA9IG5hbWUgb2YgZnVuY3Rpb24uXG4iKTsKLSAgICAg ICAgcHJpbnRmKCJSZXR1cm5zIGludGVnZXI6XG5cCi0gIDEgaWYgczEgaXMgdGhlIG5hbWUgb2Yg YW4gYXZhaWxhYmxlIGJ1aWx0LWluIGZ1bmN0aW9uO1xuXAotICAwIG90aGVyd2lzZS5cbiIpOyAK LSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRk5fUkVDVVJTRToKLQlwcmludGYoIlxcZnJl Y3Vyc2UoczEpXG5cCi0gczEgPSBuYW1lIG9mIFxcJnggb3IgXFwmeFtdIHR5cGUgdmFyaWFibGVc biIpOwotICAgICAgICBwcmludGYoIlJldHVybnMgdGhlIHJlc3VsdCBvZiBldmFsdWF0aW5nIHRo ZSB2YXJpYWJsZSByZWN1cnNpdmVseS5cbiIpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2Fz ZSBGTl9TUVVFRVpFOgotICAgICAgICBwcmludGYoIlxcZnNxdWVlemUocylcblwKLSAgcyA9IHN0 cmluZ1xuXAotICAgIFJldHVybnMgc3RyaW5nIHdpdGggbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hp dGVzcGFjZSByZW1vdmVkLCBUYWJzXG5cCi0gICAgY29udmVydGVkIHRvIFNwYWNlcywgYW5kIG11 bHRpcGxlIHNwYWNlcyBjb252ZXJ0ZWQgdG8gc2luZ2xlIHNwYWNlcy5cbiIpOwotICAgICAgICBi cmVhazsKLQotI2lmbmRlZiBOT0NTRVRTCi0gICAgICBjYXNlIEZOX1hMQVRFOgotICAgICAgICBw cmludGYoIlxcZmN2dGNzZXQocyxjc2V0MSxjc2V0MilcblwKLSAgcyA9IHN0cmluZ1xuXAotICAg IFJldHVybnMgc3RyaW5nIGNvbnZlcnRlZCBmcm9tIGNoYXJhY3RlciBzZXQgY3NldDEgdG8gY3Nl dDIsIHdoZXJlIGNzZXQxXG5cCi0gICAgYW5kIGNzZXQyIGFyZSBuYW1lcyBvZiBGaWxlIENoYXJh Y3Rlci1TZXRzIFwKLSgnc2V0IGZpbGUgY2hhciA/JyBmb3IgYSBsaXN0KS5cbiIpOwotICAgICAg ICBicmVhazsKLSNlbmRpZgkvKiBOT0NTRVRTICovCi0KLSAgICAgIGNhc2UgRk5fVU5QQ1Q6Ci0g ICAgICAgIHByaW50ZigiXFxmZGVjb2RlaGV4KHMxWyxzMl0pXG5cCi0gIHMxLCBzMiA9IHN0cmlu Z3NcblwKLSAgICBEZWNvZGVzIGEgc3RyaW5nIHMxIHRoYXQgY29udGFpbnMgcHJlZml4ZWQgaGV4 IGJ5dGVzLiAgczIgaXMgdGhlIHByZWZpeDtcblwKLSAgICB0aGUgZGVmYXVsdCBpcyAlJSUlLiAg WW91IGNhbiBzcGVjaWZ5IGFueSBvdGhlciBwcmVmaXggb25lIG9yIHR3byBieXRlc1xuXAotICAg IGxvbmcuICBJZiB0aGUgcHJlZml4IGNvbnRhaW5zIGxldHRlcnMgKHN1Y2ggYXMgMHgpLCBjYXNl IGlzIGluZ29yZWQuXG5cCi0gICAgUmV0dXJucyBzdHJpbmcgczEgd2l0aCBoZXggZXNjYXBlcyBy ZXBsYWNlZCBieSB0aGUgYnl0ZXMgdGhleSBcCi1yZXByZXNlbnQuXG4iKTsKLSAgICAgICAgYnJl YWs7Ci0KLSAgICAgIGNhc2UgRk5fU1RSSU5HVDoKLSAgICAgICAgcHJpbnRmKCJcXGZzdHJpbmd0 eXBlKHMpXG5cCi0gIHMgPSBzdHJpbmdcblwKLSAgICBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2Vu dGluZyB0aGUgdHlwZSBvZiBpdHMgc3RyaW5nIGFyZ3VtZW50IHMxOlxuXAotICAgIDdCSVQsIDhC SVQsIFVURjgsIFRFWFQsIG9yIEJJTkFSWS4gIFRFWFQgbWVhbnMgc29tZSBraW5kIG9mIHRleHRc blwKLSAgICBvdGhlciB0aGFuIDdCSVQsIDhCSVQsIG9yIFVURjggKHRoaXMgcHJvYmFibHkgd2ls bCBuZXZlciBhcHBlYXIpLlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEZOX1NU UkNNUDoKLSAgICAgICAgcHJpbnRmKCJcXGZzdHJjbXAoczEsczJbLGNhc2VbLHN0YXJ0WyxsZW5n dGhdXV0pXG5cCi0gIHMxLCBzMiA9IHN0cmluZ3NcblwKLSAgY2FzZSwgc3RhcnQsIGxlbmd0aCA9 IG51bWJlcnMgb3IgYXJpdGhtZXRpYyBleHByZXNzaW9ucy5cblwKLSAgICBjYXNlID0gMCBbZGVm YXVsdF0gbWVhbnMgdG8gZG8gYSBjYXNlLWluZGVwZW5kZW50IGNvbXBhcmlzb247XG5cCi0gICAg bm9uemVybyBjYXNlIHJlcXVlc3RzIGEgY2FzZS1zZW5zaXRpdmUgY29tcGFyaXNvbi5cblwKLSAg ICBUaGUgb3B0aW9uYWwgc3RhcnQgYW5kIGxlbmd0aCBhcmd1bWVudHMgYXBwbHkgdG8gYm90aCBz MSBhbmQgczJcblwKLSAgICBhbmQgYWxsb3cgc3BlY2lmaWNhdGlvbiBvZiBzdWJzdHJpbmdzIGlm IGl0IGlzIG5vdCBkZXNpcmVkIHRvIGNvbXBhcmVcblwKLSAgICB0aGUgd2hvbGUgc3RyaW5ncy4g IFJlc3VsdHMgZm9yIG5vbi1BU0NJSSBzdHJpbmdzIGFyZSBpbXBsZW50YXRpb24tXG5cCi0gICAg YW5kIGxvY2FsZS1kZXBlbmRlbnQuXG5cCi0gIFJldHVybnMgYSBudW1iZXI6XG5cCi0gICAgLTE6 IHMxIGlzIGxleGljYWxseSBsZXNzIHRoYW4gczI7XG5cCi0gICAgIDA6IHMxIGFuZCBzMiBhcmUg bGV4aWNhbGx5IGVxdWFsO1xuXAotICAgICAyOiBzMSBpcyBsZXhpY2FsbHkgZ3JlYXRlciB0aGFu IHMyLlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBwcmlu dGYoIlNvcnJ5LCBoZWxwIG5vdCBhdmFpbGFibGUgZm9yIFwiJXNcIlxuIixjbWRidWYpOwotICAg IH0KLSAgIHByaW50ZigiXG4iKTsKLSAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAvKiBOT1NQTCAq LwotCi0jaWZkZWYgT1MyCi0jaWZuZGVmIE5PS1ZFUkJTCi0KLS8qICBEIE8gSCBLIFYgRSBSIEIg IC0tICBHaXZlIGhlbHAgZm9yIGEgS3ZlcmIgICovCi0KLWludAotZG9oa3ZlcmIoeHgpIGludCB4 eDsgewotICAgIGludCB4LGksZm91bmQsYnV0dG9uLGV2ZW50OwotCi0gICAgaWYgKHh4ID09IC0z KSB7Ci0gICAgICAgIHByaW50ZigiXG4gVHlwZSBTSE9XIEtWRVJCUyB0byBzZWUgYSBsaXN0IG9m IGF2YWlsYWJsZSBLdmVyYnMuXG4iCi0gICAgICAgICAgICAgICApOwotICAgICAgICBwcmludGYo Ci0iIFR5cGUgSEVMUCBLVkVSQiA8bmFtZT4gdG8gc2VlIHRoZSBjdXJyZW50IGRlZmluaXRpb24g b2YgYSBnaXZlbiBLdmVyYi5cblxuIgotICAgICAgICAgICAgICApOwotICAgICAgICByZXR1cm4o LTkpOwotICAgIH0KLSAgICBpZiAoeHggPCAwKSByZXR1cm4oeHgpOwotICAgIGlmICgoeCA9IGNt Y2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgIHN3aXRjaCAoIHh4ICkgewotICAgICAgICAvKiBE RUMgVlQga2V5Ym9hcmQga2V5IGRlZmluaXRpb25zICovCi0KLSAgICBjYXNlICBLX0NPTVBPU0Ug OiAgICAgICAgICAgICAgICAgICAvKiBDb21wb3NlIGtleSAqLwotICAgICAgICBwcmludGYoIlxc S2NvbXBvc2UgICAgICAgICAgIENvbXBvc2UgYW4gYWNjZW50ZWQgY2hhcmFjdGVyXG4iKTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19DX1VOSTE2IDogICAgICAgICAgICAgICAgICAgLyog VUNTMiBrZXkgKi8KLSAgICAgICAgcHJpbnRmKCJcXEt1Y3MyICAgICAgICAgICAgICBFbnRlciBh IFVuaWNvZGUgY2hhcmFjdGVyXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0KLS8qIERFQyBhcnJvdyBr ZXlzICovCi0KLSAgICBjYXNlICBLX1VQQVJSICAgICA6ICAgICAgICAgICAgICAgICAvKiBERUMg VXAgQXJyb3cga2V5ICovCi0gICAgICAgIHByaW50ZigiXFxLdXBhcnIgICAgICAgICBUcmFuc21p dCBUZXJtaW5hbCBVcCBBcnJvdyBzZXF1ZW5jZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh c2UgIEtfRE5BUlIgICAgIDogICAgICAgICAgICAgICAgIC8qIERFQyBEb3duIEFycm93IGtleSAq LwotICAgICAgICBwcmludGYoIlxcS2RuYXJyICAgICAgICAgVHJhbnNtaXQgVGVybWluYWwgRG93 biBBcnJvdyBzZXF1ZW5jZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfUlRBUlIg ICAgIDogICAgICAgICAgICAgICAgIC8qIERFQyBSaWdodCBBcnJvdyBrZXkgKi8KLSAgICAgICAg cHJpbnRmKCJcXEtydGFyciAgICAgICAgIFRyYW5zbWl0IFRlcm1pbmFsIFJpZ2h0IEFycm93IHNl cXVlbmNlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19MRkFSUiAgICAgOiAgICAg ICAgICAgICAgICAgLyogREVDIExlZnQgQXJyb3cga2V5ICovCi0gICAgICAgIHByaW50ZigiXFxL bGZhcnIgICAgICAgICBUcmFuc21pdCBUZXJtaW5hbCBMZWZ0IEFycm93IHNlcXVlbmNlXG4iKTsK LSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlICBLX1BGMSAgICAgICA6ICAgICAgICAgICAgICAg ICAvKiBERUMgUEYxIGtleSAqLwotICAgICAgICBwcmludGYoIlxcS3BmMSxcXEtnb2xkICAgIFRy YW5zbWl0IERFQyBQRjEgc2VxdWVuY2VcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICBL X1BGMiAgICAgICA6ICAgICAgICAgICAgICAgICAvKiBERUMgUEYyIGtleSAqLwotICAgICAgICBw cmludGYoIlxcS3BmMiAgICAgICAgICAgVHJhbnNtaXQgREVDIFBGMiBzZXF1ZW5jZVxuIik7Ci0g ICAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfUEYzICAgICAgIDogICAgICAgICAgICAgICAgIC8q IERFQyBQRjMga2V5ICovCi0gICAgICAgIHByaW50ZigiXFxLcGYzICAgICAgICAgICBUcmFuc21p dCBERUMgUEYzIHNlcXVlbmNlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19QRjQg ICAgICAgOiAgICAgICAgICAgICAgICAgLyogREVDIFBGNCBrZXkgKi8KLSAgICAgICAgcHJpbnRm KCJcXEtwZjQgICAgICAgICAgIFRyYW5zbWl0IERFQyBQRjQgc2VxdWVuY2VcbiIpOwotICAgICAg ICBicmVhazsKLQotICAgIGNhc2UgIEtfS1AwICAgICAgIDogICAgICAgICAgICAgICAgIC8qIERF QyBLZXlwYWQgMCAqLwotICAgICAgICBwcmludGYoIlxcS2twMCAgICAgICAgICAgVHJhbnNtaXQg REVDIEtleXBhZC0wIHNlcXVlbmNlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19L UDEgICAgICAgOiAgICAgICAgICAgICAgICAgLyogREVDIEtleXBhZCAxICovCi0gICAgICAgIHBy aW50ZigiXFxLa3AxICAgICAgICAgICBUcmFuc21pdCBERUMgS2V5cGFkLTEgc2VxdWVuY2VcbiIp OwotICAgICAgICBicmVhazsKLSAgICBjYXNlICBLX0tQMiAgICAgICA6ICAgICAgICAgICAgICAg ICAvKiBldGMgLi4uIHRocm91Z2ggOSAqLwotICAgICAgICBwcmludGYoIlxcS2twMiAgICAgICAg ICAgVHJhbnNtaXQgREVDIEtleXBhZC0yIHNlcXVlbmNlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0g ICAgY2FzZSAgS19LUDMgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS2twMyAgICAgICAgICAg VHJhbnNtaXQgREVDIEtleXBhZC0zIHNlcXVlbmNlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg Y2FzZSAgS19LUDQgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS2twNCAgICAgICAgICAgVHJh bnNtaXQgREVDIEtleXBhZC00IHNlcXVlbmNlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz ZSAgS19LUDUgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS2twNSAgICAgICAgICAgVHJhbnNt aXQgREVDIEtleXBhZC01IHNlcXVlbmNlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAg S19LUDYgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS2twNiAgICAgICAgICAgVHJhbnNtaXQg REVDIEtleXBhZC02IHNlcXVlbmNlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19L UDcgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS2twNyAgICAgICAgICAgVHJhbnNtaXQgREVD IEtleXBhZC03IHNlcXVlbmNlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19LUDgg ICAgICAgOgotICAgICAgICBwcmludGYoIlxcS2twOCAgICAgICAgICAgVHJhbnNtaXQgREVDIEtl eXBhZC04IHNlcXVlbmNlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19LUDkgICAg ICAgOgotICAgICAgICBwcmludGYoIlxcS2twOSAgICAgICAgICAgVHJhbnNtaXQgREVDIEtleXBh ZC05IHNlcXVlbmNlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19LUENPTUEgICAg OiAgICAgICAgICAgICAgICAgLyogREVDIGtleXBhZCBjb21tYSAqLwotICAgICAgICBwcmludGYo IlxcS2twY29tYSAgICAgICAgVHJhbnNtaXQgREVDIEtleXBhZC1Db21tYSBzZXF1ZW5jZVxuIik7 Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfS1BNSU5VUyAgIDogICAgICAgICAgICAgICAg IC8qIERFQyBrZXlwYWQgbWludXMgKi8KLSAgICAgICAgcHJpbnRmKCJcXEtrcG1pbnVzICAgICAg IFRyYW5zbWl0IERFQyBLZXlwYWQtTWludXMgc2VxdWVuY2VcbiIpOwotICAgICAgICBicmVhazsK LSAgICBjYXNlICBLX0tQRE9UICAgICA6ICAgICAgICAgICAgICAgICAvKiBERUMga2V5cGFkIHBl cmlvZCAqLwotICAgICAgICBwcmludGYoIlxcS2twZG90ICAgICAgICAgVHJhbnNtaXQgREVDIEtl eXBhZC1QZXJpb2Qgc2VxdWVuY2VcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICBLX0tQ RU5URVIgICA6ICAgICAgICAgICAgICAgICAvKiBERUMga2V5cGFkIGVudGVyICovCi0gICAgICAg IHByaW50ZigiXFxLa3BlbnRlciAgICAgICBUcmFuc21pdCBERUMgS2V5cGFkLUVudGVyIHNlcXVl bmNlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0KLS8qIERFQyBUb3AtUmFuayBGIGtleXMgKi8KLQot ICAgIGNhc2UgIEtfREVDRjEgICAgIDogICAgICAgICAgICAgICAgIC8qIERFQyBGMSBrZXkgKi8K LSAgICAgICAgcHJpbnRmKCJcXEtkZWNmMSAgICAgICAgIFRyYW5zbWl0IERFQyBGMSBzZXF1ZW5j ZSBmb3IgUEMga2V5Ym9hcmRcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICBLX0RFQ0Yy ICAgICA6ICAgICAgICAgICAgICAgICAvKiBERUMgRjIga2V5ICovCi0gICAgICAgIHByaW50Zigi XFxLZGVjZjIgICAgICAgICBUcmFuc21pdCBERUMgRjIgc2VxdWVuY2UgZm9yIFBDIGtleWJvYXJk XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ERUNGMyAgICAgOiAgICAgICAgICAg ICAgICAgLyogREVDIEYzIGtleSAqLwotICAgICAgICBwcmludGYoIlxcS2RlY2YzICAgICAgICAg VHJhbnNtaXQgREVDIEYzIHNlcXVlbmNlIGZvciBQQyBrZXlib2FyZFxuIik7Ci0gICAgICAgIGJy ZWFrOwotICAgIGNhc2UgIEtfREVDRjQgICAgIDogICAgICAgICAgICAgICAgIC8qIERFQyBGNCBr ZXkgKi8KLSAgICAgICAgcHJpbnRmKCJcXEtkZWNmNCAgICAgICAgIFRyYW5zbWl0IERFQyBGNCBz ZXF1ZW5jZSBmb3IgUEMga2V5Ym9hcmRcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICBL X0RFQ0Y1ICAgICA6ICAgICAgICAgICAgICAgICAvKiBERUMgRjUga2V5ICovCi0gICAgICAgIHBy aW50ZigiXFxLZGVjZjUgICAgICAgICBUcmFuc21pdCBERUMgRjUgc2VxdWVuY2UgZm9yIFBDIGtl eWJvYXJkXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ERUNIT01FOiAgICAgICAg ICAgICAgICAgICAgLyogREVDIEhPTUUga2V5ICovCi0gICAgICAgcHJpbnRmKCJcXEtkZWNob21l ICAgICAgIFRyYW5zbWl0IERFQyBIT01FIHNlcXVlbmNlIGZvciBQQyBrZXlib2FyZFxuIik7Ci0g ICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlICBLX0RFQ0Y2ICAgICA6ICAgICAgICAgICAgICAgICAv KiBERUMgRjYga2V5ICovCi0gICAgICAgIHByaW50ZigiXFxLZGVjZjYgICAgICAgICBUcmFuc21p dCBERUMgRjYgc2VxdWVuY2VcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICBLX0RFQ0Y3 ICAgICA6ICAgICAgICAgICAgICAgICAvKiBldGMsIHRocm91Z2ggRjIwICovCi0gICAgICAgIHBy aW50ZigiXFxLZGVjZjcgICAgICAgICBUcmFuc21pdCBERUMgRjcgc2VxdWVuY2VcbiIpOwotICAg ICAgICBicmVhazsKLSAgICBjYXNlICBLX0RFQ0Y4ICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxL ZGVjZjggICAgICAgICBUcmFuc21pdCBERUMgRjggc2VxdWVuY2VcbiIpOwotICAgICAgICBicmVh azsKLSAgICBjYXNlICBLX0RFQ0Y5ICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLZGVjZjkgICAg ICAgICBUcmFuc21pdCBERUMgRjkgc2VxdWVuY2VcbiIpOwotICAgICAgICBicmVhazsKLSAgICBj YXNlICBLX0RFQ0YxMCAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLZGVjZjEwICAgICAgICBUcmFu c21pdCBERUMgRjEwIHNlcXVlbmNlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19E RUNGMTEgICAgOgotICAgICAgICBwcmludGYoIlxcS2RlY2YxMSAgICAgICAgVHJhbnNtaXQgREVD IEYxMSBzZXF1ZW5jZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREVDRjEyICAg IDoKLSAgICAgICAgcHJpbnRmKCJcXEtkZWNmMTIgICAgICAgIFRyYW5zbWl0IERFQyBGMTIgc2Vx dWVuY2VcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICBLX0RFQ0YxMyAgICA6Ci0gICAg ICAgIHByaW50ZigiXFxLZGVjZjEzICAgICAgICBUcmFuc21pdCBERUMgRjEzIHNlcXVlbmNlXG4i KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ERUNGMTQgICAgOgotICAgICAgICBwcmlu dGYoIlxcS2RlY2YxNCAgICAgICAgVHJhbnNtaXQgREVDIEYxNCBzZXF1ZW5jZVxuIik7Ci0gICAg ICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREVDSEVMUCAgIDogICAgICAgICAgICAgICAgIC8qIERF QyBIZWxwIGtleSAqLwotICAgICAgICBwcmludGYoIlxcS2RlY2YxNSxcXEtkZWNoZWxwICBUcmFu c21pdCBERUMgSEVMUCBzZXF1ZW5jZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtf REVDRE8gICAgIDogICAgICAgICAgICAgICAgIC8qIERFQyBEbyBrZXkgKi8KLSAgICAgICAgcHJp bnRmKCJcXEtkZWNmMTYsXFxLZGVjZG8gICAgVHJhbnNtaXQgREVDIERPIHNlcXVlbmNlXG4iKTsK LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ERUNGMTcgICAgOgotICAgICAgICBwcmludGYo IlxcS2RlY2YxNyAgICAgICAgVHJhbnNtaXQgREVDIEYxNyBzZXF1ZW5jZVxuIik7Ci0gICAgICAg IGJyZWFrOwotICAgIGNhc2UgIEtfREVDRjE4ICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtkZWNm MTggICAgICAgIFRyYW5zbWl0IERFQyBGMTggc2VxdWVuY2VcbiIpOwotICAgICAgICBicmVhazsK LSAgICBjYXNlICBLX0RFQ0YxOSAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLZGVjZjE5ICAgICAg ICBUcmFuc21pdCBERUMgRjE5IHNlcXVlbmNlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz ZSAgS19ERUNGMjAgICAgOgotICAgICAgICBwcmludGYoIlxcS2RlY2YyMCAgICAgICAgVHJhbnNt aXQgREVDIEYyMCBzZXF1ZW5jZVxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0vKiBERUMgZWRpdGlu ZyBrZXlzICovCi0KLSAgICBjYXNlICBLX0RFQ0ZJTkQgICA6ICAgICAgICAgICAgICAgICAvKiBE RUMgRmluZCBrZXkgKi8KLSAgICAgICAgcHJpbnRmKCJcXEtkZWNmaW5kICAgICAgIFRyYW5zbWl0 IERFQyBGSU5EIHNlcXVlbmNlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ERUNJ TlNFUlQgOiAgICAgICAgICAgICAgICAgLyogREVDIEluc2VydCBrZXkgKi8KLSAgICAgICAgcHJp bnRmKCJcXEtkZWNpbnNlcnQgICAgIFRyYW5zbWl0IERFQyBJTlNFUlQgSEVSRSBzZXF1ZW5jZVxu Iik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREVDUkVNT1ZFIDogICAgICAgICAgICAg ICAgIC8qIERFQyBSZW1vdmUga2V5ICovCi0gICAgICAgIHByaW50ZigiXFxLZGVjcmVtb3ZlICAg ICBUcmFuc21pdCBERUMgUkVNT1ZFIHNlcXVlbmNlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg Y2FzZSAgS19ERUNTRUxFQ1QgOiAgICAgICAgICAgICAgICAgLyogREVDIFNlbGVjdCBrZXkgKi8K LSAgICAgICAgcHJpbnRmKCJcXEtkZWNmc2VsZWN0ICAgIFRyYW5zbWl0IERFQyBTRUxFQ1Qgc2Vx dWVuY2VcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICBLX0RFQ1BSRVYgICA6ICAgICAg ICAgICAgICAgICAvKiBERUMgUHJldmlvdXMgU2NyZWVuIGtleSAqLwotICAgICAgICBwcmludGYo IlxcS2RlY3ByZXYgICAgICAgVHJhbnNtaXQgREVDIFBSRVYgU0NSRUVOIHNlcXVlbmNlXG4iKTsK LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ERUNORVhUICAgOiAgICAgICAgICAgICAgICAg LyogREVDIE5leHQgU2NyZWVuIGtleSAqLwotICAgICAgICBwcmludGYoIlxcS2RlY25leHQgICAg ICAgVHJhbnNtaXQgREVDIE5FWFQgU0NSRUVOIHNlcXVlbmNlXG4iKTsKLSAgICAgICAgYnJlYWs7 Ci0KLS8qIERFQyBVc2VyLURlZmluZWQgS2V5cyAqLwotCi0gICAgY2FzZSAgS19VREtGMSAgICAg OiAgICAgICAgICAgICAgICAgLyogRjEgLSBGNSBhcmUgWFRFUk0gZXh0ZW5zaW9ucyAqLwotICAg ICAgcHJpbnRmKCJcXEt1ZGtmMSAgICAgICAgIFRyYW5zbWl0IFhURVJNIEYxIFVzZXIgRGVmaW5l ZCBLZXkgc2VxdWVuY2VcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19VREtGMiAgICAg OgotICAgICAgcHJpbnRmKCJcXEt1ZGtmMiAgICAgICAgIFRyYW5zbWl0IFhURVJNIEYyIFVzZXIg RGVmaW5lZCBLZXkgc2VxdWVuY2VcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19VREtG MyAgICAgOgotICAgICAgcHJpbnRmKCJcXEt1ZGtmMyAgICAgICAgIFRyYW5zbWl0IFhURVJNIEYz IFVzZXIgRGVmaW5lZCBLZXkgc2VxdWVuY2VcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAg S19VREtGNCAgICAgOgotICAgICAgcHJpbnRmKCJcXEt1ZGtmNCAgICAgICAgIFRyYW5zbWl0IFhU RVJNIEY0IFVzZXIgRGVmaW5lZCBLZXkgc2VxdWVuY2VcbiIpOwotICAgICAgYnJlYWs7Ci0gICAg Y2FzZSAgS19VREtGNSAgICAgOgotICAgICAgcHJpbnRmKCJcXEt1ZGtmNSAgICAgICAgIFRyYW5z bWl0IFhURVJNIEY1IFVzZXIgRGVmaW5lZCBLZXkgc2VxdWVuY2VcbiIpOwotICAgICAgYnJlYWs7 Ci0gICAgY2FzZSAgS19VREtGNiAgICAgOiAgICAgICAgICAgICAgICAgLyogREVDIFVzZXIgRGVm aW5lZCBLZXkgRjYgKi8KLSAgICAgIHByaW50ZigiXFxLdWRrZjYgICAgICAgICBUcmFuc21pdCBE RUMgRjYgVXNlciBEZWZpbmVkIEtleSBzZXF1ZW5jZVxuIik7Ci0gICAgICBicmVhazsKLSAgICBj YXNlICBLX1VES0Y3ICAgICA6ICAgICAgICAgICAgICAgICAvKiBERUMgVXNlciBEZWZpbmVkIEtl eSBGNyAqLwotICAgICAgcHJpbnRmKCJcXEt1ZGtmNyAgICAgICAgIFRyYW5zbWl0IERFQyBGNyBV c2VyIERlZmluZWQgS2V5IHNlcXVlbmNlXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtf VURLRjggICAgIDogICAgICAgICAgICAgICAgIC8qIGV0YyAuLi4gdGhyb3VnaCBGMjAgKi8KLSAg ICAgIHByaW50ZigiXFxLdWRrZjggICAgICAgICBUcmFuc21pdCBERUMgRjggVXNlciBEZWZpbmVk IEtleSBzZXF1ZW5jZVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1VES0Y5ICAgICA6 Ci0gICAgICBwcmludGYoIlxcS3Vka2Y5ICAgICAgICAgVHJhbnNtaXQgREVDIEY5IFVzZXIgRGVm aW5lZCBLZXkgc2VxdWVuY2VcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19VREtGMTAg ICAgOgotICAgICAgcHJpbnRmKCJcXEt1ZGtmMTAgICAgICAgIFRyYW5zbWl0IERFQyBGMTAgVXNl ciBEZWZpbmVkIEtleSBzZXF1ZW5jZVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1VE S0YxMSAgICA6Ci0gICAgICBwcmludGYoIlxcS3Vka2YxMSAgICAgICAgVHJhbnNtaXQgREVDIEYx MSBVc2VyIERlZmluZWQgS2V5IHNlcXVlbmNlXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Ug IEtfVURLRjEyICAgIDoKLSAgICAgIHByaW50ZigiXFxLdWRrZjEyICAgICAgICBUcmFuc21pdCBE RUMgRjEyIFVzZXIgRGVmaW5lZCBLZXkgc2VxdWVuY2VcbiIpOwotICAgICAgYnJlYWs7Ci0gICAg Y2FzZSAgS19VREtGMTMgICAgOgotICAgICAgcHJpbnRmKCJcXEt1ZGtmMTMgICAgICAgIFRyYW5z bWl0IERFQyBGMTMgVXNlciBEZWZpbmVkIEtleSBzZXF1ZW5jZVxuIik7Ci0gICAgICBicmVhazsK LSAgICBjYXNlICBLX1VES0YxNCAgICA6Ci0gICAgICBwcmludGYoIlxcS3Vka2YxNCAgICAgICAg VHJhbnNtaXQgREVDIEYxNCBVc2VyIERlZmluZWQgS2V5IHNlcXVlbmNlXG4iKTsKLSAgICAgIGJy ZWFrOwotICAgIGNhc2UgIEtfVURLSEVMUCAgIDoKLSAgICAgIHByaW50ZigKLSAgICAgICJcXEt1 ZGtoZWxwLFxcS3Vka2YxNSAgVHJhbnNtaXQgREVDIEhFTFAgVXNlciBEZWZpbmVkIEtleSBzZXF1 ZW5jZVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1VES0RPICAgICA6Ci0gICAgICBw cmludGYoCi0gICAgICAiXFxLdWRrZG8sXFxLdWRrZjE2ICAgIFRyYW5zbWl0IERFQyBETyBVc2Vy IERlZmluZWQgS2V5IHNlcXVlbmNlXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfVURL RjE3ICAgIDoKLSAgICAgIHByaW50ZigiXFxLdWRrZjE3ICAgICAgICBUcmFuc21pdCBERUMgRjE3 IFVzZXIgRGVmaW5lZCBLZXkgc2VxdWVuY2VcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAg S19VREtGMTggICAgOgotICAgICAgcHJpbnRmKCJcXEt1ZGtmMTggICAgICAgIFRyYW5zbWl0IERF QyBGMTggVXNlciBEZWZpbmVkIEtleSBzZXF1ZW5jZVxuIik7Ci0gICAgICBicmVhazsKLSAgICBj YXNlICBLX1VES0YxOSAgICA6Ci0gICAgICBwcmludGYoIlxcS3Vka2YxOSAgICAgICAgVHJhbnNt aXQgREVDIEYxOSBVc2VyIERlZmluZWQgS2V5IHNlcXVlbmNlXG4iKTsKLSAgICAgIGJyZWFrOwot ICAgIGNhc2UgIEtfVURLRjIwICAgIDoKLSAgICAgIHByaW50ZigiXFxLdWRrZjIwICAgICAgICBU cmFuc21pdCBERUMgRjIwIFVzZXIgRGVmaW5lZCBLZXkgc2VxdWVuY2VcbiIpOwotICAgICAgYnJl YWs7Ci0KLS8qIEVtYWNzIEtleXMgKi8KLSAgICBjYXNlICBLX0VNQUNTX09WRVI6Ci0gICAgICBw cmludGYoCi0gICAgICJcXEtlbWFjc19vdmVyd3JpdGUgIFRyYW5zbWl0IEVNQUNTIE92ZXJ3cml0 ZSB0b2dnbGUgY29tbWFuZCBzZXF1ZW5jZVxuIik7Ci0gICAgICBicmVhazsKLQotLyogS2VybWl0 IHNjcmVlbi1zY3JvbGxpbmcga2V5cyAqLwotCi0gICAgY2FzZSAgS19ETk9ORSAgICAgOiAgICAg ICAgICAgICAgICAgLyogU2NyZWVuIHJvbGxiYWNrOiBkb3duIG9uZSBsaW5lICovCi0gICAgICBw cmludGYoIlxcS2Rub25lICAgICAgICAgU2NyZWVuIHJvbGxiYWNrOiBkb3duIG9uZSBsaW5lXG4i KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfRE5TQ04gICAgIDogICAgICAgICAgICAgICAg IC8qIFNjcmVlbiByb2xsYmFjazogZG93biBvbmUgc2NyZWVuICovCi0gICAgICBwcmludGYoIlxc S2Ruc2NuICAgICAgICAgU2NyZWVuIHJvbGxiYWNrOiBkb3duIG9uZSBzY3JlZW5cbiIpOwotICAg ICAgYnJlYWs7Ci0gICAgY2FzZSAgS19VUE9ORSAgICAgOiAgICAgICAgICAgICAgICAgLyogU2Ny ZWVuIHJvbGxiYWNrOiBVcCBvbmUgbGluZSAqLwotICAgICAgcHJpbnRmKCJcXEt1cG9uZSAgICAg ICAgIFNjcmVlbiByb2xsYmFjazogdXAgb25lIGxpbmVcbiIpOwotICAgICAgYnJlYWs7Ci0gICAg Y2FzZSAgS19VUFNDTiAgICAgOiAgICAgICAgICAgICAgICAgLyogU2NyZWVuIHJvbGxiYWNrOiBV cCBvbmUgc2NyZWVuICovCi0gICAgICBwcmludGYoIlxcS3Vwc2NuICAgICAgICAgU2NyZWVuIHJv bGxiYWNrOiB1cCBvbmUgc2NyZWVuXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfRU5E U0NOICAgIDogICAgICAgICAgICAgICAgIC8qIFNjcmVlbiByb2xsYmFjazogbGF0ZXN0IHNjcmVl biAqLwotICAgICAgcHJpbnRmKCJcXEtlbmRzY24gICAgICAgIFNjcmVlbiByb2xsYmFjazogbGF0 ZXN0IHNjcmVlblxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0hPTVNDTiAgICA6ICAg ICAgICAgICAgICAgICAvKiBTY3JlZW4gcm9sbGJhY2s6IG9sZGVzdCBzY3JlZW4gKi8KLSAgICAg IHByaW50ZigiXFxLaG9tc2NuICAgICAgICBTY3JlZW4gcm9sbGJhY2s6IG9sZGVzdCBzY3JlZW5c biIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19HT19CT09LICAgOiAgICAgICAgIC8qIFNj cm9sbCB0byBib29rbWFyayAqLwotICAgICAgcHJpbnRmKCJcXEtnb2Jvb2sgICAgICAgIFNjcmVl biByb2xsYmFjazogZ28gdG8gYm9va21hcmtcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAg S19HT1RPICAgICAgOiAgICAgICAgIC8qIFNjcm9sbCB0byBsaW5lIG51bWJlciAqLwotICAgICAg cHJpbnRmKCJcXEtnb3RvICAgICAgICAgIFNjcmVlbiByb2xsYmFjazogZ28gdG8gbGluZSBudW1i ZXJcbiIpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlICBLX0xGT05FICAgICA6ICAgICAgICAg ICAgICAgICAvKiBIb3Jpem9udGFsIFNjcm9sbDogTGVmdCBvbmUgY2VsbCAqLwotICAgICAgcHJp bnRmKCJcXEtsZm9uZSAgICAgICAgIEhvcml6b250YWwgU2Nyb2xsOiBMZWZ0IG9uZSBjb2x1bW5c biIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19MRlBBR0UgICAgOiAgICAgICAgICAgICAg ICAgLyogSG9yaXpvbnRhbCBTY3JvbGw6IExlZnQgb25lIHBhZ2UgKi8KLSAgICAgIHByaW50Zigi XFxLbGZwYWdlICAgICAgICBIb3Jpem9udGFsIFNjcm9sbDogTGVmdCBlaWdodCBjb2x1bW5zXG4i KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfTEZBTEwgICAgIDoKLSAgICAgIHByaW50Zigi XFxLbGZhbGwgICAgICAgICBIb3Jpem9udGFsIFNjcm9sbDogTGVmdCB0byBtYXJnaW5cbiIpOwot ICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19SVE9ORSAgICAgOiAgICAgICAgICAgICAgICAgLyog SG9yaXpvbnRhbCBTY3JvbGw6IFJpZ2h0IG9uZSBjZWxsICovCi0gICAgICBwcmludGYoIlxcS3J0 b25lICAgICAgICAgSG9yaXpvbnRhbCBTY3JvbGw6IFJpZ2h0IG9uZSBjb2x1bW5cbiIpOwotICAg ICAgYnJlYWs7Ci0gICAgY2FzZSAgS19SVFBBR0UgICAgOiAgICAgICAgICAgICAgICAgLyogSG9y aXpvbnRhbCBTY3JvbGw6IFJpZ2h0IG9uZSBwYWdlICovCi0gICAgICBwcmludGYoIlxcS3J0cGFn ZSAgICAgICAgSG9yaXpvbnRhbCBTY3JvbGw6IFJpZ2h0IGVpZ2h0IGNvbHVtbnNcbiIpOwotICAg ICAgYnJlYWs7Ci0gICAgY2FzZSAgS19SVEFMTCAgICAgOgotICAgICAgcHJpbnRmKCJcXEtydGFs bCAgICAgICAgIEhvcml6b250YWwgU2Nyb2xsOiBSaWdodCB0byBtYXJnaW5cbiIpOwotICAgICAg YnJlYWs7Ci0KLS8qIEtleWJvYXJkIGxhbmd1YWdlIHN3aXRjaGluZyB2ZXJicyAqLwotCi0gICAg Y2FzZSAgS19LQl9FTkcgICAgOiAgICAgICAgICAgICAgICAgLyogRW5nbGlzaCBrZXlib2FyZCBt b2RlICovCi0gICAgICBwcmludGYoIlxcS2tiZW5nbGlzaCAgICAgU3dpdGNoIHRvIE5vcm1hbCAo RW5nbGlzaCkga2V5Ym9hcmQgbW9kZVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0tC X0hFQiAgICA6ICAgICAgICAgICAgICAgICAvKiBIZWJyZXcga2V5Ym9hcmQgbW9kZSAqLwotICAg ICAgcHJpbnRmKCJcXEtrYmhlYnJldyAgICAgIFN3aXRjaCB0byBIZWJyZXcga2V5Ym9hcmQgbW9k ZVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0tCX1JVUyAgICA6ICAgICAgICAgICAg ICAgICAvKiBSdXNzaWFuIGtleWJvYXJkIG1vZGUgKi8KLSAgICAgIHByaW50ZigiXFxLa2JydXNz aWFuICAgICBTd2l0Y2ggdG8gUnVzc2lhbiBrZXlib2FyZCBtb2RlXG4iKTsKLSAgICAgIGJyZWFr OwotICAgIGNhc2UgIEtfS0JfRU1BICAgIDogICAgICAgICAgICAgICAgIC8qIEVtYWNzIGtleWJv YXJkIG1vZGUgKi8KLSAgICAgIHByaW50ZigiXFxLa2JlbWFjcyAgICAgICBTd2l0Y2ggdG8gRU1B Q1Mga2V5Ym9hcmQgbW9kZVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0tCX1dQICAg ICA6ICAgICAgICAgICAgICAgICAvKiBXb3JkIFBlcmZlY3QgNS4xIG1vZGUgKi8KLSAgICAgIHBy aW50ZigiXFxLa2J3cCAgICAgICAgICBTd2l0Y2ggdG8gV29yZCBQZXJmZWN0IDUuMSBrZXlib2Fy ZCBtb2RlXG4iKTsKLSAgICAgIGJyZWFrOwotCi0vKiBNYXJrIE1vZGUgYWN0aW9ucyAqLwotCi0g ICAgY2FzZSAgS19NQVJLX1NUQVJUICA6ICAgICAgIC8qIEVudGVyIE1hcmsgTW9kZS9TdGFydCBt YXJraW5nICovCi0gICAgICBwcmludGYoIlxcS21hcmtzdGFydCAgICAgTWFyayBNb2RlOiBFbnRl ciBtb2RlIG9yIFN0YXJ0IG1hcmtpbmdcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19N QVJLX0NBTkNFTCA6ICAgICAgIC8qIEV4aXQgTWFyayBNb2RlIC0gRG8gTm90aGluZyAqLwotICAg ICAgcHJpbnRmKCJcXEttYXJrY2FuY2VsICAgIE1hcmsgTW9kZTogQ2FuY2VsIG1vZGVcbiIpOwot ICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19NQVJLX0NPUFlDTElQOiAgICAgIC8qIEV4aXQgTWFy ayBNb2RlIC0gQ29weSBkYXRhIHRvIGNsaXBib2FyZCAqLwotICAgICAgcHJpbnRmKCJcXEttYXJr Y29weWNsaXAgIE1hcmsgTW9kZTogQ29weSBtYXJrZWQgdGV4dCB0byBjbGlwYm9hcmRcbiIpOwot ICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19NQVJLX0NPUFlIT1NUOiAgICAgIC8qIEV4aXQgTWFy ayBNb2RlIC0gQ29weSBkYXRhIHRvIGhvc3QgICAqLwotICAgICAgcHJpbnRmKCJcXEttYXJrY29w eWhvc3QgIE1hcmsgTW9kZTogQ29weSBtYXJrZWQgdGV4dCB0byBob3N0XG4iKTsKLSAgICAgIGJy ZWFrOwotICAgIGNhc2UgIEtfTUFSS19TRUxFQ1QgOiAgICAgICAvKiBFeGl0IE1hcmsgTW9kZSAt IFNlbGVjdCAqLwotICAgICAgcHJpbnRmKAotICAgICAgIlxcS21hcmtzZWxlY3QgICAgTWFyayBN b2RlOiBQbGFjZSBtYXJrZWQgdGV4dCBpbnRvIFxcdihzZWxlY3QpXG4iKTsKLSAgICAgIGJyZWFr OwotICAgIGNhc2UgIEtfQkFDS1NSQ0ggICAgOiAgICAgICAgICAgIC8qIFNlYXJjaCBCYWNrd2Fy ZHMgZm9yIHRleHQgKi8KLSAgICAgIHByaW50ZigiXFxLYmFja3NlYXJjaCAgICBTZWFyY2g6IEJl Z2luIGJhY2t3YXJkIHNlYXJjaCBmb3IgdGV4dFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNl ICBLX0ZXRFNSQ0ggICAgIDogICAgICAgICAgICAvKiBTZWFyY2ggRm9yd2FyZHMgZm9yIHRleHQg Ki8KLSAgICAgIHByaW50ZigiXFxLZndkc2VhcmNoICAgICBTZWFyY2g6IEJlZ2luIGZvcndhcmQg c2VhcmNoIGZvciB0ZXh0XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQkFDS05FWFQg ICAgOiAgICAgLyogU2VhcmNoIEJhY2t3YXJkcyBmb3IgbmV4dCBpbnN0YW5jZSBvZiB0ZXh0ICov Ci0gICAgICBwcmludGYoCi0gICAgICAiXFxLYmFja25leHQgICAgICBTZWFyY2g6IEZpbmQgbmV4 dCBpbnN0YW5jZSBvZiB0ZXh0IGJhY2t3YXJkc1xuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNl ICBLX0ZXRE5FWFQgICAgIDogICAgICAvKiBTZWFyY2ggRm9yd2FyZHMgZm9yIG5leHQgaW5zdGFu Y2Ugb2YgdGV4dCAqLwotICAgICAgcHJpbnRmKCJcXEtmd2RuZXh0ICAgICAgIFNlYXJjaDogRmlu ZCBuZXh0IGluc3RhbmNlIG9mIHRleHQgZm9yd2FyZHNcbiIpOwotICAgICAgYnJlYWs7Ci0KLS8q IE1pc2NlbGxhbmVvdXMgS2VybWl0IGFjdGlvbnMgKi8KLQotICAgIGNhc2UgIEtfRVhJVCAgICAg ICAgOiAgICAgICAgICAgICAgIC8qIFJldHVybiB0byBjb21tYW5kIHBhcnNlciAqLwotICAgICAg cHJpbnRmKCJcXEtleGl0ICAgICAgICAgIFRvZ2dsZSBiZXR3ZWVuIENPTU1BTkQgYW5kIENPTk5F Q1QgbW9kZXNcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19CUkVBSyAgICAgICA6ICAg ICAgICAgICAgICAgLyogU2VuZCBhIEJSRUFLICovCi0gICAgICBwcmludGYoIlxcS2JyZWFrICAg ICAgICAgVHJhbnNtaXQgQlJFQUsgc2lnbmFsIHRvIGhvc3RcbiIpOwotICAgICAgYnJlYWs7Ci0g ICAgY2FzZSAgS19SRVNFVCAgICAgICA6ICAgICAgICAgICAgICAgLyogUmVzZXQgZW11bGF0b3Ig Ki8KLSAgICAgIHByaW50ZigiXFxLcmVzZXQgICAgICAgICBSZXNldCBUZXJtaW5hbCBFbXVsYXRv ciB0byB1c2VyIGRlZmF1bHRzXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfRE9TICAg ICAgICAgOiAgICAgICAgICAgICAgIC8qIFB1c2ggdG8gRE9TIChpLmUuIE9TLzIpICovCi0gICAg ICBwcmludGYoIlxcS2RvcyxcXEtvczIgICAgIFB1c2ggdG8gQ29tbWFuZCBTaGVsbFxuIik7Ci0g ICAgICBicmVhazsKLSAgICBjYXNlICBLX0hBTkdVUCAgICAgIDogICAgICAgICAgICAgICAvKiBI YW5nIHVwIHRoZSBjb25uZWN0aW9uICovCi0gICAgICBwcmludGYoIlxcS2hhbmd1cCAgICAgICAg SGFuZ3VwIHRoZSBhY3RpdmUgY29ubmVjdGlvblxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNl ICBLX0RVTVAgICAgICAgIDogICAgICAgICAgICAgICAvKiBEdW1wL1ByaW50IGN1cnJlbnQgc2Ny ZWVuICovCi0gICAgICBwcmludGYoCi0gICAgICJcXEtkdW1wICAgICAgICAgIER1bXAvY29weSBj dXJyZW50IHNjcmVlbiB0byBTRVQgUFJJTlRFUiBkZXZpY2UvZmlsZVxuIik7Ci0gICAgICBicmVh azsKLSAgICBjYXNlICBLX0xCUkVBSyAgICAgIDogICAgICAgICAgICAgICAvKiBTZW5kIGEgTG9u ZyBCUkVBSyAqLwotICAgICAgcHJpbnRmKCJcXEtsYnJlYWsgICAgICAgIFRyYW5zbWl0IExPTkcg QlJFQUsgc2lnbmFsIHRvIGhvc3RcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19OVUxM ICAgICAgICA6ICAgICAgICAgICAgICAgLyogU2VuZCBhIE5VTCAqLwotICAgICAgcHJpbnRmKCJc XEtudWxsICAgICAgICAgIFRyYW5zbWl0IE5VTEwgKCdcMCcpIGNoYXJhY3RlciB0byBob3N0XG4i KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfSEVMUCAgICAgICAgOiAgICAgICAgICAgICAg IC8qIFBvcC11cCBoZWxwICovCi0gICAgICBwcmludGYoIlxcS2hlbHAgICAgICAgICAgUmFpc2Ug UG9wLVVwIGhlbHAgZGlzcGxheVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0hPTERT Q1JOICAgIDogICAgICAgICAgICAgICAvKiBIb2xkIHNjcmVlbiAqLwotICAgICAgcHJpbnRmKCJc XEtob2xkc2NybiAgICAgIFBhdXNlIGRhdGEgaW5wdXQgZHVyaW5nIENPTk5FQ1QgbW9kZVxuIik7 Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0lHTk9SRSAgICAgIDogICAgICAgICAgICAgICAv KiBJZ25vcmUgdGhpcyBrZXksIGRvbid0IGV2ZW4gYmVlcCAqLwotICAgICAgcHJpbnRmKCJcXEtp Z25vcmUgICAgICAgIElnbm9yZSBrZXlcbiIpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlICBL X0xPR09GRiAgICAgIDogICAgICAgICAgICAgICAvKiBUdXJuIG9mZiBzZXNzaW9uIGxvZ2dpbmcg Ki8KLSAgICAgIHByaW50ZigiXFxLbG9nb2ZmICAgICAgICBUdXJuIG9mZiBzZXNzaW9uIGxvZ2dp bmcgKHNlZSBcXEtzZXNzaW9uKVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0xPR09O ICAgICAgIDogICAgICAgICAgICAgICAvKiBUdXJuIG9uIHNlc3Npb24gbG9nZ2luZyAqLwotICAg ICAgcHJpbnRmKCJcXEtsb2dvbiAgICAgICAgIFR1cm4gb24gc2Vzc2lvbiBsb2dnaW5nIChzZWUg XFxLc2Vzc2lvbilcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NFU1NJT046Ci0gICAg ICBwcmludGYoCi0gICAgICAgICAiXFxLc2Vzc2lvbiAgICAgICBUb2dnbGUgb24vb2ZmIHNlc3Np b24gbG9nZ2luZyB0byAnc2Vzc2lvbi5sb2cnXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Ug S19BVVRPRE9XTjoKLSAgICAgIHByaW50ZigiXFxLYXV0b2Rvd24gICAgICBUb2dnbGUgb24vb2Zm IHRlcm1pbmFsIGF1dG9kb3dubG9hZC5cbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX0JZ VEVTSVpFOgotICAgICAgcHJpbnRmKAotICAgICAgICAiXFxLYnl0ZXNpemUgICAgICBUb2dnbGUg dGVybWluYWwgYnl0ZXNpemUgYmV0d2VlbiA3IGFuZCA4IGJpdHMuXG4iKTsKLSAgICAgIGJyZWFr OwotCi0jaWZkZWYgQ09NTUVOVAotICAgIGNhc2UgTU9ERUxJTkU6Ci0gICAgY2FzZSAgS19ORVRI T0xEICAgICA6ICAgICAgICAgICAgICAgLyogUHV0IG5ldHdvcmsgY29ubmVjdGlvbiBvbiBob2xk ICovCi0gICAgY2FzZSAgS19ORVhUU0VTUyAgICA6ICAgICAgICAgICAgICAgLyogVG9nZ2xlIHRv IG5leHQgbmV0d29yayBzZXNzaW9uICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgY2Fz ZSBLX0NVUlNPUl9VUkw6Ci0gICAgICAgIHByaW50ZigKLSAgICAgIlxcS3VybCAgICAgICAgICAg VHJlYXQgdGV4dCB1bmRlciBjdXJzb3IgcG9zaXRpb24gYXMgYSBVUkxcbiIpOwotICAgICAgICBi cmVhazsKLSAgICBjYXNlICBLX1NUQVRVUyAgICAgIDogICAgICAgICAgICAgICAvKiBTaG93IHN0 YXR1cyAqLwotICAgICAgcHJpbnRmKAotICAgICAiXFxLc3RhdHVzICAgICAgICBUb2dnbGUgc3Rh dHVzbGluZSAoTm9uZSwgSW5kaWNhdG9yLCBIb3N0IFdyaXRlYWJsZSlcbiIpOwotICAgICAgYnJl YWs7Ci0gICAgY2FzZSAgS19URVJNVFlQRSAgICA6ICAgICAgICAgICAgICAgLyogVG9nZ2xlIHRl cm0gdHlwZTogdGV4dC9ncmFwaGljcyAqLwotICAgICAgcHJpbnRmKCJcXEt0ZXJtdHlwZSAgICAg IFRvZ2dsZSBUZXJtaW5hbCBUeXBlXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfUFJU Q1RSTCAgICAgOiAgICAgICAgICAgICAgIC8qIFByaW50IENvbnRyb2xsZXIgbW9kZSAqLwotICAg ICAgcHJpbnRmKCJcXEtwcnRjdHJsICAgICAgIFRvZ2dsZSBDdHJsLVByaW50ICh0cmFuc3BhcmVu dCkgbW9kZVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1BSSU5URkYgICAgIDogICAg ICAgICAgICAgICAvKiBQcmludCBmb3JtZmVlZCAqLwotICAgICAgcHJpbnRmKCJcXEtwcmludGZm ICAgICAgIE91dHB1dCBGb3JtIEZlZWQgdG8gU0VUIFBSSU5URVIgZGV2aWNlXG4iKTsKLSAgICAg IGJyZWFrOwotICAgIGNhc2UgIEtfRkxJUFNDTiAgICAgOiAgICAgICAgICAgICAgIC8qIEZsaXAg c2NyZWVuICovCi0gICAgICBwcmludGYoIlxcS2ZsaXBzY24gICAgICAgUmV2ZXJzZSBmb3JlZ3Jv dW5kIGFuZCBiYWNrZ3JvdW5kIGNvbG9yc1xuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBL X0RFQlVHICAgICAgIDogICAgICAgICAgICAgICAvKiBUb2dnbGUgZGVidWdnaW5nICovCi0gICAg ICBwcmludGYoIlxcS2RlYnVnICAgICAgICAgVG9nZ2xlIFRlcm1pbmFsIERlYnVnIG1vZGVcbiIp OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UTl9TQUsgICAgICA6ICAgICAgICAgICAgICAg LyogVEVMTkVUIFNlY3VyZSBBY2Nlc3MgS2V5ICovCi0gICAgICBwcmludGYoIlxcS3RuX3NhayAg ICAgICAgVEVMTkVUOiBJQk0gU2VjdXJlIEFjY2VzcyBLZXlcbiIpOwotICAgICAgcHJpbnRmKCIg ICAgICAgICAgICAgICAgVXNlZCB0byByZXF1ZXN0IGEgVHJ1c3RlZCBTaGVsbCB3aXRoIEFJWFxu Iik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1ROX0FPICAgICAgIDogICAgICAgICAgICAg ICAvKiBURUxORVQgQ2FuY2VsIE91dHB1dCAqLwotICAgICAgcHJpbnRmKCJcXEt0bl9hbyAgICAg ICAgIFRFTE5FVDogVHJhbnNtaXQgQ2FuY2VsLU91dHB1dCByZXF1ZXN0XG4iKTsKLSAgICAgIGJy ZWFrOwotICAgIGNhc2UgIEtfVE5fQVlUICAgICAgOiAgICAgICAgICAgICAgIC8qIFRFTE5FVCBB cmUgWW91IFRoZXJlICovCi0gICAgICBwcmludGYoIlxcS3RuYXl0ICAgICAgICAgVEVMTkVUOiBU cmFuc21pdCBBcmUgWW91IFRoZXJlPyByZXF1ZXN0XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNh c2UgIEtfVE5fRUMgICAgICAgOiAgICAgICAgICAgICAgIC8qIFRFTE5FVCBFcmFzZSBDaGFyYWN0 ZXIgKi8KLSAgICAgIHByaW50ZigiXFxLdG5fZWMgICAgICAgICBURUxORVQ6IFRyYW5zbWl0IEVy YXNlIENoYXJhY3RlciByZXF1ZXN0XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfVE5f RUwgICAgICAgOiAgICAgICAgICAgICAgIC8qIFRFTE5FVCBFcmFzZSBMaW5lICovCi0gICAgICBw cmludGYoIlxcS3RuX2VsICAgICAgICAgVEVMTkVUOiBUcmFuc21pdCBFcmFzZSBMaW5lIHJlcXVl c3RcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UTl9HQSAgICAgICA6ICAgICAgICAg ICAgICAgLyogVEVMTkVUIEdvIEFoZWFkICovCi0gICAgICBwcmludGYoIlxcS3RuX2dhICAgICAg ICAgVEVMTkVUOiBUcmFuc21pdCBHbyBBaGVhZCByZXF1ZXN0XG4iKTsKLSAgICAgIGJyZWFrOwot ICAgIGNhc2UgIEtfVE5fSVAgICAgICAgOiAgICAgICAgICAgICAgIC8qIFRFTE5FVCBJbnRlcnJ1 cHQgUHJvY2VzcyAqLwotICAgICAgcHJpbnRmKCJcXEt0bl9pcCAgICAgICAgIFRFTE5FVDogVHJh bnNtaXQgSW50ZXJydXB0IFByb2Nlc3MgcmVxdWVzdFxuIik7Ci0gICAgICBicmVhazsKLSAgICBj YXNlICBLX1ROX0xPR09VVCAgIDogICAgICAgICAgICAgICAvKiBURUxORVQgTG9nb3V0ICovCi0g ICAgICBwcmludGYoIlxcS3RuX2xvZ291dCAgICAgVEVMTkVUOiBUcmFuc21pdCBEbyBMb2dvdXQg T3B0aW9uXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfVE5fTkFXUyAgIDogICAgICAg ICAgICAgICAgIC8qIFRFTE5FVCBOQVdTICovCi0gICAgICBwcmludGYoCi0gICAgICAgICJcXEt0 bl9uYXdzICAgICAgIFRFTE5FVDogVHJhbnNtaXQgV2luZG93IFNpemUgaWYgTkFXUyBpcyBhY3Rp dmVcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19QQVNURSAgICAgICA6ICAgICAgICAg ICAgICAgLyogUGFzdGUgZGF0YSBmcm9tIGNsaXBib2FyZCAqLwotICAgICAgcHJpbnRmKCJcXEtw YXN0ZSAgICAgICAgIFBhc3RlIGRhdGEgZnJvbSBjbGlwYm9hcmQgdG8gaG9zdFxuIik7Ci0gICAg ICBicmVhazsKLSAgICBjYXNlICBLX0NMUlNDUk4gICAgIDogICAgICAgICAgICAgICAvKiBDbGVh ciBUZXJtaW5hbCBTY3JlZW4gKi8KLSAgICAgIHByaW50ZigiXFxLY2xlYXJzY3JlZW4gICBDbGVh ciB0aGUgVGVybWluYWwgc2NyZWVuXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfUFJU QVVUTyAgICAgOiAgICAgICAgICAgICAgIC8qIFByaW50IEF1dG8gbW9kZSAqLwotICAgICAgcHJp bnRmKCJcXEtwcnRhdXRvICAgICAgIFRvZ2dsZSBBdXRvLVByaW50IG1vZGVcbiIpOwotICAgICAg YnJlYWs7Ci0gICAgY2FzZSAgS19QUlRDT1BZICAgICA6ICAgICAgICAgICAgICAgLyogUHJpbnQg Q29weSBtb2RlICovCi0gICAgICBwcmludGYoIlxcS3BydGNvcHkgICAgICAgVG9nZ2xlIENvcHkt UHJpbnQgbW9kZVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0FOU1dFUkJBQ0sgIDog ICAgICAgICAgICAgICAvKiBUcmFuc21pdCBBbnN3ZXJiYWNrIFN0cmluZyAqLwotICAgICAgcHJp bnRmKCJcXEthbnN3ZXJiYWNrICAgIFRyYW5zbWl0IGFuc3dlcmJhY2sgc3RyaW5nIHRvIGhvc3Rc biIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19TRVRfQk9PSyAgICA6ICAgICAgICAgICAg ICAgLyogU2V0IEJvb2ttYXJrICovCi0gICAgICBwcmludGYoIlxcS3NldGJvb2sgICAgICAgU2V0 IGJvb2ttYXJrXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfUVVJVCAgICAgICAgOiAg ICAgICAgICAgICAgIC8qIFF1aXQgS2VybWl0ICovCi0gICAgICBwcmludGYoIlxcS3F1aXQgICAg ICAgICAgSGFuZ3VwIGNvbm5lY3Rpb24gYW5kIHF1aXQga2VybWl0XG4iKTsKLSAgICAgIGJyZWFr OwotICAgIGNhc2UgIEtfS0VZQ0xJQ0sgICAgOiAgICAgICAgICAgICAgIC8qIFRvZ2dsZSBLZXlj bGljayAqLwotICAgICAgcHJpbnRmKCJcXEtrZXljbGljayAgICAgIFRvZ2dsZSBLZXljbGljayBt b2RlXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfTE9HREVCVUcgICAgOiAgICAgICAg ICAgICAgIC8qIFRvZ2dsZSBEZWJ1ZyBMb2cgRmlsZSAqLwotICAgICAgcHJpbnRmKCJcXEtsb2dk ZWJ1ZyAgICAgIFRvZ2dsZSBEZWJ1ZyBMb2dnaW5nIHRvIEZpbGVcbiIpOwotICAgICAgYnJlYWs7 Ci0gICAgY2FzZSAgS19GTktFWVMgICAgICA6ICAgICAgICAgICAgICAgLyogU2hvdyBGdW5jdGlv biBLZXkgTGFiZWxzICovCi0gICAgICBwcmludGYoIlxcS2Zua2V5cyAgICAgICAgRGlzcGxheSBG dW5jdGlvbiBLZXkgTGFiZWxzXG4iKTsKLSAgICAgIGJyZWFrOwotCi0jaWZkZWYgT1MyTU9VU0UK LS8qIE1vdXNlIG9ubHkgS3ZlcmJzICovCi0KLSAgICBjYXNlICBLX01PVVNFX0NVUlBPUyA6Ci0g ICAgICBwcmludGYoIlxcS21vdXNlY3VycG9zICAgTW91c2U6IE1vdmUgaG9zdCBjdXJzb3IgdG8g cG9zaXRpb25cbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19NT1VTRV9NQVJLICAgOgot ICAgICAgcHJpbnRmKAotICAgICAiXFxLbW91c2VtYXJrICAgICBNb3VzZTogTWFyayB0ZXh0IGZv ciBzZWxlY3Rpb24gKGRyYWcgZXZlbnQgb25seSlcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2Fz ZSAgS19NT1VTRV9VUkwgICAgOgotICAgICAgcHJpbnRmKCJcXEttb3VzZXVybCAgICAgIE1vdXNl OiBTdGFydCBicm93c2VyIHdpdGggc2VsZWN0ZWQgVVJMXG4iKTsKLSAgICAgIGJyZWFrOwotI2Vu ZGlmIC8qIE9TMk1PVVNFICovCi0KLS8qIEFOU0kgRnVuY3Rpb24gS2V5IGRlZmluaXRpb25zICov Ci0gICAgY2FzZSAgS19BTlNJRjAxICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWYw MSAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBGMSBcbiIpOwotICAgICAgYnJlYWs7Ci0g ICAgY2FzZSAgS19BTlNJRjAyICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWYwMiAg ICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBGMiBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAg Y2FzZSAgS19BTlNJRjAzICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWYwMyAgICAg ICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBGMyBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2Fz ZSAgS19BTlNJRjA0ICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWYwNCAgICAgICBU cmFuc21pdCBTQ09BTlNJL0FUMzg2OiBGNCBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAg S19BTlNJRjA1ICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWYwNSAgICAgICBUcmFu c21pdCBTQ09BTlNJL0FUMzg2OiBGNSBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19B TlNJRjA2ICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWYwNiAgICAgICBUcmFuc21p dCBTQ09BTlNJL0FUMzg2OiBGNiBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJ RjA3ICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWYwNyAgICAgICBUcmFuc21pdCBT Q09BTlNJL0FUMzg2OiBGNyBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJRjA4 ICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWYwOCAgICAgICBUcmFuc21pdCBTQ09B TlNJL0FUMzg2OiBGOCBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJRjA5ICAg ICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWYwOSAgICAgICBUcmFuc21pdCBTQ09BTlNJ L0FUMzg2OiBGOSBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJRjEwICAgICAg ICAgIDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWYxMCAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FU Mzg2OiBGMTBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJRjExICAgICAgICAg IDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWYxMSAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2 OiBGMTFcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJRjEyICAgICAgICAgIDoK LSAgICAgIHByaW50ZigiXFxLYW5zaWYxMiAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBG MTJcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJRjEzICAgICAgICAgIDoKLSAg ICAgIHByaW50ZigiXFxLYW5zaWYxMyAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBTaGlm dC1GMSBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJRjE0ICAgICAgICAgIDoK LSAgICAgIHByaW50ZigiXFxLYW5zaWYxNCAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBT aGlmdC1GMiBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJRjE1ICAgICAgICAg IDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWYxNSAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2 OiBTaGlmdC1GMyBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJRjE2ICAgICAg ICAgIDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWYxNiAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FU Mzg2OiBTaGlmdC1GNCBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJRjE3ICAg ICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWYxNyAgICAgICBUcmFuc21pdCBTQ09BTlNJ L0FUMzg2OiBTaGlmdC1GNSBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJRjE4 ICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWYxOCAgICAgICBUcmFuc21pdCBTQ09B TlNJL0FUMzg2OiBTaGlmdC1GNiBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJ RjE5ICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWYxOSAgICAgICBUcmFuc21pdCBT Q09BTlNJL0FUMzg2OiBTaGlmdC1GNyBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19B TlNJRjIwICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWYyMCAgICAgICBUcmFuc21p dCBTQ09BTlNJL0FUMzg2OiBTaGlmdC1GOCBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAg S19BTlNJRjIxICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWYyMSAgICAgICBUcmFu c21pdCBTQ09BTlNJL0FUMzg2OiBTaGlmdC1GOSBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2Fz ZSAgS19BTlNJRjIyICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWYyMiAgICAgICBU cmFuc21pdCBTQ09BTlNJL0FUMzg2OiBTaGlmdC1GMTBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAg Y2FzZSAgS19BTlNJRjIzICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWYyMyAgICAg ICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBTaGlmdC1GMTFcbiIpOwotICAgICAgYnJlYWs7Ci0g ICAgY2FzZSAgS19BTlNJRjI0ICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWYyNCAg ICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBTaGlmdC1GMTJcbiIpOwotICAgICAgYnJlYWs7 Ci0gICAgY2FzZSAgS19BTlNJRjI1ICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWYy NSAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBDdHJsLUYxIFxuIik7Ci0gICAgICBicmVh azsKLSAgICBjYXNlICBLX0FOU0lGMjYgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEthbnNp ZjI2ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEN0cmwtRjIgXG4iKTsKLSAgICAgIGJy ZWFrOwotICAgIGNhc2UgIEtfQU5TSUYyNyAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Fu c2lmMjcgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogQ3RybC1GMyBcbiIpOwotICAgICAg YnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJRjI4ICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxL YW5zaWYyOCAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBDdHJsLUY0IFxuIik7Ci0gICAg ICBicmVhazsKLSAgICBjYXNlICBLX0FOU0lGMjkgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJc XEthbnNpZjI5ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEN0cmwtRjUgXG4iKTsKLSAg ICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5TSUYzMCAgICAgICAgICA6Ci0gICAgICBwcmludGYo IlxcS2Fuc2lmMzAgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogQ3RybC1GNiBcbiIpOwot ICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJRjMxICAgICAgICAgIDoKLSAgICAgIHByaW50 ZigiXFxLYW5zaWYzMSAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBDdHJsLUY3IFxuIik7 Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0FOU0lGMzIgICAgICAgICAgOgotICAgICAgcHJp bnRmKCJcXEthbnNpZjMyICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEN0cmwtRjggXG4i KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5TSUYzMyAgICAgICAgICA6Ci0gICAgICBw cmludGYoIlxcS2Fuc2lmMzMgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogQ3RybC1GOSBc biIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJRjM0ICAgICAgICAgIDoKLSAgICAg IHByaW50ZigiXFxLYW5zaWYzNCAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBDdHJsLUYx MFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0FOU0lGMzUgICAgICAgICAgOgotICAg ICAgcHJpbnRmKCJcXEthbnNpZjM1ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEN0cmwt RjExXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5TSUYzNiAgICAgICAgICA6Ci0g ICAgICBwcmludGYoIlxcS2Fuc2lmMzYgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogQ3Ry bC1GMTJcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJRjM3ICAgICAgICAgIDoK LSAgICAgIHByaW50ZigiXFxLYW5zaWYzNyAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBD dHJsLVNoaWZ0LUYxIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0FOU0lGMzggICAg ICAgICAgOgotICAgICAgcHJpbnRmKCJcXEthbnNpZjM4ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kv QVQzODY6IEN0cmwtU2hpZnQtRjIgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5T SUYzOSAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmMzkgICAgICAgVHJhbnNtaXQg U0NPQU5TSS9BVDM4NjogQ3RybC1TaGlmdC1GMyBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2Fz ZSAgS19BTlNJRjQwICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWY0MCAgICAgICBU cmFuc21pdCBTQ09BTlNJL0FUMzg2OiBDdHJsLVNoaWZ0LUY0IFxuIik7Ci0gICAgICBicmVhazsK LSAgICBjYXNlICBLX0FOU0lGNDEgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEthbnNpZjQx ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEN0cmwtU2hpZnQtRjUgXG4iKTsKLSAgICAg IGJyZWFrOwotICAgIGNhc2UgIEtfQU5TSUY0MiAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxc S2Fuc2lmNDIgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogQ3RybC1TaGlmdC1GNiBcbiIp OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJRjQzICAgICAgICAgIDoKLSAgICAgIHBy aW50ZigiXFxLYW5zaWY0MyAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBDdHJsLVNoaWZ0 LUY3IFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0FOU0lGNDQgICAgICAgICAgOgot ICAgICAgcHJpbnRmKCJcXEthbnNpZjQ0ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEN0 cmwtU2hpZnQtRjggXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5TSUY0NSAgICAg ICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmNDUgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9B VDM4NjogQ3RybC1TaGlmdC1GOSBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJ RjQ2ICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWY0NiAgICAgICBUcmFuc21pdCBT Q09BTlNJL0FUMzg2OiBDdHJsLVNoaWZ0LUYxMFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNl ICBLX0FOU0lGNDcgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEthbnNpZjQ3ICAgICAgIFRy YW5zbWl0IFNDT0FOU0kvQVQzODY6IEN0cmwtU2hpZnQtRjExXG4iKTsKLSAgICAgIGJyZWFrOwot ICAgIGNhc2UgIEtfQU5TSUY0OCAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmNDgg ICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogQ3RybC1TaGlmdC1GMTJcbiIpOwotICAgICAg YnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJRjQ5ICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxL YW5zaWY0OSAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBIb21lXG4iKTsKLSAgICAgIGJy ZWFrOwotICAgIGNhc2UgIEtfQU5TSUY1MCAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Fu c2lmNTAgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogVXAgQXJyb3dcbiIpOwotICAgICAg YnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJRjUxICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxL YW5zaWY1MSAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBQZ1VwXG4iKTsKLSAgICAgIGJy ZWFrOwotICAgIGNhc2UgIEtfQU5TSUY1MiAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Fu c2lmNTIgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogQ3RybC1TaGlmdC1TdWJ0cmFjdFxu Iik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0FOU0lGNTMgICAgICAgICAgOgotICAgICAg cHJpbnRmKCJcXEthbnNpZjUzICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IExlZnQgQXJy b3dcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJRjU0ICAgICAgICAgIDoKLSAg ICAgIHByaW50ZigiXFxLYW5zaWY1NCAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBDbGVh clxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0FOU0lGNTUgICAgICAgICAgOgotICAg ICAgcHJpbnRmKCJcXEthbnNpZjU1ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IFJpZ2h0 IEFycm93XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5TSUY1NiAgICAgICAgICA6 Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmNTYgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4Njog U2hpZnQtQWRkXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5TSUY1NyAgICAgICAg ICA6Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmNTcgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4 NjogRW5kXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfQU5TSUY1OCAgICAgICAgICA6 Ci0gICAgICBwcmludGYoIlxcS2Fuc2lmNTggICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4Njog RG93biBBcnJvd1xuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0FOU0lGNTkgICAgICAg ICAgOgotICAgICAgcHJpbnRmKCJcXEthbnNpZjU5ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQz ODY6IFBnRG5cbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJRjYwICAgICAgICAg IDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWY2MCAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2 OiBJbnNlcnRcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19BTlNJRjYxICAgICAgICAg IDoKLSAgICAgIHByaW50ZigiXFxLYW5zaWY2MSAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2 OiAobm90IG5hbWVkKVxuIik7Ci0gICAgICBicmVhazsKLQotLyogV1lTRSBGdW5jdGlvbiBLZXlz ICh1bnNoaWZ0ZWQpICovCi0gICAgY2FzZSAgS19XWUYwMSAgICAgICAgICAgIDoKLSAgICAgIHBy aW50ZigiXFxLd3lmMDEgICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogRjFcbiIp OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWUYwMiAgICAgICAgICAgIDoKLSAgICAgIHBy aW50ZigiXFxLd3lmMDIgICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogRjJcbiIp OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWUYwMyAgICAgICAgICAgIDoKLSAgICAgIHBy aW50ZigiXFxLd3lmMDMgICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogRjNcbiIp OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWUYwNCAgICAgICAgICAgIDoKLSAgICAgIHBy aW50ZigiXFxLd3lmMDQgICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogRjRcbiIp OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWUYwNSAgICAgICAgICAgIDoKLSAgICAgIHBy aW50ZigiXFxLd3lmMDUgICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogRjVcbiIp OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWUYwNiAgICAgICAgICAgIDoKLSAgICAgIHBy aW50ZigiXFxLd3lmMDYgICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogRjZcbiIp OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWUYwNyAgICAgICAgICAgIDoKLSAgICAgIHBy aW50ZigiXFxLd3lmMDcgICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogRjdcbiIp OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWUYwOCAgICAgICAgICAgIDoKLSAgICAgIHBy aW50ZigiXFxLd3lmMDggICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogRjhcbiIp OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWUYwOSAgICAgICAgICAgIDoKLSAgICAgIHBy aW50ZigiXFxLd3lmMDkgICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogRjlcbiIp OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWUYxMCAgICAgICAgICAgIDoKLSAgICAgIHBy aW50ZigiXFxLd3lmMTAgICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogRjEwXG4i KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lGMTEgICAgICAgICAgICA6Ci0gICAgICBw cmludGYoIlxcS3d5ZjExICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEYxMVxu Iik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1dZRjEyICAgICAgICAgICAgOgotICAgICAg cHJpbnRmKCJcXEt3eWYxMiAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBGMTJc biIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWUYxMyAgICAgICAgICAgIDoKLSAgICAg IHByaW50ZigiXFxLd3lmMTMgICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogRjEz XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lGMTQgICAgICAgICAgICA6Ci0gICAg ICBwcmludGYoIlxcS3d5ZjE0ICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEYx NFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1dZRjE1ICAgICAgICAgICAgOgotICAg ICAgcHJpbnRmKCJcXEt3eWYxNSAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBG MTVcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWUYxNiAgICAgICAgICAgIDoKLSAg ICAgIHByaW50ZigiXFxLd3lmMTYgICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDog RjE2XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lGMTcgICAgICAgICAgICA6Ci0g ICAgICBwcmludGYoIlxcS3d5ZjE3ICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6 IEYxN1xuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1dZRjE4ICAgICAgICAgICAgOgot ICAgICAgcHJpbnRmKCJcXEt3eWYxOCAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYw OiBGMThcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWUYxOSAgICAgICAgICAgIDoK LSAgICAgIHByaW50ZigiXFxLd3lmMTkgICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2 MDogRjE5XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lGMjAgICAgICAgICAgICA6 Ci0gICAgICBwcmludGYoIlxcS3d5ZjIwICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8x NjA6IEYyMFxuIik7Ci0gICAgICBicmVhazsKLQotLyogV1lTRSBGdW5jdGlvbiBLZXlzIChzaGlm dGVkKSAqLwotICAgIGNhc2UgIEtfV1lTRjAxICAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxc S3d5c2YwMSAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IFNoaWZ0LUYxXG4iKTsK LSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lTRjAyICAgICAgICAgICA6Ci0gICAgICBwcmlu dGYoIlxcS3d5c2YwMiAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IFNoaWZ0LUYy XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lTRjAzICAgICAgICAgICAgOgotICAg ICAgcHJpbnRmKCJcXEt3eXNmMDMgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBT aGlmdC1GM1xuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1dZU0YwNCAgICAgICAgICAg IDoKLSAgICAgIHByaW50ZigiXFxLd3lzZjA0ICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYw LzE2MDogU2hpZnQtRjRcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWVNGMDUgICAg ICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS3d5c2YwNSAgICAgICAgVHJhbnNtaXQgV1lTRSAz MC81MC82MC8xNjA6IFNoaWZ0LUY1XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lT RjA2ICAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt3eXNmMDYgICAgICAgIFRyYW5zbWl0 IFdZU0UgMzAvNTAvNjAvMTYwOiBTaGlmdC1GNlxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNl ICBLX1dZU0YwNyAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLd3lzZjA3ICAgICAgICBU cmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogU2hpZnQtRjdcbiIpOwotICAgICAgYnJlYWs7Ci0g ICAgY2FzZSAgS19XWVNGMDggICAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS3d5c2YwOCAg ICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IFNoaWZ0LUY4XG4iKTsKLSAgICAgIGJy ZWFrOwotICAgIGNhc2UgIEtfV1lTRjA5ICAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt3 eXNmMDkgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBTaGlmdC1GOVxuIik7Ci0g ICAgICBicmVhazsKLSAgICBjYXNlICBLX1dZU0YxMCAgICAgICAgICAgIDoKLSAgICAgIHByaW50 ZigiXFxLd3lzZjEwICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogU2hpZnQtRjEw XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lTRjExICAgICAgICAgICAgOgotICAg ICAgcHJpbnRmKCJcXEt3eXNmMTEgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBT aGlmdC1GMTFcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWVNGMTIgICAgICAgICAg ICA6Ci0gICAgICBwcmludGYoIlxcS3d5c2YxMiAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82 MC8xNjA6IFNoaWZ0LUYxMlxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1dZU0YxMyAg ICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLd3lzZjEzICAgICAgICBUcmFuc21pdCBXWVNF IDMwLzUwLzYwLzE2MDogU2hpZnQtRjEzXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtf V1lTRjE0ICAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt3eXNmMTQgICAgICAgIFRyYW5z bWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBTaGlmdC1GMTRcbiIpOwotICAgICAgYnJlYWs7Ci0gICAg Y2FzZSAgS19XWVNGMTUgICAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS3d5c2YxNSAgICAg ICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IFNoaWZ0LUYxNVxuIik7Ci0gICAgICBicmVh azsKLSAgICBjYXNlICBLX1dZU0YxNiAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLd3lz ZjE2ICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogU2hpZnQtRjE2XG4iKTsKLSAg ICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lTRjE3ICAgICAgICAgICA6Ci0gICAgICBwcmludGYo IlxcS3d5c2YxNyAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IFNoaWZ0LUYxN1xu Iik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1dZU0YxOCAgICAgICAgICAgOgotICAgICAg cHJpbnRmKCJcXEt3eXNmMTggICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBTaGlm dC1GMThcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWVNGMTkgICAgICAgICAgIDoK LSAgICAgIHByaW50ZigiXFxLd3lzZjE5ICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2 MDogU2hpZnQtRjE5XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lTRjIwICAgICAg ICAgICA6Ci0gICAgICBwcmludGYoIlxcS3d5c2YyMCAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81 MC82MC8xNjA6IFNoaWZ0LUYyMFxuIik7Ci0gICAgICBicmVhazsKLQotLyogV1lTRSBFZGl0IGFu ZCBTcGVjaWFsIEtleXMgKi8KLSAgICBjYXNlICBLX1dZQlMgICAgICAgICA6Ci0gICAgICBwcmlu dGYoIlxcS3d5YnMgICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEJhY2tzcGFj ZVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1dZQ0xSTE4gICAgICAgICAgOgotICAg ICAgcHJpbnRmKCJcXEt3eWNscmxuICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBD bGVhciBMaW5lXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lTQ0xSTE4gICAgIDoK LSAgICAgcHJpbnRmKCJcXEt3eXNjbHJsbiAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYw OiBTaGlmdC1DbGVhciBMaW5lXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lDTFJQ RyAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLd3ljbHJwZyAgICAgICBUcmFuc21pdCBXWVNFIDMw LzUwLzYwLzE2MDogQ2xlYXIgUGFnZVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1dZ U0NMUlBHICAgICA6Ci0gICAgcHJpbnRmKCJcXEt3eXNjbHJwZyAgICAgIFRyYW5zbWl0IFdZU0Ug MzAvNTAvNjAvMTYwOiBTaGlmdC1DbGVhciBQYWdlXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNh c2UgIEtfV1lERUxDSEFSICAgIDoKLSAgICAgIHByaW50ZigiXFxLd3lkZWxjaGFyICAgICBUcmFu c21pdCBXWVNFIDMwLzUwLzYwLzE2MDogRGVsZXRlIENoYXJcbiIpOwotICAgICAgYnJlYWs7Ci0g ICAgY2FzZSAgS19XWURFTExOICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt3eWRlbGxuICAgICAg IFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBEZWxldGUgTGluZVxuIik7Ci0gICAgICBicmVh azsKLSAgICBjYXNlICBLX1dZRU5URVIgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt3eWVu dGVyICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBFbnRlclxuIik7Ci0gICAgICBi cmVhazsKLSAgICBjYXNlICBLX1dZRVNDICAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt3 eWVzYyAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBFc2NcbiIpOwotICAgICAg YnJlYWs7Ci0gICAgY2FzZSAgS19XWUhPTUUgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxL d3lob21lICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogSG9tZVxuIik7Ci0gICAg ICBicmVhazsKLSAgICBjYXNlICBLX1dZU0hPTUUgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJc XEt3eXNob21lICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBTaGlmdC1Ib21lXG4i KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lJTlNFUlQgICAgIDoKLSAgICAgIHByaW50 ZigiXFxLd3lpbnNlcnQgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogSW5zZXJ0XG4i KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lJTlNDSEFSICAgIDoKLSAgICAgIHByaW50 ZigiXFxLd3lpbnNjaGFyICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogSW5zZXJ0IENo YXJcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWUlOU0xOICAgICAgICAgIDoKLSAg ICAgIHByaW50ZigiXFxLd3lpbnNsbiAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDog SW5zZXJ0IExpbmVcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWVBHTkVYVCAgICAg OgotICAgICAgcHJpbnRmKCJcXEt3eXBnbmV4dCAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAv MTYwOiBQYWdlIE5leHRcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWVBHUFJFViAg ICAgOgotICAgICAgcHJpbnRmKCJcXEt3eXBncHJldiAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAv NjAvMTYwOiBQYWdlIFByZXZpb3VzXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lS RVBMQUNFICAgIDoKLSAgICAgIHByaW50ZigiXFxLd3lyZXBsYWNlICAgICBUcmFuc21pdCBXWVNF IDMwLzUwLzYwLzE2MDogUmVwbGFjZSAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNl ICBLX1dZUkVUVVJOICAgICA6Ci0gICAgICBwcmludGYoIlxcS3d5cmV0dXJuICAgICAgVHJhbnNt aXQgV1lTRSAzMC81MC82MC8xNjA6IFJldHVybiAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0g ICAgY2FzZSAgS19XWVRBQiAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLd3l0YWIgICAg ICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogVGFiICAgICAgICAgIFxuIik7Ci0gICAg ICBicmVhazsKLSAgICBjYXNlICBLX1dZU1RBQiAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJc XEt3eXN0YWIgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBTaGlmdC1UYWIgICAg XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lQUlRTQ04gICAgIDoKLSAgICAgIHBy aW50ZigiXFxLd3lwcnRzY24gICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogUHJpbnQg U2NyZWVuIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1dZU0VTQyAgICAgICA6Ci0g ICAgICBwcmludGYoIlxcS3d5c2VzYyAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6 IFNoaWZ0LUVzYyAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWVNCUyAgICAg ICAgOgotICAgIHByaW50ZigiXFxLd3lzYnMgICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYw LzE2MDogU2hpZnQtQmFja3NwYWNlXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lT RU5URVIgICAgIDoKLSAgICAgIHByaW50ZigiXFxLd3lzZW50ZXIgICAgICBUcmFuc21pdCBXWVNF IDMwLzUwLzYwLzE2MDogU2hpZnQtRW50ZXJcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAg S19XWVNSRVRVUk4gICAgOgotICAgICAgcHJpbnRmKCJcXEt3eXNyZXR1cm4gICAgIFRyYW5zbWl0 IFdZU0UgMzAvNTAvNjAvMTYwOiBTaGlmdC1SZXR1cm5cbiIpOwotICAgICAgYnJlYWs7Ci0gICAg Y2FzZSAgS19XWVVQQVJSICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLd3l1cGFyciAgICAg ICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogVXAgQXJyb3dcbiIpOwotICAgICAgYnJlYWs7 Ci0gICAgY2FzZSAgS19XWUROQVJSICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLd3lkbmFy ciAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogRG93biBBcnJvd1xuIik7Ci0gICAg ICBicmVhazsKLSAgICBjYXNlICBLX1dZTEZBUlIgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJc XEt3eWxmYXJyICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBMZWZ0IEFycm93XG4i KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lSVEFSUiAgICAgICAgICA6Ci0gICAgICBw cmludGYoIlxcS3d5cnRhcnIgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IFJpZ2h0 IEFycm93XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfV1lTVVBBUlIgICAgIDoKLSAg ICAgIHByaW50ZigiXFxLd3lzdXBhcnIgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDog U2hpZnQtVXAgQXJyb3dcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19XWVNETkFSUiAg ICAgOgotICAgIHByaW50ZigiXFxLd3lzZG5hcnIgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYw LzE2MDogU2hpZnQtRG93biBBcnJvd1xuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1dZ U0xGQVJSICAgICA6Ci0gICAgcHJpbnRmKCJcXEt3eXNsZmFyciAgICAgIFRyYW5zbWl0IFdZU0Ug MzAvNTAvNjAvMTYwOiBTaGlmdC1MZWZ0IEFycm93XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNh c2UgIEtfV1lTUlRBUlIgICAgIDoKLSAgICBwcmludGYoIlxcS3d5c3J0YXJyICAgICAgVHJhbnNt aXQgV1lTRSAzMC81MC82MC8xNjA6IFNoaWZ0LVJpZ2h0IEFycm93XG4iKTsKLSAgICAgIGJyZWFr OwotICAgIGNhc2UgIEtfV1lTRU5EOgotICAgICAgcHJpbnRmKCJcXEt3eXNlbmQgICAgICAgIFRy YW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBTZW5kXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNh c2UgIEtfV1lTU0VORDoKLSAgICAgIHByaW50ZigiXFxLd3lzc2VuZCAgICAgICBUcmFuc21pdCBX WVNFIDMwLzUwLzYwLzE2MDogU2hpZnQtU2VuZFxuIik7Ci0gICAgICBicmVhazsKLQotLyogRGF0 YSBHZW5lcmFsIEZ1bmN0aW9uIEtleXMgKHVuc2hpZnRlZCkgKi8KLSAgICBjYXNlICBLX0RHRjAx ICAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEtkZ2YwMSAgICAgICAgIFRyYW5zbWl0IERh dGEgR2VuZXJhbDogRjEgICAgICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBj YXNlICBLX0RHRjAyICAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEtkZ2YwMSAgICAgICAg IFRyYW5zbWl0IERhdGEgR2VuZXJhbDogRjIgICAgICAgICAgICAgICAgIFxuIik7Ci0gICAgICBi cmVhazsKLSAgICBjYXNlICBLX0RHRjAzICAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEtk Z2YwMSAgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogRjMgICAgICAgICAgICAgICAgIFxu Iik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0RHRjA0ICAgICAgICAgICAgOgotICAgICAg cHJpbnRmKCJcXEtkZ2YwMSAgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogRjQgICAgICAg ICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0RHRjA1ICAgICAgICAg ICAgOgotICAgICAgcHJpbnRmKCJcXEtkZ2YwMSAgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJh bDogRjUgICAgICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0RH RjA2ICAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEtkZ2YwMSAgICAgICAgIFRyYW5zbWl0 IERhdGEgR2VuZXJhbDogRjYgICAgICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAg ICBjYXNlICBLX0RHRjA3ICAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEtkZ2YwMSAgICAg ICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogRjcgICAgICAgICAgICAgICAgIFxuIik7Ci0gICAg ICBicmVhazsKLSAgICBjYXNlICBLX0RHRjA4ICAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJc XEtkZ2YwMSAgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogRjggICAgICAgICAgICAgICAg IFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0RHRjA5ICAgICAgICAgICAgOgotICAg ICAgcHJpbnRmKCJcXEtkZ2YwMSAgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogRjkgICAg ICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0RHRjEwICAgICAg ICAgICAgOgotICAgICAgcHJpbnRmKCJcXEtkZ2YwMSAgICAgICAgIFRyYW5zbWl0IERhdGEgR2Vu ZXJhbDogRjEwICAgICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBL X0RHRjExICAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEtkZ2YwMSAgICAgICAgIFRyYW5z bWl0IERhdGEgR2VuZXJhbDogRjExICAgICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsK LSAgICBjYXNlICBLX0RHRjEyICAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEtkZ2YwMSAg ICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogRjEyICAgICAgICAgICAgICAgIFxuIik7Ci0g ICAgICBicmVhazsKLSAgICBjYXNlICBLX0RHRjEzICAgICAgICAgICAgOgotICAgICAgcHJpbnRm KCJcXEtkZ2YwMSAgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogRjEzICAgICAgICAgICAg ICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0RHRjE0ICAgICAgICAgICAgOgot ICAgICAgcHJpbnRmKCJcXEtkZ2YwMSAgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogRjE0 ICAgICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0RHRjE1ICAg ICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEtkZ2YwMSAgICAgICAgIFRyYW5zbWl0IERhdGEg R2VuZXJhbDogRjE1ICAgICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLQotLyogRGF0 YSBHZW5lcmFsIEZ1bmN0aW9uIEtleXMgKHNoaWZ0ZWQpICovCi0gICAgY2FzZSAgS19ER1NGMDEg ICAgICAgICAgIDoKLSAgICAgIHByaW50ZigKLSAgICAgICJcXEtkZ3NmMDEgICAgICAgIFRyYW5z bWl0IERhdGEgR2VuZXJhbDogU2hpZnQtRjEgICAgICAgICAgICAgICAgIFxuIik7Ci0gICAgICBi cmVhazsKLSAgICBjYXNlICBLX0RHU0YwMiAgICAgICAgICAgOgotICAgICAgcHJpbnRmKAotICAg ICAgIlxcS2Rnc2YwMiAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBTaGlmdC1GMiAgICAg ICAgICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREdTRjAzICAgICAg ICAgICA6Ci0gICAgICBwcmludGYoCi0gICAgICAiXFxLZGdzZjAzICAgICAgICBUcmFuc21pdCBE YXRhIEdlbmVyYWw6IFNoaWZ0LUYzICAgICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7 Ci0gICAgY2FzZSAgS19ER1NGMDQgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigKLSAgICAgICJc XEtkZ3NmMDQgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogU2hpZnQtRjQgICAgICAgICAg ICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0RHU0YwNSAgICAgICAgICAg OgotICAgICAgcHJpbnRmKAotICAgICAgIlxcS2Rnc2YwNSAgICAgICAgVHJhbnNtaXQgRGF0YSBH ZW5lcmFsOiBTaGlmdC1GNSAgICAgICAgICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAg IGNhc2UgIEtfREdTRjA2ICAgICAgICAgICA6Ci0gICAgICBwcmludGYoCi0gICAgICAiXFxLZGdz ZjA2ICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IFNoaWZ0LUY2ICAgICAgICAgICAgICAg ICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ER1NGMDcgICAgICAgICAgIDoKLSAg ICAgIHByaW50ZigKLSAgICAgICJcXEtkZ3NmMDcgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJh bDogU2hpZnQtRjcgICAgICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNl ICBLX0RHU0YwOCAgICAgICAgICAgOgotICAgICAgcHJpbnRmKAotICAgICAgIlxcS2Rnc2YwOCAg ICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBTaGlmdC1GOCAgICAgICAgICAgICAgICAgXG4i KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREdTRjA5ICAgICAgICAgICA6Ci0gICAgICBw cmludGYoCi0gICAgICAiXFxLZGdzZjA5ICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IFNo aWZ0LUY5ICAgICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19E R1NGMTAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigKLSAgICAgICJcXEtkZ3NmMTAgICAgICAg IFRyYW5zbWl0IERhdGEgR2VuZXJhbDogU2hpZnQtRjEwICAgICAgICAgICAgICAgIFxuIik7Ci0g ICAgICBicmVhazsKLSAgICBjYXNlICBLX0RHU0YxMSAgICAgICAgICAgOgotICAgICAgcHJpbnRm KAotICAgICAgIlxcS2Rnc2YxMSAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBTaGlmdC1G MTEgICAgICAgICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREdTRjEy ICAgICAgICAgICA6Ci0gICAgICBwcmludGYoCi0gICAgICAiXFxLZGdzZjEyICAgICAgICBUcmFu c21pdCBEYXRhIEdlbmVyYWw6IFNoaWZ0LUYxMiAgICAgICAgICAgICAgICBcbiIpOwotICAgICAg YnJlYWs7Ci0gICAgY2FzZSAgS19ER1NGMTMgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigKLSAg ICAgICJcXEtkZ3NmMTMgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogU2hpZnQtRjEzICAg ICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0RHU0YxNCAgICAg ICAgICAgOgotICAgICAgcHJpbnRmKAotICAgICAgIlxcS2Rnc2YxNCAgICAgICAgVHJhbnNtaXQg RGF0YSBHZW5lcmFsOiBTaGlmdC1GMTQgICAgICAgICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFr OwotICAgIGNhc2UgIEtfREdTRjE1ICAgICAgICAgICA6Ci0gICAgICBwcmludGYoCi0gICAgICAi XFxLZGdzZjE1ICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IFNoaWZ0LUYxNSAgICAgICAg ICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0KLS8qIERhdGEgR2VuZXJhbCBGdW5jdGlvbiBL ZXlzIChjb250cm9sKSAqLwotICAgIGNhc2UgIEtfREdDRjAxICAgICAgICAgICA6Ci0gICAgICBw cmludGYoCi0gICAgICAiXFxLZGdjZjAxICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEN0 cmwtRjEgICAgICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0RH Q0YwMiAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigKLSAgICAgICJcXEtkZ2NmMDIgICAgICAg IFRyYW5zbWl0IERhdGEgR2VuZXJhbDogQ3RybC1GMiAgICAgICAgICAgICAgICAgXG4iKTsKLSAg ICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREdDRjAzICAgICAgICAgICAgOgotICAgICAgcHJpbnRm KAotICAgICAgIlxcS2RnY2YwMyAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBDdHJsLUYz ICAgICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ER0NGMDQg ICAgICAgICAgICA6Ci0gICAgICBwcmludGYoCi0gICAgICAiXFxLZGdjZjA0ICAgICAgICBUcmFu c21pdCBEYXRhIEdlbmVyYWw6IEN0cmwtRjQgICAgICAgICAgICAgICAgIFxuIik7Ci0gICAgICBi cmVhazsKLSAgICBjYXNlICBLX0RHQ0YwNSAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigKLSAg ICAgICJcXEtkZ2NmMDUgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogQ3RybC1GNSAgICAg ICAgICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREdDRjA2ICAgICAg ICAgICAgOgotICAgICAgcHJpbnRmKAotICAgICAgIlxcS2RnY2YwNiAgICAgICAgVHJhbnNtaXQg RGF0YSBHZW5lcmFsOiBDdHJsLUY2ICAgICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7 Ci0gICAgY2FzZSAgS19ER0NGMDcgICAgICAgICAgICA6Ci0gICAgICBwcmludGYoCi0gICAgICAi XFxLZGdjZjA3ICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEN0cmwtRjcgICAgICAgICAg ICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0RHQ0YwOCAgICAgICAgICAg IDoKLSAgICAgIHByaW50ZigKLSAgICAgICJcXEtkZ2NmMDggICAgICAgIFRyYW5zbWl0IERhdGEg R2VuZXJhbDogQ3RybC1GOCAgICAgICAgICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAg IGNhc2UgIEtfREdDRjA5ICAgICAgICAgICAgOgotICAgICAgcHJpbnRmKAotICAgICAgIlxcS2Rn Y2YwOSAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBDdHJsLUY5ICAgICAgICAgICAgICAg ICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ER0NGMTAgICAgICAgICAgICA6Ci0g ICAgICBwcmludGYoCi0gICAgICAiXFxLZGdjZjEwICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVy YWw6IEN0cmwtRjEwICAgICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNl ICBLX0RHQ0YxMSAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigKLSAgICAgICJcXEtkZ2NmMTEg ICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogQ3RybC1GMTEgICAgICAgICAgICAgICAgXG4i KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREdDRjEyICAgICAgICAgICAgOgotICAgICAg cHJpbnRmKAotICAgICAgIlxcS2RnY2YxMiAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBD dHJsLUYxMiAgICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19E R0NGMTMgICAgICAgICAgICA6Ci0gICAgICBwcmludGYoCi0gICAgICAiXFxLZGdjZjEzICAgICAg ICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEN0cmwtRjEzICAgICAgICAgICAgICAgIFxuIik7Ci0g ICAgICBicmVhazsKLSAgICBjYXNlICBLX0RHQ0YxNCAgICAgICAgICAgIDoKLSAgICAgIHByaW50 ZigKLSAgICAgICJcXEtkZ2NmMTQgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogQ3RybC1G MTQgICAgICAgICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREdDRjE1 ICAgICAgICAgICAgOgotICAgICAgcHJpbnRmKAotICAgICAgIlxcS2RnY2YxNSAgICAgICAgVHJh bnNtaXQgRGF0YSBHZW5lcmFsOiBDdHJsLUYxNSAgICAgICAgICAgICAgICBcbiIpOwotICAgICAg YnJlYWs7Ci0KLS8qIERhdGEgR2VuZXJhbCBGdW5jdGlvbiBLZXlzIChjb250cm9sIHNoaWZ0ZWQp ICovCi0gICAgY2FzZSAgS19ER0NTRjAxICAgICAgICAgIDoKLSAgICAgIHByaW50ZigKLSAgICAi XFxLZGdjc2YwMSAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEN0cmwtU2hpZnQtRjEgICAg ICAgICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREdDU0YwMiAgICAg ICAgICA6Ci0gICAgICBwcmludGYoCi0gICAgIlxcS2RnY3NmMDIgICAgICAgVHJhbnNtaXQgRGF0 YSBHZW5lcmFsOiBDdHJsLVNoaWZ0LUYyICAgICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVh azsKLSAgICBjYXNlICBLX0RHQ1NGMDMgICAgICAgICAgOgotICAgICAgcHJpbnRmKAotICAgICJc XEtkZ2NzZjAzICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogQ3RybC1TaGlmdC1GMyAgICAg ICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ER0NTRjA0ICAgICAg ICAgIDoKLSAgICAgIHByaW50ZigKLSAgICAiXFxLZGdjc2YwNCAgICAgICBUcmFuc21pdCBEYXRh IEdlbmVyYWw6IEN0cmwtU2hpZnQtRjQgICAgICAgICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFr OwotICAgIGNhc2UgIEtfREdDU0YwNSAgICAgICAgICA6Ci0gICAgICBwcmludGYoCi0gICAgIlxc S2RnY3NmMDUgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBDdHJsLVNoaWZ0LUY1ICAgICAg ICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0RHQ1NGMDYgICAgICAg ICAgOgotICAgICAgcHJpbnRmKAotICAgICJcXEtkZ2NzZjA2ICAgICAgIFRyYW5zbWl0IERhdGEg R2VuZXJhbDogQ3RybC1TaGlmdC1GNiAgICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7 Ci0gICAgY2FzZSAgS19ER0NTRjA3ICAgICAgICAgIDoKLSAgICAgIHByaW50ZigKLSAgICAiXFxL ZGdjc2YwNyAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEN0cmwtU2hpZnQtRjcgICAgICAg ICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREdDU0YwOCAgICAgICAg ICA6Ci0gICAgICBwcmludGYoCi0gICAgIlxcS2RnY3NmMDggICAgICAgVHJhbnNtaXQgRGF0YSBH ZW5lcmFsOiBDdHJsLVNoaWZ0LUY4ICAgICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsK LSAgICBjYXNlICBLX0RHQ1NGMDkgICAgICAgICAgOgotICAgICAgcHJpbnRmKAotICAgICJcXEtk Z2NzZjA5ICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogQ3RybC1TaGlmdC1GOSAgICAgICAg ICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ER0NTRjEwICAgICAgICAg IDoKLSAgICAgIHByaW50ZigKLSAgICAiXFxLZGdjc2YxMCAgICAgICBUcmFuc21pdCBEYXRhIEdl bmVyYWw6IEN0cmwtU2hpZnQtRjEwICAgICAgICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwot ICAgIGNhc2UgIEtfREdDU0YxMSAgICAgICAgICA6Ci0gICAgICBwcmludGYoCi0gICAgIlxcS2Rn Y3NmMTEgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBDdHJsLVNoaWZ0LUYxMSAgICAgICAg ICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0RHQ1NGMTIgICAgICAgICAg OgotICAgICAgcHJpbnRmKAotICAgICJcXEtkZ2NzZjEyICAgICAgIFRyYW5zbWl0IERhdGEgR2Vu ZXJhbDogQ3RybC1TaGlmdC1GMTIgICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0g ICAgY2FzZSAgS19ER0NTRjEzICAgICAgICAgIDoKLSAgICAgIHByaW50ZigKLSAgICAiXFxLZGdj c2YxMyAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEN0cmwtU2hpZnQtRjEzICAgICAgICAg ICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREdDU0YxNCAgICAgICAgICA6 Ci0gICAgICBwcmludGYoCi0gICAgIlxcS2RnY3NmMTQgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5l cmFsOiBDdHJsLVNoaWZ0LUYxNCAgICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAg ICBjYXNlICBLX0RHQ1NGMTUgICAgICAgICAgOgotICAgICAgcHJpbnRmKAotICAgICJcXEtkZ2Nz ZjE1ICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogQ3RybC1TaGlmdC1GMTUgICAgICAgICAg ICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlICBLX0RHVVBBUlIgICAgICAgICAg OgotICAgICAgcHJpbnRmKCJcXEtkZ3VwYXJyICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDog VXAgQXJyb3cgICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREdETkFS UiAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2RnZG5hcnIgICAgICAgVHJhbnNtaXQgRGF0 YSBHZW5lcmFsOiBEb3duIEFycm93ICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2Fz ZSAgS19ER0xGQVJSICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLZGdsZmFyciAgICAgICBU cmFuc21pdCBEYXRhIEdlbmVyYWw6IExlZnQgQXJyb3cgICAgICAgIFxuIik7Ci0gICAgICBicmVh azsKLSAgICBjYXNlICBLX0RHUlRBUlIgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEtkZ3J0 YXJyICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogUmlnaHQgQXJyb3cgICAgICAgXG4iKTsK LSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREdTVVBBUlIgICAgIDoKLSAgICAgIHByaW50Zigi XFxLZGdzdXBhcnIgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IFNoaWZ0LVVwIEFycm93ICAg IFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0RHU0ROQVJSICAgICA6Ci0gICAgICBw cmludGYoIlxcS2Rnc2RuYXJyICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBTaGlmdC1Eb3du IEFycm93ICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ER1NMRkFSUiAgICAgOgot ICAgICAgcHJpbnRmKCJcXEtkZ3NsZmFyciAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogU2hp ZnQtTGVmdCBBcnJvdyAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREdTUlRBUlIg ICAgIDoKLSAgICAgIHByaW50ZigiXFxLZGdzcnRhcnIgICAgICBUcmFuc21pdCBEYXRhIEdlbmVy YWw6IFNoaWZ0LVJpZ2h0IEFycm93IFxuIik7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgIEtf REdFUkFTRVBBR0UgIDoKLSAgICAgIHByaW50ZigiXFxLZGdlcmFzZXBhZ2UgICBUcmFuc21pdCBE YXRhIEdlbmVyYWw6IEVyYXNlIFBhZ2UgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBj YXNlICBLX0RHQzEgICAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEtkZ2MxICAgICAgICAg IFRyYW5zbWl0IERhdGEgR2VuZXJhbDogQzEgICAgICAgICAgICAgICAgXG4iKTsKLSAgICAgIGJy ZWFrOwotICAgIGNhc2UgIEtfREdDMiAgICAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2Rn YzIgICAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBDMiAgICAgICAgICAgICAgICBcbiIp OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ER0VSQVNFRU9MICAgOgotICAgICAgcHJpbnRm KCJcXEtkZ2VyYXNlZW9sICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogRXJhc2UgRU9MICAgICAg ICAgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREdDMyAgICAgICAgICAgICA6Ci0g ICAgICBwcmludGYoIlxcS2RnYzMgICAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBDMyAg ICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ER0M0ICAgICAg ICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLZGdjNCAgICAgICAgICBUcmFuc21pdCBEYXRhIEdl bmVyYWw6IEM0ICAgICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBL X0RHQ01EUFJJTlQgICA6Ci0gICAgICBwcmludGYoIlxcS2RnY21kcHJpbnQgICAgVHJhbnNtaXQg RGF0YSBHZW5lcmFsOiBDb21tYW5kIFByaW50ICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAg Y2FzZSAgS19ER0hPTUUgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEtkZ2hvbWUgICAgICAgIFRy YW5zbWl0IERhdGEgR2VuZXJhbDogSG9tZSAgICAgICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFr OwotICAgIGNhc2UgIEtfREdTRVJBU0VQQUdFIDoKLSAgICAgIHByaW50ZigiXFxLZGdzZXJhc2Vw YWdlICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEVyYXNlIFBhZ2UgICAgICAgIFxuIik7Ci0gICAg ICBicmVhazsKLSAgICBjYXNlICBLX0RHU0MxICAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJc XEtkZ3NjMSAgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogU2hpZnQtQzEgICAgICAgICAg XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREdTQzIgICAgICAgICAgICA6Ci0gICAg ICBwcmludGYoIlxcS2Rnc2MyICAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBTaGlmdC1D MiAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ER1NFUkFTRUVPTCAg OgotICAgICAgcHJpbnRmKCJcXEtkZ3NlcmFzZWVvbCAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDog U2hpZnQtRXJhc2UgRU9MICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ER1NDMyAg ICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLZGdzYzMgICAgICAgICBUcmFuc21pdCBEYXRh IEdlbmVyYWw6IFNoaWZ0LUMzICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNl ICBLX0RHU0M0ICAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEtkZ3NjNCAgICAgICAgIFRy YW5zbWl0IERhdGEgR2VuZXJhbDogU2hpZnQtQzQgICAgICAgICAgXG4iKTsKLSAgICAgIGJyZWFr OwotICAgIGNhc2UgIEtfREdTQ01EUFJJTlQgIDoKLSAgICAgIHByaW50ZigiXFxLZGdzY21kcHJp bnQgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IFNoaWZ0LUNvbW1hbmQgUHJpbnRcbiIpOwotICAg ICAgYnJlYWs7Ci0gICAgY2FzZSAgS19ER0JTICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEtk Z2JzICAgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogQmFja3NwYWNlICAgICAgICAgXG4i KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfREdTSE9NRSAgICAgIDoKLSAgICAgIHByaW50 ZigiXFxLZHNob21lICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IFNoaWZ0LUhvbWUgICAg ICAgIFxuIik7Ci0gICAgICBicmVhazsKLQotCi0vKiBUZWxldmlkZW8gRnVuY3Rpb24gS2V5cyAo dW5zaGlmdGVkKSAqLwotICAgIGNhc2UgIEtfVFZJRjAxICAgICAgICAgICA6Ci0gICAgICBwcmlu dGYoIlxcS3R2aWYwMSAgICAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBGMSAgICAgICBcbiIpOwot ICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklGMDIgICAgICAgICAgIDoKLSAgICAgIHByaW50 ZigiXFxLdHZpZjAyICAgICAgICBUcmFuc21pdCBUZWxldmlkZW86IEYyICAgICAgICAgICAgICBc biIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklGMDMgICAgICAgICAgIDoKLSAgICAg IHByaW50ZigiXFxLdHZpZjAzICAgICAgICBUcmFuc21pdCBUZWxldmlkZW86IEYzICAgICAgICAg ICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSUYwNCAgICAgICAgICAgOgot ICAgICAgcHJpbnRmKCJcXEt0dmlmMDQgICAgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzogRjQgICAg ICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSUYwNSAgICAgICAg ICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlmMDUgICAgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzog RjUgICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSUYwNiAg ICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlmMDYgICAgICAgIFRyYW5zbWl0IFRlbGV2 aWRlbzogRjYgICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RW SUYwNyAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlmMDcgICAgICAgIFRyYW5zbWl0 IFRlbGV2aWRlbzogRjcgICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNl ICBLX1RWSUYwOCAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlmMDggICAgICAgIFRy YW5zbWl0IFRlbGV2aWRlbzogRjggICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAg ICBjYXNlICBLX1RWSUYwOSAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlmMDkgICAg ICAgIFRyYW5zbWl0IFRlbGV2aWRlbzogRjkgICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVh azsKLSAgICBjYXNlICBLX1RWSUYxMCAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlm MTAgICAgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzogRjEwICAgICAgICAgICAgIFxuIik7Ci0gICAg ICBicmVhazsKLSAgICBjYXNlICBLX1RWSUYxMSAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJc XEt0dmlmMTEgICAgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzogRjExICAgICAgICAgICAgIFxuIik7 Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSUYxMiAgICAgICAgICAgOgotICAgICAgcHJp bnRmKCJcXEt0dmlmMTIgICAgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzogRjEyICAgICAgICAgICAg IFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSUYxMyAgICAgICAgICAgOgotICAg ICAgcHJpbnRmKCJcXEt0dmlmMTMgICAgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzogRjEzICAgICAg ICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSUYxNCAgICAgICAgICAg OgotICAgICAgcHJpbnRmKCJcXEt0dmlmMTQgICAgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzogRjE0 ICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSUYxNSAgICAg ICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlmMTUgICAgICAgIFRyYW5zbWl0IFRlbGV2aWRl bzogRjE1ICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSUYx NiAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlmMTYgICAgICAgIFRyYW5zbWl0IFRl bGV2aWRlbzogRjE2ICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLQotLyogVGVsZXZp ZGVvIEZ1bmN0aW9uIEtleXMgKHNoaWZ0ZWQpICovCi0gICAgY2FzZSAgS19UVklTRjAxICAgICAg ICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpc2YwMSAgICAgICBUcmFuc21pdCBUZWxldmlkZW86 IFNoaWZ0LUYxIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSVNGMDIgICAgICAg ICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlzZjAyICAgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzog U2hpZnQtRjIgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfVFZJU0YwMyAgICAgICAg ICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpc2YwMyAgICAgICBUcmFuc21pdCBUZWxldmlkZW86 IFNoaWZ0LUYzIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSVNGMDQgICAgICAg ICAgICA6Ci0gICAgICBwcmludGYoIlxcS3R2aXNmMDQgICAgICAgVHJhbnNtaXQgVGVsZXZpZGVv OiBTaGlmdC1GNCBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklTRjA1ICAgICAg ICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlzZjA1ICAgICAgIFRyYW5zbWl0IFRlbGV2aWRl bzogU2hpZnQtRjUgXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfVFZJU0YwNiAgICAg ICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpc2YwNiAgICAgICBUcmFuc21pdCBUZWxldmlk ZW86IFNoaWZ0LUY2IFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSVNGMDcgICAg ICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS3R2aXNmMDcgICAgICAgVHJhbnNtaXQgVGVsZXZp ZGVvOiBTaGlmdC1GNyBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklTRjA4ICAg ICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlzZjA4ICAgICAgIFRyYW5zbWl0IFRlbGV2 aWRlbzogU2hpZnQtRjggXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfVFZJU0YwOSAg ICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpc2YwOSAgICAgICBUcmFuc21pdCBUZWxl dmlkZW86IFNoaWZ0LUY5IFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSVNGMTAg ICAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS3R2aXNmMTAgICAgICAgVHJhbnNtaXQgVGVs ZXZpZGVvOiBTaGlmdC1GMTBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklTRjEx ICAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlzZjExICAgICAgIFRyYW5zbWl0IFRl bGV2aWRlbzogU2hpZnQtRjExXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfVFZJU0Yx MiAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpc2YxMiAgICAgICBUcmFuc21pdCBU ZWxldmlkZW86IFNoaWZ0LUYxMlxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSVNG MTMgICAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS3R2aXNmMTMgICAgICAgVHJhbnNtaXQg VGVsZXZpZGVvOiBTaGlmdC1GMTNcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19UVklT RjE0ICAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlzZjE0ICAgICAgIFRyYW5zbWl0 IFRlbGV2aWRlbzogU2hpZnQtRjE0XG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfVFZJ U0YxNSAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLdHZpc2YxNSAgICAgICBUcmFuc21p dCBUZWxldmlkZW86IFNoaWZ0LUYxNVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RW SVNGMTYgICAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS3R2aXNmMTYgICAgICAgVHJhbnNt aXQgVGVsZXZpZGVvOiBTaGlmdC1GMTZcbiIpOwotICAgICAgYnJlYWs7Ci0KLS8qIFRlbGV2aWRl byBFZGl0IGFuZCBTcGVjaWFsIEtleXMgKi8KLSAgICBjYXNlICBLX1RWSUJTICAgICAgICAgOgot ICAgICAgcHJpbnRmKCJcXEt0dmlicyAgICAgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzogQmFja3Nw YWNlICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSUNMUkxOICAgICAg ICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmljbHJsbiAgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzog Q2xlYXIgTGluZSAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSVNDTFJM TiAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlzY2xybG4gICAgIFRyYW5zbWl0IFRlbGV2aWRl bzogU2hpZnQtQ2xlYXIgTGluZVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSUNM UlBHICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmljbHJwZyAgICAgIFRyYW5zbWl0IFRlbGV2 aWRlbzogQ2xlYXIgUGFnZSAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RW SVNDTFJQRyAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlzY2xycGcgICAgIFRyYW5zbWl0IFRl bGV2aWRlbzogU2hpZnQtQ2xlYXIgUGFnZVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBL X1RWSURFTENIQVIgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlkZWxjaGFyICAgIFRyYW5zbWl0 IFRlbGV2aWRlbzogRGVsZXRlIENoYXIgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNl ICBLX1RWSURFTExOICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlkZWxsbiAgICAgIFRyYW5z bWl0IFRlbGV2aWRlbzogRGVsZXRlIExpbmUgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBj YXNlICBLX1RWSUVOVEVSICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmllbnRlciAgICAg IFRyYW5zbWl0IFRlbGV2aWRlbzogRW50ZXIgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsK LSAgICBjYXNlICBLX1RWSUVTQyAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmllc2Mg ICAgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzogRXNjICAgICAgICAgICAgIFxuIik7Ci0gICAgICBi cmVhazsKLSAgICBjYXNlICBLX1RWSUhPTUUgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0 dmlob21lICAgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzogSG9tZSAgICAgICAgICAgIFxuIik7Ci0g ICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSVNIT01FICAgICAgICAgOgotICAgICAgcHJpbnRm KCJcXEt0dmlzaG9tZSAgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzogU2hpZnQtSG9tZSAgICAgIFxu Iik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSUlOU0VSVCAgICAgOgotICAgICAgcHJp bnRmKCJcXEt0dmlpbnNlcnQgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzogSW5zZXJ0ICAgICAgICAg IFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSUlOU0NIQVIgICAgOgotICAgICAg cHJpbnRmKCJcXEt0dmlpbnNjaGFyICAgIFRyYW5zbWl0IFRlbGV2aWRlbzogSW5zZXJ0IENoYXIg ICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSUlOU0xOICAgICAgICAgOgot ICAgICAgcHJpbnRmKCJcXEt0dmlpbnNsbiAgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzogSW5zZXJ0 IExpbmUgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSVBHTkVYVCAgICAg OgotICAgICAgcHJpbnRmKCJcXEt0dmlwZ25leHQgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzogUGFn ZSBOZXh0ICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSVBHUFJFViAg ICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlwZ3ByZXYgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzog UGFnZSBQcmV2aW91cyAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSVJFUExB Q0UgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlyZXBsYWNlICAgIFRyYW5zbWl0IFRlbGV2aWRl bzogUmVwbGFjZSAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSVJF VFVSTiAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlyZXR1cm4gICAgIFRyYW5zbWl0IFRlbGV2 aWRlbzogUmV0dXJuICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RW SVRBQiAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dml0YWIgICAgICAgIFRyYW5zbWl0 IFRlbGV2aWRlbzogVGFiICAgICAgICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNl ICBLX1RWSVNUQUIgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlzdGFiICAgICAgIFRy YW5zbWl0IFRlbGV2aWRlbzogU2hpZnQtVGFiICAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAg ICBjYXNlICBLX1RWSVBSVFNDTiAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlwcnRzY24gICAg IFRyYW5zbWl0IFRlbGV2aWRlbzogUHJpbnQgU2NyZWVuICAgIFxuIik7Ci0gICAgICBicmVhazsK LSAgICBjYXNlICBLX1RWSVNFU0MgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlzZXNjICAg ICAgIFRyYW5zbWl0IFRlbGV2aWRlbzogU2hpZnQtRXNjICAgICAgIFxuIik7Ci0gICAgICBicmVh azsKLSAgICBjYXNlICBLX1RWSVNCUyAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlzYnMg ICAgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzogU2hpZnQtQmFja3NwYWNlIFxuIik7Ci0gICAgICBi cmVhazsKLSAgICBjYXNlICBLX1RWSVNFTlRFUiAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlz ZW50ZXIgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzogU2hpZnQtRW50ZXIgICAgIFxuIik7Ci0gICAg ICBicmVhazsKLSAgICBjYXNlICBLX1RWSVNSRVRVUk4gICAgOgotICAgICAgcHJpbnRmKCJcXEt0 dmlzcmV0dXJuICAgIFRyYW5zbWl0IFRlbGV2aWRlbzogU2hpZnQtUmV0dXJuICAgIFxuIik7Ci0g ICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSVVQQVJSICAgICAgICAgOgotICAgICAgcHJpbnRm KCJcXEt0dml1cGFyciAgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzogVXAgQXJyb3cgICAgICAgIFxu Iik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSUROQVJSICAgICAgICAgOgotICAgICAg cHJpbnRmKCJcXEt0dmlkbmFyciAgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzogRG93biBBcnJvdyAg ICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSUxGQVJSICAgICAgICAgOgot ICAgICAgcHJpbnRmKCJcXEt0dmlsZmFyciAgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzogTGVmdCBB cnJvdyAgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSVJUQVJSICAgICAg ICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlydGFyciAgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzog UmlnaHQgQXJyb3cgICAgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSVNVUEFS UiAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlzdXBhcnIgICAgIFRyYW5zbWl0IFRlbGV2aWRl bzogU2hpZnQtVXAgQXJyb3cgIFxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RWSVNE TkFSUiAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlzZG5hcnIgICAgIFRyYW5zbWl0IFRlbGV2 aWRlbzogU2hpZnQtRG93biBBcnJvd1xuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX1RW SVNMRkFSUiAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlzbGZhcnIgICAgIFRyYW5zbWl0IFRl bGV2aWRlbzogU2hpZnQtTGVmdCBBcnJvd1xuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBL X1RWSVNSVEFSUiAgICAgOgotICAgICAgcHJpbnRmKCJcXEt0dmlzcnRhcnIgICAgIFRyYW5zbWl0 IFRlbGV2aWRlbzogU2hpZnQtUmlnaHQgQXJyb3dcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2Fz ZSBLX1RWSVNFTkQ6Ci0gICAgICBwcmludGYoIlxcS3R2aXNlbmQgICAgICAgVHJhbnNtaXQgVGVs ZXZpZGVvOiBTZW5kXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgS19UVklTU0VORDoKLSAg ICAgIHByaW50ZigiXFxLdHZpc3NlbmQgICAgICBUcmFuc21pdCBUZWxldmlkZW86IFNoaWZ0LVNl bmRcbiIpOwotICAgICAgYnJlYWs7Ci0KLS8qIEhQIEZ1bmN0aW9uIGFuZCBFZGl0IGtleXMgKi8K LSAgICBjYXNlICBLX0hQRjAxICAgICAgICAgICAgOgotICAgICAgcHJpbnRmKCJcXEtocGYwMSAg ICAgICAgIFRyYW5zbWl0IEhld2xldHQtUGFja2FyZDogRjEgICAgICAgXG4iKTsKLSAgICAgIGJy ZWFrOwotICAgIGNhc2UgIEtfSFBGMDIgICAgICAgICAgICA6Ci0gICAgICBwcmludGYoIlxcS2hw ZjAyICAgICAgICAgVHJhbnNtaXQgSGV3bGV0dC1QYWNrYXJkOiBGMiAgICAgICAgICAgICAgXG4i KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgIEtfSFBGMDMgICAgICAgICAgICA6Ci0gICAgICBw cmludGYoIlxcS2hwZjAzICAgICAgICAgVHJhbnNtaXQgSGV3bGV0dC1QYWNrYXJkOiBGMyAgICAg ICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19IUEYwNCAgICAgICAgICAg IDoKLSAgICAgIHByaW50ZigiXFxLaHBmMDQgICAgICAgICBUcmFuc21pdCBIZXdsZXR0LVBhY2th cmQ6IEY0ICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19IUEYw NSAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLaHBmMDUgICAgICAgICBUcmFuc21pdCBI ZXdsZXR0LVBhY2thcmQ6IEY1ICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAg Y2FzZSAgS19IUEYwNiAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLaHBmMDYgICAgICAg ICBUcmFuc21pdCBIZXdsZXR0LVBhY2thcmQ6IEY2ICAgICAgICAgICAgICBcbiIpOwotICAgICAg YnJlYWs7Ci0gICAgY2FzZSAgS19IUEYwNyAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxL aHBmMDcgICAgICAgICBUcmFuc21pdCBIZXdsZXR0LVBhY2thcmQ6IEY3ICAgICAgICAgICAgICBc biIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19IUEYwOCAgICAgICAgICAgIDoKLSAgICAg IHByaW50ZigiXFxLaHBmMDggICAgICAgICBUcmFuc21pdCBIZXdsZXR0LVBhY2thcmQ6IEY4ICAg ICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19IUEYwOSAgICAgICAg ICAgIDoKLSAgICAgIHByaW50ZigiXFxLaHBmMDkgICAgICAgICBUcmFuc21pdCBIZXdsZXR0LVBh Y2thcmQ6IEY5ICAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19I UEYxMCAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLaHBmMTAgICAgICAgICBUcmFuc21p dCBIZXdsZXR0LVBhY2thcmQ6IEYxMCAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0g ICAgY2FzZSAgS19IUEYxMSAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLaHBmMTEgICAg ICAgICBUcmFuc21pdCBIZXdsZXR0LVBhY2thcmQ6IEYxMSAgICAgICAgICAgICBcbiIpOwotICAg ICAgYnJlYWs7Ci0gICAgY2FzZSAgS19IUEYxMiAgICAgICAgICAgIDoKLSAgICAgIHByaW50Zigi XFxLaHBmMTIgICAgICAgICBUcmFuc21pdCBIZXdsZXR0LVBhY2thcmQ6IEYxMiAgICAgICAgICAg ICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19IUEYxMyAgICAgICAgICAgIDoKLSAg ICAgIHByaW50ZigiXFxLaHBmMTMgICAgICAgICBUcmFuc21pdCBIZXdsZXR0LVBhY2thcmQ6IEYx MyAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19IUEYxNCAgICAg ICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLaHBmMTQgICAgICAgICBUcmFuc21pdCBIZXdsZXR0 LVBhY2thcmQ6IEYxNCAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAg S19IUEYxNSAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLaHBmMTUgICAgICAgICBUcmFu c21pdCBIZXdsZXR0LVBhY2thcmQ6IEYxNSAgICAgICAgICAgICBcbiIpOwotICAgICAgYnJlYWs7 Ci0gICAgY2FzZSAgS19IUEYxNiAgICAgICAgICAgIDoKLSAgICAgIHByaW50ZigiXFxLaHBmMTYg ICAgICAgICBUcmFuc21pdCBIZXdsZXR0LVBhY2thcmQ6IEYxNiAgICAgICAgICAgICBcbiIpOwot ICAgICAgYnJlYWs7Ci0gICAgY2FzZSAgS19IUFJFVFVSTiAgICAgOgotICAgICAgcHJpbnRmKCJc XEtocHJldHVybiAgICAgIFRyYW5zbWl0IEhld2xldHQtUGFja2FyZDogUmV0dXJuXG4iKTsKLSAg ICAgIGJyZWFrOwotICAgIGNhc2UgIEtfSFBFTlRFUiAgICAgICAgICA6Ci0gICAgICBwcmludGYo IlxcS2hwZW50ZXIgICAgICAgVHJhbnNtaXQgSGV3bGV0dC1QYWNrYXJkOiBFbnRlciAoa2V5cGFk KVxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICBLX0hQQkFDS1RBQiAgICAgICAgOgotICAg ICAgcHJpbnRmKCJcXEtocGJhY2t0YWIgICAgIFRyYW5zbWl0IEhld2xldHQtUGFja2FyZDogQmFj ayBUYWJcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgICAgIC8qIFNpZW1lbnMgTml4ZG9yZiBJbnRl cm5hdGlvbmFsIDk3ODAxLTV4eCBrdmVyYnMgKi8KLSAgICBjYXNlIEtfU05JX0RPVUJMRV8wICAg ICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV8wMCAgICAgICAgICBUcmFuc21pdCBTTkktOTc4 MDEtNXh4OiBEb3VibGUtWmVyb1xuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklf Q19ET1VCTEVfMCAgICA6Ci0gICAgICAgIHByaW50ZigKLSJcXEtzbmlfY18wMCAgICAgICAgVHJh bnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1Eb3VibGUtWmVyb1xuIik7Ci0gICAgICAgIGJyZWFr OwotICAgIGNhc2UgS19TTklfQ19DRSAgICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25p X2NfY2UgICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtQ0VcbiIpOwotICAgICAg ICBicmVhazsKLSAgICBjYXNlIEtfU05JX0NfQ09NUE9TRSAgICAgOgotICAgICAgICBwcmludGYo IlxcS3NuaV9jX2NvbXBvc2UgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUNvbXBvc2Vc biIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0NfREVMRVRFX0NIQVIgOgotICAg ICAgICBwcmludGYoCi0iXFxLc25pX2NfZGVsX2NoYXIgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6 IEN0cmwtRGVsZXRlIENoYXJcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0Nf REVMRVRFX0xJTkUgOgotICAgICAgICBwcmludGYoCi0iXFxLc25pX2NfZGVsX2xpbmUgIFRyYW5z bWl0IFNOSS05NzgwMS01eHg6IEN0cmwtRGVsZXRlIExpbmVcbiIpOwotICAgICAgICBicmVhazsK LSAgICBjYXNlIEtfU05JX0NfREVMRVRFX1dPUkQgOgotICAgICAgICBwcmludGYoCi0iXFxLc25p X2NfZGVsX3dvcmQgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtRGVsZXRlIFdvcmRcbiIp OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0NfQ1VSU09SX0RPV04gOgotICAgICAg ICBwcmludGYoCi0iXFxLc25pX2NfZG5hcnIgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0 cmwtQ3Vyc29yIERvd25cbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0NfRU5E TUFSS0UgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9jX2VuZG1hcmtlICBUcmFuc21pdCBT TkktOTc4MDEtNXh4OiBDdHJsLUVuZCBNYXJrZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh c2UgS19TTklfQ19GMDEgICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2NfZjAxICAg ICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtRjFcbiIpOwotICAgICAgICBicmVhazsK LSAgICBjYXNlIEtfU05JX0NfRjAyICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9j X2YwMiAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUYyXG4iKTsKLSAgICAgICAg YnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9DX0YwMyAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJc XEtzbmlfY19mMDMgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1GM1xuIik7Ci0g ICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfQ19GMDQgICAgICAgICA6Ci0gICAgICAgIHBy aW50ZigiXFxLc25pX2NfZjA0ICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtRjRc biIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0NfRjA1ICAgICAgICAgOgotICAg ICAgICBwcmludGYoIlxcS3NuaV9jX2YwNSAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBD dHJsLUY1XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9DX0YwNiAgICAgICAg IDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfY19mMDYgICAgICAgVHJhbnNtaXQgU05JLTk3ODAx LTV4eDogQ3RybC1GNlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfQ19GMDcg ICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2NfZjA3ICAgICAgIFRyYW5zbWl0IFNO SS05NzgwMS01eHg6IEN0cmwtRjdcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05J X0NfRjA4ICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9jX2YwOCAgICAgICBUcmFu c21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUY4XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz ZSBLX1NOSV9DX0YwOSAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfY19mMDkgICAg ICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1GOVxuIik7Ci0gICAgICAgIGJyZWFrOwot ICAgIGNhc2UgS19TTklfQ19GMTAgICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2Nf ZjEwICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtRjEwXG4iKTsKLSAgICAgICAg YnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9DX0YxMSAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJc XEtzbmlfY19mMTEgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1GMTFcbiIpOwot ICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0NfRjEyICAgICAgICAgOgotICAgICAgICBw cmludGYoIlxcS3NuaV9jX2YxMiAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUYx MlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfQ19GMTMgICAgICAgICA6Ci0g ICAgICAgIHByaW50ZigiXFxLc25pX2NfZjEzICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6 IEN0cmwtRjEzXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9DX0YxNCAgICAg ICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfY19mMTQgICAgICAgVHJhbnNtaXQgU05JLTk3 ODAxLTV4eDogQ3RybC1GMTRcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0Nf RjE1ICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9jX2YxNSAgICAgICBUcmFuc21p dCBTTkktOTc4MDEtNXh4OiBDdHJsLUYxNVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug S19TTklfQ19GMTYgICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2NfZjE2ICAgICAg IFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtRjE2XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0g ICAgY2FzZSBLX1NOSV9DX0YxNyAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfY19m MTcgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1GMTdcbiIpOwotICAgICAgICBi cmVhazsKLSAgICBjYXNlIEtfU05JX0NfRjE4ICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxc S3NuaV9jX2YxOCAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUYxOFxuIik7Ci0g ICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfQ19VU0VSMSAgICAgICAgOgotICAgICAgICBw cmludGYoCi0iXFxLc25pX2NfdXNlcjEgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwt S2V5IGJlbG93IEYxOFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfQ19GMTkg ICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2NfZjE5ICAgICAgIFRyYW5zbWl0IFNO SS05NzgwMS01eHg6IEN0cmwtRjE5XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NO SV9DX1VTRVIyICAgICAgIDoKLSAgICAgICAgcHJpbnRmKAotIlxcS3NuaV9jX3VzZXIyICAgICBU cmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUtleSBiZWxvdyBGMTlcbiIpOwotICAgICAgICBi cmVhazsKLSAgICBjYXNlIEtfU05JX0NfRjIwICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxc S3NuaV9jX2YyMCAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUYyMFxuIik7Ci0g ICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfQ19VU0VSMyAgICAgICA6Ci0gICAgICAgIHBy aW50ZigKLSJcXEtzbmlfY191c2VyMyAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1L ZXkgYmVsb3cgRjIwXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9DX0YyMSAg ICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfY19mMjEgICAgICAgVHJhbnNtaXQgU05J LTk3ODAxLTV4eDogQ3RybC1GMjFcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05J X0NfVVNFUjQgICAgICAgOgotICAgICAgICBwcmludGYoCi0iXFxLc25pX2NfdXNlcjQgICAgIFRy YW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtS2V5IGJlbG93IEYyMVxuIik7Ci0gICAgICAgIGJy ZWFrOwotICAgIGNhc2UgS19TTklfQ19GMjIgICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxL c25pX2NfZjIyICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtRjIyXG4iKTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9DX1VTRVI1ICAgICAgIDoKLSAgICAgICAgcHJp bnRmKAotIlxcS3NuaV9jX3VzZXI1ICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUtl eSBiZWxvdyBGMjJcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0NfSEVMUCAg ICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9jX2hlbHAgICAgICBUcmFuc21pdCBTTkkt OTc4MDEtNXh4OiBDdHJsLUhlbHBcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05J X0NfSE9NRSAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9jX2hvbWUgICAgICBUcmFu c21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUhvbWVcbiIpOwotICAgICAgICBicmVhazsKLSAgICBj YXNlIEtfU05JX0NfSU5TRVJUX0NIQVIgOgotICAgICAgICBwcmludGYoCi0iXFxLc25pX2NfaW5z X2NoYXIgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtSW5zZXJ0IENoYXJcbiIpOwotICAg ICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0NfSU5TRVJUX0xJTkUgOgotICAgICAgICBwcmlu dGYoCi0iXFxLc25pX2NfaW5zX2xpbmUgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtSW5z ZXJ0IExpbmVcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0NfSU5TRVJUX1dP UkQgOgotICAgICAgICBwcmludGYoCi0iXFxLc25pX2NfaW5zX3dvcmQgIFRyYW5zbWl0IFNOSS05 NzgwMS01eHg6IEN0cmwtSW5zZXJ0IFdvcmRcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl IEtfU05JX0NfTEVGVF9UQUIgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9jX2xlZnRfdGFi ICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUxlZnQgVGFiXG4iKTsKLSAgICAgICAgYnJl YWs7Ci0gICAgY2FzZSBLX1NOSV9DX0NVUlNPUl9MRUZUIDoKLSAgICAgICAgcHJpbnRmKAotIlxc S3NuaV9jX2xmYXJyICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUN1cnNvciBMZWZ0 XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9DX01PREUgICAgICAgIDoKLSAg ICAgICAgcHJpbnRmKCJcXEtzbmlfY19tb2RlICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDog Q3RybC1Nb2RlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9DX1BBR0UgICAg ICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfY19wYWdlICAgICAgVHJhbnNtaXQgU05JLTk3 ODAxLTV4eDogQ3RybC1QYWdlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9D X1BSSU5UICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfY19wcmludCAgICAgVHJhbnNt aXQgU05JLTk3ODAxLTV4eDogQ3RybC1QcmludFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh c2UgS19TTklfQ19DVVJTT1JfUklHSFQ6Ci0gICAgICAgIHByaW50ZigKLSJcXEtzbmlfY19ydGFy ciAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1DdXJzb3IgUmlnaHRcbiIpOwotICAg ICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0NfU0NST0xMX0RPV04gOgotICAgICAgICBwcmlu dGYoCi0iXFxLc25pX2Nfc2Nyb2xsX2RuIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtU2Ny b2xsIERvd25cbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0NfU0NST0xMX1VQ ICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9jX3Njcm9sbF91cCBUcmFuc21pdCBTTkktOTc4 MDEtNXh4OiBDdHJsLVNjcm9sbCBVcFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19T TklfQ19TVEFSVCAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2Nfc3RhcnQgICAgIFRy YW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtU3RhcnRcbiIpOwotICAgICAgICBicmVhazsKLSAg ICBjYXNlIEtfU05JX0NfQ1VSU09SX1VQICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9jX3Vw YXJyICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUN1cnNvciBVcFxuIik7Ci0gICAg ICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfQ19UQUIgICAgICAgICA6Ci0gICAgICAgIHByaW50 ZigiXFxLc25pX2NfdGFiICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtVGFiXG4i KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9DRSAgICAgICAgICAgIDoKLSAgICAg ICAgcHJpbnRmKCJcXEtzbmlfY2UgICAgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ0Vc biIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0NIX0NPREU6Ci0gICAgICAgIHBy aW50ZigiXFxLc25pX2NoX2NvZGUgICAgIFRvZ2dsZSBTTkktOTc4MDEtNXh4OiBDSC5DT0RFIGZ1 bmN0aW9uLlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfQ09NUE9TRSAgICAg ICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2NvbXBvc2UgICAgIFRyYW5zbWl0IFNOSS05Nzgw MS01eHg6IENvbXBvc2VcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0RFTEVU RV9DSEFSICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9kZWxfY2hhciAgICBUcmFuc21pdCBT TkktOTc4MDEtNXh4OiBEZWxldGUgQ2hhclxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug S19TTklfREVMRVRFX0xJTkUgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2RlbF9saW5lICAg IFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IERlbGV0ZSBMaW5lXG4iKTsKLSAgICAgICAgYnJlYWs7 Ci0gICAgY2FzZSBLX1NOSV9ERUxFVEVfV09SRCAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlf ZGVsX3dvcmQgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogRGVsZXRlIFdvcmRcbiIpOwotICAg ICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0NVUlNPUl9ET1dOICAgOgotICAgICAgICBwcmlu dGYoIlxcS3NuaV9kbmFyciAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdXJzb3IgRG93 blxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfRU5ETUFSS0UgICAgICA6Ci0g ICAgICAgIHByaW50ZigiXFxLc25pX2VuZG1hcmtlICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6 IEVuZCBNYXJrZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfRjAxICAgICAg ICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2YwMSAgICAgICAgIFRyYW5zbWl0IFNOSS05 NzgwMS01eHg6IEYxXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9GMDIgICAg ICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfZjAyICAgICAgICAgVHJhbnNtaXQgU05J LTk3ODAxLTV4eDogRjJcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0YwMyAg ICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9mMDMgICAgICAgICBUcmFuc21pdCBT TkktOTc4MDEtNXh4OiBGM1xuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfRjA0 ICAgICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2YwNCAgICAgICAgIFRyYW5zbWl0 IFNOSS05NzgwMS01eHg6IEY0XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9G MDUgICAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfZjA1ICAgICAgICAgVHJhbnNt aXQgU05JLTk3ODAxLTV4eDogRjVcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05J X0YwNiAgICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9mMDYgICAgICAgICBUcmFu c21pdCBTTkktOTc4MDEtNXh4OiBGNlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19T TklfRjA3ICAgICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2YwNyAgICAgICAgIFRy YW5zbWl0IFNOSS05NzgwMS01eHg6IEY3XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBL X1NOSV9GMDggICAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfZjA4ICAgICAgICAg VHJhbnNtaXQgU05JLTk3ODAxLTV4eDogRjhcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl IEtfU05JX0YwOSAgICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9mMDkgICAgICAg ICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBGOVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh c2UgS19TTklfRjEwICAgICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2YxMCAgICAg ICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEYxMFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAg IGNhc2UgS19TTklfRjExICAgICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2YxMSAg ICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEYxMVxuIik7Ci0gICAgICAgIGJyZWFrOwot ICAgIGNhc2UgS19TTklfRjEyICAgICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2Yx MiAgICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEYxMlxuIik7Ci0gICAgICAgIGJyZWFr OwotICAgIGNhc2UgS19TTklfRjEzICAgICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25p X2YxMyAgICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEYxM1xuIik7Ci0gICAgICAgIGJy ZWFrOwotICAgIGNhc2UgS19TTklfRjE0ICAgICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxL c25pX2YxNCAgICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEYxNFxuIik7Ci0gICAgICAg IGJyZWFrOwotICAgIGNhc2UgS19TTklfRjE1ICAgICAgICAgICA6Ci0gICAgICAgIHByaW50Zigi XFxLc25pX2YxNSAgICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEYxNVxuIik7Ci0gICAg ICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfRjE2ICAgICAgICAgICA6Ci0gICAgICAgIHByaW50 ZigiXFxLc25pX2YxNiAgICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEYxNlxuIik7Ci0g ICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfRjE3ICAgICAgICAgICA6Ci0gICAgICAgIHBy aW50ZigiXFxLc25pX2YxNyAgICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEYxN1xuIik7 Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfRjE4ICAgICAgICAgICA6Ci0gICAgICAg IHByaW50ZigiXFxLc25pX2YxOCAgICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEYxOFxu Iik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfVVNFUjEgICAgICAgICAgOgotICAg ICAgICBwcmludGYoIlxcS3NuaV91c2VyMSAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBL ZXkgYmVsb3cgRjE4XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9GMTkgICAg ICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfZjE5ICAgICAgICAgVHJhbnNtaXQgU05J LTk3ODAxLTV4eDogRjE5XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9VU0VS MiAgICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX3VzZXIyICAgICAgIFRyYW5zbWl0 IFNOSS05NzgwMS01eHg6IEtleSBiZWxvdyBGMTlcbiIpOwotICAgICAgICBicmVhazsKLSAgICBj YXNlIEtfU05JX0YyMCAgICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9mMjAgICAg ICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBGMjBcbiIpOwotICAgICAgICBicmVhazsKLSAg ICBjYXNlIEtfU05JX1VTRVIzICAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfdXNl cjMgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogS2V5IGJlbG93IEYyMFxuIik7Ci0gICAg ICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfRjIxICAgICAgICAgICA6Ci0gICAgICAgIHByaW50 ZigiXFxLc25pX2YyMSAgICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEYyMVxuIik7Ci0g ICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfVVNFUjQgICAgICAgICAgOgotICAgICAgICBw cmludGYoIlxcS3NuaV91c2VyNCAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBLZXkgYmVs b3cgRjIxXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9GMjIgICAgICAgICAg IDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfZjIyICAgICAgICAgVHJhbnNtaXQgU05JLTk3ODAx LTV4eDogRjIyXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9VU0VSNSAgICAg ICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX3VzZXI1ICAgICAgIFRyYW5zbWl0IFNOSS05 NzgwMS01eHg6IEtleSBiZWxvdyBGMjJcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtf U05JX0hFTFAgICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9oZWxwICAgICAgICBU cmFuc21pdCBTTkktOTc4MDEtNXh4OiBIZWxwXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz ZSBLX1NOSV9IT01FICAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfaG9tZSAgICAg ICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogSG9tZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAg IGNhc2UgS19TTklfSU5TRVJUX0NIQVIgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2luc19j aGFyICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEluc2VydCBDaGFyXG4iKTsKLSAgICAgICAg YnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9JTlNFUlRfTElORSAgIDoKLSAgICAgICAgcHJpbnRmKCJc XEtzbmlfaW5zX2xpbmUgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogSW5zZXJ0IExpbmVcbiIp OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX0lOU0VSVF9XT1JEICAgOgotICAgICAg ICBwcmludGYoIlxcS3NuaV9pbnNfd29yZCAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBJbnNl cnQgV29yZFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfTEVGVF9UQUIgICAg ICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX2xlZnRfdGFiICAgIFRyYW5zbWl0IFNOSS05Nzgw MS01eHg6IExlZnQgVGFiXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9DVVJT T1JfTEVGVCAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfbGZhcnIgICAgICAgVHJhbnNtaXQg U05JLTk3ODAxLTV4eDogQ3Vyc29yIExlZnRcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl IEtfU05JX01PREUgICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9tb2RlICAgICAg ICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBNb2RlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg Y2FzZSBLX1NOSV9QQUdFICAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfcGFnZSAg ICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogUGFnZVxuIik7Ci0gICAgICAgIGJyZWFrOwot ICAgIGNhc2UgS19TTklfUFJJTlQgICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX3By aW50ICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFByaW50XG4iKTsKLSAgICAgICAgYnJl YWs7Ci0gICAgY2FzZSBLX1NOSV9DVVJTT1JfUklHSFQgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtz bmlfcnRhcnIgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3Vyc29yIFJpZ2h0XG4iKTsK LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9TX0RPVUJMRV8wICAgIDoKLSAgICAgICAg cHJpbnRmKAotIlxcS3NuaV9zXzAwICAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlm dC1Eb3VibGUtWmVyb1xuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfU19DRSAg ICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX3NfY2UgICAgICAgIFRyYW5zbWl0IFNO SS05NzgwMS01eHg6IFNoaWZ0LUNFXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NO SV9TX0NPTVBPU0UgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19jb21wb3NlICAgVHJh bnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtQ29tcG9zZVxuIik7Ci0gICAgICAgIGJyZWFrOwot ICAgIGNhc2UgS19TTklfU19ERUxFVEVfQ0hBUiA6Ci0gICAgICAgIHByaW50ZigKLSJcXEtzbmlf c19kZWxfY2hhciAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtRGVsZXRlIENoYXJcbiIp OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX1NfREVMRVRFX0xJTkUgOgotICAgICAg ICBwcmludGYoCi0iXFxLc25pX3NfZGVsX2xpbmUgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNo aWZ0LURlbGV0ZSBMaW5lXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9TX0RF TEVURV9XT1JEIDoKLSAgICAgICAgcHJpbnRmKAotIlxcS3NuaV9zX2RlbF93b3JkICBUcmFuc21p dCBTTkktOTc4MDEtNXh4OiBTaGlmdC1EZWxldGUgV29yZFxuIik7Ci0gICAgICAgIGJyZWFrOwot ICAgIGNhc2UgS19TTklfU19DVVJTT1JfRE9XTiA6Ci0gICAgICAgIHByaW50ZigKLSJcXEtzbmlf c19kbmFyciAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtQ3Vyc29yIERvd25cbiIp OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX1NfRU5ETUFSS0UgICAgOgotICAgICAg ICBwcmludGYoIlxcS3NuaV9zX2VuZG1hcmtlICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlm dC1FbmQgTWFya2VcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX1NfRjAxICAg ICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9zX2YwMSAgICAgICBUcmFuc21pdCBTTkkt OTc4MDEtNXh4OiBTaGlmdC1GMVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklf U19GMDIgICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX3NfZjAyICAgICAgIFRyYW5z bWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUYyXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz ZSBLX1NOSV9TX0YwMyAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19mMDMgICAg ICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtRjNcbiIpOwotICAgICAgICBicmVhazsK LSAgICBjYXNlIEtfU05JX1NfRjA0ICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9z X2YwNCAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlmdC1GNFxuIik7Ci0gICAgICAg IGJyZWFrOwotICAgIGNhc2UgS19TTklfU19GMDUgICAgICAgICA6Ci0gICAgICAgIHByaW50Zigi XFxLc25pX3NfZjA1ICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUY1XG4iKTsK LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9TX0YwNiAgICAgICAgIDoKLSAgICAgICAg cHJpbnRmKCJcXEtzbmlfc19mMDYgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQt RjZcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX1NfRjA3ICAgICAgICAgOgot ICAgICAgICBwcmludGYoIlxcS3NuaV9zX2YwNyAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4 OiBTaGlmdC1GN1xuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfU19GMDggICAg ICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX3NfZjA4ICAgICAgIFRyYW5zbWl0IFNOSS05 NzgwMS01eHg6IFNoaWZ0LUY4XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9T X0YwOSAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19mMDkgICAgICAgVHJhbnNt aXQgU05JLTk3ODAxLTV4eDogU2hpZnQtRjlcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl IEtfU05JX1NfRjEwICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9zX2YxMCAgICAg ICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlmdC1GMTBcbiIpOwotICAgICAgICBicmVhazsK LSAgICBjYXNlIEtfU05JX1NfRjExICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9z X2YxMSAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlmdC1GMTFcbiIpOwotICAgICAg ICBicmVhazsKLSAgICBjYXNlIEtfU05JX1NfRjEyICAgICAgICAgOgotICAgICAgICBwcmludGYo IlxcS3NuaV9zX2YxMiAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlmdC1GMTJcbiIp OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX1NfRjEzICAgICAgICAgOgotICAgICAg ICBwcmludGYoIlxcS3NuaV9zX2YxMyAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlm dC1GMTNcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX1NfRjE0ICAgICAgICAg OgotICAgICAgICBwcmludGYoIlxcS3NuaV9zX2YxNCAgICAgICBUcmFuc21pdCBTTkktOTc4MDEt NXh4OiBTaGlmdC1GMTRcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX1NfRjE1 ICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9zX2YxNSAgICAgICBUcmFuc21pdCBT TkktOTc4MDEtNXh4OiBTaGlmdC1GMTVcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtf U05JX1NfRjE2ICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9zX2YxNiAgICAgICBU cmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlmdC1GMTZcbiIpOwotICAgICAgICBicmVhazsKLSAg ICBjYXNlIEtfU05JX1NfRjE3ICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9zX2Yx NyAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlmdC1GMTdcbiIpOwotICAgICAgICBi cmVhazsKLSAgICBjYXNlIEtfU05JX1NfRjE4ICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxc S3NuaV9zX2YxOCAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlmdC1GMThcbiIpOwot ICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX1NfVVNFUjEgICAgICAgIDoKLSAgICAgICAg cHJpbnRmKAotIlxcS3NuaV9zX3VzZXIxICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlm dC1LZXkgYmVsb3cgRjE4XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9TX0Yx OSAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19mMTkgICAgICAgVHJhbnNtaXQg U05JLTk3ODAxLTV4eDogU2hpZnQtRjE5XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBL X1NOSV9TX1VTRVIyICAgICAgIDoKLSAgICAgICAgcHJpbnRmKAotIlxcS3NuaV9zX3VzZXIyICAg ICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlmdC1LZXkgYmVsb3cgRjE5XG4iKTsKLSAgICAg ICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9TX0YyMCAgICAgICAgIDoKLSAgICAgICAgcHJpbnRm KCJcXEtzbmlfc19mMjAgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtRjIwXG4i KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9TX1VTRVIzICAgICAgIDoKLSAgICAg ICAgcHJpbnRmKAotIlxcS3NuaV9zX3VzZXIzICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBT aGlmdC1LZXkgYmVsb3cgRjIwXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9T X0YyMSAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19mMjEgICAgICAgVHJhbnNt aXQgU05JLTk3ODAxLTV4eDogU2hpZnQtRjIxXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz ZSBLX1NOSV9TX1VTRVI0ICAgICAgIDoKLSAgICAgICAgcHJpbnRmKAotIlxcS3NuaV9zX3VzZXI0 ICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlmdC1LZXkgYmVsb3cgRjIxXG4iKTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9TX0YyMiAgICAgICAgIDoKLSAgICAgICAgcHJp bnRmKCJcXEtzbmlfc19mMjIgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtRjIy XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9TX1VTRVI1ICAgICAgIDoKLSAg ICAgICAgcHJpbnRmKAotIlxcS3NuaV9zX3VzZXI1ICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4 OiBTaGlmdC1LZXkgYmVsb3cgRjIyXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NO SV9TX0hFTFAgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19oZWxwICAgICAgVHJh bnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtSGVscFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAg IGNhc2UgS19TTklfU19IT01FICAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX3NfaG9t ZSAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUhvbWVcbiIpOwotICAgICAgICBi cmVhazsKLSAgICBjYXNlIEtfU05JX1NfSU5TRVJUX0NIQVIgOgotICAgICAgICBwcmludGYoCi0i XFxLc25pX3NfaW5zX2NoYXIgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUluc2VydCBD aGFyXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9TX0lOU0VSVF9MSU5FIDoK LSAgICAgICAgcHJpbnRmKAotIlxcS3NuaV9zX2luc19saW5lICBUcmFuc21pdCBTTkktOTc4MDEt NXh4OiBTaGlmdC1JbnNlcnQgTGluZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19T TklfU19JTlNFUlRfV09SRCA6Ci0gICAgICAgIHByaW50ZigKLSJcXEtzbmlfc19pbnNfd29yZCAg VHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtSW5zZXJ0IFdvcmRcbiIpOwotICAgICAgICBi cmVhazsKLSAgICBjYXNlIEtfU05JX1NfTEVGVF9UQUIgICAgOgotICAgICAgICBwcmludGYoIlxc S3NuaV9zX2xlZnRfdGFiICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlmdC1MZWZ0IFRhYlxu Iik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19TTklfU19DVVJTT1JfTEVGVCA6Ci0gICAg ICAgIHByaW50ZigKLSJcXEtzbmlfc19sZmFyciAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDog U2hpZnQtQ3Vyc29yIExlZnRcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX1Nf TU9ERSAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9zX21vZGUgICAgICBUcmFuc21p dCBTTkktOTc4MDEtNXh4OiBTaGlmdC1Nb2RlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz ZSBLX1NOSV9TX1BBR0UgICAgICAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19wYWdlICAg ICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtUGFnZVxuIik7Ci0gICAgICAgIGJyZWFr OwotICAgIGNhc2UgS19TTklfU19QUklOVCAgICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25p X3NfcHJpbnQgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LVByaW50XG4iKTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9TX0NVUlNPUl9SSUdIVDoKLSAgICAgICAgcHJp bnRmKAotIlxcS3NuaV9zX3J0YXJyICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlmdC1D dXJzb3IgUmlnaHRcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX1NfU0NST0xM X0RPV04gOgotICAgICAgICBwcmludGYoCi0iXFxLc25pX3Nfc2Nyb2xsX2RuIFRyYW5zbWl0IFNO SS05NzgwMS01eHg6IFNoaWZ0LVNjcm9sbCBEb3duXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg Y2FzZSBLX1NOSV9TX1NDUk9MTF9VUCAgIDoKLSAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19zY3Jv bGxfdXAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtU2Nyb2xsIFVwXG4iKTsKLSAgICAg ICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9TX1NUQVJUICAgICAgIDoKLSAgICAgICAgcHJpbnRm KCJcXEtzbmlfc19zdGFydCAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtU3RhcnRc biIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX1NfQ1VSU09SX1VQICAgOgotICAg ICAgICBwcmludGYoIlxcS3NuaV9zX3VwYXJyICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBT aGlmdC1DdXJzb3IgVXBcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfU05JX1NfVEFC ICAgICAgICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9zX3RhYiAgICAgICBUcmFuc21pdCBT TkktOTc4MDEtNXh4OiBTaGlmdC1UYWJcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtf U05JX1NDUk9MTF9ET1dOICAgOgotICAgICAgICBwcmludGYoIlxcS3NuaV9zY3JvbGxfZG4gICBU cmFuc21pdCBTTkktOTc4MDEtNXh4OiBTY3JvbGwgRG93blxuIik7Ci0gICAgICAgIGJyZWFrOwot ICAgIGNhc2UgS19TTklfU0NST0xMX1VQICAgICA6Ci0gICAgICAgIHByaW50ZigiXFxLc25pX3Nj cm9sbF91cCAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNjcm9sbCBVcFxuIik7Ci0gICAgICAg IGJyZWFrOwotICAgIGNhc2UgS19TTklfU1RBUlQgICAgICAgICA6Ci0gICAgICAgIHByaW50Zigi XFxLc25pX3N0YXJ0ICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFN0YXJ0XG4iKTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9UQUIgICAgICAgICAgIDoKLSAgICAgICAgcHJp bnRmKCJcXEtzbmlfdGFiICAgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogVGFiXG4iKTsK LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX1NOSV9DVVJTT1JfVVAgICAgIDoKLSAgICAgICAg cHJpbnRmKCJcXEtzbmlfdXBhcnIgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3Vyc29y IFVwXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEtfQkE4MF9BVFRSOgotICAgICAg ICBwcmludGYoIlxcS2JhODBfYXR0ciAgICAgICBUcmFuc21pdCBCQTgwOiBBdHRyXG4iKTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX0JBODBfQ19LRVk6Ci0gICAgICAgIHByaW50ZigiXFxL YmE4MF9jX2tleSAgICAgIFRyYW5zbWl0IEJBODA6IENcbiIpOwotICAgICAgICBicmVhazsKLSAg ICBjYXNlIEtfQkE4MF9DTEVBUjoKLSAgICAgICAgcHJpbnRmKCJcXEtiYTgwX2NsZWFyICAgICAg VHJhbnNtaXQgQkE4MDogQ2xlYXJcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfQkE4 MF9DTUQ6Ci0gICAgICAgIHByaW50ZigiXFxLYmE4MF9jbWQgICAgICAgIFRyYW5zbWl0IEJBODA6 IENtZFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19CQTgwX0NPUFk6Ci0gICAgICAg IHByaW50ZigiXFxLYmE4MF9jb3B5ICAgICAgIFRyYW5zbWl0IEJBODA6IENvcHlcbiIpOwotICAg ICAgICBicmVhazsKLSAgICBjYXNlIEtfQkE4MF9ERUw6Ci0gICAgICAgIHByaW50ZigiXFxLYmE4 MF9kZWwgICAgICAgIFRyYW5zbWl0IEJBODA6IERlbGV0ZVxuIik7Ci0gICAgICAgIGJyZWFrOwot ICAgIGNhc2UgS19CQTgwX0RFTF9COgotICAgICAgICBwcmludGYoIlxcS2JhODBfZGVsX2IgICAg ICBUcmFuc21pdCBCQTgwOiBEZWxldGUgQlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug S19CQTgwX0RPOgotICAgICAgICBwcmludGYoIlxcS2JhODBfZG8gICAgICAgICBUcmFuc21pdCBC QTgwOiBEb1xuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19CQTgwX0VORDoKLSAgICAg ICAgcHJpbnRmKCJcXEtiYTgwX2VuZCAgICAgICAgVHJhbnNtaXQgQkE4MDogRW5kXG4iKTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX0JBODBfRU5WOgotICAgICAgICBwcmludGYoIlxcS2Jh ODBfZW52ICAgICAgICBUcmFuc21pdCBCQTgwOiBFbnZcbiIpOwotICAgICAgICBicmVhazsKLSAg ICBjYXNlIEtfQkE4MF9FT1A6Ci0gICAgICAgIHByaW50ZigiXFxLYmE4MF9lb3AgICAgICAgIFRy YW5zbWl0IEJBODA6IEVPUFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19CQTgwX0VS QVNFOgotICAgICAgICBwcmludGYoIlxcS2JhODBfZXJhc2UgICAgICBUcmFuc21pdCBCQTgwOiBF cmFzZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19CQTgwX0ZNVDoKLSAgICAgICAg cHJpbnRmKCJcXEtiYTgwX2ZtdCAgICAgICAgVHJhbnNtaXQgQkE4MDogRm9ybWF0XG4iKTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX0JBODBfSEVMUDoKLSAgICAgICAgcHJpbnRmKCJcXEti YTgwX2hlbHAgICAgICAgVHJhbnNtaXQgQkE4MDogSGVscFxuIik7Ci0gICAgICAgIGJyZWFrOwot ICAgIGNhc2UgS19CQTgwX0hPTUU6Ci0gICAgICAgIHByaW50ZigiXFxLYmE4MF9ob21lICAgICAg IFRyYW5zbWl0IEJBODA6IEhvbWVcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfQkE4 MF9JTlM6Ci0gICAgICAgIHByaW50ZigiXFxLYmE4MF9pbnMgICAgICAgIFRyYW5zbWl0IEJBODA6 IEluc2VydFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19CQTgwX0lOU19COgotICAg ICAgICBwcmludGYoIlxcS2JhODBfaW5zX2IgICAgICBUcmFuc21pdCBCQTgwOiBJbnNlcnQgQlxu Iik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19CQTgwX01BUks6Ci0gICAgICAgIHByaW50 ZigiXFxLYmE4MF9tYXJrICAgICAgIFRyYW5zbWl0IEJBODA6IE1hcmtcbiIpOwotICAgICAgICBi cmVhazsKLSAgICBjYXNlIEtfQkE4MF9NT1ZFOgotICAgICAgICBwcmludGYoIlxcS2JhODBfbW92 ZSAgICAgICBUcmFuc21pdCBCQTgwOiBNb3ZlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz ZSBLX0JBODBfUEEwMToKLSAgICAgICAgcHJpbnRmKCJcXEtiYTgwX3BhMDEgICAgICAgVHJhbnNt aXQgQkE4MDogUEExXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX0JBODBfUEEwMjoK LSAgICAgICAgcHJpbnRmKCJcXEtiYTgwX3BhMDIgICAgICAgVHJhbnNtaXQgQkE4MDogUEEyXG4i KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX0JBODBfUEEwMzoKLSAgICAgICAgcHJpbnRm KCJcXEtiYTgwX3BhMDMgICAgICAgVHJhbnNtaXQgQkE4MDogUEEzXG4iKTsKLSAgICAgICAgYnJl YWs7Ci0gICAgY2FzZSBLX0JBODBfUEEwNDoKLSAgICAgICAgcHJpbnRmKCJcXEtiYTgwX3BhMDQg ICAgICAgVHJhbnNtaXQgQkE4MDogUEE0XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBL X0JBODBfUEEwNToKLSAgICAgICAgcHJpbnRmKCJcXEtiYTgwX3BhMDUgICAgICAgVHJhbnNtaXQg QkE4MDogUEE1XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX0JBODBfUEEwNjoKLSAg ICAgICAgcHJpbnRmKCJcXEtiYTgwX3BhMDYgICAgICAgVHJhbnNtaXQgQkE4MDogUEE2XG4iKTsK LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX0JBODBfUEEwNzoKLSAgICAgICAgcHJpbnRmKCJc XEtiYTgwX3BhMDcgICAgICAgVHJhbnNtaXQgQkE4MDogUEE3XG4iKTsKLSAgICAgICAgYnJlYWs7 Ci0gICAgY2FzZSBLX0JBODBfUEEwODoKLSAgICAgICAgcHJpbnRmKCJcXEtiYTgwX3BhMDggICAg ICAgVHJhbnNtaXQgQkE4MDogUEE4XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX0JB ODBfUEEwOToKLSAgICAgICAgcHJpbnRmKCJcXEtiYTgwX3BhMDkgICAgICAgVHJhbnNtaXQgQkE4 MDogUEE5XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX0JBODBfUEExMDoKLSAgICAg ICAgcHJpbnRmKCJcXEtiYTgwX3BhMTAgICAgICAgVHJhbnNtaXQgQkE4MDogUEExMFxuIik7Ci0g ICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19CQTgwX1BBMTE6Ci0gICAgICAgIHByaW50ZigiXFxL YmE4MF9wYTExICAgICAgIFRyYW5zbWl0IEJBODA6IFBBMTFcbiIpOwotICAgICAgICBicmVhazsK LSAgICBjYXNlIEtfQkE4MF9QQTEyOgotICAgICAgICBwcmludGYoIlxcS2JhODBfcGExMiAgICAg ICBUcmFuc21pdCBCQTgwOiBQQTEyXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX0JB ODBfUEExMzoKLSAgICAgICAgcHJpbnRmKCJcXEtiYTgwX3BhMTMgICAgICAgVHJhbnNtaXQgQkE4 MDogUEExM1xuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19CQTgwX1BBMTQ6Ci0gICAg ICAgIHByaW50ZigiXFxLYmE4MF9wYTE0ICAgICAgIFRyYW5zbWl0IEJBODA6IFBBMTRcbiIpOwot ICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfQkE4MF9QQTE1OgotICAgICAgICBwcmludGYoIlxc S2JhODBfcGExNSAgICAgICBUcmFuc21pdCBCQTgwOiBQQTE1XG4iKTsKLSAgICAgICAgYnJlYWs7 Ci0gICAgY2FzZSBLX0JBODBfUEExNjoKLSAgICAgICAgcHJpbnRmKCJcXEtiYTgwX3BhMTYgICAg ICAgVHJhbnNtaXQgQkE4MDogUEExNlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19C QTgwX1BBMTc6Ci0gICAgICAgIHByaW50ZigiXFxLYmE4MF9wYTE3ICAgICAgIFRyYW5zbWl0IEJB ODA6IFBBMTdcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfQkE4MF9QQTE4OgotICAg ICAgICBwcmludGYoIlxcS2JhODBfcGExOCAgICAgICBUcmFuc21pdCBCQTgwOiBQQTE4XG4iKTsK LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX0JBODBfUEExOToKLSAgICAgICAgcHJpbnRmKCJc XEtiYTgwX3BhMTkgICAgICAgVHJhbnNtaXQgQkE4MDogUEExOVxuIik7Ci0gICAgICAgIGJyZWFr OwotICAgIGNhc2UgS19CQTgwX1BBMjA6Ci0gICAgICAgIHByaW50ZigiXFxLYmE4MF9wYTIwICAg ICAgIFRyYW5zbWl0IEJBODA6IFBBMjBcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtf QkE4MF9QQTIxOgotICAgICAgICBwcmludGYoIlxcS2JhODBfcGEyMSAgICAgICBUcmFuc21pdCBC QTgwOiBQQTIxXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX0JBODBfUEEyMjoKLSAg ICAgICAgcHJpbnRmKCJcXEtiYTgwX3BhMjIgICAgICAgVHJhbnNtaXQgQkE4MDogUEEyMlxuIik7 Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19CQTgwX1BBMjM6Ci0gICAgICAgIHByaW50Zigi XFxLYmE4MF9wYTIzICAgICAgIFRyYW5zbWl0IEJBODA6IFBBMjNcbiIpOwotICAgICAgICBicmVh azsKLSAgICBjYXNlIEtfQkE4MF9QQTI0OgotICAgICAgICBwcmludGYoIlxcS2JhODBfcGEyNCAg ICAgICBUcmFuc21pdCBCQTgwOiBQQTI0XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBL X0JBODBfUEdETjoKLSAgICAgICAgcHJpbnRmKCJcXEtiYTgwX3BnZG4gICAgICAgVHJhbnNtaXQg QkE4MDogUGFnZSBEb3duXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX0JBODBfUEdV UDoKLSAgICAgICAgcHJpbnRmKCJcXEtiYTgwX3BndXAgICAgICAgVHJhbnNtaXQgQkE4MDogUGFn ZSBVcFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19CQTgwX1BJQ0s6Ci0gICAgICAg IHByaW50ZigiXFxLYmE4MF9waWNrICAgICAgIFRyYW5zbWl0IEJBODA6IFBpY2tcbiIpOwotICAg ICAgICBicmVhazsKLSAgICBjYXNlIEtfQkE4MF9QUklOVDoKLSAgICAgICAgcHJpbnRmKCJcXEti YTgwX3ByaW50ICAgICAgVHJhbnNtaXQgQkE4MDogUHJpbnRcbiIpOwotICAgICAgICBicmVhazsK LSAgICBjYXNlIEtfQkE4MF9QVVQ6Ci0gICAgICAgIHByaW50ZigiXFxLYmE4MF9wdXQgICAgICAg IFRyYW5zbWl0IEJBODA6IFB1dFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19CQTgw X1JFRlJFU0g6Ci0gICAgICAgIHByaW50ZigiXFxLYmE4MF9yZWZyZXNoICAgIFRyYW5zbWl0IEJB ODA6IFJlZnJlc2ggXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX0JBODBfUkVTRVQ6 Ci0gICAgICAgIHByaW50ZigiXFxLYmE4MF9yZXNldCAgICAgIFRyYW5zbWl0IEJBODA6IFJlc2V0 XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX0JBODBfUlVCT1VUOgotICAgICAgICBw cmludGYoIlxcS2JhODBfcnVib3V0ICAgICBUcmFuc21pdCBCQTgwOiBSdWJvdXRcbiIpOwotICAg ICAgICBicmVhazsKLSAgICBjYXNlIEtfQkE4MF9TQVZFOgotICAgICAgICBwcmludGYoIlxcS2Jh ODBfc2F2ZSAgICAgICBUcmFuc21pdCBCQTgwOiBTYXZlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0g ICAgY2FzZSBLX0JBODBfU09GVEtFWTE6Ci0gICAgICAgIHByaW50ZigiXFxLYmE4MF9zb2Z0a2V5 MSAgIFRyYW5zbWl0IEJBODA6IFNvZnRrZXkgMVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh c2UgS19CQTgwX1NPRlRLRVkyOgotICAgICAgICBwcmludGYoIlxcS2JhODBfc29mdGtleTIgICBU cmFuc21pdCBCQTgwOiBTb2Z0a2V5IDJcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtf QkE4MF9TT0ZUS0VZMzoKLSAgICAgICAgcHJpbnRmKCJcXEtiYTgwX3NvZnRrZXkzICAgVHJhbnNt aXQgQkE4MDogU29mdGtleSAzXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX0JBODBf U09GVEtFWTQ6Ci0gICAgICAgIHByaW50ZigiXFxLYmE4MF9zb2Z0a2V5NCAgIFRyYW5zbWl0IEJB ODA6IFNvZnRrZXkgNFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19CQTgwX1NPRlRL RVk1OgotICAgICAgICBwcmludGYoIlxcS2JhODBfc29mdGtleTUgICBUcmFuc21pdCBCQTgwOiBT b2Z0a2V5IDVcbiIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfQkE4MF9TT0ZUS0VZNjoK LSAgICAgICAgcHJpbnRmKCJcXEtiYTgwX3NvZnRrZXk2ICAgVHJhbnNtaXQgQkE4MDogU29mdGtl eSA2XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBLX0JBODBfU09GVEtFWTc6Ci0gICAg ICAgIHByaW50ZigiXFxLYmE4MF9zb2Z0a2V5NyAgIFRyYW5zbWl0IEJBODA6IFNvZnRrZXkgN1xu Iik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgS19CQTgwX1NPRlRLRVk4OgotICAgICAgICBw cmludGYoIlxcS2JhODBfc29mdGtleTggICBUcmFuc21pdCBCQTgwOiBTb2Z0a2V5IDhcbiIpOwot ICAgICAgICBicmVhazsKLSAgICBjYXNlIEtfQkE4MF9TT0ZUS0VZOToKLSAgICAgICAgcHJpbnRm KCJcXEtiYTgwX3NvZnRrZXk5ICAgVHJhbnNtaXQgQkE4MDogU29mdGtleSA5XG4iKTsKLSAgICAg ICAgYnJlYWs7Ci0gICAgY2FzZSBLX0JBODBfVU5ETzoKLSAgICAgICAgcHJpbnRmKCJcXEtiYTgw X3VuZG8gICAgICAgVHJhbnNtaXQgQkE4MDogVW5kb1xuIik7Ci0gICAgICAgIGJyZWFrOwotCi0g ICAgICAgIGNhc2UgIEtfSTMxX0YwMToKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjAxICAgICAg ICAgVHJhbnNtaXQgSUJNIDMxeHg6IEYxXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgY2Fz ZSAgS19JMzFfRjAyOiAgICAgICAgIAotICAgICAgICBwcmludGYoIlxcS2kzMV9mMDIgICAgICAg ICBUcmFuc21pdCBJQk0gMzF4eDogRjJcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNl ICBLX0kzMV9GMDM6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YwMyAgICAgICAg IFRyYW5zbWl0IElCTSAzMXh4OiBGM1xuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2Ug IEtfSTMxX0YwNDogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjA0ICAgICAgICAg VHJhbnNtaXQgSUJNIDMxeHg6IEY0XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSAg S19JMzFfRjA1OiAgICAgICAgIAotICAgICAgICBwcmludGYoIlxcS2kzMV9mMDUgICAgICAgICBU cmFuc21pdCBJQk0gMzF4eDogRjVcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBL X0kzMV9GMDY6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YwNiAgICAgICAgIFRy YW5zbWl0IElCTSAzMXh4OiBGNlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtf STMxX0YwNzogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjA3ICAgICAgICAgVHJh bnNtaXQgSUJNIDMxeHg6IEY3XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSAgS19J MzFfRjA4OiAgICAgICAgIAotICAgICAgICBwcmludGYoIlxcS2kzMV9mMDggICAgICAgICBUcmFu c21pdCBJQk0gMzF4eDogRjhcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kz MV9GMDk6ICAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2YwOSAgICAgICAgIFRyYW5z bWl0IElCTSAzMXh4OiBGOVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X0YxMDogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjEwICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IEYxMFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X0YxMTogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjExICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IEYxMVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X0YxMjogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjEyICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IEYxMlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X0YxMzogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjEzICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IEYxM1xuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X0YxNDogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjE0ICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IEYxNFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X0YxNTogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjE1ICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IEYxNVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X0YxNjogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjE2ICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IEYxNlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X0YxNzogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjE3ICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IEYxN1xuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X0YxODogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjE4ICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IEYxOFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X0YxOTogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjE5ICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IEYxOVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X0YyMDogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjIwICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IEYyMFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X0YyMTogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjIxICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IEYyMVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X0YyMjogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjIyICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IEYyMlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X0YyMzogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjIzICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IEYyM1xuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X0YyNDogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjI0ICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IEYyNFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X0YyNTogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjI1ICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IEYyNVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X0YyNjogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjI2ICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IEYyNlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X0YyNzogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjI3ICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IEYyN1xuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X0YyODogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjI4ICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IEYyOFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X0YyOTogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjI5ICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IEYyOVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X0YzMDogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjMwICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IEYzMFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X0YzMTogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjMxICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IEYzMVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X0YzMjogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjMyICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IEYzMlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X0YzMzogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjMzICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IEYzM1xuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X0YzNDogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjM0ICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IEYzNFxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X0YzNTogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjM1ICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IEYzNVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X0YzNjogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjM2ICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IEYzNlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X1BBMTogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfcGExICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IFBBMVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X1BBMjogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfcGEyICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IFBBMlxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X1BBMzogICAgICAgICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfcGEzICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IFBBM1xuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X1JFU0VUOgotICAgICAgICBwcmludGYoIlxcS2kzMV9yZXNldCAgICAgICBUcmFuc21pdCBJQk0g MzF4eDogUmVzZXRcbiIpOwotICAgICAgICBicmVhazsgICAgICAgICAgICAKLSAgICAgICBjYXNl ICBLX0kzMV9KVU1QOiAgICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2p1bXAgICAgICAg IFRyYW5zbWl0IElCTSAzMXh4OiBKdW1wXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgY2Fz ZSAgS19JMzFfQ0xFQVI6ICAgICAgIAotICAgICAgICBwcmludGYoIlxcS2kzMV9jbGVhciAgICAg ICBUcmFuc21pdCBJQk0gMzF4eDogQ2xlYXJcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBj YXNlICBLX0kzMV9FUkFTRV9FT0Y6ICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2VyYXNlX2Vv ZiAgIFRyYW5zbWl0IElCTSAzMXh4OiBFcmFzZSB0byBFbmQgb2YgRmllbGRcbiIpOwotICAgICAg ICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9FUkFTRV9FT1A6ICAgCi0gICAgICAgIHByaW50 ZigiXFxLaTMxX2VvcCAgICAgICAgIFRyYW5zbWl0IElCTSAzMXh4OiBFcmFzZSB0byBFbmQgb2Yg UGFnZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMxX0VSQVNFX0lOUDog ICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfaW5wICAgICAgICAgVHJhbnNtaXQgSUJNIDMxeHg6 IEVyYXNlIElucHV0IE9wZXJhdGlvblxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2Ug IEtfSTMxX0lOU0VSVF9DSEFSOiAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfaW5zX2NoYXIgICAg VHJhbnNtaXQgSUJNIDMxeHg6IEluc2VydCBDaGFyYWN0ZXJcbiIpOwotICAgICAgICBicmVhazsK LSAgICAgICBjYXNlICBLX0kzMV9JTlNFUlRfU1BBQ0U6Ci0gICAgICAgIHByaW50ZigiXFxLaTMx X2luc19zcGFjZSAgIFRyYW5zbWl0IElCTSAzMXh4OiBJbnNlcnQgU3BhY2VcbiIpOwotICAgICAg ICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9ERUxFVEU6ICAgICAgCi0gICAgICAgIHByaW50 ZigiXFxLaTMxX2RlbGV0ZSAgICAgIFRyYW5zbWl0IElCTSAzMXh4OiBEZWxldGUgQ2hhcmFjdGVy XG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSAgS19JMzFfSU5TX0xOOiAgICAgIAot ICAgICAgICBwcmludGYoIlxcS2kzMV9pbnNfbGluZSAgICBUcmFuc21pdCBJQk0gMzF4eDogSW5z ZXJ0IExpbmVcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9ERUxfTE46 ICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2RlbF9sbiAgICAgIFRyYW5zbWl0IElCTSAz MXh4OiBEZWxldGUgTGluZVxuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfSTMx X1BSSU5UX0xJTkU6ICAKLSAgICAgICAgcHJpbnRmKCJcXEtpMzFfcHJ0X2xpbmUgICAgVHJhbnNt aXQgSUJNIDMxeHg6IFByaW50IExpbmVcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNl ICBLX0kzMV9QUklOVF9NU0c6ICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX3BydF9tc2cgICAg IFRyYW5zbWl0IElCTSAzMXh4OiBQcmludCBNZXNzYWdlXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0g ICAgICAgY2FzZSAgS19JMzFfUFJJTlRfU0hJRlQ6IAotICAgICAgICBwcmludGYoIlxcS2kzMV9w cnRfc2hpZnQgICBUcmFuc21pdCBJQk0gMzF4eDogUHJpbnQgU2hpZnRcbiIpOwotICAgICAgICBi cmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9DQU5DRUw6ICAgICAgCi0gICAgICAgIHByaW50Zigi XFxLaTMxX2NhbmNlbCAgICAgIFRyYW5zbWl0IElCTSAzMXh4OiBDYW5jZWxcbiIpOwotICAgICAg ICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9TRU5EX0xJTkU6ICAgCi0gICAgICAgIHByaW50 ZigiXFxLaTMxX3NlbmRfbGluZSAgIFRyYW5zbWl0IElCTSAzMXh4OiBTZW5kIExpbmVcbiIpOwot ICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9TRU5EX01TRzogICAgCi0gICAgICAg IHByaW50ZigiXFxLaTMxX3NlbmRfbXNnICAgIFRyYW5zbWl0IElCTSAzMXh4OiBTZW5kIE1lc3Nh Z2VcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9TRU5EX1BBR0U6ICAg Ci0gICAgICAgIHByaW50ZigiXFxLaTMxX3NlbmRfcGFnZSAgIFRyYW5zbWl0IElCTSAzMXh4OiBT ZW5kIFBhZ2VcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX0kzMV9IT01FOiAg ICAgICAgCi0gICAgICAgIHByaW50ZigiXFxLaTMxX2hvbWUgICAgICAgIFRyYW5zbWl0IElCTSAz MXh4OiBIb21lXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSAgS19JMzFfQkFDS19U QUI6ICAgIAotICAgICAgICBwcmludGYoIlxcS2kzMV9iYWNrX3RhYiAgICBUcmFuc21pdCBJQk0g MzF4eDogQmFjayBUYWJcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX1NVTl9T VE9QOiAKLSAgICAgICAgcHJpbnRmKCJcXEtzdW5zdG9wICAgICAgICAgVHJhbnNtaXQgU1VOIENv bnNvbGU6IFN0b3BcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX1NVTl9BR0FJ TjoKLSAgICAgICAgcHJpbnRmKCJcXEtzdW5hZ2FpbiAgICAgICAgVHJhbnNtaXQgU1VOIENvbnNv bGU6IEFnYWluXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSAgS19TVU5fUFJPUFM6 Ci0gICAgICAgIHByaW50ZigiXFxLc3VucHJvcHMgICAgICAgIFRyYW5zbWl0IFNVTiBDb25zb2xl OiBQcm9wc1xuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfU1VOX1VORE86IAot ICAgICAgICBwcmludGYoIlxcS3N1bnVuZG8gICAgICAgICBUcmFuc21pdCBTVU4gQ29uc29sZTog VW5kb1xuIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgIEtfU1VOX0ZST05UOgotICAg ICAgICBwcmludGYoIlxcS3N1bmZyb250ICAgICAgICBUcmFuc21pdCBTVU4gQ29uc29sZTogRnJv bnRcbiIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX1NVTl9DT1BZOiAKLSAgICAg ICAgcHJpbnRmKCJcXEtzdW5jb3B5ICAgICAgICAgVHJhbnNtaXQgU1VOIENvbnNvbGU6IENvcHlc biIpOwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX1NVTl9PUEVOOiAKLSAgICAgICAg cHJpbnRmKCJcXEtzdW5vcGVuICAgICAgICAgVHJhbnNtaXQgU1VOIENvbnNvbGU6IE9wZW5cbiIp OwotICAgICAgICBicmVhazsKLSAgICAgICBjYXNlICBLX1NVTl9QQVNURToKLSAgICAgICAgcHJp bnRmKCJcXEtzdW5wYXN0ZSAgICAgICAgVHJhbnNtaXQgU1VOIENvbnNvbGU6IFBhc3RlXG4iKTsK LSAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSAgS19TVU5fRklORDogCi0gICAgICAgIHByaW50 ZigiXFxLc3VuZmluZCAgICAgICAgIFRyYW5zbWl0IFNVTiBDb25zb2xlOiBGaW5kXG4iKTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSAgS19TVU5fQ1VUOiAgCi0gICAgICAgIHByaW50Zigi XFxLc3VuY3V0ICAgICAgICAgIFRyYW5zbWl0IFNVTiBDb25zb2xlOiBDdXRcbiIpOwotICAgICAg ICBicmVhazsKLSAgICAgICBjYXNlICBLX1NVTl9IRUxQOiAKLSAgICAgICAgcHJpbnRmKCJcXEtz dW5oZWxwICAgICAgICAgVHJhbnNtaXQgU1VOIENvbnNvbGU6IEhlbHBcbiIpOwotICAgICAgICBi cmVhazsKLQotICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHByaW50ZigiTm8gYWRkaXRpb25hbCBo ZWxwIGF2YWlsYWJsZSBmb3IgdGhpcyBrdmVyYlxuIik7Ci0gIH0KLSAgICBwcmludGYoIlxuIik7 Ci0KLSAgICAvKiBUaGlzIGlzIG5vdCB0aGUgcHJvcGVyIHdheSB0byBkbyBpdCBzaW5jZSBpdCBk b2Vzbid0IHNob3cgICovCi0gICAgLyogYWxsIGVtdWxhdGlvbnMsIG5vciBkb2VzIGl0IHNob3cg dGhlIHNwZWNpYWwgbW9kZXMsIGJ1dCBpdCAqLwotICAgIC8qIGlzIGJldHRlciB0aGFuIG5vdGhp bmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotICAgIHByaW50Zigi Q3VycmVudCBiaW5kaW5nczpcbiIpOwotICAgIGZvdW5kID0gMDsKLSAgICBmb3IgKGkgPSAyNTY7 IGkgPCBLTVNJWkUgOyBpKyspIHsKLSAgICAgICAgY29uX2V2ZW50IGV2dCA9IG1hcGtleShpKTsK LSAgICAgICAgaWYgKGV2dC50eXBlICE9IGt2ZXJiKQotICAgICAgICAgIGNvbnRpbnVlOwotICAg ICAgICBpZiAoKGV2dC5rdmVyYi5pZCAmIH5GX0tWRVJCKSA9PSB4eCkgewotICAgICAgICAgICAg Zm91bmQgPSAxOwotICAgICAgICAgICAgcHJpbnRmKCIgIFxcJS00ZCAtICVzXG4iLGksa2V5bmFt ZShpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jaWZkZWYgT1MyTU9VU0UKLSAgICBmb3IgKCBidXR0 b24gPSAwIDsgYnV0dG9uIDwgTU1CVVRUT05NQVggOyBidXR0b24rKyApCi0gICAgICBmb3IgKCBl dmVudCA9IDAgOyBldmVudCA8IE1NRVZFTlRTSVpFIDsgZXZlbnQrKyApCi0gICAgICAgIGlmICgg bW91c2VtYXBbYnV0dG9uXVtldmVudF0udHlwZSA9PSBrdmVyYiApIHsKLSAgICAgICAgICAgIGlm ICggKG1vdXNlbWFwW2J1dHRvbl1bZXZlbnRdLmt2ZXJiLmlkICYgfkZfS1ZFUkIpID09IHh4ICkg ewotICAgICAgICAgICAgICAgIGZvdW5kID0gMTsKLSAgICAgICAgICAgICAgICBwcmludGYoIiAg TW91c2UgLSAlc1xuIixtb3VzZW5hbWUoYnV0dG9uLGV2ZW50KSk7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgIH0KLSNlbmRpZiAvKiBPUzJNT1VTRSAqLwotCi0gICAgaWYgKCAhZm91bmQgKSB7Ci0g ICAgICAgIHByaW50ZigiICAobm9uZSlcbiIpOwotICAgIH0KLSAgICByZXR1cm4oMCk7Ci19Ci0j ZW5kaWYgLyogTk9LVkVSQlMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmbmRlZiBOT1hGRVIK LS8qICBEIE8gSCBSIE0gVCAgLS0gIEdpdmUgaGVscCBhYm91dCBSRU1PVEUgY29tbWFuZCAgKi8K LQotc3RhdGljIGNoYXIgKmhyc2V0W10gPSB7Ci0iU3ludGF4OiAgUkVNT1RFIFNFVCBwYXJhbWV0 ZXIgdmFsdWUiLAotIkV4YW1wbGU6IFJFTU9URSBTRVQgRklMRSBUWVBFIEJJTkFSWSIsCi0iICBB c2tzIHRoZSBLZXJtaXQgc2VydmVyIHRvIHNldCB0aGUgbmFtZWQgcGFyYW1ldGVyIHRvIHRoZSBn aXZlbiB2YWx1ZS4iLAotIiAgRXF1aXZhbGVudCB0byB0eXBpbmcgdGhlIGNvcnJlc3BvbmRpbmcg U0VUIGNvbW1hbmQgZGlyZWN0bHkgdG8gdGhlIG90aGVyIiwKLSIgIEtlcm1pdCBpZiBpdCB3ZXJl IGluIGludGVyYWN0aXZlIG1vZGUuIiwgIiIgfTsKLQotaW50Ci1kb2hybXQoeHgpIGludCB4eDsg ewotICAgIGludCB4OwotICAgIGlmICh4eCA9PSAtMykgcmV0dXJuKGhtc2dhKGhtaHJtdCkpOwot ICAgIGlmICh4eCA8IDApIHJldHVybih4eCk7Ci0gICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSBy ZXR1cm4oeCk7Ci0gICAgc3dpdGNoICh4eCkgewotCi1jYXNlIFhaQ1BZOgotICAgIHJldHVybiho bXNnKCJTeW50YXg6IFJFTU9URSBDT1BZIHNvdXJjZSBkZXN0aW5hdGlvblxuXAotICBBc2tzIHRo ZSBLZXJtaXQgc2VydmVyIHRvIGNvcHkgdGhlIHNvdXJjZSBmaWxlIHRvIGRlc3RpbmF0aW9uLlxu XAotICBTeW5vbnltOiBSQ09QWS4iKSk7Ci0KLWNhc2UgWFpDV0Q6Ci0jaWZkZWYgTkVXRlRQCi0g ICAgcmV0dXJuKGhtc2coIlN5bnRheDogUkVNT1RFIENEIFsgbmFtZSBdXG5cCi0gIEFza3MgdGhl IEtlcm1pdCBvciBGVFAgc2VydmVyIHRvIGNoYW5nZSBpdHMgd29ya2luZyBkaXJlY3Rvcnkgb3Ig ZGV2aWNlLlxuXAotICBJZiB0aGUgZGV2aWNlIG9yIGRpcmVjdG9yeSBuYW1lIGlzIG9taXR0ZWQs IHJlc3RvcmUgdGhlIGRlZmF1bHQuXG5cCi0gIFN5bm9ueW06IFJDRC4iKSk7Ci0jZWxzZQotICAg IHJldHVybihobXNnKCJTeW50YXg6IFJFTU9URSBDRCBbIG5hbWUgXVxuXAotICBBc2tzIHRoZSBL ZXJtaXQgc2VydmVyIHRvIGNoYW5nZSBpdHMgd29ya2luZyBkaXJlY3Rvcnkgb3IgZGV2aWNlLlxu XAotICBJZiB0aGUgZGV2aWNlIG9yIGRpcmVjdG9yeSBuYW1lIGlzIG9taXR0ZWQsIHJlc3RvcmUg dGhlIGRlZmF1bHQuXG5cCi0gIFN5bm9ueW06IFJDRC4iKSk7Ci0jZW5kaWYgLyogTkVXRlRQICov Ci0KLWNhc2UgWFpERUw6Ci0jaWZkZWYgTkVXRlRQCi0gICAgcmV0dXJuKGhtc2coIlN5bnRheDog UkVNT1RFIERFTEVURSBmaWxlc3BlY1xuXAotICBBc2tzIHRoZSBLZXJtaXQgb3IgRlRQIHNlcnZl ciB0byBkZWxldGUgdGhlIG5hbWVkIGZpbGUocykuXG5cCi0gIFN5bm9ueW06IFJERUwuIikpOwot I2Vsc2UKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBSRU1PVEUgREVMRVRFIGZpbGVzcGVjXG5c Ci0gIEFza3MgdGhlIEtlcm1pdCBzZXJ2ZXIgdG8gZGVsZXRlIHRoZSBuYW1lZCBmaWxlKHMpLlxu XAotICBTeW5vbnltOiBSREVMLiIpKTsKLSNlbmRpZiAvKiBORVdGVFAgKi8KLQotY2FzZSBYWk1L RDoKLSNpZmRlZiBORVdGVFAKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBSRU1PVEUgTUtESVIg ZGlyZWN0b3J5LW5hbWVcblwKLSAgQXNrcyB0aGUgS2VybWl0IG9yIEZUUCBzZXJ2ZXIgdG8gY3Jl YXRlIHRoZSBuYW1lZCBkaXJlY3RvcnkuXG5cCi0gIFN5bm9ueW06IFJNS0RJUi4iKSk7Ci0jZWxz ZQotICAgIHJldHVybihobXNnKCJTeW50YXg6IFJFTU9URSBNS0RJUiBkaXJlY3RvcnktbmFtZVxu XAotICBBc2tzIHRoZSBLZXJtaXQgc2VydmVyIHRvIGNyZWF0ZSB0aGUgbmFtZWQgZGlyZWN0b3J5 LlxuXAotICBTeW5vbnltOiBSTUtESVIuIikpOwotI2VuZGlmIC8qIE5FV0ZUUCAqLwotCi1jYXNl IFhaUk1EOgotI2lmZGVmIE5FV0ZUUAotICAgIHJldHVybihobXNnKCJTeW50YXg6IFJFTU9URSBS TURJUiBkaXJlY3RvcnktbmFtZVxuXAotICBBc2tzIHRoZSBLZXJtaXQgb3IgRlRQIHNlcnZlciB0 byByZW1vdmUgdGhlIG5hbWVkIGRpcmVjdG9yeS5cblwKLSAgU3lub255bTogUlJNRElSLiIpKTsK LSNlbHNlCi0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogUkVNT1RFIFJNRElSIGRpcmVjdG9yeS1u YW1lXG5cCi0gIEFza3MgdGhlIEtlcm1pdCBzZXJ2ZXIgdG8gcmVtb3ZlIHRoZSBuYW1lZCBkaXJl Y3RvcnkuXG5cCi0gIFN5bm9ueW06IFJSTURJUi4iKSk7Ci0jZW5kaWYgLyogTkVXRlRQICovCi0K LWNhc2UgWFpESVI6Ci0jaWZkZWYgTkVXRlRQCi0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogUkVN T1RFIERJUkVDVE9SWSBbIGZpbGVzcGVjIF1cblwKLSAgQXNrcyB0aGUgS2VybWl0IG9yIEZUUCBz ZXJ2ZXIgdG8gcHJvdmlkZSBhIGRpcmVjdG9yeSBsaXN0aW5nIG9mIHRoZSBuYW1lZFxuXAotICBm aWxlKHMpIG9yIGlmIG5vIGZpbGUgc3BlY2lmaWNhdGlvbiBpcyBnaXZlbiwgb2YgYWxsIGZpbGVz IGluIGl0cyBjdXJyZW50XG5cCi0gIGRpcmVjdG9yeS4gIFN5bm9ueW06IFJESVIuIikpOwotI2Vs c2UKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBSRU1PVEUgRElSRUNUT1JZIFsgZmlsZXNwZWMg XVxuXAotICBBc2tzIHRoZSBLZXJtaXQgc2VydmVyIHRvIHByb3ZpZGUgYSBkaXJlY3RvcnkgbGlz dGluZyBvZiB0aGUgbmFtZWRcblwKLSAgZmlsZShzKSBvciBpZiBubyBmaWxlIHNwZWNpZmljYXRp b24gaXMgZ2l2ZW4sIG9mIGFsbCBmaWxlcyBpbiBpdHMgY3VycmVudFxuXAotICBkaXJlY3Rvcnku ICBTeW5vbnltOiBSRElSLiIpKTsKLSNlbmRpZiAvKiBORVdGVFAgKi8KLQotY2FzZSBYWkhMUDoK LSNpZmRlZiBORVdGVFAKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBSRU1PVEUgSEVMUFxuXAot ICBBc2tzIHRoZSBLZXJtaXQgb3IgRlRQIHNlcnZlciB0byBsaXN0IHRoZSBzZXJ2aWNlcyBpdCBw cm92aWRlcy5cblwKLSAgU3lub255bTogUkhFTFAuIikpOwotI2Vsc2UKLSAgICByZXR1cm4oaG1z ZygiU3ludGF4OiBSRU1PVEUgSEVMUFxuXAotICBBc2tzIHRoZSBLZXJtaXQgc2VydmVyIHRvIGxp c3QgdGhlIHNlcnZpY2VzIGl0IHByb3ZpZGVzLlxuXAotICBTeW5vbnltOiBSSEVMUC4iKSk7Ci0j ZW5kaWYgLyogTkVXRlRQICovCi0KLWNhc2UgWFpIT1M6Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRh eDogUkVNT1RFIEhPU1QgY29tbWFuZFxuXAotICBTZW5kcyBhIGNvbW1hbmQgdG8gdGhlIG90aGVy IGNvbXB1dGVyIGluIGl0cyBvd24gY29tbWFuZCBsYW5ndWFnZVxuXAotICB0aHJvdWdoIHRoZSBL ZXJtaXQgc2VydmVyIHRoYXQgaXMgcnVubmluZyBvbiB0aGF0IGhvc3QuICBTeW5vbnltOiBSSE9T VC4iKSk7Ci0KLSNpZm5kZWYgTk9GUklMTFMKLWNhc2UgWFpLRVI6Ci0gICAgcmV0dXJuKGhtc2co IlN5bnRheDogUkVNT1RFIEtFUk1JVCBjb21tYW5kXG5cCi0gIFNlbmRzIGEgY29tbWFuZCB0byB0 aGUgcmVtb3RlIEtlcm1pdCBzZXJ2ZXIgaW4gaXRzIG93biBjb21tYW5kIGxhbmd1YWdlLlxuXAot ICBTeW5vbnltOiBSS0VSTUlULiIpKTsKLQotY2FzZSBYWkxHSToKLSAgICByZXR1cm4oaG1zZygi U3ludGF4OiBSRU1PVEUgTE9HSU4gdXNlciBwYXNzd29yZCBbIGFjY291bnQgXVxuXAotICBMb2dz IGluIHRvIGEgcmVtb3RlIEtlcm1pdCBzZXJ2ZXIgdGhhdCByZXF1aXJlcyB5b3UgbG9naW4uICBO b3RlOiBSTE9HSU5cblwKLSAgaXMgTk9UIGEgc3lub255bSBmb3IgUkVNT1RFIExPR0lOLiIpKTsK LQotY2FzZSBYWkxHTzoKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBSRU1PVEUgTE9HT1VUXG5c Ci0gIExvZ3Mgb3V0IGZyb20gYSByZW1vdGUgS2VybWl0IHNlcnZlciB0byB3aGljaCB5b3UgaGF2 ZSBwcmV2aW91c2x5IGxvZ2dlZCBpbi4iCi0pKTsKLQotY2FzZSBYWk1TRzoKLSAgICByZXR1cm4o aG1zZygiU3ludGF4OiBSRU1PVEUgTUVTU0FHRSB0ZXh0XG5cCi0gIFNlbmRzIGEgc2hvcnQgdGV4 dCBtZXNzYWdlIHRvIHRoZSByZW1vdGUgS2VybWl0IHNlcnZlci4iKSk7Ci0KLWNhc2UgWFpQUkk6 Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogUkVNT1RFIFBSSU5UIGZpbGVzcGVjIFsgb3B0aW9u cyBdXG5cCi0gIFNlbmRzIHRoZSBzcGVjaWZpZWQgZmlsZShzKSB0byB0aGUgcmVtb3RlIEtlcm1p dCBhbmQgYXNrIGl0IHRvIGhhdmUgdGhlXG5cCi0gIGZpbGUgcHJpbnRlZCBvbiB0aGUgcmVtb3Rl IHN5c3RlbSdzIHByaW50ZXIsIHVzaW5nIGFueSBzcGVjaWZpZWQgb3B0aW9ucy5cblwKLSAgU3lu b255bTogUlBSSU5ULiIpKTsKLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotCi1jYXNlIFhaUkVOOgot I2lmZGVmIE5FV0ZUUAotICAgIHJldHVybihobXNnKCJTeW50YXg6IFJFTU9URSBSRU5BTUUgZmls ZXNwZWMgbmV3bmFtZVxuXAotICBBc2tzIHRoZSBLZXJtaXQgb3IgRlRQIHNlcnZlciB0byByZW5h bWUgdGhlIGZpbGUuICBTeW5vbnltOiBSUkVOQU1FLiIpKTsKLSNlbHNlCi0gICAgcmV0dXJuKGht c2coIlN5bnRheDogUkVNT1RFIFJFTkFNRSBmaWxlc3BlYyBuZXduYW1lXG5cCi0gIEFza3MgdGhl IEtlcm1pdCBzZXJ2ZXIgdG8gcmVuYW1lIHRoZSBmaWxlLiAgU3lub255bTogUlJFTkFNRS4iKSk7 Ci0jZW5kaWYgLyogTkVXRlRQICovCi0KLWNhc2UgWFpTRVQ6Ci0gICAgcmV0dXJuKGhtc2dhKGhy c2V0KSk7Ci0KLWNhc2UgWFpTUEE6Ci0gICAgcmV0dXJuKGhtc2coIlN5bnRheDogUkVNT1RFIFNQ QUNFIFsgbmFtZSBdXG5cCi0gIEFza3MgdGhlIEtlcm1pdCBzZXJ2ZXIgdG8gdGVsbCB5b3UgYWJv dXQgaXRzIGRpc2sgc3BhY2Ugb24gdGhlIGN1cnJlbnRcblwKLSAgZGlzayBvciBkaXJlY3Rvcnks IG9yIGluIHRoZSBvbmUgdGhhdCB5b3UgbmFtZS4gIFN5bm9ueW06IFJTUEFDRS4iKSk7Ci0KLSNp Zm5kZWYgTk9GUklMTFMKLWNhc2UgWFpUWVA6Ci0jaWZkZWYgTkVXRlRQCi0gICAgcmV0dXJuKGht c2coIlN5bnRheDogUkVNT1RFIFRZUEUgZmlsZVxuXAotICBBc2tzIHRoZSBLZXJtaXQgb3IgRlRQ IHNlcnZlciB0byBzZW5kIHRoZSBuYW1lZCBmaWxlIHRvIHlvdXIgc2NyZWVuLlxuXAotICBTeW5v bnltOiBSVFlQRS4iKSk7Ci0jZWxzZQotICAgIHJldHVybihobXNnKCJTeW50YXg6IFJFTU9URSBU WVBFIGZpbGVcblwKLSAgQXNrcyB0aGUgS2VybWl0IHNlcnZlciB0byBzZW5kIHRoZSBuYW1lZCBm aWxlKHMpIHRvIHlvdXIgc2NyZWVuLlxuXAotICBTeW5vbnltOiBSVFlQRS4iKSk7Ci0jZW5kaWYg LyogTkVXRlRQICovCi0KLQotY2FzZSBYWldITzoKLSAgICByZXR1cm4oaG1zZygiU3ludGF4OiBS RU1PVEUgV0hPIFsgbmFtZSBdXG5cCi0gIEFza3MgdGhlIEtlcm1pdCBzZXJ2ZXIgdG8gbGlzdCB3 aG8ncyBsb2dnZWQgaW4sIG9yIHRvIGdpdmUgaW5mb3JtYXRpb25cblwKLSAgYWJvdXQgdGhlIG5h bWVkIHVzZXIuICBTeW5vbnltOiBSV0hPLiIpKTsKLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotCi0j aWZuZGVmIE5PU1BMCi1jYXNlIFhaUVVFOgotICAgIHJldHVybihobXNnKAotIlN5bnRheDogWyBS RU1PVEUgXSBRVUVSWSB7IEtFUk1JVCwgU1lTVEVNLCBVU0VSIH0gdmFyaWFibGUtbmFtZVxuXAot ICBBc2tzIHRoZSBLZXJtaXQgc2VydmVyIHRvIHNlbmQgdGhlIHZhbHVlIG9mIHRoZSBuYW1lZCB2 YXJpYWJsZSBvZiB0aGVcblwKLSAgZ2l2ZW4gdHlwZSwgYW5kIG1ha2UgaXQgYXZhaWxhYmxlIGlu IHRoZSBcXHYocXVlcnkpIHZhcmlhYmxlLiAgV2hlbiB0aGVcblwKLSAgdHlwZSBpcyBLRVJNSVQg ZnVuY3Rpb25zIG1heSBhbHNvIGJlIHNwZWNpZmllZCBhcyBpZiB0aGV5IHdlcmUgdmFyaWFibGVz LiIpKTsKLQotY2FzZSBYWkFTRzoKLSAgICByZXR1cm4oaG1zZygKLSJTeW50YXg6IFJFTU9URSBB U1NJR04gdmFyaWFibGUtbmFtZSBbIHZhbHVlIF1cblwKLSAgQXNzaWducyB0aGUgZ2l2ZW4gdmFs dWUgdG8gdGhlIG5hbWVkIGdsb2JhbCB2YXJpYWJsZSBvbiB0aGUgc2VydmVyLlxuXAotICBTeW5v bnltczogUkFTRywgUkFTU0lHTi4iKSk7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotY2FzZSBYWlBX RDoKLSAgICByZXR1cm4oaG1zZygKLSNpZmRlZiBORVdGVFAKLSJTeW50YXg6IFJFTU9URSBQV0Rc blwKLSAgQXNrcyB0aGUgS2VybWl0IHNlcnZlciB0byBkaXNwbGF5IGl0cyBjdXJyZW50IHdvcmtp bmcgZGlyZWN0b3J5LlxuXAotICBTeW5vbnltOiBSUFdELiIpKTsKLSNlbHNlCi0iU3ludGF4OiBS RU1PVEUgUFdEXG5cCi0gIEFza3MgdGhlIEtlcm1pdCBvciBGVFAgc2VydmVyIHRvIGRpc3BsYXkg aXRzIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuXG5cCi0gIFN5bm9ueW06IFJQV0QuIikpOwot I2VuZGlmIC8qIE5FV0ZUUCAqLwotCi1jYXNlIFhaWElUOgotI2lmZGVmIE5FV0ZUUAotICAgIHJl dHVybihobXNnKCJTeW50YXg6IFJFTU9URSBFWElUXG5cCi0gICBBc2tzIHRoZSBLZXJtaXQgc2Vy dmVyIHRvIGV4aXQgKHdpdGhvdXQgZGlzY29ubmVjdGluZyksIG9yIGNsb3NlcyBhbiBGVFBcblwK LSAgIGNvbm5lY3Rpb24uICBTeW5vbnltOiBSRVhJVCwgYW5kIChmb3IgRlRQIG9ubHkpIEJZRSwg RlRQIEJZRS4iKSk7Ci0jZWxzZQotICAgIHJldHVybihobXNnKCJTeW50YXg6IFJFTU9URSBFWElU XG5cCi0gIEFza3MgdGhlIEtlcm1pdCBzZXJ2ZXIgdG8gZXhpdC4gIFN5bm9ueW06IFJFWElULiIp KTsKLSNlbmRpZiAvKiBORVdGVFAgKi8KLQotZGVmYXVsdDoKLSAgICBpZiAoKHggPSBjbWNmbSgp KSA8IDApIHJldHVybih4KTsKLSAgICBwcmludGYoIj9Tb3JyeSwgbm8gaGVscCBhdmFpbGFibGUg LSBcIiVzXCJcbiIsY21kYnVmKTsKLSAgICByZXR1cm4oLTkpOwotICAgIH0KLX0KLSNlbmRpZiAv KiBOT1hGRVIgKi8KLSNlbmRpZiAvKiBOT0hFTFAgKi8KLSNlbmRpZiAvKiBOT0lDUCAqLwoKZGlm ZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXMzLmMg Yi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzMy5jCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODg3YjM0Li4wMDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4w LjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXMzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwx MzYyOSArMCwwIEBACi0jaWZkZWYgU1NIVEVTVAotI2RlZmluZSBTU0hCVUlMVElOCi0jZW5kaWYg LyogU1NIVEVTVCAqLwotCi0jaW5jbHVkZSAiY2tjc3ltLmgiICAgICAgICAgICAgICAgICAgICAg LyogU3ltYm9sIGRlZmluaXRpb25zICovCi0KLS8qICBDIEsgVSBVIFMgMyAtLSAgIlVzZXIgSW50 ZXJmYWNlIiBmb3IgQy1LZXJtaXQsIHBhcnQgMyAgKi8KLQotLyoKLSAgQXV0aG9yczoKLSAgICBG cmFuayBkYSBDcnV6IDxmZGNAY29sdW1iaWEuZWR1PiwKLSAgICAgIFRoZSBLZXJtaXQgUHJvamVj dCwgQ29sdW1iaWEgVW5pdmVyc2l0eSwgTmV3IFlvcmsgQ2l0eQotICAgIEplZmZyZXkgRSBBbHRt YW4gPGphbHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20+Ci0gICAgICBTZWN1cmUgRW5kcG9pbnRz IEluYy4sIE5ldyBZb3JrIENpdHkKLQotICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMTEsCi0gICAg VHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4K LSAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBm aWxlIG9yIHRoZQotICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9y IGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgotKi8KLQotLyogIFNFVCBjb21tYW5kIChidXQg bXVjaCBtYXRlcmlhbCBoYXMgYmVlbiBzcGxpdCBvZmYgaW50byBja3V1czcuYykuICovCi0KLS8q Ci0gIEtlcm1pdC1zcGVjaWZpYyBpbmNsdWRlcy4KLSAgRGVmaW5pdGlvbnMgaGVyZSBzdXBlcnNl ZGUgdGhvc2UgZnJvbSBzeXN0ZW0gaW5jbHVkZSBmaWxlcy4KLSovCi0jaW5jbHVkZSAiY2tjZGVi LmgiICAgICAgICAgICAgICAgICAgICAgLyogRGVidWdnaW5nICYgY29tcGlsZXIgdGhpbmdzICov Ci0jaW5jbHVkZSAiY2tjYXNjLmgiICAgICAgICAgICAgICAgICAgICAgLyogQVNDSUkgY2hhcmFj dGVyIHN5bWJvbHMgKi8KLSNpbmNsdWRlICJja2NrZXIuaCIgICAgICAgICAgICAgICAgICAgICAv KiBLZXJtaXQgYXBwbGljYXRpb24gZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlICJja2N4bGEuaCIg ICAgICAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIgc2V0IHRyYW5zbGF0aW9uICovCi0jaW5j bHVkZSAiY2tjbmV0LmgiICAgICAgICAgICAgICAgICAgICAgLyogTmV0d29yayBzeW1ib2xzICov Ci0KLWNoYXIgcHdidWZbUFdCVUZMKzFdICA9IHsgTlVMLCBOVUwgfTsKLWludCBwd2ZsZyA9IDA7 Ci1pbnQgcHdjcnlwdCA9IDA7Ci0KLSNpZm5kZWYgTk9JQ1AKLQotI2lmZGVmIENLX0FVVEhFTlRJ Q0FUSU9OCi0jaW5jbHVkZSAiY2t1YXRoLmgiCi0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04g Ki8KLSNpZmRlZiBDS19TU0wKLSNpbmNsdWRlICJja19zc2wuaCIKLSNlbmRpZiAvKiBDS19TU0wg Ki8KLSNpbmNsdWRlICJja3V1c3IuaCIgICAgICAgICAgICAgICAgICAgICAvKiBVc2VyIGludGVy ZmFjZSBzeW1ib2xzICovCi0jaWZkZWYgT1MyCi0jaW5jbHVkZSAiY2tjdW5pLmgiCi0jaWZkZWYg U1NIQlVJTFRJTgotI2luY2x1ZGUgImNrb3NzaC5oIgotI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8K LSNpZmRlZiBDS19ORVRCSU9TCi0jaW5jbHVkZSA8b3MyLmg+Ci0jaWZkZWYgQ09NTUVOVCAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogV291bGQgeW91IGJlbGlldmUgKi8KLSN1bmRlZiBDT01N RU5UICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA8b3MyLmg+IGRlZmluZXMgdGhpcyA/ICov Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2luY2x1ZGUgImNrb25iaS5oIgotZXh0ZXJuIFVDSEFS IE5ldEJpb3NBZGFwdGVyOwotI2VuZGlmIC8qIENLX05FVEJJT1MgKi8KLSNpbmNsdWRlICJja29j b24uaCIKLSNpbmNsdWRlICJja29rZXkuaCIKLSNpZm5kZWYgTk9URVJNCi1leHRlcm4gdW5zaWdu ZWQgY2hhciBjb2xvcmNtZDsgIC8qIENvbW1hbmQtc2NyZWVuIGNvbG9ycyAqLwotZXh0ZXJuIHN0 cnVjdCBrZXl0YWIgdHR5Y2xydGFiW107Ci1leHRlcm4gaW50IG5jbHJzOwotZXh0ZXJuIGludCB0 dF9jb2xzW10sIHR0X3Jvd3NbXSwgdHRfc3pjaG5nW10sIHR0X3N0YXR1c1tdOwotI2VuZGlmIC8q IE5PVEVSTSAqLwotX1BST1RPVFlQKGludCBzZXRwcnR5LCAodm9pZCkpOwotZXh0ZXJuIGNoYXIg c3RhcnR1cGRpcltdLCBleGVkaXJbXTsKLWV4dGVybiBpbnQgdHRfbW9kZWNoZzsKLSNpZmRlZiBO VAotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDx0YXBpLmg+Ci0jaW5jbHVkZSAiY2tu dGFwLmgiICAgICAgICAgICAgICAgICAgICAgLyogTWljcm9zb2Z0IFRBUEkgKi8KLSNlbmRpZiAv KiBOVCAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZuZGVmIE9TMgotZXh0ZXJuIGNoYXIgKiBl eGVkaXI7Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBDS19SRUNBTEwKLWV4dGVybiBpbnQg Y21fcmV0cnk7Ci0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0KLSNpZmRlZiBORVdGVFAKLWV4dGVy biBpbnQgZnRwaXNvcGVuKCk7Ci0jZW5kaWYgLyogTkVXRlRQICovCi0KLWV4dGVybiBpbnQgY21k aW50OwotZXh0ZXJuIGludCBzcnZpZGw7Ci0KLSNpZmRlZiBDS0ZMT0FUCi1leHRlcm4gQ0tGTE9B VCBmbG9hdHZhbDsJCS8qIChzZWUgaXNmbG9hdCgpKSAqLwotI2VuZGlmIC8qIENLRkxPQVQgKi8K LQotI2lmbmRlZiBOT1BVU0gKLSNpZm5kZWYgTk9GUklMTFMKLSNpZmRlZiBWTVMKLWNoYXIgZWRp dG9yW0NLTUFYUEFUSCArIDFdID0gImVkaXQiOwotI2Vsc2UKLWNoYXIgZWRpdG9yW0NLTUFYUEFU SCArIDFdID0geyBOVUwsIE5VTCB9OwotI2VuZGlmIC8qIFZNUyAqLwotY2hhciBlZGl0b3B0c1sx MjhdID0geyBOVUwsIE5VTCB9OwotY2hhciBlZGl0ZmlsZVtDS01BWFBBVEggKyAxXSA9IHsgTlVM LCBOVUwgfTsKLSNpZmRlZiBCUk9XU0VSCi1jaGFyIGJyb3dzZXJbQ0tNQVhQQVRIICsgMV0gPSB7 IE5VTCwgTlVMIH07Ci1jaGFyIGJyb3dzb3B0c1sxMjhdID0geyBOVUwsIE5VTCB9OwotY2hhciBi cm93c3VybFs0MDk2XSA9IHsgTlVMLCBOVUwgfTsKLSNlbmRpZiAvKiBCUk9XU0VSICovCi0jZW5k aWYgLyogIE5PRlJJTExTICovCi0jZW5kaWYgLyogTk9QVVNIICovCi0KLSNpZm5kZWYgTk9GUklM TFMKLSNpZm5kZWYgTk9SRU5BTUUKLV9QUk9UT1RZUChpbnQgc2V0cmVuYW1lLCAodm9pZCkpOwot I2VuZGlmCS8qIE5PUkVOQU1FICovCi0jZW5kaWYJLyogTk9GUklMTFMgKi8KLQotLyogVmFyaWFi bGVzICovCi0KLWludCBjbWRfcXVvdGluZyA9IDE7Ci1pbnQgY21kX2VyciA9IDE7Ci1leHRlcm4g aW50IGhpbnRzLCB4Y21kc3JjOwotCi0jaWZkZWYgQ0tfS0VSQkVST1MKLWNoYXIgKiBrNHB3cHJv bXB0ID0gTlVMTDsgICAgICAgICAgICAgICAvKiBLZXJiZXJvcyA0IHBhc3N3b3JkIHByb21wdCAq LwotY2hhciAqIGs0cHJwcm9tcHQgPSBOVUxMOyAgICAgICAgICAgICAgIC8qIEtlcmJlcm9zIDQg cHJpbmNpcGFsIHByb21wdCAqLwotY2hhciAqIGs1cHdwcm9tcHQgPSBOVUxMOyAgICAgICAgICAg ICAgIC8qIEtlcmJlcm9zIDUgcGFzc3dvcmQgcHJvbXB0ICovCi1jaGFyICogazVwcnByb21wdCA9 IE5VTEw7ICAgICAgICAgICAgICAgLyogS2VyYmVyb3MgNSBwcmluY2lwYWwgcHJvbXB0ICovCi0j ZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSNpZmRlZiBDS19TUlAKLWNoYXIgKiBzcnBwd3Byb21w dCA9IE5VTEw7Ci0jZW5kaWYgLyogQ0tfU1JQICovCi0KLWV4dGVybiBjaGFyICogY2twcm9tcHQs ICogaWtwcm9tcHQ7ICAgICAvKiBEZWZhdWx0IHByb21wdCAqLwotZXh0ZXJuIHh4X3N0cnAgeHhz dHJpbmc7Ci0KLWV4dGVybiBjaGFyICogY2Rtc2dmaWxlW10sICogY2Rtc2dzdHI7Ci0KLWV4dGVy biBpbnQKLSAgbG9jYWwsIHNlcnZlciwgc3VjY2VzcywgZGVzdCwgc2xlZXBjYW4sIGluc2VydmVy LCBmbG93LCBhdXRvZmxvdywgYmluYXJ5LAotICBwYXJpdHksIGVzY2FwZSwgd2hhdCwgdHVybiwg ZHVwbGV4LCBiYWNrZ3JkLCBod3Bhcml0eSwgc3RvcGJpdHMsIHR1cm5jaCwKLSAgbWRtdHlwLCBu ZXR3b3JrLCBxdWlldCwgbmV0dHlwZSwgY2FycmllciwgZGVic2VzLCBkZWJ0aW0sIGNkdGltbywg bmxhbmdzLAotICBiZ3NldCwgcGZsYWcsIG1zZ2ZsZywgY21kbXNrLCB4c3VzcGVuZCwgdGVjaG8s IHBhY2luZywgeGl0d2FybiwgeGl0c3RhLAotICBvdXRlc2MsIGNtZF9jb2xzLCBjbWRfcm93cywg Y2t4ZWNoLCB4YXNrbW9yZSwgaGF2ZWxpbmUsIGRpZHNldGxpbiwgaXNndWVzdCwKLSAgbWRtc2F2 LCBjbGVhcnJxLCBzYXZlYXNrLCBkZWJtc2c7Ci0KLWV4dGVybiBpbnQgcmVsaWFibGUsIHNldHJl bGlhYmxlLCBtYXRjaGRvdCwgbWF0Y2hmaWZvLCBkaXJfZG90czsKLQotI2lmbmRlZiBOT1NFUlZF UgotICBleHRlcm4gaW50IGVuX3ByaTsKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotCi0jaWZkZWYg SUtTRENPTkYKLWV4dGVybiBpbnQgaWtzZGNmOwotI2VuZGlmIC8qIElLU0RDT05GICovCi0jaWZk ZWYgVENQU09DS0VUCi0gIGV4dGVybiBpbnQgdG5fZXhpdDsKLSNlbmRpZiAvKiBUQ1BTT0NLRVQg Ki8KLSNpZmRlZiBUTkNPREUKLSAgY2hhciAqIHRuX3ByX3VpZCA9IE5VTEw7Ci0jZW5kaWYgLyog VE5DT0RFICovCi0gIGV4dGVybiBpbnQgZXhpdG9uY2xvc2U7Ci0KLSNpZm5kZWYgTk9LVkVSQlMK LWV4dGVybiBpbnQgbmt2ZXJiczsKLWV4dGVybiBzdHJ1Y3Qga2V5dGFiIGt2ZXJic1tdOwotI2Vu ZGlmIC8qIE5PS1ZFUkJTICovCi0KLWV4dGVybiBpbnQgdHRucHJvdG87ICAgICAgICAgICAgICAg ICAgICAvKiBOZXR3b3JrIHByb3RvY29sICovCi0KLWV4dGVybiBjaGFyICpjY250YWJbXTsgICAg ICAgICAgICAgICAgICAvKiBOYW1lcyBvZiBjb250cm9sIGNoYXJzICovCi0KLSNpZmRlZiBDS19B UEMKLWV4dGVybiBpbnQgYXBjYWN0aXZlLCBhcGNzdGF0dXM7Ci0jZW5kaWYgLyogQ0tfQVBDICov Ci0KLSNpZm5kZWYgTk9TQ1JJUFQKLWV4dGVybiBpbnQgc2VjaG87ICAgICAgICAgICAgICAgICAg ICAgICAvKiBXaGV0aGVyIFNDUklQVCBjbWQgc2hvdWxkIGVjaG8gKi8KLSNlbmRpZiAvKiBOT1ND UklQVCAqLwotCi0jaWZkZWYgRENNREJVRgotZXh0ZXJuIGNoYXIgKmF0bWJ1ZiwgKmF0eGJ1ZjsK LSNlbHNlCi1leHRlcm4gY2hhciBhdG1idWZbXSwgYXR4YnVmW107Ci0jZW5kaWYgLyogRENNREJV RiAqLwotZXh0ZXJuIGludCBjbWZsZ3M7Ci0KLWV4dGVybiBjaGFyIHBzYXZlW107Ci1leHRlcm4g Y2hhciB1aWRidWZbXTsKLWV4dGVybiBpbnQgIHNsX3VpZF9zYXZlZDsKLWludCBEZWxldGVTdGFy dHVwRmlsZSA9IDA7Ci0KLWV4dGVybiBpbnQgY21kbHZsOyAgICAgICAgICAgICAgICAgICAgICAv KiBPdmVyYWxsIGNvbW1hbmQgbGV2ZWwgKi8KLQotI2lmbmRlZiBOT1NQTAotX1BST1RPVFlQKCBz dGF0aWMgaW50IHBhcnNkaXIsIChpbnQpICk7Ci1jaGFyIHBybWJ1ZltQV0JVRkwrMV0gPSB7IE5V TCwgTlVMIH07Ci1pbnQgZm5kaWFncyA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRnVu Y3Rpb24gZGlhZ25vc3RpY3Mgb24vb2ZmICovCi1pbnQgZm5lcnJvciA9IDE7ICAgICAgICAgICAg ICAgICAgICAgICAgLyogRnVuY3Rpb24gZXJyb3IgdHJlYXRtZW50ICovCi0KLSNpZmRlZiBEQ01E QlVGCi1leHRlcm4gaW50ICpjb3VudCwgKnRha2VyciwgKm1lcnJvciwgKmlucGNhczsKLSNlbHNl Ci1leHRlcm4gaW50IGNvdW50W10sIHRha2VycltdLCBtZXJyb3JbXSwgaW5wY2FzW107Ci0jZW5k aWYgLyogRENNREJVRiAqLwotZXh0ZXJuIGludCBtZWNobzsgICAgICAgICAgICAgICAgICAgICAg IC8qIE1hY3JvIGVjaG8gKi8KLWV4dGVybiBsb25nIGNrX2FsYXJtOwotZXh0ZXJuIGNoYXIgYWxy bV9kYXRlW10sIGFscm1fdGltZVtdOwotI2Vsc2UKLWV4dGVybiBpbnQgdGFrZXJyW107Ci0jZW5k aWYgLyogTk9TUEwgKi8KLQotZXh0ZXJuIGludCB4X2lmbnVtOwotZXh0ZXJuIGludCBiaWdzYnNp eiwgYmlncmJzaXo7ICAgICAgICAgIC8qIFBhY2tldCBidWZmZXJzICovCi0KLWV4dGVybiBsb25n IHNwZWVkOyAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hbCBzcGVlZCAqLwotCi1leHRl cm4gY2hhciB0dG5hbWVbXTsgICAgICAgICAgICAgICAgICAgLyogQ29tbXVuaWNhdGlvbiBkZXZp Y2UgbmFtZSAqLwotZXh0ZXJuIGNoYXIgbXlob3N0W10gOwotZXh0ZXJuIGNoYXIgaW5pZGlyW107 ICAgICAgICAgICAgICAgICAgIC8qIEluaSBGaWxlIGRpcmVjdG9yeSAqLwotCi0jaWZuZGVmIE5P U0VUS0VZCi1leHRlcm4gS0VZICprZXltYXA7ICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcmFj dGVyIG1hcCBmb3IgU0VUIEtFWSAoMToxKSAgKi8KLWV4dGVybiBNQUNSTyAqbWFjcm90YWI7ICAg ICAgICAgICAgICAgICAvKiBNYWNybyBtYXAgZm9yIFNFVCBLRVkgKDE6c3RyaW5nKSAqLwotI2Vu ZGlmIC8qIE5PU0VUS0VZICovCi0jaWZkZWYgT1MyCi1pbnQgd2lkZXJlc3VsdDsgICAgICAgICAg ICAgICAgICAgICAgICAgLyogRm9yIHdpZGUgT1MvMiBzY2FuIGNvZGVzL2NtbnVtKCkgKi8KLSNl bmRpZiAvKiBPUzIgKi8KLQotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi1leHRlcm4gaW50 IHR0X3NjcnNpemVbXTsgICAgICAgICAgICAgICAgLyogU2Nyb2xsYmFjayBidWZmZXIgU2l6ZXMg Ki8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLS8qIFByaW50ZXIg c2V0dGluZ3MgKi8KLQotZXh0ZXJuIGNoYXIgKiBwcmludGVybmFtZTsgICAgICAgICAgICAgIC8q IE5VTEwgaWYgcHJpbnRlciBub3QgcmVkaXJlY3RlZCAqLwotZXh0ZXJuIGludCBwcmludHBpcGU7 Ci1leHRlcm4gaW50IG5vcHJpbnRlcjsKLSNpZmRlZiBQUklOVFNXSQotaW50IHByaW50dGltbyA9 IDA7Ci1jaGFyICogcHJpbnR0ZXJtID0gTlVMTDsKLWNoYXIgKiBwcmludHNlcCA9IE5VTEw7Ci1p bnQgcHJpbnRlcnR5cGUgPSAwOwotI2lmZGVmIEJQUklOVAotaW50IHByaW50YmlkaSA9IDA7ICAg ICAgICAgICAgICAgICAgICAgIC8qIFNFVCBCUFJJTlRFUiAoYmlkaXJlY3Rpb25hbCkgKi8KLWxv bmcgcHBvcnRzcGVlZCA9IDBMOyAgICAgICAgICAgICAgICAgICAvKiBCaWRpcmVjdGlvbiBwcmlu dGVyIHBvcnQgc3BlZWQsICovCi1pbnQgcHBvcnRwYXJpdHkgPSAwOyAgICAgICAgICAgICAgICAg ICAgLyogIHBhcml0eSwgKi8KLWludCBwcG9ydGZsb3cgPSBGTE9fS0VFUDsgICAgICAgICAgICAg ICAvKiAgYW5kIGZsb3cgY29udHJvbCAqLwotI2VuZGlmIC8qIEJQUklOVCAqLwotI2lmZGVmIE9T MgotZXh0ZXJuIGludCB0eHQycHM7ICAgICAgICAgICAgICAgICAgICAgIC8qIFRleHQyUFMgY29u dmVyc2lvbj8gKi8KLWV4dGVybiBpbnQgcHNfd2lkdGgsIHBzX2xlbmd0aDsgICAgICAgICAvKiBU ZXh0MlBTIGRpbWVuc2lvbnMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBQUklOVFNX SSAqLwotCi0jaWZkZWYgT1MyCi1leHRlcm4gaW50IHRjcF9hdmFpbDsgICAgICAgICAgICAgICAg ICAgLyogTm9uemVybyBpZiBUQ1AvSVAgaXMgYXZhaWxhYmxlICovCi0jaWZkZWYgREVDTkVUCi1l eHRlcm4gaW50IGRuZXRfYXZhaWw7ICAgICAgICAgICAgICAgICAgLyogRGl0dG8gZm9yIERFQ25l dCAqLwotI2VuZGlmIC8qIERFQ05FVCAqLwotI2lmZGVmIFNVUEVSTEFUCi1leHRlcm4gaW50IHNs YXRfYXZhaWw7Ci0jZW5kaWYgLyogU1VQRVJMQVQgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotc3Rh dGljIHN0cnVjdCBrZXl0YWIgbG9naW50YWJbXSA9IHsKLSAgICB7ICJwYXNzd29yZCIsIExPR0lf UFNXLCBDTV9JTlYgfSwKLSAgICB7ICJwcm9tcHQiLCAgIExPR0lfUFJNLCBDTV9JTlYgfSwKLSAg ICB7ICJ1c2VyaWQiLCAgIExPR0lfVUlELCAwIH0KLX07Ci0KLSNpZm5kZWYgTk9DU0VUUwotLyog c3lzdGVtLWluZGVwZW5kZW50IGNoYXJhY3RlciBzZXRzLCBkZWZpbmVkIGluIGNrY3hsYS5bY2hd ICovCi1leHRlcm4gc3RydWN0IGNzaW5mbyB0Y3NpbmZvW107Ci1leHRlcm4gc3RydWN0IGxhbmdp bmZvIGxhbmdzW107Ci0KLS8qIE90aGVyIGNoYXJhY3Rlci1zZXQgcmVsYXRlZCB2YXJpYWJsZXMg Ki8KLWV4dGVybiBpbnQgdGNoYXJzZXQsIHRzbGV2ZWwsIGxhbmd1YWdlOwotI2VuZGlmIC8qIE5P Q1NFVFMgKi8KLQotLyogRmlsZS10cmFuc2ZlciB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgKi8KLQot I2lmbmRlZiBOT1hGRVIKLSNpZmRlZiBDS19BVVRPREwKLWV4dGVybiBpbnQgY21kYWRsOwotI2Vu ZGlmIC8qIENLX0FVVE9ETCAqLwotCi0jaWZuZGVmIE5PU0VSVkVSCi1leHRlcm4gaW50IG5nZXRw YXRoOwotZXh0ZXJuIGNoYXIgKiBnZXRwYXRoW107Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLQot ZXh0ZXJuIHN0cnVjdCBja19wIHB0YWJbXTsKLQotZXh0ZXJuIENIQVIgc3N0YXRlOyAgICAgICAg ICAgICAgICAgICAgIC8qIFByb3RvY29sIHN0YXJ0IHN0YXRlICovCi1leHRlcm4gQ0hBUiBteWN0 bHE7ICAgICAgICAgICAgICAgICAgICAgLyogQ29udHJvbC1jaGFyYWN0ZXIgcHJlZml4ICovCi1l eHRlcm4gQ0hBUiBteXJwdHE7ICAgICAgICAgICAgICAgICAgICAgLyogUmVwZWF0LWNvdW50IHBy ZWZpeCAqLwotCi1leHRlcm4gaW50IHByb3RvY29sLCBzaXplLCBzcHNpeiwgc3BtYXgsIHVycHNp eiwgc3J2dGltLCBzcnZjZG1zZywgc2xvc3RhcnQsCi0gIHNydmRpcywgeGZlcm1vZGUsIGNrZGVs YXksIGtlZXAsIG1heHRyeSwgdW5rY3MsIGJjdHIsIGJjdGYsIGVicWZsZywgc3djYXByLAotICB3 c2xvdHIsIGxzY2FwciwgbHNjYXB1LCBzcHNpenIsIHJwdGVuYSwgcnB0bWluLCBkb2NyYywgeGZy Y2FuLCB4ZnJjaHIsCi0gIHhmcm51bSwgeGZyYmVsLCB4ZnJpbnQsIHNydnBpbmcsIGdfeGZlcm1v ZGUsIHhmcnhsYTsKLQotI2lmZGVmIFBJUEVTRU5ECi1leHRlcm4gaW50IHVzZXBpcGVzOwotI2Vu ZGlmIC8qIFBJUEVTRU5EICovCi0KLSNpZmRlZiBDS1hYQ0hBUiAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBET1VCTEUgLyBJR05PUkUgY2hhciB0YWJsZSAqLwotZXh0ZXJuIGludCBkYmxmbGFn LCBpZ25mbGFnLCBkYmxjaGFyOwotZXh0ZXJuIHNob3J0IGRibHRbXTsKLSNlbmRpZiAvKiBDS1hY Q0hBUiAqLwotCi0jaWZkZWYgQ0tfU1BFRUQKLWV4dGVybiBzaG9ydCBjdGxwW107ICAgICAgICAg ICAgICAgICAgICAvKiBDb250cm9sLXByZWZpeCB0YWJsZSAqLwotZXh0ZXJuIGludCBwcmVmaXhp bmc7Ci1zdGF0aWMgc3RydWN0IGtleXRhYiBwZnh0YWJbXSA9IHsKLSAgICAiYWxsIiwgICAgICAg ICBQWF9BTEwsIDAsCi0gICAgImNhdXRpb3VzIiwgICAgUFhfQ0FVLCAwLAotICAgICJtaW5pbWFs IiwgICAgIFBYX1dJTCwgMCwKLSAgICAibm9uZSIsICAgICAgICBQWF9OT04sIDAKLX07Ci0jZW5k aWYgLyogQ0tfU1BFRUQgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotLyogRGVjbGFyYXRpb25z IGZyb20gY21kIHBhY2thZ2UgKi8KLQotI2lmZGVmIERDTURCVUYKLWV4dGVybiBjaGFyICpjbWRi dWY7ICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIGJ1ZmZlciAqLwotZXh0ZXJuIGNoYXIg KmxpbmU7Ci1leHRlcm4gY2hhciAqdG1wYnVmOwotI2Vsc2UKLWV4dGVybiBjaGFyIGNtZGJ1Zltd OyAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIGJ1ZmZlciAqLwotZXh0ZXJuIGNoYXIgbGlu ZVtdOyAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJhY3RlciBidWZmZXIgZm9yIGFueXRoaW5n ICovCi1leHRlcm4gY2hhciB0bXBidWZbXTsKLSNlbmRpZiAvKiBEQ01EQlVGICovCi0KLS8qIEZy b20gbWFpbiBja3VzZXIgbW9kdWxlLi4uICovCi0KLWV4dGVybiBjaGFyICp0cCwgKmxwOyAgICAg ICAgICAgICAgICAgICAvKiBUZW1wb3JhcnkgYnVmZmVyICovCi0KLWV4dGVybiBpbnQgdGxldmVs OyAgICAgICAgICAgICAgICAgICAgICAvKiBUYWtlIENvbW1hbmQgZmlsZSBsZXZlbCAqLwotCi0j aWZuZGVmIE5PTE9DQUwKLWV4dGVybiBpbnQgc2Vzc2Z0OyAgICAgICAgICAgICAgICAgICAgICAv KiBTZXNzaW9uLWxvZyBmaWxlIHR5cGUgKi8KLWV4dGVybiBpbnQgc2xvZ3RzOyAgICAgICAgICAg ICAgICAgICAgICAvKiBTZXNzaW9uLWxvZyB0aW1lc3RhbXBzIG9uL29mZiAqLwotZXh0ZXJuIGlu dCBzbG9nbnVsOwkJCS8qIExpbmVzIG51bGwtdGVybWluYXRlZCAqLwotI2VuZGlmIC8qIE5PTE9D QUwgKi8KLQotY2hhciAqIHRlbXBkaXIgPSBOVUxMOwotCi0jaWZkZWYgVk1TCi1pbnQgdm1zX21z Z3MgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgLyogU0VUIE1FU1NBR0VTICovCi1leHRlcm4g aW50IGJhdGNoOwotI2VuZGlmIC8qIFZNUyAqLwotCi0vKiBLZXl3b3JkIHRhYmxlcyBmb3IgU0VU IGNvbW1hbmRzICovCi0KLSNpZmRlZiBDS19TUEVFRAotc3RydWN0IGtleXRhYiBjdGx0YWJbXSA9 IHsKLSAgICAicHJlZml4ZWQiLCAgIDEsIDAsICAgICAgICAgICAgICAgICAvKiBOb3RlLCB0aGUg dmFsdWVzIGFyZSBpbXBvcnRhbnQuICovCi0gICAgInVucHJlZml4ZWQiLCAwLCAwCi19OwotI2Vu ZGlmIC8qIENLX1NQRUVEICovCi0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIG9sZG5ld1tdID0gewot ICAgICJuZXciLCAwLCAwLAotICAgICJvbGQiLCAxLCAwCi19OwotCi0jZGVmaW5lIE1DSF9GSUZP IDEKLSNkZWZpbmUgTUNIX0RPVEYgMgotc3RydWN0IGtleXRhYiBtYXRjaHRhYltdID0gewotICAg IHsgImRvdGZpbGUiLCBNQ0hfRE9URiwgMCB9LAotICAgIHsgImZpZm8iLCAgICBNQ0hfRklGTywg MCB9Ci19OwotaW50IG5tYXRjaHRhYiA9IChzaXplb2YobWF0Y2h0YWIpIC8gc2l6ZW9mKHN0cnVj dCBrZXl0YWIpKTsKLQotI2lmbmRlZiBOT1NQTAotc3RhdGljIHN0cnVjdCBrZXl0YWIgZnVuY3Rh YltdID0gewotICAgICJkaWFnbm9zdGljcyIsIEZVTkNfREksIDAsCi0gICAgImVycm9yIiwgICAg ICAgRlVOQ19FUiwgMAotfTsKLXN0YXRpYyBpbnQgbmZ1bmN0YWIgPSAoc2l6ZW9mKGZ1bmN0YWIp IC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotc3RydWN0IGtleXRhYiBvdXRwdGFiW10gPSB7 ICAgICAgICAgICAgIC8qIFNFVCBPVVRQVVQgcGFyYW1ldGVycyAqLwotICAgICJwYWNpbmciLCAw LCAwLCAgICAgICAgICAgICAgICAgICAgIC8qIG9ubHkgb25lIHNvIGZhci4uLiAqLwotICAgICJz cGVjaWFsLWVzY2FwZXMiLCAxLCAwCi19OwotaW50IG5vdXRwdGFiID0gKHNpemVvZihvdXRwdGFi KSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7IC8qIEhvdyBtYW55ICovCi0jZW5kaWYgLyogTk9T UEwgKi8KLQotc3RydWN0IGtleXRhYiBjaGt0YWJbXSA9IHsgICAgICAgICAgICAgIC8qIEJsb2Nr IGNoZWNrIHR5cGVzICovCi0gICAgIjEiLCAxLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogMSA9ICA2LWJpdCBjaGVja3N1bSAqLwotICAgICIyIiwgMiwgMCwgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDIgPSAxMi1iaXQgY2hlY2tzdW0gKi8KLSAgICAiMyIsIDMsIDAsICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiAzID0gMTYtYml0IENSQyAqLwotICAgICI0IiwgNCwgMCwJ CQkJLyogU2FtZSBhcyBCICovCi0gICAgIjUiLCA1LCAwLAkJCQkvKiBTYW1lIGFzIEYgKi8KLSAg ICAiYmxhbmstZnJlZS0yIiwgNCwgQ01fSU5WLAkJLyogQiA9IDEyLWJpdCBjaGVja3N1bSwgbm8g YmxhbmtzICovCi0gICAgImZvcmNlLTMiLCA1LCBDTV9JTlYJCS8qIEYgPSBGb3JjZSBDUkMgb24g QUxMIHBhY2tldHMgKi8KLX07Ci1zdGF0aWMgaW50IG5jaGt0ID0gKHNpemVvZihjaGt0YWIpIC8g c2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotc3RydWN0IGtleXRhYiBycHR0YWJbXSA9IHsgICAg ICAgICAgICAgIC8qIFNFVCBSRVBFQVQgKi8KLSAgICAiY291bnRzIiwgICAgMCwgMCwgICAgICAg ICAgICAgICAgICAvKiBPbiBvciBPZmYgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgIm1pbmltdW0i LCAgIDEsIDAsICAgICAgICAgICAgICAgICAgLyogVGhyZXNoaG9sZCAqLwotI2VuZGlmIC8qIENP TU1FTlQgKi8KLSAgICAicHJlZml4IiwgICAgMiwgMCAgICAgICAgICAgICAgICAgICAvKiBSZXBl YXQtcHJlZml4IGNoYXJhY3RlciB2YWx1ZSAqLwotfTsKLQotI2lmbmRlZiBOT0xPQ0FMCi0vKiBG b3IgU0VUIFsgTU9ERU0gXSBDQVJSSUVSLCBhbmQgYWxzbyBmb3IgU0VUIERJQUwgQ09OTkVDVCAq LwotCi1zdHJ1Y3Qga2V5dGFiIGNycnRhYltdID0gewotICAgICJhdXRvbWF0aWMiLCBDQVJfQVVU LCAwLCAgICAgICAgICAgIC8qIDIgKi8KLSAgICAib2ZmIiwgICAgICAgQ0FSX09GRiwgMCwgICAg ICAgICAgICAvKiAwICovCi0gICAgIm9uIiwgICAgICAgIENBUl9PTiwgIDAgICAgICAgICAgICAg LyogMSAqLwotfTsKLWludCBuY3JyID0gMzsKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLXN0cnVj dCBrZXl0YWIgb29hdGFiW10gPSB7ICAgICAgICAgICAgICAvKiBPbi9PZmYvQXV0byB0YWJsZSAq LwotICAgICJhdXRvbWF0aWMiLCBTRVRfQVVUTywgMCwgICAgICAgICAgIC8qIDIgKi8KLSAgICAi b2ZmIiwgICAgICAgU0VUX09GRiwgIDAsICAgICAgICAgICAvKiAwICovCi0gICAgIm9uIiwgICAg ICAgIFNFVF9PTiwgICAwICAgICAgICAgICAgLyogMSAqLwotfTsKLQotc3RydWN0IGtleXRhYiBv b2V0YWJbXSA9IHsgICAgICAgICAgICAgIC8qIE9uL09mZi9TdGRlcnIgdGFibGUgMjAxMC8wMy8x MiAqLwotICAgICJvZmYiLCAgICAgICBTRVRfT0ZGLCAwLAkJLyogZm9yIFNFVCBERUJVRyBNRVNT QUdFUyAqLwotICAgICJvbiIsICAgICAgICBTRVRfT04sICAwLAotICAgICJzIiwgICAgICAgICAy LCAgICAgICBDTV9BQlJ8Q01fSU5WLAotICAgICJzdCIsICAgICAgICAyLCAgICAgICBDTV9BQlJ8 Q01fSU5WLAotICAgICJzdGQiLCAgICAgICAyLCAgICAgICBDTV9BQlJ8Q01fSU5WLAotICAgICJz dGRlcnIiLCAgICAyLCAgICAgICAwLAotICAgICJzdGRvdXQiLCAgICBTRVRfT04sICBDTV9JTlYK LX07Ci1zdGF0aWMgaW50IG5vb2V0YWIgPSAoc2l6ZW9mKG9vZXRhYikgLyBzaXplb2Yoc3RydWN0 IGtleXRhYikpOwotCi1zdHJ1Y3Qga2V5dGFiIG9va3RhYltdID0geyAgICAgICAgICAgICAgLyog T24vT2ZmL0FzayB0YWJsZSAqLwotICAgICJhc2siLCAgICAgICAyLCAgICAgICAgMCwgICAgICAg ICAgIC8qIDIgKi8KLSAgICAib2ZmIiwgICAgICAgU0VUX09GRiwgIDAsICAgICAgICAgICAvKiAw ICovCi0gICAgIm9uIiwgICAgICAgIFNFVF9PTiwgICAwICAgICAgICAgICAgLyogMSAqLwotfTsK LQotc3RydWN0IGtleXRhYiBxdnRhYltdID0geyAgICAgICAgICAgICAgIC8qIFF1aWV0L1ZlcmJv c2UgdGFibGUgKi8KLSAgICAicXVpZXQiLCAxLCAwLAotICAgICJ2ZXJib3NlIiwgMCwgMAotfTsK LWludCBucXZ0ID0gMjsKLQotLyogRm9yIFNFVCBERUJVRyAqLwotCi0jZGVmaW5lIERFQl9PRkYg IDAKLSNkZWZpbmUgREVCX09OICAgMQotI2RlZmluZSBERUJfU0VTICAyCi0jZGVmaW5lIERFQl9U SU0gIDMKLSNkZWZpbmUgREVCX0xFTiAgNAotI2RlZmluZSBERUJfTVNHICA1Ci0KLXN0cnVjdCBr ZXl0YWIgZGJndGFiW10gPSB7Ci0gICAgImxpbmVsZW5ndGgiLCBERUJfTEVOLCBDTV9JTlYsCi0g ICAgIm0iLCAgICAgICAgICBERUJfTVNHLCBDTV9BQlJ8Q01fSU5WLAotICAgICJtZXNzYWdlIiwg ICAgREVCX01TRywgMCwKLSAgICAibXNnIiwgICAgICAgIERFQl9NU0csIENNX0lOViwKLSAgICAi b2ZmIiwgICAgICAgIERFQl9PRkYsIDAsCi0gICAgIm9uIiwgICAgICAgICBERUJfT04sICAwLAot ICAgICJzZXNzaW9uIiwgICAgREVCX1NFUywgMCwKLSAgICAidGltZXN0YW1wcyIsIERFQl9USU0s IDAKLX07Ci1pbnQgbmRiZyA9IChzaXplb2YoZGJndGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFi KSk7Ci0KLSNpZm5kZWYgTk9MT0NBTAotLyogVHJhbnNtaXNzaW9uIHNwZWVkcyAqLwotCi0jaWZk ZWYgVFRTUERMSVNUIC8qIFNwZWVkIHRhYmxlIGNvbnN0cnVjdGVkIGF0IHJ1bnRpbWUgLiAuIC4g Ki8KLQotc3RydWN0IGtleXRhYiAqIHNwZHRhYiA9IE5VTEw7Ci1pbnQgbnNwZCA9IDA7Ci0KLSNl bHNlCi0vKgotICBOb3RlLCB0aGUgdmFsdWVzIGFyZSBlbmNvZGVkIGluIGNwcyByYXRoZXIgdGhh biBicHMgYmVjYXVzZSAxOTIwMCBhbmQgaGlnaGVyCi0gIGFyZSB0b28gYmlnIGZvciBzb21lIGlu dHMuICBBbGwgYnV0IDc1YnBzIGFyZSBtdWx0aXBsZXMgb2YgdGVuLiAgUmVzdWx0IG9mCi0gIGxv b2t1cCBpbiB0aGlzIHRhYmxlIG11c3QgYmUgbXVsdGlwbGllZCBieSAxMCB0byBnZXQgYWN0dWFs IHNwZWVkIGluIGJwcy4KLSAgSWYgdGhpcyBudW1iZXIgaXMgNzAsIGl0IG11c3QgYmUgY2hhbmdl ZCB0byA3NS4gIElmIGl0IGlzIDg4OCwgdGhpcyBtZWFucwotICA3NS8xMjAwIHNwbGl0IHNwZWVk LgotCi0gIFRoZSB2YWx1ZXMgYXJlIGdlbmVyaWMsIHJhdGhlciB0aGFuIHNwZWNpZmljIHRvIFVO SVguICBXZSBjYW4ndCB1c2UgQjc1LAotICBCMTIwMCwgQjk2MDAsIGV0YywgYmVjYXVzZSBub24t VU5JWCB2ZXJzaW9ucyBvZiBDLUtlcm1pdCB3aWxsIG5vdAotICBuZWNlc3NhcmlseSBoYXZlIHRo ZXNlIHN5bWJvbHMgZGVmaW5lZC4gIFRoZSBCUFNfeHh4IHN5bWJvbHMgYXJlCi0gIEtlcm1pdC1z cGVjaWZpYywgYW5kIGFyZSBkZWZpbmVkIGluIGNrY2RlYi5oIG9yIG9uIHRoZSBDQyBjb21tYW5k IGxpbmUuCi0KLSAgTGlrZSBhbGwgb3RoZXIga2V5dGFicywgdGhpcyBvbmUgbXVzdCBiZSBpbiAi YWxwaGFiZXRpY2FsIiBvcmRlciwKLSAgcmF0aGVyIHRoYW4gbnVtZXJpYyBvcmRlci4KLSovCi1z dHJ1Y3Qga2V5dGFiIHNwZHRhYltdID0gewotICAgICIwIiwgICAgICAwLCAgQ01fSU5WLAotICAg ICIxMTAiLCAgIDExLCAgMCwKLSNpZmRlZiBCUFNfMTE1SwotICIxMTUyMDAiLDExNTIwLCAgMCwK LSNlbmRpZiAvKiBCUFNfMTE1SyAqLwotICAiMTIwMCIsICAgMTIwLCAgMCwKLSNpZmRlZiBCUFNf MTM0Ci0gICIxMzQuNSIsICAxMzQsICAwLAotI2VuZGlmIC8qIEJQU18xMzQgKi8KLSNpZmRlZiBC UFNfMTRLCi0gICIxNDQwMCIsIDE0NDAsICAwLAotI2VuZGlmIC8qIEJQU18xNEsgKi8KLSNpZmRl ZiBCUFNfMTUwCi0gICIxNTAiLCAgICAgMTUsICAwLAotI2VuZGlmIC8qIEJQU18xNTAgKi8KLSNp ZmRlZiBCUFNfMTgwMAotICAiMTgwMCIsICAgICAxODAsICAwLAotI2VuZGlmIC8qIEJQU18xNTAg Ki8KLSNpZmRlZiBCUFNfMTlLCi0gICIxOTIwMCIsIDE5MjAsICAwLAotI2VuZGlmIC8qIEJQU18x OUsgKi8KLSNpZmRlZiBCUFNfMjAwCi0gICIyMDAiLCAgICAgMjAsICAwLAotI2VuZGlmIC8qIEJQ U18yMDAgKi8KLSNpZmRlZiBCUFNfMjMwSwotICAiMjMwNDAwIiwgMjMwNDAsIDAsCi0jZW5kaWYg LyogQlBTXzIzMEsgKi8KLSAgIjI0MDAiLCAgIDI0MCwgIDAsCi0jaWZkZWYgQlBTXzI4SwotICAi Mjg4MDAiLCAyODgwLCAgMCwKLSNlbmRpZiAvKiBCUFNfMjhLICovCi0gICIzMDAiLCAgICAgMzAs ICAwLAotI2lmZGVmIEJQU18zNjAwCi0gICIzNjAwIiwgICAzNjAsICAwLAotI2VuZGlmIC8qIEJQ U18zNjAwICovCi0jaWZkZWYgQlBTXzM4SwotICAiMzg0MDAiLCAzODQwLCAgMCwKLSNlbmRpZiAv KiBCUFNfMzhLICovCi0jaWZkZWYgQlBTXzQ2MEsKLSAgIjQ2MDgwMCIsIDQ2MDgwLCAgMCwgICAg ICAgICAgICAgICAgICAvKiBOZWVkIDMyIGJpdHMgZm9yIHRoaXMuLi4gKi8KLSNlbmRpZiAvKiBC UFNfNDYwSyAqLwotICAiNDgwMCIsICAgNDgwLCAgMCwKLSNpZmRlZiBCUFNfNTAKLSAgIjUwIiwg ICAgICAgNSwgIDAsCi0jZW5kaWYgLyogQlBTXzUwICovCi0jaWZkZWYgQlBTXzU3SwotICAiNTc2 MDAiLCA1NzYwLCAgMCwKLSNlbmRpZiAvKiBCUFNfNTdLICovCi0gICI2MDAiLCAgICAgNjAsICAw LAotI2lmZGVmIEJQU183MjAwCi0gICI3MjAwIiwgICA3MjAsICAwLAotI2VuZGlmIC8qIEJQU183 MjAwICovCi0jaWZkZWYgQlBTXzc1Ci0gICI3NSIsICAgICAgIDcsICAwLAotI2VuZGlmIC8qIEJQ U183NSAqLwotI2lmZGVmIEJQU183NTEyCi0gICI3NS8xMjAwIiw4ODgsICAwLCAgICAgICAgICAg ICAgICAgICAgLyogQ29kZSAiODg4IiBmb3Igc3BsaXQgc3BlZWQgKi8KLSNlbmRpZiAvKiBCUFNf NzUxMiAqLwotI2lmZGVmIEJQU183NksKLSAgIjc2ODAwIiwgNzY4MCwgIDAsCi0jZW5kaWYgLyog QlBTXzc2SyAqLwotI2lmZGVmIEJQU185MjFLCi0gICI5MjE2MDAiLCA5MjE2MCwwLCAgICAgICAg ICAgICAgICAgICAgLyogTmVlZCAzMiBiaXRzIGZvciB0aGlzLi4uICovCi0jZW5kaWYgLyogQlBT XzkyMUsgKi8KLSAgIjk2MDAiLCAgIDk2MCwgIDAKLX07Ci1pbnQgbnNwZCA9IChzaXplb2Yoc3Bk dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7IC8qIEhvdyBtYW55IHNwZWVkcyAqLwotI2Vu ZGlmIC8qIFRUU1BETElTVCAqLwotCi0jaWZkZWYgVE5fQ09NUE9SVAotc3RydWN0IGtleXRhYiB0 bnNwZHRhYltdID0geyAgICAgICAgICAgIC8qIFJGQyAyMjE3IFRFTE5FVCBDT01QT1JUIE9wdGlv biAqLwotICAgICIxMTUyMDAiLCAxMTUyMCwgIDAsICAgICAgICAgICAgICAgIC8qIChhZGQgYW55 IG90aGVyIGRlZmluZWQgc3BlZWRzKSAqLwotICAgICIxMjAwIiwgICAgIDEyMCwgIDAsCi0gICAg IjE0NDAwIiwgICAxNDQwLCAgMCwKLSAgICAiMTkyMDAiLCAgIDE5MjAsICAwLAotICAgICIyMzA0 MDAiLCAyMzA0MCwgIDAsCi0gICAgIjI0MDAiLCAgICAgMjQwLCAgMCwKLSAgICAiMjg4MDAiLCAg IDI4ODAsICAwLAotICAgICIzMDAiLCAgICAgICAzMCwgIDAsCi0gICAgIjM4NDAwIiwgICAzODQw LCAgMCwKLSAgICAiNDYwODAwIiwgNDYwODAsICAwLAotICAgICI0ODAwIiwgICAgIDQ4MCwgIDAs Ci0gICAgIjU3NjAwIiwgICA1NzYwLCAgMCwKLSAgICAiNjAwIiwgICAgICAgNjAsICAwLAotICAg ICI5NjAwIiwgICAgIDk2MCwgIDAKLX07Ci1pbnQgbnRuc3BkID0gKHNpemVvZih0bnNwZHRhYikg LyBzaXplb2Yoc3RydWN0IGtleXRhYikpOyAvKiBIb3cgbWFueSBzcGVlZHMgKi8KLSNlbmRpZiAv KiBUTl9DT01QT1JUICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0jaWZuZGVmIE5PQ1NFVFMK LWV4dGVybiBzdHJ1Y3Qga2V5dGFiIGxuZ3RhYltdOyAgICAgICAgICAvKiBMYW5ndWFnZXMgZm9y IFNFVCBMQU5HVUFHRSAqLwotZXh0ZXJuIGludCBubG5nOwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8K LQotI2lmbmRlZiBOT0xPQ0FMCi0vKiBEdXBsZXgga2V5d29yZCB0YWJsZSAqLwotCi1zdHJ1Y3Qg a2V5dGFiIGRweHRhYltdID0gewotICAgICJmdWxsIiwgICAgICAwLCAwLAotICAgICJoYWxmIiwg ICAgICAxLCAwCi19OwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotLyogRmxvdyBDb250cm9sICov Ci0KLXN0cnVjdCBrZXl0YWIgY3h0eXBlc3dbXSA9IHsKLSNpZmRlZiBERUNORVQKLSAgICAiL2Rl Y25ldCIsICAgICAgICAgQ1hUX0RFQ05FVCwgIDAsCi0jZW5kaWYgLyogREVDTkVUICovCi0gICAg Ii9kaXJlY3Qtc2VyaWFsIiwgIENYVF9ESVJFQ1QsICAwLAotI2lmZGVmIERFQ05FVAotICAgICIv bGF0IiwgICAgICAgICAgICBDWFRfTEFULCAgICAgMCwKLSNlbHNlCi0jaWZkZWYgU1VQRVJMQVQK LSAgICAiL2xhdCIsICAgICAgICAgICAgQ1hUX0xBVCwgICAgIDAsCi0jZW5kaWYgLyogU1VQRVJM QVQgKi8KLSNlbmRpZiAvKiBERUNORVQgKi8KLSAgICAiL21vZGVtIiwgICAgICAgICAgQ1hUX01P REVNLCAgIDAsCi0jaWZkZWYgTlBJUEUKLSAgICAiL25hbWVkLXBpcGUiLCAgICAgQ1hUX05QSVBF LCAgIDAsCi0jZW5kaWYgLyogTlBJUEUgKi8KLSNpZmRlZiBORVRCSU9TCi0gICAgIi9uZXRiaW9z IiwgICAgICAgIENYVF9ORVRCSU9TLCAwLAotI2VuZGlmIC8qIE5FVEJJT1MgKi8KLSAgICAiL3Jl bW90ZSIsICAgICAgICAgQ1hUX1JFTU9URSwgIDAsCi0jaWZkZWYgVENQU09DS0VUCi0gICAgIi90 Y3BpcCIsICAgICAgICAgIENYVF9UQ1BJUCwgICAwLAotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwot I2lmZGVmIEFOWVgyNQotICAgICIveC4yNSIsICAgICAgICAgICBDWFRfWDI1LCAgICAgMCwKLSNl bmRpZiAvKiBBTllYMjUgKi8KLSAgICAiIiwgMCwgMAotfTsKLWludCBuY3h0eXBlc3cgPSAoc2l6 ZW9mKGN4dHlwZXN3KSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLSNpZmRlZiBUTl9DT01Q T1JUCi1zdHJ1Y3Qga2V5dGFiIHRuZmxvdGFiW10gPSB7ICAgICAgICAgICAgLyogU0VUIEZMT1ct Q09OVFJPTCBrZXl3b3JkIHRhYmxlICovCi0gICAgImR0ci9jZCIsICAgIEZMT19EVFJDLCAwLCAg ICAgICAgICAgLyogZm9yIFJGQyAyMjE3IFRlbG5ldCBDT01QT1JUICovCi0gICAgImR0ci9jdHMi LCAgIEZMT19EVFJULCAwLAotICAgICJrZWVwIiwgICAgICBGTE9fS0VFUCwgMCwKLSAgICAibm9u ZSIsICAgICAgRkxPX05PTkUsIDAsCi0gICAgInJ0cy9jdHMiLCAgIEZMT19SVFNDLCAwLAotICAg ICJ4b24veG9mZiIsICBGTE9fWE9OWCwgMAotfTsKLWludCBudG5mbG8gPSAoc2l6ZW9mKHRuZmxv dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0jZW5kaWYgLyogVE5fQ09NUE9SVCAqLwot Ci1zdHJ1Y3Qga2V5dGFiIGZsb3RhYltdID0geyAgICAgICAgICAgICAgLyogU0VUIEZMT1ctQ09O VFJPTCBrZXl3b3JkIHRhYmxlICovCi0gICAgImF1dG9tYXRpYyIsIEZMT19BVVRPLCBDTV9JTlYs ICAgICAgLyogTm90IG5lZWRlZCBhbnkgbW9yZSAqLwotI2lmZGVmIENLX0RUUkNECi0gICAgImR0 ci9jZCIsICAgIEZMT19EVFJDLCAwLAotI2VuZGlmIC8qIENLX0RUUkNEICovCi0jaWZkZWYgQ0tf RFRSQ1RTCi0gICAgImR0ci9jdHMiLCAgIEZMT19EVFJULCAwLAotI2VuZGlmIC8qIENLX0RUUkNU UyAqLwotICAgICJrZWVwIiwgICAgICBGTE9fS0VFUCwgMCwKLSAgICAibm9uZSIsICAgICAgRkxP X05PTkUsIDAsCi0jaWZkZWYgQ0tfUlRTQ1RTCi0gICAgInJ0cy9jdHMiLCAgIEZMT19SVFNDLCAw LAotI2VuZGlmIC8qIENLX1JUU0NUUyAqLwotI2lmbmRlZiBQbGFuOQotICAgICJ4b24veG9mZiIs ICBGTE9fWE9OWCwgMCwKLSNlbmRpZiAvKiBQbGFuOSAqLwotICAgICIiLCAwLCAwCi19OwotaW50 IG5mbG8gPSAoc2l6ZW9mKGZsb3RhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLQot LyogIEhhbmRzaGFrZSBjaGFyYWN0ZXJzICAqLwotCi1zdHJ1Y3Qga2V5dGFiIGhzaHRhYltdID0g ewotICAgICJiZWxsIiwgMDA3LCAwLAotICAgICJjb2RlIiwgOTk4LCAwLAotICAgICJjciIsICAg MDE1LCAwLAotICAgICJlc2MiLCAgMDMzLCAwLAotICAgICJsZiIsICAgMDEyLCAwLAotICAgICJu b25lIiwgOTk5LCAwLCAgICAgICAgICAgICAgICAgICAgIC8qIChjYW4ndCB1c2UgbmVnYXRpdmUg bnVtYmVycykgKi8KLSAgICAieG9mZiIsIDAyMywgMCwKLSAgICAieG9uIiwgIDAyMSwgMAotfTsK LWludCBuaHNoID0gKHNpemVvZihoc2h0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQot I2lmbmRlZiBOT0xPQ0FMCi1zdGF0aWMgc3RydWN0IGtleXRhYiBzZnR0YWJbXSA9IHsgICAgICAg LyogRmlsZSB0eXBlcyBmb3IgU0VUIFNFU1NJT04tTE9HICovCi0gICAgImFzY2lpIiwgICAgIFhZ RlRfVCwgQ01fSU5WLAotICAgICJiaW5hcnkiLCAgICBYWUZUX0IsIDAsCi0gICAgImRlYnVnIiwg ICAgIFhZRlRfRCwgMCwKLSAgICAibnVsbC1wYWRkZWQtbGluZXMiLCA5OTgsIDAsCi0gICAgInRl eHQiLCAgICAgIFhZRlRfVCwgMCwKLSAgICAidGltZXN0YW1wZWQtdGV4dCIsIDk5OSwgMAotfTsK LXN0YXRpYyBpbnQgbnNmdHRhYiA9IChzaXplb2Yoc2Z0dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5 dGFiKSk7Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0jaWZuZGVmIE5PRElBTAotCi0jaWZkZWYg TkVUQ09OTiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmV0d29ya3MgZGlyZWN0b3J5IGRl cGVuZHMgKi8KLWludCBubmV0ZGlyID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBvbiBE SUFMIGNvZGUgLS0gZml4IGxhdGVyLi4uICovCi1jaGFyICpuZXRkaXJbTUFYRERJUisyXTsKLSNl bmRpZiAvKiBORVRDT05OICovCi0KLV9QUk9UT1RZUCggc3RhdGljIGludCBzZXRkaWFsLCAoaW50 KSApOwotX1BST1RPVFlQKCBzdGF0aWMgaW50IHNldGRjZCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAo IHN0YXRpYyBpbnQgY2tsb2dpbiwgKHZvaWQpICk7Ci0KLSNpZm5kZWYgTUlOSURJQUwKLSNpZmRl ZiBPTERUQkNPREUKLWV4dGVybiBpbnQgdGJtb2RlbDsgICAgICAgICAgICAgICAgICAgICAvKiBU ZWxlYml0IG1vZGVsIElEICovCi0jZW5kaWYgLyogT0xEVEJDT0RFICovCi0jZW5kaWYgLyogTUlO SURJQUwgKi8KLQotZXh0ZXJuIE1ETUlORiAqbW9kZW1wW107ICAgICAgICAgICAgICAgIC8qIFBv aW50ZXJzIHRvIG1vZGVtIGluZm8gc3RydWN0cyAqLwotZXh0ZXJuIHN0cnVjdCBrZXl0YWIgbWRt dGFiW107ICAgICAgICAgIC8qIE1vZGVtIHR5cGVzIChpbiBtb2R1bGUgY2t1ZGlhLmMpICovCi1l eHRlcm4gaW50IG5tZG07ICAgICAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIHRoZW0g Ki8KLQotX1BST1RPVFlQKHN0YXRpYyBpbnQgZGlhbHN0ciwoY2hhciAqKiwgY2hhciAqKSk7Ci0K LWV4dGVybiBpbnQgZGlhbGhuZywgZGlhbHRtbywgZGlhbGtzcCwgZGlhbGRweSwgZGlhbG1odSwg ZGlhbGVjLCBkaWFsZGM7Ci1leHRlcm4gaW50IGRpYWxydHIsIGRpYWxpbnQsIGRpYWx1ZHQsIGRp YWxzcnQsIGRpYWxyc3RyLCBtZG13YWl0ZDsKLWV4dGVybiBpbnQgbWRtc3BkLCBkaWFsZmMsIGRp YWxtdGgsIGRpYWxlc2MsIGRpYWxmbGQsIGRpYWxpZHQsIGRpYWxwYWNlOwotZXh0ZXJuIGludCBt ZG1zcGssIG1kbXZvbCwgZGlhbHRlc3Q7Ci0KLWludCBkaWFsY3Z0ID0gMjsgICAgICAgICAgICAg ICAgICAgICAgICAvKiBESUFMIENPTlZFUlQtRElSRUNUT1JZICovCi1pbnQgZGlhbGNuZiA9IDA7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBDT05GSVJNQVRJT04gKi8KLWludCBkaWFs Y29uID0gMjsgICAgICAgICAgICAgICAgICAgICAgICAvKiBESUFMIENPTk5FQ1QgKi8KLWludCBk aWFsY3EgID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBESUFMIENPTk5FQ1QgQVVUTyBx dWlldC92ZXJib3NlICovCi1leHRlcm4gbG9uZyBkaWFsbWF4LCBkaWFsY2FwYXM7Ci1pbnQgdXNl cm1kbSA9IDA7Ci1leHRlcm4gaW50IG5kaWFsZGlyOwotZXh0ZXJuIGNoYXIgKmRpYWxpbmksICAg KmRpYWxtc3RyLCAqZGlhbG1wcm10LCAqZGlhbGRpcltdLCAqZGlhbGNtZCwgICpkaWFsbnByLAot ICpkaWFsZGNvbiwgKmRpYWxkY29mZiwgKmRpYWxlY29uLCAqZGlhbGVjb2ZmLCAqZGlhbGhjbWQs ICAqZGlhbHgzLAotICpkaWFsaHdmYywgKmRpYWxzd2ZjLCAgKmRpYWxub2ZjLCAqZGlhbHRvbmUs ICAqZGlhbHB1bHNlLCAqZGlhbG5hbWUsICpkaWFsbGFjOwotZXh0ZXJuIGNoYXIgKmRpYWxsY2Ms ICAgKmRpYWxpeHAsICAqZGlhbGl4cywgICAqZGlhbGxkcCwgICAqZGlhbGxkcywgICpkaWFsdGZw LAotICpkaWFscHhpLCAgKmRpYWxweG8sICAgKmRpYWxzZngsICAqZGlhbGFhb24sICAqZGlhbGFh b2ZmOwotZXh0ZXJuIGNoYXIgKmRpYWxsY3AsICAgKmRpYWxsY3MsICAqZGlhbGluaTIsICAqZGlh bG1hYzsKLWV4dGVybiBjaGFyICpkaWFsc3BvZmYsICpkaWFsc3BvbiwgKmRpYWx2b2wxLCAgKmRp YWx2b2wyLCAgKmRpYWx2b2wzOwotCi1jaGFyICpkaWFsdG9jY1tNQVhUUENDXSA9IHsgTlVMTCwg TlVMTCB9OwotaW50IG5kaWFsdG9jYyA9IDA7Ci1jaGFyICpkaWFscHVjY1tNQVhUUENDXSA9IHsg TlVMTCwgTlVMTCB9OwotaW50IG5kaWFscHVjYyA9IDA7Ci0KLWNoYXIgKmRpYWx0ZmNbTUFYVE9M TEZSRUVdID0gewotICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEws IE5VTEwKLX07Ci1pbnQgbnRvbGxmcmVlID0gMDsKLQotY2hhciAqZGlhbHB4eFtNQVhQQlhFWENI XSA9IHsKLSAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM Ci19OwotaW50IG5kaWFscHh4ID0gMDsKLQotY2hhciAqZGlhbGxjYWNbTUFYTE9DQUxBQ10gPSB7 Ci0gICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKLSAg ICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAotICAgIE5V TEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCi0gICAgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAotfTsKLWludCBubG9jYWxh YyA9IDA7Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGRyc3RydGFiW10gPSB7Ci0gICAgImludGVy bmF0aW9uYWwiLCA1LCAwLAotICAgICJsb2NhbCIsICAgICAgICAgMiwgMCwKLSAgICAibG9uZy1k aXN0YW5jZSIsIDQsIDAsCi0gICAgIm5vbmUiLCAgICAgICAgICA2LCAwCi19OwotCi1zdGF0aWMg c3RydWN0IGtleXRhYiBkY252dGFiW10gPSB7Ci0gICAgImFzayIsICAyLCAwLAotICAgICJvZmYi LCAgMCwgMCwKLSAgICAib24iLCAgIDEsIDAKLX07Ci0KLXN0cnVjdCBrZXl0YWIgc2V0bWRtW10g PSB7Ci0gICAgImNhcGFiaWxpdGllcyIsICAgICBYWURDQVAsICAwLAotICAgICJjYXJyaWVyLXdh dGNoIiwgICAgWFlETUNELCAgMCwKLSAgICAiY29tbWFuZCIsICAgICAgICAgIFhZRFNUUiwgIDAs Ci0gICAgImNvbXByZXNzaW9uIiwgICAgICBYWUREQywgICBDTV9JTlYsCi0gICAgImRhdGEtY29t cHJlc3Npb24iLCBYWUREQywgICAwLAotICAgICJkaWFsLWNvbW1hbmQiLCAgICAgWFlERElBLCAg MCwKLSAgICAiZXJyb3ItY29ycmVjdGlvbiIsIFhZREVDLCAgIDAsCi0gICAgImVzY2FwZS1jaGFy YWN0ZXIiLCBYWURFU0MsICAwLAotICAgICJmbG93LWNvbnRyb2wiLCAgICAgWFlERkMsICAgMCwK LSAgICAiaGFuZ3VwLW1ldGhvZCIsICAgIFhZRE1IVSwgIDAsCi0jaWZuZGVmIE5PWEZFUgotICAg ICJrZXJtaXQtc3Bvb2YiLCAgICAgWFlES1NQLCAgMCwKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSAg ICAibWF4aW11bS1zcGVlZCIsICAgIFhZRE1BWCwgIDAsCi0gICAgIm5hbWUiLCAgICAgICAgICAg ICBYWUROQU0sICAwLAotICAgICJzcGVha2VyIiwgICAgICAgICAgWFlEU1BLLCAgMCwKLSAgICAi c3BlZWQtbWF0Y2hpbmciLCAgIFhZRFNQRCwgIDAsCi0gICAgInR5cGUiLCAgICAgICAgICAgICBY WURUWVAsICAwLAotICAgICJ2b2x1bWUiLCAgICAgICAgICAgWFlEVk9MLCAgMAotfTsKLWludCBu c2V0bWRtID0gKHNpemVvZihzZXRtZG0pIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotc3Ry dWN0IGtleXRhYiB2b2x0YWJbXSA9IHsKLSAgICAiaGlnaCIsICAgMywgIDAsCi0gICAgImxvdyIs ICAgIDEsICAwLAotICAgICJtZWRpdW0iLCAyLCAgMAotfTsKLQotc3RydWN0IGtleXRhYiBtZG1j YXBbXSA9IHsKLSAgICAiYXQtY29tbWFuZHMiLCAgICAgIENLRF9BVCwgIDAsCi0gICAgImNvbXBy ZXNzaW9uIiwgICAgICBDS0RfREMsICAwLAotICAgICJkYyIsICAgICAgICAgICAgICAgQ0tEX0RD LCAgQ01fSU5WLAotICAgICJlYyIsICAgICAgICAgICAgICAgQ0tEX0VDLCAgQ01fSU5WLAotICAg ICJlcnJvci1jb3JyZWN0aW9uIiwgQ0tEX0VDLCAgMCwKLSAgICAiaGFyZHdhcmUtZmxvdyIsICAg IENLRF9IVywgIDAsCi0gICAgImh3ZmMiLCAgICAgICAgICAgICBDS0RfSFcsICBDTV9JTlYsCi0g ICAgIml0dSIsICAgICAgICAgICAgICBDS0RfVjI1LCBDTV9JTlYsCi0gICAgImtlcm1pdC1zcG9v ZiIsICAgICBDS0RfS1MsICAwLAotICAgICJrcyIsICAgICAgICAgICAgICAgQ0tEX0tTLCAgQ01f SU5WLAotICAgICJzYiIsICAgICAgICAgICAgICAgQ0tEX1NCLCAgQ01fSU5WLAotICAgICJzb2Z0 d2FyZS1mbG93IiwgICAgQ0tEX1NXLCAgMCwKLSAgICAic3BlZWQtYnVmZmVyaW5nIiwgIENLRF9T QiwgIDAsCi0gICAgInN3ZmMiLCAgICAgICAgICAgICBDS0RfU1csICBDTV9JTlYsCi0gICAgInRi IiwgICAgICAgICAgICAgICBDS0RfVEIsICBDTV9JTlYsCi0gICAgInRlbGViaXQiLCAgICAgICAg ICBDS0RfVEIsICAwLAotICAgICJ2MjViaXMtY29tbWFuZHMiLCAgQ0tEX1YyNSwgMAotfTsKLWlu dCBubWRtY2FwID0gKHNpemVvZihtZG1jYXApIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQot I2lmZGVmIENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBBTlNXRVIgbm90 IGltcGxlbWVudGVkIHlldCAqLwotc3RhdGljIHN0cnVjdCBrZXl0YWIgYW5zd2VydGFiW10gPSB7 Ci0gICAgeyAiY2FsbGVyLWlkIiwgIFhZQV9DSUQsICAwIH07Ci0gICAgeyAicmluZ3MiLCAgICAg IFhZQV9STkcsICAwIH07Ci0gICAgeyAiIiwgMCwgMCB9Ci19Owotc3RhdGljIGludCBuYW5zd2Vy dGFiID0gIChzaXplb2YoYW5zd2VydGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwot I2VuZGlmIC8qIENPTU1FTlQgKi8KLQotc3RydWN0IGtleXRhYiBkaWFsdGFiW10gPSB7ICAgICAg ICAgICAgIC8qIFNFVCBESUFMIHRhYmxlICovCi0gICAgImFyZWEtY29kZSIsICAgICAgICBYWURM QUMsIDAsICAgICAgLyogQWxzbyBzdGlsbCBpbmNsdWRlcyBpdGVtcyAgICAgKi8KLSAgICAiY29t cHJlc3Npb24iLCAgICAgIFhZRERDLCAgQ01fSU5WLCAvKiB0aGF0IHdlcmUgbW92ZWQgdG8gU0VU IE1PREVNLCAqLwotICAgICJjb25maXJtYXRpb24iLCAgICAgWFlEQ05GLCAwLCAgICAgIC8qIGJ1 dCB0aGV5IGFyZSBDTV9JTlZpc2libGUuLi4gICovCi0gICAgImNvbm5lY3QiLCAgICAgICAgICBY WURDT04sIDAsCi0gICAgImNvbnZlcnQtZGlyZWN0b3J5IixYWURDVlQsIDAsCi0gICAgImNvdW50 cnktY29kZSIsICAgICBYWURMQ0MsIDAsCi0gICAgImRpYWwtY29tbWFuZCIsICAgICBYWURESUEs IENNX0lOViwKLSAgICAiZGlyZWN0b3J5IiwgICAgICAgIFhZRERJUiwgMCwKLSAgICAiZGlzcGxh eSIsICAgICAgICAgIFhZRERQWSwgMCwKLSAgICAiZXNjYXBlLWNoYXJhY3RlciIsIFhZREVTQywg Q01fSU5WLAotICAgICJlcnJvci1jb3JyZWN0aW9uIiwgWFlERUMsICBDTV9JTlYsCi0gICAgImZs b3ctY29udHJvbCIsICAgICBYWURGQywgIENNX0lOViwKLSAgICAiZm9yY2UtbG9uZy1kaXN0YW5j ZSIsIFhZREZMRCwgMCwKLSAgICAiaGFuZ3VwIiwgICAgICAgICAgIFhZREhVUCwgMCwKLSAgICAi aWdub3JlLWRpYWx0b25lIiwgIFhZRElEVCwgMCwKLSAgICAiaW50ZXJ2YWwiLCAgICAgICAgIFhZ RElOVCwgMCwKLSAgICAiaW4iLCAgICAgICAgICAgICAgIFhZRElOSSwgQ01fSU5WfENNX0FCUiwK LSAgICAiaW5pdC1zdHJpbmciLCAgICAgIFhZRElOSSwgQ01fSU5WLAotICAgICJpbnRsLXByZWZp eCIsICAgICAgWFlESVhQLCAwLAotICAgICJpbnRsLXN1ZmZpeCIsICAgICAgWFlESVhTLCAwLAot I2lmbmRlZiBOT1hGRVIKLSAgICAia2VybWl0LXNwb29mIiwgICAgIFhZREtTUCwgQ01fSU5WLAot I2VuZGlmIC8qIE5PWEZFUiAqLwotICAgICJsYy1hcmVhLWNvZGVzIiwgICAgWFlETExBQywgMCwK LSAgICAibGMtcHJlZml4IiwgICAgICAgIFhZRExDUCwgMCwKLSAgICAibGMtc3VmZml4IiwgICAg ICAgIFhZRExDUywgMCwKLSAgICAibGQtcHJlZml4IiwgICAgICAgIFhZRExEUCwgMCwKLSAgICAi bGQtc3VmZml4IiwgICAgICAgIFhZRExEUywgMCwKLSAgICAibG9jYWwtYXJlYS1jb2RlIiwgIFhZ RExBQywgQ01fSU5WLAotICAgICJsb2NhbC1wcmVmaXgiLCAgICAgWFlETENQLCBDTV9JTlYsCi0g ICAgImxvY2FsLXN1ZmZpeCIsICAgICBYWURMQ1MsIENNX0lOViwKLSAgICAibSIsICAgICAgICAg ICAgICAgIFhZRE1USCwgQ01fSU5WfENNX0FCUiwKLSNpZm5kZWYgTk9TUEwKLSAgICAibWFjcm8i LCAgICAgICAgICAgIFhZRE1BQywgMCwgICAgICAvKiAxOTUgKi8KLSNlbmRpZiAvKiBOT1NQTCAq LwotI2lmZGVmIE1ETUhVUAotICAgICJtZSIsICAgICAgICAgICAgICAgWFlETVRILCBDTV9JTlZ8 Q01fQUJSLAotI2VuZGlmIC8qIE1ETUhVUCAqLwotICAgICJtZXRob2QiLCAgICAgICAgICAgWFlE TVRILCAwLAotICAgICJtbnAtZW5hYmxlIiwgICAgICAgWFlETU5QLCBDTV9JTlYsIC8qIG9ic29s ZXRlIGJ1dCBzdGlsbCBhY2NlcHRlZCAqLwotI2lmZGVmIE1ETUhVUAotICAgICJtb2RlbS1oYW5n dXAiLCAgICAgWFlETUhVLCBDTV9JTlYsCi0jZW5kaWYgLyogTURNSFVQICovCi0gICAgInBhY2lu ZyIsICAgICAgICAgICBYWURQQUMsICAwLAotICAgICJwYngtZXhjaGFuZ2UiLCAgICAgWFlEUFhY LCAgMCwKLSAgICAicGJ4LWluc2lkZS1wcmVmaXgiLFhZRFBYSSwgIDAsCi0gICAgInBieC1vdXRz aWRlLXByZWZpeCIsWFlEUFhPLCAwLAotICAgICJwcmVmaXgiLCAgICAgICAgICAgWFlETlBSLCAg MCwKLSAgICAicHVsc2UtY291bnRyaWVzIiwgIFhZRFBVQ0MsIDAsCi0gICAgInJlc3RyaWN0Iiwg ICAgICAgICBYWURSU1RSLCAwLAotICAgICJyZXRyaWVzIiwgICAgICAgICAgWFlEUlRNLCAgMCwK LSAgICAic29ydCIsICAgICAgICAgICAgIFhZRFNSVCwgIDAsCi0gICAgInNwZWVkLW1hdGNoaW5n IiwgICBYWURTUEQsICBDTV9JTlYsCi0gICAgInN0cmluZyIsICAgICAgICAgICBYWURTVFIsICBD TV9JTlYsCi0gICAgInN1ZmZpeCIsICAgICAgICAgICBYWURTRlgsICAwLAotICAgICJ0ZXN0Iiwg ICAgICAgICAgICAgWFlEVEVTVCwgMCwKLSAgICAidGltZW91dCIsICAgICAgICAgIFhZRFRNTywg IDAsCi0gICAgInRmLWFyZWEtY29kZSIsICAgICBYWURURkMsICBDTV9JTlYsCi0gICAgInRmLXBy ZWZpeCIsICAgICAgICBYWURURlAsICBDTV9JTlYsCi0gICAgInRvbGwtZnJlZS1hcmVhLWNvZGUi LFhZRFRGQywwLAotICAgICJ0b2xsLWZyZWUtcHJlZml4IiwgWFlEVEZQLCAgMCwKLSAgICAidG9u ZS1jb3VudHJpZXMiLCAgIFhZRFRPQ0MsIDAKLX07Ci1pbnQgbmRpYWwgPSAoc2l6ZW9mKGRpYWx0 YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotI2lmZGVmIE1ETUhVUAotc3RydWN0IGtl eXRhYiBtZG1oYW5nW10gPSB7Ci0gICAgImR0ciIsICAgICAgICAgICAwLCAwLAotICAgICJtb2Rl bS1jb21tYW5kIiwgMSwgMCwKLSAgICAicnMyMzItc2lnbmFsIiwgIDAsIDAsCi0gICAgInYyNC1z aWduYWwiLCAgICAwLCBDTV9JTlYKLX07Ci0jZW5kaWYgLyogTURNSFVQICovCi0KLXN0YXRpYyBz dHJ1Y3Qga2V5dGFiIG1kbWNtZFtdID0gewotICAgICJhdXRvYW5zd2VyIiwgICAgICAgWFlEU19B TiwgMCwgICAgIC8qIGF1dG9hbnN3ZXIgKi8KLSAgICAiY29tcHJlc3Npb24iLCAgICAgIFhZRFNf REMsIDAsICAgICAvKiBkYXRhIGNvbXByZXNzaW9uICovCi0gICAgImRpYWwtbW9kZS1wcm9tcHQi LCBYWURTX01QLCAwLCAgICAgLyogZGlhbCBtb2RlIHByb21wdCAqLwotICAgICJkaWFsLW1vZGUt c3RyaW5nIiwgWFlEU19NUywgMCwgICAgIC8qIGRpYWwgbW9kZSBzdHJpbmcgKi8KLSAgICAiZXJy b3ItY29ycmVjdGlvbiIsIFhZRFNfRUMsIDAsICAgICAvKiBlcnJvciBjb3JyZWN0aW9uICovCi0g ICAgImhhbmd1cC1jb21tYW5kIiwgICBYWURTX0hVLCAwLCAgICAgLyogaGFuZ3VwIGNvbW1hbmQg Ki8KLSAgICAiaGFyZHdhcmUtZmxvdyIsICAgIFhZRFNfSFcsIDAsICAgICAvKiBod2ZjICovCi0g ICAgImlnbm9yZS1kaWFsdG9uZSIsICBYWURTX0lELCAwLCAgICAgLyogaWdub3JlIGRpYWx0b25l ICovCi0gICAgImluaXQtc3RyaW5nIiwgICAgICBYWURTX0lOLCAwLCAgICAgLyogaW5pdCBzdHJp bmcgKi8KLSAgICAibm8tZmxvdy1jb250cm9sIiwgIFhZRFNfTkYsIDAsICAgICAvKiBubyBmbG93 IGNvbnRyb2wgKi8KLSAgICAicHJlZGlhbC1pbml0IiwgICAgIFhZRFNfSTIsIDAsICAgICAvKiBs YXN0LW1pbnV0ZSBzZXR1cCBjb21tYW5kcyAqLwotICAgICJwdWxzZSIsICAgICAgICAgICAgWFlE U19EUCwgMCwgICAgIC8qIHB1bHNlICovCi0gICAgInNvZnR3YXJlLWZsb3ciLCAgICBYWURTX1NX LCAwLCAgICAgLyogc3dmYyAqLwotICAgICJzcGVha2VyIiwgICAgICAgICAgWFlEU19TUCwgMCwg ICAgIC8qIFNwZWFrZXIgKi8KLSAgICAidG9uZSIsICAgICAgICAgICAgIFhZRFNfRFQsIDAsICAg ICAvKiB0b25lICovCi0gICAgInZvbHVtZSIsICAgICAgICAgICBYWURTX1ZPLCAwICAgICAgLyog Vm9sdW1lICovCi19Owotc3RhdGljIGludCBubWRtY21kID0gKHNpemVvZihtZG1jbWQpIC8gc2l6 ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotc3RydWN0IGtleXRhYiBkaWFsX2ZjW10gPSB7Ci0gICAg ImF1dG8iLCAgICAgRkxPX0FVVE8sIDAsCi0gICAgIm5vbmUiLCAgICAgRkxPX05PTkUsIDAsCi0g ICAgInJ0cy9jdHMiLCAgRkxPX1JUU0MsIDAsCi0gICAgInhvbi94b2ZmIiwgRkxPX1hPTlgsIDAK LX07Ci0KLXN0cnVjdCBrZXl0YWIgZGlhbF9tW10gPSB7ICAgICAgICAgICAgICAvKiBESUFMIE1F VEhPRCAqLwotICAgICJhdXRvIiwgICAgWFlETV9BLCAwLAotICAgICJkZWZhdWx0IiwgWFlETV9E LCAwLAotICAgICJwdWxzZSIsICAgWFlETV9QLCAwLAotICAgICJ0b25lIiwgICAgWFlETV9ULCAw Ci19OwotaW50IG5kaWFsX20gPSAoc2l6ZW9mKGRpYWxfbSkvc2l6ZW9mKHN0cnVjdCBrZXl0YWIp KTsKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLQotI2lmZGVmIENLX1RBUEkKLXN0cnVjdCBrZXl0YWIg dGFwaXRhYltdID0geyAgICAgICAgICAgICAvKiBUb3AtTGV2ZWwgTWljcm9zb2Z0IFRBUEkgKi8K LSAgICAiY29uZmlndXJlLWxpbmUiLCAgICAgWFlUQVBJX0NGRywgIDAsCi0gICAgImRpYWxpbmct cHJvcGVydGllcyIsIFhZVEFQSV9ESUFMLCAwCi19OwotaW50IG50YXBpdGFiID0gKHNpemVvZih0 YXBpdGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi1zdHJ1Y3Qga2V5dGFiIHNldHRhcGl0 YWJbXSA9IHsgICAgICAgICAgLyogU0VUIE1pY3Jvc29mdCBUQVBJICovCi0gICAgImluYWN0aXZp dHktdGltZW91dCIsIFhZVEFQSV9JTkEsICAwLAotICAgICJsaW5lIiwgICAgICAgICAgICAgICBY WVRBUElfTElOLCAgMCwKLSAgICAibG9jYXRpb24iLCAgICAgICAgICAgWFlUQVBJX0xPQywgIDAs Ci0gICAgIm1hbnVhbC1kaWFsaW5nIiwgICAgIFhZVEFQSV9NQU4sICAwLAotICAgICJtb2RlbS1k aWFsaW5nIiwgICAgICBYWVRBUElfUEFTUywgMCwKLSAgICAibW9kZW0tbGlnaHRzIiwgICAgICAg WFlUQVBJX0xHSFQsIDAsCi0gICAgInBob25lLW51bWJlci1jb252ZXJzaW9ucyIsICAgWFlUQVBJ X0NPTiwgIDAsCi0gICAgInBvcnQiLCAgICAgICAgICAgICAgIFhZVEFQSV9MSU4sICBDTV9JTlYs Ci0gICAgInBvc3QtZGlhbC10ZXJtaW5hbCIsIFhZVEFQSV9QU1QsICAwLAotICAgICJwcmUtZGlh bC10ZXJtaW5hbCIsICBYWVRBUElfUFJFLCAgMCwKLSAgICAidXNlLXdpbmRvd3MtY29uZmlndXJh dGlvbiIsIFhZVEFQSV9VU0UsIDAsCi0gICAgIndhaXQtZm9yLWNyZWRpdC1jYXJkLXRvbmUiLCBY WVRBUElfQk5HLCAwCi19OwotaW50IG5zZXR0YXBpdGFiID0gKHNpemVvZihzZXR0YXBpdGFiKS9z aXplb2Yoc3RydWN0IGtleXRhYikpOwotCi1zdHJ1Y3Qga2V5dGFiICogdGFwaWxvY3RhYiA9IE5V TEw7ICAgICAgLyogTWljcm9zb2Z0IFRBUEkgTG9jYXRpb25zICovCi1pbnQgbnRhcGlsb2MgPSAw OwotZXh0ZXJuIHN0cnVjdCBrZXl0YWIgKiB0YXBpbGluZXRhYjsgICAgIC8qIE1pY3Jvc29mdCBU QVBJIExpbmUgRGV2aWNlcyAqLwotZXh0ZXJuIGludCBudGFwaWxpbmU7Ci1leHRlcm4gaW50IHR0 dGFwaTsgICAgICAgICAgICAgICAgICAgICAgLyogVEFQSSBpbiB1c2UgKi8KLWV4dGVybiBpbnQg dGFwaXBhc3M7ICAgICAgICAgICAgICAgICAgICAvKiBUQVBJIFBhc3N0aHJvdWdoIG1vZGUgKi8K LWV4dGVybiBpbnQgdGFwaWNvbnY7ICAgICAgICAgICAgICAgICAgICAvKiBUQVBJIENvbnZlcnNp b24gbW9kZSAqLwotZXh0ZXJuIGludCB0YXBpbGlnaHRzOwotZXh0ZXJuIGludCB0YXBpcHJldGVy bTsKLWV4dGVybiBpbnQgdGFwaXBvc3R0ZXJtOwotZXh0ZXJuIGludCB0YXBpbWFudWFsOwotZXh0 ZXJuIGludCB0YXBpaW5hY3Rpdml0eTsKLWV4dGVybiBpbnQgdGFwaWJvbmc7Ci1leHRlcm4gaW50 IHRhcGl1c2VjZmc7Ci0jZW5kaWYgLyogQ0tfVEFQSSAqLwotCi0jaWZuZGVmIE5PUFVTSAotZXh0 ZXJuIGludCBub3B1c2g7Ci1leHRlcm4gaW50IHdpbGRlbmE7Ci0jaWZkZWYgVU5JWAotc3RydWN0 IGtleXRhYiB3aWxkdGFiW10gPSB7ICAgICAgICAgICAgIC8qIFNFVCBXSUxEQ0FSRC1FWFBBTlNJ T04gKi8KLSNpZmRlZiBVTklYCi0gICAgImtlcm1pdCIsICBXSUxEX0tFUiwgMCwJCS8qIEJ5IEtl cm1pdCAqLwotI2VuZGlmCS8qIFVOSVggKi8KLSAgICAib2ZmIiwgICAgIFdJTERfT0ZGLCAwLAkJ LyogRGlzYWJsZWQgKi8KLSAgICAib24iLCAgICAgIFdJTERfT04sICAwLAkJLyogRW5hYmxlZCAq LwotI2lmZGVmIFVOSVgKLSAgICAic2hlbGwiLCAgIFdJTERfU0hFLCAwLAkJLyogQnkgU2hlbGwg Ki8KLSNlbmRpZgkvKiBVTklYICovCi0gICAgIiIsIDAsIDAKLX07Ci1pbnQgbndpbGQgPSAoc2l6 ZW9mKHdpbGR0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLXN0cnVjdCBrZXl0 YWIgd2RvdHRhYltdID0geyAgICAgICAgICAgICAvKiBjb250J2QgKi8KLSAgICAiL21hdGNoLWRv dC1maWxlcyIsICAgIDEsIDAsCi0gICAgIi9uby1tYXRjaC1kb3QtZmlsZXMiLCAwLCAwCi19Owot ZXh0ZXJuIGludCB3aWxkeHBhbmQ7Ci0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIE5PUFVT SCAqLwotCi0jaWZkZWYgTkVUQ09OTgotZXh0ZXJuIHN0cnVjdCBrZXl0YWIgbmV0Y21kW10sIG5l dGtleVtdOwotZXh0ZXJuIGludCBubmV0cywgbm5ldGtleTsKLSNpZmRlZiBUQ1BTT0NLRVQKLWV4 dGVybiBzdHJ1Y3Qga2V5dGFiIHRjcG9wdFtdOwotZXh0ZXJuIGludCBudGNwb3B0OwotI2VuZGlm IC8qIFRDUFNPQ0tFVCAqLwotI2lmZGVmIE5QSVBFCi1jaGFyIHBpcGVuYW1lW1BJUEVOQU1MKzFd ID0geyBOVUwsIE5VTCB9OwotI2VuZGlmIC8qIE5QSVBFICovCi0jaWZkZWYgQ0tfTkVUQklPUwot ZXh0ZXJuIHVuc2lnbmVkIGNoYXIgTmV0Qmlvc05hbWVbXTsKLSNlbmRpZiAvKiBDS19ORVRCSU9T ICovCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotCi0jaWZkZWYgQU5ZWDI1Ci1zdHJ1Y3Qga2V5dGFi IHgyNXRhYltdID0gewotICAgICJjYWxsLXVzZXItZGF0YSIsICAgIFhZVURBVCwgMCwKLSAgICAi Y2xvc2VkLXVzZXItZ3JvdXAiLCBYWUNMT1MsIDAsCi0gICAgInJldmVyc2UtY2hhcmdlIiwgICAg WFlSRVZDLCAwCi19OwotaW50IG54MjUgPSAoc2l6ZW9mKHgyNXRhYikgLyBzaXplb2Yoc3RydWN0 IGtleXRhYikpOwotCi0jaWZuZGVmIElCTVgyNQotc3RydWN0IGtleXRhYiBwYWR4M3RhYltdID0g ewotICAgICJicmVhay1hY3Rpb24iLCAgICAgICAgIFBBRF9CUkVBS19BQ1RJT04sICAgICAgICAg ICAwLAotICAgICJicmVhay1jaGFyYWN0ZXIiLCAgICAgIFBBRF9CUkVBS19DSEFSQUNURVIsICAg ICAgICAwLAotICAgICJjaGFyYWN0ZXItZGVsZXRlIiwgICAgIFBBRF9DSEFSX0RFTEVURV9DSEFS LCAgICAgICAwLAotICAgICJjci1wYWRkaW5nIiwgICAgICAgICAgIFBBRF9QQURESU5HX0FGVEVS X0NSLCAgICAgICAwLAotICAgICJkaXNjYXJkLW91dHB1dCIsICAgICAgIFBBRF9TVVBQUkVTU0lP Tl9PRl9EQVRBLCAgICAwLAotICAgICJlY2hvIiwgICAgICAgICAgICAgICAgIFBBRF9FQ0hPLCAg ICAgICAgICAgICAgICAgICAwLAotICAgICJlZGl0aW5nIiwgICAgICAgICAgICAgIFBBRF9FRElU SU5HLCAgICAgICAgICAgICAgICAwLAotICAgICJlc2NhcGUiLCAgICAgICAgICAgICAgIFBBRF9F U0NBUEUsICAgICAgICAgICAgICAgICAwLAotICAgICJmb3J3YXJkIiwgICAgICAgICAgICAgIFBB RF9EQVRBX0ZPUldBUkRfQ0hBUiwgICAgICAwLAotICAgICJsZi1wYWRkaW5nIiwgICAgICAgICAg IFBBRF9QQURESU5HX0FGVEVSX0xGLCAgICAgICAwLAotICAgICJsZi1pbnNlcnQiLCAgICAgICAg ICAgIFBBRF9MRl9BRlRFUl9DUiwgICAgICAgICAgICAwLAotICAgICJsaW5lLWRlbGV0ZSIsICAg ICAgICAgIFBBRF9CVUZGRVJfREVMRVRFX0NIQVIsICAgICAwLAotICAgICJsaW5lLWRpc3BsYXki LCAgICAgICAgIFBBRF9CVUZGRVJfRElTUExBWV9DSEFSLCAgICAwLAotICAgICJsaW5lLWZvbGQi LCAgICAgICAgICAgIFBBRF9MSU5FX0ZPTERJTkcsICAgICAgICAgICAwLAotICAgICJwYWQtZmxv dy1jb250cm9sIiwgICAgIFBBRF9GTE9XX0NPTlRST0xfQllfUEFELCAgICAwLAotICAgICJzZXJ2 aWNlLXNpZ25hbHMiLCAgICAgIFBBRF9TVVBQUkVTU0lPTl9PRl9TSUdOQUxTLCAwLAotICAgICJ0 aW1lb3V0IiwgICAgICAgICAgICAgIFBBRF9EQVRBX0ZPUldBUkRfVElNRU9VVCwgICAwLAotLyog U3BlZWQgaXMgcmVhZC1vbmx5ICovCi0gICAgInRyYW5zbWlzc2lvbi1yYXRlIiwgICAgUEFEX0xJ TkVfU1BFRUQsICAgICAgICAgICAgIDAsCi0gICAgInVzZXItZmxvdy1jb250cm9sIiwgICAgUEFE X0ZMT1dfQ09OVFJPTF9CWV9VU0VSLCAgIDAKLX07Ci1pbnQgbnBhZHgzID0gKHNpemVvZihwYWR4 M3RhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotI2VuZGlmIC8qIElCTVgyNSAqLwotI2Vu ZGlmIC8qIEFOWVgyNSAqLwotCi0jaWZkZWYgVExPRwotc3RhdGljIHN0cnVjdCBrZXl0YWIgdmJ0 YWJbXSA9IHsKLSAgICAiYnJpZWYiLCAgIDAsIDAsCi0jaWZkZWYgT1MyT1JVTklYCi0gICAgImZ0 cCIsICAgICAyLCAwLAotI2Vsc2UKLSNpZmRlZiBWTVMKLSAgICAiZnRwIiwgICAgIDIsIDAsCi0j ZW5kaWYgLyogZGVmIFZNUyAqLwotI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwotICAgICJ2ZXJib3Nl IiwgMSwgMAotfTsKLWludCBudmIgPSAoc2l6ZW9mKHZidGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5 dGFiKSk7Ci0jZW5kaWYgLyogVExPRyAqLwotCi0jaWZkZWYgQ0tTWVNMT0cKLXN0YXRpYyBzdHJ1 Y3Qga2V5dGFiIHN5c2xvZ3RhYltdID0gewotICAgICJhbGwiLCAgICAgICAgIFNZU0xHX0NYLCAw LAotICAgICJjb21tYW5kcyIsICAgIFNZU0xHX0NNLCAwLAotICAgICJjb25uZWN0aW9uIiwgIFNZ U0xHX0FDLCAwLAotICAgICJkZWJ1ZyIsICAgICAgIFNZU0xHX0RCLCAwLAotICAgICJkaWFsIiwg ICAgICAgIFNZU0xHX0RJLCAwLAotICAgICJmaWxlLWFjY2VzcyIsIFNZU0xHX0ZBLCAwLAotICAg ICJmaWxlLWNyZWF0ZSIsIFNZU0xHX0ZDLCAwLAotICAgICJsb2dpbiIsICAgICAgIFNZU0xHX0xJ LCAwLAotICAgICJub25lIiwgICAgICAgIFNZU0xHX05PLCAwLAotICAgICJwcm90b2NvbCIsICAg IFNZU0xHX1BSLCAwCi19OwotaW50IG5zeXNsb2cgPSAoc2l6ZW9mKHN5c2xvZ3RhYikgLyBzaXpl b2Yoc3RydWN0IGtleXRhYikpOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0KLS8qIFBhcml0eSBr ZXl3b3JkIHRhYmxlICovCi0KLXN0cnVjdCBrZXl0YWIgcGFydGJsW10gPSB7Ci0gICAgImV2ZW4i LCAgICAnZScsIDAsCi0jaWZkZWYgSFdQQVJJVFkKLSAgICAiaGFyZHdhcmUiLCdIJywgMCwKLSNl bmRpZiAvKiBIV1BBUklUWSAqLwotICAgICJtYXJrIiwgICAgJ20nLCAwLAotICAgICJub25lIiwg ICAgIDAgLCAwLAotICAgICJvZGQiLCAgICAgJ28nLCAwLAotICAgICJzcGFjZSIsICAgJ3MnLCAw Ci19OwotaW50IG5wYXIgPSAoc2l6ZW9mKHBhcnRibCkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikp OwotCi0jaWZkZWYgSFdQQVJJVFkKLXN0cnVjdCBrZXl0YWIgaHdwYXJ0YmxbXSA9IHsKLS8qIEFk ZCBtYXJrIGFuZCBzcGFjZSBpZiBuZWVkZWQgYW5kIHBvc3NpYmxlICovCi0gICAgImV2ZW4iLCAg ICAnZScsIDAsCi0jaWZkZWYgT1MyCi0gICAgIm1hcmsiLCAgICAnbScsIDAsCi0jZW5kaWYgLyog T1MyICovCi0gICAgIm9kZCIsICAgICAnbycsIDAsCi0jaWZkZWYgT1MyCi0gICAgInNwYWNlIiwg ICAncycsIDAsCi0jZW5kaWYgLyogT1MyICovCi0gICAgIiIsIDAsIDAKLX07Ci1pbnQgbmh3cGFy ID0gKHNpemVvZihod3BhcnRibCkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLSNlbmRp ZiAvKiBIV1BBUklUWSAqLwotCi0vKiBPbi9PZmYgdGFibGUgKi8KLQotc3RydWN0IGtleXRhYiBv bm9mZltdID0gewotICAgICJvZmYiLCAgICAgICAwLCAwLAotICAgICJvbiIsICAgICAgICAxLCAw Ci19OwotCi0jZGVmaW5lIFhZQ0RfTSAgICAwCQkJLyogQ0QgTUVTU0FHRSAqLwotI2RlZmluZSBY WUNEX1AgICAgMQkJCS8qIENEIFBBVEggKi8KLSNkZWZpbmUgWFlDRF9IICAgIDIJCQkvKiBDRCBI T01FICovCi0KLXN0cnVjdCBrZXl0YWIgY2R0YWJbXSA9IHsKLSAgICAiaG9tZSIsICAgICAgWFlD RF9ILCAwLAotICAgICJtZXNzYWdlIiwgICBYWUNEX00sIDAsCi0gICAgInBhdGgiLCAgICAgIFhZ Q0RfUCwgMAotfTsKLWludCBuY2R0YWIgPSAoc2l6ZW9mKGNkdGFiKSAvIHNpemVvZihzdHJ1Y3Qg a2V5dGFiKSk7Ci0KLXN0cnVjdCBrZXl0YWIgY2Rtc2dbXSA9IHsKLSAgICAiZmlsZSIsICAgICAg MiwgMCwKLSAgICAib2ZmIiwgICAgICAgMCwgMCwKLSAgICAib24iLCAgICAgICAgMSwgMAotfTsK LWludCBuY2Rtc2cgPSAoc2l6ZW9mKGNkbXNnKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0K LXN0YXRpYwotc3RydWN0IGtleXRhYiB4aXR0YWJbXSA9IHsgICAgICAgICAgICAgIC8qIFNFVCBF WElUICovCi0gICAgImhhbmd1cCIsICAgICAgICAzLCAwLCAgICAgICAgICAgICAgLyogLi4uSEFO R1VQICovCi0gICAgIm9uLWRpc2Nvbm5lY3QiLCAyLCAwLCAgICAgICAgICAgICAgLyogLi4uT04t RElTQ09OTkVDVCAqLwotICAgICJzdGF0dXMiLCAgICAgICAgMCwgMCwgICAgICAgICAgICAgIC8q IC4uLlNUQVRVUyAqLwotICAgICJ3YXJuaW5nIiwgICAgICAgMSwgMCAgICAgICAgICAgICAgIC8q IC4uLldBUk5JTkcgKi8KLX07Ci1pbnQgbmV4aXQgPSAoc2l6ZW9mKHhpdHRhYikgLyBzaXplb2Yo c3RydWN0IGtleXRhYikpOwotCi1zdHJ1Y3Qga2V5dGFiIHhpdHd0YWJbXSA9IHsgICAgICAgICAg ICAgLyogU0VUIEVYSVQgV0FSTklORyAqLwotICAgICJhbHdheXMiLCAyLCAwLCAgICAgICAgICAg ICAgICAgICAgIC8qIGV2ZW4gd2hlbiBub3QgY29ubmVjdGVkICovCi0gICAgIm9mZiIsICAgIDAs IDAsICAgICAgICAgICAgICAgICAgICAgLyogbm8gd2FybmluZyAgICAgKi8KLSAgICAib24iLCAg ICAgMSwgMCAgICAgICAgICAgICAgICAgICAgICAvKiB3aGVuIGNvbm5lY3RlZCAqLwotfTsKLWlu dCBuZXhpdHcgPSAoc2l6ZW9mKHhpdHd0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQot c3RydWN0IGtleXRhYiBybHRhYltdID0gewotICAgICJsb2NhbCIsICAgICAxLCAwLCAgICAgICAg ICAgICAgICAgIC8qIEVDSE8gdmFsdWVzICovCi0gICAgIm9mZiIsICAgICAgIDAsIENNX0lOViwK LSAgICAib24iLCAgICAgICAgMSwgQ01fSU5WLAotICAgICJyZW1vdGUiLCAgICAwLCAwCi19Owot aW50IG5ybHQgPSAoc2l6ZW9mKHJsdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLS8q IEluY29tcGxldGUgRmlsZSBEaXNwb3NpdGlvbiB0YWJsZSAqLwotCi1zdHJ1Y3Qga2V5dGFiIGlm ZHRhYltdID0gewotICAgICJkaXNjYXJkIiwgU0VUX09GRiwgMCwKLSAgICAia2VlcCIsICAgIFNF VF9PTiwgIDAKLX07Ci0KLXN0cnVjdCBrZXl0YWIgaWZkYXRhYltdID0gewotICAgICJhdXRvIiwg ICAgU0VUX0FVVE8sIDAsCi0gICAgImRpc2NhcmQiLCBTRVRfT0ZGLCAgMCwKLSAgICAia2VlcCIs ICAgIFNFVF9PTiwgICAwCi19OwotCi1jaGFyICogaWZkbmFtW10gPSB7ICJkaXNjYXJkIiwgImtl ZXAiLCAiYXV0byIgfTsKLQotLyogU0VUIFRBS0UgcGFyYW1ldGVycyB0YWJsZSAqLwotc3RhdGlj Ci1zdHJ1Y3Qga2V5dGFiIHRha3RhYltdID0gewotICAgICJlY2hvIiwgIDAsIDAsCi0gICAgImVy cm9yIiwgMSwgMCwKLSAgICAib2ZmIiwgICAyLCBDTV9JTlYsICAgICAgICAgICAgICAgICAvKiBG b3IgY29tcGF0aWJpbGl0eSAqLwotICAgICJvbiIsICAgIDMsIENNX0lOViAgICAgICAgICAgICAg ICAgIC8qIHdpdGggTVMtRE9TIEtlcm1pdC4uLiAqLwotfTsKLQotI2lmbmRlZiBOT1NQTAotI2lm ZGVmIENPTU1FTlQKLS8qIG5vdCB1c2VkICovCi1zdGF0aWMKLXN0cnVjdCBrZXl0YWIgc3VmdGFi W10gPSB7ICAgICAgICAgICAgICAvKiAod2hhdCB0byBkbyB3aXRoKSBTVEFSVFVQLUZJTEUgKi8K LSAgICAiZGVsZXRlIiwgMSwgMCwKLSAgICAia2VlcCIsICAgMCwgMAotfTsKLSNlbmRpZiAvKiBD T01NRU5UICovCi0KLS8qIFNFVCBNQUNSTyBwYXJhbWV0ZXJzIHRhYmxlICovCi1zdGF0aWMKLXN0 cnVjdCBrZXl0YWIgc21hY3RhYltdID0gewotICAgICJlY2hvIiwgIDAsIDAsCi0gICAgImVycm9y IiwgMSwgMAotfTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVmIE5PU0NSSVBUCi1zdGF0 aWMKLXN0cnVjdCBrZXl0YWIgc2NydGFiW10gPSB7Ci0gICAgImVjaG8iLCAgMCwgMAotfTsKLSNl bmRpZiAvKiBOT1NDUklQVCAqLwotCi0vKiBTRVQgQ09NTUFORCB0YWJsZSAqLwotCi0vKiBTRVQg Q09NTUFORCBpdGVtcy4uLiAqLwotCi0jZGVmaW5lIFNDTURfQlNaIDAJLyogQllURVNJWkUgKi8K LSNkZWZpbmUgU0NNRF9SQ0wgMQkvKiBSRUNBTEwgKi8KLSNkZWZpbmUgU0NNRF9SVFIgMgkvKiBS RVRSWSAqLwotI2RlZmluZSBTQ01EX1FVTyAzCS8qIFFVT1RJTkcgKi8KLSNkZWZpbmUgU0NNRF9D T0wgNAkvKiBDT0xPUiAqLwotI2RlZmluZSBTQ01EX0hJRyA1CS8qIEhFSUdIVCAqLwotI2RlZmlu ZSBTQ01EX1dJRCA2CS8qIFdJRFRIICovCi0jZGVmaW5lIFNDTURfQ1VSIDcJLyogQ1VSU09SLVBP U0lUSU9OICovCi0jZGVmaW5lIFNDTURfU0NSIDgJLyogU0NST0xMQkFDSyAqLwotI2RlZmluZSBT Q01EX01PUiA5CS8qIE1PUkUtUFJPTVBUSU5HICovCi0jZGVmaW5lIFNDTURfSU5UIDEwICAgICAv KiBJTlRFUlJVUFRJT04gKi8KLSNkZWZpbmUgU0NNRF9BREwgMTEgICAgIC8qIEFVVE9ET1dOTE9B RCAqLwotI2RlZmluZSBTQ01EX1NUQSAxMiAgICAgLyogU1RBVFVTTElORSAqLwotI2RlZmluZSBT Q01EX0RCUSAxMwkvKiBET1VCTEVRVU9USU5HICovCi0jZGVmaW5lIFNDTURfQ0JSIDE0CS8qIENC UkVBSyAqLwotI2RlZmluZSBTQ01EX0JGTCAxNQkvKiBCVUZGRVItU0laRSAobm90IHVzZWQpICov Ci0jZGVmaW5lIFNDTURfRVJSIDE2CS8qIEVSUk9SICovCi0jZGVmaW5lIFNDTURfVkFSIDE3CS8q IFZBUklBQkxFLUVWQUxVQVRJT04gKi8KLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgc2NtZHRhYltd ID0gewotI2lmZGVmIENLX0FVVE9ETAotICAgICJhdXRvZG93bmxvYWQiLCAgICAgICBTQ01EX0FE TCwgMCwKLSNlbmRpZiAvKiBDS19BVVRPREwgKi8KLSNpZmRlZiBDT01NRU5UCi0vKgotICBUbyBp bXBsZW1lbnQgdGhpcyByZXF1aXJlcyB0aGF0IHdlIGNoYW5nZSBDTURCTCBhbmQgQVRNQkwKLSAg ZnJvbSBjb21waWxlLXRpbWUgc3ltYm9scyB0byBydW50aW1lIHZhcmlhYmxlcy4gIE5vdCBhIGJp ZyBkZWFsLAotICBidXQgbm90IHRyaXZpYWwgZWl0aGVyLgotICovCi0gICAgImJ1ZmZlci1zaXpl IiwgICAgICAgIFNDTURfQkZMLCAwLAotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAiYnl0ZXNp emUiLCAgICAgICAgICAgU0NNRF9CU1osIDAsCi0gICAgImNicmVhayIsICAgICAgICAgICAgIFND TURfQ0JSLCBDTV9JTlYsCi0jaWZkZWYgT1MyCi0gICAgImNvbG9yIiwgICAgICAgICAgICAgIFND TURfQ09MLCAwLAotICAgICJjdXJzb3ItcG9zaXRpb24iLCAgICBTQ01EX0NVUiwgMCwKLSNlbmRp ZiAvKiBPUzIgKi8KLSNpZmRlZiBET1VCTEVRVU9USU5HCi0gICAgImRvdWJsZXF1b3RpbmciLCAg ICAgIFNDTURfREJRLCAwLAotI2VuZGlmIC8qIERPVUJMRVFVT1RJTkcgKi8KLSAgICAiZXJyb3It ZGlzcGxheSIsICAgICAgU0NNRF9FUlIsIDAsCi0gICAgImhlaWdodCIsICAgICAgICAgICAgIFND TURfSElHLCAwLAotICAgICJpbnRlcnJ1cHRpb24iLCAgICAgICBTQ01EX0lOVCwgMCwKLSAgICAi bW9yZS1wcm9tcHRpbmciLCAgICAgU0NNRF9NT1IsIDAsCi0gICAgInF1b3RpbmciLCAgICAgICAg ICAgIFNDTURfUVVPLCAwLAotI2lmZGVmIENLX1JFQ0FMTAotICAgICJyZWNhbGwtYnVmZmVyLXNp emUiLCBTQ01EX1JDTCwgMCwKLSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLSNpZmRlZiBDS19SRUNB TEwKLSAgICAicmV0cnkiLCAgICAgICAgICAgICAgU0NNRF9SVFIsIDAsCi0jZW5kaWYgLyogQ0tf UkVDQUxMICovCi0jaWZkZWYgT1MyCi0jaWZkZWYgT05FVEVSTVVQRAotICAgICJzY3JvbGxiYWNr IiwgICAgICAgICBTQ01EX1NDUiwgMCwKLSAgICAic3RhdHVzbGluZSIsICAgICAgICAgU0NNRF9T VEEsIDAsCi0jZW5kaWYgLyogT05FVEVSTVVQRCAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgICJ2 YXJpYWJsZS1ldmFsdWF0aW9uIiwgU0NNRF9WQVIsMCwKLSAgICAid2lkdGgiLCAgICAgICAgICAg ICAgU0NNRF9XSUQsIDAKLX07Ci1zdGF0aWMgaW50IG5ieXR0ID0gKHNpemVvZihzY21kdGFiKSAv IHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLSNpZm5kZWYgTk9TRVJWRVIKLS8qIFNlcnZlciBw YXJhbWV0ZXJzIHRhYmxlICovCi1zdGF0aWMgc3RydWN0IGtleXRhYiBzcnZ0YWJbXSA9IHsKLSAg ICAiY2QtbWVzc2FnZSIsICAgWFlTRVJDLCAwLAotICAgICJkaXNwbGF5IiwgICAgICBYWVNFUkQs IDAsCi0gICAgImdldC1wYXRoIiwgICAgIFhZU0VSUCwgMCwKLSAgICAiaWRsZS10aW1lb3V0Iiwg WFlTRVJJLCAwLAotICAgICJrZWVwYWxpdmUiLCAgICBYWVNFUkssIDAsCi0gICAgImxvZ2luIiwg ICAgICAgIFhZU0VSTCwgMCwKLSAgICAidGltZW91dCIsICAgICAgWFlTRVJULCAwCi19Owotc3Rh dGljIGludCBuc3J2dCA9IChzaXplb2Yoc3J2dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7 Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgc2xlZXB0YWJb XSA9IHsgICAgIC8qIFNFVCBTTEVFUCB0YWJsZSAqLwotICAgICJjYW5jZWxsYXRpb24iLCAgMCwg ICAwCi19OwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiB0c3RhYltdID0geyAgICAgICAgLyogU0VU IFRSQU5TRkVSL1hGRVIgdGFibGUgKi8KLSAgICAiYmVsbCIsICAgICAgICAgICAgWFlYX0JFTCwg MCwKLSNpZmRlZiBYRlJDQU4KLSAgICAiY2FuY2VsbGF0aW9uIiwgICAgWFlYX0NBTiwgMCwKLSNl bmRpZiAvKiBYRlJDQU4gKi8KLSNpZm5kZWYgTk9DU0VUUwotICAgICJjaGFyYWN0ZXItc2V0Iiwg ICBYWVhfQ1NFLCAwLAotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICAi Y3JjLWNhbGN1bGF0aW9uIiwgWFlYX0NSQywgMCwKLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgICJk aXNwbGF5IiwgICAgICAgICBYWVhfRElTLCAwLAotICAgICJpbnRlcnJ1cHRpb24iLCAgICBYWVhf SU5ULCAwLAotICAgICJsb2NraW5nLXNoaWZ0IiwgICBYWVhfTFNILCAwLAotICAgICJtZXNzYWdl IiwgICAgICAgICBYWVhfTVNHLCAwLAotICAgICJtb2RlIiwgICAgICAgICAgICBYWVhfTU9ELCAw LAotICAgICJtc2ciLCAgICAgICAgICAgICBYWVhfTVNHLCBDTV9JTlYsCi0jaWZkZWYgUElQRVNF TkQKLSAgICAicGlwZXMiLCAgICAgICAgICAgWFlYX1BJUCwgMCwKLSNlbmRpZiAvKiBQSVBFU0VO RCAqLwotI2lmZGVmIENLX1hZWgotICAgICJwcm90b2NvbCIsICAgICAgICBYWVhfUFJPLCAwLAot I2VuZGlmIC8qIENLX1hZWiAqLwotICAgICJyZXBvcnQiLCAgICAgICAgICBYWVhfUlBULCAwLAot ICAgICJzbG93LXN0YXJ0IiwgICAgICBYWVhfU0xPLCAwLAotI2lmbmRlZiBOT0NTRVRTCi0gICAg InRyYW5zbGF0aW9uIiwgICAgIFhZWF9YTEEsIDAsCi0jZWxzZQotICAgICJ0cmFuc2xhdGlvbiIs ICAgICBYWVhfWExBLCBDTV9JTlYsCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotICAgICJ4bGF0aW9u IiwgICAgICAgICBYWVhfWExBLCBDTV9JTlYsCi0gICAgIiIsIDAsIDAKLX07Ci1zdGF0aWMgaW50 IG50cyA9IChzaXplb2YodHN0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLXN0 YXRpYyBzdHJ1Y3Qga2V5dGFiIHJ0c3RhYltdID0geyAgICAgICAvKiBSRU1PVEUgU0VUIFRSQU5T RkVSL1hGRVIgdGFibGUgKi8KLSNpZm5kZWYgTk9DU0VUUwotICAgICJjaGFyYWN0ZXItc2V0Iiwg ICBYWVhfQ1NFLCAwLAotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSAgICAibW9kZSIsICAgICAgICAg ICAgWFlYX01PRCwgMAotfTsKLXN0YXRpYyBpbnQgbnJ0cyA9IChzaXplb2YocnRzdGFiKSAvIHNp emVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLXN0cnVjdCBrZXl0YWIgeGZybXRhYltdID0geyAgICAg ICAgICAgICAvKiBUUkFOU0ZFUiBNT0RFIHRhYmxlICovCi0gICAgImF1dG9tYXRpYyIsIFhNT0RF X0EsIDAsCi0gICAgIm1hbnVhbCIsICAgIFhNT0RFX00sIDAKLX07Ci0KLSNpZmRlZiBMT0NVUwot ZXh0ZXJuIGludCBsb2N1cywgYXV0b2xvY3VzOwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBsb2N1 c3RhYltdID0gewotI2lmZGVmIEtVSQotICAgIHsgImFzayIsICAgICAzLCAwIH0sCQkvKiBQcmVz ZW50bHkgaW1wbGVtZW50ZWQgaW4gR1VJIG9ubHkgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICB7 ICJhdXRvIiwgICAgMiwgMCB9LAotICAgIHsgImxvY2FsIiwgICAxLCAwIH0sCi0gICAgeyAicmVt b3RlIiwgIDAsIDAgfQotfTsKLXN0YXRpYyBpbnQgbmxvY3VzdGFiID0gKHNpemVvZihsb2N1c3Rh YikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi0jZW5kaWYgLyogTE9DVVMgKi8KLQotI2lm bmRlZiBOT0NTRVRTCi0vKiBTRVQgVFJBTlNGRVIgQ0hBUkFDVEVSLVNFVCB0YWJsZSAqLwotCi1l eHRlcm4gc3RydWN0IGtleXRhYiB0Y3N0YWJbXTsKLWV4dGVybiBpbnQgbnRjczsKLSNlbmRpZiAv KiBOT0NTRVRTICovCi0KLS8qIFNFVCBUUkFOU0ZFUiBMT0NLSU5HLVNISUZUIHRhYmxlICovCi1z dHJ1Y3Qga2V5dGFiIGxzdGFiW10gPSB7Ci0gICAgImZvcmNlZCIsIDIsICAgMCwKLSAgICAib2Zm IiwgICAgMCwgICAwLAotICAgICJvbiIsICAgICAxLCAgIDAKLX07Ci1pbnQgbmxzID0gKHNpemVv Zihsc3RhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi0vKiBTRVQgVEVMTkVUIHRhYmxl cyAqLwotI2lmZGVmIFROQ09ERQotZXh0ZXJuIGludCB0bl9ubG0sIHRuX2JfbmxtLCB0bl9iX21l dSwgdG5fYl91bWUsIHRuX2JfeGZlciwgdG5fc2JfYnVnOwotZXh0ZXJuIGludCB0bl9ub19lbmNy eXB0X3hmZXIsIHRuX2F1dGhfa3JiNV9kZXNfYnVnOwotZXh0ZXJuIGludCB0bl93YWl0X2ZsZywg dG5fZHVwbGV4LCB0bl9kZWxheV9zYiwgdG5fc2Z1OwotZXh0ZXJuIGludCBzbF90bl9zYXZlZDsK LWV4dGVybiBpbnQgdG5faW5maW5pdGU7Ci1leHRlcm4gaW50IHRuX3JlbV9lY2hvOwotZXh0ZXJu IGludCB0bl9kZWI7Ci1leHRlcm4gaW50IHRuX2F1dGhfaG93OwotZXh0ZXJuIGludCB0bl9hdXRo X2VuYzsKLSNpZmRlZiBDS19GT1JXQVJEX1gKLWV4dGVybiBjaGFyICogdG5fZndkeF94YXV0aG9y aXR5OwotI2VuZGlmIC8qIENLX0ZPUldBUkRfWCAqLwotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9O Ci1zdGF0aWMgc3RydWN0IGtleXRhYiBzZXRhdXRoW10gPSB7Ci0jaWZkZWYgQ0tfS0VSQkVST1MK LSAgICAiazQiLCAgICAgICAgQVVUSF9LUkI0LCBDTV9JTlYsCi0gICAgIms1IiwgICAgICAgIEFV VEhfS1JCNSwgQ01fSU5WLAotICAgICJrZXJiZXJvczQiLCBBVVRIX0tSQjQsIDAsCi0gICAgImtl cmJlcm9zNSIsIEFVVEhfS1JCNSwgMCwKLSAgICAia2VyYmVyb3NfaXYiLEFVVEhfS1JCNCwgQ01f SU5WLAotICAgICJrZXJiZXJvc192IiwgQVVUSF9LUkI1LCBDTV9JTlYsCi0gICAgImtyYjQiLCAg ICAgIEFVVEhfS1JCNCwgQ01fSU5WLAotICAgICJrcmI1IiwgICAgICBBVVRIX0tSQjUsIENNX0lO ViwKLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotI2lmZGVmIENLX1NSUAotICAgICJzcnAiLCAg ICAgICBBVVRIX1NSUCwgIDAsCi0jZW5kaWYgLyogQ0tfU1JQICovCi0jaWZkZWYgQ0tfU1NMCi0g ICAgInNzbCIsICAgICAgQVVUSF9TU0wsICAgMCwKLSAgICAidGxzIiwgICAgICBBVVRIX1RMUywg ICAwLAotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICIiLCAgICAgICAgIDAsICAgICAgMAotfTsK LXN0YXRpYyBpbnQgbnNldGF1dGggPSBzaXplb2Yoc2V0YXV0aCkvc2l6ZW9mKHN0cnVjdCBrZXl0 YWIpIC0gMTsKLSNpZmRlZiBDS19LRVJCRVJPUwotZXh0ZXJuIGNoYXIgKiBrcmI1X2RfcHJpbmNp cGFsOyAgICAgICAgIC8qIERlZmF1bHQgcHJpbmNpcGFsICovCi1leHRlcm4gY2hhciAqIGtyYjVf ZF9pbnN0YW5jZTsKLWV4dGVybiBjaGFyICoga3JiNV9kX3JlYWxtOyAgICAgICAgICAgICAvKiBE ZWZhdWx0IHJlYWxtICovCi1leHRlcm4gY2hhciAqIGtyYjVfZF9jYzsgICAgICAgICAgICAgICAg LyogRGVmYXVsdCBjcmVkZW50aWFscyBjYWNoZSAqLwotZXh0ZXJuIGNoYXIgKiBrcmI1X2Rfc3J2 OyAgICAgICAgICAgICAgIC8qIERlZmF1bHQgc2VydmljZSBuYW1lICovCi1leHRlcm4gaW50ICAg IGtyYjVfZF9saWZldGltZTsgICAgICAgICAgLyogRGVmYXVsdCBsaWZldGltZSAqLwotZXh0ZXJu IGludCAgICBrcmI1X2RfZm9yd2FyZGFibGU7Ci1leHRlcm4gaW50ICAgIGtyYjVfZF9wcm94aWFi bGU7Ci1leHRlcm4gaW50ICAgIGtyYjVfZF9yZW5ld2FibGU7Ci1leHRlcm4gaW50ICAgIGtyYjVf YXV0b2dldDsKLWV4dGVybiBpbnQgICAga3JiNV9hdXRvZGVsOwotZXh0ZXJuIGludCAgICBrcmI1 X2RfZ2V0azQ7Ci1leHRlcm4gaW50ICAgIGtyYjVfY2hlY2thZGRyczsgICAgICAgICAgLyogQ2hl Y2sgVEdUIEFkZHJzICovCi1leHRlcm4gaW50ICAgIGtyYjVfZF9ub19hZGRyZXNzZXM7Ci1leHRl cm4gY2hhciAqIGtyYjVfZF9hZGRyc1tdOwotZXh0ZXJuIGNoYXIgKiBrNV9rZXl0YWI7ICAgICAg ICAgICAgICAgIC8qIEtleXRhYiBmaWxlICovCi0KLWV4dGVybiBzdHJ1Y3Qga3JiNF9pbml0X2Rh dGEga3JiNF9pbml0OwotZXh0ZXJuIGNoYXIgKiBrcmI0X2RfcHJpbmNpcGFsOyAgICAgICAgIC8q IERlZmF1bHQgcHJpbmNpcGFsICovCi1leHRlcm4gY2hhciAqIGtyYjRfZF9yZWFsbTsgICAgICAg ICAgICAgLyogRGVmYXVsdCByZWFsbSAqLwotZXh0ZXJuIGNoYXIgKiBrcmI0X2Rfc3J2OyAgICAg ICAgICAgICAgIC8qIERlZmF1bHQgc2VydmljZSBuYW1lICovCi1leHRlcm4gaW50ICAgIGtyYjRf ZF9saWZldGltZTsgICAgICAgICAgLyogRGVmYXVsdCBsaWZldGltZSAqLwotZXh0ZXJuIGludCAg ICBrcmI0X2RfcHJlYXV0aDsKLWV4dGVybiBjaGFyICoga3JiNF9kX2luc3RhbmNlOwotZXh0ZXJu IGludCAgICBrcmI0X2F1dG9nZXQ7Ci1leHRlcm4gaW50ICAgIGtyYjRfYXV0b2RlbDsKLWV4dGVy biBpbnQgICAga3JiNF9jaGVja2FkZHJzOyAgICAgICAgICAvKiBDaGVjayBUR1QgQWRkcnMgKi8K LWV4dGVybiBjaGFyICogazRfa2V5dGFiOyAgICAgICAgICAgICAgICAvKiBLZXl0YWIgZmlsZSAq LwotI2lmZGVmIEtSQjQKLWV4dGVybiBpbnQgICAgazRkZWJ1ZzsKLSNlbmRpZiAvKiBLUkI0ICov Ci1zdGF0aWMgc3RydWN0IGtleXRhYiBrcmJ2ZXJbXSA9IHsKLSAgICAiNCIsICAgICAgICAgICAg ICAgICA0LCAwLAotICAgICI1IiwgICAgICAgICAgICAgICAgIDUsIDAsCi0gICAgIml2IiwgICAg ICAgICAgICAgICAgNCwgQ01fSU5WLAotICAgICJ2IiwgICAgICAgICAgICAgICAgIDUsIENNX0lO VgotfTsKLXN0YXRpYyBpbnQgbmtyYnZlciA9IHNpemVvZihrcmJ2ZXIpL3NpemVvZihzdHJ1Y3Qg a2V5dGFiKTsKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIga2Rlc3RhYltdID0gewotICAgICJuZXZl ciIsICAgICAgICAgICAgS1JCX0RFTF9OTywgMCwKLSAgICAibm8iLCAgICAgICAgICAgICAgIEtS Ql9ERUxfTk8sIENNX0lOViwKLSAgICAib24tY2xvc2UiLCAgICAgICAgIEtSQl9ERUxfQ0wsIDAs Ci0gICAgIm9uLWV4aXQiLCAgICAgICAgICBLUkJfREVMX0VYLCAwCi19Owotc3RhdGljIGludCBu a2Rlc3RhYiA9IHNpemVvZihrZGVzdGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7Ci0KLXN0YXRp YyBzdHJ1Y3Qga2V5dGFiIGs0dGFiW10gPSB7Ci0gICAgImF1dG9kZWwiLCAgICAgICAgICAgWFlL UkJERUwsIENNX0lOViwKLSAgICAiYXV0b2Rlc3Ryb3kiLCAgICAgICBYWUtSQkRFTCwgMCwKLSAg ICAiYXV0b2dldCIsICAgICAgICAgICBYWUtSQkdFVCwgMCwKLSAgICAiY2hlY2stYWRkcmVzcyIs ICAgICBYWUtSQkFEUiwgMCwKLSAgICAiZGVidWciLCAgICAgICAgICAgICBYWUtSQkRCRywgQ01f SU5WLAotICAgICJpbnN0YW5jZSIsICAgICAgICAgIFhZS1JCSU5TLCAwLAotICAgICJrZXl0YWIi LCAgICAgICAgICAgIFhZS1JCS1RCLCAwLAotICAgICJsaWZldGltZSIsICAgICAgICAgIFhZS1JC TElGLCAwLAotICAgICJwcmVhdXRoIiwgICAgICAgICAgIFhZS1JCUFJFLCAwLAotICAgICJwcmlu Y2lwYWwiLCAgICAgICAgIFhZS1JCUFIsICAwLAotICAgICJwcm9tcHQiLCAgICAgICAgICAgIFhZ S1JCUFJNLCAwLAotICAgICJyZWFsbSIsICAgICAgICAgICAgIFhZS1JCUkwsICAwLAotICAgICJz ZXJ2aWNlLW5hbWUiLCAgICAgIFhZS1JCU1JWLCAwCi19Owotc3RhdGljIGludCBuazR0YWIgPSBz aXplb2YoazR0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKTsKLQotc3RhdGljIHN0cnVjdCBrZXl0 YWIgazV0YWJbXSA9IHsKLSAgICAiYWRkcmVzc2VzIiwgICAgICAgICBYWUtSQkFERCwgMCwKLSAg ICAiYXV0b2RlbGV0ZSIsICAgICAgICBYWUtSQkRFTCwgQ01fSU5WLAotICAgICJhdXRvZGVzdHJv eSIsICAgICAgIFhZS1JCREVMLCAwLAotICAgICJhdXRvZ2V0IiwgICAgICAgICAgIFhZS1JCR0VU LCAwLAotICAgICJjYyIsICAgICAgICAgICAgICAgIFhZS1JCQ0MsICBDTV9JTlYsCi0gICAgImNo ZWNrLWFkZHJlc3MiLCAgICAgWFlLUkJBRFIsIDAsCi0gICAgImNyZWRlbnRpYWxzLWNhY2hlIiwg WFlLUkJDQywgIDAsCi0gICAgImZvcndhcmRhYmxlIiwgICAgICAgWFlLUkJGV0QsIDAsCi0gICAg ImdldC1rNC10Z3QiLCAgICAgICAgWFlLUkJLNUs0LDAsCi0gICAgImluc3RhbmNlIiwgICAgICAg ICAgWFlLUkJJTlMsIDAsCi0gICAgImtleXRhYiIsICAgICAgICAgICAgWFlLUkJLVEIsIDAsCi0g ICAgImxpZmV0aW1lIiwgICAgICAgICAgWFlLUkJMSUYsIDAsCi0gICAgIm5vLWFkZHJlc3NlcyIs ICAgICAgWFlLUkJOQUQsIDAsCi0gICAgInByaW5jaXBhbCIsICAgICAgICAgWFlLUkJQUiwgIDAs Ci0gICAgInByb21wdCIsICAgICAgICAgICAgWFlLUkJQUk0sIDAsCi0gICAgInByb3hpYWJsZSIs ICAgICAgICAgWFlLUkJQUlgsIDAsCi0gICAgInJlYWxtIiwgICAgICAgICAgICAgWFlLUkJSTCwg IDAsCi0gICAgInJlbmV3YWJsZSIsICAgICAgICAgWFlLUkJSTlcsIDAsCi0gICAgInNlcnZpY2Ut bmFtZSIsICAgICAgWFlLUkJTUlYsIDAKLX07Ci1zdGF0aWMgaW50IG5rNXRhYiA9IHNpemVvZihr NXRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOwotCi0jZGVmaW5lIEtSQl9QV19QUk0gMQotI2Rl ZmluZSBLUkJfUFJfUFJNIDIKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIga3JicHJtdGFiW10gPSB7 Ci0gICAgInBhc3N3b3JkIiwgIEtSQl9QV19QUk0sIDAsCi0gICAgInByaW5jaXBhbCIsIEtSQl9Q Ul9QUk0sIDAKLX07Ci0KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotI2lmZGVmIENLX1NSUAot c3RhdGljIHN0cnVjdCBrZXl0YWIgc3JwdGFiW10gPSB7Ci0gICAgInByb21wdCIsICAgICAgICAg ICAgWFlTUlBQUk0sIDAKLX07Ci1zdGF0aWMgaW50IG5zcnB0YWIgPSBzaXplb2Yoc3JwdGFiKS9z aXplb2Yoc3RydWN0IGtleXRhYik7Ci0jZGVmaW5lIFNSUF9QV19QUk0gMQotCi1zdGF0aWMgc3Ry dWN0IGtleXRhYiBzcnBwcm10YWJbXSA9IHsKLSAgICAicGFzc3dvcmQiLCAgU1JQX1BXX1BSTSwg MAotfTsKLSNlbmRpZiAvKiBDS19TUlAgKi8KLSNpZmRlZiBDS19TU0wKLXN0YXRpYyBzdHJ1Y3Qg a2V5dGFiIHNzbHRhYltdID0gewotICAgICJjZXJ0cy1vayIsICAgICAgICAgIFhZU1NMQ09LLCAg Q01fSU5WLAotICAgICJjaXBoZXItbGlzdCIsICAgICAgIFhZU1NMQ0wsICAgMCwKLSAgICAiY3Js LWRpciIsICAgICAgICAgICBYWVNTTENSTEQsIDAsCi0gICAgImNybC1maWxlIiwgICAgICAgICAg WFlTU0xDUkwsICAwLAotICAgICJkZWJ1ZyIsICAgICAgICAgICAgIFhZU1NMREJHLCAgMCwKLSAg ICAiZGgta2V5LWZpbGUiLCAgICAgICBYWVNTTERLRkwsIENNX0lOViwKLSAgICAiZGgtcGFyYW0t ZmlsZSIsICAgICBYWVNTTERQRkwsIDAsCi0gICAgImRzYS1jZXJ0LWNoYWluLWZpbGUiLCBYWVNT TERDQ0YsIDAsCi0gICAgImRzYS1jZXJ0LWZpbGUiLCAgICAgWFlTU0xEQ0ZMLCAwLAotICAgICJk c2Eta2V5LWZpbGUiLCAgICAgIFhZU1NMREtGTCwgMCwKLSAgICAiZHVtbXkiLCAgICAgICAgICAg ICBYWVNTTERVTSwgIENNX0lOViwKLSAgICAib25seSIsICAgICAgICAgICAgICBYWVNTTE9OLCAg IENNX0lOViwKLSAgICAicmFuZG9tLWZpbGUiLCAgICAgICBYWVNTTFJORCwgIDAsCi0gICAgInJz YS1jZXJ0LWNoYWluLWZpbGUiLCBYWVNTTFJDQ0YsIDAsCi0gICAgInJzYS1jZXJ0LWZpbGUiLCAg ICAgWFlTU0xSQ0ZMLCAwLAotICAgICJyc2Eta2V5LWZpbGUiLCAgICAgIFhZU1NMUktGTCwgMCwK LSAgICAidmVyYm9zZSIsICAgICAgICAgICBYWVNTTFZSQiwgIDAsCi0gICAgInZlcmlmeSIsICAg ICAgICAgICAgWFlTU0xWUkYsICAwLAotICAgICJ2ZXJpZnktZGlyIiwgICAgICAgIFhZU1NMVlJG RCwgMCwKLSAgICAidmVyaWZ5LWZpbGUiLCAgICAgICBYWVNTTFZSRkYsIDAKLX07Ci1zdGF0aWMg aW50IG5zc2x0YWIgPSBzaXplb2Yoc3NsdGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7Ci1zdGF0 aWMgc3RydWN0IGtleXRhYiBzc2x2ZXJ0YWJbXSA9IHsKLSAgICAiZmFpbC1pZi1uby1wZWVyLWNl cnQiLCBTU0xfVkVSSUZZX1BFRVIgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9W RVJJRllfRkFJTF9JRl9OT19QRUVSX0NFUlQsIDAsCi0gICAgIm5vIiwgICAgICAgICAgICAgICBT U0xfVkVSSUZZX05PTkUsIDAsCi0gICAgIm5vbmUiLCAgICAgICAgICAgICBTU0xfVkVSSUZZX05P TkUsIENNX0lOViwKLSAgICAib2ZmIiwgICAgICAgICAgICAgIFNTTF9WRVJJRllfTk9ORSwgQ01f SU5WLAotICAgICJvbiIsICAgICAgICAgICAgICAgU1NMX1ZFUklGWV9QRUVSLCBDTV9JTlYsCi0g ICAgInBlZXItY2VydCIsICAgICAgICBTU0xfVkVSSUZZX1BFRVIsIDAKLX07Ci1zdGF0aWMgaW50 IG5zc2x2ZXJ0YWIgPSBzaXplb2Yoc3NsdmVydGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7Ci0j ZW5kaWYgLyogQ0tfU1NMICovCi0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSNpZmRl ZiBDS19FTkNSWVBUSU9OCi1pbnQgY3hfdHlwZSA9IENYX0FVVE87Ci1leHRlcm4gaW50IHNsX2N4 X3R5cGU7Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotZXh0ZXJuIGNoYXIgKnRjcF9hZGRy ZXNzOwotI2lmbmRlZiBOT0hUVFAKLWV4dGVybiBjaGFyICogdGNwX2h0dHBfcHJveHk7Ci1leHRl cm4gY2hhciAqIHRjcF9odHRwX3Byb3h5X3VzZXI7Ci1leHRlcm4gY2hhciAqIHRjcF9odHRwX3By b3h5X3B3ZDsKLWV4dGVybiBjaGFyICogdGNwX2h0dHBfcHJveHlfYWdlbnQ7Ci0jZW5kaWYgLyog Tk9IVFRQICovCi0jaWZkZWYgTlQKLSNpZmRlZiBDS19TT0NLUwotZXh0ZXJuIGNoYXIgKnRjcF9z b2Nrc19zdnI7Ci1leHRlcm4gY2hhciAqdGNwX3NvY2tzX3VzZXI7Ci0jaWZkZWYgQ0tfU09DS1Nf TlMKLWV4dGVybiBjaGFyICp0Y3Bfc29ja3NfbnM7Ci0jZW5kaWYgLyogQ0tfU09DS1NfTlMgKi8K LSNlbmRpZiAvKiBDS19TT0NLUyAqLwotI2VuZGlmIC8qIE5UICovCi0KLSNkZWZpbmUgVVBXX1VT RVIgIDEKLSNkZWZpbmUgVVBXX1BBU1MgIDIKLSNkZWZpbmUgVVBXX0FHRU5UIDMKLQotc3RhdGlj IHN0cnVjdCBrZXl0YWIgdXNlcnBhc3NbXSA9IHsKLSAgICB7ICIvYWdlbnQiLCAgIFVQV19BR0VO VCwgQ01fQVJHIH0sCi0gICAgeyAiL3Bhc3N3b3JkIiwgVVBXX1BBU1MsIENNX0FSRyB9LAotICAg IHsgIi91c2VyIiwgICAgIFVQV19VU0VSLCBDTV9BUkcgfSwKLX07Ci1zdGF0aWMgaW50IG51c2Vy cGFzcyA9IHNpemVvZih1c2VycGFzcykvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOwotCi1zdGF0aWMg c3RydWN0IGtleXRhYiB0bm5lZ3RhYltdID0geyAgICAgLyogVEVMTkVUIE5FR09USUFUSU9OIHRh YmxlICovCi0gICAgImFjY2VwdGVkIiwgIFROX05HX0FDLCAwLAotICAgICJyZWZ1c2VkIiwgICBU Tl9OR19SRiwgMCwKLSAgICAicmVxIiwgICAgICAgVE5fTkdfUlEsIENNX0lOVnxDTV9BQlIsCi0g ICAgInJlcXUiLCAgICAgIFROX05HX1JRLCBDTV9JTlZ8Q01fQUJSLAotICAgICJyZXF1ZSIsICAg ICBUTl9OR19SUSwgQ01fSU5WfENNX0FCUiwKLSAgICAicmVxdWVzIiwgICAgVE5fTkdfUlEsIENN X0lOVnxDTV9BQlIsCi0gICAgInJlcXVlc3QiLCAgIFROX05HX1JRLCBDTV9JTlZ8Q01fQUJSLAot ICAgICJyZXF1ZXN0ZSIsICBUTl9OR19SUSwgQ01fSU5WfENNX0FCUiwKLSAgICAicmVxdWVzdGVk IiwgVE5fTkdfUlEsIDAsCi0gICAgInJlcXVpcmVkIiwgIFROX05HX01VLCAwCi19Owotc3RhdGlj IGludCBudG5uZWd0YWIgPSBzaXplb2YodG5uZWd0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKTsK LQotI2lmZGVmIENLX0VOQ1JZUFRJT04KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHR5cGt3ZFtdID0g ewotICAgICIvdHlwZSIsIDAsIENNX0FSRwotfTsKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgdG5l bmN0YWJbXSA9IHsgICAgIC8qIFRFTE5FVCBFTkNSWVBUSU9OIHRhYmxlICovCi0gICAgImFjY2Vw dGVkIiwgICBUTl9OR19BQywgICAgQ01fSU5WLAotICAgICJyZWZ1c2VkIiwgICAgVE5fTkdfUkYs ICAgIENNX0lOViwKLSAgICAicmVxIiwgICAgICAgIFROX05HX1JRLCAgICBDTV9JTlZ8Q01fQUJS LAotICAgICJyZXF1IiwgICAgICAgVE5fTkdfUlEsICAgIENNX0lOVnxDTV9BQlIsCi0gICAgInJl cXVlIiwgICAgICBUTl9OR19SUSwgICAgQ01fSU5WfENNX0FCUiwKLSAgICAicmVxdWVzIiwgICAg IFROX05HX1JRLCAgICBDTV9JTlZ8Q01fQUJSLAotICAgICJyZXF1ZXN0IiwgICAgVE5fTkdfUlEs ICAgIENNX0lOVnxDTV9BQlIsCi0gICAgInJlcXVlc3RlIiwgICBUTl9OR19SUSwgICAgQ01fSU5W fENNX0FCUiwKLSAgICAicmVxdWVzdGVkIiwgIFROX05HX1JRLCAgICBDTV9JTlYsCi0gICAgInJl cXVpcmVkIiwgICBUTl9OR19NVSwgICAgQ01fSU5WLAotICAgICJzdGFydCIsICAgICAgVE5fRU5f U1RBUlQsIENNX0lOViwKLSAgICAic3RvcCIsICAgICAgIFROX0VOX1NUT1AsICBDTV9JTlYsCi0g ICAgInR5cGUiLCAgICAgICBUTl9FTl9UWVAsICAgMAotfTsKLXN0YXRpYyBpbnQgbnRuZW5jID0g c2l6ZW9mKHRuZW5jdGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYikgOwotI2VuZGlmIC8qIENLX0VO Q1JZUFRJT04gKi8KLQotI2lmZGVmIENLX0ZPUldBUkRfWAotc3RhdGljIHN0cnVjdCBrZXl0YWIg dG5md2R4dGFiW10gPSB7ICAgIC8qIFRFTE5FVCBGT1JXQVJELVggdGFibGUgKi8KLSAgICAibm8t ZW5jcnlwdGlvbiIsICAgIDEsICBDTV9JTlYsCi0gICAgInhhdXRob3JpdHktZmlsZSIsICAwLCAg MAotfTsKLXN0YXRpYyBpbnQgbnRuZndkeCA9IHNpemVvZih0bmZ3ZHh0YWIpL3NpemVvZihzdHJ1 Y3Qga2V5dGFiKSA7Ci0jZW5kaWYgLyogQ0tfRk9SV0FSRF9YICovCi0KLXN0YXRpYyBzdHJ1Y3Qg a2V5dGFiIHRuYnVndGFiW10gPSB7ICAgICAvKiBURUxORVQgQlVHIHRhYmxlICovCi0gICAgImF1 dGgta3JiNS1kZXMiLCAgICAgICAgIDQsIDAsCi0gICAgImJpbmFyeS1tZS1tZWFucy11LXRvbyIs IDAsIDAsCi0gICAgImJpbmFyeS11LW1lYW5zLW1lLXRvbyIsIDEsIDAsCi0gICAgImluZmluaXRl LWxvb3AtY2hlY2siLCAgIDIsIDAsCi0gICAgInNiLWltcGxpZXMtd2lsbC1kbyIsICAgIDMsIDAK LX07Ci0KLSNpZmRlZiBDS19FTlZJUk9OTUVOVAotc3RhdGljIHN0cnVjdCBrZXl0YWIgdG5lbnZ0 YWJbXSA9IHsgICAgIC8qIFRFTE5FVCBFTlZJUk9OTUVOVCB0YWJsZSAqLwotICAgICJhY2N0Iiwg ICAgIFROX0VOVl9BQ0NULCAgICAwLAotICAgICJkaXNwbGF5IiwgIFROX0VOVl9ESVNQLCAgICAw LAotICAgICJqb2IiLCAgICAgIFROX0VOVl9KT0IsICAgICAwLAotICAgICJsb2NhdGlvbiIsIFRO X0VOVl9MT0MsICAgICAwLAotICAgICJvZmYiLCAgICAgIFROX0VOVl9PRkYsICAgICBDTV9JTlYs Ci0gICAgIm9uIiwgICAgICAgVE5fRU5WX09OLCAgICAgIENNX0lOViwKLSAgICAicHJpbnRlciIs ICBUTl9FTlZfUFJOVCwgICAgMCwKLSAgICAic3lzdGVtdHlwZSIsVE5fRU5WX1NZUywgICAgMCwK LSAgICAidXNlciIsICAgICBUTl9FTlZfVVNSLCAgICAgMCwKLSAgICAidXNlcnZhciIsICBUTl9F TlZfVVZBUiwgICAgMCwKLSAgICAiIiwgMCwgMAotfTsKLXN0YXRpYyBpbnQgbnRuZW52ID0gc2l6 ZW9mKHRuZW52dGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYikgLSAxOwotI2VuZGlmIC8qIENLX0VO VklST05NRU5UICovCi0KLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotc3RhdGljIHN0cnVjdCBr ZXl0YWIgdG5hdXRodGFiW10gPSB7ICAgIC8qIFRFTE5FVCBBVVRIRU5USUNBVElPTiB0YWJsZSAq LwotICAgICJhY2NlcHRlZCIsICAgVE5fTkdfQUMsICBDTV9JTlYsCi0gICAgImVuY3J5cHQtZmxh ZyIsIFROX0FVX0VOQywgMCwKLSAgICAiZm9yd2FyZGluZyIsIFROX0FVX0ZXRCwgICAwLAotICAg ICJob3ctZmxhZyIsICAgVE5fQVVfSE9XLCAgIDAsCi0gICAgInJlZnVzZWQiLCAgICBUTl9OR19S RiwgIENNX0lOViwKLSAgICAicmVxIiwgICAgICAgIFROX05HX1JRLCAgQ01fSU5WfENNX0FCUiwK LSAgICAicmVxdSIsICAgICAgIFROX05HX1JRLCAgQ01fSU5WfENNX0FCUiwKLSAgICAicmVxdWUi LCAgICAgIFROX05HX1JRLCAgQ01fSU5WfENNX0FCUiwKLSAgICAicmVxdWVzIiwgICAgIFROX05H X1JRLCAgQ01fSU5WfENNX0FCUiwKLSAgICAicmVxdWVzdCIsICAgIFROX05HX1JRLCAgQ01fSU5W fENNX0FCUiwKLSAgICAicmVxdWVzdGUiLCAgIFROX05HX1JRLCAgQ01fSU5WfENNX0FCUiwKLSAg ICAicmVxdWVzdGVkIiwgIFROX05HX1JRLCAgQ01fSU5WLAotICAgICJyZXF1aXJlZCIsICAgVE5f TkdfTVUsICBDTV9JTlYsCi0gICAgInR5cGUiLCAgICAgICBUTl9BVV9UWVAsIDAKLX07Ci1zdGF0 aWMgaW50IG50bmF1dGggPSBzaXplb2YodG5hdXRodGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYikg OwotCi1zdHJ1Y3Qga2V5dGFiIGF1dHlwdGFiW10gPSB7ICAgIC8qIFRFTE5FVCBBVVRIRU5USUNB VElPTiBUWVBFIHRhYmxlICovCi0gICAgImF1dG9tYXRpYyIsICBBVVRIX0FVVE8sIDAsCi0jaWZk ZWYgQ0tfS0VSQkVST1MKLSAgICAiazQiLCAgICAgICAgIEFVVEhfS1JCNCwgQ01fSU5WLAotICAg ICJrNSIsICAgICAgICAgQVVUSF9LUkI1LCBDTV9JTlYsCi0gICAgImtlcmJlcm9zNCIsICBBVVRI X0tSQjQsIDAsCi0gICAgImtlcmJlcm9zNSIsICBBVVRIX0tSQjUsIDAsCi0gICAgImtlcmJlcm9z X2l2IixBVVRIX0tSQjQsIENNX0lOViwKLSAgICAia2VyYmVyb3NfdiIsIEFVVEhfS1JCNSwgQ01f SU5WLAotICAgICJrcmI0IiwgICAgICAgQVVUSF9LUkI0LCBDTV9JTlYsCi0gICAgImtyYjUiLCAg ICAgICBBVVRIX0tSQjUsIENNX0lOViwKLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotICAgICJu b25lIiwgICAgICAgQVVUSF9OT05FLCAwLAotI2lmZGVmIE5UCi0gICAgIm50bG0iLCAgICAgICBB VVRIX05UTE0sIDAsCi0jZW5kaWYgLyogTlQgKi8KLSNpZmRlZiBDS19TUlAKLSAgICAic3JwIiwg ICAgICAgIEFVVEhfU1JQLCAgMCwKLSNlbmRpZiAvKiBDS19TUlAgKi8KLSNpZmRlZiBDS19TU0wK LSAgICAic3NsIiwgICAgICAgIEFVVEhfU1NMLCAgMCwKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAg ICAiIiwgMCwgMAotfTsKLWludCBuYXV0eXAgPSBzaXplb2YoYXV0eXB0YWIpL3NpemVvZihzdHJ1 Y3Qga2V5dGFiKSAtIDE7Ci0KLXN0cnVjdCBrZXl0YWIgYXVob3d0YWJbXSA9IHsgICAgLyogVEVM TkVUIEFVVEhFTlRJQ0FUSU9OIEhPVyB0YWJsZSAqLwotICAgICJhbnkiLCAgICAgVE5fQVVUSF9I T1dfQU5ZLCAgICAgMCwKLSAgICAibXV0dWFsIiwgIFROX0FVVEhfSE9XX01VVFVBTCwgIDAsCi0g ICAgIm9uZS13YXkiLCBUTl9BVVRIX0hPV19PTkVfV0FZLCAwLAotICAgICIiLCAwLCAwCi19Owot aW50IG5hdWhvdyA9IHNpemVvZihhdWhvd3RhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpIC0gMTsK LQotc3RydWN0IGtleXRhYiBhdWVuY3RhYltdID0geyAgICAvKiBURUxORVQgQVVUSEVOVElDQVRJ T04gRU5DUllQVCB0YWJsZSAqLwotICAgICJhbnkiLCAgICAgVE5fQVVUSF9FTkNfQU5ZLCAgICAg MCwKLSAgICAibm9uZSIsICAgIFROX0FVVEhfRU5DX05PTkUsICAgIDAsCi0gICAgInRlbG9wdCIs ICBUTl9BVVRIX0VOQ19URUxPUFQsICAwLAotI2lmZGVmIENLX1NTTAotICAgICJ0bHMiLCAgICAg VE5fQVVUSF9FTkNfVExTLCAgICAgMCwKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAiIiwgMCwg MAotfTsKLWludCBuYXVlbmMgPSBzaXplb2YoYXVlbmN0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFi KSAtIDE7Ci0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLQotI2RlZmluZSBUTl9OTF9C SU4gMwotI2RlZmluZSBUTl9OTF9OVlQgNAotc3RhdGljIHN0cnVjdCBrZXl0YWIgdG5fbmxtdGFi W10gPSB7ICAgIC8qIFRFTE5FVCBORVdMSU5FLU1PREUgdGFibGUgKi8KLSAgICAiYmluYXJ5LW1v ZGUiLCBUTl9OTF9CSU4sIDAsICAgICAgICAvKiBCaW5hcnkgbW9kZSAqLwotICAgICJudnQiLCAg ICBUTl9OTF9OVlQsIDAsICAgICAgICAgICAgIC8qIE5WVCBtb2RlICovCi0gICAgIm9mZiIsICAg IFROTF9DUk5VTCwgQ01fSU5WLCAgICAgICAgLyogQ1ItTlVMIChURUxORVQgc3BlYykgKi8KLSAg ICAib24iLCAgICAgVE5MX0NSTEYsICBDTV9JTlYsICAgICAgICAvKiBDUi1MRiAoVEVMTkVUIHNw ZWMpICovCi0gICAgInJhdyIsICAgIFROTF9DUiwgICAgQ01fSU5WICAgICAgICAgLyogQ1Igb25s eSAob3V0IG9mIHNwZWMpICovCi19Owotc3RhdGljIGludCBudG5fbmxtID0gKHNpemVvZih0bl9u bG10YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIg dG5sbXRhYltdID0geyAgICAgIC8qIFRFTE5FVCBORVdMSU5FLU1PREUgdGFibGUgKi8KLSAgICAi Y3IiLCAgICAgVE5MX0NSLCAgICBDTV9JTlYsICAgICAgICAvKiBDUiBvbmx5IChvdXQgb2Ygc3Bl YykgKi8KLSAgICAiY3ItbGYiLCAgVE5MX0NSTEYsICBDTV9JTlYsICAgICAgICAvKiBDUi1MRiAo VEVMTkVUIHNwZWMpICovCi0gICAgImNyLW51bCIsIFROTF9DUk5VTCwgQ01fSU5WLCAgICAgICAg LyogQ1ItTlVMIChURUxORVQgc3BlYykgKi8KLSAgICAibGYiLCAgICAgVE5MX0xGLCAgICBDTV9J TlYsICAgICAgICAvKiBMRiBpbnN0ZWFkIG9mIENSLUxGICovCi0gICAgIm9mZiIsICAgIFROTF9D Uk5VTCwgMCwgICAgICAgICAgICAgLyogQ1ItTlVMIChURUxORVQgc3BlYykgKi8KLSAgICAib24i LCAgICAgVE5MX0NSTEYsICAwLCAgICAgICAgICAgICAvKiBDUi1MRiAoVEVMTkVUIHNwZWMpICov Ci0gICAgInJhdyIsICAgIFROTF9DUiwgICAgMCAgICAgICAgICAgICAgLyogQ1Igb25seSAob3V0 IG9mIHNwZWMpICovCi19Owotc3RhdGljIGludCBudG5sbSA9IChzaXplb2YodG5sbXRhYikgLyBz aXplb2Yoc3RydWN0IGtleXRhYikpOwotCi1zdHJ1Y3Qga2V5dGFiIHRudGFiW10gPSB7Ci0jaWZk ZWYgQ0tfQVVUSEVOVElDQVRJT04KLSAgICAiYXV0aGVudGljYXRpb24iLCAgICAgICBDS19UTl9B VSwgIDAsCi0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSAgICAiYiIsICAgICAgICAg ICAgICAgICAgICBDS19UTl9CTSwgIENNX0lOVnxDTV9BQlIsCi0gICAgImJpIiwgICAgICAgICAg ICAgICAgICAgQ0tfVE5fQk0sICBDTV9JTlZ8Q01fQUJSLAotICAgICJiaW4iLCAgICAgICAgICAg ICAgICAgIENLX1ROX0JNLCAgQ01fSU5WfENNX0FCUiwKLSAgICAiYmluYSIsICAgICAgICAgICAg ICAgICBDS19UTl9CTSwgIENNX0lOVnxDTV9BQlIsCi0gICAgImJpbmFyIiwgICAgICAgICAgICAg ICAgQ0tfVE5fQk0sICBDTV9JTlZ8Q01fQUJSLAotICAgICJiaW5hcnkiLCAgICAgICAgICAgICAg IENLX1ROX0JNLCAgQ01fSU5WfENNX0FCUiwKLSAgICAiYmluYXJ5LSIsICAgICAgICAgICAgICBD S19UTl9CTSwgIENNX0lOVnxDTV9BQlIsCi0gICAgImJpbmFyeS1tb2RlIiwgICAgICAgICAgQ0tf VE5fQk0sICBDTV9JTlYsCi0gICAgImJpbmFyeS10cmFuc2Zlci1tb2RlIiwgQ0tfVE5fWEYsICAw LAotICAgICJiaW5hcnkteGZlci1tb2RlIiwgICAgIENLX1ROX1hGLCAgQ01fSU5WLAotICAgICJi dWciLCAgICAgICAgICAgICAgICAgIENLX1ROX0JVRywgMCwKLSAgICAiZGVidWciLCAgICAgICAg ICAgICAgICBDS19UTl9EQiwgIDAsCi0gICAgImRlbGF5LXNiIiwgICAgICAgICAgICAgQ0tfVE5f REwsICAwLAotICAgICJlY2hvIiwgICAgICAgICAgICAgICAgIENLX1ROX0VDLCAgMCwKLSNpZmRl ZiBDS19FTkNSWVBUSU9OCi0gICAgImVuY3J5cHRpb24iLCAgICAgIENLX1ROX0VOQywgIDAsCi0j ZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotI2lmZGVmIENLX0VOVklST05NRU5UCi0gICAgImVu dmlyb25tZW50IiwgICAgIENLX1ROX0VOViwgIDAsCi0jZW5kaWYgLyogQ0tfRU5WSVJPTk1FTlQg Ki8KLSNpZmRlZiBDS19GT1JXQVJEX1gKLSAgICAiZm9yd2FyZC14IiwgICAgICAgQ0tfVE5fRlgs ICAgMCwKLSNlbmRpZiAvKiBDS19GT1JXQVJEX1ggKi8KLSNpZmRlZiBJS1NfT1BUSU9OCi0gICAg Imtlcm1pdCIsICAgICAgICAgIENLX1ROX0lLUywgIENNX0lOViwKLSNlbmRpZiAvKiBJS1NfT1BU SU9OICovCi0jaWZkZWYgQ0tfU05ETE9DCi0gICAgImxvY2F0aW9uIiwgICAgICAgIENLX1ROX0xP QywgIDAsCi0jZW5kaWYgLyogQ0tfU05ETE9DICovCi0jaWZkZWYgQ0tfTkFXUwotICAgICJuYXdz IiwgICAgICAgICAgICBDS19UTl9OQVdTLCBDTV9JTlYsCi0jZW5kaWYgLyogQ0tfTkFXUyAqLwot ICAgICJuZXdsaW5lLW1vZGUiLCAgICBDS19UTl9OTCwgICAwLAotICAgICJuby1lbmNyeXB0LWR1 cmluZy14ZmVyIiwgQ0tfVE5fTkUsIENNX0lOViwKLSAgICAicHJvbXB0LWZvci11c2VyaWQiLENL X1ROX1BVSUQsMCwKLSAgICAicmVtb3RlLWVjaG8iLCAgICAgQ0tfVE5fUkUsICAgMCwKLSNpZmRl ZiBDS19TU0wKLSAgICAic3RhcnQtdGxzIiwgICAgICAgQ0tfVE5fVExTLCAgQ01fSU5WLAotI2Vu ZGlmIC8qIENLX1NTTCAqLwotI2lmZGVmIE5UCi0gICAgInNmdS1jb21wYXRpYmlsaXR5IiwgQ0tf VE5fU0ZVLCAwLAotI2Vsc2UKLSAgICAic2Z1LWNvbXBhdGliaWxpdHkiLCBDS19UTl9TRlUsIENN X0lOViwKLSNlbmRpZiAvKiBOVCAqLwotICAgICJ0ZXJtaW5hbC10eXBlIiwgICBDS19UTl9UVCwg ICAwLAotICAgICJ3YWl0LWZvci1uZWdvdGlhdGlvbnMiLCBDS19UTl9XQUlULCAwLAotI2lmZGVm IENLX0VOVklST05NRU5UCi0gICAgInhkaXNwbGF5LWxvY2F0aW9uIixDS19UTl9YRCwgQ01fSU5W LAotI2VuZGlmIC8qIENLX0VOVklST05NRU5UICovCi0gICAgIiIsIDAsIDAKLX07Ci1pbnQgbnRu ID0gKHNpemVvZih0bnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLQotc3RydWN0 IGtleXRhYiB0bm9wdHRhYltdID0gewotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0gICAgImF1 dGhlbnRpY2F0aW9uIiwgIENLX1ROX0FVLCAgIDAsCi0jZWxzZQotICAgICJhdXRoZW50aWNhdGlv biIsICBDS19UTl9BVSwgICBDTV9JTlYsCi0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8K LSAgICAiYmluYXJ5LW1vZGUiLCAgICAgQ0tfVE5fQk0sICAgMCwKLSNpZmRlZiBUTl9DT01QT1JU Ci0gICAgImMiLCAgICAgICAgICAgICAgIENLX1ROX0NQQywgICBDTV9JTlZ8Q01fQUJSLAotICAg ICJjbyIsICAgICAgICAgICAgICBDS19UTl9DUEMsICAgQ01fSU5WfENNX0FCUiwKLSAgICAiY29t IiwgICAgICAgICAgICAgQ0tfVE5fQ1BDLCAgIENNX0lOVnxDTV9BQlIsCi0gICAgImNvbS1wb3J0 LWNvbnRyb2wiLENLX1ROX0NQQywgICAwLAotICAgICJjb21wb3J0LWNvbnRyb2wiLCBDS19UTl9D UEMsICAgQ01fSU5WLAotI2Vsc2UgLyogVE5fQ09NUE9SVCAqLwotICAgICJjb20tcG9ydC1jb250 cm9sIixDS19UTl9DUEMsICBDTV9JTlYsCi0gICAgImNvbXBvcnQtY29udHJvbCIsIENLX1ROX0NQ QywgICBDTV9JTlYsCi0jZW5kaWYgLyogVE5fQ09NUE9SVCAqLwotICAgICJlY2hvIiwgICAgICAg ICAgICBDS19UTl9FQywgICAwLAotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAiZW5jcnlwdGlv biIsICAgICAgQ0tfVE5fRU5DLCAgMCwKLSNlbHNlCi0gICAgImVuY3J5cHRpb24iLCAgICAgIENL X1ROX0VOQywgIENNX0lOViwKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jaWZkZWYgQ0tf Rk9SV0FSRF9YCi0gICAgImZvcndhcmQteCIsICAgICAgIENLX1ROX0ZYLCAgIDAsCi0jZWxzZSAv KiBDS19GT1JXQVJEX1ggKi8KLSAgICAiZm9yd2FyZC14IiwgICAgICAgQ0tfVE5fRlgsICAgQ01f SU5WLAotI2VuZGlmIC8qIENLX0ZPUldBUkRfWCAqLwotICAgICJpYm0tc2FrIiwgICAgICAgICBD S19UTl9TQUssICBDTV9JTlYsCi0jaWZkZWYgSUtTX09QVElPTgotICAgICJrZXJtaXQiLCAgICAg ICAgICBDS19UTl9JS1MsICAwLAotI2Vsc2UKLSAgICAia2VybWl0IiwgICAgICAgICAgQ0tfVE5f SUtTLCAgQ01fSU5WLAotI2VuZGlmIC8qIElLU19PUFRJT04gKi8KLSAgICAibGZsb3ciLCAgICAg ICAgICAgQ0tfVE5fRkxXLCAgQ01fSU5WLAotICAgICJsb2dvdXQiLCAgICAgICAgICBDS19UTl9M T0csICAwLAotI2lmZGVmIENLX05BV1MKLSAgICAibmF3cyIsICAgICAgICAgICAgQ0tfVE5fTkFX UywgMCwKLSNlbHNlCi0gICAgIm5hd3MiLCAgICAgICAgICAgIENLX1ROX05BV1MsIENNX0lOViwK LSNlbmRpZiAvKiBDS19OQVdTICovCi0jaWZkZWYgQ0tfRU5WSVJPTk1FTlQKLSAgICAibmV3LWVu dmlyb25tZW50IiwgQ0tfVE5fRU5WLCAgMCwKLSNlbHNlCi0gICAgIm5ldy1lbnZpcm9ubWVudCIs IENLX1ROX0VOViwgIENNX0lOViwKLSNlbmRpZiAvKiBDS19FTlZJUk9OTUVOVCAqLwotICAgICJw cmFnbWEtaGVhcnRiZWF0IixDS19UTl9QSFIsICBDTV9JTlYsCi0gICAgInByYWdtYS1sb2dvbiIs ICAgIENLX1ROX1BMRywgIENNX0lOViwKLSAgICAicHJhZ21hLXNzcGkiLCAgICAgQ0tfVE5fUFNQ LCAgQ01fSU5WLAotICAgICJzYWsiLCAgICAgICAgICAgICBDS19UTl9TQUssICBDTV9JTlYsCi0j aWZkZWYgQ0tfU05ETE9DCi0gICAgInNlbmQtbG9jYXRpb24iLCAgIENLX1ROX0xPQywgIDAsCi0j ZWxzZQotICAgICJzZW5kLWxvY2F0aW9uIiwgICBDS19UTl9MT0MsICBDTV9JTlYsCi0jZW5kaWYg LyogQ0tfU05ETE9DICovCi0gICAgInNnYSIsICAgICAgICAgICAgIENLX1ROX1NHQSwgQ01fSU5W fENNX0FCUiwKLSNpZmRlZiBDS19TU0wKLSAgICAic3RhcnQtdGxzIiwgICAgICAgQ0tfVE5fVExT LCAgMCwKLSNlbHNlCi0gICAgInN0YXJ0LXRscyIsICAgICAgIENLX1ROX1RMUywgIENNX0lOViwK LSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAic3VwcHJlc3MtZ28tYWhlYWRzIiwgQ0tfVE5fU0dB LCAwLAotICAgICJ0ZXJtaW5hbC10eXBlIiwgICBDS19UTl9UVCwgICAwLAotICAgICJ0dHlwZSIs ICAgICAgICAgICBDS19UTl9UVCwgICBDTV9JTlZ8Q01fQUJSLAotI2lmZGVmIENLX0VOVklST05N RU5UCi0gICAgInhkaXNwbGF5LWxvY2F0aW9uIiwgQ0tfVE5fWEQsIDAsCi0jZWxzZQotICAgICJ4 ZGlzcGxheS1sb2NhdGlvbiIsIENLX1ROX1hELCBDTV9JTlYsCi0jZW5kaWYgLyogQ0tfRU5WSVJP Tk1FTlQgKi8KLSAgICAiIiwgMCwgMAotfTsKLWludCBudG5vcHQgPSAoc2l6ZW9mKHRub3B0dGFi KSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwotCi1zdHJ1Y3Qga2V5dGFiIHRub3B0c3db XSA9IHsKLSAgICAiL2NsaWVudCIsICBDS19UTl9DTElFTlQsICAgMCwKLSAgICAiL3NlcnZlciIs ICBDS19UTl9TRVJWRVIsICAgMAotfTsKLWludCBudG5vcHRzdyA9IChzaXplb2YodG5vcHRzdykg LyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotI2VuZGlmIC8qIFROQ09ERSAqLwotCi1zdHJ1Y3Qg a2V5dGFiIGZ0cnRhYltdID0geyAgICAgICAgICAgICAgLyogRmVhdHVyZSB0YWJsZSAqLwotI2lm bmRlZiBOT0NTRVRTICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAgPSB3ZSBoYXZlIGl0LCAx ID0gd2UgZG9uJ3QgKi8KLSJjaGFyYWN0ZXItc2V0cyIsICAgICAgIDAsIDAsCi0jZWxzZQotImNo YXJhY3Rlci1zZXRzIiwgICAgICAgMSwgMCwKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0jaWZuZGVm IE5PQ1lSSUwKLSJjeXJpbGxpYyIsICAgICAgICAgICAgIDAsIDAsCi0jZWxzZQotImN5cmlsbGlj IiwgICAgICAgICAgICAgMSwgMCwKLSNlbmRpZiAvKiBOT0NZUklMICovCi0KLSNpZm5kZWYgTk9M T0dESUFMCi0iY3gtbG9nIiwgICAgICAgICAgICAgICAwLCAwLAotI2Vsc2UKLSJjeC1sb2ciLCAg ICAgICAgICAgICAgIDEsIDAsCi0jZW5kaWYgLyogTk9MT0dESUFMICovCi0KLSNpZm5kZWYgTk9E RUJVRwotImRlYnVnIiwgICAgICAgICAgICAgICAgMCwgMCwKLSNlbHNlCi0iZGVidWciLCAgICAg ICAgICAgICAgICAxLCAwLAotI2VuZGlmIC8qIE5PREVCVUcgKi8KLQotI2lmbmRlZiBOT0RJQUwK LSJkaWFsIiwgICAgICAgICAgICAgICAgIDAsIDAsCi0jZWxzZQotImRpYWwiLCAgICAgICAgICAg ICAgICAgMSwgMCwKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLQotI2lmZGVmIERZTkFNSUMKLSJkeW5h bWljLW1lbW9yeSIsICAgICAgIDAsIDAsCi0jZWxzZQotImR5bmFtaWMtbWVtb3J5IiwgICAgICAg MSwgMCwKLSNlbmRpZiAvKiBEWU5BTUlDICovCi0KLSNpZm5kZWYgTk9YRkVSCi0iZmlsZS10cmFu c2ZlciIsICAgICAgICAwLCAwLAotI2Vsc2UKLSJmaWxlLXRyYW5zZmVyIiwgICAgICAgIDEsIDAs Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZmRlZiBYWEZXRAotImZvcndhcmQiLCAgICAgICAg ICAgICAgMCwgMCwKLSNlbHNlCi0iZm9yd2FyZCIsICAgICAgICAgICAgICAxLCAwLAotI2VuZGlm IC8qIFhYRldEICovCi0KLSNpZmRlZiBORVdGVFAKLSJmdHAiLCAgICAgICAgICAgICAgICAgIDAs IDAsCi0jZWxzZQotImZ0cCIsICAgICAgICAgICAgICAgICAgMSwgMCwKLSNlbmRpZiAvKiBORVdG VFAgKi8KLQotI2lmZGVmIENLX0NVUlNFUwotImZ1bGxzY3JlZW4tZGlzcGxheSIsICAgMCwgMCwK LSNlbHNlCi0iZnVsbHNjcmVlbi1kaXNwbGF5IiwgICAxLCAwLAotI2VuZGlmIC8qIENLX0NVUlNF UyAqLwotI2lmZGVmIEdSRUVLCi0iZ3JlZWsiLCAgICAgICAgICAgICAgICAwLCAwLAotI2Vsc2UK LSJncmVlayIsICAgICAgICAgICAgICAgIDEsIDAsCi0jZW5kaWYgLyogR1JFRUsgKi8KLSNpZmRl ZiBIRUJSRVcKLSJoZWJyZXciLCAgICAgICAgICAgICAgIDAsIDAsCi0jZWxzZQotImhlYnJldyIs ICAgICAgICAgICAgICAgMSwgMCwKLSNlbmRpZiAvKiBIRUJSRVcgKi8KLSNpZm5kZWYgTk9IRUxQ Ci0iaGVscCIsICAgICAgICAgICAgICAgICAwLCAwLAotI2Vsc2UKLSJoZWxwIiwgICAgICAgICAg ICAgICAgIDEsIDAsCi0jZW5kaWYgLyogTk9IRUxQICovCi0KLSNpZm5kZWYgTk9JS1NECi0iaWtz ZCIsICAgICAgICAgICAgICAgICAwLCAwLAotI2Vsc2UKLSJpa3NkIiwgICAgICAgICAgICAgICAg IDEsIDAsCi0jZW5kaWYgLyogTk9JS1NEICovCi0KLSNpZm5kZWYgTk9TUEwKLSJpZi1jb21tYW5k IiwgICAgICAgICAgIDAsIDAsCi0jZWxzZQotImlmLWNvbW1hbmQiLCAgICAgICAgICAgMSwgMCwK LSNlbmRpZiAvKiBOT1NQTCAqLwotI2lmbmRlZiBOT0pDCi0jaWZkZWYgVU5JWAotImpvYi1jb250 cm9sIiwgICAgICAgICAgMCwgMCwKLSNlbHNlCi0iam9iLWNvbnRyb2wiLCAgICAgICAgICAxLCAw LAotI2VuZGlmIC8qIFVOSVggKi8KLSNlbHNlCi0iam9iLWNvbnRyb2wiLCAgICAgICAgICAxLCAw LAotI2VuZGlmIC8qIE5PSkMgKi8KLSNpZmRlZiBLQU5KSQotImthbmppIiwgICAgICAgICAgICAg ICAgMCwgMCwKLSNlbHNlCi0ia2FuamkiLCAgICAgICAgICAgICAgICAxLCAwLAotI2VuZGlmIC8q IEtBTkpJICovCi0KLSNpZm5kZWYgTk9YRkVSCi0ia2VybWl0IiwgICAgICAgICAgICAgICAwLCAw LAotI2Vsc2UKLSJrZXJtaXQiLCAgICAgICAgICAgICAgIDEsIDAsCi0jZW5kaWYgLyogTk9YRkVS ICovCi0KLSNpZmRlZiBDS19LRVJCRVJPUwotImtlcmJlcm9zIiwgICAgICAgICAgICAgMCwgMCwK LSNlbHNlCi0ia2VyYmVyb3MiLCAgICAgICAgICAgICAxLCAwLAotI2VuZGlmIC8qIENLX0tFUkJF Uk9TICovCi0KLSNpZm5kZWYgTk9DU0VUUwotImxhdGluMSIsICAgICAgICAgICAgICAgMCwgMCwK LSNlbHNlCi0ibGF0aW4xIiwgICAgICAgICAgICAgICAxLCAwLAotI2VuZGlmIC8qIE5PQ1NFVFMg Ki8KLSNpZmRlZiBMQVRJTjIKLSJsYXRpbjIiLCAgICAgICAgICAgICAgIDAsIDAsCi0jZWxzZQot ImxhdGluMiIsICAgICAgICAgICAgICAgMSwgMCwKLSNlbmRpZiAvKiBMQVRJTjIgKi8KLQotI2lm ZGVmIENLTEVBUk4KLSJsZWFybmVkLXNjcmlwdHMiLCAgICAgICAwLCAwLAotI2Vsc2UKLSJsZWFy bmVkLXNjcmlwdHMiLCAgICAgICAxLCAwLAotI2VuZGlmIC8qIENLTEVBUk4gKi8KLQotI2lmbmRl ZiBOT0xPQ0FMCi0ibWFraW5nLWNvbm5lY3Rpb25zIiwgICAwLCAwLAotI2Vsc2UKLSJtYWtpbmct Y29ubmVjdGlvbnMiLCAgIDEsIDAsCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0jaWZkZWYgTkVU Q09OTgotIm5ldHdvcmsiLCAgICAgICAgICAgICAgMCwgMCwKLSNlbHNlCi0ibmV0d29yayIsICAg ICAgICAgICAgICAxLCAwLAotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQotI2lmZGVmIE5UCi0jaWZk ZWYgQ0tfQVVUSEVOVElDQVRJT04KLSJudGxtIiwgICAgICAgICAgICAgICAgIDEsIDAsCi0jZWxz ZSAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotIm50bG0iLCAgICAgICAgICAgICAgICAgMCwgMCwK LSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotI2Vsc2UgLyogTlQgKi8KLSJudGxtIiwg ICAgICAgICAgICAgICAgIDAsIDAsCi0jZW5kaWYgLyogTlQgKi8KLQotI2lmZGVmIFBJUEVTRU5E Ci0icGlwZXMiLCAgICAgICAgICAgICAgICAwLCAwLAotI2Vsc2UKLSNpZmRlZiBORVRDTUQKLSJw aXBlcyIsICAgICAgICAgICAgICAgIDAsIDAsCi0jZW5kaWYgLyogTkVUQ01EICovCi0jZW5kaWYg LyogUElQRVNFTkQgKi8KLSNpZm5kZWYgUElQRVNFTkQKLSNpZm5kZWYgTkVUQ01ECi0icGlwZXMi LCAgICAgICAgICAgICAgICAxLCAwLAotI2VuZGlmIC8qIFBJUEVTRU5EICovCi0jZW5kaWYgLyog TkVUQ01EICovCi0KLSNpZmRlZiBORVRQVFkKLSJwdHkiLCAgICAgICAgICAgICAgICAgIDAsIDAs Ci0jZWxzZQotInB0eSIsICAgICAgICAgICAgICAgICAgMSwgMCwKLSNlbmRpZiAvKiBORVRQVFkg Ki8KLQotI2lmbmRlZiBOT1BVU0gKLSJwdXNoIiwgICAgICAgICAgICAgICAgIDAsIDAsCi0jZWxz ZQotInB1c2giLCAgICAgICAgICAgICAgICAgMSwgMCwKLSNlbmRpZiAvKiBQVVNIICovCi0KLSNp ZmRlZiBDS19SRURJUgotInJlZGlyZWN0IiwgICAgICAgICAgICAgMCwgMCwKLSNlbHNlCi0icmVk aXJlY3QiLCAgICAgICAgICAgICAxLCAwLAotI2VuZGlmIC8qIENLX1JFRElSICovCi0KLSNpZmRl ZiBDS19SVFNDVFMKLSJydHMvY3RzIiwgICAgICAgICAgICAgIDAsIDAsCi0jZWxzZQotInJ0cy9j dHMiLCAgICAgICAgICAgICAgMSwgMCwKLSNlbmRpZiAvKiBSVFMvQ1RTICovCi0KLSNpZm5kZWYg Tk9TQ1JJUFQKLSJzY3JpcHQtY29tbWFuZCIsICAgICAgIDAsIDAsCi0jZWxzZQotInNjcmlwdC1j b21tYW5kIiwgICAgICAgMSwgMCwKLSNlbmRpZiAvKiBOT1NDUklQVCAqLwotI2lmbmRlZiBOT1NF UlZFUgotInNlcnZlci1tb2RlIiwgICAgICAgICAgMCwgMCwKLSNlbHNlCi0ic2VydmVyLW1vZGUi LCAgICAgICAgICAxLCAwLAotI2VuZGlmIC8qIE5PU0VSVkVSICovCi0KLSNpZm5kZWYgTk9TRVhQ Ci0ic2V4cHJlc3Npb24iLCAgICAgICAgICAwLCAwLAotI2Vsc2UKLSJzZXhwcmVzc2lvbiIsICAg ICAgICAgIDEsIDAsCi0jZW5kaWYgLyogTk9TRVhQICovCi0KLSNpZmRlZiBTRlRQX0JVSUxUSU4K LSJzZnRwIiwgICAgICAgICAgICAgICAgIDEsIDAsCi0jZWxzZQotInNmdHAiLCAgICAgICAgICAg ICAgICAgMCwgMCwKLSNlbmRpZiAvKiBTRlRQX0JVSUxUSU4gKi8KLQotI2lmbmRlZiBOT1NIT1cK LSJzaG93LWNvbW1hbmQiLCAgICAgICAgIDAsIDAsCi0jZWxzZQotInNob3ctY29tbWFuZCIsICAg ICAgICAgMSwgMCwKLSNlbmRpZiAvKiBOT1NIT1cgKi8KLQotI2lmZGVmIENLX1NSUAotInNycCIs ICAgICAgICAgICAgICAgICAgMCwgMCwKLSNlbHNlCi0ic3JwIiwgICAgICAgICAgICAgICAgICAx LCAwLAotI2VuZGlmIC8qIENLX1NSUCAqLwotCi0jaWZkZWYgU1NIQlVJTFRJTgotInNzaCIsICAg ICAgICAgICAgICAgICAgMCwgMCwKLSNlbHNlIC8qIFNTSEJVSUxUSU4gKi8KLSJzc2giLCAgICAg ICAgICAgICAgICAgIDEsIDAsCi0jZW5kaWYgLyogU1NIQlVJTFRJTiAqLwotCi0jaWZkZWYgQ0tf U1NMCi0ic3NsL3RscyIsICAgICAgICAgICAgICAwLCAwLAotI2Vsc2UKLSJzc2wvdGxzIiwgICAg ICAgICAgICAgIDEsIDAsCi0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSNpZm5kZWYgTk9YTUlUCi0i dHJhbnNtaXQiLCAgICAgICAgICAgICAwLCAwLAotI2Vsc2UKLSJ0cmFuc21pdCIsICAgICAgICAg ICAgIDEsIDAsCi0jZW5kaWYgLyogTk9YTUlUICovCi0KLSNpZmRlZiBVTklDT0RFCi0idW5pY29k ZSIsICAgICAgICAgICAgICAwLCAwLAotI2Vsc2UKLSJ1bmljb2RlIiwgICAgICAgICAgICAgIDEs IDAsCi0jZW5kaWYgLyogVU5JQ09ERSAqLwotCi0jaWZkZWYgQ0tfWFlaCi0ieHl6bW9kZW0iLCAg ICAgICAgICAgICAwLCAwLAotI2Vsc2UKLSJ4eXptb2RlbSIsICAgICAgICAgICAgIDEsIDAsCi0j ZW5kaWYgLyogQ0tfWFlaICovCi0KLSIiLCAwLCAwCi19OwotaW50IG5mdHIgPSAoc2l6ZW9mKGZ0 cnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLQotc3RydWN0IGtleXRhYiBkZXN0 dGFiW10gPSB7ICAgICAgICAgICAgIC8qIFNFVCBERVNUSU5BVElPTiAqLwotI2lmZGVmIENBTElC UkFURQotICAgICJjYWxpYnJhdGUiLCBERVNUX04sIENNX0lOViwKLSNlbmRpZiAvKiBDQUxJQlJB VEUgKi8KLSAgICAiZGlzayIsICAgIERFU1RfRCwgMCwKLSNpZmRlZiBDQUxJQlJBVEUKLSAgICAi bm93aGVyZSIsIERFU1RfTiwgMCwKLSNlbmRpZiAvKiBDQUxJQlJBVEUgKi8KLSAgICAicHJpbnRl ciIsIERFU1RfUCwgMCwKLSAgICAic2NyZWVuIiwgIERFU1RfUywgMAotfTsKLWludCBuZGVzdHMg PSAgKHNpemVvZihkZXN0dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLSNpZm5kZWYg Tk9TUEwgICAgICAgICAgIC8qIFVzZWQgb25seSB3aXRoIHNjcmlwdCBwcm9ncmFtbWluZyBpdGVt cy4uLiAqLwotCi0jaWZuZGVmIE5PU0VSVkVSICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhp cyBpcyBqdXN0IHRvIGF2b2lkIHNvbWUgKi8KLSNkZWZpbmUgQ0tfUEFSU0RJUiAgICAgICAgICAg ICAgICAgICAgICAvKiAic3RhdGVtZW50IG5vdCByZWFjaGVkIiAqLwotI2Vsc2UgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbXBsYWludHMuLi4gKi8KLSNpZm5kZWYgTk9E SUFMCi0jZGVmaW5lIENLX1BBUlNESVIKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLSNlbmRpZiAvKiBO T1NFUlZFUiAqLwotCi0vKgotICBjeCA9PSAwIG1lYW5zIGRpYWwgZGlyZWN0b3J5Ci0gIGN4ID09 IDEgbWVhbnMgbmV0d29yayBkaXJlY3RvcnkKLSAgY3ggPT0gMiBtZWFucyBhIGRpcmVjdG9yeSBw YXRoIGxpc3QKLSovCi1zdGF0aWMgaW50Ci1wYXJzZGlyKGN4KSBpbnQgY3g7IHsKLSAgICBpbnQg aSwgeCwgeSwgZGQ7ICAgICAgICAgICAgICAgICAgICAvKiBXb3JrZXJzICovCi0gICAgaW50IG54 ZGlyOwotICAgIGNoYXIgKnM7Ci0gICAgY2hhciAqKiB4ZGlyOwotICAgIGNoYXIgKnBwW01BWEdF VFBBVEhdOyAgICAgICAgICAgICAgIC8qIFRlbXBvcmFyeSBuYW1lIHBvaW50ZXJzICovCi0jaWZk ZWYgWkZOUUZQCi0gICAgc3RydWN0IHpmbmZwICogZm5wOwotI2lmZGVmIE9TMgotICAgIGNoYXIg KiBlbnY7Ci0gICAgY2hhciBkaXJwYXRoWzQwOTZdOwotI2Vsc2UgLyogT1MyICovCi0gICAgY2hh ciBkaXJwYXRoWzEwMjRdOyAgICAgICAgICAgICAgICAgLyogRm9yIGZ1bGx5IHF1YWxpZmllZCBm aWxlbmFtZXMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBaRk5RRlAgKi8KLQotICAg IGludCBtYXggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1heGltdW0gbnVtYmVyIG9m IHRoaW5ncyB0byBwYXJzZSAqLwotICAgIGNoYXIgYzsKLQotI2lmbmRlZiBOT0RJQUwKLSAgICBp ZiAoY3ggPT0gMCkgeyAgICAgICAgICAgICAgICAgICAgICAvKiBEaWFsaW5nICovCi0gICAgICAg IG54ZGlyID0gbmRpYWxkaXI7Ci0gICAgICAgIHhkaXIgPSBkaWFsZGlyOwotICAgICAgICBtYXgg PSBNQVhERElSOwotICAgIH0gZWxzZQotI2lmZGVmIE5FVENPTk4KLSAgICBpZiAoY3ggPT0gMSkg eyAgICAgICAgICAgICAgICAgICAgICAvKiBOZXR3b3JrICovCi0gICAgICAgIG54ZGlyID0gbm5l dGRpcjsKLSAgICAgICAgeGRpciA9IG5ldGRpcjsKLSAgICAgICAgbWF4ID0gTUFYRERJUjsKLSAg ICB9IGVsc2UKLSNlbmRpZiAvKiBORVRDT05OICovCi0jZW5kaWYgLyogTk9ESUFMICovCi0jaWZu ZGVmIE5PU0VSVkVSCi0gICAgaWYgKGN4ID09IDIpIHsgICAgICAgICAgICAgICAgICAgICAgLyog R0VUIHBhdGggKi8KLSAgICAgICAgbnhkaXIgPSBuZ2V0cGF0aDsKLSAgICAgICAgeGRpciA9IGdl dHBhdGg7Ci0gICAgICAgIG1heCA9IE1BWEdFVFBBVEg7Ci0gICAgfSBlbHNlICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogQ2FsbGVkIHdpdGggaW52YWxpZCBmdW5jdGlvbiBjb2RlICov Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLSAgICAgIHJldHVybigtMik7Ci0KLSAgICBmb3IgKGkg PSAwOyBpIDwgTUFYR0VUUEFUSDsgaSsrKSAgICAvKiBJbml0IHRoZXNlLiAqLwotICAgICAgcHBb aV0gPSBOVUxMOwotCi0jaWZkZWYgQ0tfUEFSU0RJUgotICAgIGRkID0gMDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFRlbXBvcmFyeSBuYW1lIGNvdW50ZXIgKi8KLSAgICB3aGlsZSAo MSkgewotICAgICAgICBpZiAoY3ggIT0gMikgeyAgICAgICAgICAgICAgICAgIC8qIERpYWxpbmcg b3IgTmV0d29yayBEaXJlY3RvcnkgKi8KLSNpZmRlZiBPUzIKLSAgICAgICAgICAgIGludCBsZW47 Ci0gICAgICAgICAgICBjaGFyICogYXBwZGF0YTAgPSBOVUxMLCAqIGFwcGRhdGExID0gTlVMTDsK LSNpZmRlZiBOVAotICAgICAgICAgICAgZW52ID0gZ2V0ZW52KCJLOTVQSE9ORVMiKTsKLSAgICAg ICAgICAgIG1ha2VzdHIoJmFwcGRhdGEwLChjaGFyICopR2V0QXBwRGF0YSgwKSk7Ci0gICAgICAg ICAgICBtYWtlc3RyKCZhcHBkYXRhMSwoY2hhciAqKUdldEFwcERhdGEoMSkpOwotI2Vsc2UgLyog TlQgKi8KLSAgICAgICAgICAgIGVudiA9IGdldGVudigiSzJQSE9ORVMiKTsKLSNlbmRpZiAvKiBO VCAqLwotICAgICAgICAgICAgaWYgKCFlbnYpCi0gICAgICAgICAgICAgIGVudiA9IGdldGVudigi Szk1UEhPTkVTIik7Ci0gICAgICAgICAgICBpZiAoIWVudikKLSAgICAgICAgICAgICAgZW52ID0g IiI7Ci0KLSAgICAgICAgICAgIGRpcnBhdGhbMF0gPSAnXDAnOwotICAgICAgICAgICAgbGVuID0g c3RybGVuKGVudikgKyAyKnN0cmxlbihzdGFydHVwZGlyKSArIDIqc3RybGVuKGluaWRpcikKLSAg ICAgICAgICAgICAgICArIChhcHBkYXRhMD8yKnN0cmxlbihhcHBkYXRhMCk6MCkgCi0gICAgICAg ICAgICAgICAgKyAoYXBwZGF0YTE/MipzdHJsZW4oYXBwZGF0YTEpOjApCi0gICAgICAgICAgICAg ICAgKyAyKnN0cmxlbih6aG9tZSgpKSArIDIqc3RybGVuKGV4ZWRpcikgKyA4KnN0cmxlbigiUEhP TkVTLyIpCi0gICAgICAgICAgICAgICAgKyAxMjsKLSAgICAgICAgICAgIGlmIChsZW4gPCA0MDk2 KSAgICAgICAgICAgICAvKiBTQUZFICovCi0gICAgICAgICAgICAgIHNwcmludGYoZGlycGF0aCwK LSAgICAgICAgICAgICAgICAgICAgIiVzJXMlczslcyVzOyVzJXMlcyVzJXMlcyVzJXMlczslcyVz OyVzOyVzJXMiLAotICAgICAgICAgICAgICAgICAgICAvKiBTZW1pY29sb24tc2VwYXJhdGVkIHBh dGggbGlzdCAqLwotICAgICAgICAgICAgICAgICAgICBlbnYsCi0gICAgICAgICAgICAgICAgICAg IChlbnZbMF0gJiYgZW52W3N0cmxlbihlbnYpLTFdID09ICc7JykgPyAiIiA6ICI7IiwKLSAgICAg ICAgICAgICAgICAgICAgc3RhcnR1cGRpciwKLSAgICAgICAgICAgICAgICAgICAgc3RhcnR1cGRp ciwgIlBIT05FUy8iLAotICAgICAgICAgICAgICAgICAgICBhcHBkYXRhMSA/IGFwcGRhdGExIDog IiIsIAotICAgICAgICAgICAgICAgICAgICBhcHBkYXRhMSA/ICJLZXJtaXQgOTU7IiA6ICIiLAot ICAgICAgICAgICAgICAgICAgICBhcHBkYXRhMSA/IGFwcGRhdGExIDogIiIsIAotICAgICAgICAg ICAgICAgICAgICBhcHBkYXRhMSA/ICJLZXJtaXQgOTUvUEhPTkVTLzsiIDogIiIsCi0gICAgICAg ICAgICAgICAgICAgIGFwcGRhdGEwID8gYXBwZGF0YTAgOiAiIiwgCi0gICAgICAgICAgICAgICAg ICAgIGFwcGRhdGEwID8gIktlcm1pdCA5NTsiIDogIiIsCi0gICAgICAgICAgICAgICAgICAgIGFw cGRhdGEwID8gYXBwZGF0YTAgOiAiIiwgCi0gICAgICAgICAgICAgICAgICAgIGFwcGRhdGEwID8g Iktlcm1pdCA5NS9QSE9ORVMvOyIgOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgaW5pZGlyLAot ICAgICAgICAgICAgICAgICAgICBpbmlkaXIsICJQSE9ORVMvIiwKLSAgICAgICAgICAgICAgICAg ICAgemhvbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgemhvbWUoKSwgIlBIT05FUy8iLAotICAg ICAgICAgICAgICAgICAgICBleGVkaXIsCi0gICAgICAgICAgICAgICAgICAgIGV4ZWRpciwgIlBI T05FUy8iCi0gICAgICAgICAgICAgICAgICAgICk7Ci0jaWZkZWYgTlQKLSAgICAgICAgICAgIG1h a2VzdHIoJmFwcGRhdGEwLE5VTEwpOwotICAgICAgICAgICAgbWFrZXN0cigmYXBwZGF0YTEsTlVM TCk7Ci0jZW5kaWYgLyogTlQgKi8KLSNlbHNlCi0jaWZkZWYgVU5JWAotICAgICAgICAgICAgeSA9 IDEwMjQ7Ci0gICAgICAgICAgICBzID0gZGlycGF0aDsKLSAgICAgICAgICAgIHp6c3RyaW5nKCJc XHYoaG9tZSkiLCZzLCZ5KTsKLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogT1MyICovCi0g ICAgICAgICAgICB5ID0gY21pZmlwKAotICAgICAgICAgICAgICAgICAgIk5hbWVzIG9mIG9uZSBv ciBtb3JlIGRpcmVjdG9yeSBmaWxlcywgc2VwYXJhdGVkIGJ5IHNwYWNlcyIsCi0gICAgICAgICAg ICAgICAgICAgICAgICIiLCZzLCZ4LDAsCi0jaWZkZWYgT1MyT1JVTklYCi0gICAgICAgICAgICAg ICAgICAgICAgIGRpcnBhdGgsCi0jZWxzZQotICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAot I2VuZGlmIC8qIE9TMk9SVU5JWCAqLwotICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZwot ICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIExpc3Qgb2YgZGlyZWN0b3J5IG5hbWVzICovCi0gICAgICAgICAgICB4ID0g MDsKLSAgICAgICAgICAgIHkgPSBjbWRpcigiRGlyZWN0b3J5IG5hbWUiLCIiLCZzLHh4c3RyaW5n KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoeSA8IDApIHsKLSAgICAgICAgICAgIGlmICh5ID09 IC0zKSB7ICAgICAgICAgICAgICAvKiBFT0wgb3IgdXNlciB0eXBlZCA8Q1I+ICovCi0gICAgICAg ICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgICAgICAg ICAgZm9yIChpID0gMDsgaSA8IG1heDsgaSsrKSB7IC8qIENsZWFyIHRoZXNlICovCi0gICAgICAg ICAgICAgICAgICAgIGlmIChpIDwgbnhkaXIgJiYgeGRpcltpXSkgewotICAgICAgICAgICAgICAg ICAgICAgICAgZnJlZSh4ZGlyW2ldKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgICAgICB4ZGlyW2ldID0gKGkgPCBkZCkgPyBwcFtpXSA6IE5VTEw7Ci0gICAgICAgICAg ICAgICAgfQotI2lmbmRlZiBOT0RJQUwKLSAgICAgICAgICAgICAgICBpZiAoY3ggPT0gMCkKLSAg ICAgICAgICAgICAgICAgIG5kaWFsZGlyID0gZGQ7Ci0jaWZkZWYgTkVUQ09OTgotICAgICAgICAg ICAgICAgIGlmIChjeCA9PSAxKQotICAgICAgICAgICAgICAgICAgbm5ldGRpciA9IGRkOwotI2Vu ZGlmIC8qIE5FVENPTk4gKi8KLSNlbmRpZiAvKiBOT0RJQUwgKi8KLSNpZm5kZWYgTk9TRVJWRVIK LSAgICAgICAgICAgICAgICBpZiAoY3ggPT0gMikKLSAgICAgICAgICAgICAgICAgIG5nZXRwYXRo ID0gZGQ7Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLSAgICAgICAgICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDEpOwotCi0gICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgLyog UGFyc2UgZXJyb3IgKi8KLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZGQ7IGkrKykg eyAgLyogRnJlZSB0ZW1wIHN0b3JhZ2UgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBwW2ld KSBmcmVlKHBwW2ldKTsgLyogYnV0IGRvbid0IGNoYW5nZSAqLwotICAgICAgICAgICAgICAgICAg ICBwcFtpXSA9IE5VTEw7ICAgICAgICAgICAvKiBhbnl0aGluZyBlbHNlICovCi0gICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgfQotICAgICAgICBpZiAoeCkgewotICAgICAgICAgICAgcHJpbnRmKCI/V2lsZGNhcmRzIG5v dCBhbGxvd2VkXG4iKTsKLSAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0KLSNpZmRl ZiBDS19UTVBESVIKLSAgICAgICAgaWYgKGN4ID09IDIgJiYgIWlzZGlyKHMpKSB7Ci0gICAgICAg ICAgICBwcmludGYoIj9Ob3QgYSBkaXJlY3RvcnkgLSAlc1xuIiwgcyk7Ci0gICAgICAgICAgICBy ZXR1cm4oLTkpOwotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfVE1QRElSICovCi0KLSNpZmRlZiBa Rk5RRlAKLSAgICAgICAgaWYgKGN4IDwgMikgewotICAgICAgICAgICAgaWYgKCFpc2Fic29sdXRl KHMpKSB7ICAgICAgIC8qIElmIG5vdCByZWxhdGl2ZSBnZXQgZnVsbCBwYXRoICovCi0gICAgICAg ICAgICAgICAgaWYgKChmbnAgPSB6Zm5xZnAocyxUTVBCVUZTSVogLSAxLHRtcGJ1ZikpKSB7Ci0g ICAgICAgICAgICAgICAgICAgIGlmIChmbnAtPmZwYXRoKQotICAgICAgICAgICAgICAgICAgICAg IGlmICgoaW50KSBzdHJsZW4oZm5wLT5mcGF0aCkgPiAwKQotICAgICAgICAgICAgICAgICAgICAg ICAgcyA9IGZucC0+ZnBhdGg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg ICAgICB9Ci0jZW5kaWYgLyogWkZOUUZQICovCi0gICAgICAgIGMgPSBOVUw7Ci0gICAgICAgIHgg PSBzdHJsZW4ocyk7Ci0gICAgICAgIGlmICh4ID4gMCkgICAgICAgICAgICAgICAgICAgICAgLyog R2V0IGxhc3QgY2hhciAqLwotICAgICAgICAgIGMgPSBzW3gtMV07Ci0gICAgICAgIGRlYnVnKEYw MDAsInBhcnNkaXIgcyIscyxjKTsKLSAgICAgICAgaWYgKChwcFtkZF0gPSBtYWxsb2Moc3RybGVu KHMpKzIpKSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9JbnRlcm5hbCBlcnJvciAt IG1hbGxvY1xuIik7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZGQ7IGkrKykgeyAgLyog RnJlZSB0ZW1wIHN0b3JhZ2UgKi8KLSAgICAgICAgICAgICAgICBpZiAocHBbaV0pIGZyZWUocHBb aV0pOwotICAgICAgICAgICAgICAgIHBwW2ldID0gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAg ICAgLyogSGF2ZSBzdG9yYWdlIGZvciBuYW1lICovCi0gICAgICAgICAgICBzdHJjcHkocHBbZGRd LHMpOyAgICAgICAgICAgLyogQ29weSBzdHJpbmcgaW50byBuZXcgc3RvcmFnZSAqLwotICAgICAg ICAgICAgZGVidWcoRjExMSwicGFyc2RpciBwcFtkZF0gMSIscHBbZGRdLGRkKTsKLSNpZm5kZWYg Tk9YRkVSCi0gICAgICAgICAgICBpZiAoY3ggPT0gMikgeyAgICAgICAgICAgICAgLyogSWYgd2Ug YXJlIHBhcnNpbmcgZGlyZWN0b3JpZXMgKi8KLSAgICAgICAgICAgICAgICBjaGFyIGRpcnNlcFsy XTsKLSAgICAgICAgICAgICAgICBleHRlcm4gaW50IG15aW5kZXg7ICAgICAvKiBBcHBlbmQgZGly ZWN0b3J5IHNlcGFyYXRvciBpZiAqLwotICAgICAgICAgICAgICAgIGV4dGVybiBzdHJ1Y3Qgc3lz ZGF0YSBzeXNpZGxpc3RbXTsgLyogaXQgaXMgbWlzc2luZy4uLiAgICovCi0gICAgICAgICAgICAg ICAgZGVidWcoRjEwMSwicGFyc2RpciBteWluZGV4IiwiIixteWluZGV4KTsKLSAgICAgICAgICAg ICAgICBpZiAobXlpbmRleCA+IC0xKQotICAgICAgICAgICAgICAgICAgaWYgKHN5c2lkbGlzdFtt eWluZGV4XS5zaWRfdW5peGxpa2UpCi0gICAgICAgICAgICAgICAgICAgIGlmIChjICE9IHN5c2lk bGlzdFtteWluZGV4XS5zaWRfZGlyc2VwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaXJz ZXBbMF0gPSBzeXNpZGxpc3RbbXlpbmRleF0uc2lkX2RpcnNlcDsKLSAgICAgICAgICAgICAgICAg ICAgICAgIGRpcnNlcFsxXSA9IE5VTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNhdChw cFtkZF0sIChjaGFyICopIGRpcnNlcCk7IC8qIHNhZmUgKi8KLSAgICAgICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgfQotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgICAgICAgICAgZGVidWco RjExMSwicGFyc2RpciBwcFtkZF0gMiIscHBbZGRdLGRkKTsKLSAgICAgICAgICAgIGlmICgrK2Rk ID4gbWF4KSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/VG9vIG1hbnkgZGlyZWN0b3JpZXMg LSAlZCBtYXhcbiIsIG1heCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGRkOyBp KyspIHsgIC8qIEZyZWUgdGVtcCBzdG9yYWdlICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChw cFtpXSkgZnJlZShwcFtpXSk7Ci0gICAgICAgICAgICAgICAgICAgIHBwW2ldID0gTlVMTDsKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYg LyogQ0tfUEFSU0RJUiAqLwotfQotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5kZWYgTk9TRVJW RVIKLXN0YXRpYyBpbnQKLWNrbG9naW4oKSB7Ci0gICAgaW50IHg7Ci0gICAgY2hhciAqIHM7Ci0g ICAgY2hhciB1c2VybmFtZVtMT0dJTkxFTisxXTsKLSAgICBjaGFyIHBhc3N3b3JkW0xPR0lOTEVO KzFdOwotICAgIGNoYXIgYWNjb3VudFtMT0dJTkxFTisxXTsKLSAgICBleHRlcm4gY2hhciAqIHhf dXNlciwgKiB4X3Bhc3N3ZCwgKiB4X2FjY3Q7Ci0gICAgZXh0ZXJuIGludCB4X2xvZ2luLCB4X2xv Z2dlZDsKLQotICAgIHVzZXJuYW1lWzBdID0gTlVMOwotICAgIHBhc3N3b3JkWzBdID0gTlVMOwot ICAgIGFjY291bnRbMF0gID0gTlVMOwotCi0gICAgeCA9IGNtZmxkKCJ1c2VybmFtZSIsICIiLCAm cywgeHhzdHJpbmcpOwotICAgIGlmICh4ICE9IC0zKSB7Ci0gICAgICAgIGlmICh4IDwgMCkKLSAg ICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIGlmICgoaW50KXN0cmxlbihzKSA+IExPR0lOTEVO KSB7Ci0gICAgICAgICAgICBwcmludGYoIlwiJXNcIiAtIHRvbyBsb25nLCAlZCBtYXhcbiIsIHMs IExPR0lOTEVOKTsKLSAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0KLSAgICAgICAg Y2tzdHJuY3B5KHVzZXJuYW1lLHMsTE9HSU5MRU4rMSk7Ci0gICAgICAgIHggPSBjbWZsZCgicGFz c3dvcmQiLCAiIiwgJnMsIHh4c3RyaW5nKTsKLSAgICAgICAgaWYgKHggIT0gLTMpIHsKLSAgICAg ICAgICAgIGlmICh4IDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAg aWYgKChpbnQpc3RybGVuKHMpID4gTE9HSU5MRU4pIHsKLSAgICAgICAgICAgICAgICBwcmludGYo IlwiJXNcIiAtIHRvbyBsb25nLCAlZCBtYXhcbiIsIHMsIExPR0lOTEVOKTsKLSAgICAgICAgICAg ICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2tzdHJuY3B5KHBh c3N3b3JkLHMsTE9HSU5MRU4rMSk7Ci0gICAgICAgICAgICB4ID0gY21mbGQoImFjY291bnQiLCAi IiwgJnMsIHh4c3RyaW5nKTsKLSAgICAgICAgICAgIGlmICh4ICE9IC0zKSB7Ci0gICAgICAgICAg ICAgICAgaWYgKHggPCAwKQotICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAg ICAgICAgIGlmICgoaW50KXN0cmxlbihzKSA+IExPR0lOTEVOKSB7Ci0gICAgICAgICAgICAgICAg ICAgIHByaW50ZigiXCIlc1wiIC0gdG9vIGxvbmcsICVkIG1heFxuIiwgcywgTE9HSU5MRU4pOwot ICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICBja3N0cm5jcHkoYWNjb3VudCxzLExPR0lOTEVOKzEpOwotICAgICAgICAgICAg ICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAgICAgIHJldHVybih4KTsK LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBtYWtlc3RyKCZ4X3VzZXIsdXNl cm5hbWUpOwotICAgIG1ha2VzdHIoJnhfcGFzc3dkLHBhc3N3b3JkKTsKLSAgICBtYWtlc3RyKCZ4 X2FjY3QsYWNjb3VudCk7Ci0gICAgeF9sb2dpbiA9ICh4X3VzZXIpID8gMSA6IDA7Ci0gICAgeF9s b2dnZWQgPSAwOwotICAgIHJldHVybigxKTsKLX0KLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotCi0j aWZuZGVmIE5PTE9DQUwKLXN0YXRpYyBpbnQKLXNldGRjZCgpIHsKLSAgICBpbnQgeCwgeSwgeiA9 IDA7Ci0gICAgaWYgKCh5ID0gY21rZXkoY3JydGFiLG5jcnIsIiIsImF1dG9tYXRpYyIseHhzdHJp bmcpKSA8IDApIHJldHVybih5KTsKLSAgICBpZiAoeSA9PSBDQVJfT04pIHsKLSAgICAgICAgeCA9 IGNtbnVtKCJDYXJyaWVyIHdhaXQgdGltZW91dCwgc2Vjb25kcyIsIjAiLDEwLCZ6LHh4c3RyaW5n KTsKLSAgICAgICAgaWYgKHggPCAwKSByZXR1cm4oeCk7Ci0gICAgfQotICAgIGlmICgoeCA9IGNt Y2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgIGNhcnJpZXIgPSB0dHNjYXJyKHkpOwotICAgIGNk dGltbyA9IHo7Ci0gICAgcmV0dXJuKDEpOwotfQotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotZXh0 ZXJuIHN0cnVjdCBrZXl0YWIgeWVzbm9bXTsKLWV4dGVybiBpbnQgbnllc25vOwotCi0vKiBnIGUg dCB5IGUgcyBuIG8gICovCi0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHEweWVzbm9bXSA9IHsgICAg ICAvKiBZZXMvTm8vUXVpdCBrZXl3b3JkIHRhYmxlICovCi0gICAgIm5vIiwgICAgMCwgMCwKLSAg ICAib2siLCAgICAxLCAwLAotICAgICJ5ZXMiLCAgIDEsIDAKLX07Ci1zdGF0aWMgaW50IG5xMHll c25vID0gKHNpemVvZihxMHllc25vKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLXN0YXRp YyBzdHJ1Y3Qga2V5dGFiIHExeWVzbm9bXSA9IHsgICAgICAvKiBZZXMvTm8vUXVpdCBrZXl3b3Jk IHRhYmxlICovCi0gICAgIm5vIiwgICAgMCwgMCwKLSAgICAib2siLCAgICAxLCAwLAotICAgICJx dWl0IiwgIDIsIDAsCi0gICAgInllcyIsICAgMSwgMAotfTsKLXN0YXRpYyBpbnQgbnExeWVzbm8g PSAoc2l6ZW9mKHExeWVzbm8pIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotc3RhdGljIHN0 cnVjdCBrZXl0YWIgcTJ5ZXNub1tdID0geyAgICAgIC8qIFllcy9Oby9RdWl0IGtleXdvcmQgdGFi bGUgKi8KLSAgICAiZ28iLCAgICAzLCAwLAotICAgICJubyIsICAgIDAsIDAsCi0gICAgIm9rIiwg ICAgMSwgMCwKLSAgICAieWVzIiwgICAxLCAwCi19Owotc3RhdGljIGludCBucTJ5ZXNubyA9IChz aXplb2YocTJ5ZXNubykgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi1zdGF0aWMgc3RydWN0 IGtleXRhYiBxM3llc25vW10gPSB7ICAgICAgLyogWWVzL05vL1F1aXQga2V5d29yZCB0YWJsZSAq LwotICAgICJnbyIsICAgIDMsIDAsCi0gICAgIm5vIiwgICAgMCwgMCwKLSAgICAib2siLCAgICAx LCAwLAotICAgICJxdWl0IiwgIDIsIDAsCi0gICAgInllcyIsICAgMSwgMAotfTsKLXN0YXRpYyBp bnQgbnEzeWVzbm8gPSAoc2l6ZW9mKHEzeWVzbm8pIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsK LQotCi0vKiBBc2sgcXVlc3Rpb24sIGdldCB5ZXMvbm8gYW5zd2VyICovCi0KLWludAotZ2V0eWVz bm8obXNnLCBmbGFncykgY2hhciAqIG1zZzsgaW50IGZsYWdzOyB7Ci0jaWZkZWYgQ0tfUkVDQUxM Ci0gICAgZXh0ZXJuIGludCBvbl9yZWNhbGw7ICAgICAgICAgICAgICAgLyogYXJvdW5kIFBhc3N3 b3JkIHByb21wdGluZyAqLwotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotICAgIGludCB5LCB6Owot Ci0jaWZuZGVmIE5PTE9DQUwKLSNpZmRlZiBPUzIKLSAgICBleHRlcm4gaW50IHZtb2RlLCB3aW45 NV9wb3B1cCwgc3RhcnRmbGFnczsKLSAgICBpbnQgdm1vZGVfc2F2ID0gdm1vZGU7Ci0jZW5kaWYg LyogT1MyICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0jaWZkZWYgQ0tfQVBDCi0gICAgaWYg KCBhcGNhY3RpdmUgIT0gQVBDX0lOQUNUSVZFICYmIChhcGNzdGF0dXMgJiBBUENfTk9JTlApICkg ewotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgIH0KLSNlbmRpZiAvKiBDS19BUEMg Ki8KLQotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0jaWZkZWYgQ09NTUVOVAotICAgIGlm ICh3aW45NV9wb3B1cCAmJiAhKHN0YXJ0ZmxhZ3MgJiA5NikKLSNpZmRlZiBJS1NECi0gICAgICAg ICYmICFpbnNlcnZlcgotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgICAgKQotICAgICAgcmV0dXJu KHBvcHVwX3JlYWR5ZXNubyh2bW9kZSxOVUxMLG1zZyxmbGFncykpOwotI2VuZGlmIC8qIENPTU1F TlQgKi8KLSAgICBpZiAodm1vZGUgPT0gVlRFUk0pIHsKLSAgICAgICAgdm1vZGUgPSBWQ01EOwot ICAgICAgICBWc2NybklzRGlydHkoVlRFUk0pOwotICAgICAgICBWc2NybklzRGlydHkoVkNNRCk7 Ci0gICAgfQotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNpZmRlZiBW TVMKLS8qCi0gIEluIFZNUywgd2hlbmV2ZXIgYSBUQUtFIGZpbGUgb3IgbWFjcm8gaXMgYWN0aXZl LCB3ZSByZXN0b3JlIHRoZQotICBvcmlnaW5hbCBjb25zb2xlIG1vZGVzIHNvIEN0cmwtQy9DdHJs LVkgY2FuIHdvcmsuICBCdXQgaGVyZSB3ZQotICBnbyBpbnRlcmFjdGl2ZSBhZ2Fpbiwgc28gd2Ug aGF2ZSB0byB0ZW1wb3JhcmlseSBwdXQgdGhlbSBiYWNrLgotKi8KLSAgICBpZiAoIXhjbWRzcmMp Ci0gICAgICBjb25jYigoY2hhcillc2NhcGUpOwotI2VuZGlmIC8qIFZNUyAqLwotCi0jaWZkZWYg Q0tfUkVDQUxMCi0gICAgb25fcmVjYWxsID0gMDsKLSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLSAg ICBjbXNhdnAocHNhdmUsUFJPTVBUTCk7ICAgICAgICAgICAgICAvKiBTYXZlIG9sZCBwcm9tcHQg Ki8KLSAgICBjbXNldHAobXNnKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYWtlIG5ldyBw cm9tcHQgKi8KLSAgICB6ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0 aWFsaXplIGFuc3dlciB0byBOby4gKi8KLSAgICBjbWluaShja3hlY2gpOyAgICAgICAgICAgICAg ICAgICAgICAvKiBJbml0aWFsaXplIHBhcnNlci4gKi8KLSAgICBkbyB7Ci0gICAgICAgIHByb21w dChOVUxMKTsgICAgICAgICAgICAgICAgICAgLyogSXNzdWUgcHJvbXB0LiAqLwotICAgICAgICBz d2l0Y2ggKGZsYWdzKSB7Ci0gICAgICAgICAgY2FzZSAwOiAgeSA9IGNta2V5KHEweWVzbm8sbnEw eWVzbm8sIiIsIiIsTlVMTCk7IGJyZWFrOwotICAgICAgICAgIGNhc2UgMTogIHkgPSBjbWtleShx MXllc25vLG5xMXllc25vLCIiLCIiLE5VTEwpOyBicmVhazsKLSAgICAgICAgICBjYXNlIDI6ICB5 ID0gY21rZXkocTJ5ZXNubyxucTJ5ZXNubywiIiwiIixOVUxMKTsgYnJlYWs7Ci0gICAgICAgICAg ZGVmYXVsdDogeSA9IGNta2V5KHEzeWVzbm8sbnEzeWVzbm8sIiIsIiIsTlVMTCk7Ci0gICAgICAg IH0KLSAgICAgICAgaWYgKHkgPCAwKSB7Ci0gICAgICAgICAgICBpZiAoeSA9PSAtNCkgeyAgICAg ICAgICAgICAgLyogRU9GICovCi0gICAgICAgICAgICAgICAgeiA9IHk7Ci0gICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHkgPT0gLTMpICAgICAgICAgLyogTm8g YW5zd2VyPyAqLwotICAgICAgICAgICAgICBwcmludGYoIiBQbGVhc2UgcmVzcG9uZDsgdHlwZSAn PycgdG8gc2VlIHZhbGlkIGFuc3dlcnMuXG4iKTsKLSAgICAgICAgICAgIGNtaW5pKGNreGVjaCk7 Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB6ID0geTsgICAgICAgICAgICAgICAgICAg ICAgLyogU2F2ZSBhbnN3ZXIgKi8KLSAgICAgICAgICAgIHkgPSBjbWNmbSgpOyAgICAgICAgICAg ICAgICAvKiBHZXQgY29uZmlybWF0aW9uICovCi0gICAgICAgIH0KLSAgICB9IHdoaWxlICh5IDwg MCk7ICAgICAgICAgICAgICAgICAgICAvKiBDb250aW51ZSB0aWxsIGRvbmUgKi8KLSAgICBjbXNl dHAocHNhdmUpOyAgICAgICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIHJlYWwgcHJvbXB0ICov Ci0jaWZkZWYgVk1TCi0gICAgaWYgKGNtZGx2bCA+IDApICAgICAgICAgICAgICAgICAgICAgLyog SW4gVk1TIGFuZCBub3QgYXQgdG9wIGxldmVsLCAqLwotICAgICAgY29ucmVzKCk7ICAgICAgICAg ICAgICAgICAgICAgICAgIC8qICByZXN0b3JlIGNvbnNvbGUgYWdhaW4uICovCi0jZW5kaWYgLyog Vk1TICovCi0jaWZuZGVmIE5PTE9DQUwKLSNpZmRlZiBPUzIKLSAgICBpZiAodm1vZGUgIT0gdm1v ZGVfc2F2KSB7Ci0gICAgICAgIHZtb2RlID0gVlRFUk07Ci0gICAgICAgIFZzY3JuSXNEaXJ0eShW Q01EKTsKLSAgICAgICAgVnNjcm5Jc0RpcnR5KFZURVJNKTsKLSAgICB9Ci0jZW5kaWYgLyogT1My ICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotICAgIHJldHVybih6KTsKLX0KLQotI2lmZGVmIEtV SQotZXh0ZXJuIEhXTkQgaHduZENvbnNvbGU7Ci1fUFJPVE9UWVAoaW50IGd1aV90eHRfZGlhbG9n LChjaGFyICosY2hhciAqLGludCxjaGFyICosaW50LGNoYXIgKixpbnQpKTsKLV9QUk9UT1RZUChp bnQgZ3VpX210eHRfZGlhbG9nLChjaGFyICosaW50LHN0cnVjdCB0eHRib3ggW10pKTsKLV9QUk9U T1RZUChpbnQgZ3VpX3Bvc2l0aW9uLChpbnQsIGludCkpOwotX1BST1RPVFlQKGludCBndWlfcmVz aXplX21vZGUsKGludCkpOwotX1BST1RPVFlQKGludCBndWlfd2luX3J1bl9tb2RlLChpbnQpKTsK LV9QUk9UT1RZUChpbnQgZ3VpX3NhdmVhc19kaWFsb2csKGNoYXIgKixjaGFyICosIGludCwgY2hh ciAqLCBjaGFyICosIGludCkpOwotZXh0ZXJuIGludCBndWlfZGlhbG9nOwotI2VuZGlmIC8qIEtV SSAqLwotCi0vKiB1IHEgXyBvIGsgIC0tICBVc2VyIFF1ZXJ5LCBnZXQgWWVzL05vIG9yIE9LIENh bmNlbCAgKi8KLS8qCi0gIENhbGwgd2l0aDogIAotICAgIHByZWZhY2U6IEV4cGxhbmF0b3J5IHRl eHQgdG8gcHJpbnQsIG9yIE5VTEwuCi0gICAgcHJvbXB0OiAgUHJvbXB0LgotICAgIG1hc2s6ICAg IEJpdG1hc2sgZm9yIGxlZ2FsIHJlc3BvbnNlczogMSA9IE9LIG9yIFllczsgMiA9IE5vIG9yIENh bmNlbC4KLSAgICBoZWxwOiAgICBIZWxwIHRleHQgKGFycmF5IG9mIHN0cmluZ3Mgb3IgTlVMTCkg W25vdCB1c2VkIGJ5IHBhcnNlcl0uCi0gICAgZGZsdDogICAgRGVmYXVsdCByZXNwb25zZSAoMSBv ciAyKSBbbm90IHVzZWQgYnkgcGFyc2VyXS4KLSAgUmV0dXJuczoKLSAgIC0xOiAgICAgICBJbnZh bGlkIGFyZ3VtZW50KHMpLgotICAgIDA6ICAgICAgIFVzZXIgc2FpZCBObyBvciBDYW5jZWwuCi0g ICAgMSAgICAgICAgVXNlciBzYWlkIFllcyBvciBPSy4gICAgCi0gIE5vdGVzOgotICAgIHByZWZh Y2UgYW5kIHByb21wdCBzaG91bGQgbm90IGluY2x1ZGUgZmluYWwgbGluZSB0ZXJtaW5hdG9yIGJ1 dCBtYXkKLSAgICBpbmNsdWRlIGVtYmVkZGVkIG9uZXMuICBIZWxwIHRleHQgaXMgaW4gY2FzZSBH VUkgZGlhbG9nIG5lZWRzIGEgSGVscAotICAgIGJ1dHRvbjsgZmluYWwgZWxlbWVudCBvZiBoZWxw LXN0cmluZyBhcnJheSBpcyAiIi4gIGRmbHQgaXMgdXNlZCBieSBHVUkKLSAgICB0byBoaWdobGln aHQgdGhlIGRlZmF1bHQgcmVzcG9uc2UgYnV0dG9uLgotKi8KLWludAotI2lmZGVmIENLX0FOU0lD Ci11cV9vayhjaGFyICogcHJlZmFjZSwgY2hhciAqIHByb21wdCwgaW50IG1hc2ssY2hhciAqKiBo ZWxwLCBpbnQgZGZsdCkKLSNlbHNlIC8qIENLX0FOU0lDICovCi11cV9vayhwcmVmYWNlLHByb21w dCxtYXNrLGhlbHAsZGZsdCkKLSAgICBjaGFyICogcHJlZmFjZSwgKiBwcm9tcHQsICoqIGhlbHA7 Ci0gICAgaW50IG1hc2ssIGRmbHQ7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHVxX29rICov IHsKLSAgICBpbnQgcmMsIGxlbjsKLSAgICBjaGFyICogdGV4dD1OVUxMOwotCi0gICAgaWYgKCFw cm9tcHQpCi0gICAgICByZXR1cm4oLTEpOwotCi0gICAgaWYgKChtYXNrICYgMykgPT0gMSkgewkJ LyogT0sgKEdVSSBvbmx5KSAqLwotI2lmZGVmIEtVSQotICAgICAgaWYgKCBndWlfZGlhbG9nICkg ewotCS8qIFRoaXMgb25lIGlzIGZvciBwb3B1cCBoZWxwLCBhbGVydHMsIGV0YyAqLwotICAgICAg ICBpZiAocHJlZmFjZSkgewotICAgICAgICAgICAgbGVuID0gc3RybGVuKHByZWZhY2UpICsgc3Ry bGVuKHByb21wdCkgKyA0OwotICAgICAgICAgICAgdGV4dCA9IChjaGFyICopbWFsbG9jKGxlbik7 Ci0gICAgICAgICAgICBja21ha21zZyh0ZXh0LGxlbixwcmVmYWNlLCJcbiIscHJvbXB0LE5VTEwp OwotICAgICAgICB9Ci0gICAgICAgIHJjID0gTWVzc2FnZUJveChod25kQ29uc29sZSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICB0ZXh0ID8gdGV4dCA6IHByb21wdCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICBwcm9tcHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTUJfT0sgfCBNQl9J Q09OSU5GT1JNQVRJT04gfCBNQl9UQVNLTU9EQUwpOwotICAgICAgICBTaG93V2luZG93QXN5bmMo aHduZENvbnNvbGUsU1dfU0hPV05PUk1BTCk7Ci0gICAgICAgIFNldEZvcmVncm91bmRXaW5kb3co aHduZENvbnNvbGUpOwotICAgICAgICBpZiAodGV4dCkKLQkgIGZyZWUodGV4dCk7Ci0gICAgICAg IGlmICghcmMpCi0JICByZXR1cm4oLTEpOwotICAgICAgICBlbHNlIAotCSAgcmV0dXJuKDEpOwot ICAgICAgfSBlbHNlCi0jZW5kaWYgIC8qIEtVSSAqLwotICAgICAgewotCWlmIChwcmVmYWNlKQkJ CS8qIEp1c3QgZGlzcGxheSB0aGUgdGV4dCwgaWYgYW55ICovCi0JICBwcmludGYoIiVzXG4iLHBy ZWZhY2UpOwotCWlmIChwcm9tcHQpCi0JICBwcmludGYoIiVzXG4iLHByb21wdCk7Ci0gICAgICAg IHJldHVybigxKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKChtYXNrICYgMykgPT0gMykgewkv KiBZZXMvTm8gb3IgT0svQ2FuY2VsICovCi0jaWZkZWYgS1VJCi0gICAgICBpZiAoIGd1aV9kaWFs b2cgKSB7Ci0gICAgICAgIGlmIChwcmVmYWNlKSB7Ci0gICAgICAgICAgICBsZW4gPSBzdHJsZW4o cHJlZmFjZSkgKyBzdHJsZW4ocHJvbXB0KSArIDQ7Ci0gICAgICAgICAgICB0ZXh0ID0gKGNoYXIg KiltYWxsb2MobGVuKTsKLSAgICAgICAgICAgIGNrbWFrbXNnKHRleHQsbGVuLHByZWZhY2UsIlxu Iixwcm9tcHQsTlVMTCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmMgPSBNZXNzYWdlQm94KGh3bmRD b25zb2xlLAotICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPyB0ZXh0IDogcHJvbXB0LAot ICAgICAgICAgICAgICAgICAgICAgICAgIHByb21wdCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICBNQl9ZRVNOTyB8IE1CX0lDT05JTkZPUk1BVElPTiB8IE1CX1RBU0tNT0RBTCB8IAotICAgICAg ICAgICAgICAgICAgICAgICAgIChkZmx0ID09IDIgPyBNQl9ERUZCVVRUT04yIDogTUJfREVGQlVU VE9OMSkpOwotICAgICAgICBTaG93V2luZG93QXN5bmMoaHduZENvbnNvbGUsU1dfU0hPV05PUk1B TCk7Ci0gICAgICAgIFNldEZvcmVncm91bmRXaW5kb3coaHduZENvbnNvbGUpOwotICAgICAgICBp ZiAodGV4dCkKLQkgIGZyZWUodGV4dCk7Ci0gICAgICAgIGlmICghcmMpCi0JICByZXR1cm4oLTEp OwotICAgICAgICBlbHNlIGlmIChyYyA9PSBJRE5PIHx8IHJjID09IElEQ0FOQ0VMKQotCSAgcmV0 dXJuKDApOwotICAgICAgICBlbHNlCi0JICByZXR1cm4oMSk7Ci0gICAgICB9IGVsc2UKLSNlbmRp ZiAgLyogS1VJICovCi0gICAgICB7Ci0JaWYgKHByZWZhY2UpCi0JICBwcmludGYoIiVzXG4iLHBy ZWZhY2UpOwotCXJldHVybihnZXR5ZXNubyhwcm9tcHQsMCkpOwotICAgICAgfQotICAgIH0gZWxz ZSB7Ci0JcHJpbnRmKCI/SW50ZXJuYWwgZXJyb3I6IHVxX29rKClcbiIpOwotCXJldHVybigtMSk7 Ci0gICAgfQotfQotCi0vKiB1IHEgXyB0IHggdCAgLS0gIFVzZXIgUXVlcnksIGdldCBzaW5nbGUg dGV4dCByZXNwb25zZSAgKi8KLS8qCi0gIENhbGwgd2l0aDogIAotICAgIHByZWZhY2U6IEV4cGxh bmF0b3J5IHRleHQgdG8gcHJpbnQsIG9yIE5VTEwuCi0gICAgcHJvbXB0OiAgUHJvbXB0LiAKLSAg ICBlY2hvOiAgICAwID0gZG9uJ3QgZWNobzsgMSA9IGVjaG87IDIgPSBlY2hvIHdpdGggYXN0ZXJp c2tzLgotICAgIGhlbHA6ICAgIEhlbHAgdGV4dCAoYXJyYXkgb2Ygc3RyaW5ncyBvciBOVUxMKSBb bm90IHVzZWQgYnkgcGFyc2VyXS4KLSAgICBidWY6ICAgICBQb2ludGVyIHRvIHJlc3VsdCBidWZm ZXIuCi0gICAgYnVmbGVuOiAgTGVuZ3RoIG9mIHJlc3VsdCBidWZmZXIuCi0gICAgZGZsdDogICAg RGVmYXVsdCByZXNwb25zZSB0ZXh0IG9yIE5VTEwgW25vdCB1c2VkIGJ5IHBhcnNlcl0uCi0gICAg dGltZXI6ICAgT3B0aW9uYWwgVGltZW91dAotICBSZXR1cm5zOgotICAgIDA6ICAgICAgIFVzZXIg c2FpZCBObyBvciBDYW5jZWwuCi0gICAgMSAgICAgICAgVXNlciBzYWlkIFllcyBvciBPSy4gICAg Ci0gIE5vdGVzOgotICAgIHByZWZhY2UsIHByb21wdCwgYW5kIGhlbHAgYXMgZm9yIHVxX29rKCku Ci0qLwotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXVxX3R4dChjaGFyICogcHJlZmFjZSwgY2hhciAq IHByb21wdCwgaW50IGVjaG8sIGNoYXIgKiogaGVscCwgY2hhciAqIGJ1ZiwgCi0gICAgICAgaW50 IGJ1ZmxlbiwgY2hhciAqZGZsdCwgaW50IHRpbWVyKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLXVx X3R4dChwcmVmYWNlLHByb21wdCxlY2hvLGhlbHAsYnVmLGJ1ZmxlbixkZmx0LHRpbWVyKQotICAg IGNoYXIgKiBwcmVmYWNlLCAqIHByb21wdCwgKiogaGVscCwgKiBidWYsICogZGZsdDsgCi0gICAg aW50IGJ1ZmxlbiwgZWNobywgdGltZXI7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsKLSNpZm5k ZWYgTk9MT0NBTAotI2lmZGVmIE9TMgotICAgIGV4dGVybiBpbnQgdm1vZGU7Ci0gICAgZXh0ZXJu IGludCBzdGFydGZsYWdzOwotICAgIGV4dGVybiBpbnQgd2luOTVfcG9wdXA7Ci0jZW5kaWYgLyog T1MyICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotICAgIGludCByYzsgCi0KLSAgICBpZiAoYnVm bGVuIDwgMSB8fCAhYnVmKQotICAgICAgcmV0dXJuKDApOwotI2lmZGVmIEtVSQotICAgIGlmICgg Z3VpX2RpYWxvZyApIHsKLSAgICAgICAgcmMgPSBndWlfdHh0X2RpYWxvZyhwcmVmYWNlLHByb21w dCxlY2hvLGJ1ZixidWZsZW4sZGZsdCx0aW1lcik7Ci0gICAgICAgIGlmICggcmMgPiAtMSApCi0g ICAgICAgICAgICByZXR1cm4ocmMpOwotICAgIC8qIE90aGVyd2lzZSwgdGhlIGRpYWxvZyBjb3Vs ZCBub3QgYmUgY3JlYXRlZC4gIEZhbGxiYWNrIHRvIHRleHQgbW9kZSAqLwotICAgIH0gCi0jZW5k aWYgLyogS1VJICovCi0jaWZuZGVmIE5PTE9DQUwKLSNpZmRlZiBPUzIKLSAgICBpZiAod2luOTVf cG9wdXAgJiYgIShzdGFydGZsYWdzICYgOTYpCi0jaWZkZWYgSUtTRAotICAgICAgICAgJiYgIWlu c2VydmVyCi0jZW5kaWYgLyogSUtTRCAqLwotICAgICAgICAgKSB7Ci0gICAgICAgIGRlYm9rID0g MDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvbid0IGxvZyAqLwotICAgICAgICBpZiAo ZWNobyA9PSAxKQotICAgICAgICAgICAgICAgIHBvcHVwX3JlYWR0ZXh0KHZtb2RlLHByZWZhY2Us cHJvbXB0LGJ1ZixidWZsZW4sMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg cG9wdXBfcmVhZHBhc3Modm1vZGUscHJlZmFjZSxwcm9tcHQsYnVmLGJ1ZmxlbiwwKTsKLSAgICAg ICAgZGVib2sgPSAxOwotICAgICAgICByZXR1cm4oMSk7Ci0gICAgfQotI2VuZGlmIC8qIE9TMiAq LwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotICAgIGlmIChwcmVmYWNlKQotICAgICAgcHJpbnRm KCIlc1xuIixwcmVmYWNlKTsKLSAgICBpZiAoZWNobyA9PSAxKQotICAgICAgcmVhZHRleHQocHJv bXB0LGJ1ZixidWZsZW4pOwotICAgIGVsc2UKLSAgICAgIHJlYWRwYXNzKHByb21wdCxidWYsYnVm bGVuKTsKLSAgICByZXR1cm4oMSk7CQkJCS8qIChubyBidXR0b25zIGluIHBhcnNlcikgKi8KLX0K LQotLyogdSBxIF8gbSB0IHggdCAgLS0gIFVzZXIgUXVlcnksIGdldCBtdWx0aXBsZSB0ZXh0IHJl c3BvbnNlcyAqLwotLyoKLSAgQ2FsbCB3aXRoOiAgCi0gICAgcHJlZmFjZTogRXhwbGFuYXRvcnkg dGV4dCB0byBwcmludCwgb3IgTlVMTC4KLSAgICBoZWxwOiAgICBIZWxwIHRleHQgKGFycmF5IG9m IHN0cmluZ3Mgb3IgTlVMTCkgW25vdCB1c2VkIGJ5IHBhcnNlcl0uCi0gICAgbjogICAgICAgTnVt YmVyIG9mIHJlc3BvbnNlcyB3YW50ZWQuCi0gICAgZmllbGQ6ICAgQXJyYXkgb2Ygc3RydWN0IHR4 dGJveCwgb25lIGVsZW1lbnQgcGVyIGZpZWxkLCBzZWUgY2t1dXNyLmguCi0gIFJldHVybnM6Ci0g ICAgMDogICAgICAgVXNlciBzYWlkIE5vIG9yIENhbmNlbC4KLSAgICAxICAgICAgICBVc2VyIHNh aWQgWWVzIG9yIE9LLiAgICAKLSAgTm90ZXM6Ci0gICAgcHJlZmFjZSBhbmQgaGVscCBhcyBmb3Ig dXFfb2soKS4KLSovCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotdXFfbXR4dChjaGFyICogcHJlZmFj ZSxjaGFyICoqaGVscCwgaW50IG4sIHN0cnVjdCB0eHRib3ggZmllbGRbXSkKLSNlbHNlIC8qIENL X0FOU0lDICovCi11cV9tdHh0KHByZWZhY2UsaGVscCxuLGZpZWxkKQotICAgIGNoYXIgKiBwcmVm YWNlOyBjaGFyICoqIGhlbHA7IGludCBuOyBzdHJ1Y3QgdHh0Ym94IGZpZWxkW107IAotI2VuZGlm IC8qIENLX0FOU0lDICovCi17Ci0jaWZuZGVmIE5PTE9DQUwKLSNpZmRlZiBPUzIKLSAgICBleHRl cm4gaW50IHZtb2RlOwotICAgIGV4dGVybiBpbnQgc3RhcnRmbGFnczsKLSAgICBleHRlcm4gaW50 IHdpbjk1X3BvcHVwOwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSAg ICBpbnQgaSwgcmM7Ci0KLSAgICBpZiAobiA8IDEgfHwgIWZpZWxkKQotICAgICAgcmV0dXJuKDAp OwotI2lmZGVmIEtVSQotICAgIGlmICggZ3VpX2RpYWxvZyApIHsKLSAgICAgICAgcmMgPSBndWlf bXR4dF9kaWFsb2cocHJlZmFjZSwgbiwgZmllbGQpOwotICAgICAgICBpZiAoIHJjID4gLTEgKQot ICAgICAgICAgICAgcmV0dXJuKHJjKTsKLSAgICAvKiBPdGhlcndpc2UsIHRoZSBkaWFsb2cgY291 bGQgbm90IGJlIGNyZWF0ZWQuICBGYWxsYmFjayB0byB0ZXh0IG1vZGUgKi8KLSAgICB9Ci0jZW5k aWYgLyogS1VJICovCi0jaWZuZGVmIE5PTE9DQUwKLSNpZmRlZiBPUzIKLSAgICBpZiAod2luOTVf cG9wdXAgJiYgIShzdGFydGZsYWdzICYgOTYpCi0jaWZkZWYgSUtTRAotICAgICAgICAgJiYgIWlu c2VydmVyCi0jZW5kaWYgLyogSUtTRCAqLwotICAgICAgICAgKSB7Ci0gICAgICAgIGRlYm9rID0g MDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvbid0IGxvZyAqLwotICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoZmllbGRbaV0udF9lY2hvID09 IDEpCi0gICAgICAgICAgICAgICAgcG9wdXBfcmVhZHRleHQodm1vZGUscHJlZmFjZSxmaWVsZFtp XS50X2xibCxmaWVsZFtpXS50X2J1ZixmaWVsZFtpXS50X2xlbiwwKTsKLSAgICAgICAgICAgIGVs c2UKLSAgICAgICAgICAgICAgICBwb3B1cF9yZWFkcGFzcyh2bW9kZSxwcmVmYWNlLGZpZWxkW2ld LnRfbGJsLGZpZWxkW2ldLnRfYnVmLGZpZWxkW2ldLnRfbGVuLDApOwotICAgICAgICB9Ci0gICAg ICAgIGRlYm9rID0gMTsKLSAgICAgICAgcmV0dXJuKDEpOwotICAgIH0KLSNlbmRpZiAvKiBPUzIg Ki8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSAgICBpZiAocHJlZmFjZSkKLSAgICAgIHByaW50 ZigiJXNcbiIscHJlZmFjZSk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotCWlmIChm aWVsZFtpXS50X2VjaG8gPT0gMSkKLQkgIHJlYWR0ZXh0KGZpZWxkW2ldLnRfbGJsLGZpZWxkW2ld LnRfYnVmLGZpZWxkW2ldLnRfbGVuKTsKLQllbHNlCi0JICByZWFkcGFzcyhmaWVsZFtpXS50X2xi bCxmaWVsZFtpXS50X2J1ZixmaWVsZFtpXS50X2xlbik7Ci0gICAgfQotICAgIHJldHVybigxKTsK LX0KLQotLyogdSBxIF8gZiBpIGwgZSAgLS0gIFVzZXIgUXVlcnksIGdldCBmaWxlIG9yIGRpcmVj dG9yeSBuYW1lICAqLwotLyoKLSAgQ2FsbCB3aXRoOiAgCi0gICAgcHJlZmFjZTogRXhwbGFuYXRv cnkgdGV4dCB0byBwcmludCwgb3IgTlVMTC4KLSAgICBwcm9tcHQ6ICBQcm9tcHQgc3RyaW5nLgot ICAgIGZjOiAgICAgIEZ1bmN0aW9uIGNvZGU6Ci0JICAgICAgIDEgPSBpbnB1dCAoZXhpc3Rpbmcp IGZpbGUKLQkgICAgICAgMiA9IGV4aXN0aW5nIGRpcmVjdG9yeSAKLQkgICAgICAgMyA9IGNyZWF0 ZSBuZXcgb3V0cHV0IGZpbGUKLQkgICAgICAgNCA9IG91dHB1dCBmaWxlIGFsbG93aW5nIGFwcGVu ZCBhY2Nlc3MKLSAgICBoZWxwOiAgICBIZWxwIHRleHQgKGFycmF5IG9mIHN0cmluZ3Mgb3IgTlVM TCkgW25vdCB1c2VkIGJ5IHBhcnNlcl0uCi0gICAgZGZsdDogICAgRGVmYXVsdCByZXNwb25zZS4K LSAgICByZXN1bHQ6ICBQb2ludGVyIHRvIHJlc3VsdCBidWZmZXIuCi0gICAgcmxlbmd0aDogTGVu Z3RoIG9mIHJlc3VsdCBidWZmZXIuCi0KLSAgUmV0dXJuczoKLSAgIC0xOiAgICAgICBJbnZhbGlk IGFyZ3VtZW50LCByZXN1bHQgdG9vIGxvbmcsIG9yIG90aGVyIGVycm9yLgotICAgIDA6ICAgICAg IFVzZXIgQ2FuY2VsZWQuCi0gICAgMTogICAgICAgT0ssIHdpdGggZmlsZS9wYXRobmFtZSBjb3Bp ZWQgdG8gcmVzdWx0IGJ1ZmZlci4KLSAgICAyOiAgICAgICBMaWtlIDEsIGJ1dCBmb3Igb3V0cHV0 IGZpbGUgdGhhdCBpcyB0byBiZSBhcHBlbmRlZCB0by4KLQotICBOb3RlczoKLSAgICAxLiBwcmVm YWNlIGFuZCBwcm9tcHQgc2hvdWxkIG5vdCBpbmNsdWRlIGZpbmFsIGxpbmUgdGVybWluYXRvciBi dXQgbWF5Ci0gICAgICAgaW5jbHVkZSBlbWJlZGRlZCBvbmVzLiAgSGVscCB0ZXh0IGlzIGluIGNh c2UgR1VJIGRpYWxvZyBuZWVkcyBhIEhlbHAKLSAgICAgICBidXR0b247IGZpbmFsIGVsZW1lbnQg b2YgaGVscC1zdHJpbmcgYXJyYXkgaXMgIiIuCi0KLSAgICAyLiBUaGUgZGVmYXVsdCBtaWdodCBi ZSBhIGZpbGVuYW1lLCBhIGRpcmVjdG9yeSBuYW1lLCBhIHJlbGF0aXZlCi0gICAgICAgcGF0aG5h bWUsIG9yIGFuIGFic29sdXRlIHBhdGhuYW1lLiAgVGhpcyByb3V0aW5lIG11c3QgY29udmVydCBp dCBpbnRvCi0gICAgICAgaW50byBhIGZ1bGx5IHF1YWxpZmllZCAoYWJzb2x1dGUpIHBhdGhuYW1l IHNvIHRoZSB1c2VyIGtub3dzIGV4YWN0bHkKLSAgICAgICB3aGVyZSB0aGUgZmlsZSBpcyB0byBi ZSBmb3VuZCBvciBzdG9yZWQuICBJbiBhZGRpdGlvbiwgdGhlIFdpbmRvd3MKLSAgICAgICB2ZXJz aW9uIG9mIHRoaXMgcm91dGluZSBtdXN0IHNlcGFyYXRlIHRoZSBkaXJlY3RvcnkgcGFydCBmcm9t IHRoZQotICAgICAgIG5hbWUgcGFydCwgc28gaXQgY2FuIGRpc3BsYXkgdGhlIGdpdmVuIGRpcmVj dG9yeSBpbiB0aGUgZmlsZSBkaWFsb2csCi0gICAgICAgYW5kIHB1dCBuYW1lIGluIHRoZSBmaWxl bmFtZSBib3ggdG8gYmUgZWRpdGVkLCByZXBsYWNlZCwgb3IKLSAgICAgICBhY2NlcHRlZC4KLQot ICAgIDMuIFdoZW4gY2FsbGVkIHdpdGggRkMgNCwgdGhlIFdpbmRvd3MgdmVyc2lvbiBzaG91bGQg aW5jbHVkZSAiTmV3IiBhbmQKLSAgICAgICAiQXBwZW5kIiBidXR0b25zIGluIHRoZSBkaWFsb2cu IHNvIHRoZSB1c2VyIGNhbiBzYXkgd2hldGhlciB0aGUgZmlsZQotICAgICAgIHNob3VsZCBvdmVy d3JpdGUgYW55IGZpbGUgb2YgdGhlIHNhbWUgbmFtZSwgb3IgYmUgYXBwZW5kZWQgdG8gaXQuCi0q LwotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotdXFfZmlsZShjaGFyICogcHJlZmFjZSwgY2hhciAq IGZwcm9tcHQsIGludCBmYywgY2hhciAqKiBoZWxwLAotCWNoYXIgKiBkZmx0LCBjaGFyICogcmVz dWx0LCBpbnQgcmxlbmd0aCkKLSNlbHNlIC8qIENLX0FOU0lDICovCi11cV9maWxlKHByZWZhY2Us ZnByb21wdCxmYyxoZWxwLGRmbHQscmVzdWx0LHJsZW5ndGgpCi0gICAgY2hhciAqIHByZWZhY2Us ICogZnByb21wdCwgKiogaGVscCwgKiBkZmx0LCAqIHJlc3VsdDsKLSAgICBpbnQgZmMsIHJsZW5n dGg7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHVxX2ZpbGUgKi8gewotCi0gICAgaW50IHJj ID0gLTEsIHgsIHksIHo7Ci0gICAgY2hhciAqIHMsICogcCwgKiBmdWxscGF0aDsKLSAgICBjaGFy IGZpbGVidWZbQ0tNQVhQQVRIKzFdOwotCi0jaWZkZWYgQ0tfUkVDQUxMCi0gICAgZXh0ZXJuIGlu dCBvbl9yZWNhbGw7Ci0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0KLSNpZmRlZiBLVUkKLSAgICBp ZiAoIGd1aV9kaWFsb2cgKSB7Ci0gICAgICAgIHJjID0gZ3VpX3NhdmVhc19kaWFsb2cocHJlZmFj ZSxmcHJvbXB0LGZjLGRmbHQscmVzdWx0LHJsZW5ndGgpOwotICAgICAgICByZXR1cm4gcmM7Ci0g ICAgfQotI2VuZGlmIC8qIEtVSSAqLwotCi0jaWZkZWYgQ0tfUkVDQUxMCi0gICAgb25fcmVjYWxs ID0gMDsKLSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLQotICAgIGlmIChwcmVmYWNlKQkJCS8qIElm IHByZWZhdG9yeSB0ZXh0IGdpdmVuLi4uICovCi0gICAgICBwcmludGYoIiVzXG4iLHByZWZhY2Up OwkJLyogZGlzcGxheSBpdC4gKi8KLQotICAgIGNtc2F2cChwc2F2ZSxQUk9NUFRMKTsgICAgICAg ICAgICAgIC8qIFNhdmUgb2xkIHByb21wdCAqLwotCi0gICAgLyogV2UgZ2V0IHRoZSBmdWxsIHBh dGhuYW1lIG9mIHRoZSBwcm9wb3NlZCBvdXRwdXQgZmlsZSBqdXN0IHNvICovCi0gICAgLyogd2Ug Y2FuIHNob3cgaXQgdG8gdGhlIHVzZXIgYnV0IHdlIGRvbid0IHVzZSBpdCBvdXJzZWx2ZXMuICov Ci0KLSAgICBwID0gTlVMTDsJCQkJLyogQnVpbGQgbmV3IHByb21wdCAqLwotICAgIGlmICghZGZs dCkgZGZsdCA9ICIiOwotICAgIGlmICgqZGZsdCkJCQkJLyogSGF2ZSBkZWZhdWx0IGZpbGVuYW1l ICovCi0gICAgICB6Zm5xZnAoZGZsdCxDS01BWFBBVEgrMSxmaWxlYnVmKTsJLyogR2V0IGZ1bGwg cGF0aCAqLwotICAgIGVsc2UKLSAgICAgIGNrbWFrbXNnKGZpbGVidWYsQ0tNQVhQQVRIKzEsemd0 ZGlyKCksIm5ld2ZpbGUiLE5VTEwsTlVMTCk7Ci0gICAgZnVsbHBhdGggPSBmaWxlYnVmOwotICAg IHggPSBzdHJsZW4oZnVsbHBhdGgpOwotCi0gICAgLyogSWYgbm8gcHJvbXB0IGdpdmVuLCBidWls ZCBvbmUgdGhhdCBzaG93cyB0aGUgcHJvcG9zZWQgZnVsbCBwYXRobmFtZS4gKi8KLQotICAgIGlm ICghZnByb21wdCkgZnByb21wdCA9ICIiOwotICAgIGlmICghKmZwcm9tcHQpIGZwcm9tcHQgPSB4 ID8gIiBGaWxlbmFtZSIgOiAiIEZpbGVuYW1lOiAiOwotICAgIHkgPSBzdHJsZW4oZnByb21wdCk7 Ci0gICAgaWYgKHggPiAwKSB7CQkJLyogSGF2ZSBkZWZhdWx0IHBhdGhuYW1lPyAqLwotCXAgPSAo Y2hhciAqKW1hbGxvYyh4ICsgeSArIDcpOwkvKiBHZXQgdGVtcCBzdG9yYWdlICovCi0JaWYgKHAp IHsJCQkvKiBCdWlsZCBwcm9tcHQgKi8KLQkgICAgY2ttYWttc2cocCx4K3krNyxmcHJvbXB0LCIg WyIsZnVsbHBhdGgsIl06ICIpOwotCSAgICBmcHJvbXB0ID0gcDsKLQl9Ci0gICAgfQotICAgIGNt c2V0cChmcHJvbXB0KTsJCQkvKiBNYWtlIG5ldyBwcm9tcHQgKi8KLSAgICBpZiAocCkgZnJlZShw KTsJCQkvKiBGcmVlIHRlbXAgc3RvcmFnZSAqLwotICAgIGNtaW5pKGNreGVjaCk7ICAgICAgICAg ICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgcGFyc2VyLiAqLwotICAgIHggPSAtMTsKLSAgICBk byB7Ci0gICAgICAgIHByb21wdChOVUxMKTsgICAgICAgICAgICAgICAgICAgLyogSXNzdWUgcHJv bXB0LiAqLwotICAgICAgICBzd2l0Y2ggKGZjKSB7CQkJLyogUGFyc2UgZGVwZW5kcyBvbiBmdW5j dGlvbiBjb2RlICovCi0gICAgICAgICAgY2FzZSAxOgkJCS8qIElucHV0IGZpbGUgKi8KLQkgICAg eCA9IGNtaWZpKCJOYW1lIG9mIGV4aXN0aW5nIGZpbGUiLGRmbHQsJnMsJnkseHhzdHJpbmcpOwot CSAgICByYyA9IDE7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSAyOgkJCS8qIERpcmVjdG9yeSAqLwot CSAgICB4ID0gY21kaXIoIkRpcmVjdG9yeSBuYW1lIixkZmx0LCZzLHh4c3RyaW5nKTsKLQkgICAg cmMgPSAxOwotCSAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDM6CQkJLyogTmV3IG91dHB1dCBm aWxlICovCi0JICAgIC8qIEZhbGwgdGhydS4uLiAqLwotCSAgY2FzZSA0OgkJCS8qIE91dHB1dCBm aWxlIC0gQXBwZW5kIGFsbG93ZWQgKi8KLQkgICAgeCA9IGNtb2ZpKCJPdXRwdXQgZmlsZSBzcGVj aWZpY2F0aW9uIixkZmx0LCZzLHh4c3RyaW5nKTsKLQkgICAgcmMgPSAoZmMgPT0gNCkgPyAxIDog MjsKLQkgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoJCQkvKiBCYWQgZnVuY3Rpb24gY29k ZSAqLwotCSAgICBnb3RvIHhfdXFfZmlsZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoeCA8IDAp IHsJCQkvKiBQYXJzZSBlcnJvciAqLwotCSAgICBmaWxlYnVmWzBdID0gTlVMOwotICAgICAgICAg ICAgaWYgKHggPT0gLTQpIHsgICAgICAgICAgICAgIC8qIEVPRiAqLwotICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgfSBlbHNlIGlmICh4ID09IC0zKSAgICAgICAgIC8qIE5vIGFu c3dlcj8gKi8KLSAgICAgICAgICAgICAgcHJpbnRmKGZjID09IDIgPwotCQkgICAgICIgUGxlYXNl IGVudGVyIGEgZGlyZWN0b3J5IG5hbWUuXG4iIDoKLQkJICAgICAiIFBsZWFzZSBlbnRlciBhIGZp bGVuYW1lLlxuIgotCQkgICAgICk7Ci0gICAgICAgICAgICBjbWluaShja3hlY2gpOwotICAgICAg ICB9IGVsc2UgewotCSAgICB6ID0gc3RybGVuKHMpOwotCSAgICBpZiAoeiA+IHJsZW5ndGggfHwg Y2tzdHJuY3B5KGZpbGVidWYsYnJzdHJpcChzKSxDS01BWFBBVEgrMSkgPCB6KSB7Ci0JCXByaW50 ZigiP05hbWUgdG9vIGxvbmdcbiIpOwotCQl4ID0gLTk7Ci0JICAgIH0gZWxzZQotCSAgICAgIHgg PSBjbWNmbSgpOwkJLyogR2V0IGNvbmZpcm1hdGlvbiAqLwotICAgICAgICB9Ci0JaWYgKGZjID09 IDEgJiYgeCA+IC0xICYmIHkgPiAwKSB7Ci0JICAgIHByaW50ZigiP1dpbGRjYXJkcyBub3QgYWxs b3dlZFxuIik7Ci0JICAgIHggPSAtOTsKLQl9Ci0gICAgfSB3aGlsZSAoeCA8IDApOyAgICAgICAg ICAgICAgICAgICAgLyogQ29udGludWUgdGlsbCBkb25lICovCi0KLSAgeF91cV9maWxlOgotICAg IGlmICh4IDwgMCkKLSAgICAgIHJjID0gLTE7Ci0KLSAgICBjbXNldHAocHNhdmUpOyAgICAgICAg ICAgICAgICAgICAgICAvKiBSZXN0b3JlIHJlYWwgcHJvbXB0ICovCi0KLSAgICBpZiAocmMgPiAw KQotICAgICAgY2tzdHJuY3B5KHJlc3VsdCxmaWxlYnVmLHJsZW5ndGgpOwotICAgIHJldHVybihy Yyk7Ci19Ci0KLQotI2lmZGVmIENLX1BFUk1TCi0jaWZkZWYgVU5JWAotCi1fUFJPVE9UWVAoIGlu dCB6c2V0cGVybSwgKGNoYXIgKiwgaW50KSk7Ci0KLS8qIENITU9EIGNvbW1hbmQgZm9yIFVOSVgg b25seSAqLwotCi0jZGVmaW5lIENITV9ESVIgMAotI2RlZmluZSBDSE1fRE9UIDEKLSNkZWZpbmUg Q0hNX0ZJTCAyCi0jZGVmaW5lIENITV9MSVMgMwotI2RlZmluZSBDSE1fTk9MIDQKLSNkZWZpbmUg Q0hNX1FVSSA1Ci0jZGVmaW5lIENITV9SRUMgNgotI2RlZmluZSBDSE1fVlJCIDcKLSNkZWZpbmUg Q0hNX1BBRyA4Ci0jZGVmaW5lIENITV9OT1AgOQotI2RlZmluZSBDSE1fVFlQIDEwCi0jZGVmaW5l IENITV9TSU0gMTEKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgdWNobW9kc3dbXSA9IHsKLSAgICAi L2RpcmVjdG9yaWVzIiwgQ0hNX0RJUiwgMCwKLSAgICAiL2RvdGZpbGVzIiwgICAgQ0hNX0RPVCwg MCwKLSAgICAiL2ZpbGVzIiwgICAgICAgQ0hNX0ZJTCwgMCwKLSAgICAiL2xpc3QiLCAgICAgICAg Q0hNX0xJUywgMCwKLSAgICAiL25vbGlzdCIsICAgICAgQ0hNX05PTCwgMCwKLSAgICAiL25vcGFn ZSIsICAgICAgQ0hNX05PUCwgMCwKLSAgICAiL3BhZ2UiLCAgICAgICAgQ0hNX1BBRywgMCwKLSAg ICAiL3F1aWV0IiwgICAgICAgQ0hNX1FVSSwgQ01fSU5WLAotICAgICIvcmVjdXJzaXZlIiwgICBD SE1fUkVDLCAwLAotICAgICIvc2ltdWxhdGUiLCAgICBDSE1fU0lNLCAwLAotICAgICIvdHlwZSIs ICAgICAgICBDSE1fVFlQLCBDTV9BUkcsCi0gICAgIi92ZXJib3NlIiwgICAgIENITV9WUkIsIENN X0lOViwKLX07Ci1zdGF0aWMgaW50IG5jaG1vZHN3ID0gKHNpemVvZih1Y2htb2RzdykgLyBzaXpl b2Yoc3RydWN0IGtleXRhYikpOwotCi1pbnQKLWRvdWNobW9kKCkgewotICAgIGV4dGVybiBpbnQg cmVjdXJzaXZlLCBuc2NhbmZpbGUsIGRpcmFjdGl2ZTsKLSNpZmRlZiBDS19UVEdXU0laCi0gICAg ZXh0ZXJuIGludCB0dF9yb3dzLCB0dF9jb2xzOwotICAgIGludCBuID0gMDsKLSNlbmRpZiAvKiBD S19UVEdXU0laICovCi0gICAgaW50IGksIGZpbGVzID0gMSwgdDEgPSAxLCB0MiA9IDAsIHgsIHks IHosIHZlcmJvc2UgPSAwLCByYyA9IDEsIHBhZ2luZzsKLSAgICBpbnQgeG1vZGUgPSAtMSwgZnMg PSAwLCBnZXR2YWwgPSAwLCBzaW11bGF0ZSA9IDAsIHdpbGQgPSAwOwotICAgIGNoYXIgYywgKiBz OwotICAgIHN0cnVjdCBGREIgc3csIG51OwotCi0gICAgaWYgKHhhc2ttb3JlIDwgMCkgewotI2lm ZGVmIENLX1RUR1dTSVoKLSAgICAgICAgeGFza21vcmUgPSAxOwotI2Vsc2UKLSAgICAgICAgeGFz a21vcmUgPSAwOwotI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KLSAgICB9Ci0gICAgcGFnaW5nID0g eGFza21vcmU7Ci0KLSAgICBjbWZkYmkoJnN3LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBG aXJzdCBGREIgLSBjb21tYW5kIHN3aXRjaGVzICovCi0gICAgICAgICAgIF9DTUtFWSwgICAgICAg ICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KLSAgICAgICAgICAgIk9jdGFsIGZpbGUgcGVybWlz c2lvbiBjb2RlLCBvciBzd2l0Y2giLAotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAgICAgICBuY2htb2RzdywgICAgICAg ICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLwotICAgICAg ICAgICA0LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAy OiA0ID0gY21zd2kgKi8KLSAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgICAgICAgICAv KiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0gICAgICAgICAgIHVjaG1vZHN3LCAgICAgICAgICAg ICAgICAgICAgLyogS2V5d29yZCB0YWJsZSAqLwotICAgICAgICAgICAmbnUgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KLSAgICAgICAgICAgKTsKLSAg ICBjbWZkYmkoJm51LAotICAgICAgICAgICBfQ01OVU0sICAgICAgICAgICAgICAgICAgICAgIC8q IE51bWJlciAqLwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhl bHAgbWVzc2FnZSAqLwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IERlZmF1bHQgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBO L0EgKi8KLSAgICAgICAgICAgOCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSYWRpeCA9 IDggKi8KLSAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOL0EgKi8K LSAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgICAgICAgICAvKiBQcm9jZXNzaW5nIGZ1 bmN0aW9uICovCi0gICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgLyogTi9B ICovCi0gICAgICAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmV4dCAqLwot ICAgICAgICAgICApOwotCi0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgaWYgKCh4ID0gY21mZGIo JnN3KSkgPCAwKSB7Ci0gICAgICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAgICAgICAgICAg IHggPSAtOTsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9GaWxlbmFtZSByZXF1aXJlZFxuIik7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIH0KLSAgICAg ICAgaWYgKGNtcmVzdWx0LmZjb2RlICE9IF9DTUtFWSkKLSAgICAgICAgICBicmVhazsKLSAgICAg ICAgYyA9IGNtZ2JyaygpOwotICAgICAgICBnZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAnPScp OwotICAgICAgICBpZiAoZ2V0dmFsICYmICEoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7Ci0gICAg ICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtlIGFuIGFyZ3VtZW50XG4i KTsKLSAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFnZXR2 YWwgJiYgKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgewotICAgICAgICAgICAgcHJpbnRmKCI/VGhp cyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC05 KTsKLSAgICAgICAgfQotICAgICAgICBzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsKLSAgICAg ICAgICBjYXNlIENITV9ESVI6Ci0gICAgICAgICAgICB0MSA9IDE7Ci0gICAgICAgICAgICB0MiA9 IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIENITV9ET1Q6Ci0gICAgICAg ICAgICBtYXRjaGRvdCA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIENI TV9GSUw6Ci0gICAgICAgICAgICB0MSA9IDA7Ci0gICAgICAgICAgICB0MiA9IDA7Ci0gICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIENITV9MSVM6Ci0gICAgICAgICAgY2FzZSBDSE1f VlJCOgotICAgICAgICAgICAgdmVyYm9zZSA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICBjYXNlIENITV9OT0w6Ci0gICAgICAgICAgY2FzZSBDSE1fUVVJOgotICAgICAgICAgICAg dmVyYm9zZSA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIENITV9SRUM6 Ci0gICAgICAgICAgICByZWN1cnNpdmUgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgY2FzZSBDSE1fUEFHOgotICAgICAgICAgICAgdmVyYm9zZSA9IDE7Ci0gICAgICAgICAgICBw YWdpbmcgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBDSE1fTk9QOgot ICAgICAgICAgICAgcGFnaW5nID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh c2UgQ0hNX1NJTToKLSAgICAgICAgICAgIHNpbXVsYXRlID0gMTsKLSAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgIGNhc2UgQ0hNX1RZUDogewotICAgICAgICAgICAgICBleHRlcm4gc3RydWN0 IGtleXRhYiB0eHRiaW5bXTsKLSAgICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkodHh0YmluLDMs IiIsIiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAg ICAgICAgICBpZiAoeCA9PSAyKSB7ICAgICAgICAgICAgIC8qIEFMTCAqLwotICAgICAgICAgICAg ICAgICAgeG1vZGUgPSAtMTsKLSAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAg ICAvKiBURVhUIG9yIEJJTkFSWSBvbmx5ICovCi0gICAgICAgICAgICAgICAgICB4bW9kZSA9IHg7 Ci0gICAgICAgICAgICAgICAgICBmcyA9IDE7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHogPSBjbXJlc3Vs dC5ucmVzdWx0OwotICAgIHggPSBjbWlmaTIoIkZpbGUgc3BlY2lmaWNhdGlvbiIsIiIsJnMsJndp bGQsdDEsTlVMTCx4eHN0cmluZyx0Mik7Ci0gICAgaWYgKHggPCAwKSB7Ci0gICAgICAgIGlmICh4 ID09IC0zKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9BIGZpbGUgc3BlY2lmaWNhdGlvbiBpcyBy ZXF1aXJlZFxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9IGVsc2UKLSAg ICAgICAgICByZXR1cm4oeCk7Ci0gICAgfQotICAgIGNrc3RybmNweSh0bXBidWYscyxUTVBCVUZT SVopOwotICAgIHMgPSB0bXBidWY7Ci0gICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAg cmV0dXJuKHgpOwotI2lmZGVmIFpYUkVXSU5ECi0gICAgaWYgKHdpbGQpIGZpbGVzID0genhyZXdp bmQoKTsKLSNlbHNlCi0gICAgaWYgKHdpbGQpIGZpbGVzID0gbnp4cGFuZChzLDApOwotI2VuZGlm IC8qIFpYUkVXSU5EICovCi0KLSAgICBpZiAocGFnaW5nID4gLTEpCi0gICAgICB4YXNrbW9yZSA9 IHBhZ2luZzsKLQotI2lmZGVmIENLX1RUR1dTSVoKLSAgICBpZiAodmVyYm9zZSAmJiBwYWdpbmcp IHsKLSNpZmRlZiBPUzIKLSAgICAgICAgdHRnY3dzeigpOwotI2Vsc2UgLyogT1MyICovCi0gICAg ICAgIGlmICh0dGd3c2l6KCkgPiAwKSB7Ci0gICAgICAgICAgICBpZiAodHRfcm93cyA+IDAgJiYg dHRfY29scyA+IDApIHsKLSAgICAgICAgICAgICAgICBjbWRfcm93cyA9IHR0X3Jvd3M7Ci0gICAg ICAgICAgICAgICAgY21kX2NvbHMgPSB0dF9jb2xzOwotICAgICAgICAgICAgfQotICAgICAgICB9 Ci0jZW5kaWYgLyogT1MyICovCi0gICAgfQotI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KLQotICAg IGZvciAoaSA9IDA7IGkgPCBmaWxlczsgaSsrKSB7Ci0gICAgICAgIGlmIChmaWxlcyA9PSAxICYm IHdpbGQgPT0gMCkgeyAgLyogRm9yICJjaG1vZCA3NzcgLiIgKi8KLSAgICAgICAgICAgIGNrc3Ry bmNweShsaW5lLHMsTElOQlVGU0laKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHgg PSB6bmV4dChsaW5lKTsKLSAgICAgICAgICAgIGlmICh4IDwgMSkgewotICAgICAgICAgICAgICAg IGlmIChpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/Tm8gZmlsZXMgbWF0 Y2ggLSBcIiVzXCJcbiIsbGluZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0g ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybigxKTsKLSAgICAgICAgICAg IH0KLSAgICAgICAgfQotICAgICAgICBpZiAoZnMpIHsKLSNpZmRlZiBWTVNPUlVOSVgKLSAgICAg ICAgICAgIC8qIElmIC9UWVBFOlRFWFQgb3IgQklOQVJZIGdpdmVuLCBza2lwIGRpcmVjdG9yaWVz IGFuZCBsaW5rcyAqLwotICAgICAgICAgICAgLyogc2luY2UgdGhleSBhcmUgbmVpdGhlciB0ZXh0 IG5vciBiaW5hcnkuICovCi0gICAgICAgICAgICBleHRlcm4gaW50IHpnZnNfZGlyLCB6Z2ZzX2xp bms7Ci0gICAgICAgICAgICB6Z2V0ZnMobGluZSk7Ci0gICAgICAgICAgICBpZiAoemdmc19kaXIg fHwgemdmc19saW5rKQotICAgICAgICAgICAgICBjb250aW51ZTsKLSNlbHNlCi0gICAgICAgICAg ICBpZiAoemNoa2kobGluZSkgPCAwKQotICAgICAgICAgICAgICBjb250aW51ZTsKLSNlbmRpZiAv KiBWTVNPUlVOSVggKi8KLSAgICAgICAgICAgIC8qIFJlZ3VsYXIgZmlsZSwgc2NhbiBpdCAqLwot ICAgICAgICAgICAgc3dpdGNoIChzY2FuZmlsZShsaW5lLCZ5LG5zY2FuZmlsZSkpIHsKLSAgICAg ICAgICAgICAgY2FzZSBGVF9CSU46Ci0gICAgICAgICAgICAgICAgaWYgKHhtb2RlICE9IDEpCi0g ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgICAgY2FzZSBGVF9URVhUOgotICAgICAgICAgICAgICBjYXNlIEZUXzdCSVQ6Ci0gICAg ICAgICAgICAgIGNhc2UgRlRfOEJJVDoKLSNpZmRlZiBVTklDT0RFCi0gICAgICAgICAgICAgIGNh c2UgRlRfVVRGODoKLSAgICAgICAgICAgICAgY2FzZSBGVF9VQ1MyOgotI2VuZGlmIC8qIFVOSUNP REUgKi8KLSAgICAgICAgICAgICAgICBpZiAoeG1vZGUgIT0gMCkKLSAgICAgICAgICAgICAgICAg IGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChzaW11bGF0 ZSkgewotI2lmZGVmIFVOSVgKLSAgICAgICAgICAgIGV4dGVybiBpbnQgemNoa29kOyAgICAgICAg ICAvKiBVbmlkZW50aWZpZWQgRmx5aW5nICovCi0gICAgICAgICAgICBpbnQgeHggPSB6Y2hrb2Q7 ICAgICAgICAgICAgLyogQVBJIEV4dGVuc2lvbi4uLiAqLwotICAgICAgICAgICAgemNoa29kID0g MTsKLSNlbmRpZiAvKiBVTklYICovCi0gICAgICAgICAgICBpZiAoemNoa28obGluZSkgPCAwKQot ICAgICAgICAgICAgICBwcmludGYoIiVzIC0gQWNjZXNzIGRlbmllZFxuIixsaW5lKTsKLSAgICAg ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcHJpbnRmKCIlcyAtIE9LXG4iLGxpbmUpOwotI2lm ZGVmIFVOSVgKLSAgICAgICAgICAgIHpjaGtvZCA9IHh4OwotI2VuZGlmIC8qIFVOSVggKi8KLSAg ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICh6c2V0cGVybShsaW5lLHopIDwgMSkgewot ICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlIHx8IGZpbGVzIDwgMikgewotICAgICAgICAgICAg ICAgICAgICBwcmludGYoIiVzOiAlc1xuIixsaW5lLGNrX2VycnN0cigpKTsKLSAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgcmMgPSAwOwotICAgICAgICAgICAgfSBlbHNlIGlmICh2 ZXJib3NlKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIlcyAgJXNcbiIsemlwZXJtKGxpbmUp LGxpbmUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jaWZkZWYgQ0tfVFRHV1NJWgotICAg ICAgICBpZiAodmVyYm9zZSAmJiBwYWdpbmcpIHsgICAgICAgIC8qIFBhdXNlIGF0IGVuZCBvZiBz Y3JlZW4gKi8KLSAgICAgICAgICAgIGlmIChjbWRfcm93cyA+IDAgJiYgY21kX2NvbHMgPiAwKSB7 Ci0gICAgICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgewotICAgICAgICAgICAg ICAgICAgICBpZiAoIWFza21vcmUoKSkKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgIG4gPSAwOwotICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIENLX1RU R1dTSVogKi8KLQotICAgIH0KLSAgICByZXR1cm4oc3VjY2VzcyA9IHJjKTsKLX0KLSNlbmRpZiAv KiBVTklYICovCi0jZW5kaWYgLyogQ0tfUEVSTVMgKi8KLQotI2lmbmRlZiBOT1NQTCAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFMtRXhwcmVzc2lvbnMgKi8KLSNpZm5kZWYgTk9TRVhQCi0K LXN0cnVjdCBrZXl0YWIgc2V4cHRhYltdID0gewotICAgICJkZXB0aC1saW1pdCIsIDEsIDAsCi0g ICAgImVjaG8tcmVzdWx0IiwgMCwgMCwKLSAgICAidHJ1bmNhdGUtYWxsLXJlc3VsdHMiLCAyCi19 OwotCi1zdGF0aWMgaW50IHNleHBtYXhkZXAgPSAxMDAwOyAgICAgICAgICAgLyogTWF4aW11bSBk ZXB0aCAqLwotCi0jZGVmaW5lIHh4ZmxvYXQocyx4KSBcCi0oKGlzZGlnaXQoKnMpfHwoKnM9PSct Jyl8fCgqcz09JysnKXx8KCpzPT0nLicpfHwoKnM9PSdcMDQwJykpP2lzZmxvYXQocyx4KTowKQot Ci0jZGVmaW5lIFNYX0FERCAgMSAgICAgICAgICAgICAgICAgICAgICAgLyogU3ltYm9scyBmb3Ig YnVpbHQtaW4gb3BlcmF0b3JzICovCi0jZGVmaW5lIFNYX1NVQiAgMgotI2RlZmluZSBTWF9NVUwg IDMKLSNkZWZpbmUgU1hfRElWICA0Ci0jZGVmaW5lIFNYX1BPVyAgNQotI2RlZmluZSBTWF9TRVQg IDYKLSNkZWZpbmUgU1hfTU9EICA3Ci0jZGVmaW5lIFNYX0VWQSAgOAotI2RlZmluZSBTWF9FWFAg IDkKLSNkZWZpbmUgU1hfQUVRIDEwCi0jZGVmaW5lIFNYX0FMVCAxMQotI2RlZmluZSBTWF9BR1Qg MTIKLSNkZWZpbmUgU1hfQUxFIDEzCi0jZGVmaW5lIFNYX0FHRSAxNAotI2RlZmluZSBTWF9NSU4g MTUKLSNkZWZpbmUgU1hfTUFYIDE2Ci0jZGVmaW5lIFNYX1NRUiAxNwotI2RlZmluZSBTWF9GTFIg MTgKLSNkZWZpbmUgU1hfQ0VJIDE5Ci0jZGVmaW5lIFNYX1RSVSAyMAotI2RlZmluZSBTWF9BQlMg MjEKLSNkZWZpbmUgU1hfUk9VIDIyCi0jZGVmaW5lIFNYX0xFVCAyMwotI2RlZmluZSBTWF9MR04g MjQKLSNkZWZpbmUgU1hfTEdYIDI1Ci0jZGVmaW5lIFNYX0ZMTyAyNgotI2RlZmluZSBTWF9JRkMg MjcKLSNkZWZpbmUgU1hfTk9UIDI4Ci0jZGVmaW5lIFNYX05FUSAyOQotI2RlZmluZSBTWF9BTkQg MzAKLSNkZWZpbmUgU1hfTE9SIDMxCi0jZGVmaW5lIFNYX1NJTiAzMgotI2RlZmluZSBTWF9DT1Mg MzMKLSNkZWZpbmUgU1hfVEFOIDM0Ci0jZGVmaW5lIFNYX0JXQSAzNQotI2RlZmluZSBTWF9CV08g MzYKLSNkZWZpbmUgU1hfQldYIDM3Ci0jZGVmaW5lIFNYX0JXTiAzOAotI2RlZmluZSBTWF9YT1Ig MzkKLSNkZWZpbmUgU1hfSU5DIDQwCi0jZGVmaW5lIFNYX0RFQyA0MQotI2RlZmluZSBTWF9RVU8g NDIKLSNkZWZpbmUgU1hfU1RSIDQzCi0KLS8qIE9wZXJhdG9yIGZsYWdzICovCi0KLSNkZWZpbmUg U1hGX1BSRSAyNTYgICAgICAgICAgICAgICAgICAgICAvKiBQcmVkaWNhdGUgKi8KLSNkZWZpbmUg U1hGX09ORSA1MTIgICAgICAgICAgICAgICAgICAgICAvKiBSZXF1aXJlcyBvbmUgYXJnICovCi0j ZGVmaW5lIFNYRl9UV08gMTAyNCAgICAgICAgICAgICAgICAgICAgLyogUmVxdWlyZXMgdHdvIGFy Z3Mgb3IgbW9yZSAqLwotI2RlZmluZSBTWEZfRkxPIDIwNDggICAgICAgICAgICAgICAgICAgIC8q IENvZXJjZSB0byBmbG9hdGluZy1wb2ludCAqLwotCi0vKiBCdWlsdC1pbiBjb25zdGFudHMgKi8K LQotI2RlZmluZSBTWENfTklMIDEgICAgICAgICAgICAgICAgICAgICAgIC8qIE5JTCAqLwotI2Rl ZmluZSBTWENfUEkgIDIgICAgICAgICAgICAgICAgICAgICAgIC8qIFBJICovCi0jZGVmaW5lIFNY Q19UICAgMyAgICAgICAgICAgICAgICAgICAgICAgLyogVCAqLwotCi0vKgotICBUaGlzIGlzIGFu IHhsb29rdXAoKSB0YWJsZSBhbmQgc28gbmVlZCBub3QgYmUgaW4gImFsaGFiZXRpY2FsIiBvcmRl ci4KLSAgVGhlcmVmb3JlIGVudHJpZXMgYXJlIGFycmFuZ2VkIHRvIG1pbmltaXplIHNlYXJjaCBm b3IgbW9zdCBjb21tb24KLSAgb3BlcmF0b3JzLgotKi8KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNl eHBvcHNbXSA9IHsgICAgICAvKiBCdWlsdC1pbiBvcGVyYXRvcnMgKi8KLSAgICAic2V0cSIsICAg IFNYX1NFVCwgMCwgICAgICAgICAgICAgICAvKiBHbG9iYWwgYXNzaWdubWVudCAqLwotICAgICIr IiwgICAgICAgU1hfQURELCAwLCAgICAgICAgICAgICAgIC8qIFNpbXBsZSBhcml0aG1ldGljICov Ci0gICAgIi0iLCAgICAgICBTWF9TVUIsIDAsCi0gICAgIioiLCAgICAgICBTWF9NVUwsIDAsCi0g ICAgIi8iLCAgICAgICBTWF9ESVYsIFNYRl9UV08sCi0gICAgIl4iLCAgICAgICBTWF9QT1csIFNY Rl9UV08sCi0KLSAgICAiaWYiLCAgICAgIFNYX0lGQywgU1hGX1RXTywgICAgICAgICAvKiBJRiAq LwotICAgICJsZXQiLCAgICAgU1hfTEVULCAwLCAgICAgICAgICAgICAgIC8qIExvY2FsIGFzc2ln bm1lbnQgKi8KLSAgICAibm90IiwgICAgIFNYX05PVCwgU1hGX09ORSwgICAgICAgICAvKiBOT1Qg Ki8KLSAgICAibW9kIiwgICAgIFNYX01PRCwgU1hGX1RXTywgICAgICAgICAvKiBNb2R1bHVzICov Ci0KLSAgICAiPCIsICAgICAgIFNYX0FMVCwgU1hGX1BSRSwJCS8qIENvbXBhcmlzb25zICovCi0g ICAgIj4iLCAgICAgICBTWF9BR1QsIFNYRl9QUkUsCi0gICAgIjw9IiwgICAgICBTWF9BTEUsIFNY Rl9QUkUsCi0gICAgIj0iLCAgICAgICBTWF9BRVEsIFNYRl9QUkUsCi0gICAgIj49IiwgICAgICBT WF9BR0UsIFNYRl9QUkUsCi0gICAgIiE9IiwgICAgICBTWF9ORVEsIFNYRl9QUkUsCi0KLSAgICAi KysiLCAgICAgIFNYX0lOQywgU1hGX09ORXxTWEZfVFdPLCAvKiBJbmNyZW1lbnQgKi8KLSAgICAi LS0iLCAgICAgIFNYX0RFQywgU1hGX09ORXxTWEZfVFdPLCAvKiBEZWNyZW1lbnQgKi8KLQotICAg ICIqKiIsICAgICAgU1hfUE9XLCBTWEZfVFdPLCAgICAgICAgIC8qIENvbW1vbiBzeW5vbnltcyAq LwotICAgICI9PSIsICAgICAgU1hfQUVRLCBTWEZfUFJFLAotICAgICIhIiwgICAgICAgU1hfTk9U LCBTWEZfT05FLAotICAgICIuIiwgICAgICAgU1hfRVZBLCAwLAotCi0gICAgImFuZCIsICAgICBT WF9BTkQsIDAsICAgICAgICAgICAgICAgLyogTG9naWNhbCBvcGVyYXRvcnMgKi8KLSAgICAib3Ii LCAgICAgIFNYX0xPUiwgMCwKLSAgICAieG9yIiwgICAgIFNYX1hPUiwgU1hGX1RXTywKLQotICAg ICJtYXgiLCAgICAgU1hfTUFYLCBTWEZfT05FfFNYRl9UV08sIC8qIE1heCBhbmQgbWluICovCi0g ICAgIm1pbiIsICAgICBTWF9NSU4sIFNYRl9PTkV8U1hGX1RXTywKLQotICAgICIlIiwgICAgICAg U1hfTU9ELCBTWEZfVFdPLCAgICAgICAgIC8qIE1vcmUgc3lub255bXMgKi8KLSAgICAifHwiLCAg ICAgIFNYX0xPUiwgMCwKLSAgICAiJiYiLCAgICAgIFNYX0FORCwgMCwKLQotICAgICJxdW90ZSIs ICAgU1hfUVVPLCBTWEZfT05FLAotICAgICJzdHJpbmciLCAgU1hfU1RSLCBTWEZfT05FLAotCi0g ICAgImV2YWwiLCAgICBTWF9FVkEsIDAsICAgICAgICAgICAgICAgLyogQXNzb3J0ZWQgY29tbWFu ZHMgKi8KLSAgICAiYWJzIiwgICAgIFNYX0FCUywgU1hGX09ORSwKLSAgICAidHJ1bmNhdGUiLFNY X1RSVSwgU1hGX09ORXxTWEZfRkxPLAotICAgICJyb3VuZCIsICAgU1hfUk9VLCBTWEZfT05FfFNY Rl9UV098U1hGX0ZMTywKLSAgICAiY2VpbGluZyIsIFNYX0NFSSwgU1hGX09ORXxTWEZfRkxPLAot ICAgICJmbG9vciIsICAgU1hfRkxSLCBTWEZfT05FfFNYRl9GTE8sCi0gICAgImZsb2F0IiwgICBT WF9GTE8sIFNYRl9PTkV8U1hGX0ZMTywKLQotI2lmZGVmIEZORkxPQVQKLSAgICAic3FydCIsICAg IFNYX1NRUiwgU1hGX09ORXxTWEZfRkxPLCAvKiBGbG9hdGluZyBwb2ludCBmdW5jdGlvbnMgKi8K LSAgICAiZXhwIiwgICAgIFNYX0VYUCwgU1hGX09ORXxTWEZfRkxPLAotICAgICJzaW4iLCAgICAg U1hfU0lOLCBTWEZfT05FfFNYRl9GTE8sCi0gICAgImNvcyIsICAgICBTWF9DT1MsIFNYRl9PTkV8 U1hGX0ZMTywKLSAgICAidGFuIiwgICAgIFNYX1RBTiwgU1hGX09ORXxTWEZfRkxPLAotICAgICJs b2ciLCAgICAgU1hfTEdOLCBTWEZfT05FfFNYRl9GTE8sCi0gICAgImxvZzEwIiwgICBTWF9MR1gs IFNYRl9PTkV8U1hGX0ZMTywKLSNlbmRpZiAvKiBGTkZMT0FUICovCi0KLSAgICAiIyIsICAgICAg IFNYX0JXWCwgU1hGX1RXTywgICAgICAgICAvKiBCaXR3aXNlIG9wZXJhdG9ycyAqLwotICAgICIm IiwgICAgICAgU1hfQldBLCAwLAotICAgICJ8IiwgICAgICAgU1hfQldPLCAwLAotICAgICJ+Iiwg ICAgICAgU1hfQldOLCBTWEZfT05FLAotICAgICIiLCAwLCAwICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIChlbmQpICovCi19Owotc3RhdGljIGludCBuc2V4cG9wcyA9IChzaXplb2Yoc2V4 cG9wcykgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLQotc3RhdGljIHN0cnVjdCBrZXl0 YWIgc2V4cGNvbnN0c1tdID0geyAgIC8qIEJ1aWx0LWluIGNvbnN0YW50cyAqLwotICAgICJuaWwi LCBTWENfTklMLCAwLCAgICAgICAgICAgICAgICAgIC8qIE5JTCAoZmFsc2UpICovCi0gICAgInBp IiwgIFNYQ19QSSwgIDAsICAgICAgICAgICAgICAgICAgLyogUGkgKDMuMTQxNTkyNi4uLikgKi8K LSAgICAidCIsICAgU1hDX1QsICAgMCwgICAgICAgICAgICAgICAgICAvKiBUICh0cnVlKSAqLwot ICAgICIiLCAwLCAwCi19Owotc3RhdGljIGludCBuc2V4cGNvbnN0cyA9IChzaXplb2Yoc2V4cGNv bnN0cykgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLQotaW50IHNleHByYyA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFMtRXhwcmVzc2lvbiBlcnJvciBmbGFnICovCi1pbnQg c2V4cHB2ID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJlZGljYXRlIHZhbHVlICov Ci1zdGF0aWMgaW50IHNleHB0cnVuYyA9IDA7CQkvKiBGbGFnIHRvIGZvcmNlIGFsbCByZXN1bHRz IHRvIGludCAqLwotCi0jZGVmaW5lIFNYTUxFTiA2NCAgICAgICAgICAgICAgICAgICAgICAgLyog TWFjcm8gYXJnIGxpc3QgaW5pdGlhbCBsZW5ndGggKi8KLSNpbmNsdWRlIDxtYXRoLmg+ICAgICAg ICAgICAgICAgICAgICAgICAvKiBGbG9hdGluZy1wb2ludCBmdW5jdGlvbnMgKi8KLQotX1BST1RP VFlQKCBjaGFyICogZnBmb3JtYXQsIChDS0ZMT0FULCBpbnQsIGludCkgKTsKLV9QUk9UT1RZUCgg Q0tGTE9BVCBja3JvdW5kLCAoQ0tGTE9BVCwgaW50LCBjaGFyICosIGludCkgKTsKLQotZXh0ZXJu IGNoYXIgbWF0aF9waVtdOyAgICAgICAgICAgICAgICAgIC8qIFZhbHVlIG9mIFBpICovCi1leHRl cm4gaW50IHNleHBlY2hvOyAgICAgICAgICAgICAgICAgICAgLyogU0VUIFNFWFBSRVNTSU9OIEVD SE8gdmFsdWUgKi8KLWV4dGVybiBjaGFyICogc2V4cHZhbDsgICAgICAgICAgICAgICAgICAvKiBM YXN0IHRvcC1sZXZlbCBTLUV4cHJlc3Npb24gdmFsdWUgKi8KLWV4dGVybiBjaGFyICogbGFzdHNl eHA7ICAgICAgICAgICAgICAgICAvKiBMYXN0IFMtRXhwcmVzc2lvbiAqLwotaW50IHNleHBybWF4 ID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIExvbmdlc3QgcmVzdWx0IChmb3Igc3RhdHMp ICovCi1pbnQgc2V4cGRtYXggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogTWF4IGRlcHRo IHJlYWNoZWQgKGZvciBzdGF0cykgKi8KLWludCBzZXhwZGVwICA9IDA7ICAgICAgICAgICAgICAg ICAgICAgICAvKiBkb3NleHAoKSByZWN1cnNpb24gZGVwdGggKi8KLXN0YXRpYyBpbnQgKiBzeHJs ZW4gPSBOVUxMOyAgICAgICAgICAgICAvKiBSZXN1bHQgc3RhY2sgc3RyaW5nIHNpemVzICovCi1z dGF0aWMgY2hhciAqKiBzeHJlc3VsdCA9IE5VTEw7ICAgICAgICAgLyogUmVzdWx0IHN0YWNrICov Ci0KLS8qICBzIGggbyBzIGUgeCBwICAtLSAgU2hvdyBTLUV4cHJlc3Npb24gaW5mbyAgKi8KLQot Vk9JRAotc2hvc2V4cCgpIHsKLSAgICBwcmludGYoIlxuIik7Ci0gICAgcHJpbnRmKCIgc2V4cHJl c3Npb24gZWNoby1yZXN1bHQ6ICVzXG4iLHNob3dvb2Eoc2V4cGVjaG8pKTsKLSAgICBwcmludGYo IiBzZXhwcmVzc2lvbiBkZXB0aC1saW1pdDogJWRcbiIsc2V4cG1heGRlcCk7Ci0gICAgcHJpbnRm KCJcbiIpOwotICAgIHByaW50ZigiIG1heGltdW0gZGVwdGggcmVhY2hlZDogICAlZFxuIixzZXhw ZG1heCk7Ci0gICAgcHJpbnRmKCIgbG9uZ2VzdCByZXN1bHQgcmV0dXJuZWQ6ICVkXG4iLHNleHBy bWF4KTsKLSAgICBwcmludGYoIlxuIik7Ci0gICAgcHJpbnRmKCIgdHJ1bmNhdGUgYWxsIHJlc3Vs dHM6ICAgICVzXG4iLHNob3dvZmYoc2V4cHRydW5jKSk7Ci0gICAgcHJpbnRmKCJcbiIpOwotICAg IHByaW50ZigiIGxhc3Qgc2V4cHJlc3Npb246ICAgICAgICAlc1xuIixsYXN0c2V4cCA/IGxhc3Rz ZXhwIDogIihub25lKSIpOwotICAgIHByaW50ZigiIGxhc3QgdmFsdWU6ICAgICAgICAgICAgICAl c1xuIixzZXhwdmFsID8gc2V4cHZhbCA6ICIobm9uZSkiKTsKLSAgICBwcmludGYoIlxuIik7Ci19 Ci0KLQotc3RhdGljIGNoYXIgKgotc2V4cGRlYnVnKHMpIGNoYXIgKiBzOyB7Ci0gICAgLyogRm9y IGRlYnVnZ2luZyAtLSBpbmNsdWRlcyByZWN1cnNpb24gZGVwdGggaW4gZWFjaCBkZWJ1ZyBlbnRy eSAqLwotICAgIHN0YXRpYyBjaGFyIGJ1Zls2NF07Ci0gICAgY2ttYWttc2coYnVmLDY0LCJkb3Nl eHBbIixja2l0b2Eoc2V4cGRlcCksIl0gIixzKTsKLSAgICByZXR1cm4oKGNoYXIgKilidWYpOwot fQotCi0vKiAgZCBvIHMgZSB4IHAgIC0tICBTLUV4cHJlc3Npb24gUmVhZGVyICAqLwotCi0vKiAg UmV0dXJucyB2YWx1ZSBhcyBzdHJpbmcgKGVtcHR5LCBudW1lcmljLCBvciBub24tbnVtZXJpYykg Ki8KLQotc3RhdGljIGNoYXIgc3hyb3VuZGJ1ZlszMl07CQkvKiBGb3IgUk9VTkQgcmVzdWx0ICov Ci0KLWNoYXIgKgotZG9zZXhwKHMpIGNoYXIgKnM7IHsgICAgICAgICAgICAgICAgICAgIC8qIHMg PSBTLUV4cHJlc3Npb24gKi8KLSAgICBleHRlcm4gc3RydWN0IG10YWIgKm1hY3RhYjsgICAgICAg ICAvKiBNYWNybyB0YWJsZSAqLwotICAgIGV4dGVybiBpbnQgbWFjbHZsLCBubWFjOwotICAgIGV4 dGVybiBjaGFyICptcnZhbFtdOwotICAgIGV4dGVybiBpbnQgbWFrZXN0cmxlbjsgICAgICAgICAg ICAgIC8qIChzZWUgbWFrZXN0cigpKSAqLwotICAgIHN0cnVjdCBzdHJpbmdhcnJheSAqIHEgPSBO VUxMOyAgICAgIC8qIGNrc3BsaXQoKSByZXR1cm4gdHlwZSAqLwotICAgIGNoYXIgKiBwW1NFWFBN QVgrMV0sICoqIHAyOyAgICAgICAgIC8qIExpc3QgaXRlbXMgKG11c3QgYmUgb24gc3RhY2spICov Ci0gICAgY2hhciAqIGxpbmUgPSBOVUxMOyAgICAgICAgICAgICAgICAgLyogRm9yIGJ1aWxkaW5n IG1hY3JvIGFyZ3VtZW50IGxpc3QgKi8KLSAgICBpbnQgbm9zcGxpdCA9IDA7Ci0gICAgaW50IGxp bmVsZW4gPSAwOwotICAgIGludCBsaW5lcG9zID0gMDsKLSAgICBpbnQgcXVvdGUgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAvKiBMSVNQIHF1b3RlIGZsYWcgKi8KLSAgICBjaGFyICogczI7ICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBXb3JrZXJzICovCi0gICAgaW50IGt3LCBrd2ZsYWdz LCBteCA9IDAsIHggPSAwOwotICAgIGludCBub3QgPSAwLCB0cnVuY2F0ZSA9IDAsIGJ1aWx0aW4g PSAwOwotICAgIGludCBmcGZsYWcgPSAwLCBxdWl0ID0gMCwgbWFjcm8gPSAwOwotICAgIENLX09G Rl9UIHJlc3VsdCA9IDAsIGksIGosIGssIG4gPSAwOwotICAgIENLRkxPQVQgZnBqLCBmcHJlc3Vs dCA9IDAuMDsgICAgICAgIC8qIEZsb2F0aW5nLXBvaW50IHJlc3VsdHMgKi8KLSAgICBpbnQgcGZs YWcgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBIYXZlIHByZWRpY2F0ZSAqLwotICAgIGlu dCBwcmVzdWx0ID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIFByZWRpY2F0ZSByZXN1bHQgKi8K LSAgICBpbnQgbXVzdGZyZWUgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSBtYWxsb2Mn ZCB3ZSBtdXN0IGZyZWUgKi8KLQotICAgIHNleHBwdiA9IC0xOyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFByZWRpY2F0ZSB2YWx1ZSAqLwotICAgIHMyID0gIiI7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIERlZmF1bHQgcmV0dXJuIHZhbHVlICovCi0KLSAgICBkZWJ1ZyhGMTExLHNl eHBkZWJ1ZygiZW50cnkgMSIpLHMsc2V4cHJjKTsKLQotICAgIGlmICgrK3NleHBkZXAgPiBzZXhw bWF4ZGVwKSB7ICAgICAgIC8qIEtlZXAgdHJhY2sgb2YgZGVwdGggKi8KLSAgICAgICAgcHJpbnRm KCI/Uy1FeHByZXNzaW9uIGRlcHRoIGxpbWl0IGV4Y2VlZGVkOiAlZFxuIixzZXhwbWF4ZGVwKTsK LSAgICAgICAgc2V4cHJjKys7Ci0gICAgICAgIGRlYnVnKEYxMTEsc2V4cGRlYnVnKCJtYXggZGVw dGggZXhjZWVkZWQiKSxzLHNleHByYyk7Ci0gICAgfQotICAgIGlmIChzZXhwZGVwID4gc2V4cGRt YXgpICAgICAgICAgICAgIC8qIEZvciBzdGF0cyAqLwotICAgICAgc2V4cGRtYXggPSBzZXhwZGVw OwotCi0gICAgaWYgKHNleHByYykgICAgICAgICAgICAgICAgICAgICAgICAgLyogRXJyb3IsIHF1 aXQgYWxsIGxldmVscyAqLwotICAgICAgZ290byB4ZG9zZXhwOyAgICAgICAgICAgICAgICAgICAg IC8qIEFsd2F5cyBnb3RvIGNvbW1vbiBleGl0IHBvaW50ICovCi0KLSAgICBkZWJ1ZyhGMTExLHNl eHBkZWJ1ZygiZW50cnkgMiIpLHMsc2V4cHJjKTsKLQotICAgIGlmICghcykgcyA9ICIiOyAgICAg ICAgICAgICAgICAgICAgIC8qIE51bGwgb3IgZW1wdHkgYXJnICovCi0KLSAgICB3aGlsZSAoKnMg PT0gU1ApIHMrKzsgICAgICAgICAgICAgICAvKiBTdHJpcCBsZWFkaW5nIHNwYWNlcyAqLwotICAg IGlmICghKnMpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNvIGVtcHR5IHJlc3VsdCAq LwotICAgICAgZ290byB4ZG9zZXhwOwotLyoKLSAgQWxsb2NhdGUgcmVzdWx0IHN0YWNrIHVwb24g Zmlyc3QgdXNlLCBvciBhZnRlciBpdCBoYXMgYmVlbiByZXNpemVkIHdpdGgKLSAgU0VUIFNFWFAg REVQVEgtTElNSVQuCi0qLwotICAgIGlmICghc3hyZXN1bHQpIHsKLSAgICAgICAgc3hyZXN1bHQg PSAoY2hhciAqKiltYWxsb2Moc2V4cG1heGRlcCAqIHNpemVvZihjaGFyICopKTsKLSAgICAgICAg aWYgKCFzeHJlc3VsdCkgewotICAgICAgICAgICAgcHJpbnRmKCI/TWVtb3J5IGFsbG9jYXRpb24g ZmFpbHVyZSAtIFwiJXNcIlxuIiwgcyk7Ci0gICAgICAgICAgICBzZXhwcmMrKzsKLSAgICAgICAg ICAgIGdvdG8geGRvc2V4cDsKLSAgICAgICAgfQotICAgICAgICBzeHJsZW4gPSAoaW50ICopbWFs bG9jKHNleHBtYXhkZXAgKiBzaXplb2YoaW50KSk7Ci0gICAgICAgIGlmICghc3hybGVuKSB7Ci0g ICAgICAgICAgICBwcmludGYoIj9NZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIC0gXCIlc1wiXG4i LCBzKTsKLSAgICAgICAgICAgIHNleHByYysrOwotICAgICAgICAgICAgZ290byB4ZG9zZXhwOwot ICAgICAgICB9Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBzZXhwbWF4ZGVwOyBpKyspIHsKLSAg ICAgICAgICAgIHN4cmVzdWx0W2ldID0gTlVMTDsgICAgICAgICAvKiBSZXN1bHQgcG9pbnRlcnMg Ki8KLSAgICAgICAgICAgIHN4cmxlbltpXSA9IDA7ICAgICAgICAgICAgICAvKiBCdWZmZXIgc2l6 ZXMgKi8KLSAgICAgICAgfQotICAgIH0KLSAgICBzMiA9IHM7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBzMiBpcyB0aGUgcmVzdWx0IHBvaW50ZXIgKi8KLSAgICBrID0gMDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBMZW5ndGggYWNjdW11bGF0b3IgKi8KLSAgICBpZiAo c1swXSA9PSAnKCcpIHsgICAgICAgICAgICAgICAgICAvKiBTdGFydHMgd2l0aCBvcGVuIHBhcmVu PyAqLwotICAgICAgICB3aGlsZSAoKnMyKyspIGsrKzsgICAgICAgICAgICAgIC8qIEdldCBsZW5n dGggKi8KLSAgICAgICAgaWYgKHNbay0xXSA9PSAnKScpIHsgICAgICAgICAgICAvKiBTdHJpcCBv dXRlciBwYXJlbnMgaWYgYW55ICovCi0gICAgICAgICAgICBzW2stMV0gPSBOVUw7Ci0gICAgICAg ICAgICBzKys7Ci0gICAgICAgICAgICBrIC09IDI7Ci0gICAgICAgICAgICB3aGlsZSAoKnMgPT0g U1ApIHsgICAgICAgICAgLyogU3RyaXAgbGVhZGluZyBzcGFjZXMgZnJvbSByZXN1bHQgKi8KLSAg ICAgICAgICAgICAgICBzKys7Ci0gICAgICAgICAgICAgICAgay0tOwotICAgICAgICAgICAgfQot ICAgICAgICAgICAgd2hpbGUgKGsgPiAwICYmIHNbay0xXSA9PSBTUCkgeyAvKiBBbmQgdHJhaWxp bmcgc3BhY2VzLiAqLwotICAgICAgICAgICAgICAgIHNbay0xXSA9IE5VTDsKLSAgICAgICAgICAg ICAgICBrLS07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCEqcykgeyAg ICAgICAgICAgICAgICAgICAgICAvKiBJZiBub3RoaW5nIHJlbWFpbnMgKi8KLSAgICAgICAgICAg IHMyID0gIiI7ICAgICAgICAgICAgICAgICAgICAvKiByZXR1cm4gZW1wdHkgcmVzdWx0LiAqLwot ICAgICAgICAgICAgZ290byB4ZG9zZXhwOwotICAgICAgICB9Ci0gICAgfQotICAgIC8qIEJyZWFr IHJlc3VsdCB1cCBpbnRvICJ3b3JkcyIgKGFuIFNFWFAgY291bnRzIGFzIGEgd29yZCkgKi8KLQot ICAgIGZvciAoaSA9IDA7IGkgPCBTRVhQTUFYKzE7IGkrKyApIHsJLyogQ2xlYXIgdGhlIG9wZXJh bmRzICovCi0JcFtpXSA9IE5VTEw7Ci0gICAgfQotICAgIGlmICghKihzKzEpIHx8ICEqKHMrMikp IHsgICAgICAgICAgIC8qIE5vIG5lZWQgdG8gY2FsbCBja3NwbGl0KCkgKi8KLSAgICAgICAgbiA9 IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZiBpdCdzIG9uZSBvciB0d28gY2hhcnMu ICovCi0gICAgICAgIHBbMV0gPSBzOyAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gbmVlZCB0 byBtYWxsb2MgdGhpcyBlaXRoZXIuICovCi0Jbm9zcGxpdCA9IDE7Ci0gICAgICAgIGRlYnVnKEYx MDEsc2V4cGRlYnVnKCJub3NwbGl0IiksIiIsbik7Ci0gICAgICAgIGlmIChzWzBdID09ICcoJykg eyAgICAgICAgICAgICAgLyogKCkgZW1wdHkgKi8KLSAgICAgICAgICAgIHMyID0gIiI7Ci0gICAg ICAgICAgICBnb3RvIHhkb3NleHA7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotCW5vc3BsaXQg PSAwOwotICAgICAgICBxID0gY2tzcGxpdCgxLFNFWFBNQVgscyxOVUxMLCJcXCVbXSYkKy0vPSpe X0Ahe30vPD58LiN+J2A6Oz8iLDgsMzksMCk7Ci0gICAgICAgIGlmICghcSkKLSAgICAgICAgICBn b3RvIHhkb3NleHA7Ci0gICAgICAgIG4gPSBxLT5hX3NpemU7ICAgICAgICAgICAgICAgICAgLyog TnVtYmVyIG9mIGl0ZW1zICovCi0gICAgICAgIGRlYnVnKEYxMDEsc2V4cGRlYnVnKCJzcGxpdCIp LCIiLG4pOwotICAgICAgICBpZiAobiA8IDAgfHwgbiA+IFNFWFBNQVgpIHsgICAgIC8qIENoZWNr IGZvciB0b28gbWFueSAqLwotICAgICAgICAgICAgcHJpbnRmKCI/VG9vIG1hbnkgb3BlcmFuZHM6 IG1heCA9ICVkXG4iLFNFWFBNQVgpOwotICAgICAgICAgICAgc2V4cHJjKys7Ci0gICAgICAgICAg ICBnb3RvIHhkb3NleHA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG4gPT0gMCkgICAgICAgICAg ICAgICAgICAgICAvKiBOb25lLCByZXN1bHQgaXMgTlVMTCwgZG9uZS4gKi8KLSAgICAgICAgICBn b3RvIHhkb3NleHA7Ci0gICAgICAgIGlmIChuID09IDEgJiYgc1swXSA9PSAnKCcpIHsgICAgLyog T25lIGJ1dCBpdCdzIGFub3RoZXIgU0VYUCAqLwotICAgICAgICAgICAgczIgPSBkb3NleHAocyk7 Ci0gICAgICAgICAgICBnb3RvIHhkb3NleHA7Ci0gICAgICAgIH0KLSAgICAgICAgcDIgPSBxLT5h X2hlYWQ7ICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byByZXN1bHQgYXJyYXkuICovCi0gICAg ICAgIGZvciAoaSA9IDE7IGkgPD0gbjsgaSsrKSB7ICAgICAgLyogV2UgbXVzdCBjb3B5IGl0IGJl Y2F1c2UgKi8KLSAgICAgICAgICAgIHBbaV0gPSBOVUxMOyAgICAgICAgICAgICAgICAvKiByZWN1 cnNpdmUgY2FsbHMgdG8gZG9zZXhwKCkgKi8KLSAgICAgICAgICAgIGlmIChwMltpXSkgICAgICAg ICAgICAgICAgICAvKiB3cml0ZSBvdmVyIHRoZSBzYW1lIGFycmF5ICovCi0gICAgICAgICAgICAg IG1ha2VzdHIoJihwW2ldKSxwMltpXSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHNbMF0gPT0g JygnKSB7ICAgICAgICAgICAgICAvKiBPcGVyYXRvciBpcyBhbiBTLUV4cHJlc3Npb24gKi8KLSAg ICAgICAgICAgIHMyID0gZG9zZXhwKHBbMV0pOyAgICAgICAgICAvKiBSZXBsYWNlIGl0IGJ5IGl0 cyB2YWx1ZSAqLwotICAgICAgICAgICAgbWFrZXN0cigmKHBbMV0pLHMyKTsKLSAgICAgICAgfQot ICAgICAgICBtdXN0ZnJlZSsrOyAgICAgICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIHRvIGZy ZWUgaXQgKi8KLSAgICB9Ci0gICAgZGVidWcoRjExMCxzZXhwZGVidWcoImhlYWQiKSxwWzFdLDAp OwotCi0gICAgaWYgKG4gPT0gMSAmJiBwWzFdKSB7Ci0gICAgICAgIGlmICgqKHBbMV0pID09ICdc MDQ3JykgeyAgICAgICAvKiBBcG9zdHJvcGhlID0gTElTUCBxdW90ZSBjaGFyYWN0ZXIgKi8KLSAg ICAgICAgICAgIHMyID0gcFsxXTsKLSAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKLSAgICAgICAg fQotICAgIH0KLS8qCi0gIFRoaXMgc2VjdGlvbiBzaWRlc3RlcHMgeGxvb2t1cCgpIG9mIHRoZSBt b3N0IGNvbW1vbiBvcGVyYXRvcnMuCi0gIEl0J3Mgbm90IG5lY2Vzc2FyeSBidXQgaXQgc3BlZWRz IHVwIFNFWFAtaGVhdnkgbG9vcHMgYnkgYWJvdXQgMTAlLgotKi8KLSAgICBrd2ZsYWdzID0gMDsK LSAgICBpZiAobiA+IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb29rIHVwIHRoZSBv cGVyYXRvciAqLwotICAgICAgICBzMiA9IHBbMV07ICAgICAgICAgICAgICAgICAgICAgIC8qIFBy ZWxvb2t1cCBvcHRpbWl6YXRpb24uLi4gKi8KLSAgICAgICAgaWYgKCFzMikKLSAgICAgICAgICBz MiA9ICIiOwotICAgICAgICBpZiAoISpzMikKLSAgICAgICAgICBnb3RvIHhkb3NleHA7Ci0gICAg ICAgIGt3ID0gMDsKLSAgICAgICAgeCA9IDA7Ci0gICAgICAgIGlmIChpc2RpZ2l0KCpzMikpIHsg ICAgICAgICAgICAgLyogRGlnaXQgKi8KLSAgICAgICAgICAgIHggPSAtMjsKLQotICAgICAgICB9 IGVsc2UgaWYgKGlzYWxwaGEoKnMyKSAmJiAhKihzMisxKSkgeyAvKiBTaW5nbGUgbGV0dGVyICov Ci0gICAgICAgICAgICB4ID0gLTE7Ci0KLSAgICAgICAgfSBlbHNlIGlmICgqczIgPT0gJ3MnIHx8 ICpzMiA9PSAnUycpIHsgLyogU0VUUSAqLwotICAgICAgICAgICAgczIrKzsKLSAgICAgICAgICAg IGlmICgqczIgPT0gJ2UnIHx8ICpzMiA9PSAnRScpIHsKLSAgICAgICAgICAgICAgICBzMisrOwot ICAgICAgICAgICAgICAgIGlmICgqczIgPT0gJ3QnIHx8ICpzMiA9PSAnVCcpIHsKLSAgICAgICAg ICAgICAgICAgICAgczIrKzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCpzMiA9PSAncScgfHwg KnMyID09ICdRJykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEqKHMyKzEpKSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IFNYX1NFVDsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBrd2ZsYWdzID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWls dGluID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBp ZiAoIXgpIHsKLSAgICAgICAgICAgIGlmICghKihzMisxKSkgeyAgICAgICAgICAgICAvKiBDb21t b24gc2luZ2xlLWNoYXJhY3RlciBvcHMgKi8KLSAgICAgICAgICAgICAgICBpZiAoKnMyID09ICcr JykgewotICAgICAgICAgICAgICAgICAgICB4ID0gU1hfQUREOwotICAgICAgICAgICAgICAgICAg ICBrd2ZsYWdzID0gMDsKLSAgICAgICAgICAgICAgICAgICAgYnVpbHRpbiA9IDE7Ci0gICAgICAg ICAgICAgICAgfSBlbHNlIGlmICgqczIgPT0gJy0nKSB7Ci0gICAgICAgICAgICAgICAgICAgIHgg PSBTWF9TVUI7Ci0gICAgICAgICAgICAgICAgICAgIGt3ZmxhZ3MgPSAwOwotICAgICAgICAgICAg ICAgICAgICBidWlsdGluID0gMTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCpzMiA9PSAn KicpIHsKLSAgICAgICAgICAgICAgICAgICAgeCA9IFNYX01VTDsKLSAgICAgICAgICAgICAgICAg ICAga3dmbGFncyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGJ1aWx0aW4gPSAxOwotICAgICAg ICAgICAgICAgIH0gZWxzZSBpZiAoKnMyID09ICcvJykgewotICAgICAgICAgICAgICAgICAgICB4 ID0gU1hfRElWOwotICAgICAgICAgICAgICAgICAgICBrd2ZsYWdzID0gU1hGX1RXTzsKLSAgICAg ICAgICAgICAgICAgICAgYnVpbHRpbiA9IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgfQotICAgICAgICAgICAgaWYgKCF4KSB7ICAgICAgICAgICAgICAgICAgIC8qIE5vbmUgb2Yg dGhlIGFib3ZlLCBsb29rIGl0IHVwICovCi0gICAgICAgICAgICAgICAgeCA9IHhsb29rdXAoc2V4 cG9wcyxwWzFdLG5zZXhwb3BzLCZrdyk7Ci0gICAgICAgICAgICAgICAgaWYgKHggPiAwKSB7Ci0g ICAgICAgICAgICAgICAgICAgIGt3ZmxhZ3MgPSBzZXhwb3BzW2t3XS5mbGdzOwotICAgICAgICAg ICAgICAgICAgICBidWlsdGluID0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9 Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLyogSWYgbm9uZSBvZiB0aGUgYWJvdmUsIGNoZWNrIGJ1 aWx0LWluIGNvbnN0YW50cyAqLwotCi0gICAgaWYgKHggPT0gLTEpIHsKLSAgICAgICAgeCA9IHhs b29rdXAoc2V4cGNvbnN0cyxwWzFdLG5zZXhwY29uc3RzLCZrdyk7Ci0gICAgICAgIGlmICh4ID4g MCkgewotICAgICAgICAgICAgc3dpdGNoICh4KSB7Ci0gICAgICAgICAgICAgIGNhc2UgU1hDX05J TDoKLSAgICAgICAgICAgICAgICBzMiA9ICIiOwotICAgICAgICAgICAgICAgIGdvdG8geGRvc2V4 cDsKLSAgICAgICAgICAgICAgY2FzZSBTWENfUEk6Ci0gICAgICAgICAgICAgICAgczIgPSBtYXRo X3BpOwotICAgICAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKLSAgICAgICAgICAgICAgY2FzZSBT WENfVDoKLSAgICAgICAgICAgICAgICBzMiA9ICIxIjsKLSAgICAgICAgICAgICAgICBnb3RvIHhk b3NleHA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG4gPT0gMSkg eyAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IGFuIGV4cHJlc3Npb24gKi8KLSAgICAgICAg aWYgKGJ1aWx0aW4pIHsgICAgICAgICAgICAgICAgICAvKiBCdWlsdC1pbiBvcGVyYW5kPyAqLwot ICAgICAgICAgICAgc3dpdGNoICh4KSB7CQkvKiBPcGVyYXRvcnMgd2l0aCBkZWZhdWx0IHZhbHVl cyAqLwotICAgICAgICAgICAgICBjYXNlIFNYX0VWQToKLSAgICAgICAgICAgICAgICBzMiA9ICIi OwotICAgICAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKLSAgICAgICAgICAgICAgY2FzZSBTWF9N VUw6ICAgICAgICAgICAgICAvKiAoKikgKi8KLSAgICAgICAgICAgICAgICBzMiA9IHNleHB2YWwg PyBzZXhwdmFsIDogIjEiOwotICAgICAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKLSAgICAgICAg ICAgICAgY2FzZSBTWF9BTkQ6ICAgICAgICAgICAgICAvKiAoQU5EKSAqLwotICAgICAgICAgICAg ICBjYXNlIFNYX0JXQTogICAgICAgICAgICAgIC8qIEJpdHdpc2UgKCYpICovCi0gICAgICAgICAg ICAgICAgcmVzdWx0Kys7Ci0gICAgICAgICAgICAgIGNhc2UgU1hfTE9SOiAgICAgICAgICAgICAg LyogKE9SKSAqLwotICAgICAgICAgICAgICBjYXNlIFNYX0JXTzogICAgICAgICAgICAgIC8qIEJp dHdpc2UgKHwpICovCi0gICAgICAgICAgICAgIGNhc2UgU1hfQUREOiAgICAgICAgICAgICAgLyog KCspICovCi0gICAgICAgICAgICAgIGNhc2UgU1hfU1VCOiAgICAgICAgICAgICAgLyogKC0pICov Ci0gICAgICAgICAgICAgICAgczIgPSByZXN1bHQgPyAiMSIgOiAiMCI7Ci0gICAgICAgICAgICAg ICAgZ290byB4ZG9zZXhwOwotICAgICAgICAgICAgfQotCi0gICAgICAgIH0gZWxzZSB7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogTm90IGEgYnVpbHQtaW4gb3BlcmFuZCAqLwotICAgICAgICAg ICAgY2hhciAqIHAxOwotICAgICAgICAgICAgcDEgPSBwWzFdOwotICAgICAgICAgICAgd2hpbGUg KCpwMSA9PSBTUCkgcDErKzsKLSAgICAgICAgICAgIGlmICghaXNhbHBoYSgqcDEpKSB7Ci0gICAg ICAgICAgICAgICAgaWYgKHh4ZmxvYXQocDEsMCkgPiAwKSB7IC8qIElzIGl0IGEgbnVtYmVyPyAq LwotICAgICAgICAgICAgICAgICAgICBzMiA9IHAxOwotICAgICAgICAgICAgICAgICAgICB3aGls ZSAoKnMyID09ICcrJykgczIrKzsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCpwMSA9PSAn KCcpIHsgLyogQW4gUy1FeHByZXNzaW9uPyAqLwotCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICAg ICAgICAgICAgICBzMiA9IGRvc2V4cChzMik7Ci0jZWxzZQotICAgICAgICAgICAgICAgICAgICBz MiA9IGRvc2V4cChwMSk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICBnb3RvIHhkb3NleHA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHgg PCAxKSB7ICAgICAgICAgLyogSXMgaXQgYSB2YXJpYWJsZT8gKi8KLSAgICAgICAgICAgICAgICBq ID0gbXhsb29rKG1hY3RhYixwWzFdLG5tYWMpOyAvKiBMb29rIGl0IHVwICovCi0gICAgICAgICAg ICAgICAgZGVidWcoRjExMSxzZXhwZGVidWcoIm49PTEgbXhsb29rIikscFsxXSxqKTsKLSAgICAg ICAgICAgICAgICBzMiA9IChqID4gLTEpID8gbWFjdGFiW2pdLm12YWwgOiAiIjsKLSAgICAgICAg ICAgICAgICBpZiAoIXMyKSBzMiA9ICIiOwotICAgICAgICAgICAgICAgIGlmICh4eGZsb2F0KHMy LDApID4gMCkgIC8qIE1hY3JvIHZhbHVlIGlzIGEgbnVtYmVyICovCi0gICAgICAgICAgICAgICAg ICBnb3RvIHhkb3NleHA7Ci0gICAgICAgICAgICAgICAgaWYgKGogPiAtMSkgeyAgICAgICAgICAg LyogSXQncyBhIG1hY3JvICovCi0gICAgICAgICAgICAgICAgICAgIG14ID0gajsKLSAgICAgICAg ICAgICAgICAgICAgeCA9IGo7ICAgICAgICAgICAgICAvKiB3aG9zZSBkZWZpbml0aW9uIGlzIG5v dCBudW1lcmljICovCi0gICAgICAgICAgICAgICAgICAgIGlmICgqczIgPT0gJygnKSB7ICAgLyog SXMgaXQgYW4gUy1FeHByZXNzaW9uPyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgLyogV2Ug aGF2ZSB0byBhbGxvY2F0ZSBtZW1vcnkgb24gdGhlIHN0YWNrICovCi0gICAgICAgICAgICAgICAg ICAgICAgICAvKiB0byBjYWxsIG91cnNlbHZlcyByZWN1cnNpdmVseSBvbiBpdCAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgLyogb3RoZXJ3aXNlIHdlJ2xsIHdpcGUgb3V0IHRoZSBtYWNybyBk ZWZpbml0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogczMgPSBOVUxMOwot ICAgICAgICAgICAgICAgICAgICAgICAgLyogaW50IGsgPSAwOyAqLwotICAgICAgICAgICAgICAg ICAgICAgICAgczMgPSBzMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgqczMrKykg aysrOwotICAgICAgICAgICAgICAgICAgICAgICAgczMgPSAoY2hhciAqKW1hbGxvYyhrICsgNCk7 Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoczMpIHsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJjcHkoczMsczIpOyAgIC8qIFNBRkUgKi8KLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzMiA9IGRvc2V4cChzMyk7IC8qIEV2YWx1YXRlIGl0ICovCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgZnJlZShzMyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP01lbW9yeSBhbGxvY2F0aW9u IGZhaWx1cmUgLSBcIiVzXCJcbiIsczIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl eHByYysrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg ICAgZ290byB4ZG9zZXhwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg ICAgIGlmICgqczIgPT0gJ1wwNDcnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzMisrOwot I2lmZGVmIENPTU1FTlQKLQkJCS8qIER1bXBzIGNvcmUgaWYgcGV0dHkgb3B0aW1pemF0aW9uIHdh cyB0YWtlbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmKHBbMV0pLHMyKTsK LSNlbHNlCi0JCQlpZiAoIW5vc3BsaXQgJiYgcFsxXSkgZnJlZShwWzFdKTsKLQkJCXBbMV0gPSAo Y2hhciAqKW1hbGxvYygoaW50KXN0cmxlbihzMikgKyAxKTsKLSNlbmRpZiAvKiBDT01NRU5UICov Ci0gICAgICAgICAgICAgICAgICAgICAgICBzMiA9IHBbMV07Ci0JCQlpZiAoIXMyKSBzMiA9ICIi OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpzMiA9PSAnKCcpIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoczJbbWFrZXN0cmxlbi0xXSA9PSAnKScpIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgczJbbWFrZXN0cmxlbi0xXSA9IE5VTDsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgczIrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTEwLHNleHBkZWJ1ZygiJ0EiKSxzMiwwKTsKLSAgICAgICAgICAgICAgICAgICAgICAg IGdvdG8geGRvc2V4cDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg ICBtYWNybysrOyAgICAgICAgICAgIC8qIE5vdCBhbiBTLUV4cHJlc3Npb24gKi8KLSAgICAgICAg ICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAvKiBOb3QgZm91bmQgaW4gbWFjcm8gdGFi bGUgKi8KLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/Tm90IGRlZmluZWQgLSBcIiVzXCJc biIsIHBbMV0pOwotICAgICAgICAgICAgICAgICAgICBzZXhwcmMrKzsKLSAgICAgICAgICAgICAg ICAgICAgZ290byB4ZG9zZXhwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg ICAgICAgfQotICAgIH0gZWxzZSBpZiAoeCA8IDEgJiYgIW1hY3JvKSB7ICAgICAgIC8qIG4gPiAx IGFuZCBub3QgYSBidWlsdC1pbiBvcGVyYXRvciAqLwotICAgICAgICB4ID0gbXhsb29rKG1hY3Rh YixwWzFdLG5tYWMpOyAgIC8qIFNlZSBpZiBpdCdzIGEgbWFjcm8gKi8KLSAgICAgICAgZGVidWco RjExMSxzZXhwZGVidWcoIm4hPTEgbXhsb29rIikscFsxXSx4KTsKLSAgICAgICAgaWYgKHggPCAw KSB7Ci0gICAgICAgICAgICBwcmludGYoIj9JbnZhbGlkIG9wZXJhbmQgLSBcIiVzXCJcbiIscFsx XSk7Ci0gICAgICAgICAgICBzZXhwcmMrKzsKLSAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKLSAg ICAgICAgfQotICAgICAgICBteCA9IHg7Ci0gICAgICAgIG1hY3JvKys7Ci0gICAgfQotICAgIGlm IChidWlsdGluKSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIEJ1aWx0LWluIG9wZXJhdG9yLi4u ICovCi0gICAgICAgIGlmIChrd2ZsYWdzKSB7Ci0gICAgICAgICAgICBpbnQgZmxnczsKLSAgICAg ICAgICAgIGlmICgoZmxncyA9IChrd2ZsYWdzICYgKFNYRl9PTkV8U1hGX1RXTykpKSkgewotICAg ICAgICAgICAgICAgIHN3aXRjaCAoZmxncykgewotICAgICAgICAgICAgICAgICAgY2FzZSAoU1hG X09ORXxTWEZfVFdPKToKLSAgICAgICAgICAgICAgICAgICAgaWYgKG4gPCAyKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBwcmludGYoIj9Ub28gZmV3IG9wZXJhbmRzIC0gXCIlc1wiXG4iLHMp OwotICAgICAgICAgICAgICAgICAgICAgICAgc2V4cHJjKys7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBnb3RvIHhkb3NleHA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFNYRl9UV086Ci0gICAgICAgICAg ICAgICAgICAgIGlmIChuIDwgMykgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/ VG9vIGZldyBvcGVyYW5kcyAtIFwiJXNcIlxuIixzKTsKLSAgICAgICAgICAgICAgICAgICAgICAg IHNleHByYysrOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byB4ZG9zZXhwOwotICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICAgICAgY2FzZSBTWEZfT05FOgotCQkgICAgaWYgKG4gIT0gMikgewotICAgICAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCI/VG9vICVzIG9wZXJhbmRzIC0gXCIlc1wiXG4iLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChuID4gMikgPyAibWFueSIgOiAiZmV3Iiwgcyk7Ci0gICAg ICAgICAgICAgICAgICAgICAgICBzZXhwcmMrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdv dG8geGRvc2V4cDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChrd2ZsYWdzICYgU1hGX1BSRSkgeyAgICAvKiBQ cmVkaWNhdGU/ICovCi0JCWlmIChuIDwgMikgewotCQkgICAgcHJpbnRmKCI/VG9vIGZldyBvcGVy YW5kcyAtIFwiJXNcIlxuIixzKTsKLQkJICAgIHNleHByYysrOwotCQkgICAgZ290byB4ZG9zZXhw OwotCQl9Ci0gICAgICAgICAgICAgICAgcGZsYWcgPSAxOwotICAgICAgICAgICAgICAgIHByZXN1 bHQgPSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGt3ZmxhZ3MgJiBTWEZfRkxP KSAgICAgIC8qIE9wZXJhdG9yIHJlcXVpcmVzIGZsb2F0aW5nIHBvaW50ICovCi0gICAgICAgICAg ICAgIGZwZmxhZysrOyAgICAgICAgICAgICAgICAgLyogRm9yY2UgaXQgKi8KLQotCSAgICBpZiAo eCA9PSBTWF9ST1UpIHsJCS8qIFJPVU5EIGNhbiBoYXZlIDEgb3IgMiBhcmd1bWVudHMgKi8KLQkJ aWYgKG4gPCAyIHx8IG4gPiAzKSB7Ci0JCSAgICBwcmludGYoIj9Ub28gJXMgb3BlcmFuZHMgLSBc IiVzXCJcbiIsCi0JCQkgICAobiA+IDMpID8gIm1hbnkiIDogImZldyIsIHMpOwotCQkgICAgc2V4 cHJjKys7Ci0JCSAgICBnb3RvIHhkb3NleHA7Ci0JCX0KLQkgICAgfQotCSAgICBpZiAoeCA9PSBT WF9ST1UpIHsKLQkJLyogQnV0IHRoZXkgYXJlIG5vdCAiY3VtdWxhdGl2ZSIgbGlrZSBvdGhlciBT RVhQIGFyZ3MgKi8KLQkJLyogU28gdGhpcyBjYXNlIGlzIGhhbmRsZWQgc3BlY2lhbGx5ICovCi0J CWNoYXIgYnVmMVszMl0sIGJ1ZjJbMzJdOwotCQlmbG9hdCByOwotCQljaGFyICogczAsICogczE7 Ci0JCWNoYXIgKiBxMCwgKiBxMTsKLQotCQlzMCA9IHBbMl07Ci0JCWlmICghczApIHMwID0gIiI7 Ci0JCWlmICghKnMwKSBzMCA9ICIwIjsKLQkJcTAgPSBkb3NleHAoczApOwotCQlja3N0cm5jcHko YnVmMSxxMCwzMik7Ci0JCXEwID0gYnVmMTsKLQotCQlzMSA9IHBbM107Ci0JCWlmICghczEpIHMx ID0gIiI7Ci0JCWlmICghKnMxKSBzMSA9ICIwIjsKLQkJcTEgPSBkb3NleHAoczEpOwotCQlpZiAo IXExKSBxMSA9ICIiOwotCQlpZiAoISpxMSkgcTEgPSAiMCI7Ci0JCWNrc3RybmNweShidWYyLHEx LDMyKTsKLQkJcTEgPSBidWYyOwotCi0JCXIgPSBja3JvdW5kKGF0b2YocTApLChpbnQpKGF0b2Yo cTEpKSxzeHJvdW5kYnVmLDMxKTsKLQkJczIgPSBzeHJvdW5kYnVmOwotCQlzZXhwcmMgPSAwOwot CQlnb3RvIHhkb3NleHA7Ci0JICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoeCA9PSBTWF9T RVQgfHwgeCA9PSBTWF9MRVQgfHwgLyogQXNzaWdubWVudCBpcyBzcGVjaWFsICovCi0gICAgICAg ICAgICB4ID09IFNYX0lOQyB8fCB4ID09IFNYX0RFQykgewotICAgICAgICAgICAgaW50IHJjOwot ICAgICAgICAgICAgY2hhciBjLCAqIG0sICogczM7Ci0gICAgICAgICAgICBpZiAobiA9PSAxKSB7 Ci0gICAgICAgICAgICAgICAgczIgPSAiIjsKLSAgICAgICAgICAgICAgICBnb3RvIHhkb3NleHA7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzMiA9IE5VTEw7Ci0gICAgICAgICAgICBmb3Ig KGkgPSAxOyBpIDwgbjsgaSArPSAyKSB7IC8qIExvb3AgdGhydSBvcGVyYW5kIHBhaXJzICovCi0g ICAgICAgICAgICAgICAgcmMgPSAwOwotICAgICAgICAgICAgICAgIHMzID0gcFtpKzFdOwotICAg ICAgICAgICAgICAgIGMgPSAqczM7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMCxzZXhwZGVi dWcoInRhcmdldCBwIiksczMsMCk7Ci0KLSAgICAgICAgICAgICAgICAvKiBNYWtlIHN1cmUgdGFy Z2V0IGRvZXNuJ3QgaGF2ZSBtdWx0aXBsZSB3b3JkcyAqLwotICAgICAgICAgICAgICAgIHdoaWxl ICgqczMpIHsgaWYgKCpzMyA8ICchJykgeyByYyA9IDE7IGJyZWFrOyB9OyBzMysrOyB9Ci0gICAg ICAgICAgICAgICAgczMgPSBwW2krMV07Ci0gICAgICAgICAgICAgICAgaWYgKHJjKSB7ICAgICAg ICAgICAgICAgLyogSWYgaXQgZG9lcyBpdCBtdXN0IGhhdmUgYmVlbiAqLwotICAgICAgICAgICAg ICAgICAgICBjaGFyICogczQ7ICAgICAgICAgIC8qIGFuIFNFWFAgc28gZXZhbHVhdGUgaXQgKi8K LSAgICAgICAgICAgICAgICAgICAgczMgPSBkb3NleHAoczMpOwotICAgICAgICAgICAgICAgICAg ICBzNCA9IHMzOwotICAgICAgICAgICAgICAgICAgICByYyA9IDA7Ci0gICAgICAgICAgICAgICAg ICAgIHdoaWxlICgqczQpIHsgaWYgKCpzNCA8ICchJykgeyByYyA9IDE7IGJyZWFrOyB9OyBzNCsr OyB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyYyA9PSAwKSBtYWtlc3RyKCYocFtpKzFdKSxz Myk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLyogQW5kIHRoYXQgaXQn cyBub3QgYSBudW1iZXIsIGV0Yy4gKi8KLSAgICAgICAgICAgICAgICBpZiAocmMgPiAwIHx8IGlz ZGlnaXQoYykgfHwgYyA9PSAnKCcpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/SW52 YWxpZCBhc3NpZ25tZW50IC0gXCIlc1wiXG4iLHMpOwotICAgICAgICAgICAgICAgICAgICBzZXhw cmMrKzsKLSAgICAgICAgICAgICAgICAgICAgZ290byB4ZG9zZXhwOwotICAgICAgICAgICAgICAg IH0gZWxzZSBpZiAoaXNhbHBoYShjKSkgewotICAgICAgICAgICAgICAgICAgICByYyA9IHhsb29r dXAoc2V4cGNvbnN0cyxzMyxuc2V4cGNvbnN0cyxOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAg aWYgKHJjID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/QXNzaWdubWVu dCB0byBjb25zdGFudCAtIFwiJXNcIlxuIixzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNl eHByYysrOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byB4ZG9zZXhwOwotICAgICAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLyogSWYg Kysgb3IgLS0sIGdldCBjdXJyZW50IHZhbHVlIG9mIHZhcmlhYmxlICovCi0gICAgICAgICAgICAg ICAgaWYgKHggPT0gU1hfSU5DIHx8IHggPT0gU1hfREVDKSB7Ci0gICAgICAgICAgICAgICAgICAg IGludCBvayA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIgYnVmWzMyXTsKLSAgICAgICAg ICAgICAgICAgICAgaWYgKGMgPT0gQ01EUSkgeyAgICAvKiBBIGJhY2tzbGFzaCB2YXJpYWJsZSAq LwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG4gPSAzMjsKLSAgICAgICAgICAgICAgICAg ICAgICAgIGNoYXIgKiBzID0gYnVmOwotICAgICAgICAgICAgICAgICAgICAgICAgYnVmWzBdID0g TlVMOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHp6c3RyaW5nKHMzLCZzLCZuKSA8IDAg fHwgIWJ1ZlswXSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSAwOwotICAgICAgICAg ICAgICAgICAgICAgICAgczIgPSBidWY7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7ICAg ICAgICAgICAgLyogQSBtYWNybyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChrID0g bXhsb29rKG1hY3RhYixzMyxubWFjKSkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICBv ayA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg ICAgICAgIHMyID0gbWFjdGFiW2tdLm12YWw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICAgICAgaWYgKCFvaykgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRm KCI/Tm90IGRlZmluZWQgLSBcIiVzXCJcbiIscFtpKzFdKTsKLSAgICAgICAgICAgICAgICAgICAg ICAgIHNleHByYysrOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byB4ZG9zZXhwOwotICAg ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICghczIpIHMyID0gIiI7 Ci0gICAgICAgICAgICAgICAgICAgIGsgPSB4eGZsb2F0KHMyLDApOwotICAgICAgICAgICAgICAg ICAgICBpZiAoayA8IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP05vdCBu dW1lcmljIC0gXCIlc1wiXG4iLHBbaSsxXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXhw cmMrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKLSAgICAgICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnMyID09ICcrJykgczIrKzsK LSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY2thdG9mcyhzMik7Ci0gICAgICAgICAgICAg ICAgICAgIGZwcmVzdWx0ID0gZmxvYXR2YWw7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChrID4g MSB8fCBmcHJlc3VsdCAhPSByZXN1bHQpCi0gICAgICAgICAgICAgICAgICAgICAgZnBmbGFnKys7 Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChuIDwgaSsyKSB7ICAgICAg ICAgIC8qIFZhcmlhYmxlIHdpdGggbm8gdmFsdWUgKi8KLSAgICAgICAgICAgICAgICAgICAgczIg PSAiIjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHggPT0gU1hfU0VUIHx8IHggPT0gU1hfTEVU KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWxtYWMocFtpKzFdLDEpOyAvKiBEZWxldGUg dGhlIHZhcmlhYmxlICovCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHMyID0gIjEiOwot ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAg ICAgICAgLyogVmFyaWFibGUgd2l0aCB2YWx1ZSAqLwotICAgICAgICAgICAgICAgICAgICBrID0g eHhmbG9hdChwW2krMl0sMCk7IC8qIElzIGl0IGEgbnVtYmVyPyAqLwotICAgICAgICAgICAgICAg ICAgICBpZiAoayA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHMyID0gcFtpKzJdOwot ICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCpzMiA9PSAnKycpIHMyKys7Ci0gICAgICAg ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzMiA9IGRvc2V4 cChwW2krMl0pOyAvKiBIYXZlIHZhbHVlLCBldmFsdWF0ZSBpdCAqLwotICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKHNleHByYykgZ290byB4ZG9zZXhwOwotICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKCFzMikgczIgPSAiIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKnMyICYm ICh4ID09IFNYX0lOQyB8fCB4ID09IFNYX0RFQykpCi0gICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICAgIGlmICh4ID09IFNYX0lOQyB8fCB4ID09IFNYX0RFQykgewotICAgICAgICAg ICAgICAgICAgICBrID0geHhmbG9hdChzMiwwKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGsg PCAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9Ob3QgbnVtZXJpYyAtIFwi JXNcIlxuIixzMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXhwcmMrKzsKLSAgICAgICAg ICAgICAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICAgICAgICB3aGlsZSAoKnMyID09ICcrJykgczIrKzsKLSAgICAgICAgICAgICAg ICAgICAgaiA9IGNrYXRvZnMoczIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoayA+IDEpIHsK LSAgICAgICAgICAgICAgICAgICAgICAgIGZwaiA9IGZsb2F0dmFsOwotICAgICAgICAgICAgICAg ICAgICAgICAgZnBmbGFnKys7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBmcGogPSAoQ0tGTE9BVClqOwotICAgICAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgICAgIGlmICh4ID09IFNYX0lOQykgewotICAgICAgICAgICAgICAg ICAgICAgICAgcmVzdWx0ICs9IGo7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcHJlc3VsdCAr PSBmcGo7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeCA9PSBTWF9ERUMpIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCAtPSBqOwotICAgICAgICAgICAgICAgICAgICAg ICAgZnByZXN1bHQgLT0gZnBqOwotICAgICAgICAgICAgICAgICAgICB9Ci0jaWZkZWYgRk5GTE9B VAotICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IGZwcmVzdWx0KSBmcGZsYWcrKzsK LSNlbmRpZgkvKiBGTkZMT0FUICovCi0gICAgICAgICAgICAgICAgICAgIHMyID0gKGZwZmxhZyAm JiAhc2V4cHRydW5jKSA/Ci0JCQlmcGZvcm1hdChmcHJlc3VsdCwwLDApIDogY2tmc3RvYShyZXN1 bHQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoeCA9PSBTWF9MRVQg JiYgY21kbHZsID4gMCkgLyogTEVUIG1ha2VzIHZhciBsb2NhbCAqLwotICAgICAgICAgICAgICAg ICAgYWRkbG9jYWwocFtpKzFdKTsKLSAgICAgICAgICAgICAgICBpZiAoKHJjID0gYWRkbWFjKHBb aSsxXSxzMikpIDwgMCkgeyAvKiBBZGQgdGhlIHZhbHVlICovCi0gICAgICAgICAgICAgICAgICAg IHN3aXRjaCAocmMpIHsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zOiBtID0gIkFycmF5 IG5vdCBkZWNsYXJlZCI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgLTI6IG0g PSAiU3Vic2NyaXB0IG91dCBvZiByYW5nZSI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg IGNhc2UgLTQ6IG0gPSAiT3V0IG9mIG1lbW9yeSI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAg ICAgIGRlZmF1bHQ6IG0gPSAiRXJyb3IgY3JlYXRpbmcgdmFyaWFibGUiOwotICAgICAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiPyVzIC0gXCIlc1wiXG4iLG0s cyk7Ci0gICAgICAgICAgICAgICAgICAgIHNleHByYysrOwotICAgICAgICAgICAgICAgICAgICBn b3RvIHhkb3NleHA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChzMikg cmVzdWx0ID0gY2thdG9mcyhzMik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBnb3RvIHhk b3NleHA7Ci0gICAgICAgIH0gZWxzZSBpZiAoeCA9PSBTWF9JRkMpIHsgICAgICAgICAgICAgICAv KiBDb25kaXRpb25hbCBleHByZXNzaW9uICovCi0gICAgICAgICAgICBpbnQgdHJ1ZSA9IDA7Ci0g ICAgICAgICAgICBpZiAobiA+IDQpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9Ub28gbWFu eSBvcGVyYW5kczogSUYgLSBcIiVzXCJcbiIscyk7Ci0gICAgICAgICAgICAgICAgc2V4cHJjKys7 Ci0gICAgICAgICAgICAgICAgZ290byB4ZG9zZXhwOwotICAgICAgICAgICAgfQotICAgICAgICAg ICAgczIgPSBkb3NleHAocFsyXSk7Ci0gICAgICAgICAgICBpZiAoc2V4cHJjKSBnb3RvIHhkb3Nl eHA7Ci0gICAgICAgICAgICBpZiAoczIpIHsKLSAgICAgICAgICAgICAgICBqID0gY2thdG9mcyhz Mik7Ci0gICAgICAgICAgICAgICAgaWYgKHh4ZmxvYXQoczIsMCkgPT0gMikgewotICAgICAgICAg ICAgICAgICAgICBmcGZsYWcrKzsKLSAgICAgICAgICAgICAgICAgICAgZnByZXN1bHQgPSAoQ0tG TE9BVClyZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAgIGZwaiA9IGZsb2F0dmFsOwotICAgICAg ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZwaiA9IGF0b2YoczIpOwot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0cnVlID0gKChmcGogIT0gMC4wKSA/ IDEgOiAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghdHJ1ZSAmJiBuIDwgNCkg ewotICAgICAgICAgICAgICAgIHMyID0gTlVMTDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg ICAgICAgICAgICAgczIgPSBkb3NleHAodHJ1ZSA/IHBbM10gOiBwWzRdKTsKLSAgICAgICAgICAg ICAgICBpZiAoc2V4cHJjKSBnb3RvIHhkb3NleHA7Ci0gICAgICAgICAgICAgICAgaiA9IHMyID8g Y2thdG9mcyhzMikgOiAwOwotICAgICAgICAgICAgICAgIGlmICh4eGZsb2F0KHMyLDApID09IDIp IHsKLSAgICAgICAgICAgICAgICAgICAgZnBmbGFnKys7Ci0gICAgICAgICAgICAgICAgICAgIGZw cmVzdWx0ID0gKENLRkxPQVQpcmVzdWx0OwotICAgICAgICAgICAgICAgICAgICBmcGogPSBmbG9h dHZhbDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBmcGog PSBzMiA/IGF0b2YoczIpIDogMC4wOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICBmcHJlc3VsdCA9IGZwajsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBqOwotICAgICAgICAg ICAgfQotICAgICAgICAgICAgZ290byB4ZG9zZXhwOwotICAgICAgICB9IGVsc2UgaWYgKHggPT0g U1hfUVVPKSB7Ci0jaWZuZGVmIENPTU1FTlQKLSAgICAgICAgICAgIGludCB4eDsKLSAgICAgICAg ICAgIHh4ID0gc3RybGVuKHBbMl0pOwotICAgICAgICAgICAgcFszXSA9IChjaGFyICopbWFsbG9j KHh4KzQpOwotICAgICAgICAgICAgczIgPSBwWzNdOwotICAgICAgICAgICAgY2ttYWttc2cocFsz XSx4eCs0LCInKCIscFsyXSwiKSIsTlVMTCk7Ci0gICAgICAgICAgICBuKys7Ci0jZWxzZQotICAg ICAgICAgICAgczIgPSBwWzJdOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgIGdv dG8geGRvc2V4cDsKLSAgICAgICAgfSBlbHNlIGlmICh4ID09IFNYX1NUUikgewotICAgICAgICAg ICAgaW50IHh4OwotICAgICAgICAgICAgczIgPSBkb3NleHAocFsyXSk7Ci0gICAgICAgICAgICBp ZiAoc2V4cHJjKSBnb3RvIHhkb3NleHA7Ci0gICAgICAgICAgICB4eCA9IHN0cmxlbihzMik7Ci0g ICAgICAgICAgICBwWzNdID0gKGNoYXIgKiltYWxsb2MoeHgrNCk7Ci0gICAgICAgICAgICBja21h a21zZyhwWzNdLHh4KzQsIicoIixzMiwiKSIsTlVMTCk7Ci0gICAgICAgICAgICBzMiA9IHBbM107 Ci0gICAgICAgICAgICBuKys7Ci0gICAgICAgICAgICBnb3RvIHhkb3NleHA7Ci0gICAgICAgIH0K LSAgICB9Ci0gICAgLyogQXJpdGhtZXRpYyBvcGVyYXRvciBvciBtYWNybyAtIExvb3AgdGhydSBv cGVyYW5kcyAqLwotCi0gICAgcXVpdCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog U2hvcnQtY2lyY3VpdCBmbGFnLiAqLwotICAgIGlmIChtYWNybyAmJiBuID4gMSkgeyAgICAgICAg ICAgICAgIC8qIElmIG9wZXJhdG9yIGlzIGEgbWFjcm8gKi8KLSAgICAgICAgaWYgKCFsaW5lKSB7 ICAgICAgICAgICAgICAgICAgICAvKiBhbGxvY2F0ZSBsb2NhbCBidWZmZXIgZm9yICovCi0gICAg ICAgICAgICBsaW5lID0gKGNoYXIgKiltYWxsb2MoU1hNTEVOKTsgLyogdGhlIGV2YWx1YXRlZCBh cmd1bWVudCBsaXN0LiAqLwotICAgICAgICAgICAgaWYgKCFsaW5lKSB7Ci0gICAgICAgICAgICAg ICAgcHJpbnRmKCI/TWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSAtIFwiJXNcIlxuIixwWzFdKTsK LSAgICAgICAgICAgICAgICBzZXhwcmMrKzsKLSAgICAgICAgICAgICAgICBnb3RvIHhkb3NleHA7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsaW5lbGVuID0gU1hNTEVOOwotICAgICAgICAg ICAgLyogZGVidWcoRjEwMSwiZG9zZXhwIG1hY3JvIGFyZyBidWZmZXIiLCIiLGxpbmVsZW4pOyAq LwotICAgICAgICB9Ci0gICAgICAgIGxpbmVwb3MgPSAwOwotICAgICAgICBsaW5lW2xpbmVwb3Nd ID0gTlVMOwotICAgIH0KLSAgICBmb3IgKGkgPSAxOyAoKGkgPCBuKSAmJiAhc2V4cHJjICYmICFx dWl0KTsgaSsrKSB7IC8qIExvb3AgdGhydSBvcGVyYW5kcyAqLwotICAgICAgICBxdW90ZSA9IDA7 Ci0gICAgICAgIHMyID0gcFtpKzFdOyAgICAgICAgICAgICAgICAgICAgLyogR2V0IG9wZXJhbmQg Ki8KLSAgICAgICAgaWYgKCFzMikgczIgPSAiIjsKLQotI2lmZGVmIENPTU1FTlQKLSAgICAgICAg aWYgKCpzMiA9PSAnXDA0NycpIHsgICAgICAgICAgICAvKiBJcyBpdCBxdW90ZWQ/ICovCi0gICAg ICAgICAgICBkZWJ1ZyhGMTEwLHNleHBkZWJ1ZygiJ0IiKSxzMiwwKTsKLSAgICAgICAgICAgIHMy Kys7ICAgICAgICAgICAgICAgICAgICAgICAvKiBTcGFjZSBwYXN0IHRoZSBxdW90ZSAqLwotICAg ICAgICAgICAgcXVvdGUrKzsKLSAgICAgICAgICAgIGlmICgqczIgPT0gJygnKSB7ICAgICAgICAg ICAvKiBRdW90ZWQgUy1FeHByZXNzaW9uPyAqLwotICAgICAgICAgICAgICAgIGNoYXIgYzQsICog czQgPSBzMisxOyAgIC8qIFN0cmlwIG91dGVyIHBhcmVucyAqLwotICAgICAgICAgICAgICAgIHdo aWxlICgoYzQgPSAqczQrKykpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGM0ID09ICcpJyAm JiAhKnM0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzMisrOwotICAgICAgICAgICAgICAg ICAgICAgICAgKihzNC0xKSA9IE5VTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot ICAgICAgICAgICAgZGVidWcoRjExMCxzZXhwZGVidWcoIidDIiksczIsMCk7Ci0KLSAgICAgICAg fSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgcXVvdGVkICovCi0gICAgICAg ICAgICBzMiA9IGRvc2V4cChwW2krMV0pOyAgICAgICAgLyogZXZhbHVhdGUgaXQgKi8KLSAgICAg ICAgICAgIGlmIChzZXhwcmMpIGdvdG8geGRvc2V4cDsKLSAgICAgICAgICAgIGlmICghczIpIHMy ID0gIiI7Ci0gICAgICAgICAgICBpZiAoIW1hY3JvICYmIHggPT0gU1hfRVZBKQotICAgICAgICAg ICAgICBjb250aW51ZTsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgaWYgKCpzMiAhPSAnXDA0 NycpIHsgICAgICAgICAgICAvKiBJcyBpdCBxdW90ZWQ/ICovCi0gICAgICAgICAgICBzMiA9IGRv c2V4cChwW2krMV0pOyAgICAgICAgLyogTm8sIGV2YWx1YXRlIGl0ICovCi0gICAgICAgICAgICBp ZiAoc2V4cHJjKSBnb3RvIHhkb3NleHA7Ci0gICAgICAgICAgICBpZiAoIXMyKSBzMiA9ICIiOwot ICAgICAgICAgICAgaWYgKCFtYWNybyAmJiB4ID09IFNYX0VWQSkKLSAgICAgICAgICAgICAgY29u dGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCpzMiA9PSAnXDA0NycpIHsgICAgICAgICAg ICAvKiBJcyByZXN1bHQgcXVvdGVkPyAqLwotICAgICAgICAgICAgZGVidWcoRjExMCxzZXhwZGVi dWcoIidCIiksczIsMCk7Ci0gICAgICAgICAgICBzMisrOyAgICAgICAgICAgICAgICAgICAgICAg LyogU3BhY2UgcGFzdCB0aGUgcXVvdGUgKi8KLSAgICAgICAgICAgIHF1b3RlKys7Ci0gICAgICAg ICAgICBpZiAoKnMyID09ICcoJykgeyAgICAgICAgICAgLyogUXVvdGVkIFMtRXhwcmVzc2lvbj8g Ki8KLSAgICAgICAgICAgICAgICBjaGFyIGM0LCAqIHM0ID0gczIrMTsgICAvKiBTdHJpcCBvdXRl ciBwYXJlbnMgKi8KLSAgICAgICAgICAgICAgICB3aGlsZSAoKGM0ID0gKnM0KyspKSB7Ci0gICAg ICAgICAgICAgICAgICAgIGlmIChjNCA9PSAnKScgJiYgISpzNCkgewotICAgICAgICAgICAgICAg ICAgICAgICAgczIrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICooczQtMSkgPSBOVUw7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlYnVnKEYxMTAsc2V4 cGRlYnVnKCInQyIpLHMyLDApOwotICAgICAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAg ICAgICBpZiAobWFjcm8pIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsc2V4cGRlYnVnKCJtYWNy byBhcmciKSxzMixpKTsKLSAgICAgICAgICAgIGlmICghKnMyKSBxdW90ZSsrOwotICAgICAgICAg ICAgaWYgKCFxdW90ZSkgewotICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGNoYXIgYzQsICogczQg PSBzMjsKLSAgICAgICAgICAgICAgICB3aGlsZSAoKGM0ID0gKnM0KyspKSBpZiAoYzQgPT0gU1Ap IHsgcXVvdGUrKzsgYnJlYWs7IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChxdW90 ZSkgbGluZVtsaW5lcG9zKytdID0gJ3snOwotICAgICAgICAgICAgd2hpbGUgKChsaW5lW2xpbmVw b3MrK10gPSAqczIrKykpIHsKLSAgICAgICAgICAgICAgICBpZiAobGluZXBvcyA+IGxpbmVsZW4g LSAzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIgKiB0bXAgPSBOVUxMOwotICAgICAgICAg ICAgICAgICAgICBsaW5lW2xpbmVwb3NdID0gTlVMOwotICAgICAgICAgICAgICAgICAgICBsaW5l bGVuICs9IFNYTUxFTjsKLSAgICAgICAgICAgICAgICAgICAgdG1wID0gKGNoYXIgKikgbWFsbG9j KGxpbmVsZW4pOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXRtcCkgewotICAgICAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKCI/TWVtb3J5IHJlLWFsbG9jYXRpb24gZmFpbHVyZSAtIFwiJXMu Li5cIlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lKTsKLSAgICAgICAg ICAgICAgICAgICAgICAgIHNleHByYysrOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byB4 ZG9zZXhwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHN0cmNw eSh0bXAsbGluZSk7Ci0gICAgICAgICAgICAgICAgICAgIGZyZWUobGluZSk7Ci0gICAgICAgICAg ICAgICAgICAgIGxpbmUgPSB0bXA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot ICAgICAgICAgICAgbGluZXBvcy0tOyAgICAgICAgICAgICAgICAgIC8qIEJhY2sgdXAgb3ZlciBO VUwgKi8KLSAgICAgICAgICAgIGlmIChxdW90ZSkKLSAgICAgICAgICAgICAgbGluZVtsaW5lcG9z KytdID0gJ30nOyAgICAvKiBFbmQgcXVvdGUgZ3JvdXAgKi8KLSAgICAgICAgICAgIGxpbmVbbGlu ZXBvcysrXSA9IFNQOyAgICAgICAvKiBhZGQgYSBzcGFjZSAqLwotICAgICAgICAgICAgbGluZVts aW5lcG9zXSA9IE5VTDsgICAgICAgIC8qIGFuZCBhIE5VTCAqLwotICAgICAgICAgICAgY29udGlu dWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFxdW90ZSkgeyAgICAgICAgICAgICAgICAgICAv KiBCdWlsdC1pbiBvcGVyYXRvci4uLiAqLwotICAgICAgICAgICAgczIgPSBkb3NleHAoczIpOwot ICAgICAgICAgICAgaWYgKHNleHByYykgZ290byB4ZG9zZXhwOwotICAgICAgICAgICAgaWYgKCFz MikgczIgPSAiIjsKLSAgICAgICAgfQotICAgICAgICBpZiAoeCA9PSBTWF9FVkEpCi0gICAgICAg ICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKCEqczIpIHsKLSAgICAgICAgICAgIC8qIEFuIGVt cHR5IHZhbHVlIGlzIG5vdCBhIGxlZ2FsIG51bWJlciAqLwotICAgICAgICAgICAgLyogYnV0IGl0 IGlzIGEgbGVnYWwgdHJ1dGggdmFsdWUgKi8KLSAgICAgICAgICAgIGlmICh4ICE9IFNYX0FORCAm JiB4ICE9IFNYX0xPUiAmJiB4ICE9IFNYX05PVCkgewotICAgICAgICAgICAgICAgIHByaW50Zigi P05vdCBOdW1lcmljIC0gXCIlc1wiXG4iLHBbaSsxXSk7Ci0gICAgICAgICAgICAgICAgc2V4cHJj Kys7Ci0gICAgICAgICAgICAgICAgZ290byB4ZG9zZXhwOwotICAgICAgICAgICAgfQotICAgICAg ICAgICAgaiA9IDA7Ci0gICAgICAgICAgICBmcGogPSAwLjA7Ci0gICAgICAgIH0gZWxzZSB7Ci0g ICAgICAgICAgICBqID0gY2thdG9mcyhzMik7Ci0gICAgICAgICAgICAvKiBTd2l0Y2ggdG8gZmxv YXRpbmctcG9pbnQgdXBvbiBlbmNvdW50ZXJpbmcgYW55IGYucC4gYXJnICovCi0gICAgICAgICAg ICAvKiBPUi4uLiBpZiBpbnRlZ2VyIGlzIHRvbyBiaWcgKi8KLSAgICAgICAgICAgIGlmICghZnBm bGFnKSBpZiAoeHhmbG9hdChzMiwwKSA9PSAyKQotICAgICAgICAgICAgICBmcGZsYWcrKzsKLSAg ICAgICAgICAgIGZwaiA9IGF0b2YoczIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpID09IDEp IHsgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbCByZXN1bHQgaXMgZmlyc3Qgb3BlcmFuZCAq LwotICAgICAgICAgICAgcmVzdWx0ID0gKG4gPT0gMiAmJiB4ID09IFNYX1NVQikgPyAwLWogOiBq OwotICAgICAgICAgICAgZnByZXN1bHQgPSAobiA9PSAyICYmIHggPT0gU1hfU1VCKSA/IC1mcGog OiBmcGo7Ci0JICAgIGlmICgoeCA9PSBTWF9BTkQgJiYgcmVzdWx0ID09IDApIHx8CS8qIFNob3J0 IGNpcmN1aXQgKi8KLQkJKHggPT0gU1hfTE9SICYmIHJlc3VsdCAhPSAwKSkKLQkgICAgICBxdWl0 Kys7Ci0gICAgICAgICAgICBpZiAoIShrd2ZsYWdzICYgU1hGX09ORSkpCS8qIENvbW1hbmQgdy9z aW5nbGUgYXJnICovCi0gICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAg IGlmICh4ID09IFNYX01PRCB8fCB4ID09IFNYX0RJVikgewotICAgICAgICAgICAgaWYgKCFyZXN1 bHQpCi0gICAgICAgICAgICAgIGZwZmxhZysrOwotICAgICAgICAgICAgaWYgKCFmcGopIHsKLSAg ICAgICAgICAgICAgICBwcmludGYoIj9EaXZpZGUgYnkgemVybyAtIFwiJXNcIlxuIixjbWRidWYp OwotICAgICAgICAgICAgICAgIHNleHByYysrOwotICAgICAgICAgICAgICAgIGdvdG8geGRvc2V4 cDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBzd2l0Y2ggKHgpIHsJCQkvKiBB Y2N1bXVsYXRlIHJlc3VsdCAqLwotCi0gICAgICAgICAgY2FzZSBTWF9FVkE6ICAgICAgICAgICAg ICAgICAgLyogRVZBTCAqLwotICAgICAgICAgICAgcmVzdWx0ID0gajsKLSAgICAgICAgICAgIGZw cmVzdWx0ID0gZnBqOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFNYX0FE RDogICAgICAgICAgICAgICAgICAvKiArICovCi0gICAgICAgICAgICByZXN1bHQgKz0gajsKLSAg ICAgICAgICAgIGZwcmVzdWx0ICs9IGZwajsKLSNpZmRlZiBGTkZMT0FUCi0gICAgICAgICAgICBp ZiAocmVzdWx0ICE9IGZwcmVzdWx0KQotICAgICAgICAgICAgICBmcGZsYWcrKzsKLSNlbmRpZgkv KiBGTkZMT0FUICovCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgU1hfU1VC OiAgICAgICAgICAgICAgICAgIC8qIC0gKi8KLSAgICAgICAgICAgIHJlc3VsdCAtPSBqOwotICAg ICAgICAgICAgZnByZXN1bHQgLT0gZnBqOwotI2lmZGVmIEZORkxPQVQKLSAgICAgICAgICAgIGlm IChyZXN1bHQgIT0gZnByZXN1bHQpCi0gICAgICAgICAgICAgIGZwZmxhZysrOwotI2VuZGlmCS8q IEZORkxPQVQgKi8KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBTWF9NVUw6 ICAgICAgICAgICAgICAgICAgLyogKiAqLwotICAgICAgICAgICAgcmVzdWx0ICo9IGo7Ci0gICAg ICAgICAgICBmcHJlc3VsdCAqPSBmcGo7Ci0jaWZkZWYgRk5GTE9BVAotICAgICAgICAgICAgaWYg KHJlc3VsdCAhPSBmcHJlc3VsdCkKLSAgICAgICAgICAgICAgZnBmbGFnKys7Ci0jZW5kaWYJLyog Rk5GTE9BVCAqLwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFNYX0FORDog ICAgICAgICAgICAgICAgICAvKiBBTkQgKi8KLSAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAm JiBqOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHF1aXQrKzsKLSAgICAgICAgICAgIGZwcmVz dWx0ID0gZnByZXN1bHQgJiYgZnBqOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBj YXNlIFNYX0xPUjogICAgICAgICAgICAgICAgICAvKiBPUiAqLwotICAgICAgICAgICAgcmVzdWx0 ID0gcmVzdWx0IHx8IGo7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkgcXVpdCsrOwotICAgICAg ICAgICAgZnByZXN1bHQgPSBmcHJlc3VsdCB8fCBmcGo7Ci0gICAgICAgICAgICBicmVhazsKLQot ICAgICAgICAgIGNhc2UgU1hfTU9EOiAgICAgICAgICAgICAgICAgIC8qIE1vZHVsdXMgKi8KLSAg ICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAlIGo7Ci0jaWZkZWYgRk5GTE9BVAotICAgICAgICAg ICAgZnByZXN1bHQgPSAoQ0tGTE9BVClmbW9kKGZwcmVzdWx0LGZwaik7Ci0gICAgICAgICAgICBp ZiAocmVzdWx0ICE9IGZwcmVzdWx0KQotICAgICAgICAgICAgICBmcGZsYWcrKzsKLSNlbHNlCi0g ICAgICAgICAgICBmcHJlc3VsdCA9IHJlc3VsdDsKLSNlbmRpZiAvKiBGTkZMT0FUICovCi0gICAg ICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgU1hfRElWOiAgICAgICAgICAgICAgICAg IC8qIC8gKi8KLQkgICAgaWYgKGopIHsKLQkJcmVzdWx0IC89IGo7Ci0JCWZwcmVzdWx0IC89IGZw ajsKLSNpZmRlZiBGTkZMT0FUCi0JCWlmIChyZXN1bHQgIT0gZnByZXN1bHQpCi0JCSAgZnBmbGFn Kys7Ci0jZW5kaWYJLyogRk5GTE9BVCAqLwotCSAgICB9IGVsc2UgewotCQlmcHJlc3VsdCAvPSBm cGo7Ci0JCXJlc3VsdCA9IGZwajsKLSNpZmRlZiBGTkZMT0FUCi0JCSAgZnBmbGFnKys7Ci0jZW5k aWYJLyogRk5GTE9BVCAqLwotCSAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg IGNhc2UgU1hfQUVROiAgICAgICAgICAgICAgICAgIC8qIFRlc3QgZm9yIGVxdWFsaXR5ICovCi0g ICAgICAgICAgICBpZiAoZnBmbGFnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZwcmVzdWx0ICE9 IGZwaikKLSAgICAgICAgICAgICAgICAgIHByZXN1bHQgPSAwOwotICAgICAgICAgICAgfSBlbHNl IHsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IGopCi0gICAgICAgICAgICAgICAgICBw cmVzdWx0ID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg ICAgY2FzZSBTWF9ORVE6ICAgICAgICAgICAgICAgICAgLyogVGVzdCBmb3IgaW5lcWFsaXR5ICov Ci0gICAgICAgICAgICBpZiAoZnBmbGFnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZwcmVzdWx0 ID09IGZwaikKLSAgICAgICAgICAgICAgICAgIHByZXN1bHQgPSAwOwotICAgICAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IGopCi0gICAgICAgICAgICAgICAg ICBwcmVzdWx0ID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg ICAgICAgY2FzZSBTWF9BTEU6ICAgICAgICAgICAgICAgICAgLyogQXJpdGhtZXRpYyBsZXNzLWVx dWFsICovCi0gICAgICAgICAgICBpZiAoZnBmbGFnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZw aiA8IGZwcmVzdWx0KQotICAgICAgICAgICAgICAgICAgcHJlc3VsdCA9IDA7Ci0gICAgICAgICAg ICAgICAgZnByZXN1bHQgPSBmcGo7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg ICAgIGlmIChqIDwgcmVzdWx0KQotICAgICAgICAgICAgICAgICAgcHJlc3VsdCA9IDA7Ci0gICAg ICAgICAgICAgICAgcmVzdWx0ID0gajsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFr OwotCi0gICAgICAgICAgY2FzZSBTWF9BTFQ6ICAgICAgICAgICAgICAgICAgLyogQXJpdGhtZXRp YyBsZXNzLXRoYW4gKi8KLSAgICAgICAgICAgIGlmIChmcGZsYWcpIHsKLSAgICAgICAgICAgICAg ICBpZiAoZnBqIDw9IGZwcmVzdWx0KQotICAgICAgICAgICAgICAgICAgcHJlc3VsdCA9IDA7Ci0g ICAgICAgICAgICAgICAgZnByZXN1bHQgPSBmcGo7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg ICAgICAgICAgICAgIGlmIChqIDw9IHJlc3VsdCkKLSAgICAgICAgICAgICAgICAgIHByZXN1bHQg PSAwOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGo7Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgU1hfQUdUOiAgICAgICAgICAgICAgICAgIC8q IEFyaXRobWV0aWMgZ3JlYXRlci10aGFuICovCi0gICAgICAgICAgICBpZiAoZnBmbGFnKSB7Ci0g ICAgICAgICAgICAgICAgaWYgKGZwaiA+PSBmcHJlc3VsdCkKLSAgICAgICAgICAgICAgICAgIHBy ZXN1bHQgPSAwOwotICAgICAgICAgICAgICAgIGZwcmVzdWx0ID0gZnBqOwotICAgICAgICAgICAg fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoaiA+PSByZXN1bHQpCi0gICAgICAgICAgICAg ICAgICBwcmVzdWx0ID0gMDsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBqOwotICAgICAgICAg ICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFNYX0FHRTogICAgICAg ICAgICAgICAgICAvKiBBcml0aG1ldGljIGdyZWF0ZXItZXF1YWwgKi8KLSAgICAgICAgICAgIGlm IChmcGZsYWcpIHsKLSAgICAgICAgICAgICAgICBpZiAoZnBqID4gZnByZXN1bHQpCi0gICAgICAg ICAgICAgICAgICBwcmVzdWx0ID0gMDsKLSAgICAgICAgICAgICAgICBmcHJlc3VsdCA9IGZwajsK LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGogPiByZXN1bHQpCi0g ICAgICAgICAgICAgICAgICBwcmVzdWx0ID0gMDsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBq OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFNY X1BPVzogICAgICAgICAgICAgICAgICAvKiBSYWlzZSB0byBwb3dlciAqLwotI2lmZGVmIEZORkxP QVQKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkb3VibGUgZHVtbXk7Ci0gICAgICAg ICAgICAgICAgaWYgKCFmcGopIHsKLSAgICAgICAgICAgICAgICAgICAgZnByZXN1bHQgPSAxLjA7 Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoIWZwcmVzdWx0ICYmIGZwaiA8PSAwLjApKSB7 Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0RpdmlkZSBieSB6ZXJvIC0gXCIlc1wiXG4i LGNtZGJ1Zik7Ci0gICAgICAgICAgICAgICAgICAgIHNleHByYysrOwotICAgICAgICAgICAgICAg ICAgICBnb3RvIHhkb3NleHA7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmcHJlc3VsdCA8 IDAuMCAmJiBtb2RmKGZwaiwmZHVtbXkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50Zigi P0RvbWFpbiBlcnJvciAtIFwiJXNcIlxuIixjbWRidWYpOwotICAgICAgICAgICAgICAgICAgICBz ZXhwcmMrKzsKLSAgICAgICAgICAgICAgICAgICAgZ290byB4ZG9zZXhwOwotICAgICAgICAgICAg ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmVzdWx0ID0gKENLRkxPQVQpcG93 KGZwcmVzdWx0LGZwaik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotI2VuZGlm IC8qIEZORkxPQVQgKi8KLSAgICAgICAgICAgIGlmIChqID09IDApIHsKLSAgICAgICAgICAgICAg ICByZXN1bHQgPSAxOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBDS19P RkZfVCB6LCBzaWduID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoaiA8IDApIHsKLSAgICAgICAg ICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBw cmludGYoIj9EaXZpZGUgYnkgemVybyAtIFwiJXNcIlxuIixjbWRidWYpOwotICAgICAgICAgICAg ICAgICAgICAgICAgc2V4cHJjKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHhkb3Nl eHA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaiA9IDAgLSBq OwotICAgICAgICAgICAgICAgICAgICBzaWduKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIHogPSByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKC0taiA+IDApCi0g ICAgICAgICAgICAgICAgICByZXN1bHQgKj0gejsKLSAgICAgICAgICAgICAgICBpZiAoc2lnbikK LSAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IDEgLyByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0j aWZkZWYgRk5GTE9BVAotICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBmcHJlc3VsdCkKLSAgICAg ICAgICAgICAgZnBmbGFnKys7Ci0jZW5kaWYJLyogRk5GTE9BVCAqLwotICAgICAgICAgICAgYnJl YWs7Ci0KLSNpZmRlZiBGTkZMT0FUCi0gICAgICAgICAgY2FzZSBTWF9FWFA6ICAgICAgICAgICAg ICAgICAgLyogZSB0byB0aGUgZ2l2ZW4gcG93ZXIgKi8KLSAgICAgICAgICAgIGZwcmVzdWx0ID0g KENLRkxPQVQpIGV4cChmcGopOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNl IFNYX0xHTjogICAgICAgICAgICAgICAgICAvKiBOYXR1cmFsIGxvZyAqLwotICAgICAgICAgIGNh c2UgU1hfTEdYOiAgICAgICAgICAgICAgICAgIC8qIExvZyBiYXNlIDEwICovCi0gICAgICAgICAg Y2FzZSBTWF9TUVI6ICAgICAgICAgICAgICAgICAgLyogU3F1YXJlIHJvb3QgKi8KLSAgICAgICAg ICAgIGlmIChmcGogPCAwLjApIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9Bcmd1bWVudCBv dXQgb2YgcmFuZ2UgLSBcIiVzXCJcbiIsY21kYnVmKTsKLSAgICAgICAgICAgICAgICBzZXhwcmMr KzsKLSAgICAgICAgICAgICAgICBnb3RvIHhkb3NleHA7Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICBpZiAoeCA9PSBTWF9TUVIpCi0gICAgICAgICAgICAgIGZwcmVzdWx0ID0gKENLRkxPQVQp IHNxcnQoZnBqKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHggPT0gU1hfTEdOKQotICAgICAgICAg ICAgICBmcHJlc3VsdCA9IChDS0ZMT0FUKSBsb2coZnBqKTsKLSAgICAgICAgICAgIGVsc2UKLSAg ICAgICAgICAgICAgZnByZXN1bHQgPSAoQ0tGTE9BVCkgbG9nMTAoZnBqKTsKLSAgICAgICAgICAg IGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBTWF9TSU46ICAgICAgICAgICAgICAgICAgLyogc2lu ZSAqLwotICAgICAgICAgICAgZnByZXN1bHQgPSAoQ0tGTE9BVCkgc2luKGZwaik7Ci0gICAgICAg ICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgU1hfQ09TOiAgICAgICAgICAgICAgICAgIC8q IGNvc2luZSAqLwotICAgICAgICAgICAgZnByZXN1bHQgPSAoQ0tGTE9BVCkgY29zKGZwaik7Ci0g ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgU1hfVEFOOiAgICAgICAgICAgICAg ICAgIC8qIHRhbmdlbnQgKi8KLSAgICAgICAgICAgIGZwcmVzdWx0ID0gKENLRkxPQVQpIHRhbihm cGopOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogRk5GTE9BVCAqLwotCi0gICAgICAg ICAgY2FzZSBTWF9DRUk6ICAgICAgICAgICAgICAgICAgLyogQ2VpbGluZyAqLwotICAgICAgICAg ICAgaWYgKGogIT0gZnBqKQotICAgICAgICAgICAgICBpZiAoZnBqID4gMC4wKQotICAgICAgICAg ICAgICAgIGZwaiArPSAxLjA7Ci0gICAgICAgICAgICBmcHJlc3VsdCA9IGZwajsKLSAgICAgICAg ICAgIGZwZmxhZyA9IDE7Ci0gICAgICAgICAgICB0cnVuY2F0ZSA9IDE7Ci0gICAgICAgICAgICBi cmVhazsKLQotICAgICAgICAgIGNhc2UgU1hfRkxSOiAgICAgICAgICAgICAgICAgIC8qIEZsb29y ICovCi0gICAgICAgICAgICBpZiAoaiAhPSBmcGopCi0gICAgICAgICAgICAgIGlmIChmcGogPCAw LjApCi0gICAgICAgICAgICAgICAgZnBqIC09IDEuMDsKLSAgICAgICAgICAgIGZwcmVzdWx0ID0g ZnBqOwotICAgICAgICAgICAgZnBmbGFnID0gMTsKLSAgICAgICAgICAgIHRydW5jYXRlID0gMTsK LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBTWF9UUlU6ICAgICAgICAgICAg ICAgICAgLyogVHJ1bmNhdGUgKi8KLSAgICAgICAgICAgIGZwcmVzdWx0ID0gZnBqOwotICAgICAg ICAgICAgZnBmbGFnID0gMTsKLSAgICAgICAgICAgIHRydW5jYXRlID0gMTsKLSAgICAgICAgICAg IGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBTWF9BQlM6ICAgICAgICAgICAgICAgICAgLyogQWJz b2x1dGUgdmFsdWUgKi8KLSAgICAgICAgICAgIHJlc3VsdCA9IChqIDwgMCkgPyAwIC0gaiA6IGo7 Ci0jaWZkZWYgRk5GTE9BVAotICAgICAgICAgICAgZnByZXN1bHQgPSAoZnBqIDwgMC4wKSA/IDAu MCAtIGZwaiA6IGZwajsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gZnByZXN1bHQpCi0gICAg ICAgICAgICAgIGZwZmxhZysrOwotI2VuZGlmCS8qIEZORkxPQVQgKi8KLSAgICAgICAgICAgIGJy ZWFrOwotCi0gICAgICAgICAgY2FzZSBTWF9NQVg6ICAgICAgICAgICAgICAgICAgLyogTWF4ICov Ci0gICAgICAgICAgICBpZiAoaiAhPSBmcGopCi0gICAgICAgICAgICAgIGZwZmxhZysrOwotICAg ICAgICAgICAgaWYgKGZwZmxhZykgewotICAgICAgICAgICAgICAgIGlmIChmcGogPiBmcHJlc3Vs dCkKLSAgICAgICAgICAgICAgICAgIGZwcmVzdWx0ID0gZnBqOwotICAgICAgICAgICAgfSBlbHNl Ci0gICAgICAgICAgICAgIGlmIChqID4gcmVzdWx0KQotICAgICAgICAgICAgICAgIHJlc3VsdCA9 IGo7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgU1hfTUlOOiAgICAgICAg ICAgICAgICAgIC8qIE1pbiAqLwotICAgICAgICAgICAgaWYgKGogIT0gZnBqKQotICAgICAgICAg ICAgICBmcGZsYWcrKzsKLSAgICAgICAgICAgIGlmIChmcGZsYWcpIHsKLSAgICAgICAgICAgICAg ICBpZiAoZnBqIDwgZnByZXN1bHQpCi0gICAgICAgICAgICAgICAgICBmcHJlc3VsdCA9IGZwajsK LSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICBpZiAoaiA8IHJlc3VsdCkKLSAgICAg ICAgICAgICAgICByZXN1bHQgPSBqOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBj YXNlIFNYX0ZMTzogICAgICAgICAgICAgICAgICAvKiBGbG9hdCAqLwotICAgICAgICAgICAgZnBm bGFnKys7Ci0gICAgICAgICAgICBmcHJlc3VsdCA9IHJlc3VsdDsKLSAgICAgICAgICAgIGZwaiA9 IGo7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgU1hfTk9UOiAgICAgICAg ICAgICAgICAgIC8qIE5PVCAocmV2ZXJzZSB0cnV0aCB2YWx1ZSkgKi8KLSAgICAgICAgICAgIGZw ZmxhZyA9IDA7Ci0gICAgICAgICAgICBub3QrKzsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg ICAgICAgY2FzZSBTWF9CV0E6ICAgICAgICAgICAgICAgICAgLyogQml0d2lzZSBBTkQgKi8KLSAg ICAgICAgICAgIGZwZmxhZyA9IDA7Ci0gICAgICAgICAgICByZXN1bHQgJj0gajsKLSAgICAgICAg ICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBTWF9CV086ICAgICAgICAgICAgICAgICAgLyog Qml0d2lzZSBPUiAqLwotICAgICAgICAgICAgZnBmbGFnID0gMDsKLSAgICAgICAgICAgIHJlc3Vs dCB8PSBqOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFNYX0JXWDogICAg ICAgICAgICAgICAgICAvKiBCaXR3aXNlIFhPUiAqLwotICAgICAgICAgIGNhc2UgU1hfWE9SOiAg ICAgICAgICAgICAgICAgIC8qIExvZ2ljYWwgWE9SICovCi0gICAgICAgICAgICBpZiAobiA+IDMp IHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9Ub28gbWFueSBvcGVyYW5kcyAtIFwiJXNcIlxu IixzKTsKLSAgICAgICAgICAgICAgICBzZXhwcmMrKzsKLSAgICAgICAgICAgICAgICBnb3RvIHhk b3NleHA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmcGZsYWcgPSAwOwotICAgICAgICAg ICAgaWYgKHggPT0gU1hfQldYKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0IF49IGo7Ci0gICAg ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IChyZXN1bHQgJiYgIWop IHx8ICghcmVzdWx0ICYmIGopOwotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHJlc3VsdCA9 IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2Ug U1hfQldOOiAgICAgICAgICAgICAgICAgIC8qIEJpdHdpc2UgTm90ICovCi0gICAgICAgICAgICBm cGZsYWcgPSAwOwotICAgICAgICAgICAgcmVzdWx0ID0gfnJlc3VsdDsKLSAgICAgICAgICAgIGJy ZWFrOwotCi0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHByaW50ZigiQkFEIE9QIFsl c11cbiIscFsxXSk7Ci0gICAgICAgICAgICBzZXhwcmMrKzsKLSAgICAgICAgfQotICAgIH0KLSAg ICBpZiAoIXBmbGFnKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgYSBwcmVkaWNhdGUg Ki8KLSAgICAgIHNleHBwdiA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAvKiBTbyB1bnNldCB0 aGlzICovCi0KLSAgLyogZG9tYWNybzogKi8KLQotICAgIGlmIChtYWNybykgeyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFVzZXItZGVmaW5lZCBtYWNybyAqLwotICAgICAgICBleHRlcm4gaW50 IGZzZXhwZmxhZzsgICAgICAgICAgIC8qIChzZWUgZm5ldmFsKCk6Y2t1dXM0LmMpICovCi0gICAg ICAgIGludCBsb29rYWdhaW4gPSAwOyAgICAgICAgICAgICAgLyogTWF5YmUgdGhlIG1hY3JvIHRh YmxlIGNoYW5nZWQgKi8KLSAgICAgICAgaWYgKG1hY3RhYltteF0ua3dkKSB7ICAgICAgICAgICAv KiBDaGVjayBhbmQgc2VlICovCi0gICAgICAgICAgICBpZiAoY2tzdHJjbXAobWFjdGFiW214XS5r d2QscFsxXSwtMSwwKSkKLSAgICAgICAgICAgICAgbG9va2FnYWluKys7Ci0gICAgICAgIH0gZWxz ZQotICAgICAgICAgIGxvb2thZ2FpbisrOwotICAgICAgICBpZiAobG9va2FnYWluKSB7ICAgICAg ICAgICAgICAgIC8qIFRoZSB0YWJsZSBjaGFuZ2VkICovCi0gICAgICAgICAgICBteCA9IG14bG9v ayhtYWN0YWIscFsxXSxubWFjKTsgLyogR2V0IHRoZSBtYWNybydzIG5ldyBpbmRleCAqLwotICAg ICAgICAgICAgZGVidWcoRjExMSxzZXhwZGVidWcoIm1hY3JvIG1vdmVkIikscFsxXSxteCk7Ci0g ICAgICAgICAgICBpZiAobXggPCAwKSB7ICAgICAgICAgICAgICAgICAgLyogWWlrZXMhICovCi0g ICAgICAgICAgICAgICAgcHJpbnRmKCI/TWFjcm8gZGlzYXBwZWFyZWQhIC0gXCIlc1wiXG4iLHBb MV0pOwotICAgICAgICAgICAgICAgIHNleHByYysrOwotICAgICAgICAgICAgICAgIGdvdG8geGRv c2V4cDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBkZWJ1ZyhGMTExLHNleHBk ZWJ1ZygibWFjcm8gbXgiKSxtYWN0YWJbbXhdLmt3ZCxteCk7Ci0gICAgICAgIGlmIChmc2V4cGZs YWcpIHsgICAgICAgICAgICAgICAgLyogSWYgZW1iZWRkZWQgaW4gYSBmdW5jdGlvbiBjYWxsICov Ci0gICAgICAgICAgICBpZiAoY21wdXNoKCkgPiAtMSkgeyAgICAgICAgLyogZ2V0IGEgbmV3IGNv cHkgb2YgdGhlIHBhcnNpbmcgKi8KLSAgICAgICAgICAgICAgICBleHRlcm4gaW50IGlmYzsgICAg ICAgICAvKiBlbnZpcm9ubWVudCwgKi8KLSAgICAgICAgICAgICAgICBpbnQgaywgaWZjc2F2ID0g aWZjOyAgICAvKiBzYXZlIHRoZSBJRiBzdGF0ZSAqLwotICAgICAgICAgICAgICAgIGRvZG8obXgs bGluZSwwKTsgICAgICAgIC8qIFNldCB1cCB0aGUgbWFjcm8gKi8KLSAgICAgICAgICAgICAgICBr ID0gcGFyc2VyKDEpOyAgICAgICAgICAvKiBDYWxsIHRoZSBwYXJzZXIgdG8gZXhlY3V0ZSBpdCAq LwotICAgICAgICAgICAgICAgIGNtcG9wKCk7ICAgICAgICAgICAgICAgIC8qIFBvcCBiYWNrIHRv IHByZXZpb3VzIGxldmVsICovCi0gICAgICAgICAgICAgICAgaWZjID0gaWZjc2F2OyAgICAgICAg ICAgLyogcmVzdG9yZSBJRiBzdGF0ZSAqLwotICAgICAgICAgICAgICAgIGlmIChrID09IDApICAg ICAgICAgICAgIC8qIElmIG5vIGVycm9yICovCi0gICAgICAgICAgICAgICAgICBzMiA9IG1ydmFs W21hY2x2bCsxXTsgLyogZ2V0IHJldHVybiB2YWx1ZSwgaWYgYW55ICovCi0gICAgICAgICAgICAg ICAgaWYgKCFzMikgczIgPSAiIjsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLHNleHBkZWJ1 ZygibWFjcm8gcmV0dXJuIiksczIsMCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg ICAgICAgIHByaW50ZigiP1Jlc291cmNlcyBleGhhdXN0ZWQgLSBcIiVzXCJcbiIscyk7Ci0gICAg ICAgICAgICAgICAgc2V4cHJjKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7ICAg ICAgICAgICAgICAgICAgICAgICAgLyogTm90IGVtYmVkZGVkIGluIGEgZnVuY3Rpb24gY2FsbCAq LwotICAgICAgICAgICAgZG9kbyhteCxsaW5lLDApOyAgICAgICAgICAgIC8qIEFzIGFib3ZlIGJ1 dCB3aXRob3V0IGNtcHVzaC9wb3AoKSAqLwotICAgICAgICAgICAgayA9IHBhcnNlcigxKTsKLSAg ICAgICAgICAgIGlmIChrID09IDApCi0gICAgICAgICAgICAgIHMyID0gbXJ2YWxbbWFjbHZsKzFd OwotICAgICAgICAgICAgaWYgKCFzMikgczIgPSAiIjsKLSAgICAgICAgfQotICAgIH0gZWxzZSBp ZiAocGZsYWcpIHsgICAgICAgICAgICAgICAgIC8qIFByZWRpY2F0ZSAqLwotICAgICAgICBpZiAo bm90KSBwcmVzdWx0ID0gcHJlc3VsdCA/IDAgOiAxOwotICAgICAgICBzZXhwcHYgPSBwcmVzdWx0 OyAgICAgICAgICAgICAgIC8qIFNvIHNldCBwcmVkaWNhdGUgdmFsdWUgKDAgb3IgMSkgKi8KLSAg ICAgICAgczIgPSBwcmVzdWx0ID8gIjEiIDogIjAiOwotICAgIH0gZWxzZSBpZiAoZnBmbGFnICYm ICFzZXhwdHJ1bmMpIHsJLyogUmVzdWx0IGlzIGZsb2F0aW5nLXBvaW50ICovCi0gICAgICAgIGlm IChub3QpIGZwcmVzdWx0ID0gZnByZXN1bHQgPyAwLjAgOiAxLjA7Ci0gICAgICAgIHMyID0gZnBm b3JtYXQoZnByZXN1bHQsMCwwKTsKLSAgICB9IGVsc2UgaWYgKHggIT0gU1hfRVZBKSB7Ci0gICAg ICAgIGlmIChub3QpIHJlc3VsdCA9IHJlc3VsdCA/IDAgOiAxOwotICAgICAgICBzMiA9IGNrZnN0 b2EocmVzdWx0KTsKLSAgICB9Ci0KLS8qIENvbW1vbiBleGl0IHBvaW50LiAgQWx3YXlzIGNvbWUg aGVyZSB0byBleGl0LiAqLwotCi0gIHhkb3NleHA6Ci0KLSAgICBpZiAoIXMyKSBzMiA9ICIiOwot ICAgIGlmICghc2V4cHJjICYmIHMyKSB7ICAgICAgICAgICAgICAgIC8qIEhhdmUgYSByZXN1bHQg Ki8KLSAgICAgICAgY2hhciAqIHN4OwotICAgICAgICBjaGFyICogcTIgPSBzMjsgaW50IHh4ID0g MDsKLSAgICAgICAgaWYgKCpzMikgewotICAgICAgICAgICAgd2hpbGUgKCpxMisrKSB4eCsrOyAg ICAgICAgIC8qIEdldCBsZW5ndGggKi8KLSAgICAgICAgICAgIGlmICh4eCA+IHNleHBybWF4KSAg ICAgICAgICAvKiAoc3RhdHMpICovCi0gICAgICAgICAgICAgIHNleHBybWF4ID0geHg7Ci0gICAg ICAgIH0gZWxzZQotICAgICAgICAgIHh4ID0gMDsKLSAgICAgICAgaWYgKHh4ID4gc3hybGVuW3Nl eHBkZXBdIHx8ICFzeHJlc3VsdFtzZXhwZGVwXSkgewotICAgICAgICAgICAgaW50IGs7Ci0gICAg ICAgICAgICBrID0geHggKyB4eCAvIDQ7Ci0gICAgICAgICAgICBpZiAoayA8IDMyKSBrID0gMzI7 Ci0gICAgICAgICAgICBpZiAoc3hyZXN1bHRbc2V4cGRlcF0pCi0gICAgICAgICAgICAgIGZyZWUo c3hyZXN1bHRbc2V4cGRlcF0pOwotICAgICAgICAgICAgaWYgKChzeHJlc3VsdFtzZXhwZGVwXSA9 IChjaGFyICopbWFsbG9jKGspKSkgewotICAgICAgICAgICAgICAgIHN4cmxlbltzZXhwZGVwXSA9 IGs7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByaW50ZigiP01lbW9y eSBhbGxvY2F0aW9uIGZhaWx1cmUgLSBcIiVzXCJcbiIsczIpOwotICAgICAgICAgICAgICAgIHNl eHByYysrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHN4ID0gc3hyZXN1bHRb c2V4cGRlcF07ICAgICAgICAgLyogUG9pbnQgdG8gcmVzdWx0IGJ1ZmZlciAqLwotICAgICAgICB3 aGlsZSAoKCpzeCsrID0gKnMyKyspKSA7ICAgICAgIC8qIGNvcHkgcmVzdWx0LiAqLwotICAgICAg ICBpZiAoZnBmbGFnICYmIHRydW5jYXRlKSB7ICAgICAgIC8qIEZsb2F0aW5nIHBvaW50ICsgdHJ1 bmNhdGUgKi8KLSAgICAgICAgICAgIHN4ID0gc3hyZXN1bHRbc2V4cGRlcF07ICAgICAvKiBhdCBk ZWNpbWFsIHBvaW50ICovCi0gICAgICAgICAgICBmb3IgKGkgPSB4eCAtIDE7IGkgPj0gMDsgaS0t KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN4W2ldID09ICcuJykgewotICAgICAgICAgICAgICAg ICAgICBzeFtpXSA9IE5VTDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gMCkgeyAgICAg ICAvKiBJZiBub3RoaW5nIGxlZnQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHN4WzBdID0g JzAnOyAgICAvKiBwdXQgYSB6ZXJvLiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgc3hbMV0g PSBOVUw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGxpbmUpICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogSWYgbWFjcm8gYXJnIGJ1ZmZlciBhbGxvY2F0ZWQgKi8KLSAgICAgIGZyZWUo bGluZSk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBmcmVlIGl0LiAqLwotICAgIGlmIChtdXN0 ZnJlZSkgeyAgICAgICAgICAgICAgICAgICAgIC8qIEFuZCBmcmVlIGxvY2FsIGNvcHkgb2Ygc3Bs aXQgbGlzdCAqLwotICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IG47IGkrKykgewotICAgICAgICAg ICAgaWYgKHBbaV0pIGZyZWUocFtpXSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZGVidWcoRjEx MSxzZXhwZGVidWcoImV4aXQiKSxzeHJlc3VsdFtzZXhwZGVwXSxzZXhwcmMpOwotICAgIHJldHVy bihzeHJlc3VsdFtzZXhwZGVwLS1dKTsKLX0KLSNlbmRpZiAvKiBOT1NFWFAgKi8KLSNlbmRpZiAv KiBOT1NQTCAqLwotCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog Q0hFQ0sgY29tbWFuZCAqLwotZG9jaGsoKSB7Ci0gICAgaW50IHgsIHk7Ci0gICAgaWYgKCh5ID0g Y21rZXkoZnRydGFiLG5mdHIsIiIsIiIseHhzdHJpbmcpKSA8IDApCi0gICAgICByZXR1cm4oeSk7 Ci0gICAgY2tzdHJuY3B5KGxpbmUsYXRtYnVmLExJTkJVRlNJWik7Ci0gICAgaWYgKCh5ID0gY21j Zm0oKSkgPCAwKQotICAgICAgcmV0dXJuKHkpOwotI2lmbmRlZiBOT1BVU0gKLSAgICBpZiAoIWNr c3RyY21wKGxpbmUsInB1c2giLChpbnQpc3RybGVuKGxpbmUpLDApKSB7Ci0gICAgICAgIGlmICht c2dmbGcpICAgICAgICAgICAgICAgICAgICAgLyogSWYgYXQgdG9wIGxldmVsLi4uICovCi0gICAg ICAgICAgcHJpbnRmKCIgcHVzaCVzIGF2YWlsYWJsZVxuIiwgbm9wdXNoID8gIiBub3QiIDogIiIp OwotICAgICAgICBlbHNlIGlmIChub3B1c2ggJiYgIWJhY2tncmQpCi0gICAgICAgICAgcHJpbnRm KCIgQ0hFQ0s6IHB1c2ggbm90IGF2YWlsYWJsZVxuIik7Ci0gICAgICAgIHJldHVybihzdWNjZXNz ID0gMSAtIG5vcHVzaCk7Ci0gICAgfQotI2VuZGlmIC8qIE5PUFVTSCAqLwotI2lmZGVmIFBJUEVT RU5ECi0gICAgaWYgKCFja3N0cmNtcChsaW5lLCJwaXBlcyIsKGludClzdHJsZW4obGluZSksMCkp IHsKLSAgICAgICAgaWYgKG1zZ2ZsZykgICAgICAgICAgICAgICAgICAgICAvKiBJZiBhdCB0b3Ag bGV2ZWwuLi4gKi8KLSAgICAgICAgICBwcmludGYoIiBwaXBlcyVzIGF2YWlsYWJsZVxuIiwKLSAg ICAgICAgICAgICAgICAgKG5vcHVzaCB8fCBwcm90b2NvbCAhPSBQUk9UT19LKSA/ICIgbm90IiA6 ICIiKTsKLSAgICAgICAgZWxzZSBpZiAoKG5vcHVzaCB8fCBwcm90b2NvbCAhPSBQUk9UT19LKSAm JiAhYmFja2dyZCkKLSAgICAgICAgICBwcmludGYoIiBDSEVDSzogcGlwZXMgbm90IGF2YWlsYWJs ZVxuIik7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSAtIG5vcHVzaCk7Ci0gICAgfQotI2Vu ZGlmIC8qIFBJUEVTRU5EICovCi0gICAgeSA9IGxvb2t1cChmdHJ0YWIsbGluZSxuZnRyLCZ4KTsg ICAgLyogTG9vayBpdCB1cCAqLwotICAgIGRlYnVnKEYxMTEsImRvY2hrIixmdHJ0YWJbeF0ua3dk LHkpOwotICAgIGlmIChtc2dmbGcpICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIGF0IHRv cCBsZXZlbC4uLiAqLwotICAgICAgcHJpbnRmKCIgJXMlcyBhdmFpbGFibGVcbiIsIGZ0cnRhYlt4 XS5rd2QsIHkgPyAiIG5vdCIgOiAiIik7Ci0gICAgZWxzZSBpZiAoeSAmJiAhYmFja2dyZCkKLSAg ICAgIHByaW50ZigiIENIRUNLOiAlcyBub3QgYXZhaWxhYmxlXG4iLCBmdHJ0YWJbeF0ua3dkKTsK LSAgICByZXR1cm4oc3VjY2VzcyA9IDEgLSB5KTsKLX0KLQotI2lmbmRlZiBOT0xPQ0FMCi0jaWZk ZWYgQ0tMT0dESUFMCi0KLS8qIENvbm5lY3Rpb24gbG9nIGFuZCBlbGFwc2VkLXRpbWUgcmVwb3J0 aW5nICovCi0KLWV4dGVybiBjaGFyIGN4bG9nYnVmW107ICAgICAgICAgICAgICAgICAvKiBMb2cg cmVjb3JkIGJ1ZmZlciAqLwotZXh0ZXJuIGNoYXIgZGlhZmlsW107ICAgICAgICAgICAgICAgICAg IC8qIExvZyBmaWxlIG5hbWUgKi8KLWV4dGVybiBpbnQgZGlhbG9nLCBjeF9hY3RpdmU7ICAgICAg ICAgICAvKiBGbGFncyAqLwotc3RhdGljIGxvbmcgY3hfcHJldiA9IDBMOyAgICAgICAgICAgICAg IC8qIEVsYXBzZWQgdGltZSBvZiBwcmV2aW91cyBzZXNzaW9uICovCi0KLSNlbmRpZiAvKiBDS0xP R0RJQUwgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLVZPSUQKLWRvbG9nZW5kKCkgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSByZWNvcmQgdG8gY29ubmVjdGlvbiBsb2cg Ki8KLSNpZmRlZiBMT0NVUwotICAgIGV4dGVybiBpbnQgbG9jdXMsIGF1dG9sb2N1czsKLSNlbmRp ZiAvKiBMT0NVUyAqLwotCi0jaWZuZGVmIE5PTE9DQUwKLSNpZmRlZiBDS0xPR0RJQUwKLSAgICBs b25nIGQxLCBkMiwgdDEsIHQyOwotICAgIGNoYXIgYnVmWzMyXSwgKiBwOwotI2VuZGlmIC8qIENL TE9HRElBTCAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmZGVmIExPQ1VTCi0gICAgaWYg KGF1dG9sb2N1cykgewotICAgICAgICBpbnQgeCA9IGxvY3VzOwotI2lmZGVmIE5FV0ZUUAotCWRl YnVnKEYxMDEsImRvbG9nZW5kIGZ0cGlzY29ubmVjdGVkIiwiIixmdHBpc2Nvbm5lY3RlZCgpKTsK LSAgICAgICAgc2V0bG9jdXMoZnRwaXNjb25uZWN0ZWQoKSA/IDAgOiAxLCAxKTsKLSNlbHNlCi0g ICAgICAgIHNldGxvY3VzKDEsMSk7Ci0jZW5kaWYgLyogTkVXRlRQICovCi0gICAgfQotI2VuZGlm IC8qIExPQ1VTICovCi0KLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIENLTE9HRElBTAotICAgIGRl YnVnKEYxMDEsImRvbG9nZW5kIGRpYWxvZyIsIiIsZGlhbG9nKTsKLSAgICBkZWJ1ZyhGMTAxLCJk b2xvZ2VuZCBjeGxvZ2J1ZlswXSIsIiIsY3hsb2didWZbMF0pOwotI2lmZGVmIENLU1lTTE9HCi0g ICAgZGVidWcoRjEwMSwiZG9sb2dlbmQgY2t4bG9nZ2luZyIsIiIsY2t4bG9nZ2luZyk7Ci0jZW5k aWYgLyogQ0tTWVNMT0cgKi8KLQotICAgIGlmICghY3hfYWN0aXZlIHx8ICFjeGxvZ2J1ZlswXSkg ICAgIC8qIE5vIGFjdGl2ZSByZWNvcmQgKi8KLSAgICAgIHJldHVybjsKLQotICAgIGN4X2FjdGl2 ZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIFJlY29yZCBpcyBub3QgYWN0aXZlICovCi0g ICAgZGVidWcoRjExMSwiZG9sb2dlbmQgY3hsb2didWYgMSIsY3hsb2didWYsY3hfYWN0aXZlKTsK LQotICAgIGQxID0gbWpkKChjaGFyICopY3hsb2didWYpOyAgICAgICAgIC8qIEdldCBzdGFydCBk YXRlIG9mIHRoaXMgc2Vzc2lvbiAqLwotICAgIGNrc3RybmNweShidWYsY2tkYXRlKCksMzEpOyAg ICAgICAgIC8qIEdldCBjdXJyZW50IGRhdGUgKi8KLSAgICBkMiA9IG1qZChidWYpOyAgICAgICAg ICAgICAgICAgICAgICAvKiBDb252ZXJ0IHRoZW0gdG8gbWpkcyAqLwotICAgIHAgPSBjeGxvZ2J1 ZjsgICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCBzdGFydCB0aW1lICovCi0gICAgcFsxMV0g PSBOVUw7Ci0gICAgcFsxNF0gPSBOVUw7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udmVy dCB0byBzZWNvbmRzICovCi0gICAgdDEgPSBhdG9sKHArOSkgKiAzNjAwTCArIGF0b2wocCsxMikg KiA2MEwgKyBhdG9sKHArMTUpOwotICAgIHBbMTFdID0gJzonOwotICAgIHBbMTRdID0gJzonOwot ICAgIHAgPSBidWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCBlbmQgdGltZSAq LwotICAgIHBbMTFdID0gTlVMOwotICAgIHBbMTRdID0gTlVMOwotICAgIHQyID0gYXRvbChwKzkp ICogMzYwMEwgKyBhdG9sKHArMTIpICogNjBMICsgYXRvbChwKzE1KTsKLSAgICB0MiA9ICgoZDIg LSBkMSkgKiA4NjQwMEwpICsgKHQyIC0gdDEpOyAvKiBDb21wdXRlIGVsYXBzZWQgdGltZSAqLwot ICAgIGRlYnVnKEYxMDEsImRvbG9nZW5kIHQyIiwiIix0Mik7Ci0gICAgaWYgKHQyID4gLTFMKSB7 Ci0gICAgICAgIGN4X3ByZXYgPSB0MjsKLSAgICAgICAgcCA9IGhobW1zcyh0Mik7Ci0gICAgICAg IGRlYnVnKEYxMTAsImRvbG9nZW5kIGhobW1zcyIscCwwKTsKLSAgICAgICAgY2tzdHJuY2F0KGN4 bG9nYnVmLCJFPSIsQ1hMT0dCVUZMKTsgLyogQXBwZW5kIHRvIGxvZyByZWNvcmQgKi8KLSAgICAg ICAgY2tzdHJuY2F0KGN4bG9nYnVmLHAsQ1hMT0dCVUZMKTsKLSAgICAgICAgZGVidWcoRjExMCwi ZG9sb2dlbmQgY3hsb2didWYgMiIsY3hsb2didWYsMCk7Ci0gICAgfSBlbHNlCi0gICAgICBjeF9w cmV2ID0gMEw7Ci0gICAgZGVidWcoRjEwMSwiZG9sb2dlbmQgY3hfcHJldiIsIiIsY3hfcHJldik7 Ci0gICAgaWYgKGRpYWxvZykgeyAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgbG9nZ2luZyAq LwotICAgICAgICBpbnQgeDsKLSAgICAgICAgeCA9IGRpYW9wbihkaWFmaWwsMSwxKTsgICAgICAg ICAvKiBPcGVuIGxvZyBpbiBhcHBlbmQgbW9kZSAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJkb2xv Z2VuZCBkaWFvcG4iLCIiLHgpOwotICAgICAgICB4ID0genNvdXRsKFpESUZJTCxjeGxvZ2J1Zik7 ICAgIC8qIFdyaXRlIHRoZSByZWNvcmQgKi8KLSAgICAgICAgZGVidWcoRjEwMSwiZG9sb2dlbmQg enNvdXRsIiwiIix4KTsKLSAgICAgICAgeCA9IHpjbG9zZShaRElGSUwpOyAgICAgICAgICAgICAv KiBDbG9zZSB0aGUgbG9nICovCi0gICAgICAgIGRlYnVnKEYxMDEsImRvbG9nZW5kIHpjbG9zZSIs IiIseCk7Ci0gICAgfQotI2lmZGVmIENLU1lTTE9HCi0gICAgZGVidWcoRjEwMSwiZG9sb2dlbmQg Y2t4bG9nZ2luZyIsIiIsY2t4bG9nZ2luZyk7Ci0gICAgaWYgKGNreGxvZ2dpbmcpIHsKLSAgICAg ICAgaW50IHg7Ci0gICAgICAgIHggPSBja2luZGV4KCJUPURJQUwiLGN4bG9nYnVmLDAsMCwxKTsK LSAgICAgICAgZGVidWcoRjExMSwiZG9sb2dlbmQgY2t4c3lzbG9nIixjeGxvZ2J1Zixja3hzeXNs b2cpOwotICAgICAgICBkZWJ1ZyhGMTExLCJkb2xvZ2VuZCBja2luZGV4IiwiVD1ESUFMIix4KTsK LSAgICAgICAgaWYgKHggPiAwKSB7Ci0gICAgICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xH X0RJKSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZG9sb2dlbmQgc3lzbG9nIixjeGxv Z2J1ZisxOCwwKTsKLSAgICAgICAgICAgICAgICBja3N5c2xvZyhTWVNMR19ESSwxLCJDT05ORUNU SU9OIiwoY2hhciAqKShjeGxvZ2J1ZisxOCksIiIpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChj a3hzeXNsb2cgPj0gU1lTTEdfQUMpIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJkb2xv Z2VuZCBzeXNsb2ciLGN4bG9nYnVmKzE4LDApOwotICAgICAgICAgICAgICAgIGNrc3lzbG9nKFNZ U0xHX0FDLDEsIkNPTk5FQ1RJT04iLChjaGFyICopKGN4bG9nYnVmKzE4KSwiIik7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSNlbmRpZiAv KiBDS0xPR0RJQUwgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi19Ci0KLSNpZm5kZWYgTk9MT0NB TAotI2lmZGVmIENLTE9HRElBTAotCi0vKiAgRCBPIEwgTyBHIFMgSCBPIFcgIC0tICBTaG93IHNl c3Npb24vY29ubmVjdGlvbiBpbmZvICAqLwotCi0vKiBDYWxsIHdpdGggZmMgPT0gMSB0byBzaG93 LCBmYyA9PSAwIHRvIG9ubHkgY2FsY3VsYXRlLiAqLwotLyogUmV0dXJucyBzZXNzaW9uIGVsYXBz ZWQgdGltZSBpbiBzZWNvbmRzLiAqLwotLyogSWYgbm8gc2Vzc2lvbiBhY3RpdmUsIHJldHVybnMg ZWxhcHNlZCB0aW1lIG9mIHByZXZpb3VzIHNlc3Npb24sIGlmIGFueSwgKi8KLS8qIG90aGVyd2lz ZSAwICovCi0KLWxvbmcKLWRvbG9nc2hvdyhmYykgaW50IGZjOyB7ICAgICAgICAgICAgICAgICAv KiBTSE9XIChjdXJyZW50KSBDT05ORUNUSU9OICovCi0gICAgbG9uZyBkMSwgZDIsIHQxLCB0MiA9 IDAsIHByZXY7Ci0gICAgY2hhciBjLCBidWYxWzMyXSwgYnVmMlszMl0sICogaW5mb1szMl0sICog cCwgKiBzOwotICAgIGNoYXIgKiB4bG9nYnVmLCB4YnVmW0NYTE9HQlVGTCsxXTsKLSAgICBpbnQg aSwgeCA9IDAsIHosIGZ0cCA9IDAsIGFjdGl2ZSA9IDA7Ci0KLSNpZmRlZiBORVdGVFAKLSAgICBl eHRlcm4gY2hhciBmdHBsb2didWZbXTsKLSAgICBleHRlcm4gbG9uZyBmdHBsb2dwcmV2OwotICAg IGV4dGVybiBpbnQgZnRwbG9nYWN0aXZlOwotICAgIGlmIChmYyAmIFdfRlRQKSB7Ci0gICAgICAg IGZjICY9IDYzOwotICAgICAgICBmdHAgPSAxOwotICAgICAgICB4bG9nYnVmID0gZnRwbG9nYnVm OwotICAgICAgICBwcmV2ID0gZnRwbG9ncHJldjsKLSAgICAgICAgYWN0aXZlID0gZnRwbG9nYWN0 aXZlOwotICAgIH0gZWxzZSB7Ci0jZW5kaWYgLyogTkVXRlRQICovCi0gICAgICAgIGZ0cCA9IDA7 Ci0gICAgICAgIHhsb2didWYgPSBjeGxvZ2J1ZjsKLSAgICAgICAgcHJldiA9IGN4X3ByZXY7Ci0g ICAgICAgIGFjdGl2ZSA9IGN4X2FjdGl2ZTsKLSNpZmRlZiBORVdGVFAKLSAgICB9Ci0jZW5kaWYg LyogTkVXRlRQICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJkb2xvZ3Nob3cgbG9jYWwiLCIiLGxvY2Fs KTsKLSAgICBkZWJ1ZyhGMTAxLCJkb2xvZ3Nob3cgZnRwIiwiIixmdHApOwotICAgIGRlYnVnKEYx MTEsImRvbG9nc2hvdyBhY3RpdmUiLHhsb2didWYsYWN0aXZlKTsKLQotICAgIGlmICgheGxvZ2J1 ZlswXSkgewotICAgICAgICBpZiAoZmMpIHsKLSAgICAgICAgICAgIGlmIChkaWRzZXRsaW4gfHwg ZnRwKQotICAgICAgICAgICAgICBwcmludGYoIiAlczogTm8gcmVjb3JkLlxuIiwgZnRwID8gIkZU UCIgOiAiS2VybWl0Iik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHByaW50Zigi ICVzOiBObyBjb25uZWN0aW9uLlxuIiwgZnRwID8gIkZUUCIgOiAiS2VybWl0Iik7Ci0gICAgICAg IH0KLSAgICAgICAgcmV0dXJuKHByZXYpOwotICAgIH0KLQotI2lmZGVmIE5FV0ZUUAotICAgIGlm IChmdHApIHsKLSAgICAgICAgeiA9IGZ0cGlzY29ubmVjdGVkKCkgPyAxIDogLTE7Ci0gICAgfSBl bHNlIHsKLSNlbmRpZiAvKiBORVdGVFAgKi8KLSAgICAgICAgaWYgKGxvY2FsKSB7ICAgICAgICAg ICAgICAgICAgICAvKiBTZWUgaWYgd2UgaGF2ZSBhbiBvcGVuIGNvbm5lY3Rpb24gKi8KLSAgICAg ICAgICAgIHogPSB0dGNoaygpOwotICAgICAgICAgICAgZGVidWcoRjEwMSwiZG9sb2dzaG93IHR0 Y2hrIiwiIix6KTsKLSAgICAgICAgICAgIHogPSAoeiA+IC0xKSA/IDEgOiAtMjsKLSAgICAgICAg fSBlbHNlIHsKLSAgICAgICAgICAgIHogPSBhY3RpdmUgPyAxIDogLTI7Ci0gICAgICAgIH0KLSNp ZmRlZiBORVdGVFAKLSAgICB9Ci0jZW5kaWYgLyogTkVXRlRQICovCi0gICAgaWYgKHogPCAwTCkg ewotICAgICAgICBpZiAoIWZjKQotICAgICAgICAgIHJldHVybihwcmV2KTsKLSAgICAgICAgZWxz ZQotICAgICAgICAgIHQyID0gcHJldjsKLSAgICB9Ci0gICAgLyogTm90ZTogTk9UIGNrc3RybmNw eSEgKi8KLSAgICBzdHJuY3B5KGJ1ZjEseGxvZ2J1ZiwxNyk7ICAgICAgICAgICAvKiBDb3B5IG9m IGp1c3QgdGhlIHRpbWVzdGFtcCAqLwotICAgIGJ1ZjFbMTddID0gTlVMOyAgICAgICAgICAgICAg ICAgICAgIC8qIFRlcm1pbmF0ZSBpdCAqLwotICAgIGNrc3RybmNweSh4YnVmLHhsb2didWYrMTgs Q1hMT0dCVUZMKTsgLyogQ29weSB0aGF0IGNhbiBiZSBwb2tlZCAqLwotICAgIGRlYnVnKEYxMTEs ImRvbG9nc2hvdyBwcmV2Iix4YnVmLHByZXYpOwotCi0gICAgeHdvcmRzKHhidWYsMzEsaW5mbywx KTsgICAgICAgICAgICAgLyogQnJlYWsgdXAgaW50byBmaWVsZHMgKi8KLSAgICBkMSA9IG1qZChi dWYxKTsgICAgICAgICAgICAgICAgICAgICAvKiBDb252ZXJ0IHN0YXJ0IHRpbWUgdG8gTUpEICov Ci0gICAgY2tzdHJuY3B5KGJ1ZjIsY2tkYXRlKCksMzEpOyAgICAgICAgLyogQ3VycmVudCBkYXRl ICovCi0gICAgZDIgPSBtamQoYnVmMik7ICAgICAgICAgICAgICAgICAgICAgLyogQ29udmVydCB0 byBNSkQgKi8KLSAgICBwID0gYnVmMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2lu dCB0byBzdGFydCB0aW1lICovCi0gICAgcFsxMV0gPSBOVUw7Ci0gICAgcFsxNF0gPSBOVUw7ICAg ICAgICAgICAgICAgICAgICAgICAgLyogQ29udmVydCB0byBzZWNvbmRzICovCi0gICAgdDEgPSBh dG9sKHArOSkgKiAzNjAwTCArIGF0b2wocCsxMikgKiA2MEwgKyBhdG9sKHArMTUpOwotICAgIHBb MTFdID0gJzonOwotICAgIHBbMTRdID0gJzonOwotICAgIHAgPSBidWYyOyAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIERpdHRvIGZvciBjdXJyZW50IHRpbWUgKi8KLSAgICBwWzExXSA9IE5V TDsKLSAgICBwWzE0XSA9IE5VTDsKLSAgICBpZiAoeiA+IC0xTCkgewotICAgICAgICB0MiA9IGF0 b2wocCs5KSAqIDM2MDBMICsgYXRvbChwKzEyKSAqIDYwTCArIGF0b2wocCsxNSk7Ci0gICAgICAg IHQyID0gKChkMiAtIGQxKSAqIDg2NDAwTCkgKyAodDIgLSB0MSk7IC8qIEVsYXBzZWQgdGltZSBz byBmYXIgKi8KLSAgICB9Ci0gICAgaWYgKGZjKSB7Ci0gICAgICAgIHAgPSBOVUxMOwotICAgICAg ICBpZiAodDIgPiAtMUwpICAgICAgICAgICAgICAgICAgIC8qIENvbnZlcnQgc2Vjb25kcyB0byBo aDptbTpzcyAqLwotICAgICAgICAgIHAgPSBoaG1tc3ModDIpOwotICAgICAgICBpZiAoeiA+IC0x KQotICAgICAgICAgIHMgPSAiQWN0aXZlIjsKLSAgICAgICAgZWxzZSBpZiAoeiA9PSAtMikKLSAg ICAgICAgICBzID0gIkNsb3NlZCI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBzID0gIlVua25v d24iOwotICAgICAgICBwcmludGYoIlxuIik7ICAgICAgICAgICAgICAgICAgIC8qIFNob3cgcmVz dWx0cyAqLwotICAgICAgICBwcmludGYoIiBTdGF0dXM6ICAgICAgICVzXG4iLHMpOwotICAgICAg ICBwcmludGYoIiBPcGVuZWQ6ICAgICAgICVzXG4iLGJ1ZjEpOwotICAgICAgICBwcmludGYoIiBV c2VyOiAgICAgICAgICVzXG4iLGluZm9bMV0gPyBpbmZvWzFdIDogIiIpOwotICAgICAgICBwcmlu dGYoIiBQSUQ6ICAgICAgICAgICVzXG4iLGluZm9bMl0gPyBpbmZvWzJdIDogIiIpOwotICAgICAg ICBmb3IgKGkgPSAzOyBpbmZvW2ldOyBpKyspIHsKLSAgICAgICAgICAgIGMgPSBpbmZvW2ldWzBd OwotICAgICAgICAgICAgcyA9IChpbmZvW2ldKSA/IGluZm9baV0rMiA6ICIiOwotICAgICAgICAg ICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgICAgIGNhc2UgJ1QnOiBwcmludGYoIiBUeXBlOiAg ICAgICAgICVzXG4iLCBzKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgJ04nOiBwcmludGYo IiBUbzogICAgICAgICAgICVzXG4iLCBzKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgJ1An OiBwcmludGYoIiBQb3J0OiAgICAgICAgICVzXG4iLCBzKTsgYnJlYWs7Ci0gICAgICAgICAgICAg IGNhc2UgJ0gnOiBwcmludGYoIiBGcm9tOiAgICAgICAgICVzXG4iLCBzKTsgYnJlYWs7Ci0gICAg ICAgICAgICAgIGNhc2UgJ0QnOiBwcmludGYoIiBEZXZpY2U6ICAgICAgICVzXG4iLCBzKTsgYnJl YWs7Ci0gICAgICAgICAgICAgIGNhc2UgJ08nOiBwcmludGYoIiBPcmlnaW46ICAgICAgICVzXG4i LCBzKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgJ0UnOiBicmVhazsKLSAgICAgICAgICAg ICAgZGVmYXVsdDogIHByaW50ZigiICVzXG4iLGluZm9baV0gPyBpbmZvW2ldIDogIiIpOwotICAg ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICh6IDwgMEwpCi0gICAgICAgICAgcHJp bnRmKCIgRWxhcHNlZCB0aW1lOiAlc1xuIiwgaGhtbXNzKHQyKSk7Ci0gICAgICAgIGVsc2UKLSAg ICAgICAgICBwcmludGYoIiBFbGFwc2VkIHRpbWU6ICVzXG4iLCBwID8gcCA6ICIodW5rbm93biki KTsKLSAgICAgICAgeCA9IDA7Ci0jaWZkZWYgTkVUQ09OTgotI2lmZGVmIFNTSEJVSUxUSU4KLSAg ICAgICAgaWYgKCBJU19TU0goKSApIHgrKzsKLSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0jaWZk ZWYgQ0tfRU5DUllQVElPTgotICAgICAgICBpZiAoY2tfdG5fZW5jcnlwdGluZygpICYmIGNrX3Ru X2RlY3J5cHRpbmcoKSkgeCsrOwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNpZmRlZiBD S19TU0wKLSAgICAgICAgaWYgKHRsc19hY3RpdmVfZmxhZyB8fCBzc2xfYWN0aXZlX2ZsYWcpIHgr KzsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNpZmRlZiBSTE9HQ09ERQotI2lmZGVmIENLX0tFUkJF Uk9TCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICBpZiAodHRucHJvdG8gPT0gTlBfRUs0 TE9HSU4gfHwgdHRucHJvdG8gPT0gTlBfRUs1TE9HSU4pIHgrKzsKLSNlbmRpZiAvKiBDS19FTkNS WVBUSU9OICovCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSNlbmRpZiAvKiBSTE9HQ09ERSAq LwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSAgICAgICAgaWYgKHogPiAwKQotICAgICAgICAgIHBy aW50ZigiIEVuY3J5cHRlZDogICAgJXNcbiIsIHggPyAiWWVzIiA6ICJObyIpOwotICAgICAgICBw cmludGYoIiBMb2c6ICAgICAgICAgICVzXG4iLCBkaWFsb2cgPyBkaWFmaWwgOiAiKG5vbmUpIik7 Ci0gICAgICAgIHByaW50ZigiXG4iKTsKLSAgICB9Ci0gICAgcmV0dXJuKHQyID4gLTFMID8gdDIg OiAwTCk7Ci19Ci0KLVZPSUQKLWRvbG9nbGluZSgpIHsKLSAgICBjaGFyICogcDsKLSAgICBpbnQg biwgbSA9IDA7Ci0KLSAgICBkb2xvZ2VuZCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQ cmV2aW91cyBzZXNzaW9uIG5vdCBjbG9zZWQgb3V0PyAqLwotICAgIGN4X2FjdGl2ZSA9IDE7ICAg ICAgICAgICAgICAgICAgICAgIC8qIFJlY29yZCBpcyBhY3RpdmUgKi8KLSAgICBjeF9wcmV2ID0g MEw7Ci0gICAgcCA9IGNrZGF0ZSgpOyAgICAgICAgICAgICAgICAgICAgICAgLyogR2V0IHRpbWVz dGFtcCAqLwotICAgIG4gPSBja3N0cm5jcHkoY3hsb2didWYscCxDWExPR0JVRkwtMSk7IC8qIFN0 YXJ0IHJlY29yZCBvZmYgd2l0aCBpdCAqLwotICAgIGlmICghdWlkYnVmWzBdKSB7Ci0gICAgICAg IGRlYnVnKEYxMDAsImRvbG9nbGluZSB1aWRidWYgZW1wdHkiLCIiLDApOwotI2lmZGVmIFVOSVgg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdobyBoYXMgd2hvYW1pKCkuLi4gKi8KLSAg ICAgICAgY2tzdHJuY3B5KHVpZGJ1ZiwoY2hhciAqKXdob2FtaSgpLFVJREJVRkxFTik7Ci0jZWxz ZQotI2lmZGVmIFNUUkFUVVMKLSAgICAgICAgY2tzdHJuY3B5KHVpZGJ1ZiwoY2hhciAqKXdob2Ft aSgpLFVJREJVRkxFTik7Ci0jZWxzZQotICAgICAgICBja3N0cm5jcHkodWlkYnVmLCJVTktOT1dO IixVSURCVUZMRU4pOwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSNlbmRpZiAvKiBVTklYICovCi0g ICAgfQotICAgIG0gPSBzdHJsZW4odWlkYnVmKSArIHN0cmxlbihteWhvc3QpICsgc3RybGVuKHR0 bmFtZSkgKyAzMjsKLSAgICBpZiAobittIDwgQ1hMT0dCVUZMLTEpIHsgICAgICAgICAgICAvKiBB ZGQgc2VyaWFsIGRldmljZSBpbmZvICovCi0gICAgICAgIHAgPSBjeGxvZ2J1ZituOwotICAgICAg ICBzcHJpbnRmKHAsIiAlcyAlcyBUPVNFUklBTCBIPSVzIEQ9JXMgIiwgLyogU0FGRSAqLwotICAg ICAgICAgICAgICAgIHVpZGJ1ZiwKLSAgICAgICAgICAgICAgICBja2dldHBpZCgpLAotICAgICAg ICAgICAgICAgIG15aG9zdCwKLSAgICAgICAgICAgICAgICB0dG5hbWUKLSAgICAgICAgICAgICAg ICApOwotICAgIH0gZWxzZQotICAgICAgY2tzdHJuY3B5KGN4bG9nYnVmLCJMT0dMSU5FIEJVRkZF UiBPVkVSRkxPVyIsQ1hMT0dCVUZMKTsKLSAgICBkZWJ1ZyhGMTEwLCJkb2xvZ2xpbmUiLGN4bG9n YnVmLDApOwotfQotCi0jaWZkZWYgTkVUQ09OTgotVk9JRAotZG9sb2duZXQoKSB7Ci0gICAgY2hh ciAqIHAsICogcyA9ICJORVQiLCAqIHV1ID0gdWlkYnVmOwotICAgIGNoYXIgKiBwb3J0ID0gIiI7 Ci0gICAgaW50IG4sIG0sIHRjcCA9IDA7Ci0gICAgY2hhciAqIGggPSBOVUxMOwotCi0gICAgZG9s b2dlbmQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJldmlvdXMgc2Vzc2lvbiBub3Qg Y2xvc2VkIG91dD8gKi8KLSAgICBjeF9wcmV2ID0gMEw7Ci0gICAgY3hfYWN0aXZlID0gMTsgICAg ICAgICAgICAgICAgICAgICAgLyogUmVjb3JkIGlzIGFjdGl2ZSAqLwotICAgIHAgPSBja2RhdGUo KTsKLSAgICBuID0gY2tzdHJuY3B5KGN4bG9nYnVmLHAsQ1hMT0dCVUZMKTsKLSNpZmRlZiBUQ1BT T0NLRVQKLSAgICBpZiAobmV0dHlwZSA9PSBORVRfVENQQiB8fCBuZXR0eXBlID09IE5FVF9UQ1BB KSB7Ci0JdGNwKys7Ci0JcyA9ICJUQ1AiOwotICAgIH0gZWxzZSBpZiAobmV0dHlwZSA9PSBORVRf U1NIKSB7Ci0JcyA9ICJTU0giOwotCXRjcCsrOwotICAgIH0KLSNlbmRpZiAvKiBUQ1BTT0NLRVQg Ki8KLSNpZmRlZiBBTllYMjUKLSAgICBpZiAobmV0dHlwZSA9PSBORVRfU1gyNSB8fCBuZXR0eXBl ID09IE5FVF9WWDI1IHx8IG5ldHR5cGUgPT0gTkVUX0lYMjUpCi0gICAgICBzID0gIlgyNSI7Ci0j ZW5kaWYgLyogQU5ZWDI1ICovCi0jaWZkZWYgREVDTkVUCi0gICAgaWYgKG5ldHR5cGUgPT0gTkVU X0RFQykKLSAgICAgIHMgPSAiREVDTkVUIjsKLSNlbmRpZiAvKiBERUNORVQgKi8KLSNpZmRlZiBT VVBFUkxBVAotICAgIGlmIChuZXR0eXBlID09IE5FVF9TTEFUKQotICAgICAgcyA9ICJTVVBFUkxB VCI7Ci0jZW5kaWYgLyogU1VQRVJMQVQgKi8KLSNpZmRlZiBDS19ORVRCSU9TCi0gICAgaWYgKG5l dHR5cGUgPT0gTkVUX0JJT1MpCi0gICAgICBzID0gIk5FVEJJT1MiOwotI2VuZGlmIC8qIENLX05F VEJJT1MgKi8KLQotICAgIGlmICghdXVbMF0pIHsKLSAgICAgICAgZGVidWcoRjEwMCwiZG9sb2du ZXQgdWlkYnVmIGVtcHR5IiwiIiwwKTsKLSNpZmRlZiBPUzJPUlVOSVggICAgICAgICAgICAgICAg ICAgICAgICAvKiBXaG8gaGFzIHdob2FtaSgpLi4uICovCi0gICAgICAgIHV1ID0gKGNoYXIgKil3 aG9hbWkoKTsKLSNlbHNlCi0jaWZkZWYgU1RSQVRVUwotICAgICAgICB1dSA9IChjaGFyICopd2hv YW1pKCk7Ci0jZWxzZQotICAgICAgICB1dSA9ICJVTktOT1dOIjsKLSNlbmRpZiAvKiBTVFJBVFVT ICovCi0jZW5kaWYgLyogVU5JWCAqLwotICAgIH0KLSNpZmRlZiBUQ1BTT0NLRVQKLSAgICBpZiAo dGNwKSB7Ci0JaW50IGs7Ci0JbWFrZXN0cigmaCxteWhvc3QpOwotCWlmICgoayA9IGNraW5kZXgo IjoiLGgsMCwwLDApKSA+IDApIHsKLQkgICAgaFtrLTFdID0gTlVMOwotCSAgICBwb3J0ID0gJmhb a107Ci0JfSBlbHNlIHsKLQkgICAgaW50IHN2Y251bSA9IGdldHRjcHBvcnQoKTsKLQkgICAgaWYg KHN2Y251bSA+IDApCi0JICAgICAgcG9ydCA9IGNraXRvYShzdmNudW0pOwotCSAgICBlbHNlCi0J ICAgICAgcG9ydCA9ICJ1bmsiOwotCX0KLSAgICB9Ci0jZW5kaWYJLyogVENQU09DS0VUICovCi0g ICAgbSA9IHN0cmxlbih1dSkgKyBzdHJsZW4obXlob3N0KSArIHN0cmxlbih0dG5hbWUpICsgc3Ry bGVuKHMpICsgMzI7Ci0gICAgaWYgKG4rbSA8IENYTE9HQlVGTC0xKSB7ICAgICAgICAgICAgLyog U0FGRSAqLwotICAgICAgICBwID0gY3hsb2didWYrbjsKLSAgICAgICAgc3ByaW50ZihwLCIgJXMg JXMgVD0lcyBOPSVzIEg9JXMgUD0lcyAiLAotICAgICAgICAgICAgICAgIHV1LAotICAgICAgICAg ICAgICAgIGNrZ2V0cGlkKCksCi0gICAgICAgICAgICAgICAgcywKLSAgICAgICAgICAgICAgICB0 dG5hbWUsCi0gICAgICAgICAgICAgICAgbXlob3N0LAotCQlwb3J0Ci0gICAgICAgICAgICAgICAg KTsKLSAgICB9IGVsc2UKLSAgICAgIGNrc3RybmNweShjeGxvZ2J1ZiwiTE9HTkVUIEJVRkZFUiBP VkVSRkxPVyIsQ1hMT0dCVUZMKTsKLSAgICBkZWJ1ZyhGMTEwLCJkb2xvZ25ldCBjeGxvZ2J1ZiIs Y3hsb2didWYsMCk7Ci0gICAgaWYgKGgpIG1ha2VzdHIoJmgsTlVMTCk7Ci19Ci0jZW5kaWYgLyog TkVUQ09OTiAqLwotI2VuZGlmIC8qIENLTE9HRElBTCAqLwotCi0jaWZuZGVmIE5PRElBTAotLyoK LSAgUGFyc2UgYSBESUFMLXJlbGF0ZWQgc3RyaW5nLCBzdHJpcHBpbmcgZW5jbG9zaW5nIGJyYWNl cywgaWYgYW55LgotKi8KLXN0YXRpYyBpbnQKLWRpYWxzdHIocCxtc2cpIGNoYXIgKipwOyBjaGFy ICptc2c7IHsKLSAgICBpbnQgeDsKLSAgICBjaGFyICpzOwotCi0gICAgaWYgKCh4ID0gY210eHQo bXNnLCAiIiwgJnMsIHh4c3RyaW5nKSkgPCAwKQotICAgICAgcmV0dXJuKHgpOwotICAgIHMgPSBi cnN0cmlwKHMpOyAgICAgICAgICAgICAgICAgICAgIC8qIFN0cmlwIGJyYWNlcyBhcm91bmQuICov Ci0gICAgZGVidWcoRjExMCwiZGlhbHN0ciIscywwKTsKLSAgICBtYWtlc3RyKHAsKnM/czpOVUxM KTsKLSAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotfQotCi1WT0lECi1pbml0bWRtKHgpIGludCB4 OyB7Ci0gICAgTURNSU5GICogcDsKLSAgICBpbnQgbTsKLQotICAgIG1kbXR5cCA9IHg7ICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFNldCBnbG9iYWwgbW9kZW0gdHlwZSAqLwotICAgIGRlYnVn KEYxMDEsImluaXRtZG0gbWRtdHlwIiwiIixtZG10eXApOwotICAgIGRlYnVnKEYxMDEsImluaXRt ZG0gdXNlcm1kbSIsIiIsdXNlcm1kbSk7Ci0gICAgaWYgKHggPCAxKSByZXR1cm47Ci0KLSAgICBt ID0gdXNlcm1kbSA/IHVzZXJtZG0gOiBtZG10eXA7Ci0KLSAgICBwID0gbW9kZW1wW21dOyAgICAg ICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byBtb2RlbSBpbmZvIHN0cnVjdCwgYW5kICovCi0g ICAgLyogZGVidWcoRjEwMSwiaW5pdG1kbSBwIiwiIixwKTsgKi8KLSAgICBpZiAocCkgewotICAg ICAgICBkaWFsZWMgPSBwLT5jYXBhcyAmIENLRF9FQzsgICAgIC8qIHNldCBESUFMIEVSUk9SLUNP UlJFQ1RJT04sICovCi0gICAgICAgIGRpYWxkYyA9IHAtPmNhcGFzICYgQ0tEX0RDOyAgICAgLyog RElBTCBEQVRBLUNPTVBSRVNTSU9OLCBhbmQgKi8KLSAgICAgICAgbWRtc3BkID0gcC0+Y2FwYXMg JiBDS0RfU0IgPyAwIDogMTsgLyogRElBTCBTUEVFRC1NQVRDSElORyBmcm9tIGl0LiAqLwotICAg ICAgICBkaWFsZmMgPSBGTE9fQVVUTzsgICAgICAgICAgICAgICAgICAvKiBNb2RlbSdzIGxvY2Fs IGZsb3cgY29udHJvbC4uICovCi0gICAgICAgIGRpYWxtYXggICA9IHAtPm1heF9zcGVlZDsKLSAg ICAgICAgZGlhbGNhcGFzID0gcC0+Y2FwYXM7Ci0gICAgICAgIGRpYWxlc2MgICA9IHAtPmVzY19j aGFyOwotICAgIH0gZWxzZSBpZiAobWRtdHlwID4gMCkgewotICAgICAgICBwcmludGYoIldBUk5J Tkc6IG1vZGVtIGluZm8gZm9yIFwiJXNcIiBub3QgZmlsbGVkIGluIHlldFxuIiwKLSAgICAgICAg ICAgICAgIGdtZG10eXAoKQotICAgICAgICAgICAgICAgKTsKLSAgICB9Ci0KLS8qIFJlc2V0IG9y IHNldCB0aGUgU0VUIERJQUwgU1RSSU5HIGl0ZW1zIC4uLiAqLwotCi0jaWZkZWYgREVCVUcKLSAg ICBpZiAoZGVibG9nKSB7Ci0gICAgICAgIGRlYnVnKEYxMTAsImluaXRtZG0gZGlhbGluaSIsZGlh bGluaSwwKTsKLSAgICAgICAgZGVidWcoRjExMCwiaW5pdG1kbSBkaWFsbXN0ciAiLGRpYWxtc3Ry LDApOwotICAgICAgICBkZWJ1ZyhGMTEwLCJpbml0bWRtIGRpYWxtcHJtdCIsZGlhbG1wcm10LDAp OwotICAgICAgICBkZWJ1ZyhGMTEwLCJpbml0bWRtIGRpYWxjbWQiLGRpYWxjbWQsMCk7Ci0gICAg ICAgIGRlYnVnKEYxMTAsImluaXRtZG0gZGlhbGRjb24iLGRpYWxkY29uLDApOwotICAgICAgICBk ZWJ1ZyhGMTEwLCJpbml0bWRtIGRpYWxkY29mZiIsZGlhbGRjb2ZmLDApOwotICAgICAgICBkZWJ1 ZyhGMTEwLCJpbml0bWRtIGRpYWxlY29uIixkaWFsZWNvbiwwKTsKLSAgICAgICAgZGVidWcoRjEx MCwiaW5pdG1kbSBkaWFsZWNvZmYiLGRpYWxlY29mZiwwKTsKLSAgICAgICAgZGVidWcoRjExMCwi aW5pdG1kbSBkaWFsaGNtZCIsZGlhbGhjbWQsMCk7Ci0gICAgICAgIGRlYnVnKEYxMTAsImluaXRt ZG0gZGlhbGh3ZmMiLGRpYWxod2ZjLDApOwotICAgICAgICBkZWJ1ZyhGMTEwLCJpbml0bWRtIGRp YWxzd2ZjIixkaWFsc3dmYywwKTsKLSAgICAgICAgZGVidWcoRjExMCwiaW5pdG1kbSBkaWFsbm9m YyIsZGlhbG5vZmMsMCk7Ci0gICAgICAgIGRlYnVnKEYxMTAsImluaXRtZG0gZGlhbHRvbmUiLGRp YWx0b25lLDApOwotICAgICAgICBkZWJ1ZyhGMTEwLCJpbml0bWRtIGRpYWxwdWxzZSIsZGlhbHB1 bHNlLDApOwotICAgICAgICBkZWJ1ZyhGMTEwLCJpbml0bWRtIGRpYWxuYW1lIixkaWFsbmFtZSww KTsKLSAgICAgICAgZGVidWcoRjExMCwiaW5pdG1kbSBkaWFsYWFvbiIsZGlhbGFhb24sMCk7Ci0g ICAgICAgIGRlYnVnKEYxMTAsImluaXRtZG0gZGlhbGFhb2ZmIixkaWFsYWFvZmYsMCk7Ci0gICAg ICAgIGRlYnVnKEYxMTAsImluaXRtZG0gZGlhbHgzIixkaWFseDMsMCk7Ci0gICAgICAgIGRlYnVn KEYxMTAsImluaXRtZG0gZGlhbHNwb24iLGRpYWxzcG9uLDApOwotICAgICAgICBkZWJ1ZyhGMTEw LCJpbml0bWRtIGRpYWxzcG9mZiIsZGlhbHNwb2ZmLDApOwotICAgICAgICBkZWJ1ZyhGMTEwLCJp bml0bWRtIGRpYWx2b2wxIixkaWFsdm9sMSwwKTsKLSAgICAgICAgZGVidWcoRjExMCwiaW5pdG1k bSBkaWFsdm9sMiIsZGlhbHZvbDIsMCk7Ci0gICAgICAgIGRlYnVnKEYxMTAsImluaXRtZG0gZGlh bHZvbDMiLGRpYWx2b2wzLDApOwotICAgICAgICBkZWJ1ZyhGMTEwLCJpbml0bWRtIGRpYWxpbmky IixkaWFsaW5pMiwwKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotICAgIGlmICh1c2Vy bWRtICYmIHApIHsgLyogVVNFUi1ERUZJTkVEOiBjb3B5IGluZm8gZnJvbSBzcGVjaWZpZWQgdGVt cGxhdGUgKi8KLQotICAgICAgICBtYWtlc3RyKCZkaWFsaW5pICAscC0+d2FrZV9zdHIpOwotICAg ICAgICBtYWtlc3RyKCZkaWFsbXN0ciAscC0+ZG1vZGVfc3RyKTsKLSAgICAgICAgbWFrZXN0cigm ZGlhbG1wcm10LHAtPmRtb2RlX3Byb21wdCk7Ci0gICAgICAgIG1ha2VzdHIoJmRpYWxjbWQgICxw LT5kaWFsX3N0cik7Ci0gICAgICAgIG1ha2VzdHIoJmRpYWxkY29uICxwLT5kY19vbl9zdHIpOwot ICAgICAgICBtYWtlc3RyKCZkaWFsZGNvZmYscC0+ZGNfb2ZmX3N0cik7Ci0gICAgICAgIG1ha2Vz dHIoJmRpYWxlY29uICxwLT5lY19vbl9zdHIpOwotICAgICAgICBtYWtlc3RyKCZkaWFsZWNvZmYs cC0+ZWNfb2ZmX3N0cik7Ci0gICAgICAgIG1ha2VzdHIoJmRpYWxoY21kICxwLT5odXBfc3RyKTsK LSAgICAgICAgbWFrZXN0cigmZGlhbGh3ZmMgLHAtPmh3ZmNfc3RyKTsKLSAgICAgICAgbWFrZXN0 cigmZGlhbHN3ZmMgLHAtPnN3ZmNfc3RyKTsKLSAgICAgICAgbWFrZXN0cigmZGlhbG5vZmMgLHAt Pm5vZmNfc3RyKTsKLSAgICAgICAgbWFrZXN0cigmZGlhbHRvbmUgLHAtPnRvbmUpOwotICAgICAg ICBtYWtlc3RyKCZkaWFscHVsc2UscC0+cHVsc2UpOwotICAgICAgICBtYWtlc3RyKCZkaWFsbmFt ZSAsIlRoaXMgc3BhY2UgYXZhaWxhYmxlICh1c2UgU0VUIE1PREVNIE5BTUUpIik7Ci0gICAgICAg IG1ha2VzdHIoJmRpYWxhYW9uICxwLT5hYV9vbl9zdHIpOwotICAgICAgICBtYWtlc3RyKCZkaWFs YWFvZmYscC0+YWFfb2ZmX3N0cik7Ci0gICAgICAgIG1ha2VzdHIoJmRpYWx4MyAgICxwLT5pZ25v cmVkdCk7Ci0gICAgICAgIG1ha2VzdHIoJmRpYWxzcG9uICxwLT5zcF9vbl9zdHIpOwotICAgICAg ICBtYWtlc3RyKCZkaWFsc3BvZmYscC0+c3Bfb2ZmX3N0cik7Ci0gICAgICAgIG1ha2VzdHIoJmRp YWx2b2wxICxwLT52b2wxX3N0cik7Ci0gICAgICAgIG1ha2VzdHIoJmRpYWx2b2wyICxwLT52b2wy X3N0cik7Ci0gICAgICAgIG1ha2VzdHIoJmRpYWx2b2wzICxwLT52b2wzX3N0cik7Ci0gICAgICAg IG1ha2VzdHIoJmRpYWxpbmkyICxwLT5pbmkyKTsKLQotICAgIH0gZWxzZSB7ICAgICAgICAgICAg ICAgICAgICAvKiBOb3QgdXNlci1kZWZpbmVkLCBzbyB3aXBlIG91dCBvdmVycmlkZXMgKi8KLQot ICAgICAgICBpZiAoZGlhbGluaSkgICBtYWtlc3RyKCZkaWFsaW5pLE5VTEwpOyAgIC8qIEluaXQt c3RyaW5nICovCi0gICAgICAgIGlmIChkaWFsbXN0cikgIG1ha2VzdHIoJmRpYWxtc3RyLE5VTEwp OyAgLyogRGlhbC1tb2RlLXN0ciAqLwotICAgICAgICBpZiAoZGlhbG1wcm10KSBtYWtlc3RyKCZk aWFsbXBybXQsTlVMTCk7IC8qIERpYWwtbW9kZS1wcm8gKi8KLSAgICAgICAgaWYgKGRpYWxjbWQp ICAgbWFrZXN0cigmZGlhbGNtZCxOVUxMKTsgICAvKiBEaWFsLWNvbW1hbmQgICovCi0gICAgICAg IGlmIChkaWFsZGNvbikgIG1ha2VzdHIoJmRpYWxkY29uLE5VTEwpOyAgLyogREMgT04gY29tbWFu ZCAqLwotICAgICAgICBpZiAoZGlhbGRjb2ZmKSBtYWtlc3RyKCZkaWFsZGNvZmYsTlVMTCk7IC8q IERDIE9GRiBjb21tYW5kICovCi0gICAgICAgIGlmIChkaWFsZWNvbikgIG1ha2VzdHIoJmRpYWxl Y29uLE5VTEwpOyAgLyogRUMgT04gY29tbWFuZCAqLwotICAgICAgICBpZiAoZGlhbGVjb2ZmKSBt YWtlc3RyKCZkaWFsZWNvZmYsTlVMTCk7IC8qIEVDIE9GRiBjb21tYW5kICovCi0gICAgICAgIGlm IChkaWFsaGNtZCkgIG1ha2VzdHIoJmRpYWxoY21kLE5VTEwpOyAgLyogSGFuZ3VwIGNvbW1hbmQg Ki8KLSAgICAgICAgaWYgKGRpYWxod2ZjKSAgbWFrZXN0cigmZGlhbGh3ZmMsTlVMTCk7ICAvKiBG bG93IGNvbnRyb2wuLi4gKi8KLSAgICAgICAgaWYgKGRpYWxzd2ZjKSAgbWFrZXN0cigmZGlhbHN3 ZmMsTlVMTCk7ICAvKiAgKi8KLSAgICAgICAgaWYgKGRpYWxub2ZjKSAgbWFrZXN0cigmZGlhbG5v ZmMsTlVMTCk7ICAvKiAgKi8KLSAgICAgICAgaWYgKGRpYWx0b25lKSAgbWFrZXN0cigmZGlhbHRv bmUsTlVMTCk7ICAvKiBEaWFsaW5nIG1ldGhvZCAqLwotICAgICAgICBpZiAoZGlhbHB1bHNlKSBt YWtlc3RyKCZkaWFscHVsc2UsTlVMTCk7IC8qICAqLwotICAgICAgICBpZiAoZGlhbG5hbWUpICBt YWtlc3RyKCZkaWFsbmFtZSxOVUxMKTsgIC8qIE1vZGVtIG5hbWUgKi8KLSAgICAgICAgaWYgKGRp YWxhYW9uKSAgbWFrZXN0cigmZGlhbGFhb24sTlVMTCk7ICAvKiBBdXRvYW5zd2VyIE9uICovCi0g ICAgICAgIGlmIChkaWFsYWFvZmYpIG1ha2VzdHIoJmRpYWxhYW9mZixOVUxMKTsgLyogQXV0b2Fu c3dlciBPZmYgKi8KLSAgICAgICAgaWYgKGRpYWx4MykgICAgbWFrZXN0cigmZGlhbHgzLE5VTEwp OyAgICAvKiBJZ25vcmUgZGlhbHRvbmUgKi8KLSAgICAgICAgaWYgKGRpYWxzcG9uKSAgbWFrZXN0 cigmZGlhbHNwb24sTlVMTCk7ICAvKiBTcGVha2VyIE9uICovCi0gICAgICAgIGlmIChkaWFsc3Bv ZmYpIG1ha2VzdHIoJmRpYWxzcG9mZixOVUxMKTsgLyogU3BlYWtlciBPZmYgKi8KLSAgICAgICAg aWYgKGRpYWx2b2wxKSAgbWFrZXN0cigmZGlhbHZvbDEsTlVMTCk7ICAvKiBMb3cgdm9sdW1lICov Ci0gICAgICAgIGlmIChkaWFsdm9sMikgIG1ha2VzdHIoJmRpYWx2b2wyLE5VTEwpOyAgLyogTWVk aXVtIHZvbHVtZSAqLwotICAgICAgICBpZiAoZGlhbHZvbDMpICBtYWtlc3RyKCZkaWFsdm9sMyxO VUxMKTsgIC8qIEhpZ2ggdm9sdW1lICovCi0gICAgICAgIGlmIChkaWFsaW5pMikgIG1ha2VzdHIo JmRpYWxpbmkyLE5VTEwpOyAgLyogSW5pdCBzdHJpbmcgMiAqLwotICAgIH0KLSAgICBpZiAoYXV0 b2Zsb3cpICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXliZSBjaGFuZ2UgZmxvdyBjb250cm9s ICovCi0gICAgICBzZXRmbG93KCk7Ci0KLSNpZm5kZWYgTUlOSURJQUwKLSNpZmRlZiBPTERUQkNP REUKLSAgICB0Ym1vZGVsID0gMDsgICAgICAgICAgIC8qIElmIGl0J3MgYSBUZWxlYml0LCB3ZSBk b24ndCBrbm93IHRoZSBtb2RlbCB5ZXQgKi8KLSNlbmRpZiAvKiBPTERUQkNPREUgKi8KLSNlbmRp ZiAvKiBNSU5JRElBTCAqLwotfQotCi0jaWZkZWYgQ09NTUVOVAotLyogTm90IGltcGxlbWVudGVk IHlldCAqLwotaW50Ci1zZXRhbnN3ZXIoKSB7Ci0gICAgaW50IHgsIHk7Ci0gICAgZXh0ZXJuIGlu dCBhbnNfY2lkLCBhbnNfcmluZzsKLSAgICBpZiAoKHggPSBjbWtleShhbnN3ZXJ0YWIsbmFuc3dl cnRhYiwiIiwiIix4eHN0cmluZykpIDwgMCkKLSAgICAgIHJldHVybih4KTsKLSAgICBzd2l0Y2gg KHgpIHsKLSAgICAgIGNhc2UgWFlBX0NJRDoKLSAgICAgICAgcmV0dXJuKHNldG9uKCZhbnNfY2lk KSk7Ci0gICAgICBjYXNlIFhZQV9STkc6Ci0gICAgICAgIHkgPSBjbW51bSgiSG93IG1hbnkgcmlu Z3MgYmVmb3JlIGFuc3dlcmluZyIsIjEiLDEwLCZ4LHh4c3RyaW5nKTsKLSAgICAgICAgeSA9IHNl dG51bSgmYW5zX3JpbmdzLHgseSwyNTQpOwotICAgICAgICByZXR1cm4oeSk7Ci0gICAgfQotfQot I2VuZGlmIC8qIENPTU1FTlQgKi8KLQotaW50Ci1zZXRtb2RlbSgpIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogU0VUIE1PREVNICovCi0KLSAgICBpbnQgeCwgeSwgejsKLSAgICBsb25n IHp6OwotICAgIHN0cnVjdCBGREIgazEsIGsyOwotICAgIGV4dGVybiBpbnQgbWRtc2V0OwotCi0g ICAgY21mZGJpKCZrMSxfQ01LRVksCi0gICAgICAgICAgICJNb2RlbSBwYXJhbWV0ZXIiLCIiLCIi LG5zZXRtZG0sIDAsIHh4c3RyaW5nLCBzZXRtZG0sICZrMik7Ci0gICAgY21mZGJpKCZrMixfQ01L RVksIiIsIiIsIiIsbm1kbSwwLHh4c3RyaW5nLG1kbXRhYixOVUxMKTsKLSAgICB4ID0gY21mZGIo JmsxKTsKLSAgICBpZiAoeCA8IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciAq LwotICAgICAgICBpZiAoeCA9PSAtMiB8fCB4ID09IC05KQotICAgICAgICAgIHByaW50ZigiP05v IGtleXdvcmRzIG1hdGNoOiBcIiVzXCJcbiIsYXRtYnVmKTsKLSAgICAgICAgcmV0dXJuKHgpOwot ICAgIH0KLSAgICB5ID0gY21yZXN1bHQubnJlc3VsdDsgICAgICAgICAgICAgICAvKiBLZXl3b3Jk IHZhbHVlICovCi0gICAgaWYgKGNtcmVzdWx0LmZkYmFkZHIgPT0gJmsyKSB7ICAgICAgLyogTW9k ZW0tdHlwZSBrZXl3b3JkIHRhYmxlICovCi0gICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkK LSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIHVzZXJtZG0gPSAwOwotICAgICAgICBpbml0 bWRtKGNtcmVzdWx0Lm5yZXN1bHQpOyAgICAgIC8qIFNldCB0aGUgbW9kZW0gdHlwZS4gKi8KLSAg ICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsgICAgICAgICAgICAvKiBEb25lICovCi0gICAgfQot ICAgIHN3aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgeyAgICAgICAgIC8qIFNFVCBNT0RFTSBrZXl3 b3JkIHRhYmxlLiAqLwotI2lmZGVmIE1ETUhVUAotICAgICAgY2FzZSBYWURNSFU6ICAgICAgICAg ICAgICAgICAgICAgIC8qIERJQUwgTU9ERU0tSEFOR1VQICovCi0gICAgICAgIGlmICgoeSA9IGNt a2V5KG1kbWhhbmcsNCwiaG93IHRvIGhhbmcgdXAgbW9kZW0iLAotICAgICAgICAgICAgICAgICAg ICAgICAibW9kZW0tY29tbWFuZCIsIHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih5 KTsKLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsK LSAgICAgICAgZGlhbG1odSA9IHk7Ci0jaWZkZWYgQ09NTUVOVAotLyogTm9wZSwgSSBmaXhlZCBp dCAoMjAwMSAxMSAwOCkgKi8KLSNpZmRlZiBDS19TQ09WNQotICAgICAgICBpZiAoZGlhbG1odSA9 PSAwICYmICFxdWlldCkgewotICAgICAgICAgICAgcHJpbnRmKAotIlxuIFdBUk5JTkc6IFJTLTIz MiBzaWduYWwgc2FtcGxpbmcgYW5kIG1hbmlwdWxhdGlvbiBkbyBub3Qgd29ya1xuIgotICAgICAg ICAgICAgICAgICAgICApOwotICAgICAgICAgICAgcHJpbnRmKAotIiBpbiB0aGUgc3RhbmRhcmQg U0NPIE9TUjUgc2VyaWFsIGkvbyBkcml2ZXJzLiAgU0VUIE1PREVNIEhBTkdVUC1NRVRIT0RcbiIK LSAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgcHJpbnRmKAotIiBNT0RFTS1DT01N QU5EIGlzIHJlY29tbWVuZGVkIGZvciBPU1I1LlxuXG4iCi0gICAgICAgICAgICAgICAgICAgICk7 Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS19TQ09WNSAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8K LSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSNlbmRpZiAvKiBNRE1IVVAgKi8KLQotICAg ICAgY2FzZSBYWURDQVA6Ci0gICAgICAgIHp6ID0gMEw7Ci0gICAgICAgIHkgPSAwOwotICAgICAg ICB3aGlsZSAoeSAhPSAtMykgewotICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkobWRtY2FwLG5t ZG1jYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FwYWJpbGl0eSBvZiBtb2RlbSIs ICIiLCB4eHN0cmluZykpIDwgMCkgewotICAgICAgICAgICAgICAgIGlmICh5ID09IC0zKQotICAg ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg ICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgenogfD0geTsKLSAg ICAgICAgfQotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgcmV0dXJu KHgpOwotICAgICAgICBkaWFsY2FwYXMgPSB6ejsKLSAgICAgICAgZGVidWcoRjEwMSwic2V0bW9k ZW0gYXV0b2Zsb3ciLCIiLGF1dG9mbG93KTsKLSAgICAgICAgZGVidWcoRjEwMSwic2V0bW9kZW0g ZmxvdyAxIiwiIixmbG93KTsKLSAgICAgICAgaWYgKGF1dG9mbG93KSAgICAgICAgICAgICAgICAg ICAvKiBNYXliZSBjaGFuZ2UgZmxvdyBjb250cm9sICovCi0gICAgICAgICAgc2V0ZmxvdygpOwot ICAgICAgICBkZWJ1ZyhGMTAxLCJzZXRtb2RlbSBmbG93IDIiLCIiLGZsb3cpOwotICAgICAgICBt ZG1zcGQgPSB6eiAmIENLRF9TQiA/IDAgOiAxOyAgIC8qIFNldCBNT0RFTSBTUEVFRC1NQVRDSElO RyBmcm9tIGl0LiAqLwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0gICAgICBjYXNl IFhZRE1BWDoKLSNpZmRlZiBUTl9DT01QT1JUCi0gICAgICAgIGlmIChuZXR3b3JrICYmIGlzdG5j b21wb3J0KCkpCi0gICAgICAgICAgeCA9IGNta2V5KHRuc3BkdGFiLG50bnNwZCxsaW5lLCIiLHh4 c3RyaW5nKTsKLSAgICAgICAgZWxzZQotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLSAgICAgICAg ICB4ID0gY21rZXkoc3BkdGFiLG5zcGQsbGluZSwiIix4eHN0cmluZyk7Ci0gICAgICAgIGlmICh4 IDwgMCkgewotICAgICAgICAgICAgaWYgKHggPT0gLTMpIHByaW50ZigiP3ZhbHVlIHJlcXVpcmVk XG4iKTsKLSAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKHkg PSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgZGlhbG1heCA9IChsb25nKSB4ICog MTBMOwotICAgICAgICBpZiAoZGlhbG1heCA9PSA3MCkgZGlhbG1heCA9IDc1OwotICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0gICAgICBjYXNlIFhZRFNUUjogICAgICAgICAgICAgICAg ICAgICAgLyogVGhlc2UgbW92ZWQgZnJvbSBTRVQgRElBTCAqLwotICAgICAgY2FzZSBYWUREQzoK LSAgICAgIGNhc2UgWFlERUM6Ci0gICAgICBjYXNlIFhZREVTQzoKLSAgICAgIGNhc2UgWFlERkM6 Ci0gICAgICBjYXNlIFhZREtTUDoKLSAgICAgIGNhc2UgWFlEU1BEOgotICAgICAgY2FzZSBYWURE SUE6Ci0gICAgICAgIHJldHVybihzZXRkaWFsKHgpKTsKLQotICAgICAgY2FzZSBYWURUWVA6Ci0g ICAgICAgIGlmICgoeSA9IGNta2V5KG1kbXRhYixubWRtLCJtb2RlbSB0eXBlIiwibm9uZSIsIHh4 c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgaWYgKHkgPT0gZGlh bHVkdCkgeyAgICAgICAgICAgICAvKiBVc2VyLWRlZmluZWQgbW9kZW0gdHlwZSAqLwotICAgICAg ICAgICAgaWYgKCh4ID0gY21rZXkobWRtdGFiLG5tZG0sImJhc2VkIG9uIGV4aXN0aW5nIG1vZGVt IHR5cGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInVua25vd24iLCB4eHN0cmluZykp IDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgo eiA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeik7Ci0gICAgICAgIHVzZXJtZG0g PSAwOwotICAgICAgICB1c2VybWRtID0gKHkgPT0gZGlhbHVkdCkgPyB4IDogMDsKLSAgICAgICAg aW5pdG1kbSh5KTsKLSAgICAgICAgbWRtc2V0ID0gKG1kbXR5cCA+IDApOwotICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IDEpOwotCi0gICAgICBjYXNlIFhZRE5BTToKLSAgICAgICAgcmV0dXJuKGRp YWxzdHIoJmRpYWxuYW1lLCJEZXNjcmlwdGl2ZSBuYW1lIGZvciBtb2RlbSIpKTsKLQotICAgICAg Y2FzZSBYWURNQ0Q6ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBNT0RFTSBDQVJSSUVSLVdB VENIICovCi0gICAgICAgIHJldHVybihzZXRkY2QoKSk7Ci0KLSAgICAgIGNhc2UgWFlEU1BLOiAg ICAgICAgICAgICAgICAgICAgICAvKiBTRVQgTU9ERU0gU1BFQUtFUiAqLwotICAgICAgICByZXR1 cm4oc2V0b24oJm1kbXNwaykpOwotCi0gICAgICBjYXNlIFhZRFZPTDogICAgICAgICAgICAgICAg ICAgICAgLyogU0VUIE1PREVNIFZPTFVNRSAqLwotICAgICAgICBpZiAoKHggPSBjbWtleSh2b2x0 YWIsMywiIiwibWVkaXVtIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0g ICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeSk7Ci0gICAg ICAgIG1kbXZvbCA9IHg7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0KLSAgICAgIGRl ZmF1bHQ6Ci0gICAgICAgIHByaW50ZigiVW5leHBlY3RlZCBTRVQgTU9ERU0gcGFyYW1ldGVyXG4i KTsKLSAgICAgICAgcmV0dXJuKC05KTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbnQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBTZXQgRElBTCBjb21tYW5kIG9wdGlvbnMgKi8KLXNldGRp YWwoeSkgaW50IHk7IHsKLSAgICBpbnQgeCA9IDAsIHogPSAwOwotICAgIGNoYXIgKnMgPSBOVUxM OwotCi0gICAgaWYgKHkgPCAwKQotICAgICAgaWYgKCh5ID0gY21rZXkoZGlhbHRhYixuZGlhbCwi IiwiIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgcmV0dXJuKHkpOwotICAgIHN3aXRjaCAoeSkg ewotICAgICAgY2FzZSBYWURIVVA6ICAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwgSEFOR1VQ ICovCi0gICAgICAgIHJldHVybihzZXRvbigmZGlhbGhuZykpOwotICAgICAgY2FzZSBYWURJTkk6 ICAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwgSU5JVC1TVFJJTkcgKi8KLSAgICAgICAgcmV0 dXJuKGRpYWxzdHIoJmRpYWxpbmksIk1vZGVtIGluaXRpYWxpemF0aW9uIHN0cmluZyIpKTsKLSAg ICAgIGNhc2UgWFlETlBSOiAgICAgICAgICAgICAgICAgICAgICAvKiBESUFMIFBSRUZJWCAqLwot ICAgICAgICByZXR1cm4oZGlhbHN0cigmZGlhbG5wciwiVGVsZXBob25lIG51bWJlciBwcmVmaXgi KSk7Ci0gICAgICBjYXNlIFhZRERJQTogICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBESUFM LUNPTU1BTkQgKi8KLSAgICAgICAgeCA9IGNtdHh0KCJEaWFsaW5nIGNvbW1hbmQgZm9yIG1vZGVt LFxuXAotIGluY2x1ZGUgXCIlc1wiIHRvIHN0YW5kIGZvciBwaG9uZSBudW1iZXIsXG5cCi0gZm9y IGV4YW1wbGUsIFwic2V0IGRpYWwgZGlhbC1jb21tYW5kIEFURFQlc1xcMTNcIiIsCi0gICAgICAg ICAgICAgICAgICAiIiwKLSAgICAgICAgICAgICAgICAgICZzLAotICAgICAgICAgICAgICAgICAg eHhzdHJpbmcpOwotICAgICAgICBpZiAoeCA8IDAgJiYgeCAhPSAtMykgICAgICAgICAgIC8qIEhh bmRsZSBwYXJzZSBlcnJvcnMgKi8KLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIHMgPSBi cnN0cmlwKHMpOyAgICAgICAgICAgICAgICAgLyogU3RyaXAgYnJhY2VzIG9yIHF1b3RlcyAqLwot ICAgICAgICB5ID0geCA9IHN0cmxlbihzKTsgICAgICAgICAgICAgIC8qIEdldCBsZW5ndGggb2Yg dGV4dCAqLwotICAgICAgICBpZiAoeSA+IDApIHsgICAgICAgICAgICAgICAgICAgIC8qIElmIHRo ZXJlIGlzIGFueSB0ZXh0IChsZWZ0KSwgKi8KLSAgICAgICAgICAgIGZvciAoeCA9IDA7IHggPCB5 OyB4KyspIHsgICAvKiBtYWtlIHN1cmUgdGhleSBpbmNsdWRlZCAiJXMiICovCi0gICAgICAgICAg ICAgICAgaWYgKHNbeF0gIT0gJyUnKSBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAoc1t4 KzFdID09ICdzJykgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoeCA9PSB5 KSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKAotIj9EaWFsLWNvbW1hbmQgbXVzdCBjb250YWlu IFwiJWNzXCIgZm9yIHBob25lIG51bWJlci5cbiIsJyUnKTsKLSAgICAgICAgICAgICAgICByZXR1 cm4oLTkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChkaWFsY21kKSB7 ICAgICAgICAgICAgICAgICAgLyogRnJlZSBhbnkgcHJldmlvdXMgc3RyaW5nLiAqLwotICAgICAg ICAgICAgZnJlZShkaWFsY21kKTsKLSAgICAgICAgICAgIGRpYWxjbWQgPSAoY2hhciAqKSAwOwot ICAgICAgICB9Ci0gICAgICAgIGlmICh5ID4gMCkgewotICAgICAgICAgICAgZGlhbGNtZCA9IG1h bGxvYyh5ICsgMSk7ICAgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciBpdCAqLwotICAgICAgICAgICAg aWYgKGRpYWxjbWQpCi0gICAgICAgICAgICAgIHN0cmNweShkaWFsY21kLHMpOyAgICAgICAgLyog YW5kIG1ha2UgYSBzYWZlIGNvcHkuICovCi0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSAxKTsKLSNpZm5kZWYgTk9YRkVSCi0gICAgICBjYXNlIFhZREtTUDogICAgICAgICAgICAg ICAgICAgICAgLyogRElBTCBLRVJNSVQtU1BPT0YgKi8KLSAgICAgICAgcmV0dXJuKHNldG9uKCZk aWFsa3NwKSk7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0gICAgICBjYXNlIFhZRFRNTzogICAgICAg ICAgICAgICAgICAgICAgLyogRElBTCBUSU1FT1VUICovCi0gICAgICAgIHkgPSBjbW51bSgiU2Vj b25kcyB0byB3YWl0IGZvciBjYWxsIGNvbXBsZXRpb24iLCIwIiwxMCwmeCx4eHN0cmluZyk7Ci0g ICAgICAgIGlmICh5IDwgMCkgcmV0dXJuKHkpOwotICAgICAgICB5ID0gY21udW0oIktlcm1pdC9t b2RlbSB0aW1lb3V0IGRpZmZlcmVudGlhbCIsIjEwIiwxMCwmeix4eHN0cmluZyk7Ci0gICAgICAg IGlmICh5IDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCi0g ICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICBkaWFsdG1vID0geDsKLSAgICAgICAgbWRtd2Fp dGQgPSB6OwotICAgICAgY2FzZSBYWURFU0M6ICAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwg RVNDQVBFLUNIQVJBQ1RFUiAqLwotICAgICAgICB5ID0gY21udW0oIkFTQ0lJIHZhbHVlIG9mIGNo YXJhY3RlciB0byBlc2NhcGUgYmFjayB0byBtb2RlbSIsCi0gICAgICAgICAgICAgICAgICAiNDMi LDEwLCZ4LHh4c3RyaW5nKTsKLSAgICAgICAgeSA9IHNldG51bSgmZGlhbGVzYyx4LHksMTI4KTsK LSAgICAgICAgaWYgKHkgPiAtMSAmJiBkaWFsZXNjIDwgMCkgICAgICAvKiBObyBlc2NhcGUgY2hh cmFjdGVyICovCi0gICAgICAgICAgZGlhbG1odSA9IDA7ICAgICAgICAgICAgICAgICAgLyogU28g bm8gaGFuZ3VwIGJ5IG1vZGVtIGNvbW1hbmQgKi8KLSAgICAgICAgcmV0dXJuKHkpOwotICAgICAg Y2FzZSBYWUREUFk6ICAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwgRElTUExBWSAqLwotICAg ICAgICByZXR1cm4oc2V0b24oJmRpYWxkcHkpKTsKLSAgICAgIGNhc2UgWFlEU1BEOiAgICAgICAg ICAgICAgICAgICAgICAvKiBESUFMIFNQRUVELU1BVENISU5HICovCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogdXNlZCB0byBiZSBzcGVlZC1jaGFuZ2luZyAqLwot ICAgICAgICBpZiAoKHkgPSBzZXRvbigmbWRtc3BkKSkgPCAwKSByZXR1cm4oeSk7Ci0jaWZkZWYg Q09NTUVOVAotICAgICAgICBtZG1zcGQgPSAxIC0gbWRtc3BkOyAgICAgICAgICAgIC8qIHNvIGhl cmUgd2UgcmV2ZXJzZSB0aGUgbWVhbmluZyAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgIGNhc2UgWFlETU5QOiAgICAgICAgICAgICAg ICAgICAgICAvKiBESUFMIE1OUC1FTkFCTEUgKi8KLSAgICAgIGNhc2UgWFlERUM6ICAgICAgICAg ICAgICAgICAgICAgICAvKiBESUFMIEVSUk9SLUNPUlJFQ1RJT04gKi8KLSAgICAgICAgeCA9IHNl dG9uKCZkaWFsZWMpOwotICAgICAgICBpZiAoeCA+IDApCi0gICAgICAgICAgaWYgKCFkaWFsZWMp IGRpYWxkYyA9IDA7ICAgICAgLyogT0ZGIGFsc28gdHVybnMgb2ZmIGNvbXByZXNzaW9uICovCi0g ICAgICAgIHJldHVybih4KTsKLQotICAgICAgY2FzZSBYWUREQzogICAgICAgICAgICAgICAgICAg ICAgIC8qIERJQUwgQ09NUFJFU1NJT04gKi8KLSAgICAgICAgeCA9IHNldG9uKCZkaWFsZGMpOwot ICAgICAgICBpZiAoeCA+IDApCi0gICAgICAgICAgaWYgKGRpYWxkYykgZGlhbGVjID0gMTsgICAg ICAgLyogT04gYWxzbyB0dXJucyBvbiBlcnJvciBjb3JyZWN0aW9uICovCi0gICAgICAgIHJldHVy bih4KTsKLQotI2lmZGVmIE1ETUhVUAotICAgICAgY2FzZSBYWURNSFU6ICAgICAgICAgICAgICAg ICAgICAgIC8qIERJQUwgTU9ERU0tSEFOR1VQICovCi0gICAgICAgIHJldHVybihzZXRvbigmZGlh bG1odSkpOwotI2VuZGlmIC8qIE1ETUhVUCAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgICBjYXNl IFhZRERJUjogICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBESVJFQ1RPUlkgKHplcm8gb3Ig bW9yZSkgKi8KLSAgICAgICAgcmV0dXJuKHBhcnNkaXIoMCkpOyAgICAgICAgICAgICAvKiAwIG1l YW5zIERJQUwgKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0gICAgICBjYXNlIFhZRFNUUjogICAg ICAgICAgICAgICAgICAgICAgLyogRElBTCBTVFJJTkcgKi8KLSAgICAgICAgaWYgKCh5ID0gY21r ZXkobWRtY21kLG5tZG1jbWQsIiIsIiIseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKLSAgICAg ICAgc3dpdGNoICh5KSB7Ci0gICAgICAgICAgY2FzZSBYWURTX0FOOiAgICAgICAgICAgICAgICAg LyogQXV0b2Fuc3dlciBPTi9PRkYgKi8KLSAgICAgICAgICBjYXNlIFhZRFNfREM6ICAgICAgICAg ICAgICAgICAvKiBEYXRhIGNvbXByZXNzaW9uIE9OL09GRiAqLwotICAgICAgICAgIGNhc2UgWFlE U19FQzogICAgICAgICAgICAgICAgIC8qIEVycm9yIGNvcnJlY3Rpb24gT04vT0ZGICovCi0gICAg ICAgICAgICBpZiAoKHggPSBjbWtleShvbm9mZiwyLCIiLCJvbiIseHhzdHJpbmcpKSA8IDApCi0g ICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgIHNwcmludGYodG1wYnVmLCJNb2Rl bSdzIGNvbW1hbmQgdG8gJXNhYmxlICVzIiwgLyogU0FGRSAqLwotICAgICAgICAgICAgICAgICAg ICB4ID8gImVuIiA6ICJkaXMiLAotICAgICAgICAgICAgICAgICAgICAoeSA9PSBYWURTX0RDKSA/ ICJjb21wcmVzc2lvbiIgOgotICAgICAgICAgICAgICAgICAgICAoKHkgPT0gWFlEU19FQykgPyAi ZXJyb3ItY29ycmVjdGlvbiIgOgotICAgICAgICAgICAgICAgICAgICAiYXV0b2Fuc3dlciIpCi0g ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBpZiAoeCkgewotICAgICAgICAgICAg ICAgIGlmICh5ID09IFhZRFNfREMpCi0gICAgICAgICAgICAgICAgICByZXR1cm4oZGlhbHN0cigm ZGlhbGRjb24sdG1wYnVmKSk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoeSA9PSBYWURTX0VD KQotICAgICAgICAgICAgICAgICAgcmV0dXJuKGRpYWxzdHIoJmRpYWxlY29uLHRtcGJ1ZikpOwot ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHJldHVybihkaWFsc3RyKCZk aWFsYWFvbix0bXBidWYpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg aWYgKHkgPT0gWFlEU19EQykKLSAgICAgICAgICAgICAgICAgIHJldHVybihkaWFsc3RyKCZkaWFs ZGNvZmYsdG1wYnVmKSk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoeSA9PSBYWURTX0VDKQot ICAgICAgICAgICAgICAgICAgcmV0dXJuKGRpYWxzdHIoJmRpYWxlY29mZix0bXBidWYpKTsKLSAg ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICByZXR1cm4oZGlhbHN0cigmZGlh bGFhb2ZmLHRtcGJ1ZikpOwotICAgICAgICAgICAgfQotICAgICAgICAgIGNhc2UgWFlEU19IVTog ICAgICAgICAgICAgICAgIC8qICAgIGhhbmd1cCBjb21tYW5kICovCi0gICAgICAgICAgICByZXR1 cm4oZGlhbHN0cigmZGlhbGhjbWQsIk1vZGVtJ3MgaGFuZ3VwIGNvbW1hbmQiKSk7Ci0gICAgICAg ICAgY2FzZSBYWURTX0hXOiAgICAgICAgICAgICAgICAgLyogICAgaHdmYyAqLwotICAgICAgICAg ICAgcmV0dXJuKGRpYWxzdHIoJmRpYWxod2ZjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg Ik1vZGVtJ3MgY29tbWFuZCB0byBlbmFibGUgaGFyZHdhcmUgZmxvdyBjb250cm9sIikpOwotICAg ICAgICAgIGNhc2UgWFlEU19JTjogICAgICAgICAgICAgICAgIC8qICAgIGluaXQgKi8KLSAgICAg ICAgICAgIHJldHVybihkaWFsc3RyKCZkaWFsaW5pLCJNb2RlbSdzIGluaXRpYWxpemF0aW9uIHN0 cmluZyIpKTsKLSAgICAgICAgICBjYXNlIFhZRFNfTkY6ICAgICAgICAgICAgICAgICAvKiAgICBu byBmbG93IGNvbnRyb2wgKi8KLSAgICAgICAgICAgIHJldHVybihkaWFsc3RyKCZkaWFsbm9mYywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb2RlbSdzIGNvbW1hbmQgdG8gZGlzYWJsZSBs b2NhbCBmbG93IGNvbnRyb2wiKSk7Ci0gICAgICAgICAgY2FzZSBYWURTX1BYOiAgICAgICAgICAg ICAgICAgLyogICAgcHJlZml4ICovCi0gICAgICAgICAgICByZXR1cm4oZGlhbHN0cigmZGlhbG5w ciwiVGVsZXBob25lIG51bWJlciBwcmVmaXggZm9yIGRpYWxpbmciKSk7Ci0gICAgICAgICAgY2Fz ZSBYWURTX1NXOiAgICAgICAgICAgICAgICAgLyogICAgc3dmYyAqLwotICAgICAgICAgICAgcmV0 dXJuKGRpYWxzdHIoJmRpYWxzd2ZjLAotICAgICAgICAgICAgICAgICAgICJNb2RlbSdzIGNvbW1h bmQgdG8gZW5hYmxlIGxvY2FsIHNvZnR3YXJlIGZsb3cgY29udHJvbCIpKTsKLSAgICAgICAgICBj YXNlIFhZRFNfRFQ6ICAgICAgICAgICAgICAgICAvKiAgICB0b25lIGRpYWxpbmcgKi8KLSAgICAg ICAgICAgIHJldHVybihkaWFsc3RyKCZkaWFsdG9uZSwKLSAgICAgICAgICAgICAgICAgICAiQ29t bWFuZCB0byBjb25maWd1cmUgbW9kZW0gZm9yIHRvbmUgZGlhbGluZyIpKTsKLSAgICAgICAgICBj YXNlIFhZRFNfRFA6ICAgICAgICAgICAgICAgICAvKiAgICBwdWxzZSBkaWFsaW5nICovCi0gICAg ICAgICAgICByZXR1cm4oZGlhbHN0cigmZGlhbHB1bHNlLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIkNvbW1hbmQgdG8gY29uZmlndXJlIG1vZGVtIGZvciBwdWxzZSBkaWFsaW5nIikpOwot ICAgICAgICAgIGNhc2UgWFlEU19NUzogICAgICAgICAgICAgICAgIC8qICAgIGRpYWwgbW9kZSBz dHJpbmcgKi8KLSAgICAgICAgICAgIHJldHVybihkaWFsc3RyKCZkaWFsbXN0ciwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAiQ29tbWFuZCB0byBlbnRlciBkaWFsIG1vZGUiKSk7Ci0gICAgICAg ICAgY2FzZSBYWURTX01QOiAgICAgICAgICAgICAgICAgLyogICAgZGlhbCBtb2RlIHByb21wdCAq LwotICAgICAgICAgICAgcmV0dXJuKGRpYWxzdHIoJmRpYWxtcHJtdCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICJNb2RlbSByZXNwb25zZSB1cG9uIGVudGVyaW5nIGRpYWwgbW9kZSIpKTsK LSAgICAgICAgICBjYXNlIFhZRFNfU1A6ICAgICAgICAgICAgICAgICAvKiBTUEVBS0VSIE9GRiAq LwotICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkg PCAwKSByZXR1cm4oeCk7Ci0gICAgICAgICAgICBpZiAoeCkKLSAgICAgICAgICAgICAgcmV0dXJu KGRpYWxzdHIoJmRpYWxzcG9uLCJDb21tYW5kIHRvIHR1cm4gbW9kZW0gc3BlYWtlciBvbiIpKTsK LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcmV0dXJuKGRpYWxzdHIoJmRpYWxzcG9m ZiwiQ29tbWFuZCB0byB0dXJuIG1vZGVtIHNwZWFrZXIgb2ZmIikpOwotCi0gICAgICAgICAgY2Fz ZSBYWURTX1ZPOiAgICAgICAgICAgICAgICAgLyogVk9MVU1FIExPVyAqLwotICAgICAgICAgICAg aWYgKCh4ID0gY21rZXkodm9sdGFiLDMsIiIsIm1lZGl1bSIseHhzdHJpbmcpKSA8IDApIHJldHVy bih4KTsKLSAgICAgICAgICAgIHN3aXRjaCAoeCkgewotICAgICAgICAgICAgICBjYXNlIDA6Ci0g ICAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICByZXR1cm4oZGlhbHN0cigmZGlh bHZvbDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbW1hbmQgZm9yIGxvdyBt b2RlbSBzcGVha2VyIHZvbHVtZSIpKTsKLSAgICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAg ICAgICAgIHJldHVybihkaWFsc3RyKCZkaWFsdm9sMiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICJDb21tYW5kIGZvciBtZWRpdW0gbW9kZW0gc3BlYWtlciB2b2x1bWUiKSk7Ci0KLSAgICAg ICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgICAgIHJldHVybihkaWFsc3RyKCZkaWFsdm9s MywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tbWFuZCBmb3IgaGlnaCBtb2Rl bSBzcGVha2VyIHZvbHVtZSIpKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg ICAgICByZXR1cm4oLTIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgY2FzZSBYWURTX0lE OiAgICAgICAgICAgICAgICAgLyogSUdOT1JFLURJQUxUT05FICovCi0gICAgICAgICAgICByZXR1 cm4oZGlhbHN0cigmZGlhbHgzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbW1hbmQg dG8gdGVsbCBtb2RlbSB0byBpZ25vcmUgZGlhbHRvbmUiKSk7Ci0KLSAgICAgICAgICBjYXNlIFhZ RFNfSTI6ICAgICAgICAgICAgICAgICAvKiBQUkVESUFMLUlOSVQgKi8KLSAgICAgICAgICAgIHJl dHVybihkaWFsc3RyKCZkaWFsaW5pMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb21t YW5kIHRvIHNlbmQgdG8gbW9kZW0ganVzdCBwcmlvciB0byBkaWFsaW5nIikpOwotCi0gICAgICAg ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHByaW50ZigiP1VuZXhwZWN0ZWQgU0VUIERJQUwgU1RS SU5HIHBhcmFtZXRlclxuIik7Ci0gICAgICAgIH0KLQotICAgICAgY2FzZSBYWURGQzogICAgICAg ICAgICAgICAgICAgICAgIC8qIERJQUwgRkxPVy1DT05UUk9MICovCi0gICAgICAgIGlmICgoeSA9 IGNta2V5KGRpYWxfZmMsNCwiIiwiYXV0byIseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKLSAg ICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIGRpYWxmYyA9 IHk7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0KLSAgICAgIGNhc2UgWFlETVRIOiB7 ICAgICAgICAgICAgICAgICAgICAvKiBESUFMIE1FVEhPRCAqLwotICAgICAgICBleHRlcm4gaW50 IGRpYWxtYXV0bzsKLSAgICAgICAgaWYgKCh5ID0gY21rZXkoZGlhbF9tLG5kaWFsX20sIiIsImRl ZmF1bHQiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgaWYg KCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgaWYgKHkg PT0gWFlETV9BKSB7ICAgICAgICAgICAgICAvKiBBVVRPICovCi0gICAgICAgICAgICBkaWFsbWF1 dG8gPSAxOyAgICAgICAgICAgICAgLyogbG9jYWwgY291bnRyeSBjb2RlLCBpZiBrbm93bi4gKi8K LSAgICAgICAgICAgIGRpYWxtdGggPSBYWURNX0Q7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg ICAgZGlhbG1hdXRvID0gMDsgICAgICAgICAgICAgICAgLyogdXNlIHRoZSBtZXRob2Qgc3BlY2lm aWVkICovCi0gICAgICAgICAgZGlhbG10aCA9IHk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu KHN1Y2Nlc3MgPSAxKTsKLSAgICAgIH0KLSAgICAgIGNhc2UgWFlEUlRNOgotICAgICAgICB5ID0g Y21udW0oIk51bWJlciBvZiB0aW1lcyB0byB0cnkgZGlhbGluZyBhIG51bWJlciIsCi0gICAgICAg ICAgICAgICAgICAiMSIsMTAsJngseHhzdHJpbmcpOwotCXogPSBzZXRudW0oJmRpYWxydHIseCx5 LC0xKTsKLQlpZiAoeiA+IC0xICYmIGRpYWxydHIgPCAwKSB7Ci0JICAgIHByaW50ZigiP1NvcnJ5 LCBuZWdhdGl2ZSBkaWFsIHJldHJpZXMgbm90IHZhbGlkOiAlZFxuIixkaWFscnRyKTsKLQkgICAg cmV0dXJuKC05KTsKLQl9Ci0gICAgICAgIHJldHVybih6KTsKLQotICAgICAgY2FzZSBYWURJTlQ6 Ci0gICAgICAgIHkgPSBjbW51bSgiU2Vjb25kcyB0byB3YWl0IGJldHdlZW4gcmVkaWFsIGF0dGVt cHRzIiwKLSAgICAgICAgICAgICAgICAgICIzMCIsMTAsJngseHhzdHJpbmcpOwotICAgICAgICB6 ID0gc2V0bnVtKCZkaWFsaW50LHgseSwtMSk7Ci0JaWYgKHogPiAtMSAmJiBkaWFsaW50IDwgMCkg ewotCSAgICBwcmludGYoIj9Tb3JyeSwgbmVnYXRpdmUgZGlhbCBpbnRlcnZhbCBub3QgdmFsaWQ6 ICVkXG4iLGRpYWxpbnQpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLSAgICAgICAgcmV0dXJuKHop OwotCi0gICAgICBjYXNlIFhZRExBQzogICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBBUkVB LUNPREUgKi8KLSAgICAgICAgaWYgKCh4ID0gZGlhbHN0cigmZGlhbGxhYywiQXJlYSBjb2RlIHlv dSBhcmUgY2FsbGluZyBmcm9tIikpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAg IGlmIChkaWFsbGFjKSB7Ci0gICAgICAgICAgICBpZiAoIXJkaWdpdHMoZGlhbGxhYykpIHsKLSAg ICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgYXJlYSBjb2RlIG11c3QgYmUgbnVtZXJpY1xu Iik7Ci0gICAgICAgICAgICAgICAgaWYgKCpkaWFsbGFjID09ICcoJykKLSAgICAgICAgICAgICAg ICAgIHByaW50ZigiKHBsZWFzZSBvbWl0IHRoZSBwYXJlbnRoZXNlcylcbiIpOwotICAgICAgICAg ICAgICAgIGlmICgqZGlhbGxhYyA9PSAnLycpCi0gICAgICAgICAgICAgICAgICBwcmludGYoIihu byBzbGFzaGVzLCBwbGVhc2UpXG4iKTsKLSAgICAgICAgICAgICAgICBpZiAoZGlhbGxhYykgZnJl ZShkaWFsbGFjKTsKLSAgICAgICAgICAgICAgICBkaWFsbGFjID0gTlVMTDsKLSAgICAgICAgICAg ICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVy bih4KTsKLQotICAgICAgY2FzZSBYWURDTkY6ICAgICAgICAgICAgICAgICAgICAgIC8qIENPTkZJ Uk1BVElPTiAqLwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZkaWFsY25mKSk7Ci0K LSAgICAgIGNhc2UgWFlEQ1ZUOiAgICAgICAgICAgICAgICAgICAgICAvKiBDT05WRVJULURJUkVD VE9SWSAqLwotICAgICAgICBpZiAoKHkgPSBjbWtleShkY252dGFiLDMsIiIsImFzayIseHhzdHJp bmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICBpZiAoKHggPSBjbWNmbSgp KSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBkaWFsY3Z0ID0geTsKLSAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQotICAgICAgY2FzZSBYWURMQ0M6ICAgICAgICAgICAg ICAgICAgICAgIC8qIERJQUwgQ09VTlRSWS1DT0RFICovCi0gICAgICAgIHggPSBkaWFsc3RyKCZk aWFsbGNjLCJDb3VudHJ5IGNvZGUgeW91IGFyZSBjYWxsaW5nIGZyb20iKTsKLSAgICAgICAgaWYg KHggPCAxKSByZXR1cm4oeCk7Ci0gICAgICAgIGlmIChkaWFsbGNjKSB7Ci0gICAgICAgICAgICBp ZiAoIXJkaWdpdHMoZGlhbGxjYykpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwg Y291bnRyeSBjb2RlIG11c3QgYmUgbnVtZXJpY1xuIik7Ci0gICAgICAgICAgICAgICAgaWYgKCpk aWFsbGNjID09ICcrJykKLSAgICAgICAgICAgICAgICAgIHByaW50ZigiKHBsZWFzZSBvbWl0IHRo ZSBwbHVzIHNpZ24pXG4iKTsKLSAgICAgICAgICAgICAgICBpZiAoZGlhbGxjYykgZnJlZShkaWFs bGNjKTsKLSAgICAgICAgICAgICAgICBkaWFsbGNjID0gTlVMTDsKLSAgICAgICAgICAgICAgICBy ZXR1cm4oLTkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFzdHJjbXAoZGlhbGxj YywiMSIpKSB7IC8qIFNldCBkZWZhdWx0cyBmb3IgVVNBIGFuZCBDYW5hZGEgKi8KLSAgICAgICAg ICAgICAgICBpZiAoIWRpYWxsZHApICAgICAgICAgICAvKiBMb25nLWRpc3RhbmNlIHByZWZpeCAq LwotICAgICAgICAgICAgICAgICAgbWFrZXN0cigmZGlhbGxkcCwiMSIpOwotICAgICAgICAgICAg ICAgIGlmICghZGlhbGl4cCkgICAgICAgICAgIC8qIEludGVybmF0aW9uYWwgZGlhbGluZyBwcmVm aXggKi8KLSAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmRpYWxpeHAsIjAxMSIpOwotICAgICAg ICAgICAgICAgIGlmIChudG9sbGZyZWUgPT0gMCkgeyAgIC8qIFRvbGwtZnJlZSBhcmVhIGNvZGVz ICovCi0gICAgICAgICAgICAgICAgICAgIGlmICgoZGlhbHRmY1swXSA9IG1hbGxvYyg0KSkpIHsK LSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweShkaWFsdGZjWzBdLCI4MDAiKTsgLyogMTk3 MC1zb21ldGhpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIG50b2xsZnJlZSsrOwotICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKChkaWFsdGZjWzFdID0gbWFsbG9jKDQpKSkgewotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweShkaWFsdGZjWzFdLCI4ODgiKTsgLyogMTk5 NiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG50b2xsZnJlZSsrOwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmICgoZGlhbHRmY1syXSA9IG1hbGxvYyg0KSkpIHsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KGRpYWx0ZmNbMl0sIjg3NyIpOyAvKiA1 IEFwcmlsIDE5OTggKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnRvbGxmcmVl Kys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZGlhbHRmY1szXSA9IG1h bGxvYyg0KSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweShk aWFsdGZjWzNdLCI4NjYiKTsgLyogMjAwMD8gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG50b2xsZnJlZSsrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgIGlmICghZGlhbHRmcCkgICAgICAgICAgIC8qIFRvbGwtZnJlZSBkaWFsaW5nIHByZWZpeCAq LwotICAgICAgICAgICAgICAgICAgbWFrZXN0cigmZGlhbHRmcCwiMSIpOwotI2lmZGVmIENPTU1F TlQKLS8qIFRoZSB0aW1lIGZvciB0aGlzIGlzIHBhc3QgKi8KLSAgICAgICAgICAgIH0gZWxzZSBp ZiAoIXN0cmNtcChkaWFsbGNjLCIzNTgiKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAoKGlu dCkgc3RyY21wKHp6bmRhdGUoKSwiMTk5NjEwMTEiKSA+IDApCi0gICAgICAgICAgICAgICAgICAg ICAgICkgeyAgICAgICAgICAgICAgLyogRmlubGFuZCAqLwotICAgICAgICAgICAgICAgIGlmICgh ZGlhbGxkcCkgICAgICAgICAgIC8qIExvbmctZGlzdGFuY2UgcHJlZml4ICovCi0gICAgICAgICAg ICAgICAgICBtYWtlc3RyKCZkaWFsbGRwLCI5Iik7Ci0gICAgICAgICAgICAgICAgaWYgKCFkaWFs aXhwKSAgICAgICAgICAgLyogSW50ZXJuYXRpb25hbCBkaWFsaW5nIHByZWZpeCAqLwotICAgICAg ICAgICAgICAgICAgbWFrZXN0cigmZGlhbGl4cCwiOTkwIik7Ci0jZW5kaWYgLyogQ09NTUVOVCAq LwotICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIEV2ZXJ5d2hlcmUg ZWxzZSAuLi4gKi8KLSAgICAgICAgICAgICAgICBpZiAoIWRpYWxsZHApIHsKLSAgICAgICAgICAg ICAgICAgICAgaWYgKChkaWFsbGRwID0gbWFsbG9jKDQpKSkKLSAgICAgICAgICAgICAgICAgICAg ICBzdHJjcHkoZGlhbGxkcCwiMCIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICBpZiAoIWRpYWxpeHApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChkaWFsaXhwID0gbWFs bG9jKDQpKSkKLSAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkoZGlhbGl4cCwiMDAiKTsKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXN0cmNtcChk aWFsbGNjLCIzMyIpKSAgLyogRnJhbmNlICovCi0gICAgICAgICAgICAgIGRpYWxmbGQgPSAxOyAg ICAgICAgICAgICAgLyogTG9uZy1kaXN0YW5jZSBkaWFsaW5nIGlzIGZvcmNlZCAqLwotICAgICAg ICB9Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0KLSAgICAgIGNhc2UgWFlESVhQOiAg ICAgICAgICAgICAgICAgICAgICAvKiBESUFMIElOVEwtUFJFRklYICovCi0gICAgICAgIHJldHVy bihkaWFsc3RyKCZkaWFsaXhwLCJJbnRlcm5hdGlvbmFsIGRpYWxpbmcgcHJlZml4IikpOwotCi0g ICAgICBjYXNlIFhZRElYUzogICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBJTlRMLVNVRkZJ WCAqLwotICAgICAgICByZXR1cm4oZGlhbHN0cigmZGlhbGl4cywiSW50ZXJuYXRpb25hbCBkaWFs aW5nIHN1ZmZpeCIpKTsKLQotICAgICAgY2FzZSBYWURMRFA6ICAgICAgICAgICAgICAgICAgICAg IC8qIERJQUwgTEQtUFJFRklYICovCi0gICAgICAgIHJldHVybihkaWFsc3RyKCZkaWFsbGRwLCJM b25nLWRpc3RhbmNlIGRpYWxpbmcgcHJlZml4IikpOwotCi0gICAgICBjYXNlIFhZRExEUzogICAg ICAgICAgICAgICAgICAgICAgLyogRElBTCBMRC1TVUZGSVggKi8KLSAgICAgICAgcmV0dXJuKGRp YWxzdHIoJmRpYWxsZHMsIkxvbmctZGlzdGFuY2UgZGlhbGluZyBzdWZmaXgiKSk7Ci0KLSAgICAg IGNhc2UgWFlETENQOiAgICAgICAgICAgICAgICAgICAgICAvKiBESUFMIExDLVBSRUZJWCAqLwot ICAgICAgICByZXR1cm4oZGlhbHN0cigmZGlhbGxjcCwiTG9jYWwgZGlhbGluZyBwcmVmaXgiKSk7 Ci0KLSAgICAgIGNhc2UgWFlETENTOiAgICAgICAgICAgICAgICAgICAgICAvKiBESUFMIExDLVNV RkZJWCAqLwotICAgICAgICByZXR1cm4oZGlhbHN0cigmZGlhbGxjcywiTG9jYWwgZGlhbGluZyBz dWZmaXgiKSk7Ci0KLSNpZmRlZiBDT01NRU5UCi0gICAgICBjYXNlIFhZRFBYWDogICAgICAgICAg ICAgICAgICAgICAgLyogRElBTCBQQlgtRVhDSEFOR0UgKi8KLSAgICAgICAgcmV0dXJuKGRpYWxz dHIoJmRpYWxweHgsIkV4Y2hhbmdlIG9mIFBCWCB5b3UgYXJlIGNhbGxpbmcgZnJvbSIpKTsKLSNl bmRpZiAvKiBDT01NRU5UICovCi0KLSAgICAgIGNhc2UgWFlEUFhJOiB7ICAgICAgICAgICAgICAg ICAgICAvKiBESUFMIFBCWC1JTlRFUk5BTC1QUkVGSVggKi8KLSNpZmRlZiBDT01NRU5UCi0gICAg ICAgICAgcmV0dXJuKGRpYWxzdHIoJmRpYWxweGksCi0gICAgICAgICAgICAgICAgICAgICAgICJJ bnRlcm5hbC1jYWxsIHByZWZpeCBvZiBQQlggeW91IGFyZSBjYWxsaW5nIGZyb20iKSk7Ci0jZWxz ZQotICAgICAgICAgIGludCB4OwotICAgICAgICAgIGlmICgoeCA9IGNtdHh0KCJJbnRlcm5hbC1j YWxsIHByZWZpeCBvZiBQQlggeW91IGFyZSBjYWxsaW5nIGZyb20iLAotICAgICAgICAgICAgICAg ICAgICAgICAgICIiLCZzLE5VTEwpKSA8IDApIC8qIERvbid0IGV2YWx1YXRlICovCi0gICAgICAg ICAgICByZXR1cm4oeCk7Ci0jaWZuZGVmIE5PU1BMCi0gICAgICAgICAgaWYgKCpzKSB7Ci0gICAg ICAgICAgICAgIGNoYXIgYywgKiBwID0gdG1wYnVmOwotICAgICAgICAgICAgICBpZiAoKnMgPT0g J1xcJykgewotICAgICAgICAgICAgICAgICAgYyA9ICoocysxKTsKLSAgICAgICAgICAgICAgICAg IGlmIChpc3VwcGVyKGMpKSBjID0gdG9sb3dlcihjKTsKLSAgICAgICAgICAgICAgICAgIGlmIChj ICE9ICdmJyAmJgotICAgICAgICAgICAgICAgICAgICAgIGNrc3RyY21wKHMsIlxcdihkJHB4KSIs OCwwKSAmJgotICAgICAgICAgICAgICAgICAgICAgIGNrc3RyY21wKHMsIlxcdihkJHB4eCkiLDks MCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICBja3N0cmNtcChzLCJcXHYoZCRwKSIsNywwKSkg ewotICAgICAgICAgICAgICAgICAgICAgIHggPSBUTVBCVUZTSVo7Ci0gICAgICAgICAgICAgICAg ICAgICAgenpzdHJpbmcocywmcCwmeCk7Ci0gICAgICAgICAgICAgICAgICAgICAgcyA9IHRtcGJ1 ZjsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSNl bmRpZiAvKiBOT1NQTCAqLwotICAgICAgICAgIG1ha2VzdHIoJmRpYWxweGkscyk7Ci0gICAgICAg ICAgcmV0dXJuKDEpOwotICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgICAgY2Fz ZSBYWURQWE86ICAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwgUEJYLU9VVFNJREUtUFJFRklY ICovCi0gICAgICAgIHJldHVybihkaWFsc3RyKCZkaWFscHhvLAotICAgICAgICAgICAgICAgICAg ICAgICAiT3V0c2lkZS1saW5lIHByZWZpeCBvZiBQQlggeW91IGFyZSBjYWxsaW5nIGZyb20iKSk7 Ci0KLSAgICAgIGNhc2UgWFlEU0ZYOiAgICAgICAgICAgICAgICAgICAgICAvKiBESUFMIElOVEwt U1VGRklYICovCi0gICAgICAgIHJldHVybihkaWFsc3RyKCZkaWFsc2Z4LCIgVGVsZXBob25lIG51 bWJlciBzdWZmaXggZm9yIGRpYWxpbmciKSk7Ci0KLSAgICAgIGNhc2UgWFlEU1JUOiAgICAgICAg ICAgICAgICAgICAgICAvKiBESUFMIFNPUlQgKi8KLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBz ZXRvbigmZGlhbHNydCkpOwotCi0gICAgICBjYXNlIFhZRFBYWDogICAgICAgICAgICAgICAgICAg ICAgLyogRElBTCBQQlgtRVhDSEFOR0UgKi8KLSAgICAgIGNhc2UgWFlEVEZDOiB7ICAgICAgICAg ICAgICAgICAgICAvKiBESUFMIFRPTEwtRlJFRS1BUkVBLUNPREUgICovCi0gICAgICAgICAgaW50 IG4sIGk7ICAgICAgICAgICAgICAgICAgICAgLyogKHplcm8gb3IgbW9yZSBvZiB0aGVtLi4uKSAq LwotICAgICAgICAgIGNoYXIgKiBwW01BWFRPTExGUkVFXTsgICAgICAgIC8qIFRlbXBvcmFyeSBw b2ludGVycyAqLwotICAgICAgICAgIGNoYXIgKiBtOwotICAgICAgICAgIGZvciAobiA9IDA7IG4g PCBNQVhUT0xMRlJFRTsgbisrKSB7Ci0gICAgICAgICAgICAgIGlmIChuID09IDApIHsKLSAgICAg ICAgICAgICAgICAgIG0gPSAoeSA9PSBYWURURkMpID8KLSAgICAgICAgICAgICAgICAgICJUb2xs LWZyZWUgYXJlYSBjb2RlKHMpIGluIHRoZSBjb3VudHJ5IHlvdSBhcmUgY2FsbGluZyBmcm9tIgot ICAgICAgICAgICAgICAgICAgICA6ICJFeGNoYW5nZShzKSBvZiBQQlggeW91IGFyZSBjYWxsaW5n IGZyb20iOwotICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgbSA9ICh5 ID09IFhZRFRGQykgPwotICAgICAgICAgICAgICAgICAgICAiQW5vdGhlciB0b2xsLWZyZWUgYXJl YSBjb2RlIgotICAgICAgICAgICAgICAgICAgICAgIDogIkFub3RoZXIgUEJYIGV4Y2hhbmdlIjsK LSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBpZiAoKHggPSBjbWZsZChtLCIiLCZzLHh4 c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBpZiAo cykgewotICAgICAgICAgICAgICAgICAgaW50IGs7Ci0gICAgICAgICAgICAgICAgICBrID0gKGlu dCkgc3RybGVuKHMpOwotICAgICAgICAgICAgICAgICAgaWYgKGsgPiAwKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgaWYgKChwW25dID0gbWFsbG9jKGsgKyAxKSkpCi0gICAgICAgICAgICAgICAg ICAgICAgICBzdHJjcHkocFtuXSwgcyk7IC8qIHNhZmUgKi8KLSAgICAgICAgICAgICAgICAgIH0g ZWxzZSBicmVhazsKLSAgICAgICAgICAgICAgfSBlbHNlIGJyZWFrOwotICAgICAgICAgIH0KLSAg ICAgICAgICBpZiAoeCA9PSAtMykgeyAgICAgICAgICAgICAgICAvKiBDb21tYW5kIHdhcyBzdWNj ZXNzZnVsICovCi0gICAgICAgICAgICAgIGludCBtOwotICAgICAgICAgICAgICBtID0gKHkgPT0g WFlEVEZDKSA/IG50b2xsZnJlZSA6IG5kaWFscHh4OwotICAgICAgICAgICAgICBpZiAoKHggPSBj bWNmbSgpKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgICB4 ID0gMTsKLSAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG07IGkrKykgeyAvKiBSZW1vdmUg b2xkIGxpc3QsIGlmIGFueSAqLwotICAgICAgICAgICAgICAgICAgaWYgICh5ID09IFhZRFRGQykK LSAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmKGRpYWx0ZmNbaV0pLE5VTEwpOwotICAgICAg ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCYoZGlhbHB4eFtp XSksTlVMTCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgaWYgICh5ID09IFhZRFRG QykKLSAgICAgICAgICAgICAgICBudG9sbGZyZWUgPSBuOyAgICAgICAgICAvKiBOZXcgY291bnQg Ki8KLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG5kaWFscHh4ID0gbjsKLSAg ICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeyAvKiBOZXcgbGlzdCAqLwotICAg ICAgICAgICAgICAgICAgaWYgICh5ID09IFhZRFRGQykKLSAgICAgICAgICAgICAgICAgICAgbWFr ZXN0cigmKGRpYWx0ZmNbaV0pLHBbaV0pOwotICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAg ICAgICAgICAgICAgICBtYWtlc3RyKCYoZGlhbHB4eFtpXSkscFtpXSk7Ci0gICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgeCA9IDE7Ci0gICAgICAgICAgfQotICAgICAgICAgIGZvciAoaSA9 IDA7IGkgPCBuOyBpKyspCi0gICAgICAgICAgICBpZiAocFtpXSkgZnJlZShwW2ldKTsKLSAgICAg ICAgICByZXR1cm4oeCk7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2UgWFlEVEZQOiAgICAgICAgICAg ICAgICAgICAgICAvKiBUT0xMLUZSRUUtUFJFRklYICovCi0gICAgICAgIHJldHVybihkaWFsc3Ry KCZkaWFsdGZwLAotICAgICAgICAgICAgICAgICAgICAgICAiIExvbmctZGlzdGFuY2UgcHJlZml4 IGZvciB0b2xsLWZyZWUgZGlhbGluZyIpKTsKLQotICAgICAgY2FzZSBYWURDT046ICAgICAgICAg ICAgICAgICAgICAgIC8qIENPTk5FQ1QgKi8KLSAgICAgICAgeiA9IC0xOwotICAgICAgICBpZiAo KHkgPSBjbWtleShjcnJ0YWIsbmNyciwiIiwiYXV0byIseHhzdHJpbmcpKSA8IDApIHJldHVybih5 KTsKLSAgICAgICAgaWYgKHkgIT0gQ0FSX09GRikgICAgICAgICAgICAgICAvKiBBVVRPIG9yIE9O PyAqLwotICAgICAgICAgIGlmICgoeiA9IGNta2V5KHF2dGFiLG5xdnQsIiIsInZlcmJvc2UiLHh4 c3RyaW5nKSkgPCAwKSByZXR1cm4oeik7Ci0gICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkg cmV0dXJuKHgpOwotICAgICAgICBpZiAoeiA+IC0xKQotICAgICAgICAgIGRpYWxjcSA9IHo7Ci0g ICAgICAgIGRpYWxjb24gPSB5OwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0gICAg ICBjYXNlIFhZRFJTVFI6ICAgICAgICAgICAgICAgICAgICAgLyogUkVTVFJJQ1QgKi8KLSAgICAg ICAgaWYgKCh5ID0gY21rZXkoZHJzdHJ0YWIsNCwiIiwibm9uZSIseHhzdHJpbmcpKSA8IDApIHJl dHVybih5KTsKLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAg ICAgIGRpYWxyc3RyID0geTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQotICAgICAg Y2FzZSBYWURMTEFDOiB7ICAgICAgICAgICAgICAgICAgIC8qIExvY2FsIGFyZWEtY29kZSBsaXN0 ICAqLwotICAgICAgICAgIGludCBuLCBpOyAgICAgICAgICAgICAgICAgICAgIC8qICh6ZXJvIG9y IG1vcmUgb2YgdGhlbS4uLikgKi8KLSAgICAgICAgICBjaGFyICogcFtNQVhMT0NBTEFDXTsgLyog VGVtcG9yYXJ5IHBvaW50ZXJzICovCi0gICAgICAgICAgZm9yIChuID0gMDsgbiA8IE1BWExPQ0FM QUM7IG4rKykgewotICAgICAgICAgICAgICBpZiAoKHggPSBjbWZsZCgKLSAgICAgICAgICAgICAg ICAgICAgIkFyZWEgY29kZSB0byB3aGljaCBjYWxscyBmcm9tIHlvdXIgYXJlYSBhcmUgbG9jYWwi LAotICAgICAgICAgICAgICAgICAgICAgICAiIiwmcyx4eHN0cmluZykpIDwgMCkKLSAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgaWYgKHMpIHsKLSAgICAgICAgICAgICAgICAg IGludCBrOwotICAgICAgICAgICAgICAgICAgayA9IChpbnQpIHN0cmxlbihzKTsKLSAgICAgICAg ICAgICAgICAgIGlmIChrID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgIGlmICgocFtuXSA9 IG1hbGxvYyhrICsgMSkpKQotICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KHBbbl0sIHMp OyAvKiBzYWZlICovCi0gICAgICAgICAgICAgICAgICB9IGVsc2UgYnJlYWs7Ci0gICAgICAgICAg ICAgIH0gZWxzZSBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHggPT0gLTMpIHsg ICAgICAgICAgICAgICAgLyogQ29tbWFuZCB3YXMgc3VjY2Vzc2Z1bCAqLwotICAgICAgICAgICAg ICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAg ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmxvY2FsYWM7IGkrKykgLyogUmVtb3ZlIG9sZCBs aXN0LCBpZiBhbnkgKi8KLSAgICAgICAgICAgICAgICBpZiAoZGlhbGxjYWNbaV0pIHsKLSAgICAg ICAgICAgICAgICAgICAgZnJlZShkaWFsbGNhY1tpXSk7Ci0gICAgICAgICAgICAgICAgICAgIGRp YWxsY2FjW2ldID0gTlVMTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIG5sb2Nh bGFjID0gbjsgICAgICAgICAgICAgLyogTmV3IGNvdW50ICovCi0gICAgICAgICAgICAgIGZvciAo aSA9IDA7IGkgPCBubG9jYWxhYzsgaSsrKSAvKiBOZXcgbGlzdCAqLwotICAgICAgICAgICAgICAg IGRpYWxsY2FjW2ldID0gcFtpXTsKLSAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsK LSAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAvKiBQYXJzZSBlcnJvciwg dW5kbyBldmVyeXRoaW5nICovCi0gICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKysp Ci0gICAgICAgICAgICAgICAgaWYgKHBbaV0pIGZyZWUocFtpXSk7Ci0gICAgICAgICAgICAgIHJl dHVybih4KTsKLSAgICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGNhc2UgWFlERkxEOgotICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZkaWFsZmxkKSk7Ci0KLSAgICAgIGNhc2UgWFlE SURUOiAgICAgICAgICAgICAgICAgICAgICAvKiBESUFMIElHTk9SRS1ESUFMVE9ORSAqLwotICAg ICAgICByZXR1cm4oc2V0b24oJmRpYWxpZHQpKTsKLQotICAgICAgY2FzZSBYWURQQUM6Ci0gICAg ICAgIHkgPSBjbW51bSgKLSAgICAgICAgICAgICAgIk1pbGxpc2Vjb25kcyB0byBwYXVzZSBiZXR3 ZWVuIGVhY2ggY2hhcmFjdGVyIHNlbnQgdG8gZGlhbGVyIiwKLSAgICAgICAgICAgICAgICAgICIi LDEwLCZ4LHh4c3RyaW5nKTsKLSAgICAgICAgcmV0dXJuKHNldG51bSgmZGlhbHBhY2UseCx5LDk5 OTkpKTsKLQotI2lmbmRlZiBOT1NQTAotICAgICAgY2FzZSBYWURNQUM6Ci0gICAgICAgIGlmICgo eCA9IGNtZmxkKCJOYW1lIG9mIG1hY3JvIHRvIGV4ZWN1dGUganVzdCBwcmlvciB0byBkaWFsaW5n IiwKLSAgICAgICAgICAgICAgICAgICAgICAgIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKLSAgICAg ICAgICAgIGlmICh4ID09IC0zKQotICAgICAgICAgICAgICBzID0gTlVMTDsKLSAgICAgICAgICAg IGVsc2UKLSAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChz KSB7Ci0gICAgICAgICAgICBpZiAoISpzKSB7Ci0gICAgICAgICAgICAgICAgcyA9IE5VTEw7Ci0g ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNrc3RybmNweShsaW5lLHMsTElO QlVGU0laKTsKLSAgICAgICAgICAgICAgICBzID0gbGluZTsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgfQotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgp OwotICAgICAgICBtYWtlc3RyKCZkaWFsbWFjLHMpOwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDEpOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSAgICAgIGNhc2UgWFlEUFVDQzogICAgICAgICAg ICAgICAgICAgICAvKiBQdWxzZSBjb3VudHJ5IGNvZGVzICovCi0gICAgICBjYXNlIFhZRFRPQ0M6 IHsgICAgICAgICAgICAgICAgICAgLyogVG9uZSBjb3VudHJ5IGNvZGVzICovCi0gICAgICAgICAg aW50IG4sIGk7Ci0gICAgICAgICAgY2hhciAqIHBbTUFYVFBDQ107Ci0gICAgICAgICAgY2hhciAq IG07Ci0gICAgICAgICAgZm9yIChuID0gMDsgbiA8IE1BWFRQQ0M7IG4rKykgewotICAgICAgICAg ICAgICBpZiAobiA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICBtID0gKHkgPT0gWFlEUFVDQykg PwotICAgICAgICAgICAgICAgICAgIkNvdW50cnkgY29kZSB3aGVyZSBQdWxzZSBkaWFsaW5nIGlz IHJlcXVpcmVkIgotICAgICAgICAgICAgICAgICAgICA6ICJDb3VudHJ5IGNvZGUgd2hlcmUgVG9u ZSBkaWFsaW5nIGlzIGF2YWlsYWJsZSI7Ci0gICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg ICAgICAgIG0gPSAiQW5vdGhlciBjb3VudHJ5IGNvZGUiOwotICAgICAgICAgICAgICBpZiAoKHgg PSBjbWZsZChtLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICBpZiAocykgewotICAgICAgICAgICAgICAgICAgaW50IGs7Ci0gICAgICAg ICAgICAgICAgICBrID0gKGludCkgc3RybGVuKHMpOwotICAgICAgICAgICAgICAgICAgaWYgKGsg PiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgaWYgKChwW25dID0gbWFsbG9jKGsgKyAxKSkp Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkocFtuXSwgcyk7IC8qIHNhZmUgKi8KLSAg ICAgICAgICAgICAgICAgIH0gZWxzZSBicmVhazsKLSAgICAgICAgICAgICAgfSBlbHNlIGJyZWFr OwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoeCA9PSAtMykgeyAgICAgICAgICAgICAgICAv KiBDb21tYW5kIHdhcyBzdWNjZXNzZnVsICovCi0gICAgICAgICAgICAgIGludCBtOwotICAgICAg ICAgICAgICBtID0gKHkgPT0gWFlEUFVDQykgPyBuZGlhbHB1Y2MgOiBuZGlhbHRvY2M7Ci0gICAg ICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4o eCk7Ci0gICAgICAgICAgICAgIHggPSAxOwotICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwg bTsgaSsrKSB7IC8qIFJlbW92ZSBvbGQgbGlzdCwgaWYgYW55ICovCi0gICAgICAgICAgICAgICAg ICBpZiAoeSA9PSBYWURQVUNDKQotICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCYoZGlhbHB1 Y2NbaV0pLE5VTEwpOwotICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg ICBtYWtlc3RyKCYoZGlhbHRvY2NbaV0pLE5VTEwpOwotICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgIGlmICh5ID09IFhZRFBVQ0MpIHsKLSAgICAgICAgICAgICAgICAgIG5kaWFscHVjYyA9 IG47ICAgICAgICAgICAgICAgIC8qIE5ldyBjb3VudCAqLwotICAgICAgICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgICAgICAgbmRpYWx0b2NjID0gbjsKLSAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7IC8qIE5ldyBsaXN0ICovCi0gICAg ICAgICAgICAgICAgICBpZiAoeSA9PSBYWURQVUNDKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg bWFrZXN0cigmKGRpYWxwdWNjW2ldKSxwW2ldKTsKLSAgICAgICAgICAgICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmKGRpYWx0b2NjW2ldKSxwW2ldKTsKLSAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB4ID0gMTsK LSAgICAgICAgICB9Ci0gICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykKLSAgICAgICAg ICAgIGlmIChwW2ldKSBmcmVlKHBbaV0pOwotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgIH0K LSAgICAgIGNhc2UgWFlEVEVTVDoKLSAgICAgICAgcmV0dXJuKHNldG9uKCZkaWFsdGVzdCkpOwot Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBwcmludGYoIj9VbmV4cGVjdGVkIFNFVCBESUFMIHBh cmFtZXRlclxuIik7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfQotfQotCi0jaWZuZGVmIE5P U0hPVwotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNIT1cgTU9E RU0gKi8KLXNob21vZGVtKCkgewotICAgIE1ETUlORiAqIHA7Ci0gICAgaW50IHgsIG4sIG1kbTsK LSAgICBjaGFyIGM7Ci0gICAgbG9uZyB6ejsKLQotI2lmZGVmIElLU0QKLSAgICBpZiAoaW5zZXJ2 ZXIpIHsKLSAgICAgICAgcHJpbnRmKCJTb3JyeSwgY29tbWFuZCBkaXNhYmxlZFxyXG4iKTsKLSAg ICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICB9Ci0jZW5kaWYgLyogSUtTRCAqLwotCi0g ICAgc2htZG1saW4oKTsKLSAgICBwcmludGYoIlxuIik7Ci0KLSAgICBtZG0gPSAobWRtdHlwID4g MCkgPyBtZG10eXAgOiBtZG1zYXY7Ci0gICAgcCA9IChtZG0gPiAwKSA/IG1vZGVtcFttZG1dIDog TlVMTDsKLQotICAgIGlmIChwKSB7Ci0gICAgICAgIHByaW50ZigiICVzXG5cbiIsIGRpYWxuYW1l ID8gZGlhbG5hbWUgOiBwLT5uYW1lKTsKLQotICAgICAgICBwcmludGYoIiBNb2RlbSBjYXBhYmls aXRpZXM6ICAgICIpOwotICAgICAgICB6eiA9IGRpYWxjYXBhcyA/IGRpYWxjYXBhcyA6IHAtPmNh cGFzOwotICAgICAgICBpZiAoIXp6KSB7Ci0gICAgICAgICAgICBwcmludGYoIiAobm9uZSkiKTsK LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICh6eiAmIENLRF9BVCkgcHJpbnRmKCIg QVQiKTsKLSAgICAgICAgICAgIGlmICh6eiAmIENLRF9WMjUpIHByaW50ZigiIElUVSIpOwotICAg ICAgICAgICAgaWYgKHp6ICYgQ0tEX1NCKSBwcmludGYoIiBTQiIpOwotICAgICAgICAgICAgaWYg KHp6ICYgQ0tEX0VDKSBwcmludGYoIiBFQyIpOwotICAgICAgICAgICAgaWYgKHp6ICYgQ0tEX0RD KSBwcmludGYoIiBEQyIpOwotICAgICAgICAgICAgaWYgKHp6ICYgQ0tEX0hXKSBwcmludGYoIiBI V0ZDIik7Ci0gICAgICAgICAgICBpZiAoenogJiBDS0RfU1cpIHByaW50ZigiIFNXRkMiKTsKLSAg ICAgICAgICAgIGlmICh6eiAmIENLRF9LUykgcHJpbnRmKCIgS1MiKTsKLSAgICAgICAgICAgIGlm ICh6eiAmIENLRF9UQikgcHJpbnRmKCIgVEIiKTsKLSAgICAgICAgfQotICAgICAgICBwcmludGYo IlxuIE1vZGVtIGNhcnJpZXItd2F0Y2g6ICAgICIpOwotICAgICAgICBpZiAoY2FycmllciA9PSBD QVJfT0ZGKSBwcmludGYoIm9mZlxuIik7Ci0gICAgICAgIGVsc2UgaWYgKGNhcnJpZXIgPT0gQ0FS X09OKSBwcmludGYoIm9uXG4iKTsKLSAgICAgICAgZWxzZSBpZiAoY2FycmllciA9PSBDQVJfQVVU KSBwcmludGYoImF1dG9cbiIpOwotICAgICAgICBlbHNlIHByaW50ZigidW5rbm93blxuIik7Ci0K LSAgICAgICAgcHJpbnRmKCIgTW9kZW0gbWF4aW11bS1zcGVlZDogICAgIik7Ci0gICAgICAgIHp6 ID0gKGRpYWxtYXggPiAwTCkgPyBkaWFsbWF4IDogcC0+bWF4X3NwZWVkOwotICAgICAgICBpZiAo enogPiAwKQotICAgICAgICAgIHByaW50ZigiJWxkIGJwc1xuIiwgenopOwotICAgICAgICBlbHNl Ci0gICAgICAgICAgcHJpbnRmKCIodW5rbm93bilcbiIpOwotICAgICAgICBwcmludGYoIiBNb2Rl bSBlcnJvci1jb3JyZWN0aW9uOiAlc1xuIiwgZGlhbGVjID8gIm9uIiA6ICJvZmYiKTsKLSAgICAg ICAgcHJpbnRmKCIgTW9kZW0gY29tcHJlc3Npb246ICAgICAgJXNcbiIsIGRpYWxkYyA/ICJvbiIg OiAib2ZmIik7Ci0gICAgICAgIHByaW50ZigiIE1vZGVtIHNwZWVkLW1hdGNoaW5nOiAgICVzIiwg ICBtZG1zcGQgPyAib24iIDogIm9mZiIpOwotICAgICAgICBwcmludGYoIiAoaW50ZXJmYWNlIHNw ZWVkICVzKVxuIiwgbWRtc3BkID8gImNoYW5nZXMiIDogImlzIGxvY2tlZCIpOwotICAgICAgICBw cmludGYoIiBNb2RlbSBmbG93LWNvbnRyb2w6ICAgICAiKTsKLSAgICAgICAgaWYgKGRpYWxmYyA9 PSBGTE9fTk9ORSkgcHJpbnRmKCJub25lXG4iKTsKLSAgICAgICAgZWxzZSBpZiAoZGlhbGZjID09 IEZMT19YT05YKSBwcmludGYoInhvbi94b2ZmXG4iKTsKLSAgICAgICAgZWxzZSBpZiAoZGlhbGZj ID09IEZMT19SVFNDKSBwcmludGYoInJ0cy9jdHNcbiIpOwotICAgICAgICBlbHNlIGlmIChkaWFs ZmMgPT0gRkxPX0FVVE8pIHByaW50ZigiYXV0b1xuIik7Ci0gICAgICAgIHByaW50ZigiIE1vZGVt IGhhbmd1cC1tZXRob2Q6ICAgICVzXG4iLAotICAgICAgICAgICAgICAgZGlhbG1odSA/Ci0gICAg ICAgICAgICAgICAibW9kZW0tY29tbWFuZCIgOgotICAgICAgICAgICAgICAgInJzMjMyLXNpZ25h bCIKLSAgICAgICAgICAgICAgICk7Ci0gICAgICAgIHByaW50ZigiIE1vZGVtIHNwZWFrZXI6ICAg ICAgICAgICVzXG4iLCBzaG93b2ZmKG1kbXNwaykpOwotICAgICAgICBwcmludGYoIiBNb2RlbSB2 b2x1bWU6ICAgICAgICAgICAlc1xuIiwKLSAgICAgICAgICAgICAgIChtZG12b2wgPT0gMikgPyAi bWVkaXVtIiA6ICgobWRtdm9sIDw9IDEpID8gImxvdyIgOiAiaGlnaCIpKTsKLSAgICAgICAgcHJp bnRmKCIgTW9kZW0ga2VybWl0LXNwb29mOiAgICAgJXNcbiIsIGRpYWxrc3AgPyAib24iIDogIm9m ZiIpOwotICAgICAgICBjID0gKGNoYXIpICh4ID0gKGRpYWxlc2MgPyBkaWFsZXNjIDogcC0+ZXNj X2NoYXIpKTsKLSAgICAgICAgcHJpbnRmKCIgTW9kZW0gZXNjYXBlLWNoYXJhY3RlcjogJWQiLCB4 KTsKLSAgICAgICAgaWYgKGlzcHJpbnQoYykpCi0gICAgICAgICAgcHJpbnRmKCIgKD0gXCIlY1wi KSIsYyk7Ci0gICAgICAgIHByaW50ZigKLSJcblxuTU9ERU0gQ09NTUFORHMgKCogPSBzZXQgYXV0 b21hdGljYWxseSBieSBTRVQgTU9ERU0gVFlQRSk6XG5cbiIpOwotICAgICAgICBkZWJ1ZyhGMTEw LCJzaG93IGRpYWxpbmkiLGRpYWxpbmksMCk7Ci0gICAgICAgIHByaW50ZigiICVjIEluaXQtc3Ry aW5nOiAgICAgICAgICAiLCBkaWFsaW5pID8gJyAnIDogJyonICk7Ci0gICAgICAgIHNob2RzKGRp YWxpbmkgPyBkaWFsaW5pIDogcC0+d2FrZV9zdHIpOwotICAgICAgICBwcmludGYoIiAlYyBEaWFs LW1vZGUtc3RyaW5nOiAgICAgIiwgZGlhbG1zdHIgPyAnICcgOiAnKicgKTsKLSAgICAgICAgc2hv ZHMoZGlhbG1zdHIgPyBkaWFsbXN0ciA6IHAtPmRtb2RlX3N0cik7Ci0gICAgICAgIG4gPSBsb2Nh bCA/IDE5IDogMjA7Ci0gICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9y ZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgIHByaW50ZigiICVjIERpYWwtbW9k ZS1wcm9tcHQ6ICAgICAiLCBkaWFsbXBybXQgPyAnICcgOiAnKicgKTsKLSAgICAgICAgc2hvZHMo ZGlhbG1wcm10ID8gZGlhbG1wcm10IDogcC0+ZG1vZGVfcHJvbXB0KTsKLSAgICAgICAgaWYgKCsr biA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsK LSAgICAgICAgcHJpbnRmKCIgJWMgRGlhbC1jb21tYW5kOiAgICAgICAgICIsIGRpYWxjbWQgPyAn ICcgOiAnKicgKTsKLSAgICAgICAgc2hvZHMoZGlhbGNtZCA/IGRpYWxjbWQgOiBwLT5kaWFsX3N0 cik7Ci0gICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1 cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgIHByaW50ZigiICVjIENvbXByZXNzaW9uIG9uOiAg ICAgICAiLCBkaWFsZGNvbiA/ICcgJyA6ICcqJyApOwotICAgICAgICBpZiAoIWRpYWxkY29uKQot ICAgICAgICAgIGRlYnVnKEYxMTAsImRpYWxkY29uIiwiKG51bGwpIiwwKTsKLSAgICAgICAgZWxz ZQotICAgICAgICAgIGRlYnVnKEYxMTAsImRpYWxkY29uIixkaWFsZGNvbiwwKTsKLSAgICAgICAg c2hvZHMoZGlhbGRjb24gPyBkaWFsZGNvbiA6IHAtPmRjX29uX3N0cik7Ci0gICAgICAgIGlmICgr K24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7 Ci0gICAgICAgIHByaW50ZigiICVjIENvbXByZXNzaW9uIG9mZjogICAgICAiLCBkaWFsZGNvZmYg PyAnICcgOiAnKicgKTsKLSAgICAgICAgc2hvZHMoZGlhbGRjb2ZmID8gZGlhbGRjb2ZmIDogcC0+ ZGNfb2ZmX3N0cik7Ci0gICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9y ZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgIHByaW50ZigiICVjIEVycm9yLWNv cnJlY3Rpb24gb246ICAiLCBkaWFsZWNvbiA/ICcgJyA6ICcqJyApOwotICAgICAgICBzaG9kcyhk aWFsZWNvbiA/IGRpYWxlY29uIDogcC0+ZWNfb25fc3RyKTsKLSAgICAgICAgaWYgKCsrbiA+IGNt ZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAg ICAgcHJpbnRmKCIgJWMgRXJyb3ItY29ycmVjdGlvbiBvZmY6ICIsIGRpYWxlY29mZiA/ICcgJyA6 ICcqJyApOwotICAgICAgICBzaG9kcyhkaWFsZWNvZmYgPyBkaWFsZWNvZmYgOiBwLT5lY19vZmZf c3RyKTsKLSAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJl dHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgcHJpbnRmKCIgJWMgQXV0b2Fuc3dlciBvbjog ICAgICAgICIsIGRpYWxhYW9uID8gJyAnIDogJyonICk7Ci0gICAgICAgIHNob2RzKGRpYWxhYW9u ID8gZGlhbGFhb24gOiBwLT5hYV9vbl9zdHIpOwotICAgICAgICBpZiAoKytuID4gY21kX3Jvd3Mg LSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICBwcmlu dGYoIiAlYyBBdXRvYW5zd2VyIG9mZjogICAgICAgIiwgZGlhbGFhb2ZmID8gJyAnIDogJyonICk7 Ci0gICAgICAgIHNob2RzKGRpYWxhYW9mZiA/IGRpYWxhYW9mZiA6IHAtPmFhX29mZl9zdHIpOwot ICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDAp OyBlbHNlIG4gPSAwOwotCi0gICAgICAgIHByaW50ZigiICVjIFNwZWFrZXIgb246ICAgICAgICAg ICAiLCBkaWFsc3BvbiA/ICcgJyA6ICcqJyApOwotICAgICAgICBzaG9kcyhkaWFsc3BvbiA/IGRp YWxzcG9uIDogcC0+c3Bfb25fc3RyKTsKLSAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykg aWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgcHJpbnRmKCIg JWMgU3BlYWtlciBvZmY6ICAgICAgICAgICIsIGRpYWxzcG9mZiA/ICcgJyA6ICcqJyApOwotICAg ICAgICBzaG9kcyhkaWFsc3BvZmYgPyBkaWFsc3BvZmYgOiBwLT5zcF9vZmZfc3RyKTsKLSAgICAg ICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxz ZSBuID0gMDsKLSAgICAgICAgcHJpbnRmKCIgJWMgVm9sdW1lIGxvdzogICAgICAgICAgICIsIGRp YWx2b2wxID8gJyAnIDogJyonICk7Ci0gICAgICAgIHNob2RzKGRpYWx2b2wxID8gZGlhbHZvbDEg OiBwLT52b2wxX3N0cik7Ci0gICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNr bW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgIHByaW50ZigiICVjIFZvbHVt ZSBtZWRpdW06ICAgICAgICAiLCBkaWFsdm9sMiA/ICcgJyA6ICcqJyApOwotICAgICAgICBzaG9k cyhkaWFsdm9sMiA/IGRpYWx2b2wyIDogcC0+dm9sMl9zdHIpOwotICAgICAgICBpZiAoKytuID4g Y21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAg ICAgICBwcmludGYoIiAlYyBWb2x1bWUgaGlnaDogICAgICAgICAgIiwgZGlhbHZvbDMgPyAnICcg OiAnKicgKTsKLSAgICAgICAgc2hvZHMoZGlhbHZvbDMgPyBkaWFsdm9sMyA6IHAtPnZvbDNfc3Ry KTsKLSAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVy bigwKTsgZWxzZSBuID0gMDsKLQotICAgICAgICBwcmludGYoIiAlYyBIYW5ndXAtY29tbWFuZDog ICAgICAgIiwgZGlhbGhjbWQgPyAnICcgOiAnKicgKTsKLSAgICAgICAgc2hvZHMoZGlhbGhjbWQg PyBkaWFsaGNtZCA6IHAtPmh1cF9zdHIpOwotICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAz KSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICBwcmludGYo IiAlYyBIYXJkd2FyZS1mbG93OiAgICAgICAgIiwgZGlhbGh3ZmMgPyAnICcgOiAnKicgKTsKLSAg ICAgICAgc2hvZHMoZGlhbGh3ZmMgPyBkaWFsaHdmYyA6IHAtPmh3ZmNfc3RyKTsKLSAgICAgICAg aWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBu ID0gMDsKLSAgICAgICAgcHJpbnRmKCIgJWMgU29mdHdhcmUtZmxvdzogICAgICAgICIsIGRpYWxz d2ZjID8gJyAnIDogJyonICk7Ci0gICAgICAgIHNob2RzKGRpYWxzd2ZjID8gZGlhbHN3ZmMgOiBw LT5zd2ZjX3N0cik7Ci0gICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9y ZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgIHByaW50ZigiICVjIE5vLWZsb3ct Y29udHJvbDogICAgICAiLCBkaWFsbm9mYyA/ICcgJyA6ICcqJyApOwotICAgICAgICBzaG9kcyhk aWFsbm9mYyA/IGRpYWxub2ZjIDogcC0+bm9mY19zdHIpOwotICAgICAgICBpZiAoKytuID4gY21k X3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAg ICBwcmludGYoIiAlYyBQdWxzZTogICAgICAgICAgICAgICAgIiwgZGlhbHB1bHNlID8gJyAnIDog JyonKTsKLSAgICAgICAgc2hvZHMoZGlhbHB1bHNlID8gZGlhbHB1bHNlIDogcC0+cHVsc2UpOwot ICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDAp OyBlbHNlIG4gPSAwOwotICAgICAgICBwcmludGYoIiAlYyBUb25lOiAgICAgICAgICAgICAgICAg IiwgZGlhbHRvbmUgPyAnICcgOiAnKicpOwotICAgICAgICBzaG9kcyhkaWFsdG9uZSA/IGRpYWx0 b25lIDogcC0+dG9uZSk7Ci0KLSAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFh c2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgcHJpbnRmKCIgJWMgSWdu b3JlLWRpYWx0b25lOiAgICAgICIsIGRpYWx4MyA/ICcgJyA6ICcqJyk7Ci0gICAgICAgIHNob2Rz KGRpYWx4MyA/IGRpYWx4MyA6IHAtPmlnbm9yZWR0KTsKLQotICAgICAgICBpZiAoKytuID4gY21k X3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAg ICBwcmludGYoIiAlYyBQcmVkaWFsLWluaXQ6ICAgICAgICAgIiwgZGlhbGluaTIgPyAnICcgOiAn KicpOwotICAgICAgICBzaG9kcyhkaWFsaW5pMiA/IGRpYWxpbmkyIDogcC0+aW5pMik7Ci0KLSAg ICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gNCkgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsg ZWxzZSBuID0gMDsKLSAgICAgICAgcHJpbnRmKCJcbiBGb3IgbW9yZSBpbmZvOiBTSE9XIERJQUwg YW5kIFNIT1cgQ09NTVVOSUNBVElPTlNcbiIpOwotCi0gICAgfSBlbHNlIGlmIChtZG0gPiAwKSB7 Ci0gICAgICAgIHByaW50ZigiTW9kZW0gaW5mbyBmb3IgXCIlc1wiIG5vdCBmaWxsZWQgaW4geWV0 XG4iLCBnbWRtdHlwKCkpOwotICAgIH0gZWxzZSBwcmludGYoCi0iIE5vIG1vZGVtIHNlbGVjdGVk LCBzbyBESUFMIGFuZCBtb3N0IFNFVCBNT0RFTSBjb21tYW5kcyBoYXZlIG5vIGVmZmVjdC5cblwK LSBVc2UgU0VUIE1PREVNIFRZUEUgdG8gc2VsZWN0IGEgbW9kZW0uXG4iKTsKLSAgICByZXR1cm4o c3VjY2VzcyA9IDEpOwotfQotI2VuZGlmIC8qIE5PU0hPVyAqLwotI2VuZGlmIC8qIE5PRElBTCAq LwotCi0jaWZkZWYgQ0tfVEFQSQotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogVEFQSSBhY3Rpb24gY29tbWFuZHMgKi8KLWRvdGFwaSgpIHsKLSAgICBp bnQgeCx5OwotICAgIGNoYXIgKnM7Ci0KLSAgICBpZiAoIVRBUElBdmFpbCkgewotICAgICAgICBw cmludGYoIlxuVEFQSSBpcyB1bmF2YWlsYWJsZSBvbiB0aGlzIHN5c3RlbS5cbiIpOwotICAgICAg ICByZXR1cm4oLTkpOwotICAgIH0KLSAgICBpZiAoKHkgPSBjbWtleSh0YXBpdGFiLG50YXBpdGFi LCJNUyBUQVBJIGNvbW1hbmQiLCIiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgcmV0dXJuKHkpOwot ICAgIHN3aXRjaCAoeSkgewotICAgICAgY2FzZSBYWVRBUElfQ0ZHOiB7ICAgICAgICAgICAgICAg ICAgICAgICAgLyogVEFQSSBDT05GSUdVUkUtTElORSAqLwotICAgICAgICAgIGV4dGVybiBzdHJ1 Y3Qga2V5dGFiICogdGFwaWxpbmV0YWI7Ci0gICAgICAgICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIg KiBfdGFwaWxpbmV0YWI7Ci0gICAgICAgICAgZXh0ZXJuIGludCBudGFwaWxpbmU7Ci0gICAgICAg ICAgZXh0ZXJuIGludCBMaW5lRGV2aWNlSWQ7Ci0gICAgICAgICAgaW50IGxpbmVJRD1MaW5lRGV2 aWNlSWQ7Ci0gICAgICAgICAgaWYgKFRBUElBdmFpbCkKLSAgICAgICAgICAgIGNrdGFwaUJ1aWxk TGluZVRhYmxlKCZ0YXBpbGluZXRhYiwgJl90YXBpbGluZXRhYiwgJm50YXBpbGluZSk7Ci0gICAg ICAgICAgaWYgKHRhcGlsaW5ldGFiICYmIF90YXBpbGluZXRhYiAmJiBudGFwaWxpbmUgPiAwKSB7 Ci0gICAgICAgICAgICAgIGludCBpPTAsIGogPSA5OTk5LCBrID0gLTE7Ci0KLSAgICAgICAgICAg ICAgaWYgKCBMaW5lRGV2aWNlSWQgPT0gLTEgKSB7Ci0gICAgICAgICAgICAgICAgICAvKiBGaW5k IG91dCB3aGF0IHRoZSBsb3dlc3QgbnVtYmVyZWQgVEFQSSBkZXZpY2UgaXMgKi8KLSAgICAgICAg ICAgICAgICAgIC8qIGFuZCB1c2UgaXQgYXMgdGhlIGRlZmF1bHQuICAgICAgICAgICAgICAgICAg ICAgICAqLwotICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG50YXBpbGluZTsgaSsr ICkgewotICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXBpbGluZXRhYltpXS5rd3ZhbCA8IGop IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IGk7Ci0gICAgICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg ICAgICAgICAgICAgLyogRmluZCB0aGUgTGluZURldmljZUlkIGluIHRoZSB0YWJsZSBhbmQgdXNl IHRoYXQgZW50cnkgKi8KLSAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudGFwaWxp bmU7IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICBpZiAodGFwaWxpbmV0YWJbaV0ua3d2 YWwgPT0gTGluZURldmljZUlkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBpOwot ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgaWYg KGsgPj0gMCkKLSAgICAgICAgICAgICAgICBzID0gX3RhcGlsaW5ldGFiW2tdLmt3ZDsKLSAgICAg ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHMgPSAiIjsKLQotICAgICAgICAgICAgICBp ZiAoKHkgPSBjbWtleShfdGFwaWxpbmV0YWIsbnRhcGlsaW5lLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlRBUEkgZGV2aWNlIG5hbWUiLHMseHhzdHJpbmcpKSA8IDApCi0gICAgICAg ICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICBsaW5lSUQgPSB5OwotICAgICAgICAg IH0KLSAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSNpZmRlZiBJ S1NECi0gICAgICAgICAgaWYgKGluc2VydmVyKSB7Ci0gICAgICAgICAgICAgIHByaW50ZigiU29y cnksIGNvbW1hbmQgZGlzYWJsZWRcclxuIik7Ci0gICAgICAgICAgICAgIHJldHVybihzdWNjZXNz ID0gMCk7Ci0gICAgICAgICAgfQotI2VuZGlmIC8qIElTS0QgKi8KLSAgICAgICAgICBja3RhcGlD b25maWd1cmVMaW5lKGxpbmVJRCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBj YXNlIFhZVEFQSV9ESUFMOiAgICAgICAgICAgICAgICAgLyogVEFQSSBESUFMSU5HLVBST1BFUlRJ RVMgKi8KLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgIHJldHVybih4 KTsKLSNpZmRlZiBJS1NECi0gICAgICAgIGlmIChpbnNlcnZlcikgewotICAgICAgICAgICAgcHJp bnRmKCJTb3JyeSwgY29tbWFuZCBkaXNhYmxlZFxyXG4iKTsKLSAgICAgICAgICAgIHJldHVybihz dWNjZXNzID0gMCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBJU0tEICovCi0gICAgICAgIGNrdGFw aURpYWxpbmdQcm9wKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4oc3VjY2Vz cyA9IDEpOwotfQotCi1zdGF0aWMgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog U0VUIFRBUEkgY29tbWFuZCBvcHRpb25zICovCi1zZXR0YXBpKCkgewotICAgIGludCB4LCB5Owot ICAgIGNoYXIgKnM7Ci0KLSAgICBpZiAoIVRBUElBdmFpbCkgewotICAgICAgICBwcmludGYoIlxu VEFQSSBpcyB1bmF2YWlsYWJsZSBvbiB0aGlzIHN5c3RlbS5cbiIpOwotICAgICAgICByZXR1cm4o LTkpOwotICAgIH0KLSAgICBpZiAoKHkgPSBjbWtleShzZXR0YXBpdGFiLG5zZXR0YXBpdGFiLCJN UyBUQVBJIG9wdGlvbiIsIiIseHhzdHJpbmcpKSA8IDApCi0gICAgICByZXR1cm4oeSk7Ci0gICAg c3dpdGNoICh5KSB7Ci0gICAgICBjYXNlIFhZVEFQSV9VU0U6Ci0gICAgICAgIHJldHVybiAoc3Vj Y2VzcyA9IHNldG9uKCZ0YXBpdXNlY2ZnKSk7Ci0gICAgICBjYXNlIFhZVEFQSV9MR0hUOgotICAg ICAgICByZXR1cm4gKHN1Y2Nlc3MgPSBzZXRvbigmdGFwaWxpZ2h0cykpOwotICAgICAgY2FzZSBY WVRBUElfUFJFOgotICAgICAgICByZXR1cm4gKHN1Y2Nlc3MgPSBzZXRvbigmdGFwaXByZXRlcm0p KTsKLSAgICAgIGNhc2UgWFlUQVBJX1BTVDoKLSAgICAgICAgcmV0dXJuIChzdWNjZXNzID0gc2V0 b24oJnRhcGlwb3N0dGVybSkpOwotICAgICAgY2FzZSBYWVRBUElfSU5BOgotICAgICAgICB5ID0g Y21udW0oInNlY29uZHMgb2YgaW5hY3Rpdml0eSBiZWZvcmUgYXV0by1kaXNjb25uZWN0IiwKLSAg ICAgICAgICAgICAgICAgICIwIiwxMCwmeCx4eHN0cmluZyk7Ci0gICAgICAgIHJldHVybihzZXRu dW0oJnRhcGlpbmFjdGl2aXR5LHgseSw2NTUzNSkpOwotICAgICAgY2FzZSBYWVRBUElfQk5HOgot ICAgICAgICB5ID0gY21udW0oInNlY29uZHMgdG8gd2FpdCBmb3IgY3JlZGl0IGNhcmQgdG9uZSIs Ci0gICAgICAgICAgICAgICAgICAiOCIsMTAsJngseHhzdHJpbmcpOwotICAgICAgICByZXR1cm4o c2V0bnVtKCZ0YXBpYm9uZyx4LHksOTApKTsKLSAgICAgIGNhc2UgWFlUQVBJX01BTjoKLSAgICAg ICAgcmV0dXJuIChzdWNjZXNzID0gc2V0b24oJnRhcGltYW51YWwpKTsKLSAgICAgIGNhc2UgWFlU QVBJX0NPTjogICAgICAgICAgICAgICAgICAvKiBUQVBJIENPTlZFUlNJT05TICovCi0gICAgICAg IHJldHVybiAoc3VjY2VzcyA9IHNldG9uYXV0KCZ0YXBpY29udikpOwotICAgICAgY2FzZSBYWVRB UElfTElOOiAgICAgICAgICAgICAgICAgIC8qIFRBUEkgTElORSAqLwotICAgICAgICB4ID0gc2V0 bGluKFhZVEFQSV9MSU4sMSwwKTsKLSAgICAgICAgaWYgKHggPiAtMSkgZGlkc2V0bGluKys7Ci0g ICAgICAgIHJldHVybih4KTsKLSAgICAgIGNhc2UgWFlUQVBJX1BBU1M6IHsgICAgICAgICAgICAg ICAvKiBUQVBJIFBBU1NUSFJPVUdIICovCi0jaWZkZWYgTk9ESUFMCi0gICAgICAgICAgcHJpbnRm KCJcbj9Nb2RlbS1kaWFsaW5nIG5vdCBzdXBwb3J0ZWRcbiIpOwotICAgICAgICAgIHJldHVybigt OSk7Ci0jZWxzZSAvKiBOT0RJQUwgKi8KLSAgICAgICAgICAvKiBQYXNzdGhyb3VnaCBiZWNhbWUg TW9kZW0tZGlhbGluZyB3aGljaCBpcyBhbiBhbnRvbnltICovCi0gICAgICAgICAgc3VjY2VzcyA9 IHNldG9uKCZ0YXBpcGFzcyk7Ci0gICAgICAgICAgdGFwaXBhc3MgPSAhdGFwaXBhc3M7Ci0gICAg ICAgICAgcmV0dXJuIChzdWNjZXNzKTsKLSNlbmRpZiAvKiBOT0RJQUwgKi8gICAgICAgIAotICAg ICAgfQotICAgICAgY2FzZSBYWVRBUElfTE9DOiB7ICAgICAgICAgICAgICAgIC8qIFRBUEkgTE9D QVRJT04gKi8KLSAgICAgICAgICBleHRlcm4gY2hhciB0YXBpbG9jW107Ci0gICAgICAgICAgZXh0 ZXJuIGludCB0YXBpbG9jaWQ7Ci0gICAgICAgICAgaW50IGkgPSAwLCBqID0gOTk5OSwgayA9IC0x OwotCi0gICAgICAgICAgY2t0YXBpQnVpbGRMb2NhdGlvblRhYmxlKCZ0YXBpbG9jdGFiLCAmbnRh cGlsb2MpOwotICAgICAgICAgIGlmICghdGFwaWxvY3RhYiB8fCAhbnRhcGlsb2MpIHsKLSAgICAg ICAgICAgICAgcHJpbnRmKCJcbk5vIFRBUEkgTG9jYXRpb25zIGFyZSBjb25maWd1cmVkIGZvciB0 aGlzIHN5c3RlbVxuIik7Ci0gICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgfQot ICAgICAgICAgIGlmICh0YXBpbG9jaWQgPT0gLTEpCi0gICAgICAgICAgICB0YXBpbG9jaWQgPSBj a3RhcGlHZXRDdXJyZW50TG9jYXRpb25JRCgpOwotCi0gICAgICAgICAgLyogRmluZCB0aGUgY3Vy cmVudCB0YXBpbG9jIGVudHJ5ICovCi0gICAgICAgICAgLyogYW5kIHVzZSBpdCBhcyB0aGUgZGVm YXVsdC4gKi8KLSAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgbnRhcGlsb2M7IGsrKykgewotICAg ICAgICAgICAgICBpZiAodGFwaWxvY3RhYltrXS5rd3ZhbCA9PSB0YXBpbG9jaWQpCi0gICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChrID49IDAgJiYgayA8 IG50YXBpbG9jKQotICAgICAgICAgICAgcyA9IHRhcGlsb2N0YWJba10ua3dkOwotICAgICAgICAg IGVsc2UKLSAgICAgICAgICAgIHMgPSAiIjsKLQotICAgICAgICAgIGlmICgoeSA9IGNta2V5KHRh cGlsb2N0YWIsbnRhcGlsb2MsICJUQVBJIGxvY2F0aW9uIixzLHh4c3RyaW5nKSkgPCAwKQotICAg ICAgICAgICAgcmV0dXJuKHkpOwotCi0gICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQot ICAgICAgICAgICAgcmV0dXJuKHgpOwotI2lmZGVmIElLU0QKLSAgICAgICAgICBpZiAoaW5zZXJ2 ZXIpIHsKLSAgICAgICAgICAgICAgcHJpbnRmKCJTb3JyeSwgY29tbWFuZCBkaXNhYmxlZFxyXG4i KTsKLSAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgICB9Ci0jZW5k aWYgLyogSUtTRCAqLwotICAgICAgICAgIGNrdGFwaUZldGNoTG9jYXRpb25JbmZvQnlJRCggeSAp OwotI2lmbmRlZiBOT0RJQUwKLSAgICAgICAgICBDb3B5VGFwaUxvY2F0aW9uSW5mb1RvS2VybWl0 RGlhbENtZCgpOwotI2VuZGlmIC8qIE5PRElBTCAqLwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr OwotICAgIH0KLSAgICByZXR1cm4oc3VjY2Vzcz0xKTsKLX0KLSNlbmRpZiAvKiBDS19UQVBJICov Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0jaWZuZGVmIE5PU1BMCi0vKiBNZXRob2QgZm9yIGV2 YWx1YXRpbmcgXCV4IGFuZCBcJnhbXSB2YXJpYWJsZXMgKi8KLQotc3RhdGljIHN0cnVjdCBrZXl0 YWIgdmFyZXZhbHRhYltdID0gewotICAgIHsgInJlY3Vyc2l2ZSIsIDEsIDAgfSwKLSAgICB7ICJz aW1wbGUiLCAgICAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IG52YXJldmFsdGFiID0gKHNpemVvZih2 YXJldmFsdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLWludAotc2V0dmFyZXZhbCgp IHsKLSAgICBpbnQgeCA9IDAsIHkgPSAwOwotICAgIGV4dGVybiBpbnQgdmFyZXZhbDsKLSNpZmRl ZiBEQ01EQlVGCi0gICAgZXh0ZXJuIGludCAqIHh2YXJldjsKLSNlbHNlCi0gICAgZXh0ZXJuIGlu dCB4dmFyZXZbXTsKLSNlbmRpZiAvKiBEQ01EQlVGICovCi0KLSAgICBpZiAoKHggPSBjbWtleSh2 YXJldmFsdGFiLAotCQkgICBudmFyZXZhbHRhYiwgCi0JCSAgICJNZXRob2QgZm9yIGV2YWx1YXRp bmcgXFwleCBhbmQgXFwmeFtdIHZhcmlhYmxlcyIsCi0JCSAgICIiLAotCQkgICB4eHN0cmluZykp IDwgMCkKLSAgICAgIHJldHVybih4KTsKLSAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCi0gICAg ICByZXR1cm4oeSk7Ci0gICAgeHZhcmV2W2NtZGx2bF0gPSB4OwotICAgIHZhcmV2YWwgPSB4Owot ICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci19Ci0KLSNpZmRlZiBDS19BTlNJQyAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBTRVQgQUxBUk0gKi8KLWludAotc2V0YWxhcm0obG9uZyB4eCkKLSNl bHNlCi1pbnQKLXNldGFsYXJtKHh4KSBsb25nIHh4OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0v KiBzZXRhbGFybSAqLyB7Ci0jaWZkZWYgQ09NTUVOVAotICAgIGludCB5eXl5LCBtbSwgZGQsIHg7 Ci0gICAgY2hhciAqczsKLSAgICBsb25nIHp6OwotICAgIGNoYXIgYnVmWzZdOwotI2VuZGlmIC8q IENPTU1FTlQgKi8KLSAgICBsb25nIHNlYywgamQ7Ci0gICAgY2hhciB4YnVmWzIwXSwgKiBwOwot Ci0gICAgZGVidWcoRjEwMSwic2V0YWxhcm0geHgiLCIiLHh4KTsKLSAgICBja19hbGFybSA9IDBM OyAgICAgICAgICAgICAgICAgICAgICAvKiAwID0gbm8gYWxhcm0gKGluIGNhc2Ugb2YgZXJyb3Ip ICovCi0gICAgaWYgKHh4IDwgMEwpIHsKLSAgICAgICAgcHJpbnRmKCIlbGQgLSBpbGxlZ2FsIHZh bHVlLCBtdXN0IGJlIDAgb3IgcG9zaXRpdmVcbiIsIHh4KTsKLSAgICAgICAgcmV0dXJuKC05KTsK LSAgICB9Ci0gICAgaWYgKHh4ID09IDBMKSB7ICAgICAgICAgICAgICAgICAgICAgLyogQ0xFQVIg QUxBUk0gKi8KLSAgICAgICAgYWxybV9kYXRlWzBdID0gTlVMOwotICAgICAgICBhbHJtX3RpbWVb MF0gPSBOVUw7Ci0gICAgICAgIHJldHVybigxKTsKLSAgICB9Ci0jaWZkZWYgQ09NTUVOVAotICAg IHggPSA4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCBjdXJyZW50IGRhdGUg Ki8KLSAgICBzID0gYWxybV9kYXRlOwotICAgIGlmICh6enN0cmluZygiXFx2KG5kYXRlKSIsJnMs JngpIDwgMCkgewotICAgICAgICBwcmludGYoIkludGVybmFsIGRhdGUgZXJyb3IsIHNvcnJ5Llxu Iik7Ci0gICAgICAgIGFscm1fZGF0ZVswXSA9IFNQOwotICAgICAgICByZXR1cm4oLTkpOwotICAg IH0KLSAgICB4ID0gNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHZXQgY3VycmVu dCB0aW1lICovCi0gICAgcyA9IGFscm1fdGltZTsKLSAgICBpZiAoenpzdHJpbmcoIlxcdihudGlt ZSkiLCZzLCZ4KSA8IDApIHsKLSAgICAgICAgcHJpbnRmKCJJbnRlcm5hbCB0aW1lIGVycm9yLCBz b3JyeS5cbiIpOwotICAgICAgICBhbHJtX3RpbWVbMF0gPSBTUDsKLSAgICAgICAgcmV0dXJuKC05 KTsKLSAgICB9Ci0gICAgc3ByaW50ZihidWYsIiUwNWxkIixhdG9sKGFscm1fdGltZSkpOyAvKiBT QUZFICgyMCkgKi8KLSAgICBja3N0cm5jcHkoYWxybV90aW1lLGJ1Ziw4KTsKLSAgICBkZWJ1ZyhG MTEwLCJTRVQgQUxBUk0gZGF0ZSAoMSkiLGFscm1fZGF0ZSwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJT RVQgQUxBUk0gdGltZSAoMSkiLGFscm1fdGltZSwwKTsKLQotICAgIGlmICgoenogPSBhdG9sKGFs cm1fdGltZSkgKyB4eCkgPCAwTCkgewotICAgICAgICBwcmludGYoIkludGVybmFsIHRpbWUgY29u dmVyc2lvbiBlcnJvciwgc29ycnkuXG4iKTsKLSAgICAgICAgcmV0dXJuKC05KTsKLSAgICB9Ci0g ICAgaWYgKHp6ID49IDg2NDAwTCkgeyAgICAgICAgICAgICAgICAgLyogQWxhcm0gY3Jvc3NlcyBt aWRuaWdodCAqLwotICAgICAgICBjaGFyIGRbMTBdOyAgICAgICAgICAgICAgICAgICAgIC8qIExv Y2FsIGRhdGUgYnVmZmVyICovCi0gICAgICAgIGludCBsYXN0ZGF5OyAgICAgICAgICAgICAgICAg ICAgLyogTGFzdCBkYXkgb2YgdGhpcyBtb250aCAqLwotCi0gICAgICAgIGNrc3RybmNweShkLGFs cm1fZGF0ZSw4KTsgICAgICAgLyogV2UnbGwgaGF2ZSB0byBjaGFuZ2UgdGhlIGRhdGUgKi8KLQot ICAgICAgICB4ID0gKHp6IC8gODY0MDBMKTsgICAgICAgICAgICAgIC8qIEhvdyBtYW55IGRheXMg YWZ0ZXIgdG9kYXkgKi8KLQotICAgICAgICBkZCA9IGF0b2koKGNoYXIgKikoZCs2KSk7ICAgICAg IC8qIFBhcnNlIHl5eXltbWRkICovCi0gICAgICAgIGRbNl0gPSBOVUw7ICAgICAgICAgICAgICAg ICAgICAgLyogaW50byB5eXl5LCBtbSwgZGQgLi4uICovCi0gICAgICAgIG1tID0gYXRvaSgoY2hh ciAqKShkKzQpKTsKLSAgICAgICAgZFs0XSA9IE5VTDsKLSAgICAgICAgeXl5eSA9IGF0b2koKGNo YXIgKilkKTsKLQotICAgICAgICAvKiBIb3cgbWFueSBkYXlzIGluIHRoaXMgbW9udGggKi8KLQot ICAgICAgICBsYXN0ZGF5ID0gbWRheXNbbW1dOwotICAgICAgICBpZiAobW0gPT0gMiAmJiB5eXl5 ICUgNCA9PSAwKSAgIC8qIFdvcmtzIHRocnUgMjA5OSBBRC4uLiAqLwotICAgICAgICAgIGxhc3Rk YXkrKzsKLQotICAgICAgICBpZiAoZGQgKyB4ID4gbGFzdGRheSkgeyAgICAgICAgIC8qIER1bWIg bG9vcCAqLwotICAgICAgICAgICAgaW50IHk7Ci0KLSAgICAgICAgICAgIHggLT0gKG1kYXlzW21t XSAtIGRkKTsgICAgICAvKiBEZWR1Y3QgcmVzdCBvZiB0aGlzIG1vbnRoJ3MgZGF5cyAqLwotCi0g ICAgICAgICAgICAvKiBUaGVyZSdzIGEgbW9yZSBlbGVnYW50IHdheSB0byBkbyB0aGlzLi4uICov Ci0KLSAgICAgICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICAgICAgbW0rKzsgICAgICAg ICAgICAgICAgICAgLyogTmV4dCBtb250aCAqLwotICAgICAgICAgICAgICAgIGlmIChtbSA+IDEy KSB7ICAgICAgICAgIC8qIFdyYXAgYXJvdW5kICovCi0gICAgICAgICAgICAgICAgICAgIG1tID0g MTsgICAgICAgICAgICAgLyogSmFuLCBuZXh0IHllYXIgKi8KLSAgICAgICAgICAgICAgICAgICAg eXl5eSsrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB5ID0gbWRheXNbbW1d OyAgICAgICAgICAvKiBEYXlzIGluIG5ldyBtb250aCAqLwotICAgICAgICAgICAgICAgIGlmICht bSA9PSAyICYmIHl5eXkgJSA0ID09IDApIC8qIEZlYiBpbiBsZWFwIHllYXIgKi8KLSAgICAgICAg ICAgICAgICAgIHkrKzsgICAgICAgICAgICAgICAgICAvKiBXb3JrcyB1bnRpbCAyMTAwIEFEICov Ci0gICAgICAgICAgICAgICAgaWYgKHggLSB5IDwgMSkKLSAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgIHggLT0geTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRk ID0geDsgICAgICAgICAgICAgICAgICAgICAvKiBEYXkgb2YgYWxhcm0gbW9udGggKi8KLSAgICAg ICAgfSBlbHNlIGRkICs9IHg7Ci0KLSAgICAgICAgc3ByaW50ZihhbHJtX2RhdGUsIiUwNGQlMDJk JTAyZCIseXl5eSxtbSxkZCk7IC8qIFNBRkUgKDI0KSAqLwotICAgICAgICB6eiA9IHp6ICUgODY0 MDBMOwotICAgIH0KLSAgICBzcHJpbnRmKGFscm1fdGltZSwiJWxkIix6eik7ICAgICAgICAvKiBT QUZFICgyNCkgKi8KLSAgICBkZWJ1ZyhGMTEwLCJTRVQgQUxBUk0gZGF0ZSAoMikiLGFscm1fZGF0 ZSwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJTRVQgQUxBUk0gdGltZSAoMikiLGFscm1fdGltZSwwKTsK LSAgICBja19hbGFybSA9IHh4OwotI2Vsc2UKLSAgICAvKiBKdWwgMTk5OCAqLwotICAgIGNrc3Ry bmNweSh4YnVmLGNrY3Z0ZGF0ZSgiIiwxKSwyMCk7IC8qIEdldCBjdXJyZW50IGRhdGUgYW5kIHRp bWUgKi8KLSAgICBwID0geGJ1ZjsKLSAgICBja3N0cm5jcHkoYWxybV9kYXRlLHhidWYsMTApOwot ICAgIGFscm1fZGF0ZVs4XSA9IE5VTDsKLSAgICBzZWMgPSBhdG9sKHArOSkgKiAzNjAwTCArIGF0 b2wocCsxMikgKiA2MEwgKyBhdG9sKHArMTUpOwotICAgIGRlYnVnKEYxMTAsIlNFVCBBTEFSTSBk YXRlICgxKSIsYWxybV9kYXRlLDApOwotICAgIGRlYnVnKEYxMDEsIlNFVCBBTEFSTSB0aW1lICgx KSIsIiIsc2VjKTsKLSAgICBpZiAoKHNlYyArPSB4eCkgPCAwTCkgewotICAgICAgICBwcmludGYo IkludGVybmFsIHRpbWUgY29udmVyc2lvbiBlcnJvciwgc29ycnkuXG4iKTsKLSAgICAgICAgcmV0 dXJuKC05KTsKLSAgICB9Ci0gICAgaWYgKHNlYyA+PSA4NjQwMEwpIHsgICAgICAgICAgICAgICAg LyogQWxhcm0gY3Jvc3NlcyBtaWRuaWdodCAqLwotICAgICAgICBsb25nIGRheXM7Ci0gICAgICAg IGRheXMgPSBzZWMgLyA4NjQwMEw7Ci0gICAgICAgIGpkID0gbWpkKHApICsgZGF5czsgICAgICAg ICAgICAgLyogR2V0IG1vZGlmaWVkIEp1bGlhbiBkYXRlICovCi0gICAgICAgIGNrc3RybmNweShh bHJtX2RhdGUsbWpkMmRhdGUoamQpLDEwKTsKLSAgICAgICAgc2VjICU9IDg2NDAwTDsKLSAgICB9 Ci0gICAgc3ByaW50ZihhbHJtX3RpbWUsIiUwNWxkIixzZWMpOyAgICAgLyogU0FGRSAoMjQpICov Ci0gICAgZGVidWcoRjExMCwiU0VUIEFMQVJNIGRhdGUgKDIpIixhbHJtX2RhdGUsMCk7Ci0gICAg ZGVidWcoRjExMCwiU0VUIEFMQVJNIHRpbWUgKDIpIixhbHJtX3RpbWUsMCk7Ci0gICAgY2tfYWxh cm0gPSAxOyAgICAgICAgICAgICAgICAgICAgICAgLyogQWxhcm0gaXMgc2V0ICovCi0KLSNlbmRp ZiAvKiBDT01NRU5UICovCi0gICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLX0KLSNlbmRpZiAvKiBO T1NQTCAqLwotCi0jaWZuZGVmIE5PU0VUS0VZCi1pbnQKLWRvc2V0a2V5KCkgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBTRVQgS0VZICovCi0gICAgaW50IHgsIHk7Ci0gICAgaW50IGZs YWcgPSAwOwotICAgIGludCBrYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEtleSBj b2RlICovCi0gICAgY2hhciAqczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogS2V5IGJp bmRpbmcgKi8KLSNpZm5kZWYgTk9LVkVSQlMKLSAgICBjaGFyICpwOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBXb3JrZXIgKi8KLSNlbmRpZiAvKiBOT0tWRVJCUyAqLwotI2lmZGVmIE9T MgotICAgIGV4dGVybiBpbnQgb3MyZ2tzOwotICAgIGV4dGVybiBpbnQgbXNra2V5czsKLSAgICBl eHRlcm4gaW50IGluaXR2aWs7Ci0jZW5kaWYgLyogT1MyICovCi0KLSAgICB4X2lmbnVtID0gMTsK LSAgICB5ID0gY21udW0oIm51bWVyaWMga2V5IGNvZGUsIG9yIHRoZSB3b3JkIENMRUFSLCIsIiIs MTAsJmtjLHh4c3RyaW5nKTsKLSAgICB4X2lmbnVtID0gMDsKLSAgICBpZiAoeSA8IDApIHsKLSAg ICAgICAgZGVidWcoRjExMSwiU0VUIEtFWSIsYXRtYnVmLHkpOwotICAgICAgICBpZiAoeSA9PSAt MikgeyAgICAgICAgICAgICAgICAgIC8qIE5vdCBhIHZhbGlkIG51bWJlciAqLwotICAgICAgICAg ICAgaWYgKCh5ID0gc3RybGVuKGF0bWJ1ZikpIDwgMCkgLyogQ2hlY2sgZm9yIFNFVCBLRVkgQ0xF QVIgKi8KLSAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgICAgIGlmIChja3N0cmNt cChhdG1idWYsImNsZWFyIix5LDApKQotICAgICAgICAgICAgICByZXR1cm4oLTIpOwotICAgICAg ICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0g ICAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgS01TSVpFOyB5KyspIHsKLSAgICAgICAgICAgICAg ICBrZXltYXBbeV0gPSAoS0VZKSB5OwotICAgICAgICAgICAgICAgIG1hY3JvdGFiW3ldID0gTlVM TDsKLSAgICAgICAgICAgIH0KLSNpZmRlZiBPUzIKLSAgICAgICAgICAgIGtleW1hcGluaXQoKTsg ICAgICAgICAgICAgICAvKiBTcGVjaWFsIE9TLzIgaW5pdGlhbGl6YXRpb25zICovCi0gICAgICAg ICAgICBpbml0dmlrID0gMTsgICAgICAgICAgICAgICAgLyogVXBkYXRlIHRoZSBWSUsgdGFibGUg Ki8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgIHJldHVybigxKTsKLSAgICAgICAgfSBl bHNlIGlmICh5ID09IC0zKSB7ICAgICAgICAgICAvKiBTRVQgS0VZIDxSZXR1cm4+ICovCi0gICAg ICAgICAgICBwcmludGYoIiBQcmVzcyBrZXkgdG8gYmUgZGVmaW5lZDogIik7IC8qIFByb21wdCBm b3IgYSBrZXlzdHJva2UgKi8KLSNpZmRlZiBVTklYCi0jaWZkZWYgTk9TRVRCVUYKLSAgICAgICAg ICAgIGZmbHVzaChzdGRvdXQpOwotI2VuZGlmIC8qIE5PU0VUQlVGICovCi0jZW5kaWYgLyogVU5J WCAqLwotICAgICAgICAgICAgY29uYmluKChjaGFyKWVzY2FwZSk7ICAgICAgIC8qIFB1dCB0ZXJt aW5hbCBpbiBiaW5hcnkgbW9kZSAqLwotI2lmZGVmIE9TMgotICAgICAgICAgICAgb3MyZ2tzID0g MDsgICAgICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIEt2ZXJiIHByZXByb2Nlc3NpbmcgKi8KLSNl bmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgIGtjID0gY29uZ2tzKDApOyAgICAgICAgICAgICAv KiBHZXQgY2hhcmFjdGVyIG9yIHNjYW4gY29kZSAqLwotI2lmZGVmIE9TMgotICAgICAgICAgICAg b3MyZ2tzID0gMTsgICAgICAgICAgICAgICAgIC8qIFR1cm4gb24gS3ZlcmIgcHJlcHJvY2Vzc2lu ZyAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsg ICAgICAgIC8qIFJlc3RvcmUgdGVybWluYWwgdG8gY2JyZWFrIG1vZGUgKi8KLSAgICAgICAgICAg IGlmIChrYyA8IDApIHsgICAgICAgICAgICAgICAvKiBDaGVjayBmb3IgZXJyb3IgKi8KLSAgICAg ICAgICAgICAgICBwcmludGYoIj9FcnJvciByZWFkaW5nIGtleVxuIik7Ci0gICAgICAgICAgICAg ICAgcmV0dXJuKDApOwotICAgICAgICAgICAgfQotI2lmZGVmIE9TMgotICAgICAgICAgICAgc2hv a2V5Y29kZShrYywtMSk7ICAgICAgICAgIC8qIFNob3cgY3VycmVudCBkZWZpbml0aW9uICovCi0j ZWxzZQotICAgICAgICAgICAgc2hva2V5Y29kZShrYyk7ICAgICAgICAgICAgIC8qIFNob3cgY3Vy cmVudCBkZWZpbml0aW9uICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICBmbGFnID0g MTsgICAgICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgaXQncyBhIG11bHRpbGluZSBjb21tYW5k ICovCi0gICAgICAgIH0gZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRXJyb3IgKi8K LSAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgfQotCi0gICAgLyogTm9ybWFsIFNFVCBLRVkgPHNj YW5jb2RlPiA8dmFsdWU+IGNvbW1hbmQuLi4gKi8KLQotI2lmZGVmIE9TMgotICAgIGlmIChtc2tr ZXlzKQotICAgICAga2MgPSBtc2t0b2NrKGtjKTsKLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgIGlm IChrYyA8IDAgfHwga2MgPj0gS01TSVpFKSB7Ci0gICAgICAgIHByaW50ZigiP2tleSBjb2RlIG11 c3QgYmUgYmV0d2VlbiAwIGFuZCAlZFxuIiwgS01TSVpFIC0gMSk7Ci0gICAgICAgIHJldHVybigt OSk7Ci0gICAgfQotICAgIGlmIChrYyA9PSBlc2NhcGUpIHsKLSAgICAgICAgcHJpbnRmKCJTb3Jy eSwgJWQgaXMgdGhlIENPTk5FQ1QtbW9kZSBlc2NhcGUgY2hhcmFjdGVyXG4iLGtjKTsKLSAgICAg ICAgcmV0dXJuKC05KTsKLSAgICB9Ci0jaWZkZWYgT1MyCi0gICAgd2lkZXJlc3VsdCA9IC0xOwot I2VuZGlmIC8qIE9TMiAqLwotICAgIGlmIChmbGFnKSB7Ci0gICAgICAgIGNtc2F2cChwc2F2ZSxQ Uk9NUFRMKTsKLSAgICAgICAgY21zZXRwKCIgRW50ZXIgbmV3IGRlZmluaXRpb246ICIpOwotICAg ICAgICBjbWluaShja3hlY2gpOwotICAgICAgICBjbWZsZ3MgPSAwOwotICAgICAgICBwcm9tcHQo TlVMTCk7Ci0gICAgfQotICBkZWZfYWdhaW46Ci0gICAgaWYgKGZsYWcpCi0gICAgICBjbXJlcygp OwotICAgIGlmICgoeSA9IGNtdHh0KCJrZXkgZGVmaW5pdGlvbixcblwKLW9yIEN0cmwtQyB0byBj YW5jZWwgdGhpcyBjb21tYW5kLFxuXAotb3IgRW50ZXIgdG8gcmVzdG9yZSBkZWZhdWx0IGRlZmlu aXRpb24iLAotICAgICAgICAgICAgICAgICAgICIiLCZzLE5VTEwpKSA8IDApIHsKLSAgICAgICAg aWYgKGZsYWcpICAgICAgICAgICAgICAgICAgICAgICAvKiBIYW5kbGUgcGFyc2UgZXJyb3JzICov Ci0gICAgICAgICAgZ290byBkZWZfYWdhaW47Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1 cm4oeSk7Ci0gICAgfQotICAgIHMgPSBicnN0cmlwKHMpOwotI2lmbmRlZiBOT0tWRVJCUwotICAg IHAgPSBzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNhdmUgdGhpcyBwbGFjZSAq LwotI2VuZGlmIC8qIE5PS1ZFUkJTICovCi0vKgotICBJZiB0aGUgZGVmaW5pdGlvbiBpbmNsdWRl ZCBhbnkgXEt2ZXJicywgcXVvdGUgdGhlIGJhY2tzbGFzaCBzbyB0aGUgXEt2ZXJiCi0gIHdpbGwg c3RpbGwgYmUgaW4gdGhlIGRlZmluaXRpb24gd2hlbiB0aGUga2V5IGlzIHByZXNzZWQuICBXZSBk b24ndCBkbyB0aGlzCi0gIGluIHp6c3RyaW5nKCksIGJlY2F1c2UgXEt2ZXJicyBhcmUgdmFsaWQg b25seSBpbiB0aGlzIGNvbnRleHQgYW5kIG5vd2hlcmUKLSAgZWxzZS4KLQotICBXZSB1c2UgdGhp cyBjb2RlIGFjdGl2ZSBmb3IgYWxsIHZlcnNpb25zIHRoYXQgc3VwcG9ydCBTRVQgS0VZLCBldmVu IGlmIHRoZXkKLSAgZG9uJ3Qgc3VwcG9ydCBcS3ZlcmJzLCBiZWNhdXNlIG90aGVyd2lzZSBcSyB3 b3VsZCBiZWhhdmUgZGlmZmVyZW50bHkgZm9yCi0gIGRpZmZlcmVudCB2ZXJzaW9ucy4KLSovCi0g ICAgZm9yICh4ID0gMCwgeSA9IDA7IHNbeF07IHgrKywgeSsrKSB7IC8qIENvbnZlcnQgXEsgdG8g XFxLICovCi0gICAgICAgIGlmICgoeCA+IDApICYmCi0gICAgICAgICAgICAoc1t4XSA9PSAnSycg fHwgc1t4XSA9PSAnaycpCi0gICAgICAgICAgICApIHsgICAgICAgICAgICAgICAgICAgICAgICAg LyogSGF2ZSBLICovCi0KLSAgICAgICAgICAgIGlmICgoeCA9PSAxICYmIHNbeC0xXSA9PSBDTURR KSB8fAotICAgICAgICAgICAgICAgICh4ID4gMSAmJiBzW3gtMV0gPT0gQ01EUSAmJiBzW3gtMl0g IT0gQ01EUSkpIHsKLSAgICAgICAgICAgICAgICBsaW5lW3krK10gPSBDTURROyAgICAgICAvKiBN YWtlIGl0IFxcSyAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHggPiAxICYmIHNb eC0xXSA9PSAneycgJiYgc1t4LTJdID09IENNRFEpIHsKLSAgICAgICAgICAgICAgICBsaW5lW3kt MV0gPSBDTURROyAgICAgICAvKiBIYXZlIFx7SyAqLwotICAgICAgICAgICAgICAgIGxpbmVbeSsr XSA9ICd7JzsgICAgICAgIC8qIE1ha2UgaXQgXFx7SyAqLwotICAgICAgICAgICAgfQotICAgICAg ICB9Ci0gICAgICAgIGxpbmVbeV0gPSBzW3hdOwotICAgIH0KLSAgICBsaW5lW3krK10gPSBOVUw7 ICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGUgKi8KLSAgICBzID0gbGluZSArIHkgKyAx OyAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byBhZnRlciBpdCAqLwotICAgIHggPSBMSU5C VUZTSVogLSAoaW50KSBzdHJsZW4obGluZSkgLSAxOyAvKiBDYWxjdWxhdGUgcmVtYWluaW5nIHNw YWNlICovCi0gICAgaWYgKCh4IDwgKExJTkJVRlNJWiAvIDIpKSB8fAotICAgICAgICAoenpzdHJp bmcobGluZSwgJnMsICZ4KSA8IDApKSB7IC8qIEV4cGFuZCB2YXJpYWJsZXMsIGV0Yy4gKi8KLSAg ICAgICAgcHJpbnRmKCI/S2V5IGRlZmluaXRpb24gdG9vIGxvbmdcbiIpOwotICAgICAgICBpZiAo ZmxhZykgY21zZXRwKHBzYXZlKTsKLSAgICAgICAgcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgcyA9 IGxpbmUgKyB5ICsgMTsgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gcmVzdWx0LiAqLwot Ci0jaWZuZGVmIE5PS1ZFUkJTCi0vKgotICBTcGVjaWFsIGNhc2U6IHNlZSBpZiB0aGUgZGVmaW5p dGlvbiBzdGFydHMgd2l0aCBhIFxLdmVyYi4KLSAgSWYgaXQgZG9lcywgcG9pbnQgdG8gaXQgd2l0 aCBwLCBvdGhlcndpc2Ugc2V0IHAgdG8gTlVMTC4KLSovCi0gICAgcCA9IHM7Ci0gICAgaWYgKCpw KysgPT0gQ01EUSkgewotICAgICAgICBpZiAoKnAgPT0gJ3snKSBwKys7Ci0gICAgICAgIHAgPSAo KnAgPT0gJ2snIHx8ICpwID09ICdLJykgPyBwICsgMSA6IE5VTEw7Ci0gICAgfQotI2VuZGlmIC8q IE5PS1ZFUkJTICovCi0KLSAgICBpZiAobWFjcm90YWJba2NdKSB7ICAgICAgICAgICAgICAgICAv KiBQb3NzaWJseSBmcmVlIG9sZCBtYWNybyBmcm9tIGtleS4gKi8KLSAgICAgICAgZnJlZSgoY2hh ciAqKW1hY3JvdGFiW2tjXSk7Ci0gICAgICAgIG1hY3JvdGFiW2tjXSA9IE5VTEw7Ci0gICAgfQot ICAgIHN3aXRjaCAoc3RybGVuKHMpKSB7ICAgICAgICAgICAgICAgIC8qIEFjdGlvbiBkZXBlbmRz IG9uIGxlbmd0aCAqLwotICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFJlc2V0IHRvIGRlZmF1bHQgYmluZGluZyAqLwotICAgICAgICBrZXltYXBba2NdID0gKEtFWSkg a2M7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFNpbmdsZSBjaGFyYWN0ZXIgKi8KLSAgICAgICAga2V5bWFwW2tjXSA9IChDSEFSKSAq czsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogQ2hhcmFjdGVyIHN0cmluZyAqLwotI2lmbmRlZiBOT0tWRVJCUwotICAgICAgICBpZiAo cCkgewotICAgICAgICAgICAgeSA9IHhsb29rdXAoa3ZlcmJzLHAsbmt2ZXJicywmeCk7IC8qIExv b2sgaXQgdXAgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMDEsInNldCBrZXkga3ZlcmIgbG9va3Vw IiwwLHkpOyAvKiBleGFjdCBtYXRjaCByZXF1aXJlZCAqLwotICAgICAgICAgICAgaWYgKHkgPiAt MSkgewotICAgICAgICAgICAgICAgIGtleW1hcFtrY10gPSBGX0tWRVJCIHwgeTsKLSAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIE5PS1ZF UkJTICovCi0gICAgICAgIGtleW1hcFtrY10gPSAoS0VZKSBrYzsKLSAgICAgICAgbWFjcm90YWJb a2NdID0gKE1BQ1JPKSBtYWxsb2Moc3RybGVuKHMpKzEpOwotICAgICAgICBpZiAobWFjcm90YWJb a2NdKQotICAgICAgICAgIHN0cmNweSgoY2hhciAqKSBtYWNyb3RhYltrY10sIHMpOyAvKiBzYWZl ICovCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoZmxhZykgY21zZXRwKHBzYXZlKTsK LSNpZmRlZiBPUzIKLSAgICBpbml0dmlrID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBV cGRhdGUgVklLIHRhYmxlICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgcmV0dXJuKDEpOwotfQot I2VuZGlmIC8qIE5PU0VUS0VZICovCi0KLSNpZmRlZiBTVE9QQklUUwotc3RydWN0IGtleXRhYiBz dG9wdGJsW10gPSB7Ci0gICAgeyAiMSIsIDEsIDAgfSwKLSAgICB7ICIyIiwgMiwgMCB9Ci19Owot I2VuZGlmIC8qIFNUT1BCSVRTICovCi0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNlcnRibFtdID0g ewotICAgIHsgIjdFMSIsIDAsIDAgfSwKLSAgICB7ICI3RTIiLCAxLCAwIH0sCi0gICAgeyAiN00x IiwgMiwgMCB9LAotICAgIHsgIjdNMiIsIDMsIDAgfSwKLSAgICB7ICI3TzEiLCA0LCAwIH0sCi0g ICAgeyAiN08yIiwgNSwgMCB9LAotICAgIHsgIjdTMSIsIDYsIDAgfSwKLSAgICB7ICI3UzIiLCA3 LCAwIH0sCi0jaWZkZWYgSFdQQVJJVFkKLSAgICB7ICI4RTEiLCA5LCAwIH0sCi0gICAgeyAiOEUy IiwgMTAsIDAgfSwKLSNlbmRpZiAvKiBIV1BBUklUWSAqLwotICAgIHsgIjhOMSIsIDgsIDAgfSwK LSNpZmRlZiBIV1BBUklUWQotICAgIHsgIjhOMiIsIDExLCAwIH0sCi0gICAgeyAiOE8xIiwgMTIs IDAgfSwKLSAgICB7ICI4TzIiLCAxMywgMCB9LAotI2VuZGlmIC8qIEhXUEFSSVRZICovCi0gICAg eyAiIiwgMCwgMCB9Ci19Owotc3RhdGljIGludCBuc2VydGJsID0gKHNpemVvZihzZXJ0YmwpIC8g c2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLXN0YXRpYyBjaGFyICogc2VybmFtW10gPSB7 ICAgICAgICAgICAgICAvKiBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHNlcnRibFtdICovCi0gICI3 RTEiLCAiN0UyIiwgIjdNMSIsICI3TTIiLCAiN08xIiwgIjdPMiIsICI3UzEiLCAiN1MyIiwKLSAg IjhOMSIsICI4RTEiLCAiOEUyIiwgIjhOMiIsICI4TzEiLCAiOE8yIgotfTsKLQotc3RhdGljIHN0 cnVjdCBrZXl0YWIgb3B0c3RhYltdID0geyAgICAgIC8qIFNFVCBPUFRJT05TIHRhYmxlICovCi0j aWZuZGVmIE5PRlJJTExTCi0gICAgeyAiZGVsZXRlIiwgICAgWFhERUwsICAgMH0sICAgICAgICAg ICAgLyogREVMRVRFICovCi0jZW5kaWYgLyogTk9GUklMTFMgKi8KLSAgICB7ICJkaXJlY3Rvcnki LCBYWERJUiwgICAwfSwgICAgICAgICAvKiBESVJFQ1RPUlkgKi8KLSNpZmRlZiBDS1BVUkdFCi0g ICAgeyAicHVyZ2UiLCAgICAgWFhQVVJHRSwgMH0sICAgICAgICAgLyogUFVSR0UgKi8KLSNlbmRp ZiAvKiBDS1BVUkdFICovCi0gICAgeyAidHlwZSIsICAgICAgWFhUWVAsICAgMH0sICAgICAgICAg LyogVFlQRSAqLwotICAgIHsgIiIsIDAsIDB9Ci19Owotc3RhdGljIGludCBub3B0c3RhYiA9ICAo c2l6ZW9mKG9wdHN0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLSNpZm5kZWYg Tk9YRkVSCi0vKgotICBQUk9UT0NPTCBTRUxFQ1RJT04uICBLZXJtaXQgaXMgYWx3YXlzIGF2YWls YWJsZS4gIElmIENLX1hZWiBpcyBkZWZpbmVkIGF0Ci0gIGNvbXBpbGUgdGltZSwgdGhlbiB0aGUg b3RoZXJzIGJlY29tZSBzZWxlY3Rpb25zIGFsc28uICBJbiBPUy8yIGFuZAotICBXaW5kb3dzLCB0 aGV5IGFyZSBpbnRlZ3JhdGVkIGFuZCB0aGUgdmFyaW91cyBTRVQgY29tbWFuZHMgKGUuZy4gInNl dCBmaWxlCi0gIHR5cGUiKSBhZmZlY3QgdGhlbSBhcyB0aGV5IHdvdWxkIEtlcm1pdC4gIEluIG90 aGVyIE9TJ3MgKFVOSVgsIFZNUywgZXRjKSwKLSAgdGhleSBhcmUgZXh0ZXJuYWwgcHJvdG9jb2xz IHdoaWNoIGFyZSBydW4gdmlhIEtlcm1pdCdzIFJFRElSRUNUIG1lY2hhbmlzbS4KLSAgQWxsIHdl IGRvIGlzIGNvbGxlY3QgYW5kIHZlcmlmeSB0aGUgZmlsZW5hbWVzIGFuZCBwYXNzIHRoZW0gYWxv bmcgdG8gdGhlCi0gIGV4dGVybmFsIHByb3RvY29sLgotKi8KLXN0cnVjdCBrZXl0YWIgcHJvdG9z W10gPSB7Ci0jaWZkZWYgQ0tfWFlaCi0gICAgImciLCAgICAgICAgICBQUk9UT19HLCAgQ01fSU5W LAotI2VuZGlmIC8qIENLX1hZWiAqLwotICAgICJrZXJtaXQiLCAgICAgUFJPVE9fSywgIDAsCi0j aWZkZWYgQ0tfWFlaCi0gICAgIm90aGVyIiwgICAgICBQUk9UT19PLCAgMCwKLSAgICAieCIsICAg ICAgICAgIFBST1RPX1gsICBDTV9JTlZ8Q01fQUJSLAotICAgICJ4bW9kZW0iLCAgICAgUFJPVE9f WCwgIDAsCi0gICAgInhtb2RlbS1jcmMiLCBQUk9UT19YQywgMCwKLSAgICAieSIsICAgICAgICAg IFBST1RPX1ksICBDTV9JTlZ8Q01fQUJSLAotICAgICJ5bW9kZW0iLCAgICAgUFJPVE9fWSwgIDAs Ci0gICAgInltb2RlbS1nIiwgICBQUk9UT19HLCAgMCwKLSAgICAiem1vZGVtIiwgICAgIFBST1RP X1osICAwCi0jZW5kaWYgLyogQ0tfWFlaICovCi19OwotaW50IG5wcm90b3MgPSAgKHNpemVvZihw cm90b3MpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotI2lmbmRlZiBYWVpfSU5URVJOQUwK LSNpZm5kZWYgTk9QVVNICi0jZGVmaW5lIEVYUF9IQU5ETEVSIDEKLSNkZWZpbmUgRVhQX1NUREVS UiAgMgotI2RlZmluZSBFWFBfVElNTyAgICAzCi0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGV4dHBy b3RhYltdID0gewotICAgIHsgImhhbmRsZXIiLCAgICAgICAgICBFWFBfSEFORExFUiwgMCB9LAot ICAgIHsgInJlZGlyZWN0LXN0ZGVyciIsICBFWFBfU1RERVJSLCAwIH0sCi0gICAgeyAidGltZW91 dCIsICAgICAgICAgIEVYUF9USU1PLCAwIH0KLX07Ci1zdGF0aWMgaW50IG54dHByb3RhYiA9ICAo c2l6ZW9mKGV4dHByb3RhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotI2VuZGlmCS8qIE5P UFVTSCAqLwotI2VuZGlmCS8qIFhZWl9JTlRFUk5BTCAqLwotCi0jZGVmaW5lIFhQQ01ETEVOIDcx Ci0KLV9QUk9UT1RZUChzdGF0aWMgaW50IHByb3RvZmllbGQsIChjaGFyICosIGNoYXIgKiwgY2hh ciAqKSk7Ci1fUFJPVE9UWVAoc3RhdGljIGludCBzZXRwcm90bywgKHZvaWQpKTsKLQotc3RhdGlj IGludAotcHJvdG9maWVsZChjdXJyZW50LCBoZWxwLCBweCkgY2hhciAqIGN1cnJlbnQsICogaGVs cCwgKiBweDsgewotCi0gICAgY2hhciAqcywgdG1wYnVmW1hQQ01ETEVOKzFdOwotICAgIGludCB4 OwotCi0gICAgaWYgKGN1cnJlbnQpICAgICAgICAgICAgICAgICAgICAgICAgLyogUHV0IGJyYWNl cyBhcm91bmQgZGVmYXVsdCAqLwotICAgICAgY2ttYWttc2codG1wYnVmLFRNUEJVRlNJWiwieyIs Y3VycmVudCwifSIsTlVMTCk7Ci0gICAgZWxzZQotICAgICAgdG1wYnVmWzBdID0gTlVMOwotCi0g ICAgaWYgKCh4ID0gY21mbGQoaGVscCwgKGNoYXIgKil0bXBidWYsICZzLCB4eHN0cmluZykpIDwg MCkKLSAgICAgIHJldHVybih4KTsKLSAgICBpZiAoKGludClzdHJsZW4ocykgPiBYUENNRExFTikg ewotICAgICAgICBwcmludGYoIj9Tb3JyeSAtIG1heGltdW0gbGVuZ3RoIGlzICVkXG4iLCBYUENN RExFTik7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfSBlbHNlIGlmICgqcykgewotICAgICAg ICBzdHJjcHkocHgscyk7ICAgICAgICAgICAgICAgICAgIC8qIHNhZmUgKi8KLSAgICB9IGVsc2Ug ewotICAgICAgICBweCA9IE5VTEw7Ci0gICAgfQotICAgIHJldHVybih4KTsKLX0KLQotc3RhdGlj IGludAotc2V0cHJvdG8oKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbGVjdCBh IGZpbGUgdHJhbnNmZXIgcHJvdG9jb2wgKi8KLSAgICAvKiBjaGFyICogcyA9IE5VTEw7ICovCi0g ICAgaW50IHggPSAwLCB5OwotICAgIGNoYXIgczFbWFBDTURMRU4rMV0sIHMyW1hQQ01ETEVOKzFd LCBzM1tYUENNRExFTisxXTsKLSAgICBjaGFyIHM0W1hQQ01ETEVOKzFdLCBzNVtYUENNRExFTisx XSwgczZbWFBDTURMRU4rMV0sIHM3W1hQQ01ETEVOKzFdOwotICAgIGNoYXIgKiBwMSA9IHMxLCAq IHAyID0gczIsICpwMyA9IHMzOwotICAgIGNoYXIgKiBwNCA9IHM0LCAqIHA1ID0gczUsICpwNiA9 IHM2LCAqcDcgPSBzNzsKLQotI2lmZGVmIFhZWl9JTlRFUk5BTAotICAgIGV4dGVybiBpbnQgcF9h dmFpbDsKLSNlbHNlCi0jaWZuZGVmIENLX1JFRElSCi0gICAgeCA9IDE7Ci0jZW5kaWYgLyogQ0tf UkVESVIgKi8KLSNlbmRpZiAvKiBYWVpfSU5URVJOQUwgKi8KLSAgICBzMVswXSA9IE5VTDsKLSAg ICBzMlswXSA9IE5VTDsKLSAgICBzM1swXSA9IE5VTDsKLSAgICBzNFswXSA9IE5VTDsKLSAgICBz NVswXSA9IE5VTDsKLSAgICBzNlswXSA9IE5VTDsKLQotICAgIGlmICgoeSA9IGNta2V5KHByb3Rv cyxucHJvdG9zLCIiLCJrZXJtaXQiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgcmV0dXJuKHkpOwot Ci0gICAgaWYgKHggJiYgeSAhPSBQUk9UT19LKSB7Ci0gICAgICAgIHByaW50ZigKLSAgICAgICAg ICAgIj9Tb3JyeSwgUkVESVJFQ1QgY2FwYWJpbGl0eSByZXF1aXJlZCBmb3IgZXh0ZXJuYWwgcHJv dG9jb2xzLlxuIik7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfQotICAgIGlmICgoeCA9IHBy b3RvZmllbGQocHRhYlt5XS5oX2JfaW5pdCwKLSAgICAgIk9wdGlvbmFsIGNvbW1hbmQgdG8gc2Vu ZCB0byBob3N0IHByaW9yIHRvIHVwbG9hZGluZyBpbiBiaW5hcnkgbW9kZSIsCi0gICAgICAgICAg ICAgICBwMSkpIDwgMCkgewotICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAgICAgICAgcHJv dG9jb2wgPSB5OyAgICAgICAgICAgICAgIC8qIFNldCBwcm90b2NvbCBidXQgZG9uJ3QgY2hhbmdl ICovCi0gICAgICAgICAgICByZXR1cm4oMSk7ICAgICAgICAgICAgICAgICAgLyogYW55dGhpbmcg ZWxzZSAqLwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgfQotICAg IGlmICgoeCA9IHByb3RvZmllbGQocHRhYlt5XS5oX3RfaW5pdCwKLSAgICAgIk9wdGlvbmFsIGNv bW1hbmQgdG8gc2VuZCB0byBob3N0IHByaW9yIHRvIHVwbG9hZGluZyBpbiB0ZXh0IG1vZGUiLAot ICAgICAgICAgICAgICAgcDIpKSA8IDApIHsKLSAgICAgICAgaWYgKHggPT0gLTMpCi0gICAgICAg ICAgZ290byBwcm90b2V4aXQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4oeCk7Ci0g ICAgfQotCi0gICAgaWYgKHkgPT0gUFJPVE9fSykgewotICAgICAgICBpZiAoKHggPSBwcm90b2Zp ZWxkKHB0YWJbeV0uaF94X2luaXQsCi0gICAgICAgICAgICAgICAgICAgICJPcHRpb25hbCBjb21t YW5kIHRvIHNlbmQgdG8gaG9zdCB0byBzdGFydCBLZXJtaXQgc2VydmVyIiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwMykpIDwgMCkgewotICAgICAgICAgICAgaWYgKHggPT0gLTMpCi0g ICAgICAgICAgICAgIGdvdG8gcHJvdG9leGl0OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg ICAgICByZXR1cm4oeCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLQotI2lmbmRlZiBYWVpfSU5URVJO QUwgICAgICAgICAgICAgICAgICAgIC8qIElmIFhZWk1PREVNIGFyZSBleHRlcm5hbC4uLiAqLwot Ci0gICAgaWYgKHkgIT0gUFJPVE9fSykgewotICAgICAgICBpZiAoKHggPSBwcm90b2ZpZWxkKHB0 YWJbeV0ucF9iX3NjbWQsCi0gICAgICAgICAgICAgICAgICJFeHRlcm5hbCBjb21tYW5kIHRvIFNF TkQgaW4gQklOQVJZIG1vZGUgd2l0aCB0aGlzIHByb3RvY29sIiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwNCkpIDwgMCkgewotICAgICAgICAgICAgaWYgKHggPT0gLTMpCi0gICAgICAg ICAgICAgIGdvdG8gcHJvdG9leGl0OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBy ZXR1cm4oeCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCh4ID0gcHJvdG9maWVsZChwdGFiW3ld LnBfdF9zY21kLAotICAgICAgICAgICAgICAgICAiRXh0ZXJuYWwgY29tbWFuZCB0byBTRU5EIGlu IFRFWFQgbW9kZSB3aXRoIHRoaXMgcHJvdG9jb2wiLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHA1KSkgPCAwKSB7Ci0gICAgICAgICAgICBpZiAoeCA9PSAtMykKLSAgICAgICAgICAgICAg Z290byBwcm90b2V4aXQ7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHJldHVybih4 KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKHggPSBwcm90b2ZpZWxkKHB0YWJbeV0ucF9iX3Jj bWQsCi0gICAgICAgICAgICAgICAiRXh0ZXJuYWwgY29tbWFuZCB0byBSRUNFSVZFIGluIEJJTkFS WSBtb2RlIHdpdGggdGhpcyBwcm90b2NvbCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg cDYpKSA8IDApIHsKLSAgICAgICAgICAgIGlmICh4ID09IC0zKQotICAgICAgICAgICAgICBnb3Rv IHByb3RvZXhpdDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcmV0dXJuKHgpOwot ICAgICAgICB9Ci0gICAgICAgIGlmICgoeCA9IHByb3RvZmllbGQocHRhYlt5XS5wX3RfcmNtZCwK LSAgICAgICAgICAgICAgICAgIkV4dGVybmFsIGNvbW1hbmQgdG8gUkVDRUlWRSBpbiBURVhUIG1v ZGUgd2l0aCB0aGlzIHByb3RvY29sIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwNykp IDwgMCkgewotICAgICAgICAgICAgaWYgKHggPT0gLTMpCi0gICAgICAgICAgICAgIGdvdG8gcHJv dG9leGl0OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAg ICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogWFlaX0lOVEVSTkFMICovCi0KLSAgICBpZiAoKHggPSBj bWNmbSgpKSA8IDApICAgICAgICAgICAgICAvKiBDb25maXJtIHRoZSBjb21tYW5kICovCi0gICAg ICByZXR1cm4oeCk7Ci0KLXByb3RvZXhpdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBDb21tb24gZXhpdCBmcm9tIHRoaXMgcm91dGluZSAqLwotCi0jaWZkZWYgWFlaX0lOVEVSTkFM Ci0gICAgaWYgKCFwX2F2YWlsKSB7Ci0gICAgICAgIGJsZWVwKEJQX1dBUk4pOwotICAgICAgICBw cmludGYoIlxuP1gsWSwgYW5kIFptb2RlbSBhcmUgdW5hdmFpbGFibGVcbiIpOwotICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDApOwotICAgIH0KLSNlbmRpZiAvKiBYWVpfSU5URVJOQUwgKi8KLQot ICAgIHAxID0gYnJzdHJpcChwMSk7Ci0gICAgcDIgPSBicnN0cmlwKHAyKTsKLSAgICBwMyA9IGJy c3RyaXAocDMpOwotICAgIHA0ID0gYnJzdHJpcChwNCk7Ci0gICAgcDUgPSBicnN0cmlwKHA1KTsK LSAgICBwNiA9IGJyc3RyaXAocDYpOwotICAgIHA3ID0gYnJzdHJpcChwNyk7Ci0gICAgaW5pdHBy b3RvKHkscDEscDIscDMscDQscDUscDYscDcpOwotICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci19 Ci0KLSNpZm5kZWYgTk9QVVNICi0jaWZuZGVmIFhZWl9JTlRFUk5BTAotCi0jZGVmaW5lIERFRl9F WFBfVElNTyAxMgkgLyogRGVmYXVsdCB0aW1lb3V0IGZvciBleHRlcm5hbCBwcm90b2NvbCAoc2Vj b25kcykgKi8KLQotaW50IGV4cF9oYW5kbGVyID0gMDsJCQkvKiBUaGVzZSBhcmUgZXhwb3J0ZWQg Ki8KLWludCBleHBfdGltbyA9IERFRl9FWFBfVElNTzsKLWludCBleHBfc3RkZXJyID0gU0VUX0FV VE87Ci0KLVZPSUQKLXNob2V4dGVybigpIHsJCQkJLyogSW52b2tlZCBieSBTSE9XIFBST1RPQ09M ICovCi0gICAgcHJpbnRmKCJcbiBFeHRlcm5hbC1wcm90b2NvbCBoYW5kbGVyOiAgICAgICAgICVz XG4iLAotCSAgIGV4cF9oYW5kbGVyID8gKGV4cF9oYW5kbGVyID09IDEgPyAicHR5IiA6ICJzeXN0 ZW0iKSA6ICJhdXRvbWF0aWMiKTsKLSNpZmRlZiBDT01NRU5UCi0gICAgcHJpbnRmKCIgRXh0ZXJu YWwtcHJvdG9jb2wgcmVkaXJlY3Qtc3RkZXJyOiAlc1xuIiwgc2hvd29vYShleHBfc3RkZXJyKSk7 Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwotICAgIHByaW50ZigiIEV4dGVybmFsLXByb3RvY29sIHRp bWVvdXQ6ICAgICAgICAgJWQgKHNlYylcbiIsIGV4cF90aW1vKTsKLX0KLQotc3RhdGljIHN0cnVj dCBrZXl0YWIgc2V0ZXh0ZXJuaGFuZGxlcltdID0gewotICAgIHsgImF1dG9tYXRpYyIsIDAsIDAg fSwKLSAgICB7ICJwdHkiLCAgICAgICAxLCAwIH0sCi0gICAgeyAic3lzdGVtIiwgICAgMiwgMCB9 Ci19OwotCi1pbnQKLXNldGV4dGVybigpIHsJCQkJLyogU0VUIEVYVEVSTkFMLVBST1RPQ09MICov Ci0gICAgaW50IHgsIHk7Ci0gICAgaWYgKCh4ID0gY21rZXkoZXh0cHJvdGFiLG54dHByb3RhYiwi IiwiIix4eHN0cmluZykpIDwgMCkKLSAgICAgIHJldHVybih4KTsKLSAgICBzd2l0Y2ggKHgpIHsK LSAgICAgIGNhc2UgRVhQX0hBTkRMRVI6Ci0JaWYgKCh4ID0gY21rZXkoc2V0ZXh0ZXJuaGFuZGxl ciwzLCIiLCJhdXRvbWF0aWMiLHh4c3RyaW5nKSkgPCAwKQotCSAgcmV0dXJuKHgpOwotCWlmICgo eSA9IGNtY2ZtKCkpIDwgMCkKLQkgIHJldHVybih5KTsKLQlleHBfaGFuZGxlciA9IHg7Ci0JYnJl YWs7Ci0JCi0jaWZkZWYgQ09NTUVOVAotICAgICAgY2FzZSBFWFBfU1RERVJSOgotCWlmICgoeCA9 IGNta2V5KG9vYXRhYiwzLCIiLCJhdXRvbWF0aWMiLHh4c3RyaW5nKSkgPCAwKQotCSAgcmV0dXJu KHgpOwotCWlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKLQkgIHJldHVybih5KTsKLQlleHBfc3RkZXJy ID0geDsKLQlicmVhazsKLSNlbmRpZgkvKiBDT01NRU5UICovCi0KLSAgICAgIGNhc2UgRVhQX1RJ TU86Ci0JeSA9IGNtbnVtKCJJbmFjdGl2aXR5IHRpbWVvdXQsIHNlY29uZHMsIixja2l0b2EoREVG X0VYUF9USU1PKSwKLQkJICAxMCwmeCx4eHN0cmluZyk7Ci0gICAgICAgIHJldHVybihzZXRudW0o JmV4cF90aW1vLHgseSwtMSkpOwotICAgIH0KLSAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotfQot I2VuZGlmCS8qIFhZWl9JTlRFUk5BTCAqLwotI2VuZGlmCS8qIE5PUFVTSCAqLwotCi1pbnQKLXNl dGRlc3QoKSB7Ci0gICAgaW50IHgsIHk7Ci0gICAgaWYgKCh5ID0gY21rZXkoZGVzdHRhYixuZGVz dHMsIiIsImRpc2siLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgaWYgKCh4ID0gY21j Zm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgZGVzdCA9IHk7Ci0gICAgcmV0dXJuKDEpOwotfQot I2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZkZWYgREVDTkVUCi1zdHJ1Y3Qga2V5dGFiIGRuZXR0 YWJbXSA9IHsKLSNpZm5kZWYgT1MyT05MWQotICAgICJjdGVybSIsIE5QX0NURVJNLCAwLAotI2Vu ZGlmIC8qIE9TMk9OTFkgKi8KLSAgICAibGF0IiwgICBOUF9MQVQsICAgMAotfTsKLWludCBuZG5l dCA9ICAoc2l6ZW9mKGRuZXR0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLSNlbmRpZiAv KiBERUNORVQgKi8KLQotLyogIFMgRSBUIFAgUiBJIE4gVCBFIFIgIC0tICBTRVQgUFJJTlRFUiBj b21tYW5kICAqLwotCi0jaWZkZWYgUFJJTlRTV0kKLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHBybnRh YltdID0geyAgICAgICAvKiBTRVQgUFJJTlRFUiBzd2l0Y2hlcyAqLwotICAgICIvYmlkaXJlY3Rp b25hbCIsICAgIFBSTl9CSUQsIDAsCi0jaWZkZWYgT1MyCi0gICAgIi9jaGFyYWN0ZXItc2V0Iiwg ICAgUFJOX0NTLCAgQ01fQVJHLAotI2VuZGlmIC8qIE9TMiAqLwotICAgICIvY29tbWFuZCIsICAg ICAgICAgIFBSTl9QSVAsIENNX0FSRywKLSAgICAiL2Rvcy1kZXZpY2UiLCAgICAgICBQUk5fRE9T LCBDTV9BUkcsCi0gICAgIi9lbmQtb2Ytam9iLXN0cmluZyIsUFJOX1RSTSwgQ01fQVJHLAotICAg ICIvZmlsZSIsICAgICAgICAgICAgIFBSTl9GSUwsIENNX0FSRywKLSNpZmRlZiBCUFJJTlQKLSAg ICAiL2Zsb3ctY29udHJvbCIsICAgICBQUk5fRkxPLCBDTV9BUkcsCi0jZW5kaWYgLyogQlBSSU5U ICovCi0gICAgIi9qb2ItaGVhZGVyLWZpbGUiLCAgUFJOX1NFUCwgQ01fQVJHLAotI2lmZGVmIE9T MgotICAgICIvbGVuZ3RoIiwgICAgICAgICAgIFBSTl9MRU4sIENNX0FSRywKLSNlbmRpZiAvKiBP UzIgKi8KLSAgICAiL25vbmUiLCAgICAgICAgICAgICBQUk5fTk9OLCAwLAotI2lmZGVmIE9TMgot ICAgICIvbm9wb3N0c2NyaXB0IiwgICAgIFBSTl9SQVcsIDAsCi0gICAgIi9ub3BzIiwgICAgICAg ICAgICAgUFJOX1JBVywgQ01fSU5WLAotI2VuZGlmIC8qIE9TMiAqLwotICAgICIvb3V0cHV0LW9u bHkiLCAgICAgIFBSTl9PVVQsIDAsCi0jaWZkZWYgQlBSSU5UCi0gICAgIi9wYXJpdHkiLCAgICAg ICAgICAgUFJOX1BBUiwgQ01fQVJHLAotI2VuZGlmIC8qIEJQUklOVCAqLwotICAgICIvcGlwZSIs ICAgICAgICAgICAgIFBSTl9QSVAsIENNX0FSR3xDTV9JTlYsCi0jaWZkZWYgT1MyCi0gICAgIi9w b3N0c2NyaXB0IiwgICAgICAgUFJOX1BTLCAgMCwKLSAgICAiL3BzIiwgICAgICAgICAgICAgICBQ Uk5fUFMsICBDTV9JTlYsCi0jZW5kaWYgLyogT1MyICovCi0gICAgIi9zZXBhcmF0b3IiLCAgICAg ICAgUFJOX1NFUCwgQ01fQVJHfENNX0lOViwKLSNpZmRlZiBCUFJJTlQKLSAgICAiL3NwZWVkIiwg ICAgICAgICAgICBQUk5fU1BELCBDTV9BUkcsCi0jZW5kaWYgLyogQlBSSU5UICovCi0gICAgIi90 aW1lb3V0IiwgICAgICAgICAgUFJOX1RNTywgQ01fQVJHLAotICAgICIvdGVybWluYXRvciIsICAg ICAgIFBSTl9UUk0sIENNX0FSR3xDTV9JTlYsCi0jaWZkZWYgT1MyCi0jaWZkZWYgTlQKLSAgICAi L3ciLCAgICAgICAgICAgICAgICBQUk5fV0lOLCBDTV9BUkd8Q01fQUJSfENNX0lOViwKLSAgICAi L3dpIiwgICAgICAgICAgICAgICBQUk5fV0lOLCBDTV9BUkd8Q01fQUJSfENNX0lOViwKLSNlbmRp ZiAvKiBOVCAqLwotICAgICIvd2lkdGgiLCAgICAgICAgICAgIFBSTl9XSUQsIENNX0FSRywKLSNl bmRpZiAvKiBPUzIgKi8KLSNpZmRlZiBOVAotICAgICIvd2luZG93cy1xdWV1ZSIsICAgIFBSTl9X SU4sIENNX0FSRywKLSNlbmRpZiAvKiBOVCAqLwotICAgICIiLCAgICAgICAgICAgICAgICAgMCwg ICAgICAwCi19OwotaW50IG5wcm5zd2kgPSAgKHNpemVvZihwcm50YWIpIC8gc2l6ZW9mKHN0cnVj dCBrZXl0YWIpKSAtIDE7Ci0jZW5kaWYgLyogUFJJTlRTV0kgKi8KLQotc3RhdGljIGludAotc2V0 cHJpbnRlcih4eCkgaW50IHh4OyB7Ci0gICAgaW50IHgsIHk7Ci0gICAgY2hhciAqIHM7Ci0gICAg Y2hhciAqIGRlZm5hbWUgPSBOVUxMOwotI2lmZGVmIE9TMgotICAgIGV4dGVybiBpbnQgcHJuY3M7 Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBCUFJJTlQKLSAgICBjaGFyIHBvcnRidWZbNjRd OwotICAgIGxvbmcgcG9ydHNwZWVkID0gMEw7Ci0gICAgaW50IHBvcnRwYXJpdHkgPSAwOwotICAg IGludCBwb3J0ZmxvdyA9IDA7Ci0jZW5kaWYgLyogQlBSSU5UICovCi0KLSNpZmRlZiBQUklOVFNX SQotICAgIGludCBjLCBpLCBuLCB3aWxkLCBjb25maXJtZWQgPSAwOyAgIC8qIFdvcmtlcnMgKi8K LSAgICBpbnQgZ2V0dmFsID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBXaGV0aGVyIHRvIGdl dCBzd2l0Y2ggdmFsdWUgKi8KLSAgICBzdHJ1Y3Qgc3RyaW5naW50IHB2W1BSTl9NQVgrMV07ICAg IC8qIFRlbXBvcmFyeSBhcnJheSBmb3Igc3dpdGNoIHZhbHVlcyAqLwotICAgIHN0cnVjdCBGREIg c3csIG9mLCBjbTsgICAgICAgICAgICAgIC8qIEZEQnMgZm9yIGVhY2ggcGFyc2UgZnVuY3Rpb24g Ki8KLSAgICBpbnQgaGF2ZXF1ZSA9IDA7Ci0gICAgaW50IHR5cGVzZXQgPSAwOwotI2VuZGlmIC8q IFBSSU5UU1dJICovCi0KLSNpZmRlZiBOVAotICAgIHN0cnVjdCBrZXl0YWIgKiBwcmludHRhYiA9 IE5VTEwsICogX3ByaW50dGFiID0gTlVMTDsKLSAgICBpbnQgbnByaW50ID0gMCwgcHJpbnRkZWY9 MDsKLSNlbmRpZiAvKiBOVCAqLwotCi0jaWZkZWYgT1MyCi0gICAgZGVmbmFtZSA9ICJQUk4iOyAg ICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwotI2Vsc2UKLSNpZmRlZiBWTVMKLSAgICBk ZWZuYW1lID0gIkxQVDoiOwotI2Vsc2UKLSNpZmRlZiBVTklYCi0gICAgZGVmbmFtZSA9ICJ8bHBy IjsKLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICov Ci0KLSNpZmRlZiBQUklOVFNXSQotI2lmZGVmIE5UCi0gICAgaGF2ZXF1ZSA9IFdpbjMyRW51bVBy dCgmcHJpbnR0YWIsJl9wcmludHRhYiwmbnByaW50LCZwcmludGRlZik7Ci0gICAgaGF2ZXF1ZSA9 IGhhdmVxdWUgJiYgbnByaW50OwotI2VuZGlmIC8qIE5UICovCi0KLSAgICBmb3IgKGkgPSAwOyBp IDw9IFBSTl9NQVg7IGkrKykgeyAgICAvKiBJbml0aWFsaXplIHN3aXRjaCB2YWx1ZXMgKi8KLSAg ICAgICAgcHZbaV0uc3ZhbCA9IE5VTEw7ICAgICAgICAgICAgICAvKiB0byBudWxsIHBvaW50ZXJz ICovCi0gICAgICAgIHB2W2ldLml2YWwgPSAtMTsgICAgICAgICAgICAgICAgLyogYW5kIC0xIGlu dCB2YWx1ZXMgKi8KLSAgICAgICAgcHZbaV0ud3ZhbCA9IChDS19PRkZfVCktMTsJLyogYW5kIC0x IHdpZGUgdmFsdWVzICovCi0gICAgfQotICAgIGlmICh4eCA9PSBYWUJEQ1ApIHsgICAgICAgICAg ICAgICAgIC8qIFNFVCBCUFJJTlRFUiA9PSAvQklESVJFQ1RJT05BTCAqLwotICAgICAgICBwdltQ Uk5fQklEXS5pdmFsID0gMTsKLSAgICAgICAgcHZbUFJOX09VVF0uaXZhbCA9IDA7Ci0gICAgfQot Ci0gICAgLyogSW5pdGlhbGl6ZSBkZWZhdWx0cyBiYXNlZCB1cG9uIGN1cnJlbnQgcHJpbnRlciBz ZXR0aW5ncyAqLwotICAgIGlmIChwcmludGVybmFtZSkgewotICAgICAgICBkZWZuYW1lID0gcHJp bnRlcm5hbWU7Ci0gICAgICAgIHN3aXRjaCAocHJpbnRlcnR5cGUpIHsKLSAgICAgICAgICBjYXNl IFBSVF9XSU46IHB2W1BSTl9XSU5dLml2YWwgPSAxOyBicmVhazsKLSAgICAgICAgICBjYXNlIFBS VF9ET1M6IHB2W1BSTl9ET1NdLml2YWwgPSAxOyBicmVhazsKLSAgICAgICAgICBjYXNlIFBSVF9Q SVA6IHB2W1BSTl9QSVBdLml2YWwgPSAxOyBicmVhazsKLSAgICAgICAgICBjYXNlIFBSVF9GSUw6 IHB2W1BSTl9GSUxdLml2YWwgPSAxOyBicmVhazsKLSAgICAgICAgICBjYXNlIFBSVF9OT046IHB2 W1BSTl9OT05dLml2YWwgPSAxOyBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSNpZmRlZiBCUFJJ TlQKLSAgICAvKiBvbmx5IHNldCB0aGUgQklESSBmbGFnIGlmIHdlIGFyZSBiaWRpICovCi0gICAg aWYgKHByaW50YmlkaSkKLSAgICAgICAgcHZbUFJOX0JJRF0uaXZhbCA9IDE7Ci0KLSAgICAvKiBz ZXJpYWwgcG9ydCBwYXJhbWV0ZXJzIG1heSBiZSBzZXQgZm9yIG5vbi1iaWRpIGRldmljZXMgKi8K LSAgICBwdltQUk5fU1BEXS5pdmFsID0gcHBvcnRzcGVlZCAvIDEwTDsKLSAgICBwdltQUk5fUEFS XS5pdmFsID0gcHBvcnRwYXJpdHk7Ci0gICAgcHZbUFJOX0ZMT10uaXZhbCA9IHBwb3J0ZmxvdzsK LSNlbmRpZiAvKiBCUFJJTlQgKi8KLSAgICBpZiAocHJpbnR0aW1vKQotICAgICAgICBwdltQUk5f VE1PXS5pdmFsID0gcHJpbnR0aW1vOwotICAgIGlmIChwcmludHRlcm0pIHsKLSAgICAgICAgcHZb UFJOX1RSTV0uaXZhbCA9IDE7Ci0gICAgICAgIG1ha2VzdHIoJnB2W1BSTl9UUk1dLnN2YWwscHJp bnR0ZXJtKTsKLSAgICB9Ci0gICAgaWYgKHByaW50c2VwKSB7Ci0gICAgICAgIHB2W1BSTl9TRVBd Lml2YWwgPSAxOwotICAgICAgICBtYWtlc3RyKCZwdltQUk5fU0VQXS5zdmFsLHByaW50c2VwKTsK LSAgICB9Ci0gICAgaWYgKHR4dDJwcykgewotICAgICAgICBwdltQUk5fUFNdLml2YWwgPSAxOwot ICAgICAgICBwdltQUk5fV0lEXS5pdmFsID0gcHNfd2lkdGg7Ci0gICAgICAgIHB2W1BSTl9MRU5d Lml2YWwgPSBwc19sZW5ndGg7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHZbUFJOX1JBV10uaXZh bCA9IDE7Ci0gICAgfQotCi0gICAgLyogU2V0IHVwIGNoYWluZWQgcGFyc2UgZnVuY3Rpb25zLi4u ICovCi0KLSAgICBjbWZkYmkoJnN3LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaXJzdCBG REIgLSBjb21tYW5kIHN3aXRjaGVzICovCi0gICAgICAgICAgIF9DTUtFWSwgICAgICAgICAgICAg ICAgICAgICAgLyogZmNvZGUgKi8KLSAgICAgICAgICAgIlN3aXRjaCIsICAgICAgICAgICAgICAg ICAgICAvKiBobHBtc2cgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAgICAgICAgbnBybnN3aSwgICAgICAgICAgICAg ICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KLSAgICAgICAgICAg NCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9 IGNtc3dpICovCi0gICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAgICAgLyogUHJv Y2Vzc2luZyBmdW5jdGlvbiAqLwotICAgICAgICAgICBwcm50YWIsICAgICAgICAgICAgICAgICAg ICAgIC8qIEtleXdvcmQgdGFibGUgKi8KLSAgICAgICAgICAgJmNtICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCi0gICAgICAgICAgICk7Ci0gICAgY21m ZGJpKCZjbSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2Vjb25kIGZkYiBmb3IgY29uZmly bWF0aW9uICovCi0gICAgICAgICAgIF9DTUNGTSwgICAgICAgICAgICAgICAgICAgICAgLyogZmNv ZGUgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBobHBtc2cg Ki8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICov Ci0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5n IGRhdGEgKi8KLSAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0 bCBudW1lcmljIGRhdGEgMSAqLwotICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCi0gICAgICAgICAgIE5VTEwsCi0gICAgICAg ICAgIE5VTEwsCi0gICAgICAgICAgICZvZgotICAgICAgICAgICApOwotICAgIGNtZmRiaSgmb2Ys ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXJkIEZEQiBmb3IgcHJpbnRlciBuYW1lICov Ci0gICAgICAgICAgIF9DTU9GSSwgICAgICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KLSAg ICAgICAgICAgIlByaW50ZXIgb3IgZmlsZSBuYW1lIiwgICAgICAvKiBobHBtc2cgKi8KLSAgICAg ICAgICAgZGVmbmFtZSwgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAgICAg ICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8K LSAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmlj IGRhdGEgMTogdGJsIHNpemUgKi8KLSAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICovCi0gICAgICAgICAgIHh4 c3RyaW5nLCAgICAgICAgICAgICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotICAg ICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdGhpbmcgKi8KLSAgICAg ICAgICAgTlVMTAotICAgICAgICAgICApOwotCi0gICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAg ICAgICAgICAgICAgLyogUGFyc2UgMCBvciBtb3JlIHN3aXRjaGVzICovCi0gICAgICAgIHggPSBj bWZkYigmc3cpOyAgICAgICAgICAgICAgICAgLyogUGFyc2Ugc3dpdGNoIG9yIG90aGVyIHRoaW5n ICovCi0gICAgICAgIGRlYnVnKEYxMDEsInNldHByaW50ZXIgY21mZGIiLCIiLHgpOwotICAgICAg ICBpZiAoeCA8IDApICAgICAgICAgICAgICAgICAgICAgIC8qIEVycm9yICovCi0gICAgICAgICAg Z290byB4c2V0cHJuOyAgICAgICAgICAgICAgICAgLyogb3IgcmVwYXJzZSBuZWVkZWQgKi8KLSAg ICAgICAgaWYgKGNtcmVzdWx0LmZjb2RlICE9IF9DTUtFWSkgICAvKiBCcmVhayBvdXQgaWYgbm90 IGEgc3dpdGNoICovCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChjbXJlc3VsdC5mZGJh ZGRyICE9ICZzdykgICAgLyogQWR2YW5jZWQgdXNhZ2UgOi0pICovCi0gICAgICAgICAgYnJlYWs7 Ci0gICAgICAgIGMgPSBjbWdicmsoKTsgICAgICAgICAgICAgICAgICAgLyogR2V0IGJyZWFrIGNo YXJhY3RlciAqLwotICAgICAgICBnZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAnPScpOyAvKiB0 byBzZWUgaG93IHRoZXkgZW5kZWQgdGhlIHN3aXRjaCAqLwotICAgICAgICBuID0gY21yZXN1bHQu bnJlc3VsdDsgICAgICAgICAgIC8qIE51bWVyaWMgcmVzdWx0ID0gc3dpdGNoIHZhbHVlICovCi0g ICAgICAgIGRlYnVnKEYxMDEsInNldHByaW50ZXIgc3dpdGNoIiwiIixuKTsKLQotICAgICAgICBz d2l0Y2ggKG4pIHsgICAgICAgICAgICAgICAgICAgIC8qIFByb2Nlc3MgdGhlIHN3aXRjaCAqLwot ICAgICAgICAgIGNhc2UgUFJOX1BTOiAgICAgICAgICAgICAgICAgIC8qIFRleHQgdG8gUG9zdHNj cmlwdCAqLwotICAgICAgICAgICAgcHZbUFJOX1BTXS5pdmFsID0gMTsKLSAgICAgICAgICAgIHB2 W1BSTl9CSURdLml2YWwgPSAwOwotICAgICAgICAgICAgcHZbUFJOX09VVF0uaXZhbCA9IDE7Ci0g ICAgICAgICAgICBwdltQUk5fUkFXXS5pdmFsID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g ICAgICAgICAgY2FzZSBQUk5fUkFXOiAgICAgICAgICAgICAgICAgLyogTm9uLVBvc3RzY3JpcHQg Ki8KLSAgICAgICAgICAgIHB2W1BSTl9QU10uaXZhbCA9IDA7Ci0gICAgICAgICAgICBwdltQUk5f UkFXXS5pdmFsID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBQUk5f QklEOiAgICAgICAgICAgICAgICAgLyogQmlkaXJlY3Rpb25hbCAqLwotICAgICAgICAgICAgcHZb UFJOX0JJRF0uaXZhbCA9IDE7Ci0gICAgICAgICAgICBwdltQUk5fT1VUXS5pdmFsID0gMDsKLSAg ICAgICAgICAgIHB2W1BSTl9QU10uaXZhbCA9IDA7Ci0gICAgICAgICAgICBwdltQUk5fUkFXXS5p dmFsID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBQUk5fT1VUOiAg ICAgICAgICAgICAgICAgLyogT3V0cHV0LW9ubHkgKi8KLSAgICAgICAgICAgIHB2W1BSTl9PVVRd Lml2YWwgPSAxOwotICAgICAgICAgICAgcHZbUFJOX0JJRF0uaXZhbCA9IDA7Ci0gICAgICAgICAg ICBwdltQUk5fUFNdLml2YWwgPSAwOwotICAgICAgICAgICAgcHZbUFJOX1JBV10uaXZhbCA9IDE7 Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgUFJOX05PTjogICAgICAgICAg ICAgICAgIC8qIE5PTkUgKi8KLSAgICAgICAgICAgIHR5cGVzZXQrKzsKLSAgICAgICAgICAgIHB2 W25dLml2YWwgPSAxOwotICAgICAgICAgICAgcHZbUFJOX1NQRF0uaXZhbCA9IDA7Ci0gICAgICAg ICAgICBwdltQUk5fUEFSXS5pdmFsID0gMDsKLSAgICAgICAgICAgIHB2W1BSTl9GTE9dLml2YWwg PSBGTE9fS0VFUDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0jaWZkZWYgVU5JWAotICAgICAgICAg IGNhc2UgUFJOX1dJTjoKLSNlbmRpZiAvKiBVTklYICovCi0gICAgICAgICAgY2FzZSBQUk5fRE9T OiAgICAgICAgICAgICAgICAgLyogRE9TIHByaW50ZXIgbmFtZSAqLwotICAgICAgICAgIGNhc2Ug UFJOX0ZJTDogICAgICAgICAgICAgICAgIC8qIE9yIGZpbGVuYW1lICovCi0gICAgICAgICAgY2Fz ZSBQUk5fUElQOgotICAgICAgICAgICAgdHlwZXNldCsrOwotICAgICAgICAgICAgaWYgKHB2W25d LnN2YWwpIGZyZWUocHZbbl0uc3ZhbCk7Ci0gICAgICAgICAgICBwdltuXS5zdmFsID0gTlVMTDsK LSAgICAgICAgICAgIHB2W1BSTl9OT05dLml2YWwgPSAwOyAgICAgICAvKiBaZXJvIGFueSBwcmV2 aW91cyBzZWxlY3Rpb25zICovCi0gICAgICAgICAgICBwdltQUk5fV0lOXS5pdmFsID0gMDsKLSAg ICAgICAgICAgIHB2W1BSTl9ET1NdLml2YWwgPSAwOwotICAgICAgICAgICAgcHZbUFJOX0ZJTF0u aXZhbCA9IDA7Ci0gICAgICAgICAgICBwdltQUk5fUElQXS5pdmFsID0gMDsKLSAgICAgICAgICAg IHB2W25dLml2YWwgPSAxOyAgICAgICAgICAgICAvKiBGbGFnIHRoaXMgb25lICovCi0gICAgICAg ICAgICBpZiAoIWdldHZhbCkgYnJlYWs7ICAgICAgICAgLyogTm8gdmFsdWUgd2FudGVkICovCi0K LSAgICAgICAgICAgIGlmIChuID09IFBSTl9GSUwpIHsgICAgICAgICAvKiBGaWxlLCBjaGVjayBh Y2Nlc3NpYmlsaXR5ICovCi0gICAgICAgICAgICAgICAgaW50IHdpbGQgPSAwOwotICAgICAgICAg ICAgICAgIGlmICgoeCA9IGNtaW9maSgiRmlsZW5hbWUiLCJrZXJtaXQucHJuIiwmcywmd2lsZCx4 eHN0cmluZykpPCAwKQotICAgICAgICAgICAgICAgICAgaWYgKHggPT0gLTkpIHsKLSAgICAgICAg ICAgICAgICAgICAgICBpZiAoemNoa28ocykgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgIHByaW50ZigiQ2FuJ3QgY3JlYXRlIFwiJXNcIlxuIixzKTsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICAgIH0gZWxzZSBnb3RvIHhzZXRwcm47Ci0gICAgICAgICAgICAgICAgaWYgKGlzd2lsZChz KSkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9BIHNpbmdsZSBmaWxlIHBsZWFzZVxu Iik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgIHB2W1BSTl9TUERdLml2YWwgPSAwOwotICAgICAgICAgICAgICAgIHB2 W1BSTl9QQVJdLml2YWwgPSAwOwotICAgICAgICAgICAgICAgIHB2W1BSTl9GTE9dLml2YWwgPSBG TE9fS0VFUDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoKHggPSBjbWZsZChuID09IFBSTl9ET1Mg PyAvKiBWYWx1ZSB3YW50ZWQgLSBwYXJzZSBpdCAqLwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIkRPUyBwcmludGVyIGRldmljZSBuYW1lIiA6IC8qIEhlbHAgbWVzc2FnZSAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgKG4gPT0gUFJOX1BJUCA/Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAiUHJvZ3JhbSBuYW1lIiA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAiRmls ZW5hbWUiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPT0gUFJOX0RPUyA/Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAiUFJOIiA6ICAgICAgLyogRGVmYXVsdCAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmcywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICApKSA8IDApCi0gICAgICAgICAgICAgIGdvdG8geHNldHBybjsKLSAgICAgICAgICAg IHMgPSBicnN0cmlwKHMpOyAgICAgICAgICAgICAvKiBTdHJpcCBlbmNsb3NpbmcgYnJhY2VzICov Ci0gICAgICAgICAgICB3aGlsZSAoKnMgPT0gU1ApICAgICAgICAgICAgLyogU3RyaXAgbGVhZGlu ZyBibGFua3MgKi8KLSAgICAgICAgICAgICAgcysrOwotICAgICAgICAgICAgaWYgKG4gPT0gUFJO X1BJUCkgeyAgICAgICAgIC8qIElmIC9QSVBFOiAqLwotICAgICAgICAgICAgICAgIGlmICgqcyA9 PSAnfCcpIHsgICAgICAgIC8qIHN0cmlwIGFueSBleHRyYW5lb3VzIHBpcGUgc2lnbiAqLwotICAg ICAgICAgICAgICAgICAgICBzKys7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlICgqcyA9PSBT UCkKLSAgICAgICAgICAgICAgICAgICAgICBzKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIHB2W1BSTl9TUERdLml2YWwgPSAwOwotICAgICAgICAgICAgICAgIHB2W1BSTl9Q QVJdLml2YWwgPSAwOwotICAgICAgICAgICAgICAgIHB2W1BSTl9GTE9dLml2YWwgPSBGTE9fS0VF UDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoeSA9IHN0cmxlbihzKSkgPiAwKSAg ICAvKiBBbnl0aGluZyBsZWZ0PyAqLwotICAgICAgICAgICAgICBpZiAocHZbbl0uc3ZhbCA9IChj aGFyICopIG1hbGxvYyh5KzEpKSAvKiBZZXMsIGtlZXAgaXQgKi8KLSAgICAgICAgICAgICAgICBz dHJjcHkocHZbbl0uc3ZhbCxzKTsgICAvKiBzYWZlICovCi0gICAgICAgICAgICBicmVhazsKLSNp ZmRlZiBOVAotICAgICAgICAgIGNhc2UgUFJOX1dJTjogICAgICAgICAgICAgICAgIC8qIFdpbmRv d3MgcXVldWUgbmFtZSAqLwotICAgICAgICAgICAgdHlwZXNldCsrOwotICAgICAgICAgICAgaWYg KHB2W25dLnN2YWwpIGZyZWUocHZbbl0uc3ZhbCk7Ci0gICAgICAgICAgICBwdltuXS5zdmFsID0g TlVMTDsKLSAgICAgICAgICAgIHB2W1BSTl9OT05dLml2YWwgPSAwOwotICAgICAgICAgICAgcHZb UFJOX0RPU10uaXZhbCA9IDA7Ci0gICAgICAgICAgICBwdltQUk5fRklMXS5pdmFsID0gMDsKLSAg ICAgICAgICAgIHB2W25dLml2YWwgPSAxOwotICAgICAgICAgICAgcHZbUFJOX1NQRF0uaXZhbCA9 IDA7Ci0gICAgICAgICAgICBwdltQUk5fUEFSXS5pdmFsID0gMDsKLSAgICAgICAgICAgIHB2W1BS Tl9GTE9dLml2YWwgPSBGTE9fS0VFUDsKLQotICAgICAgICAgICAgaWYgKCFnZXR2YWwgfHwgIWhh dmVxdWUpCi0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKCh4ID0gY21rZXko X3ByaW50dGFiLG5wcmludCwiUHJpbnQgcXVldWUgbmFtZSIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICBfcHJpbnR0YWJbcHJpbnRkZWZdLmt3ZCx4eHN0cmluZykpIDwgMCkgewotICAgICAg ICAgICAgICAgIGlmICh4ICE9IC0yKQotICAgICAgICAgICAgICAgICAgZ290byB4c2V0cHJuOwot Ci0gICAgICAgICAgICAgICAgaWYgKHB2W1BSTl9XSU5dLnN2YWwpIGZyZWUocHZbUFJOX1dJTl0u c3ZhbCk7Ci0gICAgICAgICAgICAgICAgcyA9IGF0bWJ1ZjsKLSAgICAgICAgICAgICAgICBpZiAo KHkgPSBzdHJsZW4ocykpID4gMCkKLSAgICAgICAgICAgICAgICAgIGlmIChwdltuXS5zdmFsID0g KGNoYXIgKiltYWxsb2MoeSsxKSkKLSAgICAgICAgICAgICAgICAgICAgc3RyY3B5KHB2W25dLnN2 YWwscyk7IC8qIHNhZmUgKi8KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg aWYgKHB2W1BSTl9XSU5dLnN2YWwpIGZyZWUocHZbUFJOX1dJTl0uc3ZhbCk7Ci0gICAgICAgICAg ICAgICAgZm9yIChpID0gMDsgaSA8IG5wcmludDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAg IGlmICh4ID09IHByaW50dGFiW2ldLmt3dmFsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBz ID0gcHJpbnR0YWJbaV0ua3dkOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYg KCh5ID0gc3RybGVuKHMpKSA+IDApCi0gICAgICAgICAgICAgICAgICBpZiAocHZbbl0uc3ZhbCA9 IChjaGFyICopbWFsbG9jKHkrMSkpCi0gICAgICAgICAgICAgICAgICAgIHN0cmNweShwdltuXS5z dmFsLHMpOyAvKiBzYWZlICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSNl bmRpZiAvKiBOVCAqLwotCi0gICAgICAgICAgY2FzZSBQUk5fU0VQOiAgICAgICAgICAgICAgICAg LyogL0pPQi1IRUFERVIgKHNlcGFyYXRvcikgKi8KLSAgICAgICAgICAgIGlmIChwdltuXS5zdmFs KSBmcmVlKHB2W25dLnN2YWwpOwotICAgICAgICAgICAgcHZbbl0uc3ZhbCA9IE5VTEw7Ci0gICAg ICAgICAgICBwdltuXS5pdmFsID0gMTsKLSAgICAgICAgICAgIGlmICghZ2V0dmFsKSBicmVhazsK LSAgICAgICAgICAgIGlmICgoeCA9IGNtaWZpKCJGaWxlbmFtZSIsIiIsJnMsJnkseHhzdHJpbmcp KSA8IDApCi0gICAgICAgICAgICAgIGdvdG8geHNldHBybjsKLSAgICAgICAgICAgIGlmICh5KSB7 Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/V2lsZGNhcmRzIG5vdCBhbGxvd2VkXG4iKTsKLSAg ICAgICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICAgICAgZ290byB4c2V0cHJuOwotICAg ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCh5ID0gc3RybGVuKHMpKSA+IDApCi0gICAgICAg ICAgICAgIGlmIChwdltuXS5zdmFsID0gKGNoYXIgKikgbWFsbG9jKHkrMSkpCi0gICAgICAgICAg ICAgICAgc3RyY3B5KHB2W25dLnN2YWwscyk7ICAgLyogc2FmZSAqLwotICAgICAgICAgICAgYnJl YWs7Ci0KLSAgICAgICAgICBjYXNlIFBSTl9UTU86ICAgICAgICAgICAgICAgICAvKiAvVElNRU9V VDpudW1iZXIgKi8KLSAgICAgICAgICAgIHB2W25dLml2YWwgPSAwOwotICAgICAgICAgICAgaWYg KCFnZXR2YWwpIGJyZWFrOwotICAgICAgICAgICAgaWYgKCh4ID0gY21udW0oIlNlY29uZHMiLCIw IiwxMCwmeSx4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgZ290byB4c2V0cHJuOwotICAg ICAgICAgICAgaWYgKHkgPiA5OTkpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSAt IDk5OSBpcyB0aGUgbWF4aW11bVxuIik7Ci0gICAgICAgICAgICAgICAgeCA9IC05OwotICAgICAg ICAgICAgICAgIGdvdG8geHNldHBybjsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg ICBwdltuXS5pdmFsID0geTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBQ Uk5fVFJNOiAgICAgICAgICAgICAgICAgLyogL0VORC1PRi1KT0I6c3RyaW5nICovCi0gICAgICAg ICAgICBpZiAocHZbbl0uc3ZhbCkgZnJlZShwdltuXS5zdmFsKTsKLSAgICAgICAgICAgIHB2W25d LnN2YWwgPSBOVUxMOwotICAgICAgICAgICAgcHZbbl0uaXZhbCA9IDE7Ci0gICAgICAgICAgICBp ZiAoIWdldHZhbCkgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoKHggPSBjbWZsZCgiU3RyaW5nIChl bmNsb3NlIGluIGJyYWNlcyBpZiBpdCBjb250YWlucyBzcGFjZXMpIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICIiLCZzLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICBnb3RvIHhz ZXRwcm47Ci0gICAgICAgICAgICBzID0gYnJzdHJpcChzKTsKLSAgICAgICAgICAgIGlmICgoeSA9 IHN0cmxlbihzKSkgPiAwKQotICAgICAgICAgICAgICBpZiAocHZbbl0uc3ZhbCA9IChjaGFyICop IG1hbGxvYyh5KzEpKQotICAgICAgICAgICAgICAgIHN0cmNweShwdltuXS5zdmFsLHMpOyAgIC8q IHNhZmUgKi8KLSAgICAgICAgICAgIGJyZWFrOwotCi0jaWZkZWYgQlBSSU5UCi0gICAgICAgICAg Y2FzZSBQUk5fRkxPOgotICAgICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOwotICAgICAgICAg ICAgaWYgKCh4ID0gY21rZXkoZmxvdGFiLG5mbG8sCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiU2VyaWFsIHByaW50ZXItcG9ydCBmbG93IGNvbnRyb2wiLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgInJ0cy9jdHMiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICBn b3RvIHhzZXRwcm47Ci0gICAgICAgICAgICBwdltuXS5pdmFsID0geDsKLSAgICAgICAgICAgIGJy ZWFrOwotCi0jaWZuZGVmIE5PTE9DQUwKLSAgICAgICAgICBjYXNlIFBSTl9TUEQ6Ci0gICAgICAg ICAgICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0KLSAgICAgICAgICAgIC8qIFROX0NPTVBPUlQgaGVy ZSB0b28/ICovCi0KLSAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KHNwZHRhYiwgICAgICAvKiBT cGVlZCAobm8gZGVmYXVsdCkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zcGQsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VyaWFsIHByaW50ZXItcG9ydCBpbnRlcmZhY2Ug c3BlZWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIjk2MDAiLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgeHhzdHJpbmcpCi0gICAgICAgICAgICAgICAgICkgPCAwKQotICAgICAg ICAgICAgICBnb3RvIHhzZXRwcm47Ci0gICAgICAgICAgICBwdltuXS5pdmFsID0geDsKLSAgICAg ICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotICAgICAgICAgIGNhc2UgUFJO X1BBUjoKLSAgICAgICAgICAgIHB2W25dLml2YWwgPSAwOwotICAgICAgICAgICAgaWYgKCFnZXR2 YWwpIGJyZWFrOwotICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkocGFydGJsLG5wYXIsIlNlcmlh bCBwcmludGVyLXBvcnQgcGFyaXR5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJub25l Iix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgZ290byB4c2V0cHJuOwotICAgICAgICAg ICAgcHZbbl0uaXZhbCA9IHg7Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBCUFJJTlQg Ki8KLQotI2lmZGVmIE9TMgotICAgICAgICAgIGNhc2UgUFJOX0xFTjoKLSAgICAgICAgICAgIGlm ICghZ2V0dmFsKSBicmVhazsKLSAgICAgICAgICAgIGlmICgoeCA9IGNtbnVtKCJQUyBwYWdlIGxl bmd0aCIsICI2NiIsMTAsJnkseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgIGdvdG8geHNl dHBybjsKLSAgICAgICAgICAgIHB2W25dLml2YWwgPSB5OwotICAgICAgICAgICAgYnJlYWs7Ci0K LSAgICAgICAgICBjYXNlIFBSTl9XSUQ6Ci0gICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7 Ci0gICAgICAgICAgICBpZiAoKHggPSBjbW51bSgiUFMgcGFnZSB3aWR0aCIsICI4MCIsMTAsJnks eHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgIGdvdG8geHNldHBybjsKLSAgICAgICAgICAg IHB2W25dLml2YWwgPSB5OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFBS Tl9DUzoKLSAgICAgICAgICAgICAgcHZbbl0uaXZhbCA9IDA7Ci0gICAgICAgICAgICAgIGlmICgh Z2V0dmFsKSBicmVhazsKLSAgICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkoCi0jaWZkZWYgQ0tP VU5JCi0gICAgICAgICAgICAgICAgICAgICAgIHR4cnRhYixudHhydGFiLAotI2Vsc2UgLyogQ0tP VU5JICovCi0gICAgICAgICAgICAgICAgICAgICAgIHR0Y3N0YWIsbnRlcm1jLAotI2VuZGlmIC8q IENLT1VOSSAqLwotICAgICAgICAgICAgICAgICAgICAgICAiYXV0by1wcmludC9wcmludHNjcmVl biBjaGFyYWN0ZXItc2V0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgImNwNDM3Iix4eHN0cmlu ZykpIDwgMCkKLSAgICAgICAgICAgICAgICAgIGdvdG8geHNldHBybjsKLSAgICAgICAgICAgICAg cHZbbl0uaXZhbCA9IHk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIE9TMiAqLwot Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHByaW50ZigiP1VuZXhwZWN0ZWQgc3dp dGNoIHZhbHVlIC0gJWRcbiIsY21yZXN1bHQubnJlc3VsdCk7Ci0gICAgICAgICAgICB4ID0gLTk7 Ci0gICAgICAgICAgICBnb3RvIHhzZXRwcm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbGluZVsw XSA9IE5VTDsgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBwcmludGVyIG5hbWUg dmFsdWUgKi8KLSAgICBzd2l0Y2ggKGNtcmVzdWx0LmZjb2RlKSB7ICAgICAgICAgICAvKiBIb3cg ZGlkIHdlIGdldCBoZXJlPyAqLwotICAgICAgY2FzZSBfQ01PRkk6ICAgICAgICAgICAgICAgICAg ICAgIC8qIFRoZXkgdHlwZWQgYSBmaWxlbmFtZSAqLwotICAgICAgICBja3N0cm5jcHkobGluZSxj bXJlc3VsdC5zcmVzdWx0LExJTkJVRlNJWik7IC8qIE5hbWUgKi8KLSAgICAgICAgd2lsZCA9IGNt cmVzdWx0Lm5yZXN1bHQ7ICAgICAgICAvKiBXaWxkIGZsYWcgKi8KLSAgICAgICAgaWYgKCF0eXBl c2V0KSB7ICAgICAgICAgICAgICAgICAvKiBBIHByaW50ZXIgbmFtZSB3aXRob3V0IGEgdHlwZSAq LwotICAgICAgICAgICAgcHZbUFJOX05PTl0uaXZhbCA9IDA7ICAgICAgIC8qIGlzIHN1cHBvc2Vk IHRvIGJlIHRyZWF0ZWQgYXMgICovCi0gICAgICAgICAgICBwdltQUk5fV0lOXS5pdmFsID0gMDsg ICAgICAgLyogYSBET1Mgb3IgUGlwZSBwcmludGVyLiAgV2UgICAgKi8KLSAgICAgICAgICAgIHB2 W1BSTl9GSUxdLml2YWwgPSAwOyAgICAgICAvKiBjbGVhciBhbGwgdGhlIGZsYWdzIGFuZCBsZXQg ICAqLwotICAgICAgICAgICAgcHZbUFJOX1BJUF0uaXZhbCA9IDA7ICAgICAgIC8qIHRoZSBjb2Rl IGJlbG93IGRvcGUgb3V0IHRoZSAgICovCi0gICAgICAgICAgICBwdltQUk5fRE9TXS5pdmFsID0g MDsgICAgICAgLyogdHlwZS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgfQot I2lmZGVmIE5UCi0gICAgICAgIGVsc2UgaWYgKHB2W1BSTl9XSU5dLml2YWwgJiYgbG9va3VwKF9w cmludHRhYixsaW5lLG5wcmludCwmeSkpIHsKLSAgICAgICAgICAgIC8qIGludmFsaWQgV2luZG93 IFF1ZXVlIG5hbWUgKi8KLSAgICAgICAgICAgIHByaW50ZigiP2ludmFsaWQgV2luZG93cyBQcmlu dGVyIFF1ZXVlIG5hbWU6IFwiJXNcIlxyXG4iLGxpbmUpOwotICAgICAgICAgICAgeCA9IC05Owot ICAgICAgICAgICAgZ290byB4c2V0cHJuOwotICAgICAgICB9Ci0jZW5kaWYgLyogTlQgKi8KLSAg ICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSAgICAgICAgICAvKiBDb25maXJtIHRoZSBjb21t YW5kICovCi0gICAgICAgICAgZ290byB4c2V0cHJuOwotICAgICAgICBicmVhazsKLSAgICAgIGNh c2UgX0NNQ0ZNOiAgICAgICAgICAgICAgICAgICAgICAvKiBUaGV5IGVudGVyZWQgdGhlIGNvbW1h bmQgKi8KLSAgICAgICAgaWYgKHB2W1BSTl9ET1NdLml2YWwgPiAwKQotICAgICAgICAgIGNrc3Ry bmNweShsaW5lLHB2W1BSTl9ET1NdLnN2YWwgPyBwdltQUk5fRE9TXS5zdmFsIDogIiIsTElOQlVG U0laKTsKLSAgICAgICAgZWxzZSBpZiAocHZbUFJOX1dJTl0uaXZhbCA+IDApCi0gICAgICAgICAg Y2tzdHJuY3B5KGxpbmUscHZbUFJOX1dJTl0uc3ZhbCA/IHB2W1BSTl9XSU5dLnN2YWwgOiAiIixM SU5CVUZTSVopOwotICAgICAgICBlbHNlIGlmIChwdltQUk5fRklMXS5pdmFsID4gMCkKLSAgICAg ICAgICBja3N0cm5jcHkobGluZSxwdltQUk5fRklMXS5zdmFsID8gcHZbUFJOX0ZJTF0uc3ZhbCA6 ICIiLExJTkJVRlNJWik7Ci0gICAgICAgIGVsc2UgaWYgKHB2W1BSTl9QSVBdLml2YWwgPiAwKQot ICAgICAgICAgIGNrc3RybmNweShsaW5lLHB2W1BSTl9QSVBdLnN2YWwgPyBwdltQUk5fUElQXS5z dmFsIDogIiIsTElOQlVGU0laKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogQnkgbWlzdGFrZSAqLwotICAgICAgICBwcmludGYoIj9V bmV4cGVjdGVkIGZ1bmN0aW9uIGNvZGU6ICVkXG4iLGNtcmVzdWx0LmZjb2RlKTsKLSAgICAgICAg eCA9IC05OwotICAgICAgICBnb3RvIHhzZXRwcm47Ci0gICAgfQotCi0jZWxzZSAgLyogTm8gUFJJ TlRTV0kgKi8KLQotICAgIGlmICgoeCA9IGNtb2ZpKCJQcmludGVyIG9yIGZpbGUgbmFtZSIsZGVm bmFtZSwmcyx4eHN0cmluZykpIDwgMCkKLSAgICAgIHJldHVybih4KTsKLSAgICBpZiAoeCA+IDEp IHsKLSAgICAgICAgcHJpbnRmKCI/RGlyZWN0b3J5IG5hbWVzIG5vdCBhbGxvd2VkXG4iKTsKLSAg ICAgICAgcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgd2hpbGUgKCpzID09IFNQIHx8ICpzID09IEhU KSBzKys7ICAgLyogVHJpbSBsZWFkaW5nIHdoaXRlc3BhY2UgKi8KLSAgICBja3N0cm5jcHkobGlu ZSxzLExJTkJVRlNJWik7ICAgICAgICAvKiBNYWtlIGEgdGVtcG9yYXJ5IHNhZmUgY29weSAqLwot ICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOyAgIC8qIENvbmZpcm0gdGhlIGNv bW1hbmQgKi8KLSNlbmRpZiAvKiBQUklOVFNXSSAqLwotCi0jaWZkZWYgSUtTRAotICAgIGlmIChp bnNlcnZlciAmJiAoaXNndWVzdAotI2lmbmRlZiBOT1NFUlZFUgotICAgICAgICAgICAgICAgICAg ICAgfHwgIUVOQUJMRUQoZW5fcHJpKQotI2VuZGlmIC8qIE5PU0VSVkVSICovCi0gICAgICAgICAg ICAgICAgICAgICApKSB7Ci0gICAgICAgIHByaW50ZigiU29ycnksIHByaW50aW5nIGRpc2FibGVk XHJcbiIpOwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgIH0KLSNlbmRpZiAvKiBJ U0tEICovCi0KLSNpZmRlZiBQUklOVFNXSQotI2lmZGVmIEJQUklOVAotICAgIGlmIChwcmludGJp ZGkpIHsgICAgICAgICAgICAgICAgICAgIC8qIElmIGJpZGkgcHJpbnRpbmcgYWN0aXZlICovCi0j aWZuZGVmIFVOSVgKLSAgICAgICAgYnBydHN0b3AoKTsgICAgICAgICAgICAgICAgICAgICAvKiBT dG9wIGl0IGJlZm9yZSBwcm9jZWVkaW5nICovCi0jZW5kaWYgLyogVU5JWCAqLwotICAgICAgICBw cmludGJpZGkgPSAwOwotICAgIH0KLSAgICBpZiAocHZbUFJOX1NQRF0uaXZhbCA+IDApIHsKLSAg ICAgICAgcG9ydHNwZWVkID0gKGxvbmcpIHB2W1BSTl9TUERdLml2YWwgKiAxMEw7Ci0gICAgICAg IGlmIChwb3J0c3BlZWQgPT0gNzBMKSBwb3J0c3BlZWQgPSA3NUw7Ci0gICAgfQotICAgIGlmIChw dltQUk5fUEFSXS5pdmFsID4gMCkKLSAgICAgICAgcG9ydHBhcml0eSA9IHB2W1BSTl9QQVJdLml2 YWw7Ci0gICAgaWYgKHB2W1BSTl9GTE9dLml2YWwgPiAwKQotICAgICAgICBwb3J0ZmxvdyA9IHB2 W1BSTl9GTE9dLml2YWw7Ci0jZW5kaWYgLyogQlBSSU5UICovCi0jZW5kaWYgLyogUFJJTlRTV0kg Ki8KLQotICAgIHMgPSBsaW5lOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByaW50ZXIg bmFtZSwgaWYgZ2l2ZW4gKi8KLQotI2lmZGVmIE9TMk9SVU5JWAotI2lmZGVmIFBSSU5UU1dJCi0g ICAgaWYgKHB2W1BSTl9QSVBdLml2YWwgPiAwKSB7ICAgICAgICAgLyogL1BJUEUgd2FzIGdpdmVu PyAqLwotICAgICAgICBwcmludHBpcGUgPSAxOwotICAgICAgICBub3ByaW50ZXIgPSAwOwotICAg ICAgICBpZiAoKnMgPT0gICd8JykgeyAgICAgICAgICAgICAgIC8qIEl0IG1pZ2h0IHN0aWxsIGhh dmUgYSBwaXBlIHNpZ24gKi8KLSAgICAgICAgICAgIHMrKzsgICAgICAgICAgICAgICAgICAgICAg ICAvKiBpZiBuYW1lIGdpdmUgbGF0ZXIgKi8KLSAgICAgICAgICAgIHdoaWxlICgqcyA9PSBTUCkg ICAgICAgICAgICAvKiBzbyByZW1vdmUgaXQgYW5kIHNwYWNlcyAqLwotICAgICAgICAgICAgICBz Kys7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSNlbmRpZiAvKiBQUklOVFNXSSAqLwotICAgICAg aWYgKCpzID09ICd8JykgeyAgICAgICAgICAgICAgICAgIC8qIE9yIHBpcGUgaW1wbGllZCBieSBu YW1lPyAqLwotICAgICAgICAgIHMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50 IHBhc3QgcGlwZSBzaWduICovCi0gICAgICAgICAgd2hpbGUgKCpzID09IFNQKSAgICAgICAgICAg ICAgLyogR29iYmxlIHdoaXRlc3BhY2UgKi8KLSAgICAgICAgICAgIHMrKzsKLSAgICAgICAgICBp ZiAoKnMpIHsKLSAgICAgICAgICAgICAgcHJpbnRwaXBlID0gMTsKLSAgICAgICAgICAgICAgbm9w cmludGVyID0gMDsKLSAgICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICAgIHByaW50 cGlwZSA9IDA7Ci0gICAgICB9Ci0KLSNpZmRlZiBQUklOVFNXSQotI2lmZGVmIEJQUklOVAotICAg IGlmIChwcmludHBpcGUgJiYgcHZbUFJOX0JJRF0uaXZhbCA+IDApIHsKLSAgICAgICAgcHJpbnRm KCI/U29ycnksIHBpcGVzIG5vdCBhbGxvd2VkIGZvciBiaWRpcmVjdGlvbmFsIHByaW50ZXJcbiIp OwotICAgICAgICByZXR1cm4oLTkpOwotICAgIH0KLSNlbmRpZiAvKiBCUFJJTlQgKi8KLSNlbmRp ZiAvKiBQUklOVFNXSSAqLwotI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwotCi0jaWZkZWYgT1MyCi0g ICAgaWYgKCBwdltQUk5fQ1NdLml2YWwgPiAwICkgCi0gICAgICAgIHBybmNzID0gcHZbUFJOX0NT XS5pdmFsOwotCi0gICAgaWYgKCBwdltQUk5fUFNdLml2YWwgPiAwICkgewotICAgICAgICB0eHQy cHMgPSAxOwotICAgICAgICBwc193aWR0aCA9IHB2W1BSTl9XSURdLml2YWwgPD0gMCA/IDgwIDog cHZbUFJOX1dJRF0uaXZhbDsKLSAgICAgICAgcHNfbGVuZ3RoID0gcHZbUFJOX0xFTl0uaXZhbCA8 PSAwID8gNjYgOiBwdltQUk5fTEVOXS5pdmFsOwotICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLQot ICAgIHkgPSBzdHJsZW4ocyk7ICAgICAgICAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBuYW1l IG9mIG5ldyBwcmludCBmaWxlICovCi0gICAgaWYgKHkgPiAwCi0jaWZkZWYgT1MyCi0gICAgICAg ICYmICgoeSAhPSAzKSB8fCAoY2tzdHJjbXAocywiUFJOIiwzLDApICE9IDApKQotI2VuZGlmIC8q IE9TMiAqLwotICAgICAgICApIHsKLSAgICAgICAgaWYgKHByaW50ZXJuYW1lKSB7ICAgICAgICAg ICAgICAvKiBIYWQgYSBwcmludCBmaWxlIGJlZm9yZT8gKi8KLSAgICAgICAgICAgIGZyZWUocHJp bnRlcm5hbWUpOyAgICAgICAgICAvKiBSZW1vdmUgaXRzIG5hbWUgKi8KLSAgICAgICAgICAgIHBy aW50ZXJuYW1lID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBwcmludGVybmFtZSA9IChjaGFy ICopIG1hbGxvYyh5ICsgMSk7IC8qIEFsbG9jYXRlIHNwYWNlIGZvciBpdCAqLwotICAgICAgICBp ZiAoIXByaW50ZXJuYW1lKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9NZW1vcnkgYWxsb2NhdGlv biBmYWlsdXJlXG4iKTsKLSAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0KLSAgICAg ICAgc3RyY3B5KHByaW50ZXJuYW1lLHMpOyAgICAgICAgICAvKiAoc2FmZSkgQ29weSBuZXcgbmFt ZSB0byBuZXcgc3BhY2UgKi8KLSAgICAgICAgZGVidWcoRjExMCwicHJpbnRlcm5hbWUiLHByaW50 ZXJuYW1lLDApOwotICAgIH0KLQotI2lmZGVmIFBSSU5UU1dJCi0gICAgLyogU2V0IHByaW50ZXIg dHlwZSBmcm9tIHN3aXRjaGVzIHRoYXQgd2VyZSBnaXZlbiBleHBsaWNpdGx5ICovCi0KLSAgICBp ZiAocHZbUFJOX05PTl0uaXZhbCA+IDApIHsgICAgICAgICAvKiBObyBwcmludGVyICovCi0gICAg ICAgIHByaW50ZXJ0eXBlID0gUFJUX05PTjsKLSAgICAgICAgbm9wcmludGVyID0gMTsKLSAgICAg ICAgcHJpbnRwaXBlID0gMDsKLSAgICB9IGVsc2UgaWYgKHB2W1BSTl9GSUxdLml2YWwgPiAwKSB7 ICAvKiBGaWxlICovCi0gICAgICAgIHByaW50ZXJ0eXBlID0gUFJUX0ZJTDsKLSAgICAgICAgbm9w cmludGVyID0gMDsKLSAgICAgICAgcHJpbnRwaXBlID0gMDsKLSAgICB9IGVsc2UgaWYgKHB2W1BS Tl9QSVBdLml2YWwgPiAwKSB7ICAvKiBQaXBlICovCi0gICAgICAgIHByaW50ZXJ0eXBlID0gUFJU X1BJUDsKLSAgICAgICAgbm9wcmludGVyID0gMDsKLSAgICAgICAgcHJpbnRwaXBlID0gMTsKLSAg ICB9IGVsc2UgaWYgKHB2W1BSTl9XSU5dLml2YWwgPiAwKSB7ICAvKiBXaW5kb3dzIHByaW50IHF1 ZXVlICovCi0gICAgICAgIHByaW50ZXJ0eXBlID0gUFJUX1dJTjsKLSAgICAgICAgbm9wcmludGVy ID0gMDsKLSAgICAgICAgcHJpbnRwaXBlID0gMDsKLSAgICB9IGVsc2UgaWYgKHB2W1BSTl9ET1Nd Lml2YWwgPiAwKSB7ICAvKiBET1MgZGV2aWNlICovCi0gICAgICAgIHByaW50ZXJ0eXBlID0gUFJU X0RPUzsKLSAgICAgICAgbm9wcmludGVyID0gMDsKLSAgICAgICAgcHJpbnRwaXBlID0gMDsKLSAg ICB9IGVsc2UgaWYgKGxpbmVbMF0pIHsgICAgICAgICAgICAgICAvKiBOYW1lIGdpdmVuIHdpdGhv dXQgc3dpdGNoZXMgKi8KLSAgICAgICAgbm9wcmludGVyID0gMDsKLSAgICAgICAgcHJpbnRlcnR5 cGUgPSBwcmludHBpcGUgPyBQUlRfUElQIDogUFJUX0RPUzsKLSNpZmRlZiBOVAotICAgICAgICAv KiB3YXMgdGhlIGNvbW1hbmQgU0VUIFBSSU5URVIgd2luZG93cy1xdWV1ZSA/ICovCi0gICAgICAg IHkgPSBsb29rdXAoX3ByaW50dGFiLGxpbmUsbnByaW50LCZ4KTsKLSAgICAgICAgaWYgKHkgPj0g MCkgewotICAgICAgICAgICAgcHJpbnRlcnR5cGUgPSBQUlRfV0lOOwotICAgICAgICAgICAgaWYg KHB2W1BSTl9XSU5dLnN2YWwpIGZyZWUocHZbUFJOX1dJTl0uc3ZhbCk7Ci0gICAgICAgICAgICBp ZiAocHJpbnRlcm5hbWUpIHsgICAgICAgICAgLyogSGFkIGEgcHJpbnQgZmlsZSBiZWZvcmU/ICov Ci0gICAgICAgICAgICAgICAgZnJlZShwcmludGVybmFtZSk7ICAgICAgLyogUmVtb3ZlIGl0cyBu YW1lICovCi0gICAgICAgICAgICAgICAgcHJpbnRlcm5hbWUgPSBOVUxMOwotICAgICAgICAgICAg fQotICAgICAgICAgICAgcHZbUFJOX1dJTl0uc3ZhbCA9IE5VTEw7Ci0gICAgICAgICAgICBwdltQ Uk5fV0lOXS5pdmFsID0gMTsKLSAgICAgICAgICAgIHMgPSBwcmludHRhYlt4XS5rd2Q7ICAgICAg ICAvKiBHZXQgZnVsbCBuZXcgbmFtZSAqLwotICAgICAgICAgICAgaWYgKCh5ID0gc3RybGVuKHMp KSA+IDApIHsKLSAgICAgICAgICAgICAgICBtYWtlc3RyKCZwdltQUk5fV0lOXS5zdmFsLHMpOwot ICAgICAgICAgICAgICAgIG1ha2VzdHIoJnByaW50ZXJuYW1lLHMpOwotICAgICAgICAgICAgICAg IGlmICghcHJpbnRlcm5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/TWVtb3J5 IGFsbG9jYXRpb24gZmFpbHVyZVxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7 Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInByaW50ZXJu YW1lIixwcmludGVybmFtZSwwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICgg eSA9PSAtMiApIHsKLSAgICAgICAgICAgIC8qIEFtYmlndW91cyBQcmludCBRdWV1ZSBOYW1lICov Ci0gICAgICAgICAgICBwcmludGYoIj9BbWJpZ3VvdXMgcHJpbnRlciBuYW1lIHByb3ZpZGVkLlxu Iik7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0jZW5kaWYgLyogTlQgKi8K LSAgICB9Ci0KLSNpZmRlZiBCUFJJTlQKLSAgICAvKiBQb3J0IHBhcmFtZXRlcnMgbWF5IGJlIHNl dCBmb3Igbm9uLWJpZGkgbW9kZSAqLwotCi0gICAgcHBvcnRzcGVlZCA9IHBvcnRzcGVlZDsgICAg ICAgICAgICAgLyogU2V0IHBhcmFtZXRlcnMgKi8KLSAgICBwcG9ydHBhcml0eSA9IHBvcnRwYXJp dHk7Ci0gICAgcHBvcnRmbG93ID0gcG9ydGZsb3c7Ci0KLSAgICBpZiAocHZbUFJOX0JJRF0uaXZh bCA+IDApIHsgICAgICAgICAvKiBCaWRpcmVjdGlvbmFsICovCi0jaWZkZWYgVU5JWAotICAgICAg ICBwcmludGJpZGkgPSAxOyAgICAgICAgICAgICAgICAgIC8qIChqdXN0IHRvIHRlc3QgcGFyc2lu Zy4uLikgKi8KLSNlbHNlCi0gICAgICAgIHByaW50YmlkaSA9IGJwcnRzdGFydCgpOyAgICAgICAg LyogU3RhcnQgYmlkaXJlY3Rpb25hbCBwcmludGVyICovCi0jZW5kaWYgLyogVU5JWCAqLwotICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IHByaW50YmlkaSk7Ci0gICAgfSBlbHNlCi0gICAgICBwcmlu dGJpZGkgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogTm90IEJQUklOVEVSLCB1bnNldCBmbGFn ICovCi0jZW5kaWYgLyogQlBSSU5UICovCi0KLSAgICBpZiAocHZbUFJOX1RNT10uaXZhbCA+IC0x KSB7ICAgICAgICAvKiBUYWtlIGNhcmUgb2YgdGltZW91dCAqLwotICAgICAgICBwcmludHRpbW8g PSBwdltQUk5fVE1PXS5pdmFsOwotICAgIH0KLSAgICBpZiAocHZbUFJOX1RSTV0uaXZhbCA+IDAp IHsgICAgICAgICAvKiBUZXJtaW5hdGlvbiBzdHJpbmcgKi8KLSAgICAgICAgaWYgKHByaW50dGVy bSkgewotICAgICAgICAgICAgZnJlZShwcmludHRlcm0pOwotICAgICAgICAgICAgcHJpbnR0ZXJt ID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBpZiAocHZbUFJOX1RSTV0uc3ZhbCkKLSAgICAg ICAgICBtYWtlc3RyKCZwcmludHRlcm0scHZbUFJOX1RSTV0uc3ZhbCk7Ci0gICAgfQotICAgIGlm IChwdltQUk5fU0VQXS5pdmFsID4gMCkgeyAgICAgICAgIC8qIGFuZCBzZXBhcmF0b3IgZmlsZSAq LwotICAgICAgICBpZiAocHJpbnRzZXApIHsKLSAgICAgICAgICAgIGZyZWUocHJpbnRzZXApOwot ICAgICAgICAgICAgcHJpbnRzZXAgPSBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwdltQ Uk5fU0VQXS5zdmFsKQotICAgICAgICAgIG1ha2VzdHIoJnByaW50c2VwLHB2W1BSTl9TRVBdLnN2 YWwpOwotICAgIH0KLSNlbmRpZiAvKiBQUklOVFNXSSAqLwotCi0jaWZkZWYgVU5JWE9ST1NLCi0g ICAgaWYgKCFwcmludHBpcGUKLSNpZmRlZiBQUklOVFNXSQotICAgICAgICAmJiAhbm9wcmludGVy Ci0jZW5kaWYgLyogUFJJTlRTV0kgKi8KLSAgICAgICAgKSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBGaWxlIC0gY2hlY2sgYWNjZXNzICovCi0gICAgICAgIGlmICh6Y2hrbyhzKSA8 IDApIHsKLSAgICAgICAgICAgIHByaW50ZigiP0FjY2VzcyBkZW5pZWQgLSAlc1xuIixzKTsKLSAg ICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgIGdvdG8geHNldHBybjsKLSAgICAgICAgfQot ICAgIH0KLSNlbmRpZiAvKiBVTklYT1JPU0sgKi8KLQotICAgIHggPSAxOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFJldHVybiBjb2RlICovCi0KLSAgeHNldHBybjogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBDb21tb24gZXhpdCAqLwotI2lmZGVmIFBSSU5UU1dJCi0g ICAgZm9yIChpID0gMDsgaSA8PSBQUk5fTUFYOyBpKyspIHsgICAgLyogRnJlZSBtYWxsb2MnZCBt ZW1vcnkgKi8KLSAgICAgICAgaWYgKHB2W2ldLnN2YWwpCi0gICAgICAgICAgZnJlZShwdltpXS5z dmFsKTsKLSAgICB9Ci0jZW5kaWYgLyogUFJJTlRTV0kgKi8KLSAgICBzdWNjZXNzID0gKHggPiAw KSA/IDEgOiAwOwotICAgIHJldHVybih4KTsKLX0KLQotI2lmZGVmIEFOWVNTSAotLyogVGhlIFNF VCBTU0ggY29tbWFuZCAqLwotCi0jZGVmaW5lIFNTSF9DTUQgIDEgICAgICAgICAgICAgICAgICAg ICAgLyogU0VUIFNTSCBDT01NQU5EICovCi0KLSNpZmRlZiBTU0hCVUlMVElOICAgICAgICAgICAg ICAgICAgICAgICAvKiBCdWlsdC1pbiBTRVQgU1NIIG9wdGlvbnMgKi8KLSNkZWZpbmUgU1NIX0FE RCAgMiAgICAgICAgICAgICAgICAgICAgICAvKiBBZGQgKi8KLSNkZWZpbmUgU1NIX0FGVyAgMyAg ICAgICAgICAgICAgICAgICAgICAvKiBBZ2VudC1mb3J3YXJkaW5nICovCi0jZGVmaW5lIFNTSF9D SEkgIDQgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgSG9zdCBJUCAqLwotI2RlZmluZSBT U0hfWEZXICA1ICAgICAgICAgICAgICAgICAgICAgIC8qIFgxMS1mb3J3YXJkaW5nICovCi0jZGVm aW5lIFNTSF9EWUYgIDYgICAgICAgICAgICAgICAgICAgICAgLyogRHluYW1pYyBmb3J3YXJkaW5n ICovCi0jZGVmaW5lIFNTSF9HV1AgIDcgICAgICAgICAgICAgICAgICAgICAgLyogR2F0ZXdhIHBv cnRncyAqLwotI2RlZmluZSBTU0hfR1NTICA4ICAgICAgICAgICAgICAgICAgICAgIC8qIEdTU0FQ SSAqLwotI2RlZmluZSBTU0hfS0JEICA5ICAgICAgICAgICAgICAgICAgICAgIC8qIEtCRCBJbnRl cmFjdGl2ZSBEZXZpY2VzICovCi0jZGVmaW5lIFNTSF9LNCAgMTAgICAgICAgICAgICAgICAgICAg ICAgLyogS2VyYmVyb3MgNCAqLwotI2RlZmluZSBTU0hfSzUgIDExICAgICAgICAgICAgICAgICAg ICAgIC8qIEtlcmJlcm9zIDUgKi8KLSNkZWZpbmUgU1NIX1NISyAxMiAgICAgICAgICAgICAgICAg ICAgICAvKiBTdHJpY3QgSG9zdCBLZXkgQ2hlY2sgKi8KLSNkZWZpbmUgU1NIX1YxICAxMyAgICAg ICAgICAgICAgICAgICAgICAvKiBTU0ggVjEgKi8KLSNkZWZpbmUgU1NIX1YyICAxNCAgICAgICAg ICAgICAgICAgICAgICAvKiBTU0ggVjIgKi8KLSNkZWZpbmUgU1NIX1BSUCAxNSAgICAgICAgICAg ICAgICAgICAgICAvKiBQcml2ZCBwb3J0ICovCi0jZGVmaW5lIFNTSF9DTVAgMTYgICAgICAgICAg ICAgICAgICAgICAgLyogQ29tcHJlc3Npb24gKi8KLSNkZWZpbmUgU1NIX1hBTCAxNyAgICAgICAg ICAgICAgICAgICAgICAvKiBYIEF1dGggTG9jYXRpb24gKi8KLSNkZWZpbmUgU1NIX1NISCAxOCAg ICAgICAgICAgICAgICAgICAgICAvKiBRdWlldCAqLwotI2RlZmluZSBTU0hfVkVSIDE5ICAgICAg ICAgICAgICAgICAgICAgIC8qIFZlcnNpb24gKi8KLSNkZWZpbmUgU1NIX1ZSQiAyMCAgICAgICAg ICAgICAgICAgICAgICAvKiBWZXJib3NpdHkgbGV2ZWwgKi8KLSNkZWZpbmUgU1NIX0lERiAyMSAg ICAgICAgICAgICAgICAgICAgICAvKiBJZGVudGl0eSBGaWxlICovCi0jZGVmaW5lIFNTSF9DRkcg MjIgICAgICAgICAgICAgICAgICAgICAgLyogVXNlIE9wZW5TU0ggQ29uZmlnICovCi0jZGVmaW5l IFNTSF9IQlQgMjMgICAgICAgICAgICAgICAgICAgICAgLyogSGVhcnRiZWF0IEludGVydmFsICov Ci0jZW5kaWYgLyogU1NIQlVJTFRJTiAqLwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBzc2h0YWJb XSA9IHsgICAgICAgLyogU0VUIFNTSCBjb21tYW5kIHRhYmxlICovCi0jaWZkZWYgU1NIQlVJTFRJ TgotICAgIHsgImFnZW50LWZvcndhcmRpbmciLCAgICAgICAgU1NIX0FGVywgIDAgfSwKLSAgICB7 ICJjaGVjay1ob3N0LWlwIiwgICAgICAgICAgIFNTSF9DSEksICAwIH0sCi0gICAgeyAiY29tcHJl c3Npb24iLCAgICAgICAgICAgICBTU0hfQ01QLCAgMCB9LAotICAgIHsgImR5bmFtaWMtZm9yd2Fy ZGluZyIsICAgICAgU1NIX0RZRiwgIDAgfSwKLSAgICB7ICJnYXRld2F5LXBvcnRzIiwgICAgICAg ICAgIFNTSF9HV1AsICAwIH0sCi0gICAgeyAiZ3NzYXBpIiwgICAgICAgICAgICAgICAgICBTU0hf R1NTLCAgMCB9LAotICAgIHsgImhlYXJ0YmVhdC1pbnRlcnZhbCIsICAgICAgU1NIX0hCVCwgIDAg fSwKLSAgICB7ICJpZGVudGl0eS1maWxlIiwgICAgICAgICAgIFNTSF9JREYsICAwIH0sCi0jaWZk ZWYgQ09NTUVOVAotICAgIHsgImtiZC1pbnRlcmFjdGl2ZS1kZXZpY2VzIiwgU1NIX0tCRCwgIDAg fSwKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgeyAiazQiLCAgICAgICAgICAgICAgICAgICAg ICBTU0hfSzQsIENNX0lOViB9LAotICAgIHsgIms1IiwgICAgICAgICAgICAgICAgICAgICAgU1NI X0s1LCBDTV9JTlYgfSwKLSAgICB7ICJrZXJiZXJvczQiLCAgICAgICAgICAgICAgIFNTSF9LNCwg ICAwIH0sCi0gICAgeyAia2VyYmVyb3M1IiwgICAgICAgICAgICAgICBTU0hfSzUsICAgMCB9LAot ICAgIHsgImtyYjQiLCAgICAgICAgICAgICAgICAgICAgU1NIX0s0LCBDTV9JTlYgfSwKLSAgICB7 ICJrcmI1IiwgICAgICAgICAgICAgICAgICAgIFNTSF9LNSwgQ01fSU5WIH0sCi0gICAgeyAicHJp dmlsZWdlZC1wb3J0IiwgICAgICAgICBTU0hfUFJQLCAgMCB9LAotICAgIHsgInF1aWV0IiwgICAg ICAgICAgICAgICAgICAgU1NIX1NISCwgIDAgfSwKLSAgICB7ICJzdHJpY3QtaG9zdC1rZXktY2hl Y2siLCAgIFNTSF9TSEssICAwIH0sCi0gICAgeyAidXNlLW9wZW5zc2gtY29uZmlnIiwgICAgICBT U0hfQ0ZHLCAgMCB9LAotICAgIHsgInYxIiwgICAgICAgICAgICAgICAgICAgICAgU1NIX1YxLCAg IDAgfSwKLSAgICB7ICJ2MiIsICAgICAgICAgICAgICAgICAgICAgIFNTSF9WMiwgICAwIH0sCi0g ICAgeyAidmVyYm9zZSIsICAgICAgICAgICAgICAgICBTU0hfVlJCLCAgMCB9LAotICAgIHsgInZl cnNpb24iLCAgICAgICAgICAgICAgICAgU1NIX1ZFUiwgIDAgfSwKLSAgICB7ICJ4MTEtZm9yd2Fy ZGluZyIsICAgICAgICAgIFNTSF9YRlcsICAwIH0sCi0gICAgeyAieGF1dGgtbG9jYXRpb24iLCAg ICAgICAgICBTU0hfWEFMLCAgMCB9LAotI2Vsc2UKLSNpZmRlZiBTU0hDTUQKLSAgICB7ICJjb21t YW5kIiwgICAgICAgICAgICAgICAgIFNTSF9DTUQsICAwIH0sCi0jZW5kaWYgLyogU1NIQ01EICov Ci0jZW5kaWYgLyogU1NIQlVJTFRJTiAqLwotICAgIHsgIiIsIDAsIDAgfQotfTsKLXN0YXRpYyBp bnQgbnNzaHRhYiA9IChzaXplb2Yoc3NodGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAx OwotCi0jaWZkZWYgU1NIQlVJTFRJTgotc3RhdGljIHN0cnVjdCBrZXl0YWIgc3NodmVyW10gPSB7 ICAgICAgIC8qIFNFVCBTU0ggVkVSU0lPTiBjb21tYW5kIHRhYmxlICovCi0gICAgeyAiMSIsICAg ICAgICAgIDEsICAwIH0sCi0gICAgeyAiMiIsICAgICAgICAgIDIsICAwIH0sCi0gICAgeyAiYXV0 b21hdGljIiwgIDAsICAwIH0KLX07Ci0KLSNkZWZpbmUgU1NIQV9DUlMgICAxCi0jZGVmaW5lIFNT SEFfRFNBICAgMgotI2RlZmluZSBTU0hBX0dTUyAgIDMKLSNkZWZpbmUgU1NIQV9IT1MgICA0Ci0j ZGVmaW5lIFNTSEFfS0JEICAgNQotI2RlZmluZSBTU0hBX0s0ICAgIDYKLSNkZWZpbmUgU1NIQV9L NSAgICA3Ci0jZGVmaW5lIFNTSEFfUFNXICAgOAotI2RlZmluZSBTU0hBX1BLICAgIDkKLSNkZWZp bmUgU1NIQV9TS0UgIDEwCi0jZGVmaW5lIFNTSEFfVElTICAxMQotI2RlZmluZSBTU0hBX0VYVCAg MTIKLSNkZWZpbmUgU1NIQV9TUlAgIDEzCi0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNzaDJhdXRb XSA9IHsgICAgICAvKiBTRVQgU1NIIFYyIEFVVEggY29tbWFuZCB0YWJsZSAqLwotICAgIHsgImV4 dGVybmFsLWtleXgiLCAgICAgIFNTSEFfRVhULCAwIH0sCi0gICAgeyAiZ3NzYXBpIiwgICAgICAg ICAgICAgU1NIQV9HU1MsIDAgfSwKLSAgICB7ICJob3N0YmFzZWQiLCAgICAgICAgICBTU0hBX0hP UywgMCB9LAotICAgIHsgImtleWJvYXJkLWludGVyYWN0aXZlIiwgIFNTSEFfS0JELCAwIH0sCi0g ICAgeyAicGFzc3dvcmQiLCAgICAgICAgICAgU1NIQV9QU1csIDAgfSwKLSAgICB7ICJwdWJsaWNr ZXkiLCAgICAgICAgICBTU0hBX1BLLCAgMCB9LAotICAgIHsgInNycC1nZXgtc2hhMSIsICAgICAg IFNTSEFfU1JQLCAwIH0sCi0gICAgeyAiIiwgMCwgMCB9Ci19Owotc3RhdGljIGludCBuc3NoMmF1 dCA9IChzaXplb2Yoc3NoMmF1dCkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLQotI2Rl ZmluZSBTU0hGX0xDTCAgIDEKLSNkZWZpbmUgU1NIRl9STVQgICAyCi0KLXN0YXRpYyBzdHJ1Y3Qg a2V5dGFiIGFkZGZ3ZFtdID0geyAgICAgICAvKiBTRVQgU1NIIEFERCBjb21tYW5kIHRhYmxlICov Ci0gICAgeyAibG9jYWwtcG9ydC1mb3J3YXJkIiwgIFNTSEZfTENMLCAwIH0sCi0gICAgeyAicmVt b3RlLXBvcnQtZm9yd2FyZCIsIFNTSEZfUk1ULCAwIH0sCi0gICAgeyAiIiwgMCwgMCB9Ci19Owot c3RhdGljIGludCBuYWRkZndkID0gKHNpemVvZihhZGRmd2QpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0 YWIpKSAtIDE7Ci0KLSNkZWZpbmUgU1NIMV9DSUYgICAxCi0jZGVmaW5lIFNTSDFfR05IICAgMgot I2RlZmluZSBTU0gxX1VOSCAgIDMKLSNkZWZpbmUgU1NIMV9LNTQgICA0Ci0KLSNkZWZpbmUgU1NI Ml9DSUYgICAxCi0jZGVmaW5lIFNTSDJfR05IICAgMgotI2RlZmluZSBTU0gyX1VOSCAgIDMKLSNk ZWZpbmUgU1NIMl9BUksgICA0Ci0jZGVmaW5lIFNTSDJfSEtBICAgNQotI2RlZmluZSBTU0gyX01B QyAgIDYKLSNkZWZpbmUgU1NIMl9BVVQgICA3Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNzaHYx dGFiW10gPSB7ICAgICAvKiBTRVQgU1NIIFYxIGNvbW1hbmQgdGFibGUgKi8KLSAgICB7ICJjaXBo ZXIiLCAgICAgICAgICAgICAgICAgIFNTSDFfQ0lGLCAwIH0sCi0gICAgeyAiZ2xvYmFsLWtub3du LWhvc3RzLWZpbGUiLCBTU0gxX0dOSCwgMCB9LAotICAgIHsgIms1LXJldXNlLWs0LW1lc3NhZ2Vz IiwgICAgU1NIMV9LNTQsIENNX0lOViB9LAotICAgIHsgInVzZXIta25vd24taG9zdHMtZmlsZSIs ICAgU1NIMV9VTkgsIDAgfSwKLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5zc2h2 MXRhYiA9IChzaXplb2Yoc3NodjF0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0K LXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNzaHYydGFiW10gPSB7ICAgICAvKiBTRVQgU1NIIFYyIGNv bW1hbmQgdGFibGUgKi8KLSAgICB7ICJhdXRoZW50aWNhdGlvbiIsICAgICAgICAgIFNTSDJfQVVU LCAwIH0sCi0gICAgeyAiYXV0by1yZWtleSIsICAgICAgICAgICAgICBTU0gyX0FSSywgMCB9LAot ICAgIHsgImNpcGhlcnMiLCAgICAgICAgICAgICAgICAgU1NIMl9DSUYsIDAgfSwKLSAgICB7ICJn bG9iYWwta25vd24taG9zdHMtZmlsZSIsIFNTSDJfR05ILCAwIH0sCi0gICAgeyAiaG9zdGtleS1h bGdvcml0aG1zIiwgICAgICBTU0gyX0hLQSwgMCB9LAotICAgIHsgIm1hY3MiLCAgICAgICAgICAg ICAgICAgICAgU1NIMl9NQUMsIDAgfSwKLSAgICB7ICJ1c2VyLWtub3duLWhvc3RzLWZpbGUiLCAg IFNTSDJfVU5ILCAwIH0sCi0gICAgeyAiIiwgMCwgMCB9Ci19Owotc3RhdGljIGludCBuc3NodjJ0 YWIgPSAoc2l6ZW9mKHNzaHYydGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwotCi0j ZGVmaW5lIFNTSENfM0RFUyAxICAgICAgICAgICAgICAgICAgICAgLyogM0RFUyAqLwotI2RlZmlu ZSBTU0hDXzNDQkMgMiAgICAgICAgICAgICAgICAgICAgIC8qIDNERVMtQ0JDICovCi0jZGVmaW5l IFNTSENfQTEyOCAzICAgICAgICAgICAgICAgICAgICAgLyogQUVTMTI4LUNCQyAqLwotI2RlZmlu ZSBTU0hDX0ExOTIgNCAgICAgICAgICAgICAgICAgICAgIC8qIEFFUzE5Mi1DQkMgKi8KLSNkZWZp bmUgU1NIQ19BMjU2IDUgICAgICAgICAgICAgICAgICAgICAvKiBBRVMyNTYtQ0JDICovCi0jZGVm aW5lIFNTSENfQVJDNCA2ICAgICAgICAgICAgICAgICAgICAgLyogQVJDRk9VUiAqLwotI2RlZmlu ZSBTU0hDX0ZJU0ggNyAgICAgICAgICAgICAgICAgICAgIC8qIEJMT1dGSVNIICovCi0jZGVmaW5l IFNTSENfQkNCQyA5ICAgICAgICAgICAgICAgICAgICAgLyogQkxPV0ZJU0gtQ0JDICovCi0jZGVm aW5lIFNTSENfQzEyOCA4ICAgICAgICAgICAgICAgICAgICAgLyogQ0FTVDEyOC1DQkMgKi8KLSNk ZWZpbmUgU1NIQ18xREVTIDEwICAgICAgICAgICAgICAgICAgICAvKiBERVMgKi8KLQotc3RhdGlj IHN0cnVjdCBrZXl0YWIgc3NoMWNpcGhlcnNbXSA9IHsKLSAgICB7ICIzZGVzIiwgICAgICAgICBT U0hDXzNERVMsIDAgfSwKLSAgICB7ICJibG93ZmlzaCIsICAgICBTU0hDX0ZJU0gsIDAgfSwKLSAg ICB7ICJkZXMiLCAgICAgICAgICBTU0hDXzFERVMsIDAgfSwKLSAgICB7ICIiLCAwLCAwIH0KLX07 Ci1zdGF0aWMgaW50IG5zc2gxY2lwaGVycyA9IChzaXplb2Yoc3NoMWNpcGhlcnMpIC8gc2l6ZW9m KHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNzaDJjaXBoZXJz W10gPSB7ICAvKiBTRVQgU1NIIFYyIENJUEhFUlMgY29tbWFuZCB0YWJsZSAqLwotICAgIHsgIjNk ZXMtY2JjIiwgICAgICAgIFNTSENfM0RFUywgMCB9LAotICAgIHsgImFlczEyOC1jYmMiLCAgICAg IFNTSENfQTEyOCwgMCB9LAotICAgIHsgImFlczE5Mi1jYmMiLCAgICAgIFNTSENfQTE5MiwgMCB9 LAotICAgIHsgImFlczI1Ni1jYmMiLCAgICAgIFNTSENfQTI1NiwgMCB9LAotICAgIHsgImFyY2Zv dXIiLCAgICAgICAgIFNTSENfQVJDNCwgMCB9LAotICAgIHsgImJsb3dmaXNoLWNiYyIsICAgIFNT SENfRklTSCwgMCB9LAotICAgIHsgImNhc3QxMjgtY2JjIiwgICAgIFNTSENfQzEyOCwgMCB9LAot ICAgIHsgInJpam5kYWVsMTI4LWNiYyIsIFNTSENfQTEyOCwgMCB9LAotICAgIHsgInJpam5kYWVs MTkyLWNiYyIsIFNTSENfQTE5MiwgMCB9LAotICAgIHsgInJpam5kYWVsMjU2LWNiYyIsIFNTSENf QTI1NiwgMCB9LAotICAgIHsgIiIsIDAsIDAgfQotfTsKLXN0YXRpYyBpbnQgbnNzaDJjaXBoZXJz ID0gKHNpemVvZihzc2gyY2lwaGVycykgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLQot I2RlZmluZSBTU0hNX1NIQSAgICAgICAgMSAgICAgICAgICAgICAgIC8qIEhNQUMtU0hBMSAqLwot I2RlZmluZSBTU0hNX1NIQV85NiAgICAgMiAgICAgICAgICAgICAgIC8qIEhNQUMtU0hBMS05NiAq LwotI2RlZmluZSBTU0hNX01ENSAgICAgICAgMyAgICAgICAgICAgICAgIC8qIEhNQUMtTUQ1ICov Ci0jZGVmaW5lIFNTSE1fTUQ1Xzk2ICAgICA0ICAgICAgICAgICAgICAgLyogSE1BQy1NRDUtOTYg Ki8KLSNkZWZpbmUgU1NITV9SSVBFICAgICAgIDUgICAgICAgICAgICAgICAvKiBITUFDLVJJUEVN RDE2MCAqLwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBzc2gybWFjc1tdID0geyAgICAgLyogU0VU IFNTSCBWMiBNQUNTIGNvbW1hbmQgdGFibGUgKi8KLSAgICB7ICJobWFjLW1kNSIsICAgICAgIFNT SE1fTUQ1LCAgICAwIH0sCi0gICAgeyAiaG1hYy1tZDUtOTYiLCAgICBTU0hNX01ENV85NiwgMCB9 LAotICAgIHsgImhtYWMtcmlwZW1kMTYwIiwgU1NITV9SSVBFLCAgIDAgfSwKLSAgICB7ICJobWFj LXNoYTEiLCAgICAgIFNTSE1fU0hBLCAgICAwIH0sCi0gICAgeyAiaG1hYy1zaGExLTk2IiwgICBT U0hNX1NIQV85NiwgMCB9LAotICAgIHsgIiIsIDAsIDAgfQotfTsKLXN0YXRpYyBpbnQgbnNzaDJt YWNzID0gKHNpemVvZihzc2gybWFjcykgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLQot c3RhdGljIHN0cnVjdCBrZXl0YWIgdGd0cGFzc1tdID0gewotICAgIHsgInRndC1wYXNzaW5nIiwg MSwgMCwgfSwKLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IG50Z3RwYXNzID0gKHNp emVvZih0Z3RwYXNzKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwotCi1zdGF0aWMgc3Ry dWN0IGtleXRhYiBnc3NhcGl0YWJbXSA9IHsKLSAgICB7ICJkZWxlZ2F0ZS1jcmVkZW50aWFscyIs IDEsIDAsIH0sCi0gICAgeyAia2V5LWV4Y2hhbmdlIiwgICAgICAgICAyLCBDTV9JTlYsIH0sCi0g ICAgeyAiIiwgMCwgMCB9Ci19Owotc3RhdGljIGludCBuZ3NzYXBpdGFiID0gKHNpemVvZihnc3Nh cGl0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLSNkZWZpbmUgSEtBX1JTQSAx Ci0jZGVmaW5lIEhLQV9EU1MgMgotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBoa2F0YWJbXSA9IHsK LSAgICB7ICJzc2gtZHNzIiwgSEtBX0RTUywgMCwgfSwKLSAgICB7ICJzc2gtcnNhIiwgSEtBX1JT QSwgMCwgfSwKLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5oa2F0YWIgPSAoc2l6 ZW9mKGhrYXRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLQotaW50ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBTU0ggdmFyaWFibGVzICovCi0gIHNz aF9hZncgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWdlbnQgZm9yd2FyZGluZyAq LwotICBzc2hfeGZ3ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHgxMSBmb3J3YXJk aW5nICAgKi8KLSAgc3NoX3BycCA9IFNFVF9PRkYsICAgICAgICAgICAgICAgICAgICAvKiBwcml2 aWxlZ2VkIHBvcnRzICovCi0gIHNzaF9jbXAgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogY29tcHJlc3Npb24gKi8KLSAgc3NoX3NoaCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBxdWlldCAgICAgICAqLwotICBzc2hfdmVyID0gMCwgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHByb3RvY29sIHZlcnNpb24gKGF1dG8sMSwyKSAqLwotICBzc2hfdnJiID0gMiwgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFJlcG9ydCBlcnJvcnMgKi8KLSAgc3NoX2Noa2lwID0g MCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBTU0ggQ2hlY2sgSG9zdCBJUCBmbGFnICovCi0g IHNzaF9nd3AgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZ2F0ZXdheSBwb3J0cyAq LwotICBzc2hfZHlmID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGR5bmFtaWMgZm9y d2FyZGluZyAqLwotICBzc2hfZ3NkID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdz c2FwaSBkZWxlZ2F0ZSBjcmVkZW50aWFscyAqLwotICBzc2hfazR0Z3QgPSAwLCAgICAgICAgICAg ICAgICAgICAgICAgIC8qIGs0IHRndCBwYXNzaW5nICovCi0gIHNzaF9rNXRndCA9IDAsICAgICAg ICAgICAgICAgICAgICAgICAgLyogazUgdGd0IHBhc3NpbmcgKi8KLSAgc3NoX3NoayA9IDIsICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBTdHJpY3QgaG9zdCBrZXkgKG5vLCB5ZXMsIGFzaykg Ki8KLSAgc3NoMl9hcmsgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBdXRvIHJlLWtl eSAqLwotICBzc2hfY2FzID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQg YXMgc3Vic3lzICovCi0gIHNzaF9jZmcgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyog dXNlIE9wZW5TU0ggY29uZmlnPyAqLwotICBzc2hfZ2t4ID0gMSwgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIGdzc2FwaSBrZXkgZXhjaGFuZ2UgKi8KLSAgc3NoX2s1X2lzX2s0ID0gMSwgICAg ICAgICAgICAgICAgICAgICAvKiBzb21lIFNTSCB2MSB1c2Ugc2FtZSBjb2RlcyAqLwotICBzc2hf aGJ0ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhlYXJ0YmVhdCAoc2Vjb25kcykg Ki8KLSAgc3NoX2R1bW15ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBib3R0b20gb2Yg bGlzdCAqLwotCi1jaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhl IGZvbGxvd2luZyBhcmUgdG8gYmUgbWFsbG9jJ2QgKi8KLSAgKiBzc2gxX2NpZiA9IE5VTEwsICAg ICAgICAgICAgICAgICAgICAvKiB2MSBjaXBoZXIgKi8KLSAgKiBzc2gyX2NpZiA9IE5VTEwsICAg ICAgICAgICAgICAgICAgICAvKiB2MiBjaXBoZXIgbGlzdCAqLwotICAqIHNzaDJfbWFjID0gTlVM TCwgICAgICAgICAgICAgICAgICAgIC8qIHYyIG1hYyBsaXN0ICovCi0gICogc3NoMl9hdXRoID0g TlVMTCwgICAgICAgICAgICAgICAgICAgLyogdjIgYXV0aGVudGljYXRpb24gbGlzdCAqLwotICAq IHNzaF9oc3QgPSBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIGhvc3RuYW1lICovCi0gICog c3NoX3BydCA9IE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogcG9ydC9zZXJ2aWNlICovCi0g ICogc3NoX2NtZCA9IE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogY29tbWFuZCB0byBleGVj dXRlICovCi0gICogc3NoX3hhbCA9IE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogeGF1dGgt bG9jYXRpb24gKi8KLSAgKiBzc2gxX2duaCA9IE5VTEwsICAgICAgICAgICAgICAgICAgICAvKiB2 MSBnbG9iYWwga25vd24gaG9zdHMgZmlsZSAqLwotICAqIHNzaDFfdW5oID0gTlVMTCwgICAgICAg ICAgICAgICAgICAgIC8qIHYxIHVzZXIga25vd24gaG9zdHMgZmlsZSAqLwotICAqIHNzaDJfZ25o ID0gTlVMTCwgICAgICAgICAgICAgICAgICAgIC8qIHYyIGdsb2JhbCBrbm93biBob3N0cyBmaWxl ICovCi0gICogc3NoMl91bmggPSBOVUxMLCAgICAgICAgICAgICAgICAgICAgLyogdjIgdXNlciBr bm93biBob3N0cyBmaWxlICovCi0gICogc3NoMl9oa2EgPSBOVUxMLCAgICAgICAgICAgICAgICAg ICAgLyogSG9zdCBLZXkgQWxnb3JpdGhtcyAqLwotICAqIHh4eF9kdW1teSA9IE5VTEw7Ci0KLWNo YXIgKiBzc2hfaWRmWzMyXSA9IHsgICAgICAgICAgICAgICAgICAvKiBJZGVudGl0eSBmaWxlIGxp c3QgKi8KLSAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLAotICBOVUxM LE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsCi0gIE5VTEwsTlVMTCxOVUxMLE5V TEwsTlVMTCxOVUxMLE5VTEwsTlVMTCwKLSAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEws TlVMTCxOVUxMCi19OwotY2hhciAqIHNzaF90bXBbMzJdID0geyAgICAgICAgICAgICAgICAgIC8q IFRlbXAgaWRlbnRpdHkgZmlsZSBsaXN0ICovCi0gIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwsTlVMTCwKLSAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxM LAotICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsCi0gIE5VTEwsTlVM TCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTAotfTsKLWludCBzc2hfaWRmX24gPSAwOwot Ci1leHRlcm4gaW50ICAgIHNzaF9wZl9sY2xfbiwKLSAgICAgICAgICAgICAgc3NoX3BmX3JtdF9u OwotZXh0ZXJuIHN0cnVjdCBzc2hfcGYgc3NoX3BmX2xjbFszMl07ICAgIC8qIFBvcnQgZm9yd2Fy ZGluZyBzdHJ1Y3RzICovCi1leHRlcm4gc3RydWN0IHNzaF9wZiBzc2hfcGZfcm10WzMyXTsgICAg LyogKGRlY2xhcmVkIGluIGNrdXVzci5jKSAqLwotI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KLQot I2lmZGVmIFNGVFBfQlVJTFRJTgotc3RhdGljIHN0cnVjdCBrZXl0YWIgc2Z0cHRhYltdID0gewot ICAgIHsgImVuZC1vZi1saW5lIiwgICAgICAgICAgICBYWV9TRlRQX0VPTCwgMCwgfSwKLSAgICB7 ICJyZW1vdGUtY2hhcmFjdGVyLXNldCIsICAgWFlfU0ZUUF9SQ1MsIDAsIH0sCi0gICAgeyAiIiwg MCwgMCB9Ci19Owotc3RhdGljIGludCBuc2Z0cHRhYiA9IChzaXplb2Yoc2Z0cHRhYikgLyBzaXpl b2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLSNlbmRpZiAvKiBTRlRQX0JVSUxUSU4gKi8KLQotVk9J RAotc2hvc3NoKCkgewotI2lmZGVmIFNTSEJVSUxUSU4KLSAgICBpbnQgaSwgbiA9IDA7ICAgICAg ICAgICAgICAgICAgICAgICAvKiBBREQgYXNrbW9yZSgpISAqLwotCi0gICAgcHJpbnRmKCJcblNT SCBpcyBidWlsdCBpbjpcblxuIik7Ci0KLSAgICBwcmludGYoIiBzc2ggaG9zdDogICAgICAgICAg ICAgICAgICAgICAgICAlc1xuIixzaG93c3RyaW5nKHNzaF9oc3QpKTsKLSAgICBwcmludGYoIiBz c2ggcG9ydDogICAgICAgICAgICAgICAgICAgICAgICAlc1xuIixzaG93c3RyaW5nKHNzaF9wcnQp KTsKLSAgICBwcmludGYoIiBzc2ggY29tbWFuZDogICAgICAgICAgICAgICAgICAgICAlc1xuIixz aG93c3RyaW5nKHNzaF9jbWQpKTsKLSAgICBwcmludGYoIiBzc2ggYWdlbnQtZm9yd2FyZGluZzog ICAgICAgICAgICAlc1xuIixzaG93b2ZmKHNzaF9hZncpKTsKLSAgICBwcmludGYoIiBzc2ggY2hl Y2staG9zdC1pcDogICAgICAgICAgICAgICAlc1xuIixzaG93b2ZmKHNzaF9jaGtpcCkpOwotICAg IHByaW50ZigiIHNzaCBjb21wcmVzc2lvbjogICAgICAgICAgICAgICAgICVzXG4iLHNob3dvZmYo c3NoX2NtcCkpOwotICAgIHByaW50ZigiIHNzaCBkeW5hbWljLWZvcndhcmRpbmc6ICAgICAgICAg ICVzXG4iLHNob3dvZmYoc3NoX2R5ZikpOwotICAgIGlmIChzc2hfcGZfbGNsWzBdLnAxICYmIHNz aF9wZl9sY2xbMF0uaG9zdCAmJiBzc2hfcGZfbGNsWzBdLnAyKSB7Ci0gICAgICBwcmludGYoIiBz c2ggZm9yd2FyZC1sb2NhbC1wb3J0OiAgICAgICAgICAlZCAlcyAlZFxuIiwKLSAgICAgICAgICAg ICBzc2hfcGZfbGNsWzBdLnAxLCBzc2hfcGZfbGNsWzBdLmhvc3QsIHNzaF9wZl9sY2xbMF0ucDIp OwotICAgICAgZm9yICggbj0xO248c3NoX3BmX2xjbF9uO24rKyApCi0gICAgICAgIHByaW50Zigi ICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgICAgICVkICVzICVkXG4iLAotICAgICAgICAg ICAgICAgc3NoX3BmX2xjbFtuXS5wMSwgc3NoX3BmX2xjbFtuXS5ob3N0LCBzc2hfcGZfbGNsW25d LnAyKTsKLSAgICB9IGVsc2UKLSAgICAgIHByaW50ZigiIHNzaCBmb3J3YXJkLWxvY2FsLXBvcnQ6 ICAgICAgICAgKG5vbmUpXG4iKTsKLSAgICBpZiAoc3NoX3BmX3JtdFswXS5wMSAmJiBzc2hfcGZf cm10WzBdLmhvc3QgJiYgc3NoX3BmX3JtdFswXS5wMikgewotICAgICAgcHJpbnRmKCIgc3NoIGZv cndhcmQtcmVtb3RlLXBvcnQ6ICAgICAgICAgJWQgJXMgJWRcbiIsCi0gICAgICAgICAgICAgc3No X3BmX3JtdFswXS5wMSwgc3NoX3BmX3JtdFswXS5ob3N0LCBzc2hfcGZfcm10WzBdLnAyKTsKLSAg ICAgIGZvciAoIG49MTtuPHNzaF9wZl9ybXRfbjtuKysgKQotICAgICAgICBwcmludGYoIiAgICAg ICAgICAgICAgICAgICAgICAgIDogICAgICAgICAlZCAlcyAlZFxuIiwKLSAgICAgICAgICAgICAg IHNzaF9wZl9ybXRbbl0ucDEsIHNzaF9wZl9ybXRbbl0uaG9zdCwgc3NoX3BmX3JtdFtuXS5wMik7 Ci0gICAgfSBlbHNlCi0gICAgICBwcmludGYoIiBzc2ggZm9yd2FyZC1yZW1vdGUtcG9ydDogICAg ICAgIChub25lKVxuIik7Ci0gICAgcHJpbnRmKCIgc3NoIGdhdGV3YXktcG9ydHM6ICAgICAgICAg ICAgICAgJXNcbiIsc2hvd29mZihzc2hfZ3dwKSk7Ci0gICAgcHJpbnRmKCIgc3NoIGdzc2FwaSBk ZWxlZ2F0ZS1jcmVkZW50aWFsczogJXNcbiIsc2hvd29mZihzc2hfZ3NkKSk7Ci0gICAgcHJpbnRm KCIgc3NoIGdzc2FwaSBrZXktZXhjaGFuZ2UgICAgICAgIDogJXNcbiIsc2hvd29mZihzc2hfZ2t4 KSk7Ci0gICAgcHJpbnRmKCIgc3NoIGlkZW50aXR5LWZpbGU6ICAgICAgICAgICAgICAgJWRcbiIs c3NoX2lkZl9uKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgc3NoX2lkZl9uOyBpKyspCi0gICAgICBw cmludGYoIiAgJTJkLiAlc1xuIixpKzEsc2hvd3N0cmluZyhzc2hfaWRmW2ldKSk7Ci0gICAgcHJp bnRmKCIgc3NoIGhlYXJ0YmVhdCBpbnRlcnZhbDogICAgICAgICAgJWRcbiIsIHNzaF9oYnQpOwot ICAgIHByaW50ZigiIHNzaCBrNCB0Z3QtcGFzc2luZzogICAgICAgICAgICAgICVzXG4iLHNob3dv ZmYoc3NoX2s0dGd0KSk7Ci0gICAgcHJpbnRmKCIgc3NoIGs1IHRndC1wYXNzaW5nOiAgICAgICAg ICAgICAgJXNcbiIsc2hvd29mZihzc2hfazV0Z3QpKTsKLQotICAgIHByaW50ZigiIHNzaCBwcml2 aWxlZ2VkLXBvcnQ6ICAgICAgICAgICAgICVzXG4iLHNob3dvb2Eoc3NoX3BycCkpOwotICAgIHBy aW50ZigiIHNzaCBxdWlldDogICAgICAgICAgICAgICAgICAgICAgICVzXG4iLHNob3dvZmYoc3No X3NoaCkpOwotICAgIHByaW50ZigiIHNzaCBzdHJpY3QtaG9zdC1rZXktY2hlY2s6ICAgICAgICVk XG4iLHNzaF9zaGspOwotICAgIHByaW50ZigiIHNzaCB1c2Utb3BlbnNzaC1jb25maWc6ICAgICAg ICAgICVzXG4iLHNob3dvZmYoc3NoX2NmZykpOwotICAgIHByaW50ZigiIHNzaCB2ZXJib3NlOiAg ICAgICAgICAgICAgICAgICAgICVkXG4iLHNzaF92cmIpOwotICAgIHByaW50ZigiIHNzaCB2ZXJz aW9uOiAgICAgICAgICAgICAgICAgICAgICVzXG4iLAotICAgICAgICAgICBzc2hfdmVyID8gY2tp dG9hKHNzaF92ZXIpIDogImF1dG9tYXRpYyIKLSAgICAgICAgICAgKTsKLSAgICBwcmludGYoIiBz c2ggeDExLWZvcndhcmRpbmc6ICAgICAgICAgICAgICAlc1xuIixzaG93b29hKHNzaF94ZncpKTsK LSAgICBwcmludGYoIiBzc2ggeGF1dGgtbG9jYXRpb246ICAgICAgICAgICAgICAlc1xuIixzaG93 c3RyaW5nKHNzaF94YWwpKTsKLSAgICBwcmludGYoIlxuIik7Ci0gICAgcHJpbnRmKCIgc3NoIHYx IGNpcGhlcjogICAgICAgICAgICAgICAgICAgJXNcbiIsc2hvd3N0cmluZyhzc2gxX2NpZikpOwot ICAgIHByaW50ZigiIHNzaCB2MSBnbG9iYWwta25vd24taG9zdHMtZmlsZTogICVzXG4iLHNob3dz dHJpbmcoc3NoMV9nbmgpKTsKLSAgICBwcmludGYoIiBzc2ggdjEgdXNlci1rbm93bi1ob3N0cy1m aWxlOiAgICAlc1xuIixzaG93c3RyaW5nKHNzaDFfdW5oKSk7Ci0gICAgcHJpbnRmKCJcbiIpOwot ICAgIHByaW50ZigiIHNzaCB2MiBhdXRoZW50aWNhdGlvbjogICAgICAgICAgICVzXG4iLHNob3dz dHJpbmcoc3NoMl9hdXRoKSk7Ci0gICAgcHJpbnRmKCIgc3NoIHYyIGF1dG8tcmVrZXk6ICAgICAg ICAgICAgICAgJXNcbiIsc2hvd29mZihzc2gyX2FyaykpOwotICAgIHByaW50ZigiIHNzaCB2MiBj aXBoZXJzOiAgICAgICAgICAgICAgICAgICVzXG4iLHNob3dzdHJpbmcoc3NoMl9jaWYpKTsKLSAg ICBwcmludGYoIiBzc2ggdjIgY29tbWFuZC1hcy1zdWJzeXN0ZW06ICAgICAlc1xuIixzaG93b2Zm KHNzaF9jYXMpKTsKLSAgICBwcmludGYoIiBzc2ggdjIgZ2xvYmFsLWtub3duLWhvc3RzLWZpbGU6 ICAlc1xuIixzaG93c3RyaW5nKHNzaDJfZ25oKSk7Ci0gICAgcHJpbnRmKCIgc3NoIHYyIGhvc3Rr ZXktYWxnb3JpdGhtczogICAgICAgJXNcbiIsc2hvd3N0cmluZyhzc2gyX2hrYSkpOwotICAgIHBy aW50ZigiIHNzaCB2MiBtYWM6ICAgICAgICAgICAgICAgICAgICAgICVzXG4iLHNob3dzdHJpbmco c3NoMl9tYWMpKTsKLSAgICBwcmludGYoIiBzc2ggdjIgdXNlci1rbm93bi1ob3N0cy1maWxlOiAg ICAlc1xuIixzaG93c3RyaW5nKHNzaDJfdW5oKSk7Ci0jZWxzZQotI2lmZGVmIFNTSENNRAotICAg IGV4dGVybiBjaGFyICogc3NoY21kLCAqIGRlZnNzaGNtZDsKLSAgICBjaGFyICogczsKLSAgICBz ID0gc3NoY21kID8gc3NoY21kIDogZGVmc3NoY21kOwotICAgIHByaW50ZigiXG4gU1NIIGlzIGV4 dGVybmFsLlxuXG4iKTsKLSAgICBwcmludGYoIiBzc2ggY29tbWFuZDogJXNcbiIsc2hvd3N0cmlu ZyhzKSk7Ci0jZW5kaWYgLyogU1NIQ01EICovCi0jZW5kaWYgLyogU1NIQlVJTFRJTiAqLwotICAg IHByaW50ZigiXG4iKTsKLX0KLQotc3RhdGljIGludAotZG9zZXRzc2goKSB7Ci0jaWZkZWYgU1NI Q01ECi0gICAgZXh0ZXJuIGNoYXIgKiBzc2hjbWQ7Ci0jZW5kaWYgLyogU1NIQ01EICovCi0jaWZk ZWYgU1NIQlVJTFRJTgotI2lmbmRlZiBTU0hURVNUCi0gICAgZXh0ZXJuIGludCBzbF9zc2hfeGZ3 X3NhdmVkLCBzbF9zc2hfdmVyX3NhdmVkOwotI2VuZGlmIC8qIFNTSFRFU1QgKi8KLSNlbmRpZiAv KiBTU0hCVUlMVElOICovCi0gICAgaW50IGN4LCB4LCB5LCB6OwotICAgIGNoYXIgKiBzOwotCi0g ICAgaWYgKChjeCA9IGNta2V5KHNzaHRhYixuc3NodGFiLCIiLCJjb21tYW5kIiwgeHhzdHJpbmcp KSA8IDApCi0gICAgICByZXR1cm4oY3gpOwotICAgIHN3aXRjaCAoY3gpIHsKLSNpZmRlZiBTU0hD TUQKLSAgICAgIGNhc2UgU1NIX0NNRDogICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kICov Ci0gICAgICAgIGlmICgoeCA9IGNtdHh0KCJDb21tYW5kIHRvIHN0YXJ0IHNzaCIsInNzaCAtZSBu b25lIiwKLSAgICAgICAgICAgICAgICAgICAgICAgJnMseHhzdHJpbmcpKSA8IDApCi0gICAgICAg ICAgcmV0dXJuKHgpOwotICAgICAgICBtYWtlc3RyKCZzc2hjbWQscyk7Ci0gICAgICAgIHJldHVy bihzdWNjZXNzID0gMSk7Ci0jZW5kaWYgLyogU1NIQ01EICovCi0KLSNpZmRlZiBTU0hCVUlMVElO Ci0gICAgICBjYXNlIFNTSF9BRlc6ICAgICAgICAgICAgICAgICAgICAgLyogQWdlbnQtZm9yd2Fy ZGluZyAqLwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZzc2hfYWZ3KSk7Ci0KLSAg ICAgIGNhc2UgU1NIX0NISTogICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBIb3N0IElQICov Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gc2V0b24oJnNzaF9jaGtpcCkpOwotICAgICAgICBi cmVhazsKLQotICAgICAgY2FzZSBTU0hfQ01QOiAgICAgICAgICAgICAgICAgICAgIC8qIENvbXBy ZXNzaW9uICovCi0gICAgICAgIHJldHVybihzdWNjZXNzID0gc2V0b24oJnNzaF9jbXApKTsKLQot ICAgICAgY2FzZSBTU0hfRFlGOiAgICAgICAgICAgICAgICAgICAgIC8qIER5bmFtaWMgRm9yd2Fy ZGluZyAqLwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZzc2hfZHlmKSk7Ci0KLSAg ICAgIGNhc2UgU1NIX0dXUDogICAgICAgICAgICAgICAgICAgICAvKiBHYXRld2F5IHBvcnRzICov Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gc2V0b24oJnNzaF9nd3ApKTsKLQotICAgICAgY2Fz ZSBTU0hfR1NTOiAgICAgICAgICAgICAgICAgICAgIC8qIEdTU0FQSSAqLwotICAgICAgICBpZiAo KHkgPSBjbWtleShnc3NhcGl0YWIsbmdzc2FwaXRhYiwiIiwiIiwgeHhzdHJpbmcpKSA8IDApCi0g ICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICBzd2l0Y2ggKHkpIHsKLSAgICAgICAgICBjYXNl IDE6ICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxlZ2F0ZSBjcmVkZW50aWFscyAqLwotICAg ICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRvbigmc3NoX2dzZCkpOwotICAgICAgICAgIGNh c2UgMjogICAgICAgICAgICAgICAgICAgICAgIC8qIGtleS1leGNoYW5nZSAqLwotICAgICAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRvbigmc3NoX2dreCkpOwotICAgICAgICB9Ci0gICAgICAg IGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIHJl dHVybihzdWNjZXNzID0gMCk7Ci0KLSNpZmRlZiBDT01NRU5UCi0gICAgICBjYXNlIFNTSF9LQkQ6 ICAgICAgICAgICAgICAgICAgICAgLyogS2JkIEludGVyYWN0aXZlIERldmljZXMgKi8KLSAgICAg ICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAg LyogVE8gQkUgRklMTEVEIElOICovCi0gICAgICAgIHJldHVybigtMik7Ci0jZW5kaWYgLyogQ09N TUVOVCAqLwotCi0gICAgICBjYXNlIFNTSF9LNDogICAgICAgICAgICAgICAgICAgICAgLyogS2Vy YmVyb3MgSVYgKi8KLSAgICAgIGNhc2UgU1NIX0s1OiAgICAgICAgICAgICAgICAgICAgICAvKiBL ZXJiZXJvcyBWICovCi0gICAgICAgIGlmICgoeSA9IGNta2V5KHRndHBhc3MsMSwiIiwidGd0LXBh c3NpbmciLCB4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgIHN3 aXRjaCAoeSkgewotICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNz ID0gKGN4ID09IFNTSF9LNCkgPwotICAgICAgICAgICAgICAgICAgIHNldG9uKCZzc2hfazR0Z3Qp IDogc2V0b24oJnNzaF9rNXRndCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoeCA9IGNtY2Zt KCkpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0g MCk7Ci0KLSAgICAgIGNhc2UgU1NIX1BSUDogICAgICAgICAgICAgICAgICAgICAvKiBQcml2ZCBw b3J0ICovCi0gICAgICAgIHJldHVybihzdWNjZXNzID0gc2V0b24oJnNzaF9wcnApKTsKLQotICAg ICAgY2FzZSBTU0hfU0hIOiAgICAgICAgICAgICAgICAgICAgIC8qIFF1aWV0ICovCi0gICAgICAg IHJldHVybihzdWNjZXNzID0gc2V0b24oJnNzaF9zaGgpKTsKLQotICAgICAgY2FzZSBTU0hfU0hL OiAgICAgICAgICAgICAgICAgICAgIC8qIFN0cmljdCBIb3N0IEtleSBDaGVjayAqLwotICAgICAg ICBpZiAoKHkgPSBjbWtleShvb2t0YWIsMywiIiwiIiwgeHhzdHJpbmcpKSA8IDApCi0gICAgICAg ICAgcmV0dXJuKHkpOwotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAg cmV0dXJuKHgpOwotICAgICAgICBzc2hfc2hrID0geTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3Mg PSAxKTsKLQotICAgICAgY2FzZSBTU0hfSEJUOgotCXggPSBjbW51bSgiSGVhcnRiZWF0IGludGVy dmFsLCBzZWNvbmRzIiwiMCIsMTAsJnoseHhzdHJpbmcpOwotCWlmICh4IDwgMCkgcmV0dXJuKHgp OwotCWlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotCXNzaF9oYnQgPSB6OwotCXJl dHVybihzdWNjZXNzID0gMSk7Ci0KLSAgICAgIGNhc2UgU1NIX1YxOiAgICAgICAgICAgICAgICAg ICAgICAvKiBTU0ggVjEgKi8KLSAgICAgICAgaWYgKCh5ID0gY21rZXkoc3NodjF0YWIsbnNzaHYx dGFiLCIiLCIiLCB4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAg IHN3aXRjaCAoeSkgewotICAgICAgICAgIGNhc2UgU1NIMV9LNTQ6Ci0gICAgICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IHNldG9uKCZzc2hfazVfaXNfazQpKTsKLSAgICAgICAgICBjYXNlIFNTSDFf Q0lGOiAgICAgICAgICAgICAgICAvKiBOb3QgYSBsaXN0ICovCi0gICAgICAgICAgICBpZiAoKHkg PSBjbWtleShzc2gxY2lwaGVycyxuc3NoMWNpcGhlcnMsIiIsIiIsIHh4c3RyaW5nKSkgPCAwKQot ICAgICAgICAgICAgICBpZiAoeSAhPSAtMykKLSAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0g ICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgICAg IGlmICh5ID09IC0zKSB7Ci0gICAgICAgICAgICAgICAgbWFrZXN0cigmc3NoMV9jaWYsTlVMTCk7 Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZvciAoeCA9IDA7IHggPCBu c3NoMWNpcGhlcnM7IHgrKykKLSAgICAgICAgICAgICAgICAgIGlmIChzc2gxY2lwaGVyc1t4XS5r d3ZhbCA9PSB5KQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBt YWtlc3RyKCZzc2gxX2NpZixzc2gxY2lwaGVyc1t4XS5rd2QpOwotICAgICAgICAgICAgfQotICAg ICAgICAgICAgcmV0dXJuKDEpOwotICAgICAgICAgIGNhc2UgU1NIMV9HTkg6Ci0gICAgICAgICAg Y2FzZSBTU0gxX1VOSDoKLSAgICAgICAgICAgIGlmICgoeCA9IGNtaWZpKCJGaWxlbmFtZSIsIiIs JnMsJnoseHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoeCAhPSAtMykKLSAg ICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg ICAgICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOwotICAgICAgICAgICAgICAgIGlm ICh6Zm5xZnAobGluZSxUTVBCVUZTSVosdG1wYnVmKSkKLSAgICAgICAgICAgICAgICAgIGNrc3Ry bmNweShsaW5lLHRtcGJ1ZixMSU5CVUZTSVopOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg cyA9ICh4ID09IC0zKSA/IE5VTEwgOiBsaW5lOwotICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0o KSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKHkp IHsKLSAgICAgICAgICAgICAgY2FzZSBTU0gxX0dOSDogbWFrZXN0cigmc3NoMV9nbmgscyk7IGJy ZWFrOwotICAgICAgICAgICAgICBjYXNlIFNTSDFfVU5IOiBtYWtlc3RyKCZzc2gxX3VuaCxzKTsg YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4oMSk7Ci0gICAgICAgIH0K LQotICAgICAgY2FzZSBTU0hfVjI6ICAgICAgICAgICAgICAgICAgICAgIC8qIFNTSCBWMiAqLwot ICAgICAgICBpZiAoKHkgPSBjbWtleShzc2h2MnRhYixuc3NodjJ0YWIsIiIsIiIsIHh4c3RyaW5n KSkgPCAwKQotICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgc3dpdGNoICh5KSB7Ci0gICAg ICAgICAgY2FzZSBTU0gyX0FSSzoKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gc2V0b24o JnNzaDJfYXJrKSk7Ci0gICAgICAgIGNhc2UgU1NIMl9BVVQ6IHsgICAgICAgICAgICAgICAgICAg ICAgICAvKiBBdXRoZW50aWNhdGlvbiAqLwotI2RlZmluZSBUTVBDTlQgMTIKLSAgICAgICAgICAg IGludCBpLCBqLCB0bXBbVE1QQ05UXTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBUTVBD TlQ7IGkrKykKLSAgICAgICAgICAgICAgdG1wW2ldID0gMDsKLSAgICAgICAgICAgIGZvciAoaSA9 IDA7IGkgPCBUTVBDTlQ7IGkrKykgewotICAgICAgICAgICAgICAgIGlmICgoeSA9IGNta2V5KHNz aDJhdXQsbnNzaDJhdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkF1dGhlbnRp Y2F0aW9uIG1ldGhvZCIsIiIseHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAg aWYgKHkgPT0gLTMpCi0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg ICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZm9y IChqID0gMDsgaiA8IGk7IGorKykgewotICAgICAgICAgICAgICAgICAgICBpZiAodG1wW2pdID09 IHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXHJcbj9DaG9pY2UgaGFzIGFs cmVhZHkgYmVlbiB1c2VkLlxyXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigt OSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgdG1wW2ldID0geTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoeiA9IGNt Y2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHopOwotCi0gICAgICAgICAgICBpZiAo c3NoMl9hdXRoKSB7Ci0gICAgICAgICAgICAgICAgZnJlZShzc2gyX2F1dGgpOwotICAgICAgICAg ICAgICAgIHNzaDJfYXV0aCA9IE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo aSA+IDApIHsKLSAgICAgICAgICAgICAgICBpbnQgbGVuID0gMDsKLSAgICAgICAgICAgICAgICBm b3IgKGogPSAwOyBqIDwgaTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoeCA9IDA7 IHggPCBuc3NoMmF1dDsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgIGlmIChzc2gyYXV0W3hd Lmt3dmFsID09IHRtcFtqXSAmJiAhc3NoMmF1dFt4XS5mbGdzKQotICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGxlbiArPSBzdHJsZW4oc3NoMmF1dFt4 XS5rd2QpICsgMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3NoMl9hdXRo ID0gbWFsbG9jKGxlbik7Ci0gICAgICAgICAgICAgICAgc3NoMl9hdXRoWzBdID0gJ1wwJzsKLSAg ICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7Ci0gICAgICAgICAgICAgICAg ICAgIGZvciAoeCA9IDA7IHggPCBuc3NoMmF1dDsgeCsrKQotICAgICAgICAgICAgICAgICAgICAg IGlmIChzc2gyYXV0W3hdLmt3dmFsID09IHRtcFtqXSAmJiAhc3NoMmF1dFt4XS5mbGdzKQotICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNh dChzc2gyX2F1dGgsc3NoMmF1dFt4XS5rd2QsbGVuKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg KGogPCBpIC0gMSkKLSAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQoc3NoMl9hdXRoLCIs IixsZW4pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl dHVybihzdWNjZXNzID0gMSk7Ci0jdW5kZWYgVE1QQ05UCi0gICAgICAgICAgfQotICAgICAgICBj YXNlIFNTSDJfQ0lGOiB7Ci0jZGVmaW5lIFRNUENOVCAxMgotICAgICAgICAgICAgaW50IGksIGos IHRtcFtUTVBDTlRdOwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IFRNUENOVDsgaSsrKQot ICAgICAgICAgICAgICB0bXBbaV0gPSAwOwotCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwg VE1QQ05UOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbWtleShzc2gyY2lwaGVy cyxuc3NoMmNpcGhlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsIiIsIHh4 c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5ID09IC0zKQotICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0g ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBpOyBqKysp IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRtcFtqXSA9PSB5KSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBwcmludGYoIlxyXG4/Q2hvaWNlIGhhcyBhbHJlYWR5IGJlZW4gdXNlZC5cclxu Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRtcFtpXSA9IHk7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApCi0gICAgICAg ICAgICAgIHJldHVybih6KTsKLQotICAgICAgICAgICAgaWYgKHNzaDJfY2lmKSB7Ci0gICAgICAg ICAgICAgICAgZnJlZShzc2gyX2NpZik7Ci0gICAgICAgICAgICAgICAgc3NoMl9jaWYgPSBOVUxM OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGkgPiAwKSB7Ci0gICAgICAgICAgICAg ICAgaW50IGxlbiA9IDA7Ci0gICAgICAgICAgICAgICAgZm9yIChqPTA7IGogPCBpOyBqKyspIHsK LSAgICAgICAgICAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IG5zc2gyY2lwaGVyczsgeCsrKQot ICAgICAgICAgICAgICAgICAgICAgIGlmIChzc2gyY2lwaGVyc1t4XS5rd3ZhbCA9PSB0bXBbal0g JiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIXNzaDJjaXBoZXJzW3hdLmZsZ3MpCi0gICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgbGVuICs9IHN0 cmxlbihzc2gyY2lwaGVyc1t4XS5rd2QpICsgMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgc3NoMl9jaWYgPSBtYWxsb2MobGVuKTsKLSAgICAgICAgICAgICAgICBzc2gyX2Np ZlswXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGk7IGorKykgewot ICAgICAgICAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IG5zc2gyY2lwaGVyczsgeCsrKQotICAg ICAgICAgICAgICAgICAgICBpZiAoc3NoMmNpcGhlcnNbeF0ua3d2YWwgPT0gdG1wW2pdICYmICFz c2gyY2lwaGVyc1t4XS5mbGdzKQotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICAgICAgICBja3N0cm5jYXQoc3NoMl9jaWYsc3NoMmNpcGhlcnNbeF0ua3dkLGxlbik7 Ci0gICAgICAgICAgICAgICAgICAgIGlmIChqIDwgaSAtIDEpCi0gICAgICAgICAgICAgICAgICAg ICAgY2tzdHJuY2F0KHNzaDJfY2lmLCIsIixsZW4pOwotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0jdW5kZWYgVE1QQ05U Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBTU0gyX01BQzogewotI2RlZmluZSBUTVBDTlQgMTIK LSAgICAgICAgICAgIGludCBpLCBqLCB0bXBbVE1QQ05UXTsKLSAgICAgICAgICAgIGZvciAoaSA9 IDA7IGkgPCBUTVBDTlQ7IGkrKykKLSAgICAgICAgICAgICAgdG1wW2ldID0gMDsKLQotICAgICAg ICAgICAgZm9yIChpID0gMDsgaSA8IFRNUENOVDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYg KCh5ID0gY21rZXkoc3NoMm1hY3MsbnNzaDJtYWNzLCIiLCIiLCB4eHN0cmluZykpIDwgMCkgewot ICAgICAgICAgICAgICAgICAgICBpZiAoeSA9PSAtMykKLSAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7Ci0gICAgICAgICAgICAg ICAgICAgIGlmICh0bXBbal0gPT0geSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRm KCJcclxuP0Nob2ljZSBoYXMgYWxyZWFkeSBiZWVuIHVzZWQuXHJcbiIpOwotICAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICB0bXBbaV0gPSB5OwotICAgICAgICAgICAgfQotICAg ICAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybih6 KTsKLQotICAgICAgICAgICAgaWYgKHNzaDJfbWFjKSB7Ci0gICAgICAgICAgICAgICAgZnJlZShz c2gyX21hYyk7Ci0gICAgICAgICAgICAgICAgc3NoMl9tYWMgPSBOVUxMOwotICAgICAgICAgICAg fQotICAgICAgICAgICAgaWYgKGkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgaW50IGxlbiA9IDA7 Ci0gICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGk7IGorKykgewotICAgICAgICAgICAg ICAgICAgICBmb3IgKHggPSAwOyB4IDwgbnNzaDJtYWNzOyB4KyspCi0gICAgICAgICAgICAgICAg ICAgICAgaWYgKHNzaDJtYWNzW3hdLmt3dmFsID09IHRtcFtqXSAmJiAhc3NoMm1hY3NbeF0uZmxn cykKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBs ZW4gKz0gc3RybGVuKHNzaDJtYWNzW3hdLmt3ZCkgKyAxOwotICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICBzc2gyX21hYyA9IG1hbGxvYyhsZW4pOwotICAgICAgICAgICAgICAgIHNz aDJfbWFjWzBdID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBmb3IgKGo9MDsgaiA8IGk7IGorKykg ewotICAgICAgICAgICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgbnNzaDJtYWNzOyB4KyspCi0g ICAgICAgICAgICAgICAgICAgICAgaWYgKHNzaDJtYWNzW3hdLmt3dmFsID09IHRtcFtqXSAmJiAh c3NoMm1hY3NbeF0uZmxncykKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICAgICAgICBja3N0cm5jYXQoc3NoMl9tYWMsc3NoMm1hY3NbeF0ua3dkLGxlbik7Ci0g ICAgICAgICAgICAgICAgICAgIGlmIChqIDwgaSAtIDEpCi0gICAgICAgICAgICAgICAgICAgICAg Y2tzdHJuY2F0KHNzaDJfbWFjLCIsIixsZW4pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0jdW5kZWYgVE1QQ05UCi0g ICAgICAgICAgfQotICAgICAgICAgIGNhc2UgU1NIMl9IS0E6IHsKLSNkZWZpbmUgVE1QQ05UIDEy Ci0gICAgICAgICAgICBpbnQgaSwgaiwgdG1wW1RNUENOVF07Ci0gICAgICAgICAgICBmb3IgKGkg PSAwOyBpIDwgVE1QQ05UOyBpKyspCi0gICAgICAgICAgICAgIHRtcFtpXSA9IDA7Ci0KLSAgICAg ICAgICAgIGZvciAoaSA9IDA7IGkgPCBUTVBDTlQ7IGkrKykgewotICAgICAgICAgICAgICAgIGlm ICgoeSA9IGNta2V5KGhrYXRhYixuaGthdGFiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICIiLCIiLCB4eHN0cmluZykpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoeSA9 PSAtMykKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg cmV0dXJuKHkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmb3IgKGogPSAw OyBqIDwgaTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0bXBbal0gPT0geSkgewot ICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcclxuP0Nob2ljZSBoYXMgYWxyZWFkeSBi ZWVuIHVzZWQuXHJcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAg ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0 bXBbaV0gPSB5OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkg PCAwKQotICAgICAgICAgICAgICByZXR1cm4oeik7Ci0KLSAgICAgICAgICAgIGlmIChzc2gyX2hr YSkgewotICAgICAgICAgICAgICAgIGZyZWUoc3NoMl9oa2EpOwotICAgICAgICAgICAgICAgIHNz aDJfaGthID0gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpID4gMCkgewot ICAgICAgICAgICAgICAgIGludCBsZW4gPSAwOwotICAgICAgICAgICAgICAgIGZvciAoaj0wOyBq IDwgaTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoeCA9IDA7IHggPCBuaGthdGFi OyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgaWYgKGhrYXRhYlt4XS5rd3ZhbCA9PSB0bXBb al0gJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIWhrYXRhYlt4XS5mbGdzKQotICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGxlbiArPSBzdHJs ZW4oaGthdGFiW3hdLmt3ZCkgKyAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICBzc2gyX2hrYSA9IG1hbGxvYyhsZW4pOwotICAgICAgICAgICAgICAgIHNzaDJfaGthWzBdID0g J1wwJzsKLSAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7Ci0gICAgICAg ICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgbmhrYXRhYjsgeCsrKQotICAgICAgICAgICAgICAg ICAgICBpZiAoaGthdGFiW3hdLmt3dmFsID09IHRtcFtqXSAmJiAhaGthdGFiW3hdLmZsZ3MpCi0g ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNh dChzc2gyX2hrYSxoa2F0YWJbeF0ua3dkLGxlbik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChq IDwgaSAtIDEpCi0gICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHNzaDJfaGthLCIsIixs ZW4pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy bihzdWNjZXNzID0gMSk7Ci0jdW5kZWYgVE1QQ05UCi0gICAgICAgICAgfQotICAgICAgICAgIGNh c2UgU1NIMl9HTkg6Ci0gICAgICAgICAgY2FzZSBTU0gyX1VOSDoKLSAgICAgICAgICAgIGlmICgo eCA9IGNtaWZpKCJGaWxlbmFtZSIsIiIsJnMsJnoseHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAg ICAgICAgICBpZiAoeCAhPSAtMykKLSAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAg ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZT SVopOwotICAgICAgICAgICAgICAgIGlmICh6Zm5xZnAobGluZSxUTVBCVUZTSVosdG1wYnVmKSkK LSAgICAgICAgICAgICAgICAgIGNrc3RybmNweShsaW5lLHRtcGJ1ZixMSU5CVUZTSVopOwotICAg ICAgICAgICAgfQotICAgICAgICAgICAgcyA9ICh4ID09IC0zKSA/IE5VTEwgOiBsaW5lOwotICAg ICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeCk7 Ci0gICAgICAgICAgICBzd2l0Y2ggKHkpIHsKLSAgICAgICAgICAgICAgY2FzZSBTU0gyX0dOSDog bWFrZXN0cigmc3NoMl9nbmgscyk7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIFNTSDJfVU5I OiBtYWtlc3RyKCZzc2gyX3VuaCxzKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IHJl dHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDEpOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgU1NIX1ZSQjogICAgICAgICAgICAg ICAgICAgICAvKiBWZXJib3NpdHkgbGV2ZWwgKi8KLSAgICAgICAgeSA9IGNtbnVtKCJTU0ggdmVy Ym9zaXR5IGxldmVsLCAwLTciLCIyIiwxMCwmeCx4eHN0cmluZyk7Ci0gICAgICAgIHJldHVybihz ZXRudW0oJnNzaF92cmIseCx5LDcpKTsKLQotICAgICAgY2FzZSBTU0hfVkVSOiAgICAgICAgICAg ICAgICAgICAgIC8qIFZlcnNpb24gKi8KLSAgICAgICAgaWYgKCh5ID0gY21rZXkoc3NodmVyLDMs IiIsImF1dG8iLCB4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAg IGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIHNz aF92ZXIgPSB5OyAgICAgICAgICAgICAgICAgICAgLyogMCA9PSBBVVRPICovCi0jaWZuZGVmIFNT SFRFU1QKLSAgICAgICAgc2xfc3NoX3Zlcl9zYXZlZCA9IDA7Ci0jZW5kaWYgLyogU1NIVEVTVCAq LwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0gICAgICBjYXNlIFNTSF9JREY6IHsg ICAgICAgICAgICAgICAgICAgLyogSWRlbnRpdHkgZmlsZSAqLwotICAgICAgICBpbnQgaSwgbjsK LSAgICAgICAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKLSAgICAgICAgICAgIGlmICgoeCA9 IGNtaWZpKCJGaWxlbmFtZSIsIiIsJnMsJnkseHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAgICAg ICAgICBpZiAoeCA9PSAtMykKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICAgIHJldHVybih4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghemZucWZwKHMs TElOQlVGU0laLGxpbmUpKQotICAgICAgICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJ Wik7Ci0gICAgICAgICAgICBtYWtlc3RyKCZzc2hfdG1wW2ldLGxpbmUpOwotICAgICAgICB9Ci0g ICAgICAgIG4gPSBpOwotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHsKLSAgICAgICAg ICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCi0gICAgICAgICAgICAgIG1ha2VzdHIoJihzc2hf dG1wW2ldKSxOVUxMKTsKLSAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgfQotICAgICAg ICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgewotICAgICAgICAgICAgbWFrZXN0cigmKHNzaF9p ZGZbaV0pLE5VTEwpOwotICAgICAgICAgICAgaWYgKGkgPCBuKSB7Ci0gICAgICAgICAgICAgICAg c3NoX2lkZltpXSA9IHNzaF90bXBbaV07Ci0gICAgICAgICAgICAgICAgc3NoX3RtcFtpXSA9IE5V TEw7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1ha2VzdHIoJihzc2hf dG1wW2ldKSxOVUxMKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBzc2hfaWRm X24gPSBuOwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgfQotICAgICAgY2Fz ZSBTU0hfWEZXOiAgICAgICAgICAgICAgICAgICAgIC8qIFgxMS1mb3J3YXJkaW5nICovCi0gICAg ICAgIHN1Y2Nlc3MgPSBzZXRvbigmc3NoX3hmdyk7Ci0jaWZuZGVmIFNTSFRFU1QKLSAgICAgICAg aWYgKHN1Y2Nlc3MpCi0gICAgICAgICAgc2xfc3NoX3hmd19zYXZlZCA9IDA7Ci0jZW5kaWYgLyog U1NIVEVTVCAqLwotICAgICAgICByZXR1cm4oc3VjY2Vzcyk7Ci0KLSAgICAgIGNhc2UgU1NIX1hB TDogICAgICAgICAgICAgICAgICAgICAvKiBTU0ggWGF1dGggTG9jYXRpb24gKi8KLSAgICAgICAg aWYgKCh4ID0gY21pZmkoIlBhdGggdG8gZXhlY3V0YWJsZSIsICIiLCZzLCZ5LHh4c3RyaW5nKSkg PCAwKSB7Ci0gICAgICAgICAgICBpZiAoeCAhPSAtMykKLSAgICAgICAgICAgICAgcmV0dXJuKHgp OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZT SVopOwotICAgICAgICAgICAgaWYgKHpmbnFmcChsaW5lLFRNUEJVRlNJWix0bXBidWYpKQotICAg ICAgICAgICAgICBja3N0cm5jcHkobGluZSx0bXBidWYsTElOQlVGU0laKTsKLSAgICAgICAgfQot ICAgICAgICBzID0gKHggPT0gLTMpID8gTlVMTCA6IGxpbmU7Ci0gICAgICAgIGlmICgoeCA9IGNt Y2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICBtYWtlc3RyKCZzc2hfeGFsLHMpOwotICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0gICAgICBjYXNlIFNTSF9DRkc6ICAgICAgICAg ICAgICAgICAgICAgLyogVXNlIE9wZW5TU0ggQ29uZmlnICovCi0gICAgICAgIHJldHVybihzdWNj ZXNzID0gc2V0b24oJnNzaF9jZmcpKTsKLSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0KLSAgICAg IGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybigtMik7Ci0gICAgfQotfQotI2VuZGlmIC8qIEFOWVNT SCAqLwotCi0jaWZkZWYgU0ZUUF9CVUlMVElOCi1zdGF0aWMgaW50Ci1kb3NldHNmdHAoKSB7Ci0g ICAgaW50IGN4LCB4LCB5LCB6OwotICAgIGNoYXIgKiBzOwotCi0gICAgaWYgKChjeCA9IGNta2V5 KHNmdHB0YWIsbnNmdHB0YWIsIiIsIiIsIHh4c3RyaW5nKSkgPCAwKQotICAgICAgcmV0dXJuKGN4 KTsKLSAgICBzd2l0Y2ggKGN4KSB7Ci0gICAgY2FzZSBYWV9TRlRQX0VPTDoKLSAgICBjYXNlIFhZ X1NGVFBfUkNTOgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybigtMik7Ci0gICAgfQotfQot I2VuZGlmIC8qIFNGVFBfQlVJTFRJTiAqLwotCi0jaWZkZWYgS1VJCi0jaW5jbHVkZSAiaWt1aS5o IgotZXh0ZXJuIFVMT05HIFJHQlRhYmxlWzE2XTsKLQotI2RlZmluZSBHVUlfUkdCICAxCi0jZGVm aW5lIEdVSV9XSU4gIDIKLSNkZWZpbmUgR1VJX0ZPTiAgMwotI2RlZmluZSBHVUlfRElBICA0Ci0j ZGVmaW5lIEdVSV9UTEIgIDUKLSNkZWZpbmUgR1VJX01OQiAgNgotI2RlZmluZSBHVUlfQ0xTICA3 Ci0KLSNkZWZpbmUgR1VJV19QT1MgMQotI2RlZmluZSBHVUlXX1JFUyAyCi0jZGVmaW5lIEdVSVdf UlVOIDMKLSNkZWZpbmUgR1VJV1JfTk9OIDAKLSNkZWZpbmUgR1VJV1JfRk9OIDEKLSNkZWZpbmUg R1VJV1JfRElNIDIKLSNkZWZpbmUgR1VJV05fUkVTIDEKLSNkZWZpbmUgR1VJV05fTUlOIDIKLSNk ZWZpbmUgR1VJV05fTUFYIDMKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgZ3VpdGFiW10gPSB7Ci0g ICAgeyAiY2xvc2UiLCAgICAgICBHVUlfQ0xTLCAgMCB9LAotICAgIHsgImRpYWxvZ3MiLCAgICAg R1VJX0RJQSwgIDAgfSwKLSAgICB7ICJmb250IiwgICAgICAgIEdVSV9GT04sICAwIH0sCi0gICAg eyAibWVudWJhciIsICAgICBHVUlfTU5CLCAgMCB9LAotICAgIHsgInJnYmNvbG9yIiwgICAgR1VJ X1JHQiwgIDAgfSwKLSAgICB7ICJ0b29sYmFyIiwgICAgIEdVSV9UTEIsICAwIH0sCi0gICAgeyAi d2luZG93IiwgICAgICBHVUlfV0lOLCAgMCB9LAotICAgIHsgIiIsIDAsIDB9Ci19Owotc3RhdGlj IGludCBuZ3VpdGFiID0gKHNpemVvZihndWl0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsK LQotc3RhdGljIHN0cnVjdCBrZXl0YWIgZ3Vpd3RhYltdID0gewotICAgIHsgInBvc2l0aW9uIiwg ICAgR1VJV19QT1MsIDAgfSwKLSAgICB7ICJyZXNpemUtbW9kZSIsIEdVSVdfUkVTLCAwIH0sCi0g ICAgeyAicnVuLW1vZGUiLCAgICBHVUlXX1JVTiwgMCB9LAotICAgIHsgIiIsIDAsIDB9Ci19Owot c3RhdGljIGludCBuZ3Vpd3RhYiA9IChzaXplb2YoZ3Vpd3RhYikgLyBzaXplb2Yoc3RydWN0IGtl eXRhYikpOwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBndWl3cnRhYltdID0gewotICAgIHsgImNo YW5nZS1kaW1lbnNpb25zIiwgIEdVSVdSX0RJTSwgMCB9LAotICAgIHsgIm5vbmUiLCAgICAgICAg ICAgICAgIEdVSVdSX05PTiwgMCB9LAotICAgIHsgInNjYWxlLWZvbnQiLCAgICAgICAgIEdVSVdS X0ZPTiwgMCB9LAotICAgIHsgIiIsIDAsIDB9Ci19Owotc3RhdGljIGludCBuZ3Vpd3J0YWIgPSAo c2l6ZW9mKGd1aXdydGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLXN0YXRpYyBzdHJ1 Y3Qga2V5dGFiIGd1aXdudGFiW10gPSB7Ci0gICAgeyAibWF4aW1pemUiLCAgR1VJV05fTUFYLCAw IH0sCi0gICAgeyAibWluaW1pemUiLCAgR1VJV05fTUlOLCAwIH0sCi0gICAgeyAicmVzdG9yZSIs ICAgR1VJV05fUkVTLCAwIH0sCi0gICAgeyAiIiwgMCwgMH0KLX07Ci1zdGF0aWMgaW50IG5ndWl3 bnRhYiA9IChzaXplb2YoZ3Vpd250YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotc3Rh dGljIHN0cnVjdCBrZXl0YWIgcmdidGFiW10gPSB7Ci0gICAgeyAiYmxhY2siLCAgICAgICAgIDAs IDAgfSwKLSAgICB7ICJibHVlIiwgICAgICAgICAgMSwgMCB9LAotICAgIHsgImJyb3duIiwgICAg ICAgICA2LCAwIH0sCi0gICAgeyAiY3lhbiIsICAgICAgICAgIDMsIDAgfSwKLSAgICB7ICJkYXJr Z3JheSIsICAgICAgOCwgMCB9LAotICAgIHsgImRncmF5IiwgICAgICAgICA4LCBDTV9JTlYgfSwK LSAgICB7ICJncmVlbiIsICAgICAgICAgMiwgMCB9LAotICAgIHsgImxibHVlIiwgICAgICAgICA5 LCBDTV9JTlYgfSwKLSAgICB7ICJsY3lhbiIsICAgICAgICAxMSwgQ01fSU5WIH0sCi0gICAgeyAi bGdyZWVuIiwgICAgICAgMTAsIENNX0lOViB9LAotICAgIHsgImxncmF5IiwgICAgICAgICA3LCBD TV9JTlYgfSwKLSAgICB7ICJsaWdodGJsdWUiLCAgICAgOSwgMCB9LAotICAgIHsgImxpZ2h0Y3lh biIsICAgIDExLCAwIH0sCi0gICAgeyAibGlnaHRncmVlbiIsICAgMTAsIDAgfSwKLSAgICB7ICJs aWdodGdyYXkiLCAgICAgNywgMCB9LAotICAgIHsgImxpZ2h0bWFnZW50YSIsIDEzLCAwIH0sCi0g ICAgeyAibGlnaHRyZWQiLCAgICAgMTIsIDAgfSwKLSAgICB7ICJsbWFnZW50YSIsICAgICAxMywg Q01fSU5WIH0sCi0gICAgeyAibHJlZCIsICAgICAgICAgMTIsIENNX0lOViB9LAotICAgIHsgIm1h Z2VudGEiLCAgICAgICA1LCAwIH0sCi0gICAgeyAicmVkIiwgICAgICAgICAgIDQsIDAgfSwKLSAg ICB7ICJ3aGl0ZSIsICAgICAgICAxNSwgMCB9LAotICAgIHsgInllbGxvdyIsICAgICAgIDE0LCAw IH0sCi0KLX07Ci1pbnQgbnJnYiA9IChzaXplb2YocmdidGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5 dGFiKSk7Ci0KLVZPSUQKLXNob2d1aSgpIHsKLSAgICBleHRlcm4gZ3VpX2RpYWxvZzsKLSAgICBl eHRlcm4gSFdORCBnZXRId25kS1VJKCk7Ci0gICAgdW5zaWduZWQgY2hhciBjbWRzYXYgPSBjb2xv cmNtZDsKLSAgICBpbnQgaSwgcmVkLCBncmVlbiwgYmx1ZSwgbGluZXM9MDsKLSAgICBjaGFyICog czsKLQotCi0gICAgcHJpbnRmKCJHVUkgcGFyYW10ZXJzOlxuIik7Ci0gICAgaWYgKCsrbGluZXMg PiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7 IH0KLSAgICBwcmludGYoIiAgRGlhbG9nczogICAgICVzXG4iLHNob3dvZmYoZ3VpX2RpYWxvZykp OwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1 cm47IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgcHJpbnRmKCIgIFBvc2l0aW9uOiAgICAlZCwlZFxu IixnZXRfZ3VpX3dpbmRvd19wb3NfeCgpLAotICAgICAgICAgICAgZ2V0X2d1aV93aW5kb3dfcG9z X3koKSk7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkp IHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBwcmludGYoIiAgUmVzb2x1dGlvbjogICVk IHggJWRcbiIsR2V0U3lzdGVtTWV0cmljcyhTTV9DWFNDUkVFTiksCi0gICAgICAgICAgICBHZXRT eXN0ZW1NZXRyaWNzKFNNX0NZU0NSRUVOKSk7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAt IDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBwcmlu dGYoIiAgUnVuLW1vZGU6ICAgICVzXG4iLElzSWNvbmljKGdldEh3bmRLVUkoKSkgPyAibWluaW1p emVkIiA6Ci0gICAgICAgICAgICBJc1pvb21lZChnZXRId25kS1VJKCkpID8gIm1heGltaXplZCIg OiAicmVzdG9yZWQiKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFz a21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIHN3aXRjaCAoIGdldF9ndWlf cmVzaXplX21vZGUoKSApIHsKLSAgICAgIGNhc2UgR1VJV1JfTk9OOgotICAgICAgICBzID0gIm5v bmUiOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1VJV1JfRk9OOgotICAgICAgICBzID0g InNjYWxlcyBmb250IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdVSVdSX0RJTToKLSAg ICAgICAgcz0gImNoYW5nZXMgZGltZW5zaW9ucyI7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg ICBwcmludGYoIiAgUmVzaXplLW1vZGU6ICVzXG4iLHMpOwotICAgIGlmICgrK2xpbmVzID4gY21k X3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9Ci0g ICAgcHJpbnRmKCJcbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICgh YXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9Ci0KLSAgICBwcmludGYoIlJHQiBD b2xvciBUYWJsZTpcbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICgh YXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgcHJpbnRmKCIgIENvbG9y ICAgICAgICAgICAgICBSZWQgR3JlZW4gQmx1ZVxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRf cm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KLSAg ICBwcmludGYoIiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4i KTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0 dXJuOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIGZvciAoaSA9IDA7IGkgPCBucmdiOyBpKyspIHsK LSAgICAgICAgaWYgKCFyZ2J0YWJbaV0uZmxncykgewotICAgICAgICAgICAgYmx1ZSA9IChSR0JU YWJsZVtyZ2J0YWJbaV0ua3d2YWxdICYgMHgwMEZGMDAwMCk+PjE2OwotICAgICAgICAgICAgZ3Jl ZW4gPSAoUkdCVGFibGVbcmdidGFiW2ldLmt3dmFsXSAmIDB4MDAwMEZGMDApPj44OwotICAgICAg ICAgICAgcmVkID0gKFJHQlRhYmxlW3JnYnRhYltpXS5rd3ZhbF0gJiAweDAwMDAwMEZGKTsKLSAg ICAgICAgICAgIHByaW50ZigiICAlLTE4cyAlM2QgICUzZCAgJTNkICAiLHJnYnRhYltpXS5rd2Qs cmVkLGdyZWVuLGJsdWUpOwotICAgICAgICAgICAgY29sb3JjbWQgPSByZ2J0YWJbaV0ua3d2YWwg PDwgNDsKLSAgICAgICAgICAgIHByaW50ZigiKioqKioqKioiKTsKLSAgICAgICAgICAgIGNvbG9y Y21kID0gY21kc2F2OwotICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICAgICAgaWYg KCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsKLQkJaWYgKCFhc2ttb3JlKCkpCi0JCSAgcmV0dXJu OwotCQllbHNlCi0JCSAgbGluZXMgPSAwOwotCSAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg cHJpbnRmKCJcbiIpOwotfQotCi1pbnQKLXNldHJnYigpIHsKLSAgICBpbnQgY3gsIHJlZCA9IDAs IGJsdWUgPSAwLCBncmVlbiA9IDAsIHosIHg7Ci0KLSAgICBpZiAoKGN4ID0gY21rZXkocmdidGFi LG5yZ2IsIiIsIiIseHhzdHJpbmcpKSA8IDApCi0gICAgICByZXR1cm4oY3gpOwotICAgIGlmICgo eiA9IGNtbnVtKCJSZWQgdmFsdWUsIDAtMjU1IiwiIiwxMCwmcmVkLHh4c3RyaW5nKSkgPCAwKQot ICAgICAgcmV0dXJuKHopOwotICAgIGlmICgoeiA9IGNtbnVtKCJHcmVlbiB2YWx1ZSwgMC0yNTUi LCIiLDEwLCZncmVlbix4eHN0cmluZykpIDwgMCkKLSAgICAgIHJldHVybih6KTsKLSAgICBpZiAo KHogPSBjbW51bSgiQmx1ZSB2YWx1ZSwgMC0yNTUiLCIiLDEwLCZibHVlLHh4c3RyaW5nKSkgPCAw KQotICAgICAgcmV0dXJuKHopOwotICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgp OwotICAgIGlmIChjeCA+IDE1IHx8IHJlZCA+IDI1NSB8fCBibHVlID4gMjU1IHx8IGdyZWVuID4g MjU1KQotICAgICAgcmV0dXJuKC0yKTsKLSAgICBSR0JUYWJsZVtjeF0gPSAodW5zaWduZWQpKCgo dW5zaWduZWQpYmx1ZSA8PCAxNikgfAotICAgICAgICAodW5zaWduZWQpKCh1bnNpZ25lZClncmVl biA8PCA4KSB8Ci0gICAgICAgICh1bnNpZ25lZClyZWQpOwotICAgIHJldHVybihzdWNjZXNzID0g MSk7Ci19Ci0KLS8qCi0gIFNldCBHVUkgd2luZG93IHBvc2l0aW9uOiBYWSBjb29yZGluYXRlcyBv ZiB1cHBlciBsZWZ0IGNvcm5lciwKLSAgZXhwcmVzc2VkIGFzIHBpeGVsIG51bWJlcnMgaW4gdGhl IGN1cnJlbnQgc2NyZWVuIHJlc29sdXRpb24uCi0gICgwLDApIG1lYW5zIHB1dCBvdXJzZWx2ZXMg aW4gdGhlIHVwcGVyIGxlZnQgY29ybmVyLgotICBDYW4gd2UgY2hlY2sgZm9yIG91dCBvZiBib3Vu ZHM/Ci0qLwotCi1pbnQKLXNldGd1aXdpbigpIHsKLSAgICBpbnQgY3gsIHgsIHksIHo7Ci0gICAg aWYgKChjeCA9IGNta2V5KGd1aXd0YWIsbmd1aXd0YWIsIiIsIiIseHhzdHJpbmcpKSA8IDApCi0g ICAgICByZXR1cm4oY3gpOwotICAgIHN3aXRjaCAoY3gpIHsKLSAgICAgIGNhc2UgR1VJV19QT1M6 Ci0gICAgICAgIGlmICgoeiA9IGNtbnVtKCJYIGNvb3JkaW5hdGUgKHBpeGVsIG51bWJlcikiLCIi LDEwLCZ4LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih6KTsKLSAgICAgICAgaWYg KCh6ID0gY21udW0oIlkgY29vcmRpbmF0ZSAocGl4ZWwgbnVtYmVyKSIsIiIsMTAsJnkseHhzdHJp bmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHopOwotICAgICAgICBpZiAoKHogPSBjbWNmbSgp KSA8IDApCi0gICAgICAgICAgcmV0dXJuKHopOwotICAgICAgICBpZiAoeCA8IDAgfHwgeSA8IDAp IHsKLSAgICAgICAgICAgIHByaW50ZigiP0Nvb3JkaW5hdGVzIG11c3QgYmUgMCBvciBncmVhdGVy XG4iKTsKLSAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0KLSAgICAgICAgZ3VpX3Bv c2l0aW9uKHgseSk7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICBjYXNlIEdV SVdfUkVTOgotICAgICAgICBpZiAoKHggPSBjbWtleShndWl3cnRhYixuZ3Vpd3J0YWIsIiIsIiIs eHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBpZiAoKHogPSBj bWNmbSgpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHopOwotICAgICAgICBndWlfcmVzaXplX21v ZGUoeCk7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICBjYXNlIEdVSVdfUlVO OgotCWlmICgoeCA9IGNta2V5KGd1aXdudGFiLG5ndWl3bnRhYiwiIiwiIix4eHN0cmluZykpIDwg MCkKLQkgIHJldHVybih4KTsKLQlpZiAoKHogPSBjbWNmbSgpKSA8IDApCi0JICByZXR1cm4oeik7 Ci0JZ3VpX3dpbl9ydW5fbW9kZSh4KTsKLQlyZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgZGVm YXVsdDoKLSAgICAgICAgcmV0dXJuKC0yKTsKLSAgICB9Ci19Ci0KLWludAotc2V0Z3VpZm9udCgp IHsJCQkJLyogQXNzdW1lcyB0aGF0IENLRkxPQVQgaXMgZGVmaW5lZCEgKi8KLQotICAgIGV4dGVy biBzdHJ1Y3Qga2V5dGFiICogdGVybV9mb250OwotICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiICog X3Rlcm1fZm9udDsKLSAgICBleHRlcm4gaW50IHR0X2ZvbnQsIHR0X2ZvbnRfc2l6ZSwgbnRlcm1m b250OwotICAgIGludCB4LCB5LCB6OwotICAgIGNoYXIgKnM7Ci0KLSAgICBpZiAobnRlcm1mb250 ID09IDApCi0gICAgICBCdWlsZEZvbnRUYWJsZSgmdGVybV9mb250LCAmX3Rlcm1fZm9udCwgJm50 ZXJtZm9udCk7Ci0gICAgaWYgKCEodGVybV9mb250ICYmIF90ZXJtX2ZvbnQgJiYgbnRlcm1mb250 ID4gMCkpIHsKLSAgICAgICAgcHJpbnRmKCI/SW50ZXJuYWwgZXJyb3I6IEZhaWx1cmUgdG8gZW51 bWVyYXRlIGZvbnRzXG4iKTsKLSAgICAgICAgcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgaWYgKCh4 ID0gY21rZXkoX3Rlcm1fZm9udCxudGVybWZvbnQsIiIsIiIseHhzdHJpbmcpKSA8IDApCi0gICAg ICByZXR1cm4oeCk7Ci0gICAgaWYgKCh6ID0gY21mbGQoIkhlaWdodCBvZiBmb250IGluIHBvaW50 cyIsIjEyIiwmcyx4eHN0cmluZykpIDwgMCkKLSAgICAgIHJldHVybih6KTsKLSAgICBpZiAoaXNm bG9hdChzLDApIDwgMSkgewkJLyogKHNldHMgZmxvYXR2YWwpICovCi0JcHJpbnRmKCI/SW50ZWdl ciBvciBmbG9hdGluZy1wb2ludCBudW1iZXIgcmVxdWlyZWRcbiIpOwotCXJldHVybigtOSk7Ci0g ICAgfQotICAgIGlmIChmbG9hdHZhbCA8IDAuNSkgewotCXByaW50ZigiP1Bvc2l0aXZlIG51bWJl ciByZXF1aXJlZFxuIik7Ci0JcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgaWYgKCh6ID0gY21jZm0o KSkgPCAwKQotICAgICAgcmV0dXJuKHopOwotICAgIHR0X2ZvbnQgPSB4OwkJCS8qIEZvbnQgaW5k ZXggKi8KLSAgICB0dF9mb250X3NpemUgPSAoaW50KShmbG9hdHZhbCAqIDIpOwkvKiBGb250IHNp emUgaW4gaGFsZiBwb2ludHMgKi8KLSAgICBLdWlTZXRQcm9wZXJ0eShLVUlfVEVSTV9GT05ULCAo bG9uZyl0dF9mb250LCAobG9uZyl0dF9mb250X3NpemUpOwotICAgIHJldHVybihzdWNjZXNzID0g MSk7Ci19Ci0KLVZPSUQKLXNldGd1aWRpYWxvZyh4KSBpbnQgeDsKLXsKLSAgICBleHRlcm4gaW50 IGd1aV9kaWFsb2c7Ci0gICAgZ3VpX2RpYWxvZyA9IHg7Ci0gICAgS3VpU2V0UHJvcGVydHkoS1VJ X0dVSV9ESUFMT0dTLCAobG9uZyl4LCAwTCk7Ci19Ci0KLVZPSUQKLXNldGd1aW1lbnViYXIoeCkg aW50IHg7Ci17Ci0gICAgS3VpU2V0UHJvcGVydHkoS1VJX0dVSV9NRU5VQkFSLCAobG9uZyl4LCAw TCk7Ci19Ci0KLVZPSUQKLXNldGd1aXRvb2xiYXIoeCkgaW50IHg7Ci17Ci0gICAgS3VpU2V0UHJv cGVydHkoS1VJX0dVSV9UT09MQkFSLCAobG9uZyl4LCAwTCk7Ci19Ci0KLVZPSUQKLXNldGd1aWNs b3NlKHgpIGludCB4OwotewotICAgIEt1aVNldFByb3BlcnR5KEtVSV9HVUlfQ0xPU0UsIChsb25n KXgsIDBMKTsKLX0KLQotaW50Ci1zZXRndWkoKSB7Ci0gICAgaW50IGN4LCB4LCByYzsKLSAgICBp ZiAoKGN4ID0gY21rZXkoZ3VpdGFiLG5ndWl0YWIsIiIsIiIseHhzdHJpbmcpKSA8IDApCi0gICAg ICByZXR1cm4oY3gpOwotICAgIHN3aXRjaCAoY3gpIHsKLSAgICAgIGNhc2UgR1VJX0RJQToKLSAg ICAgICAgcmMgPSBzZXRvbigmeCk7Ci0gICAgICAgIGlmIChyYyA+PSAwKQotICAgICAgICAgIHNl dGd1aWRpYWxvZyh4KTsKLSAgICAgICAgcmV0dXJuKHJjKTsKLSAgICAgIGNhc2UgR1VJX0ZPTjoK LSAgICAgICAgcmV0dXJuKHNldGd1aWZvbnQoKSk7Ci0gICAgICBjYXNlIEdVSV9SR0I6Ci0gICAg ICAgIHJldHVybihzZXRyZ2IoKSk7Ci0gICAgICBjYXNlIEdVSV9XSU46Ci0gICAgICAgIHJldHVy bihzZXRndWl3aW4oKSk7Ci0gICAgICBjYXNlIEdVSV9UTEI6Ci0gICAgICAgIHJjID0gc2V0b24o JngpOwotICAgICAgICBpZiAocmMgPj0gMCkKLSAgICAgICAgICBzZXRndWl0b29sYmFyKHgpOwot ICAgICAgICByZXR1cm4ocmMpOwotICAgICAgY2FzZSBHVUlfTU5COgotICAgICAgICByYyA9IHNl dG9uKCZ4KTsKLSAgICAgICAgaWYgKHJjID49IDApCi0gICAgICAgICAgc2V0Z3VpbWVudWJhcih4 KTsKLSAgICAgICAgcmV0dXJuKHJjKTsKLSAgICAgIGNhc2UgR1VJX0NMUzoKLSAgICAgICAgcmMg PSBzZXRvbigmeCk7Ci0gICAgICAgIGlmIChyYyA+PSAwKQotICAgICAgICAgIHNldGd1aWNsb3Nl KHgpOwotICAgICAgICByZXR1cm4ocmMpOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu KC0yKTsKLSAgICB9Ci19Ci0jZW5kaWYgLyogS1VJICovCi0KLVZPSUQKLXNldGV4aXR3YXJuKHgp IGludCB4OyAKLXsKLSAgICB4aXR3YXJuID0geDsKLSNpZmRlZiBLVUkKLSAgICBLdWlTZXRQcm9w ZXJ0eShLVUlfRVhJVF9XQVJOSU5HLCAobG9uZyl4LCAwTCk7Ci0jZW5kaWYgLyogS1VJICovCi19 Ci0KLSNpZm5kZWYgTk9MT0NBTAotVk9JRAotc2V0ZGVic2VzKHgpIGludCB4OyB7Ci0jaWZkZWYg T1MyCi0gICAgaWYgKChkZWJzZXMgIT0gMCkgJiYgKHggPT0gMCkpCS8qIEl0IHdhcyBvbiBhbmQg d2UgdHVybmVkIGl0IG9mZj8gKi8KLSAgICAgIG9zMmRlYnVnb2ZmKCk7CQkJLyogRml4IE9TLzIg Y29sb3JhdGlvbiAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgIGRlYnNlcyA9IHg7Ci0jaWZkZWYg S1VJCi0gICAgS3VpU2V0UHJvcGVydHkoS1VJX1RFUk1fREVCVUcseCwwKTsKLSNlbmRpZiAvKiBL VUkgKi8KLX0KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLS8qICBEIE8gUCBSIE0gIC0tICBTZXQg YSBwYXJhbWV0ZXIuICAqLwotLyoKLSBSZXR1cm5zOgotICAtMjogaWxsZWdhbCBpbnB1dAotICAt MTogcmVwYXJzZSBuZWVkZWQKLSAgIDA6IHN1Y2Nlc3MKLSovCi1pbnQKLWRvcHJtKHh4LHJtc2Zs ZykgaW50IHh4LCBybXNmbGc7IHsKLSAgICBpbnQgaSA9IDAsIHggPSAwLCB5ID0gMCwgeiA9IDA7 Ci0gICAgbG9uZyB6eiA9IDBMOwotICAgIGNoYXIgKnMgPSBOVUxMLCAqcCA9IE5VTEw7Ci0jaWZk ZWYgT1MyCi0gICAgY2hhciBwb3J0YnVmWzY0XTsKLSAgICBsb25nIHBvcnRzcGVlZCA9IDBMOwot ICAgIGludCBwb3J0cGFyaXR5ID0gMDsKLSAgICBpbnQgcG9ydGZsb3cgPSAwOwotI2VuZGlmIC8q IE9TMiAqLwotCi0jaWZuZGVmIE5PU0VUS0VZCi0jaWZkZWYgT1MyCi0gICAgaWYgKHh4ID09IFhZ TVNLKQotICAgICAgcmV0dXJuKHNldG1zaygpKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAv KiBOT1NFVEtFWSAqLwotCi0gICAgaWYgKHh4ID09IFhZRkxBRykgeyAgICAgICAgICAgICAgICAg LyogU0VUIEZMQUcgKi8KLSAgICAgICAgZXh0ZXJuIGludCBvb2ZsYWc7Ci0gICAgICAgIHJldHVy bihzdWNjZXNzID0gc2V0b24oJm9vZmxhZykpOwotICAgIH0KLSAgICBpZiAoeHggPT0gWFlQUlRS ICAgICAgICAgICAgICAgICAgICAvKiBTRVQgUFJJTlRFUiAob3IgQlBSSU5URVIpICovCi0jaWZk ZWYgQlBSSU5UCi0gICAgICAgIHx8IHh4ID09IFhZQkRDUAotI2VuZGlmIC8qIEJQUklOVCAqLwot ICAgICAgICApCi0gICAgICByZXR1cm4oc2V0cHJpbnRlcih4eCkpOwotCi0gICAgc3dpdGNoICh4 eCkgewotCi0jaWZkZWYgQU5ZWDI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFgy NSAuLi4gKi8KLWNhc2UgWFlYMjU6Ci0gICAgICAgIHJldHVybihzZXR4MjUoKSk7Ci0KLSNpZm5k ZWYgSUJNWDI1Ci1jYXNlIFhZUEFEOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0VU IFBBRCAuLi4gKi8KLSAgICAgICAgcmV0dXJuKHNldHBhZHAoKSk7Ci0jZW5kaWYgLyogSUJNWDI1 ICovCi0jZW5kaWYgLyogQU5ZWDI1ICovCi0KLSNpZm5kZWYgTk9YRkVSCi0gICAgICBjYXNlIFhZ RU9MOiAgICAgICAvKiBUaGVzZSBoYXZlIGFsbCBiZWVuIG1vdmVkIHRvIHNldCBzZW5kL3JlY2Vp dmUuLi4gKi8KLSAgICAgIGNhc2UgWFlMRU46ICAgICAgIC8qIExldCB0aGUgdXNlciBrbm93IHdo YXQgdG8gZG8uICovCi0gICAgICBjYXNlIFhZTUFSSzoKLSAgICAgIGNhc2UgWFlOUEFEOgotICAg ICAgY2FzZSBYWVBBREM6Ci0gICAgICBjYXNlIFhZVElNTzoKLSAgICAgICAgcHJpbnRmKCIuLi5V c2UgU0VUIFNFTkQgb3IgU0VUIFJFQ0VJVkUgaW5zdGVhZC5cbiIpOwotICAgICAgICBwcmludGYo IlR5cGUgSEVMUCBTRVQgU0VORCBvciBIRUxQIFNFVCBSRUNFSVZFIGZvciBtb3JlIGluZm8uXG4i KTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLQotICAgICAgY2FzZSBYWUFUVFI6ICAg ICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgQXR0cmlidXRlIHBhY2tldHMgKi8KLSAgICAgICAg cmV0dXJuKHNldGF0KHJtc2ZsZykpOwotCi0gICAgICBjYXNlIFhZSUZEOiAgICAgICAgICAgICAg ICAgICAgICAgLyogSW5jb21wbGV0ZSBmaWxlIGRpc3Bvc2l0aW9uICovCi0gICAgICAgIGlmICgo eSA9IGNta2V5KGlmZGF0YWIsMywiIiwiYXV0byIseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsK LSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIGlmIChy bXNmbGcpIHsKLSAgICAgICAgICAgIHNzdGF0ZSA9IHNldGdlbignUycsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgIjMxMCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9PSAw ID8gIjAiIDogKHkgPT0gMSA/ICIxIiA6ICIyIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgIiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgcmV0dXJu KChpbnQpIHNzdGF0ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBrZWVwID0geTsK LSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBO T1hGRVIgKi8KLQotICAgICAgY2FzZSBYWU1BVENIOgkJCS8qIFsgUkVNT1RFIF0gU0VUIE1BVENI Li4uICAqLwotI2lmbmRlZiBOT1hGRVIKLQlpZiAoKHogPSBjbWtleShtYXRjaHRhYixubWF0Y2h0 YWIsIiIsIiIseHhzdHJpbmcpKSA8IDApCi0JICByZXR1cm4oeik7Ci0JaWYgKHJtc2ZsZykgewot ICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAw KSByZXR1cm4oeSk7Ci0JICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotCSAg ICBzd2l0Y2ggKHopIHsKLQkgICAgICBjYXNlIE1DSF9ET1RGOgotCQlyZXR1cm4oc3N0YXRlID0g c2V0Z2VuKCdTJywiMzMwIiwgeSA9PSAwID8gIjAiIDogIjEiLCAiIikpOwotCSAgICAgIGNhc2Ug TUNIX0ZJRk86Ci0JCXJldHVybihzc3RhdGUgPSBzZXRnZW4oJ1MnLCIzMzEiLCB5ID09IDAgPyAi MCIgOiAiMSIsICIiKSk7Ci0JICAgICAgZGVmYXVsdDoKLQkJcmV0dXJuKC0yKTsKLQkgICAgICB9 Ci0JICB9Ci0jZW5kaWYgLyogTk9YRkVSICovCi0JICBzd2l0Y2ggKHopIHsKLQkgICAgY2FzZSBN Q0hfRklGTzoKLQkgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZtYXRjaGZpZm8pKTsKLQkg ICAgY2FzZSBNQ0hfRE9URjoKLQkgICAgICB4ID0gc2V0b24oJm1hdGNoZG90KTsgCi0JICAgICAg aWYgKHggPCAwKSByZXR1cm4oeCk7Ci0JICAgICAgZGlyX2RvdHMgPSAtMTsKLQkgICAgICByZXR1 cm4oc3VjY2VzcyA9IHgpOwotCSAgICBkZWZhdWx0OgotCSAgICAgIHJldHVybigtMik7Ci0JICB9 Ci0KLSNpZm5kZWYgTk9TUEwKLSAgICAgIGNhc2UgWFlJTlBVOiAgICAgICAgICAgICAgICAgICAg ICAvKiBTRVQgSU5QVVQgKi8KLSAgICAgICAgcmV0dXJuKHNldGlucCgpKTsKLSNlbmRpZiAvKiBO T1NQTCAqLwotCi0jaWZkZWYgTkVUQ09OTgotICAgICAgY2FzZSBYWU5FVDogeyAgICAgICAgICAg ICAgICAgICAgIC8qIFNFVCBORVRXT1JLICovCi0KLSAgICAgICAgICBzdHJ1Y3QgRkRCIGsxLCBr MjsKLQotICAgICAgICAgIGNtZmRiaSgmazEsX0NNS0VZLCIiLCIiLCIiLG5uZXRrZXksIDAsIHh4 c3RyaW5nLCBuZXRrZXksICZrMik7Ci0gICAgICAgICAgY21mZGJpKCZrMixfQ01LRVksIiIsIiIs IiIsbm5ldHMsICAgMCwgeHhzdHJpbmcsIG5ldGNtZCwgTlVMTCk7Ci0KLSNpZmRlZiBPUzIgICAg IC8qIEhpZGUgbmV0d29yay10eXBlIGtleXdvcmRzIGZvciBuZXR3b3JrcyBub3QgaW5zdGFsbGVk ICovCi0gICAgICAgICAgZm9yICh6ID0gMDsgeiA8IG5uZXRzOyB6KyspIHsKLSAgICAgICAgICAg ICAgaWYgKG5ldGNtZFt6XS5rd3ZhbCA9PSBORVRfVENQQiAmJiB0Y3BfYXZhaWwgPT0gMCkKLSAg ICAgICAgICAgICAgICBuZXRjbWRbel0uZmxncyA9ICBDTV9JTlY7Ci0jaWZkZWYgU1NIQlVJTFRJ TgotICAgICAgICAgICAgICBpZiAobmV0Y21kW3pdLmt3dmFsID09IE5FVF9TU0ggJiYKLSAgICAg ICAgICAgICAgICAgICAhY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpKQotICAgICAgICAgICAgICAg IG5ldGNtZFt6XS5mbGdzID0gIENNX0lOVjsKLSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0jaWZk ZWYgREVDTkVUCi0gICAgICAgICAgICAgIGVsc2UgaWYgKG5ldGNtZFt6XS5rd3ZhbCA9PSBORVRf REVDICAmJiBkbmV0X2F2YWlsID09IDApCi0gICAgICAgICAgICAgICAgbmV0Y21kW3pdLmZsZ3Mg PSAgQ01fSU5WOwotI2VuZGlmIC8qIERFQ05FVCAqLwotI2lmZGVmIENLX05FVEJJT1MKLSAgICAg ICAgICAgICAgZWxzZSBpZiAobmV0Y21kW3pdLmt3dmFsID09IE5FVF9CSU9TICYmIG5ldGJpb3NB dmFpbCA9PSAwKQotICAgICAgICAgICAgICAgIG5ldGNtZFt6XS5mbGdzID0gIENNX0lOVjsKLSNl bmRpZiAvKiBDS19ORVRCSU9TICovCi0jaWZkZWYgU1VQRVJMQVQKLSAgICAgICAgICAgICAgZWxz ZSBpZiAobmV0Y21kW3pdLmt3dmFsID09IE5FVF9TTEFUICAmJiBzbGF0X2F2YWlsID09IDApCi0g ICAgICAgICAgICAgICAgbmV0Y21kW3pdLmZsZ3MgPSAgQ01fSU5WOwotI2VuZGlmIC8qIFNVUEVS TEFUICovCi0gICAgICAgICAgfQotICAgICAgICAgIGlmICh0Y3BfYXZhaWwpICAgICAgICAgICAg ICAgIC8qIERlZmF1bHQgbmV0d29yayB0eXBlICovCi0gICAgICAgICAgICBja3N0cm5jcHkodG1w YnVmLCJ0Y3AvaXAiLFRNUEJVRlNJWik7Ci0jaWZkZWYgU1NIQlVJTFRJTgotICAgICAgICAgIGVs c2UgaWYgKCBja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkgKQotICAgICAgICAgICAgY2tzdHJuY3B5 KHRtcGJ1Ziwic3NoIixUTVBCVUZTSVopOwotI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KLSNpZmRl ZiBERUNORVQKLSAgICAgICAgICBlbHNlIGlmIChkbmV0X2F2YWlsKQotICAgICAgICAgICAgY2tz dHJuY3B5KHRtcGJ1ZiwiZGVjbmV0IixUTVBCVUZTSVopOwotI2VuZGlmIC8qIERFQ05FVCAqLwot I2lmZGVmIFNVUEVSTEFUCi0gICAgICAgICAgZWxzZSBpZiAoc2xhdF9hdmFpbCkKLSAgICAgICAg ICAgIGNrc3RybmNweSh0bXBidWYsInN1cGVybGF0IixUTVBCVUZTSVopOwotI2VuZGlmIC8qIFNV UEVSTEFUICovCi0jaWZkZWYgQ0tfTkVUQklPUwotICAgICAgICAgIGVsc2UgaWYgKG5ldGJpb3NB dmFpbCkKLSAgICAgICAgICAgIGNrc3RybmNweSh0bXBidWYsIm5ldGJpb3MiLFRNUEJVRlNJWik7 Ci0jZW5kaWYgLyogQ0tfTkVUQklPUyAqLwotICAgICAgICAgIGVsc2UgY2tzdHJuY3B5KHRtcGJ1 ZiwibmFtZWQtcGlwZSIsVE1QQlVGU0laKTsKLSNlbHNlICAvKiBPUzIgKi8KLSNpZmRlZiBUQ1BT T0NLRVQKLSAgICAgICAgICBja3N0cm5jcHkodG1wYnVmLCJ0Y3AvaXAiLFRNUEJVRlNJWik7Ci0j ZWxzZQotI2lmZGVmIEFOWVgyNQotICAgICAgICAgIGNrc3RybmNweSh0bXBidWYsInguMjUiLFRN UEJVRlNJWik7Ci0jZWxzZQotICAgICAgICAgIGNrc3RybmNweSh0bXBidWYsIiIsVE1QQlVGU0la KTsKLSNlbmRpZiAvKiBBTllYMjUgKi8KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNlbmRpZiAv KiBPUzIgKi8KLQotICAgICAgICAgIHggPSBjbWZkYigmazEpOwotICAgICAgICAgIGlmICh4IDwg MCkgeyAgICAgICAgICAgICAgICAgIC8qIEVycm9yICovCi0gICAgICAgICAgICAgIGlmICh4ID09 IC0yIHx8IHggPT0gLTkpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCI/Tm8ga2V5d29yZHMgbWF0 Y2g6IFwiJXNcIlxuIixhdG1idWYpOwotICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAg ICAgfQotICAgICAgICAgIHogPSBjbXJlc3VsdC5ucmVzdWx0OyAgICAgICAgIC8qIEtleXdvcmQg dmFsdWUgKi8KLSAgICAgICAgICBpZiAoY21yZXN1bHQuZmRiYWRkciA9PSAmazEpIHsgLyogV2hp Y2ggdGFibGU/ICovCi0jaWZuZGVmIE5PU1BMCi0jaWZuZGVmIE5PRElBTAotICAgICAgICAgICAg ICBpZiAoeiA9PSBYWU5FVF9EKQotICAgICAgICAgICAgICAgIHJldHVybihwYXJzZGlyKDEpKTsK LSNlbmRpZiAvKiBOT0RJQUwgKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgICAgICAgICAgICBp ZiAoKHogPSBjbWtleShuZXRjbWQsbm5ldHMsIiIsdG1wYnVmLHh4c3RyaW5nKSkgPCAwKQotICAg ICAgICAgICAgICAgIHJldHVybih6KTsKLSAgICAgICAgICB9Ci0KLSNpZmRlZiBORVRDTUQKLSAg ICAgICAgICBpZiAoeiA9PSBORVRfQ01EICYmIG5vcHVzaCkgewotICAgICAgICAgICAgICBwcmlu dGYoIlxuP1NvcnJ5LCBhY2Nlc3MgdG8gZXh0ZXJuYWwgY29tbWFuZHMgaXMgZGlzYWJsZWRcbiIp OwotICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgIH0KLSNlbmRpZiAvKiBORVRD TUQgKi8KLQotI2lmbmRlZiBOT1BVU0gKLSNpZmRlZiBORVRQVFkKLSAgICAgICAgICBpZiAoeiA9 PSBORVRfUFRZICYmIG5vcHVzaCkgewotICAgICAgICAgICAgICBwcmludGYoIlxuP1NvcnJ5LCBh Y2Nlc3MgdG8gZXh0ZXJuYWwgY29tbWFuZHMgaXMgZGlzYWJsZWRcbiIpOwotICAgICAgICAgICAg ICByZXR1cm4oLTkpOwotICAgICAgICAgIH0KLSNlbmRpZiAvKiBORVRQVFkgKi8KLSNlbmRpZiAv KiBOT1BVU0ggKi8KLQotI2lmZGVmIE9TMgotICAgICAgICAgIGlmICh6ID09IE5FVF9UQ1BCICYm IHRjcF9hdmFpbCA9PSAwKSB7Ci0gICAgICAgICAgICAgIHByaW50ZigKLSJcbj9Tb3JyeSwgZWl0 aGVyIFRDUC9JUCBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgc3lzdGVtIG9yXG5cCi1uZWNlc3Nh cnkgRExMcyBkaWQgbm90IGxvYWQuICBVc2UgU0hPVyBORVRXT1JLIHRvIGNoZWNrIG5ldHdvcmsg c3RhdHVzLlxuIik7Ci0gICAgICAgICAgICAgIHJldHVybigtOSk7Ci0jaWZkZWYgU1NIQlVJTFRJ TgotICAgICAgICAgIH0gZWxzZSBpZiAoeiA9PSBORVRfU1NIICYmICFja19zc2xlYXlfaXNfaW5z dGFsbGVkKCkpIHsKLSAgICAgICAgICAgIHByaW50ZigiXG4/U29ycnksIFNTSCBpcyBub3QgYXZh aWxhYmxlIG9uIHRoaXMgc3lzdGVtLlxuIikgOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSNl bmRpZiAvKiBTU0hCVUlMVElOICovCi0jaWZkZWYgQ0tfTkVUQklPUwotICAgICAgICAgIH0gZWxz ZSBpZiAoeiA9PSBORVRfQklPUyAmJiBuZXRiaW9zQXZhaWwgPT0gMCkgewotICAgICAgICAgICAg ICBwcmludGYoIlxuP1NvcnJ5LCBORVRCSU9TIGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBzeXN0 ZW0uXG4iKSA7Ci0gICAgICAgICAgICAgIHJldHVybigtOSk7Ci0jZW5kaWYgLyogQ0tfTkVUQklP UyAqLwotI2lmZGVmIERFQ05FVAotICAgICAgICAgIH0gZWxzZSBpZiAoeiA9PSBORVRfREVDICYm IGRuZXRfYXZhaWwgPT0gMCkgewotICAgICAgICAgICAgICBwcmludGYoIlxuP1NvcnJ5LCBERUNu ZXQgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIHN5c3RlbS5cbiIpIDsKLSAgICAgICAgICAgICAg cmV0dXJuKC05KTsKLSNlbmRpZiAvKiBERUNORVQgKi8KLSNpZmRlZiBTVVBFUkxBVAotICAgICAg ICAgIH0gZWxzZSBpZiAoeiA9PSBORVRfU0xBVCAmJiBzbGF0X2F2YWlsID09IDApIHsKLSAgICAg ICAgICAgICAgcHJpbnRmKCJcbj9Tb3JyeSwgU3VwZXJMQVQgaXMgbm90IGF2YWlsYWJsZSBvbiB0 aGlzIHN5c3RlbS5cbiIpIDsKLSAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSNlbmRpZiAvKiBT VVBFUkxBVCAqLwotICAgICAgICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIE5QSVBF T1JCSU9TCi0gICAgICAgICAgaWYgKHogPT0gTkVUX1BJUEUgfHwgICAgICAgICAgLyogTmFtZWQg cGlwZSAtLSBhbHNvIGdldCBwaXBlbmFtZSAqLwotICAgICAgICAgICAgICB6ID09IE5FVF9CSU9T KSB7ICAgICAgICAgIC8qIE5FVEJJT1MgLS0gYWxzbyBnZXQgbG9jYWwgbmFtZSAqLwotICAgICAg ICAgICAgICBjaGFyICpkZWZuYW07Ci0jaWZkZWYgQ0tfTkVUQklPUwotICAgICAgICAgICAgICBj aGFyIHRtcG5ibmFtW05FVEJJT1NfTkFNRV9MRU4rMV07Ci0jZW5kaWYgLyogQ0tfTkVUQklPUyAq LwotICAgICAgICAgICAgICAvKiBDb25zdHJ1Y3QgZGVmYXVsdCBuYW1lICAqLwotICAgICAgICAg ICAgICBpZiAoeiA9PSBORVRfUElQRSkgeyAgICAgIC8qIE5hbWVkIHBpcGUgKi8KLSAgICAgICAg ICAgICAgICAgIGRlZm5hbSA9ICJrZXJtaXQiOyAgICAvKiBEZWZhdWx0IG5hbWUgaXMgYWx3YXlz ICJrZXJtaXQiICovCi0gICAgICAgICAgICAgIH0gCi0jaWZkZWYgQ0tfTkVUQklPUwotCSAgICAg IGVsc2UgewkJCS8qIE5ldEJJT1MgKi8KLSAgICAgICAgICAgICAgICAgIGlmIChOZXRCaW9zTmFt ZVswXSAhPSBTUCkgeyAvKiBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgbmFtZSwgKi8KLSAgICAgICAg ICAgICAgICAgICAgICBjaGFyICpwID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICBpbnQg bjsgICAgICAgICAgICAvKiB1c2UgaXQgYXMgdGhlIGRlZmF1bHQuICovCi0gICAgICAgICAgICAg ICAgICAgICAgY2tzdHJuY3B5KHRtcG5ibmFtLE5ldEJpb3NOYW1lLE5FVEJJT1NfTkFNRV9MRU4r MSk7Ci0gICAgICAgICAgICAgICAgICAgICAgLyogY29udmVydCB0cmFpbGluZyBzcGFjZXMgdG8g TlVMcyAqLwotICAgICAgICAgICAgICAgICAgICAgIHAgPSAmdG1wbmJuYW1bTkVUQklPU19OQU1F X0xFTi0xXTsKLSAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnAgPT0gU1ApIHsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgKnAgPSBOVUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg IHAtLTsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgZGVm bmFtID0gdG1wbmJuYW07Ci0gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCpteWhvc3QpICAg LyogT3RoZXJ3aXNlIHVzZSB0aGlzIFBDJ3MgaG9zdCBuYW1lICovCi0gICAgICAgICAgICAgICAg ICAgIGRlZm5hbSA9IChjaGFyICopIG15aG9zdDsKLSAgICAgICAgICAgICAgICAgIGVsc2UgICAg ICAgICAgICAgICAgICAvKiBPdGhlcndpc2UgdXNlICJrZXJtaXQiICovCi0gICAgICAgICAgICAg ICAgICAgIGRlZm5hbSA9ICJrZXJtaXQiOwotICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tf TkVUQklPUyAqLwotICAgICAgICAgICAgICBpZiAoKHkgPSBjbXR4dCgoeiA9PSBORVRfUElQRSkg PyAibmFtZSBvZiBuYW1lZC1waXBlIiA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJs b2NhbCBORVRCSU9TIG5hbWUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZuYW0s ICZzLCB4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0jaWZkZWYg TlBJUEUKLSAgICAgICAgICAgICAgcGlwZW5hbWVbMF0gPSBOVUw7Ci0jZW5kaWYgLyogTlBJUEUg Ki8KLSAgICAgICAgICAgICAgaWYgKCh5ID0gKGludCkgc3RybGVuKHMpKSA8IDEpIHsKLSAgICAg ICAgICAgICAgICAgIHByaW50ZigiP1lvdSBtdXN0IGFsc28gc3BlY2lmeSBhICVzIG5hbWVcbiIs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgKHogPT0gTkVUX1BJUEUpID8gInBpcGUiIDogImxv Y2FsIE5FVEJJT1MiICk7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAg ICAgICB9Ci0jaWZkZWYgQ0tfTkVUQklPUwotICAgICAgICAgICAgICBpZiAoeiA9PSBORVRfQklP UykgewotICAgICAgICAgICAgICAgICAgaWYgKCFuZXRiaW9zQXZhaWwpIHsKLSAgICAgICAgICAg ICAgICAgICAgICBwcmludGYoIj9ORVRCSU9TIGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBzeXN0 ZW0uXG4iKSA7Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGlmICh5IC0gTkVUQklPU19OQU1FX0xFTiA+IDAp IHsKLSAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9ORVRCSU9TIG5hbWUgdG9vIGxvbmcs ICVsZCBtYXhpbXVtXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRCSU9TX05B TUVfTEVOKTsKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAg ICAgICAgfSBlbHNlIGlmICggIXN0cmNtcChzLHRtcG5ibmFtKSApIHsKLSAgICAgICAgICAgICAg ICAgICAgICBuZXR0eXBlID0gejsgICAgICAvKiBSZXR1cm5pbmcgdG8gb2xkIGNvbm5lY3Rpb24u Li4gKi8KLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOyAvKiBEb25l ICovCi0gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcCgiICAgICAgICAgICAgICAg ICIsTmV0Qmlvc05hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/TkVUQklP UyBuYW1lIGFscmVhZHkgYXNzaWduZWQgdG8gXCIlc1wiXG4iLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBOZXRCaW9zTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05 KTsKLSAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgTkNC IG5jYjsKLSAgICAgICAgICAgICAgICAgICAgICBBUElSRVQgcmM7Ci0gICAgICAgICAgICAgICAg ICAgICAgY2tzdHJuY3B5KE5ldEJpb3NOYW1lLHMsMTYpOwotICAgICAgICAgICAgICAgICAgICAg IGZvciAoeCA9IHk7IHggPCBORVRCSU9TX05BTUVfTEVOOyB4KyspCi0gICAgICAgICAgICAgICAg ICAgICAgICBOZXRCaW9zTmFtZVt4XSA9IFNQOwotICAgICAgICAgICAgICAgICAgICAgIE5ldEJp b3NOYW1lW05FVEJJT1NfTkFNRV9MRU5dID0gTlVMOwotICAgICAgICAgICAgICAgICAgICAgIHBy aW50ZigiQ2hlY2tpbmcgXCIlc1wiIGFzIGEgdW5pcXVlIE5ldEJJT1MgbmFtZS4uLlxuIiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0Qmlvc05hbWUpOwotICAgICAgICAgICAgICAg ICAgICAgIHJjID0gTkNCQWRkTmFtZSggTmV0YmV1aUFQSSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJm5jYiwgTmV0Qmlvc0FkYXB0ZXIsIE5ldEJpb3NOYW1lICk7Ci0g ICAgICAgICAgICAgICAgICAgICAgaWYgKHJjKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg IHByaW50ZigKLSAgICAgICAgICAgICAgICAiP1NvcnJ5LCBcIiVzXCIgaXMgYWxyZWFkeSBpbiB1 c2UgYnkgYW5vdGhlciBOZXRCSU9TIG5vZGUuXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTmV0Qmlvc05hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHgg PSAwOyB4IDwgTkVUQklPU19OQU1FX0xFTjsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE5ldEJpb3NOYW1lW3hdID0gU1A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy bigtOSk7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfTkVUQklPUyAqLwotI2lmZGVmIE5QSVBFCi0gICAg ICAgICAgICAgIGlmICh6ID09IE5FVF9QSVBFKQotICAgICAgICAgICAgICAgIGNrc3RybmNweShw aXBlbmFtZSxzLFBJUEVOQU1MKTsKLSNlbmRpZiAvKiBOUElQRSAqLwotICAgICAgICAgIH0gZWxz ZQotI2VuZGlmIC8qIE5QSVBFT1JCSU9TICovCi0jaWZkZWYgREVDTkVUCi0gICAgICAgICAgICBp ZiAoeiA9PSBORVRfREVDKSB7Ci0gICAgICAgICAgICAgICAgLyogRGV0ZXJtaW5lIGlmIHdlIGFy ZSB1c2luZyBMQVQgb3IgQ1RFUk0gKi8KLSAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbWtleShk bmV0dGFiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5kbmV0LCJERUNORVQgcHJv dG9jb2wiLCJsYXQiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgICAgcmV0dXJuKHkp OwotICAgICAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAg ICAgICAgICAgICAgIHR0bnByb3RvID0geTsKLSAgICAgICAgICAgIH0gZWxzZQotI2VuZGlmIC8q IERFQ05FVCAqLwotI2lmZGVmIE5FVERMTAotICAgICAgICAgICAgICBpZiAoeiA9PSBORVRfRExM KSB7Ci0gICAgICAgICAgICAgICAgICAvKiBGaW5kIG91dCB3aGljaCBETEwgdGhleSBhcmUgdXNp bmcgKi8KLSAgICAgICAgICAgICAgICAgIGNoYXIgZGxsbmFtZVsyNTZdPSIiOwotICAgICAgICAg ICAgICAgICAgY2hhciAqIHA9TlVMTDsKLSAgICAgICAgICAgICAgICAgIGlmICgoeCA9IGNtaWZp KCJEeW5hbWljIGxvYWQgbGlicmFyeSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiIiwmcCwmeSx4eHN0cmluZykpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgIGlmICh4 ID09IC0zKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP05hbWUgb2YgRExM IHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAg ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOwot ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KGRsbG5hbWUs cCwyNTYpOwotICAgICAgICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4o eCk7Ci0KLSAgICAgICAgICAgICAgICAgIGlmIChuZXRkbGxfbG9hZChkbGxuYW1lKSA8IDApIC8q IFRyeSB0byBsb2FkIHRoZSBkbGwgKi8KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSAwKTsKLSAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg IG5ldHR5cGUgPSB6OwotICAgICAgICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7 Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIE5F VERMTCAqLwotICAgICAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgp OwotICAgICAgICAgIG5ldHR5cGUgPSB6OwotICAgICAgICAgIGlmICgKLSNpZmRlZiBERUNORVQK LSAgICAgICAgICAgICAgKG5ldHR5cGUgIT0gTkVUX0RFQykgICYmCi0jZW5kaWYgLyogREVDTkVU ICovCi0jaWZkZWYgTlBJUEUKLSAgICAgICAgICAgICAgKG5ldHR5cGUgIT0gTkVUX1BJUEUpICYm Ci0jZW5kaWYgLyogTlBJUEUgKi8KLSNpZmRlZiBDS19ORVRCSU9TCi0gICAgICAgICAgICAgIChu ZXR0eXBlICE9IE5FVF9CSU9TKSAmJgotI2VuZGlmIC8qIENLX05FVEJJT1MgKi8KLSNpZmRlZiBO RVRGSUxFCi0gICAgICAgICAgICAgIChuZXR0eXBlICE9IE5FVF9GSUxFKSAmJgotI2VuZGlmIC8q IE5FVEZJTEUgKi8KLSNpZmRlZiBORVRDTUQKLSAgICAgICAgICAgICAgKG5ldHR5cGUgIT0gTkVU X0NNRCkgJiYKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSNpZmRlZiBORVRQVFkKLSAgICAgICAgICAg ICAgKG5ldHR5cGUgIT0gTkVUX1BUWSkgJiYKLSNlbmRpZiAvKiBORVRQVFkgKi8KLSNpZmRlZiBO RVRETEwKLSAgICAgICAgICAgICAgKG5ldHR5cGUgIT0gTkVUX0RMTCkgJiYKLSNlbmRpZiAvKiBO RVRETEwgKi8KLSNpZmRlZiBTVVBFUkxBVAotICAgICAgICAgICAgICAobmV0dHlwZSAhPSBORVRf U0xBVCkgJiYKLSNlbmRpZiAvKiBTVVBFUkxBVCAqLwotICAgICAgICAgICAgICAobmV0dHlwZSAh PSBORVRfU1gyNSkgJiYKLSAgICAgICAgICAgICAgKG5ldHR5cGUgIT0gTkVUX1ZYMjUpICYmCi0j aWZkZWYgSUJNWDI1Ci0gICAgICAgICAgICAgIChuZXR0eXBlICE9IE5FVF9JWDI1KSAmJgotI2Vu ZGlmIC8qIElCTVgyNSAqLwotI2lmZGVmIFNTSEJVSUxUSU4KLSAgICAgICAgICAgICAgKG5ldHR5 cGUgIT0gTkVUX1NTSCkgJiYKLSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0gICAgICAgICAgICAg IChuZXR0eXBlICE9IE5FVF9UQ1BCKSkgewotICAgICAgICAgICAgICBwcmludGYoIj9OZXR3b3Jr IHR5cGUgbm90IHN1cHBvcnRlZFxuIik7Ci0gICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0g MCk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAx KTsKLSAgICAgICAgICB9Ci0gICAgICB9Ci0KLSNpZm5kZWYgTk9UQ1BPUFRTCi0jaWZkZWYgVENQ U09DS0VUCi0gICAgICBjYXNlIFhZVENQOiB7Ci0gICAgICAgIGV4dGVybiBpbnQgdHR5ZmQ7Ci0K LSAgICAgICAgaWYgKCh6ID0gY21rZXkodGNwb3B0LG50Y3BvcHQsIlRDUCBvcHRpb24iLCJub2Rl bGF5Iix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeik7Ci0KLSAgICAgICAgc3dp dGNoICh6KSB7Ci0jaWZuZGVmIE5PSFRUUAotICAgICAgICAgIGNhc2UgWFlUQ1BfSFRUUF9QUk9Y WTogewotCSAgICAgIHN0cnVjdCBGREIgc3csIHR4OwotCSAgICAgIGludCBuLCB4OwotCSAgICAg IGNoYXIgdWJ1ZltMT0dJTkxFTisxXSwgcGJ1ZltMT0dJTkxFTisxXSwgYWJ1ZlsyNTZdOwotCSAg ICAgIHVidWZbMF0gPSBwYnVmWzBdID0gYWJ1ZlswXSA9IDA7Ci0KLQkgICAgICBjbWZkYmkoJnN3 LAkJLyogRmlyc3QgRkRCIC0gc3dpdGNoZXMgKi8KLQkJICAgICBfQ01LRVksCQkvKiBmY29kZSAq LwotCQkgICAgICJIVFRQIHByb3h5IHNlcnZlciBob3N0Wzpwb3J0XSBvciBzd2l0Y2giLAotCQkg ICAgICIiLAkJLyogZGVmYXVsdCAqLwotCQkgICAgICIiLAkJLyogYWRkdGwgc3RyaW5nIGRhdGEg Ki8KLQkJICAgICBudXNlcnBhc3MsCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUg Ki8KLQkJICAgICA0LAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kgKi8KLQkJ ICAgICB4eHN0cmluZywJCS8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KLQkJICAgICB1c2VycGFz cywJCS8qIEtleXdvcmQgdGFibGUgKi8KLQkJICAgICAmdHgJCS8qIFBvaW50ZXIgdG8gbmV4dCBG REIgKi8KLQkJICAgICApOwotCSAgICAgIGNtZmRiaSgmdHgsCi0JCSAgICAgX0NNVFhULAkJLyog ZmNvZGUgKi8KLQkJICAgICAiSFRUUCBwcm94eSBzZXJ2ZXIgaG9zdFs6cG9ydF0iLAotCQkgICAg ICIiLAkJLyogZGVmYXVsdCAqLwotCQkgICAgICIiLAkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8K LQkJICAgICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCi0JCSAgICAgMCwJCQkvKiBh ZGR0bCBudW1lcmljIGRhdGEgMiAqLwotCQkgICAgIHh4c3RyaW5nLAotCQkgICAgIE5VTEwsCi0J CSAgICAgTlVMTAotCQkgICAgICk7Ci0JICAgICAgd2hpbGUgKDEpIHsKLQkJICBpZiAoKHggPSBj bWZkYigmc3cpKSA8IDApIHsKLQkJICAgICAgaWYgKHggPT0gLTMpIHsKLQkJCSAgeCA9IC05Owot CQkJICBwcmludGYoIj9Ib3N0bmFtZSByZXF1aXJlZFxuIik7Ci0JCSAgICAgIH0KLQkJICAgICAg cmV0dXJuKHgpOwotCQkgIH0KLQkJICBpZiAoY21yZXN1bHQuZmNvZGUgIT0gX0NNS0VZKQotCQkg ICAgYnJlYWs7Ci0JCSAgbiA9IGNtcmVzdWx0Lm5yZXN1bHQ7Ci0JCSAgc3dpdGNoIChuKSB7Ci0J CSAgICBjYXNlIFVQV19VU0VSOgotCQkgICAgY2FzZSBVUFdfUEFTUzoKLQkJICAgIGNhc2UgVVBX X0FHRU5UOgotCQkgICAgICBpZiAoKHggPSBjbWZsZCgobiA9PSBVUFdfVVNFUikgPwotCQkJCSAg ICAgIlVzZXJuYW1lIiA6Ci0JCQkJICAgICAoKG4gPT0gVVBXX1BBU1MpID8gIlBhc3N3b3JkIiA6 ICJBZ2VudCIpLAotCQkJCSAgICAgIiIsICZzLCB4eHN0cmluZykpIDwgMCkgewotCQkJICBpZiAo eCAhPSAtMykKLQkJCSAgICByZXR1cm4oeCk7Ci0JCSAgICAgIH0KLQkJICAgICAgY2tzdHJuY3B5 KChuID09IFVQV19VU0VSKSA/IHVidWYgOgotICAgICAgICAgICAgICAgICAgICAgICAgKChuID09 IFVQV19QQVNTKSA/IHBidWYgOiBhYnVmKSwgcywgCi0gICAgICAgICAgICAgICAgICAgICAgICAo biA9PSBVUFdfQUdFTlQpID8gMjU2IDogKExPR0lOTEVOKzEpKTsKLQkJICB9Ci0JICAgICAgfQot CSAgICAgIGlmIChjbXJlc3VsdC5mY29kZSAhPSBfQ01UWFQpCi0JCXJldHVybigtMik7Ci0JICAg ICAgcyA9IGNtcmVzdWx0LnNyZXN1bHQ7Ci0JICAgICAgaWYgKHMpIGlmICghKnMpIHMgPSBOVUxM OwotCi0jaWZkZWYgSUtTRENPTkYKLQkgICAgICBpZiAoaWtzZGNmKQotCQlyZXR1cm4oc3VjY2Vz cyA9IDApOwotI2VuZGlmIC8qIElLU0RDT05GICovCi0JICAgICAgbWFrZXN0cigmdGNwX2h0dHBf cHJveHlfdXNlcix1YnVmWzBdP3VidWY6TlVMTCk7Ci0JICAgICAgbWFrZXN0cigmdGNwX2h0dHBf cHJveHlfcHdkLHBidWZbMF0/cGJ1ZjpOVUxMKTsKLQkgICAgICBtYWtlc3RyKCZ0Y3BfaHR0cF9w cm94eV9hZ2VudCxhYnVmWzBdP2FidWY6TlVMTCk7Ci0JICAgICAgbWFrZXN0cigmdGNwX2h0dHBf cHJveHkscyk7Ci0JICAgICAgbWVtc2V0KHBidWYsMCxzaXplb2YocGJ1ZikpOwotCSAgICAgIHJl dHVybihzdWNjZXNzID0gMSk7Ci0JICB9Ci0jZW5kaWYgLyogTk9IVFRQICovCi0vKgotICBJdCB3 b3VsZCBoYXZlIGJlZW4gZWFzeSB0byBjb21iaW5lIFhZVENQX1NPQ0tTX1NWUiB3aXRoIHRoZSBw cmV2aW91cwotICBvbmUgZXhjZXB0IGZvciB0aGUgI2lmZGVmcy4uLgotKi8KLSNpZmRlZiBOVAot I2lmZGVmIENLX1NPQ0tTCi0gICAgICAgICAgY2FzZSBYWVRDUF9TT0NLU19TVlI6IHsKLQkgICAg ICBjaGFyIHVidWZbTE9HSU5MRU4rMV0sIHBidWZbTE9HSU5MRU4rMV07Ci0JICAgICAgY2hhciAq IHAgPSBnZXRlbnYoIlNPQ0tTX1NFUlZFUiIpOwotCSAgICAgIHN0cnVjdCBGREIgc3csIHR4Owot CSAgICAgIGludCBuLCB4OwotCi0JICAgICAgaWYgKCFwKSBwID0gIiI7Ci0KLQkgICAgICBjbWZk YmkoJnN3LAkJLyogRmlyc3QgRkRCIC0gc3dpdGNoZXMgKi8KLQkJICAgICBfQ01LRVksCQkvKiBm Y29kZSAqLwotCQkgICAgICJTT0NLUyBzZXJ2ZXIgaG9zdFs6cG9ydF0gb3Igc3dpdGNoIiwKLQkJ ICAgICAiIiwJCS8qIGRlZmF1bHQgKi8KLQkJICAgICAiIiwJCS8qIGFkZHRsIHN0cmluZyBkYXRh ICovCi0JCSAgICAgbnVzZXJwYXNzLAkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXpl ICovCi0JCSAgICAgNCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICovCi0J CSAgICAgeHhzdHJpbmcsCQkvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0JCSAgICAgdXNlcnBh c3MsCQkvKiBLZXl3b3JkIHRhYmxlICovCi0JCSAgICAgJnR4CQkvKiBQb2ludGVyIHRvIG5leHQg RkRCICovCi0JCSAgICAgKTsKLQkgICAgICBjbWZkYmkoJnR4LAotCQkgICAgIF9DTVRYVCwJCS8q IGZjb2RlICovCi0JCSAgICAgIlNPQ0tTIHNlcnZlciBob3N0Wzpwb3J0XSIsCi0JCSAgICAgcCwJ CQkvKiBkZWZhdWx0ICovCi0JCSAgICAgIiIsCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotCQkg ICAgIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KLQkJICAgICAwLAkJCS8qIGFkZHRs IG51bWVyaWMgZGF0YSAyICovCi0JCSAgICAgeHhzdHJpbmcsCi0JCSAgICAgTlVMTCwKLQkJICAg ICBOVUxMCi0JCSAgICAgKTsKLQkgICAgICB3aGlsZSAoMSkgewotCQkgIGlmICgoeCA9IGNtZmRi KCZzdykpIDwgMCkgewotCQkgICAgICBpZiAoeCA9PSAtMykgewotCQkJICB4ID0gLTk7Ci0JCQkg IHByaW50ZigiP0hvc3RuYW1lIHJlcXVpcmVkXG4iKTsKLQkJICAgICAgfQotCQkgICAgICByZXR1 cm4oeCk7Ci0JCSAgfQotCQkgIGlmIChjbXJlc3VsdC5mY29kZSAhPSBfQ01LRVkpCi0JCSAgICBi cmVhazsKLQkJICBuID0gY21yZXN1bHQubnJlc3VsdDsKLQkJICBzd2l0Y2ggKG4pIHsKLQkJICAg IGNhc2UgVVBXX1VTRVI6Ci0JCSAgICBjYXNlIFVQV19QQVNTOgotCQkgICAgICBpZiAoKHggPSBj bWZsZCgobiA9PSBVUFdfVVNFUikgPyAiVXNlcm5hbWUiIDogIlBhc3N3b3JkIiwKLQkJCQkgICAg ICIiLCAmcywgeHhzdHJpbmcpKSA8IDApIHsKLQkJCSAgaWYgKHggIT0gLTMpCi0JCQkgICAgcmV0 dXJuKHgpOwotCQkgICAgICB9Ci0JCSAgICAgIGNrc3RybmNweSgobiA9PSBVUFdfVVNFUikgPyB1 YnVmIDogcGJ1ZiwgcywgTE9HSU5MRU4rMSk7Ci0JCSAgfQotCSAgICAgIH0KLQkgICAgICBpZiAo Y21yZXN1bHQuZmNvZGUgIT0gX0NNVFhUKQotCQlyZXR1cm4oLTIpOwotCSAgICAgIHMgPSBjbXJl c3VsdC5zcmVzdWx0OwotCSAgICAgIGlmIChzKSBpZiAoISpzKSBzID0gTlVMTDsKLQotI2lmZGVm IElLU0RDT05GCi0JICAgICAgaWYgKGlrc2RjZikKLQkJcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSNl bmRpZiAvKiBJS1NEQ09ORiAqLwotCSAgICAgIG1ha2VzdHIoJnRjcF9zb2Nrc191c2VyLHVidWYp OwotICAgICAgICAgICAgICBtZW1zZXQocGJ1ZiwwLHNpemVvZihwYnVmKSk7Ci0JICAgICAgbWFr ZXN0cigmdGNwX3NvY2tzX3N2cixzKTsKLQkgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCSAg fQotCi0jaWZkZWYgQ0tfU09DS1NfTlMKLSAgICAgICAgICBjYXNlIFhZVENQX1NPQ0tTX05TOiB7 Ci0gICAgICAgICAgICBjaGFyICogcCA9IGdldGVudigiU09DS1NfTlMiKTsKLSAgICAgICAgICAg IGlmICghcCkgcCA9ICIiOwotICAgICAgICAgICAgaWYgKCh5ID0gY210eHQoImhvc3RuYW1lIG9y IElQIG9mIFNPQ0tTIE5hbWUgU2VydmVyIixwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZzLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSNpZmRlZiBJ S1NEQ09ORgotICAgICAgICAgICAgICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOwot I2VuZGlmIC8qIElLU0RDT05GICovCi0gICAgICAgICAgICAgIGlmICh0Y3Bfc29ja3NfbnMpIHsK LSAgICAgICAgICAgICAgICAgIGZyZWUodGNwX3NvY2tzX25zKTsgICAvKiBGcmVlIGFueSBwcmV2 aW91cyBzdG9yYWdlICovCi0gICAgICAgICAgICAgICAgICB0Y3Bfc29ja3NfbnMgPSBOVUxMOwot ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGlmIChzID09IE5VTEwgfHwgKnMgPT0gTlVM KSB7IC8qIElmIG5vbmUgZ2l2ZW4gKi8KLSAgICAgICAgICAgICAgICAgIHRjcF9zb2Nrc19ucyA9 IE5VTEw7ICAvKiByZW1vdmUgdGhlIG92ZXJyaWRlIHN0cmluZyAqLwotICAgICAgICAgICAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgICAgICAgICAgfSBlbHNlIGlmICgodGNwX3Nv Y2tzX25zID0gbWFsbG9jKHN0cmxlbihzKSsxKSkpIHsKLSAgICAgICAgICAgICAgICAgIHN0cmNw eSh0Y3Bfc29ja3NfbnMscyk7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEp OwotICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDApOwotICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19TT0NLU19OUyAqLwotI2VuZGlmIC8qIENL X1NPQ0tTICovCi0jZW5kaWYgLyogTlQgKi8KLSAgICAgICAgICBjYXNlIFhZVENQX0FERFJFU1M6 Ci0gICAgICAgICAgICBpZiAoKHkgPSBjbXR4dCgicHJlZmVycmVkIElQIEFkZHJlc3MgZm9yIFRD UCBjb25uZWN0aW9ucyIsIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmcyx4eHN0cmlu ZykpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHkpOwotI2lmZGVmIElLU0RDT05GCi0gICAg ICAgICAgICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOwotI2VuZGlmIC8qIElLU0RD T05GICovCi0gICAgICAgICAgICBpZiAodGNwX2FkZHJlc3MpIHsKLSAgICAgICAgICAgICAgICBm cmVlKHRjcF9hZGRyZXNzKTsgICAgICAvKiBGcmVlIGFueSBwcmV2aW91cyBzdG9yYWdlICovCi0g ICAgICAgICAgICAgICAgdGNwX2FkZHJlc3MgPSBOVUxMOwotICAgICAgICAgICAgfQotICAgICAg ICAgICAgaWYgKHMgPT0gTlVMTCB8fCAqcyA9PSBOVUwpIHsgLyogSWYgbm9uZSBnaXZlbiAqLwot ICAgICAgICAgICAgICAgIHRjcF9hZGRyZXNzID0gTlVMTDsgICAgIC8qIHJlbW92ZSB0aGUgb3Zl cnJpZGUgc3RyaW5nICovCi0gICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAg ICAgICAgICAgIH0gZWxzZSBpZiAoKHRjcF9hZGRyZXNzID0gbWFsbG9jKHN0cmxlbihzKSsxKSkp IHsKLSAgICAgICAgICAgICAgICBzdHJjcHkodGNwX2FkZHJlc3Mscyk7Ci0gICAgICAgICAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg ICByZXR1cm4oc3VjY2VzcyA9IDApOwotI2lmZGVmIFNPX0tFRVBBTElWRQotICAgICAgICAgIGNh c2UgWFlUQ1BfS0VFUEFMSVZFOgotICAgICAgICAgICAgaWYgKCh6ID0gY21rZXkob25vZmYsMiwi Iiwib24iLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeik7Ci0gICAgICAgICAgICBpZiAoKHkgPSBj bWNmbSgpKSA8IDApIHJldHVybih5KTsKLSNpZmRlZiBJS1NEQ09ORgotICAgICAgICAgICAgaWYg KGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSNlbmRpZiAvKiBJS1NEQ09ORiAqLwotI2lm ZGVmIFNTSEJVSUxUSU4KLSAgICAgICAgICAgIGlmIChuZXR3b3JrICYmIG5ldHR5cGUgPT0gTkVU X1NTSCAmJiBzc2hfc29jayAhPSAtMSkKLSAgICAgICAgICAgICAgc3VjY2VzcyA9IGtlZXBhbGl2 ZShzc2hfc29jayx6KTsKLSAgICAgICAgICAgIGVsc2UKLSNlbmRpZiAvKiBTU0hCVUlMVElOICov Ci0JICAgICAgc3VjY2VzcyA9IGtlZXBhbGl2ZSh0dHlmZCx6KTsKLSAgICAgICAgICAgIHJldHVy bihzdWNjZXNzKTsKLSNlbmRpZiAvKiBTT19LRUVQQUxJVkUgKi8KLSNpZmRlZiBTT19ET05UUk9V VEUKLSAgICAgICAgICBjYXNlIFhZVENQX0RPTlRST1VURToKLSAgICAgICAgICAgIGlmICgoeiA9 IGNta2V5KG9ub2ZmLDIsIiIsIm9mZiIseHhzdHJpbmcpKSA8IDApIHJldHVybih6KTsKLSAgICAg ICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotI2lmZGVmIElLU0RDT05G Ci0gICAgICAgICAgICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOwotI2VuZGlmIC8q IElLU0RDT05GICovCi0jaWZkZWYgU1NIQlVJTFRJTgotICAgICAgICAgICAgaWYgKG5ldHdvcmsg JiYgbmV0dHlwZSA9PSBORVRfU1NIICYmIHNzaF9zb2NrICE9IC0xKQotICAgICAgICAgICAgICBz dWNjZXNzID0gZG9udHJvdXRlKHNzaF9zb2NrLHopOwotICAgICAgICAgICAgZWxzZQotI2VuZGlm IC8qIFNTSEJVSUxUSU4gKi8KLQkgICAgICBzdWNjZXNzID0gZG9udHJvdXRlKHR0eWZkLHopOwot ICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOwotI2VuZGlmIC8qIFNPX0RPTlRST1VURSAqLwot I2lmZGVmIFRDUF9OT0RFTEFZCi0gICAgICAgICAgY2FzZSBYWVRDUF9OT0RFTEFZOgotICAgICAg ICAgICAgaWYgKCh6ID0gY21rZXkob25vZmYsMiwiIiwib2ZmIix4eHN0cmluZykpIDwgMCkgcmV0 dXJuKHopOwotICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0j aWZkZWYgSUtTRENPTkYKLSAgICAgICAgICAgIGlmIChpa3NkY2YpIHJldHVybihzdWNjZXNzID0g MCk7Ci0jZW5kaWYgLyogSUtTRENPTkYgKi8KLSNpZmRlZiBTU0hCVUlMVElOCi0gICAgICAgICAg ICBpZiAobmV0d29yayAmJiBuZXR0eXBlID09IE5FVF9TU0ggJiYgc3NoX3NvY2sgIT0gLTEpCi0g ICAgICAgICAgICAgIHN1Y2Nlc3MgPSBub19kZWxheShzc2hfc29jayx6KTsKLSAgICAgICAgICAg IGVsc2UKLSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0JICAgICAgc3VjY2VzcyA9IG5vX2RlbGF5 KHR0eWZkLHopOwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOwotICAgICAgICAgIGNhc2Ug WFlUQ1BfTkFHTEU6ICAgICAgICAgICAgIC8qIFRoZSBpbnZlcnNlIG9mIE5PREVMQVkgKi8KLSAg ICAgICAgICAgIGlmICgoeiA9IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykpIDwgMCkg cmV0dXJuKHopOwotICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7 Ci0jaWZkZWYgSUtTRENPTkYKLSAgICAgICAgICAgIGlmIChpa3NkY2YpIHJldHVybihzdWNjZXNz ID0gMCk7Ci0jZW5kaWYgLyogSUtTRENPTkYgKi8KLSNpZmRlZiBTU0hCVUlMVElOCi0gICAgICAg ICAgICBpZiAobmV0d29yayAmJiBuZXR0eXBlID09IE5FVF9TU0ggJiYgc3NoX3NvY2sgIT0gLTEp Ci0gICAgICAgICAgICAgIHN1Y2Nlc3MgPSBub19kZWxheShzc2hfc29jayx6KTsKLSAgICAgICAg ICAgIGVsc2UKLSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0JICAgICAgc3VjY2VzcyA9IG5vX2Rl bGF5KHR0eWZkLCF6KTsKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzKTsKLSNlbmRpZiAvKiBU Q1BfTk9ERUxBWSAqLwotI2lmZGVmIFNPX0xJTkdFUgotICAgICAgICAgIGNhc2UgWFlUQ1BfTElO R0VSOgotICAgICAgICAgICAgaWYgKCh6ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5n KSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeik7Ci0gICAgICAgICAgICBpZiAoeikgeyAg ICAgICAgICAgICAgICAgICAgLyogaWYgb24sIHdlIG5lZWQgYSB0aW1lb3V0IHZhbHVlICovCi0g ICAgICAgICAgICAgICAgaWYgKCh4ID0gY21udW0oIkxpbmdlciB0aW1lb3V0IGluIDEwdGggb2Yg YSBtaWxsaXNlY29uZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiLDEwLCZ5 LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAg ICAgfSBlbHNlCi0gICAgICAgICAgICAgIHkgPSAwOwotICAgICAgICAgICAgaWYgKCh4ID0gY21j Zm0oKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0jaWZkZWYgSUtTRENPTkYKLSAg ICAgICAgICAgIGlmIChpa3NkY2YpIHJldHVybihzdWNjZXNzID0gMCk7Ci0jZW5kaWYgLyogSUtT RENPTkYgKi8KLSNpZmRlZiBTU0hCVUlMVElOCi0gICAgICAgICAgICBpZiAobmV0d29yayAmJiBu ZXR0eXBlID09IE5FVF9TU0ggJiYgc3NoX3NvY2sgIT0gLTEpCi0gICAgICAgICAgICAgIHN1Y2Nl c3MgPSBja19saW5nZXIoc3NoX3NvY2sseix5KTsKLSAgICAgICAgICAgIGVsc2UKLSNlbmRpZiAv KiBTU0hCVUlMVElOICovCi0JICAgICAgc3VjY2VzcyA9IGNrX2xpbmdlcih0dHlmZCx6LHkpOwot ICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOwotI2VuZGlmIC8qIFNPX0xJTkdFUiAqLwotI2lm ZGVmIFNPX1NOREJVRgotICAgICAgICAgIGNhc2UgWFlUQ1BfU0VOREJVRjoKLSAgICAgICAgICAg IHggPSBjbW51bSgiU2VuZCBidWZmZXIgc2l6ZSwgYnl0ZXMiLCI4MTkyIiwxMCwmeix4eHN0cmlu Zyk7Ci0gICAgICAgICAgICBpZiAoeCA8IDApIHJldHVybih4KTsKLSAgICAgICAgICAgIGlmICgo eCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotI2lmZGVmIElLU0RDT05GCi0gICAgICAgICAg ICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOwotI2VuZGlmIC8qIElLU0RDT05GICov Ci0jaWZkZWYgU1NIQlVJTFRJTgotICAgICAgICAgICAgaWYgKG5ldHdvcmsgJiYgbmV0dHlwZSA9 PSBORVRfU1NIICYmIHNzaF9zb2NrICE9IC0xKQotICAgICAgICAgICAgICBzdWNjZXNzID0gc2Vu ZGJ1Zihzc2hfc29jayx6KTsKLSAgICAgICAgICAgIGVsc2UKLSNlbmRpZiAvKiBTU0hCVUlMVElO ICovCi0JICAgICAgc3VjY2VzcyA9IHNlbmRidWYodHR5ZmQseik7Ci0gICAgICAgICAgICByZXR1 cm4oc3VjY2Vzcyk7Ci0jZW5kaWYgLyogU09fU05EQlVGICovCi0jaWZkZWYgU09fUkNWQlVGCi0g ICAgICAgICAgY2FzZSBYWVRDUF9SRUNWQlVGOgotICAgICAgICAgICAgeCA9IGNtbnVtKCJSZWNl aXZlIGJ1ZmZlciBzaXplLCBieXRlcyIsIjgxOTIiLDEwLCZ6LHh4c3RyaW5nKTsKLSAgICAgICAg ICAgIGlmICh4IDwgMCkgcmV0dXJuKHgpOwotICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkg PCAwKSByZXR1cm4oeCk7Ci0jaWZkZWYgSUtTRENPTkYKLSAgICAgICAgICAgIGlmIChpa3NkY2Yp IHJldHVybihzdWNjZXNzID0gMCk7Ci0jZW5kaWYgLyogSUtTRENPTkYgKi8KLQotLyogTm90ZTog VGhlIGZvbGxvd2luZyBpcyBub3QgMTYtYml0IHNhZmUgKi8KLQotI2lmbmRlZiBRTlgxNgotICAg ICAgICAgICAgaWYgKHggPiA1MjI0OCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiP1dhcm5p bmc6IHJlY2VpdmUgYnVmZmVycyBsYXJnZXIgdGhhbiA1MjI0OCBieXRlc1xuIik7Ci0gICAgICAg ICAgICAgICAgcHJpbnRmKCIgbWF5IG5vdCBiZSB1bmRlcnN0b29kIGJ5IGFsbCBob3N0cy4gIFBl cmZvcm1hbmNlXG4iKTsKLSAgICAgICAgICAgICAgICBwcmludGYoIiBtYXkgc3VmZmVyLlxuIik7 Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBR TlgxNiAqLwotI2lmZGVmIFNTSEJVSUxUSU4KLSAgICAgICAgICAgIGlmIChuZXR3b3JrICYmIG5l dHR5cGUgPT0gTkVUX1NTSCAmJiBzc2hfc29jayAhPSAtMSkKLSAgICAgICAgICAgICAgc3VjY2Vz cyA9IHJlY3ZidWYoc3NoX3NvY2sseik7Ci0gICAgICAgICAgICBlbHNlCi0jZW5kaWYgLyogU1NI QlVJTFRJTiAqLwotCSAgICAgIHN1Y2Nlc3MgPSByZWN2YnVmKHR0eWZkLHopOwotICAgICAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MpOwotI2VuZGlmIC8qIFNPX1JDVkJVRiAqLwotCi0jaWZkZWYgVk1T Ci0jaWZkZWYgREVDX1RDUElQCi0gICAgICAgICAgY2FzZSBYWVRDUF9VQ1g6IHsgICAgICAgICAg ICAgLyogVUNYIDIuMCBwb3J0IHN3YWJiaW5nIGJ1ZyAqLwotICAgICAgICAgICAgICBleHRlcm4g aW50IHVjeF9wb3J0X2J1ZzsKLSAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRvbigm dWN4X3BvcnRfYnVnKSk7Ci0gICAgICAgICAgfQotI2VuZGlmIC8qIERFQ19UQ1BJUCAqLwotI2Vu ZGlmIC8qIFZNUyAqLwotCi0gICAgICAgICAgY2FzZSBYWVRDUF9SRE5TOiB7Ci0gICAgICAgICAg ICAgIGV4dGVybiBpbnQgdGNwX3JkbnM7Ci0gICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0g c2V0b25hdXQoJnRjcF9yZG5zKSk7Ci0gICAgICAgICAgfQotCi0jaWZkZWYgQ0tfRE5TX1NSVgot ICAgICAgICAgIGNhc2UgWFlUQ1BfRE5TX1NSVjogewotICAgICAgICAgICAgICBleHRlcm4gaW50 IHRjcF9kbnNfc3J2OwotICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZ0Y3Bf ZG5zX3NydikpOwotICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19ETlNfU1JWICovCi0KLSAgICAg ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICB9Ci0gICAgICB9 Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0jZW5kaWYgLyogTk9UQ1BPUFRTICovCi0jZW5kaWYg LyogTkVUQ09OTiAqLwotICAgIH0KLQotICAgIHN3aXRjaCAoeHgpIHsKLQotI2lmbmRlZiBOT0xP Q0FMCi0jaWZkZWYgTkVUQ09OTgotICAgICAgY2FzZSBYWUhPU1Q6IHsgICAgICAgICAgICAgICAg ICAgIC8qIFNFVCBIT1NUICovCi0gICAgICAgICAgeiA9IHR0bnByb3RvOyAgICAgICAgICAgICAg ICAgLyogU2F2ZSBwcm90b2NvbCBpbiBjYXNlIG9mIGZhaWx1cmUgKi8KLSNpZmRlZiBERUNORVQK LSAgICAgICAgICBpZiAobmV0dHlwZSAhPSBORVRfREVDKQotI2VuZGlmIC8qIERFQ05FVCAqLwot ICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9OT05FOwotICAgICAgICAgIGlmICgoeSA9IHNldGxp bihYWUhPU1QsMSwwKSkgPD0gMCkgeyAvKiBTZXRzIHN1Y2Nlc3MgdG8gMSAqLwotICAgICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJTRVQgSE9TVCBmYWlsIG1kbXR5cCIsIiIsbWRtdHlwKTsKLSAgICAg ICAgICAgICAgdHRucHJvdG8gPSB6OyAgICAgICAgICAgICAvKiBGYWlsZWQsIHJlc3RvcmUgcHJv dG9jb2wgKi8KLSAgICAgICAgICAgICAgc3VjY2VzcyA9IDA7Ci0gICAgICAgICAgfQotICAgICAg ICAgIGRpZHNldGxpbisrOwotICAgICAgICAgIGRlYnVnKEYxMDEsIlNFVCBIT1NUIE9LIG1kbXR5 cCIsIiIsbWRtdHlwKTsKLSAgICAgICAgICBkZWJ1ZyhGMTAxLCJTRVQgSE9TVCByZWxpYWJsZSIs IiIscmVsaWFibGUpOwotICAgICAgICAgIHJldHVybih5KTsKLSAgICAgIH0KLSNlbmRpZiAvKiBO RVRDT05OICovCi0KLSAgICAgIGNhc2UgWFlMSU5FOiAgICAgICAgICAgICAgICAgICAgICAvKiBT RVQgTElORSAoPSBTRVQgUE9SVCkgKi8KLSAgICAgICAgZGVidWcoRjEwMSwic2V0bGluIGZsb3cg MSIsIiIsZmxvdyk7Ci0gICAgICAgIHggPSBzZXRsaW4oeHgsMSwwKTsKLSAgICAgICAgaWYgKHgg PiAtMSkgZGlkc2V0bGluKys7Ci0gICAgICAgIGRlYnVnKEYxMDEsIlNFVCBMSU5FIHNldGxpbiIs IiIseCk7Ci0gICAgICAgIGRlYnVnKEYxMDEsIlNFVCBMSU5FIGZsb3ciLCIiLGZsb3cpOwotICAg ICAgICBkZWJ1ZyhGMTAxLCJTRVQgTElORSBsb2NhbCIsIiIsbG9jYWwpOwotICAgICAgICBkZWJ1 ZyhGMTAxLCJTRVQgTElORSByZWxpYWJsZSIsIiIscmVsaWFibGUpOwotICAgICAgICByZXR1cm4o eCk7Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0jaWZuZGVmIE5PU0VUS0VZCi0gICAgICBjYXNl IFhZS0VZOiAgICAgICAgICAgICAgICAgICAgICAgLyogU0VUIEtFWSAqLwotICAgICAgICByZXR1 cm4oZG9zZXRrZXkoKSk7Ci0jZW5kaWYgLyogTk9TRVRLRVkgKi8KLQotI2lmbmRlZiBOT0NTRVRT Ci0gICAgICBjYXNlIFhZTEFORzogICAgICAgICAgICAgICAgICAgICAgLyogTGFuZ3VhZ2UgKi8K LSAgICAgICAgaWYgKCh5ID0gY21rZXkobG5ndGFiLG5sbmcsIiIsIm5vbmUiLHh4c3RyaW5nKSkg PCAwKQotICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAw KSByZXR1cm4oeCk7Ci0KLSAgICAgICAgLyogTG9vayB1cCBsYW5ndWFnZSBhbmQgZ2V0IGFzc29j aWF0ZWQgY2hhcmFjdGVyIHNldHMgKi8KLSAgICAgICAgZm9yIChpID0gMDsgKGkgPCBubGFuZ3Mp ICYmIChsYW5nc1tpXS5pZCAhPSB5KTsgaSsrKSA7Ci0gICAgICAgIGlmIChpID49IG5sYW5ncykg ewotICAgICAgICAgICAgcHJpbnRmKCI/aW50ZXJuYWwgZXJyb3IsIHNvcnJ5XG4iKTsKLSAgICAg ICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAgIH0gLyogICovCi0gICAgICAgIGxh bmd1YWdlID0gaTsgICAgICAgICAgICAgICAgICAgLyogQWxsIGdvb2QsIHNldCB0aGUgbGFuZ3Vh Z2UsICovCi0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0jZW5kaWYgLyogTk9DU0VUUyAq LwotCi0jaWZuZGVmIE1BQwotICAgICAgY2FzZSBYWUJBQ0s6ICAgICAgICAgICAgICAgICAgICAg IC8qIEJBQ0tHUk9VTkQgKi8KLSAgICAgICAgaWYgKCh6ID0gY21rZXkob25vZmYsMiwiIiwiIix4 eHN0cmluZykpIDwgMCkgcmV0dXJuKHopOwotICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDAp IHJldHVybih5KTsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIGJnc2V0ID0gejsgICAgICAgICAg ICAgICAgICAgICAgLyogMCA9IG9mZiAoZm9yZWdyb3VuZCkgKi8KLSNpZmRlZiBWTVMgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiAxID0gb24gKGJhY2tncm91bmQpICovCi0gICAgICAg IGlmIChiYXRjaCAmJiBiZ3NldCA9PSAwKSAgICAgICAgLyogVG8gZW5hYmxlIGVjaG9pbmcgb2Yg Y29tbWFuZHMgKi8KLSAgICAgICAgICBja3hlY2ggPSAxOyAgICAgICAgICAgICAgICAgICAvKiBp biBWTVMgYmF0Y2ggbG9ncyAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2Vsc2UgIC8qIENPTU1FTlQg Ki8KLSAgICAgICAgaWYgKHopIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiAxID0gQmFja2dy b3VuZCAqLwotICAgICAgICAgICAgYmdzZXQgPSAxOwotICAgICAgICAgICAgYmFja2dyZCA9IDE7 Ci0jaWZkZWYgVk1TCi0gICAgICAgICAgICBiYXRjaCA9IDE7Ci0jZW5kaWYgLyogVk1TICovCi0g ICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogMCA9IEZvcmVncm91bmQg Ki8KLSAgICAgICAgICAgIGJnc2V0ID0gMDsKLSAgICAgICAgICAgIGJhY2tncmQgPSAwOwotI2lm ZGVmIFZNUwotICAgICAgICAgICAgYmF0Y2ggPSAwOwotI2VuZGlmIC8qIFZNUyAqLwotICAgICAg ICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICBzdWNjZXNzID0gMTsKLSAgICAgICAg YmdjaGsoKTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOwotI2VuZGlmIC8qIE1BQyAqLwotCi0g ICAgICBjYXNlIFhZUVVJRTogeyAgICAgICAgICAgICAgICAgICAgLyogUVVJRVQgKi8KLSNpZmRl ZiBEQ01EQlVGCi0gICAgICAgICAgZXh0ZXJuIGludCAqIHhxdWlldDsKLSNlbHNlCi0gICAgICAg ICAgZXh0ZXJuIGludCB4cXVpZXRbXTsKLSNlbmRpZiAvKiBEQ01EQlVGICovCi0gICAgICAgICAg eCA9IHNldG9uKCZxdWlldCk7Ci0gICAgICAgICAgaWYgKHggPCAwKSByZXR1cm4oeCk7Ci0gICAg ICAgICAgeHF1aWV0W2NtZGx2bF0gPSBxdWlldDsKLSAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IHgpOwotICAgICAgfQotCi0jaWZuZGVmIE5PWEZFUgotICAgICAgY2FzZSBYWUJVRjogeyAgICAg ICAgICAgICAgICAgICAgIC8qIEJVRkZFUlMgKi8KLSNpZmRlZiBEWU5BTUlDCi0gICAgICAgICAg aW50IHNiLCByYjsKLSAgICAgICAgICBpZiAoKHkgPSBjbW51bSgiU2VuZCBidWZmZXIgc2l6ZSIs IiIsMTAsJnNiLHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICAgIGlmICh5ID09IC0zKSBw cmludGYoIj9CdWZmZXIgc2l6ZSByZXF1aXJlZFxuIik7Ci0gICAgICAgICAgICAgIHJldHVybih5 KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHNiIDwgMCkgewotICAgICAgICAgICAgICBp ZiAoKmF0bWJ1ZiA9PSAnLScpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCI/TmVnYXRpdmUgbnVt YmVycyBjYW4ndCBiZSB1c2VkIGhlcmVcbiIpOwotICAgICAgICAgICAgICBlbHNlIHByaW50Zigi P0ludGVnZXIgb3ZlcmZsb3csIHVzZSBhIHNtYWxsZXIgbnVtYmVyIHBsZWFzZVxuIik7Ci0gICAg ICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgfSBlbHNlIGlmIChzYiA8IDgwKSB7Ci0g ICAgICAgICAgICAgIHByaW50ZigiP1RvbyBzbWFsbFxuIik7Ci0gICAgICAgICAgICAgIHJldHVy bigtOSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmICgoeT1jbW51bSgiUmVjZWl2ZSBidWZm ZXIgc2l6ZSIsY2tpdG9hKHNiKSwxMCwmcmIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICBy ZXR1cm4oeSk7Ci0gICAgICAgICAgaWYgKHJiIDwgMCkgewotICAgICAgICAgICAgICBpZiAoKmF0 bWJ1ZiA9PSAnLScpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCI/TmVnYXRpdmUgbnVtYmVycyBj YW4ndCBiZSB1c2VkIGhlcmVcbiIpOwotICAgICAgICAgICAgICBlbHNlIHByaW50ZigiP0ludGVn ZXIgb3ZlcmZsb3csIHVzZSBhIHNtYWxsZXIgbnVtYmVyIHBsZWFzZVxuIik7Ci0gICAgICAgICAg ICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgfSBlbHNlIGlmIChyYiA8IDgwKSB7Ci0gICAgICAg ICAgICAgIHByaW50ZigiP1RvbyBzbWFsbFxuIik7Ci0gICAgICAgICAgICAgIHJldHVybigtOSk7 Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkp OwotICAgICAgICAgIGlmICgoeSA9IGluaWJ1ZnMoc2IscmIpKSA8IDApIHJldHVybih5KTsKLSAg ICAgICAgICB5ID0gYWRqcGtsKHVycHNpeix3c2xvdHIsYmlncmJzaXopOyAvKiBNYXliZSBhZGp1 c3QgcGFja2V0IHNpemVzICovCi0gICAgICAgICAgaWYgKHkgIT0gdXJwc2l6KSB1cnBzaXogPSB5 OwotICAgICAgICAgIHkgPSBhZGpwa2woc3BzaXosd3Nsb3RyLGJpZ3Nic2l6KTsKLSAgICAgICAg ICBpZiAoeSAhPSBzcHNpeikgc3BzaXogPSBzcG1heCA9IHNwc2l6ciA9IHk7Ci0gICAgICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSNlbHNlCi0gICAgICAgICAgcHJpbnRmKCI/U29ycnksIG5v dCBhdmFpbGFibGVcbiIpOwotICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0jZW5kaWYg LyogRFlOQU1JQyAqLwotICAgICAgfQotCi0gICAgICBjYXNlIFhZQ0hLVDogICAgICAgICAgICAg ICAgICAgICAgLyogQkxPQ0stQ0hFQ0sgKi8KLSAgICAgICAgaWYgKCh4ID0gY21rZXkoY2hrdGFi LG5jaGt0LCIiLCIzIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICBpZiAoKHkg PSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLQlpZiAoeCA9PSA1KSB7Ci0JICAgIGJjdGYgPSAx OwotI2lmZGVmIENPTU1FTlQKLQkgICAgcHJpbnRmKCI/NSAtIE5vdCBpbXBsZW1lbnRlZCB5ZXRc biIpOwotCSAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotI2VuZGlmCS8qIENPTU1FTlQgKi8KLQl9 Ci0gICAgICAgIGJjdHIgPSB4OyAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IGxvY2FsIHRv byBldmVuIGlmIFJFTU9URSBTRVQgKi8KLQotICAgICAgICBpZiAocm1zZmxnKSB7Ci0gICAgICAg ICAgICBpZiAoeCA9PSA0KSB7Ci0gICAgICAgICAgICAgICAgdG1wYnVmWzBdID0gJ0InOwotICAg ICAgICAgICAgICAgIHRtcGJ1ZlsxXSA9ICdcMCc7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAg ICAgICAgICAgY2tzdHJuY3B5KHRtcGJ1Zixja2l0b2EoeCksVE1QQlVGU0laKTsKLSAgICAgICAg ICAgIHNzdGF0ZSA9IHNldGdlbignUycsICI0MDAiLCB0bXBidWYsICIiKTsKLSAgICAgICAgICAg IHJldHVybigoaW50KSBzc3RhdGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZu ZGVmIE5PTE9DQUwKLSNpZm5kZWYgTUFDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBU aGUgTWFjIGhhcyBubyBSUy0yMzIgKi8KLWNhc2UgWFlDQVJSOiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBDQVJSSUVSLVdBVENIICovCi0gICAgICAgIHJldHVybihzZXRkY2QoKSk7Ci0j ZW5kaWYgLyogTUFDICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotICAgIH0KLQotI2lmZGVmIFRO Q09ERQotICAgIHN3aXRjaCAoeHgpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIEF2b2lkIGxv bmcgc3dpdGNoIHN0YXRlbWVudHMuLi4gKi8KLSAgICAgIGNhc2UgWFlURUxPUDogewotICAgICAg ICAgIGludCBjLCBuOyAgICAgICAgICAgICAgICAgICAgIC8qIFdvcmtlcnMgKi8KLSAgICAgICAg ICBpbnQgZ2V0dmFsID0gMDsgICAgICAgICAgICAgICAvKiBXaGV0aGVyIHRvIGdldCBzd2l0Y2gg dmFsdWUgKi8KLSAgICAgICAgICBpbnQgdG5zZXJ2ZXIgPSAwOyAgICAgICAgICAgICAvKiBDbGll bnQgYnkgZGVmYXVsdCAqLwotICAgICAgICAgIGludCBvcHQgPSAtMTsgICAgICAgICAgICAgICAg IC8qIFRlbG5ldCBPcHRpb24gKi8KLSAgICAgICAgICBzdHJ1Y3QgRkRCIHN3LCBvcDsgICAgICAg ICAgICAvKiBGREJzIGZvciBlYWNoIHBhcnNlIGZ1bmN0aW9uICovCi0jaWZkZWYgQ0tfQVVUSEVO VElDQVRJT04KLSAgICAgICAgICBleHRlcm4gaW50IHNsX3RvcHRfYV9zX3NhdmVkOwotICAgICAg ICAgIGV4dGVybiBpbnQgc2xfdG9wdF9hX2Nfc2F2ZWQ7Ci0gICAgICAgICAgZXh0ZXJuIGludCBz bF90b3B0X2Vfc19zYXZlZDsKLSAgICAgICAgICBleHRlcm4gaW50IHNsX3RvcHRfZV9jX3NhdmVk OwotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0jaWZkZWYgSUtTRAotICAgICAgICAg IGlmIChpbnNlcnZlcikgICAgICAgICAgICAgICAgIC8qIFNlcnZlciBieSBkZWZhdWx0IHdoZW4g SUtTRCAqLwotICAgICAgICAgICAgdG5zZXJ2ZXIgPSAxOwotI2VuZGlmIC8qIElLU0QgKi8KLQot ICAgICAgICAgIC8qIFNldCB1cCBjaGFpbmVkIHBhcnNlIGZ1bmN0aW9ucy4uLiAqLwotCi0gICAg ICAgICAgY21mZGJpKCZvcCwgICAgICAgICAgICAgICAgICAgLyogRmlyc3QgZmRiIC0gdGVsb3B0 cyovCi0gICAgICAgICAgICAgICAgIF9DTUtFWSwgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8K LSAgICAgICAgICAgICAgICAgIi9jbGllbnQsIC9zZXJ2ZXIgb3IiLCAvKiBobHBtc2cgKi8KLSAg ICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAg ICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEg Ki8KLSAgICAgICAgICAgICAgICAgbnRub3B0LCAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1l cmljIGRhdGEgMSAqLwotICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgIC8q IGFkZHRsIG51bWVyaWMgZGF0YSAyICovCi0gICAgICAgICAgICAgICAgIHh4c3RyaW5nLAotICAg ICAgICAgICAgICAgICB0bm9wdHRhYiwKLSAgICAgICAgICAgICAgICAgJnN3Ci0gICAgICAgICAg ICAgICAgICk7Ci0gICAgICAgICAgY21mZGJpKCZzdywgICAgICAgICAgICAgICAgICAgLyogU2Vj b25kIEZEQiAtIGNvbW1hbmQgc3dpdGNoZXMgKi8KLSAgICAgICAgICAgICAgICAgX0NNS0VZLCAg ICAgICAgICAgICAgICAvKiBmY29kZSAqLwotICAgICAgICAgICAgICAgICAiIiwgICAgICAgICAg ICAgICAgICAgIC8qIGhscG1zZyAqLwotICAgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAg ICAgICAgIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAg ICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAgICAgICAgICAgICBudG5vcHRzdywg ICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLwotICAgICAg ICAgICAgICAgICA0LCAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAy OiA0ID0gY21zd2kgKi8KLSAgICAgICAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgICAv KiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0gICAgICAgICAgICAgICAgIHRub3B0c3csICAgICAg ICAgICAgICAgLyogS2V5d29yZCB0YWJsZSAqLwotICAgICAgICAgICAgICAgICBOVUxMICAgICAg ICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KLSAgICAgICAgICAgICAgICAg KTsKLQotICAgICAgICAgIHdoaWxlIChvcHQgPCAwKSB7ICAgICAgICAgICAgIC8qIFBhcnNlIDAg b3IgbW9yZSBzd2l0Y2hlcyAqLwotICAgICAgICAgICAgICB4ID0gY21mZGIoJm9wKTsgICAgICAg ICAgIC8qIFBhcnNlIHN3aXRjaCBvciBvdGhlciB0aGluZyAqLwotICAgICAgICAgICAgICBkZWJ1 ZyhGMTAxLCJYWVRFTE9QIGNtZmRiIiwiIix4KTsKLSAgICAgICAgICAgICAgaWYgKHggPCAwKSAg ICAgICAgICAgICAgICAvKiBFcnJvciAqLwotICAgICAgICAgICAgICAgIHJldHVybih4KTsgICAg ICAgICAgICAgIC8qIG9yIHJlcGFyc2UgbmVlZGVkICovCi0gICAgICAgICAgICAgIGlmIChjbXJl c3VsdC5mY29kZSAhPSBfQ01LRVkpIC8qIEJyZWFrIG91dCBpZiBub3QgYSBzd2l0Y2ggKi8KLSAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgYyA9IGNtZ2JyaygpOyAgICAgICAg ICAgICAvKiBHZXQgYnJlYWsgY2hhcmFjdGVyICovCi0gICAgICAgICAgICAgIGdldHZhbCA9IChj ID09ICc6JyB8fCBjID09ICc9Jyk7IC8qIHNlZSBob3cgc3dpdGNoIGVuZGVkICovCi0gICAgICAg ICAgICAgIGlmIChnZXR2YWwgJiYgIShjbXJlc3VsdC5rZmxhZ3MgJiBDTV9BUkcpKSB7Ci0gICAg ICAgICAgICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50 c1xuIik7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgIHogPSBjbXJlc3VsdC5ucmVzdWx0OyAgICAgLyogTnVtZXJpYyByZXN1bHQg PSBzd2l0Y2ggdmFsdWUgKi8KLSAgICAgICAgICAgICAgZGVidWcoRjEwMSwiWFlURUxPUCBzd2l0 Y2giLCIiLHopOwotCi0gICAgICAgICAgICAgIHN3aXRjaCAoeikgeyAgICAgICAgICAgICAgLyog UHJvY2VzcyB0aGUgc3dpdGNoICovCi0gICAgICAgICAgICAgICAgY2FzZSBDS19UTl9DTElFTlQ6 Ci0gICAgICAgICAgICAgICAgICB0bnNlcnZlciA9IDA7Ci0gICAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgICAgICBjYXNlIENLX1ROX1NFUlZFUjoKLSAgICAgICAgICAgICAgICAg IHRuc2VydmVyID0gMTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg ICAgY2FzZSBDS19UTl9FQzoKLSAgICAgICAgICAgICAgICAgIG9wdCA9IFRFTE9QVF9FQ0hPOwot ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDS19UTl9UVDoK LSAgICAgICAgICAgICAgICAgIG9wdCA9IFRFTE9QVF9UVFlQRTsKLSAgICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ0tfVE5fQk06Ci0gICAgICAgICAgICAgICAg ICBvcHQgPSBURUxPUFRfQklOQVJZOwotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgICAgY2FzZSBDS19UTl9FTlY6Ci0gICAgICAgICAgICAgICAgICBvcHQgPSBURUxPUFRf TkVXRU5WSVJPTjsKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNh c2UgQ0tfVE5fTE9DOgotICAgICAgICAgICAgICAgICAgb3B0ID0gVEVMT1BUX1NORExPQzsKLSAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ0tfVE5fQVU6Ci0g ICAgICAgICAgICAgICAgICBvcHQgPSBURUxPUFRfQVVUSEVOVElDQVRJT047Ci0gICAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENLX1ROX0ZYOgotICAgICAgICAg ICAgICAgICAgb3B0ID0gVEVMT1BUX0ZPUldBUkRfWDsKLSAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgIGNhc2UgQ0tfVE5fRU5DOgotICAgICAgICAgICAgICAgICAgb3B0 ID0gVEVMT1BUX0VOQ1JZUFRJT047Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgICAgICBjYXNlIENLX1ROX0lLUzoKLSAgICAgICAgICAgICAgICAgIG9wdCA9IFRFTE9QVF9L RVJNSVQ7Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENL X1ROX1RMUzoKLSAgICAgICAgICAgICAgICAgIG9wdCA9IFRFTE9QVF9TVEFSVF9UTFM7Ci0gICAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENLX1ROX1hEOgotICAg ICAgICAgICAgICAgICAgb3B0ID0gVEVMT1BUX1hESVNQTE9DOwotICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDS19UTl9OQVdTOgotICAgICAgICAgICAgICAg ICAgb3B0ID0gVEVMT1BUX05BV1M7Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgICAgICBjYXNlIENLX1ROX1NHQToKLSAgICAgICAgICAgICAgICAgIG9wdCA9IFRFTE9QVF9T R0E7Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENLX1RO X1BIUjoKLSAgICAgICAgICAgICAgICAgIG9wdCA9IFRFTE9QVF9QUkFHTUFfSEVBUlRCRUFUOwot ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDS19UTl9QU1A6 Ci0gICAgICAgICAgICAgICAgICBvcHQgPSBURUxPUFRfU1NQSV9MT0dPTjsKLSAgICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ0tfVE5fUExHOgotICAgICAgICAg ICAgICAgICAgb3B0ID0gVEVMT1BUX1BSQUdNQV9MT0dPTjsKLSAgICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ0tfVE5fU0FLOgotICAgICAgICAgICAgICAgICAg b3B0ID0gVEVMT1BUX0lCTV9TQUs7Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgICAgICBjYXNlIENLX1ROX0NQQzoKLSAgICAgICAgICAgICAgICAgIG9wdCA9IFRFTE9QVF9D T01QT1JUOwotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBD S19UTl9MT0c6Ci0gICAgICAgICAgICAgICAgICBvcHQgPSBURUxPUFRfTE9HT1VUOwotICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDS19UTl9GTFc6Ci0gICAg ICAgICAgICAgICAgICBvcHQgPSBURUxPUFRfTEZMT1c7Ci0gICAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/ VW5leHBlY3RlZCB2YWx1ZSAtICVkXG4iLHopOwotICAgICAgICAgICAgICAgICAgcmV0dXJuKC05 KTsKLSAgICAgICAgICAgICAgfQotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgICAgaWYgKGNt cmVzdWx0LmZkYmFkZHIgPT0gJm9wKQotICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8q IENPTU1FTlQgKi8KLSAgICAgICAgICB9Ci0gICAgICAgICAgc3dpdGNoIChvcHQpIHsKLSAgICAg ICAgICAgIGNhc2UgVEVMT1BUX0VDSE86ICAgICAgICAgICAvKiBPcHRpb25zIG9ubHkgdGhlIFNl cnZlciBXSUxMICovCi0gICAgICAgICAgICBjYXNlIFRFTE9QVF9GT1JXQVJEX1g6Ci0gICAgICAg ICAgICBjYXNlIFRFTE9QVF9TRU5EX1VSTDoKLSAgICAgICAgICAgIGNhc2UgVEVMT1BUX0lCTV9T QUs6Ci0gICAgICAgICAgICBjYXNlIFRFTE9QVF9MT0dPVVQ6Ci0gICAgICAgICAgICAgIGlmICgo eCA9IGNta2V5KHRubmVndGFiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudG5uZWd0 YWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNpcmVkIHNlcnZlciBzdGF0ZSIs Ci0gICBURUxPUFRfTU9ERSh0bnNlcnZlcj9URUxPUFRfREVGX1NfTUVfTU9ERShvcHQpOlRFTE9Q VF9ERUZfQ19VX01PREUob3B0KSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh4c3Ry aW5nKQotICAgICAgICAgICAgICAgICAgICkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybih4 KTsKLSAgICAgICAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgICAgICAg ICAgcmV0dXJuKHopOwotICAgICAgICAgICAgICBpZiAodG5zZXJ2ZXIpIHsKLSAgICAgICAgICAg ICAgICAgIFRFTE9QVF9ERUZfU19NRV9NT0RFKG9wdCkgPSB4OwotICAgICAgICAgICAgICAgICAg VEVMT1BUX01FX01PREUob3B0KSA9IHg7Ci0gICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg ICAgICAgICAgICBURUxPUFRfREVGX0NfVV9NT0RFKG9wdCkgPSB4OwotICAgICAgICAgICAgICAg ICAgVEVMT1BUX1VfTU9ERShvcHQpID0geDsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBURUxPUFRfVFRZUEU6ICAgICAgICAgIC8qIE9w dGlvbnMgb25seSB0aGUgQ2xpZW50IFdJTEwgKi8KLSAgICAgICAgICAgIGNhc2UgVEVMT1BUX05F V0VOVklST046Ci0gICAgICAgICAgICBjYXNlIFRFTE9QVF9TTkRMT0M6Ci0gICAgICAgICAgICBj YXNlIFRFTE9QVF9BVVRIRU5USUNBVElPTjoKLSAgICAgICAgICAgIGNhc2UgVEVMT1BUX1NUQVJU X1RMUzoKLSAgICAgICAgICAgIGNhc2UgVEVMT1BUX1hESVNQTE9DOgotICAgICAgICAgICAgY2Fz ZSBURUxPUFRfTkFXUzoKLSAgICAgICAgICAgIGNhc2UgVEVMT1BUX0xGTE9XOgotICAgICAgICAg ICAgY2FzZSBURUxPUFRfQ09NUE9SVDoKLSAgICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkodG5u ZWd0YWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG50bm5lZ3RhYiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgImRlc2lyZWQgY2xpZW50IHN0YXRlIiwKLSAgICBURUxPUFRf TU9ERSghdG5zZXJ2ZXI/VEVMT1BUX0RFRl9TX1VfTU9ERShvcHQpOlRFTE9QVF9ERUZfQ19NRV9N T0RFKG9wdCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZykKLSAgICAg ICAgICAgICAgICAgICApIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAg ICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4oeik7 Ci0gICAgICAgICAgICAgIGlmICh0bnNlcnZlcikgewotICAgICAgICAgICAgICAgICAgVEVMT1BU X0RFRl9TX1VfTU9ERShvcHQpID0geDsKLSAgICAgICAgICAgICAgICAgIFRFTE9QVF9VX01PREUo b3B0KSA9IHg7Ci0jaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KLSAgICAgICAgICAgICAgICAgIGlm IChvcHQgPT0gVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKQotICAgICAgICAgICAgICAgICAgICBzbF90 b3B0X2Ffc19zYXZlZCA9IDA7Ci0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSAgICAg ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RF KG9wdCkgPSB4OwotICAgICAgICAgICAgICAgICAgVEVMT1BUX01FX01PREUob3B0KSA9IHg7Ci0j aWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KLSAgICAgICAgICAgICAgICAgIGlmIChvcHQgPT0gVEVM T1BUX0FVVEhFTlRJQ0FUSU9OKQotICAgICAgICAgICAgICAgICAgICBzbF90b3B0X2FfY19zYXZl ZCA9IDA7Ci0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg ICAgaWYgKCh4ID0gY21rZXkodG5uZWd0YWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg IG50bm5lZ3RhYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG5zZXJ2ZXIgPwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzaXJlZCBzZXJ2ZXIgc3RhdGUiIDoKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgImRlc2lyZWQgY2xpZW50IHN0YXRlIiwKLSAgICBURUxP UFRfTU9ERSh0bnNlcnZlcj9URUxPUFRfREVGX1NfTUVfTU9ERShvcHQpOlRFTE9QVF9ERUZfQ19N RV9NT0RFKG9wdCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgICAgKSA8IDApCi0g ICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgICBpZiAoKHkgPSBjbWtleSh0 bm5lZ3RhYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnRubmVndGFiLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAhdG5zZXJ2ZXIgPyAiZGVzaXJlZCBzZXJ2ZXIgc3RhdGUi IDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2lyZWQgY2xpZW50IHN0YXRlIiwK LSAgICBURUxPUFRfTU9ERSghdG5zZXJ2ZXI/VEVMT1BUX0RFRl9TX1VfTU9ERShvcHQpOlRFTE9Q VF9ERUZfQ19VX01PREUob3B0KSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh4c3Ry aW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAp IDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgIGlmICgoeiA9 IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4oeik7Ci0gICAgICAgICAgICAg IGlmICh0bnNlcnZlcikgewotICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9TX01FX01PREUo b3B0KSA9IHg7Ci0gICAgICAgICAgICAgICAgICBURUxPUFRfTUVfTU9ERShvcHQpID0geDsKLSAg ICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfU19VX01PREUob3B0KSA9IHk7Ci0gICAgICAgICAg ICAgICAgICBURUxPUFRfVV9NT0RFKG9wdCkgPSB5OwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAg ICAgICAgICAgICAgICAgIGlmIChvcHQgPT0gVEVMT1BUX0VOQ1JZUFRJT04pCi0gICAgICAgICAg ICAgICAgICAgIHNsX3RvcHRfZV9zX3NhdmVkID0gMDsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9O ICovCi0gICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICBURUxPUFRfREVG X0NfTUVfTU9ERShvcHQpID0geDsKLSAgICAgICAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKG9w dCkgPSB4OwotICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9DX1VfTU9ERShvcHQpID0geTsK LSAgICAgICAgICAgICAgICAgIFRFTE9QVF9VX01PREUob3B0KSA9IHk7Ci0jaWZkZWYgQ0tfRU5D UllQVElPTgotICAgICAgICAgICAgICAgICAgaWYgKG9wdCA9PSBURUxPUFRfRU5DUllQVElPTikK LSAgICAgICAgICAgICAgICAgICAgc2xfdG9wdF9lX2Nfc2F2ZWQgPSAwOwotI2VuZGlmIC8qIENL X0VOQ1JZUFRJT04gKi8KLSAgICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgfQotCi0gICAgICBjYXNlIFhZVEVMOiAgICAgICAg ICAgICAgICAgICAgICAgLyogVEVMTkVUICovCi0gICAgICAgIGlmICgoeiA9IGNta2V5KHRudGFi LG50biwicGFyYW1ldGVyIGZvciBURUxORVQgbmVnb3RpYXRpb25zIiwgIiIsCi0gICAgICAgICAg ICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih6KTsKLSAgICAg ICAgc3dpdGNoICh6KSB7Ci0gICAgICAgICAgY2FzZSBDS19UTl9FQzogICAgICAgICAgICAgICAg LyogRUNITyAqLwotICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkocmx0YWIsbnJsdCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICJpbml0aWFsIFRFTE5FVCBlY2hvaW5nIHN0YXRlIiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICJsb2NhbCIseHhzdHJpbmcpKSA8IDApCi0gICAgICAg ICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0 dXJuKHkpOwotICAgICAgICAgICAgdG5fZHVwbGV4ID0geDsKLSAgICAgICAgICAgIHJldHVybihz dWNjZXNzID0gMSk7Ci0KLSAgICAgICAgICBjYXNlIENLX1ROX1JFOiAgICAgICAgICAgICAgICAv KiBSRU1PVEUtRUNITyAqLwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRvbigmdG5f cmVtX2VjaG8pKTsKLQotICAgICAgICAgIGNhc2UgQ0tfVE5fREI6ICAgICAgICAgICAgICAgIC8q IERFQlVHICovCi0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZ0bl9kZWIpKTsK LQotICAgICAgICAgIGNhc2UgQ0tfVE5fVFQ6ICAgICAgICAgICAgICAgIC8qIFRFUk1JTkFMIFRZ UEUgKi8KLSAgICAgICAgICAgIGlmICgoeSA9IGNtdHh0KCJ0ZXJtaW5hbCB0eXBlIGZvciBURUxO RVQgY29ubmVjdGlvbnMiLCIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJnMseHhzdHJp bmcpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgIGlmICh0bl90 ZXJtKSB7Ci0gICAgICAgICAgICAgICAgZnJlZSh0bl90ZXJtKTsgICAgICAgICAgLyogRnJlZSBh bnkgcHJldmlvdXMgc3RvcmFnZSAqLwotICAgICAgICAgICAgICAgIHRuX3Rlcm0gPSBOVUxMOwot ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHMgPT0gTlVMTCB8fCAqcyA9PSBOVUwpIHsg LyogSWYgbm9uZSBnaXZlbiAqLwotICAgICAgICAgICAgICAgIHRuX3Rlcm0gPSBOVUxMOyAgICAg ICAgIC8qIHJlbW92ZSB0aGUgb3ZlcnJpZGUgc3RyaW5nICovCi0gICAgICAgICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoKHRuX3Rlcm0gPSBtYWxs b2Moc3RybGVuKHMpKzEpKSkgewotICAgICAgICAgICAgICAgIHN0cmNweSh0bl90ZXJtLHMpOwot ICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICAgICAgICB9IGVsc2Ug cmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLQotI2lmZGVmIENLX0ZPUldBUkRfWAotICAgICAgICAgIGNh c2UgQ0tfVE5fRlg6ICAgICAgICAgICAgICAgIC8qIEZPUldBUkQtWCAqLwotICAgICAgICAgICAg aWYgKCh4PWNta2V5KHRuZndkeHRhYixudG5md2R4LCIiLCJ4YXV0aG9yaXR5LWZpbGUiLHh4c3Ry aW5nKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICBzd2l0Y2gg KHgpIHsKLSAgICAgICAgICAgICAgY2FzZSAwOiB7ICAgICAgICAgICAgICAgICAvKiBYYXV0aG9y aXR5LUZpbGUgKi8KLSAgICAgICAgICAgICAgICAgIHggPSBjbWlmaSgiRnVsbCBwYXRoIG9mIC5Y YXV0aG9yaXR5IGZpbGUiLCIiLCZzLCZ5LHh4c3RyaW5nKTsKLSAgICAgICAgICAgICAgICAgIGlm ICh4IDwgMCAmJiB4ICE9IC0zKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAg ICAgICAgICAgICAgICBtYWtlc3RyKCZ0bl9md2R4X3hhdXRob3JpdHkscyk7Ci0gICAgICAgICAg ICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgIGNhc2UgMTogeyAgICAgICAgICAgICAgICAgLyogTm8tRW5jcnlwdGlvbiAqLwotICAgICAg ICAgICAgICAgICAgZXh0ZXJuIGludCBmd2R4X25vX2VuY3J5cHQ7Ci0gICAgICAgICAgICAgICAg ICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZmd2R4X25vX2VuY3J5cHQpKTsKLSAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSNl bmRpZiAvKiBDS19GT1JXQVJEX1ggKi8KLQotICAgICAgICAgIGNhc2UgQ0tfVE5fTkw6ICAgICAg ICAgICAgICAgIC8qIFRFTE5FVCBORVdMSU5FLU1PREUgKi8KLSAgICAgICAgICAgIGlmICgoeCA9 IGNta2V5KHRuX25sbXRhYixudG5fbmxtLCIiLCJudnQiLHh4c3RyaW5nKSkgPCAwKQotICAgICAg ICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICBpZiAoeCA9PSBUTl9OTF9CSU4pIHsKLSAg ICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkodG5sbXRhYixudG5sbSwiIiwicmF3Iix4eHN0cmlu ZykpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICAgIGlmICgo eSA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAg ICAgIHRuX2JfbmxtID0geDsKLSAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAg ICAgICAgICB9IGVsc2UgaWYgKHggPT0gVE5fTkxfTlZUKSB7Ci0gICAgICAgICAgICAgIGlmICgo eCA9IGNta2V5KHRubG10YWIsbnRubG0sIiIsIm9uIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAg ICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkK LSAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgIHRuX25sbSA9IHg7Ci0g ICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAg ICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVy bih5KTsKLSAgICAgICAgICAgICAgdG5fbmxtID0geDsKLSAgICAgICAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBDS19UTl9YRjogICAgICAg ICAgICAgICAgICAvKiBCSU5BUlktVFJBTlNGRVItTU9ERSAqLwotICAgICAgICAgICAgaWYgKCh6 ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeik7Ci0gICAg ICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgICAgIHRu X2JfeGZlciA9IHo7Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0gICAgICAg IGNhc2UgQ0tfVE5fTkU6ICAgICAgICAgICAgICAgICAgLyogTk8tRU5DUllQVC1EVVJJTkctWEZF UiAqLwotICAgICAgICAgICAgaWYgKCh6ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5n KSkgPCAwKSByZXR1cm4oeik7Ci0gICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJl dHVybih5KTsKLSNpZmRlZiBDS19BUEMKLSAgICAgICAgICAgIC8qIERvbid0IGxldCB0aGlzIGJl IHNldCByZW1vdGVseSAqLwotICAgICAgICAgICAgaWYgKGFwY2FjdGl2ZSA9PSBBUENfTE9DQUwg fHwKLSAgICAgICAgICAgICAgICAoYXBjYWN0aXZlID09IEFQQ19SRU1PVEUgJiYgIShhcGNzdGF0 dXMgJiBBUENfVU5DSCkpKQotICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotI2Vu ZGlmIC8qIENLX0FQQyAqLwotICAgICAgICAgICAgdG5fbm9fZW5jcnlwdF94ZmVyID0gejsKLSAg ICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0KLSAgICAgICAgICBjYXNlIENLX1ROX0JN OiAgICAgICAgICAgICAgICAvKiBCSU5BUlktTU9ERSAqLwotICAgICAgICAgICAgaWYgKCh4ID0g Y21rZXkodG5uZWd0YWIsbnRubmVndGFiLCIiLCJyZWZ1c2VkIix4eHN0cmluZykpIDwgMCkKLSAg ICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAw KQotICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICBURUxPUFRfREVGX1NfTUVf TU9ERShURUxPUFRfQklOQVJZKSA9IHg7Ci0gICAgICAgICAgICBURUxPUFRfREVGX1NfVV9NT0RF KFRFTE9QVF9CSU5BUlkpID0geDsKLSAgICAgICAgICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRF TE9QVF9CSU5BUlkpID0geDsKLSAgICAgICAgICAgIFRFTE9QVF9ERUZfQ19VX01PREUoVEVMT1BU X0JJTkFSWSkgPSB4OwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQotI2lmZGVm IElLU19PUFRJT04KLSAgICAgICAgICBjYXNlIENLX1ROX0lLUzogICAgICAgICAgICAgICAvKiBL RVJNSVQgKi8KLSAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KHRubmVndGFiLG50bm5lZ3RhYiwi RE8iLCJhY2NlcHQiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0g ICAgICAgICAgICBpZiAoKHkgPSBjbWtleSh0bm5lZ3RhYixudG5uZWd0YWIsIldJTEwiLCJhY2Nl cHQiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAg ICBpZiAoKHogPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih6KTsKLSAgICAg ICAgICAgIFRFTE9QVF9ERUZfU19NRV9NT0RFKFRFTE9QVF9LRVJNSVQpID0geTsKLSAgICAgICAg ICAgIFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX0tFUk1JVCkgPSB4OwotICAgICAgICAgICAg VEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX0tFUk1JVCkgPSB5OwotICAgICAgICAgICAgVEVM T1BUX0RFRl9DX1VfTU9ERShURUxPUFRfS0VSTUlUKSA9IHg7Ci0gICAgICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDEpOwotI2VuZGlmIC8qIElLU19PUFRJT04gKi8KLQotI2lmZGVmIENLX1NTTAot ICAgICAgICAgIGNhc2UgQ0tfVE5fVExTOiAgICAgICAgICAgICAgIC8qIFNUQVJUX1RMUyAqLwot ICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkodG5uZWd0YWIsbnRubmVndGFiLCJtZSIsImFjY2Vw dCIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAg IGlmICgoeSA9IGNta2V5KHRubmVndGFiLG50bm5lZ3RhYiwidSIsImFjY2VwdCIseHhzdHJpbmcp KSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgIGlmICgoeiA9IGNt Y2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHopOwotICAgICAgICAgICAgVEVMT1BU X0RFRl9TX01FX01PREUoVEVMT1BUX1NUQVJUX1RMUykgPSB4OwotICAgICAgICAgICAgVEVMT1BU X0RFRl9TX1VfTU9ERShURUxPUFRfU1RBUlRfVExTKSA9IHk7Ci0gICAgICAgICAgICBURUxPUFRf REVGX0NfTUVfTU9ERShURUxPUFRfU1RBUlRfVExTKSA9IHg7Ci0gICAgICAgICAgICBURUxPUFRf REVGX0NfVV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpID0geTsKLSAgICAgICAgICAgIHJldHVybihz dWNjZXNzID0gMSk7Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0KLSNpZmRlZiBDS19OQVdTCi0gICAg ICAgICAgY2FzZSBDS19UTl9OQVdTOiAgICAgICAgICAgICAgLyogTkFXUyAqLwotICAgICAgICAg ICAgaWYgKCh4ID0gY21rZXkodG5uZWd0YWIsbnRubmVndGFiLCJtZSIsImFjY2VwdCIseHhzdHJp bmcpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgIGlmICgoeSA9 IGNta2V5KHRubmVndGFiLG50bm5lZ3RhYiwidSIsImFjY2VwdCIseHhzdHJpbmcpKSA8IDApCi0g ICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwg MCkKLSAgICAgICAgICAgICAgcmV0dXJuKHopOwotICAgICAgICAgICAgVEVMT1BUX0RFRl9TX01F X01PREUoVEVMT1BUX05BV1MpID0geDsKLSAgICAgICAgICAgIFRFTE9QVF9ERUZfU19VX01PREUo VEVMT1BUX05BV1MpID0geTsKLSAgICAgICAgICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9Q VF9OQVdTKSA9IHg7Ci0gICAgICAgICAgICBURUxPUFRfREVGX0NfVV9NT0RFKFRFTE9QVF9OQVdT KSA9IHk7Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotI2VuZGlmIC8qIENLX05B V1MgKi8KLQotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0gICAgICAgICAgY2FzZSBDS19UTl9B VTogICAgICAgICAgICAgICAgLyogQVVUSEVOVElDQVRJT04gKi8KLSAgICAgICAgICAgIGlmICgo eCA9IGNta2V5KHRuYXV0aHRhYixudG5hdXRoLCIiLCIiLHh4c3RyaW5nKSkgPCAwKQotICAgICAg ICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICBpZiAoeCA9PSBUTl9BVV9GV0QpIHsKLSAg ICAgICAgICAgICAgICBleHRlcm4gaW50IGZvcndhcmRfZmxhZzsKLSAgICAgICAgICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZmb3J3YXJkX2ZsYWcpKTsKLSAgICAgICAgICAgIH0gZWxz ZSBpZiAoeCA9PSBUTl9BVV9UWVApIHsKLSAgICAgICAgICAgICAgICBleHRlcm4gaW50IGF1dGhf dHlwZV91c2VyW107Ci0gICAgICAgICAgICAgICAgZXh0ZXJuIGludCBzbF9hdXRoX3R5cGVfdXNl cltdOwotICAgICAgICAgICAgICAgIGV4dGVybiBpbnQgc2xfYXV0aF9zYXZlZDsKLSAgICAgICAg ICAgICAgICBpbnQgaSwgaiwgYXR5cGVzW0FVVEhUWVBMU1RTWl07Ci0KLSAgICAgICAgICAgICAg ICBmb3IgKGkgPSAwOyBpIDwgQVVUSFRZUExTVFNaOyBpKyspIHsKLSAgICAgICAgICAgICAgICAg ICAgaWYgKCh5ID0gY21rZXkoYXV0eXB0YWIsbmF1dHlwLCIiLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpID09IDAgPyAiYXV0b21hdGljIiA6ICIiICwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgIGlmICh5ID09IC0zKQotICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgKHkgPT0gQVVUSFRZUEVfQVVUTyB8 fCB5ID09IEFVVEhUWVBFX05VTEwpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYo Ci0gICAgICAgICAgICAgICAgICAgICAgICAiXHJcbj9DaG9pY2UgbWF5IG9ubHkgYmUgdXNlZCBp biBmaXJzdCBwb3NpdGlvbi5cclxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4o LTkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaiA9 IDA7IGogPCBpOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdHlwZXNbal0g PT0geSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXHJcbj9DaG9pY2Ug aGFzIGFscmVhZHkgYmVlbiB1c2VkLlxyXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGF0eXBlc1tpXSA9IHk7Ci0gICAgICAgICAgICAg ICAgICAgIGlmICh5ID09IEFVVEhUWVBFX05VTEwgfHwgeSA9PSBBVVRIVFlQRV9BVVRPKSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICBpZiAoaSA8IEFVVEhUWVBMU1RTWikKLSAgICAgICAgICAgICAgICAgIGF0eXBlc1tpXSA9 IEFVVEhUWVBFX05VTEw7Ci0gICAgICAgICAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKQot ICAgICAgICAgICAgICAgICAgcmV0dXJuKHopOwotICAgICAgICAgICAgICAgIHNsX2F1dGhfc2F2 ZWQgPSAwOwotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBBVVRIVFlQTFNUU1o7IGkr KykgewotICAgICAgICAgICAgICAgICAgICBhdXRoX3R5cGVfdXNlcltpXSA9IGF0eXBlc1tpXTsK LSAgICAgICAgICAgICAgICAgICAgc2xfYXV0aF90eXBlX3VzZXJbaV0gPSAwOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoeCA9PSBUTl9BVV9IT1cpIHsKLSAgICAg ICAgICAgICAgICBpZiAoKHkgPSBjbWtleShhdWhvd3RhYixuYXVob3csIiIsImFueSIseHhzdHJp bmcpKSA8IDApCi0gICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgICAg aWYgKCh6ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgICAgICAgICAgcmV0dXJuKHopOwotICAg ICAgICAgICAgICAgIHRuX2F1dGhfaG93ID0geTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoeCA9 PSBUTl9BVV9FTkMpIHsKLSAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbWtleShhdWVuY3RhYixu YXVlbmMsIiIsImVuY3J5cHQiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgICAgcmV0 dXJuKHkpOwotICAgICAgICAgICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAg ICAgICAgICAgIHJldHVybih6KTsKLSAgICAgICAgICAgICAgICB0bl9hdXRoX2VuYyA9IHk7Ci0g ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwg MCkKLSAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgICAgICBURUxPUFRf REVGX0NfTUVfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID0geDsKLSAgICAgICAgICAgICAg ICBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9BVVRIRU5USUNBVElPTikgPSB4OwotICAgICAg ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSNlbmRpZiAvKiBDS19B VVRIRU5USUNBVElPTiAqLwotCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICAgIGNhc2Ug Q0tfVE5fRU5DOiB7ICAgICAgICAgICAgIC8qIEVOQ1JZUFRJT04gKi8KLSAgICAgICAgICAgICAg aW50IGMsIHRtcCA9IC0xOwotICAgICAgICAgICAgICBpbnQgZ2V0dmFsID0gMDsKLSAgICAgICAg ICAgICAgc3RhdGljIHN0cnVjdCBrZXl0YWIgKiB0bmV0YmwgPSBOVUxMOwotICAgICAgICAgICAg ICBzdGF0aWMgaW50IG50bmV0YmwgPSAwOwotCi0gICAgICAgICAgICAgIGlmICgoeSA9IGNta2V5 KHRuZW5jdGFiLG50bmVuYywiIiwiIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICBy ZXR1cm4oeSk7Ci0gICAgICAgICAgICAgIHN3aXRjaCAoeSkgewotICAgICAgICAgICAgICAgIGNh c2UgVE5fRU5fVFlQOgotICAgICAgICAgICAgICAgICAgeCA9IGNrX2dldF9jcnlwdF90YWJsZSgm dG5ldGJsLCZudG5ldGJsKTsKLSAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImNrX2dldF9j cnlwdF90YWJsZSB4IiwiIix4KTsKLSAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImNrX2dl dF9jcnlwdF90YWJsZSBuIiwiIixudG5ldGJsKTsKLSAgICAgICAgICAgICAgICAgIGlmICh4IDwg MSB8fCAhdG5ldGJsIHx8IG50bmV0YmwgPCAxKSAvKiBEaWRuJ3QgZ2V0IGl0ICovCi0gICAgICAg ICAgICAgICAgICAgIHggPSAwOwotICAgICAgICAgICAgICAgICAgaWYgKCF4KSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCI/T29wcywgdHlwZXMgbm90IGxvYWRlZFxuIik7Ci0gICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KHRuZXRibCxudG5ldGJsLCJ0eXBlIG9mIGVuY3J5 cHRpb24iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF1dG9tYXRpYyIseHhz dHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAg ICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu KHopOwotICAgICAgICAgICAgICAgICAgY3hfdHlwZSA9IHg7Ci0gICAgICAgICAgICAgICAgICBz bF9jeF90eXBlID0gMDsKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg IGNhc2UgVE5fRU5fU1RBUlQ6Ci0gICAgICAgICAgICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8 IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybih6KTsKLSNpZmRlZiBDS19BUEMKLSAgICAg ICAgICAgICAgICAgIC8qIERvbid0IGxldCB0aGlzIGJlIHNldCByZW1vdGVseSAqLwotICAgICAg ICAgICAgICAgICAgaWYgKGFwY2FjdGl2ZSA9PSBBUENfTE9DQUwgfHwKLSAgICAgICAgICAgICAg ICAgICAgICBhcGNhY3RpdmUgPT0gQVBDX1JFTU9URSAmJiAhKGFwY3N0YXR1cyAmIEFQQ19VTkNI KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSNlbmRpZiAvKiBD S19BUEMgKi8KLSAgICAgICAgICAgICAgICAgIGNrX3RuX2VuY19zdGFydCgpOwotICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBUTl9FTl9TVE9QOgotICAgICAg ICAgICAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgICAgICAgICAgICBy ZXR1cm4oeik7Ci0jaWZkZWYgQ0tfQVBDCi0gICAgICAgICAgICAgICAgICAvKiBEb24ndCBsZXQg dGhpcyBiZSBzZXQgcmVtb3RlbHkgKi8KLSAgICAgICAgICAgICAgICAgIGlmIChhcGNhY3RpdmUg PT0gQVBDX0xPQ0FMIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgYXBjYWN0aXZlID09IEFQQ19S RU1PVEUgJiYgIShhcGNzdGF0dXMgJiBBUENfVU5DSCkpCi0gICAgICAgICAgICAgICAgICAgIHJl dHVybihzdWNjZXNzID0gMCk7Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0gICAgICAgICAgICAgICAg ICBja190bl9lbmNfc3RvcCgpOwotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkK LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHopOwotICAgICAgICAgICAgICAgICAgVEVMT1BU X0RFRl9DX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0geTsKLSAgICAgICAgICAgICAgICAg IFRFTE9QVF9ERUZfQ19VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0geTsKLSAgICAgICAgICAg ICAgICAgIFRFTE9QVF9ERUZfU19NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IHk7Ci0gICAg ICAgICAgICAgICAgICBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IHk7 Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAg ICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotCi0gICAgICAgICAgY2FzZSBD S19UTl9CVUc6ICAgICAgICAgICAgICAgLyogQlVHICovCi0gICAgICAgICAgICBpZiAoKHggPSBj bWtleSh0bmJ1Z3RhYiw0LCIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImJpbmFyeS1t ZS1tZWFucy11LXRvbyIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih4KTsK LSAgICAgICAgICAgIGlmICgoeiA9IGNta2V5KG9ub2ZmLDIsIiIsIm9mZiIseHhzdHJpbmcpKSA8 IDApIHJldHVybih6KTsKLSAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJu KHkpOwotICAgICAgICAgICAgc3dpdGNoICh4KSB7Ci0gICAgICAgICAgICAgIGNhc2UgMDoKLSAg ICAgICAgICAgICAgICB0bl9iX21ldSA9IHo7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICB0bl9iX3VtZSA9IHo7Ci0gICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICB0 bl9pbmZpbml0ZSA9IHo7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh c2UgMzoKLSAgICAgICAgICAgICAgICB0bl9zYl9idWcgPSB6OwotICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgdG5fYXV0aF9rcmI1 X2Rlc19idWcgPSB6OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg ICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQotI2lmZGVmIENLX0VOVklST05NRU5UCi0g ICAgICAgICAgY2FzZSBDS19UTl9YRDogICAgICAgICAgICAgICAgLyogWERJU1BMT0MgKi8KLSAg ICAgICAgICAgIGlmICgoeCA9IGNta2V5KHRubmVndGFiLG50bm5lZ3RhYiwibWUiLCJhY2NlcHQi LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICBp ZiAoKHkgPSBjbWtleSh0bm5lZ3RhYixudG5uZWd0YWIsInUiLCJhY2NlcHQiLHh4c3RyaW5nKSkg PCAwKQotICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICBpZiAoKHogPSBjbWNm bSgpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih6KTsKLSAgICAgICAgICAgIFRFTE9QVF9E RUZfU19NRV9NT0RFKFRFTE9QVF9YRElTUExPQykgPSB4OwotICAgICAgICAgICAgVEVMT1BUX0RF Rl9TX1VfTU9ERShURUxPUFRfWERJU1BMT0MpID0geTsKLSAgICAgICAgICAgIFRFTE9QVF9ERUZf Q19NRV9NT0RFKFRFTE9QVF9YRElTUExPQykgPSB4OwotICAgICAgICAgICAgVEVMT1BUX0RFRl9D X1VfTU9ERShURUxPUFRfWERJU1BMT0MpID0geTsKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNz ID0gMSk7Ci0KLSAgICAgICAgICBjYXNlIENLX1ROX0VOVjogewotICAgICAgICAgICAgICBjaGFy ICogbXNnID0gInZhbHVlIG9mIHRlbG5ldCBlbnZpcm9ubWVudCB2YXJpYWJsZSI7Ci0gICAgICAg ICAgICAgIGV4dGVybiBpbnQgdG5fZW52X2ZsZzsKLSAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIg dG5fZW52X2FjY3RbXSwgdG5fZW52X2Rpc3BbXSwgdG5fZW52X2pvYltdLAotICAgICAgICAgICAg ICB0bl9lbnZfcHJudFtdLCB0bl9lbnZfc3lzW107Ci0gICAgICAgICAgICAgIGV4dGVybiBjaGFy ICogdG5fbG9jOwotICAgICAgICAgICAgICBpZiAoKHggPSBjbWtleSh0bmVudnRhYixudG5lbnYs IiIsIiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAg ICAgICAgICBpZiAoeCA9PSBUTl9FTlZfVVZBUikgeyAgIC8qIFVzZXIgdmFyaWFibGVzICovCi0g ICAgICAgICAgICAgICAgICBjaGFyICogdXZhcj1OVUxMOwotICAgICAgICAgICAgICAgICAgY2hh ciAqIHV2YWw9TlVMTDsKLSAgICAgICAgICAgICAgICAgIGNoYXIgKiBlbnY7Ci0gICAgICAgICAg ICAgICAgICBleHRlcm4gY2hhciAqIHRuX2Vudl91c2VydmFyWzhdWzJdOwotCi0gICAgICAgICAg ICAgICAgICAvKiBHZXQgdGhlIHVzZXIgdmFyaWFibGUgbmFtZSAqLwotICAgICAgICAgICAgICAg ICAgaWYgKCh4ID0gY21mbGQoIk5hbWUgb2YgRW52aXJvbm1lbnQgVmFyaWFibGUiLCIiLCZzLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDApCi0gICAgICAg ICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnV2YXIs cyk7Ci0KLSAgICAgICAgICAgICAgICAgIGVudiA9IGdldGVudih1dmFyKTsKLSAgICAgICAgICAg ICAgICAgIGlmICghZW52KSBlbnYgPSAiIjsKLQotICAgICAgICAgICAgICAgICAgaWYgKCh4ID0g Y210eHQoIlZhbHVlIG9mIEVudmlyb25tZW50IFZhcmlhYmxlIixlbnYsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmcyx4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgICAgICAgaWYgKCpzKQotICAgICAgICAgICAgICAg ICAgICBtYWtlc3RyKCZ1dmFsLHMpOwotCi0gICAgICAgICAgICAgICAgICAvKiBOb3cgdGhhdCB3 ZSBoYXZlIHRoZSB2YXJpYWJsZSBhbmQgcGVyaGFwcyBhIHZhbHVlICovCi0gICAgICAgICAgICAg ICAgICAvKiB0aGVyZSBhcmUgdGhyZWUgcG9zc2liaWxpdGllczogKDEpIG5ldyB2YXJpYWJsZSAg ICovCi0gICAgICAgICAgICAgICAgICAvKiBhbmQgYXNzb2NpYXRlZCB2YWx1ZTsgKDIpIHZhcmlh YmxlIGFscmVhZHkgZXhpc3RzICovCi0gICAgICAgICAgICAgICAgICAvKiBidXQgd2UgaGF2ZSBh IG5ldyB2YWx1ZTsgKDMpIHZhcmlhYmxlIGFscmVhZHkgICAgICovCi0gICAgICAgICAgICAgICAg ICAvKiBleGlzdHMgYnV0IG5vIG5ldyB2YWx1ZSB0aGVyZWZvcmUgdGhlIHVzZXIgd2FudHMgICov Ci0gICAgICAgICAgICAgICAgICAvKiB0byBjbGVhciB2YXJpYWJsZS4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgICAgICAgIC8qIFRyeSB0byBmaW5kIGFu IGV4aXN0aW5nIHZhcmlhYmxlICovCi0gICAgICAgICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwg ODsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgaWYgKCFja3N0cmNtcCh0bl9lbnZfdXNl cnZhclt4XVswXSx1dmFyLC0xLDApKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1 dmFsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHRuX2Vudl91c2VydmFy W3hdWzFdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRuX2Vudl91c2VydmFyW3hd WzFdID0gdXZhbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUodXZhcik7Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAg ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZnJlZSh0bl9lbnZfdXNlcnZhclt4XVswXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0bl9lbnZfdXNlcnZhclt4XVswXSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmcmVlKHRuX2Vudl91c2VydmFyW3hdWzFdKTsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRuX2Vudl91c2VydmFyW3hdWzFdID0gTlVMTDsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGZyZWUodXZhcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg ICAvKiBDb3VsZG4ndCBmaW5kIG9uZTsgbG9vayBmb3IgZW1wdHkgbG9jYXRpb24gdG8gaW5zZXJ0 ICovCi0gICAgICAgICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgODsgeCsrKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgaWYgKCF0bl9lbnZfdXNlcnZhclt4XVswXSkgewotICAgICAgICAgICAg ICAgICAgICAgICAgICB0bl9lbnZfdXNlcnZhclt4XVswXSA9IHV2YXI7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgIHRuX2Vudl91c2VydmFyW3hdWzFdID0gdXZhbDsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgICAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwg bm8gc3BhY2UgZm9yIHZhcmlhYmxlLlxuIik7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDApOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGlmICh4ID09IFROX0VO Vl9PRkYgfHwgeCA9PSBUTl9FTlZfT04pIHsKLSAgICAgICAgICAgICAgICAgIGlmICgoeSA9IGNt Y2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotI2lmZGVmIElLU0QKLSAgICAgICAgICAgICAgICAgIGlm IChpbnNlcnZlcikgewotICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBjb21t YW5kIGRpc2FibGVkLlxyXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2Vz cyA9IDApOwotICAgICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgICAg ICAgICAgICAgIHRuX2Vudl9mbGcgPSB4ID09IFROX0VOVl9PRkYgPyAwIDogMTsKLSAgICAgICAg ICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAg ICAgICAgICAvKiBOb3QgT04vT0ZGIC0gR2V0IHRoZSB2YWx1ZSAqLwotICAgICAgICAgICAgICB6 ID0gY21kZ3F1bygpOwotICAgICAgICAgICAgICBjbWRzcXVvKDApOwotICAgICAgICAgICAgICBp ZiAoKHkgPSBjbXR4dChtc2csICIiLCAmcywgeHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAgICAg ICAgICAgIGNtZHNxdW8oeik7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgY21kc3F1byh6KTsKLSNpZmRlZiBJS1NECi0gICAgICAg ICAgICAgIGlmIChpbnNlcnZlcikKLSAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDAp OwotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgICAgICAgICAgaWYgKChpbnQpc3RybGVuKHMpID4g NjMpIHsKLSAgICAgICAgICAgICAgICAgIHByaW50ZigiU29ycnksIHRvbyBsb25nXG4iKTsKLSAg ICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgc3dpdGNoICh4KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBUTl9FTlZfVVNSOgotICAgICAg ICAgICAgICAgICAgY2tzdHJuY3B5KHVpZGJ1ZixzLFVJREJVRkxFTik7Ci0gICAgICAgICAgICAg ICAgICBzbF91aWRfc2F2ZWQgPSAwOwotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgICAgY2FzZSBUTl9FTlZfQUNDVDoKLSAgICAgICAgICAgICAgICAgIGNrc3RybmNweSh0 bl9lbnZfYWNjdCxzLDY0KTsKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICAgIGNhc2UgVE5fRU5WX0RJU1A6Ci0gICAgICAgICAgICAgICAgICBja3N0cm5jcHkodG5fZW52 X2Rpc3Ascyw2NCk7Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBj YXNlIFROX0VOVl9KT0I6Ci0gICAgICAgICAgICAgICAgICBja3N0cm5jcHkodG5fZW52X2pvYixz LDY0KTsKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgVE5f RU5WX1BSTlQ6Ci0gICAgICAgICAgICAgICAgICBja3N0cm5jcHkodG5fZW52X3BybnQscyw2NCk7 Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFROX0VOVl9T WVM6Ci0gICAgICAgICAgICAgICAgICBja3N0cm5jcHkodG5fZW52X3N5cyxzLDY0KTsKLSAgICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgVE5fRU5WX0xPQzoKLSAg ICAgICAgICAgICAgICAgIGlmICghKnMpIHMgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgbWFr ZXN0cigmdG5fbG9jLHMpOwotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg ICAgY2FzZSBUTl9FTlZfVVZBUjoKLSAgICAgICAgICAgICAgICAgIHByaW50ZigiXG4/Tm90IHll dCBpbXBsZW1lbnRlZFxuIik7Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICAgIH0KLSNl bmRpZiAvKiBDS19FTlZJUk9OTUVOVCAqLwotCi0jaWZkZWYgQ0tfU05ETE9DCi0gICAgICAgICAg Y2FzZSBDS19UTl9MT0M6IHsgICAgICAgICAgICAgLyogTE9DQVRJT04gKi8KLSAgICAgICAgICAg ICAgZXh0ZXJuIGNoYXIgKiB0bl9sb2M7Ci0gICAgICAgICAgICAgIGlmICgoeSA9IGNtdHh0KCJM b2NhdGlvbiBzdHJpbmciLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgIHJl dHVybih5KTsKLSAgICAgICAgICAgICAgaWYgKCEqcykgcyA9IE5VTEw7Ci0gICAgICAgICAgICAg IG1ha2VzdHIoJnRuX2xvYyxzKTsKLSAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsK LSAgICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfU05ETE9DICovCi0gICAgICAgICAgY2FzZSBDS19U Tl9TRlU6ICAgICAgICAgICAgICAgLyogTWljcm9zb2Z0IFNGVSBjb21wYXRpYmlsaXR5ICovCi0g ICAgICAgICAgICBpZiAoKHogPSBjbWtleShvbm9mZiwyLCIiLCJvbiIseHhzdHJpbmcpKSA8IDAp IHJldHVybih6KTsKLSAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkp OwotICAgICAgICAgICAgdG5fc2Z1ID0gejsKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0g MSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgQ0tfVE5fV0FJVDogICAg ICAgICAgICAgIC8qIFdBSVQtRk9SLU5FR09USUFUSU9OUyAqLwotICAgICAgICAgICAgaWYgKCh6 ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeik7Ci0gICAg ICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSNpZmRlZiBJS1NECi0g ICAgICAgICAgICBpZiAoaW5zZXJ2ZXIgJiYKLSNpZmRlZiBJS1NEQ09ORgotICAgICAgICAgICAg ICAgIGlrc2RjZgotI2Vsc2UKLSAgICAgICAgICAgICAgICAxCi0jZW5kaWYgLyogSUtTRENPTkYg Ki8KLSAgICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwg Y29tbWFuZCBkaXNhYmxlZC5cclxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3Mg PSAwKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAgICAgICB0bl93 YWl0X2ZsZyA9IHo7Ci0gICAgICAgICAgICBzbF90bl9zYXZlZCA9IDA7Ci0gICAgICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0gICAgICAgICAgY2FzZSBDS19UTl9ETDogICAgICAgICAg ICAgICAgLyogREVMQVkgU1VCTkVHT1RJQVRJT05TICovCi0gICAgICAgICAgICBpZiAoKHogPSBj bWtleShvbm9mZiwyLCIiLCJvbiIseHhzdHJpbmcpKSA8IDApIHJldHVybih6KTsKLSAgICAgICAg ICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotI2lmZGVmIElLU0QKLSAgICAg ICAgICAgIGlmIChpbnNlcnZlciAmJgotI2lmZGVmIElLU0RDT05GCi0gICAgICAgICAgICAgICAg aWtzZGNmCi0jZWxzZQotICAgICAgICAgICAgICAgIDEKLSNlbmRpZiAvKiBJS1NEQ09ORiAqLwot ICAgICAgICAgICAgICAgICkgewotICAgICAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBjb21t YW5kIGRpc2FibGVkLlxyXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDAp OwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgICAgICAgIHRuX2RlbGF5 X3NiID0gejsKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0KLSAgICAgICAgICBj YXNlIENLX1ROX1BVSUQ6IHsgICAgICAgICAgICAvKiBQUk9NUFQtRk9SLVVTRVJJRCAqLwotICAg ICAgICAgICAgICBpbnQgaSxsZW47Ci0gICAgICAgICAgICAgIGlmICgoeSA9IGNtdHh0KCJQcm9t cHQgc3RyaW5nIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4o eSk7Ci0JICAgICAgcyA9IGJyc3RyaXAocyk7Ci0gICAgICAgICAgICAgIC8qIHdlIG11c3QgY2hl Y2sgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyAlIGZpZWxkcyAqLwotICAgICAgICAgICAgICBs ZW4gPSBzdHJsZW4ocyk7Ci0gICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykg ewotICAgICAgICAgICAgICAgICAgaWYgKHNbaV0gPT0gJyUnKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgaWYgKHNbaSsxXSAhPSAnJScpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHJp bnRmKCIlJSBmaWVsZHMgYXJlIG5vdCB1c2VkIGluIHRoaXMgY29tbWFuZC5cbiIpOwotICAgICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgbWFrZXN0cigmdG5fcHJfdWlkLHMpOwotICAgICAgICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICAgIH0KLSAgICAgICAgICBkZWZhdWx0 OgotICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBU TkNPREUgKi8KLQotICAgIHN3aXRjaCAoeHgpIHsKLSNpZm5kZWYgTk9TUEwKLSAgICAgIGNhc2Ug WFlDT1VOOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgQ09VTlQgKi8KLSAgICAgICAgeCA9 IGNtbnVtKCJQb3NpdGl2ZSBudW1iZXIiLCIwIiwxMCwmeix4eHN0cmluZyk7Ci0gICAgICAgIGlm ICh4IDwgMCkgcmV0dXJuKHgpOwotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVy bih4KTsKLSAgICAgICAgaWYgKHogPCAwKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9BIHBvc2l0 aXZlIG51bWJlciwgcGxlYXNlXG4iKTsKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAg fQotICAgICAgICBkZWJ1ZyhGMTAxLCJYWUNPVU46IHoiLCIiLHopOwotICAgICAgICByZXR1cm4o c3VjY2VzcyA9IHNldG51bSgmY291bnRbY21kbHZsXSx6LDAsMTAwMDApKTsKLSNlbmRpZiAvKiBO T1NQTCAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgICBjYXNlIFhZQ0FTRToKLSAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSBzZXRvbigmaW5wY2FzW2NtZGx2bF0pKTsKLSNlbmRpZiAvKiBOT1NQTCAq LwotCi0gICAgICBjYXNlIFhZQ01EOiAgICAgICAgICAgICAgICAgICAgICAgLyogQ09NTUFORCAu Li4gKi8KLSAgICAgICAgaWYgKCh5ID0gY21rZXkoc2NtZHRhYixuYnl0dCwiIiwiIix4eHN0cmlu ZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgIHN3aXRjaCAoeSkgewotICAg ICAgICAgIGNhc2UgU0NNRF9DQlI6Ci0gICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDAp Ci0gICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgIGNvbmNiKChjaGFyKWVzY2Fw ZSk7Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0gICAgICAgICAgY2FzZSBT Q01EX0JTWjoKLSAgICAgICAgICAgIGlmICgoeSA9IGNtbnVtKCJieXRlc2l6ZSBmb3IgY29tbWFu ZCBjaGFyYWN0ZXJzLCA3IG9yIDgiLCI3IiwxMCwmeCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgIHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAg ICBpZiAoeCAhPSA3ICYmIHggIT0gOCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiXG4/VGhl IGNob2ljZXMgYXJlIDcgYW5kIDhcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNz ID0gMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDAp IHJldHVybih5KTsKLSAgICAgICAgICAgIGlmICh4ID09IDcpIGNtZG1zayA9IDAxNzc7Ci0gICAg ICAgICAgICBlbHNlIGlmICh4ID09IDgpIGNtZG1zayA9IDAzNzc7Ci0gICAgICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IDEpOwotI2lmZGVmIENLX1JFQ0FMTAotICAgICAgICAgIGNhc2UgU0NNRF9S Q0w6Ci0gICAgICAgICAgICBpZiAoKHkgPSBjbW51bSgibWF4aW11bSBudW1iZXIgb2YgY29tbWFu ZHMgaW4gcmVjYWxsIGJ1ZmZlciIsIjEwIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDEw LCZ4LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAg ICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgICAgIHJldHVybihz dWNjZXNzID0gY21yaW5pKHgpKTsKLSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLSNpZmRlZiBDS19S RUNBTEwKLSAgICAgICAgICBjYXNlIFNDTURfUlRSOgotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSBzZXRvbigmY21fcmV0cnkpKTsKLSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLSAgICAgICAg ICBjYXNlIFNDTURfTU9SOiAgICAgICAgICAgICAgICAvKiBNb3JlLXByb21wdGluZyAqLwotICAg ICAgICAgICAgc3VjY2VzcyA9IHNldG9uKCZ4YXNrbW9yZSk7Ci0gICAgICAgICAgICBpZiAoc3Vj Y2VzcykKLSAgICAgICAgICAgICAgc2F2ZWFzayA9IHhhc2ttb3JlOwotICAgICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MpOwotICAgICAgICAgIGNhc2UgU0NNRF9RVU86Ci0gICAgICAgICAgICBpZiAo KHggPSBzZXRvbigmeSkpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICAgICAgY21kc3F1byh5KTsg ICAgICAgICAgICAgICAgIC8qIERvIGl0IHRoZSByaWdodCB3YXkgKi8KLSAgICAgICAgICAgIGNt ZF9xdW90aW5nID0geTsgICAgICAgICAgICAvKiBBbHNvIGtlZXAgYSBnbG9iYWwgY29weSAqLwot ICAgICAgICAgICAgLyogU2V0IHN0cmluZy1wcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0jaWZkZWYg ZGF0YWdlbmVyYWwKLSAgICAgICAgICAgIHh4c3RyaW5nID0geSA/IHp6c3RyaW5nIDogKHh4X3N0 cnApIE5VTEw7Ci0jZWxzZQotI2lmZGVmIENLX0FOU0lDCi0gICAgICAgICAgICB4eHN0cmluZyA9 IHkgPyB6enN0cmluZyA6ICh4eF9zdHJwKSBOVUxMOwotI2Vsc2UKLSAgICAgICAgICAgIHh4c3Ry aW5nID0geSA/IHp6c3RyaW5nIDogKHh4X3N0cnApIE5VTEw7Ci0jZW5kaWYgLyogQ0tfQU5TSUMg Ki8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3Mg PSAxKTsKLQotI2lmZGVmIE9TMgotI2lmbmRlZiBOT0xPQ0FMCi0gICAgICAgICAgY2FzZSBTQ01E X0NPTDogeyAgICAgICAgICAgICAgLyogQ29tbWFuZC1zY3JlZW4gY29sb3JzICovCi0gICAgICAg ICAgICAgIGludCBmZywgYmc7Ci0gICAgICAgICAgICAgIGZnID0gY21rZXkodHR5Y2xydGFiLCBu Y2xycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yZWdyb3VuZCBjb2xvciBhbmQgdGhl biBiYWNrZ3JvdW5kIGNvbG9yIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAid2hpdGUiLAot ICAgICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKTsKLSAgICAgICAgICAgICAgaWYgKGZn IDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4oZmcpOwotICAgICAgICAgICAgICBpZiAoKGJn ID0gY21rZXkodHR5Y2xydGFiLG5jbHJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ImJhY2tncm91bmQgY29sb3IiLCJibGFjayIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAg ICAgcmV0dXJuKGJnKTsKLSAgICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQotICAg ICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgICAgY29sb3JjbWQgPSBmZyB8IGJn IDw8IDQ7Ci0gICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICAgICAgfQot ICAgICAgICAgIGNhc2UgU0NNRF9TQ1I6ICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgU2Nyb2xs YmFjayBzaXplICovCi0gICAgICAgICAgICBpZiAoKHkgPSBjbW51bSgiQ09NTUFORCBzY3JvbGxi YWNrIGJ1ZmZlciBzaXplLCBsaW5lcyIsIjUxMiIsMTAsJngsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICB4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAg ICAgICAgLyogVGhlIG1heCBudW1iZXIgb2YgbGluZXMgaXMgdGhlIFJBTSAgKi8KLSAgICAgICAg ICAgIC8qIHdlIGNhbiBhY3R1YWxseSBkZWRpY2F0ZSB0byBhICAgICAgICovCi0gICAgICAgICAg ICAvKiBzY3JvbGxiYWNrIGJ1ZmZlciBnaXZlbiB0aGUgbWF4aW11bSAqLwotICAgICAgICAgICAg LyogcHJvY2VzcyBtZW1vcnkgc3BhY2Ugb2YgNTEyTUIgICAgICAgKi8KLSAgICAgICAgICAgIGlm ICh4IDwgMjU2IHx8IHggPiAyMDAwMDAwTCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiXG4/ VGhlIHNpemUgbXVzdCBiZSBiZXR3ZWVuIDI1NiBhbmQgMiwwMDAsMDAwLlxuIik7Ci0gICAgICAg ICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg IGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICAgICAgdHRfc2Nyc2l6 ZVtWQ01EXSA9IHg7Ci0gICAgICAgICAgICBWc2NybkluaXQoIFZDTUQgKTsKLSAgICAgICAgICAg IHJldHVybihzdWNjZXNzID0gMSk7Ci0KLSAgICAgICAgICBjYXNlIFNDTURfV0lEOiB7Ci0gICAg ICAgICAgICAgIGlmICgoeSA9IGNtbnVtKCJOdW1iZXIgb2YgY29sdW1ucyBpbiBkaXNwbGF5IHdp bmRvdyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIjgwIiwxMCwmeCx4eHN0cmluZykpIDwg MCkKLSAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgIGlmICgoeSA9IGNt Y2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotCi0gICAgICAgICAgICAgIG9zMl9zZXRjbWR3aWR0aCh4 KTsKLSAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgICAgICB9Ci0gICAg ICAgICAgY2FzZSBTQ01EX0hJRzoKLSAgICAgICAgICAgIGlmICgoeSA9IGNtbnVtKCJOdW1iZXIg b2Ygcm93cyBpbiBkaXNwbGF5IHdpbmRvdyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAi MjQiLDEwLCZ4LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAg ICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgICAgIG9z Ml9zZXRjbWRoZWlnaHQoeCk7Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0g ICAgICAgICAgY2FzZSBTQ01EX1NUQTogewotICAgICAgICAgICAgICBleHRlcm4gaW50IG1hcmdp bmJvdDsKLSAgICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3Ry aW5nKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwg MCkgcmV0dXJuKHgpOwotICAgICAgICAgICAgICBpZiAoeSAhPSB0dF9zdGF0dXNbVkNNRF0pIHsK LSAgICAgICAgICAgICAgICAgIC8qIE1pZ2h0IG5lZWQgdG8gZml4dXAgdGhlIG1hcmdpbnMgKi8K LSAgICAgICAgICAgICAgICAgIHR0X3N0YXR1c1tWQ01EXSA9IHk7Ci0gICAgICAgICAgICAgICAg ICBpZiAoeSkgewotICAgICAgICAgICAgICAgICAgICAgIHR0X3N6Y2huZ1tWQ01EXSA9IDI7Ci0g ICAgICAgICAgICAgICAgICAgICAgdHRfcm93c1tWQ01EXS0tOwotICAgICAgICAgICAgICAgICAg ICAgIGNtZF9yb3dzLS07Ci0gICAgICAgICAgICAgICAgICAgICAgVnNjcm5Jbml0KFZDTUQpOyAg LyogSGVpZ2h0IHNldCBoZXJlICovCi0gICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIp OwotICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICB0dF9z emNobmdbVkNNRF0gPSAxOwotICAgICAgICAgICAgICAgICAgICAgIHR0X3Jvd3NbVkNNRF0rKzsK LSAgICAgICAgICAgICAgICAgICAgICBjbWRfcm93cysrOwotICAgICAgICAgICAgICAgICAgICAg IFZzY3JuSW5pdChWQ01EKTsgIC8qIEhlaWdodCBzZXQgaGVyZSAqLwotICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7 Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgY2FzZSBTQ01EX0NVUjogewotICAgICAgICAgICAg ICBpbnQgcm93LCBjb2w7Ci0gICAgICAgICAgICAgIHBvc2l0aW9uICogcHBvczsKLQotICAgICAg ICAgICAgICBwcG9zID0gVnNjcm5HZXRDdXJQb3MoVkNNRCk7Ci0jaWZkZWYgTlQKLSNkZWZpbmUg aXRvYSBfaXRvYQotI2VuZGlmIC8qIE5UICovCi0gICAgICAgICAgICAgIGl0b2EocHBvcy0+eSsx LCB0bXBidWYsIDEwKTsKLSAgICAgICAgICAgICAgaWYgKCh5ID0gY21udW0oInJvdyAoMS1iYXNl ZCkiLHRtcGJ1ZiwxMCwmcm93LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVy bih5KTsKLQotICAgICAgICAgICAgICBpdG9hKHBwb3MtPngrMSwgdG1wYnVmLCAxMCk7Ci0gICAg ICAgICAgICAgIGlmICgoeSA9IGNtbnVtKCJjb2wgKDEtYmFzZWQpIix0bXBidWYsMTAsJmNvbCx4 eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAg IGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotCi0gICAgICAgICAgICAgIGxnb3Rv eHkoIFZDTUQsIGNvbCwgcm93ICkgOwotICAgICAgICAgICAgICBWc2NybklzRGlydHkoIFZDTUQg KTsKLSAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3M9MSk7Ci0gICAgICAgICAgfQotI2VuZGlm IC8qIE5PTE9DQUwgKi8KLSNlbHNlCi0gICAgICAgICAgY2FzZSBTQ01EX1dJRDoKLSAgICAgICAg ICAgIHkgPSBjbW51bSgiQ29tbWFuZCBzY3JlZW4gd2lkdGgsIGNoYXJhY3RlcnMiLCI4MCIsMTAs JngseHhzdHJpbmcpOwotICAgICAgICAgICAgcmV0dXJuKHNldG51bSgmY21kX2NvbHMseCx5LDEw MjQpKTsKLQotICAgICAgICAgIGNhc2UgU0NNRF9ISUc6Ci0gICAgICAgICAgICB5ID0gY21udW0o IkNvbW1hbmQgc2NyZWVuIGhlaWdodCwgcm93cyIsIjI0IiwxMCwmeCx4eHN0cmluZyk7Ci0gICAg ICAgICAgICByZXR1cm4oc2V0bnVtKCZjbWRfcm93cyx4LHksMTAyNCkpOwotI2VuZGlmIC8qIE9T MiAqLwotCi0gICAgICAgICAgY2FzZSBTQ01EX0lOVDoKLSAgICAgICAgICAgIHJldHVybihzZXRv bigmY21kaW50KSk7Ci0KLSNpZmRlZiBDS19BVVRPREwKLSAgICAgICAgICBjYXNlIFNDTURfQURM OgotICAgICAgICAgICAgcmV0dXJuKHNldG9uKCZjbWRhZGwpKTsKLSNlbmRpZiAvKiBDS19BVVRP REwgKi8KLQotI2lmZGVmIERPVUJMRVFVT1RJTkcKLSAgICAgICAgICBjYXNlIFNDTURfREJROiB7 Ci0gICAgICAgICAgICAgIGV4dGVybiBpbnQgZGJscXVvOwotICAgICAgICAgICAgICByZXR1cm4o c2V0b24oJmRibHF1bykpOwotICAgICAgICAgIH0KLSNlbmRpZiAvKiBET1VCTEVRVU9USU5HICov Ci0KLQkgIGNhc2UgU0NNRF9FUlI6Ci0gICAgICAgICAgICB5ID0gY21udW0oIkVycm9yIG1lc3Nh Z2UgdmVyYm9zaXR5IGxldmVsLCAwLTMiLCIxIiwxMCwmeCx4eHN0cmluZyk7Ci0gICAgICAgICAg ICByZXR1cm4oc2V0bnVtKCZjbWRfZXJyLHgseSwzKSk7Ci0KLQkgIGNhc2UgU0NNRF9WQVI6Ci0J ICAgIHJldHVybihzZXR2YXJldmFsKCkpOwotCi0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg ICAgIHJldHVybigtMik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHh4KSB7Ci0K LSAgICAgIGNhc2UgWFlERkxUOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgREVGQVVMVCA9 IENEICovCi0gICAgICAgIHJldHVybihzdWNjZXNzID0gZG9jZChYWENXRCkpOwotCi1jYXNlIFhZ REVCVTogICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0VUIERFQlVHIHsgb24sIG9mZiwg c2Vzc2lvbiB9ICovCi0gICAgICAgIGlmICgoeSA9IGNta2V5KGRiZ3RhYixuZGJnLCIiLCIiLHh4 c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgaWYgKHkgPT0gREVC X1RJTSkKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgcmV0dXJuKHNldG9uKCZkZWJ0aW0pIDwg MCA/IHggOiAoc3VjY2VzcyA9IDEpKTsKLSNlbHNlCi0gICAgICAgICAgLyogd2h5IHRoaXMgY2hh bmdlPyAqLwotICAgICAgICAgIHJldHVybihzdWNjZXNzID0gc2V0b24oJmRlYnRpbSkpOwotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLQotI2lmZGVmIElLU0QKLSAgICAgICAgaWYgKGluc2VydmVyICYm IGlzZ3Vlc3QpIHsKLSAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBjb21tYW5kIGRpc2FibGVk LlxyXG4iKTsKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgfQotI2VuZGlm IC8qIElLU0QgKi8KLQotICAgICAgICBzd2l0Y2ggKHkpIHsKLSAgICAgICAgICBjYXNlIERFQl9M RU46Ci0gICAgICAgICAgICB5ID0gY21udW0oIk1heCBsZW5ndGggZm9yIGRlYnVnIGxvZyBzdHJp bmdzIiwiIiwxMCwmeCx4eHN0cmluZyk7Ci0gICAgICAgICAgICBpZiAoKHogPSBzZXRudW0oJmRl YnhsZW4seCx5LC0xKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeik7Ci0gICAgICAgICAg ICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAg ICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0KLSAgICAgICAgICBjYXNlIERFQl9PRkY6Ci0g ICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih4 KTsKLSNpZm5kZWYgTk9MT0NBTAotICAgICAgICAgICAgc2V0ZGVic2VzKDApOwotI2VuZGlmIC8q IE5PTE9DQUwgKi8KLSNpZmRlZiBERUJVRwotICAgICAgICAgICAgaWYgKGRlYmxvZykgZG9jbHNs b2coTE9HRCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICAgICAgICAgIHJldHVybihzdWNjZXNz ID0gMSk7Ci0KLSAgICAgICAgICBjYXNlIERFQl9PTjoKLSAgICAgICAgICAgIGlmICgoeCA9IGNt Y2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHgpOwotI2lmZGVmIERFQlVHCi0gICAg ICAgICAgICBkZWJsb2cgPSBkZWJvcG4oImRlYnVnLmxvZyIsIDApOwotICAgICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSBkZWJsb2cgPyAxIDogMCk7Ci0jZWxzZQotICAgICAgICAgICAgcHJpbnRm KCI/U29ycnksIGRlYnVnIGxvZyBmZWF0dXJlIG5vdCBlbmFibGVkXG4iKTsKLSAgICAgICAgICAg IHJldHVybihzdWNjZXNzID0gMCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICAgICAgICBjYXNl IERFQl9TRVM6Ci0gICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAg ICAgIHJldHVybih4KTsKLSNpZm5kZWYgTk9MT0NBTAotICAgICAgICAgICAgc2V0ZGVic2VzKDEp OwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7 Ci0KLQkgIGNhc2UgREVCX01TRzoJCQkvKiBEZWJ1ZyBtZXNzYWdlcyAyMDEwLzAzLzEyICovCi0J ICAgIGlmICgoeSA9IGNta2V5KG9vZXRhYixub29ldGFiLCIiLCJvbiIseHhzdHJpbmcpKSA8IDAp IHJldHVybih5KTsKLQkgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0JICAg IGRlYm1zZyA9IHk7Ci0JICAgIHJldHVybigxKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK LQotI2lmbmRlZiBOT1hGRVIKLSAgICAgIGNhc2UgWFlERUxBOiAgICAgICAgICAgICAgICAgICAg ICAvKiBTRVQgREVMQVkgKi8KLSAgICAgICAgeSA9IGNtbnVtKCJOdW1iZXIgb2Ygc2Vjb25kcyBi ZWZvcmUgc3RhcnRpbmcgdG8gc2VuZCIsCi0gICAgICAgICAgICAgICAgICAiNSIsMTAsJngseHhz dHJpbmcpOwotICAgICAgICBpZiAoeCA8IDApIHggPSAwOwotICAgICAgICByZXR1cm4oc3VjY2Vz cyA9IHNldG51bSgmY2tkZWxheSx4LHksOTk5KSk7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSAg ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHN3aXRjaCAoeHgpIHsK LSNpZmRlZiBDS19UQVBJCi0gICAgICBjYXNlIFhZVEFQSToKLSAgICAgICAgcmV0dXJuKHNldHRh cGkoKSk7Ci0jZW5kaWYgLyogQ0tfVEFQSSAqLwotI2lmbmRlZiBOT0RJQUwKLSAgICAgIGNhc2Ug WFlESUFMOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgTU9ERU0gb3IgU0VUIERJQUwgKi8K LSAgICAgICAgcmV0dXJuKHNldGRpYWwoLTEpKTsKLSAgICAgIGNhc2UgWFlNT0RNOgotICAgICAg ICByZXR1cm4oc2V0bW9kZW0oKSk7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgLyogbm90IGltcGxl bWVudGVkIHlldCAqLwotICAgICAgY2FzZSBYWUFOU1dFUjogICAgICAgICAgICAgICAgICAgIC8q IFNFVCBBTlNXRVIgKi8KLSAgICAgICAgcmV0dXJuKHNldGFuc3dlcigpKTsKLSNlbmRpZiAvKiBD T01NRU5UICovCi0jZW5kaWYgLyogTk9ESUFMICovCi0KLSNpZm5kZWYgTk9MT0NBTAotICAgICAg Y2FzZSBYWURVUEw6ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBEVVBMRVggKi8KLSAgICAg ICAgaWYgKCh5ID0gY21rZXkoZHB4dGFiLDIsIiIsImZ1bGwiLHh4c3RyaW5nKSkgPCAwKSByZXR1 cm4oeSk7Ci0gICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICAg ICBkdXBsZXggPSB5OwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0gICAgICBjYXNl IFhZTENMRTogICAgICAgICAgICAgICAgICAgICAgLyogTE9DQUwtRUNITyAoPSBEVVBMRVgpICov Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gc2V0b24oJmR1cGxleCkpOwotCi0gICAgICBjYXNl IFhZRVNDOiAgICAgICAgICAgICAgICAgICAgICAgLyogU0VUIEVTQ0FQRSAqLwotICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IHNldGNjKGNraXRvYShERkVTQyksJmVzY2FwZSkpOwotI2VuZGlmIC8q IE5PTE9DQUwgKi8KLQotICAgICAgY2FzZSBYWUVYSVQ6ICAgICAgICAgICAgICAgICAgICAgIC8q IFNFVCBFWElUICovCi0gICAgICAgIGlmICgoeiA9IGNta2V5KHhpdHRhYixuZXhpdCwiIiwiIix4 eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeik7Ci0gICAgICAgIHN3aXRjaCAoeikg ewotICAgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgICAgIC8qIFNUQVRVUyAqLwot ICAgICAgICAgICAgeSA9IGNtbnVtKCJFWElUIHN0YXR1cyBjb2RlIiwiIiwxMCwmeCx4eHN0cmlu Zyk7Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG51bSgmeGl0c3RhLHgseSwtMSkp OwotICAgICAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAgIC8qIFdBUk5JTkcgKi8K LSAgICAgICAgICAgIGlmICgoeiA9IGNta2V5KHhpdHd0YWIsbmV4aXR3LCIiLCIiLHh4c3RyaW5n KSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeik7Ci0gICAgICAgICAgICBpZiAoKHkgPSBj bWNmbSgpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgICAgIHNldGV4aXR3YXJuKHopOwotICAg ICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgICAgICBjYXNlIDI6Ci0gICAgICAg ICAgICBzdWNjZXNzID0gc2V0b24oJmV4aXRvbmNsb3NlKTsKLSNpZmRlZiBUQ1BTT0NLRVQKLSAg ICAgICAgICAgIGlmIChzdWNjZXNzKSB0bl9leGl0ID0gZXhpdG9uY2xvc2U7Ci0jZW5kaWYgLyog VENQU09DS0VUICovCi0gICAgICAgICAgICByZXR1cm4oc3VjY2Vzcyk7Ci0gICAgICAgICAgY2Fz ZSAzOiB7Ci0gICAgICAgICAgICAgIGV4dGVybiBpbnQgZXhpdGhhbmd1cDsKLSAgICAgICAgICAg ICAgcmV0dXJuKChzdWNjZXNzID0gc2V0b24oJmV4aXRoYW5ndXApKSk7Ci0gICAgICAgICAgfQot ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4oLTIpOwotICAgICAgICB9IC8q IEVuZCBvZiBTRVQgRVhJVCBzd2l0Y2goKSAqLwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJl YWs7Ci0gICAgfQotCi0gICAgc3dpdGNoICh4eCkgewotCi0gICAgICBjYXNlIFhZRklMRTogICAg ICAgICAgICAgICAgICAgICAgLyogU0VUIEZJTEUgKi8KLSAgICAgICAgcmV0dXJuKHNldGZpbChy bXNmbGcpKTsKLQotICAgICAgY2FzZSBYWUZMT1c6IHsgICAgICAgICAgICAgICAgICAgIC8qIEZM T1ctQ09OVFJPTCAqLwotICAgICAgICAgIGV4dGVybiBpbnQgY3hmbG93W107Ci0gICAgICAgICAg c3RydWN0IEZEQiBrMSwgazI7Ci0gICAgICAgICAgaW50IHRuY29tcG9ydCA9IDA7Ci0gICAgICAg ICAgY2hhciAqIG07Ci0KLSNpZmRlZiBUTl9DT01QT1JUCi0gICAgICAgICAgaWYgKG5ldHdvcmsg JiYgaXN0bmNvbXBvcnQoKSkKLSAgICAgICAgICAgIHRuY29tcG9ydCA9IDE7Ci0jZW5kaWYgLyog VE5fQ09NUE9SVCAqLwotCi0gICAgICAgICAgaWYgKHRuY29tcG9ydCkgewotICAgICAgICAgICAg ICBtID0gIkZsb3cgY29udHJvbCB0eXBlLCBvbmUgb2YgdGhlIGZvbGxvd2luZzpcblwKLSAgIGR0 ci9jZCAgICBkdHIvY3RzICAga2VlcCAgICBub25lICAgIHJ0cy9jdHMgICB4b24veG9mZlxuXAot IG9yIGNvbm5lY3Rpb24gdHlwZSI7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvKiBB bGwgdGhpcyBpcyBiZWNhdXNlIGNoYWluZWQgRkRCJ3MgZG9uJ3QgZ2l2ZSBjaGFpbmVkIGhlbHAg eWV0ICovCi0gICAgICAgICAgICAgIG0gPQotI2lmZGVmIFBsYW45Ci0jaWZkZWYgQ0tfUlRTQ1RT Ci0gICAgICAgICAgICJGbG93IGNvbnRyb2wgdHlwZSwgb25lIG9mIHRoZSBmb2xsb3dpbmc6XG5c Ci0gICBrZWVwICAgbm9uZSAgICBydHMvY3RzXG5cCi0gb3IgY29ubmVjdGlvbiB0eXBlIiwKLSNl bHNlCi0gICAgICAgICAgICJGbG93IGNvbnRyb2wgdHlwZSwgb25lIG9mIHRoZSBmb2xsb3dpbmc6 XG5cCi0gICBrZWVwICAgbm9uZVxuXAotIG9yIGNvbm5lY3Rpb24gdHlwZSI7Ci0jZW5kaWYgLyog Q0tfUlRTQ1RTICovCi0jZWxzZQotI2lmZGVmIENLX1JUU0NUUwotI2lmZGVmIENLX0RUUkNECi0j aWZkZWYgQ0tfRFRSQ1RTCi0gICAgICAgICAgICJGbG93IGNvbnRyb2wgdHlwZSwgb25lIG9mIHRo ZSBmb2xsb3dpbmc6XG5cCi0gICBkdHIvY2QgICAgZHRyL2N0cyAgIGtlZXAgICAgbm9uZSAgICBy dHMvY3RzICAgeG9uL3hvZmZcblwKLSBvciBjb25uZWN0aW9uIHR5cGUiOwotI2Vsc2UgLyogQ0tf RFRSQ1RTICovCi0gICAgICAgICAgICJGbG93IGNvbnRyb2wgdHlwZSwgb25lIG9mIHRoZSBmb2xs b3dpbmc6XG5cCi0gICBkdHIvY2QgICAga2VlcCAgICBub25lICAgIHJ0cy9jdHMgICB4b24veG9m ZlxuXAotICAgICAgICAgICAgb3IgY29ubmVjdGlvbiB0eXBlIjsKLSNlbmRpZiAvKiBDS19EVFJD VFMgKi8KLSNlbHNlIC8qIENLX0RUUkNEICovCi0jaWZkZWYgQ0tfRFRSQ1RTCi0gICAgICAgICAg ICJGbG93IGNvbnRyb2wgdHlwZSwgb25lIG9mIHRoZSBmb2xsb3dpbmc6XG5cCi0gICBkdHIvY3Rz ICAga2VlcCAgIG5vbmUgICAgcnRzL2N0cyAgIHhvbi94b2ZmXG5cCi0gb3IgY29ubmVjdGlvbiB0 eXBlIjsKLSNlbHNlIC8qIENLX0RUUkNUUyAqLwotICAgICAgICAgICAiRmxvdyBjb250cm9sIHR5 cGUsIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuXAotICAga2VlcCAgIG5vbmUgICAgcnRzL2N0cyAg IHhvbi94b2ZmXG5cCi0gb3IgY29ubmVjdGlvbiB0eXBlIjsKLSNlbmRpZiAvKiBDS19EVFJDVFMg Ki8KLSNlbmRpZiAvKiBDS19EVFJDRCAqLwotI2Vsc2UKLSAgICAgICAgICAgIkZsb3cgY29udHJv bCB0eXBlLCBvbmUgb2YgdGhlIGZvbGxvd2luZzpcblwKLSAgIGtlZXAgICBub25lICAgIHhvbi94 b2ZmXG5cCi0gb3IgY29ubmVjdGlvbiB0eXBlIjsKLSNlbmRpZiAvKiBDS19SVFNDVFMgKi8KLSNl bmRpZiAvKiBQbGFuOSAqLwotICAgICAgICAgIH0KLSAgICAgICAgICBjbWZkYmkoJmsxLF9DTUtF WSxtLCIiLCIiLG5jeHR5cGVzdywgNCwgeHhzdHJpbmcsIGN4dHlwZXN3LCAmazIpOwotICAgICAg ICAgIGNtZmRiaSgmazIsCi0gICAgICAgICAgICAgICAgIF9DTUtFWSwKLSAgICAgICAgICAgICAg ICAgIiIsCi0gICAgICAgICAgICAgICAgICIiLAotICAgICAgICAgICAgICAgICAiIiwKLSNpZmRl ZiBUTl9DT01QT1JUCi0gICAgICAgICAgICAgICAgICh0bmNvbXBvcnQgPyBudG5mbG8gOiBuZmxv KSwKLSNlbHNlCi0gICAgICAgICAgICAgICAgIG5mbG8sCi0jZW5kaWYgLyogVE5fQ09NUE9SVCAq LwotICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICB4eHN0cmluZywKLSNpZmRl ZiBUTl9DT01QT1JUCi0gICAgICAgICAgICAgICAgICh0bmNvbXBvcnQgPyB0bmZsb3RhYiA6IGZs b3RhYiksCi0jZWxzZQotICAgICAgICAgICAgICAgICBmbG90YWIsCi0jZW5kaWYgLyogVE5fQ09N UE9SVCAqLwotICAgICAgICAgICAgICAgICBOVUxMCi0gICAgICAgICAgICAgICAgICk7Ci0gICAg ICAgICAgeCA9IGNtZmRiKCZrMSk7Ci0gICAgICAgICAgaWYgKHggPCAwKSB7ICAgICAgICAgICAg ICAgICAgLyogRXJyb3IgKi8KLSAgICAgICAgICAgICAgaWYgKHggPT0gLTIgfHwgeCA9PSAtOSkK LSAgICAgICAgICAgICAgICBwcmludGYoIj9ObyBrZXl3b3JkcyBvciBzd2l0Y2hlcyBtYXRjaDog XCIlc1wiXG4iLGF0bWJ1Zik7Ci0gICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICB9 Ci0gICAgICAgICAgeiA9IGNtcmVzdWx0Lm5yZXN1bHQ7ICAgICAgICAgLyogS2V5d29yZCB2YWx1 ZSAqLwotICAgICAgICAgIGlmIChjbXJlc3VsdC5mZGJhZGRyID09ICZrMikgeyAvKiBGbG93LWNv bnRyb2wgdHlwZSBrZXl3b3JkIHRhYmxlICovCi0gICAgICAgICAgICAgIGlmICgoeCA9IGNtY2Zt KCkpIDwgMCkgICAgLyogU2V0IGl0IGltbWVkaWF0ZWx5ICovCi0gICAgICAgICAgICAgICAgcmV0 dXJuKHgpOwotICAgICAgICAgICAgICBmbG93ID0gejsKLSAgICAgICAgICAgICAgZGVidWcoRjEw MSwic2V0IGZsb3ciLCIiLGZsb3cpOwotI2lmZGVmIENLX1NQRUVECi0gICAgICAgICAgICAgIGlm IChmbG93ID09IEZMT19YT05YKSAgICAgLyogWG9uL1hvZmYgZm9yY2VzIHByZWZpeGluZyAqLwot ICAgICAgICAgICAgICAgIGN0bHBbWE9OXSA9IGN0bHBbWE9GRl0gPSBjdGxwW1hPTisxMjhdID0g Y3RscFtYT0ZGKzEyOF0gPSAxOwotI2VuZGlmIC8qIENLX1NQRUVEICovCi0gICAgICAgICAgICAg IGF1dG9mbG93ID0gKGZsb3cgPT0gRkxPX0FVVE8pOwotICAgICAgICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDEpOyAgICAgIC8qIERvbmUgKi8KLSAgICAgICAgICB9Ci0gICAgICAgICAgZGVidWco RjEwMSwic2V0IGZsb3cgL2JsYWggMSIsIiIseik7IC8qIFNFVCBGTE9XIC9mb3Itd2hhdCAqLwot ICAgICAgICAgIGlmICgoeSA9IGNta2V5KGZsb3RhYixuZmxvLCJGbG93IGNvbnRyb2wgdHlwZSIs Im5vbmUiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAg IGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAg ICBkZWJ1ZyhGMTAxLCJzZXQgZmxvdyAvYmxhaCAyIiwiIix5KTsKLSAgICAgICAgICBpZiAoeSA9 PSBGTE9fQVVUTykgewotICAgICAgICAgICAgICBwcmludGYoCi0gICI/U29ycnksIFwiYXV0b21h dGljXCIgY2FuIG5vdCBiZSBhc3NpZ25lZCB0byBhIGNvbm5lY3Rpb24gdHlwZS5cbiIpOwotICAg ICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgIH0gZWxzZSBpZiAoeiA+PSAwICYmIHog PD0gQ1hUX01BWCkKLSAgICAgICAgICAgIGN4Zmxvd1t6XSA9IHk7Ci0gICAgICAgICAgZGVidWco RjEwMSwic2V0IGZsb3ciLCIiLGZsb3cpOwotICAgICAgICAgIGRlYnVnKEYxMDEsInNldCBmbG93 IGF1dG9mbG93IiwiIixhdXRvZmxvdyk7Ci0gICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsK LSAgICAgIH0KLQotICAgICAgY2FzZSBYWUhBTkQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIEhB TkRTSEFLRSAqLwotICAgICAgICBpZiAoKHkgPSBjbWtleShoc2h0YWIsbmhzaCwiIiwibm9uZSIs eHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgaWYgKHkgPT0gOTk4KSB7Ci0gICAg ICAgICAgICBpZiAoKHggPSBjbW51bSgiQVNDSUkgdmFsdWUiLCIiLDEwLCZ5LHh4c3RyaW5nKSkg PCAwKQotICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICBpZiAoKHkgPCAxKSB8 fCAoKHkgPiAzMSkgJiYgKHkgIT0gMTI3KSkpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9D aGFyYWN0ZXIgbXVzdCBiZSBpbiBBU0NJSSBjb250cm9sIHJhbmdlXG4iKTsKLSAgICAgICAgICAg ICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICgo eCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICB0dXJuID0gKHkgPiAwMTI3KSA/ IDAgOiAxOwotICAgICAgICB0dXJuY2ggPSB5OwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEp OwotCi0jaWZuZGVmIE5PU1BMCi0gICAgICBjYXNlIFhZTUFDUjogICAgICAgICAgICAgICAgICAg ICAgLyogU0VUIE1BQ1JPICovCi0gICAgICAgIGlmICgoeSA9IGNta2V5KHNtYWN0YWIsMiwiIiwi Iix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBzd2l0Y2ggKHkpIHsKLSAgICAg ICAgICBjYXNlIDA6IHJldHVybihzdWNjZXNzID0gc2V0b24oJm1lY2hvKSk7Ci0gICAgICAgICAg Y2FzZSAxOiByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZtZXJyb3JbY21kbHZsXSkpOwotICAgICAg ICAgIGRlZmF1bHQ6IHJldHVybigtMik7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwot Ci0gICAgICBjYXNlIFhZTVNHUzoKLSNpZmRlZiBWTVMKLSAgICAgICAgaWYgKCh6ID0gY21rZXko b25vZmYsMiwiIiwiIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHopOwotICAgICAgICBpZiAoKHkg PSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgdm1zX21zZ3MgPSB6OwotICAgICAg ICBwcmludGYoIlNvcnJ5LCBTRVQgTUVTU0FHRVMgbm90IGltcGxlbWVudGVkIHlldFxuIik7Ci0g ICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0jZW5kaWYgLyogVk1TICovCi0gICAgICBkZWZh dWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHh4KSB7Ci0KLSAgICAg IGNhc2UgWFlQQVJJOiAgICAgICAgICAgICAgICAgICAgICAvKiBQQVJJVFkgKi8KLSAgICAgICAg aWYgKCh5ID0gY21rZXkocGFydGJsLG5wYXIsIiIsIm5vbmUiLHh4c3RyaW5nKSkgPCAwKQotICAg ICAgICAgIHJldHVybih5KTsKLQotICAgICAgICAvKiBJZiBwYXJpdHkgbm90IG5vbmUsIHRoZW4g d2UgYWxzbyB3YW50IDh0aC1iaXQgcHJlZml4aW5nICovCi0KLSNpZmRlZiBIV1BBUklUWQotICAg ICAgICBpZiAoeSA9PSAnSCcpIHsgICAgICAgICAgICAgICAgIC8qIEhhcmR3YXJlICovCi0gICAg ICAgICAgICBpZiAoKHggPSBjbWtleShod3BhcnRibCxuaHdwYXIsIiIsImV2ZW4iLHh4c3RyaW5n KSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBI V1BBUklUWSAqLwotCi0gICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICBy ZXR1cm4oeik7Ci0KLSNpZmRlZiBIV1BBUklUWQotICAgICAgICBpZiAoeSA9PSAnSCcpIHsgICAg ICAgICAgICAgICAgIC8qIDggZGF0YSBiaXRzIHBsdXMgaGFyZHdhcmUgcGFyaXR5ICovCi0gICAg ICAgICAgICBwYXJpdHkgPSAwOwotI2lmbmRlZiBOT1hGRVIKLSAgICAgICAgICAgIGVicWZsZyA9 IDA7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0gICAgICAgICAgICBod3Bhcml0eSA9IHg7Ci0gICAg ICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogNyBkYXRhIGJpdHMgKyBzb2Z0 d2FyZSBwYXJpdHkgKi8KLSAgICAgICAgICAgIGh3cGFyaXR5ID0gMDsKLSNlbmRpZiAvKiBIV1BB UklUWSAqLwotICAgICAgICAgICAgcGFyaXR5ID0geTsKLSNpZm5kZWYgTk9YRkVSCi0gICAgICAg ICAgICBlYnFmbGcgPSAocGFyaXR5KSA/IDEgOiAwOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotI2lm ZGVmIEhXUEFSSVRZCi0gICAgICAgIH0KLSNlbmRpZiAvKiBIV1BBUklUWSAqLwotCi0jaWZkZWYg VE5fQ09NUE9SVAotICAgICAgICBpZiAobmV0d29yayAmJiBpc3RuY29tcG9ydCgpKQotICAgICAg ICAgIHRuc2V0dGluZ3MocGFyaXR5LCAwKTsKLSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0KLSAg ICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQotI2lmbmRlZiBOT0ZSSUxMUwotICAgICAgY2Fz ZSBYWVBST006ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBQUk9NUFQgKi8KLS8qCi0gIE5v dGU6IHh4c3RyaW5nIG5vdCBpbnZva2VkIGhlcmUuICBJbnN0ZWFkLCBpdCBpcyBpbnZva2VkIGV2 ZXJ5IHRpbWUgdGhlCi0gIHByb21wdCBpcyBpc3N1ZWQuICBUaGlzIGFsbG93cyB0aGUgcHJvbXB0 IHN0cmluZyB0byBjb250YWluIHZhcmlhYmxlcwotICB0aGF0IGNhbiBjaGFuZ2UsIGxpa2UgXHYo ZGlyKSwgXHYodGltZSksIGV0Yy4KLSovCi0gICAgICAgIGNrbWFrbXNnKGxpbmUsICAgICAgICAg ICAgICAgICAgLyogRGVmYXVsdCBtaWdodCBoYXZlIHRyYWlsaW5nIHNwYWNlICovCi0gICAgICAg ICAgICAgICAgIExJTkJVRlNJWiwKLSAgICAgICAgICAgICAgICAgInsiLAotICAgICAgICAgICAg ICAgICBpbnNlcnZlciA/IGlrcHJvbXB0IDogY2twcm9tcHQsCi0gICAgICAgICAgICAgICAgICJ9 IiwKLSAgICAgICAgICAgICAgICAgTlVMTAotICAgICAgICAgICAgICAgICApOwotICAgICAgICBp ZiAoKHggPSBjbXR4dCgiUHJvZ3JhbSdzIGNvbW1hbmQgcHJvbXB0IixsaW5lLCZzLE5VTEwpKSA8 IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBzID0gYnJzdHJpcChzKTsgICAgICAg ICAgICAgICAgIC8qIFJlbW92ZSBlbmNsb3NpbmcgYnJhY2VzLCBpZiBhbnkgKi8KLSAgICAgICAg Y21zZXRwKHMpOyAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgdGhlIHByb21wdCAqLwotICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotI2VuZGlmIC8qIE5PRlJJTExTICovCi0KLSNpZm5k ZWYgTk9YRkVSCi0gICAgICBjYXNlIFhZUkVUUjogICAgICAgICAgICAgICAgICAgICAgLyogUkVU Ulk6IHBlci1wYWNrZXQgcmV0cnkgbGltaXQgKi8KLSAgICAgICAgeSA9IGNtbnVtKCJNYXhpbXVt IHJldHJpZXMgcGVyIHBhY2tldCIsIjEwIiwxMCwmeCx4eHN0cmluZyk7Ci0gICAgICAgIGlmICh4 IDwgMCkgeCA9IDA7Ci0gICAgICAgIGlmICgoeCA9IHNldG51bSgmbWF4dHJ5LHgseSw5OTkpKSA8 IDApIHJldHVybih4KTsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIGlmIChtYXh0cnkgPD0gd3Ns b3RyKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9SZXRyeSBsaW1pdCBtdXN0IGJlIGdyZWF0ZXIg dGhhbiB3aW5kb3cgc2l6ZVxuIik7Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwot ICAgICAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICBpZiAocm1zZmxnKSB7Ci0g ICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1MnLCAiNDAzIiwgY2tpdG9hKG1heHRyeSksICIi KTsKLSAgICAgICAgICAgIHJldHVybigoaW50KSBzc3RhdGUpOwotICAgICAgICB9IGVsc2UgcmV0 dXJuKHN1Y2Nlc3MgPSB4KTsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBOT1NFUlZF UgotICAgICAgY2FzZSBYWVNFUlY6ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBTRVJWRVIg aXRlbXMgKi8KLSAgICAgICAgaWYgKCh5ID0gY21rZXkoc3J2dGFiLG5zcnZ0LCIiLCIiLHh4c3Ry aW5nKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgIHN3aXRjaCAoeSkgewotICAgICAgICAgIGNh c2UgWFlTRVJJOgotICAgICAgICAgICAgaWYgKCh5ID0gY21udW0oIk51bWJlciBvZiBzZWNvbmRz LCBvciAwIGZvciBubyBpZGxlIHRpbWVvdXQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg IjAiLDEwLCZ4LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAg ICAgICAgICBpZiAoeCA8IDApCi0gICAgICAgICAgICAgIHggPSAwOwotICAgICAgICAgICAgaWYg KCh5ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0jaWZuZGVmIE9T MgotICAgICAgICAgICAgc3J2dGltID0gMDsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAg IHNydmlkbCA9IHg7Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICAg IGNhc2UgWFlTRVJUOgotICAgICAgICAgICAgaWYgKCh5ID0gY21udW0oIkludGVydmFsIGZvciBz ZXJ2ZXIgTkFLcywgMCA9IG5vbmUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tpdG9h KERTUlZUSU0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAsJngsIHh4c3RyaW5nKSkg PCAwKQotICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICBpZiAoeCA8IDApIHsK LSAgICAgICAgICAgICAgICBwcmludGYoCi0gICAgICAgICAgICAgICAgICAgIlxuP1NwZWNpZnkg YSBwb3NpdGl2ZSBudW1iZXIsIG9yIDAgZm9yIG5vIHNlcnZlciBOQUtzXG4iKTsKLSAgICAgICAg ICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKHkgPSBj bWNmbSgpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgICAgIGlmIChybXNmbGcpIHsKLSAgICAg ICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1MnLCAiNDA0IiwgY2tpdG9hKHgpLCAiIik7Ci0g ICAgICAgICAgICAgICAgcmV0dXJuKChpbnQpIHNzdGF0ZSk7Ci0gICAgICAgICAgICB9IGVsc2Ug ewotI2lmbmRlZiBPUzIKLSAgICAgICAgICAgICAgICBzcnZpZGwgPSAwOwotI2VuZGlmIC8qIE9T MiAqLwotICAgICAgICAgICAgICAgIHNydnRpbSA9IHg7ICAgICAgICAgICAgIC8qIFNldCB0aGUg c2VydmVyIHRpbWVvdXQgdmFyaWFibGUgKi8KLSAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2Vz cyA9IDEpOwotICAgICAgICAgICAgfQotICAgICAgICAgIGNhc2UgWFlTRVJEOiAgICAgICAgICAg ICAgICAgIC8qIFNFUlZFUiBESVNQTEFZICovCi0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IHNldG9uKCZzcnZkaXMpKTsgLyogT04gb3IgT0ZGLi4uICovCi0KLSNpZm5kZWYgTk9TUEwKLSAg ICAgICAgICBjYXNlIFhZU0VSUDogICAgICAgICAgICAgICAgICAvKiBTRVJWRVIgR0VULVBBVEgg Ki8KLSAgICAgICAgICAgIHJldHVybihwYXJzZGlyKDIpKTsKLSNlbmRpZiAvKiBOT1NQTCAqLwot Ci0gICAgICAgICAgY2FzZSBYWVNFUkw6ICAgICAgICAgICAgICAgICAgLyogU0VSVkVSIExPR0lO ICovCi0gICAgICAgICAgICByZXR1cm4oY2tsb2dpbigpKTsKLQotICAgICAgICAgIGNhc2UgWFlT RVJDOiAgICAgICAgICAgICAgICAgIC8qIFNFUlZFUiBDRC1NRVNTQUdFICovCi0gICAgICAgICAg ICB4ID0gcm1zZmxnID8KLSAgICAgICAgICAgICAgY21rZXkob25vZmYsMiwiIiwiIix4eHN0cmlu ZykgOgotICAgICAgICAgICAgICAgIGNta2V5KGNkbXNnLDMsIiIsIiIseHhzdHJpbmcpOwotICAg ICAgICAgICAgaWYgKHggPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAg ICBpZiAoeCA9PSAyKSB7ICAgICAgICAgICAgICAgLyogQ0QtTUVTU0FHRSBGSUxFICovCi0gICAg ICAgICAgICAgICAgaWYgKCh4ID0gY210eHQoIk5hbWUgb2YgZmlsZSIsIiIsJnMsTlVMTCkpIDwg MCkKLSAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgICAgICBpZiAoISpz KSB7Ci0gICAgICAgICAgICAgICAgICAgIHMgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBz cnZjZG1zZyA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1ha2VzdHIo JmNkbXNnc3RyLHMpOwotICAgICAgICAgICAgICAgIG1ha2VsaXN0KGNkbXNnc3RyLGNkbXNnZmls ZSw4KTsKLSAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICAgICAg fQotICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSAgICAgIC8qIENELU1FU1NBR0Ug T04vT0ZGICovCi0gICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgIGlmIChybXNm bGcpIHsKLSAgICAgICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1MnLCAiNDIwIiwgeCA/ICIx IiA6ICIwIiwgIiIpOwotICAgICAgICAgICAgICAgIHJldHVybigoaW50KSBzc3RhdGUpOwotICAg ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoeCA+IDApCi0gICAgICAgICAg ICAgICAgICBzcnZjZG1zZyB8PSAxOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg ICAgICAgIHNydmNkbXNnICY9IDI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAx KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIFhZU0VSSzogICAgICAgICAgICAgICAg ICAvKiBTRVJWRVIgS0VFUEFMSVZFICovCi0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNl dG9uKCZzcnZwaW5nKSk7IC8qIE9OIG9yIE9GRi4uLiAqLwotCi0gICAgICAgICAgZGVmYXVsdDoK LSAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT1NFUlZFUiAq LwotICAgIH0KLQotICAgIHN3aXRjaCAoeHgpIHsKLSNpZmRlZiBVTklYCi0jaWZuZGVmIE5PSkMK LSAgICAgIGNhc2UgWFlTVVNQOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgU1VTUEVORCAq LwotICAgICAgICBzZXRvbigmeHN1c3BlbmQpOwkJLyogb24gb3Igb2ZmLi4uICovCi0gICAgICAg IHJldHVybihzdWNjZXNzID0gMSk7Ci0jZW5kaWYgLyogTk9KQyAqLwotI2VuZGlmIC8qIFVOSVgg Ki8KLQotICAgICAgY2FzZSBYWVRBS0U6ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBUQUtF ICovCi0gICAgICAgIGlmICgoeSA9IGNta2V5KHRha3RhYiw0LCIiLCIiLHh4c3RyaW5nKSkgPCAw KSByZXR1cm4oeSk7Ci0gICAgICAgIHN3aXRjaCAoeSkgewotICAgICAgICAgIGNhc2UgMDogcmV0 dXJuKHN1Y2Nlc3MgPSBzZXRvbigmdGVjaG8pKTsKLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgICBj YXNlIDE6IHJldHVybihzdWNjZXNzID0gc2V0b24oJnRha2VycltjbWRsdmxdKSk7Ci0jZWxzZQot ICAgICAgICAgIGNhc2UgMTogcmV0dXJuKHN1Y2Nlc3MgPSBzZXRvbigmdGFrZXJyW3RsZXZlbF0p KTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgICAgICAgIGNhc2UgMjogdGVjaG8gPSAwOyByZXR1 cm4oc3VjY2VzcyA9IDEpOyAvKiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoICovCi0gICAgICAgICAg Y2FzZSAzOiB0ZWNobyA9IDE7IHJldHVybihzdWNjZXNzID0gMSk7IC8qIE1TLURPUyBLZXJtaXQg Ki8KLSAgICAgICAgICBkZWZhdWx0OiByZXR1cm4oLTIpOwotICAgICAgICB9Ci0KLSNpZm5kZWYg Tk9TQ1JJUFQKLSAgICAgIGNhc2UgWFlTQ1JJOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQg U0NSSVBUICovCi0gICAgICAgIGlmICgoeSA9IGNta2V5KHNjcnRhYiwxLCIiLCJlY2hvIix4eHN0 cmluZykpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBzd2l0Y2ggKHkpIHsKLSAgICAgICAgICBj YXNlIDA6IHJldHVybihzdWNjZXNzID0gc2V0b24oJnNlY2hvKSk7Ci0gICAgICAgICAgZGVmYXVs dDogcmV0dXJuKC0yKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIE5PU0NSSVBUICovCi0KLSAgICAg IGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotI2lmbmRlZiBOT0xPQ0FMCi0gICAg c3dpdGNoICh4eCkgewotICAgICAgY2FzZSBYWVRFUk06ICAgICAgICAgICAgICAgICAgICAgIC8q IFNFVCBURVJNSU5BTCAqLwotICAgICAgICB4ID0gc2V0dHJtKCk7Ci0gICAgICAgIHN1Y2Nlc3Mg PSAoeCA+IDApID8gMSA6IDA7Ci0gICAgICAgIHJldHVybih4KTsKLQotI2lmZGVmIE5UCi0gICAg ICBjYXNlIFhZV0lOOTU6ICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFdJTjk1IHdvcmthcm91 bmRzICovCi0gICAgICAgIHggPSBzZXR3aW45NSgpOwotICAgICAgICBzdWNjZXNzID0gKHggPiAw ID8gMSA6IDApOwotICAgICAgICByZXR1cm4oeCk7Ci0jZW5kaWYgLyogTlQgKi8KLQotI2lmZGVm IE9TMgotICAgICAgY2FzZSBYWURMUjogICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBESUFM RVIgd29ya2Fyb3VuZHMgKi8KLSAgICAgICAgeCA9IHNldGRpYWxlcigpOwotICAgICAgICBzdWNj ZXNzID0gKHggPiAwID8gMSA6IDApOwotICAgICAgICByZXR1cm4oeCk7Ci0KLSAgICAgIGNhc2Ug WFlUSVRMRTogICAgICAgICAgICAgICAgICAgICAvKiBTRVQgVElUTEUgb2Ygd2luZG93ICovCi0g ICAgICAgIHggPSBzZXR0aXRsZSgpOwotICAgICAgICBzdWNjZXNzID0gKHggPiAwID8gMSA6IDAp OwotICAgICAgICByZXR1cm4oeCk7Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBPUzJNT1VT RQotICAgICAgY2FzZSBYWU1PVVNFOiAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBNT1VTRSAq LwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG1vdSgpKTsKLSNlbmRpZiAvKiBPUzJNT1VT RSAqLwotCi0gICAgICBjYXNlIFhZQkVMTDogICAgICAgICAgICAgICAgICAgICAgLyogU0VUIEJF TEwgKi8KLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRiZWxsKCkpOwotCi0jaWZkZWYgT1My Ci0gICAgICBjYXNlIFhZUFJUWToKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRwcnR5KCkg KTsKLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0g ICAgfQotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotICAgIHN3aXRjaCAoeHgpIHsKLQotLyogU0VU IFNFTkQvUkVDRUlWRSBwcm90b2NvbCBwYXJhbWV0ZXJzLiAqLwotCi0jaWZuZGVmIE5PWEZFUgot ICAgICAgY2FzZSBYWVJFQ1Y6Ci0gICAgICBjYXNlIFhZU0VORDoKLSAgICAgICAgcmV0dXJuKHNl dHNyKHh4LHJtc2ZsZykpOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZuZGVmIE5PTE9DQUwK LSAgICAgIGNhc2UgWFlTRVNTOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVNTSU9OLUxPRyAq LwotICAgICAgICBpZiAoKHggPSBjbWtleShzZnR0YWIsbnNmdHRhYiwidHlwZSBvZiBmaWxlIiwK LSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAgICAgICAgImJpbmFyeSIsCi0jZWxzZSAvKiBP UzIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgInRleHQiLAotI2VuZGlmIC8qIE9TMiAqLwot ICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZwotICAgICAgICAgICAgICAgICAgICAgICAp Ci0gICAgICAgICAgICAgKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBpZiAo KHkgPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICBpZiAoeCA9 PSA5OTkpIHsgICAgICAgICAgICAgICAgIC8qIFRJTUVTVEFNUEVELVRFWFQgKi8KLSAgICAgICAg ICAgIHNlc3NmdCA9IFhZRlRfVDsgICAgICAgICAgICAvKiBJbXBsaWVzIHRleHQgKi8KLSAgICAg ICAgICAgIHNsb2d0cyA9IDE7ICAgICAgICAgICAgICAgICAvKiBhbmQgdGltZXN0YW1wcyAqLwot CX0gZWxzZSBpZiAoeCA9PSA5OTgpIHsJCS8qIE5VTEwtUEFEREVELUxJTkVTICovCi0gICAgICAg ICAgICBzbG9nbnVsID0gMTsJCS8qIGFkZHMgTlVMIGFmdGVyIF5KICovCi0gICAgICAgIH0gZWxz ZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQSByZWd1bGFyIHR5cGUgKi8KLSAgICAgICAg ICAgIHNlc3NmdCA9IHg7ICAgICAgICAgICAgICAgICAvKiBUaGUgdHlwZSAqLwotICAgICAgICAg ICAgc2xvZ3RzID0gMDsgICAgICAgICAgICAgICAgIC8qIE5vIHRpbWVzdGFtcGVzICovCi0gICAg ICAgIH0KLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQotICAgICAgY2FzZSBYWVNQRUU6 ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBTUEVFRCAqLwotICAgICAgICBscCA9IGxpbmU7 Ci0gICAgICAgIGlmIChsb2NhbCAmJiAhbmV0d29yaykgewotICAgICAgICAgIGNrbWFrbXNnKGxw LAotICAgICAgICAgICAgICAgICAgIExJTkJVRlNJWiwKLSAgICAgICAgICAgICAgICAgICAiVHJh bnNtaXNzaW9uIHJhdGUgZm9yICIsCi0gICAgICAgICAgICAgICAgICAgdHRuYW1lLAotICAgICAg ICAgICAgICAgICAgICIgKGJpdHMgcGVyIHNlY29uZCkiLAotICAgICAgICAgICAgICAgICAgIE5V TEwKLSAgICAgICAgICAgICAgICAgICApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGNr c3RybmNweShscCwKLSAgICAgICAgICAgICAgICAgICAgIlNlcmlhbC1wb3J0IHNwZWVkIChiaXRz IHBlciBzZWNvbmQpIiwKLSAgICAgICAgICAgICAgICAgICAgTElOQlVGU0laCi0gICAgICAgICAg ICAgICAgICAgICk7Ci0gICAgICAgIH0KLSAgICAgICAgenogPSAtMUw7Ci0KLSNpZmRlZiBUTl9D T01QT1JUCi0gICAgICAgIGlmIChuZXR3b3JrICYmIGlzdG5jb21wb3J0KCkpCi0gICAgICAgICAg eCA9IGNta2V5KHRuc3BkdGFiLG50bnNwZCxsaW5lLCIiLHh4c3RyaW5nKTsKLSAgICAgICAgZWxz ZQotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLSAgICAgICAgICB4ID0gY21rZXkoc3BkdGFiLG5z cGQsbGluZSwiIix4eHN0cmluZyk7Ci0gICAgICAgIGlmICh4IDwgMCkgewotICAgICAgICAgICAg aWYgKHggPT0gLTMpIHByaW50ZigiP3ZhbHVlIHJlcXVpcmVkXG4iKTsKLSNpZmRlZiBVU0VUQ1NF VFNQRUVECi0gICAgICAgICAgICAvKiBJbiB0aGlzIGNhc2UsIGFueSBudW1iZXIgY2FuIGJlIHRy aWVkICovCi0gICAgICAgICAgICAvKiBUaGVyZSdzIGEgcGFyc2UgZXJyb3IgbWVzc2FnZSBidXQg dGhlIHJlcXVlc3Qgc3RpbGwgZ29lcyB0aHJ1ICovCi0gICAgICAgICAgICBpZiAocmRpZ2l0cyhh dG1idWYpKQotICAgICAgICAgICAgICB6eiA9IGF0b2woYXRtYnVmKTsKLSAgICAgICAgICAgIGVs c2UKLSNlbmRpZiAvKiBVU0VUQ1NFVFNQRUVEICovCi0gICAgICAgICAgICAgIHJldHVybih4KTsK LSAgICAgICAgfQotICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSNp ZmRlZiBJS1NECi0gICAgICAgIGlmIChpbnNlcnZlcikgewotICAgICAgICAgICAgcHJpbnRmKCI/ U29ycnksIGNvbW1hbmQgZGlzYWJsZWQuXHJcbiIpOwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSAwKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgICAgaWYgKCFsb2Nh bCkgewotICAgICAgICAgICAgcHJpbnRmKCI/U0VUIFNQRUVEIGhhcyBubyBlZmZlY3Qgd2l0aG91 dCBwcmlvciBTRVQgTElORVxuIik7Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwot ICAgICAgICB9IGVsc2UgaWYgKG5ldHdvcmsKLSNpZmRlZiBUTl9DT01QT1JUCi0gICAgICAgICAg ICAgICAgICAgJiYgIWlzdG5jb21wb3J0KCkKLSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0gICAg ICAgICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICBwcmludGYoIlxuP1NwZWVkIGNhbm5vdCBi ZSBzZXQgZm9yIG5ldHdvcmsgY29ubmVjdGlvbnNcbiIpOwotICAgICAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAwKTsKLSAgICAgICAgfQotCi0vKgotICBOb3RlOiBUaGlzIHdheSBvZiBoYW5kbGlu ZyBzcGVlZHMgaXMgbm90IDE2LWJpdCBzYWZlIGZvciBzcGVlZHMgZ3JlYXRlcgotICB0aGFuIDIz MDQwMC4gIFRoZSBhcmd1bWVudCB0byB0dHNzcGQoKSBzaG91bGQgaGF2ZSBiZWVuIGEgbG9uZy4K LSovCi0jaWZkZWYgVVNFVENTRVRTUEVFRAotICAgICAgICBpZiAoenogPiAtMUwpCi0gICAgICAg ICAgeCA9IHp6IC8gMTBMOwotI2VuZGlmIC8qIFVTRVRDU0VUU1BFRUQgKi8KLSAgICAgICAgenog PSAobG9uZykgeCAqIDEwTDsKLSAgICAgICAgaWYgKHp6ID09IDEzMEwpIHp6ID0gMTM0TDsKLSAg ICAgICAgaWYgKHp6ID09IDcwTCkgenogPSA3NUw7ICAgICAgICAvKiAoc2VlIHNwZHRhYltdIGRl ZmluaXRpb24pICovCi0gICAgICAgIGlmICh0dHNzcGQoeCkgPCAwKSAgeyAgICAgICAgICAgLyog Q2FsbCB0dHNzcGQgd2l0aCBjcHMsIG5vdCBicHMhICovCi0gICAgICAgICAgICBwcmludGYoIj9V bnN1cHBvcnRlZCBsaW5lIHNwZWVkIC0gJWxkXG4iLHp6KTsKLSAgICAgICAgICAgIHJldHVybihz dWNjZXNzID0gMCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0jaWZkZWYgQ0tfVEFQSQotICAgICAgICAg ICAgaWYgKCF0dHRhcGkgfHwgdGFwaXBhc3MpCi0gICAgICAgICAgICAgIHNwZWVkID0gdHRnc3Bk KCk7ICAgICAgICAgLyogUmVhZCBpdCBiYWNrICovCi0gICAgICAgICAgICBlbHNlCi0gICAgICAg ICAgICAgIHNwZWVkID0geno7Ci0jZWxzZSAvKiBDS19UQVBJICovCi0gICAgICAgICAgICBzcGVl ZCA9IHR0Z3NwZCgpOyAgICAgICAgICAgLyogUmVhZCBpdCBiYWNrICovCi0jZW5kaWYgLyogQ0tf VEFQSSAqLwotICAgICAgICAgICAgaWYgKHNwZWVkICE9IHp6KSAgeyAgICAgICAgIC8qIENhbGwg dHRzc3BkIHdpdGggY3BzLCBub3QgYnBzISAqLwotICAgICAgICAgICAgICAgIHByaW50ZigiP1NF VCBTUEVFRCBmYWlscywgc3BlZWQgaXMgJWxkXG4iLHNwZWVkKTsKLSAgICAgICAgICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHBmbGFn ICYmICF4Y21kc3JjKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNwZWVkID09IDg4ODApCi0gICAg ICAgICAgICAgICAgICBwcmludGYoIiVzLCA3NS8xMjAwIGJwc1xuIix0dG5hbWUpOwotICAgICAg ICAgICAgICAgIGVsc2UgaWYgKHNwZWVkID09IDEzNCkKLSAgICAgICAgICAgICAgICAgIHByaW50 ZigiJXMsIDEzNC41IGJwc1xuIix0dG5hbWUpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg ICAgICAgICAgICAgIHByaW50ZigiJXMsICVsZCBicHNcbiIsdHRuYW1lLHNwZWVkKTsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICAgIH0KLSNl bmRpZiAvKiBOT0xPQ0FMICovCi0KLSNpZm5kZWYgTk9YRkVSCi0gICAgICBjYXNlIFhZWEZFUjog ICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFRSQU5TRkVSICovCi0gICAgICAgIGlmICgoeSA9 IGNta2V5KHJtc2ZsZyA/IHJ0c3RhYiA6IHRzdGFiLCAvKiAob3IgUkVNT1RFIFNFVCBUUkFOU0ZF UikgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgcm1zZmxnID8gbnJ0cyA6IG50cywKLSAgICAg ICAgICAgICAgICAgICAgICAgIiIsImNoYXJhY3Rlci1zZXQiLHh4c3RyaW5nKSkgPCAwKSByZXR1 cm4oeSk7Ci0gICAgICAgIHN3aXRjaCAoeSkgewotI2lmZGVmIFhGUkNBTgotICAgICAgICAgIGNh c2UgWFlYX0NBTjogICAgICAgICAgICAgICAgIC8qIENBTkNFTExBVElPTiAqLwotICAgICAgICAg ICAgaWYgKCh6ID0gY21rZXkob25vZmYsMiwiIiwiIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHop OwotICAgICAgICAgICAgaWYgKHogPT0gMCkgeyAgICAgICAgICAgICAgIC8qIE9GRiAqLwotICAg ICAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICAg ICAgICAgIHhmcmNhbiA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg IGlmICgoeSA9IGNtbnVtKCJBU0NJSSBjb2RlIGZvciBjYW5jZWxsYXRpb24gY2hhcmFjdGVyIiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIsMTAsJngsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgICByZXR1 cm4oeSk7Ci0gICAgICAgICAgICAgICAgaWYgKHggPiAzMSAmJiB4ICE9IDEyNykgewotICAgICAg ICAgICAgICAgICAgICBwcmludGYoIkNhbmNlbCBjaGFyYWN0ZXIgbXVzdCBiZSAwLTMxIG9yIDEy N1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtbnVtKCJIb3cgbWFueSByZXF1aXJlZCB0byBj YXVzZSBjYW5jZWxsYXRpb24iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiwx MCwmeiwgeHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAg ICAgICAgICAgICAgaWYgKHogPCAyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiTnVt YmVyIG11c3QgYmUgMiBvciBncmVhdGVyXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu KC05KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0o KSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgICAgeGZyY2FuID0gMTsgICAgICAgICAg ICAgLyogQ0FOQ0VMTEFUSU9OIE9OICovCi0gICAgICAgICAgICAgICAgeGZyY2hyID0geDsgICAg ICAgICAgICAgLyogVXNpbmcgdGhpcyBjaGFyYWN0ZXIgKi8KLSAgICAgICAgICAgICAgICB4ZnJu dW0gPSB6OyAgICAgICAgICAgICAvKiBOZWVkaW5nIHRoaXMgbWFueSBvZiB0aGVtICovCi0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotI2VuZGlmIC8qIFhG UkNBTiAqLwotCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICAgICAgICBjYXNlIFhZWF9DU0U6ICAgICAg ICAgICAgICAgICAvKiBDSEFSQUNURVItU0VUICovCi0gICAgICAgICAgICBpZiAoKHkgPSBjbWtl eSh0Y3N0YWIsbnRjcywiIiwidHJhbnNwYXJlbnQiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAg ICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVy bih4KTsKLSAgICAgICAgICAgIGlmIChybXNmbGcpIHsKLSAgICAgICAgICAgICAgICBzc3RhdGUg PSBzZXRnZW4oJ1MnLCAiNDA1IiwgdGNzaW5mb1t5XS5kZXNpZ25hdG9yLCAiIik7Ci0gICAgICAg ICAgICAgICAgcmV0dXJuKChpbnQpIHNzdGF0ZSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg ICAgICAgICAgICAgIGV4dGVybiBpbnQgc19jc2V0LCBmY2hhcnNldCwgYXhjc2V0W10sIHRjc19z YXZlOwotICAgICAgICAgICAgICAgIHRzbGV2ZWwgPSAoeSA9PSBUQ19UUkFOU1ApID8gMCA6IDE7 IC8qIHRyYW5zZmVyIHN5bnRheCBsZXZlbCAqLwotCQl4ZnJ4bGEgPSB0c2xldmVsOwotICAgICAg ICAgICAgICAgIHRjaGFyc2V0ID0geTsgICAgICAgICAgIC8qIHRyYW5zZmVyIGNoYXJhY3RlciBz ZXQgKi8KLSAgICAgICAgICAgICAgICAvKiBTRU5EIENIQVJBQ1RFUi1TRVQgQVVUTyAqLwotICAg ICAgICAgICAgICAgIGlmICh0c2xldmVsID4gMCAmJiBzX2NzZXQgPT0gWE1PREVfQSkKLSAgICAg ICAgICAgICAgICAgIGlmICh5ID4gLTEgJiYgeSA8PSBNQVhUQ1NFVFMpCi0gICAgICAgICAgICAg ICAgICAgIGlmIChheGNzZXRbeV0gPiAtMSAmJiBheGNzZXRbeV0gPiBNQVhGQ1NFVFMpCi0gICAg ICAgICAgICAgICAgICAgICAgZmNoYXJzZXQgPSBheGNzZXRbeV07IC8qIEF1dG8tcGljayBmaWxl IGNoYXJzZXQgKi8KLSAgICAgICAgICAgICAgICBzZXR4bGF0eXBlKHRjaGFyc2V0LGZjaGFyc2V0 KTsgLyogVHJhbnNsYXRpb24gdHlwZSAqLwotCQl0Y3Nfc2F2ZSA9IC0xOwotICAgICAgICAgICAg ICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogTk9DU0VU UyAqLwotCi0gICAgICAgICAgY2FzZSBYWVhfTFNIOiAgICAgICAgICAgICAgICAgLyogTE9DS0lO Ry1TSElGVCAqLwotICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkobHN0YWIsbmxzLCIiLCJvbiIs eHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgIGlm ICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICAgICAgbHNjYXByID0gKHkg PT0gMSkgPyAxIDogMDsgIC8qIE9OOiByZXF1ZXN0ZWQgPSAxICovCi0gICAgICAgICAgICBsc2Nh cHUgPSAoeSA9PSAyKSA/IDIgOiAwOyAgLyogRk9SQ0VEOiAgdXNlZCA9IDEgKi8KLSAgICAgICAg ICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0KLS8qICNpZmRlZiBDS19YWVogKi8KLSAgICAgICAg ICBjYXNlIFhZWF9QUk86ICAgICAgICAgICAgICAgICAvKiBQcm90b2NvbCAqLwotI2lmbmRlZiBP UzIKLSAgICAgICAgICAgIGlmIChpbnNlcnZlcikgewotICAgICAgICAgICAgICAgIHByaW50Zigi P1NvcnJ5LCBvbmx5IEtlcm1pdCBwcm90b2NvbCBpcyBhdmFpbGFibGVcbiIpOwotICAgICAgICAg ICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0gICAg ICAgICAgICByZXR1cm4oc2V0cHJvdG8oKSk7Ci0vKiAjZW5kaWYgKi8gLyogQ0tfWFlaICovCi0K LSAgICAgICAgICBjYXNlIFhZWF9NT0Q6ICAgICAgICAgICAgICAgICAvKiBNb2RlICovCi0gICAg ICAgICAgICBpZiAoKHkgPSBjbWtleSh4ZnJtdGFiLDIsIiIsImF1dG9tYXRpYyIseHhzdHJpbmcp KSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgIGlmICgoeCA9IGNt Y2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICAgICAgaWYgKHJtc2ZsZykgewotICAgICAg ICAgICAgICAgIHNzdGF0ZSA9IHNldGdlbignUycsICI0MTAiLCB5ID09IFhNT0RFX0EgPyAiMCIg OiAiMSIsICIiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oKGludClzc3RhdGUpOwotICAgICAg ICAgICAgfQotICAgICAgICAgICAgZ194ZmVybW9kZSA9IHk7Ci0gICAgICAgICAgICB4ZmVybW9k ZSA9IHk7Ci0jaWZkZWYgTkVXRlRQCi0JICAgIGlmIChmdHBpc29wZW4oKSkgewkJLyogSWYgYW4g RlRQIGNvbm5lY3Rpb24gaXMgb3BlbiAqLwotCQlleHRlcm4gaW50IGZ0cF94ZmVybW9kZTsgLyog Y2hhbmdlIGl0cyB0cmFuc2ZlciBtb2RlIHRvbyAqLwotCQlmdHBfeGZlcm1vZGUgPSB4ZmVybW9k ZTsKLQkgICAgfQkgICAgICAKLSNlbmRpZgkvKiBORVdGVFAgKi8KLSAgICAgICAgICAgIHJldHVy bihzdWNjZXNzID0gMSk7Ci0KLSNpZm5kZWYgTk9MT0NBTAotICAgICAgICAgIGNhc2UgWFlYX0RJ UzogICAgICAgICAgICAgICAgIC8qIERpc3BsYXkgKi8KLSAgICAgICAgICAgIHJldHVybihkb3hk aXMoMSkpOwkJLyogMSA9PSBLZXJtaXQgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSAgICAg ICAgICBjYXNlIFhZWF9TTE86ICAgICAgICAgICAgICAgICAvKiBTbG93LXN0YXJ0ICovCi0gICAg ICAgICAgICByZXR1cm4oc2V0b24oJnNsb3N0YXJ0KSk7Ci0KLSNpZm5kZWYgTk9TUEwKLSAgICAg ICAgICBjYXNlIFhZWF9DUkM6ICAgICAgICAgICAgICAgICAvKiBDUkMgKi8KLSAgICAgICAgICAg IHJldHVybihzZXRvbigmZG9jcmMpKTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0gICAgICAgICAg Y2FzZSBYWVhfQkVMOiAgICAgICAgICAgICAgICAgLyogQmVsbCAqLwotICAgICAgICAgICAgcmV0 dXJuKHNldG9uKCZ4ZnJiZWwpKTsKLQotI2lmZGVmIFBJUEVTRU5ECi0gICAgICAgICAgY2FzZSBY WVhfUElQOiAgICAgICAgICAgICAgICAgLyogUGlwZXMgKi8KLSNpZm5kZWYgTk9QVVNICi0gICAg ICAgICAgICBpZiAobm9wdXNoKSB7Ci0jZW5kaWYgLyogTk9QVVNIICovCi0gICAgICAgICAgICAg ICAgcHJpbnRmKCJTb3JyeSwgYWNjZXNzIHRvIHBpcGVzIGlzIGRpc2FibGVkXG4iKTsKLSAgICAg ICAgICAgICAgICByZXR1cm4oLTkpOwotI2lmbmRlZiBOT1BVU0gKLSAgICAgICAgICAgIH0gZWxz ZQotI2VuZGlmIC8qIE5PUFVTSCAqLwotICAgICAgICAgICAgICByZXR1cm4oc2V0b24oJnVzZXBp cGVzKSk7Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLQotICAgICAgICAgIGNhc2UgWFlYX0lOVDog ICAgICAgICAgICAgICAgIC8qIEludGVycnVwdGlvbiAqLwotICAgICAgICAgICAgcmV0dXJuKHNl dG9uKCZ4ZnJpbnQpKTsKLQotICAgICAgICAgIGNhc2UgWFlYX1hMQToKLSAgICAgICAgICAgIHJl dHVybihzZXRvbigmeGZyeGxhKSk7ICAgICAvKiBUcmFuc2xhdGlvbiAqLwotCi0gICAgICAgICAg Y2FzZSBYWVhfTVNHOiB7Ci0gICAgICAgICAgICAgIGV4dGVybiBjaGFyICogeGZybXNnOwotICAg ICAgICAgICAgICBpZiAoKHggPSBjbXR4dCgiUHJvbXB0IHN0cmluZyIsIiIsJnMseHhzdHJpbmcp KSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgICBpZiAoISpz KSBzID0gTlVMTDsKLSAgICAgICAgICAgICAgbWFrZXN0cigmeGZybXNnLHMpOwotICAgICAgICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0JICB9Ci0JICBjYXNlIFhZWF9SUFQ6IHsKLQkg ICAgICBleHRlcm4gaW50IHdoZXJlZmxnOwotCSAgICAgIHJldHVybihzZXRvbigmd2hlcmVmbGcp KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybigt Mik7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSAgICB9Ci0KLSAgICBzd2l0Y2gg KHh4KSB7Ci0KLSNpZm5kZWYgTk9YTUlUCi0gICAgICBjYXNlIFhZWE1JVDogICAgICAgICAgICAg ICAgICAgICAgLyogU0VUIFRSQU5TTUlUICovCi0gICAgICAgIHJldHVybihzZXR4bWl0KCkpOwot I2VuZGlmIC8qIE5PWE1JVCAqLwotCi0jaWZuZGVmIE5PWEZFUgotI2lmbmRlZiBOT0NTRVRTCi0g ICAgICBjYXNlIFhZVU5DUzogICAgICAgICAgICAgICAgICAgICAgLyogVU5LTk9XTi1DSEFSQUNU RVItU0VUICovCi0gICAgICAgIGlmICgoeSA9IGNta2V5KGlmZHRhYiwyLCIiLCJkaXNjYXJkIix4 eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDAp IHJldHVybih4KTsKLSAgICAgICAgdW5rY3MgPSB5OwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDEpOwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRl ZiBOT1BVU0gKLSNpZmRlZiBVTklYCi0gICAgICBjYXNlIFhZV0lMRDogICAgICAgICAgICAgICAg ICAgICAgLyogV0lMRENBUkQtRVhQQU5TSU9OICovCi0gICAgICAgIGlmICgoeSA9IGNta2V5KHdp bGR0YWIsbndpbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICJXaWxkY2FyZCBleHBhbnNpb24g b3B0aW9uIiwib24iLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih5KTsKLSAgICAg ICAgaWYgKCh6ID0gY21rZXkod2RvdHRhYiwKLSAgICAgICAgICAgICAgICAgICAgICAgMiwKLSAg ICAgICAgICAgICAgICAgICAgICAgIndoZXRoZXIgdG8gbWF0Y2ggZmlsZW5hbWVzIHRoYXQgc3Rh cnQgd2l0aCBcIi5cIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICIvbm8tbWF0Y2gtZG90LWZp bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpCi0gICAgICAgICAgICAgKSA8 IDApCi0gICAgICAgICAgcmV0dXJuKHopOwotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDAp IHJldHVybih4KTsKLSAgICAgICAgaWYgKG5vcHVzaCkgewotICAgICAgICAgICAgaWYgKHkgPiAw KSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJTaGVsbCBleHBhbnNpb24gaXMgZGlzYWJsZWRc biIpOwotICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgIH0KLQlzd2l0Y2ggKHkpIHsKLQkgIGNhc2UgV0lMRF9PTjoKLQkgICAgd2lsZGVu YSA9IDE7IAotCSAgICBicmVhazsKLQkgIGNhc2UgV0lMRF9PRkY6Ci0JICAgIHdpbGRlbmEgPSAw OyAKLQkgICAgYnJlYWs7Ci0JICBjYXNlIFdJTERfS0VSOgotCSAgICB3aWxkeHBhbmQgPSAwOyAJ CS8qIFRoZXNlIGFyZSB0aGUgcHJldmlvdXMgKi8KLQkgICAgYnJlYWs7CQkJLyogaGFyZHdpcmVk IHZhbHVlcyAqLwotCSAgY2FzZSBXSUxEX1NIRToKLQkgICAgd2lsZHhwYW5kID0gMTsgCi0JICAg IGJyZWFrOwotCX0KLSAgICAgICAgbWF0Y2hkb3QgPSB6OwotICAgICAgICByZXR1cm4oc3VjY2Vz cyA9IDEpOwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBOT1BVU0ggKi8KLQotI2lmbmRl ZiBOT1hGRVIKLSAgICAgIGNhc2UgWFlXSU5EOiAgICAgICAgICAgICAgICAgICAgICAvKiBXSU5E T1ctU0xPVFMgKi8KLSAgICAgICAgaWYgKHByb3RvY29sID09IFBST1RPX0spIHsKLSAgICAgICAg ICAgIHkgPSBjbW51bSgiV2luZG93IHNpemUgZm9yIEtlcm1pdCBwcm90b2NvbCwgMSB0byAzMiIs Ci0gICAgICAgICAgICAgICAgICAgICAgIjEiLCAxMCwgJngsIHh4c3RyaW5nKTsKLSAgICAgICAg ICAgIHkgPSBzZXRudW0oJnoseCx5LE1BWFdTKTsgICAvKiA9PSAzMiAqLwotICAgICAgICB9Ci0j aWZkZWYgQ0tfWFlaCi0gICAgICAgIGVsc2UgaWYgKHByb3RvY29sID09IFBST1RPX1opIHsKLSAg ICAgICAgICAgIHkgPSBjbW51bSgiV2luZG93IHNpemUgZm9yIFpNT0RFTSBwcm90b2NvbCwgMCB0 byA2NTUzNSIsCi0gICAgICAgICAgICAgICAgICAgICAgIjAiLCAxMCwgJngsIHh4c3RyaW5nKTsK LSAgICAgICAgICAgIHkgPSBzZXRudW0oJnoseCx5LDY1NTM1KTsKLSAgICAgICAgfQotI2VuZGlm IC8qIENLX1hZWiAqLwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHkgPSBjbW51bSgiV2lu ZG93IHNpemUgZm9yIGN1cnJlbnQgcHJvdG9jb2wiLAotICAgICAgICAgICAgICAgICAgICAgICIi LCAxMCwgJngsIHh4c3RyaW5nKTsKLSAgICAgICAgICAgIHkgPSBzZXRudW0oJnoseCx5LDY1NDcy KTsgICAvKiBEb2Vzbid0IG1hdHRlciAtIHdlIHdvbid0IHVzZSBpdCAqLwotICAgICAgICB9Ci0g ICAgICAgIGlmICh5IDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBpZiAocHJvdG9jb2wgPT0gUFJP VE9fSykgewotICAgICAgICAgICAgaWYgKHogPCAxKQotICAgICAgICAgICAgICB6ID0gMTsKLSAg ICAgICAgfQotI2lmZGVmIENLX1hZWgotICAgICAgICBlbHNlIGlmIChwcm90b2NvbCA9PSBQUk9U T19aKSB7Ci0gICAgICAgICAgICAvKiBabW9kZW0gd2luZG93aW5nIGlzIGNsb3NlciB0byBLZXJt aXQgcGFja2V0IGxlbmd0aCAqLwotICAgICAgICAgICAgLyogdGhhbiBLZXJtaXQgd2luZG93IHNp emUuICBJZiBXaW5kb3cgc2l6ZSBpcyB6ZXJvICAgKi8KLSAgICAgICAgICAgIC8qIGFuIGVuZCBv ZiBmcmFtZSBhbmQgQ1JDIGlzIHNlbnQgb25seSBhdCB0aGUgZW5kIG9mICovCi0gICAgICAgICAg ICAvKiB0aGUgZmlsZSAoZGVmYXVsdCkuICBPdGhlcndpc2UsIGFuIEVuZCBvZiBGcmFtZSAgICAq LwotICAgICAgICAgICAgLyogYW5kIENSQyBhcmUgc2VudCBhZnRlciBXaW5kb3cgU2l6ZSBudW1i ZXIgb2YgYnl0ZXMgKi8KLSAgICAgICAgICAgIGlmICh6IDwgMCkgICAgICAgICAgICAgICAgICAv KiBEaXNhYmxlIHdpbmRvd2luZyAgKi8KLSAgICAgICAgICAgICAgeiA9IDA7Ci0gICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgICBwcmludGYoIj9TRVQgV0lORE9XIGRvZXMgbm90IGFwcGx5IHRv ICVzIHByb3RvY29sXG4iLAotICAgICAgICAgICAgICAgICAgIHB0YWJbcHJvdG9jb2xdLnBfbmFt ZQotICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS19YWVogKi8K LQotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgLyogVGhpcyBpcyB0YWtlbiBjYXJlIG9mIGF1dG9t YXRpY2FsbHkgbm93IGluIHByb3RvY29sIG5lZ290aWF0aW9uICovCi0gICAgICAgIGlmIChtYXh0 cnkgPCB6KSB7Ci0gICAgICAgICAgICBwcmludGYoIj9XaW5kb3cgc2xvdHMgbXVzdCBiZSBsZXNz IHRoYW4gcmV0cnkgbGltaXRcbiIpOwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsK LSAgICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgaWYgKHByb3RvY29sID09 IFBST1RPX0sgJiYgcm1zZmxnKSB7IC8qIFNldCByZW1vdGUgd2luZG93IHNpemUgKi8KLSAgICAg ICAgICAgIHdzbG90ciA9IHo7ICAgICAgICAgICAgICAgICAvKiBTZXQgbG9jYWwgd2luZG93IHNp emUgdG9vICovCi0gICAgICAgICAgICBwdGFiW3Byb3RvY29sXS53aW5zaXplID0gd3Nsb3RyOwot ICAgICAgICAgICAgc3N0YXRlID0gc2V0Z2VuKCdTJywgIjQwNiIsIGNraXRvYSh6KSwgIiIpOwot ICAgICAgICAgICAgcmV0dXJuKChpbnQpIHNzdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgd3Ns b3RyID0gejsgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgcmVxdWVzdGVkIHdpbmRvdyBzaXpl IGhlcmUgKi8KLSAgICAgICAgcHRhYltwcm90b2NvbF0ud2luc2l6ZSA9IHdzbG90cjsgLyogYW5k IGluIHByb3RvY29sLXNwZWNpZmljIHRhYmxlICovCi0gICAgICAgIGlmIChwcm90b2NvbCA9PSBQ Uk9UT19LKSB7ICAgICAgLyogQW5kIGZvciBLZXJtaXQgb25seS4uLiAqLwotICAgICAgICAgICAg c3djYXByID0gKHdzbG90ciA+IDEpID8gMSA6IDA7IC8qIHNldCB3aW5kb3cgYml0IGluIGNhcGFz IHdvcmQgKi8KLSAgICAgICAgICAgIGlmICh3c2xvdHIgPiAxKSB7ICAgICAgICAgICAvKiBXaW5k b3cgc2l6ZSA+IDE/ICovCi0gICAgICAgICAgICAgICAgLyogTWF5YmUgYWRqdXN0IHBhY2tldCBz aXplICovCi0gICAgICAgICAgICAgICAgeSA9IGFkanBrbCh1cnBzaXosd3Nsb3RyLGJpZ3Jic2l6 KTsKLSAgICAgICAgICAgICAgICBpZiAoeSAhPSB1cnBzaXopIHsgICAgICAvKiBEaWQgaXQgY2hh bmdlPyAqLwotICAgICAgICAgICAgICAgICAgICB1cnBzaXogPSB5OwotICAgICAgICAgICAgICAg ICAgICBpZiAobXNnZmxnKQotICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigKLSIgQWRqdXN0 aW5nIHJlY2VpdmUgcGFja2V0LWxlbmd0aCB0byAlZCBmb3IgJWQgd2luZG93IHNsb3RzXG4iLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cnBzaXosCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHdzbG90cgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDEpOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgIH0KLQotICAgIHN3aXRjaCAoeHgp IHsKLQotI2lmbmRlZiBOT1NQTAotICAgICAgY2FzZSBYWU9VVFA6ICAgICAgICAgICAgICAgICAg ICAgIC8qIE9VVFBVVCBjb21tYW5kIHBhcmFtZXRlcnMgKi8KLSAgICAgICAgaWYgKCh5ID0gY21r ZXkob3V0cHRhYixub3V0cHRhYiwiT1VUUFVUIGNvbW1hbmQgcGFyYW1ldGVyIiwicGFjaW5nIiwK LSAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJu KHkpOwotICAgICAgICBzd2l0Y2goeSkgeyAgICAgICAgICAgICAgICAgICAgIC8qIFdoaWNoIHBh cmFtZXRlciAqLwotICAgICAgICAgIGNhc2UgT1VUX1BBQzogICAgICAgICAgICAgICAgIC8qIFBB Q0lORyAqLwotICAgICAgICAgICAgeSA9IGNtbnVtKCJNaWxsaXNlY29uZHMgdG8gcGF1c2UgYmV0 d2VlbiBlYWNoIE9VVFBVVCBjaGFyYWN0ZXIiLAotICAgICAgICAgICAgICAgICAgICAgICIxMDAi LCAxMCwmeCx4eHN0cmluZyk7Ci0gICAgICAgICAgICB5ID0gc2V0bnVtKCZ6LHgseSwxNjM4Myk7 ICAgLyogVmVyaWZ5IGFuZCBnZXQgY29uZmlybWF0aW9uICovCi0gICAgICAgICAgICBpZiAoeSA8 IDApIHJldHVybih5KTsKLSAgICAgICAgICAgIGlmICh6IDwgMCkgeiA9IDA7ICAgICAgICAgICAv KiAoc2F2ZSBzb21lIHNwYWNlKSAqLwotICAgICAgICAgICAgcGFjaW5nID0gejsKLSAgICAgICAg ICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICAgICAgY2FzZSBPVVRfRVNDOiAgICAgICAg ICAgICAgICAgLyogU3BlY2lhbC1lc2NhcGVzICovCi0gICAgICAgICAgICByZXR1cm4oc2V0b24o Jm91dGVzYykpOwotICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIChz aG91bGRuJ3QgaGFwcGVuKSAqLwotICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgfQot I2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZmRlZiBDS19TUEVFRAotICAgICAgY2FzZSBYWVFDVEw6 IHsKLSAgICAgICAgICBzaG9ydCAqcDsKLSAgICAgICAgICBpbnQgeno7Ci0gICAgICAgICAgaWYg KCh6ID0gY21rZXkoY3RsdGFiLDIsICJjb250cm9sLWNoYXJhY3RlciBwcmVmaXhpbmcgb3B0aW9u IiwiIgotICAgICAgICAgICAgICAgICAgICAgICAgICx4eHN0cmluZykpIDwgMCkKLSAgICAgICAg ICAgIHJldHVybih6KTsKLSAgICAgICAgICAvKiBNYWtlIHNwYWNlIGZvciBhIHRlbXBvcmFyeSBj b3B5IG9mIHRoZSBwcmVmaXhpbmcgdGFibGUgKi8KLQotICAgICAgICAgIHAgPSAoc2hvcnQgKilt YWxsb2MoMjU2ICogc2l6ZW9mKHNob3J0KSk7Ci0gICAgICAgICAgaWYgKCFwKSB7Ci0gICAgICAg ICAgICAgIHByaW50ZigiP0ludGVybmFsIGVycm9yIC0gbWFsbG9jIGZhaWx1cmVcbiIpOwotICAg ICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgIH0KLSAgICAgICAgICBmb3IgKGkgPSAw OyBpIDwgMjU2OyBpKyspIHBbaV0gPSBjdGxwW2ldOyAvKiBDb3B5IGN1cnJlbnQgdGFibGUgKi8K LQotICAgICAgICAgIHN3aXRjaCAoeikgewotICAgICAgICAgICAgY2FzZSAwOiAgICAgICAgICAg ICAgICAgICAgIC8qIFVOUFJFRklYRUQgY29udHJvbCBjaGFyYWN0ZXIgKi8KLSAgICAgICAgICAg IGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAvKiBQUkVGSVhFRCBjb250cm9sIGNoYXJhY3Rl ciAqLwotICAgICAgICAgICAgICB3aGlsZSAoMSkgeyAgICAgICAgICAgICAgIC8qIENvbGxlY3Qg YSBsaXN0IG9mIG51bWJlcnMgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgICAgICAgICAgIHhf aWZudW0gPSAxOyAgICAgICAgICAvKiBUdXJuIG9mZiBjb21wbGFpbnRzIGZyb20gZXZhbCgpICov Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICAgICAgICAgICAgICAgIGlmICgoeCA9IGNtbnVtKCh6 ID09IDApID8KLSJcbiBOdW1lcmljIEFTQ0lJIHZhbHVlIG9mIGNvbnRyb2wgY2hhcmFjdGVyIHRo YXQgbmVlZHMgTk8gcHJlZml4LFxuXAotIG9yIHRoZSB3b3JkIFwiYWxsXCIsIG9yIGNhcnJpYWdl IHJldHVybiB0byBjb21wbGV0ZSB0aGUgbGlzdCIgOgotIlxuIE51bWVyaWMgQVNDSUkgdmFsdWUg b2YgY29udHJvbCBjaGFyYWN0ZXIgdGhhdCBNVVNUIEJFIHByZWZpeGVkLFxuXAotIG9yIHRoZSB3 b3JkIFwiYWxsXCIsIG9yIGNhcnJpYWdlIHJldHVybiB0byBjb21wbGV0ZSB0aGUgbGlzdCIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwxMCwmeSx4eHN0cmluZwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkgPCAwKSB7Ci0jaWZuZGVmIE5PU1BMCi0gICAg ICAgICAgICAgICAgICAgICAgeF9pZm51bSA9IDA7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICAg ICAgICAgICAgICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg ICAgIGlmICh4ID09IC0yKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwKSB7IGZy ZWUoKGNoYXIgKilwKTsgcCA9IE5VTEw7IH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGVi dWcoRjExMCwiU0VUIENPTlRST0wgYXRtYnVmIixhdG1idWYsMCk7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgIGlmICghY2tzdHJjbXAoYXRtYnVmLCJhbGwiLDMsMCkgfHwgLyogIkFMTCIgKi8K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFja3N0cmNtcChhdG1idWYsImFsIiwyLDAp IHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY2tzdHJjbXAoYXRtYnVmLCJhIiwx LDApKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8 IDApIC8qIEdldCBjb25maXJtYXRpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKHgpOwotCQkJICAgICAgcHJlZml4aW5nID0geiA/IFBYX0FMTCA6IFBYX05PTjsK LQkJCSAgICAgIHNldHByZWZpeChwcmVmaXhpbmcpOwotCQkJICAgICAgcmV0dXJuKHN1Y2Nlc3Mg PSAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsJLyogTm90IG51bWJlciwg bm90IEFMTCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIj9QbGVhc2Ugc3BlY2lmeSBhIG51bWJlciBvciB0 aGUgd29yZCBBTExcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05 KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwKSBmcmVlKChjaGFyICopcCk7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0jaWZuZGVmIE5PU1BMCi0gICAgICAgICAgICAg ICAgICB4X2lmbnVtID0gMDsKLSNlbmRpZiAvKiBOT1NQTCAqLwotI2lmZGVmIFVOUFJFRklYWkVS TwotICAgICAgICAgICAgICAgICAgenogPSAwOwotI2Vsc2UKLSNpZm5kZWYgT1MyCi0gICAgICAg ICAgICAgICAgICB6eiA9IDEgLSB6OwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgIHp6ID0gMDsg ICAgICAgICAgICAgICAvKiBBbGxvdyAwIChidXQgb25seSBmb3IgWm1vZGVtKSAqLwotI2VuZGlm IC8qIE9TMiAqLwotI2VuZGlmIC8qIFVOUFJFRklYWkVSTyAqLwotCi0gICAgICAgICAgICAvKiBw cmludGYoInggPSAlZCwgeSA9ICVkLCB6ID0gJWQsIHp6ID0gJWRcbiIsIHgseSx6LHp6KTsgKi8K LQotICAgICAgICAgICAgICAgICAgaWYgKCh5ID4gIDMxICYmIHkgPCAxMjcpIHx8IC8qIEEgc3Bl Y2lmaWMgbnVtZXJpYyB2YWx1ZSAqLwotICAgICAgICAgICAgICAgICAgICAgICh5ID4gMTU5ICYm IHkgPCAyNTUpIHx8IC8qIENoZWNrIHRoYXQgaXQgaXMgYSB2YWxpZCAqLwotICAgICAgICAgICAg ICAgICAgICAgICh5IDwgenopIHx8ICAgICAgIC8qIGNvbnRyb2wgY29kZS4gKi8KLSAgICAgICAg ICAgICAgICAgICAgICAoeSA+IDI1NSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICBwcmludGYo Ij9WYWx1ZXMgYWxsb3dlZCBhcmU6ICVkLTMxLCAxMjctMTU5LCAyNTVcbiIsenopOwotICAgICAg ICAgICAgICAgICAgICAgIGlmIChwKSBmcmVlKChjaGFyICopcCk7Ci0gICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg IHggPSB5ICYgMTI3OyAgICAgICAgICAvKiBHZXQgNy1iaXQgdmFsdWUgKi8KLSAgICAgICAgICAg ICAgICAgIGlmICh6ID09IDApIHsgICAgICAgICAvKiBJZiB0aGV5IGFyZSBzYXlpbmcgaXQgaXMg c2FmZS4uLiAqLwotICAgICAgICAgICAgICAgICAgICAgIC8qIElmIGZsb3cgY29udHJvbCBpcyBY b24vWG9mZiAqLwotICAgICAgICAgICAgICAgICAgICAgIGlmICgoKGZsb3cgPT0gRkxPX1hPTlgp ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBYT04gJiBYT0ZGIGNoYXJzIG5vdCBz YWZlLiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgKHggPT0gWE9OIHx8IHggPT0gWE9G RikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICkgewotICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAobXNnZmxnKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTb3JyeSwgbm90IHdoaWxlIFhvbi9Yb2ZmIGlz IGluIGVmZmVjdC5cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocCkgZnJlZSgo Y2hhciAqKXApOwotICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAg ICAgICAgICAgICAgICAgIH0KLSNpZmRlZiBUTkNPREUKLSAgICAgICAgICAgICAgICAgICAgICBl bHNlIGlmIChuZXR3b3JrICYmIElTX1RFTE5FVCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJiYgKHkgPT0gQ1IgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KHVuc2lnbmVkKSB5ID09ICh1bnNpZ25lZCkgMjU1KSkgewotICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAobXNnZmxnKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiU29y cnksIG5vdCBvbiBhIFRFTE5FVCBjb25uZWN0aW9uLlxuIik7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChwKSBmcmVlKChjaGFyICopcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybigtOSk7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIFROQ09ERSAq LwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgcFt5XSA9IChjaGFyKSB6 OyAgICAgIC8qIEFsbCBPSywgc2V0IGZsYWcgKi8KLSAgICAgICAgICAgICAgfSAvKiBFbmQgb2Yg d2hpbGUgbG9vcCAqLwotLyoKLSAgR2V0IGhlcmUgb25seSBpZiB0aGV5IGhhdmUgbWFkZSBubyBt aXN0YWtlcy4gIENvcHkgdGVtcG9yYXJ5IHRhYmxlIGJhY2sgdG8KLSAgcGVybWFuZW50IG9uZSwg dGhlbiBmcmVlIHRlbXBvcmFyeSB0YWJsZSBhbmQgcmV0dXJuIHN1Y2Nlc3NmdWxseS4KLSovCi0g ICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgY3RscFtpXSA9IHBbaV07Ci0g ICAgICAgICAgICAgIGlmIChwKSBmcmVlKChjaGFyICopcCk7Ci0gICAgICAgICAgICAgIGlmICh6 ID4gMCkgY2xlYXJycSA9IDA7ICAgLyogMTk5IChzZWUgU0VUIFBSRUZJWElORykgKi8KLSAgICAg ICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg ICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgICAgfQotICAgICAgfQotI2VuZGlmIC8qIENL X1NQRUVEICovCi0gICAgfQotCi0gICAgc3dpdGNoICh4eCkgewotCi0jaWZuZGVmIE5PWEZFUgot ICAgICAgY2FzZSBYWVJFUFQ6Ci0gICAgICAgIGlmICgoeSA9IGNta2V5KHJwdHRhYiwyLAotICAg ICAgICAgICAgICAgICAgICAgICAicmVwZWF0LWNvdW50IGNvbXByZXNzaW9uIHBhcmFtZXRlciIs IiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICBzd2l0Y2go eSkgewotICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gc2V0 b24oJnJwdGVuYSkpOyAvKiBSRVBFQVQgQ09VTlRTID0gT04sIE9GRiAqLwotICAgICAgICAgIGNh c2UgMTogICAgICAgICAgICAgICAgICAgICAgIC8qIFJFUEVBVCBNSU5JTlVNIG51bWJlciAqLwot ICAgICAgICAgICAgcHJpbnRmKCIobm90IGltcGxlbWVudGVkIHlldCwgbm90aGluZyBoYXBwZW5z KVxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgIGNhc2UgMjogICAgICAg ICAgICAgICAgICAgICAgIC8qIFJFUEVBVCBQUkVGSVggY2hhciAqLwotICAgICAgICAgICAgaWYg KCh4ID0gY21udW0oIkFTQ0lJIHZhbHVlIiwiIiwxMCwmeix4eHN0cmluZykpIDwgMCkKLSAgICAg ICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSBy ZXR1cm4oeCk7Ci0gICAgICAgICAgICBpZiAoKHogPiAzMiAmJiB6IDwgNjMpIHx8ICh6ID4gOTUg JiYgeiA8IDEyNykpIHsKLSAgICAgICAgICAgICAgICBpZiAoeSA9PSAxKSBycHRtaW4gPSAoQ0hB UikgejsgZWxzZSBteXJwdHEgPSAoQ0hBUikgejsKLSAgICAgICAgICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDEpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcmludGYo Ij9JbGxlZ2FsIHZhbHVlIGZvciBwcmVmaXggY2hhcmFjdGVyXG4iKTsKLSAgICAgICAgICAgICAg ICByZXR1cm4oLTkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLyogTk9YRkVS ICovCi0KLSNpZm5kZWYgTk9TUEwKLSAgICAgIGNhc2UgWFlBTFJNOiB7Ci0jaWZuZGVmIENPTU1F TlQKLSAgICAgICAgICBpbnQgeXk7Ci0gICAgICAgICAgbG9uZyB6ejsKLSAgICAgICAgICB6eiA9 IC0xTDsKLSAgICAgICAgICB5eSA9IHhfaWZudW07Ci0gICAgICAgICAgeF9pZm51bSA9IDE7ICAg ICAgICAgICAgICAgICAgLyogVHVybiBvZmYgaW50ZXJuYWwgY29tcGxhaW50cyAqLwotICAgICAg ICAgIHkgPSBjbW51bSgiU2Vjb25kcyBmcm9tIG5vdywgb3IgdGltZSBvZiBkYXkgYXMgaGg6bW06 c3MiLAotICAgICAgICAgICAgICAgICAgICAiMCIgLDEwLCAmeCwgeHhzdHJpbmcpOwotICAgICAg ICAgIHhfaWZudW0gPSB5eTsKLSAgICAgICAgICBpZiAoeSA8IDApIHsKLSAgICAgICAgICAgICAg aWYgKHkgPT0gLTIpIHsgICAgICAgICAgICAvKiBJbnZhbGlkIG51bWJlciBvciBleHByZXNzaW9u ICovCi0gICAgICAgICAgICAgICAgICB6eiA9IHRvZDJzZWMoYXRtYnVmKTsgLyogQ29udmVydCB0 byBzZWNzIHNpbmNlIG1pZG5pZ2h0ICovCi0gICAgICAgICAgICAgICAgICBpZiAoenogPCAwTCkg ewotICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP051bWJlciwgZXhwcmVzc2lvbiwgb3Ig dGltZSBvZiBkYXkgcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAgICAgICAgICAgIHJldHVybigt OSk7Ci0gICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgIGNo YXIgbm93WzMyXTsgICAgIC8qIEN1cnJlbnQgdGltZSAqLwotICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKnA7Ci0gICAgICAgICAgICAgICAgICAgICAgbG9uZyB0bm93OwotICAgICAgICAgICAg ICAgICAgICAgIHAgPSBub3c7Ci0gICAgICAgICAgICAgICAgICAgICAgenRpbWUoJnApOwotICAg ICAgICAgICAgICAgICAgICAgIHRub3cgPSBhdG9sKHArMTEpICogMzYwMEwgKwotICAgICAgICAg ICAgICAgICAgICAgICAgYXRvbChwKzE0KSAqIDYwTCArIGF0b2wocCsxNyk7Ci0gICAgICAgICAg ICAgICAgICAgICAgaWYgKHp6IDwgdG5vdykgICAgLyogVXNlcidzIHRpbWUgYmVmb3JlIG5vdyAq LwotICAgICAgICAgICAgICAgICAgICAgICAgenogKz0gODY0MDBMOyAgIC8qIFNvIG1ha2UgaXQg dG9tb3Jyb3cgKi8KLSAgICAgICAgICAgICAgICAgICAgICB6eiAtPSB0bm93OyAgICAgICAvKiBT ZWNvbmRzIGZyb20gbm93LiAqLwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9 IGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgfQotICAgICAgICAg IGlmICh4IDwgMCkgewotICAgICAgICAgICAgICBwcmludGYoIj9BbGFybSB0aW1lIGlzIGluIHRo ZSBwYXN0LlxuIik7Ci0gICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgfQotICAg ICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICAgIGlmICh6 eiA+IC0xTCkgeyAgICAgICAgICAgICAgIC8qIFRpbWUgb2YgZGF5IGdpdmVuPyAqLwotICAgICAg ICAgICAgICB4ID0geno7Ci0gICAgICAgICAgICAgIGlmICh6eiAhPSAobG9uZykgeCkgewotICAg ICAgICAgICAgICAgICAgcHJpbnRmKAotIlNvcnJ5LCBhcml0aG1ldGljIG92ZXJmbG93IC0gaGg6 bW06c3Mgbm90IHVzYWJsZSBvbiB0aGlzIHBsYXRmb3JtLlxuIgotICAgICAgICAgICAgICAgICAg ICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybihzZXRhbGFybSgobG9uZyl4KSk7Ci0gICAg ICB9Ci0jZWxzZQotLyoKLSAgVGhpcyBpcyB0byBhbGxvdyBsb25nIHZhbHVlcyB3aGVyZSBpbnQg YW5kIGxvbmcgYXJlIG5vdCB0aGUgc2FtZSwgZS5nLgotICBvbiAxNi1iaXQgc3lzdGVtcy4gIEJ1 dCBzb21ldGhpbmcgaXMgd3Jvbmcgd2l0aCBpdC4KLSovCi0gICAgICAgIGlmICgoeSA9IGNtdHh0 KCJzZWNvbmRzIGZyb20gbm93IiwgIjAiLCAmcywgeHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAg cmV0dXJuKHkpOwotICAgICAgICBpZiAocmRpZ2l0cyhzKSkgewotICAgICAgICAgICAgcmV0dXJu KHNldGFsYXJtKGF0b2wocykpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHByaW50 ZigiJXMgLSBub3QgYSBudW1iZXJcbiIscyk7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAg ICAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5k ZWYgTk9YRkVSCi0gICAgICBjYXNlIFhZUFJPVE86Ci0gICAgICAgIHJldHVybihzZXRwcm90bygp KTsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotLyoKLSAgQy1LZXJtaXQgdW5wcmVmaXhlcyBjb250 cm9sIGNoYXJhY3RlcnMgYXV0b21hdGljYWxseSBvbiBuZXR3b3JrIGNvbm5lY3Rpb25zCi0gIGlm IENMRUFSLUNIQU5ORUwgaXMgT04sIHdoaWNoIGl0IGlzIGJ5IGRlZmF1bHQuICBCdXQgbm90IGFs bCBuZXR3b3JrCi0gIGNvbm5lY3Rpb25zIGFyZSB0cmFuc3BhcmVudCB0byBhbGwgY29udHJvbCBj aGFyYWN0ZXJzLiAgRm9yIGV4YW1wbGUsIHRoZQotICBERUMtMjAsIGV2ZW4gd2hlbiB5b3UgVEVM TkVUIHRvIGl0LCBpcyBzZW5zaXRpdmUgdG8gQ3RybC1PIGFuZCBDdHJsLVQuCi0gIElmIHlvdSB0 ZWxsIEMtS2VybWl0IHRvIFNFVCBDT05UUk9MIFBSRUZJWCAxNSBhbmQvb3IgMjAsIGl0IGRvZXNu J3QgaGVscAotICBiZWNhdXNlIENMRUFSLUNIQU5ORUwgaXMgc3RpbGwgaW4gZWZmZWN0LiAgSWYg dGhlIHVzZXIgZ29lcyB0byB0aGUgdHJvdWJsZQotICB0byBzZXQgdXAgc29tZSBwcmVmaXhpbmcs IHRoZW4gS2VybWl0IHNob3VsZCBkbyB3aGF0IHRoZSB1c2VyIHNhaWQuICBJbgotICBDLUtlcm1p dCA3LjEgQWxwaGEuMDMgd2UgY2hhbmdlIHRoZSBjb2RlIHRvIHNldCBjbGVhcnJxIHRvIDAgaWYg dGhlIHVzZXIKLSAgZ2l2ZXMgYSBTRVQgUFJFRklYSU5HIG9yIFNFVCBDT05UUk9MIFBSRUZJWCBj b21tYW5kLgotKi8KLQotI2lmZGVmIENLX1NQRUVECi0gICAgICBjYXNlIFhZUFJFRklYOiB7Ci0j aWZkZWYgQ09NTUVOVAotICAgICAgICAgIGV4dGVybiBpbnQgY2xlYXJycTsKLSNlbmRpZiAvKiBD T01NRU5UICovCi0gICAgICAgICAgaWYgKCh6ID0gY21rZXkocGZ4dGFiLCA0LCAiY29udHJvbC1j aGFyYWN0ZXIgcHJlZml4aW5nIG9wdGlvbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIiIs IHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuKHopOwotICAgICAgICAgIGlmICgo eCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICAgIGNsZWFycnEgPSAwOyAgICAg ICAgICAgICAgICAgIC8qIDE5OSAqLwotICAgICAgICAgIHNldHByZWZpeCh6KTsKLSNpZmRlZiBD T01NRU5UCi0gICAgICAgICAgaWYgKGhpbnRzICYmICh6ID09IFBYX0FMTCB8fCB6ID09IFBYX0NB VSkgJiYgY2xlYXJycSkgewotICAgICAgICBwcmludGYoIkhpbnQ6IFVzZSBTRVQgQ0xFQVItQ0hB Tk5FTCBPRkYgdG8gZGlzYWJsZSBuZWdvdGlhdGlvbiBvZlxuIik7Ci0gICAgICAgIHByaW50Zigi ICAgICAgU0VUIFBSRUZJWElORyBOT05FIGR1cmluZyBmaWxlIHRyYW5zZmVycyBvbiByZWxpYWJs ZVxuIik7Ci0gICAgICAgIHByaW50ZigiICAgICAgY29ubmVjdGlvbnMuXG4iKTsKLSAgICAgICAg ICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7 Ci0gICAgICB9Ci0jZW5kaWYgLyogQ0tfU1BFRUQgKi8KLQotI2lmbmRlZiBOT1NQTAotICAgICAg Y2FzZSBYWUxPR0lOOgotICAgICAgICBpZiAoKHogPSBjbWtleShsb2dpbnRhYiwgMywgInZhbHVl IGZvciBsb2dpbiBzY3JpcHQiLCJ1c2VyaWQiLAotICAgICAgICAgICAgICAgICAgICAgICB4eHN0 cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeik7Ci0gICAgICAgIHggPSBjbWRncXVvKCk7 Ci0gICAgICAgIGlmICh6ID09IExPR0lfUFNXKQotICAgICAgICAgIGNtZHNxdW8oMCk7Ci0gICAg ICAgIGlmICgoeSA9IGNtdHh0KCJ0ZXh0IiwiIiwgJnMsIE5VTEwpKSA8IDApIHsKLSAgICAgICAg ICAgIGNtZHNxdW8oeCk7Ci0gICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgIH0KLSAgICAg ICAgY21kc3F1byh4KTsKLSNpZmRlZiBJS1NECi0gICAgICAgIGlmIChpbnNlcnZlcikKLSAgICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgICAgcyA9 IGJyc3RyaXAocyk7Ci0gICAgICAgIGlmICgoaW50KXN0cmxlbihzKSA+IDYzKSB7Ci0gICAgICAg ICAgICBwcmludGYoIlNvcnJ5LCB0b28gbG9uZ1xuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTkp OwotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCh6KSB7Ci0gICAgICAgICAgY2FzZSBMT0dJX1VJ RDoKLSAgICAgICAgICAgIGNrc3RybmNweSh1aWRidWYscyxVSURCVUZMRU4pOwotICAgICAgICAg ICAgc2xfdWlkX3NhdmVkID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug TE9HSV9QU1c6Ci0gICAgICAgICAgICBja3N0cm5jcHkocHdidWYscyxQV0JVRkwpOwotICAgICAg ICAgICAgaWYgKHB3YnVmWzBdKSB7Ci0gICAgICAgICAgICAgICAgcHdmbGcgPSAxOwotI2lmZGVm IE9TMgotICAgICAgICAgICAgICAgIHB3Y3J5cHQgPSAxOwotI2Vsc2UgLyogT1MyICovCi0gICAg ICAgICAgICAgICAgcHdjcnlwdCA9IDA7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICB9 Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIExPR0lfUFJNOgotICAgICAgICAg ICAgY2tzdHJuY3B5KHBybWJ1ZixzLFBXQlVGTCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu KHN1Y2Nlc3MgPSAxKTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgIH0KLQotICAgIHN3aXRjaCAo eHgpIHsKLQotICAgICAgY2FzZSBYWVNUQVJUVVA6Ci0gICAgICAgIGlmICgoeSA9IGNta2V5KGlm ZHRhYiwyLCIiLCJkaXNjYXJkIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBp ZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgRGVsZXRlU3RhcnR1cEZp bGUgPSAoeSAhPSAwKSA/IDAgOiAxOwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0g ICAgICBjYXNlIFhZVE1QRElSOgotICAgICAgICB4ID0gY21kaXIoIk5hbWUgb2YgdGVtcG9yYXJ5 IGRpcmVjdG9yeSIsIiIsJnMseHhzdHJpbmcpOwotICAgICAgICBpZiAoeCA9PSAtMykKLSAgICAg ICAgICBzID0gIiI7Ci0gICAgICAgIGVsc2UgaWYgKHggPCAwKQotICAgICAgICAgIHJldHVybih4 KTsKLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIG1h a2VzdHIoJnRlbXBkaXIscyk7Ci0gICAgICAgIHJldHVybih0ZW1wZGlyID8gMSA6IDApOwotCi0j aWZuZGVmIE5PWEZFUgotICAgICAgY2FzZSBYWURFU1Q6ICAgICAgICAgICAgICAgICAgICAgIC8q IERFU1RJTkFUSU9OICovCi0gICAgICAgIHJldHVybihzZXRkZXN0KCkpOwotI2VuZGlmIC8qIE5P WEZFUiAqLwotCi0jaWZuZGVmIE5PUFVTSAotI2lmbmRlZiBOT0ZSSUxMUwotCi0vKiBFZGl0b3Is IEJyb3dzZXIsIGFuZCBGVFAgQ2xpZW50ICovCi0KLSAgICAgIGNhc2UgWFlFRElUOiAgICAgICAg ICAgICAgICAgICAgICAvKiBFRElUT1IgKi8KLSNpZmRlZiBJS1NECi0gICAgICAgIGlmIChpbnNl cnZlcikgewotICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksIGNvbW1hbmQgZGlzYWJsZWQuXHJc biIpOwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgfQotI2VuZGlm IC8qIElLU0QgKi8KLSNpZmRlZiBDS19BUEMKLSAgICAgICAgLyogRG9uJ3QgbGV0IHRoaXMgYmUg c2V0IHJlbW90ZWx5ICovCi0gICAgICAgIGlmIChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMIHx8Ci0g ICAgICAgICAgICAoYXBjYWN0aXZlID09IEFQQ19SRU1PVEUgJiYgIShhcGNzdGF0dXMgJiBBUENf VU5DSCkpKQotICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0jZW5kaWYgLyogQ0tfQVBD ICovCi0KLSNpZmRlZiBPUzJPUlVOSVgKLSAgICAgICAgewotICAgICAgICAgICAgY2hhciAqcCA9 IGdldGVudigiUEFUSCIpOwotICAgICAgICAgICAgY2hhciAqZTsKLSAgICAgICAgICAgIGUgPSBl ZGl0b3JbMF0gPyAoY2hhciAqKSBlZGl0b3IgOiBnZXRlbnYoIkVESVRPUiIpOwotICAgICAgICAg ICAgaWYgKCFlKSBlID0gIiI7Ci0gICAgICAgICAgICBpZiAocCkKLSAgICAgICAgICAgICAgeCA9 IGNtaWZpcCgiTmFtZSBvZiBwcmVmZXJyZWQgZWRpdG9yIixlLCZzLCZ5LDAscCx4eHN0cmluZyk7 Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHggPSBjbWlmaSgiRnVsbCBwYXRoIG9m IHByZWZlcnJlZCBlZGl0b3IiLGUsJnMsJnkseHhzdHJpbmcpOwotICAgICAgICAgICAgaWYgKHgg PCAwICYmIHggIT0gLTMpCi0gICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgfQotI2Vs c2UKLSNpZmRlZiBWTVMKLSAgICAgICAgaWYgKCh5ID0gY210eHQoIkRDTCBjb21tYW5kIGZvciBl ZGl0aW5nIiwgImVkaXQiLCAmcywgTlVMTCkpIDwgMCkgewotICAgICAgICAgICAgaWYgKHggIT0g LTMpCi0gICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAg aWYgKCh4ID0gY21pZmkoIkZ1bGwgcGF0aCBvZiBwcmVmZXJyZWQgZWRpdG9yIiwiIiwmcywmeSx4 eHN0cmluZykpPDApIHsKLSAgICAgICAgICAgIGlmICh4ICE9IC0zKQotICAgICAgICAgICAgICBy ZXR1cm4oeCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzJPUlVO SVggKi8KLSNpZmRlZiBWTVMKLSAgICAgICAgY2tzdHJuY3B5KGVkaXRvcixzLENLTUFYUEFUSCk7 Ci0gICAgICAgIGVkaXRvcHRzWzBdID0gTlVMOwotI2Vsc2UKLSAgICAgICAgaWYgKHkgIT0gMCkg ewotICAgICAgICAgICAgcHJpbnRmKCI/QSBzaW5nbGUgZmlsZSBwbGVhc2VcbiIpOwotICAgICAg ICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgfQotICAgICAgICBja3N0cm5jcHkobGluZSxzLExJ TkJVRlNJWik7Ci0gICAgICAgIGlmICgoeCA9IGNtdHh0KCJlZGl0b3IgY29tbWFuZC1saW5lIG9w dGlvbnMiLCIiLCZzLE5VTEwpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBj a3N0cm5jcHkodG1wYnVmLHMsVE1QQlVGU0laKTsKLSAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkg PCAwKSByZXR1cm4oeik7Ci0gICAgICAgIGlmIChsaW5lWzBdKSB7Ci0gICAgICAgICAgICB6Zm5x ZnAobGluZSxDS01BWFBBVEgsZWRpdG9yKTsKLSAgICAgICAgICAgIGNrc3RybmNweShlZGl0b3B0 cyx0bXBidWYsMTI4KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGVkaXRvclswXSA9 IE5VTDsKLSAgICAgICAgICAgIGVkaXRvcHRzWzBdID0gTlVMOwotICAgICAgICB9Ci0jZW5kaWYg LyogVk1TICovCi0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0KLSNpZm5kZWYgTk9GVFAK LSNpZm5kZWYgU1lTRlRQCi0jaWZkZWYgVENQU09DS0VUCi0gICAgICBjYXNlIFhZRlRQWDoKLSAg ICAgICAgcmV0dXJuKGRvc2V0ZnRwKCkpOyAgICAgICAgICAgICAvKiBTRVQgRlRQICovCi0jZW5k aWYgLyogVENQU09DS0VUICovCi0jZW5kaWYgLyogU1lTRlRQICovCi0jZW5kaWYgLyogTk9GVFAg Ki8KLQotI2lmZGVmIEJST1dTRVIKLSNpZm5kZWYgTk9GVFAKLSNpZmRlZiBTWVNGVFAKLSAgICAg IGNhc2UgWFlGVFA6ICAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgRlRQLUNMSUVOVCAqLwot I2VuZGlmIC8qIFNZU0ZUUCAqLwotI2VuZGlmIC8qIE5PRlRQICovCi0gICAgICBjYXNlIFhZQlJP V1NFOiAgICAgICAgICAgICAgICAgICAgLyogU0VUIEJST1dTRVIgKi8KLSAgICAgICAgewotICAg ICAgICAgICAgY2hhciAqcCA9IGdldGVudigiUEFUSCIpOwotICAgICAgICAgICAgY2hhciAqYXBw ID0gKGNoYXIgKikgYnJvd3NlciwgKm9wdHMgPSAoY2hhciAqKSBicm93c29wdHM7Ci0jaWZuZGVm IE5PRlRQCi0jaWZkZWYgU1lTRlRQCi0gICAgICAgICAgICBleHRlcm4gY2hhciBmdHBhcHBbXSwg ZnRwb3B0c1tdOwotICAgICAgICAgICAgaWYgKHh4ID09IFhZRlRQKSB7Ci0gICAgICAgICAgICAg ICAgYXBwID0gKGNoYXIgKilmdHBhcHA7Ci0gICAgICAgICAgICAgICAgb3B0cyA9IChjaGFyICop ZnRwb3B0czsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBTWVNGVFAgKi8KLSNlbmRpZiAvKiBO T0ZUUCAqLwotI2lmZGVmIElLU0QKLSAgICAgICAgICAgIGlmIChpbnNlcnZlcikgewotICAgICAg ICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBjb21tYW5kIGRpc2FibGVkLlxyXG4iKTsKLSAgICAg ICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAgICAgICAgfQotI2VuZGlmIC8q IElLU0QgKi8KLSNpZmRlZiBDS19BUEMKLSAgICAgICAgICAgIC8qIERvbid0IGxldCB0aGlzIGJl IHNldCByZW1vdGVseSAqLwotICAgICAgICAgICAgaWYgKGFwY2FjdGl2ZSA9PSBBUENfTE9DQUwg fHwKLSAgICAgICAgICAgICAgICAoYXBjYWN0aXZlID09IEFQQ19SRU1PVEUgJiYgIShhcGNzdGF0 dXMgJiBBUENfVU5DSCkpKQotICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotI2Vu ZGlmIC8qIENLX0FQQyAqLwotI2lmZGVmIE9TMk9SVU5JWAotICAgICAgICAgICAgaWYgKHApCi0g ICAgICAgICAgICAgIHggPSBjbWlmaXAoeHggPT0gWFlCUk9XU0UgPwotICAgICAgICAgICAgICAg ICAgICAgICAgICJOYW1lIG9mIHByZWZlcnJlZCBicm93c2VyIiA6Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgIk5hbWUgb2YgcHJlZmVycmVkIGZ0cCBjbGllbnQiLAotI2lmZGVmIE9TMgotICAg ICAgICAgICAgICAgICAgICAgICAgIHh4ID09IFhZRlRQID8gImZ0cC5leGUiIDogIiIKLSNlbHNl Ci0gICAgICAgICAgICAgICAgICAgICAgICAgeHggPT0gWFlGVFAgPyAiZnRwIiA6ICIiCi0jZW5k aWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgLCZzLCZ5LDAscCx4eHN0cmlu ZwotICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg ICAgICAgIHggPSBjbWlmaSh4eCA9PSBYWUJST1dTRSA/Ci0gICAgICAgICAgICAgICAgICAgICAg ICAiRnVsbCBwYXRoIG9mIHByZWZlcnJlZCBicm93c2VyIiA6Ci0gICAgICAgICAgICAgICAgICAg ICAgICAiRnVsbCBwYXRoIG9mIHByZWZlcnJlZCBmdHAgY2xpZW50IiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICIiLCZzLCZ5LHh4c3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICApOwot ICAgICAgICAgICAgaWYgKHggPCAwICYmIHggIT0gLTMpCi0gICAgICAgICAgICAgIHJldHVybih4 KTsKLSNlbHNlCi0jaWZkZWYgVk1TCi0gICAgICAgICAgICBpZiAoKHggPSBjbXR4dCgiRENMIGNv bW1hbmQgdG8gc3RhcnQgeW91ciBwcmVmZXJyZWQgV2ViIGJyb3dzZXIiLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIiIsICZzLCBOVUxMKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgaWYg KHggIT0gLTMpCi0gICAgICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICB9Ci0j ZWxzZQotICAgICAgICAgICAgaWYgKCh4ID0gY21pZmkoIkZ1bGwgcGF0aCBvZiBwcmVmZXJyZWQg YnJvd3NlciIsIiIsJnMsJnkseHhzdHJpbmcpCi0gICAgICAgICAgICAgICAgICkgPCAwKSB7Ci0g ICAgICAgICAgICAgICAgaWYgKHggIT0gLTMpCi0gICAgICAgICAgICAgICAgICByZXR1cm4oeCk7 Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyT1JVTklYICov Ci0jaWZkZWYgVk1TCi0gICAgICAgICAgICBja3N0cm5jcHkoYXBwLHMsQ0tNQVhQQVRIKTsKLSAg ICAgICAgICAgICpvcHRzID0gTlVMOwotI2Vsc2UKLSAgICAgICAgICAgIGlmICh5ICE9IDApIHsK LSAgICAgICAgICAgICAgICBwcmludGYoIj9BIHNpbmdsZSBmaWxlIHBsZWFzZVxuIik7Ci0gICAg ICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNrc3Ry bmNweShsaW5lLHMsTElOQlVGU0laKTsKLSAgICAgICAgICAgIGlmICgoeCA9IGNtdHh0KHh4ID09 IFhZQlJPV1NFID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJicm93c2VyIGNvbW1hbmQt bGluZSBvcHRpb25zIiA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAiZnRwIGNsaWVudCBj b21tYW5kLWxpbmUgb3B0aW9ucyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwmcyxO VUxMKQotICAgICAgICAgICAgICAgICApIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHgpOwot ICAgICAgICAgICAgY2tzdHJuY3B5KHRtcGJ1ZixzLFRNUEJVRlNJWik7Ci0gICAgICAgICAgICBp ZiAoKHogPSBjbWNmbSgpKSA8IDApIHJldHVybih6KTsKLSAgICAgICAgICAgIGlmIChsaW5lWzBd KSB7Ci0gICAgICAgICAgICAgICAgemZucWZwKGxpbmUsQ0tNQVhQQVRILGFwcCk7Ci0gICAgICAg ICAgICAgICAgY2tzdHJuY3B5KG9wdHMsIHRtcGJ1ZiwgMTI4KTsKLSAgICAgICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICAgICAgKmFwcCA9IE5VTDsKLSAgICAgICAgICAgICAgICAqb3B0cyA9 IE5VTDsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBWTVMgKi8KLSAgICAgICAgICAgIHJldHVy bihzdWNjZXNzID0gMSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBCUk9XU0VSICovCi0jZW5kaWYg LyogTk9GUklMTFMgKi8KLSNlbmRpZiAvKiBOT1BVU0ggKi8KLQotI2lmZGVmIENLX0NUUkxaCi0g ICAgICBjYXNlIFhZRU9GOiB7ICAgICAgICAgICAgICAgICAgICAgLyogU0VUIEVPRiAqLwotICAg ICAgICAgIGV4dGVybiBpbnQgZW9mbWV0aG9kOyBleHRlcm4gc3RydWN0IGtleXRhYiBlb2Z0YWJb XTsKLSAgICAgICAgICBpZiAoKHggPSBjbWtleShlb2Z0YWIsMywiZW5kLW9mLWZpbGUgZGV0ZWN0 aW9uIG1ldGhvZCIsIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDAp Ci0gICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAw KQotICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgIGVvZm1ldGhvZCA9IHg7Ci0gICAg ICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgIH0KLSNlbmRpZiAvKiBDS19DVFJMWiAq LwotCi0jaWZkZWYgU0VTTElNSVQKLSAgICAgIGNhc2UgWFlMSU1JVDogeyAgLyogU2Vzc2lvbi1M aW1pdCAobGVuZ3RoIG9mIHNlc3Npb24gaW4gc2Vjb25kcykgKi8KLSAgICAgICAgICBleHRlcm4g aW50IHNlc2xpbWl0OwotI2lmZGVmIE9TMgotICAgICAgICAgIGV4dGVybiBpbnQgZG93bmxvYWRl ZDsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICB5ID0gY21udW0oIk1heGltdW0gbGVuZ3Ro IG9mIHNlc3Npb24sIHNlY29uZHMiLCIwIiwxMCwmeCx4eHN0cmluZyk7Ci0gICAgICAgICAgaWYg KGluc2VydmVyICYmCi0jaWZkZWYgSUtTRENPTkYKLSAgICAgICAgICAgICAgaWtzZGNmCi0jZWxz ZQotICAgICAgICAgICAgICAxCi0jZW5kaWYgLyogSUtTRENPTkYgKi8KLSNpZmRlZiBPUzIKLSAg ICAgICAgICAgICAgIHx8IGRvd25sb2FkZWQKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAg ICAgKSB7Ci0gICAgICAgICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAg ICAgICByZXR1cm4oeik7Ci0gICAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBjb21tYW5kIGRp c2FibGVkLlxyXG4iKTsKLSAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAg ICAgICB9Ci0gICAgICAgICAgcmV0dXJuKHNldG51bSgmc2VzbGltaXQseCx5LDg2NDAwKSk7Ci0g ICAgICB9Ci0jZW5kaWYgLyogU0VTTElNSVQgKi8KLQotICAgICAgY2FzZSBYWVJFTFk6IHsgICAg ICAgICAgICAgICAgICAgIC8qIFNFVCBSRUxJQUJMRSAqLwotICAgICAgICAgIGlmICgoeCA9IGNt a2V5KG9vYXRhYiwzLCIiLCJhdXRvbWF0aWMiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAg cmV0dXJuKHgpOwotICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwot ICAgICAgICAgIHJlbGlhYmxlID0geDsKLSAgICAgICAgICBzZXRyZWxpYWJsZSA9ICh4ICE9IFNF VF9BVVRPKTsKLSAgICAgICAgICBkZWJ1ZyhGMTAxLCJTRVQgUkVMSUFCTEUgcmVsaWFibGUiLCIi LHJlbGlhYmxlKTsKLSAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgfQotCi0j aWZkZWYgU1RSRUFNSU5HCi0gICAgICBjYXNlIFhZU1RSRUFNOiB7ICAgICAgICAgICAgICAgICAg LyogU0VUIFNUUkVBTUlORyAqLwotICAgICAgICAgIGV4dGVybiBpbnQgc3RyZWFtcnE7Ci0gICAg ICAgICAgaWYgKCh4ID0gY21rZXkob29hdGFiLDMsIiIsImF1dG9tYXRpYyIseHhzdHJpbmcpKSA8 IDApCi0gICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkg PCAwKSByZXR1cm4oeSk7Ci0gICAgICAgICAgc3RyZWFtcnEgPSB4OwotICAgICAgICAgIHJldHVy bihzdWNjZXNzID0gMSk7Ci0gICAgICB9Ci0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0KLSNpZmRl ZiBDS1NZU0xPRwotICAgICAgY2FzZSBYWVNZU0w6IHsKLSAgICAgICAgICBpZiAoKHggPSBjbWtl eShzeXNsb2d0YWIsbnN5c2xvZywiIiwiIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgIHJl dHVybih4KTsKLSAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSNp ZmRlZiBJS1NECi0gICAgICAgICAgaWYgKGluc2VydmVyICYmCi0jaWZkZWYgSUtTRENPTkYKLSAg ICAgICAgICAgICAgaWtzZGNmCi0jZWxzZQotICAgICAgICAgICAgICAxCi0jZW5kaWYgLyogSUtT RENPTkYgKi8KLSAgICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5 LCBjb21tYW5kIGRpc2FibGVkLlxuIik7Ci0gICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0g MCk7Ci0gICAgICAgICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLSNpZmRlZiBDS19BUEMKLSAgICAg ICAgICAvKiBEb24ndCBsZXQgdGhpcyBiZSBzZXQgcmVtb3RlbHkgKi8KLSAgICAgICAgICBpZiAo YXBjYWN0aXZlID09IEFQQ19MT0NBTCB8fAotICAgICAgICAgICAgICAoYXBjYWN0aXZlID09IEFQ Q19SRU1PVEUgJiYgIShhcGNzdGF0dXMgJiBBUENfVU5DSCkpKQotICAgICAgICAgICAgcmV0dXJu KHN1Y2Nlc3MgPSAwKTsKLSNlbmRpZiAvKiBDS19BUEMgKi8KLSAgICAgICAgICBja3hzeXNsb2cg PSB4OwotICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICB9Ci0jZW5kaWYgLyog Q0tTWVNMT0cgKi8KLQotI2lmZGVmIFRMT0cKLSAgICAgIGNhc2UgWFlUTE9HOiB7ICAgICAgICAg ICAgICAgICAgICAvKiBTRVQgVFJBTlNBQ1RJT04tTE9HICovCi0gICAgICAgICAgZXh0ZXJuIGlu dCB0bG9nc2VwOwotICAgICAgICAgIGlmICgoeCA9IGNta2V5KHZidGFiLG52YiwiIiwidmVyYm9z ZSIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgaWYg KHggPT0gMCkgewotICAgICAgICAgICAgICBpZiAoKHkgPSBjbXR4dCgiZmllbGQgc2VwYXJhdG9y IiwiLCIsJnMsTlVMTCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICAgICAgICBzID0gYnJzdHJp cChzKTsKLSAgICAgICAgICAgICAgaWYgKCpzKSB7Ci0gICAgICAgICAgICAgICAgICBpZiAoc1sx XSkgewotICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0Egc2luZ2xlIGNoYXJhY3Rlciwg cGxlYXNlLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAg ICAgICAgICAgIH0gZWxzZSBpZiAoKCpzID49ICcwJyAmJiAqcyA8PSAnOScpIHx8Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICgqcyA+PSAnQScgJiYgKnMgPD0gJ1onKSB8fAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoKnMgPj0gJ2EnICYmICpzIDw9ICd6JykpIHsKLSAgICAg ICAgICAgICAgICAgICAgICBwcmludGYoIj9BIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVyLCBw bGVhc2UuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAg ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHRsb2dzZXAgPSAqczsKLSAgICAg ICAgICAgICAgfQotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIGlmICgoeSA9IGNt Y2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICAgIH0KLSNpZmRlZiBJS1NECi0gICAgICAg ICAgaWYgKGluc2VydmVyICYmIGlzZ3Vlc3QpIHsKLSAgICAgICAgICAgICAgcHJpbnRmKCI/U29y cnksIGNvbW1hbmQgZGlzYWJsZWQuXG4iKTsKLSAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3Mg PSAwKTsKLSAgICAgICAgICB9Ci0jZW5kaWYgLyogSUtTRCAqLwotI2lmZGVmIENLX0FQQwotICAg ICAgICAgIC8qIERvbid0IGxldCB0aGlzIGJlIHNldCByZW1vdGVseSAqLwotICAgICAgICAgIGlm IChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMIHx8Ci0gICAgICAgICAgICAgIChhcGNhY3RpdmUgPT0g QVBDX1JFTU9URSAmJiAhKGFwY3N0YXR1cyAmIEFQQ19VTkNIKSkpCi0gICAgICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IDApOwotI2VuZGlmIC8qIENLX0FQQyAqLwotICAgICAgICAgIHRsb2dmbXQg PSB4OwotICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICB9Ci0jZW5kaWYgLyog VExPRyAqLwotCi0gICAgICBjYXNlIFhZQ0xFQVI6IHsgICAgICAgICAgICAgICAgICAgLyogU0VU IENMRUFSQ0hBTk5FTCAqLwotICAgICAgICAgIGlmICgoeCA9IGNta2V5KG9vYXRhYiwzLCIiLCJh dXRvbWF0aWMiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAg ICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICAgIGNsZWFycnEg PSB4OwotICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICB9Ci0KLSNpZmRlZiBD S19BVVRIRU5USUNBVElPTgotICAgICAgY2FzZSBYWUFVVEg6IHsgICAgICAgICAgICAgICAgICAg IC8qIFNFVCBBVVRIRU5USUNBVElPTiAqLwotI2lmZGVmIENLX0tFUkJFUk9TCi0gICAgICAgICAg aW50IGt2ID0gMDsKLSAgICAgICAgICBleHRlcm4gc3RydWN0IGtyYl9vcF9kYXRhIGtyYl9vcDsK LSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotICAgICAgICAgIGNoYXIgKiBwID0gTlVMTDsKLSAg ICAgICAgICBpZiAoKHggPQotICAgICAgICAgICAgICAgY21rZXkoc2V0YXV0aCxuc2V0YXV0aCwi YXV0aGVudGljYXRpb24gdHlwZSIsIiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICByZXR1 cm4oeCk7Ci0gICAgICAgICAgc3dpdGNoICh4KSB7Ci0jaWZkZWYgQ0tfS0VSQkVST1MKLSAgICAg ICAgICAgIGNhc2UgQVVUSF9LUkI0OiBrdiA9IDQ7IGJyZWFrOyAvKiBEb24ndCBhc3N1bWUgdmFs dWVzIGFyZSBzYW1lICovCi0gICAgICAgICAgICBjYXNlIEFVVEhfS1JCNToga3YgPSA1OyBicmVh azsKLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotI2lmZGVmIENLX1NSUAotICAgICAgICAgICAg Y2FzZSBBVVRIX1NSUDogYnJlYWs7Ci0jZW5kaWYgLyogQ0tfU1JQICovCi0jaWZkZWYgQ0tfU1NM Ci0gICAgICAgICAgICBjYXNlIEFVVEhfU1NMOgotICAgICAgICAgICAgY2FzZSBBVVRIX1RMUzoK LSAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAgICAgICAgICBk ZWZhdWx0OgotICAgICAgICAgICAgICBwcmludGYoIj9BdXRob3JpemF0aW9uIHR5cGUgbm90IHN1 cHBvcnRlZCB5ZXQgLSBcIiVzXCJcbiIsCi0gICAgICAgICAgICAgICAgICAgICBhdG1idWYpOwot ICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgIH0KLSNpZmRlZiBJS1NECi0gICAg ICAgICAgaWYgKGluc2VydmVyICYmCi0jaWZkZWYgSUtTRENPTkYKLSAgICAgICAgICAgICAgaWtz ZGNmCi0jZWxzZQotICAgICAgICAgICAgICAxCi0jZW5kaWYgLyogSUtTRENPTkYgKi8KLSAgICAg ICAgICAgICAgKSB7Ci0gICAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJu KHkpOwotICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgY29tbWFuZCBkaXNhYmxlZC5cbiIp OwotICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAgICAgIH0KLSNlbmRp ZiAvKiBJS1NEICovCi0jaWZkZWYgQ0tfQVBDCi0gICAgICAgICAgLyogRG9uJ3QgbGV0IHRoaXMg YmUgc2V0IHJlbW90ZWx5ICovCi0gICAgICAgICAgaWYgKGFwY2FjdGl2ZSA9PSBBUENfTE9DQUwg fHwKLSAgICAgICAgICAgICAgYXBjYWN0aXZlID09IEFQQ19SRU1PVEUgJiYgIShhcGNzdGF0dXMg JiBBUENfVU5DSCkpIHsKLSAgICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1 cm4oeSk7Ci0gICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAgICAgfQot I2VuZGlmIC8qIENLX0FQQyAqLwotCi0gICAgICAgICAgc3dpdGNoKHgpIHsKLSNpZmRlZiBDS19L RVJCRVJPUwotICAgICAgICAgICAgY2FzZSBBVVRIX0tSQjQ6Ci0gICAgICAgICAgICBjYXNlIEFV VEhfS1JCNTogewotICAgICAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KGt2ID09IDQgPyBrNHRh YiA6IGs1dGFiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt2ID09IDQgPyBuazR0 YWIgOiBuazV0YWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIktlcmJlcm9zIHBh cmFtZXRlciIsIiIseHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu KHgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzID0gIiI7Ci0gICAgICAg ICAgICAgICAgc3dpdGNoICh4KSB7Ci0jaWZkZWYgS1JCNAotICAgICAgICAgICAgICAgICAgY2Fz ZSBYWUtSQkRCRzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGt2ID09IDQpIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgIGlmICgoeSA9IHNldG9uKCZrNGRlYnVnKSkgPCAwKQotICAgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0jaWZkZWYgTlQKLSAgICAgICAgICAgICAgICAg ICAgICAgIGNrX2tyYjRfZGVidWcoazRkZWJ1Zyk7Ci0jZW5kaWYgLyogTlQgKi8KLSAgICAgICAg ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7 Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5k aWYgLyogS1JCNCAqLwotICAgICAgICAgICAgICAgICAgY2FzZSBYWUtSQkxJRjoKLSAgICAgICAg ICAgICAgICAgICAgaWYgKCh5ID0gY21udW0oIlRHVCBsaWZldGltZSIsIjYwMCIsMTAsJnoseHhz dHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgWFlLUkJQUkU6Ci0gICAg ICAgICAgICAgICAgICAgIGlmIChrdiA9PSA0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp ZiAoKHkgPSBzZXRvbigma3JiNF9kX3ByZWF1dGgpKSA8IDApCi0gICAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFhZS1JCSU5TOgot ICAgICAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbXR4dCgiSW5zdGFuY2UgbmFtZSIsIiIsJnMs eHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgWFlLUkJGV0Q6Ci0g ICAgICAgICAgICAgICAgICAgIGlmIChrdiA9PSA1KSB7Ci0gICAgICAgICAgICAgICAgICAgICAg ICBpZiAoKHkgPSBzZXRvbigma3JiNV9kX2ZvcndhcmRhYmxlKSkgPCAwKQotICAgICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBYWUtS QlBSWDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGt2ID09IDUpIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgIGlmICgoeSA9IHNldG9uKCZrcmI1X2RfcHJveGlhYmxlKSkgPCAwKQotICAgICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2Fz ZSBYWUtSQlJOVzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gY21udW0oIlRHVCByZW5l d2FibGUgbGlmZXRpbWUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIs MTAsJnoseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwot ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgWFlLUkJB RFI6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChrdiA9PSA1KSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICBpZiAoKHkgPSBzZXRvbigma3JiNV9jaGVja2FkZHJzKSkgPCAwKQotICAgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHkgPSBzZXRvbigma3JiNF9jaGVja2FkZHJz KSkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg ICBjYXNlIFhZS1JCTkFEOgotICAgICAgICAgICAgICAgICAgICBpZiAoa3YgPT0gNSkgewotICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gc2V0b24oJmtyYjVfZF9ub19hZGRyZXNzZXMp KSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg IGNhc2UgWFlLUkJBREQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChrdiA9PSA1KSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICogdG1wYWRkcnNbS1JCNV9OVU1fT0ZfQUREUlNdOwot ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IEtSQjVfTlVNX09GX0FERFJT OyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRtcGFkZHJzW2ldID0gTlVMTDsKLQot ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh5ID0KLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY21mbGQoIkxpc3Qgb2YgSVAgYWRkcmVzc2VzIiwiIiwmcyx4eHN0cmluZykpIDwgMCkK LSAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAgICAg ICAgICAgbWFrZWxpc3Qocyx0bXBhZGRycyxLUkI1X05VTV9PRl9BRERSUyk7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgS1JCNV9OVU1fT0ZfQUREUlM7IGkrKykgewotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wYWRkcnNbaV0gIT0gTlVMTCkKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHRtcGFkZHJzW2ldKTsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuKHkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg ICAgZm9yIChpID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA8IEtSQjVfTlVN X09GX0FERFJTICYmIHRtcGFkZHJzW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp KyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5ldF9hZGRyKHRtcGFkZHJz W2ldKSA9PSAweGZmZmZmZmZmKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy aW50ZigiaW52YWxpZCBpcCBhZGRyZXNzOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRtcGFkZHJzW2ldKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZm9yIChpID0gMDsgaSA8IEtSQjVfTlVNX09GX0FERFJTOyBpKyspIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXBhZGRyc1tpXSAhPSBOVUxMKQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHRtcGFkZHJzW2ldKTsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPCBLUkI1X05VTV9PRl9BRERSUyAmJiBr cmI1X2RfYWRkcnNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKykgewotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrcmI1X2RfYWRkcnNbaV0pCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmcmVlKGtyYjVfZF9hZGRyc1tpXSk7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAga3JiNV9kX2FkZHJzW2ldID0gTlVMTDsKLSAgICAgICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGkgPCBLUkI1X05VTV9PRl9BRERSUyAmJiB0bXBhZGRyc1tpXTsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAga3JiNV9kX2FkZHJzW2ldID0gdG1wYWRkcnNbaV07Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgdG1wYWRkcnNbaV0gPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgICAgICAgICAga3JiNV9kX2FkZHJzW2ldID0gTlVMTDsKLSAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgIGNh c2UgWFlLUkJHRVQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChrdiA9PSA1KSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBpZiAoKHkgPSBzZXRvbigma3JiNV9hdXRvZ2V0KSkgPCAwKQotICAg ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHkgPSBzZXRvbigma3JiNF9hdXRv Z2V0KSkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg ICAgICBjYXNlIFhZS1JCREVMOgotICAgICAgICAgICAgICAgICAgICBpZiAoKHogPSBjbWtleShr ZGVzdGFiLG5rZGVzdGFiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXV0 byBEZXN0cm95IFRpY2tldHMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi bmV2ZXIiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgIHJldHVybih6KTsK LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFhZS1JC UFI6Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtdHh0KCJVc2VyIElEIix1aWRidWYs JnMseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAg ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgWFlLUkJSTDoK LSAgICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gY210eHQoIk5hbWUgb2YgcmVhbG0iLCIiLCZz LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAg ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFhZS1JCS1RCOgot ICAgICAgICAgICAgICAgICAgICB5ID0gY21pZmkoIkZpbGVuYW1lIiwiIiwmcywmeix4eHN0cmlu Zyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5ICE9IC0zKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgIGlmICh5IDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0g ICAgICAgICAgICAgICAgICAgICAgIGlmICh6KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg cHJpbnRmKCI/V2lsZGNhcmRzIG5vdCBhbGxvd2VkXG4iKTsKLSAgICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBj YXNlIFhZS1JCQ0M6Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtb2ZpKCJGaWxlbmFt ZSIsIiIsJnMseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkp OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgWFlL UkJTUlY6Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtdHh0KCJOYW1lIG9mIHNlcnZp Y2UgdG8gdXNlIGluIHRpY2tldCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChrdiA9PSA0ID8gInJjbWQiIDogImhvc3QiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5n Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpIDwgMCkKLSAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICAgICAgY2FzZSBYWUtSQks1SzQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChrdiA9 PSA1KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHkgPSBzZXRvbigma3JiNV9kX2dl dGs0KSkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAg ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkp OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgICAgICAgY2FzZSBYWUtSQlBSTTogICAgICAgIC8qIFByb21wdCAqLwotICAgICAg ICAgICAgICAgICAgICBpZiAoKHogPSBjbWtleShrcmJwcm10YWIsMiwiIiwiIix4eHN0cmluZykp IDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeik7Ci0gICAgICAgICAgICAgICAg ICAgIGlmICgoeSA9IGNtdHh0KCh6ID09IEtSQl9QV19QUk0pID8KLSAgIlRleHQgb2YgcHJvbXB0 O1xubWF5IGNvbnRhaW4gXCIlc1wiIHRvIGJlIHJlcGxhY2VkIGJ5IHByaW5jaXBhbCBuYW1lIiA6 Ci0gICJUZXh0IG9mIHByb21wdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcywKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgICAgICAgICkgPCAwKQotICAgICAgICAg ICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0la KTsKLSAgICAgICAgICAgICAgICBzID0gbGluZTsKLSAgICAgICAgICAgICAgICBpZiAoKHkgPSBj bWNmbSgpKSA8IDApCi0gICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0jaWZkZWYgSUtTRAot ICAgICAgICAgICAgICAgIGlmIChpbnNlcnZlciAmJgotI2lmZGVmIElLU0RDT05GCi0gICAgICAg ICAgICAgICAgICAgIGlrc2RjZgotI2Vsc2UgLyogSUtTRENPTkYgKi8KLSAgICAgICAgICAgICAg ICAgICAgMQotI2VuZGlmIC8qIElLU0RDT05GICovCi0gICAgICAgICAgICAgICAgICAgICkKLSAg ICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0jZW5kaWYgLyogSUtTRCAqLwot Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh4KSB7ICAgICAgICAgICAgLyogQ29weSB2YWx1ZSB0 byByaWdodCBwbGFjZSAqLwotICAgICAgICAgICAgICAgICAgY2FzZSBYWUtSQkxJRjogICAgICAg IC8qIExpZmV0aW1lICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChrdiA9PSA0KQotICAgICAg ICAgICAgICAgICAgICAgIGtyYjRfZF9saWZldGltZSA9IHo7Ci0gICAgICAgICAgICAgICAgICAg IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICBrcmI1X2RfbGlmZXRpbWUgPSB6OwotICAgICAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgWFlLUkJSTlc6Ci0g ICAgICAgICAgICAgICAgICAgIGlmIChrdiA9PSA1KQotICAgICAgICAgICAgICAgICAgICAgIGty YjVfZF9yZW5ld2FibGUgPSB6OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgICAgICAgIGNhc2UgWFlLUkJQUjogICAgICAgICAvKiBQcmluY2lwYWwgKi8KLSAgICAgICAg ICAgICAgICAgICAgcyA9IGJyc3RyaXAocyk7CS8qIFN0cmlwIGJyYWNlcyBhcm91bmQuICovCi0g ICAgICAgICAgICAgICAgICAgIGlmIChrdiA9PSA0KQotICAgICAgICAgICAgICAgICAgICAgIG1h a2VzdHIoJmtyYjRfZF9wcmluY2lwYWwscyk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAg ICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZrcmI1X2RfcHJpbmNpcGFsLHMpOwotICAgICAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgWFlLUkJJTlM6ICAg ICAgICAvKiBJbnN0YW5jZSAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoa3YgPT0gNCkKLSAg ICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZrcmI0X2RfaW5zdGFuY2Uscyk7Ci0gICAgICAg ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZrcmI1X2Rf aW5zdGFuY2Uscyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg ICAgY2FzZSBYWUtSQlJMOiAgICAgICAgIC8qIFJlYWxtICovCi0gICAgICAgICAgICAgICAgICAg IGlmIChrdiA9PSA0KQotICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmtyYjRfZF9yZWFs bSxzKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgIG1h a2VzdHIoJmtyYjVfZF9yZWFsbSxzKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgICAgICBjYXNlIFhZS1JCS1RCOiAgICAgICAgLyogS2V5IFRhYmxlICovCi0gICAg ICAgICAgICAgICAgICAgIGlmIChrdiA9PSA0KQotICAgICAgICAgICAgICAgICAgICAgIG1ha2Vz dHIoJms0X2tleXRhYixzKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg ICAgICAgICAgIG1ha2VzdHIoJms1X2tleXRhYixzKTsKLSAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFhZS1JCQ0M6ICAgICAgICAgLyogQ3JlZGVudGlh bHMgY2FjaGUgKi8KLSAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigma3JiNV9kX2NjLHMpOwot ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgWFlLUkJT UlY6ICAgICAgICAvKiBTZXJ2aWNlIE5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKGt2 ID09IDQpCi0gICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigma3JiNF9kX3NydixzKTsKLSAg ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmty YjVfZF9zcnYscyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg ICAgY2FzZSBYWUtSQkRFTDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGt2ID09IDUpCi0gICAg ICAgICAgICAgICAgICAgICAga3JiNV9hdXRvZGVsID0gejsKLSAgICAgICAgICAgICAgICAgICAg ZWxzZQotICAgICAgICAgICAgICAgICAgICAgIGtyYjRfYXV0b2RlbCA9IHo7Ci0gICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBYWUtSQlBSTTogICAgICAg IC8qIFByb21wdCAqLwotCQkgICAgcyA9IGJyc3RyaXAocyk7Ci0gICAgICAgICAgICAgICAgICAg IHN3aXRjaCAoeikgewotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS1JCX1BXX1BSTTogeyAv KiBQYXNzd29yZCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayB0aGF0IHRo ZXJlIGFyZSBubyBtb3JlIHRoYW4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHdv ICUgZmllbGRzIGFuZCAlIG11c3QgZm9sbG93ZWQgYnkgJ3MnLiAqLwotICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgaSxuLGxlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuID0g c3RybGVuKHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBuID0gMDsg aSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc1tpXSA9 PSAnJScpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc1tpKzFdICE9 ICclJykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc1tpKzFd ICE9ICdzJykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJp bnRmKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPbmx5ICUl cyBmaWVsZHMgYXJlIHBlcm1pdHRlZC5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKytuID4gMikg ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT25seSB0d28gJSVzIGZpZWxkcyBh cmUgcGVybWl0dGVkLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo a3YgPT0gNSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZrNXB3cHJvbXB0 LHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgbWFrZXN0cigmazRwd3Byb21wdCxzKTsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg IGNhc2UgS1JCX1BSX1BSTTogeyAvKiBQcmluY2lwYWwgKi8KLSAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyAlIGZpZWxkcyAqLwotICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaSxsZW47Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgIGxlbiA9IHN0cmxlbihzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0g MDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc1tp XSA9PSAnJScpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc1tpKzFd ICE9ICclJykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYo Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUlIGZpZWxkcyBhcmUgbm90IHVz ZWQgaW4gdGhpcyBjb21tYW5kLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoa3YgPT0gNSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBt YWtlc3RyKCZrNXBycHJvbXB0LHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmazRwcnByb21wdCxzKTsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0jaWZkZWYgQ0tf U1JQCi0gICAgICAgICAgICBjYXNlIEFVVEhfU1JQOiB7Ci0gICAgICAgICAgICAgICAgaWYgKCh4 ID0gY21rZXkoc3JwdGFiLCBuc3JwdGFiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJTUlAgcGFyYW1ldGVyIiwiIix4eHN0cmluZykpIDwgMCkgewotICAgICAgICAgICAgICAgICAg ICByZXR1cm4oeCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHMgPSAiIjsK LSAgICAgICAgICAgICAgICBzd2l0Y2ggKHgpIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgWFlT UlBQUk06ICAgICAgICAvKiBQcm9tcHQgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKCh6ID0g Y21rZXkoc3JwcHJtdGFiLDEsIiIsIiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuKHopOwotICAgICAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbXR4dCgKLSAg IlRleHQgb2YgcHJvbXB0O1xubWF5IGNvbnRhaW4gb25lIFwiJXNcIiB0byBiZSByZXBsYWNlZCBi eSB0aGUgdXNlcm5hbWUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnMsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgICAgICApIDwgMCkKLSAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7Ci0g ICAgICAgICAgICAgICAgcyA9IGxpbmU7Ci0gICAgICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0o KSkgPCAwKQotICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAgIHN3 aXRjaCAoeCkgeyAgICAgICAgICAgIC8qIENvcHkgdmFsdWUgdG8gcmlnaHQgcGxhY2UgKi8KLSAg ICAgICAgICAgICAgICAgIGNhc2UgWFlTUlBQUk06ICAgICAgICAvKiBQcm9tcHQgKi8KLQkJICAg IHMgPSBicnN0cmlwKHMpOwotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHopIHsKLSAgICAg ICAgICAgICAgICAgICAgICBjYXNlIFNSUF9QV19QUk06IHsgLyogUGFzc3dvcmQgKi8KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgJXMgZmllbGRzICovCi0gICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBpLG4sbGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4g PSBzdHJsZW4ocyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIG4gPSAw OyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzW2ld ID09ICclJykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzW2krMV0g IT0gJyUnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzW2kr MV0gIT0gJ3MnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw cmludGYoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT25seSAl JXMgZmllbGRzIGFyZSBwZXJtaXR0ZWQuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsr biA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50 ZigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPbmx5IG9uZSAlJXMg ZmllbGQgaXMgcGVybWl0dGVkLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg ICBtYWtlc3RyKCZzcnBwd3Byb21wdCxzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotI2Vu ZGlmIC8qIENLX1NSUCAqLwotI2lmZGVmIENLX1NTTAotICAgICAgICAgICAgY2FzZSBBVVRIX1NT TDoKLSAgICAgICAgICAgIGNhc2UgQVVUSF9UTFM6IHsKLSAgICAgICAgICAgICAgICBpZiAoKHog PSBjbWtleShzc2x0YWIsIG5zc2x0YWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoeCA9 PSBBVVRIX1NTTCA/ICJTU0wgcGFyYW1ldGVyIiA6ICJUTFMgcGFyYW1ldGVyIiksCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAiIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICAg IHJldHVybih6KTsKLSAgICAgICAgICAgICAgICBzID0gIiI7Ci0gICAgICAgICAgICAgICAgc3dp dGNoICh6KSB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFhZU1NMUkNGTDogICAgICAgLyogU1NM L1RMUyBSU0EgQ2VydHMgZmlsZSAqLwotICAgICAgICAgICAgICAgICAgY2FzZSBYWVNTTFJDQ0Y6 ICAgICAgIC8qIFNTTC9UTFMgUlNBIENlcnRzIENoYWluIGZpbGUgKi8KLSAgICAgICAgICAgICAg ICAgIGNhc2UgWFlTU0xSS0ZMOiAgICAgICAvKiBTU0wvVExTIFJTQSBLZXkgRmlsZSAqLwotICAg ICAgICAgICAgICAgICAgY2FzZSBYWVNTTERDRkw6ICAgICAgIC8qIFNTTC9UTFMgRFNBIENlcnRz IGZpbGUgKi8KLSAgICAgICAgICAgICAgICAgIGNhc2UgWFlTU0xEQ0NGOiAgICAgICAvKiBTU0wv VExTIERTQSBDZXJ0cyBDaGFpbiBmaWxlICovCi0gICAgICAgICAgICAgICAgICBjYXNlIFhZU1NM REtGTDogICAgICAgLyogU1NML1RMUyBESCBLZXkgRmlsZSAqLwotICAgICAgICAgICAgICAgICAg Y2FzZSBYWVNTTERQRkw6ICAgICAgIC8qIFNTTC9UTFMgREggUGFyYW0gRmlsZSAqLwotICAgICAg ICAgICAgICAgICAgY2FzZSBYWVNTTENSTDogICAgICAgIC8qIFNTTC9UTFMgQ1JMIEZpbGUgKi8K LSAgICAgICAgICAgICAgICAgIGNhc2UgWFlTU0xWUkZGOiAgICAgICAvKiBTU0wvVExTIFZlcmlm eSBGaWxlICovCi0gICAgICAgICAgICAgICAgICBjYXNlIFhZU1NMUk5EOiAgICAgICAgLyogU1NM L1RMUyBSYW5kb20gRmlsZSAqLwotICAgICAgICAgICAgICAgICAgICB5ID0gY21pZmkoIkZpbGVu YW1lIiwiIiwmcywmeCx4eHN0cmluZyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5ICE9IC0z KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeSA8IDApCi0gICAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4KSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/V2lsZGNhcmRzIG5vdCBhbGxvd2Vk XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAg ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg ICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKLSAgICAgICAgICAgICAgICAgICAgcyA9 IGxpbmU7Ci0gICAgICAgICAgICAgICAgICAgIHMgPSBicnN0cmlwKHMpOwotICAgICAgICAgICAg ICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuKHkpOwotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHopIHsKLSAgICAgICAgICAgICAg ICAgICAgICBjYXNlIFhZU1NMUkNGTDogICAvKiBTU0wvVExTIFJTQSBDZXJ0cyBmaWxlICovCi0g ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNbMF0gJiYgc3NsX3JzYV9jZXJ0X2ZpbGUpIHsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHNzbF9yc2FfY2VydF9maWxlKTsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfcnNhX2NlcnRfZmlsZSA9IE5VTEw7Ci0gICAg ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNbMF0pIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtYWtlc3RyKCZzc2xfcnNhX2NlcnRfZmlsZSxzKTsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoIXNzbF9yc2Ffa2V5X2ZpbGUpCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtYWtlc3RyKCZzc2xfcnNhX2tleV9maWxlLHMpOwotICAgICAgICAgICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg ICAgICAgICAgY2FzZSBYWVNTTFJDQ0Y6ICAgLyogU1NML1RMUyBSU0EgQ2VydHMgQ2hhaW4gZmls ZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNbMF0gJiYgc3NsX3JzYV9jZXJ0 X2NoYWluX2ZpbGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUoc3NsX3Jz YV9jZXJ0X2NoYWluX2ZpbGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3Jz YV9jZXJ0X2NoYWluX2ZpbGUgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs c2UgaWYgKHNbMF0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNz bF9yc2FfY2VydF9jaGFpbl9maWxlLHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNh c2UgWFlTU0xSS0ZMOiAgIC8qIFNTTC9UTFMgUlNBIEtleSBGaWxlICovCi0gICAgICAgICAgICAg ICAgICAgICAgICBpZiAoIXNbMF0gJiYgc3NsX3JzYV9rZXlfZmlsZSkgewotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZyZWUoc3NsX3JzYV9rZXlfZmlsZSk7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3NsX3JzYV9rZXlfZmlsZSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAg ICAgICB9IGVsc2UgaWYgKHNbMF0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtl c3RyKCZzc2xfcnNhX2tleV9maWxlLHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBY WVNTTERDRkw6ICAgLyogU1NML1RMUyBEU0EgQ2VydHMgZmlsZSAqLwotICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKCFzWzBdICYmIHNzbF9kc2FfY2VydF9maWxlKSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgZnJlZShzc2xfZHNhX2NlcnRfZmlsZSk7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3NsX2RzYV9jZXJ0X2ZpbGUgPSBOVUxMOwotICAgICAgICAgICAgICAgICAg ICAgICAgfSBlbHNlIGlmIChzWzBdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFr ZXN0cigmc3NsX2RzYV9jZXJ0X2ZpbGUscyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg aWYgKCFzc2xfZGhfa2V5X2ZpbGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtl c3RyKCZzc2xfZGhfa2V5X2ZpbGUscyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIFhZ U1NMRENDRjogICAvKiBTU0wvVExTIERTQSBDZXJ0cyBDaGFpbiBmaWxlICovCi0gICAgICAgICAg ICAgICAgICAgICAgICAgIGlmICghc1swXSAmJiBzc2xfZHNhX2NlcnRfY2hhaW5fZmlsZSkgewot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShzc2xfZHNhX2NlcnRfY2hhaW5fZmls ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfZHNhX2NlcnRfY2hhaW5fZmls ZSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc1swXSkgewot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NsX2RzYV9jZXJ0X2NoYWlu X2ZpbGUscyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBYWVNTTERLRkw6ICAg LyogU1NML1RMUyBESCBLZXkgRmlsZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFz WzBdICYmIHNzbF9kaF9rZXlfZmlsZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZy ZWUoc3NsX2RoX2tleV9maWxlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfZGhf a2V5X2ZpbGUgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzWzBd KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NsX2RoX2tleV9maWxl LHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBYWVNTTERQRkw6ICAgLyogU1NML1RM UyBESCBQYXJhbSBGaWxlICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNbMF0gJiYg c3NsX2RoX3BhcmFtX2ZpbGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHNz bF9kaF9wYXJhbV9maWxlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfZGhfcGFy YW1fZmlsZSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNbMF0p IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2xfZGhfcGFyYW1fZmls ZSxzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWFlTU0xDUkw6ICAgIC8qIFNTTC9U TFMgQ1JMIEZpbGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc1swXSAmJiBzc2xf Y3JsX2ZpbGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHNzbF9jcmxfZmls ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX2NybF9maWxlID0gTlVMTDsKLSAg ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc1swXSkgewotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG1ha2VzdHIoJnNzbF9jcmxfZmlsZSxzKTsKLSAgICAgICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg ICAgICAgIGNhc2UgWFlTU0xWUkZGOiAgIC8qIFNTTC9UTFMgVmVyaWZ5IEZpbGUgKi8KLSAgICAg ICAgICAgICAgICAgICAgICAgIGlmICghc1swXSAmJiBzc2xfdmVyaWZ5X2ZpbGUpIHsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHNzbF92ZXJpZnlfZmlsZSk7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3NsX3ZlcmlmeV9maWxlID0gTlVMTDsKLSAgICAgICAgICAgICAg ICAgICAgICAgIH0gZWxzZSBpZiAoc1swXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg IG1ha2VzdHIoJnNzbF92ZXJpZnlfZmlsZSxzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNh c2UgWFlTU0xSTkQ6ICAgIC8qIFNTTC9UTFMgUmFuZG9tIEZpbGUgKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgIGlmICghc1swXSAmJiBzc2xfcm5kX2ZpbGUpIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBmcmVlKHNzbF9ybmRfZmlsZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3NsX3JuZF9maWxlID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp ZiAoc1swXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzbF9ybmRf ZmlsZSxzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJy ZWFrOwotCi0gICAgICAgICAgICAgICAgICBjYXNlIFhZU1NMQ1JMRDoKLSAgICAgICAgICAgICAg ICAgIGNhc2UgWFlTU0xWUkZEOiB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIgKiBkID0gTlVM TDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHogPT0gWFlTU0xWUkZEKQotICAgICAgICAgICAg ICAgICAgICAgIGQ9IGdldGVudigiU1NMX0NFUlRfRElSIik7Ci0gICAgICAgICAgICAgICAgICAg IGlmIChkID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICBkID0gIiI7Ci0gICAgICAg ICAgICAgICAgICAgIGlmICgoeSA9IGNtZGlyKCJEaXJlY3RvcnkiLGQsJnMseHhzdHJpbmcpKSA8 IDApCi0JCSAgICAgIGlmICh5ICE9IC0zKQotCQkJcmV0dXJuKHkpOwotICAgICAgICAgICAgICAg ICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7Ci0gICAgICAgICAgICAgICAgICAgIHMg PSBsaW5lOwotICAgICAgICAgICAgICAgICAgICBzID0gYnJzdHJpcChzKTsKLSAgICAgICAgICAg ICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgIHJl dHVybih5KTsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHopIHsKLSAgICAgICAgICAgICAg ICAgICAgICBjYXNlIFhZU1NMQ1JMRDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc1sw XSAmJiBzc2xfY3JsX2RpcikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUoc3Ns X2NybF9kaXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9jcmxfZGlyID0gTlVM TDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc1swXSkgewotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzbF9jcmxfZGlyLHMpOwotICAgICAgICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICAgICAgICAgICAgY2FzZSBYWVNTTFZSRkQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo IXNbMF0gJiYgc3NsX3ZlcmlmeV9kaXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBm cmVlKHNzbF92ZXJpZnlfZGlyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVy aWZ5X2RpciA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNbMF0p IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2xfdmVyaWZ5X2Rpcixz KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgY2FzZSBYWVNTTENPSzogICAg ICAgIC8qIFNTTC9UTFMgQ2VydHMtT2sgZmxhZyAqLwotICAgICAgICAgICAgICAgICAgICBpZiAo KHkgPSBzZXRvbigmc3NsX2NlcnRzb2tfZmxhZykpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg ICAgY2FzZSBYWVNTTERCRzogICAgICAgICAgICAgICAgLyogU1NML1RMUyBEZWJ1ZyBmbGFnICov Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoeSA9IHNldG9uKCZzc2xfZGVidWdfZmxhZykpIDwg MCkKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBYWVNTTE9OOiAgICAgICAgIC8qIFNTTC9U TFMgT25seSBmbGFnICovCi0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoeCkgewotICAgICAg ICAgICAgICAgICAgICAgIGNhc2UgQVVUSF9TU0w6Ci0gICAgICAgICAgICAgICAgICAgICAgICBp ZiAoKHkgPSBzZXRvbigmc3NsX29ubHlfZmxhZykpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgICAgICAgICAgY2FzZSBBVVRIX1RMUzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm ICgoeSA9IHNldG9uKCZ0bHNfb25seV9mbGFnKSkgPCAwKQotICAgICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg ICAgIGNhc2UgWFlTU0xWUkI6ICAgICAgICAvKiBTU0wvVExTIFZlcmJvc2UgZmxhZyAqLwotICAg ICAgICAgICAgICAgICAgICBpZiAoKHkgPSBzZXRvbigmc3NsX3ZlcmJvc2VfZmxhZykpIDwgMCkK LSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBYWVNTTFZSRjogICAgICAgIC8qIFNTTC9UTFMg VmVyaWZ5IGZsYWcgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkoc3NsdmVy dGFiLCBuc3NsdmVydGFiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU1NM L1RMUyB2ZXJpZnkgbW9kZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJw ZWVyLWNlcnQiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgIHJldHVybih4 KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAg ICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcmlmeV9m bGFnID0geDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBj YXNlIFhZU1NMRFVNOgotICAgICAgICAgICAgICAgICAgICBpZiAoKHkgPSBzZXRvbigmc3NsX2R1 bW15X2ZsYWcpKSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgWFlTU0xDTDogeyAg ICAgICAgICAgICAgIC8qIFNTTC9UTFMgQ2lwaGVyIExpc3QgKi8KLSNpZmRlZiBDT01NRU5UCi0g ICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBjb2RlIGlzIHVzZWQgdG8gZ2VuZXJhdGUgYSBj b2xvbiBkZWxpbWl0ZWQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAvKiBsaXN0IG9mIHRoZSBj aXBoZXJzIGN1cnJlbnRseSBpbiB1c2UgdG8gYmUgdXNlZCAqLwotICAgICAgICAgICAgICAgICAg ICAgIC8qIGFzIHRoZSBkZWZhdWx0IGZvciBjbXR4dCgpLiAgSG93ZXZlciwgYSBiZXR0ZXIgICov Ci0gICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCBpcyBzaW1wbHkgdGhlIG1hZ2ljIGtl eXdvcmQgIkFMTCIuICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICBDSEFSIGRlZlsxMDI0 XSA9ICIiOwotICAgICAgICAgICAgICAgICAgICAgIGlmIChzc2xfY29uICE9IE5VTEwpIHsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgQ0hBUiAqIHAgPSBOVUxMLCAqcSA9IGRlZjsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IGksIGxlbjsKLQotICAgICAgICAgICAgICAgICAgICAg ICAgICBmb3IgKGkgPSAwOyA7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cCA9IChDSEFSICopIFNTTF9nZXRfY2lwaGVyX2xpc3Qoc3NsX2NvbixpKTsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChwID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuID0gc3Ry bGVuKHApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHErbGVuKzEgPj0gZGVm KzEwMjQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKnErKyA9ICc6JzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNw eShxLHApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSArPSBsZW47Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyog Q09NTUVOVCAqLwotICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwID0gZ2V0ZW52KCJTU0xf Q0lQSEVSIik7Ci0gICAgICAgICAgICAgICAgICAgICAgaWYgKCFwKQotICAgICAgICAgICAgICAg ICAgICAgICAgcCA9ICJBTEwiOwotICAgICAgICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtdHh0 KAotICAgICAgICAgICAgICAgICAgICAiQ29sb24tZGVsaW1pdGVkIGxpc3Qgb2YgY2lwaGVycyBv ciBBTEwgKGNhc2Utc2Vuc2l0aXZlKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcywKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICkgPCAw KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAgICAg ICAgIG1ha2VzdHIoJnNzbF9jaXBoZXJfbGlzdCxzKTsKLSAgICAgICAgICAgICAgICAgICAgICBp ZiAoc3NsX2NvbiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9saWJy YXJ5X2luaXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX2N0eCA9IChTU0xfQ1RY ICopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX0NUWF9uZXcoKFNTTF9NRVRIT0Qg KilUTFN2MV9tZXRob2QoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzc2xfY3R4 ICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX2Nvbj0gKFNTTCAqKSBT U0xfbmV3KHNzbF9jdHgpOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICAgICAgICBpZiAoc3NsX2NvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfc2V0 X2NpcGhlcl9saXN0KHNzbF9jb24sc3NsX2NpcGhlcl9saXN0KTsKLSAgICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg fQotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0g ICAgICB9Ci0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLQotI2lmbmRlZiBOT1NQTAot ICAgICAgY2FzZSBYWUZVTkM6Ci0gICAgICAgIGlmICgoeCA9IGNta2V5KGZ1bmN0YWIsbmZ1bmN0 YWIsIiIsImRpYWdub3N0aWNzIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7 Ci0gICAgICAgIHN3aXRjaCAoeCkgewotICAgICAgICAgIGNhc2UgRlVOQ19ESTogcmV0dXJuKHNl dG9uKCZmbmRpYWdzKSk7Ci0gICAgICAgICAgY2FzZSBGVU5DX0VSOiByZXR1cm4oc2V0b24oJmZu ZXJyb3IpKTsKLSAgICAgICAgICBkZWZhdWx0OiAgICAgIHJldHVybigtMik7Ci0gICAgICAgIH0K LSNlbmRpZiAvKiBOT1NQTCAqLwotCi0gICAgICBjYXNlIFhZU0xFRVA6ICAgICAgICAgICAgICAg ICAgICAgLyogU0VUIFNMRUVQIC8gUEFVU0UgKi8KLSAgICAgICAgaWYgKCh4ID0gY21rZXkoc2xl ZXB0YWIsMSwiIiwiY2FuY2VsbGF0aW9uIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1 cm4oeCk7Ci0gICAgICAgIHJldHVybihzZXRvbigmc2xlZXBjYW4pKTsKLQotICAgICAgY2FzZSBY WUNEOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBDRCAqLwotICAgICAgICBpZiAoKHgg PSBjbWtleShjZHRhYixuY2R0YWIsIiIsIiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0 dXJuKHgpOwotICAgICAgICBzd2l0Y2ggKHgpIHsKLQkgIGNhc2UgWFlDRF9IOiB7CQkvKiBTRVQg Q0QgSE9NRSAqLwotCSAgICAgIGV4dGVybiBjaGFyICogbXlob21lOwotCSAgICAgIGlmICgoeSA9 IGNtZGlyKCJEaXJlY3RvcnkgbmFtZSIsemhvbWUoKSwmcyx4eHN0cmluZykpIDwgMCkKLQkJcmV0 dXJuKHkpOwotCSAgICAgIG1ha2VzdHIoJm15aG9tZSxzKTsKLQkgICAgICByZXR1cm4oc3VjY2Vz cyA9IDEpOwotCSAgfQotICAgICAgICAgIGNhc2UgWFlDRF9NOiAgICAgICAgICAgICAgICAgIC8q IFNFVCBDRCBNRVNTQUdFICovCi0gICAgICAgICAgICBpZiAoKHggPSBjbWtleShjZG1zZyxuY2Rt c2csIiIsIiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAg ICAgICAgIGlmICh4ID09IDIpIHsgICAgICAgICAgICAgICAvKiBDRCBNRVNTQUdFIEZJTEUgKi8K LSAgICAgICAgICAgICAgICBpZiAoKHggPSBjbXR4dCgiTmFtZSBvZiBmaWxlIiwiIiwmcyxOVUxM KSkgPCAwKQotICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgICAgIGlm ICghKnMpIHsKLSAgICAgICAgICAgICAgICAgICAgcyA9IE5VTEw7Ci0jaWZuZGVmIE5PWEZFUgot ICAgICAgICAgICAgICAgICAgICBzcnZjZG1zZyA9IDA7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0g ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1ha2VzdHIoJmNkbXNnc3RyLHMpOwot ICAgICAgICAgICAgICAgIG1ha2VsaXN0KGNkbXNnc3RyLGNkbXNnZmlsZSw4KTsKLSAgICAgICAg ICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg ICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsgLyogQ0QtTUVTU0FHRSBPTi9PRkYg Ki8KLSNpZm5kZWYgTk9YRkVSCi0gICAgICAgICAgICBpZiAoeCA+IDApCi0gICAgICAgICAgICAg IHNydmNkbXNnIHw9IDI7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHNydmNkbXNn ICY9IDE7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDEpOwotCi0gICAgICAgICAgY2FzZSBYWUNEX1A6IHsgICAgICAgICAgICAgICAgLyogU0VUIENE IFBBVEggKi8KLSAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIgKiBja2NkcGF0aDsKLSAgICAgICAg ICAgICAgaWYgKCh4ID0gY210eHQoIkNEIFBBVEggc3RyaW5nIiwiIiwmcyx4eHN0cmluZykpIDwg MCkKLSAgICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICAgIG1ha2VzdHIoJmNr Y2RwYXRoLHMpOwotICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICAg IH0KLSAgICAgICAgfQotCi0jaWZuZGVmIE5PTE9DQUwKLSNpZmRlZiBTVE9QQklUUwotICAgICAg Y2FzZSBYWVNUT1A6ICAgICAgICAgICAgICAgICAgICAgIC8qIFNUT1AtQklUUyAqLwotICAgICAg ICBpZiAoKHggPSBjbWtleShzdG9wdGJsLDIsIlN0b3AgYml0cyBmb3Igc2VyaWFsIGRldmljZSIs IiIsCi0gICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJl dHVybih4KTsKLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgIHJldHVy bih5KTsKLSAgICAgICAgaWYgKHggPiAwICYmIHggPCAzKSB7Ci0gICAgICAgICAgICBzdG9wYml0 cyA9IHg7Ci0jaWZkZWYgVE5fQ09NUE9SVAotICAgICAgICAgICAgaWYgKG5ldHdvcmsgJiYgaXN0 bmNvbXBvcnQoKSkgewotICAgICAgICAgICAgICAgIHRuc2V0dGluZ3MoLTEsIHgpOwotICAgICAg ICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyog VE5fQ09NUE9SVCAqLwotI2lmZGVmIEhXUEFSSVRZCi0gICAgICAgICAgICByZXR1cm4oc3VjY2Vz cyA9IDEpOwotI2Vsc2UgLyogSFdQQVJJVFkgKi8KLSAgICAgICAgICAgIHJldHVybigtMik7Ci0j ZW5kaWYgLyogSFdQQVJJVFkgKi8KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgcmV0dXJuKC0y KTsKLSNlbmRpZiAvKiBTVE9QQklUUyAqLwotCi0gICAgICBjYXNlIFhZRElTQzogewotICAgICAg ICAgIGV4dGVybiBpbnQgY2xzb25kaXNjOwotICAgICAgICAgIHJldHVybihzZXRvbigmY2xzb25k aXNjKSk7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2UgWFlTRVJJQUw6IHsKLSAgICAgICAgICAvKiBj aGFyIGM7ICovCi0gICAgICAgICAgZXh0ZXJuIGludCBjbWFzazsKLSAgICAgICAgICBpZiAoKHgg PSBjbWtleShzZXJ0YmwsbnNlcnRibCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiU2VyaWFs IGRldmljZSBjaGFyYWN0ZXIgc2l6ZSwgcGFyaXR5LCBhbmQgc3RvcCBiaXRzIiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAiOE4xIiwgeHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICByZXR1 cm4oeCk7Ci0gICAgICAgICAgY2tzdHJuY3B5KGxpbmUsYXRtYnVmLExJTkJVRlNJWik7IC8qIEFz c29jaWF0ZWQga2V5d29yZCBzdHJpbmcgKi8KLSAgICAgICAgICBzID0gbGluZTsKLSAgICAgICAg ICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAg ICAgY2tzdHJuY3B5KGxpbmUsc2VybmFtW3hdLExJTkJVRlNJWik7Ci0gICAgICAgICAgcyA9IGxp bmU7Ci0gICAgICAgICAgaWYgKHNbMF0gIT0gJzgnICYmIHNbMF0gIT0gJzcnKSAvKiBDaGFyIHNp emUgKi8KLSAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAg ICAgeiA9IHNbMF0gLSAnMCc7Ci0gICAgICAgICAgaWYgKGlzdXBwZXIoc1sxXSkpICAgICAgICAg ICAgLyogUGFyaXR5ICovCi0gICAgICAgICAgICBzWzFdID0gdG9sb3dlcihzWzFdKTsKLSAgICAg ICAgICBpZiAoc1syXSAhPSAnMScgJiYgc1syXSAhPSAnMicpIC8qIFN0b3AgYml0cyAqLwotICAg ICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdG9wYml0 cyA9IHNbMl0gLSAnMCc7Ci0gICAgICAgICAgaWYgKHogPT0gOCkgeyAgICAgICAgICAgICAgICAg LyogOCBiaXRzICsgcGFyaXR5IChvciBub3QpICovCi0gICAgICAgICAgICAgIHBhcml0eSA9IDA7 ICAgICAgICAgICAgICAgLyogU2V0IHBhcml0eSAqLwotICAgICAgICAgICAgICBod3Bhcml0eSA9 IChzWzFdID09ICduJykgPyAwIDogc1sxXTsKLSAgICAgICAgICAgICAgc2V0Y21hc2soOCk7ICAg ICAgICAgICAgICAvKiBBbHNvIHNldCBURVJNIEJZVEVTSVpFIHRvIDggKi8KLSAgICAgICAgICB9 IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAvKiA3IGJpdHMgcGx1cyBwYXJpdHkgKi8KLSAg ICAgICAgICAgICAgcGFyaXR5ID0gKHNbMV0gPT0gJ24nKSA/IDAgOiBzWzFdOwotICAgICAgICAg ICAgICBod3Bhcml0eSA9IDA7Ci0gICAgICAgICAgICAgIHNldGNtYXNrKDcpOyAgICAgICAgICAg ICAgLyogQWxzbyBzZXQgVEVSTSBCWVRFU0laRSB0byA3ICovCi0gICAgICAgICAgfQotI2lmZGVm IFROX0NPTVBPUlQKLSAgICAgICAgICBpZiAobmV0d29yayAmJiAhaXN0bmNvbXBvcnQoKSkKLSAg ICAgICAgICAgIHRuc2V0dGluZ3MocGFyaXR5LCBzdG9wYml0cyk7Ci0jZW5kaWYgLyogVE5fQ09N UE9SVCAqLwotCi0gICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsgICAgICAgICAgLyogZnJv bSBTRVQgU0VSSUFMICovCi0gICAgICB9Ci0KLSAgICAgIGNhc2UgWFlPUFRTOiB7ICAgICAgICAg ICAgICAgICAgICAvKiBTRVQgT1BUSU9OUyAqLwotICAgICAgICAgIGV4dGVybiBpbnQgc2V0ZGly b3B0cygpOwotICAgICAgICAgIGV4dGVybiBpbnQgc2V0dHlwb3B0cygpOwotI2lmZGVmIENLUFVS R0UKLSAgICAgICAgICBleHRlcm4gaW50IHNldHB1cmdvcHRzKCk7Ci0jZW5kaWYgLyogQ0tQVVJH RSAqLwotICAgICAgICAgIGlmICgoeCA9IGNta2V5KG9wdHN0YWIsbm9wdHN0YWIsImZvciBjb21t YW5kIiwiIiwgeHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAg ICAgc3dpdGNoICh4KSB7Ci0jaWZuZGVmIE5PRlJJTExTCi0gICAgICAgICAgICBjYXNlIFhYREVM OgotICAgICAgICAgICAgICByZXR1cm4oc2V0ZGVsb3B0cygpKTsKLSNlbmRpZiAvKiBOT0ZSSUxM UyAqLwotICAgICAgICAgICAgY2FzZSBYWERJUjoKLSAgICAgICAgICAgICAgcmV0dXJuKHNldGRp cm9wdHMoKSk7Ci0gICAgICAgICAgICBjYXNlIFhYVFlQOgotICAgICAgICAgICAgICByZXR1cm4o c2V0dHlwb3B0cygpKTsKLSNpZmRlZiBDS1BVUkdFCi0gICAgICAgICAgICBjYXNlIFhYUFVSR0U6 Ci0gICAgICAgICAgICAgIHJldHVybihzZXRwdXJnb3B0cygpKTsKLSNlbmRpZiAvKiBDS1BVUkdF ICovCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICByZXR1cm4oLTIpOwotICAg ICAgICAgIH0KLSAgICAgIH0KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jaWZuZGVmIE5PWEZFUgot ICAgICAgY2FzZSBYWVE4RkxHOiB7Ci0gICAgICAgICAgZXh0ZXJuIGludCBxOGZsYWc7Ci0gICAg ICAgICAgcmV0dXJuKHNldG9uKCZxOGZsYWcpKTsKLSAgICAgIH0KLSAgICAgIGNhc2UgWFlUSU1F UjogewotICAgICAgICAgIGV4dGVybiBpbnQgYXNrdGltZXI7Ci0gICAgICAgICAgeSA9IGNtbnVt KCJUaW1lIGxpbWl0IGZvciBBU0sgY29tbWFuZCwgc2Vjb25kcyIsIjAiLDEwLCZ4LHh4c3RyaW5n KTsKLSNpZmRlZiBRTlgxNgotICAgICAgICAgIHJldHVybihzZXRudW0oJmFza3RpbWVyLHgseSwz Mjc2NykpOwotI2Vsc2UKLSAgICAgICAgICByZXR1cm4oc2V0bnVtKCZhc2t0aW1lcix4LHksODY0 MDApKTsKLSNlbmRpZiAvKiBRTlgxNiAqLwotICAgICAgfQotICAgICAgY2FzZSBYWUZBQ0tCOiB7 Ci0gICAgICAgICAgZXh0ZXJuIGludCBmYWNrYnVnOwotICAgICAgICAgIHJldHVybihzZXRvbigm ZmFja2J1ZykpOwotICAgICAgfQotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0gICAgICBjYXNlIFhZ SElOVFM6Ci0gICAgICAgIHJldHVybihzZXRvbigmaGludHMpKTsKLQotI2lmbmRlZiBOT1NQTAot ICAgICAgY2FzZSBYWUVWQUw6IHsKLSAgICAgICAgICBleHRlcm4gaW50IG9sZGV2YWw7Ci0gICAg ICAgICAgaWYgKCh4ID0gY21rZXkob2xkbmV3LDIsIiIsIiIsIHh4c3RyaW5nKSkgPCAwKQotICAg ICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKLSAg ICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICBvbGRldmFsID0geDsKLSAgICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5k ZWYgTk9YRkVSCi0gICAgICBjYXNlIFhZRkFDS1A6IHsKLSAgICAgICAgICBleHRlcm4gaW50IGZh Y2twYXRoOwotICAgICAgICAgIHJldHVybihzZXRvbigmZmFja3BhdGgpKTsKLSAgICAgIH0KLSNl bmRpZiAvKiBOT1hGRVIgKi8KLQotICAgICAgY2FzZSBYWVFOWFBMOiB7Ci0gICAgICAgICAgZXh0 ZXJuIGludCBxbnhwb3J0bG9jazsKLSAgICAgICAgICByZXR1cm4oc2V0b24oJnFueHBvcnRsb2Nr KSk7Ci0gICAgICB9Ci0KLSNpZm5kZWYgTk9DTURMCi0jaWZkZWYgSUtTRAotICAgICAgY2FzZSBY WUlLUzogewotICAgICAgICAgIGludCBzZXRpa3MoKTsKLSAgICAgICAgICByZXR1cm4oc2V0aWtz KCkpOwotICAgICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLSNlbmRpZiAvKiBOT0NNREwgKi8KLQot I2lmZGVmIENLUk9PVAotICAgICAgY2FzZSBYWVJPT1Q6Ci0gICAgICAgIHJldHVybihkb2Nocm9v dCgpKTsKLSNlbmRpZiAvKiBDS1JPT1QgKi8KLQotI2lmbmRlZiBOT1NQTAotI2lmbmRlZiBOT1NF WFAKLSAgICAgIGNhc2UgWFlTRVhQOiB7Ci0gICAgICAgICAgaWYgKCh4ID0gY21rZXkoc2V4cHRh YiwzLCIiLCIiLCB4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAg ICAgICBzd2l0Y2ggKHgpIHsKLSAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgaWYg KCh4ID0gY21rZXkob29hdGFiLDMsIiIsImF1dG9tYXRpYyIsIHh4c3RyaW5nKSkgPCAwKQotICAg ICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkg PCAwKQotICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgICAgc2V4cGVjaG8g PSB4OwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMTogewotICAgICAg ICAgICAgICAgIGludCBpLCB4eDsKLSAgICAgICAgICAgICAgICB4eCA9IHNleHBtYXhkZXA7Ci0g ICAgICAgICAgICAgICAgaWYgKCh5ID0gY21udW0oIk1heGltdW0gcmVjdXJzaW9uIGRlcHRoIiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTAwMCIsMTAsJngseHhzdHJpbmcpKSA8 IDApCi0gICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgICAgeiA9IHNl dG51bSgmc2V4cG1heGRlcCx4LHksLTEpOwotICAgICAgICAgICAgICAgIGlmICh6IDwgMCkKLSAg ICAgICAgICAgICAgICAgIHJldHVybih6KTsKLSAgICAgICAgICAgICAgICBpZiAoc3hyZXN1bHQp IHsgICAgICAgICAvKiBGcmVlIG9sZCBzdGFjayBpZiBhbGxvY2F0ZWQgKi8KLSAgICAgICAgICAg ICAgICAgICAgZm9yIChpID0gMDsgaSA8IHh4OyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAg aWYgKHN4cmVzdWx0W2ldKSBmcmVlKHN4cmVzdWx0W2ldKTsKLSAgICAgICAgICAgICAgICAgICAg ZnJlZSgoY2hhciAqKXN4cmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN4cmxlbikg ZnJlZSgoY2hhciAqKXN4cmxlbik7Ci0gICAgICAgICAgICAgICAgICAgIHN4cmVzdWx0ID0gTlVM TDsKLSAgICAgICAgICAgICAgICAgICAgc3hybGVuID0gTlVMTDsKLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0JICAgIGNhc2UgMjoKLQkg ICAgICByZXR1cm4oc2V0b24oJnNleHB0cnVuYykpOwotICAgICAgICAgIH0KLSAgICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgfQotI2VuZGlmIC8qIE5PU0VYUEwgKi8KLSNlbmRp ZiAvKiBOT1NQTCAqLwotCi0jaWZkZWYgTkVXRlRQCi0gICAgICBjYXNlIFhZR1BSOiB7Ci0gICAg ICAgICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgZ3BydGFiW107Ci0gICAgICAgICAgZXh0ZXJuIGlu dCBmdHBnZXQ7Ci0gICAgICAgICAgaWYgKCh4ID0gY21rZXkoZ3BydGFiLDMsIiIsImtlcm1pdCIs IHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgIGlmICgo eSA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICBmdHBn ZXQgPSB4OwotICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICB9Ci0jZW5kaWYg LyogTkVXRlRQICovCi0KLSNpZmRlZiBBTllTU0gKLSAgICAgIGNhc2UgWFlTU0g6Ci0gICAgICAg IHJldHVybihkb3NldHNzaCgpKTsKLSNlbmRpZiAvKiBBTllTSEggKi8KLQotI2lmZGVmIFNGVFBf QlVJTFRJTgotICAgICAgY2FzZSBYWVNGVFA6Ci0gICAgICAgIHJldHVybihkb3NldHNmdHAoKSk7 Ci0jZW5kaWYgLyogU0ZUUF9CVUlMVElOICovCi0KLSNpZmRlZiBMT0NVUwotICAgICAgY2FzZSBY WUxPQ1VTOgotICAgICAgICAgIGlmICgoeCA9IGNta2V5KGxvY3VzdGFiLG5sb2N1c3RhYiwiIiwK LSNpZmRlZiBLVUkKLQkJCSAiYXNrIgotI2Vsc2UKLQkJCSAiYXV0byIKLSNlbmRpZiAvKiBLVUkg Ki8KLQkJCSAseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAg ICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAg ICAgIGlmICh4ID09IDIgfHwgeCA9PSAzKSB7CS8qIEFVVE8gb3IgQVNLICovCi0gICAgICAgICAg ICAgIHNldGF1dG9sb2N1cyh4IC0gMSk7CS8qIFR3byBmb3JtcyBvZiBhdXRvbWF0aWMgbG9jdXNp bmcgKi8KLQkgICAgICAvKiBzZXRsb2N1cygxLDApOyAqLyAgICAgIC8qIHdlJ3JlIG5vdCBjaGFu Z2luZyB0aGUgbG9jdXMgaGVyZSAqLwotICAgICAgICAgIH0gZWxzZSB7CQkJLyogTE9DQUwgb3Ig UkVNT1RFICovCi0gICAgICAgICAgICAgIHNldGF1dG9sb2N1cygwKTsJCS8qIE5vIGF1dG9tYXRp YyBMb2N1cyBjaGFuZ2luZyAqLwotICAgICAgICAgICAgICBzZXRsb2N1cyh4LDApOwkJLyogU2V0 IExvY3VzIGFzIHJlcXVlc3RlZCAqLwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDEpOwotI2VuZGlmIC8qIExPQ1VTICovCi0KLSNpZmRlZiBLVUkKLSAgICAgIGNhc2Ug WFlHVUk6Ci0gICAgICAgIHJldHVybihzZXRndWkoKSk7Ci0jZW5kaWYgLyogS1VJICovCi0KLSNp Zm5kZWYgTk9GUklMTFMKLSNpZm5kZWYgTk9SRU5BTUUKLSAgICAgIGNhc2UgWFlfUkVOOgkJCS8q IFNFVCBSRU5BTUUgKi8KLQlyZXR1cm4oc2V0cmVuYW1lKCkpOwotI2VuZGlmCS8qIE5PUkVOQU1F ICovCi0jZW5kaWYJLyogTk9GUklMTFMgKi8KLQotI2lmbmRlZiBOT1BVU0gKLSNpZmRlZiBDS19S RURJUgotI2lmbmRlZiBOT1hGRVIKLSAgICAgIGNhc2UgWFlFWFRSTjoJCQkvKiBTRVQgRVhURVJO QUwtUFJPVE9DT0wgKi8KLQlyZXR1cm4oc2V0ZXh0ZXJuKCkpOwotI2VuZGlmCS8qIE5PWEZFUiAq LwotI2VuZGlmCS8qIENLX1JFRElSICovCi0jZW5kaWYJLyogTk9QVVNIICovCi0KLSNpZm5kZWYg Tk9TUEwKLSAgICAgIGNhc2UgWFlWQVJFVjoJCQkvKiBTRVQgVkFSSUFCTEUtRVZBTFVBVElPTiAq LwotCXJldHVybihzZXR2YXJldmFsKCkpOwotI2VuZGlmCS8qIE5PU1BMICovCi0KLSAgICAgIGRl ZmF1bHQ6Ci0gICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAg ICAgIHByaW50ZigiTm90IGltcGxlbWVudGVkIC0gJXNcbiIsY21kYnVmKTsKLSAgICAgICAgIHJl dHVybihzdWNjZXNzID0gMCk7Ci0gICAgfQotfQotCi0vKgotICBIIFUgUCBPIEsgIC0tICBJcyBI YW5ndXAgT0s/Ci0KLSAgSXNzdWVzIGEgd2FybmluZyBhbmQgZ2V0cyBPSyBmcm9tIHVzZXIgZGVw ZW5kaW5nIG9uIHdoZXRoZXIgYSBjb25uZWN0aW9uCi0gIHNlZW1zIHRvIGJlIG9wZW4gYW5kIHdo YXQgdGhlIFNFVCBFWElUIFdBUk5JTkcgc2V0dGluZyBpcy4gIFJldHVybnM6Ci0gICAgMCBpZiBu b3QgT0sgdG8gaGFuZyB1cCBvciBleGl0IChpLmUuIHVzZXIgc2FpZCBObyk7Ci0gICAgbm9uemVy byBpZiBPSy4KLSAgQXJndW1lbnQgeCBpcyB1c2VkIHRvIGRpZmZlcmVudGlhdGUgdGhlIEVYSVQg Y29tbWFuZCBmcm9tIFNFVCBMSU5FIC8gSE9TVC4KLSovCi1pbnQKLWh1cG9rKHgpIGludCB4OyB7 ICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm5zIDEgaWYgT0ssIDAgaWYgbm90IE9LICov Ci0gICAgaW50IHksIHogPSAxOwotICAgIGV4dGVybiBpbnQgZXhpdGhhbmd1cDsKLSNpZmRlZiBW TVMKLSAgICBleHRlcm4gaW50IGJhdGNoOwotCi0gICAgaWYgKGJhdGNoKSAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogTm8gd2FybmluZ3MgaW4gYmF0Y2ggKi8KLSAgICAgIHJldHVybigxKTsK LSNlbHNlCi0jaWZkZWYgVU5JWAotICAgIGlmIChiYWNrZ3JkKSAgICAgICAgICAgICAgICAgICAg ICAgIC8qIE5vIHdhcm5pbmdzIGluIGJhY2tncm91bmQgKi8KLSAgICAgIHJldHVybigxKTsKLSNl bmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogVk1TICovCi0KLSNpZm5kZWYgSzk1RwotICAgIGRl YnVnKEYxMDEsImh1cG9rIGxvY2FsIiwiIixsb2NhbCk7Ci0KLSAgICBpZiAoIWxvY2FsKSAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBObyB3YXJuaW5ncyBpbiByZW1vdGUgbW9kZSAqLwotICAg ICAgcmV0dXJuKDEpOwotI2VuZGlmIC8qIEs5NUcgKi8KLQotICAgIGlmICh4ID09IDAgJiYgZXhp dGhhbmd1cCA9PSAwKSAgICAgIC8qIEVYSVQgYW5kIEVYSVQgSEFOR1VQIGlzIE9GRiAqLwotICAg ICAgcmV0dXJuKDEpOwotCi0gICAgZGVidWcoRjEwMSwiaHVwb2sgeCIsIiIseCk7Ci0gICAgZGVi dWcoRjEwMSwiaHVwb2sgeGl0d2FybiIsIiIseGl0d2Fybik7Ci0gICAgZGVidWcoRjEwMSwiaHVw b2sgbmV0d29yayIsIiIsbmV0d29yayk7Ci0gICAgZGVidWcoRjEwMSwiaHVwb2sgaGF2ZWxpbmUi LCIiLGhhdmVsaW5lKTsKLQotICAgIGlmICgobG9jYWwgJiYgeGl0d2FybikgfHwgICAgICAgICAg IC8qIElzIGEgY29ubmVjdGlvbiBvcGVuPyAqLwotICAgICAgICAoIXggJiYgeGl0d2FybiA9PSAy KSkgeyAgICAgICAgIC8qIE9yIEFsd2F5cyBnaXZlIHdhcm5pbmcgb24gRVhJVCAqLwotICAgICAg ICBpbnQgbmVlZHdhcm4gPSAwOwotICAgICAgICBjaGFyIHdhcm5pbmdbMjU2XTsKLQotICAgICAg ICBpZiAobmV0d29yaykgewotICAgICAgICAgICAgaWYgKHR0Y2hrKCkgPj0gMCkKLSAgICAgICAg ICAgICAgbmVlZHdhcm4gPSAxOwotICAgICAgICAgICAgLyogQSBjb25uZWN0aW9uIHNlZW1zIHRv IGJlIG9wZW4gYnV0IGl0IGNhbid0IHBvc3NpYmx5IGJlICovCi0gICAgICAgICAgICBpZiAoIWhh dmVsaW5lKQotICAgICAgICAgICAgICBuZWVkd2FybiA9IDA7Ci0gICAgICAgICAgICBpZiAobmVl ZHdhcm4pIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RyY21wKHR0bmFtZSwiKiIpKQotICAgICAg ICAgICAgICAgICAgICBja21ha21zZyh3YXJuaW5nLDI1NiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICIgQSBuZXR3b3JrIGNvbm5lY3Rpb24gdG8gIix0dG5hbWUsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiIG1pZ2h0IHN0aWxsIGJlIGFjdGl2ZS5cbiIsTlVMTCk7Ci0g ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHdhcm5pbmcs Ci0gICAgICAgICAgICAgICAgICAgIiBBbiBpbmNvbWluZyBuZXR3b3JrIGNvbm5lY3Rpb24gbWln aHQgc3RpbGwgYmUgYWN0aXZlLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU2 KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAg ICAvKiBTZXJpYWwgY29ubmVjdGlvbiAqLwotICAgICAgICAgICAgaWYgKGNhcnJpZXIgPT0gQ0FS X09GRikgICAgIC8qIFNFVCBDQVJSSUVSIE9GRiAqLwotICAgICAgICAgICAgICBuZWVkd2FybiA9 IDA7ICAgICAgICAgICAgIC8qIHNvIHdlIGRvbid0IGNhcmUgYWJvdXQgY2Fycmllci4gKi8KLSAg ICAgICAgICAgIGVsc2UgaWYgKCh5ID0gdHRnbWRtKCkpID49IDApIC8qIGVsc2UsIGdldCBtb2Rl bSBzaWduYWxzICovCi0gICAgICAgICAgICAgIG5lZWR3YXJuID0gKHkgJiBCTV9EQ0QpOyAgLyog Q2hlY2sgZm9yIGNhcnJpZXIgKi8KLSAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAg ICAgICAvKiBJZiB3ZSBjYW4ndCBnZXQgbW9kZW0gc2lnbmFscy4uLiAqLwotICAgICAgICAgICAg ICBuZWVkd2FybiA9ICh0dGNoaygpID49IDApOwotICAgICAgICAgICAgLyogQSBjb25uZWN0aW9u IHNlZW1zIHRvIGJlIG9wZW4gYnV0IGl0IGNhbid0IHBvc3NpYmx5IGJlICovCi0gICAgICAgICAg ICBpZiAoIWhhdmVsaW5lIHx8ICFleGl0aGFuZ3VwKQotICAgICAgICAgICAgICBuZWVkd2FybiA9 IDA7Ci0gICAgICAgICAgICBpZiAobmVlZHdhcm4pCi0gICAgICAgICAgICAgICAgY2ttYWttc2co d2FybmluZywyNTYsCi0gICAgICAgICAgICAgICAgICAgICAiIEEgc2VyaWFsIGNvbm5lY3Rpb24g bWlnaHQgc3RpbGwgYmUgYWN0aXZlIG9uICIsCi0gICAgICAgICAgICAgICAgICAgICB0dG5hbWUs Ii5cbiIsTlVMTCk7Ci0gICAgICAgIH0KLQotLyogSWYgYSB3YXJuaW5nIHdhcyBpc3N1ZWQsIGdl dCB1c2VyJ3MgcGVybWlzc2lvbiB0byBFWElULiAqLwotCi0gICAgICAgIGlmIChuZWVkd2FybiB8 fCAoIXggJiYgeGl0d2FybiA9PSAyCi0jaWZuZGVmIEs5NUcKLQkJCSYmIGxvY2FsCi0jZW5kaWYg LyogSzk1RyAqLwotCQkJICkpIHsKLSAgICAgICAgICAgIGlmICggIW5lZWR3YXJuICkKLSAgICAg ICAgICAgICAgICBja3N0cm5jcHkod2FybmluZywgIk5vIGFjdGl2ZSBjb25uZWN0aW9ucyIsIDI1 Nik7Ci0KLSNpZmRlZiBDT01NRU5UCi0JICAgIHByaW50ZigiJXMiLHdhcm5pbmcpOwotICAgICAg ICAgICAgeiA9IGdldHllc25vKHggPyAiT0sgdG8gY2xvc2U/ICIgOiAiT0sgdG8gZXhpdD8gIiww KTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImh1cG9rIGdldHllc25vIiwiIix6KTsKLSAgICAg ICAgICAgIGlmICh6IDwgLTMpIHogPSAwOwotI2Vsc2UKLQkgICAgeiA9IHVxX29rKHdhcm5pbmcs Ci0JCSAgICAgIHggPyAiT0sgdG8gY2xvc2U/ICIgOiAiT0sgdG8gZXhpdD8gIiwKLQkJICAgICAg MywKLQkJICAgICAgTlVMTCwKLQkJICAgICAgMAotCQkgICAgICApOwotICAgICAgICAgICAgZGVi dWcoRjEwMSwiaHVwb2sgdXFfb2siLCIiLHopOwotCSAgICBpZiAoeiA8IDApIHogPSAwOwotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4oeik7Ci19Ci0K LSNpZm5kZWYgTk9TSE9XCi1WT0lECi1zaG9jdGwoKSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogU0hPVyBDT05UUk9MLVBSRUZJWElORyAqLwotI2lmZGVmIENLX1NQRUVECi0gICAg aW50IGk7Ci0jaWZkZWYgT1MyCi0gICAgaW50IHplcm87Ci0jZW5kaWYgLyogT1MyICovCi0gICAg cHJpbnRmKAotIlxuY29udHJvbCBxdW90ZSA9ICVkLCBhcHBsaWVkIHRvICgwID0gdW5wcmVmaXhl ZCwgMSA9IHByZWZpeGVkKTpcblxuIiwKLSAgICAgICAgICAgbXljdGxxKTsKLSNpZmRlZiBPUzIK LSNpZm5kZWYgVU5QUkVGSVhaRVJPCi0gICAgemVybyA9IGN0bHBbMF07Ci0gICAgaWYgKHByb3Rv Y29sID09IFBST1RPX0spICAgICAgICAgICAgLyogWmVybyBjYW4ndCBiZSB1bnByZWZpeGVkICov Ci0gICAgICBjdGxwWzBdID0gMTsgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIEtlcm1pdCAq LwotI2VuZGlmIC8qIFVOUFJFRklYWkVSTyAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgIGZvciAo aSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0gICAgICAgIHByaW50ZigiICAlM2Q6ICVkICAgJTNkOiAl ZCAiLGksY3RscFtpXSwgaSsxNiwgY3RscFtpKzE2XSk7Ci0gICAgICAgIGlmIChpID09IDE1KQot ICAgICAgICAgIHByaW50ZigiICAxMjc6ICVkIixjdGxwWzEyN10pOwotICAgICAgICBlbHNlCi0g ICAgICAgICAgcHJpbnRmKCIgICAgICAgICIpOwotICAgICAgICBwcmludGYoIiAgJTNkOiAlZCAg ICUzZDogJWQgIixpKzEyOCxjdGxwW2krMTI4XSwgaSsxNDQsIGN0bHBbaSsxNDRdKTsKLSAgICAg ICAgaWYgKGkgPT0gMTUpICBwcmludGYoIiAgMjU1OiAlZCIsY3RscFsyNTVdKTsKLSAgICAgICAg cHJpbnRmKCJcbiIpOwotICAgIH0KLSAgICBwcmludGYoIlxuIik7Ci0jaWZuZGVmIFVOUFJFRklY WkVSTwotI2lmZGVmIE9TMgotICAgIGN0bHBbMF0gPSB6ZXJvOwotI2VuZGlmIC8qIE9TMiAqLwot I2VuZGlmIC8qIFVOUFJFRklYWkVSTyAqLwotCi0jZW5kaWYgLyogQ0tfU1BFRUQgKi8KLX0KLQot I2lmbmRlZiBOT1hGRVIKLVZPSUQKLXNob2RibCgpIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBTSE9XIERPVUJMRS9JR05PUkUgKi8KLSNpZmRlZiBDS1hYQ0hBUgotICAgIGludCBp LCBuID0gMDsKLSAgICBwcmludGYoIlxuU0VUIFNFTkQgRE9VQkxFIGNoYXJhY3RlcnM6XG4iKTsK LSAgICBmb3IgKGkgPSAwOyBpIDwgMjU1OyBpKyspIHsKLSAgICAgICAgaWYgKGRibHRbaV0gJiAy KSB7Ci0gICAgICAgICAgICBuKys7Ci0gICAgICAgICAgICBwcmludGYoIiAlZCIsIGkpOwotICAg ICAgICB9Ci0gICAgfQotICAgIGlmIChuID09IDApCi0gICAgICBwcmludGYoIiAobm9uZSkiKTsK LSAgICBuID0gMDsKLSAgICBwcmludGYoIlxuU0VUIFJFQ0VJVkUgSUdOT1JFIGNoYXJhY3RlcnM6 XG4iKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgMjU1OyBpKyspIHsKLSAgICAgICAgaWYgKGRibHRb aV0gJiAxKSB7Ci0gICAgICAgICAgICBuKys7Ci0gICAgICAgICAgICBwcmludGYoIiAlZCIsIGkp OwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChuID09IDApCi0gICAgICBwcmludGYoIiAobm9u ZSkiKTsKLSAgICBwcmludGYoIlxuXG4iKTsKLSNlbmRpZiAvKiBDS1hYQ0hBUiAqLwotfQotI2Vu ZGlmIC8qIE5PWEZFUiAqLwotI2VuZGlmIC8qIE5PU0hPVyAqLwotCi0jaWZuZGVmIE5PUFVTSAot I2lmZGVmIENLX1JFWFgKLS8qCi0gIFJleHggY29tbWFuZC4gIE5vdGUsIHRoaXMgaXMgbm90IE9T LzItc3BlY2lmaWMsIGJlY2F1c2UgUmV4eCBhbHNvIHJ1bnMKLSAgb24gb3RoZXIgc3lzdGVtcyB3 aGVyZSBDLUtlcm1pdCBhbHNvIHJ1bnMsIGxpa2UgdGhlIEFtaWdhLgotKi8KLSNkZWZpbmUgUkVY QlVGTCAxMDAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFuZ2UgdGhpcyBpZiBuZWNjZXNzYXJ5 ICovCi1jaGFyIHJleHhidWZbUkVYQlVGTF0gPSB7ICdcMCcgfTsgICAgICAgLyogUmV4eCdzIHJl dHVybiB2YWx1ZSAoc3RyaW5nKSAqLwotCi1pbnQKLWRvcmV4eCgpIHsKLSAgICBpbnQgeCwgeTsK LSAgICBjaGFyICpyZXh4Y21kOwotCi0gICAgICAgIGlmICgoeCA9IGNtdHh0KCJSZXh4IGNvbW1h bmQiLCIiLCZyZXh4Y21kLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLQot I2lmZGVmIElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIpIHsKLSAgICAgICAgcHJpbnRmKCI/U29ycnks IGNvbW1hbmQgZGlzYWJsZWQuXHJcbiIpOwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwot ICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0jaWZkZWYgQ0tfQVBDCi0gICAgLyogRG9uJ3QgbGV0 IHRoaXMgYmUgc2V0IHJlbW90ZWx5ICovCi0gICAgaWYgKGFwY2FjdGl2ZSA9PSBBUENfTE9DQUwg fHwKLSAgICAgICAgYXBjYWN0aXZlID09IEFQQ19SRU1PVEUgJiYgIShhcGNzdGF0dXMgJiBBUENf VU5DSCkpCi0gICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotI2VuZGlmIC8qIENLX0FQQyAqLwot Ci0gICAgICAgIGNrc3RybmNweShsaW5lLHJleHhjbWQsTElOQlVGU0laKTsKLSAgICAgICAgcmV4 eGNtZCA9IGxpbmU7Ci0jaWZkZWYgT1MyCi0gICAgICAgIHJldHVybihvczJyZXh4KHJleHhjbWQs cmV4eGJ1ZixSRVhCVUZMKSk7Ci0jZWxzZSAvKiAhT1MyICovCi0gICAgICAgIHByaW50ZigiU29y cnksIG5vdGhpbmcgaGFwcGVucy5cbiIpOwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwot I2VuZGlmIC8qIE9TMiAqLwotfQotI2VuZGlmIC8qIENLX1JFWFggKi8KLSNlbmRpZiAvKiBOT1BV U0ggKi8KLSNlbHNlICAvKiBOT0lDUCAqLwotVk9JRAotZG9sb2dlbmQoKSB7Ci0gICAgLyogRHVt bXkgd3JpdGUgcmVjb3JkIHRvIGNvbm5lY3Rpb24gbG9nICovCi19Ci0jZW5kaWYgLyogTk9JQ1Ag Ki8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2Nr dXVzNC5jIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1czQuYwpk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ2NjAzYS4uMDAwMDAwMAotLS0gYS9ja2Vy bWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzNC5jCisrKyAvZGV2L251bGwK QEAgLTEsMTUwODcgKzAsMCBAQAotI2luY2x1ZGUgImNrY3N5bS5oIgotCi0vKiAgQyBLIFUgVSBT IDQgLS0gICJVc2VyIEludGVyZmFjZSIgZm9yIEMtS2VybWl0LCBwYXJ0IDQgICovCi0KLS8qCi0g IEF1dGhvcnM6Ci0gICAgRnJhbmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4sCi0gICAgICBU aGUgS2VybWl0IFByb2plY3QsIENvbHVtYmlhIFVuaXZlcnNpdHksIE5ldyBZb3JrIENpdHkKLSAg ICBKZWZmcmV5IEUgQWx0bWFuIDxqYWx0bWFuQHNlY3VyZS1lbmRwb2ludHMuY29tPgotICAgICAg U2VjdXJlIEVuZHBvaW50cyBJbmMuLCBOZXcgWW9yayBDaXR5Ci0KLSAgQ29weXJpZ2h0IChDKSAx OTg1LCAyMDExLAotICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENp dHkgb2YgTmV3IFlvcmsuCi0gICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJt aXQgQ09QWUlORy5UWFQgZmlsZSBvciB0aGUKLSAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tj bWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KLSovCi0KLS8qCi0g IEZpbGUgY2t1dXM0LmMgLS0gRnVuY3Rpb25zIG1vdmVkIGZyb20gb3RoZXIgY2t1dXMqLmMgbW9k dWxlcyB0byBldmVuCi0gIG91dCB0aGVpciBzaXplcy4KLSovCi0jaW5jbHVkZSAiY2tjZGViLmgi Ci0jaW5jbHVkZSAiY2tjYXNjLmgiCi0jaW5jbHVkZSAiY2tja2VyLmgiCi0jaW5jbHVkZSAiY2tj bmV0LmgiICAgICAgICAgICAgICAgICAgICAgLyogTmV0d29yayBzeW1ib2xzICovCi0jaW5jbHVk ZSAiY2t1dXNyLmgiCi0jaW5jbHVkZSAiY2t1dmVyLmgiCi0jaW5jbHVkZSAiY2tjeGxhLmgiICAg ICAgICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVyIHNldHMgKi8KLQotI2lmZGVmIENLX0FVVEhF TlRJQ0FUSU9OCi0jaW5jbHVkZSAiY2t1YXRoLmgiCi0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJ T04gKi8KLSNpZmRlZiBDS19TU0wKLSNpbmNsdWRlICJja19zc2wuaCIKLSNlbmRpZiAvKiBDS19T U0wgKi8KLQotI2lmZGVmIFZNUwotI2luY2x1ZGUgPGVycm5vLmg+ICAgICAgICAgICAgICAgICAg ICAgIC8qIEZvciBcdihlcnJubykgKi8KLWV4dGVybiBjaGFyICogY2t2bXNlcnJzdHIodW5zaWdu ZWQgbG9uZyk7Ci0jaWZuZGVmIE9MRF9WTVMKLSNpbmNsdWRlIDxsaWIkcm91dGluZXMuaD4gICAg ICAgICAgICAgICAvKiBOb3QgZm9yIFZBWCBDIDIuNCAqLwotI2Vsc2UKLSNpbmNsdWRlIDxsaWJk ZWYuaD4KLSNlbmRpZiAvKiBPTERfVk1TICovCi1fUFJPVE9UWVAoaW50IHZtc3R0eWZkLCAodm9p ZCkgKTsKLSNlbmRpZiAvKiBWTVMgKi8KLQotI2lmZGVmIE9TMgotI2lmbmRlZiBOVAotI2RlZmlu ZSBJTkNMX05PUE0KLSNkZWZpbmUgSU5DTF9WSU8gICAgICAgICAgICAgICAgICAgICAgICAvKiBO ZWVkZWQgZm9yIGNrb2Nvbi5oICovCi0jaW5jbHVkZSA8b3MyLmg+Ci0jdW5kZWYgQ09NTUVOVAot I2Vsc2UKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8dGFwaS5oPgotI2luY2x1ZGUg ImNrbnRhcC5oIgotI2RlZmluZSBBUElSRVQgVUxPTkcKLSNlbmRpZiAvKiBOVCAqLwotI2luY2x1 ZGUgImNrb2Nvbi5oIgotI2luY2x1ZGUgImNrb2V0Yy5oIgotaW50IFN0YXJ0ZWRGcm9tRGlhbGVy ID0gMDsKLUhXTkQgaHduZERpYWxlciA9IDA7Ci1MT05HIEtlcm1pdERpYWxlcklEID0gMDsKLSNp ZmRlZiBwdXRjaGFyCi0jdW5kZWYgcHV0Y2hhcgotI2VuZGlmIC8qIHB1dGNoYXIgKi8KLSNkZWZp bmUgcHV0Y2hhcih4KSBjb25vYyh4KQotI2lmZGVmIENLX1BJRAotI2luY2x1ZGUgPHByb2Nlc3Mu aD4KLSNlbmRpZiAvKiBDS19QSUQgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIEtVSQot ZXh0ZXJuIHN0cnVjdCBrZXl0YWIgKiB0ZXJtX2ZvbnQ7Ci1leHRlcm4gaW50IG50ZXJtZm9udCwg dHRfZm9udCwgdHRfZm9udF9zaXplOwotI2VuZGlmIC8qIEtVSSAqLwotCi1leHRlcm4geHhfc3Ry cCB4eHN0cmluZzsKLQotI2lmZGVmIERFQ19UQ1BJUAotI2luY2x1ZGUgPGRlc2NyaXA+Ci0jaW5j bHVkZSA8ZHZpZGVmPgotI2luY2x1ZGUgPGRjZGVmPgotI2VuZGlmIC8qIERFQ19UQ1BJUCAqLwot Ci0jaWZkZWYgRk5GTE9BVAotI2luY2x1ZGUgPG1hdGguaD4gICAgICAgICAgICAgICAgICAgICAg IC8qIEZsb2F0aW5nLXBvaW50IGZ1bmN0aW9ucyAqLwotI2VuZGlmIC8qIEZORkxPQVQgKi8KLQot ZXh0ZXJuIGludCBxdWlldCwgbmV0d29yaywgeGl0c3RhLCBlc2NhcGUsIG5vcHVzaCwgeGZlcnN0 YXQsCi0gIGV4aXRvbmNsb3NlLCB0bl9leGl0LCB0dG5wcm90bywgYXV0b2RsLCBmbG93LCBieXRl b3JkZXIsIHdoYXQsIGxhc3R4ZmVyOwotCi1leHRlcm4gaW50IGZpbGVwZWVrLCBuc2NhbmZpbGUs IG1ha2VzdHJsZW47Ci1leHRlcm4gY2hhciAqIGtfaW5mb19kaXI7Ci0KLSNpZm5kZWYgTUFDCi0j aWZuZGVmIEFNSUdBCi1leHRlcm4gaW50IHR0eWZkOwotI2VuZGlmIC8qIE1BQyAqLwotI2VuZGlm IC8qIEFNSUdBICovCi0KLSNpZmRlZiBUTkNPREUKLWV4dGVybiBpbnQgdG5fbmxtLCB0bl9iX25s bSwgdG5fYl94ZmVyLCB0bl9zYl9idWc7Ci1leHRlcm4gaW50IHRuX3JlbV9lY2hvOwotZXh0ZXJu IGludCB0bl9iX21ldSwgdG5fYl91bWUsIHRuX2F1dGhfa3JiNV9kZXNfYnVnOwotI2VuZGlmIC8q IFROQ09ERSAqLwotCi1zdGF0aWMgY2hhciAqIGxhc3Rrd3ZhbCA9IE5VTEw7Ci0KLWNoYXIgKiB4 ZmVyZmlsZSA9IE5VTEw7Ci1pbnQgeGZlcmxvZyA9IDA7Ci0KLWV4dGVybiBpbnQgbG9jYWwsIHhh cmdjLCBzdGF5ZmxnLCByY2ZsYWcsIGJnc2V0LCBiYWNrZ3JkLCBjZmlsZWYsCi0gIGluc2VydmVy LCBzcnZjZG1zZywgc3VjY2VzczsKLQotI2lmZGVmIFZNUwotZXh0ZXJuIGludCBiYXRjaDsKLSNl bmRpZiAvKiBWTVMgKi8KLQotZXh0ZXJuIGNoYXIgY21kZmlsW10sICp2ZXJzaW8sICpja3hzeXMs ICoqeGFyZ3Y7Ci0jaWZkZWYgREVCVUcKLWV4dGVybiBjaGFyIGRlYmZpbFtdOyAgICAgICAgICAg ICAgICAgICAvKiBEZWJ1ZyBsb2cgZmlsZSBuYW1lICovCi1leHRlcm4gaW50IGRlYnRpbTsKLSNl bmRpZiAvKiBERUJVRyAqLwotCi1leHRlcm4gaW50IG5vaW5pdDsKLQotc3RhdGljIGNoYXIgbmRh dGJ1ZlsxMF07Ci0KLWNoYXIgKm1vbnRoc1tdID0gewotICAgICJKYW4iLCAiRmViIiwgIk1hciIs ICJBcHIiLCAiTWF5IiwgIkp1biIsCi0gICAgIkp1bCIsICJBdWciLCAiU2VwIiwgIk9jdCIsICJO b3YiLCAiRGVjIgotfTsKLQotY2hhciAqCi16em5kYXRlKCkgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogUmV0dXJucyB0b2RheSdzIGRhdGUgYXMgeXl5eW1tZGQgKi8KLSAgICBjaGFy ICogcCA9IE5VTEw7Ci0gICAgaW50IHg7Ci0KLS8qIFdBUk5JTkcgLSBUaGlzIHdpbGwgZmFpbCBp ZiBhc2N0aW1lKCkgcmV0dXJucyBub24tRW5nbGlzaCBtb250aCBuYW1lcyAqLwotCi0gICAgenRp bWUoJnApOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR2V0ICJhc2N0aW1lIiBzdHJpbmcg Ki8KLSAgICBpZiAocCA9PSBOVUxMIHx8ICpwID09IE5VTCkgcmV0dXJuKCIiKTsKLSAgICBmb3Ig KHggPSAyMDsgeCA8IDI0OyB4KyspICAgICAgICAgICAvKiB5eXl5ICovCi0gICAgICBuZGF0YnVm W3ggLSAyMF0gPSBwW3hdOwotICAgIG5kYXRidWZbNl0gPSAoY2hhcikgKChwWzhdID09ICcgJykg PyAnMCcgOiBwWzhdKTsKLSAgICBuZGF0YnVmWzddID0gcFs5XTsgICAgICAgICAgICAgICAgICAv KiBkZCAqLwotICAgIGZvciAoeCA9IDA7IHggPCAxMjsgeCsrKSAgICAgICAgICAgIC8qIG1tICov Ci0gICAgICBpZiAoIXN0cm5jbXAocCs0LG1vbnRoc1t4XSwzKSkgYnJlYWs7Ci0gICAgaWYgKHgg PT0gMTIpIHsKLSAgICAgICAgbmRhdGJ1Zls0XSA9IG5kYXRidWZbNV0gPSAnPyc7Ci0gICAgfSBl bHNlIHsKLSAgICAgICAgeCsrOwotICAgICAgICBuZGF0YnVmWzRdID0gKGNoYXIpICgoeCA8IDEw KSA/ICcwJyA6ICcxJyk7Ci0gICAgICAgIG5kYXRidWZbNV0gPSAoY2hhcikgKCh4ICUgMTApICsg NDgpOwotICAgIH0KLSAgICBuZGF0YnVmWzhdID0gTlVMOwotICAgIGRlYnVnKEYxMTAsInp6bmRh dGUgcmV0dXJuIixuZGF0YnVmLDApOwotICAgIHJldHVybigoY2hhciAqKW5kYXRidWYpOwotfQot Ci0jaWZkZWYgRENNREJVRgotZXh0ZXJuIHN0cnVjdCBjbWRwdHIgKmNtZHN0azsKLWV4dGVybiBj aGFyICpsaW5lLCAqdG1wYnVmOwotI2Vsc2UKLWV4dGVybiBzdHJ1Y3QgY21kcHRyIGNtZHN0a1td OwotZXh0ZXJuIGNoYXIgbGluZVtdLCB0bXBidWZbXTsKLSNlbmRpZiAvKiBEQ01EQlVGICovCi0K LSNpZmRlZiBPUzIKLWV4dGVybiBjaGFyIGV4ZWRpcltdOwotI2Vsc2UKLWV4dGVybiBjaGFyICog ZXhlZGlyOwotI2VuZGlmIC8qIE9TMiAqLwotCi1leHRlcm4gaW50IG5ldHR5cGU7Ci0KLSNpZm5k ZWYgTk9JQ1AgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNb3N0IG9mIHRoaXMgZmlsZS4u LiAqLwotI2lmZGVmIENLTE9HRElBTAotZXh0ZXJuIGNoYXIgZGlhZmlsW107Ci0jZW5kaWYgLyog Q0tMT0dESUFMICovCi0KLSNpZm5kZWYgQU1JR0EKLSNpZm5kZWYgTUFDCi0jaW5jbHVkZSA8c2ln bmFsLmg+Ci0jZW5kaWYgLyogTUFDICovCi0jZW5kaWYgLyogQU1JR0EgKi8KLQotI2lmZGVmIFNW NjgJCQkJLyogSnVseSAyMDA2IGJlbGlldmUgaXQgb3Igbm90ICovCi0jaWZuZGVmIFNFRUtfQ1VS Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYJLyogU0VFS19DVVIgKi8KLSNlbmRpZgkvKiBT VjY4ICovCi0KLSNpZmRlZiBTQ08zMgkJCQkvKiBKdW5lIDIwMTEgYmVsaWV2ZSBpdCBvciBub3Qu Li4gKi8KLSNpZmRlZiBYRU5JWAotI2lmbmRlZiBTRUVLX0NVUgotI2luY2x1ZGUgPHVuaXN0ZC5o PgotI2VuZGlmCS8qIFNFRUtfQ1VSICovCi0jZW5kaWYJLyogWEVOSVggKi8KLSNlbmRpZgkvKiBT Q08zMiAqLwotCi0jaWZkZWYgU1RSQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3Ry YXR1cyBDb21wdXRlciwgSW5jLiAgVk9TICovCi0jaWZkZWYgcHV0Y2hhcgotI3VuZGVmIHB1dGNo YXIKLSNlbmRpZiAvKiBwdXRjaGFyICovCi0jZGVmaW5lIHB1dGNoYXIoeCkgY29ub2MoeCkKLSNp ZmRlZiBnZXRjaGFyCi0jdW5kZWYgZ2V0Y2hhcgotI2VuZGlmIC8qIGdldGNoYXIgKi8KLSNkZWZp bmUgZ2V0Y2hhcih4KSBjb25pbmMoMCkKLSNlbmRpZiAvKiBTVFJBVFVTICovCi0KLQotI2lmZGVm IEFOWVgyNQotZXh0ZXJuIGludCByZXZjYWxsLCBjbG9zZ3IsIGN1ZGF0YTsKLWludCB4MjV2ZXI7 Ci1leHRlcm4gY2hhciB1ZGF0YVtdOwotI2lmbmRlZiBJQk1YMjUKLWV4dGVybiBpbnQgbnBhZHgz OwotZXh0ZXJuIENIQVIgcGFkcGFybXNbXTsKLWV4dGVybiBzdHJ1Y3Qga2V5dGFiIHBhZHgzdGFi W107Ci0jZW5kaWYgLyogIUlCTVgyNSAqLwotI2lmZGVmIElCTVgyNQotLyogZ2xvYmFsIHZhcmlh YmxlcyBvbmx5IGF2YWlsYWJsZSBmb3IgSUJNIFguMjUgLSBwb3NzaWJseSBpbnRlcmVzdGluZyBm b3IKLSAqIG90aGVyIGltcGxlbWVudGF0aW9ucwotICovCi1leHRlcm4geDI1YWRkcl90IGxvY2Fs X251YTsKLWV4dGVybiB4MjVhZGRyX3QgcmVtb3RlX251YTsKLSNlbmRpZiAvKiBJQk1YMjUgKi8K LSNlbmRpZiAvKiBBTllYMjUgKi8KLQotI2lmZGVmIE5FVENPTk4KLSNpZm5kZWYgTk9ESUFMCi1l eHRlcm4gaW50IG5uZXRkaXI7Ci1leHRlcm4gY2hhciAqbmV0ZGlyW107Ci0jZW5kaWYgLyogTk9E SUFMICovCi1leHRlcm4gY2hhciBpcGFkZHJbXTsKLQotI2lmZGVmIENLX05FVEJJT1MKLWV4dGVy biB1bnNpZ25lZCBzaG9ydCBuZXRiaW9zQXZhaWw7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBOZXRi ZXVpQVBJOwotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgTmV0Qmlvc05hbWVbXTsKLWV4dGVybiB1bnNp Z25lZCBjaGFyIE5ldEJpb3NBZGFwdGVyOwotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgTmV0Qmlvc0xT TjsKLSNlbmRpZiAvKiBDS19ORVRCSU9TICovCi0KLSNpZmRlZiBUQ1BTT0NLRVQKLWV4dGVybiBj aGFyIG15aXBhZGRyW107Ci1leHRlcm4gaW50IHRjcF9yZG5zOwotI2lmZGVmIENLX0ROU19TUlYK LWV4dGVybiBpbnQgdGNwX2Ruc19zcnY7Ci0jZW5kaWYgLyogQ0tfRE5TX1NSViAqLwotZXh0ZXJu IGNoYXIgKiB0Y3BfYWRkcmVzczsKLSNpZm5kZWYgTk9IVFRQCi1leHRlcm4gY2hhciAqIHRjcF9o dHRwX3Byb3h5OwotI2VuZGlmIC8qIE5PSFRUUCAqLwotI2lmZGVmIE5UCi0jaWZkZWYgQ0tfU09D S1MKLWV4dGVybiBjaGFyICogdGNwX3NvY2tzX3N2cjsKLSNpZmRlZiBDS19TT0NLU19OUwotZXh0 ZXJuIGNoYXIgKiB0Y3Bfc29ja3NfbnM7Ci0jZW5kaWYgLyogQ0tfU09DS1NfTlMgKi8KLSNlbmRp ZiAvKiBDS19TT0NLUyAqLwotI2VuZGlmIC8qIE5UICovCi0KLSNpZm5kZWYgTk9UQ1BPUFRTCi0j aWZkZWYgU09MX1NPQ0tFVAotI2lmZGVmIFNPX0xJTkdFUgotZXh0ZXJuIGludCB0Y3BfbGluZ2Vy OwotZXh0ZXJuIGludCB0Y3BfbGluZ2VyX3RtbzsKLSNlbmRpZiAvKiBTT19MSU5HRVIgKi8KLSNp ZmRlZiBTT19ET05UUk9VVEUKLWV4dGVybiBpbnQgdGNwX2RvbnRyb3V0ZTsKLSNlbmRpZiAvKiBT T19ET05UUk9VVEUgKi8KLSNpZmRlZiBUQ1BfTk9ERUxBWQotZXh0ZXJuIGludCB0Y3Bfbm9kZWxh eTsKLSNlbmRpZiAvKiBUQ1BfTk9ERUxBWSAqLwotI2lmZGVmIFNPX1NOREJVRgotZXh0ZXJuIGlu dCB0Y3Bfc2VuZGJ1ZjsKLSNlbmRpZiAvKiBTT19TTkRCVUYgKi8KLSNpZmRlZiBTT19SQ1ZCVUYK LWV4dGVybiBpbnQgdGNwX3JlY3ZidWY7Ci0jZW5kaWYgLyogU09fUkNWQlVGICovCi0jaWZkZWYg U09fS0VFUEFMSVZFCi1leHRlcm4gaW50IHRjcF9rZWVwYWxpdmU7Ci0jZW5kaWYgLyogU09fS0VF UEFMSVZFICovCi0jZW5kaWYgLyogU09MX1NPQ0tFVCAqLwotI2VuZGlmIC8qIE5PVENQT1BUUyAq LwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQotZXh0ZXJu IGNoYXIgKiBmbG9uYW1lW107Ci0KLSNpZm5kZWYgTk9TUEwKLWV4dGVybiBpbnQgdmFyZXZhbDsJ CQkvKiBWYXJpYWJsZSBldmFsdWF0aW9uIG1ldGhvZCAqLwotZXh0ZXJuIGludCBmbmRpYWdzOyAg ICAgICAgICAgICAgICAgICAgIC8qIEZ1bmN0aW9uIGRpYWdub3N0aWNzIG9uL29mZiAqLwotZXh0 ZXJuIGludCBkaXZieXplcm87Ci1pbnQgaXRzYXBhdHRlcm4gPSAwOwotaW50IGlzaW5idWZsZW4g PSAwOwotaW50IGlzam9pbiA9IDA7Ci0jaWZkZWYgQ0tfQVBDCi1leHRlcm4gaW50IGFwY2FjdGl2 ZTsgICAgICAgICAgICAgICAgICAgLyogTm9uemVybyA9IEFQQyBjb21tYW5kIHdhcyByZWMnZCAq LwotZXh0ZXJuIGludCBhcGNzdGF0dXM7ICAgICAgICAgICAgICAgICAgIC8qIEFyZSBBUEMgY29t bWFuZHMgYmVpbmcgcHJvY2Vzc2VkPyAqLwotI2lmZGVmIERDTURCVUYKLWV4dGVybiBjaGFyICph cGNidWY7ICAgICAgICAgICAgICAgICAgICAvKiBBUEMgY29tbWFuZCBidWZmZXIgKi8KLSNlbHNl Ci1leHRlcm4gY2hhciBhcGNidWZbXTsKLSNlbmRpZiAvKiBEQ01EQlVGICovCi0jZW5kaWYgLyog Q0tfQVBDICovCi0KLWV4dGVybiBjaGFyIGV2YWxidWZbXTsgICAgICAgICAgICAgICAgICAvKiBF VkFMVUFURSByZXN1bHQgKi8KLWV4dGVybiBjaGFyIHVpZGJ1ZltdLCBwd2J1ZltdLCBwcm1idWZb XTsKLV9QUk9UT1RZUCggc3RhdGljIGNoYXIgKiBmbmV2YWwsIChjaGFyICosIGNoYXIgKiBbXSwg aW50LCBjaGFyICogKSApOwotX1BST1RPVFlQKCBzdGF0aWMgVk9JRCBteWZsc2gsICh2b2lkKSAp OwotX1BST1RPVFlQKCBzdGF0aWMgY2hhciAqIGdldGlwLCAoY2hhciAqKSApOwotX1BST1RPVFlQ KCBpbnQgZGVsdGEyc2VjLCAoY2hhciAqLCBsb25nICopICk7Ci0KLSNpZmRlZiBORVdGVFAKLV9Q Uk9UT1RZUCggY2hhciAqIGZ0cF9jcGxfbW9kZSwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGNoYXIg KiBmdHBfZHBsX21vZGUsICh2b2lkKSApOwotX1BST1RPVFlQKCBjaGFyICogZnRwX2F1dGh0eXBl LCAodm9pZCkgKTsKLSNlbmRpZiAvKiBORVdGVFAgKi8KLQotI2lmbmRlZiBOT0hUVFAKLV9QUk9U T1RZUCggY2hhciAqIGh0dHBfaG9zdCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBodHRwX2lz Y29ubmVjdGVkLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggY2hhciAqIGh0dHBfc2VjdXJpdHksICh2 b2lkKSApOwotI2VuZGlmIC8qIE5PSFRUUCAqLwotCi0jaWZuZGVmIE5PU0VYUAotX1BST1RPVFlQ KCBjaGFyICogZG9zZXhwLCAoY2hhciAqKSApOwotaW50IGZzZXhwZmxhZyA9IDA7Ci0jZW5kaWYg LyogTk9TRVhQICovCi0KLXN0YXRpYyBjaGFyIGhleGRpZ2l0c1sxNl0gPSB7Ci0gICAgJzAnLCcx JywnMicsJzMnLCc0JywnNScsJzYnLCc3JywnOCcsJzknLCdBJywnQicsJ0MnLCdEJywnRScsJ0Yn Ci19OwotZXh0ZXJuIGNoYXIgKiB0ZW1wZGlyOwotCi0jaWZkZWYgQ0tfUkVYWAotZXh0ZXJuIGNo YXIgcmV4eGJ1ZltdOwotI2VuZGlmIC8qIENLX1JFWFggKi8KLQotZXh0ZXJuIGludCB0ZmxpbmVb XTsKLQotY2hhciAqd2tkYXlzW10gPSB7Ci0gICAgIlN1biIsICJNb24iLCAiVHVlIiwgIldlZCIs ICJUaHUiLCAiRnJpIiwgIlNhdCIKLX07Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmZGVmIE9T MgotZXh0ZXJuIGNoYXIgc3RhcnR1cGRpcltdLCBpbmlkaXJbXTsKLSNlbHNlCi0jaWZkZWYgVk1T T1JVTklYCi1leHRlcm4gY2hhciBzdGFydHVwZGlyW107Ci0jZW5kaWYgLyogVk1TT1JVTklYICov Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBPUzIKLV9QUk9UT1RZUCAoaW50IG9zMmdldGNw LCAodm9pZCkgKTsKLSNpZmRlZiBUQ1BTT0NLRVQKLWV4dGVybiBjaGFyIHRjcG5hbWVbXTsKLSNl bmRpZiAvKiBUQ1BTT0NLRVQgKi8KLWV4dGVybiBpbnQgdGNwX2F2YWlsOwotI2lmZGVmIERFQ05F VAotZXh0ZXJuIGludCBkbmV0X2F2YWlsOwotI2VuZGlmIC8qIERFQ05FVCAqLwotI2lmZGVmIFNV UEVSTEFUCi1leHRlcm4gaW50IHNsYXRfYXZhaWw7Ci0jZW5kaWYgLyogU1VQRVJMQVQgKi8KLQot I2lmbmRlZiBOT1RFUk0KLWV4dGVybiBpbnQgdHRfdHlwZSwgbWF4X3R0OwotZXh0ZXJuIHN0cnVj dCB0dF9pbmZvX3JlYyB0dF9pbmZvW107Ci0jZW5kaWYgLyogTk9URVJNICovCi1leHRlcm4gaW50 IHR0X3Jvd3NbXSwgdHRfY29sc1tdOwotI2Vsc2UgLyogT1MyICovCi1leHRlcm4gaW50IHR0X3Jv d3MsIHR0X2NvbHM7Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBDS19UQVBJCi1leHRlcm4g aW50IHR0dGFwaTsKLWV4dGVybiBpbnQgdGFwaXBhc3M7Ci1leHRlcm4gc3RydWN0IGtleXRhYiAq IHRhcGlsaW5ldGFiOwotZXh0ZXJuIHN0cnVjdCBrZXl0YWIgKiBfdGFwaWxpbmV0YWI7Ci1leHRl cm4gaW50IG50YXBpbGluZTsKLSNlbmRpZiAvKiBDS19UQVBJICovCi0KLWV4dGVybiBzdHJ1Y3Qg a2V5dGFiIGNvbHh0YWJbXTsKLWV4dGVybiBpbnQgbmNvbHg7Ci0KLWV4dGVybiBjaGFyIHR0bmFt ZVtdLCAqemlucHRyLCAqa2VybXJjOwotZXh0ZXJuIGNoYXIgaW5pZGlyW107Ci0KLWV4dGVybiBp bnQgYWN0aXZlY21kLCByZW1vbmx5LCBjbWRfcm93cywgY21kX2NvbHMsIHBhcml0eSwgc2VzbG9n LAotICBzZXNzZnQsIHNvc2ksIGh3cGFyaXR5LCB0c2VjcywgeGFyZ3MsIHppbmNudCwgdGxldmVs LCBpbnNpbGVuY2UsIGNtZG1zaywKLSAgdGltaW50LCB0aW1lZiwgaW5idWZzaXplLCBkaWFsb2cs IGJpbmFyeSwgY2FycmllciwgY2R0aW1vLCBjbWFzaywgZHVwbGV4LAotICBmbWFzaywgaW5lY2hv LCBubWFjLCB0dXJuY2gsIHR1cm4sIGtiY2hhcjsKLQotI2lmbmRlZiBOT1hGRVIKLWV4dGVybiBD SEFSIGVvbCwgIG15cGFkYywgbXlzdGNoLCBwYWRjaCwgc2VvbCwgc3RjaHIsICogZXBrdG1zZywg ZmVvbDsKLWV4dGVybiBjaGFyICpja3N5c2lkOwotZXh0ZXJuIHN0cnVjdCBja19wIHB0YWJbXTsK LWV4dGVybiBpbnQKLSAgcHJvdG9jb2wsIHByZWZpeGluZywgeGZyYmVsLCB4ZnJjYW4sIHhmcmlu dCwgeGZyY2hyLCB4ZnJudW0sIHBrdHBhdXMsCi0gIGxzY2FwciwgbHNjYXB1LCB4ZmVybW9kZSwg ZGVzdCwgc2xvc3RhcnQsIG1heHJwcywgbWF4c3BzLCBtYXh0cnksIG15cGFkbiwKLSAgbnBhZCwg cGt0dGltLCBiaWdyYnNpeiwgYmlnc2JzaXosIGtlZXAsIGF0Y2FwciwgYXV0b3BhciwgYmN0ciwg YmN0dSwKLSAgY3J1bmNoZWQsIGNrZGVsYXksIGVicSwgZWJxZmxnLCBwa3Rsb2csIHJldHJhbnMs IHJwYWNrZXRzLCBycHRmbGcsIHJwdHEsCi0gIHJ0aW1vLCBzcGFja2V0cywgc3BzaXosIHNwc2l6 Ziwgc3BzaXpyLCB0aW1lb3V0cywgZm5jYWN0LCBmbmNudiwgdXJwc2l6LAotICB3bWF4LCB3c2xv dG4sIHdzbG90ciwgZmRpc3BsYSwgc3BtYXgsIGZucnBhdGgsIGZuc3BhdGgsIGNyYzE2OwotI2Vu ZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZkZWYgT1MyCi1leHRlcm4gaW50IHp4cG47Ci1leHRlcm4g aW50IHZpZXdvbmx5OwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZuZGVmIE5PWEZFUgotI2lmZGVm IEdGVElNRVIKLWV4dGVybiBDS0ZMT0FUIGZwdHNlY3MsIGZweGZzZWNzOwotI2VuZGlmIC8qIEdG VElNRVIgKi8KLWV4dGVybiBsb25nIHhmc2VjcywgdGZjcHM7Ci0KLSNpZmRlZiBDS19UTVBESVIK LWV4dGVybiBjaGFyICpkbGRpcjsKLSNlbmRpZiAvKiBDS19UTVBESVIgKi8KLSNlbmRpZiAvKiBO T1hGRVIgKi8KLQotI2lmZGVmIFJFQ1VSU0lWRQotZXh0ZXJuIGludCByZWN1cnNpdmU7Ci0jZW5k aWYgLyogUkVDVVJTSVZFICovCi0KLSNpZmRlZiBWTVMKLWV4dGVybiBpbnQgZnJlY2w7Ci0jZW5k aWYgLyogVk1TICovCi0KLWV4dGVybiBDS19PRkZfVCBmZmMsIHRmYywgdGxjaSwgdGxjbzsKLWV4 dGVybiBsb25nIGZpbGNudCwgcnB0biwgc3BlZWQsICBjY3UsIGNjcCwgdmVybnVtLCB4dmVybnVt OwotCi0jaWZuZGVmIE5PU1BMCi1leHRlcm4gY2hhciBmc3BlY1tdLCBteWhvc3RbXTsKLSNlbmRp ZiAvKiBOT1NQTCAqLwotCi1leHRlcm4gY2hhciAqdGZuYW1bXTsgICAgICAgICAgICAgICAgICAg LyogQ29tbWFuZCBmaWxlIG5hbWVzICovCi0KLWV4dGVybiBjaGFyIHBrdGZpbFtdLCAgICAgICAg ICAgICAgICAgICAvKiBQYWNrZXQgbG9nIGZpbGUgbmFtZSAqLwotI2lmZGVmIFRMT0cKLSAgdHJh ZmlsW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2FjdGlvbiBsb2cgZmls ZSBuYW1lICovCi0jZW5kaWYgLyogVExPRyAqLwotICBzZXNmaWxbXTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFNlc3Npb24gbG9nIGZpbGUgbmFtZSAqLwotCi0jaWZuZGVmIE5PWE1J VCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVFJBTlNNSVQgY29tbWFuZCB2YXJpYWJsZXMg Ki8KLWV4dGVybiBjaGFyIHhtaXRidWZbXTsKLWV4dGVybiBpbnQgeG1pdGYsIHhtaXRsLCB4bWl0 eCwgeG1pdHMsIHhtaXR3LCB4bWl0dDsKLSNlbmRpZiAvKiBOT1hNSVQgKi8KLQotZXh0ZXJuIGlu dCBjbWRsdmw7Ci0KLSNpZm5kZWYgTk9TUEwKLS8qIFNjcmlwdCBwcm9ncmFtbWluZyBsYW5ndWFn ZSBpdGVtcyAqLwotZXh0ZXJuIGNoYXIgKiphX3B0cltdOyAgICAgICAgICAgICAgICAgIC8qIEFy cmF5cyAqLwotZXh0ZXJuIGludCBhX2RpbVtdOwotc3RhdGljIGNoYXIgKiBpbnBtYXRjaCA9IE5V TEw7Ci0jaWZkZWYgQ0tGTE9BVAotY2hhciAqIGlucHNjYWxlID0gTlVMTDsKLSNlbmRpZgkvKiBD S0ZMT0FUICovCi1leHRlcm4gY2hhciAqIGlucGJ1ZiwgaW5jaGFyW107ICAgICAgICAgLyogQnVm ZmVycyBmb3IgSU5QVVQgYW5kIFJFSU5QVVQgKi8KLWV4dGVybiBjaGFyICppbnBicDsgICAgICAg ICAgICAgICAgICAgICAvKiBBbmQgcG9pbnRlciB0byBzYW1lICovCi1zdGF0aWMgY2hhciAqcjMg PSAoY2hhciAqKTA7Ci1leHRlcm4gaW50IGluY291bnQ7ICAgICAgICAgICAgICAgICAgICAgLyog SU5QVVQgY2hhcmFjdGVyIGNvdW50ICovCi1leHRlcm4gaW50IG1fZm91bmQ7ICAgICAgICAgICAg ICAgICAgICAgLyogTUlOUFVUIHJlc3VsdCAqLwotZXh0ZXJuIGludCBtYWNsdmw7ICAgICAgICAg ICAgICAgICAgICAgIC8qIE1hY3JvIGludm9jYXRpb24gbGV2ZWwgKi8KLWV4dGVybiBzdHJ1Y3Qg bXRhYiAqbWFjdGFiOyAgICAgICAgICAgICAvKiBNYWNybyB0YWJsZSAqLwotZXh0ZXJuIGNoYXIg Km1ydmFsW107Ci1leHRlcm4gaW50IG1hY2FyZ2NbXSwgdG9wYXJnYzsKLQotI2lmZGVmIENPTU1F TlQKLWV4dGVybiBjaGFyICptX2xpbmVbXTsKLWV4dGVybiBjaGFyICp0b3BsaW5lOwotI2VuZGlm IC8qIENPTU1FTlQgKi8KLQotZXh0ZXJuIGNoYXIgKm1fYXJnW01BQ0xFVkVMXVsxMF07IC8qIFlv dSBoYXZlIHRvIHB1dCBpbiB0aGUgZGltZW5zaW9ucyAqLwotZXh0ZXJuIGNoYXIgKmdfdmFyW0dW QVJTXTsgICAgICAgIC8qIGZvciBleHRlcm5hbCAyLWRpbWVuc2lvbmFsIGFycmF5cy4gKi8KLSNp ZmRlZiBEQ01EQlVGCi1leHRlcm4gaW50ICpjb3VudCwgKmlucGNhczsKLSNlbHNlCi1leHRlcm4g aW50IGNvdW50W10sIGlucGNhc1tdOwotI2VuZGlmIC8qIERDTURCVUYgKi8KLSNlbmRpZiAvKiBO T1NQTCAqLwotCi0jaWZkZWYgVU5JWAotZXh0ZXJuIGludCBoYXNsb2NrOyAgICAgICAgICAgICAg ICAgICAgIC8qIEZvciBVVUNQIGxvY2tzICovCi1leHRlcm4gY2hhciBmbGZuYW1bXTsKLSNpZm5k ZWYgVVNFVFRZTE9DSwotZXh0ZXJuIGNoYXIgbG9jazJbXTsKLSNlbmRpZiAvKiBVU0VUVFlMT0NL ICovCi0jZW5kaWYgLyogVU5JWCAqLwotCi0jaWZkZWYgT1MyT1JVTklYCi1leHRlcm4gaW50IG1h eG5hbSwgbWF4cGF0aDsgICAgICAgICAgICAgLyogTG9uZ2VzdCBuYW1lLCBwYXRoIGxlbmd0aCAq LwotI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwotCi1leHRlcm4gaW50IG1kbXR5cCwgbWRtc2F2Owot Ci0jaWZuZGVmIE5PRElBTAotLyogRElBTC1yZWxhdGVkIHZhcmlhYmxlcyAqLwotZXh0ZXJuIGNo YXIgbW9kZW1tc2dbXTsKLWV4dGVybiBNRE1JTkYgKm1vZGVtcFtdOyAgICAgICAgICAgICAgICAv KiBQb2ludGVycyB0byBtb2RlbSBpbmZvIHN0cnVjdHMgKi8KLWV4dGVybiBpbnQgbm1kbSwgZGlh bGhuZywgZGlhbHRtbywgZGlhbGtzcCwgZGlhbGRweSwgZGlhbHNydCwgZGlhbHN0YTsKLWV4dGVy biBpbnQgZGlhbHJ0ciwgZGlhbGludCwgZGlhbHJzdHIsIGRpYWxjb24sIGRpYWxjcSwgZGlhbGZs ZDsKLWV4dGVybiBpbnQgbWRtc3BkLCBkaWFsZWMsIGRpYWxkYywgZGlhbG10aCwgZGlhbG1hdXRv LCBkaWFsZXNjOwotZXh0ZXJuIGNoYXIgKmRpYWxudW0sICAgKmRpYWxpbmksICAqZGlhbGRpcltd LCAqZGlhbGNtZCwgICpkaWFsbnByLAotICpkaWFsZGNvbiwgKmRpYWxkY29mZiwgKmRpYWxlY29u LCAqZGlhbGVjb2ZmLCAqZGlhbGhjbWQsICpkaWFsbGFjLAotICpkaWFsaHdmYywgKmRpYWxzd2Zj LCAgKmRpYWxub2ZjLCAqZGlhbHB1bHNlLCAqZGlhbHRvbmUsICpkaWFsbmFtZSwKLSAqZGlhbGFh b24sICpkaWFsYWFvZmYsICpkaWFsbWFjOwotZXh0ZXJuIGNoYXIgKmRpYWxsY2MsICAgKmRpYWxp eHAsICAqZGlhbGl4cywgICAqZGlhbGxkcCwgICpkaWFsbGRzLAotICpkaWFscHhpLCAgKmRpYWxw eG8sICAgKmRpYWxzZngsICAqZGlhbHRmcDsKLWV4dGVybiBjaGFyICpkaWFsbGNwLCAgICpkaWFs bGNzOwotZXh0ZXJuIGludCBudG9sbGZyZWUsIG5kaWFscHh4LCBubG9jYWxhYzsKLWV4dGVybiBj aGFyICpkaWFsdGZjW10sICpkaWFsbGNhY1tdLCAqZGlhbHB4eFtdLCAqbWF0Y2hweHg7Ci1leHRl cm4gaW50IG5kaWFscHVjYywgbmRpYWx0b2NjOwotZXh0ZXJuIGNoYXIgKmRpYWx0b2NjW10sICpk aWFscHVjY1tdOwotZXh0ZXJuIGludCBuZGlhbGRpciwgZGlhbGNuZiwgZGlhbGN2dCwgZGlhbGlk dCwgZGlhbHBhY2U7Ci1leHRlcm4gbG9uZyBkaWFsbWF4LCBkaWFsY2FwYXM7Ci0KLWV4dGVybiBz dHJ1Y3Qga2V5dGFiIG1kbXRhYltdOwotCi0jaWZkZWYgQklHQlVGT0sKLSNkZWZpbmUgQVJHQlVG U0laIDgxOTEKLSNlbHNlCi0jZGVmaW5lIEFSR0JVRlNJWiAxMDIzCi0jZW5kaWYgLyogQklHQlVG T0sgKi8KLQotI2lmZGVmIEJJR0JVRk9LCi1leHRlcm4gY2hhciAqIGRpYWxtc2dbXTsKLSNlbmRp ZiAvKiBCSUdCVUZPSyAqLwotCi0jZW5kaWYgLyogTk9ESUFMICovCi0KLSNpZm5kZWYgTk9DU0VU UwotLyogVHJhbnNsYXRpb24gc3R1ZmYgKi8KLWV4dGVybiBpbnQgbmZpbGM7Ci1leHRlcm4gc3Ry dWN0IGtleXRhYiBmY3N0YWJbXTsKLWV4dGVybiBpbnQgZmNoYXJzZXQsIHRjaGFyc2V0LCB0c2xl dmVsLCBsYW5ndWFnZSwgbmxuZywgdGNzciwgdGNzbDsKLWV4dGVybiBpbnQgZGNzZXQ3LCBkY3Nl dDg7Ci1leHRlcm4gc3RydWN0IGtleXRhYiBsbmd0YWJbXTsKLWV4dGVybiBzdHJ1Y3QgY3NpbmZv IGZjc2luZm9bXSwgdGNzaW5mb1tdOwotZXh0ZXJuIHN0cnVjdCBsYW5naW5mbyBsYW5nc1tdOwot I2lmZGVmIENLX0FOU0lDCi1leHRlcm4gQ0hBUiAoKnhsc1tNQVhUQ1NFVFMrMV1bTUFYRkNTRVRT KzFdKShDSEFSKTsgLyogQ2hhcmFjdGVyIHNldCAqLwotZXh0ZXJuIENIQVIgKCp4bHJbTUFYVENT RVRTKzFdW01BWEZDU0VUUysxXSkoQ0hBUik7IC8qIHRyYW5zbGF0aW9uIGZ1bmN0aW9ucyAqLwot I2Vsc2UKLWV4dGVybiBDSEFSICgqeGxzW01BWFRDU0VUUysxXVtNQVhGQ1NFVFMrMV0pKCk7IC8q IENoYXJhY3RlciBzZXQgKi8KLWV4dGVybiBDSEFSICgqeGxyW01BWFRDU0VUUysxXVtNQVhGQ1NF VFMrMV0pKCk7IC8qIHRyYW5zbGF0aW9uIGZ1bmN0aW9ucy4gKi8KLSNlbmRpZiAvKiBDS19BTlNJ QyAqLwotI2lmZGVmIFVOSUNPREUKLSAgICBleHRlcm4gaW50IHVjc2JvbSwgdWNzb3JkZXI7Ci0j ZW5kaWYgLyogVU5JQ09ERSAqLwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQotI2lmbmRlZiBOT1NQ TAotLyogQnVpbHQtaW4gdmFyaWFibGUgbmFtZXMsIG1heGltdW0gbGVuZ3RoIFZOQU1MICgyMCBj aGFyYWN0ZXJzKSAqLwotCi1zdHJ1Y3Qga2V5dGFiIHZhcnRhYltdID0gewotICAgIHsgIl9saW5l IiwgICAgIFZOX1RGTE4sICBDTV9JTlZ9LCAgIC8qIDE5MiAqLwotI2lmZGVmIE9TMgotICAgIHsg Il9yZWduYW1lIiwgIFZOX1JFR04sICBDTV9JTlZ9LCAgIC8qIDEuMS4xMiAqLwotICAgIHsgIl9y ZWdvcmciLCAgIFZOX1JFR08sICBDTV9JTlZ9LCAgIC8qIDEuMS4xMiAqLwotICAgIHsgIl9yZWdu dW0iLCAgIFZOX1JFR1MsICBDTV9JTlZ9LCAgIC8qIDEuMS4xMiAqLwotI2VuZGlmIC8qIE9TMiAq LwotICAgIHsgImFwY2FjdGl2ZSIsIFZOX0FQQywgICBDTV9JTlZ9LCAgIC8qIDE5MiAqLwotI2lm ZGVmIE5UCi0gICAgeyAiYXBwZGF0YSIsICAgVk5fQVBQREFUQSwgMH0sICAgICAgLyogMjAxICov Ci0jZW5kaWYgLyogTlQgKi8KLSAgICB7ICJhcmdjIiwgICAgICBWTl9BUkdDLCAgMH0sCi0gICAg eyAiYXJncyIsICAgICAgVk5fQVJHUywgIDB9LAotICAgIHsgImF1dGhuYW1lIiwgIFZOX0FVVEhO LCAwfSwgICAgICAgIC8qIDE5NiAqLwotICAgIHsgImF1dGhzdGF0ZSIsIFZOX0FVVEhTLCAwfSwg ICAgICAgIC8qIDE5NSAqLwotICAgIHsgImF1dGh0eXBlIiwgIFZOX0FVVEhULCAwfSwgICAgICAg IC8qIDE5NSAqLwotICAgIHsgImJpdHMiLCAgICAgIFZOX0JJVFMsICAwfSwgICAgICAgIC8qIDIx MiAqLwotICAgIHsgImJsb2NrY2hlY2siLFZOX0JMSywgICAwfSwgICAgICAgIC8qIDE5NSAqLwot I2lmZGVmIEJST1dTRVIKLSAgICB7ICJicm93c2VyIiwgICBWTl9CUk9XU1IsMH0sICAgICAgICAv KiAxOTMgKi8KLSAgICB7ICJicm93c29wdHMiLCBWTl9CUk9QVCwgMH0sICAgICAgICAvKiAxOTMg Ki8KLSAgICB7ICJicm93c3VybCIsICBWTl9VUkwsICAgMH0sICAgICAgICAvKiAxOTMgKi8KLSAg ICB7ICJidWlsZGlkIiwgICBWTl9CVUlMRCwgMH0sICAgICAgICAvKiAxOTkgKi8KLSNlbmRpZiAv KiBCUk9XU0VSICovCi0gICAgeyAiYnl0ZW9yZGVyIiwgVk5fQllURSwgIDB9LCAgICAgICAgLyog MTk1ICovCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICB7ICJjaGFyc2V0IiwgICBWTl9DU0VULCAgMH0s ICAgICAgICAvKiAxOTIgKi8KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0gICAgeyAiY21kYnVmc2l6 ZSIsVk5fQ01EQkwsIDB9LCAgICAgICAgLyogMTk1ICovCi0gICAgeyAiY21kZmlsZSIsICAgVk5f Q01ERiwgIDB9LAotICAgIHsgImNtZGxldmVsIiwgIFZOX0NNREwsICAwfSwKLSAgICB7ICJjbWRz b3VyY2UiLCBWTl9DTURTLCAgMH0sCi0gICAgeyAiY29scyIsICAgICAgVk5fQ09MUywgIDB9LCAg ICAgICAgLyogMTkwICovCi0jaWZkZWYgTlQKLSAgICB7ICJjb21tb24iLCAgICBWTl9DT01NT04s IDB9LCAgICAgICAvKiAyMDEgKi8KLSNlbmRpZiAvKiBOVCAqLwotICAgIHsgImNvbm5lY3Rpb24i LFZOX0NPTk4sICAwfSwgICAgICAgIC8qIDE5MCAqLwotICAgIHsgImNvdW50IiwgICAgIFZOX0NP VU4sICAwfSwKLSNpZm5kZWYgTk9YRkVSCi0gICAgeyAiY3BzIiwgICAgICAgVk5fQ1BTLCAgIDB9 LCAgICAgICAgLyogMTkwICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0gICAgeyAiY3B1IiwgICAg ICAgVk5fQ1BVLCAgIDB9LAotI2lmbmRlZiBOT1hGRVIKLSAgICB7ICJjcmMxNiIsICAgICBWTl9D UkMxNiwgMH0sICAgICAgICAvKiAxOTIgKi8KLSAgICB7ICJjdHR5IiwgICAgICBWTl9UVFlOQU0s MH0sICAgICAgICAvKiAxOTYgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSNpZm5kZWYgTk9MT0dE SUFMCi0jaWZuZGVmIE5PTE9DQUwKLSAgICB7ICJjeF90aW1lIiwgICBWTl9DWFRJTUUsMH0sICAg ICAgICAvKiAxOTUgKi8KLSAgICB7ICJjeF9zdGF0dXMiLCBWTl9DWF9TVEEsMH0sICAgICAgICAv KiAxOTkgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jZW5kaWYgLyogTk9MT0dESUFMICovCi0j aWZuZGVmIE5PRElBTAotICAgIHsgImQkYWMiLCAgICAgIFZOX0RfQUMsICAwfSwgICAgICAgIC8q IDE5MiAqLwotICAgIHsgImQkY2MiLCAgICAgIFZOX0RfQ0MsICAwfSwgICAgICAgIC8qIDE5MiAq LwotICAgIHsgImQkaXAiLCAgICAgIFZOX0RfSVAsICAwfSwgICAgICAgIC8qIDE5MiAqLwotICAg IHsgImQkbGMiLCAgICAgIFZOX0RfTENQLCAwfSwgICAgICAgIC8qIDE5MyAqLwotICAgIHsgImQk bGNwIiwgICAgIFZOX0RfTENQLCBDTV9JTlZ9LCAgIC8qIDE5MyAqLwotICAgIHsgImQkbHAiLCAg ICAgIFZOX0RfTFAsICAwfSwgICAgICAgIC8qIDE5MiAqLwotICAgIHsgImQkcHgiLCAgICAgIFZO X0RfUFhYLCAwfSwgICAgICAgIC8qIDE5NSAqLwotICAgIHsgImQkcHh4IiwgICAgIFZOX0RfUFhY LCBDTV9JTlZ9LCAgIC8qIDE5NSAqLwotI2VuZGlmIC8qIE5PRElBTCAqLwotICAgIHsgImRhdGUi LCAgICAgIFZOX0RBVEUsICAwfSwKLSAgICB7ICJkYXkiLCAgICAgICBWTl9EQVksICAgMH0sCi0j aWZkZWYgTlQKLSAgICB7ICJkZXNrdG9wIiwgICBWTl9ERVNLVE9QLCAwfSwgICAgIC8qIDIwMSAq LwotI2VuZGlmIC8qIE5UICovCi0jaWZuZGVmIE5PRElBTAotICAgIHsgImRpYWxjb3VudCIsIFZO X0RSVFIsICAwfSwgICAgICAgIC8qIDE5NSAqLwotICAgIHsgImRpYWxtZXNzYWdlIixWTl9ETVNH LCAwfSwJLyogMjEyICovCi0gICAgeyAiZGlhbG51bWJlciIsVk5fRE5VTSwgIDB9LCAgICAgICAg LyogMTkyICovCi0gICAgeyAiZGlhbHJlc3VsdCIsVk5fTURNU0csIDB9LCAgICAgICAgLyogMTky ICovCi0gICAgeyAiZGlhbHN0YXR1cyIsVk5fRElBTCwgIDB9LCAgICAgICAgLyogMTkwICovCi0g ICAgeyAiZGlhbHN1ZmZpeCIsVk5fUERTRlgsIDB9LCAgICAgICAgLyogMTkzICovCi0gICAgeyAi ZGlhbHR5cGUiLCAgVk5fRFRZUEUsIDB9LCAgICAgICAgLyogMTkzICovCi0jZW5kaWYgLyogTk9E SUFMICovCi0gICAgeyAiZGlyZWN0b3J5IiwgVk5fRElSRSwgIDB9LAotI2lmbmRlZiBOT0RJQUwK LSAgICB7ICJkbV9oZiIsICAgICBWTl9ETV9IRiwgMH0sICAgICAgICAvKiAxOTkgKi8KLSAgICB7 ICJkbV9scCIsICAgICBWTl9ETV9MUCwgMH0sICAgICAgICAvKiAxOTUgKi8KLSAgICB7ICJkbV9z cCIsICAgICBWTl9ETV9TUCwgMH0sICAgICAgICAvKiAxOTUgKi8KLSAgICB7ICJkbV9wZCIsICAg ICBWTl9ETV9QRCwgMH0sICAgICAgICAvKiAxOTUgKi8KLSAgICB7ICJkbV90ZCIsICAgICBWTl9E TV9URCwgMH0sICAgICAgICAvKiAxOTUgKi8KLSAgICB7ICJkbV93YSIsICAgICBWTl9ETV9XQSwg MH0sICAgICAgICAvKiAxOTUgKi8KLSAgICB7ICJkbV93YiIsICAgICBWTl9ETV9XQiwgMH0sICAg ICAgICAvKiAxOTkgKi8KLSAgICB7ICJkbV93ZCIsICAgICBWTl9ETV9XRCwgMH0sICAgICAgICAv KiAxOTUgKi8KLSAgICB7ICJkbV9yYyIsICAgICBWTl9ETV9SQywgMH0sICAgICAgICAvKiAxOTUg Ki8KLSNlbmRpZiAvKiBOT0RJQUwgKi8KLSNpZm5kZWYgTk9YRkVSCi0gICAgeyAiZG93bmxvYWQi LCAgVk5fRExESVIsIDB9LCAgICAgICAgLyogMTkyICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0g ICAgeyAiZWRpdG9yIiwgICAgVk5fRURJVE9SLDB9LAotICAgIHsgImVkaXRmaWxlIiwgIFZOX0VE RklMRSwwfSwKLSAgICB7ICJlZGl0b3B0cyIsICBWTl9FRE9QVCwgMH0sCi0gICAgeyAiZXJybm8i LCAgICAgVk5fRVJSTk8sIDB9LCAgICAgICAgLyogMTkyICovCi0gICAgeyAiZXJyc3RyaW5nIiwg Vk5fRVJTVFIsIDB9LCAgICAgICAgLyogMTkyICovCi0gICAgeyAiZXNjYXBlIiwgICAgVk5fRVND LCAgIDB9LCAgICAgICAgLyogMTkzICovCi0gICAgeyAiZXZhbHVhdGUiLCAgVk5fRVZBTCwgIDB9 LCAgICAgICAgLyogMTkwICovCi0jaWZkZWYgT1MyT1JVTklYCi0gICAgeyAiZXhlZGlyIiwgICAg Vk5fRVhFRElSLDB9LCAgICAgICAgLyogMTkyICovCi0jZW5kaWYgLyogT1MyT1JVTklYICovCi0g ICAgeyAiZXhpdHN0YXR1cyIsVk5fRVhJVCwgIDB9LAotI2lmZGVmIENLQ0hBTk5FTElPCi0gICAg eyAiZl9jb3VudCIsICAgVk5fRkNPVSwgIDB9LCAgICAgICAgLyogMTk1ICovCi0gICAgeyAiZl9l cnJvciIsICAgVk5fRkVSUiwgIDB9LCAgICAgICAgLyogMTk1ICovCi0gICAgeyAiZl9tYXgiLCAg ICAgVk5fRk1BWCwgIDB9LCAgICAgICAgLyogMTk1ICovCi0gICAgeyAiZmlsZWVycm9yIiwgVk5f RkVSUiwgIENNX0lOVn0sICAgLyogMTk1ICovCi0gICAgeyAiZmlsZW1heCIsICAgVk5fRkVSUiwg IENNX0lOVn0sICAgLyogMTk1ICovCi0jZW5kaWYgLyogQ0tDSEFOTkVMSU8gKi8KLSAgICB7ICJm aWxlbmFtZSIsICBWTl9GTkFNLCAgMH0sICAgICAgICAvKiAxOTMgKi8KLSAgICB7ICJmaWxlbnVt YmVyIixWTl9GTlVNLCAgMH0sICAgICAgICAvKiAxOTMgKi8KLSAgICB7ICJmaWxlc3BlYyIsICBW Tl9GSUxFLCAgMH0sCi0gICAgeyAiZnNpemUiLCAgICAgVk5fRkZDLCAgIDB9LCAgICAgICAgLyog MTkwICovCi0jaWZkZWYgR0ZUSU1FUgotICAgIHsgImZ0aW1lIiwgICAgIFZOX0ZUSU1FLCAwfSwg ICAgICAgIC8qIDE5OSAqLwotI2Vsc2UKLSAgICB7ICJmdGltZSIsICAgICBWTl9OVElNLCAgQ01f SU5WfSwKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0jaWZuZGVmIE5PRlRQCi0jaWZuZGVmIFNZU0ZU UAotICAgIHsgImZ0cF9jb2RlIiwgICAgICAgICBWTl9GVFBfQywgMH0sIC8qIDE5OSAqLwotICAg IHsgImZ0cF9jcGwiLCAgICAgICAgICBWTl9GVFBfQiwgMH0sIC8qIDE5OSAqLwotICAgIHsgImZ0 cF9jb25uZWN0ZWQiLCAgICBWTl9GVFBfWCwgMH0sIC8qIDE5OSAqLwotICAgIHsgImZ0cF9kcGwi LCAgICAgICAgICBWTl9GVFBfRCwgMH0sIC8qIDE5OSAqLwotICAgIHsgImZ0cF9nZXRwdXRyZW1v dGUiLCBWTl9GVFBfRywgMH0sIC8qIDE5OSAqLwotICAgIHsgImZ0cF9ob3N0IiwgICAgICAgICBW Tl9GVFBfSCwgMH0sIC8qIDE5OSAqLwotICAgIHsgImZ0cF9sb2dnZWRpbiIsICAgICBWTl9GVFBf TCwgMH0sIC8qIDE5OSAqLwotICAgIHsgImZ0cF9tZXNzYWdlIiwgICAgICBWTl9GVFBfTSwgMH0s IC8qIDE5OSAqLwotICAgIHsgImZ0cF9tc2ciLCAgICAgICAgICBWTl9GVFBfTSwgQ01fSU5WfSwg LyogMTk5ICovCi0gICAgeyAiZnRwX3NlY3VyaXR5IiwgICAgIFZOX0ZUUF9aLCAwfSwgLyogMTk5 ICovCi0gICAgeyAiZnRwX3NlcnZlciIsICAgICAgIFZOX0ZUUF9TLCAwfSwgLyogMTk5ICovCi0j ZW5kaWYgLyogU1lTRlRQICovCi0jZW5kaWYgLyogTk9GVFAgKi8KLSAgICB7ICJmdHlwZSIsICAg ICBWTl9NT0RFLCAgMH0sICAgICAgICAvKiAxOTAgKi8KLSNpZmRlZiBLVUkKLSAgICB7ICJndWlf Zm9udG5hbWUiLCBWTl9HVUlfRk5NLCAwfSwJLyogMjA1ICovCi0gICAgeyAiZ3VpX2ZvbnRzaXpl IiwgVk5fR1VJX0ZTWiwgMH0sCS8qIDIwNSAqLwotICAgIHsgImd1aV9ydW5tb2RlIiwgVk5fR1VJ X1JVTiwgMH0sICAgIC8qIDIwNSAqLwotICAgIHsgImd1aV94cG9zIiwgICAgVk5fR1VJX1hQLCAg MH0sICAgIC8qIDIwNSAqLwotICAgIHsgImd1aV94cmVzIiwgICAgVk5fR1VJX1hSLCAgMH0sICAg IC8qIDIwNSAqLwotICAgIHsgImd1aV95cG9zIiwgICAgVk5fR1VJX1lQLCAgMH0sICAgIC8qIDIw NSAqLwotICAgIHsgImd1aV95cmVzIiwgICAgVk5fR1VJX1lSLCAgMH0sICAgIC8qIDIwNSAqLwot I2VuZGlmIC8qIEtVSSAqLwotICAgIHsgImhlcmFsZCIsICAgIFZOX0hFUkFMRCwgMH0sCi0gICAg eyAiaG9tZSIsICAgICAgVk5fSE9NRSwgICAwfSwKLSAgICB7ICJob3N0IiwgICAgICBWTl9IT1NU LCAgIDB9LAotICAgIHsgImhvdXIiLCAgICAgIFZOX0hPVVIsICAgMH0sICAgICAgIC8qIDIwMCAq LwotI2lmbmRlZiBOT0hUVFAKLSAgICB7ICJodHRwX2NvZGUiLCAgICAgIFZOX0hUVFBfQywgMH0s ICAvKiAxOTkgKi8KLSAgICB7ICJodHRwX2Nvbm5lY3RlZCIsIFZOX0hUVFBfTiwgMH0sICAvKiAx OTkgKi8KLSAgICB7ICJodHRwX2hvc3QiLCAgICAgIFZOX0hUVFBfSCwgMH0sICAvKiAxOTkgKi8K LSAgICB7ICJodHRwX21lc3NhZ2UiLCAgIFZOX0hUVFBfTSwgMH0sICAvKiAxOTkgKi8KLSAgICB7 ICJodHRwX3NlY3VyaXR5IiwgIFZOX0hUVFBfUywgMH0sICAvKiAxOTkgKi8KLSNlbmRpZiAvKiBO T0hUVFAgKi8KLSAgICB7ICJod3Bhcml0eSIsICBWTl9IV1BBUiwgMH0sICAgICAgICAvKiAxOTUg Ki8KLSAgICB7ICJpbnB1dCIsICAgICBWTl9JQlVGLCAgMH0sCi0gICAgeyAiaW5jaGFyIiwgICAg Vk5fSUNIUiwgIDB9LAotICAgIHsgImluY291bnQiLCAgIFZOX0lDTlQsICAwfSwKLSAgICB7ICJp bmlkaXIiLCAgICBWTl9JTkksICAgMH0sICAgICAgICAvKiAxOTIgKi8KLSAgICB7ICJpbm1hdGNo IiwgICBWTl9NQVRDSCwgMH0sICAgICAgICAvKiAxOTYgKi8KLSAgICB7ICJpbm1lc3NhZ2UiLCBW Tl9JTlBNU0csMH0sICAgICAgICAvKiAyMTIgKi8KLSAgICB7ICJpbnNjYWxlIiwgICBWTl9JU0NB TEUsMH0sICAgICAgICAvKiAyMTAgKi8KLSAgICB7ICJpbnN0YXR1cyIsICBWTl9JU1RBVCwgMH0s ICAgICAgICAvKiAxOTIgKi8KLSAgICB7ICJpbnRpbWUiLCAgICBWTl9JTlRJTUUsMH0sICAgICAg ICAvKiAxOTMgKi8KLSAgICB7ICJpbndhaXQiLCAgICBWTl9JTlRNTywgMH0sICAgICAgICAvKiAx OTUgKi8KLSAgICB7ICJpcCIsICAgICAgICBWTl9JUEFERFIsIENNX0FCUnxDTV9JTlZ9LAotICAg IHsgImlwYWRkcmVzcyIsIFZOX0lQQUREUiwwfSwgICAgICAgIC8qIDE5MiAqLwotICAgIHsgImlw cm9tcHQiLCAgIFZOX1BST01QVCwwfSwgICAgICAgIC8qIDE5OSAqLwotICAgIHsgImtiY2hhciIs ICAgIFZOX0tCQ0hBUiwwfSwgICAgICAgIC8qIDE5NiAqLwotI2lmbmRlZiBOT0xPQ0FMCi0jaWZk ZWYgT1MyCi0gICAgeyAia2V5Ym9hcmQiLCAgVk5fS0VZQiwgIDB9LAotI2VuZGlmIC8qIE9TMiAq LwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNpZmRlZiBDS19LRVJCRVJPUwotICAgIHsgImtyYjRl cnJtc2ciLCAgICBWTl9LNEVNU0csMH0sCi0gICAgeyAia3JiNGVycm5vIiwgICAgIFZOX0s0RU5P LCAwfSwKLSAgICB7ICJrcmI0cHJpbmNpcGFsIiwgVk5fSzRQUk4sIDB9LAotICAgIHsgImtyYjRy ZWFsbSIsICAgICBWTl9LNFJMTSwgMH0sCi0gICAgeyAia3JiNHNlcnZpY2UiLCAgIFZOX0s0U1JW LCAwfSwKLSAgICB7ICJrcmI1Y2MiLCAgICAgICAgVk5fSzVDQywgIDB9LAotICAgIHsgImtyYjVl cnJtc2ciLCAgICBWTl9LNUVNU0csMH0sCi0gICAgeyAia3JiNWVycm5vIiwgICAgIFZOX0s1RU5P LCAwfSwKLSAgICB7ICJrcmI1cHJpbmNpcGFsIiwgVk5fSzVQUk4sIDB9LAotICAgIHsgImtyYjVy ZWFsbSIsICAgICBWTl9LNVJMTSwgMH0sCi0gICAgeyAia3JiNXNlcnZpY2UiLCAgIFZOX0s1U1JW LCAwfSwKLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotICAgIHsgImxhc3Rjb21tYW5kIiwgICBW Tl9QUkVWQ01ELCAwfSwJLyogMjk5ICovCi0jaWZuZGVmIE5PTEFTVEZJTEUKLSAgICB7ICJsYXN0 ZmlsZXNwZWMiLCAgVk5fTEFTVEZJTCwgMH0sCS8qIDIxMiAqLwotI2VuZGlmCS8qIE5PTEFTVEZJ TEUgKi8KLSAgICB7ICJsYXN0a2V5d29yZHZhbHVlIiwgIFZOX0xBU1RLV1YsIDB9LCAvKiAyMTIg Ki8KLSAgICB7ICJsYXN0a3d2YWx1ZSIsICAgVk5fTEFTVEtXViwgQ01fQUJSfENNX0lOVn0sIC8q IDIxMiAqLwotICAgIHsgImxpbmUiLCAgICAgICAgICBWTl9MSU5FLCAgMH0sCi0gICAgeyAibG9j YWwiLCAgICAgICAgIFZOX0xDTCwgICAwfSwKLSNpZmRlZiBVTklYCi0gICAgeyAibG9ja2RpciIs ICAgICAgIFZOX0xDS0RJUiwwfSwJLyogMTk1ICovCi0gICAgeyAibG9ja3BpZCIsICAgICAgIFZO X0xDS1BJRCwwfSwJLyogMTk1ICovCi0jZW5kaWYgLyogVU5JWCAqLwotICAgIHsgImxvZ19jb25u ZWN0aW9uIiwgVk5fTE9HX0NPTiwgMH0sIC8qIDIwNiAqLwotICAgIHsgImxvZ19kZWJ1ZyIsIFZO X0xPR19ERUIsIDB9LCAgICAgIC8qIDIwNiAqLwotICAgIHsgImxvZ19wYWNrZXQiLCBWTl9MT0df UEtULCAwfSwgICAgIC8qIDIwNiAqLwotICAgIHsgImxvZ19zZXNzaW9uIiwgVk5fTE9HX1NFUywg MH0sICAgIC8qIDIwNiAqLwotICAgIHsgImxvZ190cmFuc2FjdGlvbiIsIFZOX0xPR19UUkEsIDB9 LC8qIDIwNiAqLwotICAgIHsgIm1hY2xldmVsIiwgIFZOX01BQ0xWTCwwfSwgICAgICAgIC8qIDE5 NSAqLwotICAgIHsgIm1hY3JvIiwgICAgIFZOX01BQywgICAwfSwKLSNpZmRlZiBGTkZMT0FUCi0g ICAgeyAibWF0aF9lIiwgICAgVk5fTUFfRSwgIDB9LCAgICAgICAgLyogMTk1ICovCi0gICAgeyAi bWF0aF9waSIsICAgVk5fTUFfUEksIDB9LCAgICAgICAgLyogMTk1ICovCi0gICAgeyAibWF0aF9w cmVjaXNpb24iLCBWTl9NQV9QUiwgMH0sICAgLyogMTk1ICovCi0jZW5kaWYgLyogRk5GTE9BVCAq LwotICAgIHsgIm1pbnB1dCIsICAgIFZOX01JTlAsICAwfSwgICAgICAgIC8qIDE5MiAqLwotICAg IHsgIm1vZGVsIiwgICAgIFZOX01PREwsICAwfSwgICAgICAgIC8qIDE5MyAqLwotICAgIHsgIm1v ZGVtIiwgICAgIFZOX01ETSwgICAwfSwKLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIE9TMgotICAg IHsgIm1vdXNlY3VyeCIsIFZOX01PVV9YLCAwfSwgICAgICAgIC8qIEs5NSAxLjEuMTQgKi8KLSAg ICB7ICJtb3VzZWN1cnkiLCBWTl9NT1VfWSwgMH0sICAgICAgICAvKiBLOTUgMS4xLjE0ICovCi0j ZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2lmbmRlZiBOT0RJQUwKLSAg ICB7ICJtX2FhX29mZiIsICBWTl9NX0FBWCwgMH0sICAgICAgICAvKiBhbGwgMTkyLi4uICovCi0g ICAgeyAibV9hYV9vbiIsICAgVk5fTV9BQU8sIDB9LAotICAgIHsgIm1fZGNfb2ZmIiwgIFZOX01f RENYLCAwfSwKLSAgICB7ICJtX2RjX29uIiwgICBWTl9NX0RDTywgMH0sCi0gICAgeyAibV9kaWFs IiwgICAgVk5fTV9EQ00sIDB9LAotICAgIHsgIm1fZWNfb2ZmIiwgIFZOX01fRUNYLCAwfSwKLSAg ICB7ICJtX2VjX29uIiwgICBWTl9NX0VDTywgMH0sCi0gICAgeyAibV9mY19odyIsICAgVk5fTV9I V0YsIDB9LAotICAgIHsgIm1fZmNfbm8iLCAgIFZOX01fTkZDLCAwfSwKLSAgICB7ICJtX2ZjX3N3 IiwgICBWTl9NX1NXRiwgMH0sCi0gICAgeyAibV9odXAiLCAgICAgVk5fTV9IVVAsIDB9LAotICAg IHsgIm1faW5pdCIsICAgIFZOX01fSU5JLCAwfSwKLSAgICB7ICJtX25hbWUiLCAgICBWTl9NX05B TSwgMH0sICAgICAgICAvKiAxOTUgKi8KLSAgICB7ICJtX3B1bHNlIiwgICBWTl9NX1BETSwgMH0s Ci0gICAgeyAibV9zaWdfY2QiLCAgVk5fTVNfQ0QsIDB9LCAgICAgICAgLyogMTk1ICovCi0gICAg eyAibV9zaWdfY3RzIiwgVk5fTVNfQ1RTLDB9LCAgICAgICAgLyogMTk1ICovCi0gICAgeyAibV9z aWdfZHNyIiwgVk5fTVNfRFNSLDB9LCAgICAgICAgLyogMTk1ICovCi0gICAgeyAibV9zaWdfZHRy IiwgVk5fTVNfRFRSLDB9LCAgICAgICAgLyogMTk1ICovCi0gICAgeyAibV9zaWdfcmkiLCAgVk5f TVNfUkksIDB9LCAgICAgICAgLyogMTk1ICovCi0gICAgeyAibV9zaWdfcnRzIiwgVk5fTVNfUlRT LDB9LCAgICAgICAgLyogMTk1ICovCi0gICAgeyAibV90b25lIiwgICAgVk5fTV9URE0sIDB9LAot I2VuZGlmIC8qIE5PRElBTCAqLwotICAgIHsgIm5hbWUiLCAgICAgIFZOX05BTUUsICAwfSwKLSAg ICB7ICJuZGF0ZSIsICAgICBWTl9OREFULCAgMH0sCi0gICAgeyAibmRheSIsICAgICAgVk5fTkRB WSwgIDB9LAotICAgIHsgIm5ld2xpbmUiLCAgIFZOX05FV0wsICAwfSwKLSAgICB7ICJudGltZSIs ICAgICBWTl9OVElNLCAgMH0sCi0gICAgeyAib3NuYW1lIiwgICAgVk5fT1NOQU0sIDB9LCAgICAg ICAgLyogMTkzICovCi0gICAgeyAib3NyZWxlYXNlIiwgVk5fT1NSRUwsIDB9LCAgICAgICAgLyog MTkzICovCi0gICAgeyAib3N2ZXJzaW9uIiwgVk5fT1NWRVIsIDB9LCAgICAgICAgLyogMTkzICov Ci0jaWZuZGVmIE5PWEZFUgotICAgIHsgInBhY2tldGxlbiIsIFZOX1JQU0laLCAwfSwgICAgICAg IC8qIDE5MiAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgIHsgInBhcml0eSIsICAgIFZOX1BS VFksICAwfSwgICAgICAgIC8qIDE5MCAqLwotICAgIHsgInBhc3N3b3JkIiwgIFZOX1BXRCwgICBD TV9JTlZ9LCAgIC8qIDE5MiAqLwotI2lmZGVmIE5UCi0gICAgeyAicGVyc29uYWwiLCAgVk5fUEVS U09OQUwsIDB9LCAgICAgLyogMjAxICovCi0jZW5kaWYgLyogTlQgKi8KLSNpZmRlZiBQRVhJVFNU QVQKLSAgICB7ICJwZXhpdHN0YXQiLCBWTl9QRVhJVCwgMH0sICAgICAgICAvKiAxOTMgKi8KLSNl bmRpZiAvKiBQRVhJVFNUQVQgKi8KLSNpZmRlZiBDS19QSUQKLSAgICB7ICJwaWQiLCAgICAgICBW Tl9QSUQsICAgMH0sICAgICAgICAvKiAxOTMgKi8KLSNlbmRpZiAvKiBDS19QSUQgKi8KLSAgICB7 ICJwbGF0Zm9ybSIsICBWTl9TWVNWLCAgMH0sCi0gICAgeyAicHJpbnRlciIsICAgVk5fUFJJTlQs IDB9LCAgICAgICAgLyogMTkzICovCi0gICAgeyAicHJvZ3JhbSIsICAgVk5fUFJPRywgIDB9LAot ICAgIHsgInByb21wdCIsICAgIFZOX1BSTSwgICBDTV9JTlZ9LCAgIC8qIDE5MiAqLwotI2lmbmRl ZiBOT1hGRVIKLSAgICB7ICJwcm90b2NvbCIsICBWTl9QUk9UTywgMH0sICAgICAgICAvKiAxOTIg Ki8KLSAgICB7ICJwXzhiaXQiLCAgICBWTl9QXzhCSVQsMH0sICAgICAgICAvKiAxOTMgKi8KLSAg ICB7ICJwX2N0bCIsICAgICBWTl9QX0NUTCwgMH0sICAgICAgICAvKiAxOTMgKi8KLSAgICB7ICJw X3JwdCIsICAgICBWTl9QX1JQVCwgMH0sICAgICAgICAvKiAxOTMgKi8KLSAgICB7ICJxdWVyeSIs ICAgICBWTl9RVUUsICAgMH0sICAgICAgICAvKiAxOTAgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8K LSAgICB7ICJyZW1vdGVpcCIsICBWTl9IT1NUSVAsMH0sCS8qIDIxMiAqLwotICAgIHsgInJldHVy biIsICAgIFZOX1JFVCwgICAwfSwKLSNpZmRlZiBDS19SRVhYCi0gICAgeyAicmV4eCIsICAgICAg Vk5fUkVYWCwgIDB9LCAgICAgICAgLyogMTkwICovCi0jZW5kaWYgLyogQ0tfUkVYWCAqLwotI2lm ZGVmIFROX0NPTVBPUlQKLSAgICB7ICJyZmMyMjE3X3NpZ25hdHVyZSIsIFZOX1ROQ19TSUcsIDB9 LCAvKiAyMDEgKi8KLSAgICB7ICJyZmMyNzE3X3NpZ25hdHVyZSIsIFZOX1ROQ19TSUcsIENNX0lO Vn0sIC8qIDIwMiAqLwotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLSAgICB7ICJyb3dzIiwgICAg ICBWTl9ST1dTLCAgMH0sICAgICAgICAvKiAxOTAgKi8KLSNpZm5kZWYgTk9TRVhQCi0gICAgeyAi c2RlcHRoIiwgICAgVk5fTFNFWFAsMH0sICAgICAgICAgLyogMTk5ICovCi0jZW5kaWYgLyogTk9T RVhQICovCi0gICAgeyAic2VjdXJlIiwgICAgVk5fU0VDVVJFLCAwfSwgICAgICAgLyogMTk5ICov Ci0jaWZuZGVmIE5PTE9DQUwKLSNpZmRlZiBPUzIKLSAgICB7ICJzZWxlY3QiLCAgICBWTl9TRUxD VCwgMH0sICAgICAgICAvKiAxOTIgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT0xP Q0FMICovCi0gICAgeyAic2VuZGxpc3QiLCAgVk5fU05ETCwgIDB9LAotICAgIHsgInNlcmlhbCIs ICAgIFZOX1NFUklBTCwwfSwgICAgICAgIC8qIDE5NSAqLwotICAgIHsgInNldGxpbmVtc2ciLFZO X1NMTVNHLCAwfSwgICAgICAgIC8qIDE5NSAqLwotI2lmbmRlZiBOT1NFWFAKLSAgICB7ICJzZXhw cmVzc2lvbiIsVk5fU0VYUCwgMH0sICAgICAgICAvKiAxOTkgKi8KLSNlbmRpZiAvKiBOT1NFWFAg Ki8KLSAgICB7ICJzcGVlZCIsICAgICBWTl9TUEVFLCAgMH0sCi0jaWZkZWYgT1MyCi0gICAgeyAi c3BhY2UiLCAgICAgVk5fU1BBLCAgIDB9LAotICAgIHsgInN0YXJ0dXAiLCAgIFZOX1NUQVIsICAw fSwgICAgICAgIC8qIDE5MCAqLwotI2Vsc2UKLSNpZmRlZiBVTklYCi0gICAgeyAic3RhcnR1cCIs ICAgVk5fU1RBUiwgIDB9LCAgICAgICAgLyogMTkzICovCi0jZWxzZQotI2lmZGVmIFZNUwotICAg IHsgInN0YXJ0dXAiLCAgIFZOX1NUQVIsICAwfSwgICAgICAgIC8qIDE5MyAqLwotI2VuZGlmIC8q IFZNUyAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB7ICJzdGF0 dXMiLCAgICBWTl9TVUNDLCAgMH0sCi0jaWZuZGVmIE5PU0VYUAotICAgIHsgInN2YWx1ZSIsICAg IFZOX1ZTRVhQLCAwfSwgICAgICAgIC8qIDE5OSAqLwotI2VuZGlmIC8qIE5PU0VYUCAqLwotI2lm bmRlZiBOT1hGRVIKLSAgICB7ICJzeXNpZCIsICAgICBWTl9TWVNJLCAgMH0sCi0jZW5kaWYgLyog Tk9YRkVSICovCi0gICAgeyAic3lzdGVtIiwgICAgVk5fU1lTVCwgIDB9LAotICAgIHsgInRlcm1p bmFsIiwgIFZOX1RUWVAsICAwfSwKLSNpZmRlZiBPUzIKLSNpZm5kZWYgTk9LVkVSQlMKLSAgICB7 ICJ0ZXJta2V5IiwgICBWTl9UUk1LLCAgQ01fSU5WfSwgICAvKiAxOTIgKi8KLSNlbmRpZiAvKiBO T0tWRVJCUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgIHsgInRlc3QiLCAgICAgIFZOX1RFU1Qs ICAwfSwgICAgICAgIC8qIDE5MyAqLwotICAgIHsgInRleHRkaXIiLCAgIFZOX1RYVERJUiwwfSwg ICAgICAgIC8qIDE5NSAqLwotI2lmbmRlZiBOT1hGRVIKLSAgICB7ICJ0ZnNpemUiLCAgICBWTl9U RkMsICAgMH0sCi0gICAgeyAidGZ0aW1lIiwgICAgVk5fVEZUSU0sIDB9LCAgICAgICAgLyogMTk1 ICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0gICAgeyAidGltZSIsICAgICAgVk5fVElNRSwgIDB9 LAotICAgIHsgInRpbWVzdGFtcCIsIFZOX05PVywgICAwfSwgICAgICAgIC8qIDIwMCAqLwotICAg IHsgInRtcGRpciIsICAgIFZOX1RFTVAsICAwfSwgICAgICAgIC8qIDE5MiAqLwotI2lmZGVmIENL X1RSSUdHRVIKLSAgICB7ICJ0cmlnZ2VyIiwgICBWTl9UUklHLCAgMH0sICAgICAgICAvKiAxOTMg Ki8KLSNlbmRpZiAvKiBDS19UUklHR0VSICovCi0jaWZkZWYgQ0tfVFRZRkQKLSAgICB7ICJ0dHlm ZCIsICAgICBWTl9UVFlGLCAgMH0sCi0jZW5kaWYgLyogQ0tfVFRZRkQgKi8KLSAgICB7ICJ0eV9s biIsICAgICBWTl9UWV9MTiwgMH0sICAgICAgICAvKiAxOTUgKi8KLSAgICB7ICJ0eV9sYyIsICAg ICBWTl9UWV9MQywgMH0sICAgICAgICAvKiAxOTUgKi8KLSAgICB7ICJ0eV9sbSIsICAgICBWTl9U WV9MTSwgMH0sICAgICAgICAvKiAxOTUgKi8KLSNpZmRlZiBCUk9XU0VSCi0gICAgeyAidXJsIiwg ICAgICAgVk5fVVJMLCAgIENNX0lOVn0sICAgLyogMTkzICovCi0jZW5kaWYgLyogQlJPV1NFUiAq LwotICAgIHsgInVzZXJpZCIsICAgIFZOX1VJRCwgICAwfSwgICAgICAgIC8qIDE5MiAqLwotICAg IHsgInZhcmV2YWwiLCAgIFZOX1ZBUkVWQUwsIDB9LAkvKiAyMTIgKi8KLSAgICB7ICJ2ZXJzaW9u IiwgICBWTl9WRVJTLCAgMH0sCi0jaWZuZGVmIE5PWEZFUgotICAgIHsgIndpbmRvdyIsICAgIFZO X1dJTkRPLCAwfSwgICAgICAgIC8qIDE5MiAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotI2lmZGVm IElCTVgyNQotICAgIHsgIngyNWxvY2FsX251YSIsIFZOX1gyNUxBLCAwfSwgICAgIC8qIDE5MyAq LwotICAgIHsgIngyNXJlbW90ZV9udWEiLCBWTl9YMjVSQSwgMH0sICAgIC8qIDE5MyAqLwotI2Vu ZGlmIC8qIElCTVgyNSAqLwotI2lmZGVmIENLX1NTTAotICAgIHsgIng1MDlfaXNzdWVyIiwgIFZO X1g1MDlfSSwgMH0sCi0gICAgeyAieDUwOV9zdWJqZWN0IiwgVk5fWDUwOV9TLCAwfSwKLSNlbmRp ZiAvKiBDS19TU0wgKi8KLSNpZm5kZWYgTk9YRkVSCi0gICAgeyAieGZlcnN0YXR1cyIsVk5fWEZT VEFULDB9LCAgICAgICAgLyogMTkzICovCi0gICAgeyAieGZlcm1zZyIsICAgVk5fWEZNU0csIDB9 LCAgICAgICAgLyogMTkzICovCi0gICAgeyAieGZlcl9iYWRwYWNrZXRzIiwgVk5fWEZfQkMsIDB9 LCAgLyogMTk1ICovCi0gICAgeyAieGZlcl90aW1lb3V0cyIsICAgVk5fWEZfVE0sIDB9LCAgLyog MTk1ICovCi0gICAgeyAieGZlcl9yZXRyYW5zbWl0cyIsVk5fWEZfUlgsIDB9LCAgLyogMTk1ICov Ci0jZW5kaWYgLyogTk9YRkVSICovCi0gICAgeyAieHByb2dyYW0iLCAgVk5fWFBST0csIDB9LCAg ICAgICAgLyogMTkzICovCi0gICAgeyAieHZlcnNpb24iLCAgVk5fWFZOVU0sIDB9ICAgICAgICAg LyogMTkyICovCi19OwotaW50IG52YXJzID0gKHNpemVvZih2YXJ0YWIpIC8gc2l6ZW9mKHN0cnVj dCBrZXl0YWIpKTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVmIE5PU1BMCi1zdHJ1Y3Qg a2V5dGFiIGZuY3RhYltdID0geyAgICAgICAgICAgICAgLyogRnVuY3Rpb24gbmFtZXMgKi8KLSNp ZmRlZiBPUzIKLSAgICB7ICIub294IiwgICAgICAgRk5fT09YLCBDTV9JTlZ9LCAgICAvKiAuLi4g Ki8KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIENLQ0hBTk5FTElPCi0gICAgeyAiX2VvZiIs ICAgICAgIEZOX0ZFT0YsICAgMH0sCi0gICAgeyAiX2Vycm1zZyIsICAgIEZOX0ZFUk1TRywgMH0s Ci0gICAgeyAiX2dldGJsb2NrIiwgIEZOX0ZHQkxLLCAgMH0sCi0gICAgeyAiX2dldGNoYXIiLCAg IEZOX0ZHQ0hBUiwgMH0sCi0gICAgeyAiX2dldGxpbmUiLCAgIEZOX0ZHTElORSwgMH0sCi0gICAg eyAiX2hhbmRsZSIsICAgIEZOX0ZJTE5PLCAgMH0sCi0gICAgeyAiX2xpbmUiLCAgICAgIEZOX05M SU5FLCAgMH0sCi0gICAgeyAiX3BvcyIsICAgICAgIEZOX0ZQT1MsICAgMH0sCi0gICAgeyAiX3B1 dGJsb2NrIiwgIEZOX0ZQQkxLLCAgMH0sCi0gICAgeyAiX3B1dGNoYXIiLCAgIEZOX0ZQQ0hBUiwg MH0sCi0gICAgeyAiX3B1dGxpbmUiLCAgIEZOX0ZQTElORSwgMH0sCi0gICAgeyAiX3N0YXR1cyIs ICAgIEZOX0ZTVEFULCAgMH0sCi0jZW5kaWYgLyogQ0tDSEFOTkVMSU8gKi8KLQotICAgIHsgImFh Y29udmVydCIsICBGTl9BQURVTVAsIDB9LCAgICAgIC8qIEFzc29jaWF0aXZlIEFycmF5IGNvbnZl cnNpb24gKi8KLSAgICB7ICJhYnNvbHV0ZSIsICAgRk5fQUJTLCAgMH0sICAgICAgICAvKiBBYnNv bHV0ZSB2YWx1ZSAqLwotI2lmZGVmIFRDUFNPQ0tFVAotICAgIHsgImFkZHIybmFtZSIsICBGTl9I U1RBREQsQ01fSU5WfSwgIC8qIElQIEFkZHJlc3MgdG8gSG9zdG5hbWUgKi8KLSAgICB7ICJhZGRy dG9uYW1lIiwgRk5fSFNUQURELENNX0lOVn0sICAvKiBJUCBBZGRyZXNzIHRvIEhvc3RuYW1lICov Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0gICAgeyAiYXJyYXlsb29rIiwgIEZOX0FMT09LLDB9 LCAgICAgICAgLyogQXJyYXkgbG9va3VwICovCi0gICAgeyAiYjY0ZGVjb2RlIiwgIEZOX0ZNQjY0 LDB9LCAgICAgICAgLyogQmFzZS02NCBjb252ZXJzaW9uICovCi0gICAgeyAiYjY0ZW5jb2RlIiwg IEZOX1RPQjY0LDB9LCAgICAgICAgLyogLi4uICovCi0gICAgeyAiYmFzZW5hbWUiLCAgIEZOX0JT TiwgIDB9LCAgICAgICAgLyogQmFzZW5hbWUgKi8KLSAgICB7ICJicmVhayIsICAgICAgRk5fQlJL LCAgMH0sICAgICAgICAvKiBCcmVhayAoYXMgaW4gU25vYm9sKSAqLwotICAgIHsgImNhIiwgICAg ICAgICBGTl9DQVAsICBDTV9JTlZ8Q01fQUJSfSwgLyogQWJicmV2aWF0aW9uIGZvciBjYXBpdGFi bGl6ZSAqLwotICAgIHsgImNhcCIsICAgICAgICBGTl9DQVAsICBDTV9JTlZ8Q01fQUJSfSwgLyog QWJicmV2aWF0aW9uIGZvciBjYXBpdGFibGl6ZSAqLwotICAgIHsgImNhcGl0YWxpemUiLCBGTl9D QVAsICAwfSwgICAgICAgIC8qIEZpcnN0IExldHRlciAtPiB1cHBlcmNhc2UgKi8KLSAgICB7ICJj YXBzIiwgICAgICAgRk5fQ0FQLCAgQ01fSU5WfSwgICAvKiBkaXR0byAqLwotICAgIHsgImNoYXJh Y3RlciIsICBGTl9DSFIsICAwfSwgICAgICAgIC8qIENoYXJhY3RlciBmcm9tIGNvZGUgKi8KLSAg ICB7ICJjaGVja3N1bSIsICAgRk5fQ0hLLCAgMH0sICAgICAgICAvKiBDaGVja3N1bSAqLwotICAg IHsgImNtZHN0YWNrIiwgICBGTl9DTURTVEssMH0sICAgICAgIC8qIENvbW1hbmQgc3RhY2sgKi8K LSAgICB7ICJjbXBkYXRlcyIsICAgRk5fQ01QREFURSwwfSwgICAgICAvKiBDb21wYXJlIGRhdGVz ICovCi0gICAgeyAiY29kZSIsICAgICAgIEZOX0NPRCwgIDB9LCAgICAgICAgLyogQ29kZSBmcm9t IGNoYXJhY3RlciAqLwotI2lmbmRlZiBOT1BVU0gKLSAgICB7ICJjb21tYW5kIiwgICAgRk5fQ01E LCAgMH0sICAgICAgICAvKiBPdXRwdXQgZnJvbSBhIGNvbW1hbmQgKi8KLSNlbmRpZiAvKiBOT1BV U0ggKi8KLSAgICB7ICJjb250ZW50cyIsICAgRk5fQ09OLCAgMH0sICAgICAgICAvKiBEZWZpbml0 aW9uIChjb250ZW50cykgb2YgdmFyaWFibGUgKi8KLSAgICB7ICJjb3VudCIsICAgICAgRk5fQ09V TlQsIDB9LCAgICAgICAvKiBPY2N1cnJlbmNlcyBvZiBzdHJpbmcgaW4gc3RyaW5nICovCi0gICAg eyAiY3JjMTYiLCAgICAgIEZOX0NSQywgIDB9LCAgICAgICAgLyogQ1JDLTE2ICovCi0jaWZkZWYg T1MyCi0gICAgeyAiY3J5cHQiLCAgICAgIEZOX0NSWSwgQ01fSU5WfSwKLSNlbmRpZiAvKiBPUzIg Ki8KLSAgICB7ICJjdnRjc2V0IiwgICAgRk5fWExBVEUsIDB9LAkvKiBDb252ZXJ0IGNoYXJhY3Rl ciBzZXQgKi8KLSAgICB7ICJjdnRkYXRlIiwgICAgRk5fRFRJTSwgMH0sICAgICAgICAvKiBDb252 ZXJ0IGZyZWUgZGF0ZS90aW1lIHRvIHN0ZCAqLwotI2lmZGVmIFpGQ0RBVAotICAgIHsgImRhdGUi LCAgICAgICBGTl9GRCwgICAwfSwgICAgICAgIC8qIEZpbGUgbW9kaWZpY2F0aW9uL2NyZWF0aW9u IGRhdGUgKi8KLSNlbmRpZiAvKiBaRkNEQVQgKi8KLSAgICB7ICJkYXkiLCAgICAgICAgRk5fREFZ LCAgMH0sICAgICAgICAvKiBEYXkgb2Ygd2VlayAqLwotICAgIHsgImRheW9meWVhciIsICBGTl9K REFURSwwfSwgICAgICAgIC8qIERhdGUgdG8gRGF5IG9mIFllYXIgKi8KLSAgICB7ICJkZWNvZGVo ZXgiLCAgRk5fVU5QQ1QsIDB9LAkvKiBEZWNvZGUgc3RyaW5nIHdpdGggaGV4IGVzY2FwZXMgKi8K LSAgICB7ICJkZWZpbml0aW9uIiwgRk5fREVGLCAgMH0sICAgICAgICAvKiBSZXR1cm4gZGVmaW5p dGlvbiBvZiBnaXZlbiBtYWNybyAqLwotICAgIHsgImRlbHRhMnNlY3MiLCBGTl9ERUxTRUMsIDB9 LCAgICAgIC8qIERlbHRhIHRpbWUgdG8gc2Vjb25kcyAqLwotICAgIHsgImRlbHRhdG9zZWNzIiwg Rk5fREVMU0VDLCBDTV9JTlZ9LCAvKiBEZWx0YSB0aW1lIHRvIHNlY29uZHMgKi8KLSNpZm5kZWYg Tk9ESUFMCi0gICAgeyAiZGlhbGNvbnZlcnQiLEZOX1BOQ1ZULDB9LCAgICAgICAgLyogQ29udmVy dCBwb3J0YWJsZSBwaG9uZSBudW1iZXIgKi8KLSNlbmRpZiAvKiBOT0RJQUwgKi8KLSAgICB7ICJk aWZmZGF0ZXMiLCAgRk5fRElGREFURSwwfSwgICAgICAvKiBEaWZmZXJlbmNlIG9mIHR3byBkYXRl LXRpbWVzICovCi0gICAgeyAiZGltZW5zaW9uIiwgIEZOX0RJTSwgIDB9LCAgICAgICAgLyogRGlt ZW5zaW9uIG9mIGFycmF5ICovCi0gICAgeyAiZGlyIiwgICAgICAgIEZOX0RJUiwgIENNX0lOVnxD TV9BQlJ9LCAvKiBBYmJyZXZpYXRpb24gZm9yIGRpcmVjdC4uICovCi0gICAgeyAiZGlyZSIsICAg ICAgIEZOX0RJUiwgIENNX0lOVnxDTV9BQlJ9LCAvKiBBYmJyZXZpYXRpb24gZm9yIGRpcmVjdC4u ICovCi0gICAgeyAiZGlyZWMiLCAgICAgIEZOX0RJUiwgIENNX0lOVnxDTV9BQlJ9LCAvKiBBYmJy ZXZpYXRpb24gZm9yIGRpcmVjdC4uICovCi0gICAgeyAiZGlyZWN0IiwgICAgIEZOX0RJUiwgIENN X0lOVnxDTV9BQlJ9LCAvKiBBYmJyZXZpYXRpb24gZm9yIGRpcmVjdC4uICovCi0gICAgeyAiZGly ZWN0byIsICAgIEZOX0RJUiwgIENNX0lOVnxDTV9BQlJ9LCAvKiBBYmJyZXZpYXRpb24gZm9yIGRp cmVjdC4uICovCi0gICAgeyAiZGlyZWN0b3IiLCAgIEZOX0RJUiwgIENNX0lOVnxDTV9BQlJ9LCAv KiBBYmJyZXZpYXRpb24gZm9yIGRpcmVjdC4uICovCi0gICAgeyAiZGlyZWN0b3JpZXMiLEZOX0RJ UiwgIDB9LCAgICAgICAgLyogTGlzdCBvZiBkaXJlY3RvcmllcyAqLwotICAgIHsgImRpcmVjdG9y eSIsICBGTl9ESVIsICBDTV9JTlZ9LAkvKiBMaXN0IG9mIGRpcmVjdG9yaWVzICovCi0gICAgeyAi ZGlybmFtZSIsICAgIEZOX0ROQU0sIDB9LCAgICAgICAgLyogRGlyZWN0b3J5IHBhcnQgb2YgZmls ZW5hbWUgKi8KLSAgICB7ICJkb3MydW5peHBhdGgiLEZOX1BDX0RVLCB9LCAgICAgICAvKiBET1Mg dG8gVU5JWCBwYXRoICovCi0gICAgeyAiZG9zdG91bml4cGF0aCIsRk5fUENfRFUsIENNX0lOVn0s IC8qIERPUyB0byBVTklYIHBhdGggKi8KLSAgICB7ICJkb3kiLCAgICAgICAgRk5fSkRBVEUsQ01f SU5WfSwgICAvKiBEYXRlIHRvIERheSBvZiBZZWFyICovCi0gICAgeyAiZG95MmRhdGUiLCAgIEZO X0RBVEVKLDB9LCAgICAgICAgLyogRGF5IG9mIFllYXIgdG8gZGF0ZSAqLwotICAgIHsgImRveXRv ZGF0ZSIsICBGTl9EQVRFSixDTV9JTlZ9LCAgIC8qIERheSBvZiBZZWFyIHRvIGRhdGUgKi8KLSAg ICB7ICJlbWFpbGFkZHJlc3MiLEZOX0VNQUlMLCAwfSwJLyogRW1haWwgYWRkcmVzcyAqLwotI2lm ZGVmIEZOX0VSUk1TRwotICAgIHsgImVycnN0cmluZyIsICBGTl9FUlJNU0csMH0sICAgICAgIC8q IEVycm9yIGNvZGUgdG8gbWVzc2FnZSAqLwotI2VuZGlmIC8qIEZOX0VSUk1TRyAqLwotICAgIHsg ImV2YWx1YXRlIiwgICBGTl9FVkEsICAwfSwgICAgICAgIC8qIEV2YWx1YXRlIGdpdmVuIGFyaXRo IGV4cHJlc3Npb24gKi8KLSAgICB7ICJleGVjdXRlIiwgICAgRk5fRVhFLCAgMH0sICAgICAgICAv KiBFeGVjdXRlIGdpdmVuIG1hY3JvICovCi0gICAgeyAiZmlsZXMiLCAgICAgIEZOX0ZDLCAgIDB9 LCAgICAgICAgLyogRmlsZSBjb3VudCAqLwotI2lmZGVmIEZORkxPQVQKLSAgICB7ICJmcGFic29s dXRlIiwgRk5fRlBBQlMsIDB9LCAgICAgICAvKiBGbG9hdGluZy1wb2ludCBhYnNvbHV0ZSB2YWx1 ZSAqLwotICAgIHsgImZwYWRkIiwgICAgICBGTl9GUEFERCwgMH0sICAgICAgIC8qIEZQIGFkZCAq LwotICAgIHsgImZwY29zaW5lIiwgICBGTl9GUENPUywgMH0sICAgICAgIC8qIEZQIGNvc2luZSAq LwotICAgIHsgImZwZGl2aWRlIiwgICBGTl9GUERJViwgMH0sICAgICAgIC8qIEZQIGRpdmlkZSAq LwotICAgIHsgImZwZXhwIiwgICAgICBGTl9GUEVYUCwgMH0sICAgICAgIC8qIEZQIGUgdG8gdGhl IHggKi8KLSAgICB7ICJmcGludCIsICAgICAgRk5fRlBJTlQsIDB9LCAgICAgICAvKiBGUCB0byBp bnRlZ2VyICovCi0gICAgeyAiZnBsb2cxMCIsICAgIEZOX0ZQTE9HLCAwfSwgICAgICAgLyogRlAg YmFzZS0xMCBsb2dhcml0aG0gKi8KLSAgICB7ICJmcGxvZ24iLCAgICAgRk5fRlBMTiwgIDB9LCAg ICAgICAvKiBGUCBuYXR1cmFsIGxvZ2FyaXRobSAqLwotICAgIHsgImZwbWF4aW11bSIsICBGTl9G UE1BWCwgMH0sICAgICAgIC8qIEZQIG1heGludW0gKi8KLSAgICB7ICJmcG1pbmltdW0iLCAgRk5f RlBNSU4sIDB9LCAgICAgICAvKiBGUCBtaW5pbnVtICovCi0gICAgeyAiZnBtb2R1bHVzIiwgIEZO X0ZQTU9ELCAwfSwgICAgICAgLyogRlAgbW9kdWx1cyAqLwotICAgIHsgImZwbXVsdGlwbHkiLCBG Tl9GUE1VTCwgMH0sICAgICAgIC8qIEZQIG11bHRpcGx5ICovCi0gICAgeyAiZnByYWlzZSIsICAg IEZOX0ZQUE9XLCAwfSwgICAgICAgLyogRlAgcmFpc2UgdG8gYSBwb3dlciAqLwotICAgIHsgImZw cm91bmQiLCAgICBGTl9GUFJPVSwgMH0sICAgICAgIC8qIEZQIHJvdW5kICovCi0gICAgeyAiZnBz aW5lIiwgICAgIEZOX0ZQU0lOLCAwfSwgICAgICAgLyogRlAgc2luZSAqLwotICAgIHsgImZwc3Fy dCIsICAgICBGTl9GUFNRUiwgMH0sICAgICAgIC8qIEZQIHNxdWFyZSByb290ICovCi0gICAgeyAi ZnBzdWJ0cmFjdCIsIEZOX0ZQU1VCLCAwfSwgICAgICAgLyogRlAgc3VidHJhY3QgKi8KLSAgICB7 ICJmcHRhbmdlbnQiLCAgRk5fRlBUQU4sIDB9LCAgICAgICAvKiBGUCB0YW5nZW50ICovCi0jZW5k aWYgLyogRk5GTE9BVCAqLwotICAgIHsgImZ1bmN0aW9uIiwgICBGTl9GVU5DLCAwIH0sICAgICAg IC8qIFRlc3QgZm9yIGV4aXN0ZW5jZSBvZiBhIGZ1bmN0aW9uICovCi0gICAgeyAiZ2V0cGlkaW5m byIsIEZOX1BJRCwgMCAgfSwgICAgICAgLyogR2V0IFBJRCBpbmZvICovCi0gICAgeyAiaGV4Mmlw IiwgICAgIEZOX0hFWDJJUCwwfSwgICAgICAgLyogSGV4IHRvIElQIGFkZHJlc3MgKi8KLSAgICB7 ICJoZXh0b2lwIiwgICAgRk5fSEVYMklQLENNX0lOVn0sICAvKiBIZXggdG8gSVAgYWRkcmVzcyAq LwotICAgIHsgImhleDJuIiwgICAgICBGTl9IRVgyTiwgQ01fSU5WfSwgIC8qIEhleCB0byBkZWNp bWFsIG51bWJlciAqLwotICAgIHsgImhleGlmeSIsICAgICBGTl9IRVgsICAgMH0sICAgICAgIC8q IEhleGlmeSAoc3RyaW5nKSAqLwotICAgIHsgImluZGV4IiwgICAgICBGTl9JTkQsICAgMH0sICAg ICAgIC8qIEluZGV4IChzdHJpbmcgc2VhcmNoKSAqLwotICAgIHsgImlwMmhleCIsICAgICBGTl9J UDJIRVgsMH0sICAgICAgIC8qIElQIGFkZHJlc3MgdG8gaGV4ICovCi0gICAgeyAiaXB0b2hleCIs ICAgIEZOX0lQMkhFWCxDTV9JTlZ9LCAgLyogSVAgYWRkcmVzcyB0byBoZXggKi8KLSAgICB7ICJp cGFkZHJlc3MiLCAgRk5fSVBBLCAgIDB9LCAgICAgICAvKiBGaW5kIGFuZCByZXR1cm4gSVAgYWRk cmVzcyAqLwotICAgIHsgImpkYXRlIiwgICAgICBGTl9KREFURSwgQ01fSU5WfSwgIC8qIERhdGUg dG8gRGF5IG9mIFllYXIgKi8KLSAgICB7ICJqb2luIiwgICAgICAgRk5fSk9JTiwgIDB9LCAgICAg ICAvKiBKb2luIGFycmF5IGVsZW1lbnRzICovCi0gICAgeyAia2V5d29yZHZhbHVlIiwgIEZOX0tX VkFMLCAwfSwgICAgLyogS2V5d29yZD1WYWx1ZSAqLwotI2lmZGVmIENLX0tFUkJFUk9TCi0gICAg eyAia3JiZmxhZ3MiLCAgICAgIEZOX0tSQl9GRywgMH0sICAgLyogS2VyYmVyb3MgZnVuY3Rpb25z ICovCi0gICAgeyAia3JiaXN2YWxpZCIsICAgIEZOX0tSQl9JViwgMH0sCi0gICAgeyAia3JibmV4 dHRpY2tldCIsIEZOX0tSQl9OWCwgMH0sCi0gICAgeyAia3JidGlja2V0cyIsICAgIEZOX0tSQl9U SywgMH0sCi0gICAgeyAia3JidGltZWxlZnQiLCAgIEZOX0tSQl9UVCwgMH0sCi0jZW5kaWYgLyog Q0tfS0VSQkVST1MgKi8KLSAgICB7ICJrd3ZhbHVlIiwgICAgRk5fS1dWQUwsIENNX0lOVn0sCS8q IEtleXdvcmQ9VmFsdWUgKi8KLSAgICB7ICJsZWZ0IiwgICAgICAgRk5fTEVGLCAgMH0sICAgICAg ICAvKiBMZWZ0bW9zdCBuIGNoYXJhY3RlcnMgb2Ygc3RyaW5nICovCi0gICAgeyAibGVuZ3RoIiwg ICAgIEZOX0xFTiwgIDB9LCAgICAgICAgLyogUmV0dXJuIGxlbmd0aCBvZiBhcmd1bWVudCAqLwot ICAgIHsgImxpdGVyYWwiLCAgICBGTl9MSVQsICAwfSwgICAgICAgIC8qIFJldHVybiBhcmd1bWVu dCBsaXRlcmFsbHkgKi8KLSNpZmRlZiBOVAotICAgIHsgImxvbmdwYXRobmFtZSIsRk5fTE5BTUUs MH0sCS8qIEdldExvbmdQYXRoTmFtZSgpICovCi0jZWxzZQotICAgIHsgImxvbmdwYXRobmFtZSIs Rk5fRkZOLENNX0lOVn0sCi0jZW5kaWYgLyogTlQgKi8KLSAgICB7ICJsb3AiLCAgICAgICAgRk5f U1RMLCAgMH0sICAgICAgICAvKiBMb3AgKi8KLSAgICB7ICJsb3B4IiwgICAgICAgRk5fTE9QWCwg MH0sICAgICAgICAvKiBMb3B4ICovCi0gICAgeyAibG93ZXIiLCAgICAgIEZOX0xPVywgIDB9LCAg ICAgICAgLyogUmV0dXJuIGxvd2VyY2FzZWQgYXJndW1lbnQgKi8KLSAgICB7ICJscGFkIiwgICAg ICAgRk5fTFBBLCAgMH0sICAgICAgICAvKiBSZXR1cm4gbGVmdC1wYWRkZWQgYXJndW1lbnQgKi8K LSAgICB7ICJsdHJpbSIsICAgICAgRk5fTFRSLCAgMH0sICAgICAgICAvKiBMZWZ0LVRyaW0gKi8K LSAgICB7ICJtYXhpbXVtIiwgICAgRk5fTUFYLCAgMH0sICAgICAgICAvKiBSZXR1cm4gbWF4aW11 bSBvZiB0d28gYXJndW1lbnRzICovCi0gICAgeyAibWluaW11bSIsICAgIEZOX01JTiwgIDB9LCAg ICAgICAgLyogUmV0dXJuIG1pbmltdW0gb2YgdHdvIGFyZ3VtZW50cyAqLwotICAgIHsgIm1qZCIs ICAgICAgICBGTl9NSkQsICAwfSwgICAgICAgIC8qIERhdGUgdG8gTW9kaWZpZWQgSnVsaWFuIERh dGUgKi8KLSAgICB7ICJtamQyZGF0ZSIsICAgRk5fTUpEMiwgMH0sICAgICAgICAvKiBNSkQgdG8g RGF0ZSAqLwotICAgIHsgIm1qZHRvZGF0ZSIsICBGTl9NSkQyLCBDTV9JTlZ9LCAgIC8qIE1KRCB0 byBEYXRlICovCi0gICAgeyAibW9kdWx1cyIsICAgIEZOX01PRCwgIDB9LCAgICAgICAgLyogUmV0 dXJuIG1vZHVsdXMgb2YgdHdvIGFyZ3VtZW50cyAqLwotI2lmZGVmIENPTU1FTlQKLSAgICB7ICJt c2xlZXAiLCAgICAgRk5fTVNMRUVQLDB9LCAgICAgICAvKiBTbGVlcCBmb3IgbiBtaWxsaXNlY29u ZHMgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgeyAibjJoZXgiLCAgICAgIEZOXzJIRVgs IENNX0lOVn0sICAgLyogTnVtYmVyIHRvIGhleCAqLwotICAgIHsgIm4yb2N0YWwiLCAgICBGTl8y T0NULCBDTV9JTlZ9LCAgIC8qIE51bWJlciB0byBvY3RhbCAqLwotICAgIHsgIm4ydGltZSIsICAg ICBGTl9OMlRJTSwwfSwgICAgICAgIC8qIE51bWJlciB0byBoaDptbTpzcyAqLwotI2lmZGVmIFRD UFNPQ0tFVAotICAgIHsgIm5hbWUyYWRkciIsICBGTl9IU1ROQU0sQ01fSU5WfSwgIC8qIEhvc3Ru YW1lIHRvIElQIEFkZHJlc3MgKi8KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSAgICB7ICJuZGF5 IiwgICAgICAgRk5fTkRBWSwgMH0sICAgICAgICAvKiBOdW1lcmljIGRheSBvZiB3ZWVrICovCi0g ICAgeyAibmV4dGZpbGUiLCAgIEZOX0ZJTCwgIDB9LCAgICAgICAgLyogTmV4dCBmaWxlIGluIGxp c3QgKi8KLSAgICB7ICJudGltZSIsICAgICAgRk5fTlRJTSwgMH0sICAgICAgICAvKiBUaW1lIHRv IHNlY29uZHMgc2luY2UgbWlkbmlnaHQgKi8KLSAgICB7ICJudG9oZXgiLCAgICAgRk5fMkhFWCwg Q01fSU5WfSwgICAvKiBOdW1iZXIgdG8gaGV4ICovCi0gICAgeyAibnRvb2N0YWwiLCAgIEZOXzJP Q1QsIENNX0lOVn0sICAgLyogTnVtYmVyIHRvIG9jdGFsICovCi0gICAgeyAibnRvdGltZSIsICAg IEZOX04yVElNLENNX0lOVn0sICAgLyogTnVtYmVyIHRvIGhoOm1tOnNzICovCi0gICAgeyAib2N0 Mm4iLCAgICAgIEZOX09DVDJOLENNX0lOVn0sICAgLyogT2N0YWwgdG8gZGVjaW1hbCBudW1iZXIg Ki8KLSAgICB7ICJvY3R0b24iLCAgICAgRk5fT0NUMk4sQ01fSU5WfSwgICAvKiBPY3RhbCB0byBk ZWNpbWFsIG51bWJlciAqLwotICAgIHsgInBhdGhuYW1lIiwgICBGTl9GRk4sICAwfSwgICAgICAg IC8qIEZ1bGwgZmlsZSBuYW1lICovCi0gICAgeyAicGF0dGVybiIsICAgIEZOX1BBVFRFUk4sIDB9 LCAgICAgLyogUGF0dGVybiAoZm9yIElOUFVUKSAqLwotI2lmZGVmIENLX1BFUk1TCi0gICAgeyAi cGVybWlzc2lvbnMiLEZOX1BFUk0sIDB9LCAgICAgICAgLyogUGVybWlzc2lvbnMgb2YgZmlsZSAq LwotI2Vsc2UKLSAgICB7ICJwZXJtaXNzaW9ucyIsRk5fUEVSTSwgQ01fSU5WfSwgICAvKiBQZXJt aXNzaW9ucyBvZiBmaWxlICovCi0jZW5kaWYgLyogQ0tfUEVSTVMgKi8KLSNpZmRlZiBTRUVLX0NV UgotICAgIHsgInBpY3R1cmVpbmZvIixGTl9QSUNUVVJFLCAwIH0sCS8qIFBpY3R1cmUgb3JpZW50 YXRpb24vZGltZW5zaW9ucyAqLwotI2VuZGlmCS8qIFNFRUtfQ1VSICovCi0gICAgeyAicmFkaXgi LCAgICAgIEZOX1JBRElYLCAwIH0sCS8qIFJhZGl4IGNvbnZlcnNpb24gKi8KLSNpZm5kZWYgTk9S QU5ET00KLSAgICB7ICJyYW5kb20iLCAgICAgRk5fUkFORCwgMH0sICAgICAgICAvKiBSYW5kb20g bnVtYmVyICovCi0jZW5kaWYgLyogTk9SQU5ET00gKi8KLSNpZm5kZWYgTk9QVVNICi0gICAgeyAi cmF3Y29tbWFuZCIsIEZOX1JBVywgIDB9LCAgICAgICAgLyogT3V0cHV0IGZyb20gYSBjb21tYW5k IChyYXcpICovCi0jZW5kaWYgLyogTk9QVVNIICovCi0jaWZkZWYgUkVDVVJTSVZFCi0gICAgeyAi cmRpcmVjdG9yaWVzIiwgRk5fUkRJUiwgMH0sICAgICAgLyogUmVjdXJzaXZlIGRpcmVjdG9yeSBs aXN0ICovCi0jZW5kaWYgLyogUkVDVVJTSVZFICovCi0gICAgeyAicmVjdXJzZSIsICAgIEZOX1JF Q1VSU0UsIDB9LAkvKiBSZWN1cnNpdmUgdmFyaWFibGUgZXZhbHVhdGlvbiAqLwotI2lmZGVmIFJF Q1VSU0lWRQotICAgIHsgInJmaWxlcyIsICAgICAgIEZOX1JGSUwsIDB9LCAgICAgIC8qIFJlY3Vy c2l2ZSBmaWxlIGxpc3QgKi8KLSNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KLSAgICB7ICJyZXAiLCAg ICAgICAgRk5fUkVQLCBDTV9JTlZ8Q01fQUJSfSwKLSAgICB7ICJyZXBlYXQiLCAgICAgRk5fUkVQ LCAgMH0sICAgICAgICAvKiBSZXBlYXQgYXJndW1lbnQgZ2l2ZW4gIyBvZiB0aW1lcyAqLwotICAg IHsgInJlcGxhY2UiLCAgICBGTl9SUEwsICAwfSwgICAgICAgIC8qIFJlcGxhY2UgY2hhcmFjdGVy cyBpbiBzdHJpbmcgKi8KLSAgICB7ICJyZXZlcnNlIiwgICAgRk5fUkVWLCAgMH0sICAgICAgICAv KiBSZXZlcnNlIHRoZSBhcmd1bWVudCBzdHJpbmcgKi8KLSAgICB7ICJyaWdodCIsICAgICAgRk5f UklHLCAgMH0sICAgICAgICAvKiBSaWdodG1vc3QgbiBjaGFyYWN0ZXJzIG9mIHN0cmluZyAqLwot ICAgIHsgInJpbmRleCIsICAgICBGTl9SSVgsICAwfSwgICAgICAgIC8qIFJpZ2h0IGluZGV4ICov Ci0gICAgeyAicnBhZCIsICAgICAgIEZOX1JQQSwgIDB9LCAgICAgICAgLyogUmlnaHQtcGFkIHRo ZSBhcmd1bWVudCAqLwotICAgIHsgInJzZWFyY2giLCAgICBGTl9SU0VBUkNILCAwfSwgICAgIC8q IFItTCBTZWFyY2ggZm9yIHBhdHRlcm4gaW4gc3RyaW5nICovCi0jaWZkZWYgT1MyCi0gICAgeyAi c2NybmN1cngiLCAgIEZOX1NDUk5fQ1gsICAwfSwgICAgLyogU2NyZWVuIEN1cnNvciBYIFBvcyAq LwotICAgIHsgInNjcm5jdXJ5IiwgICBGTl9TQ1JOX0NZLCAgMH0sICAgIC8qIFNjcmVlbiBDdXJz b3IgWSBQb3MgKi8KLSAgICB7ICJzY3Juc3RyIiwgICAgRk5fU0NSTl9TVFIsIDB9LCAgICAvKiBT Y3JlZW4gU3RyaW5nICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgeyAic2VhcmNoIiwgICAgIEZO X1NFQVJDSCwgMH0sICAgICAgLyogTC1SIFNlYXJjaCBmb3IgcGF0dGVybiBpbiBzdHJpbmcgKi8K LSNpZm5kZWYgTk9TRVhQCi0gICAgeyAic2V4cHJlc3Npb24iLEZOX1NFWFAsIDB9LCAgICAgICAg LyogUy1FeHByZXNzaW9uICovCi0jZW5kaWYgLyogTk9TRVhQICovCi0jaWZkZWYgTlQKLSAgICB7 ICJzaG9ydHBhdGhuYW1lIixGTl9TTkFNRSwwfSwJLyogR2V0U2hvcnRQYXRoTmFtZSgpICovCi0j ZWxzZQotICAgIHsgInNob3J0cGF0aG5hbWUiLEZOX0ZGTixDTV9JTlZ9LAotI2VuZGlmIC8qIE5U ICovCi0gICAgeyAic2l6ZSIsICAgICAgIEZOX0ZTLCAgIDB9LCAgICAgICAgLyogRmlsZSBzaXpl ICovCi0jaWZkZWYgQ09NTUVOVAotICAgIHsgInNsZWVwIiwgICAgICBGTl9TTEVFUCwwfSwgICAg ICAgIC8qIFNsZWVwIGZvciBuIHNlY29uZHMgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAg eyAic3BhbiIsICAgICAgIEZOX1NQTiwgIDB9LCAgICAgICAgLyogU3BhbiAtIGxpa2UgU25vYm9s ICovCi0gICAgeyAic3BsaXQiLCAgICAgIEZOX1NQTElULDB9LCAgICAgICAgLyogU3BsaXQgc3Ry aW5nIGludG8gd29yZHMgKi8KLSAgICB7ICJzcXVlZXplIiwgICAgRk5fU1FVRUVaRSwwfSwJLyog U3F1ZWV6ZSB3aGl0ZXNwYWNlIGluIHN0cmluZyAqLwotICAgIHsgInN0cmNtcCIsICAgICBGTl9T VFJDTVAsMH0sCS8qIFN0cmluZyBjb21wYXJpc29uICovCi0gICAgeyAic3RyaW5ndHlwZSIsIEZO X1NUUklOR1QsMH0sCS8qIFN0cmluZyB0eXBlICg3LWJpdCwgOC1iaXQsIFVURi04KSAqLwotICAg IHsgInN0cmlwYiIsICAgICBGTl9TVEIsICAwfSwgICAgICAgIC8qIFN0cmlwIGVuY2xvc2luZyBi cmFjZXMvYnJhY2tldHMgKi8KLSAgICB7ICJzdHJpcG4iLCAgICAgRk5fU1ROLCAgMH0sICAgICAg ICAvKiBTdHJpcCBuIGNoYXJzICovCi0gICAgeyAic3RyaXB4IiwgICAgIEZOX1NUWCwgIDB9LCAg ICAgICAgLyogU3RyaXAgc3VmZml4ICovCi0gICAgeyAic3UiLCAgICAgICAgIEZOX1NVQiwgIENN X0lOVnxDTV9BQlJ9LAotICAgIHsgInN1YiIsICAgICAgICBGTl9TVUIsICBDTV9JTlZ8Q01fQUJS fSwKLSAgICB7ICJzdWJzIiwgICAgICAgRk5fU1VCLCAgQ01fSU5WfENNX0FCUn0sCi0gICAgeyAi c3Vic3QiLCAgICAgIEZOX1NVQiwgIENNX0lOVnxDTV9BQlJ9LAotICAgIHsgInN1YnN0aXR1dGUi LCBGTl9TVUJTVCwwfSwgICAgICAgIC8qIFN1YnN0aXR1dGUgY2hhcnMgKi8KLSAgICB7ICJzdWJz dHJpbmciLCAgRk5fU1VCLCAgMH0sICAgICAgICAvKiBFeHRyYWN0IHN1YnN0cmluZyBmcm9tIGFy Z3VtZW50ICovCi0gICAgeyAidGFibGVsb29rIiwgIEZOX1RMT09LLDB9LCAgICAgICAgLyogVGFi bGUgbG9va3VwICovCi0gICAgeyAidGltZSIsICAgICAgIEZOX1RJTUUsIDB9LCAgICAgICAgLyog RnJlZS1mb3JtYXQgdGltZSB0byBoaDptbTpzcyAqLwotICAgIHsgInRvZDJzZWNzIiwgICBGTl9O VElNLCBDTV9JTlZ9LCAgIC8qIFRpbWUtb2YtZGF5LXRvLXNlY3Mtc2luY2UtbWlkbml0ZSAqLwot ICAgIHsgInRvZHRvc2VjcyIsICBGTl9OVElNLCBDTV9JTlZ9LCAgIC8qIFRpbWUtb2YtZGF5LXRv LXNlY3Mtc2luY2UtbWlkbml0ZSAqLwotICAgIHsgInRyaW0iLCAgICAgICBGTl9UUk0sICAwfSwg ICAgICAgIC8qIFRyaW0gKi8KLSAgICB7ICJ1bmhleGlmeSIsICAgRk5fVU5ILCAgMH0sICAgICAg ICAvKiBVbmhleGlmeSAqLwotICAgIHsgInVuaXgyZG9zcGF0aCIsRk5fUENfVUQsIDB9LCAgICAg IC8qIFVOSVggdG8gRE9TIHBhdGggKi8KLSAgICB7ICJ1bml4dG9kb3NwYXRoIixGTl9QQ19VRCwg Q01fSU5WfSwgLyogVU5JWCB0byBET1MgcGF0aCAqLwotICAgIHsgInVudGFiaWZ5IiwgICBGTl9V TlRBQiwwfSwgICAgICAgIC8qIFVudGFiaWZ5ICovCi0gICAgeyAidXBwZXIiLCAgICAgIEZOX1VQ UCwgIDB9LCAgICAgICAgLyogUmV0dXJuIHVwcGVyY2FzZWQgYXJndW1lbnQgKi8KLSAgICB7ICJ1 dGNkYXRlIiwgICAgRk5fVE9HTVQsMH0sICAgICAgICAvKiBEYXRlLXRpbWUgdG8gVVRDIChHTVQp ICovCi0gICAgeyAidmVyaWZ5IiwgICAgIEZOX1ZFUiwgIDB9LCAgICAgICAgLyogVmVyaWZ5ICov Ci0gICAgeyAid29yZCIsICAgICAgIEZOX1dPUkQsIDB9LCAgICAgICAgLyogRXh0cmFjdCBhIHdv cmQgKi8KLSAgICB7ICIiLCAwLCAwfQotfTsKLWludCBuZnVuY3MgPSAoc2l6ZW9mKGZuY3RhYikg LyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZu ZGVmIE5PU1BMICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQnVmZmVyIGZvciBleHBhbnNp b24gb2YgKi8KLSNpZmRlZiBCSUdCVUZPSyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBidWls dC1pbiB2YXJpYWJsZXMuICovCi0jZGVmaW5lIFZWQlVGTCAxMDI0Ci0jZWxzZQotI2RlZmluZSBW VkJVRkwgMjU2Ci0jZW5kaWYgLyogQklHQlVGT0sgKi8KLWNoYXIgdnZidWZbVlZCVUZMKzFdOwot I2VuZGlmIC8qIE5PU1BMICovCi0KLXN0cnVjdCBrZXl0YWIgZGlzcHRiW10gPSB7ICAgICAgICAg ICAgICAvKiBMb2cgZmlsZSBkaXNwb3NpdGlvbiAqLwotICAgIHsgImFwcGVuZCIsICAgIDEsICAw fSwKLSAgICB7ICJuZXciLCAgICAgICAwLCAgMH0KLX07Ci0KLSNpZmRlZiBDS0ZMT0FUCi0KLS8q IEkgTiBJIFQgRiBMIE8gQSBUICAtLSAgRGVkdWNlIGZsb2F0aW5nLXBvaW50IHByZWNpc2lvbiBi eSBpbnNwZWN0aW9uICovCi0KLWludCBmcF9yb3VuZGluZyA9IDA7ICAgICAgICAgICAgICAgIC8q IE5vbnplcm8gaWYgcHJpbnRmKCIlZiIpIHJvdW5kcyAqLwotaW50IGZwX2RpZ2l0cyA9IDA7ICAg ICAgICAgICAgICAgICAgLyogRGlnaXRzIG9mIGZsb2F0aW5nIHBvaW50IHByZWNpc2lvbiAqLwot Ci0jaWZkZWYgQ09NTUVOVAotLyogRm9yIGxvb2tpbmcgYXQgaW50ZXJuYWwgZmxvYXRpbmctcG9p bnQgcmVwcmVzZW50YXRpb25zICovCi1zdGF0aWMgY2hhciBmcF94YnVmWzEyOF07Ci1zdGF0aWMg Y2hhciAqCi10b2hleChzLCBuKSBDSEFSICogczsgaW50IG47IHsKLSAgICBpbnQgeDsKLSAgICBj aGFyICogcCA9IGZwX3hidWY7Ci0gICAgd2hpbGUgKG4tLSA+IDApIHsKLSAgICAgICAgeCA9ICgq cyA+PiA0KSAmIDB4MGY7Ci0gICAgICAgICpwKysgPSBoZXhkaWdpdHNbeF07Ci0gICAgICAgIHgg PSAqcysrICYgMHgwZjsKLSAgICAgICAgKnArKyA9IGhleGRpZ2l0c1t4XTsKLSAgICB9Ci0gICAg KnAgPSBOVUw7Ci0gICAgcmV0dXJuKChjaGFyICopZnBfeGJ1Zik7Ci19Ci0jZW5kaWYgLyogQ09N TUVOVCAqLwotCi1jaGFyIG1hdGhfcGlbXSA9ICIzLjE0MTU5MjY1MzU4OTc5MzIzODQ2MjY0MzM4 MzI3OTUiOwotY2hhciBtYXRoX2VbXSA9ICAiMi43MTgyODE4Mjg0NTkwNDUyMzUzNjAyODc0NzEz NTI3IjsKLQotVk9JRAotaW5pdGZsb2F0KCkgewotICAgIGNoYXIgKiBidWYgPSBOVUxMOwotICAg IGludCBpLCB4LCB5OwotLyoKLSAgV2UgbWFsbG9jIGEgYmlnIHRlbXBvcmFyeSBidWZmZXIgZm9y IHNwcmludGYoKSB0byBtaW5pbWl6ZSBsaWtlbGlob29kIG9mCi0gIChhbmQgZGFtYWdlIGZyb20p IHNwcmludGYgYnVmZmVyIG92ZXJmbG93cy4gIEluIGFueSBjYXNlLCB0aGUgb25seSB3YXkgdGhp cwotICBjb3VsZCBoYXBwZW4gd291bGQgYmUgaWYgc3ByaW50ZigpIGl0c2VsZiBoYWQgYnVncywg c2luY2UgdGhlIGZvcm1hdAotICBkZXNjcmlwdG9yIHNheXMgdG8gY3V0IGl0IG9mZiBhdCAyNTAg ZGVjaW1hbCBwbGFjZXMuCi0qLwotICAgIGlmICgoYnVmID0gKGNoYXIgKiltYWxsb2MoNDA5Nikp KSB7Ci0gICAgICAgIHNwcmludGYoYnVmLCIlMC4yNTBmIiwoMTAuMCAvIDMuMCkpOwotICAgICAg ICBmb3IgKGkgPSAyOyBpIDwgMjUwICYmIGJ1ZltpXSA9PSAnMyc7IGkrKykgOwotICAgICAgICB4 ID0gaSAtIDE7Ci0gICAgICAgIGRlYnVnKEYxMTEsImluaXRmbG9hdCAxMC4wLzMuMCIsYnVmLHgp OwotICAgICAgICBzcHJpbnRmKGJ1ZiwiJTAuMjUwZiIsKDQuMCAvIDkuMCkpOwotICAgICAgICBm b3IgKGkgPSAyOyBpIDwgMjUwICYmIGJ1ZltpXSA9PSAnNCc7IGkrKykgOwotICAgICAgICB5ID0g aSAtIDE7Ci0gICAgICAgIGRlYnVnKEYxMTEsImluaXRmbG9hdCA0LjAvOS4wIixidWYseSk7Ci0g ICAgICAgIGZwX2RpZ2l0cyA9ICh4IDwgeSkgPyB4IDogeTsKLSAgICAgICAgaWYgKGZwX2RpZ2l0 cyA8IHNpemVvZihtYXRoX3BpKSAtIDEpIHsKLSAgICAgICAgICAgIG1hdGhfcGlbZnBfZGlnaXRz KzFdID0gTlVMOwotICAgICAgICAgICAgbWF0aF9lW2ZwX2RpZ2l0cysxXSA9IE5VTDsKLSAgICAg ICAgfQotICAgICAgICBzcHJpbnRmKGJ1ZiwiJTAuNmYiLCg3LjAgLyA5LjApKTsKLSAgICAgICAg aWYgKGJ1Zls3XSA9PSAnOCcpIGZwX3JvdW5kaW5nID0gMTsKLSAgICAgICAgZGVidWcoRjExMSwi aW5pdGZsb2F0IDcuMC85LjAiLGJ1ZixmcF9yb3VuZGluZyk7Ci0gICAgICAgIGRlYnVnKEYxMDEs ImluaXRmbG9hdCBwcmVjaXNpb24iLCIiLGZwX2RpZ2l0cyk7Ci0gICAgICAgIGZyZWUoYnVmKTsK LSAgICB9Ci19Ci0jZW5kaWYgLyogQ0tGTE9BVCAqLwotCi0vKgotICBQIFIgRSBTIEMgQSBOIC0t IEEgcXVpY2sgbG9vayB0aHJvdWdoIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucyBmb3IKLSAgaXRl bXMgdGhhdCBtdXN0IGJlIGhhbmRsZWQgYmVmb3JlIHRoZSBpbml0aWFsaXphdGlvbiBmaWxlIGlz IGV4ZWN1dGVkLgotKi8KLSNpZmRlZiBOVAotZXh0ZXJuIGludCBTdGFydGVkRnJvbURpYWxlcjsK LSNlbmRpZiAvKiBOVCAqLwotI2lmZGVmIE9TMgotZXh0ZXJuIGludCBrOTVzdGRpbzsKLXVuc2ln bmVkIGxvbmcgc3RhcnRmbGFncyA9IDBMOwotI2VuZGlmIC8qIE9TMiAqLwotCi1zdGF0aWMgY2hh ciAqCi1maW5kaW5wYXRoKGFyZykgY2hhciAqIGFyZzsgewotI2lmZGVmIE9TMgotICAgIGNoYXIg KiBzY3JpcHRlbnYsICoga2V5bWFwZW52OwotICAgIGludCBsZW47Ci0jZW5kaWYgLyogT1MyICov Ci0jaWZkZWYgRENNREJVRgotICAgIGV4dGVybiBjaGFyICogY21kYnVmOwotI2Vsc2UKLSAgICBl eHRlcm4gY2hhciBjbWRidWZbXTsKLSNlbmRpZiAvKiBEQ01EQlVGICovCi0gICAgY2hhciB0YWtl cGF0aFs0MDk2XTsKLSAgICBjaGFyICogczsKLSAgICBpbnQgeCwgejsKLQotICAgIC8qIFNldCB1 cCBzZWFyY2ggcGF0aC4uLiAqLwotI2lmZGVmIE9TMgotICAgIGNoYXIgKiBhcHBkYXRhMCA9IE5V TEwsICphcHBkYXRhMSA9IE5VTEw7Ci0jaWZkZWYgTlQKLSAgICBzY3JpcHRlbnYgPSBnZXRlbnYo Iks5NVNDUklQVFMiKTsKLSAgICBrZXltYXBlbnYgPSBnZXRlbnYoIks5NUtFWU1BUFMiKTsKLSAg ICBtYWtlc3RyKCZhcHBkYXRhMCwoY2hhciAqKUdldEFwcERhdGEoMCkpOwotICAgIG1ha2VzdHIo JmFwcGRhdGExLChjaGFyICopR2V0QXBwRGF0YSgxKSk7Ci0jZWxzZSAvKiBOVCAqLwotICAgIHNj cmlwdGVudiA9IGdldGVudigiSzJTQ1JJUFRTIik7Ci0gICAga2V5bWFwZW52ID0gZ2V0ZW52KCJL MktFWU1BUFMiKTsKLSNlbmRpZiAvKiBOVCAqLwotICAgIGlmICghc2NyaXB0ZW52KQotICAgICAg c2NyaXB0ZW52ID0gZ2V0ZW52KCJDS19TQ1JJUFRTIik7Ci0gICAgaWYgKCFzY3JpcHRlbnYpCi0g ICAgICBzY3JpcHRlbnYgPSAiIjsKLSAgICBpZiAoIWtleW1hcGVudikKLSAgICAgIGtleW1hcGVu diA9IGdldGVudigiQ0tfS0VZTUFQUyIpOwotICAgIGlmICgha2V5bWFwZW52KQotICAgICAga2V5 bWFwZW52ID0gIiI7Ci0KLSAgICBkZWJ1ZyhGMTEwLCJzdGFydHVwZGlyIixzdGFydHVwZGlyLDAp OwotICAgIGRlYnVnKEYxMTAsImNvbW1vbiBhcHBkYXRhIGRpcmVjdG9yeSIsYXBwZGF0YTEsMCk7 Ci0gICAgZGVidWcoRjExMCwiYXBwZGF0YSBkaXJlY3RvcnkiLGFwcGRhdGEwLDApOwotICAgIGRl YnVnKEYxMTAsImluaWRpciIsaW5pZGlyLDApOwotICAgIGRlYnVnKEYxMTAsImhvbWUiLHpob21l KCksMCk7Ci0gICAgZGVidWcoRjExMCwiZXhlZGlyIixleGVkaXIsMCk7Ci0KLSAgICBsZW4gPSBz dHJsZW4oc2NyaXB0ZW52KSArIHN0cmxlbihrZXltYXBlbnYpICsgMypzdHJsZW4oc3RhcnR1cGRp cikKLSAgICAgICAgKyAzKnN0cmxlbihpbmlkaXIpICsgMypzdHJsZW4oemhvbWUoKSkgKyAzKnN0 cmxlbihleGVkaXIpCi0gICAgICAgICsgKGFwcGRhdGEwID8gMypzdHJsZW4oYXBwZGF0YTApIDog MCkgCi0gICAgICAgICsgKGFwcGRhdGExID8gMypzdHJsZW4oYXBwZGF0YTEpIDogMCkKLSAgICAg ICAgKyA2KnN0cmxlbigiU0NSSVBUUy8iKSArIDYqc3RybGVuKCJLRVlNQVBTLyIpICsgMTY7Ci0K LSAgICBpZiAobGVuID49IDQwOTYpIHsgICAgICAgICAgICAgICAgICAvKiBTQUZFIChsZW5ndGgg aXMgY2hlY2tlZCkgKi8KLSAgICAgICAgdGFrZXBhdGhbMF0gPSAnXDAnOwotICAgICAgICBkZWJ1 ZyhGMTExLCJmaW5kaW5wYXRoIGVycm9yIC0gcGF0aCBsZW5ndGggdG9vIGxvbmciLCJsZW4iLGxl bik7Ci0gICAgfSBlbHNlCi0gICAgICBzcHJpbnRmKHRha2VwYXRoLAotICAgICAgICAgICAgICAv KiBzZW1pY29sb24tc2VwYXJhdGVkIHBhdGggbGlzdCAqLwotICAgICIlcyVzJXMlcyVzOyVzJXM7 JXMlczslcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlczslcyVzOyVzJXM7JXM7JXMlczslcyVzIiwK LSAgICAgICAgICAgICAgc2NyaXB0ZW52LAotICAgICAgICAgICAgICAoc2NyaXB0ZW52WzBdICYm IHNjcmlwdGVudltzdHJsZW4oc2NyaXB0ZW52KS0xXT09JzsnKT8iIjoiOyIsCi0gICAgICAgICAg ICAgIGtleW1hcGVudiwKLSAgICAgICAgICAgICAgKGtleW1hcGVudlswXSAmJiBrZXltYXBlbnZb c3RybGVuKGtleW1hcGVudiktMV09PSc7Jyk/IiI6IjsiLAotICAgICAgICAgICAgICBzdGFydHVw ZGlyLAotICAgICAgICAgICAgICBzdGFydHVwZGlyLCAiU0NSSVBUUy8iLAotICAgICAgICAgICAg ICBzdGFydHVwZGlyLCAiS0VZTUFQUy8iLAotICAgICAgICAgICAgICBhcHBkYXRhMSA/IGFwcGRh dGExIDogIiIsIAotICAgICAgICAgICAgICBhcHBkYXRhMSA/ICJLZXJtaXQgOTU7IiA6ICIiLAot ICAgICAgICAgICAgICBhcHBkYXRhMSA/IGFwcGRhdGExIDogIiIsCi0gICAgICAgICAgICAgIGFw cGRhdGExID8gIktlcm1pdCA5NS9TQ1JJUFRTLzsiIDogIiIsCi0gICAgICAgICAgICAgIGFwcGRh dGExID8gYXBwZGF0YTEgOiAiIiwKLSAgICAgICAgICAgICAgYXBwZGF0YTEgPyAiS2VybWl0IDk1 L0tFWU1BUFMvOyIgOiAiIiwKLSAgICAgICAgICAgICAgYXBwZGF0YTAgPyBhcHBkYXRhMCA6ICIi LAotICAgICAgICAgICAgICBhcHBkYXRhMCA/ICJLZXJtaXQgOTU7IiA6ICIiLAotICAgICAgICAg ICAgICBhcHBkYXRhMCA/IGFwcGRhdGEwIDogIiIsCi0gICAgICAgICAgICAgIGFwcGRhdGEwID8g Iktlcm1pdCA5NS9TQ1JJUFRTLzsiIDogIiIsCi0gICAgICAgICAgICAgIGFwcGRhdGEwID8gYXBw ZGF0YTAgOiAiIiwKLSAgICAgICAgICAgICAgYXBwZGF0YTAgPyAiS2VybWl0IDk1L0tFWU1BUFMv OyIgOiAiIiwKLSAgICAgICAgICAgICAgaW5pZGlyLAotICAgICAgICAgICAgICBpbmlkaXIsICJT Q1JJUFRTLyIsCi0gICAgICAgICAgICAgIGluaWRpciwgIktFWU1BUFMvIiwKLSAgICAgICAgICAg ICAgemhvbWUoKSwKLSAgICAgICAgICAgICAgemhvbWUoKSwgIlNDUklQVFMvIiwKLSAgICAgICAg ICAgICAgemhvbWUoKSwgIktFWU1BUFMvIiwKLSAgICAgICAgICAgICAgZXhlZGlyLAotICAgICAg ICAgICAgICBleGVkaXIsICJTQ1JJUFRTLyIsCi0gICAgICAgICAgICAgIGV4ZWRpciwgIktFWU1B UFMvIgotICAgICAgICAgICAgICApOwotICAgIGRlYnVnKEYxMTAsImZpbmRpbnBhdGggdGFrZXBh dGgiLHRha2VwYXRoLDApOwotI2lmZGVmIE5UCi0gICAgbWFrZXN0cigmYXBwZGF0YTAsTlVMTCk7 Ci0gICAgbWFrZXN0cigmYXBwZGF0YTEsTlVMTCk7Ci0jZW5kaWYgLyogTlQgKi8KLSNlbHNlIC8q IG5vdCBPUzIgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICB6ID0gMTAyNDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBMb29rIGluIGhvbWUgZGlyZWN0b3J5ICovCi0gICAgcyA9IHRha2VwYXRo OwotICAgIHp6c3RyaW5nKCJcXHYoaG9tZSkiLCZzLCZ6KTsKLSNlbHNlCi0gICAgdGFrZXBhdGhb MF0gPSAnXDAnOwotI2VuZGlmIC8qIE5PU1BMICovCi0jZW5kaWYgLyogT1MyICovCi0vKgotICBB bGwgdGhlIGxvZ2ljIGZvciBzZWFyY2hpbmcgdGhlIHRha2UgcGF0aCBpcyBpbiB0aGUgY29tbWFu ZCBwYXJzZXIuCi0gIFNvIGV2ZW4gdGhvdWdoIHdlIGFyZW4ndCBwYXJzaW5nIGNvbW1hbmRzLCB3 ZSBpbml0aWFsaXplIGFuZCBjYWxsIHRoZQotICBwYXJzZXIgZnJvbSBoZXJlLCB3aXRoIHRoZSBw dXJwb3J0ZWQgZmlsZW5hbWUgc3R1ZmZlZCBpbnRvIHRoZSBjb21tYW5kCi0gIGJ1ZmZlciwgZm9s bG93ZWQgYnkgc29tZSBjYXJyaWFnZSByZXR1cm5zIHRvIG1ha2UgdGhlIHBhcnNlciByZXR1cm4u Ci0gIElmIHRoZSBmaWxlIGlzIG5vdCBmb3VuZCwgb3Igb3RoZXJ3aXNlIG5vdCBhY2Nlc3NpYmxl LCB0aGUgcGFyc2VyIHByaW50cwotICBhbiBhcHByb3ByaWF0ZSBtZXNzYWdlLCBhbmQgdGhlbiB3 ZSBqdXN0IGV4aXQuCi0qLwotICAgIGNtZGluaSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEFsbG9jYXRlIGNvbW1hbmQgYnVmZmVycyBldGMgKi8KLSAgICBjbWluaSgwKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHRoZW0gKi8KLSAgICAvKiBTdHVmZiBm aWxlbmFtZSBpbnRvIGNvbW1hbmQgYnVmIHdpdGggYnJhY2VzIGluIGNhc2Ugb2Ygc3BhY2VzICov Ci0gICAgY2ttYWttc2coY21kYnVmLENNREJMLCJ7IixhcmcsIn0iLE5VTEwpOwotICAgIGRlYnVn KEYxMTAsImZpbmRpbnBhdGggY21kYnVmIixjbWRidWYsMCk7Ci0gICAgY2tzdHJuY2F0KGNtZGJ1 ZiwiXHJcciIsQ01EQkwpOyAgICAgLyogQW5kIHNvbWUgY2FycmlhZ2UgcmV0dXJucyAqLwotICAg IGlmIChjbWlmaXAoIiIsIiIsJnMsJngsMCx0YWtlcGF0aCx4eHN0cmluZykgPCAwKQotICAgICAg cmV0dXJuKE5VTEwpOwotICAgIGNtcmVzKCk7Ci0gICAgcmV0dXJuKHMpOwotfQotCi1zdGF0aWMg aW50IHRyX2ludDsgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBpZiBUUkFOU01JVCBpbnRl cnJ1cHRlZCAqLwotCi0jaWZuZGVmIE1BQwotU0lHVFlQCi0jaWZkZWYgQ0tfQU5TSUMKLXRydHJh cChpbnQgZm9vKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUUkFOU01JVCBpbnRlcnJ1cHQg dHJhcCAqLwotI2Vsc2UKLXRydHJhcChmb28pIGludCBmb287ICAgICAgICAgICAgICAgICAgICAv KiBUUkFOU01JVCBpbnRlcnJ1cHQgdHJhcCAqLwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB0 cnRyYXAgKi8gewotI2lmZGVmIF9fRU1YX18KLSAgICBzaWduYWwoU0lHSU5ULCBTSUdfQUNLKTsK LSNlbmRpZgotICAgIHRyX2ludCA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChOZWVk IGFyZyBmb3IgQU5TSSBDKSAqLwotICAgIFNJR1JFVFVSTjsKLX0KLSNlbmRpZiAvKiBNQUMgKi8K LSNlbmRpZiAvKiBOT0lDUCAqLwotCi0jaWZkZWYgVU5JWAotVk9JRAotZ2V0ZXhlZGlyKCkgewot ICAgIGV4dGVybiBjaGFyICogeGFyZzA7Ci0gICAgbG9uZyB4eDsKLSAgLyoKLSAgICBVbml4IHBy b3ZpZGVzIG5vIHN0YW5kYXJkIHNlcnZpY2UgZm9yIHRoaXMuICBXZSBsb29rIGluIGFyZ3ZbMF0s IGFuZCBpZgotICAgIHdlJ3JlIGx1Y2t5IHRoZXJlJ3MgYSBmdWxsIHBhdGhuYW1lLiAgSWYgbm90 IHdlIGRvIGEgUEFUSCBzZWFyY2guCi0gICovCi0gICAgaWYgKGNrc3RyY2hyKHhhcmcwLCcvJykp IHsgICAgICAgICAgLyogR2xvYmFsIGNvcHkgb2YgYXJndlswXSAqLwotICAgICAgICBpbnQgaSwg azsKLSAgICAgICAgY2hhciAqIHAgPSBOVUxMOwotICAgICAgICBpZiAoKGsgPSBja3N0cm5jcHko dG1wYnVmLHhhcmcwLFRNUEJVRlNJWi0yKSkgPiAwKSB7Ci0gICAgICAgICAgICBwID0gdG1wYnVm OwotICAgICAgICAgICAgLyogQ29udmVydCB0byBmdWxseSBxdWFsaWZpZWQgcGF0aG5hbWUgKi8K LSAgICAgICAgICAgIGlmICh0bXBidWZbMF0pIGlmICh0bXBidWZbMF0gIT0gJy8nKSB7Ci0gICAg ICAgICAgICAgICAgbGluZVswXSA9IE5VTDsKLSAgICAgICAgICAgICAgICB6Zm5xZnAodG1wYnVm LExJTkJVRlNJWi0yLChjaGFyICopbGluZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGxpbmVbMF0p Ci0gICAgICAgICAgICAgICAgICBwID0gbGluZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg IHh4ID0gemNoa2kocCk7Ci0gICAgICAgICAgICBpZiAoeHggPiAtMSkgewkJLyogSXMgdGhlIHJl c3VsdCBhbiBleGlzdGluZyBmaWxlPyAqLwotICAgICAgICAgICAgICAgIGsgPSBzdHJsZW4ocCk7 Ci0gICAgICAgICAgICAgICAgZm9yIChpID0gay0xOyBpID4gMDsgaS0tKSB7IC8qIFllcywgc3Ry aXAgbmFtZSBwYXJ0ICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChwW2ldID09ICcvJykgewot ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBrLTEpCi0gICAgICAgICAgICAgICAgICAg ICAgICAgIHBbaSsxXSA9IE5VTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCSAg ICBtYWtlc3RyKCZleGVkaXIscCk7CQkvKiBTYXZlIHRoZSByZXN1bHQgKi8KLSAgICAgICAgfQot ICAgIH0KLSAgICBpZiAoIWV4ZWRpciAmJiB4YXJnMCkgeyAgICAgICAgICAgICAvKiBOb3QgZm91 bmQ/ICovCi0gICAgICAgIGNoYXIgKiBwOwotICAgICAgICBwID0gZ2V0ZW52KCJQQVRIIik7ICAg ICAgICAgICAgIC8qIFNlYXJjaCB0aGUgUEFUSCAqLwotICAgICAgICBpZiAocCkgeyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIElmIHRoZXJlIGlzIG9uZS4uLiAqLwotICAgICAgICAgICAgY2hh ciAqIHEsICogUEFUSCA9IE5VTEw7Ci0gICAgICAgICAgICBpbnQgazsKLSAgICAgICAgICAgIG1h a2VzdHIoJlBBVEgscCk7ICAgICAgICAgICAvKiBQb2tlYWJsZSBjb3B5IG9mIFBBVEggc3RyaW5n ICovCi0gICAgICAgICAgICBpZiAoUEFUSCkgeyAgICAgICAgICAgICAgICAgLyogSWYgbWFsbG9j IHN1Y2NlZWRlZC4uLiAqLwotICAgICAgICAgICAgICAgIHAgPSBQQVRIOwotICAgICAgICAgICAg ICAgIHdoaWxlIChwICYmICpwKSB7ICAgICAgICAvKiBMb29wIHRocm91Z2ggc2VnbWVudHMgKi8K LSAgICAgICAgICAgICAgICAgICAgcSA9IGNrc3RyY2hyKHAsJzonKTsgLyogRW5kIG9mIHRoaXMg c2VnbWVudCAqLwotICAgICAgICAgICAgICAgICAgICBpZiAocSA9PSBwKSB7ICAgICAgIC8qIE51 bGwgUEFUSCBzZWdtZW50ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBwKys7ICAgICAgICAg ICAgLyogU2tpcCBvdmVyIGNvbG9uICovCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51 ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAocSkgICAg ICAgICAgICAgIC8qIElmIG5vdCBhdCBlbmQgb2YgUEFUSCBzdHJpbmcgKi8KLSAgICAgICAgICAg ICAgICAgICAgICAqcSsrID0gTlVMOyAgICAgICAvKiB6ZXJvIG91dCB0aGUgY29sb24gKi8KLSAg ICAgICAgICAgICAgICAgICAgaWYgKChrID0gY2tzdHJuY3B5KHRtcGJ1ZixwLFRNUEJVRlNJWikp ID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcGJ1ZltrLTFdICE9ICcvJykg eyAvKiBDb3B5IHRoaXMgUEFUSCBzZWdtZW50ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgdG1wYnVmW2srK10gPSAnLyc7ICAgIC8qIEFwcGVuZCAnLycgaWYgbmVlZGVkICovCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgdG1wYnVmW2tdID0gTlVMOwotICAgICAgICAgICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgLyogQXBwZW5kIHRoZSBhcmd2WzBd IHZhbHVlICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2tzdHJuY3B5KCZ0bXBidWZb a10seGFyZzAsVE1QQlVGU0laKSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoemNoa2kodG1wYnVmKSA+IC0xKSB7IC8qIEZpbGUgZXhpc3RzPyAqLwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0bXBidWZba10gPSBOVUw7ICAgICAgLyogWWVzLCB3ZSdyZSBk b25lICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpmbnFmcCh0bXBidWYsTElO QlVGU0laLChjaGFyICopbGluZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h a2VzdHIoJmV4ZWRpcixsaW5lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg ICAgfSBlbHNlIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgYnJlYWs7Ci0gICAg ICAgICAgICAgICAgICAgIHAgPSBxOyAgICAgICAgICAgICAgLyogTm90IGZvdW5kLCBnbyB0byBu ZXh0IHNlZ21lbnQgICovCi0gICAgICAgICAgICAgICAgfSAvKiB3aGlsZSAqLwotICAgICAgICAg ICAgICAgIGZyZWUoUEFUSCk7ICAgICAgICAgICAgIC8qIEZyZWUgUEFUSCBjb3B5ICovCi0gICAg ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFleGVkaXIpIHsgICAgICAgICAgICAg ICAgICAvKiBTdGlsbCBub3RoaW5nPyAqLwotICAgICAgICAgICAgaWYgKHpjaGtpKHhhcmcwKSA+ IC0xKSB7ICAgIC8qIE1heWJlIGl0J3MgaW4gdGhlIGN1cnJlbnQgZGlyICovCi0gICAgICAgICAg ICAgICAgemZucWZwKHpndGRpcigpLExJTkJVRlNJWiwoY2hhciAqKWxpbmUpOwotICAgICAgICAg ICAgICAgIG1ha2VzdHIoJmV4ZWRpcixsaW5lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot ICAgIH0KLSAgICBpZiAoIWV4ZWRpcikgeyAgICAgICAgICAgICAgICAgICAgICAvKiBTdGlsbCBu b3RoaW5nPyAqLwotICAgICAgICBtYWtlc3RyKCZleGVkaXIsIi8iKTsgICAgICAgICAgIC8qIEZh a2UgaXQgd2l0aCB3aXRoIHJvb3QuICovCi0gICAgfQotfQotI2VuZGlmIC8qIFVOSVggKi8KLQot aW50IGFyZ194ID0gMDsKLXN0YXRpYyBpbnQgeF9wcmVzY2FuID0gMDsKLQotLyoKLSAgVGhlIGFy Z3VtZW50IHkgb25jZSBtZWFudCBzb21ldGhpbmcgYnV0IEkgY2FuJ3QgaW1hZ2luZSB3aGF0IHNv IG5vdwotICBpdCdzIGlnbm9yZWQuICAoUHJpb3IgdG8gMjIgQXVnIDk4LCBwcmVzY2FuKCkgd2Fz IGNhbGxlZCB0d2ljZSBieSBtYWluKCksCi0gIGFuZCB0aGUgYXJnIGRpZmZlcmVudGlhdGVkIHRo ZSB0d28gY2FsbHMuICBCdXQgdGhpcyBjYXVzZWQgYWxsIHNvcnRzIG9mCi0gIHByb2JsZW1zICYg Y29uZnVzaW9uLCBzbyBJIGNvbW1lbnRlZCBvdXQgdGhlIHNlY29uZCBjYWxsLiAgVGhpcyBpc3N1 ZSBtaWdodAotICBuZWVkIHRvIGJlIHJldmlzaXRlZC4pCi0qLwotVk9JRAotcHJlc2NhbihkdW1t eSkgaW50IGR1bW15OyB7ICAgICAgICAgICAgIC8qIEFyZyBpcyBpZ25vcmVkLiAqLwotICAgIGV4 dGVybiBpbnQgaG93Y2FsbGVkOwotICAgIGludCB5YXJnYzsgY2hhciAqKnlhcmd2OwotICAgIGNo YXIgeDsKLSAgICBjaGFyICp5cCwgKnl5OwotI2lmZGVmIERFQlVHCi0gICAgaW50IGRlYmNvdW50 ID0gMDsKLSNlbmRpZiAvKiBERUJVRyAqLwotICAgIGludCB6OwotCi0gICAgaWYgKHhfcHJlc2Nh bikgICAgICAgICAgICAgICAgICAgICAgLyogT25seSBydW4gb25jZSAqLwotICAgICAgcmV0dXJu OwotICAgIHhfcHJlc2NhbiA9IDE7Ci0KLSAgICB5YXJnYyA9IHhhcmdjOyAgICAgICAgICAgICAg ICAgICAgICAvKiBNYWtlIGNvcHkgb2YgYXJnIHZlY3RvciAqLwotICAgIHlhcmd2ID0geGFyZ3Y7 Ci0KLSNpZm5kZWYgTk9JQ1AKLSNpZmRlZiBEQ01EQlVGCi0gICAgaWYgKCFrZXJtcmMpCi0gICAg ICBpZiAoIShrZXJtcmMgPSAoY2hhciAqKSBtYWxsb2MoS0VSTVJDTCsxKSkpCi0gICAgICAgIGZh dGFsKCJwcmVzY2FuOiBubyBtZW1vcnkgZm9yIGtlcm1yYyIpOwotI2VuZGlmIC8qIERDTURCVUYg Ki8KLSAgICBja3N0cm5jcHkoa2VybXJjLEtFUk1SQyxLRVJNUkNMKTsgICAvKiBEZWZhdWx0IGlu aXQgZmlsZSBuYW1lICovCi0jZW5kaWYgLyogTk9JQ1AgKi8KLQotI2lmZGVmIE9TMgotICAgIHlw ID0gZ2V0ZW52KCJLOTVTVEFSVEZMQUdTIik7Ci0gICAgaWYgKHlwKSB7Ci0gICAgICAgIHN0YXJ0 ZmxhZ3MgPSBhdG9pKHlwKTsKLSAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBJS1NE Ci0gICAgaWYgKGhvd2NhbGxlZCA9PSBJX0FNX0lLU0QpICAgICAgICAgLyogSW50ZXJuZXQgS2Vy bWl0IFNlcnZpY2UgZGFlbW9uICovCi0gICAgICBpbnNlcnZlciA9IDE7ICAgICAgICAgICAgICAg ICAgICAgLyogKFNlZSBpbnNlcnZlciBzZWN0aW9uIG9mIGNrY21haSkgKi8KLSNlbmRpZiAvKiBJ S1NEICovCi0KLS8qIENvbW1hbmQgbGluZSBvcHRpb25zIGZvciBLZXJtaXQgKi8KLQotI2lmbmRl ZiBOT0NNREwKLSAgICBpZiAoeWFyZ2MgPiAxCi0gICAgICAgICYmICp5YXJndlsxXSAhPSAnLScK LSAgICAgICAgJiYgKHlhcmd2WzFdWzBdICE9ICc9JykKLSNpZmRlZiBLRVJCQU5HCi0gICAgICAg ICYmICh5YXJndlsxXVswXSAhPSAnKycpCi0jZW5kaWYgLyogS0VSQkFORyAqLwotI2lmZGVmIElL U0QKLSAgICAgICAgJiYgKGhvd2NhbGxlZCAhPSBJX0FNX0lLU0QpCi0jZW5kaWYgLyogSUtTRCAq LwotICAgICAgICApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGVuYW1lIGFz IDFzdCBhcmd1bWVudCAqLwotI2lmbmRlZiBOT0lDUAotICAgICAgICBjaGFyICpzOwotI2VuZGlm IC8qIE5PSUNQICovCi0jaWZuZGVmIE5PVVJMCi0gICAgICAgIGV4dGVybiBpbnQgaGF2ZXVybDsK LSAgICAgICAgZXh0ZXJuIHN0cnVjdCB1cmxkYXRhIGdfdXJsOwotICAgICAgICBpZiAodXJscGFy c2UoeWFyZ3ZbMV0sJmdfdXJsKSkgewotICAgICAgICAgICAgaWYgKCFja3N0cmNtcChnX3VybC5z dmMsImZ0cCIsLTEsMCkgfHwKLSAgICAgICAgICAgICAgICAhY2tzdHJjbXAoZ191cmwuc3ZjLCJm dHBzIiwtMSwwKSkgewotICAgICAgICAgICAgICAgIGhhdmV1cmwgPSAxOwotICAgICAgICAgICAg ICAgIGhvd2NhbGxlZCA9IElfQU1fRlRQOwotICAgICAgICAgICAgfSBlbHNlIGlmICghY2tzdHJj bXAoZ191cmwuc3ZjLCJ0ZWxuZXQiLC0xLDApIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICFj a3N0cmNtcChnX3VybC5zdmMsInRlbG5ldHMiLC0xLDApKSB7Ci0gICAgICAgICAgICAgICAgaGF2 ZXVybCA9IDE7Ci0gICAgICAgICAgICAgICAgaG93Y2FsbGVkID0gSV9BTV9URUxORVQ7Ci0gICAg ICAgICAgICB9IGVsc2UgaWYgKCFja3N0cmNtcChnX3VybC5zdmMsInNzaCIsLTEsMCkpIHsKLSAg ICAgICAgICAgICAgICBoYXZldXJsID0gMTsKLSAgICAgICAgICAgICAgICBob3djYWxsZWQgPSBJ X0FNX1NTSDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKGdfdXJsLnN2YywiaWtz ZCIsLTEsMCkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIWNrc3RyY21wKGdfdXJsLnN2Yywi a2VybWl0IiwtMSwwKSkgewotICAgICAgICAgICAgICAgIGhhdmV1cmwgPSAxOwotICAgICAgICAg ICAgICAgIGhvd2NhbGxlZCA9IElfQU1fS0VSTUlUOwotICAgICAgICAgICAgfSBlbHNlIGlmICgh Y2tzdHJjbXAoZ191cmwuc3ZjLCJodHRwIiwtMSwwKSB8fAotICAgICAgICAgICAgICAgICAgICAg ICAhY2tzdHJjbXAoZ191cmwuc3ZjLCJodHRwcyIsLTEsMCkpIHsKLSAgICAgICAgICAgICAgICBo YXZldXJsID0gMTsKLSAgICAgICAgICAgICAgICBob3djYWxsZWQgPSBJX0FNX0hUVFA7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaGF2ZXVybCkgewotICAgICAgICAgICAgICAgIHdo aWxlICgtLXlhcmdjID4gMCkgeyAgIC8qIEdvIHRocm91Z2ggY29tbWFuZC1saW5lIGFyZ3MgKi8K LSAgICAgICAgICAgICAgICAgICAgeWFyZ3YrKzsgICAgICAgICAgICAvKiBsb29raW5nIGZvciAt WSBhbmQgLWQgKi8KLSAgICAgICAgICAgICAgICAgICAgeXAgPSAqeWFyZ3YrMTsKLSAgICAgICAg ICAgICAgICAgICAgaWYgKCoqeWFyZ3YgPT0gJy0nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg ICB4ID0gKigqeWFyZ3YrMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoeCkgewot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoeCkgewotI2lmbmRlZiBOT0lDUAot CQkJICAgICAgY2FzZSAnKyc6Ci0JCQkgICAgICBjYXNlICctJzoKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKGRveGFyZyh5YXJndiwxKSA8IDApIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZhdGFsKCJFeHRlbmRlZCBhcmd1bWVudCBlcnJvciIpOwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHlwID0gIiI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwotI2VuZGlmIC8qIE5PSUNQICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl ICdZJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9pbml0Kys7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjYXNlICdxJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVpZXQg PSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbm9pbml0ID0gMTsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdGFydGZsYWdzIHw9IDI7ICAgIC8qIE5vIG5ldHdvcmsgRExMcyAqLwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZmxhZ3MgfD0gNDsgICAgLyogTm8g VEFQSSBETExzICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRmbGFn cyB8PSA4OyAgICAvKiBObyBTZWN1cml0eSBETExzICovCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RhcnRmbGFncyB8PSAxNjsgICAvKiBObyBabW9kZW0gRExMcyAqLwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZmxhZ3MgfD0gMzI7ICAgLyogU3Rk aW4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGZsYWdzIHw9IDY0 OyAgIC8qIFN0ZG91dCAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn ZCc6IC8qID0gU0VUIERFQlVHIE9OICovCi0jaWZkZWYgREVCVUcKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKGRlYmNvdW50KysgPiAwKQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRlYnRpbSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlmICghZGVibG9nKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYmxvZyA9 IGRlYm9wbigiZGVidWcubG9nIiwwKTsKLSNlbmRpZiAvKiBERUJVRyAqLwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNhc2UgJ1cnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoKih5cCsxKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXRhbCgiaW52 YWxpZCBhcmd1bWVudCBidW5kbGluZyBhZnRlciAtVyIpOwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB5YXJndisrLCB5YXJnYy0tOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoeWFyZ2MgPCAxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZh dGFsKCJXaW5kb3cgaGFuZGxlIG1pc3NpbmciKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaHduZERpYWxlciA9IChIV05EKSBhdG9sKCp5YXJndik7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFN0YXJ0ZWRGcm9tRGlhbGVyID0gMTsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgeWFyZ3YrKywgeWFyZ2MtLTsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgS2VybWl0RGlhbGVySUQgPSBhdG9sKCp5YXJndikgOwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh c2UgJyMnOiAvKiBLOTUgaW5pdGlhbGl6YXRpb24gb3B0aW9ucyAqLwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoKih5cCsxKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZmF0YWwoImludmFsaWQgYXJndW1lbnQgYnVuZGxpbmciKTsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB5YXJndisrLCB5YXJnYy0tOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo eWFyZ2MgPCAxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFsKCItIyBh cmd1bWVudCBtaXNzaW5nIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0 ZmxhZ3MgfD0gYXRvbCgqeWFyZ3YpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF5cCkKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSAqKyt5cDsK LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAg ICAgIH0KLSAgICAgICAgLyogYWZ0ZXIgdGhpcyBwb2ludCBub24tS2VybWl0IHBlcnNvbmFsaXRp ZXMgbXVzdCByZXR1cm4gKi8KLSAgICAgICAgc3dpdGNoIChob3djYWxsZWQpIHsKLQkgIGNhc2Ug SV9BTV9LRVJNSVQ6Ci0JICBjYXNlIElfQU1fSUtTRDoKLQkgIGNhc2UgSV9BTV9TU0hTVUI6Ci0g ICAgICAgICAgICBicmVhazsKLQkgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg ICAgIH0KLSNlbmRpZiAvKiBOT1VSTCAqLwotCi0jaWZuZGVmIE5PSUNQCi0gICAgICAgIC8qIElm IGl0IGlzIG5vdCBhIFVSTCB0aGF0IHdlIHJlY29nbml6ZSwgdHJ5IHRvIHRyZWF0IGl0IGFzIGEg ZmlsZSAqLwotCi0gICAgICAgIGlmICghaXNhYnNvbHV0ZSh5YXJndlsxXSkpICAgICAgLyogSWYg bm90IGFic29sdXRlICovCi0gICAgICAgICAgcyA9IGZpbmRpbnBhdGgoeWFyZ3ZbMV0pOyAgICAg LyogTG9vayBpbiBQQVRIICovCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBzID0geWFyZ3ZbMV07 Ci0gICAgICAgIGlmICghcykKLSAgICAgICAgICBkb2V4aXQoQkFEX0VYSVQseGl0c3RhKTsKLSAg ICAgICAgemZucWZwKHMsQ0tNQVhQQVRILGNtZGZpbCk7ICAgICAvKiBJbiBjYXNlIG9mIENEIGlu IGZpbGUgKi8KLSAgICAgICAgeWFyZ2MgLT0gMTsgICAgICAgICAgICAgICAgICAgICAvKiBTa2lw IHBhc3QgdGhlIGZpbGVuYW1lICovCi0gICAgICAgIHlhcmd2ICs9IDE7ICAgICAgICAgICAgICAg ICAgICAgLyogT3RoZXJ3aXNlIHdlJ2xsIGdldCBhbiBlcnJvciAqLwotI2VuZGlmIC8qIE5PSUNQ ICovCi0gICAgfQotCi0jaWZuZGVmIE5PQ01ETAotI2lmZGVmIE5FV0ZUUAotICAgIGlmIChob3dj YWxsZWQgPT0gSV9BTV9GVFApIHsgICAgICAgIC8qIEtlcm1pdCdzIEZUUCBjbGllbnQgcGVyc29u YWxpdHkgKi8KLSAgICAgICAgd2hpbGUgKC0teWFyZ2MgPiAwKSB7ICAgICAgICAgICAvKiBHbyB0 aHJvdWdoIGNvbW1hbmQtbGluZSBhcmdzICovCi0gICAgICAgICAgICB5YXJndisrOyAgICAgICAg ICAgICAgICAgICAgLyogbG9va2luZyBmb3IgLVkgYW5kIC1kICovCi0gICAgICAgICAgICB5cCA9 ICp5YXJndisxOwotICAgICAgICAgICAgaWYgKCoqeWFyZ3YgPT0gJy0nKSB7Ci0gICAgICAgICAg ICAgICAgeCA9ICooKnlhcmd2KzEpOwotICAgICAgICAgICAgICAgIHdoaWxlICh4KSB7Ci0gICAg ICAgICAgICAgICAgICAgIHN3aXRjaCAoeCkgewotI2lmbmRlZiBOT0lDUAotCQkgICAgICBjYXNl ICcrJzoKLQkJICAgICAgY2FzZSAnLSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG94 YXJnKHlhcmd2LDEpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFsKCJF eHRlbmRlZCBhcmd1bWVudCBlcnJvciIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICAgICAgICAgICAgeXAgPSAiIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwotI2VuZGlmIC8qIE5PSUNQICovCi0gICAgICAgICAgICAgICAgICAgICAgY2FzZSAnWSc6 Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2luaXQrKzsKLSAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICAgICAgY2FzZSAncSc6Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgIHF1aWV0ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0KLSAgICAgICAgICAgICAgICAgICAgICBjYXNlICdoJzoKLSAgICAgICAgICAgICAgICAg ICAgICAgIG5vaW5pdCA9IDE7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgICAgICAgICBz dGFydGZsYWdzIHw9IDI7ICAgIC8qIE5vIG5ldHdvcmsgRExMcyAqLwotICAgICAgICAgICAgICAg ICAgICAgICAgc3RhcnRmbGFncyB8PSA0OyAgICAvKiBObyBUQVBJIERMTHMgKi8KLSAgICAgICAg ICAgICAgICAgICAgICAgIHN0YXJ0ZmxhZ3MgfD0gODsgICAgLyogTm8gU2VjdXJpdHkgRExMcyAq LwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRmbGFncyB8PSAxNjsgICAvKiBObyBabW9k ZW0gRExMcyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRmbGFncyB8PSAzMjsgICAv KiBTdGRpbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRmbGFncyB8PSA2NDsgICAv KiBTdGRvdXQgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2QnOiAgICAgICAgICAgICAvKiA9IFNF VCBERUJVRyBPTiAqLwotI2lmZGVmIERFQlVHCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo ZGViY291bnQrKyA+IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnRpbSA9IDE7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRlYmxvZykKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgZGVibG9nID0gZGVib3BuKCJkZWJ1Zy5sb2ciLDApOwotI2VuZGlmIC8qIERFQlVHICov Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAg ICAgICAgICAgICBjYXNlICdXJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqKHlwKzEp KQotICAgICAgICAgICAgICAgICAgICAgICAgICBmYXRhbCgiaW52YWxpZCBhcmd1bWVudCBidW5k bGluZyBhZnRlciAtVyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgeWFyZ3YrKywgeWFyZ2Mt LTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5YXJnYyA8IDEpCi0gICAgICAgICAgICAg ICAgICAgICAgICAgIGZhdGFsKCJXaW5kb3cgaGFuZGxlIG1pc3NpbmciKTsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGh3bmREaWFsZXIgPSAoSFdORCkgYXRvbCgqeWFyZ3YpOwotICAgICAgICAg ICAgICAgICAgICAgICAgU3RhcnRlZEZyb21EaWFsZXIgPSAxOwotICAgICAgICAgICAgICAgICAg ICAgICAgeWFyZ3YrKywgeWFyZ2MtLTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEtlcm1pdERp YWxlcklEID0gYXRvbCgqeWFyZ3YpIDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJyMnOiAgICAgICAgIC8qIEs5NSBpbml0aWFsaXph dGlvbiBvcHRpb25zICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKih5cCsxKSkgewot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFsKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRs aW5nIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg ICB5YXJndisrLCB5YXJnYy0tOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHlhcmdjIDwg MSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZmF0YWwoIi0jIGFyZ3VtZW50IG1pc3Npbmci KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZmxhZ3MgfD0gYXRvbCgqeWFyZ3YpOwot ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCF5cCkKLSAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgeCA9ICorK3lwOwotICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0g ICAgfQotI2VuZGlmIC8qIE5FV0ZUUCAqLwotI2VuZGlmIC8qIE5PQ01ETCAqLwotCi0gICAgd2hp bGUgKC0teWFyZ2MgPiAwKSB7ICAgICAgICAgICAgICAgLyogR28gdGhyb3VnaCBjb21tYW5kLWxp bmUgYXJncyAqLwotICAgICAgICB5YXJndisrOwotICAgICAgICB5cCA9ICp5YXJndisxOyAgICAg ICAgICAgICAgICAgIC8qIFBvaW50ZXIgZm9yIGJ1bmRsZWQgYXJncyAqLwotICAgICAgICBpZiAo Kip5YXJndiA9PSAnPScpICAgICAgICAgICAgIC8qIFNhbWUgcnVsZXMgYXMgY21kbGluKCkuLi4g Ki8KLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlYnVnKEYxMTAsInByZXNjYW4gKnlhcmd2 IiwqeWFyZ3YsMCk7Ci0KLSNpZm5kZWYgTk9JQ1AKLSNpZmRlZiBLRVJCQU5HCi0gICAgICAgIHl5 ID0gKnlhcmd2OwotICAgICAgICBpZiAoIXN0cmNtcCh5eSwiKyIpIHx8ICgqeXkgPT0gJysnICYm ICooeXkrMSkgPCAoY2hhcikzMykpIHsKLSAgICAgICAgICAgIGNoYXIgKiBzOwotICAgICAgICAg ICAgeWFyZ3YrKzsKLSAgICAgICAgICAgIG5vaW5pdCA9IDE7Ci0gICAgICAgICAgICBpZiAoISp5 YXJndikKLSAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY2ZpbGVmID0gMTsKLSAg ICAgICAgICAgIHMgPSBmaW5kaW5wYXRoKCp5YXJndik7Ci0gICAgICAgICAgICBpZiAocykgewot ICAgICAgICAgICAgICAgIHpmbnFmcChzLENLTUFYUEFUSCxjbWRmaWwpOwotICAgICAgICAgICAg ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICBkb2V4aXQoQkFE X0VYSVQseGl0c3RhKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIEtFUkJBTkcgKi8KLSNlbmRpZiAv KiBOT0lDUCAqLwotICAgICAgICBpZiAoIXN0cmNtcCgqeWFyZ3YsIi0tIikpICAgICAgIC8qIGdl dG9wdCgpIGNvbmZvcm1hbmNlICovCi0gICAgICAgICAgcmV0dXJuOwotI2lmZGVmIFZNUwotICAg ICAgICBlbHNlIGlmICgqKnlhcmd2ID09ICcvJykKLSAgICAgICAgICBjb250aW51ZTsKLSNlbmRp ZiAvKiBWTVMgKi8KLSAgICAgICAgZWxzZSBpZiAoKip5YXJndiA9PSAnLScpIHsgICAgICAvKiBH b3QgYW4gb3B0aW9uIChiZWdpbnMgd2l0aCBkYXNoKSAqLwotICAgICAgICAgICAgeCA9ICooKnlh cmd2KzEpOyAgICAgICAgICAgIC8qIEdldCBvcHRpb24gbGV0dGVyICovCi0gICAgICAgICAgICB3 aGlsZSAoeCkgeyAgICAgICAgICAgICAgICAgLyogQWxsb3cgZm9yIGJ1bmRsZWQgb3B0aW9ucyAq LwotICAgICAgICAgICAgICAgIGRlYnVnKEYwMDAsInByZXNjYW4gYXJnIiwiIix4KTsKLSAgICAg ICAgICAgICAgICBzd2l0Y2ggKHgpIHsKLSNpZm5kZWYgTk9JQ1AKLSAgICAgICAgICAgICAgICAg IGNhc2UgJysnOgotICAgICAgICAgICAgICAgICAgY2FzZSAnLSc6Ci0gICAgICAgICAgICAgICAg ICAgIGlmIChkb3hhcmcoeWFyZ3YsMSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm YXRhbCgiRXh0ZW5kZWQgYXJndW1lbnQgZXJyb3IiKTsKLSAgICAgICAgICAgICAgICAgICAgfQot I2lmbmRlZiBDT01NRU5UCQkJCS8qIEplZmYgMjggQXByIDIwMDMgKi8KLSAgICAgICAgICAgICAg ICAgICAgeXAgPSBOVUxMOwkJLyogKG5vdCAiIikgKi8KLSNlbHNlCi0gICAgICAgICAgICAgICAg ICAgIHlhcmd2KyssIHlhcmdjLS07Ci0gICAgICAgICAgICAgICAgICAgIHlwID0gKnlhcmd2Owot I2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYg LyogTk9JQ1AgKi8KLQotICAgICAgICAgICAgICAgICAgY2FzZSAnNyc6ICAgICAgICAgICAgIC8q IFVuZG9jdW1lbnRlZC4uLiAqLwotICAgICAgICAgICAgICAgICAgICBzc3RlbG5ldCA9IDE7ICAg ICAgIC8qIChiZWNhdXNlIGl0IGRvZXNuJ3Qgd29yaykgKi8KLSAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0jaWZkZWYgSUtTRAotICAgICAgICAgICAgICAgICAgY2FzZSAnQSc6IHsKLSAgICAg ICAgICAgICAgICAgICAgICBjaGFyICogcDsKLSAgICAgICAgICAgICAgICAgICAgICBpbnNlcnZl ciA9IDE7ICAgICAvKiBGbGFnIHRoYXQgd2UgYXJlIGRvaW5nIHRoaXMgKi8KLSAgICAgICAgICAg ICAgICAgICAgICBzcnZjZG1zZyA9IDI7ICAgICAvKiBQcmVzZXQgdGhpcyAqLwotICAgICAgICAg ICAgICAgICAgICAgIC8qIFNlZSBpbnNlcnZlciBzZWN0aW9uIG9mIGNrY21haS5jIGZvciBtb3Jl IHNldHRpbmdzICovCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgICAgICAgaWYgKCooeXAr MSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZmF0YWwoImludmFsaWQgYXJndW1lbnQg YnVuZGxpbmcgYWZ0ZXIgLUEiKTsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0jaWZkZWYgTlQK LSAgICAgICAgICAgICAgICAgICAgICAvKiBTdXBwb3J0IGZvciBQcmFnbWEgU3lzdGVtcyBUZWxu ZXQvVGVybWluYWwgU2VydmVycyAqLwotICAgICAgICAgICAgICAgICAgICAgIHAgPSBnZXRlbnYo IlBSQUdNQVNZU19JTkVURF9TT0NLIik7Ci0gICAgICAgICAgICAgICAgICAgICAgaWYgKHAgJiYg YXRvaShwKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHR0bmFtZVswXSA9ICck JzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KCZ0dG5hbWVbMV0scCxUVE5B TUxFTi0xKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg ICAgICAgICAgfQotI2VuZGlmIC8qIE5UICovCi0gICAgICAgICAgICAgICAgICAgICAgeWFyZ3Yr KywgeWFyZ2MtLTsKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoeWFyZ2MgPCAxIHx8ICoqeWFy Z3YgPT0gJy0nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFsKCItQSBhcmd1bWVu dCBtaXNzaW5nIik7Ci0gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgdHRuYW1lWzBdID0gJyQnOwotICAgICAgICAgICAgICAgICAgICAgICAg ICBja3N0cm5jcHkoJnR0bmFtZVsxXSwqeWFyZ3YsVFROQU1MRU4tMSk7Ci0gICAgICAgICAgICAg ICAgICAgICAgfQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLQotI2lmZGVmIE9TMgot ICAgICAgICAgICAgICAgICAgY2FzZSAnVyc6Ci0gICAgICAgICAgICAgICAgICAgIGlmICgqKHlw KzEpKQotICAgICAgICAgICAgICAgICAgICAgIGZhdGFsKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRs aW5nIGFmdGVyIC1XIik7Ci0gICAgICAgICAgICAgICAgICAgIHlhcmd2KyssIHlhcmdjLS07Ci0g ICAgICAgICAgICAgICAgICAgIGlmICh5YXJnYyA8IDEpCi0gICAgICAgICAgICAgICAgICAgICAg ZmF0YWwoIldpbmRvdyBoYW5kbGUgbWlzc2luZyIpOwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAg ICAgICAgICAgICAgaWYgKGR1bW15KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB5YXJndisr LCB5YXJnYy0tOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg ICAgICAgIH0gZWxzZSB7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgICAgICAg ICAgICAgaHduZERpYWxlciA9IChIV05EKSBhdG9sKCp5YXJndik7Ci0gICAgICAgICAgICAgICAg ICAgICAgICBTdGFydGVkRnJvbURpYWxlciA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICB5 YXJndisrLCB5YXJnYy0tOwotICAgICAgICAgICAgICAgICAgICAgICAgS2VybWl0RGlhbGVySUQg PSBhdG9sKCp5YXJndikgOwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgICAgICAgICAgfQot I2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg ICAgICAgICAgICAgIGNhc2UgJyMnOiAgICAgICAgICAgICAvKiBLOTUgaW5pdGlhbGl6YXRpb24g b3B0aW9ucyAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoKih5cCsxKSkgewotICAgICAgICAg ICAgICAgICAgICAgICAgZmF0YWwoImludmFsaWQgYXJndW1lbnQgYnVuZGxpbmciKTsKLSAgICAg ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB5YXJndisrLCB5YXJnYy0tOwot ICAgICAgICAgICAgICAgICAgICBpZiAoeWFyZ2MgPCAxKQotICAgICAgICAgICAgICAgICAgICAg IGZhdGFsKCItIyBhcmd1bWVudCBtaXNzaW5nIik7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0 ZmxhZ3MgfD0gYXRvbCgqeWFyZ3YpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSNlbmRp ZiAvKiBPUzIgKi8KLQotI2lmbmRlZiBOT1NQTAotICAgICAgICAgICAgICAgICAgY2FzZSAnTSc6 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNeSBVc2VyIE5hbWUgKi8KLSAgICAgICAg ICAgICAgICAgICAgaWYgKCooeXArMSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFs KCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRsaW5nIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICAgICAgeWFyZ3YrKywgeWFyZ2MtLTsKLSAgICAgICAgICAgICAgICAgICAg aWYgKCh5YXJnYyA8IDEpIHx8ICgqKnlhcmd2ID09ICctJykpIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgIGZhdGFsKCJtaXNzaW5nIHVzZXJuYW1lIik7Ci0gICAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICAgICAgaWYgKChpbnQpc3RybGVuKCp5YXJndikgPiBVSURCVUZMRU4p IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFsKCJ1c2VybmFtZSB0b28gbG9uZyIpOwot ICAgICAgICAgICAgICAgICAgICB9Ci0jaWZkZWYgQ09NTUVOVAotLyoKLSAgVGhpcyBjYW4ndCB3 b3JrLiAgdWlkYnVmIGlzIG92ZXJ3cml0dGVuIGluIHN5c2luaXQoKSB3aGljaCBoYXMgeWV0IHRv IGJlCi0gIGNhbGxlZC4gIFRoaXMgY2Fubm90IGJlIHNldCBpbiBwcmVzY2FuKCkuCi0qLwotI2lm ZGVmIElLU0QKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnNlcnZlcikKLSNlbmRpZiAvKiBJ S1NEICovCi0gICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHVpZGJ1ZiwqeWFyZ3YsVUlE QlVGTEVOKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICAgICAgICAgIGJyZWFr OwotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgICAgICAgICAgICAgICBjYXNlICdSJzogICAgICAg ICAgICAgLyogUmVtb3RlLW9ubHkgYWR2aXNvcnkgKi8KLSNpZmRlZiBDS19JRlJPCi0gICAgICAg ICAgICAgICAgICAgIHJlbW9ubHkgPSAxOwotI2VuZGlmIC8qIENLX0lGUk8gKi8KLSAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlICdTJzogICAgICAgICAg ICAgLyogU1RBWSAqLwotICAgICAgICAgICAgICAgICAgICBzdGF5ZmxnID0gMTsKLSAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlICdoJzoKLSAgICAgICAg ICAgICAgICAgICAgbm9pbml0ID0gMTsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAgICAg c3RhcnRmbGFncyB8PSAyOyAgICAvKiBObyBuZXR3b3JrIERMTHMgKi8KLSAgICAgICAgICAgICAg ICAgICAgc3RhcnRmbGFncyB8PSA0OyAgICAvKiBObyBUQVBJIERMTHMgKi8KLSAgICAgICAgICAg ICAgICAgICAgc3RhcnRmbGFncyB8PSA4OyAgICAvKiBObyBTZWN1cml0eSBETExzICovCi0gICAg ICAgICAgICAgICAgICAgIHN0YXJ0ZmxhZ3MgfD0gMTY7ICAgLyogTm8gWm1vZGVtIERMTHMgKi8K LSAgICAgICAgICAgICAgICAgICAgc3RhcnRmbGFncyB8PSAzMjsgICAvKiBTdGRpbiAqLwotICAg ICAgICAgICAgICAgICAgICBzdGFydGZsYWdzIHw9IDY0OyAgIC8qIFN0ZG91dCAqLwotI2VuZGlm IC8qIE9TMiAqLwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSNpZm5kZWYgTk9JQ1AKLSAg ICAgICAgICAgICAgICAgIGNhc2UgJ1knOiAgICAgICAgICAgICAvKiBObyBpbml0IGZpbGUgKi8K LSAgICAgICAgICAgICAgICAgICAgbm9pbml0ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLQotICAgICAgICAgICAgICAgICAgY2FzZSAncSc6Ci0g ICAgICAgICAgICAgICAgICAgICAgcXVpZXQgPSAxOwotICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwotCi0gICAgICAgICAgICAgICAgICBjYXNlICdkJzogICAgICAgICAgICAgLyogPSBTRVQg REVCVUcgT04gKi8KLSNpZmRlZiBERUJVRwotICAgICAgICAgICAgICAgICAgICBpZiAoZGViY291 bnQrKyA+IDApCi0gICAgICAgICAgICAgICAgICAgICAgZGVidGltID0gMTsKLSAgICAgICAgICAg ICAgICAgICAgaWYgKCFkZWJsb2cpCi0gICAgICAgICAgICAgICAgICAgICAgZGVibG9nID0gZGVi b3BuKCJkZWJ1Zy5sb2ciLDApOwotI2VuZGlmIC8qIERFQlVHICovCi0gICAgICAgICAgICAgICAg ICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICBjYXNlICd4JzogICAgICAgICAgICAgLyog U2VydmVyICovCi0gICAgICAgICAgICAgICAgICAgIGFyZ194ID0gMTsgICAgICAgICAgLyogTm90 ZSBpbiBhZHZhbmNlICovCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotI2lmbmRlZiBOT0lD UAotICAgICAgICAgICAgICAgICAgY2FzZSAneSc6ICAgICAgICAgICAgIC8qIEFsdGVybmF0aXZl IGluaXQgZmlsZSAqLwotICAgICAgICAgICAgICAgICAgICBub2luaXQgPSAwOwotICAgICAgICAg ICAgICAgICAgICB5YXJndisrLCB5YXJnYy0tOwotICAgICAgICAgICAgICAgICAgICBpZiAoeWFy Z2MgPCAxKSBmYXRhbCgibWlzc2luZyBuYW1lIGluIC15Iik7Ci0gICAgICAgICAgICAgICAgICAg IC8qIFJlcGxhY2UgaW5pdCBmaWxlIG5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgY2tzdHJu Y3B5KGtlcm1yYywqeWFyZ3YsS0VSTVJDTCk7Ci0gICAgICAgICAgICAgICAgICAgIHJjZmxhZyA9 IDE7ICAgICAgICAgLyogRmxhZyB0aGF0IHRoaXMgaGFzIGJlZW4gZG9uZSAqLwotICAgICAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTExLCJwcmVzY2FuIGtlcm1yYyIsa2VybXJjLHJjZmxhZyk7Ci0g ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIE5PSUNQICovCi0gICAgICAgICAg ICAgICAgICBjYXNlICd6JzogICAgICAgICAgICAgLyogPSBTRVQgQkFDS0dST1VORCBPRkYgKi8K LSAgICAgICAgICAgICAgICAgICAgYmdzZXQgPSAwOwotICAgICAgICAgICAgICAgICAgICBiYWNr Z3JkID0gMDsKLSNpZmRlZiBWTVMKLSAgICAgICAgICAgICAgICAgICAgYmF0Y2ggPSAwOwotI2Vu ZGlmIC8qIFZNUyAqLwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAg ICAgICAgY2FzZSAnQic6ICAgICAgICAgICAgIC8qIEZvcmNlIGJhY2tncm91bmQgKGJhdGNoKSAq LwotICAgICAgICAgICAgICAgICAgICBiZ3NldCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGJh Y2tncmQgPSAxOwotI2lmZGVmIFZNUwotICAgICAgICAgICAgICAgICAgICBiYXRjaCA9IDE7Ci0j ZW5kaWYgLyogVk1TICovCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0jaWZkZWYgQ0tf TkVUQklPUwotICAgICAgICAgICAgICAgICAgY2FzZSAnTic6Ci0gICAgICAgICAgICAgICAgICAg IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBuIDsKLSAgICAgICAgICAgICAgICAgICAg ICAgIHlhcmd2KyssIHlhcmdjLS07Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKHkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8q IENPTU1FTlQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJsZW4oKnlhcmd2KSAh PSAxIHx8ICgqeWFyZ3YpWzBdID09ICdYJykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg IE5ldEJpb3NBZGFwdGVyID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBhdG9pKCp5YXJndik7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKG4gPj0gMCAmJiBuIDw9IDkpCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBOZXRCaW9zQWRhcHRlciA9IG47Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0Qmlvc0FkYXB0ZXIg PSAtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBDS19ORVRCSU9TICovCi0gICAg ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCF5cCkKLSAgICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgICAgIHggPSAqKyt5cDsgICAgICAgICAgICAgIC8qIFNlZSBp ZiBvcHRpb25zIGFyZSBidW5kbGVkICovCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9 Ci0jZW5kaWYgLyogTk9DTURMICovCi19Ci0KLS8qICBHIEUgVCBUIEMgUyAgLS0gIEdldCBUcmFu c2ZlciAoSW50ZXJtZWRpYXRlKSBDaGFyYWN0ZXIgU2V0ICAqLwotCi0vKgotICBHaXZlbiB0d28g ZmlsZSBjaGFyYWN0ZXIgc2V0cywgdGhpcyByb3V0aW5lIHBpY2tzIG91dCB0aGUgYXBwcm9wcmlh dGUKLSAgInRyYW5zZmVyIiBjaGFyYWN0ZXIgc2V0IHRvIHVzZSBmb3IgdHJhbnNsYXRpbmcgYmV0 d2VlbiB0aGVtLgotICBUaGUgdHJhbnNmZXIgY2hhcmFjdGVyIHNldCBudW1iZXIgaXMgcmV0dXJu ZWQuCi0KLSAgVHJhbnNsYXRpb24gYmV0d2VlbiB0d28gZmlsZSBjaGFyYWN0ZXIgc2V0cyBpcyBk b25lLCBmb3IgZXhhbXBsZSwKLSAgYnkgdGhlIENPTk5FQ1QsIFRSQU5TTUlULCBhbmQgVFJBTlNM QVRFIGNvbW1hbmRzLgotCi0gIFRyYW5zbGF0aW9uIGJldHdlZW4gS2FuamkgY2hhcmFjdGVyIHNl dHMgaXMgbm90IHlldCBzdXBwb3J0ZWQuCi0qLwotaW50Ci1nZXR0Y3MoY3MxLGNzMikgaW50IGNz MSwgY3MyOyB7Ci0jaWZkZWYgTk9DU0VUUyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8g Y2hhcmFjdGVyLXNldCBzdXBwb3J0ICovCi0gICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogc28gbm8gdHJhbnNsYXRpb24gKi8KLSNlbHNlCi0gICAgaW50IHRjcyA9IFRD X1RSQU5TUDsKLSNpZmRlZiBLQU5KSQotLyogS2Fuamkgbm90IHN1cHBvcnRlZCB5ZXQgKi8KLSAg ICBpZiAoZmNzaW5mb1tjczFdLmFscGhhYmV0ID09IEFMX0pBUEFOIHx8Ci0gICAgICAgIGZjc2lu Zm9bY3MyXS5hbHBoYWJldCA9PSBBTF9KQVBBTiApCi0gICAgICB0Y3MgPSBUQ19UUkFOU1A7Ci0g ICAgZWxzZQotI2VuZGlmIC8qIEtBTkpJICovCi0jaWZkZWYgQ1lSSUxMSUMKLS8qCi0gIEkgY2Fu J3QgcmVtZW1iZXIgd2h5IHdlIGRvbid0IHRlc3QgYm90aCBzZXRzIGhlcmUsIGJ1dCBJIHRoaW5r IHRoZXJlCi0gIG11c3QgaGF2ZSBiZWVuIGEgcmVhc29uLi4uCi0qLwotICAgICAgaWYgKGZjc2lu Zm9bY3MyXS5hbHBoYWJldCA9PSBBTF9DWVJJTCkKLSAgICAgICAgdGNzID0gVENfQ1lSSUxMOwot ICAgICAgZWxzZQotI2VuZGlmIC8qIENZUklMTElDICovCi0jaWZkZWYgSEVCUkVXCi0gICAgICAg ICAgaWYgKGZjc2luZm9bY3MxXS5hbHBoYWJldCA9PSBBTF9IRUJSRVcgfHwKLSAgICAgICAgICAg ICAgZmNzaW5mb1tjczJdLmFscGhhYmV0ID09IEFMX0hFQlJFVyApCi0gICAgICAgICAgICB0Y3Mg PSBUQ19IRUJSRVc7Ci0gICAgICAgICAgZWxzZQotI2VuZGlmIC8qIEhFQlJFVyAqLwotI2lmZGVm IEdSRUVLCi0gICAgICAgICAgaWYgKGZjc2luZm9bY3MxXS5hbHBoYWJldCA9PSBBTF9HUkVFSyB8 fAotICAgICAgICAgICAgICBmY3NpbmZvW2NzMl0uYWxwaGFiZXQgPT0gQUxfR1JFRUsgKQotICAg ICAgICAgICAgdGNzID0gVENfR1JFRUs7Ci0gICAgICAgICAgZWxzZQotI2VuZGlmIC8qIEdSRUVL ICovCi0KLSAgICAgICAgICAgIC8qIFJvbWFuIHNldHMgLi4uICovCi0KLSNpZmRlZiBMQVRJTjIg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFYXN0IEV1cm9wZWFuICovCi0gICAgICAgIGlm IChjczEgPT0gRkNfMkxBVElOICB8fCBjczIgPT0gRkNfMkxBVElOIHx8IC8qIExhdGluLTIgKi8K LSAgICAgICAgICAgIGNzMSA9PSBGQ19DUDg1MiAgIHx8IGNzMiA9PSBGQ19DUDg1MiAgfHwgLyog Q1A4NTIgKi8KLSAgICAgICAgICAgIGNzMSA9PSBGQ19DUDEyNTAgIHx8IGNzMiA9PSBGQ19DUDEy NTAgfHwgLyogV2luZG93cyBMYXRpbi0yICovCi0gICAgICAgICAgICBjczEgPT0gRkNfTUFaT1ZJ QSB8fCBjczIgPT0gRkNfTUFaT1ZJQSkgIC8qIFBvbGlzaCBNYXpvdmlhICovCi0gICAgICAgICAg dGNzID0gVENfMkxBVElOOwotICAgICAgICBlbHNlCi0jZW5kaWYgLyogTEFUSU4yICovCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2VzdCBFdXJvcGVhbiBFdXJv LWF3YXJlICovCi0gICAgICAgICAgaWYgKGNzMSA9PSBGQ19DUDg1OCB8fCBjczEgPT0gRkNfOUxB VElOIHx8Ci0gICAgICAgICAgICAgIGNzMiA9PSBGQ19DUDg1OCB8fCBjczIgPT0gRkNfOUxBVElO KQotICAgICAgICAgICAgdGNzID0gVENfOUxBVElOOwotICAgICAgICAgIGVsc2UgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFRyYWRpdGlvbmFsIFdlc3QgRXVyb3BlYW4gKi8KLSAgICAgICAg ICAgIHRjcyA9IFRDXzFMQVRJTjsKLSAgICByZXR1cm4odGNzKTsKLSNlbmRpZiAvKiBOT0NTRVRT ICovCi19Ci0KLSNpZm5kZWYgTk9MT0NBTAotLyogIEQgTyBDIE8gTiBFIEMgVCAgLS0gIERvIHRo ZSBjb25uZWN0IGNvbW1hbmQgICovCi0vKgotICBxID0gMCBtZWFucyBpc3N1ZSBub3JtYWwgaW5m b3JtYXRpb25hbCBtZXNzYWdlIGFib3V0IGhvdyB0byBnZXQgYmFjaywgZXRjLgotICBxICE9IDAg bWVhbnMgdG8gc2tpcCB0aGUgbWVzc2FnZS4KLSovCi0KLWludAotZG9jb25lY3QocSxhc3luYykg aW50IHEsIGFzeW5jOyB7Ci0gICAgaW50IHg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogUmV0dXJuIGNvZGUgKi8KLSNpZmRlZiBDS19BVVRPREwKLSAgICBleHRlcm4gQ0hBUiBrc2J1 ZltdOwotI2VuZGlmIC8qIENLX0FVVE9ETCAqLwotI2lmbmRlZiBOT0tWRVJCUyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEtleWJvYXJkIG1hY3JvIG1hdGVyaWFsICovCi0gICAgZXh0ZXJuIGlu dCBrZXltYWMsIGtleW1hY3g7Ci0jZW5kaWYgLyogTk9LVkVSQlMgKi8KLSAgICBleHRlcm4gaW50 IGp1c3RvbmUsIGFkbF9lcnI7Ci0gICAgaW50IHFzYXZlOyAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogRm9yIHJlbWVtYmVyaW5nICJxdWlldCIgdmFsdWUgKi8KLSNpZmRlZiBPUzIKLSAgICBl eHRlcm4gaW50IHRlcm1faW87Ci0gICAgZXh0ZXJuIGludCBkaXNwbGF5X2RlbW87Ci0gICAgaW50 IHRlcm1faW9fc2F2ZTsKLSNpZmRlZiBLVUkKLSAgICBleHRlcm4gaW50IGt1aV9hc3luYzsKLSNl bmRpZiAvKiBLVUkgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICBpbnQgaXNfdG4gPSAwOwotCi0j aWZkZWYgSUtTRAotICAgIGlmIChpbnNlcnZlcikgewotICAgICAgICBpZiAoIXF1aWV0KQotICAg ICAgICAgIHByaW50ZigiP1NvcnJ5LCBJS1NEIGNhbm5vdCBDT05ORUNULlxyXG4iKTsKLSAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICB9Ci0jZW5kaWYgLyogSUtTRCAqLwotCi0gICAg aXNfdG4gPQotI2lmZGVmIFROQ09ERQotICAgICAgKGxvY2FsICYmIG5ldHdvcmsgJiYgSVNfVEVM TkVUKCkpIHx8ICghbG9jYWwgJiYgc3N0ZWxuZXQpCi0jZWxzZQotICAgICAgICAwCi0jZW5kaWYg LyogVE5DT0RFICovCi0gICAgICAgICAgOwotLyoKLSAgU2F2aW5nLCBjaGFuZ2luZywgYW5kIHJl c3RvcmluZyB0aGUgZ2xvYmFsICJxdWlldCIgdmFyaWFibGUgYXJvdW5kIGNhbGxzCi0gIHRvIGNv bmVjdCgpIHRvIGNvbnRyb2wgd2hldGhlciB0aGUgdmVyYm9zZSBDT05ORUNUIG1lc3NhZ2UgaXMg cHJpbnRlZCBpcwotICBvYnZpb3VzbHkgbGVzcyBlbGVnYW50IHRoYW4gcGFzc2luZyBhIHBhcmFt ZXRlciB0byBjb25lY3QoKSwgYnV0IHdlIGRvIGl0Ci0gIHRoaXMgd2F5IHRvIGF2b2lkIHRoZSBu ZWVkIHRvIGNoYW5nZSBhbGwgb2YgdGhlIGNrP2Nvbi5jIG1vZHVsZXMuICBOT1RFOgotICBpdCBp cyBpbXBvcnRhbnQgdG8gcmVzdG9yZSB0aGUgdmFsdWUgaW1tZWRpYXRlbHkgdXBvbiByZXR1cm4g aW4gY2FzZSB0aGVyZQotICBpcyBhbiBhdXRvZG93bmxvYWQgb3IgQVBDLgotKi8KLSAgICBxc2F2 ZSA9IHF1aWV0OyAgICAgICAgICAgICAgICAgICAgICAvKiBTYXZlIGl0ICovCi0gICAgaWYgKCFx dWlldCAmJiBxID4gLTEpCi0gICAgICBxdWlldCA9IHE7ICAgICAgICAgICAgICAgICAgICAgICAg LyogVXNlIGFyZ3VtZW50IHRlbXBvcmFyaWx5ICovCi0gICAgY29ucmVzKCk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogUHV0IGNvbnNvbGUgYmFjayB0byBub3JtYWwgKi8KLSAgICBkZWJ1 ZyhGMTAxLCJkb2NvbmVjdCBqdXN0b25lIDEiLCIiLGp1c3RvbmUpOwotI2lmZGVmIENLX0FVVE9E TAotICAgIGtzYnVmWzBdID0gTlVMOyAgICAgICAgICAgICAgICAgICAgIC8qIEF1dG9kb3dubG9h ZCBwYWNrZXQgYnVmZmVyICovCi0jZW5kaWYgLyogQ0tfQVVUT0RMICovCi0jaWZkZWYgT1MyCi0g ICAgZGlzcGxheV9kZW1vID0gMTsgICAgICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgdG8gZGlz cGxheSBkZW1vICovCi0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBJS1NfT1BUSU9OCi0gICAg aWYgKGlzX3RuICYmIFRFTE9QVF9VKFRFTE9QVF9LRVJNSVQpICYmIHR0Y2hrKCkgPj0gMAotI2lm ZGVmIE9TMgotICAgICAgICYmICF2aWV3b25seQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAp IHsKLSAgICAgICAgLyogSWYgdGhlIHJlbW90ZSBzaWRlIGlzIGluIGEgc3RhdGUgb2YgSUtTIFNU QVJULVNFUlZFUiAgICAqLwotICAgICAgICAvKiB3ZSByZXF1ZXN0IHRoYXQgdGhlIHN0YXRlIGJl IGNoYW5nZWQuICBXZSB3aWxsIGRldGVjdCAgICovCi0gICAgICAgIC8qIGEgZmFpbHVyZSB0byBh ZGhlcmUgdG8gdGhlIHJlcXVlc3Qgd2hlbiB3ZSBjYWxsIHR0aW5jKCkgKi8KLSAgICAgICAgaWYg KCFpa3Nfd2FpdChLRVJNSVRfUkVRX1NUT1AsMCkgJiYgIXRjcF9pbmNvbWluZykgewotICAgICAg ICAgICAgaWYgKCFxdWlldCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiXHJcbkVudGVyIENs aWVudC9TZXJ2ZXIgTW9kZS4uLiAgVXNlOlxyXG5cclxuIik7Ci0gICAgICAgICAgICAgICAgcHJp bnRmKAotIiBSRU1PVEUgTE9HSU4gPHVzZXI+IDxwYXNzd29yZD4gdG8gbG9nIGluIHRvIHRoZSBz ZXJ2ZXIgaWYgbmVjZXNzYXJ5LlxyXG4iKTsKLSAgICAgICAgICAgICAgICBwcmludGYoIiBTRU5E IGFuZCBHRVQgZm9yIGZpbGUgdHJhbnNmZXIuXHJcbiIpOwotICAgICAgICAgICAgICAgIHByaW50 ZigiIFJFTU9URSBjb21tYW5kcyBmb3IgZmlsZSBtYW5hZ2VtZW50LlxyXG4iKTsKLSAgICAgICAg ICAgICAgICBwcmludGYoIiBGSU5JU0ggdG8gdGVybWluYXRlIENsaWVudC9TZXJ2ZXIgbW9kZS5c clxuIik7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIgQllFIHRvIHRlcm1pbmF0ZSBhbmQgY2xv c2UgY29ubmVjdGlvbi5cclxuIik7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIgUkVNT1RFIEhF TFAgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uXHJcblxyXG4iKTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIHF1aWV0ID0gcXNhdmU7Ci0gICAgICAgICAgICByZXR1cm4oMCk7ICAgICAg LyogRmFpbHVyZSAqLwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogTGV0IG91ciBwZWVyIGtu b3cgb3VyIHN0YXRlLiAqLwotI2lmZGVmIENLX0FVVE9ETAotICAgIGlmIChpc190biAmJiBURUxP UFRfTUUoVEVMT1BUX0tFUk1JVCkKLSNpZmRlZiBPUzIKLSAgICAgICAgJiYgIXZpZXdvbmx5Ci0j ZW5kaWYgLyogT1MyICovCi0gICAgICAgICApIHsKLSAgICAgICAgaWYgKGF1dG9kbCAmJiAhVEVM T1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCkgewotICAgICAgICAgICAgdG5f c2lrcyhLRVJNSVRfU1RBUlQpOyAgICAgIC8qIFNlbmQgS2VybWl0LVNlcnZlciBTdGFydCAqLwot ICAgICAgICB9IGVsc2UgaWYgKCFhdXRvZGwgJiYgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtl cm1pdC5tZV9zdGFydCkgewotICAgICAgICAgICAgdG5fc2lrcyhLRVJNSVRfU1RPUCk7Ci0gICAg ICAgIH0KLSAgICB9Ci0jZWxzZSAvKiBDS19BVVRPREwgKi8KLSAgICBpZiAoaXNfdG4gJiYgVEVM T1BUX01FKFRFTE9QVF9LRVJNSVQpICYmCi0JVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1p dC5tZV9zdGFydCkKLSAgICAgICAgdG5fc2lrcyhLRVJNSVRfU1RPUCk7Ci0jZW5kaWYgLyogQ0tf QVVUT0RMICovCi0jZW5kaWYgLyogSUtTX09QVElPTiAqLwotCi0gICAgZGVidWcoRjEwMSwiZG9j b25lY3QgZmxvdyIsIiIsZmxvdyk7Ci0jaWZkZWYgT1MyCi0gICAgZGVidWcoRjEwMSwiZG9jb25l Y3QgYXN5bmMiLCIiLGFzeW5jKTsKLSNpZmRlZiBLVUkKLSAgICBpZiAoa3VpX2FzeW5jKQotICAg ICAgYXN5bmMgPSAxOzsKLSNlbmRpZiAvKiBLVUkgKi8KLSAgICB4ID0gY29uZWN0KGFzeW5jKTsg ICAgICAgICAgICAgICAgICAvKiBDb25uZWN0IHRoZSBmaXJzdCB0aW1lICovCi0jZWxzZSAvKiBP UzIgKi8KLSAgICB4ID0gY29uZWN0KCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgZGVib2sgPSAx OwotCi0jaWZkZWYgSUtTX09QVElPTgotICAgIGlmIChURUxPUFRfVShURUxPUFRfS0VSTUlUKSAm JgotICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnVfc3RhcnQgJiYKLSAg ICAgICAgIXRjcF9pbmNvbWluZyAmJiAhcXVpZXQgJiYgdHRjaGsoKSA+PSAwCi0gICAgICAgICkg ewotICAgICAgICBwcmludGYoIlxyXG5FbnRlciBDbGllbnQvU2VydmVyIE1vZGUuLi4gIFVzZTpc clxuXHJcbiIpOwotICAgICAgICBwcmludGYoCi0iIFJFTU9URSBMT0dJTiA8dXNlcj4gPHBhc3N3 b3JkPiB0byBsb2cgaW4gdG8gdGhlIHNlcnZlciBpZiBuZWNlc3NhcnkuXHJcbiIpOwotICAgICAg ICBwcmludGYoIiBTRU5EIGFuZCBHRVQgZm9yIGZpbGUgdHJhbnNmZXIuXHJcbiIpOwotICAgICAg ICBwcmludGYoIiBSRU1PVEUgY29tbWFuZHMgZm9yIGZpbGUgbWFuYWdlbWVudC5cclxuIik7Ci0g ICAgICAgIHByaW50ZigiIEZJTklTSCB0byB0ZXJtaW5hdGUgQ2xpZW50L1NlcnZlciBtb2RlLlxy XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgQllFIHRvIHRlcm1pbmF0ZSBhbmQgY2xvc2UgY29ubmVj dGlvbi5cclxuIik7Ci0gICAgICAgIHByaW50ZigiIFJFTU9URSBIRUxQIGZvciBhZGRpdGlvbmFs IGluZm9ybWF0aW9uLlxyXG5cclxuIik7Ci0gICAgfQotI2VuZGlmIC8qIElLU19PUFRJT04gKi8K LQotICAgIHF1aWV0ID0gcXNhdmU7ICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgInF1 aWV0IiB2YWx1ZSAqLwotICAgIGRlYnVnKEYxMDEsImRvY29uZWN0IGp1c3RvbmUgMiIsIiIsanVz dG9uZSk7Ci0KLSNpZmRlZiBORVRDT05OCi0gICAgaWYgKG5ldHdvcmsgJiYgdG5fZXhpdCAmJiB0 dGNoaygpIDwgMCkKLSAgICAgIGRvZXhpdChHT09EX0VYSVQseGl0c3RhKTsgICAgICAgICAvKiBF eGl0IHdpdGggZ29vZCBzdGF0dXMgKi8KLSNlbmRpZiAvKiBORVRDT05OICovCi0KLSNpZmRlZiBP UzJPUlVOSVgKLSAgICAvKiBFeGl0IG9uIGRpc2Nvbm5lY3QgaWYgdGhlIHBvcnQgaXMgbm90IG9w ZW4gb3IgY2FycmllciBkZXRlY3QgKi8KLSAgICBpZiAoZXhpdG9uY2xvc2UgJiYgKHR0Y2hrKCkg PCAwKSkKLSAgICAgIGRvZXhpdChHT09EX0VYSVQseGl0c3RhKTsKLSNlbmRpZiAvKiBPUzJPUlVO SVggKi8KLQotI2lmZGVmIENLQ09OSU5UQjRDQgotICAgIC8qIFRoZSBvcmRlciBtYWtlcyBhIGRp ZmZlcmVuY2UgaW4gSFAtVVggOC4wMC4gKi8KLSAgICAvKiBUaGUgb3RoZXIgb3JkZXIgbWFrZXMg aXQgdGhpbmsgaXQncyBpbiB0aGUgYmFja2dyb3VuZCB3aGVuIGl0ICovCi0gICAgLyogcmV0dXJu cyBmcm9tIENPTk5FQ1QgKEFwciAxOTk5KS4gKi8KLSAgICBzZXRpbnQoKTsKLSAgICBjb25jYigo Y2hhcillc2NhcGUpOyAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIGNvbnNvbGUgZm9yIGNvbW1h bmRzICovCi0jZWxzZQotICAgIC8qIFRoaXMgaXMgaG93IGl0IGhhcyBhbHdheXMgYmVlbiBzbyBi ZXR0ZXIgbGVhdmUgaXQgKi8KLSAgICAvKiB0aGlzIHdheSBmb3IgYWxsIG5vbi1IUC1VWC04LjAw IGJ1aWxkcy4gKi8KLSAgICBjb25jYigoY2hhcillc2NhcGUpOyAgICAgICAgICAgICAgICAvKiBS ZXN0b3JlIGNvbnNvbGUgZm9yIGNvbW1hbmRzICovCi0gICAgc2V0aW50KCk7Ci0jZW5kaWYgLyog Q0tDT05JTlRCNENCICovCi0KLSNpZmRlZiBPUzIKLSAgICBpZiAoIWFzeW5jKSB7Ci0gICAgICAg IHRlcm1faW9fc2F2ZSA9IHRlcm1faW87ICAgICAgICAgLyogRGlzYWJsZSBJL08gYnkgZW11bGF0 b3IgKi8KLSAgICAgICAgdGVybV9pbyA9IDA7Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBD S19BUEMKLS8qCi0gIElmIGFuIEFQQyBjb21tYW5kIHdhcyByZWNlaXZlZCBkdXJpbmcgQ09OTkVD VCBtb2RlLCB3ZSBkZWZpbmUgaXQgbm93Ci0gIGFzIGEgbWFjcm8sIGV4ZWN1dGUgdGhlIG1hY3Jv LCBhbmQgdGhlbiByZXR1cm4gdG8gQ09OTkVDVCBtb2RlLgotICBXZSBkbyB0aGlzIGluIGEgV0hJ TEUgbG9vcCBpbiBjYXNlIGFkZGl0aW9uYWwgQVBDcyBjb21lIGR1cmluZyBzdWJzZXF1ZW50Ci0g IENPTk5FQ1Qgc2Vzc2lvbnMuCi0qLwotICAgICAgICBkZWJ1ZyhGMTAxLCJkb2NvbmVjdCBhcGNh Y3RpdmUiLCIiLGFwY2FjdGl2ZSk7Ci0gICAgICAgIGRlYnVnKEYxMDEsImRvY29uZWN0IHN1Y2Nl c3MiLCIiLHN1Y2Nlc3MpOwotCi0gICAgICAgIHdoaWxlICh4ID4gMCAmJiAoYXBjYWN0aXZlID09 IEFQQ19MT0NBTCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgIChhcGNhY3RpdmUgPT0gQVBD X1JFTU9URSAmJiBhcGNzdGF0dXMgIT0gQVBDX09GRikpKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhG MTAxLCJkb2NvbmVjdCBqdXN0b25lIDMiLCIiLGp1c3RvbmUpOwotICAgICAgICAgICAgaWYgKG1s b29rKG1hY3RhYiwiX2FwY19jb21tYW5kcyIsbm1hYykgPT0gLTEpIHsKLSAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTEwLCJkb2NvbmVjdCBhYm91dCB0byBleGVjdXRlIEFQQyIsYXBjYnVmLDApOwot ICAgICAgICAgICAgICAgIGRvbWFjKCJfYXBjX2NvbW1hbmRzIixhcGNidWYsY21kc3RrW2NtZGx2 bF0uY2NmbGdzfENGX0FQQyk7Ci0gICAgICAgICAgICAgICAgZGVsbWFjKCJfYXBjX2NvbW1hbmRz IiwxKTsKLSNpZmRlZiBERUJVRwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTAwLCJkb2NvbmVjdCBBUEMgaW4gcHJvZ3Jlc3MiLCIiLDApOwotI2VuZGlmIC8q IERFQlVHICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJkb2NvbmVj dCBhcGNhY3RpdmUgYWZ0ZXIgZG9tYWMiLCIiLGFwY2FjdGl2ZSk7Ci0gICAgICAgICAgICBpZiAo IWFwY2FjdGl2ZSkgeyAgICAgICAgICAgICAgIC8qIEluIGNhc2UgQ0xFQVIgQVBDIHdhcyBpbiBB UEMgKi8KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJkb2NvbmVjdCBxdWl0IEFQQyBsb29w OiBhcGNhY3RpdmUiLCIiLGFwY2FjdGl2ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICAvKiBBbHNvIGRvbid0IHJlY29ubmVjdCBpZiBhdXRvZG93 bmxvYWQgZmFpbGVkIC0gdmVyeSBjb25mdXNpbmchICovCi0gICAgICAgICAgICAvKiBMZXQgdGhl bSB2aWV3IHRoZSBsb2NhbCBzY3JlZW4gdG8gc2VlIHdoYXQgaGFwcGVuZWQuIC0gZmRjICovCi0K LSAgICAgICAgICAgIC8qIFRoaXMgc2hvdWxkIGJlIGNvbmRpdGlvbmFsLiAgSWYgc29tZW9uZSBp cyByZWx5aW5nIG9uIHRoZSAqLwotICAgICAgICAgICAgLyogY29ubmVjdCBtb2RlIGF1dG9kb3du bG9hZCBmb3IgdGhlIGtlcm1pdCBzZXJ2ZXIgdG8gdXNlIHdpdGggKi8KLSAgICAgICAgICAgIC8q IGEgcmVtb3RlbHkgZXhlY3V0ZWQgc2NyaXB0IHdlIHNob3VsZCBiZSBhYmxlIHRvIHJldHVybiB0 byAqLwotICAgICAgICAgICAgLyogY29ubmVjdCBtb2RlIG9uIHRoZSBmYWlsdXJlLiAgV2hhdCB3 ZSByZWFsbHkgbmVlZCB0byBkbyBpcyAqLwotICAgICAgICAgICAgLyogcmVwb3J0IHRoZSBzdGF0 dXMgb2YgdGhlIHRyYW5zZmVyIGFuZCB0aGVuIHJldHVybiB0byBDT05ORUNULiAqLwotICAgICAg ICAgICAgLyogSW4gdW5peCB0aGlzIHdvdWxkIHNpbXBseSBiZSBhIHByaW50ZigpLCBidXQgaW4g Szk1IGl0IGNvdWxkICovCi0gICAgICAgICAgICAvKiB1c2UgYSBwb3B1cCBkaWFsb2cgdG8gcmVw b3J0IHRoZSBzdGF0dXMuIC0gSmVmZiAqLwotCi0jaWZuZGVmIE5PWEZFUgotICAgICAgICAgICAg ZGVidWcoRjEwMSwiZG9jb25lY3QgeGZlcnN0YXQiLCIiLHhmZXJzdGF0KTsKLSAgICAgICAgICAg IGlmIChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMICYmICF4ZmVyc3RhdCAmJiBhZGxfZXJyICE9IDAp IHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJkb2NvbmVjdCBxdWl0IEFQQyBsb29wOiB4 ZmVyc3RhdCIsIiIseGZlcnN0YXQpOwotICAgICAgICAgICAgICAgIGFwY2FjdGl2ZSA9IEFQQ19J TkFDVElWRTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAv KiBOT1hGRVIgKi8KLSNpZmRlZiBPUzIKLSAgICAgICAgICAgIG1zbGVlcCgyNTApOwotI2VuZGlm IC8qIE9TMiAqLwotICAgICAgICAgICAgZGVidWcoRjEwMSwiZG9jb25lY3QganVzdG9uZSA0Iiwi IixqdXN0b25lKTsKLSAgICAgICAgICAgIHFzYXZlID0gcXVpZXQ7ICAgICAgICAgICAgICAvKiBE byB0aGlzIGFnYWluLi4uICovCi0gICAgICAgICAgICBpZiAoIXF1aWV0ICYmIHEgPiAtMSkKLSAg ICAgICAgICAgICAgcXVpZXQgPSBxOwotI2lmZGVmIENLX0FVVE9ETAotICAgICAgICAgICAga3Ni dWZbMF0gPSBOVUw7Ci0jZW5kaWYgLyogQ0tfQVVUT0RMICovCi0jaWZkZWYgSUtTX09QVElPTgot I2lmZGVmIENLX0FVVE9ETAotICAgICAgICAgICAgaWYgKGlzX3RuICYmCi0gICAgICAgICAgICAg ICAgVEVMT1BUX01FKFRFTE9QVF9LRVJNSVQpICYmCi0gICAgICAgICAgICAgICAgIVRFTE9QVF9T QihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQgJiYKLSAgICAgICAgICAgICAgICBhdXRv ZGwKLSNpZmRlZiBDS19BUEMKLSAgICAgICAgICAgICAgICAmJiAhYXBjYWN0aXZlCi0jZW5kaWYg LyogQ0tfQVBDICovCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgJiYgIXZpZXdvbmx5Ci0j ZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAgICAgdG5f c2lrcyhLRVJNSVRfU1RBUlQpOyAgLyogU2VuZCBLZXJtaXQtU2VydmVyIFN0YXJ0ICovCi0gICAg ICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfQVVUT0RMICovCi0jZW5kaWYgLyogSUtTX09QVElPTiAq LwotI2lmbmRlZiBPUzIKLSAgICAgICAgICAgIHggPSBjb25lY3QoKTsgICAgICAgICAgICAgICAv KiBSZS1DT05ORUNULiAqLwotI2Vsc2UgLyogT1MyICovCi0gICAgICAgICAgICB4ID0gY29uZWN0 KDApOwotICAgICAgICAgICAgdGVybV9pbyA9IHRlcm1faW9fc2F2ZTsKLSNlbmRpZiAvKiBPUzIg Ki8KLSAgICAgICAgICAgIGRlYm9rID0gMTsKLSAgICAgICAgICAgIHF1aWV0ID0gcXNhdmU7Ci0g ICAgICAgICAgICBkZWJ1ZyhGMTAxLCJkb2NvbmVjdCBqdXN0b25lIDUiLCIiLGp1c3RvbmUpOwot I2lmZGVmIE5FVENPTk4KLSAgICAgICAgICAgIGlmIChuZXR3b3JrICYmIHR0Y2hrKCkgPCAwKSB7 Ci0gICAgICAgICAgICAgICAgaWYgKHRuX2V4aXQgfHwgZXhpdG9uY2xvc2UpCi0gICAgICAgICAg ICAgICAgICBkb2V4aXQoR09PRF9FWElULHhpdHN0YSk7Ci0gICAgICAgICAgICAgICAgZWxzZQot ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogTkVUQ09O TiAqLwotCi0jaWZkZWYgT1MyT1JVTklYCi0gICAgICAgICAgICAvKiBJZiBjb25uZWN0aW9uIGRy b3BwZWQgKi8KLSAgICAgICAgICAgIGlmICh0dGNoaygpIDwgMCkgewotICAgICAgICAgICAgICAg IGNvbmNiKChjaGFyKWVzY2FwZSk7ICAgIC8qIFJlc3RvcmUgY29uc29sZS4gKi8KLSAgICAgICAg ICAgICAgICBpZiAoZXhpdG9uY2xvc2UpCi0gICAgICAgICAgICAgICAgICBkb2V4aXQoR09PRF9F WElULHhpdHN0YSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogT1MyT1JVTklYICovCi0gICAgICAgIH0gLyog TG9vcCBiYWNrIGZvciBtb3JlLiAqLwotI2VuZGlmIC8qIENLX0FQQyAqLwotCi0jaWZuZGVmIE5P S1ZFUkJTCi0gICAgICAgIGlmICgoa2V5bWFjID4gMCkgJiYgKGtleW1hY3ggPiAtMSkpIHsgLyog RXhlY3V0aW5nIGEga2V5Ym9hcmQgbWFjcm8/ICovCi0gICAgICAgICAgICAvKiBTZXQgdXAgdGhl IG1hY3JvIGFuZCByZXR1cm4gKi8KLSAgICAgICAgICAgIC8qIERvIG5vdCBjbGVhciB0aGUga2V5 bWFjIGZsYWcgKi8KLSNpZmRlZiBPUzIKLQkgICAgdGVybV9pbyA9IHRlcm1faW9fc2F2ZTsKLSNl bmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgIHJldHVybihkb2RvKGtleW1hY3gsTlVMTCxDRl9L TUFDfGNtZHN0a1tjbWRsdmxdLmNjZmxncykpOwotICAgICAgICB9Ci0jZW5kaWYgLyogTk9LVkVS QlMgKi8KLSNpZmRlZiBPUzIKLSAgICAgICAgdGVybV9pbyA9IHRlcm1faW9fc2F2ZTsKLSAgICB9 IC8qIGlmICghYXN5bmMpICovCi0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBDS0NPTklOVEI0 Q0IKLSAgICAvKiBUaGUgb3JkZXIgbWFrZXMgYSBkaWZmZXJlbmNlIGluIEhQLVVYIDguMDAuICov Ci0gICAgLyogVGhlIG90aGVyIG9yZGVyIG1ha2VzIGl0IHRoaW5rIGl0J3MgaW4gdGhlIGJhY2tn cm91bmQgd2hlbiBpdCAqLwotICAgIC8qIHJldHVybnMgZnJvbSBDT05ORUNUIChBcHIgMTk5OSku ICovCi0gICAgc2V0aW50KCk7Ci0gICAgY29uY2IoKGNoYXIpZXNjYXBlKTsgICAgICAgICAgICAg ICAgLyogUmVzdG9yZSBjb25zb2xlIGZvciBjb21tYW5kcyAqLwotI2Vsc2UKLSAgICAvKiBUaGlz IGlzIGhvdyBpdCBoYXMgYWx3YXlzIGJlZW4gc28gYmV0dGVyIGxlYXZlIGl0ICovCi0gICAgLyog dGhpcyB3YXkgZm9yIGFsbCBub24tSFAtVVgtOC4wMCBidWlsZHMuICovCi0gICAgY29uY2IoKGNo YXIpZXNjYXBlKTsgICAgICAgICAgICAgICAgLyogUmVzdG9yZSBjb25zb2xlIGZvciBjb21tYW5k cyAqLwotICAgIHNldGludCgpOwotI2VuZGlmIC8qIENLQ09OSU5UQjRDQiAqLwotI2lmZGVmIE9T MgotICAgIGlmICghYXN5bmMpCi0jZW5kaWYgLyogT1MyICovCi0gICAgICB3aGF0ID0gV19DT01N QU5EOyAgICAgICAgICAgICAgICAgLyogQmFjayBpbiBjb21tYW5kIG1vZGUuICovCi0gICAgcmV0 dXJuKHgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRG9uZS4gKi8KLX0KLSNlbmRpZiAv KiBOT0xPQ0FMICovCi0KLSNpZm5kZWYgTk9JQ1AKLSNpZmRlZiBDT01NRU5UCi0vKgotICBJdCBz ZWVtZWQgdGhhdCB0aGlzIHdhcyBuZWVkZWQgZm9yIE9TLzIsIGluIHdoaWNoIFx2KGNtZGZpbGUp IGFuZCBvdGhlcgotICBmaWxlLW9yaWVudGVkIHZhcmlhYmxlcyBvciBmdW5jdGlvbnMgY2FuIHJl dHVybiBmaWxlbmFtZXMgY29udGFpbmluZwotICBiYWNrc2xhc2hlcywgd2hpY2ggYXJlIHN1YnNl cXVlbnRseSBpbnRlcnByZXRlZCBhcyBxdW90ZXMgcmF0aGVyIHRoYW4KLSAgZGlyZWN0b3J5IHNl cGFyYXRvcnMgKGUuZy4gc2VlIGNvbW1lbnRlZCBzZWN0aW9uIGZvciBWTl9DTURGIGJlbG93KS4K LSAgQnV0IHRoZSBwcm9ibGVtIGNhbid0IGJlIGN1cmVkIGF0IHRoaXMgbGV2ZWwuICBFeGFtcGxl OgotCi0gICAgdHlwZSBcdihjbWRmaWxlKQotCi0gIFdpdGhvdXQgZG91YmxpbmcsIHRoZSBmaWxl bmFtZSBpcyBwYXJzZWQgY29ycmVjdGx5LCBidXQgdGhlbiB3aGVuIHBhc3NlZAotICB0byBVTklY ICdjYXQnIHRocm91Z2ggdGhlIHNoZWxsLCB0aGUgYmFja3NsYXNoIGlzIHJlbW92ZWQsIGFuZCB0 aGVuIGNhdAotICBjYW4ndCBvcGVuIHRoZSBmaWxlLiAgV2l0aCBkb3VibGluZywgdGhlIGZpbGVu YW1lIGlzIG5vdCBwYXJzZWQgY29ycmVjdGx5Ci0gIGFuZCB0aGUgVFlQRSBjb21tYW5kIGZhaWxz IGltbWVkaWF0ZWx5IHdpdGggYSAiZmlsZSBub3QgZm91bmQiIGVycm9yLgotKi8KLS8qCi0gIFV0 aWxpdHkgcm91dGluZSB0byBkb3VibGUgYWxsIGJhY2tzbGFzaGVzIGluIGEgc3RyaW5nLgotICBz MSBpcyBwb2ludGVyIHRvIHNvdXJjZSBzdHJpbmcsIHMyIGlzIHBvaW50ZXIgdG8gZGVzdGluYXRp b24gc3RyaW5nLAotICBuIGlzIGxlbmd0aCBvZiBkZXN0aW5hdGlvbiBzdHJpbmcsIGJvdGggTlVM LXRlcm1pbmF0ZWQuCi0gIFJldHVybnMgMCBpZiBPSywgLTEgaWYgbm90IE9LIChkZXN0aW5hdGlv biBzdHJpbmcgdG9vIHNob3J0KS4KLSovCi1pbnQKLWRibGJzKHMxLHMyLG4pIGNoYXIgKnMxLCAq czI7IGludCBuOyB7Ci0gICAgaW50IGkgPSAwOwotICAgIHdoaWxlICgqczEpIHsKLSAgICAgICAg aWYgKCpzMSA9PSAnXFwnKSB7Ci0gICAgICAgICAgICBpZiAoKytpID4gbikgcmV0dXJuKC0xKTsK LSAgICAgICAgICAgICpzMisrID0gJ1xcJzsKLSAgICAgICAgfQotICAgICAgICBpZiAoKytpID4g bikgcmV0dXJuKC0xKTsKLSAgICAgICAgKnMyKysgPSAqczErKzsKLSAgICB9Ci0gICAgKnMyID0g TlVMOwotICAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLWNoYXIgKgot Z21kbXR5cCgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCBtb2RlbSB0eXBl ICovCi0jaWZuZGVmIE5PRElBTAotICAgIGludCBpLCB4OwotCi0gICAgZGVidWcoRjExMSwiZ21k bXR5cCIsIm1kbXR5cCIsbWRtdHlwKTsKLSAgICBkZWJ1ZyhGMTExLCJnbWRtdHlwIiwibWRtc2F2 IixtZG1zYXYpOwotCi0gICAgeCA9IG1kbXR5cDsKLSAgICBpZiAoeCA8IDApICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBJbiBjYXNlIG9mIG5ldHdvcmsgZGlhbGluZyAqLwotICAgICAgeCA9 IG1kbXNhdjsKLSAgICBpZiAoeCA8IDEpCi0gICAgICByZXR1cm4oIm5vbmUiKTsKLSAgICBlbHNl Ci0gICAgICBmb3IgKGkgPSAwOyBpIDwgbm1kbTsgaSsrKQotICAgICAgICBpZiAoKG1kbXRhYltp XS5rd3ZhbCA9PSB4KSAmJiAobWRtdGFiW2ldLmZsZ3MgPT0gMCkpCi0gICAgICAgICAgcmV0dXJu KG1kbXRhYltpXS5rd2QpOwotI2VuZGlmIC8qIE5PRElBTCAqLwotICAgIHJldHVybigibm9uZSIp OwotfQotCi0jaWZuZGVmIE5PWE1JVAotI2lmbmRlZiBOT0xPQ0FMCi0vKiAgVCBSIEEgTiBTIE0g SSBUICAtLSAgUmF3IHVwbG9hZCAgKi8KLQotLyogIE9iZXkgY3VycmVudCBsaW5lLCBkdXBsZXgs IHBhcml0eSwgZmxvdywgdGV4dC9iaW5hcnkgc2V0dGluZ3MuICovCi0vKiAgUmV0dXJucyAwIHVw b24gYXBwYXJlbnQgc3VjY2VzcywgMSBvbiBvYnZpb3VzIGZhaWx1cmUuICAqLwotCi0vKioqCi0g VGhpbmdzIHRvIGFkZDoKLSAuIE1ha2UgYm90aCB0ZXh0IGFuZCBiaW5hcnkgbW9kZSBvYmV5IHNl dCBmaWxlIGJ5dGVzaXplLgotIC4gTWF5YmUgYWxsb3cgdXNlciB0byBzcGVjaWZ5IHRlcm1pbmF0 b3JzIG90aGVyIHRoYW4gQ1I/Ci0gLiBNYXliZSBhbGxvdyB1c2VyIHRvIHNwZWNpZnkgcHJvbXB0 cyBvdGhlciB0aGFuIHNpbmdsZSBjaGFyYWN0ZXJzPwotIC4gTWFrZSBTVEFUSVNUSUNTIGFsc28g d29yayBmb3IgVFJBTlNNSVQuCi0gLiBJZiBUUkFOU01JVCBpcyBkb25lIHdpdGhvdXQgZWNobywg bWFrZSBzb21lIGtpbmQgb2YgKG9wdGlvbmFsKSBkaXNwbGF5LgotIC4gTWFrZSB0aGUgc2FtZSBv cHRpbWl6YXRpb24gZm9yIGJpbmFyeS1tb2RlIHRyYW5zbWl0IHRoYXQgd2FzIGRvbmUgZm9yCi0g ICB0ZXh0LW1vZGUgKGluIHRoZSBuby1lY2hvIC8gbm8tcHJvbXB0IC8gbm8tcGF1c2UgY2FzZSku Ci0qKiovCi0KLS8qICBUIFIgQSBOIFMgTSBJIFQgIC0tICBSYXcgdXBsb2FkICAqLwotCi0vKiAg cyBpcyB0aGUgZmlsZW5hbWUsIHQgaXMgdGhlIHR1cm5hcm91bmQgKHByb21wdCkgY2hhcmFjdGVy ICAqLwotCi0vKgotICBNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGJ1ZmZlci4KLSAg TXVzdCBiZSBsZXNzIHRoYW4gTElOQlVGU0laCi0qLwotI2lmZGVmIE9TMgotI2RlZmluZSBYTUJV RlMgNDA5NiAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBjb21wYXRpYmlsaXR5IHdpdGggWFla bW9kZW0gKi8KLSNlbHNlIC8qIE9TMiAqLwotI2RlZmluZSBYTUJVRlMgMTAyNAotI2VuZGlmIC8q IE9TMiAqLwotCi0jaWZkZWYgVE5DT0RFCi0jaWZuZGVmIElBQwotI2RlZmluZSBJQUMgMjU1Ci0j ZW5kaWYgLyogSUFDICovCi0jZW5kaWYgLyogVE5DT0RFICovCi0KLSNkZWZpbmUgT1VUWEJVRlNJ WiAxNQotc3RhdGljIENIQVIgaW54YnVmW09VVFhCVUZTSVorMV07ICAgICAgIC8qIEhvc3QtdG8t c2NyZWVuIGV4cGFuc2lvbiBidWZmZXIgKi8KLXN0YXRpYyBpbnQgaW54Y291bnQgPSAwOyAgICAg ICAgICAgICAgICAvKiBhbmQgY291bnQgKi8KLXN0YXRpYyBDSEFSIG91dHhidWZbT1VUWEJVRlNJ WisxXTsgICAgICAvKiBLZXlib2FyZC10by1ob3N0IGV4cGFuc2lvbiBidWYgKi8KLXN0YXRpYyBp bnQgb3V0eGNvdW50ID0gMDsgICAgICAgICAgICAgICAvKiBhbmQgY291bnQgKi8KLQotLyogIFQg UiBBIE4gUyBNIEkgVCAgLS0gIFVuZ3VhcmRlZCBub24tcHJvdG9jb2wgZmlsZSB0cmFuc21pc3Np b24gICovCi0vKgotICBDYWxsIHdpdGg6Ci0gICAgY2hhciAqIHM6ICAgTmFtZSBvZiBmaWxlIHRv IHRyYW5zbWl0LgotICAgIGNoYXIgdDogICAgIFR1cm5hcm91bmQgY2hhciBmb3IgdGV4dC1tb2Rl IHRyYW5zbWlzc2lvbiAobm9ybWFsbHkgTEYpLgotICAgIGludCB4bGF0ZTogIG5vbnplcm8gPSBj aGFyc2V0IHRyYW5zbGF0aW9uIGZvciB0ZXh0LW1vZGUgeGZlciwgMCA9IHNraXAuCi0gICAgaW50 IGJpbmFyeTogbm9uemVybyA9IHRyYW5zbWl0IGluIGJpbmFyeSBtb2RlLCAwID0gaW4gdGV4dCBt b2RlLgotKi8KLSNkZWZpbmUgWEJCVUZTSVogNTA4CQkJLyogRm9yIGJpbmFyeSBibGFzdGluZyAq Lwotc3RhdGljIENIQVIgeGJidWZbWEJCVUZTSVorNF07Ci0KLWludAotI2lmZGVmIENLX0FOU0lD Ci10cmFuc21pdChjaGFyICogcywgY2hhciB0LCBpbnQgeGxhdGUsIGludCBiaW5hcnksIGludCB4 eGVjaG8pCi0jZWxzZQotdHJhbnNtaXQocyx0LHhsYXRlLGJpbmFyeSx4eGVjaG8pIGNoYXIgKnM7 IGNoYXIgdDsgaW50IHhsYXRlLCBiaW5hcnksIHh4ZWNobzsKLSNlbmRpZiAvKiBDS19BTlNJQyAq LwotLyogdHJhbnNtaXQgKi8gewotI2lmZGVmIE1BQwotICAgIGV4dGVybiBjaGFyIHNzdGF0ZTsK LSAgICBpbnQgY291bnQgPSAxMDA7Ci0jZWxzZQotICAgIGludCBjb3VudCA9IDA7Ci0jaWZkZWYg T1MyCi0jaWZkZWYgTlQKLSAgICBTSUdUWVAgKCogb2xkc2lnKShpbnQpOyAgICAgICAgICAgICAv KiBGb3Igc2F2aW5nIG9sZCBpbnRlcnJ1cHQgdHJhcC4gKi8KLSNlbHNlIC8qIE5UICovCi0gICAg U0lHVFlQICgqIHZvbGF0aWxlIG9sZHNpZykoaW50KTsKLSNlbmRpZiAvKiBOVCAqLwotCi0jZWxz ZSAvKiBPUzIgKi8KLSAgICBTSUdUWVAgKCogb2xkc2lnKSgpOwotI2VuZGlmIC8qIE9TMiAqLwot I2VuZGlmIC8qIE1BQyAqLwotICAgIGludCBlb2YgPSAwOyAgICAgICAgICAgICAgICAgICAgICAg IC8qIEVuZCBvZiBGaWxlIGZsYWcgKi8KLSAgICBpbnQgZW9sID0gMDsgICAgICAgICAgICAgICAg ICAgICAgICAvKiBFbmQgb2YgTGluZSBmbGFnICovCi0gICAgaW50IHJjID0gMTsgICAgICAgICAg ICAgICAgICAgICAgICAgLyogUmV0dXJuIGNvZGUuIDA9ZmFpbCwgMT1zdWNjZWVkLiAqLwotICAg IGludCBteWZsb3c7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExvY2FsIGNvcHkgb2YgZ2xv YmFsIGZsb3cuLi4gKi8KLSAgICBpbnQgaXNfdG4gPSAwOyAgICAgICAgICAgICAgICAgICAgICAv KiBEbyBUZWxuZXQgbmVnb3RpYXRpb25zICovCi0gICAgaW50IHhidWZzaXogPSBYTUJVRlM7ICAg ICAgICAgICAgICAgLyogU2l6ZSBvZiBUUkFOU01JVCBidWZmZXIgKi8KLSAgICBpbnQgeCwgeSwg YywgaTsgICAgICAgICAgICAgICAgICAgICAvKiBJbnQgd29ya2Vycy4uLiAqLwotICAgIGludCBj b250cm9sID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIEVjaG8gbG9vcCBjb250cm9sICovCi0g ICAgbG9uZyBuYnl0ZXMgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBieXRlIGNvdW50 ICovCi0gICAgbG9uZyB6ejsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9uZyB3b3Jr ZXIgKi8KLSAgICBjaGFyICpwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFyICog d29ya2VyICovCi0KLSNpZmRlZiBQSVBFU0VORAotICAgIGV4dGVybiBpbnQgcGlwZXNlbmQ7Ci0j ZW5kaWYgLyogUElQRVNFTkQgKi8KLQotI2lmbmRlZiBOT0NTRVRTCi0gICAgaW50IHRjcyA9IFRD X1RSQU5TUDsgICAgICAgICAgICAgICAgLyogSW50ZXJtZWRpYXRlICh4ZmVyKSBjaGFyIHNldCAq LwotICAgIGludCBsYW5nc3YgPSBMX1VTQVNDSUk7ICAgICAgICAgICAgIC8qIFNhdmUgY3VycmVu dCBsYW5ndWFnZSAqLwotICAgIGludCB1bmljb2RlID0gMDsKLSAgICBpbnQgdGNzc2l6ZSA9IDA7 Ci0KLSNpZmRlZiBDS19BTlNJQyAvKiBBTlNJIEMgcHJvdG90eXBlcy4uLiAqLwotICAgIENIQVIg KCpzeG8pKENIQVIpOwotICAgIENIQVIgKCpyeG8pKENIQVIpOwotICAgIENIQVIgKCpzeGkpKENI QVIpOwotICAgIENIQVIgKCpyeGkpKENIQVIpOwotI2Vsc2UgLyogTm90IEFOU0kgQy4uLiAqLwot ICAgIENIQVIgKCpzeG8pKCk7Ci0gICAgQ0hBUiAoKnJ4bykoKTsKLSAgICBDSEFSICgqc3hpKSgp OwotICAgIENIQVIgKCpyeGkpKCk7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSNpZmRlZiBVTklD T0RFCi0gICAgdW5pb24gY2tfc2hvcnQgdWM7Ci0gICAgaW50IGJvbW9yZGVyID0gMDsKLSNpZmRl ZiBDS19BTlNJQwotICAgIGV4dGVybiBpbnQgKCp4bF91ZmNbTUFYRkNTRVRTKzFdKShVU0hPUlQp OyAgLyogVW5pY29kZSB0byBGQ1MgKi8KLSAgICBleHRlcm4gVVNIT1JUICgqeGxfZmN1W01BWEZD U0VUUysxXSkoQ0hBUik7IC8qIEZDUyB0byBVbmljb2RlICovCi0gICAgZXh0ZXJuIGludCAoKnh1 ZikoVVNIT1JUKTsKLSAgICBleHRlcm4gVVNIT1JUICgqeGZ1KShDSEFSKTsKLSNlbHNlCi0gICAg ZXh0ZXJuIGludCAoKnhsX3VmY1tNQVhGQ1NFVFMrMV0pKCk7Ci0gICAgZXh0ZXJuIFVTSE9SVCAo KnhsX2ZjdVtNQVhGQ1NFVFMrMV0pKCk7Ci0gICAgZXh0ZXJuIGludCAoKnh1ZikoKTsKLSAgICBl eHRlcm4gVVNIT1JUICgqeGZ1KSgpOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0jZW5kaWYgLyog VU5JQ09ERSAqLwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQotICAgIGRlYnVnKEYxMDEsInhtaXQg dCIsIiIsdCk7Ci0gICAgZGVidWcoRjEwMSwieG1pdCB4bGF0ZSIsIiIseGxhdGUpOwotICAgIGRl YnVnKEYxMDEsInhtaXQgYmluYXJ5IiwiIixiaW5hcnkpOwotCi0jaWZkZWYgUElQRVNFTkQKLSAg ICBpZiAocGlwZXNlbmQpIHsKLSAgICAgICAgaWYgKG5vcHVzaCkgcmV0dXJuKC0yKTsKLSAgICAg ICAgaWYgKHp4Y21kKFpJRklMRSxzKSA8IDEpIHsKLSAgICAgICAgICAgIHByaW50ZigiP0Nhbid0 IHN0YXJ0IGNvbW1hbmQ6ICVzXG4iLHMpOwotICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAg ICB9Ci0gICAgfSBlbHNlCi0jZW5kaWYgLyogUElQRVNFTkQgKi8KLSAgICBpZiAoem9wZW5pKFpJ RklMRSxzKSA9PSAwKSB7ICAgICAgICAvKiBPcGVuIHRoZSBmaWxlIHRvIGJlIHRyYW5zbWl0dGVk ICovCi0gICAgICAgIHByaW50ZigiP0Nhbid0IG9wZW4gZmlsZSAlc1xuIixzKTsKLSAgICAgICAg cmV0dXJuKDApOwotICAgIH0KLSAgICB4ID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBPcGVuIHRoZSBjb21tdW5pY2F0aW9uIGNoYW5uZWwgKi8KLSAgICBpZiAodHRvcGVuKHR0 bmFtZSwmeCxtZG10eXAsY2R0aW1vKSA8IDApIHsgIC8qIChubyBoYXJtIGlmIGFscmVhZHkgb3Bl bikgKi8KLSAgICAgICAgcHJpbnRmKCJDYW4ndCBvcGVuIGRldmljZSAlc1xuIix0dG5hbWUpOwot ICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotICAgIHp6ID0geCA/IHNwZWVkIDogLTFMOwotICAg IGlmIChiaW5hcnkpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIEJpbmFyeSBmaWxlIHRyYW5z bWlzc2lvbiAqLwotICAgICAgICBteWZsb3cgPSAoZmxvdyA9PSBGTE9fWE9OWCkgPyBGTE9fTk9O RSA6IGZsb3c7Ci0KLSAgICAgICAgaWYgKHR0dnQoenosbXlmbG93KSA8IDApIHsgICAgICAvKiBT byBubyBYb24vWG9mZiEgKi8KLSAgICAgICAgICAgIHByaW50ZigiQ2FuJ3QgY29uZGl0aW9uIGxp bmVcbiIpOwotICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsK LSAgICAgICAgaWYgKHR0cGt0KHp6LGZsb3cscGFyaXR5KSA8IDApIHsgLyogUHV0IHRoZSBsaW5l IGluICJwYWNrZXQgbW9kZSIgKi8KLSAgICAgICAgICAgIHByaW50ZigiQ2FuJ3QgY29uZGl0aW9u IGxpbmVcbiIpOyAvKiBzbyBYb24vWG9mZiB3aWxsIHdvcmssIGV0Yy4gKi8KLSAgICAgICAgICAg IHJldHVybigwKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpc190biA9Ci0jaWZkZWYgVE5DT0RF Ci0gICAgICAobG9jYWwgJiYgbmV0d29yayAmJiBJU19URUxORVQoKSkgfHwgKCFsb2NhbCAmJiBz c3RlbG5ldCkKLSNlbHNlCi0gICAgICAgIDAKLSNlbmRpZiAvKiBUTkNPREUgKi8KLSAgICAgICAg ICA7Ci0KLSNpZm5kZWYgTk9DU0VUUwotLyogU2V0IHVwIGNoYXJhY3RlciBzZXQgdHJhbnNsYXRp b25zICovCi0KLSAgICB0Y3MgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAiVHJh bnNmZXIiIG9yICJPdGhlciIgY2hhcnNldCAqLwotICAgIHN4byA9IHJ4byA9IE5VTEw7ICAgICAg ICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgYnl0ZS10by1ieXRlIGZ1bmN0aW9ucyAqLwotICAg IHN4aSA9IHJ4aSA9IE5VTEw7Ci0gICAgdW5pY29kZSA9IDA7ICAgICAgICAgICAgICAgICAgICAg ICAgLyogQXNzdW1lIFVuaWNvZGUgd29uJ3QgYmUgaW52b2x2ZWQgKi8KLSAgICBpZiAoIWJpbmFy eSAmJiB4bGF0ZSkgeyAgICAgICAgICAgICAvKiBTZXQgdXAgY2hhcnNldCB0cmFuc2xhdGlvbnMg Ki8KLS8qCi0gIEluIHRoZSBTRU5ESU5HIGRpcmVjdGlvbiwgd2UgYXJlIGNvbnZlcnRpbmcgZnJv bSB0aGUgbG9jYWwgZmlsZSdzCi0gIGNoYXJhY3Rlci1zZXQgKGZjaGFyc2V0KSB0byB0aGUgcmVt b3RlIHRlcm1pbmFsIGNoYXJzZXQgKHRjc3IpLiAgSW4gdGhlCi0gIFJFQ0VJVklORyBkaXJlY3Rp b24gKGVjaG9pbmcpIHdlIGFyZSBjb252ZXJ0aW5nIGZyb20gdGhlIHJlbW90ZSBlbmQgb2YgdGhl Ci0gIHRlcm1pbmFsIGNoYXJzZXQgKHRjc3IpIHRvIGl0cyBsb2NhbCBlbmQgKHRjc2wpLCB3aGlj aCBpcyBub3QgbmVjZXNzYXJpbHkKLSAgdGhlIHNhbWUgYXMgdGhlIGZpbGUgY2hhcmFjdGVyLXNl dC4gIEVzcGVjaWFsbHkgd2hlbiB0aGUgZmlsZSBjaGFyYWN0ZXIKLSAgc2V0IGlzIFVDUy0yLCB3 aGljaCBpcyBub3QgYSB2YWxpZCB0ZXJtaW5hbCBjaGFyYWN0ZXIgc2V0LiAgVGhlIHZhcmlvdXMK LSAgY29tYmluYXRpb25zIGFyZSByZXByZXNlbnRlZCBpbiB0aGlzIHRhYmxlOgotCi0gIEZDUyA9 IEZpbGUgQ2hhcmFjdGVyIFNldAotICBSQ1MgPSBSZW1vdGUgVGVybWluYWwgQ2hhcmFjdGVyIFNl dAotICBDQ1MgPSBDb25zb2xlIChMb2NhbCBUZXJtaW5hbCkgQ2hhcmFjdGVyIFNldAotCi0gICA4 ICAgNCAgIDIgICAxCi0gIEZDUyBGQ1MgUkNTIENDUwotICBVQ1MgVVRGIFVURiBVVEYKLSAgIDAg ICAwICAgMCAgIDAgICA9ICAgMCAgID0gICBObyB0cmFuc2xhdGlvbgotICAgMCAgIDAgICAwICAg MSAgID0gICAxICAgPSAgIEZDUyAtPiBSQ1MsIEVjaG8gUkNTIC0+IFVURgotICAgMCAgIDAgICAx ICAgMCAgID0gICAyICAgPSAgIEZDUyAtPiBVVEYsIEVjaG8gVVRGIC0+IENDUwotICAgMCAgIDAg ICAxICAgMSAgID0gICAzICAgPSAgIEZDUyAtPiBVVEYsIEVjaG8gbm8gdHJhbnNsYXRpb24KLQot ICAgMCAgIDEgICAwICAgMCAgID0gICA0ICAgPSAgIFVURiAtPiBSQ1MsIEVjaG8gUkNTIC0+IEND UwotICAgMCAgIDEgICAwICAgMSAgID0gICA1ICAgPSAgIFVURiAtPiBSQ1MsIEVjaG8gUkNTIC0+ IFVURgotICAgMCAgIDEgICAxICAgMCAgID0gICA2ICAgPSAgIFVURiAtPiBVVEYsIEVjaG8gVVRG IC0+IENDUwotICAgMCAgIDEgICAxICAgMSAgID0gICA3ICAgPSAgIE5vIHRyYW5zbGF0aW9uCi0K LSAgIDEgICAwICAgMCAgIDAgICA9ICAgOCAgID0gICBVQ1MgLT4gUkNTLCBFY2hvIFJDUyAtPiBD Q1MKLSAgIDEgICAwICAgMCAgIDEgICA9ICAgOSAgID0gICBVQ1MgLT4gUkNTLCBFY2hvIFJDUyAt PiBVVEYKLSAgIDEgICAwICAgMSAgIDAgICA9ICAxMCAgID0gICBVQ1MgLT4gVVRGLCBFY2hvIFVU RiAtPiBDQ1MKLSAgIDEgICAwICAgMSAgIDEgICA9ICAxMSAgID0gICBVQ1MgLT4gVVRGLCBFY2hv IG5vIHRyYW5zbGF0aW9uCi0qLwotI2lmZGVmIFVOSUNPREUKLSAgICAgICAgeGZ1ID0gTlVMTDsg ICAgICAgICAgICAgICAgICAgICAvKiBVbmljb2RlIHRyYW5zbGF0aW9uIGZ1bmN0aW9ucyAqLwot ICAgICAgICB4dWYgPSBOVUxMOwotICAgICAgICBib21vcmRlciA9IHVjc29yZGVyOyAgICAgICAg ICAgIC8qIFVDUy0yIGJ5dGUgb3JkZXIgKi8KLQotICAgICAgICBpZiAoZmNoYXJzZXQgPT0gRkNf VUNTMikgICAgICAgIC8qIEZpbGUgY2hhcnNldCBpcyBVQ1MtMiAqLwotICAgICAgICAgIHVuaWNv ZGUgfD0gODsKLSAgICAgICAgZWxzZSBpZiAoZmNoYXJzZXQgPT0gRkNfVVRGOCkgICAvKiBGaWxl IGNoYXJzZXQgaXMgVVRGLTggKi8KLSAgICAgICAgICB1bmljb2RlIHw9IDQ7Ci0gICAgICAgIGlm ICh0Y3NyID09IEZDX1VURjgpICAgICAgICAgICAgLyogUmVtb3RlIHRlcm0gY2hhcnNldCBpcyBV VEYtOCAqLwotICAgICAgICAgIHVuaWNvZGUgfD0gMjsKLSAgICAgICAgaWYgKHRjc2wgPT0gRkNf VVRGOCkgICAgICAgICAgICAvKiBMb2NhbCB0ZXJtIGNoYXJzZXQgaXMgVVRGLTggKi8KLSAgICAg ICAgICB1bmljb2RlIHw9IDE7Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotLyoKLSAgV2hlbiBVbmlj b2RlIG5vdCBpbnZvbHZlZCAtLSBUQ1MgaXMgdGhlIGludGVybWVkaWF0ZSAoeGZlcikgc2V0LCBh bmQ6Ci0gIHN4byA9IEZpbGUtdG8tSW50ZXJtZWRpYXRlIGNoYXJzZXQgZnVuY3Rpb24KLSAgcnhv ID0gSW50ZXJtZWRpYXRlLXRvLVJlbW90ZS1UZXJtaW5hbCBjaGFyc2V0IGZ1bmN0aW9uCi0gIHN4 aSA9IFJlbW90ZS1UZXJtaW5hbC10by1JbnRlcm1lZGlhdGUKLSAgcnhpID0gSW50ZXJtZWRpYXRl LXRvLUxvY2FsLVRlcm1pbmFsCi0qLwotICAgICAgICB0Y3MgPSBnZXR0Y3ModGNzcixmY2hhcnNl dCk7ICAgIC8qIEdldCBpbnRlcm1lZGlhdGUgc2V0LiAqLwotICAgICAgICBzeG8gPSB4bHNbdGNz XVtmY2hhcnNldF07ICAgICAgIC8qIHRyYW5zbGF0aW9uIGZ1bmN0aW9uICovCi0gICAgICAgIHJ4 byA9IHhsclt0Y3NdW3Rjc3JdOyAgICAgICAgICAgLyogcG9pbnRlcnMgZm9yIG91dHB1dCBmdW5j dGlvbnMgKi8KLSAgICAgICAgc3hpID0geGxzW3Rjc11bdGNzcl07ICAgICAgICAgICAvKiBhbmQg Zm9yIGlucHV0IGZ1bmN0aW9ucy4gKi8KLSAgICAgICAgcnhpID0geGxyW3Rjc11bdGNzbF07Ci0v KgotICBBdCB0aGlzIHBvaW50IHdlIGhhdmUgdW5pY29kZSBub256ZXJvIGlmIFVuaWNvZGUgaXMg aW52b2x2ZWQgaW4gdGhlCi0gIGNvbnZlcnNpb24sIGFuZCB0byAwIGlmIGl0IGlzIG5vdC4KLSAg VGhlIGZvbGxvd2luZyBpcyB0byBwcmV2ZW50IHVzZSBvZiB6bXN0dWZmKCkgYW5kIHpkc3R1ZmYo KSBieSB0cmFuc2xhdGlvbgotICBmdW5jdGlvbnMgKHN0dWZmaW5nIHdvcmtzIHdpdGggZmlsZSBp L28sIG5vdCB3aXRoIGNvbW11bmljYXRpb24gaS9vKS4KLSovCi0gICAgICAgIGxhbmdzdiA9IGxh bmd1YWdlOyAgICAgICAgICAgICAgLyogU2F2ZSBjdXJyZW50IFNFVCBMQU5HVUFHRSAqLwotICAg ICAgICBsYW5ndWFnZSA9IExfVVNBU0NJSTsgICAgICAgICAgIC8qIE5vIGxhbmd1YWdlLXNwZWNp ZmljIHRyYW5zbGF0aW9ucyAqLwotICAgIH0KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSAgICBp ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCZWdpbm5pbmcgb2YgYnVmZmVy LiAqLwotI2lmbmRlZiBNQUMKLSNpZm5kZWYgQU1JR0EKLSAgICBvbGRzaWcgPSBzaWduYWwoU0lH SU5ULCB0cnRyYXApOyAgICAvKiBTYXZlIGN1cnJlbnQgaW50ZXJydXB0IHRyYXAuICovCi0jZW5k aWYgLyogQU1JR0EgKi8KLSNlbmRpZiAvKiBNQUMgKi8KLSAgICB0cl9pbnQgPSAwOyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBIYXZlIG5vdCBiZWVuIGludGVycnVwdGVkICh5ZXQpLiAqLwot ICAgIHJjID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBjb2RlIHBy ZXN1bWVkIGdvb2QuICovCi0jaWZkZWYgVk1TCi0gICAgY29ucmVzKCk7Ci0jZW5kaWYgLyogVk1T ICovCi0KLSNpZm5kZWYgTk9DU0VUUwotICAgIGRlYnVnKEYxMDEsIlhNSVQgdW5pY29kZSIsIiIs dW5pY29kZSk7Ci0jaWZkZWYgVU5JQ09ERQotICAgIGRlYnVnKEYxMDEsIlhNSVQgYm9tb3JkZXIi LCIiLGJvbW9yZGVyKTsKLSNlbmRpZiAvKiBVTklDT0RFICovCi0jZW5kaWYgLyogTk9DU0VUUyAq LwotCi0gICAgYyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbCBj b25kaXRpb24gKi8KLSAgICB3aGlsZSAoYyA+IC0xICYmICFlb2YpIHsgICAgICAgICAgICAvKiBM b29wIGZvciBhbGwgY2hhcmFjdGVycyBpbiBmaWxlICovCi0gICAgICAgIGVvbCA9IDA7Ci0jaWZk ZWYgTUFDCi0gICAgICAgIC8qCi0gICAgICAgICAqIEl0IGlzIGV4cGVuc2l2ZSB0byBydW4gdGhl IG1pbmlwYXJzZXIgc28gZG9uJ3QgZG8gaXQgZm9yCi0gICAgICAgICAqIGV2ZXJ5IGNoYXJhY3Rl ci4KLSAgICAgICAgICovCi0gICAgICAgIGlmICgtLWNvdW50IDwgMCkgewotICAgICAgICAgICAg Y291bnQgPSAxMDA7Ci0gICAgICAgICAgICBtaW5pcGFyc2VyKDEpOwotICAgICAgICAgICAgaWYg KHNzdGF0ZSA9PSAnYScpIHsKLSAgICAgICAgICAgICAgICBzc3RhdGUgPSAnXDAnOwotICAgICAg ICAgICAgICAgIGdvdG8geG1pdGZhaWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbHNl IC8qIE5vdCBNQUMgKi8KLSAgICAgICAgaWYgKHRyX2ludCkgeyAgICAgICAgICAgICAgICAgICAv KiBJbnRlcnJ1cHRlZD8gKi8KLSAgICAgICAgICAgIHByaW50ZigiXkMuLi5cbiIpOyAgICAgICAg ICAvKiBQcmludCBtZXNzYWdlICovCi0gICAgICAgICAgICBnb3RvIHhtaXRmYWlsOwotICAgICAg ICB9Ci0jZW5kaWYgLyogTUFDICovCi0gICAgICAgIGMgPSB6bWluY2hhcigpOyAgICAgICAgICAg ICAgICAgLyogR2V0IGEgZmlsZSBjaGFyYWN0ZXIgKi8KLSNpZmRlZiBDT01NRU5UCi0vKiB0b28g bXVjaCAqLwotI2lmZGVmIERFQlVHCi0gICAgICAgIGlmIChkZWJsb2cpIHsKLSAgICAgICAgICAg IGlmIChjIDwgMCkKLSAgICAgICAgICAgICAgZGVidWcoRjEwMSwiWE1JVCB6bWluY2hhciIsIiIs Yyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIGRlYnVnKEYwMDAsIlhNSVQgem1p bmNoYXIiLCIiLGMpOwotICAgICAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNlbmRpZiAvKiBD T01NRU5UICovCi0gICAgICAgIGlmIChjIDwgLTEpIHsgICAgICAgICAgICAgICAgICAgLyogT3Ro ZXIgZXJyb3IgKi8KLSAgICAgICAgICAgIHByaW50ZigiP1RSQU5TTUlUIGZpbGUgcmVhZCBlcnJv cjogJXNcbiIsY2tfZXJyc3RyKCkpOwotICAgICAgICAgICAgZ290byB4bWl0ZmFpbDsKLSAgICAg ICAgfSBlbHNlIGlmIChjID4gLTEpIHsKLSAgICAgICAgICAgIG5ieXRlcysrOwotICAgICAgICAg ICAgYyAmPSBmbWFzazsgICAgICAgICAgICAgICAgIC8qIEFwcGx5IFNFVCBGSUxFIEJZVEVTSVpF IG1hc2sgKi8KLSAgICAgICAgfSBlbHNlIGlmIChjID09IC0xKSB7Ci0gICAgICAgICAgICBlb2Yg PSAxOwotICAgICAgICAgICAgZGVidWcoRjEwMSwiWE1JVCBlb2YiLCIiLGVvZik7Ci0gICAgICAg IH0KLSAgICAgICAgaWYgKGJpbmFyeSkgeyAgICAgICAgICAgICAgICAgICAvKiBCaW5hcnkuLi4g Ki8KLSAgICAgICAgICAgIGlmIChjID09IC0xKSB7ICAgICAgICAgICAgICAvKiBJZiBFT0YgKi8K LSAgICAgICAgICAgICAgICByYyA9IDE7ICAgICAgICAgICAgICAgICAvKiBTdWNjZXNzICovCi0g ICAgICAgICAgICAgICAgZW9mID0gMTsKLSAgICAgICAgICAgICAgICBnb3RvIHhtaXRleGl0OyAg ICAgICAgICAvKiBEb25lICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXhtaXR3 ICYmICF4eGVjaG8pIHsgICAgLyogU3BlY2lhbCAiYmxhc3QiIG1vZGUgKi8KLSAgICAgICAgICAg ICAgICBpZiAoY291bnQgPT0gWEJCVUZTSVopIHsgLyogRmlsZSBpbnB1dCBidWZmZXIgZnVsbC4u LiAqLwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY291bnQgPiAwKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBlcnJubyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB5ID0gdHRv bCh4YmJ1Zixjb3VudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeSA8IDApIHsgICAg LyogdHJ5IHRvIHNlbmQgaXQuICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRm KCI/VFJBTlNNSVQgb3V0cHV0IGVycm9yOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2tfZXJyc3RyKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl YnVnKEYxMTEsIlhNSVQgYmluYXJ5IHR0b2wgZXJyb3IiLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNrX2VycnN0cigpLGVycm5vKTsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICByYyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeSA8IDApIGJy ZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgLT0geTsKLSAgICAgICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjb3VudCA9IDA7Ci0gICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgIHhiYnVmW2NvdW50KytdID0gYzsKLSNpZmRlZiBUTkNPREUKLSAg ICAgICAgICAgICAgICBpZiAoYyA9PSBJQUMgJiYgaXNfdG4pICAvKiBUZWxuZXQgSUFDICovCi0g ICAgICAgICAgICAgICAgICB4YmJ1Zltjb3VudCsrXSA9IElBQzsgLyogbXVzdCBiZSBkb3VibGVk ICovCi0jZW5kaWYgLyogVE5DT0RFICovCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodHRvYyhkb3BhcigoY2hhcikgYykpIDwgMCkgeyAv KiBlbHNlIGp1c3Qgc2VuZCB0aGUgY2hhciAqLwotICAgICAgICAgICAgICAgIHByaW50ZigiP0Nh bid0IHRyYW5zbWl0IGNoYXJhY3RlclxuIik7Ci0gICAgICAgICAgICAgICAgZ290byB4bWl0ZmFp bDsKLSAgICAgICAgICAgIH0KLSNpZmRlZiBUTkNPREUKLSAgICAgICAgICAgIGlmIChjID09IElB QyAmJiBpc190bikgICAgICAvKiBRdW90ZSBUZWxuZXQgSUFDICovCi0gICAgICAgICAgICAgIHR0 b2MoKGNoYXIpSUFDKTsKLSNlbmRpZiAvKiBUTkNPREUgKi8KLQotICAgICAgICAgICAgaWYgKHht aXR3KSAgICAgICAgICAgICAgICAgIC8qIFBhdXNlIGlmIHJlcXVlc3RlZCAqLwotICAgICAgICAg ICAgICBtc2xlZXAoeG1pdHcpOwotCi0gICAgICAgICAgICBpZiAoeHhlY2hvKSB7ICAgICAgICAg ICAgICAgLyogU0VUIFRSQU5TTUlUIEVDSE8gT04/ICovCi0gICAgICAgICAgICAgICAgaWYgKGR1 cGxleCkgeyAgICAgICAgICAgLyogWWVzLCBmb3IgaGFsZiBkdXBsZXggKi8KLSNpZm5kZWYgTk9M T0NBTAotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICAgICAvKiBFY2hvIHRvIGVtdWxhdG9y ICovCi0gICAgICAgICAgICAgICAgICAgIHNjcmlwdHdydGJ1ZigoVVNIT1JUKShjICYgY21kbXNr KSk7Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotICAgICAgICAgICAg ICAgICAgICBpZiAoY29ub2MoKGNoYXIpKGMgJiBjbWRtc2spKSA8IDApIC8qIGVjaG8gbG9jYWxs eS4gKi8KLSAgICAgICAgICAgICAgICAgICAgICBnb3RvIHhtaXRmYWlsOwotICAgICAgICAgICAg ICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgIC8qIEZvciBmdWxsIGR1cGxleCwgKi8KLSAgICAg ICAgICAgICAgICAgICAgaW50IGksIG47ICAgICAgICAgICAvKiBkaXNwbGF5IHdoYXRldmVyIGlz IHRoZXJlLiAqLwotICAgICAgICAgICAgICAgICAgICBuID0gdHRjaGsoKTsgICAgICAgIC8qIFNl ZSBob3cgbWFueSBjaGFycyBhcmUgd2FpdGluZyAqLwotICAgICAgICAgICAgICAgICAgICBpZiAo biA8IDApIHsgICAgICAgIC8qIENvbm5lY3Rpb24gZHJvcHBlZD8gKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgIHByaW50ZigiP0Nvbm5lY3Rpb24gbG9zdFxuIik7Ci0gICAgICAgICAgICAgICAg ICAgICAgICBnb3RvIHhtaXRmYWlsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsgLyogUmVhZCBhbmQgZWNobyB0aGF0 IG1hbnkuICovCi0gICAgICAgICAgICAgICAgICAgICAgICB4ID0gdHRpbmMoeG1pdHQpOyAvKiBU aW1lZCByZWFkIGp1c3QgaW4gY2FzZS4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4 ID4gLTEpIHsgICAvKiBJZiBubyB0aW1lb3V0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKHBhcml0eSkgeCAmPSAweDdmOyAvKiBkaXNwbGF5IHRoZSBjaGFyLCAqLwotI2lmbmRl ZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRWNo byB0byBlbXVsYXRvciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdHdydGJ1 ZigoVVNIT1JUKXgpOwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29ub2MoKGNoYXIpKHggJiBjbWRtc2spKSA8 IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/T3V0cHV0IGVy cm9yXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byB4bWl0ZmFpbDsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9 IGVsc2UgaWYgKHggPT0gLTIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYo IkNvbm5lY3Rpb24gY2xvc2VkLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRj bG9zKDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8geG1pdGZhaWw7Ci0gICAg ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHggPT0gLTMpIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwcmludGYoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlc3Np b24gTGltaXQgZXhjZWVkZWQgLSBjbG9zaW5nIGNvbm5lY3Rpb24uXG4iCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRj bG9zKDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8geG1pdGZhaWw7Ci0gICAg ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg IHByaW50ZigiP0NvbW11bmljYXRpb25zIGVycm9yXG4iKTsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBnb3RvIHhtaXRmYWlsOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHR0 Zmx1aSgpOyAgICAgICAgICAgIC8qIE5vdCBlY2hvaW5nLCBqdXN0IGZsdXNoIGlucHV0LiAqLwot Ci0gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogVGV4dCBtb2RlLCBs aW5lIGF0IGEgdGltZS4gKi8KLSNpZmRlZiBVTklDT0RFCi0gICAgICAgICAgICBpZiAoZmNoYXJz ZXQgPT0gRkNfVUNTMiAmJiB4bGF0ZSkgeyAvKiBTcGVjaWFsIGZvciBVQ1MtMiAqLwotICAgICAg ICAgICAgICAgIGNoYXIgeGJ1Zls4XTsKLSAgICAgICAgICAgICAgICB4ID0gMSAtIChuYnl0ZXMg JiAxKTsgICAvKiBPZGQgb3IgZXZlbiBieXRlICovCi0gICAgICAgICAgICAgICAgaWYgKHggPT0g MCkgICAgICAgICAgICAgLyogTm90ZTogMSA9IHRoZSAxc3QsIDAgPSAybmQsIGV0YyAqLwotICAg ICAgICAgICAgICAgICAgdWMueF9zaG9ydCA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKGJvbW9y ZGVyKSAgICAgICAgICAgLyogTGl0dGxlIEVuZGlhbiAqLwotICAgICAgICAgICAgICAgICAgeCA9 IDEgLSB4OyAgICAgICAgICAgIC8qIFNhdmUgYnl0ZSBpbiBhcHByb3ByaWF0ZSBoYWxmICovCi0g ICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiWE1JVCBVQ1MyIHgiLCIiLHgpOwotICAgICAgICAg ICAgICAgIHVjLnhfY2hhclt4XSA9IChDSEFSKSAoYyAmIDB4ZmYpOwotICAgICAgICAgICAgICAg IGlmIChuYnl0ZXMgJiAxKSAgICAgICAgIC8qIEZpcnN0IGJ5dGUsIGdvIGJhY2sgZm9yIG5leHQg Ki8KLSAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmIChuYnl0 ZXMgPT0gMikgeyAgICAgIC8qIFVDUy0yIEJ5dGUgT3JkZXIgTWFyayAqLwotICAgICAgICAgICAg ICAgICAgICBpZiAodWMueF9zaG9ydCA9PSAoVVNIT1JUKSAweGZlZmYpIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGRlYnVnKEYxMDAsIlhNSVQgVUNTMiBCT00gRkVGRiIsIiIsYm9tb3JkZXIp OwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAg IH0gZWxzZSBpZiAodWMueF9zaG9ydCA9PSAoVVNIT1JUKSAweGZmZmUpIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGJvbW9yZGVyID0gMSAtIGJvbW9yZGVyOwotICAgICAgICAgICAgICAgICAg ICAgICAgZGVidWcoRjEwMCwiWE1JVCBVQ1MyIEJPTSBGRkZFIChzd2FwKSIsIiIsYm9tb3JkZXIp OwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3ByaW50Zih4YnVmLCIlMDRY Iix1Yy54X3Nob3J0KTsgLyogU0FGRSAqLwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsIlhN SVQgVUNTMiIseGJ1Zix1Yy54X3Nob3J0KTsKLSAgICAgICAgICAgICAgICBpZiAobmJ5dGVzICYg MSkgICAgICAgICAvKiBTcGVjaWFsIGVvbCB0ZXN0IGZvciBVQ1MtMiAqLwotICAgICAgICAgICAg ICAgICAgaWYgKHVjLnhfc2hvcnQgPT0gJ1xuJykKLSAgICAgICAgICAgICAgICAgICAgZW9sID0g MTsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICAgICAgaWYgKHVjLnhfc2hvcnQgPT0gMHgy MDI4IHx8IHVjLnhfc2hvcnQgPT0gMHgyMDI5KQotICAgICAgICAgICAgICAgICAgICBlb2wgPSAx OwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIFVO SUNPREUgKi8KLSAgICAgICAgICAgICAgaWYgKGMgPT0gJ1xuJykgeyAgICAgICAgICAvKiBOb3Jt YWwgZW9sIHRlc3Qgb3RoZXJ3aXNlICovCi0gICAgICAgICAgICAgICAgICBlb2wgPSAxOwotICAg ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGVvbCkgeyAgICAgICAgICAgICAgICAgIC8qIEVu ZCBvZiBsaW5lPyAqLwotICAgICAgICAgICAgICAgIGludCBzdHVmZiA9IC0xOwotICAgICAgICAg ICAgICAgIGRlYnVnKEYxMDEsIlhNSVQgZW9sIGxlbmd0aCIsIiIsaSk7Ci0gICAgICAgICAgICAg ICAgaWYgKGkgPT0gMCkgeyAgICAgICAgICAgLyogQmxhbmsgbGluZT8gKi8KLSAgICAgICAgICAg ICAgICAgICAgaWYgKHhtaXRmKSAgICAgICAgICAvKiBZZXMsIGluc2VydCBmaWxsIGlmIGFza2Vk LiAqLwotICAgICAgICAgICAgICAgICAgICAgIGxpbmVbaSsrXSA9IGRvcGFyKChjaGFyKSB4bWl0 Zik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChpID09IDAgfHwgKChj aGFyKSBsaW5lW2ktMV0pICE9ICgoY2hhcikgZG9wYXIoQ1IpKSkKLSAgICAgICAgICAgICAgICAg IGxpbmVbaSsrXSA9IGRvcGFyKENSKTsgLyogVGVybWluYXRlIGl0IHdpdGggQ1IgKi8KLSAgICAg ICAgICAgICAgICBpZiAoeG1pdGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc3R1ZmYgPSBMRjsK LSNpZmRlZiBUTkNPREUKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzX3RuICYmICh0bl9u bG0gIT0gVE5MX0NSKSkgewotICAgICAgICAgICAgICAgICAgICAvKiBURUxORVQgTkVXTElORSBP Ti9PRkYvUkFXICovCi0gICAgICAgICAgICAgICAgICAgIHN0dWZmID0gKHRuX25sbSA9PSBUTkxf Q1JMRikgPyBMRiA6IE5VTDsKLSNlbmRpZiAvKiBUTkNPREUgKi8KLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgaWYgKHN0dWZmID4gLTEpCi0gICAgICAgICAgICAgICAgICBsaW5l W2krK10gPSBkb3BhcigoY2hhcilzdHVmZik7Ci0gICAgICAgICAgICAgICAgbGluZVtpXSA9IE5V TDsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJYTUlUIGVvbCBsaW5lIixsaW5lLGkpOwot Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGMgIT0gLTEpIHsgICAgICAgLyogTm90IGEgbmV3bGlu ZSwgcmVndWxhciBjaGFyYWN0ZXIgKi8KLSAgICAgICAgICAgICAgICBpbnQgaywgeDsKLSAgICAg ICAgICAgICAgICBvdXR4YnVmWzBdID0gYzsgICAgICAgICAvKiBJbiBjYXNlIG9mIG5vIHRyYW5z bGF0aW9uICovCi0gICAgICAgICAgICAgICAgb3V0eGNvdW50ID0gMTsgICAgICAgICAgLyogQXNz dW1lIHJlc3VsdCBpcyBvbmUgYnl0ZSAqLwotI2lmbmRlZiBOT0NTRVRTCi0gICAgICAgICAgICAg ICAgc3dpdGNoICh1bmljb2RlKSB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIDA6ICAgICAgICAg ICAgICAgLyogTm8gVW5pY29kZSBpbnZvbHZlZCAqLwotICAgICAgICAgICAgICAgICAgY2FzZSAx OgotICAgICAgICAgICAgICAgICAgICBpZiAoeGxhdGUpIHsgICAgICAgIC8qIElmIG5vdCAvVFJB TlNQQVJFTlQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIExvY2FsLXRvLWludGVybWVk aWF0ZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN4bykgYyA9ICgqc3hvKSgoY2hh ciljKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIEludGVybWVkaWF0ZS10by1yZW1vdGUg Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyeG8pIGMgPSAoKnJ4bykoKGNoYXIpYyk7 Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXR4YnVmWzBdID0gYzsKLSAgICAgICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSNpZmRlZiBVTklDT0RFCi0gICAg ICAgICAgICAgICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgLyogTG9jYWwgYnl0ZSB0byBVVEYt OCAqLwotICAgICAgICAgICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgICAgICAgICB4ZnUg PSB4bF9mY3VbZmNoYXJzZXRdOwotICAgICAgICAgICAgICAgICAgICB0Y3NzaXplID0gZmNzaW5m b1tmY2hhcnNldF0uc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgb3V0eGNvdW50ID0KLSAgICAg ICAgICAgICAgICAgICAgICBiX3RvX3UoKENIQVIpYyxvdXR4YnVmLE9VVFhCVUZTSVosdGNzc2l6 ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSA0 OiAgICAgICAgICAgICAgIC8qIExvY2FsIFVURi04IHRvIHJlbW90ZSBieXRlICovCi0gICAgICAg ICAgICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgICAgICAgICAgIHh1ZiA9IHhsX3VmY1t0Y3Ny XTsKLSAgICAgICAgICAgICAgICAgICAgeCA9IHVfdG9fYigoQ0hBUiljKTsgLyogQ29udmVydCB0 byBieXRlICovCi0gICAgICAgICAgICAgICAgICAgIGlmICh4ID09IC0xKSB7ICAgICAgLyogSWYg bW9yZSBpbnB1dCBieXRlcyBuZWVkZWQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp bnVlOyAgICAgICAvKiBnbyBiYWNrIGFuZCBnZXQgdGhlbSAqLwotICAgICAgICAgICAgICAgICAg ICB9IGVsc2UgaWYgKHggPT0gLTIpIHsgLyogTFMgb3IgUFMgKHNob3VsZG4ndCBoYXBwZW4pICov Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXR4YnVmWzBdID0gQ1I7Ci0gICAgICAgICAgICAg ICAgICAgIH0gZWxzZSBpZiAoeCA9PSAtOSkgeyAvKiBVVEYtOCBlcnJvciAqLwotICAgICAgICAg ICAgICAgICAgICAgICAgb3V0eGJ1ZlswXSA9ICc/JzsgLyogSW5zZXJ0IGVycm9yIGNoYXIgKi8K LSAgICAgICAgICAgICAgICAgICAgICAgIG91dHhidWZbMV0gPSB1X3RvX2IyKCk7IC8qIEluc2Vy dCBuZXh0IGNoYXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIG91dHhjb3VudCA9IDI7Ci0g ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXR4 YnVmWzBdID0gICAgLyogT3RoZXJ3aXNlIHN0b3JlIHJlc3VsdCAqLwotICAgICAgICAgICAgICAg ICAgICAgICAgICAodW5zaWduZWQpKHggJiAweGZmKTsKLSAgICAgICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgNjogICAg ICAgICAgICAgICAvKiBVVEYtOCB0byBVVEYtOCAqLwotICAgICAgICAgICAgICAgICAgY2FzZSA3 OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgODog ICAgICAgICAgICAgICAvKiBVQ1MtMiB0byBieXRlICovCi0gICAgICAgICAgICAgICAgICBjYXNl IDk6Ci0gICAgICAgICAgICAgICAgICAgIHh1ZiA9IHhsX3VmY1t0Y3NyXTsKLSAgICAgICAgICAg ICAgICAgICAgb3V0eGJ1ZlswXSA9ICgqeHVmKSh1Yy54X3Nob3J0KTsKLSAgICAgICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIDEwOgotICAgICAgICAgICAgICAg ICAgY2FzZSAxMTogeyAgICAgICAgICAgIC8qIFVDUy0yIHRvIFVURi04ICovCi0gICAgICAgICAg ICAgICAgICAgICAgaW50IGo7Ci0gICAgICAgICAgICAgICAgICAgICAgQ0hBUiAqIGJ1ZiA9IE5V TEw7Ci0gICAgICAgICAgICAgICAgICAgICAgeCA9IHVjczJfdG9fdXRmOCh1Yy54X3Nob3J0LCZi dWYpOwotICAgICAgICAgICAgICAgICAgICAgIGlmICh4IDwgMCkgewotICAgICAgICAgICAgICAg ICAgICAgICAgICBvdXR4YnVmWzBdID0gMHhmZjsgLyogKD0gVStGRkZEKSAqLwotICAgICAgICAg ICAgICAgICAgICAgICAgICBvdXR4YnVmWzFdID0gMHhiZDsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgeCA9IDI7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg ICAgIGZvciAoaiA9IDA7IGogPCB4OyBqKyspCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXR4 YnVmW2pdID0gYnVmW2pdOwotICAgICAgICAgICAgICAgICAgICAgIG91dHhjb3VudCA9IHg7Ci0g ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICB9Ci0jZW5kaWYg LyogVU5JQ09ERSAqLwotICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0g ICAgICAgICAgICAgICAgb3V0eGJ1ZltvdXR4Y291bnRdID0gTlVMOwotICAgICAgICAgICAgICAg IGRlYnVnKEYxMTEsIlhNSVQgb3V0eGJ1ZiIsb3V0eGJ1ZixvdXR4Y291bnQpOwotLyoKLSAgTm93 IHRoZSBpbnB1dCBjaGFyYWN0ZXIgKDEgb3IgbW9yZSBieXRlcykgaXMgdHJhbnNsYXRlZCBpbnRv IHRoZSBvdXRwdXQKLSAgZXhwYW5zaW9uIGJ1ZmZlciAoMSBvciBtb3JlIGJ5dGVzKTsgb3V0eGNv dW50ID0gbnVtYmVyIG9mIGJ5dGVzIHRvIGFkZCB0bwotICB0aGUgVFJBTlNNSVQgbGluZSBidWZm ZXIsIHdoaWNoIHdlIGRvIGhlcmUsIHRha2luZyBjYXJlIG9mIHBhcml0eSwgU0kvU08KLSAgcHJv Y2Vzc2luZywgYW5kIHF1b3RpbmcgVGVsbmV0IElBQ3MuCi0qLwotICAgICAgICAgICAgICAgIGZv ciAoayA9IDA7IGsgPCBvdXR4Y291bnQ7IGsrKykgewotICAgICAgICAgICAgICAgICAgICBjID0g b3V0eGJ1ZltrXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHhtaXRzICYmIHBhcml0eSAmJiAo YyAmIDAyMDApKSB7IC8qIElmIHNoaWZ0aW5nICovCi0gICAgICAgICAgICAgICAgICAgICAgICBs aW5lW2krK10gPSBkb3BhcihTTyk7IC8qIG5lZWRzIHRvIGJlIGRvbmUsICovCi0gICAgICAgICAg ICAgICAgICAgICAgICBsaW5lW2krK10gPSBkb3BhcigoY2hhciljKTsgLyogZG8gaXQgaGVyZSwg Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVbaSsrXSA9IGRvcGFyKFNJKTsgLyogY3J1 ZGVseS4gKi8KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgIGxpbmVbaSsrXSA9IGRvcGFyKChjaGFyKWMpOwotI2lmZGVmIFROQ09ERQotICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gKENIQVIpSUFDICYmIGlzX3RuKQotICAgICAgICAg ICAgICAgICAgICAgICAgICBsaW5lW2krK10gPSAoQ0hBUilJQUM7Ci0jZW5kaWYgLyogVE5DT0RF ICovCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICB9Ci0vKgotICBTZW5kIGNoYXJhY3RlcnMgaWYgYnVmZmVyIGZ1bGwsIG9yIGF0IGVuZCBvZiBs aW5lLCBvciBhdCBlbmQgb2YgZmlsZS4KLSAgKEVuZCBvZiBsaW5lIG9ubHkgaWYgZWNob2luZywg d2FpdGluZyBmb3IgYSBwcm9tcHQsIG9yIHBhdXNpbmcuKQotKi8KLSAgICAgICAgICAgIGRlYnVn KEYwMDAsIlhNSVQgYyIsY2tpdG9hKGkpLGMpOwotICAgICAgICAgICAgaWYgKGkgPj0geGJ1ZnNp eiB8fCBlb2YgfHwgKGVvbCAmJiAoeHhlY2hvIHx8IHhtaXR3IHx8IHQpKSkgewotICAgICAgICAg ICAgICAgIHAgPSBsaW5lOwotICAgICAgICAgICAgICAgIGxpbmVbaV0gPSAnXDAnOwotICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTEsInRyYW5zbWl0IGJ1ZiIscCxpKTsKLSAgICAgICAgICAgICAg ICBpZiAodHRvbCgoQ0hBUiAqKXAsaSkgPCAwKSB7IC8qIHRyeSB0byBzZW5kIGl0LiAqLwotICAg ICAgICAgICAgICAgICAgICBwcmludGYoIj9UUkFOU01JVCBvdXRwdXQgZXJyb3I6ICVzXG4iLGNr X2VycnN0cigpKTsKLSAgICAgICAgICAgICAgICAgICAgcmMgPSAwOwotICAgICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaSA9IDA7ICAg ICAgICAgICAgICAgICAgLyogUmVzZXQgYnVmZmVyIHBvaW50ZXIuICovCi0vKgotICBOb3cgd2Ug aGFuZGxlIHRoZSBlY2hvLiAgSWYgdGhlIHVzZXIgd2FudHMgdG8gc2VlIGl0LCBvciBpZiB3ZSBo YXZlIHRvCi0gIHdhaXQgZm9yIHRoZSB0dXJuYXJvdW5kIGNoYXJhY3RlciwgdC4gIElmIHRoZSBl Y2hvIGlzIGJlaW5nIGRpc3BsYXllZCwKLSAgYW5kIHRlcm1pbmFsIGNoYXJhY3Rlci1zZXQgdHJh bnNsYXRpb24gaXMgcmVxdWlyZWQsIHdlIGRvIGl0IGhlcmUuCi0qLwotICAgICAgICAgICAgICAg IGlmIChkdXBsZXggJiYgeHhlY2hvKSB7ICAvKiBJZiBsb2NhbCBlY2hvLCBlY2hvIGl0ICovCi0g ICAgICAgICAgICAgICAgICAgIGlmIChwYXJpdHkgfHwgY21kbXNrID09IDB4N2YpIHsgLyogU3Ry aXAgaGkgYml0cyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqc3MgPSBsaW5lOyAg ICAgICAgICAgICAvKiBpZiBuZWNlc3NhcnkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHdo aWxlICgqc3MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3MgJj0gMHg3ZjsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzcysrOwotICAgICAgICAgICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgICAgICB9Ci0jaWZuZGVmIE5PTE9DQUwKLSNpZmRlZiBPUzIKLSAg ICAgICAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAvKiBFY2hvIHRvIGVtdWxhdG9y ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpzcyA9IHA7Ci0gICAgICAgICAgICAg ICAgICAgICAgICB3aGlsZSAoKnNzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Ny aXB0d3J0YnVmKChVU0hPUlQpKnNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcysr OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0jZW5k aWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotICAgICAgICAgICAgICAgICAgICBp ZiAoY29ub2xsKHApIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICBnb3RvIHhtaXRmYWlsOwot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoeG1pdHcpICAgICAgICAgICAg ICAvKiBTbGVlcCBUUkFOU01JVCBQQVVTRSBpbnRlcnZhbCAqLwotICAgICAgICAgICAgICAgICAg bXNsZWVwKHhtaXR3KTsKLQotICAgICAgICAgICAgICAgIGNvbnRyb2wgPSAwOyAgICAgICAgICAg IC8qIFJlYWRiYWNrIGxvb3AgY29udHJvbCAqLwotICAgICAgICAgICAgICAgIGlmICh0ICE9IDAg JiYgZW9sKSAgICAgIC8qIFRSQU5TTUlUIFBST01QVCBnaXZlbiBhbmQgYXQgRU9MICovCi0gICAg ICAgICAgICAgICAgICBjb250cm9sIHw9IDE7Ci0gICAgICAgICAgICAgICAgaWYgKHh4ZWNobyAm JiAhZHVwbGV4KSAgIC8qIEVjaG8gZGVzaXJlZCBhbmQgaXMgcmVtb3RlICovCi0gICAgICAgICAg ICAgICAgICBjb250cm9sIHw9IDI7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY29udHJvbCkgeyAg ICAgICAgICAvKiBEbyB0aGlzIGlmIHJlYWRpbmcgYmFjayB0aGUgZWNobyAqLwotICAgICAgICAg ICAgICAgICAgICBpbnQgbjsKLSAgICAgICAgICAgICAgICAgICAgeCA9IDA7Ci0gICAgICAgICAg ICAgICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJv bCAmIDEpIHsgLyogVGVybWluYXRpb24gY3JpdGVyaW9uICovCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKHggPT0gdCkgICAgLyogZm9yIHR1cm5hcm91bmQgKi8KLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl IGlmIChjb250cm9sICYgMikgeyAvKiBBbmQgZm9yIGVjaG9pbmcgKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoKG4gPSB0dGNoaygpKSA8IDEpCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICAgICAgICAgIGlmICgoeCA9IHR0aW5jKHhtaXR0KSkgPCAwKSB7IC8qIFJlYWQgd2l0aCB0 aW1lb3V0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh4KSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0yOgotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwcmludGYoIkNvbm5lY3Rpb24gY2xvc2VkLlxuIik7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHR0Y2xvcygxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ290byB4bWl0ZmFpbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug LTM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJTZXNzaW9uIExpbWl0IGV4Y2VlZGVkIC0gY2xvc2luZyBjb25u ZWN0aW9uLlxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRjbG9zKDEpOyAvKiBmdWxsIHRocnUuLi4g Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byB4bWl0ZmFpbDsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHByaW50ZigiP1RpbWVvdXRcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBnb3RvIHhtaXRmYWlsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ID4g LTEgJiYgKGNvbnRyb2wgJiAyKSkgeyAvKiBFY2hvIGFueSBlY2hvZXMgKi8KLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiAocGFyaXR5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgeCAmPSAweDdmOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSB4OwotI2lmbmRl ZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0 d3J0YnVmKChVU0hPUlQpeCk7Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9MT0NBTCAq LwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlueGJ1ZlswXSA9IGM7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW54Y291bnQgPSAxOwotI2lmbmRlZiBOT0NTRVRTCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh1bmljb2RlICYgMykgeyAvKiBSZW1vdGUgYml0 cyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoeGxhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChzeGkpIGMgPSAoKnN4aSkoKENIQVIpYyk7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpZiAocnhpKSBjID0gKCpyeGkpKChDSEFSKWMpOwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW54YnVmWzBdID0gYzsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKLSNpZmRlZiBVTklDT0RFCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj YXNlIDE6ICAgLyogUmVtb3RlIEJ5dGUgdG8gbG9jYWwgVVRGLTggKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgeGZ1ID0geGxfZmN1W3Rjc3JdOwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0Y3NzaXplID0gZmNzaW5mb1t0Y3NyXS5zaXplOwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnhjb3VudCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYl90b191KChDSEFSKWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlueGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT1VUWEJVRlNJWiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dGNzc2l6ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNhc2UgMjogICAvKiBSZW1vdGUgVVRGLTggdG8gbG9jYWwgQnl0ZSAqLwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4dWYgPSB4bF91ZmNbdGNzbF07Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHggPSB1X3RvX2IoKENIQVIpYyk7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlmICh4IDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW54 YnVmWzBdID0gKHVuc2lnbmVkKSh4ICYgMHhmZik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiAgIC8q IFVURi04IHRvIFVURi04ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0j ZW5kaWYgLyogTk9DU0VUUyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlueGJ1Zltp bnhjb3VudF0gPSBOVUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnhvKGlu eGNvdW50LChjaGFyICopaW54YnVmKSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBnb3RvIHhtaXRmYWlsOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlICAgICAgICAgICAgICAgICAgLyogTm90 IGVjaG9pbmcgKi8KLSAgICAgICAgICAgICAgICAgIHR0Zmx1aSgpOyAgICAgICAgICAgICAvKiBK dXN0IGZsdXNoIGlucHV0IGJ1ZmZlciAqLwotICAgICAgICAgICAgfSAvKiBFbmQgb2YgYnVmZmVy LWR1bXBpbmcgYmxvY2sgKi8KLSAgICAgICAgfSAvKiBFbmQgb2YgdGV4dCBtb2RlICovCi0gICAg ICAgIGlmIChlb2YpIHsKLSAgICAgICAgICAgIHJjID0gMTsKLSAgICAgICAgICAgIGdvdG8geG1p dGV4aXQ7Ci0gICAgICAgIH0KLSAgICB9IC8qIEVuZCBvZiBjaGFyYWN0ZXItcmVhZGluZyBsb29w ICovCi0KLSAgeG1pdGZhaWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGYWlsdXJl IGV4aXQgcG9pbnQgKi8KLSAgICByYyA9IDA7Ci0KLSAgeG1pdGV4aXQ6ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBHZW5lcmFsIGV4aXQgcG9pbnQgKi8KLSAgICBpZiAocmMgPiAwKSB7 Ci0gICAgICAgIGlmIChiaW5hcnkgJiYgIXhtaXR3ICYmICF4eGVjaG8pIHsgLyogImJsYXN0aW5n Ij8gKi8KLSAgICAgICAgICAgIHdoaWxlIChjb3VudCA+IDApIHsgICAgICAgICAgICAvKiBQYXJ0 aWFsIGJ1ZmZlciBzdGlsbCB0byBnbz8gKi8KLSAgICAgICAgICAgICAgICBlcnJubyA9IDA7Ci0g ICAgICAgICAgICAgICAgeSA9IHR0b2woeGJidWYsY291bnQpOwotICAgICAgICAgICAgICAgIGlm ICh5IDwgMCkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9UUkFOU01JVCBvdXRwdXQg ZXJyb3I6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tfZXJyc3RyKCkpOwot ICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJYTUlUIGJpbmFyeSBlb2YgdHRvbCBlcnJv ciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNrX2VycnN0cigpLGVycm5vKTsKLSAgICAg ICAgICAgICAgICAgICAgcmMgPSAwOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY291bnQgLT0geTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgfSBlbHNlIGlmICghYmluYXJ5ICYmICp4bWl0YnVmKSB7IC8qIEFueXRoaW5nIHRv IHNlbmQgYXQgRU9GPyAqLwotICAgICAgICAgICAgcCA9IHhtaXRidWY7ICAgICAgICAgICAgICAg IC8qIFllcywgcG9pbnQgdG8gc3RyaW5nLiAqLwotICAgICAgICAgICAgd2hpbGUgKCpwKSAgICAg ICAgICAgICAgICAgIC8qIFNlbmQgaXQuICovCi0gICAgICAgICAgICAgIHR0b2MoZG9wYXIoKnAr KykpOyAgICAgICAgLyogRG9uJ3Qgd29ycnkgYWJvdXQgZWNobyBoZXJlLiAqLwotICAgICAgICB9 Ci0gICAgfQotCi0jaWZuZGVmIEFNSUdBCi0jaWZuZGVmIE1BQwotICAgIHNpZ25hbChTSUdJTlQs b2xkc2lnKTsgICAgICAgICAgICAgIC8qIFB1dCBvbGQgc2lnbmFsIGFjdGlvbiBiYWNrLiAqLwot I2VuZGlmIC8qIE1BQyAqLwotI2VuZGlmIC8qIEFNSUdBICovCi0jaWZkZWYgVk1TCi0gICAgY29u Y2IoZXNjYXBlKTsgICAgICAgICAgICAgICAgICAgICAgLyogUHV0IHRlcm1pbmFsIGJhY2ssICov Ci0jZW5kaWYgLyogVk1TICovCi0gICAgemNsb3NlKFpJRklMRSk7ICAgICAgICAgICAgICAgICAg ICAgLyogQ2xvc2UgZmlsZSwgKi8KLSNpZm5kZWYgTk9DU0VUUwotICAgIGxhbmd1YWdlID0gbGFu Z3N2OyAgICAgICAgICAgICAgICAgIC8qIHJlc3RvcmUgbGFuZ3VhZ2UsICovCi0jZW5kaWYgLyog Tk9DU0VUUyAqLwotICAgIHR0cmVzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFu ZCB0ZXJtaW5hbCBtb2RlcywgKi8KLSAgICByZXR1cm4ocmMpOyAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBhbmQgcmV0dXJuIHN1Y2Nlc3NmdWxseS4gKi8KLX0KLSNlbmRpZiAvKiBOT0xPQ0FM ICovCi0jZW5kaWYgLyogTk9YTUlUICovCi0KLSNpZm5kZWYgTk9DU0VUUwotCi1fUFJPVE9UWVAo IENIQVIgKCpzeHgpLCAoQ0hBUikgKTsgICAgICAgLyogTG9jYWwgdHJhbnNsYXRpb24gZnVuY3Rp b24gKi8KLV9QUk9UT1RZUCggQ0hBUiAoKnJ4eCksIChDSEFSKSApOyAgICAgICAvKiBMb2NhbCB0 cmFuc2xhdGlvbiBmdW5jdGlvbiAqLwotX1BST1RPVFlQKCBDSEFSIHpsMWFzLCAoQ0hBUikgKTsg ICAgICAgIC8qIExhdGluLTEgdG8gYXNjaWkgKi8KLV9QUk9UT1RZUCggQ0hBUiB4bDFhcywgKENI QVIpICk7ICAgICAgICAvKiBkaXR0byAqLwotCi0vKiAgWCBMIEEgVCBFICAtLSAgVHJhbnNsYXRl IGEgbG9jYWwgZmlsZSBmcm9tIG9uZSBjaGFyYWN0ZXIgc2V0IHRvIGFub3RoZXIgKi8KLQotLyoK LSAgVHJhbnNsYXRlcyBpbnB1dCBmaWxlIChmaW4pIGZyb20gY2hhcmFjdGVyIHNldCBjc2luIHRv IGNoYXJhY3RlciBzZXQgY3NvdXQKLSAgYW5kIHB1dHMgdGhlIHJlc3VsdCBpbiB0aGUgb3V0cHV0 IGZpbGUgKGZvdXQpLiAgVGhlIHR3byBjaGFyYWN0ZXIgc2V0cyBhcmUKLSAgZmlsZSBjaGFyYWN0 ZXIgc2V0cyBmcm9tIGZjc3RhYi4KLSovCi0KLWludAoteGxhdGUoZmluLCBmb3V0LCBjc2luLCBj c291dCkgY2hhciAqZmluLCAqZm91dDsgaW50IGNzaW4sIGNzb3V0OyB7Ci0KLSNpZm5kZWYgTUFD Ci0jaWZkZWYgT1MyCi0gICAgZXh0ZXJuIGludCBrOTVzdGRvdXQ7Ci0gICAgZXh0ZXJuIGludCB3 aGVyZXhbXSwgd2hlcmV5W107Ci0gICAgZXh0ZXJuIHVuc2lnbmVkIGNoYXIgY29sb3JjbWQ7Ci0j aWZkZWYgTlQKLSAgICBTSUdUWVAgKCogb2xkc2lnKShpbnQpOyAgICAgICAgICAgICAvKiBGb3Ig c2F2aW5nIG9sZCBpbnRlcnJ1cHQgdHJhcC4gKi8KLSNlbHNlIC8qIE5UICovCi0gICAgU0lHVFlQ ICgqIHZvbGF0aWxlIG9sZHNpZykoaW50KTsgICAgLyogRm9yIHNhdmluZyBvbGQgaW50ZXJydXB0 IHRyYXAuICovCi0jZW5kaWYgLyogTlQgKi8KLSNlbHNlIC8qIE9TMiAqLwotICAgIFNJR1RZUCAo KiBvbGRzaWcpKCk7Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTUFDICovCi0jaWZkZWYg Q0tfQU5TSUMKLSAgICBpbnQgKCpmbikoY2hhcik7ICAgICAgICAgICAgICAgICAgICAvKiBPdXRw dXQgZnVuY3Rpb24gcG9pbnRlciAqLwotI2Vsc2UKLSAgICBpbnQgKCpmbikoKTsKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwotICAgIGV4dGVybiBpbnQgeGxhdHlwZTsKLSAgICBpbnQgZmlsZWNvZGU7 ICAgICAgICAgICAgICAgICAgICAgICAvKiBDb2RlIGZvciBvdXRwdXQgZmlsZSAqLwotICAgIGlu dCBzY3JuZmxnID0gMDsKLQotICAgIGludCB6ID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFJldHVybiBjb2RlLiAqLwotICAgIGludCB4LCBjLCBjMjsgICAgICAgICAgICAgICAgICAg ICAgIC8qIFdvcmtlcnMgKi8KLSNpZm5kZWYgVU5JQ09ERQotICAgIGludCB0Y3M7Ci0jZW5kaWYg LyogVU5JQ09ERSAqLwotCi0gICAgZmZjID0gMEw7Ci0KLSAgICBpZiAoem9wZW5pKFpJRklMRSxm aW4pID09IDApIHsgICAgICAvKiBPcGVuIHRoZSBmaWxlIHRvIGJlIHRyYW5zbGF0ZWQgKi8KLSNp ZmRlZiBDT01NRU5UCi0gICAgICAgIC8qIEFuIGVycm9yIG1lc3NhZ2Ugd2FzIGFscmVhZHkgcHJp bnRlZCBieSB6b3BlbmkoKSAqLwotICAgICAgICBwcmludGYoIj9DYW4ndCBvcGVuIGlucHV0IGZp bGUgJXNcbiIsZmluKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIHJldHVybigwKTsK LSAgICB9Ci0jaWZkZWYgTUFDCi0vKgotICBJZiB1c2VyIHNwZWNpZmllZCBubyBvdXRwdXQgZmls ZSwgaXQgZ29lcyB0byB0aGUgc2NyZWVuLiAgRm9yIHRoZSBNYWMsCi0gIHRoaXMgbXVzdCBiZSBk b25lIGEgc3BlY2lhbCB3YXkgKHJlc3VsdCBnb2VzIHRvIGEgbmV3IHdpbmRvdyk7IHRoZSBNYWMK LSAgZG9lc24ndCBoYXZlIGEgImNvbnRyb2xsaW5nIHRlcm1pbmFsIiBkZXZpY2UgbmFtZS4KLSov Ci0gICAgZmlsZWNvZGUgPSAhc3RyY21wKGZvdXQsQ1RUTkFNKSA/IFpDVEVSTSA6IFpPRklMRTsK LSNlbHNlCi0jaWZkZWYgVk1TCi0gICAgZmlsZWNvZGUgPSAhc3RyY21wKGZvdXQsQ1RUTkFNKSA/ IFpDVEVSTSA6IFpNRklMRTsKLSNlbHNlCi0jaWZkZWYgT1MyCi0gICAgZmlsZWNvZGUgPSAoIXN0 cmljbXAoZm91dCwiY29uIikgfHwgIXN0cmljbXAoZm91dCwiY29uOiIpKSA/Ci0gICAgICAgIFpD VEVSTSA6IFpNRklMRTsKLSAgICBpZiAoKGZpbGVjb2RlID09IFpDVEVSTSkgJiYgIWs5NXN0ZG91 dCAmJiAhaW5zZXJ2ZXIpCi0gICAgICAgIGNzb3V0ID0gRkNfVUNTMjsKLSNlbHNlIC8qIE9TMiAq LwotICAgIGZpbGVjb2RlID0gWk9GSUxFOwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFZN UyAqLwotI2VuZGlmIC8qIE1BQyAqLwotICAgIGlmICh6b3Blbm8oZmlsZWNvZGUsZm91dCxOVUxM LE5VTEwpID09IDApIHsgLyogQW5kIHRoZSBvdXRwdXQgZmlsZSAqLwotICAgICAgICBwcmludGYo Ij9DYW4ndCBvcGVuIG91dHB1dCBmaWxlICVzXG4iLGZvdXQpOwotICAgICAgICByZXR1cm4oMCk7 Ci0gICAgfQotI2lmbmRlZiBBTUlHQQotI2lmbmRlZiBNQUMKLSAgICBvbGRzaWcgPSBzaWduYWwo U0lHSU5ULCB0cnRyYXApOyAgICAvKiBTYXZlIGN1cnJlbnQgaW50ZXJydXB0IHRyYXAuICovCi0j ZW5kaWYgLyogTUFDICovCi0jZW5kaWYgLyogQU1JR0EgKi8KLQotICAgIHNjcm5mbGcgPSAoZmls ZWNvZGUgPT0gWkNURVJNKTsgICAgIC8qIFNldCBvdXRwdXQgZnVuY3Rpb24gKi8KLSAgICBpZiAo c2NybmZsZykKLSAgICAgIGZuID0gTlVMTDsKLSAgICBlbHNlIGlmIChmaWxlY29kZSA9PSBaTUZJ TEUpCi0gICAgICBmbiA9IHB1dG1maWw7Ci0gICAgZWxzZQotICAgICAgZm4gPSBwdXRmaWw7Ci0K LSAgICB0cl9pbnQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIYXZlIG5vdCBiZWVu IGludGVycnVwdGVkICh5ZXQpLiAqLwotICAgIHogPSAxOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFJldHVybiBjb2RlIHByZXN1bWVkIGdvb2QuICovCi0KLSAgICBpZiAoIXNjcm5m bGcgJiYgIXF1aWV0KQotICAgICAgcHJpbnRmKCIgJXMgKCVzKSA9PiAlcyAoJXMpXG4iLCAgIC8q IFNheSB3aGF0IHdlJ3JlIGRvaW5nLiAqLwotICAgICAgICAgICAgIGZpbiwgZmNzaW5mb1tjc2lu XS5rZXl3b3JkLAotICAgICAgICAgICAgIGZvdXQsZmNzaW5mb1tjc291dF0ua2V5d29yZAotICAg ICAgICAgICAgICk7Ci0KLSNpZm5kZWYgVU5JQ09ERQotLyoKLSAgTm9uLVVuaWNvZGUgcGlja3Mg dGhlICJtb3N0IGFwcHJvcHJpYXRlIiB0cmFuc2ZlciBjaGFyYWN0ZXIgc2V0IGFzIHRoZQotICBp bnRlcm1lZGlhdGUgc2V0LCB3aGljaCByZXN1bHRzIGluIGxvc3Mgb2YgYW55IGNoYXJhY3RlcnMg dGhhdCB0aGUgc291cmNlCi0gIGFuZCB0YXJnZXQgc2V0cyBoYXZlIGluIGNvbW1vbiwgYnV0IGFy ZSBsYWNraW5nIGZyb20gdGhlIGludGVybWVkaWF0ZSBzZXQuCi0qLwotI2lmZGVmIEtBTkpJCi0g ICAgLyogU3BlY2lhbCBoYW5kbGluZyBmb3IgSmFwYW5lc2UuLi4gKi8KLQotICAgIGlmIChmY3Np bmZvW2NzaW5dLmFscGhhYmV0ID09IEFMX0pBUEFOIHx8Ci0gICAgICAgICBmY3NpbmZvW2Nzb3V0 XS5hbHBoYWJldCA9PSBBTF9KQVBBTikgewotICAgICAgICBVU0hPUlQgZXU7Ci0gICAgICAgIGlu dCBjLCB4LCB5OwotCi0gICAgICAgIHhwbmJ5dGUoLTEsMCwwLE5VTEwpOyAgICAgICAgICAgLyog UmVzZXQgb3V0cHV0IG1hY2hpbmUgKi8KLSAgICAgICAgeGxhdHlwZSA9IFhMQV9KQVBBTjsKLQot ICAgICAgICB3aGlsZSAoKGMgPSB4Z25ieXRlKEZDX0pFVUMsY3NpbixOVUxMKSkgPiAtMSkgeyAv KiBHZXQgYW4gRVVDIGJ5dGUgKi8KLSAgICAgICAgICAgIGlmICh0cl9pbnQpIHsgICAgICAgICAg ICAgICAvKiBJbnRlcnJ1cHRlZD8gKi8KLSAgICAgICAgICAgICAgICBwcmludGYoIl5DLi4uXG4i KTsgICAgICAvKiBQcmludCBtZXNzYWdlICovCi0gICAgICAgICAgICAgICAgeiA9IDA7Ci0gICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiBTZW5kIEVV QyBieXRlIHRvIG91dHB1dCBtYWNoaW5lICovCi0gICAgICAgICAgICBpZiAoKHggPSB4cG5ieXRl KGMsVENfSkVVQyxjc291dCxmbikpIDwgMCkgewotICAgICAgICAgICAgICAgIHogPSAtMTsKLSAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBn b3RvIHh4bGF0ZTsKLSAgICB9Ci0jZW5kaWYgLyogS0FOSkkgKi8KLQotICAgIC8qIFJlZ3VsYXIg Ynl0ZXdpc2UgY29udmVyc2lvbi4uLiAqLwotCi0gICAgdGNzID0gZ2V0dGNzKGNzaW4sY3NvdXQp OyAgICAgICAgICAgLyogR2V0IGludGVybWVkaWF0ZSBzZXQuICovCi0gICAgaWYgKGNzaW4gPT0g Y3NvdXQpIHsgICAgICAgICAgICAgICAgLyogSW5wdXQgYW5kIG91dHB1dCBzZXRzIHRoZSBzYW1l PyAqLwotICAgICAgICBzeHggPSByeHggPSBOVUxMOyAgICAgICAgICAgICAgIC8qIElmIHNvLCBu byB0cmFuc2xhdGlvbi4gKi8KLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBPdGhlcndpc2UsIHNldCB1cCAqLwotICAgICAgICBpZiAodGNzIDwgMCB8fCB0Y3MgPiBN QVhUQ1NFVFMgfHwKLSAgICAgICAgICAgIGNzaW4gPCAwIHx8IGNzaW4gPiBNQVhGQ1NFVFMgfHwK LSAgICAgICAgICAgIGNzb3V0IDwgMCB8fCBjc291dCA+IE1BWEZDU0VUUykgewotICAgICAgICAg ICAgZGVidWcoRjEwMCwiWExBVEUgY3NldHMgb3V0IG9mIHJhbmdlIiwiIiwwKTsKLSAgICAgICAg ICAgIHN4eCA9IHJ4eCA9IE5VTEw7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzeHgg PSB4bHNbdGNzXVtjc2luXTsgICAgICAgLyogdHJhbnNsYXRpb24gZnVuY3Rpb24gKi8KLSAgICAg ICAgICAgIHJ4eCA9IHhsclt0Y3NdW2Nzb3V0XTsgICAgICAvKiBwb2ludGVycy4gKi8KLSAgICAg ICAgICAgIGlmIChyeHggPT0gemwxYXMpIHJ4eCA9IHhsMWFzOwotICAgICAgICB9Ci0gICAgfQot ICAgIHdoaWxlICgoYyA9IHptaW5jaGFyKCkpICE9IC0xKSB7IC8qIExvb3AgZm9yIGFsbCBjaGFy YWN0ZXJzIGluIGZpbGUgKi8KLSAgICAgICAgaWYgKHRyX2ludCkgeyAgICAgICAgICAgICAgICAg ICAvKiBJbnRlcnJ1cHRlZD8gKi8KLSAgICAgICAgICAgIHByaW50ZigiXkMuLi5cbiIpOyAgICAg ICAgICAvKiBQcmludCBtZXNzYWdlICovCi0gICAgICAgICAgICB6ID0gMDsKLSAgICAgICAgICAg IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzeHgpIGMgPSAoKnN4eCkoKENIQVIpYyk7 ICAgLyogRnJvbSBmY3MxIHRvIHRjcyAqLwotICAgICAgICBpZiAocnh4KSBjID0gKCpyeHgpKChD SEFSKWMpOyAgIC8qIGZyb20gdGNzIHRvIGZjczIgKi8KLSAgICAgICAgaWYgKHpjaG91dChmaWxl Y29kZSwoY2hhciljKSA8IDApIHsgLyogT3V0cHV0IHhsYXRlZCBjaGFyYWN0ZXIgKi8KLSAgICAg ICAgICAgIHogPSAtMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAg IGdvdG8geHhsYXRlOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvbmUuICovCi0KLSNlbHNl ICAvKiBVTklDT0RFICovCi0vKgotICAgVXNlIFVuaWNvZGUgYXMgdGhlIGludGVybWVkaWF0ZSBj aGFyYWN0ZXIgc2V0LiAgSXQncyBzaW1wbGUgYW5kIGdpdmVzCi0gICBsaXR0bGUgb3Igbm8gbG9z cywgYnV0IHRoZSBvdmVyaGVhZCBpcyBhIGJpdCBoaWdoZXIuCi0qLwotICAgIGluaXR4bGF0ZShj c2luLGNzb3V0KTsgICAgICAgICAgICAgIC8qIFNldCB1cCB0cmFuc2xhdGlvbiBmdW5jdGlvbnMg Ki8KLQotICAgIGlmICh4bGF0eXBlID09IFhMQV9OT05FKSB7Ci0gICAgICAgIHdoaWxlICgoYyA9 IHptaW5jaGFyKCkpICE9IC0xKSB7IC8qIExvb3AgZm9yIGFsbCBjaGFyYWN0ZXJzIGluIGZpbGUg Ki8KLSAgICAgICAgICAgIGlmICh0cl9pbnQpIHsgICAgICAgICAgICAgICAvKiBJbnRlcnJ1cHRl ZD8gKi8KLSAgICAgICAgICAgICAgICBwcmludGYoIl5DLi4uXG4iKTsgICAgICAvKiBQcmludCBt ZXNzYWdlICovCi0gICAgICAgICAgICAgICAgeiA9IDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoemNob3V0KGZpbGVjb2RlLChjaGFyKWMp IDwgMCkgeyAvKiBPdXRwdXQgeGxhdGVkIGNoYXJhY3RlciAqLwotICAgICAgICAgICAgICAgIHog PSAtMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot ICAgICAgICBnb3RvIHh4bGF0ZTsgICAgICAgICAgICAgICAgICAgIC8qIERvbmUuICovCi0gICAg fQotCi0KLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIE9TMgotICAgIGlmIChjc291dCA9PSBGQ19V Q1MyICYmICAgICAgICAgICAgIC8qIHdlJ3JlIHRyYW5zbGF0aW5nIHRvIFVDUy0yICovCi0gICAg ICAgIGZpbGVjb2RlID09IFpDVEVSTSAmJiAgICAgICAgICAgLyogZm9yIHRoZSByZWFsIHNjcmVl bi4uLiAqLwotICAgICAgICAhazk1c3Rkb3V0ICYmICFpbnNlcnZlcgotICAgICAgICApIHsKLSAg ICAgICAgdW5pb24gewotICAgICAgICAgICAgVVNIT1JUIHVjczI7Ci0gICAgICAgICAgICBVQ0hB UiAgYnl0ZXNbMl07Ci0gICAgICAgIH0gb3V0cHV0OwotCi0gICAgICAgIHdoaWxlICgxKSB7ICAg ICAgICAgICAgICAgICAgICAgLyogSW4gdGhpcyBjYXNlIHdlIGdvIHR3by1ieS10d28uICovCi0g ICAgICAgICAgICBpZiAoKGMgPSB4Z25ieXRlKEZDX1VDUzIsY3NpbixOVUxMKSkgPCAwKQotICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG91dHB1dC5ieXRlc1swXSA9IGM7Ci0gICAg ICAgICAgICBpZiAoKGMgPSB4Z25ieXRlKEZDX1VDUzIsY3NpbixOVUxMKSkgPCAwKQotICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG91dHB1dC5ieXRlc1sxXSA9IGM7Ci0KLSAgICAg ICAgICAgIGlmICh0cl9pbnQpIHsgICAgICAgICAgICAgICAvKiBJbnRlcnJ1cHRlZD8gKi8KLSAg ICAgICAgICAgICAgICBwcmludGYoIl5DLi4uXG4iKTsgICAgICAvKiBQcmludCBtZXNzYWdlICov Ci0gICAgICAgICAgICAgICAgeiA9IDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICB9Ci0KLSAgICAgICAgICAgIFZzY3JuV3J0VUNTMlN0ckF0dChWQ01ELAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZvdXRwdXQudWNzMiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJleVtWQ01E XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZXhbVkNNRF0sCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJmNvbG9yY21kCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotI2VuZGlmIC8qIE9TMiAqLwotI2Vu ZGlmIC8qIE5PTE9DQUwgKi8KLQotICAgICAgLyogR2VuZXJhbCBjYXNlOiBHZXQgbmV4dCBieXRl IHRyYW5zbGF0ZWQgZnJvbSBmY3MgdG8gVUNTLTIgKi8KLQotI2lmZGVmIENPTU1FTlQKLSAgICAg IHdoaWxlICgoYyA9IHhnbmJ5dGUoRkNfVUNTMixjc2luLE5VTEwpKSA+IC0xICYmCi0gICAgICAg ICAgICAgIChjMiA9IHhnbmJ5dGUoRkNfVUNTMixjc2luLE5VTEwpKSA+IC0xKSB7Ci0gICAgICAg ICAgZXh0ZXJuIGludCBmaWxlb3JkZXI7Ci0KLSAgICAgICAgICBpZiAodHJfaW50KSB7ICAgICAg ICAgICAgICAgICAvKiBJbnRlcnJ1cHRlZD8gKi8KLSAgICAgICAgICAgICAgcHJpbnRmKCJeQy4u LlxuIik7ICAgICAgICAvKiBQcmludCBtZXNzYWdlICovCi0gICAgICAgICAgICAgIHogPSAwOwot ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZGVidWcoRjAwMSwi WExBVEUgYyIsIiIsYyk7Ci0gICAgICAgICAgZGVidWcoRjAwMSwiWExBVEUgYzIiLCIiLGMyKTsK LQotICAgICAgICAgIC8qIEFuZCB0aGVuIHNlbmQgVUNTLTIgYnl0ZSB0byB0cmFuc2xhdGUtYW5k LW91dHB1dCBtYWNoaW5lICovCi0KLSAgICAgICAgICBpZiAoKHggPSB4cG5ieXRlKGZpbGVvcmRl cj9jMjpjLFRDX1VDUzIsY3NvdXQsZm4pKSA8IDApIHsKLSAgICAgICAgICAgICAgeiA9IC0xOwot ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKCh4ID0geHBu Ynl0ZShmaWxlb3JkZXI/YzpjMixUQ19VQ1MyLGNzb3V0LGZuKSkgPCAwKSB7Ci0gICAgICAgICAg ICAgIHogPSAtMTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgfQot I2Vsc2UKLSAgICB3aGlsZSAoKGMgPSB4Z25ieXRlKEZDX1VDUzIsY3NpbixOVUxMKSkgPiAtMSkg ewotICAgICAgICAgIGlmICh0cl9pbnQpIHsgICAgICAgICAgICAgICAgIC8qIEludGVycnVwdGVk PyAqLwotICAgICAgICAgICAgICBwcmludGYoIl5DLi4uXG4iKTsgICAgICAgIC8qIFByaW50IG1l c3NhZ2UgKi8KLSAgICAgICAgICAgICAgeiA9IDA7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgIH0KLSAgICAgICAgICBpZiAoKHggPSB4cG5ieXRlKGMsVENfVUNTMixjc291dCxmbikp IDwgMCkgewotICAgICAgICAgICAgICB6ID0gLTE7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgIH0KLSAgICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSNlbmRpZiAvKiBVTklD T0RFICovCi0KLSAgeHhsYXRlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21t b24gZXhpdCBwb2ludCAqLwotCi0jaWZuZGVmIEFNSUdBCi0jaWZuZGVmIE1BQwotICAgIHNpZ25h bChTSUdJTlQsb2xkc2lnKTsgICAgICAgICAgICAgIC8qIFB1dCBvbGQgc2lnbmFsIGFjdGlvbiBi YWNrLiAqLwotI2VuZGlmIC8qIE1BQyAqLwotI2VuZGlmIC8qIEFNSUdBICovCi0gICAgdHJfaW50 ID0gMDsKLSAgICBpZiAoeiA8IDApIHsKLSAgICAgICAgaWYgKHogPT0gLTEpCi0gICAgICAgICAg cHJpbnRmKCI/RmlsZSBvdXRwdXQgZXJyb3I6ICVzXG4iLGNrX2VycnN0cigpKTsKLSAgICAgICAg eiA9IDA7Ci0gICAgfQotICAgIHpjbG9zZShaSUZJTEUpOyAgICAgICAgICAgICAgICAgICAgIC8q IENsb3NlIGZpbGVzICovCi0gICAgemNsb3NlKGZpbGVjb2RlKTsgICAgICAgICAgICAgICAgICAg LyogLi4uICovCi0gICAgcmV0dXJuKHN1Y2Nlc3MgPSB6KTsgICAgICAgICAgICAgICAgLyogYW5k IHJldHVybiBzdGF0dXMuICovCi19Ci0KLWludAotZG94bGF0ZSgpIHsKLSNpZmRlZiBPUzJPTkxZ Ci0gICAgZXh0ZXJuIGludCB0dF9mb250OwotI2VuZGlmIC8qIE9TMk9OTFkgKi8KLSNpZmRlZiBV TklYCi0gICAgZXh0ZXJuIGNoYXIgKiogbXRjaHM7ICAgICAgICAgICAgICAgLyogenhwYW5kKCkg ZmlsZSBsaXN0ICovCi0jZW5kaWYgLyogVU5JWCAqLwotICAgIGludCB4LCB5LCBpbmNzLCBvdXRj cywgbXVsdGlwbGUgPSAwLCB3aWxkID0gMCwgZmMgPSAwLCBsZW4gPSAwOwotICAgIGludCBvZmlz ZGlyID0gMDsKLSAgICBjaGFyICogcywgKiB0b2NzID0gIiI7Ci0KLSAgICBpZiAoKHggPSBjbWlm aSgiRmlsZShzKSB0byB0cmFuc2xhdGUiLCIiLCZzLCZ3aWxkLHh4c3RyaW5nKSkgPCAwKSB7Ci0g ICAgICAgIGlmICh4ID09IC0zKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9OYW1lIG9mIGFuIGV4 aXN0aW5nIGZpbGVcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfSBlbHNl Ci0gICAgICAgICAgcmV0dXJuKHgpOwotICAgIH0KLSAgICBja3N0cm5jcHkobGluZSxzLExJTkJV RlNJWik7ICAgICAgICAvKiBTYXZlIGNvcHkgb2Ygc3RyaW5nIGp1c3QgcGFyc2VkLiAqLwotCi0g ICAgaWYgKChpbmNzID0gY21rZXkoZmNzdGFiLG5maWxjLCJmcm9tIGNoYXJhY3Rlci1zZXQiLCIi LHh4c3RyaW5nKSkgPCAwKQotICAgICAgcmV0dXJuKGluY3MpOwotCi0jaWZkZWYgT1MyCi0gICAg aWYgKGlzdW5pY29kZSgpKQotICAgICAgdG9jcyA9ICJ1Y3MyIjsKLSAgICBlbHNlCi0jZW5kaWYg LyogT1MyICovCi0gICAgICB0b2NzID0gZ2V0ZGNzZXQoKTsKLQotICAgIGlmICgob3V0Y3MgPSBj bWtleShmY3N0YWIsbmZpbGMsInRvIGNoYXJhY3Rlci1zZXQiLHRvY3MseHhzdHJpbmcpKSA8IDAp Ci0gICAgICByZXR1cm4ob3V0Y3MpOwotICAgIGlmICgoeCA9IGNtb2ZpKCJvdXRwdXQgZmlsZSIs Q1RUTkFNLCZzLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgaWYgKHggPiAxKQotICAg ICAgb2Zpc2RpciA9IDE7Ci0KLSAgICBsZW4gPSBja3N0cm5jcHkodG1wYnVmLHMsVE1QQlVGU0la KTsKLSAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsgICAvKiBDb25maXJtIHRo ZSBjb21tYW5kICovCi0KLSAgICBpZiAobGVuIDwgMSkKLSAgICAgIHJldHVybigtMik7Ci0KLSAg ICBpZiAob2Zpc2RpcikKLSAgICAgIG11bHRpcGxlID0gMjsKLSAgICBlbHNlIGlmICh3aWxkKSB7 Ci0gICAgICAgIGlmIChpc2Rpcih0bXBidWYpKQotICAgICAgICAgIG11bHRpcGxlID0gMjsKLSAg ICAgICAgZWxzZSBpZiAoIXN0cmNtcCh0bXBidWYsQ1RUTkFNKSkKLSAgICAgICAgICBtdWx0aXBs ZSA9IDE7Ci0jaWZkZWYgT1MyCi0gICAgICAgIGVsc2UgaWYgKCFzdHJpY21wKHRtcGJ1ZiwiY29u IikgfHwgIXN0cmljbXAodG1wYnVmLCJjb246IikpCi0gICAgICAgICAgbXVsdGlwbGUgPSAxOwot I2Vsc2UKLSNpZmRlZiBVTklYT1JPU0sKLSAgICAgICAgZWxzZSBpZiAoIXN0cm5jbXAodG1wYnVm LCIvZGV2LyIsNCkpCi0gICAgICAgICAgbXVsdGlwbGUgPSAxOwotI2VuZGlmIC8qIFVOSVhPUk9T SyAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICBpZiAoIW11bHRpcGxlKSB7Ci0gICAgICAg ICAgICBwcmludGYoIj9BIHNpbmdsZSBmaWxlIHBsZWFzZVxuIik7Ci0gICAgICAgICAgICByZXR1 cm4oLTkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICghbXVsdGlwbGUpIHsgICAgICAgICAg ICAgICAgICAgIC8qIEp1c3Qgb25lIGZpbGUgKi8KLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSB4 bGF0ZShsaW5lLHRtcGJ1ZixpbmNzLG91dGNzKSk7Ci0gICAgfSBlbHNlIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogVHJhbnNsYXRlIG11bHRpcGxlIGZpbGVzICovCi0gICAgICAgIGNo YXIgZGlyYnVmW0NLTUFYUEFUSCs0XTsKLSAgICAgICAgaW50IGs7Ci0jaWZuZGVmIFpYUkVXSU5E Ci0gICAgICAgIGludCBmbGFncyA9IFpYX0ZJTE9OTFk7Ci0jZW5kaWYgLyogWlhSRVdJTkQgKi8K LQotICAgICAgICBpZiAobXVsdGlwbGUgPT0gMikgeyAgICAgICAgICAgIC8qIFRhcmdldCBpcyBh IGRpcmVjdG9yeSAqLwotICAgICAgICAgICAgayA9IGNrc3RybmNweShkaXJidWYsdG1wYnVmLENL TUFYUEFUSCsxKSAtIDE7Ci0gICAgICAgICAgICBpZiAoayA8IDApCi0gICAgICAgICAgICAgIHJl dHVybigtMik7Ci0jaWZkZWYgT1MyT1JVTklYCi0gICAgICAgICAgICBpZiAoZGlyYnVmW2tdICE9 ICcvJykgewotICAgICAgICAgICAgICAgIGRpcmJ1ZltrKzFdID0gJy8nOwotICAgICAgICAgICAg ICAgIGRpcmJ1ZltrKzJdID0gTlVMOwotICAgICAgICAgICAgfQotI2Vsc2UKLSNpZmRlZiBPU0sK LSAgICAgICAgICAgIGlmIChkaXJidWZba10gIT0gJy8nKSB7Ci0gICAgICAgICAgICAgICAgZGly YnVmW2srMV0gPSAnLyc7Ci0gICAgICAgICAgICAgICAgZGlyYnVmW2srMl0gPSBOVUw7Ci0gICAg ICAgICAgICB9Ci0jZWxzZQotI2lmZGVmIFZNUwotICAgICAgICAgICAgaWYgKGNrbWF0Y2goIiou RElSOzEiLHMsMCwwKSkKLSAgICAgICAgICAgICAgayA9IGN2dGRpcih0bXBidWYsZGlyYnVmLFRN UEJVRlNJWik7Ci0gICAgICAgICAgICBpZiAoZGlyYnVmW2tdICE9ICddJyAmJgotICAgICAgICAg ICAgICAgIGRpcmJ1ZltrXSAhPSAnPicgJiYKLSAgICAgICAgICAgICAgICBkaXJidWZba10gIT0g JzonKQotICAgICAgICAgICAgICByZXR1cm4oLTIpOwotI2Vsc2UKLSNpZmRlZiBkYXRhZ2VuZXJh bAotICAgICAgICAgICAgaWYgKGRpcmJ1ZltrXSAhPSAnOicpIHsKLSAgICAgICAgICAgICAgICBk aXJidWZbaysxXSA9ICc6JzsKLSAgICAgICAgICAgICAgICBkaXJidWZbaysyXSA9IE5VTDsKLSAg ICAgICAgICAgIH0KLSNlbHNlCi0jaWZkZWYgU1RSQVRVUwotICAgICAgICAgICAgaWYgKGRpcmJ1 ZltrXSAhPSAnPicpIHsKLSAgICAgICAgICAgICAgICBkaXJidWZbaysxXSA9ICc+JzsKLSAgICAg ICAgICAgICAgICBkaXJidWZbaysyXSA9IE5VTDsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBT VFJBVFVTICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNl bmRpZiAvKiBPU0sgKi8KLSNlbmRpZiAvKiBPUzJPUlVOSVggKi8KLSAgICAgICAgfQotCi0jaWZk ZWYgWlhSRVdJTkQKLSAgICAgICAgZmMgPSB6eHJld2luZCgpOyAgICAgICAgICAgICAgICAvKiBS ZXdpbmQgdGhlIGZpbGUgbGlzdCAqLwotI2Vsc2UKLSAgICAgICAgaWYgKG1hdGNoZG90KSAgZmxh Z3MgfD0gWlhfTUFUQ0hET1Q7Ci0gICAgICAgIGZjID0gbnp4cGFuZChsaW5lLGZsYWdzKTsKLSNl bmRpZiAvKiBaWFJFV0lORCAqLwotCi0gICAgICAgIGlmIChmYyA8IDEpIHsKLSAgICAgICAgICAg IHByaW50ZigiP1dpbGRjYXJkIGV4cGFuc2lvbiBlcnJvclxuIik7Ci0gICAgICAgICAgICByZXR1 cm4oLTkpOwotICAgICAgICB9Ci0jaWZkZWYgVU5JWAotICAgICAgICBzaF9zb3J0KG10Y2hzLE5V TEwsZmMsMCwwLGZpbGVjYXNlKTsgLyogU29ydCB0aGUgZmlsZSBsaXN0ICovCi0jZW5kaWYgLyog VU5JWCAqLwotCi0gICAgICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAgICAgICAgICAgLyogTG9v cCB0aHJvdWdoIHRoZSBmaWxlcyAqLwotICAgICAgICAgICAgem5leHQobGluZSk7Ci0gICAgICAg ICAgICBpZiAoIWxpbmVbMF0pCi0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYg KG11bHRpcGxlID09IDIpCi0gICAgICAgICAgICAgIGNrbWFrbXNnKHRtcGJ1ZixUTVBCVUZTSVos ZGlyYnVmLGxpbmUsTlVMTCxOVUxMKTsKLSAgICAgICAgICAgIGlmICh4bGF0ZShsaW5lLHRtcGJ1 ZixpbmNzLG91dGNzKSA8IDEpCi0gICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0g ICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLX0KLSNlbmRpZiAvKiBO T0NTRVRTICovCi0KLXN0YXRpYyBjaGFyIGhvbXB0aGJ1ZltDS01BWFBBVEgrMV07Ci0KLWNoYXIg KgotaG9tZXBhdGgoKSB7Ci0gICAgaW50IHg7Ci0gICAgZXh0ZXJuIGNoYXIgKiBteWhvbWU7Ci0g ICAgY2hhciAqIGg7Ci0KLSAgICBoID0gbXlob21lID8gbXlob21lIDogemhvbWUoKTsKLSAgICBo b21wdGhidWZbMF0gPSBOVUw7Ci0jaWZkZWYgVU5JWE9ST1NLCi0gICAgeCA9IGNrc3RybmNweSho b21wdGhidWYsaCxDS01BWFBBVEgrMSk7Ci0gICAgaWYgKHggPD0gMCkgewotICAgICAgICBob21w dGhidWZbMF0gPSAnLyc7Ci0gICAgICAgIGhvbXB0aGJ1ZlsxXSA9IE5VTDsKLSAgICB9IGVsc2Ug aWYgKHggPCBDS01BWFBBVEggLSAyICYmIGhvbXB0aGJ1Zlt4LTFdICE9ICcvJykgewotICAgICAg ICBob21wdGhidWZbeF0gPSAnLyc7Ci0gICAgICAgIGhvbXB0aGJ1Zlt4KzFdID0gTlVMOwotICAg IH0KLSAgICByZXR1cm4oaG9tcHRoYnVmKTsKLSNlbHNlCi0jaWZkZWYgU1RSQVRVUwotICAgIGlm IChzdHJsZW4oaCkgPCBDS01BWFBBVEgpCi0gICAgICBzcHJpbnRmKGhvbXB0aGJ1ZiwiJXM+Iixo KTsJLyogU0FGRSAqLwotICAgIHJldHVybihob21wdGhidWYpOwotI2Vsc2UKLSAgICByZXR1cm4o aCk7Ci0jZW5kaWYgLyogU1RSQVRVUyAqLwotI2VuZGlmIC8qIFVOSVhPUk9TSyAqLwotfQotCi0v KiAgRCBPIEwgTyBHICAtLSAgRG8gdGhlIGxvZyBjb21tYW5kICAqLwotCi1pbnQKLWRvbG9nKHgp IGludCB4OyB7Ci0gICAgaW50IHksIGRpc3A7IGNoYXIgKnMgPSBOVUxMLCAqIHAgPSBOVUxMLCAq IHEgPSBOVUxMOwotICAgIGV4dGVybiBpbnQgaXNndWVzdDsKLSNpZmRlZiBaRk5RRlAKLSAgICBz dHJ1Y3QgemZuZnAgKiBmbnA7Ci0jZW5kaWYgLyogWkZOUUZQICovCi0KLSAgICBpZiAoaXNndWVz dCkgewotICAgICAgICBwcmludGYoIj9Bbm9ueW1vdXMgbG9nIGNyZWF0aW9uIG5vdCBhbGxvd2Vk XG4iKTsKLSAgICAgICAgcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgc3dpdGNoICh4KSB7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogV2hpY2ggbG9nLi4uICovCi0KLSNpZmRlZiBERUJVRwotICAg ICAgY2FzZSBMT0dEOgotICAgICAgICBxID0gImRlYnVnLmxvZyI7Ci0gICAgICAgIHkgPSBjbW9m aSgiTmFtZSBvZiBkZWJ1Z2dpbmcgbG9nIGZpbGUiLHEsJnMseHhzdHJpbmcpOwotICAgICAgICBi cmVhazsKLSNlbmRpZiAvKiBERUJVRyAqLwotCi0gICAgICBjYXNlIExPR1A6Ci0gICAgICAgIHEg PSAicGFja2V0LmxvZyI7Ci0gICAgICAgIHkgPSBjbW9maSgiTmFtZSBvZiBwYWNrZXQgbG9nIGZp bGUiLHEsJnMseHhzdHJpbmcpOwotICAgICAgICBicmVhazsKLQotI2lmbmRlZiBOT0xPQ0FMCi0g ICAgICBjYXNlIExPR1M6Ci0gICAgICAgIHEgPSAic2Vzc2lvbi5sb2ciOwotICAgICAgICB5ID0g Y21vZmkoIk5hbWUgb2Ygc2Vzc2lvbiBsb2cgZmlsZSIscSwmcyx4eHN0cmluZyk7Ci0gICAgICAg IGJyZWFrOwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmZGVmIFRMT0cKLSAgICAgIGNhc2Ug TE9HVDoKLSAgICAgICAgcSA9ICJ0cmFuc2FjdC5sb2ciOwotICAgICAgICB5ID0gY21vZmkoIk5h bWUgb2YgdHJhbnNhY3Rpb24gbG9nIGZpbGUiLHEsJnMseHhzdHJpbmcpOwotICAgICAgICBicmVh azsKLSNlbmRpZiAvKiBUTE9HICovCi0KLSNpZmRlZiBDS0xPR0RJQUwKLSAgICAgIGNhc2UgTE9H TTogewotICAgICAgICAgIGludCBtLCBuOwotICAgICAgICAgIGNoYXIgbXlwYXRoW0NLTUFYUEFU SCsxXTsKLSAgICAgICAgICBxID0gQ1hMT0dGSUxFOwotICAgICAgICAgIG0gPSBja3N0cm5jcHko bXlwYXRoLGhvbWVwYXRoKCksQ0tNQVhQQVRIKTsKLSAgICAgICAgICBuID0gc3RybGVuKENYTE9H RklMRSk7Ci0gICAgICAgICAgaWYgKG0gKyBuIDwgQ0tNQVhQQVRIKQotICAgICAgICAgICAgY2tz dHJuY2F0KG15cGF0aCxDWExPR0ZJTEUsQ0tNQVhQQVRIKTsKLSAgICAgICAgICBlbHNlCi0gICAg ICAgICAgICBja3N0cm5jcHkobXlwYXRoLENYTE9HRklMRSxDS01BWFBBVEgpOwotICAgICAgICAg IHkgPSBjbW9maSgiTmFtZSBvZiBjb25uZWN0aW9uIGxvZyBmaWxlIixteXBhdGgsJnMseHhzdHJp bmcpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotI2VuZGlmIC8qIENLTE9HRElBTCAqLwot Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBwcmludGYoIlxuP1Vua25vd24gbG9nIGRlc2lnbmF0 b3IgLSAlZFxuIix4KTsKLSAgICAgICAgcmV0dXJuKC0yKTsKLSAgICB9Ci0gICAgaWYgKHkgPCAw KSByZXR1cm4oeSk7Ci0gICAgaWYgKHkgPT0gMikgeyAgICAgICAgICAgICAgICAgICAgICAgLyog SWYgdGhleSBnYXZlIGEgZGlyZWN0b3J5IG5hbWUgKi8KLSAgICAgICAgaW50IGs7Ci0gICAgICAg IGNoYXIgKiBkcyA9ICIvIjsKLSAgICAgICAgayA9IHN0cmxlbihzKTsKLSAgICAgICAgaWYgKGsg PiAwICYmIHNbay0xXSA9PSAnLycpIGRzID0gIiI7Ci0gICAgICAgIGNrbWFrbXNnKHRtcGJ1ZixU TVBCVUZTSVoscyxkcyxxLE5VTEwpOwotICAgICAgICBzID0gdG1wYnVmOwotICAgIH0KLSNpZmRl ZiBaRk5RRlAKLSNpZmRlZiBPUzJPUlVOSVgKLSAgICBpZiAoKnMgIT0gJ3wnKSAgICAgICAgICAg ICAgICAgICAgICAvKiBBbGxvdyBmb3IgcGlwZXMgKi8KLSNlbHNlCi0jaWZkZWYgT1NLCi0gICAg aWYgKCpzICE9ICd8JykKLSNlbmRpZiAvKiBPU0sgKi8KLSNlbmRpZiAvKiBPUzJPUlVOSVggKi8K LSAgICAgIGlmICgoZm5wID0gemZucWZwKHMsVE1QQlVGU0laIC0gMSx0bXBidWYpKSkgewotICAg ICAgICAgIGlmIChmbnAtPmZwYXRoKQotICAgICAgICAgICAgaWYgKChpbnQpIHN0cmxlbihmbnAt PmZwYXRoKSA+IDApCi0gICAgICAgICAgICAgIHMgPSBmbnAtPmZwYXRoOwotICAgICAgfSAvKiBl bHNlIGlmIGVycm9yIGtlZXAgb3JpZ2luYWwgc3RyaW5nICovCi0jZW5kaWYgLyogWkZOUUZQICov Ci0KLSAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7Ci0gICAgcyA9IGxpbmU7Ci0jaWZk ZWYgTUFDCi0gICAgeSA9IDA7Ci0jZWxzZQotCi0gICAgcCA9ICJuZXciOwotI2lmZGVmIFRMT0cK LSAgICBpZiAoKHggPT0gTE9HVCAmJiB0bG9nZm10ID09IDIpIHx8IHggPT0gTE9HTSkKLSAgICAg IHAgPSAiYXBwZW5kIjsKLSNlbmRpZiAvKiBUTE9HICovCi0KLSAgICBpZiAoKHkgPSBjbWtleShk aXNwdGIsMiwiRGlzcG9zaXRpb24iLHAseHhzdHJpbmcpKSA8IDApCi0gICAgICByZXR1cm4oeSk7 Ci0jZW5kaWYgLyogTUFDICovCi0gICAgZGlzcCA9IHk7Ci0gICAgaWYgKCh5ID0gY21jZm0oKSkg PCAwKSByZXR1cm4oeSk7Ci0KLSAgICBzd2l0Y2ggKHgpIHsKLQotI2lmZGVmIERFQlVHCi0gICAg ICBjYXNlIExPR0Q6Ci0gICAgICAgIHJldHVybihkZWJsb2cgPSBkZWJvcG4ocyxkaXNwKSk7Ci0j ZW5kaWYgLyogREVCVUcgKi8KLQotI2lmbmRlZiBOT1hGRVIKLSAgICAgIGNhc2UgTE9HUDoKLSAg ICAgICAgcmV0dXJuKHBrdGxvZyA9IHBrdG9wbihzLGRpc3ApKTsKLSNlbmRpZiAvKiBOT1hGRVIg Ki8KLQotI2lmbmRlZiBOT0xPQ0FMCi0gICAgICBjYXNlIExPR1M6Ci0gICAgICAgIHNldHNlc2xv ZyhzZXNvcG4ocyxkaXNwKSk7Ci0gICAgICAgIHJldHVybihzZXNsb2cpOwotI2VuZGlmIC8qIE5P TE9DQUwgKi8KLQotI2lmZGVmIFRMT0cKLSAgICAgIGNhc2UgTE9HVDoKLSAgICAgICAgcmV0dXJu KHRyYWxvZyA9IHRyYW9wbihzLGRpc3ApKTsKLSNlbmRpZiAvKiBUTE9HICovCi0KLSNpZmRlZiBD S0xPR0RJQUwKLSAgICAgIGNhc2UgTE9HTToKLSAgICAgICAgcmV0dXJuKGRpYWxvZyA9IGRpYW9w bihzLGRpc3AsMCkpOwotI2VuZGlmIC8qIENLTE9HRElBTCAqLwotCi0gICAgICBkZWZhdWx0Ogot ICAgICAgICByZXR1cm4oLTIpOwotICAgIH0KLX0KLQotI2lmbmRlZiBOT1hGRVIKLWludAotcGt0 b3BuKHMsZGlzcCkgY2hhciAqczsgaW50IGRpc3A7IHsKLSAgICBzdGF0aWMgc3RydWN0IGZpbGlu Zm8geHg7Ci0KLSAgICBpZiAoIXMpCi0gICAgICBzID0gIiI7Ci0gICAgaWYgKCEqcykKLSAgICAg IHJldHVybigwKTsKLQotICAgIGRlYnVnKEYxMTEsInBrdG9wbiIscyxkaXNwKTsKLQotICAgIHpj bG9zZShaUEZJTEUpOwotCi0jaWZkZWYgT1MyT1JVTklYCi0gICAgaWYgKHNbMF0gPT0gJ3wnKSB7 ICAgICAgICAgICAgICAgICAgLyogUGlwZSAqLwotICAgICAgICBjaGFyICogcCA9IHMgKyAxOwot ICAgICAgICBkZWJ1ZyhGMTEwLCJwa3RvcG4gcCIscCwwKTsKLSAgICAgICAgd2hpbGUgKCpwKSB7 Ci0gICAgICAgICAgICBpZiAoKnAgIT0gJyAnKQotICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcCsrOwotICAgICAgICB9Ci0gICAgICAgIGRlYnVn KEYxMTAsInBrdG9wbiBwaXBlIixwLDApOwotICAgICAgICBwa3Rsb2cgPSB6eGNtZChaUEZJTEUs cCk7Ci0gICAgICAgIGRlYnVnKEYxMDEsInBrdG9wbiBzZXNsb2ciLCIiLHNlc2xvZyk7Ci0gICAg fSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSAqLwotI2VuZGlmIC8q IE9TMk9SVU5JWCAqLwotICAgICAgICBpZiAoZGlzcCkgewotICAgICAgICAgICAgeHguYnMgPSAw OyB4eC5jcyA9IDA7IHh4LnJsID0gMDsgeHgub3JnID0gMDsgeHguY2MgPSAwOwotICAgICAgICAg ICAgeHgudHlwID0gMDsgeHguZHNwID0gWFlGWl9BOyB4eC5vc19zcGVjaWZpYyA9ICIiOwotICAg ICAgICAgICAgeHgubGJsb3B0cyA9IDA7Ci0gICAgICAgICAgICBwa3Rsb2cgPSB6b3Blbm8oWlBG SUxFLHMsTlVMTCwmeHgpOwotICAgICAgICB9IGVsc2UgcGt0bG9nID0gem9wZW5vKFpQRklMRSxz LE5VTEwsTlVMTCk7Ci0gICAgICAgIGlmICghcGt0bG9nICYmICFxdWlldCkKLSAgICAgICAgICBw cmludGYoIj8lcyAtICVzXG4iLHMsY2tfZXJyc3RyKCkpOwotI2lmZGVmIE9TMk9SVU5JWAotICAg IH0KLSNlbmRpZiAvKiBPUzJPUlVOSVggKi8KLSAgICBpZiAocGt0bG9nID4gMCkKLSAgICAgIGNr c3RybmNweShwa3RmaWwscyxDS01BWFBBVEgrMSk7Ci0gICAgZWxzZQotICAgICAgKnBrdGZpbCA9 ICdcMCc7Ci0gICAgcmV0dXJuKHBrdGxvZyk7Ci19Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLWlu dAotdHJhb3BuKHMsZGlzcCkgY2hhciAqczsgaW50IGRpc3A7IHsKLSNpZmRlZiBUTE9HCi0gICAg c3RhdGljIHN0cnVjdCBmaWxpbmZvIHh4OwotCi0gICAgaWYgKCFzKQotICAgICAgcyA9ICIiOwot ICAgIGlmICghKnMpCi0gICAgICByZXR1cm4oMCk7Ci0KLSAgICBkZWJ1ZyhGMTExLCJ0cmFvcG4i LHMsZGlzcCk7Ci0gICAgZGVidWcoRjEwMSwidHJhb3BuIHRsb2dmbXQiLCIiLHRsb2dmbXQpOwot Ci0gICAgemNsb3NlKFpURklMRSk7Ci0KLSNpZmRlZiBPUzJPUlVOSVgKLSAgICBpZiAodGxvZ2Zt dCA9PSAyKSB7ICAgICAgICAgICAgICAgICAvKiBGVFAgZm9ybWF0IGlzIHNwZWNpYWwuLi4gKi8K LSAgICAgICAgVk9JRCBkb2lrbG9nKCk7Ci0gICAgICAgIGlmICghZGlzcCkgICAgICAgICAgICAg ICAgICAgICAgLyogQXBwZW5kPyAqLwotICAgICAgICAgIGlmICh6Y2hraShzKSA+IC0xKSAgICAg ICAgICAgIC8qIE5vIC0gZG9lcyBmaWxlIGV4aXN0PyAqLwotICAgICAgICAgICAgKFZPSUQpIHpk ZWxldChzKTsgICAgICAgICAgIC8qIFllcyAtIGRlbGV0ZSBpdC4gKi8KLSAgICAgICAgeGZlcmxv ZyA9IDE7Ci0gICAgICAgIGNrc3RybmNweSh0cmFmaWwscyxDS01BWFBBVEgpOwotICAgICAgICBt YWtlc3RyKCZ4ZmVyZmlsZSxzKTsKLSAgICAgICAgZG9pa2xvZygpOwotICAgICAgICByZXR1cm4o MSk7Ci0gICAgfQotICAgIGlmIChzWzBdID09ICd8JykgeyAgICAgICAgICAgICAgICAgIC8qIFBp cGUgKi8KLSAgICAgICAgY2hhciAqIHAgPSBzICsgMTsKLSAgICAgICAgZGVidWcoRjExMCwidHJh b3BuIHAiLHAsMCk7Ci0gICAgICAgIHdoaWxlICgqcCkgewotICAgICAgICAgICAgaWYgKCpwICE9 ICcgJykKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg ICAgIHArKzsKLSAgICAgICAgfQotICAgICAgICBkZWJ1ZyhGMTEwLCJ0cmFvcG4gcGlwZSIscCww KTsKLSAgICAgICAgdHJhbG9nID0genhjbWQoWlRGSUxFLHApOwotICAgICAgICBkZWJ1ZyhGMTAx LCJ0cmFvcG4gdHJhbG9nIiwiIix0cmFsb2cpOwotICAgIH0KLSNlbmRpZiAvKiBPUzJPUlVOSVgg Ki8KLQotICAgIGlmIChzWzBdICE9ICd8JykgeyAgICAgICAgICAgICAgICAgIC8qIEZpbGUgKi8K LSAgICAgICAgaWYgKGRpc3ApIHsKLSAgICAgICAgICAgIHh4LmJzID0gMDsgeHguY3MgPSAwOyB4 eC5ybCA9IDA7IHh4Lm9yZyA9IDA7IHh4LmNjID0gMDsKLSAgICAgICAgICAgIHh4LnR5cCA9IDA7 IHh4LmRzcCA9IFhZRlpfQTsgeHgub3Nfc3BlY2lmaWMgPSAiIjsKLSAgICAgICAgICAgIHh4Lmxi bG9wdHMgPSAwOwotICAgICAgICAgICAgdHJhbG9nID0gem9wZW5vKFpURklMRSxzLE5VTEwsJnh4 KTsKLSAgICAgICAgfSBlbHNlIHRyYWxvZyA9IHpvcGVubyhaVEZJTEUscyxOVUxMLE5VTEwpOwot ICAgIH0KLSAgICBpZiAoIXRyYWxvZyAmJiAhcXVpZXQpCi0gICAgICBwcmludGYoIj8lcyAtICVz XG4iLHMsY2tfZXJyc3RyKCkpOwotICAgIGlmICh0cmFsb2cgPiAwICYmIHRsb2dmbXQgPiAwKSB7 Ci0gICAgICAgIGNrc3RybmNweSh0cmFmaWwscyxDS01BWFBBVEgpOwotICAgICAgICB0bG9nKEYx MTAsIlRyYW5zYWN0aW9uIExvZzoiLHZlcnNpbywwTCk7Ci0jaWZuZGVmIE1BQwotICAgICAgICB0 bG9nKEYxMDAsY2t4c3lzLCIiLDBMKTsKLSNlbmRpZiAvKiBNQUMgKi8KLSAgICAgICAgenRpbWUo JnMpOwotICAgICAgICB0bG9nKEYxMDAscywiIiwwTCk7Ci0gICAgfSBlbHNlCi0gICAgICAqdHJh ZmlsID0gJ1wwJzsKLSAgICByZXR1cm4odHJhbG9nKTsKLSNlbHNlCi0gICAgcmV0dXJuKDApOwot I2VuZGlmIC8qIFRMT0cgKi8KLX0KLQotI2lmbmRlZiBOT0xPQ0FMCi1pbnQKLXNlc29wbihzLGRp c3ApIGNoYXIgKiBzOyBpbnQgZGlzcDsgewotICAgIHN0YXRpYyBzdHJ1Y3QgZmlsaW5mbyB4eDsK LSAgICBleHRlcm4gaW50IHRzc3RhdGU7Ci0KLSAgICB0c3N0YXRlID0gMDsgICAgICAgICAgICAg ICAgICAgICAgICAvKiBTZXNzaW9uIGxvZyB0aW1lc3RhbXAgc3RhdGUgKi8KLQotICAgIGlmICgh cykKLSAgICAgIHMgPSAiIjsKLSAgICBpZiAoISpzKQotICAgICAgcmV0dXJuKDApOwotCi0gICAg ZGVidWcoRjExMSwic2Vzb3BuIixzLGRpc3ApOwotCi0gICAgemNsb3NlKFpTRklMRSk7Ci0KLSNp ZmRlZiBPUzJPUlVOSVgKLSAgICBpZiAoc1swXSA9PSAnfCcpIHsgICAgICAgICAgICAgICAgICAv KiBQaXBlICovCi0gICAgICAgIGNoYXIgKiBwID0gcyArIDE7Ci0gICAgICAgIGRlYnVnKEYxMTAs InNlc29wbiBwIixwLDApOwotICAgICAgICB3aGlsZSAoKnApIHsKLSAgICAgICAgICAgIGlmICgq cCAhPSAnICcpCi0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZWxzZQotICAgICAg ICAgICAgICBwKys7Ci0gICAgICAgIH0KLSAgICAgICAgZGVidWcoRjExMCwic2Vzb3BuIHBpcGUi LHAsMCk7Ci0gICAgICAgIHNldHNlc2xvZyh6eGNtZChaU0ZJTEUscCkpOwotICAgICAgICBkZWJ1 ZyhGMTAxLCJzZXNvcG4gc2VzbG9nIiwiIixzZXNsb2cpOwotICAgIH0gZWxzZSB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgKi8KLSNlbmRpZiAvKiBPUzJPUlVOSVggKi8KLSAg ICAgICAgaWYgKGRpc3ApIHsKLSAgICAgICAgICAgIHh4LmJzID0gMDsgeHguY3MgPSAwOyB4eC5y bCA9IDA7IHh4Lm9yZyA9IDA7IHh4LmNjID0gMDsKLSAgICAgICAgICAgIHh4LnR5cCA9IDA7IHh4 LmRzcCA9IFhZRlpfQTsgeHgub3Nfc3BlY2lmaWMgPSAiIjsKLSAgICAgICAgICAgIHh4LmxibG9w dHMgPSAwOwotICAgICAgICAgICAgc2V0c2VzbG9nKHpvcGVubyhaU0ZJTEUscyxOVUxMLCZ4eCkp OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICBzZXRzZXNsb2coem9wZW5vKFpTRklMRSxzLE5V TEwsTlVMTCkpOwotICAgICAgICBpZiAoIXNlc2xvZyAmJiAhcXVpZXQpCi0gICAgICAgICAgcHJp bnRmKCI/JXMgLSAlc1xuIixzLGNrX2VycnN0cigpKTsKLSNpZmRlZiBPUzJPUlVOSVgKLSAgICB9 Ci0jZW5kaWYgLyogT1MyT1JVTklYICovCi0gICAgaWYgKHNlc2xvZyA+IDApCi0gICAgICBja3N0 cm5jcHkoc2VzZmlsLHMsQ0tNQVhQQVRIKzEpOwotICAgIGVsc2UKLSAgICAgICpzZXNmaWwgPSAn XDAnOwotICAgIHJldHVybihzZXNsb2cpOwotfQotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNlbmRp ZiAvKiBOT0lDUCAqLwotCi1pbnQKLWRlYm9wbihzLGRpc3ApIGNoYXIgKnM7IGludCBkaXNwOyB7 Ci0jaWZkZWYgREVCVUcKLSNpZmRlZiBDS19VVFNOQU1FCi0gICAgZXh0ZXJuIGNoYXIgdW5tX21j aFtdLCB1bm1fbmFtW10sIHVubV9yZWxbXSwgdW5tX3ZlcltdLCB1bm1fbW9kW107Ci0jZW5kaWYg LyogQ0tfVVRTTkFNRSAqLwotI2lmZGVmIE9TMgotICAgIGV4dGVybiBjaGFyIGNreHN5c3RlbVtd OwotI2VuZGlmIC8qIE9TMiAqLwotICAgIGNoYXIgKnRwOwotICAgIHN0YXRpYyBzdHJ1Y3QgZmls aW5mbyB4eDsKLQotICAgIGlmICghcykKLSAgICAgIHMgPSAiIjsKLSAgICBpZiAoISpzKQotICAg ICAgcmV0dXJuKDApOwotCi0gICAgemNsb3NlKFpERklMRSk7Ci0KLSNpZmRlZiBPUzJPUlVOSVgK LSAgICBpZiAoc1swXSA9PSAnfCcpIHsgICAgICAgICAgICAgICAgICAvKiBQaXBlICovCi0gICAg ICAgIGNoYXIgKiBwID0gcyArIDE7Ci0gICAgICAgIGRlYnVnKEYxMTAsImRlYm9wbiBwIixwLDAp OwotICAgICAgICB3aGlsZSAoKnApIHsKLSAgICAgICAgICAgIGlmICgqcCAhPSAnICcpCi0gICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBwKys7Ci0g ICAgICAgIH0KLSAgICAgICAgZGVidWcoRjExMCwiZGVib3BuIHBpcGUiLHAsMCk7Ci0gICAgICAg IGRlYmxvZyA9IHp4Y21kKFpERklMRSxwKTsKLSAgICAgICAgZGVidWcoRjEwMSwiZGVib3BuIGRl YmxvZyIsIiIsZGVibG9nKTsKLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBGaWxlICovCi0jZW5kaWYgLyogT1MyT1JVTklYICovCi0gICAgICAgIGlmIChkaXNwKSB7 Ci0gICAgICAgICAgICB4eC5icyA9IDA7IHh4LmNzID0gMDsgeHgucmwgPSAwOyB4eC5vcmcgPSAw OyB4eC5jYyA9IDA7Ci0gICAgICAgICAgICB4eC50eXAgPSAwOyB4eC5kc3AgPSBYWUZaX0E7IHh4 Lm9zX3NwZWNpZmljID0gIiI7Ci0gICAgICAgICAgICB4eC5sYmxvcHRzID0gMDsKLSAgICAgICAg ICAgIGRlYmxvZyA9IHpvcGVubyhaREZJTEUscyxOVUxMLCZ4eCk7Ci0gICAgICAgIH0gZWxzZQot ICAgICAgICAgIGRlYmxvZyA9IHpvcGVubyhaREZJTEUscyxOVUxMLE5VTEwpOwotICAgICAgICBp ZiAoIWRlYmxvZyAmJiAhcXVpZXQpCi0gICAgICAgICAgcHJpbnRmKCI/JXMgLSAlc1xuIixzLGNr X2VycnN0cigpKTsKLSNpZmRlZiBPUzJPUlVOSVgKLSAgICB9Ci0jZW5kaWYgLyogT1MyT1JVTklY ICovCi0gICAgaWYgKGRlYmxvZyA+IDApIHsKLSAgICAgICAgY2tzdHJuY3B5KGRlYmZpbCxzLENL TUFYUEFUSCsxKTsKLSAgICAgICAgZGVidWcoRjExMCwiRGVidWcgTG9nICIsdmVyc2lvLDApOwot I2lmbmRlZiBNQUMKLSNpZmRlZiBPUzIKLSAgICAgICAgZGVidWcoRjExMCxja3hzeXMsY2t4c3lz dGVtLDApOwotI2Vsc2UgLyogT1MyICovCi0gICAgICAgIGRlYnVnKEYxMDAsY2t4c3lzLCIiLDAp OwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE1BQyAqLwotI2lmZGVmIENLX1VUU05BTUUK LSAgICAgICAgaWYgKHVubV9tY2hbMF0pIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsInVuYW1l IG1hY2hpbmUiLHVubV9tY2gsMCk7Ci0gICAgICAgICAgICBpZiAodW5tX21vZFswXSkKLSAgICAg ICAgICAgICAgZGVidWcoRjExMCwidW5hbWUgbW9kZWwgICIsdW5tX21vZCwwKTsKLSAgICAgICAg ICAgIGRlYnVnKEYxMTAsInVuYW1lIHN5c25hbWUiLHVubV9uYW0sMCk7Ci0gICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJ1bmFtZSByZWxlYXNlIix1bm1fcmVsLDApOwotICAgICAgICAgICAgZGVidWco RjExMCwidW5hbWUgdmVyc2lvbiIsdW5tX3ZlciwwKTsKLSAgICAgICAgfQotI2lmZGVmIEtUQVJH RVQKLSAgICAgICAgewotICAgICAgICAgICAgY2hhciAqIHM7ICAgICAgICAgICAgICAgICAgIC8q IE1ha2VmaWxlIHRhcmdldCAqLwotICAgICAgICAgICAgcyA9IEtUQVJHRVQ7Ci0gICAgICAgICAg ICBpZiAoIXMpIHMgPSAiIjsKLSAgICAgICAgICAgIGlmICghKnMpIHMgPSAiKHVua25vd24pIjsK LSAgICAgICAgICAgIGRlYnVnKEYxMTAsImJ1aWxkIHRhcmdldCIscywwKTsKLSAgICAgICAgfQot I2VuZGlmIC8qIEtUQVJHRVQgKi8KLSAgICAgICAgZGVibG9nID0gMDsKLSAgICAgICAgenRpbWUo JnRwKTsKLSAgICAgICAgZGVibG9nID0gMTsKLSAgICAgICAgZGVidWcoRjEwMCx0cCwiIiwwKTsK LSNlbmRpZiAvKiBVVFNOQU1FICovCi0gICAgICAgIGRlYnVnKEYxMDEsImJ5dGVvcmRlciIsIiIs Ynl0ZW9yZGVyKTsKLSNpZm5kZWYgTk9JQ1AKLSNpZm5kZWYgTk9MT0NBTAotICAgICAgICBpZiAo bG9jYWwpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsIkFjdGl2ZSBjb25uZWN0aW9uOiAiLHR0 bmFtZSwwKTsKLSAgICAgICAgICAgIGlmICghbmV0d29yaykgewotICAgICAgICAgICAgICAgIGRl YnVnKEYxMDEsIlNwZWVkIiwiIixzcGVlZCk7Ci0gICAgICAgICAgICAgICAgaWYgKGh3cGFyaXR5 KQotICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiUGFyaXR5W2hhcmR3YXJlXSIscGFybmFt KChjaGFyKWh3cGFyaXR5KSwwKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTEwLCJQYXJpdHkiLHBhcm5hbSgoY2hhcilwYXJpdHkpLDApOwotICAgICAg ICAgICAgICAgIGRlYmxvZyA9IDA7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwiTW9kZW0i LGdtZG10eXAoKSwwKTsKLSAgICAgICAgICAgICAgICBkZWJsb2cgPSAxOwotICAgICAgICAgICAg fQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVidWcoRjExMCwiQWN0aXZlIGNvbm5l Y3Rpb246ICIsIm5vbmUiLDApOwotICAgICAgICB9Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2Vu ZGlmIC8qIE5PSUNQICovCi0gICAgfSBlbHNlICpkZWJmaWwgPSAnXDAnOwotICAgIHJldHVybihk ZWJsb2cpOwotI2Vsc2UKLSAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogTUFDICovCi19Ci0KLQot LyogIEMgSyBEIEEgVCBFICAtLSAgUmV0dXJucyBjdXJyZW50IGRhdGUvdGltZSBpbiBzdGFuZGFy ZCBmb3JtYXQgICovCi0KLXN0YXRpYyBjaGFyIG5vd2J1ZlsxOF07Ci0KLWNoYXIgKgotY2tkYXRl KCkgewotICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiIGNtb250aHNbXTsKLSAgICBpbnQgeDsKLSAg ICBjaGFyICogdDsgICAgICAgICAgICAgICAgICAgLyogU3Vic3RpdHV0ZSB0b2RheSdzIGRhdGUg Ki8KLSAgICBjaGFyIGRidWZbMzJdOwotICAgIHp0aW1lKCZ0KTsKLQotLyogIDAxMjM0NTY3ODkw MTIzNDU2Nzg5MDEyMyAqLwotLyogIFNhdCBKdWwgIDQgMTI6MTY6NDMgMTk5OCAqLwotCi0gICAg Y2tzdHJuY3B5KGRidWYsdCwzMik7Ci0gICAgdCA9IGRidWY7Ci0gICAgZGVidWcoRjExMCwiY2tk YXRlIGRidWYiLGRidWYsMCk7Ci0gICAgbm93YnVmWzBdID0gdFsyMF07Ci0gICAgbm93YnVmWzFd ID0gdFsyMV07Ci0gICAgbm93YnVmWzJdID0gdFsyMl07Ci0gICAgbm93YnVmWzNdID0gdFsyM107 Ci0KLSAgICBub3didWZbNF0gPSBOVUw7Ci0gICAgZGVidWcoRjExMCwiY2tkYXRlIG5vd2J1ZiIs bm93YnVmLDApOwotCi0gICAgdFs3XSA9IE5VTDsKLSAgICBpZiAoKHggPSBsb29rdXAoY21vbnRo cyx0KzQsMTIsTlVMTCkpIDwgMCkgewotICAgICAgICBkZWJ1ZyhGMTEwLCJja2RhdGUgYmFkIG1v bnRoIix0LDApOwotICAgICAgICByZXR1cm4oIjxCQURfTU9OVEg+Iik7Ci0gICAgfQotICAgIHNw cmludGYobm93YnVmKzQsIiUwMmQiLHgpOyAgICAgICAgIC8qIFNBRkUgKi8KLSAgICBub3didWZb Nl0gPSAodFs4XSA9PSBTUCkgPyAnMCcgOiB0WzhdOwotICAgIG5vd2J1Zls3XSA9IHRbOV07Ci0g ICAgbm93YnVmWzhdID0gJyAnOwotCi0gICAgbm93YnVmWzldID0gTlVMOwotICAgIGRlYnVnKEYx MTAsImNrZGF0ZSBub3didWYiLG5vd2J1ZiwwKTsKLQotICAgIGZvciAoeCA9IDExOyB4IDwgMTk7 IHgrKykgbm93YnVmW3gtMl0gPSB0W3hdOwotICAgIG5vd2J1ZlsxN10gPSBOVUw7Ci0gICAgZGVi dWcoRjExMCwiY2tkYXRlIG5vd2J1ZiIsbm93YnVmLDApOwotCi0gICAgcmV0dXJuKChjaGFyICop bm93YnVmKTsKLX0KLQotI2lmbmRlZiBOT0lDUAotI2lmZGVmIENLTE9HRElBTAotCi0vKgotICBm YyA9IDAgZm9yIGluaXRpYWwgb3BlbiwgbWVhbmluZyBvcGVuLCB0aGVuIGNsb3NlIGltbWVkaWF0 ZWx5LgotICBmYyA+IDAgZm9yIHN1YnNlcXVlbnQgb3BlbnMsIG1lYW5pbmcgb3BlbiBmb3IgdXNl LCBsZWF2ZSBvcGVuLgotKi8KLWludAotZGlhb3BuKHMsZGlzcCxmYykgY2hhciAqczsgaW50IGRp c3AsIGZjOyB7Ci0gICAgc3RhdGljIHN0cnVjdCBmaWxpbmZvIHh4OwotCi0gICAgaWYgKCFzKQot ICAgICAgcyA9ICIiOwotICAgIGlmICghKnMpCi0gICAgICByZXR1cm4oMCk7Ci0KLSAgICBkZWJ1 ZyhGMTEwLCJkaWFvcG4gbG9nIixzLDApOwotICAgIGRlYnVnKEYxMDEsImRpYW9wbiBmYyIscyxm Yyk7Ci0gICAgZGVidWcoRjEwMSwiZGlhb3BuIGRpc3AgMSIscyxkaXNwKTsKLSAgICBpZiAoZmMp IGRpc3AgPSAxOyAgICAgICAgICAgICAgICAgICAvKiBGb3JjZSBhcHBlbmQgaWYgb3BlbiBmb3Ig dXNlICovCi0gICAgZGVidWcoRjEwMSwiZGlhb3BuIGRpc3AgMiIscyxkaXNwKTsKLQotICAgIHpj bG9zZShaRElGSUwpOyAgICAgICAgICAgICAgICAgICAgIC8qIEluIGNhc2UgYSBsb2cgd2FzIGFs cmVhZHkgb3BlbiAqLwotCi0jaWZkZWYgT1MyT1JVTklYCi0gICAgaWYgKHNbMF0gPT0gJ3wnKSB7 ICAgICAgICAgICAgICAgICAgLyogUGlwZSAqLwotICAgICAgICBjaGFyICogcCA9IHMgKyAxOwot ICAgICAgICBkZWJ1ZyhGMTEwLCJkaWFvcG4gcCIscCwwKTsKLSAgICAgICAgd2hpbGUgKCpwKSB7 Ci0gICAgICAgICAgICBpZiAoKnAgIT0gJyAnKQotICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcCsrOwotICAgICAgICB9Ci0gICAgICAgIGRlYnVn KEYxMTAsImRpYW9wbiBwaXBlIixwLDApOwotICAgICAgICBkaWFsb2cgPSB6eGNtZChaRElGSUws cCk7Ci0gICAgICAgIGRlYnVnKEYxMDEsImRpYW9wbiBkaWFsb2ciLCIiLGRpYWxvZyk7Ci0gICAg fSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSAqLwotI2VuZGlmIC8q IE9TMk9SVU5JWCAqLwotICAgICAgICBpZiAoZGlzcCkgewotICAgICAgICAgICAgeHguYnMgPSAw OyB4eC5jcyA9IDA7IHh4LnJsID0gMDsgeHgub3JnID0gMDsgeHguY2MgPSAwOwotICAgICAgICAg ICAgeHgudHlwID0gMDsgeHguZHNwID0gWFlGWl9BOyB4eC5vc19zcGVjaWZpYyA9ICIiOwotICAg ICAgICAgICAgeHgubGJsb3B0cyA9IDA7Ci0gICAgICAgICAgICBkaWFsb2cgPSB6b3Blbm8oWkRJ RklMLHMsTlVMTCwmeHgpOwotICAgICAgICB9IGVsc2UgZGlhbG9nID0gem9wZW5vKFpESUZJTCxz LE5VTEwsTlVMTCk7Ci0gICAgICAgIGlmICghZGlhbG9nKQotICAgICAgICAgIHByaW50ZigiPyVz IC0gJXNcbiIscyxja19lcnJzdHIoKSk7Ci0jaWZkZWYgT1MyT1JVTklYCi0gICAgfQotI2VuZGlm IC8qIE9TMk9SVU5JWCAqLwotICAgIGlmIChkaWFsb2cgPiAwKQotICAgICAgY2tzdHJuY3B5KGRp YWZpbCxzLENLTUFYUEFUSCsxKTsKLSAgICBlbHNlCi0gICAgICAqZGlhZmlsID0gJ1wwJzsKLSAg ICBpZiAoZmMgPT0gMCkgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsIG9wZW4gKi8K LSAgICAgIHpjbG9zZShaRElGSUwpOyAgICAgICAgICAgICAgICAgICAvKiBjbG9zZSBpdCAqLwot ICAgIHJldHVybihkaWFsb2cpOwotfQotI2VuZGlmIC8qIENLTE9HRElBTCAqLwotCi0jaWZuZGVm IE5PU0hPVwotCi0vKiAgU0hPVyBjb21tYW5kIHJvdXRpbmVzICovCi0KLWNoYXIgKgotc2hveG0o KSB7Ci0gICAgY2hhciAqIHM7Ci0gICAgc3dpdGNoIChiaW5hcnkpIHsKLSAgICAgIGNhc2UgWFlG VF9UOiBzID0gInRleHQiOyAgICAgICAgIGJyZWFrOwotI2lmZGVmIFZNUwotICAgICAgY2FzZSBY WUZUX0I6IHMgPSAiYmluYXJ5IGZpeGVkIjsgYnJlYWs7Ci0gICAgICBjYXNlIFhZRlRfSTogcyA9 ICJpbWFnZSI7ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgWFlGVF9MOiBzID0gImxhYmVsZWQi OyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBYWUZUX1U6IHMgPSAiYmluYXJ5IHVuZGVmIjsgYnJl YWs7Ci0jZWxzZQotI2lmZGVmIE1BQwotICAgICAgY2FzZSBYWUZUX0I6IHMgPSAiYmluYXJ5Ijsg ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFhZRlRfTTogcyA9ICJtYWNiaW5hcnkiOyAgICBicmVh azsKLSNlbHNlCi0gICAgICBjYXNlIFhZRlRfQjogcyA9ICJiaW5hcnkiOyAgICAgICBicmVhazsK LSNpZmRlZiBDS19MQUJFTEVECi0gICAgICBjYXNlIFhZRlRfTDogcyA9ICJsYWJlbGVkIjsgICAg ICBicmVhazsKLSNlbmRpZiAvKiBDS19MQUJFTEVEICovCi0jZW5kaWYgLyogTUFDICovCi0jZW5k aWYgLyogVk1TICovCi0gICAgICBkZWZhdWx0OiBzID0gInVua25vd24iOyBicmVhazsKLSAgICB9 Ci0gICAgcmV0dXJuKHMpOwotfQotCi0jaWZuZGVmIE5PWEZFUgotVk9JRCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFNIT1cgVFJBTlNGRVIgKi8KLXNob3hmZXIoKSB7Ci0g ICAgZXh0ZXJuIGludCBkb2NyYywgdXNlcGlwZXMsIHhmcnhsYSwgd2hlcmVmbGc7Ci0gICAgZXh0 ZXJuIGNoYXIgKiB4ZnJtc2c7Ci0gICAgcHJpbnRmKCJcbiIpOwotICAgIHByaW50ZigiIFRyYW5z ZmVyIEJlbGw6ICVzXG4iLHNob3dvZmYoeGZyYmVsKSk7Ci0gICAgcHJpbnRmKCIgVHJhbnNmZXIg SW50ZXJydXB0aW9uOiAlc1xuIixzaG93b2ZmKHhmcmludCkpOwotICAgIHByaW50ZigiIFRyYW5z ZmVyIENhbmNlbGxhdGlvbjogJXNcbiIsc2hvd29mZih4ZnJjYW4pKTsKLSNpZm5kZWYgTk9DU0VU UwotICAgIHByaW50ZigiIFRyYW5zZmVyIFRyYW5zbGF0aW9uOiAgJXNcbiIsc2hvd29mZih4ZnJ4 bGEpKTsKLSAgICBwcmludGYoIiBUcmFuc2ZlciBDaGFyYWN0ZXItc2V0OiAiKTsKLSAgICBpZiAo dGNoYXJzZXQgPT0gVENfVFJBTlNQKQotICAgICAgcHJpbnRmKCJUcmFuc3BhcmVudFxuIik7Ci0g ICAgZWxzZQotICAgICAgcHJpbnRmKCIlc1xuIix0Y3NpbmZvW3RjaGFyc2V0XS5rZXl3b3JkKTsK LSNlbmRpZiAvKiBOT0NTRVRTICovCi0gICAgcHJpbnRmKCIgVHJhbnNmZXIgQ1JDLWNhbGN1bGF0 aW9uOiAlc1xuIixzaG93b2ZmKGRvY3JjKSk7Ci0gICAgcHJpbnRmKCIgVHJhbnNmZXIgRGlzcGxh eTogIik7Ci0gICAgc3dpdGNoIChmZGlzcGxhKSB7Ci0gICAgICBjYXNlIFhZRkRfTjogcHJpbnRm KCIlc1xuIiwibm9uZSIpOyBicmVhazsKLSAgICAgIGNhc2UgWFlGRF9SOiBwcmludGYoIiVzXG4i LCJzZXJpYWwiKTsgYnJlYWs7Ci0gICAgICBjYXNlIFhZRkRfQzogcHJpbnRmKCIlc1xuIiwiZnVs bHNjcmVlbiIpOyBicmVhazsKLSAgICAgIGNhc2UgWFlGRF9TOiBwcmludGYoIiVzXG4iLCJjcnQi KTsgYnJlYWs7Ci0gICAgICBjYXNlIFhZRkRfQjogcHJpbnRmKCIlc1xuIiwiYnJpZWYiKTsgYnJl YWs7Ci0gICAgICBjYXNlIFhZRkRfRzogcHJpbnRmKCIlc1xuIiwiZ3VpIik7IGJyZWFrOwotICAg IH0KLSAgICBwcmludGYoIiBUcmFuc2ZlciBNZXNzYWdlOiAlc1xuIiwgeGZybXNnID8geGZybXNn IDogIihub25lKSIpOwotICAgIHByaW50ZigiIFRyYW5zZmVyIExvY2tpbmctc2hpZnQ6ICIpOwot ICAgIGlmIChsc2NhcHUgPT0gMikgewotICAgICAgICBwcmludGYoImZvcmNlZCIpOwotICAgIH0g ZWxzZSB7Ci0gICAgICAgIHByaW50ZigiJXMiLCAobHNjYXByID8gImVuYWJsZWQiIDogImRpc2Fi bGVkIikpOwotICAgICAgICBpZiAobHNjYXByKSBwcmludGYoIiwlcyVzIiwgKGxzY2FwdSA/ICIg IiA6ICIgbm90ICIpLCAidXNlZCIpOwotICAgIH0KLSAgICBwcmludGYoIlxuIFRyYW5zZmVyIE1v ZGU6ICVzXG4iLAotICAgICAgICAgICB4ZmVybW9kZSA9PSBYTU9ERV9BID8KLSAgICAgICAgICAg ImF1dG9tYXRpYyIgOgotICAgICAgICAgICAibWFudWFsIgotICAgICAgICAgICApOwotICAgIHBy aW50ZigiIFRyYW5zZmVyIFBpcGVzOiAlc1xuIiwgc2hvd29mZih1c2VwaXBlcykpOwotICAgIHBy aW50ZigiIFRyYW5zZmVyIFByb3RvY29sOiAlc1xuIixwdGFiW3Byb3RvY29sXS5wX25hbWUpOwot ICAgIHByaW50ZigiIFRyYW5zZmVyIFJlcG9ydDogJXNcbiIsc2hvd29mZih3aGVyZWZsZykpOwot ICAgIHByaW50ZigiIFRyYW5zZmVyIFNsb3ctc3RhcnQ6ICVzXG4iLHNob3dvZmYoc2xvc3RhcnQp KTsKLSAgICBwcmludGYoIlxuIik7Ci19Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLVZPSUQKLXNo b2Zsb3coKSB7Ci0gICAgaW50IGksIHg7Ci0gICAgZXh0ZXJuIGludCBjeGZsb3dbXSwgY3h0eXBl LCBuY3huYW1lLCBuZmxvbmFtZSwgYXV0b2Zsb3c7Ci0gICAgZXh0ZXJuIGNoYXIgKiBjeG5hbWVb XTsKLSAgICBwcmludGYoIlxuQ29ubmVjdGlvbiB0eXBlOiAgICAgICAgJXNcbiIsY3huYW1lW2N4 dHlwZV0pOwotICAgIGlmIChhdXRvZmxvdykgewotICAgICAgICBwcmludGYoIkN1cnJlbnQgZmxv dy1jb250cm9sOiAgICVzXG4iLCBmbG9uYW1lW2N4Zmxvd1tjeHR5cGVdXSk7Ci0gICAgICAgIHBy aW50ZigiU3dpdGNoZXMgYXV0b21hdGljYWxseTogeWVzXG4iKTsKLSAgICB9IGVsc2UgewotICAg ICAgICBwcmludGYoIkN1cnJlbnQgZmxvdy1jb250cm9sOiAgICVzXG4iLCBmbG9uYW1lW2Zsb3dd KTsKLSAgICAgICAgcHJpbnRmKCJTd2l0Y2hlcyBhdXRvbWF0aWNhbGx5OiBub1xuIik7Ci0gICAg fQotICAgIHByaW50ZigiXG5EZWZhdWx0cyBieSBjb25uZWN0aW9uIHR5cGU6XG4iKTsKLSAgICBk ZWJ1ZyhGMTExLCJzaG9mbG93IGN4dHlwZSIsY3huYW1lW2N4dHlwZV0sY3h0eXBlKTsKLSAgICBk ZWJ1ZyhGMTAxLCJzaG9mbG93IGZsb3ciLCIiLGZsb3cpOwotICAgIGZvciAoaSA9IDA7IGkgPCBu Y3huYW1lOyBpKyspIHsKLSNpZmRlZiBOT0xPQ0FMCi0gICAgICAgIGlmIChpID4gMCkgYnJlYWs7 Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2lmbmRlZiBORVRDT05OCi0gICAgICAgIGlmIChpID4g MikgYnJlYWs7Ci0jZW5kaWYgLyogTkVUQ09OTiAqLwotI2lmbmRlZiBERUNORVQKLSAgICAgICAg aWYgKGkgPT0gQ1hUX0RFQ05FVCkgY29udGludWU7Ci0jZW5kaWYgLyogREVDTkVUICovCi0jaWZu ZGVmIERFQ05FVAotI2lmbmRlZiBTVVBFUkxBVAotICAgICAgICBpZiAoaSA9PSBDWFRfTEFUKSBj b250aW51ZTsKLSNlbmRpZiAvKiBTVVBFUkxBVCAqLwotI2VuZGlmIC8qIERFQ05FVCAqLwotI2lm bmRlZiBDS19ORVRCSU9TCi0gICAgICAgIGlmIChpID09IENYVF9ORVRCSU9TKSBjb250aW51ZTsK LSNlbmRpZiAvKiBDS19ORVRCSU9TICovCi0jaWZuZGVmIE5QSVBFCi0gICAgICAgIGlmIChpID09 IENYVF9OUElQRSkgY29udGludWU7Ci0jZW5kaWYgLyogTlBJUEUgKi8KLSNpZm5kZWYgTkVUQ01E Ci0gICAgICAgIGlmIChpID09IENYVF9QSVBFKSBjb250aW51ZTsKLSNlbmRpZiAvKiBORVRDTUQg Ki8KLSNpZm5kZWYgQU5ZWDI1Ci0gICAgICAgIGlmIChpID09IENYVF9YMjUpIGNvbnRpbnVlOwot I2VuZGlmIC8qIEFOWVgyNSAqLwotICAgICAgICB4ID0gY3hmbG93W2ldOwotICAgICAgICBkZWJ1 ZyhGMTAxLCJzaG9mbG93IHgiLCIiLHgpOwotICAgICAgICBpZiAoeCA8IG5mbG9uYW1lKQotICAg ICAgICAgIHByaW50ZigiICAlLTE0czogJXNcbiIsY3huYW1lW2ldLGZsb25hbWVbeF0pOwotICAg ICAgICBlbHNlCi0gICAgICAgICAgcHJpbnRmKCIgICUtMTRzOiAoJWQpXG4iLGN4bmFtZVtpXSx4 KTsKLSAgICB9Ci0gICAgcHJpbnRmKCJcbiIpOwotfQotCi0jaWZuZGVmIE5PTE9DQUwKLSNpZmRl ZiBBTllYMjUKLWludAotc2hveDI1KG4pIGludCBuOyB7Ci0gICAgaWYgKG5ldHR5cGUgPT0gTkVU X1NYMjUpIHsKLSAgICAgICAgcHJpbnRmKCJTdW5MaW5rIFguMjUgViVkLiVkIix4MjV2ZXIgLyAx MCx4MjV2ZXIgJSAxMCk7Ci0gICAgICAgIGlmICh0dG5wcm90byA9PSBOUF9YMykgcHJpbnRmKCIs IFBBRCBYLjMsIFguMjgsIFguMjkgcHJvdG9jb2wsIik7Ci0gICAgICAgIHByaW50ZigiXG4iKTsK LSAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigt MSk7IGVsc2UgbiA9IDA7Ci0gICAgICAgIHByaW50ZigiIFJldmVyc2UgY2hhcmdlIGNhbGwgJXMi LAotICAgICAgICAgICAgICAgcmV2Y2FsbCA/ICJzZWxlY3RlZCIgOiAibm90IHNlbGVjdGVkIik7 Ci0gICAgICAgIHByaW50ZiAoIiwgQ2xvc2VkIHVzZXIgZ3JvdXAgIik7Ci0gICAgICAgIGlmIChj bG9zZ3IgPiAtMSkKLSAgICAgICAgICBwcmludGYgKCIlZCIsY2xvc2dyKTsKLSAgICAgICAgZWxz ZQotICAgICAgICAgIHByaW50ZiAoIm5vdCBzZWxlY3RlZCIpOwotICAgICAgICBwcmludGYoIlxu Iik7Ci0gICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1 cm4oLTEpOyBlbHNlIG4gPSAwOwotICAgICAgICBwcmludGYoIiBDYWxsIHVzZXIgZGF0YSAlcy5c biIsIGN1ZGF0YSA/IHVkYXRhIDogIm5vdCBzZWxlY3RlZCIpOwotICAgICAgICBpZiAoKytuID4g Y21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxzZSBuID0gMDsKLSAg ICB9IGVsc2UgaWYgKG5ldHR5cGUgPT0gTkVUX1ZYMjUpIHsKLSAgICAgICAgaWYgKHR0bnByb3Rv ID09IE5QX1gzKSBwcmludGYoIiwgUEFEIFguMywgWC4yOCwgWC4yOSBwcm90b2NvbCwiKTsKLSAg ICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAo IWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxzZSBuID0gMDsKLSAgICAgICAgcHJpbnRmKCIgUmV2 ZXJzZSBjaGFyZ2UgY2FsbCAlcyIsCi0gICAgICAgICAgICAgICByZXZjYWxsID8gInNlbGVjdGVk IiA6ICJub3Qgc2VsZWN0ZWQiKTsKLSAgICAgICAgcHJpbnRmICgiLCBDbG9zZWQgdXNlciBncm91 cCBbdW5zdXBwb3J0ZWRdIik7Ci0gICAgICAgIGlmIChjbG9zZ3IgPiAtMSkKLSAgICAgICAgICBw cmludGYgKCIlZCIsY2xvc2dyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHByaW50ZiAoIm5v dCBzZWxlY3RlZCIpOwotICAgICAgICBwcmludGYgKCIsIik7Ci0gICAgICAgIHByaW50ZigiXG4i KTsKLSAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVy bigtMSk7IGVsc2UgbiA9IDA7Ci0gICAgICAgIHByaW50ZigiIENhbGwgdXNlciBkYXRhICVzLlxu IiwgY3VkYXRhID8gdWRhdGEgOiAibm90IHNlbGVjdGVkIik7Ci0gICAgICAgIGlmICgrK24gPiBj bWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOwotICAg IH0gZWxzZSBpZiAobmV0dHlwZSA9PSBORVRfSVgyNSkgewotICAgICAgICBwcmludGYoIkFJWCBO UEkgWC4yNVxuIik7Ci0gICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9y ZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOwotICAgICAgICBwcmludGYoIlxuIFJldmVyc2Ug Y2hhcmdlIGNhbGwgJXMiLAotICAgICAgICAgICAgICAgcmV2Y2FsbCA/ICJzZWxlY3RlZCIgOiAi bm90IHNlbGVjdGVkIik7Ci0gICAgICAgIHByaW50ZiAoIiwgQ2xvc2VkIHVzZXIgZ3JvdXAgW3Vu c3VwcG9ydGVkXSIpOwotICAgICAgICBpZiAoY2xvc2dyID4gLTEpCi0gICAgICAgICAgcHJpbnRm ICgiJWQiLGNsb3Nncik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwcmludGYgKCJub3Qgc2Vs ZWN0ZWQiKTsKLSAgICAgICAgcHJpbnRmICgiLCIpOwotICAgICAgICBwcmludGYoIlxuIENhbGwg dXNlciBkYXRhICVzLlxuIiwgY3VkYXRhID8gdWRhdGEgOiAibm90IHNlbGVjdGVkIik7Ci0gICAg fQotICAgIHJldHVybihuKTsKLX0KLQotI2lmbmRlZiBJQk1YMjUKLWludAotc2hvcGFkKG4pIGlu dCBuOyB7Ci0gICAgaW50IGk7Ci0gICAgcHJpbnRmKCJcblguMyBQQUQgUGFyYW1ldGVyczpcbiIp OwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEp OyBlbHNlIG4gPSAwOwotICAgIGZvciAoaSA9IDA7IGkgPCBucGFkeDM7IGkrKykgewotICAgICAg ICBwcmludGYoIiBbJWRdICVzICVkXG4iLHBhZHgzdGFiW2ldLmt3dmFsLHBhZHgzdGFiW2ldLmt3 ZCwKLSAgICAgICAgICAgICAgIHBhZHBhcm1zW3BhZHgzdGFiW2ldLmt3dmFsXSk7Ci0gICAgICAg IGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNl IG4gPSAwOwotICAgIH0KLSAgICByZXR1cm4obik7Ci19Ci0jZW5kaWYgLyogSUJNWDI1ICovCi0j ZW5kaWYgLyogQU5ZWDI1ICovCi0KLVZPSUQKLXNob3BhcmMoKSB7Ci0gICAgZXh0ZXJuIGludCBy ZWxpYWJsZSwgc3RvcGJpdHMsIGNsc29uZGlzYzsKLSAgICBpbnQgaTsgY2hhciAqczsKLSAgICBs b25nIHp6OwotCi0jaWZkZWYgTkVXRlRQCi0gICAgaWYgKGZ0cGlzY29ubmVjdGVkKCkpIHsKLSAg ICAgICAgc2hvZnRwKDEpOwotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgfQotI2VuZGlmIC8q IE5FV0ZUUCAqLwotCi0gICAgcHJpbnRmKCJDb21tdW5pY2F0aW9ucyBQYXJhbWV0ZXJzOlxuIik7 Ci0KLSAgICBpZiAobmV0d29yawotI2lmZGVmIElLU0QKLSAgICAgICAgIHx8IGluc2VydmVyCi0j ZW5kaWYgLyogSUtTRCAqLwotICAgICAgICAgKSB7Ci0gICAgICAgIHByaW50ZigiIE5ldHdvcmsg SG9zdDogJXMlcyIsdHRuYW1lLAotICAgICAgICAgICAgICAgKHJlbGlhYmxlID09IFNFVF9PTiB8 fCAocmVsaWFibGUgPT0gU0VUX0FVVE8gJiYgIWxvY2FsKQotI2lmZGVmIFROX0NPTVBPUlQKLSAg ICAgICAgICAgICAgICYmICFpc3RuY29tcG9ydCgpCi0jZW5kaWYgLyogVE5fQ09NUE9SVCAqLwot I2lmZGVmIElLU0QKLSAgICAgICAgICAgICAgIHx8IGluc2VydmVyCi0jZW5kaWYgLyogSUtTRCAq LwotICAgICAgICAgICAgICAgKSA/ICIgKHJlbGlhYmxlKSIgOiAiIik7Ci0jaWZkZWYgVE5fQ09N UE9SVAotICAgICAgICBpZiAoaXN0bmNvbXBvcnQoKSkgewotICAgICAgICAgICAgaW50IG1vZGVt c3RhdGU7Ci0gICAgICAgICAgICBjaGFyICogb2Zsb3csICogaWZsb3cgPSAiIiwgKiBwYXJpdHks ICogc3RvcHNpemUsICogc2lnbmF0dXJlOwotICAgICAgICAgICAgaW50IGJhdWQgPSB0bmNfZ2V0 X2JhdWQoKTsKLQotICAgICAgICAgICAgc3dpdGNoICh0bmNfZ2V0X29mbG93KCkpIHsKLSAgICAg ICAgICAgICAgY2FzZSBUTkNfQ1RMX09GTE9XX05PTkU6Ci0gICAgICAgICAgICAgICAgb2Zsb3cg PSAibm9uZSI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgVE5D X0NUTF9PRkxPV19YT05fWE9GRjoKLSAgICAgICAgICAgICAgICBvZmxvdyA9ICJ4b24veG9mZiI7 Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgVE5DX0NUTF9PRkxP V19SVFNfQ1RTOgotICAgICAgICAgICAgICAgIG9mbG93ID0gInJ0cy9jdHMiOwotICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIFROQ19DVExfT0ZMT1dfRENEOgotICAg ICAgICAgICAgICAgIG9mbG93ID0gImRjZCI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgIGNhc2UgVE5DX0NUTF9PRkxPV19EU1I6Ci0gICAgICAgICAgICAgICAgb2Zsb3cg PSAiZHNyIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoK LSAgICAgICAgICAgICAgICBvZmxvdyA9ICIodW5rbm93bikiOwotICAgICAgICAgICAgfQotICAg ICAgICAgICAgc3dpdGNoICh0bmNfZ2V0X2lmbG93KCkpIHsKLSAgICAgICAgICAgICAgY2FzZSBU TkNfQ1RMX0lGTE9XX05PTkU6Ci0gICAgICAgICAgICAgICAgaWZsb3cgPSAibm9uZSI7Ci0gICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgVE5DX0NUTF9JRkxPV19YT05f WE9GRjoKLSAgICAgICAgICAgICAgICBpZmxvdyA9ICJ4b24veG9mZiI7Ci0gICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgVE5DX0NUTF9JRkxPV19SVFNfQ1RTOgotICAg ICAgICAgICAgICAgIGlmbG93ID0gInJ0cy9jdHMiOwotICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICBjYXNlIFROQ19DVExfSUZMT1dfRFRSOgotICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmbG93ID0gb2Zs b3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzd2l0Y2ggKHRuY19nZXRfcGFyaXR5KCkp IHsKLSAgICAgICAgICAgICAgY2FzZSBUTkNfUEFSX05PTkU6Ci0gICAgICAgICAgICAgICAgcGFy aXR5ID0gIm5vbmUiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl IFROQ19QQVJfT0REOgotICAgICAgICAgICAgICAgIHBhcml0eSA9ICJvZGQiOwotICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIFROQ19QQVJfRVZFTjoKLSAgICAgICAg ICAgICAgICBwYXJpdHkgPSAiZXZlbiI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgIGNhc2UgVE5DX1BBUl9NQVJLOgotICAgICAgICAgICAgICAgIHBhcml0eSA9ICJtYXJr IjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBUTkNfUEFSX1NQ QUNFOgotICAgICAgICAgICAgICAgIHBhcml0eSA9ICJzcGFjZSI7Ci0gICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcGFyaXR5ID0g Iih1bmtub3duKSI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzd2l0Y2ggKHRuY19nZXRf c3RvcHNpemUoKSkgewotICAgICAgICAgICAgICBjYXNlIFROQ19TQl8xOgotICAgICAgICAgICAg ICAgIHN0b3BzaXplID0gIjEiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICBjYXNlIFROQ19TQl8xXzU6Ci0gICAgICAgICAgICAgICAgc3RvcHNpemUgPSAiMS41IjsKLSAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBUTkNfU0JfMjoKLSAgICAg ICAgICAgICAgICBzdG9wc2l6ZSA9ICIyIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBzdG9wc2l6ZSA9ICIodW5rbm93biki OwotICAgICAgICAgICAgfQotCSAgICBzaWduYXR1cmUgPSAoY2hhciAqKXRuY19nZXRfc2lnbmF0 dXJlKCk7Ci0gICAgICAgICAgICBwcmludGYoIlxuICBTaWduYXR1cmUgICAgICAgICAgICA6ICVz XG4iLHNpZ25hdHVyZT9zaWduYXR1cmU6IiIpOwotICAgICAgICAgICAgaWYgKGJhdWQgPD0gMCkK LSAgICAgICAgICAgICAgcHJpbnRmKCIgIFNwZWVkICAgICAgICAgICAgICAgIDogKHVua25vd24p XG4iKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcHJpbnRmKCIgIFNwZWVkICAg ICAgICAgICAgICAgIDogJWRcbiIsIGJhdWQpOwotICAgICAgICAgICAgcHJpbnRmKCIgIE91dGJv dW5kIEZsb3cgQ29udHJvbDogJXNcbiIsIG9mbG93KTsKLSAgICAgICAgICAgIHByaW50ZigiICBJ bmJvdW5kIEZsb3cgQ29udHJvbCA6ICVzXG4iLCBpZmxvdyk7Ci0gICAgICAgICAgICBwcmludGYo IiAgUGFyaXR5ICAgICAgICAgICAgICAgOiAlc1xuIiwgcGFyaXR5KTsKLSAgICAgICAgICAgIHBy aW50ZigiICBEYXRhIFNpemUgICAgICAgICAgICA6ICVkXG4iLCB0bmNfZ2V0X2RhdGFzaXplKCkp OwotICAgICAgICAgICAgcHJpbnRmKCIgIFN0b3AgQml0cyAgICAgICAgICAgIDogJXNcbiIsIHN0 b3BzaXplKTsKLSAgICAgICAgICAgIHByaW50ZigiICBEVFIgU2lnbmFsICAgICAgICAgICA6ICVk XG4iLCB0bmNfZ2V0X2R0cl9zdGF0ZSgpKTsKLSAgICAgICAgICAgIHByaW50ZigiICBSVFMgU2ln bmFsICAgICAgICAgICA6ICVkXG4iLCB0bmNfZ2V0X3J0c19zdGF0ZSgpKTsKLSAgICAgICAgICAg IHByaW50ZigiICBNb2RlbSBTdGF0ZTpcbiIpOwotICAgICAgICAgICAgbW9kZW1zdGF0ZSA9IHRu Y19nZXRfbXMoKTsKLSAgICAgICAgICAgIGlmIChtb2RlbXN0YXRlICYgVE5DX01TX0VER0VfUklO RykKLSAgICAgICAgICAgICAgcHJpbnRmKCIgICAgVHJhaWxpbmcgRWRnZSBSaW5nIERldGVjdG9y IE9uXG4iKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcHJpbnRmKCIgICAgVHJh aWxpbmcgRWRnZSBSaW5nIERldGVjdG9yIE9mZlxuIik7Ci0gICAgICAgICAgICBpZiAobW9kZW1z dGF0ZSAmIFROQ19NU19DVFNfU0lHKQotICAgICAgICAgICAgICBwcmludGYoIiAgICBDVFMgU2ln bmFsIE9uXG4iKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcHJpbnRmKCIgICAg Q1RTIFNpZ25hbCBPZmZcbiIpOwotICAgICAgICAgICAgaWYgKG1vZGVtc3RhdGUgJiBUTkNfTVNf RFNSX1NJRykKLSAgICAgICAgICAgICAgcHJpbnRmKCIgICAgRFNSIFNpZ25hbCBPblxuIik7Ci0g ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHByaW50ZigiICAgIERTUiBTaWduYWwgT2Zm XG4iKTsKLSAgICAgICAgICAgIGlmIChtb2RlbXN0YXRlICYgVE5DX01TX1JJX1NJRykKLSAgICAg ICAgICAgICAgcHJpbnRmKCIgICAgUmluZyBJbmRpY2F0b3IgT25cbiIpOwotICAgICAgICAgICAg ZWxzZQotICAgICAgICAgICAgICBwcmludGYoIiAgICBSaW5nIEluZGljYXRvciBPZmZcbiIpOwot ICAgICAgICAgICAgaWYgKG1vZGVtc3RhdGUgJiBUTkNfTVNfUkxTRF9TSUcpCi0gICAgICAgICAg ICAgIHByaW50ZigiICAgIFJMU0QgKENEKSBTaWduYWwgT25cbiIpOwotICAgICAgICAgICAgZWxz ZQotICAgICAgICAgICAgICBwcmludGYoIiAgICBSTFNEIChDRCkgU2lnbmFsIE9mZlxuIik7Ci0g ICAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBUTl9DT01QT1JU ICovCi0gICAgfSBlbHNlIHsKLQotICAgICAgICBwcmludGYoIiAlczogJXMlcywgc3BlZWQ6ICIs Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAiUG9ydCIsCi0jZWxzZQotICAgICAgICAgICAg ICAgIkxpbmUiLAotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgdHRuYW1lLAotI2lm ZGVmIENLX1RUWUZECi0gICAgICAgICAgICAgICAobG9jYWwgJiYKLSNpZmRlZiBWTVMKLSAgICAg ICAgICAgICAgICB2bXN0dHlmZCgpIDwgMAotI2Vsc2UKLSAgICAgICAgICAgICAgICB0dHlmZCA9 PSAtMQotI2VuZGlmIC8qIFZNUyAqLwotICAgICAgICAgICAgICAgICkgPwotICAgICAgICAgICAg ICAgICAiIChjbG9zZWQpIiA6Ci0gICAgICAgICAgICAgICAgICAgKHJlbGlhYmxlID09IFNFVF9P TiA/ICIgKHJlbGlhYmxlKSIgOiAiIikKLSNlbHNlCi0gICAgICAgICAgICAgICAiIgotI2VuZGlm IC8qIENLX1RUWUZEICovCi0gICAgICAgICAgICAgICApOwotICAgICAgICBpZiAoCi0jaWZkZWYg Q0tfVFRZRkQKLSNpZmRlZiBWTVMKLSAgICAgICAgICAgIHZtc3R0eWZkKCkgPCAwCi0jZWxzZQot ICAgICAgICAgICAgdHR5ZmQgPT0gLTEKLSNlbmRpZiAvKiBWTVMgKi8KLSAgICAgICAgICAgIHx8 Ci0jZW5kaWYgLyogQ0tfVFRZRkQgKi8KLSAgICAgICAgICAgICh6eiA9IHR0Z3NwZCgpKSA8IDAp IHsKLSAgICAgICAgICAgIHByaW50ZigidW5rbm93biIpOwotICAgICAgICB9IGVsc2UgewotICAg ICAgICAgICAgaWYgKHNwZWVkID09IDg4ODApIHByaW50ZigiNzUvMTIwMCIpOwotICAgICAgICAg ICAgZWxzZSBpZiAoc3BlZWQgPT0gMTM0KSBwcmludGYoIjEzNC41Iik7Ci0gICAgICAgICAgICBl bHNlIHByaW50ZigiJWxkIix6eik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG5ldHdvcmsK LSNpZmRlZiBJS1NECi0gICAgICAgICB8fCBpbnNlcnZlcgotI2VuZGlmIC8qIElLU0QgKi8KLSAg ICAgICAgICkKLSAgICAgIHByaW50ZigiXG4gTW9kZTogIik7Ci0gICAgZWxzZQotICAgICAgcHJp bnRmKCIsIG1vZGU6ICIpOwotICAgIGlmIChsb2NhbCkgcHJpbnRmKCJsb2NhbCIpOyBlbHNlIHBy aW50ZigicmVtb3RlIik7Ci0gICAgaWYgKG5ldHdvcmsgPT0gMAotI2lmZGVmIElLU0QKLSAgICAg ICAgICYmICFpbnNlcnZlcgotI2VuZGlmLyogSUtTRCAqLwotICAgICAgICAgKSB7Ci0jaWZkZWYg Q0tfVEFQSQotICAgICAgICBpZiAodHR0YXBpICYmICF0YXBpcGFzcyApCi0gICAgICAgICAgcHJp bnRmKCIsIG1vZGVtOiAlcyIsIlRBUEkiKTsKLSAgICAgICAgZWxzZQotI2VuZGlmIC8qIENLX1RB UEkgKi8KLSAgICAgICAgcHJpbnRmKCIsIG1vZGVtOiAlcyIsZ21kbXR5cCgpKTsKLSAgICB9IGVs c2UgewotI2lmZGVmIE5FVENPTk4KLSAgICAgICBpZiAobmV0dHlwZSA9PSBORVRfVENQQSkgcHJp bnRmKCIsIFRDUC9JUCIpOwotICAgICAgIGlmIChuZXR0eXBlID09IE5FVF9UQ1BCKSBwcmludGYo IiwgVENQL0lQIik7Ci0gICAgICAgaWYgKG5ldHR5cGUgPT0gTkVUX0RFQykgewotICAgICAgICAg ICBpZiAodHRucHJvdG8gPT0gTlBfTEFUKSBwcmludGYoIiwgREVDbmV0IExBVCIpOwotICAgICAg ICAgICBlbHNlIGlmICggdHRucHJvdG8gPT0gTlBfQ1RFUk0gKSBwcmludGYoIiwgREVDbmV0IENU RVJNIik7Ci0gICAgICAgICAgIGVsc2UgcHJpbnRmKCIsIERFQ25ldCIpOwotICAgICAgIH0KLSAg ICAgICBpZiAobmV0dHlwZSA9PSBORVRfU0xBVCkgcHJpbnRmKCIsIE1lcmlkaWFuIFRlY2hub2xv Z2llcycgU3VwZXJMQVQiKTsKLSNpZmRlZiBORVRGSUxFCi0gICAgICAgaWYgKG5ldHR5cGUgPT0g TkVUX0ZJTEUpIHByaW50ZigiLCBsb2NhbCBmaWxlIik7Ci0jZW5kaWYgLyogTkVURklMRSAqLwot I2lmZGVmIE5FVENNRAotICAgICAgIGlmIChuZXR0eXBlID09IE5FVF9DTUQpIHByaW50ZigiLCBw aXBlIik7Ci0jZW5kaWYgLyogTkVUQ01EICovCi0jaWZkZWYgTkVUUFRZCi0gICAgICAgaWYgKG5l dHR5cGUgPT0gTkVUX1BUWSkgcHJpbnRmKCIsIHBzZXVkb3Rlcm1pbmFsIik7Ci0jZW5kaWYgLyog TkVUUFRZICovCi0jaWZkZWYgTkVURExMCi0gICAgICAgaWYgKG5ldHR5cGUgPT0gTkVUX0RMTCkg cHJpbnRmKCIsIGR5bmFtaWMgbG9hZCBsaWJyYXJ5Iik7Ci0jZW5kaWYgLyogTkVURExMICovCi0g ICAgICAgaWYgKG5ldHR5cGUgPT0gTkVUX1BJUEUpIHByaW50ZigiLCBOYW1lZCBQaXBlcyIpOwot I2lmZGVmIFNTSEJVSUxUSU4KLSAgICAgICBpZiAobmV0dHlwZSA9PSBORVRfU1NIKQotICAgICAg ICAgcHJpbnRmKCIsIFNlY3VyZSBTaGVsbCBwcm90b2NvbCAoU0VDVVJFKSIpOwotI2VuZGlmIC8q IFNTSEJVSUxUSU4gKi8KLSNpZmRlZiBBTllYMjUKLSAgICAgICBpZiAoc2hveDI1KDApIDwgMCkg cmV0dXJuOwotI2VuZGlmIC8qIEFOWVgyNSAqLwotICAgICAgIGlmIChJU19URUxORVQoKSkgewot ICAgICAgICAgICBwcmludGYoIiwgdGVsbmV0IHByb3RvY29sIik7Ci0gICAgICAgICAgIGlmICgw Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICAgICAgICAgfHwgY2tfdG5fZW5jcnlwdGlu ZygpICYmIGNrX3RuX2RlY3J5cHRpbmcoKQotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNp ZmRlZiBDS19TU0wKLSAgICAgICAgICAgICAgIHx8IHRsc19hY3RpdmVfZmxhZyB8fCBzc2xfYWN0 aXZlX2ZsYWcKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICAgICAgICkKLSAgICAgICAg ICAgICBwcmludGYoIiAoU0VDVVJFKSIpOwotICAgICAgIH0KLSNpZmRlZiBSTE9HQ09ERQotICAg ICAgIGVsc2UgaWYgKHR0bnByb3RvID09IE5QX1JMT0dJTiB8fCB0dG5wcm90byA9PSBOUF9LNExP R0lOIHx8Ci0gICAgICAgICAgICAgICAgdHRucHJvdG8gPT0gTlBfSzVMT0dJTikKLSAgICAgICAg IHByaW50ZigiLCBybG9naW4gcHJvdG9jb2wiKTsKLSAgICAgICBlbHNlIGlmICh0dG5wcm90byA9 PSBOUF9FSzRMT0dJTiB8fCB0dG5wcm90byA9PSBOUF9FSzVMT0dJTikKLSAgICAgICAgIHByaW50 ZigiLCBybG9naW4gcHJvdG9jb2wgKFNFQ1VSRSkiKTsKLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwot I2lmZGVmIENLX0tFUkJFUk9TCi0jaWZkZWYgS1JCNQotICAgICAgIGVsc2UgaWYgKHR0bnByb3Rv ID09IE5QX0s1VTJVKQotICAgICAgICAgcHJpbnRmKCIsIEtlcmJlcm9zIDUgVXNlciB0byBVc2Vy IHByb3RvY29sIChTRUNVUkUpIik7Ci0jZW5kaWYgLyogS1JCNSAqLwotI2VuZGlmIC8qIENLX0tF UkJFUk9TICovCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotICAgIH0KLSAgICBwcmludGYoIlxuIik7 Ci0gICAgaWYgKGh3cGFyaXR5ICYmIGxvY2FsICYmICFuZXR3b3JrKQotICAgICAgcyA9IHBhcm5h bSgoY2hhcilod3Bhcml0eSk7Ci0gICAgZWxzZQotICAgICAgcyA9IHBhcm5hbSgoY2hhcilwYXJp dHkpOwotICAgIHByaW50ZigiIFBhcml0eTogJXMlcyIsaHdwYXJpdHkgPyAiaGFyZHdhcmUgIiA6 ICIiLCBzKTsKLSNpZm5kZWYgTk9MT0NBTAotICAgIGlmIChsb2NhbCAmJiAhbmV0d29yaykgewot ICAgICAgICBpbnQgc2I7Ci0gICAgICAgIGNoYXIgYzsKLSAgICAgICAgYyA9IHNbMF07Ci0gICAg ICAgIGlmIChpc2xvd2VyKGMpKSBjID0gdG91cHBlcihjKTsKLSAgICAgICAgc2IgPSBzdG9wYml0 czsKLSAgICAgICAgaWYgKHNiIDwgMSkgewotICAgICAgICAgICAgc2IgPSAoc3BlZWQgPiAwICYm IHNwZWVkIDw9IDExMEwpID8gMiA6IDE7Ci0gICAgICAgICAgICBwcmludGYoIiwgc3RvcC1iaXRz OiAoZGVmYXVsdCkiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHByaW50ZigiLCBz dG9wLWJpdHM6ICVkIixzYik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGh3cGFyaXR5KQotICAg ICAgICAgIHByaW50ZigiICg4JWMlZCkiLGMsc2IpOwotICAgICAgICBlbHNlIGlmIChwYXJpdHkp Ci0gICAgICAgICAgcHJpbnRmKCIgKDclYyVkKSIsYyxzYik7Ci0gICAgICAgIGVsc2UKLSAgICAg ICAgICBwcmludGYoIiAoOE4lZCkiLHNiKTsKLSAgICAgICAgcHJpbnRmKCJcbiBEIik7Ci0gICAg fSBlbHNlCi0gICAgICBwcmludGYoIiwgZCIpOwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotICAg IHByaW50ZigidXBsZXg6ICVzLCAiLCBkdXBsZXggPyAiaGFsZiIgOiAiZnVsbCIpOwotICAgIGRl YnVnKEYxMDEsInNob3BhcnAgZmxvdyIsIiIsZmxvdyk7Ci0gICAgcHJpbnRmKCJmbG93OiAlcyIs IGZsb25hbWVbZmxvd10pOwotICAgIHByaW50ZigiLCBoYW5kc2hha2U6ICIpOwotICAgIGlmICh0 dXJuKSBwcmludGYoIiVkXG4iLHR1cm5jaCk7IGVsc2UgcHJpbnRmKCJub25lXG4iKTsKLSNpZmRl ZiBDT01NRU5UCi0gICAgaWYgKGxvY2FsICYmICFuZXR3b3JrKSB7ICAgICAgICAgICAgLyogU0VU IENBUlJJRVItV0FUQ0ggKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIGlmIChjYXJy aWVyID09IENBUl9PRkYpIHMgPSAib2ZmIjsKLSAgICAgICAgZWxzZSBpZiAoY2FycmllciA9PSBD QVJfT04pIHMgPSAib24iOwotICAgICAgICBlbHNlIGlmIChjYXJyaWVyID09IENBUl9BVVQpIHMg PSAiYXV0byI7Ci0gICAgICAgIGVsc2UgcyA9ICJ1bmtub3duIjsKLSAgICAgICAgcHJpbnRmKCIg Q2Fycmllci13YXRjaDogJXMiLCBzKTsKLSAgICAgICAgaWYgKGNhcnJpZXIgPT0gQ0FSX09OKSB7 Ci0gICAgICAgICAgICBpZiAoY2R0aW1vKSBwcmludGYoIiwgdGltZW91dDogJWQgc2VjIiwgY2R0 aW1vKTsKLSAgICAgICAgICAgIGVsc2UgcHJpbnRmKCIsIHRpbWVvdXQ6IG5vbmUiKTsKLSAgICAg ICAgfQotI2lmZGVmIENPTU1FTlQKLSAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIHBy aW50ZigiLCBjbG9zZS1vbi1kaXNjb25uZWN0OiAlc1xuIixzaG93b2ZmKGNsc29uZGlzYykpOwot Ci0jaWZkZWYgVU5JWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVVVDUCBsb2NrZmls ZSwgVU5JWCBvbmx5ICovCi0gICAgaWYgKGxvY2FsKSB7Ci0jaWZuZGVmIE5PVVVDUAotICAgICAg ICBpZiAoIW5ldHdvcmsgJiYgaGFzbG9jayAmJiAqZmxmbmFtKQotICAgICAgICAgIHByaW50Zigi IExvY2tmaWxlOiAlcyIsZmxmbmFtKTsKLSNpZm5kZWYgVVNFVFRZTE9DSwotICAgICAgICBpZiAo IW5ldHdvcmsgJiYgaGFzbG9jayAmJiBsb2NrMlswXSkKLSAgICAgICAgICBwcmludGYoIlxuIFNl Y29uZGFyeSBsb2NrZmlsZTogJXMiLGxvY2syKTsKLSNlbmRpZiAvKiBVU0VUVFlMT0NLICovCi0j ZWxzZQotI2lmZGVmIFFOWAotICAgICAgICB7Ci0gICAgICAgICAgICBleHRlcm4gaW50IHFueHBv cnRsb2NrLCBxbnhvcGVuY291bnQoKTsKLSAgICAgICAgICAgIGlmIChsb2NhbCkKLSAgICAgICAg ICAgICAgcHJpbnRmKCIgUW54LXBvcnQtbG9jazogJXMsIE9wZW4gY291bnQ6ICVkIiwKLSAgICAg ICAgICAgICAgICAgICAgIHNob3dvZmYocW54cG9ydGxvY2spLAotICAgICAgICAgICAgICAgICAg ICAgcW54b3BlbmNvdW50KCkKLSAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBl bHNlCi0gICAgICAgICAgICAgIHByaW50ZigiIFFueC1wb3J0LWxvY2s6ICVzIiwgc2hvd29mZihx bnhwb3J0bG9jaykpOwotICAgICAgICB9Ci0jZW5kaWYgLyogUU5YICovCi0jZW5kaWYgLyogTk9V VUNQICovCi0gICAgICAgIHByaW50ZigiXG4iKTsKLSAgICB9IGVsc2UgewotICAgICAgICBjaGFy ICogczsKLSAgICAgICAgcyA9IHR0Z2xja2RpcigpOwotICAgICAgICBpZiAoIXMpIHMgPSAiIjsK LSAgICAgICAgcHJpbnRmKCIgTG9ja2ZpbGUgZGlyZWN0b3J5OiAlc1xuIiwgKnMgPyBzIDogIihu b25lKSIpOwotICAgIH0KLSNlbmRpZiAvKiBVTklYICovCi0jaWZuZGVmIE1BQ09TWAotICAgIGlm ICghbG9jYWwpIHsKLSAgICAgICAgcHJpbnRmKCIgVHlwaWNhbCBwb3J0IGRldmljZSBuYW1lOiAl c1xuIix0dGd0cG4oKSk7Ci0gICAgfQotI2VuZGlmCS8qIE1BQ09TWCAqLwotICAgIGlmIChsb2Nh bCkgewotICAgICAgICBpbnQgaTsKLSAgICAgICAgaSA9IHBhcml0eSA/IDcgOiA4OwotICAgICAg ICBpZiAoaSA9PSA4KSBpID0gKGNtYXNrID09IDAxNzcpID8gNyA6IDg7Ci0gICAgICAgIHByaW50 ZigiIFRlcm1pbmFsIGJ5dGVzaXplOiAlZCwiLGkpOwotICAgICAgICBwcmludGYoIiBlc2NhcGUg Y2hhcmFjdGVyOiAlZCAoXiVjKVxuIixlc2NhcGUsY3RsKGVzY2FwZSkpOwotICAgIH0KLX0KLQot aW50Ci1zaG90Y3AobikgaW50IG47IHsKLSNpZmRlZiBUQ1BTT0NLRVQKLSAgICBpZiAobmV0dHlw ZSA9PSBORVRfVENQQSB8fCBuZXR0eXBlID09IE5FVF9UQ1BCKSB7Ci0gICAgICAgIHByaW50Zigi U0VUIFRDUCBwYXJhbWV0ZXJzOlxuIik7Ci0gICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMp IGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOwotICAgICAgICBwcmludGYo IiBSZXZlcnNlIEROUyBsb29rdXA6ICVzXG4iLCBzaG93b29hKHRjcF9yZG5zKSk7Ci0gICAgICAg IGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2Ug biA9IDA7Ci0KLSNpZmRlZiBDS19ETlNfU1JWCi0gICAgICAgIHByaW50ZigiIEROUyBTZXJ2aWNl IFJlY29yZHMgbG9va3VwOiAlc1xuIiwgc2hvd29vYSh0Y3BfZG5zX3NydikpOwotICAgICAgICBp ZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4g PSAwOwotI2VuZGlmIC8qIENLX0ROU19TUlYgKi8KLQotI2lmbmRlZiBOT1RDUE9QVFMKLSNpZmRl ZiBTT0xfU09DS0VUCi0jaWZkZWYgU09fS0VFUEFMSVZFCi0gICAgICAgIHByaW50ZigiIEtlZXBh bGl2ZTogJXNcbiIsIHNob3dvZmYodGNwX2tlZXBhbGl2ZSkpOwotICAgICAgICBpZiAoKytuID4g Y21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotI2Vu ZGlmIC8qIFNPX0tFRVBBTElWRSAqLwotCi0jaWZkZWYgU09fTElOR0VSCi0gICAgICAgIHByaW50 ZigiIExpbmdlcjogJXMiLCB0Y3BfbGluZ2VyID8gIm9uLCAiIDogIm9mZlxuIiApOwotICAgICAg ICBpZiAodGNwX2xpbmdlcikgewotICAgICAgICAgICAgaWYgKHRjcF9saW5nZXJfdG1vKQotICAg ICAgICAgICAgICBwcmludGYoIiVkIHggMTAgbWlsbGlzZWNvbmRzXG4iLHRjcF9saW5nZXJfdG1v KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcHJpbnRmKCJubyB0aW1lb3V0XG4i KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotI2VuZGlmIC8qIFNPX0xJTkdFUiAqLwotCi0j aWZkZWYgU09fRE9OVFJPVVRFCi0gICAgICAgIHByaW50ZigiIERvbnRSb3V0ZTogJXNcbiIsIHRj cF9kb250cm91dGUgPyAib24iIDogIm9mZiIgKTsKLSAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dz IC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSNlbmRpZiAvKiBT T19ET05UUk9VVEUgKi8KLQotI2lmZGVmIFRDUF9OT0RFTEFZCi0gICAgICAgIHByaW50ZigiIE5v ZGVsYXk6ICVzXG4iLCBzaG93b2ZmKHRjcF9ub2RlbGF5KSk7Ci0gICAgICAgIGlmICgrK24gPiBj bWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0jZW5k aWYgLyogVENQX05PREVMQVkgKi8KLQotI2lmZGVmIFNPX1NOREJVRgotICAgICAgICBpZiAodGNw X3NlbmRidWYgPD0gMCkKLSAgICAgICAgICBwcmludGYoIiBTZW5kIGJ1ZmZlcjogKGRlZmF1bHQg c2l6ZSlcbiIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcHJpbnRmKCIgU2VuZCBidWZmZXI6 ICVkIGJ5dGVzXG4iLCB0Y3Bfc2VuZGJ1Zik7Ci0gICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAt IDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0jZW5kaWYgLyogU09f U05EQlVGICovCi0jaWZkZWYgU09fUkNWQlVGCi0gICAgICAgIGlmICh0Y3BfcmVjdmJ1ZiA8PSAw KQotICAgICAgICAgIHByaW50ZigiIFJlY2VpdmUgYnVmZmVyOiAoZGVmYXVsdCBzaXplKVxuIik7 Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwcmludGYoIiBSZWNlaXZlIGJ1ZmZlcjogJWQgYnl0 ZXNcbiIsIHRjcF9yZWN2YnVmKTsKLSAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYg KCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSNlbmRpZiAvKiBTT19SQ1ZCVUYg Ki8KLSNlbmRpZiAvKiBTT0xfU09DS0VUICovCi0jZW5kaWYgLyogTk9UQ1BPUFRTICovCi0gICAg ICAgIHByaW50ZigiIGFkZHJlc3M6ICVzXG4iLHRjcF9hZGRyZXNzID8gdGNwX2FkZHJlc3MgOiAi KG5vbmUpIik7Ci0gICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgp KSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOwotI2lmbmRlZiBOT0hUVFAKLSAgICAgICAgcHJpbnRm KCIgaHR0cC1wcm94eTogJXNcbiIsdGNwX2h0dHBfcHJveHkgPyB0Y3BfaHR0cF9wcm94eSA6ICIo bm9uZSkiKTsKLSAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkp IHJldHVybigtMSk7IGVsc2UgbiA9IDA7Ci0jZW5kaWYgLyogTk9IVFRQICovCi0jaWZkZWYgTlQK LSNpZmRlZiBDS19TT0NLUwotICAgICAgICBwcmludGYoIiBzb2Nrcy1zZXJ2ZXI6ICVzXG4iLHRj cF9zb2Nrc19zdnIgPyB0Y3Bfc29ja3Nfc3ZyIDogIihub25lKSIpOwotICAgICAgICBpZiAoKytu ID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxzZSBuID0gMDsK LSNpZmRlZiBDS19TT0NLU19OUwotICAgICAgICBwcmludGYoIiBzb2Nrcy1uYW1lLXNlcnZlcjog JXNcbiIsCi0gICAgICAgICAgICAgICB0Y3Bfc29ja3NfbnMgPyB0Y3Bfc29ja3NfbnMgOiAiKG5v bmUpIik7Ci0gICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSBy ZXR1cm4oLTEpOyBlbHNlIG4gPSAwOwotI2VuZGlmIC8qIENLX1NPQ0tTX05TICovCi0jZW5kaWYg LyogQ0tfU09DS1MgKi8KLSNlbmRpZiAvKiBOVCAqLwotICAgIH0KLSNlbmRpZiAvKiBUQ1BTT0NL RVQgKi8KLSAgICByZXR1cm4obik7Ci19Ci0KLSNpZmRlZiBUTkNPREUKLWludAotc2hvdG9wdChu KSBpbnQgbjsgewotICAgIGludCBvcHQ7Ci0KLSAgICBwcmludGYoIiUtMjFzICUxMnMgJTEycyAl MTJzICUxMnNcblxuIiwKLSAgICAgICAgICAgIlRlbG5ldCBPcHRpb24iLCJNZSAoY2xpZW50KSIs IlUgKGNsaWVudCkiLAotICAgICAgICAgICAiTWUgKHNlcnZlcikiLCJVIChzZXJ2ZXIpIik7Ci0g ICAgbiArPSAyOwotICAgIGlmIChuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0 dXJuKC0xKTsgZWxzZSBuID0gMDsKLQotICAgIGZvciAoIG9wdCA9IFRFTE9QVF9GSVJTVDsgb3B0 IDw9IFRFTE9QVF9MQVNUOyBvcHQrKykgewotICAgICAgICBzd2l0Y2ggKG9wdCkgewotICAgICAg ICAgIGNhc2UgVEVMT1BUX0FVVEhFTlRJQ0FUSU9OOgotICAgICAgICAgIGNhc2UgVEVMT1BUX0VO Q1JZUFRJT046Ci0gICAgICAgICAgY2FzZSBURUxPUFRfVFRZUEU6Ci0gICAgICAgICAgY2FzZSBU RUxPUFRfTkFXUzoKLSAgICAgICAgICBjYXNlIFRFTE9QVF9CSU5BUlk6Ci0gICAgICAgICAgY2Fz ZSBURUxPUFRfTkVXRU5WSVJPTjoKLSAgICAgICAgICBjYXNlIFRFTE9QVF9TTkRMT0M6Ci0gICAg ICAgICAgY2FzZSBURUxPUFRfWERJU1BMT0M6Ci0gICAgICAgICAgY2FzZSBURUxPUFRfU0dBOgot ICAgICAgICAgIGNhc2UgVEVMT1BUX0VDSE86Ci0gICAgICAgICAgY2FzZSBURUxPUFRfS0VSTUlU OgotICAgICAgICAgIGNhc2UgVEVMT1BUX1NUQVJUX1RMUzoKLSAgICAgICAgICBjYXNlIFRFTE9Q VF9GT1JXQVJEX1g6Ci0gICAgICAgICAgY2FzZSBURUxPUFRfQ09NUE9SVDoKLSAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg ICAgfQotICAgICAgICBwcmludGYoIiUwM2QgJS0xN3MgIiwKLSAgICAgICAgICAgICAgIG9wdCwg VEVMT1BUKG9wdCkKLSAgICAgICAgICAgICAgICk7Ci0gICAgICAgIHByaW50ZigiJTEycyAlMTJz ICIsCi0gICAgICAgICAgICAgICBURUxPUFRfTU9ERShURUxPUFRfREVGX0NfTUVfTU9ERShvcHQp KSwKLSAgICAgICAgICAgICAgIFRFTE9QVF9NT0RFKFRFTE9QVF9ERUZfQ19VX01PREUob3B0KSkK LSAgICAgICAgICAgICAgICk7Ci0gICAgICAgIHByaW50ZigiJTEycyAlMTJzXG4iLAotICAgICAg ICAgICAgICAgVEVMT1BUX01PREUoVEVMT1BUX0RFRl9TX01FX01PREUob3B0KSksCi0gICAgICAg ICAgICAgICBURUxPUFRfTU9ERShURUxPUFRfREVGX1NfVV9NT0RFKG9wdCkpCi0gICAgICAgICAg ICAgICApOwotCi0gICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgp KSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOwotICAgICAgICBpZiAoc3N0ZWxuZXQpCi0gICAgICAg ICAgcHJpbnRmKCIlMjFzICUxMnMgJTEycyAlMTJzICUxMnNcbiIsCi0gICAgICAgICAgICAgICAg ICIiLAotICAgICAgICAgICAgICAgICAiIiwKLSAgICAgICAgICAgICAgICAgIiIsCi0gICAgICAg ICAgICAgICAgIChURUxPUFRfTUUob3B0KT8iV0lMTCI6IldPTlQiKSwKLSAgICAgICAgICAgICAg ICAgKFRFTE9QVF9VKG9wdCk/IkRPIjoiRE9OVCIpCi0gICAgICAgICAgICAgICAgICk7Ci0gICAg ICAgIGVsc2UKLSAgICAgICAgICBwcmludGYoIiUyMXMgJTEycyAlMTJzICUxMnMgJTEyc1xuIiwK LSAgICAgICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICAgICAgIChURUxPUFRfTUUob3B0KT8i V0lMTCI6IldPTlQiKSwKLSAgICAgICAgICAgICAgICAgKFRFTE9QVF9VKG9wdCk/IkRPIjoiRE9O VCIpLAotICAgICAgICAgICAgICAgICAiIiwKLSAgICAgICAgICAgICAgICAgIiIKLSAgICAgICAg ICAgICAgICAgKTsKLSAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigtMSk7IGVsc2UgbiA9IDA7Ci0gICAgfQotICAgIHJldHVybihuKTsKLX0KLQot aW50Ci1zaG90ZWwobikgaW50IG47IHsKLSAgICBleHRlcm4gaW50IHRuX2R1cGxleDsKLSNpZmRl ZiBDS19FTlZJUk9OTUVOVAotICAgIGV4dGVybiBpbnQgdG5fZW52X2ZsZzsKLSAgICBleHRlcm4g Y2hhciB0bl9lbnZfYWNjdFtdOwotICAgIGV4dGVybiBjaGFyIHRuX2Vudl9qb2JbXTsKLSAgICBl eHRlcm4gY2hhciB0bl9lbnZfcHJudFtdOwotICAgIGV4dGVybiBjaGFyIHRuX2Vudl9zeXNbXTsK LSAgICBleHRlcm4gY2hhciAqIHRuX2Vudl91c2VydmFyWzhdWzJdOwotICAgIGludCB4OwotI2Vu ZGlmIC8qIENLX0VOVklST05NRU5UICovCi0jaWZkZWYgQ0tfU05ETE9DCi0gICAgZXh0ZXJuIGNo YXIgKiB0bl9sb2M7Ci0jZW5kaWYgLyogQ0tfU05ETE9DICovCi0gICAgcHJpbnRmKCJTRVQgVEVM TkVUIHBhcmFtZXRlcnM6XG4gZWNobzogJXNcbiBOVlQgbmV3bGluZS1tb2RlOiAiLAotICAgICAg ICAgICB0bl9kdXBsZXggPyAibG9jYWwiIDogInJlbW90ZSIpOwotICAgIHN3aXRjaCAodG5fbmxt KSB7Ci0gICAgICBjYXNlIFROTF9DUk5VTDogcHJpbnRmKCIlc1xuIiwib2ZmIChjci1udWwpIik7 IGJyZWFrOwotICAgICAgY2FzZSBUTkxfQ1JMRjogIHByaW50ZigiJXNcbiIsIm9uIChjci1sZiki KTsgYnJlYWs7Ci0gICAgICBjYXNlIFROTF9DUjogICAgcHJpbnRmKCIlc1xuIiwicmF3IChjciki KTsgYnJlYWs7Ci0gICAgICBjYXNlIFROTF9MRjogICAgcHJpbnRmKCIlc1xuIiwiKGxmKSIpOyBi cmVhazsKLSAgICB9Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkp IHJldHVybigtMSk7IGVsc2UgbiA9IDA7Ci0jaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KLSAgICB7 Ci0gICAgICAgIGludCB0eXBlID0gY2tfdG5fYXV0aGVudGljYXRlZCgpOwotICAgICAgICBwcmlu dGYoIiBhdXRoZW50aWNhdGlvbjogIik7Ci0gICAgICAgIHN3aXRjaCAoc3N0ZWxuZXQgPwotICAg ICAgICAgICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA6Ci0gICAg ICAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9BVVRIRU5USUNBVElPTikKLSAgICAg ICAgICAgICAgICApIHsKLSAgICAgICAgICBjYXNlIFROX05HX0FDOiBwcmludGYoICJhY2NlcHRl ZCAiICk7IGJyZWFrOwotICAgICAgICAgIGNhc2UgVE5fTkdfUkY6IHByaW50ZiggInJlZnVzZWQg ICIgKTsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBUTl9OR19SUTogcHJpbnRmKCAicmVxdWVzdGVk Iik7IGJyZWFrOwotICAgICAgICAgIGNhc2UgVE5fTkdfTVU6IHByaW50ZiggInJlcXVpcmVkICIp OyBicmVhazsKLSAgICAgICAgfQotCi0jaWZkZWYgQ0tfU1NMCi0gICAgICAgIGlmICgoc3NsX2Fj dGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykgJiYKLSAgICAgICAgICAgICBja190bl9hdXRo X3ZhbGlkKCkgPT0gQVVUSF9WQUxJRCAmJgotICAgICAgICAgICAgICghVEVMT1BUX1UoVEVMT1BU X0FVVEhFTlRJQ0FUSU9OKSB8fAotICAgICAgICAgICAgICAgdHlwZSA9PSBBVVRIVFlQRV9OVUxM IHx8Ci0gICAgICAgICAgICAgICB0eXBlID09IEFVVEhUWVBFX0FVVE8pKQotICAgICAgICAgICAg cHJpbnRmKCIgICBpbiB1c2U6IFguNTA5IGNlcnRpZmljYXRlXG4iKTsKLSAgICAgICAgZWxzZQot I2VuZGlmIC8qIENLX1NTTCAqLwotICAgICAgICAgIHByaW50ZigiICAgaW4gdXNlOiAlc1xuIixB VVRIVFlQRV9OQU1FKHR5cGUpKTsKLSAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYg KCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2UgbiA9IDA7Ci0gICAgICAgIGlmIChmb3J3YXJk X2ZsYWcpCi0gICAgICAgICAgcHJpbnRmKCIgIGNyZWRlbnRpYWxzIGZvcndhcmRpbmcgcmVxdWVz dGVkICVzXG4iLAotICAgICAgICAgICAgICAgICBmb3J3YXJkZWRfdGlja2V0cyA/ICJhbmQgY29t cGxldGVkIiA6Ci0gICAgICAgICAgICAgICAgICJidXQgbm90IGNvbXBsZXRlZCIpOwotICAgICAg ICBlbHNlCi0gICAgICAgICAgcHJpbnRmKCIgIGNyZWRlbnRpYWxzIGZvcndhcmRpbmcgZGlzYWJs ZWRcbiIpOwotICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkg cmV0dXJuKC0xKTsgZWxzZSBuID0gMDsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJ T04gKi8KLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgewotICAgICAgICBpbnQgaSx4OwotICAg ICAgICBpbnQgZV90eXBlID0gY2tfdG5fZW5jcnlwdGluZygpOwotICAgICAgICBpbnQgZF90eXBl ID0gY2tfdG5fZGVjcnlwdGluZygpOwotICAgICAgICBjaGFyICogZV9zdHIgPSBOVUxMLCAqIGRf c3RyID0gTlVMTDsKLSAgICAgICAgc3RhdGljIHN0cnVjdCBrZXl0YWIgKiB0bmV0YmwgPSBOVUxM OwotICAgICAgICBzdGF0aWMgaW50IG50bmV0YmwgPSAwOwotCi0gICAgICAgIHggPSBja19nZXRf Y3J5cHRfdGFibGUoJnRuZXRibCwmbnRuZXRibCk7Ci0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8 IG50bmV0Ymw7IGkrKykgewotICAgICAgICAgICAgaWYgKGVfdHlwZSA9PSB0bmV0YmxbaV0ua3d2 YWwpCi0gICAgICAgICAgICAgIGVfc3RyID0gdG5ldGJsW2ldLmt3ZDsKLSAgICAgICAgICAgIGlm IChkX3R5cGUgPT0gdG5ldGJsW2ldLmt3dmFsKQotICAgICAgICAgICAgICBkX3N0ciA9IHRuZXRi bFtpXS5rd2Q7Ci0gICAgICAgIH0KLSAgICAgICAgcHJpbnRmKCIgZW5jcnlwdGlvbjogIik7Ci0g ICAgICAgIHN3aXRjaCAoVEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pKSB7Ci0gICAg ICAgICAgLyogVGhpcyBzaG91bGQgYmUgY2hhbmdlZCB0byByZXBvcnQgYm90aCBNRSBhbmQgVSBt b2RlcyAqLwotICAgICAgICAgIGNhc2UgVE5fTkdfQUM6IHByaW50ZiggImFjY2VwdGVkICIgKTsg YnJlYWs7Ci0gICAgICAgICAgY2FzZSBUTl9OR19SRjogcHJpbnRmKCAicmVmdXNlZCAgIiApOyBi cmVhazsKLSAgICAgICAgICBjYXNlIFROX05HX1JROiBwcmludGYoICJyZXF1ZXN0ZWQiKTsgYnJl YWs7Ci0gICAgICAgICAgY2FzZSBUTl9OR19NVTogcHJpbnRmKCAicmVxdWlyZWQgIik7IGJyZWFr OwotICAgICAgICB9Ci0gICAgICAgIHByaW50ZigiICAgICAgIGluIHVzZTogIik7Ci0gICAgICAg IHN3aXRjaCAoKGVfdHlwZSA/IDEgOiAwKSB8IChkX3R5cGUgPyAyIDogMCkpIHsKLSAgICAgICAg ICBjYXNlIDA6Ci0gICAgICAgICAgICBwcmludGYoInBsYWluIHRleHQgaW4gYm90aCBkaXJlY3Rp b25zIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAg ICBwcmludGYoIiVzIG91dHB1dCwgcGxhaW4gdGV4dCBpbnB1dCIsZV9zdHIpOwotICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgcHJpbnRmKCJwbGFpbiB0 ZXh0IG91dHB1dCwgJXMgaW5wdXQiLGRfc3RyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgIGNhc2UgMzoKLSAgICAgICAgICAgIHByaW50ZigiJXMgb3V0cHV0LCAlcyBpbnB1dCIsZV9z dHIsZF9zdHIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcHJpbnRm KCJcbiIpOwotICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkg cmV0dXJuKC0xKTsgZWxzZSBuID0gMDsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAq LwotI2lmZGVmIElLU19PUFRJT04KLSAgICBwcmludGYoIiBrZXJtaXQ6ICIpOwotICAgIHN3aXRj aCAoVEVMT1BUX1VfTU9ERShURUxPUFRfS0VSTUlUKSkgewotICAgICAgY2FzZSBUTl9OR19BQzog cHJpbnRmKCAidSwgYWNjZXB0ZWQ7ICAiICk7IGJyZWFrOwotICAgICAgY2FzZSBUTl9OR19SRjog cHJpbnRmKCAidSwgcmVmdXNlZDsgICAiICk7IGJyZWFrOwotICAgICAgY2FzZSBUTl9OR19SUTog cHJpbnRmKCAidSwgcmVxdWVzdGVkOyAiKTsgYnJlYWs7Ci0gICAgICBjYXNlIFROX05HX01VOiBw cmludGYoICJ1LCByZXF1aXJlZDsgICIpOyBicmVhazsKLSAgICB9Ci0gICAgc3dpdGNoIChURUxP UFRfTUVfTU9ERShURUxPUFRfS0VSTUlUKSkgewotICAgICAgY2FzZSBUTl9OR19BQzogcHJpbnRm KCAibWUsIGFjY2VwdGVkOyAgIiApOyBicmVhazsKLSAgICAgIGNhc2UgVE5fTkdfUkY6IHByaW50 ZiggIm1lLCByZWZ1c2VkOyAgICIgKTsgYnJlYWs7Ci0gICAgICBjYXNlIFROX05HX1JROiBwcmlu dGYoICJtZSwgcmVxdWVzdGVkOyAiKTsgYnJlYWs7Ci0gICAgICBjYXNlIFROX05HX01VOiBwcmlu dGYoICJtZSwgcmVxdWlyZWQ7ICAiKTsgYnJlYWs7Ci0gICAgfQotICAgIGlmIChURUxPUFRfVShU RUxPUFRfS0VSTUlUKSkKLSAgICAgIHByaW50ZigiIHUsICVzIiwKLSAgICAgICAgICAgICBURUxP UFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnVfc3RhcnQgPwotICAgICAgICAgICAgICJzdGFy dGVkIiA6Ci0gICAgICAgICAgICAgInN0b3BwZWQiCi0gICAgICAgICAgICAgKTsKLSAgICBlbHNl Ci0gICAgICBwcmludGYoIiB1LCBuL2EiKTsKLSAgICBpZiAoVEVMT1BUX01FKFRFTE9QVF9LRVJN SVQpKQotICAgICAgcHJpbnRmKCIgbWUsICVzOyIsCi0gICAgICAgICAgICAgVEVMT1BUX1NCKFRF TE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCA/Ci0gICAgICAgICAgICAgInN0YXJ0ZWQiIDoK LSAgICAgICAgICAgICAic3RvcHBlZCIKLSAgICAgICAgICAgICApOwotICAgIGVsc2UKLSAgICAg IHByaW50ZigiIG1lLCBuL2E7Iik7Ci0gICAgcHJpbnRmKCJcbiIpOwotICAgIGlmICgrK24gPiBj bWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOwotI2Vu ZGlmIC8qIElLU19PUFRJT04gKi8KLSAgICBwcmludGYoIiBCSU5BUlkgbmV3bGluZS1tb2RlOiAi KTsKLSAgICBzd2l0Y2ggKHRuX2JfbmxtKSB7Ci0gICAgICBjYXNlIFROTF9DUk5VTDogcHJpbnRm KCIlc1xuIiwib2ZmIChjci1udWwpIik7IGJyZWFrOwotICAgICAgY2FzZSBUTkxfQ1JMRjogIHBy aW50ZigiJXNcbiIsIm9uIChjci1sZikiKTsgYnJlYWs7Ci0gICAgICBjYXNlIFROTF9DUjogICAg cHJpbnRmKCIlc1xuIiwicmF3IChjcikiKTsgYnJlYWs7Ci0gICAgICBjYXNlIFROTF9MRjogICAg cHJpbnRmKCIlc1xuIiwiKGxmKSIpOyBicmVhazsKLSAgICB9Ci0gICAgaWYgKCsrbiA+IGNtZF9y b3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2UgbiA9IDA7Ci0gICAgcHJp bnRmKCIgYmluYXJ5LW1vZGU6ICIpOwotICAgIHN3aXRjaCAoVEVMT1BUX1VfTU9ERShURUxPUFRf QklOQVJZKSkgewotICAgICAgY2FzZSBUTl9OR19BQzogcHJpbnRmKCAidSwgYWNjZXB0ZWQ7ICAi ICk7IGJyZWFrOwotICAgICAgY2FzZSBUTl9OR19SRjogcHJpbnRmKCAidSwgcmVmdXNlZDsgICAi ICk7IGJyZWFrOwotICAgICAgY2FzZSBUTl9OR19SUTogcHJpbnRmKCAidSwgcmVxdWVzdGVkOyAi KTsgYnJlYWs7Ci0gICAgICBjYXNlIFROX05HX01VOiBwcmludGYoICJ1LCByZXF1aXJlZDsgICIp OyBicmVhazsKLSAgICB9Ci0gICAgc3dpdGNoIChURUxPUFRfTUVfTU9ERShURUxPUFRfQklOQVJZ KSkgewotICAgICAgY2FzZSBUTl9OR19BQzogcHJpbnRmKCAibWUsIGFjY2VwdGVkOyAiICk7IGJy ZWFrIDsKLSAgICAgIGNhc2UgVE5fTkdfUkY6IHByaW50ZiggIm1lLCByZWZ1c2VkOyAiICk7IGJy ZWFrOwotICAgICAgY2FzZSBUTl9OR19SUTogcHJpbnRmKCAibWUsIHJlcXVlc3RlZDsgIik7IGJy ZWFrOwotICAgICAgY2FzZSBUTl9OR19NVTogcHJpbnRmKCAibWUsIHJlcXVpcmVkOyAgIik7IGJy ZWFrOwotICAgIH0KLSAgICBwcmludGYoInUsICVzOyBtZSwgJXNcbiIsCi0gICAgICAgICAgIFRF TE9QVF9VKFRFTE9QVF9CSU5BUlkpID8gIkJJTkFSWSIgOiAiTlZUIiwKLSAgICAgICAgICAgVEVM T1BUX01FKFRFTE9QVF9CSU5BUlkpID8gIkJJTkFSWSIgOiAiTlZUIgotICAgICAgICAgICApOwot ICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBl bHNlIG4gPSAwOwotICAgIHByaW50ZigiIGJpbmFyeS10cmFuc2Zlci1tb2RlOiAlc1xuIixzaG93 b2ZmKHRuX2JfeGZlcikpOwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9y ZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOwotICAgIHByaW50ZigiIGJ1ZyBiaW5hcnktbWUt bWVhbnMtdS10b286ICVzXG4iLHNob3dvZmYodG5fYl9tZXUpKTsKLSAgICBpZiAoKytuID4gY21k X3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxzZSBuID0gMDsKLSAgICBw cmludGYoIiBidWcgYmluYXJ5LXUtbWVhbnMtbWUtdG9vOiAlc1xuIixzaG93b2ZmKHRuX2JfdW1l KSk7Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigt MSk7IGVsc2UgbiA9IDA7Ci0gICAgcHJpbnRmKCIgYnVnIHNiLWltcGxpZXMtd2lsbC1kbzogJXNc biIsc2hvd29mZih0bl9zYl9idWcpKTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAo IWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxzZSBuID0gMDsKLSAgICBwcmludGYoIiBidWcgYXV0 aC1rcmI1LWRlczogJXNcbiIsc2hvd29mZih0bl9hdXRoX2tyYjVfZGVzX2J1ZykpOwotICAgIGlm ICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4g PSAwOwotICAgIHByaW50ZigiIHRlcm1pbmFsLXR5cGU6ICIpOwotICAgIGlmICh0bl90ZXJtKSB7 Ci0gICAgICAgIHByaW50ZigiJXNcbiIsdG5fdGVybSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg Y2hhciAqcDsKLSNpZmRlZiBPUzIKLSAgICAgICAgcCA9ICh0dF90eXBlID49IDAgJiYgdHRfdHlw ZSA8PSBtYXhfdHQpID8KLSAgICAgICAgICB0dF9pbmZvW3R0X3R5cGVdLnhfbmFtZSA6Ci0gICAg ICAgICAgICAiVU5LTk9XTiI7Ci0jZWxzZQotICAgICAgICBwID0gZ2V0ZW52KCJURVJNIik7Ci0j ZW5kaWYgLyogT1MyICovCi0gICAgICAgIGlmIChwKQotICAgICAgICAgIHByaW50Zigibm9uZSAo JXMgd2lsbCBiZSB1c2VkKVxuIixwKTsKLSAgICAgICAgZWxzZSBwcmludGYoIm5vbmVcbiIpOwot ICAgIH0KLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJu KC0xKTsgZWxzZSBuID0gMDsKLSNpZmRlZiBDS19FTlZJUk9OTUVOVAotICAgIHByaW50ZigiIGVu dmlyb25tZW50OiAlc1xuIiwgc2hvd29mZih0bl9lbnZfZmxnKSk7Ci0gICAgaWYgKCsrbiA+IGNt ZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2UgbiA9IDA7Ci0gICAg cHJpbnRmKCIgICBBQ0NPVU5UOiAlc1xuIix0bl9lbnZfYWNjdCk7Ci0gICAgaWYgKCsrbiA+IGNt ZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2UgbiA9IDA7Ci0gICAg cHJpbnRmKCIgICBESVNQTEFZOiAlc1xuIiwoY2hhciAqKXRuX2dldF9kaXNwbGF5KCkgPwotICAg ICAgICAgICAgKGNoYXIgKil0bl9nZXRfZGlzcGxheSgpIDogIiIpOwotICAgIGlmICgrK24gPiBj bWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOwotICAg IHByaW50ZigiICAgSk9CICAgIDogJXNcbiIsdG5fZW52X2pvYik7Ci0gICAgaWYgKCsrbiA+IGNt ZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2UgbiA9IDA7Ci0gICAg cHJpbnRmKCIgICBQUklOVEVSOiAlc1xuIix0bl9lbnZfcHJudCk7Ci0gICAgaWYgKCsrbiA+IGNt ZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2UgbiA9IDA7Ci0jaWZu ZGVmIE5PU1BMCi0gICAgcHJpbnRmKCIgICBVU0VSICAgOiAlc1xuIix1aWRidWYpOwotICAgIGlm ICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4g PSAwOwotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgcHJpbnRmKCIgICBTWVNURU0gOiAlc1xuIix0 bl9lbnZfc3lzKTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkg cmV0dXJuKC0xKTsgZWxzZSBuID0gMDsKLSAgICBmb3IgKHggPSAwOyB4IDwgODsgeCsrKSB7Ci0g ICAgICAgIGlmICh0bl9lbnZfdXNlcnZhclt4XVswXSAmJiB0bl9lbnZfdXNlcnZhclt4XVsxXSkg ewotICAgICAgICAgICAgcHJpbnRmKCIgICAlLTdzOiAlc1xuIix0bl9lbnZfdXNlcnZhclt4XVsw XSwKLSAgICAgICAgICAgICAgICAgICB0bl9lbnZfdXNlcnZhclt4XVsxXSk7Ci0gICAgICAgICAg ICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxz ZSBuID0gMDsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBDS19FTlZJUk9OTUVOVCAqLwot I2lmZGVmIENLX1NORExPQwotICAgIHByaW50ZigiICBMT0NBVElPTjogJXNcbiIsIHRuX2xvYyA/ IHRuX2xvYyA6ICIiKTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUo KSkgcmV0dXJuKC0xKTsgZWxzZSBuID0gMDsKLSNlbmRpZiAvKiBDS19TTkRMT0MgKi8KLSNpZmRl ZiBDS19GT1JXQVJEX1gKLSAgICBwcmludGYoIiAuWGF1dGhvcml0eS1maWxlOiAlc1xuIiwgKGNo YXIgKilYYXVGaWxlTmFtZSgpID8KLSAgICAgICAgICAgIChjaGFyICopWGF1RmlsZU5hbWUoKSA6 ICIobm9uZSkiKTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkg cmV0dXJuKC0xKTsgZWxzZSBuID0gMDsKLSNlbmRpZiAvKiBDS19GT1JXQVJEX1ggKi8KLSAgICBy ZXR1cm4obik7Ci19Ci0jZW5kaWYgLyogVE5DT0RFICovCi0KLSNpZmRlZiBDS19ORVRCSU9TCi1z dGF0aWMgaW50Ci1zaG9uYihuKSBpbnQgbjsgewotICAgIHByaW50ZigiTkVUQklPUyBwYXJhbWV0 ZXJzOlxuIik7Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJl dHVybigtMSk7IGVsc2UgbiA9IDA7Ci0gICAgcHJpbnRmKCIgQVBJICAgICAgIDogJXNcbiIsCi0g ICAgICAgICAgIE5ldGJldWlBUEkgPwotICAgICAgICAgICAiTkVUQVBJLkRMTCAtIElCTSBFeHRl bmRlZCBTZXJ2aWNlcyBvciBOb3ZlbGwgTmV0d2FyZSBSZXF1ZXN0ZXIiCi0gICAgICAgICAgIDog IkFDU05FVEIuRExMIC0gSUJNIE5ldHdvcmsgVHJhbnNwb3J0IFNlcnZpY2VzLzIiICkgOwotICAg IGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNl IG4gPSAwOwotICAgIHByaW50ZigiIExvY2FsIE5hbWU6IFslc11cbiIsIE5ldEJpb3NOYW1lKTsK LSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsg ZWxzZSBuID0gMDsKLSAgICBwcmludGYoIiBBZGFwdGVyICAgOiAlZFxuIiwgTmV0Qmlvc0FkYXB0 ZXIpOwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4o LTEpOyBlbHNlIG4gPSAwOwotICAgIGlmIChOZXRCaW9zTFNOID4gMHhGRikgewotICAgICAgICBw cmludGYoIiBTZXNzaW9uICAgOiAlZFxuIiwgTmV0Qmlvc0xTTik7Ci0gICAgfSBlbHNlIHsKLSAg ICAgICAgcHJpbnRmKCIgU2Vzc2lvbiAgIDogbm9uZSBhY3RpdmVcbiIpOwotICAgIH0KLSAgICBp ZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxzZSBu ID0gMDsKLSAgICByZXR1cm4obik7Ci19Ci0jZW5kaWYgLyogQ0tfTkVUQklPUyAqLwotCi0jaWZu ZGVmIE5PTkVUCi1pbnQKLXNob25ldCgpIHsKLQotI2lmbmRlZiBORVRDT05OCi0gICAgcHJpbnRm KCJcbk5vIG5ldHdvcmtzIGFyZSBzdXBwb3J0ZWQgaW4gdGhpcyB2ZXJzaW9uIG9mIEMtS2VybWl0 XG4iKTsKLQotI2Vsc2UKLSNpZmRlZiBOT0xPQ0FMCi0gICAgcHJpbnRmKCJcbk5vIG5ldHdvcmtz IGFyZSBzdXBwb3J0ZWQgaW4gdGhpcyB2ZXJzaW9uIG9mIEMtS2VybWl0XG4iKTsKLQotI2Vsc2Ug LyogcmVzdCBvZiB0aGlzIHJvdXRpbmUgKi8KLQotICAgIGludCBpLCBuID0gNDsKLQotI2lmbmRl ZiBOT0RJQUwKLSAgICBpZiAobm5ldGRpciA8PSAxKSB7Ci0gICAgICAgIHByaW50ZigiXG5OZXR3 b3JrIGRpcmVjdG9yeTogJXNcbiIsbmV0ZGlyWzBdID8gbmV0ZGlyWzBdIDogIihub25lKSIpOwot ICAgICAgICBuKys7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW50IGk7Ci0gICAgICAgIHByaW50 ZigiXG5OZXR3b3JrIGRpcmVjdG9yaWVzOlxuIik7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBu bmV0ZGlyOyBpKyspIHsKLSAgICAgICAgICAgIHByaW50ZigiJTJkLiAlc1xuIixpLG5ldGRpcltp XSk7Ci0gICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkg cmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIE5PRElB TCAqLwotCi0jaWZkZWYgU1NIQ01ECi0gICAgewotICAgICAgICBleHRlcm4gY2hhciAqIHNzaGNt ZDsKLSAgICAgICAgcHJpbnRmKCJTU0ggQ09NTUFORDogJXNcbiIsc3NoY21kID8gc3NoY21kIDog InNzaCAtZSBub25lIik7Ci0gICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNr bW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgfQotI2VuZGlmIC8qIFNTSENNRCAq LwotCi0jaWZkZWYgT1MyCi0gICAgcHJpbnRmKCJcbk5ldHdvcmsgYXZhaWxhYmlsaXR5OlxuIik7 Ci0jZWxzZQotICAgIHByaW50ZigiXG5TdXBwb3J0ZWQgbmV0d29ya3M6XG4iKTsKLSNlbmRpZiAv KiBPUzIgKi8KLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0 dXJuKDApOyBlbHNlIG4gPSAwOwotCi0jaWZkZWYgVk1TCi0KLSNpZmRlZiBUQ1BXQVJFCi0gICAg cHJpbnRmKCIgUHJvY2VzcyBTb2Z0d2FyZSBDb3Jwb3JhdGlvbiBUQ1B3YXJlIGZvciBPcGVuVk1T Iik7Ci0jZWxzZQotI2lmZGVmIE1VTFRJTkVUCi0gICAgcHJpbnRmKCIgVEdWIE11bHRpTmV0IFRD UC9JUCIpOwotI2Vsc2UKLSNpZmRlZiBXSU5UQ1AKLSAgICBwcmludGYoIiBXT0xMT05HT05HIFdJ Ti9UQ1AiKTsKLSNlbHNlCi0jaWZkZWYgREVDX1RDUElQCi0gICAgewotICAgICAgICBzdGF0aWMg JERFU0NSSVBUT1IodGNwX2Rlc2MsIl9UQ1AwOiIpOwotICAgICAgICBpbnQgc3RhdHVzOwotICAg ICAgICBsb25nIGRldmNsYXNzOwotICAgICAgICBzdGF0aWMgaW50IGl0bWNvZCA9IERWSSRfREVW Q0xBU1M7Ci0KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIHN0YXR1cyA9IExJQiRHRVREVkkoJml0 bWNvZCwgMCwgJnRjcF9kZXNjLCAmZGV2Y2xhc3MpOwotI2Vsc2UKLSAgICAgICAgLyogTWFydGlu IFppbnNlciA5Lzk2ICovCi0gICAgICAgIHN0YXR1cyA9IGxpYiRnZXRkdmkoJml0bWNvZCwgMCwg JnRjcF9kZXNjLCAmZGV2Y2xhc3MpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgaWYg KChzdGF0dXMgJiAxKSAmJiAoZGV2Y2xhc3MgPT0gREMkX1NDT00pKQotICAgICAgICAgIHByaW50 ZigiIFByb2Nlc3MgU29mdHdhcmUgQ29ycG9yYXRpb24gVENQd2FyZSBmb3IgT3BlblZNUyIpOwot ICAgICAgICBlbHNlCi0jaWZkZWYgVUNYNTAKLSAgICAgICAgICBwcmludGYoIiBERUMgVENQL0lQ IFNlcnZpY2VzIGZvciAoT3BlbilWTVMgNS4wIik7Ci0jZWxzZQotICAgICAgICAgIHByaW50Zigi IERFQyBUQ1AvSVAgU2VydmljZXMgZm9yIChPcGVuKVZNUyIpOwotI2VuZGlmIC8qIFVDWDUwICov Ci0gICAgfQotI2Vsc2UKLSNpZmRlZiBDTVVfVENQSVAKLSAgICBwcmludGYoIiBDTVUtT3BlblZN Uy9JUCIpOwotI2Vsc2UKLSAgICBwcmludGYoIiBOb25lIik7Ci0jZW5kaWYgLyogQ01VX1RDUElQ ICovCi0jZW5kaWYgLyogREVDX1RDUElQICovCi0jZW5kaWYgLyogV0lOVENQICovCi0jZW5kaWYg LyogTVVMVElORVQgKi8KLSNlbmRpZiAvKiBUQ1BXQVJFICovCi0gICAgaWYgKCsrbiA+IGNtZF9y b3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSNpZmRlZiBU TkNPREUKLSAgICBwcmludGYoIiwgVEVMTkVUIHByb3RvY29sXG5cbiIpOwotICAgIGlmICgrK24g PiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0g ICAgbiA9IHNob3RlbChuKTsKLSAgICBpZiAobiA8IDApIHJldHVybigwKTsKLSAgICBpZiAoKytu ID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwot I2VuZGlmIC8qIFROQ09ERSAqLwotICAgIHByaW50ZigiXG4iKTsKLSAgICBpZiAoKytuID4gY21k X3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgIHBy aW50ZigiXG4iKTsKLSAgICBuID0gc2hvdGNwKCsrbik7Ci0gICAgaWYgKG4gPCAwKSByZXR1cm4o MCk7Ci0jZWxzZSAvKiBOb3QgVk1TICovCi0KLSNpZmRlZiBTVU5YMjUKLSAgICBwcmludGYoIiBT dW5MaW5rIFguMjVcbiIpOwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9y ZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0jZW5kaWYgLyogU1VOWDI1ICovCi0KLSNpZmRl ZiBTVFJBVFVTWDI1Ci0gICAgcHJpbnRmKCIgU3RyYXR1cyBWT1MgWC4yNVxuIik7Ci0gICAgaWYg KCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0g MDsKLSNlbmRpZiAvKiBTVFJBVFVTWDI1ICovCi0KLSNpZmRlZiBJQk1YMjUKLSAgICBwcmludGYo IiBJQk0gQUlYIFguMjVcbiIpOwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNr bW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0jZW5kaWYgLyogSUJNWDI1ICovCi0KLSNp ZmRlZiBIUFgyNQotICAgIHByaW50ZigiIEhQLVVYIFguMjVcbiIpOwotICAgIGlmICgrK24gPiBj bWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0jZW5k aWYgLyogSFBYMjUgKi8KLQotI2lmZGVmIFNTSEJVSUxUSU4KLSAgICBpZiAoY2tfc3NsZWF5X2lz X2luc3RhbGxlZCgpKQotICAgICAgICBwcmludGYoIiBTU0ggVjEgYW5kIFYyIHByb3RvY29sc1xu Iik7Ci0gICAgZWxzZQotICAgICAgICBwcmludGYoIiBTU0ggVjEgYW5kIFYyIHByb3RvY29scyAt IG5vdCBhdmFpbGFibGVcbiIpOwotI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KLQotI2lmZGVmIERF Q05FVAotI2lmZGVmIE9TMgotI2lmZGVmIE5UCi0gICAgaWYgKGRuZXRfYXZhaWwpCi0gICAgICBw cmludGYoIiBERUNuZXQsIExBVCBhbmQgQ1RFUk0gcHJvdG9jb2xzXG4iKTsKLSAgICBlbHNlCi0g ICAgICBwcmludGYoIiBERUNuZXQsIExBVCBhbmQgQ1RFUk0gcHJvdG9jb2xzIC0gbm90IGF2YWls YWJsZVxuIik7Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJl dHVybigwKTsgZWxzZSBuID0gMDsKLSNlbHNlIC8qIE5UICovCi0gICAgaWYgKGRuZXRfYXZhaWwp Ci0gICAgICBwcmludGYoIiBERUNuZXQsIExBVCBwcm90b2NvbFxuIik7Ci0gICAgZWxzZQotICAg ICAgcHJpbnRmKCIgREVDbmV0LCBMQVQgcHJvdG9jb2wgLSBub3QgYXZhaWxhYmxlXG4iKTsKLSAg ICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNl IG4gPSAwOwotI2VuZGlmIC8qIE5UICovCi0jZWxzZQotICAgIHByaW50ZigiIERFQ25ldFxuIik7 Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsg ZWxzZSBuID0gMDsKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBERUNORVQgKi8KLQotI2lm ZGVmIE5QSVBFCi0gICAgcHJpbnRmKCIgTmFtZWQgUGlwZXNcbiIpOwotICAgIGlmICgrK24gPiBj bWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0jZW5k aWYgLyogTlBJUEUgKi8KLQotI2lmZGVmIENLX05FVEJJT1MKLSAgICBpZiAobmV0Ymlvc0F2YWls KQotICAgICAgcHJpbnRmKCIgTkVUQklPU1xuIik7Ci0gICAgZWxzZQotICAgICAgcHJpbnRmKCIg TkVUQklPUyAtIG5vdCBhdmFpbGFibGVcbiIpOwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMp IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0jZW5kaWYgLyogQ0tfTkVU QklPUyAqLwotCi0jaWZkZWYgU1VQRVJMQVQKLSAgICBpZiAoc2xhdF9hdmFpbCkKLSAgICAgIHBy aW50ZigiIFN1cGVyTEFUXG4iKTsKLSAgICBlbHNlCi0gICAgICBwcmludGYoIiBTdXBlckxBVCAt IG5vdCBhdmFpbGFibGVcbiIpIDsKLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFz a21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotI2VuZGlmIC8qIFNVUEVSTEFUICovCi0K LSNpZmRlZiBUQ1BTT0NLRVQKLSAgICBpZiAoCi0jaWZkZWYgT1MyCi0gICAgICAgIHRjcF9hdmFp bAotI2Vsc2UKLSAgICAgICAgMQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICApIHsKLSAgICAg ICAgY2hhciBpcGFkZHJbMTZdOwotCi0gICAgICAgIGlmIChnZXRsb2NhbGlwYWRkcnMoaXBhZGRy LDE2LDApIDwgMCkgewotI2lmZGVmIE9TMk9OTFkKLSAgICAgICAgICAgIHByaW50ZigiIFRDUC9J UCB2aWEgJXNcbiIsIHRjcG5hbWUpOwotI2Vsc2UKLSAgICAgICAgICAgIHByaW50ZigiIFRDUC9J UFxuIik7Ci0jZW5kaWYgLyogT1MyT05MWSAqLwotICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9y b3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAg fSBlbHNlIHsKLSAgICAgICAgICAgIGludCBpID0gMTsKLSNpZmRlZiBPUzJPTkxZCi0gICAgICAg ICAgcHJpbnRmKCIgVENQL0lQIFslMTZzXSB2aWEgJXNcbiIsIGlwYWRkciwgdGNwbmFtZSk7Ci0j ZWxzZQotICAgICAgICAgIHByaW50ZigiIFRDUC9JUCBbJTE2c11cbiIsaXBhZGRyKTsKLSNlbmRp ZiAvKiBPUzJPTkxZICovCi0gICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAo IWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotCi0gICAgICAgICAgICB3aGlsZSAo Z2V0bG9jYWxpcGFkZHJzKGlwYWRkciwxNixpKyspID49IDApIHsKLSAgICAgICAgICAgICAgICBw cmludGYoIiAgICAgICAgWyUxNnNdXG4iLGlwYWRkcik7Ci0gICAgICAgICAgICAgICAgaWYgKCsr biA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsK LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAobmV0dHlwZSA9PSBORVRfVENQ QikgewotICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICAgICAgbiA9IHNob3RjcCgr K24pOwotICAgICAgICAgICAgaWYgKG4gPCAwKSByZXR1cm4oMCk7Ci0jaWZkZWYgVE5DT0RFCi0g ICAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgICAgICBuID0gc2hvdGVsKCsrbik7Ci0g ICAgICAgICAgICBpZiAobiA8IDApIHJldHVybigwKTsKLSNlbmRpZiAvKiBUTkNPREUgKi8KLSAg ICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4o MCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgIH0KLSNpZmRlZiBPUzIKLSAgICB9IGVsc2UgewotICAg ICAgICBwcmludGYoIiBUQ1AvSVAgLSBub3QgYXZhaWxhYmxlJXNcbiIsdGNwbmFtZVswXSA/IHRj cG5hbWUgOiAiIiApOwotICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotI2VuZGlmIC8qIE9TMiAqLwotICAgIH0KLSNl bmRpZiAvKiBUQ1BTT0NLRVQgKi8KLQotI2lmZGVmIENLX05FVEJJT1MKLSAgICBpZiAobmV0Ymlv c0F2YWlsICYmIG5ldHR5cGUgPT0gTkVUX0JJT1MpIHsKLSAgICAgICBwcmludGYoIlxuIikgOwot ICAgICAgIGlmICgobiA9IHNob25iKCsrbikpIDwgMCkgcmV0dXJuKDApOwotICAgICAgIGlmICgr K24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7 Ci0gICAgfQotI2VuZGlmIC8qIENLX05FVEJJT1MgKi8KLQotI2VuZGlmIC8qIFZNUyAqLwotCi0g ICAgcHJpbnRmKCJcbkFjdGl2ZSBuZXR3b3JrIGNvbm5lY3Rpb246XG4iKTsKLSAgICBpZiAoKytu ID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwot Ci0gICAgaWYgKG5ldHdvcmspIHsKLSAgICAgICAgcHJpbnRmKCIgSG9zdDogJXMiLHR0bmFtZSk7 Ci0gICAgICAgIGlmICgobmV0dHlwZSA9PSBORVRfVENQQSB8fCBuZXR0eXBlID09IE5FVF9UQ1BC KSAmJiAqaXBhZGRyKQotICAgICAgICAgIHByaW50ZigiIFslc10iLGlwYWRkcik7Ci0gICAgfSBl bHNlCi0gICAgICBwcmludGYoIiBIb3N0OiBub25lIik7Ci0gICAgcHJpbnRmKCIsIHZpYTogIik7 Ci0gICAgaWYgKG5ldHR5cGUgPT0gTkVUX1RDUEEgfHwgbmV0dHlwZSA9PSBORVRfVENQQikKLSAg ICAgIHByaW50ZigidGNwL2lwXG4iKTsKLSAgICBlbHNlIGlmIChuZXR0eXBlID09IE5FVF9TWDI1 KQotICAgICAgcHJpbnRmKCJTdW5MaW5rIFguMjVcbiIpOwotICAgIGVsc2UgaWYgKG5ldHR5cGUg PT0gTkVUX1ZYMjUpCi0gICAgICBwcmludGYoIlN0cmF0dXMgVk9TIFguMjVcbiIpOwotICAgIGVs c2UgaWYgKG5ldHR5cGUgPT0gTkVUX0lYMjUpCi0gICAgICBwcmludGYoIklCTSBBSVggWC4yNVxu Iik7Ci0gICAgZWxzZSBpZiAobmV0dHlwZSA9PSBORVRfSFgyNSkKLSAgICAgIHByaW50ZigiSFAt VVggWC4yNVxuIik7Ci0gICAgZWxzZSBpZiAobmV0dHlwZSA9PSBORVRfREVDKSB7Ci0gICAgICAg IGlmICggdHRucHJvdG8gPT0gTlBfTEFUICkKLSAgICAgICAgICBwcmludGYoIkRFQ25ldCBMQVRc biIpOwotICAgICAgICBlbHNlIGlmICggdHRucHJvdG8gPT0gTlBfQ1RFUk0gKQotICAgICAgICAg IHByaW50ZigiREVDbmV0IENURVJNXG4iKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHByaW50 ZigiREVDbmV0XG4iKTsKLSAgICB9IGVsc2UgaWYgKG5ldHR5cGUgPT0gTkVUX1BJUEUpCi0gICAg ICBwcmludGYoIk5hbWVkIFBpcGVzXG4iKTsKLSAgICBlbHNlIGlmIChuZXR0eXBlID09IE5FVF9C SU9TKQotICAgICAgcHJpbnRmKCJOZXRCSU9TXG4iKTsKLSAgICBlbHNlIGlmIChuZXR0eXBlID09 IE5FVF9TTEFUKQotICAgICAgcHJpbnRmKCJTdXBlckxBVFxuIik7Ci0KLSNpZmRlZiBORVRGSUxF Ci0gICAgZWxzZSBpZiAoIG5ldHR5cGUgPT0gTkVUX0ZJTEUgKQotICAgICAgcHJpbnRmKCJsb2Nh bCBmaWxlXG4iKTsKLSNlbmRpZiAvKiBORVRGSUxFICovCi0jaWZkZWYgTkVUQ01ECi0gICAgZWxz ZSBpZiAoIG5ldHR5cGUgPT0gTkVUX0NNRCApCi0gICAgICBwcmludGYoInBpcGVcbiIpOwotI2Vu ZGlmIC8qIE5FVENNRCAqLwotI2lmZGVmIE5FVFBUWQotICAgIGVsc2UgaWYgKCBuZXR0eXBlID09 IE5FVF9QVFkgKQotICAgICAgICBwcmludGYoInBzZXVkb3Rlcm1pbmFsXG4iKTsKLSNlbmRpZiAv KiBORVRQVFkgKi8KLSNpZmRlZiBORVRETEwKLSAgICBlbHNlIGlmICggbmV0dHlwZSA9PSBORVRf RExMICkKLSAgICAgIHByaW50ZigiZHluYW1pYyBsaW5rIGxpYnJhcnlcbiIpOwotI2VuZGlmIC8q IE5FVERMTCAqLwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSBy ZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0KLSNpZmRlZiBBTllYMjUKLSAgICBpZiAoKG5ldHR5cGUg PT0gTkVUX1NYMjUpIHx8Ci0gICAgICAgIChuZXR0eXBlID09IE5FVF9WWDI1KSB8fAotICAgICAg ICAobmV0dHlwZSA9PSBORVRfSVgyNSkpCi0gICAgICBpZiAoKG4gPSBzaG94MjUobikpIDwgMCkg cmV0dXJuKDApOwotI2VuZGlmIC8qIEFOWVgyNSAqLwotCi0jaWZkZWYgU1NIQlVJTFRJTgotICAg IGlmIChuZXR0eXBlID09IE5FVF9TU0gpIHsKLSAgICAgICAgcHJpbnRmKCJTZWN1cmUgU2hlbGwg cHJvdG9jb2xcbiIpOwotICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgIH0KLSNlbmRpZiAvKiBTU0hCVUlMVElO ICovCi0KLSAgICBpZiAobmV0dHlwZSA9PSBORVRfVENQQSB8fCBuZXR0eXBlID09IE5FVF9UQ1BC KSB7Ci0jaWZkZWYgUkxPR0NPREUKLSAgICAgICAgaWYgKHR0bnByb3RvID09IE5QX1JMT0dJTikg ewotICAgICAgICAgICAgcHJpbnRmKCIgTE9HSU4gKHJsb2dpbikgcHJvdG9jb2xcbiIpOwotICAg ICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigw KTsgZWxzZSBuID0gMDsKLSAgICAgICAgfQotI2lmZGVmIENLX0tFUkJFUk9TCi0gICAgICAgIGVs c2UgaWYgKHR0bnByb3RvID09IE5QX0s0TE9HSU4pIHsKLSAgICAgICAgICAgIHByaW50ZigiIEtl cmJlcm9zIDQgTE9HSU4gKGtsb2dpbikgcHJvdG9jb2xcbiIpOwotICAgICAgICAgICAgaWYgKCsr biA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsK LSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh0dG5wcm90byA9PSBOUF9FSzRMT0dJTikgewot ICAgICAgICAgICAgcHJpbnRmKCIgRW5jcnlwdGVkIEtlcmJlcm9zIDQgTE9HSU4gKGVrbG9naW4p IHByb3RvY29sXG4iKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICgh YXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz ZSBpZiAodHRucHJvdG8gPT0gTlBfSzVMT0dJTikgewotICAgICAgICAgICAgcHJpbnRmKCIgS2Vy YmVyb3MgNSBMT0dJTiAoa2xvZ2luKSBwcm90b2NvbFxuIik7Ci0gICAgICAgICAgICBpZiAoKytu ID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwot ICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHR0bnByb3RvID09IE5QX0VLNUxPR0lOKSB7Ci0g ICAgICAgICAgICBwcmludGYoIiBFbmNyeXB0ZWQgS2VyYmVyb3MgNSBMT0dJTiAoZWtsb2dpbikg cHJvdG9jb2xcbiIpOwotICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFh c2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgfQotI2VuZGlmIC8qIENL X0tFUkJFUk9TICovCi0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNpZmRlZiBDS19LRVJCRVJPUwot ICAgICAgICBpZiAodHRucHJvdG8gPT0gTlBfSzVVMlUpIHsKLSAgICAgICAgICAgIHByaW50Zigi IEtlcmJlcm9zIDUgVXNlciB0byBVc2VyIHByb3RvY29sXG4iKTsKLSAgICAgICAgICAgIGlmICgr K24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7 Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotCi0jaWZkZWYgVE5DT0RFCi0g ICAgICAgIGlmIChJU19URUxORVQoKSkgewotICAgICAgICAgICAgcHJpbnRmKCIgVEVMTkVUIHBy b3RvY29sXG4iKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNr bW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICBwcmludGYoIiBFY2hv aW5nIGlzIGN1cnJlbnRseSAlc1xuIixkdXBsZXggPyAibG9jYWwiIDogInJlbW90ZSIpOwotICAg ICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigw KTsgZWxzZSBuID0gMDsKLSAgICAgICAgfQotI2VuZGlmIC8qIFROQ09ERSAqLwotICAgICAgICBp ZiAodHRucHJvdG8gPT0gTlBfVENQUkFXKSB7Ci0gICAgICAgICAgICBwcmludGYoIiBSYXcgVENQ IHNvY2tldFxuIik7Ci0gICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFz a21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICB9Ci0gICAgfQotICAgIHBy aW50ZigiXG4iKTsKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jZW5kaWYgLyogTkVUQ09OTiAqLwot ICAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAvKiBOT05FVCAqLwotCi0jaWZuZGVmIE5PRElBTAot Vk9JRAotc2hvZGlhbCgpIHsKLSAgICBpZiAobWRtdHlwID49IDAgfHwgbG9jYWwgIT0gMCkgZG9z aG9kaWFsKCk7Ci19Ci0KLVZPSUQKLXNob2RzKHMpIGNoYXIgKnM7IHsgICAgICAgICAgICAgICAg ICAgICAvKiBTaG93IGEgZGlhbC1yZWxhdGVkIHN0cmluZyAqLwotICAgIGNoYXIgYzsKLSAgICBp ZiAocyA9PSBOVUxMIHx8ICEoKnMpKSB7ICAgICAgICAgICAvKiBFbXB0eT8gKi8KLSAgICAgICAg cHJpbnRmKCIobm9uZSlcbiIpOwotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIE5vdCBlbXB0eS4gKi8KLSAgICAgICAgd2hpbGUgKChjID0gKnMrKykpICAgICAgICAg ICAgICAvKiBDYW4gY29udGFpbiBjb250cm9scyAqLwotICAgICAgICAgIGlmIChjID09ICdcXCcp ICAgICAgICAgICAgICAgIC8qIGEgYmFja3NsYXNoICovCi0gICAgICAgICAgICBwcmludGYoIlxc XFwiKTsKLSAgICAgICAgICBlbHNlIGlmIChjID4gMzEgJiYgYyA8IDEyNykgewotICAgICAgICAg ICAgICBwdXRjaGFyKGMpOwotICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcHJpbnRmKCJc XHslZH0iLGMpOwotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgfQotfQotCi1pbnQKLWRvc2hv ZGlhbCgpIHsKLQotICAgIGludCBpLCBuID0gMjsKLQotICAgIHByaW50ZigiIERpYWwgc3RhdHVz OiAgJWQiLCBkaWFsc3RhKTsKLQotI2lmZGVmIEJJR0JVRk9LCi0gICAgaWYgKGRpYWxzdGEgPiA5 MCkKLSAgICAgIHByaW50ZigiID0gVW5rbm93biBlcnJvciIpOwotICAgIGVsc2UgaWYgKGRpYWxz dGEgPCAwKQotICAgICAgcHJpbnRmKCIgPSAobm9uZSkiKTsKLSAgICBlbHNlIGlmIChkaWFsc3Rh IDwgMzUgJiYgZGlhbG1zZ1tkaWFsc3RhXSkKLSAgICAgIHByaW50ZigiID0gJXMiLCBkaWFsbXNn W2RpYWxzdGFdKTsKLSNlbmRpZiAvKiBCSUdCVUZPSyAqLwotICAgIG4rKzsKLSAgICBpZiAobmRp YWxkaXIgPD0gMSkgewotICAgICAgICBwcmludGYoIlxuIERpYWwgZGlyZWN0b3J5OiAlc1xuIixk aWFsZGlyWzBdID8gZGlhbGRpclswXSA6ICIobm9uZSkiKTsKLSAgICB9IGVsc2UgewotICAgICAg ICBpbnQgaTsKLSAgICAgICAgcHJpbnRmKCJcbiBEaWFsIGRpcmVjdG9yaWVzOlxuIik7Ci0gICAg ICAgIGZvciAoaSA9IDA7IGkgPCBuZGlhbGRpcjsgaSsrKQotICAgICAgICAgIHByaW50ZigiJTJk LiAlc1xuIixpKzEsZGlhbGRpcltpXSk7Ci0gICAgICAgIG4gKz0gbmRpYWxkaXI7Ci0gICAgfQot ICAgIHByaW50ZigiIERpYWwgbWV0aG9kOiAgIik7Ci0gICAgaWYgICAgICAoZGlhbG1hdXRvKSAg ICAgICAgIHByaW50ZigiYXV0byAgICIpOwotICAgIGVsc2UgaWYgKGRpYWxtdGggPT0gWFlETV9E KSBwcmludGYoImRlZmF1bHQiKTsKLSAgICBlbHNlIGlmIChkaWFsbXRoID09IFhZRE1fUCkgcHJp bnRmKCJwdWxzZSAgIik7Ci0gICAgZWxzZSBpZiAoZGlhbG10aCA9PSBYWURNX1QpIHByaW50Zigi dG9uZSAgICIpOwotICAgIHByaW50ZigiICAgICAgICAgRGlhbCBzb3J0OiAlc1xuIixkaWFsc3J0 ID8gIm9uIiA6ICJvZmYiKTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgIHByaW50ZigiIERpYWwgaGFuZ3VwOiAg JXMgICAgICAgICAgICAgRGlhbCBkaXNwbGF5OiAlc1xuIiwKLSAgICAgICAgICAgZGlhbGhuZyA/ ICJvbiAiIDogIm9mZiIsIGRpYWxkcHkgPyAib24iIDogIm9mZiIpOwotICAgIGlmICgrK24gPiBj bWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAg aWYgKGRpYWxydHIgPiAwKSB7Ci0gICAgICAgIHByaW50ZigiIERpYWwgcmV0cmllczogJS0xMmQg ICAgRGlhbCBpbnRlcnZhbDogJWRcbiIsCi0gICAgICAgICAgICAgICBkaWFscnRyLCBkaWFsaW50 KTsKLSAgICB9IGVsc2UgewotICAgICAgICBwcmludGYoIiBEaWFsIHJldHJpZXM6IChhdXRvKSAg ICAgICAgICBEaWFsIGludGVydmFsOiAlZFxuIiwgZGlhbGludCk7Ci0gICAgfQotICAgIGlmICgr K24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7 Ci0gICAgcHJpbnRmKCIgRGlhbCB0aW1lb3V0OiAiKTsKLSNpZmRlZiBDS19UQVBJCi0gICAgaWYg KHR0dGFwaSAmJiAhdGFwaXBhc3MpCi0gICAgICAgIHByaW50ZigiKHRhcGkpIik7Ci0gICAgZWxz ZQotI2VuZGlmIC8qIENLX1RBUEkgKi8KLSAgICBpZiAoZGlhbHRtbyA+IDApCi0gICAgICBwcmlu dGYoIiU0ZCBzZWMiLCBkaWFsdG1vKTsKLSAgICBlbHNlCi0gICAgICBwcmludGYoIjAgKGF1dG8p Iik7Ci0gICAgcHJpbnRmKCIgICAgICAgIFJlZGlhbCBudW1iZXI6ICVzXG4iLGRpYWxudW0gPyBk aWFsbnVtIDogIihub25lKSIpOwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNr bW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgcHJpbnRmKCIgRGlhbCBjb25maXJt YXRpb246ICVzICAgICAgICBEaWFsIGNvbnZlcnQtZGlyZWN0b3J5OiAlc1xuIiwKLSAgICAgICAg ICAgZGlhbGNuZiA/ICJvbiAiIDogIm9mZiIsCi0gICAgICAgICAgIGRpYWxjdnQgPyAoKGRpYWxj dnQgPT0gMSkgPyAib24iIDogImFzayIpIDogIm9mZiIpOwotICAgIGlmICgrK24gPiBjbWRfcm93 cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgcHJpbnRm KCIgRGlhbCBpZ25vcmUtZGlhbHRvbmU6ICVzIiwgZGlhbGlkdCA/ICJvbiAiIDogIm9mZiIpOwot ICAgIHByaW50ZigiICAgICBEaWFsIHBhY2luZzogJWRcbiIsZGlhbHBhY2UpOwotICAgIGlmICgr K24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7 Ci0gICAgcHJpbnRmKAotIiBEaWFsIHByZWZpeDogICAgICAgICAgICAgICAgICAlc1xuIiwgZGlh bG5wciA/IGRpYWxucHIgOiAiKG5vbmUpIik7Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykg aWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICBwcmludGYoCi0iIERp YWwgc3VmZml4OiAgICAgICAgICAgICAgICAgICVzXG4iLCBkaWFsc2Z4ID8gZGlhbHNmeCA6ICIo bm9uZSkiKTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0 dXJuKDApOyBlbHNlIG4gPSAwOwotICAgIHByaW50ZigKLSIgRGlhbCBjb3VudHJ5LWNvZGU6ICAg ICAgICAgICAgJS0xMnMiLCBkaWFsbGNjID8gZGlhbGxjYyA6ICIobm9uZSkiKTsKLSAgICBwcmlu dGYoIkRpYWwgY29ubmVjdDogICVzIiwgZGlhbGNvbiA/ICgoZGlhbGNvbiA9PSAxKSA/ICJvbiIg OiAiYXV0byIpCi0gICAgICAgICAgIDogIm9mZiIpOwotICAgIGlmIChkaWFsY29uICE9IENBUl9P RkYpCi0gICAgICBwcmludGYoIiAlcyIsIGRpYWxjcSA/ICJxdWlldCIgOiAidmVyYm9zZSIpOwot ICAgIHByaW50ZigKLSJcbiBEaWFsIGFyZWEtY29kZTogICAgICAgICAgICAgICAlLTEycyIsIGRp YWxsYWMgPyBkaWFsbGFjIDogIihub25lKSIpOwotICAgIG4rKzsKLSAgICBpZiAoKytuID4gY21k X3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgIHBy aW50ZigiRGlhbCByZXN0cmljdDogIik7Ci0gICAgaWYgKGRpYWxyc3RyID09IDUpIHByaW50Zigi aW50ZXJuYXRpb25hbFxuIik7Ci0gICAgZWxzZSBpZiAoZGlhbHJzdHIgPT0gNCkgcHJpbnRmKCJs b25nLWRpc3RhbmNlXG4iKTsKLSAgICBlbHNlIGlmIChkaWFscnN0ciA9PSAyKSBwcmludGYoImxv Y2FsXG4iKTsKLSAgICBlbHNlIGlmIChkaWFscnN0ciA9PSA2KSBwcmludGYoIm5vbmVcbiIpOwot ICAgIGVsc2UgcHJpbnRmKCI/XG4iKTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAo IWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgIHByaW50ZigiIERpYWwgbGMt YXJlYS1jb2RlczogICAgICAgICAgICIpOwotICAgIGlmIChubG9jYWxhYyA9PSAwKQotICAgICAg cHJpbnRmKCIobm9uZSkiKTsKLSAgICBlbHNlCi0gICAgICBmb3IgKGkgPSAwOyBpIDwgbmxvY2Fs YWM7IGkrKykKLSAgICAgICAgcHJpbnRmKCIlcyAiLCBkaWFsbGNhY1tpXSk7Ci0gICAgcHJpbnRm KAotIlxuIERpYWwgbGMtcHJlZml4OiAgICAgICAgICAgICAgICVzXG4iLCBkaWFsbGNwID8gZGlh bGxjcCA6ICIobm9uZSkiKTsKLSAgICBuKys7Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykg aWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICBwcmludGYoCi0iIERp YWwgbGMtc3VmZml4OiAgICAgICAgICAgICAgICVzXG4iLCBkaWFsbGNzID8gZGlhbGxjcyA6ICIo bm9uZSkiKTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0 dXJuKDApOyBlbHNlIG4gPSAwOwotICAgIHByaW50ZigKLSIgRGlhbCBsZC1wcmVmaXg6ICAgICAg ICAgICAgICAgJXNcbiIsIGRpYWxsZHAgPyBkaWFsbGRwIDogIihub25lKSIpOwotICAgIGlmICgr K24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7 Ci0gICAgcHJpbnRmKAotIiBEaWFsIGxkLXN1ZmZpeDogICAgICAgICAgICAgICAlc1xuIiwgZGlh bGxkcyA/IGRpYWxsZHMgOiAiKG5vbmUpIik7Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykg aWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICBwcmludGYoCi0iIERp YWwgZm9yY2UtbG9uZy1kaXN0YW5jZSAgICAgICVzXG4iLCBzaG93b2ZmKGRpYWxmbGQpKTsKLSAg ICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNl IG4gPSAwOwotICAgIHByaW50ZigKLSIgRGlhbCBpbnRsLXByZWZpeDogICAgICAgICAgICAgJXNc biIsIGRpYWxpeHAgPyBkaWFsaXhwIDogIihub25lKSIpOwotICAgIGlmICgrK24gPiBjbWRfcm93 cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgcHJpbnRm KAotIiBEaWFsIGludGwtc3VmZml4OiAgICAgICAgICAgICAlc1xuIiwgZGlhbGl4cyA/IGRpYWxp eHMgOiAiKG5vbmUpIik7Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICBwcmludGYoCi0iIERpYWwgdG9sbC1mcmVl LWFyZWEtY29kZTogICAgICIpOwotICAgIGlmIChudG9sbGZyZWUgPT0gMCkKLSAgICAgIHByaW50 ZigiKG5vbmUpIik7Ci0gICAgZWxzZQotICAgICAgZm9yIChpID0gMDsgaSA8IG50b2xsZnJlZTsg aSsrKQotICAgICAgICBwcmludGYoIiVzICIsIGRpYWx0ZmNbaV0pOwotICAgIHByaW50ZigiXG4i KTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDAp OyBlbHNlIG4gPSAwOwotCi0gICAgcHJpbnRmKAotIiBEaWFsIHB1bHNlLWNvdW50cmllczogICAg ICAgICAiKTsKLSAgICBpZiAobmRpYWxwdWNjID09IDApCi0gICAgICBwcmludGYoIihub25lKSIp OwotICAgIGVsc2UKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBuZGlhbHB1Y2M7IGkrKykKLSAgICAg ICAgcHJpbnRmKCIlcyAiLCBkaWFscHVjY1tpXSk7Ci0gICAgcHJpbnRmKCJcbiIpOwotICAgIGlm ICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9 IDA7Ci0KLSAgICBwcmludGYoCi0iIERpYWwgdG9uZS1jb3VudHJpZXM6ICAgICAgICAgICIpOwot ICAgIGlmIChuZGlhbHRvY2MgPT0gMCkKLSAgICAgIHByaW50ZigiKG5vbmUpIik7Ci0gICAgZWxz ZQotICAgICAgZm9yIChpID0gMDsgaSA8IG5kaWFsdG9jYzsgaSsrKQotICAgICAgICBwcmludGYo IiVzICIsIGRpYWx0b2NjW2ldKTsKLSAgICBwcmludGYoIlxuIik7Ci0gICAgaWYgKCsrbiA+IGNt ZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLQotICAg IHByaW50ZigKLQkiIERpYWwgdG9sbC1mcmVlLXByZWZpeDogICAgICAgICVzXG4iLAotCWRpYWx0 ZnAgPyBkaWFsdGZwIDoKLQkoZGlhbGxkcCA/IGRpYWxsZHAgOiAiKG5vbmUpIikKLQkpOwotICAg IGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2Ug biA9IDA7Ci0gICAgcHJpbnRmKCIgRGlhbCBwYngtZXhjaGFuZ2U6ICAgICAgICAgICAgIik7Ci0g ICAgaWYgKG5kaWFscHh4ID09IDApCi0gICAgICBwcmludGYoIihub25lKSIpOwotICAgIGVsc2UK LSAgICAgIGZvciAoaSA9IDA7IGkgPCBuZGlhbHB4eDsgaSsrKQotICAgICAgICBwcmludGYoIiVz ICIsIGRpYWxweHhbaV0pOwotICAgIHByaW50ZigiXG4iKTsKLQotICAgIGlmICgrK24gPiBjbWRf cm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgcHJp bnRmKAotIiBEaWFsIHBieC1pbnNpZGUtcHJlZml4OiAgICAgICAlc1xuIiwgZGlhbHB4aSA/IGRp YWxweGkgOiAiKG5vbmUpIik7Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2tt b3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICBwcmludGYoCi0iIERpYWwgcGJ4LW91 dHNpZGUtcHJlZml4OiAgICAgICVzXG4iLCBkaWFscHhvID8gZGlhbHB4byA6ICIobm9uZSkiKTsK LSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBl bHNlIG4gPSAwOwotICAgIHByaW50ZigKLSIgRGlhbCBtYWNybzogICAgICAgICAgICAgICAgICAg JXNcbiIsIGRpYWxtYWMgPyBkaWFsbWFjIDogIihub25lKSIpOwotICAgIHJldHVybigwKTsKLX0K LSNlbmRpZiAvKiBOT0RJQUwgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLS8qICBTaG93IEZp bGUgUGFyYW1ldGVycyAqLwotCi1zdGF0aWMgY2hhciAqCi1wYXRodmFsKHgpIGludCB4OyB7Ci0g ICAgc3dpdGNoICh4KSB7Ci0gICAgICBjYXNlIFBBVEhfT0ZGOiAgcmV0dXJuKCJvZmYiKTsKLSAg ICAgIGNhc2UgUEFUSF9BQlM6ICByZXR1cm4oImFic29sdXRlIik7Ci0gICAgICBjYXNlIFBBVEhf UkVMOiAgcmV0dXJuKCJyZWxhdGl2ZSIpOwotICAgICAgY2FzZSBQQVRIX0FVVE86IHJldHVybigi YXV0byIpOwotICAgICAgZGVmYXVsdDogcmV0dXJuKCJ1bmtub3duIik7Ci0gICAgfQotfQotCi1W T0lECi1zaG9maWwoKSB7Ci0gICAgY2hhciAqczsgaW50IGkgPSAwLCBuID0gMTsKLSAgICBleHRl cm4gY2hhciAqIGlmZG5hbVtdOwotICAgIGV4dGVybiBpbnQgd2lsZGVuYTsKLSNpZmRlZiBVTklY Ci0gICAgZXh0ZXJuIGludCB3aWxkeHBhbmQ7Ci0jZW5kaWYgLyogVU5JWCAqLwotICAgIGV4dGVy biBjaGFyICogc25kX21vdmUsICogc25kX3JlbmFtZSwgKiByY3ZfbW92ZSwgKiByY3ZfcmVuYW1l OwotI2lmZGVmIFBBVFRFUk5TCi0gICAgZXh0ZXJuIGludCBwYXR0ZXJuczsKLSNlbmRpZiAvKiBQ QVRURVJOUyAqLwotICAgIGV4dGVybiBjaGFyICogcmZzcGVjLCAqIHNmc3BlYzsKLSNpZmRlZiBV TklYCi0gICAgZXh0ZXJuIGludCB6b2J1ZnNpemUsIHpvZmJ1ZmZlciwgem9mYmxvY2s7Ci0jZW5k aWYgLyogVU5JWCAqLwotI2lmZGVmIENLX0NUUkxaCi0gICAgZXh0ZXJuIGludCBlb2ZtZXRob2Q7 Ci0jZW5kaWYgLyogQ0tfQ1RSTFogKi8KLQotICAgIHByaW50ZigiXG4iKTsKLQotI2lmZGVmIFZN UwotICAgIHByaW50ZigiIEZpbGUgcmVjb3JkLUxlbmd0aDogICAgICAlNWRcbiIsZnJlY2wpOwot ICAgIG4rKzsKLSNlbmRpZiAvKiBWTVMgKi8KLQotI2lmbmRlZiBOT1hGRVIKLSAgICBwcmludGYo IiBUcmFuc2ZlciBtb2RlOiAgICAgICAgICAgJXNcbiIsCi0gICAgICAgICAgIHhmZXJtb2RlID09 IFhNT0RFX0EgPwotICAgICAgICAgICAiYXV0b21hdGljIiA6Ci0gICAgICAgICAgICJtYW51YWwi Ci0gICAgICAgICAgICk7Ci0gICAgbisrOwotI2lmZGVmIFBBVFRFUk5TCi0gICAgcHJpbnRmKCIg RmlsZSBwYXR0ZXJuczogICAgICAgICAgICVzIiwgc2hvd29vYShwYXR0ZXJucykpOwotICAgIGlm ICh4ZmVybW9kZSA9PSBYTU9ERV9NICYmIHBhdHRlcm5zKQotICAgICAgcHJpbnRmKCIgKGJ1dCBk aXNhYmxlZCBieSBUUkFOU0ZFUi1NT0RFIE1BTlVBTCkiKTsKLSAgICBlbHNlIGlmIChwYXR0ZXJu cykKLSAgICAgIHByaW50ZigiIChTSE9XIFBBVFRFUk5TIGZvciBsaXN0KSIpOwotICAgIHByaW50 ZigiXG4iKTsKLSAgICBuKys7Ci0jZW5kaWYgLyogUEFUVEVSTlMgKi8KLSAgICBpZiAoZmlsZXBl ZWspCi0gICAgICBwcmludGYoIiBGaWxlIHNjYW46ICAgICAgICAgICAgICAgb24gJWRcbiIsIG5z Y2FuZmlsZSk7Ci0gICAgZWxzZQotICAgICAgcHJpbnRmKCIgRmlsZSBzY2FuOiAgICAgICAgICAg ICAgIG9mZlxuIik7Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkp IHJldHVybjsgZWxzZSBuID0gMDsKLSAgICBpZiAoeGZlcm1vZGUgPT0gWE1PREVfQSkKLSAgICAg IHByaW50ZigiIERlZmF1bHQgZmlsZSB0eXBlOiAgICAgICAlc1xuIixzaG94bSgpKTsKLSAgICBl bHNlCi0gICAgICBwcmludGYoIiBGaWxlIHR5cGU6ICAgICAgICAgICAgICAgJXNcbiIsc2hveG0o KSk7Ci0gICAgbisrOwotICAgIGlmIChmbmNudiA9PSBYWUZOX0wpCi0gICAgICBzID0gImxpdGVy YWwiOwotICAgIGVsc2UgaWYgKGZuY252ID09IFhZRk5fQykKLSAgICAgIHMgPSAiY29udmVydGVk IjsKLSAgICBlbHNlCi0gICAgICBzID0gIih1bmtub3duKSI7Ci0gICAgcHJpbnRmKCIgRmlsZSBu YW1lczogICAgICAgICAgICAgICVzXG4iLHMpOwotICAgIG4rKzsKLSAgICBwcmludGYoIiBTZW5k IHBhdGhuYW1lczogICAgICAgICAgJXNcbiIsIHBhdGh2YWwoZm5zcGF0aCkpOwotICAgIG4rKzsK LSAgICBwcmludGYoIiBSZWNlaXZlIHBhdGhuYW1lczogICAgICAgJXNcbiIsIHBhdGh2YWwoZm5y cGF0aCkpOwotICAgIG4rKzsKLSNpZmRlZiBVTklYT1JPU0sKLSAgICBwcmludGYoIiBNYXRjaCBk b3QgZmlsZXM6ICAgICAgICAgJXNcbiIsIG1hdGNoZG90ID8gInllcyIgOiAibm8iKTsKLSAgICBu Kys7Ci0jaWZkZWYgVU5JWAotICAgIHByaW50ZigiIFdpbGRjYXJkLWV4cGFuc2lvbjogICAgICAl cyAoJXMpXG4iLCBzaG93b2ZmKHdpbGRlbmEpLAotCSAgIHdpbGR4cGFuZCA/ICJzaGVsbCIgOiAi a2VybWl0Iik7Ci0gICAgbisrOwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBVTklYT1JP U0sgKi8KLSAgICBwcmludGYoIiBGaWxlIGNvbGxpc2lvbjogICAgICAgICAgIik7Ci0gICAgZm9y IChpID0gMDsgaSA8IG5jb2x4OyBpKyspCi0gICAgICBpZiAoY29seHRhYltpXS5rd3ZhbCA9PSBm bmNhY3QpIGJyZWFrOwotICAgIHByaW50ZigiJXNcbiIsIChpID09IG5jb2x4KSA/ICJ1bmtub3du IiA6IGNvbHh0YWJbaV0ua3dkKTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFz a21vcmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAwOwotICAgIHByaW50ZigiIEZpbGUgZGVzdGluYXRp b246ICAgICAgICAlc1xuIiwKLSAgICAgICAgICAgKGRlc3QgPT0gREVTVF9EKSA/ICJkaXNrIiA6 Ci0gICAgICAgICAgICgoZGVzdCA9PSBERVNUX1MpID8gInNjcmVlbiIgOgotICAgICAgICAgICAg KChkZXN0ID09IERFU1RfTikgPyAibm93aGVyZSIgOgotICAgICAgICAgICAgInByaW50ZXIiKSkK LSAgICAgICAgICAgKTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUo KSkgcmV0dXJuOyBlbHNlIG4gPSAwOwotICAgIHMgPSAoa2VlcCA+PSAwICYmIGtlZXAgPD0gMikg PyBpZmRuYW1ba2VlcF0gOiAia2VlcCI7Ci0gICAgcHJpbnRmKCIgRmlsZSBpbmNvbXBsZXRlOiAg ICAgICAgICVzXG4iLHMpOwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9y ZSgpKSByZXR1cm47IGVsc2UgbiA9IDA7Ci0gICAgcHJpbnRmKCIgRmlsZSBieXRlc2l6ZTogICAg ICAgICAgICVkXG4iLChmbWFzayA9PSAwMTc3KSA/IDcgOiA4KTsKLSAgICBpZiAoKytuID4gY21k X3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAwOwotI2lmbmRlZiBO T0NTRVRTCi0gICAgcHJpbnRmKCIgRmlsZSBjaGFyYWN0ZXItc2V0OiAgICAgICVzXG4iLGZjc2lu Zm9bZmNoYXJzZXRdLmtleXdvcmQpOwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICgh YXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbiA9IDA7Ci0gICAgcHJpbnRmKCIgRmlsZSBkZWZhdWx0 IDctYml0OiAgICAgICVzXG4iLGZjc2luZm9bZGNzZXQ3XS5rZXl3b3JkKTsKLSAgICBpZiAoKytu ID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAwOwotICAg IHByaW50ZigiIEZpbGUgZGVmYXVsdCA4LWJpdDogICAgICAlc1xuIixmY3NpbmZvW2Rjc2V0OF0u a2V5d29yZCk7Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJl dHVybjsgZWxzZSBuID0gMDsKLSNpZmRlZiBVTklDT0RFCi0gICAgcHJpbnRmKCIgRmlsZSBVQ1Mg Ym9tOiAgICAgICAgICAgICVzXG4iLHNob3dvZmYodWNzYm9tKSk7Ci0gICAgaWYgKCsrbiA+IGNt ZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBuID0gMDsKLSAgICBwcmlu dGYoIiBGaWxlIFVDUyBieXRlLW9yZGVyOiAgICAgJXMtZW5kaWFuXG4iLAotICAgICAgICAgICB1 Y3NvcmRlciA/ICJsaXR0bGUiIDogImJpZyIpOwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMp IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbiA9IDA7Ci0gICAgcHJpbnRmKCIgQ29tcHV0 ZXIgYnl0ZW9yZGVyOiAgICAgICVzLWVuZGlhblxuIiwKLSAgICAgICAgICAgYnl0ZW9yZGVyID8g ImxpdHRsZSIgOiAiYmlnIik7Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2tt b3JlKCkpIHJldHVybjsgZWxzZSBuID0gMDsKLSNlbmRpZiAvKiBVTklDT0RFICovCi0jZW5kaWYg LyogTk9DU0VUUyAqLwotCi0gICAgcHJpbnRmKCIgRmlsZSBlbmQtb2YtbGluZTogICAgICAgICIp OwotICAgIGkgPSBmZW9sOwotICAgIHN3aXRjaCAoZmVvbCkgewotICAgICAgY2FzZSBYWUZBX0M6 IHByaW50ZigiJXNcbiIsImNyIik7IGJyZWFrOwotICAgICAgY2FzZSBYWUZBX0w6IHByaW50Zigi JXNcbiIsImxmIik7IGJyZWFrOwotICAgICAgY2FzZSBYWUZBXzI6IHByaW50ZigiJXNcbiIsImNy bGYiKTsgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBwcmludGYoIiVkXG4iLGkpOwotICAgIH0KLSAg ICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIG4g PSAwOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZkZWYgQ0tfQ1RSTFoKLSAgICBwcmludGYo IiBGaWxlIGVvZjogICAgICAgICAgICAgICAgJXNcbiIsIGVvZm1ldGhvZCA/ICJjdHJsLXoiIDog Imxlbmd0aCIpOwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSBy ZXR1cm47IGVsc2UgbiA9IDA7Ci0jZW5kaWYgLyogQ0tfQ1RSTFogKi8KLSNpZm5kZWYgTk9YRkVS Ci0jaWZkZWYgQ0tfVE1QRElSCi0gICAgcHJpbnRmKCIgRmlsZSBkb3dubG9hZC1kaXJlY3Rvcnk6 ICVzXG4iLCBkbGRpciA/IGRsZGlyIDogIihub25lKSIpOwotICAgIGlmICgrK24gPiBjbWRfcm93 cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbiA9IDA7Ci0jaWZkZWYgQ09NTUVO VAotICAgIGkgPSAyNTY7Ci0gICAgcyA9IGxpbmU7Ci0gICAgenpzdHJpbmcoIlxcdih0bXBkaXIp IiwmcywmaSk7Ci0gICAgcHJpbnRmKCIgVGVtcG9yYXJ5IGRpcmVjdG9yeTogICAgICVzXG4iLCBs aW5lKTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJu OyBlbHNlIG4gPSAwOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNlbmRpZiAvKiBDS19UTVBESVIg Ki8KLSNpZmRlZiBWTVMKLSAgICB7Ci0gICAgICAgIGV4dGVybiBpbnQgdm1zc3ZlcnNpb25zLCB2 bXNydmVyc2lvbnM7Ci0gICAgICAgIHByaW50ZigiIFNlbmQgdmVyc2lvbi1udW1iZXJzOiAgICAl c1xuIixzaG93b2ZmKHZtc3N2ZXJzaW9ucykpOwotICAgICAgICBpZiAoKytuID4gY21kX3Jvd3Mg LSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAwOwotICAgICAgICBwcmludGYo IiBSZWNlaXZlIHZlcnNpb24tbnVtYmVyczogJXNcbiIsc2hvd29mZih2bXNydmVyc2lvbnMpKTsK LSAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsg ZWxzZSBuID0gMDsKLSAgICB9Ci0jZW5kaWYgLyogVk1TICovCi0gICAgcHJpbnRmKCIgU2VuZCBt b3ZlLXRvOiAgICAgICAgICAgICVzXG4iLAotICAgICAgICAgICBzbmRfbW92ZSA/IHNuZF9tb3Zl IDogIihub25lKSIpOwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgp KSByZXR1cm47IGVsc2UgbiA9IDA7Ci0gICAgcHJpbnRmKCIgU2VuZCByZW5hbWUtdG86ICAgICAg ICAgICVzXG4iLAotICAgICAgICAgICBzbmRfcmVuYW1lID8gc25kX3JlbmFtZSA6ICIobm9uZSki KTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBl bHNlIG4gPSAwOwotICAgIHByaW50ZigiIFJlY2VpdmUgbW92ZS10bzogICAgICAgICAlc1xuIiwK LSAgICAgICAgICAgcmN2X21vdmUgPyByY3ZfbW92ZSA6ICIobm9uZSkiKTsKLSAgICBpZiAoKytu ID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAwOwotICAg IHByaW50ZigiIFJlY2VpdmUgcmVuYW1lLXRvOiAgICAgICAlc1xuIiwKLSAgICAgICAgICAgcmN2 X3JlbmFtZSA/IHJjdl9yZW5hbWUgOiAiKG5vbmUpIik7Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dz IC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBuID0gMDsKLSNlbmRpZiAvKiBOT1hG RVIgKi8KLSNpZmRlZiBLRVJNUkMKLSAgICBwcmludGYoIiBJbml0aWFsaXphdGlvbiBmaWxlOiAg ICAgJXNcbiIsIG5vaW5pdCA/ICIobm9uZSkiIDoKLSNpZmRlZiBDS19TWVNJTkkKLSAgICAgICAg ICAgQ0tfU1lTSU5JCi0jZWxzZQotICAgICAgICAgICBrZXJtcmMKLSNlbmRpZiAvKiBDS19TWVNJ TkkgKi8KLSAgICAgICAgICAgKTsKLSNlbmRpZiAvKiBLRVJNUkMgKi8KLSAgICBpZiAoKytuID4g Y21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAwOwotCi0gICAg aWYgKGtfaW5mb19kaXIpIHsKLSAgICAgICAgcHJpbnRmKCIgS2VybWl0IGRvYyBmaWxlczogICAg ICAgICVzXG4iLCBrX2luZm9fZGlyKTsKLSAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykg aWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBuID0gMDsKLSAgICB9Ci0KLSNpZmRlZiBDS1JP T1QKLSAgICBzID0gemdldHJvb3QoKTsKLSAgICBwcmludGYoIiBSb290IHNldDogICAgICAgICAg ICAgICAgJXNcbiIsIHMgPyBzIDogIihub25lKSIpOwotI2VuZGlmIC8qIENLUk9PVCAqLwotCi0j aWZkZWYgVU5JWAotICAgIHByaW50ZigiIERpc2sgb3V0cHV0IGJ1ZmZlcjogICAgICAlZCAod3Jp dGVzIGFyZSAlcywgJXMpXG4iLAotICAgICAgICAgICB6b2J1ZnNpemUsCi0gICAgICAgICAgIHpv ZmJ1ZmZlciA/ICJidWZmZXJlZCIgOiAidW5idWZmZXJlZCIsCi0gICAgICAgICAgIHpvZmJsb2Nr ID8gImJsb2NraW5nIiA6ICJub25ibG9ja2luZyIKLSAgICAgICAgICAgKTsKLSAgICBpZiAoKytu ID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAwOwotI2lm ZGVmIERZTkFNSUMKLSAgICBwcmludGYoIiBTdHJpbmdzcGFjZTogICAgICAgICAgICAgJWRcbiIs IHpzZXRmaWwoMCwyKSk7Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3Jl KCkpIHJldHVybjsgZWxzZSBuID0gMDsKLSAgICBwcmludGYoIiBMaXN0c2l6ZTogICAgICAgICAg ICAgICAgJWRcbiIsIHpzZXRmaWwoMCw0KSk7Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykg aWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBuID0gMDsKLSNlbmRpZiAvKiBEWU5BTUlDICov Ci0jZW5kaWYgLyogVU5JWCAqLwotI2lmZGVmIE9TMk9SVU5JWAotICAgIHByaW50ZigiIExvbmdl c3QgZmlsZW5hbWU6ICAgICAgICAlZFxuIiwgbWF4bmFtKTsKLSAgICBpZiAoKytuID4gY21kX3Jv d3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAwOwotICAgIHByaW50Zigi IExvbmdlc3QgcGF0aG5hbWU6ICAgICAgICAlZFxuIiwgbWF4cGF0aCk7Ci0gICAgaWYgKCsrbiA+ IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBuID0gMDsKLSNlbmRp ZiAvKiBPUzJPUlVOSVggKi8KLQotICAgIHByaW50ZigiIExhc3QgZmlsZSBzZW50OiAgICAgICAg ICAlc1xuIiwgc2ZzcGVjID8gc2ZzcGVjIDogIihub25lKSIpOwotICAgIGlmICgrK24gPiBjbWRf cm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbiA9IDA7Ci0gICAgcHJpbnRm KCIgTGFzdCBmaWxlIHJlY2VpdmVkOiAgICAgICVzXG4iLCByZnNwZWMgPyByZnNwZWMgOiAiKG5v bmUpIik7Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVy bjsgZWxzZSBuID0gMDsKLSAgICBwcmludGYoIlxuIEFsc28gc2VlOlxuIik7Ci0gICAgbisrOwot ICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2Ug biA9IDA7Ci0gICAgcHJpbnRmKCIgU0hPVyBQUk9UT0NPTCwgU0hPVyBYRkVSIik7Ci0jaWZkZWYg Q0tfTEFCRUxFRAotICAgIHByaW50ZigiLCBTSE9XIExBQkVMRUQiKTsKLSNlbmRpZiAvKiBDS19M QUJFTEVEICovCi0jaWZkZWYgUEFUVEVSTlMKLSAgICBwcmludGYoIiwgU0hPVyBQQVRURVJOUyIp OwotI2VuZGlmIC8qIFBBVFRFUk5TICovCi0jaWZkZWYgU1RSRUFNSU5HCi0gICAgcHJpbnRmKCIs IFNIT1cgU1RSRUFNSU5HIik7Ci0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0jaWZuZGVmIE5PQ1NF VFMKLSAgICBwcmludGYoIiwgU0hPVyBDSEFSQUNURVItU0VUUyIpOwotI2VuZGlmIC8qIE5PQ1NF VFMgKi8KLSAgICBwcmludGYoIlxuXG4iKTsKLX0KLQotI2lmbmRlZiBOT1hGRVIKLVZPSUQKLXNo b3BhcnAoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcm90b2NvbCAqLwotICAg IGV4dGVybiBpbnQgZG9jcmMsIHNraXBidXA7Ci0gICAgY2hhciAqczsKLQotI2lmZGVmIENLX1RJ TUVSUwotICAgIGV4dGVybiBpbnQgcnR0ZmxnOwotI2VuZGlmIC8qIENLX1RJTUVSUyAqLwotCi0g ICAgcHJpbnRmKCJQcm90b2NvbDogJXNcbiIscHRhYltwcm90b2NvbF0ucF9uYW1lKTsKLQotICAg IGlmIChwcm90b2NvbCA9PSBQUk9UT19LKSB7Ci0gICAgICAgIHByaW50ZigiXG5Qcm90b2NvbCBQ YXJhbWV0ZXJzOiAgIFNlbmQgICAgUmVjZWl2ZSIpOwotICAgICAgICBpZiAodGltZWYpCi0gICAg ICAgICAgcHJpbnRmKCJcbiBUaW1lb3V0ICh1c2VkPSUyZCk6JTdkKiU4ZCAiLCB0aW1pbnQsIHJ0 aW1vLCBwa3R0aW0pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcHJpbnRmKCJcbiBUaW1lb3V0 ICh1c2VkPSUyZCk6JTdkJTlkICIsICB0aW1pbnQsIHJ0aW1vLCBwa3R0aW0pOwotI2lmZGVmIFhG UkNBTgotICAgICAgICBwcmludGYoIiAgICAgICBDYW5jZWxsYXRpb246ICAgICVzIixzaG93b2Zm KHhmcmNhbikpOwotICAgICAgICBpZiAoeGZyY2FuKQotICAgICAgICAgIHByaW50ZigiICVkICVk IiwgeGZyY2hyLCB4ZnJudW0pOwotI2VuZGlmIC8qIFhGUkNBTiAqLwotICAgICAgICBwcmludGYo IlxuIFBhZGRpbmc6ICAgICAgJTExZCU5ZCIsIG5wYWQsICAgbXlwYWRuKTsKLSAgICAgICAgaWYg KGJjdHIgPT0gNCkKLSAgICAgICAgICBwcmludGYoIiAgICAgICAgQmxvY2sgQ2hlY2s6IGJsYW5r LWZyZWUtMlxuIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwcmludGYoIiAgICAgICAgQmxv Y2sgQ2hlY2s6ICU2ZFxuIixiY3RyKTsKLSAgICAgICAgcHJpbnRmKCAgIiBQYWQgQ2hhcmFjdGVy OiUxMWQlOWQiLCBwYWRjaCwgIG15cGFkYyk7Ci0gICAgICAgIHByaW50ZigiICAgICAgICBEZWxh eTogICAgICAgJTZkXG4iLGNrZGVsYXkpOwotICAgICAgICBwcmludGYoICAiIFBhdXNlOiAgICAg ICAgJTExZCU5ZCIsIHBrdHBhdXMsIHBrdHBhdXMpOwotICAgICAgICBwcmludGYoIiAgICAgICAg QXR0cmlidXRlczogICAgICAlc1xuIixzaG93b2ZmKGF0Y2FwcikpOwotICAgICAgICBwcmludGYo ICAiIFBhY2tldCBTdGFydDogJTExZCU5ZCIsIG15c3RjaCwgc3RjaHIpOwotICAgICAgICBwcmlu dGYoIiAgICAgICAgTWF4IFJldHJpZXM6ICU2ZCVzXG4iLAotICAgICAgICAgICAgICAgbWF4dHJ5 LAotICAgICAgICAgICAgICAgKG1heHRyeSA9PSAwKSA/ICIgKHVubGltaXRlZCkiIDogIiIKLSAg ICAgICAgICAgICAgICk7Ci0gICAgICAgIHByaW50ZiggICIgUGFja2V0IEVuZDogICAlMTFkJTlk Iiwgc2VvbCwgICBlb2wpOwotICAgICAgICBpZiAoZWJxZmxnKQotICAgICAgICAgIHByaW50Zigi ICAgICAgICA4dGgtQml0IFByZWZpeDogJyVjJyIsZWJxKTsKLSAgICAgICAgZWxzZQotICAgICAg ICAgIHByaW50ZigiICAgICAgICA4dGgtQml0IFByZWZpeDogKCclYycgYnV0IG5vdCB1c2VkKSIs ZWJxKTsKLSAgICAgICAgcHJpbnRmKCAgIlxuIFBhY2tldCBMZW5ndGg6JTExZCAiLCBzcG1heCk7 Ci0gICAgICAgIHByaW50ZigiJThkICAgICAiLCAgdXJwc2l6KTsKLSAgICAgICAgaWYgKHJwdGZs ZykKLSAgICAgICAgICBwcmludGYoIiAgIFJlcGVhdCBQcmVmaXg6ICAnJWMnIixycHRxKTsKLSAg ICAgICAgZWxzZQotICAgICAgICAgIHByaW50ZigiICAgUmVwZWF0IFByZWZpeDogICgnJWMnIGJ1 dCBub3QgdXNlZCkiLHJwdHEpOwotICAgICAgICBwcmludGYoICAiXG4gTWF4aW11bSBMZW5ndGg6 ICU5ZCU5ZCIsIG1heHNwcywgbWF4cnBzKTsKLSAgICAgICAgcHJpbnRmKCIgICAgICAgIFdpbmRv dyBTaXplOiU3ZCBzZXQsICVkIHVzZWRcbiIsd3Nsb3RyLHdtYXgpOwotICAgICAgICBwcmludGYo ICAgICIgQnVmZmVyIFNpemU6ICAlMTFkJTlkIiwgYmlnc2JzaXosIGJpZ3Jic2l6KTsKLSAgICAg ICAgcHJpbnRmKCIgICAgICAgIExvY2tpbmctU2hpZnQ6ICAgICIpOwotICAgICAgICBpZiAobHNj YXB1ID09IDIpIHsKLSAgICAgICAgICAgIHByaW50ZigiZm9yY2VkIik7Ci0gICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICBwcmludGYoIiVzIiwgKGxzY2FwciA/ICJlbmFibGVkIiA6ICJkaXNh YmxlZCIpKTsKLSAgICAgICAgICAgIGlmIChsc2NhcHIpIHByaW50ZigiLCVzJXMiLCAobHNjYXB1 ID8gIiAiIDogIiBub3QgIiksICJ1c2VkIik7Ci0gICAgICAgIH0KLSAgICAgICAgcHJpbnRmKCJc blxuIik7Ci0KLSAgICAgICAgaWYgKCEocyA9IHB0YWJbcHJvdG9jb2xdLmhfYl9pbml0KSkgcyA9 ICIiOwotICAgICAgICBwcmludGYoIiBBdXRvLXVwbG9hZCBjb21tYW5kIChiaW5hcnkpOiAiKTsK LSAgICAgICAgaWYgKCpzKSB7Ci0gICAgICAgICAgICBzaG9zdHJkZWYoKENIQVIgKilzKTsKLSAg ICAgICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBy aW50ZigiKG5vbmUpXG4iKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIShzID0gcHRhYltwcm90 b2NvbF0uaF90X2luaXQpKSBzID0gIiI7Ci0gICAgICAgIHByaW50ZigiIEF1dG8tdXBsb2FkIGNv bW1hbmQgKHRleHQpOiAgICIpOwotICAgICAgICBpZiAoKnMpIHsKLSAgICAgICAgICAgIHNob3N0 cmRlZigoQ0hBUiAqKXMpOwotICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICB9IGVs c2UgewotICAgICAgICAgICAgcHJpbnRmKCIobm9uZSlcbiIpOwotICAgICAgICB9Ci0gICAgICAg IGlmICghKHMgPSBwdGFiW3Byb3RvY29sXS5oX3hfaW5pdCkpIHMgPSAiIjsKLSAgICAgICAgcHJp bnRmKCIgQXV0by1zZXJ2ZXIgY29tbWFuZDogICAgICAgICAgIik7Ci0gICAgICAgIGlmICgqcykg ewotICAgICAgICAgICAgc2hvc3RyZGVmKChDSEFSICopcyk7Ci0gICAgICAgICAgICBwcmludGYo IlxuIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwcmludGYoIihub25lKVxuIik7 Ci0gICAgICAgIH0KLSAgICAgICAgdG1wYnVmWzBdID0gTlVMOwotI2lmZGVmIENLX1RJTUVSUwot ICAgICAgICBpZiAocnR0ZmxnKSB7Ci0gICAgICAgICAgICBleHRlcm4gaW50IG1pbnRpbWUsIG1h eHRpbWU7Ci0gICAgICAgICAgICBzcHJpbnRmKHRtcGJ1ZiwiIFBhY2tldCB0aW1lb3V0czogZHlu YW1pYyAlZDolZCIsIC8qIFNBRkUgKi8KLSAgICAgICAgICAgICAgICAgICAgbWludGltZSwKLSAg ICAgICAgICAgICAgICAgICAgbWF4dGltZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICBzcHJpbnRmKHRtcGJ1ZiwiIFBhY2tldCB0aW1lb3V0czogZml4ZWQiKTsgLyogU0FGRSAqLwot ICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfVElNRVJTICovCi0gICAgICAgIGlmICh0bXBidWZbMF0p Ci0gICAgICAgICAgcHJpbnRmKCIlLTMxcyIsdG1wYnVmKTsKLSAgICAgICAgcHJpbnRmKCJTZW5k IGJhY2t1cDogJXNcbiIsc2hvd29mZighc2tpcGJ1cCkpOwotCi0gICAgICAgIHByaW50ZigiIFRy YW5zZmVyIG1vZGU6ICAgJXMiLCB4ZmVybW9kZSA9PSBYTU9ERV9BID8KLSAgICAgICAgICAgICAg ICJhdXRvbWF0aWMgICAiIDoKLSAgICAgICAgICAgICAgICJtYW51YWwgICAgICAiCi0gICAgICAg ICAgICAgICApOwotICAgICAgICBwcmludGYoIiBUcmFuc2ZlciBzbG93LXN0YXJ0OiAlcywgY3Jj OiAlc1xuIiwKLSAgICAgICAgICAgICAgIHNob3dvZmYoc2xvc3RhcnQpLAotICAgICAgICAgICAg ICAgc2hvd29mZihkb2NyYykKLSAgICAgICAgICAgICAgICk7Ci0jaWZkZWYgUElQRVNFTkQKLSAg ICAgICAgewotICAgICAgICAgICAgZXh0ZXJuIGludCB1c2VwaXBlczsKLSAgICAgICAgICAgIHBy aW50ZigiIFRyYW5zZmVyIHBpcGVzOiAgJXMgICAgICAgICAiLHVzZXBpcGVzID8gIm9uICIgOiAi b2ZmIik7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotI2lmbmRlZiBOT0NTRVRT Ci0gICAgICAgIHByaW50ZigiIFRyYW5zZmVyIGNoYXJhY3Rlci1zZXQ6ICIpOwotICAgICAgICBp ZiAodGNoYXJzZXQgPT0gVENfVFJBTlNQKQotICAgICAgICAgIHByaW50ZigidHJhbnNwYXJlbnRc biIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcHJpbnRmKCIlc1xuIiwgdGNzaW5mb1t0Y2hh cnNldF0ua2V5d29yZCApOwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSNpZmRlZiBQSVBFU0VORAot ICAgICAgICB7Ci0gICAgICAgICAgICBleHRlcm4gY2hhciAqIHNuZGZpbHRlciwgKiByY3ZmaWx0 ZXI7Ci0gICAgICAgICAgICBwcmludGYoIiBTZW5kIGZpbHRlcjogICAgICVzXG4iLCBzbmRmaWx0 ZXIgPyBzbmRmaWx0ZXIgOiAiKG5vbmUpIik7Ci0gICAgICAgICAgICBwcmludGYoIiBSZWNlaXZl IGZpbHRlcjogICVzXG4iLCByY3ZmaWx0ZXIgPyByY3ZmaWx0ZXIgOiAiKG5vbmUpIik7Ci0gICAg ICAgIH0KLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotICAgICAgICBwcmludGYoIlxuQWxzbyBzZWU6 XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgU0hPVyBGSUxFLCBTSE9XIFhGRVIiKTsKLQotI2lmZGVm IENLX0xBQkVMRUQKLSAgICAgICAgcHJpbnRmKCIsIFNIT1cgTEFCRUxFRCIpOwotI2VuZGlmIC8q IENLX0xBQkVMRUQgKi8KLSNpZmRlZiBQQVRURVJOUwotICAgICAgICBwcmludGYoIiwgU0hPVyBQ QVRURVJOUyIpOwotI2VuZGlmIC8qIFBBVFRFUk5TICovCi0jaWZkZWYgU1RSRUFNSU5HCi0gICAg ICAgIHByaW50ZigiLCBTSE9XIFNUUkVBTUlORyIpOwotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwot I2lmbmRlZiBOT0NTRVRTCi0gICAgICAgIHByaW50ZigiLCBTSE9XIENIQVJBQ1RFUi1TRVRTIik7 Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotICAgIH0KLQotI2lmZGVmIENLX1hZWgotI2lmZGVmIFhZ Wl9JTlRFUk5BTAotICAgIGlmIChwcm90b2NvbCAhPSBQUk9UT19LKSB7Ci0gICAgICAgIGludCBp OwotICAgICAgICBpbnQgeDsKLSAgICAgICAgcHJpbnRmKCIgRmlsZSB0eXBlOiAlc1xuIiwgYmlu YXJ5ID8gImJpbmFyeSIgOiAidGV4dCIpOwotICAgICAgICBpZiAocHJvdG9jb2wgPT0gUFJPVE9f WikgeyAgICAgICAgICAgICAgLyogWm1vZGVtICovCi0gICAgICAgICAgICBwcmludGYoIiBXaW5k b3cgc2l6ZTogICAiKTsKLSAgICAgICAgICAgIGlmIChwdGFiW3Byb3RvY29sXS53aW5zaXplIDwg MSkKLSAgICAgICAgICAgICAgcHJpbnRmKCJub25lXG4iKTsKLSAgICAgICAgICAgIGVsc2UKLSAg ICAgICAgICAgICAgcHJpbnRmKCIlZFxuIix3c2xvdHIpOwotI2lmZGVmIENPTU1FTlQKLSAgICAg ICAgICAgIHByaW50ZigiIFBhY2tldCAoZnJhbWUpIGxlbmd0aDogIik7Ci0gICAgICAgICAgICBp ZiAocHRhYltwcm90b2NvbF0uc3BrdGxlbiA8IDApCi0gICAgICAgICAgICAgIHByaW50Zigibm9u ZVxuIik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHByaW50ZigiJWRcbiIsc3Bt YXgpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg IGlmIChwdGFiW3Byb3RvY29sXS5zcGt0bGVuID49IDEwMDApCi0gICAgICAgICAgICAgIHByaW50 ZigiIDFLIHBhY2tldHNcbiIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBwcmlu dGYoIiAxMjgtYnl0ZSBwYWNrZXRzXG4iKTsKLSAgICAgICAgfQotICAgICAgICBwcmludGYoIiBQ YXRobmFtZSBzdHJpcHBpbmcgd2hlbiBzZW5kaW5nOiAgICVzXG4iLAotICAgICAgICAgICAgICAg c2hvd29mZihwdGFiW3Byb3RvY29sXS5mbnNwKQotICAgICAgICAgICAgICAgKTsKLSAgICAgICAg cHJpbnRmKCIgUGF0aG5hbWUgc3RyaXBwaW5nIHdoZW4gcmVjZWl2aW5nOiAlc1xuIiwKLSAgICAg ICAgICAgICAgIHNob3dvZmYocHRhYltwcm90b2NvbF0uZm5ycCkKLSAgICAgICAgICAgICAgICk7 Ci0gICAgICAgIHByaW50ZigiIEZpbGVuYW1lIGNvbGxpc2lvbiBhY3Rpb246ICAgICAgICAgIik7 Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBuY29seDsgaSsrKQotICAgICAgICAgIGlmIChjb2x4 dGFiW2ldLmt3dmFsID09IGZuY2FjdCkgYnJlYWs7Ci0gICAgICAgIHByaW50ZigiJS0xMnMiLCAo aSA9PSBuY29seCkgPyAidW5rbm93biIgOiBjb2x4dGFiW2ldLmt3ZCk7Ci0KLSAgICAgICAgcHJp bnRmKCJcbiBFc2NhcGUgY29udHJvbCBjaGFyYWN0ZXJzOiAgICAgICAgICAiKTsKLSAgICAgICAg eCA9IHB0YWJbcHJvdG9jb2xdLnByZWZpeDsKLSAgICAgICAgaWYgKHggPT0gUFhfQUxMKQotICAg ICAgICAgIHByaW50ZigiYWxsXG4iKTsKLSAgICAgICAgZWxzZSBpZiAoeCA9PSBQWF9DQVUgfHwg eD09UFhfV0lMKQotICAgICAgICAgIHByaW50ZigibWluaW1hbFxuIik7Ci0gICAgICAgIGVsc2UK LSAgICAgICAgICBwcmludGYoIm5vbmVcbiIpOwotICAgICAgICBpZiAoIShzID0gcHRhYltwcm90 b2NvbF0uaF9iX2luaXQpKQotICAgICAgICAgIHMgPSAiIjsKLSAgICAgICAgcHJpbnRmKCIgQXV0 b3JlY2VpdmUgY29tbWFuZCAoYmluYXJ5KTogJXNcbiIsICpzID8gcyA6ICIobm9uZSkiKTsKLSAg ICAgICAgaWYgKCEocyA9IHB0YWJbcHJvdG9jb2xdLmhfdF9pbml0KSkKLSAgICAgICAgICBzID0g IiI7Ci0gICAgICAgIHByaW50ZigiIEF1dG9yZWNlaXZlIGNvbW1hbmQgKHRleHQpOiAgICVzXG4i LCAqcyA/IHMgOiAiKG5vbmUpIik7Ci0gICAgfQotI2Vsc2UKLSNpZm5kZWYgTk9QVVNICi0gICAg aWYgKHByb3RvY29sICE9IFBST1RPX0spIHsKLQlfUFJPVE9UWVAoIFZPSUQgc2hvZXh0ZXJuLCAo dm9pZCkgKTsKLSAgICAgICAgcHJpbnRmKCJcbkV4ZWN1dGVkIGJ5IGV4dGVybmFsIGNvbW1hbmRz OlxuXG4iKTsKLSAgICAgICAgcyA9IHB0YWJbcHJvdG9jb2xdLnBfYl9zY21kOwotICAgICAgICBp ZiAoIXMpIHMgPSAiIjsKLSAgICAgICAgcHJpbnRmKCIgU0VORCBjb21tYW5kIChiaW5hcnkpOiAg ICAgICAgJXNcbiIsICpzID8gcyA6ICIobm9uZSkiKTsKLSAgICAgICAgcyA9IHB0YWJbcHJvdG9j b2xdLnBfdF9zY21kOwotICAgICAgICBpZiAoIXMpIHMgPSAiIjsKLSAgICAgICAgcHJpbnRmKCIg U0VORCBjb21tYW5kICh0ZXh0KTogICAgICAgICAgJXNcbiIsICpzID8gcyA6ICIobm9uZSkiKTsK LSAgICAgICAgcyA9IHB0YWJbcHJvdG9jb2xdLnBfYl9yY21kOwotICAgICAgICBpZiAoIXMpIHMg PSAiIjsKLSAgICAgICAgcHJpbnRmKCIgUkVDRUlWRSBjb21tYW5kIChiaW5hcnkpOiAgICAgJXNc biIsICpzID8gcyA6ICIobm9uZSkiKTsKLSAgICAgICAgcyA9IHB0YWJbcHJvdG9jb2xdLnBfdF9y Y21kOwotICAgICAgICBpZiAoIXMpIHMgPSAiIjsKLSAgICAgICAgcHJpbnRmKCIgUkVDRUlWRSBj b21tYW5kICh0ZXh0KTogICAgICAgJXNcbiIsICpzID8gcyA6ICIobm9uZSkiKTsKLSAgICAgICAg cyA9IHB0YWJbcHJvdG9jb2xdLmhfYl9pbml0OwotICAgICAgICBpZiAoIXMpIHMgPSAiIjsKLSAg ICAgICAgcHJpbnRmKCIgQXV0b3JlY2VpdmUgY29tbWFuZCAoYmluYXJ5KTogJXNcbiIsICpzID8g cyA6ICIobm9uZSkiKTsKLSAgICAgICAgcyA9IHB0YWJbcHJvdG9jb2xdLmhfdF9pbml0OwotICAg ICAgICBpZiAoIXMpIHMgPSAiIjsKLSAgICAgICAgcHJpbnRmKCIgQXV0b3JlY2VpdmUgY29tbWFu ZCAodGV4dCk6ICAgJXNcbiIsICpzID8gcyA6ICIobm9uZSkiKTsKLQkoVk9JRCkgc2hvZXh0ZXJu KCk7Ci0gICAgfQotI2VuZGlmIC8qIE5PUFVTSCAqLwotI2VuZGlmIC8qIFhZWl9JTlRFUk5BTCAq LwotI2VuZGlmIC8qIENLX1hZWiAqLwotfQotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZuZGVm IE5PQ1NFVFMKLS8qIENoYXJhY3Rlci1zZXQgaXRlbXMgKi8KLQotZXh0ZXJuIGludCBzX2NzZXQs IHJfY3NldCwgYXhjc2V0W10sIGFmY3NldFtdOwotZXh0ZXJuIHN0cnVjdCBrZXl0YWIgeGZybXRh YltdOwotCi1WT0lECi1zaG9wYXJsKCkgewotI2lmZGVmIENPTU1FTlQKLSAgICBpbnQgaTsKLS8q IE1pc2xlYWRpbmcuLi4gKi8KLSAgICBwcmludGYoIlxuQXZhaWxhYmxlIExhbmd1YWdlczpcbiIp OwotICAgIGZvciAoaSA9IDA7IGkgPCBNQVhMQU5HOyBpKyspIHsKLSAgICAgICAgcHJpbnRmKCIg JXNcbiIsbGFuZ3NbaV0uZGVzY3JpcHRpb24pOwotICAgIH0KLSNlbHNlCi0gICAgcHJpbnRmKCJc bkxhbmd1YWdlLXNwZWNpZmljIHRyYW5zbGF0aW9uIHJ1bGVzOiAlc1xuIiwKLSAgICAgICAgICAg bGFuZ3VhZ2UgPT0gTF9VU0FTQ0lJID8gIm5vbmUiIDogbGFuZ3NbbGFuZ3VhZ2VdLmRlc2NyaXB0 aW9uKTsKLSAgICBzaG9jaGFyc2V0KCk7Ci0gICAgcHJpbnRmKCJcblxuIik7Ci0jZW5kaWYgLyog Q09NTUVOVCAqLwotfQotCi1WT0lECi1zaG9jaGFyc2V0KCkgewotICAgIGludCB4OwotI2lmZGVm IENPTU1FTlQKLSAgICBjaGFyICogcyA9ICJVbmtub3duIjsKLSAgICBleHRlcm4gaW50IHhsYXR5 cGU7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0jaWZuZGVmIE5PWEZFUgotICAgIGV4dGVybiBp bnQgeGZyeGxhOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0gICAgZGVidWcoRjEwMSwiU0hPVyBG SUxFIENIQVIiLCIiLGZjaGFyc2V0KTsKLSAgICBwcmludGYoIlxuIik7Ci0jaWZuZGVmIE5PWEZF UgotICAgIHByaW50ZigiIFRyYW5zZmVyIFRyYW5zbGF0aW9uOiAlc1xuIiwgc2hvd29mZih4ZnJ4 bGEpKTsKLSAgICBpZiAoIXhmcnhsYSkgewotICAgICAgICBwcmludGYoCi0gICAgICAiIEJlY2F1 c2UgdHJhbnNmZXIgdHJhbnNsYXRpb24gaXMgb2ZmLCB0aGUgZm9sbG93aW5nIGFyZSBpZ25vcmVk OlxuXG4iKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9YRkVSICovCi0gICAgcHJpbnRmKCIgRmlsZSBD aGFyYWN0ZXItU2V0OiAlcyAoJXMpLCAiLAotICAgICAgICAgICBmY3NpbmZvW2ZjaGFyc2V0XS5r ZXl3b3JkLAotICAgICAgICAgICBmY3NpbmZvW2ZjaGFyc2V0XS5uYW1lCi0gICAgICAgICAgICk7 Ci0gICAgaWYgKCh4ID0gZmNzaW5mb1tmY2hhcnNldF0uc2l6ZSkgPT0gMTI4KQotICAgICAgcHJp bnRmKCI3LWJpdCIpOwotICAgIGVsc2UgaWYgKHggPT0gMjU2KQotICAgICAgcHJpbnRmKCI4LWJp dCIpOwotICAgIGVsc2UKLSAgICAgIHByaW50ZigibXVsdGlieXRlIik7Ci0gICAgcHJpbnRmKCJc biIpOwotICAgIHByaW50ZigiIEZpbGUgU2NhbjogJXNcbiIsc2hvd29mZihmaWxlcGVlaykpOwot ICAgIHByaW50ZigiICAgRGVmYXVsdCA3Yml0LUNoYXJhY3Rlci1TZXQ6ICVzXG4iLGZjc2luZm9b ZGNzZXQ3XS5rZXl3b3JkKTsKLSAgICBwcmludGYoIiAgIERlZmF1bHQgOGJpdC1DaGFyYWN0ZXIt U2V0OiAlc1xuIixmY3NpbmZvW2Rjc2V0OF0ua2V5d29yZCk7Ci0gICAgcHJpbnRmKCIgVHJhbnNm ZXIgQ2hhcmFjdGVyLVNldCIpOwotI2lmZGVmIENPTU1FTlQKLSAgICBpZiAodHNsZXZlbCA9PSBU U19MMikKLSAgICAgIHByaW50ZigiOiAoaW50ZXJuYXRpb25hbCkiKTsKLSAgICBlbHNlCi0jZW5k aWYgLyogQ09NTUVOVCAqLwotICAgIGlmICh0Y2hhcnNldCA9PSBUQ19UUkFOU1ApCi0gICAgICBw cmludGYoIjogVHJhbnNwYXJlbnQiKTsKLSAgICBlbHNlCi0gICAgICBwcmludGYoIjogJXMgKCVz KSIsdGNzaW5mb1t0Y2hhcnNldF0ua2V5d29yZCwgdGNzaW5mb1t0Y2hhcnNldF0ubmFtZSk7Ci0g ICAgcHJpbnRmKCJcbiIpOwotI2lmZGVmIENPTU1FTlQKLSAgICBzd2l0Y2ggKHhsYXR5cGUpIHsK LSAgICAgIGNhc2UgWExBX05PTkU6IHMgPSAiTm9uZSI7IGJyZWFrOwotICAgICAgY2FzZSBYTEFf QllURTogcyA9ICJCeXRlIjsgYnJlYWs7Ci0gICAgICBjYXNlIFhMQV9KQVBBTjogcyA9ICJKYXBh bmVzZSI7IGJyZWFrOwotICAgICAgY2FzZSBYTEFfVU5JQ09ERTogcyA9ICJVbmljb2RlIjsgYnJl YWs7Ci0gICAgfQotICAgIHByaW50ZigiXG4gVHJhbnNsYXRpb24gdHlwZTogJXNcbiIscyk7Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIHByaW50ZigiIFNFTkQgY2hhcmFjdGVyLXNldC1zZWxl Y3Rpb246ICVzXG4iLHhmcm10YWJbc19jc2V0XS5rd2QpOwotICAgIHByaW50ZigiIFJFQ0VJVkUg Y2hhcmFjdGVyLXNldC1zZWxlY3Rpb246ICVzXG4iLHhmcm10YWJbcl9jc2V0XS5rd2QpOwotICAg IGlmIChzX2NzZXQgPT0gWE1PREVfQSB8fCByX2NzZXQgPT0gWE1PREVfQSkKLSAgICAgIHByaW50 ZigKLSAgICAgICIgKFVzZSBTSE9XIEFTU09DSUFUSU9OUyB0byBsaXN0IGF1dG9tYXRpYyBjaGFy YWN0ZXItc2V0IHNlbGVjdGlvbnMuKVxuIgotICAgICAgICAgICAgICk7Ci19Ci0KLVZPSUQKLXNo b3dhc3NvYygpIHsKLSAgICBpbnQgaSwgaywgbiA9IDQ7Ci0gICAgY2hhciAqIHM7Ci0gICAgcHJp bnRmKCJcbkZvciBpbmNvbWluZyBmaWxlczpcblxuIik7Ci0gICAgcHJpbnRmKCJUcmFuc2ZlciBD aGFyYWN0ZXItU2V0ICAgRmlsZSBDaGFyYWN0ZXItU2V0XG4iKTsKLSAgICBmb3IgKGkgPSAxOyBp IDw9IE1BWFRDU0VUUzsgaSsrKSB7Ci0gICAgICAgIGsgPSBheGNzZXRbaV07Ci0gICAgICAgIGlm IChrIDwgMCB8fCBrID4gTUFYRkNTRVRTKQotICAgICAgICAgIHMgPSAiKG5vbmUpIjsKLSAgICAg ICAgZWxzZQotICAgICAgICAgIHMgPSBmY3NpbmZvW2tdLmtleXdvcmQ7Ci0gICAgICAgIGlmICgh cykgcyA9ICIiOwotICAgICAgICBpZiAoISpzKSBzID0gIihub25lKSI7Ci0gICAgICAgIHByaW50 ZigiICUtMjVzJXNcbiIsdGNzaW5mb1tpXS5rZXl3b3JkLHMpOwotICAgICAgICBpZiAoKytuID4g Y21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAwOwotICAgIH0K LSAgICBwcmludGYoIlxuRm9yIG91dGJvdW5kIGZpbGVzOlxuXG4iKTsKLSAgICBuICs9IDI7Ci0g ICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBu ID0gMDsKLSAgICBwcmludGYoIkZpbGUgQ2hhcmFjdGVyLVNldCAgICAgICBUcmFuc2ZlciBDaGFy YWN0ZXItU2V0XG4iKTsKLSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUo KSkgcmV0dXJuOyBlbHNlIG4gPSAwOwotICAgIGZvciAoaSA9IDA7IGkgPD0gTUFYRkNTRVRTOyBp KyspIHsKLSAgICAgICAgayA9IGFmY3NldFtpXTsKLSAgICAgICAgaWYgKGsgPCAwIHx8IGsgPiBN QVhUQ1NFVFMpCi0gICAgICAgICAgcyA9ICIobm9uZSkiOwotICAgICAgICBlbHNlCi0gICAgICAg ICAgcyA9IHRjc2luZm9ba10ua2V5d29yZDsKLSAgICAgICAgaWYgKCFzKSBzID0gIiI7Ci0gICAg ICAgIGlmICghKnMpIHMgPSAiKG5vbmUpIjsKLSAgICAgICAgcHJpbnRmKCIgJS0yNXMlc1xuIixm Y3NpbmZvW2ldLmtleXdvcmQscyk7Ci0gICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlm ICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbiA9IDA7Ci0gICAgfQotfQotI2VuZGlmIC8qIE5P Q1NFVFMgKi8KLQotVk9JRAotc2hvcGFyKCkgewotICAgIHByaW50ZigiU2hvdyB3aGF0PyAgKFR5 cGUgXCJzaG93ID9cIiBmb3IgYSBsaXN0IG9mIHBvc3NpYmlsaXRpZXMuKVxuIik7Ci19Ci0jZW5k aWYgLyogTk9TSE9XICovCi0KLSNpZm5kZWYgTk9YRkVSCi0vKiAgRCBPIFMgVCBBIFQgIC0tICBE aXNwbGF5IGZpbGUgdHJhbnNmZXIgc3RhdGlzdGljcy4gICovCi0KLWludAotZG9zdGF0KGJyaWVm KSBpbnQgYnJpZWY7IHsKLSAgICBleHRlcm4gbG9uZyBmaWxyZWosIHBlYWtjcHM7Ci0gICAgZXh0 ZXJuIGludCBsYXN0c3BtYXgsIHN0cmVhbWVkLCBjbGVhcmVkLCBzdHJlYW1vazsKLSAgICBleHRl cm4gY2hhciB3aG9hcmV1W107Ci0gICAgaW50IG4gPSAwLCBmdHAgPSAwOwotICAgIGV4dGVybiBp bnQgZG9jcmMsIGludGVycnVwdGVkLCBmYXRhbGlvOwotCi0gICAgZnRwID0gbGFzdHhmZXIgJiBX X0ZUUDsKLQotI2lmZGVmIENLX1RUR1dTSVoKLSNpZmRlZiBPUzIKLSAgICBpZiAodHRfY29sc1tW VEVSTV0gPCAwIHx8IHR0X3Jvd3NbVlRFUk1dIDwgMCkKLSAgICAgIHR0Z3dzaXooKTsKLSNlbHNl IC8qIE9TMiAqLwotICAgIGlmICh0dGd3c2l6KCkgPiAwKSB7Ci0gICAgICAgIGlmICh0dF9yb3dz ID4gMCAmJiB0dF9jb2xzID4gMCkgewotICAgICAgICAgICAgY21kX3Jvd3MgPSB0dF9yb3dzOwot ICAgICAgICAgICAgY21kX2NvbHMgPSB0dF9jb2xzOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlm IC8qIE9TMiAqLwotI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KLQotICAgIGRlYnVnKEYxMDEsImRv c3RhdCB4ZmVyc3RhdCIsIiIseGZlcnN0YXQpOwotICAgIGlmICh4ZmVyc3RhdCA8IDApIHsKLSAg ICAgICAgcHJpbnRmKCIgTm8gZmlsZSB0cmFuc2ZlcnMgeWV0LlxuIik7Ci0gICAgICAgIHJldHVy bigxKTsKLSAgICB9Ci0gICAgbiA9IDA7Ci0gICAgaWYgKGJyaWVmKSB7IHByaW50ZigiXG4iKTsg bisrOyB9OwotICAgIHByaW50ZigiIHByb3RvY29sICAgICAgICAgICAgICAgOiAlc1xuIiwKLSAg ICAgICAgICAgZnRwID8gImZ0cCIgOiBwdGFiW3Byb3RvY29sXS5wX25hbWUpOwotICAgIG4rKzsK LSAgICBwcmludGYoIiBzdGF0dXMgICAgICAgICAgICAgICAgIDogIik7Ci0gICAgaWYgKHhmZXJz dGF0KSBwcmludGYoIlNVQ0NFU1NcbiIpOwotICAgIGVsc2UgaWYgKGludGVycnVwdGVkKSBwcmlu dGYoIkZBSUxVUkUgKGludGVycnVwdGVkKVxuIik7Ci0gICAgZWxzZSBpZiAoZmF0YWxpbykgcHJp bnRmKCJGQUlMVVJFIChpL28gZXJyb3IpXG4iKTsKLSAgICBlbHNlIHByaW50ZigiRkFJTFVSRVxu Iik7Ci0jaWZuZGVmIFhZWl9JTlRFUk5BTAotICAgIGlmICghZnRwICYmIHByb3RvY29sICE9IFBS T1RPX0spIHsKLSAgICAgICAgcHJpbnRmKCJcbiBleHRlcm5hbCBwcm90b2NvbCBzdGF0aXN0aWNz IG5vdCBhdmFpbGFibGVcbiIpOwotICAgICAgICByZXR1cm4oMSk7Ci0gICAgfQotI2VuZGlmIC8q IFhZWl9JTlRFUk5BTCAqLwotICAgIG4rKzsKLSAgICBpZiAoIWZ0cCkgewotICAgICAgICBpZiAo IXhmZXJzdGF0ID4gMCkgewotICAgICAgICAgICAgaWYgKGRvY3JjKQotICAgICAgICAgICAgICBw cmludGYoIiBjcmMtMTYgb2YgZmlsZShzKSAgICAgIDogJWxkXG4iLCBjcmMxNik7Ci0gICAgICAg ICAgICBlbHNlCi0gICAgICAgICAgICAgIHByaW50ZigiIGNyYy0xNiBvZiBmaWxlKHMpICAgICAg OiAoZGlzYWJsZWQpXG4iKTsKLSAgICAgICAgICAgIG4rKzsKLSAgICAgICAgfQotICAgICAgICBp ZiAoIXhmZXJzdGF0ICYmICplcGt0bXNnKSB7Ci0gICAgICAgICAgICBwcmludGYoIiByZWFzb24g ICAgICAgICAgICAgICAgIDogJXNcbiIsIGVwa3Rtc2cpOwotICAgICAgICAgICAgbisrOwotICAg ICAgICB9Ci0gICAgfQotICAgIGlmICghYnJpZWYpIHsKLSNpZmRlZiBORVdGVFAKLSAgICAgICAg aWYgKGZ0cCkgewotICAgICAgICAgICAgZXh0ZXJuIGNoYXIgZnRwX3NydnR5cFtdOwotICAgICAg ICAgICAgcHJpbnRmKCIgcmVtb3RlIHN5c3RlbSB0eXBlICAgICA6ICVzXG4iLGZ0cF9zcnZ0eXAp OwotICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBORVdGVFAgKi8KLSAgICAgICAgICBpZiAod2hv YXJldVswXSkgewotICAgICAgICAgICAgcHJpbnRmKCIgcmVtb3RlIHN5c3RlbSB0eXBlICAgICA6 ICVzXG4iLAotICAgICAgICAgICAgICAgICAgIGdldHN5c2lkKChjaGFyICopd2hvYXJldSkpOwot ICAgICAgICAgICAgbisrOwotICAgICAgICB9Ci0gICAgICAgIHByaW50ZigiIGZpbGVzIHRyYW5z ZmVycmVkICAgICAgOiAlbGRcbiIsZmlsY250IC0gZmlscmVqKTsKLSAgICAgICAgaWYgKCFmdHAp Ci0gICAgICAgICAgcHJpbnRmKCIgZmlsZXMgbm90IHRyYW5zZmVycmVkICA6ICVsZFxuIixmaWxy ZWopOwotICAgICAgICBwcmludGYoIiBjaGFyYWN0ZXJzIGxhc3QgZmlsZSAgIDogJXNcbiIsY2tm c3RvYShmZmMpKTsKLSAgICAgICAgcHJpbnRmKCIgdG90YWwgZmlsZSBjaGFyYWN0ZXJzICA6ICVz XG4iLGNrZnN0b2EodGZjKSk7Ci0gICAgICAgIG4gKz0gZnRwID8gMyA6IDQ7Ci0gICAgICAgIGlm ICghZnRwKSB7Ci0gICAgICAgICAgICBwcmludGYoIiBjb21tdW5pY2F0aW9uIGxpbmUgaW4gIDog JXNcbiIsY2tmc3RvYSh0bGNpKSk7Ci0gICAgICAgICAgICBwcmludGYoIiBjb21tdW5pY2F0aW9u IGxpbmUgb3V0IDogJXNcbiIsY2tmc3RvYSh0bGNvKSk7Ci0gICAgICAgICAgICBwcmludGYoIiBw YWNrZXRzIHNlbnQgICAgICAgICAgIDogJWRcbiIsIHNwYWNrZXRzKTsKLSAgICAgICAgICAgIHBy aW50ZigiIHBhY2tldHMgcmVjZWl2ZWQgICAgICAgOiAlZFxuIiwgcnBhY2tldHMpOwotICAgICAg ICAgICAgbiArPSA0OwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChmdHApIGdvdG8gZG90aW1l czsKLQotICAgIHByaW50ZigiIGRhbWFnZWQgcGFja2V0cyByZWMnZCAgOiAlZFxuIiwgY3J1bmNo ZWQpOwotICAgIHByaW50ZigiIHRpbWVvdXRzICAgICAgICAgICAgICAgOiAlZFxuIiwgdGltZW91 dHMpOwotICAgIHByaW50ZigiIHJldHJhbnNtaXNzaW9ucyAgICAgICAgOiAlZFxuIiwgcmV0cmFu cyk7Ci0gICAgbiArPSAzOwotCi0gICAgaWYgKCFicmllZikgewotICAgICAgICBpZiAoZmlsY250 ID4gMCkgewotICAgICAgICAgICAgcHJpbnRmKCIgcGFyaXR5ICAgICAgICAgICAgICAgICA6ICVz IixwYXJuYW0oKGNoYXIpcGFyaXR5KSk7Ci0gICAgICAgICAgICBuKys7Ci0gICAgICAgICAgICBp ZiAoYXV0b3BhcikgeyBwcmludGYoIiAoZGV0ZWN0ZWQgYXV0b21hdGljYWxseSkiKTsgbisrOyB9 Ci0gICAgICAgICAgICBwcmludGYoCi0gICAgICAgICAgICAgICAgICJcbiBjb250cm9sIGNoYXJh Y3RlcnMgICAgIDogJWxkIHByZWZpeGVkLCAlbGQgdW5wcmVmaXhlZFxuIiwKLSAgICAgICAgICAg ICAgICAgICBjY3AsIGNjdSk7Ci0gICAgICAgICAgICBuKys7Ci0gICAgICAgICAgICBwcmludGYo IiA4dGggYml0IHByZWZpeGluZyAgICAgIDogIik7Ci0gICAgICAgICAgICBuKys7Ci0gICAgICAg ICAgICBpZiAoZWJxZmxnKSBwcmludGYoInllcyBbJWNdXG4iLGVicSk7IGVsc2UgcHJpbnRmKCJu b1xuIik7Ci0gICAgICAgICAgICBuKys7Ci0gICAgICAgICAgICBwcmludGYoIiBsb2NraW5nIHNo aWZ0cyAgICAgICAgIDogJXNcbiIsIGxzY2FwdSA/ICJ5ZXMiIDogIm5vIik7Ci0gICAgICAgICAg ICBuKys7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgeyBp ZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIG4gPSAwOyB9Ci0gICAgaWYgKHN0cmVhbWVk ID4gMCkKLSAgICAgIHByaW50ZigiIHdpbmRvdyBzbG90cyB1c2VkICAgICAgOiAoc3RyZWFtaW5n KVxuIik7Ci0gICAgZWxzZQotICAgICAgcHJpbnRmKCIgd2luZG93IHNsb3RzIHVzZWQgICAgICA6 ICVkIG9mICVkXG4iLCB3bWF4LCB3c2xvdHIpOwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMp IHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBuID0gMDsgfQotICAgIHByaW50Zigi IHJlbGlhYmxlOiAgICAgICAgICAgICAgOiAlcyVzXG4iLAotICAgICAgICAgICBzdHJlYW1vayA/ ICIiIDogIm5vdCAiLCAibmVnb3RpYXRlZCIpOwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMp IHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBuID0gMDsgfQotICAgIHByaW50Zigi IGNsZWFyY2hhbm5lbDogICAgICAgICAgOiAlcyVzXG4iLAotICAgICAgICAgICBjbGVhcmVkICA/ ICIiIDogIm5vdCAiLCAibmVnb3RpYXRlZCIpOwotICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMp IHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBuID0gMDsgfQotCi0gICAgaWYgKCFi cmllZikgewotICAgICAgICBwcmludGYoIiBwYWNrZXQgbGVuZ3RoICAgICAgICAgIDogJWQgKHNl bmQpLCAlZCAocmVjZWl2ZSlcbiIsCi0gICAgICAgICAgICAgICBsYXN0c3BtYXgsIHVycHNpeik7 Ci0gICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVy bigxKTsgZWxzZSBuID0gMDsgfQotICAgICAgICBwcmludGYoIiBjb21wcmVzc2lvbiAgICAgICAg ICAgIDogIik7Ci0gICAgICAgIGlmIChycHRmbGcpCi0gICAgICAgICAgcHJpbnRmKCJ5ZXMgWyVj XSAoJWxkKVxuIiwoY2hhcikgcnB0cSxycHRuKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHBy aW50Zigibm9cbiIpOwotICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNr bW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbiA9IDA7IH0KLSAgICAgICAgaWYgKGJjdHUgPT0gNCkK LSAgICAgICAgICBwcmludGYoIiBibG9jayBjaGVjayB0eXBlIHVzZWQgIDogYmxhbmstZnJlZS0y XG4iKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHByaW50ZigiIGJsb2NrIGNoZWNrIHR5cGUg dXNlZCAgOiAlZFxuIixiY3R1KTsKLSAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgeyBp ZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIG4gPSAwOyB9Ci0gICAgfQotCi0gIGRvdGlt ZXM6Ci0KLSNpZmRlZiBHRlRJTUVSCi0jaWZkZWYgQ09NTUVOVAotICAgIHByaW50ZigiIGVsYXBz ZWQgdGltZSAgICAgICAgICAgOiAlMC4zZiBzZWMsICVzXG4iLCBmcHRzZWNzLGhobW1zcyh0c2Vj cykpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICBwcmludGYoIiBlbGFwc2VkIHRpbWUgICAg ICAgICAgIDogJXMgKCUwLjNmIHNlYylcbiIsCi0gICAgICAgICAgIGhobW1zcygobG9uZykoZnB0 c2VjcyArIDAuNSkpLGZwdHNlY3MpOwotI2Vsc2UKLSNpZmRlZiBDT01NRU5UCi0gICAgcHJpbnRm KCIgZWxhcHNlZCB0aW1lICAgICAgICAgICA6ICVzICglZCBzZWMpXG4iLGhobW1zcyh0c2Vjcyks dHNlY3MpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICBwcmludGYoIiBlbGFwc2VkIHRpbWUg ICAgICAgICAgIDogJWQgc2VjLCAlc1xuIix0c2VjcyxoaG1tc3ModHNlY3MpKTsKLSNlbmRpZiAv KiBHRlRJTUVSICovCi0gICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUo KSkgcmV0dXJuKDEpOyBlbHNlIG4gPSAwOyB9Ci0gICAgaWYgKCFmdHAgJiYgbG9jYWwgJiYgIW5l dHdvcmsgJiYgIWJyaWVmKSB7Ci0gICAgICAgIGlmIChzcGVlZCA8PSAwTCkgc3BlZWQgPSB0dGdz cGQoKTsKLSAgICAgICAgaWYgKHNwZWVkID4gMEwpIHsKLSAgICAgICAgICAgIGlmIChzcGVlZCA9 PSA4ODgwKQotICAgICAgICAgICAgICBwcmludGYoIiB0cmFuc21pc3Npb24gcmF0ZSAgICAgIDog NzUvMTIwMCBicHNcbiIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBwcmludGYo IiB0cmFuc21pc3Npb24gcmF0ZSAgICAgIDogJWxkIGJwc1xuIixzcGVlZCk7Ci0gICAgICAgICAg ICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVs c2UgbiA9IDA7IH0KLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIWZ0cCAmJiBsb2NhbCAmJiAh bmV0d29yayAmJiAgICAvKiBPbmx5IG1ha2VzIHNlbnNlIGZvciAqLwotICAgICAgICBtZG10eXAg PT0gMCAmJiAgICAgICAgICAgICAgICAgIC8qIGRpcmVjdCBzZXJpYWwgY29ubmVjdGlvbnMgKi8K LSAgICAgICAgc3BlZWQgPiA5OUwgJiYgICAgICAgICAgICAgICAgICAvKiB3aGVuIHdlIHJlYWxs eSBrbm93IHRoZSBzcGVlZCAqLwotICAgICAgICBzcGVlZCAhPSA4ODgwTAotICAgICAgICApIHsK LSAgICAgICAgaW50IGVmZjsKLSAgICAgICAgZWZmID0gKCgodGZjcHMgKiAxMDBMKSAvIChzcGVl ZCAvIDEwMEwpKSArIDVMKSAvIDEwTDsKLSAgICAgICAgcHJpbnRmKCIgZWZmZWN0aXZlIGRhdGEg cmF0ZSAgICA6ICVsZCBjcHMgKCVkJSUpXG4iLHRmY3BzLGVmZik7Ci0gICAgfSBlbHNlCi0gICAg ICBwcmludGYoIiBlZmZlY3RpdmUgZGF0YSByYXRlICAgIDogJWxkIGNwc1xuIiwgdGZjcHMpOwot ICAgIGlmICghZnRwICYmIHBlYWtjcHMgPiAwTCAmJiBwZWFrY3BzID4gdGZjcHMpCi0gICAgICBw cmludGYoIiBwZWFrIGRhdGEgcmF0ZSAgICAgICAgIDogJWxkIGNwc1xuIiwgcGVha2Nwcyk7Ci0g ICAgaWYgKGJyaWVmKQotICAgICAgcHJpbnRmKCJcblVzZSBTVEFUSVNUSUNTIC9WRVJCT1NFIGZv ciBncmVhdGVyIGRldGFpbC5cblxuIik7Ci0gICAgcmV0dXJuKDEpOwotfQotI2VuZGlmIC8qIE5P WEZFUiAqLwotCi0jaWZuZGVmIE5PU1BMCi0KLS8qIFRoZSBJTlBVVCBjb21tYW5kICovCi0KLS8q Ci0gIE5PVEU6IEFuIElOUFVUIHRpbWVvdXQgb2YgMCBtZWFucyB0byBwZXJmb3JtIGEgbm9uYmxv Y2tpbmcgcmVhZCBvZiB0aGUKLSAgbWF0ZXJpYWwgdGhhdCBoYXMgYWxyZWFkeSBhcnJpdmVkIGFu ZCBpcyB3YWl0aW5nIHRvIGJlIHJlYWQsIGFuZCBwZXJmb3JtCi0gIG1hdGNoZXMgYWdhaW5zdCBp dCwgd2l0aG91dCBkb2luZyBhbnkgZnVydGhlciByZWFkcy4gIEl0IHNob3VsZCBzdWNjZWVkCi0g IG9yIGZhaWwgaW5zdGFudGFuZW91c2x5LgotKi8KLQotLyogT3V0cHV0IGJ1ZmZlcmluZyBmb3Ig ImRvaW5wdXQiICovCi0KLSNpZmRlZiBwZHAxMQotI2RlZmluZSBNQVhCVVJTVCAxNiAgICAgICAg ICAgICAvKiBNYXhpbXVtIHNpemUgb2YgaW5wdXQgYnVyc3QgKi8KLSNlbHNlCi0jZGVmaW5lIE1B WEJVUlNUIDEwMjQKLSNlbmRpZiAvKiBwZHAxMSAqLwotI2lmZGVmIE9TSwotc3RhdGljIENIQVIg KmNvbmJ1ZjsgICAgICAgICAgICAvKiBCdWZmZXIgdG8gaG9sZCBvdXRwdXQgZm9yIGNvbnNvbGUg Ki8KLSNlbHNlCi1zdGF0aWMgQ0hBUiBjb25idWZbTUFYQlVSU1RdOyAgIC8qIEJ1ZmZlciB0byBo b2xkIG91dHB1dCBmb3IgY29uc29sZSAqLwotI2VuZGlmIC8qIE9TSyAqLwotc3RhdGljIGludCBj b25jbnQgPSAwOyAgICAgICAgICAvKiBOdW1iZXIgb2YgY2hhcmFjdGVycyBidWZmZXJlZCAqLwot I2lmZGVmIE9TSwotc3RhdGljIENIQVIgKnNlc2J1ZjsgICAgICAgICAgICAvKiBCdWZmZXIgdG8g aG9sZCBvdXRwdXQgZm9yIHNlc3Npb24gbG9nICovCi0jZWxzZQotc3RhdGljIENIQVIgc2VzYnVm W01BWEJVUlNUXTsgICAvKiBCdWZmZXIgdG8gaG9sZCBvdXRwdXQgZm9yIHNlc3Npb24gbG9nICov Ci0jZW5kaWYgLyogT1NLICovCi1zdGF0aWMgaW50IHNlc2NudCA9IDA7ICAgICAgICAgIC8qIE51 bWJlciBvZiBjaGFyYWN0ZXJzIGJ1ZmZlcmVkICovCi0KLWV4dGVybiBpbnQgZGVic2VzOyAgICAg ICAgICAgICAgICAgICAgICAvKiBURVJNSU5BTCBERUJVRyBPTi9PRkYgKi8KLQotc3RhdGljIFZP SUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsdXNoIElOUFVUIGVjaG9pbmcgKi8K LW15ZmxzaCgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgc2Vzc2lvbiBs b2cgb3V0cHV0LiAqLwotICAgIGlmIChjb25jbnQgPiAwKSB7Ci0gICAgICAgIGlmIChkZWJzZXMp IHsgICAgICAgICAgICAgICAgICAgLyogVGVybWluYWwgZGVidWdnaW5nPyAqLwotICAgICAgICAg ICAgaW50IGk7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29uY250OyBpKyspCi0gICAg ICAgICAgICAgIGNvbm9sKGRiY2hyKGNvbmJ1ZltpXSkpOwotICAgICAgICB9IGVsc2UKLSAgICAg ICAgICBjb254byhjb25jbnQsIChjaGFyICopIGNvbmJ1Zik7Ci0gICAgICAgIGNvbmNudCA9IDA7 Ci0gICAgfQotICAgIGlmIChzZXNjbnQgPiAwKSB7Ci0gICAgICAgIGxvZ3N0cigoY2hhciAqKSBz ZXNidWYsIHNlc2NudCk7Ci0gICAgICAgIHNlc2NudCA9IDA7Ci0gICAgfQotfQotCi0vKiBFeGVj dXRlIHRoZSBJTlBVVCBhbmQgTUlOUFVUIGNvbW1hbmRzICovCi0KLWludCBpbnN0YXR1cyA9IC0x OwotbG9uZyBpbmV0aW1lID0gLTFMOwotaW50IGlud2FpdCA9IDA7Ci1pbnQgbm93cmFwID0gMDsK LQotLyogRm9yIHJldHVybmluZyB0aGUgaW5wdXQgc2VxdWVuY2UgdGhhdCBtYXRjaGVkICovCi0K LSNpZmRlZiBCSUdCVUZPSwotI2RlZmluZSBNQVRDSEJVRlNJWiA4MTkxCi0jZWxzZQotI2RlZmlu ZSBNQVRDSEJVRlNJWiAxMDIzCi0jZW5kaWYgLyogQklHQlVGT0sgKi8KLXN0YXRpYyBjaGFyICog bWF0Y2hidWYgPSBOVUxMOwotc3RhdGljIGludCBtYXRjaGluZGV4ID0gMDsKLXN0YXRpYyBpbnQg YnVyc3QgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFycyByZW1haW5pbmcgaW4gaW5w dXQgYnVyc3QgKi8KLS8qCi0gIHRpbW8gPSBIb3cgbG9uZyB0byB3YWl0OgotICAgICAgICAgPCAw ID0gV2FpdCBmb3JldmVyCi0gICAgICAgICAgIDAgPSBEb24ndCB3YWl0IGF0IGFsbCAtIG1hdGVy aWFsIG11c3QgYWxyZWFkeSBoYXZlIGFycml2ZWQKLSAgICAgICAgID4gMCA9IFdhaXQgdGhpcyBt YW55IHNlY29uZHMKLSAgbXMgICA9IEFycmF5IG9mIHN0cmluZ3MgdG8gd2FpdCBmb3IuCi0gIG1w ICAgPSBBcnJheSBvZiBmbGFncy4KLSAgICAgICAgIElmIG1wW2ldID09IDAsIG1zW2ldIGlzIGxp dGVyYWwsIGVsc2UgaXQncyBhIHBhdHRlcm4uCi0gIGZsYWdzID0gYml0IG1hc2sKLSAgICBJTlBT V19OT00gPSAvTk9NQVRDSCA9IDEKLSAgICBJTlBTV19DTFIgPSAvQ0xFQVIgICA9IDIKLSAgICBJ TlBTV19OT1cgPSAvTk9XUkFQICA9IDQKLSAgICBJTlBTV19DT1UgPSAvQ09VTlQgICA9IDgKLSAg Y291bnQgPSAvQ09VTlQ6IHZhbHVlIGlmIGEgL0NPVU5UIHN3aXRjaCB3YXMgZ2l2ZW4uCi0KLSBS ZXR1cm5zOgotICAgIDAgb24gZmFpbHVyZSwgMSBvbiBzdWNjZXNzLgotKi8KLSNpZm5kZWYgRVNf Tk9STUFMCi0jZGVmaW5lIEVTX05PUk1BTCAwCi0jZW5kaWYJLyogRVNfTk9STUFMICovCi1leHRl cm4gaW50IGluZXNjW10sIG9sZGVzY1tdOwotCi1pbnQKLWRvaW5wdXQodGltbyxtcyxtcCxmbGFn cyxjb3VudCkKLSAgICBpbnQgdGltbzsgY2hhciAqbXNbXTsgaW50IG1wW107IGludCBmbGFnczsg aW50IGNvdW50OyB7Ci0gICAgZXh0ZXJuIGludCBpbmludHI7Ci0jaWZkZWYgQ0tfQVVUT0RMCi0g ICAgZXh0ZXJuIGludCBpbmF1dG9kbDsKLSNlbmRpZiAvKiBDS19BVVRPREwgKi8KLSAgICBpbnQg eCwgeSwgaSwgdCwgcnQsIGljbiwgYW55Y2hhciA9IDAsIG1pW01JTlBNQVhdOwotI2lmZGVmIEdG VElNRVIKLSAgICBDS0ZMT0FUIGZwdCA9IDAuMDsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0gICAg aW50IHNhdmVjb3VudCA9IDA7Ci0gICAgaW50IG5vbWF0Y2ggPSAwOwotICAgIGludCBjbGVhcmZp cnN0ID0gMDsKLSAgICBpbnQgbGFzdGNoYXIgPSAwOwotICAgIGludCB3YWl0aW5nID0gMDsKLSAg ICBpbnQgaW1hc2sgPSAwOwotICAgIGNoYXIgY2gsICp4cCwgKnM7Ci0gICAgQ0hBUiBjOwotI2lm bmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0gICAgZXh0ZXJuIGludCB0ZXJtX2lvOwotICAgIGlu dCB0ZXJtX2lvX3NhdmU7Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwot I2lmZGVmIFROQ09ERQotICAgIHN0YXRpYyBpbnQgY3IgPSAwOwotI2VuZGlmIC8qIFROQ09ERSAq LwotICAgIGludCBpc190biA9IDA7Ci0jaWZkZWYgU1NIQlVJTFRJTgotICAgIGV4dGVybiBpbnQg c3NoX2NhczsKLSAgICBleHRlcm4gY2hhciAqIHNzaF9jbWQ7Ci0jZW5kaWYgLyogU1NIQlVJTFRJ TiAqLwotICAgIGludCBub2VzY3NlcSA9IDA7CQkJLyogRmlsdGVyIGVzY2FwZSBzZXF1ZW5jZXMg Ki8KLQotICAgIGRlYnVnKEYxMDEsImlucHV0IGNvdW50IiwiIixjb3VudCk7Ci0gICAgZGVidWco RjEwMSwiaW5wdXQgZmxhZ3MiLCIiLGZsYWdzKTsKLQotLyoKLSAgQ0tfQlVSU1QgZW5hYmxlcyB0 aGUgSU5QVVQgc3BlZWR1cCBjb2RlLCB3aGljaCBkZXBlbmRzIG9uIHR0Y2hrKCkgcmV0dXJuaW5n Ci0gIGFjY3VyYXRlIGluZm9ybWF0aW9uLiAgSWYgSU5QVVQgZmFpbHMgd2l0aCB0aGlzIGNvZGUg ZW5hYmxlZCwgY2hhbmdlIHRoZQotICBhYm92ZSAiI2RlZmluZSIgdG8gIiN1bmRlZiIuCi0qLwot I2RlZmluZSBDS19CVVJTVAotCi0vKioqKiogQ0hBTkdFIFRISVMgVE8gQSBTRVQgSU5QVVQgUEFS QU1FVEVSICoqKioqLwotCi0gICAgbm9lc2NzZXEgPSAoc2Vzc2Z0ID09IFhZRlRfVCk7CS8qIEZp bHRlciBlc2NhcGUgc2VxdWVuY2VzICovCi0KLSAgICBpbWFzayA9IGNtYXNrOwotICAgIGlmIChw YXJpdHkpIGltYXNrID0gMHg3ZjsKLSAgICBpbndhaXQgPSB0aW1vOyAgICAgICAgICAgICAgICAg ICAgICAvKiBGb3IgXHYoaW53YWl0KSAqLwotCi0gICAgLyogT3B0aW9ucyBmcm9tIGNvbW1hbmQg c3dpdGNoZXMgKi8KLQotICAgIG5vd3JhcCA9IGZsYWdzICYgSU5QU1dfTk9XOwkJLyogNCA9IC9O T1dSQVAgKi8KLSAgICBub21hdGNoID0gZmxhZ3MgJiBJTlBTV19OT007CS8qIDEgPSAvTk9NQVRD SCAqLwotICAgIGNsZWFyZmlyc3QgPSBmbGFncyAmIElOUFNXX0NMUjsJLyogMiA9IC9DTEVBUiAq LwotICAgIHNhdmVjb3VudCA9IGNvdW50OwotCi0gICAgbWFrZXN0cigmaW5wbWF0Y2gsTlVMTCk7 Ci0gICAgaWYgKCFtYXRjaGJ1ZikgewotICAgICAgICBtYXRjaGJ1ZiA9IG1hbGxvYyhNQVRDSEJV RlNJWisxKTsKLSAgICAgICAgbWF0Y2hidWZbMF0gPSBOVUw7Ci0gICAgfQotICAgIG1hdGNoaW5k ZXggPSAwOwotCi0gICAgLyogSWYgbGFzdCB0aW1lIHRocm91Z2ggd2UgcmV0dXJuZWQgYmVjYXVz ZSBvZiAvTk9XUkFQIGFuZCBidWZmZXIgZnVsbCAqLwotICAgIC8qIG5vdyB3ZSBoYXZlIHRvIGNs ZWFyIHRoZSBidWZmZXIgdG8gbWFrZSByb29tIGZvciBhbm90aGVyIGxvYWQuICovCi0KLSAgICBp ZiAobm93cmFwICYmIGluc3RhdHVzID09IElOUF9CRikKLSAgICAgIGNsZWFyZmlyc3QgPSAxOwot Ci0gICAgaWYgKGNsZWFyZmlyc3QpIHsJCQkvKiBJTlBVVCAvQ0xFQVIgKi8KLQlpbnQgaTsKLQlt eWZsc2goKTsJCQkvKiBGbHVzaCBzY3JlZW4gYW5kIGxvZyBidWZmZXJzICovCi0JZm9yIChpID0g MDsgaSA8IGluYnVmc2l6ZTsgaSsrKQotCSAgaW5wYnVmW2ldID0gTlVMOwotCWlucGJwID0gaW5w YnVmOwotICAgIH0KLSAgICBpc190biA9Ci0jaWZkZWYgVE5DT0RFCi0gICAgICAgIChsb2NhbCAm JiBuZXR3b3JrICYmIElTX1RFTE5FVCgpKSB8fCAoIWxvY2FsICYmIHNzdGVsbmV0KQotI2Vsc2UK LSAgICAgICAgIDAKLSNlbmRpZiAvKiBUTkNPREUgKi8KLSAgICAgICAgICA7Ci0KLSNpZmRlZiBD S19TU0wKLSAgICBpZiAoaXNfdG4pIGlmIChzc2xfcmF3X2ZsYWcgfHwgdGxzX3Jhd19mbGFnKSBp c190biA9IDA7Ci0jZW5kaWYJLyogQ0tfU1NMICovCi0KLSAgICBpbnN0YXR1cyA9IElOUF9JRTsg ICAgICAgICAgICAgICAgICAvKiAzID0gaW50ZXJuYWwgZXJyb3IgKi8KLSAgICBrYmNoYXIgPSAw OwotCi0jaWZkZWYgT1NLCi0gICAgaWYgKGNvbmJ1ZiA9PSBOVUxMKSB7Ci0gICAgICAgIGlmICgo Y29uYnVmID0gKENIQVIgKiltYWxsb2MoTUFYQlVSU1QqMikpID09IE5VTEwpIHsKLSAgICAgICAg ICAgIHJldHVybigwKTsKLSAgICAgICAgfQotICAgICAgICBzZXNidWYgPSBjb25idWYgKyBNQVhC VVJTVDsKLSAgICB9Ci0jZW5kaWYgLyogT1NLICovCi0KLSNpZm5kZWYgTk9MT0NBTAotICAgIGlm IChsb2NhbCkgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluIGxvY2FsIG1vZGUuLi4gKi8K LSAgICAgICAgaWYgKCh3YWl0aW5nID0gdHRjaGsoKSkgPCAwKSB7ICAvKiBjaGVjayB0aGF0IGNv bm5lY3Rpb24gaXMgb3BlbiAqLwotCSAgICBpZiAoIXF1aWV0KSB7Ci0JCWlmICgoIW5ldHdvcmsg Ci0jaWZkZWYgVE5fQ09NUE9SVAotCQkgICAgICB8fCBpc3RuY29tcG9ydCgpCi0jZW5kaWYgLyog VE5fQ09NUE9SVCAqLwotCQkgICAgICApICYmIGNhcnJpZXIgIT0gQ0FSX09GRikKLQkJICAgIHBy aW50ZigiP0NhcnJpZXIgZGV0ZWN0IGZhaWx1cmUgb24gJXMuXG4iLCB0dG5hbWUpOwotCQllbHNl Ci0JCSAgICBwcmludGYoIj9Db25uZWN0aW9uICVzICVzIGlzIG5vdCBvcGVuLlxuIiwKLQkJICAg ICAgIG5ldHdvcmsgPyAidG8iIDogIm9uIiwKLQkJICAgICAgIHR0bmFtZQotCQkgICAgICAgKTsK LQkgICAgfQotICAgICAgICAgICAgaW5zdGF0dXMgPSBJTlBfSU87Ci0gICAgICAgICAgICByZXR1 cm4oMCk7Ci0gICAgICAgIH0KLSAgICAgICAgZGVidWcoRjEwMSwiZG9pbnB1dCB3YWl0aW5nIiwi Iix3YWl0aW5nKTsKLSAgICAgICAgeSA9IHR0dnQoc3BlZWQsZmxvdyk7ICAgICAgICAgICAvKiBQ dXQgbGluZSBpbiAidHR2dCIgbW9kZSAqLwotICAgICAgICBpZiAoeSA8IDApIHsKLSAgICAgICAg ICAgIHByaW50ZigiP0lOUFVUIGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSAgICAgICAgICAg IGluc3RhdHVzID0gSU5QX0lPOwotICAgICAgICAgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAg ICAgIC8qIFdhdGNoIG91dCBmb3IgZmFpbHVyZS4gKi8KLSAgICAgICAgfQotICAgIH0KLSNlbmRp ZiAvKiBOT0xPQ0FMICovCi0KLSNpZmRlZiBTU0hCVUlMVElOCi0gICAgaWYgKCBuZXR3b3JrICYm IG5ldHR5cGUgPT0gTkVUX1NTSCAmJiBzc2hfY2FzICYmIHNzaF9jbWQgJiYgCi0gICAgICAgICAh KHN0cmNtcChzc2hfY21kLCJrZXJtaXQiKSAmJiBzdHJjbXAoc3NoX2NtZCwic2Z0cCIpKSkgewot ICAgICAgICBpZiAoIXF1aWV0KQotCSAgcHJpbnRmKCI/U1NIIFN1YnN5c3RlbSBhY3RpdmU6ICVz XG4iLCBzc2hfY21kKTsKLSAgICAgICAgaW5zdGF0dXMgPSBJTlBfSUtTOwotICAgICAgICByZXR1 cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KLQotICAgIGRlYnVnKEYxMTEs ImRvaW5wdXQgbXNbMF0iLG1zWzBdLHdhaXRpbmcpOwotCi0gICAgaWYgKCFtc1swXSB8fCBpc2Vt cHR5c3RyaW5nKG1zWzBdKSkgeyAvKiBObyBzZWFyY2ggc3RyaW5nIHdhcyBnaXZlbiBub3IgKi8K LQlpZiAoY291bnQgPCAyKQkJCSAgLyogYSAvQ09VTlQ6IHN3aXRjaCBzbyB3ZSBqdXN0ICovCi0J ICBhbnljaGFyID0gMTsJCQkgIC8qIHdhaXQgZm9yIHRoZSBmaXJzdCBjaGFyYWN0ZXIgKi8KLSAg ICB9Ci0gICAgaWYgKG5vbWF0Y2gpIGFueWNoYXIgPSAwOwkJLyogRG9uJ3QgbWF0Y2ggYW55dGhp bmcgKi8KLQotICAgIGlmICghYW55Y2hhciAmJiB3YWl0aW5nID09IDAgJiYgdGltbyA9PSAwKQot ICAgICAgcmV0dXJuKDApOwotCi0jaWZuZGVmIE5PREVCVUcKLSAgICBpZiAoZGVibG9nKSB7Ci0g ICAgICAgIGNoYXIgeGJ1ZlsyNF07Ci0gICAgICAgIGRlYnVnKEYxMDEsImRvaW5wdXQgYW55Y2hh ciIsIiIsYW55Y2hhcik7Ci0gICAgICAgIGRlYnVnKEYxMDEsImRvaW5wdXQgdGltbyIsIiIsdGlt byk7Ci0gICAgICAgIGRlYnVnKEYxMDEsImRvaW5wdXQgZWNobyIsIiIsaW5lY2hvKTsKLSNpZmRl ZiBDS19CVVJTVAotICAgICAgICBkZWJ1ZyhGMTAxLCJkb2lucHV0IGJ1cnN0IiwiIixidXJzdCk7 Ci0jZW5kaWYJLyogQ0tfQlVSU1QgKi8KLSAgICAgICAgeSA9IC0xOwotICAgICAgICB3aGlsZSAo bXNbKyt5XSkgewotICAgICAgICAgICAgc3ByaW50Zih4YnVmLCJkb2lucHV0IHN0cmluZyAlMmQi LHkpOyAvKiBTQUZFICgyNCkgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTEseGJ1Zixtc1t5XSxt cFt5XSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogTk9ERUJVRyAqLwotCi0jaWZkZWYg SUtTX09QVElPTgotICAgIGlmIChpc190bikgewotICAgICAgICAvKiBJZiB0aGUgcmVtb3RlIHNp ZGUgaXMgaW4gYSBzdGF0ZSBvZiBJS1MgU1RBUlQtU0VSVkVSICAgICovCi0gICAgICAgIC8qIHdl IHJlcXVlc3QgdGhhdCB0aGUgc3RhdGUgYmUgY2hhbmdlZC4gIFdlIHdpbGwgZGV0ZWN0ICAgKi8K LSAgICAgICAgLyogYSBmYWlsdXJlIHRvIGFkaGVyZSB0byB0aGUgcmVxdWVzdCB3aGVuIHdlIGNh bGwgdHRpbmMoKSAqLwotICAgICAgICBpZiAoVEVMT1BUX1UoVEVMT1BUX0tFUk1JVCkgJiYKLSAg ICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQudV9zdGFydCkKLSAgICAg ICAgICBpa3Nfd2FpdChLRVJNSVRfUkVRX1NUT1AsMCk7ICAvKiBTZW5kIFJlcXVlc3QtU3RvcCAq LwotI2lmZGVmIENLX0FVVE9ETAotICAgICAgICAvKiBJZiB3ZSBhcmUgcHJvY2Vzc2luZyBwYWNr ZXRzIGR1cmluZyBJTlBVVCBhbmQgd2UgaGF2ZSBub3QgKi8KLSAgICAgICAgLyogc2VudCBhIFNU QVJUIG1lc3NhZ2UsIGRvIHNvIG5vdy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAg ICAgIGlmIChpbmF1dG9kbCAmJiBURUxPUFRfTUUoVEVMT1BUX0tFUk1JVCkgJiYKLQkJCSFURUxP UFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0KSB7Ci0gICAgICAgICAgICB0bl9z aWtzKEtFUk1JVF9TVEFSVCk7ICAgICAgLyogU2VuZCBLZXJtaXQtU2VydmVyIFN0YXJ0ICovCi0g ICAgICAgIH0KLSNlbmRpZiAvKiBDS19BVVRPREwgKi8KLSAgICB9Ci0jZW5kaWYgLyogSUtTX09Q VElPTiAqLwotICAgIHggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVy biBjb2RlLCBhc3N1bWUgZmFpbHVyZSAqLwotICAgIGluc3RhdHVzID0gSU5QX1RPOyAgICAgICAg ICAgICAgICAgIC8qIFN0YXR1cywgYXNzdW1lIHRpbWVvdXQgKi8KLQotICAgIGZvciAoeSA9IDA7 IHkgPCBNSU5QTUFYOyB5KyspCS8qIEluaXRpYWxpemUuLi4gKi8KLSAgICAgIG1pW3ldID0gMDsg ICAgICAgICAgICAgICAgICAgICAgICAvKiAgLi5zdHJpbmcgcGF0dGVybiBtYXRjaCBwb3NpdGlv biAqLwotCi0gICAgaWYgKCFpbnBjYXNbY21kbHZsXSkgeyAgICAgICAgICAgICAgLyogSU5QVVQg Q0FTRSA9IElHTk9SRT8gICovCi0gICAgICAgIHkgPSAtMTsKLSAgICAgICAgd2hpbGUgKCh4cCA9 IG1zWysreV0pKSB7CS8qIENvbnZlcnQgZWFjaCB0YXJnZXQgdG8gbG93ZXJjYXNlICovCi0gICAg ICAgICAgICB3aGlsZSAoKnhwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzdXBwZXIoKnhwKSkg KnhwID0gKGNoYXIpIHRvbG93ZXIoKnhwKTsKLSAgICAgICAgICAgICAgICB4cCsrOwotICAgICAg ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJ0aW1lcigpOyAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFJlc2V0IHRpbWVyLiAqLwotI2lmZGVmIEdGVElNRVIKLSAgICByZnRpbWVy KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbG9hdGluZy1wb2ludCB0aW1lciB0b28u ICovCi0jZW5kaWYgLyogR0ZUSU1FUiAqLwotICAgIGluZXRpbWUgPSAtMUw7ICAgICAgICAgICAg ICAgICAgICAgIC8qIEluaXRpYWxpemUgZWxhcHNlZCB0aW1lLiAqLwotICAgIHQgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRpbWUgbm93IGlzIDAuICovCi0gICAgbV9mb3Vu ZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCB0byB0aW1lZC1vdXQgKi8K LSAgICBpbmNvdW50ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIgY291 bnRlciAqLwotICAgIHJ0ID0gKHRpbW8gPT0gMCkgPyAwIDogMTsgICAgICAgICAgIC8qIENoYXJh Y3Rlci1yZWFkIHRpbWVvdXQgaW50ZXJ2YWwgKi8KLQotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYg T1MyCi0gICAgdGVybV9pb19zYXZlID0gdGVybV9pbzsgICAgICAgICAgICAgLyogRGlzYWJsZSBJ L08gYnkgZW11bGF0b3IgKi8KLSAgICB0ZXJtX2lvID0gMDsKLSNlbmRpZiAvKiBPUzIgKi8KLSNl bmRpZiAvKiBOT0xPQ0FMICovCi0KLSAgICB3aGlsZSAoMSkgeyAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBDaGFyYWN0ZXItZ2V0dGluZyBsb29wICovCi0jaWZkZWYgQ0tfQVBDCi0gICAgICAg IC8qIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhbiBBdXRvZG93biBvciBvdGhlciBBUEMgY29t bWFuZCAqLwotICAgICAgICBpZiAoYXBjYWN0aXZlID09IEFQQ19MT0NBTCB8fAotICAgICAgICAg ICAgKGFwY2FjdGl2ZSA9PSBBUENfUkVNT1RFICYmIGFwY3N0YXR1cyAhPSBBUENfT0ZGKSkgewot ICAgICAgICAgICAgaWYgKG1sb29rKG1hY3RhYiwiX2FwY19jb21tYW5kcyIsbm1hYykgPT0gLTEp IHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJkb2lucHV0IGFib3V0IHRvIGV4ZWN1dGUg QVBDIixhcGNidWYsMCk7Ci0gICAgICAgICAgICAgICAgZG9tYWMoIl9hcGNfY29tbWFuZHMiLGFw Y2J1ZixjbWRzdGtbY21kbHZsXS5jY2ZsZ3N8Q0ZfQVBDKTsKLSAgICAgICAgICAgICAgICBkZWxt YWMoIl9hcGNfY29tbWFuZHMiLDEpOwotICAgICAgICAgICAgICAgIGFwY2FjdGl2ZSA9IEFQQ19J TkFDVElWRTsKLSNpZmRlZiBERUJVRwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTAwLCJkb2lucHV0IEFQQyBpbiBwcm9ncmVzcyIsIiIsMCk7Ci0jZW5kaWYg LyogREVCVUcgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIENLX0FQQyAq LwotCi0gICAgICAgIGlmICh0aW1vID09IDAgJiYgd2FpdGluZyA8IDEpIHsgLyogU3BlY2lhbCBl eGl0IGNyaXRlcmlvbiAqLwotICAgICAgICAgICAgaW5zdGF0dXMgPSBJTlBfVE87ICAgICAgICAg IC8qIGZvciB0aW1lb3V0ID09IDAgKi8KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g ICAgICAgIGlmIChsb2NhbCkgeyAgICAgICAgICAgICAgICAgICAgLyogT25lIGNhc2UgZm9yIGxv Y2FsICovCi0gICAgICAgICAgICB5ID0gdHRpbmMocnQpOyAgICAgICAgICAgICAgLyogR2V0IGNo YXJhY3RlciBmcm9tIGNvbW0gZGV2aWNlICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJkb2lu cHV0IHR0aW5jKHJ0KSByZXR1cm5zIiwiIix5KTsKLSAgICAgICAgICAgIGlmICh5IDwgLTEpIHsg ICAgICAgICAgICAgICAvKiBDb25uZWN0aW9uIGZhaWxlZC4gKi8KLSAgICAgICAgICAgICAgICBp bnN0YXR1cyA9IElOUF9JTzsgICAgICAvKiBTdGF0dXMgPSBpL28gZXJyb3IgKi8KLSNpZm5kZWYg Tk9MT0NBTAotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgIHRlcm1faW8gPSB0ZXJtX2lvX3Nh dmU7Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotICAgICAgICAgICAg ICAgIHN3aXRjaCAoeSkgewotICAgICAgICAgICAgICAgICAgY2FzZSAtMjogICAgICAgICAgICAg IC8qIENvbm5lY3Rpb24gbG9zdCAqLwotICAgICAgICAgICAgICAgICAgICBpZiAobG9jYWwgJiYg IW5ldHdvcmsgJiYgY2FycmllciAhPSBDQVJfT0ZGKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg ICBkb2xvZ2VuZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJDb25uZWN0aW9u IGNsb3NlZC5cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHRjbG9zKDEpOwotICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICAgICAgY2FzZSAtMzoKLSAgICAgICAgICAgICAgICAgICAgZG9sb2dlbmQoKTsKLSAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKCJTZXNzaW9uIExpbWl0IGV4Y2VlZGVkIC0gY2xvc2luZyBjb25u ZWN0aW9uLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHR0Y2xvcygxKTsKLSAgICAgICAgICAg ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJkb2lucHV0IENvbm5lY3Rpb24gZmFp bGVkIiwicmV0dXJuaW5nIDAiLHkpOwotICAgICAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbmludHIpIHsKLSAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTExLCJkb2lucHV0IiwiaW5pbnRyIixpbmludHIpOwotICAgICAgICAgICAgICAgIGlmICgo aWNuID0gY29uY2hrKCkpID4gMCkgeyAvKiBJbnRlcnJ1cHRlZCBmcm9tIGtleWJvYXJkPyAqLwot ICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJpbnB1dCBpbnRlcnJ1cHRlZCBmcm9tIGtl eWJvYXJkIiwiIixpY24pOwotICAgICAgICAgICAgICAgICAgICBrYmNoYXIgPSBjb25pbmMoMCk7 Ci0gICAgICAgICAgICAgICAgICAgIGlmIChrYmNoYXIgPj0gMCkgewotICAgICAgICAgICAgICAg ICAgICAgICAgd2hpbGUgKC0taWNuID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRlYnVnKEYxMTAsImRvaW5wdXQiLCJhYnNvcmJpbmciLDApOwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbmluYygwKTsgICAgICAvKiBZZXMsIGFic29yYiB3aGF0IHdhcyB0eXBlZC4g Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlu c3RhdHVzID0gSU5QX1VJOyAgLyogRmFpbCBhbmQgcmVtZW1iZXIgd2h5LiAqLwotICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAg ICAgICAgLyogQW5vdGhlciBmb3IgcmVtb3RlICovCi0gICAgICAgICAgICB5ID0gY29uaW5jKHJ0 KTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImRvaW5wdXQgY29uaW5jKHJ0KSByZXR1cm5zIiwi Iix5KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoeSA+IC0xKSB7ICAgICAgICAgICAgICAgICAg IC8qIEEgY2hhcmFjdGVyIGFycml2ZWQgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImRvaW5w dXQiLCJhIGNoYXJhY3RlciBhcnJpdmVkIix5KTsKLSAgICAgICAgICAgIGlmICh0aW1vID09IDAp Ci0gICAgICAgICAgICAgIHdhaXRpbmctLTsKLSNpZm5kZWYgT1MyCi0jZGVmaW5lIFROX05PTE8K LSNlbmRpZiAvKiBPUzIgKi8KLSNpZmRlZiBOT0xPQ0FMCi0jZGVmaW5lIFROX05PTE8KLSNlbmRp ZiAvKiBOT0xPQ0FMICovCi0KLSNpZmRlZiBUTl9OT0xPCi0gICAgICAgICAgICBkZWJ1ZyhGMTAw LCJkb2lucHV0IFROX05PTE8iLCIiLDApOwotI2lmZGVmIFROQ09ERQotICAgICAgICAgICAgLyog Q2hlY2sgZm9yIHRlbG5ldCBwcm90b2NvbCBuZWdvdGlhdGlvbiAqLwotICAgICAgICAgICAgaWYg KGlzX3RuKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh5ICYgMHhmZikgewotICAgICAgICAg ICAgICAgICAgY2FzZSBJQUM6Ci0gICAgICAgICAgICAgICAgICAgIGNyID0gMDsKLSAgICAgICAg ICAgICAgICAgICAgbXlmbHNoKCk7ICAgLyogQnJlYWsgZnJvbSBpbnB1dCBidXJzdCBmb3IgdG5f ZG9vcCgpICovCi0jaWZkZWYgQ0tfQlVSU1QKLSAgICAgICAgICAgICAgICAgICAgYnVyc3QgPSAw OwotI2VuZGlmIC8qIENLX0JVUlNUICovCi0gICAgICAgICAgICAgICAgICAgIHdhaXRpbmcgLT0g MjsgICAgICAgLyogKG5vdCBuZWNlc3NhcmlseS4uLikgKi8KLSAgICAgICAgICAgICAgICAgICAg c3dpdGNoICh0bl9kb29wKChDSEFSKSh5ICYgMHhmZiksZHVwbGV4LHR0aW5jKSkgewotICAgICAg ICAgICAgICAgICAgICAgIGNhc2UgMjogZHVwbGV4ID0gMDsgY29udGludWU7Ci0gICAgICAgICAg ICAgICAgICAgICAgY2FzZSAxOiBkdXBsZXggPSAxOyBjb250aW51ZTsKLSNpZmRlZiBJS1NfT1BU SU9OCi0gICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQudV9zdGFydCAmJgotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAhdGNwX2luY29taW5nKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW5zdGF0dXMgPSBJTlBfSUtTOwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHByaW50ZigKLSAiIEludGVybmV0IEtlcm1pdCBTZXJ2aWNlIGluIFNFUlZFUiBtb2RlLlxu IFBsZWFzZSB1c2UgUkVNT1RFIGNvbW1hbmRzLlxuIgotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0j ZW5kaWYgLyogSUtTX09QVElPTiAqLwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjogICAg ICAgICAgIC8qIFRFTE5FVCBETyBMT0dPVVQgcmVjZWl2ZWQgKi8KLQkJCWNvbnRpbnVlOwotCQkg ICAgICBjYXNlIDc6Ci0JCSAgICAgIGNhc2UgMzoJCS8qIEEgcXVvdGVkIElBQyAqLwotCQkJYnJl YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLQkJCWNvbnRpbnVlOwotICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBjYXNlIENSOgotICAgICAgICAgICAg ICAgICAgICBjciA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICAgICAgY2FzZSBOVUw6Ci0gICAgICAgICAgICAgICAgICAgIGlmICghVEVMT1BUX1UoVEVMT1BU X0JJTkFSWSkgJiYgY3IpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNyID0gMDsKLSAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgICAgIGNyID0gMDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBjciA9IDA7Ci0gICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8qIEknbSBlY2hvaW5nIHJlbW90ZSBjaGFy cyAqLwotICAgICAgICAgICAgICAgIGlmIChURUxPUFRfTUUoVEVMT1BUX0VDSE8pICYmIHRuX3Jl bV9lY2hvKQotICAgICAgICAgICAgICAgICAgdHRvYygoY2hhcil5KTsKLSAgICAgICAgICAgIH0K LSNlbmRpZiAvKiBUTkNPREUgKi8KLSNpZmRlZiBDS19BVVRPREwKLSAgICAgICAgICAgIC8qIENo ZWNrIGZvciBmaWxlIHRyYW5zZmVyIHBhY2tldHMgKi8KLSAgICAgICAgICAgIGlmIChpbmF1dG9k bCkgYXV0b2Rvd24oeSk7Ci0jZW5kaWYgLyogQ0tfQVVUT0RMICovCi0jZWxzZSAgLyogVE5fTk9M TyAqLwotICAgICAgICAgICAgZGVidWcoRjEwMCwiZG9pbnB1dCAhVE5fTk9MTyIsIiIsMCk7Ci0j aWZkZWYgVE5DT0RFCi0gICAgICAgICAgICAvKiBDaGVjayBmb3IgdGVsbmV0IHByb3RvY29sIG5l Z290aWF0aW9uICovCi0gICAgICAgICAgICBpZiAoaXNfdG4pIHsKLSAgICAgICAgICAgICAgICBp bnQgdHg7Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh5ICYgMHhmZikgewotICAgICAgICAgICAg ICAgICAgY2FzZSBJQUM6Ci0gICAgICAgICAgICAgICAgICAgIG15ZmxzaCgpOyAgIC8qIEJyZWFr IGZyb20gaW5wdXQgYnVyc3QgZm9yIHRuX2Rvb3AoKSAqLwotI2lmZGVmIENLX0JVUlNUCi0gICAg ICAgICAgICAgICAgICAgIGJ1cnN0ID0gMDsKLSNlbmRpZiAvKiBDS19CVVJTVCAqLwotI2lmZGVm IElLU19PUFRJT04KLSAgICAgICAgICAgICAgICAgICAgdHggPSBzY3JpcHR3cnRidWYoKFVTSE9S VCl5KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHR4ID09IDQpIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChURUxPUFRfVShURUxPUFRfS0VSTUlUKSAmJiAKLQkJCSAgICBURUxPUFRf U0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnVfc3RhcnQgJiYKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAhdGNwX2luY29taW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGF0dXMgPSBJTlBfSUtTOwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHByaW50ZigKLSAgIiBJbnRlcm5ldCBLZXJtaXQgU2VydmljZSBp biBTRVJWRVIgbW9kZS5cbiBQbGVhc2UgdXNlIFJFTU9URSBjb21tYW5kcy5cbiIKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg fSBlbHNlIGlmICh0eCA9PSA2KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBURUxORVQg RE8gTE9HT1VUIHJlY2VpdmVkICovCi0KLSAgICAgICAgICAgICAgICAgICAgfQotI2Vsc2UgLyog SUtTX09QVElPTiAqLwotICAgICAgICAgICAgICAgICAgICAvKiBIYW5kbGVzIFRlbG5ldCBuZWdv dGlhdGlvbnMgKi8KLSAgICAgICAgICAgICAgICAgICAgdHggPSBzY3JpcHR3cnRidWYoKFVTSE9S VCl5KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHR4ID09IDYpIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFRFTE5FVCBETyBMT0dPVVQgcmVjZWl2ZWQgKi8KLSAgICAgICAgICAgICAg ICAgICAgfQotI2VuZGlmIC8qIElLU19PUFRJT04gKi8KLSAgICAgICAgICAgICAgICAgICAgd2Fp dGluZyAtPSAyOyAgICAgICAvKiAobm90IG5lY2Vzc2FyaWx5Li4uKSAqLwotICAgICAgICAgICAg ICAgICAgICBjciA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAg LyogYW5kIGF1dG9kb3dubG9hZCBjaGVjayAqLwotICAgICAgICAgICAgICAgICAgY2FzZSBDUjoK LSAgICAgICAgICAgICAgICAgICAgY3IgPSAxOwotICAgICAgICAgICAgICAgICAgICB0eCA9IHNj cmlwdHdydGJ1ZigoVVNIT1JUKXkpOwotICAgICAgICAgICAgICAgICAgICBpZiAodHggPT0gNikg ewotICAgICAgICAgICAgICAgICAgICAgICAgLyogVEVMTkVUIERPIExPR09VVCByZWNlaXZlZCAq LwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgICAgICAgY2FzZSBOVUw6Ci0gICAgICAgICAgICAgICAgICAgIGNyID0gMDsKLSAg ICAgICAgICAgICAgICAgICAgaWYgKCFURUxPUFRfVShURUxPUFRfQklOQVJZKSAmJiBjcikKLSAg ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgdHggPSBz Y3JpcHR3cnRidWYoKFVTSE9SVCl5KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHR4ID09IDYp IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRFTE5FVCBETyBMT0dPVVQgcmVjZWl2ZWQg Ki8KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGNyID0gMDsKLSAg ICAgICAgICAgICAgICAgICAgdHggPSBzY3JpcHR3cnRidWYoKFVTSE9SVCl5KTsKLSAgICAgICAg ICAgICAgICAgICAgaWYgKHR4ID09IDYpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRF TE5FVCBETyBMT0dPVVQgcmVjZWl2ZWQgKi8KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvKiBJJ20gZWNob2luZyByZW1vdGUgY2hhcnMg Ki8KLSAgICAgICAgICAgICAgICBpZiAoVEVMT1BUX01FKFRFTE9QVF9FQ0hPKSAmJiB0bl9yZW1f ZWNobykKLSAgICAgICAgICAgICAgICAgIHR0b2MoKENIQVIpeSk7Ci0gICAgICAgICAgICB9IGVs c2UKLSNlbmRpZiAvKiBUTkNPREUgKi8KLSAgICAgICAgICAgICAgLyogSGFuZGxlcyB0ZXJtaW5h bCBlbXVsYXRpb24gcmVzcG9uc2VzICovCi0gICAgICAgICAgICAgIHNjcmlwdHdydGJ1ZigoVVNI T1JUKXkpOwotI2VuZGlmIC8qIFROX05PTE8gKi8KLQotICAgICAgICAgICAgLyogUmVhbCBpbnB1 dCBjaGFyYWN0ZXIgdG8gYmUgY2hlY2tlZCAqLwotCi0jaWZkZWYgQ0tfQlVSU1QKLSAgICAgICAg ICAgIGJ1cnN0LS07ICAgICAgICAgICAgICAgICAgICAvKiBPbmUgbGVzcyBjaGFyYWN0ZXIgd2Fp dGluZyAqLwotICAgICAgICAgICAgZGVidWcoRjEwMSwiZG9pbnB1dCBidXJzdCIsIiIsYnVyc3Qp OwotI2VuZGlmIC8qIENLX0JVUlNUICovCi0gICAgICAgICAgICBjID0gKENIQVIpIChpbWFzayAm IChDSEFSKSB5KTsgLyogTWFzayBvZmYgYW55IHBhcml0eSAqLwotICAgICAgICAgICAgaW5jaGFy WzBdID0gYzsgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIGNoYXJhY3RlciBmb3IgXHYoaW5jaGFy KSAqLwotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBDS19CVVJTVAotICAgICAgICAgICAgLyogVXBk YXRlICJsYXN0Y2hhciIgdGltZSBvbmx5IG9uY2UgZHVyaW5nIGlucHV0IGJ1cnN0ICovCi0gICAg ICAgICAgICBpZiAoYnVyc3QgPD0gMCkKLSNlbmRpZiAvKiBDS19CVVJTVCAqLwotI2VuZGlmIC8q IENPTU1FTlQgKi8KLSAgICAgICAgICAgICAgbGFzdGNoYXIgPSBndGltZXIoKTsgICAgICAvKiBS ZW1lbWJlciB3aGVuIGl0IGNhbWUgKi8KLQotICAgICAgICAgICAgaWYgKGMgPT0gJ1wwJykgeyAg ICAgICAgICAgIC8qIE5VTCwgd2UgY2FuJ3QgdXNlIGl0ICovCi0gICAgICAgICAgICAgICAgaWYg KGFueWNoYXIpIHsgICAgICAgICAgLyogRXhjZXB0IGlmIGFueSBjaGFyYWN0ZXIgd2lsbCBkbz8g Ki8KLSAgICAgICAgICAgICAgICAgICAgeCA9IDE7ICAgICAgICAgICAgICAvKiBZZXMsIGRvbmUu ICovCi0JCSAgICBpbnN0YXR1cyA9IElOUF9PSzsKLSAgICAgICAgICAgICAgICAgICAgaW5jb3Vu dCA9IDE7ICAgICAgICAvKiBUaGlzIG11c3QgYmUgdGhlIGZpcnN0IGFuZCBvbmx5LiAqLwotICAg ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9IGVsc2UgZ290byByZWZp bGw7CS8qIE90aGVyd2lzZSBjb250aW51ZSBJTlBVVHRpbmcgKi8KLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICppbnBicCsrID0gYzsgICAgICAgICAgICAgICAvKiBTdG9yZSBjaGFyIGluIGNp cmN1bGFyIGJ1ZmZlciAqLwotICAgICAgICAgICAgaW5jb3VudCsrOyAgICAgICAgICAgICAgICAg IC8qIENvdW50IGl0IGZvciBcdihpbmNvdW50KSAqLwotCi0JICAgIGlmIChmbGFncyAmIElOUFNX X0NPVSkgewkvKiBJTlBVVCAvQ09VTlQgKi8KLQkJaWYgKC0tY291bnQgPCAxKSB7Ci0JCSAgICB4 ID0gMTsKLQkJICAgIGluc3RhdHVzID0gSU5QX09LOwotICAgICAgICAgICAgICAgICAgICBpbmNv dW50ID0gc2F2ZWNvdW50OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQkJfQotCSAgICB9 Ci0gICAgICAgICAgICBpZiAobWF0Y2hidWYpIHsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2hp bmRleCA8IE1BVENIQlVGU0laKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1hdGNoYnVmW21hdGNo aW5kZXgrK10gPSBjOwotICAgICAgICAgICAgICAgICAgICBtYXRjaGJ1ZlttYXRjaGluZGV4XSA9 IE5VTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0jaWZkZWYgTUFDCi0gICAg ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIgKnR0ZXJtdzsgICAgLyogZmFr ZSBwb2ludGVyIGNhc3QgKi8KLSAgICAgICAgICAgICAgICBpZiAoaW5lY2hvKSB7Ci0gICAgICAg ICAgICAgICAgICAgIG91dGNoYXIodHRlcm13LCBjKTsgLyogZWNobyB0byB0ZXJtaW5hbCB3aW5k b3cgKi8KLSAgICAgICAgICAgICAgICAgICAgLyogdGhpcyBtaWdodCBiZSB0b28gbXVjaCBvdmVy aGVhZCB0byBkbyBoZXJlID8gKi8KLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlY29tbWFuZCh0 dGVybXcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSNlbHNlIC8qIE5vdCBN QUMgKi8KLSAgICAgICAgICAgIGlmIChpbmVjaG8pIHsgICAgICAgICAgICAgICAvKiBCdWZmZXIg Y29uc29sZSBvdXRwdXQgKi8KLSAgICAgICAgICAgICAgICBjb25idWZbY29uY250KytdID0gYzsK LSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBNQUMgKi8KLSNpZm5kZWYgT1MyCi0gICAgICAgICAg ICBpZiAoc2VzbG9nKSB7Ci0JCWludCBkdW1teSA9IDAsIHNraXAgPSAwOwotI2lmbmRlZiBOT0xP Q0FMCi0JCWlmIChub2VzY3NlcSkgewotCQkgICAgZHVtbXkgPSBjaGthZXMoYywwKTsKLQkJICAg IGlmIChpbmVzY1swXSAhPSBFU19OT1JNQUwgfHwgb2xkZXNjWzBdICE9IEVTX05PUk1BTCkKLQkJ ICAgICAgc2tpcCA9IDE7Ci0JCX0KLSNlbmRpZgkvKiBOT0xPQ0FMICovCi0jaWZkZWYgVU5JWE9S T1NLCi0JCWlmIChzZXNzZnQgPT0gWFlGVF9UKSB7Ci0jaWZkZWYgVU5JWAotCQkgICAgaWYgKGMg PT0gJ1xyJykKLSNlbHNlCi0jaWZkZWYgT1NLCi0JCSAgICBpZiAoYyA9PSAnXDAxMicpCi0jZW5k aWYgLyogT1NLICovCi0jZW5kaWYgLyogVU5JWCAqLwotCQkgICAgICBza2lwID0gMTsKLQkJfQot I2VuZGlmCS8qIFVOSVhPUk9TSyAqLwotCQlpZiAoIXNraXApCi0gICAgICAgICAgICAgICAgICBz ZXNidWZbc2VzY250KytdID0gYzsgLyogQnVmZmVyIHNlc3Npb24gbG9nIG91dHB1dCAqLwotICAg ICAgICAgICAgfQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgaWYgKGFueWNoYXIpIHsg ICAgICAgICAgICAgIC8qIEFueSBjaGFyYWN0ZXIgd2lsbCBkbz8gKi8KLSAgICAgICAgICAgICAg ICB4ID0gMTsKLQkJaW5zdGF0dXMgPSBJTlBfT0s7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWlucGNhc1tjbWRsdmxdKSB7ICAgICAgLyog SWdub3JlIGFscGhhYmV0aWMgY2FzZT8gKi8KLSAgICAgICAgICAgICAgICBpZiAoaXN1cHBlcihj KSkgICAgICAgICAvKiBZZXMsIGNvbnZlcnQgaW5wdXQgY2hhciB0byBsb3dlciAqLwotICAgICAg ICAgICAgICAgICAgYyA9IChDSEFSKSB0b2xvd2VyKGMpOwotICAgICAgICAgICAgfQotICAgICAg ICAgICAgZGVidWcoRjAwMCwiZG9pbnB1dCBjaGFyIiwiIixjKTsKLQotICAgICAgICAgICAgLyog SGVyZSBpcyB0aGUgbWF0Y2hpbmcgc2VjdGlvbiAqLwotCi0gICAgICAgICAgICB5ID0gLTE7ICAg ICAgICAgICAgICAgICAgICAgLyogTG9vcCB0aHJ1IHNlYXJjaCBzdHJpbmdzICovCi0gICAgICAg ICAgICB3aGlsZSAoIW5vbWF0Y2ggJiYgKHMgPSBtc1srK3ldKSkgewkvKiAuLi5hcyBtYW55IGFz IHdlIGhhdmUuICovCi0gICAgICAgICAgICAgICAgaWYgKG1wW3ldKSB7ICAgICAgICAgICAgLyog UGF0dGVybiBtYXRjaD8gKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICAgICAgICAgIGlu dCBqOwotICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIGlzIGdyb3NzIGJ1dCBpdCB3b3Jrcy4u LiAqLwotICAgICAgICAgICAgICAgICAgICAvKiBXZSBjb3VsZCBqdXN0IGFzIGVhc2lseSBoYXZl IHByZXBlbmRlZCAnKicgdG8gdGhlICAqLwotICAgICAgICAgICAgICAgICAgICAvKiBwYXR0ZXJu IGFuZCBza2lwcGVkIHRoZSBsb29wLCBleGNlcHQgdGhlbiB3ZSB3b3VsZCAqLwotICAgICAgICAg ICAgICAgICAgICAvKiBub3QgaGF2ZSBhbnkgd2F5IHRvIGlkZW50aWZ5IHRoZSBtYXRjaGluZyBz dHJpbmcuICAqLwotICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbWF0Y2hpbmRl eDsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ttYXRjaChzLCZtYXRjaGJ1 ZltqXSwxLDEpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmRleCA9IGo7 Ci0JCQkgICAgaW5zdGF0dXMgPSBJTlBfT0s7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg eCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg aWYgKHggPiAwKQotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotI2Vsc2UKLSAgICAgICAg ICAgICAgICAgICAgLyogSnVseSAyMDAxIC0gY2ttYXRjaCgpIHJldHVybnMgbWF0Y2ggcG9zaXRp b24uICovCi0gICAgICAgICAgICAgICAgICAgIC8qIEl0IHdvcmtzIGFuZCBpdCdzIG5vdCBncm9z cy4gKi8KLQkJICAgIC8qICg0ID0gZmxvYXRpbmcgcGF0dGVybikgKi8KLSAgICAgICAgICAgICAg ICAgICAgeCA9IGNrbWF0Y2gocyxtYXRjaGJ1ZixpbnBjYXNbY21kbHZsXSwxKzQpOwotICAgICAg ICAgICAgICAgICAgICBpZiAoeCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNo aW5kZXggPSB4IC0gMTsKLQkJCWluc3RhdHVzID0gSU5QX09LOwotICAgICAgICAgICAgICAgICAg ICAgICAgeCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg ICAgICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgICAgICAgICAgY29u dGludWU7Ci0gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgLyogTGl0ZXJh bCBtYXRjaC4gKi8KLSAgICAgICAgICAgICAgICBpID0gbWlbeV07ICAgICAgICAgICAgICAvKiBN YXRjaC1wb3NpdGlvbiBpbiBzZWFyY2ggc3RyaW5nLiAqLwotICAgICAgICAgICAgICAgIGRlYnVn KEYwMDAsImNvbXBhcmUgY2hhciIsIiIsKENIQVIpc1tpXSk7Ci0gICAgICAgICAgICAgICAgaWYg KGMgPT0gKENIQVIpIHNbaV0pIHsgLyogQ2hlY2sgZm9yIG1hdGNoICovCi0gICAgICAgICAgICAg ICAgICAgIGkrKzsgICAgICAgICAgICAgICAgLyogR290IG9uZSwgZ28gdG8gbmV4dCBjaGFyYWN0 ZXIgKi8KLSAgICAgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAvKiBEb24ndCBo YXZlIGEgbWF0Y2ggKi8KLSAgICAgICAgICAgICAgICAgICAgaW50IGo7Ci0gICAgICAgICAgICAg ICAgICAgIGZvciAoaiA9IGk7IGkgPiAwOyApIHsgLyogQmFjayB1cCBpbiBzZWFyY2ggc3RyaW5n ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpLS07IC8qIChEbyB0aGlzIGhlcmUgdG8gcHJl dmVudCBjb21waWxlciBmb3VsdXApICovCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBqIGlz IHRoZSBsZW5ndGggb2YgdGhlIHN1YnN0cmluZyB0aGF0IG1hdGNoZWQgKi8KLSAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChjID09IChDSEFSKSBzW2ldKSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKCFzdHJuY21wKHMsJnNbai1pXSxpKSkgewotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpKys7ICAgICAgICAgIC8qIGMgYWN0dWFsbHkgbWF0Y2hlcyAtLSBjZmsg Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgoQ0hBUikg c1tpXSA9PSAoQ0hBUikgJ1wwJykgeyAvKiBNYXRjaGVkIHRvIGVuZD8gKi8KLSAgICAgICAgICAg ICAgICAgICAgY2tzdHJuY3B5KG1hdGNoYnVmLG1zW3ldLE1BVENIQlVGU0laKTsKLSAgICAgICAg ICAgICAgICAgICAgbWF0Y2hpbmRleCA9IDA7Ci0JCSAgICBpbnN0YXR1cyA9IElOUF9PSzsgIC8q IFllcywgKi8KLSAgICAgICAgICAgICAgICAgICAgeCA9IDE7ICAgICAgICAgICAgCi0gICAgICAg ICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgLyogZG9uZS4gKi8KLSAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgbWlbeV0gPSBpOyAgICAgICAgICAgICAgLyogTm8sIHJl bWVtYmVyIG1hdGNoLXBvc2l0aW9uICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo eCA9PSAxKSB7ICAgICAgICAgICAgICAgLyogU2V0IFx2KG1pbnB1dCkgcmVzdWx0ICovCi0JCWlu c3RhdHVzID0gSU5QX09LOwotICAgICAgICAgICAgICAgIG1fZm91bmQgPSB5ICsgMTsKLSAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbnBicCA+ PSBpbnBidWYgKyBpbmJ1ZnNpemUpIHsgLyogUmVhY2hlZCBlbmQgb2YgYnVmZmVyPyAqLwotCQlp ZiAobm93cmFwKSB7CQkvKiBJZiAvTk9XUkFQLi4uKi8KLQkJICAgIGluc3RhdHVzID0gSU5QX0JG OwkvKiAuLi5yZXR1cm4gaW5kaWNhdGluZyBidWZmZXIgZnVsbC4gKi8KLQkJICAgICppbnBicCA9 IE5VTDsKLQkJICAgIGdvdG8geGlucHV0OwotCQl9Ci0gICAgICAgICAgICAgICAgKmlucGJwID0g TlVMOyAgICAgICAgICAgLyogTWFrZSBpdCBudWxsLXRlcm1pbmF0ZWQgKi8KLSAgICAgICAgICAg ICAgICBpbnBicCA9IGlucGJ1ZjsgICAgICAgICAvKiBZZXMuICovCi0gICAgICAgICAgICB9Ci0g ICAgICAgIH0KLSNpZmRlZiBDS19CVVJTVAotICAgICAgICBlbHNlIGlmICh5IDw9IC0xICYmIGJ1 cnN0ID4gMCkgewotICAgICAgICAgICAgZGVidWcoRjExMSwiZG9pbnB1dCAoeTw9LTEmJmJ1cnN0 PjApIiwiYnVyc3QiLGJ1cnN0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBBIHRpbWVvdXQgb2NjdXJyZWQgc28gdGhlcmUgY2FuJ3QgKi8KLSAgICAgICAgICAg IGJ1cnN0ID0gMDsgICAgICAgICAgICAgICAgICAvKiBiZSBkYXRhIHdhaXRpbmc7IG11c3QgY2hl Y2sgdGltbyAqLwotICAgICAgICB9Ci0gICAgICByZWZpbGw6Ci0gICAgICAgIGlmIChidXJzdCA8 PSAwKSB7ICAgICAgICAgICAgICAgLyogTm8gYnVmZmVyZWQgY2hhcnMgcmVtYWluaW5nLi4uICov Ci0gICAgICAgICAgICBteWZsc2goKTsgICAgICAgICAgICAgICAgICAgLyogRmx1c2ggYnVmZmVy ZWQgb3V0cHV0ICovCi0gICAgICAgICAgICBpZiAobG9jYWwpIHsgICAgICAgICAgICAgICAgLyog R2V0IHNpemUgb2YgbmV4dCBpbnB1dCBidXJzdCAqLwotICAgICAgICAgICAgICAgIGJ1cnN0ID0g dHRjaGsoKTsKLSAgICAgICAgICAgICAgICBpZiAoYnVyc3QgPCAwKSB7ICAgICAgICAvKiB0dGNo aygpIHNheXMgY29ubmVjdGlvbiBpcyBjbG9zZWQgKi8KLSAgICAgICAgICAgICAgICAgICAgaW5z dGF0dXMgPSBJTlBfSU87ICAvKiBTdGF0dXMgPSBpL28gZXJyb3IgKi8KLSNpZm5kZWYgTk9MT0NB TAotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICAgICB0ZXJtX2lvID0gdGVybV9pb19zYXZl OwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotCQkgICAgaWYgKCgh bmV0d29yayAKLSNpZmRlZiBUTl9DT01QT1JUCi0JCSAgICAgICAgIHx8IGlzdG5jb21wb3J0KCkK LSNlbmRpZiAvKiBUTl9DT01QT1JUICovCi0JCQkgKSAmJiBjYXJyaWVyICE9IENBUl9PRkYpIHsK LQkvKiBUaGUgdGVzdCBpcyB3cml0dGVuIHRoaXMgd2F5IGJlY2F1c2UgdGhlIE1pY3Jvc29mdCBj b21waWxlcgotCSAqIGlzIHByb2R1Y2luZyBiYWQgY29kZSBpZiB3cml0dGVuOgotCSAqCi0JICog IGlmIChuZXR3b3JrICYmICghaXN0bmNvbXBvcnQoKSB8fCBjYXJyaWVyID09IENBUl9PRkYpICkK LQkgKi8KLQkJCWJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLQkJCSBwcmlu dGYoIkZhdGFsIGVycm9yIC0gZGlzY29ubmVjdGVkLlxuIik7Ci0JCQkgdHRjbG9zKDEpOwotCQkJ IGJyZWFrOwotCQkgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYg KGluaW50cikgewotICAgICAgICAgICAgICAgICAgICBpZiAoKGljbiA9IGNvbmNoaygpKSA+IDAp IHsgLyogSW50ZXJydXB0IGZyb20ga2V5Ym9hcmQ/ICovCi0gICAgICAgICAgICAgICAgICAgICAg ICBrYmNoYXIgPSBjb25pbmMoMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAx LCJpbnB1dCBpbnRlcnJ1cHRlZCBmcm9tIGtleWJvYXJkIiwiIixpY24pOwotICAgICAgICAgICAg ICAgICAgICAgICAgd2hpbGUgKC0taWNuID4gMCkgY29uaW5jKDApOyAvKiBZZXMsIGFic29yYiBj aGFycy4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBBbmQg ZmFpbC4gKi8KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYnVyc3QgPSBjb25jaGsoKTsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImRvaW5wdXQgYnVyc3QiLCIiLGJ1cnN0 KTsKLSAgICAgICAgICAgIC8qIFByZXZlbnQgb3ZlcmZsb3cgb2YgImNvbmJ1ZiIgYW5kICJzZXNi dWYiICovCi0gICAgICAgICAgICBpZiAoYnVyc3QgPiBNQVhCVVJTVCkKLSAgICAgICAgICAgICAg YnVyc3QgPSBNQVhCVVJTVDsKLQotICAgICAgICAgICAgLyogRGlkIG5vdCBtYXRjaCwgdGltZXIg ZXhjZWVkZWQ/ICovCi0gICAgICAgICAgICB0ID0gZ3RpbWVyKCk7Ci0gICAgICAgICAgICBkZWJ1 ZyhGMTExLCJkb2lucHV0IGd0aW1lciIsImJ1cnN0Iix0KTsKLSAgICAgICAgICAgIGRlYnVnKEYx MDEsImRvaW5wdXQgdGltbyIsIiIsdGltbyk7Ci0gICAgICAgICAgICBpZiAoKHQgPj0gdGltbykg JiYgKHRpbW8gPiAwKSkKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBlbHNlIGlm IChpbnNpbGVuY2UgPiAwICYmICh0IC0gbGFzdGNoYXIpID4gaW5zaWxlbmNlKQotICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImRv aW5wdXQgKGJ1cnN0ID4gMCkiLCJidXJzdCIsYnVyc3QpOwotICAgICAgICB9Ci0jZWxzZSAgLyog Q0tfQlVSU1QgKi8KLSAgICAgIHJlZmlsbDoKLSAgICAgICAgbXlmbHNoKCk7ICAgICAgICAgICAg ICAgICAgICAgICAvKiBGbHVzaCBidWZmZXJlZCBvdXRwdXQgKi8KLSAgICAgICAgLyogRGlkIG5v dCBtYXRjaCwgdGltZXIgZXhjZWVkZWQ/ICovCi0gICAgICAgIHQgPSBndGltZXIoKTsKLSAgICAg ICAgZGVidWcoRjExMSwiZG9pbnB1dCBndGltZXIiLCJubyBidXJzdCIsdCk7Ci0gICAgICAgIGRl YnVnKEYxMDEsImRvaW5wdXQgdGltbyIsIiIsdGltbyk7Ci0gICAgICAgIGlmICgodCA+PSB0aW1v KSAmJiAodGltbyA+IC0xKSkKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZWxzZSBpZiAoaW5z aWxlbmNlID4gMCAmJiAodCAtIGxhc3RjaGFyKSA+IGluc2lsZW5jZSkKLSAgICAgICAgICBicmVh azsKLSNlbmRpZiAvKiBDS19CVVJTVCAqLwotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFN0aWxsIGhhdmUgdGltZSBsZWZ0LCBjb250aW51ZS4gKi8KLSAgeGlucHV0 OgotICAgIG15ZmxzaCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsdXNoIGJ1ZmZl cmVkIG91dHB1dCAqLwotICAgIGlmIChpbnN0YXR1cyA9PSBJTlBfQkYpIHsJCS8qIEJ1ZmZlciBm dWxsIGFuZCAvTk9XQUlUICovCi0JeCA9IDA7CQkJCS8qIE11c3Qgbm90IHN1Y2NlZWQgKi8KLSAg ICB9IGVsc2UgewkJCQkvKiBCdWZmZXIgZnVsbCBhbmQgL05PV0FJVCAqLwotCWlmIChub21hdGNo KSB4ID0gMTsJCS8qIFN1Y2NlZWQgaWYgbm9tYXRjaCBhbmQgdGltZWQgb3V0ICovCi0JaWYgKHgg PiAwICYmICFub21hdGNoKQotCSAgaW5zdGF0dXMgPSAwOwotICAgIH0KLSNpZm5kZWYgTk9MT0NB TAotI2lmZGVmIE9TMgotICAgIHRlcm1faW8gPSB0ZXJtX2lvX3NhdmU7Ci0jZW5kaWYgLyogT1My ICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBJS1NfT1BU SU9OCi0jaWZkZWYgQ0tfQVVUT0RMCi0gICAgaWYgKGlzX3RuICYmIFRFTE9QVF9NRShURUxPUFRf S0VSTUlUKSAmJiBpbmF1dG9kbCkgewotICAgICAgICB0bl9zaWtzKEtFUk1JVF9TVE9QKTsgICAg ICAgICAgIC8qIFNlbmQgS2VybWl0LVNlcnZlciBTdG9wICovCi0gICAgfQotI2VuZGlmIC8qIENL X0FVVE9ETCAqLwotI2VuZGlmIC8qIElLU19PUFRJT04gKi8KLSNlbmRpZiAvKiBDT01NRU5UICov Ci0KLSNpZmRlZiBHRlRJTUVSCi0gICAgZnB0ID0gZ2Z0aW1lcigpOyAgICAgICAgICAgICAgICAg ICAgLyogR2V0IGVsYXBzZWQgdGltZSAqLwotCi0vKiBJZiBhIGxvbmcgaXMgMzIgYml0cywgaXQg d291bGQgdGFrZSBhYm91dCA1MCBkYXlzIGZvciB0aGlzIHRvIG92ZXJmbG93LiAqLwotCi0gICAg aW5ldGltZSA9IChpbnQpKGZwdCAqIChDS0ZMT0FUKTEwMDAuMCk7Ci0jZWxzZQotICAgIGluZXRp bWUgPSAoaW50KShndGltZXIoKSAqIDEwMDApOwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLQotICAg IGlmICh4ID4gMCkKLSAgICAgIG1ha2VzdHIoJmlucG1hdGNoLCZtYXRjaGJ1ZlttYXRjaGluZGV4 XSk7IC8qIFx2KGlubWF0Y2gpICovCi0gICAgcmV0dXJuKHgpOyAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogUmV0dXJuIHRoZSByZXR1cm4gY29kZS4gKi8KLX0KLSNlbmRpZiAvKiBOT1NQTCAq LwotCi0jaWZuZGVmIE5PU1BMCi0vKiBSRUlOUFVUIENvbW1hbmQgKi8KLQotLyoKLSAgTm90ZSwg dGhlIHRpbWVvdXQgcGFyYW1ldGVyIGlzIHJlcXVpcmVkLCBidXQgaWdub3JlZC4gIFN5bnRheCBp cyBjb21wYXRpYmxlCi0gIHdpdGggTVMtRE9TIEtlcm1pdCBleGNlcHQgdGltZW91dCBjYW4ndCBi ZSBvbWl0dGVkLiAgVGhpcyBmdW5jdGlvbiBvbmx5Ci0gIGxvb2tzIGF0IHRoZSBjaGFyYWN0ZXJz IGFscmVhZHkgcmVjZWl2ZWQgYW5kIGRvZXMgbm90IHJlYWQgYW55IG5ldwotICBjaGFyYWN0ZXJz IGZyb20gdGhlIGNvbm5lY3Rpb24uCi0qLwotaW50Ci1kb3JlaW5wKHRpbW8scyxwYXQpIGludCB0 aW1vOyBjaGFyICpzOyBpbnQgcGF0OyB7Ci0gICAgaW50IHgsIHksIGk7Ci0gICAgY2hhciAqeHgs ICp4cCwgKnhxID0gKGNoYXIgKikwOwotICAgIENIQVIgYzsKLQotICAgIGlmICghcykgcyA9ICIi OwotICAgIGRlYnVnKEYxMDEsImRvcmVpbnB1dCBwYXQiLCIiLHBhdCk7Ci0KLSAgICB5ID0gKGlu dClzdHJsZW4ocyk7Ci0gICAgZGVidWcoRjExMSwiZG9yZWlucHV0IHNlYXJjaCIscyx5KTsKLQot ICAgIGlmICh5ID4gaW5idWZzaXplKSB7ICAgICAgICAgICAgICAgIC8qIElmIHNlYXJjaCBzdHJp bmcgbG9uZ2VyIHRoYW4gKi8KLSAgICAgICAgZGVidWcoRjEwMSwiZG9yZWlucHV0IGluYnVmc2l6 ZSIsIiIsaW5idWZzaXplKTsKLSAgICAgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAgICAg ICAvKiBpbnB1dCBidWZmZXIsIGZhaWwuICovCi0gICAgfQotICAgIG1ha2VzdHIoJmlucG1hdGNo LE5VTEwpOwotICAgIGlmICghbWF0Y2hidWYpCi0gICAgICBtYXRjaGJ1ZiA9IG1hbGxvYyhNQVRD SEJVRlNJWisxKTsKLSAgICBtYXRjaGluZGV4ID0gMDsKLQotICAgIHggPSAwOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBjb2RlLCBhc3N1bWUgZmFpbHVyZSAqLwotICAg IGkgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0cmluZyBwYXR0ZXJuIG1h dGNoIHBvc2l0aW9uICovCi0KLSAgICBpZiAoIWlucGNhc1tjbWRsdmxdKSB7ICAgICAgICAgICAg ICAvKiBJTlBVVCBDQVNFID0gSUdOT1JFPyAgKi8KLSAgICAgICAgeHAgPSBtYWxsb2MoeSsyKTsg ICAgICAgICAgICAgICAvKiBNYWtlIGEgc2VwYXJhdGUgY29weSBvZiB0aGUgKi8KLSAgICAgICAg aWYgKCF4cCkgeyAgICAgICAgICAgICAgICAgICAgICAvKiBzZWFyY2ggc3RyaW5nLiAqLwotICAg ICAgICAgICAgcHJpbnRmKCI/bWFsbG9jIGVycm9yIDZcbiIpOwotICAgICAgICAgICAgcmV0dXJu KHgpOwotICAgICAgICB9IGVsc2UgeHEgPSB4cDsgICAgICAgICAgICAgICAgIC8qIEtlZXAgcG9p bnRlciB0byBiZWdpbm5pbmcuICovCi0gICAgICAgIHdoaWxlICgqcykgeyAgICAgICAgICAgICAg ICAgICAgLyogWWVzLCBjb252ZXJ0IHRvIGxvd2VyY2FzZSAqLwotICAgICAgICAgICAgKnhwID0g KnM7Ci0gICAgICAgICAgICBpZiAoaXN1cHBlcigqeHApKSAqeHAgPSAoY2hhcikgdG9sb3dlcigq eHApOwotICAgICAgICAgICAgeHArKzsgcysrOwotICAgICAgICB9Ci0gICAgICAgICp4cCA9IE5V TDsgICAgICAgICAgICAgICAgICAgICAgLyogVGVybWluYXRlIGl0ISAqLwotICAgICAgICBzID0g eHE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1vdmUgc2VhcmNoIHBvaW50ZXIgdG8gaXQu ICovCi0gICAgfQotICAgIHh4ID0gKmlucGJwID8gaW5wYnAgOiBpbnBidWY7ICAgICAgIC8qIEN1 cnJlbnQgSU5QVVQgYnVmZmVyIHBvaW50ZXIgKi8KLSAgICBkbyB7Ci0gICAgICAgIGMgPSAqeHgr KzsgICAgICAgICAgICAgICAgICAgICAgLyogR2V0IG5leHQgY2hhcmFjdGVyICovCi0gICAgICAg IGlmICghYykgYnJlYWs7Ci0gICAgICAgIGlmICh4eCA+PSBpbnBidWYgKyBpbmJ1ZnNpemUpICAg LyogV3JhcCBhcm91bmQgaWYgbmVjZXNzYXJ5ICovCi0gICAgICAgICAgeHggPSBpbnBidWY7Ci0g ICAgICAgIGlmICghaW5wY2FzW2NtZGx2bF0pIHsgICAgICAgICAgLyogSWdub3JlIGFscGhhYmV0 aWMgY2FzZT8gKi8KLSAgICAgICAgICAgIGlmIChpc3VwcGVyKGMpKSBjID0gKENIQVIpIHRvbG93 ZXIoYyk7IC8qIFllcyAqLwotICAgICAgICB9Ci0gICAgICAgIGlmIChwYXQpIHsKLSAgICAgICAg ICAgIGludCBqOwotICAgICAgICAgICAgaWYgKG1hdGNoYnVmKSB7Ci0gICAgICAgICAgICAgICAg aWYgKG1hdGNoaW5kZXggPCBNQVRDSEJVRlNJWikgewotICAgICAgICAgICAgICAgICAgICBtYXRj aGJ1ZlttYXRjaGluZGV4KytdID0gYzsKLSAgICAgICAgICAgICAgICAgICAgbWF0Y2hidWZbbWF0 Y2hpbmRleF0gPSBOVUw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZvciAo aiA9IDA7IGogPCBtYXRjaGluZGV4OyBqKyspIHsgLyogR3Jvc3MgYnV0IGVmZmVjdGl2ZSAqLwot ICAgICAgICAgICAgICAgICAgICBpZiAoY2ttYXRjaChzLCZtYXRjaGJ1ZltqXSwxLDEpKSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJHT1QgSVQiLCIiLGopOwotICAgICAg ICAgICAgICAgICAgICAgICAgbWF0Y2hpbmRleCA9IGo7Ci0gICAgICAgICAgICAgICAgICAgICAg ICB4ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg KHggPiAwKQotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg ICAgICB9Ci0gICAgICAgIGRlYnVnKEYwMDAsImRvcmVpbnAgY2hhciIsIiIsYyk7Ci0gICAgICAg IGRlYnVnKEYwMDAsImNvbXBhcmUgY2hhciIsIiIsKENIQVIpIHNbaV0pOwotICAgICAgICBpZiAo KChjaGFyKSBjKSA9PSAoKGNoYXIpIHNbaV0pKSB7IC8qIENoZWNrIGZvciBtYXRjaCAqLwotICAg ICAgICAgICAgaSsrOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdvdCBvbmUsIGdvIHRvIG5l eHQgY2hhcmFjdGVyICovCi0gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAg LyogRG9uJ3QgaGF2ZSBhIG1hdGNoICovCi0gICAgICAgICAgICBpbnQgajsKLSAgICAgICAgICAg IGZvciAoaiA9IGk7IGkgPiAwOyApIHsgICAgICAvKiBbanJzXSBzZWFyY2ggYmFja3dhcmRzIGZv ciBpdCAgKi8KLSAgICAgICAgICAgICAgICBpLS07Ci0gICAgICAgICAgICAgICAgaWYgKCgoY2hh cikgYykgPT0gKChjaGFyKSBzW2ldKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cm5j bXAocywmc1tqLWldLGkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBbanJzXSBvciByZXR1cm4gdG8gemVybyBmcm9tIC0xICovCi0gICAgICAgIGlm IChzW2ldID09ICdcMCcpIHsgICAgICAgICAgICAgLyogTWF0Y2hlZCBhbGwgdGhlIHdheSB0byBl bmQ/ICovCi0gICAgICAgICAgICBja3N0cm5jcHkobWF0Y2hidWYscyxNQVRDSEJVRlNJWik7Ci0g ICAgICAgICAgICBtYXRjaGluZGV4ID0gMDsKLSAgICAgICAgICAgIHggPSAxOyAgICAgICAgICAg ICAgICAgICAgICAvKiBZZXMsICovCi0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAg ICAgICAgLyogZG9uZS4gKi8KLSAgICAgICAgfQotICAgIH0gd2hpbGUgKHh4ICE9IGlucGJwICYm IHggPCAxKTsgICAgIC8qIFVudGlsIGJhY2sgd2hlcmUgd2Ugc3RhcnRlZC4gKi8KLQotICAgIGlm ICghaW5wY2FzW2NtZGx2bF0pIGlmICh4cSkgZnJlZSh4cSk7IC8qIEZyZWUgdGhpcyBpZiBpdCB3 YXMgbWFsbG9jJ2QuICovCi0gICAgbWFrZXN0cigmaW5wbWF0Y2gsJm1hdGNoYnVmW21hdGNoaW5k ZXhdKTsgLyogXHYoaW5tYXRjaCkgKi8KLSAgICByZXR1cm4oeCk7ICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBSZXR1cm4gc2VhcmNoIHJlc3VsdC4gKi8KLX0KLQotLyogIFggWCBTIFQgUiBJ IE4gRyAgLS0gIEludGVycHJldCBzdHJpbmdzIGNvbnRhaW5pbmcgYmFja3NsYXNoIGVzY2FwZXMg ICovCi0vKiAgWiBaIFMgVCBSIEkgTiBHICAtLSAgKG5ldyBuYW1lLi4uKSAgKi8KLS8qCi0gQ29w aWVzIHJlc3VsdCB0byBuZXcgc3RyaW5nLgotICBzdHJpcHMgZW5jbG9zaW5nIGJyYWNlcyBvciBk b3VibGVxdW90ZXMuCi0gIGludGVycHJldHMgYmFja3NsYXNoIGVzY2FwZXMuCi0gIHJldHVybnMg MCBvbiBzdWNjZXNzLCBub256ZXJvIG9uIGZhaWx1cmUuCi0gIHRyaWVzIHRvIGJlIGNvbXBhdGli bGUgd2l0aCBNUy1ET1MgS2VybWl0LgotCi0gU3ludGF4IG9mIGlucHV0IHN0cmluZzoKLSAgc3Ry aW5nID0gY2hhcnMgfCAiY2hhcnMiIHwge2NoYXJzfQotICBjaGFycyA9IChjKmUqKSoKLSAgd2hl cmUgYyA9IGFueSBwcmludGFibGUgY2hhcmFjdGVyLCBhc2NpaSAzMi0xMjYKLSAgYW5kIGUgPSBh IGJhY2tzbGFzaCBlc2NhcGUKLSAgYW5kICogbWVhbnMgMCBvciBtb3JlIHJlcGV0aXRpb25zIG9m IHByZWNlZGluZyBxdWFudGl0eQotICBiYWNrc2xhc2ggZXNjYXBlID0gXG9wZXJhbmQKLSAgb3Bl cmFuZCA9IHtudW1iZXJ9IHwgbnVtYmVyIHwgZm5hbWUob3BlcmFuZCkgfCB2KG5hbWUpIHwgJChu YW1lKSB8IG0obmFtZSkKLSAgbnVtYmVyID0gW3JdbltuW25dXV0sIGkuZS4gYW4gb3B0aW9uYWwg cmFkaXggY29kZSBmb2xsb3dlZCBieSAxLTMgZGlnaXRzCi0gIHJhZGl4IGNvZGUgaXMgb08gKG9j dGFsKSwgeFggKGhleCksIGREIG9yIG5vbmUgKGRlY2ltYWwpIChzZWUgeHhlc2MoKSkuCi0qLwot Ci0jaWZuZGVmIE5PRlJJTExTCi1pbnQKLXl5c3RyaW5nKHMsczIpIGNoYXIgKnM7IGNoYXIgKipz MjsgeyAgICAvKiBSZXZlcnNlIGEgc3RyaW5nICovCi0gICAgaW50IHg7Ci0gICAgc3RhdGljIGNo YXIgKm5ldzsKLSAgICBuZXcgPSAqczI7Ci0gICAgaWYgKCFzIHx8ICFuZXcpIHJldHVybigtMSk7 ICAgICAgICAgLyogV2F0Y2ggb3V0IGZvciBudWxsIHBvaW50ZXJzLiAqLwotICAgIGlmICgoeCA9 IChpbnQpc3RybGVuKHMpKSA9PSAwKSB7ICAgIC8qIFJlY3Vyc2lvbiBkb25lLiAqLwotICAgICAg ICAqbmV3ID0gJ1wwJzsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSAgICB4LS07ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2UsIGNhbGwgc2VsZiAqLwotICAg ICpuZXcrKyA9IHNbeF07ICAgICAgICAgICAgICAgICAgICAgIC8qIHRvIHJldmVyc2UgcmVzdCBv ZiBzdHJpbmcuICovCi0gICAgc1t4XSA9IDA7Ci0gICAgcmV0dXJuKHl5c3RyaW5nKHMsJm5ldykp OwotfQotI2VuZGlmIC8qIE5PRlJJTExTICovCi0KLXN0YXRpYyBjaGFyIGlwYWJ1ZlsxNl0gPSB7 IE5VTCB9OyAgICAgICAvKiBJUCBhZGRyZXNzIGJ1ZmZlciAqLwotCi1zdGF0aWMgY2hhciAqCi1n ZXRpcChzKSBjaGFyICpzOyB7Ci0gICAgY2hhciBjPU5VTDsgICAgICAgICAgICAgICAgICAgICAg ICAgLyogV29ya2Vycy4uLiAqLwotICAgIGludCBpPTAsIHA9MCwgZD0wOwotICAgIGludCBzdGF0 ZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXRlIG9mIDItc3RhdGUgRlNBICovCi0K LSAgICB3aGlsZSAoKGMgPSAqcysrKSkgewotICAgICAgICBzd2l0Y2goc3RhdGUpIHsKLSAgICAg ICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAgICAvKiBGaW5kIGZpcnN0IGRpZ2l0ICov Ci0gICAgICAgICAgICBpID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogT3V0cHV0IGJ1ZmZl ciBpbmRleCAqLwotICAgICAgICAgICAgaXBhYnVmW2ldID0gTlVMOyAgICAgICAgICAgIC8qIElu aXRpYWxpemUgb3V0cHV0IGJ1ZmZlciAqLwotICAgICAgICAgICAgcCA9IDA7ICAgICAgICAgICAg ICAgICAgICAgIC8qIFBlcmlvZCBjb3VudGVyICovCi0gICAgICAgICAgICBkID0gMDsgICAgICAg ICAgICAgICAgICAgICAgLyogRGlnaXQgY291bnRlciAqLwotICAgICAgICAgICAgaWYgKGlzZGln aXQoYykpIHsgICAgICAgICAgIC8qIEhhdmUgZmlyc3QgZGlnaXQgKi8KLSAgICAgICAgICAgICAg ICBkID0gMTsgICAgICAgICAgICAgICAgICAvKiBDb3VudCBpdCAqLwotICAgICAgICAgICAgICAg IGlwYWJ1ZltpKytdID0gYzsgICAgICAgIC8qIENvcHkgaXQgKi8KLSAgICAgICAgICAgICAgICBz dGF0ZSA9IDE7ICAgICAgICAgICAgICAvKiBDaGFuZ2Ugc3RhdGUgKi8KLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAg ICAgICAgLyogSW4gbnVtZXJpYyBmaWVsZCAqLwotICAgICAgICAgICAgaWYgKGlzZGlnaXQoYykp IHsgICAgICAgICAgIC8qIEhhdmUgZGlnaXQgKi8KLSAgICAgICAgICAgICAgICBpZiAoKytkID4g MykgICAgICAgICAgICAvKiBUb28gbWFueSAqLwotICAgICAgICAgICAgICAgICAgc3RhdGUgPSAw OyAgICAgICAgICAgIC8qIFN0YXJ0IG92ZXIgKi8KLSAgICAgICAgICAgICAgICBlbHNlICAgICAg ICAgICAgICAgICAgICAvKiBOb3QgdG9vIG1hbnkgKi8KLSAgICAgICAgICAgICAgICAgIGlwYWJ1 ZltpKytdID0gYzsgICAgICAvKiBLZWVwIGl0ICovCi0gICAgICAgICAgICB9IGVsc2UgaWYgKGMg PT0gJy4nICYmIHAgPCAzKSB7IC8qIEhhdmUgYSBwZXJpb2QgKi8KLSAgICAgICAgICAgICAgICBw Kys7ICAgICAgICAgICAgICAgICAgICAvKiBDb3VudCBpdCAqLwotICAgICAgICAgICAgICAgIGlm IChkID09IDApICAgICAgICAgICAgIC8qIE5vdCBwcmVjZWRlZCBieSBhIGRpZ2l0ICovCi0gICAg ICAgICAgICAgICAgICBzdGF0ZSA9IDA7ICAgICAgICAgICAgLyogU3RhcnQgb3ZlciAqLwotICAg ICAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgIC8qIE9LICovCi0gICAgICAgICAg ICAgICAgICBpcGFidWZbaSsrXSA9IGM7ICAgICAgLyogS2VlcCBpdCAqLwotICAgICAgICAgICAg ICAgIGQgPSAwOyAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IGRpZ2l0IGNvdW50ZXIgKi8KLSAg ICAgICAgICAgIH0gZWxzZSBpZiAocCA9PSAzICYmIGQgPiAwKSB7IC8qIE5vdCBwYXJ0IG9mIGFk ZHJlc3MgKi8KLSAgICAgICAgICAgICAgICBpcGFidWZbaV0gPSBOVUw7ICAgICAgICAvKiBJZiB3 ZSBoYXZlIGZ1bGwgSVAgYWRkcmVzcyAqLwotICAgICAgICAgICAgICAgIHJldHVybigoY2hhciAq KWlwYWJ1Zik7IC8qIFJldHVybiBpdCAqLwotICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAg ICAgICAgICAgIC8qIE90aGVyd2lzZSAqLwotICAgICAgICAgICAgICAgIHN0YXRlID0gMDsgICAg ICAgICAgICAgIC8qIFN0YXJ0IG92ZXIgKi8KLSAgICAgICAgICAgICAgICBpcGFidWZbMF0gPSBO VUw7ICAgICAgICAvKiAoaW4gY2FzZSBubyBtb3JlIGNoYXJzIGxlZnQpICovCi0gICAgICAgICAg ICB9Ci0gICAgICAgIH0KLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBGYWxsIHRocnUgYXQgZW5kIG9mIHN0cmluZyAqLwotICAgIGlwYWJ1ZltpXSA9IE5VTDsgICAg ICAgICAgICAgICAgICAgIC8qIE1heWJlIHdlIGhhdmUgb25lICovCi0gICAgcmV0dXJuKChwID09 IDMgJiYgZCA+IDApID8gKGNoYXIgKilpcGFidWYgOiAiIik7Ci19Ci0jZW5kaWYgLyogTk9TUEwg Ki8KLQotLyogRGF0ZSBSb3V0aW5lcyAqLwotCi0vKiBaIEogRCBBIFQgRSAgLS0gIENvbnZlcnQg eXl5eW1tZGQgZGF0ZSB0byBEYXkgb2YgWWVhciAqLwotCi1zdGF0aWMgaW50IGpkYXlzWzEyXSA9 IHsgIDAsMzEsNTksOTAsMTIwLDE1MSwxODEsMjEyLDI0MywyNzMsMzA0LDMzNCB9Owotc3RhdGlj IGludCBsZGF5c1sxMl0gPSB7ICAwLDMxLDYwLDkxLDEyMSwxNTIsMTgyLDIxMywyNDQsMjc0LDMw NSwzMzUgfTsKLXN0YXRpYyBjaGFyIHpqZGJ1ZlsxMl0gPSB7IE5VTCwgTlVMIH07Ci0vKgotICBE ZWluZGUsIG5lIGluIHBvc3RlcnVtIGEgWElJIGthbGVuZGFzIGFwcmlsaXMgYWVxdWlub2N0aXVt IHJlY2VkYXQsCi0gIHN0YXR1aW11cyBiaXNzZXh0dW0gcXVhcnRvIHF1b3F1ZSBhbm5vICh1dGkg bW9zIGVzdCkgY29udGludWFyaSBkZWJlcmUsCi0gIHByYWV0ZXJxdWFtIGluIGNlbnRlc2ltaXMg YW5uaXM7IHF1aSwgcXVhbXZpcyBiaXNzZXh0aWxlcyBhbnRlYSBzZW1wZXIKLSAgZnVlcmludCwg cXVhbGVtIGV0aWFtIGVzc2Ugdm9sdW11cyBhbm51bSBNREMsIHBvc3QgZXVtIHRhbWVuIHF1aSBk ZWluY2VwcwotICBjb25zZXF1ZW50dXIgY2VudGVzaW1pIG5vbiBvbW5lcyBiaXNzZXh0aWxlcyBz aW50LCBzZWQgaW4gcXVhZHJpbmdlbnRpcwotICBxdWlidXNxdWUgYW5uaXMgcHJpbWkgcXVpcXVl IHRyZXMgY2VudGVzaW1pIHNpbmUgYmlzc2V4dG8gdHJhbnNpZ2FudHVyLAotICBxdWFydHVzIHZl cm8gcXVpc3F1ZSBjZW50ZXNpbXVzIGJpc3NleHRpbGlzIHNpdCwgaXRhIHV0IGFubnVzIE1EQ0Ms IE1EQ0NDLAotICBNRENDQ0MgYmlzc2V4dGlsZXMgbm9uIHNpbnQuIEFubm8gdmVybyBNTSwgbW9y ZSBjb25zdWV0byBkaWVzIGJpc3NleHR1cwotICBpbnRlcmNhbGV0dXIsIGZlYnJ1YXJpbyBkaWVz IFhYSVggY29udGluZW50ZSwgaWRlbXF1ZSBvcmRvIGludGVybWl0dGVuZGkKLSAgaW50ZXJjYWxh bmRpcXVlIGJpc3NleHR1bSBkaWVtIGluIHF1YWRyaW5nZW50aXMgcXVpYnVzcXVlIGFubmlzIHBl cnBldHVvCi0gIGNvbnNlcnZldHVyLiAgLSBHcmVnb3JpdXMgWElJSSwgQW5ubyBEb21pbmkgTURM WFhYSUkuCi0qLwotY2hhciAqCi16amRhdGUoZGF0ZSkgY2hhciAqIGRhdGU7IHsgICAgICAgICAg ICAgLyogZGF0ZSA9IHl5eXltbWRkICovCi0gICAgY2hhciB5ZWFyWzVdOwotICAgIGNoYXIgbW9u dGhbM107Ci0gICAgY2hhciBkYXlbM107Ci0gICAgaW50IGQsIG0sIHgsIHk7Ci0gICAgaW50IGxl YXBkYXksIGo7Ci0gICAgY2hhciAqIHRpbWUgPSBOVUxMOwotCi0gICAgaWYgKCFkYXRlKSBkYXRl ID0gIiI7ICAgICAgICAgICAgICAgLyogVmFsaWRhdGUgYXJnICovCi0gICAgeCA9IHN0cmxlbihk YXRlKTsKLSAgICBpZiAoeCA8IDEpIHJldHVybigiMCIpOwotICAgIGlmICh4IDwgOCkgcmV0dXJu KCItMSIpOwotICAgIGZvciAoeCA9IDA7IHggPCA4OyB4KyspCi0gICAgICBpZiAoIWlzZGlnaXQo ZGF0ZVt4XSkpCi0gICAgICAgIHJldHVybigiLTEiKTsKLQotICAgIGlmIChkYXRlWzhdKSBpZiAo ZGF0ZVs5XSkKLSAgICAgIHRpbWUgPSBkYXRlICsgOTsKLQotICAgIHllYXJbMF0gPSBkYXRlWzBd OyAgICAgICAgICAgICAgICAgIC8qIElzb2xhdGUgeWVhciAqLwotICAgIHllYXJbMV0gPSBkYXRl WzFdOwotICAgIHllYXJbMl0gPSBkYXRlWzJdOwotICAgIHllYXJbM10gPSBkYXRlWzNdOwotICAg IHllYXJbNF0gPSAnXDAnOwotCi0gICAgbW9udGhbMF0gPSBkYXRlWzRdOyAgICAgICAgICAgICAg ICAgLyogTW9udGggKi8KLSAgICBtb250aFsxXSA9IGRhdGVbNV07Ci0gICAgbW9udGhbMl0gPSAn XDAnOzsKLQotICAgIGRheVswXSA9IGRhdGVbNl07ICAgICAgICAgICAgICAgICAgIC8qIEFuZCBk YXkgKi8KLSAgICBkYXlbMV0gPSBkYXRlWzddOwotICAgIGRheVsyXSA9ICdcMCc7Ci0KLSAgICBs ZWFwZGF5ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBBc3N1bWUgbm8gbGVhcCBkYXkg Ki8KLSAgICB5ID0gYXRvaSh5ZWFyKTsKLSAgICBtID0gYXRvaShtb250aCk7Ci0gICAgZCA9IGF0 b2koZGF5KTsKLSAgICBpZiAobSA+IDIpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBM ZWFwIGRheSBiZWZvcmUgTWFyY2ggKi8KLSAgICAgICAgaWYgKHkgJSA0ID09IDApIHsgICAgICAg ICAgICAgICAvKiBJZiB5ZWFyIGlzIGRpdmlzaWJsZSBieSA0ICovCi0gICAgICAgICAgICBsZWFw ZGF5ID0gMTsgICAgICAgICAgICAgICAgLyogSXQncyBhIExlYXAgeWVhciAqLwotICAgICAgICAg ICAgaWYgKHkgJSAxMDAgPT0gMCkgeyAgICAgICAgIC8qIEV4Y2VwdCBpZiBkaXZpc2libGUgYnkg MTAwICovCi0gICAgICAgICAgICAgICAgaWYgKHkgJSA0MDAgIT0gMCkgICAgICAgLyogYnV0IG5v dCBieSA0MDAgKi8KLSAgICAgICAgICAgICAgICAgIGxlYXBkYXkgPSAwOwotICAgICAgICAgICAg fQotICAgICAgICB9Ci0gICAgfQotICAgIGogPSBqZGF5c1ttIC0gMV0gKyBkICsgbGVhcGRheTsg ICAgIC8qIERheSBvZiB5ZWFyICovCi0gICAgaWYgKHRpbWUpCi0gICAgICBzcHJpbnRmKHpqZGJ1 ZiwiJTA0ZCUwM2QgJXMiLHksaix0aW1lKTsgLyogU0FGRSAqLwotICAgIGVsc2UKLSAgICAgIHNw cmludGYoempkYnVmLCIlMDRkJTAzZCIseSxqKTsgICAvKiBTQUZFICovCi0gICAgcmV0dXJuKChj aGFyICopempkYnVmKTsKLX0KLQotc3RhdGljIGNoYXIganpkYnVmWzMyXTsKLQotLyogSiBaIEQg QSBUIEUgIC0tICBDb252ZXJ0IERheSBvZiBZZWFyIHRvIHl5eXlkZG1tIGRhdGUgKi8KLQotY2hh ciAqCi1qemRhdGUoZGF0ZSkgY2hhciAqIGRhdGU7IHsgICAgICAgICAgICAgLyogZGF0ZSA9IHl5 eXlkZGQgKi8KLSAgICBjaGFyIHllYXJbNV07ICAgICAgICAgICAgICAgICAgICAgICAvKiB3aXRo IG9wdGlvbmFsIHRpbWUgKi8KLSAgICBjaGFyIGRheVs0XTsKLSAgICBjaGFyICogdGltZSA9IE5V TEwsICogcDsKLSAgICBpbnQgZCwgbSwgeCwgeTsKLSAgICBpbnQgbGVhcGRheSwgajsKLSAgICBp bnQgKiB6ejsKLQotICAgIGlmICghZGF0ZSkgZGF0ZSA9ICIiOyAgICAgICAgICAgICAgIC8qIFZh bGlkYXRlIGFyZyAqLwotICAgIHggPSBzdHJsZW4oZGF0ZSk7Ci0KLSAgICBkZWJ1ZyhGMTExLCJq emRhdGUgbGVuIixkYXRlLHgpOwotCi0gICAgaWYgKHggPCAxKSByZXR1cm4oIjAiKTsKLSAgICBp ZiAoeCA8IDcpIHJldHVybigiLTEiKTsKLSAgICBpZiAoeCA+IDgpIHRpbWUgPSBkYXRlICsgODsK LQotICAgIGZvciAoeCA9IDA7IHggPCA3OyB4KyspCi0gICAgICBpZiAoIWlzZGlnaXQoZGF0ZVt4 XSkpCi0gICAgICAgIHJldHVybigiLTEiKTsKLQotICAgIHllYXJbMF0gPSBkYXRlWzBdOyAgICAg ICAgICAgICAgICAgIC8qIElzb2xhdGUgeWVhciAqLwotICAgIHllYXJbMV0gPSBkYXRlWzFdOwot ICAgIHllYXJbMl0gPSBkYXRlWzJdOwotICAgIHllYXJbM10gPSBkYXRlWzNdOwotICAgIHllYXJb NF0gPSAnXDAnOwotCi0gICAgZGVidWcoRjExMCwianpkYXRlIHllYXIiLHllYXIsMCk7Ci0KLSAg ICBkYXlbMF0gPSBkYXRlWzRdOyAgICAgICAgICAgICAgICAgICAvKiBBbmQgZGF5ICovCi0gICAg ZGF5WzFdID0gZGF0ZVs1XTsKLSAgICBkYXlbMl0gPSBkYXRlWzZdOwotICAgIGRheVszXSA9ICdc MCc7Ci0KLSAgICBkZWJ1ZyhGMTEwLCJqemRhdGUgZGF5IixkYXksMCk7Ci0KLSAgICBqID0gYXRv aShkYXkpOwotICAgIGlmIChqID4gMzY2KQotICAgICAgcmV0dXJuKCItMSIpOwotCi0gICAgbGVh cGRheSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQXNzdW1lIG5vIGxlYXAgZGF5ICov Ci0gICAgeSA9IGF0b2koeWVhcik7Ci0gICAgaWYgKHkgJSA0ID09IDApIHsgICAgICAgICAgICAg ICAgICAgLyogSWYgeWVhciBpcyBkaXZpc2libGUgYnkgNCAqLwotICAgICAgICBsZWFwZGF5ID0g MTsgICAgICAgICAgICAgICAgICAgIC8qIEl0J3MgYSBMZWFwIHllYXIgKi8KLSAgICAgICAgaWYg KHkgJSAxMDAgPT0gMCkgeyAgICAgICAgICAgICAvKiBFeGNlcHQgaWYgZGl2aXNpYmxlIGJ5IDEw MCAqLwotICAgICAgICAgICAgaWYgKHkgJSA0MDAgIT0gMCkgICAgICAgICAgIC8qIGJ1dCBub3Qg YnkgNDAwICovCi0gICAgICAgICAgICAgIGxlYXBkYXkgPSAwOwotICAgICAgICB9Ci0gICAgfQot ICAgIGRlYnVnKEYxMDEsImp6ZGF0ZSBsZWFwZGF5IiwiIixsZWFwZGF5KTsKLSAgICB6eiA9IGxl YXBkYXkgPyBsZGF5cyA6IGpkYXlzOwotCi0gICAgZm9yICh4ID0gMDsgeCA8IDExOyB4KyspCi0g ICAgICBpZiAoaiA+IHp6W3hdICYmIGogPD0genpbeCsxXSkKLSAgICAgICAgYnJlYWs7Ci0gICAg bSA9IHggKyAxOwotCi0gICAgZGVidWcoRjEwMSwianpkYXRlIG0iLCIiLG0pOwotCi0gICAgZCA9 IGogLSB6elt4XTsKLQotICAgIGRlYnVnKEYxMDEsImp6ZGF0ZSBkIiwiIixkKTsKLQotICAgIGlm ICh0aW1lKQotICAgICAgc3ByaW50ZihqemRidWYsIiUwNGQlMDJkJTAyZCAlcyIseSxtLGQsdGlt ZSk7IC8qIFNBRkUgKi8KLSAgICBlbHNlCi0gICAgICBzcHJpbnRmKGp6ZGJ1ZiwiJTA0ZCUwMmQl MDJkIix5LG0sZCk7IC8qIFNBRkUgKi8KLQotICAgIGRlYnVnKEYxMDEsImp6ZGF0ZSBqemRidWYi LGp6ZGJ1ZiwwKTsKLQotICAgIHAgPSBja2N2dGRhdGUoKGNoYXIgKilqemRidWYsIDApOyAgIC8q IENvbnZlcnQgdG8gc3RhbmRhcmQgZm9ybSAqLwotICAgIGNrc3RybmNweShqemRidWYscCwzMik7 Ci0gICAgaWYgKCF0aW1lKSBqemRidWZbOF0gPSBOVUw7ICAgICAgICAgLyogUmVtb3ZlIHRpbWUg aWYgbm90IHdhbnRlZCAqLwotICAgIHJldHVybigoY2hhciAqKWp6ZGJ1Zik7Ci19Ci0KLS8qIE0g SiBEICAtLSAgTW9kaWZpZWQgSnVsaWFuIERhdGUgKi8KLS8qCi0gIENhbGwgd2l0aDoKLSAgICBT dGFuZGFyZC1mb3JtYXQgZGF0ZS10aW1lIHN0cmluZzogeXl5eW1tZGRbIGhoOm1tOnNzXS4KLSAg ICBUaGUgdGltZSwgaWYgYW55LCBpcyBpZ25vcmVkLgotCi0gIFJldHVybnM6Ci0gICAgLTFMIG9u IGVycm9yLCBvdGhlcndpc2U6Ci0gICAgVGhlIG51bWJlciBvZiBkYXlzIHNpbmNlIDE3IE5vdiAx ODU4IGFzIGEgd2hvbGUgbnVtYmVyOgotICAgIDE2IE5vdiAxODU4ID0gLTEsIDE3IE5vdiAxODU4 ID0gMCwgMTggTm92IDE4NTggPSAxLCAxOSBOb3YgMTg1OCA9IDIsIC4uLgotCi0gIFRoZSBNb2Rp ZmllZCBKdWxpYW4gRGF0ZSBpcyBkZWZpbmVkIGJ5IHRoZSBJbnRlcm5hdGlvbmFsIEFzdHJvbm9t aWNhbAotICBVbmlvbiBhcyB0aGUgdHJ1ZSBKdWxpYW4gZGF0ZSBtaW51cyAyNDAwMDAwLjUgZGF5 cy4gIFRoZSB0cnVlIEp1bGlhbgotICBkYXRlIGlzIHRoZSBudW1iZXIgZGF5cyBzaW5jZSBzaW5j ZSBub29uIG9mIDEgSmFudWFyeSA0NzEzIEJDRSBvZiB0aGUKLSAgSnVsaWFuIHByb2xlcHRpYyBj YWxlbmRhci4gIENvbnZlcnNpb25zIGJldHdlZW4gY2FsZW5kYXIgZGF0ZXMgYW5kCi0gIEp1bGlh biBkYXRlcywgaG93ZXZlciwgYXNzdW1lIEdyZWdvcmlhbiBkYXRpbmcuCi0qLwotbG9uZwotbWpk KGRhdGUpIGNoYXIgKiBkYXRlOyB7Ci0gICAgY2hhciB5ZWFyWzVdOwotICAgIGNoYXIgbW9udGhb M107Ci0gICAgY2hhciBkYXlbM107Ci0gICAgaW50IHgsIGEsIGQsIG0sIHk7Ci0gICAgbG9uZyB6 OwotCi0gICAgaWYgKCFkYXRlKSBkYXRlID0gIiI7ICAgICAgICAgICAgICAgLyogVmFsaWRhdGUg YXJnICovCi0gICAgeCA9IHN0cmxlbihkYXRlKTsKLSAgICBpZiAoeCA8IDEpIHJldHVybigwTCk7 Ci0gICAgaWYgKHggPCA4KSByZXR1cm4oLTFMKTsKLSAgICBmb3IgKHggPSAwOyB4IDwgODsgeCsr KQotICAgICAgaWYgKCFpc2RpZ2l0KGRhdGVbeF0pKQotICAgICAgICByZXR1cm4oLTFMKTsKLQot ICAgIHllYXJbMF0gPSBkYXRlWzBdOyAgICAgICAgICAgICAgICAgIC8qIElzb2xhdGUgeWVhciAq LwotICAgIHllYXJbMV0gPSBkYXRlWzFdOwotICAgIHllYXJbMl0gPSBkYXRlWzJdOwotICAgIHll YXJbM10gPSBkYXRlWzNdOwotICAgIHllYXJbNF0gPSAnXDAnOwotCi0gICAgbW9udGhbMF0gPSBk YXRlWzRdOyAgICAgICAgICAgICAgICAgLyogTW9udGggKi8KLSAgICBtb250aFsxXSA9IGRhdGVb NV07Ci0gICAgbW9udGhbMl0gPSAnXDAnOzsKLSAgICBtID0gYXRvaShtb250aCk7Ci0KLSAgICBk YXlbMF0gPSBkYXRlWzZdOyAgICAgICAgICAgICAgICAgICAvKiBBbmQgZGF5ICovCi0gICAgZGF5 WzFdID0gZGF0ZVs3XTsKLSAgICBkYXlbMl0gPSAnXDAnOwotICAgIGQgPSBhdG9pKGRheSk7Ci0K LSAgICBhID0gKDE0LW0pLzEyOyAgICAgICAgICAgICAgICAgICAgICAvKiBDYWxjdWxhdGUgdHJ1 ZSBKdWxpYW4gZGF0ZSAqLwotICAgIHkgPSBhdG9pKHllYXIpICsgNDgwMCAtIGE7Ci0gICAgbSA9 IG0gKyAxMiAqIGEgLSAzOwotICAgIHogPSBkICsgKGxvbmcpKDMwNiptKzUpLzEwICsgKGxvbmcp KHkqMzY1KSArIHkvNCAtIHkvMTAwICsgeS80MDAgLSAzMjA0NUw7Ci0KLSAgICB6IC09IDI0MDAw MDFMOyAgICAgICAgICAgICAgICAgICAgICAvKiBDb252ZXJ0IEpEIHRvIE1KRCAqLwotCi0gICAg cmV0dXJuKHopOwotfQotCi1zdGF0aWMgY2hhciBtamQyZGJ1ZlszMl07Ci0KLS8qICBNIEogRCAy IEQgQSBUIEUgIC0tICBDb252ZXJ0cyBNSkQgdG8geXl5eW1tZGQgICovCi0KLWNoYXIgKgotI2lm ZGVmIENLX0FOU0lDCi1tamQyZGF0ZShsb25nIG1qZCkKLSNlbHNlCi1tamQyZGF0ZShtamQpIGxv bmcgbWpkOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBtamQyZGF0ZSAqLyB7Ci0gICAgbG9u ZyBqZCwgbCwgbjsKLSAgICBpbnQgZCwgbSwgeTsKLSAgICBqZCA9IChsb25nKShtamQgKyAyNDAw MDAxTCk7Ci0gICAgbCA9IGpkICsgNjg1Njk7Ci0gICAgbiA9IDQgKiBsIC8gMTQ2MDk3TDsKLSAg ICBsID0gbCAtICgxNDYwOTcgKiBuICsgMykgLyA0OwotICAgIHkgPSA0MDAwICogKGwgKyAxKSAv IDE0NjEwMDFMOwotICAgIGwgPSBsIC0gMTQ2MSAqIHkgLyA0ICsgMzE7Ci0gICAgbSA9IDgwICog bCAvIDI0NDc7Ci0gICAgZCA9IGwgLSAyNDQ3ICogbSAvIDgwOwotICAgIGwgPSBtIC8gMTE7Ci0g ICAgbSA9IG0gKyAyIC0gMTIgKiBsOwotICAgIHkgPSAxMDAgKiAobiAtIDQ5KSArIHkgKyBsOwot ICAgIHNwcmludGYobWpkMmRidWYsIiUwNGQlMDJkJTAyZCIseSxtLGQpOyAvKiBTQUZFICovCi0g ICAgcmV0dXJuKChjaGFyICopbWpkMmRidWYpOwotfQotCi0jaWZuZGVmIE5PU1BMCi1zdGF0aWMg Y2hhciAqKiBmbGlzdCA9IChjaGFyICoqKSBOVUxMOyAgLyogRmlsZSBsaXN0IGZvciBcZm5leHRm aWxlKCkgKi8KLXN0YXRpYyBpbnQgZmxpc3RuID0gMDsgICAgICAgICAgICAgICAgICAvKiBOdW1i ZXIgb2YgaXRlbXMgaW4gZmlsZSBsaXN0ICovCi0KLS8qCi0gIFRoZSBmdW5jdGlvbiByZXR1cm4t dmFsdWUgYnVmZmVyIG11c3QgYmUgZ2xvYmFsLCBzaW5jZSBmbmV2YWwoKSByZXR1cm5zIGEKLSAg cG9pbnRlciB0byBpdC4gIGZuZXZhbCgpIGlzIGNhbGxlZCBvbmx5IGJ5IHp6c3RyaW5nKCksIHdo aWNoIGFsd2F5cyBjb3BpZXMKLSAgdGhlIHJlc3VsdCBvdXQgb2YgdGhpcyBidWZmZXIgdG8gc29t ZXdoZXJlIGVsc2UsIHNvIGl0J3MgT0sgdG8gaGF2ZSBvbmx5Ci0gIG9uZSBidWZmZXIgZm9yIHRo aXMgaW4gbW9zdCBjYXNlcy4gIEhvd2V2ZXIsIHNpbmNlIGZ1bmN0aW9uIGNhbGxzIGNhbiBiZQot ICBuZXN0ZWQgLS0gZS5nLiBmdW5jdGlvbnMgd2hvc2UgYXJndW1lbnRzIGFyZSBmdW5jdGlvbnMs IG9yIHJlY3Vyc2l2ZQotICBmdW5jdGlvbnMsIGF0IHNvbWUgcG9pbnQgd2Ugc2hvdWxkIGNvbnZl cnQgdGhpcyB0byBhbiBhcnJheSBvZiBidWZmZXJzLAotICBpbmRleGVkIGJ5IGZ1bmN0aW9uIGRl cHRoICh3aGljaCBtaWdodCBvciBtaWdodCBub3QgYmUgdGhlIHNhbWUgYXMgdGhlCi0gICJkZXB0 aCIgdmFyaWFibGUpLiAgQWxzbywgc2luY2UgZnVuY3Rpb24gcmVzdWx0cyBhcmUgcG90ZW50aWFs bHkgcXVpdGUgYmlnLAotICB3ZSdkIG5lZWQgdG8gYWxsb2NhdGUgYW5kIGRlYWxsb2NhdGUgZHlu YW1pY2FsbHkgYXMgd2UgZGVzY2VuZCBhbmQgYXNjZW5kCi0gIGZ1bmN0aW9uIGRlcHRoLiAgTGVm dCBmb3IgYSBmdXR1cmUgcmVsZWFzZS4uLgotKi8KLWNoYXIgZm52YWxbRk5WQUxMKzJdOyAgICAg ICAgICAgICAgICAgICAvKiBGdW5jdGlvbiByZXR1cm4gdmFsdWUgICovCi1zdGF0aWMgaW50IGZu ZGVwdGggPSAwOyAgICAgICAgICAgICAgICAgLyogKHdlIGRvbid0IGFjdHVhbGx5IHVzZSB0aGlz IHlldCkgKi8KLWludCBmbnN1Y2Nlc3MgPSAxOwotZXh0ZXJuIGludCBmbmVycm9yOwotCi0vKiBm IHAgZiBvIHIgbSBhIHQgIC0tICBGbG9hdGluZy1wb2ludCBudW1iZXIgbmljZWx5IGZvcm1hdHRl ZC4gICovCi0vKgotICAgUmV0dXJucyByZXN1bHRzIGZyb20gYSBjaXJjdWxhciAxSyBidWZmZXIu Ci0gICBEb24ndCBjb3VudCBvbiB0b28gbWFueSByZXN1bHRzIHJlbWFpbmluZyBhdmFpbGFibGUg YXQgb25jZTsgaXQgY291bGQKLSAgIGJlIGFueXdoZXJlIGZyb20gNSB0byBtYXliZSAxMDAsIGRl cGVuZGluZyBvbiB0aGUgc2l6ZXMgb2YgdGhlIHJlc3VsdHMuCi0qLwotI2lmZGVmIENLRkxPQVQK LSNkZWZpbmUgRlBGTVRTSVogMTAyNAotc3RhdGljIGNoYXIgZnBmbXRidWZbRlBGTVRTSVpdID0g eyBOVUwsIE5VTCB9Owotc3RhdGljIGludCBmcGZidWZwb3MgPSAwOyAgICAgICAgICAgICAgIC8q ICh3aHkgd2FzIHRoaXMgY2hhciBiZWZvcmU/KSAqLwotCi1jaGFyICoKLWZwZm9ybWF0KGZwcmVz dWx0LHBsYWNlcyxyb3VuZCkgQ0tGTE9BVCBmcHJlc3VsdDsgaW50IHBsYWNlcywgcm91bmQ7IHsK LSAgICBjaGFyIGZidWZbMTZdOyAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgY3JlYXRpbmcg cHJpbnRmIGZvcm1hdCAqLwotICAgIGludCBuaW5lcyA9IDAsIHNpZ24gPSAwLCB4LCB5LCBpLCBq LCBzaXplID0gMDsKLSAgICBjaGFyICogYnVmOwotICAgIENLRkxPQVQgZnRtcDsKLQotICAgIHgg PSBwbGFjZXMgPyBwbGFjZXMgOiAoZnBfZGlnaXRzID8gZnBfZGlnaXRzIDogNik7Ci0KLSAgICBk ZWJ1ZyhGMTAxLCJmcGZvcm1hdCBmcHJlc3VsdCIsIiIsZnByZXN1bHQpOwotICAgIGRlYnVnKEYx MDEsImZwZm9ybWF0IHBsYWNlcyIsIiIscGxhY2VzKTsKLSAgICBkZWJ1ZyhGMTAxLCJmcGZvcm1h dCBmcGZidWZwb3MgMSIsIiIsZnBmYnVmcG9zKTsKLQotICAgIGZ0bXAgPSBmcHJlc3VsdDsKLSAg ICBpZiAoZnRtcCA8IDAuMCkgZnRtcCA9IDAuMCAtIGZwcmVzdWx0OwotCi0jaWZkZWYgRk5GTE9B VAotICAgIGlmICghZnBfcm91bmRpbmcgJiYgICAgICAgICAgICAgICAgIC8qIElmIHByaW50ZiBk b2Vzbid0IHJvdW5kLCAqLwotICAgICAgICAocGxhY2VzID4gMCB8fCAgICAgICAgICAgICAgICAg IC8qIHJvdW5kIHJlc3VsdCB0byBkZWNpbWFsIHBsYWNlcy4gKi8KLSAgICAgICAgIChwbGFjZXMg PT0gMCAmJiByb3VuZCkpKQotICAgICAgZnByZXN1bHQgKz0gKDAuNSAvIHBvdygxMC4wLChDS0ZM T0FUKXBsYWNlcykpOwotICAgIHkgPSAoZnRtcCA9PSAwLjApID8gMSA6IChpbnQpbG9nMTAoZnRt cCk7Ci0gICAgc2l6ZSA9IHkgKyB4ICsgMzsgICAgICAgICAgICAgICAgICAgLyogRXN0aW1hdGVk IGxlbmd0aCBvZiByZXN1bHQgKi8KLSAgICBpZiAoZnByZXN1bHQgPCAwLjApIHNpemUrKzsKLSNl bHNlCi0gICAgc2l6ZSA9IDIwMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gd2F5IHRv IGVzdGltYXRlLCBiZSBnZW5lcm91cyAqLwotI2VuZGlmIC8qIEZORkxPQVQgKi8KLQotICAgIGRl YnVnKEYxMDEsImZwZm9ybWF0IHNpemUiLCIiLHNpemUpOwotCi0gICAgaWYgKGZwZmJ1ZnBvcyA+ IChGUEZNVFNJWiAtIHNpemUpKSAgLyogV3JhcCBhcm91bmQgaWYgbmVjZXNzYXJ5ICovCi0gICAg ICBmcGZidWZwb3MgPSAwOwotICAgIGRlYnVnKEYxMDEsImZwZm9ybWF0IGZwZmJ1ZnBvcyAxIiwi IixmcGZidWZwb3MpOwotCi0gICAgYnVmID0gJmZwZm10YnVmW2ZwZmJ1ZnBvc107Ci0KLSAgICBp ZiAocGxhY2VzID4gMCkgeyAgICAgICAgICAgICAgICAgICAvKiBJZiBwbGFjZXMgc3BlY2lmaWVk ICovCi0gICAgICAgIC8qIHVzZSBzcGVjaWZpZWQgcGxhY2VzIHRvIHdyaXRlIGdpdmVuIG51bWJl ciBvZiBkaWdpdHMgKi8KLSAgICAgICAgc3ByaW50ZihmYnVmLCIlJTAuJWRmIixwbGFjZXMpOyAv KiBTQUZFICovCi0gICAgICAgIHNwcmludGYoYnVmLGZidWYsZnByZXN1bHQpOyAgICAgLyogU0FG RSAqLwotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE90aGVyd2lz ZS4uLiAqLwotICAgICAgICAvKiBHbyBmb3IgbWF4IHByZWNpc2lvbiAqLwotICAgICAgICBzcHJp bnRmKGZidWYsIiUlMC4lZGYiLGZwX2RpZ2l0cyk7IC8qIFNBRkUgKi8KLSAgICAgICAgc3ByaW50 ZihidWYsZmJ1ZixmcHJlc3VsdCk7ICAgICAvKiBTQUZFICovCi0gICAgfQotICAgIGlmIChidWZb MF0gPT0gJy0nKSBzaWduID0gMTsKLSAgICBkZWJ1ZyhGMTExLCJmcHJlc3VsdCAxIGVycm5vIixi dWYsZXJybm8pOyAvKiBDaGVjayBmb3Igb3Zlci91bmRlcmZsb3cgKi8KLSAgICBkZWJ1ZyhGMTEx LCJmcHJlc3VsdCAxIGZwZmJ1ZnBvcyIsYnVmLGZwZmJ1ZnBvcyk7Ci0gICAgLyogR2l2ZSByZXF1 ZXN0ZWQgZGVjaW1hbCBwbGFjZXMgKi8KLSAgICBmb3IgKGkgPSBzaWduOyBpIDwgRlBGTVRTSVog JiYgYnVmW2ldOyBpKyspIHsKLSAgICAgICAgaWYgKGJ1ZltpXSA9PSAnLicpICAgICAgICAgICAg ICAvKiBGaXJzdCBmaW5kIHRoZSBkZWNpbWFsIHBvaW50ICovCi0gICAgICAgICAgYnJlYWs7Ci0g ICAgICAgIGVsc2UgaWYgKGkgPiBmcF9kaWdpdHMgKyBzaWduIC0gMSkgLyogcmVwbGFjaW5nIGdh cmJhZ2UgKi8KLSAgICAgICAgICBidWZbaV0gPSAnMCc7ICAgICAgICAgICAgICAgICAvKiBkaWdp dHMgd2l0aCAwLi4uICovCi0gICAgfQotICAgIGlmIChidWZbaV0gPT0gJy4nKSB7ICAgICAgICAg ICAgICAgIC8qIEhhdmUgZGVjaW1hbCBwb2ludCAqLwotICAgICAgICBpbnQgZ290ZW5kID0gMDsK LSAgICAgICAgLyogcGxhY2VzIDwgMCBzbyB0cnVuY2F0ZSBmcmFjdGlvbiAqLwotICAgICAgICBp ZiAocGxhY2VzIDwgMCB8fCAocGxhY2VzID09IDAgJiYgcm91bmQpKSB7Ci0gICAgICAgICAgICBi dWZbaV0gPSBOVUw7Ci0gICAgICAgIH0gZWxzZSBpZiAocGxhY2VzID4gMCkgeyAgICAgICAgLyog ZCA+IDAgc28gdGhpcyBtYW55IGRlY2ltYWwgcGxhY2VzICovCi0gICAgICAgICAgICBpKys7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlyc3QgZGlnaXQgYWZ0ZXIgZGVjaW1hbCAqLwot ICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBsYWNlczsgaisrKSB7IC8qIFRydW5jYXRlIGFm dGVyIGQgZGVjaW1hbCAqLwotICAgICAgICAgICAgICAgIGlmICghYnVmW2oraV0pICAgICAgICAv KiBwbGFjZXMgb3IgZXh0ZW5kIHRvIGQgICovCi0gICAgICAgICAgICAgICAgICBnb3RlbmQgPSAx OyAgICAgICAgICAgICAgLyogZGVjaW1hbCBwbGFjZXMuICovCi0gICAgICAgICAgICAgICAgaWYg KGdvdGVuZCB8fCBqK2krc2lnbiA+IGZwX2RpZ2l0cykKLSAgICAgICAgICAgICAgICAgIGJ1Zltq K2ldID0gJzAnOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnVmW2oraV0gPSBOVUw7Ci0g ICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogcGxhY2VzID09IDAgc28g RG8gVGhlIFJpZ2h0IFRoaW5nICovCi0gICAgICAgICAgICBmb3IgKGogPSAoaW50KXN0cmxlbihi dWYpIC0gMTsgaiA+IGkrMTsgai0tKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChqIC0gc2lnbikg PiBmcF9kaWdpdHMpCi0gICAgICAgICAgICAgICAgICBidWZbal0gPSAnMCc7Ci0gICAgICAgICAg ICAgICAgaWYgKGJ1ZltqXSA9PSAnMCcpCi0gICAgICAgICAgICAgICAgICBidWZbal0gPSBOVUw7 IC8qIFN0cmlwIHVzZWxlc3MgdHJhaWxpbmcgMCdzLiAqLwotICAgICAgICAgICAgICAgIGVsc2UK LSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg fQotICAgIGZwZm10YnVmW0ZQRk1UU0laLTFdID0gTlVMOwotICAgIGogPSBzdHJsZW4oYnVmKTsK LSAgICBzaWduID0gMDsKLSAgICBmb3IgKGkgPSBqLTE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAg IGlmIChidWZbaV0gPT0gJzknKQotICAgICAgICAgIG5pbmVzKys7Ci0gICAgICAgIGVsc2UKLSAg ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgLyogRG8gc29tZXRoaW5nIGFib3V0IHh4Lnh4OTk5 OTk5OTkuLi4gKi8KLSAgICBpZiAobmluZXMgPiA1KSB7Ci0gICAgICAgIGlmIChpc2RpZ2l0KGJ1 ZltpXSkgJiYgaSA8IEZQRk1UU0laIC0gMikgewotICAgICAgICAgICAgYnVmW2ldID0gYnVmW2ld ICsgMTsKLSAgICAgICAgICAgIGJ1ZltpKzFdID0gJzAnOwotICAgICAgICAgICAgYnVmW2krMl0g PSAnXDAnOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICghc3RybmNtcChidWYsIi0wLjAiLEZQ Rk1UU0laKSkKLSAgICAgIGNrc3RybmNweShidWYsIjAuMCIsRlBGTVRTSVopOwotICAgIGZwZmJ1 ZnBvcyArPSAoaW50KXN0cmxlbihidWYpICsgMTsKLSAgICByZXR1cm4oKGNoYXIgKilidWYpOwot fQotI2VuZGlmIC8qIENLRkxPQVQgKi8KLQotc3RhdGljIFZPSUQKLWV2YWxlcnIoZm4pIGNoYXIg KiBmbjsgewotICAgIGlmIChmbmRpYWdzKSB7Ci0gICAgICAgIGlmIChkaXZieXplcm8pCi0gICAg ICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLCI8RVJST1I6RElWSURFX0JZX1pFUk86XFxmIixm biwiKCk+IixOVUxMKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZO VkFMTCwiPEVSUk9SOkFSR19OT1RfTlVNRVJJQzpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAgIH0K LX0KLQotCi1zdGF0aWMgaW50Ci1ja2NpbmRleChjLHMpIGNoYXIgYywgKnM7IHsKLSAgICBpbnQg cmM7Ci0gICAgaWYgKCFjIHx8ICFzKSByZXR1cm4oMCk7Ci0gICAgZm9yIChyYyA9IDA7IHNbcmNd OyByYysrKSB7Ci0JaWYgKGMgPT0gc1tyY10pIHJldHVybihyYysxKTsKLSAgICB9Ci0gICAgcmV0 dXJuKDApOwotfQotCi1zdGF0aWMgY2hhciAqCi1kb2t3dmFsKHMsc2VwKSBjaGFyICogcywgKiBz ZXA7IHsKLSAgICBjaGFyIGMgPSAnXDAnLCAqIHAsICoga3cgPSBOVUxMLCAqIHZwID0gTlVMTDsK LSAgICBjaGFyICogcmMgPSAiMCI7CQkJLyogUmV0dXJuIGNvZGUgKi8KLSAgICBpbnQgeCA9IDA7 Ci0gICAgaWYgKCFzKSByZXR1cm4ocmMpOwotICAgIGlmICghKnMpIHJldHVybihyYyk7Ci0gICAg ZGVidWcoRjExMCwia3d2YWwgYXJnIixzLDApOwotICAgIGRlYnVnKEYxMTAsImt3dmFsIHNlcCIs c2VwLDApOwotICAgIHAgPSAoY2hhciAqKW1hbGxvYygoaW50KXN0cmxlbihzKSsxKTsKLSAgICBp ZiAoIXApIGdvdG8geGRva3d2YWw7Ci0gICAgc3RyY3B5KHAscyk7ICAgICAgICAgICAgICAgICAg ICAgICAgLyogU0FGRSAqLwotICAgIHMgPSBwOwotICAgIHdoaWxlICgqcyA8ICchJyAmJiAqcyA+ ICdcMCcpICAgICAgIC8qIEdldCBmaXJzdCBub25ibGFuayAqLwotICAgICAgcysrOwotICAgIGlm ICghKnMpIGdvdG8geGRva3d2YWw7Ci0gICAgaWYgKGNrY2luZGV4KCpzLHNlcCkpCQkvKiBTZXBh cmF0b3IgYnV0IG5vIGtleXdvcmQgKi8KLSAgICAgIGdvdG8geGRva3d2YWw7Ci0gICAga3cgPSBz OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogS2V5d29yZCAqLwotICAgIHdoaWxlICgq cyA+ICcgJykgewotCWlmIChja2NpbmRleCgqcyxzZXApKSB7CQkvKiBrZXl3b3JkPS4uLiAqLwot ICAgICAgICAgICAgYyA9ICpzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg ICAgcysrOwotICAgIH0KLSAgICBpZiAoKmt3KSByYyA9ICIxIjsJCQkvKiBIYXZlIGtleXdvcmQs IHByb21vdGUgcmV0dXJuIGNvZGUgKi8KLSAgICAqcysrID0gTlVMOyAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBUZXJtaW5hdGUga2V5d29yZCAqLwotICAgIHdoaWxlICgqcyA8ICchJyAmJiAq cyA+ICdcMCcpICAgICAgIC8qIFNraXAgYmxhbmtzICovCi0gICAgICBzKys7Ci0gICAgaWYgKCFj ICYmIGNrY2luZGV4KCpzLHNlcCkpIHsKLSAgICAgICAgYyA9ICpzKys7ICAgICAgICAgICAgICAg ICAgICAgICAvKiBIYXZlIHNlcGFyYXRvciAqLwotICAgICAgICB3aGlsZSAoKnMgPCAnIScgJiYg KnMgPiAnXDAnKSAgIC8qIFNraXAgYmxhbmtzICovCi0gICAgICAgICAgcysrOwotICAgIH0KLSAg ICBpZiAoYykgewotICAgICAgICB2cCA9IHM7Ci0JaWYgKCp2cCkgcmMgPSAiMiI7CQkvKiBIYXZl IHZhbHVlLCBhbm90aGVyIHByb21vdGlvbiAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgd2hp bGUgKCpzID4gJyAnKSAgICAgICAgICAgICAgICAvKiBTa2lwIHRvIGVuZCAqLwotICAgICAgICAg IHMrKzsKLSAgICAgICAgKnMgPSBOVUw7ICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5h dGUgdmFsdWUgKi8KLSNlbmRpZgkvKiBDT01NRU5UICovCi0gICAgfQotICAgIGRlYnVnKEYxMTAs Imt3dmFsIGMiLGNrY3RvYShjKSwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJrd3ZhbCBrZXl3b3JkIixr dywwKTsKLSAgICBkZWJ1ZyhGMTEwLCJrd3ZhbCB2YWx1ZSIsdnAsMCk7Ci0gICAgbWFrZXN0cigm bGFzdGt3dmFsLGt3KTsKLSAgICB2cCA9IGJyc3RyaXAodnApOwotICAgIGRlYnVnKEYxMTAsImt3 dmFsIHZhbHVlIix2cCwwKTsKLSAgICB4ID0gYWRkbWFjKGt3LHZwKTsKLSAgICBkZWJ1ZyhGMTEx LCJrd3ZhbCBhZGRtYWMiLGt3LHgpOwotICB4ZG9rd3ZhbDogCi0gICAgaWYgKHApIGZyZWUocCk7 Ci0gICAgcmV0dXJuKCh4IDwgMCkgPyAiLTEiIDogcmMpOwotfQotCi1zdGF0aWMgaW50Ci1pc2Fh cnJheShzKSBjaGFyICogczsgewkJCS8qIElzIHMgYW4gYXNzb2NpYXRpdmUgYXJyYXkgZWxlbWVu dCAqLwotICAgIGludCBzdGF0ZSA9IDA7Ci0gICAgQ0hBUiBjOwotICAgIGlmICghcykgcmV0dXJu KDApOwotICAgIHdoaWxlICgoYyA9ICpzKyspKSB7Ci0JaWYgKCFpc3ByaW50KGMpKSB7Ci0JICAg IHJldHVybigwKTsKLQl9IGVsc2UgaWYgKGMgPT0gJzwnKSB7Ci0JICAgIGlmIChzdGF0ZSAhPSAw KQotCSAgICAgIHJldHVybigwKTsKLQkgICAgc3RhdGUgPSAxOwotCX0gZWxzZSBpZiAoYyA9PSAn PicpIHsKLQkgICAgcmV0dXJuKChzdGF0ZSAhPSAxIHx8ICpzKSA/IDAgOiAxKTsKLQl9Ci0gICAg fQotICAgIHJldHVybigwKTsKLX0KLQotc3RhdGljIGNoYXIgKiAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEV2YWx1YXRlIGJ1aWx0aW4gZnVuY3Rpb25zICovCi1mbmV2YWwoZm4sYXJncCxh cmduLHhwKSBjaGFyICpmbiwgKmFyZ3BbXTsgaW50IGFyZ247IGNoYXIgKiB4cDsgewotICAgIGlu dCBpPTAsIGo9MCwgaz0wLCBsZW4xPTAsIGxlbjI9MCwgbGVuMz0wLCBuPTAsIHQ9MCwgeD0wLCB5 PTA7Ci0gICAgaW50IGN4LCBmYWlsZWQgPSAwOyAgICAgICAgICAgICAgICAgLyogUmV0dXJuIGNv ZGUsIDAgPSBvayAqLwotICAgIGxvbmcgeiA9IDBMOwotICAgIGNoYXIgKmJwW0ZOQVJHUyArIDFd OyAgICAgICAgICAgICAgIC8qIFBvaW50ZXJzIHRvIG1hbGxvYydkIHN0cmluZ3MgKi8KLSAgICBj aGFyIGMgPSBOVUw7Ci0gICAgY2hhciAqcCA9IE5VTEwsICpzID0gTlVMTDsKLSAgICBjaGFyICp2 YWwxID0gTlVMTCwgKnZhbDIgPSBOVUxMOyAgICAvKiBQb2ludGVycyB0byBudW1lcmljIHN0cmlu ZyB2YWx1ZXMgKi8KLQotI2lmZGVmIFJFQ1VSU0lWRQotICAgIGludCByc2F2ZSA9IHJlY3Vyc2l2 ZTsKLSNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KLSNpZmRlZiBPUzIKLSAgICBpbnQgenNhdmUgPSB6 eHBuOwotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAgaWYgKCFmbikgZm4gPSAiIjsgICAgICAgICAg ICAgICAgICAgLyogUHJvdGVjdCBhZ2FpbnN0IG51bGwgcG9pbnRlcnMgKi8KLSAgICBpZiAoISpm bikgcmV0dXJuKCIiKTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBGTkFSR1M7IGkrKykgICAgICAg IC8qIEluaXRpYWxpemUgYXJndW1lbnQgcG9pbnRlcnMgKi8KLSAgICAgIGJwW2ldID0gTlVMTDsK LS8qCi0gIElNUE9SVEFOVDogTm90ZSB0aGF0IGFyZ24gaXMgbm90IGFuIGFjY3VyYXRlIGNvdW50 IG9mIHRoZSBudW1iZXIgb2YKLSAgYXJndW1lbnRzLiAgV2UgY2FuJ3QgcmVhbGx5IHRlbGwgaWYg YW4gYXJndW1lbnQgaXMgbnVsbCB1bnRpbCBhZnRlciB3ZQotICBleGVjdXRlIHRoZSBjb2RlIGJl bG93LiAgU28gYXJnbiBpcyByZWFsbHkgdGhlIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cwot ICB3ZSBtaWdodCBoYXZlLiAgQXJnbiBzaG91bGQgYWx3YXlzIGJlIGF0IGxlYXN0IDEsIGV2ZW4g aWYgdGhlIGZ1bmN0aW9uIGlzCi0gIGNhbGxlZCB3aXRoIGVtcHR5IHBhcmVudGhlc2VzIChidXQg ZG9uJ3QgY291bnQgb24gaXQpLgotKi8KLSAgICBkZWJ1ZyhGMTExLCJmbmV2YWwiLGZuLGFyZ24p OwotICAgIGRlYnVnKEYxMTAsImZuZXZhbCIsYXJncFswXSwwKTsKLSAgICBpZiAoYXJnbiA+IEZO QVJHUykgICAgICAgICAgICAgICAgICAvKiBEaXNjYXJkIGV4Y2VzcyBhcmd1bWVudHMgKi8KLSAg ICAgIGFyZ24gPSBGTkFSR1M7Ci0KLSAgICBmbmRlcHRoKys7Ci0gICAgZGVidWcoRjEwMSwiZm5l dmFsIGZuZGVwdGgiLCIiLGZuZGVwdGgpOwotICAgIHAgPSBmbnZhbDsKLSAgICBmbnZhbFswXSA9 IE5VTDsKLSAgICB5ID0gbG9va3VwKGZuY3RhYixmbixuZnVuY3MsJngpOyAgICAvKiBMb29rIHVw IHRoZSBmdW5jdGlvbiBuYW1lICovCi0gICAgY3ggPSB5OyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogQmVjYXVzZSB5IGlzIHRvbyBnZW5lcmljLi4uICovCi0gICAgaWYgKGN4IDwgMCkg eyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBmb3VuZCAqLwotICAgICAgICBmYWlsZWQg PSAxOwotICAgICAgICBpZiAoZm5kaWFncykgeyAgICAgICAgICAgICAgICAgIC8qIEZVTkNUSU9O IERJQUdOT1NUSUMgT04gKi8KLSAgICAgICAgICAgIGludCB4OwotICAgICAgICAgICAgeCA9IHN0 cmxlbihmbik7Ci0gICAgICAgICAgICAvKiBUaGUgZm9sbG93aW5nIHNwcmludGYncyBhcmUgc2Fm ZSAqLwotICAgICAgICAgICAgc3dpdGNoIChjeCkgewotICAgICAgICAgICAgICBjYXNlIC0xOgot ICAgICAgICAgICAgICAgIGlmICh4ICsgMzIgPCBGTlZBTEwpCi0gICAgICAgICAgICAgICAgICBz cHJpbnRmKGZudmFsLCI8RVJST1I6Tk9fU1VDSF9GVU5DVElPTjpcXGYlcygpPiIsZm4pOwotICAg ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHNwcmludGYoZm52YWwsIjxFUlJP UjpOT19TVUNIX0ZVTkNUSU9OPiIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICBjYXNlIC0yOgotICAgICAgICAgICAgICAgIGlmICh4ICsgMjYgPCBGTlZBTEwpCi0gICAg ICAgICAgICAgICAgICBzcHJpbnRmKGZudmFsLCI8RVJST1I6TkFNRV9BTUJJR1VPVVM6XFxmJXMo KT4iLGZuKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBzcHJpbnRm KGZudmFsLCI8RVJST1I6TkFNRV9BTUJJR1VPVVM+Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgIGNhc2UgLTM6Ci0gICAgICAgICAgICAgICAgc3ByaW50ZihmbnZhbCwi PEVSUk9SOkZVTkNUSU9OX05BTUVfTUlTU0lORzpcXGYoKT4iKTsKLSAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAoeCArIDI2 IDwgRk5WQUxMKQotICAgICAgICAgICAgICAgICAgc3ByaW50ZihmbnZhbCwiPEVSUk9SOkxPT0tV UF9GQUlMVVJFOlxcZiVzKCk+Iixmbik7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg ICAgICAgICAgc3ByaW50ZihmbnZhbCwiPEVSUk9SOkxPT0tVUF9GQUlMVVJFPiIpOwotICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGdvdG8g Zm5lbmQ7ICAgICAgICAgICAgICAgICAgICAgLyogQWx3YXlzIGxlYXZlIHZpYSBjb21tb24gZXhp dCAqLwotICAgIH0KLSAgICBmbiA9IGZuY3RhYlt4XS5rd2Q7ICAgICAgICAgICAgICAgICAvKiBG dWxsIG5hbWUgb2YgZnVuY3Rpb24gKi8KLQotICAgIGlmIChhcmduIDwgMCkgewotICAgICAgICBm YWlsZWQgPSAxOwotICAgICAgICBwID0gZm52YWw7Ci0gICAgICAgIGlmIChmbmRpYWdzKQotICAg ICAgICAgIHNwcmludGYoZm52YWwsIjxFUlJPUjpNSVNTSU5HX0FSRzpcXGYlcygpPiIsZm4pOwot ICAgICAgICBnb3RvIGZuZW5kOwotICAgIH0KLSAgICBpZiAoY3ggPT0gRk5fTElUKSB7ICAgICAg ICAgICAgICAgICAvKiBsaXRlcmFsKGFyZzEpICovCi0gICAgICAgIGRlYnVnKEYwMTAsImZsaXQi LHhwLDApOwotICAgICAgICBwID0geHAgPyB4cCA6ICIiOyAgICAgICAgICAgICAgIC8qIFJldHVy biBhIHBvaW50ZXIgdG8gYXJnIGl0c2VsZiAqLwotICAgICAgICBnb3RvIGZuZW5kOwotICAgIH0K LQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewotICAgICAgICBpbnQgajsKLSAgICAg ICAgZm9yIChqID0gMDsgaiA8IGFyZ247IGorKykKLQkgIGRlYnVnKEYxMTEsImZuZXZhbCBhcmci LGFyZ3Bbal0saik7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0gICAgZm9yIChqID0gYXJn bi0xOyBqID49IDA7IGotLSkgeyAgICAgLyogVW5jb3VudCBlbXB0eSB0cmFpbGluZyBhcmdzICov Ci0gICAgICAgIGlmICghYXJncFtqXSkKLSAgICAgICAgICBhcmduLS07Ci0gICAgICAgIGVsc2Ug aWYgKCEqKGFyZ3Bbal0pKQotICAgICAgICAgIGFyZ24tLTsKLSAgICAgICAgZWxzZSBicmVhazsK LSAgICB9Ci0gICAgZGVidWcoRjExMSwiZm5ldmFsIGFyZ24iLGZuLGFyZ24pOwotLyoKLSAgXGZs aXRlcmFsKCkgYW5kIFxmY29udGVudHMoKSBhcmUgc3BlY2lhbCBmdW5jdGlvbnMgdGhhdCBkbyBu b3QgZXZhbHVhdGUKLSAgdGhlaXIgYXJndW1lbnRzLCBhbmQgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5 IGhlcmUuICBBZnRlciB0aGVzZSBjb21lIHRoZQotICBmdW5jdGlvbnMgd2hvc2UgYXJndW1lbnRz IGFyZSBldmFsdWF0ZWQgaW4gdGhlIG5vcm1hbCB3YXkuCi0qLwotI2lmZGVmIENPTU1FTlQKLSAg ICAvKiAobW92ZWQgdXApICovCi0gICAgaWYgKGN4ID09IEZOX0xJVCkgeyAgICAgICAgICAgICAg ICAgLyogbGl0ZXJhbChhcmcxKSAqLwotICAgICAgICBkZWJ1ZyhGMTEwLCJmbGl0Iix4cCwwKTsK LSAgICAgICAgcCA9IHhwID8geHAgOiAiIjsgICAgICAgICAgICAgICAvKiBSZXR1cm4gYSBwb2lu dGVyIHRvIGFyZyBpdHNlbGYgKi8KLSAgICAgICAgZ290byBmbmVuZDsKLSAgICB9Ci0jZW5kaWYg LyogQ09NTUVOVCAqLwotICAgIGlmIChjeCA9PSBGTl9DT04pIHsgICAgICAgICAgICAgICAgIC8q IENvbnRlbnRzIG9mIHZhcmlhYmxlLCB1bmV4cGFuZGVkLiAqLwotICAgICAgICBjaGFyIGM7Ci0g ICAgICAgIGludCBzdWJzY3JpcHQgPSAwOyAgICAgICAgCi0gICAgICAgIGlmICghKHAgPSBhcmdw WzBdKSB8fCAhKnApIHsKLSAgICAgICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICBwID0g Zm52YWw7Ci0gICAgICAgICAgICBpZiAoZm5kaWFncykKLSAgICAgICAgICAgICAgc3ByaW50Zihm bnZhbCwiPEVSUk9SOk1JU1NJTkdfQVJHOlxcZmNvbnRlbnRzKCk+Iik7Ci0gICAgICAgICAgICBn b3RvIGZuZW5kOwotICAgICAgICB9Ci0gICAgICAgIHAgPSBicnN0cmlwKHApOwotICAgICAgICBp ZiAoKnAgPT0gQ01EUSkgcCsrOwotICAgICAgICBpZiAoKGMgPSAqcCkgPT0gJyUnKSB7ICAgICAg ICAgIC8qIFNjYWxhciB2YXJpYWJsZS4gKi8KLSAgICAgICAgICAgIGMgPSAqKytwOyAgICAgICAg ICAgICAgICAgICAvKiBHZXQgSUQgY2hhcmFjdGVyLiAqLwotICAgICAgICAgICAgcCA9ICIiOyAg ICAgICAgICAgICAgICAgICAgIC8qIEFzc3VtZSBkZWZpbml0aW9uIGlzIGVtcHR5ICovCi0gICAg ICAgICAgICBpZiAoIWMpIHsgICAgICAgICAgICAgICAgICAgLyogRG91YmxlIHBhcmFub2lhICov Ci0gICAgICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAgICAgICAgICBwID0gZm52YWw7 Ci0gICAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCi0gICAgICAgICAgICAgICAgICBzcHJpbnRm KGZudmFsLCI8RVJST1I6QVJHX0JBRF9WQVJJQUJMRTpcXGZjb250ZW50cygpPiIpOwotICAgICAg ICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYyA+ PSAnMCcgJiYgYyA8PSAnOScpIHsgLyogRGlnaXQgZm9yIG1hY3JvIGFyZyAqLwotICAgICAgICAg ICAgICAgIGlmIChtYWNsdmwgPCAwKSAgICAgICAgIC8qIERpZ2l0IHZhcmlhYmxlcyBhcmUgZ2xv YmFsICovCi0gICAgICAgICAgICAgICAgICBwID0gZ192YXJbY107ICAgICAgICAgLyogaWYgbm8g bWFjcm8gaXMgYWN0aXZlICovCi0gICAgICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAg ICAgLyogb3RoZXJ3aXNlICovCi0gICAgICAgICAgICAgICAgICBwID0gbV9hcmdbbWFjbHZsXVtj IC0gJzAnXTsgLyogdGhleSdyZSBvbiB0aGUgc3RhY2sgKi8KLSAgICAgICAgICAgIH0gZWxzZSBp ZiAoYyA9PSAnKicpIHsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICAgICAgcCA9IChtYWNs dmwgPiAtMSkgPyBtX2xpbmVbbWFjbHZsXSA6IHRvcGxpbmU7Ci0gICAgICAgICAgICAgICAgaWYg KCFwKSBwID0gIiI7Ci0jZWxzZQotICAgICAgICAgICAgICAgIGludCBueCA9IEZOVkFMTDsKLSAg ICAgICAgICAgICAgICBjaGFyICogc3ggPSBmbnZhbDsKLSAgICAgICAgICAgICAgICBwID0gZm52 YWw7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgICAgIGlmIChjbWRzcmMoKSA9PSAwICYm IHRvcGxpbmUpCi0gICAgICAgICAgICAgICAgICBwID0gdG9wbGluZTsKLSAgICAgICAgICAgICAg ICBlbHNlCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgICAgICAgaWYgKHp6c3Ry aW5nKCJcXGZqb2luKCZfW10seyB9LDEpIiwmc3gsJm54KSA8IDApIHsKLSAgICAgICAgICAgICAg ICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAgICAgICAgICAgICAgcCA9IGZudmFsOwotICAgICAg ICAgICAgICAgICAgICBpZiAoZm5kaWFncykKLSAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRm KGZudmFsLCI8RVJST1I6T1ZFUkZMT1c6XFxmY29udGVudHMoKT4iKTsKLQkJICAgIGRlYnVnKEYx MTAsInp6c3RyaW5nIGZjb250ZW50cyhcXCUqKSIscCwwKTsKLSAgICAgICAgICAgICAgICB9Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg ICBpZiAoaXN1cHBlcihjKSkgYyAtPSAoJ2EnLSdBJyk7Ci0gICAgICAgICAgICAgICAgcCA9IGdf dmFyW2NdOyAgICAgICAgICAgLyogTGV0dGVyIGZvciBnbG9iYWwgdmFyaWFibGUgKi8KLSAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIGlmICghcCkgcCA9ICIiOwotICAgICAgICAgICAgZ290byBm bmVuZDsKLSAgICAgICAgfSBlbHNlIGlmIChjID09ICcmJykgeyAgICAgICAgICAvKiBBcnJheSBy ZWZlcmVuY2UuICovCi0gICAgICAgICAgICBpbnQgdmJpLCBkOwotICAgICAgICAgICAgaWYgKGFy cmF5bmFtKHAsJnZiaSwmZCkgPCAwKSB7IC8qIEdldCBuYW1lIGFuZCBzdWJzY3JpcHQgKi8KLSAg ICAgICAgICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgICAgIHAgPSBmbnZhbDsKLSAg ICAgICAgICAgICAgICBpZiAoZm5kaWFncykKLSAgICAgICAgICAgICAgICAgIHNwcmludGYoZm52 YWwsIjxFUlJPUjpBUkdfQkFEX0FSUkFZOlxcZmNvbnRlbnRzKCk+Iik7Ci0gICAgICAgICAgICAg ICAgZ290byBmbmVuZDsKLSAgICAgICAgICAgIH0KLQkgICAgc3Vic2NyaXB0ID0gY2hrYXJyYXko dmJpLGQpOyAvKiBDaGVjayB0aGUgYXJyYXkgKi8KLSAgICAgICAgICAgIGlmIChzdWJzY3JpcHQg Pj0gMCkgewkvKiBBcnJheSBpcyBkZWNsYXJlZD8gKi8KLSAgICAgICAgICAgICAgICB2YmkgLT0g QVJSQVlCQVNFOyAgICAgICAvKiBDb252ZXJ0IG5hbWUgdG8gaW5kZXggKi8KLSAgICAgICAgICAg ICAgICBpZiAoYV9kaW1bdmJpXSA+PSBkKSB7ICAvKiBJZiBzdWJzY3JpcHQgaW4gcmFuZ2UgKi8K LSAgICAgICAgICAgICAgICAgICAgY2hhciAqKmFwOwotICAgICAgICAgICAgICAgICAgICBhcCA9 IGFfcHRyW3ZiaV07ICAgIC8qIGdldCBkYXRhIHBvaW50ZXIgKi8KLSAgICAgICAgICAgICAgICAg ICAgaWYgKGFwKSB7ICAgICAgICAgICAvKiBhbmQgaWYgdGhlcmUgaXMgb25lICovCi0gICAgICAg ICAgICAgICAgICAgICAgICBwID0gYXBbZF07CS8qIHJldHVybiBpdCAqLwotICAgICAgICAgICAg ICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7CQkJLyogQXJyYXkgbm90IGRlY2xhcmVkIG9y IGVsZW1lbnQgKi8KLSAgICAgICAgICAgICAgICBmbnZhbFswXSA9IE5VTDsJCS8qIG91dCBvZiBy YW5nZSAtIHJldHVybiBudWxsIHN0cmluZyAqLwotICAgICAgICAgICAgICAgIHAgPSBmbnZhbDsJ CS8qIGZkYyAyMDEwLTEyLTMwICovCi0gICAgICAgICAgICAgICAgZ290byBmbmVuZDsJCi0gICAg ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmYWlsZWQgPSAxOwotICAg ICAgICAgICAgcCA9IGZudmFsOwotICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCi0gICAgICAgICAg ICAgIHNwcmludGYoZm52YWwsIjxFUlJPUjpBUkdfTk9UX1ZBUklBQkxFOlxcZmNvbnRlbnRzKCk+ Iik7Ci0gICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICB9Ci0gICAgfQotICAgIHAgPSBm bnZhbDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgcmVzdWx0IHBvaW50ZXIg Ki8KLSAgICBmbnZhbFswXSA9IE5VTDsgICAgICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IHJl c3VsdCA9IGVtcHR5IHN0cmluZyAqLwotCi0gICAgZm9yIChpID0gMDsgaSA8IGFyZ247IGkrKykg eyAgICAgICAgLyogTG9vcCB0byBleHBhbmQgZWFjaCBhcmd1bWVudCAqLwotICAgICAgICBuID0g TUFYQVJHTEVOOyAgICAgICAgICAgICAgICAgIC8qIEFsbG93IHBsZW50eSBvZiBzcGFjZSAqLwot ICAgICAgICBicFtpXSA9IHMgPSBtYWxsb2MobisxKTsgICAgICAgIC8qIEFsbG9jYXRlIHNwYWNl IGZvciB0aGlzIGFyZ3VtZW50ICovCi0gICAgICAgIGlmIChicFtpXSA9PSBOVUxMKSB7ICAgICAg ICAgICAgLyogSGFuZGxlIGZhaWx1cmUgdG8gZ2V0IHNwYWNlICovCi0gICAgICAgICAgICBmYWls ZWQgPSAxOwotICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCi0gICAgICAgICAgICAgIGNrbWFrbXNn KGZudmFsLEZOVkFMTCwiPEVSUk9SOk1BTExPQ19GQUlMVVJFOlxcZiIsZm4sIigpPiIsTlVMTCk7 Ci0gICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICB9Ci0gICAgICAgIHAgPSBhcmdwW2ld ID8gYXJncFtpXSA6ICIiOyAgICAgLyogUG9pbnQgdG8gdGhpcyBhcmd1bWVudCAqLwotCi0vKgot ICBUcmltIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcyBmcm9tIHRoZSBvcmlnaW5hbCBhcmd1 bWVudCwgYmVmb3JlCi0gIGV2YWx1YXRpb24uICBUaGlzIGNvZGUgbmV3IHRvIGVkaXQgMTg0LiAg Rml4ZWQgaW4gZWRpdCAxOTkgdG8gdHJpbQotICBibGFua3MgQkVGT1JFIHN0cmlwcGluZyBicmFj ZXMuCi0KLSovCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB4LCBqOwotICAgICAgICAgICAg eCA9IHN0cmxlbihwKTsKLSAgICAgICAgICAgIGogPSB4IC0gMTsgICAgICAgICAgICAgICAgICAv KiBUcmltIHRyYWlsaW5nIHdoaXRlc3BhY2UgKi8KLSAgICAgICAgICAgIHdoaWxlIChqID4gMCAm JiAoKihwICsgaikgPT0gU1AgfHwgKihwICsgaikgPT0gSFQpKQotICAgICAgICAgICAgICAqKHAg KyBqLS0pID0gTlVMOwotICAgICAgICAgICAgd2hpbGUgKCpwID09IFNQIHx8ICpwID09IEhUKSAv KiBTdHJpcCBsZWFkaW5nIHdoaXRlc3BhY2UgKi8KLSAgICAgICAgICAgICAgcCsrOwotICAgICAg ICAgICAgeCA9IHN0cmxlbihwKTsKLSAgICAgICAgICAgIGlmICgqcCA9PSAneycgJiYgKihwK3gt MSkgPT0gJ30nKSB7IC8qIE5PVyBzdHJpcCBicmFjZXMgKi8KLSAgICAgICAgICAgICAgICBwW3gt MV0gPSBOVUw7Ci0gICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgICAgIHggLT0gMjsK LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0vKiBOb3cgZXZhbHVhdGUgdGhlIGFyZ3VtZW50 ICovCi0KLSAgICAgICAgZGVidWcoRjExMSwiZm5ldmFsIGNhbGxpbmcgenpzdHJpbmciLHAsbik7 Ci0gICAgICAgIHQgPSB6enN0cmluZyhwLCZzLCZuKTsgICAgICAgICAgLyogRXhwYW5kIGFyZyBp bnRvIG5ldyBzcGFjZSAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJmbmV2YWwgenpzdHJpbmciLCIi LHQpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJmbmV2YWwgenpzdHJpbmciLCIiLG4pOwotICAgICAg ICBpZiAodCA8IDApIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsImZuZXZhbCB6enN0cmluZyBm YWlscywgYXJnIiwiIixpKTsKLSAgICAgICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICBp ZiAoZm5kaWFncykgewotICAgICAgICAgICAgICAgIGlmIChuID09IDApCi0gICAgICAgICAgICAg ICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAi PEVSUk9SOkFSR19UT09fTE9ORzpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAgICAgICAgICAg IGVsc2UKLSAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJHX0VWQUxfRkFJTFVSRTpcXGYiLGZuLCIoKT4i LE5VTEwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAg fQotICAgICAgICBkZWJ1ZyhGMTExLCJmbmV2YWwgYXJnIixicFtpXSxpKTsKLSAgICB9Ci0KLSNp ZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsKLSAgICAgICAgaW50IGo7Ci0gICAgICAgIGZv ciAoaiA9IDA7IGogPCBhcmduOyBqKyspIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImZuZXZh bCBhcmcgcG9zdCBldmFsIixhcmdwW2pdLGopOwotICAgICAgICAgICAgZGVidWcoRjExMSwiZm5l dmFsIGV2YWx1YXRlZCBhcmciLGJwW2pdLGopOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8q IERFQlVHICovCi0gICAgewotCS8qIEFkanVzdCBhcmduIGZvciBlbXB0eSB0cmFpbGluZyBhcmd1 bWVudHMuICovCi0JLyogRm9yIGV4YW1wbGUgd2hlbiBhbiBhcmcgaXMgYSB2YXJpYWJsZSBuYW1l IGJ1dCB0aGUgKi8KLQkvKiB2YXJpYWJsZSBoYXMgbm8gdmFsdWUuICAgSnVseSAyMDA2LiAqLwot CWludCBqLCBvbGQ7IGNoYXIgKnA7Ci0Jb2xkID0gYXJnbjsKLQlmb3IgKGogPSBhcmduIC0gMTsg aiA+PSAwOyBqLS0pIHsKLQkgICAgcCA9IGJwW2pdOwotCSAgICBpZiAoIXApCi0JICAgICAgYXJn bi0tOwotCSAgICBlbHNlIGlmICghKnApCi0JICAgICAgYXJnbi0tOwotCSAgICBlbHNlCi0JICAg ICAgYnJlYWs7Ci0JfQotI2lmZGVmIERFQlVHCi0JaWYgKGFyZ24gIT0gb2xkKQotCSAgZGVidWco RjEwMSwiZm5ldmFsIGFkanVzdGVkIGFyZ24iLCIiLGFyZ24pOwotI2VuZGlmCS8qIERFQlVHICov Ci0gICAgfQkKLQotLyoKLSAgRnJvbSB0aGlzIHBvaW50IG9uLCBicFswLi5hcmduLTFdIGFyZSBu b3QgTlVMTCBhbmQgYWxsIG11c3QgYmUgZnJlZWQKLSAgYmVmb3JlIHJldHVybmluZy4KLSovCi0g ICAgaWYgKGFyZ24gPCAxKSB7ICAgICAgICAgICAgICAgICAgICAgLyogQ2F0Y2ggcmVxdWlyZWQg YXJncyBtaXNzaW5nICovCi0gICAgICAgIHN3aXRjaCAoY3gpIHsKLSAgICAgICAgICBjYXNlIEZO X0RFRjoKLSAgICAgICAgICBjYXNlIEZOX0VWQToKLSAgICAgICAgICBjYXNlIEZOX0VYRToKLSAg ICAgICAgICBjYXNlIEZOX0NIUjoKLSAgICAgICAgICBjYXNlIEZOX0NPRDoKLSAgICAgICAgICBj YXNlIEZOX01BWDoKLSAgICAgICAgICBjYXNlIEZOX01JTjoKLSAgICAgICAgICBjYXNlIEZOX01P RDoKLSAgICAgICAgICBjYXNlIEZOX0ZEOgotICAgICAgICAgIGNhc2UgRk5fRlM6Ci0gICAgICAg ICAgY2FzZSBGTl9UT0Q6Ci0gICAgICAgICAgY2FzZSBGTl9GRk46Ci0gICAgICAgICAgY2FzZSBG Tl9CU046Ci0gICAgICAgICAgY2FzZSBGTl9SQVc6Ci0gICAgICAgICAgY2FzZSBGTl9DTUQ6Ci0g ICAgICAgICAgY2FzZSBGTl8ySEVYOgotICAgICAgICAgIGNhc2UgRk5fMk9DVDoKLSAgICAgICAg ICBjYXNlIEZOX0ROQU06Ci0jaWZkZWYgRk5fRVJSTVNHCi0gICAgICAgICAgY2FzZSBGTl9FUlJN U0c6Ci0jZW5kaWYgLyogRk5fRVJSTVNHICovCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSAgICAgICAg ICBjYXNlIEZOX0tSQl9USzoKLSAgICAgICAgICBjYXNlIEZOX0tSQl9OWDoKLSAgICAgICAgICBj YXNlIEZOX0tSQl9JVjoKLSAgICAgICAgICBjYXNlIEZOX0tSQl9UVDoKLSAgICAgICAgICBjYXNl IEZOX0tSQl9GRzoKLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotICAgICAgICAgIGNhc2UgRk5f TUpEMjoKLSAgICAgICAgICBjYXNlIEZOX04yVElNOgotICAgICAgICAgIGNhc2UgRk5fRElNOgot ICAgICAgICAgIGNhc2UgRk5fREFURUo6Ci0gICAgICAgICAgY2FzZSBGTl9QTkNWVDoKLSAgICAg ICAgICBjYXNlIEZOX1BFUk06Ci0gICAgICAgICAgY2FzZSBGTl9BTE9PSzoKLSAgICAgICAgICBj YXNlIEZOX1RMT09LOgotICAgICAgICAgIGNhc2UgRk5fQUJTOgotICAgICAgICAgIGNhc2UgRk5f QUFEVU1QOgotICAgICAgICAgIGNhc2UgRk5fSk9JTjoKLSNpZmRlZiBDS0ZMT0FUCi0gICAgICAg ICAgY2FzZSBGTl9GUEFCUzoKLSAgICAgICAgICBjYXNlIEZOX0ZQRVhQOgotICAgICAgICAgIGNh c2UgRk5fRlBMT0c6Ci0gICAgICAgICAgY2FzZSBGTl9GUExOOgotICAgICAgICAgIGNhc2UgRk5f RlBNT0Q6Ci0gICAgICAgICAgY2FzZSBGTl9GUFNRUjoKLSAgICAgICAgICBjYXNlIEZOX0ZQQURE OgotICAgICAgICAgIGNhc2UgRk5fRlBESVY6Ci0gICAgICAgICAgY2FzZSBGTl9GUE1VTDoKLSAg ICAgICAgICBjYXNlIEZOX0ZQUE9XOgotICAgICAgICAgIGNhc2UgRk5fRlBTVUI6Ci0gICAgICAg ICAgY2FzZSBGTl9GUElOVDoKLSAgICAgICAgICBjYXNlIEZOX0ZQUk9VOgotICAgICAgICAgIGNh c2UgRk5fRlBTSU46Ci0gICAgICAgICAgY2FzZSBGTl9GUENPUzoKLSAgICAgICAgICBjYXNlIEZO X0ZQVEFOOgotI2VuZGlmIC8qIENLRkxPQVQgKi8KLSNpZmRlZiBUQ1BTT0NLRVQKLSAgICAgICAg ICBjYXNlIEZOX0hTVEFERDoKLSAgICAgICAgICBjYXNlIEZOX0hTVE5BTToKLSNlbmRpZiAvKiBU Q1BTT0NLRVQgKi8KLSAgICAgICAgICBjYXNlIEZOX0RFTFNFQzoKLSNpZmRlZiBDT01NRU5UCi0g ICAgICAgICAgY2FzZSBGTl9LV1ZBTDoKLSAgICAgICAgICBjYXNlIEZOX1NMRUVQOgotICAgICAg ICAgIGNhc2UgRk5fTVNMRUVQOgotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNpZmRlZiBOVAotICAg ICAgICAgIGNhc2UgRk5fU05BTUU6Ci0gICAgICAgICAgY2FzZSBGTl9MTkFNRToKLSNlbmRpZiAv KiBOVCAqLwotICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAgICAgIHAgPSBmbnZhbDsK LSAgICAgICAgICAgIGlmIChmbmRpYWdzKQotICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxG TlZBTEwsIjxFUlJPUjpNSVNTSU5HX0FSRzpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAgICAg ICAgZ290byBmbmVuZDsKLSAgICAgICAgfQotICAgIH0KLSAgICBwID0gZm52YWw7ICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBSZXNldCB0aGVzZSBhZ2Fpbi4gKi8KLSAgICBmbnZhbFswXSA9 IE5VTDsKLQotICAgIHN3aXRjaCAoY3gpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIERvIGZ1 bmN0aW9uIG9uIGV4cGFuZGVkIGFyZ3MuICovCi0jaWZkZWYgVENQU09DS0VUCi0gICAgICBjYXNl IEZOX0hTVEFERDoKLSAgICAgICAgcCA9IGNrYWRkcjJuYW1lKGJwWzBdKTsKLSAgICAgICAgZ290 byBmbmVuZDsKLSAgICAgIGNhc2UgRk5fSFNUTkFNOgotICAgICAgICBwID0gY2tuYW1lMmFkZHIo YnBbMF0pOwotICAgICAgICBnb3RvIGZuZW5kOwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotCi0g ICAgICBjYXNlIEZOX0RFRjogICAgICAgICAgICAgICAgICAgICAgLyogXGZkZWZpbml0aW9uKGFy ZzEpICovCi0gICAgICAgIGsgPSBpc2FhcnJheShicFswXSkgPwotCSAgICBteHhsb29rKG1hY3Rh YixicFswXSxubWFjKSA6Ci0JCW14bG9vayhtYWN0YWIsYnBbMF0sbm1hYyk7Ci0gICAgICAgIHAg PSAoayA+IC0xKSA/IG1hY3RhYltrXS5tdmFsIDogIiI7Ci0gICAgICAgIGdvdG8gZm5lbmQ7Ci0K LSAgICAgIGNhc2UgRk5fRVZBOiAgICAgICAgICAgICAgICAgICAgICAvKiBcZmV2YWx1YXRlKGFy ZzEpICovCi0gICAgICAgIHAgPSAqKGJwWzBdKSA/IGV2YWx4KGJwWzBdKSA6ICIiOwotICAgICAg ICBpZiAoISpwICYmIGZuZGlhZ3MpIHsKLSAgICAgICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAg ICAgICBwID0gZm52YWw7Ci0gICAgICAgICAgICBldmFsZXJyKGZuKTsKLSAgICAgICAgfQotICAg ICAgICBnb3RvIGZuZW5kOwotCi0gICAgICBjYXNlIEZOX0VYRTogICAgICAgICAgICAgICAgICAg ICAgLyogXGZleGVjdXRlKGFyZzEpICovCi0gICAgICAgIGogPSAoaW50KXN0cmxlbihzID0gYnBb MF0pOyAgICAgLyogTGVuZ3RoIG9mIG1hY3JvIGludm9jYXRpb24gKi8KLSAgICAgICAgcCA9ICIi OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHJldHVybiB2YWx1ZSB0byBu dWxsICovCi0gICAgICAgIGlmIChqKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgdGhl cmUgaXMgYSBtYWNybyB0byBleGVjdXRlICovCi0gICAgICAgICAgICB3aGlsZSAoKnMgPT0gU1Ap IHMrKyxqLS07ICAgLyogc3RyaXAgbGVhZGluZyBzcGFjZXMgKi8KLSAgICAgICAgICAgIHAgPSBz OyAgICAgICAgICAgICAgICAgICAgICAvKiByZW1lbWJlciBiZWdpbm5pbmcgb2YgbWFjcm8gbmFt ZSAqLwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGo7IGkrKykgeyAgIC8qIGZpbmQgZW5k IG9mIG1hY3JvIG5hbWUgKi8KLSAgICAgICAgICAgICAgICBpZiAoKnMgPT0gU1ApCi0gICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBzKys7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgICAgICBpZiAoKnMgPT0gU1ApICAgICAgIHsgICAgICAgLyogaWYgdGhlcmUgd2FzIGEg c3BhY2UgYWZ0ZXIgKi8KLSAgICAgICAgICAgICAgICAqcysrID0gTlVMOyAgICAgICAgICAgICAv KiB0ZXJtaW5hdGUgdGhlIG1hY3JvIG5hbWUgKi8KLSAgICAgICAgICAgICAgICB3aGlsZSAoKnMg PT0gU1ApIHMrKzsgICAvKiBza2lwIHBhc3QgYW55IGV4dHJhIHNwYWNlcyAqLwotICAgICAgICAg ICAgfSBlbHNlCi0gICAgICAgICAgICAgIHMgPSAiIjsgICAgICAgICAgICAgICAgICAgLyogbWF5 YmUgdGhlcmUgYXJlIG5vIGFyZ3VtZW50cyAqLwotICAgICAgICAgICAgaWYgKHAgJiYgKnApIHsK LSAgICAgICAgICAgICAgICBrID0gbWxvb2sobWFjdGFiLHAsbm1hYyk7IC8qIExvb2sgdXAgdGhl IG1hY3JvIG5hbWUgKi8KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJmZXhlYyBtbG9vayIs cCxrKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICBrID0gLTE7Ci0gICAgICAg ICAgICBpZiAoayA8IDApIHsKLSAgICAgICAgICAgICAgICBjaGFyICogcDIgPSBwOwotICAgICAg ICAgICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICAgICAgcCA9IGZudmFsOwotICAgICAg ICAgICAgICAgIGlmIChmbmRpYWdzKQotICAgICAgICAgICAgICAgICAgY2ttYWt4bXNnKGZudmFs LEZOVkFMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOk5PX1NVQ0hfTUFD Uk86XFxmIixmbiwiKCIscDIsIik+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM LE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICAgICAgICAgICAgICBnb3RvIGZu ZW5kOwotICAgICAgICAgICAgfQotLyoKLSAgVGhpcyBpcyBqdXN0IGEgV0VFIGJpdCBkYW5nZXJv dXMgYmVjYXVzZSB3ZSBhcmUgY29weWluZyB1cCB0byA5IGFyZ3VtZW50cwotICBpbnRvIHRoZSBz cGFjZSByZXNlcnZlZCBmb3Igb25lLiAgSXQgd29uJ3Qgb3ZlcnJ1biB0aGUgYnVmZmVyLCBidXQg aWYgdGhlcmUKLSAgYXJlIGxvdHMgb2YgbG9uZyBhcmd1bWVudHMgd2UgbWlnaHQgbG9zZSBzb21l LiAgVGhlIG90aGVyIHByb2JsZW0gaXMgdGhhdCBpZgotICB0aGUgbWFjcm8gaGFzIG1vcmUgdGhh biAzIGFyZ3VtZW50cywgdGhlIDR0aCB0aHJvdWdoIGxhc3QgYXJlIGFsbAotICBjb25jYXRlbmF0 ZWQgb250byB0aGUgdGhpcmQuICAoVGhlIHdvcmthcm91bmQgaXMgdG8gdXNlIHNwYWNlcyByYXRo ZXIgdGhhbgotICBjb21tYXMgdG8gc2VwYXJhdGUgdGhlbS4pICBMZWF2aW5nIGl0IGxpa2UgdGhp cyB0byBhdm9pZCBoYXZpbmcgdG8gYWxsb2NhdGUKLSAgdG9ucyBtb3JlIGJ1ZmZlcnMuCi0qLwot ICAgICAgICAgICAgaWYgKGFyZ24gPiAxKSB7ICAgICAgICAgICAgIC8qIENvbW1hcyB1c2VkIGlu c3RlYWQgb2Ygc3BhY2VzICovCi0gICAgICAgICAgICAgICAgaW50IGk7Ci0gICAgICAgICAgICAg ICAgY2hhciAqcCA9IGJwWzBdOyAgICAgICAgLyogUmV1c2UgdGhpcyBzcGFjZSAqLwotICAgICAg ICAgICAgICAgICpwID0gTlVMOyAgICAgICAgICAgICAgIC8qIE1ha2UgaW50byBkb2RvKCkgYXJn IGxpc3QgKi8KLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgYXJnbjsgaSsrKSB7Ci0g ICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdChwLGJwW2ldLE1BWEFSR0xFTik7Ci0gICAgICAg ICAgICAgICAgICAgIGNrc3RybmNhdChwLCIgIixNQVhBUkdMRU4pOwotICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICBzID0gYnBbMF07ICAgICAgICAgICAgICAvKiBQb2ludCB0byBu ZXcgbGlzdCAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcCA9ICIiOyAgICAgICAgICAg ICAgICAgICAgIC8qIEluaXRpYWxpemUgcmV0dXJuIHZhbHVlICovCi0gICAgICAgICAgICBpZiAo ayA+PSAwKSB7ICAgICAgICAgICAgICAgLyogSWYgbWFjcm8gZm91bmQgaW4gdGFibGUgKi8KLSAg ICAgICAgICAgICAgICAvKiBHbyBzZXQgaXQgdXAgKGxpa2UgRE8gY21kKSAqLwotICAgICAgICAg ICAgICAgIGlmICgoaiA9IGRvZG8oayxzLGNtZHN0a1tjbWRsdmxdLmNjZmxncykpID4gMCkgewot ICAgICAgICAgICAgICAgICAgICBpZiAoY21wdXNoKCkgPiAtMSkgeyAvKiBQdXNoIGNvbW1hbmQg cGFyc2VyIHN0YXRlICovCi0gICAgICAgICAgICAgICAgICAgICAgICBleHRlcm4gaW50IGlmYzsK LSAgICAgICAgICAgICAgICAgICAgICAgIGludCBpZmNzYXYgPSBpZmM7IC8qIFB1c2ggSUYgY29u ZGl0aW9uIG9uIHN0YWNrICovCi0gICAgICAgICAgICAgICAgICAgICAgICBrID0gcGFyc2VyKDEp OyAgLyogQ2FsbCBwYXJzZXIgdG8gZXhlY3V0ZSB0aGUgbWFjcm8gKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgIGNtcG9wKCk7ICAgICAgICAvKiBQb3AgY29tbWFuZCBwYXJzZXIgKi8KLSAgICAg ICAgICAgICAgICAgICAgICAgIGlmYyA9IGlmY3NhdjsgICAvKiBSZXN0b3JlIElGIGNvbmRpdGlv biAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPT0gMCkgeyAgIC8qIE5vIGVycm9y cywgaWdub3JlIGFjdGlvbiBjbWRzLiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAg PSBtcnZhbFttYWNsdmwrMV07IC8qIElmIE9LLCBzZXQgcmV0dXJuIHZhbHVlLiAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChwID09IE5VTEwpIHAgPSAiIjsKLSAgICAgICAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAv KiBDYW4ndCBwdXNoIGFueSBtb3JlICovCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhG MTAwLCJ6enN0cmluZyBmbmV2YWwgZmV4ZWMgZmFpbHVyZSIsIiIsMCk7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBwcmludGYoIlxuP1xcZmV4ZWMoKSB0b28gZGVlcGx5IG5lc3RlZFxuIik7Ci0g ICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY21wb3AoKSA+IC0xKSA7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBwID0gIiI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZGVidWcoRjExMCwienpz dHJpbmcgZm5ldmFsIGZleGVjdXRlIGZpbmFsIHAiLHAsMCk7Ci0gICAgICAgIGdvdG8gZm5lbmQ7 Ci0KLSNpZmRlZiBSRUNVUlNJVkUKLSAgICAgIGNhc2UgRk5fUkRJUjogICAgICAgICAgICAgICAg ICAgICAvKiBcZnJkaXIuLigpIC0gUmVjdXJzaXZlIGRpciBjb3VudCAqLwotICAgICAgY2FzZSBG Tl9SRklMOiAgICAgICAgICAgICAgICAgICAgIC8qIFxmcmZpbGVzKCkgLSBSZWN1cnNpdmUgZmls ZSBjb3VudCAqLwotICAgICAgICAvKiByZWN1cnNpdmUgPSAyOyAqLyAgICAgICAgICAgIC8qIGZh bGwgdGhydS4uLiAqLwotI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLwotICAgICAgY2FzZSBGTl9GQzog ICAgICAgICAgICAgICAgICAgICAgIC8qIFxmZmlsZXMoKSAtIEZpbGUgY291bnQuICovCi0gICAg ICBjYXNlIEZOX0RJUjogeyAgICAgICAgICAgICAgICAgICAgLyogXGZmZGlyLigpIC0gRGlyZWN0 b3J5IGNvdW50LiAqLwotICAgICAgICAgIGNoYXIgYWJ1ZlsxNl0sICpzOwotICAgICAgICAgIGNo YXIgKiogYXAgPSBOVUxMOwotICAgICAgICAgIGludCB4LCB4ZmxhZ3MgPSAwOwotICAgICAgICAg IGlmIChtYXRjaGRvdCkKLSAgICAgICAgICAgIHhmbGFncyB8PSBaWF9NQVRDSERPVDsKLSAgICAg ICAgICBpZiAoY3ggPT0gRk5fUkRJUiB8fCBjeCA9PSBGTl9SRklMKSB7Ci0gICAgICAgICAgICAg IHhmbGFncyB8PSBaWF9SRUNVUlNFOwotI2lmZGVmIENLU1lNTElOSwotICAgICAgICAgICAgICAv KiBSZWN1cnNpdmUgLSBkb24ndCBmb2xsb3cgc3ltbGlua3MgKi8KLSAgICAgICAgICAgICAgeGZs YWdzIHw9IFpYX05PTElOS1M7Ci0jZW5kaWYgLyogQ0tTWU1MSU5LICovCi0gICAgICAgICAgfQot ICAgICAgICAgIGZhaWxlZCA9IDA7Ci0gICAgICAgICAgaWYgKGFyZ24gPCAxKSB7Ci0gICAgICAg ICAgICAgIHAgPSAiMCI7Ci0gICAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgfQot ICAgICAgICAgIGlmIChjeCA9PSBGTl9ESVIgfHwgY3ggPT0gRk5fUkRJUikgeyAvKiBPbmx5IGxp c3QgZGlyZWN0b3JpZXMgKi8KLQkgICAgICBkZWJ1ZyhGMTAwLCJGTl9ESVIgb3IgRk5fUkRJUiIs IiIsMCk7Ci0gICAgICAgICAgICAgIHhmbGFncyB8PSBaWF9ESVJPTkxZOwotI2lmZGVmIE9TMgot ICAgICAgICAgICAgICB6eHBuID0gMTsgICAgICAgICAgICAgICAgIC8qIFVzZSB0aGUgYWx0ZXJu YXRlIGxpc3QgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICB9IGVsc2UgeyAgICAgICAg ICAgICAgICAgICAgICAvKiBMaXN0IG9ubHkgZmlsZXMgKi8KLQkgICAgICBkZWJ1ZyhGMTAwLCJO b3QgRk5fRElSIG9yIEZOX1JESVIiLCIiLDApOwotICAgICAgICAgICAgICB4ZmxhZ3MgfD0gWlhf RklMT05MWTsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgenhwbiA9IDE7ICAgICAgICAgICAg ICAgICAvKiBVc2UgdGhlIGFsdGVybmF0ZSBsaXN0ICovCi0jZW5kaWYgLyogT1MyICovCi0gICAg ICAgICAgfQotICAgICAgICAgIGlmICgqKGJwWzBdKSkgewotICAgICAgICAgICAgICBrID0gbnp4 cGFuZChicFswXSx4ZmxhZ3MpOwotICAgICAgICAgICAgICBpZiAoayA8IDApIGsgPSAwOwotICAg ICAgICAgICAgICBzcHJpbnRmKGZudmFsLCIlZCIsayk7ICAgIC8qIFNBRkUgKi8KLSAgICAgICAg ICAgICAgcCA9IGZudmFsOwotICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcCA9ICIwIjsK LQotICAgICAgICAgIGlmIChhcmduID4gMSkgeyAgICAgICAgICAgICAgIC8qIEFzc2lnbiBsaXN0 IHRvIGFycmF5ICovCi0gICAgICAgICAgICAgIGZudmFsWzBdID0gTlVMOyAgICAgICAgICAgLyog SW5pdGlhbCByZXR1cm4gdmFsdWUgKi8KLSAgICAgICAgICAgICAgY2tzdHJuY3B5KGFidWYsYnBb MV0sMTYpOyAvKiBHZXQgYXJyYXkgcmVmZXJlbmNlICovCi0gICAgICAgICAgICAgIHMgPSBhYnVm OwotICAgICAgICAgICAgICBpZiAoKnMgPT0gQ01EUSkgcysrOwotICAgICAgICAgICAgICBmYWls ZWQgPSAxOyAgICAgICAgICAgICAgIC8qIEFzc3VtZSBpdCdzIGJhZCAqLwotICAgICAgICAgICAg ICBwID0gZm52YWw7ICAgICAgICAgICAgICAgIC8qIFBvaW50IHRvIHJlc3VsdCAqLwotICAgICAg ICAgICAgICBpZiAoZm5kaWFncykgICAgICAgICAgICAgIC8qIERlZmF1bHQgaXMgdGhpcyBlcnJv ciBtZXNzYWdlICovCi0gICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotICAg ICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJHX0JBRF9BUlJBWTpcXGYiLGZuLCIoKT4i LE5VTEwpOwotICAgICAgICAgICAgICBpZiAoc1swXSAhPSAnJicpICAgICAgICAgIC8qICJBZGRy ZXNzIiBvZiBhcnJheSAqLwotICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAg ICAgIGlmIChzWzJdKQotICAgICAgICAgICAgICAgIGlmIChzWzJdICE9ICdbJyB8fCBzWzNdICE9 ICddJykKLSAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgICAgIGlmIChz WzFdID49IDY0ICYmIHNbMV0gPCA5MSkgLyogQ29udmVydCB1cHBlciB0byBsb3dlciAqLwotICAg ICAgICAgICAgICAgIHNbMV0gKz0gMzI7Ci0gICAgICAgICAgICAgIGlmICgoeCA9IGRjbGFycmF5 KHNbMV0saykpIDwgMCkgLyogRmlsZSBsaXN0IHBsdXMgY291bnQgKi8KLSAgICAgICAgICAgICAg ICBnb3RvIGZuZW5kOwotICAgICAgICAgICAgICBmYWlsZWQgPSAwOyAgICAgICAgICAgICAgIC8q IFVuc2V0IGZhaWx1cmUgZmxhZyAqLwotICAgICAgICAgICAgICBhcCA9IGFfcHRyW3hdOyAgICAg ICAgICAgIC8qIFBvaW50IHRvIGFycmF5IHdlIGp1c3QgZGVjbGFyZWQgKi8KLSAgICAgICAgICAg ICAgc3ByaW50ZihmbnZhbCwiJWQiLGspOyAgICAvKiBTQUZFICovCi0gICAgICAgICAgfQotI2lm ZGVmIE9TMgotICAgICAgICAgIGlmIChhcCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIFdlIGFy ZSBtYWtpbmcgYW4gYXJyYXkgKi8KLSAgICAgICAgICAgICAgaW50IGk7Ci0gICAgICAgICAgICAg IGNoYXIgdG1wWzE2XTsKLSAgICAgICAgICAgICAgYXBbMF0gPSBOVUxMOyAgICAgICAgICAgICAv KiBDb250YWluaW5nIG51bWJlciBvZiBmaWxlcyAgICAqLwotICAgICAgICAgICAgICBtYWtlc3Ry KCYoYXBbMF0pLGNraXRvYShrKSk7Ci0KLSAgICAgICAgICAgICAgY2tzdHJuY3B5KHRtcCxmbnZh bCwxNik7ICAvKiBTYXZlIHJldHVybiB2YWx1ZSAqLwotCi0gICAgICAgICAgICAgIGZvciAoaSA9 IDE7IGkgPD0gazsgaSsrKSB7IC8qIEZpbGwgaXQgKi8KLSAgICAgICAgICAgICAgICAgIGFwW2ld ID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgIHpuZXh0KGZudmFsKTsgICAgICAgICAvKiBOZXh0 IGZpbGVuYW1lICovCi0gICAgICAgICAgICAgICAgICBpZiAoISpmbnZhbCkgICAgICAgICAgLyog Tm8gbW9yZSwgZG9uZSAqLwotICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAg IC8qIEluIGNhc2UgYSBwcmVtYXR1cmUgZW5kICovCi0gICAgICAgICAgICAgICAgICBtYWtlc3Ry KCYoYXBbaV0pLGZudmFsKTsKLSAgICAgICAgICAgICAgfQotI2lmZGVmIFpYUkVXSU5ECi0gICAg ICAgICAgICAgIGsgPSB6eHJld2luZCgpOyAgICAgICAgICAgLyogUmVzZXQgdGhlIGZpbGUgZXhw YW5zaW9uICovCi0jZWxzZQotICAgICAgICAgICAgICBrID0gbnp4cGFuZChicFswXSx4ZmxhZ3Mp OwotI2VuZGlmIC8qIFpYUkVXSU5EICovCi0gICAgICAgICAgICAgIGNrc3RybmNweShmbnZhbCx0 bXAsRk5WQUxMKTsgLyogUmVzdG9yZSByZXR1cm4gdmFsdWUgKi8KLSAgICAgICAgICB9Ci0jZWxz ZSAvKiBPUzIgKi8KLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBN YWtlIGNvcGllcyBvZiB0aGUgbGlzdCAqLwotICAgICAgICAgICAgICBpbnQgaTsgY2hhciB0bXBb MTZdOwotICAgICAgICAgICAgICBpZiAoZmxpc3QpIHsgICAgICAgICAgICAgIC8qIEZyZWUgb2xk IGZpbGUgbGlzdCwgaWYgYW55ICovCi0gICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBmbGlz dFtpXTsgaSsrKSB7IC8qIGFuZCBlYWNoIHN0cmluZyAqLwotICAgICAgICAgICAgICAgICAgICAg IGZyZWUoZmxpc3RbaV0pOwotICAgICAgICAgICAgICAgICAgICAgIGZsaXN0W2ldID0gTlVMTDsK LSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGZyZWUoKGNoYXIgKilmbGlz dCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgY2tzdHJuY3B5KHRtcCxmbnZhbCwx Nik7ICAvKiBTYXZlIG91ciByZXR1cm4gdmFsdWUgKi8KLSAgICAgICAgICAgICAgZmxpc3QgPSAo Y2hhciAqKikgbWFsbG9jKChrKzEpICogc2l6ZW9mKGNoYXIgKikpOyAvKiBOZXcgYXJyYXkgKi8K LSAgICAgICAgICAgICAgaWYgKGZsaXN0KSB7Ci0gICAgICAgICAgICAgICAgICBmb3IgKGkgPSAw OyBpIDw9IGs7IGkrKykgeyAvKiBGaWxsIGl0ICovCi0gICAgICAgICAgICAgICAgICAgICAgZmxp c3RbaV0gPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgIHpuZXh0KGZudmFsKTsgICAgIC8q IE5leHQgZmlsZW5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgICBpZiAoISpmbnZhbCkgICAg ICAvKiBObyBtb3JlLCBkb25lICovCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCYoZmxpc3RbaV0pLGZudmFsKTsKLSAgICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGlmIChhcCkgeyAgICAgICAgICAgICAvKiBJ ZiBhcnJheSBwb2ludGVyIGdpdmVuICovCi0gICAgICAgICAgICAgICAgICAgICAgYXBbMF0gPSBO VUxMOwotICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJihhcFswXSksY2tpdG9hKGspKTsK LSAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgazsgaSsrKSB7IC8qIENvcHkg ZmlsZSBsaXN0IHRvIGFycmF5ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGFwW2krMV0g PSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCYoYXBbaSsxXSksZmxp c3RbaV0pOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICBja3N0cm5jcHkoZm52YWwsdG1wLEZOVkFMTCk7 IC8qIFJlc3RvcmUgcmV0dXJuIHZhbHVlICovCi0gICAgICAgICAgICAgIGZsaXN0biA9IDA7ICAg ICAgICAgICAgICAgLyogUmVzZXQgZ2xvYmFsIGxpc3QgcG9pbnRlciAqLwotICAgICAgICAgIH0K LSNlbmRpZiAvKiBPUzIgKi8KLSNpZmRlZiBSRUNVUlNJVkUKLSAgICAgICAgICByZWN1cnNpdmUg PSByc2F2ZTsKLSNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KLSNpZmRlZiBPUzIKLSAgICAgICAgICB6 eHBuID0genNhdmU7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICB9Ci0gICAgICBnb3RvIGZuZW5k OwotCi0gICAgICBjYXNlIEZOX0ZJTDogICAgICAgICAgICAgICAgICAgICAgLyogXGZuZXh0Zmls ZSgpIC0gTmV4dCBmaWxlIGluIGxpc3QuICovCi0gICAgICAgIHAgPSBmbnZhbDsgICAgICAgICAg ICAgICAgICAgICAgLyogKG5vIGFyZ3MpICovCi0gICAgICAgICpwID0gTlVMOwotI2lmZGVmIE9T MgotICAgICAgICB6eHBuID0gMTsgICAgICAgICAgICAgICAgICAgICAgIC8qIE9TLzIgLSB1c2Ug dGhlIGFsdGVybmF0ZSBsaXN0ICovCi0gICAgICAgIHpuZXh0KHApOyAgICAgICAgICAgICAgICAg ICAgICAgLyogQ2FsbCBzeXN0ZW0tZGVwZW5kZW50IGZ1bmN0aW9uICovCi0gICAgICAgIHp4cG4g PSB6c2F2ZTsgICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSBvcmlnaW5hbCBsaXN0ICovCi0j ZWxzZQotICAgICAgICBpZiAoZmxpc3QpICAgICAgICAgICAgICAgICAgICAgIC8qIE90aGVycywg dXNlIG91ciBvd24gbGlzdC4gKi8KLSAgICAgICAgICBpZiAoZmxpc3RbZmxpc3RuXSkKLQkgICAg cCA9IGZsaXN0W2ZsaXN0bisrXTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgZ290byBmbmVu ZDsKLQotICAgIH0gLyogQnJlYWsgdXAgYmlnIHN3aXRjaC4uLiAqLwotCi0gICAgc3dpdGNoIChj eCkgewotICAgICAgY2FzZSBGTl9JTkQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIFxmaW5kZXgo czEsczIsc3RhcnQsb2NjdXJyZW5jZSkgKi8KLSAgICAgIGNhc2UgRk5fUklYOiAgICAgICAgICAg ICAgICAgICAgICAvKiBcZnJpbmRleChzMSxzMixzdGFydCxvY2N1cnJlbmNlKSAqLwotICAgICAg Y2FzZSBGTl9TRUFSQ0g6ICAgICAgICAgICAgICAgICAgIC8qIFxmc2VhcmNoKHBhdCxzdHJpbmcs c3RhcnQsb2NjKSAqLwotICAgICAgY2FzZSBGTl9SU0VBUkNIOgkJCS8qIFxmcnNlYXJjaChwYXQs c3RyaW5nLHN0YXJ0LG9jYykgKi8KLSAgICAgIGNhc2UgRk5fQ09VTlQ6IHsJCQkvKiBcZmNvdW50 KHMxLHMyLHN0YXJ0KSAqLwotCWludCBpID0gMCwgcmlnaHQgPSAwLCBzZWFyY2ggPSAwLCBjb3Vu dCA9IDA7Ci0JaW50IGRlc2lyZWQgPSAxOwotICAgICAgICByaWdodCA9IChjeCA9PSBGTl9SSVgg fHwgY3ggPT0gRk5fUlNFQVJDSCk7Ci0gICAgICAgIHNlYXJjaCA9IChjeCA9PSBGTl9TRUFSQ0gg fHwgY3ggPT0gRk5fUlNFQVJDSCk7Ci0JY291bnQgPSAoY3ggPT0gRk5fQ09VTlQpOwotICAgICAg ICBwID0gIjAiOwotICAgICAgICBpZiAoYXJnbiA+IDEpIHsgICAgICAgICAgICAgICAgIC8qIE9u bHkgd29ya3MgaWYgd2UgaGF2ZSAyIG9yIDMgYXJncyAqLwotICAgICAgICAgICAgaW50IHN0YXJ0 ID0gMDsKLSAgICAgICAgICAgIGNoYXIgKiBwYXQgPSBOVUxMOwotICAgICAgICAgICAgbGVuMSA9 IChpbnQpc3RybGVuKHBhdCA9IGJwWzBdKTsgLyogbGVuZ3RoIG9mIHN0cmluZyB0byBsb29rIGZv ciAqLwotICAgICAgICAgICAgbGVuMiA9IChpbnQpc3RybGVuKHMgPSBicFsxXSk7IC8qIGxlbmd0 aCBvZiBzdHJpbmcgdG8gbG9vayBpbiAqLwotICAgICAgICAgICAgaWYgKGxlbjEgPCAxIHx8IGxl bjIgPCAxKSAgIC8qIFdhdGNoIG91dCBmb3IgZW1wdHkgc3RyaW5ncyAqLwotICAgICAgICAgICAg ICBnb3RvIGZuZW5kOwotICAgICAgICAgICAgc3RhcnQgPSByaWdodCA/IC0xIDogMDsgICAgIC8q IERlZmF1bHQgc3RhcnRpbmcgcG9zaXRpb24gKi8KLSAgICAgICAgICAgIGlmIChhcmduID4gMikg ewotICAgICAgICAgICAgICAgIHZhbDEgPSAqKGJwWzJdKSA/IGV2YWx4KGJwWzJdKSA6ICIxIjsK LQkJaWYgKGFyZ24gPiAzKSB7Ci0JCSAgICB2YWwyID0gKihicFszXSkgPyBldmFseChicFszXSkg OiAiMSI7Ci0JCSAgICBpZiAoY2hrbnVtKHZhbDIpKSBkZXNpcmVkID0gYXRvaSh2YWwyKTsKLQkJ ICAgIGlmIChkZXNpcmVkICogbGVuMSA+IGxlbjIpIGdvdG8gZm5lbmQ7Ci0JCX0KLSAgICAgICAg ICAgICAgICBpZiAoY2hrbnVtKHZhbDEpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCB0Owot ICAgICAgICAgICAgICAgICAgICB0ID0gYXRvaSh2YWwxKTsKLSAgICAgICAgICAgICAgICAgICAg aWYgKCFzZWFyY2gpIHsgICAgICAvKiBJbmRleCBvciBSaW5kZXggKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgIGogPSBsZW4yIC0gbGVuMTsgLyogTGVuZ3RoIGRpZmZlcmVuY2UgKi8KLSAgICAg ICAgICAgICAgICAgICAgICAgIHQtLTsgICAgICAgICAgICAgLyogQ29udmVydCBwb3NpdGlvbiB0 byAwLWJhc2VkICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA8IDApIHQgPSAwOwot ICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSB0OwotICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKCFyaWdodCAmJiBzdGFydCA8IDApIHN0YXJ0ID0gMDsKLSAgICAgICAgICAgICAgICAg ICAgfSBlbHNlIHsgICAgICAgICAgICAvKiBTZWFyY2ggb3IgUnNlYXJjaCAqLwotICAgICAgICAg ICAgICAgICAgICAgICAgaW50IHg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA8IDAp IHQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0KSB7ICAgIC8qIFJpZ2h0 IHRvIGxlZnQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA+IGxlbjIpIHQg PSBsZW4yOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gbGVuMiAtIHQgLSAx OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydCA8IDApCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHggPSBsZW4yIC0gdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzW3hdID0gTlVM OwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgIC8qIExlZnQgdG8gcmln aHQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHQgLSAxOwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMDsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPj0gbGVuMikKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg ICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgICAgICAgICBldmFsZXJyKGZuKTsKLSAg ICAgICAgICAgICAgICAgICAgcCA9IGZudmFsOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGZu ZW5kOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQkgICAgaWYgKGNvdW50KSB7 CQkvKiBcZmNvdW50KCkgKi8KLQkJaW50IGo7Ci0JCWZvciAoaSA9IDA7IHN0YXJ0IDwgbGVuMjsg aSsrKSB7Ci0JCSAgICBqID0gY2tpbmRleChwYXQsYnBbMV0sc3RhcnQsMCxpbnBjYXNbY21kbHZs XSk7Ci0JCSAgICBpZiAoaiA9PSAwKSBicmVhazsKLQkJICAgIHN0YXJ0ID0gajsKLQkJfQotCi0J ICAgIH0gZWxzZSBpZiAoc2VhcmNoKSB7CS8qIFxmc2VhcmNoKCkgb3IgXGZyc2VhcmNoKCkgKi8K LQotICAgICAgICAgICAgICAgIGlmIChyaWdodCAmJiBwYXRbMF0gPT0gJ14nKSB7Ci0gICAgICAg ICAgICAgICAgICAgIHJpZ2h0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSAwOwot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAocmlnaHQpIHsJCS8qIEZyb20g cmlnaHQgKi8KLQkJICAgIGludCBrLCBqID0gMTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0 YXJ0IDwgMCkKLQkJICAgICAgc3RhcnQgPSBsZW4yIC0gMTsKLQkJICAgIGkgPSAwOwotCQkgICAg d2hpbGUgKHN0YXJ0ID49IDAgJiYgaiA8PSBkZXNpcmVkKSB7Ci0JCQlmb3IgKGkgPSBzdGFydDsK LQkJCSAgICAgKGkgPj0gMCkgJiYgCi0JCQkJICEoayA9IGNrbWF0Y2gocGF0LHMraSxpbnBjYXNb Y21kbHZsXSwxKzQpKTsKLQkJCSAgICAgaS0tKSA7Ci0JCQlpZiAoayA8IDEpIHsJLyogTm8gbWF0 Y2ggKi8KLQkJCSAgICBpID0gMDsKLQkJCSAgICBicmVhazsKLQkJCX0KLQkJCWlmIChqID09IGRl c2lyZWQpIHsgLyogVGhlIG1hdGNoIHdlIHdhbnQ/ICovCi0JCQkgICAgaSArPSBrOwkvKiBZZXMs IHJldHVybiBzdHJpbmcgaW5kZXggKi8KLQkJCSAgICBicmVhazsKLQkJCX0KLQkJCWorKzsJCS8q IE5vLCBjb3VudCB0aGlzIG1hdGNoICovCi0JCQlzW2ldID0gTlVMOwkvKiBudWxsIGl0IG91dCAq LwotCQkJc3RhcnQgPSBpLTE7CS8qIG1vdmUgbGVmdCBhbmQgbG9vayBhZ2FpbiAqLwotCQkgICAg fQotCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsJCS8qIEZyb20gbGVmdCAqLwotCQkgICAgaW50 IGo7Ci0JCSAgICBpID0gMDsKLQkJICAgIGZvciAoaiA9IDE7IGogPD0gZGVzaXJlZCAmJiBzdGFy dCA8IGxlbjI7IGorKykgewotCQkJaSA9IGNrbWF0Y2gocGF0LCZzW3N0YXJ0XSxpbnBjYXNbY21k bHZsXSwxKzQpOwotCQkJaWYgKGkgPT0gMCB8fCBqID09IGRlc2lyZWQpIGJyZWFrOwotCQkJc3Rh cnQgKz0gaSArIDE7Ci0JCSAgICB9CQkJCi0JCSAgICBpZiAoaiA9PSBkZXNpcmVkICYmIGkgIT0g MCkKLQkJICAgICAgaSArPSBzdGFydDsKLQkJICAgIGVsc2UKLQkJICAgICAgaSA9IDA7Ci0gICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsJCQkvKiBpbmRleCBvciByaW5kZXgg Ki8KLQkJaW50IGogPSAwOwotCQlpID0gMDsKLQkJZm9yIChqID0gMTsgaiA8PSBkZXNpcmVkICYm IHN0YXJ0IDwgbGVuMjsgaisrKSB7Ci0JCSAgICBpID0gY2tpbmRleChwYXQsYnBbMV0sc3RhcnQs cmlnaHQsaW5wY2FzW2NtZGx2bF0pOwotCQkgICAgaWYgKGkgPT0gMCB8fCBqID09IGRlc2lyZWQp IGJyZWFrOwotCQkgICAgc3RhcnQgPSAocmlnaHQpID8gbGVuMiAtIGkgKyAxIDogaTsKLQkJfQot CQlpZiAoaiAhPSBkZXNpcmVkKQotCQkgIGkgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAg ICAgc3ByaW50ZihmbnZhbCwiJWQiLGkpOyAgICAgIC8qIFNBRkUgKi8KLSAgICAgICAgICAgIHAg PSBmbnZhbDsKLSAgICAgICAgfQotICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgfQotCi0gICAg ICBjYXNlIEZOX1JQTDogICAgICAgICAgICAgICAgICAgICAgLyogXGZyZXBsYWNlKHMxLHMyLHMz KSAqLwotICAgICAgLyoKLSAgICAgICAgcyA9IGJwWzBdID0gc291cmNlIHN0cmluZwotICAgICAg ICAgICAgYnBbMV0gPSBtYXRjaCBzdHJpbmcKLSAgICAgICAgICAgIGJwWzJdID0gcmVwbGFjZW1l bnQgc3RyaW5nCi0gICAgICAgICAgICBicFszXSA9IHdoaWNoIG9jY3VycmVuY2UgKGRlZmF1bHQg PSBhbGwpOwotICAgICAgICBwID0gZm52YWwgPSBkZXN0aW5hdGlvbiAocmVzdWx0KSBzdHJpbmcK LSAgICAgICovCi0gICAgICAgIGlmIChhcmduIDwgMSkgICAgICAgICAgICAgICAgICAgLyogTm90 aGluZyAqLwotICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgIGlmIChhcmduIDwgMikgeyAg ICAgICAgICAgICAgICAgLyogT25seSB3b3JrcyBpZiB3ZSBoYXZlIDIgb3IgMyBhcmdzICovCi0g ICAgICAgICAgICBja3N0cm5jcHkocCxicFswXSxGTlZBTEwpOwotICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgaW50IG9jY3VyID0gMCwgeHggPSAwLCBqMjsKLSAgICAgICAgICAgIGxlbjEg PSAoaW50KXN0cmxlbihicFswXSk7ICAvKiBsZW5ndGggb2Ygc3RyaW5nIHRvIGxvb2sgaW4gKi8K LSAgICAgICAgICAgIGxlbjIgPSAoaW50KXN0cmxlbihicFsxXSk7ICAvKiBsZW5ndGggb2Ygc3Ry aW5nIHRvIGxvb2sgZm9yICovCi0gICAgICAgICAgICBsZW4zID0gKGFyZ24gPCAzKSA/IDAgOiAo aW50KXN0cmxlbihicFsyXSk7IC8qIExlbiBvZiByZXBsYWNlbW50ICovCi0gICAgICAgICAgICBq ID0gbGVuMSAtIGxlbjIgKyAxOwotICAgICAgICAgICAgajIgPSBqOwotICAgICAgICAgICAgaWYg KGFyZ24gPiAzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoa251bShicFszXSkpIHsKLSAgICAg ICAgICAgICAgICAgICAgb2NjdXIgPSBhdG9pKGJwWzNdKTsKLSAgICAgICAgICAgICAgICB9IGVs c2UgewotICAgICAgICAgICAgICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgICAgICAg ICBpZiAoZm5kaWFncykKLSAgICAgICAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZB TEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpBUkdfTk9UX05VTUVS SUM6XFxmIixmbiwiKCk+IixOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsK LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiBJZiBhcmdz IG91dCBvZiB3aGFjay4uLiAqLwotICAgICAgICAgICAgaWYgKGogPCAxIHx8IGxlbjEgPT0gMCB8 fCBsZW4yID09IDApIHsKLSAgICAgICAgICAgICAgICBja3N0cm5jcHkocCxicFswXSxGTlZBTEwp OyAvKiBqdXN0IHJldHVybiBvcmlnaW5hbCBzdHJpbmcgKi8KLSAgICAgICAgICAgICAgICBwW0ZO VkFMTF0gPSBOVUw7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICByYWdhaW46 Ci0gICAgICAgICAgICAgICAgcyA9IGJwWzBdOyAgICAgICAgICAgICAgLyogUG9pbnQgdG8gYmVn aW5uaW5nIG9mIHN0cmluZyAqLwotICAgICAgICAgICAgICAgIHdoaWxlIChqLS0gPiAwKSB7ICAg ICAgIC8qIEZvciBlYWNoIGNoYXJhY3RlciAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNr c3RyY21wKGJwWzFdLHMsbGVuMixpbnBjYXNbY21kbHZsXSkgJiYKLSAgICAgICAgICAgICAgICAg ICAgICAgIChvY2N1ciA9PSAwIHx8IG9jY3VyID09ICsreHgpKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICBpZiAobGVuMykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNw eShwLGJwWzJdLEZOVkFMTCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcCArPSBsZW4z OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcyAr PSBsZW4yOyAgICAgIC8qIGFuZCBza2lwIHBhc3QgaXQuICovCi0gICAgICAgICAgICAgICAgICAg IH0gZWxzZSB7ICAgICAgICAgICAgLyogTm8sICovCi0gICAgICAgICAgICAgICAgICAgICAgICAq cCsrID0gKnMrKzsgICAgLyoganVzdCBjb3B5IHRoaXMgY2hhcmFjdGVyICovCi0gICAgICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgKnAgPSBOVUw7 Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCgqcCsrID0gKnMrKykpOwotICAgICAgICAgICAgICAg IGlmIChvY2N1ciA8IDApIHsgICAgICAgIC8qIGNoZWFwLi4uICovCi0gICAgICAgICAgICAgICAg ICAgIG9jY3VyID0geHggKyBvY2N1ciArIDE7Ci0gICAgICAgICAgICAgICAgICAgIHh4ID0gMDsK LSAgICAgICAgICAgICAgICAgICAgcCA9IGZudmFsOwotICAgICAgICAgICAgICAgICAgICBqID0g ajI7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChvY2N1ciA+IDApCi0gICAgICAgICAgICAgICAg ICAgICAgZ290byByYWdhaW47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg ICAgICB9Ci0gICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgZ290byBmbmVuZDsKLQotICAgICAg Y2FzZSBGTl9DSFI6ICAgICAgICAgICAgICAgICAgICAgIC8qIFxmY2hhcmFjdGVyKGFyZzEpICov Ci0gICAgICAgIHZhbDEgPSAqKGJwWzBdKSA/IGV2YWx4KGJwWzBdKSA6ICIiOwotICAgICAgICBp ZiAoY2hrbnVtKHZhbDEpKSB7ICAgICAgICAgICAgIC8qIE11c3QgYmUgbnVtZXJpYyAqLwotICAg ICAgICAgICAgaSA9IGF0b2kodmFsMSk7Ci0gICAgICAgICAgICBpZiAoaSA+PSAwICYmIGkgPCAy NTYpIHsgICAgLyogTXVzdCBiZSBhbiA4LWJpdCB2YWx1ZSAqLwotICAgICAgICAgICAgICAgIHAg PSBmbnZhbDsKLSAgICAgICAgICAgICAgICAqcCsrID0gKGNoYXIpIGk7Ci0gICAgICAgICAgICAg ICAgKnAgPSBOVUw7Ci0gICAgICAgICAgICAgICAgcCA9IGZudmFsOwotICAgICAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgICAgIGlmIChm bmRpYWdzKQotICAgICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpBUkdfT1VUX09GX1JBTkdFOlxcZiIsZm4sIigp PiIsTlVMTCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBm YWlsZWQgPSAxOwotICAgICAgICAgICAgZXZhbGVycihmbik7Ci0gICAgICAgIH0KLSAgICAgICAg Z290byBmbmVuZDsKLQotICAgICAgY2FzZSBGTl9DT0Q6ICAgICAgICAgICAgICAgICAgICAgIC8q IFxmY29kZShjaGFyKSAqLwotICAgICAgICBpZiAoKGludClzdHJsZW4oYnBbMF0pID4gMCkgewot ICAgICAgICAgICAgcCA9IGZudmFsOwotICAgICAgICAgICAgaSA9ICpicFswXTsKLSAgICAgICAg ICAgIHNwcmludGYocCwiJWQiLChpICYgMHhmZikpOyAvKiBTQUZFICovCi0gICAgICAgIH0gZWxz ZSBwID0gIjAiOwkJCS8qIENhbid0IGhhcHBlbiAqLwotICAgICAgICBnb3RvIGZuZW5kOwotCi0g ICAgICBjYXNlIEZOX0xFTjogICAgICAgICAgICAgICAgICAgICAgLyogXGZsZW5ndGgoYXJnMSkg Ki8KLSAgICAgICAgaWYgKGFyZ24gPiAwKSB7Ci0gICAgICAgICAgICBwID0gZm52YWw7Ci0gICAg ICAgICAgICBzcHJpbnRmKHAsIiVkIiwoaW50KXN0cmxlbihicFswXSkpOyAvKiBTQUZFICovCi0g ICAgICAgIH0gZWxzZSBwID0gIjAiOwotICAgICAgICBnb3RvIGZuZW5kOwotCi0gICAgICBjYXNl IEZOX0xPVzogICAgICAgICAgICAgICAgICAgICAgLyogXGZsb3dlcihhcmcxKSAqLwotICAgICAg ICBzID0gYnBbMF0gPyBicFswXSA6ICIiOwotICAgICAgICBwID0gZm52YWw7Ci0gICAgICAgIHdo aWxlICgqcykgewotICAgICAgICAgICAgaWYgKGlzdXBwZXIoKnMpKQotICAgICAgICAgICAgICAq cCA9IChjaGFyKSB0b2xvd2VyKCpzKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg KnAgPSAqczsKLSAgICAgICAgICAgIHArKzsgcysrOwotICAgICAgICB9Ci0gICAgICAgICpwID0g TlVMOwotICAgICAgICBwID0gZm52YWw7Ci0gICAgICAgIGdvdG8gZm5lbmQ7Ci0KLSAgICAgIGNh c2UgRk5fTUFYOiAgICAgICAgICAgICAgICAgICAgICAvKiBcZm1heChhcmcxLGFyZzIpICovCi0g ICAgICBjYXNlIEZOX01JTjogICAgICAgICAgICAgICAgICAgICAgLyogXGZtaW4oYXJnMSxhcmcy KSAqLwotICAgICAgY2FzZSBGTl9NT0Q6ICAgICAgICAgICAgICAgICAgICAgIC8qIFxmbW9kKGFy ZzEsYXJnMikgKi8KLSAgICAgICAgdmFsMSA9ICooYnBbMF0pID8gZXZhbHgoYnBbMF0pIDogIiI7 Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAvKiBObyBsb25nZXIgbmVjZXNzYXJ5IGJlY2F1c2Ug ZXZhbHgoKSBubyBsb25nZXIgb3ZlcndyaXRlcyBpdHMgKi8KLSAgICAgICAgLyogcmVzdWx0IGV2 ZXJ5IHRpbWUgaXQncyBjYWxsZWQgKDIwMDAvMDkvMjMpLiAqLwotICAgICAgICBmcmVlKGJwWzBd KTsKLSAgICAgICAgYnBbMF0gPSBOVUxMOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAg aWYgKGFyZ24gPiAxKSB7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgLyogRGl0dG8uLi4g Ki8KLSAgICAgICAgICAgIGJwWzBdID0gbWFsbG9jKChpbnQpc3RybGVuKHZhbDEpKzEpOwotICAg ICAgICAgICAgaWYgKGJwWzBdKQotICAgICAgICAgICAgICBzdHJjcHkoYnBbMF0sdmFsMSk7ICAg ICAgIC8qIHNhZmUgKi8KLSAgICAgICAgICAgIHZhbDEgPSBicFswXTsKLSNlbmRpZiAvKiBDT01N RU5UICovCi0gICAgICAgICAgICB2YWwyID0gKihicFsxXSkgPyBldmFseChicFsxXSkgOiAiIjsK LSAgICAgICAgICAgIGlmIChjaGtudW0odmFsMSkgJiYgY2hrbnVtKHZhbDIpKSB7Ci0gICAgICAg ICAgICAgICAgaSA9IGF0b2kodmFsMSk7Ci0gICAgICAgICAgICAgICAgaiA9IGF0b2kodmFsMik7 Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh5KSB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEZO X01BWDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGogPCBpKSBqID0gaTsKLSAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEZOX01JTjoKLSAgICAgICAg ICAgICAgICAgICAgaWYgKGogPiBpKSBqID0gaTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgICAgICBjYXNlIEZOX01PRDoKLSAgICAgICAgICAgICAgICAgICAgaWYg KGogPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChmbmRpYWdzKQotICAgICAgICAgICAgICAgICAgICAgICAgICBj a21ha21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICI8RVJST1I6RElWSURFX0JZX1pFUk86XFxmIixmbiwiKCk+IixOVUxMKTsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZm52YWxbMF0gPSBO VUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgICAgICAg ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICBqID0gaSAlIGo7Ci0gICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgICAgICAgICBzcHJp bnRmKHAsIiVkIixqKTsgICAgICAvKiBTQUZFICovCi0gICAgICAgICAgICB9IGVsc2UgewotICAg ICAgICAgICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICAgICAgZXZhbGVycihmbik7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBwID0gdmFsMTsKLSAgICAgICAgZ290byBmbmVu ZDsKLSAgICB9IC8qIEJyZWFrIHVwIGJpZyBzd2l0Y2guLi4gKi8KLQotICAgIHN3aXRjaCAoeSkg ewotICAgICAgY2FzZSBGTl9TVUI6ICAgICAgICAgICAgICAgICAgICAgIC8qIFxmc3Vic3RyKGFy ZzEsYXJnMixhcmczKSAqLwotICAgICAgY2FzZSBGTl9SSUc6ICAgICAgICAgICAgICAgICAgICAg IC8qIFxmcmlnaHQoYXJnMSxhcmcyKSAqLwotICAgICAgY2FzZSBGTl9MRUY6ICAgICAgICAgICAg ICAgICAgICAgIC8qIFxmbGVmdChhcmcxLGFyZzIpICovCi0gICAgICAgIGlmIChhcmduIDwgMSkK LSAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICB2YWwxID0gIiI7Ci0gICAgICAgIGlmIChh cmduID4gMSkKLSAgICAgICAgICBpZiAoKihicFsxXSkpCi0gICAgICAgICAgICB2YWwxID0gIGV2 YWx4KGJwWzFdKTsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIGlmIChicFsxXSkgZnJlZShicFsx XSk7ICAgICAgICAgLyogSGF2ZSB0byBjb3B5IHRoaXMgKi8KLSAgICAgICAgYnBbMV0gPSBtYWxs b2MoKGludClzdHJsZW4odmFsMSkrMSk7Ci0gICAgICAgIGlmICghYnBbMV0pIHsKLSAgICAgICAg ICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICBpZiAoZm5kaWFncykgewotICAgICAgICAgICAg ICAgIHAgPSBmbnZhbDsKLSAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpNQUxMT0NfRkFJTFVSRTpcXGYiLGZuLCIo KT4iLE5VTEwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAg ICAgfQotICAgICAgICBzdHJjcHkoYnBbMV0sdmFsMSk7ICAgICAgICAgICAgIC8qIHNhZmUgKi8K LSAgICAgICAgdmFsMSA9IGJwWzFdOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgdmFs MiA9ICIiOwotICAgICAgICBpZiAoYXJnbiA+IDIpCi0gICAgICAgICAgaWYgKCooYnBbMl0pKQot ICAgICAgICAgICAgdmFsMiA9IGV2YWx4KGJwWzJdKTsKLSAgICAgICAgaWYgKAotICAgICAgICAg ICAgKChhcmduID4gMSkgJiYgKGludClzdHJsZW4odmFsMSkgJiYgIXJkaWdpdHModmFsMSkpIHx8 Ci0gICAgICAgICAgICAoKGN4ID09IEZOX1NVQikgJiYKLSAgICAgICAgICAgICAgKChhcmduID4g MikgJiYgKGludClzdHJsZW4odmFsMikgJiYgIXJkaWdpdHModmFsMikpKQotICAgICAgICAgICAg KSB7Ci0gICAgICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgZXZhbGVycihmbik7Ci0g ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbnQgbHg7Ci0gICAgICAgICAgICBwID0gZm52 YWw7ICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byByZXN1bHQgKi8KLSAgICAgICAgICAg IGx4ID0gc3RybGVuKGJwWzBdKTsgICAgICAgICAvKiBsZW5ndGggb2YgYXJnMSAqLwotICAgICAg ICAgICAgaWYgKGN4ID09IEZOX1NVQikgeyAgICAgICAgIC8qIHN1YnN0cmluZyAqLwotICAgICAg ICAgICAgICAgIGsgPSAoYXJnbiA+IDIpID8gYXRvaSh2YWwyKSA6IE1BWEFSR0xFTjsgLyogbGVu Z3RoICovCi0gICAgICAgICAgICAgICAgaiA9IChhcmduID4gMSkgPyBhdG9pKHZhbDEpIDogMTsg Lyogc3RhcnQgcG9zIGZvciBzdWJzdHIgKi8KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY3ggPT0g Rk5fTEVGKSB7ICAvKiBsZWZ0ICovCi0gICAgICAgICAgICAgICAgayA9IChhcmduID4gMSkgPyBh dG9pKHZhbDEpIDogbHg7Ci0gICAgICAgICAgICAgICAgaiA9IDE7Ci0gICAgICAgICAgICB9IGVs c2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmlnaHQgKi8KLSAgICAgICAgICAg ICAgICBrID0gKGFyZ24gPiAxKSA/IGF0b2kodmFsMSkgOiBseDsgLyogbGVuZ3RoICovCi0gICAg ICAgICAgICAgICAgaiA9IGx4IC0gayArIDE7ICAgICAgICAgICAgICAgICAgLyogc3RhcnQgcG9z IGZvciByaWdodCAqLwotICAgICAgICAgICAgICAgIGlmIChqIDwgMSkgaiA9IDE7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgICAgICBpZiAoayA+IDAgJiYgaiA8PSBseCkgeyAgICAgICAgICAgICAg LyogaWYgc3RhcnQgcG9zIGluIHJhbmdlICovCi0gICAgICAgICAgICAgICAgcyA9IGJwWzBdK2ot MTsgICAgICAgICAgICAgICAgICAgLyogcG9pbnQgdG8gc291cmNlIHN0cmluZyAqLwotICAgICAg ICAgICAgICAgIGZvciAoaSA9IDA7IChpIDwgaykgJiYgKCpwKysgPSAqcysrKTsgaSsrKSA7ICAv KiBjb3B5ICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqcCA9IE5VTDsgICAgICAgICAg ICAgICAgICAgLyogdGVybWluYXRlIHRoZSByZXN1bHQgKi8KLSAgICAgICAgICAgIHAgPSBmbnZh bDsgICAgICAgICAgICAgICAgICAvKiBhbmQgcG9pbnQgdG8gaXQuICovCi0gICAgICAgIH0KLSAg ICAgICAgZ290byBmbmVuZDsKLQotICAgICAgY2FzZSBGTl9VUFA6ICAgICAgICAgICAgICAgICAg ICAgIC8qIFxmdXBwZXIoYXJnMSkgKi8KLSAgICAgICAgcyA9IGJwWzBdID8gYnBbMF0gOiAiIjsK LSAgICAgICAgcCA9IGZudmFsOwotICAgICAgICB3aGlsZSAoKnMpIHsKLSAgICAgICAgICAgIGlm IChpc2xvd2VyKCpzKSkKLSAgICAgICAgICAgICAgKnAgPSAoY2hhcikgdG91cHBlcigqcyk7Ci0g ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICpwID0gKnM7Ci0gICAgICAgICAgICBwKys7 IHMrKzsKLSAgICAgICAgfQotICAgICAgICAqcCA9IE5VTDsKLSAgICAgICAgcCA9IGZudmFsOwot ICAgICAgICBnb3RvIGZuZW5kOwotCi0gICAgICBjYXNlIEZOX1JFUDogICAgICAgICAgICAgICAg ICAgICAgLyogXGZyZXBlYXQodGV4dCxudW1iZXIpICovCi0gICAgICAgIGlmIChhcmduIDwgMSkK LSAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICB2YWwxID0gIjEiOwotICAgICAgICBpZiAo YXJnbiA+IDEpCi0gICAgICAgICAgaWYgKCooYnBbMV0pKQotICAgICAgICAgICAgdmFsMSA9IGV2 YWx4KGJwWzFdKTsKLSAgICAgICAgaWYgKGNoa251bSh2YWwxKSkgeyAgICAgICAgICAgICAvKiBS ZXBlYXQgY291bnQgKi8KLSAgICAgICAgICAgIG4gPSBhdG9pKHZhbDEpOwotICAgICAgICAgICAg ZGVidWcoRjExMSwiU1VOREFZIGZyZXBlYXQgbiIsdmFsMSxuKTsKLSAgICAgICAgICAgIGlmIChu ID4gMCkgeyAgICAgICAgICAgICAgICAvKiBNYWtlIG4gY29waWVzICovCi0gICAgICAgICAgICAg ICAgcCA9IGZudmFsOwotICAgICAgICAgICAgICAgICpwID0gJ1wwJzsKLSAgICAgICAgICAgICAg ICBrID0gKGludClzdHJsZW4oYnBbMF0pOyAvKiBNYWtlIHN1cmUgc3RyaW5nIGhhcyBzb21lIGxl bmd0aCAqLwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsIlNVTkRBWSBmcmVwZWF0IGsiLCIi LGspOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsIlNVTkRBWSBmcmVwZWF0IEZOVkFMTCIs IiIsRk5WQUxMKTsKLSAgICAgICAgICAgICAgICBpZiAoayAqIG4gPj0gRk5WQUxMKSB7ICAvKiBC dXQgbm90IHRvbyBtdWNoLi4uICovCi0gICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IDE7Ci0g ICAgICAgICAgICAgICAgICAgIGlmIChmbmRpYWdzKQotICAgICAgICAgICAgICAgICAgICAgIGNr bWFrbXNnKGZudmFsLEZOVkFMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPEVS Uk9SOlJFU1VMVF9UT09fTE9ORzpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAgICAgICAgICAg ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgZm52YWxbMF0gPSBOVUw7Ci0gICAgICAg ICAgICAgICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsK LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGsgPiAwKSB7ICAgICAgICAg ICAgLyogSWYgdGhlcmUgaXMgc29tZXRoaW5nIHRvIGNvcHkgKi8KLSAgICAgICAgICAgICAgICAg ICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeyAvKiBDb3B5IGxvb3AgKi8KLSAgICAgICAgICAg ICAgICAgICAgICAgIHMgPSBicFswXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9 IDA7IGogPCBrOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHAgLSBm bnZhbCkgPj0gRk5WQUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAg IC8qIHNob3VsZG4ndCBoYXBwZW4uLi4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBl bHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gKnMrKzsKLSAgICAgICAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg ICAgICAqcCA9IE5VTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgZXZhbGVycihm bik7Ci0gICAgICAgIH0KLSAgICAgICAgcCA9IGZudmFsOwotICAgICAgICBnb3RvIGZuZW5kOwot Ci0jaWZuZGVmIE5PRlJJTExTCi0gICAgICBjYXNlIEZOX1JFVjogICAgICAgICAgICAgICAgICAg ICAgLyogXGZyZXZlcnNlKCkgKi8KLSAgICAgICAgaWYgKGFyZ24gPCAxKQotICAgICAgICAgIGdv dG8gZm5lbmQ7Ci0gICAgICAgIHl5c3RyaW5nKGJwWzBdLCZwKTsKLSAgICAgICAgZ290byBmbmVu ZDsKLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotCi0gICAgICBjYXNlIEZOX1JQQTogICAgICAgICAg ICAgICAgICAgICAgLyogXGZycGFkKCkgYW5kIFxmbHBhZCgpICovCi0gICAgICBjYXNlIEZOX0xQ QToKLSAgICAgICAgaWYgKGFyZ24gPCAxKQotICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAg IHZhbDEgPSAiIjsKLSAgICAgICAgaWYgKGFyZ24gPiAxKQotICAgICAgICAgIGlmICgqKGJwWzFd KSkKLSAgICAgICAgICAgIHZhbDEgPSBldmFseChicFsxXSk7Ci0gICAgICAgIGlmIChhcmduID09 IDEpIHsgICAgICAgICAgICAgICAgLyogSWYgYSBudW1iZXIgd2Fzbid0IGdpdmVuICovCi0gICAg ICAgICAgICBwID0gZm52YWw7ICAgICAgICAgICAgICAgICAgLyoganVzdCByZXR1cm4gdGhlIG9y aWdpbmFsIHN0cmluZyAqLwotICAgICAgICAgICAgY2tzdHJuY3B5KHAsYnBbMF0sRk5WQUxMKTsK LSAgICAgICAgfSBlbHNlIGlmIChhcmduID4gMSAmJiAgISp2YWwxKSB7Ci0gICAgICAgICAgICBm YWlsZWQgPSAxOwotICAgICAgICAgICAgZXZhbGVycihmbik7Ci0gICAgICAgIH0gZWxzZSAvKiBp ZiAoY2hrbnVtKHZhbDEpKSAqLyB7IC8qIFJlcGVhdCBjb3VudCAqLwotICAgICAgICAgICAgY2hh ciBwYzsKLSAgICAgICAgICAgIG4gPSBhdG9pKHZhbDEpOwotICAgICAgICAgICAgaWYgKG4gPj0g MCkgewotICAgICAgICAgICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgICAgICAgICBrID0gKGlu dClzdHJsZW4oYnBbMF0pOyAvKiBMZW5ndGggb2Ygc3RyaW5nIHRvIGJlIHBhZGRlZCAqLwotICAg ICAgICAgICAgICAgIGlmIChrID49IG4pIHsgICAgICAgICAgIC8qIEl0J3MgYWxyZWFkeSBsb25n IGVub3VnaCAqLwotICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkocCxicFswXSxGTlZBTEwp OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuICsg ayA8PSBGTlZBTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBjID0gKGNoYXIpICgoYXJn biA8IDMpID8gU1AgOiAqYnBbMl0pOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYykg cGMgPSBTUDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjeCA9PSBGTl9SUEEpIHsgLyog UlBBRCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm5jcHkocCxicFswXSxrKTsg LyogKGxlYXZlIGl0IGxpa2UgdGhpcykgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw W2tdID0gTlVMOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgKz0gazsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSBrOyBpIDwgbjsgaSsrKQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKnArKyA9IHBjOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBl bHNlIHsgICAgICAgIC8qIExQQUQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuIC09 IGs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSBwYzsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJuY3B5KHAsYnBbMF0sayk7IC8qIChsZWF2ZSBpdCBsaWtlIHRoaXMp ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcFtrXSA9IE5VTDsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwICs9IGs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgKnAgPSBOVUw7Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHAgPSBmbnZhbDsK LSAgICAgICAgZ290byBmbmVuZDsKLQotI2lmZGVmIFpGQ0RBVAotICAgICAgY2FzZSBGTl9GRDog ICAgICAgICAgICAgICAgICAgICAgIC8qIFxmZGF0ZShmaWxlbmFtZSkgKi8KLSAgICAgICAgcCA9 IGZudmFsOwotICAgICAgICBzID0gemZjZGF0KGJwWzBdKTsKLSAgICAgICAgaWYgKCFzKSBzID0g IiI7Ci0gICAgICAgIGlmICghKnMpIHsKLSAgICAgICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAg ICAgICBpZiAoZm5kaWFncykKLSAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLCI8 RVJST1I6RklMRV9OT1RfRk9VTkQ6XFxmIixmbiwiKCk+IixOVUxMKTsKLSAgICAgICAgICAgIGdv dG8gZm5lbmQ7Ci0gICAgICAgIH0KLSAgICAgICAgY2tzdHJuY3B5KGZudmFsLHMsRk5WQUxMKTsK LSNlbmRpZiAvKiBaRkNEQVQgKi8KLSAgICAgICAgZ290byBmbmVuZDsKLQotICAgIH0gLyogQnJl YWsgdXAgYmlnIHN3aXRjaC4uLiAqLwotCi0gICAgc3dpdGNoICh5KSB7Ci0gICAgICBjYXNlIEZO X0ZTOiB7CQkJLyogXGZzaXplKGZpbGVuYW1lKSAqLwotCSAgQ0tfT0ZGX1QgejsKLQkgIHAgPSBm bnZhbDsKLQkgIHogPSB6Y2hraShicFswXSk7Ci0JICBpZiAoeiA8IChDS19PRkZfVCkwKSB7Ci0J ICAgICAgZmFpbGVkID0gMTsKLQkgICAgICBpZiAoZm5kaWFncykgewotCQkgIGlmICh6ID09IChD S19PRkZfVCktMSkKLQkJICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKLQkJCSAgICAgIjxFUlJP UjpGSUxFX05PVF9GT1VORDpcXGYiLGZuLCIoKT4iLE5VTEwpOwotCQkgIGVsc2UgaWYgKHogPT0g KENLX09GRl9UKS0yKQotCQkgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotCQkJICAgICAiPEVS Uk9SOkZJTEVfTk9UX1JFQURBQkxFOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0JCSAgZWxzZSBpZiAo eiA9PSAoQ0tfT0ZGX1QpLTMpCi0JCSAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0JCQkgICAg ICI8RVJST1I6RklMRV9OT1RfQUNDRVNTSUJMRTpcXGYiLGZuLCIoKT4iLE5VTEwpOwotCQkgIGVs c2UKLQkJICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKLQkJCSAgICAgIjxFUlJPUjpGSUxFX0VS Uk9SOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0JICAgICAgfQotCSAgICAgIGdvdG8gZm5lbmQ7Ci0J ICB9Ci0JICBja3N0cm5jcHkoZm52YWwsY2tmc3RvYSh6KSxGTlZBTEwpOwotCSAgZ290byBmbmVu ZDsKLSAgICAgIH0KLSAgICAgIGNhc2UgRk5fVkVSOiAgICAgICAgICAgICAgICAgICAgICAvKiBc ZnZlcmlmeSgpICovCi0JcCA9ICItMSI7Ci0JaWYgKGFyZ24gPT0gMSkJCQkvKiBObyBzZWNvbmQg YXJnICovCi0JICBnb3RvIGZuZW5kOwotCWVsc2UgaWYgKCFicFsxXSkJCS8qIE9yIHNlY29uZCBh cmcgbnVsbCAqLwotCSAgZ290byBmbmVuZDsKLQllbHNlIGlmICghKihicFsxXSkpCQkvKiBvciBl bXB0eS4gKi8KLQkgIGdvdG8gZm5lbmQ7Ci0gICAgICAgIHAgPSAiMCI7Ci0gICAgICAgIGlmIChh cmduID4gMSkgeyAgICAgICAgICAgICAgICAgLyogT25seSB3b3JrcyBpZiB3ZSBoYXZlIDIgb3Ig MyBhcmdzICovCi0gICAgICAgICAgICBpbnQgc3RhcnQ7Ci0gICAgICAgICAgICBjaGFyICpzMiwg Y2gxLCBjaDI7Ci0gICAgICAgICAgICBzdGFydCA9IDA7Ci0gICAgICAgICAgICBpZiAoYXJnbiA+ IDIpIHsgICAgICAgICAgICAgLyogU3RhcnRpbmcgcG9zaXRpb24gc3BlY2lmaWVkICovCi0gICAg ICAgICAgICAgICAgdmFsMSA9ICooYnBbMl0pID8gZXZhbHgoYnBbMl0pIDogIjAiOwotICAgICAg ICAgICAgICAgIGlmIChjaGtudW0odmFsMSkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhcnQg PSBhdG9pKHZhbDEpIC8qIC0gMSAqLzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0IDwg MCkgc3RhcnQgPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPiAoaW50KXN0cmxl bihicFsxXSkpCi0gICAgICAgICAgICAgICAgICAgICAgZ290byB2ZXJmaW47Ci0gICAgICAgICAg ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAg ICAgICAgICAgICAgZXZhbGVycihmbik7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7 Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaSA9IHN0YXJ0 OwotICAgICAgICAgICAgcCA9ICIwIjsKLSAgICAgICAgICAgIGZvciAocyA9IGJwWzFdICsgc3Rh cnQ7ICpzOyBzKyssaSsrKSB7Ci0gICAgICAgICAgICAgICAgY2gxID0gKnM7Ci0gICAgICAgICAg ICAgICAgaWYgKCFpbnBjYXNbY21kbHZsXSkgaWYgKGlzbG93ZXIoY2gxKSkgY2gxID0gdG91cHBl cihjaDEpOwotICAgICAgICAgICAgICAgIGogPSAwOwotICAgICAgICAgICAgICAgIGZvciAoczIg PSBicFswXTsgKnMyOyBzMisrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoMiA9ICpzMjsKLSAg ICAgICAgICAgICAgICAgICAgaWYgKCFpbnBjYXNbY21kbHZsXSkgaWYgKGlzbG93ZXIoY2gyKSkg Y2gyID0gdG91cHBlcihjaDIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2gxID09IGNoMikg ewotICAgICAgICAgICAgICAgICAgICAgICAgaiA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICBpZiAoaiA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwcmludGYoZm52 YWwsIiVkIixpKzEpOyAvKiBTQUZFICovCi0gICAgICAgICAgICAgICAgICAgIHAgPSBmbnZhbDsK LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgfQotICAgICAgICB9Ci0gICAgICB2ZXJmaW46Ci0gICAgICAgIGdvdG8gZm5lbmQ7Ci0KLSAg ICAgIGNhc2UgRk5fSVBBOiAgICAgICAgICAgICAgICAgICAgICAvKiBGaW5kIGFuZCByZXR1cm4g SVAgYWRkcmVzcyAqLwotICAgICAgICBpZiAoYXJnbiA+IDApIHsgICAgICAgICAgICAgICAgIC8q IGluIGFyZ3VtZW50IHN0cmluZy4gKi8KLSAgICAgICAgICAgIGludCBzdGFydCA9IDA7Ci0gICAg ICAgICAgICBpZiAoYXJnbiA+IDEpIHsgICAgICAgICAgICAgLyogU3RhcnRpbmcgcG9zaXRpb24g c3BlY2lmaWVkICovCi0gICAgICAgICAgICAgICAgaWYgKGNoa251bShicFsxXSkpIHsKLSAgICAg ICAgICAgICAgICAgICAgc3RhcnQgPSBhdG9pKGJwWzFdKSAtIDE7Ci0gICAgICAgICAgICAgICAg ICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMDsKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgICAgICAgICBpZiAo Zm5kaWFncykKLSAgICAgICAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpBUkdfTk9UX05VTUVSSUM6XFxm IixmbiwiKCk+IixOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwID0gZ2V0aXAoYnBbMF0r c3RhcnQpOwotICAgICAgICB9IGVsc2UgcCA9ICIiOwotICAgICAgICBnb3RvIGZuZW5kOwotCi0j aWZkZWYgT1MyCi0gICAgICBjYXNlIEZOX0NSWToKLSAgICAgICAgcCA9ICIiOwotICAgICAgICBp ZiAoYXJnbiA+IDApIHsKLSAgICAgICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgICAgIGNrc3Ry bmNweShwLGJwWzBdLEZOVkFMTCk7Ci0gICAgICAgICAgICBja19lbmNyeXB0KHApOwotICAgICAg ICB9Ci0gICAgICAgIGdvdG8gZm5lbmQ7Ci0KLSAgICAgIGNhc2UgRk5fT09YOgotICAgICAgICBw ID0gIiI7Ci0gICAgICAgIGlmIChhcmduID4gMCkKLSAgICAgICAgICBwID0gKGNoYXIgKikgY2tf b294KGJwWzBdLCAoYXJnbiA+IDEpID8gYnBbMV0gOiAiIik7Ci0gICAgICAgIGdvdG8gZm5lbmQ7 Ci0jZW5kaWYgLyogT1MyICovCi0KLSAgICAgIGNhc2UgRk5fSEVYOiAgICAgICAgICAgICAgICAg ICAgICAvKiBcZmhleGlmeShhcmcxKSAqLwotICAgICAgICBpZiAoYXJnbiA8IDEpCi0gICAgICAg ICAgZ290byBmbmVuZDsKLSAgICAgICAgaWYgKChpbnQpc3RybGVuKGJwWzBdKSA8IChGTlZBTEwg LyAyKSkgewotICAgICAgICAgICAgcyA9IGJwWzBdOwotICAgICAgICAgICAgcCA9IGZudmFsOwot ICAgICAgICAgICAgd2hpbGUgKCpzKSB7Ci0gICAgICAgICAgICAgICAgeCA9ICgqcyA+PiA0KSAm IDB4MGY7Ci0gICAgICAgICAgICAgICAgKnArKyA9IGhleGRpZ2l0c1t4XTsKLSAgICAgICAgICAg ICAgICB4ID0gKnMrKyAmIDB4MGY7Ci0gICAgICAgICAgICAgICAgKnArKyA9IGhleGRpZ2l0c1t4 XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpwID0gTlVMOwotICAgICAgICAgICAgcCA9 IGZudmFsOwotICAgICAgICB9Ci0gICAgICAgIGdvdG8gZm5lbmQ7Ci0KLSAgICAgIGNhc2UgRk5f VU5UQUI6CQkJLyogXGZ1bnRhYihhcmcxKSAqLwotCWlmIChhcmduIDwgMSkKLQkgIGdvdG8gZm5l bmQ7Ci0JaWYgKChpbnQpc3RybGVuKGJwWzBdKSA8IChGTlZBTEwgKiAyKSkgewotCSAgICBzID0g YnBbMF07Ci0JICAgIHAgPSBmbnZhbDsKLQkgICAgaWYgKHVudGFiaWZ5KGJwWzBdLHAsRk5WQUxM KSA8IDApIHsKLQkJZmFpbGVkID0gMTsKLQkJaWYgKGZuZGlhZ3MpCi0JCSAgY2ttYWttc2coZm52 YWwsRk5WQUxMLAotCQkJICAgIjxFUlJPUjpPVkVSRkxPVzpcXGYiLGZuLCIoKT4iLE5VTEwpOwot CSAgICB9Ci0JICAgIGdvdG8gZm5lbmQ7Ci0JfQotCi0gICAgICBjYXNlIEZOX1VOSDogeyAgICAg ICAgICAgICAgICAgICAgLyogXGZ1bmhleChhcmcxKSAqLwotICAgICAgICAgIGludCBjWzJdLCBp OwotICAgICAgICAgIGlmIChhcmduIDwgMSkKLSAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAg ICAgICAgaWYgKChpbnQpc3RybGVuKGJwWzBdKSA8IChGTlZBTEwgKiAyKSkgewotICAgICAgICAg ICAgICBzID0gYnBbMF07Ci0gICAgICAgICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgICAgICAg d2hpbGUgKCpzKSB7Ci0gICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgY1tpXSA9ICpzKys7Ci0gICAgICAgICAgICAgICAgICAg ICAgaWYgKCFjW2ldKSB7IHAgPSAiIjsgZ290byB1bmhleGZpbjsgfQotICAgICAgICAgICAgICAg ICAgICAgIGlmIChpc2xvd2VyKGNbaV0pKSBjW2ldID0gdG91cHBlcihjW2ldKTsKLSAgICAgICAg ICAgICAgICAgICAgICBpZiAoY1tpXSA+PSAnMCcgJiYgY1tpXSA8PSAnOScpIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgY1tpXSAtPSAweDMwOwotICAgICAgICAgICAgICAgICAgICAgIH0g ZWxzZSBpZiAoY1tpXSA+PSAnQScgJiYgY1tpXSA8PSAnRicpIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgY1tpXSAtPSAweDM3OwotICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChmbmRpYWdzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNrbWFrbXNn KGZudmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZOVkFMTCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkFSR19PVVRfT0ZfUkFO R0U6XFxmIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKCk+IiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBOVUxMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAq cCsrID0gKChjWzBdIDw8IDQpICYgMHhmMCkgfCAoY1sxXSAmIDB4MGYpOwotICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICpwID0gTlVMOwotICAgICAgICAgICAgICBwID0gZm52YWw7Ci0g ICAgICAgICAgfQotICAgICAgICB1bmhleGZpbjoKLSAgICAgICAgICBnb3RvIGZuZW5kOwotICAg ICAgfQotCi0gICAgICBjYXNlIEZOX0JSSzogeyAgICAgICAgICAgICAgICAgICAgLyogXGZicmVh aygpICovCi0gICAgICAgICAgY2hhciAqIGM7ICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcmFj dGVycyB0byBicmVhayBvbiAqLwotICAgICAgICAgIGNoYXIgYzIsIHMyOwotICAgICAgICAgIGlu dCBzdGFydCA9IDA7Ci0gICAgICAgICAgaW50IGRvbmUgPSAwOwotICAgICAgICAgIGlmIChhcmdu IDwgMSkKLSAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgaWYgKGFyZ24gPiAyKSB7 Ci0gICAgICAgICAgICAgIHMgPSBicFsyXSA/IGJwWzJdIDogIjAiOwotICAgICAgICAgICAgICBp ZiAoY2hrbnVtKHMpKSB7Ci0gICAgICAgICAgICAgICAgICBzdGFydCA9IGF0b2kocyk7Ci0gICAg ICAgICAgICAgICAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDA7Ci0gICAgICAgICAgICAgICAg ICBpZiAoc3RhcnQgPiAoaW50KXN0cmxlbihicFswXSkpCi0gICAgICAgICAgICAgICAgICAgIGdv dG8gYnJrZmluOwotICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgZmFp bGVkID0gMTsKLSAgICAgICAgICAgICAgICAgIGlmIChmbmRpYWdzKQotICAgICAgICAgICAgICAg ICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICI8RVJST1I6QVJHX05PVF9OVU1FUklDOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAgICAg ICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAg ICAgIHMgPSBicFswXSArIHN0YXJ0OyAgICAgICAgICAgIC8qIFNvdXJjZSBwb2ludGVyICovCi0K LSAgICAgICAgICB3aGlsZSAoKnMgJiYgIWRvbmUpIHsKLSAgICAgICAgICAgICAgczIgPSAqczsK LSAgICAgICAgICAgICAgaWYgKCFpbnBjYXNbY21kbHZsXSAmJiBpc2xvd2VyKHMyKSkgczIgPSB0 b3VwcGVyKHMyKTsKLSAgICAgICAgICAgICAgYyA9IGJwWzFdID8gYnBbMV0gOiAiIjsgICAvKiBD aGFyYWN0ZXIgdG8gYnJlYWsgb24gKi8KLSAgICAgICAgICAgICAgd2hpbGUgKCpjKSB7Ci0gICAg ICAgICAgICAgICAgICBjMiA9ICpjOwotICAgICAgICAgICAgICAgICAgaWYgKCFpbnBjYXNbY21k bHZsXSAmJiBpc2xvd2VyKGMyKSkgYzIgPSB0b3VwcGVyKGMyKTsKLSAgICAgICAgICAgICAgICAg IGlmIChjMiA9PSBzMikgewotICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSAxOwotICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgICAgYysrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGlmIChkb25lKSBicmVh azsKLSAgICAgICAgICAgICAgKnArKyA9ICpzKys7Ci0gICAgICAgICAgfQotICAgICAgICAgICpw ID0gTlVMOyAgICAgICAgICAgICAgICAgICAgIC8qIHRlcm1pbmF0ZSB0aGUgcmVzdWx0ICovCi0g ICAgICAgICAgcCA9IGZudmFsOyAgICAgICAgICAgICAgICAgICAgLyogYW5kIHBvaW50IHRvIGl0 LiAqLwotICAgICAgICBicmtmaW46Ci0gICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgIH0KLQot ICAgICAgY2FzZSBGTl9TUE46IHsgICAgICAgICAgICAgICAgICAgIC8qIFxmc3BhbigpICovCi0g ICAgICAgICAgY2hhciAqcTsKLSAgICAgICAgICBjaGFyIGMxLCBjMjsKLSAgICAgICAgICBpbnQg c3RhcnQgPSAwOwotICAgICAgICAgIGlmIChhcmduIDwgMSkKLSAgICAgICAgICAgIGdvdG8gZm5l bmQ7Ci0gICAgICAgICAgaWYgKGFyZ24gPiAyKSB7ICAgICAgICAgICAgICAgLyogU3RhcnRpbmcg cG9zaXRpb24gKi8KLSAgICAgICAgICAgICAgcyA9IGJwWzJdID8gYnBbMl0gOiAiMCI7Ci0gICAg ICAgICAgICAgIGlmIChjaGtudW0ocykpIHsKLSAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gYXRv aShzKTsKLSAgICAgICAgICAgICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMDsKLSAgICAg ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAg ICAgICAgICAgICBpZiAoZm5kaWFncykKLSAgICAgICAgICAgICAgICAgICAgY2ttYWttc2coZm52 YWwsRk5WQUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkFSR19OT1Rf TlVNRVJJQzpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAgICAgICAgICAgICAgZ290byBmbmVu ZDsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBzID0gYnBbMF0gKyBz dGFydDsgICAgICAgICAgICAvKiBTb3VyY2UgcG9pbnRlciAqLwotICAgICAgICAgIGlmIChhcmdu ID4gMSAmJgotICAgICAgICAgICAgICAoaW50KXN0cmxlbihicFsxXSkgPiAwICYmCi0gICAgICAg ICAgICAgIHN0YXJ0IDw9IChpbnQpc3RybGVuKGJwWzBdKSkgewotICAgICAgICAgICAgICB3aGls ZSAoKnMpIHsgICAgICAgICAgICAgIC8qIExvb3AgdGhydSBzb3VyY2Ugc3RyaW5nICovCi0gICAg ICAgICAgICAgICAgICBxID0gYnBbMV07ICAgICAgICAgICAgLyogU3BhbiBzdHJpbmcgKi8KLSAg ICAgICAgICAgICAgICAgIGMxID0gKnM7Ci0gICAgICAgICAgICAgICAgICBpZiAoIWlucGNhc1tj bWRsdmxdKQotICAgICAgICAgICAgICAgICAgICBpZiAoaXNsb3dlcihjMSkpIGMxID0gdG91cHBl cihjMSk7Ci0gICAgICAgICAgICAgICAgICB4ID0gMDsKLSAgICAgICAgICAgICAgICAgIHdoaWxl ICgoYzIgPSAqcSsrKSkgewotICAgICAgICAgICAgICAgICAgICAgIGlmICghaW5wY2FzW2NtZGx2 bF0pCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNsb3dlcihjMikpIGMyID0gdG91cHBl cihjMik7Ci0gICAgICAgICAgICAgICAgICAgICAgaWYgKGMxID09IGMyKSB7IHggPSAxOyBicmVh azsgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgaWYgKCF4KSBicmVh azsKLSAgICAgICAgICAgICAgICAgICpwKysgPSAqcysrOwotICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICpwID0gTlVMOyAgICAgICAgICAgICAgICAgLyogVGVybWluYXRlIGFuZCByZXR1 cm4gdGhlIHJlc3VsdCAqLwotICAgICAgICAgICAgICBwID0gZm52YWw7Ci0gICAgICAgICAgfQot ICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICB9Ci0gICAgfSAvKiBCcmVhayB1cCBiaWcgc3dp dGNoLi4uICovCi0KLSAgICBzd2l0Y2ggKHkpIHsKLSAgICAgIGNhc2UgRk5fVFJNOiAgICAgICAg ICAgICAgICAgICAgICAvKiBcZnRyaW0oczFbLHMyXSkgKi8KLSAgICAgIGNhc2UgRk5fTFRSOiAg ICAgICAgICAgICAgICAgICAgICAvKiBcZmx0cmltKHMxWyxzMl0pICovCi0gICAgICAgIGlmIChh cmduIDwgMSkKLSAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICBpZiAoKGxlbjEgPSAoaW50 KXN0cmxlbihicFswXSkpID4gMCkgewotICAgICAgICAgICAgaWYgKGxlbjEgPiBGTlZBTEwpCi0g ICAgICAgICAgICAgIGxlbjEgPSBGTlZBTEw7Ci0gICAgICAgICAgICBzID0gIiBcdFxyXG4iOwot ICAgICAgICAgICAgaWYgKGFyZ24gPiAxKSAgICAgICAgICAgICAgIC8qIFRyaW0gbGlzdCBnaXZl biAqLwotICAgICAgICAgICAgICBzID0gYnBbMV07Ci0gICAgICAgICAgICBsZW4yID0gKGludClz dHJsZW4ocyk7Ci0gICAgICAgICAgICBpZiAobGVuMiA8IDEpIHsgICAgICAgICAgICAgLyogb3Ig bm90Li4uICovCi0gICAgICAgICAgICAgICAgcyA9ICIgXHRcclxuIjsgICAgICAgICAgLyogRGVm YXVsdCBpcyB0byB0cmltIHdoaXRlc3BhY2UgKi8KLSAgICAgICAgICAgICAgICBsZW4yID0gMjsK LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjeCA9PSBGTl9UUk0pIHsgICAgICAgICAv KiBUcmltIGZyb20gcmlnaHQgKi8KLSAgICAgICAgICAgICAgICBjaGFyICogcSwgcDIsIHEyOwot ICAgICAgICAgICAgICAgIGNrc3RybmNweShmbnZhbCxicFswXSxGTlZBTEwpOyAvKiBDb3B5IHN0 cmluZyB0byBvdXRwdXQgKi8KLSAgICAgICAgICAgICAgICBwID0gZm52YWwgKyBsZW4xIC0gMTsg ICAvKiBQb2ludCB0byBsYXN0IGNoYXJhY3RlciAqLwotCi0gICAgICAgICAgICAgICAgd2hpbGUg KHAgPj0gKGNoYXIgKilmbnZhbCkgeyAvKiBHbyBiYWNrd2FyZHMgKi8KLSAgICAgICAgICAgICAg ICAgICAgcSA9IHM7ICAgICAgICAgICAgICAvKiBQb2ludCB0byB0cmltIGxpc3QgKi8KLSAgICAg ICAgICAgICAgICAgICAgcDIgPSAqcDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnBjYXNb Y21kbHZsXSkKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNsb3dlcihwMikpIHAyID0gdG91 cHBlcihwMik7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlICgqcSkgeyAgICAgICAgLyogSXMg dGhpcyBjaGFyIGluIHRyaW0gbGlzdD8gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHEyID0g KnE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlucGNhc1tjbWRsdmxdKQotICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoaXNsb3dlcihxMikpIHEyID0gdG91cHBlcihxMik7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBpZiAocDIgPT0gcTIpIHsgLyogWWVzLCBudWxsIGl0IG91 dCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwID0gTlVMOwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgICAgICAgICAgcSsrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgICAgIGlmICghKnEpICAgICAgICAgICAgLyogVHJpbSBsaXN0IGV4aGF1c3RlZCAqLwot ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIC8qIFNvIHdlJ3JlIGRvbmUu ICovCi0gICAgICAgICAgICAgICAgICAgIHAtLTsgICAgICAgICAgICAgICAgLyogRWxzZSBrZWVw IHRyaW1taW5nICovCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsgICAg ICAgICAgICAgICAgICAgIC8qIFRyaW0gZnJvbSBsZWZ0ICovCi0gICAgICAgICAgICAgICAgY2hh ciAqIHEsIHAyLCBxMjsKLSAgICAgICAgICAgICAgICBwID0gYnBbMF07ICAgICAgICAgICAgICAv KiBTb3VyY2UgKi8KLSAgICAgICAgICAgICAgICB3aGlsZSAoKnApIHsKLSAgICAgICAgICAgICAg ICAgICAgcDIgPSAqcDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnBjYXNbY21kbHZsXSkK LSAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNsb3dlcihwMikpIHAyID0gdG91cHBlcihwMik7 Ci0gICAgICAgICAgICAgICAgICAgIHEgPSBzOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAo KnEpIHsgICAgICAgIC8qIElzIHRoaXMgY2hhciBpbiB0cmltIGxpc3Q/ICovCi0gICAgICAgICAg ICAgICAgICAgICAgICBxMiA9ICpxOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnBj YXNbY21kbHZsXSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzbG93ZXIocTIpKSBx MiA9IHRvdXBwZXIocTIpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAyID09IHEyKSB7 IC8qIFllcywgcG9pbnQgcGFzdCBpdCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAr KzsgICAgICAgIC8qIGFuZCB0cnkgbmV4dCBzb3VyY2UgY2hhcmFjdGVyICovCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgICAgICAgICBxKys7ICAgICAgICAgICAgLyogTm8sIHRyeSBuZXh0IHRyaW0g Y2hhcmFjdGVyICovCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg aWYgKCEqcSkgICAgICAgICAgICAvKiBUcmltIGxpc3QgZXhoYXVzdGVkICovCi0gICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgLyogU28gd2UncmUgZG9uZS4gKi8KLSAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2tzdHJuY3B5KGZudmFsLHAsRk5WQUxMKTsK LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgfSBlbHNlIHAg PSAiIjsKLSAgICAgICAgZ290byBmbmVuZDsKLQotICAgICAgY2FzZSBGTl9DQVA6ICAgICAgICAg ICAgICAgICAgICAgIC8qIFxmY2FwaXRhbGl6ZShhcmcxKSAqLwotICAgICAgICBpZiAoYXJnbiA8 IDEpCi0gICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgcyA9IGJwWzBdOwotICAgICAgICBw ID0gZm52YWw7Ci0gICAgICAgIHggPSAwOwotICAgICAgICB3aGlsZSAoKGMgPSAqcysrKSkgewot ICAgICAgICAgICAgaWYgKGlzYWxwaGEoYykpIHsKLSAgICAgICAgICAgICAgICBpZiAoeCA9PSAw KSB7Ci0gICAgICAgICAgICAgICAgICAgIHggPSAxOwotICAgICAgICAgICAgICAgICAgICBpZiAo aXNsb3dlcihjKSkKLSAgICAgICAgICAgICAgICAgICAgICBjID0gdG91cHBlcihjKTsKLSAgICAg ICAgICAgICAgICB9IGVsc2UgaWYgKGlzdXBwZXIoYykpCi0gICAgICAgICAgICAgICAgICBjID0g dG9sb3dlcihjKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpwKysgPSBjOwotICAgICAg ICB9Ci0gICAgICAgICpwID0gTlVMOwotICAgICAgICBwID0gZm52YWw7Ci0gICAgICAgIGdvdG8g Zm5lbmQ7Ci0KLSNpZmRlZiBDT01NRU5UCi0gICAgICBjYXNlIEZOX1RPRDogICAgICAgICAgICAg ICAgICAgICAgLyogVGltZSBvZiBkYXkgdG8gc2VjcyBzaW5jZSBtaWRuaXRlICovCi0gICAgICAg IHNwcmludGYoZm52YWwsIiVsZCIsdG9kMnNlYyhicFswXSkpOyAvKiBTQUZFICovCi0gICAgICAg IGdvdG8gZm5lbmQ7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgICBjYXNlIEZOX0ZGTjog ICAgICAgICAgICAgICAgICAgICAgLyogRnVsbCBwYXRobmFtZSBvZiBmaWxlICovCi0gICAgICAg IHpmbnFmcChicFswXSxGTlZBTEwscCk7Ci0gICAgICAgIGlmICghcCkgcCA9ICIiOwotICAgICAg ICBnb3RvIGZuZW5kOwotCi0gICAgICBjYXNlIEZOX0NISzogeyAgICAgICAgICAgICAgICAgICAg LyogXGZjaGVja3N1bSgpICovCi0gICAgICAgICAgbG9uZyBjaGsgPSAwOwotICAgICAgICAgIHAg PSAoYXJnbiA+IDApID8gYnBbMF0gOiAiIjsKLSAgICAgICAgICB3aGlsZSAoKnApIGNoayArPSAq cCsrOwotICAgICAgICAgIHNwcmludGYoZm52YWwsIiVsdSIsY2hrKTsgICAgIC8qIFNBRkUgKi8K LSAgICAgICAgICBwID0gZm52YWw7Ci0gICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgIH0KLQot I2lmbmRlZiBOT1hGRVIKLSAgICAgIGNhc2UgRk5fQ1JDOiAgICAgICAgICAgICAgICAgICAgICAv KiBcZmNyYzE2KCkgKi8KLSAgICAgICAgaWYgKGFyZ24gPiAwKQotICAgICAgICAgIHNwcmludGYo Zm52YWwsIiV1IiwgICAgICAgICAgIC8qIFNBRkUgKi8KLSAgICAgICAgICAgICAgICAgIGNoazMo KENIQVIgKilicFswXSwoaW50KXN0cmxlbihicFswXSkpKTsKLSAgICAgICAgZWxzZQotICAgICAg ICAgIHAgPSAiMCI7Ci0gICAgICAgIGdvdG8gZm5lbmQ7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0K LSAgICAgIGNhc2UgRk5fQlNOOiAgICAgICAgICAgICAgICAgICAgICAvKiBcZmJhc2VuYW1lKCkg Ki8KLSAgICAgICAgenN0cmlwKGJwWzBdLCZwKTsKLSAgICAgICAgZ290byBmbmVuZDsKLQotI2lm bmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0gICAgICBjYXNlIEZOX1NDUk5fQ1g6ICAgICAgICAg ICAgICAgICAgLyogXGZzY3JuY3VyeCgpICovCi0gICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAg c3ByaW50ZihwLCIlZCIsKGludClWc2NybkdldEN1clBvcyhWVEVSTSktPngpOyAvKiBTQUZFICov Ci0gICAgICAgIGdvdG8gZm5lbmQ7Ci0KLSAgICAgIGNhc2UgRk5fU0NSTl9DWTogICAgICAgICAg ICAgICAgICAvKiBcZnNjcm5jdXJ5KCkgKi8KLSAgICAgICAgcCA9IGZudmFsOwotICAgICAgICBz cHJpbnRmKHAsIiVkIiwoaW50KVZzY3JuR2V0Q3VyUG9zKFZURVJNKS0+eSk7IC8qIFNBRkUgKi8K LSAgICAgICAgZ290byBmbmVuZDsKLQotICAgICAgY2FzZSBGTl9TQ1JOX1NUUjogeyAgICAgICAg ICAgICAgIC8qIFxmc2NybnN0cigpICovCi0gICAgICAgICAgdmlkZW9saW5lICogbGluZSA9IE5V TEw7Ci0gICAgICAgICAgdmlvY2VsbCAqIGNlbGxzID0gTlVMTDsKLSAgICAgICAgICBpbnQgcm93 ID0gMCwgY29sID0gMCwgbGVuID0gMDsKLSAgICAgICAgICAvKiBOT1RFOiBPbiBVbmljb2RlIHN5 c3RlbXMsIHRoZSBzY3JlZW4gY29udGVudHMgYXJlIHN0b3JlZCBpbiAqLwotICAgICAgICAgIC8q IGluIFVuaWNvZGUuICBUaGVyZWZvcmUsIHdlIHNob3VsZCByZWFsbHkgYmUgcGVyZm9ybWluZyBh ICAgICovCi0gICAgICAgICAgLyogY29udmVyc2lvbiB0byB0aGUgbG9jYWwgY2hhcmFjdGVyIHNl dC4gICAgICAgICAgICAgICAgICAgICAgKi8KLQotICAgICAgICAgIC8qIDYvMTgvMjAwMCAtIGFk ZGVkIHRoZSB0cmFuc2xhdGlvbiB0byBsY3MgKi8KLQotICAgICAgICAgIGlmIChicFswXSA9PSBO VUxMIHx8IGJwWzBdWzBdID09ICdcMCcpIHsKLSAgICAgICAgICAgICAgcm93ID0gMDsKLSAgICAg ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICBpZiAoY2hrbnVtKGJwWzBdKSkgewotICAgICAg ICAgICAgICAgICAgcm93ID0gYXRvaShicFswXSk7Ci0gICAgICAgICAgICAgICAgICBpZiAocm93 IDwgMCkKLSAgICAgICAgICAgICAgICAgICAgcm93ID0gMDsKLSAgICAgICAgICAgICAgfSBlbHNl IHsKLSAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICAgICAgICBpZiAo Zm5kaWFncykKLSAgICAgICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkFSR19OT1RfTlVNRVJJQzpcXGYiLGZu LCIoKT4iLE5VTEwpOwotICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICAg ICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBsaW5lID0gVnNjcm5HZXRMaW5lRnJvbVRvcCgg VlRFUk0sIChVU0hPUlQpIHJvdyApOwotICAgICAgICAgIGlmIChsaW5lICE9IE5VTEwpIHsKLSAg ICAgICAgICAgICAgaWYgKGJwWzFdID09IE5VTEwgfHwgYnBbMV1bMF0gPT0gJ1wwJykKLSAgICAg ICAgICAgICAgICBjb2wgPSAwOwotICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg ICAgIGlmIChjaGtudW0oYnBbMF0pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgY29sID0gYXRv aShicFsxXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbCA8IDAgfHwgY29sID49IGxp bmUtPndpZHRoKQotICAgICAgICAgICAgICAgICAgICAgICAgY29sID0gMDsKLSAgICAgICAgICAg ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAg ICAgICAgICAgICAgICAgICBpZiAoZm5kaWFncykKLSAgICAgICAgICAgICAgICAgICAgICAgIGNr bWFrbXNnKGZudmFsLEZOVkFMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8 RVJST1I6QVJHX05PVF9OVU1FUklDOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAgICAgICAg ICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICBpZiAoYnBbMl0gPT0gTlVMTCB8fCBicFsyXVswXSA9PSAnXDAnKSB7 Ci0gICAgICAgICAgICAgICAgICBsZW4gPSBsaW5lLT53aWR0aCAtIChjb2wrMSk7Ci0gICAgICAg ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICBpZiAoIWNoa251bShicFsyXSkpIHsK LSAgICAgICAgICAgICAgICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgICAgICAgICAg IGlmIChmbmRpYWdzKQotICAgICAgICAgICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5W QUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpBUkdfTk9UX05V TUVSSUM6XFxmIixmbiwiKCk+IixOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZu ZW5kOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgbGVuID0gYXRvaShi cFsyXSk7Ci0gICAgICAgICAgICAgICAgICBpZiAobGVuIDwgMCB8fCBsZW4gPiBsaW5lLT53aWR0 aCkKLSAgICAgICAgICAgICAgICAgICAgbGVuID0gbGluZS0+d2lkdGg7Ci0gICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgY2VsbHMgPSBsaW5lLT5jZWxsczsKLSAgICAgICAgICAgICAgZm9y IChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICBpbnQgcG9zID0gaSAr IGNvbDsKLSAgICAgICAgICAgICAgICAgIGlmIChwb3MgPCBsaW5lLT53aWR0aCkgewotICAgICAg ICAgICAgICAgICAgICAgIGlmIChpc3VuaWNvZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAg IGZudmFsW2ldID0gKENIQVIpIHV0b2x4bGF0KGNlbGxzW3Bvc10uYyk7Ci0gICAgICAgICAgICAg ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgZm52YWxbaV0gPSAoQ0hBUikg KGNlbGxzW3Bvc10uYyAmIDB4RkYpOwotICAgICAgICAgICAgICAgICAgICAgIGlmIChmbnZhbFtp XSA9PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgZm52YWxbaV0gPSBTUDsKLSAgICAgICAg ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBmbnZhbFtpXSA9IFNQOwotICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGZudmFsW2ldID0gJ1wwJzsKLSAgICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgICBmbnZhbFswXSA9ICdcMCc7Ci0gICAgICAgICAgfQotICAg ICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgfQotI2VuZGlm IC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmbmRlZiBOT1BVU0gKLSAgICAg IGNhc2UgRk5fUkFXOiAgICAgICAgICAgICAgICAgICAgICAvKiBcZnJhd2NvbW1hbmQoKSAqLwot ICAgICAgY2FzZSBGTl9DTUQ6IHsgICAgICAgICAgICAgICAgICAgIC8qIFxmY29tbWFuZCgpICov Ci0gICAgICAgICAgaW50IHgsIGMsIG4gPSBGTlZBTEw7Ci0gICAgICAgICAgeCA9IDA7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogQ29tcGxldGlvbiBmbGFnICovCi0vKgotICBaSUZJTEUgY2Fu IGJlIHNhZmVseSB1c2VkIGJlY2F1c2Ugd2UgY2FuJ3QgcG9zc2libHkgYmUgdHJhbnNmZXJyaW5n IGEgZmlsZQotICB3aGlsZSBleGVjdXRpbmcgdGhpcyBmdW5jdGlvbi4KLSovCi0gICAgICAgICAg aWYgKCFub3B1c2ggJiYgenhjbWQoWklGSUxFLGJwWzBdKSA+IDApIHsgLyogT3BlbiB0aGUgY29t bWFuZCAqLwotICAgICAgICAgICAgICB3aGlsZSAobi0tID4gLTEpIHsgICAgICAgIC8qIFJlYWQg ZnJvbSBpdCAqLwotICAgICAgICAgICAgICAgICAgaWYgKChjID0gem1pbmNoYXIoKSkgPCAwKSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgeCA9IDE7ICAgICAgICAgICAgIC8qIEVPRiAtIHNldCBj b21wbGV0aW9uIGZsYWcgKi8KLSAgICAgICAgICAgICAgICAgICAgICBpZiAoY3ggPT0gRk5fQ01E KSB7IC8qIElmIG5vdCAicmF3Y29tbWFuZCIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg cC0tOyAgICAgICAgICAgLyogcmVtb3ZlIHRyYWlsaW5nIG5ld2xpbmVzICovCi0gICAgICAgICAg ICAgICAgICAgICAgICAgIHdoaWxlICgqcCA9PSBDUiB8fCAqcCA9PSBMRikKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwLS07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHArKzsKLSAg ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgKnAgPSBOVUw7ICAg ICAgICAgLyogVGVybWluYXRlIHRoZSBzdHJpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgICAgIH0gZWxzZSAgICAgICAgICAgICAgICAvKiBDb21tYW5k IHN0aWxsIHJ1bm5pbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgKnArKyA9IGM7ICAgICAgICAg ICAvKiBDb3B5IHRoZSBieXRlcyAqLwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIHpj bG9zZShaSUZJTEUpOyAgICAgICAgICAgLyogQ2xvc2UgdGhlIGNvbW1hbmQgKi8KLSAgICAgICAg ICB9Ci0gICAgICAgICAgLyogUmV0dXJuIG51bGwgc3RyaW5nIGlmIGNvbW1hbmQncyBvdXRwdXQg d2FzIHRvbyBsb25nLiAqLwotICAgICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgICBpZiAoIXgp IHsKLSAgICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAgICAgICAgaWYgKGZuZGlhZ3Mp Ci0gICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotICAgICAgICAgICAgICAg ICAgICAgICAgICI8RVJST1I6UkVTVUxUX1RPT19MT05HOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0g ICAgICAgICAgfQotICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICB9Ci0jZW5kaWYgLyogTk9Q VVNIICovCi0gICAgfSAvKiBCcmVhayB1cCBiaWcgc3dpdGNoLi4uICovCi0KLSAgICBzd2l0Y2gg KHkpIHsKLSAgICAgIGNhc2UgRk5fU1RYOiAgICAgICAgICAgICAgICAgICAgICAvKiBcZnN0cmlw eChzdHJpbmcsYykgKi8KLSAgICAgICAgaWYgKCEocyA9IGJwWzBdKSkgICAgICAgICAgICAgICAv KiBNYWtlIHN1cmUgdGhlcmUgaXMgYSBzdHJpbmcgKi8KLSAgICAgICAgICBnb3RvIGZuZW5kOwot ICAgICAgICBjID0gJy4nOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJhY3RlciB0byBz dHJpcCBmcm9tICovCi0gICAgICAgIGlmIChhcmduID4gMSkgaWYgKCpicFsxXSkgYyA9ICpicFsx XTsKLSAgICAgICAgbiA9IGNrc3RybmNweShmbnZhbCxicFswXSxGTlZBTEwpOwotICAgICAgICB3 aGlsZSAoLS1uID49IDApIHsKLSAgICAgICAgICAgIGlmIChmbnZhbFtuXSA9PSBjKSB7Ci0gICAg ICAgICAgICAgICAgZm52YWxbbl0gPSBOVUw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcCA9IGZudmFsOwotICAgICAgICBnb3RvIGZu ZW5kOwotCi0gICAgICBjYXNlIEZOX1NUTDogICAgICAgICAgICAgICAgICAgICAgLyogXGZsb3Ao c3RyaW5nLGMpICovCi0gICAgICBjYXNlIEZOX0xPUFg6IHsJCQkvKiBcZmxvcHgoc3RyaW5nLGMp ICovCi0JICBpbnQgbiA9IDE7Ci0JICBpZiAoIShzID0gYnBbMF0pKQkJLyogTWFrZSBzdXJlIHRo ZXJlIGlzIGEgc3RyaW5nICovCi0JICAgIGdvdG8gZm5lbmQ7Ci0JICBjID0gJy4nOwkJCS8qIENo YXJhY3RlciB0byBzdHJpcCB0byAqLwotCSAgaWYgKGFyZ24gPiAxKSBpZiAoKmJwWzFdKSBjID0g KmJwWzFdOwotCSAgaWYgKGFyZ24gPiAyKSBpZiAoKmJwWzJdKSB7Ci0jaWZuZGVmIE5PRkxPQVQK LQkgICAgICBuID0gMDsKLQkgICAgICBpZiAoaXNmbG9hdChicFsyXSwwKSkgewotCQkgIG4gPSAo aW50KWZsb2F0dmFsOwotCQkgIGlmIChuIDwgMCkgbiA9IDA7Ci0JICAgICAgfSBlbHNlCi0jZW5k aWYJLyogTk9GTE9BVCAqLwotCQluID0gYXRvaShicFsyXSk7Ci0JICB9Ci0JICB4ID0gMDsKLQkg IGlmIChjeCA9PSBGTl9MT1BYKSB7CQkvKiBMb3B4IChmcm9tIHJpZ2h0KSAqLwotCSAgICAgIGlm IChuID09IDApCi0JCWdvdG8gZm5lbmQ7Ci0JICAgICAgcyArPSBzdHJsZW4ocykgLSAxOwkvKiBX ZSBhbHJlYWR5IGtub3cgaXQncyA+IDAgKi8KLQkgICAgICB3aGlsZSAocy0tID49IGJwWzBdKSB7 Ci0JCSAgaWYgKCpzID09IGMpIHsKLQkJICAgICAgbi0tOwotCQkgICAgICBpZiAobiA9PSAwKSB7 Ci0JCQkgIHMrKzsKLQkJCSAgeCA9IDE7Ci0JCQkgIGJyZWFrOwotCQkgICAgICB9Ci0JCSAgfQot CSAgICAgIH0KLQkgICAgICBpZiAoIXgpIHMgPSAiIjsKLQkgIH0gZWxzZSB7CQkJLyogTG9wIChm cm9tIGxlZnQpICovCi0JICAgICAgaWYgKG4gPT0gMCkgewotCQkgIHAgPSBicFswXTsKLQkJICBn b3RvIGZuZW5kOwotCSAgICAgIH0KLQkgICAgICB3aGlsZSAoKnMrKykgewotCQkgIGlmICgqKHMt MSkgPT0gYykgewotCQkgICAgICBpZiAoLS1uID09IDApIHsKLQkJCSAgeCA9IDE7Ci0JCQkgIGJy ZWFrOwotCQkgICAgICB9Ci0JCSAgfQotCSAgICAgIH0KLQkgICAgICBpZiAoIXgpIHMgPSBicFsw XTsKLQkgIH0KLQkgIGNrc3RybmNweShmbnZhbCxzLEZOVkFMTCk7Ci0JICBwID0gZm52YWw7Ci0J ICBnb3RvIGZuZW5kOwotICAgICAgfQotICAgICAgY2FzZSBGTl9TVE46ICAgICAgICAgICAgICAg ICAgICAgIC8qIFxmc3RyaXBuKHN0cmluZyxuKSAqLwotICAgICAgICBpZiAoYXJnbiA8IDEpICAg ICAgICAgICAgICAgICAgIC8qIFJlbW92ZSBuIGNoYXJzIGZyb20gcmlnaHQgKi8KLSAgICAgICAg ICBnb3RvIGZuZW5kOwotICAgICAgICB2YWwxID0gIjAiOwotICAgICAgICBpZiAoYXJnbiA+IDEp Ci0gICAgICAgICAgaWYgKCooYnBbMV0pKQotICAgICAgICAgICAgdmFsMSA9IGV2YWx4KGJwWzFd KTsKLSAgICAgICAgaWYgKCFjaGtudW0odmFsMSkpIHsKLSAgICAgICAgICAgIGZhaWxlZCA9IDE7 Ci0gICAgICAgICAgICBldmFsZXJyKGZuKTsKLSAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAg ICAgIH0KLSAgICAgICAgbiA9IGF0b2kodmFsMSk7Ci0gICAgICAgIGlmIChuIDwgMCkgbiA9IDA7 Ci0gICAgICAgIGsgPSAoaW50KXN0cmxlbihzID0gYnBbMF0pIC0gbjsKLSAgICAgICAgaWYgKGsg PCAwKSBrID0gMDsKLSAgICAgICAgcCA9IGZudmFsOwotICAgICAgICB3aGlsZSAoay0tID4gMCkK LSAgICAgICAgICAqcCsrID0gKnMrKzsKLSAgICAgICAgKnAgPSBOVUw7Ci0gICAgICAgIHAgPSBm bnZhbDsKLSAgICAgICAgZ290byBmbmVuZDsKLQotICAgICAgY2FzZSBGTl9TVEI6IHsgICAgICAg ICAgICAgICAgICAgIC8qIFxmc3RyaXBiKHN0cmluZyxjKSAqLwotICAgICAgICAgIGNoYXIgYzIg PSBOVUw7Ci0gICAgICAgICAgaW50IGksIGsgPSAwOwotICAgICAgICAgIGNoYXIgKiBncl9vcG4g PSAiXCJ7JyhbPCI7ICAgIC8qIEdyb3VwIG9wZW4gYnJhY2tldHMgKi8KLSAgICAgICAgICBjaGFy ICogZ3JfY2xzID0gIlwifScpXT4iOyAgICAvKiBHcm91cCBjbG9zZSBicmFja2V0cyAqLwotCi0g ICAgICAgICAgcCA9IGZudmFsOwotICAgICAgICAgICpwID0gTlVMOwotICAgICAgICAgIGlmICgh KHMgPSBicFswXSkpICAgICAgICAgICAgIC8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBhIHN0cmluZyAq LwotICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICBpZiAoKHggPSBzdHJsZW4ocykp IDwgMSkKLSAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgYyA9IE5VTDsgICAgICAg ICAgICAgICAgICAgICAgLyogQnJhY2UvYnJhY2tldCBraW5kICovCi0gICAgICAgICAgaWYgKGFy Z24gPiAxKSB7Ci0gICAgICAgICAgICAgIGlmICgqYnBbMV0pIHsKLSAgICAgICAgICAgICAgICAg IGlmIChjaGtudW0oYnBbMV0pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgayA9IGF0b2koYnBb MV0pOwotICAgICAgICAgICAgICAgICAgICAgIGlmIChrIDwgMCkgayA9IDYzOwotICAgICAgICAg ICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKGsgJiAoMTw8aSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlmIChzWzBdID09IGdyX29wbltpXSAmJiBzW3gtMV0gPT0gZ3JfY2xzW2ldKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KGZudmFsLHMrMSxGTlZBTEwpOwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZudmFsW3gtMl0gPSBOVUw7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkoZm52YWwscyxG TlZBTEwpOyAvKiBObyBtYXRjaCAqLwotICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7 Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0JICBj ID0gIWJwWzFdID8gMCA6ICpicFsxXTsKLSAgICAgICAgICBpZiAoIWMpIGMgPSBzWzBdOwotICAg ICAgICAgIGlmIChhcmduID4gMikgaWYgKCpicFsyXSkgYzIgPSAqYnBbMl07Ci0gICAgICAgICAg aWYgKCpzID09IGMpIHsKLSAgICAgICAgICAgICAgaWYgKCFjMikgewotICAgICAgICAgICAgICAg ICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJygnOiBjMiA9ICcpJzsg YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1snOiBjMiA9ICddJzsgYnJlYWs7Ci0g ICAgICAgICAgICAgICAgICAgIGNhc2UgJ3snOiBjMiA9ICd9JzsgYnJlYWs7Ci0gICAgICAgICAg ICAgICAgICAgIGNhc2UgJzwnOiBjMiA9ICc+JzsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg IGNhc2UgJyInOiBjMiA9ICciJzsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMzk6 ICBjMiA9IDM5OyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgOTY6ICBjMiA9IDM5 OyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg ICAgICAgaWYgKGFyZ24gPT0gMikgewotICAgICAgICAgICAgICAgICAgICAgICAgICBjMiA9IGM7 Ci0gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RybmNweShmbnZhbCxzLHgpOyAvKiBMZWF2ZSBpdCBsaWtlIHRoaXMgKi8KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgZm52YWxbeF0gPSBOVUw7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGlmIChzW3gtMV0gPT0gYzIpIHsK LSAgICAgICAgICAgICAgICAgIHN0cm5jcHkoZm52YWwscysxLHgtMik7IC8qIExlYXZlIGl0IGxp a2UgdGhpcyAqLwotICAgICAgICAgICAgICAgICAgZm52YWxbeC0yXSA9IE5VTDsKLSAgICAgICAg ICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAg ICAgICAgc3RybmNweShmbnZhbCxzLHgpOwotICAgICAgICAgIGZudmFsW3hdID0gTlVMOwotICAg ICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2UgRk5fMkhFWDogICAgICAg ICAgICAgICAgICAgICAvKiBOdW1iZXIgdG8gaGV4ICovCi0gICAgICBjYXNlIEZOXzJPQ1Q6ICAg ICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIHRvIG9jdGFsICovCi0gICAgICAgIHZhbDEgPSBl dmFseChicFswXSk7Ci0gICAgICAgIGlmICghKnZhbDEpIHsKLSAgICAgICAgICAgIGZhaWxlZCA9 IDE7Ci0gICAgICAgICAgICBldmFsZXJyKGZuKTsKLSAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0g ICAgICAgIH0KLSAgICAgICAgc3ByaW50ZihmbnZhbCwgY3ggPT0gRk5fMkhFWCA/ICIlbHgiIDog IiVsbyIsIGF0b2wodmFsMSkpOyAvKiBTQUZFICovCi0gICAgICAgIGlmIChjeCA9PSBGTl8ySEVY ICYmIChpbnQpKHN0cmxlbihmbnZhbCkmMSkpCi0gICAgICAgICAgc3ByaW50ZihmbnZhbCwiMCVs eCIsYXRvbCh2YWwxKSk7IC8qIFNBRkUgKi8KLSAgICAgICAgcCA9IGZudmFsOwotICAgICAgICBn b3RvIGZuZW5kOwotCi0gICAgICBjYXNlIEZOX0ROQU06IHsgICAgICAgICAgICAgICAgICAgLyog RGlyZWN0b3J5IHBhcnQgb2YgZmlsZSBuYW1lICovCi0gICAgICAgICAgY2hhciAqczsKLSAgICAg ICAgICB6Zm5xZnAoYnBbMF0sRk5WQUxMLHApOyAgICAgICAvKiBHZXQgZnVsbCBuYW1lICovCi0g ICAgICAgICAgaWYgKCFpc2RpcihwKSkgeyAgICAgICAgICAgICAgLyogSXMgaXQgYWxyZWFkeSBh IGRpcmVjdG9yeT8gKi8KLSAgICAgICAgICAgICAgenN0cmlwKHAsJnMpOyAgICAgICAgICAgICAv KiBObyBnZXQgYmFzZW5hbWUgKi8KLSAgICAgICAgICAgICAgaWYgKCpzKSB7Ci0gICAgICAgICAg ICAgICAgICB4ID0gY2tpbmRleChzLHAsMCwwLDApOyAvKiBQb3Mgb2YgbGF0dGVyIGluIGZvcm1l ciAqLwotICAgICAgICAgICAgICAgICAgaWYgKHggPiAwKSBwW3gtMV0gPSBOVUw7Ci0gICAgICAg ICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKCFwKSBwID0gIiI7Ci0gICAgICAg ICAgZ290byBmbmVuZDsKLSAgICAgIH0KLQotI2lmbmRlZiBOT1JBTkRPTQotICAgICAgY2FzZSBG Tl9SQU5EOiAgICAgICAgICAgICAgICAgICAgIC8qIFJhbmRvbSBudW1iZXIgKi8KLSNpZmRlZiBD S19TU0wKLSAgICAgICAgaWYgKFJBTkRfYnl0ZXMoKHVuc2lnbmVkIGNoYXIgKikmayxzaXplb2Yo aykpIDwgMCkKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICBrID0gcmFuZCgpOwotICAg ICAgICB4ID0gMDsKLSAgICAgICAgaWYgKGFyZ24gPiAwKSB7Ci0gICAgICAgICAgICBpZiAoIWNo a251bShicFswXSkpIHsKLSAgICAgICAgICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAg ICAgIGlmIChmbmRpYWdzKQotICAgICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxM LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpBUkdfTk9UX05VTUVSSUM6XFxm IixmbiwiKCk+IixOVUxMKTsKLSAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAg ICAgfQotICAgICAgICAgICAgeCA9IGF0b2koYnBbMF0pOwotICAgICAgICB9Ci0jaWZkZWYgQ09N TUVOVAotICAgICAgICBzcHJpbnRmKGZudmFsLCIlZCIsICh4ID4gMCAmJiBrID4gMCkgfHwgKHgg PCAwICYmIGsgPCAwKSA/IGsgJSB4IDogCi0gICAgICAgICAgICAgICAgKHggPT0gMCA/IDAgOiAo MCAtIChrICUgKC14KSkpKSk7Ci0jZWxzZQotICAgICAgICBkZWJ1ZyhGMTExLCJyYW5kIixja2l0 b2EoeCksayk7Ci0jaWZkZWYgU1VOT1M0Ci0vKiBUaGlzIGlzIHJlYWxseSBzdHJhbmdlIGJ1dCBv biBTdW5PUywgaWYgd2UgYXJlIHJlcXVlc3RpbmcgcmFuZG9tIG51bWJlcnMgKi8KLS8qIGJldHdl ZW4gMCBhbmQgNCBvciBsZXNzLCB0aGV5IGFsd2F5cyBjb21lIG91dCBpbiBzZXF1ZW5jZTogMCAx IDIgMyAwIDEgMiAqLwotLyogU2hpZnRpbmcgdGhlIHJlc3VsdCBvZiByYW5kKCkgaW4gdGhpcyBj YXNlIGdpdmVzIGEgbW9yZSByYW5kb20gcmVzdWx0LiAgICovCi0gICAgICAgIGlmICh4IDwgNSkK LSAgICAgICAgICBrID0gayA+PiA1OwotI2VuZGlmIC8qIFNVTk9TNCAqLwotICAgICAgICBpZiAo KHggPiAwICYmIGsgPiAwKSB8fCAoeCA8IDAgJiYgayA8IDApKQotICAgICAgICAgIHggPSBrICUg eDsKLSAgICAgICAgZWxzZSBpZiAoeCA9PSAwKQotICAgICAgICAgIHggPSAwOwotICAgICAgICBl bHNlCi0gICAgICAgICAgeCA9IDAgLSAoayAlICgteCkpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJy YW5kIHgiLCIiLHgpOwotICAgICAgICBzcHJpbnRmKGZudmFsLCIlZCIsIHgpOyAgICAgICAgIC8q IFNBRkUgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIHAgPSBmbnZhbDsKLSAgICAg ICAgZ290byBmbmVuZDsKLSNlbmRpZiAvKiBOT1JBTkRPTSAqLwotICAgIH0gLyogQnJlYWsgdXAg YmlnIHN3aXRjaC4uLiAqLwotCi0gICAgc3dpdGNoICh5KSB7Ci0gICAgICBjYXNlIEZOX1NQTElU OiAgICAgICAgICAgICAgICAgICAgLyogXGZzcGxpdChzMSxhLHMyLHMzLG1hc2spICovCi0gICAg ICBjYXNlIEZOX1dPUkQ6IHsgICAgICAgICAgICAgICAgICAgLyogXGZ3b3JkKHMxLG4sczIsczMs bWFzaykgKi8KLSAgICAgICAgICBpbnQgd29yZG51bSA9IDA7Ci0gICAgICAgICAgaW50IHNwbGl0 dGluZyA9IDA7Ci0gICAgICAgICAgaW50IHg7Ci0gICAgICAgICAgaW50IGFycmF5ID0gMDsKLSAg ICAgICAgICBpbnQgZ3JvdXBpbmcgPSAwOwotICAgICAgICAgIGludCBub2NvbGxhcHNlID0gMDsK LSAgICAgICAgICBjaGFyICogc2VwID0gIiI7Ci0gICAgICAgICAgY2hhciAqIG5vdHNlcCA9ICIi OwotICAgICAgICAgIGNoYXIgKiBicDAgPSBOVUxMOwotICAgICAgICAgIGNoYXIgKiBicDEgPSBO VUxMOwotICAgICAgICAgIGNoYXIgICBhYnVmWzE2XTsKLSAgICAgICAgICBzdHJ1Y3Qgc3RyaW5n YXJyYXkgKiBxID0gTlVMTDsKLQotICAgICAgICAgIHNwbGl0dGluZyA9IChjeCA9PSBGTl9TUExJ VCk7IC8qIE91ciBqb2IgKi8KLQkgIGRlYnVnKEYxMDEsIkZOX1NQTElUIHNwbGl0dGluZyIsIiIs c3BsaXR0aW5nKTsKLQotICAgICAgICAgIGZudmFsWzBdID0gc3BsaXR0aW5nID8gJzAnIDogTlVM OyAvKiBJbml0aWFsIHJldHVybiB2YWx1ZSAqLwotICAgICAgICAgIGZudmFsWzFdID0gTlVMOwot ICAgICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgICBicDAgPSBicFswXTsgICAgICAgICAgICAg ICAgICAvKiBTb3VyY2Ugc3RyaW5nICovCi0gICAgICAgICAgaWYgKCFicDApIGJwMCA9ICIiOwot ICAgICAgICAgIGRlYnVnKEYxMTEsImZzcGxpdCBicFswXSIsYnAwLGFyZ24pOwotICAgICAgICAg IGlmIChhcmduIDwgMSB8fCAhKmJwMCkgICAgICAgIC8qIElmIG5vbmUsIHJldHVybiBkZWZhdWx0 IHZhbHVlICovCi0gICAgICAgICAgICBnb3RvIGZuZW5kOwotCi0gICAgICAgICAgYnAxID0gYnBb MV07ICAgICAgICAgICAgICAgICAgLyogRnVuY3Rpb24tZGVwZW5kZW50IGFyZyAqLwotICAgICAg ICAgIGlmICghYnAxKSBicDEgPSAiIjsgICAgICAgICAgIC8qIChhcnJheSBvciBudW1iZXIpICov Ci0gICAgICAgICAgZGVidWcoRjExMCwiZnNwbGl0IGJwWzFdIixicDEsMCk7Ci0gICAgICAgICAg aWYgKGJwWzVdKSB7Ci0gICAgICAgICAgICAgIGlmICghY2hrbnVtKGJwWzVdKSkgewotICAgICAg ICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFs LEZOVkFMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJHX05PVF9OVU1F UklDOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOwot ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIHggPSBhdG9pKGJwWzVdKTsKLSAgICAgICAg ICAgICAgbm9jb2xsYXBzZSA9IHg7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmICghc3BsaXR0 aW5nKSB7ICAgICAgICAgICAgIC8qIFxmd29yZCgpOiBuID0gZGVzaXJlZCB3b3JkIG51bWJlciAq LwotICAgICAgICAgICAgICB2YWwxID0gIjEiOyAgICAgICAgICAgICAgIC8qIERlZmF1bHQgaXMg Zmlyc3Qgd29yZCAqLwotICAgICAgICAgICAgICBpZiAoYXJnbiA+IDEpICAgICAgICAgICAgIC8q IFdvcmQgbnVtYmVyIHN1cHBsaWVkICovCi0gICAgICAgICAgICAgICAgaWYgKCpicDEpCi0gICAg ICAgICAgICAgICAgICB2YWwxID0gZXZhbHgoYnAxKTsKLSAgICAgICAgICAgICAgaWYgKCFjaGtu dW0odmFsMSkpIHsKLSAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICAg ICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAi PEVSUk9SOkFSR19OT1RfTlVNRVJJQzpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAgICAgICAg ICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBuID0gYXRv aSh2YWwxKTsKLSAgICAgICAgICB9IGVsc2UgaWYgKGFyZ24gPiAxICYmICpicDEpIHsgLyogXGZz cGxpdCgpOiBuID0gd29yZCBjb3VudCAqLwotICAgICAgICAgICAgICBja3N0cm5jcHkoYWJ1Zixi cDEsMTYpOyAgIC8qIEdldCBhcnJheSByZWZlcmVuY2UgKi8KLSAgICAgICAgICAgICAgZGVidWco RjExMCwiZnNwbGl0IGFidWYgMSIsYWJ1ZiwwKTsKLSAgICAgICAgICAgICAgZmFpbGVkID0gMTsg ICAgICAgICAgICAgICAvKiBBc3N1bWUgaXQncyBiYWQgKi8KLSAgICAgICAgICAgICAgaWYgKGZu ZGlhZ3MpICAgICAgICAgICAgICAvKiBEZWZhdWx0IGlzIHRoaXMgZXJyb3IgbWVzc2FnZSAqLwot ICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAiPEVSUk9SOkFSR19CQURfQVJSQVk6XFxmIixmbiwiKCk+IixOVUxMKTsKLSAgICAg ICAgICAgICAgaWYgKGFidWZbMF0gIT0gJyYnKSAgICAgICAvKiAiQWRkcmVzcyIgb2YgYXJyYXkg Ki8KLSAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOyAgICAgICAgICAgICAvKiBJdCdzIGJhZCAq LwotICAgICAgICAgICAgICBpZiAoYWJ1ZlsyXSkgeyAgICAgICAgICAgIC8qIENoZWNrIGZvciBi cmFja2V0cyAqLwotICAgICAgICAgICAgICAgICAgaWYgKGFidWZbMl0gIT0gJ1snIHx8IGFidWZb M10gIT0gJ10nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsgICAgICAgLyog QmFkICovCi0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgZGVidWcoRjExMCwiZnNwbGl0IGFidWYgMiIsYWJ1ZiwwKTsKLSAgICAgICAgICAgICAgaWYg KGFidWZbMV0gPiA2NCAmJiBhYnVmWzFdIDwgOTEpIC8qIENvbnZlcnQgdXBwZXIgdG8gbG93ZXIg Ki8KLSAgICAgICAgICAgICAgICBhYnVmWzFdICs9IDMyOwotICAgICAgICAgICAgICBpZiAoYWJ1 ZlsxXSA8IDk3IHx8IGFidWZbMV0gPiAxMjIpIHsgLyogQ2hlY2sgZm9yIGEteiAqLwotICAgICAg ICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJmc3BsaXQgYWJ1ZiAzIixhYnVmLDApOwotICAgICAgICAgICAgICBhcnJheSA9 IDE7Ci0gICAgICAgICAgICAgIGZudmFsWzBdID0gTlVMOyAgICAgICAgICAgLyogTm8gZXJyb3Is IGVyYXNlIG1lc3NhZ2UgKi8KLSAgICAgICAgICAgICAgZmFpbGVkID0gMDsgICAgICAgICAgICAg ICAvKiBVbnNldCBmYWlsdXJlIGZsYWcgKi8KLSAgICAgICAgICAgICAgbiA9IDA7ICAgICAgICAg ICAgICAgICAgICAvKiBJbml0aWFsaXplIHdvcmQgY291bnRlciAqLwotICAgICAgICAgIH0KLSAg ICAgICAgICBpZiAoYXJnbiA+IDIpICAgICAgICAgICAgICAgICAvKiBIYXZlIGJyZWFrIHNldD8g Ki8KLSAgICAgICAgICAgIHNlcCA9IGJwWzJdOwotICAgICAgICAgIGRlYnVnKEYxMTEsImZzcGxp dCBzZXAiLHNlcCxhcmduKTsKLSAgICAgICAgICBpZiAoYXJnbiA+IDMpICAgICAgICAgICAgICAg ICAvKiBIYXZlIGluY2x1ZGUgc2V0PyAqLwotICAgICAgICAgICAgbm90c2VwID0gYnBbM107Ci0g ICAgICAgICAgZGVidWcoRjExMSwiZnNwbGl0IG5vdHNlcCIsbm90c2VwLGFyZ24pOwotICAgICAg ICAgIGlmIChhcmduID4gNCkgeyAgICAgICAgICAgICAgIC8qIEhhdmUgZ3JvdXBpbmcgc2V0PyAq LwotICAgICAgICAgICAgICBjaGFyICogYnA0ID0gYnBbNF07Ci0gICAgICAgICAgICAgIGRlYnVn KEYxMTEsImZzcGxpdCBicDQiLGJwNCxhcmduKTsKLSAgICAgICAgICAgICAgaWYgKCFicDQpIGJw NCA9ICIwIjsKLSAgICAgICAgICAgICAgaWYgKCEqYnA0KSBicDQgPSAiMCI7Ci0gICAgICAgICAg ICAgIGlmIChjaGtudW0oYnA0KSkgewotICAgICAgICAgICAgICAgICAgZ3JvdXBpbmcgPSBhdG9p KGJwNCk7Ci0gICAgICAgICAgICAgICAgICBpZiAoZ3JvdXBpbmcgPT0gLTEpCi0gICAgICAgICAg ICAgICAgICAgIGdyb3VwaW5nID0gMTI3OwotICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg ICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAgICAgICAgICAgIGlmIChmbmRpYWdzKQot ICAgICAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICI8RVJST1I6QVJHX05PVF9OVU1FUklDOlxcZiIsZm4sIigpPiIsTlVM TCk7Ci0gICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgfQotICAgICAgICAgIC8qIEFyZ3MgcGFyc2VkLCBub3cgZG8gdGhlIHdvcmsgKi8KLQot ICAgICAgICAgIGRlYnVnKEYxMTEsImZzcGxpdCBicDAiLGJwMCxuKTsKLSAgICAgICAgICBxID0g Y2tzcGxpdChzcGxpdHRpbmcsbixicDAsc2VwLG5vdHNlcCxncm91cGluZywwLG5vY29sbGFwc2Up OwotCi0gICAgICAgICAgd29yZG51bSA9IHEgPyBxLT5hX3NpemUgOiAtMTsgLyogQ2hlY2sgcmVz dWx0ICovCi0gICAgICAgICAgaWYgKHdvcmRudW0gPCAwKSB7Ci0gICAgICAgICAgICAgIGZhaWxl ZCA9IDE7ICAgICAgICAgICAgICAgLyogRmFpbHVyZSAqLwotICAgICAgICAgICAgICBpZiAoZm5k aWFncykKLSAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgKHdvcmRudW0gPT0gLTEpID8KLSAgICAgICAgICAgICAgICAgICAgICAg ICAiPEVSUk9SOk1BTExPQ19GQUlMVVJFOlxcZiIgOgotICAgICAgICAgICAgICAgICAgICAgICAg ICI8RVJST1I6VE9PX01BTllfV09SRFM6XFxmIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBm biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiKCk+IiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICBOVUxMCi0gICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgZ290 byBmbmVuZDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHNwbGl0dGluZykgeyAgICAgICAg ICAgICAgLyogXGZzcGxpdCgpIHJlc3VsdCAqLwotICAgICAgICAgICAgICBja3N0cm5jcHkoZm52 YWwsY2tpdG9hKHdvcmRudW0pLEZOVkFMTCk7Ci0gICAgICAgICAgICAgIGlmIChhcnJheSkgeyAg ICAgICAgICAgICAgLyogQXJyYXkgd2FzIG5vdCBkZWNsYXJlZC4gKi8KLSAgICAgICAgICAgICAg ICAgIGludCBpOwotICAgICAgICAgICAgICAgICAgaWYgKCh4ID0gZGNsYXJyYXkoYWJ1ZlsxXSx3 b3JkbnVtKSkgPCAwKSB7IC8qIERlY2xhcmUgaXQuICovCi0gICAgICAgICAgICAgICAgICAgICAg ZmFpbGVkID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoZm5kaWFncykKLSAgICAgICAg ICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICI8RVJST1I6TUFMTE9DX0ZBSUxVUkU6XFxmIixmbiwiKCk+IixOVUxM KTsKLSAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8PSB3b3JkbnVtOyBpKyspIHsgLyog Q29weSByZXN1bHRzICovCi0gICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmKGFfcHRyW3hd W2ldKSxxLT5hX2hlYWRbaV0pOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg ICAgYV9wdHJbeF1bMF0gPSBOVUxMOyAgIC8qIEFycmF5IGlzIDEtYmFzZWQgKi8KLSAgICAgICAg ICAgICAgICAgIG1ha2VzdHIoJihhX3B0clt4XVswXSksZm52YWwpOyAvKiBFbGVtZW50ID0gc2l6 ZSAqLwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAg ICAgICAgLyogXGZ3b3JkKCkgcmVzdWx0ICovCi0gICAgICAgICAgICAgIGNoYXIgKiBzOwotICAg ICAgICAgICAgICBzID0gcS0+YV9oZWFkWzFdOwotICAgICAgICAgICAgICBpZiAoIXMpIHMgPSAi IjsKLSAgICAgICAgICAgICAgY2tzdHJuY3B5KGZudmFsLHMsRk5WQUxMKTsKLSAgICAgICAgICB9 Ci0gICAgICAgICAgZ290byBmbmVuZDsgICAgICAgICAgICAgICAgICAgLyogRG9uZSAqLwotICAg ICAgfQotCi0gICAgfSAvKiBCcmVhayB1cCBiaWcgc3dpdGNoLi4uICovCi0KLSAgICBzd2l0Y2gg KHkpIHsKLQotI2lmZGVmIENLX0tFUkJFUk9TCi0gICAgICBjYXNlIEZOX0tSQl9USzogICAgICAg ICAgICAgICAgICAgLyogS2VyYmVyb3MgdGlja2V0cyAqLwotICAgICAgY2FzZSBGTl9LUkJfTlg6 ICAgICAgICAgICAgICAgICAgIC8qIEtlcmJlcm9zIG5leHQgdGlja2V0ICovCi0gICAgICBjYXNl IEZOX0tSQl9JVjogICAgICAgICAgICAgICAgICAgLyogS2VyYmVyb3MgdGlja2V0IGlzIHZhbGlk ICovCi0gICAgICBjYXNlIEZOX0tSQl9GRzogICAgICAgICAgICAgICAgICAgLyogS2VyYmVyb3Mg VGlja2V0IGZsYWdzICovCi0gICAgICBjYXNlIEZOX0tSQl9UVDogeyAgICAgICAgICAgICAgICAg LyogS2VyYmVyb3MgdGlja2V0IHRpbWUgKi8KLSAgICAgICAgICBpbnQga3YgPSAwOyAgICAgICAg ICAgICAgICAgICAvKiBLZXJiZXJvcyB2ZXJzaW9uICovCi0gICAgICAgICAgaW50IG4gPSAwOwot ICAgICAgICAgIGNoYXIgKiBzID0gTlVMTDsKLSAgICAgICAgICBpZiAocmRpZ2l0cyhicFswXSkp IHsKLSAgICAgICAgICAgICAga3YgPSBhdG9pKGJwWzBdKTsKLSAgICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgICBpZiAoZm5kaWFncykKLSAg ICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgIjxFUlJPUjpBUkdfTk9UX05VTUVSSUM6XFxmIixmbiwiKCk+IixOVUxMKTsKLSAgICAg ICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGt2ICE9IDQg JiYga3YgIT0gNSkgewotICAgICAgICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgICBp ZiAoZm5kaWFncykKLSAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpBUkdfT1VUX09GX1JBTkdFOlxcZiIsZm4sIigp PiIsTlVMTCk7Ci0gICAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgfQotICAgICAg ICAgIGlmICgoY3ggPT0gRk5fS1JCX0lWIHx8IGN4ID09IEZOX0tSQl9UVCB8fCBjeCA9PSBGTl9L UkJfRkcpICYmCi0gICAgICAgICAgICAgICBhcmduIDwgMikgewotICAgICAgICAgICAgICBmYWls ZWQgPSAxOwotICAgICAgICAgICAgICBpZiAoZm5kaWFncykKLSAgICAgICAgICAgICAgICBja21h a21zZyhmbnZhbCxGTlZBTEwsIjxFUlJPUjpNSVNTSU5HX0FSRzpcXGYiLGZuLCIoKT4iLE5VTEwp OwotICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgIH0KLSAgICAgICAgICBzd2l0 Y2ggKHkpIHsKLSAgICAgICAgICAgIGNhc2UgRk5fS1JCX1RLOiAgICAgICAgICAgICAvKiBOdW1i ZXIgb2YgS2VyYmVyb3MgdGlja2V0cyAqLwotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0gICAg ICAgICAgICAgIHN3aXRjaCAoa3YpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAg ICAgICAgICAgICBuID0gY2tfa3JiNF9nZXRfdGt0cygpOwotICAgICAgICAgICAgICAgICAgc3By aW50ZihmbnZhbCwgIiVkIiwgKG4gPj0gMCkgPyBuIDogMCk7IC8qIFNBRkUgKi8KLSAgICAgICAg ICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgICAgICAgY2FzZSA1OiB7Ci0gICAgICAg ICAgICAgICAgICAgIGV4dGVybiBjaGFyICoga3JiNV9kX2NjOwotICAgICAgICAgICAgICAgICAg ICBuID0gY2tfa3JiNV9nZXRfdGt0cyhrcmI1X2RfY2MpOwotICAgICAgICAgICAgICAgICAgICBz cHJpbnRmKGZudmFsLCAiJWQiLCAobiA+PSAwKSA/IG4gOiAwKTsgLyogU0FGRSAqLwotICAgICAg ICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgc3ByaW50ZihmbnZhbCwiJWQiLDApOyAgICAvKiBT QUZFICovCi0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSAgICAgICAgICAgICAgZ290 byBmbmVuZDsKLQotICAgICAgICAgICAgY2FzZSBGTl9LUkJfTlg6ICAgICAgICAgICAgIC8qIEtl cmJlcm9zIG5leHQgdGlja2V0ICovCi0jaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KLSAgICAgICAg ICAgICAgc3dpdGNoIChrdikgewotICAgICAgICAgICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAg ICAgICAgIHMgPSBja19rcmI0X2dldF9uZXh0X3RrdCgpOwotICAgICAgICAgICAgICAgICAgY2tz dHJuY3B5KGZudmFsLCBzID8gcyA6ICIiLEZOVkFMTCk7Ci0gICAgICAgICAgICAgICAgICBnb3Rv IGZuZW5kOwotICAgICAgICAgICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgICAgICAgIHMgPSBj a19rcmI1X2dldF9uZXh0X3RrdCgpOwotICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KGZudmFs LCBzID8gcyA6ICIiLEZOVkFMTCk7Ci0gICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotICAg ICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgICBzcHJpbnRmKGZudmFsLCJrJWQgbmV4 dC10aWNrZXQtc3RyaW5nIixrdik7IC8qIFNBRkUgKi8KLSNlbmRpZiAvKiBDS19BVVRIRU5USUNB VElPTiAqLwotICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotCi0gICAgICAgICAgICBjYXNlIEZO X0tSQl9JVjogICAgICAgICAgICAgLyogS2VyYmVyb3MgdGlja2V0IGlzIHZhbGlkICovCi0jaWZk ZWYgQ0tfQVVUSEVOVElDQVRJT04KLSAgICAgICAgICAgICAgLyogUmV0dXJuIDEgaWYgdmFsaWQs IDAgaWYgbm90ICovCi0gICAgICAgICAgICAgIHN3aXRjaCAoa3YpIHsKLSAgICAgICAgICAgICAg ICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgICBuID0gY2tfa3JiNF90a3RfaXN2YWxpZChicFsx XSk7Ci0gICAgICAgICAgICAgICAgICBzcHJpbnRmKGZudmFsLCAiJWQiLCBuID4gMCA/IDEgOiAw KTsgLyogU0FWRSAqLwotICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICAg ICAgICBjYXNlIDU6IHsKLSAgICAgICAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIgKiBrcmI1X2Rf Y2M7Ci0gICAgICAgICAgICAgICAgICAgIG4gPSBja19rcmI1X3RrdF9pc3ZhbGlkKGtyYjVfZF9j YyxicFsxXSk7Ci0gICAgICAgICAgICAgICAgICAgIHNwcmludGYoZm52YWwsIiVkIiwgbiA+IDAg PyAxIDogMCk7IC8qIFNBRkUgKi8KLSAgICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgIHNw cmludGYoZm52YWwsIiVkIiwwKTsgICAgLyogU0FGRSAqLwotI2VuZGlmIC8qIENLX0FVVEhFTlRJ Q0FUSU9OICovCi0gICAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0KLSAgICAgICAgICAgIGNhc2Ug Rk5fS1JCX1RUOiAgICAgICAgICAgICAvKiBLZXJiZXJvcyB0aWNrZXQgdGltZSAqLwotI2lmZGVm IENLX0FVVEhFTlRJQ0FUSU9OCi0gICAgICAgICAgICAgIHN3aXRjaCAoa3YpIHsKLSAgICAgICAg ICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgICBuID0gY2tfa3JiNF90a3RfdGltZShi cFsxXSk7Ci0gICAgICAgICAgICAgICAgICBzcHJpbnRmKGZudmFsLCIlZCIsIG4gPj0gMCA/IG4g OiAwKTsgLyogU0FGRSAqLwotICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAg ICAgICAgICBjYXNlIDU6IHsKLSAgICAgICAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIgKiBrcmI1 X2RfY2M7Ci0gICAgICAgICAgICAgICAgICAgIG4gPSBja19rcmI1X3RrdF90aW1lKGtyYjVfZF9j YyxicFsxXSk7Ci0gICAgICAgICAgICAgICAgICAgIHNwcmludGYoZm52YWwsIiVkIiwgbiA+PSAw ID8gbiA6IDApOyAvKiBTQUZFICovCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0g ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgICBj a3N0cm5jcHkoZm52YWwsIjYwMCIsRk5WQUxMKTsgLyogU29tZSB0aW1lICovCi0jZW5kaWYgLyog Q0tfQVVUSEVOVElDQVRJT04gKi8KLSAgICAgICAgICAgICAgZ290byBmbmVuZDsKLQotICAgICAg ICAgICAgY2FzZSBGTl9LUkJfRkc6ICAgICAgICAgICAgIC8qIEtlcmJlcm9zIHRpY2tldCBmbGFn cyAqLwotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0gICAgICAgICAgICAgIHN3aXRjaCAoa3Yp IHsKLSAgICAgICAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgICBmbnZhbFswXSA9 ICdcMCc7Ci0gICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgICAgICAgIGNh c2UgNTogewotICAgICAgICAgICAgICAgICAgICBleHRlcm4gY2hhciAqIGtyYjVfZF9jYzsKLSAg ICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KGZudmFsLGNrX2tyYjVfdGt0X2ZsYWdzKGtyYjVf ZF9jYyxicFsxXSksRk5WQUxMKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgIGZu dmFsWzBdID0gJ1wwJzsKLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotICAgICAgICAg ICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgIH0KLSAgICAgICAgICBwID0gZm52YWw7Ci0gICAg ICAgICAgZ290byBmbmVuZDsKLSAgICAgIH0KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotCi0j aWZkZWYgRk5fRVJSTVNHCi0gICAgICBjYXNlIEZOX0VSUk1TRzoKLSAgICAgICAgaWYgKHJkaWdp dHMoYnBbMF0pKSB7Ci0gICAgICAgICAgICBrID0gYXRvaShicFswXSk7Ci0gICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCi0g ICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLCI8RVJST1I6QVJHX05PVF9OVU1FUklD OlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICB9 Ci0jaWZkZWYgVk1TCi0gICAgICAgIGNrc3RybmNweShmbnZhbCxja3Ztc2VycnN0cihrKSxGTlZB TEwpOwotI2Vsc2UKLSAgICAgICAgeCA9IGVycm5vOwotICAgICAgICBlcnJubyA9IGs7Ci0gICAg ICAgIGNrc3RybmNweShmbnZhbCxja19lcnJzdHIoKSxGTlZBTEwpOwotICAgICAgICBlcnJubyA9 IHg7Ci0jZW5kaWYgLyogVk1TICovCi0gICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgZ290byBm bmVuZDsKLSNlbmRpZiAvKiBGTl9FUlJNU0cgKi8KLQotICAgICAgY2FzZSBGTl9ESU06IHsKLSAg ICAgICAgICBpbnQgbWF4OwotICAgICAgICAgIGNoYXIgYWJ1ZlsxNl0sICpzOwotICAgICAgICAg IGZudmFsWzBdID0gTlVMOyAgICAgICAgICAgICAgIC8qIEluaXRpYWwgcmV0dXJuIHZhbHVlICov Ci0gICAgICAgICAgY2tzdHJuY3B5KGFidWYsYnBbMF0sMTYpOyAgICAgLyogR2V0IGFycmF5IHJl ZmVyZW5jZSAqLwotICAgICAgICAgIHMgPSBhYnVmOwotICAgICAgICAgIGlmICgqcyA9PSBDTURR KSBzKys7Ci0gICAgICAgICAgZmFpbGVkID0gMTsgICAgICAgICAgICAgICAgICAgLyogQXNzdW1l IGl0J3MgYmFkICovCi0gICAgICAgICAgcCA9IGZudmFsOyAgICAgICAgICAgICAgICAgICAgLyog UG9pbnQgdG8gcmVzdWx0ICovCi0gICAgICAgICAgaWYgKGZuZGlhZ3MpICAgICAgICAgICAgICAg ICAgLyogRGVmYXVsdCBpcyB0aGlzIGVycm9yIG1lc3NhZ2UgKi8KLSAgICAgICAgICAgIGNrbWFr bXNnKGZudmFsLEZOVkFMTCwiPEVSUk9SOkFSR19CQURfQVJSQVk6XFxmIixmbiwiKCk+IixOVUxM KTsKLSAgICAgICAgICBpZiAoc1swXSAhPSAnJicpIHsgICAgICAgICAgICAvKiAiQWRkcmVzcyIg b2YgYXJyYXkgKi8KLSAgICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICB9Ci0gICAg ICAgICAgaWYgKHNbMl0pIHsKLSAgICAgICAgICAgICAgaWYgKHNbMl0gIT0gJ1snIHx8IHNbM10g IT0gJ10nKSB7Ci0gICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChzWzFdID49IDY0ICYmIHNbMV0gPCA5MSkgIC8q IENvbnZlcnQgdXBwZXIgdG8gbG93ZXIgKi8KLSAgICAgICAgICAgIHNbMV0gKz0gMzI7Ci0gICAg ICAgICAgaWYgKHNbMV0gPCA5NSB8fCBzWzFdID4gMTIyKSB7IC8qIENoZWNrIGZvciBhLXogKi8K LSAgICAgICAgICAgICAgZ290byBmbmVuZDsJIAkgLyogQmFkICovCi0gICAgICAgICAgfQotICAg ICAgICAgIGlmICgobWF4ID0gY2hrYXJyYXkoc1sxXSwxKSkgPCAxKSAvKiAoc2Vjb25kIGFyZyB3 YXMgMSkgKi8KLSAgICAgICAgICAgIG1heCA9IDA7Ci0gICAgICAgICAgZmFpbGVkID0gMDsgICAg ICAgICAgICAgICAgICAgLyogVW5zZXQgZmFpbHVyZSBmbGFnICovCi0gICAgICAgICAgc3ByaW50 ZihmbnZhbCwiJWQiLG1heCk7ICAgICAgLyogU0FGRSAqLwotICAgICAgICAgIGdvdG8gZm5lbmQ7 Ci0gICAgICB9Ci0KLSAgICB9IC8qIEJyZWFrIHVwIGJpZyBzd2l0Y2guLi4gKi8KLQotICAgIHN3 aXRjaCAoeSkgewotICAgICAgY2FzZSBGTl9KREFURToKLSAgICAgICAgaWYgKGFyZ24gPCAxKSAg ICAgICAgICAgICAgICAgICAvKiBDaGVjayBudW1iZXIgb2YgYXJncyAqLwotICAgICAgICAgIHAg PSBja2RhdGUoKTsgICAgICAgICAgICAgICAgIC8qIE5vbmUsIGdldCB0b2RheSdzIGRhdGUtdGlt ZSAqLwotICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNvbWUgKi8K LSAgICAgICAgICBwID0gYnBbMF07ICAgICAgICAgICAgICAgICAgICAvKiBVc2UgZmlyc3QgKi8K LSAgICAgICAgcCA9IGNrY3Z0ZGF0ZShwLDApOyAgICAgICAgICAgICAvKiBDb252ZXJ0IHRvIHN0 YW5kYXJkIGZvcm0gKi8KLSAgICAgICAgY2tzdHJuY3B5KGZudmFsLHpqZGF0ZShwKSxGTlZBTEwp OyAvKiBDb252ZXJ0IHRvIEp1bGlhbiAqLwotICAgICAgICBwID0gZm52YWw7ICAgICAgICAgICAg ICAgICAgICAgIC8qIFBvaW50IHRvIHJlc3VsdCAqLwotICAgICAgICBmYWlsZWQgPSAwOwotICAg ICAgICBpZiAoKnAgPT0gJy0nKSB7Ci0gICAgICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAg ICAgaWYgKGZuZGlhZ3MpICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgaXMgdGhpcyBlcnJvciBt ZXNzYWdlICovCi0gICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwiPEVSUk9SOkFS R19CQURfREFURTpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAgICB9Ci0gICAgICAgIGdvdG8g Zm5lbmQ7Ci0KLSAgICAgIGNhc2UgRk5fREFURUo6Ci0gICAgICAgIGNrc3RybmNweShmbnZhbCxq emRhdGUoYnBbMF0pLEZOVkFMTCk7IC8qIENvbnZlcnQgdG8geXl5eTxkYXlvZnllYXI+ICovCi0g ICAgICAgIHAgPSBmbnZhbDsgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gcmVzdWx0 ICovCi0gICAgICAgIGZhaWxlZCA9IDA7Ci0gICAgICAgIGlmICgqcCA9PSAnLScpIHsKLSAgICAg ICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICBpZiAoZm5kaWFncykgICAgICAgICAgICAg ICAgLyogRGVmYXVsdCBpcyB0aGlzIGVycm9yIG1lc3NhZ2UgKi8KLSAgICAgICAgICAgICAgY2tt YWttc2coZm52YWwsRk5WQUxMLCI8RVJST1I6QVJHX0JBRF9EQVRFOlxcZiIsZm4sIigpPiIsTlVM TCk7Ci0gICAgICAgIH0KLSAgICAgICAgZ290byBmbmVuZDsKLQotICAgICAgY2FzZSBGTl9EVElN OiAgICAgICAgICAgICAgICAgICAgIC8qIFxmY3Z0ZGF0ZSgpICovCi0gICAgICBjYXNlIEZOX1RJ TUU6ICAgICAgICAgICAgICAgICAgICAgLyogRnJlZS1mb3JtYXQgdGltZSB0byBoaDptbTpzcyAq LwotICAgICAgY2FzZSBGTl9OVElNOiAgICAgICAgICAgICAgICAgICAgIC8qIFRpbWUgdG8gc2Vj IHNpbmNlIG1pZG5pZ2h0ICovCi0gICAgICAgIHMgPSAoYXJnbiA+IDApID8gYnBbMF0gOiAiIjsK LSAgICAgICAgaWYgKCFzKSBzID0gIiI7Ci0gICAgICAgIGlmICghKnMpCi0gICAgICAgICAgcCA9 IGNrZGF0ZSgpOyAgICAgICAgICAgICAgICAgLyogTm9uZSwgZ2V0IHRvZGF5J3MgZGF0ZSAqLwot ICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNvbWUgKi8KLSAgICAg ICAgICBwID0gYnBbMF07ICAgICAgICAgICAgICAgICAgICAvKiBVc2UgZmlyc3QgKi8KLQl7Ci0J ICAgIGNoYXIgKiBzOwotCSAgICBzID0gcDsKLQkgICAgd2hpbGUgKCpzKSB7Ci0JCWlmICgqcyA8 IDMyKSB7Ci0JCSAgICAqcyA9IE5VTDsKLQkJICAgIGJyZWFrOwotCQl9Ci0JCXMrKzsKLQkgICAg fQotCSAgICAvKiBkbyB7IGlmICgqcyA8ICchJykgKnMgPSBOVUw7IGJyZWFrOyB9IHdoaWxlICgq cysrKTsgKi8KLQl9Ci0gICAgICAgIHAgPSBja2N2dGRhdGUocCwyKTsgICAgICAgICAgICAgLyog Q29udmVydCB0byBzdGFuZGFyZCBmb3JtICovCi0gICAgICAgIGlmICgqcCA9PSAnPCcpIHsKLSAg ICAgICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICBpZiAoZm5kaWFncykgICAgICAgICAg ICAgICAgLyogRGVmYXVsdCBpcyB0aGlzIGVycm9yIG1lc3NhZ2UgKi8KLSAgICAgICAgICAgICAg Y2ttYWttc2coZm52YWwsRk5WQUxMLAotICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkFS R19CQURfREFURV9PUl9USU1FOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAgICAgICBwID0g Zm52YWw7Ci0gICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICB9Ci0gICAgICAgIGlmIChh cmduID4gMSkgewkJCS8qIEZvcm1hdCBjb2RlICovCi0gICAgICAgICAgICBzID0gYnBbMV07Ci0g ICAgICAgICAgICBpZiAoIXMpIHMgPSAiIjsKLSAgICAgICAgICAgIGlmICghKnMpIHMgPSAiMCI7 Ci0gICAgICAgICAgICBpZiAoIWNoa251bShzKSkgewotICAgICAgICAgICAgICAgIGZhaWxlZCA9 IDE7Ci0gICAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCi0gICAgICAgICAgICAgICAgICBja21h a21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkFS R19OT1RfTlVNRVJJQzpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAgICAgICAgICAgIHAgPSBm bnZhbDsKLSAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgICAgfQotICAgICAg ICAgICAgeCA9IGF0b2kocyk7Ci0gICAgICAgICAgICAvKiBpZiAoeCkgKi8gcCA9IHNodWZmbGVk YXRlKHAseCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGN4ID09IEZOX1RJTUUpIHsKLSAgICAg ICAgICAgIHAgKz0gOTsKLSAgICAgICAgfSBlbHNlIGlmIChjeCA9PSBGTl9OVElNKSB7Ci0gICAg ICAgICAgICBsb25nIHNlYyA9IDBMOwotICAgICAgICAgICAgcFsxMV0gPSBOVUw7Ci0gICAgICAg ICAgICBwWzE0XSA9IE5VTDsKLSAgICAgICAgICAgIHNlYyA9IGF0b2wocCs5KSAqIDM2MDBMICsg YXRvbChwKzEyKSAqIDYwTCArIGF0b2wocCsxNSk7Ci0gICAgICAgICAgICBzcHJpbnRmKGZudmFs LCIlbGQiLHNlYyk7ICAgLyogU0FGRSAqLwotICAgICAgICAgICAgcCA9IGZudmFsOwotICAgICAg ICB9Ci0gICAgICAgIGdvdG8gZm5lbmQ7Ci0KLSAgICAgIGNhc2UgRk5fTUpEOiAgICAgICAgICAg ICAgICAgICAgICAvKiBNb2RpZmllZCBKdWxpYW4gRGF0ZSAqLwotICAgICAgICBpZiAoYXJnbiA8 IDEpICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIG51bWJlciBvZiBhcmdzICovCi0gICAgICAg ICAgcCA9IHp6bmRhdGUoKTsgICAgICAgICAgICAgICAgLyogTm9uZSwgZ2V0IHRvZGF5J3MgZGF0 ZS10aW1lICovCi0gICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU29t ZSAqLwotICAgICAgICAgIHAgPSBicFswXTsgICAgICAgICAgICAgICAgICAgIC8qIFVzZSBmaXJz dCAqLwotICAgICAgICBwID0gY2tjdnRkYXRlKHAsMCk7ICAgICAgICAgICAgIC8qIENvbnZlcnQg dG8gc3RhbmRhcmQgZm9ybSAqLwotICAgICAgICBpZiAoKnAgPT0gJy0nKSB7Ci0gICAgICAgICAg ICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgaWYgKGZuZGlhZ3MpICAgICAgICAgICAgICAgIC8q IERlZmF1bHQgaXMgdGhpcyBlcnJvciBtZXNzYWdlICovCi0gICAgICAgICAgICAgIGNrbWFrbXNn KGZudmFsLEZOVkFMTCwiPEVSUk9SOkFSR19CQURfREFURTpcXGYiLGZuLCIoKT4iLE5VTEwpOwot ICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgfQotICAgICAgICAvKiBDb252ZXJ0IHRv IG1vZGlmaWVkIEp1bGlhbiBkYXRlICovCi0gICAgICAgIHNwcmludGYoZm52YWwsIiVsZCIsbWpk KHApKTsgICAgLyogU0FGRSAqLwotICAgICAgICBwID0gZm52YWw7ICAgICAgICAgICAgICAgICAg ICAgIC8qIFBvaW50IHRvIHJlc3VsdCAqLwotICAgICAgICBnb3RvIGZuZW5kOwotCi0gICAgICBj YXNlIEZOX01KRDI6IHsKLSAgICAgICAgICBsb25nIGsgPSAwTDsKLSAgICAgICAgICBpbnQgbiA9 IDA7Ci0gICAgICAgICAgcCA9IGV2YWx4KGJwWzBdKTsKLSAgICAgICAgICBpZiAoKnAgPT0gJy0n KSB7Ci0gICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgICAgbiA9IDE7Ci0gICAgICAgICAg fQotICAgICAgICAgIGlmICghcmRpZ2l0cyhwKSkgewotICAgICAgICAgICAgICBmYWlsZWQgPSAx OwotICAgICAgICAgICAgICBldmFsZXJyKGZuKTsKLSAgICAgICAgICAgICAgcCA9IGZudmFsOwot ICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICAgIGsgPSBhdG9sKHApOwotICAgICAgICAgICAgICBpZiAobikgayA9IC1rOwotICAgICAgICAg IH0KLSAgICAgICAgICBja3N0cm5jcHkoZm52YWwsbWpkMmRhdGUoayksRk5WQUxMKTsgLyogQ29u dmVydCB0byBEYXRlICovCi0gICAgICAgICAgcCA9IGZudmFsOyAgICAgICAgICAgICAgICAgICAg LyogUG9pbnQgdG8gcmVzdWx0ICovCi0gICAgICAgICAgZmFpbGVkID0gMDsKLSAgICAgICAgICBn b3RvIGZuZW5kOwotICAgICAgfQotCi0jaWZuZGVmIE5PRElBTAotICAgICAgY2FzZSBGTl9QTkNW VDogeyAgICAgICAgICAgICAgICAgIC8qIENvbnZlcnQgcGhvbmUgbnVtYmVyICovCi0gICAgICAg ICAgZXh0ZXJuIGNoYXIgKiBwbmN2dCgpOwotICAgICAgICAgIGZhaWxlZCA9IDA7Ci0gICAgICAg ICAgcCA9IHBuY3Z0KGJwWzBdKTsKLSAgICAgICAgICBpZiAoIXApIHAgPSAiIjsKLSAgICAgICAg ICBpZiAoISpwKSB7Ci0gICAgICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgaWYgKGZu ZGlhZ3MpICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgaXMgdGhpcyBlcnJvciBtZXNzYWdlICov Ci0gICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKLSAgICAgICAgICAgICAgICAg ICAgICAgIjxFUlJPUjpBUkdfQkFEX1BIT05FTlVNOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAg ICAgIH0KLSAgICAgICAgZ290byBmbmVuZDsKLSAgICAgIH0KLSNlbmRpZiAvKiBOT0RJQUwgKi8K LQotICAgICAgY2FzZSBGTl9EQVk6Ci0gICAgICBjYXNlIEZOX05EQVk6Ci0gICAgICAgIGlmIChh cmduIDwgMSkgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgbnVtYmVyIG9mIGFyZ3MgKi8KLSAg ICAgICAgICBwID0genpuZGF0ZSgpOyAgICAgICAgICAgICAgICAvKiBOb25lLCBnZXQgdG9kYXkn cyBkYXRlLXRpbWUgKi8KLSAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBTb21lICovCi0gICAgICAgICAgcCA9IGJwWzBdOyAgICAgICAgICAgICAgICAgICAgLyogVXNl IGZpcnN0ICovCi0gICAgICAgIHAgPSBja2N2dGRhdGUocCwwKTsgICAgICAgICAgICAgLyogQ29u dmVydCB0byBzdGFuZGFyZCBmb3JtICovCi0gICAgICAgIGlmICgqcCA9PSAnLScpIHsKLSAgICAg ICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICBpZiAoZm5kaWFncykgICAgICAgICAgICAg ICAgLyogRGVmYXVsdCBpcyB0aGlzIGVycm9yIG1lc3NhZ2UgKi8KLSAgICAgICAgICAgICAgY2tt YWttc2coZm52YWwsRk5WQUxMLCI8RVJST1I6QVJHX0JBRF9EQVRFOlxcZiIsZm4sIigpPiIsTlVM TCk7Ci0gICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICB9Ci0gICAgICAgIGZhaWxlZCA9 IDA7Ci0gICAgICAgIHogPSBtamQocCk7ICAgICAgICAgICAgICAgICAgICAgLyogQ29udmVydCB0 byBtb2RpZmllZCBKdWxpYW4gZGF0ZSAqLwotICAgICAgICB6ID0geiAlIDdMOwotICAgICAgICBp ZiAoeiA8IDApIHsKLSAgICAgICAgICAgIHogPSAwIC0gejsKLSAgICAgICAgICAgIGsgPSA2IC0g KChpbnQpeiArIDMpICUgNzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGsgPSAoKGlu dCl6ICsgMykgJSA3OwkvKiBEYXkgb2Ygd2VlayAqLwotICAgICAgICB9Ci0gICAgICAgIHAgPSBm bnZhbDsgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gcmVzdWx0ICovCi0gICAgICAg IGlmIChjeCA9PSBGTl9OREFZKQotICAgICAgICAgIHNwcmludGYoZm52YWwsIiVkIixrKTsgICAg ICAgIC8qIFNBRkUgKi8KLSAgICAgICAgZWxzZQotICAgICAgICAgIGNrc3RybmNweShmbnZhbCx3 a2RheXNba10sRk5WQUxMKTsKLSAgICAgICAgZ290byBmbmVuZDsKLQotICAgICAgY2FzZSBGTl9O MlRJTTogeyAgICAgICAgICAgICAgICAgIC8qIFNlYyBzaW5jZSBtaWRuaWdodCB0byBoaDptbTpz cyAqLwotICAgICAgICAgIGxvbmcgayA9IDBMOwotICAgICAgICAgIGludCBuID0gMCwgaGgsIG1t LCBzczsKLSAgICAgICAgICBjaGFyICogcyA9IGJwWzBdOwotICAgICAgICAgIGlmIChhcmduIDwg MSkgICAgICAgICAgICAgICAgIC8qIElmIG5vIGFyZyBzdWJzdGl0dXRlIDAgKi8KLSAgICAgICAg ICAgIHMgPSAiMCI7Ci0gICAgICAgICAgcCA9IGV2YWx4KHMpOyAgICAgICAgICAgICAgICAgLyog RXZhbHVhdGUgZXhwcmVzc2lvbiBzaWxlbnRseSAqLwotICAgICAgICAgIGlmICgqcCA9PSAnLScp IHsgICAgICAgICAgICAgIC8qIENoZWNrIHJlc3VsdCBmb3IgbWludXMgc2lnbiAqLwotICAgICAg ICAgICAgICBwKys7Ci0gICAgICAgICAgICAgIG4gPSAxOwotICAgICAgICAgIH0KLSAgICAgICAg ICBpZiAoIXJkaWdpdHMocCkpIHsgLyogQ2hlY2sgZm9yIG51bWVyaWMgKi8KLSAgICAgICAgICAg ICAgZmFpbGVkID0gMTsKLSAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotICAg ICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkFSR19OT1RfTlVNRVJJQzpcXGYiLGZuLCIoKT4i LE5VTEwpOwotICAgICAgICAgICAgICBwID0gZm52YWw7Ci0gICAgICAgICAgICAgIGdvdG8gZm5l bmQ7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgayA9IGF0b2wocCk7Ci0gICAg ICAgICAgICAgIGlmIChuKSBrID0gLWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChrIDwg MCkgeyAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGZvciBuZWdhdGl2ZSAqLwotICAgICAgICAg ICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgICBpZiAoZm5kaWFncykKLSAgICAgICAgICAg ICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIjxF UlJPUjpBUkdfT1VUX09GX1JBTkdFOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAgICAgICAg IHAgPSBmbnZhbDsKLSAgICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICB9Ci0gICAg ICAgICAgaGggPSBrIC8gMzYwMEw7ICAgICAgICAgICAgICAgLyogSGF2ZSBwb3NpdGl2ZSBudW1i ZXIgKi8KLSAgICAgICAgICBtbSA9IChrICUgMzYwMEwpIC8gNjBMOyAgICAgICAvKiBicmVhayBp dCBkb3duLi4uICovCi0gICAgICAgICAgc3MgPSAoKGsgJSAzNjAwTCkgJSA2MEwpOwotCi0gICAg ICAgICAgc3ByaW50ZihmbnZhbCwiJTAyZDolMDJkOiUwMmQiLGhoLG1tLHNzKTsgLyogU0FGRSAq LwotICAgICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgICBmYWlsZWQgPSAwOwotICAgICAgICAg IGdvdG8gZm5lbmQ7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2UgRk5fUEVSTTogeyAgICAgICAgICAg ICAgICAgICAvKiBGaWxlIHBlcm1pc3Npb25zICovCi0gICAgICAgICAgcCA9IGZudmFsOwotICAg ICAgICAgIHogPSB6Y2hraShicFswXSk7Ci0gICAgICAgICAgaWYgKHogPCAwKSB7Ci0gICAgICAg ICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICAgIGlmIChmbmRpYWdzKSB7Ci0gICAgICAg ICAgICAgICAgICBpZiAoeiA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgY2ttYWttc2coZm52 YWwsRk5WQUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkZJTEVfTk9U X0ZPVU5EOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAgICAgICAgICAgICBlbHNlIGlmICh6 ID09IC0yKQotICAgICAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6RklMRV9OT1RfUkVBREFCTEU6XFxmIixm biwiKCk+IixOVUxMKTsKLSAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHogPT0gLTMpCi0gICAg ICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIjxFUlJPUjpGSUxFX05PVF9BQ0NFU1NJQkxFOlxcZiIsZm4sIigpPiIsTlVM TCk7Ci0gICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGNrbWFrbXNn KGZudmFsLEZOVkFMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpGSUxF X0VSUk9SOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgZ290byBmbmVuZDsKLSAgICAgICAgICB9Ci0jaWZkZWYgQ0tfUEVSTVMKLSAgICAgICAgICBj a3N0cm5jcHkoZm52YWwsemlwZXJtKGJwWzBdKSxGTlZBTEwpOwotI2Vsc2UKLSAgICAgICAgICBj a3N0cm5jcHkoZm52YWwsIih1bmtub3duKSIsRk5WQUxMKTsKLSNlbmRpZiAvKiBDS19QRVJNUyAq LwotICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICB9Ci0gICAgICBjYXNlIEZOX1RMT09LOiAg ICAgICAgICAgICAgICAgICAgLyogdGFibGVsb29rKCkgKi8KLSAgICAgIGNhc2UgRk5fQUxPT0s6 IHsgICAgICAgICAgICAgICAgICAvKiBhcnJheWxvb2soKSAqLwotICAgICAgICAgIGludCBpLCB4 LCBoaSwgbG8sIG1heCwgY21kbGVuOwotICAgICAgICAgIGNoYXIgYWJ1ZlsxNl0sICpzLCAqcGF0 OwotICAgICAgICAgIGNoYXIga3didWZbMjU2XTsKLSAgICAgICAgICBjaGFyIGRlbGltID0gJzon OwotICAgICAgICAgIGZhaWxlZCA9IDE7ICAgICAgICAgICAgICAgICAgIC8qIEFzc3VtZSBmYWls dXJlICovCi0gICAgICAgICAgY2tzdHJuY3B5KGZudmFsLCItMSIsRk5WQUxMKTsKLSAgICAgICAg ICBwYXQgPSBicFswXTsgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byBzZWFyY2ggcGF0dGVy biAqLwotICAgICAgICAgIGlmICghcGF0KSBwYXQgPSAiIjsgICAgICAgICAgIC8qIFdhdGNoIG91 dCBmb3IgTlVMTCBwb2ludGVyICovCi0gICAgICAgICAgY21kbGVuID0gc3RybGVuKHBhdCk7ICAg ICAgICAgLyogR2V0IHBhdHRlcm4gbGVuZ3RoICovCi0gICAgICAgICAgaWYgKGFyZ24gPCAyIC8q IHx8IGNtZGxlbiA8IDEgKi8gKSB7IC8qIE5lZWQgdHdvIGFyZ3MgKi8KLSAgICAgICAgICAgICAg aWYgKGZuZGlhZ3MpCi0gICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLCI8RVJS T1I6TUlTU0lOR19BUkc6XFxmIixmbiwiKCk+IixOVUxMKTsKLSAgICAgICAgICAgICAgZ290byBm bmVuZDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2tzdHJuY3B5KGFidWYsYnBbMV0sMTYpOyAg ICAgLyogR2V0IGFycmF5IHJlZmVyZW5jZSAqLwotICAgICAgICAgIGlmIChhcmduID4gMikKLSAg ICAgICAgICAgIGRlbGltID0gKihicFsyXSk7Ci0gICAgICAgICAgcyA9IGFidWY7Ci0gICAgICAg ICAgaWYgKCh4ID0gYXJyYXlib3VuZHMocywmbG8sJmhpKSkgPCAwKSB7IC8qIEdldCBpbmRleCBh bmQgYm91bmRzICovCi0gICAgICAgICAgICAgIGlmIChmbmRpYWdzKQotICAgICAgICAgICAgICAg Y2ttYWttc2coZm52YWwsRk5WQUxMLCI8RVJST1I6QVJHX0JBRF9BUlJBWTpcXGYiLGZuLCIoKT4i LE5VTEwpOwotICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgIH0KLSAgICAgICAg ICBwID0gZm52YWw7ICAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byByZXN1bHQgKi8KLSAg ICAgICAgICBtYXggPSBhX2RpbVt4XTsgICAgICAgICAgICAgICAvKiBTaXplIG9mIGFycmF5ICov Ci0gICAgICAgICAgaWYgKGxvIDwgMCkgbG8gPSAwOyAgICAgICAgICAgLyogVXNlIGdpdmVuIHJh bmdlIGlmIGFueSAqLwotICAgICAgICAgIGlmIChsbyA+IG1heCkgbG8gPSBtYXg7Ci0gICAgICAg ICAgaWYgKGhpIDwgMCkgaGkgPSBtYXg7Ci0gICAgICAgICAgaWYgKGhpID4gbWF4KSBoaSA9IG1h eDsKLSAgICAgICAgICBmYWlsZWQgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBVbnNldCBmYWls dXJlIGZsYWcgKi8KLSAgICAgICAgICBpZiAobWF4IDwgMSkKLSAgICAgICAgICAgIGdvdG8gZm5l bmQ7Ci0gICAgICAgICAga3didWZbMjU1XSA9IE5VTDsKLSAgICAgICAgICBmb3IgKGkgPSBsbzsg aSA8PSBoaTsgaSsrKSB7Ci0gICAgICAgICAgICAgIGlmICghYV9wdHJbeF1baV0pCi0gICAgICAg ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgIGlmIChjeCA9PSBGTl9BTE9PSykgewot ICAgICAgICAgICAgICAgICAgaWYgKGNrbWF0Y2gocGF0LGFfcHRyW3hdW2ldLGlucGNhc1tjbWRs dmxdLDErNCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGZudmFsLCIlZCIsaSk7 IC8qIFNBRkUgKi8KLSAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICB9IGVsc2UgaWYgKGN4ID09IEZOX1RMT09LKSB7Ci0g ICAgICAgICAgICAgICAgICBjaGFyICogYWE7Ci0gICAgICAgICAgICAgICAgICBpbnQgaiA9IDAs IHYgPSAwLCBsZW47Ci0gICAgICAgICAgICAgICAgICBpZiAoaSA9PSBoaSkKLSAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBhYSA9IGFfcHRyW3hdW2ldOyAgICAg LyogUG9pbnQgdG8gdGhpcyBhcnJheSBlbGVtZW50ICovCi0gICAgICAgICAgICAgICAgICBpZiAo IWFhKSBhYSA9ICIiOwotICAgICAgICAgICAgICAgICAgd2hpbGUgKGogPCAyNTQgJiYgKmFhKSB7 IC8qIElzb2xhdGUga2V5d29yZCAqLwotICAgICAgICAgICAgICAgICAgICAgIGlmICgqYWEgPT0g ZGVsaW0pCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg ICAgICBrd2J1ZltqKytdID0gKmFhKys7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgICBrd2J1ZltqXSA9IE5VTDsKLSAgICAgICAgICAgICAgICAgIGxlbiA9IGo7Ci0gICAg ICAgICAgICAgICAgICB2ID0gMDsKLSAgICAgICAgICAgICAgICAgIGlmICgobGVuID09IGNtZGxl biAmJiAhY2tzdHJjbXAoa3didWYscGF0LGxlbiwwKSkgfHwKLSAgICAgICAgICAgICAgICAgICAg ICAoKHYgPSAhY2tzdHJjbXAoa3didWYscGF0LGNtZGxlbiwwKSkgJiYKLSAgICAgICAgICAgICAg ICAgICAgICAgY2tzdHJjbXAoYV9wdHJbeF1baSsxXSxwYXQsY21kbGVuLDApKSkgewotICAgICAg ICAgICAgICAgICAgICAgIHNwcmludGYoZm52YWwsIiVkIixpKTsgLyogU0FGRSAqLwotICAgICAg ICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgICBpZiAodikgeyAgICAgICAgICAgICAgLyogQW1iaWd1b3VzICovCi0gICAgICAg ICAgICAgICAgICAgICAgY2tzdHJuY3B5KGZudmFsLCItMiIsRk5WQUxMKTsKLSAgICAgICAgICAg ICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChjeCA9PSBGTl9UTE9PSykgeyAgICAgICAg IC8qIHRhYmxlbG9vaygpIGxhc3QgZWxlbWVudCAqLwotICAgICAgICAgICAgICBja3N0cm5jcHko Zm52YWwsIi0xIixGTlZBTEwpOwotICAgICAgICAgICAgICBpZiAoIWNrc3RyY21wKGFfcHRyW3hd W2hpXSxwYXQsY21kbGVuLDApKQotICAgICAgICAgICAgICAgIHNwcmludGYoZm52YWwsIiVkIixo aSk7IC8qIFNBRkUgKi8KLSAgICAgICAgICB9Ci0gICAgICAgICAgZ290byBmbmVuZDsKLSAgICAg IH0KLSAgICAgIGNhc2UgRk5fVE9CNjQ6ICAgICAgICAgICAgICAgICAgICAvKiBCYXNlLTY0IGNv bnZlcnNpb24gKi8KLSAgICAgIGNhc2UgRk5fRk1CNjQ6Ci0gICAgICAgIHAgPSBmbnZhbDsKLSAg ICAgICAgKnAgPSBOVUw7Ci0gICAgICAgIGlmIChhcmduIDwgMSkKLSAgICAgICAgICBnb3RvIGZu ZW5kOwotICAgICAgICBpZiAoY3ggPT0gRk5fVE9CNjQpIHsKLSAgICAgICAgICAgIHggPSBiOHRv YjY0KGJwWzBdLC0xLGZudmFsLEZOVkFMTCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICB4ID0gc3RybGVuKGJwWzBdKTsKLSAgICAgICAgICAgIGlmICh4ICUgNCkgeyAgICAgICAgICAg ICAgICAvKiBsZW5ndGggbXVzdCBiZSBtdWx0aXBsZSBvZiA0ICovCi0gICAgICAgICAgICAgICAg ZmFpbGVkID0gMTsKLSAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpBUkdfSU5DT01QTEVURTpcXGYiLGZuLCIoKT4i LE5VTEwpOwotICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgICAgICBiNjR0b2I4KE5VTEwsMCxOVUxMLDApOyAgICAgLyogUmVzZXQgKi8KLSAgICAgICAg ICAgIHggPSBiNjR0b2I4KGJwWzBdLC0xLGZudmFsLEZOVkFMTCk7Ci0gICAgICAgICAgICBiNjR0 b2I4KE5VTEwsMCxOVUxMLDApOyAgICAgLyogUmVzZXQgYWdhaW4gKi8KLSAgICAgICAgfQotICAg ICAgICBpZiAoeCA8IDApIHsKLSAgICAgICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICBp ZiAoZm5kaWFncykgewotICAgICAgICAgICAgICAgIGNoYXIgKiBtID0gIklOVEVSTkFMX0VSUk9S IjsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHgpIHsKLSAgICAgICAgICAgICAgICAgIGNhc2Ug LTE6IG0gPSAiQVJHX1RPT19MT05HIjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIC0y OiBtID0gIkFSR19PVVRfT0ZfUkFOR0UiOyBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgaWYgKGNrbWFrbXNnKGZudmFsLEZOVkFMTCwiPEVSUk9SOiIsbSwiXFxmIixm bikgPiAwKQotICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KGZudmFsLCIoKT4iLEZOVkFMTCk7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZ290byBmbmVuZDsKLQotICAgICAg Y2FzZSBGTl9BQlM6IHsKLSAgICAgICAgICBjaGFyICogczsKLSAgICAgICAgICBzID0gYnBbMF07 Ci0gICAgICAgICAgaWYgKCpzID09ICctJyB8fCAqcyA9PSAnKycpCi0gICAgICAgICAgICBzKys7 Ci0gICAgICAgICAgaWYgKCFyZGlnaXRzKHMpKSB7Ci0gICAgICAgICAgICAgIGlmIChmbmRpYWdz KQotICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAiPEVSUk9SOkFSR19OT1RfTlVNRVJJQzpcXGYiLGZuLCIoKT4iLE5VTEwpOwot ICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgIH0KLSAgICAgICAgICBja3N0cm5j cHkoZm52YWwscyxGTlZBTEwpOwotICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICB9Ci0KLSAg ICAgIGNhc2UgRk5fQUFEVU1QOiB7Ci0gICAgICAgICAgY2hhciBhYnVmWzE2XSwgKnMgPSBOVUxM LCAqKmFwID0gTlVMTCwgKip2cCA9IE5VTEw7Ci0gICAgICAgICAgY2hhciBwYXR0ZXJuW1ZOQU1M XTsKLSAgICAgICAgICBpbnQgc2xlbiwgaSwgaiwgaywgZmlyc3QgPSAtMTsKLSAgICAgICAgICBl eHRlcm4gaW50IHhkZWxtYWMoKTsKLSAgICAgICAgICBwID0gZm52YWw7Ci0gICAgICAgICAgaWYg KGFyZ24gPCAyKSB7Ci0gICAgICAgICAgICAgIGlmIChmbmRpYWdzKQotICAgICAgICAgICAgICAg IGNrbWFrbXNnKGZudmFsLEZOVkFMTCwiPEVSUk9SOk1JU1NJTkdfQVJHMjpcXGYiLGZuLCIoKT4i LE5VTEwpOwotICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgIH0KLSAgICAgICAg ICBkZWJ1ZyhGMTAxLCJhYWNvbnZlcnQgYXJnbiIsIiIsYXJnbik7Ci0gICAgICAgICAgcyA9IGJw WzBdOwotICAgICAgICAgIHNsZW4gPSBzdHJsZW4ocyk7Ci0KLSAgICAgICAgICAvKiBDb3VudCBl bGVtZW50cyBzbyB3ZSBjYW4gY3JlYXRlIHRoZSBhcnJheSAqLwotCi0gICAgICAgICAgY2ttYWtt c2cocGF0dGVybixWTkFNTCxzLCI8Kj4iLE5VTEwsTlVMTCk7Ci0gICAgICAgICAgZm9yIChrID0g MCwgaSA9IDA7IGkgPCBubWFjOyBpKyspIHsKLSAgICAgICAgICAgICAgaWYgKGNrbWF0Y2gocGF0 dGVybixtYWN0YWJbaV0ua3dkLDAsMSkpIHsKLSAgICAgICAgICAgICAgICAgIGlmIChmaXJzdCA8 IDApICAgICAgICAvKiBSZW1lbWJlciBsb2NhdGlvbiBvZiBmaXJzdCBtYXRjaCAqLwotICAgICAg ICAgICAgICAgICAgICBmaXJzdCA9IGk7Ci0gICAgICAgICAgICAgICAgICBrKys7Ci0gICAgICAg ICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgZGVidWcoRjEwMSwiYWFjb252ZXJ0IG1h dGNoZXMiLCIiLGspOwotICAgICAgICAgIGRlYnVnKEYxMDEsImFhY29udmVydCBmaXJzdCIsIiIs Zmlyc3QpOwotICAgICAgICAgIGZudmFsWzBdID0gTlVMOyAgICAgICAgICAgICAgIC8qIEluaXRp YWwgcmV0dXJuIHZhbHVlICovCi0gICAgICAgICAgY2tzdHJuY3B5KGFidWYsYnBbMV0sMTYpOyAg ICAgLyogR2V0IGFycmF5IHJlZmVyZW5jZSAqLwotICAgICAgICAgIHMgPSBhYnVmOwotICAgICAg ICAgIGlmICgqcyA9PSBDTURRKSBzKys7Ci0gICAgICAgICAgcCA9IGZudmFsOyAgICAgICAgICAg ICAgICAgICAgLyogUG9pbnQgdG8gcmVzdWx0ICovCi0gICAgICAgICAgaWYgKGZuZGlhZ3MpICAg ICAgICAgICAgICAgICAgLyogRGVmYXVsdCBpcyB0aGlzIGVycm9yIG1lc3NhZ2UgKi8KLSAgICAg ICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwiPEVSUk9SOkFSR19CQURfQVJSQVk6XFxmIixm biwiKCk+IixOVUxMKTsKLSAgICAgICAgICBpZiAoc1swXSAhPSAnJicpICAgICAgICAgICAgICAv KiBBZGRyZXNzIG9mIGFycmF5ICovCi0gICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAg IGlmIChzWzJdKQotICAgICAgICAgICAgaWYgKHNbMl0gIT0gJ1snIHx8IHNbM10gIT0gJ10nKQot ICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgIGlmIChzWzFdID49IDY0ICYmIHNb MV0gPCA5MSkgIC8qIENvbnZlcnQgdXBwZXIgdG8gbG93ZXIgKi8KLSAgICAgICAgICAgIHNbMV0g Kz0gMzI7Ci0gICAgICAgICAgaWYgKCh4ID0gZGNsYXJyYXkoc1sxXSxrKSkgPCAwKSAvKiBEZWNs YXJlIGFycmF5IHRvIHNpemUgKi8KLSAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAg YXAgPSBhX3B0clt4XTsgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gYXJyYXkgd2UganVzdCBk ZWNsYXJlZCAqLwotICAgICAgICAgIC8qIGRlYnVnKEYxMTEsImFhY29udmVydCBhcnJheSAxIixh YnVmLGFwKTsgKi8KLSAgICAgICAgICBhYnVmWzBdID0gTlVMOwotICAgICAgICAgIGlmIChhcmdu ID4gMikgewotICAgICAgICAgICAgICBja3N0cm5jcHkoYWJ1ZixicFsyXSwxNik7IC8qIEdldCB2 YWx1ZSBhcnJheSByZWZlcmVuY2UgKi8KLSAgICAgICAgICAgICAgcyA9IGFidWY7Ci0gICAgICAg ICAgICAgIGlmICgqcyA9PSBDTURRKSBzKys7Ci0gICAgICAgICAgICAgIGlmIChzWzBdICE9ICcm JykgICAgICAgICAgLyogQWRkcmVzcyBvZiBhcnJheSAqLwotICAgICAgICAgICAgICAgIGdvdG8g Zm5lbmQ7Ci0gICAgICAgICAgICAgIGlmIChzWzJdKQotICAgICAgICAgICAgICAgIGlmIChzWzJd ICE9ICdbJyB8fCBzWzNdICE9ICddJykKLSAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0g ICAgICAgICAgICAgIGlmIChzWzFdID49IDY0ICYmIHNbMV0gPCA5MSkgLyogQ29udmVydCB1cHBl ciB0byBsb3dlciAqLwotICAgICAgICAgICAgICAgIHNbMV0gKz0gMzI7Ci0gICAgICAgICAgICAg IGlmICgoeCA9IGRjbGFycmF5KHNbMV0saykpIDwgMCkKLSAgICAgICAgICAgICAgICBnb3RvIGZu ZW5kOwotICAgICAgICAgICAgICB2cCA9IGFfcHRyW3hdOyAgICAgICAgICAgIC8qIFBvaW50IHRv IGFycmF5IHdlIGp1c3QgZGVjbGFyZWQgKi8KLSAgICAgICAgICB9Ci0gICAgICAgICAgLyogZGVi dWcoRjExMSwiYWFjb252ZXJ0IGFycmF5IDIiLGFidWYsdnApOyAqLwotICAgICAgICAgIG1ha2Vz dHIoJmFwWzBdLGNraXRvYShrKSk7Ci0gICAgICAgICAgaWYgKHZwKSBtYWtlc3RyKCZ2cFswXSxj a2l0b2EoaykpOwotICAgICAgICAgIGlmIChmbmRpYWdzKQotICAgICAgICAgICBja21ha21zZyhm bnZhbCxGTlZBTEwsIjxFUlJPUjpBU1NPQ0lBVElWRV9BUlJBWTpcXGYiLGZuLCIoKT4iLE5VTEwp OwotCi0gICAgICAgICAgLyogQ29weSBtYWNybyBpbmRleCAmIHZhbHVlIHRvIHRoZSBhcnJheXMg YW5kIHRoZW4gcmVtb3ZlIHRoZSAqLwotICAgICAgICAgIC8qIG1hY3JvLCBzbyB0aGUgJ2ZpcnN0 JyBwb2ludGVyIGtlZXBzIGluZGljYXRpbmcgdGhlIG5leHQgb25lLiAqLwotICAgICAgICAgIC8q IFdlIGNvdWxkIGNvbWJpbmUgdGhlIGluaXRpYWwgY291bnRpbmcgbG9vcCB3aXRoIHRoaXMgb25l IGJ1dCAqLwotICAgICAgICAgIC8qIHRoZW4gaXQgd291bGQgYmUgaGFyZGVyIHRvIGNyZWF0ZSB0 aGUgYXJyYXkgYW5kIGFueXdheSB0aGlzICovCi0gICAgICAgICAgLyogZnVuY3Rpb24gaXMgcGxl bnR5IGZhc3QgYXMgaXQgaXMuICovCi0KLSAgICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IGs7ICkg ewotICAgICAgICAgICAgICBpZiAoIWNrbWF0Y2gocGF0dGVybixtYWN0YWJbZmlyc3RdLmt3ZCww LDEpKSB7Ci0gICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJhYWNvbnZlcnQgb2RkYmFsbCIs bWFjdGFiW2ZpcnN0XS5rd2QsZmlyc3QpOwotICAgICAgICAgICAgICAgICAgZmlyc3QrKzsKLSAg ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg IGNrc3RybmNweSh0bXBidWYsbWFjdGFiW2ZpcnN0XS5rd2QsVE1QQlVGU0laKTsgLyogTWFjcm8g bmFtZSAqLwotICAgICAgICAgICAgICBzID0gdG1wYnVmOyAgICAgICAgICAgICAgICAgICAgICAg LyogTWFrZSB3cml0ZWFibGUgY29weSAqLwotICAgICAgICAgICAgICBzICs9IHNsZW47ICAgICAg ICAgICAgICAgICAgICAgICAgLyogSXNvbGF0ZSAiaW5kZXgiICovCi0gICAgICAgICAgICAgIGog PSBzdHJsZW4ocykgLSAxOwotICAgICAgICAgICAgICBpZiAoKnMgIT0gJzwnIHx8ICoocytqKSAh PSAnPicpIHsgLyogQ2hlY2sgc3ludGF4ICovCi0gICAgICAgICAgICAgICAgICAvKiBUaGlzIHNo b3VsZG4ndCBoYXBwZW4gKi8KLSAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImFhY29udmVy dCBFUlJPUiIsbWFjdGFiW2ZpcnN0XS5rd2QsZmlyc3QpOwotICAgICAgICAgICAgICAgICAgZ290 byBmbmVuZDsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAqKHMraikgPSBOVUw7ICAg ICAgICAgICAgIC8qIFJlbW92ZSBmaW5hbCAnPicgKi8KLSAgICAgICAgICAgICAgZGVidWcoRjEx MSwiYWFjb252ZXJ0IixzKzEsaSk7Ci0gICAgICAgICAgICAgIG1ha2VzdHIoJihhcFtpXSkscysx KTsgICAgLyogU2V0IGZpcnN0IGFycmF5IHRvIGluZGV4ICovCi0gICAgICAgICAgICAgIGlmICh2 cCkKLSAgICAgICAgICAgICAgICBtYWtlc3RyKCYodnBbaV0pLG1hY3RhYltmaXJzdF0ubXZhbCk7 IC8qIDJuZCB0byB2YWx1ZSAqLwotICAgICAgICAgICAgICBpZiAoeGRlbG1hYyhmaXJzdCkgPCAw KQotICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgICAgIGkrKzsKLSAgICAg ICAgICB9Ci0gICAgICAgICAgc3ByaW50ZihmbnZhbCwiJWQiLGspOyAgICAgICAgLyogU0FGRSAq LwotICAgICAgICAgIHAgPSBmbnZhbDsgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBzaXpl IG9mIGFycmF5ICovCi0gICAgICAgICAgZGVidWcoRjExMCwiYWFjb252ZXJ0IHJldHVybiIscCww KTsKLSAgICAgICAgICBmYWlsZWQgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBVbnNldCBmYWls dXJlIGZsYWcgKi8KLSAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgfQotCi0gICAgfSAvKiBF bmQgb2Ygc3dpdGNoKCkgKi8KLQotI2lmZGVmIEZORkxPQVQKLS8qCi0gIEZsb2F0aW5nLXBvaW50 IGZ1bmN0aW9ucy4gIFRvIGJlIGluY2x1ZGVkIG9ubHkgaWYgRk5GTE9BVCBpcyBkZWZpbmVkLCB3 aGljaAotICBzaG91bGQgaGFwcGVuIG9ubHkgaWYgQ0tGTE9BVCBpcyBhbHNvIGRlZmluZWQsIGFu ZCBpZiB0aGUgbWF0aCBsaWJyYXJ5IGlzCi0gIGxpbmtlZCBpbi4gIEV2ZW4gdGhlbiwgd2UgbWln aHQgaGF2ZSBmbG9hdC12cy1kb3VibGUgY29uZnVzaW9uIGFzIHdlbGwgYXMKLSAgY29uZnVzaW9u IGFib3V0IHdoYXQgdGhlIGZpbmFsICIlZiIgZm9ybWF0IGVmZmVjdG9yIGlzIHN1cHBvc2VkIHRv IHJlZmVyZW5jZQotICAoMzIgYml0cywgNjQgYml0cywgZXRjKS4gIEV4cGVjdCB0cm91YmxlIGlm IENLRkxPQVQgZG9lcyBub3QgbWF0Y2ggdGhlIGRhdGEKLSAgdHlwZSBvZiBtYXRoIGxpYnJhcnkg ZnVuY3Rpb25zIG9yIGFyZ3MuCi0qLwotICAgIGlmIChjeCA9PSBGTl9GUEFCUyB8fCAgICAgICAg ICAgICAgIC8qIEZsb2F0aW5nLXBvaW50IGZ1bmN0aW9ucyAqLwotICAgICAgICBjeCA9PSBGTl9G UEFERCB8fAotICAgICAgICBjeCA9PSBGTl9GUERJViB8fAotICAgICAgICBjeCA9PSBGTl9GUEVY UCB8fAotICAgICAgICBjeCA9PSBGTl9GUExPRyB8fAotICAgICAgICBjeCA9PSBGTl9GUExOICB8 fAotICAgICAgICBjeCA9PSBGTl9GUE1PRCB8fAotICAgICAgICBjeCA9PSBGTl9GUE1BWCB8fAot ICAgICAgICBjeCA9PSBGTl9GUE1JTiB8fAotICAgICAgICBjeCA9PSBGTl9GUE1VTCB8fAotICAg ICAgICBjeCA9PSBGTl9GUFBPVyB8fAotICAgICAgICBjeCA9PSBGTl9GUFNRUiB8fAotICAgICAg ICBjeCA9PSBGTl9GUElOVCB8fAotICAgICAgICBjeCA9PSBGTl9GUFNVQiB8fAotICAgICAgICBj eCA9PSBGTl9GUFJPVSB8fAotICAgICAgICBjeCA9PSBGTl9GUFNJTiB8fAotICAgICAgICBjeCA9 PSBGTl9GUENPUyB8fAotICAgICAgICBjeCA9PSBGTl9GUFRBTikgewotICAgICAgICBDS0ZMT0FU IGZhcmdbMl0sIGZwcmVzdWx0ID0gMC4wOwotICAgICAgICBjaGFyIGZwYnVmWzY0XSwgKiBicDA7 Ci0gICAgICAgIGRvdWJsZSBkdW1teTsKLSAgICAgICAgLyogaW50IHNpZ24gPSAwOyAqLwotICAg ICAgICBpbnQgaSwgaiwgcGxhY2VzID0gMDsKLSAgICAgICAgaW50IGFyZ2NvdW50ID0gMTsKLQot ICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICBwID0gZm52YWw7Ci0gICAgICAgIGJwMCA9IGJw WzBdOwotICAgICAgICBpZiAoIWJwMCkKLSAgICAgICAgICBicDAgPSAiMCI7Ci0gICAgICAgIGVs c2UgaWYgKCEqYnAwKQotICAgICAgICAgIGJwMCA9ICIwIjsKLSAgICAgICAgaWYgKCFpc2Zsb2F0 KGJwMCwwKSkgewotICAgICAgICAgICAgayA9IG14bG9vayhtYWN0YWIsYnAwLG5tYWMpOwotICAg ICAgICAgICAgYnAwID0gKGsgPiAtMSkgPyBtYWN0YWJba10ubXZhbCA6IE5VTEw7Ci0gICAgICAg ICAgICBpZiAoYnAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc2Zsb2F0KGJwMCwwKSkgewot ICAgICAgICAgICAgICAgICAgICBpZiAoZm5kaWFncykKLSAgICAgICAgICAgICAgICAgICAgICBj a21ha21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxF UlJPUjpBUkdfTk9UX0ZMT0FUOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAgICAgICAgICAg ICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg ICB9Ci0gICAgICAgIGlmIChjeCA9PSBGTl9GUElOVCkgeyAgICAgICAgICAgLyogRmxvYXQgdG8g aW50ICovCi0gICAgICAgICAgICBmYWlsZWQgPSAwOwotICAgICAgICAgICAgY2tzdHJuY3B5KGZu dmFsLGJwMCxGTlZBTEwpOwotICAgICAgICAgICAgZm9yIChpID0gMDsgZm52YWxbaV07IGkrKykg ewotICAgICAgICAgICAgICAgIGlmIChmbnZhbFtpXSA9PSAnLicpIHsKLSAgICAgICAgICAgICAg ICAgICAgZm52YWxbaV0gPSBOVUw7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAg ICAgIH0KLSAgICAgICAgc3dpdGNoICh5KSB7ICAgICAgICAgICAgICAgICAgICAvKiBUaGVzZSBu ZWVkIDIgYXJncyAqLwotICAgICAgICAgIGNhc2UgRk5fRlBBREQ6Ci0gICAgICAgICAgY2FzZSBG Tl9GUERJVjoKLSAgICAgICAgICBjYXNlIEZOX0ZQTU9EOgotICAgICAgICAgIGNhc2UgRk5fRlBN QVg6Ci0gICAgICAgICAgY2FzZSBGTl9GUE1JTjoKLSAgICAgICAgICBjYXNlIEZOX0ZQTVVMOgot ICAgICAgICAgIGNhc2UgRk5fRlBQT1c6Ci0gICAgICAgICAgY2FzZSBGTl9GUFNVQjoKLSAgICAg ICAgICAgIGFyZ2NvdW50ID0gMjsKLSAgICAgICAgfQotICAgICAgICAvKiBNaXNzaW5nIGFyZ3Vt ZW50cyBhcmUgc3VwcGxpZWQgYXMgMC4wICovCi0KLSAgICAgICAgZGVidWcoRjExMSxmbiwiYXJn Y291bnQiLGFyZ2NvdW50KTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ2NvdW50OyBpKysp IHsgLyogR2V0IGZsb2F0aW5nLXBvaW50IGFyZ3MgKi8KLSNpZmRlZiBERUJVRwotICAgICAgICAg ICAgaWYgKGRlYmxvZykgewotICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZwYnVmLAotICAgICAg ICAgICAgICAgICAgICAgICAgIDY0LAotICAgICAgICAgICAgICAgICAgICAgICAgICJicFsiLAot ICAgICAgICAgICAgICAgICAgICAgICAgIGNraXRvYShpKSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICBicFtpXSA/IGJwW2ldIDogIihudWxsKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg Il0iCi0gICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhG MTAwLGZwYnVmLCIiLDApOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0gICAg ICAgICAgICBpZiAoIWJwW2ldKSB7Ci0gICAgICAgICAgICAgICAgZmFyZ1tpXSA9IDAuMDsKLSAg ICAgICAgICAgIH0gZWxzZSBpZiAoISooYnBbaV0pKSB7Ci0gICAgICAgICAgICAgICAgZmFyZ1tp XSA9IDAuMDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzZmxvYXQoYnBbaV0sMCkpIHsKLSAg ICAgICAgICAgICAgICBjaGFyICogdG1wOwotICAgICAgICAgICAgICAgIGsgPSBteGxvb2sobWFj dGFiLGJwW2ldLG5tYWMpOwotICAgICAgICAgICAgICAgIHRtcCA9IChrID4gLTEpID8gbWFjdGFi W2tdLm12YWwgOiBOVUxMOwotICAgICAgICAgICAgICAgIGlmICh0bXApIHsKLSAgICAgICAgICAg ICAgICAgICAgaWYgKCFpc2Zsb2F0KHRtcCwwKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg aWYgKGZuZGlhZ3MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZO VkFMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpBUkdfTk9U X0ZMT0FUOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3Rv IGZuZW5kOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgfQotICAgICAgICAgICAgZmFyZ1tpXSA9IGZsb2F0dmFsOwotCi0jaWZkZWYgREVCVUcK LSAgICAgICAgICAgIGlmIChkZWJsb2cpIHsKLSAgICAgICAgICAgICAgICBzcHJpbnRmKGZwYnVm LCJmYXJnWyVkXT0lZiIsaSxmYXJnW2ldKTsgLyogU0FGRSAqLwotICAgICAgICAgICAgICAgIGRl YnVnKEYxMDAsZnBidWYsIiIsMCk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8K LSAgICAgICAgfQotICAgICAgICBpZiAoYnBbYXJnY291bnRdKSB7ICAgICAgICAgICAgIC8qIEdl dCBkZWNpbWFsIHBsYWNlcyAqLwotICAgICAgICAgICAgY2hhciAqIHM7Ci0gICAgICAgICAgICBz ID0gYnBbYXJnY291bnRdOwotICAgICAgICAgICAgaWYgKCFzKSBzID0gIiI7Ci0gICAgICAgICAg ICBpZiAoISpzKSBzID0gIjAiOwotICAgICAgICAgICAgcyA9IGV2YWx4KHMpOwotICAgICAgICAg ICAgaWYgKCFzKSBzID0gIiI7Ci0gICAgICAgICAgICBpZiAoISpzKSB7Ci0gICAgICAgICAgICAg ICAgZXZhbGVycihmbik7Ci0gICAgICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIHBsYWNlcyA9IGF0b2kocyk7Ci0gICAgICAgIH0KLSAgICAgICAgZXJy bm8gPSAwOwotICAgICAgICBmYWlsZWQgPSAwOwotICAgICAgICBzd2l0Y2ggKHkpIHsgICAgICAg ICAgICAgICAgICAgIC8qIE5vdyBkbyB0aGUgcmVxdWVzdGVkIGZ1bmN0aW9uICovCi0gICAgICAg ICAgY2FzZSBGTl9GUEFCUzogICAgICAgICAgICAgICAgLyogRmxvYXRpbmctcG9pbnQgYWJzb2x1 dGUgdmFsdWUgKi8KLSNpZm5kZWYgQ09NTUVOVAotICAgICAgICAgICAgZnByZXN1bHQgPSBmYWJz KGZhcmdbMF0pOwotI2Vsc2UKLSAgICAgICAgICAgIGlmIChmYXJnWzBdIDwgMC4wKQotICAgICAg ICAgICAgICBmcHJlc3VsdCA9IDAuMCAtIGZhcmdbMF07Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwot ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBGTl9GUEFERDogICAgICAgICAgICAg ICAgLyogRlAgYWRkICovCi0gICAgICAgICAgICBmcHJlc3VsdCA9IGZhcmdbMF0gKyBmYXJnWzFd OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBGTl9GUERJVjogICAgICAgICAg ICAgICAgLyogRlAgZGl2aWRlICovCi0gICAgICAgICAgY2FzZSBGTl9GUE1PRDogICAgICAgICAg ICAgICAgLyogRlAgbW9kdWx1cyAqLwotICAgICAgICAgICAgaWYgKCFmYXJnWzFdKSB7Ci0gICAg ICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAgICAgICAgICBpZiAoZm5kaWFncykKLSAg ICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICI8RVJST1I6RElWSURFX0JZX1pFUk86XFxmIixmbiwiKCk+IixOVUxMKTsKLSAg ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICBmcHJlc3VsdCA9IChjeCA9PSBGTl9GUERJ VikgPwotICAgICAgICAgICAgICAgIChmYXJnWzBdIC8gZmFyZ1sxXSkgOgotICAgICAgICAgICAg ICAgICAgZm1vZChmYXJnWzBdLGZhcmdbMV0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgY2FzZSBGTl9GUEVYUDogICAgICAgICAgICAgICAgLyogRlAgZSB0byB0aGUgeCAqLwotICAg ICAgICAgICAgZnByZXN1bHQgPSAoQ0tGTE9BVCkgZXhwKGZhcmdbMF0pOwotICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgY2FzZSBGTl9GUExPRzogICAgICAgICAgICAgICAgLyogRlAgYmFz ZS0xMCBsb2dhcml0aG0gKi8KLSAgICAgICAgICBjYXNlIEZOX0ZQTE46ICAgICAgICAgICAgICAg ICAvKiBGUCBuYXR1cmFsIGxvZ2FyaXRobSAqLwotICAgICAgICAgICAgaWYgKGZhcmdbMF0gPCAw LjApIHsKLSAgICAgICAgICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgICAgIGlmIChm bmRpYWdzKQotICAgICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpBUkdfT1VUX09GX1JBTkdFOlxcZiIsZm4sIigp PiIsTlVMTCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgZnByZXN1bHQgPSAo Y3ggPT0gRk5fRlBMT0cpID8gbG9nMTAoZmFyZ1swXSkgOiBsb2coZmFyZ1swXSk7Ci0gICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEZOX0ZQTVVMOiAgICAgICAgICAgICAgICAvKiBG UCBtdWx0aXBseSAqLwotICAgICAgICAgICAgZnByZXN1bHQgPSBmYXJnWzBdICogZmFyZ1sxXTsK LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRk5fRlBQT1c6ICAgICAgICAgICAg ICAgIC8qIEZQIHJhaXNlIHRvIGEgcG93ZXIgKi8KLSAgICAgICAgICAgIGZwcmVzdWx0ID0gbW9k ZihmYXJnWzFdLCZkdW1teSk7Ci0gICAgICAgICAgICBpZiAoKCFmYXJnWzBdICYmIGZhcmdbMV0g PD0gMC4wKSB8fAotICAgICAgICAgICAgICAgIChmYXJnWzBdIDwgMC4wICYmIGZwcmVzdWx0KSkg ewotICAgICAgICAgICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICAgICAgaWYgKGZuZGlh Z3MpCi0gICAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAiPEVSUk9SOkFSR19PVVRfT0ZfUkFOR0U6XFxmIixmbiwiKCk+IixO VUxMKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICBmcHJlc3VsdCA9IHBvdyhm YXJnWzBdLGZhcmdbMV0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBGTl9G UFNRUjogICAgICAgICAgICAgICAgLyogRlAgc3F1YXJlIHJvb3QgKi8KLSAgICAgICAgICAgIGlm IChmYXJnWzBdIDwgMC4wKSB7Ci0gICAgICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAg ICAgICAgICBpZiAoZm5kaWFncykKLSAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZO VkFMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJHX09VVF9PRl9SQU5H RTpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg IGZwcmVzdWx0ID0gc3FydChmYXJnWzBdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg IGNhc2UgRk5fRlBTVUI6ICAgICAgICAgICAgICAgIC8qIEZQIHN1YnRyYWN0ICovCi0gICAgICAg ICAgICBmcHJlc3VsdCA9IGZhcmdbMF0gLSBmYXJnWzFdOwotICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgY2FzZSBGTl9GUFJPVTogICAgICAgICAgICAgICAgLyogRlAgcm91bmQgKi8KLSAg ICAgICAgICAgIGZwcmVzdWx0ID0gZmFyZ1swXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgIGNhc2UgRk5fRlBTSU46ICAgICAgICAgICAgICAgIC8qIEZQIHNpbmUgKi8KLSAgICAgICAg ICAgIGZwcmVzdWx0ID0gKENLRkxPQVQpIHNpbihmYXJnWzBdKTsKLSAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgIGNhc2UgRk5fRlBDT1M6ICAgICAgICAgICAgICAgIC8qIEZQIGNvc2luZSAq LwotICAgICAgICAgICAgZnByZXN1bHQgPSAoQ0tGTE9BVCkgY29zKGZhcmdbMF0pOwotICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBGTl9GUFRBTjogICAgICAgICAgICAgICAgLyog RlAgdGFuZ2VudCAqLwotICAgICAgICAgICAgZnByZXN1bHQgPSAoQ0tGTE9BVCkgdGFuKGZhcmdb MF0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBGTl9GUE1BWDoKLSAgICAg ICAgICAgIGZwcmVzdWx0ID0gKGZhcmdbMF0gPiBmYXJnWzFdKSA/IGZhcmdbMF0gOiBmYXJnWzFd OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBGTl9GUE1JTjoKLSAgICAgICAg ICAgIGZwcmVzdWx0ID0gKGZhcmdbMF0gPCBmYXJnWzFdKSA/IGZhcmdbMF0gOiBmYXJnWzFdOwot ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBHZXQgaGVyZSB3aXRo IGZwcmVzdWx0ID0gZnVuY3Rpb24gcmVzdWx0ICovCi0KLSAgICAgICAgaWYgKGVycm5vKSB7ICAg ICAgICAgICAgICAgICAgICAvKiBJZiByYW5nZSBvciBkb21haW4gZXJyb3IgKi8KLSAgICAgICAg ICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICBpZiAoZm5kaWFncykKLSAgICAgICAgICAgICAg Y2ttYWttc2coZm52YWwsRk5WQUxMLAotICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkZM T0FUSU5HLVBPSU5ULU9QOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAgIH0KLSAgICAgICAg aWYgKGZhaWxlZCkgICAgICAgICAgICAgICAgICAgICAvKiBhbmQvb3IgYW55IG90aGVyIGtpbmQg b2YgZXJyb3IsICovCi0gICAgICAgICAgZ290byBmbmVuZDsgICAgICAgICAgICAgICAgICAgLyog ZmFpbC4gKi8KLSNpZm5kZWYgQ09NTUVOVAotICAgICAgICAvKiBDYWxsIHJvdXRpbmUgY29udGFp bmluZyBjb2RlIHRoYXQgd2FzIGZvcm1lcmx5IGlubGluZSAqLwotICAgICAgICBja3N0cm5jcHko Zm52YWwsZnBmb3JtYXQoZnByZXN1bHQscGxhY2VzLGN4ID09IEZOX0ZQUk9VKSxGTlZBTEwpOwot I2Vsc2UKLSAgICAgICAgewotICAgICAgICAgICAgY2hhciBmYnVmWzE2XTsgICAgICAgICAgICAg IC8qIEZvciBjcmVhdGluZyBwcmludGYgZm9ybWF0ICovCi0gICAgICAgICAgICBpZiAoIWZwX3Jv dW5kaW5nICYmICAgICAgICAgLyogSWYgcHJpbnRmIGRvZXNuJ3Qgcm91bmQsICovCi0gICAgICAg ICAgICAgICAgKHBsYWNlcyA+IDAgfHwgICAgICAgICAgLyogcm91bmQgcmVzdWx0IHRvIGRlY2lt YWwgcGxhY2VzLiAqLwotICAgICAgICAgICAgICAgICAocGxhY2VzID09IDAgJiYgY3ggPT0gRk5f RlBST1UpKSkKLSAgICAgICAgICAgICAgZnByZXN1bHQgKz0gKDAuNSAvIHBvdygxMC4wLChDS0ZM T0FUKXBsYWNlcykpOwotICAgICAgICAgICAgaWYgKHBsYWNlcyA+IDApIHsgICAgICAgICAgICAg ICAgICAgLyogSWYgcGxhY2VzIHNwZWNpZmllZCAqLwotICAgICAgICAgICAgICAgIC8qIHVzZSBz cGVjaWZpZWQgcGxhY2VzIHRvIHdyaXRlIGdpdmVuIG51bWJlciBvZiBkaWdpdHMgKi8KLSAgICAg ICAgICAgICAgICBzcHJpbnRmKGZidWYsIiUlMC4lZGYiLHBsYWNlcyk7IC8qIFNBRkUgKi8KLSAg ICAgICAgICAgICAgICBzcHJpbnRmKGZudmFsLGZidWYsZnByZXN1bHQpOyAgIC8qIFNBRkUgKi8K LSAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE90aGVy d2lzZS4uLiAqLwotI2lmZGVmIENPTU1FTlQKLS8qCi0gIEhlcmUgd2Ugd2FudCB0byBwcmludCBl eGFjdGx5IGZwX2RpZ2l0cyBzaWduaWZpY2FudCBkaWdpdHMsIG5vIG1hdHRlciB3aGljaAotICBz aWRlIG9mIHRoZSBkZWNpbWFsIHBvaW50IHRoZXkgYXJlIG9uLiAgVGhhdCBpcywgd2Ugd2FudCB3 YW50IHRoZSBkZWZhdWx0Ci0gIGZvcm1hdCB0byBzaG93IHRoZSBtYXhpbXVtIG51bWJlciBvZiBu b24tZ2FyYmFnZSBkaWdpdHMsIEFORCB3ZSB3YW50IHRoZSBsYXN0Ci0gIHN1Y2ggZGlnaXQgdG8g YmUgcm91bmRlZC4gIE9mIGNvdXJzZSB0aGVyZSBpcyBubyB3YXkgdG8gZG8gdGhhdCwgc2luY2Ug dGhlCi0gIGRpZ2l0IGFmdGVyIHRoZSBsYXN0IG5vbi1nYXJiYWdlIGRpZ2l0IGlzLCB3ZWxsLCBn YXJiYWdlLiAgU28gdGhlIGZvbGxvd2luZwotICBjbGV2ZXIgcnVzZSBkb2VzIG5vIGdvb2QuCi0q LwotICAgICAgICAgICAgICAgIGludCBzaWduID0gMCwgbSA9IDA7Ci0gICAgICAgICAgICAgICAg c3ByaW50ZihmbnZhbCwiJWYiLGZwcmVzdWx0KTsKLSAgICAgICAgICAgICAgICBpZiAoZm52YWxb MF0gPT0gJy0nKSBzaWduID0gMTsKLSAgICAgICAgICAgICAgICBmb3IgKGkgPSBzaWduOyBpIDwg Rk5WQUxMOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzZGlnaXQoZm52YWxbaV0p KQotICAgICAgICAgICAgICAgICAgICAgIG0rKzsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQot ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICBpZiAobSA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGQgPSBmcF9kaWdp dHMgLSBtOwotICAgICAgICAgICAgICAgICAgICBpZiAoZCA8IDEpIGQgPSAxOwotICAgICAgICAg ICAgICAgICAgICBzcHJpbnRmKGZidWYsIiUlJWQuJWRmIixmcF9kaWdpdHMrc2lnbisxLGQpOwot ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwcmludGYoZmJ1 ZiwiJSUwLiVkZiIsZnBfZGlnaXRzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgc3ByaW50ZihmbnZhbCxmYnVmLGZwcmVzdWx0KTsKLSNlbHNlCi0gICAgICAgICAgICAgICAg LyogR28gZm9yIG1heCBwcmVjaXNpb24gKi8KLSAgICAgICAgICAgICAgICBzcHJpbnRmKGZidWYs IiUlMC4lZGYiLGZwX2RpZ2l0cyk7IC8qIFNBRkUgKi8KLSAgICAgICAgICAgICAgICBzcHJpbnRm KGZudmFsLGZidWYsZnByZXN1bHQpOyAvKiBTQUZFICovCi0KLSNlbmRpZiAvKiBDT01NRU5UICov Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZm52YWxbMF0gPT0gJy0nKSBzaWduID0g MTsKLSAgICAgICAgfQotICAgICAgICBkZWJ1ZyhGMTExLCJmcHJlc3VsdCAxIixmbnZhbCxlcnJu byk7IC8qIENoZWNrIGZvciBvdmVyL3VuZGVyZmxvdyAqLwotICAgICAgICBmb3IgKGkgPSBzaWdu OyBmbnZhbFtpXTsgaSsrKSB7IC8qIEdpdmUgcmVxdWVzdGVkIGRlY2ltYWwgcGxhY2VzICovCi0g ICAgICAgICAgICBpZiAoZm52YWxbaV0gPT0gJy4nKSAgICAgICAgLyogRmlyc3QgZmluZCB0aGUg ZGVjaW1hbCBwb2ludCAqLwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGVsc2Ug aWYgKGkgPiBmcF9kaWdpdHMgKyBzaWduIC0gMSkgLyogcmVwbGFjaW5nIGdhcmJhZ2UgKi8KLSAg ICAgICAgICAgICAgZm52YWxbaV0gPSAnMCc7ICAgICAgICAgICAvKiBkaWdpdHMgd2l0aCAwLi4u ICovCi0gICAgICAgIH0KLSAgICAgICAgaWYgKGZudmFsW2ldID09ICcuJykgeyAgICAgICAgICAv KiBIYXZlIGRlY2ltYWwgcG9pbnQgKi8KLSAgICAgICAgICAgIGludCBnb3RlbmQgPSAwOwotICAg ICAgICAgICAgLyogZCA8IDAgc28gdHJ1bmNhdGUgZnJhY3Rpb24gKi8KLSAgICAgICAgICAgIGlm IChwbGFjZXMgPCAwIHx8IChwbGFjZXMgPT0gMCAmJiBjeCA9PSBGTl9GUFJPVSkpIHsKLSAgICAg ICAgICAgICAgICBmbnZhbFtpXSA9IE5VTDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocGxhY2Vz ID4gMCkgeyAgICAvKiBkID4gMCBzbyB0aGlzIG1hbnkgZGVjaW1hbCBwbGFjZXMgKi8KLSAgICAg ICAgICAgICAgICBpKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlyc3QgZGlnaXQg YWZ0ZXIgZGVjaW1hbCAqLwotICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbGFjZXM7 IGorKykgeyAvKiBUcnVuY2F0ZSBhZnRlciBkIGRlY2ltYWwgKi8KLSAgICAgICAgICAgICAgICAg ICAgaWYgKCFmbnZhbFtqK2ldKSAgICAgICAgICAgLyogcGxhY2VzIG9yIGV4dGVuZCB0byBkICAq LwotICAgICAgICAgICAgICAgICAgICAgIGdvdGVuZCA9IDE7ICAgICAgICAgICAgICAvKiBkZWNp bWFsIHBsYWNlcy4gKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKGdvdGVuZCB8fCBqK2krc2ln biA+IGZwX2RpZ2l0cykKLSAgICAgICAgICAgICAgICAgICAgICBmbnZhbFtqK2ldID0gJzAnOwot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmbnZhbFtqK2ldID0gTlVMOwotICAg ICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIGQgPT0gMCBzbyBEbyBUaGUg UmlnaHQgVGhpbmcgKi8KLSAgICAgICAgICAgICAgICBmb3IgKGogPSAoaW50KXN0cmxlbihmbnZh bCkgLSAxOyBqID4gaSsxOyBqLS0pIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChqIC0gc2ln bikgPiBmcF9kaWdpdHMpCi0gICAgICAgICAgICAgICAgICAgICAgZm52YWxbal0gPSAnMCc7Ci0g ICAgICAgICAgICAgICAgICAgIGlmIChmbnZhbFtqXSA9PSAnMCcpCi0gICAgICAgICAgICAgICAg ICAgICAgZm52YWxbal0gPSBOVUw7ICAgLyogU3RyaXAgdXNlbGVzcyB0cmFpbGluZyAwJ3MuICov Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBD T01NRU5UICovCi0gICAgICAgIGRlYnVnKEYxMTEsImZwcmVzdWx0IDIiLGZudmFsLGVycm5vKTsK LSAgICAgICAgZ290byBmbmVuZDsKLQotICAgIH0KLSNlbmRpZiAvKiBGTkZMT0FUICovCi0KLSNp ZmRlZiBDS0NIQU5ORUxJTwotICAgIGlmIChjeCA9PSBGTl9GU1RBVCAgfHwgICAgICAgICAgICAg IC8qIEZpbGUgZnVuY3Rpb25zICovCi0gICAgICAgIGN4ID09IEZOX0ZQT1MgICB8fAotICAgICAg ICBjeCA9PSBGTl9GRU9GICAgfHwKLSAgICAgICAgY3ggPT0gRk5fRkdDSEFSIHx8Ci0gICAgICAg IGN4ID09IEZOX0ZHTElORSB8fAotICAgICAgICBjeCA9PSBGTl9GR0JMSyAgfHwKLSAgICAgICAg Y3ggPT0gRk5fRlBDSEFSIHx8Ci0gICAgICAgIGN4ID09IEZOX0ZQTElORSB8fAotICAgICAgICBj eCA9PSBGTl9GUEJMSyAgfHwKLSAgICAgICAgY3ggPT0gRk5fTkxJTkUgIHx8Ci0gICAgICAgIGN4 ID09IEZOX0ZFUk1TRyB8fAotICAgICAgICBjeCA9PSBGTl9GSUxOTykgewotICAgICAgICBpbnQg eCA9IDAsIHQgPSAwLCBjaGFubmVsOwotICAgICAgICBsb25nIHo7Ci0gICAgICAgIGV4dGVybiBp bnQgel9tYXhjaGFuOwotCi0gICAgICAgIGZhaWxlZCA9IDE7ICAgICAgICAgICAgICAgICAgICAg LyogQXNzdW1lIGZhaWx1cmUgKi8KLSAgICAgICAgcCA9IGZudmFsOyAgICAgICAgICAgICAgICAg ICAgICAvKiB1bnRpbCB3ZSB2YWxpZGF0ZSBhcmdzICovCi0gICAgICAgIGlmIChjeCA9PSBGTl9G RVJNU0cpIHsKLSAgICAgICAgICAgIGV4dGVybiBpbnQgel9lcnJvcjsKLSAgICAgICAgICAgIGlm IChhcmduIDwgMSkgewotICAgICAgICAgICAgICAgIHggPSB6X2Vycm9yOwotICAgICAgICAgICAg fSBlbHNlIGlmIChjaGtudW0oYnBbMF0pKSB7Ci0gICAgICAgICAgICAgICAgeCA9IGF0b2koYnBb MF0pOwotICAgICAgICAgICAgfSBlbHNlIGlmIChmbmRpYWdzKQotICAgICAgICAgICAgICBja21h a21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJHX05P VF9OVU1FUklDOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAgICAgICBmYWlsZWQgPSAwOwot ICAgICAgICAgICAgY2tzdHJuY3B5KGZudmFsLGNrZmVycm9yKHgpLEZOVkFMTCk7Ci0gICAgICAg ICAgICBnb3RvIGZuZW5kOwotICAgICAgICB9Ci0gICAgICAgIGlmIChhcmduIDwgMSkgeyAgICAg ICAgICAgICAgICAgLyogQWxsIGZpbGUgZnVuY3Rpb25zIG5lZWQgY2hhbm5lbCAqLwotCSAgICBp ZiAoY3ggPT0gRk5fRlNUQVQpIHsJLyogRXhjZXB0IGZfc3RhdHVzKCksIGUuZy4gd2hlbiAqLwot CQlmbnZhbFswXSA9ICcwJzsJCS8qIGNhbGxlZCB3aXRoIGEgdmFyaWFibGUgdGhhdCAqLwotCQlm bnZhbFsxXSA9IE5VTDsJCS8qIGhhc24ndCBiZWVuIGRlZmluZWQgeWV0LiAqLwotCQlmYWlsZWQg PSAwOwotCSAgICB9IGVsc2UgewotCQlpZiAoZm5kaWFncykKLQkJIGNrbWFrbXNnKGZudmFsLEZO VkFMTCwiPEVSUk9SOk1JU1NJTkdfQVJHOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0JICAgIH0KLSAg ICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJkaWdpdHMoYnBb MF0pKSB7ICAgICAgICAgICAvKiBDaGFubmVsIG11c3QgYmUgbnVtZXJpYyAqLwotICAgICAgICAg ICAgY2hhbm5lbCA9IGF0b2koYnBbMF0pOwotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEZhaWwgaWYgaXQgaXNuJ3QgKi8KLSAgICAgICAgICAgIGlmIChmbmRpYWdz KQotICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAgICAgICAg ICAgICAgICI8RVJST1I6QVJHX05PVF9OVU1FUklDOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAg ICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjaGFubmVsIDwgMCB8 fCBjaGFubmVsID4gel9tYXhjaGFuKSB7IC8qIENoZWNrIGNoYW5uZWwgcmFuZ2UgKi8KLSAgICAg ICAgICAgIGlmIChmbmRpYWdzKQotICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEws Ci0gICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJHX09VVF9PRl9SQU5HRTpcXGYiLGZu LCIoKT4iLE5VTEwpOwotICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgfQotICAgICAg ICB4ID0gel9nZXRtb2RlKGNoYW5uZWwpOyAgICAgICAgIC8qIEZpbmQgb3V0IGFib3V0IHRoZSBj aGFubmVsICovCi0KLSAgICAgICAgZmFpbGVkID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBB c3N1bWUgc3VjY2VzcyBmcm9tIGhlcmUgZG93biAqLwotICAgICAgICBpZiAoY3ggPT0gRk5fRlNU QVQpIHsgICAgICAgICAgIC8qIFN0YXR1cyAvIG1vZGVzIG9mIGNoYW5uZWwgKi8KLSAgICAgICAg ICAgIGlmICh4ID4gLTEpCi0gICAgICAgICAgICAgIHggJj0gRk1fUldCOyAgICAgICAgICAgICAg LyogTWFzayBvdXQgaXJyZWxldmFudCBiaXRzICovCi0gICAgICAgICAgICBlbHNlICAgICAgICAg ICAgICAgICAgICAgICAgLyogSW4gdGhpcyBjYXNlIG5vdCBvcGVuIGlzIE9LICovCi0gICAgICAg ICAgICAgIHggPSAwOyAgICAgICAgICAgICAgICAgICAgLyogMCBpZiBub3Qgb3BlbiwgMS03IGlm IG9wZW4gKi8KLSAgICAgICAgICAgIHNwcmludGYoZm52YWwsIiVkIix4KTsgICAgICAvKiBTQUZF ICovCi0gICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICB9IGVsc2UgaWYgKHggPCAxKSB7 ICAgICAgICAgICAgIC8qIE5vdCBcZl9zdGF0dXMoKSBzbyBtdXN0IGJlIG9wZW4gKi8KLSAgICAg ICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICBpZiAoZm5kaWFncykKLSAgICAgICAgICAg ICAgY2ttYWttc2coZm52YWwsRk5WQUxMLCI8RVJST1I6RklMRV9OT1RfT1BFTjpcXGYiLGZuLCIo KT4iLE5VTEwpOwotICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgfQotICAgICAgICBz d2l0Y2ggKHkpIHsgICAgICAgICAgICAgICAgICAgIC8qIERvIHRoZSByZXF1ZXN0ZWQgZnVuY3Rp b24gKi8KLSAgICAgICAgICBjYXNlIEZOX0ZQT1M6ICAgICAgICAgICAgICAgICAvKiBHZXQgcG9z aXRpb24gKi8KLSAgICAgICAgICAgIHogPSB6X2dldHBvcyhjaGFubmVsKTsJLyogRklYIFRISVMg Ki8KLSAgICAgICAgICAgIHNwcmludGYoZm52YWwsIiVsZCIseik7ICAgICAvKiBTQUZFICovCi0g ICAgICAgICAgICBnb3RvIGZuZW5kOwotCi0gICAgICAgICAgY2FzZSBGTl9OTElORTogICAgICAg ICAgICAgICAgLyogR2V0IGxpbmUgbnVtYmVyICovCi0gICAgICAgICAgICB6ID0gel9nZXRsaW5l KGNoYW5uZWwpOwkvKiBGSVggVEhJUyAqLwotICAgICAgICAgICAgc3ByaW50ZihmbnZhbCwiJWxk Iix6KTsgICAgIC8qIFNBRkUgKi8KLSAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0KLSAgICAgICAg ICBjYXNlIEZOX0ZFT0Y6ICAgICAgICAgICAgICAgICAvKiBDaGVjayBFT0YgKi8KLSAgICAgICAg ICAgIHQgPSAwOwotICAgICAgICAgICAgaWYgKHggJiBGTV9FT0YpIHQgPSAxOwotICAgICAgICAg ICAgc3ByaW50ZihmbnZhbCwiJWQiLHQpOyAgICAgIC8qIFNBRkUgKi8KLSAgICAgICAgICAgIGdv dG8gZm5lbmQ7Ci0KLSAgICAgICAgICBjYXNlIEZOX0ZJTE5POiAgICAgICAgICAgICAgICAvKiBH ZXQgZmlsZSBoYW5kbGUgKi8KLSAgICAgICAgICAgIHggPSB6X2dldGZudW0oY2hhbm5lbCk7Ci0g ICAgICAgICAgICBzcHJpbnRmKGZudmFsLCIlZCIseCk7ICAgICAgLyogU0FGRSAqLwotICAgICAg ICAgICAgZ290byBmbmVuZDsKLQotICAgICAgICAgIGNhc2UgRk5fRlBCTEs6ICAgICAgICAgICAg ICAgIC8qIFJlYWQgb3Igd3JpdGUgYmxvY2sgKi8KLSAgICAgICAgICBjYXNlIEZOX0ZHQkxLOgot ICAgICAgICAgICAgaWYgKGFyZ24gPCAyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZuZGlhZ3Mp Ci0gICAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAiPEVSUk9SOk1JU1NJTkdfQVJHOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0g ICAgICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm IChyZGlnaXRzKGJwWzFdKSkgewotICAgICAgICAgICAgICAgIHQgPSBhdG9pKGJwWzFdKTsKLSAg ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCi0gICAgICAg ICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAiPEVSUk9SOkFSR19OT1RfTlVNRVJJQzpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAg ICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSBGTl9G R0NIQVI6ICAgICAgICAgICAgICAgLyogUmVhZCBvciB3cml0ZSBjaGFyYWN0ZXIgb3IgbGluZSAq LwotICAgICAgICAgIGNhc2UgRk5fRlBDSEFSOgotICAgICAgICAgIGNhc2UgRk5fRkdMSU5FOgot ICAgICAgICAgIGNhc2UgRk5fRlBMSU5FOgotICAgICAgICAgICAgZm52YWxbMF0gPSBOVUw7Ci0g ICAgICAgICAgICBzd2l0Y2ggKHkpIHsKLSAgICAgICAgICAgICAgY2FzZSBGTl9GR0NIQVI6IHQg PSB6X2luKGNoYW5uZWwsZm52YWwsRk5WQUxMLDEsMSk7IGJyZWFrOwotICAgICAgICAgICAgICBj YXNlIEZOX0ZHTElORTogdCA9IHpfaW4oY2hhbm5lbCxmbnZhbCxGTlZBTEwsRk5WQUxMLTEsMCk7 IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEZOX0ZHQkxLOgotICAgICAgICAgICAgICAgIGlm ICh0ID49IEZOVkFMTCkgdCA9IEZOVkFMTCAtIDE7Ci0gICAgICAgICAgICAgICAgdCA9IHpfaW4o Y2hhbm5lbCxmbnZhbCxGTlZBTEwsdCwxKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgICAgY2FzZSBGTl9GUENIQVI6IHQgPSB6X291dChjaGFubmVsLGJwWzFdLDEsMSk7ICBi cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBGTl9GUExJTkU6IHQgPSB6X291dChjaGFubmVsLGJw WzFdLC0xLDApOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBGTl9GUEJMSzogIHQgPSB6X291 dChjaGFubmVsLGJwWzFdLC0xLDEpOyBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg IGlmICh0IDwgMCkgeyAgICAgICAgICAgICAgICAvKiBIYW5kbGUgcmVhZC93cml0ZSBlcnJvciAq LwotICAgICAgICAgICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICAgICAgaWYgKGZuZGlh Z3MgJiYgdCAhPSBGWF9FT0YpCi0gICAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZB TEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkZJTEVfRVJST1JfJWQ6XFxm IixmbiwiKCk+IixOVUxMKTsKLSAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAg ICAgfQotICAgICAgICAgICAgaWYgKGN4ID09IEZOX0ZHQ0hBUikgICAgICAgIC8qIE51bGwgdGVy bWluYXRlIGNoYXIgKi8KLSAgICAgICAgICAgICAgZm52YWxbMV0gPSBOVUw7Ci0gICAgICAgICAg ICAvKiBXcml0ZSAocHV0KSBmdW5jdGlvbnMgcmV0dXJuIG51bWVyaWMgc3RhdHVzIGNvZGUgKi8K LSAgICAgICAgICAgIGlmIChjeCA9PSBGTl9GUENIQVIgfHwgY3ggPT0gRk5fRlBMSU5FIHx8IGN4 ID09IEZOX0ZQQkxLKQotICAgICAgICAgICAgICBzcHJpbnRmKGZudmFsLCIlZCIsdCk7ICAgIC8q IFNBRkUgKi8KLSAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5k aWYgLyogQ0tDSEFOTkVMSU8gKi8KLQotICAgIGlmIChjeCA9PSBGTl9TUVVFRVpFKSB7CQkvKiBT dHJpbmcgZnVuY3Rpb24gXGZzcXVlZXplKCkgKi8KLQkvKiBTcXVlZXplIG91dCB3aGl0ZXNwYWNl ICovCi0JLyogQWRkIG9wdGlvbnMgbGF0ZXIgZm9yIHdoZXRoZXIgdG8gdHJpbSBsZWFkaW5nIGFu ZCB0cmFpbGluZyBibGFua3MgKi8KLSAgICAgICAgLyogYW5kIHdoYXQgdG8gZG8gYWJvdXQgY29u dHJvbCBjaGFyYWN0ZXJzLCA4LWJpdCB3aGl0ZXNwYWNlLCBldGMgKi8KLQlpbnQgc3RhcnRlZCA9 IDA7CQkvKiBGbGFnIGZvciBmaXJzdCBub24td2hpdGVzcGFjZSAqLwotCWludCBuID0gMDsJCQkv KiBCbGFuay9UYWIgY291bnRlciAqLwotICAgICAgICBzID0gYnBbMF0gPyBicFswXSA6ICIiOwot ICAgICAgICBwID0gZm52YWw7CQkJLyogUmVzdWx0IGJ1ZmZlciAqLwotCXdoaWxlICgqcykgewkJ CS8qIFdoaWxlIHRoZXJlIGlzIGlucHV0ICovCi0JICAgIGlmICghc3RhcnRlZCAmJiAoKnMgPT0g JyAnIHx8ICpzID09ICdcMDExJykpIHsKLQkJcysrOwkJCS8qIFNraXAgcGFzdCBsZWFkaW5nIHdo aXRlc3BhY2UgKi8KLQkJY29udGludWU7Ci0JICAgIH0KLQkgICAgc3RhcnRlZCsrOwkJCS8qIExl YWRpbmcgd2hpdGVzcGFjZSB3YXMgc2tpcHBlZCAqLwotCSAgICBpZiAoKnMgIT0gJyAnICYmICpz ICE9ICdcMDExJykgeyAvKiBIYXZlIGEgbm9uc3BhY2UgY2hhciAqLwotCQluID0gMDsJCQkvKiBy ZXNldCBzcGFjZSBjb3VudGVyICovCi0JCSpwKysgPSAqcysrOwkJLyogY29weSBjaGFyIHRvIGRl c3RpbmF0aW9uICovCi0JCWNvbnRpbnVlOwotCSAgICB9CQkgICAgCi0JICAgIGlmIChuKysgPiAw KSB7CQkvKiBIYXZlIGJsYW5rIG9yIHRhYiAqLwotCQlzKys7CQkJLyogZG9uJ3QgY29weSBtb3Jl IHRoYW4gb25lICovCi0JCWNvbnRpbnVlOwotCSAgICB9Ci0JICAgICpwKysgPSAnICc7CQkJLyog RGVwb3NpdCBvbmUgc3BhY2UgKi8KLQkgICAgcysrOwkJCS8qIGFuZCBnbyB0byBuZXh0IHNvdXJj ZSBjaGFyICovCi0JfQotCWlmICgqKHAtMSkgPT0gJyAnKSBwLS07CQkvKiBSZW1vdmUgdHJhaWxp bmcgc3BhY2UgKi8KLSAgICAgICAgKnAgPSBOVUw7CQkJLyogVGVybWluYXRlIHN0cmluZyAqLwot ICAgICAgICBwID0gZm52YWw7CQkJLyogcG9pbnQgdG8gYmVnaW5uaW5nICovCi0gICAgICAgIGdv dG8gZm5lbmQ7CQkJLyogRG9uZS4gKi8KLSAgICB9Ci0gICAgaWYgKGN4ID09IEZOX1BBVFRFUk4p IHsgICAgICAgICAgICAgLyogXGZwYXR0ZXJuKCkgZm9yIElOUFVUICovCi0gICAgICAgIGl0c2Fw YXR0ZXJuID0gMTsKLSAgICAgICAgaWYgKGFyZ24gPiAwKSB7Ci0gICAgICAgICAgICBwID0gZm52 YWw7Ci0gICAgICAgICAgICBja3N0cm5jcHkoZm52YWwsYnBbMF0sRk5WQUxMKTsKLSAgICAgICAg fSBlbHNlIHAgPSAiIjsKLSAgICAgICAgZ290byBmbmVuZDsKLSAgICB9Ci0gICAgaWYgKGN4ID09 IEZOX0hFWDJOIHx8IGN4ID09IEZOX09DVDJOKSB7IC8qIFxmaGV4Mm4oKSwgXGZvY3QybigpICov Ci0gICAgICAgIHAgPSAiMCI7Ci0gICAgICAgIGlmIChhcmduIDwgMSkKLSAgICAgICAgICBnb3Rv IGZuZW5kOwotICAgICAgICBwID0gY2tyYWRpeChicFswXSwgKChjeCA9PSBGTl9IRVgyTikgPyAx NiA6IDgpLCAxMCk7Ci0gICAgICAgIGlmICghcCkgewotICAgICAgICAgICAgaWYgKGZuZGlhZ3Mp Ci0gICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKLSAgICAgICAgICAgICAgICAg ICAgICAgIjxFUlJPUjpBUkdfT1VUX09GX1JBTkdFOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAg ICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICB9Ci0gICAgICAgIGZhaWxlZCA9IDA7Ci0gICAg ICAgIGNrc3RybmNweShmbnZhbCxwLEZOVkFMTCk7Ci0gICAgICAgIHAgPSBmbnZhbDsKLSAgICAg ICAgZ290byBmbmVuZDsKLSAgICB9Ci0KLSAgICBpZiAoY3ggPT0gRk5fSEVYMklQKSB7Ci0gICAg ICAgIGludCBjWzJdLCBpcFs0XSwgaSwgazsKLSAgICAgICAgcCA9ICIwIjsKLSAgICAgICAgaWYg KGFyZ24gPCAxKQotICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgIHMgPSBicFswXTsKLSAg ICAgICAgaWYgKChpbnQpc3RybGVuKHMpICE9IDgpIHsKLSAgICAgICAgICAgIGZhaWxlZCA9IDE7 Ci0gICAgICAgICAgICBpZiAoZm5kaWFncykKLSAgICAgICAgICAgICAgY2ttYWttc2coZm52YWws Rk5WQUxMLAotICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkFSR19PVVRfT0ZfUkFOR0U6 XFxmIixmbiwiKCk+IixOVUxMKTsKLSAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgIH0K LSAgICAgICAgcCA9IGZudmFsOwotICAgICAgICBmb3IgKGsgPSAwOyBrIDwgODsgayArPSAyKSB7 Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg Y1tpXSA9ICpzKys7Ci0gICAgICAgICAgICAgICAgaWYgKGlzbG93ZXIoY1tpXSkpIGNbaV0gPSB0 b3VwcGVyKGNbaV0pOwotICAgICAgICAgICAgICAgIGlmIChjW2ldID49ICcwJyAmJiBjW2ldIDw9 ICc5JykgewotICAgICAgICAgICAgICAgICAgICBjW2ldIC09IDB4MzA7Ci0gICAgICAgICAgICAg ICAgfSBlbHNlIGlmIChjW2ldID49ICdBJyAmJiBjW2ldIDw9ICdGJykgewotICAgICAgICAgICAg ICAgICAgICBjW2ldIC09IDB4Mzc7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZuZGlhZ3Mp Ci0gICAgICAgICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJHX09VVF9PRl9SQU5HRTpcXGYiLGZuLCIo KT4iLE5VTEwpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICBpcFtrLzJdID0gY1swXSA8PCA0IHwgY1sxXTsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIHNwcmludGYocCwiJWQuJWQuJWQuJWQiLGlwWzBdLGlwWzFd LGlwWzJdLGlwWzNdKTsgLyogU0FGRSAqLwotICAgICAgICB9Ci0gICAgICAgIGdvdG8gZm5lbmQ7 Ci0gICAgfQotICAgIGlmIChjeCA9PSBGTl9JUDJIRVgpIHsKLSAgICAgICAgaW50IGlwWzRdLCBp OwotICAgICAgICBjaGFyICogcTsKLSAgICAgICAgcCA9ICIwMDAwMDAwMCI7Ci0gICAgICAgIGlm IChhcmduIDwgMSkKLSAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICBzID0gYnBbMF07Ci0g ICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewotICAg ICAgICAgICAgcSA9IGNrc3RyY2hyKHMsJy4nKTsKLSAgICAgICAgICAgIGlmIChxKSB7Ci0gICAg ICAgICAgICAgICAgKnErKyA9IE5VTDsKLSAgICAgICAgICAgICAgICBpcFtpXSA9IGF0b2kocyk7 Ci0gICAgICAgICAgICAgICAgcyA9IHE7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg ICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCi0gICAgICAg ICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAiPEVSUk9SOkFSR19PVVRfT0ZfUkFOR0U6XFxmIixmbiwiKCk+IixOVUxMKTsKLSAgICAg ICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg IGlwWzNdID0gYXRvaShzKTsKLSAgICAgICAgc3ByaW50ZihwLCIlMDJ4JTAyeCUwMnglMDJ4Iixp cFswXSxpcFsxXSxpcFsyXSxpcFszXSk7IC8qIFNBRkUgKi8KLSAgICAgICAgZ290byBmbmVuZDsK LSAgICB9Ci0gICAgaWYgKGN4ID09IEZOX1JBRElYKSB7Ci0gICAgICAgIGZhaWxlZCA9IDE7Ci0g ICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgaWYgKGFyZ24gPCAzKSB7Ci0gICAgICAgICAgICBp ZiAoZm5kaWFncykKLSAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLCI8RVJST1I6 TUlTU0lOR19BUkc6XFxmIixmbiwiKCk+IixOVUxMKTsKLSAgICAgICAgICAgIGdvdG8gZm5lbmQ7 Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFyZGlnaXRzKGJwWzFdKSB8fCAhcmRpZ2l0cyhicFsy XSkpIHsKLSAgICAgICAgICAgIGlmIChmbmRpYWdzKQotICAgICAgICAgICAgICBja21ha21zZyhm bnZhbCxGTlZBTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJHX05PVF9OVU1F UklDOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAg ICB9Ci0gICAgICAgIHAgPSBja3JhZGl4KGJwWzBdLGF0b2koYnBbMV0pLGF0b2koYnBbMl0pKTsK LSAgICAgICAgaWYgKCFwKSB7Ci0gICAgICAgICAgICBpZiAoZm5kaWFncykKLSAgICAgICAgICAg ICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9S OkFSR19PVVRfT0ZfUkFOR0U6XFxmIixmbiwiKCk+IixOVUxMKTsKLSAgICAgICAgICAgIGdvdG8g Zm5lbmQ7Ci0gICAgICAgIH0KLSAgICAgICAgZmFpbGVkID0gMDsKLSAgICAgICAgY2tzdHJuY3B5 KGZudmFsLHAsRk5WQUxMKTsKLSAgICAgICAgcCA9IGZudmFsOwotICAgICAgICBnb3RvIGZuZW5k OwotICAgIH0KLSAgICBpZiAoY3ggPT0gRk5fSk9JTikgewotICAgICAgICBpbnQgaSwgeCwgeSwg eiwgZmxhZywgZmxhZzIsIGhpLCBsbywgbWF4LCBzZXBsZW4sIGdyb3VwaW5nID0gMDsKLSAgICAg ICAgY2hhciBhYnVmWzE2XSwgYywgKnMsICpxLCAqc2VwID0gTlVMTDsKLSAgICAgICAgY2hhciAq IGdyX29wbiA9ICJcInsnKFs8IjsgICAgICAvKiBHcm91cCBvcGVuIGJyYWNrZXRzICovCi0gICAg ICAgIGNoYXIgKiBncl9jbHMgPSAiXCJ9JyldPiI7ICAgICAgLyogR3JvdXAgY2xvc2UgYnJhY2tl dHMgKi8KLSAgICAgICAgY2hhciBsYlsyXSwgcmJbMl07ICAgICAgICAgICAgICAvKiBTZWxlY3Rl ZCBsZWZ0IGFuZCByaWdodCBicmFja2V0cyAqLwotCWludCBjc3YgPSAwLCB0c3YgPSAwOwkJLyog RnVuY3Rpb24gZmxhZ3MgKi8KLQljaGFyIHNwZWNpYWxjaGFyID0gMDsJCS8qIEZpZWxkIGNoYXIg dGhhdCB0cmlnZ2VycyBncm91cGluZyAqLwotCWNoYXIgKnMyID0gTlVMTDsJCS8qIEFkZHJlc3Mg b2YgbWFsbG9jJ2Qgc3RvcmFnZSAqLwotCi0gICAgICAgIGZhaWxlZCA9IDE7ICAgICAgICAgICAg ICAgICAgICAgLyogQXNzdW1lIGZhaWx1cmUgKi8KLSAgICAgICAgZm52YWxbMF0gPSBOVUw7Ci0g ICAgICAgIGRlYnVnKEYxMDEsIkZOSk9JTiBBUkdOIiwiIixhcmduKTsKLQotICAgICAgICBja3N0 cm5jcHkoYWJ1ZixicFswXSwxNik7ICAgICAgIC8qIEdldCBhcnJheSByZWZlcmVuY2UgKi8KLSAg ICAgICAgcyA9IGFidWY7Ci0gICAgICAgIGlmICgoeCA9IGFycmF5Ym91bmRzKHMsJmxvLCZoaSkp IDwgMCkgeyAgLyogR2V0IGluZGV4IGFuZCBib3VuZHMgKi8KLSAgICAgICAgICAgIGlmIChmbmRp YWdzKQotICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsIjxFUlJPUjpBUkdfQkFE X0FSUkFZOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAgICAgICBnb3RvIGZuZW5kOwotICAg ICAgICB9Ci0gICAgICAgIHAgPSBmbnZhbDsgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQg dG8gcmVzdWx0ICovCi0gICAgICAgIG1heCA9IGFfZGltW3hdOyAgICAgICAgICAgICAgICAgLyog U2l6ZSBvZiBhcnJheSAqLwotICAgICAgICBpZiAobG8gPCAwKSBsbyA9IDE7ICAgICAgICAgICAg IC8qIFVzZSBnaXZlbiByYW5nZSBpZiBhbnkgKi8KLSAgICAgICAgaWYgKGxvID4gbWF4KSBsbyA9 IG1heDsKLSNpZmRlZiBDT01NRU5UCi0JaGkgPSBtYXg7Ci0jZWxzZQotLyoKLSAgVGhpcyBpcyBh IHdvcmthcm91bmQgZm9yIHRoZSBwcm9ibGVtIGluIHdoaWNoIHRoZSBkaW1lbnNpb24gb2YgdGhl IFwmX1tdCi0gIGFycmF5IChidXQgbm90IGl0cyBjb250ZW50cykgZ3Jvd3MgdXBvbiBlbnRyeSB0 byBhIFNXSVRDSCBibG9jay4gIEJ1dCB0aGlzCi0gIGNvZGUgcHJldmVudHMgdGhlIGRpbWVuc2lv biBmcm9tIGdyb3dpbmcuICBHbyBmaWd1cmUuCi0qLwotICAgICAgICBpZiAoaGkgPCAwKSB7CQkJ LyogQm91bmRzIG5vdCBnaXZlbiAqLwotICAgICAgICAgICAgaWYgKHgpCQkJLyogUmVndWxhciBh cnJheSAqLwotCSAgICAgIGhpID0gbWF4OwotCSAgICBlbHNlCQkJLyogQXJndW1lbnQgdmVjdG9y IGFycmF5ICovCi0JICAgICAgZm9yIChoaSA9IG1heDsgaGkgPj0gbG87IGhpLS0pIHsgLyogaWdu b3JlIGFueSB0cmFpbGluZyAqLwotCQkgIGlmICghYV9wdHJbeF1baGldKSBjb250aW51ZTsgLyog ZW1wdHkgZWxlbWVudHMgKi8KLQkJICBpZiAoISooYV9wdHJbeF1baGldKSkgY29udGludWU7Ci0J CSAgYnJlYWs7Ci0JICAgICAgfQotCX0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIGlm IChoaSA+IG1heCkgaGkgPSBtYXg7Ci0gICAgICAgIGZhaWxlZCA9IDA7ICAgICAgICAgICAgICAg ICAgICAgLyogVW5zZXQgZmFpbHVyZSBmbGFnICovCi0gICAgICAgIGlmIChtYXggPCAxKQotICAg ICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgIHNlcCA9ICIgIjsgICAgICAgICAgICAgICAgICAg ICAgLyogU2VwYXJhdG9yICovCi0gICAgICAgIGxiWzBdID0gTlVMOwkJCS8qIEdyb3VwIHN0YXJ0 IGNoYXIgKGFzIHN0cmluZykgKi8KLSAgICAgICAgcmJbMF0gPSBOVUw7Ci0gICAgICAgIGxiWzFd ID0gTlVMOwkJCS8qIEdyb3VwIGVuZCBjaGFyIGFzIHN0cmluZyAqLwotICAgICAgICByYlsxXSA9 IE5VTDsKLQotICAgICAgICBpZiAoYXJnbiA+IDEpIHsKLQkgICAgaWYgKGJwWzFdKSBpZiAoKmJw WzFdKSB7CS8qIElmIGFyZzEgZ2l2ZW4gYW5kIG5vdCBlbXB0eSAqLwotCQlpZiAoIXN0cmNtcChi cFsxXSwiQ1NWIikpIHsgLyogU3BlY2lhbCAiQ1NWIiBzeW1ib2xpYyBhcmcgKi8KLQkJICAgIGNz disrOwkJLyogTWFrZSBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0ICovCi0JCSAgICBzZXAgPSAiLCI7 CQkvKiBDb21tYSAqLwotCQkgICAgc3BlY2lhbGNoYXIgPSAqc2VwOwkvKiBTZXBhcmF0b3IgaXMg c3BlY2lhbCBjaGFyYWN0ZXIgKi8KLQkJICAgIGdyb3VwaW5nID0gMTsJLyogR3JvdXAgd2l0aCBk b3VibGVxdW90ZXMgKi8KLQkJICAgIGxiWzBdID0gJyInOwkvKiBhbmQgaGVyZSAqLwotCQkgICAg cmJbMF0gPSAnIic7CS8qIHRoZXkgYXJlICovCi0JCX0gZWxzZSBpZiAoIXN0cmNtcChicFsxXSwi VFNWIikpIHsgLyogIlRTViIgc3ltYm9saWMgYXJnICovCi0JCSAgICB0c3YrKzsJCS8qIE1ha2Ug YSBUYWIgc2VwYXJhdGVkIGxpc3QgKi8KLQkJICAgIHNlcCA9ICJcMDExIjsJLyogVGFiICovCi0J CSAgICBzcGVjaWFsY2hhciA9ICpzZXA7Ci0JCSAgICBncm91cGluZyA9IDA7CS8qIE5vIGdyb3Vw aW5nICovCi0JCX0gZWxzZQkJCS8qIE5vcm1hbCBjYXNlICovCi0JCSAgc2VwID0gYnBbMV07CQkv KiB1c2UgdGhlIHNlcGFyYXRvciBjaGFyIHNwZWNpZmllZCAqLwotCSAgICB9Ci0JfQotICAgICAg ICBpZiAoYXJnbiA+IDIgJiYgIWNzdiAmJiAhdHN2KSB7CS8qIEdyb3VwaW5nPyAqLwotICAgICAg ICAgICAgY2hhciAqIGJwMiA9IGJwWzJdOwotICAgICAgICAgICAgaWYgKCFicDIpIGJwMiA9ICIw IjsKLSAgICAgICAgICAgIGlmICghKmJwMikgYnAyID0gIjAiOwotICAgICAgICAgICAgaWYgKGNo a251bShicDIpKSB7Ci0gICAgICAgICAgICAgICAgZ3JvdXBpbmcgPSBhdG9pKGJwMik7Ci0gICAg ICAgICAgICAgICAgaWYgKGdyb3VwaW5nIDwgMCB8fCBncm91cGluZyA+IDYzKQotICAgICAgICAg ICAgICAgICAgZ3JvdXBpbmcgPSAxOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg ICAgICBmYWlsZWQgPSAxOwotICAgICAgICAgICAgICAgIGlmIChmbmRpYWdzKQotICAgICAgICAg ICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIjxFUlJPUjpBUkdfTk9UX05VTUVSSUM6XFxmIixmbiwiKCk+IixOVUxMKTsKLSAgICAgICAg ICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGdyb3Vw aW5nKSB7ICAgICAgICAgICAgIC8qIFRha2UgbG93ZXN0LW9yZGVyIG9uZSAqLwotICAgICAgICAg ICAgICAgIGludCBqLCBrOyAgICAgICAgICAgICAgIC8qIGFuZCBzZXQgdGhlIG90aGVycyB0byAw ICovCi0gICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IDY7IGsrKykgewotICAgICAgICAg ICAgICAgICAgICBqID0gMSA8PCBrOwotICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXBpbmcg JiBqKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsYlswXSA9IGdyX29wbltrXTsKLSAgICAg ICAgICAgICAgICAgICAgICAgIHJiWzBdID0gZ3JfY2xzW2tdOwotICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQlpZiAoIWNzdiAmJiAhdHN2KSB7CQkvKiBOb3JtYWwg Y2FzZSwgbm90IENTViBvciBUU1YgKi8KLQkgICAgc3BlY2lhbGNoYXIgPSBTUDsJCS8qIFNwZWNp YWwgY2hhcmFjdGVyIGlzIHNwYWNlICovCi0JICAgIGlmIChhcmduID4gMykJCS8qIE5vbnplcm8g NHRoIGFyZyBmb3Igbm8gc2VwYXJhdG9yICovCi0JICAgICAgaWYgKGNoa251bShicFszXSkpCi0J CWlmIChhdG9pKGJwWzNdKSA+IDApCi0JCSAgc2VwID0gTlVMTDsKLQkgICAgaWYgKCFzZXApIHsK LQkJc2VwID0gIiI7Ci0JCXNlcGxlbiA9IDA7Ci0JICAgIH0gZWxzZQotCSAgICAgIHNlcGxlbiA9 IHN0cmxlbihzZXApOwotCX0KLSAgICAgICAgZm9yIChpID0gbG87IGkgPD0gaGk7IGkrKykgeyAg ICAvKiBMb29wIHRocnUgc2VsZWN0ZWQgYXJyYXkgZWxlbWVudHMgKi8KLSAgICAgICAgICAgIHMg PSBhX3B0clt4XVtpXTsgICAgICAgICAgICAvKiBHZXQgbmV4dCBlbGVtZW50ICovCi0gICAgICAg ICAgICBpZiAoIXMpCi0gICAgICAgICAgICAgIHMgPSAiIjsKLSAgICAgICAgICAgIGZsYWcgPSAw OyAgICAgICAgICAgICAgICAgICAvKiBGbGFnIHRvIGluZGljYXRlIGdyb3VwaW5nIG5lZWRlZCAq LwotCSAgICBmbGFnMiA9IDA7CQkJLyogRmxhZyBmb3IgaW50ZXJuYWwgZG91YmxlcXVvdGVzICov Ci0gICAgICAgICAgICBpZiAoZ3JvdXBpbmcpIHsgICAgICAgICAgICAgLyogRG9lcyB0aGlzIGVs ZW1lbnQgbmVlZCBxdW90aW5nPyAqLwotICAgICAgICAgICAgICAgIHEgPSBzOyAgICAgICAgICAg ICAgICAgIC8qIExvb2sgZm9yIHNwZWNpYWwgY2hhcmFjdGVyICovCi0gICAgICAgICAgICAgICAg d2hpbGUgKChjID0gKnErKykpIHsJLyogSWYgZm91bmQgKi8KLQkJICAgIGlmIChjID09IHNwZWNp YWxjaGFyKSAvKiBncm91cGluZyBpcyByZXF1aXJlZCAqLwotCQkgICAgICBmbGFnKys7Ci0JCSAg ICBpZiAoY3N2ICYmIChjID09ICciJykpIC8qIENoYXJhY3RlciB0aGF0IG5lZWRzIGRvdWJsaW5n ICovCi0JCSAgICAgIGZsYWcyKys7CQkgICAvKiBpbiBjb21tYS1zZXBhcmF0ZWQgbGlzdCAqLwot CQkgICAgaWYgKGZsYWcgJiYgIWNzdikJLyogRXhpdCBlYXJseSBpZiBubyBtb3JlIHRvIGRvICov Ci0JCSAgICAgIGJyZWFrOwotCQl9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB5ID0gc3Ry bGVuKHMpOyAgICAgICAgICAgICAgLyogR2V0IGxlbmd0aCBvZiB0aGlzIGVsZW1lbnQgKi8KLQkg ICAgaWYgKCh5ID4gMCkgJiYgY3N2ICYmICFmbGFnKSB7IC8qIENTViBpdGVtIG5lZWRzIGdyb3Vw aW5nICovCi0JCWlmIChzWzBdID09IFNQIHx8IHNbeS0xXSA9PSBTUCB8fCAvKiBpZiBpdCBoYXMg bGVhZGluZyAqLwotCQkgICAgc1swXSA9PSBIVCB8fCBzW3ktMV0gPT0gSFQpCS8qIG9yIHRyYWls aW5nIHdoaXRlc3BhY2UgKi8KLQkJICBmbGFnKys7CQkvKiB0aGVuIGl0IG5lZWRzIGdyb3VwaW5n ICovCi0JICAgIH0KLQkgICAgaWYgKGZsYWcgfHwgZmxhZzIpIHsJLyogU3RyaW5nIG5lZWRzIGdy b3VwaW5nIG9yIHF1b3RpbmcgKi8KLQkJY2hhciAqc3MgPSBzOwotICAgICAgICAgICAgICAgIHEg PSAoY2hhciAqKW1hbGxvYyh5ICsgZmxhZzIgKyAzKTsgLyogTWFrZSBuZXcgYnVmZmVyICovCi0J CWlmIChxKSB7Ci0JCSAgICBzMiA9IHE7CQkvKiBhbmQgdGhpcyBpcyB3aGF0IHRvIGZyZWUgKi8K LQkJICAgIGlmIChmbGFnKQkJLyogSWYgZ3JvdXBpbmcgKi8KLQkJICAgICAgKnErKyA9IGxiWzBd OwkvKiBwdXQgb3BlbmluZyBncm91cCBxdW90ZSAqLwotCQkgICAgd2hpbGUgKCpzcykgewkvKiBM b29wIHRocm91Z2ggc3RyaW5nICovCi0JCQlpZiAoZmxhZzIgJiYgKCpzcyA9PSAnIicpKSAvKiBJ ZiBDU1YgYW5kIHRoaXMgYSAnIicgKi8KLQkJCSAgKnErKyA9ICpzczsJICAgICAgICAgICAvKiBk b3VibGUgaXQuICovCi0JCQkqcSsrID0gKnNzKys7CS8qIENvcHkgdGhlIGNoYXJhY3RlciAqLwot CQkgICAgfQotCQkgICAgaWYgKGZsYWcpCQkvKiBJZiBncm91cGluZyAqLwotCQkgICAgICAqcSsr ID0gcmJbMF07CS8qIGFkZCBjbG9zaW5nIGdyb3VwIHF1b3RlICovCi0JCSAgICAqcSA9IE5VTDsJ CS8qIHRlcm1pbmF0ZSB0aGUgcmVzdWx0LiAqLwotCQkgICAgcyA9IHMyOwotCQkgICAgeSA9IHN0 cmxlbihzKTsKLQkJfQotCSAgICB9Ci0gICAgICAgICAgICB6ID0gMDsgICAgICAgICAgICAgICAg ICAgICAgLyogTnVtYmVyIG9mIGNoYXJzIGNvcGllZCAqLwotICAgICAgICAgICAgZmxhZyA9IDA7 ICAgICAgICAgICAgICAgICAgIC8qIGZsYWcgaXMgbm93IGJ1ZmZlci1vdmVycnVuIGZsYWcgKi8K LSAgICAgICAgICAgIGlmICh5ID4gMCkgICAgICAgICAgICAgICAgICAvKiBJZiB0aGlzIHN0cmlu ZyBpcyBub3QgZW1wdHkgKi8KLSAgICAgICAgICAgICAgeiA9IGNrc3RybmNhdChmbnZhbCxzLEZO VkFMTCk7IC8qIGNvcHkgaXQuICovCi0JICAgIGlmIChzMikgZnJlZShzMik7CQkvKiBGcmVlIHRl bXAgc3RvcmFnZSAqLwotICAgICAgICAgICAgaWYgKHogPCB5KSAgICAgICAgICAgICAgICAgIC8q IE5vdyBjaGVjayBmb3IgYnVmZmVyIG92ZXJydW4uICovCi0gICAgICAgICAgICAgIGZsYWcrKzsK LSAgICAgICAgICAgIGlmICghZmxhZyAmJiAqc2VwICYmIGkgPCBoaSkgeyAvKiBJZiBidWZmZXIg c3RpbGwgaGFzIHJvb20gKi8KLSAgICAgICAgICAgICAgICB6ID0gY2tzdHJuY2F0KGZudmFsLHNl cCxGTlZBTEwpOyAvKiBjb3B5IGRlbGltaXRlciAqLwotICAgICAgICAgICAgICAgIGlmICh6IDwg c2VwbGVuKQotICAgICAgICAgICAgICAgICAgZmxhZysrOwotICAgICAgICAgICAgfQotICAgICAg ICAgICAgaWYgKGZsYWcpIHsKLSAgICAgICAgICAgICAgICBmYWlsZWQgPSAxOwotICAgICAgICAg ICAgICAgIGlmIChmbmRpYWdzKQotICAgICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5W QUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpSRVNVTFRfVE9PX0xPTkc6 XFxmIixmbiwiKCk+IixOVUxMKTsKLSAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOwotICAgICAg ICAgICAgfQotICAgICAgICB9Ci0JaXNqb2luID0gMTsKLSAgICAgICAgZ290byBmbmVuZDsKLSAg ICB9Ci0gICAgaWYgKGN4ID09IEZOX1NVQlNUKSB7ICAgICAgICAgICAgICAgLyogXGZzdWJzdGl0 dXRlKCkgKi8KLSAgICAgICAgQ0hBUiBjLCAqIHMsICogciwgKiB0cFsyXSwgYnVmMVsyNTZdLCBi dWYyWzI1Nl0sIGJ1ZjNbMjU2XTsKLSAgICAgICAgaW50IGxlbiwgaSwgaiwgc3RhdGUgPSAwLCBs byA9IDAsIGhpID0gMDsKLQotICAgICAgICBmYWlsZWQgPSAwOwotICAgICAgICBwID0gZm52YWw7 ICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc3VsdCBwb2ludGVyICovCi0gICAgICAgICpwID0g TlVMOwotICAgICAgICBpZiAoIWJwWzBdKSAgICAgICAgICAgICAgICAgICAgIC8qIE5vIHRhcmdl dCwgbm8gcmVzdWx0Ki8KLSAgICAgICAgICBnb3RvIGZuZW5kOwotCi0gICAgICAgIGxlbiA9IHN0 cmxlbihicFswXSk7ICAgICAgICAgICAgLyogTGVuZ3RoIG9mIHNvdXJjZSAqLwotICAgICAgICBp ZiAobGVuID09IDApCi0gICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgaWYgKGxlbiA+IEZO VkFMTCkgewotICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAgICAgIGlmIChmbmRpYWdz KQotICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAgICAgICAg ICAgICAgICI8RVJST1I6UkVTVUxUX1RPT19MT05HOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAg ICAgICAgICBnb3RvIGZuZW5kOwotICAgICAgICB9Ci0gICAgICAgIGlmICghYnBbMV0pIHsKLSAg ICAgICAgICAgIGNrc3RybmNweShicFswXSxmbnZhbCxGTlZBTEwpOwotICAgICAgICAgICAgZ290 byBmbmVuZDsKLSAgICAgICAgfQotICAgICAgICB0cFswXSA9IGJ1ZjE7ICAgICAgICAgICAgICAg ICAgIC8qIEZvciBzMi1zMyBpbnRlcnByZXRhdGlvbiBsb29wICovCi0gICAgICAgIHRwWzFdID0g YnVmMjsKLQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsgICAgIC8qIEluaXRp YWxpemUgd29ya2luZyBidWZmZXJzICovCi0gICAgICAgICAgICBidWYxW2ldID0gMDsgICAgICAg ICAgICAgICAgLyogczIgZXhwYW5zaW9uIGJ1ZmZlciAqLwotICAgICAgICAgICAgYnVmMltpXSA9 IDA7ICAgICAgICAgICAgICAgIC8qIHMzIGV4cGFuc2lvbiBidWZmZXIgKi8KLSAgICAgICAgICAg IGJ1ZjNbaV0gPSBpOyAgICAgICAgICAgICAgICAvKiBUcmFuc2xhdGlvbiB0YWJsZSAqLwotICAg ICAgICB9Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsgICAgICAgLyogSW50ZXJw cmV0IHMyIGFuZCBzMyAqLwotICAgICAgICAgICAgcyA9IChDSEFSICopYnBbaSsxXTsgICAgICAg IC8qIEFyZyBwb2ludGVyICovCi0gICAgICAgICAgICBpZiAoIXMpIHMgPSAoQ0hBUiAqKSIiOwot ICAgICAgICAgICAgciA9IHRwW2ldOyAgICAgICAgICAgICAgICAgIC8qIFRvIGNvbnN0cnVjdCBp bnRlcnByZXRlZCBhcmcgKi8KLSAgICAgICAgICAgIGogPSAwOyAgICAgICAgICAgICAgICAgICAg ICAvKiBPdXRwdXQgYnVmIHBvaW50ZXIgKi8KLSAgICAgICAgICAgIHN0YXRlID0gMDsgICAgICAg ICAgICAgICAgICAvKiBJbml0aWFsIHN0YXRlICovCi0gICAgICAgICAgICB3aGlsZSAoYyA9ICpz KyspIHsgICAgICAgICAgLyogTG9vcCB0aHJ1IGFyZyBjaGFycyAqLwotICAgICAgICAgICAgICAg IGlmIChqID4gMjU1KSAgICAgICAgICAgIC8qIE91dHB1dCBidWYgZnVsbCAqLwotICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAg ICAgICAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgIC8qIE5vcm1hbCBzdGF0ZSAqLwotICAg ICAgICAgICAgICAgICAgICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNl ICdcXCc6ICAgICAgICAvKiBIYXZlIHF1b3RlICovCi0gICAgICAgICAgICAgICAgICAgICAgICBz dGF0ZSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg ICAgICAgICBjYXNlICdbJzogICAgICAgICAvKiBIYXZlIHJhbmdlIHN0YXJ0ZXIgKi8KLSAgICAg ICAgICAgICAgICAgICAgICAgIHN0YXRlID0gMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgIC8qIEFueXRoaW5n IGVsc2UgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHJbaisrXSA9IGM7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgIGNhc2UgMTogICAgICAgICAgICAg ICAvKiBRdW90ZWQgY2hhciAqLwotICAgICAgICAgICAgICAgICAgICByW2orK10gPSBjOwotICAg ICAgICAgICAgICAgICAgICBzdGF0ZSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl OwotICAgICAgICAgICAgICAgICAgY2FzZSAyOiAgICAgICAgICAgICAgIC8qIFJhbmdlIGJvdHRv bSAqLwotICAgICAgICAgICAgICAgICAgICBsbyA9IGM7Ci0gICAgICAgICAgICAgICAgICAgIHN0 YXRlKys7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAg Y2FzZSAzOiAgICAgICAgICAgICAgIC8qIFJhbmdlIHNlcGFyYXRlciAqLwotICAgICAgICAgICAg ICAgICAgICBpZiAoYyAhPSAnLScpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9 IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm5kaWFncykKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiPEVSUk9SOkJBRF9SQU5HRTpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAg ICAgICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgICAgICBzdGF0ZSsrOwotICAgICAgICAgICAgICAgICAgICBjb250aW51 ZTsKLSAgICAgICAgICAgICAgICAgIGNhc2UgNDogICAgICAgICAgICAgICAvKiBSYW5nZSB0b3Ag Ki8KLSAgICAgICAgICAgICAgICAgICAgaGkgPSBjOwotICAgICAgICAgICAgICAgICAgICBzdGF0 ZSsrOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgIGNh c2UgNTogICAgICAgICAgICAgICAvKiBSYW5nZSBlbmQgKi8KLSAgICAgICAgICAgICAgICAgICAg aWYgKGMgIT0gJ10nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmYWlsZWQgPSAxOwotICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCi0gICAgICAgICAgICAgICAgICAgICAg ICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIjxFUlJPUjpCQURfUkFOR0U6XFxmIixmbiwiKCk+IixOVUxMKTsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICAgICAgZm9yIChrID0gbG87IGsgPD0gaGkgJiYgaiA8IDI1NTsgaysrKSAvKiBGaWxs IGluICovCi0gICAgICAgICAgICAgICAgICAgICAgcltqKytdID0gazsKLSAgICAgICAgICAgICAg ICAgICAgbG8gPSAwOyBoaSA9IDA7ICAgICAvKiBSZXNldCAqLwotICAgICAgICAgICAgICAgICAg ICBzdGF0ZSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwg MjU2ICYmIGJ1ZjFbaV07IGkrKykgeyAgLyogQ3JlYXRlIHRyYW5zbGF0aW9uIHRhYmxlICovCi0g ICAgICAgICAgICBrID0gKHVuc2lnbmVkKWJ1ZjFbaV07Ci0gICAgICAgICAgICBidWYzW2tdID0g YnVmMltpXTsKLSAgICAgICAgfQotICAgICAgICBzID0gKENIQVIgKilicFswXTsgICAgICAgICAg ICAgIC8qIFBvaW50IHRvIHNvdXJjZSBzdHJpbmcgKi8KLSAgICAgICAgZm9yIChpID0gMDsgaSA8 IGxlbjsgaSsrKSB7ICAgICAvKiBUcmFuc2xhdGlvbiBsb29wICovCi0gICAgICAgICAgICBrID0g KHVuc2lnbmVkKXNbaV07ICAgICAgICAgLyogR2V0IG5leHQgY2hhciAqLwotICAgICAgICAgICAg aWYgKCFidWYzW2tdKSAgICAgICAgICAgICAgIC8qIFJlbW92ZSB0aGlzIGNoYXIgKi8KLSAgICAg ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAqcCsrID0gYnVmM1trXTsgICAgICAgICAg ICAgLyogU3Vic3RpdHV0ZSB0aGlzIGNoYXIgKi8KLSAgICAgICAgfQotICAgICAgICAqcCA9IE5V TDsKLSAgICAgICAgcCA9IGZudmFsOwotICAgICAgICBnb3RvIGZuZW5kOwotICAgIH0KLQotI2lm bmRlZiBOT1NFWFAKLSAgICBpZiAoY3ggPT0gRk5fU0VYUCkgeyAgICAgICAgICAgICAgICAvKiBc ZnNleHByZXNzaW9uKGFyZzEpICovCi0gICAgICAgIGNoYXIgKiBwMjsKLSAgICAgICAgZnNleHBm bGFnKys7Ci0gICAgICAgIHAgPSAoYXJnbiA+IDApID8gZG9zZXhwKGJwWzBdKSA6ICIiOwotICAg ICAgICBmc2V4cGZsYWctLTsKLSAgICAgICAgcDIgPSBmbnZhbDsKLSAgICAgICAgd2hpbGUgKCgq cDIrKyA9ICpwKyspKSA7Ci0gICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgZ290byBmbmVuZDsK LSAgICB9Ci0jZW5kaWYgLyogTk9TRVhQICovCi0KLSAgICBpZiAoY3ggPT0gRk5fQ01EU1RLKSB7 ICAgICAgICAgICAgICAvKiBcZmNtZHN0YWNrKG4xLG4yKSAqLwotICAgICAgICBpbnQgaSwgaiwg azsKLSAgICAgICAgY2hhciAqIHM7Ci0KLSAgICAgICAgaWYgKGJwWzBdKQotICAgICAgICAgIHZh bDEgPSAqKGJwWzBdKSA/IGV2YWx4KGJwWzBdKSA6IGNraXRvYShjbWRsdmwpOwotICAgICAgICBl bHNlCi0gICAgICAgICAgdmFsMSA9IGNraXRvYShjbWRsdmwpOwotI2lmZGVmIENPTU1FTlQKLSAg ICAgICAgZnJlZShicFswXSk7ICAgICAgICAgICAgICAgICAgICAvKiAoZXZhbHgoKSBhbHdheXMg dXNlcyBzYW1lIGJ1ZmZlcikgKi8KLSAgICAgICAgYnBbMF0gPSBOVUxMOyAgICAgICAgICAgICAg ICAgICAvKiAobm90IGFueSBtb3JlISkgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAg IGZhaWxlZCA9IDE7Ci0gICAgICAgIGlmIChhcmduID4gMSkgewotI2lmZGVmIENPTU1FTlQKLSAg ICAgICAgICAgIG1ha2VzdHIoJihicFswXSksdmFsMSk7Ci0gICAgICAgICAgICB2YWwxID0gYnBb MF07Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgdmFsMiA9ICooYnBbMV0pID8g ZXZhbHgoYnBbMV0pIDogIjAiOwotICAgICAgICAgICAgaWYgKCEoY2hrbnVtKHZhbDEpICYmIGNo a251bSh2YWwyKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoZm5kaWFncykKLSAgICAgICAgICAg ICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICI8RVJST1I6QVJHX05PVF9OVU1FUklDOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAgICAg ICAgICAgZ290byBmbmVuZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAg ICAgICAgIHZhbDEgPSBja2l0b2EoY21kbHZsKTsKLSAgICAgICAgICAgIHZhbDIgPSAiMCI7Ci0g ICAgICAgIH0KLSAgICAgICAgaSA9IGF0b2kodmFsMSk7ICAgICAgICAgICAgICAgICAvKiBMZXZl bCAqLwotICAgICAgICBqID0gYXRvaSh2YWwyKTsgICAgICAgICAgICAgICAgIC8qIEZsYWdzICov Ci0gICAgICAgIGlmIChpIDwgMCB8fCBpID4gY21kbHZsKSB7Ci0gICAgICAgICAgICBpZiAoZm5k aWFncykKLSAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotICAgICAgICAgICAg ICAgICAgICAgICAiPEVSUk9SOkFSR19PVVRfT0ZfUkFOR0U6XFxmIixmbiwiKCk+IixOVUxMKTsK LSAgICAgICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgIH0KLSAgICAgICAgZmFpbGVkID0gMDsK LSAgICAgICAgcCA9IGZudmFsOwotICAgICAgICBrID0gY21kc3RrW2ldLnNyYzsgICAgICAgICAg ICAgIC8qIFdoYXQgKHByb21wdCwgZmlsZSwgbWFjcm8pICovCi0gICAgICAgIGlmIChqKSB7Ci0g ICAgICAgICAgICBja3N0cm5jcHkoZm52YWwsY2tpdG9hKGspLEZOVkFMTCk7Ci0gICAgICAgICAg ICBnb3RvIGZuZW5kOwotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAoaykgewotICAgICAgICAg IGNhc2UgQ01EX0tCOgotICAgICAgICAgICAgY2tzdHJuY3B5KGZudmFsLCIocHJvbXB0KSIsRk5W QUxMKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgQ01EX1RGOgotICAgICAg ICAgICAgcyA9IHRmbmFtW2NtZHN0a1tpXS5sdmxdOwotICAgICAgICAgICAgaWYgKCF6Zm5xZnAo cyxGTlZBTEwsZm52YWwpKQotICAgICAgICAgICAgICBja3N0cm5jcHkoZm52YWwscyxGTlZBTEwp OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBDTURfTUQ6Ci0gICAgICAgICAg ICBja3N0cm5jcHkoZm52YWwsbV9hcmdbY21kc3RrW2ldLmx2bF1bMF0sRk5WQUxMKTsKLSAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgfQotI2lm ZGVmIENLRkxPQVQKLSAgICBpZiAoY3ggPT0gRk5fRElGREFURSkgeyAgICAgICAgICAgICAvKiBc ZmRpZmZkYXRlcyhkMSxkMikgKi8KLSAgICAgICAgY2hhciAqIGQxLCAqIGQyOwotICAgICAgICBk MSA9IGJwWzBdID8gYnBbMF0gOiBja2RhdGUoKTsKLSAgICAgICAgZDIgPSBicFsxXSA/IGJwWzFd IDogY2tkYXRlKCk7Ci0gICAgICAgIHAgPSAoY2hhciAqKWNtZGlmZmRhdGUoZDEsZDIpOwotICAg ICAgICBpZiAoIXApIHsKLSAgICAgICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICBpZiAo Zm5kaWFncykgewotICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwiPEVSUk9S OkJBRF9EQVRFOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAgICAgICAgICAgcCA9IGZudmFs OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgfQot I2VuZGlmIC8qIENLRkxPQVQgKi8KLSAgICBpZiAoY3ggPT0gRk5fQ01QREFURSkgeyAgICAgICAg ICAgICAvKiBcZmNtZGRhdGVzKGQxLGQyKSAqLwotICAgICAgICBpbnQgeCA9IDA7Ci0gICAgICAg IGNoYXIgZDFbMThdLCBkMlsxOF0sICogZHA7Ci0gICAgICAgIGZhaWxlZCA9IDA7Ci0gICAgICAg IGQxWzBdID0gTlVMOwotICAgICAgICBkMlswXSA9IE5VTDsKLSAgICAgICAgcCA9IGZudmFsOwot ICAgICAgICBkcCA9IGNtY3Z0ZGF0ZShicFswXSwxKTsKLSAgICAgICAgaWYgKGRwKSB7Ci0gICAg ICAgICAgICBja3N0cm5jcHkoZDEsZHAsMTgpOwotICAgICAgICAgICAgaWYgKChkcCA9IGNtY3Z0 ZGF0ZShicFsxXSwxKSkpIHsKLSAgICAgICAgICAgICAgICBja3N0cm5jcHkoZDIsZHAsMTgpOwot ICAgICAgICAgICAgICAgIHggPSAxOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg IGlmICh4ID09IDApIHsKLSAgICAgICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICBpZiAo Zm5kaWFncykKLSAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLCI8RVJST1I6QkFE X0RBVEU6XFxmIixmbiwiKCk+IixOVUxMKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg IHggPSBzdHJjbXAoZDEsZDIpOwotICAgICAgICAgICAgaWYgKHggPiAwKQotICAgICAgICAgICAg ICB4ID0gMTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHggPCAwKQotICAgICAgICAgICAgICB4ID0g LTE7Ci0gICAgICAgICAgICBzcHJpbnRmKGZudmFsLCIlZCIseCk7Ci0gICAgICAgIH0KLSAgICAg ICAgZ290byBmbmVuZDsKLSAgICB9Ci0gICAgaWYgKGN4ID09IEZOX1RPR01UKSB7ICAgICAgICAg ICAgICAgLyogXGZ1dGNkYXRlKGQxKSAqLwotICAgICAgICBjaGFyICogZDEsICogZHA7Ci0gICAg ICAgIGNoYXIgZGF0ZWJ1ZlszMl07Ci0gICAgICAgIGNoYXIgZDJbMzJdOwotICAgICAgICBwID0g Zm52YWw7Ci0gICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgIGlmICgoZHAgPSBjbWN2dGRhdGUo YnBbMF0sMSkpKSB7IC8qIFRoZSBnaXZlbiBkYXRlICovCi0gICAgICAgICAgICBja3N0cm5jcHko ZGF0ZWJ1ZixkcCwxOCk7Ci0gICAgICAgICAgICBja3N0cm5jcHkoZDIsZHAsMTgpOyAgICAgICAg LyogbG9jYWwgdGltZSAqLwotICAgICAgICAgICAgY2tzdHJuY2F0KGRhdGVidWYsIloiLDE5KTsg IC8qIFNhbWUgdGltZSBHTVQgKi8KLSAgICAgICAgICAgIGlmICgoZHAgPSBjbWN2dGRhdGUoZGF0 ZWJ1ZiwxKSkpIC8qIGNvbnZlcnRlZCB0byBsb2NhbCB0aW1lICovCi0gICAgICAgICAgICAgIGNr c3RybmNweShkYXRlYnVmLGRwLDE4KTsKLSAgICAgICAgICAgIGlmICgocCA9IChjaGFyICopY21k aWZmZGF0ZShkMixkYXRlYnVmKSkpIHsgLyogR2V0IG9mZnNldCAqLwotICAgICAgICAgICAgICAg IGNrc3RybmNhdChkMixwLDMyKTsgICAgIC8qIEFwcGVuZCBvZmZzZXQgdG8gbG9jYWwgdGltZSAq LwotICAgICAgICAgICAgICAgIGlmICgoZHAgPSBjbWN2dGRhdGUoZDIsMSkpKSB7Ci0gICAgICAg ICAgICAgICAgICAgIGZhaWxlZCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShm bnZhbCxkcCxGTlZBTEwpOwotICAgICAgICAgICAgICAgICAgICBwID0gZm52YWw7Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChmYWlsZWQg JiYgZm5kaWFncykKLSAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsIjxFUlJPUjpCQURf REFURTpcXGYiLGZuLCIoKT4iLE5VTEwpOwotICAgICAgICBnb3RvIGZuZW5kOwotICAgIH0KLSAg ICBpZiAoY3ggPT0gRk5fREVMU0VDKSB7ICAgICAgICAgICAgICAvKiBcZmRlbHRhMnNlY3MoZGVs dGEtdGltZSkgKi8KLSAgICAgICAgbG9uZyBzZWNzOwotICAgICAgICBwID0gZm52YWw7Ci0gICAg ICAgIGlmICgoeCA9IGRlbHRhMnNlYyhicFswXSwmc2VjcykpIDwgMCkgewotICAgICAgICAgICAg ZmFpbGVkID0gMTsKLSAgICAgICAgICAgIGlmIChmbmRpYWdzKQotICAgICAgICAgICAgICBja21h a21zZyhmbnZhbCxGTlZBTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICh4ID09IC0xKSA/Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpCQURfREVMVEFfVElNRTpcXGYiIDoKLSAg ICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOk9WRVJGTE9XOlxcZiIsCi0gICAgICAgICAg ICAgICAgICAgICAgIGZuLAotICAgICAgICAgICAgICAgICAgICAgICAiKCk+IiwKLSAgICAgICAg ICAgICAgICAgICAgICAgTlVMTAotICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAg ICAgZ290byBmbmVuZDsKLSAgICAgICAgfQotICAgICAgICBzcHJpbnRmKHAsIiVsZCIsc2Vjcyk7 Ci0gICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgfQotICAgIGlmIChjeCA9PSBGTl9QQ19EVSkgewot ICAgICAgICBjaGFyIGMsICogcyA9IGJwWzBdOwotICAgICAgICBpZiAoIXMpIHMgPSAiIjsKLSAg ICAgICAgcCA9IGZudmFsOwotICAgICAgICB3aGlsZSAoKGMgPSAqcysrKSkgewotICAgICAgICAg ICAgaWYgKGMgPT0gJzonKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCpzICE9ICdcXCcpCi0gICAg ICAgICAgICAgICAgICAqcCsrID0gJy8nOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjID09ICdc XCcpIHsKLSAgICAgICAgICAgICAgICAqcCsrID0gJy8nOwotICAgICAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgICAgICAqcCsrID0gYzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg ICAgICAqcCA9IE5VTDsKLSAgICAgICAgcCA9IGZudmFsOwotICAgICAgICBnb3RvIGZuZW5kOwot ICAgIH0KLSAgICBpZiAoY3ggPT0gRk5fUENfVUQpIHsgICAgICAgICAgICAgICAvKiBVbml4IHRv IERPUyBwYXRoICovCi0gICAgICAgIGNoYXIgYywgKiBzID0gYnBbMF07Ci0gICAgICAgIGlmICgh cykgcyA9ICIiOwotICAgICAgICBpZiAoKnMgPT0gJ34nKSB7ICAgICAgICAgICAgICAgIC8qIFNr aXAgbGVhZGluZyB0aWxkZSAqLwotICAgICAgICAgICAgcysrOwotICAgICAgICAgICAgaWYgKCpz ID09ICcvJykKLSAgICAgICAgICAgICAgcysrOwotICAgICAgICB9Ci0gICAgICAgIHAgPSBmbnZh bDsKLSAgICAgICAgd2hpbGUgKChjID0gKnMrKykpCi0gICAgICAgICAgKnAgKysgPSAoYyA9PSAn LycpID8gJ1xcJyA6IGM7Ci0gICAgICAgICpwID0gTlVMOwotICAgICAgICBwID0gZm52YWw7Ci0g ICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgfQotICAgIGlmIChjeCA9PSBGTl9LV1ZBTCkgeyAgICAg ICAgICAgICAgIC8qIEtleXdvcmQ9VmFsdWUgKi8KLSAgICAgICAgcCA9IGRva3d2YWwoYnBbMF0s YnBbMV0/YnBbMV06Ij0iKTsKLSAgICAgICAgZ290byBmbmVuZDsKLSAgICB9Ci0jaWZkZWYgQ09N TUVOVAotLyogQ3V0ZSBpZGVhIGJ1dCBkb2Vzbid0IHdvcmsgKi8KLSAgICBpZiAoY3ggPT0gRk5f U0xFRVAgfHwgY3ggPT0gRk5fTVNMRUVQKSB7Ci0gICAgICAgIHAgPSAiIjsKLSAgICAgICAgaWYg KGNoa251bShicFswXSkpIHsKLSAgICAgICAgICAgIHggPSBhdG9pKGJwWzBdKTsKLSAgICAgICAg fSBlbHNlIHsKLSAgICAgICAgICAgIGZhaWxlZCA9IDE7Ci0gICAgICAgICAgICBpZiAoZm5kaWFn cykgewotICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAiPEVSUk9SOkFSR19OT1RfTlVNRVJJQzpcXGYiLGZuLCIoKT4iLE5VTEwp OwotICAgICAgICAgICAgICAgIHAgPSBmbnZhbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg IGdvdG8gZm5lbmQ7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGN4ID09IEZOX1NMRUVQKQotICAg ICAgICAgIHggKj0gMTAwMDsKLSAgICAgICAgbXNsZWVwKHgpOwotICAgICAgICBnb3RvIGZuZW5k OwotICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSNpZmRlZiBOVAotICAgIGlmIChjeCA9 PSBGTl9TTkFNRSkgewotICAgICAgICBHZXRTaG9ydFBhdGhOYW1lKGJwWzBdLGZudmFsLEZOVkFM TCk7Ci0gICAgICAgIGdvdG8gZm5lbmQ7Ci0gICAgfQotICAgIGlmIChjeCA9PSBGTl9MTkFNRSkg ewotICAgICAgICBja0dldExvbmdQYXRoTmFtZShicFswXSxmbnZhbCxGTlZBTEwpOwotICAgICAg ICBnb3RvIGZuZW5kOwotICAgIH0KLSNlbmRpZiAvKiBOVCAqLwotCi0vKgotICBcZmVtYWlsYWRk cmVzcygpOgotICBQaWNrcyB0aGUgZW1haWwgYWRkcmVzcyBvdXQgb2YgYW4gUkZDIDI4MjIgRnJv bTogb3IgU2VuZGVyOiBoZWFkZXIuCi0gIEFkZGVkIDI2IE5vdiAyMDA1LiAgSGFuZGxlcyBhbGwg Y29tbW9uLCBhbmQgc29tZSB1bmNvbW1vbiwgY2FzZXMgYnV0Ci0gIGRvZXNuJ3QgdG90YWxseSBi b3RoZXIgYWJvdXQgbmVzdGVkIGNvbW1lbnRzLiAgTmVlZGVkIHRoaXMgZm9yIGZldGNoaW5nCi0g IGVtYWlsIGZyb20gYSBQT1Agc2VydmVyIGFuZCB0aGVuIGNvbnN0cnVjdGluZyB0aGUgQlNEICJG cm9tICIgbGluZS4KLSAgV29ya3Mgd2l0aCBvciB3aXRob3V0IHRoZSAiRnJvbTogIiBvciAiU2Vu ZGVyOiAiIHRhZy4KLSovCi0gICAgaWYgKGN4ID09IEZOX0VNQUlMKSB7Ci0gICAgICAgIGNoYXIg YywgKiBzID0gYnBbMF0sICogczIsICogczMsICogYXAgPSAiIjsKLQlpbnQgaywgc3RhdGUgPSAw LCBxdW90ZSA9IDAsIGluZmllbGQgPSAwOwotCWludCBwYyA9IDA7CQkJLyogRm9yIG5lc3RlZCBj b21tZW50cyAqLwotICAgICAgICBpZiAoIXMpIHMgPSAiIjsKLQlpZiAoISpzKSBnb3RvIHhlbWFp bDsKLQotCWlmIChja2luZGV4KCJGcm9tOiAiLHMsMCwwLDApID09IDEpIHMgKz0gNTsKLQlpZiAo Y2tpbmRleCgiU2VuZGVyOiAiLHMsMCwwLDApID09IDEpIHMgKz0gNzsKLQotCWsgPSBzdHJsZW4o cyk7CQkJLyogU3RyaXAganVuayBmcm9tIGVuZCAqLwotCWlmIChrIDwgMSkgZ290byB4ZW1haWw7 Ci0Jay0tOwotCXdoaWxlIChrID49IDAgJiYgc1trXSA9PSBDUiB8fCBzW2tdID09IExGKQotCSAg c1trLS1dID0gTlVMOwotCXdoaWxlIChrID49IDAgJiYgc1trXSA9PSBTUCB8fCBzW2tdID09IEhU KQotCSAgc1trLS1dID0gTlVMOwotCWlmIChrID09IDApCi0JICBnb3RvIHhlbWFpbDsKLQotI2lm bmRlZiBDT01NRU5UCQkJICAgICAvKiBTaW1wbGUgbWV0aG9kIGlmIG5vdCAxMDAlIGZvb2xwcm9v ZiAqLwotCWsgPSAwOwotCWZvciAoczIgPSBzOyAqczI7IHMyKyspIHsJLyogRmluZCBhdC1zaWdu ICovCi0JICAgIGlmICgqczIgPT0gJ0AnKSB7Ci0JCWsrKzsJCQkvKiBJZiBtb3JlIHRoYW4gb25l IHVzZSByaWdodG1vc3QgKi8KLQkJczMgPSBzMjsKLQkgICAgfQotCX0KLQlpZiAoayA8IDEpCQkJ LyogTm8gYXQtc2lnbiAqLwotCSAgZ290byB4ZW1haWw7Ci0KLQlmb3IgKGFwID0gczMtMTsgYXAg Pj0gczsgYXAtLSkgeyAvKiBCYWNrIHVwIHRvIGJlZ2lubmluZyBvZiBhZGRyZXNzICovCi0JICAg IGlmIChpc3NwYWNlKCphcCkgfHwgKmFwID09ICc8JykgewotCQlhcCsrOwotIAkJYnJlYWs7Ci0J ICAgIH0KLQkgICAgaWYgKGFwID09IHMpCi0JICAgICAgYnJlYWs7Ci0JfQotCWZvciAoczIgPSBz MysxOyAqczI7IHMyKyspIHsJLyogRmluZCBlbmQgb2YgYWRkcmVzcyAqLwotCSAgICBpZiAoaXNz cGFjZSgqczIpIHx8ICpzMiA9PSAnPicpCi0JICAgICAgYnJlYWs7Ci0JfQotCSpzMi0tID0gTlVM OwotCWlmICgqYXAgPT0gJ1snICYmICpzMiA9PSAnXScpIHsJLyogSGFuZGxlIFtibGFoQGJsYWgu YmxhaF0gKi8KLQkgICAgYXArKzsKLQkgICAgKnMyID0gTlVMOwotCX0KLQlpZiAoIWNrc3RyY21w KGFwLCJtYWlsdG86Iiw3LDApKSAvKiBIYW5kbGUgbWFpbHRvOiBVUkxzICovCi0JICBhcCArPSA3 OwotCi0jZWxzZSAgLyogVG9vIGNvbXBsaWNhdGVkIGFuZCBlcnJvci1wcm9uZSAqLwotCi0JayA9 IDA7Ci0JZm9yIChzMiA9IHM7ICpzMjsgczIrKykgewkvKiBTdHJpcCBsZWFkaW5nIHdoaXRlc3Bh Y2UgKi8KLQkgICAgaWYgKCpzMiA9PSBTUCB8fCAqczIgPT0gSFQpIHsKLQkJayA9IDE7Ci0JCWJy ZWFrOwotCSAgICB9Ci0JfQotCWlmICghaykgewkJCS8qIFNpbXBsZSBhZGRyZXNzICovCi0JICAg IGFwID0gczsKLQkgICAgZ290byB4ZW1haWw7Ci0JfQotCWRvIHsJCQkJLyogTm90IHNpbXBsZSwg aGF2ZSB0byBleHRyYWN0IGl0ICovCi0JICAgIGlmIChxdW90ZSkgewotCQlxdW90ZSA9IDA7Ci0J CWNvbnRpbnVlOwotCSAgICB9IGVsc2UgaWYgKCpzID09ICdcXCcpIHsKLQkJcXVvdGUgPSAxOwot CQljb250aW51ZTsKLQkgICAgfQotCSAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0JICAgICAgY2FzZSAw OgotCQlpZiAoIWluZmllbGQgJiYgKnMgPT0gJyInKSB7IC8qIFF1b3RlZCBzdHJpbmcgKi8KLQkJ ICAgIGluZmllbGQgPSAxOwotCQkgICAgYyA9ICciJzsKLQkJICAgIHN0YXRlID0gMTsKLQkJfSBl bHNlIGlmICghaW5maWVsZCAmJiAqcyA9PSAnKCcpIHsgLyogQ29tbWVudCBpbiBwYXJlbnMgKi8K LQkJICAgIHBjKys7Ci0JCSAgICBpbmZpZWxkID0gMTsKLQkJICAgIGMgPSAnKSc7Ci0JCSAgICBp ZiAoKmFwKSAqcyA9IE5VTDsKLQkJICAgIHN0YXRlID0gMTsKLQkJfSBlbHNlIGlmICghaW5maWVs ZCAmJiAqcyA9PSAnPCcpIHsgLyogQWRkcmVzcyAqLwotCQkgICAgaW5maWVsZCA9IDE7Ci0JCSAg ICBjID0gJz4nOwotCQkgICAgYXAgPSBzKzE7Ci0JCSAgICBzdGF0ZSA9IDI7Ci0JCX0gZWxzZSBp ZiAoaW5maWVsZCAmJiAoKnMgPT0gU1AgfHwgKnMgPT0gSFQpKSB7Ci0JCSAgICBpbmZpZWxkID0g MDsKLQkJfSBlbHNlIHsJCS8qIE9uZSBvciBtb3JlIGJhcmUgd29yZHMgKi8KLQkJICAgIGluZmll bGQgPSAxOwkvKiBDb3VsZCBiZSBhbiBhZGRyZXNzICovCi0JCSAgICBpZiAoISphcCkgYXAgPSBz OwkvKiBDb3VsZCBiZSBjb21tZW50cyAqLwotCQl9Ci0JCWNvbnRpbnVlOwotCSAgICAgIGNhc2Ug MToJCQkvKiBJbiBRdW90ZWQgc3RyaW5nIG9yIENvbW1lbnQgKi8KLQkJaWYgKGluZmllbGQgJiYg KnMgPT0gYykgeyAvKiBMb29rIGZvciBlbmQgKi8KLQkJICAgIGluZmllbGQgPSAwOwotCQkgICAg KnMrKyA9IE5VTDsKLQkJICAgIHdoaWxlICgqcyA9PSBTUCB8fCAqcyA9PSBIVCkgcysrOwotCQkg ICAgaWYgKCEqYXApCi0JCSAgICAgIGFwID0gczsKLQkJICAgIHN0YXRlID0gMDsKLQkJfQotCQlj b250aW51ZTsKLQkgICAgICBjYXNlIDI6CQkJLyogSW4gYWRkcmVzcyAqLwotCQlpZiAoaW5maWVs ZCAmJiAqcyA9PSBjKSB7IC8qIExvb2tpbmcgZm9yIGVuZCAqLwotCQkgICAgaW5maWVsZCA9IDA7 Ci0JCSAgICAqcyA9IE5VTDsKLQkJICAgIGJyZWFrOwotCQl9Ci0JICAgIH0KLQl9IHdoaWxlICgq cysrKTsKLQotICAgICAgeGVtYWlsOgotCWlmICgqYXApIHsKLQkgICAgd2hpbGUgKCphcCA9PSBT UCB8fCAqYXAgPT0gSFQpIGFwKys7Ci0JfQotCWsgPSBzdHJsZW4oYXApIC0gMTsKLQl3aGlsZSAo ayA+PSAwICYmIChhcFtrXSA9PSBTUCB8fCBhcFtrXSA9PSBIVCkpCi0JICBhcFtrLS1dID0gTlVM OwotCWlmICgqYXApIHsKLQkgICAgZmFpbGVkID0gMDsKLQkgICAgaWYgKCphcCA9PSAnPCcpIHsK LQkJayA9IHN0cmxlbihhcCk7Ci0JCWlmICgqKGFwK2stMSkgPT0gJz4nKSB7Ci0JCSAgICBhcFtr LTFdID0gTlVMOwotCQkgICAgYXArKzsKLQkJfQotCSAgICB9Ci0JfSBlbHNlCi0JICBmYWlsZWQg PSAxOwotCS8qIEhlcmUgd2UgbWlnaHQgYWxzbyB3YW50IGNoZWNrIGFnYWluc3QgIipAKi4qIiAq LwotI2VuZGlmCS8qIENPTU1FTnQgKi8KLSAgICAgIHhlbWFpbDoKLQlja3N0cm5jcHkoZm52YWws YXAsRk5WQUxMKTsKLQlnb3RvIGZuZW5kOwotICAgIH0KLQotI2lmZGVmIFNFRUtfQ1VSCi0vKgot ICAgXGZwaWN0dXJlKCk6ICAgR2V0IGRpbWVuc2lvbnMgb2YgR0lGIG9yIEpQRyBpbWFnZS4KLSAg IGZkYyBKdW5lIDIwMDYKLSovCi0gICAgaWYgKGN4ID09IEZOX1BJQ1RVUkUpIHsKLQlGSUxFICpm cCA9IE5VTEw7Ci0JaW50IGMsIHgsIHcgPSAwLCBoID0gMCwgZW9mID0gMDsKLQl1bnNpZ25lZCBp bnQgaSwgaiwgazsKLQl1bnNpZ25lZCBjaGFyIGJ1ZlsxMDI0XTsKLQljaGFyIGFidWZbMTZdLCAq IHAsICogczsKLQljaGFyICoqIGFwID0gTlVMTDsKLQotCXAgPSBmbnZhbDsJCQkvKiBQb2ludCB0 byByZXN1bHQgKi8KLQlmYWlsZWQgPSAxOwkJCS8qIEFzc3VtZSBmYWlsdXJlICovCi0JaWYgKGFy Z24gPiAxKSB7Ci0JICAgIGludCB4aTsKLQkgICAgY2tzdHJuY3B5KGFidWYsYnBbMV0sMTYpOwkv KiBHZXQgYXJyYXkgcmVmZXJlbmNlICovCi0JICAgIHMgPSBhYnVmOwotCSAgICBpZiAoKnMgPT0g Q01EUSkgcysrOwotCSAgICBpZiAoZm5kaWFncykJCS8qIERlZmF1bHQgaXMgdGhpcyBlcnJvciBt ZXNzYWdlICovCi0JICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAotCQkgICAgICAgIjxFUlJP UjpBUkdfQkFEX0FSUkFZOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0JICAgIGlmIChzWzBdICE9ICcm JykJCS8qICJBZGRyZXNzIiBvZiBhcnJheSAqLwotCSAgICAgIGdvdG8gZm5lbmQ7Ci0JICAgIGlm IChzWzJdKQotCSAgICAgIGlmIChzWzJdICE9ICdbJyB8fCBzWzNdICE9ICddJykKLQkJZ290byBm bmVuZDsKLQkgICAgaWYgKHNbMV0gPj0gNjQgJiYgc1sxXSA8IDkxKSAvKiBDb252ZXJ0IHVwcGVy IHRvIGxvd2VyICovCi0JICAgICAgc1sxXSArPSAzMjsKLQkgICAgaWYgKCh4aSA9IGRjbGFycmF5 KHNbMV0sMikpIDwgMCkgLyogVHdvIGVsZW1lbnRzICovCi0JICAgICAgZ290byBmbmVuZDsKLQkg ICAgYXAgPSBhX3B0clt4aV07CQkvKiBQb2ludCB0byBhcnJheSB3ZSBqdXN0IGRlY2xhcmVkICov Ci0JfQotCXMgPSBicFswXTsJCQkvKiBGaWxlbmFtZSAqLwotCWZhaWxlZCA9IDA7CQkJLyogRnJv bSBoZXJlIG9uIHdlIGRvbid0IGZhaWwgKi8KLQlwWzBdID0gJzAnOwkJCS8qIERlZmF1bHQgcmV0 dXJuIHZhbHVlICovCi0JcFsxXSA9IE5VTDsKLQlpZiAoIWNrbWF0Y2goIioue2pwZyxqcGVnLGdp Zn0kIixzLDAsMSs0KSkgLyogQXBwcm9wcmlhdGUgbmFtZT8gKi8KLQkgIGdvdG8gZm5lbmQ7CQkJ LyogTm8sIGZhaWwgKi8KLQlmcCA9IGZvcGVuKHMsICJyIik7CQkvKiBPcGVuIGl0ICovCi0JaWYg KGZwID09IE5VTEwpIHsJCS8qIENhbid0LCBmYWlsICovCi0JICAgIHBbMF0gPSAnLSc7Ci0JICAg IHBbMV0gPSAnMSc7Ci0JICAgIHBbMl0gPSBOVUw7CQkJLyogUmV0dXJuIC0xICovCi0JICAgIGdv dG8gZm5lbmQ7Ci0JfQotCWsgPSBzdHJsZW4ocyk7Ci0JaWYgKCFja3N0cmNtcCgmc1trLTRdLCIu Z2lmIiw0LDApKSB7IC8qIEdJRiBmaWxlICovCi0JICAgIGlmIChmcmVhZChidWYsMSwxMCxmcCkg IT0gMTApIHsKLQkJZmNsb3NlKGZwKTsKLQkJZ290byBmbmVuZDsKLQkgICAgfQotCSAgICAvKiBD aGVjayBzaWduYXR1cmUgKi8KLQkgICAgaWYgKGNrc3RyY21wKChjaGFyICopYnVmLCJHSUY4N2Ei LDYsMCkgJiYKLQkJY2tzdHJjbXAoKGNoYXIgKilidWYsIkdJRjg5YSIsNiwwKSkgewotCQlmY2xv c2UoZnApOwotCQlnb3RvIGZuZW5kOwotCSAgICB9Ci0JICAgIHcgPSBidWZbNl0gKyAyNTYgKiBi dWZbN107Ci0JICAgIGggPSBidWZbOF0gKyAyNTYgKiBidWZbOV07Ci0JICAgIGdvdG8gcGljZW5k OwotCX0gZWxzZSBpZiAoIWNrc3RyY21wKCZzW2stNF0sIi5qcGciLDQsMCkgfHwgLyogSlBFRyBm aWxlICovCi0JCSAgICFja3N0cmNtcCgmc1trLTVdLCIuanBlZyIsNSwwKSkgewotCSAgICBpZiAo ZnJlYWQoYnVmLDEsMixmcCkgIT0gMikgewotCQlmY2xvc2UoZnApOwotCQlnb3RvIGZuZW5kOwot CSAgICB9Ci0JICAgIGlmIChidWZbMF0gIT0gMHhmZiB8fCBidWZbMV0gIT0gMHhkOCkgeyAvKiBD aGVjayBzaWduYXR1cmUgKi8KLQkJZmNsb3NlKGZwKTsKLQkJZ290byBmbmVuZDsKLQkgICAgfQot CSAgICBlb2YgPSAwOwotCSAgICB3aGlsZSAoIWVvZikgewkJLyogTG9vcCBmb3IgZWFjaCBtYXJr ZXIgKi8KLQkJd2hpbGUgKCFlb2YpIHsJCS8qIEZpbmQgbmV4dCBtYXJrZXIgKi8KLQkJICAgIGMg PSBnZXRjKGZwKTsKLQkJICAgIGlmIChjID09ICh1bnNpZ25lZCBpbnQpRU9GKSB7Ci0JCQllb2Yr KzsKLQkJCWJyZWFrOwotCQkgICAgfQotCQkgICAgaWYgKGMgPT0gMHhmZikgewotCQkJYnVmWzBd ID0gYzsKLQkJCWMgPSBnZXRjKGZwKTsKLQkJCWlmIChjID09ICh1bnNpZ25lZCBpbnQpRU9GKSB7 Ci0JCQkgICAgZW9mKys7Ci0JCQkgICAgYnJlYWs7Ci0JCQl9Ci0JCQlidWZbMV0gPSBjOwotCQkJ aWYgKGMgPT0gMHhkOSkKLQkJCSAgZW9mKys7Ci0JCQlpZiAoYyA+PSAweGMwICYmIGMgPD0gMHhm ZSkKLQkJCSAgYnJlYWs7Ci0JCSAgICB9Ci0JCX0KLQkJaWYgKGVvZikgYnJlYWs7Ci0JCXggPSBi dWZbMV07Ci0JCWlmICh4ID09IDB4YzAgfHwgeCA9PSAweGMxIHx8IHggPT0gMHhjMiB8fCB4ID09 IDB4YzMgfHwKLQkJICAgIHggPT0gMHhjOSB8fCB4ID09IDB4Y2EgfHwgeCA9PSAweGNiKSB7Ci0J CSAgICBpZiAoZnJlYWQoYnVmLDEsNyxmcCkgIT0gNykgewotCQkJZmNsb3NlKGZwKTsKLQkJCWdv dG8gZm5lbmQ7Ci0JCSAgICB9Ci0JCSAgICBoID0gYnVmWzNdICogMjU2ICsgYnVmWzRdOwotCQkg ICAgdyA9IGJ1Zls1XSAqIDI1NiArIGJ1Zls2XTsKLQkJICAgIGdvdG8gcGljZW5kOwotCQl9IGVs c2UgewkJLyogTm90IGEgZGVzaXJlZCBmaWVsZCAqLwotCQkgICAgaWYgKGZlb2YoZnApKSB7Ci0J CQllb2YrKzsKLQkJCWJyZWFrOwotCQkgICAgfQotCQkgICAgaWYgKGZyZWFkKGJ1ZiwxLDIsZnAp ICE9IDIpIHsgLyogTGVuZ3RoIG9mIHRoaXMgZmllbGQgKi8KLQkJCWZjbG9zZShmcCk7Ci0JCQln b3RvIGZuZW5kOwotCQkgICAgfQotCQkgICAgaiA9IDI1NiAqIGJ1ZlswXSArIGJ1ZlsxXSAtIDI7 IC8qIFNraXAgbmV4dCBmaWVsZCAqLwotCQkgICAgaWYgKENLRlNFRUsoZnAsKENLX09GRl9UKWos U0VFS19DVVIpICE9IDApIHsKLQkJCWZjbG9zZShmcCk7Ci0JCQlnb3RvIGZuZW5kOwotCQkgICAg fQotCQl9Ci0JICAgIH0gCi0JfQotICAgICAgcGljZW5kOgotCWZjbG9zZShmcCk7Ci0JaWYgKGFw KSB7Ci0JICAgIG1ha2VzdHIoJihhcFswXSksIjIiKTsKLQkgICAgbWFrZXN0cigmKGFwWzFdKSxj a2l0b2EodykpOwotCSAgICBtYWtlc3RyKCYoYXBbMl0pLGNraXRvYShoKSk7Ci0JfQotCWlmICh3 ID4gMCAmJiBoID4gMCkgewotCSAgICBpZiAodyA+IGgpIHBbMF0gPSAnMSc7Ci0JICAgIGlmICho ID49IHcpIHBbMF0gPSAnMic7Ci0JfQotCWdvdG8gZm5lbmQ7Ci0gICAgfQotI2VuZGlmCS8qIFNF RUtfQ1VSICovCi0KLSAgICBpZiAoY3ggPT0gRk5fUElEKSB7Ci0JaW50IHggPSAtMTsKLQlpZiAo Y2hrbnVtKGJwWzBdKSkgewkJLyogTmVlZCBudW1lcmljIGFyZ3VtZW50ICovCi0JICAgIGludCBw aWQ7Ci0JICAgIHBpZCA9IGF0b2koYnBbMF0pOwkJLyogQ29udmVydCB0byBpbnQgKi8KLSNpZmRl ZiBVTklYCi0JICAgIGlmIChraWxsKHBpZCwwKSA8IDApIHsJLyogVGVzdCBpdCAqLwotCQlpZiAo ZXJybm8gPT0KLSNpZmRlZiBFU1JDSAotCQkgICAgRVNSQ0gJCS8qIE5vIHN1Y2ggcHJvY2VzcyAq LwotI2Vsc2UKLQkJICAgIDMKLSNlbmRpZgkvKiBFU1JDSCAqLwotCQkgICAgKQotCQkgIHggPSAw OwotCSAgICB9IGVsc2UJCQkvKiBQcm9jZXNzIGV4aXN0cyAqLwotCSAgICAgIHggPSAxOwotI2Vu ZGlmCS8qIFVOSVggKi8KLQl9Ci0Jc3ByaW50ZihmbnZhbCwiJWQiLHgpOwkJLyogU0FGRSAqLwot CWdvdG8gZm5lbmQ7Ci0gICAgfQotCi0gICAgaWYgKGN4ID09IEZOX0ZVTkMpIHsKLQljaGFyICog cyA9IGJwWzBdOwotCXAgPSAiMCI7Ci0gICAgICAgIGRlYnVnKEYxMTEsImZmdW5jIixzLGFyZ24p OwotCWlmIChhcmduID4gMCkgewotCSAgICBpbnQgeCwgeTsKLQkgICAgZm9yIChwID0gczsgKnA7 IHArKykgewkvKiBDaG9wIG9mZiB0cmFpbGluZyBwYXJlbnMgaWYgYW55ICovCi0JCWlmICgqcCA9 PSAnKCcpIHsKLQkJICAgICpwID0gTlVMOwotCQkgICAgYnJlYWs7Ci0JCX0KLQkgICAgfQotCSAg ICAvKiBDaG9wIG9mZiBsZWFkaW5nICJcXGYiIG9yICJcZiIgb3IgImYiICovCi0JICAgIHAgPSBz OwotCSAgICBpZiAoKnAgPT0gQ01EUSkJCS8qIEFsbG93IGZvciBcXGYuLi4gKi8KLQkgICAgICBw Kys7Ci0JICAgIGlmICgqcCA9PSBDTURRICYmICgqKHArMSkgPT0gJ2YnIHx8ICoocCsxKSA9PSAn RicpKSB7IC8qIG9yIFxmICovCi0JCXAgKz0gMjsKLQkgICAgfSBlbHNlIGlmICgqcCA9PSAnZicg fHwgKnAgPT0gJ0YnKSB7IC8qIG9yIGp1c3QgZiAqLwotCQlwKys7Ci0JICAgIH0KLQkgICAgeSA9 IGxvb2t1cChmbmN0YWIscCxuZnVuY3MsJngpOyAvKiBMb29rIHVwIHRoZSByZXN1bHQgKi8KLQkg ICAgZGVidWcoRjExMSwiZmZ1bmMiLHAseSk7Ci0JICAgIHAgPSAoeSA+IC0xKSA/ICIxIiA6ICIw IjsKLQl9Ci0JZ290byBmbmVuZDsKLSAgICB9Ci0gICAgaWYgKGN4ID09IEZOX1JFQ1VSU0UpIHsK LQlpbnQgdCwgbjsKLQljaGFyICogczsKLQlmbnZhbFswXSA9IE5VTDsJCQkvKiBEZWZhdWx0IHJl c3VsdCBpcyBlbXB0eSBzdHJpbmcgKi8KLQlzID0gYnBbMF07CQkJLyogQ2hlY2sgZm9yIG51bGwg YXJndW1lbnQgKi8KLQlpZiAoIXMpIHMgPSAiIjsJCQkvKiBvciBlbXB0eSBhcmd1bWVudCAqLwot CWlmICghKnMpIGdvdG8gZm5lbmQ7CQkvKiBpbiB3aGljaCBjYXNlIHJldHVybiBlbXB0eSBzdHJp bmcgKi8KLSAgICAgICAgbiA9IEZOVkFMTDsJCQkvKiBOb3QgZW1wdHksIG1heCBzaXplIGZvciBy ZXN1bHQgKi8KLSAgICAgICAgcyA9IGZudmFsOwkJCS8qIExvY2F0aW9uIG9mIHJlc3VsdCAqLwot CXsKLQkgICAgLyogRm9yY2UgVkFSSUFCTEUtRVZBTFVBVElPTiBTSU1QTEUgUkVDVVJTSVZFICov Ci0JICAgIC8qIE5PVEU6IFRoaXMgaXMgdnVsbmVyYWJsZSB0byBTSUdJTlQgYW5kIHdoYXRub3Qu Li4gKi8KLQkgICAgaW50IHRtcCA9IHZhcmV2YWw7CQkvKiBTYXZlIFZBUklBQkxFLUVWQUxVQVRJ T04gc2V0dGluZyAqLwotCSAgICB2YXJldmFsID0gMTsJCS8qIEZvcmNlIGl0IHRvIFJFQ1VSU0lW RSAqLwotCSAgICB6enN0cmluZyhicFswXSwmcywmbik7CS8qIEV4cGFuZCBhcmcgaW50byByZXN1 bHQgc3BhY2UgKi8gCi0JICAgIHZhcmV2YWwgPSB0bXA7CQkvKiBSZXN0b3JlIFZBUklBQkxFLUVW QUxVQVRJT04gKi8KLQl9Ci0JZ290byBmbmVuZDsKLSAgICB9Ci0KLSAgICBpZiAoY3ggPT0gRk5f WExBVEUpIHsJCS8qIGZfY3Z0Y3NldCgpICovCi0jaWZkZWYgTk9GUklMTFMKLQlja3N0cm5jcHko Zm52YWwsYnBbMF0sRk5WQUxMKTsJCi0jZWxzZQotI2lmbmRlZiBOT1VOSUNPREUKLQlfUFJPVE9U WVAoIGNoYXIgKiBjdnRzdHJpbmcsIChjaGFyICosIGludCwgaW50KSApOwotICAgICAgICBjaGFy ICogc3RyaW5nLCAqIGNzZXQxLCAqIGNzZXQyOwotCWludCBpZDEsIGlkMjsKLSNlbmRpZgkvKiBO T1VOSUNPREUgKi8KLSAgICAgICAgZm52YWxbMF0gPSBOVUw7CQotI2lmZGVmIE5PVU5JQ09ERQot CWNrc3RybmNweShmbnZhbCxicFswXSxGTlZBTEwpOwkKLSNlbHNlCi0gICAgICAgIHN0cmluZyA9 IGJwWzBdID8gYnBbMF0gOiAiIjsJLyogU3RyaW5nIHRvIGNvbnZlcnQgKi8KLQlpZiAoISpzdHJp bmcpIGdvdG8gZm5lbmQ7CS8qIEl0J3MgZW1wdHkgKi8KLQotICAgICAgICBjc2V0MSA9IGJwWzFd ID8gYnBbMV0gOiAiYXNjaWkiOyAvKiBDdXJyZW50IGNoYXJzZXQgb2Ygc3RyaW5nICovCi0gICAg ICAgIGNzZXQyID0gYnBbMl0gPyBicFsyXSA6ICJhc2NpaSI7IC8qIENoYXJzZXQgdG8gY29udmVy dCB0byAqLwotCi0JaWQxID0gbG9va3VwKGZjc3RhYixjc2V0MSxuZmlsYyxOVUxMKTsgLyogTG9v a3VwICdmcm9tJyBzZXQgKi8KLQlpZiAoaWQxIDwgMCkgewotICAgICAgICAgICAgZmFpbGVkID0g MTsKLQkgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLCI8RVJST1I6VU5LTk9XTl9DSEFSU0VUOlxc ZiIsZm4sIigpPiIsTlVMTCk7Ci0JICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgIH0KLQlpZDIgPSBs b29rdXAoZmNzdGFiLGNzZXQyLG5maWxjLE5VTEwpOyAvKiBMb29rdXAgJ3RvJyBzZXQgKi8KLQlp ZiAoaWQyIDwgMCkgewotICAgICAgICAgICAgZmFpbGVkID0gMTsKLQkgICAgY2ttYWttc2coZm52 YWwsRk5WQUxMLCI8RVJST1I6VU5LTk9XTl9DSEFSU0VUOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0J ICAgIGdvdG8gZm5lbmQ7Ci0gICAgICAgIH0KLQlzdHJpbmcgPSBjdnRzdHJpbmcoc3RyaW5nLGlk MSxpZDIpOwotCWNrc3RybmNweShmbnZhbCxzdHJpbmcsRk5WQUxMKTsKLSNlbmRpZgkvKiBOT1VO SUNPREUgKi8KLSNlbmRpZgkvKiBOT0ZSSUxMUyAqLwotCWdvdG8gZm5lbmQ7Ci0gICAgfQotCi0v KiBEZWNvZGUgc3RyaW5ncyBjb250YWluaW5nIGhleCBlc2NhcGVzICovCi0KLSAgICBpZiAoY3gg PT0gRk5fVU5QQ1QpIHsJCS8qIFxmZGVjb2RlaGV4KCkgKi8KLSAgICAgICAgY2hhciAqczEsICpz MjsKLQljaGFyICpwcmVmaXg7CQkJLyogQ2FuIGJlIDEgb3IgMiBjaGFycyAqLwotCWNoYXIgYnVm WzNdOwotCWludCBuID0gMCwgazsKLQotCXAgPSBmbnZhbDsKLQkqcCA9IE5VTDsKLSAgICAgICAg aWYgKGFyZ24gPCAxKSBnb3RvIGZuZW5kOwkvKiBFbXB0eSBzdHJpbmcgKi8KLQotCXMxID0gYnBb MF0gPyBicFswXSA6ICIiOwkvKiBPcmlnaW5hbCBzdHJpbmcgKi8KLQlwcmVmaXggPSBicFsxXSA/ IGJwWzFdIDogIiUlIjsJLyogSGV4IGJ5dGUgcHJlZml4ICovCi0JbiA9IChpbnQpc3RybGVuKHBy ZWZpeCk7CS8qIExlbmd0aCBvZiBwcmVmaXggKi8KLQlpZiAobiA8IDEgfHwgbiA+IDIpIHsJCS8q IG11c3QgYmUgMSBvciAyICovCi0JICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKLQkJICAgICAg ICI8RVJST1I6SU5WQUxJRF9IRVhfUFJFRklYOlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0JICAgIGdv dG8geHVucGN0OwotCX0KLSAgICAgICAgd2hpbGUgKCpzMSkgewotCSAgICBpZiAoIWNrc3RyY21w KHMxLHByZWZpeCxuLDApKSB7IC8qIENhc2UtaW5kZXBlbmRlbnQgKi8KLQkJaWYgKCEqKHMxK24p KSB7Ci0JCSAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCi0JCQkgICAgICI8RVJST1I6SU5DT01Q TEVURV9TRVFVRU5DRTpcXGYiLGZuLCIoKT4iLE5VTEwpOwotCQkgICAgZ290byB4dW5wY3Q7Ci0J CX0KLQkJYnVmWzBdID0gKihzMStuKTsJLyogRmlyc3QgaGV4IGNoYXJhY3RlciAqLwotCQlidWZb MV0gPSAqKHMxK24rMSk7CS8qIFNlY29uZCBoZXggY2hhcmFjdGVyICovCi0JCWJ1ZlsyXSA9IE5V TDsKLQkJaWYgKChrID0gY2toZXhieXRldG9pbnQoKGNoYXIgKilidWYpKSA+IC0xKSB7Ci0JCSAg ICAqcCsrID0gKGNoYXIpIGs7CS8qIERlcG9zaXQgZGVjb2RlZCByZXN1bHQgKi8KLQkJICAgIHMx ICs9IDIrbjsJCS8qIGFuZCBhZHZhbmNlIHRoZSBzb3VyY2UgcG9pbnRlciAqLwotCQl9IGVsc2Ug ewkJLyogRmFpbCBvbiBjb252ZXJzaW9uIGVycm9yICovCi0JCSAgICBja21ha21zZyhmbnZhbCxG TlZBTEwsCi0JCQkgICAgICI8RVJST1I6Tk9OX0hFWF9DSEFSUzpcXGYiLGZuLCIoKT4iLE5VTEwp OwotCQkgICAgZ290byB4dW5wY3Q7Ci0JCX0KLQkgICAgfSBlbHNlIHsJCQkvKiBOb3QgYSBoZXgg ZXNjYXBlIHNlcXVlbmNlICovCi0JCSpwKysgPSAqczErKzsJCS8qIEp1c3QgY29weSB0aGUgY2hh cmFjdGVyICovCi0JICAgIH0KLSAgICAgICAgfQotCSpwID0gTlVMOwkJCS8qIFRlcm1pbmF0ZSB0 aGUgcmVzdWx0IHN0cmluZyAqLwotICAgICAgICBmYWlsZWQgPSAwOwkJCS8qIFNheSB3ZSBkaWRu J3QgZmFpbCAqLwotICAgICAgICBwID0gZm52YWw7CQkJLyogU2V0IHVwIHJlc3VsdCBwb2ludGVy ICovCi0gICAgICAgIGdvdG8gZm5lbmQ7CQkJLyogYW5kIGZpbmlzaCAqLwotCi0gICAgICB4dW5w Y3Q6CQkJCS8qIEVycm9yIGV4aXQgKi8KLQlwID0gZm52YWw7Ci0JZmFpbGVkID0gMTsKLQlnb3Rv IGZuZW5kOwotICAgIH0KLQotLyogQ2hlY2sgYSBzdHJpbmcgZm9yIGVuY29kaW5nIGZhbWlseSAq LwotCi0gICAgaWYgKGN4ID09IEZOX1NUUklOR1QpIHsJCS8qIFxmc3RyaW5ndHlwZSgpICovCi0J cCA9ICJVTksiOwotCXN3aXRjaCAoc2NhbnN0cmluZyhicFswXSkpIHsKLQkgIGNhc2UgRlRfN0JJ VDogcCA9ICI3QklUIjsgYnJlYWs7Ci0JICBjYXNlIEZUXzhCSVQ6IHAgPSAiOEJJVCI7IGJyZWFr OwotCSAgY2FzZSBGVF9VVEY4OiBwID0gIlVURjgiOyBicmVhazsKLQkgIGNhc2UgRlRfVUNTMjog cCA9ICJVQ1MyIjsgYnJlYWs7Ci0JICBjYXNlIEZUX1RFWFQ6IHAgPSAiVEVYVCI7IGJyZWFrOwot CSAgY2FzZSBGVF9CSU46ICBwID0gIkJJTkFSWSI7IGJyZWFrOwotCX0KLQlja3N0cm5jcHkoZm52 YWwscCxGTlZBTEwpOwotCXAgPSBmbnZhbDsKLQlnb3RvIGZuZW5kOwotICAgIH0KLQotLyogU3Ry aW5nIGNvbXBhcmUgczEsIHMyLCBbIGNhc2UgXSwgWyBzdGFydCBdICwgWyBsZW4gXSAqLwotCi0g ICAgaWYgKGN4ID09IEZOX1NUUkNNUCkgewotICAgICAgICBpbnQgZG9jYXNlID0gMDsJCQkvKiBD YXNlIG1hdHRlcnMgb3Igbm90ICovCi0gICAgICAgIGludCBzdGFydCA9IDA7CQkJLyogU3RhcnQg b2Ygc3Vic3RyaW5nICovCi0JaW50IGxlbiA9IC0xOwkJCS8qIExlbmd0aCBvZiBzdWJzdHJpbmcg dG8gY29tcGFyZSAqLwotCWludCB4OyBjaGFyICogczEsICogczI7CQkvKiB3b3JrZXJzICovCi0K LSAgICAgICAgcCA9ICIwIjsJCQkvKiBSZXR1cm4gdmFsdWUgKi8KLSAgICAgICAgaWYgKGFyZ24g PT0gMCkgewkJLyogVHdvIG51bGwgc3RyaW5ncyBhcmUgZXF1YWwgKi8KLQkgICAgY2tzdHJuY3B5 KGZudmFsLHAsRk5WQUxMKTsKLQkgICAgcCA9IGZudmFsOwotCSAgICBnb3RvIGZuZW5kOwotCX0K LSAgICAgICAgaWYgKGFyZ24gPT0gMSkgewkJLyogTm9uLW51bGwgc3RyaW5nID4gbnVsbCBzdHJp bmcgKi8KLQkgICAgcCA9ICIxIjsKLQkgICAgY2tzdHJuY3B5KGZudmFsLHAsRk5WQUxMKTsKLQkg ICAgcCA9IGZudmFsOwotCSAgICBnb3RvIGZuZW5kOwotCX0KLQlpZiAoYXJnbiA+IDIpIHsKLQkg ICAgcyA9ICooYnBbMl0pID8gZXZhbHgoYnBbMl0pIDogIjAiOyAvKiAwID0gY2FzZWxlc3MgKi8K LQkgICAgaWYgKGNoa251bShzKSkgZG9jYXNlID0gYXRvaShzKTsKLQkgICAgaWYgKGFyZ24gPiAz KSB7Ci0JCXMgPSAqKGJwWzNdKSA/IGV2YWx4KGJwWzNdKSA6ICIxIjsgLyogc3RhcnQgaXMgMS1i YXNlZCAqLwotCQlpZiAoY2hrbnVtKHMpKSBzdGFydCA9IGF0b2kocyk7Ci0JCWlmIChhcmduID4g NCkgewotCQkgICAgcyA9ICooYnBbNF0pID8gZXZhbHgoYnBbNF0pIDogIi0xIjsJLyogLTEgPSB3 aG9sZSB0aGluZyAqLwotCQkgICAgaWYgKGNoa251bShzKSkgbGVuID0gYXRvaShzKTsKLQkJfQkJ Ci0JICAgIH0gICAgICAgIAotCX0KLQlpZiAoc3RhcnQgPiAwKSBzdGFydC0tOyAJLyogc3RhcnQg aXMgMC1iYXNlZCBpbnRlcm5hbGx5ICovCi0JczEgPSBicFswXTsJCQkvKiBHZXQgbGVuZ3RoIG9m IGZpcnN0IGFyZyAqLwotCXggPSAoaW50KXN0cmxlbihzMSk7Ci0JaWYgKHggPiBzdGFydCkJCQkv KiBQb2ludCB0byBzdGFydCBwb3NpdGlvbiBvZiBzMSAqLwotCSAgczEgKz0gc3RhcnQ7Ci0JZWxz ZQotCSAgczEgPSAiIjsKLQlzMiA9IGJwWzFdOwkJCS8qIEdldCBsZW5ndGggb2Ygc2Vjb25kIGFy ZyAqLwotCXggPSAoaW50KXN0cmxlbihzMik7Ci0JaWYgKHggPiBzdGFydCkJCQkvKiBQb2ludCB0 byBzdGFydCBwb3NpdGlvbiBvZiBzMiAqLwotCSAgczIgKz0gc3RhcnQ7Ci0JZWxzZQotCSAgczIg PSAiIjsKLQl4ID0gY2tzdHJjbXAocyxzMixsZW4sZG9jYXNlKTsKLQlwID0gY2tpdG9hKHgpOwot CWNrc3RybmNweShmbnZhbCxwLEZOVkFMTCk7Ci0JcCA9IGZudmFsOwotCWdvdG8gZm5lbmQ7Ci0g ICAgfQotCi0vKiBOb3RlOiB3aGVuIGFkZGluZyBuZXcgZnVuY3Rpb25zIHJlbWVtYmVyIHRvIHVw ZGF0ZSBkb2hmdW5jIGluIGNrdXVzMi5jLiAqLwotCi0gICAgZmFpbGVkID0gMTsKLSAgICBpZiAo Zm5kaWFncykKLSAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwiPEVSUk9SOlVOS05PV05fRlVO Q1RJT046XFxmIixmbiwiKCk+IixOVUxMKTsKLQotICBmbmVuZDoKLSAgICAvKiBGcmVlIHRlbXBv cmFyeSBzdG9yYWdlIGZvciBhZ3VtZW50cyAqLwotICAgIGZvciAoayA9IDA7IGsgPCBhcmduOyBr KyspIGlmIChicFtrXSkgZnJlZShicFtrXSk7Ci0gICAgZm5kZXB0aC0tOwotICAgIGlmIChmYWls ZWQpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIEhhbmRsZSBmYWlsdXJlICovCi0gICAgICAg IGRlYnVnKEYxMTEsImZuZW5kIixmbnZhbCxlcnJubyk7Ci0gICAgICAgIGlmICghcCkgcCA9ICIi OwotICAgICAgICBpZiAocFswXSkgewotICAgICAgICAgICAgLyogSW4gY2FzZSB0aGlzIHdhc24n dCBjYXVnaHQgYWJvdmUuLi4gKi8KLSAgICAgICAgICAgIGsgPSBzdHJsZW4ocCk7Ci0gICAgICAg ICAgICBpZiAocFswXSAhPSAnPCcgJiYgcFtrLTFdICE9ICc+JykgewotICAgICAgICAgICAgICAg IGNrbWFrbXNnKGZudmFsLEZOVkFMTCwiPEVSUk9SOkJBRF9BUkc6XFxmIixmbiwiKCk+IixOVUxM KTsKLSAgICAgICAgICAgICAgICBwID0gZm52YWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsIjxFUlJPUjpVTktOT1dO OlxcZiIsZm4sIigpPiIsTlVMTCk7Ci0gICAgICAgICAgICBwID0gZm52YWw7Ci0gICAgICAgIH0K LSAgICAgICAgaWYgKGZuZXJyb3IpICAgICAgICAgICAgICAgICAgICAvKiBTRVQgRlVOQ1RJT04g RVJST1IgT04gKi8KLSAgICAgICAgICBmbnN1Y2Nlc3MgPSAwOyAgICAgICAgICAgICAgICAvKiBN YWtlIGNvbW1hbmQgZmFpbCAoc2VlIGNrdXVzNS5jKSAqLwotICAgICAgICBkZWJ1ZyhGMTExLCJm bmV2YWwgZmFpbGVkIixwLGZuc3VjY2Vzcyk7Ci0gICAgICAgIGlmIChmbmRpYWdzKSAgICAgICAg ICAgICAgICAgICAgLyogU0VUIEZVTkNUSU9OIERJQUdOT1NUSUNTIE9OICovCi0gICAgICAgICAg cHJpbnRmKCI/JXNcbiIscCk7ICAgICAgICAgICAgLyogUHJpbnQgZXJyb3IgbWVzc2FnZSBub3cu ICovCi0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4oIiIpOyAgICAgICAgICAgICAgICAg ICAvKiBSZXR1cm4gbm90aGluZy4gKi8KLSAgICB9Ci0gICAgcmV0dXJuKHApOwotfQotI2VuZGlm IC8qIE5PU1BMICovCi0KLXN0YXRpYyBjaGFyIGNrcGlkYnVmWzMyXSA9ICI/Pz8/IjsKLQotI2lm ZGVmIFZNUwotX1BST1RPVFlQKGxvbmcgemdwaWQsKHZvaWQpKTsKLSNlbmRpZiAvKiBWTVMgKi8K LQotY2hhciAqCi1ja2dldHBpZCgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0 dXJuIHBpZCBhcyBzdHJpbmcgKi8KLSNpZmRlZiBDS19QSUQKLSNpZmRlZiBPUzIKLSNkZWZpbmUg Z2V0cGlkIF9nZXRwaWQKLSAgICB1bnNpZ25lZCBsb25nIHp6OwotI2Vsc2UKLSAgICBsb25nIHp6 OwotI2VuZGlmIC8qIE9TMiAqLwotI2lmZGVmIFZNUwotICAgIHp6ID0gemdwaWQoKTsKLSNlbHNl Ci0gICAgenogPSBnZXRwaWQoKTsKLSNlbmRpZiAvKiBWTVMgKi8KLSAgICBzcHJpbnRmKGNrcGlk YnVmLCIlbGQiLHp6KTsgICAgICAgICAvKiBTQUZFICovCi0jZW5kaWYgLyogQ0tfUElEICovCi0g ICAgcmV0dXJuKChjaGFyICopY2twaWRidWYpOwotfQotCi0jaWZuZGVmIE5PU1BMCi0jZGVmaW5l IEVNQlVGTEVOIDEyOCAgICAgICAgICAgICAgICAgICAgLyogRXJyb3IgbWVzc2FnZSBidWZmZXIg bGVuZ3RoICovCi0KLXN0YXRpYyBjaGFyIGVtYnVmW0VNQlVGTEVOKzFdOwotCi1jaGFyICogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRXZhbHVhdGUgYnVpbHRpbiB2YXJpYWJs ZSAqLwotbnZsb29rKHMpIGNoYXIgKnM7IHsKLSAgICBpbnQgeCwgeSwgY3g7Ci0gICAgbG9uZyB6 OwotICAgIGNoYXIgKnA7Ci0jaWZuZGVmIE5PRElBTAotICAgIE1ETUlORiAqIG07Ci0jZW5kaWYg LyogTk9ESUFMICovCi0jaWZuZGVmIE5PS1ZFUkJTICAgICAgICAgICAgICAgICAgICAgICAgLyog S2V5Ym9hcmQgbWFjcm8gbWF0ZXJpYWwgKi8KLSAgICBleHRlcm4gaW50IGtleW1hYywga2V5bWFj eDsKLSNlbmRpZiAvKiBOT0tWRVJCUyAqLwotI2lmZGVmIENLX0xPR0lOCi0gICAgZXh0ZXJuIGlu dCBpc2d1ZXN0OwotI2VuZGlmIC8qIENLX0xPR0lOICovCi0gICAgaWYgKCFzKSBzID0gIiI7Ci0g ICAgeCA9IHN0cmxlbihzKTsKLSAgICBpZiAoZm5kaWFncykgeyAgICAgICAgICAgICAgICAgICAg ICAvKiBGVU5DVElPTiBESUFHTk9TVElDIE9OICovCi0gICAgICAgIGlmICh4ICsgMzIgPCBFTUJV RkxFTikKLSAgICAgICAgICBzcHJpbnRmKGVtYnVmLCI8RVJST1I6Tk9fU1VDSF9WQVJJQUJMRTpc XHYoJXMpPiIscyk7IC8qIFNBRkUgKi8KLSAgICAgICAgZWxzZQotICAgICAgICAgIHNwcmludGYo ZW1idWYsIjxFUlJPUjpOT19TVUNIX1ZBUklBQkxFPiIpOyAvKiBTQUZFICovCi0gICAgfSBlbHNl ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRlVOQ1RJT04gRElBR05PU1RJQyBPRkYg Ki8KLSAgICAgIGVtYnVmWzBdID0gTlVMOwotICAgIHggPSBWVkJVRkw7Ci0gICAgcCA9IHZ2YnVm OwotICAgIGlmICh6enN0cmluZyhzLCZwLCZ4KSA8IDApIHsgICAgICAgIC8qIGUuZy4gZm9yIFx2 KFwlYSkgKi8KLSAgICAgICAgeSA9IC0xOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHMgPSB2dmJ1 ZjsKLSAgICAgICAgeSA9IGxvb2t1cCh2YXJ0YWIscyxudmFycywmeCk7Ci0gICAgfQotICAgIGN4 ID0geTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHkgaXMgdG9vIGdlbmVyaWMgKi8K LSNpZm5kZWYgTk9ESUFMCi0gICAgbSA9IChtZG10eXAgPiAwKSA/IG1vZGVtcFttZG10eXBdIDog TlVMTDsgLyogRm9yIFx2KG1feHh4KSB2YXJpYWJsZXMgKi8KLSNlbmRpZiAvKiBOT0RJQUwgKi8K LQotICAgIGRlYnVnKEYxMDEsIm52bG9vayB5IiwiIix5KTsKLQotICAgIHN3aXRjaCAoeSkgewot ICAgICAgY2FzZSBWTl9BUkdDOiAgICAgICAgICAgICAgICAgICAgIC8qIEFSR0MgKi8KLSAgICAg ICAgc3ByaW50Zih2dmJ1ZiwiJWQiLG1hY2x2bCA8IDAgPyB0b3BhcmdjIDogbWFjYXJnY1ttYWNs dmxdKTsgLyogU0FGRSAqLwotICAgICAgICByZXR1cm4odnZidWYpOwotCi0gICAgICBjYXNlIFZO X0FSR1M6ICAgICAgICAgICAgICAgICAgICAgLyogQVJHUyAqLwotICAgICAgICBzcHJpbnRmKHZ2 YnVmLCIlZCIseGFyZ3MpOyAgICAgIC8qIFNBRkUgKi8KLSAgICAgICAgcmV0dXJuKHZ2YnVmKTsK LQotICAgICAgY2FzZSBWTl9DT1VOOiAgICAgICAgICAgICAgICAgICAgIC8qIENPVU5UICovCi0g ICAgICAgIHNwcmludGYodnZidWYsIiVkIixjb3VudFtjbWRsdmxdKTsgLyogU0FGRSAqLwotICAg ICAgICByZXR1cm4odnZidWYpOwotCi0gICAgICBjYXNlIFZOX0RBVEU6ICAgICAgICAgICAgICAg ICAgICAgLyogREFURSAqLwotICAgICAgICB6dGltZSgmcCk7ICAgICAgICAgICAgICAgICAgICAg IC8qIEdldCAiYXNjdGltZSIgc3RyaW5nICovCi0gICAgICAgIGlmIChwID09IE5VTEwgfHwgKnAg PT0gTlVMKSByZXR1cm4oTlVMTCk7Ci0gICAgICAgIHZ2YnVmWzBdID0gcFs4XTsgICAgICAgICAg ICAgICAgLyogZGQgKi8KLSAgICAgICAgdnZidWZbMV0gPSBwWzldOwotICAgICAgICB2dmJ1Zlsy XSA9IFNQOwotICAgICAgICB2dmJ1ZlszXSA9IHBbNF07ICAgICAgICAgICAgICAgIC8qIG1tbSAq LwotICAgICAgICB2dmJ1Zls0XSA9IHBbNV07Ci0gICAgICAgIHZ2YnVmWzVdID0gcFs2XTsKLSAg ICAgICAgdnZidWZbNl0gPSBTUDsKLSAgICAgICAgZm9yICh4ID0gMjA7IHggPCAyNDsgeCsrKSAg ICAgICAvKiB5eXl5ICovCi0gICAgICAgICAgdnZidWZbeCAtIDEzXSA9IHBbeF07Ci0gICAgICAg IHZ2YnVmWzExXSA9IE5VTDsKLSAgICAgICAgcmV0dXJuKHZ2YnVmKTsKLQotICAgICAgY2FzZSBW Tl9OREFUOiAgICAgICAgICAgICAgICAgICAgIC8qIE51bWVyaWMgZGF0ZSAqLwotICAgICAgICBj a3N0cm5jcHkodnZidWYsenpuZGF0ZSgpLFZWQlVGTCk7Ci0gICAgICAgIHJldHVybih2dmJ1Zik7 Ci0KLSAgICAgIGNhc2UgVk5fRElSRTogICAgICAgICAgICAgICAgICAgICAvKiBESVJFQ1RPUlkg Ki8KLSAgICAgICAgcyA9IHpndGRpcigpOyAgICAgICAgICAgICAgICAgICAvKiBHZXQgY3VycmVu dCBkaXJlY3RvcnkgKi8KLSAgICAgICAgaWYgKCFzKQotI2lmZGVmIFVOSVhPUk9TSwotICAgICAg ICAgIHMgPSAiLi8iOwotI2Vsc2UKLSNpZmRlZiBWTVMKLSAgICAgICAgICBzID0gIltdIjsKLSNl bHNlCi0gICAgICAgICAgcyA9ICIiOwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIFVOSVhP Uk9TSyAqLwotICAgICAgICBja3N0cm5jcHkodnZidWYscyxWVkJVRkwpOwotICAgICAgICBzID0g dnZidWY7Ci0jaWZkZWYgVU5JWE9ST1NLCi0gICAgICAgIHggPSBzdHJsZW4ocyk7Ci0gICAgICAg IGlmICh4IDwgVlZCVUZMIC0gMSkgewotICAgICAgICAgICAgaWYgKHNbeC0xXSAhPSAnLycpIHsK LSAgICAgICAgICAgICAgICBzW3hdID0gJy8nOwotICAgICAgICAgICAgICAgIHNbeCsxXSA9IE5V TDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIFVOSVhPUk9TSyAqLwotICAg ICAgICByZXR1cm4ocyk7Ci0KLSAgICAgIGNhc2UgVk5fRklMRTogICAgICAgICAgICAgICAgICAg ICAvKiBmaWxlc3BlYyAqLwotICAgICAgICByZXR1cm4oZnNwZWMpOwotCi0gICAgICBjYXNlIFZO X0hPU1Q6ICAgICAgICAgICAgICAgICAgICAgLyogaG9zdCBuYW1lICovCi0gICAgICAgIGlmICgq bXlob3N0KSB7ICAgICAgICAgICAgICAgICAgLyogSWYga25vd24gKi8KLSAgICAgICAgICAgIHJl dHVybihteWhvc3QpOyAgICAgICAgICAgICAvKiByZXR1cm4gaXQuICovCi0gICAgICAgIH0gZWxz ZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlICovCi0gICAgICAgICAgICBj a3N0cm5jcHkodnZidWYsInVua25vd24iLFZWQlVGTCk7IC8qIGp1c3Qgc2F5ICJ1bmtub3duIiAq LwotICAgICAgICAgICAgcmV0dXJuKHZ2YnVmKTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIFZO X1NZU1Q6ICAgICAgICAgICAgICAgICAgICAgLyogU3lzdGVtIHR5cGUgKi8KLSNpZmRlZiBVTklY Ci0gICAgICAgIGNrc3RybmNweSh2dmJ1ZiwiVU5JWCIsVlZCVUZMKTsKLSNlbHNlCi0jaWZkZWYg Vk1TCi0gICAgICAgIGNrc3RybmNweSh2dmJ1ZiwiVk1TIixWVkJVRkwpOwotI2Vsc2UKLSNpZmRl ZiBPU0sKLSAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJPUzkvNjhLIixWVkJVRkwpOwotI2Vsc2UK LSNpZmRlZiBBTUlHQQotICAgICAgICBja3N0cm5jcHkodnZidWYsIkFtaWdhIixWVkJVRkwpOwot I2Vsc2UKLSNpZmRlZiBNQUMKLSAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJNYWNpbnRvc2giLFZW QlVGTCk7Ci0jZWxzZQotI2lmZGVmIE9TMgotI2lmZGVmIE5UCi0gICAgICAgIGNrc3RybmNweSh2 dmJ1ZiwiV0lOMzIiLFZWQlVGTCkgOwotI2Vsc2UgLyogTlQgKi8KLSAgICAgICAgY2tzdHJuY3B5 KHZ2YnVmLCJPUy8yIixWVkJVRkwpOwotI2VuZGlmIC8qIE5UICovCi0jZWxzZQotI2lmZGVmIGRh dGFnZW5lcmFsCi0gICAgICAgIGNrc3RybmNweSh2dmJ1ZiwiQU9TL1ZTIixWVkJVRkwpOwotI2Vs c2UKLSNpZmRlZiBHRU1ET1MKLSAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJBdGFyaV9TVCIsVlZC VUZMKTsKLSNlbHNlCi0jaWZkZWYgU1RSQVRVUwotICAgICAgICBja3N0cm5jcHkodnZidWYsIlN0 cmF0dXNfVk9TIixWVkJVRkwpOwotI2Vsc2UKLSAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJ1bmtu b3duIixWVkJVRkwpOwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSNlbmRpZiAvKiBHRU1ET1MgKi8K LSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE1B QyAqLwotI2VuZGlmIC8qIEFNSUdBICovCi0jZW5kaWYgLyogT1NLICovCi0jZW5kaWYgLyogVk1T ICovCi0jZW5kaWYgLyogVU5JWCAqLwotICAgICAgICByZXR1cm4odnZidWYpOwotCi0gICAgICBj YXNlIFZOX1NZU1Y6ICAgICAgICAgICAgICAgICAgICAgLyogU3lzdGVtIGhlcmFsZCAqLwotI2lm ZGVmIElLU0QKLSNpZmRlZiBDS19MT0dJTgotICAgICAgICBpZiAoaW5zZXJ2ZXIgJiYgaXNndWVz dCkKLSAgICAgICAgICByZXR1cm4oIiIpOwotI2VuZGlmIC8qIENLX0xPR0lOICovCi0jZW5kaWYg LyogSUtTRCAqLwotICAgICAgICBmb3IgKHggPSB5ID0gMDsgeCA8IFZWQlVGTDsgeCsrKSB7Ci0g ICAgICAgICAgICBpZiAoY2t4c3lzW3hdID09IFNQICYmIHkgPT0gMCkgY29udGludWU7Ci0gICAg ICAgICAgICB2dmJ1Zlt5KytdID0gKGNoYXIpICgoY2t4c3lzW3hdID09IFNQKSA/ICdfJyA6IGNr eHN5c1t4XSk7Ci0gICAgICAgIH0KLSAgICAgICAgdnZidWZbeV0gPSBOVUw7Ci0gICAgICAgIHJl dHVybih2dmJ1Zik7Ci0gICAgfSAvKiBCcmVhayB1cCBsb25nIHN3aXRjaCBzdGF0ZW1lbnRzLi4u ICovCi0KLSAgICBzd2l0Y2goeSkgewotICAgICAgY2FzZSBWTl9USU1FOiAgICAgICAgICAgICAg ICAgICAgIC8qIFRJTUUuIEFzc3VtZXMgdGhhdCB6dGltZSByZXR1cm5zICovCi0gICAgICAgIHp0 aW1lKCZwKTsgICAgICAgICAgICAgICAgICAgICAgLyogIlRodSBGZWIgIDggMTI6MDA6MDAgMTk5 MCIgKi8KLSAgICAgICAgaWYgKHAgPT0gTlVMTCB8fCAqcCA9PSBOVUwpICAgICAvKiBsaWtlIGFz Y3RpbWUoKSEgKi8KLSAgICAgICAgICByZXR1cm4oIiIpOwotICAgICAgICBmb3IgKHggPSAxMTsg eCA8IDE5OyB4KyspICAgICAgIC8qIGNvcHkgaGg6bW06c3MgKi8KLSAgICAgICAgICB2dmJ1Zlt4 IC0gMTFdID0gcFt4XTsgICAgICAgICAvKiB0byB2dmJ1ZiAqLwotICAgICAgICB2dmJ1Zls4XSA9 IE5VTDsgICAgICAgICAgICAgICAgIC8qIHRlcm1pbmF0ZSAqLwotICAgICAgICByZXR1cm4odnZi dWYpOyAgICAgICAgICAgICAgICAgIC8qIGFuZCByZXR1cm4gaXQgKi8KLQotICAgICAgY2FzZSBW Tl9OVElNOiAgICAgICAgICAgICAgICAgICAgIC8qIE51bWVyaWMgdGltZSAqLwotICAgICAgICB6 dGltZSgmcCk7ICAgICAgICAgICAgICAgICAgICAgIC8qICJUaHUgRmViICA4IDEyOjAwOjAwIDE5 OTAiICovCi0gICAgICAgIGlmIChwID09IE5VTEwgfHwgKnAgPT0gTlVMKSAgICAgLyogbGlrZSBh c2N0aW1lKCkhICovCi0gICAgICAgICAgcmV0dXJuKE5VTEwpOwotICAgICAgICB6ID0gYXRvbChw KzExKSAqIDM2MDBMICsgYXRvbChwKzE0KSAqIDYwTCArIGF0b2wocCsxNyk7Ci0gICAgICAgIHNw cmludGYodnZidWYsIiVsZCIseik7ICAgICAgICAgLyogU0FGRSAqLwotICAgICAgICByZXR1cm4o dnZidWYpOwotCi0jaWZkZWYgQ0tfVFRZRkQKLSAgICAgIGNhc2UgVk5fVFRZRjogICAgICAgICAg ICAgICAgICAgICAvKiBUVFkgZmlsZSBkZXNjcmlwdG9yICovCi0gICAgICAgIHNwcmludGYodnZi dWYsIiVkIiwgICAgICAgICAgICAgLyogU0FGRSAqLwotI2lmZGVmIFZNUwotICAgICAgICAgICAg ICAgIHZtc3R0eWZkKCkKLSNlbHNlCi0gICAgICAgICAgICAgICAgdHR5ZmQKLSNlbmRpZiAvKiBW TVMgKi8KLSAgICAgICAgICAgICAgICApOwotICAgICAgICByZXR1cm4odnZidWYpOwotI2VuZGlm IC8qIENLX1RUWUZEICovCi0KLSAgICAgIGNhc2UgVk5fVkVSUzogICAgICAgICAgICAgICAgICAg ICAvKiBOdW1lcmljIEtlcm1pdCB2ZXJzaW9uIG51bWJlciAqLwotICAgICAgICBzcHJpbnRmKHZ2 YnVmLCIlbGQiLHZlcm51bSk7ICAgIC8qIFNBRkUgKi8KLSAgICAgICAgcmV0dXJuKHZ2YnVmKTsK LQotICAgICAgY2FzZSBWTl9YVk5VTTogICAgICAgICAgICAgICAgICAgIC8qIFByb2R1Y3Qtc3Bl Y2lmaWMgdmVyc2lvbiBudW1iZXIgKi8KLSAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWxkIix4dmVy bnVtKTsgICAvKiBTQUZFICovCi0gICAgICAgIHJldHVybih2dmJ1Zik7Ci0KLSAgICAgIGNhc2Ug Vk5fSE9NRTogICAgICAgICAgICAgICAgICAgICAvKiBIb21lIGRpcmVjdG9yeSAqLwotICAgICAg ICByZXR1cm4oaG9tZXBhdGgoKSk7Ci0KLSAgICAgIGNhc2UgVk5fSUJVRjogICAgICAgICAgICAg ICAgICAgICAvKiBJTlBVVCBidWZmZXIgKi8KLSAgICAgICAgcmV0dXJuKChjaGFyICopaW5wYnVm KTsKLQotICAgICAgY2FzZSBWTl9JQ0hSOiAgICAgICAgICAgICAgICAgICAgIC8qIElOUFVUIGNo YXJhY3RlciAqLwotICAgICAgICBpbmNoYXJbMV0gPSBOVUw7Ci0gICAgICAgIHJldHVybigoY2hh ciAqKWluY2hhcik7Ci0KLSAgICAgIGNhc2UgVk5fSUNOVDogICAgICAgICAgICAgICAgICAgICAv KiBJTlBVVCBjaGFyYWN0ZXIgY291bnQgKi8KLSAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLGlu Y291bnQpOyAgICAvKiBTQUZFICovCi0gICAgICAgIHJldHVybih2dmJ1Zik7Ci0KLSAgICAgIGNh c2UgVk5fU1BFRTogeyAgICAgICAgICAgICAgICAgICAvKiBUcmFuc21pc3Npb24gU1BFRUQgKi8K LSAgICAgICAgICBsb25nIHQ7Ci0gICAgICAgICAgdCA9IHR0Z3NwZCgpOwotICAgICAgICAgIGlm ICh0IDwgMEwpCi0gICAgICAgICAgICBzcHJpbnRmKHZ2YnVmLCJ1bmtub3duIik7ICAgLyogU0FG RSAqLwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwcmludGYodnZidWYsIiVsZCIsdCk7 ICAgICAvKiBTQUZFICovCi0gICAgICAgICAgcmV0dXJuKHZ2YnVmKTsKLSAgICAgIH0KLQotICAg ICAgY2FzZSBWTl9TVUNDOiAgICAgICAgICAgICAgICAgICAgIC8qIFNVQ0NFU1MgZmxhZyAqLwot ICAgICAgICAvKiBOb3RlIGludmVydGVkIHNlbnNlICovCi0gICAgICAgIHNwcmludGYodnZidWYs IiVkIiwoc3VjY2VzcyA9PSAwKSA/IDEgOiAwKTsgLyogU0FGRSAqLwotICAgICAgICByZXR1cm4o dnZidWYpOwotCi0gICAgICBjYXNlIFZOX0xJTkU6IHsgICAgICAgICAgICAgICAgICAgLyogTElO RSAqLwotI2lmZGVmIERFQlVHCi0gICAgICAgICAgaWYgKGRlYmxvZykgewotICAgICAgICAgICAg ICBkZWJ1ZyhGMTExLCJcXHYobGluZSkgbG9jYWwiLHR0bmFtZSxsb2NhbCk7Ci0gICAgICAgICAg ICAgIGRlYnVnKEYxMTEsIlxcdihsaW5lKSBpbnNlcnZlciIsIiIsaW5zZXJ2ZXIpOwotI2lmZGVm IFROQ09ERQotICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJcXHYobGluZSkgdGNwX2luY29taW5n IiwiIix0Y3BfaW5jb21pbmcpOwotI2VuZGlmIC8qIFROQ09ERSAqLwotI2lmZGVmIENLX1RBUEkK LSAgICAgICAgICAgICAgZGVidWcoRjExMSwiXFx2KGxpbmUpIHR0dGFwaSIsIiIsdHR0YXBpKTsK LSNlbmRpZiAvKiBDS19UQVBJICovCi0gICAgICAgICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0K LSNpZmRlZiBDS19UQVBJCi0gICAgICAgICAgaWYgKHR0dGFwaSkgeyAgICAgICAgICAgICAgICAg LyogSWYgSSBoYXZlIG1hZGUgYSBUQVBJIGNvbm5lY3Rpb24gKi8KLSAgICAgICAgICAgICAgaW50 IGk7ICAgICAgICAgICAgICAgICAgICAvKiByZXR1cm4gdGhlIFRBUEkgZGV2aWNlIG5hbWUgKi8K LSAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG50YXBpbGluZTsgaSsrKSB7Ci0gICAgICAg ICAgICAgICAgICBpZiAoIXN0cmNtcCh0dG5hbWUsdGFwaWxpbmV0YWJbaV0ua3dkKSkgewotICAg ICAgICAgICAgICAgICAgICAgIHAgPSBfdGFwaWxpbmV0YWJbaV0ua3dkOwotICAgICAgICAgICAg ICAgICAgICAgIHJldHVybihwKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg fQotICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19UQVBJICovCi0jaWZuZGVmIE5PWEZFUgotICAg ICAgICAgIGlmIChpbnNlcnZlciAgICAgICAgICAgICAgICAgIC8qIElmIEkgYW0gYSBUQ1Agc2Vy dmVyICovCi0jaWZkZWYgVE5DT0RFCi0gICAgICAgICAgICAgIHx8IHRjcF9pbmNvbWluZwotI2Vu ZGlmIC8qIFROQ09ERSAqLwotICAgICAgICAgICAgICApCi0jaWZkZWYgVENQU09DS0VUCi0gICAg ICAgICAgICBwID0gY2tnZXRwZWVyKCk7ICAgICAgICAgICAgLyogcmV0dXJuIHBlZXIgbmFtZSAq LwotICAgICAgICAgIGVsc2UKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNlbmRpZiAvKiBOT1hG RVIgKi8KLSAgICAgICAgICBpZiAobG9jYWwpICAgICAgICAgICAgICAgICAgICAvKiBPdGhlcndp c2UgaWYgaW4gbG9jYWwgbW9kZSAqLwotICAgICAgICAgICAgcCA9IChjaGFyICopIHR0bmFtZTsg ICAgICAgIC8qIHJldHVybiBTRVQgTElORSAvIFNFVCBIT1NUIG5hbWUgKi8KLSAgICAgICAgICBl bHNlICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2UgKi8KLSAgICAgICAgICAg IHAgPSAiIjsgICAgICAgICAgICAgICAgICAgICAvKiByZXR1cm4gZW1wdHkgc3RyaW5nICovCi0g ICAgICAgICAgaWYgKCFwKSAgICAgICAgICAgICAgICAgICAgICAgLyogSW4gY2FzZSBja2dldHBl ZXIoKSByZXR1cm5zICovCi0gICAgICAgICAgICBwID0gIiI7ICAgICAgICAgICAgICAgICAgICAg LyogbnVsbCBwb2ludGVyLi4uICovCi0gICAgICAgICAgZGVidWcoRjExMCwiXFx2KGxpbmUpIHAi LHAsMCk7Ci0gICAgICAgICAgaWYgKCEqcCkKLSAgICAgICAgICAgIHAgPSAoY2hhciAqKSB0dG5h bWU7Ci0gICAgICAgICAgcmV0dXJuKHApOwotICAgICAgfQotICAgICAgY2FzZSBWTl9QUk9HOiAg ICAgICAgICAgICAgICAgICAgIC8qIFByb2dyYW0gbmFtZSAqLwotICAgICAgICByZXR1cm4oIkMt S2VybWl0Iik7Ci0KLSAgICB9IC8qIEJyZWFrIHVwIGxvbmcgc3dpdGNoIHN0YXRlbWVudHMuLi4g Ki8KLQotICAgIHN3aXRjaCh5KSB7Ci0gICAgICBjYXNlIFZOX1JFVDogICAgICAgICAgICAgICAg ICAgICAgLyogVmFsdWUgb2YgbW9zdCByZWNlbnQgUkVUVVJOICovCi0gICAgICAgIGRlYnVnKEYx MTEsIlxcdihyZXR1cm4pIixtcnZhbFttYWNsdmwrMV0sbWFjbHZsKzEpOwotICAgICAgICBwID0g bXJ2YWxbbWFjbHZsKzFdOwotICAgICAgICBpZiAocCA9PSBOVUxMKSBwID0gIiI7Ci0gICAgICAg IHJldHVybihwKTsKLQotICAgICAgY2FzZSBWTl9GRkM6ICAgICAgICAgICAgICAgICAgICAgIC8q IFNpemUgb2YgbW9zdCByZWNlbnQgZmlsZSAqLwotICAgICAgICBzcHJpbnRmKHZ2YnVmLCAiJXMi LCBja2ZzdG9hKGZmYykpOyAvKiBTQUZFICovCi0gICAgICAgIHJldHVybih2dmJ1Zik7Ci0KLSAg ICAgIGNhc2UgVk5fVEZDOiAgICAgICAgICAgICAgICAgICAgICAvKiBTaXplIG9mIG1vc3QgcmVj ZW50IGZpbGUgZ3JvdXAgKi8KLSAgICAgICAgc3ByaW50Zih2dmJ1ZiwgIiVzIiwgY2tmc3RvYSh0 ZmMpKTsgLyogU0FGRSAqLwotICAgICAgICByZXR1cm4odnZidWYpOwotCi0gICAgICBjYXNlIFZO X0NQVTogICAgICAgICAgICAgICAgICAgICAgLyogQ1BVIHR5cGUgKi8KLSNpZmRlZiBJS1NECi0j aWZkZWYgQ0tfTE9HSU4KLSAgICAgICAgaWYgKGluc2VydmVyICYmIGlzZ3Vlc3QpCi0gICAgICAg ICAgcmV0dXJuKCIiKTsKLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotI2VuZGlmIC8qIElLU0QgKi8K LSNpZmRlZiBPUzIKLSAgICAgICAgIHsKLSAgICAgICAgICAgIGNoYXIgKiBnZXRjcHUodm9pZCkg OwotICAgICAgICAgICAgcmV0dXJuIGdldGNwdSgpOwotICAgICAgICAgfQotI2Vsc2UgLyogT1My ICovCi0jaWZkZWYgQ0tDUFUKLSAgICAgICAgcmV0dXJuKENLQ1BVKTsgICAgICAgICAgICAgICAg ICAvKiBUcmFkaXRpb25hbGx5LCBjb21waWxlLXRpbWUgdmFsdWUgKi8KLSNlbHNlCi0jaWZkZWYg Q0tfVVRTTkFNRQotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJ1 dCBpZiBub25lLCB0cnkgcnVudGltZSB2YWx1ZSAqLwotICAgICAgICAgICAgZXh0ZXJuIGNoYXIg dW5tX21jaFtdOwotICAgICAgICAgICAgcmV0dXJuKChjaGFyICopdW5tX21jaCk7Ci0gICAgICAg IH0KLSNlbHNlCi0gICAgICAgIHAgPSBnZXRlbnYoIkhPU1RUWVBFIik7CQkvKiAyMDA5MTExNiAq LwotCWlmIChwKSBpZiAoKnApIHJldHVybihwKTsKLSAgICAgICAgcmV0dXJuKCJ1bmtub3duIik7 Ci0jZW5kaWYgLyogQ0tfVVRTTkFNRSAqLwotI2VuZGlmIC8qIENLQ1BVICovCi0jZW5kaWYgLyog T1MyICovCi0KLSAgICAgIGNhc2UgVk5fQ01ETDogICAgICAgICAgICAgICAgICAgICAvKiBDb21t YW5kIGxldmVsICovCi0gICAgICAgIHNwcmludGYodnZidWYsICIlZCIsIGNtZGx2bCk7ICAgLyog U0FGRSAqLwotICAgICAgICByZXR1cm4odnZidWYpOwotCi0gICAgICBjYXNlIFZOX0RBWTogICAg ICAgICAgICAgICAgICAgICAgLyogRGF5IG9mIHdlZWsgKi8KLSAgICAgICAgenRpbWUoJnApOwot ICAgICAgICBpZiAocCAhPSBOVUxMICYmICpwICE9IE5VTCkgICAgIC8qIHp0aW1lKCkgc3VjY2Vl ZGVkLiAqLwotICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZixwLDQpOwotICAgICAgICBlbHNlCi0g ICAgICAgICAgdnZidWZbMF0gPSBOVUw7ICAgICAgICAgICAgICAgLyogenRpbWUoKSBmYWlsZWQu ICovCi0gICAgICAgIHJldHVybih2dmJ1Zik7ICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIHdo YXQgd2UgZ290LiAqLwotCi0gICAgICBjYXNlIFZOX05EQVk6IHsgICAgICAgICAgICAgICAgICAg LyogTnVtZXJpYyBkYXkgb2Ygd2VlayAqLwotICAgICAgICAgIGxvbmcgazsKLSAgICAgICAgICB6 ID0gbWpkKHp6bmRhdGUoKSk7ICAgICAgICAgICAvKiBHZXQgbW9kaWZpZWQgSnVsaWFuIGRhdGUg Ki8KLSAgICAgICAgICBrID0gKCgoaW50KSh6ICUgN0wpKSArIDMpICUgNzsgLyogR2V0IGRheSBu dW1iZXIgKi8KLSAgICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlbGQiLGspOyAgICAgICAvKiBTQUZF ICovCi0gICAgICAgICAgcmV0dXJuKHZ2YnVmKTsKLSAgICAgIH0KLQotICAgICAgY2FzZSBWTl9M Q0w6ICAgICAgICAgICAgICAgICAgICAgIC8qIExvY2FsICh2cyByZW1vdGUpIG1vZGUgKi8KLSAg ICAgICAgY2tzdHJuY3B5KHZ2YnVmLCBsb2NhbCA/ICIxIiA6ICIwIixWVkJVRkwpOwotICAgICAg ICByZXR1cm4odnZidWYpOwotCi0gICAgICBjYXNlIFZOX0NNRFM6ICAgICAgICAgICAgICAgICAg ICAgLyogQ29tbWFuZCBzb3VyY2UgKi8KLSAgICAgICAgaWYgKGNtZHN0a1tjbWRsdmxdLnNyYyA9 PSBDTURfS0IpCi0gICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJwcm9tcHQiLFZWQlVGTCk7Ci0g ICAgICAgIGVsc2UgaWYgKGNtZHN0a1tjbWRsdmxdLnNyYyA9PSBDTURfTUQpCi0gICAgICAgICAg Y2tzdHJuY3B5KHZ2YnVmLCJtYWNybyIsVlZCVUZMKTsKLSAgICAgICAgZWxzZSBpZiAoY21kc3Rr W2NtZGx2bF0uc3JjID09IENNRF9URikKLSAgICAgICAgICBja3N0cm5jcHkodnZidWYsImZpbGUi LFZWQlVGTCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBja3N0cm5jcHkodnZidWYsInVua25v d24iLFZWQlVGTCk7Ci0gICAgICAgIHJldHVybih2dmJ1Zik7Ci0KLSAgICAgIGNhc2UgVk5fQ01E RjogICAgICAgICAgICAgICAgICAgICAvKiBDdXJyZW50IGNvbW1hbmQgZmlsZSBuYW1lICovCi0j aWZkZWYgQ09NTUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKHNlZSBjb21tZW50cyBh Ym92ZSkgKi8KLSAgICAgICAgaWYgKHRmbmFtW3RsZXZlbF0pIHsgICAgICAgICAgICAvKiAobmVh ciBkYmxicyBkZWNsYXJhdGlvbikgKi8KLSAgICAgICAgICAgIGRibGJzKHRmbmFtW3RsZXZlbF0s dnZidWYsVlZCVUZMKTsKLSAgICAgICAgICAgIHJldHVybih2dmJ1Zik7Ci0gICAgICAgIH0gZWxz ZSByZXR1cm4oIiIpOwotI2Vsc2UKLSAgICAgICAgaWYgKHRsZXZlbCA8IDApCi0gICAgICAgICAg cmV0dXJuKCIiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHJldHVybih0Zm5hbVt0bGV2ZWxd ID8gdGZuYW1bdGxldmVsXSA6ICIiKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICAgIGNh c2UgVk5fTUFDOiAgICAgICAgICAgICAgICAgICAgICAvKiBDdXJyZW50IG1hY3JvIG5hbWUgKi8K LSAgICAgICAgcmV0dXJuKChtYWNsdmwgPiAtMSkgPyBtX2FyZ1ttYWNsdmxdWzBdIDogIiIpOwot Ci0gICAgICBjYXNlIFZOX0VYSVQ6Ci0gICAgICAgIHNwcmludGYodnZidWYsIiVkIix4aXRzdGEp OyAgICAgLyogU0FGRSAqLwotICAgICAgICByZXR1cm4odnZidWYpOwotCi0gICAgfSAvKiBCcmVh ayB1cCBsb25nIHN3aXRjaCBzdGF0ZW1lbnRzLi4uICovCi0KLSAgICBzd2l0Y2goeSkgewotICAg ICAgY2FzZSBWTl9QUlRZOiB7ICAgICAgICAgICAgICAgICAgIC8qIFBhcml0eSAqLwotICAgICAg ICAgIGNoYXIgKnNzOwotICAgICAgICAgIHN3aXRjaCAocGFyaXR5KSB7Ci0gICAgICAgICAgICBj YXNlIDA6ICAgc3MgPSAibm9uZSI7ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ2UnOiBzcyA9 ICJldmVuIjsgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnbSc6IHNzID0gIm1hcmsiOyAgYnJl YWs7Ci0gICAgICAgICAgICBjYXNlICdvJzogc3MgPSAib2RkIjsgICBicmVhazsKLSAgICAgICAg ICAgIGNhc2UgJ3MnOiBzcyA9ICJzcGFjZSI7IGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDog IHNzID0gInVua25vd24iOyBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2tzdHJuY3B5 KHZ2YnVmLHNzLFZWQlVGTCk7Ci0gICAgICAgICAgcmV0dXJuKHZ2YnVmKTsKLSAgICAgIH0KLQot ICAgICAgY2FzZSBWTl9ESUFMOgotICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsICAgICAgICAg ICAgIC8qIFNBRkUgKi8KLSNpZm5kZWYgTk9ESUFMCi0gICAgICAgICAgICAgICAgZGlhbHN0YQot I2Vsc2UKLSAgICAgICAgICAgICAgICAtMQotI2VuZGlmIC8qIE5PRElBTCAqLwotICAgICAgICAg ICAgICAgICk7Ci0gICAgICAgIHJldHVybih2dmJ1Zik7Ci0KLSNpZm5kZWYgTk9ESUFMCi0gICAg ICBjYXNlIFZOX0RNU0c6Ci0jaWZkZWYgQklHQlVGT0sKLQlja3N0cm5jcHkodnZidWYsZGlhbG1z Z1tkaWFsc3RhXSxWVkJVRkwpOyAvKiBTYWZlIGlmIHNyYyA9PSBOVUxMICovCi0jZW5kaWYJLyog QklHQlVGT0sgKi8KLQlyZXR1cm4oKGNoYXIgKil2dmJ1Zik7Ci0jZW5kaWYJLyogTk9ESUFMICov Ci0KLSNpZmRlZiBPUzIKLSAgICAgIGNhc2UgVk5fS0VZQjoKLSAgICAgICAgY2tzdHJuY3B5KHZ2 YnVmLGNvbmtiZygpLFZWQlVGTCk7Ci0gICAgICAgIHJldHVybih2dmJ1Zik7Ci0gICAgICBjYXNl IFZOX1NFTENUOiB7Ci0jaWZuZGVmIE5PTE9DQUwKLSAgICAgICAgICBjb25zdCBjaGFyICogc2Vs ZWN0aW9uID0gR2V0U2VsZWN0aW9uKCk7Ci0gICAgICAgICAgcmV0dXJuKCAoY2hhciAqKSAoc2Vs ZWN0aW9uID8gc2VsZWN0aW9uIDogIiIgKSkgOwotI2Vsc2UKLSAgICAgICAgICByZXR1cm4oIiIp OwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSAgICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lm bmRlZiBOT1hGRVIKLSAgICAgIGNhc2UgVk5fQ1BTOgotICAgICAgICBzcHJpbnRmKHZ2YnVmLCIl bGQiLHRmY3BzKTsgICAgIC8qIFNBRkUgKi8KLSAgICAgICAgcmV0dXJuKHZ2YnVmKTsKLSNlbmRp ZiAvKiBOT1hGRVIgKi8KLQotICAgICAgY2FzZSBWTl9NT0RFOiAgICAgICAgICAgICAgICAgICAg IC8qIEZpbGUgdHJhbnNmZXIgbW9kZSAqLwotICAgICAgICBzd2l0Y2ggKGJpbmFyeSkgewotICAg ICAgICAgIGNhc2UgWFlGVF9UOiBja3N0cm5jcHkodnZidWYsInRleHQiLFZWQlVGTCk7IGJyZWFr OwotICAgICAgICAgIGNhc2UgWFlGVF9COgotICAgICAgICAgIGNhc2UgWFlGVF9VOiBja3N0cm5j cHkodnZidWYsImJpbmFyeSIsVlZCVUZMKTsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBYWUZUX0k6 IGNrc3RybmNweSh2dmJ1ZiwiaW1hZ2UiLFZWQlVGTCk7IGJyZWFrOwotICAgICAgICAgIGNhc2Ug WFlGVF9MOiBja3N0cm5jcHkodnZidWYsImxhYmVsZWQiLFZWQlVGTCk7IGJyZWFrOwotICAgICAg ICAgIGNhc2UgWFlGVF9NOiBja3N0cm5jcHkodnZidWYsIm1hY2JpbmFyeSIsVlZCVUZMKTsgYnJl YWs7Ci0gICAgICAgICAgZGVmYXVsdDogICAgIGNrc3RybmNweSh2dmJ1ZiwidW5rbm93biIsVlZC VUZMKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4odnZidWYpOwotCi0jaWZkZWYgQ0tfUkVY WAotICAgICAgY2FzZSBWTl9SRVhYOgotICAgICAgICByZXR1cm4ocmV4eGJ1Zik7Ci0jZW5kaWYg LyogQ0tfUkVYWCAqLwotCi0gICAgICBjYXNlIFZOX05FV0w6ICAgICAgICAgICAgICAgICAgICAg LyogU3lzdGVtIG5ld2xpbmUgY2hhciBvciBzZXF1ZW5jZSAqLwotI2lmZGVmIFVOSVgKLSAgICAg ICAgY2tzdHJuY3B5KHZ2YnVmLCJcbiIsVlZCVUZMKTsKLSNlbHNlCi0jaWZkZWYgZGF0YWdlbmVy YWwKLSAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJcbiIsVlZCVUZMKTsKLSNlbHNlCi0jaWZkZWYg T1NLCi0gICAgICAgIGNrc3RybmNweSh2dmJ1ZiwiXDE1IixWVkJVRkwpOyAgLyogUmVtZW1iZXIs IHRoZXNlIGFyZSBvY3RhbC4uLiAqLwotI2Vsc2UKLSNpZmRlZiBNQUMKLSAgICAgICAgY2tzdHJu Y3B5KHZ2YnVmLCJcMTUiLFZWQlVGTCk7Ci0jZWxzZQotI2lmZGVmIE9TMgotICAgICAgICBja3N0 cm5jcHkodnZidWYsIlwxNVwxMiIsVlZCVUZMKTsKLSNlbHNlCi0jaWZkZWYgU1RSQVRVUwotICAg ICAgICBja3N0cm5jcHkodnZidWYsIlxuIixWVkJVRkwpOwotI2Vsc2UKLSNpZmRlZiBWTVMKLSAg ICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJcMTVcMTIiLFZWQlVGTCk7Ci0jZWxzZQotI2lmZGVmIEFN SUdBCi0gICAgICAgIGNrc3RybmNweSh2dmJ1ZiwiXG4iLFZWQlVGTCk7Ci0jZWxzZQotI2lmZGVm IEdFTURPUwotICAgICAgICBja3N0cm5jcHkodnZidWYsIlxuIixWVkJVRkwpOwotI2Vsc2UKLSAg ICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJcbiIsVlZCVUZMKTsKLSNlbmRpZiAvKiBHRU1ET1MgKi8K LSNlbmRpZiAvKiBBTUlHQSAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIFNUUkFUVVMg Ki8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBPU0sgKi8K LSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSAgICAgICAgcmV0 dXJuKHZ2YnVmKTsKLQotICAgICAgY2FzZSBWTl9ST1dTOiAgICAgICAgICAgICAgICAgICAgIC8q IFJPV1MgKi8KLSAgICAgIGNhc2UgVk5fQ09MUzogICAgICAgICAgICAgICAgICAgICAvKiBDT0xT ICovCi0gICAgICAgIGNrc3RybmNweSh2dmJ1ZiwoY3ggPT0gVk5fUk9XUykgPyAiMjQiIDogIjgw IixWVkJVRkwpOyAvKiBEZWZhdWx0ICovCi0jaWZkZWYgQ0tfVFRHV1NJWgotI2lmZGVmIE9TMgot ICAgICAgICBpZiAodHRfY29sc1tWVEVSTV0gPCAwIHx8IHR0X3Jvd3NbVlRFUk1dIDwgMCkKLSAg ICAgICAgICB0dGd3c2l6KCk7Ci0gICAgICAgIHNwcmludGYodnZidWYsIiVkIiwgICAgICAgICAg ICAgLyogU0FGRSAqLwotICAgICAgICAgICAgICAgIChjeCA9PSBWTl9ST1dTKSA/IHR0X3Jvd3Nb VlRFUk1dIDogdHRfY29sc1tWVEVSTV0pOwotI2Vsc2UgLyogT1MyICovCi0gICAgICAgIGlmICh0 dGd3c2l6KCkgPiAwKSAgICAgICAgICAgICAgLyogR2V0IHdpbmRvdyBzaXplICovCi0gICAgICAg ICAgaWYgKHR0X2NvbHMgPiAwICYmIHR0X3Jvd3MgPiAwKSAvKiBzZXRzIHR0X3Jvd3MsIHR0X2Nv bHMgKi8KLSAgICAgICAgICAgIHNwcmludGYodnZidWYsIiVkIiwgICAgICAgICAvKiBTQUZFICov Ci0gICAgICAgICAgICAgICAgICAgIChjeCA9PSBWTl9ST1dTKSA/IHR0X3Jvd3MgOiB0dF9jb2xz KTsKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBDS19UVEdXU0laICovCi0gICAgICAgIHJl dHVybih2dmJ1Zik7Ci0KLSAgICAgIGNhc2UgVk5fVFRZUDoKLSNpZmRlZiBOT1RFUk0KLSAgICAg ICAgY2tzdHJuY3B5KHZ2YnVmLCJ1bmtub3duIixWVkJVRkwpOwotI2Vsc2UKLSNpZmRlZiBPUzIK LSAgICAgICAgc3ByaW50Zih2dmJ1ZiwgIiVzIiwgICAgICAgICAgICAvKiBTQUZFICovCi0gICAg ICAgICAgICAgICAgKHR0X3R5cGUgPj0gMCAmJiB0dF90eXBlIDw9IG1heF90dCkgPwotICAgICAg ICAgICAgICAgIHR0X2luZm9bdHRfdHlwZV0ueF9uYW1lIDoKLSAgICAgICAgICAgICAgICAidW5r bm93biIKLSAgICAgICAgICAgICAgICApOwotI2Vsc2UKLSNpZmRlZiBNQUMKLSAgICAgICAgY2tz dHJuY3B5KHZ2YnVmLCJ2dDMyMCIsVlZCVUZMKTsKLSNlbHNlCi0gICAgICAgIHAgPSBnZXRlbnYo IlRFUk0iKTsKLSAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLHAgPyBwIDogInVua25vd24iLFZWQlVG TCsxKTsKLSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT1RF Uk0gKi8KLSAgICAgICAgcmV0dXJuKHZ2YnVmKTsKLQotICAgICAgY2FzZSBWTl9NSU5QOiAgICAg ICAgICAgICAgICAgICAgIC8qIE1JTlBVVCAqLwotICAgICAgICBzcHJpbnRmKHZ2YnVmLCAiJWQi LCBtX2ZvdW5kKTsgIC8qIFNBRkUgKi8KLSAgICAgICAgcmV0dXJuKHZ2YnVmKTsKLSAgICB9IC8q IEJyZWFrIHVwIGxvbmcgc3dpdGNoIHN0YXRlbWVudHMuLi4gKi8KLQotICAgIHN3aXRjaCh5KSB7 Ci0gICAgICBjYXNlIFZOX0NPTk46ICAgICAgICAgICAgICAgICAgICAgLyogQ09OTkVDVElPTiAq LwotICAgICAgICBpZiAoIWxvY2FsKSB7Ci0gICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJyZW1v dGUiLFZWQlVGTCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIW5ldHdvcmsp Ci0gICAgICAgICAgICAgIGNrc3RybmNweSh2dmJ1Ziwic2VyaWFsIixWVkJVRkwpOwotI2lmZGVm IFRDUFNPQ0tFVAotICAgICAgICAgICAgZWxzZSBpZiAobmV0dHlwZSA9PSBORVRfVENQQiB8fCBu ZXR0eXBlID09IE5FVF9UQ1BBKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHR0bnByb3RvID09IE5Q X1RFTE5FVCkKLSAgICAgICAgICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZiwidGNwL2lwX3RlbG5l dCIsVlZCVUZMKTsKLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAgICAgICBlbHNlIGlmICh0dG5w cm90byA9PSBOUF9TU0wgfHwgdHRucHJvdG8gPT0gTlBfU1NMX1JBVykKLSAgICAgICAgICAgICAg ICAgIGNrc3RybmNweSh2dmJ1ZiwidGNwL2lwX3NzbCIsVlZCVUZMKTsKLSAgICAgICAgICAgICAg ICBlbHNlIGlmICh0dG5wcm90byA9PSBOUF9UTFMgfHwgdHRucHJvdG8gPT0gTlBfU1NMX1JBVykK LSAgICAgICAgICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZiwidGNwL2lwX3RscyIsVlZCVUZMKTsK LSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg ICAgICBja3N0cm5jcHkodnZidWYsInRjcC9pcCIsVlZCVUZMKTsKLSAgICAgICAgICAgIH0KLSNl bmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNpZmRlZiBTU0hCVUlMVElOCi0gICAgICAgICAgICBlbHNl IGlmIChuZXR0eXBlID09IE5FVF9TU0gpCi0gICAgICAgICAgICAgICAgICBja3N0cm5jcHkodnZi dWYsInRjcC9pcF9zc2giLFZWQlVGTCk7Ci0jZW5kaWYgLyogU1NIQlVJTFRJTiAqLwotI2lmZGVm IEFOWVgyNQotICAgICAgICAgICAgZWxzZSBpZiAobmV0dHlwZSA9PSBORVRfU1gyNSB8fAotICAg ICAgICAgICAgICAgICAgICAgbmV0dHlwZSA9PSBORVRfVlgyNSB8fAotICAgICAgICAgICAgICAg ICAgICAgbmV0dHlwZSA9PSBORVRfSVgyNQotICAgICAgICAgICAgICAgICAgICAgKQotICAgICAg ICAgICAgICBja3N0cm5jcHkodnZidWYsInguMjUiLFZWQlVGTCk7Ci0jZW5kaWYgLyogQU5ZWDI1 ICovCi0jaWZkZWYgREVDTkVUCi0gICAgICAgICAgICBlbHNlIGlmIChuZXR0eXBlID09IE5FVF9E RUMpIHsKLSAgICAgICAgICAgICAgICBpZiAodHRucHJvdG8gPT0gTlBfTEFUKQotICAgICAgICAg ICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJkZWNuZXRfbGF0IixWVkJVRkwpOwotICAgICAgICAg ICAgICAgIGVsc2UgaWYgKCB0dG5wcm90byA9PSBOUF9DVEVSTSApCi0gICAgICAgICAgICAgICAg ICBja3N0cm5jcHkodnZidWYsImRlY25ldF9jdGVybSIsVlZCVUZMKTsKLSAgICAgICAgICAgICAg ICBlbHNlCi0gICAgICAgICAgICAgICAgICBja3N0cm5jcHkodnZidWYsImRlY25ldCIsVlZCVUZM KTsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBERUNORVQgKi8KLSNpZmRlZiBTVVBFUkxBVAot ICAgICAgICAgICAgZWxzZSBpZiAobmV0dHlwZSA9PSBORVRfU0xBVCkKLSAgICAgICAgICAgICAg Y2tzdHJuY3B5KHZ2YnVmLCJzdXBlcmxhdCIsVlZCVUZMKTsKLSNlbmRpZiAvKiBTVVBFUkxBVCAq LwotI2lmZGVmIE5FVEZJTEUKLSAgICAgICAgICAgIGVsc2UgaWYgKG5ldHR5cGUgPT0gTkVUX0ZJ TEUpCi0gICAgICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZiwibG9jYWxfZmlsZSIsVlZCVUZMKTsK LSNlbmRpZiAvKiBORVRGSUxFICovCi0jaWZkZWYgTkVUQ01ECi0gICAgICAgICAgICBlbHNlIGlm IChuZXR0eXBlID09IE5FVF9DTUQpCi0gICAgICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZiwicGlw ZSIsVlZCVUZMKTsKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSNpZmRlZiBORVRQVFkKLSAgICAgICAg ICAgIGVsc2UgaWYgKG5ldHR5cGUgPT0gTkVUX1BUWSkKLSAgICAgICAgICAgICAgY2tzdHJuY3B5 KHZ2YnVmLCJwc2V1ZG90ZXJtaW5hbCIsVlZCVUZMKTsKLSNlbmRpZiAvKiBORVRQVFkgKi8KLSNp ZmRlZiBORVRETEwKLSAgICAgICAgICAgIGVsc2UgaWYgKG5ldHR5cGUgPT0gTkVUX0RMTCkKLSAg ICAgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJkeW5hbWljX2xpbmtfbGlicmFyeSIsVlZCVUZM KTsKLSNlbmRpZiAvKiBORVRETEwgKi8KLQotI2lmZGVmIE5QSVBFCi0gICAgICAgICAgICBlbHNl IGlmIChuZXR0eXBlID09IE5FVF9QSVBFKQotICAgICAgICAgICAgICBja3N0cm5jcHkodnZidWYs Im5hbWVkX3BpcGUiLFZWQlVGTCk7Ci0jZW5kaWYgLyogTlBJUEUgKi8KLSNpZmRlZiBDS19ORVRC SU9TCi0gICAgICAgICAgICBlbHNlIGlmIChuZXR0eXBlID09IE5FVF9CSU9TKQotICAgICAgICAg ICAgICBja3N0cm5jcHkodnZidWYsIm5ldGJpb3MiLFZWQlVGTCk7Ci0jZW5kaWYgLyogQ0tfTkVU QklPUyAqLwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBja3N0cm5jcHkodnZidWYs InVua25vd24iLFZWQlVGTCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuKHZ2YnVmKTsKLQot I2lmbmRlZiBOT1hGRVIKLSAgICAgIGNhc2UgVk5fU1lTSTogICAgICAgICAgICAgICAgICAgICAv KiBTeXN0ZW0gSUQsIEtlcm1pdCBjb2RlICovCi0gICAgICAgIHJldHVybigoY2hhciAqKWNrc3lz aWQpOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZkZWYgT1MyCi0gICAgICBjYXNlIFZOX1NQ QTogewotICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3BhY2UgPSB6ZHNrc3BhY2UoMCk7Ci0gICAg ICAgICAgaWYgKHNwYWNlID4gMCAmJiBzcGFjZSA8IDEwMjQpCi0gICAgICAgICAgICBzcHJpbnRm KHZ2YnVmLCItMSIpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwcmludGYodnZidWYs IiVsdSIsc3BhY2UpOyAvKiBTQUZFICovCi0gICAgICAgICAgcmV0dXJuKHZ2YnVmKTsKLSAgICAg IH0KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmbmRlZiBOT1hGRVIKLSAgICAgIGNhc2UgVk5fUVVF OiB7Ci0gICAgICAgICAgZXh0ZXJuIGNoYXIgcXVlcnlidWZbXTsKLSAgICAgICAgICByZXR1cm4o cXVlcnlidWYpOwotICAgICAgfQotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZuZGVmIE5PQ1NF VFMKLSAgICAgIGNhc2UgVk5fQ1NFVDoKLSNpZmRlZiBPUzIKLSAgICAgICAgc3ByaW50Zih2dmJ1 ZiwiY3AlZCIsb3MyZ2V0Y3AoKSk7IC8qIFNBRkUgKi8KLSNlbHNlCi0gICAgICAgIGNrc3RybmNw eSh2dmJ1ZixmY3NpbmZvW2ZjaGFyc2V0XS5rZXl3b3JkLFZWQlVGTCsxKTsKLSNlbmRpZiAvKiBP UzIgKi8KLSAgICAgICAgcmV0dXJuKHZ2YnVmKTsKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSNp ZmRlZiBPUzIKLSAgICAgIGNhc2UgVk5fRVhFRElSOgotICAgICAgICByZXR1cm4oZXhlZGlyKTsK LSAgICAgIGNhc2UgVk5fU1RBUjoKLSAgICAgICAgcmV0dXJuKHN0YXJ0dXBkaXIpOwotI2Vsc2UK LSAgICAgIGNhc2UgVk5fRVhFRElSOgotICAgICAgICByZXR1cm4oZXhlZGlyID8gZXhlZGlyIDog IiIpOwotI2lmZGVmIFZNU09SVU5JWAotICAgICAgY2FzZSBWTl9TVEFSOgotICAgICAgICByZXR1 cm4oc3RhcnR1cGRpcik7Ci0jZW5kaWYgLyogVk1TT1JVTklYICovCi0jZW5kaWYgLyogT1MyICov Ci0KLSAgICAgIGNhc2UgVk5fSU5JOgotICAgICAgICByZXR1cm4oaW5pZGlyKTsKLQotICAgICAg Y2FzZSBWTl9NRE06Ci0gICAgICAgIHJldHVybihnbWRtdHlwKCkpOwotCi0gICAgICBjYXNlIFZO X0VWQUw6Ci0gICAgICAgIHJldHVybihldmFsYnVmKTsKLQotI2lmbmRlZiBOT0RJQUwKLSAgICAg IGNhc2UgVk5fRF9DQzogICAgICAgICAgICAgICAgICAgICAvKiBESUFMIENPVU5UUlktQ09ERSAq LwotICAgICAgICByZXR1cm4oZGlhbGxjYyA/IGRpYWxsY2MgOiAiIik7Ci0KLSAgICAgIGNhc2Ug Vk5fRF9BQzogICAgICAgICAgICAgICAgICAgICAvKiBESUFMIEFSRUEtQ09ERSAqLwotICAgICAg ICByZXR1cm4oZGlhbGxhYyA/IGRpYWxsYWMgOiAiIik7Ci0KLSAgICAgIGNhc2UgVk5fRF9JUDog ICAgICAgICAgICAgICAgICAgICAvKiBESUFMIElOVEVSTkFUSU9OQUwtUFJFRklYICovCi0gICAg ICAgIHJldHVybihkaWFsaXhwID8gZGlhbGl4cCA6ICIiKTsKLQotICAgICAgY2FzZSBWTl9EX0xQ OiAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwgTEQtUFJFRklYICovCi0gICAgICAgIHJldHVy bihkaWFsbGRwID8gZGlhbGxkcCA6ICIiKTsKLQotICAgICAgY2FzZSBWTl9EX0xDUDogICAgICAg ICAgICAgICAgICAgIC8qIERJQUwgTE9DQUwtUFJFRklYICovCi0gICAgICAgIHJldHVybihkaWFs bGNwID8gZGlhbGxjcCA6ICIiKTsKLQotICAgICAgY2FzZSBWTl9EX1BYWDogICAgICAgICAgICAg ICAgICAgIC8qIERJQUwgUEJYLUVYQ0hBTkdFIHRoYXQgbWF0Y2hlZCAqLwotICAgICAgICByZXR1 cm4obWF0Y2hweHggPyBtYXRjaHB4eCA6ICIiKTsKLSNlbHNlCi0gICAgICBjYXNlIFZOX0RfQ0M6 ICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBDT1VOVFJZLUNPREUgKi8KLSAgICAgIGNhc2Ug Vk5fRF9BQzogICAgICAgICAgICAgICAgICAgICAvKiBESUFMIEFSRUEtQ09ERSAqLwotICAgICAg Y2FzZSBWTl9EX0lQOiAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwgSU5URVJOQVRJT05BTC1Q UkVGSVggKi8KLSAgICAgIGNhc2UgVk5fRF9MUDogICAgICAgICAgICAgICAgICAgICAvKiBESUFM IExELVBSRUZJWCAqLwotICAgICAgY2FzZSBWTl9EX0xDUDogICAgICAgICAgICAgICAgICAgIC8q IERJQUwgTE9DQUwtUFJFRklYICovCi0gICAgICBjYXNlIFZOX0RfUFhYOiAgICAgICAgICAgICAg ICAgICAgLyogRElBTCBQQlgtRVhDSEFOR0UgKi8KLSAgICAgICAgcmV0dXJuKCIiKTsKLSNlbmRp ZiAvKiBOT0RJQUwgKi8KLSAgICAgIGNhc2UgVk5fVUlEOgotI2lmZGVmIFVOSVgKLSAgICAgICAg ewotI2lmZGVmIElLU0QKLSAgICAgICAgICAgIGlmIChpbnNlcnZlcikKLSAgICAgICAgICAgICAg cmV0dXJuKChjaGFyICopdWlkYnVmKTsKLSAgICAgICAgICAgIGVsc2UKLSNlbmRpZiAvKiBJS1NE ICovCi0gICAgICAgICAgICAgIGlmICh1aWRidWZbMF0pCi0gICAgICAgICAgICAgICAgcmV0dXJu KChjaGFyICopdWlkYnVmKTsKLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJl dHVybih3aG9hbWkoKSk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIHJldHVybigoY2hhciAq KXVpZGJ1Zik7Ci0jZW5kaWYgLyogVU5JWCAqLwotICAgIH0gLyogQnJlYWsgdXAgbG9uZyBzd2l0 Y2ggc3RhdGVtZW50cy4uLiAqLwotCi0gICAgc3dpdGNoKHkpIHsKLSAgICAgIGNhc2UgVk5fUFdE OgotI2lmZGVmIE9TMgotICAgICAgICBpZiAoYWN0aXZlY21kID09IFhYT1VUIHx8IGFjdGl2ZWNt ZCA9PSBYWExOT1VUKSB7Ci0gICAgICAgICAgICBja3N0cm5jcHkodnZidWYscHdidWYsVlZCVUZM KTsKLSAgICAgICAgICAgIGNrX2VuY3J5cHQoKGNoYXIgKil2dmJ1Zik7Ci0gICAgICAgICAgICBy ZXR1cm4oKGNoYXIgKil2dmJ1Zik7Ci0gICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIE9TMiAqLwot ICAgICAgICAgIHJldHVybigoY2hhciAqKXB3YnVmKTsKLQotICAgICAgY2FzZSBWTl9QUk06Ci0g ICAgICAgIHJldHVybigoY2hhciAqKXBybWJ1Zik7Ci0KLSAgICAgIGNhc2UgVk5fUFJPVE86Ci0j aWZkZWYgTk9YRkVSCi0gICAgICAgIHJldHVybigibm9uZSIpOwotI2Vsc2UKLSNpZmRlZiBDS19Y WVoKLSAgICAgICAgcmV0dXJuKHB0YWJbcHJvdG9jb2xdLnBfbmFtZSk7Ci0jZWxzZQotICAgICAg ICByZXR1cm4oImtlcm1pdCIpOwotI2VuZGlmIC8qIENLX1hZWiAqLwotI2VuZGlmIC8qIE5PWEZF UiAqLwotCi0jaWZuZGVmIE5PWEZFUgotI2lmZGVmIENLX1RNUERJUgotICAgICAgY2FzZSBWTl9E TERJUjoKLSAgICAgICAgcmV0dXJuKGRsZGlyID8gZGxkaXIgOiAiIik7Ci0jZW5kaWYgLyogQ0tf VE1QRElSICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYgTk9ESUFMCi0gICAgICBj YXNlIFZOX01fSU5JOiAgICAgICAgICAgICAgICAgICAgLyogTW9kZW0gaW5pdCBzdHJpbmcgKi8K LSAgICAgICAgcmV0dXJuKGRpYWxpbmkgPyBkaWFsaW5pIDogKG0gPyBtLT53YWtlX3N0ciA6ICIi KSk7Ci0KLSAgICAgIGNhc2UgVk5fTV9EQ006ICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSBk aWFsIGNvbW1hbmQgKi8KLSAgICAgICAgcmV0dXJuKGRpYWxjbWQgPyBkaWFsY21kIDogKG0gPyBt LT5kaWFsX3N0ciA6ICIiKSk7Ci0KLSAgICAgIGNhc2UgVk5fTV9EQ086ICAgICAgICAgICAgICAg ICAgICAvKiBNb2RlbSBkYXRhIGNvbXByZXNzaW9uIG9uICovCi0gICAgICAgIHJldHVybihkaWFs ZGNvbiA/IGRpYWxkY29uIDogKG0gPyBtLT5kY19vbl9zdHIgOiAiIikpOwotCi0gICAgICBjYXNl IFZOX01fRENYOiAgICAgICAgICAgICAgICAgICAgLyogTW9kZW0gZGF0YSBjb21wcmVzc2lvbiBv ZmYgKi8KLSAgICAgICAgcmV0dXJuKGRpYWxkY29mZiA/IGRpYWxkY29mZiA6IChtID8gbS0+ZGNf b2ZmX3N0ciA6ICIiKSk7Ci0KLSAgICAgIGNhc2UgVk5fTV9FQ086ICAgICAgICAgICAgICAgICAg ICAvKiBNb2RlbSBlcnJvciBjb3JyZWN0aW9uIG9uICovCi0gICAgICAgIHJldHVybihkaWFsZWNv biA/IGRpYWxlY29uIDogKG0gPyBtLT5lY19vbl9zdHIgOiAiIikpOwotCi0gICAgICBjYXNlIFZO X01fRUNYOiAgICAgICAgICAgICAgICAgICAgLyogTW9kZW0gZXJyb3IgY29ycmVjdGlvbiBvZmYg Ki8KLSAgICAgICAgcmV0dXJuKGRpYWxlY29mZiA/IGRpYWxlY29mZiA6IChtID8gbS0+ZWNfb2Zm X3N0ciA6ICIiKSk7Ci0KLSAgICAgIGNhc2UgVk5fTV9BQU86ICAgICAgICAgICAgICAgICAgICAv KiBNb2RlbSBhdXRvYW5zd2VyIG9uICovCi0gICAgICAgIHJldHVybihkaWFsYWFvbiA/IGRpYWxh YW9uIDogKG0gPyBtLT5hYV9vbl9zdHIgOiAiIikpOwotCi0gICAgICBjYXNlIFZOX01fQUFYOiAg ICAgICAgICAgICAgICAgICAgLyogTW9kZW0gYXV0b2Fuc3dlciBvZmYgKi8KLSAgICAgICAgcmV0 dXJuKGRpYWxhYW9mZiA/IGRpYWxhYW9mZiA6IChtID8gbS0+YWFfb2ZmX3N0ciA6ICIiKSk7Ci0K LSAgICAgIGNhc2UgVk5fTV9IVVA6ICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSBoYW5ndXAg Y29tbWFuZCAqLwotICAgICAgICByZXR1cm4oZGlhbGhjbWQgPyBkaWFsaGNtZCA6IChtID8gbS0+ aHVwX3N0ciA6ICIiKSk7Ci0KLSAgICAgIGNhc2UgVk5fTV9IV0Y6ICAgICAgICAgICAgICAgICAg ICAvKiBNb2RlbSBoYXJkd2FyZSBmbG93IGNvbW1hbmQgKi8KLSAgICAgICAgcmV0dXJuKGRpYWxo d2ZjID8gZGlhbGh3ZmMgOiAobSA/IG0tPmh3ZmNfc3RyIDogIiIpKTsKLQotICAgICAgY2FzZSBW Tl9NX1NXRjogICAgICAgICAgICAgICAgICAgIC8qIE1vZGVtIHNvZnR3YXJlIGZsb3cgY29tbWFu ZCAqLwotICAgICAgICByZXR1cm4oZGlhbHN3ZmMgPyBkaWFsc3dmYyA6IChtID8gbS0+c3dmY19z dHIgOiAiIikpOwotCi0gICAgICBjYXNlIFZOX01fTkZDOiAgICAgICAgICAgICAgICAgICAgLyog TW9kZW0gbm8gZmxvdy1jb250cm9sIGNvbW1hbmQgKi8KLSAgICAgICAgcmV0dXJuKGRpYWxub2Zj ID8gZGlhbG5vZmMgOiAobSA/IG0tPm5vZmNfc3RyIDogIiIpKTsKLQotICAgICAgY2FzZSBWTl9N X1BETTogICAgICAgICAgICAgICAgICAgIC8qIE1vZGVtIHB1bHNlIGRpYWxpbmcgbW9kZSAqLwot ICAgICAgICByZXR1cm4oZGlhbHB1bHNlID8gZGlhbHB1bHNlIDogKG0gPyBtLT5wdWxzZSA6ICIi KSk7Ci0KLSAgICAgIGNhc2UgVk5fTV9URE06ICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSB0 b25lIGRpYWxpbmcgbW9kZSAqLwotICAgICAgICByZXR1cm4oZGlhbHRvbmUgPyBkaWFsdG9uZSA6 IChtID8gbS0+dG9uZSA6ICIiKSk7Ci0KLSAgICAgIGNhc2UgVk5fTV9OQU06ICAgICAgICAgICAg ICAgICAgICAvKiBNb2RlbSBmdWxsIG5hbWUgKi8KLSAgICAgICAgcmV0dXJuKGRpYWxuYW1lID8g ZGlhbG5hbWUgOiAobSA/IG0tPm5hbWUgOiAiIikpOwotI2Vsc2UKLSAgICAgIGNhc2UgVk5fTV9J Tkk6ICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSBpbml0IHN0cmluZyAqLwotICAgICAgY2Fz ZSBWTl9NX0RDTTogICAgICAgICAgICAgICAgICAgIC8qIE1vZGVtIGRpYWwgY29tbWFuZCAqLwot ICAgICAgY2FzZSBWTl9NX0RDTzogICAgICAgICAgICAgICAgICAgIC8qIE1vZGVtIGRhdGEgY29t cHJlc3Npb24gb24gKi8KLSAgICAgIGNhc2UgVk5fTV9EQ1g6ICAgICAgICAgICAgICAgICAgICAv KiBNb2RlbSBkYXRhIGNvbXByZXNzaW9uIG9mZiAqLwotICAgICAgY2FzZSBWTl9NX0VDTzogICAg ICAgICAgICAgICAgICAgIC8qIE1vZGVtIGVycm9yIGNvcnJlY3Rpb24gb24gKi8KLSAgICAgIGNh c2UgVk5fTV9FQ1g6ICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSBlcnJvciBjb3JyZWN0aW9u IG9mZiAqLwotICAgICAgY2FzZSBWTl9NX0FBTzogICAgICAgICAgICAgICAgICAgIC8qIE1vZGVt IGF1dG9hbnN3ZXIgb24gKi8KLSAgICAgIGNhc2UgVk5fTV9BQVg6ICAgICAgICAgICAgICAgICAg ICAvKiBNb2RlbSBhdXRvYW5zd2VyIG9mZiAqLwotICAgICAgY2FzZSBWTl9NX0hVUDogICAgICAg ICAgICAgICAgICAgIC8qIE1vZGVtIGhhbmd1cCBjb21tYW5kICovCi0gICAgICBjYXNlIFZOX01f SFdGOiAgICAgICAgICAgICAgICAgICAgLyogTW9kZW0gaGFyZHdhcmUgZmxvdyBjb21tYW5kICov Ci0gICAgICBjYXNlIFZOX01fU1dGOiAgICAgICAgICAgICAgICAgICAgLyogTW9kZW0gc29mdHdh cmUgZmxvdyBjb21tYW5kICovCi0gICAgICBjYXNlIFZOX01fTkZDOiAgICAgICAgICAgICAgICAg ICAgLyogTW9kZW0gbm8gZmxvdy1jb250cm9sIGNvbW1hbmQgKi8KLSAgICAgIGNhc2UgVk5fTV9Q RE06ICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSBwdWxzZSBkaWFsaW5nIG1vZGUgKi8KLSAg ICAgIGNhc2UgVk5fTV9URE06ICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSB0b25lIGRpYWxp bmcgbW9kZSAqLwotICAgICAgY2FzZSBWTl9NX05BTToKLSAgICAgICAgcmV0dXJuKCIiKTsKLSNl bmRpZiAvKiBOT0RJQUwgKi8KLQotICAgICAgY2FzZSBWTl9JU1RBVDogICAgICAgICAgICAgICAg ICAgIC8qIElOUFVUIHN0YXR1cyAqLwotICAgICAgICBzcHJpbnRmKHZ2YnVmLCAiJWQiLCBpbnN0 YXR1cyk7IC8qIFNBRkUgKi8KLSAgICAgICAgcmV0dXJuKHZ2YnVmKTsKLQotICAgICAgY2FzZSBW Tl9URU1QOiAgICAgICAgICAgICAgICAgICAgIC8qIFRlbXBvcmFyeSBkaXJlY3RvcnkgKi8KLSAg ICAgICAgaWYgKHRlbXBkaXIpIHsKLSAgICAgICAgICAgIHAgPSB0ZW1wZGlyOwotICAgICAgICB9 IGVsc2UgewotI2lmZGVmIE9TMgotI2lmZGVmIE5UCi0gICAgICAgICAgICBwID0gZ2V0ZW52KCJL OTVUTVAiKTsKLSNlbHNlCi0gICAgICAgICAgICBwID0gZ2V0ZW52KCJLMlRNUCIpOwotI2VuZGlm IC8qIE5UICovCi0gICAgICAgICAgICBpZiAoICFwICkKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAg ICAgICAgICAgcCA9IGdldGVudigiQ0tfVE1QIik7Ci0gICAgICAgICAgICBpZiAoIXApIHAgPSBn ZXRlbnYoIlRNUERJUiIpOwotICAgICAgICAgICAgaWYgKCFwKSBwID0gZ2V0ZW52KCJURU1QIik7 Ci0gICAgICAgICAgICBpZiAoIXApIHAgPSBnZXRlbnYoIlRNUCIpOwotCi0jaWZkZWYgT1MyT1JV TklYCi0gICAgICAgICAgICBpZiAocCkgewotICAgICAgICAgICAgICAgIGludCBsZW4gPSBzdHJs ZW4ocCk7Ci0gICAgICAgICAgICAgICAgaWYgKHBbbGVuLTFdICE9ICcvJwotI2lmZGVmIE9TMgot ICAgICAgICAgICAgICAgICAgICAmJiBwW2xlbi0xXSAhPSAnXFwnCi0jZW5kaWYgLyogT1MyICov Ci0gICAgICAgICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGljIGNo YXIgZm9vW0NLTUFYUEFUSF07Ci0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShmb28scCxD S01BWFBBVEgpOwotICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQoZm9vLCIvIixDS01BWFBB VEgpOwotICAgICAgICAgICAgICAgICAgICBwID0gZm9vOwotICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIH0gZWxzZQotI2Vsc2UgLyogT1MyT1JVTklYICovCi0gICAgICAgICAgICBpZiAo IXApCi0jZW5kaWYgLyogT1MyT1JVTklYICovCi0jaWZkZWYgVU5JWCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogU3lzdGVtcyB0aGF0IGhhdmUgYSBzdGFuZGFyZCAqLwotICAgICAgICAg ICAgICBwID0gIi90bXAvIjsgICAgICAgICAgICAgIC8qIHRlbXBvcmFyeSBkaXJlY3RvcnkuLi4g Ki8KLSNlbHNlCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICAgICAgICAgICAgcCA9ICI6VE1QOiI7 Ci0jZWxzZQotICAgICAgICAgICAgICBwID0gIiI7Ci0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8K LSNlbmRpZiAvKiBVTklYICovCi0gICAgICAgIH0KLSAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLHAs VlZCVUZMKTsKLSAgICAgICAgcCA9IHZ2YnVmOwotCi0vKiBUaGlzIG5lZWRzIGdlbmVyYWxpemlu ZyBmb3IgVk9TLCBBT1MvVlMsIGV0Yy4uLiAqLwotCi0gICAgICAgIHdoaWxlICgqcCkgewotI2lm ZGVmIE9TMgotICAgICAgICAgICAgaWYgKCpwID09ICdcXCcpICpwID0gJy8nOwotI2VuZGlmIC8q IE9TMiAqLwotICAgICAgICAgICAgcCsrOwotICAgICAgICB9Ci0jaWZuZGVmIFZNUwotICAgICAg ICBpZiAocCA+IHZ2YnVmKSB7Ci0gICAgICAgICAgICBjaGFyIGMgPSAgICAgICAgICAgICAgICAg ICAgLyogRGlyZWN0b3J5IHRlcm1pbmF0aW9uIGNoYXJhY3RlciAqLwotI2lmZGVmIE1BQwotICAg ICAgICAgICAgICAnOicKLSNlbHNlCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICAgICAgICAgICAg JzonCi0jZWxzZQotI2lmZGVmIFNUUkFUVVMKLSAgICAgICAgICAgICAgJz4nCi0jZWxzZQotICAg ICAgICAgICAgICAnLycKLSNlbmRpZiAvKiBTVFJBVFVTICovCi0jZW5kaWYgLyogZGF0YWdlbmVy YWwgKi8KLSNlbmRpZiAvKiBNQUMgKi8KLSAgICAgICAgICAgICAgICA7Ci0KLSAgICAgICAgICAg IGlmICgqKHAtMSkgIT0gYykgewotICAgICAgICAgICAgICAgICpwKysgPSBjOwotICAgICAgICAg ICAgICAgICpwID0gTlVMOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLyogVk1T ICovCi0gICAgICAgIHJldHVybih2dmJ1Zik7Ci0gICAgfSAvKiBCcmVhayB1cCBsb25nIHN3aXRj aCBzdGF0ZW1lbnRzLi4uICovCi0KLSAgICBzd2l0Y2goeSkgewotICAgICAgY2FzZSBWTl9FUlJO TzogICAgICAgICAgICAgICAgICAgIC8qIEVycm9yIG51bWJlciAqLwotI2lmZGVmIFZNUwotICAg ICAgICB7Ci0gICAgICAgICAgICBleHRlcm4gaW50IHZtc19sYXN0ZXJyOwotICAgICAgICAgICAg c3ByaW50Zih2dmJ1ZiwgIiVkIiwgdm1zX2xhc3RlcnIpOyAvKiBTQUZFICovCi0gICAgICAgIH0K LSNlbHNlCi0gICAgICAgIHNwcmludGYodnZidWYsICIlZCIsIGVycm5vKTsgICAgLyogU0FGRSAq LwotI2VuZGlmIC8qIFZNUyAqLwotICAgICAgICByZXR1cm4odnZidWYpOwotCi0gICAgICBjYXNl IFZOX0VSU1RSOiAgICAgICAgICAgICAgICAgICAgLyogRXJyb3Igc3RyaW5nICovCi0gICAgICAg IGNrc3RybmNweSh2dmJ1Zixja19lcnJzdHIoKSxWVkJVRkwpOwotICAgICAgICByZXR1cm4odnZi dWYpOwotCi0jaWZuZGVmIE5PWEZFUgotICAgICAgY2FzZSBWTl9SUFNJWjogICAgICAgICAgICAg ICAgICAgIC8qIFJFQ0VJVkUgcGFja2V0LWxlbmd0aCAqLwotICAgICAgICBzcHJpbnRmKHZ2YnVm LCIlZCIsdXJwc2l6KTsgICAgIC8qIFNBRkUgKi8KLSAgICAgICAgcmV0dXJuKHZ2YnVmKTsKLQot ICAgICAgY2FzZSBWTl9XSU5ETzogICAgICAgICAgICAgICAgICAgIC8qIFdJTkRPVyBzbG90cyAq LwotICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsd3Nsb3RyKTsgICAgIC8qIFNBRkUgKi8KLSAg ICAgICAgcmV0dXJuKHZ2YnVmKTsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotICAgICAgY2FzZSBW Tl9URkxOOiAgICAgICAgICAgICAgICAgICAgIC8qIFRBS0UtZmlsZSBsaW5lIG51bWJlciAqLwot ICAgICAgICBpZiAodGxldmVsID4gLTEpIHsKLSAgICAgICAgICAgIHNwcmludGYodnZidWYsICIl ZCIsIHRmbGluZVt0bGV2ZWxdKTsgLyogU0FGRSAqLwotICAgICAgICAgICAgcmV0dXJuKHZ2YnVm KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgcmV0dXJuKCIwIik7Ci0KLSAgICAgIGNhc2Ug Vk5fTURNU0c6ICAgICAgICAgICAgICAgICAgICAvKiBESUFMUkVTVUxUICovCi0jaWZuZGVmIE5P RElBTAotICAgICAgICByZXR1cm4oKGNoYXIgKiltb2RlbW1zZyk7Ci0jZWxzZQotICAgICAgICBy ZXR1cm4oIiIpOwotI2VuZGlmIC8qIE5PRElBTCAqLwotCi0gICAgICBjYXNlIFZOX0ROVU06ICAg ICAgICAgICAgICAgICAgICAgLyogRElBTE5VTUJFUiAqLwotI2lmbmRlZiBOT0RJQUwKLSAgICAg ICAgcmV0dXJuKGRpYWxudW0gPyAoY2hhciAqKSBkaWFsbnVtIDogIiIpOwotI2Vsc2UKLSAgICAg ICAgcmV0dXJuKCIiKTsKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLQotICAgICAgY2FzZSBWTl9BUEM6 Ci0gICAgICAgIHNwcmludGYodnZidWYsICIlZCIsICAgICAgICAgICAgLyogU0FGRSAqLwotI2lm ZGVmIENLX0FQQwotICAgICAgICAgICAgICAgIGFwY2FjdGl2ZQotI2Vsc2UKLSAgICAgICAgICAg ICAgICAwCi0jZW5kaWYgLyogQ0tfQVBDICovCi0gICAgICAgICAgICAgICAgKTsKLSAgICAgICAg cmV0dXJuKChjaGFyICopdnZidWYpOwotCi0jaWZkZWYgT1MyCi0jaWZuZGVmIE5PS1ZFUkJTCi0g ICAgICBjYXNlIFZOX1RSTUs6Ci0gICAgICAgICAgc3ByaW50Zih2dmJ1ZiwgIiVkIiwga2V5bWFj KTsgLyogU0FGRSAqLwotICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7Ci0jZW5kaWYgLyog Tk9LVkVSQlMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgICAgY2FzZSBWTl9JUEFERFI6Ci0j aWZkZWYgVENQU09DS0VUCi0jaWZuZGVmIE9TSwotICAgICAgLyogVGhpcyBkdW1wcyBjb3JlIG9u IE9TLTkgZm9yIHNvbWUgcmVhc29uLCBidXQgb25seSBpZiBleGVjdXRlZCAqLwotICAgICAgLyog YmVmb3JlIHdlIGhhdmUgbWFkZSBhIFRDUCBjb25uZWN0aW9uLiAgVGhpcyBpcyBvYnZpb3VzbHkg bm90ICovCi0gICAgICAvKiB0aGUgaWRlYWwgZml4LiAqLwotICAgICAgICBpZiAoIW15aXBhZGRy WzBdKQotICAgICAgICAgIGdldGxvY2FsaXBhZGRyKCk7Ci0jZW5kaWYgLyogT1NLICovCi0jZW5k aWYgLyogVENQU09DS0VUICovCi0gICAgICAgIGNrc3RybmNweSh2dmJ1ZiwKLSNpZmRlZiBUQ1BT T0NLRVQKLSAgICAgICAgICAgICAgICAoY2hhciAqKW15aXBhZGRyLAotI2Vsc2UKLSAgICAgICAg ICAgICAgICAiIiwKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSAgICAgICAgICAgICAgICBWVkJV RkwpOwotICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7Ci0KLSNpZm5kZWYgTk9YRkVSCi0g ICAgICBjYXNlIFZOX0NSQzE2OiAgICAgICAgICAgICAgICAgICAgLyogQ1JDLTE2IG9mIG1vc3Qg cmVjZW50IHRyYW5zZmVyICovCi0gICAgICAgIHNwcmludGYodnZidWYsIiVkIixjcmMxNik7ICAg ICAgLyogU0FGRSAqLwotICAgICAgICByZXR1cm4odnZidWYpOwotI2VuZGlmIC8qIE5PWEZFUiAq LwotCi0jaWZkZWYgQ0tfUElECi0gICAgICBjYXNlIFZOX1BJRDoKLSNpZmRlZiBJS1NECi0jaWZk ZWYgQ0tfTE9HSU4KLSAgICAgICAgaWYgKGluc2VydmVyICYmIGlzZ3Vlc3QpCi0gICAgICAgICAg cmV0dXJuKCIiKTsKLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotI2VuZGlmIC8qIElLU0QgKi8KLSAg ICAgICAgcmV0dXJuKGNrZ2V0cGlkKCkpOwotI2VuZGlmIC8qIENLX1BJRCAqLwotCi0jaWZuZGVm IE5PWEZFUgotICAgICAgY2FzZSBWTl9GTkFNOiB7ICAgICAgICAgICAgICAgICAgIC8qIFx2KGZp bGVuYW1lKSAqLwotICAgICAgICAgIGV4dGVybiBjaGFyIGZpbG5hbVtdLCBvZm4xW10sICpzZnNw ZWMsICpycmZzcGVjOwotICAgICAgICAgIGNoYXIgKiB0bXA7Ci0gICAgICAgICAgc3dpdGNoICh3 aGF0KSB7ICAgICAgICAgICAgICAgLyogRmlsZSB0cmFuc2ZlciBpcyBpbiBwcm9ncmVzcyAqLwot I2lmZGVmIE5FV0ZUUAotICAgICAgICAgICAgY2FzZSAoV19GVFB8V19SRUNWKToKLSAgICAgICAg ICAgIGNhc2UgKFdfRlRQfFdfU0VORCk6Ci0gICAgICAgICAgICAgIHJldHVybigoY2hhciAqKWZp bG5hbSk7Ci0jZW5kaWYgLyogTkVXRlRQICovCi0gICAgICAgICAgICBjYXNlIFdfUkVDVjoKLSAg ICAgICAgICAgIGNhc2UgV19SRU1POgotICAgICAgICAgICAgICByZXR1cm4oKGNoYXIgKilvZm4x KTsKLSAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAvKiBNb3N0IHJlY2Vu dCBmaWxlIHRyYW5zZmVycmVkICovCi0gICAgICAgICAgICAgIGlmIChmaWxuYW1bMF0pIHsgICAg ICAgICAgLyogKGlmIGFueSkgKi8KLSAgICAgICAgICAgICAgICAgIHJldHVybigoY2hhciAqKWZp bG5hbSk7Ci0gICAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdHhmZXIgJiBXX1NFTkQgJiYgc2Zz cGVjKSB7Ci0gICAgICAgICAgICAgICAgICBpZiAoZm5zcGF0aCA9PSBQQVRIX09GRikKLSAgICAg ICAgICAgICAgICAgICAgenN0cmlwKHNmc3BlYywmdG1wKTsKLSAgICAgICAgICAgICAgICAgIGVs c2UKLSAgICAgICAgICAgICAgICAgICAgdG1wID0gc2ZzcGVjOwotICAgICAgICAgICAgICAgICAg cmV0dXJuKHRtcCk7Ci0gICAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdHhmZXIgJiBXX1JFQ1Yg JiYgcnJmc3BlYykgewotICAgICAgICAgICAgICAgICAgaWYgKGZucnBhdGggPT0gUEFUSF9PRkYp Ci0gICAgICAgICAgICAgICAgICAgIHpzdHJpcChycmZzcGVjLCZ0bXApOwotICAgICAgICAgICAg ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB0bXAgPSBycmZzcGVjOwotICAgICAgICAg ICAgICAgICAgcmV0dXJuKHRtcCk7Ci0gICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg ICAgIHJldHVybigiIik7Ci0gICAgICAgICAgfQotICAgICAgfQotICAgICAgY2FzZSBWTl9GTlVN OiAgICAgICAgICAgICAgICAgICAgIC8qIFx2KGZpbGVudW0pICovCi0gICAgICAgIHNwcmludGYo dnZidWYsIiVsZCIsZmlsY250KTsgICAgLyogU0FGRSAqLwotICAgICAgICByZXR1cm4oKGNoYXIg Kil2dmJ1Zik7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZmRlZiBQRVhJVFNUQVQKLSAgICAg IGNhc2UgVk5fUEVYSVQ6IHsKLSAgICAgICAgICBleHRlcm4gaW50IHBleGl0c3RhdDsKLSAgICAg ICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIscGV4aXRzdGF0KTsgLyogU0FGRSAqLwotICAgICAgICAg IHJldHVybigoY2hhciAqKXZ2YnVmKTsKLSAgICAgIH0KLSNlbmRpZiAvKiBQRVhJVFNUQVQgKi8K LQotI2lmbmRlZiBOT1hGRVIKLSAgICAgIGNhc2UgVk5fUF84QklUOgotICAgICAgICB2dmJ1Zlsw XSA9IHBhcml0eSA/IGVicSA6IE5VTDsKLSAgICAgICAgdnZidWZbMV0gPSBOVUw7Ci0gICAgICAg IHJldHVybigoY2hhciAqKXZ2YnVmKTsKLQotICAgICAgY2FzZSBWTl9QX0NUTDogewotICAgICAg ICAgIGV4dGVybiBDSEFSIG15Y3RscTsKLSAgICAgICAgICB2dmJ1ZlswXSA9IG15Y3RscTsKLSAg ICAgICAgICB2dmJ1ZlsxXSA9IE5VTDsKLSAgICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7 Ci0gICAgICB9Ci0gICAgICBjYXNlIFZOX1BfUlBUOiB7Ci0gICAgICAgICAgZXh0ZXJuIGludCBy cHRlbmE7Ci0gICAgICAgICAgdnZidWZbMF0gPSBycHRlbmEgPyBycHRxIDogTlVMOwotICAgICAg ICAgIHZ2YnVmWzFdID0gTlVMOwotICAgICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKLSAg ICAgIH0KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmZGVmIE9TMgotICAgICAgY2FzZSBWTl9S RUdOOgotICAgICAgICByZXR1cm4oZ2V0X3JlZ19uYW1lKCkpOwotICAgICAgY2FzZSBWTl9SRUdP OgotICAgICAgICByZXR1cm4oZ2V0X3JlZ19jb3JwKCkpOwotICAgICAgY2FzZSBWTl9SRUdTOgot ICAgICAgICByZXR1cm4oZ2V0X3JlZ19zbigpKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB9IC8q IEJyZWFrIHVwIGxvbmcgc3dpdGNoIHN0YXRlbWVudHMuLi4gKi8KLQotICAgIHN3aXRjaCh5KSB7 Ci0gICAgICBjYXNlIFZOX1hQUk9HOgotI2lmZGVmIE9TMgotI2lmZGVmIE5UCi0jaWZkZWYgS1VJ Ci0gICAgICAgIHJldHVybigiSy05NUciKTsKLSNlbHNlCi0gICAgICAgIHJldHVybigiSy05NSIp OwotI2VuZGlmIC8qIEtVSSAqLwotI2Vsc2UKLSAgICAgICAgcmV0dXJuKCJLLzIiKTsKLSNlbmRp ZiAvKiBOVCAqLwotI2Vsc2UKLSAgICAgICAgcmV0dXJuKCJDLUtlcm1pdCIpOwotI2VuZGlmIC8q IE9TMiAqLwotCi0gICAgICBjYXNlIFZOX0VESVRPUjoKLSNpZmRlZiBOT0ZSSUxMUwotICAgICAg ICByZXR1cm4oIiIpOwotI2Vsc2UKLSNpZmRlZiBOT1BVU0gKLSAgICAgICAgcmV0dXJuKCIiKTsK LSNlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGV4dGVybiBjaGFyIGVkaXRvcltdOwotICAg ICAgICAgICAgY2hhciAqc3M7Ci0gICAgICAgICAgICBpZiAoIWVkaXRvclswXSkgewotICAgICAg ICAgICAgICAgIHNzID0gZ2V0ZW52KCJFRElUT1IiKTsKLSAgICAgICAgICAgICAgICBpZiAoc3Mp IHsKLSAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KGVkaXRvcixzcyxDS01BWFBBVEgpOwot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlYnVnKEYxMTAs IlxcdihlZGl0b3IpIixlZGl0b3IsMCk7Ci0gICAgICAgICAgICByZXR1cm4oZWRpdG9yWzBdID8g KGNoYXIgKillZGl0b3IgOiAiIik7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT1BVU0ggKi8KLSNl bmRpZiAvKiBOT0ZSSUxMUyAqLwotCi0gICAgICBjYXNlIFZOX0VET1BUOgotI2lmZGVmIE5PRlJJ TExTCi0gICAgICAgIHJldHVybigiIik7Ci0jZWxzZQotI2lmZGVmIE5PUFVTSAotICAgICAgICBy ZXR1cm4oIiIpOwotI2Vsc2UKLSAgICAgICAgewotICAgICAgICAgICAgZXh0ZXJuIGNoYXIgZWRp dG9wdHNbXTsKLSAgICAgICAgICAgIHJldHVybihlZGl0b3B0c1swXSA/IChjaGFyICopZWRpdG9w dHMgOiAiIik7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT1BVU0ggKi8KLSNlbmRpZiAvKiBOT0ZS SUxMUyAqLwotCi0gICAgICBjYXNlIFZOX0VERklMRToKLSNpZmRlZiBOT0ZSSUxMUwotICAgICAg ICByZXR1cm4oIiIpOwotI2Vsc2UKLSNpZmRlZiBOT1BVU0gKLSAgICAgICAgcmV0dXJuKCIiKTsK LSNlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGV4dGVybiBjaGFyIGVkaXRmaWxlW107Ci0g ICAgICAgICAgICByZXR1cm4oZWRpdGZpbGVbMF0gPyAoY2hhciAqKWVkaXRmaWxlIDogIiIpOwot ICAgICAgICB9Ci0jZW5kaWYgLyogTk9QVVNIICovCi0jZW5kaWYgLyogTk9GUklMTFMgKi8KLQot I2lmZGVmIEJST1dTRVIKLSAgICAgIGNhc2UgVk5fQlJPV1NSOiB7Ci0gICAgICAgICAgZXh0ZXJu IGNoYXIgYnJvd3NlcltdOwotICAgICAgICAgIGlmICghYnJvd3NlclswXSkgewotICAgICAgICAg ICAgICBzID0gZ2V0ZW52KCJCUk9XU0VSIik7Ci0gICAgICAgICAgICAgIGlmIChzKSBja3N0cm5j cHkoYnJvd3NlcixzLENLTUFYUEFUSCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybihi cm93c2VyWzBdID8gKGNoYXIgKilicm93c2VyIDogIiIpOwotICAgICAgfQotICAgICAgY2FzZSBW Tl9CUk9QVDogewotICAgICAgICAgIGV4dGVybiBjaGFyIGJyb3dzb3B0c1tdOwotICAgICAgICAg IHJldHVybihicm93c29wdHNbMF0gPyAoY2hhciAqKWJyb3dzb3B0cyA6ICIiKTsKLSAgICAgIH0K LSAgICAgIGNhc2UgVk5fVVJMOiB7Ci0gICAgICAgICAgZXh0ZXJuIGNoYXIgYnJvd3N1cmxbXTsK LSAgICAgICAgICByZXR1cm4oYnJvd3N1cmxbMF0gPyAoY2hhciAqKWJyb3dzdXJsIDogIiIpOwot ICAgICAgfQotI2VuZGlmIC8qIEJST1dTRVIgKi8KLSAgICAgIGNhc2UgVk5fSEVSQUxEOgotICAg ICAgICByZXR1cm4oKGNoYXIgKil2ZXJzaW8pOwotCi0gICAgICBjYXNlIFZOX1RFU1Q6IHsgICAg ICAgICAgICAgICAgICAgLyogdGVzdCAqLwotICAgICAgICAgIGV4dGVybiBjaGFyICogY2tfc190 ZXN0LCAqIGNrX3NfdHZlcjsKLSAgICAgICAgICBpZiAoIWNrX3NfdGVzdCkgY2tfc190ZXN0ID0g IiI7Ci0gICAgICAgICAgaWYgKCFja19zX3R2ZXIpIGNrX3NfdHZlciA9ICIiOwotICAgICAgICAg IGlmICgqY2tfc190ZXN0KSB7Ci0gICAgICAgICAgICAgIGNrc3RybmNweSh2dmJ1Zixja19zX3Rl c3QsVlZCVUZMKTsKLSAgICAgICAgICAgICAgaWYgKCpja19zX3R2ZXIpIHsKLSAgICAgICAgICAg ICAgICAgIGNrc3RybmNhdCh2dmJ1ZiwiLiIsVlZCVUZMKTsKLSAgICAgICAgICAgICAgICAgIGNr c3RybmNhdCh2dmJ1Zixja19zX3R2ZXIsVlZCVUZMKTsKLSAgICAgICAgICAgICAgfQotICAgICAg ICAgIH0gZWxzZQotICAgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCIwIixWVkJVRkwpOwotICAg ICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKLSAgICAgIH0KLQotI2lmbmRlZiBOT1hGRVIK LSAgICAgIGNhc2UgVk5fWEZTVEFUOiAgICAgICAgICAgICAgICAgICAvKiB4ZmVyc3RhdHVzICov Ci0gICAgICAgIHggPSB4ZmVyc3RhdDsgICAgICAgICAgICAgICAgICAgLyogTGlrZSBzdWNjZXNz ICovCi0gICAgICAgIGlmICh4ID4gLTEpIHggPSAoeCA9PSAwKSA/IDEgOiAwOyAvKiBFeHRlcm5h bCB2YWx1ZSBpcyByZXZlcnNlZCAqLwotICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIseCk7ICAg ICAgICAgIC8qIFNBRkUgKi8KLSAgICAgICAgcmV0dXJuKChjaGFyICopdnZidWYpOwotCi0gICAg ICBjYXNlIFZOX1hGTVNHOiAgICAgICAgICAgICAgICAgICAgLyogeGZlcm1zZyAqLwotICAgICAg ICByZXR1cm4oKGNoYXIgKillcGt0bXNnKTsKLQotI2lmbmRlZiBOT01TRU5ECi0gICAgICBjYXNl IFZOX1NOREw6IHsgICAgICAgICAgICAgICAgICAgLyogc2VuZGxpc3QgKi8KLSAgICAgICAgICBl eHRlcm4gaW50IGZpbGVzaW5saXN0OwotICAgICAgICAgIHNwcmludGYodnZidWYsIiVkIixmaWxl c2lubGlzdCk7IC8qIFNBRkUgKi8KLSAgICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7Ci0g ICAgICB9Ci0jZW5kaWYgLyogTk9NU0VORCAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZk ZWYgQ0tfVFJJR0dFUgotICAgICAgY2FzZSBWTl9UUklHOiB7Ci0gICAgICAgICAgZXh0ZXJuIGNo YXIgKiB0cmlnZ2VydmFsOwotICAgICAgICAgIHJldHVybih0cmlnZ2VydmFsID8gdHJpZ2dlcnZh bCA6ICIiKTsKLSAgICAgIH0KLSNlbmRpZiAvKiBDS19UUklHR0VSICovCi0jaWZkZWYgT1MyTU9V U0UKLSNpZmRlZiBPUzIKLSAgICAgIGNhc2UgVk5fTU9VX1g6IHsKLSAgICAgICAgICBleHRlcm4g aW50IE1vdXNlQ3VyWDsKLSAgICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsTW91c2VDdXJYKTsg LyogU0FGRSAqLwotICAgICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKLSAgICAgIH0KLSAg ICAgIGNhc2UgVk5fTU9VX1k6IHsKLSAgICAgICAgICBleHRlcm4gaW50IE1vdXNlQ3VyWTsKLSAg ICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsTW91c2VDdXJZKTsgLyogU0FGRSAqLwotICAgICAg ICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKLSAgICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLSNl bmRpZiAvKiBPUzJNT1VTRSAqLwotICAgICAgY2FzZSBWTl9QUklOVDogewotICAgICAgICAgIGV4 dGVybiBpbnQgcHJpbnRwaXBlOwotICAgICAgICAgIGV4dGVybiBjaGFyICogcHJpbnRlcm5hbWU7 Ci0jaWZkZWYgUFJJTlRTV0kKLSAgICAgICAgICBleHRlcm4gaW50IG5vcHJpbnRlcjsKLSAgICAg ICAgICBpZiAobm9wcmludGVyKSByZXR1cm4oIiIpOwotI2VuZGlmIC8qIFBSSU5UU1dJICovCi0g ICAgICAgICAgY2ttYWttc2codnZidWYsVlZCVUZMLAotICAgICAgICAgICAgICAgICAgIHByaW50 cGlwZSA/ICJ8IiA6ICIiLAotICAgICAgICAgICAgICAgICAgIHByaW50ZXJuYW1lID8gcHJpbnRl cm5hbWUgOgotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICAgICJQUk4iLAotI2Vsc2UKLSAg ICAgICAgICAgICAgICAgICAiKGRlZmF1bHQpIiwKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAg ICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAgICAgIE5VTEwKLSAgICAgICAgICAgICAg ICAgICApOwotICAgICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKLSAgICAgIH0KLSAgICB9 IC8qIEJyZWFrIHVwIGxvbmcgc3dpdGNoIHN0YXRlbWVudHMuLi4gKi8KLQotICAgIHN3aXRjaCh5 KSB7Ci0gICAgICBjYXNlIFZOX0VTQzogICAgICAgICAgICAgICAgICAgICAgLyogRXNjYXBlIGNo YXJhY3RlciAqLwotICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsZXNjYXBlKTsgICAgIC8qIFNB RkUgKi8KLSAgICAgICAgcmV0dXJuKChjaGFyICopdnZidWYpOwotCi0gICAgICBjYXNlIFZOX0lO VElNRToKLSAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWxkIixpbmV0aW1lKTsgICAvKiBTQUZFICov Ci0gICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKLQotICAgICAgY2FzZSBWTl9JTlRNTzoK LSAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLGlud2FpdCk7ICAgICAvKiBTQUZFICovCi0gICAg ICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKLQotICAgICAgY2FzZSBWTl9TRUNVUkU6Ci0gICAg ICAgIGlmICgwCi0jaWZkZWYgU1NIQlVJTFRJTgotICAgICAgICAgICAgfHwgSVNfU1NIKCkKLSNl bmRpZiAvKiBTU0hCVUlMVElOICovCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICAgICAg fHwgY2tfdG5fZW5jcnlwdGluZygpICYmIGNrX3RuX2RlY3J5cHRpbmcoKQotI2VuZGlmIC8qIENL X0VOQ1JZUFRJT04gKi8KLSNpZmRlZiBDS19TU0wKLSAgICAgICAgICAgIHx8IHRsc19hY3RpdmVf ZmxhZyB8fCBzc2xfYWN0aXZlX2ZsYWcKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICAg ICkKLSAgICAgICAgICByZXR1cm4oIjEiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHJldHVy bigiMCIpOwotCi0gICAgICBjYXNlIFZOX0FVVEhOOgotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9O Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGV4dGVybiBjaGFyIHN6VXNlck5hbWVBdXRoZW50aWNh dGVkW107Ci0gICAgICAgICAgICByZXR1cm4oKGNoYXIgKilzelVzZXJOYW1lQXV0aGVudGljYXRl ZCk7Ci0gICAgICAgIH0KLSNlbHNlIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0gICAgICAgIHJl dHVybigoY2hhciAqKSIiKTsKLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotCi0gICAg ICBjYXNlIFZOX0FVVEhTOgotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0gICAgICAgIHN3aXRj aCAoY2tfdG5fYXV0aF92YWxpZCgpKSB7Ci0gICAgICAgICAgY2FzZSBBVVRIX1VOS05PV046Ci0g ICAgICAgICAgICByZXR1cm4oKGNoYXIgKikidW5rbm93biIpOwotICAgICAgICAgIGNhc2UgQVVU SF9PVEhFUjoKLSAgICAgICAgICAgIHJldHVybigoY2hhciAqKSJvdGhlciIpOwotICAgICAgICAg IGNhc2UgQVVUSF9VU0VSOgotICAgICAgICAgICAgcmV0dXJuKChjaGFyICopInVzZXIiKTsKLSAg ICAgICAgICBjYXNlIEFVVEhfVkFMSUQ6Ci0gICAgICAgICAgICByZXR1cm4oKGNoYXIgKikidmFs aWQiKTsKLSAgICAgICAgICBjYXNlIEFVVEhfUkVKRUNUOgotICAgICAgICAgIGRlZmF1bHQ6Ci0g ICAgICAgICAgICByZXR1cm4oKGNoYXIgKikicmVqZWN0ZWQiKTsKLSAgICAgICAgfQotI2Vsc2Ug LyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSAgICAgICAgcmV0dXJuKChjaGFyICopInJlamVjdGVk Iik7Ci0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLQotICAgICAgY2FzZSBWTl9BVVRI VDoKLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotI2lmZGVmIENLX1NTTAotICAgICAgICBpZiAo KHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpICYmCi0gICAgICAgICAgICBja190 bl9hdXRoX3ZhbGlkKCkgPT0gQVVUSF9WQUxJRCAmJgotICAgICAgICAgICAgKHNzdGVsbmV0ID8g KCFURUxPUFRfVShURUxPUFRfQVVUSEVOVElDQVRJT04pKSA6Ci0gICAgICAgICAgICAgICAgICAg ICAgICAoIVRFTE9QVF9NRShURUxPUFRfQVVUSEVOVElDQVRJT04pKSkgfHwKLSAgICAgICAgICAg ICBja190bl9hdXRoZW50aWNhdGVkKCkgPT0gQVVUSFRZUEVfTlVMTCB8fAotICAgICAgICAgICAg IGNrX3RuX2F1dGhlbnRpY2F0ZWQoKSA9PSBBVVRIVFlQRV9BVVRPKQotICAgICAgICAgIHJldHVy bigiWF81MDlfQ0VSVElGSUNBVEUiKTsKLSAgICAgICAgZWxzZQotI2VuZGlmIC8qIENLX1NTTCAq LwotICAgICAgICAgIHJldHVybihBVVRIVFlQRV9OQU1FKGNrX3RuX2F1dGhlbnRpY2F0ZWQoKSkp OwotI2Vsc2UgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSAgICAgICAgcmV0dXJuKChjaGFyICop Ik5VTEwiKTsKLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotCi0jaWZkZWYgQ0tfS0VS QkVST1MKLSAgICAgIGNhc2UgVk5fSzRQUk46IHsKLSAgICAgICAgICBleHRlcm4gY2hhciAqIGty YjRfZF9wcmluY2lwYWw7Ci0gICAgICAgICAgaWYgKGtyYjRfZF9wcmluY2lwYWwpCi0gICAgICAg ICAgICBja3N0cm5jcHkodnZidWYsa3JiNF9kX3ByaW5jaXBhbCxWVkJVRkwrMSk7Ci0gICAgICAg ICAgZWxzZQotICAgICAgICAgICAgKnZ2YnVmID0gTlVMOwotICAgICAgICAgIHJldHVybigoY2hh ciAqKXZ2YnVmKTsKLSAgICAgIH0KLSAgICAgIGNhc2UgVk5fSzVQUk46IHsKLSAgICAgICAgICBl eHRlcm4gY2hhciAqIGtyYjVfZF9wcmluY2lwYWw7Ci0gICAgICAgICAgaWYgKGtyYjVfZF9wcmlu Y2lwYWwpCi0gICAgICAgICAgICBja3N0cm5jcHkodnZidWYsa3JiNV9kX3ByaW5jaXBhbCxWVkJV RkwrMSk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgKnZ2YnVmID0gTlVMOwotICAgICAg ICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKLSAgICAgIH0KLSAgICAgIGNhc2UgVk5fSzRSTE06 IHsKLSAgICAgICAgICBleHRlcm4gY2hhciAqIGtyYjRfZF9yZWFsbTsKLSAgICAgICAgICBpZiAo a3JiNF9kX3JlYWxtKSB7Ci0gICAgICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZixrcmI0X2RfcmVh bG0sVlZCVUZMKzEpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIGNoYXIgKiBz ID0gY2tfa3JiNF9nZXRyZWFsbSgpOwotICAgICAgICAgICAgICBja3N0cm5jcHkodnZidWYscyA/ IHMgOiAiIixWVkJVRkwrMSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybigoY2hhciAq KXZ2YnVmKTsKLSAgICAgIH0KLSAgICAgIGNhc2UgVk5fSzRTUlY6IHsKLSAgICAgICAgICBleHRl cm4gY2hhciAqIGtyYjRfZF9zcnY7Ci0gICAgICAgICAgaWYgKGtyYjRfZF9zcnYpCi0gICAgICAg ICAgICBja3N0cm5jcHkodnZidWYsa3JiNF9kX3NydixWVkJVRkwrMSk7Ci0gICAgICAgICAgZWxz ZQotICAgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJyY21kIixWVkJVRkwpOwotICAgICAgICAg IHJldHVybigoY2hhciAqKXZ2YnVmKTsKLSAgICAgIH0KLSAgICAgIGNhc2UgVk5fSzVSTE06IHsK LSAgICAgICAgICBleHRlcm4gY2hhciAqIGtyYjVfZF9yZWFsbTsKLSAgICAgICAgICBleHRlcm4g Y2hhciAqIGtyYjVfZF9jYzsKLSAgICAgICAgICBpZiAoa3JiNV9kX3JlYWxtKSB7Ci0gICAgICAg ICAgICAgIGNrc3RybmNweSh2dmJ1ZixrcmI1X2RfcmVhbG0sVlZCVUZMKzEpOwotICAgICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICAgIGNoYXIgKiBzID0gY2tfa3JiNV9nZXRyZWFsbShrcmI1 X2RfY2MpOwotICAgICAgICAgICAgICBja3N0cm5jcHkodnZidWYscyxWVkJVRkwrMSk7Ci0gICAg ICAgICAgfQotICAgICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKLSAgICAgIH0KLSAgICAg IGNhc2UgVk5fSzVDQzogewotICAgICAgICAgIGV4dGVybiBjaGFyICoga3JiNV9kX2NjOwotICAg ICAgICAgIGlmIChrcmI1X2RfY2MpCi0gICAgICAgICAgICBja3N0cm5jcHkodnZidWYsa3JiNV9k X2NjLFZWQlVGTCsxKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBja3N0cm5jcHkodnZi dWYsY2tfa3JiNV9nZXRfY2NfbmFtZSgpLFZWQlVGTCsxKTsKLSAgICAgICAgICByZXR1cm4oKGNo YXIgKil2dmJ1Zik7Ci0gICAgICB9Ci0gICAgICBjYXNlIFZOX0s1U1JWOiB7Ci0gICAgICAgICAg ZXh0ZXJuIGNoYXIgKiBrcmI1X2Rfc3J2OwotICAgICAgICAgIGlmIChrcmI1X2Rfc3J2KQotICAg ICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLGtyYjVfZF9zcnYsVlZCVUZMKzEpOwotICAgICAgICAg IGVsc2UKLSAgICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZiwiaG9zdCIsVlZCVUZMKTsKLSAgICAg ICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7Ci0gICAgICB9Ci0gICAgICBjYXNlIFZOX0s0RU5P OiB7Ci0gICAgICAgIGV4dGVybiBpbnQga3JiNF9lcnJubzsKLSAgICAgICAgc3ByaW50Zih2dmJ1 ZiwiJWQiLGtyYjRfZXJybm8pOyAvKiBTQUZFICovCi0gICAgICAgIHJldHVybigoY2hhciAqKXZ2 YnVmKTsKLSAgICAgIH0KLSAgICAgIGNhc2UgVk5fSzVFTk86IHsKLSAgICAgICAgZXh0ZXJuIGlu dCBrcmI1X2Vycm5vOwotICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsa3JiNV9lcnJubyk7IC8q IFNBRkUgKi8KLSAgICAgICAgcmV0dXJuKChjaGFyICopdnZidWYpOwotICAgICAgfQotICAgICAg Y2FzZSBWTl9LNEVNU0c6IHsKLSAgICAgICAgZXh0ZXJuIGNoYXIgKiBrcmI0X2Vycm1zZzsKLSAg ICAgICAgY2tzdHJuY3B5KHZ2YnVmLGtyYjRfZXJybXNnP2tyYjRfZXJybXNnOiIiLFZWQlVGTCsx KTsKLSAgICAgICAgcmV0dXJuKChjaGFyICopdnZidWYpOwotICAgICAgfQotICAgICAgY2FzZSBW Tl9LNUVNU0c6IHsKLSAgICAgICAgZXh0ZXJuIGNoYXIgKiBrcmI1X2Vycm1zZzsKLSAgICAgICAg Y2tzdHJuY3B5KHZ2YnVmLGtyYjVfZXJybXNnLFZWQlVGTCsxKTsKLSAgICAgICAgcmV0dXJuKChj aGFyICopdnZidWYpOwotICAgICAgfQotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0jaWZkZWYg Q0tfU1NMCi0gICAgICBjYXNlIFZOX1g1MDlfUzoKLSAgICAgICAgaWYgKHNzbF9hY3RpdmVfZmxh ZykKLSAgICAgICAgICBja3N0cm5jcHkodnZidWYsc3NsX2dldF9zdWJqZWN0X25hbWUoc3NsX2Nv biksVlZCVUZMKzEpOwotICAgICAgICBlbHNlIGlmICh0bHNfYWN0aXZlX2ZsYWcpCi0gICAgICAg ICAgY2tzdHJuY3B5KHZ2YnVmLHNzbF9nZXRfc3ViamVjdF9uYW1lKHRsc19jb24pLFZWQlVGTCsx KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZiwiIixWVkJVRkwrMSk7 Ci0gICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKLSAgICAgIGNhc2UgVk5fWDUwOV9JOgot ICAgICAgICBpZiAoc3NsX2FjdGl2ZV9mbGFnKQotICAgICAgICAgIGNrc3RybmNweSh2dmJ1Zixz c2xfZ2V0X2lzc3Vlcl9uYW1lKHNzbF9jb24pLFZWQlVGTCsxKTsKLSAgICAgICAgZWxzZSBpZiAo dGxzX2FjdGl2ZV9mbGFnKQotICAgICAgICAgIGNrc3RybmNweSh2dmJ1Zixzc2xfZ2V0X2lzc3Vl cl9uYW1lKHRsc19jb24pLFZWQlVGTCsxKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGNrc3Ry bmNweSh2dmJ1ZiwiIixWVkJVRkwrMSk7Ci0gICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsK LSNlbmRpZiAvKiBDS19TU0wgKi8KLQotICAgICAgY2FzZSBWTl9PU05BTToKLSNpZmRlZiBJS1NE Ci0jaWZkZWYgQ0tfTE9HSU4KLSAgICAgICAgaWYgKGluc2VydmVyICYmIGlzZ3Vlc3QpCi0gICAg ICAgICAgcmV0dXJuKCIiKTsKLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotI2VuZGlmIC8qIElLU0Qg Ki8KLSNpZmRlZiBDS19VVFNOQU1FCi0gICAgICAgIHsKLSAgICAgICAgICAgIGV4dGVybiBjaGFy IHVubV9uYW1bXTsKLSAgICAgICAgICAgIHJldHVybigoY2hhciAqKXVubV9uYW0pOwotICAgICAg ICB9Ci0jZWxzZQotICAgICAgICBmb3IgKHggPSB5ID0gMDsgeCA8IFZWQlVGTDsgeCsrKSB7Ci0g ICAgICAgICAgICBpZiAoY2t4c3lzW3hdID09IFNQICYmIGN4ID09IDApIGNvbnRpbnVlOwotICAg ICAgICAgICAgdnZidWZbeSsrXSA9IChjaGFyKSAoKGNreHN5c1t4XSA9PSBTUCkgPyAnXycgOiBj a3hzeXNbeF0pOwotICAgICAgICB9Ci0gICAgICAgIHZ2YnVmW3ldID0gTlVMOwotICAgICAgICBy ZXR1cm4odnZidWYpOwotI2VuZGlmIC8qIENLX1VUU05BTUUgKi8KLQotICAgICAgY2FzZSBWTl9P U1ZFUjogewotI2lmZGVmIENLX1VUU05BTUUKLSAgICAgICAgICBleHRlcm4gY2hhciB1bm1fdmVy W107Ci0jaWZkZWYgSUtTRAotI2lmZGVmIENLX0xPR0lOCi0gICAgICAgICAgaWYgKGluc2VydmVy ICYmIGlzZ3Vlc3QpCi0gICAgICAgICAgICByZXR1cm4oIiIpOwotI2VuZGlmIC8qIENLX0xPR0lO ICovCi0jZW5kaWYgLyogSUtTRCAqLwotICAgICAgICAgIHJldHVybigoY2hhciAqKXVubV92ZXIp OwotI2Vsc2UKLSAgICAgICAgICByZXR1cm4oIiIpOwotI2VuZGlmIC8qIENLX1VUU05BTUUgKi8K LSAgICAgIH0KLQotICAgICAgY2FzZSBWTl9PU1JFTDogewotI2lmZGVmIENLX1VUU05BTUUKLSAg ICAgICAgICBleHRlcm4gY2hhciB1bm1fcmVsW107Ci0jaWZkZWYgSUtTRAotI2lmZGVmIENLX0xP R0lOCi0gICAgICAgICAgaWYgKGluc2VydmVyICYmIGlzZ3Vlc3QpCi0gICAgICAgICAgICByZXR1 cm4oIiIpOwotI2VuZGlmIC8qIENLX0xPR0lOICovCi0jZW5kaWYgLyogSUtTRCAqLwotICAgICAg ICAgIHJldHVybigoY2hhciAqKXVubV9yZWwpOwotI2Vsc2UKLSAgICAgICAgICByZXR1cm4oIiIp OwotI2VuZGlmIC8qIENLX1VUU05BTUUgKi8KLSAgICAgIH0KLSAgICB9IC8qIEJyZWFrIHVwIGxv bmcgc3dpdGNoIHN0YXRlbWVudHMuLi4gKi8KLQotICAgIHN3aXRjaCh5KSB7Ci0gICAgICBjYXNl IFZOX05BTUU6IHsKLSAgICAgICAgICBleHRlcm4gY2hhciAqIG15bmFtZTsKLSAgICAgICAgICBy ZXR1cm4obXluYW1lKTsKLSAgICAgIH0KLQotICAgICAgY2FzZSBWTl9NT0RMOiB7Ci0jaWZkZWYg Q0tfVVRTTkFNRQotICAgICAgICAgIGV4dGVybiBjaGFyIHVubV9tb2RbXSwgdW5tX21jaFtdOwot ICAgICAgICAgIGludCB5ID0gVlZCVUZMIC0gMTsKLSAgICAgICAgICBjaGFyICogcyA9IHVubV9t b2Q7Ci0jZW5kaWYgLyogQ0tfVVRTTkFNRSAqLwotI2lmZGVmIElLU0QKLSNpZmRlZiBDS19MT0dJ TgotICAgICAgICAgIGlmIChpbnNlcnZlciAmJiBpc2d1ZXN0KQotICAgICAgICAgICAgcmV0dXJu KCIiKTsKLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotI2VuZGlmIC8qIElLU0QgKi8KLQotI2lmZGVm IENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdhcyBIUFVYICovCi0gICAgICAg ICAgaWYgKCF1bm1fbW9kWzBdICYmICFub3B1c2gpCi0gICAgICAgICAgICB6enN0cmluZygiXFxm Y29tbWFuZChtb2RlbCkiLCZzLCZ5KTsKLS8qCi0gICBBbm90aGVyIHBvc3NpYmlsaXR5IHdvdWxk IGJlOgotICAgICAiXFxmY29tbWFuZChrc2ggLWMgJ3doZW5jZSBtb2RlbCAxPiYtICYmIG1vZGVs IHx8IHVuYW1lIC1tJykiCi0gICBCdXQgdGhhdCB3b3VsZCBkZXBlbmQgb24gaGF2aW5nIGtzaC4K LSovCi0jZWxzZQotI2lmZGVmIE9TRjMyICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERp Z2l0YWwgVU5JWCAzLjIgYW5kIGhpZ2hlci4uLiAqLwotLyogTm90ZTogVWx0cml4IGhhcyAvZXRj L3NpemVyLCBidXQgaXQgaXMgbm90IHB1YmxpY2x5IGV4ZWN1dGFibGUuICovCi0vKiBzaXplciAt YyBvdXRwdXRzICdjcHU6PHRhYj48dGFiPiJERUN4eHh4IicgKi8KLSAgICAgICAgICBpZiAoIXVu bV9tb2RbMF0pIHsKLSAgICAgICAgICAgICAgY2hhciAqIHA7Ci0gICAgICAgICAgICAgIGludCBm bGFnID0gMDsKLSAgICAgICAgICAgICAgenpzdHJpbmcoIlxcZmNvbW1hbmQoL3Vzci9zYmluL3Np emVyIC1jKSIsJnMsJnkpOwotICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJEVSBtb2RlbCIsdW5t X21vZCwwKTsKLSAgICAgICAgICAgICAgcyA9IHVubV9tb2Q7Ci0gICAgICAgICAgICAgIHAgPSB1 bm1fbW9kOwotICAgICAgICAgICAgICB3aGlsZSAoKnApIHsgICAgICAgICAgICAgIC8qIEV4dHJh Y3QgdGhlIHBhcnQgaW4gcXVvdGVzICovCi0gICAgICAgICAgICAgICAgICBpZiAoKnAgPT0gJyIn KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWcpCi0gICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBmbGFnID0gMTsKLSAgICAgICAgICAg ICAgICAgICAgICBwKys7Ci0gICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBpZiAoZmxhZykKLSAgICAgICAgICAgICAg ICAgICAgKnMrKyA9ICpwOwotICAgICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICpzID0gTlVMOwotICAgICAgICAgIH0KLSNlbmRpZiAvKiBPU0YzMiAq LwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2lmZGVmIENLX1VUU05BTUUKLSAgICAgICAgICBp ZiAodW5tX21vZFswXSkKLSAgICAgICAgICAgIHJldHVybigoY2hhciAqKXVubV9tb2QpOwotICAg ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybigoY2hhciAqKXVubV9tY2gpOwotI2Vsc2UK LSAgICAgICAgICByZXR1cm4oIiIpOwotI2VuZGlmIC8qIENLX1VUU05BTUUgKi8KLSAgICAgIH0K LQotI2lmZGVmIElCTVgyNQotICAgICAgLyogWC4yNSB2YXJpYWJsZXMgKGxvY2FsIGFuZCByZW1v dGUgYWRkcmVzcykgKi8KLSAgICAgIGNhc2UgVk5fWDI1TEE6Ci0gICAgICAgIGlmICghbG9jYWxf bnVhWzBdICYmICF4MjVsb2NhbF9udWEobG9jYWxfbnVhKSkKLSAgICAgICAgICAqdnZidWYgPSBO VUxMOwotICAgICAgICBlbHNlCi0gICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLGxvY2FsX251YSxW VkJVRkwrMSk7Ci0gICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKLQotICAgICAgY2FzZSBW Tl9YMjVSQToKLSAgICAgICAgaWYgKCFyZW1vdGVfbnVhWzBdKQotICAgICAgICAgICp2dmJ1ZiA9 IE5VTEw7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBja3N0cm5jcHkodnZidWYscmVtb3RlX251 YSxWVkJVRkwrMSk7Ci0gICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKLSNlbmRpZiAvKiBJ Qk1YMjUgKi8KLQotI2lmbmRlZiBOT0RJQUwKLSAgICAgIGNhc2UgVk5fUERTRlg6IHsKLSAgICAg ICAgICBleHRlcm4gY2hhciBwZHNmeFtdOwotICAgICAgICAgIHJldHVybigoY2hhciAqKXBkc2Z4 KTsKLSAgICAgIH0KLSAgICAgIGNhc2UgVk5fRFRZUEU6IHsKLSAgICAgICAgICBleHRlcm4gaW50 IGRpYWx0eXBlOwotICAgICAgICAgIHNwcmludGYodnZidWYsIiVkIixkaWFsdHlwZSk7IC8qIFNB RkUgKi8KLSAgICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7Ci0gICAgICB9Ci0jZW5kaWYg LyogTk9ESUFMICovCi0KLSNpZmRlZiBVTklYCi0gICAgICBjYXNlIFZOX0xDS1BJRDogewotICAg ICAgICAgIGV4dGVybiBjaGFyIGxvY2twaWRbXTsKLSAgICAgICAgICByZXR1cm4oKGNoYXIgKils b2NrcGlkKTsKLSAgICAgIH0KLSNlbmRpZiAvKiBVTklYICovCi0KLSNpZm5kZWYgTk9YRkVSCi0g ICAgICBjYXNlIFZOX0JMSzoKLSAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLGJjdHIpOyAgICAg ICAvKiBTQUZFICovCi0gICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKLQotICAgICAgY2Fz ZSBWTl9URlRJTToKLSAgICAgICAgc3ByaW50Zih2dmJ1ZiwgICAgICAgICAgICAgICAgICAvKiBT QUZFICovCi0jaWZkZWYgR0ZUSU1FUgotICAgICAgICAgICAgICAgICIlbGQiLCAobG9uZykoZnB0 c2VjcyArIDAuNSkKLSNlbHNlCi0gICAgICAgICAgICAgICAgIiVkIiwgdHNlY3MKLSNlbmRpZiAv KiBHRlRJTUVSICovCi0gICAgICAgICAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuKChjaGFyICop dnZidWYpOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0gICAgICBjYXNlIFZOX0hXUEFSOgotICAg ICAgY2FzZSBWTl9TRVJJQUw6IHsKLSAgICAgICAgICBpbnQgc2I7Ci0gICAgICAgICAgY2hhciBj LCAqIHNzOwotICAgICAgICAgIGV4dGVybiBpbnQgc3RvcGJpdHM7Ci0gICAgICAgICAgdnZidWZb MF0gPSBOVUw7Ci0gICAgICAgICAgaWYgKGh3cGFyaXR5ICYmIGxvY2FsICYmICFuZXR3b3JrKQot ICAgICAgICAgICAgc3MgPSBwYXJuYW0oKGNoYXIpaHdwYXJpdHkpOwotICAgICAgICAgIGVsc2UK LSAgICAgICAgICAgIHNzID0gcGFybmFtKChjaGFyKXBhcml0eSk7Ci0gICAgICAgICAgaWYgKGN4 ID09IFZOX0hXUEFSKSB7Ci0gICAgICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZixzcyxWVkJVRkwp OwotICAgICAgICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7Ci0gICAgICAgICAgfQotICAg ICAgICAgIGMgPSBzc1swXTsKLSAgICAgICAgICBpZiAoaXNsb3dlcihjKSkgYyA9IHRvdXBwZXIo Yyk7Ci0gICAgICAgICAgc2IgPSBzdG9wYml0czsKLSAgICAgICAgICBpZiAoc2IgPCAxKQotICAg ICAgICAgICAgc2IgPSAoc3BlZWQgPiAwICYmIHNwZWVkIDw9IDExMEwpID8gMiA6IDE7Ci0gICAg ICAgICAgaWYgKGh3cGFyaXR5KQotICAgICAgICAgICAgc3ByaW50Zih2dmJ1ZiwiIDglYyVkIixj LHNiKTsgLyogU0FGRSAqLwotICAgICAgICAgIGVsc2UgaWYgKHBhcml0eSkKLSAgICAgICAgICAg IHNwcmludGYodnZidWYsIiA3JWMlZCIsYyxzYik7IC8qIFNBRkUgKi8KLSAgICAgICAgICBlbHNl Ci0gICAgICAgICAgICBzcHJpbnRmKHZ2YnVmLCIgOE4lZCIsc2IpOyAgLyogU0FGRSAqLwotICAg ICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKLSAgICAgIH0KLQotI2lmZGVmIFVOSVgKLSAg ICAgIGNhc2UgVk5fTENLRElSOiB7Ci0jaWZuZGVmIE5PVVVDUAotICAgICAgICAgIGV4dGVybiBj aGFyICogdXVjcGxvY2tkaXI7Ci0gICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLHV1Y3Bsb2NrZGly LFZWQlVGTCk7Ci0gICAgICAgICAgeCA9IHN0cmxlbih2dmJ1Zik7Ci0gICAgICAgICAgaWYgKHgg PiAwKSB7Ci0gICAgICAgICAgICAgIGlmICh2dmJ1Zlt4LTFdICE9ICcvJykgewotICAgICAgICAg ICAgICAgICAgdnZidWZbeF0gPSAnLyc7Ci0gICAgICAgICAgICAgICAgICB2dmJ1Zlt4KzFdID0g TlVMOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICB2dmJ1 ZlswXSA9IE5VTDsKLSNlbmRpZiAvKiBOT1VVQ1AgKi8KLSAgICAgICAgICByZXR1cm4oKGNoYXIg Kil2dmJ1Zik7Ci0gICAgICB9Ci0jZW5kaWYgLyogVU5JWCAqLwotICAgIH0gLyogQnJlYWsgdXAg bG9uZyBzd2l0Y2ggc3RhdGVtZW50cy4uLiAqLwotCi0gICAgc3dpdGNoKHkpIHsKLSNpZm5kZWYg Tk9ESUFMCi0gICAgICBjYXNlIFZOX0RNX0xQOgotICAgICAgY2FzZSBWTl9ETV9TUDoKLSAgICAg IGNhc2UgVk5fRE1fUEQ6Ci0gICAgICBjYXNlIFZOX0RNX1REOgotICAgICAgY2FzZSBWTl9ETV9X QToKLSAgICAgIGNhc2UgVk5fRE1fV0Q6Ci0gICAgICBjYXNlIFZOX0RNX0hGOgotICAgICAgY2Fz ZSBWTl9ETV9XQjoKLSAgICAgIGNhc2UgVk5fRE1fUkM6IHsKLSAgICAgICAgICBleHRlcm4gY2hh ciAqIGdldGRtKCk7Ci0gICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLGdldGRtKHkpLFZWQlVGTCk7 Ci0gICAgICAgICAgcmV0dXJuKChjaGFyICopdnZidWYpOwotICAgICAgfQotI2VuZGlmIC8qIE5P RElBTCAqLwotCi0gICAgICBjYXNlIFZOX1RZX0xOOgotICAgICAgY2FzZSBWTl9UWV9MQzogewot ICAgICAgICAgIGV4dGVybiBpbnQgdHlwX2xpbmVzOwotICAgICAgICAgIHNwcmludGYodnZidWYs IiVkIix0eXBfbGluZXMpOyAvKiBTQUZFICovCi0gICAgICAgICAgcmV0dXJuKChjaGFyICopdnZi dWYpOwotICAgICAgfQotICAgICAgY2FzZSBWTl9UWV9MTTogewotICAgICAgICAgIGV4dGVybiBp bnQgdHlwX210Y2hzOwotICAgICAgICAgIHNwcmludGYodnZidWYsIiVkIix0eXBfbXRjaHMpOyAv KiBTQUZFICovCi0gICAgICAgICAgcmV0dXJuKChjaGFyICopdnZidWYpOwotICAgICAgfQotICAg ICAgY2FzZSBWTl9NQUNMVkw6Ci0gICAgICAgIHNwcmludGYodnZidWYsIiVkIixtYWNsdmwpOyAg ICAgLyogU0FGRSAqLwotICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7Ci0gICAgfSAvKiBC cmVhayB1cCBsb25nIHN3aXRjaCBzdGF0ZW1lbnRzLi4uICovCi0KLSAgICBzd2l0Y2goeSkgewot I2lmbmRlZiBOT0xBU1RGSUxFCi0gICAgICBjYXNlIFZOX0xBU1RGSUw6IHsKLQkgIGV4dGVybiBj aGFyICogbGFzdGZpbGU7Ci0JICByZXR1cm4obGFzdGZpbGUgPyBsYXN0ZmlsZSA6ICIiKTsKLSAg ICAgIH0KLSNlbmRpZgkvKiBOT0xBU1RGSUxFICovCi0jaWZuZGVmIE5PWEZFUgotICAgICAgY2Fz ZSBWTl9YRl9CQzoKLSAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLGNydW5jaGVkKTsgICAvKiBT QUZFICovCi0gICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKLQotICAgICAgY2FzZSBWTl9Y Rl9UTToKLSAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLHRpbWVvdXRzKTsgICAvKiBTQUZFICov Ci0gICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKLQotICAgICAgY2FzZSBWTl9YRl9SWDoK LSAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLHJldHJhbnMpOyAgICAvKiBTQUZFICovCi0gICAg ICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotICAgICAg Y2FzZSBWTl9NU19DRDogICAgICAgICAgICAgICAgICAgIC8qIE1vZGVtIHNpZ25hbHMgKi8KLSAg ICAgIGNhc2UgVk5fTVNfQ1RTOgotICAgICAgY2FzZSBWTl9NU19EU1I6Ci0gICAgICBjYXNlIFZO X01TX0RUUjoKLSAgICAgIGNhc2UgVk5fTVNfUkk6Ci0gICAgICBjYXNlIFZOX01TX1JUUzogewot ICAgICAgICAgIGludCB4LCB6ID0gLTE7Ci0gICAgICAgICAgeCA9IHR0Z21kbSgpOyAgICAgICAg ICAgICAgICAgLyogVHJ5IHRvIGdldCB0aGVtICovCi0gICAgICAgICAgaWYgKHggPiAtMSkgewot ICAgICAgICAgICAgICBzd2l0Y2ggKHkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFZOX01TX0NE OiAgeiA9ICh4ICYgQk1fRENEKSA/IDEgOiAwOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNl IFZOX01TX0RTUjogeiA9ICh4ICYgQk1fRFNSKSA/IDEgOiAwOyBicmVhazsKLSAgICAgICAgICAg ICAgICBjYXNlIFZOX01TX0NUUzogeiA9ICh4ICYgQk1fQ1RTKSA/IDEgOiAwOyBicmVhazsKLSNp ZmRlZiBNQUMKLSAgICAgICAgICAgICAgICBjYXNlIFZOX01TX0RUUjogeiA9ICh4ICYgQk1fRFRS KSA/IDEgOiAwOyBicmVhazsKLSNlbHNlCi0jaWZuZGVmIFNUUkFUVVMKLSAgICAgICAgICAgICAg ICBjYXNlIFZOX01TX1JJOiAgeiA9ICh4ICYgQk1fUk5HKSA/IDEgOiAwOyBicmVhazsKLSNpZm5k ZWYgTlQKLSAgICAgICAgICAgICAgICBjYXNlIFZOX01TX0RUUjogeiA9ICh4ICYgQk1fRFRSKSA/ IDEgOiAwOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFZOX01TX1JUUzogeiA9ICh4ICYg Qk1fUlRTKSA/IDEgOiAwOyBicmVhazsKLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIFNUUkFU VVMgKi8KLSNlbmRpZiAvKiBNQUMgKi8KLSAgICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAg ICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIseik7ICAgICAgICAvKiBTQUZFICovCi0gICAgICAg ICAgcmV0dXJuKChjaGFyICopdnZidWYpOwotICAgICAgfQotICAgICAgY2FzZSBWTl9NQVRDSDog ICAgICAgICAgICAgICAgICAgIC8qIElOUFVUIE1BVENIICovCi0gICAgICAgIHJldHVybihpbnBt YXRjaCA/IGlucG1hdGNoIDogIiIpOwotCi0jaWZkZWYgQ0tGTE9BVAotICAgICAgY2FzZSBWTl9J U0NBTEU6CQkJLyogSU5QVVQgU0NBTEUtRkFDVE9SICovCi0gICAgICAgIHJldHVybihpbnBzY2Fs ZSA/IGlucHNjYWxlIDogIjEuMCIpOwotI2VuZGlmCS8qIENLRkxPQVQgKi8KLQotICAgICAgY2Fz ZSBWTl9TTE1TRzogeyAgICAgICAgICAgICAgICAgIC8qIFNFVCBMSU5FIC8gSE9TVCBtZXNzYWdl ICovCi0gICAgICAgICAgZXh0ZXJuIGNoYXIgKiBzbG1zZzsKLSAgICAgICAgICB2dmJ1ZlswXSA9 IE5VTDsKLSAgICAgICAgICBpZiAoc2xtc2cpCi0gICAgICAgICAgICBja3N0cm5jcHkodnZidWYs c2xtc2csVlZCVUZMKTsKLSAgICAgICAgIHJldHVybih2dmJ1Zik7Ci0gICAgICB9Ci0KLSAgICAg IGNhc2UgVk5fVFhURElSOiAgICAgICAgICAgICAgICAgICAvKiBURVhURElSICovCi0gICAgICAg IHJldHVybihrX2luZm9fZGlyID8ga19pbmZvX2RpciA6ICIiKTsKLQotI2lmZGVmIEZORkxPQVQK LSAgICAgIGNhc2UgVk5fTUFfUEk6Ci0gICAgICAgIHJldHVybihtYXRoX3BpKTsKLQotICAgICAg Y2FzZSBWTl9NQV9FOgotICAgICAgICByZXR1cm4obWF0aF9lKTsKLQotICAgICAgY2FzZSBWTl9N QV9QUjoKLSAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLGZwX2RpZ2l0cyk7ICAvKiBTQUZFICov Ci0gICAgICAgIHJldHVybih2dmJ1Zik7Ci0jZW5kaWYgLyogRk5GTE9BVCAqLwotCi0gICAgICBj YXNlIFZOX0NNREJMOgotICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsQ01EQkwpOyAgICAgIC8q IFNBRkUgKi8KLSAgICAgICAgcmV0dXJuKHZ2YnVmKTsKLQotI2lmZGVmIENLQ0hBTk5FTElPCi0g ICAgICBjYXNlIFZOX0ZFUlI6IHsKLSAgICAgICAgICBleHRlcm4gaW50IHpfZXJyb3I7Ci0gICAg ICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLHpfZXJyb3IpOyAgLyogU0FGRSAqLwotICAgICAgICAg IHJldHVybih2dmJ1Zik7Ci0gICAgICB9Ci0gICAgICBjYXNlIFZOX0ZNQVg6IHsKLSAgICAgICAg ICBleHRlcm4gaW50IHpfbWF4Y2hhbjsKLSAgICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsel9t YXhjaGFuKTsgLyogU0FGRSAqLwotICAgICAgICAgIHJldHVybih2dmJ1Zik7Ci0gICAgICB9Ci0g ICAgICBjYXNlIFZOX0ZDT1U6IHsKLSAgICAgICAgICBleHRlcm4gaW50IHpfZmlsY291bnQ7Ci0g ICAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLHpfZmlsY291bnQpOyAvKiBTQUZFICovCi0gICAg ICAgICAgcmV0dXJuKHZ2YnVmKTsKLSAgICAgIH0KLSNlbmRpZiAvKiBDS0NIQU5ORUxJTyAqLwot Ci0jaWZuZGVmIE5PRElBTAotICAgICAgY2FzZSBWTl9EUlRSOiB7Ci0gICAgICAgICAgZXh0ZXJu IGludCBkaWFsY291bnQ7Ci0gICAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLGRpYWxjb3VudCk7 IC8qIFNBRkUgKi8KLSAgICAgICAgICByZXR1cm4odnZidWYpOwotICAgICAgfQotI2VuZGlmIC8q IE5PRElBTCAqLwotCi0jaWZuZGVmIE5PTE9HRElBTAotI2lmbmRlZiBOT0xPQ0FMCi0gICAgICBj YXNlIFZOX0NYVElNRToKLSAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWxkIixkb2xvZ3Nob3coMCkp OyAvKiBTQUZFICovCi0gICAgICAgIHJldHVybih2dmJ1Zik7Ci0jZW5kaWYgLyogTk9MT0NBTCAq LwotI2VuZGlmIC8qIE5PTE9HRElBTCAqLwotCi0gICAgICBjYXNlIFZOX0JZVEU6Ci0gICAgICAg IHNwcmludGYodnZidWYsIiVkIixieXRlb3JkZXIpOyAgLyogU0FGRSAqLwotICAgICAgICByZXR1 cm4odnZidWYpOwotCi0gICAgICBjYXNlIFZOX0tCQ0hBUjoKLSAgICAgICAgdnZidWZbMF0gPSBO VUw7Ci0gICAgICAgIHZ2YnVmWzFdID0gTlVMOwotICAgICAgICBpZiAoa2JjaGFyID4gMCkKLSAg ICAgICAgICB2dmJ1ZlswXSA9IChrYmNoYXIgJiAweGZmKTsKLSAgICAgICAgcmV0dXJuKHZ2YnVm KTsKLQotICAgICAgY2FzZSBWTl9UVFlOQU06IHsKLSNpZmRlZiBIQVZFQ1RUTkFNCi0gICAgICAg ICAgZXh0ZXJuIGNoYXIgY3R0bmFtW107Ci0gICAgICAgICAgcmV0dXJuKChjaGFyICopY3R0bmFt KTsKLSNlbHNlCi0gICAgICAgICAgcmV0dXJuKENUVE5BTSk7Ci0jZW5kaWYgLyogSEFWRUNUVE5B TSAqLwotICAgICAgfQotCi0gICAgICBjYXNlIFZOX1BST01QVDoKLSAgICAgICAgcmV0dXJuKGNt Z2V0cCgpKTsKLQotICAgICAgY2FzZSBWTl9CVUlMRDogewotICAgICAgICAgIGV4dGVybiBjaGFy ICogYnVpbGRpZDsKLSAgICAgICAgICByZXR1cm4oYnVpbGRpZCk7Ci0gICAgICB9Ci0KLSNpZm5k ZWYgTk9TRVhQCi0gICAgICBjYXNlIFZOX1NFWFA6IHsKLSAgICAgICAgICBleHRlcm4gY2hhciAq IGxhc3RzZXhwOwotICAgICAgICAgIHJldHVybihsYXN0c2V4cCA/IGxhc3RzZXhwIDogIiIpOwot ICAgICAgfQotICAgICAgY2FzZSBWTl9WU0VYUDogewotICAgICAgICAgIGV4dGVybiBjaGFyICog c2V4cHZhbDsKLSAgICAgICAgICByZXR1cm4oc2V4cHZhbCA/IHNleHB2YWwgOiAiIik7Ci0gICAg ICB9Ci0gICAgICBjYXNlIFZOX0xTRVhQOiB7Ci0gICAgICAgICAgZXh0ZXJuIGludCBzZXhwZGVw OwotICAgICAgICAgIGNrc3RybmNweSh2dmJ1Zixja2l0b2Eoc2V4cGRlcCksVlZCVUZMKTsKLSAg ICAgICAgICByZXR1cm4odnZidWYpOwotICAgICAgfQotI2VuZGlmIC8qIE5PU0VYUCAqLwotCi0j aWZkZWYgR0ZUSU1FUgotICAgICAgY2FzZSBWTl9GVElNRTogewotICAgICAgICAgIENLRkxPQVQg ZjsKLSAgICAgICAgICB6dGltZSgmcCk7Ci0gICAgICAgICAgaWYgKHAgPT0gTlVMTCB8fCAqcCA9 PSBOVUwpCi0gICAgICAgICAgICByZXR1cm4oTlVMTCk7Ci0gICAgICAgICAgeiA9IGF0b2wocCsx MSkgKiAzNjAwTCArIGF0b2wocCsxNCkgKiA2MEwgKyBhdG9sKHArMTcpOwotICAgICAgICAgIGYg PSAoQ0tGTE9BVCl6ICsgKChDS0ZMT0FUKXp0dXNlYykgLyAxMDAwMDAwLjA7Ci0gICAgICAgICAg c3ByaW50Zih2dmJ1ZiwiJWYiLGYpOyAgICAgICAgLyogU0FGRSAqLwotICAgICAgICAgIHJldHVy bih2dmJ1Zik7Ci0gICAgICB9Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotCi0jaWZuZGVmIE5PSFRU UAotICAgICAgY2FzZSBWTl9IVFRQX0M6IHsgICAgICAgICAgICAgICAgIC8qIEhUVFAgQ29kZSAq LwotICAgICAgICAgIGV4dGVybiBpbnQgaHR0cF9jb2RlOwotICAgICAgICAgIHJldHVybihja2l0 b2EoaHR0cF9jb2RlKSk7Ci0gICAgICB9Ci0gICAgICBjYXNlIFZOX0hUVFBfTjogICAgICAgICAg ICAgICAgICAgLyogSFRUUCBDb25uZWN0ZWQgKi8KLSAgICAgICAgcmV0dXJuKCBodHRwX2lzY29u bmVjdGVkKCkgPyAiMSIgOiAiMCIpOwotICAgICAgY2FzZSBWTl9IVFRQX0g6ICAgICAgICAgICAg ICAgICAgIC8qIEhUVFAgSG9zdCAqLwotICAgICAgICByZXR1cm4oIChjaGFyICopaHR0cF9ob3N0 KCkgKTsKLSAgICAgIGNhc2UgVk5fSFRUUF9NOiB7ICAgICAgICAgICAgICAgICAvKiBIVFRQIE1l c3NhZ2UgKi8KLSAgICAgICAgICBleHRlcm4gY2hhciBodHRwX3JlcGx5X3N0cltdOwotICAgICAg ICAgIHJldHVybigoY2hhciAqKWh0dHBfcmVwbHlfc3RyKTsKLSAgICAgIH0KLSAgICAgIGNhc2Ug Vk5fSFRUUF9TOiAgICAgICAgICAgICAgICAgICAvKiBIVFRQIFNlY3VyaXR5ICovCi0gICAgICAg IHJldHVybigoY2hhciAqKWh0dHBfc2VjdXJpdHkoKSk7Ci0jZW5kaWYgLyogTk9IVFRQICovCi0K LSNpZmRlZiBORVdGVFAKLSAgICAgIGNhc2UgVk5fRlRQX0I6Ci0gICAgICAgIHJldHVybigoY2hh ciAqKWZ0cF9jcGxfbW9kZSgpKTsKLSAgICAgIGNhc2UgVk5fRlRQX0Q6Ci0gICAgICAgIHJldHVy bigoY2hhciAqKWZ0cF9kcGxfbW9kZSgpKTsKLSAgICAgIGNhc2UgVk5fRlRQX1o6Ci0gICAgICAg IHJldHVybigoY2hhciAqKWZ0cF9hdXRodHlwZSgpKTsKLSAgICAgIGNhc2UgVk5fRlRQX0M6IHsK LSAgICAgICAgICBleHRlcm4gaW50IGZ0cGNvZGU7Ci0gICAgICAgICAgcmV0dXJuKGNraXRvYShm dHBjb2RlKSk7Ci0gICAgICB9Ci0gICAgICBjYXNlIFZOX0ZUUF9NOiB7Ci0gICAgICAgICAgZXh0 ZXJuIGNoYXIgZnRwX3JlcGx5X3N0cltdOwotICAgICAgICAgIGlmIChpc2RpZ2l0KGZ0cF9yZXBs eV9zdHJbMF0pICYmCi0gICAgICAgICAgICAgIGlzZGlnaXQoZnRwX3JlcGx5X3N0clsxXSkgJiYK LSAgICAgICAgICAgICAgaXNkaWdpdChmdHBfcmVwbHlfc3RyWzJdKSAmJgotICAgICAgICAgICAg ICBmdHBfcmVwbHlfc3RyWzNdID09ICcgJykKLSAgICAgICAgICAgIHJldHVybigmZnRwX3JlcGx5 X3N0cls0XSk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuKGZ0cF9yZXBseV9z dHIpOwotICAgICAgfQotICAgICAgY2FzZSBWTl9GVFBfUzogewotICAgICAgICAgIGV4dGVybiBj aGFyIGZ0cF9zcnZ0eXBbXTsKLSAgICAgICAgICByZXR1cm4oKGNoYXIgKilmdHBfc3J2dHlwKTsK LSAgICAgIH0KLSAgICAgIGNhc2UgVk5fRlRQX0g6IHsKLSAgICAgICAgICBleHRlcm4gY2hhciAq IGZ0cF9ob3N0OwotICAgICAgICAgIHJldHVybihmdHBfaG9zdCA/IGZ0cF9ob3N0IDogIiIpOwot ICAgICAgfQotICAgICAgY2FzZSBWTl9GVFBfWDogeyAgICAgICAgICAgICAgICAgIC8qIEZUUCBD b25uZWN0ZWQgKi8KLSAgICAgICAgICByZXR1cm4oZnRwaXNjb25uZWN0ZWQoKSA/ICIxIiA6ICIw Iik7Ci0gICAgICB9Ci0gICAgICBjYXNlIFZOX0ZUUF9MOiB7ICAgICAgICAgICAgICAgICAgLyog RlRQIExvZ2dlZCBpbiAqLwotICAgICAgICAgIHJldHVybihmdHBpc2xvZ2dlZGluKCkgPyAiMSIg OiAiMCIpOwotICAgICAgfQotICAgICAgY2FzZSBWTl9GVFBfRzogeyAgICAgICAgICAgICAgICAg IC8qIEZUUCBHRVQtUFVULVJFTU9URSAqLwotICAgICAgICAgIGV4dGVybiBpbnQgZnRwZ2V0Owot ICAgICAgICAgIGNoYXIgKiBzID0gIiI7Ci0gICAgICAgICAgc3dpdGNoIChmdHBnZXQpIHsKLSAg ICAgICAgICAgIGNhc2UgMDogcyA9ICJrZXJtaXQiOyBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug MTogcyA9ICJmdHAiOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMjogcyA9ICJhdXRvIjsgYnJl YWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybihzKTsKLSAgICAgIH0KLSNlbmRpZiAv KiBORVdGVFAgKi8KLQotI2lmbmRlZiBOT0xPQ0FMCi0gICAgICBjYXNlIFZOX0NYX1NUQTogeyAg ICAgICAgICAgICAgICAgLyogQ09OTkVDVCBzdGF0dXMgKi8KLSAgICAgICAgICBleHRlcm4gaW50 IGN4X3N0YXR1czsKLSAgICAgICAgICByZXR1cm4oY2tpdG9hKGN4X3N0YXR1cykpOwotICAgICAg fQotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSAgICAgIGNhc2UgVk5fTk9XOiAgICAgICAgICAgICAg ICAgICAgICAvKiBUaW1lc3RhbXAgKi8KLSAgICAgICAgcmV0dXJuKGNrY3Z0ZGF0ZShwLDApKTsK LQotICAgICAgY2FzZSBWTl9IT1VSOiAgICAgICAgICAgICAgICAgICAgIC8qIEhvdXIgb2YgdGhl IGRheSAqLwotICAgICAgICB6dGltZSgmcCk7ICAgICAgICAgICAgICAgICAgICAgIC8qICJUaHUg RmViICA4IDEyOjAwOjAwIDE5OTAiICovCi0gICAgICAgIGlmICghcCkgcCA9ICIiOwotICAgICAg ICBpZiAoISpwKSByZXR1cm4ocCk7Ci0gICAgICAgIHZ2YnVmWzBdID0gcFsxMV07Ci0gICAgICAg IHZ2YnVmWzFdID0gcFsxMl07Ci0gICAgICAgIHZ2YnVmWzJdID0gTlVMOwotICAgICAgICByZXR1 cm4odnZidWYpOyAgICAgICAgICAgICAgICAgIC8qIGFuZCByZXR1cm4gaXQgKi8KLQotICAgICAg Y2FzZSBWTl9CSVRTOgkJCS8qIEJpdHMgKDE2LCAzMiwgNjQpICovCi0JaWYgKHNpemVvZihsb25n KSA+IDQpCi0JICByZXR1cm4oY2tpdG9hKDgqc2l6ZW9mKGxvbmcpKSk7Ci0JZWxzZQotCSAgcmV0 dXJuKGNraXRvYSg4KnNpemVvZihpbnQpKSk7Ci0KLSAgICAgIGNhc2UgVk5fTEFTVEtXVjoJCQkv KiAyMTIgKi8KLQlyZXR1cm4obGFzdGt3dmFsID8gbGFzdGt3dmFsIDogIiIpOwotCi0gICAgICBj YXNlIFZOX0hPU1RJUDogewkJCS8qIDIxMiAqLwotI2lmZGVmIFRDUFNPQ0tFVAotCSAgZXh0ZXJu IGNoYXIgaG9zdGlwYWRkcltdOwotCSAgcmV0dXJuKChjaGFyICopaG9zdGlwYWRkcik7Ci0jZWxz ZQotCSAgcmV0dXJuKCIiKTsKLSNlbmRpZgkvKiBUQ1BTT0NLRVQgKi8KLSAgICAgIH0KLSAgICAg IGNhc2UgVk5fSU5QTVNHOgotCXN3aXRjaCAoaW5zdGF0dXMpIHsKLQkgIGNhc2UgSU5QX09LOiAg cmV0dXJuKCJTVUNDRVNTIik7Ci0JICBjYXNlIElOUF9UTzogIHJldHVybigiVGltZWQgb3V0Iik7 Ci0JICBjYXNlIElOUF9VSTogIHJldHVybigiS2V5Ym9hcmQgaW50ZXJydXB0Iik7Ci0JICBjYXNl IElOUF9JRTogIHJldHVybigiSW50ZXJuYWwgZXJyb3IiKTsKLQkgIGNhc2UgSU5QX0lPOiAgcmV0 dXJuKCJJL08gZXJyb3Igb3IgY29ubmVjdGlvbiBsb3N0Iik7Ci0JICBjYXNlIElOUF9JS1M6IHJl dHVybigiSU5QVVQgZGlzYWJsZWQiKTsKLQkgIGNhc2UgSU5QX0JGOiAgcmV0dXJuKCJCdWZmZXIg ZmlsbGVkIGFuZCAvTk9XUkFQIHNldCIpOwotCSAgZGVmYXVsdDogICAgICByZXR1cm4oIlVua25v d24iKTsKLQl9Ci0KLSAgICAgIGNhc2UgVk5fVkFSRVZBTDoJCQkvKiAyMTIgKi8KLQlyZXR1cm4o dmFyZXZhbCA/ICJyZWN1cnNpdmUiIDogInNpbXBsZSIpOwotCi0gICAgICBjYXNlIFZOX0xPR19D T046CQkJLyogXHYoLi4uKSBmb3IgbG9nIGZpbGVzICovCi0jaWZkZWYgQ0tMT0dESUFMCi0gICAg ICAgIHJldHVybihkaWFmaWwpOwotI2Vsc2UgCi0gICAgICAgIHJldHVybigiIik7Ci0jZW5kaWYK LSAgICAgIGNhc2UgVk5fTE9HX1BLVDoKLSNpZm5kZWYgTk9YRkVSCi0gICAgICAgIHJldHVybihw a3RmaWwpOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuKCIiKTsKLSNlbmRpZgotICAgICAgY2FzZSBW Tl9MT0dfU0VTOgotI2lmbmRlZiBOT0xPQ0FMCi0gICAgICAgIHJldHVybihzZXNmaWwpOwotI2Vs c2UKLSAgICAgICAgcmV0dXJuKCIiKTsKLSNlbmRpZgotICAgICAgY2FzZSBWTl9MT0dfVFJBOgot I2lmZGVmIFRMT0cKLSAgICAgICAgcmV0dXJuKHRyYWZpbCk7Ci0jZWxzZQotICAgICAgICByZXR1 cm4oIiIpOwotI2VuZGlmCi0gICAgICBjYXNlIFZOX0xPR19ERUI6Ci0jaWZkZWYgREVCVUcKLSAg ICAgICAgcmV0dXJuKGRlYmZpbCk7Ci0jZWxzZQotICAgICAgICByZXR1cm4oIiIpOwotI2VuZGlm Ci0gICAgICBjYXNlIFZOX1BSRVZDTUQ6IHsKLQkgIGV4dGVybiBjaGFyICogcHJldmNtZDsKLQkg IHJldHVybihwcmV2Y21kID8gIHByZXZjbWQgOiAiIik7Ci0gICAgICB9Ci0gICAgfQotCi0jaWZu ZGVmIE5PRElBTAotICAgIHN3aXRjaCAoeSkgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENh bGxlciBJRCB2YWx1ZXMgKi8KLSAgICAgIGV4dGVybiBjaGFyCi0gICAgICAgICogY2FsbGlkX2Rh dGUsICogY2FsbGlkX3RpbWUsICogY2FsbGlkX25hbWUsCi0gICAgICAgICogY2FsbGlkX25tYnIs ICogY2FsbGlkX21lc2c7Ci0KLSAgICAgIGNhc2UgVk5fQ0lfREE6Ci0gICAgICAgIHJldHVybihj YWxsaWRfZGF0ZSA/IGNhbGxpZF9kYXRlIDogIiIpOwotCi0gICAgICBjYXNlIFZOX0NJX1RJOgot ICAgICAgICByZXR1cm4oY2FsbGlkX3RpbWUgPyBjYWxsaWRfdGltZSA6ICIiKTsKLQotICAgICAg Y2FzZSBWTl9DSV9OQToKLSAgICAgICAgcmV0dXJuKGNhbGxpZF9uYW1lID8gY2FsbGlkX25hbWUg OiAiIik7Ci0KLSAgICAgIGNhc2UgVk5fQ0lfTlU6Ci0gICAgICAgIHJldHVybihjYWxsaWRfbm1i ciA/IGNhbGxpZF9ubWJyIDogIiIpOwotCi0gICAgICBjYXNlIFZOX0NJX01FOgotICAgICAgICBy ZXR1cm4oY2FsbGlkX21lc2cgPyBjYWxsaWRfbWVzZyA6ICIiKTsKLQotICAgIH0gLyogRW5kIG9m IHZhcmlhYmxlLW5hbWUgc3dpdGNoZXMgKi8KLSNlbmRpZiAvKiBOT0RJQUwgKi8KLQotI2lmZGVm IE5UCi0gICAgc3dpdGNoICh5KSB7Ci0gICAgICBjYXNlIFZOX1BFUlNPTkFMOgotICAgICAgICBw ID0gKGNoYXIgKilHZXRQZXJzb25hbCgpOwotICAgICAgICBpZiAocCkgewotICAgICAgICAgICAg R2V0U2hvcnRQYXRoTmFtZShwLHZ2YnVmLFZWQlVGTCk7Ci0gICAgICAgICAgICByZXR1cm4odnZi dWYpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybigiIik7Ci0gICAgICBjYXNlIFZOX0RFU0tU T1A6Ci0gICAgICAgICAgcCA9IChjaGFyICopR2V0RGVza3RvcCgpOwotICAgICAgICAgIGlmIChw KSB7Ci0gICAgICAgICAgICAgIEdldFNob3J0UGF0aE5hbWUocCx2dmJ1ZixWVkJVRkwpOwotICAg ICAgICAgICAgICByZXR1cm4odnZidWYpOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4o IiIpOwotICAgICAgY2FzZSBWTl9DT01NT046Ci0gICAgICAgIHAgPSAoY2hhciAqKUdldEFwcERh dGEoMSk7Ci0gICAgICAgIGlmIChwKSB7Ci0gICAgICAgICAgICBja21ha21zZyh2dmJ1ZixWVkJV RkwscCwiS2VybWl0IDk1LyIsTlVMTCxOVUxMKTsKLSAgICAgICAgICAgIEdldFNob3J0UGF0aE5h bWUodnZidWYsdnZidWYsVlZCVUZMKTsKLSAgICAgICAgICAgIHJldHVybih2dmJ1Zik7Ci0gICAg ICAgIH0KLSAgICAgICAgcmV0dXJuKCIiKTsKLSAgICAgIGNhc2UgVk5fQVBQREFUQToKLSAgICAg ICAgcCA9IChjaGFyICopR2V0QXBwRGF0YSgwKTsKLSAgICAgICAgaWYgKHApIHsKLSAgICAgICAg ICAgIGNrbWFrbXNnKHZ2YnVmLFZWQlVGTCxwLCJLZXJtaXQgOTUvIixOVUxMLE5VTEwpOwotICAg ICAgICAgICAgR2V0U2hvcnRQYXRoTmFtZSh2dmJ1Zix2dmJ1ZixWVkJVRkwpOwotICAgICAgICAg ICAgcmV0dXJuKHZ2YnVmKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4oIiIpOwotICAgIH0K LSNlbmRpZiAvKiBOVCAqLwotCi0jaWZkZWYgVE5fQ09NUE9SVAotICAgIHN3aXRjaCAoeSkgewot ICAgICAgY2FzZSBWTl9UTkNfU0lHOiB7Ci0gICAgICAgIHAgPSAoY2hhciAqKSB0bmNfZ2V0X3Np Z25hdHVyZSgpOwotICAgICAgICBja3N0cm5jcHkodnZidWYscCA/IHAgOiAiIixWVkJVRkwpOwot ICAgICAgICByZXR1cm4odnZidWYpOwotICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBUTl9DT01Q T1JUICovCi0KLSNpZmRlZiBLVUkKLSAgICBzd2l0Y2ggKHkpIHsKLSAgICAgIGNhc2UgVk5fR1VJ X1JVTjogewotCSAgZXh0ZXJuIEhXTkQgZ2V0SHduZEtVSSgpOwotCSAgaWYgKCBJc0ljb25pYyhn ZXRId25kS1VJKCkpICkKLSAgICAgICAgICAgIHJldHVybigibWluaW1pemVkIik7Ci0JICBpZiAo IElzWm9vbWVkKGdldEh3bmRLVUkoKSkgKQotICAgICAgICAgICAgcmV0dXJuKCJtYXhpbWl6ZWQi KTsKLQkgIHJldHVybigicmVzdG9yZWQiKTsKLSAgICAgIH0KLSAgICAgIGNhc2UgVk5fR1VJX1hQ OgotICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsZ2V0X2d1aV93aW5kb3dfcG9zX3goKSk7ICAv KiBTQUZFICovCi0gICAgICAgIHJldHVybih2dmJ1Zik7Ci0gICAgICBjYXNlIFZOX0dVSV9ZUDoK LSAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLGdldF9ndWlfd2luZG93X3Bvc195KCkpOyAgLyog U0FGRSAqLwotICAgICAgICByZXR1cm4odnZidWYpOwotICAgICAgY2FzZSBWTl9HVUlfWFI6Ci0g ICAgICAgIHNwcmludGYodnZidWYsIiVkIixHZXRTeXN0ZW1NZXRyaWNzKFNNX0NYU0NSRUVOKSk7 ICAvKiBTQUZFICovCi0gICAgICAgIHJldHVybih2dmJ1Zik7Ci0gICAgICBjYXNlIFZOX0dVSV9Z UjoKLSAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLEdldFN5c3RlbU1ldHJpY3MoU01fQ1lTQ1JF RU4pKTsgIC8qIFNBRkUgKi8KLSAgICAgICAgcmV0dXJuKHZ2YnVmKTsKLSAgICAgIGNhc2UgVk5f R1VJX0ZOTToKLSAgICAgICAgICBpZiAoIG50ZXJtZm9udCA+IDAgKSB7Ci0gICAgICAgICAgICAg IGludCBpOwotICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnRlcm1mb250OyBpKyspIHsK LSAgICAgICAgICAgICAgICAgIGlmICh0dF9mb250ID09IHRlcm1fZm9udFtpXS5rd3ZhbCkgewot ICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweSh2dmJ1Zix0ZXJtX2ZvbnRbaV0ua3dkLFZW QlVGTCk7Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHZ2YnVmKTsKLSAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4o Iih1bmtub3duKSIpOwotICAgICAgY2FzZSBWTl9HVUlfRlNaOgotICAgICAgICAgIGNrc3RybmNw eSh2dmJ1Zixja2l0b2EodHRfZm9udF9zaXplLzIpLFZWQlVGTCk7Ci0gICAgICAgICAgaWYgKCB0 dF9mb250X3NpemUgJSAyICkKLSAgICAgICAgICAgICAgY2tzdHJuY2F0KHZ2YnVmLCIuNSIsVlZC VUZMKTsKLSAgICAgICAgICByZXR1cm4odnZidWYpOwotICAgIH0KLSNlbmRpZiAvKiBLVUkgKi8K LQotICAgIGZuc3VjY2VzcyA9IDA7Ci0gICAgaWYgKGZuZXJyb3IpIHsKLSAgICAgICAgZm5zdWNj ZXNzID0gMDsKLSAgICB9Ci0gICAgaWYgKGZuZGlhZ3MpIHsKLSAgICAgICAgaWYgKCFlbWJ1Zlsw XSkKLSAgICAgICAgICBja3N0cm5jcHkoZW1idWYsIjxFUlJPUjpOT19TVUNIX1ZBUklBQkxFPiIs RU1CVUZMRU4pOwotICAgICAgICBwcmludGYoIj8lc1xuIixlbWJ1Zik7Ci0gICAgICAgIHJldHVy bigoY2hhciAqKWVtYnVmKTsKLSAgICB9IGVsc2UKLSAgICAgIHJldHVybigiIik7Ci19Ci0jZW5k aWYgLyogTk9TUEwgKi8KLQotCi0vKgotICBYIFggUyBUIFIgSSBOIEcgIC0tICBFeHBhbmQgdmFy aWFibGVzIGFuZCBiYWNrc2xhc2ggY29kZXMuCi0KLSAgICBpbnQgeHh0c3RyaW5nKHMsJnMyLCZu KTsKLQotICBFeHBhbmRzIFwgZXNjYXBlcyB2aWEgcmVjdXJzaXZlIGRlc2NlbnQuCi0gIEFyZ3Vt ZW50IHMgaXMgYSBwb2ludGVyIHRvIHN0cmluZyB0byBleHBhbmQgKHNvdXJjZSkuCi0gIEFyZ3Vt ZW50IHMyIGlzIHRoZSBhZGRyZXNzIG9mIHdoZXJlIHRvIHB1dCByZXN1bHQgKGRlc3RpbmF0aW9u KS4KLSAgQXJndW1lbnQgbiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBkZXN0aW5hdGlvbiBzdHJpbmcg KHRvIHByZXZlbnQgb3ZlcnJ1bnMpLgotICBSZXR1cm5zIC0xIG9uIGZhaWx1cmUsIDAgb24gc3Vj Y2VzcywKLSAgICB3aXRoIGRlc3RpbmF0aW9uIHN0cmluZyBudWxsLXRlcm1pbmF0ZWQgYW5kIHMy IHBvaW50aW5nIHRvIHRoZQotICAgIHRlcm1pbmF0aW5nIG51bGwsIHNvIHRoYXQgc3Vic2VxdWVu dCBjaGFyYWN0ZXJzIGNhbiBiZSBhZGRlZC4KLSAgICBGYWlsdXJlIHJlYXNvbnMgaW5jbHVkZSBk ZXN0aW5hdGlvbiBidWZmZXIgaXMgZmlsbGVkIHVwLgotKi8KLQotI2RlZmluZSBYWERFUExJTSAx MDAgICAgICAgICAgICAgICAgICAgIC8qIFJlY3Vyc2lvbiBkZXB0aCBsaW1pdCAqLwotLyoKLSAg SW4gV2luZG93cyB0aGUgc3RhY2sgaXMgbGltaXRlZCB0byAyNTZLIHNvIGJpZyBjaGFyYWN0ZXIg YXJyYXlzIGxpa2UKLSAgdm5hbWJ1ZiBjYW4ndCBiZSBvbiB0aGUgc3RhY2sgaW4gcmVjdXJzaXZl IGZ1bmN0aW9ucyBsaWtlIHp6c3RyaW5nKCkuCi0gIEJ1dCB0aGF0J3Mgbm8gcmVhc29uIHVzZSBt YWxsb2MoKSBpbiBVbml4IG9yIFZNUywgd2hpY2ggZG9uJ3QgaGF2ZQotICB0aGlzIGtpbmQgb2Yg cmVzdHJpY3Rpb24uCi0qLwotI2lmZGVmIERWTkFNQlVGCQkJCS8qIER5bmFtaWMgdm5hbWJ1Zltd ICovCi0jdW5kZWYgRFZOQU1CVUYJCQkJLyogQ2xlYW4gc2xhdGUgKi8KLSNlbmRpZiAvKiBEVk5B TUJVRiAqLwotCi0jaWZuZGVmIE5PU1BMCQkJCS8qIE9ubHkgaWYgU1BMIGluY2x1ZGVkICovCi0j aWZkZWYgT1MyCQkJCS8qIE9ubHkgZm9yIEs5NSAqLwotI2RlZmluZSBEVk5BTUJVRgotI2VuZGlm IC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0KLWludAotenpzdHJpbmcocyxzMixuKSBj aGFyICpzOyBjaGFyICoqczI7IGludCAqbjsgewotICAgIGludCB4LCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEN1cnJlbnQgY2hhcmFjdGVyICovCi0gICAgICAgIHksICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogV29ya2VyICovCi0gICAgICAgIHBwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogUGFyZW4gbGV2ZWwgKi8KLSAgICAgICAga3AsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBCcmFjZSBsZXZlbCAqLwotICAgICAgICBhcmduLCAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEZ1bmN0aW9uIGFyZ3VtZW50IGNvdW50ZXIgKi8KLSAg ICAgICAgbjIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb2NhbCBjb3B5IG9mIG4g Ki8KLSAgICAgICAgZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBcnJheSBkaW1l bnNpb24gKi8KLSAgICAgICAgdmJpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBWYXJp YWJsZSBpZCAoaW50ZWdlciBmb3JtKSAqLwotICAgICAgICBhcmdsLCAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFN0cmluZyBhcmd1bWVudCBsZW5ndGggKi8KLSAgICAgICAgbngsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBTYXZlIG9yaWdpbmFsIGxlbmd0aCAqLwotCXF1b3Rp bmcgPSAwOwkJCS8qIDI5OSAqLwotCi0gICAgY2hhciB2YiwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogVmFyaWFibGUgaWQgKGNoYXIgZm9ybSkgKi8KLSAgICAgICAgKnZwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIHZhcmlhYmxlIGRlZmluaXRpb24gKi8K LSAgICAgICAgKm5ldywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb2NhbCBwb2ludGVy IHRvIHRhcmdldCBzdHJpbmcgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICpvbGQsICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogU2F2ZSBvcmlnaW5hbCB0YXJnZXQgcG9pbnRlciAqLwot I2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgKnAsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBXb3JrZXIgKi8KLSAgICAgICAgKnEsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBXb3JrZXIgKi8KLSAgICAgICAgKnMzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBXb3JrZXIgKi8KLSAgICBpbnQgIHgzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBX b3JrZXIgKi8KLSAgICBjaGFyICpyICA9IChjaGFyICopMDsgICAgICAgICAgICAgICAvKiBGb3Ig aG9sZGluZyBmdW5jdGlvbiBhcmdzICovCi0gICAgY2hhciAqcjIgPSAoY2hhciAqKTA7Ci0gICAg Y2hhciAqcjNwOwotCi0jaWZuZGVmIE5PU1BMCi0jaWZkZWYgRFZOQU1CVUYKLSAgICBjaGFyICog dm5hbWJ1ZiA9IE5VTEw7ICAgICAgICAgICAgICAvKiBCdWZmZXIgZm9yIHZhcmlhYmxlL2Z1bmN0 aW9uIG5hbWUgKi8KLSNlbHNlIC8qIERWTkFNQlVGICovCi0gICAgY2hhciB2bmFtYnVmW1ZOQU1M XTsgICAgICAgICAgICAgICAgLyogQnVmZmVyIGZvciB2YXJpYWJsZS9mdW5jdGlvbiBuYW1lICov Ci0jZW5kaWYgLyogRFZOQU1CVUYgKi8KLSAgICBjaGFyICphcmdwW0ZOQVJHU107ICAgICAgICAg ICAgICAgICAvKiBQb2ludGVycyB0byBmdW5jdGlvbiBhcmdzICovCi0jZW5kaWYgLyogTk9TUEwg Ki8KLQotICAgIHN0YXRpYyBpbnQgZGVwdGggPSAwOyAgICAgICAgICAgICAgIC8qIENhbGwgZGVw dGgsIGF2b2lkIG92ZXJmbG93ICovCi0KLSAgICBuMiA9ICpuOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBNYWtlIGxvY2FsIGNvcGllcyBvZiBhcmdzICovCi0gICAgbnggPSBuMjsKLQot I2lmZGVmIENPTU1FTlQKLSAgICAvKiBUaGlzIGlzIGFsd2F5cyAzMksgaW4gQklHQlVGT0sgYnVp bGRzICovCi0gICAgaWYgKGRlcHRoID09IDApCi0gICAgICBkZWJ1ZyhGMTAxLCJ6enN0cmluZyB0 b3AtbGV2ZWwgbiIsIiIsbjIpOwotI2VuZGlmCS8qIENPTU1FTlQgKi8KLQotICAgIG5ldyA9ICpz MjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciBvbmUgbGVzcyBsZXZlbCBvZiBpbmRp cmVjdGlvbiAqLwotI2lmZGVmIENPTU1FTlQKLSAgICBvbGQgPSBuZXc7Ci0jZW5kaWYgLyogQ09N TUVOVCAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgaXRzYXBhdHRlcm4gPSAwOwkJCS8qIEZvciBc ZnBhdHRlcm4oKSAqLwotICAgIGlzam9pbiA9IDA7CQkJCS8qIEZvciBcZmpvaW4oKSAqLwotI2Vu ZGlmIC8qIE5PU1BMICovCi0gICAgZGVwdGgrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogU2luayB0byBhIG5ldyBkZXB0aCAqLwotICAgIGlmIChkZXB0aCA+IFhYREVQTElNKSB7ICAg ICAgICAgICAgIC8qIFRvbyBkZWVwPyAqLwotICAgICAgICBwcmludGYoIj9kZWZpbml0aW9uIGlz IGNpcmN1bGFyIG9yIHRvbyBkZWVwXG4iKTsKLSAgICAgICAgZGVidWcoRjEwMSwienpzdHJpbmcg ZmFpbCIsIiIsZGVwdGgpOwotICAgICAgICBkZXB0aCA9IDA7Ci0gICAgICAgICpuZXcgPSBOVUw7 Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIGlmICghcyB8fCAhbmV3KSB7ICAgICAg ICAgICAgICAgICAgIC8qIFdhdGNoIG91dCBmb3IgbnVsbCBwb2ludGVycyAqLwotICAgICAgICBk ZWJ1ZyhGMTAxLCJ6enN0cmluZyBmYWlsIDIiLCIiLGRlcHRoKTsKLSAgICAgICAgaWYgKG5ldykK LSAgICAgICAgICAqbmV3ID0gTlVMOwotICAgICAgICBkZXB0aCA9IDA7Ci0gICAgICAgIHJldHVy bigtMSk7Ci0gICAgfQotICAgIHMzID0gczsKLSAgICBhcmdsID0gMDsKLSAgICB3aGlsZSAoKnMz KyspIGFyZ2wrKzsgICAgICAgICAgICAgIC8qIEdldCBsZW5ndGggb2Ygc291cmNlIHN0cmluZyAq LwotICAgIGRlYnVnKEYwMTAsInp6c3RyaW5nIGVudHJ5IixzLDApOwotICAgIGlmIChhcmdsID09 IDApIHsgICAgICAgICAgICAgICAgICAgIC8qIEVtcHR5IHN0cmluZyAqLwotICAgICAgICBkZWJ1 ZyhGMTExLCJ6enN0cmluZyBlbXB0eSBhcmciLHMsYXJnbCk7Ci0gICAgICAgIGRlcHRoID0gMDsK LSAgICAgICAgKm5ldyA9IE5VTDsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSAgICBpZiAo YXJnbCA8IDApIHsgICAgICAgICAgICAgICAgICAgICAvKiBXYXRjaCBvdXQgZm9yIGdhcmJhZ2Ug Ki8KLSAgICAgICAgZGVidWcoRjEwMSwienpzdHJpbmcgZmFpbCAzIiwiIixkZXB0aCk7Ci0gICAg ICAgICpuZXcgPSBOVUw7Ci0gICAgICAgIGRlcHRoID0gMDsKLSAgICAgICAgcmV0dXJuKC0xKTsK LSAgICB9Ci0jaWZkZWYgRFZOQU1CVUYKLSAgICBkZWJ1ZyhGMTAwLCJ2bmFtYnVmIG1hbGxvYy4u LiIsIiIsMCk7Ci0gICAgdm5hbWJ1ZiA9IG1hbGxvYyhWTkFNTCk7Ci0gICAgaWYgKHZuYW1idWYg PT0gTlVMTCkgewotICAgICAgICBwcmludGYoIj9PdXQgb2YgbWVtb3J5Iik7Ci0gICAgICAgIHJl dHVybigtMSk7Ci0gICAgfQotICAgIGRlYnVnKEYxMDAsInZuYW1idWYgbWFsbG9jIG9rIiwiIiww KTsKLSNlbmRpZiAvKiBEVk5BTUJVRiAqLwotCi0gICAgd2hpbGUgKCh4ID0gKnMpKSB7ICAgICAg ICAgICAgICAgICAgLyogTG9vcCBmb3IgYWxsIGNoYXJhY3RlcnMgKi8KLSAgICAgICAgaWYgKHgg IT0gQ01EUSkgeyAgICAgICAgICAgICAgICAvKiBJcyBpdCB0aGUgY29tbWFuZC1xdW90ZSBjaGFy PyAqLwotICAgICAgICAgICAgKm5ldysrID0gKnMrKzsgICAgICAgICAgICAgIC8qIE5vLCBub3Jt YWwgY2hhciwganVzdCBjb3B5ICovCi0gICAgICAgICAgICBpZiAoLS1uMiA8IDApIHsgICAgICAg ICAgICAgLyogYW5kIGNvdW50IGl0LCBjYXJlZnVsIG9mIG92ZXJmbG93ICovCi0gICAgICAgICAg ICAgICAgZGVidWcoRjEwMSwienpzdHJpbmcgb3ZlcmZsb3cgMSIsIiIsZGVwdGgpOwotICAgICAg ICAgICAgICAgIGRlcHRoID0gMDsKLSNpZmRlZiBEVk5BTUJVRgotICAgICAgICAgICAgICAgIGlm ICh2bmFtYnVmKSBmcmVlKHZuYW1idWYpOwotI2VuZGlmIC8qIERWTkFNQlVGICovCi0gICAgICAg ICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRpbnVl OwotICAgICAgICB9Ci0KLS8qIFdlIGhhdmUgdGhlIGNvbW1hbmQtcXVvdGUgY2hhcmFjdGVyLiAq LwotCi0gICAgICAgIHggPSAqKHMrMSk7ICAgICAgICAgICAgICAgICAgICAgLyogR2V0IHRoZSBm b2xsb3dpbmcgY2hhcmFjdGVyLiAqLwotICAgICAgICBpZiAoaXN1cHBlcih4KSkgeCA9IHRvbG93 ZXIoeCk7Ci0gICAgICAgIHN3aXRjaCAoeCkgeyAgICAgICAgICAgICAgICAgICAgLyogQWN0IGFj Y29yZGluZyB0byB2YXJpYWJsZSB0eXBlICovCi0jaWZuZGVmIE5PU1BMCi0gICAgICAgICAgY2Fz ZSAwOiAgICAgICAgICAgICAgICAgICAgICAgLyogSXQncyBhIGxvbmUgYmFja3NsYXNoICovCi0g ICAgICAgICAgICAqbmV3KysgPSAqcysrOwotICAgICAgICAgICAgaWYgKC0tbjIgPCAwKSB7Ci0g ICAgICAgICAgICAgICAgZGVidWcoRjEwMSwienpzdHJpbmcgb3ZlcmZsb3cgMiIsIiIsMCk7Ci0j aWZkZWYgRFZOQU1CVUYKLSAgICAgICAgICAgICAgICBpZiAodm5hbWJ1ZikgZnJlZSh2bmFtYnVm KTsKLSNlbmRpZiAvKiBEVk5BTUJVRiAqLwotICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICclJzogICAg ICAgICAgICAgICAgICAgICAvKiBWYXJpYWJsZSAqLwotICAgICAgICAgICAgcyArPSAyOyAgICAg ICAgICAgICAgICAgICAgIC8qIEdldCB0aGUgbGV0dGVyIG9yIGRpZ2l0ICovCi0gICAgICAgICAg ICB2YiA9ICpzKys7ICAgICAgICAgICAgICAgICAgLyogYW5kIG1vdmUgc291cmNlIHBvaW50ZXIg cGFzdCBpdCAqLwotICAgICAgICAgICAgdnAgPSBOVUxMOyAgICAgICAgICAgICAgICAgIC8qIEFz c3VtZSBkZWZpbml0aW9uIGlzIGVtcHR5ICovCi0gICAgICAgICAgICBpZiAodmIgPj0gJzAnICYm IHZiIDw9ICc5JykgeyAvKiBEaWdpdCBmb3IgbWFjcm8gYXJnICovCi0gICAgICAgICAgICAgICAg aWYgKG1hY2x2bCA8IDApICAgICAgICAgLyogRGlnaXQgdmFyaWFibGVzIGFyZSBnbG9iYWwgKi8K LSAgICAgICAgICAgICAgICAgIHZwID0gZ192YXJbdmJdOyAgICAgICAvKiBpZiBubyBtYWNybyBp cyBhY3RpdmUgKi8KLSAgICAgICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAvKiBv dGhlcndpc2UgKi8KLSAgICAgICAgICAgICAgICAgIHZwID0gbV9hcmdbbWFjbHZsXVt2YiAtICcw J107IC8qIHRoZXkncmUgb24gdGhlIHN0YWNrICovCi0gICAgICAgICAgICB9IGVsc2UgaWYgKHZi ID09ICcqJykgeyAgICAgLyogTWFjcm8gYXJncyBzdHJpbmcgKi8KLSNpZmRlZiBDT01NRU5UCi0g ICAgICAgICAgICAgICAgLyogVGhpcyBkb2Vzbid0IHRha2UgY2hhbmdlcyBpbnRvIGFjY291bnQg Ki8KLSAgICAgICAgICAgICAgICB2cCA9IChtYWNsdmwgPj0gMCkgPyBtX2xpbmVbbWFjbHZsXSA6 IHRvcGxpbmU7Ci0gICAgICAgICAgICAgICAgaWYgKCF2cCkgdnAgPSAiIjsKLSNlbHNlCi0JCWNo YXIgKiBzcyA9IG5ldzsKLSAgICAgICAgICAgICAgICBpZiAoenpzdHJpbmcoIlxcZmpvaW4oJl9b XSwsMSkiLCZuZXcsJm4yKSA8IDApIHsKLSNpZmRlZiBEVk5BTUJVRgotCQkgICAgaWYgKHZuYW1i dWYpIGZyZWUodm5hbWJ1Zik7Ci0jZW5kaWYgLyogRFZOQU1CVUYgKi8KLQkJICAgIHJldHVybigt MSk7Ci0JCX0KLQkJZGVidWcoRjExMCwienpzdHJpbmcgXFwlKiIsc3MsMCk7Ci0gICAgICAgICAg ICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgICAgICBpZiAoaXN1cHBlcih2YikpIHZiICs9ICgnYSctJ0EnKTsKLSAgICAg ICAgICAgICAgICB2cCA9IGdfdmFyW3ZiXTsgICAgICAgICAvKiBMZXR0ZXIgZm9yIGdsb2JhbCB2 YXJpYWJsZSAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCF2cCkgdnAgPSAiIjsK LSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICBpZiAodnApIHsgICAgICAgICAgICAgICAgICAg LyogSWYgZGVmaW5pdGlvbiBub3QgZW1wdHkgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0JCWlm ICh2YXJldmFsKSB7Ci0JCSAgICBkZWJ1ZyhGMDEwLCJ6enN0cmluZyAlbiB2cCIsdnAsMCk7Ci0J CSAgICAvKiBjYWxsIHNlbGYgdG8gZXZhbHVhdGUgaXQgKi8KLQkJICAgIGlmICh6enN0cmluZyh2 cCwmbmV3LCZuMikgPCAwKSB7Ci0JCQlkZWJ1ZyhGMTAxLCJ6enN0cmluZyBmYWlsIDYiLCIiLGRl cHRoKTsKLSNpZmRlZiBEVk5BTUJVRgotCQkJaWYgKHZuYW1idWYpIGZyZWUodm5hbWJ1Zik7Ci0j ZW5kaWYgLyogRFZOQU1CVUYgKi8KLQkJCXJldHVybigtMSk7CS8qIFBhc3MgYWxvbmcgZmFpbHVy ZSAqLwotCQkgICAgfQotCQl9IGVsc2UgewotCQkgICAgd2hpbGUgKCgqbmV3KysgPSAqdnArKykp IC8qIGNvcHkgaXQgdG8gb3V0cHV0IHN0cmluZy4gKi8KLQkJICAgICAgaWYgKC0tbjIgPCAwKSB7 Ci0JCQkgIGlmIChxKSBmcmVlKHEpOwotCQkJICBkZWJ1ZyhGMTAxLCJ6enN0cmluZyBvdmVyZmxv dyA0LjUiLCIiLGRlcHRoKTsKLSNpZmRlZiBEVk5BTUJVRgotCQkJICBpZiAodm5hbWJ1ZikgZnJl ZSh2bmFtYnVmKTsKLSNlbmRpZiAvKiBEVk5BTUJVRiAqLwotCQkJICByZXR1cm4oLTEpOwotCQkg ICAgICB9Ci0JCSAgICBuZXctLTsJCS8qIEJhY2sgdXAgb3ZlciB0ZXJtaW5hdGluZyBudWxsICov Ci0JCSAgICBuMisrOwkJLyogdG8gYWxsb3cgZm9yIGZ1cnRoZXIgZGVwb3NpdHMuICovCi0JCX0K LSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRl YnVnKEYxMTAsInp6c3RyaW5nICVuIHZwIiwiKE5VTEwpIiwwKTsKLSAgICAgICAgICAgICAgICBu MiA9IG54OwotICAgICAgICAgICAgICAgIG5ldyA9IG9sZDsKLSAgICAgICAgICAgICAgICAqbmV3 ID0gTlVMOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgIGNhc2UgJyYnOiAgICAgICAgICAgICAgICAgICAgIC8qIEFuIGFy cmF5IHJlZmVyZW5jZSAqLwotICAgICAgICAgICAgeCA9IGFycmF5bmFtKHMsJnZiaSwmZCk7ICAg IC8qIEdldCBuYW1lIGFuZCBzdWJzY3JpcHQgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTEsInp6 c3RyaW5nIGFycmF5bmFtIixzLHgpOwotICAgICAgICAgICAgaWYgKHggPCAwKSB7Ci0gICAgICAg ICAgICAgICAgZGVidWcoRjEwMSwienpzdHJpbmcgZmFpbCA3IiwiIixkZXB0aCk7Ci0jaWZkZWYg RFZOQU1CVUYKLSAgICAgICAgICAgICAgICBpZiAodm5hbWJ1ZikgZnJlZSh2bmFtYnVmKTsKLSNl bmRpZiAvKiBEVk5BTUJVRiAqLwotICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgICAgICBwcCA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogQnJhY2tl dCBjb3VudGVyICovCi0gICAgICAgICAgICB3aGlsZSAoKnMpIHsgICAgICAgICAgICAgICAgLyog QWR2YW5jZSBzb3VyY2UgcG9pbnRlci4uLiAqLwotICAgICAgICAgICAgICAgIGlmICgqcyA9PSAn WycpIHBwKys7Ci0gICAgICAgICAgICAgICAgaWYgKCpzID09ICddJyAmJiAtLXBwID09IDApIGJy ZWFrOwotICAgICAgICAgICAgICAgIHMrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm ICgqcyA9PSAnXScpIHMrKzsgICAgICAgICAvKiAuLi5wYXN0IHRoZSBjbG9zaW5nIGJyYWNrZXQu ICovCi0KLSAgICAgICAgICAgIHggPSBjaGthcnJheSh2YmksZCk7ICAgICAgICAvKiBBcnJheSBp cyBkZWNsYXJlZD8gKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMDEsInp6c3RyaW5nIGNoa2FycmF5 IiwiIix4KTsKLSAgICAgICAgICAgIGlmICh4ID4gLTEpIHsKLSNpZmRlZiBDT01NRU5UCi0gICAg ICAgICAgICAgICAgY2hhciAqIHMxID0gTlVMTDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAg ICAgICAgICAgICAgdmJpIC09IEFSUkFZQkFTRTsgICAgICAgLyogQ29udmVydCBuYW1lIHRvIGlu ZGV4ICovCi0KLSAgICAgICAgICAgICAgICAgIGlmIChhX2RpbVt2YmldID49IGQpIHsgLyogSWYg c3Vic2NyaXB0IGluIHJhbmdlICovCi0gICAgICAgICAgICAgICAgICAgIGNoYXIgKiphcDsKLSAg ICAgICAgICAgICAgICAgICAgYXAgPSBhX3B0clt2YmldOyAgICAvKiBnZXQgZGF0YSBwb2ludGVy ICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChhcCkgeyAgICAgICAgICAgLyogYW5kIGlmIHRo ZXJlIGlzIG9uZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFwW2RdKSB7ICAgIC8q IElmIGRlZmluaXRpb24gbm90IGVtcHR5ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ZGVidWcoRjExMSwienpzdHJpbmcgYXBbZF0iLGFwW2RdLGQpOwotCQkJICAgIGlmICh2YXJldmFs KSB7Ci0JCQkJaWYgKHp6c3RyaW5nKGFwW2RdLCZuZXcsJm4yKSA8IDApIHsKLQkJCQkgICAgZGVi dWcoRjEwMSwienpzdHJpbmcgZmFpbCA4IiwiIixkZXB0aCk7Ci0jaWZkZWYgRFZOQU1CVUYKLQkJ CQkgICAgaWYgKHZuYW1idWYpIGZyZWUodm5hbWJ1Zik7Ci0jZW5kaWYgLyogRFZOQU1CVUYgKi8K LQkJCQkgICAgcmV0dXJuKC0xKTsgLyogUGFzcyBhbG9uZyBmYWlsdXJlICovCi0JCQkJfQotCQkJ ICAgIH0gZWxzZSB7Ci0JCQkJdnAgPSBhcFtkXTsKLQkJCQl3aGlsZSAoKCpuZXcrKyA9ICp2cCsr KSkgLyogY29weSB0byByZXN1bHQgKi8KLQkJCQkgIGlmICgtLW4yIDwgMCkgewotCQkJCSAgICAg IGlmIChxKSBmcmVlKHEpOwotCQkJCSAgICAgIGRlYnVnKEYxMDEsCi0JCQkJCSAgICAienpzdHJp bmcgb3ZlcmZsb3cgOC41IiwiIixkZXB0aCk7Ci0jaWZkZWYgRFZOQU1CVUYKLQkJCQkgICAgICBp ZiAodm5hbWJ1ZikgZnJlZSh2bmFtYnVmKTsKLSNlbmRpZiAvKiBEVk5BTUJVRiAqLwotCQkJCSAg ICAgIHJldHVybigtMSk7Ci0JCQkJICB9Ci0JCQkJbmV3LS07CS8qIEJhY2sgdXAgb3ZlciB0ZXJt aW5hdGluZyBudWxsICovCi0JCQkJbjIrKzsJLyogdG8gYWxsb3cgZm9yIGZ1cnRoZXIgZGVwb3Np dHMuICovCi0JCQkgICAgfQotCQkJfQotCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgICAvKiBvbGQgPSBuZXc7ICovCi0gICAgICAgICAgICAgICAg ICAgICAgICBuMiA9IG54OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg fQotCSAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgJ2YnOiAgICAg ICAgICAgICAgICAgICAgIC8qIEEgYnVpbHRpbiBmdW5jdGlvbiAqLwotICAgICAgICAgICAgcSA9 IHZuYW1idWY7ICAgICAgICAgICAgICAgIC8qIENvcHkgdGhlIG5hbWUgKi8KLSAgICAgICAgICAg IHkgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBpbnRvIGEgc2VwYXJhdGUgYnVmZmVyICov Ci0gICAgICAgICAgICBzICs9IDI7ICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnQgcGFzdCAn RicgKi8KLSAgICAgICAgICAgIHdoaWxlICh5KysgPCBWTkFNTCkgewotICAgICAgICAgICAgICAg IGlmICgqcyA9PSAnKCcpIHsgcysrOyBicmVhazsgfSAvKiBMb29rIGZvciBvcGVuIHBhcmVuICov Ci0gICAgICAgICAgICAgICAgaWYgKCgqcSA9ICpzKSA9PSBOVUwpIGJyZWFrOyAgIC8qIG9yIGVu ZCBvZiBzdHJpbmcgKi8KLSAgICAgICAgICAgICAgICBzKys7IHErKzsKLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgICpxID0gTlVMOyAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGUgZnVu Y3Rpb24gbmFtZSAqLwotICAgICAgICAgICAgaWYgKHkgPj0gVk5BTUwpIHsgICAgICAgICAgIC8q IEhhbmRsZSBwYXRob2xvZ2ljYWwgY2FzZSAqLwotICAgICAgICAgICAgICAgIHdoaWxlICgqcyAm JiAoKnMgIT0gJygnKSkgLyogb2YgdmVyeSBsb25nIHN0cmluZyBlbnRlcmVkICovCi0gICAgICAg ICAgICAgICAgICBzKys7ICAgICAgICAgICAgICAgICAgICAvKiBhcyBmdW5jdGlvbiBuYW1lLiAq LwotICAgICAgICAgICAgICAgIGlmICgqcyA9PSAnKScpIHMrKzsgICAgICAgLyogU2tpcCBwYXN0 IGl0LiAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgciA9IHIyID0gbWFsbG9jKGFyZ2wr Mik7ICAgIC8qIEFuZCBtYWtlIGEgcGxhY2UgdG8gY29weSBhcmdzICovCi0gICAgICAgICAgICAv KiBkZWJ1ZyhGMTAxLCJ6enN0cmluZyByMiIsIiIscjIpOyAqLwotICAgICAgICAgICAgaWYgKCFy MikgeyAgICAgICAgICAgICAgICAgIC8qIFdhdGNoIG91dCBmb3IgbWFsbG9jIGZhaWx1cmUgKi8K LSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6enN0cmluZyBmYWlsIDkiLCIiLGRlcHRoKTsK LSAgICAgICAgICAgICAgICAqbmV3ID0gTlVMOwotICAgICAgICAgICAgICAgIGRlcHRoID0gMDsK LSNpZmRlZiBEVk5BTUJVRgotICAgICAgICAgICAgICAgIGlmICh2bmFtYnVmKSBmcmVlKHZuYW1i dWYpOwotI2VuZGlmIC8qIERWTkFNQlVGICovCi0gICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsK LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyMykgZnJlZShyMyk7IC8qIEFuZCBhbm90 aGVyIHRvIGNvcHkgbGl0ZXJhbCBhcmcgc3RyaW5nICovCi0gICAgICAgICAgICByMyA9IG1hbGxv YyhhcmdsKzIpOwotICAgICAgICAgICAgLyogZGVidWcoRjEwMSwienpzdHJpbmcgcjMiLCIiLHIz KTsgKi8KLSAgICAgICAgICAgIGlmICghcjMpIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAx LCJ6enN0cmluZyBmYWlsIDEwIiwiIixkZXB0aCk7Ci0gICAgICAgICAgICAgICAgZGVwdGggPSAw OwotICAgICAgICAgICAgICAgICpuZXcgPSBOVUw7Ci0gICAgICAgICAgICAgICAgaWYgKHIyKSBm cmVlKHIyKTsKLSNpZmRlZiBEVk5BTUJVRgotICAgICAgICAgICAgICAgIGlmICh2bmFtYnVmKSBm cmVlKHZuYW1idWYpOwotI2VuZGlmIC8qIERWTkFNQlVGICovCi0gICAgICAgICAgICAgICAgcmV0 dXJuKC0xKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICByM3AgPSByMzsKLSAg ICAgICAgICAgIGFyZ24gPSAwOyAgICAgICAgICAgICAgICAgICAvKiBBcmd1bWVudCBjb3VudGVy ICovCi0gICAgICAgICAgICBhcmdwW2FyZ24rK10gPSByOyAgICAgICAgICAgLyogUG9pbnQgdG8g Zmlyc3QgYXJndW1lbnQgKi8KLSAgICAgICAgICAgIHkgPSAwOyAgICAgICAgICAgICAgICAgICAg ICAvKiBDb21wbGV0aW9uIGZsYWcgKi8KLSAgICAgICAgICAgIHBwID0gMTsgICAgICAgICAgICAg ICAgICAgICAvKiBQYXJlbiBsZXZlbCAoYWxyZWFkeSBoYXZlIG9uZSkuICovCi0gICAgICAgICAg ICBrcCA9IDA7Ci0gICAgICAgICAgICB3aGlsZSAoMSkgeyAgICAgICAgICAgICAgICAgLyogQ29w eSBlYWNoIGFyZ3VtZW50LCBjaGFyIGJ5IGNoYXIuICovCi0gICAgICAgICAgICAgICAgKnIzcCsr ID0gKnM7ICAgICAgICAgICAgLyogVGhpcyBpcyBhIGxpdGVyYWwgY29weSBmb3IgXGZsaXQgKi8K LSAgICAgICAgICAgICAgICBpZiAoISpzKSBicmVhazsKLQotICAgICAgICAgICAgICAgIGlmICgq cyA9PSAneycpIHsgICAgICAgIC8qIExlZnQgYnJhY2UgKi8KLSAgICAgICAgICAgICAgICAgICAg a3ArKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCpzID09ICd9Jykg eyAgICAgICAgLyogUmlnaHQgYnJhY2UgKi8KLSAgICAgICAgICAgICAgICAgICAga3AtLTsKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCpzID09ICcoJyAmJiBrcCA8PSAw KSB7IC8qIE9wZW4gcGFyZW4gbm90IGluIGJyYWNlICovCi0gICAgICAgICAgICAgICAgICAgIHBw Kys7ICAgICAgICAgICAgICAgLyogQ291bnQgaXQgKi8KLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgKnIgPSAqczsgICAgICAgICAgICAgICAgLyogTm93IGNvcHkgcmVzdWx0aW5n IGJ5dGUgKi8KLSAgICAgICAgICAgICAgICBpZiAoISpyKSAgICAgICAgICAgICAgICAvKiBJZiBO VUwsIGRvbmUuICovCi0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBp ZiAoKnIgPT0gJyknICYmIGtwIDw9IDApIHsgLyogQ2xvc2luZyBwYXJlbiwgY291bnQgaXQuICov Ci0gICAgICAgICAgICAgICAgICAgIGlmICgtLXBwID09IDApIHsgICAgLyogRmluYWwgb25lPyAq LwotICAgICAgICAgICAgICAgICAgICAgICAgKnIgPSBOVUw7ICAgICAgIC8qIE1ha2UgaXQgYSB0 ZXJtaW5hdGluZyBudWxsICovCi0gICAgICAgICAgICAgICAgICAgICAgICAqKHIzcCAtIDEpID0g TlVMOwotICAgICAgICAgICAgICAgICAgICAgICAgcysrOyAgICAgICAgICAgIC8qIFBvaW50IHBh c3QgaXQgaW4gc291cmNlIHN0cmluZyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgeSA9IDE7 ICAgICAgICAgIC8qIEZsYWcgd2UndmUgZ290IGFsbCB0aGUgYXJncyAqLwotICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIERvbmUgd2l0aCB3aGlsZSBsb29wICovCi0g ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg aWYgKCpyID09ICcsJyAmJiBrcCA8PSAwKSB7IC8qIENvbW1hICovCi0gICAgICAgICAgICAgICAg ICAgIGlmIChwcCA9PSAxKSB7ICAgICAgICAgIC8qIElmIG5vdCB3aXRoaW4gKCkncywgKi8KLSAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmduID49IEZOQVJHUykgeyAvKiBUb28gbWFueSBh cmdzICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcysrOyByKys7ICAgLyogS2VlcCBj b2xsZWN0aW5nIGZsaXQoKSBzdHJpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg ICAgICpyID0gTlVMOyAgICAgICAgICAgLyogTmV3IGFyZywgc2tpcCBwYXN0IGNvbW1hICovCi0g ICAgICAgICAgICAgICAgICAgICAgICBhcmdwW2FyZ24rK10gPSByKzE7IC8qIEluIHJhbmdlLCBw b2ludCB0byBuZXcgYXJnICovCi0gICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAg ICAgLyogT3RoZXJ3aXNlIGp1c3Qgc2tpcCBwYXN0ICAqLwotICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICBzKys7IHIrKzsgICAgICAgICAgICAgICAvKiBBZHZhbmNlIHBvaW50ZXJz ICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXkpICAgICAgICAgICAgICAgICAg ICAgLyogSWYgd2UgZGlkbid0IGZpbmQgY2xvc2luZyBwYXJlbiAqLwotICAgICAgICAgICAgICBh cmduID0gLTE7Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgICAgIGlmIChkZWJsb2cpIHsKLSAgICAg ICAgICAgICAgICBjaGFyIGJ1ZlsyNF07Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwienpz dHJpbmcgZnVuY3Rpb24gbmFtZSIsdm5hbWJ1Zix5KTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhG MDEwLCJ6enN0cmluZyBmdW5jdGlvbiByMyIscjMsMCk7Ci0gICAgICAgICAgICAgICAgZm9yICh5 ID0gMDsgeSA8IGFyZ247IHkrKykgewotICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1Ziwi YXJnICUyZCAiLHkpOwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMDEwLGJ1ZixhcmdwW3ld LDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBERUJVRyAq LwotCSAgICB7Ci0JICAgICAvKiBJbiBjYXNlIHRoZSBmdW5jdGlvbiBuYW1lIGl0c2VsZiBpcyBj b25zdHJ1Y3RlZCAqLwotCQljaGFyIGJ1Zls2NF07IGNoYXIgKiBwID0gYnVmOyBpbnQgbiA9IDY0 OyAKLQkJaWYgKHp6c3RyaW5nKHZuYW1idWYsJnAsJm4pID4gLTEpCi0JCSAgY2tzdHJuY3B5KHZu YW1idWYsYnVmLDY0KTsKLQkgICAgfQotICAgICAgICAgICAgdnAgPSBmbmV2YWwodm5hbWJ1Zixh cmdwLGFyZ24scjMpOyAvKiBFdmFsdWF0ZSB0aGUgZnVuY3Rpb24uICovCi0gICAgICAgICAgICBp ZiAodnApIHsgICAgICAgICAgICAgICAgICAgICAgLyogSWYgZGVmaW5pdGlvbiBub3QgZW1wdHkg Ki8KLSAgICAgICAgICAgICAgICB3aGlsZSAoKCpuZXcrKyA9ICp2cCsrKSkgeyAvKiBjb3B5IGl0 IHRvIG91dHB1dCBzdHJpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKC0tbjIgPCAwKSB7 ICAgICAgICAvKiB3YXRjaCBvdXQgZm9yIG92ZXJmbG93ICovCi0gICAgICAgICAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJ6enN0cmluZyBmYWlsIDEyIiwiIixkZXB0aCk7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBpZiAocjIpIHsgZnJlZShyMik7IHIyID0gTlVMTDsgfQotICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKHIzKSB7IGZyZWUocjMpOyByMyA9IE5VTEw7IH0KLSNpZmRlZiBE Vk5BTUJVRgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZuYW1idWYpIGZyZWUodm5hbWJ1 Zik7Ci0jZW5kaWYgLyogRFZOQU1CVUYgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy bigtMSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgbmV3LS07ICAgICAgICAgICAgICAgICAgLyogQmFjayB1cCBvdmVyIHRlcm1pbmF0 aW5nIG51bGwgKi8KLSAgICAgICAgICAgICAgICBuMisrOyAgICAgICAgICAgICAgICAgICAvKiB0 byBhbGxvdyBmb3IgZnVydGhlciBkZXBvc2l0cy4gKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIGlmIChyMikgeyBmcmVlKHIyKTsgcjIgPSBOVUxMOyB9Ci0gICAgICAgICAgICBpZiAocjMp IHsgZnJlZShyMyk7IHIzID0gTlVMTDsgfQotICAgICAgICAgICAgYnJlYWs7Ci0JICBjYXNlICdx JzoJCQkvKiAyOTkgU3RyaW5nIHRvIGJlIHRha2UgbGl0ZXJhbGx5ICovCi0JICAgIHF1b3Rpbmcg PSAxOwkJLyogMjk5ICovCi0gICAgICAgICAgY2FzZSAnJCc6ICAgICAgICAgICAgICAgICAgICAg LyogQW4gZW52aXJvbm1lbnQgdmFyaWFibGUgKi8KLSAgICAgICAgICBjYXNlICd2JzogICAgICAg ICAgICAgICAgICAgICAvKiBPciBhIG5hbWVkIGJ1aWx0aW4gdmFyaWFibGUuICovCi0gICAgICAg ICAgY2FzZSAnbSc6ICAgICAgICAgICAgICAgICAgICAgLyogT3IgYSBtYWNybyAvbG9uZyB2YXJp YWJsZSAqLwotICAgICAgICAgIGNhc2UgJ3MnOiAgICAgICAgICAgICAgICAgICAgIC8qIDE5NiBN YWNybyBzdWJzdHJpbmcgKi8KLSAgICAgICAgICBjYXNlICc6JzogICAgICAgICAgICAgICAgICAg ICAvKiAxOTYgXC12YXJpYWJsZSBzdWJzdHJpbmcgKi8KLSAgICAgICAgICAgIHBwID0gMDsKLSAg ICAgICAgICAgIHAgPSBzKzI7ICAgICAgICAgICAgICAgICAgICAvKiAkL1YvTSBtdXN0IGJlIGZv bGxvd2VkIGJ5IChuYW1lKSAqLwotICAgICAgICAgICAgaWYgKCpwICE9ICcoJykgeyAgICAgICAg ICAgIC8qIGFzIGluIFwkKEhPTUUpIG9yIFxWKGNvdW50KSAqLwotICAgICAgICAgICAgICAgICpu ZXcrKyA9ICpzKys7ICAgICAgICAgIC8qIElmIG5vdCwganVzdCBjb3B5IGl0ICovCi0gICAgICAg ICAgICAgICAgaWYgKC0tbjIgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEs Inp6c3RyaW5nIG92ZXJmbG93IDMiLCIiLGRlcHRoKTsKLSNpZmRlZiBEVk5BTUJVRgotICAgICAg ICAgICAgICAgICAgICBpZiAodm5hbWJ1ZikgZnJlZSh2bmFtYnVmKTsKLSNlbmRpZiAvKiBEVk5B TUJVRiAqLwotICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBw Kys7Ci0gICAgICAgICAgICBwKys7ICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8g MXN0IGNoYXIgb2YgbmFtZSAqLwotICAgICAgICAgICAgcSA9IHZuYW1idWY7ICAgICAgICAgICAg ICAgIC8qIENvcHkgdGhlIG5hbWUgKi8KLSAgICAgICAgICAgIHkgPSAwOyAgICAgICAgICAgICAg ICAgICAgICAvKiBpbnRvIGEgc2VwYXJhdGUgYnVmZmVyICovCi0JICAgIGRlYnVnKEYxMTAsIj4+ Pj4gXFxxKEFSRykiLHAsMCk7Ci0gICAgICAgICAgICB3aGlsZSAoeSsrIDwgVk5BTUwpIHsgICAg ICAgLyogV2F0Y2ggb3V0IGZvciBuYW1lIHRvbyBsb25nICovCi0gICAgICAgICAgICAgICAgaWYg KCpwID09ICcoJykgeyAgICAgICAgLyogUGFyZW5zIGNhbiBiZSBuZXN0ZWQuLi4gKi8KLQkJICAg IGlmICgqKHAtMSkgIT0gQ01EUSkJLyogMjk5ICovCi0JCSAgICAgIHBwKys7Ci0gICAgICAgICAg ICAgICAgfSBlbHNlIGlmICgqcCA9PSAnKScpIHsgLyogTmFtZSBwcm9wZXJseSB0ZXJtaW5hdGVk IHdpdGggJyknICovCi0JCSAgICBpZiAoKihwLTEpICE9IENNRFEpCS8qIDI5OSAqLwotCQkgICAg ICBwcC0tOwotICAgICAgICAgICAgICAgICAgICBpZiAocHAgPT0gMCkgewotICAgICAgICAgICAg ICAgICAgICAgICAgcCsrOyAgICAgICAgICAgIC8qIE1vdmUgc291cmNlIHBvaW50ZXIgcGFzdCAn KScgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgoKnEgPSAqcCkgPT0g TlVMKSAgIC8qIFN0cmluZyBlbmRzIGJlZm9yZSAnKScgKi8KLSAgICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICAgIHArKzsgcSsrOyAgICAgICAgICAgICAgIC8qIEFkdmFuY2Ug cG9pbnRlcnMgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpxID0gTlVMOyAgICAgICAg ICAgICAgICAgICAvKiBUZXJtaW5hdGUgdGhlIHZhcmlhYmxlIG5hbWUgKi8KLSAgICAgICAgICAg IGlmICh5ID49IFZOQU1MKSB7ICAgICAgICAgICAvKiBIYW5kbGUgcGF0aG9sb2dpY2FsIGNhc2Ug Ki8KLSAgICAgICAgICAgICAgICB3aGlsZSAoKnAgJiYgKCpwICE9ICcpJykpIC8qIG9mIHZlcnkg bG9uZyBzdHJpbmcgZW50ZXJlZCAqLwotICAgICAgICAgICAgICAgICAgcCsrOyAgICAgICAgICAg ICAgICAgICAgLyogYXMgdmFyaWFibGUgbmFtZS4gKi8KLSAgICAgICAgICAgICAgICBpZiAoKnAg PT0gJyknKSBwKys7ICAgICAgIC8qIFNraXAgYWhlYWQgdG8gdGhlIGVuZCBvZiBpdC4gKi8KLSAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIHMgPSBwOyAgICAgICAgICAgICAgICAgICAgICAvKiBB ZGp1c3QgZ2xvYmFsIHNvdXJjZSBwb2ludGVyICovCi0gICAgICAgICAgICBzMyA9IHZuYW1idWY7 Ci0gICAgICAgICAgICB4MyA9IDA7Ci0gICAgICAgICAgICB3aGlsZSAoKnMzKyspIHgzKys7Ci0g ICAgICAgICAgICBwID0gbWFsbG9jKHgzICsgMSk7ICAgICAgICAgLyogTWFrZSB0ZW1wb3Jhcnkg c3BhY2UgKi8KLSAgICAgICAgICAgIGlmIChwICYmICFxdW90aW5nKSB7CS8qIElmIHdlIGdvdCB0 aGUgc3BhY2UgKi8KLSAgICAgICAgICAgICAgICB2cCA9IHZuYW1idWY7ICAgICAgICAgICAvKiBQ b2ludCB0byBvcmlnaW5hbCAqLwotICAgICAgICAgICAgICAgIHN0cmNweShwLHZwKTsgICAgICAg ICAgIC8qIChzYWZlKSBNYWtlIGEgY29weSBvZiBpdCAqLwotICAgICAgICAgICAgICAgIHkgPSBW TkFNTDsgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBuYW1lIGJ1ZmZlciAqLwotICAgICAgICAg ICAgICAgIHp6c3RyaW5nKHAsJnZwLCZ5KTsgICAgIC8qIEV2YWx1YXRlIHRoZSBjb3B5ICovCi0g ICAgICAgICAgICAgICAgZnJlZShwKTsgICAgICAgICAgICAgICAgLyogRnJlZSB0aGUgdGVtcG9y YXJ5IHNwYWNlICovCi0gICAgICAgICAgICAgICAgcCA9IE5VTEw7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ6enN0cmluZyB2bmFtZSIsdm5hbWJ1ZiwwKTsKLSAgICAg ICAgICAgIHEgPSBOVUxMOwotCSAgICBpZiAoeCA9PSAncScpIHsJCS8qIDI5OSBRdW90aW5nIHRo aXMgc3RyaW5nICovCi0JCXZwID0gdm5hbWJ1ZjsJCS8qIDI5OSAqLwotCQlkZWJ1ZyhGMTEwLCI+ Pj4gVlAiLHZwLDApOwotCSAgICB9IGVsc2UgaWYgKHggPT0gJyQnKSB7CS8qIExvb2sgdXAgaXRz IHZhbHVlICovCi0gICAgICAgICAgICAgICAgdnAgPSBnZXRlbnYodm5hbWJ1Zik7ICAgLyogVGhp cyB3YXkgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlICovCi0gICAgICAgICAgICB9IGVsc2UgaWYg KHggPT0gJ20nIHx8IHggPT0gJ3MnIHx8IHggPT0gJzonKSB7IC8qIE1hY3JvIC8gc3Vic3RyICov Ci0gICAgICAgICAgICAgICAgaW50IGssIHgxID0gLTEsIHgyID0gLTE7Ci0JCWNoYXIgYyA9IE5V TDsgCi0gICAgICAgICAgICAgICAgayA9IHN0cmxlbih2bmFtYnVmKTsKLSAgICAgICAgICAgICAg ICAvKiBccyhuYW1lW246bV0pIC0tIENvbXBhY3Qgc3Vic3RyaW5nIG5vdGF0aW9uICovCi0gICAg ICAgICAgICAgICAgaWYgKCh4ID09ICdzJyB8fCB4ID09ICc6JykgJiYgKGsgPiAxKSkgeyAvKiBT dWJzdHJpbmcgd2FudGVkICovCi0JCSAgICBpbnQgYnByYzsKLSAgICAgICAgICAgICAgICAgICAg aWYgKHZuYW1idWZbay0xXSA9PSAnXScpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBp OwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGstMTsgaSsrKSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZuYW1idWZbaV0gPT0gJ1snKSB7Ci0JCQkJ YnByYyA9IGJvdW5kc3BhaXIodm5hbWJ1ZiwiOl8uIiwmeDEsJngyLCZjKTsKLQkJCQlkZWJ1ZyhG MTExLCJ6enN0cmluZyBib3VuZHNwYWlyIix2bmFtYnVmLGJwcmMpOwotCQkJCWRlYnVnKEYwMDAs Inp6c3RyaW5nIGJvdW5kc3BhaXIgYyIsIiIsYyk7Ci0JCQkJaWYgKGJwcmMgPiAtMSkgewotCQkJ CSAgICB2bmFtYnVmW2ldID0gTlVMOwotCQkJCSAgICBpZiAoeDEgPCAxKQotCQkJCSAgICAgIHgx ID0gMTsKLQkJCQkgICAgeDEtLTsJLyogQWRqdXN0IHRvIDAtYmFzZSAqLwotCQkJCX0KLQkJCQli cmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg ICAgICB9Ci0JCSAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh4 ID09ICc6JykgewkJLyogVmFyaWFibGUgdHlwZSAocyBvciA6KSAqLwotICAgICAgICAgICAgICAg ICAgICB2cCA9IHZuYW1idWY7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLQkJICAgIHkgPSBp c2FhcnJheSh2bmFtYnVmKSA/Ci0JCQlteHhsb29rKG1hY3RhYix2bmFtYnVmLG5tYWMpIDoKLQkJ CW14bG9vayhtYWN0YWIsdm5hbWJ1ZixubWFjKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHkg PiAtMSkgewkvKiBHb3QgZGVmaW5pdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgdnAg PSBtYWN0YWJbeV0ubXZhbDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgIHZwID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIH0KLQkJZGVidWcoRjExMSwienpzdHJpbmcgdnAiLHZwLCh2cD09TlVMTCk/MDpz dHJsZW4odnApKTsKLQotICAgICAgICAgICAgICAgIGlmICh2cCkgewotICAgICAgICAgICAgICAg ICAgICBpZiAoKHggPT0gJ3MnIHx8IHggPT0gJzonKSAmJiAoayA+IDEpKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAvKiBDb21wYWN0IHN1YnN0cmluZyBub3RhdGlvbiAqLwotICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKHgyID09IDApIHsgIC8qIExlbmd0aCAqLwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZwID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz ZSBpZiAoeDEgPiAtMSkgeyAvKiBTdGFydCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAg IGsgPSBzdHJsZW4odnApOwotCQkJICAgIGRlYnVnKEYxMDEsIj4+PiBrIiwiIixrKTsKLQkJCSAg ICAvKiBJZiBpdCdzIG9mZiB0aGUgZW5kLCByZXN1bHQgaXMgZW1wdHkgKi8KLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoeDEgPiBrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZwID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg KGsgPiAwKSB7Ci0JCQkJLyogU3RheSBpbiBib3VuZHMgKi8KLQkJCQlpZiAoYyA9PSAnXycgJiYg eDIgPiBrKQkvKiBzdGFydHBvc19lbmRwb3MgKi8KLQkJCQkgIHgyID0gazsKLQkJCQlpZiAoYyA9 PSAnOicgJiYgeDEgKyB4MiA+IGspIC8qIHN0YXJ0Omxlbmd0aCAqLwotCQkJCSAgeDIgPSAtMTsK LQkJCQlkZWJ1ZyhGMTAxLCI+Pj4geDIiLCIiLHgyKTsKLQkJCQlkZWJ1ZyhGMDAwLCI+Pj4gYyIs IiIsYyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocSA9IG1hbGxvYyhr KzEpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KHEsdnAp OyAvKiBzYWZlICovCi0JCQkJICAgIGlmIChjID09ICcuJykgewotCQkJCQlxW3gxKzFdID0gTlVM OwotCQkJCQlkZWJ1ZyhGMDAwLCJYWFguIHEiLHEsYyk7Ci0JCQkJICAgIH0KLQkJCQkgICAgaWYg KGMgPT0gJzonKSB7IC8qIHN0YXJ0Omxlbmd0aCAqLwotCQkJCQlpZiAoKHgyID4gLTEpICYmICgo eDEgKyB4MikgPD0gaykpIHsKLQkJCQkJICAgIHFbeDEreDJdID0gTlVMOwotCQkJCQl9Ci0JCQkJ CWRlYnVnKEYwMDAsIlhYWDogcSIscSxjKTsKLQkJCQkgICAgfSBlbHNlIGlmIChjID09ICdfJykg eyAvKiBzdGFydF9lbmRwb3MgKi8KLQkJCQkJaWYgKHgxID49IHgyKSB7Ci0JCQkJCSAgICBxW3gx ID0gMF0gPSBOVUw7Ci0JCQkJCX0gZWxzZSBpZiAoeDIgPCBrICYmIHgyID4gLTEpIHsKLQkJCQkJ ICAgIHFbeDJdID0gTlVMOwotCQkJCQl9Ci0JCQkJCWRlYnVnKEYwMDAsIlhYWF8gcSIscSxjKTsK LQkJCQkgICAgfQotCQkJCSAgICB2cCA9IHEreDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0gZWxzZSB2cCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl bHNlIHZwID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotCQkJZGVidWcoRjEx MCwiWFhYIHZuYW1idWYiLHZuYW1idWYsMCk7Ci0JCQlkZWJ1ZyhGMDAwLCJYWFggYyIsIiIsYyk7 Ci0JCQlkZWJ1ZyhGMTAxLCJYWFggeDEiLCIiLHgxKTsKLQkJCWRlYnVnKEYxMDEsIlhYWCB4MiIs IiIseDIpOwotCQkJZGVidWcoRjExMCwiWFhYIHJlc3VsdCIsdnAsMCk7Ci0jaWZkZWYgREVCVUcK LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWJsb2cpIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoIXZwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IHN0cmxlbih2cCk7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotI2Vu ZGlmIC8qIERFQlVHICovCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgLyogb3IgKi8KLSAgICAg ICAgICAgICAgICB2cCA9IG52bG9vayh2bmFtYnVmKTsgICAvKiB0aGlzIHdheSBmb3IgYnVpbHRp biB2YXJpYWJsZSAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHZwKSB7ICAgICAg ICAgICAgICAgICAgIC8qIElmIGRlZmluaXRpb24gbm90IGVtcHR5ICovCi0gICAgICAgICAgICAg ICAgd2hpbGUgKCgqbmV3KysgPSAqdnArKykpIC8qIGNvcHkgaXQgdG8gb3V0cHV0IHN0cmluZy4g Ki8KLSAgICAgICAgICAgICAgICAgIGlmICgtLW4yIDwgMCkgewotICAgICAgICAgICAgICAgICAg ICAgIGlmIChxKSBmcmVlKHEpOwotICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsInp6 c3RyaW5nIG92ZXJmbG93IDQiLCIiLGRlcHRoKTsKLSNpZmRlZiBEVk5BTUJVRgotICAgICAgICAg ICAgICAgICAgICAgIGlmICh2bmFtYnVmKSBmcmVlKHZuYW1idWYpOwotI2VuZGlmIC8qIERWTkFN QlVGICovCi0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICBuZXctLTsgICAgICAgICAgICAgICAgICAvKiBCYWNrIHVw IG92ZXIgdGVybWluYXRpbmcgbnVsbCAqLwotICAgICAgICAgICAgICAgIG4yKys7ICAgICAgICAg ICAgICAgICAgIC8qIHRvIGFsbG93IGZvciBmdXJ0aGVyIGRlcG9zaXRzLiAqLwotICAgICAgICAg ICAgfQotICAgICAgICAgICAgaWYgKHEpIHsKLSAgICAgICAgICAgICAgICBmcmVlKHEpOwotICAg ICAgICAgICAgICAgIHEgPSBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7 Ci0jZW5kaWYgLyogTk9TUEwgKi8gICAgICAgICAgICAgICAgICAgICAgLyogSGFuZGxlIFxubm4g ZXZlbiBpZiBOT1NQTC4gKi8KLQotI2lmbmRlZiBOT0tWRVJCUwotICAgICAgICBjYXNlICdLJzoK LSAgICAgICAgY2FzZSAnayc6IHsKLSAgICAgICAgICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiIGt2 ZXJic1tdOwotICAgICAgICAgICAgZXh0ZXJuIGludCBua3ZlcmJzOwotI2RlZmluZSBLX0JVRkxF TiAzMAotICAgICAgICAgICAgY2hhciBrYnVmW0tfQlVGTEVOICsgMV07ICAgIC8qIEtleSB2ZXJi IG5hbWUgYnVmZmVyICovCi0gICAgICAgICAgICBpbnQgeCwgeSwgeiwgYnJhY2UgPSAwOwotICAg ICAgICAgICAgcyArPSAyOwotLyoKLSAgV2UgYXNzdW1lIHRoYXQgdGhlIHZlcmIgbmFtZSBpcyB7 YnJhY2VkfSwgb3IgaXQgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZQotICBzdHJpbmcsIHMsIG9y IGl0IGVuZHMgd2l0aCBhIHNwYWNlLCBjb250cm9sIGNoYXJhY3Rlciwgb3IgYmFja3NsYXNoLgot Ki8KLSAgICAgICAgICAgIHAgPSBrYnVmOyAgICAgICAgICAgICAgICAgICAvKiBDb3B5IHZlcmIg bmFtZSBpbnRvIGxvY2FsIGJ1ZmZlciAqLwotICAgICAgICAgICAgeCA9IDA7Ci0gICAgICAgICAg ICBpZiAoKnMgPT0gJ3snKSAgewotICAgICAgICAgICAgICAgIHMrKzsKLSAgICAgICAgICAgICAg ICBicmFjZSsrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgd2hpbGUgKCh4KysgPCBLX0JV RkxFTikgJiYgKCpzID4gU1ApICYmICgqcyAhPSBDTURRKSkgewotICAgICAgICAgICAgICAgIGlm IChicmFjZSAmJiAqcyA9PSAnfScpIHsKLSAgICAgICAgICAgICAgICAgICAgcysrOwotICAgICAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg KnArKyA9ICpzKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmFjZSA9IDA7Ci0gICAg ICAgICAgICAqcCA9IE5VTDsgICAgICAgICAgICAgICAgICAgLyogVGVybWluYXRlLiAqLwotICAg ICAgICAgICAgcCA9IGtidWY7ICAgICAgICAgICAgICAgICAgIC8qIFBvaW50IGJhY2sgdG8gYmVn aW5uaW5nICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ6enN0cmluZyBrdmVyYiIscCwwKTsK LSAgICAgICAgICAgIHkgPSB4bG9va3VwKGt2ZXJicyxwLG5rdmVyYnMsJngpOyAvKiBMb29rIGl0 IHVwICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6enN0cmluZyBsb29rdXAiLDAseSk7Ci0g ICAgICAgICAgICBpZiAoeSA+IC0xKSB7Ci0gICAgICAgICAgICAgICAgZG9rdmVyYihWQ01ELHkp OwotI2lmbmRlZiBOT1NQTAotICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAg IC8qIElzIGl0IGEgbWFjcm8/ICovCi0gICAgICAgICAgICAgICAgeSA9IG14bG9vayhtYWN0YWIs cCxubWFjKTsKLSAgICAgICAgICAgICAgICBpZiAoeSA+IC0xKSB7Ci0gICAgICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTEsInp6c3RyaW5nIG14bG9vayIscCx5KTsKLSAgICAgICAgICAgICAgICAg ICAgaWYgKCh6ID0gZG9kbyh5LE5VTEwsY21kc3RrW2NtZGx2bF0uY2NmbGdzKSkgPiAwKSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBpZiAoY21wdXNoKCkgPiAtMSkgeyAgLyogUHVzaCBjb21t YW5kIHBhcnNlciBzdGF0ZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybiBp bnQgaWZjOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpZmNzYXYgPSBpZmM7IC8q IFB1c2ggSUYgY29uZGl0aW9uIG9uIHN0YWNrICovCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgeSA9IHBhcnNlcigxKTsgICAgLyogTmV3IHBhcnNlciB0byBleGVjdXRlIG1hY3JvICovCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgY21wb3AoKTsgICAgICAgICAgLyogUG9wIGNvbW1h bmQgcGFyc2VyICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZjID0gaWZjc2F2OyAg ICAgLyogUmVzdG9yZSBJRiBjb25kaXRpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoeSA9PSAwKSB7ICAgICAvKiBObyBlcnJvcnMsIGlnbm9yZSBhY3Rpb25zICovCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBtcnZhbFttYWNsdmwrMV07IC8qIElmIE9L IHNldCByZXR1cm4gdmFsICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChw ID09IE5VTEwpIHAgPSAiIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAvKiBDYW4ndCBwdXNoIGFu eSBtb3JlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwienpzdHJp bmcgcHVzaGVkIHRvbyBkZWVwIiwiIixkZXB0aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgcHJpbnRmKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbj9JbnRlcm5hbCBl cnJvcjogenpzdHJpbmcgc3RhY2sgb3ZlcmZsb3dcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY21wb3Ao KSA+IC0xKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gIiI7Ci0gICAgICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9 Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICB9Ci0jZW5kaWYgLyogTk9LVkVSQlMgKi8KLQotICAgICAgICBkZWZhdWx0OiAgICAg ICAgICAgICAgICAgICAgICAgIC8qIE1heWJlIGl0J3MgYSBiYWNrc2xhc2ggY29kZSAqLwotICAg ICAgICAgIHkgPSB4eGVzYygmcyk7ICAgICAgICAgICAgICAgIC8qIEdvIGludGVycHJldCBpdCAq LwotICAgICAgICAgIGlmICh5IDwgMCkgeyAgICAgICAgICAgICAgICAgIC8qIFVwb24gZmFpbHVy ZSAqLwotICAgICAgICAgICAgICAqbmV3KysgPSAoY2hhcikgeDsgICAgICAgIC8qIEp1c3QgcXVv dGUgdGhlIG5leHQgY2hhcmFjdGVyICovCi0gICAgICAgICAgICAgIHMgKz0gMjsgICAgICAgICAg ICAgICAgICAgLyogTW92ZSBwYXN0IHRoZSBwYWlyICovCi0gICAgICAgICAgICAgIG4yIC09IDI7 Ci0gICAgICAgICAgICAgIGlmIChuMiA8IDApIHsKLSAgICAgICAgICAgICAgICAgIGRlYnVnKEYx MDEsInp6c3RyaW5nIG92ZXJmbG93IDUiLCIiLGRlcHRoKTsKLSNpZmRlZiBEVk5BTUJVRgotICAg ICAgICAgICAgICAgICAgaWYgKHZuYW1idWYpIGZyZWUodm5hbWJ1Zik7Ci0jZW5kaWYgLyogRFZO QU1CVUYgKi8KLSAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgICAgICAvKiBhbmQgZ28gYmFjayBm b3IgbW9yZSAqLwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICpuZXcrKyA9IChj aGFyKSB5OyAgICAgICAgLyogZWxzZSBkZXBvc2l0IGludGVycHJldGVkIHZhbHVlICovCi0gICAg ICAgICAgICAgIGlmICgtLW4yIDwgMCkgewotICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwi enpzdHJpbmcgb3ZlcmZsb3cgNiIsIiIsZGVwdGgpOwotI2lmZGVmIERWTkFNQlVGCi0gICAgICAg ICAgICAgICAgICBpZiAodm5hbWJ1ZikgZnJlZSh2bmFtYnVmKTsKLSNlbmRpZiAvKiBEVk5BTUJV RiAqLwotICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgICAgfQotICAg ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAqbmV3ID0gTlVMOyAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBUZXJtaW5hdGUgdGhlIG5ldyBzdHJpbmcgKi8KLSAgICBkZWJ1ZyhGMDEw LCJ6enN0cmluZyB3aGlsZSBleGl0IiwqczIsMCk7Ci0KLSAgICBkZXB0aC0tOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBBZGp1c3Qgc3RhY2sgZGVwdGggZ2F1Z2UgKi8KLSAgICAqczIg PSBuZXc7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb3B5IHJlc3VsdHMgYmFjayBpbnRv ICovCi0gICAgKm4gPSBuMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGhlIGFyZ3Vt ZW50IGFkZHJlc3NlcyAqLwotICAgIGRlYnVnKEYxMDEsInp6c3RyaW5nIG9rIiwiIixkZXB0aCk7 Ci0jaWZkZWYgRFZOQU1CVUYKLSAgICBpZiAodm5hbWJ1ZikgZnJlZSh2bmFtYnVmKTsKLSNlbmRp ZiAvKiBEVk5BTUJVRiAqLwotICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGFuZCByZXR1cm4uICovCi19Ci0jZW5kaWYgLyogTk9JQ1AgKi8KCmRpZmYgLS1naXQgYS9j a2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzNS5jIGIvY2tlcm1pdC05 LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1czUuYwpkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggYzRjODc4Mi4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQv Y2tlcm1pdC05LjAuMzAyL2NrdXVzNS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI0MjcgKzAsMCBA QAotI2luY2x1ZGUgImNrY3N5bS5oIgotCi1pbnQgeGNtZHNyYyA9IDA7Ci0KLSNpZmRlZiBOT0lD UAotaW50IGNtZHNyYygpIHsgcmV0dXJuKDApOyB9Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLQotLyog IEMgSyBVIFUgUyA1IC0tICAiVXNlciBJbnRlcmZhY2UiIGZvciBDLUtlcm1pdCwgcGFydCA1ICAq LwotCi0vKgotICBBdXRob3JzOgotICAgIEZyYW5rIGRhIENydXogPGZkY0Bjb2x1bWJpYS5lZHU+ LAotICAgICAgVGhlIEtlcm1pdCBQcm9qZWN0LCBDb2x1bWJpYSBVbml2ZXJzaXR5LCBOZXcgWW9y ayBDaXR5Ci0gICAgSmVmZnJleSBFIEFsdG1hbiA8amFsdG1hbkBzZWN1cmUtZW5kcG9pbnRzLmNv bT4KLSAgICAgIFNlY3VyZSBFbmRwb2ludHMgSW5jLiwgTmV3IFlvcmsgQ2l0eQotCi0gIENvcHly aWdodCAoQykgMTk4NSwgMjAxMSwKLSAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5 IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgotICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUg dGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCi0gICAgY29weXJpZ2h0IHRleHQg aW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCi0q LwotCi0vKiBJbmNsdWRlcyAqLwotCi0jaW5jbHVkZSAiY2tjZGViLmgiCi0jaW5jbHVkZSAiY2tj YXNjLmgiCi0jaW5jbHVkZSAiY2tja2VyLmgiCi0jaW5jbHVkZSAiY2t1dXNyLmgiCi0KLSNpZmRl ZiBEQ01EQlVGCi1jaGFyICpsaW5lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hh cmFjdGVyIGJ1ZmZlciBmb3IgYW55dGhpbmcgKi8KLWNoYXIgKnRtcGJ1ZjsKLSNlbHNlCi1jaGFy IGxpbmVbTElOQlVGU0laKzFdOwotY2hhciB0bXBidWZbVE1QQlVGU0laKzFdOyAgICAgICAgICAg ICAgIC8qIFRlbXBvcmFyeSBidWZmZXIgKi8KLSNlbmRpZiAvKiBEQ01EQlVGICovCi0KLSNpZm5k ZWYgTk9JQ1AKLQotI2luY2x1ZGUgImNrY25ldC5oIgotI2lmbmRlZiBOT0NTRVRTCi0jaW5jbHVk ZSAiY2tjeGxhLmgiCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotI2lmZGVmIE1BQwotI2luY2x1ZGUg ImNrbWFzbS5oIgotI2VuZGlmIC8qIE1BQyAqLwotI2lmZGVmIENLX1NTTAotI2luY2x1ZGUgImNr X3NzbC5oIgotI2VuZGlmIC8qIENLX1NTTCAqLwotCi1leHRlcm4gY2hhciAqIGNrX2NyeWVhcjsg ICAgICAgLyogKGNrY21haS5jKSBMYXRlc3QgQy1LZXJtaXQgY29weXJpZ2h0IHllYXIgKi8KLQot I2lmZGVmIE9TMgotI2luY2x1ZGUgImNrb2V0Yy5oIgotI2lmbmRlZiBOVAotI2RlZmluZSBJTkNM X05PUE0KLSNkZWZpbmUgSU5DTF9WSU8gLyogTmVlZGVkIGZvciBja29jb24uaCAqLwotI2luY2x1 ZGUgPG9zMi5oPgotI3VuZGVmIENPTU1FTlQKLSNlbHNlIC8qIE5UICovCi0jaW5jbHVkZSA8d2lu ZG93cy5oPgotI2RlZmluZSBUQVBJX0NVUlJFTlRfVkVSU0lPTiAweDAwMDEwMDA0Ci0jaW5jbHVk ZSA8dGFwaS5oPgotI2luY2x1ZGUgPG1jeC5oPgotI2luY2x1ZGUgImNrbnRhcC5oIgotI2RlZmlu ZSBBUElSRVQgVUxPTkcKLWV4dGVybiBpbnQgRGlhbGVySGFuZGxlOwotZXh0ZXJuIGludCBTdGFy dGVkRnJvbURpYWxlcjsKLSNlbmRpZiAvKiBOVCAqLwotI2luY2x1ZGUgImNrb2Nvbi5oIgotI2lu Y2x1ZGUgImNrb2tleS5oIgotI2lmZGVmIEtVSQotI2luY2x1ZGUgImlrdWkuaCIKLSNlbmRpZiAv KiBLVUkgKi8KLSNpZmRlZiBwdXRjaGFyCi0jdW5kZWYgcHV0Y2hhcgotI2VuZGlmIC8qIHB1dGNo YXIgKi8KLSNkZWZpbmUgcHV0Y2hhcih4KSBjb25vYyh4KQotZXh0ZXJuIGludCBjdXJzb3Jfc2F2 ZSA7Ci1leHRlcm4gYm9vbCBjdXJzb3JlbmFbXSA7Ci0jZW5kaWYgLyogT1MyICovCi0KLS8qIDIw MTAtMDMtMDkgU01TLiAgVkFYIEMgVjMuMS0wNTEgbmVlZHMgPHN0YXQuaD4gZm9yIG9mZl90LiAq LwotI2lmZGVmIFZNUwotI2luY2x1ZGUgPHN0YXQuaD4KLSNlbmRpZiAvKiBkZWYgVk1TICovCi0K LS8qIEZvciBmb3JtYXR0ZWQgc2NyZWVucywgIm1vcmU/IiBwcm9tcHRpbmcsIGV0Yy4gKi8KLQot I2lmZGVmIEZUMTgKLSNkZWZpbmUgaXN4ZGlnaXQoYykgaXNkaWdpdChjKQotI2VuZGlmIC8qIEZU MTggKi8KLQotI2lmZGVmIFNUUkFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0cmF0 dXMgQ29tcHV0ZXIsIEluYy4gIFZPUyAqLwotI2lmZGVmIHB1dGNoYXIKLSN1bmRlZiBwdXRjaGFy Ci0jZW5kaWYgLyogcHV0Y2hhciAqLwotI2RlZmluZSBwdXRjaGFyKHgpIGNvbm9jKHgpCi0jaWZk ZWYgZ2V0Y2hhcgotI3VuZGVmIGdldGNoYXIKLSNlbmRpZiAvKiBnZXRjaGFyICovCi0jZGVmaW5l IGdldGNoYXIoeCkgY29uaW5jKDApCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotCi0vKiBFeHRlcm5h bCB2YXJpYWJsZXMgKi8KLQotZXh0ZXJuIGludCBjYXJyaWVyLCBjZHRpbW8sIGxvY2FsLCBxdWll dCwgYmFja2dyZCwgYmdzZXQsIHNvc2ksIHhzdXNwZW5kLAotICBiaW5hcnksIGVzY2FwZSwgeGFy Z3MsIGZsb3csIGNtZG1zaywgZHVwbGV4LCBja3hlY2gsIHNlc2xvZywgd2hhdCwKLSAgaW5zZXJ2 ZXIsIGRpcmFjdGl2ZSwgdGxldmVsLCBjd2RmLCBuZnVuY3MsIG1zZ2ZsZywgcmVtYXBwZCwgaGlu dHMsIG1kbXR5cCwKLSAgemluY250LCBjbWFzaywgcmNmbGFnLCBzdWNjZXNzLCB4aXRzdGEsIHBm bGFnLCB0bmxtLCB0bl9ubG0sIHhpdHdhcm4sCi0gIGRlYnNlcywgeGFza21vcmUsIHBhcml0eSwg c2F2ZWFzaywgd2FzY2xvc2VkLCB3aHljbG9zZWQsIGNkYWN0aXZlLAotICByY2RhY3RpdmUsIGtl ZXBhbGxjaGFycywgY21kX2VycjsKLQotI2lmZGVmIExPQ1VTCi1leHRlcm4gaW50IGxvY3VzLCBh dXRvbG9jdXM7Ci0jZW5kaWYgLyogTE9DVVMgKi8KLQotI2lmbmRlZiBOT01TRU5ECi1leHRlcm4g aW50IGFkZGxpc3Q7Ci0jZW5kaWYgLyogTk9NU0VORCAqLwotCi0jaWZkZWYgQ0tfU1BFRUQKLWV4 dGVybiBpbnQgcHJlZml4aW5nOwotI2VuZGlmIC8qIENLX1NQRUVEICovCi0KLWV4dGVybiBpbnQg Z19tYXRjaGRvdDsKLQotI2lmZGVmIFJFQ1VSU0lWRQotZXh0ZXJuIGludCByZWN1cnNpdmU7Ci0j ZW5kaWYgLyogUkVDVVJTSVZFICovCi1leHRlcm4gaW50IHhmaWxldHlwZTsKLQotI2lmZGVmIElL U0RDT05GCi1leHRlcm4gY2hhciAqIGlrc2Rjb25mOwotZXh0ZXJuIGludCBpa3NkY2Y7Ci0jZW5k aWYgLyogSUtTRENPTkYgKi8KLQotI2lmZGVmIENLX1JFQ0FMTAotZXh0ZXJuIGludCBvbl9yZWNh bGw7Ci0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0KLWV4dGVybiBpbnQgbmdldHBhdGgsIGV4aXRv bmNsb3NlOwotZXh0ZXJuIGNoYXIgKiBnZXRwYXRoW107Ci1leHRlcm4gQ0hBUiAqIGVwa3Rtc2c7 Ci0KLWV4dGVybiBjaGFyICogc25kX21vdmU7Ci1leHRlcm4gY2hhciAqIHNuZF9yZW5hbWU7Ci1l eHRlcm4gY2hhciAqIHJjdl9tb3ZlOwotZXh0ZXJuIGNoYXIgKiByY3ZfcmVuYW1lOwotZXh0ZXJu IGNoYXIgKiBnX3NuZF9tb3ZlOwotZXh0ZXJuIGNoYXIgKiBnX3NuZF9yZW5hbWU7Ci1leHRlcm4g Y2hhciAqIGdfcmN2X21vdmU7Ci1leHRlcm4gY2hhciAqIGdfcmN2X3JlbmFtZTsKLQotZXh0ZXJu IGNoYXIgKiBubVtdOwotCi0jaWZkZWYgQ0tfVVRTTkFNRQotZXh0ZXJuIGNoYXIgdW5tX21jaFtd OwotZXh0ZXJuIGNoYXIgdW5tX21vZFtdOwotZXh0ZXJuIGNoYXIgdW5tX25hbVtdOwotZXh0ZXJu IGNoYXIgdW5tX3JlbFtdOwotZXh0ZXJuIGNoYXIgdW5tX3ZlcltdOwotI2VuZGlmIC8qIENLX1VU U05BTUUgKi8KLQotI2lmbmRlZiBOT1BVU0gKLSNpZm5kZWYgTk9GUklMTFMKLWV4dGVybiBjaGFy IGVkaXRvcltdOwotZXh0ZXJuIGNoYXIgZWRpdGZpbGVbXTsKLWV4dGVybiBjaGFyIGVkaXRvcHRz W107Ci0jaWZkZWYgQlJPV1NFUgotZXh0ZXJuIGNoYXIgYnJvd3NlcltdOwotZXh0ZXJuIGNoYXIg YnJvd3NvcHRzW107Ci1leHRlcm4gY2hhciBicm93c3VybFtdOwotI2VuZGlmIC8qIEJST1dTRVIg Ki8KLSNlbmRpZiAvKiAgTk9GUklMTFMgKi8KLSNlbmRpZiAvKiBOT1BVU0ggKi8KLQotI2lmbmRl ZiBOT0ZSSUxMUwotI2lmbmRlZiBOT1JFTkFNRQotX1BST1RPVFlQKFZPSUQgc2hvcmVuYW1lLCAo dm9pZCkpOwotI2VuZGlmCS8qIE5PUkVOQU1FICovCi0jZW5kaWYJLyogTk9GUklMTFMgKi8KLQot I2lmbmRlZiBOT1NFUlZFUgotZXh0ZXJuIGNoYXIgKiB4X3VzZXIsICogeF9wYXNzd2QsICogeF9h Y2N0OwotI2VuZGlmIC8qIE5PU0VSVkVSICovCi0KLSNpZmRlZiBDS0xPR0RJQUwKLWV4dGVybiBp bnQgZGlhbG9nOwotZXh0ZXJuIGNoYXIgZGlhZmlsW107Ci0jZW5kaWYgLyogQ0tMT0dESUFMICov Ci0KLSNpZmRlZiBDS1JPT1QKLWV4dGVybiBpbnQgY2tyb290ZXJyOwotI2VuZGlmIC8qIENLUk9P VCAqLwotCi0jaWZuZGVmIE5PU1BMCi1leHRlcm4gaW50IGNmaWxlZiwgeHhkb3QsIHZhcmV2YWw7 Ci1leHRlcm4gY2hhciBjbWRmaWxbXTsKLQotc3RydWN0IGxvY2FsdmFyICogbG9jYWxoZWFkW0NN RFNUS0xdOwotc3RydWN0IGxvY2FsdmFyICogbG9jYWx0YWlsID0gTlVMTDsKLXN0cnVjdCBsb2Nh bHZhciAqIGxvY2FsbmV4dCA9IE5VTEw7Ci0KLV9QUk9UT1RZUCggVk9JRCBzaG9zZXhwLCAodm9p ZCkgKTsKLV9QUk9UT1RZUCggc3RhdGljIFZPSUQgc2hvaW5wdXQsICh2b2lkKSApOwotX1BST1RP VFlQKCBzdGF0aWMgY2hhciBnZXR0b2ssICAgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIHN0YXRpYyBW T0lEIGZhY3RvciwgICAodm9pZCkgKTsKLV9QUk9UT1RZUCggc3RhdGljIFZPSUQgdGVybSwgICAg ICh2b2lkKSApOwotX1BST1RPVFlQKCBzdGF0aWMgVk9JRCB0ZXJtcCwgICAgKHZvaWQpICk7Ci1f UFJPVE9UWVAoIHN0YXRpYyBWT0lEIGV4cHJwLCAgICAodm9pZCkgKTsKLV9QUk9UT1RZUCggc3Rh dGljIFZPSUQgZXhwciwgICAgICh2b2lkKSApOwotX1BST1RPVFlQKCBzdGF0aWMgVk9JRCBzaW1w bGUsICAgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIHN0YXRpYyBWT0lEIHNpbXBsZXIsICAodm9pZCkg KTsKLV9QUk9UT1RZUCggc3RhdGljIFZPSUQgc2ltcGxlc3QsICh2b2lkKSApOwotX1BST1RPVFlQ KCBzdGF0aWMgQ0tfT0ZGX1QgeHBhcnNlLCAgICh2b2lkKSApOwotI2VuZGlmIC8qIE5PU1BMICov Ci0jaWZuZGVmIE5PU0hPVwotX1BST1RPVFlQKCBpbnQgc2hvX2lrcywgKHZvaWQpICk7Ci0jZW5k aWYgLyogTk9TSE9XICovCi0KLSNpZmRlZiBNQUMKLWNoYXIgKiBja3Byb21wdCA9ICJNYWMtS2Vy bWl0PiI7ICAgICAgICAvKiBEZWZhdWx0IHByb21wdCBmb3IgTWFjaW50b3NoICovCi1jaGFyICog aWtwcm9tcHQgPSAiSUtTRD4iOwotI2Vsc2UgIC8qIE5vdCBNQUMgKi8KLSNpZmRlZiBOT1NQTAot I2lmZGVmIE9TMgotY2hhciAqIGNrcHJvbXB0ID0gIkstOTU+ICI7ICAgICAgICAgICAgIC8qIERl ZmF1bHQgcHJvbXB0IGZvciBXaW4zMiAqLwotY2hhciAqIGlrcHJvbXB0ID0gIklLU0Q+ICI7Ci0j ZWxzZQotY2hhciAqIGNrcHJvbXB0ID0gIkMtS2VybWl0PiI7Ci1jaGFyICogaWtwcm9tcHQgPSAi SUtTRD4iOwotI2VuZGlmIC8qIE5UICovCi0jZWxzZSAgLyogTk9TUEwgKi8KLSNpZmRlZiBPUzIK LS8qIERlZmF1bHQgcHJvbXB0IGZvciBPUy8yIGFuZCBXaW4zMiAqLwotI2lmZGVmIE5UCi1jaGFy ICogY2twcm9tcHQgPSAiW1xcZnJlcGxhY2UoXFxmbG9uZ3BhdGgoXFx2KGRpcikpLC8sXFxcXCld IEstOTU+ICI7Ci1jaGFyICogaWtwcm9tcHQgPSAiW1xcZnJlcGxhY2UoXFxmbG9uZ3BhdGgoXFx2 KGRpcikpLC8sXFxcXCldIElLU0Q+ICI7Ci0jZWxzZSAgLyogTlQgKi8KLWNoYXIgKiBja3Byb21w dCA9ICJbXFxmcmVwbGFjZShcXHYoZGlyKSwvLFxcXFwpXSBLLTk1PiAiOwotY2hhciAqIGlrcHJv bXB0ID0gIltcXGZyZXBsYWNlKFxcdihkaXIpLC8sXFxcXCldIElLU0Q+ICI7Ci0jZW5kaWYgLyog TlQgKi8KLSNlbHNlICAvKiBPUzIgKi8KLSNpZmRlZiBWTVMKLWNoYXIgKiBja3Byb21wdCA9ICJc XHYoZGlyKSBDLUtlcm1pdD4iOyAvKiBEZWZhdWx0IHByb21wdCBWTVMgKi8KLWNoYXIgKiBpa3By b21wdCA9ICJcXHYoZGlyKSBJS1NEPiI7Ci0jZWxzZQotY2hhciAqIGNrcHJvbXB0ID0gIihcXHYo ZGlyKSkgQy1LZXJtaXQ+IjsgLyogRGVmYXVsdCBwcm9tcHQgZm9yIG90aGVycyAqLwotY2hhciAq IGlrcHJvbXB0ID0gIihcXHYoZGlyKSkgSUtTRD4iOwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlm IC8qIE5UICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLSNlbmRpZiAvKiBNQUMgKi8KLQotI2lmbmRl ZiBDQ0hNQVhQQVRICi0jZGVmaW5lIENDSE1BWFBBVEggMjU3Ci0jZW5kaWYgLyogQ0NITUFYUEFU SCAqLwotY2hhciBpbmlkaXJbQ0NITUFYUEFUSF0gPSB7IE5VTCwgTlVMIH07IC8qIERpcmVjdG9y eSBJTkkgZmlsZSBleGVjdXRlZCBmcm9tICovCi0KLSNpZmRlZiBUTkNPREUKLWV4dGVybiBpbnQg dG5fYl9ubG07ICAgICAgICAgICAgICAgICAgICAvKiBURUxORVQgQklOQVJZIG5ld2xpbmUgbW9k ZSAqLwotI2VuZGlmIC8qIFROQ09ERSAqLwotCi0jaWZuZGVmIE5PS1ZFUkJTCi1leHRlcm4gc3Ry dWN0IGtleXRhYiBrdmVyYnNbXTsgICAgICAgICAgLyogVGFibGUgb2YgXEt2ZXJicyAqLwotZXh0 ZXJuIGludCBua3ZlcmJzOyAgICAgICAgICAgICAgICAgICAgIC8qIE51bWJlciBvZiBcS3ZlcmJz ICovCi0jZW5kaWYgLyogTk9LVkVSQlMgKi8KLQotI2lmbmRlZiBOT1BVU0gKLWV4dGVybiBpbnQg bm9wdXNoOwotI2VuZGlmIC8qIE5PUFVTSCAqLwotCi0jaWZkZWYgQ0tfUkVDQUxMCi1leHRlcm4g aW50IGNtX3JlY2FsbDsKLSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLQotZXh0ZXJuIGNoYXIgKmNj bnRhYltdOwotCi0vKiBQcmludGVyIHN0dWZmICovCi0KLWV4dGVybiBjaGFyICpwcmludGVybmFt ZTsKLWV4dGVybiBpbnQgcHJpbnRwaXBlOwotI2lmZGVmIEJQUklOVAotZXh0ZXJuIGludCBwcmlu dGJpZGksIHBwb3J0cGFyaXR5LCBwcG9ydGZsb3c7Ci1leHRlcm4gbG9uZyBwcG9ydHNwZWVkOwot I2VuZGlmIC8qIEJQUklOVCAqLwotCi0jaWZkZWYgT1MyCi1fUFJPVE9UWVAgKGludCBvczJnZXRj cCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAgKGludCBvczJnZXRjcGxpc3QsIChpbnQgKiwgaW50KSAp OwotI2lmZGVmIE9TMk1PVVNFCi1leHRlcm4gaW50IHR0X21vdXNlOwotI2VuZGlmIC8qIE9TMk1P VVNFICovCi1leHRlcm4gaW50IHR0X3VwZGF0ZSwgdHRfdXBkbW9kZSwgdXBkbW9kZSwgdHRfdXRm ODsKLSNpZm5kZWYgSUtTRE9OTFkKLWV4dGVybiBpbnQgdHRfc3RhdHVzW107Ci0jZW5kaWYgLyog SUtTRE9OTFkgKi8KLSNpZmRlZiBQQ0ZPTlRTCi1leHRlcm4gc3RydWN0IGtleXRhYiB0ZXJtX2Zv bnRbXTsKLSNlbHNlCi0jaWZkZWYgS1VJCi1leHRlcm4gc3RydWN0IGtleXRhYiAqIHRlcm1fZm9u dDsKLSNlbmRpZiAvKiBLVUkgKi8KLSNlbmRpZiAvKiBQQ0ZPTlRTICovCi1leHRlcm4gaW50IG50 ZXJtZm9udCwgdHRfZm9udCwgdHRfZm9udF9zaXplOwotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgY29s b3Jub3JtYWwsIGNvbG9ydW5kZXJsaW5lLCBjb2xvcnN0YXR1cywKLSAgICBjb2xvcmhlbHAsIGNv bG9yc2VsZWN0LCBjb2xvcmJvcmRlciwgY29sb3JncmFwaGljLCBjb2xvcmRlYnVnLAotICAgIGNv bG9ycmV2ZXJzZSwgY29sb3JjbWQsIGNvbG9yaXRhbGljOwotZXh0ZXJuIGludCBwcmlvcml0eTsK LWV4dGVybiBzdHJ1Y3Qga2V5dGFiIHBydHl0YWJbXTsKLWV4dGVybiBpbnQgbnBydHk7Ci1jaGFy ICogY21kbWFjID0gTlVMTDsKLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIFZNUwotX1BST1RP VFlQIChpbnQgemtlcm1pbmksIChjaGFyICosIGludCwgY2hhciAqKSApOwotI2VuZGlmIC8qIFZN UyAqLwotCi1leHRlcm4gbG9uZyB2ZXJudW07Ci1leHRlcm4gaW50IGluZWNobywgaW5zaWxlbmNl LCBpbmJ1ZnNpemUsIG52YXJzLCBpbmludHI7Ci1leHRlcm4gY2hhciAqcHJvdHYsICpmbnN2LCAq Y21kdiwgKnVzZXJ2LCAqY2t4diwgKmNrenYsICpja3pzeXMsICp4bGF2LAotICpja25ldHYsICpj bGNtZHM7Ci0jaWZkZWYgT1MyCi1leHRlcm4gY2hhciAqY2t5djsKLSNlbmRpZiAvKiBPUzIgKi8K LSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotZXh0ZXJuIGNoYXIgKiBja2F0aHY7Ci0jZW5kaWYg LyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSNpZmRlZiBDS19TU0wKLWV4dGVybiBjaGFyICogY2tz c2x2OwotI2VuZGlmIC8qIENLX1NTTCAqLwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSNpZm5kZWYg Q1JZUFRfRExMCi1leHRlcm4gY2hhciAqIGNrY3JwdjsKLSNlbmRpZiAvKiBDUllQVF9ETEwgKi8K LSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0KLSNpZmRlZiBTU0hCVUlMVElOCi1leHRlcm4g Y2hhciAqY2tzc2h2OwotI2lmZGVmIFNGVFBfQlVJTFRJTgotZXh0ZXJuIGNoYXIgKmNrc2Z0cHY7 Ci0jZW5kaWYgLyogU0ZUUF9CVUlMVElOICovCi0jZW5kaWYgLyogU1NIQlVJTFRJTiAqLwotCi0j aWZkZWYgVE5DT0RFCi1leHRlcm4gY2hhciAqY2t0ZWx2OwotI2VuZGlmIC8qIFROQ09ERSAqLwot I2lmbmRlZiBOT0ZUUAotI2lmbmRlZiBTWVNGVFAKLWV4dGVybiBjaGFyICogY2tmdHB2OwotI2Vu ZGlmIC8qIFNZU0ZUUCAqLwotI2VuZGlmIC8qIE5PRlRQICovCi0KLWV4dGVybiBpbnQgc3J2aWRs OwotCi0jaWZkZWYgT1MyCi1leHRlcm4gY2hhciAqY2tvbmV0djsKLWV4dGVybiBpbnQgaW50ZXJt OwotI2lmZGVmIENLX05FVEJJT1MKLWV4dGVybiBjaGFyICpja29uYml2OwotI2VuZGlmIC8qIENL X05FVEJJT1MgKi8KLSNpZmRlZiBPUzJNT1VTRQotZXh0ZXJuIGNoYXIgKmNrb21vdXY7Ci0jZW5k aWYgLyogT1MyTU9VU0UgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmbmRlZiBOT0xPQ0FMCi1l eHRlcm4gY2hhciAqY29ubnY7Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2lmbmRlZiBOT0RJQUwK LWV4dGVybiBjaGFyICpkaWFsdjsKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLSNpZm5kZWYgTk9TQ1JJ UFQKLWV4dGVybiBjaGFyICpsb2dpbnY7Ci1leHRlcm4gaW50IHNlY2hvOwotI2VuZGlmIC8qIE5P U0NSSVBUICovCi0KLSNpZm5kZWYgTk9ESUFMCi1leHRlcm4gaW50IG5tZG0sIGRpcmxpbmU7Ci1l eHRlcm4gc3RydWN0IGtleXRhYiBtZG10YWJbXTsKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLQotZXh0 ZXJuIGludCBuZXR3b3JrLCBuZXR0eXBlLCB0dG5wcm90bzsKLQotI2lmZGVmIE9TMgotI2lmbmRl ZiBOT1RFUk0KLS8qIFNFVCBURVJNSU5BTCBpdGVtcy4uLiAqLwotZXh0ZXJuIGludCB0dF90eXBl LCB0dF9hcnJvdywgdHRfa2V5cGFkLCB0dF93cmFwLCB0dF9hbnN3ZXIsIHR0X3NjcnNpemVbXTsK LWV4dGVybiBpbnQgdHRfYmVsbCwgdHRfcm9sbFtdLCB0dF9jdHN0bW8sIHR0X2N1cnNvciwgdHRf cGFjaW5nLCB0dF90eXBlX21vZGU7Ci1leHRlcm4gY2hhciBhbnN3ZXJiYWNrW107Ci1leHRlcm4g c3RydWN0IHR0X2luZm9fcmVjIHR0X2luZm9bXTsgICAgLyogSW5kZXhlZCBieSB0ZXJtaW5hbCB0 eXBlICovCi1leHRlcm4gaW50IG1heF90dDsKLSNlbmRpZiAvKiBOT1RFUk0gKi8KLSNlbmRpZiAv KiBPUzIgKi8KLQotX1BST1RPVFlQKCBWT0lEIHNob3RybSwgKHZvaWQpICk7Ci1fUFJPVE9UWVAo IGludCBzaG9mZWEsICh2b2lkKSApOwotCi0jaWZkZWYgT1MyCi1leHRlcm4gaW50IHR0X3Jvd3Nb XSwgdHRfY29sc1tdOwotI2Vsc2UgLyogT1MyICovCi1leHRlcm4gaW50IHR0X3Jvd3MsIHR0X2Nv bHM7Ci0jZW5kaWYgLyogT1MyICovCi1leHRlcm4gaW50IGNtZF9yb3dzLCBjbWRfY29sczsKLQot I2lmZGVmIENLX1RNUERJUgotZXh0ZXJuIGludCBmX3RtcGRpcjsgICAgICAgICAgICAgICAgICAg IC8qIERpcmVjdG9yeSBjaGFuZ2VkIHRlbXBvcmFyaWx5ICovCi1leHRlcm4gY2hhciBzYXZkaXJb XTsgICAgICAgICAgICAgICAgICAgLyogVGVtcG9yYXJ5IGRpcmVjdG9yeSAqLwotI2VuZGlmIC8q IENLX1RNUERJUiAqLwotCi0jaWZuZGVmIE5PTE9DQUwKLWV4dGVybiBpbnQgdHRfY3JkLCB0dF9s ZmQsIHR0X2VzY2FwZTsKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSNpZm5kZWYgTk9DU0VUUwot ZXh0ZXJuIGludCBsYW5ndWFnZSwgbmZpbGMsIHRjc3IsIHRjc2wsIHRjc190cmFuc3AsIGZjaGFy c2V0OwotZXh0ZXJuIHN0cnVjdCBrZXl0YWIgZmNzdGFiW107Ci1leHRlcm4gc3RydWN0IGNzaW5m byBmY3NpbmZvW107Ci0jaWZuZGVmIE1BQwotZXh0ZXJuIHN0cnVjdCBrZXl0YWIgdHRjc3RhYltd OwotI2VuZGlmIC8qIE1BQyAqLwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQotZXh0ZXJuIGxvbmcg c3BlZWQ7Ci0KLSNpZm5kZWYgTk9YTUlUCi1leHRlcm4gaW50IHhtaXRmLCB4bWl0bCwgeG1pdHAs IHhtaXR4LCB4bWl0cywgeG1pdHcsIHhtaXR0OwotZXh0ZXJuIGNoYXIgeG1pdGJ1ZltdOwotI2Vu ZGlmIC8qIE5PWE1JVCAqLwotCi1leHRlcm4gY2hhciAqKnhhcmd2LCAqdmVyc2lvLCAqY2t4c3lz LCAqZGZ0dHksICpscDsKLQotI2lmZGVmIERDTURCVUYKLWV4dGVybiBjaGFyICpjbWRidWYsICph dG1idWY7ICAgICAgICAgICAvKiBDb21tYW5kIGJ1ZmZlcnMgKi8KLSNpZm5kZWYgTk9TUEwKLWV4 dGVybiBjaGFyICpzYXZidWY7ICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIGJ1ZmZlcnMg Ki8KLSNlbmRpZiAvKiBOT1NQTCAqLwotI2Vsc2UKLWV4dGVybiBjaGFyIGNtZGJ1ZltdLCBhdG1i dWZbXTsgICAgICAgICAvKiBDb21tYW5kIGJ1ZmZlcnMgKi8KLSNpZm5kZWYgTk9TUEwKLWV4dGVy biBjaGFyIHNhdmJ1ZltdOyAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIGJ1ZmZlcnMgKi8K LSNlbmRpZiAvKiBOT1NQTCAqLwotI2VuZGlmIC8qIERDTURCVUYgKi8KLQotZXh0ZXJuIGNoYXIg dG9rdGFiW10sIHR0bmFtZVtdLCBwc2F2ZVtdOwotZXh0ZXJuIENIQVIgc3N0YXRlLCBmZW9sOwot ZXh0ZXJuIGludCBjbWZsZ3MsIHRlY2hvLCByZXBhcnMsIG5jbWQ7Ci1leHRlcm4gc3RydWN0IGtl eXRhYiBjbWR0YWJbXTsKLQotI2lmbmRlZiBOT1NFVEtFWQotS0VZICprZXltYXA7Ci0jaWZuZGVm IE9TMgotI2RlZmluZSBtYXBrZXkoeCkga2V5bWFwW3hdCi0jZW5kaWYgLyogT1MyICovCi1NQUNS TyAqbWFjcm90YWI7Ci1fUFJPVE9UWVAoIFZPSUQgc2hvc3RyZGVmLCAoQ0hBUiAqKSApOwotI2Vu ZGlmIC8qIE5PU0VUS0VZICovCi0KLWV4dGVybiBpbnQgY21kbHZsOwotCi0jaWZuZGVmIE5PU1BM Ci1leHRlcm4gc3RydWN0IG10YWIgKm1hY3RhYjsKLWV4dGVybiBzdHJ1Y3Qga2V5dGFiIG1hY2tl eVtdOwotZXh0ZXJuIHN0cnVjdCBrZXl0YWIgdmFydGFiW10sIGZuY3RhYltdLCBpZnRhYltdOwot ZXh0ZXJuIGludCBtYWNsdmwsIG5tYWMsIG1lY2hvLCBmbmRpYWdzLCBmbmVycm9yLCBmbnN1Y2Nl c3MsIG5pZjsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi1GSUxFICp0ZmlsZVtNQVhUQUtFXTsgICAg ICAgICAgICAgICAgICAgLyogVEFLRSBmaWxlIHN0YWNrICovCi1jaGFyICp0Zm5hbVtNQVhUQUtF XTsKLWludCB0ZmxpbmVbTUFYVEFLRV07Ci0KLWludCB0b3BjbWQgPSAtMTsgICAgICAgICAgICAg ICAgICAgICAgICAvKiBjbWR0YWIgaW5kZXggb2YgY3VycmVudCBjb21tYW5kICovCi1pbnQgaGF2 ZXRva2VuID0gMDsKLWV4dGVybiBpbnQgZGJscXVvOyAgICAgICAgICAgICAgICAgICAgICAvKiBE b3VibGVxdW90aW5nIGVuYWJsZWQgKi8KLQotI2lmZGVmIERDTURCVUYgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEluaXRpYWxpemF0aW9uIGZpbGVzcGVjICovCi1jaGFyICprZXJtcmMgPSBO VUxMOwotI2Vsc2UKLWNoYXIga2VybXJjYltLRVJNUkNMXTsKLWNoYXIgKmtlcm1yYyA9IGtlcm1y Y2I7Ci0jZW5kaWYgLyogRENNREJVRiAqLwotCi1pbnQgbm9oZXJhbGQgPSAwOwotaW50IGNtX3Jl dHJ5ID0gMTsgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgcmV0cnkgZW5hYmxlZCAq LwoteHhfc3RycCB4eHN0cmluZyA9IHp6c3RyaW5nOwotCi0jaWZuZGVmIE5PWEZFUgotZXh0ZXJu IGludCBkaXNwbGEsIGJ5ZV9hY3RpdmUsIHByb3RvY29sLCBwa3Rsb2csIHJlbWZpbGUsIHJlbXBp cGUsIHVua2NzLAotICBrZWVwLCBsZl9vcHRzLCBmbmNudiwgcGt0cGF1cywgYXV0b2RsLCB4ZnJj YW4sIHhmcmNociwgeGZybnVtLCBzcnZ0aW0sCi0gIHNydmRpcywgcXVlcnksIHJldHJhbnMsIHN0 cmVhbWVkLCByZWxpYWJsZSwgY3J1bmNoZWQsIHRpbWVvdXRzLAotICBmbnJwYXRoLCBhdXRvcGF0 aCwgcnBhY2tldHMsIHNwYWNrZXRzLCBlcGt0cmN2ZCwgc3J2cGluZzsKLQotI2lmZGVmIENLX0FV VE9ETAotZXh0ZXJuIGludCBpbmF1dG9kbCwgY21kYWRsOwotI2VuZGlmIC8qIENLX0FVVE9ETCAq LwotCi0jaWZuZGVmIE5PU0VSVkVSCi1leHRlcm4gaW50IGVuX2FzZywgZW5fY3dkLCBlbl9jcHks IGVuX2RlbCwgZW5fZGlyLCBlbl9maW4sIGVuX2J5ZSwgZW5fcmV0LAotICBlbl9nZXQsIGVuX2hv cywgZW5fcXVlLCBlbl9yZW4sIGVuX3NlbiwgZW5fc2V0LCBlbl9zcGEsIGVuX3R5cCwgZW5fd2hv LAotICBlbl9tYWksIGVuX3ByaSwgZW5fbWtkLCBlbl9ybWQsIGVuX3hpdCwgZW5fZW5hOwotI2Vu ZGlmIC8qIE5PU0VSVkVSICovCi0KLWV4dGVybiBpbnQgYXRjYXByLAotICBhdGVuY2ksIGF0ZW5j bywgYXRkYXRpLCBhdGRhdG8sIGF0bGVuaSwgYXRsZW5vLCBhdGJsa2ksIGF0YmxrbywKLSAgYXR0 eXBpLCBhdHR5cG8sIGF0c2lkaSwgYXRzaWRvLCBhdHN5c2ksIGF0c3lzbywgYXRkaXNpLCBhdGRp c287Ci0KLSNpZmRlZiBTVFJBVFVTCi1leHRlcm4gaW50IGF0ZnJtaSwgYXRmcm1vLCBhdGNyZWks IGF0Y3JlbywgYXRhY3RpLCBhdGFjdG87Ci0jZW5kaWYgLyogU1RSQVRVUyAqLwotCi0jaWZkZWYg Q0tfUEVSTVMKLWV4dGVybiBpbnQgYXRscHJpLCBhdGxwcm8sIGF0Z3ByaSwgYXRncHJvOwotI2Vu ZGlmIC8qIENLX1BFUk1TICovCi0KLSNpZmRlZiBDS19MT0dJTgotZXh0ZXJuIGNoYXIgKiBhbm9u ZmlsZTsgICAgICAgICAgICAgICAgIC8qIEFub255bW91cyBsb2dpbiBpbml0IGZpbGUgKi8KLWV4 dGVybiBjaGFyICogYW5vbnJvb3Q7ICAgICAgICAgICAgICAgICAvKiBBbm9ueW1vdXMgZmlsZS1z eXN0ZW0gcm9vdCAqLwotZXh0ZXJuIGNoYXIgKiB1c2VyZmlsZTsgICAgICAgICAgICAgICAgIC8q IEZvcmJpZGRlbiB1c2VyIGZpbGUgKi8KLWV4dGVybiBpbnQgaXNndWVzdDsgICAgICAgICAgICAg ICAgICAgICAvKiBGbGFnIGZvciBhbm9ueW1vdXMgdXNlciAqLwotI2VuZGlmIC8qIENLX0xPR0lO ICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZmRlZiBEQ01EQlVGCi1pbnQgKnhxdWlldCA9 IE5VTEw7Ci1pbnQgKnh2YXJldiA9IE5VTEw7Ci0jZWxzZQotaW50IHhxdWlldFtDTURTVEtMXTsK LWludCB4dmFyZXZbQ01EU1RLTF07Ci0jZW5kaWYgLyogRENNREJVRiAqLwotCi1jaGFyICogcHJz dHJpbmdbQ01EU1RLTF07Ci0KLSNpZm5kZWYgTk9TUEwKLQotZXh0ZXJuIGxvbmcgY2tfYWxhcm07 Ci1leHRlcm4gY2hhciBhbHJtX2RhdGVbXSwgYWxybV90aW1lW107Ci0KLS8qIExvY2FsIGRlY2xh cmF0aW9ucyAqLwotCi1zdGF0aWMgaW50IG51bGNtZCA9IDA7ICAgICAgICAgICAgICAgICAgLyog RmxhZyBmb3IgbmV4dCBjbWQgdG8gYmUgaWdub3JlZCAqLwotCi0vKiBEZWZpbml0aW9ucyBmb3Ig cHJlZGVmaW5lZCBtYWNyb3MgKi8KLQotLyogRmlyc3QsIHRoZSBzaW5nbGUtbGluZSBtYWNyb3Ms IGluc3RhbGxlZCB3aXRoIGFkZG1hYygpLi4uICovCi0KLS8qIElCTS1MSU5FTU9ERSBtYWNybyAq LwotY2hhciAqbV9pYm0gPSAic2V0IHBhcml0eSBtYXJrLCBzZXQgZHVwbCBoYWxmLCBzZXQgaGFu ZHNoIHhvbiwgc2V0IGZsb3cgbm9uZSI7Ci0KLS8qIEZBVEFMIG1hY3JvICovCi1jaGFyICptX2Zh dCA9ICJpZiBkZWYgXFwlMSBlY2hvIFxcJTEsIGlmIG5vdCA9IFxcdihsb2NhbCkgMCBoYW5ndXAs IHN0b3AgMSI7Ci0KLSNpZmRlZiBDS19TUEVFRAotI2lmZGVmIElSSVg2NQotY2hhciAqbV9mYXN0 ID0gInNldCB3aW4gMzAsIHNldCByZWMgcGFjayA0MDAwLCBzZXQgcHJlZml4IGNhdXRpb3VzIjsK LSNlbHNlCi0jaWZkZWYgSVJJWAotLyogQmVjYXVzZSBvZiBidWcgaW4gdGVsbmV0IHNlcnZlciAq LwotY2hhciAqbV9mYXN0ID0gInNldCB3aW5kb3cgMzAsIHNldCByZWMgcGFjayA0MDAwLCBzZXQg c2VuZCBwYWNrIDQwMDAsXAotIHNldCBwcmVmIGNhdXRpb3VzIjsKLSNlbHNlCi0jaWZkZWYgcGRw MTEKLWNoYXIgKm1fZmFzdCA9ICJzZXQgd2luIDMsIHNldCByZWMgcGFjayAxMDI0LCBzZXQgcHJl Zml4IGNhdXRpb3VzIjsKLSNlbHNlCi0jaWZkZWYgQklHQlVGT0sKLWNoYXIgKm1fZmFzdCA9ICJz ZXQgd2luIDMwLCBzZXQgcmVjIHBhY2sgNDAwMCwgc2V0IHByZWZpeCBjYXV0aW91cyI7Ci0jZWxz ZQotY2hhciAqbV9mYXN0ID0gInNldCB3aW4gNCwgc2V0IHJlYyBwYWNrIDIyMDAsIHNldCBwcmVm aXggY2F1dGlvdXMiOwotI2VuZGlmIC8qIEJJR0JVRk9LICovCi0jZW5kaWYgLyogSVJJWCAqLwot I2VuZGlmIC8qIElSSVg2NSAqLwotI2VuZGlmIC8qIHBkcDExICovCi0jaWZkZWYgcGRwMTEKLWNo YXIgKm1fY2F1dGlvdXMgPSAic2V0IHdpbiAyLCBzZXQgcmVjIHBhY2sgNTEyLCBzZXQgcHJlZml4 aW5nIGNhdXRpb3VzIjsKLSNlbHNlCi1jaGFyICptX2NhdXRpb3VzID0gInNldCB3aW4gNCwgc2V0 IHJlYyBwYWNrIDEwMDAsIHNldCBwcmVmaXhpbmcgY2F1dGlvdXMiOwotI2VuZGlmIC8qIHBkcDEx ICovCi1jaGFyICptX3JvYnVzdCA9ICJzZXQgd2luIDEsIHNldCByZWMgcGFjayA5MCwgc2V0IHBy ZWZpeGluZyBhbGwsIFwKLXNldCByZWxpYWJsZSBvZmYsIHNldCBjbGVhcmNoYW5uZWwgb2ZmIjsK LSNlbHNlCi0jaWZkZWYgQklHQlVGT0sKLSNpZmRlZiBJUklYNjUKLWNoYXIgKm1fZmFzdCA9ICJz ZXQgd2luIDMwLCBzZXQgcmVjIHBhY2sgNDAwMCI7Ci0jZWxzZQotI2lmZGVmIElSSVgKLWNoYXIg Km1fZmFzdCA9ICJzZXQgd2luIDMwLCBzZXQgcmVjIHBhY2sgNDAwMCwgc2V0IHNlbmQgcGFjayA0 MDAwIjsKLSNlbHNlCi1jaGFyICptX2Zhc3QgPSAic2V0IHdpbiAzMCwgc2V0IHJlYyBwYWNrIDQw MDAiOwotI2VuZGlmIC8qIElSSVggKi8KLSNlbmRpZiAvKiBJUklYNjUgKi8KLSNlbHNlIC8qIE5v dCBCSUdCVUZPSyAqLwotY2hhciAqbV9mYXN0ID0gInNldCB3aW4gNCwgc2V0IHJlYyBwYWNrIDIy MDAiOwotI2VuZGlmIC8qIEJJR0JVRk9LICovCi1jaGFyICptX2NhdXRpb3VzID0gInNldCB3aW4g NCwgc2V0IHJlYyBwYWNrIDEwMDAiOwotY2hhciAqbV9yb2J1c3QgPSAic2V0IHdpbiAxLCBzZXQg cmVjIHBhY2sgOTAsIHNldCByZWxpYWJsZSBvZmYiOwotI2VuZGlmIC8qIENLX1NQRUVEICovCi0K LSNpZmRlZiBWTVMKLWNoYXIgKm1fcHVyZ2UgPSAicnVuIHB1cmdlIFxcJSoiOwotI2VuZGlmIC8q IFZNUyAqLwotCi0jaWZkZWYgT1MyCi1jaGFyICptX21hbnVhbCA9ICJicm93c2UgXFx2KGV4ZWRp cilkb2NzL21hbnVhbC9rZXJtaXQ5NS5odG0iOwotI2VuZGlmIC8qIE9TMiAqLwotCi0vKiBOb3cg dGhlIG11bHRpbGluZSBtYWNyb3MsIGRlZmluZWQgd2l0aCBhZGRtbWFjKCkuLi4gKi8KLQotLyog Rk9SIG1hY3JvIGZvciBcJWktc3R5bGUgbG9vcCB2YXJpYWJsZXMgKHNlZSBkb2ZvcigpLi4uKSAq LwotCi1jaGFyICpmb3JfZGVmW10gPSB7ICJfYXNzaWduIF9mb3JcXHYoY21kbGV2ZWwpIHsgX2dl dGFyZ3MsIiwKLSJkZWYgXFxcXFxcJTEgXFxmZXZhbChcXCUyKSw6Xy4udG9wLGlmIFxcJTUgXFxc XFxcJTEgXFwlMyBnb3RvIF8uLmJvdCwiLAotIlxcJTYsOl8uLmluYyxpbmNyIFxcXFxcXCUxIFxc JTQsZ290byBfLi50b3AsOl8uLmJvdCxfcHV0YXJnc30sIiwKLSJkZWYgYnJlYWsgZ290byBfLi5i b3QsIGRlZiBjb250aW51ZSBnb3RvIF8uLmluYywiLAotImRvIF9mb3JcXHYoY21kbGV2ZWwpIFxc JTEgXFwlMiBcXCUzIFxcJTQgeyBcXCU1IH0sX2Fzc2lnbiBfZm9yXFx2KGNtZGxldmVsKSIsCi0i In07Ci0KLS8qIFRoaXMgaXMgdGhlIEZPUiBtYWNybyB3aGVuIHRoZSBsb29wIHZhcmlhYmxlIGlz IGl0c2VsZiBhIG1hY3JvICovCi0KLWNoYXIgKmZvel9kZWZbXSA9IHsgIl9hc3NpZ24gX2Zvclxc dihjbWRsZXZlbCkgeyBfZ2V0YXJncywiLAotImRlZiBcXCUxIFxcZmV2YWwoXFwlMiksOl8uLnRv cCxpZiBcXCU1IFxcJTEgXFwlMyBnb3RvIF8uLmJvdCwiLAotIlxcJTYsOl8uLmluYyxpbmNyIFxc JTEgXFwlNCxnb3RvIF8uLnRvcCw6Xy4uYm90LF9wdXRhcmdzfSwiLAotImRlZiBicmVhayBnb3Rv IF8uLmJvdCwgZGVmIGNvbnRpbnVlIGdvdG8gXy4uaW5jLCIsCi0iZG8gX2ZvclxcdihjbWRsZXZl bCkgXFwlMSBcXCUyIFxcJTMgXFwlNCB7IFxcJTUgfSxfYXNzaWduIF9mb3JcXHYoY21kbGV2ZWwp IiwKLSIifTsKLQotLyogV0hJTEUgbWFjcm8gKi8KLWNoYXIgKndoaWxfZGVmW10gPSB7ICJfYXNz aWduIF93aGlcXHYoY21kbGV2ZWwpIHtfZ2V0YXJncywiLAotIjpfLi5pbmMsXFwlMSxcXCUyLGdv dG8gXy4uaW5jLDpfLi5ib3QsX3B1dGFyZ3N9LCIsCi0iX2RlZiBicmVhayBnb3RvIF8uLmJvdCwg X2RlZiBjb250aW51ZSBnb3RvIF8uLmluYywiLAotImRvIF93aGlcXHYoY21kbGV2ZWwpLF9hc3Np Z24gX3doaVxcdihjbWRsZXZlbCkiLAotIiJ9OwotCi0vKiBTV0lUQ0ggbWFjcm8gKi8KLWNoYXIg KnN3X2RlZltdID0geyAiX2Fzc2lnbiBfc3dfXFx2KGNtZGxldmVsKSB7X2dldGFyZ3MsIiwKLSJf Zm9yd2FyZCB7XFwlMX0sXFwlMiw6ZGVmYXVsdCw6Xy4uYm90LF9wdXRhcmdzfSxfZGVmIGJyZWFr IGdvdG8gXy4uYm90LCIsCi0iZG8gX3N3X1xcdihjbWRsZXZlbCksX2Fzc2lnbiBfc3dfXFx2KGNt ZGxldmVsKSIsCi0iIn07Ci0KLS8qIFhJRiBtYWNybyAqLwotY2hhciAqeGlmX2RlZltdID0gewot Il9hc3NpZ24gX2lmXFx2KGNtZGxldmVsKSB7X2dldGFyZ3MsXFwlMSxfcHV0YXJnc30sIiwKLSJk byBfaWZcXHYoY21kbGV2ZWwpLF9hc3NpZ24gX2lmXFx2KGNtZGxldmVsKSIsCi0iIn07Ci0KLS8q Ci0gIFZhcmlhYmxlcyBkZWNsYXJlZCBoZXJlIGZvciB1c2UgYnkgb3RoZXIgY2t1dXMqLmMgbW9k dWxlcy4KLSAgU3BhY2UgaXMgYWxsb2NhdGVkIGhlcmUgdG8gc2F2ZSByb29tIGluIGNrdXVzci5j LgotKi8KLSNpZmRlZiBEQ01EQlVGCi1zdHJ1Y3QgY21kcHRyICpjbWRzdGs7Ci1pbnQKLSAgKmlm Y21kICA9IE5VTEwsCi0gICpjb3VudCAgPSBOVUxMLAotICAqaWZ0ZXN0ID0gTlVMTCwKLSAgKmlu dGltZSA9IE5VTEwsCi0gICppbnBjYXMgPSBOVUxMLAotICAqdGFrZXJyID0gTlVMTCwKLSAgKm1l cnJvciA9IE5VTEw7Ci0jZWxzZQotc3RydWN0IGNtZHB0ciBjbWRzdGtbQ01EU1RLTF07Ci1pbnQg aWZjbWRbQ01EU1RLTF0sIGNvdW50W0NNRFNUS0xdLCBpZnRlc3RbQ01EU1RLTF0sIGludGltZVtD TURTVEtMXSwKLSAgaW5wY2FzW0NNRFNUS0xdLCB0YWtlcnJbQ01EU1RLTF0sIG1lcnJvcltDTURT VEtMXTsKLSNlbmRpZiAvKiBEQ01EQlVGICovCi0KLS8qIE1hY3JvIHN0YWNrICovCi0KLSNpZmRl ZiBDT01NRU5UCi1jaGFyICp0b3BsaW5lID0gTlVMTDsgICAgICAgICAgICAgICAgICAgLyogUHJv Z3JhbSBpbnZvY2F0aW9uIGFyZyBsaW5lICovCi1jaGFyICptX2xpbmVbTUFDTEVWRUxdID0geyBO VUxMLCBOVUxMIH07IC8qIFN0YWNrIG9mIG1hY3JvIGludm9jYXRpb24gbGluZXMgKi8KLSNlbmRp ZiAvKiBDT01NRU5UICovCi0KLWNoYXIgKiptX3hhcmdbTUFDTEVWRUxdOyAgICAgICAgICAgICAg ICAvKiBQb2ludGVycyB0byBhcmcgdmVjdG9yIGFycmF5cyAqLwotaW50IG5feGFyZ1tNQUNMRVZF TF07ICAgICAgICAgICAgICAgICAgIC8qIFNpemVzIG9mIGFyZyB2ZWN0b3IgYXJyYXlzICovCi1j aGFyICptX2FyZ1tNQUNMRVZFTF1bTkFSR1NdOyAgICAgICAgICAgLyogQXJncyBvZiBlYWNoIGxl dmVsICovCi1pbnQgbWFjYXJnY1tNQUNMRVZFTF07ICAgICAgICAgICAgICAgICAgLyogQXJnYyBv ZiBlYWNoIGxldmVsICovCi1jaGFyICptYWNwW01BQ0xFVkVMXTsgICAgICAgICAgICAgICAgICAg LyogQ3VycmVudCBwb3NpdGlvbiBpbiBlYWNoIG1hY3JvICovCi1jaGFyICptYWN4W01BQ0xFVkVM XTsgICAgICAgICAgICAgICAgICAgLyogQmVnaW5uaW5nIG9mIGVhY2ggbWFjcm8gZGVmICovCi1j aGFyICptcnZhbFtNQUNMRVZFTF07ICAgICAgICAgICAgICAgICAgLyogUkVUVVJOIHZhbHVlIGF0 IGVhY2ggbGV2ZWwgKi8KLWludCBsYXN0Y21kW01BQ0xFVkVMXTsgICAgICAgICAgICAgICAgICAv KiBMYXN0IGNvbW1hbmQgYXQgZWFjaCBsZXZlbCAqLwotaW50IHRvcGFyZ2MgPSAwOyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEFyZ2MgYXQgdG9wIGxldmVsICovCi1jaGFyICoqdG9weGFyZyA9 IE5VTEw7ICAgICAgICAgICAgICAgICAgLyogQXJndiBhdCB0b3AgbGV2ZWwgKi8KLWNoYXIgKnRv cGFyZ1tNQVhBUkdMSVNUKzJdOwotCi0vKiBHbG9iYWwgVmFyaWFibGVzICovCi0KLWNoYXIgKmdf dmFyW0dWQVJTKzFdOyAgICAgICAgICAgICAgICAgICAvKiBHbG9iYWwgXCVhLi56IHBvaW50ZXJz ICovCi1leHRlcm4gY2hhciB2YXJuYW1bXTsgICAgICAgICAgICAgICAgICAgLyogXCV4IHZhcmlh YmxlIG5hbWUgYnVmZmVyICovCi0KLS8qIEFycmF5cyAtLSBEaW1lbnNpb24gbXVzdCBiZSAneicg LSBBUlJBWUJBU0UgKyAxICovCi0vKiBOb3RlOiBhX2xpbmtbeF0gPCAwIG1lYW5zIG5vIGxpbms7 ID49IDAgaXMgYSBsaW5rICovCi0KLWNoYXIgKiphX3B0clszMl07ICAgICAgICAgICAgICAgICAg ICAgICAvKiBBcnJheSBwb2ludGVycywgZm9yIGFycmF5cyBhLXogKi8KLWludCBhX2RpbVszMl07 ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEaW1lbnNpb25zIGZvciBlYWNoIGFycmF5ICov Ci1pbnQgYV9saW5rWzMyXTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGluayAoaW5kZXgg b2YgbGlua2VkLXRvLWFycmF5KSAqLwotCi1jaGFyICoqYWFfcHRyW0NNRFNUS0xdWzMyXTsgICAg ICAgICAgICAgLyogQXJyYXkgc3RhY2sgZm9yIGF1dG9tYXRpYyBhcnJheXMgKi8KLWludCBhYV9k aW1bQ01EU1RLTF1bMzJdOyAgICAgICAgICAgICAgICAvKiBEaW1lbnNpb25zIGZvciBlYWNoIGFy cmF5ICovCi0KLS8qIElOUFVUIGNvbW1hbmQgYnVmZmVycyBhbmQgdmFyaWFibGVzICovCi0KLWNo YXIgKiBpbnBidWYgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAvKiBCdWZmZXIgZm9yIElOUFVU IGFuZCBSRUlOUFVUICovCi1leHRlcm4gY2hhciAqIGlucGJwOyAgICAgICAgICAgICAgICAgICAg LyogR2xvYmFsL3N0YXRpYyBwb2ludGVyIHRvIGl0ICAqLwotY2hhciBpbmNoYXJbMl0gPSB7IE5V TCwgTlVMIH07ICAgICAgICAgIC8qIExhc3QgY2hhcmFjdGVyIHRoYXQgd2FzIElOUFVUICovCi1p bnQgIGluY291bnQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogSU5QVVQgY2hhcmFjdGVy IGNvdW50ICovCi1leHRlcm4gaW50IGluc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgLyogSU5Q VVQgc3RhdHVzICovCi1zdGF0aWMgY2hhciAqIGlfdGV4dFtdID0geyAgICAgICAgICAgICAgLyog SU5QVVQgc3RhdHVzIHRleHQgKi8KLSAgICAic3VjY2VzcyIsICJ0aW1lb3V0IiwgImludGVycnVw dGVkIiwgImludGVybmFsIGVycm9yIiwgImkvbyBlcnJvciIKLX07Ci0KLWNoYXIgbGJsYnVmW0xC TFNJWl07ICAgICAgICAgICAgICAgICAgICAvKiBCdWZmZXIgZm9yIGxhYmVscyAqLwotCi0jZWxz ZSAgLyogTk9TUEwgKi8KLQotaW50IHRha2VycltNQVhUQUtFXTsKLSNlbmRpZiAvKiBOT1NQTCAq LwotCi1zdGF0aWMgY2hhciAqcHJldmRpciA9IE5VTEw7Ci0KLWludCBwYWNpbmcgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBPVVRQVVQgcGFjaW5nICovCi0KLWNoYXIgKnRwOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZW1wb3JhcnkgYnVmZmVyIHBvaW50ZXIgKi8K LQotaW50IHRpbWVsaW1pdCA9IDAsIGFza3RpbWVyID0gMDsgICAgICAgIC8qIFRpbWVycyBmb3Ig dGltZS1saW1pdGVkIGNvbW1hbmRzICovCi0KLSNpZmRlZiBDS19BUEMgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBBcHBsaWNhdGlvbiBQcm9ncmFtIENvbW1hbmQgKEFQQykgKi8KLWludCBh cGNhY3RpdmUgPSBBUENfSU5BQ1RJVkU7Ci1pbnQgYXBjc3RhdHVzID0gQVBDX09GRjsgICAgICAg ICAgICAgICAgLyogT0ZGIGJ5IGRlZmF1bHQgZXZlcnl3aGVyZSAqLwotI2lmZGVmIERDTURCVUYK LWNoYXIgKmFwY2J1ZjsKLSNlbHNlCi1jaGFyIGFwY2J1ZltBUENCVUZMRU5dOwotI2VuZGlmIC8q IERDTURCVUYgKi8KLSNlbmRpZiAvKiBDS19BUEMgKi8KLQotZXh0ZXJuIGNoYXIgcGt0ZmlsW10s Ci0jaWZkZWYgREVCVUcKLSAgZGViZmlsW10sCi0jZW5kaWYgLyogREVCVUcgKi8KLSNpZmRlZiBU TE9HCi0gIHRyYWZpbFtdLAotI2VuZGlmIC8qIFRMT0cgKi8KLSAgc2VzZmlsW107Ci0KLSNpZm5k ZWYgTk9GUklMTFMKLWV4dGVybiBpbnQgcm1haWxmLCBycHJpbnRmOyAgICAgICAgICAgICAvKiBS RU1PVEUgTUFJTCAmIFBSSU5UIGl0ZW1zICovCi1leHRlcm4gY2hhciBvcHRidWZbXTsKLSNlbmRp ZiAvKiBOT0ZSSUxMUyAqLwotCi1leHRlcm4gaW50IG5vaW5pdDsJCQkvKiBGbGF0IHRvIHNraXAg aW5pdCBmaWxlICovCi0KLSNpZm5kZWYgTk9TUEwKLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGtjZHRh YltdID0gewkvKiBTeW1ib2xpYyBkaXJlY3RvcnkgbmFtZXMgKi8KLSNpZmRlZiBOVAotICAgIHsg ImFwcGRhdGEiLCAgVk5fQVBQREFUQSwgICAwIH0sCi0gICAgeyAiY29tbW9uIiwgICBWTl9DT01N T04sICAgIDAgfSwKLSAgICB7ICJkZXNrdG9wIiwgIFZOX0RFU0tUT1AsICAgMCB9LAotI2VuZGlm IC8qIE5UICovCi0gICAgeyAiZG93bmxvYWQiLCBWTl9ETERJUiwgICAgIDAgfSwKLSNpZmRlZiBP UzJPUlVOSVgKLSAgICB7ICJleGVkaXIiLCAgIFZOX0VYRURJUiwgICAgMCB9LAotI2VuZGlmIC8q IE9TMk9SVU5JWCAqLwotICAgIHsgImhvbWUiLCAgICAgVk5fSE9NRSwgICAgICAwIH0sCi0gICAg eyAiaW5pZGlyIiwgICBWTl9JTkksICAgICAgIDAgfSwKLSNpZmRlZiBVTklYCi0gICAgeyAibG9j a2RpciIsICBWTl9MQ0tESVIsICAgIDAgfSwKLSNlbmRpZiAvKiBVTklYICovCi0jaWZkZWYgTlQK LSAgICB7ICJteV9kb2N1bWVudHMiLFZOX1BFUlNPTkFMLCAgMCB9LAotICAgIHsgInBlcnNvbmFs IiwgVk5fUEVSU09OQUwsICBDTV9JTlYgfSwKLSNlbmRpZiAvKiBOVCAqLwotICAgIHsgInN0YXJ0 dXAiLCAgVk5fU1RBUiwgICAgICAwIH0sCi0gICAgeyAidGV4dGRpciIsICBWTl9UWFRESVIsICAg IDAgfSwKLSAgICB7ICJ0bXBkaXIiLCAgIFZOX1RFTVAsICAgICAgMCB9Ci19Owotc3RhdGljIGlu dCBua2NkdGFiID0gKHNpemVvZihrY2R0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLSNl bmRpZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVmIE5PU1BMCi1fUFJPVE9UWVAoIFZPSUQgZnJlZWxv Y2FsLCAoaW50KSApOwotX1BST1RPVFlQKCBzdGF0aWMgQ0tfT0ZGX1QgZXhwb24sIChDS19PRkZf VCwgQ0tfT0ZGX1QpICk7Ci1fUFJPVE9UWVAoIHN0YXRpYyBDS19PRkZfVCBnY2QsIChDS19PRkZf VCwgQ0tfT0ZGX1QpICk7Ci1fUFJPVE9UWVAoIHN0YXRpYyBDS19PRkZfVCBmYWN0LCAoQ0tfT0ZG X1QpICk7Ci0KLWludCAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgbWFjcm8gZGF0 YSBzdHJ1Y3R1cmVzLiAqLwotbWFjaW5pKCkgeyAgICAgICAgICAgICAgLyogQWxsb2NhdGUgbWFj dGFiIGFuZCBwcmVzZXQgdGhlIGZpcnN0IGVsZW1lbnQuICovCi0gICAgaW50IGk7Ci0gICAgaWYg KCEobWFjdGFiID0gKHN0cnVjdCBtdGFiICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IG10YWIpICog TUFDX01BWCkpKQotICAgICAgcmV0dXJuKC0xKTsKLSAgICBtYWN0YWJbMF0ua3dkID0gTlVMTDsK LSAgICBtYWN0YWJbMF0ubXZhbCA9IE5VTEw7Ci0gICAgbWFjdGFiWzBdLmZsZ3MgPSAwOwotICAg IGZvciAoaSA9IDA7IGkgPCBNQUNMRVZFTDsgaSsrKQotICAgICAgbG9jYWxoZWFkW2ldID0gTlVM TDsKLSAgICByZXR1cm4oMCk7Ci19Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotLyogIEMgTSBEIFMg UiBDICAtLSAgUmV0dXJucyBjdXJyZW50IGNvbW1hbmQgc291cmNlICAqLwotCi0vKiAgMCA9IHRv cCBsZXZlbCwgMSA9IGZpbGUsIDIgPSBtYWNybywgLTEgPSBlcnJvciAoc2hvdWxkbid0IGhhcHBl bikgKi8KLQotLyoKLSAgQXMgb2YgMTkgQXVnIDIwMDAgdGhpcyByb3V0aW5lIGlzIG9ic29sZXRl LiAgVGhlIHNjYWxhciBnbG9iYWwgdmFyaWFibGUKLSAgeGNtZHNyYyBjYW4gYmUgY2hlY2tlZCBp bnN0ZWFkIHRvIHNhdmUgdGhlIG92ZXJoZWFkIG9mIGEgZnVuY3Rpb24gY2FsbC4KLSovCi1pbnQK LWNtZHNyYygpIHsKLSNpZmRlZiBDT01NRU5UCi0gICAgcmV0dXJuKHhjbWRzcmMpOwotI2Vsc2UK LSNpZm5kZWYgTk9TUEwKLSAgICBpZiAoY21kbHZsID09IDApCi0gICAgICByZXR1cm4oMCk7Ci0g ICAgZWxzZSBpZiAoY21kc3RrW2NtZGx2bF0uc3JjID09IENNRF9NRCkKLSAgICAgIHJldHVybigy KTsKLSAgICBlbHNlIGlmIChjbWRzdGtbY21kbHZsXS5zcmMgPT0gQ01EX1RGKQotICAgICAgcmV0 dXJuKDEpOwotICAgIGVsc2UKLSAgICAgIHJldHVybigtMSk7Ci0jZWxzZQotICAgIGlmICh0bGV2 ZWwgPCAwKQotICAgICAgcmV0dXJuKDApOwotICAgIGVsc2UKLSAgICAgIHJldHVybigxKTsKLSNl bmRpZiAvKiBOT1NQTCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLX0KLQotLyogIEMgTSBEIEkg TiBJICAtLSAgSW5pdGlhbGl6ZSB0aGUgaW50ZXJhY3RpdmUgY29tbWFuZCBwYXJzZXIgICovCi0K LXN0YXRpYyBpbnQgY21kaW5pdGVkID0gMDsgICAgICAgICAgICAgICAvKiBDb21tYW5kIHBhcnNl ciBpbml0aWFsaXplZCAqLwotZXh0ZXJuIGludCBjbWRpbnQ7ICAgICAgICAgICAgICAgICAgICAg IC8qIEludGVycnVwdHMgYXJlIGFsbG93ZWQgKi8KLSNpZmRlZiBDS19BVVRPREwKLWludCBjbWRh ZGwgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBdXRvZG93bmxvYWQgKi8KLSNlbHNl Ci1pbnQgY21kYWRsID0gMDsKLSNlbmRpZiAvKiBDS19BVVRPREwgKi8KLQotY2hhciAqIGtfaW5m b19kaXIgPSBOVUxMOyAgICAgICAgICAgICAgIC8qIFdoZXJlIHRvIGZpbmQgdGV4dCBmaWxlcyAq LwotI2lmZGVmIFVOSVgKLXN0YXRpYyBjaGFyICogdHh0ZGlyW10gPSB7Ci0gICAgIi91c3IvbG9j YWwvZG9jLyIsICAgICAgICAgICAgICAgICAgLyogTGludXgsIFN1bk9TLCAuLi4gKi8KLSAgICAi L3Vzci9zaGFyZS9saWIvIiwgICAgICAgICAgICAgICAgICAvKiBIUC1VWCAxMC54eC4uLiAqLwot ICAgICIvdXNyL3NoYXJlL2RvYy8iLCAgICAgICAgICAgICAgICAgIC8qIE90aGVyIHBvc3NpYmls aXRpZXMuLi4gKi8KLSAgICAiL3Vzci9sb2NhbC9saWIvIiwgICAgICAgICAgICAgICAgICAvKiBO T1RFOiBFYWNoIG9mIHRoZXNlIGlzIHRyaWVkICovCi0gICAgIi91c3IvbG9jYWwvc2hhcmUvIiwg ICAgICAgICAgICAgICAgLyogYXMgaXMsIGFuZCBhbHNvIHdpdGggYSBrZXJtaXQgKi8KLSAgICAi L3Vzci9sb2NhbC9zaGFyZS9kb2MvIiwgICAgICAgICAgICAvKiBzdWJkaXJlY3RvcnkuICovCi0g ICAgIi91c3IvbG9jYWwvc2hhcmUvbGliLyIsCi0gICAgIi9vcHQva2VybWl0LyIsICAgICAgICAg ICAgICAgICAgICAgLyogU29sYXJpcyAqLwotICAgICIvb3B0L2tlcm1pdC9kb2MvIiwKLSAgICAi L29wdC8iLAotICAgICIvdXNyL2RvYy8iLAotICAgICIvZG9jLyIsCi0gICAgIiIKLX07Ci0jZW5k aWYgLyogVU5JWCAqLwotCi0vKgotICBsb29rdXAoKSBjYWNoZSB0byBzcGVlZCB1cCBzY3JpcHQg ZXhlY3V0aW9uLgotCi0gIFRoaXMgaXMgYSBzdGF0aWMgY2FjaGUuICBJdGVtcyBhcmUgc3RvcmVk IGluIGRlY3JlYXNpbmcgZnJlcXVlbmN5IG9mCi0gIHJlZmVyZW5jZSBiYXNlZCBvbiBzdGF0aXN0 aWNzIGZyb20gYSByYW5nZSBvZiBzY3JpcHRzLiAgVGhpcyBnaXZlcwotICBiZXR0ZXIgcGVyZm9y bWFuY2UgdGhhbiBhIGR5bmFtaWMgY2FjaGUsIHdoaWNoIHdvdWxkIHJlcXVpcmUgYSBsb3QgbW9y ZQotICBjb2RlIGFuZCBhbHNvIHdvdWxkIHJlcXVpcmUgc3lzdGVtLWRlcGVuZGVudCBlbGVtZW50 cyBpbmNsdWRpbmcgc3lzdGVtCi0gIGNhbGxzIChlLmcuIHRvIGdldCBzdWJzZWNvbmQgdGltZXMg Zm9yIGVudHJ5IGFnaW5nKS4KLSovCi0jaWZkZWYgVVNFX0xVQ0FDSEUgICAgICAgICAgICAgICAg ICAgICAgLyogU2V0IGluIGNrdXVzci5oICovCi0jZGVmaW5lIExVQ0FDSEUgMzIgICAgICAgICAg ICAgICAgICAgICAgLyogQ2hhbmdlIHRoaXMgdG8gcmVkdWNlIGNhY2hlIHNpemUgKi8KLWludCBs dXNpemUgPSAwOwotY2hhciAqIGx1Y21kW0xVQ0FDSEVdOwotaW50IGx1dmFsW0xVQ0FDSEVdOwot aW50IGx1aWR4W0xVQ0FDSEVdOwotc3RydWN0IGtleXRhYiAqIGx1dGFiW0xVQ0FDSEVdOwotI2Vu ZGlmIC8qIFVTRV9MVUNBQ0hFICovCi0KLXN0YXRpYyBWT0lECi1sdWluaXQoKSB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBsb29rdXAoKSBjYWNoZSAqLwotICAg IGludCB4LCB5OwotCi0jaWZkZWYgVVNFX0xVQ0FDSEUKLSAgICB4ID0gbG9va3VwKGNtZHRhYiwi aWYiLG5jbWQsJnkpOwotICAgIGx1Y21kW2x1c2l6ZV0gPSAiaWYiOwotICAgIGx1dmFsW2x1c2l6 ZV0gPSB4OwotICAgIGx1aWR4W2x1c2l6ZV0gPSB5OwotICAgIGx1dGFiW2x1c2l6ZV0gPSBjbWR0 YWI7Ci0gICAgaWYgKCsrbHVzaXplID4gTFVDQUNIRSkgcmV0dXJuOwotCi0gICAgeCA9IGxvb2t1 cChpZnRhYiwibm90IixuaWYsJnkpOwotICAgIGx1Y21kW2x1c2l6ZV0gPSAibm90IjsKLSAgICBs dXZhbFtsdXNpemVdID0geDsKLSAgICBsdWlkeFtsdXNpemVdID0geTsKLSAgICBsdXRhYltsdXNp emVdID0gaWZ0YWI7Ci0gICAgaWYgKCsrbHVzaXplID4gTFVDQUNIRSkgcmV0dXJuOwotCi0gICAg eCA9IGxvb2t1cCh2YXJ0YWIsImNtZGxldmVsIixudmFycywmeSk7Ci0gICAgbHVjbWRbbHVzaXpl XSA9ICJjbWRsZXZlbCI7Ci0gICAgbHV2YWxbbHVzaXplXSA9IHg7Ci0gICAgbHVpZHhbbHVzaXpl XSA9IHk7Ci0gICAgbHV0YWJbbHVzaXplXSA9IHZhcnRhYjsKLSAgICBpZiAoKytsdXNpemUgPiBM VUNBQ0hFKSByZXR1cm47Ci0KLSAgICB4ID0gbG9va3VwKGNtZHRhYiwiZ290byIsbmNtZCwmeSk7 Ci0gICAgbHVjbWRbbHVzaXplXSA9ICJnb3RvIjsKLSAgICBsdXZhbFtsdXNpemVdID0geDsKLSAg ICBsdWlkeFtsdXNpemVdID0geTsKLSAgICBsdXRhYltsdXNpemVdID0gY21kdGFiOwotICAgIGlm ICgrK2x1c2l6ZSA+IExVQ0FDSEUpIHJldHVybjsKLQotICAgIHggPSBsb29rdXAoaWZ0YWIsIj4i LG5pZiwmeSk7Ci0gICAgbHVjbWRbbHVzaXplXSA9ICI+IjsKLSAgICBsdXZhbFtsdXNpemVdID0g eDsKLSAgICBsdWlkeFtsdXNpemVdID0geTsKLSAgICBsdXRhYltsdXNpemVdID0gaWZ0YWI7Ci0g ICAgaWYgKCsrbHVzaXplID4gTFVDQUNIRSkgcmV0dXJuOwotCi0gICAgeCA9IGxvb2t1cChjbWR0 YWIsImluY3IiLG5jbWQsJnkpOwotICAgIGx1Y21kW2x1c2l6ZV0gPSAiaW5jciI7Ci0gICAgbHV2 YWxbbHVzaXplXSA9IHg7Ci0gICAgbHVpZHhbbHVzaXplXSA9IHk7Ci0gICAgbHV0YWJbbHVzaXpl XSA9IGNtZHRhYjsKLSAgICBpZiAoKytsdXNpemUgPiBMVUNBQ0hFKSByZXR1cm47Ci0KLSAgICB4 ID0gbG9va3VwKGNtZHRhYiwiZGVmIixuY21kLCZ5KTsKLSAgICBsdWNtZFtsdXNpemVdID0gImRl ZiI7Ci0gICAgbHV2YWxbbHVzaXplXSA9IHg7Ci0gICAgbHVpZHhbbHVzaXplXSA9IHk7Ci0gICAg bHV0YWJbbHVzaXplXSA9IGNtZHRhYjsKLSAgICBpZiAoKytsdXNpemUgPiBMVUNBQ0hFKSByZXR1 cm47Ci0KLSAgICB4ID0gbG9va3VwKGNtZHRhYiwiX2Fzc2lnbiIsbmNtZCwmeSk7Ci0gICAgbHVj bWRbbHVzaXplXSA9ICJfYXNzaWduIjsKLSAgICBsdXZhbFtsdXNpemVdID0geDsKLSAgICBsdWlk eFtsdXNpemVdID0geTsKLSAgICBsdXRhYltsdXNpemVdID0gY21kdGFiOwotICAgIGlmICgrK2x1 c2l6ZSA+IExVQ0FDSEUpIHJldHVybjsKLQotICAgIHggPSBsb29rdXAoY21kdGFiLCJlY2hvIixu Y21kLCZ5KTsKLSAgICBsdWNtZFtsdXNpemVdID0gImVjaG8iOwotICAgIGx1dmFsW2x1c2l6ZV0g PSB4OwotICAgIGx1aWR4W2x1c2l6ZV0gPSB5OwotICAgIGx1dGFiW2x1c2l6ZV0gPSBjbWR0YWI7 Ci0gICAgaWYgKCsrbHVzaXplID4gTFVDQUNIRSkgcmV0dXJuOwotCi0gICAgeCA9IGxvb2t1cChm bmN0YWIsImV2YWwiLG5mdW5jcywmeSk7Ci0gICAgbHVjbWRbbHVzaXplXSA9ICJldmFsIjsKLSAg ICBsdXZhbFtsdXNpemVdID0geDsKLSAgICBsdWlkeFtsdXNpemVdID0geTsKLSAgICBsdXRhYlts dXNpemVdID0gZm5jdGFiOwotICAgIGlmICgrK2x1c2l6ZSA+IExVQ0FDSEUpIHJldHVybjsKLQot ICAgIHggPSBsb29rdXAoZm5jdGFiLCJsaXQiLG5mdW5jcywmeSk7Ci0gICAgbHVjbWRbbHVzaXpl XSA9ICJsaXQiOwotICAgIGx1dmFsW2x1c2l6ZV0gPSB4OwotICAgIGx1aWR4W2x1c2l6ZV0gPSB5 OwotICAgIGx1dGFiW2x1c2l6ZV0gPSBmbmN0YWI7Ci0gICAgaWYgKCsrbHVzaXplID4gTFVDQUNI RSkgcmV0dXJuOwotCi0gICAgeCA9IGxvb2t1cChjbWR0YWIsImRvIixuY21kLCZ5KTsKLSAgICBs dWNtZFtsdXNpemVdID0gImRvIjsKLSAgICBsdXZhbFtsdXNpemVdID0geDsKLSAgICBsdWlkeFts dXNpemVdID0geTsKLSAgICBsdXRhYltsdXNpemVdID0gY21kdGFiOwotICAgIGlmICgrK2x1c2l6 ZSA+IExVQ0FDSEUpIHJldHVybjsKLQotICAgIHggPSBsb29rdXAoY21kdGFiLCJfZ2V0YXJncyIs bmNtZCwmeSk7Ci0gICAgbHVjbWRbbHVzaXplXSA9ICJfZ2V0YXJncyI7Ci0gICAgbHV2YWxbbHVz aXplXSA9IHg7Ci0gICAgbHVpZHhbbHVzaXplXSA9IHk7Ci0gICAgbHV0YWJbbHVzaXplXSA9IGNt ZHRhYjsKLSAgICBpZiAoKytsdXNpemUgPiBMVUNBQ0hFKSByZXR1cm47Ci0KLSAgICB4ID0gbG9v a3VwKGlmdGFiLCI8IixuaWYsJnkpOwotICAgIGx1Y21kW2x1c2l6ZV0gPSAiPCI7Ci0gICAgbHV2 YWxbbHVzaXplXSA9IHg7Ci0gICAgbHVpZHhbbHVzaXplXSA9IHk7Ci0gICAgbHV0YWJbbHVzaXpl XSA9IGlmdGFiOwotICAgIGlmICgrK2x1c2l6ZSA+IExVQ0FDSEUpIHJldHVybjsKLQotICAgIHgg PSBsb29rdXAoY21kdGFiLCJfcHV0YXJncyIsbmNtZCwmeSk7Ci0gICAgbHVjbWRbbHVzaXplXSA9 ICJfcHV0YXJncyI7Ci0gICAgbHV2YWxbbHVzaXplXSA9IHg7Ci0gICAgbHVpZHhbbHVzaXplXSA9 IHk7Ci0gICAgbHV0YWJbbHVzaXplXSA9IGNtZHRhYjsKLSAgICBpZiAoKytsdXNpemUgPiBMVUNB Q0hFKSByZXR1cm47Ci0KLSAgICB4ID0gbG9va3VwKGNtZHRhYiwiYXNnIixuY21kLCZ5KTsKLSAg ICBsdWNtZFtsdXNpemVdID0gImFzZyI7Ci0gICAgbHV2YWxbbHVzaXplXSA9IHg7Ci0gICAgbHVp ZHhbbHVzaXplXSA9IHk7Ci0gICAgbHV0YWJbbHVzaXplXSA9IGNtZHRhYjsKLSAgICBpZiAoKyts dXNpemUgPiBMVUNBQ0hFKSByZXR1cm47Ci0KLSAgICB4ID0gbG9va3VwKGNtZHRhYiwiZWxzZSIs bmNtZCwmeSk7Ci0gICAgbHVjbWRbbHVzaXplXSA9ICJlbHNlIjsKLSAgICBsdXZhbFtsdXNpemVd ID0geDsKLSAgICBsdWlkeFtsdXNpemVdID0geTsKLSAgICBsdXRhYltsdXNpemVdID0gY21kdGFi OwotI2VuZGlmIC8qIFVTRV9MVUNBQ0hFICovCi19Ci0KLVZPSUQKLWNtZGluaSgpIHsKLSAgICBp bnQgaSA9IDAsIHggPSAwLCB5ID0gMCwgeiA9IDAsIHNraXAgPSAwOwotICAgIGNoYXIgKiBwOwot I2lmZGVmIFRUU1BETElTVAotICAgIGxvbmcgKiBzcyA9IE5VTEw7Ci0gICAgZXh0ZXJuIGludCBu c3BkOwotICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiICogc3BkdGFiOwotI2VuZGlmIC8qIFRUU1BE TElTVCAqLwotCi0jaWZuZGVmIE5PU1BMCi0vKgotICBPbiBzdGFjayB0byBhbGxvdyByZWN1cnNp b24hCi0qLwotICAgIGNoYXIgdm5hbWJ1ZltWTkFNTF07ICAgICAgICAgICAgICAgIC8qIEJ1ZmZl ciBmb3IgdmFyaWFibGUgbmFtZXMgKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0gICAgaWYgKGNt ZGluaXRlZCkgICAgICAgICAgICAgICAgICAgICAgLyogQWxyZWFkeSBpbml0aWFsaXplZCAqLwot ICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvbid0IGRvIGl0IGFn YWluICovCi0KLSAgICBmb3IgKGkgPSAwOyBpIDwgQ01EU1RLTDsgaSsrKSAgICAgICAvKiBQcm9t cHQgc3RyaW5ncyBmb3IgZWFjaCAqLwotICAgICAgcHJzdHJpbmdbaV0gPSBOVUxMOyAgICAgICAg ICAgICAgIC8qIGNvbW1hbmQgbGV2ZWwgKi8KLQotI2lmbmRlZiBOT0NTRVRTCi0gICAgcCA9IGdl dGVudigiS19DSEFSU0VUIik7ICAgICAgICAgICAgLyogU2V0IGRlZmF1bHQgZmlsZSBjaGFyYWN0 ZXIgc2V0ICovCi0gICAgaWYgKHApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZnJv bSBlbnZpcm9ubWVudCAqLwotICAgICAgICB4ID0gbG9va3VwKGZjc3RhYixwLG5maWxjLCZ5KTsK LSAgICAgICAgaWYgKHggPiAtMSkKLSAgICAgICAgICBmY2hhcnNldCA9IHg7Ci0gICAgfQotI2Vu ZGlmIC8qIE5PQ1NFVFMgKi8KLQotICAgIHAgPSBnZXRlbnYoIktfSU5GT19ESVJFQ1RPUlkiKTsg ICAgIC8qIEZpbmQgS2VybWl0IGluZm8gZGlyZWN0b3J5ICovCi0gICAgaWYgKHAgJiYgKnAgJiYg c3RybGVuKHApIDw9IENLTUFYUEFUSCkKLSAgICAgIG1ha2VzdHIoJmtfaW5mb19kaXIscCk7Ci0g ICAgaWYgKCFrX2luZm9fZGlyKSB7Ci0gICAgICAgIHAgPSBnZXRlbnYoIktfSU5GT19ESVIiKTsK LSAgICAgICAgaWYgKHAgJiYgKnAgJiYgc3RybGVuKHApIDw9IENLTUFYUEFUSCkKLSAgICAgICAg ICBtYWtlc3RyKCZrX2luZm9fZGlyLHApOwotICAgIH0KLSNpZmRlZiBVTklYCi0gICAgaWYgKGtf aW5mb19kaXIpIHsgICAgICAgICAgICAgICAgICAgLyogTG9vayBmb3IgS2VybWl0IGRvY3MgZGly ZWN0b3J5ICovCi0gICAgICAgIGlmICh6Y2hraShrX2luZm9fZGlyKSA9PSAtMikgewotICAgICAg ICAgICAgY2hhciB4YnVmW0NLTUFYUEFUSCszMl0sICpzID0gIiI7Ci0gICAgICAgICAgICBpZiAo Y2tyY2hhcihrX2luZm9fZGlyKSAhPSAnLycpCi0gICAgICAgICAgICAgIHMgPSAiLyI7Ci0gICAg ICAgICAgICBja21ha21zZyh4YnVmLENLTUFYUEFUSCszMixrX2luZm9fZGlyLHMsImNrdWJ3ci50 eHQiLE5VTEwpOwotICAgICAgICAgICAgaWYgKHpjaGtpKHhidWYpIDwgMCkKLSAgICAgICAgICAg ICAgbWFrZXN0cigma19pbmZvX2RpcixOVUxMKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAo IWtfaW5mb19kaXIpIHsKLSAgICAgICAgY2hhciB4YnVmW0NLTUFYUEFUSCszMl07Ci0gICAgICAg IGludCBpOwotICAgICAgICBmb3IgKGkgPSAwOyAqKHR4dGRpcltpXSk7IGkrKykgewotICAgICAg ICAgICAgY2ttYWttc2coeGJ1ZixDS01BWFBBVEgrMzIsdHh0ZGlyW2ldLCJja3Vid3IudHh0IixO VUxMLE5VTEwpOwotICAgICAgICAgICAgaWYgKHpjaGtpKHhidWYpID4gMCkgewotICAgICAgICAg ICAgICAgIG1ha2VzdHIoJmtfaW5mb19kaXIsdHh0ZGlyW2ldKTsKLSAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJrX2luZm9fZGlyIDEiLGtfaW5mb19kaXIsMCk7Ci0gICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBja21ha21zZyh4YnVmLENLTUFYUEFU SCszMiwKLSAgICAgICAgICAgICAgICAgICAgIHR4dGRpcltpXSwia2VybWl0LyIsImNrdWJ3ci50 eHQiLE5VTEwpOwotICAgICAgICAgICAgaWYgKHpjaGtpKHhidWYpID4gMCkgewotICAgICAgICAg ICAgICAgIGNrbWFrbXNnKHhidWYsQ0tNQVhQQVRIKzMyLHR4dGRpcltpXSwia2VybWl0LyIsTlVM TCxOVUxMKTsKLSAgICAgICAgICAgICAgICBtYWtlc3RyKCZrX2luZm9fZGlyLHhidWYpOwotICAg ICAgICAgICAgICAgIGRlYnVnKEYxMTAsImtfaW5mb19kaXIgMiIsa19pbmZvX2RpciwwKTsKLSAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNrbWFrbXNn KHhidWYsQ0tNQVhQQVRIKzMyLAotICAgICAgICAgICAgICAgICAgICAgdHh0ZGlyW2ldLCJja2Vy bWl0LyIsImNrdWJ3ci50eHQiLE5VTEwpOwotICAgICAgICAgICAgaWYgKHpjaGtpKHhidWYpID4g MCkgewotICAgICAgICAgICAgICAgIGNrbWFrbXNnKHhidWYsQ0tNQVhQQVRIKzMyLHR4dGRpcltp XSwiY2tlcm1pdC8iLE5VTEwsTlVMTCk7Ci0gICAgICAgICAgICAgICAgbWFrZXN0cigma19pbmZv X2Rpcix4YnVmKTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJrX2luZm9fZGlyIDMiLGtf aW5mb19kaXIsMCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgIH0KLSAgICAgICAgaWYgKGtfaW5mb19kaXIpIHsgICAgICAgICAgICAgICAvKiBNYWtlIHN1 cmUgaXQgZW5kcyB3aXRoICIvIiAqLwotICAgICAgICAgICAgaWYgKGNrcmNoYXIoa19pbmZvX2Rp cikgIT0gJy8nKSB7Ci0gICAgICAgICAgICAgICAgY2hhciB4YnVmW0NLTUFYUEFUSCszMl07Ci0g ICAgICAgICAgICAgICAgY2ttYWttc2coeGJ1ZixDS01BWFBBVEgrMzIsa19pbmZvX2RpciwiLyIs TlVMTCxOVUxMKTsKLSAgICAgICAgICAgICAgICBtYWtlc3RyKCZrX2luZm9fZGlyLHhidWYpOwot ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotI2Vsc2UKLSNpZmRlZiBPUzIKLSAgICB7 Ci0gICAgICAgIGNoYXIgeGRpcltDS01BWFBBVEgrOF0sICpzID0gIiI7Ci0gICAgICAgIGV4dGVy biBjaGFyIHN0YXJ0dXBkaXJbXTsKLSAgICAgICAgeGRpclswXSA9IE5VTDsKLSAgICAgICAgaWYg KGNrcmNoYXIoc3RhcnR1cGRpcikgIT0gJy8nKQotICAgICAgICAgIHMgPSAiLyI7Ci0gICAgICAg IGlmIChzdHJsZW4ocykgKyBzdHJsZW4oc3RhcnR1cGRpcikgKyA1IDwgQ0tNQVhQQVRIICsgOCAp Ci0gICAgICAgICAgY2ttYWttc2coeGRpcixDS01BWFBBVEgrOCxzLHN0YXJ0dXBkaXIsIkRPQy8i LE5VTEwpOwotICAgICAgICBtYWtlc3RyKCZrX2luZm9fZGlyLHhkaXIpOwotICAgIH0KLSNlbmRp ZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBVTklYICovCi0KLSNpZmRlZiBUVFNQRExJU1QKLSAgICBp ZiAoIXNwZHRhYiAmJiAoc3MgPSB0dHNwZGxpc3QoKSkpIHsgLyogR2V0IHNwZWVkIGxpc3QgaWYg bmVjZXNzYXJ5ICovCi0gICAgICAgIGludCBqLCBrLCBtID0gMCwgbjsgICAgICAgICAgICAgLyog Q3JlYXRlIHNvcnRlZCBrZXl3b3JkIHRhYmxlICovCi0gICAgICAgIGNoYXIgYnVmWzE2XTsKLSAg ICAgICAgY2hhciAqIHA7Ci0gICAgICAgIGlmICgoc3BkdGFiID0KLSAgICAgICAgICAgICAoc3Ry dWN0IGtleXRhYiAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBrZXl0YWIpICogc3NbMF0pKSkgewot ICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8PSBzc1swXTsgaSsrKSB7IC8qIHNzWzBdID0gbnVt YmVyIG9mIGVsZW1lbnRzICovCi0gICAgICAgICAgICAgICAgaWYgKHNzW2ldIDwgMUwpIGJyZWFr OyAgICAgLyogU2hvdWxkbid0IGhhcHBlbiAqLwotICAgICAgICAgICAgICAgIGJ1ZlswXSA9IE5V TDsgICAgICAgICAgICAgIC8qIE1ha2Ugc3RyaW5nICovCi0gICAgICAgICAgICAgICAgc3ByaW50 ZihidWYsIiVsZCIsc3NbaV0pOyAgLyogU0FGRSAqLwotICAgICAgICAgICAgICAgIGlmIChzc1tp XSA9PSA4ODgwTCkKLSAgICAgICAgICAgICAgICAgIGNrc3RybmNweShidWYsIjc1LzEyMDAiLHNp emVvZihidWYpKTsKLSAgICAgICAgICAgICAgICBpZiAoc3NbaV0gPT0gMTM0TCkKLSAgICAgICAg ICAgICAgICAgIGNrc3RybmNhdChidWYsIi41IiwxNik7Ci0gICAgICAgICAgICAgICAgbiA9IHN0 cmxlbihidWYpOwotICAgICAgICAgICAgICAgIGlmICgobiA+IDApICYmIChwID0gKGNoYXIgKilt YWxsb2MobisxKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG0gPiAwKSB7ICAgICAgICAv KiBIYXZlIGF0IGxlYXN0IG9uZSBpbiBsaXN0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBm b3IgKGogPSAwOyAgICAgLyogRmluZCBzbG90ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGogPCBtICYmIHN0cmNtcChidWYsc3BkdGFiW2pdLmt3ZCkgPiAwOwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBqKysKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotICAg ICAgICAgICAgICAgICAgICAgICAgICA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaiA8 IG0pIHsgICAgLyogTXVzdCBpbnNlcnQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBm b3IgKGsgPSBtLTE7IGsgPj0gajsgay0tKSB7IC8qIE1vdmUgb3RoZXJzIGRvd24gKi8KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BkdGFiW2srMV0ua3dkID0gc3BkdGFiW2tdLmt3 ZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BkdGFiW2srMV0uZmxncyA9IHNw ZHRhYltrXS5mbGdzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGR0YWJbaysx XS5rd3ZhbCA9IHNwZHRhYltrXS5rd3ZhbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSAg ICAgICAgICAgICAgLyogRmlyc3Qgb25lICovCi0gICAgICAgICAgICAgICAgICAgICAgaiA9IDA7 Ci0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShwLGJ1ZixuKzEpOyAvKiBBZGQgbmV3IHNw ZWVkICovCi0gICAgICAgICAgICAgICAgICAgIHNwZHRhYltqXS5rd2QgPSBwOwotICAgICAgICAg ICAgICAgICAgICBzcGR0YWJbal0uZmxncyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHNwZHRh YltqXS5rd3ZhbCA9IChpbnQpIHNzW2ldIC8gMTA7Ci0gICAgICAgICAgICAgICAgICAgIG0rKzsg ICAgICAgICAgICAgICAgLyogQ291bnQgdGhpcyBvbmUgKi8KLSAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbnNwZCA9IG07Ci0gICAgfQotI2VuZGlm IC8qIFRUU1BETElTVCAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgLyogQWxsb2NhdGUgSU5QVVQg Y29tbWFuZCBidWZmZXIgKi8KLSAgICBpZiAoIWlucGJ1ZikgewotICAgICAgICBpZiAoIShpbnBi dWYgPSAoY2hhciAqKSBtYWxsb2MoSU5QQlVGU0laKzgpKSkKLSAgICAgICAgICBmYXRhbCgiY21k aW5pOiBubyBtZW1vcnkgZm9yIElOUFVUIGJ1ZmZlciIpOwotICAgIH0KLSAgICBmb3IgKHggPSAw OyB4IDwgSU5QQlVGU0laOyB4KyspICAgICAvKiBJbml0aWFsaXplIGl0ICovCi0gICAgICBpbnBi dWZbeF0gPSBOVUw7Ci0gICAgaW5wYnAgPSBpbnBidWY7ICAgICAgICAgICAgICAgICAgICAgLyog SW5pdGlhbGl6ZSBwb2ludGVyICovCi0gICAgaW5idWZzaXplID0gSU5QQlVGU0laOyAgICAgICAg ICAgICAgLyogYW5kIHNpemUuICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmZGVmIERDTURC VUYKLSAgICBpZiAoY21zZXR1cCgpIDwgMCkgZmF0YWwoIkNhbid0IGFsbG9jYXRlIGNvbW1hbmQg YnVmZmVycyEiKTsKLQotI2lmbmRlZiBOT1NQTAotICAgIC8qIEFsbG9jYXRlIGNvbW1hbmQgc3Rh Y2sgYWxsb3dpbmcgY29tbWFuZCBwYXJzZXIgdG8gY2FsbCBpdHNlbGYgKi8KLQotICAgIGlmICgh KGNtZHN0ayA9IChzdHJ1Y3QgY21kcHRyICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IGNtZHB0cikq Q01EU1RLTCkpKQotICAgICAgZmF0YWwoImNtZGluaTogbm8gbWVtb3J5IGZvciBjbWRzdGsiKTsK LSAgICBpZiAoIShpZmNtZCA9IChpbnQgKikgbWFsbG9jKHNpemVvZihpbnQpKkNNRFNUS0wpKSkK LSAgICAgIGZhdGFsKCJjbWRpbmk6IG5vIG1lbW9yeSBmb3IgaWZjbWQiKTsKLSAgICBpZiAoIShj b3VudCA9IChpbnQgKikgbWFsbG9jKHNpemVvZihpbnQpKkNNRFNUS0wpKSkKLSAgICAgIGZhdGFs KCJjbWRpbmk6IG5vIG1lbW9yeSBmb3IgY291bnQiKTsKLSAgICBpZiAoIShpZnRlc3QgPSAoaW50 ICopIG1hbGxvYyhzaXplb2YoaW50KSpDTURTVEtMKSkpCi0gICAgICBmYXRhbCgiY21kaW5pOiBu byBtZW1vcnkgZm9yIGlmdGVzdCIpOwotICAgIGlmICghKGludGltZSA9IChpbnQgKikgbWFsbG9j KHNpemVvZihpbnQpKkNNRFNUS0wpKSkKLSAgICAgIGZhdGFsKCJjbWRpbmk6IG5vIG1lbW9yeSBm b3IgaW50aW1lIik7Ci0gICAgaWYgKCEoaW5wY2FzID0gKGludCAqKSBtYWxsb2Moc2l6ZW9mKGlu dCkqQ01EU1RLTCkpKQotICAgICAgZmF0YWwoImNtZGluaTogbm8gbWVtb3J5IGZvciBpbnBjYXMi KTsKLSAgICBpZiAoISh0YWtlcnIgPSAoaW50ICopIG1hbGxvYyhzaXplb2YoaW50KSpDTURTVEtM KSkpCi0gICAgICBmYXRhbCgiY21kaW5pOiBubyBtZW1vcnkgZm9yIHRha2VyciIpOwotICAgIGlm ICghKG1lcnJvciA9IChpbnQgKikgbWFsbG9jKHNpemVvZihpbnQpKkNNRFNUS0wpKSkKLSAgICAg IGZhdGFsKCJjbWRpbmk6IG5vIG1lbW9yeSBmb3IgbWVycm9yIik7Ci0gICAgaWYgKCEoeHF1aWV0 ID0gKGludCAqKSBtYWxsb2Moc2l6ZW9mKGludCkqQ01EU1RLTCkpKQotICAgICAgZmF0YWwoImNt ZGluaTogbm8gbWVtb3J5IGZvciB4cXVpZXQiKTsKLSAgICBpZiAoISh4dmFyZXYgPSAoaW50ICop IG1hbGxvYyhzaXplb2YoaW50KSpDTURTVEtMKSkpCi0gICAgICBmYXRhbCgiY21kaW5pOiBubyBt ZW1vcnkgZm9yIHh2YXJldiIpOwotICAgIGlmICgha2VybXJjKQotICAgICAgaWYgKCEoa2VybXJj ID0gKGNoYXIgKikgbWFsbG9jKEtFUk1SQ0wrMSkpKQotICAgICAgICBmYXRhbCgiY21kaW5pOiBu byBtZW1vcnkgZm9yIGtlcm1yYyIpOwotI2lmZGVmIENLX0FQQwotLyogQXBwbGljYXRpb24gUHJv Z3JhbSBDb21tYW5kIGJ1ZmZlciAqLwotICAgIGlmICghKGFwY2J1ZiA9IG1hbGxvYyhBUENCVUZM RU4gKyAxKSkpCi0gICAgICAgIGZhdGFsKCJjbWRpbmk6IG5vIG1lbW9yeSBmb3IgYXBjYnVmIik7 Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotLyogbGluZVtdIGFu ZCB0bXBidWZbXSBhcmUgdGhlIHR3byBzdHJpbmcgYnVmZmVycyB1c2VkIGJ5IHRoZSBjb21tYW5k IHBhcnNlciAqLwotCi0gICAgaWYgKCEobGluZSA9IG1hbGxvYyhMSU5CVUZTSVogKyAxKSkpCi0g ICAgICAgIGZhdGFsKCJjbWRpbmk6IG5vIG1lbW9yeSBmb3IgbGluZSIpOwotICAgIGlmICghKHRt cGJ1ZiA9IG1hbGxvYyhMSU5CVUZTSVogKyAxKSkpCi0gICAgICAgIGZhdGFsKCJjbWRpbmk6IG5v IG1lbW9yeSBmb3IgdG1wYnVmIik7Ci0jZW5kaWYgLyogRENNREJVRiAqLwotCi0jaWZuZGVmIE5P U1BMCi0jaWZkZWYgQ0tfTUlOUFVUCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogSW5pdGlhbGl6ZSBNSU5QVVQgcG9pbnRlcnMgKi8KLSAgICAgICAgaW50IGk7Ci0g ICAgICAgIGV4dGVybiBjaGFyICptc1tdOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTUlOUE1B WDsgaSsrKQotICAgICAgICAgIG1zW2ldID0gTlVMTDsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfTUlO UFVUICovCi0KLSAgICBpZiAobWFjaW5pKCkgPCAwKSAgICAgICAgICAgICAgICAgICAvKiBBbGxv Y2F0ZSBtYWNybyBidWZmZXJzICovCi0gICAgICBmYXRhbCgiQ2FuJ3QgYWxsb2NhdGUgbWFjcm8g YnVmZmVycyEiKTsKLQotICAgIGlmY21kWzBdID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8q IENvbW1hbmQtbGV2ZWwgcmVsYXRlZCB2YXJpYWJsZXMuICovCi0gICAgaWZ0ZXN0WzBdID0gMDsg ICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSB2YXJpYWJsZXMgYXQgdG9wIGxldmVs ICovCi0gICAgY291bnRbMF0gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogb2Ygc3RhY2su Li4gKi8KLSAgICBpbnRpbWVbMF0gPSAwOwotICAgIGlucGNhc1swXSA9IDA7Ci0gICAgdGFrZXJy WzBdID0gMDsKLSAgICBtZXJyb3JbMF0gPSAwOwotICAgIHhxdWlldFswXSA9IHF1aWV0OwotICAg IHh2YXJldlswXSA9IHZhcmV2YWw7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT1NQ TAotICAgIGNtZGx2bCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUg dGhlIGNvbW1hbmQgc3RhY2sgKi8KLSAgICB4Y21kc3JjID0gQ01EX0tCOwotICAgIGNtZHN0a1tj bWRsdmxdLnNyYyA9IENNRF9LQjsgICAgICAgIC8qIFNvdXJjZSBpcyBjb25zb2xlICovCi0gICAg Y21kc3RrW2NtZGx2bF0ubHZsID0gMDsgICAgICAgICAgICAgLyogTGV2ZWwgaXMgMCAqLwotICAg IGNtZHN0a1tjbWRsdmxdLmNjZmxncyA9IDA7ICAgICAgICAgIC8qIE5vIGZsYWdzICovCi0jZW5k aWYgLyogTk9TUEwgKi8KLQotICAgIHRsZXZlbCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAg IC8qIFRha2UgZmlsZSBsZXZlbCA9IGtleWJvYXJkICovCi0gICAgZm9yIChpID0gMDsgaSA8IE1B WFRBS0U7IGkrKykgICAgICAgLyogSW5pdGlhbGl6ZSBjb21tYW5kIGZpbGUgbmFtZXMgKi8KLSAg ICAgIHRmbmFtW2ldID0gTlVMTDsKLQotICAgIGNtc2V0cChja3Byb21wdCk7ICAgICAgICAgICAg ICAgICAgIC8qIFNldCB1cCBDLUtlcm1pdCdzIHByb21wdCAqLwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIENhbid0IHNldCBJS1NEIHByb21wdCBoZXJlIHNpbmNl ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd2UgZG8gbm90 IHlldCBrbm93IGlmIHdlIGFyZSBJS1NEICovCi0jaWZuZGVmIE5PU1BMCi0KLSAgICBpbml0bWFj KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIG1hY3JvIHRhYmxlICov Ci0KLS8qIFByZWRlZmluZSBidWlsdC1pbiBvbmUtbGluZSBtYWNyb3MgKi8KLQotICAgIGFkZG1h YygiaWJtLWxpbmVtb2RlIixtX2libSk7ICAgICAgIC8qIElCTS1MSU5FTU9ERSAqLwotICAgIGFk ZG1hYygiZmF0YWwiLG1fZmF0KTsgICAgICAgICAgICAgIC8qIEZBVEFMIG1hY3JvICovCi0gICAg eSA9IGFkZG1hYygiZmFzdCIsbV9mYXN0KTsgICAgICAgICAgLyogRkFTVCBtYWNybyAqLwotICAg IGFkZG1hYygiY2F1dGlvdXMiLG1fY2F1dGlvdXMpOyAgICAgIC8qIENBVVRJT1VTIG1hY3JvICov Ci0gICAgYWRkbWFjKCJyb2J1c3QiLG1fcm9idXN0KTsgICAgICAgICAgLyogUk9CVVNUIG1hY3Jv ICovCi0jaWZkZWYgT1MyCi0gICAgYWRkbWFjKCJtYW51YWwiLG1fbWFudWFsKTsgICAgICAgICAg LyogTUFOVUFMIG1hY3JvICovCi0jZW5kaWYgLyogT1MyICovCi0jaWZkZWYgVk1TCi0gICAgYWRk bWFjKCJwdXJnZSIsbV9wdXJnZSk7ICAgICAgICAgICAgLyogUFVSR0UgbWFjcm8gKi8KLSNlbmRp ZiAvKiBWTVMgKi8KLQotLyoKLSAgUHJlZGVmaW5lIGJ1aWx0LWluIG11bHRpbGluZSBtYWNyb3M7 IHRoZXNlIGFyZSB0b3AtbGV2ZWwgY29tbWFuZHMKLSAgdGhhdCBhcmUgaW1wbGVtZW50ZWQgaW50 ZXJuYWxseSBhcyBtYWNyb3MuICBOT1RFOiBXaGVuIGFkZGluZyBhIG5ldwotICBvbmUgb2YgdGhl c2UsIHJlbWVtYmVyIHRvIHVwZGF0ZSB0aGUgRU5EIGFuZCBSRVRVUk4gY29tbWFuZHMgdG8KLSAg YWNjb3VudCBmb3IgaXQsIG9yIGVsc2UgRU5EIGFuZCBSRVRVUk4gZnJvbSB3aXRoaW4gaXQgd29u J3Qgd29yayByaWdodC4KLSovCi0gICAgeCA9IGFkZG1tYWMoIl9mb3J4Iixmb3JfZGVmKTsgICAg ICAgLyogRk9SIG1hY3JvICovCi0gICAgaWYgKHggPiAtMSkgbWFjdGFiW3hdLmZsZ3MgPSBDTV9J TlY7Ci0gICAgeCA9IGFkZG1tYWMoIl9mb3J6Iixmb3pfZGVmKTsgICAgICAgLyogT3RoZXIgRk9S IG1hY3JvICovCi0gICAgaWYgKHggPiAtMSkgbWFjdGFiW3hdLmZsZ3MgPSBDTV9JTlY7Ci0gICAg eCA9IGFkZG1tYWMoIl94aWYiLHhpZl9kZWYpOyAgICAgICAgLyogWElGIG1hY3JvICovCi0gICAg aWYgKHggPiAtMSkgbWFjdGFiW3hdLmZsZ3MgPSBDTV9JTlY7Ci0gICAgeCA9IGFkZG1tYWMoIl93 aGlsZSIsd2hpbF9kZWYpOyAgICAgLyogV0hJTEUgbWFjcm8gKi8KLSAgICBpZiAoeCA+IC0xKSBt YWN0YWJbeF0uZmxncyA9IENNX0lOVjsKLSAgICB4ID0gYWRkbW1hYygiX3N3aXR4Iixzd19kZWYp OyAgICAgICAvKiBTV0lUQ0ggbWFjcm8gKi8KLSAgICBpZiAoeCA+IC0xKSBtYWN0YWJbeF0uZmxn cyA9IENNX0lOVjsKLQotLyogRmlsbCBpbiBjb21tYW5kLWxpbmUgYXJndW1lbnQgdmVjdG9yICov Ci0KLSAgICBzcHJpbnRmKHZuYW1idWYsIlxcJkBbJWRdIix4YXJncyk7ICAvKiBTQUZFICovCi0g ICAgaWYgKGluc2VydmVyKSB7ICAgICAgICAgICAgICAgICAgICAgLyogQnV0IGhpZGRlbiBpbiBJ S1NEICovCi0gICAgICAgIHkgPSAtMTsKLSAgICAgICAgeGFyZ3MgPSAwOwotICAgIH0gZWxzZQot ICAgICAgeSA9IGFycmF5bmFtKHZuYW1idWYsJngsJnopOyAgICAgIC8qIGdvZXMgaW4gYXJyYXkg XCZAW10gKi8KLQotICAgIHRtcGJ1ZlswXSA9IE5VTDsKLSAgICBpZiAoeSA+IC0xKSB7Ci0gICAg ICAgIGludCBqID0gLTE7Ci0gICAgICAgIGludCB5eSA9IDA7Ci0gICAgICAgIGRjbGFycmF5KChj aGFyKXgseik7ICAgICAgICAgICAgLyogRGVjbGFyZSB0aGUgYXJyYXkgKi8KLSNpZm5kZWYgTk9U QUtFQVJHUwotICAgICAgICAvKiBNYWNybyBhcmd1bWVudCB2ZWN0b3IgKi8KLSAgICAgICAgc3By aW50Zih2bmFtYnVmLCJcXCZfWyVkXSIseik7ICAvKiBTQUZFICovCi0gICAgICAgIHl5ID0gYXJy YXluYW0odm5hbWJ1ZiwmeCwmeik7ICAgLyogZ29lcyBpbiBhcnJheSBcJl9bXSAqLwotICAgICAg ICBpZiAoeXkgPiAtMSkgICAgICAgICAgICAgICAgICAgIC8qIE5hbWUgaXMgT0sgKi8KLSAgICAg ICAgICBkY2xhcnJheSgoY2hhcil4LHopOyAgICAgICAgICAvKiBEZWNsYXJlIHRoZSBhcnJheSAq LwotI2VuZGlmIC8qIE5PVEFLRUFSR1MgKi8KLSAgICAgICAgc2tpcCA9IDA7Ci0gICAgICAgIGZv ciAoaSA9IDA7IGkgPCB4YXJnczsgaSsrKSB7ICAgLyogRmlsbCB0aGUgYXJyYXlzICovCi0gICAg ICAgICAgICBzcHJpbnRmKHZuYW1idWYsIlxcJkBbJWRdIixpKTsgLyogU0FGRSAqLwotICAgICAg ICAgICAgYWRkbWFjKHZuYW1idWYseGFyZ3ZbaV0pOwotICAgICAgICAgICAgaWYgKGNmaWxlZiAm JiBpID09IDApCi0gICAgICAgICAgICAgIGNvbnRpbnVlOwotI2lmZGVmIEtFUkJBTkcKLSAgICAg ICAgICAgIGlmIChza2lwKSB7Ci0gICAgICAgICAgICAgICAgaiA9IDA7Ci0gICAgICAgICAgICAg ICAgc2tpcCA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0j ZW5kaWYgLyogS0VSQkFORyAqLwotICAgICAgICAgICAgaWYgKGogPCAwICYmICAgICAgICAgICAg ICAgIC8qIEFzc2lnbiBpdGVtcyBhZnRlciAiPSIgb3IgIi0tIiovCi0gICAgICAgICAgICAgICAg KCFzdHJjbXAoeGFyZ3ZbaV0sIj0iKSB8fCAhc3RyY21wKHhhcmd2W2ldLCItLSIpKQotICAgICAg ICAgICAgICAgICkgewotICAgICAgICAgICAgICAgIGogPSAwOyAgICAgICAgICAgICAgICAgIC8q IHRvIFwlMS4uXCU5ICovCi0jaWZkZWYgS0VSQkFORwotICAgICAgICAgICAgfSBlbHNlIGlmIChq IDwgMCAmJgotICAgICAgICAgICAgICAgICAgICAgICAoIXN0cmNtcCh4YXJndltpXSwiKyIpIHx8 Ci0gICAgICAgICAgICAgICAgICAgICAgICAhc3RybmNtcCh4YXJndltpXSwiKyAiLDIpIHx8Ci0g ICAgICAgICAgICAgICAgICAgICAgICAhc3RybmNtcCh4YXJndltpXSwiK1x0IiwyKSkKLSAgICAg ICAgICAgICAgICAgICAgICAgICkgewotICAgICAgICAgICAgICAgIHNraXAgPSAxOwotICAgICAg ICAgICAgICAgIGNvbnRpbnVlOwotI2VuZGlmIC8qIEtFUkJBTkcgKi8KLSAgICAgICAgICAgIH0g ZWxzZSBpZiAoaiA+IC0xKSB7Ci0gICAgICAgICAgICAgICAgaisrOwotICAgICAgICAgICAgICAg IGlmIChqIDw9IDkpIHsKLSAgICAgICAgICAgICAgICAgICAgdm5hbWJ1ZlswXSA9ICdcXCc7Ci0g ICAgICAgICAgICAgICAgICAgIHZuYW1idWZbMV0gPSAnJSc7Ci0gICAgICAgICAgICAgICAgICAg IHZuYW1idWZbMl0gPSAoY2hhcikoaisnMCcpOwotICAgICAgICAgICAgICAgICAgICB2bmFtYnVm WzNdID0gTlVMOwotICAgICAgICAgICAgICAgICAgICBhZGRtYWModm5hbWJ1Zix4YXJndltpXSk7 Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh5eSA+IC0xKSB7Ci0gICAg ICAgICAgICAgICAgICAgIGNoYXIgYywgKiBwOwotICAgICAgICAgICAgICAgICAgICBpbnQgZmxh ZyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHAgPSB4YXJndltpXTsKLSAgICAgICAgICAgICAg ICAgICAgbWFrZXN0cigmKHRvcGFyZ1tqXSkscCk7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxl ICgoYyA9ICpwKyspKSB7IGlmIChjID09IFNQKSB7IGZsYWcrKzsgYnJlYWs7IH0gfQotICAgICAg ICAgICAgICAgICAgICBpZiAoZmxhZykKLSAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQo dG1wYnVmLCJcIiIsVE1QQlVGU0laKTsKLSAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRt cGJ1Zix4YXJndltpXSxUTVBCVUZTSVopOwotICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZykK LSAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQodG1wYnVmLCJcIiIsVE1QQlVGU0laKTsK LSAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRtcGJ1ZiwiICIsVE1QQlVGU0laKTsKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNm aWxlZikgewotICAgICAgICAgICAgYWRkbWFjKCJcXCUwIixjbWRmaWwpOwotICAgICAgICAgICAg aWYgKHl5ID4gLTEpCi0gICAgICAgICAgICAgIG1ha2VzdHIoJih0b3BhcmdbMF0pLGNtZGZpbCk7 Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhZGRtYWMoIlxcJTAiLHhhcmd2WzBdKTsK LSAgICAgICAgICAgIGlmICh5eSA+IC0xKQotICAgICAgICAgICAgICBtYWtlc3RyKCYodG9wYXJn WzBdKSx4YXJndlswXSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHl5ID4gLTEpIHsKLSAgICAg ICAgICAgIHRvcGFyZ2MgPSAoaiA8IDApID8gMSA6IGogKyAxOwotICAgICAgICAgICAgdG9weGFy ZyA9IHRvcGFyZzsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICAvKiBUaGlzIG5lZWRzIHdv cmsgKi8KLSAgICAgICAgICAgIGlmICghY2ZpbGVmKQotICAgICAgICAgICAgICBtYWtlc3RyKCZ0 b3BsaW5lLHRtcGJ1Zik7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgdG9wYXJnYyA9IDA7Ci0gICAgICAgICAgICB0b3B4YXJnID0gTlVMTDsKLSAg ICAgICAgfQotICAgICAgICBhX2RpbVswXSA9IHRvcGFyZ2MgLSAxOwotICAgICAgICBhX3B0clsw XSA9IHRvcHhhcmc7Ci0JZGVidWcoRjExMSwiYV9kaW1bMF0iLCJBIixhX2RpbVswXSk7Ci0gICAg fQotICAgICp2bmFtYnVmID0gTlVMOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSAgICBsdWluaXQo KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIGxvb2t1cCgpIGNhY2hl ICovCi0KLS8qIEdldCBvdXIgaG9tZSBkaXJlY3Rvcnkgbm93LiAgVGhpcyBuZWVkZWQgaW4gbG90 cyBvZiBwbGFjZXMuICovCi0KLSAgICBjbWRpbml0ZWQgPSAxOwotfQotCi0jaWZkZWYgTlQKLV9Q Uk9UT1RZUChjaGFyICogR2V0QXBwRGF0YSwoaW50KSk7Ci0jZW5kaWYgLyogTlQgKi8KLQotVk9J RAotZG9pbml0KCkgewotI2lmZGVmIENLUk9PVAotZXh0ZXJuIGludCBja3Jvb3RlcnI7Ci0jZW5k aWYgLyogQ0tST09UICovCi0gICAgaW50IHggPSAwLCBvayA9IDA7Ci0jaWZkZWYgT1MyCi0gICAg Y2hhciAqIHB0ciA9IDA7Ci0jZW5kaWYgLyogT1MyICovCi0KLSAgICBpZiAoIWNtZGluaXRlZCkK LSAgICAgIGNtZGluaSgpOwotCi0jaWZkZWYgTUFDCi0gICAgcmV0dXJuOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogTWFjIEtlcm1pdCBoYXMgbm8gaW5pdCBmaWxlICovCi0KLSNlbHNl IC8qICFNQUMgKi8KLQotLyogSWYgc2tpcHBpbmcgaW5pdCBmaWxlICgnLVknIG9uIEtlcm1pdCBj b21tYW5kIGxpbmUpLCByZXR1cm4gbm93LiAqLwotCi0gICAgaWYgKG5vaW5pdCkgewotICAgICAg ICBrZXJtcmNbMF0gPSAnXDAnOwotICAgICAgICBpbmlkaXJbMF0gPSAnXDAnOwotLyoKLSAgQnV0 IHJldHVybmluZyBmcm9tIGhlcmUgcmVzdWx0cyBpbiBpbmlkaXJbXSBuZXZlciBiZWluZyBzZXQg dG8gYW55dGhpbmcuCi0gIEluc3RlYWQgaXQgc2hvdWxkIGJlIHNldCB0byB3aGVyZXZlciB0aGUg aW5pdCBmaWxlICp3b3VsZCogaGF2ZSBiZWVuCi0gIGV4ZWN1dGVkIGZyb20uICBTbyB0aGlzIGJp dCBvZiBjb2RlIHNob3VsZCBiZSByZW1vdmVkLCBhbmQgdGhlbiB3ZSBzaG91bGQKLSAgc3ByaW5r bGUgImlmIChub2luaXQpIiB0ZXN0cyB0aHJvdWdob3V0IHRoZSBmb2xsb3dpbmcgY29kZSB1bnRp bCB3ZSBoYXZlCi0gIHNldCBpbmlkaXJbXSwgYW5kIHRoZW4gcmV0dXJuIHdpdGhvdXQgYWN0dWFs bHkgdGFraW5nIHRoZSBpbml0IGZpbGUuCi0qLwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0j aWZkZWYgT1MyCi0vKgotICBUaGUgLXkgaW5pdCBmaWxlIG11c3QgYmUgZnVsbHkgc3BlY2lmaWVk IG9yIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KLSAgS0VSTVJDIGlzIGxvb2tlZCBmb3Igdmlh IElOSVQsIERQQVRIIGFuZCBQQVRIIGluIHRoYXQgb3JkZXIuICBGaW5hbGx5LCBvdXIKLSAgb3du IGV4ZWN1dGFibGUgZmlsZSBwYXRoIGlzIHRha2VuIGFuZCB0aGUgLkVYRSBzdWZmaXggaXMgcmVw bGFjZWQgYnkgLklOSQotICBhbmQgdGhpcyBpcyB0cmllZCBhcyB0aGUgaW5pdGlhbGl6YXRpb24g ZmlsZS4KLSovCi0jaWZkZWYgQ0tfTE9HSU4KLSAgICBkZWJ1ZyhGMTAxLCJkb2luaXQgaW5zZXJ2 ZXIiLCIiLGluc2VydmVyKTsKLSAgICBkZWJ1ZyhGMTAxLCJkb2luaXQgaXNndWVzdCIsIiIsaXNn dWVzdCk7Ci0gICAgZGVidWcoRjExMCwiZG9pbml0IGFub25maWxlIixhbm9uZmlsZSwwKTsKLQot ICAgIGlmIChpc2d1ZXN0ICYmIGFub25maWxlKSB7Ci0gICAgICBja3N0cm5jcHkobGluZSwgYW5v bmZpbGUsIExJTkJVRlNJWisxKTsKLSAgICB9IGVsc2UKLSNlbmRpZiAvKiBDS19MT0dJTiAqLwot ICAgICAgaWYgKHJjZmxhZykgewotICAgICAgICAgIGNrc3RybmNweShsaW5lLGtlcm1yYyxMSU5C VUZTSVorMSk7Ci0jaWZkZWYgQ0tfTE9HSU4KLSAgICAgIH0gZWxzZSBpZiAoaW5zZXJ2ZXIpIHsK LSAgICAgICAgICBjaGFyICogYXBwZGF0YSA9IE5VTEw7Ci0jaWZkZWYgTlQKLSAgICAgICAgICBh cHBkYXRhID0gR2V0QXBwRGF0YSgxKTsKLSAgICAgICAgICBpZiAoIGFwcGRhdGEgKSB7Ci0gICAg ICAgICAgICAgIGNrbWFrbXNnKGxpbmUsTElOQlVGU0laKzEsYXBwZGF0YSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICJLZXJtaXQgOTUvazk1LmluaSIsTlVMTCxOVUxMKTsKLSAgICAgICAgICAg ICAgaWYgKCB6Y2hraShsaW5lKSA8IDAgKQotICAgICAgICAgICAgICAgICAgbGluZVswXSA9ICdc MCc7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChsaW5lWzBdID09IDApIHsKLSAgICAgICAg ICAgICAgYXBwZGF0YSA9IEdldEFwcERhdGEoMCk7Ci0gICAgICAgICAgICAgIGlmICggYXBwZGF0 YSApIHsKLSAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGxpbmUsTElOQlVGU0laKzEsYXBwZGF0 YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2VybWl0IDk1L2s5NS5pbmkiLE5VTEws TlVMTCk7Ci0gICAgICAgICAgICAgICAgICBpZiAoIHpjaGtpKGxpbmUpIDwgMCApCi0gICAgICAg ICAgICAgICAgICAgICAgbGluZVswXSA9ICdcMCc7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAg ICB9Ci0jZW5kaWYgLyogTlQgKi8KLSAgICAgICAgICBpZiAobGluZVswXSA9PSAwKSB7Ci0gICAg ICAgICAgICAgIGFwcGRhdGEgPSB6aG9tZSgpOwotICAgICAgICAgICAgICBpZiAoIGFwcGRhdGEg KSB7Ci0gICAgICAgICAgICAgICAgICBja21ha21zZyhsaW5lLExJTkJVRlNJWisxLGFwcGRhdGEs Ci0jaWZkZWYgTlQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIms5NS5pbmkiLAotI2Vsc2Ug LyogTlQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgImsyLmluaSIsCi0jZW5kaWYgLyog TlQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCk7Ci0gICAgICAgICAg ICAgICAgICBpZiAoIHpjaGtpKGxpbmUpIDwgMCApCi0gICAgICAgICAgICAgICAgICAgICAgbGlu ZVswXSA9ICdcMCc7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgZGVi dWcoRjExMCwiZG9pbml0IGluc2VydmVyIGluaWZpbGUiLGxpbmUsMCk7Ci0jZW5kaWYgLyogQ0tf TE9HSU4gKi8KLSAgICB9IGVsc2UgewotICAgICAgICBjaGFyICogZW52ID0gMDsKLSNpZmRlZiBO VAotICAgICAgICBlbnYgPSBnZXRlbnYoIks5NS5LU0MiKTsKLSNlbHNlCi0gICAgICAgIGVudiA9 IGdldGVudigiSzIuS1NDIik7Ci0jZW5kaWYgLyogTlQgKi8KLSAgICAgICAgaWYgKCFlbnYpIHsK LSNpZmRlZiBOVAotICAgICAgICAgICAgZW52ID0gZ2V0ZW52KCJLOTUuSU5JIik7Ci0jZWxzZQot ICAgICAgICAgICAgZW52ID0gZ2V0ZW52KCJLMi5JTkkiKTsKLSNlbmRpZiAvKiBOVCAqLwotICAg ICAgICB9Ci0gICAgICAgIGlmICghZW52KQotICAgICAgICAgIGVudiA9IGdldGVudigiQ0tFUk1J VC5JTkkiKTsKLSAgICAgICAgaWYgKCFlbnYpCi0gICAgICAgICAgZW52ID0gZ2V0ZW52KCJDS0VS TUlUX0lOSSIpOwotICAgICAgICBsaW5lWzBdID0gJ1wwJzsKLQotICAgICAgICBkZWJ1ZyhGMTEw LCJkb2luaXQgZW52IixlbnYsMCk7Ci0gICAgICAgIGlmIChlbnYpCi0gICAgICAgICAgY2tzdHJu Y3B5KGxpbmUsZW52LExJTkJVRlNJWisxKTsKLQotI2lmZGVmIE5UCi0gICAgICAgIGlmIChsaW5l WzBdID09IDApIHsKLSAgICAgICAgICAgIGVudiA9IEdldEFwcERhdGEoMSk7Ci0gICAgICAgICAg ICBpZiAoIGVudiApIHsKLSAgICAgICAgICAgICAgICBja21ha21zZyhsaW5lLExJTkJVRlNJWisx LGVudiwiS2VybWl0IDk1L2s5NS5pbmkiLE5VTEwsTlVMTCk7Ci0gICAgICAgICAgICAgICAgaWYg KCB6Y2hraShsaW5lKSA8IDAgKQotICAgICAgICAgICAgICAgICAgICBsaW5lWzBdID0gJ1wwJzsK LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAobGluZVswXSA9PSAwKSB7Ci0g ICAgICAgICAgICBlbnYgPSBHZXRBcHBEYXRhKDApOwotICAgICAgICAgICAgaWYgKCBlbnYgKSB7 Ci0gICAgICAgICAgICAgICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVorMSxlbnYsIktlcm1pdCA5 NS9rOTUuaW5pIixOVUxMLE5VTEwpOwotICAgICAgICAgICAgICAgIGlmICggemNoa2kobGluZSkg PCAwICkKLSAgICAgICAgICAgICAgICAgICAgbGluZVswXSA9ICdcMCc7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOVCAqLwotCi0gICAgICAgIGlmIChsaW5lWzBdID09IDAp IHsKLSAgICAgICAgICAgIGVudiA9IHpob21lKCk7Ci0gICAgICAgICAgICBpZiAoIGVudiApIHsK LSAgICAgICAgICAgICAgICBja21ha21zZyhsaW5lLExJTkJVRlNJWisxLGVudiwKLSNpZmRlZiBO VAotICAgICAgICAgICAgICAgICAgICAgICAgICAiazk1LmluaSIsCi0jZWxzZSAvKiBOVCAqLwot ICAgICAgICAgICAgICAgICAgICAgICAgICAiazIuaW5pIiwKLSNlbmRpZiAvKiBOVCAqLwotICAg ICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwpOwotICAgICAgICAgICAgICAgIGlmICgg emNoa2kobGluZSkgPCAwICkKLSAgICAgICAgICAgICAgICAgICAgbGluZVswXSA9ICdcMCc7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobGluZVswXSA9PSAwKQotICAg ICAgICAgIF9zZWFyY2hlbnYoa2VybXJjLCJJTklUIixsaW5lKTsKLSAgICAgICAgaWYgKGxpbmVb MF0gPT0gMCkKLSAgICAgICAgICBfc2VhcmNoZW52KGtlcm1yYywiRFBBVEgiLGxpbmUpOwotICAg ICAgICBpZiAobGluZVswXSA9PSAwKQotICAgICAgICAgIF9zZWFyY2hlbnYoa2VybXJjLCJQQVRI IixsaW5lKTsKLSAgICAgICAgaWYgKGxpbmVbMF0gPT0gMCkgewotICAgICAgICAgICAgY2hhciAq cGdtcHRyID0gR2V0TG9hZFBhdGgoKTsKLSAgICAgICAgICAgIGlmIChwZ21wdHIgJiYgc3RybGVu KHBnbXB0cikgPCBMSU5CVUZTSVotOCkgewotICAgICAgICAgICAgICAgIGxwID0gc3RycmNocihw Z21wdHIsICdcXCcpOwotICAgICAgICAgICAgICAgIGlmIChscCkgewotICAgICAgICAgICAgICAg ICAgICBzdHJuY3B5KGxpbmUsIHBnbXB0ciwgbHAgLSBwZ21wdHIpOwotI2lmZGVmIE5UCi0gICAg ICAgICAgICAgICAgICAgIHN0cmNweShsaW5lICsgKGxwIC0gcGdtcHRyKSwgIi9rOTUuaW5pIik7 Ci0jZWxzZSAvKiBOVCAqLwotICAgICAgICAgICAgICAgICAgICBzdHJjcHkobGluZSArIChscCAt IHBnbXB0ciksICIvazIuaW5pIik7Ci0jZW5kaWYgLyogTlQgKi8KLSAgICAgICAgICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBscCA9IHN0cnJjaHIocGdtcHRyLCAnLicpOwot ICAgICAgICAgICAgICAgICAgICBpZiAobHApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0 cm5jcHkobGluZSwgcGdtcHRyLCBscCAtIHBnbXB0cik7Ci0gICAgICAgICAgICAgICAgICAgICAg ICBzdHJjcHkobGluZSArIChscCAtIHBnbXB0ciksICIuaW5pIik7Ci0gICAgICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9 Ci0KLSNpZmRlZiBDS1JPT1QKLSAgICBpZiAoIXppbnJvb3QobGluZSkpIHsKLSAgICAgICAgZGVi dWcoRjExMCwiZG9pbml0IHNldHJvb3QgdmlvbGF0aW9uIixsaW5lLDApOwotICAgICAgICByZXR1 cm47Ci0gICAgfQotI2VuZGlmIC8qIENLUk9PVCAqLwotCi0gICAgZGVidWcoRjExMCwiZG9pbml0 IGZvcGVuKCkiLGxpbmUsMCk7Ci0gICAgaWYgKCh0ZmlsZVswXSA9IGZvcGVuKGxpbmUsInIiKSkg IT0gTlVMTCkgewotICAgICAgICBvayA9IDE7Ci0gICAgICAgIHRsZXZlbCA9IDA7Ci0gICAgICAg IHRmbGluZVt0bGV2ZWxdID0gMDsKLSAgICAgICAgaWYgKHRmbmFtW3RsZXZlbF0gPSBtYWxsb2Mo c3RybGVuKGxpbmUpKzEpKQotICAgICAgICAgIHN0cmNweSh0Zm5hbVt0bGV2ZWxdLGxpbmUpOyAg IC8qIHNhZmUgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgY21kbHZsKys7Ci0gICAgICAgIHhj bWRzcmMgPSBDTURfVEY7Ci0gICAgICAgIGNtZHN0a1tjbWRsdmxdLnNyYyA9IENNRF9URjsKLSAg ICAgICAgY21kc3RrW2NtZGx2bF0ubHZsID0gdGxldmVsOwotICAgICAgICBjbWRzdGtbY21kbHZs XS5jY2ZsZ3MgPSAwOwotICAgICAgICBpZmNtZFtjbWRsdmxdID0gMDsKLSAgICAgICAgaWZ0ZXN0 W2NtZGx2bF0gPSAwOwotICAgICAgICBjb3VudFtjbWRsdmxdID0gIGNvdW50W2NtZGx2bC0xXTsg LyogSW5oZXJpdCBmcm9tIHByZXZpb3VzIGxldmVsICovCi0gICAgICAgIGludGltZVtjbWRsdmxd ID0gaW50aW1lW2NtZGx2bC0xXTsKLSAgICAgICAgaW5wY2FzW2NtZGx2bF0gPSBpbnBjYXNbY21k bHZsLTFdOwotICAgICAgICB0YWtlcnJbY21kbHZsXSA9IHRha2VycltjbWRsdmwtMV07Ci0gICAg ICAgIG1lcnJvcltjbWRsdmxdID0gbWVycm9yW2NtZGx2bC0xXTsKLSAgICAgICAgeHF1aWV0W2Nt ZGx2bF0gPSBxdWlldDsKLSAgICAgICAgeHZhcmV2W2NtZGx2bF0gPSB2YXJldmFsOwotI2VuZGlm IC8qIE5PU1BMICovCi0gICAgICAgIGRlYnVnKEYxMTAsImRvaW5pdCBpbml0IGZpbGUiLGxpbmUs MCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZGVidWcoRjEwMCwiZG9pbml0IG5vIGluaXQgZmls ZSIsIiIsMCk7Ci0gICAgfQotICAgIGNrc3RybmNweShrZXJtcmMsbGluZSxLRVJNUkNMKTsKLSAg ICBmb3IgKHB0ciA9IGtlcm1yYzsgKnB0cjsgcHRyKyspICAgICAvKiBDb252ZXJ0IGJhY2tzbGFz aGVzIHRvIHNsYXNoZXMgKi8KLSAgICAgICBpZiAoKnB0ciA9PSAnXFwnKQotICAgICAgICAgKnB0 ciA9ICcvJzsKLSNlbHNlIC8qIG5vdCBPUzIgKi8KLSAgICBscCA9IGxpbmU7Ci0gICAgbHBbMF0g PSAnXDAnOwotICAgIGRlYnVnKEYxMDEsImRvaW5pdCByY2ZsYWciLCIiLHJjZmxhZyk7Ci0jaWZk ZWYgR0VNRE9TCi0gICAgemtlcm1pbmkobGluZSwgcmNmbGFnLCBrZXJtcmMpOwotI2Vsc2UKLSNp ZmRlZiBWTVMKLSAgICB7Ci0JaW50IHg7Ci0JeCA9IHprZXJtaW5pKGxpbmUsTElOQlVGU0laLGtl cm1yYyk7Ci0JZGVidWcoRjExMSwiQ1VTVE9NIHprZXJtaW5pIixsaW5lLHgpOwotCWlmICh4ID09 IDApCi0JICBsaW5lWzBdID0gTlVMOwotICAgIH0KLSNlbHNlIC8qIG5vdCBWTVMgKi8KLSNpZmRl ZiBDS19MT0dJTgotICAgIGRlYnVnKEYxMDEsImRvaW5pdCBpc2d1ZXN0IiwiIixpc2d1ZXN0KTsK LSAgICBpZiAoaXNndWVzdCkKLSAgICAgIGNrc3RybmNweShscCwgYW5vbmZpbGUgPyBhbm9uZmls ZSA6IGtlcm1yYywgTElOQlVGU0laKTsKLSAgICBlbHNlCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8K LSAgICAgIGlmIChyY2ZsYWcpIHsgICAgICAgICAgICAgICAgICAgICAvKiBJZiBpbml0IGZpbGUg bmFtZSBmcm9tIGNtZCBsaW5lICovCi0gICAgICAgICAgY2tzdHJuY3B5KGxwLGtlcm1yYyxMSU5C VUZTSVopOyAvKiB1c2UgaXQsICovCi0gICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogb3RoZXJ3aXNlLi4uICovCi0jaWZkZWYgQ0tfSU5JX0EgICAgICAgICAgICAgICAg ICAgICAgICAgLyogSWYgd2UndmUgYSBzeXN0ZW0td2lkZSBpbml0IGZpbGUgKi8KLSAgICAgICAg ICAvKiBBbmQgaXQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSB1c2VyJ3MuLi4gKi8KLSAgICAg ICAgICBja3N0cm5jcHkobHAsQ0tfU1lTSU5JLEtFUk1SQ0wpOyAvKiBVc2UgaXQgKi8KLSAgICAg ICAgICBpZiAoemNoa2kobHApIDwgMCkgeyAgICAgICAgICAvKiAoaWYgaXQgZXhpc3RzLi4uKSAq LwotI2VuZGlmIC8qIENLX0lOSV9BICovCi0gICAgICAgICAgICAgIGNoYXIgKiBob21kaXI7Ci0g ICAgICAgICAgICAgIGNoYXIgKiBlbnYgPSAwOwotICAgICAgICAgICAgICBsaW5lWzBdID0gTlVM OwotCi0gICAgICAgICAgICAgIC8qIEFkZCBzdXBwb3J0IGZvciBlbnZpcm9ubWVudCB2YXJpYWJs ZSAqLwotICAgICAgICAgICAgICBlbnYgPSBnZXRlbnYoIkNLRVJNSVQuSU5JIik7Ci0gICAgICAg ICAgICAgIGlmICghZW52KQotICAgICAgICAgICAgICAgIGVudiA9IGdldGVudigiQ0tFUk1JVF9J TkkiKTsKLSAgICAgICAgICAgICAgaWYgKGVudikKLSAgICAgICAgICAgICAgICBja3N0cm5jcHko bHAsZW52LEtFUk1SQ0wpOwotCi0gICAgICAgICAgICAgIGlmIChscFswXSA9PSAwKSB7Ci0gICAg ICAgICAgICAgICAgICBob21kaXIgPSB6aG9tZSgpOwotICAgICAgICAgICAgICAgICAgaWYgKGhv bWRpcikgeyAgICAgICAgIC8qIEhvbWUgZGlyZWN0b3J5IGZvciBpbml0IGZpbGUuICovCi0gICAg ICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KGxwLGhvbWRpcixLRVJNUkNMKTsKLSNpZmRlZiBT VFJBVFVTCi0gICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KGxwLCI+IixLRVJNUkNMKTsv KiBWT1MgZGlyc2VwICovCi0jZWxzZQotICAgICAgICAgICAgICAgICAgICAgIGlmIChscFswXSA9 PSAnLycpIGNrc3RybmNhdChscCwiLyIsS0VSTVJDTCk7Ci0jZW5kaWYgLyogU1RSQVRVUyAqLwot ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KGxwLGtlcm1y YyxLRVJNUkNMKTsvKiBBcHBlbmQgZGVmYXVsdCBmaWxlIG5hbWUgKi8KLSAgICAgICAgICAgICAg fQotI2lmZGVmIENLX0lOSV9BCi0gICAgICAgICAgfQotI2VuZGlmIC8qIENLX0lOSV9BICovCi0j aWZkZWYgQ0tfSU5JX0IgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3lzdGVtLXdpZGUgaW5p dCBkZWZpbmVkPyAqLwotICAgICAgICAgIC8qIEJ1dCB1c2VyJ3MgaW5pIGZpbGUgdGFrZXMgcHJl Y2VkZW5jZSAqLwotICAgICAgICAgIGlmICh6Y2hraShscCkgPCAwKSAgICAgICAgICAgIC8qIElm IHVzZXIgZG9lc24ndCBoYXZlIGhlciBvd24sICovCi0gICAgICAgICAgICBja3N0cm5jcHkobHAs Q0tfU1lTSU5JLEtFUk1SQ0wpOyAvKiB1c2Ugc3lzdGVtLXdpZGUgb25lLiAqLwotI2VuZGlmIC8q IENLX0lOSV9CICovCi0gICAgICB9Ci0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogR0VNRE9T ICovCi0KLSNpZmRlZiBBTUlHQQotICAgIHJlcW9mZigpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIERpc2FibGUgcmVxdWVzdG9ycyAqLwotI2VuZGlmIC8qIEFNSUdBICovCi0KLSNpZmRl ZiBVU0VfQ1VTVE9NCi0gICAgLyogSWYgbm8gaW5pdCBmaWxlIHdhcyBmb3VuZCwgZXhlY3V0ZSB0 aGUgY3VzdG9taXphdGlvbiBmaWxlICovCi0gICAgZGVidWcoRjExMSwiQ1VTVE9NIDEiLGxpbmUs cmNmbGFnKTsKLSAgICBpZiAoKCFsaW5lWzBdIHx8IHpjaGtpKGxpbmUpIDwgMCkgJiYgIXJjZmxh ZykgewotCWludCB4OwotI2lmZGVmIE9TMgotCXggPSBja21ha2VzdHIobGluZSxMSU5CVUZTSVos R2V0QXBwRGF0YSgxKSwiLyIsIks5NUNVU1RPTS5JTkkiLE5VTEwpOwotCWRlYnVnKEYxMTEsIkNV U1RPTSAyIixsaW5lLHgpOwotCWlmICh6Y2hraShsaW5lKSA8IDApIHsKLQkgICAgeCA9IGNrbWFr ZXN0cihsaW5lLExJTkJVRlNJWixHZXRBcHBEYXRhKDApLCIvIiwiSzk1VVNFUi5JTkkiLE5VTEwp OwotCSAgICBkZWJ1ZyhGMTExLCJDVVNUT00gMyIsbGluZSx4KTsKLQl9Ci0jZWxzZSAgLyogT1My ICovCi0JeCA9IGNrc3RybmNweShsaW5lLHpob21lKCksTElOQlVGU0laKTsKLSNpZm5kZWYgVk1T Ci0JLyogVk1TIHpob21lKCkgcmV0dXJucyAiU1lTJExPR0lOOiIgKi8KLQlpZiAobGluZVt4LTFd ICE9IERJUlNFUCkgewotCSAgICBsaW5lW3grK10gPSBESVJTRVA7Ci0JICAgIGxpbmVbeF0gPSBO VUw7Ci0JfQotI2VuZGlmIC8qIFZNUyAqLwotCXggPSBja3N0cm5jYXQobGluZSxNWUNVU1RPTSxM SU5CVUZTSVopOwotCWRlYnVnKEYxMTEsIkNVU1RPTSA0IixsaW5lLHgpOwotI2VuZGlmIC8qIE9T MiAqLwotICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJDVVNUT00gNSIsbGluZSwwKTsKLSNlbmRpZiAv KiBVU0VfQ1VTVE9NICovCi0KLSNpZmRlZiBDS1JPT1QKLSAgICBpZiAoIXppbnJvb3QobGluZSkp IHsKLSAgICAgICAgZGVidWcoRjExMCwiZG9pbml0IHNldHJvb3QgdmlvbGF0aW9uIixsaW5lLDAp OwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmIC8qIENLUk9PVCAqLwotCi0gICAgZGVi dWcoRjExMCwiZG9pbml0IGluaSBmaWxlIGlzIixsaW5lLDApOwotICAgIGlmICgodGZpbGVbMF0g PSBmb3BlbihsaW5lLCJyIikpICE9IE5VTEwpIHsgLyogVHJ5IHRvIG9wZW4gaW5pdCBmaWxlLiAq LwotICAgICAgICBvayA9IDE7Ci0gICAgICAgIHRsZXZlbCA9IDA7Ci0gICAgICAgIHRmbGluZVt0 bGV2ZWxdID0gMDsKLSAgICAgICAgaWYgKCh0Zm5hbVt0bGV2ZWxdID0gbWFsbG9jKHN0cmxlbihs aW5lKSsxKSkpCi0gICAgICAgICAgc3RyY3B5KHRmbmFtW3RsZXZlbF0sbGluZSk7ICAgLyogc2Fm ZSAqLwotCi0gICAgICAgIGNrc3RybmNweShrZXJtcmMsbGluZSxLRVJNUkNMKTsKLQotI2lmbmRl ZiBOT1NQTAotICAgICAgICBjbWRsdmwrKzsKLSAgICAgICAgaWZjbWRbY21kbHZsXSA9IDA7Ci0g ICAgICAgIGlmdGVzdFtjbWRsdmxdID0gMDsKLSAgICAgICAgY291bnRbY21kbHZsXSA9ICBjb3Vu dFtjbWRsdmwtMV07IC8qIEluaGVyaXQgZnJvbSBwcmV2aW91cyBsZXZlbCAqLwotICAgICAgICBp bnRpbWVbY21kbHZsXSA9IGludGltZVtjbWRsdmwtMV07Ci0gICAgICAgIGlucGNhc1tjbWRsdmxd ID0gaW5wY2FzW2NtZGx2bC0xXTsKLSAgICAgICAgdGFrZXJyW2NtZGx2bF0gPSB0YWtlcnJbY21k bHZsLTFdOwotICAgICAgICBtZXJyb3JbY21kbHZsXSA9IG1lcnJvcltjbWRsdmwtMV07Ci0gICAg ICAgIHhxdWlldFtjbWRsdmxdID0gcXVpZXQ7Ci0gICAgICAgIHh2YXJldltjbWRsdmxdID0gdmFy ZXZhbDsKLSAgICAgICAgZGVidWcoRjEwMSwiZG9pbml0IG9wZW4gb2siLCIiLGNtZGx2bCk7Ci0g ICAgICAgIHhjbWRzcmMgPSBDTURfVEY7Ci0gICAgICAgIGNtZHN0a1tjbWRsdmxdLnNyYyA9IENN RF9URjsKLSAgICAgICAgY21kc3RrW2NtZGx2bF0ubHZsID0gdGxldmVsOwotICAgICAgICBjbWRz dGtbY21kbHZsXS5jY2ZsZ3MgPSAwOwotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgfSBlbHNlIGlm IChyY2ZsYWcpIHsKLSAgICAgICAgLyogUHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBvbmx5IGlmIGEg c3BlY2lmaWMgZmlsZSB3YXMgYXNrZWQgZm9yLiAqLwotICAgICAgICBwcmludGYoIj8lcyAtICVz XG4iLCBja19lcnJzdHIoKSwgbGluZSk7Ci0gICAgfQotCi0jaWZkZWYgZGF0YWdlbmVyYWwKLS8q IElmIENLRVJNSVQuSU5JIG5vdCBmb3VuZCBpbiBob21lIGRpcmVjdG9yeSwgbG9vayBpbiBzZWFy Y2hsaXN0ICovCi0gICAgaWYgKC8qIGhvbWRpciAmJiAqLyAodGxldmVsIDwgMCkpIHsKLSAgICAg ICAgY2tzdHJuY3B5KGxwLGtlcm1yYyxMSU5CVUZTSVopOwotICAgICAgICBpZiAoKHRmaWxlWzBd ID0gZm9wZW4obGluZSwiciIpKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBvayA9IDE7Ci0gICAg ICAgICAgICB0bGV2ZWwgPSAwOwotICAgICAgICAgICAgdGZsaW5lW3RsZXZlbF0gPSAwOwotICAg ICAgICAgICAgaWYgKHRmbmFtW3RsZXZlbF0gPSBtYWxsb2Moc3RybGVuKGxpbmUpKzEpKQotICAg ICAgICAgICAgICBzdHJjcHkodGZuYW1bdGxldmVsXSxsaW5lKTsgLyogc2FmZSAqLwotI2lmbmRl ZiBOT1NQTAotICAgICAgICAgICAgY21kbHZsKys7Ci0gICAgICAgICAgICB4Y21kc3JjID0gQ01E X1RGOwotICAgICAgICAgICAgY21kc3RrW2NtZGx2bF0uc3JjID0gQ01EX1RGOwotICAgICAgICAg ICAgY21kc3RrW2NtZGx2bF0ubHZsID0gdGxldmVsOwotICAgICAgICAgICAgY21kc3RrW2NtZGx2 bF0uY2NmbGdzID0gMDsKLSAgICAgICAgICAgIGlmY21kW2NtZGx2bF0gPSAwOwotICAgICAgICAg ICAgaWZ0ZXN0W2NtZGx2bF0gPSAwOwotICAgICAgICAgICAgY291bnRbY21kbHZsXSA9ICBjb3Vu dFtjbWRsdmwtMV07IC8qIEluaGVyaXQgZnJvbSBwcmV2aW91cyBsZXZlbCAqLwotICAgICAgICAg ICAgaW50aW1lW2NtZGx2bF0gPSBpbnRpbWVbY21kbHZsLTFdOwotICAgICAgICAgICAgaW5wY2Fz W2NtZGx2bF0gPSBpbnBjYXNbY21kbHZsLTFdOwotICAgICAgICAgICAgdGFrZXJyW2NtZGx2bF0g PSB0YWtlcnJbY21kbHZsLTFdOwotICAgICAgICAgICAgbWVycm9yW2NtZGx2bF0gPSBtZXJyb3Jb Y21kbHZsLTFdOwotICAgICAgICAgICAgeHF1aWV0W2NtZGx2bF0gPSBxdWlldDsKLQkgICAgeHZh cmV2W2NtZGx2bF0gPSB2YXJldmFsOwotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgICAgIH0KLSAg ICB9Ci0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLQotI2lmZGVmIEFNSUdBICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEFtaWdhLi4uICovCi0gICAgcmVxcG9wKCk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogUmVzdG9yZSByZXF1ZXN0b3JzICovCi0jZW5kaWYgLyogQU1JR0Eg Ki8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBNQUMgKi8KLQotICAgIC8qIEFzc2lnbiB2 YWx1ZSB0byBpbmlkaXIgKi8KLQotICAgIGlmICghb2spIHsKLSAgICAgICAgaW5pZGlyWzBdID0g TlVMOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNrc3RybmNweShpbmlkaXIsIGtlcm1yYywgQ0NI TUFYUEFUSCk7Ci0gICAgICAgIHggPSBzdHJsZW4oaW5pZGlyKTsKLSAgICAgICAgaWYgKHggPiAw KSB7Ci0gICAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICAgIGZvciAoaSA9IHggLSAxOyBpID4g MDsgaS0tICkgewotICAgICAgICAgICAgICAgIGlmIChJU0RJUlNFUChpbmlkaXJbaV0pKSB7Ci0g ICAgICAgICAgICAgICAgICAgIGluaWRpcltpKzFdID0gTlVMOwotICAgICAgICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNp ZmRlZiBOVAotICAgICAgICBHZXRTaG9ydFBhdGhOYW1lKGluaWRpcixpbmlkaXIsQ0NITUFYUEFU SCk7Ci0jZW5kaWYgLyogTlQgKi8KLSAgICB9Ci19Ci0KLVZPSUQKLWRvaWtzZGluaXQoKSB7Ci0j aWZkZWYgQ0tfU1NMCi0gICAgLyogSUtTRCBkb2Vzbid0IHJlcXVlc3QgY2xpZW50IGNlcnRzICov Ci0gICAgc3NsX3ZlcmlmeV9mbGFnID0gU1NMX1ZFUklGWV9OT05FOwotI2VuZGlmIC8qIENLX1NT TCAqLwotCi0gICAgaWYgKCFjbWRpbml0ZWQpCi0gICAgICBjbWRpbmkoKTsKLQotI2lmZGVmIElL U0RDT05GCi0jaWZkZWYgT1MyCi0gICAgbGluZVswXSA9ICdcMCc7Ci0gICAgX3NlYXJjaGVudihp a3NkY29uZiwiSU5JVCIsbGluZSk7Ci0gICAgaWYgKGxpbmVbMF0gPT0gMCkKLSAgICAgIF9zZWFy Y2hlbnYoaWtzZGNvbmYsIkRQQVRIIixsaW5lKTsKLSAgICBpZiAobGluZVswXSA9PSAwKQotICAg ICAgX3NlYXJjaGVudihpa3NkY29uZiwiUEFUSCIsbGluZSk7Ci0gICAgaWYgKGxpbmVbMF0gPT0g MCkgewotICAgICAgICBjaGFyICpwZ21wdHIgPSBHZXRMb2FkUGF0aCgpOwotICAgICAgICBpZiAo cGdtcHRyICYmIHN0cmxlbihwZ21wdHIpIDwgTElOQlVGU0laLTgpIHsKLSAgICAgICAgICAgIGxw ID0gc3RycmNocihwZ21wdHIsICdcXCcpOwotICAgICAgICAgICAgaWYgKGxwKSB7Ci0gICAgICAg ICAgICAgICAgc3RybmNweShsaW5lLCBwZ21wdHIsIGxwIC0gcGdtcHRyKTsKLSAgICAgICAgICAg ICAgICBzdHJjcHkobGluZSArIChscCAtIHBnbXB0ciksICJcXCIpOwotICAgICAgICAgICAgICAg IHN0cmNweShsaW5lICsgKGxwIC0gcGdtcHRyICsgMSksIGlrc2Rjb25mKTsKLSAgICAgICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbHAgPSBzdHJyY2hyKHBnbXB0ciwgJy4nKTsKLSAg ICAgICAgICAgICAgICBpZiAobHApIHsKLSAgICAgICAgICAgICAgICAgICAgc3RybmNweShsaW5l LCBwZ21wdHIsIGxwIC0gcGdtcHRyKTsKLSAgICAgICAgICAgICAgICAgICAgc3RyY3B5KGxpbmUg KyAobHAgLSBwZ21wdHIpLCAiLmtzYyIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg IH0KLSAgICAgICAgfQotICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJkb2lrc2Rpbml0KCkgbGluZSIs bGluZSwwKTsKLSAgICB0ZmlsZVswXSA9IGZvcGVuKGxpbmUsInIiKTsKLSNlbHNlIC8qIE9TMiAq LwotICAgIHRmaWxlWzBdID0gZm9wZW4oaWtzZGNvbmYsInIiKTsKLSNlbmRpZiAvKiBPUzIgKi8K LSAgICBpZiAodGZpbGVbMF0gIT0gTlVMTCkgewotICAgICAgICB0bGV2ZWwgPSAwOwotICAgICAg ICB0ZmxpbmVbdGxldmVsXSA9IDA7Ci0jaWZkZWYgT1MyCi0gICAgICAgIGlmICh0Zm5hbVt0bGV2 ZWxdID0gbWFsbG9jKHN0cmxlbihsaW5lKSsxKSkKLSAgICAgICAgICBzdHJjcHkodGZuYW1bdGxl dmVsXSxsaW5lKTsKLSNlbHNlIC8qIE9TMiAqLwotICAgICAgICBpZiAoKHRmbmFtW3RsZXZlbF0g PSBtYWxsb2Moc3RybGVuKGlrc2Rjb25mKSsxKSkpCi0gICAgICAgICAgc3RyY3B5KHRmbmFtW3Rs ZXZlbF0saWtzZGNvbmYpOwotI2VuZGlmIC8qIE9TMiAqLwotI2lmbmRlZiBOT1NQTAotICAgICAg ICBjbWRsdmwrKzsKLSAgICAgICAgeGNtZHNyYyA9IENNRF9URjsKLSAgICAgICAgY21kc3RrW2Nt ZGx2bF0uc3JjID0gQ01EX1RGOwotICAgICAgICBjbWRzdGtbY21kbHZsXS5sdmwgPSB0bGV2ZWw7 Ci0gICAgICAgIGNtZHN0a1tjbWRsdmxdLmNjZmxncyA9IDA7Ci0gICAgICAgIGlmY21kW2NtZGx2 bF0gID0gMDsKLSAgICAgICAgaWZ0ZXN0W2NtZGx2bF0gPSAwOwotICAgICAgICBjb3VudFtjbWRs dmxdICA9IGNvdW50W2NtZGx2bC0xXTsgLyogSW5oZXJpdCBmcm9tIHByZXZpb3VzIGxldmVsICov Ci0gICAgICAgIGludGltZVtjbWRsdmxdID0gaW50aW1lW2NtZGx2bC0xXTsKLSAgICAgICAgaW5w Y2FzW2NtZGx2bF0gPSBpbnBjYXNbY21kbHZsLTFdOwotICAgICAgICB0YWtlcnJbY21kbHZsXSA9 IHRha2VycltjbWRsdmwtMV07Ci0gICAgICAgIG1lcnJvcltjbWRsdmxdID0gbWVycm9yW2NtZGx2 bC0xXTsKLSAgICAgICAgeHF1aWV0W2NtZGx2bF0gPSBxdWlldDsKLQl4dmFyZXZbY21kbHZsXSA9 IHZhcmV2YWw7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICAgICAgZGVidWcoRjExMCwiZG9pa3Nk aW5pdCBmaWxlIG9rIix0Zm5hbVt0bGV2ZWxdLDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRl YnVnKEYxMTAsImRvaWtzZGluaXQgb3BlbiBmYWlsZWQiLHRmbmFtW3RsZXZlbF0sMCk7Ci0gICAg fQotI2VuZGlmIC8qIElLU0RDT05GICovCi19Ci0KLSNpZm5kZWYgTk9TUEwKLS8qCi0gIEcgRSBU IE4gQyBNCi0KLSAgR2V0IG5leHQgY29tbWFuZCBmcm9tIGN1cnJlbnQgbWFjcm8gZGVmaW5pdGlv bi4gIENvbW1hbmQgaXMgY29waWVkCi0gIGludG8gc3RyaW5nIHBvaW50ZWQgdG8gYnkgYXJndW1l bnQgcywgbWF4IGxlbmd0aCBuLiAgIFJldHVybnM6Ci0gICAwIGlmIGEgc3RyaW5nIHdhcyBjb3Bp ZWQ7Ci0gIC0xIGlmIHRoZXJlIHdhcyBubyBzdHJpbmcgdG8gY29weS4KLSovCi1pbnQKLWdldG5j bShzLG4pIGNoYXIgKnM7IGludCBuOyB7Ci0gICAgaW50IHkgPSAwOwkJCQkvKiBDaGFyYWN0ZXIg Y291bnRlciAqLwotICAgIGludCBxdW90ZSA9IDA7Ci0gICAgaW50IGtwID0gMDsJCQkJLyogQnJh Y2UgdXAtZG93biBjb3VudGVyICovCi0gICAgaW50IHBwID0gMDsJCQkJLyogUGFyZW50aGVzaXMg dXAtZG93biBjb3VudGVyICovCi0jaWZuZGVmIE5PRFFNQUNSTwotICAgIGludCBkcSA9IDA7CQkJ CS8qIERvdWJsZXF1b3RlIGNvdW50ZXIgKi8KLSNlbmRpZiAvKiBOT0RRTUFDUk8gKi8KLSAgICBj aGFyICpzMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb3B5IG9mIGRlc3RpbmF0aW9u IHBvaW50ZXIgKi8KLQotICAgIHMyID0gczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IEluaXRpYWxpemUgc3RyaW5nIHBvaW50ZXJzICovCi0gICAgKnMgPSBOVUw7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogYW5kIGRlc3RpbmF0aW9uIGJ1ZmZlciAqLwotCi0gICAgLyogZGVi dWcoRjAxMCwiZ2V0bmNtIGVudHJ5IixtYWNwW21hY2x2bF0sMCk7ICovCi0KLSAgICBmb3IgKHkg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb29wIGZvciBuIGJ5dGVzIG1heCAqLwot ICAgICAgICAgbWFjcFttYWNsdmxdICYmICptYWNwW21hY2x2bF0gJiYgeSA8IG47Ci0gICAgICAg ICB5KyssIHMrKywgbWFjcFttYWNsdmxdKyspIHsKLQotICAgICAgICAqcyA9ICptYWNwW21hY2x2 bF07ICAgICAgICAgICAgIC8qIEdldCBuZXh0IGNoYXIgZnJvbSBtYWNybyBkZWYgKi8KLQotI2lm bmRlZiBDT01NRU5UCi0vKgotICBUaGlzIGlzIHRvIGFsbG93IHF1b3Rpbmcgb2YgcGFyZW50aGVz ZXMsIGNvbW1hcywgZXRjLCBpbiBmdW5jdGlvbgotICBhcmd1bWVudHMsIGJ1dCBpdCBicmVha3Mg anVzdCBhYm91dCBldmVyeXRoaW5nIGVsc2UuICBET04nVCBSRU1PVkUgVEhJUwotICBDT01NRU5U ISAgKE90aGVyd2lzZSB5b3UnbGwgd2luZCB1cCBhZGRpbmcgdGhlIHNhbWUgY29kZSBhZ2FpbiBh bmQgYnJlYWtpbmcKLSAgZXZlcnl0aGluZyBhZ2Fpbi4pICA8LS0gVGhlIHByZWNlZGluZyB3YXJu aW5nIHNob3VsZCBiZSBvYnNvbGV0ZSBzaW5jZSB0aGUKLSAgc3RhdGVtZW50cyBiZWxvdyBoYXZl IGJlZW4gZml4ZWQsIGJ1dCBpbiBjYXNlIG9mIGZpcmUsIHJlbW92ZSB0aGUgIm4iIGZyb20KLSAg dGhlIDwjPmlmbmRlZiBhYm92ZS4gIE5FVyBXQVJOSU5HOiBjb2RlIGFkZGVkIDEyIEFwciAyMDAy IHRvIGV4ZW1wdCB0aGUKLSAgb3BlbmluZyBicmFjZSBpbiBce25ubn0gZnJvbSBiZWluZyB0cmVh dGVkIGFzIGEgcXVvdGVkIGJyYWNlLgotKi8KLSAgICAgICAgaWYgKCFxdW90ZSAmJiAqcyA9PSBD TURRKSB7Ci0gICAgICAgICAgICBxdW90ZSA9IDE7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg ICAgICAgfQotICAgICAgICBpZiAocXVvdGUpIHsKLQkgICAgaW50IG5vdHF1b3RlID0gMDsKLSAg ICAgICAgICAgIHF1b3RlID0gMDsKLQkgICAgaWYgKCpzID09ICd7JykgewkJLyogQ2hlY2sgZm9y IFx7bm5ufSAoOC4wLjIwMykgKi8KLQkJY2hhciBjLCAqIHA7Ci0JCXAgPSBtYWNwW21hY2x2bF0g KyAxOwotCQl3aGlsZSAoKGMgPSAqcCsrKSkgewotCQkgICAgaWYgKGlzZGlnaXQoYykpCi0JCSAg ICAgIGNvbnRpbnVlOwotCQkgICAgZWxzZSBpZiAoYyA9PSAnfScpIHsKLQkJCW5vdHF1b3RlKys7 Ci0JCQlicmVhazsKLQkJICAgIH0gZWxzZSB7Ci0JCQlicmVhazsKLQkJICAgIH0KLQkJfQotCSAg ICB9Ci0JICAgIGlmIChub3RxdW90ZSA9PSAwKQotCSAgICAgIGNvbnRpbnVlOwotICAgICAgICB9 Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0vKgotICBBbGxvdyBicmFjZXMgYXJvdW5kIG1hY3Jv IGRlZmluaXRpb24gdG8gcHJldmVudCBjb21tYXMgZnJvbSBiZWluZyB0dXJuZWQgdG8KLSAgZW5k LW9mLWxpbmVzIGFuZCBhbHNvIHRyZWF0IGFueSBjb21tYXMgd2l0aGluIHBhcmVucyBhcyB0ZXh0 IHNvIHRoYXQKLSAgbXVsdGlwbGUtYXJndW1lbnQgZnVuY3Rpb25zIHdvbid0IGNhdXNlIHRoZSBj b21tYW5kIHRvIGJyZWFrIHByZW1hdHVyZWx5LgotICAxOSBPY3QgMjAwMTogU2ltaWxhciB0cmVh dG1lbnQgd2FzIGFkZGVkIGZvciBkb3VibGVxdW90ZXMsIHNvCi0KLSAgICAgZGVmaW5lIGZvbyB7 IGVjaG8gIm9uZSwgdHdvLCB0aHJlZSIgfQotCi0gIHdvdWxkIHdvcmsgYXMgZXhwZWN0ZWQuICBU aGlzIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGJyb2tlbiBhbnl0aGluZyBidXQKLSAgaWYgc29tZXRo aW5nIGNvbWVzIHVwIGxhdGVyLCByZWJ1aWxkIHdpdGggTk9EUU1BQ1JPIGRlZmluZWQuCi0qLwot ICAgICAgICBpZiAoKnMgPT0gJ3snKSBrcCsrOyAgICAgICAgICAgIC8qIENvdW50IGJyYWNlcyAq LwotICAgICAgICBpZiAoKnMgPT0gJ30nICYmIGtwID4gMCkga3AtLTsKLSAgICAgICAgaWYgKCpz ID09ICcoJykgcHArKzsgICAgICAgICAgICAvKiBDb3VudCBwYXJlbnRoZXNlcy4gKi8KLSAgICAg ICAgaWYgKCpzID09ICcpJyAmJiBwcCA+IDApIHBwLS07Ci0jaWZuZGVmIE5PRFFNQUNSTwotI2lm bmRlZiBDT01NRU5UCi0JLyogVG9vIG1hbnkgZmFsc2UgcG9zaXRpdmVzICovCi0JLyogTm8sIG5v dCByZWFsbHkgLS0gdGhpcyBpcyBpbmRlZWQgdGhlIGJlc3Qgd2UgY2FuIGRvICovCi0JLyogUmV2 ZXJ0ZWQgdG8gdGhpcyBtZXRob2QgU3VuIE1heSAxMSAxODo0Mzo0NSAyMDAzICovCi0JaWYgKCpz ID09ICciJykgZHEgPSAxIC0gZHE7ICAgICAvKiBBY2NvdW50IGZvciBkb3VibGVxdW90ZXMgKi8K LSNlbHNlICAvKiBGcmkgQXByICA0IDEzOjIxOjI5IDIwMDMgKi8KLQkvKiBUaGUgY29kZSBiZWxv dyBicmVha3MgdGhlIFNXSVRDSCBzdGF0ZW1lbnQgKi8KLQkvKiBUaGVyZSBpcyBubyB3YXkgdG8g bWFrZSB0aGlzIHdvcmsgLS0gaXQgd291bGQgcmVxdWlyZSAqLwotCS8qIGJ1aWxkaW5nIGluIGFs bCB0aGUga25vd2xlZGdlIG9mIGNvbW1hbmQgcGFyc2VyLiAqLwotICAgICAgICBpZiAoZGJscXVv ICYmICgqcyA9PSAnIicpKSB7ICAgIC8qIEhhdmUgZG91YmxlcXVvdGUgKi8KLSAgICAgICAgICAg IGlmIChkcSA9PSAxKSB7CQkvKiBDbG9zZSBxdW90ZSBvbmx5IGlmLi4uICovCi0gICAgICAgICAg ICAgICAgaWYgKCgqKG1hY3BbbWFjbHZsXSsxKSA9PSBTUCkgfHwgLyogZm9sbG93ZWQgYnkgc3Bh Y2Ugb3IuLi4gKi8KLQkJICAgICghKihtYWNwW21hY2x2bF0rMSkpIHx8ICAgICAgLyogYXQgZW5k IG9yIC4uLiAqLwotCQkgICAgLyogTmV4dCBjaGFyIGlzIGNvbW1hbmQgc2VwYXJhdG9yLi4uICov Ci0JCSAgICAvKiBTdW4gTWF5IDExIDE3OjI0OjEyIDIwMDMgKi8KLQkJICAgIChrcCA8IDEgJiYg cHAgPCAxICYmICgqKG1hY3BbbWFjbHZsXSsxKSA9PSAnLCcpKQotCQkgICAgKQkJICAgICAKLSAg ICAgICAgICAgICAgICAgIGRxID0gMDsJCS8qIENsb3NlIHRoZSBxdW90ZSAqLwotICAgICAgICAg ICAgfSBlbHNlIGlmIChkcSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgLyogT3BlbiBxdW90ZSBv bmx5IGlmIGF0IGJlZ2lubmluZyBvciBwcmVjZWRlZCBieSBzcGFjZSAqLwotICAgICAgICAgICAg ICAgIGlmIChzID4gczIpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCoocy0xKSA9PSBTUCkK LSAgICAgICAgICAgICAgICAgICAgICBkcSA9IDE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlm IChzID09IHMyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgZHEgPSAxOwotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNl bmRpZiAvKiBOT0RRTUFDUk8gKi8KLSAgICAgICAgaWYgKCpzID09ICcsJyAmJiBwcCA8PSAwICYm IGtwIDw9IDAKLSNpZm5kZWYgTk9EUU1BQ1JPCi0gICAgICAgICAgICAmJiBkcSA9PSAwCi0jZW5k aWYgLyogTk9EUU1BQ1JPICovCi0gICAgICAgICAgICApIHsKLSAgICAgICAgICAgIG1hY3BbbWFj bHZsXSsrOyAgICAgICAgICAgICAvKiBDb21tYSBub3QgaW4ge30gb3IgKCkgKi8KLSAgICAgICAg ICAgIC8qIGRlYnVnKEYxMTAsIm5leHQgY21kIixzLDApOyAqLwotICAgICAgICAgICAga3AgPSBw cCA9IDA7ICAgICAgICAgICAgICAgIC8qIHNvIHdlIGhhdmUgdGhlIG5leHQgY29tbWFuZCAqLwot ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBSZWFjaGVkIGVuZC4gKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgLyog RE9OJ1QgRE8gVEhJUyAtIElUIEJSRUFLUyBFVkVSWVRISU5HICovCi0gICAgKnMgPSBOVUw7Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIGlmICgqczIgPT0gTlVMKSB7ICAgICAgICAgICAgICAg ICAgIC8qIElmIG5vdGhpbmcgd2FzIGNvcGllZCwgKi8KLSAgICAgICAgLyogZGVidWcoRjEwMCwi WFhYIGdldG5jbSBlb20iLCIiLDApOyAqLwotICAgICAgICBwb3BjbHZsKCk7ICAgICAgICAgICAg ICAgICAgICAgIC8qIHBvcCBjb21tYW5kIGxldmVsLiAqLwotICAgICAgICByZXR1cm4oLTEpOwot ICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG90aGVyd2lzZSwgdGFj ayBDUiBvbnRvIGVuZCAqLwotICAgICAgICAqcysrID0gQ1I7Ci0gICAgICAgICpzID0gJ1wwJzsK LSAgICAgICAgLyogZGVidWcoRjExMCwiWFhYIGdldG5jbSBPSyIscywwKTsgKi8KLSAgICAgICAg aWYgKG1lY2hvICYmIHBmbGFnKSAgICAgICAgICAgICAvKiBJZiBNQUNSTyBFQ0hPIE9OLCBlY2hv IHRoZSBjbWQgKi8KLSAgICAgICAgICBwcmludGYoIiVzXG4iLHMyKTsKLSAgICB9Ci0gICAgcmV0 dXJuKDApOwotfQotCi0vKiAgRCBPIE0gQSBDICAtLSAgRGVmaW5lIGFuZCB0aGVuIGV4ZWN1dGUg YSBtYWNybyAqLwotCi1pbnQKLWRvbWFjKG5hbWUsIGRlZiwgZmxhZ3MpIGNoYXIgKm5hbWUsICpk ZWY7IGludCBmbGFnczsgewotICAgIGludCB4LCBtOwotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYg T1MyCi0gICAgZXh0ZXJuIGludCB0ZXJtX2lvOwotICAgIGludCB0ZXJtX2lvX3NhdiA9IHRlcm1f aW87Ci0gICAgdGVybV9pbyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRGlzYWJsZSBU ZXJtaW5hbCBFbXVsYXRvciBJL08gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT0xP Q0FMICovCi0gICAgbSA9IG1hY2x2bDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ3VycmVu dCBtYWNybyBzdGFjayBsZXZlbCAqLwotICAgIHggPSBhZGRtYWMobmFtZSwgZGVmKTsgICAgICAg ICAgICAgIC8qIERlZmluZSBhIG5ldyBtYWNybyAqLwotICAgIGlmICh4ID4gLTEpIHsgICAgICAg ICAgICAgICAgICAgICAgIC8qIElmIHN1Y2Nlc3NmdWwsICovCi0gICAgICAgIGRvZG8oeCxOVUxM LGZsYWdzKTsgICAgICAgICAgICAgLyogc3RhcnQgaXQgKGluY3JlbWVudHMgbWFjbHZsKS4gKi8K LSAgICAgICAgd2hpbGUgKG1hY2x2bCA+IG0pIHsgICAgICAgICAgICAvKiBLZWVwIGdvaW5nIHRp bGwgZG9uZSB3aXRoIGl0LCAqLwotICAgICAgICAgICAgZGVidWcoRjEwMSwiZG9tYWMgbG9vcCBt YWNsdmwgMSIsIiIsbWFjbHZsKTsKLSAgICAgICAgICAgIHNzdGF0ZSA9IChDSEFSKSBwYXJzZXIo MSk7ICAvKiBwYXJzaW5nICYgZXhlY3V0aW5nIGVhY2ggY29tbWFuZCwgKi8KLSAgICAgICAgICAg IGRlYnVnKEYxMDEsImRvbWFjIGxvb3AgbWFjbHZsIDIiLCIiLG1hY2x2bCk7Ci0gICAgICAgICAg ICBpZiAoc3N0YXRlKSBwcm90bygpOyAgICAgICAgLyogaW5jbHVkaW5nIHByb3RvY29sIGNvbW1h bmRzLiAqLwotICAgICAgICB9Ci0gICAgICAgIGRlYnVnKEYxMDEsImRvbWFjIGxvb3AgZXhpdCBt YWNsdmwiLCIiLG1hY2x2bCk7Ci0gICAgfQotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0g ICAgdGVybV9pbyA9IHRlcm1faW9fc2F2OwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5P TE9DQUwgKi8KLSAgICByZXR1cm4oc3VjY2Vzcyk7Ci19Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQot LyoKLSAgRyBFIFQgTiBDIFQKLQotICBHZXQgbmV4dCBjb21tYW5kIGZyb20gVEFLRSAoY29tbWFu ZCkgZmlsZS4KLQotICBDYWxsIHdpdGg6Ci0gICBzICAgICBQb2ludGVyIHRvIGJ1ZmZlciB0byBy ZWFkIGludG8KLSAgIG4gICAgIExlbmd0aCBvZiBidWZmZXIKLSAgIGYgICAgIEZpbGUgZGVzY3Jp cHRvciBvZiBmaWxlIHRvIHJlYWQgZnJvbQotICAgZmxhZyAgMCA9PSBrZWVwIGxpbmUgdGVybWlu YXRvciBvbiBhbmQgYWxsb3cgY29udGludWF0aW9uCi0gICAgICAgICAxID09IGRpc2NhcmQgbGlu ZSB0ZXJtaW5hdG9yIGFuZCBkb24ndCBhbGxvdyBjb250aW51YXRpb24KLQotICBDYWxsIHdpdGgg ZmxhZyA9PSAwIHRvIHJlYWQgYSBjb21tYW5kIGZyb20gYSBUQUtFIGZpbGU7Ci0gIENhbGwgd2l0 aCBmbGFnICE9IDAgdG8gcmVhZCBhIGxpbmUgZnJvbSBhIGRpYWxpbmcgb3IgbmV0d29yayBkaXJl Y3RvcnkuCi0KLSAgSW4gYm90aCBjYXNlcywgdHJhaWxpbmcgY29tbWVudHMgYW5kL29yIHRyYWls aW5nIHdoaXRlc3BhY2UgaXMvYXJlIHN0cmlwcGVkLgotICBJZiBmbGFnID09IDAsIGNvbnRpbnVl ZCBsaW5lcyBhcmUgY29tYmluZWQgaW50byBvbmUgbGluZS4gIEEgY29udGludWVkIGxpbmUKLSAg aXMgb25lIHRoYXQgZW5kcyBpbiBoeXBlbiwgb3IgYW55IGxpbmUgaW4gYSAiYmxvY2siLCB3aGlj aCBzdGFydHMgd2l0aCAieyIKLSAgYXQgdGhlIGVuZCBvZiBhIGxpbmUgYW5kIGVuZHMgd2l0aCBh IG1hdGNoaW5nICJ9IiBhdCB0aGUgYmVnaW5uaW5nIG9mIGEKLSAgc3Vic2VxdWVudCBsaW5lOyBi bG9ja3MgbWF5IGJlIG5lc3RlZC4KLQotICBSZXR1cm5zOgotICAgMCBpZiBhIHN0cmluZyB3YXMg Y29waWVkLAotICAtMSBvbiBFT0YsCi0gIC0yIG9uIG1hbGxvYyBmYWlsdXJlCi0gIC0zIGlmIGxp bmUgaXMgbm90IHByb3Blcmx5IHRlcm1pbmF0ZWQKLSAgLTQgaWYgKHBvc3NpYmx5IGNvbnRpbnVl ZCkgbGluZSBpcyB0b28gbG9uZy4KLSovCi1zdGF0aWMgaW50IGxweGxlbiA9IDA7Ci0KLWludAot Z2V0bmN0KHMsbixmLGZsYWcpIGNoYXIgKnM7IGludCBuOyBGSUxFICpmOyBpbnQgZmxhZzsgewot ICAgIGludCBpID0gMCwgbGVuID0gMCwgYnVmbGVuID0gMDsKLSAgICBjaGFyIGMgPSBOVUwsIGNj ID0gTlVMLCBjY2wgPSBOVUwsIGNjeCA9IE5VTCwgKnMyID0gTlVMTDsKLSAgICBjaGFyICpscCA9 IE5VTEwsICpscHggPSBOVUxMLCAqbHAyID0gTlVMTCwgKmxwMyA9IE5VTEwsICpsYXN0Y29tbWEg PSBOVUxMOwotICAgIGNoYXIgKiBwcmV2ID0gTlVMTDsKLSAgICBpbnQgYmMgPSAwOyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBCbG9jayBjb3VudGVyICovCi0KLSAgICBzMiA9IHM7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciBvcmlnaW5hbCBwb2ludGVyICovCi0g ICAgcHJldiA9IHMyOwkJCQkvKiBIZXJlIHRvbyAqLwotICAgIGJ1ZmxlbiA9IG47ICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIG9yaWdpbmFsIGJ1ZmZlciBsZW5ndGggKi8KLQot ICAgIGlmIChuIDwgMCkKLSAgICAgIHJldHVybigtMik7Ci0KLSAgICAvKiBBbGxvY2F0ZSBhIGxp bmUgYnVmZmVyIG9ubHkgaWYgd2UgZG9uJ3QgaGF2ZSBvbmUgdGhhdCdzIGJpZyBlbm91Z2ggKi8K LQotICAgIGRlYnVnKEYxMTEsImdldG5jdCIsY2tpdG9hKGxweGxlbiksbik7Ci0KLSAgICBpZiAo bHB4ICYmIChuID4gbHB4bGVuKSkgeyAgICAgICAgICAvKiBIYXZlIG9uZSBhbHJlYWR5ICovCi0g ICAgICAgIGRlYnVnKEYxMDEsImdldG5jdCBuZXcgYnVmZmVyIiwiIixscHhsZW4pOwotICAgICAg ICBmcmVlKGxweCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIEJ1dCBpdCdzIG5vdCBiaWcgZW5v dWdoICovCi0gICAgICAgIGxweCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgLyogRnJlZSBj dXJyZW50IG9uZSAqLwotICAgICAgICBscHhsZW4gPSAwOwotICAgIH0KLSAgICBpZiAoIWxweCkg eyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHZXQgbmV3IG9uZSAqLwotICAgICAgICBpZiAo IShscHggPSAoY2hhciAqKSBtYWxsb2MobikpKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJn ZXRuY3QgbWFsbG9jIGZhaWx1cmUiLCIiLDApOwotICAgICAgICAgICAgcHJpbnRmKCI/TWVtb3J5 IGFsbG9jYXRpb24gZmFpbHVyZSBbZ2V0bmN0OiVkXVxuIixuKTsKLSAgICAgICAgICAgIHJldHVy bigtMik7Ci0gICAgICAgIH0KLSAgICAgICAgbHB4bGVuID0gbjsKLSAgICB9Ci0gICAgbHAyID0g bHB4OwotI2lmZGVmIEtMVURHRQotICAgIC8qIE5PVEU6IE5vIGxvbmdlciB1c2VkIGFzIG9mIDE0 IEF1ZyAyMDAwICovCi0gICAgbHAyKys7Ci0jZW5kaWYgLyogS0xVREdFICovCi0KLSAgICB3aGls ZSAoMSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb29wIHRvIHJlYWQgbGluZXMgZnJv bSBmaWxlICovCi0gICAgICAgIGRlYnVnKEYxMDEsImdldG5jdCB3aGlsZSAoMSkiLCIiLG4pOwot ICAgICAgICBpZiAoZmdldHMobHAyLG4sZikgPT0gTlVMTCkgeyAgIC8qIFJlYWQgYSBsaW5lIGlu dG8gbHAyICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJnZXRuY3QgRU9GIixzMiwwKTsgLyog RU9GICovCi0gICAgICAgICAgICBmcmVlKGxweCk7ICAgICAgICAgICAgICAgICAgLyogRnJlZSB0 ZW1wb3Jhcnkgc3RvcmFnZSAqLwotICAgICAgICAgICAgbHB4ID0gTlVMTDsKLSAgICAgICAgICAg ICpzID0gTlVMOyAgICAgICAgICAgICAgICAgICAvKiBNYWtlIGRlc3RpbmF0aW9uIGJlIGVtcHR5 ICovCi0gICAgICAgICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAgICAgLyogUmV0dXJuIGZh aWx1cmUgY29kZSAqLwotICAgICAgICB9Ci0KLSNpZm5kZWYgTk9ESUFMCi0gICAgICAgIGlmIChm bGFnKSAgICAgICAgICAgICAgICAgICAgICAgLyogQ291bnQgdGhpcyBsaW5lICovCi0gICAgICAg ICAgZGlybGluZSsrOwotICAgICAgICBlbHNlCi0jZW5kaWYgLyogTk9ESUFMICovCi0gICAgICAg ICAgdGZsaW5lW3RsZXZlbF0rKzsKLSAgICAgICAgbGVuID0gc3RybGVuKGxwMikgLSAxOyAgICAg ICAgICAvKiBQb3NpdGlvbiBvZiBsaW5lIHRlcm1pbmF0b3IgKi8KLSAgICAgICAgaWYgKGxlbiA9 PSAwICYmIGxwMlswXSAhPSAnXG4nKSB7IC8qIExhc3QgbGluZSBpbiBmaWxlIGhhcyBvbmUgY2hh ciAqLwotICAgICAgICAgICAgbHAyWysrbGVuXSA9ICdcbic7ICAgICAgICAgIC8qIHRoYXQgaXMg bm90IGEgbmV3bGluZSAqLwotICAgICAgICAgICAgbHAyW2xlbl0gPSBOVUw7Ci0gICAgICAgIH0K LSAgICAgICAgZGVidWcoRjAxMCwiZ2V0bmN0IixscDIsMCk7Ci0gICAgICAgIGlmIChsZW4gPCAw KQotICAgICAgICAgIGxlbiA9IDA7Ci0gICAgICAgIGlmICh0ZWNobyAmJiBwZmxhZykgICAgICAg ICAgICAgLyogSWYgVEFLRSBFQ0hPIE9OLCAqLwotICAgICAgICAgIHByaW50ZigiJTNkLiAlcyIs ICAgICAgICAgICAgIC8qIGVjaG8gaXQgdGhpcyBsaW5lLiAqLwotI2lmbmRlZiBOT0RJQUwKLSAg ICAgICAgICAgICAgICAgZmxhZyA/IGRpcmxpbmUgOgotI2VuZGlmIC8qIE5PRElBTCAqLwotICAg ICAgICAgICAgICAgICB0ZmxpbmVbdGxldmVsXSwKLSAgICAgICAgICAgICAgICAgbHAyCi0gICAg ICAgICAgICAgICAgICk7Ci0gICAgICAgIGxwMyA9IGxwMjsgICAgICAgICAgICAgICAgICAgICAg LyogV29ya2luZyBwb2ludGVyICovCi0gICAgICAgIGkgPSBsZW47ICAgICAgICAgICAgICAgICAg ICAgICAgLyogR2V0IGZpcnN0IG5vbndoaXRlc3BhY2UgY2hhcmFjdGVyICovCi0gICAgICAgIHdo aWxlIChpID4gMCAmJiAoKmxwMyA9PSBTUCB8fCAqbHAzID09IEhUKSkgewotICAgICAgICAgICAg aS0tOwotICAgICAgICAgICAgbHAzKys7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGkgPT0gMCAm JiBiYyA+IDApICAgICAgICAgICAvKiBCbGFuayBsaW5lIGluIHsuLi59IGJsb2NrICovCi0gICAg ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLyogSXNvbGF0ZSwgcmVtb3ZlLCBhbmQgY2hlY2sg dGVybWluYXRvciAqLwotCi0gICAgICAgIGMgPSBscDJbbGVuXTsgICAgICAgICAgICAgICAgICAg LyogVmFsdWUgb2YgbGluZSB0ZXJtaW5hdG9yICovCi0gICAgICAgIC8qIGRlYnVnKEYxMDEsImdl dG5jdCB0ZXJtaW5hdG9yIiwiIixjKTsgKi8KLSAgICAgICAgaWYgKGMgPCBMRiB8fCBjID4gQ1Ip IHsgICAgICAgICAvKiBJdCdzIG5vdCBhIHRlcm1pbmF0b3IgKi8KLSAgICAgICAgICAgIC8qIGRl YnVnKEYxMTEsImdldG5jdCBiYWQgbGluZSIsbHAyLGMpOyAqLwotICAgICAgICAgICAgaWYgKGZl b2YoZikgJiYgbGVuID4gMCAmJiBsZW4gPCBuKSB7Ci0gICAgICAgICAgICAgICAgLyogS2x1ZGdl IEFsZXJ0Li4uICovCi0gICAgICAgICAgICAgICAgaWYgKCFxdWlldCkKLSAgICAgICAgICAgICAg ICAgIHByaW50ZigiV0FSTklORzogTGFzdCBsaW5lIG9mICVzIGxhY2tzIHRlcm1pbmF0b3JcbiIs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgczIgPT0gY21kYnVmID8gImNvbW1hbmQgZmlsZSIg OiAiZGlyZWN0b3J5IGZpbGUiKTsKLSAgICAgICAgICAgICAgICBjID0gbHAyWysrbGVuXSA9ICdc bic7ICAvKiBObyBiaWcgZGVhbCAtIHN1cHBseSBvbmUuICovCi0gICAgICAgICAgICB9IGVsc2Ug eyAgICAgICAgICAgICAgICAgICAgLyogU29tZXRoaW5nJ3Mgd3JvbmcsIGZhaWwuICovCi0gICAg ICAgICAgICAgICAgZnJlZShscHgpOwotICAgICAgICAgICAgICAgIGxweCA9IE5VTEw7Ci0gICAg ICAgICAgICAgICAgcmV0dXJuKC0zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg ICAvKiBUcmltIHRyYWlsaW5nIHdoaXRlc3BhY2UgKi8KLQotICAgICAgICBmb3IgKGkgPSBsZW4g LSAxOyBpID4gLTEgJiYgbHAyW2ldIDw9IFNQOyBpLS0pIC8qIFRyaW0gKi8KLSAgICAgICAgICA7 Ci0gICAgICAgIC8qIGRlYnVnKEYxMDEsImdldG5jdCBpIiwiIixpKTsgKi8KLSAgICAgICAgbHAy W2krMV0gPSBOVUw7ICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGUgdGhlIHN0cmluZyAqLwot ICAgICAgICAvKiBkZWJ1ZyhGMTEwLCJnZXRuY3QgbHAyIixscDIsMCk7ICovCi0gICAgICAgIGxw ID0gbHAyOyAgICAgICAgICAgICAgICAgICAgICAgLyogTWFrZSBhIHdvcmtpbmcgcG9pbnRlciAq LwotCi0gICAgICAgIC8qIFJlbW92ZSB0cmFpbGluZyBvciBmdWxsLWxpbmUgY29tbWVudCAqLwot Ci0gICAgICAgIHdoaWxlICgoY2MgPSAqbHApKSB7Ci0gICAgICAgICAgICBpZiAoY2MgPT0gJzsn IHx8IGNjID09ICcjJykgeyAvKiBDb21tZW50IGludHJvZHVjZXI/ICovCi0gICAgICAgICAgICAg ICAgaWYgKGxwID09IGxwMikgeyAgICAgICAgLyogRmlyc3QgY2hhciBvbiBsaW5lICovCi0gICAg ICAgICAgICAgICAgICAgICpscCA9IE5VTDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICAgICAgfSBlbHNlIGlmICgqKGxwIC0gMSkgPT0gU1AgfHwgKihscCAtIDEpID09 IEhUKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxwLS07Ci0gICAgICAgICAgICAgICAgICAgICps cCA9IE5VTDsgIC8qIE9yIHByZWNlZGVkIGJ5IHdoaXRlc3BhY2UgKi8KLSAgICAgICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg ICAgbHArKzsKLSAgICAgICAgfQotICAgICAgICBpZiAobHAgPiBscDIpCi0gICAgICAgICAgbHAt LTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQmFjayB1cCBvdmVyIHRoZSBOVUwgKi8KLQot ICAgICAgICAvKiBOb3cgdHJpbSBhbnkgc3BhY2UgdGhhdCBwcmVjZWRlZCB0aGUgY29tbWVudCAq LwotCi0gICAgICAgIHdoaWxlICgoKmxwID09IFNQIHx8ICpscCA9PSBIVCkgJiYgbHAgPj0gbHAy KSB7Ci0gICAgICAgICAgICAqbHAgPSBOVUw7Ci0gICAgICAgICAgICBpZiAobHAgPD0gbHAyKQot ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGxwLS07Ci0gICAgICAgIH0KLSAgICAg ICAgLyogZGVidWcoRjExMCwiZ2V0bmN0IGNvbW1lbnQgdHJpbW1lZCIsbHAyLDApOyAqLwotCi0g ICAgICAgIGxlbiA9IHN0cmxlbihscDIpOyAgICAgICAgICAgICAgLyogTGVuZ3RoIGFmdGVyIHRy aW1taW5nICovCi0KLSAgICAgICAgaWYgKG4gLSBsZW4gPCAyKSB7ICAgICAgICAgICAgICAvKiBD aGVjayByZW1haW5pbmcgc3BhY2UgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImdldG5jdCBj b21tYW5kIHRvbyBsb25nIixzMixidWZsZW4pOwotICAgICAgICAgICAgcHJpbnRmKCI/TGluZSB0 b28gbG9uZywgbWF4aW11bSBsZW5ndGg6ICVkLlxuIixidWZsZW4pOwotICAgICAgICAgICAgZnJl ZShscHgpOwotICAgICAgICAgICAgcmV0dXJuKC00KTsKLSAgICAgICAgfQotICAgICAgICBjY2wg PSAobGVuID4gMCkgPyBscDJbbGVuLTFdIDogMDsgICAgIC8qIExhc3QgY2hhcmFjdGVyIGluIGxp bmUgKi8KLSAgICAgICAgY2N4ID0gKGxlbiA+IDEpID8gbHAyW2xlbi0yXSA6IDA7ICAgICAvKiBQ ZW51bHRpbWF0ZSBjaGFyIGluIGxpbmUgKi8KLQotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgLyog TGluZSBjb250YWluaW5nIG9ubHkgd2hpdGVzcGFjZSBhbmQgLC0gKi8KLSAgICAgICAgaWYgKChs ZW4gPiAxKSAmJiAobHAzID09IGxwMitsZW4tMikgJiYgKGNjbCA9PSAnLScpICYmIChjY3ggPT0g JywnKSkKLSAgICAgICAgICBjb250aW51ZTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSNpZmRl ZiBLTFVER0UKLS8qCi0gIElmIGl0IGlzIGEgY29tbWFuZCBhbmQgaXQgYmVnaW5zIHdpdGggYSB0 b2tlbiAobGlrZSAhIG9yIC4pIHRoYXQgaXMgbm90Ci0gIGZvbGxvd2VkIGJ5IGEgc3BhY2UsIGlu c2VydCBhIHNwYWNlIG5vdzsgb3RoZXJ3aXNlIGNta2V5KCkgY2FuIGdldCBtaWdodHkKLSAgY29u ZnVzZWQuCi0qLwotICAgICAgICBpZiAocyA9PSBzMiAmJiAhZmxhZykgewotICAgICAgICAgICAg Y2hhciAqcCA9IHRva3RhYjsKLSAgICAgICAgICAgIHdoaWxlICgqcCkgewotICAgICAgICAgICAg ICAgIGlmICgqcCA9PSAqbHAzICYmICoocCsxKSAhPSBTUCkgewotICAgICAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTEwLCJnZXRuY3QgdG9rZW4iLHAsMCk7Ci0gICAgICAgICAgICAgICAgICAgICps cDMtLSA9IFNQOwotICAgICAgICAgICAgICAgICAgICAqbHAzID0gKnA7Ci0gICAgICAgICAgICAg ICAgICAgIGlmIChscDMgPCBscDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxwMi0tOwot ICAgICAgICAgICAgICAgICAgICAgICAgbGVuKys7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg ICAgICAgICAgICBwKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBLTFVE R0UgKi8KLSAgICAgICAgbHAgPSBscDI7Ci0KLSAgICAgICAgd2hpbGUgKCgqcysrID0gKmxwKysp KSAgICAgICAgICAvKiBDb3B5IHJlc3VsdCB0byB0YXJnZXQgYnVmZmVyICovCi0gICAgICAgICAg bi0tOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWNjb3VudGluZyBmb3IgbGVuZ3RoICov Ci0gICAgICAgIHMtLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQmFjayB1cCBvdmVy IHRoZSBOVUwgKi8KLQotICAgICAgICAvKiBDaGVjayB3aGV0aGVyIHRoaXMgbGluZSBpcyBjb250 aW51ZWQgKi8KLQotICAgICAgICBpZiAoZmxhZykgICAgICAgICAgICAgICAgICAgICAgIC8qIE5v IGxpbmUgY29udGludWF0aW9uIHdoZW4gZmxhZz0xICovCi0gICAgICAgICAgYnJlYWs7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogU28gYnJlYWsgb3V0IG9mIHJlYWQtbGluZXMgbG9vcCAqLwot Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICBkZWJ1ZyhGMDAwLCJnZXRuY3QgZmlyc3QgY2hhciIs IiIsKmxwMyk7Ci0gICAgICAgIGRlYnVnKEYwMDAsImdldG5jdCBsYXN0IGNoYXIiLCIiLGNjbCk7 Ci0gICAgICAgIGRlYnVnKEYwMDAsImdldG5jdCBuZXh0LXRvLWxhc3QgY2hhciIsIiIsY2N4KTsK LSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICAgICAgaWYgKGJjID4gMCAmJiAqbHAzID09ICd9 JykgeyAgICAvKiBGaXJzdCBjaGFyIG9uIGxpbmUgaXMgJ30nICovCi0gICAgICAgICAgICBiYy0t OwkJCS8qIERlY3JlbWVudCBibG9jayBjb3VudGVyICovCi0gICAgICAgIH0KLQotICAgICAgICBp ZiAoYmMgPT0gMCAmJiAgICAgICAgICAgICAgICAgIC8qIExpbmUgaXMgY29udGludWVkIGlmIGJj ID4gMCAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgIC8qIE5vdCBzdXBwb3J0ZWQgYXMg b2YgQy1LZXJtaXQgNi4wICovCi0gICAgICAgICAgICBjY2wgIT0gQ01EUSAmJiAgICAgICAgICAg ICAgLyogb3IgbGluZSBlbmRzIHdpdGggQ01EUSAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAg ICAgICAgICAgIGNjbCAhPSAnLScgICYmICAgICAgICAgICAgICAvKiBvciBsaW5lIGVuZHMgd2l0 aCBkYXNoICovCi0gICAgICAgICAgICBjY2wgIT0gJ3snKSAgICAgICAgICAgICAgICAgLyogb3Ig bGluZSBlbmRzIHdpdGggb3BlbmluZyBicmFjZSAqLwotICAgICAgICAgIGJyZWFrOyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIE5vbmUgb2YgdGhvc2UsIHdlJ3JlIGRvbmUuICovCi0KLSAgICAg ICAgaWYgKGNjbCA9PSAnLScgfHwgY2NsID09ICd7JykgICAvKiBDb250aW51YXRpb24gY2hhcmFj dGVyICovCi0gICAgICAgICAgaWYgKGNjeCA9PSBDTURRKSAgICAgICAgICAgICAgLyogQnV0IGl0 J3MgcXVvdGVkICovCi0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgLyog c28gaWdub3JlIGl0ICovCi0KLSAgICAgICAgaWYgKGNjbCA9PSAneycpIHsgICAgICAgICAgICAg ICAvKiBMYXN0IGNoYXIgb24gbGluZSBpcyAneyc/ICovCi0gICAgICAgICAgICBiYysrOyAgICAg ICAgICAgICAgICAgICAgICAgLyogQ291bnQgdGhlIGJsb2NrIG9wZW5lci4gKi8KLSAgICAgICAg fSBlbHNlIGlmIChjY2wgPT0gJy0nKSB7ICAgICAgICAvKiBFeHBsaWNpdCBjb250aW51ZT8gKi8K LSAgICAgICAgICAgIGNoYXIgYywgKiBzczsKLSAgICAgICAgICAgIGludCBzdGF0ZSA9IDAsIG5u OwotICAgICAgICAgICAgcy0tOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFllcywgYmFjayB1 cCBvdmVyIHRlcm1pbmF0b3JzICovCi0gICAgICAgICAgICBuKys7ICAgICAgICAgICAgICAgICAg ICAgICAgLyogYW5kIG92ZXIgY29udGludWF0aW9uIGNoYXJhY3RlciAqLwotICAgICAgICAgICAg bm4gPSBuOyAgICAgICAgICAgICAgICAgICAgIC8qIFNhdmUgY3VycmVudCBjb3VudCAqLwotICAg ICAgICAgICAgc3MgPSBzOyAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBwb2ludGVyICovCi0g ICAgICAgICAgICBzLS07ICAgICAgICAgICAgICAgICAgICAgICAgLyogQmFjayB1cCBvdmVyIGRh c2ggKi8KLSAgICAgICAgICAgIG4rKzsKLSAgICAgICAgICAgIHdoaWxlIChzdGF0ZSA8IDIgJiYg cyA+PSBwcmV2KSB7IC8qIENoZWNrIGZvciAieywtIiAqLwotICAgICAgICAgICAgICAgIG4rKzsK LSAgICAgICAgICAgICAgICBjID0gKnMtLTsKLSAgICAgICAgICAgICAgICBpZiAoYyA8PSBTUCkK LSAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmIChjICE9ICcs JyAmJiBjICE9ICd7JykKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg IHN3aXRjaCAoc3RhdGUpIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgMDogICAgICAgICAgICAg ICAvKiBMb29raW5nIGZvciBjb21tYSAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAn LCcpCi0gICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAxOwotICAgICAgICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAvKiBMb29r aW5nIGZvciBsZWZ0IGJyYWNlICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChjID09ICd7Jykg ewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAyOwotICAgICAgICAgICAgICAgICAg ICAgICAgcyArPSAyOwotICAgICAgICAgICAgICAgICAgICAgICAgKnMgPSBOVUw7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBiYysrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIGlmIChzdGF0ZSAhPSAyKSB7IHMgPSBzczsgbiA9IG5uOyB9Ci0gICAgICAgICAgICAq cyA9IE5VTDsKLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb25l IG9mIHRob3NlIGJ1dCAoYmMgPiAwKSAqLwotICAgICAgICAgICAgbGFzdGNvbW1hID0gczsKLSAg ICAgICAgICAgICpzKysgPSAnLCc7ICAgICAgICAgICAgICAgICAvKiBhbmQgaW5zZXJ0IGEgY29t bWEgKi8KLSAgICAgICAgICAgIG4tLTsKLSAgICAgICAgfQotI2lmZGVmIENPTU1FTlQKLSAgICAg ICAgZGVidWcoRjEwMSwiZ2V0bmN0IGJjIiwiIixiYyk7Ci0gICAgICAgIGRlYnVnKEYxMDAsImdl dG5jdCBjb250aW51ZWQiLCIiLDApOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgICAgICAq cyA9IE5VTDsKLSAgICAgICAgcHJldiA9IHM7Ci0KLSAgICB9IC8qIHJlYWQtbGluZXMgd2hpbGUg bG9vcCAqLwotCi0gICAgaWYgKGxhc3Rjb21tYSkKLSAgICAgICpsYXN0Y29tbWEgPSBTUDsKLSAg ICBpZiAoIWZsYWcpICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUYWNrIGxpbmUgdGVybWlu YXRvciBiYWNrIG9uICovCi0gICAgICAqcysrID0gYzsKLSAgICAqcysrID0gTlVMOyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGUgdGhlIHN0cmluZyAqLwotICAgIHVudGFiKHMy KTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvbmUsIGNvbnZlcnQgdGFicyB0byBzcGFj ZXMgKi8KLSNpZmRlZiBERUJVRwotICAgIGlmICghZmxhZykgewotICAgICAgICBkZWJ1ZyhGMDEw LCJDTUQoRikiLHMyLDApOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotICAgIGZyZWUobHB4 KTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZyZWUgdGVtcG9yYXJ5IHN0b3JhZ2UgKi8K LSAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gc3VjY2Vz cyAqLwotfQotCi1WT0lECi1zaG9zdGFjaygpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogRHVtcCB0aGUgY29tbWFuZCBzdGFjayAqLwotICAgIGludCBpOwotICAgIGNoYXIgKnA7Ci0j aWZuZGVmIE5PU1BMCi0gICAgZm9yIChpID0gY21kbHZsOyBpID4gMDsgaS0tKSB7Ci0gICAgICAg IGlmIChjbWRzdGtbaV0uc3JjID09IENNRF9URikgewotICAgICAgICAgICAgcCA9IHRmbmFtW2Nt ZHN0a1tpXS5sdmxdOwotICAgICAgICAgICAgaWYgKHpmbnFmcChwLFRNUEJVRlNJWix0bXBidWYp KQotICAgICAgICAgICAgICBwID0gdG1wYnVmOwotICAgICAgICAgICAgcHJpbnRmKCIgJTJkLiBG aWxlICA6ICVzIChsaW5lICVkKVxuIiwKLSAgICAgICAgICAgICAgICAgICBpLAotICAgICAgICAg ICAgICAgICAgIHAsCi0gICAgICAgICAgICAgICAgICAgdGZsaW5lW2NtZHN0a1tpXS5sdmxdCi0g ICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgfSBlbHNlIGlmIChjbWRzdGtbaV0uc3JjID09 IENNRF9NRCkgewotICAgICAgICAgICAgY2hhciAqIG07Ci0gICAgICAgICAgICBtID0gbV9hcmdb Y21kc3RrW2ldLmx2bF1bMF07IC8qIE5hbWUgb2YgdGhpcyBtYWNybyAqLwotICAgICAgICAgICAg aWYgKGkgPiAwKSB7ICAgICAgICAgICAgICAgICAvKiBTcGVjaWFsIGhhbmRsaW5nIGZvciAyLWxl dmVsICovCi0gICAgICAgICAgICAgICAgY2hhciAqczsgICAgICAgICAgICAgICAgIC8qIGJ1aWx0 LWluIG1hY3Jvcy4uLiAqLwotICAgICAgICAgICAgICAgIHMgPSBtX2FyZ1tjbWRzdGtbaS0xXS5s dmxdWzBdOyAvKiBOYW1lIG5leHQgbGV2ZWwgdXAgKi8KLSAgICAgICAgICAgICAgICBpZiAocyAm JiBjbWRzdGtbaS0xXS5zcmMgPT0gQ01EX01EKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh c3RyY21wKHMsIl9mb3J4IikpCi0gICAgICAgICAgICAgICAgICAgICAgbSA9ICJGT1IiOwotICAg ICAgICAgICAgICAgICAgICBlbHNlIGlmICghc3RyY21wKHMsIl94aWYiKSkKLSAgICAgICAgICAg ICAgICAgICAgICBtID0gIlhJRiI7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFzdHJj bXAocywiX3doaWxlIikpCi0gICAgICAgICAgICAgICAgICAgICAgbSA9ICJXSElMRSI7Ci0gICAg ICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAocywiX3N3aXR4IikpCi0gICAgICAgICAg ICAgICAgICAgICAgbSA9ICJTV0lUQ0giOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIHByaW50ZigiICUyZC4gTWFjcm8gOiAlc1xuIixpLG0pOwotICAgICAg ICB9IGVsc2UgaWYgKGNtZHN0a1tpXS5zcmMgPT0gQ01EX0tCKSB7Ci0gICAgICAgICAgICBwcmlu dGYoIiAlMmQuIFByb21wdDpcbiIsaSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBw cmludGYoIiAlMmQuIEVSUk9SIDogQ29tbWFuZCBzb3VyY2UgdW5rbm93blxuIixpKTsKLSAgICAg ICAgfQotICAgIH0KLSNlbHNlCi0gICAgZm9yIChpID0gdGxldmVsOyBpID4gLTE7IGktLSkgewot ICAgICAgICBwID0gdGZuYW1baV07Ci0gICAgICAgIGlmICh6Zm5xZnAocCxUTVBCVUZTSVosdG1w YnVmKSkKLSAgICAgICAgICBwID0gdG1wYnVmOwotICAgICAgICBwcmludGYoIiAlMmQuIEZpbGUg IDogJXMgKGxpbmUgJWQpXG4iLAotICAgICAgICAgICAgICAgaSwKLSAgICAgICAgICAgICAgIHAs Ci0gICAgICAgICAgICAgICB0ZmxpbmVbaV0KLSAgICAgICAgICAgICAgICk7Ci0gICAgfQotI2Vu ZGlmIC8qIE5PU1BMICovCi0gICAgaWYgKGkgPT0gMCkKLSAgICAgIHByaW50ZigiICUyZC4gUHJv bXB0OiAodG9wIGxldmVsKVxuIiwwKTsKLX0KLQotLyogRm9yIGNvbW1hbmQgZXJyb3IgbWVzc2Fn ZXMgLSBhdm9pZCBkdW1waW5nIG91dCB0aGUgY29udGVudHMgb2Ygc29tZSAqLwotLyogc29tZSBo dWdlIEZPUiBsb29wIGlmIGl0IGNvbnRhaW5zIGEgc3ludGF4IGVycm9yLiAqLwotCi1zdGF0aWMg Y2hhciAqCi1jbWRkaXNwbGF5KHMsIGN4KSBjaGFyICogczsgaW50IGN4OyB7Ci0gICAgc3RhdGlj IGNoYXIgYnVmWzgwXTsKLSAgICBpZiAoKGludClzdHJsZW4ocykgPiA3MCkgewotCXNwcmludGYo YnVmLCIlLjY0cy4uLiIscyk7CS8qIFNBRkUgKi8KLQlzID0gYnVmOwotICAgIH0KLSAgICByZXR1 cm4ocyk7Ci19Ci0KLXN0YXRpYyBWT0lECi1jbWRlcnIoKSB7Ci0gICAgaWYgKHhjbWRzcmMgPiAw KSB7Ci0Jc3dpdGNoIChjbWRfZXJyKSB7CQkvKiBTRVQgQ09NTUFORCBFUlJPUi1ESVNQTEFZICov Ci0JICBjYXNlIDA6Ci0JICAgIGJyZWFrOwotCSAgY2FzZSAxOgotCSAgY2FzZSAyOgotCSAgICBp ZiAodGxldmVsID4gLTEpIHsKLSNpZm5kZWYgTk9TUEwKLQkJaWYgKHhjbWRzcmMgPT0gMikKLQkJ ICBwcmludGYoCi0iSW4gbWFjcm8gb3IgYmxvY2sgZGVmaW5lZCBpbiBmaWxlOiAlcyBzdGFydGlu ZyBhYm91dCBsaW5lICVkXG4iLAotCQkJIHRmbmFtW3RsZXZlbF0gPyB0Zm5hbVt0bGV2ZWxdIDog IiIsIHRmbGluZVt0bGV2ZWxdCi0JCQkgKTsKLQkJZWxzZQotI2VuZGlmIC8qIE5PU1BMICovCi0J CSAgcHJpbnRmKCJGaWxlOiAlcywgTGluZTogJWRcbiIsCi0JCQkgdGZuYW1bdGxldmVsXSA/IHRm bmFtW3RsZXZlbF0gOiAiIiwgdGZsaW5lW3RsZXZlbF0KLQkJCSApOwotCSAgICB9Ci0jaWZuZGVm IE5PU1BMCi0JICAgIGlmIChjbWRfZXJyID09IDIpIHsKLQkJaWYgKGNtZHN0a1tjbWRsdmxdLnNy YyA9PSBDTURfTUQpIHsgLyogRXhlY3V0aW5nIGEgbWFjcm8/ICovCi0JCSAgICBpbnQgbTsKLQkJ ICAgIG0gPSBjbWRzdGtbY21kbHZsXS5sdmw7Ci0JCSAgICBpZiAobWxvb2sobWFjdGFiLG1fYXJn W21dWzBdLG5tYWMpID49IDApCi0JCSAgICAgIHByaW50ZigiTWFjcm8gbmFtZTogJXNcbiIsIG1f YXJnW21dWzBdKTsKLQkJfQotCSAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQkgICAgYnJlYWs7 Ci0KLQkgIGNhc2UgMzoKLQkgICAgcHJpbnRmKCJDb21tYW5kIHN0YWNrOlxuIik7Ci0JICAgIHNo b3N0YWNrKCk7CQkJICAgIAotCX0KLSAgICB9Ci19Ci0KLS8qICBQIEEgUiBTIEUgUiAgLS0gIFRv cC1sZXZlbCBpbnRlcmFjdGl2ZSBjb21tYW5kIHBhcnNlci4gICovCi0KLS8qCi0gIENhbGwgd2l0 aDoKLSAgICBtID0gMCBmb3Igbm9ybWFsIGJlaGF2aW9yOiBrZWVwIHBhcnNpbmcgYW5kIGV4ZWN1 dGluZyBjb21tYW5kcwotICAgICAgICAgIHVudGlsIGFuIGFjdGlvbiBjb21tYW5kIGlzIHBhcnNl ZCwgdGhlbiByZXR1cm4gd2l0aCBhCi0gICAgICAgICAgS2VybWl0IHN0YXJ0LXN0YXRlIGFzIHRo ZSB2YWx1ZSBvZiB0aGlzIGZ1bmN0aW9uLgotICAgIG0gPSAxIHRvIHBhcnNlIG9ubHkgb25lIGNv bW1hbmQsIGNhbiBhbHNvIGJlIHVzZWQgdG8gY2FsbCBwYXJzZXIoKQotICAgICAgICAgIHJlY3Vy c2l2ZWx5LgotICAgIG0gPSAyIHRvIHJlYWQgYnV0IGRvIG5vdCBleGVjdXRlIG9uZSBjb21tYW5k LgotICBJbiBhbGwgY2FzZXMsIHBhcnNlcigpIHJldHVybnM6Ci0gICAgMCAgICAgaWYgbm8gS2Vy bWl0IHByb3RvY29sIGFjdGlvbiByZXF1aXJlZAotICAgID4gMCAgIHdpdGggYSBLZXJtaXQgcHJv dG9jb2wgc3RhcnQtc3RhdGUuCi0gICAgPCAwICAgdXBvbiBlcnJvci4KLSovCi1pbnQKLXBhcnNl cihtKSBpbnQgbTsgewotICAgIGludCB0ZmNvZGUsIHh4LCB5eSwgeno7ICAgICAgICAgICAgIC8q IFdvcmtlcnMgKi8KLSAgICBpbnQgaXNfdG4gPSAwOwotICAgIGludCBjZGxvc3QgPSAwOwotCi0j aWZuZGVmIE5PU1BMCi0gICAgaW50IGlubGV2ZWw7ICAgICAgICAgICAgICAgICAgICAgICAgLyog TGV2ZWwgd2Ugd2VyZSBjYWxsZWQgYXQgKi8KLSAgICBleHRlcm4gaW50IGFza2ZsYWcsIGVjaG9z dGFyczsKLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgIGNoYXIgKmNicDsgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIENvbW1hbmQgYnVmZmVyIHBvaW50ZXIgKi8KLSNpZmRlZiBNQUMKLSAgICBl eHRlcm4gY2hhciAqbGZpbGVzOyAgICAgICAgICAgICAgICAvKiBGYWtlIGV4dGVybiBjYXN0ICov Ci0jZW5kaWYgLyogTUFDICovCi0gICAgZXh0ZXJuIGludCBpbnRlcnJ1cHRlZDsKLSNpZm5kZWYg Tk9YRkVSCi0gICAgZXh0ZXJuIGludCBzbmRjbWQsIGdldGNtZCwgZmF0YWxpbywgY2xlYXJycTsK LSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmZGVmIEFNSUdBCi0gICAgcmVxcmVzKCk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSBBbWlnYURPUyByZXF1ZXN0b3JzICovCi0j ZW5kaWYgLyogQU1JR0EgKi8KLQotI2lmZGVmIE9TMgotICAgIGlmIChjdXJzb3Jfc2F2ZSA+IC0x KSB7ICAgICAgICAgICAgIC8qIFJlc3RvcmUgY3Vyc29yIGlmIGl0IHdhcyAqLwotICAgICAgICBj dXJzb3JlbmFbVkNNRF0gPSBjdXJzb3Jfc2F2ZTsgIC8qIHR1cm5lZCBvZmYgZHVyaW5nIGZpbGUg dHJhbnNmZXIgKi8KLSAgICAgICAgY3Vyc29yX3NhdmUgPSAtMTsKLSAgICB9Ci0jZW5kaWYgLyog T1MyICovCi0KLSNpZmRlZiBJS1NEQgotICAgIGlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQs IkNPTU1BTkQgUFJPTVBUIiwiIiwiIik7IC8qIElLU0QgZGF0YWJhc2UgKi8KLSNlbmRpZiAvKiBJ S1NEQiAqLwotCi0gICAgaXNfdG4gPSAobG9jYWwgJiYgbmV0d29yayAmJiBJU19URUxORVQoKSkg fHwKLSAgICAgICghbG9jYWwgJiYgc3N0ZWxuZXQpOwotCi0gICAgaWYgKCF4Y21kc3JjKSAgICAg ICAgICAgICAgICAgICAgICAgLyogSWYgYXQgdG9wIChpbnRlcmFjdGl2ZSkgbGV2ZWwgLi4uICov Ci0gICAgICBjb25jYigoY2hhcillc2NhcGUpOyAgICAgICAgICAgICAgLyogcHV0IGNvbnNvbGUg aW4gJ2NicmVhaycgbW9kZS4gKi8KLQotI2lmZGVmIENLX1RNUERJUgotLyogSWYgd2Ugd2VyZSBj ZCdkIHRlbXBvcmFyaWx5IHRvIGFub3RoZXIgZGV2aWNlIG9yIGRpcmVjdG9yeSAuLi4gKi8KLSAg ICBpZiAoZl90bXBkaXIpIHsKLSAgICAgICAgaW50IHg7Ci0gICAgICAgIHggPSB6Y2hkaXIoKGNo YXIgKikgc2F2ZGlyKTsgICAgLyogLi4uIHJlc3RvcmUgcHJldmlvdXMgZGlyZWN0b3J5ICovCi0g ICAgICAgIGZfdG1wZGlyID0gMDsgICAgICAgICAgICAgICAgICAgLyogYW5kIHJlbWVtYmVyIHdl IGRpZCBpdC4gKi8KLSAgICAgICAgZGVidWcoRjExMSwicGFyc2VyIHRtcGRpciByZXN0b3Jpbmci LHNhdmRpcix4KTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfVE1QRElSICovCi0KLSNpZm5kZWYgTk9T UEwKLSAgICBpbmxldmVsID0gY21kbHZsOyAgICAgICAgICAgLyogQ3VycmVudCBtYWNybyBsZXZl bCAqLwotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewotICAgICAgICBkZWJ1ZyhGMTAx LCImcGFyc2VyIGVudHJ5IG1hY2x2bCIsIiIsbWFjbHZsKTsKLSAgICAgICAgZGVidWcoRjEwMSwi JnBhcnNlciBlbnRyeSBpbmxldmVsIiwiIixpbmxldmVsKTsKLSAgICAgICAgZGVidWcoRjEwMSwi JnBhcnNlciBlbnRyeSB0bGV2ZWwiLCIiLHRsZXZlbCk7Ci0gICAgICAgIGRlYnVnKEYxMDEsIiZw YXJzZXIgZW50cnkgY21kbHZsIiwiIixjbWRsdmwpOwotICAgICAgICBkZWJ1ZyhGMTAxLCImcGFy c2VyIGVudHJ5IG0iLCIiLG0pOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotI2VuZGlmIC8q IE5PU1BMICovCi0KLSNpZm5kZWYgTk9YRkVSCi0gICAgZnRyZXNldCgpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogUmVzZXQgZ2xvYmFsIGZpbGUgc2V0dGluZ3MgKi8KLSNlbmRpZiAvKiBO T1hGRVIgKi8KLS8qCi0gIHNzdGF0ZSBiZWNvbWVzIG5vbnplcm8gd2hlbiBhIGNvbW1hbmQgaGFz IGJlZW4gcGFyc2VkIHRoYXQgcmVxdWlyZXMgc29tZQotICBhY3Rpb24gZnJvbSB0aGUgcHJvdG9j b2wgbW9kdWxlLiAgQW55IG5vbi1wcm90b2NvbCBhY3Rpb25zLCBzdWNoIGFzIGxvY2FsCi0gIGRp cmVjdG9yeSBsaXN0aW5nIG9yIHRlcm1pbmFsIGVtdWxhdGlvbiwgYXJlIGludm9rZWQgZGlyZWN0 bHkgZnJvbSBiZWxvdy4KLSovCi0gICAgc3N0YXRlID0gMDsgICAgICAgICAgICAgICAgICAgICAg ICAgLyogU3RhcnQgd2l0aCBubyBzdGFydCBzdGF0ZS4gKi8KLQotI2lmbmRlZiBOT1hGRVIKLSNp Zm5kZWYgTk9TUEwKLSAgICBxdWVyeSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBR VUVSWSBub3QgYWN0aXZlICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZm5kZWYgTk9ISU5UUwot ICAgIGlmICghc3VjY2VzcykgewotICAgICAgICBpZiAobG9jYWwgJiYgIW5ldHdvcmsgJiYgY2Fy cmllciAhPSBDQVJfT0ZGKSB7Ci0gICAgICAgICAgICBpbnQgeDsgICAgICAgICAgICAgICAgICAg ICAgLyogU2VyaWFsIGNvbm5lY3Rpb24gKi8KLSAgICAgICAgICAgIHggPSB0dGdtZG0oKTsgICAg ICAgICAgICAgICAvKiB3aXRoIGNhcnJpZXIgY2hlY2tpbmcgKi8KLSAgICAgICAgICAgIGlmICh4 ID4gLTEpIHsKLSAgICAgICAgICAgICAgICBpZiAoISh4ICYgQk1fRENEKSkgewotICAgICAgICAg ICAgICAgICAgICBjZGxvc3QgPSAxOwotICAgICAgICAgICAgICAgICAgICBmYXRhbGlvID0gMTsK LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0jaWZk ZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKSB7Ci0gICAgICAgIGRlYnVnKEYxMDEsInBhcnNlciB0 b3Agd2hhdCIsIiIsd2hhdCk7Ci0gICAgICAgIGRlYnVnKEYxMDEsInBhcnNlciB0b3AgaW50ZXJy dXB0ZWQiLCIiLGludGVycnVwdGVkKTsKLSAgICAgICAgZGVidWcoRjEwMSwicGFyc2VyIHRvcCBj ZGxvc3QiLCIiLGNkbG9zdCk7Ci0gICAgICAgIGRlYnVnKEYxMDEsInBhcnNlciB0b3Agc25kY21k IiwiIixzbmRjbWQpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJwYXJzZXIgdG9wIGdldGNtZCIsIiIs Z2V0Y21kKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICBpZiAoY2Rsb3N0ICYmICFp bnRlcnJ1cHRlZCAmJiAoc25kY21kIHx8IGdldGNtZCkpIHsKLSAgICAgICAgcHJpbnRmKCI/Q29u bmVjdGlvbiBicm9rZW4gKGNhcnJpZXIgc2lnbmFsIGxvc3QpXG4iKTsKLSAgICB9Ci0gICAgaWYg KHNuZGNtZCAmJiBwcm90b2NvbCA9PSBQUk9UT19LICYmCi0JIXN1Y2Nlc3MgJiYgaGludHMgJiYg IWludGVycnVwdGVkICYmICFmYXRhbGlvICYmICF4Y21kc3JjKSB7Ci0gICAgICAgIGludCB4ID0g MCwgbiA9IDA7Ci0gICAgICAgIHByaW50ZigiXG4qKioqKioqKioqKioqKioqKioqKioqKioqXG4i KTsKLSAgICAgICAgcHJpbnRmKCJTRU5ELWNsYXNzIGNvbW1hbmQgZmFpbGVkLlxuIik7Ci0gICAg ICAgIHByaW50ZigiIFBhY2tldHMgc2VudDogJWRcbiIsIHNwYWNrZXRzKTsKLSAgICAgICAgcHJp bnRmKCIgUmV0cmFuc21pc3Npb25zOiAlZFxuIixyZXRyYW5zKTsKLSAgICAgICAgcHJpbnRmKCIg VGltZW91dHM6ICVkXG4iLCB0aW1lb3V0cyk7Ci0gICAgICAgIHByaW50ZigiIERhbWFnZWQgcGFj a2V0czogJWRcbiIsIGNydW5jaGVkKTsKLSAgICAgICAgaWYgKGVwa3RyY3ZkKSB7Ci0gICAgICAg ICAgICBwcmludGYoIiBUcmFuc2ZlciBjYW5jZWxlZCBieSByZWNlaXZlci5cbiIpOwotICAgICAg ICAgICAgcHJpbnRmKCIgUmVjZWl2ZXIncyBtZXNzYWdlOiBcIiVzXCJcbiIsKGNoYXIgKillcGt0 bXNnKTsKLSAgICAgICAgICAgIG4rKzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlm IChlcGt0bXNnKSBpZiAoKmVwa3Rtc2cpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIiBGYXRh bCBLZXJtaXQgUHJvdG9jb2wgRXJyb3I6ICVzXG4iLGVwa3Rtc2cpOwotICAgICAgICAgICAgICAg IG4rKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAobG9jYWwgJiYgIW5l dHdvcmsgJiYgY2FycmllciAhPSBDQVJfT0ZGKSB7Ci0gICAgICAgICAgICBpbnQgeHg7ICAgICAg ICAgICAgICAgICAgICAgLyogU2VyaWFsIGNvbm5lY3Rpb24gKi8KLSAgICAgICAgICAgIHh4ID0g dHRnbWRtKCk7ICAgICAgICAgICAgICAvKiB3aXRoIGNhcnJpZXIgY2hlY2tpbmcgKi8KLSAgICAg ICAgICAgIGlmICh4eCA+IC0xKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCEoeHggJiBCTV9EQ0Qp KQotICAgICAgICAgICAgICAgICAgY2Rsb3N0ID0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg fQotCi0jaWZkZWYgVU5JWAotICAgICAgICBpZiAoZXJybm8gIT0gMCkKLSNlbmRpZiAvKiBVTklY ICovCi0gICAgICAgICAgewotICAgICAgICAgICAgICBwcmludGYoIiBNb3N0IHJlY2VudCBsb2Nh bCBPUyBlcnJvcjogXCIlc1wiXG4iLGNrX2VycnN0cigpKTsKLSAgICAgICAgICAgICAgbisrOwot ICAgICAgICAgIH0KLSAgICAgICAgcHJpbnRmKAotICAgIlxuSElOVFMuLi4gSWYgdGhlIHByZWNl ZGluZyBlcnJvciBtZXNzYWdlJXMgbm90IGV4cGxhaW4gdGhlIGZhaWx1cmU6XG4iLAotICAgICAg ICAgICAgICAgKG4gPiAxKSA/ICJzIGRvIiA6ICIgZG9lcyIKLSAgICAgICAgICAgICAgICk7Ci0j aWZuZGVmIE5PTE9DQUwKLSAgICAgICAgaWYgKGxvY2FsKSB7Ci0gICAgICAgICAgICBpZiAocnBh Y2tldHMgPT0gMCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiIC4gRGlkIHlvdSBzdGFydCBh IEtlcm1pdCByZWNlaXZlciBvbiB0aGUgZmFyIGVuZD9cbiIpOwotICAgICAgICAgICAgfSBlbHNl IHsKLSAgICAgICAgICAgICAgICBwcmludGYoCi0gICAgICAgICAgICAgICAgIiAuIFRyeSBjaGFu Z2luZyB0aGUgcmVtb3RlIEtlcm1pdCdzIEZMT1ctQ09OVFJPTCBzZXR0aW5nLlxuIik7Ci0gICAg ICAgICAgICAgICAgaWYgKCFuZXR3b3JrICYmIG1kbXR5cCA+IDApCi0gICAgICAgICAgICAgICAg ICBpZiAoKDMgKiBjcnVuY2hlZCkgPiBzcGFja2V0cykKLSAgICAgICAgICAgICAgICAgICAgcHJp bnRmKAotICAgICAgICAgICAgICAgICIgLiBUcnkgcGxhY2luZyBhIG5ldyBjYWxsIHRvIGdldCBh IGNsZWFuZXIgY29ubmVjdGlvbi5cbiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ug aWYgKHJwYWNrZXRzID4gMCkgewotICAgICAgICAgICAgaWYgKGZsb3cgPT0gRkxPX05PTkUpCi0g ICAgICAgICAgICAgcHJpbnRmKCIgLiBHaXZlIG1lIGEgU0VUIEZMT1cgWE9OL1hPRkYgY29tbWFu ZCBhbmQgdHJ5IGFnYWluLlxuIik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgcHJp bnRmKCIgLiBHaXZlIG1lIGEgU0VUIEZMT1cgTk9ORSBjb21tYW5kIGFuZCB0cnkgYWdhaW4uXG4i KTsKLSAgICAgICAgfQotICAgICAgICB4Kys7Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0gICAg ICAgIGlmICgoMyAqIHRpbWVvdXRzKSA+IHNwYWNrZXRzKQotICAgICAgICAgIHByaW50ZigiIC4g QWRqdXN0IHRoZSB0aW1lb3V0IG1ldGhvZCAoc2VlIEhFTFAgU0VUIFNFTkQpLlxuIik7Ci0gICAg ICAgIGlmICgoMyAqIHJldHJhbnMpID4gc3BhY2tldHMpCi0gICAgICAgICAgcHJpbnRmKCIgLiBJ bmNyZWFzZSB0aGUgcmV0cnkgbGltaXQgKHNlZSBIRUxQIFNFVCBSRVRSWSkuXG4iKTsKLQotI2lm ZGVmIENLX1NQRUVECi0gICAgICAgIGlmIChwcmVmaXhpbmcgIT0gUFhfQUxMICYmIHJwYWNrZXRz ID4gMikgewotICAgICAgICAgICAgcHJpbnRmKCIgLiBUcnkgaXQgYWdhaW4gd2l0aDogU0VUIFBS RUZJWElORyBBTExcbiIpOwotICAgICAgICAgICAgeCsrOwotICAgICAgICB9Ci0jZW5kaWYgLyog Q0tfU1BFRUQgKi8KLSNpZmRlZiBTVFJFQU1JTkcKLSAgICAgICAgaWYgKHN0cmVhbWVkKSB7Ci0g ICAgICAgICAgICBwcmludGYoIiAuIFRyeSBpdCBhZ2FpbiB3aXRoOiBTRVQgU1RSRUFNSU5HIE9G RlxuIik7Ci0gICAgICAgICAgICB4Kys7Ci0gICAgICAgIH0gZWxzZSBpZiAocmVsaWFibGUpIHsK LSAgICAgICAgICAgIHByaW50ZigiIC4gVHJ5IGl0IGFnYWluIHdpdGg6IFNFVCBSRUxJQUJMRSBP RkZcbiIpOwotICAgICAgICAgICAgeCsrOwotICAgICAgICB9Ci0jZW5kaWYgLyogU1RSRUFNSU5H ICovCi0KLSNpZmRlZiBDS19TUEVFRAotICAgICAgICBpZiAoY2xlYXJycSA+IDAgJiYgcHJlZml4 aW5nID09IFBYX05PTikgewotICAgICAgICAgICAgcHJpbnRmKCIgLiBUcnkgaXQgYWdhaW4gd2l0 aDogU0VUIENMRUFSLUNIQU5ORUwgT0ZGXG4iKTsKLSAgICAgICAgICAgIHgrKzsKLSAgICAgICAg fQotI2VuZGlmIC8qIENLX1NQRUVEICovCi0gICAgICAgIGlmICghcGFyaXR5KSB7Ci0gICAgICAg ICAgICBwcmludGYoIiAuIFRyeSBpdCBhZ2FpbiB3aXRoOiBTRVQgUEFSSVRZIFNQQUNFXG4iKTsK LSAgICAgICAgICAgIHgrKzsKLSAgICAgICAgfQotICAgICAgICBwcmludGYoIiAuICVzaXZlIGEg Uk9CVVNUIGNvbW1hbmQgYW5kIHRyeSBhZ2Fpbi5cbiIsCi0gICAgICAgICAgICAgICAoeCA+IDAp ID8gIkFzIGEgbGFzdCByZXNvcnQsIGciIDogIkciCi0gICAgICAgICAgICAgICApOwotICAgICAg ICBwcmludGYoIkFsc286XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgLiBCZSBzdXJlIHRoZSBzb3Vy Y2UgZmlsZSBoYXMgcmVhZCBwZXJtaXNzaW9uLlxuIik7Ci0gICAgICAgIHByaW50ZigiIC4gQmUg c3VyZSB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBoYXMgd3JpdGUgcGVybWlzc2lvbi5cbiIpOwotLyoK LSAgICAgICAgaWYgdGhlIGZpbGUgd2FzIDJHIG9yIGxhcmdlciBtYWtlIHN1cmUgb3RoZXIgS2Vy bWl0IHN1cHBvcnRzIExGcy4uLgotKi8KLSAgICAgICAgcHJpbnRmKCIgLiBCZSBzdXJlIHRoZSB0 YXJnZXQgZGlzayBoYXMgc3VmZmljaWVudCBzcGFjZS5cbiIpOwotICAgICAgICBwcmludGYoIihV c2UgU0VUIEhJTlRTIE9GRiB0byBzdXBwcmVzcyBoaW50cy4pXG4iKTsKLSAgICAgICAgcHJpbnRm KCIqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiIpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAx LCJ0b3BjbWQiLCIiLHRvcGNtZCk7Ci0gICAgaWYgKGdldGNtZCAmJiBwcm90b2NvbCA9PSBQUk9U T19LICYmCi0JIXN1Y2Nlc3MgJiYgaGludHMgJiYgIWludGVycnVwdGVkICYmICFmYXRhbGlvICYm ICF4Y21kc3JjKSB7Ci0gICAgICAgIGludCB4ID0gMDsKLSAgICAgICAgZXh0ZXJuIGludCB1cnBz aXosIHdzbG90cjsKLSAgICAgICAgcHJpbnRmKCJcbioqKioqKioqKioqKioqKioqKioqKioqKipc biIpOwotICAgICAgICBwcmludGYoIlJFQ0VJVkUtIG9yIEdFVC1jbGFzcyBjb21tYW5kIGZhaWxl ZC5cbiIpOwotICAgICAgICBwcmludGYoIiBQYWNrZXRzIHJlY2VpdmVkOiAlZFxuIiwgcnBhY2tl dHMpOwotICAgICAgICBwcmludGYoIiBEYW1hZ2VkIHBhY2tldHM6ICVkXG4iLCBjcnVuY2hlZCk7 Ci0gICAgICAgIHByaW50ZigiIFRpbWVvdXRzOiAlZFxuIiwgdGltZW91dHMpOwotICAgICAgICBp ZiAocnBhY2tldHMgPiAwKQotICAgICAgICAgIHByaW50ZigiIFBhY2tldCBsZW5ndGg6ICVkXG4i LCB1cnBzaXopOwotICAgICAgICBpZiAoZXBrdHJjdmQpIHsKLSAgICAgICAgICAgIHByaW50Zigi IFRyYW5zZmVyIGNhbmNlbGVkIGJ5IHNlbmRlci5cbiIpOwotICAgICAgICAgICAgcHJpbnRmKCIg U2VuZGVyJ3MgbWVzc2FnZTogXCIlc1wiXG4iLChjaGFyICopZXBrdG1zZyk7Ci0gICAgICAgIH0K LSNpZmRlZiBVTklYCi0gICAgICAgIGlmIChlcnJubyAhPSAwKQotI2VuZGlmIC8qIFVOSVggKi8K LSAgICAgICAgICBwcmludGYoIiBNb3N0IHJlY2VudCBsb2NhbCBlcnJvcjogXCIlc1wiXG4iLGNr X2VycnN0cigpKTsKLSAgICAgICAgcHJpbnRmKAotICAgIlxuSElOVFMuLi4gSWYgdGhlIHByZWNl ZGluZyBlcnJvciBtZXNzYWdlJXMgbm90IGV4cGxhaW4gdGhlIGZhaWx1cmU6XG4iLAotICAgICAg ICAgICAgICAgZXBrdHJjdmQgPyAicyBkbyIgOiAiIGRvZXMiCi0gICAgICAgICAgICAgICApOwot I2lmbmRlZiBOT0xPQ0FMCi0gICAgICAgIGlmIChsb2NhbCkgewotICAgICAgICAgICAgaWYgKHRv cGNtZCA9PSBYWEdFVCkKLSAgICAgICAgICAgICAgcHJpbnRmKCIgLiBEaWQgeW91IHN0YXJ0IGEg S2VybWl0IFNFUlZFUiBvbiB0aGUgZmFyIGVuZD9cbiIpOwotICAgICAgICAgICAgaWYgKHJwYWNr ZXRzID09IDApIHsKLSAgICAgICAgICAgICAgICBpZiAodG9wY21kICE9IFhYR0VUKQotICAgICAg ICAgICAgICAgICAgcHJpbnRmKCIgLiBEaWQgeW91IHN0YXJ0IGEgS2VybWl0IFNFTkRlciBvbiB0 aGUgZmFyIGVuZD9cbiIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBw cmludGYoCi0gICAgICAgICAgICAgICAgIiAuIENob29zZSBhIGRpZmZlcmVudCBGTE9XLUNPTlRS T0wgc2V0dGluZyBhbmQgdHJ5IGFnYWluLlxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g ZWxzZSBpZiAodG9wY21kID09IFhYR0VUKQotICAgICAgICAgIHByaW50ZigiIC4gSXMgdGhlIG90 aGVyIEtlcm1pdCBpbiAob3IgZG9lcyBpdCBoYXZlKSBTRVJWRVIgbW9kZT9cbiIpOwotICAgICAg ICBpZiAocnBhY2tldHMgPiAwICYmIHVycHNpeiA+IDkwKQotICAgICAgICAgIHByaW50ZigiIC4g VHJ5IHNtYWxsZXIgcGFja2V0cyAoU0VUIFJFQ0VJVkUgUEFDS0VULUxFTkdUSCkuXG4iKTsKLSAg ICAgICAgaWYgKHJwYWNrZXRzID4gMCAmJiB3c2xvdHIgPiAxICYmICFzdHJlYW1lZCkKLSAgICAg ICAgICBwcmludGYoIiAuIFRyeSBhIHNtYWxsZXIgd2luZG93IHNpemUgKFNFVCBXSU5ET1cpLlxu Iik7Ci0gICAgICAgIGlmICghbG9jYWwgJiYgcnBhY2tldHMgPiAwKSB7Ci0gICAgICAgICAgICBp ZiAoZmxvdyA9PSBGTE9fTk9ORSkKLSAgICAgICAgICAgICBwcmludGYoIiAuIEdpdmUgbWUgYSBT RVQgRkxPVyBYT04vWE9GRiBjb21tYW5kIGFuZCB0cnkgYWdhaW4uXG4iKTsKLSAgICAgICAgICAg IGVsc2UKLSAgICAgICAgICAgICBwcmludGYoIiAuIEdpdmUgbWUgYSBTRVQgRkxPVyBOT05FIGNv bW1hbmQgYW5kIHRyeSBhZ2Fpbi5cbiIpOwotICAgICAgICB9Ci0gICAgICAgIHgrKzsKLSNlbmRp ZiAvKiBOT0xPQ0FMICovCi0jaWZkZWYgU1RSRUFNSU5HCi0gICAgICAgIGlmIChzdHJlYW1lZCkg ewotICAgICAgICAgICAgcHJpbnRmKCIgLiBUcnkgaXQgYWdhaW4gd2l0aDogU0VUIFNUUkVBTUlO RyBPRkZcbiIpOwotICAgICAgICAgICAgeCsrOwotICAgICAgICB9IGVsc2UgaWYgKHJlbGlhYmxl ICYmIGxvY2FsKSB7Ci0gICAgICAgICAgICBwcmludGYoIiAuIFRyeSBpdCBhZ2FpbiB3aXRoOiBT RVQgUkVMSUFCTEUgT0ZGXG4iKTsKLSAgICAgICAgICAgIHgrKzsKLSAgICAgICAgfSBlbHNlCi0j ZW5kaWYgLyogU1RSRUFNSU5HICovCi0gICAgICAgIGlmICghcGFyaXR5KSB7Ci0gICAgICAgICAg ICBwcmludGYoIiAuIFRyeSBpdCBhZ2FpbiB3aXRoOiBTRVQgUEFSSVRZIFNQQUNFXG4iKTsKLSAg ICAgICAgICAgIHgrKzsKLSAgICAgICAgfQotICAgICAgICBwcmludGYoKHggPiAwKSA/Ci0gICAg ICAgICAgICAgICAiIC4gQXMgYSBsYXN0IHJlc29ydCwgZ2l2ZSBhIFJPQlVTVCBjb21tYW5kIGFu ZCB0cnkgYWdhaW4uXG4iIDoKLSAgICAgICAgICAgICAgICIgLiBHaXZlIGEgUk9CVVNUIGNvbW1h bmQgYW5kIHRyeSBhZ2Fpbi5cbiIKLSAgICAgICAgICAgICAgICk7Ci0gICAgICAgIHByaW50Zigi QWxzbzpcbiIpOwotICAgICAgICBwcmludGYoIiAuIEJlIHN1cmUgdGhlIHRhcmdldCBkaXJlY3Rv cnkgaGFzIHdyaXRlIHBlcm1pc3Npb24uXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgLiBCZSBzdXJl IHRoZSB0YXJnZXQgZGlzayBoYXMgc3VmZmljaWVudCBzcGFjZS5cbiIpOwotICAgICAgICBwcmlu dGYoIiAuIFRyeSB0ZWxsaW5nIHRoZSAlcyB0byBTRVQgUFJFRklYSU5HIEFMTC5cbiIsCi0gICAg ICAgICAgICAgICB0b3BjbWQgPT0gWFhHRVQgPyAic2VydmVyIiA6ICJzZW5kZXIiCi0gICAgICAg ICAgICAgICApOwotICAgICAgICBwcmludGYoIiAuIFRyeSBnaXZpbmcgYSBST0JVU1QgY29tbWFu ZCB0byB0aGUgJXMuXG4iLAotICAgICAgICAgICAgICAgdG9wY21kID09IFhYR0VUID8gInNlcnZl ciIgOiAic2VuZGVyIgotICAgICAgICAgICAgICAgKTsKLSAgICAgICAgcHJpbnRmKCIoVXNlIFNF VCBISU5UUyBPRkYgdG8gc3VwcHJlc3MgaGludHMuKVxuIik7Ci0gICAgICAgIHByaW50ZigiKioq KioqKioqKioqKioqKioqKioqKioqKlxuXG4iKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9ISU5UUyAq LwotICAgIGdldGNtZCA9IDA7Ci0gICAgc25kY21kID0gMDsKLSAgICBpbnRlcnJ1cHRlZCA9IDA7 Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSAgICB3aGlsZSAoc3N0YXRlID09IDApIHsgICAgICAg ICAgICAgICAvKiBQYXJzZSBjbWRzIHVudGlsIGFjdGlvbiByZXF1ZXN0ZWQgKi8KLSAgICAgICAg ZGVidWcoRjEwMCwicGFyc2UgdG9wIiwiIiwwKTsKLQl3aGF0ID0gV19DT01NQU5EOwkJLyogTm93 IHdlJ3JlIHBhcnNpbmcgY29tbWFuZHMuICovCi0JcmNkYWN0aXZlID0gMDsJCQkvKiBSRU1PVEUg Q0Qgbm90IGFjdGl2ZSAqLwotCWtlZXBhbGxjaGFycyA9IDA7CQkvKiBNSU5QVVQgbm90IGFjdGl2 ZSAqLwotCi0jaWZkZWYgT1MyCi0gICAgICAgIGlmIChhcGNhY3RpdmUgPT0gQVBDX0lOQUNUSVZF KQotICAgICAgICAgIFdhaXRDb21tYW5kTW9kZVNlbSgtMSk7Ci0jZW5kaWYgLyogT1MyICovCi0j aWZkZWYgSUtTX09QVElPTgotICAgICAgICBpZiAoKGxvY2FsICYmCi0gICAgICAgICAgICAgIXhj bWRzcmMgJiYKLSAgICAgICAgICAgICBpc190biAmJgotICAgICAgICAgICAgIFRFTE9QVF9NRShU RUxPUFRfS0VSTUlUKSAmJgotICAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5r ZXJtaXQubWVfc3RhcnQpIHx8Ci0gICAgICAgICAgICAoIWxvY2FsICYmCi0gICAgICAgICAgICAg IWNtZGFkbCAmJgotICAgICAgICAgICAgIFRFTE9QVF9NRShURUxPUFRfS0VSTUlUKSAmJgotICAg ICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQpCi0gICAg ICAgICAgICApIHsKLSAgICAgICAgICAgIHRuX3Npa3MoS0VSTUlUX1NUT1ApOwotICAgICAgICB9 Ci0jZW5kaWYgLyogSUtTX09QVElPTiAqLwotCi0jaWZuZGVmIE5PWEZFUgotICAgICAgICBpZiAo YXV0b3BhdGgpIHsKLSAgICAgICAgICAgIGZucnBhdGggPSBQQVRIX0FVVE87Ci0gICAgICAgICAg ICBhdXRvcGF0aCA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgcmVtZmlsZSA9IDA7ICAgICAgICAg ICAgICAgICAgICAvKiBDbGVhciB0aGVzZSBpbiBjYXNlIFJFTU9URSAqLwotICAgICAgICByZW1h cHBkID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgd2FzIGludGVycnVwdGVkLi4u ICovCi0gICAgICAgIHJlbXBpcGUgPSAwOwotICAgICAgICBtYWtlc3RyKCZzbmRfbW92ZSxnX3Nu ZF9tb3ZlKTsgIC8qIFJlc3RvcmUgdGhlc2UgKi8KLSAgICAgICAgbWFrZXN0cigmcmN2X21vdmUs Z19yY3ZfbW92ZSk7Ci0gICAgICAgIG1ha2VzdHIoJnNuZF9yZW5hbWUsZ19zbmRfcmVuYW1lKTsK LSAgICAgICAgbWFrZXN0cigmcmN2X3JlbmFtZSxnX3Jjdl9yZW5hbWUpOwotI2VuZGlmIC8qIE5P WEZFUiAqLwotCi0gICAgLyogVGFrZSByZXF1ZXN0ZWQgYWN0aW9uIGlmIHRoZXJlIHdhcyBhbiBl cnJvciBpbiB0aGUgcHJldmlvdXMgY29tbWFuZCAqLwotCi0gICAgICAgIHNldGludCgpOwotICAg ICAgICBkZWJ1ZyhGMTAxLCJwYXJzZXIgdGxldmVsIiwiIix0bGV2ZWwpOwotICAgICAgICBkZWJ1 ZyhGMTAxLCJwYXJzZXIgY21kX3Jvd3MiLCIiLGNtZF9yb3dzKTsKLQotI2lmbmRlZiBOT0xPQ0FM Ci0gICAgICAgIGRlYnVnKEYxMDEsInBhcnNlciB3YXNjbG9zZWQiLCIiLHdhc2Nsb3NlZCk7Ci0g ICAgICAgIGlmICh3YXNjbG9zZWQpIHsgICAgICAgICAgICAgICAgLyogSWYgY29ubmVjdGlvbiB3 YXMganVzdCBjbG9zZWQgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgICAgIGludCBrOwotICAg ICAgICAgICAgayA9IG1sb29rKG1hY3RhYiwib25fY2xvc2UiLG5tYWMpOyAvKiBMb29rIHVwICJv bl9jbG9zZSIgKi8KLSAgICAgICAgICAgIGlmIChrID49IDApIHsgICAgICAgICAgICAgICAvKiBJ ZiBmb3VuZCwgKi8KLSAgICAgICAgICAgICAgICAvKiBwcmludGYoIk9OX0NMT1NFIENNRCBMT09Q XG4iKTsgKi8KLSAgICAgICAgICAgICAgICBkb2RvKGssY2tpdG9hKHdoeWNsb3NlZCksMCk7IC8q IFNldCBpdCB1cCAqLwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgICAg ICAgICB3aHljbG9zZWQgPSBXQ19SRU1POwotICAgICAgICAgICAgd2FzY2xvc2VkID0gMDsKLSAg ICAgICAgfQotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmbmRlZiBOT1NQTAotICAgICAgICB4 eGRvdCA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIHRoaXMuLi4gKi8KLQotICAg ICAgICBkZWJ1ZyhGMTAxLCJwYXJzZXIgc3VjY2VzcyIsIiIsc3VjY2Vzcyk7Ci0gICAgICAgIGlm IChzdWNjZXNzID09IDApIHsKLSAgICAgICAgICAgIGlmIChjbWRzdGtbY21kbHZsXS5zcmMgPT0g Q01EX1RGICYmIHRha2VycltjbWRsdmxdKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJDb21t YW5kIGZpbGUgdGVybWluYXRlZCBieSBlcnJvci5cbiIpOwotICAgICAgICAgICAgICAgIHBvcGNs dmwoKTsKLSAgICAgICAgICAgICAgICBpZiAoY21kbHZsID09IDApIHJldHVybigwKTsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjbWRzdGtbY21kbHZsXS5zcmMgPT0gQ01EX01EICYm IG1lcnJvcltjbWRsdmxdKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJDb21tYW5kIGVycm9y OiBtYWNybyB0ZXJtaW5hdGVkLlxuIik7Ci0gICAgICAgICAgICAgICAgcG9wY2x2bCgpOwotICAg ICAgICAgICAgICAgIGlmIChtICYmIChjbWRsdmwgPCBpbmxldmVsKSkKLSAgICAgICAgICAgICAg ICAgIHJldHVybigoaW50KSBzc3RhdGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg ICAgIG51bGNtZCA9IChtID09IDIpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJwYXJzZXIgbnVsY21k IiwiIixudWxjbWQpOwotI2Vsc2UKLSAgICAgICAgaWYgKHN1Y2Nlc3MgPT0gMCAmJiB0bGV2ZWwg PiAtMSAmJiB0YWtlcnJbdGxldmVsXSkgewotICAgICAgICAgICAgcHJpbnRmKCJDb21tYW5kIGZp bGUgdGVybWluYXRlZCBieSBlcnJvci5cbiIpOwotICAgICAgICAgICAgcG9wY2x2bCgpOwotICAg ICAgICAgICAgY21pbmkoY2t4ZWNoKTsgICAgICAgICAgICAgIC8qIENsZWFyIHRoZSBjbWQgYnVm ZmVyLiAqLwotICAgICAgICAgICAgaWYgKHRsZXZlbCA8IDApICAgICAgICAgICAgIC8qIEp1c3Qg cG9wcGVkIG91dCBvZiBjbWQgZmlsZXM/ICovCi0gICAgICAgICAgICAgIHJldHVybigwKTsgICAg ICAgICAgICAgICAgLyogRW5kIG9mIGluaXQgZmlsZSBvciB3aGF0ZXZlci4gKi8KLSAgICAgICAg fQotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZmRlZiBNQUMKLSAgICAgICAgLyogQ2hlY2sgZm9y IFRBS0UgaW5pdGlhdGVkIGJ5IG1lbnUuICovCi0gICAgICAgIGlmICgodGxldmVsID09IC0xKSAm JiBsZmlsZXMpCi0gICAgICAgICAgICBzdGFydGxmaWxlKCk7Ci0jZW5kaWYgLyogTUFDICovCi0K LSAgICAgICAgLyogSWYgaW4gVEFLRSBmaWxlLCBjaGVjayBmb3IgRU9GICovCi0jaWZuZGVmIE5P U1BMCi0jaWZkZWYgTUFDCi0gICAgICAgIGlmCi0jZWxzZQotICAgICAgICB3aGlsZQotI2VuZGlm IC8qIE1BQyAqLwotICAgICAgICAgICgoY21kc3RrW2NtZGx2bF0uc3JjID09IENNRF9URikgIC8q IElmIGVuZCBvZiB0YWtlIGZpbGUgKi8KLSAgICAgICAgICAgICAgICYmICh0bGV2ZWwgPiAtMSkK LSAgICAgICAgICAgICAgICYmIGZlb2YodGZpbGVbdGxldmVsXSkpIHsKLSAgICAgICAgICAgIHBv cGNsdmwoKTsgICAgICAgICAgICAgICAgICAvKiBwb3AgY29tbWFuZCBsZXZlbCAqLwotICAgICAg ICAgICAgY21pbmkoY2t4ZWNoKTsgICAgICAgICAgICAgIC8qIGFuZCBjbGVhciB0aGUgY21kIGJ1 ZmZlci4gKi8KLSAgICAgICAgICAgIGlmIChjbWRsdmwgPT0gMCkgeyAgICAgICAgICAvKiBKdXN0 IHBvcHBlZCBvdXQgb2YgYWxsIGNtZCBmaWxlcz8gKi8KLSAgICAgICAgICAgICAgICByZXR1cm4o MCk7ICAgICAgICAgICAgICAvKiBFbmQgb2YgaW5pdCBmaWxlIG9yIHdoYXRldmVyLiAqLwotICAg ICAgICAgICAgfQotICAgICAgICB9Ci0jaWZkZWYgTUFDCi0gICAgICAgIG1pbmlwYXJzZXIoMSk7 Ci0gICAgICAgIGlmIChzc3RhdGUgPT0gJ2EnKSB7ICAgICAgICAgICAgLyogaWYgY21kLS4gY2Fu Y2VsICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCAicGFyc2VyOiBjYW5jZWwgdGFrZSBkdWUg dG8gc3N0YXRlIiwgIiIsIHNzdGF0ZSk7Ci0gICAgICAgICAgICBzc3RhdGUgPSAnXDAnOwotICAg ICAgICAgICAgZG9zdG9wKCk7Ci0gICAgICAgICAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAg ICAgLyogRW5kIG9mIGluaXQgZmlsZSBvciB3aGF0ZXZlci4gKi8KLSAgICAgICAgfQotI2VuZGlm IC8qICBNQUMgKi8KLQotI2Vsc2UgLyogTk9TUEwgKi8KLSAgICAgICAgaWYgKCh0bGV2ZWwgPiAt MSkgJiYgZmVvZih0ZmlsZVt0bGV2ZWxdKSkgeyAvKiBJZiBlbmQgb2YgdGFrZSAqLwotICAgICAg ICAgICAgcG9wY2x2bCgpOyAgICAgICAgICAgICAgICAgIC8qIFBvcCB1cCBvbmUgbGV2ZWwuICov Ci0gICAgICAgICAgICBjbWluaShja3hlY2gpOyAgICAgICAgICAgICAgLyogYW5kIGNsZWFyIHRo ZSBjbWQgYnVmZmVyLiAqLwotICAgICAgICAgICAgaWYgKHRsZXZlbCA8IDApICAgICAgICAgICAg IC8qIEp1c3QgcG9wcGVkIG91dCBvZiBjbWQgZmlsZXM/ICovCi0gICAgICAgICAgICAgIHJldHVy bigwKTsgICAgICAgICAgICAgICAgLyogRW5kIG9mIGluaXQgZmlsZSBvciB3aGF0ZXZlci4gKi8K LSAgICAgICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0KLQotI2lmbmRlZiBOT1NQTAotICAgICAg ICBkZWJ1ZyhGMTAxLCJwYXJzZXIgY21kbHZsIiwiIixjbWRsdmwpOwotICAgICAgICBkZWJ1ZyhG MTAxLCJwYXJzZXIgY21kc3JjIiwiIixjbWRzdGtbY21kbHZsXS5zcmMpOwotCi0gICAgICAgIGlm IChjbWRzdGtbY21kbHZsXS5zcmMgPT0gQ01EX01EKSB7IC8qIEV4ZWN1dGluZyBhIG1hY3JvPyAq LwotICAgICAgICAgICAgZGVidWcoRjEwMCwicGFyc2VyIG1hY3JvIiwiIiwwKTsKLSAgICAgICAg ICAgIG1hY2x2bCA9IGNtZHN0a1tjbWRsdmxdLmx2bDsgLyogR2V0IGN1cnJlbnQgbGV2ZWwgKi8K LSAgICAgICAgICAgIGRlYnVnKEYxMDEsInBhcnNlciBtYWNsdmwiLCIiLG1hY2x2bCk7Ci0gICAg ICAgICAgICBjYnAgPSBjbWRidWY7ICAgICAgICAgICAgICAgLyogQ29weSBuZXh0IGNtZCB0byBj b21tYW5kIGJ1ZmZlci4gKi8KLSAgICAgICAgICAgICpjYnAgPSBOVUw7Ci0gICAgICAgICAgICBp ZiAoKnNhdmJ1ZikgeyAgICAgICAgICAgICAgLyogSW4gY2FzZSB0aGVuLXBhcnQgb2YgJ2lmJyBj b21tYW5kICovCi0gICAgICAgICAgICAgICAgY2tzdHJuY3B5KGNicCxzYXZidWYsQ01EQkwpOyAv KiB3YXMgc2F2ZWQsIHJlc3RvcmUgaXQuICovCi0gICAgICAgICAgICAgICAgKnNhdmJ1ZiA9ICdc MCc7Ci0gICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgLyogRWxzZSBnZXQg bmV4dCBjbWQgZnJvbSBtYWNybyBkZWYgKi8KLSAgICAgICAgICAgICAgICBpZiAoZ2V0bmNtKGNi cCxDTURCTCkgPCAwKSB7Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgICAgICAgICAgICAgaWYgKGRl YmxvZykgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwicGFyc2VyIGVuZCBv ZiBtYWNybyBtIiwiIixtKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsInBh cnNlciBlbmQgb2YgbWFjcm8gY21kbHZsIiwiIixjbWRsdmwpOwotICAgICAgICAgICAgICAgICAg ICAgICAgZGVidWcoRjEwMSwicGFyc2VyIGVuZCBvZiBtYWNybyBpbmxldmVsIiwiIixpbmxldmVs KTsKLSAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0gICAgICAgICAg ICAgICAgICAgIGlmIChtICYmIChjbWRsdmwgPCBpbmxldmVsKSkKLSAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4oKGludCkgc3N0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSAvKiBp ZiAoIW0pICovIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIGRlYnVnKEYwMTAsIkNNRChNKSIsY21kYnVmLDApOwotCi0gICAgICAgIH0gZWxz ZSBpZiAoY21kc3RrW2NtZGx2bF0uc3JjID09IENNRF9URikKLSNlbHNlCi0gICAgICAgICAgaWYg KHRsZXZlbCA+IC0xKQotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgICAgICAgewotI2lmbmRlZiBO T1NQTAotICAgICAgICAgICAgZGVidWcoRjExMSwicGFyc2VyIHNhdmJ1ZiIsc2F2YnVmLHRsZXZl bCk7Ci0gICAgICAgICAgICBpZiAoKnNhdmJ1ZikgeyAgICAgICAgICAgICAgLyogSW4gY2FzZSBU SEVOLXBhcnQgb2YgSUYgY29tbWFuZCAqLwotICAgICAgICAgICAgICAgIGNrc3RybmNweShjbWRi dWYsc2F2YnVmLENNREJMKTsgLyogd2FzIHNhdmVkLCByZXN0b3JlIGl0LiAqLwotICAgICAgICAg ICAgICAgICpzYXZidWYgPSAnXDAnOwotICAgICAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyogTk9T UEwgKi8KLQotICAgICAgICAgICAgICAvKiBHZXQgbmV4dCBsaW5lIGZyb20gVEFLRSBmaWxlICov Ci0KLSAgICAgICAgICAgICAgaWYgKCh0ZmNvZGUgPSBnZXRuY3QoY21kYnVmLENNREJMLHRmaWxl W3RsZXZlbF0sMCkpIDwgMCkgewotICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwicGFyc2Vy IHRmY29kZSIsdGZpbGVbdGxldmVsXSx0ZmNvZGUpOwotICAgICAgICAgICAgICAgICAgaWYgKHRm Y29kZSA8IC0xKSB7ICAgIC8qIEVycm9yICovCi0gICAgICAgICAgICAgICAgICAgICAgcHJpbnRm KCI/RXJyb3IgaW4gVEFLRSBjb21tYW5kIGZpbGU6ICVzXG4iLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAodGZjb2RlID09IC0yKSA/ICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIiA6 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMaW5lIHRvbyBsb25nIG9yIGNvbnRhaW5z IE5VTCBjaGFyYWN0ZXJzIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAg ICAgICAgICAgICAgICAgIGRvc3RvcCgpOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgIC8qIC0xIG1lYW5zIEVPRiAqLwotICAgICAg ICAgICAgICB9Ci0KLSAgICAgICAgLyogSWYgaW50ZXJhY3RpdmUsIGdldCBuZXh0IGNvbW1hbmQg ZnJvbSB1c2VyLiAqLwotCi0gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAg LyogVXNlciB0eXBlcyBpdCBpbi4gKi8KLSAgICAgICAgICAgIGlmIChwZmxhZykgcHJvbXB0KHh4 c3RyaW5nKTsKLSAgICAgICAgICAgIGNtaW5pKGNreGVjaCk7Ci0gICAgICAgIH0KLQotICAgIC8q IE5vdyB3ZSBrbm93IHdoZXJlIG5leHQgY29tbWFuZCBpcyBjb21pbmcgZnJvbS4gUGFyc2UgYW5k IGV4ZWN1dGUgaXQuICovCi0KLSAgICAgICAgcmVwYXJzID0gMTsgICAgICAgICAgICAgICAgICAg ICAvKiAxID0gY29tbWFuZCBuZWVkcyBwYXJzaW5nICovCi0jaWZuZGVmIE5PWEZFUgotICAgICAg ICBkaXNwbGEgPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIEFzc3VtZSBubyBmaWxlIHRyYW5z ZmVyIGRpc3BsYXkgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotICAgICAgICB3aGlsZSAocmVw YXJzKSB7ICAgICAgICAgICAgICAgIC8qIFBhcnNlIHRoaXMgY21kIHVudGlsIGVudGVyZWQuICov Ci0KLSAgICAgICAgICAgIGRlYnVnKEYxMDEsInBhcnNlciB0b3Agb2Ygd2hpbGUgbG9vcCIsIiIs MCk7Ci0JICAgIHhhc2ttb3JlID0gc2F2ZWFzazsJCS8qIFJlc3RvcmUgZ2xvYmFsIG1vcmUtcHJv bXB0aW5nICovCi0JICAgIGRpcmFjdGl2ZSA9IDA7CQkvKiBESVIgY29tbWFuZCBub3QgYWN0aXZl ICovCi0JICAgIGNkYWN0aXZlID0gMDsJCS8qIENEIGNvbW1hbmQgbm90IGFjdGl2ZSAqLwotI2lm bmRlZiBOT1NQTAotCSAgICBhc2tmbGFnID0gMDsJCS8qIEFTSyBjb21tYW5kIG5vdCBhY3RpdmUg Ki8KLQkgICAgZWNob3N0YXJzID0gMDsJCS8qIE5vciBBU0tRICovCi0JICAgIGRlYm9rID0gMTsJ CQkvKiBVbmRpc2FibGUgZGVidWdnaW5nICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmZGVm IFJFQ1VSU0lWRQotICAgICAgICAgICAgLyogSW4gY2FzZSBvZiAic2VuZCAvcmVjdXJzaXZlIC4v PzxDdHJsLVU+IiBldGMgKi8KLSAgICAgICAgICAgIHJlY3Vyc2l2ZSA9IDA7ICAgICAgICAgICAg ICAvKiBUaGlzIGlzIG5ldmVyIHN0aWNreSAqLwotI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLwotICAg ICAgICAgICAgeGZpbGV0eXBlID0gLTE7ICAgICAgICAgICAgIC8qIFJlc2V0IHRoaXMgYmV0d2Vl biBlYWNoIGNvbW1hbmQgKi8KLSNpZm5kZWYgTk9NU0VORAotICAgICAgICAgICAgYWRkbGlzdCA9 IDA7Ci0jZW5kaWYgLyogTk9NU0VORCAqLwotI2lmZGVmIENLX1JFQ0FMTAotICAgICAgICAgICAg b25fcmVjYWxsID0gMTsKLSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLSAgICAgICAgICAgIC8qIFRo aXMgbWlnaHQgaGF2ZSBiZWVuIGNoYW5nZWQgYnkgYSBzd2l0Y2ggKi8KLSAgICAgICAgICAgIGlm IChnX21hdGNoZG90ID4gLTEpIHsKLSAgICAgICAgICAgICAgICBtYXRjaGRvdCA9IGdfbWF0Y2hk b3Q7Ci0gICAgICAgICAgICAgICAgZ19tYXRjaGRvdCA9IC0xOwotICAgICAgICAgICAgfQotICAg ICAgICAgICAgY21yZXMoKTsgICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IGJ1ZmZlciBwb2lu dGVycy4gKi8KLQotI2lmZGVmIE9TMgotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgIC8qIHdl IGNoZWNrIHRvIHNlZSBpZiBhIG1hY3JvIGlzIHdhaXRpbmcgdG8gYmUgZXhlY3V0ZWQgKi8KLSAg ICAgICAgICAgIC8qIGlmIHNvLCB3ZSBjYWxsIGRvbWFjIG9uIGl0ICovCi0gICAgICAgICAgICBp ZiAoY21kbWFjKSB7Ci0gICAgICAgICAgICAgICAgY2tzdHJuY3B5KGNtZGJ1ZiwgY21kbWFjLCBD TURCTCk7Ci0gICAgICAgICAgICAgICAgZnJlZShjbWRtYWMpOwotICAgICAgICAgICAgICAgIGNt ZG1hYyA9IE5VTEw7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2VuZGlm IC8qIE9TMiAqLwotI2lmbmRlZiBOT1hGRVIKLSAgICAgICAgICAgIGJ5ZV9hY3RpdmUgPSAwOwot I2VuZGlmIC8qIE5PWEZFUiAqLwotICAgICAgICAgICAgaGF2ZXRva2VuID0gMDsKLSAgICAgICAg ICAgIHh4ID0gY21rZXkyKGNtZHRhYixuY21kLCJDb21tYW5kIiwiIix0b2t0YWIseHhzdHJpbmcs MSk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ0b3AtbGV2ZWwgY21rZXkyIiwiIix4eCk7Ci0g ICAgICAgICAgICBpZiAoeHggPT0gLTUpIHsKLSAgICAgICAgICAgICAgICB5eSA9IGNoa3Rvayh0 b2t0YWIpOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsInRvcC1sZXZlbCBjbWtleSB0b2tl biIsIiIseXkpOwotI2lmbmRlZiBDT01NRU5UCi0gICAgICAgICAgICAgICAgLyogRWl0aGVyIHdh eSBtYWtlcyBhYnNvbHV0ZWx5IG5vIGRpZmZlcmVuY2UgKi8KLSAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTEwLCJOTyBVTkdXT1JEIixhdG1idWYsMCk7Ci0gICAgICAgICAgICAgICAgLyogdW5nd29y ZCgpOyAqLwotI2Vsc2UKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJUT0tFTiBVTkdXT1JE IixhdG1idWYsMCk7Ci0gICAgICAgICAgICAgICAgdW5nd29yZCgpOwotI2VuZGlmIC8qIENPTU1F TlQgKi8KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHl5KSB7Ci0gICAgICAgICAgICAgICAgICBj YXNlICcjJzogeHggPSBYWENPTTsgYnJlYWs7IC8qIENvbW1lbnQgKi8KLSAgICAgICAgICAgICAg ICAgIGNhc2UgJzsnOiB4eCA9IFhYQ09NOyBicmVhazsgLyogQ29tbWVudCAqLwotI2lmbmRlZiBO T1NQTAotICAgICAgICAgICAgICAgICAgY2FzZSAnLic6IHh4ID0gWFhERUY7IHh4ZG90ID0gMTsg YnJlYWs7IC8qIEFzc2lnbm1lbnQgKi8KLSAgICAgICAgICAgICAgICAgIGNhc2UgJzonOiB4eCA9 IFhYTEJMOyBicmVhazsgLyogR09UTyBsYWJlbCAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNp Zm5kZWYgTk9QVVNICi0jaWZkZWYgQ0tfUkVESVIKLSAgICAgICAgICAgICAgICAgIGNhc2UgJzwn OgotI2VuZGlmIC8qIENLX1JFRElSICovCi0gICAgICAgICAgICAgICAgICBjYXNlICdAJzoKLSAg ICAgICAgICAgICAgICAgIGNhc2UgJyEnOgotICAgICAgICAgICAgICAgICAgICBpZiAobm9wdXNo KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpzOyBpbnQgeDsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGlmICgoeCA9IGNtdHh0KCJUZXh0IHRvIGJlIGlnbm9yZWQiLCIiLCZzLE5V TEwpKSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAg ICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgeHgg PSBYWENPTTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgIHN3aXRjaCh5eSkgewotI2lmZGVmIENLX1JFRElSCi0gICAgICAgICAgICAgICAgICAg ICAgICAgIGNhc2UgJzwnOiB4eCA9IFhYRlVOOyBicmVhazsgLyogUkVESVJFQ1QgKi8KLSNlbmRp ZiAvKiBDS19SRURJUiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdAJzoKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnISc6IHh4ID0gWFhTSEU7IGJyZWFrOyAvKiBT aGVsbCBlc2NhcGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBOT1BVU0ggKi8K LSNpZmRlZiBDS19SRUNBTEwKLSAgICAgICAgICAgICAgICAgIGNhc2UgJ14nOiB4eCA9IFhYUkVE TzsgIGJyZWFrOwotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotI2lmbmRlZiBOT1NQTAotICAgICAg ICAgICAgICAgICAgY2FzZSAneyc6IHh4ID0gWFhNQUNSTzsgYnJlYWs7Ci0gICAgICAgICAgICAg ICAgICBjYXNlICcoJzogeHggPSBYWFNFWFA7ICBicmVhazsKLSNlbmRpZiAvKiBOT1NQTCAqLwot Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBpZiAoIXF1 aWV0ICYmICFjbWRfZXJyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuP0lu dmFsaWQgLSBcIiVzXCJcbiIsCi0JCQkgICAgICAgY21kZGlzcGxheSgoY2hhciAqKWNtZGJ1Zix4 eCkKLQkJCSAgICAgICApOwotCQkJY21kZXJyKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICAgICAgeHggPSAtMjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgaGF2ZXRva2VuID0gMTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJIQVZFIFRP S0VOIiwiIix4eCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoeHggPiAtMSkgewot ICAgICAgICAgICAgICAgIHRvcGNtZCA9IHh4OyAgICAgICAgICAgIC8qIFRvcC1sZXZlbCBjb21t YW5kIGluZGV4ICovCi0jaWZuZGVmIE5PU1BMCi0gICAgICAgICAgICAgICAgaWYgKG1hY2x2bCA+ IC0xKQotICAgICAgICAgICAgICAgICAgbGFzdGNtZFttYWNsdmxdID0geHg7Ci0jZW5kaWYgLyog Tk9TUEwgKi8KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ0b3BjbWQiLCIiLHRvcGNtZCk7 Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiY21mbGdzIiwiIixjbWZsZ3MpOwotICAgICAg ICAgICAgfQotCi0jaWZuZGVmIE5PU1BMCi0gICAgICAgICAgICAvKiBTcGVjaWFsIGhhbmRsaW5n IGZvciBJRi4uRUxTRSAqLwotCi0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJjbWRsdmwiLCIiLGNt ZGx2bCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJpZmNtZFtjbWRsdmxdIiwiIixpZmNtZFtj bWRsdmxdKTsKLQotICAgICAgICAgICAgaWYgKGlmY21kW2NtZGx2bF0pICAgICAgICAgIC8qIENv dW50IHN0bXRzIGFmdGVyIElGICovCi0gICAgICAgICAgICAgIGlmY21kW2NtZGx2bF0rKzsKLSAg ICAgICAgICAgIGlmIChpZmNtZFtjbWRsdmxdID4gMiAmJiB4eCAhPSBYWEVMUyAmJiB4eCAhPSBY WENPTSkKLSAgICAgICAgICAgICAgaWZjbWRbY21kbHZsXSA9IDA7Ci0KLSAgICAgICAgICAgIC8q IEV4ZWN1dGUgdGhlIGNvbW1hbmQgYW5kIHRha2UgYWN0aW9uIGJhc2VkIG9uIHJldHVybiBjb2Rl LiAqLwotCi0gICAgICAgICAgICBpZiAobnVsY21kKSB7ICAgICAgICAgICAgICAgLyogSWdub3Jp bmcgdGhpcyBjb21tYW5kPyAqLwotICAgICAgICAgICAgICAgIHh4ID0gWFhDT007ICAgICAgICAg ICAgIC8qIE1ha2UgdGhpcyBjb21tYW5kIGEgY29tbWVudC4gKi8KLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIGZuc3VjY2VzcyA9IDE7ICAgICAgICAgICAgICAvKiBGb3IgY2F0Y2hpbmcgXGZ1 bmN0aW9uKCkgZXJyb3JzICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotICAgICAgICAgICAgZGVi dWcoRjEwMSwiY2FsbGluZyBkb2NtZCgpIiwiIix4eCk7Ci0gICAgICAgICAgICB6eiA9IGRvY21k KHh4KTsgICAgICAgICAgICAgLyogUGFyc2UgcmVzdCBvZiBjb21tYW5kICYgZXhlY3V0ZS4gKi8K LQotI2lmbmRlZiBOT1NQTAotCSAgICB7CQkJCS8qIEZvciBcdihsYXN0Y29tbWFuZCkgKi8KLQkJ ZXh0ZXJuIGNoYXIgKiBwcmV2Y21kOwotCQkvKiBUaGUgZXhjZXB0aW9uIGxpc3Qga2luZCBvZiBh IGhhY2sgYnV0IGxldCdzIHRyeSBpdC4uLiAqLwotCQlpZiAoY2tzdHJjbXAoY21kYnVmLCJfZ2V0 YXJnIiw3LDApICYmCi0JCSAgICBja3N0cmNtcChjbWRidWYsImlmICIsMywwKSAmJgotCQkgICAg Y2tzdHJjbXAoY21kYnVmLCJ4aWYgIiw0LDApICYmCi0JCSAgICBja3N0cmNtcChjbWRidWYsImRv IF9pZiIsNiwwKSAmJgotCQkgICAgY2tzdHJjbXAoY21kYnVmLCJfYXNzaWduIF9pZiIsMTEsMCkp Ci0JCSAgY2tzdHJuY3B5KHByZXZjbWQsY21kYnVmLENNREJMKTsKLQkgICAgfQotI2VuZGlmCS8q IE5PU1BMICovCi0KLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgICAgIGlmIChmbmVycm9yICYmICFm bnN1Y2Nlc3MpCi0gICAgICAgICAgICAgIHN1Y2Nlc3MgPSAwOwotI2VuZGlmIC8qIE5PU1BMICov Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJkb2NtZCByZXR1cm5zIiwiIix6eik7Ci0gICAgICAg ICAgICAvKiBkZWJ1ZyhGMDExLCJjbWRidWYiLGNtZGJ1ZiwzMCk7ICovCi0gICAgICAgICAgICAv KiBkZWJ1ZyhGMDExLCJhdG1idWYiLGF0bWJ1ZiwzMCk7ICovCi0jaWZkZWYgTUFDCi0gICAgICAg ICAgICBpZiAodGxldmVsID4gLTEpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3N0YXRlID09ICdh JykgeyAgICAvKiBpZiBjbWQtLiBjYW5jZWwgKi8KLSAgICAgICAgICAgICAgICAgICAgZGVidWco RjExMCwgInBhcnNlcjogY2FuY2VsIHRha2UsIHNzdGF0ZToiLCAiYSIsIDApOwotICAgICAgICAg ICAgICAgICAgICBzc3RhdGUgPSAnXDAnOwotICAgICAgICAgICAgICAgICAgICBkb3N0b3AoKTsK LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKDApOyAgICAgICAgICAvKiBFbmQgb2YgaW5pdCBm aWxlIG9yIHdoYXRldmVyLiAqLwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSNl bmRpZiAvKiBNQUMgKi8KLSAgICAgICAgICAgIHN3aXRjaCAoenopIHsKLSAgICAgICAgICAgICAg Y2FzZSAtNDogICAgICAgICAgICAgICAgICAvKiBFT0YgKGUuZy4gb24gcmVkaXJlY3RlZCBzdGRp bikgKi8KLSAgICAgICAgICAgICAgICBkb2V4aXQoR09PRF9FWElULHhpdHN0YSk7IC8qIC4uLmV4 aXQgc3VjY2Vzc2Z1bGx5ICovCi0gICAgICAgICAgICAgIGNhc2UgLTE6ICAgICAgICAgICAgICAg ICAgLyogUmVwYXJzZSBuZWVkZWQgKi8KLSAgICAgICAgICAgICAgICByZXBhcnMgPSAxOyAgICAg ICAgICAgICAvKiBKdXN0IHNldCByZXBhcnNlIGZsYWcgYW5kLi4uICovCi0gICAgICAgICAgICAg ICAgY29udGludWU7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgIGNhc2UgLTc6ICAgICAgICAg ICAgICAgICAgLyogVGhleSB0eXBlZCBhIGRpc2sgbGV0dGVyICovCi0gICAgICAgICAgICAgICAg aWYgKCF6Y2hkaXIoKGNoYXIgKiljbWRidWYpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBlcnJv cigoY2hhciAqKWNtZGJ1Zik7Ci0gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSAwOwotICAg ICAgICAgICAgICAgIH0gZWxzZSBzdWNjZXNzID0gMTsKLSAgICAgICAgICAgICAgICByZXBhcnMg PSAwOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0jZW5kaWYgLyogT1MyICovCi0gICAg ICAgICAgICAgIGNhc2UgLTY6ICAgICAgICAgICAgICAgICAgLyogSW52YWxpZCBjb21tYW5kIGdp dmVuIHcvbm8gYXJncyAqLwotICAgICAgICAgICAgICBjYXNlIC0yOiB7CQkvKiBJbnZhbGlkIGNv bW1hbmQgZ2l2ZW4gdy9hcmdzICovCi0JCSAgaW50IHggPSAwOwotCQkgIGNoYXIgKiBlb2wgPSAi IjsKLQkJICB4ID0gc3RybGVuKGNtZGJ1Zik7CS8qIEF2b2lkIGJsYW5rIGxpbmUgKi8KLQkJICBp ZiAoeCA+IDApIHsKLQkJICAgICAgaWYgKGNtZGJ1Zlt4LTFdICE9IExGKQotCQkJZW9sID0gIlxu IjsKLQkJICAgICAgcHJpbnRmKCI/SW52YWxpZDogJXMlcyIsCi0JCQkgICAgIGNtZGRpc3BsYXko Y21kYnVmLHh4KSxlb2wKLQkJCSAgICAgKTsKLQkJICB9IGVsc2UKLQkJICAgIHByaW50ZigiP0lu dmFsaWRcbiIpOwotCSAgICAgIH0KLQkgICAgICBjYXNlIC05OgkJCS8qIEJhZCwgZXJyb3IgbWVz c2FnZSBhbHJlYWR5IGRvbmUgKi8KLQkJc3VjY2VzcyA9IDA7Ci0JCWRlYnVnKEYxMTAsInRvcC1s ZXZlbCBjbWtleSBmYWlsZWQiLGNtZGJ1ZiwwKTsKLQkJLyogSWYgaW4gYmFja2dyb3VuZCB3LyBj b21tYW5kcyBjb21pbmcgc3RkaW4sIHRlcm1pbmF0ZSAqLwotCQlpZiAocGZsYWcgPT0gMCAmJiB0 bGV2ZWwgPCAwKQotCQkgIGZhdGFsKCJLZXJtaXQgY29tbWFuZCBlcnJvciBpbiBiYWNrZ3JvdW5k IGV4ZWN1dGlvbiIpOwotLyoKLSAgQ29tbWFuZCByZXRyeSBmZWF0dXJlLCBlZGl0IDE5MC4gIElm IHdlJ3JlIGF0IGludGVyYWN0aXZlIHByb21wdGluZyBsZXZlbCwKLSAgcmVwcm9tcHQgdGhlIHVz ZXIgd2l0aCBhcyBtdWNoIG9mIHRoZSBjb21tYW5kIGFzIGRpZG4ndCBmYWlsLgotKi8KLSNpZmRl ZiBDS19SRUNBTEwKLQkJaWYgKGNtX3JldHJ5ICYmICF4Y21kc3JjKSB7IC8qIElmIGF0IHRvcCBs ZXZlbCAqLwotCQkgICAgaW50IGxlbjsKLQkJICAgIGNoYXIgKnAsICpzOwotCQkgICAgbGVuID0g c3RybGVuKGNtZGJ1Zik7IC8qIExlbmd0aCBvZiBjb21tYW5kIGJ1ZmZlciAqLwotCQkgICAgcCA9 IG1hbGxvYyhsZW4gKyAxKTsgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciBjb3B5ICovCi0JCSAgICBp ZiAocCkgeyAgICAgICAgICAgICAgLyogSWYgd2UgZ290IHRoZSBzcGFjZSBjb3B5ICovCi0JCQlz dHJjcHkocCxjbWRidWYpOyAvKiB0aGUgY29tbWFuZCBidWZmZXIgKFNBRkUpLiAqLwotCQkJLyog Q2hvcCBvZmYgZmluYWwgZmllbGQsIHRoZSBvbmUgdGhhdCBmYWlsZWQuICovCi0JCQlzID0gcCAr IGxlbiAtIDE7ICAgICAgICAgIC8qIFBvaW50IHRvIGVuZCAqLwotCQkJd2hpbGUgKCpzID09IFNQ ICYmIHMgPiBwKSAvKiBUcmltIGJsYW5rcyAqLwotCQkJICBzLS07Ci0JCQl3aGlsZSAoKnMgIT0g U1AgJiYgcyA+IHApIC8qIFRyaW0gbGFzdCBmaWVsZCAqLwotCQkJICBzLS07Ci0JCQlpZiAocyA+ IHApICAgICAgICAvKiBLZWVwIHRoZSBzcGFjZSAqLwotCQkJICBzKys7ICAgICAgICAgICAgLyog YWZ0ZXIgbGFzdCBnb29kIGZpZWxkICovCi0JCQlpZiAocyA+PSBwKSAgICAgICAvKiBDdXQgb2Zm IHJlbWFpbmRlciAqLwotCQkJICAqcyA9IE5VTDsKLQkJCWNtaW5pKGNreGVjaCk7ICAgIC8qIFJl aW5pdGlhbGl6ZSB0aGUgcGFyc2VyICovCi0JCQlja3N0cm5jcHkoY21kYnVmLHAsQ01EQkwpOyAv KiBDb3B5IHJlc3VsdCBiYWNrICovCi0JCQlmcmVlKHApOyAgICAgICAgICAvKiBGcmVlIHRlbXBv cmFyeSBzdG9yYWdlICovCi0JCQlwID0gTlVMTDsKLQkJCXByb21wdCh4eHN0cmluZyk7IC8qIFJl cHJpbnQgdGhlIHByb21wdCAqLwotCQkJcHJpbnRmKCIlcyIsY21kYnVmKTsgLyogUmVwcmludCBw YXJ0aWFsIGNvbW1hbmQgKi8KLQkJCXJlcGFycyA9IDE7ICAgICAgICAgIC8qIEZvcmNlIHJlcGFy c2UgKi8KLQkJCWNvbnRpbnVlOwotCQkgICAgfQotCQl9IGVsc2UKLSNlbmRpZiAvKiBDS19SRUNB TEwgKi8KLQkJICBjbWRlcnIoKTsKLQotCQljbWluaShja3hlY2gpOwkJLyogKGZhbGwgdGhydSkg Ki8KLQotCSAgICAgIGNhc2UgLTM6CQkJLyogRW1wdHkgY29tbWFuZCBPSyBhdCB0b3AgbGV2ZWwg Ki8KLQkJcmVwYXJzID0gMDsJCS8qIERvbid0IG5lZWQgdG8gcmVwYXJzZS4gKi8KLQkJY29udGlu dWU7CQkvKiBHbyBiYWNrIGFuZCBnZXQgYW5vdGhlciBjb21tYW5kLiAqLwotCi0JICAgICAgZGVm YXVsdDoJCQkvKiBDb21tYW5kIHdhcyBzdWNjZXNzZnVsLiAqLwotI2lmbmRlZiBOT1NQTAotCQlk ZWJ1ZyhGMTAxLCJwYXJzZXIgcHJlcGFyaW5nIHRvIGNvbnRpbnVlIiwiIixtYWNsdmwpOwotI2Vu ZGlmIC8qIE5PU1BMICovCi0JCWRlYnVnKEYxMDEsInBhcnNlciBzdWNjZXNzIiwiIixzdWNjZXNz KTsKLQkJcmVwYXJzID0gMDsJCS8qIERvbid0IG5lZWQgdG8gcmVwYXJzZS4gKi8KLQkJY29udGlu dWU7CQkvKiBHbyBiYWNrIGFuZCBnZXQgYW5vdGhlciBjb21tYW5kLiAqLwotCSAgICB9Ci0gICAg ICAgIH0KLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgZGVidWcoRjEwMSwicGFyc2VyIGJyZWFrcyBv dXQgb2Ygd2hpbGUgbG9vcCIsIiIsbWFjbHZsKTsKLSAgICAgICAgaWYgKG0gJiYgKGNtZGx2bCA8 IGlubGV2ZWwpKSAgcmV0dXJuKChpbnQpIHNzdGF0ZSk7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAg ICB9Ci0KLS8qIEdvdCBhbiBhY3Rpb24gY29tbWFuZCwgcmV0dXJuIHN0YXJ0IHN0YXRlLiAqLwot Ci0gICAgcmV0dXJuKChpbnQpIHNzdGF0ZSk7Ci19Ci0KLSNpZm5kZWYgTk9TUEwKLS8qCi0gIE9V VFBVVCBjb21tYW5kLgotICBCdWZmZXJpbmcgYW5kIHBhY2luZyBhZGRlZCBieSBMLkkuIEtpcmJ5 LCA1QSgxODkpLCBKdW5lIDE5OTMuCi0qLwotI2RlZmluZSBPQlNJWkUgODAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFNpemUgb2YgbG9jYWwgY2hhcmFjdGVyIGJ1ZmZlciAqLwotCi1zdGF0aWMg aW50IG9ibjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQnVmZmVyIG9mZnNldCAoaGlnaCB3 YXRlciBtYXJrKSAqLwotc3RhdGljIGNoYXIgb2J1ZltPQlNJWkUrMV07ICAgICAgICAgICAgIC8q IE9VVFBVVCBidWZmZXIuICovCi1zdGF0aWMgY2hhciAqb2JwOyAgICAgICAgICAgICAgICAgICAg ICAgLyogUG9pbnRlciB0byBvdXRwdXQgYnVmZmVyLiAqLwotX1BST1RPVFlQKCBzdGF0aWMgaW50 IG9ib2MsIChjaGFyKSApOwotX1BST1RPVFlQKCBzdGF0aWMgaW50IHh4b3V0LCAoY2hhciAqLCBp bnQpICk7Ci0KLXN0YXRpYyBpbnQKLSNpZmRlZiBDS19BTlNJQwoteHhvdXQoY2hhciAqb2J1Ziwg aW50IG9ic2l6ZSkKLSNlbHNlCi14eG91dChvYnVmLCBvYnNpemUpIGNoYXIgKm9idWY7IGludCBv YnNpemU7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHh4b3V0ICovIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBPVVRQVVQgY29tbWFuZCdzIG91dHB1dCBmdW5jdGlvbiAqLwotICAg IGludCBpLCByYzsKLQotICAgIGRlYnVnKEYxMDEsInh4b3V0IG9ic2l6ZSIsIiIsb2JzaXplKTsK LSAgICBkZWJ1ZyhGMTAxLCJ4eG91dCBwYWNpbmciLCIiLHBhY2luZyk7Ci0gICAgZGVidWcoRjEx MSwieHhvdXQgc3RyaW5nIixvYnVmLHN0cmxlbihvYnVmKSk7Ci0KLSAgICByYyA9IDA7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsIHJldHVybiBjb2RlLiAqLwotICAgIGlm ICghb2J1ZiB8fCAob2JzaXplIDw9IDApKSAgICAgICAgIC8qIE5vdGhpbmcgdG8gb3V0cHV0LiAq LwotICAgICAgZ290byB4eG91dF94OyAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBzdWNj ZXNzZnVsbHkgKi8KLQotICAgIHJjID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogTm93IGFzc3VtZSBmYWlsdXJlICovCi0gICAgaWYgKHBhY2luZyA9PSAwKSB7ICAgICAgICAg ICAgICAgICAgICAvKiBJcyBwYWNpbmcgZW5hYmxlZD8gKi8KLSAgICAgICAgaWYgKChsb2NhbCA/ ICAgICAgICAgICAgICAgICAgICAgIC8qIE5vLCB3cml0ZSBlbnRpcmUgc3RyaW5nIGF0IG9uY2Ug Ki8KLSAgICAgICAgICAgICB0dG9sKChDSEFSICopb2J1Ziwgb2JzaXplKSA6IC8qIHRvIGNvbW11 bmljYXRpb25zIGRldmljZSAqLwotICAgICAgICAgICAgIGNvbnhvKG9ic2l6ZSwgb2J1ZikpICAg ICAgICAgLyogb3IgdG8gY29uc29sZSAqLwotICAgICAgICAgICAgIT0gb2JzaXplKQotICAgICAg ICAgIGdvdG8geHhvdXRfeDsKLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGkgPSAwOyBpIDwg b2JzaXplOyBpKyspIHsgIC8qIFdyaXRlIGluZGl2aWR1YWwgY2hhcnMgKi8KLSAgICAgICAgICAg IGlmICgobG9jYWwgPyB0dG9jKG9idWZbaV0pIDogY29ub2Mob2J1ZltpXSkpIDwgMCkKLSAgICAg ICAgICAgICAgZ290byB4eG91dF94OwotICAgICAgICAgICAgbXNsZWVwKHBhY2luZyk7Ci0gICAg ICAgIH0KLSAgICB9Ci0gICAgaWYgKGR1cGxleCkgewotI2lmZGVmIE9TMgotICAgICAgICBpZiAo aW5lY2hvICYmIGxvY2FsKSB7Ci0jaWZuZGVmIE5PTE9DQUwKLSAgICAgICAgICAgIGZvciAoaSA9 IDA7IGkgPCBvYnNpemU7IGkrKykgeyAvKiBXcml0ZSB0byBlbXVsYXRvciAqLwotICAgICAgICAg ICAgICAgIHNjcmlwdHdydGJ1ZigoVVNIT1JUKW9idWZbaV0pOyAvKiB3aGljaCBhbHNvIGxvZ3Mg c2Vzc2lvbiAqLwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSAgICAgICAg ICAgIGNvbnhvKG9ic2l6ZSxvYnVmKTsKLSAgICAgICAgfSBlbHNlIGlmIChzZXNsb2cpIHsgICAg ICAgICAgICAvKiBvciBsb2cgc2Vzc2lvbiBoZXJlICovCi0gICAgICAgICAgICBsb2dzdHIoKGNo YXIgKikgb2J1Ziwgb2JzaXplKTsKLSAgICAgICAgfQotI2Vsc2UgLyogT1MyICovCi0gICAgICAg IGlmIChzZXNsb2cpIHsKLSAgICAgICAgICAgIGxvZ3N0cigoY2hhciAqKSBvYnVmLCBvYnNpemUp OwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbmVjaG8gJiYgbG9jYWwpIHsKLSAgICAgICAgICAg IGNvbnhvKG9ic2l6ZSxvYnVmKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIE9TMiAqLwotICAgIH0K LSAgICByYyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdWNjZXNzICovCi0g IHh4b3V0X3g6Ci0gICAgb2JuID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVz ZXQgY291bnQgKi8KLSAgICBvYnAgPSBvYnVmOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBh bmQgcG9pbnRlcnMgKi8KLSAgICByZXR1cm4ocmMpOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiByZXR1cm4gb3VyIHJldHVybiBjb2RlICovCi19Ci0KLSNpZmRlZiBDT01NRU5UCi0vKgotICBN YWNyb3MgZm9yIE9VVFBVVCBjb21tYW5kIGV4ZWN1dGlvbiwgdG8gbWFrZSBpdCBnbyBmYXN0ZXIu Ci0qLwotI2RlZmluZSBvYmZscygpICgoeHhvdXQob2J1ZixvYm4pPDApPy0xOjApCi0jZGVmaW5l IG9ib2MoYykgKCgqb2JwKys9KGNoYXIpKGMpKSwqb2JwPTAsKCgoKytvYm4pPj1PQlNJWkUpP29i ZmxzKCk6MCkpCi0KLSNlbHNlIC8qIFRoZSBtYWNyb3MgY2F1c2Ugc29tZSBjb21waWxlcnMgdG8g Z2VuZXJhdGUgYmFkIGNvZGUuICovCi0KLXN0YXRpYyBpbnQKLSNpZmRlZiBDS19BTlNJQwotb2Jv YyhjaGFyIGMpCi0jZWxzZQotb2JvYyhjKSBjaGFyIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8K LS8qIG9ib2MgKi8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPVVRQVVQgY29tbWFu ZCdzIG91dHB1dCBmdW5jdGlvbiAqLwotCi0gICAgKm9icCsrID0gYzsgICAgICAgICAgICAgICAg ICAgICAgICAgLyogRGVwb3NpdCBjaGFyYWN0ZXIgKi8KLSAgICAqb2JwID0gTlVMOyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBGbHVzaCBidWZmZXIgaWYgaXQncyBub3cgZnVsbCAqLwotCi0g ICAgcmV0dXJuKCgoKytvYm4pID49IE9CU0laRSkgPyB4eG91dChvYnVmLG9ibikgOiAwKTsKLX0K LSNlbmRpZiAvKiBDT01NRU5UICovCi0KLS8qICBSb3V0aW5lcyBmb3IgaGFuZGxpbmcgbG9jYWwg dmFyaWFibGVzIC0tIGFsc28gc2VlIHBvcGNsdmwoKS4gICovCi0KLVZPSUQKLWZyZWVsb2NhbCht KSBpbnQgbTsgeyAgICAgICAgICAgICAgICAgICAvKiBGcmVlIGxvY2FsIHZhcmlhYmxlcyAqLwot ICAgIHN0cnVjdCBsb2NhbHZhciAqIHYsICogdHY7ICAgICAgICAgIC8qIGF0IG1hY3JvIGxldmVs IG0uLi4gKi8KLSAgICBkZWJ1ZyhGMTAxLCJmcmVlbG9jYWwgbGV2ZWwiLCIiLG0pOwotICAgIGlm IChtIDwgMCkgcmV0dXJuOwotICAgIHYgPSBsb2NhbGhlYWRbbV07ICAgICAgICAgICAgICAgICAg IC8qIExpc3QgaGVhZCBmb3IgbGV2ZWwgbSAqLwotICAgIHdoaWxlICh2KSB7Ci0gICAgICAgIGlm ICh2LT5sdl9uYW1lKSAgICAgICAgICAgICAgICAgLyogVmFyaWFibGUgbmFtZSAqLwotICAgICAg ICAgIGZyZWUodi0+bHZfbmFtZSk7Ci0gICAgICAgIGlmICh2LT5sdl92YWx1ZSkgICAgICAgICAg ICAgICAgLyogVmFsdWUgKi8KLSAgICAgICAgICBmcmVlKHYtPmx2X3ZhbHVlKTsKLSAgICAgICAg dHYgPSB2OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTYXZlIHBvaW50ZXIgdG8gdGhpcyBu b2RlICovCi0gICAgICAgIHYgPSB2LT5sdl9uZXh0OyAgICAgICAgICAgICAgICAgLyogR2V0IG5l eHQgb25lICovCi0gICAgICAgIGlmICh0dikgICAgICAgICAgICAgICAgICAgICAgICAgLyogRnJl ZSB0aGlzIG9uZSAqLwotICAgICAgICAgIGZyZWUoKGNoYXIgKil0dik7Ci0gICAgfQotICAgIGxv Y2FsaGVhZFttXSA9IChzdHJ1Y3QgbG9jYWx2YXIgKikgTlVMTDsgLyogRG9uZSwgc2V0IGxpc3Qg aGVhZCB0byBOVUxMICovCi19Ci0KLSNkZWZpbmUgTUFYTE9DQUxWQVIgNjQKLQotLyogUmV0dXJu IGEgcG9pbnRlciB0byB0aGUgZGVmaW5pdGlvbiBvZiBhIHVzZXItZGVmaW5lZCB2YXJpYWJsZSAq LwotCi1zdGF0aWMgY2hhciAqCi12YXJkZWYocyxpc2FycmF5LHgxLHgyKSBjaGFyICogczsgaW50 ICogaXNhcnJheSwgKiB4MSwgKiB4MjsgewotICAgIGNoYXIgKiBwOwotICAgIGNoYXIgYzsKLSAg ICAqaXNhcnJheSA9IDA7Ci0gICAgaWYgKCFzKSByZXR1cm4oTlVMTCk7Ci0gICAgaWYgKCEqcykg cmV0dXJuKE5VTEwpOwotICAgIHAgPSBzOwotICAgIGlmICgqcyA9PSBDTURRKSB7Ci0gICAgICAg IHArKzsKLSAgICAgICAgaWYgKCEqcCkKLSAgICAgICAgICByZXR1cm4oTlVMTCk7Ci0gICAgICAg IGlmICgoYyA9ICpwKSA9PSAnJScpIHsgICAgICAgICAgLyogU2NhbGFyIHZhcmlhYmxlLiAqLwot ICAgICAgICAgICAgYyA9ICorK3A7ICAgICAgICAgICAgICAgICAgIC8qIEdldCBJRCBjaGFyYWN0 ZXIuICovCi0gICAgICAgICAgICBwID0gIiI7ICAgICAgICAgICAgICAgICAgICAgLyogQXNzdW1l IGRlZmluaXRpb24gaXMgZW1wdHkgKi8KLSAgICAgICAgICAgIGlmICghYykKLSAgICAgICAgICAg ICAgcmV0dXJuKE5VTEwpOwotICAgICAgICAgICAgaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB7 IC8qIERpZ2l0IGZvciBtYWNybyBhcmcgKi8KLSAgICAgICAgICAgICAgICBpZiAobWFjbHZsIDwg MCkgICAgICAgICAvKiBEaWdpdCB2YXJpYWJsZXMgYXJlIGdsb2JhbCAqLwotICAgICAgICAgICAg ICAgICAgcmV0dXJuKGdfdmFyW2NdKTsgICAgIC8qIGlmIG5vIG1hY3JvIGlzIGFjdGl2ZSAqLwot ICAgICAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgIC8qIG90aGVyd2lzZSAqLwot ICAgICAgICAgICAgICAgICAgcmV0dXJuKG1fYXJnW21hY2x2bF1bYyAtICcwJ10pOyAvKiB0aGV5 J3JlIG9uIHRoZSBzdGFjayAqLwotICAgICAgICAgICAgfSBlbHNlIGlmIChpc2FscGhhKGMpKSB7 Ci0gICAgICAgICAgICAgICAgaWYgKGlzdXBwZXIoYykpIGMgLT0gKCdhJy0nQScpOwotICAgICAg ICAgICAgICAgIHJldHVybihnX3ZhcltjXSk7ICAgICAgICAgICAvKiBMZXR0ZXIgZm9yIGdsb2Jh bCB2YXJpYWJsZSAqLwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgIHJldHVybihO VUxMKTsKLSAgICAgICAgfSBlbHNlIGlmIChjID09ICcmJykgeyAgICAgICAgICAvKiBBcnJheSBy ZWZlcmVuY2UuICovCi0gICAgICAgICAgICBpbnQgeCwgdmJpLCBkOwotICAgICAgICAgICAgeCA9 IGFycmF5bmFtKHAsJnZiaSwmZCk7ICAgIC8qIEdldCBuYW1lIGFuZCBzdWJzY3JpcHQgKi8KLSAg ICAgICAgICAgIGlmICh4ID4gLTEgfHwgZCA9PSAtMTcpIHsKLSAgICAgICAgICAgICAgICAqaXNh cnJheSA9IDE7Ci0gICAgICAgICAgICAgICAgKngxID0gdmJpOwotICAgICAgICAgICAgICAgICp4 MiA9IChkID09IC0xNykgPyAwIDogZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh4 IDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKE5VTEwpOwotICAgICAgICAgICAgaWYgKGNoa2Fy cmF5KHZiaSxkKSA+PSAwKSB7CS8qIEFycmF5IGlzIGRlY2xhcmVkPyAqLwotICAgICAgICAgICAg ICAgIHZiaSAtPSBBUlJBWUJBU0U7ICAgICAgIC8qIENvbnZlcnQgbmFtZSB0byBpbmRleCAqLwot ICAgICAgICAgICAgICAgIGlmIChhX2RpbVt2YmldID49IGQpIHsgIC8qIElmIHN1YnNjcmlwdCBp biByYW5nZSAqLwotICAgICAgICAgICAgICAgICAgICBjaGFyICoqYXA7Ci0gICAgICAgICAgICAg ICAgICAgIGFwID0gYV9wdHJbdmJpXTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKChhcCkg PyBhcFtkXSA6IE5VTEwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg ICAgfQotICAgICAgICByZXR1cm4oTlVMTCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW50IGs7 Ci0gICAgICAgIGsgPSBteGxvb2sobWFjdGFiLHMsbm1hYyk7Ci0gICAgICAgIHJldHVybigoayA+ IC0xKSA/IG1hY3RhYltrXS5tdmFsIDogTlVMTCk7Ci0gICAgfQotfQotCi0KLWludAotYWRkbG9j YWwocCkgY2hhciAqIHA7IHsKLSAgICBpbnQgeCwgeiwgaXNhcnJheSA9IDA7Ci0gICAgY2hhciAq IHM7Ci0gICAgc3RydWN0IGxvY2FsdmFyICogdiwgKnByZXYgPSAoc3RydWN0IGxvY2FsdmFyICop TlVMTDsKLSAgICBleHRlcm4gaW50IHRyYV9hc2c7IGludCB0cmFfdG1wOwotCi0gICAgdHJhX3Rt cCA9IHRyYV9hc2c7Ci0KLSAgICBzID0gdmFyZGVmKHAsJmlzYXJyYXksJngsJnopOyAgICAgICAv KiBHZXQgZGVmaW5pdGlvbiBvZiB2YXJpYWJsZSAqLwotICAgIGlmIChpc2FycmF5KSB7ICAgICAg ICAgICAgICAgICAgICAgIC8qIEFycmF5cyBhcmUgaGFuZGxlZCBzcGVjaWFsbHkgKi8KLSAgICAg ICAgcHVzaGFycmF5KHgseik7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0gICAgaWYgKCFz KSBzID0gIiI7Ci0gICAgaWYgKCh2ID0gbG9jYWxoZWFkW2NtZGx2bF0pKSB7ICAgICAgLyogQWxy ZWFkeSBoYXZlIHNvbWUgYXQgdGhpcyBsZXZlbD8gKi8KLSAgICAgICAgd2hpbGUgKHYpIHsgICAg ICAgICAgICAgICAgICAgICAvKiBGaW5kIGVuZCBvZiBsaXN0ICovCi0gICAgICAgICAgICBwcmV2 ID0gdjsKLSAgICAgICAgICAgIHYgPSB2LT5sdl9uZXh0OwotICAgICAgICB9Ci0gICAgfQotICAg IHYgPSAoc3RydWN0IGxvY2FsdmFyICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IGxvY2FsdmFyKSk7 Ci0gICAgaWYgKCF2KSB7Ci0gICAgICAgIHByaW50ZigiP0ZhaWx1cmUgdG8gYWxsb2NhdGUgc3Rv cmFnZSBmb3IgbG9jYWwgdmFyaWFibGVzIik7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfQot ICAgIGlmICghbG9jYWxoZWFkW2NtZGx2bF0pICAgICAgICAgICAgIC8qIElmIGZpcnN0LCBzZXQg bGlzdCBoZWFkICovCi0gICAgICBsb2NhbGhlYWRbY21kbHZsXSA9IHY7Ci0gICAgZWxzZSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlIGxpbmsgcHJldmlvdXMgdG8g dGhpcyAqLwotICAgICAgcHJldi0+bHZfbmV4dCA9IHY7Ci0gICAgcHJldiA9IHY7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogQW5kIG1ha2UgdGhpcyBwcmV2aW91cyAqLwotICAgIHYtPmx2 X25leHQgPSAoc3RydWN0IGxvY2FsdmFyICopIE5VTEw7IC8qIE5vIG5leHQgeWV0ICovCi0KLSAg ICBpZiAoISh2LT5sdl9uYW1lID0gKGNoYXIgKikgbWFsbG9jKChpbnQpIHN0cmxlbihwKSArIDEp KSkKLSAgICAgIHJldHVybigtMSk7Ci0gICAgc3RyY3B5KHYtPmx2X25hbWUsIHApOyAgICAgICAg ICAgICAgLyogQ29weSBuYW1lIGludG8gbmV3IG5vZGUgKFNBRkUpICovCi0KLSAgICBpZiAoKnMp IHsKLSAgICAgICAgaWYgKCEodi0+bHZfdmFsdWUgPSAoY2hhciAqKSBtYWxsb2MoKGludCkgc3Ry bGVuKHMpICsgMSkpKQotICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIHN0cmNweSh2LT5s dl92YWx1ZSwgcyk7ICAgICAgICAgLyogQ29weSB2YWx1ZSBpbnRvIG5ldyBub2RlIChTQUZFKSAq LwotICAgIH0gZWxzZQotICAgICAgdi0+bHZfdmFsdWUgPSBOVUxMOwotCi0gICAgdHJhX2FzZyA9 IDA7Ci0gICAgZGVsbWFjKHAsMSk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsZXRlIHRo ZSBvcmlnaW5hbCBtYWNybyAqLwotICAgIHRyYV9hc2cgPSB0cmFfdG1wOwotICAgIHJldHVybigw KTsKLX0KLQotaW50Ci1kb2xvY2FsKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog RG8gdGhlIExPQ0FMIGNvbW1hbmQgKi8KLSAgICBpbnQgaSwgeDsKLSAgICBjaGFyICogczsKLSAg ICBjaGFyICogbGlzdFtNQVhMT0NBTFZBUisyXTsgICAgICAgICAvKiBVcCB0byA2NCB2YXJpYWJs ZXMgcGVyIGxpbmUgKi8KLQotICAgIGlmICgoeCA9IGNtdHh0KCJWYXJpYWJsZSBuYW1lKHMpIiwi IiwmcyxOVUxMKSkgPCAwKQotICAgICAgcmV0dXJuKHgpOwotCi0gICAgeHdvcmRzKHMsTUFYTE9D QUxWQVIsbGlzdCwwKTsgICAgICAgLyogQnJlYWsgdXAgbGluZSBpbnRvICJ3b3JkcyIgKi8KLQot ICAgIC8qIE5vdGU6IEFycmF5cyBkbyBub3QgdXNlIHRoZSBsb2NhbGhlYWQgbGlzdCwgYnV0IGhh dmUgdGhlaXIgb3duIHN0YWNrICovCi0KLSAgICBmb3IgKGkgPSAxOyBpIDwgTUFYTE9DQUxWQVIg JiYgbGlzdFtpXTsgaSsrKSB7IC8qIEdvIHRocm91Z2ggdGhlIGxpc3QgKi8KLSAgICAgICAgaWYg KGFkZGxvY2FsKGxpc3RbaV0pIDwgMCkKLSAgICAgICAgICBnb3RvIGxvY2FsYmFkOwotICAgIH0K LSAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0gIGxvY2FsYmFkOgotICAgIHByaW50ZigiP0Zh aWx1cmUgdG8gYWxsb2NhdGUgc3RvcmFnZSBmb3IgbG9jYWwgdmFyaWFibGVzIik7Ci0gICAgZnJl ZWxvY2FsKGNtZGx2bCk7Ci0gICAgcmV0dXJuKC05KTsKLX0KLQotLyogIEQgTyBPIFUgVCBQIFUg VCAgLS0gIFJldHVybnMgMCBvbiBmYWlsdXJlLCAxIG9uIHN1Y2Nlc3MgKi8KLQotI2lmbmRlZiBO T0tWRVJCUwotI2RlZmluZSBLX0JVRkxFTiAzMAotI2RlZmluZSBTRU5EX0JVRkxFTiAyNTUKLSNk ZWZpbmUgc2VuZGJ1ZmQoeCkgeyBvc2VuZGJ1ZltzZW5kbmR4KytdID0geDtcCi0gaWYgKHNlbmRu ZHggPT0gU0VORF9CVUZMRU4pIHtkb291dHB1dChzLGN4KTsgc2VuZG5keCA9IDA7fX0KLSNlbmRp ZiAvKiBOT0tWRVJCUyAqLwotCi1pbnQgb3V0ZXNjID0gMTsgICAgICAgICAgICAgICAgICAgICAg ICAgLyogUHJvY2VzcyBzcGVjaWFsIE9VVFBVVCBlc2NhcGVzICovCi0KLWludAotZG9vdXRwdXQo cywgY3gpIGNoYXIgKnM7IGludCBjeDsgewotI2lmZGVmIFNTSEJVSUxUSU4KLSAgICBleHRlcm4g aW50IHNzaF9jYXM7Ci0gICAgZXh0ZXJuIGNoYXIgKiBzc2hfY21kOwotI2VuZGlmIC8qIFNTSEJV SUxUSU4gKi8KLSAgICBpbnQgeCwgeHgsIHksIHF1b3RlOyAgICAgICAgICAgICAgICAvKiBXb3Jr ZXJzICovCi0gICAgaW50IGlzX3RuID0gMDsKLQotICAgIGlzX3RuID0gKGxvY2FsICYmIG5ldHdv cmsgJiYgSVNfVEVMTkVUKCkpIHx8Ci0gICAgICAoIWxvY2FsICYmIHNzdGVsbmV0KTsKLQotICAg IGRlYnVnKEYxMTEsImRvb3V0cHV0IHMiLHMsKGludClzdHJsZW4ocykpOwotCi0gICAgaWYgKGxv Y2FsKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29uZGl0aW9uIGV4dGVybmFsIGxpbmUg Ki8KLSNpZmRlZiBOT0xPQ0FMCi0gICAgICAgIGdvdG8gb3V0ZXJyOwotI2Vsc2UKLQlpZiAodHRj aGsoKSA8IDApIHsKLQkgICAgaWYgKCFuZXR3b3JrKSB7Ci0JCWlmIChjYXJyaWVyICE9IENBUl9P RkYpIHsKLQkJICAgIGludCB4OwotCQkgICAgeCA9IHR0Z21kbSgpOwotCQkgICAgaWYgKCh4ID4g LTEpICYmICgoeCAmIEJNX0RDRCkgPT0gMCkpIHsKLQkJCXByaW50ZigKLSI/Q2FycmllciBzaWdu YWwgcmVxdWlyZWQgYnV0IG5vdCBwcmVzZW50IC0gVHJ5IFNFVCBDQVJSSUVSLVdBVENIIE9GRi5c biIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0JCQlyZXR1cm4oMCk7Ci0JCSAg ICB9Ci0JCX0gZWxzZSB7Ci0JCSAgICBwcmludGYoCi0iP1Byb2JsZW0gd2l0aCBzZXJpYWwgcG9y dCBvciBtb2RlbSBvciBjYWJsZSAtIFRyeSBTSE9XIENPTU1VTklDQVRJT05TLlxuIgotICAgICAg ICAgICAgICAgICAgICAgICAgICApOwotCQkgICAgcmV0dXJuKDApOwotCQl9Ci0JICAgIH0KLQkg ICAgcHJpbnRmKCI/Q29ubmVjdGlvbiAlcyAlcyBpcyBub3Qgb3BlbiBvciBub3QgZnVuY3Rpb25p bmcuXG4iLAotCQkgICBuZXR3b3JrID8gInRvIiA6ICJvbiIsCi0JCSAgIHR0bmFtZQotCQkgICAp OwotCSAgICByZXR1cm4oMCk7Ci0JfQotICAgICAgICBpZiAodHR2dChzcGVlZCxmbG93KSA8IDAp IHsKLSAgICAgICAgICAgIHByaW50ZigiP09VVFBVVCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7 Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT0xPQ0FMICov Ci0gICAgfQotI2lmZGVmIFNTSEJVSUxUSU4KLSAgICBpZiAoIG5ldHdvcmsgJiYgbmV0dHlwZSA9 PSBORVRfU1NIICYmIHNzaF9jYXMgJiYgc3NoX2NtZCAmJiAKLSAgICAgICAgICEoc3RyY21wKHNz aF9jbWQsImtlcm1pdCIpICYmIHN0cmNtcChzc2hfY21kLCJzZnRwIikpKSB7Ci0gICAgICAgIGlm ICghcXVpZXQpCi0gICAgICAgICAgICBwcmludGYoIj9TU0ggU3Vic3lzdGVtIGFjdGl2ZTogJXNc biIsIHNzaF9jbWQpOwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIFNTSEJV SUxUSU4gKi8KLQotICAgIGlmICghY21kZ3F1bygpKSB7ICAgICAgICAgICAgICAgICAgIC8qIENP TU1BTkQgUVVPVElORyBPRkYgKi8KLSAgICAgICAgeCA9IHN0cmxlbihzKTsgICAgICAgICAgICAg ICAgICAvKiBKdXN0IHNlbmQgdGhlIHN0cmluZyBsaXRlcmFsbHkgKi8KLSAgICAgICAgeHggPSBs b2NhbCA/IHR0b2woKENIQVIgKilzLHgpIDogY29ueG8oeCxzKTsKLSAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAoeHggPT0geCkgPyAxIDogMCk7Ci0gICAgfQotICAgIHF1b3RlID0gMDsgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgYmFja3NsYXNoIChcKSBxdW90ZSAqLwot ICAgIG9ibiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IGNvdW50ICov Ci0gICAgb2JwID0gb2J1ZjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogYW5kIHBvaW50ZXJz ICovCi0KLSAgb3V0YWdhaW46Ci0gICAgd2hpbGUgKCh4ID0gKnMrKykpIHsgICAgICAgICAgICAg ICAgLyogTG9vcCB0aHJvdWdoIHRoZSBzdHJpbmcgKi8KLSAgICAgICAgeSA9IDA7ICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBFcnJvciBjb2RlLCAwID0gbm8gZXJyb3IuICovCi0gICAgICAg IGRlYnVnKEYwMDAsImRvb3V0cHV0IiwiIix4KTsKLSAgICAgICAgaWYgKHF1b3RlKSB7ICAgICAg ICAgICAgICAgICAgICAvKiBUaGlzIGNoYXJhY3RlciBpcyBxdW90ZWQgKi8KLSNpZm5kZWYgTk9L VkVSQlMKLSAgICAgICAgICAgaWYgKHggPT0gJ2snIHx8IHggPT0gJ0snKSB7ICAvKiBcayBvciBc SyAqLwotICAgICAgICAgICAgICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIga3ZlcmJzW107Ci0gICAg ICAgICAgICAgICBleHRlcm4gaW50IG5rdmVyYnM7Ci0gICAgICAgICAgICAgICBleHRlcm4gY2hh ciAqIGtleWRlZnB0cjsKLSAgICAgICAgICAgICAgIGV4dGVybiBpbnQga2V5bWFjOwotICAgICAg ICAgICAgICAgZXh0ZXJuIGludCBrZXltYWN4OwotICAgICAgICAgICAgICAgaW50IHgsIHksIGJy YWNlID0gMDsKLSAgICAgICAgICAgICAgIGludCBwYXVzZTsKLSAgICAgICAgICAgICAgIGNoYXIg KiBwLCAqIGI7Ci0gICAgICAgICAgICAgICBjaGFyIGtidWZbS19CVUZMRU4gKyAxXTsgLyogS2V5 IHZlcmIgbmFtZSBidWZmZXIgKi8KLSAgICAgICAgICAgICAgIGNoYXIgb3NlbmRidWZbU0VORF9C VUZMRU4gKzFdOwotICAgICAgICAgICAgICAgaW50ICBzZW5kbmR4ID0gMDsKLQotICAgICAgICAg ICAgICAgaWYgKHh4b3V0KG9idWYsb2JuKSA8IDApIC8qIEZsdXNoIGJ1ZmZlciAqLwotICAgICAg ICAgICAgICAgICBnb3RvIG91dGVycjsKLSAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsIk9VVFBV VCBLVkVSQiIsIiIsMCk7IC8qIFNlbmQgYSBLVkVSQiAqLwotICAgICAgICAgICAgICAgeyAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEhhdmUgSyB2ZXJiPyAqLwotICAgICAgICAgICAgICAgICAg IGlmICghKnMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg ICAgICAgfQotLyoKLSAgV2UgYXNzdW1lIHRoYXQgdGhlIHZlcmIgbmFtZSBpcyB7YnJhY2VkfSwg b3IgaXQgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZQotICBzdHJpbmcsIHMsIG9yIGl0IGVuZHMg d2l0aCBhIHNwYWNlLCBjb250cm9sIGNoYXJhY3Rlciwgb3IgYmFja3NsYXNoLgotKi8KLSAgICAg ICAgICAgICAgICAgICBwID0ga2J1ZjsgICAgICAgICAgICAvKiBDb3B5IHZlcmIgbmFtZSBpbnRv IGxvY2FsIGJ1ZmZlciAqLwotICAgICAgICAgICAgICAgICAgIHggPSAwOwotICAgICAgICAgICAg ICAgICAgIHdoaWxlICgoeCsrIDwgS19CVUZMRU4pICYmICgqcyA+IFNQKSAmJiAoKnMgIT0gQ01E USkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyYWNlICYmICpzID09ICd9Jykgewot ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICpzKys7Ci0gICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgICAgIGlmICgqcyAmJiAhYnJhY2UpICAgIC8qIElmIHdlIGJy b2tlIGJlY2F1c2Ugb2YgXCwgZXRjLCAqLwotICAgICAgICAgICAgICAgICAgICAgcy0tOyAgICAg ICAgICAgICAgIC8qICBiYWNrIHVwIHNvIHdlIGdldCBhbm90aGVyIGxvb2suICovCi0gICAgICAg ICAgICAgICAgICAgYnJhY2UgPSAwOwotICAgICAgICAgICAgICAgICAgICpwID0gTlVMOyAgICAg ICAgICAgIC8qIFRlcm1pbmF0ZS4gKi8KLSAgICAgICAgICAgICAgICAgICBwID0ga2J1ZjsgICAg ICAgICAgICAvKiBQb2ludCBiYWNrIHRvIGJlZ2lubmluZyAqLwotICAgICAgICAgICAgICAgICAg IGRlYnVnKEYxMTAsImRvb3V0cHV0IGt2ZXJiIixwLDApOwotICAgICAgICAgICAgICAgICAgIHkg PSB4bG9va3VwKGt2ZXJicyxwLG5rdmVyYnMsJngpOyAvKiBMb29rIGl0IHVwICovCi0gICAgICAg ICAgICAgICAgICAgZGVidWcoRjEwMSwiZG9vdXRwdXQgbG9va3VwIiwwLHkpOwotICAgICAgICAg ICAgICAgICAgIGlmICh5ID4gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbmRu ZHgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvb3V0cHV0KG9zZW5kYnVmLGN4KTsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRuZHggPSAwOwotICAgICAgICAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgIGRva3ZlcmIoVkNNRCx5KTsKLSNpZm5k ZWYgTk9TUEwKLSAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAvKiBJcyBp dCBhIG1hY3JvPyAqLwotICAgICAgICAgICAgICAgICAgICAgICB5ID0gbXhsb29rKG1hY3RhYixw LG5tYWMpOwotICAgICAgICAgICAgICAgICAgICAgICBpZiAoeSA+IC0xKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICBjbXB1c2goKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtl eW1hYyA9IDE7ICAvKiBGbGFnIGZvciBrZXkgbWFjcm8gYWN0aXZlICovCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICBrZXltYWN4ID0geTsgLyogS2V5IG1hY3JvIGluZGV4ICovCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICBrZXlkZWZwdHIgPSBzOyAvKiBXaGVyZSB0byByZXN1bWUgbmV4 dCB0aW1lICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJkb291dHB1 dCBteGxvb2siLGtleWRlZnB0cix5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNl cigxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtcG9wKCk7Ci0gICAgICAgICAgICAg ICAgICAgICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIHF1b3RlID0gMDsKLSAgICAgICAgICAgICAg IGNvbnRpbnVlOwotICAgICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBOT0tWRVJCUyAqLwotICAg ICAgICAgICAgIGlmIChvdXRlc2MgJiYgKHggPT0gJ24nIHx8IHggPT0gJ04nKSkgeyAvKiBcbiBv ciBcTiAqLwotICAgICAgICAgICAgICAgICBpZiAoeHhvdXQob2J1ZixvYm4pIDwgMCkgLyogRmx1 c2ggYnVmZmVyICovCi0gICAgICAgICAgICAgICAgICAgZ290byBvdXRlcnI7Ci0gICAgICAgICAg ICAgICAgIGRlYnVnKEYxMDAsIk9VVFBVVCBOVUwiLCIiLDApOyAvKiBTZW5kIGEgTlVMICovCi0g ICAgICAgICAgICAgICAgIGlmIChsb2NhbCkKLSAgICAgICAgICAgICAgICAgICB0dG9jKE5VTCk7 Ci0gICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICBjb25vYyhOVUwpOwot ICAgICAgICAgICAgICAgICBxdW90ZSA9IDA7Ci0gICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot Ci0gICAgICAgICAgICAgfSBlbHNlIGlmIChvdXRlc2MgJiYgKHggPT0gJ2InIHx8IHggPT0gJ0In KSkgeyAvKiBcYiBvciBcQiAqLwotCi0gICAgICAgICAgICAgICAgaWYgKHh4b3V0KG9idWYsb2Ju KSA8IDApIC8qIEZsdXNoIGJ1ZmZlciBmaXJzdCAqLwotICAgICAgICAgICAgICAgICAgZ290byBv dXRlcnI7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMCwiT1VUUFVUIEJSRUFLIiwiIiwwKTsK LSNpZm5kZWYgTk9MT0NBTAotICAgICAgICAgICAgICAgIHR0c25kYigpOyAgICAgICAgICAgICAg IC8qIFNlbmQgQlJFQUsgc2lnbmFsICovCi0jZWxzZQotICAgICAgICAgICAgICAgICBpZiAobG9j YWwpCi0gICAgICAgICAgICAgICAgICAgdHRvYyhOVUwpOwotICAgICAgICAgICAgICAgICBlbHNl Ci0gICAgICAgICAgICAgICAgICAgY29ub2MoTlVMKTsKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0g ICAgICAgICAgICAgICAgcXVvdGUgPSAwOyAgICAgICAgICAgICAgLyogVHVybiBvZmYgcXVvdGUg ZmxhZyAqLwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgIC8qIGFuZCBu b3QgdGhlIGIgb3IgQiAqLwotI2lmZGVmIENLX0xCUksKLSAgICAgICAgICAgICB9IGVsc2UgaWYg KG91dGVzYyAmJiAoeCA9PSAnbCcgfHwgeCA9PSAnTCcpKSB7IC8qIFxsIG9yIFxMICovCi0gICAg ICAgICAgICAgICAgIGlmICh4eG91dChvYnVmLG9ibikgPCAwKSAvKiBGbHVzaCBidWZmZXIgZmly c3QgKi8KLSAgICAgICAgICAgICAgICAgICBnb3RvIG91dGVycjsKLSAgICAgICAgICAgICAgICAg ZGVidWcoRjEwMCwiT1VUUFVUIExvbmcgQlJFQUsiLCIiLDApOwotI2lmbmRlZiBOT0xPQ0FMCi0g ICAgICAgICAgICAgICAgIHR0c25kbGIoKTsgICAgICAgICAgICAgLyogU2VuZCBMb25nIEJSRUFL IHNpZ25hbCAqLwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgaWYgKGxvY2FsKQotICAgICAgICAg ICAgICAgICAgIHR0b2MoTlVMKTsKLSAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg ICAgICAgIGNvbm9jKE5VTCk7Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotICAgICAgICAgICAgICAg ICBxdW90ZSA9IDA7ICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIHF1b3RlIGZsYWcgKi8KLSAgICAg ICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgICAvKiBhbmQgbm90IHRoZSBsIG9yIEwg Ki8KLSNlbmRpZiAvKiBDS19MQlJLICovCi0KLSAgICAgICAgICAgICB9IGVsc2UgaWYgKHggPT0g Q01EUSkgeyAgICAvKiBCYWNrc2xhc2ggaXRzZWxmICovCi0gICAgICAgICAgICAgICAgIGRlYnVn KEYxMDAsIk9VVFBVVCBDTURRIiwiIiwwKTsKLSAgICAgICAgICAgICAgICAgeHggPSBvYm9jKGRv cGFyKENNRFEpKTsgLyogT3V0cHV0IHRoZSBiYWNrc2xhc2guICovCi0gICAgICAgICAgICAgICAg IGlmICh4eCA8IDApCi0gICAgICAgICAgICAgICAgICAgZ290byBvdXRlcnI7Ci0gICAgICAgICAg ICAgICAgIHF1b3RlID0gMDsKLSAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg ICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAvKiBpZiBcIG5vdCBmb2xsb3dlZCBieSBz cGVjaWFsIGVzYyAqLwotICAgICAgICAgICAgICAgIC8qIE5vdGU6IEF0YXJpIFNUIGNvbXBpbGVy IHdvbid0IGFsbG93IG1hY3JvIGNhbGwgaW4gImlmICgpIiAqLwotICAgICAgICAgICAgICAgICB4 eCA9IG9ib2MoZG9wYXIoQ01EUSkpOyAvKiBPdXRwdXQgdGhlIGJhY2tzbGFzaC4gKi8KLSAgICAg ICAgICAgICAgICAgaWYgKHh4IDwgMCkKLSAgICAgICAgICAgICAgICAgICBnb3RvIG91dGVycjsK LSAgICAgICAgICAgICAgICAgcXVvdGUgPSAwOyAgICAgICAgICAgICAvKiBUdXJuIG9mZiBxdW90 ZSBmbGFnICovCi0gICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHggPT0gQ01EUSkg eyAgICAgICAgIC8qIFRoaXMgaXMgdGhlIHF1b3RlIGNoYXJhY3RlciAqLwotICAgICAgICAgICAg cXVvdGUgPSAxOyAgICAgICAgICAgICAgICAgIC8qIEdvIGJhY2sgYW5kIGdldCBuZXh0IGNoYXJh Y3RlciAqLwotICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgICAgICAgIC8qIHdoaWNo IGlzIHF1b3RlZCAqLwotICAgICAgICB9Ci0gICAgICAgIHh4ID0gb2JvYyhkb3BhcigoY2hhcil4 KSk7ICAgICAgLyogT3V0cHV0IHRoaXMgY2hhcmFjdGVyICovCi0gICAgICAgIGRlYnVnKEYxMTEs ImRvb3V0cHV0IixvYnVmLG9ibik7Ci0gICAgICAgIGlmICh4eCA8IDApCi0gICAgICAgICAgZ290 byBvdXRlcnI7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICBpZiAoc2VzbG9nICYmIGR1cGxleCkg eyAgICAgICAgIC8qIExvZyB0aGUgY2hhcmFjdGVyIGlmIGxvZyBpcyBvbiAqLwotICAgICAgICAg ICAgbG9nY2hhcigoY2hhcil4KTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAg ICAgICAgaWYgKHggPT0gJ1wwMTUnKSB7ICAgICAgICAgICAgICAvKiBTdHJpbmcgY29udGFpbnMg Y2FycmlhZ2UgcmV0dXJuICovCi0gICAgICAgICAgICBpbnQgc3R1ZmYgPSAtMSwgc3R1ZmYyID0g LTE7Ci0gICAgICAgICAgICBpZiAodG5sbSkgeyAgICAgICAgICAgICAgICAgLyogVEVSTUlOQUwg TkVXTElORSBPTiAqLwotICAgICAgICAgICAgICAgIHN0dWZmID0gTEY7ICAgICAgICAgICAgIC8q IFN0dWZmIExGICovCi0gICAgICAgICAgICB9Ci0jaWZkZWYgVE5DT0RFCi0gICAgICAgICAgICAv KiBURUxORVQgTkVXTElORSBPTi9PRkYvUkFXICovCi0gICAgICAgICAgICBpZiAoaXNfdG4pIHsK LSAgICAgICAgICAgICAgICBzd2l0Y2ggKFRFTE9QVF9NRShURUxPUFRfQklOQVJZKSA/IC8qIE5W VCBvciBCSU5BUlkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHRuX2JfbmxtIDoKLSAgICAg ICAgICAgICAgICAgICAgICAgIHRuX25sbQotICAgICAgICAgICAgICAgICAgICAgICAgKSB7Ci0g ICAgICAgICAgICAgICAgICBjYXNlIFROTF9DUjoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgICAgICBjYXNlIFROTF9DUk5VTDoKLSAgICAgICAgICAgICAgICAgICAg c3R1ZmYyID0gc3R1ZmY7Ci0gICAgICAgICAgICAgICAgICAgIHN0dWZmICA9IE5VTDsKLSAgICAg ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFROTF9DUkxGOgot ICAgICAgICAgICAgICAgICAgICBzdHVmZjIgPSBzdHVmZjsKLSAgICAgICAgICAgICAgICAgICAg c3R1ZmYgPSBMRjsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgfQotI2VuZGlmIC8qIFROQ09ERSAqLwotICAgICAgICAgICAgaWYgKHN0 dWZmID4gLTEpIHsgICAgICAgICAgIC8qIFN0dWZmaW5nIGFub3RoZXIgY2hhcmFjdGVyLi4uICov Ci0gICAgICAgICAgICAgICAgeHggPSBvYm9jKGRvcGFyKChDSEFSKXN0dWZmKSk7Ci0gICAgICAg ICAgICAgICAgaWYgKHh4IDwgMCkKLSAgICAgICAgICAgICAgICAgIGdvdG8gb3V0ZXJyOwotI2lm ZGVmIENPTU1FTlQKLSAgICAgICAgICAgICAgICBpZiAoc2VzbG9nICYmIGR1cGxleCkgeyAvKiBM b2cgc3R1ZmZlZCBjaGFyIGlmIGFwcHJvcHJpYXRlICovCi0gICAgICAgICAgICAgICAgICAgIGxv Z2NoYXIoKGNoYXIpc3R1ZmYpOwotICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDT01NRU5U ICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3R1ZmYyID4gLTEpIHsgICAgICAg ICAgLyogU3R1ZmZpbmcgYW5vdGhlciBjaGFyYWN0ZXIuLi4gKi8KLSAgICAgICAgICAgICAgICB4 eCA9IG9ib2MoZG9wYXIoKENIQVIpc3R1ZmYyKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHh4IDwg MCkKLSAgICAgICAgICAgICAgICAgIGdvdG8gb3V0ZXJyOwotI2lmZGVmIENPTU1FTlQKLSAgICAg ICAgICAgICAgICBpZiAoc2VzbG9nICYmIGR1cGxleCkgeyAvKiBMb2cgc3R1ZmZlZCBjaGFyIGlm IGFwcHJvcHJpYXRlICovCi0gICAgICAgICAgICAgICAgICAgIGxvZ2NoYXIoKGNoYXIpc3R1ZmYy KTsKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAg fQotICAgICAgICAgICAgaWYgKHh4b3V0KG9idWYsb2JuKSA8IDApICAgIC8qIEZsdXNoaW5nIGlz IHJlcXVpcmVkIGhlcmUhICovCi0gICAgICAgICAgICAgIGdvdG8gb3V0ZXJyOwotICAgICAgICB9 Ci0gICAgfQotICAgIGlmIChjeCA9PSBYWExOT1VUKSB7Ci0gICAgICAgIHMgPSAiXDAxNSI7Ci0g ICAgICAgIGN4ID0gMDsKLSAgICAgICAgZ290byBvdXRhZ2FpbjsKLSAgICB9Ci0gICAgaWYgKHF1 b3RlID09IDEpICAgICAgICAgICAgICAgICAgICAgLyogU3RyaW5nIGVuZGVkIHdpdGggYmFja3Ns YXNoICovCi0gICAgICB4eCA9IG9ib2MoZG9wYXIoQ01EUSkpOwotCi0gICAgaWYgKG9ibiA+IDAp ICAgICAgICAgICAgICAgICAgICAgICAgLyogT1VUUFVUIGRvbmUgKi8KLSAgICAgIGlmICh4eG91 dChvYnVmLG9ibikgPCAwKSAgICAgICAgICAvKiBGbHVzaCB0aGUgYnVmZmVyIGlmIG5lY2Vzc2Fy eS4gKi8KLSAgICAgICAgZ290byBvdXRlcnI7Ci0gICAgcmV0dXJuKDEpOwotCi1vdXRlcnI6ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT1VUUFVUIGNvbW1hbmQgZXJyb3IgaGFu ZGxlciAqLwotICAgIGlmIChtc2dmbGcpIHByaW50ZigiP09VVFBVVCBleGVjdXRpb24gZXJyb3Jc biIpOwotICAgIHJldHVybigwKTsKLQotLyogUmVtb3ZlICJsb2NhbCIgT1VUUFVUIG1hY3JvIGRl ZmluaW5pdGlvbnMgKi8KLQotI2lmZGVmIENPTU1FTlQKLS8qIE5vIG1vcmUgbWFjcm9zIC4uLiAq LwotI3VuZGVmIG9ib2MKLSN1bmRlZiBvYmZscwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLX0KLSNl bmRpZiAvKiBOT1NQTCAqLwotCi0vKiBEaXNwbGF5IHZlcnNpb24gaGVyYWxkIGFuZCBpbml0aWFs IHByb21wdCAqLwotCi1WT0lECi1oZXJhbGQoKSB7Ci0gICAgaW50IHggPSAwLCBpOwotICAgIGV4 dGVybiBpbnQgc3J2Y2Rtc2c7Ci0gICAgZXh0ZXJuIGNoYXIgKiBjZG1zZ2ZpbGVbXTsKLSAgICBj aGFyICogc3NsOwotICAgIGNoYXIgKiBrcmI0OwotICAgIGNoYXIgKiBrcmI1OwotCi0jaWZuZGVm IE5PQ01ETAotICAgIGV4dGVybiBjaGFyICogYmFubmVyZmlsZTsKLSAgICBkZWJ1ZyhGMTEwLCJo ZXJhbGQgYmFubmVyZmlsZSIsYmFubmVyZmlsZSwwKTsKLSAgICBpZiAoYmFubmVyZmlsZSkgewot ICAgICAgICBjb25jYigoY2hhcillc2NhcGUpOwotICAgICAgICBpZiAoZG90eXBlKGJhbm5lcmZp bGUsMSwwLDAsTlVMTCwwLE5VTEwsMCwwLE5VTEwsMCkgPiAwKSB7Ci0gICAgICAgICAgICBkZWJ1 ZyhGMTExLCJoZXJhbGQiLCJzcnZjZG1zZyIsc3J2Y2Rtc2cpOwotICAgICAgICAgICAgaWYgKHNy dmNkbXNnKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotICAg ICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJoZXJhbGQgY2Rtc2dmaWxlW2ldIixjZG1zZ2Zp bGVbaV0saSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh6Y2hraShjZG1zZ2ZpbGVbaV0pID4g LTEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGRvdHlwZShjZG1zZ2ZpbGVbaV0sCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgeGFza21vcmUsMCwwLE5VTEwsMCxOVUxMLDAsMCxOVUxMLDApOwotICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg ICB9Ci0jZW5kaWYgLyogTk9DTURMICovCi0KLSNpZmRlZiBDT01NRU5UCi0gICAgLyogVGhlIGZv bGxvd2luZyBnZW5lcmF0ZXMgYmFkIGNvZGUgaW4gU0NPIGNvbXBpbGVycy4gKi8KLSAgICAvKiBP YnNlcnZlZCBpbiBib3RoIE9TUjUgYW5kIFVuaXh3YXJlIDIgLS0gYWZ0ZXIgZXhlY3V0aW5nIHRo aXMgKi8KLSAgICAvKiBzdGF0ZW1lbnQgd2hlbiBhbGwgY29uZGl0aW9ucyBhcmUgZmFsc2UsIHgg aGFzIGEgdmFsdWUgb2YgLTMyLiAqLwotICAgIGlmIChub2hlcmFsZCB8fCBxdWlldCB8fCBiZ3Nl dCA+IDAgfHwgKGJnc2V0ICE9IDAgJiYgYmFja2dyZCAhPSAwKSkKLSAgICAgIHggPSAxOwotI2Vs c2UKLSAgICB4ID0gMDsKLSAgICBpZiAobm9oZXJhbGQgfHwgcXVpZXQpCi0gICAgICB4ID0gMTsK LSAgICBlbHNlIGlmIChiZ3NldCA+IDApCi0gICAgICB4ID0gMTsKLSAgICBlbHNlIGlmIChiZ3Nl dCA8IDAgJiYgYmFja2dyZCA+IDApCi0gICAgICB4ID0gMTsKLSNlbmRpZiAvKiBDT01NRU5UICov Ci0KLSAgICBzc2wgPSAiIjsKLSAgICBrcmI0ID0gIiI7Ci0gICAga3JiNSA9ICIiOwotI2lmZGVm IENLX0FVVEhFTlRJQ0FUSU9OCi0jaWZkZWYgQ0tfU1NMICAgIAotICAgIHNzbCA9ICIrU1NMIjsK LSNlbmRpZgkvKiBDS19TU0wgKi8KLSNpZmRlZiBLUkI0Ci0gICAga3JiNCA9ICIrS1JCNCI7Ci0j ZW5kaWYJLyogS1JCNCAqLwotI2lmZGVmIEtSQjUKLSAgICBrcmI1ID0gIitLUkI1IjsKLSNlbmRp ZgkvKiBLUkI1ICovCi0jZW5kaWYJLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLQotICAgIGlmICh4 ID09IDApIHsKLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgICAgICBwcmludGYoIiVzLCBmb3Ilc1xu Iix2ZXJzaW8sY2t4c3lzKTsKLSNlbHNlCi0jaWZkZWYgT1NLCi0gICAgICAgIHByaW50ZigiJXMs IGZvciVzXG4iLHZlcnNpbyxja3hzeXMpOwotI2Vsc2UKLSNpZmRlZiBDS182NEJJVAotICAgICAg ICBwcmludGYoIiVzLCBmb3IlcyVzJXMlcyAoNjQtYml0KVxuXHIiLHZlcnNpbyxja3hzeXMsc3Ns LGtyYjQsa3JiNSk7Ci0jZWxzZQotICAgICAgICBwcmludGYoIiVzLCBmb3IlcyVzJXMlc1xuXHIi LHZlcnNpbyxja3hzeXMsc3NsLGtyYjQsa3JiNSk7Ci0jZW5kaWYvKiBDS182NEJJVCAqLwotI2Vu ZGlmIC8qIE9TSyAqLwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0gICAgICAgIHByaW50Zigi IENvcHlyaWdodCAoQykgMTk4NSwgJXMsXG4iLCBja19jcnllYXIpOwotICAgICAgICBwcmludGYo IiAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9y ay5cbiIpOwotI2lmZGVmIE9TMgotICAgICAgIHNob3JlZygpOwotI2VuZGlmIC8qIE9TMiAqLwot Ci0gICAgICAgIGlmICghcXVpZXQgJiYgIWJhY2tncmQpIHsKLSNpZmRlZiBDT01NRU5UCi0vKiAi RGVmYXVsdCBmaWxlLXRyYW5zZmVyIG1vZGUgaXMgQVVUT01BVElDIiBpcyB1c2VsZXNzIGluZm9y bWF0aW9uLi4uICovCi0gICAgICAgICAgICBjaGFyICogczsKLSAgICAgICAgICAgIGV4dGVybiBp bnQgeGZlcm1vZGU7Ci0jaWZkZWYgVk1TCi0gICAgICAgICAgICBzID0gIkFVVE9NQVRJQyI7Ci0j ZWxzZQotICAgICAgICAgICAgaWYgKHhmZXJtb2RlID09IFhNT0RFX0EpIHsKLSAgICAgICAgICAg ICAgICBzID0gIkFVVE9NQVRJQyI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg ICAgIHMgPSBnZm1vZGUoYmluYXJ5LDEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg KCFzKSBzID0gIiI7Ci0jZW5kaWYgLyogVk1TICovCi0gICAgICAgICAgICBpZiAoKnMpCi0gICAg ICAgICAgICAgIHByaW50ZigiRGVmYXVsdCBmaWxlLXRyYW5zZmVyIG1vZGUgaXMgJXNcbiIsIHMp OwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgICAgICAgICAgZGVidWcoRjExMSwiaGVyYWxk Iiwic3J2Y2Rtc2ciLHNydmNkbXNnKTsKLSAgICAgICAgICAgIGlmIChzcnZjZG1zZykgewotICAg ICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLSAgICAgICAgICAgICAgICAg ICAgZGVidWcoRjExMSwiaGVyYWxkIGNkbXNnZmlsZVtpXSIsY2Rtc2dmaWxlW2ldLGkpOwotICAg ICAgICAgICAgICAgICAgICBpZiAoemNoa2koY2Rtc2dmaWxlW2ldKSA+IC0xKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk b3R5cGUoY2Rtc2dmaWxlW2ldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhhc2tt b3JlLDAsMCxOVUxMLDAsTlVMTCwwLDAsTlVMTCwwKTsKLSAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgfQotICAgICAgICAgICAgcHJpbnRmKCJUeXBlID8gb3IgSEVMUCBmb3IgaGVscC5cbiIp OwotICAgICAgICB9Ci0gICAgfQotfQotCi0vKiAgRyBGIE0gTyBEIEUgIC0tICBHZXQgRmlsZSAo dHJhbnNmZXIpIE1vZGUgICovCi0KLWNoYXIgKgotZ2Ztb2RlKGJpbmFyeSx1cGNhc2UpIGludCBi aW5hcnksIHVwY2FzZTsgewotICAgIGNoYXIgKiBzOwotICAgIHN3aXRjaCAoYmluYXJ5KSB7Ci0g ICAgICBjYXNlIFhZRlRfVDogcyA9IHVwY2FzZSA/ICJURVhUIiA6ICJ0ZXh0IjsgYnJlYWs7Ci0j aWZkZWYgVk1TCi0gICAgICBjYXNlIFhZRlRfQjogcyA9IHVwY2FzZSA/ICJCSU5BUlkgRklYRUQi IDogImJpbmFyeSBmaXhlZCI7IGJyZWFrOwotICAgICAgY2FzZSBYWUZUX0k6IHMgPSB1cGNhc2Ug PyAiSU1BR0UiIDogImltYWdlIjsgYnJlYWs7Ci0gICAgICBjYXNlIFhZRlRfTDogcyA9IHVwY2Fz ZSA/ICJMQUJFTEVEIiA6ICJsYWJlbGVkIjsgYnJlYWs7Ci0gICAgICBjYXNlIFhZRlRfVTogcyA9 IHVwY2FzZSA/ICJCSU5BUlkgVU5ERUYiIDogImJpbmFyeSB1bmRlZiI7IGJyZWFrOwotI2Vsc2UK LSNpZmRlZiBNQUMKLSAgICAgIGNhc2UgWFlGVF9COiBzID0gdXBjYXNlID8gIkJJTkFSWSIgOiAi YmluYXJ5IjsgYnJlYWs7Ci0gICAgICBjYXNlIFhZRlRfTTogcyA9IHVwY2FzZSA/ICJNQUNCSU5B UlkiIDogIm1hY2JpbmFyeSI7IGJyZWFrOwotI2Vsc2UKLSAgICAgIGNhc2UgWFlGVF9COiBzID0g dXBjYXNlID8gIkJJTkFSWSIgOiAiYmluYXJ5IjsgYnJlYWs7Ci0jaWZkZWYgQ0tfTEFCRUxFRAot ICAgICAgY2FzZSBYWUZUX0w6IHMgPSB1cGNhc2UgPyAiTEFCRUxFRCIgOiAibGFiZWxlZCI7IGJy ZWFrOwotI2VuZGlmIC8qIENLX0xBQkVMRUQgKi8KLSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAv KiBWTVMgKi8KLSAgICAgIGNhc2UgWFlGVF9YOiBzID0gdXBjYXNlID8gIlRFTkVYIiA6ICJ0ZW5l eCI7IGJyZWFrOwotICAgICAgZGVmYXVsdDogcyA9ICIiOwotICAgIH0KLSAgICByZXR1cm4ocyk7 Ci19Ci0KLSNpZm5kZWYgTk9TUEwKLXN0YXRpYyBpbnQKLWlzYWEocykgY2hhciAqIHM7IHsgICAg ICAgICAgICAgICAgICAgICAvKiBJcyBhc3NvY2lhdGl2ZSBhcnJheSAqLwotICAgIGNoYXIgYzsK LSAgICBpbnQgeDsKLSAgICBpZiAoIXMpIHMgPSAiIjsKLSAgICBpZiAoISpzKSByZXR1cm4oMCk7 Ci0gICAgcysrOwotICAgIHdoaWxlICgoYyA9ICpzKyspKSB7Ci0gICAgICAgIGlmIChjID09ICc8 JykgewotICAgICAgICAgICAgeCA9IHN0cmxlbihzKTsKLSAgICAgICAgICAgIHJldHVybiAoKCoo cyt4LTEpID09ICc+JykgPyAxIDogMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuKDAp OwotfQotCi0vKiAgTSBMIE8gTyBLICAtLSAgTG9va3VwIHRoZSBtYWNybyBuYW1lIGluIHRoZSBt YWNybyB0YWJsZSAgKi8KLQotLyoKLSAgQ2FsbCB0aGlzIHdheTogIHYgPSBtbG9vayh0YWJsZSx3 b3JkLG4pOwotCi0gICAgdGFibGUgLSBhICdzdHJ1Y3QgbXRhYicgdGFibGUuCi0gICAgd29yZCAg LSB0aGUgdGFyZ2V0IHN0cmluZyB0byBsb29rIHVwIGluIHRoZSB0YWJsZS4KLSAgICBuICAgICAt IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHRhYmxlLgotCi0gIFRoZSBrZXl3b3JkIHRh YmxlIG11c3QgYmUgYXJyYW5nZWQgaW4gYXNjZW5kaW5nIGFscGhhYmV0aWNhbCBvcmRlciwgYW5k Ci0gIGFsbCBsZXR0ZXJzIG11c3QgYmUgbG93ZXJjYXNlLgotCi0gIFJldHVybnMgdGhlIHRhYmxl IGluZGV4LCAwIG9yIGdyZWF0ZXIsIGlmIHRoZSBuYW1lIHdhcyBmb3VuZCwgb3I6Ci0KLSAgIC0z IGlmIG5vdGhpbmcgdG8gbG9vayB1cCAodGFyZ2V0IHdhcyBudWxsKSwKLSAgIC0yIGlmIGFtYmln dW91cywKLSAgIC0xIGlmIG5vdCBmb3VuZC4KLQotICBBIG1hdGNoIGlzIHN1Y2Nlc3NmdWwgaWYg dGhlIHRhcmdldCBtYXRjaGVzIGEga2V5d29yZCBleGFjdGx5LCBvciBpZgotICB0aGUgdGFyZ2V0 IGlzIGEgcHJlZml4IG9mIGV4YWN0bHkgb25lIGtleXdvcmQuICBJdCBpcyBhbWJpZ3VvdXMgaWYg dGhlCi0gIHRhcmdldCBtYXRjaGVzIHR3byBvciBtb3JlIGtleXdvcmRzIGZyb20gdGhlIHRhYmxl LgotKi8KLWludAotbWxvb2sodGFibGUsY21kLG4pIHN0cnVjdCBtdGFiIHRhYmxlW107IGNoYXIg KmNtZDsgaW50IG47IHsKLSAgICByZWdpc3RlciBpbnQgaTsKLSAgICBpbnQgdiwgdywgY21kbGVu ID0gMDsKLSAgICBjaGFyIGMgPSAwLCBjMSwgKiBzOwotICAgIGlmICghY21kKSBjbWQgPSAiIjsK LQotICAgIGZvciAocyA9IGNtZDsgKnM7IHMrKykgY21kbGVuKys7ICAgIC8qIChpbnN0ZWFkIG9m IHN0cmxlbikgKi8KLSAgICBkZWJ1ZyhGMTExLCJNTE9PSyIsY21kLGNtZGxlbik7Ci0KLSAgICBj MSA9ICpjbWQ7Ci0gICAgaWYgKGlzdXBwZXIoYzEpKQotICAgICAgYzEgPSB0b2xvd2VyKGMxKTsK LSAgICBpZiAoY21kbGVuIDwgMSkKLSAgICAgIHJldHVybigtMyk7Ci0KLS8qIE5vdCBudWxsLCBs b29rIGl0IHVwICovCi0KLSAgICBpZiAobiA8IDEyKSB7ICAgICAgICAgICAgICAgICAgICAgICAv KiBOb3Qgd29ydGggaXQgZm9yIHNtYWxsIHRhYmxlcyAqLwotICAgICAgICBpID0gMDsKLSAgICB9 IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCaW5hcnkgc2VhcmNoIGZvciB3 aGVyZSB0byBzdGFydCAqLwotICAgICAgICBpbnQgbG8gPSAwOwotICAgICAgICBpbnQgaGkgPSBu OwotICAgICAgICBpbnQgY291bnQgPSAwOwotICAgICAgICB3aGlsZSAobG8rMiA8IGhpICYmICsr Y291bnQgPCAxMikgewotICAgICAgICAgICAgaSA9IGxvICsgKChoaSAtIGxvKSAvIDIpOwotICAg ICAgICAgICAgYyA9ICoodGFibGVbaV0ua3dkKTsKLSAgICAgICAgICAgIGlmIChpc3VwcGVyKGMp KSBjID0gdG9sb3dlcihjKTsKLSAgICAgICAgICAgIGlmIChjIDwgYzEpIHsKLSAgICAgICAgICAg ICAgICBsbyA9IGk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGhpID0g aTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpID0gKGMgPCBjMSkgPyBsbysx IDogbG87Ci0gICAgfQotICAgIGZvciAoIDsgaSA8IG4tMTsgaSsrKSB7Ci0gICAgICAgIHMgPSB0 YWJsZVtpXS5rd2Q7Ci0gICAgICAgIGlmICghcykgcyA9ICIiOwotICAgICAgICBpZiAoISpzKSBj b250aW51ZTsgICAgICAgICAgICAgIC8qIEVtcHR5IHRhYmxlIGVudHJ5ICovCi0gICAgICAgIGMg PSAqczsKLSAgICAgICAgaWYgKGlzdXBwZXIoYykpIGMgPSB0b2xvd2VyKGMpOwotICAgICAgICBp ZiAoYzEgIT0gYykgY29udGludWU7ICAgICAgICAgIC8qIEZpcnN0IGNoYXIgZG9lc24ndCBtYXRj aCAqLwotICAgICAgICBpZiAoIWNrc3RyY21wKHMsY21kLC0xLDApKSAgICAgIC8qIEhhdmUgZXhh Y3QgbWF0Y2g/ICovCi0gICAgICAgICAgcmV0dXJuKGkpOwotICAgICAgICB2ID0gIWNrc3RyY21w KHMsY21kLGNtZGxlbiwwKTsKLSAgICAgICAgdyA9IGNrc3RyY21wKHRhYmxlW2krMV0ua3dkLGNt ZCxjbWRsZW4sMCk7Ci0gICAgICAgIGlmICh2ICYmIHcpICAgICAgICAgICAgICAgICAgICAgLyog SGF2ZSBhYmJyZXZpYXRlZCBtYXRjaD8gKi8KLSAgICAgICAgICByZXR1cm4oaSk7Ci0gICAgICAg IGlmICh2KSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQW1iaWd1b3VzPyAqLwotICAgICAg ICAgIHJldHVybigtMik7Ci0gICAgICAgIGlmICh3ID4gMCkgICAgICAgICAgICAgICAgICAgICAg LyogUGFzdCBvdXIgYWxwaGFiZXRpYyBhcmVhPyAqLwotICAgICAgICAgIHJldHVybigtMSk7Ci0g ICAgfQotCi0vKiBMYXN0IChvciBvbmx5KSBlbGVtZW50ICovCi0KLSAgICBpZiAoIWNrc3RyY21w KHRhYmxlW24tMV0ua3dkLGNtZCxjbWRsZW4sMCkpCi0gICAgICByZXR1cm4obi0xKTsKLQotICAg IHJldHVybigtMSk7Ci19Ci0KLS8qIG14bG9vayBpcyBsaWtlIG1sb29rLCBidXQgYW4gZXhhY3Qg ZnVsbC1sZW5ndGggbWF0Y2ggaXMgcmVxdWlyZWQgKi8KLQotaW50Ci1teGxvb2sodGFibGUsY21k LG4pIGNoYXIgKmNtZDsgc3RydWN0IG10YWIgdGFibGVbXTsgaW50IG47IHsKLSAgICByZWdpc3Rl ciBpbnQgaTsKLSAgICBpbnQgdywgY21kbGVuID0gMCwgb25lID0gMDsKLSAgICByZWdpc3RlciBj aGFyIGMgPSAwLCBjMSwgKiBzOwotCi0gICAgaWYgKCFjbWQpIGNtZCA9ICIiOyAgICAgICAgICAg ICAgICAgLyogQ2hlY2sgYXJncyAqLwotCi0gICAgZm9yIChzID0gY21kOyAqczsgcysrKSBjbWRs ZW4rKzsgICAgLyogKGluc3RlYWQgb2Ygc3RybGVuKSAqLwotICAgIGRlYnVnKEYxMTEsIk1YTE9P SyIsY21kLGNtZGxlbik7Ci0KLSAgICBjMSA9ICpjbWQ7ICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBGaXJzdCBjaGFyIG9mIHN0cmluZyB0byBsb29rIHVwICovCi0gICAgaWYgKGlzdXBwZXIo YzEpKQotICAgICAgYzEgPSB0b2xvd2VyKGMxKTsKLSAgICBpZiAoISooY21kKzEpKSAgICAgICAg ICAgICAgICAgICAgICAvKiBTcGVjaWFsIGhhbmRsaW5nIGZvciAxLWNoYXIgbmFtZXMgKi8KLSAg ICAgIG9uZSA9IDE7Ci0KLSAgICBpZiAoY21kbGVuIDwgMSkgICAgICAgICAgICAgICAgICAgICAv KiBOb3RoaW5nIHRvIGxvb2sgdXAgKi8KLSAgICAgIHJldHVybigtMyk7Ci0KLSAgICBpZiAobiA8 IDEyKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3Qgd29ydGggaXQgZm9yIHNtYWxsIHRh YmxlcyAqLwotICAgICAgICBpID0gMDsKLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBCaW5hcnkgc2VhcmNoIGZvciB3aGVyZSB0byBzdGFydCAqLwotICAgICAgICBp bnQgbG8gPSAwOwotICAgICAgICBpbnQgaGkgPSBuOwotICAgICAgICBpbnQgY291bnQgPSAwOwot ICAgICAgICB3aGlsZSAobG8rMiA8IGhpICYmICsrY291bnQgPCAxMikgewotICAgICAgICAgICAg aSA9IGxvICsgKChoaSAtIGxvKSAvIDIpOwotICAgICAgICAgICAgYyA9ICoodGFibGVbaV0ua3dk KTsKLSAgICAgICAgICAgIGlmIChpc3VwcGVyKGMpKSBjID0gdG9sb3dlcihjKTsKLSAgICAgICAg ICAgIGlmIChjIDwgYzEpIHsKLSAgICAgICAgICAgICAgICBsbyA9IGk7Ci0gICAgICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgICAgIGhpID0gaTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg fQotICAgICAgICBpID0gKGMgPCBjMSkgPyBsbysxIDogbG87Ci0gICAgfQotICAgIGZvciAoIDsg aSA8IG47IGkrKykgeyAgICAgICAgICAgICAgIC8qIExvb2sgdGhydSB0YWJsZSAqLwotICAgICAg ICBzID0gdGFibGVbaV0ua3dkOyAgICAgICAgICAgICAgIC8qIFRoaXMgZW50cnkgKi8KLSAgICAg ICAgaWYgKCFzKSBzID0gIiI7Ci0gICAgICAgIGlmICghKnMpIGNvbnRpbnVlOyAgICAgICAgICAg ICAgLyogRW1wdHkgdGFibGUgZW50cnkgKi8KLSAgICAgICAgYyA9ICpzOwotICAgICAgICBpZiAo aXN1cHBlcihjKSkgYyA9IHRvbG93ZXIoYyk7Ci0gICAgICAgIGlmIChjMSAhPSBjKSBjb250aW51 ZTsgICAgICAgICAgLyogRmlyc3QgY2hhciBkb2Vzbid0IG1hdGNoICovCi0gICAgICAgIGlmIChv bmUpIHsgICAgICAgICAgICAgICAgICAgICAgLyogTmFtZSBpcyBvbmUgY2hhciBsb25nICovCi0g ICAgICAgICAgICBpZiAoISoocysxKSkKLSAgICAgICAgICAgICAgcmV0dXJuKGkpOyAgICAgICAg ICAgICAgICAvKiBTbyBpcyB0YWJsZSBlbnRyeSAqLwotICAgICAgICB9Ci0jaWZkZWYgQ09NTUVO VAotICAgICAgICBpZiAoKChpbnQpc3RybGVuKHMpID09IGNtZGxlbikgJiYKLSAgICAgICAgICAg ICghY2tzdHJjbXAocyxjbWQsY21kbGVuLDApKSkgcmV0dXJuKGkpOwotI2Vsc2UKLSAgICAgICAg dyA9IGNrc3RyY21wKHMsY21kLC0xLDApOwotICAgICAgICBpZiAoIXcpIHJldHVybihpKTsKLSAg ICAgICAgaWYgKHcgPiAwKSByZXR1cm4oLTEpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB9 Ci0gICAgcmV0dXJuKC0xKTsKLX0KLQotLyogbXh4bG9vayBpcyBsaWtlIG14bG9vaywgYnV0IGNh c2Utc2Vuc2l0aXZlICovCi0KLWludAotbXh4bG9vayh0YWJsZSxjbWQsbikgY2hhciAqY21kOyBz dHJ1Y3QgbXRhYiB0YWJsZVtdOyBpbnQgbjsgewotICAgIGludCBpLCBjbWRsZW47Ci0gICAgaWYg KCFjbWQpIGNtZCA9ICIiOwotICAgIGlmICgoKGNtZGxlbiA9IHN0cmxlbihjbWQpKSA8IDEpIHx8 IChuIDwgMSkpIHJldHVybigtMyk7Ci0gICAgLyogZGVidWcoRjExMSwibXh4bG9vayB0YXJnZXQi LGNtZCxuKTsgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgIGlmICgo KGludClzdHJsZW4odGFibGVbaV0ua3dkKSA9PSBjbWRsZW4pICYmCi0gICAgICAgICAgICAoIXN0 cm5jbXAodGFibGVbaV0ua3dkLGNtZCxjbWRsZW4pKSkKLSAgICAgICAgICByZXR1cm4oaSk7Ci0g ICAgfQotICAgIHJldHVybigtMSk7Ci19Ci0KLXN0YXRpYyBpbnQKLXRyYWNldmFsKG5hbSwgdmFs KSBjaGFyICogbmFtLCAqIHZhbDsgeyAvKiBGb3IgVFJBQ0UgY29tbWFuZCAqLwotICAgIGlmICh2 YWwpCi0gICAgICBwcmludGYoIj4+PiAlczogXCIlc1wiXG4iLCBuYW0sIHZhbCk7Ci0gICAgZWxz ZQotICAgICAgcHJpbnRmKCI+Pj4gJXM6ICh1bmRlZilcbiIsIG5hbSk7Ci0gICAgcmV0dXJuKDAp OwotfQotCi0jaWZkZWYgVVNFX1ZBUkxFTiAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IHVz ZWQgKi8KLQotLyogIFYgQSBSIEwgRSBOICAtLSAgR2V0IGxlbmd0aCBvZiB2YXJpYWJsZSdzIHZh bHVlLgotCi0gIEdpdmVuIGEgdmFyaWFibGUgbmFtZSwgcmV0dXJuIHRoZSBsZW5ndGggb2YgaXRz IGRlZmluaXRpb24gb3IgMCBpZiB0aGUKLSAgdmFyaWFibGUgaXMgbm90IGRlZmluZWQuICBJZiBp dCBpcyBkZWZpbmVkLCBzZXQgYXJndW1lbnQgcyB0byBwb2ludCB0byBpdHMKLSAgZGVmaW5pdGlv bi4gIE90aGVyd2lzZSBzZXQgcyB0byBOVUxMLgotKi8KLWludAotdmFybGVuKG5hbSxzKSBjaGFy ICpuYW07IGNoYXIgKipzOyB7ICAgIC8qIExlbmd0aCBvZiB2YWx1ZSBvZiB2YXJpYWJsZSAqLwot ICAgIGludCB4LCB6OwotICAgIGNoYXIgKnAgPSBOVUxMLCBjOwotCi0gICAgKnMgPSBOVUxMOwot ICAgIGlmICghbmFtKSByZXR1cm4oMCk7ICAgICAgICAgICAgICAgIC8qIFdhdGNoIG91dCBmb3Ig bnVsbCBwb2ludGVyICovCi0gICAgaWYgKCpuYW0gPT0gQ01EUSkgewotICAgICAgICBuYW0rKzsK LSAgICAgICAgaWYgKCpuYW0gPT0gJyUnKSB7ICAgICAgICAgICAgICAvKiBJZiBpdCdzIGEgdmFy aWFibGUgbmFtZSAqLwotICAgICAgICAgICAgaWYgKCEoYyA9ICoobmFtKzEpKSkgcmV0dXJuKDAp OyAvKiBHZXQgbGV0dGVyIG9yIGRpZ2l0ICovCi0gICAgICAgICAgICBwID0gKGNoYXIgKikwOyAg ICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSB2YWx1ZSBwb2ludGVyICovCi0gICAgICAgICAgICBp ZiAobWFjbHZsID4gLTEgJiYgYyA+PSAnMCcgJiYgYyA8PSAnOScpIHsgLyogRGlnaXQ/ICovCi0g ICAgICAgICAgICAgICAgcCA9IG1fYXJnW21hY2x2bF1bYyAtICcwJ107IC8qIFBvaW50ZXIgZnJv bSBtYWNyby1hcmcgdGFibGUgKi8KLSAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAg ICAgICAvKiBJdCdzIGEgZ2xvYmFsIHZhcmlhYmxlICovCi0gICAgICAgICAgICAgICAgaWYgKGMg PCAzMyB8fCBjID4gR1ZBUlMpIHJldHVybigwKTsKLSAgICAgICAgICAgICAgICBwID0gZ192YXJb Y107ICAgICAgICAgICAvKiBHZXQgcG9pbnRlciBmcm9tIGdsb2JhbC12YXIgdGFibGUgKi8KLSAg ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICgqbmFtID09ICcmJykgeyAgICAgICAgICAg ICAgIC8qIEFuIGFycmF5IHJlZmVyZW5jZT8gKi8KLSAgICAgICAgICAgIGNoYXIgKipxOwotICAg ICAgICAgICAgaWYgKGFycmF5bmFtKG5hbSwmeCwmeikgPCAwKSAvKiBJZiBzeW50YXggaXMgYmFk ICovCi0gICAgICAgICAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAgLyogcmV0dXJuIC0x LiAqLwotICAgICAgICAgICAgeCAtPSBBUlJBWUJBU0U7ICAgICAgICAgICAgIC8qIENvbnZlcnQg bmFtZSB0byBudW1iZXIuICovCi0gICAgICAgICAgICBpZiAoKHEgPSBhX3B0clt4XSkgPT0gTlVM TCkgLyogSWYgYXJyYXkgbm90IGRlY2xhcmVkLCAqLwotICAgICAgICAgICAgICByZXR1cm4oMCk7 ICAgICAgICAgICAgICAgIC8qIHJldHVybiAtMi4gKi8KLSAgICAgICAgICAgIGlmICh6ID4gYV9k aW1beF0pICAgICAgICAgICAvKiBJZiBzdWJzY3JpcHQgb3V0IG9mIHJhbmdlLCAqLwotICAgICAg ICAgICAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgIC8qIHJldHVybiAtMy4gKi8KLSAgICAg ICAgICAgIHAgPSBxW3pdOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogTWFjcm8gKi8KLSAgICAgICAgeiA9IGlzYWEobmFtKTsKLSAgICAgICAg eCA9IHogPyBteHhsb29rKG1hY3RhYixuYW0sbm1hYykgOiBtbG9vayhtYWN0YWIsbmFtLG5tYWMp OwotICAgICAgICBpZiAoeCA8IDApCi0gICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICBwID0g bWFjdGFiW3hdLm12YWw7Ci0gICAgfQotICAgIGlmIChwKQotICAgICAgKnMgPSBwOwotICAgIGVs c2UKLSAgICAgIHAgPSAiIjsKLSAgICByZXR1cm4oKGludClzdHJsZW4ocCkpOwotfQotI2VuZGlm IC8qIFVTRV9WQVJMRU4gKi8KLQotLyoKLSAgVGhpcyByb3V0aW5lIGlzIGZvciB0aGUgYmVuZWZp dCBvZiB0aG9zZSBjb21waWxlcnMgdGhhdCBjYW4ndCBoYW5kbGUKLSAgbG9uZyBzdHJpbmcgY29u c3RhbnRzIG9yIGNvbnRpbnVlZCBsaW5lcyB3aXRoaW4gdGhlbS4gIExvbmcgcHJlZGVmaW5lZAot ICBtYWNyb3MgbGlrZSBGT1IsIFdISUxFLCBhbmQgWElGIGhhdmUgdGhlaXIgY29udGVudHMgYnJv a2VuIHVwIGludG8KLSAgYXJyYXlzIG9mIHN0cmluZyBwb2ludGVycy4gIFRoaXMgcm91dGluZSBj b25jYXRlbmF0ZXMgdGhlbSBiYWNrIGludG8gYQotICBzaW5nbGUgc3RyaW5nIGFnYWluLCBhbmQg dGhlbiBjYWxscyB0aGUgcmVhbCBhZGRtYWMoKSByb3V0aW5lIHRvIGVudGVyCi0gIHRoZSBkZWZp bml0aW9uIGludG8gdGhlIG1hY3JvIHRhYmxlLgotKi8KLWludAotYWRkbW1hYyhuYW0scykgY2hh ciAqbmFtLCAqc1tdOyB7ICAgICAgIC8qIEFkZCBhIG11bHRpbGluZSBtYWNybyBkZWZpbml0aW9u ICovCi0gICAgaW50IGksIHgsIHk7IGNoYXIgKnA7Ci0gICAgeCA9IDA7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogTGVuZ3RoIGNvdW50ZXIgKi8KLSAgICBmb3IgKGkgPSAwOyAoeSA9 IChpbnQpc3RybGVuKHNbaV0pKSA+IDA7IGkrKykgeyAvKiBBZGQgdXAgdG90YWwgbGVuZ3RoICov Ci0gICAgICAgIGRlYnVnKEYxMTEsImFkZG1tYWMgbGluZSIsc1tpXSx5KTsKLSAgICAgICAgeCAr PSB5OwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJhZGRtbWFjIGxpbmVzIiwiIixpKTsKLSAgICBk ZWJ1ZyhGMTAxLCJhZGRtbWFjIGxvb3AgZXhpdCIsIiIseSk7Ci0gICAgZGVidWcoRjExMSwiYWRk bW1hYyBsZW5ndGgiLG5hbSx4KTsKLSAgICBpZiAoeCA8IDApIHJldHVybigtMSk7Ci0KLSAgICBw ID0gbWFsbG9jKHgrMSk7ICAgICAgICAgICAgICAgICAgICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3Ig YWxsIG9mIGl0LiAqLwotICAgIGlmICghcCkgewotICAgICAgICBwcmludGYoIj9hZGRtbWFjIG1h bGxvYyBlcnJvcjogJXNcbiIsbmFtKTsKLSAgICAgICAgZGVidWcoRjExMCwiYWRkbW1hYyBtYWxs b2MgZXJyb3IiLG5hbSwwKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgKnAgPSAn XDAnOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3RhcnQgb2ZmIHdpdGggbnVsbCBzdHJp bmcuICovCi0gICAgZm9yIChpID0gMDsgKnNbaV07IGkrKykgICAgICAgICAgICAgLyogQ29uY2F0 ZW5hdGUgdGhlbSBhbGwgdG9nZXRoZXIuICovCi0gICAgICBja3N0cm5jYXQocCxzW2ldLHgrMSk7 Ci0gICAgeSA9IChpbnQpc3RybGVuKHApOyAgICAgICAgICAgICAgICAgLyogRmluYWwgcHJlY2F1 dGlvbi4gKi8KLSAgICBkZWJ1ZyhGMTExLCJhZGRtbWFjIGNvbnN0cnVjdGVkIHN0cmluZyIscCx5 KTsKLSAgICBpZiAoeSA9PSB4KSB7Ci0gICAgICAgIHkgPSBhZGRtYWMobmFtLHApOyAgICAgICAg ICAgICAgLyogQWRkIHJlc3VsdCB0byB0aGUgbWFjcm8gdGFibGUuICovCi0gICAgfSBlbHNlIHsK LSAgICAgICAgZGVidWcoRjEwMCwiYWRkbW1hYyBsZW5ndGggbWlzbWF0Y2giLCIiLDApOwotICAg ICAgICBwcmludGYoIlxuIWFkZG1tYWMgaW50ZXJuYWwgZXJyb3IhXG4iKTsKLSAgICAgICAgeSA9 IC0xOwotICAgIH0KLSAgICBmcmVlKHApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBG cmVlIHRoZSB0ZW1wb3JhcnkgY29weS4gKi8KLSAgICByZXR1cm4oeSk7Ci19Ci0KLS8qIEhlcmUg aXMgdGhlIHJlYWwgYWRkbWFjIHJvdXRpbmUuICovCi0KLS8qIFJldHVybnMgLTEgb24gZmFpbHVy ZSwgbWFjcm8gdGFibGUgaW5kZXggPj0gMCBvbiBzdWNjZXNzLiAqLwotCi1pbnQgbXRjaGFuZ2Vk ID0gMDsKLQotaW50Ci1hZGRtYWMobmFtLGRlZikgY2hhciAqbmFtLCAqZGVmOyB7ICAgICAgLyog QWRkIGEgbWFjcm8gdG8gdGhlIG1hY3JvIHRhYmxlICovCi0gICAgaW50IGksIHgsIHksIHosIG5h bWxlbiwgZGVmbGVuLCBmbGFnID0gMDsKLSAgICBpbnQgcmVwbGFjaW5nID0gMCwgZGVsZXRpbmcg PSAwOwotICAgIGNoYXIgKiBwID0gTlVMTCwgYywgKnM7Ci0gICAgZXh0ZXJuIGludCB0cmFfYXNn OyBpbnQgdHJhX3RtcDsKLQotICAgIGlmICghbmFtKSByZXR1cm4oLTEpOwotICAgIGlmICghKm5h bSkgcmV0dXJuKC0xKTsKLQotI2lmZGVmIElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIgJiYKLSNpZmRl ZiBJS1NEQ09ORgotICAgICAgICBpa3NkY2YKLSNlbHNlIC8qIElLU0RDT05GICovCi0gICAgICAg IDEKLSNlbmRpZiAvKiBJS1NEQ09ORiAqLwotICAgICAgICApIHsKLSAgICAgICAgaWYgKCFja3N0 cmNtcCgib25fZXhpdCIsbmFtLC0xLDApIHx8Ci0gICAgICAgICAgICAhY2tzdHJjbXAoIm9uX2xv Z291dCIsbmFtLC0xLDApKQotICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotI2VuZGlmIC8q IElLU0QgKi8KLQotICAgIG5hbWxlbiA9IDA7Ci0gICAgcCA9IG5hbTsKLSAgICB3aGlsZSAoKnAr KykgbmFtbGVuKys7ICAgICAgICAgICAgICAvKiAoaW5zdGVhZCBvZiBzdHJsZW4pICovCi0KLSAg ICB0cmFfdG1wID0gdHJhX2FzZzsgICAgICAgICAgICAgICAgICAvKiB0cmFjZS4uLiAqLwotICAg IGRlYnVnKEYxMTEsImFkZG1hYyBuYW0iLG5hbSxuYW1sZW4pOwotICAgIGlmICghZGVmKSB7ICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFdhdGNoIG91dCBmb3IgbnVsbCBwb2ludGVyICovCi0g ICAgICAgIGRlZmxlbiA9IDA7Ci0gICAgICAgIGRlYnVnKEYxMTEsImFkZG1hYyBkZWYiLCIobnVs bCBwb2ludGVyKSIsZGVmbGVuKTsKLSAgICB9IGVsc2UgewotICAgICAgICBkZWZsZW4gPSAwOwot ICAgICAgICBwID0gZGVmOwotICAgICAgICB3aGlsZSAoKnArKykgZGVmbGVuKys7ICAgICAgICAg IC8qIChpbnN0ZWFkIG9mIHN0cmxlbikgKi8KLSAgICAgICAgZGVidWcoRjAxMCwiYWRkbWFjIGRl ZiIsZGVmLDApOwotICAgIH0KLSNpZmRlZiBVU0VfVkFSTEVOICAgICAgICAgICAgICAgICAgICAg ICAvKiBOT1QgVVNFRCAqLwotICAgIC8qIFRoaXMgZG9lcyBub3QgYm9vc3QgcGVyZm9ybWFuY2Ug bXVjaCBiZWNhdXNlIHZhcmxlbigpIGRvZXMgYSBsb3QgKi8KLSAgICB4ID0gdmFybGVuKG5hbSwm cyk7Ci0gICAgaWYgKHggPiAwICYmIHggPj0gZGVmbGVuKSB7Ci0gICAgICAgIHN0cmNweShzLGRl Zik7ICAgICAgICAgICAgICAgICAgLyogTk9UIFVTRUQgKi8KLSAgICAgICAgZmxhZyA9IDE7Ci0g ICAgICAgIHAgPSBzOwotICAgIH0KLSNlbmRpZiAvKiBVU0VfVkFSTEVOICovCi0KLSAgICBpZiAo Km5hbSA9PSBDTURRKSBuYW0rKzsgICAgICAgICAgICAvKiBCYWNrc2xhc2ggcXVvdGU/ICovCi0g ICAgaWYgKCpuYW0gPT0gJyUnKSB7ICAgICAgICAgICAgICAgICAgLyogWWVzLCBpZiBpdCdzIGEg dmFyaWFibGUgbmFtZSwgKi8KLSAgICAgICAgaWYgKCEoYyA9ICoobmFtICsgMSkpKSByZXR1cm4o LTEpOyAvKiBWYXJpYWJsZSBuYW1lIGxldHRlciBvciBkaWdpdCAqLwotICAgICAgICBpZiAoIWZs YWcpIHsKLSAgICAgICAgICAgIHRyYV9hc2cgPSAwOwotICAgICAgICAgICAgZGVsbWFjKG5hbSww KTsgICAgICAgICAgICAgIC8qIERlbGV0ZSBhbnkgb2xkIHZhbHVlLiAqLwotICAgICAgICAgICAg dHJhX2FzZyA9IHRyYV90bXA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGRlZmxlbiA8IDEpIHsg ICAgICAgICAgICAgICAvKiBOdWxsIGRlZmluaXRpb24gKi8KLSAgICAgICAgICAgIHAgPSBOVUxM OyAgICAgICAgICAgICAgICAgICAvKiBCZXR0ZXIgbm90IG1hbGxvYyBvciBzdHJjcHkhICovCi0g ICAgICAgIH0gZWxzZSBpZiAoIWZsYWcpIHsgICAgICAgICAgICAgLyogQSBzdWJzdGFudGlhbCBk ZWZpbml0aW9uICovCi0gICAgICAgICAgICBwID0gbWFsbG9jKGRlZmxlbiArIDEpOyAgICAgLyog QWxsb2NhdGUgc3BhY2UgZm9yIGl0ICovCi0gICAgICAgICAgICBpZiAoIXApIHsKLSAgICAgICAg ICAgICAgICBwcmludGYoIj9hZGRtYWMgbWFsbG9jIGVycm9yIDJcbiIpOwotICAgICAgICAgICAg ICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICB9IGVsc2Ugc3RyY3B5KHAsZGVmKTsgICAgICAg LyogQ29weSBkZWYgaW50byBuZXcgc3BhY2UgKFNBRkUpICovCi0gICAgICAgIH0KLQotICAgICAg ICAvKiBOb3cgcCBwb2ludHMgdG8gdGhlIGRlZmluaXRpb24sIG9yIGlzIGEgbnVsbCBwb2ludGVy ICovCi0KLSAgICAgICAgaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB7ICAgICAvKiBcJTAtOSB2 YXJpYWJsZSAqLwotICAgICAgICAgICAgaWYgKG1hY2x2bCA8IDApIHsgICAgICAgICAgIC8qIEFy ZSB3ZSBjYWxsaW5nIG9yIGluIGEgbWFjcm8/ICovCi0gICAgICAgICAgICAgICAgZ192YXJbY10g PSBwOyAgICAgICAgICAgLyogTm8sIGl0J3MgdG9wIGxldmVsIG9uZSAqLwotICAgICAgICAgICAg ICAgIG1ha2VzdHIoJih0b3BhcmdbYyAtICcwJ10pLHApOyAvKiBUYWtlIGNhcmUgXCZfW10gdG9v ICovCi0gICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgLyogWWVzLCBpdCdz IGEgbWFjcm8gYXJndW1lbnQgKi8KLSAgICAgICAgICAgICAgICBtX2FyZ1ttYWNsdmxdW2MgLSAn MCddID0gcDsgLyogQXNzaWduIHRoZSB2YWx1ZSAqLwotICAgICAgICAgICAgICAgIG1ha2VzdHIo JihtX3hhcmdbbWFjbHZsXVtjIC0gJzAnXSkscCk7IC8qIEFuZCBhIGNvcHkgaGVyZSAqLwotICAg ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEl0 J3MgYSBcJWEteiB2YXJpYWJsZSAqLwotICAgICAgICAgICAgaWYgKGMgPCAzMyB8fCAodW5zaWdu ZWQgaW50KWMgPiBHVkFSUykgcmV0dXJuKC0xKTsKLSAgICAgICAgICAgIGlmIChpc3VwcGVyKGMp KSBjID0gKGNoYXIpIHRvbG93ZXIoYyk7Ci0gICAgICAgICAgICBnX3ZhcltjXSA9IHA7ICAgICAg ICAgICAgICAgLyogUHV0IHBvaW50ZXIgaW4gZ2xvYmFsLXZhciB0YWJsZSAqLwotICAgICAgICB9 Ci0gICAgICAgIGlmICh0cmFfYXNnKSB0cmFjZXZhbChuYW0scCk7Ci0gICAgICAgIHJldHVybigw KTsKLSAgICB9IGVsc2UgaWYgKCpuYW0gPT0gJyYnKSB7ICAgICAgICAgICAvKiBBbiBhcnJheSBy ZWZlcmVuY2U/ICovCi0gICAgICAgIGNoYXIgKipxID0gTlVMTDsKLSAgICAgICAgaW50IHJjID0g MDsKLSAgICAgICAgaWYgKCh5ID0gYXJyYXluYW0obmFtLCZ4LCZ6KSkgPCAwKSAvKiBJZiBzeW50 YXggaXMgYmFkICovCi0gICAgICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgICAgICAgLyog cmV0dXJuIC0xLiAqLwotICAgICAgICBpZiAoY2hrYXJyYXkoeCx6KSA8IDApICAgICAgICAgIC8q IElmIGFycmF5IG5vdCBkZWNsYXJlZCBvciAqLwotICAgICAgICAgIHJjID0gLTI7ICAgICAgICAg ICAgICAgICAgICAgIC8qIHN1YnNjcmlwdCBvdXQgb2YgcmFuZ2UsIHJldCAtMiAqLwotICAgICAg ICBpZiAoIWZsYWcpIHsKLSAgICAgICAgICAgIHRyYV9hc2cgPSAwOwotICAgICAgICAgICAgZGVs bWFjKG5hbSwwKTsgICAgICAgICAgICAgIC8qIERlbGV0ZSBhbnkgb2xkIHZhbHVlLiAqLwotICAg ICAgICAgICAgdHJhX2FzZyA9IHRyYV90bXA7Ci0gICAgICAgIH0KLSAgICAgICAgeCAtPSBBUlJB WUJBU0U7ICAgICAgICAgICAgICAgICAvKiBDb252ZXJ0IG5hbWUgbGV0dGVyIHRvIGluZGV4LiAq LwotICAgICAgICBpZiAoeCA+ICd6JyAtIEFSUkFZQkFTRSArIDEpCi0gICAgICAgICAgcmMgPSAt MTsKLSAgICAgICAgaWYgKHJjICE9IC0xKSB7Ci0gICAgICAgICAgICBpZiAoKHEgPSBhX3B0clt4 XSkgPT0gTlVMTCkgLyogSWYgYXJyYXkgbm90IGRlY2xhcmVkLCAqLwotICAgICAgICAgICAgICBy ZXR1cm4oLTMpOyAgICAgICAgICAgICAgIC8qIHJldHVybiAtMy4gKi8KLSAgICAgICAgfQotICAg ICAgICBpZiAocmMgPCAwKQotICAgICAgICAgIHJldHVybihyYyk7Ci0gICAgICAgIGlmICghZmxh ZykgewotICAgICAgICAgICAgaWYgKGRlZmxlbiA+IDApIHsKLSAgICAgICAgICAgICAgICBpZiAo KHAgPSBtYWxsb2MoZGVmbGVuKzEpKSA9PSBOVUxMKSB7IC8qIEFsbG9jYXRlIHNwYWNlICovCi0g ICAgICAgICAgICAgICAgICAgIHByaW50ZigiYWRkbWFjIG1hY3JvIGVycm9yIDc6ICVzXG4iLG5h bSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybigtNCk7ICAgICAgICAgLyogZm9yIG5ldyBk ZWYsIHJldHVybiAtNCBvbiBmYWlsLiAqLwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICBzdHJjcHkocCxkZWYpOyAgICAgICAgICAvKiBDb3B5IGRlZiBpbnRvIG5ldyBzcGFjZSAo U0FGRSkuICovCi0gICAgICAgICAgICB9IGVsc2UgcCA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAg ICAgcVt6XSA9IHA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBTdG9yZSBwb2ludGVyIHRvIGl0 LiAqLwotICAgICAgICBpZiAoeCA9PSAwKSB7ICAgICAgICAgICAgICAgICAgIC8qIEFyZyB2ZWN0 b3IgYXJyYXkgKi8KLSAgICAgICAgICAgIGlmICh6ID49IDAgJiYgeiA8PSA5KSB7ICAgICAvKiBD b3B5IHZhbHVlcyB0byBjb3JyZXNwb25kaW5nICAqLwotICAgICAgICAgICAgICAgIGlmIChtYWNs dmwgPCAwKSB7ICAgICAgIC8qIFwlMS4uOSB2YXJpYWJsZXMuICovCi0gICAgICAgICAgICAgICAg ICAgIG1ha2VzdHIoJih0b3Bhcmdbel0pLHApOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g ICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJihtX2FyZ1ttYWNsdmxdW3pdKSxwKTsKLSAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRyYV9h c2cpIHRyYWNldmFsKG5hbSxwKTsKLSAgICAgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAg ICAgICAvKiBEb25lLiAqLwotICAgIH0KLQotLyogTm90IGEgbWFjcm8gYXJndW1lbnQgb3IgYSB2 YXJpYWJsZSwgc28gaXQncyBhIG1hY3JvIGRlZmluaXRpb24gKi8KLQotI2lmZGVmIFVTRV9WQVJM RU4KLSAgICBpZiAoZmxhZykgewotICAgICAgICBpZiAodHJhX2FzZykgdHJhY2V2YWwobmFtLHAp OwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIFVTRV9WQVJMRU4gKi8KLSAg ICB4ID0gaXNhYShuYW0pID8gICAgICAgICAgICAgICAgICAgICAvKiBJZiBpdCdzIGFuIGFzc29j aWF0aXZlIGFycmF5ICovCi0gICAgICBteHhsb29rKG1hY3RhYixuYW0sbm1hYykgOiAgICAgICAg LyogbG9vayBpdCB1cCB0aGlzIHdheSAqLwotICAgICAgICBteGxvb2sobWFjdGFiLG5hbSxubWFj KTsgICAgICAgIC8qIG90aGVyd2lzZSB0aGlzIHdheS4gKi8KLSAgICBpZiAoeCA+IC0xKSB7ICAg ICAgICAgICAgICAgICAgICAgICAvKiBJZiBmb3VuZC4uLiAqLwotICAgICAgICBpZiAoZGVmbGVu ID4gMCkgICAgICAgICAgICAgICAgIC8qIGFuZCBhIG5ldyBkZWZpbml0aW9uIHdhcyBnaXZlbiAq LwotICAgICAgICAgIHJlcGxhY2luZyA9IDE7ICAgICAgICAgICAgICAgIC8qIHdlJ3JlIHJlcGxh Y2luZyAqLwotICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG90aGVy d2lzZSAqLwotICAgICAgICAgIGRlbGV0aW5nID0gMTsgICAgICAgICAgICAgICAgIC8qIHdlJ3Jl IGRlbGV0aW5nICovCi0gICAgfQotICAgIGlmIChkZWxldGluZykgeyAgICAgICAgICAgICAgICAg ICAgIC8qIERlbGV0aW5nLi4uICovCi0gICAgICAgIGlmIChkZWxtYWMobmFtLDApIDwgMCkKLSAg ICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICBtdGNoYW5nZWQrKzsKLSAgICAgICAgaWYgKHRy YV9hc2cpIHRyYWNldmFsKG5hbSxwKTsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0gZWxzZSBp ZiAoZGVmbGVuIDwgMSkgICAgICAgICAgICAgIC8qIE5ldyBtYWNybyB3aXRoIG5vIGRlZmluaXRp b24gKi8KLSAgICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3RoaW5n IHRvIGRvLiAqLwotCi0gICAgaWYgKHJlcGxhY2luZykgeyAgICAgICAgICAgICAgICAgICAgLyog UmVwbGFjaW5nIGFuIGV4aXN0aW5nIG1hY3JvICovCi0gICAgICAgIGlmIChtYWN0YWJbeF0ubXZh bCkgeyAgICAgICAgICAgLyogSWYgaXQgY3VycmVudGx5IGhhcyBhIGRlZmluaXRpb24sICovCi0g ICAgICAgICAgICBmcmVlKG1hY3RhYlt4XS5tdmFsKTsgICAgICAgLyogZnJlZSBpdC4gKi8KLSAg ICAgICAgICAgIG1hY3RhYlt4XS5tdmFsID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBtdGNo YW5nZWQrKzsKLSAgICAgICAgeSA9IHg7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXBs YWNlbWVudCBpbmRleC4gKi8KLQotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEFkZGluZyBhIG5ldyBtYWNyby4uLiAqLwotICAgICAgICBjaGFyIGMxLCBjMjsgICAg ICAgICAgICAgICAgICAgIC8qIFVzZSBmYXN0IGxvb2t1cCB0byBmaW5kIHRoZSAqLwotICAgICAg ICBjMSA9ICpuYW07ICAgICAgICAgICAgICAgICAgICAgIC8qIGFscGhhYmV0aWNhbCBzbG90LiAq LwotICAgICAgICBpZiAoaXN1cHBlcihjMSkpIGMxID0gKGNoYXIpIHRvbG93ZXIoYzEpOwotCi0g ICAgICAgIGlmIChubWFjIDwgNSkgeyAgICAgICAgICAgICAgICAgLyogTm90IHdvcnRoIGl0IGZv ciBzbWFsbCB0YWJsZXMgKi8KLSAgICAgICAgICAgIHkgPSAwOwotICAgICAgICB9IGVsc2UgeyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpcnN0IGJpbmFyeSBzZWFyY2ggdG8gZmluZCAqLwot ICAgICAgICAgICAgaW50IGxvID0gMDsgICAgICAgICAgICAgICAgIC8qIHdoZXJlIHRvIHN0YXJ0 ICovCi0gICAgICAgICAgICBpbnQgaGkgPSBubWFjOwotICAgICAgICAgICAgaW50IGNvdW50ID0g MDsKLSAgICAgICAgICAgIGNoYXIgYyA9IDA7Ci0gICAgICAgICAgICB3aGlsZSAobG8rMiA8IGhp ICYmICsrY291bnQgPCAxMikgewotICAgICAgICAgICAgICAgIHkgPSBsbyArICgoaGkgLSBsbykg LyAyKTsKLSAgICAgICAgICAgICAgICBjID0gKihtYWN0YWJbeV0ua3dkKTsKLSAgICAgICAgICAg ICAgICBpZiAoaXN1cHBlcihjKSkgYyA9IChjaGFyKSB0b2xvd2VyKGMpOwotICAgICAgICAgICAg ICAgIGlmIChjIDwgYzEpIHsKLSAgICAgICAgICAgICAgICAgICAgbG8gPSB5OwotICAgICAgICAg ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGhpID0geTsKLSAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB5ID0gKGMgPCBjMSkgPyBsbysxIDog bG87Ci0gICAgICAgIH0KLSAgICAgICAgLyogTm93IHNlYXJjaCBsaW5lYXJseSBmcm9tIHN0YXJ0 aW5nIGxvY2F0aW9uICovCi0gICAgICAgIGZvciAoIDsgeSA8IE1BQ19NQVggJiYgbWFjdGFiW3ld Lmt3ZCAhPSBOVUxMOyB5KyspIHsKLSAgICAgICAgICAgIGMyID0gKihtYWN0YWJbeV0ua3dkKTsK LSAgICAgICAgICAgIGlmIChpc3VwcGVyKGMyKSkgYzIgPSAoY2hhcikgdG9sb3dlcihjMik7Ci0g ICAgICAgICAgICBpZiAoYzEgPiBjMikKLSAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg ICAgICBpZiAoYzEgPCBjMikKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAo Y2tzdHJjbXAobmFtLG1hY3RhYlt5XS5rd2QsLTEsMCkgPD0gMCkKLSAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHkgPT0gTUFDX01BWCkgeyAgICAgICAgICAgICAv KiBNYWNybyB0YWJsZSBpcyBmdWxsLiAqLwotICAgICAgICAgICAgZGVidWcoRjEwMSwiYWRkbWFj IHRhYmxlIG92ZXJmbG93IiwiIix5KTsKLSAgICAgICAgICAgIHByaW50ZigiP01hY3JvIHRhYmxl IG92ZXJmbG93XG4iKTsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLSAgICAg ICAgaWYgKG1hY3RhYlt5XS5rd2QgIT0gTlVMTCkgeyAgICAvKiBNdXN0IGluc2VydCAqLwotICAg ICAgICAgICAgZm9yIChpID0gbm1hYzsgaSA+IHk7IGktLSkgeyAvKiBNb3ZlIHRoZSByZXN0IGRv d24gb25lIHNsb3QgKi8KLSAgICAgICAgICAgICAgICBtYWN0YWJbaV0ua3dkID0gbWFjdGFiW2kt MV0ua3dkOwotICAgICAgICAgICAgICAgIG1hY3RhYltpXS5tdmFsID0gbWFjdGFiW2ktMV0ubXZh bDsKLSAgICAgICAgICAgICAgICBtYWN0YWJbaV0uZmxncyA9IG1hY3RhYltpLTFdLmZsZ3M7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbXRjaGFuZ2VkKys7Ci0gICAgICAgIHAg PSBtYWxsb2MobmFtbGVuICsgMSk7ICAgICAgICAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIG5hbWUg Ki8KLSAgICAgICAgaWYgKCFwKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9BZGRtYWM6IE91dCBv ZiBtZW1vcnkgLSBcIiVzXCJcbiIsbmFtKTsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAg ICAgIH0KLSAgICAgICAgc3RyY3B5KHAsbmFtKTsgICAgICAgICAgICAgICAgICAvKiBDb3B5IG5h bWUgaW50byBuZXcgc3BhY2UgKFNBRkUpICovCi0gICAgICAgIG1hY3RhYlt5XS5rd2QgPSBwOyAg ICAgICAgICAgICAgLyogQWRkIHBvaW50ZXIgdG8gdGFibGUgKi8KLSAgICB9Ci0gICAgaWYgKGRl ZmxlbiA+IDApIHsgICAgICAgICAgICAgICAgICAgLyogSWYgd2UgaGF2ZSBhIGRlZmluaXRpb24g Ki8KLSAgICAgICAgcCA9IG1hbGxvYyhkZWZsZW4gKyAxKTsgICAgICAgICAvKiBHZXQgc3BhY2Ug Ki8KLSAgICAgICAgaWYgKHAgPT0gTlVMTCkgewotICAgICAgICAgICAgcHJpbnRmKCI/U3BhY2Ug ZXhoYXVzdGVkIC0gXCIlc1wiXG4iLCBuYW0pOwotICAgICAgICAgICAgaWYgKG1hY3RhYlt5XS5r d2QpIHsKLSAgICAgICAgICAgICAgICBmcmVlKG1hY3RhYlt5XS5rd2QpOwotICAgICAgICAgICAg ICAgIG1hY3RhYlt5XS5rd2QgPSBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0 dXJuKC0xKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0cmNweShwLGRlZik7ICAg ICAgICAgICAgICAvKiBDb3B5IHRoZSBkZWZpbml0aW9uIChTQUZFKSAqLwotICAgICAgICB9Ci0g ICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmaW5pdGlvbiBpcyBl bXB0eSAqLwotICAgICAgICBwID0gTlVMTDsKLSAgICB9Ci0gICAgbWFjdGFiW3ldLm12YWwgPSBw OyAgICAgICAgICAgICAgICAgLyogTWFjcm8gcG9pbnRzIHRvIGRlZmluaXRpb24gKi8KLSAgICBt YWN0YWJbeV0uZmxncyA9IDA7ICAgICAgICAgICAgICAgICAvKiBObyBmbGFncyAqLwotICAgIGlm ICghcmVwbGFjaW5nKSAgICAgICAgICAgICAgICAgICAgIC8qIElmIG5ldyBtYWNybyAqLwotICAg ICAgbm1hYysrOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvdW50IGl0ICovCi0gICAg aWYgKHRyYV9hc2cpIHRyYWNldmFsKG5hbSxwKTsKLSAgICByZXR1cm4oeSk7Ci19Ci0KLWludAot eGRlbG1hYyh4KSBpbnQgeDsgeyAgICAgICAgICAgICAgICAgICAgIC8qIERlbGV0ZSBhIG1hY3Jv IGdpdmVuIGl0cyBpbmRleCAqLwotICAgIGludCBpOwotICAgIGV4dGVybiBpbnQgdHJhX2FzZzsK LSAgICBpZiAoeCA8IDApIHJldHVybih4KTsKLSAgICBpZiAodHJhX2FzZykKLSAgICAgIHRyYWNl dmFsKG1hY3RhYlt4XS5rd2QsTlVMTCk7Ci0KLSAgICBpZiAobWFjdGFiW3hdLmt3ZCkgeyAgICAg ICAgICAgICAgICAvKiBGcmVlIHRoZSBzdG9yYWdlIGZvciB0aGUgbmFtZSAqLwotICAgICAgICBm cmVlKG1hY3RhYlt4XS5rd2QpOwotICAgICAgICBtYWN0YWJbeF0ua3dkID0gTlVMTDsKLSAgICB9 Ci0gICAgaWYgKG1hY3RhYlt4XS5tdmFsKSB7ICAgICAgICAgICAgICAgLyogYW5kIGZvciB0aGUg ZGVmaW5pdGlvbiAqLwotICAgICAgICBmcmVlKG1hY3RhYlt4XS5tdmFsKTsKLSAgICAgICAgbWFj dGFiW3hdLm12YWwgPSBOVUxMOwotICAgIH0KLSAgICBmb3IgKGkgPSB4OyBpIDwgbm1hYzsgaSsr KSB7ICAgICAgICAvKiBOb3cgbW92ZSB1cCB0aGUgb3RoZXJzLiAqLwotICAgICAgICBtYWN0YWJb aV0ua3dkID0gbWFjdGFiW2krMV0ua3dkOwotICAgICAgICBtYWN0YWJbaV0ubXZhbCA9IG1hY3Rh YltpKzFdLm12YWw7Ci0gICAgICAgIG1hY3RhYltpXS5mbGdzID0gbWFjdGFiW2krMV0uZmxnczsK LSAgICB9Ci0gICAgbm1hYy0tOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT25lIGxl c3MgbWFjcm8gKi8KLQotICAgIG1hY3RhYltubWFjXS5rd2QgPSBOVUxMOyAgICAgICAgICAgIC8q IERlbGV0ZSBsYXN0IGl0ZW0gZnJvbSB0YWJsZSAqLwotICAgIG1hY3RhYltubWFjXS5tdmFsID0g TlVMTDsKLSAgICBtYWN0YWJbbm1hY10uZmxncyA9IDA7Ci0gICAgbXRjaGFuZ2VkKys7Ci0gICAg cmV0dXJuKDApOwotfQotCi1pbnQKLWRlbG1hYyhuYW0sZXhhY3QpIGNoYXIgKm5hbTsgaW50IGV4 YWN0OyB7IC8qIERlbGV0ZSB0aGUgbmFtZWQgbWFjcm8gKi8KLSAgICBpbnQgeCwgejsKLSAgICBj aGFyICpwLCBjOwotICAgIGV4dGVybiBpbnQgdHJhX2FzZzsKLQotICAgIGlmICghbmFtKSByZXR1 cm4oMCk7ICAgICAgICAgICAgICAgIC8qIFdhdGNoIG91dCBmb3IgbnVsbCBwb2ludGVyICovCi0g ICAgZGVidWcoRjExMCwiZGVsbWFjIG5hbSIsbmFtLDApOwotI2lmZGVmIElLU0QKLSAgICBpZiAo IGluc2VydmVyICYmCi0jaWZkZWYgSUtTRENPTkYKLSAgICAgICAgaWtzZGNmCi0jZWxzZSAvKiBJ S1NEQ09ORiAqLwotICAgICAgICAxCi0jZW5kaWYgLyogSUtTRENPTkYgKi8KLSAgICAgICAgKSB7 Ci0gICAgICAgIGlmICghY2tzdHJjbXAoIm9uX2V4aXQiLG5hbSwtMSwwKSB8fAotICAgICAgICAg ICAgIWNrc3RyY21wKCJvbl9sb2dvdXQiLG5hbSwtMSwwKSkKLSAgICAgICAgICByZXR1cm4oLTEp OwotICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0KLSAgICBpZiAoKm5hbSA9PSBDTURRKSBuYW0r KzsKLSAgICBpZiAoKm5hbSA9PSAnJScpIHsgICAgICAgICAgICAgICAgICAvKiBJZiBpdCdzIGEg dmFyaWFibGUgbmFtZSAqLwotICAgICAgICBpZiAoIShjID0gKihuYW0rMSkpKSByZXR1cm4oMCk7 IC8qIEdldCB2YXJpYWJsZSBuYW1lIGxldHRlciBvciBkaWdpdCAqLwotICAgICAgICBwID0gKGNo YXIgKikwOyAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgdmFsdWUgcG9pbnRlciAqLwot ICAgICAgICBpZiAobWFjbHZsIDwgMCAmJiBjID49ICcwJyAmJiBjIDw9ICc5JykgeyAvKiBUb3At bGV2ZWwgZGlnaXQ/ICovCi0gICAgICAgICAgICBwID0gdG9wYXJnW2MgLSAnMCddOwotICAgICAg ICAgICAgaWYgKHApIGlmIChwICE9IGdfdmFyW2NdKSB7Ci0gICAgICAgICAgICAgICAgZnJlZShw KTsKLSAgICAgICAgICAgICAgICB0b3BhcmdbYyAtICcwJ10gPSBOVUxMOwotICAgICAgICAgICAg fQotICAgICAgICAgICAgcCA9IGdfdmFyW2NdOwotICAgICAgICAgICAgZ192YXJbY10gPSBOVUxM OyAgICAgICAgICAgIC8qIFplcm8gdGhlIHRhYmxlIGVudHJ5ICovCi0gICAgICAgIH0gZWxzZSBp ZiAobWFjbHZsID4gLTEgJiYgYyA+PSAnMCcgJiYgYyA8PSAnOScpIHsgLyogRGlnaXQ/ICovCi0g ICAgICAgICAgICBwID0gbV94YXJnW21hY2x2bF1bYyAtICcwJ107Ci0gICAgICAgICAgICBpZiAo cCkgaWYgKHAgIT0gZ192YXJbY10pIHsKLSAgICAgICAgICAgICAgICBmcmVlKHApOwotICAgICAg ICAgICAgICAgIG1feGFyZ1ttYWNsdmxdW2MgLSAnMCddID0gTlVMTDsKLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIHAgPSBtX2FyZ1ttYWNsdmxdW2MgLSAnMCddOyAvKiBHZXQgcG9pbnRlciBm cm9tIG1hY3JvLWFyZyB0YWJsZSAqLwotICAgICAgICAgICAgbV9hcmdbbWFjbHZsXVtjIC0gJzAn XSA9IE5VTEw7IC8qIFplcm8gdGhlIHRhYmxlIHBvaW50ZXIgKi8KLSAgICAgICAgfSBlbHNlIHsg ICAgICAgICAgICAgICAgICAgICAgICAvKiBJdCdzIGEgZ2xvYmFsIHZhcmlhYmxlICovCi0gICAg ICAgICAgICBpZiAoYyA8IDMzIHx8ICh1bnNpZ25lZCBpbnQpYyA+IEdWQVJTKSByZXR1cm4oMCk7 Ci0gICAgICAgICAgICBwID0gZ192YXJbY107ICAgICAgICAgICAgICAgLyogR2V0IHBvaW50ZXIg ZnJvbSBnbG9iYWwtdmFyIHRhYmxlICovCi0gICAgICAgICAgICBnX3ZhcltjXSA9IE5VTEw7ICAg ICAgICAgICAgLyogWmVybyB0aGUgdGFibGUgZW50cnkgKi8KLSAgICAgICAgfQotICAgICAgICBp ZiAocCkgewotICAgICAgICAgICAgZGVidWcoRjAxMCwiZGVsbWFjIGRlZiIscCwwKTsKLSAgICAg ICAgICAgIGZyZWUocCk7ICAgICAgICAgICAgICAgICAgICAvKiBGcmVlIHRoZSBzdG9yYWdlICov Ci0gICAgICAgICAgICBwID0gTlVMTDsKLSAgICAgICAgfSBlbHNlIGRlYnVnKEYxMTAsImRlbG1h YyBkZWYiLCIobnVsbCBwb2ludGVyKSIsMCk7Ci0gICAgICAgIGlmICh0cmFfYXNnKSB0cmFjZXZh bChuYW0sTlVMTCk7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0gICAgaWYgKCpuYW0gPT0g JyYnKSB7ICAgICAgICAgICAgICAgICAgLyogQW4gYXJyYXkgcmVmZXJlbmNlPyAqLwotICAgICAg ICBjaGFyICoqcTsKLSAgICAgICAgaWYgKGFycmF5bmFtKG5hbSwmeCwmeikgPCAwKSAgICAvKiBJ ZiBzeW50YXggaXMgYmFkICovCi0gICAgICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgICAg ICAgLyogcmV0dXJuIC0xLiAqLwotICAgICAgICB4IC09IEFSUkFZQkFTRTsgICAgICAgICAgICAg ICAgIC8qIENvbnZlcnQgbmFtZSB0byBudW1iZXIuICovCi0gICAgICAgIGlmICgocSA9IGFfcHRy W3hdKSA9PSBOVUxMKSAgICAgLyogSWYgYXJyYXkgbm90IGRlY2xhcmVkLCAqLwotICAgICAgICAg IHJldHVybigtMik7ICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiAtMi4gKi8KLSAgICAgICAg aWYgKHogPiBhX2RpbVt4XSkgICAgICAgICAgICAgICAvKiBJZiBzdWJzY3JpcHQgb3V0IG9mIHJh bmdlLCAqLwotICAgICAgICAgIHJldHVybigtMyk7ICAgICAgICAgICAgICAgICAgIC8qIHJldHVy biAtMy4gKi8KLSAgICAgICAgaWYgKHFbel0pIHsgICAgICAgICAgICAgICAgICAgICAvKiBJZiB0 aGVyZSBpcyBhbiBvbGQgdmFsdWUsICovCi0gICAgICAgICAgICBkZWJ1ZyhGMDEwLCJkZWxtYWMg ZGVmIixxW3pdLDApOwotICAgICAgICAgICAgaWYgKHggIT0gMCkgICAgICAgICAgICAgICAgIC8q IE1hY3JvIGFyZyB2ZWN0b3IgaXMganVzdCBhIGNvcHkgKi8KLSAgICAgICAgICAgICAgZnJlZShx W3pdKTsgICAgICAgICAgICAgICAvKiBPdGhlcnMgYXJlIHJlYWwgc28gZnJlZSB0aGVtICovCi0g ICAgICAgICAgICBxW3pdID0gTlVMTDsKLSAgICAgICAgICAgIGlmICh4ID09IDApIHsgICAgICAg ICAgICAgICAvKiBBcmcgdmVjdG9yIGFycmF5ICovCi0gICAgICAgICAgICAgICAgaWYgKHogPj0g MCAmJiB6IDw9IDkpIHsgLyogQ29weSB2YWx1ZXMgdG8gY29ycmVzcG9uZGluZyAgKi8KLSAgICAg ICAgICAgICAgICAgICAgaWYgKG1hY2x2bCA8IDApIHsgICAvKiBcJTEuLjkgdmFyaWFibGVzLiAq LwotICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmKHRvcGFyZ1t6XSksTlVMTCk7Ci0g ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYWtl c3RyKCYobV9hcmdbbWFjbHZsXVt6XSksTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodHJhX2FzZykg dHJhY2V2YWwobmFtLE5VTEwpOwotICAgICAgICB9IGVsc2UgZGVidWcoRjAxMCwiZGVsbWFjIGRl ZiIsIihudWxsIHBvaW50ZXIpIiwwKTsKLSAgICB9Ci0KLSAgIC8qIE5vdCBhIHZhcmlhYmxlIG9y IGFuIGFycmF5LCBzbyBpdCBtdXN0IGJlIGEgbWFjcm8uICovCi0KLSAgICB6ID0gaXNhYShuYW0p OwotICAgIGRlYnVnKEYxMTEsImRlbG1hYyBpc2FhIixuYW0seik7Ci0gICAgZGVidWcoRjExMSwi ZGVsbWFjIGV4YWN0IixuYW0sZXhhY3QpOwotICAgIHggPSB6ID8gbXh4bG9vayhtYWN0YWIsbmFt LG5tYWMpIDoKLSAgICAgIGV4YWN0ID8gbXhsb29rKG1hY3RhYixuYW0sbm1hYykgOgotICAgICAg ICBtbG9vayhtYWN0YWIsbmFtLG5tYWMpOwotICAgIGlmICh4IDwgMCkgewotICAgICAgICBkZWJ1 ZyhGMTExLCJkZWxtYWMgbWxvb2siLG5hbSx4KTsKLSAgICAgICAgcmV0dXJuKHgpOwotICAgIH0K LSAgICByZXR1cm4oeGRlbG1hYyh4KSk7Ci19Ci0KLVZPSUQKLWluaXRtYWMoKSB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBJbml0IG1hY3JvICYgdmFyaWFibGUgdGFibGVzICovCi0g ICAgaW50IGksIGosIHg7Ci0KLSAgICBubWFjID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBObyBtYWNyb3MgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgTUFDX01BWDsgaSsrKSB7ICAg ICAvKiBJbml0aWFsaXplIHRoZSBtYWNybyB0YWJsZSAqLwotICAgICAgICBtYWN0YWJbaV0ua3dk ID0gTlVMTDsKLSAgICAgICAgbWFjdGFiW2ldLm12YWwgPSBOVUxMOwotICAgICAgICBtYWN0YWJb aV0uZmxncyA9IDA7Ci0gICAgfQotICAgIG10Y2hhbmdlZCsrOwotICAgIHggPSAoTUFYQVJHTElT VCArIDEpICogc2l6ZW9mKGNoYXIgKiopOwotICAgIGZvciAoaSA9IDA7IGkgPCBNQUNMRVZFTDsg aSsrKSB7ICAgIC8qIEluaXQgdGhlIG1hY3JvIGFyZ3VtZW50IHRhYmxlcyAqLwotICAgICAgICBt X3hhcmdbaV0gPSAoY2hhciAqKikgbWFsbG9jKHgpOwotICAgICAgICBtcnZhbFtpXSA9IE5VTEw7 ICAgICAgICAgICAgICAgIC8qIE1hY3JvIHJldHVybiB2YWx1ZSAqLwotICAgICAgICAvKiBQb2lu dGVyIHRvIGVudGlyZSBhcmd1bWVudCB2ZWN0b3IsIGxldmVsIGksIGZvciBcJl9bXSBhcnJheSAq LwotICAgICAgICBmb3IgKGogPSAwOyBqIDw9IE1BWEFSR0xJU1Q7IGorKykgeyAvKiBNYWNybyBh cmd1bWVudCBsaXN0ICovCi0gICAgICAgICAgICBpZiAoaiA8IDEwKSAgICAgICAgICAgICAgICAg LyogRm9yIHRoZSBcJTAuLlwlOSB2YXJpYWJsZXMgKi8KLSAgICAgICAgICAgICAgbV9hcmdbaV1b al0gPSBOVUxMOyAgICAgICAvKiBQb2ludGVyIHRvIGFyZyBqLCBsZXZlbCBpLiAqLwotICAgICAg ICAgICAgaWYgKG1feGFyZ1tpXSkgICAgICAgICAgICAgIC8qIEZvciBcJl9bXSAtIGFsbCBhcmdz LiAqLwotICAgICAgICAgICAgICBtX3hhcmdbaV1bal0gPSBOVUxMOwotICAgICAgICB9Ci0gICAg fQotICAgIGZvciAoaSA9IDA7IGkgPCBHVkFSUzsgaSsrKSB7ICAgICAgIC8qIEFuZCB0aGUgZ2xv YmFsIHZhcmlhYmxlcyB0YWJsZSAqLwotICAgICAgICBnX3ZhcltpXSA9IE5VTEw7Ci0gICAgfQot ICAgIC8qIEFuZCB0aGUgdGFibGUgb2YgYXJyYXlzICovCi0gICAgZm9yIChpID0gMDsgaSA8IChp bnQpICd6JyAtIEFSUkFZQkFTRSArIDE7IGkrKykgewotICAgICAgICBhX3B0cltpXSA9IChjaGFy ICoqKSBOVUxMOyAgICAgIC8qIE51bGwgcG9pbnRlciBmb3IgZWFjaCAqLwotICAgICAgICBhX2Rp bVtpXSA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIGFuZCBhIGRpbWVuc2lvbiBvZiB6ZXJvICov Ci0gICAgICAgIGFfbGlua1tpXSA9IC0xOwotICAgICAgICBmb3IgKGogPSAwOyBqIDwgQ01EU1RL TDsgaisrKSB7Ci0gICAgICAgICAgICBhYV9wdHJbal1baV0gPSAoY2hhciAqKikgTlVMTDsKLSAg ICAgICAgICAgIGFhX2RpbVtqXVtpXSA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWludAot cG9wY2x2bCgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvcCBjb21tYW5kIGxl dmVsLCByZXR1cm4gY21kbHZsICovCi0gICAgZXh0ZXJuIGludCB0cmFfY21kOwotICAgIHN0cnVj dCBsb2NhbHZhciAqIHY7Ci0gICAgaW50IGksIHRvcGNtZDsKLSAgICBkZWJ1ZyhGMTAxLCJwb3Bj bHZsIGNtZGx2bCIsIiIsY21kbHZsKTsKLSAgICBpZiAoY21kbHZsID4gMCkgewotICAgICAgICBp ZiAoKHYgPSBsb2NhbGhlYWRbY21kbHZsXSkpIHsgIC8qIERpZCB3ZSBzYXZlIGFueSB2YXJpYWJs ZXM/ICovCi0gICAgICAgICAgICB3aGlsZSAodikgeyAgICAgICAgICAgICAgICAgLyogWWVzICov Ci0gICAgICAgICAgICAgICAgaWYgKHYtPmx2X3ZhbHVlKSAgICAgICAgLyogQ29weSBvbGQgb25l cyBiYWNrICovCi0gICAgICAgICAgICAgICAgICBhZGRtYWModi0+bHZfbmFtZSx2LT5sdl92YWx1 ZSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgZGVsbWFjKHYtPmx2 X25hbWUsMSk7Ci0gICAgICAgICAgICAgICAgdiA9IHYtPmx2X25leHQ7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgICAgICBmcmVlbG9jYWwoY21kbHZsKTsgICAgICAgICAgLyogRnJlZSBsb2NhbCBz dG9yYWdlICovCi0gICAgICAgIH0KLSAgICAgICAgLyogQXV0b21hdGljIGFycmF5cyBkbyBub3Qg dXNlIHRoZSBsb2NhbGhlYWQgbGlzdCAqLwotCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCAyODsg aSsrKSB7ICAgICAgLyogRnJlZSBhbnkgbG9jYWwgYXJyYXlzICovCi0gICAgICAgICAgICBpZiAo YWFfcHRyW2NtZGx2bF1baV0pIHsJLyogRG9lcyB0aGlzIG9uZSBleGlzdD8gKi8KLSAgICAgICAg ICAgICAgICBkY2xhcnJheSgoY2hhcikoaStBUlJBWUJBU0UpLC0xKTsgLyogRGVzdHJveSBnbG9i YWwgb25lICovCi0gICAgICAgICAgICAgICAgYV9wdHJbaV0gPSBhYV9wdHJbY21kbHZsXVtpXTsK LSAgICAgICAgICAgICAgICBhX2RpbVtpXSA9IGFhX2RpbVtjbWRsdmxdW2ldOwotICAgICAgICAg ICAgICAgIGFhX3B0cltjbWRsdmxdW2ldID0gKGNoYXIgKiopTlVMTDsKLSAgICAgICAgICAgICAg ICBhYV9kaW1bY21kbHZsXVtpXSA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGFhX2RpbVtj bWRsdmxdW2ldID09IC0yMykgeyAvKiBTZWNyZXQgY29kZSAqLwotICAgICAgICAgICAgICAgIGRj bGFycmF5KChjaGFyKShpK0FSUkFZQkFTRSksLTEpOyAvKiAoc2VlIHB1c2hhcnJheSgpKSAqLwot ICAgICAgICAgICAgICAgIGFhX3B0cltjbWRsdmxdW2ldID0gKGNoYXIgKiopTlVMTDsKLSAgICAg ICAgICAgICAgICBhYV9kaW1bY21kbHZsXVtpXSA9IDA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg ICAgICAgIC8qIE90aGVyd2lzZSBkbyBub3RoaW5nIC0gaXQgaXMgYSBsb2NhbCBhcnJheSB0aGF0 IHdhcyBkZWNsYXJlZCAqLwotICAgICAgICAgICAgLyogYXQgYSBsZXZlbCBhYm92ZSB0aGlzIG9u ZSBzbyBsZWF2ZSBpdCBhbG9uZS4gKi8KLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoY21kbHZs IDwgMSkgeyAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSdyZSBhbHJlYWR5IGF0IHRvcCBsZXZl bCAqLwotICAgICAgICBjbWRsdmwgPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIGp1c3QgbWFr ZSBzdXJlIGFsbCB0aGUgKi8KLSAgICAgICAgdGxldmVsID0gLTE7ICAgICAgICAgICAgICAgICAg ICAvKiBzdGFjayBwb2ludGVycyBhcmUgc2V0IHJpZ2h0ICovCi0gICAgICAgIG1hY2x2bCA9IC0x OyAgICAgICAgICAgICAgICAgICAgLyogYW5kIHJldHVybiAqLwotICAgIH0gZWxzZSBpZiAoY21k c3RrW2NtZGx2bF0uc3JjID09IENNRF9URikgeyAvKiBSZWFkaW5nIGZyb20gVEFLRSBmaWxlPyAq LwotICAgICAgICBkZWJ1ZyhGMTAxLCJwb3BjbHZsIHRsZXZlbCIsIiIsdGxldmVsKTsKLSAgICAg ICAgaWYgKHRsZXZlbCA+IC0xKSB7ICAgICAgICAgICAgICAvKiBZZXMsICovCi0gICAgICAgICAg ICBmY2xvc2UodGZpbGVbdGxldmVsXSk7ICAgICAgLyogY2xvc2UgaXQgKi8KLQotICAgICAgICAg ICAgaWYgKHRyYV9jbWQpCi0gICAgICAgICAgICAgIHByaW50ZigiWyVkXSAtRjogXCIlc1wiXG4i LGNtZGx2bCx0Zm5hbVt0bGV2ZWxdKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsIkNNRCAtRiIs dGZuYW1bdGxldmVsXSxjbWRsdmwpOwotICAgICAgICAgICAgaWYgKHRmbmFtW3RsZXZlbF0pIHsg ICAgICAgIC8qIGZyZWUgc3RvcmFnZSBmb3IgbmFtZSAqLwotICAgICAgICAgICAgICAgIGZyZWUo dGZuYW1bdGxldmVsXSk7Ci0gICAgICAgICAgICAgICAgdGZuYW1bdGxldmVsXSA9IE5VTEw7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgICAgICB0bGV2ZWwtLTsgICAgICAgICAgICAgICAgICAgLyog YW5kIHBvcCB0YWtlIGxldmVsICovCi0gICAgICAgICAgICBjbWRsdmwtLTsgICAgICAgICAgICAg ICAgICAgLyogYW5kIGNvbW1hbmQgbGV2ZWwgKi8KLSAgICAgICAgICAgIHF1aWV0ID0geHF1aWV0 W2NtZGx2bF07Ci0gICAgICAgICAgICB2YXJldmFsID0geHZhcmV2W2NtZGx2bF07Ci0gICAgICAg IH0gZWxzZQotICAgICAgICAgIHRsZXZlbCA9IC0xOwotICAgIH0gZWxzZSBpZiAoY21kc3RrW2Nt ZGx2bF0uc3JjID09IENNRF9NRCkgeyAvKiBJbiBhIG1hY3JvPyAqLwotICAgICAgICB0b3BjbWQg PSBsYXN0Y21kW21hY2x2bF07Ci0gICAgICAgIGRlYnVnKEYxMDEsInBvcGNsdmwgbWFjbHZsIiwi IixtYWNsdmwpOwotICAgICAgICBpZiAobWFjbHZsID4gLTEpIHsgICAgICAgICAgICAgIC8qIFll cywgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICAgIGNo YXIgKipxOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgIG1hY3BbbWFjbHZsXSA9 ICIiOyAgICAgICAgICAvKiBzZXQgbWFjcm8gcG9pbnRlciB0byBudWxsIHN0cmluZyAqLwotICAg ICAgICAgICAgKmNtZGJ1ZiA9ICdcMCc7ICAgICAgICAgICAgIC8qIGNsZWFyIHRoZSBjb21tYW5k IGJ1ZmZlciAqLwotCi0gICAgICAgICAgICBpZiAoKG1hY2x2bCA+IDApICYmICAgICAgICAgLyog MiBNYXkgMTk5OSAqLwotICAgICAgICAgICAgICAgIChtX2FyZ1ttYWNsdmwtMV1bMF0pICYmCi0g ICAgICAgICAgICAgICAgKCFzdHJuY21wKG1fYXJnW21hY2x2bC0xXVswXSwiX3hpZiIsNCkgfHwK LSAgICAgICAgICAgICAgICAgIXN0cm5jbXAobV9hcmdbbWFjbHZsLTFdWzBdLCJfZm9yIiw0KSB8 fAotICAgICAgICAgICAgICAgICAhc3RybmNtcChtX2FyZ1ttYWNsdmwtMV1bMF0sIl9zd2kiLDQp IHx8Ci0gICAgICAgICAgICAgICAgICFzdHJuY21wKG1fYXJnW21hY2x2bC0xXVswXSwiX3doaSIs NCkpICYmCi0gICAgICAgICAgICAgICAgbXJ2YWxbbWFjbHZsKzFdKSB7Ci0gICAgICAgICAgICAg ICAgbWFrZXN0cigmKG1ydmFsW21hY2x2bC0xXSksbXJ2YWxbbWFjbHZsKzFdKTsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIGlmIChtYWNsdmwrMSA8IE1BQ0xFVkVMKSB7Ci0gICAgICAgICAg ICAgICAgaWYgKG1ydmFsW21hY2x2bCsxXSkgeyAgLyogRnJlZSBhbnkgZGVlcGVyIHJldHVybiB2 YWx1ZXMuICovCi0gICAgICAgICAgICAgICAgICAgIGZyZWUobXJ2YWxbbWFjbHZsKzFdKTsKLSAg ICAgICAgICAgICAgICAgICAgbXJ2YWxbbWFjbHZsKzFdID0gTlVMTDsKLSAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodHJhX2NtZCkKLSAgICAgICAgICAg ICAgcHJpbnRmKCJbJWRdIC1NOiBcIiVzXCJcbiIsY21kbHZsLG1fYXJnW2NtZHN0a1tjbWRsdmxd Lmx2bF1bMF0pOwotICAgICAgICAgICAgZGVidWcoRjExMSwiQ01EIC1NIixtX2FyZ1tjbWRzdGtb Y21kbHZsXS5sdmxdWzBdLGNtZGx2bCk7Ci0KLSAgICAgICAgICAgIG1hY2x2bC0tOyAgICAgICAg ICAgICAgICAgICAvKiBQb3AgbWFjcm8gbGV2ZWwgKi8KLSAgICAgICAgICAgIGNtZGx2bC0tOyAg ICAgICAgICAgICAgICAgICAvKiBhbmQgY29tbWFuZCBsZXZlbCAqLwotICAgICAgICAgICAgZGVi dWcoRjEwMSwicG9wY2x2bCBtYWMgbmV3IG1hY2x2bCIsIiIsbWFjbHZsKTsKLSAgICAgICAgICAg IGRlYnVnKEYwMTAsInBvcGNsdmwgbWFjIG1ydmFsW21hY2x2bCsxXSIsbXJ2YWxbbWFjbHZsKzJd LDApOwotCi0gICAgICAgICAgICBxdWlldCA9IHhxdWlldFtjbWRsdmxdOwotCSAgICB2YXJldmFs ID0geHZhcmV2W2NtZGx2bF07Ci0gICAgICAgICAgICBpZiAobWFjbHZsID4gLTEpIHsKLSAgICAg ICAgICAgICAgICBhX3B0clswXSA9IG1feGFyZ1ttYWNsdmxdOwotICAgICAgICAgICAgICAgIGFf ZGltWzBdID0gbl94YXJnW21hY2x2bF0gLSAxOwotCQlkZWJ1ZyhGMTExLCJhX2RpbVswXSIsIkIi LGFfZGltWzBdKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYV9wdHJb MF0gPSB0b3B4YXJnOwotICAgICAgICAgICAgICAgIGFfZGltWzBdID0gdG9wYXJnYyAtIDE7Ci0J CWRlYnVnKEYxMTEsImFfZGltWzBdIiwiQyIsYV9kaW1bMF0pOwotICAgICAgICAgICAgfQotICAg ICAgICB9IGVsc2UgewotICAgICAgICAgICAgbWFjbHZsID0gLTE7Ci0gICAgICAgIH0KLSNpZm5k ZWYgTk9TRVhQCi0gICAgICAgIGRlYnVnKEYxMDEsInBvcGNsdmwgdG9wY21kIiwiIix0b3BjbWQp OwotICAgICAgICBpZiAodG9wY21kID09IFhYU0VYUCkgewotICAgICAgICAgICAgZXh0ZXJuIGNo YXIgKiBzZXhwdmFsOwotICAgICAgICAgICAgbWFrZXN0cigmKG1ydmFsW21hY2x2bCsxXSksc2V4 cHZhbCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT1NFWFAgKi8KLSAgICB9IGVsc2UgewotICAg ICAgICBjbWRsdmwtLTsKLSAgICB9Ci0gICAgZGVidWcoRjEwMSwicG9wY2x2bCBjbWRsdmwiLCIi LGNtZGx2bCk7Ci0gICAgaWYgKHByc3RyaW5nW2NtZGx2bF0pIHsKLSAgICAgICAgY21zZXRwKHBy c3RyaW5nW2NtZGx2bF0pOwotICAgICAgICBtYWtlc3RyKCYocHJzdHJpbmdbY21kbHZsXSksTlVM TCk7Ci0gICAgfQotI2lmbmRlZiBNQUMKLSAgICBpZiAoY21kbHZsIDwgMSB8fCB4Y21kc3JjID09 IENNRF9LQikgeyAvKiBJZiBhdCBwcm9tcHQgKi8KLSAgICAgICAgc2V0aW50KCk7Ci0gICAgICAg IGNvbmNiKChjaGFyKWVzY2FwZSk7ICAgICAgICAgICAgLyogR28gaW50byBjYnJlYWsgbW9kZSAq LwotICAgIH0KLSNlbmRpZiAvKiBNQUMgKi8KLSAgICB4Y21kc3JjID0gY21kc3RrW2NtZGx2bF0u c3JjOwotICAgIGRlYnVnKEYxMDEsInBvcGNsdmwgeGNtZHNyYyIsIiIseGNtZHNyYyk7Ci0gICAg ZGVidWcoRjEwMSwicG9wY2x2bCB0bGV2ZWwiLCIiLHRsZXZlbCk7Ci0gICAgcmV0dXJuKGNtZGx2 bCA8IDEgPyAwIDogY21kbHZsKTsgICAgLyogUmV0dXJuIGNvbW1hbmQgbGV2ZWwgKi8KLX0KLSNl bHNlIC8qIE5vIHNjcmlwdCBwcm9ncmFtbWluZyBsYW5ndWFnZSAqLwotaW50IHBvcGNsdmwoKSB7 ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEp1c3QgY2xvc2UgY3VycmVudCB0YWtlIGZpbGUu ICovCi0gICAgaWYgKHRsZXZlbCA+IC0xKSB7ICAgICAgICAgICAgICAgICAgLyogaWYgYW55Li4u ICovCi0gICAgICAgIGlmICh0Zm5hbVt0bGV2ZWxdKSB7Ci0gICAgICAgICAgICBmcmVlKHRmbmFt W3RsZXZlbF0pOwotICAgICAgICAgICAgdGZuYW1bdGxldmVsXSA9IE5VTEw7Ci0gICAgICAgIH0K LSAgICAgICAgZmNsb3NlKHRmaWxlW3RsZXZlbC0tXSk7Ci0gICAgfQotICAgIGlmICh0bGV2ZWwg PT0gLTEpIHsgICAgICAgICAgICAgICAgIC8qIEFuZCBpZiBiYWNrIGF0IHRvcCBsZXZlbCAqLwot ICAgICAgICBzZXRpbnQoKTsKLSAgICAgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsgICAgICAgICAg ICAvKiBhbmQgZ28gYmFjayBpbnRvIGNicmVhayBtb2RlLiAqLwotICAgIH0KLSAgICB4Y21kc3Jj ID0gdGxldmVsID4gLTEgPyBDTURfVEYgOiAwOwotICAgIHJldHVybih0bGV2ZWwgKyAxKTsKLX0K LSNlbmRpZiAvKiBOT1NQTCAqLwotCi0KLSNpZm5kZWYgTk9TUEwKLXN0YXRpYyBpbnQKLWlzZW9t KG0pIGNoYXIgKiBtOyB7ICAgICAgICAgICAgICAgICAgICAvKiBUZXN0IGlmIGF0IGVuZCBvZiBt YWNybyBkZWYgKi8KLSAgICBpZiAoIW0pCi0gICAgICBtID0gIiI7Ci0gICAgZGVidWcoRjExMSwi aXNlb20iLG0sbWFjbHZsKTsKLSAgICB3aGlsZSAoKm0pIHsKLSAgICAgICAgLyogQW55dGhpbmcg YnV0IFNwYWNlIGFuZCBDb21tYSBtZWFucyBtb3JlIG1hY3JvIGlzIGxlZnQgKi8KLSAgICAgICAg aWYgKCgqbSA+IFNQKSAmJiAoKm0gIT0gJywnKSkgewotICAgICAgICAgICAgZGVidWcoRjExMSwi aXNlb20gcmV0dXJuIixtLDApOwotICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICB9Ci0g ICAgICAgIG0rKzsKLSAgICB9Ci0gICAgZGVidWcoRjExMSwiaXNlb20gcmV0dXJuIixtLDEpOwot ICAgIHJldHVybigxKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdGhpbmcgbGVmdCAq LwotfQotI2VuZGlmIC8qIE5PU1BMICovCi0KLS8qIFBvcCBhbGwgY29tbWFuZCBsZXZlbHMgdGhh dCBjYW4gYmUgcG9wcGVkICovCi0KLWludAotcHJlcG9wKCkgewotICAgIGlmIChjbWRsdmwgPiAw KSB7ICAgICAgICAgICAgICAgICAgIC8qIElmIGNvbW1hbmQgbGV2ZWwgaXMgPiAwIGFuZC4uLiAq LwotICAgICAgICB3aGlsZSAoCi0jaWZuZGVmIE5PU1BMCi0gICAgICAgICAgICAgICAoKGNtZHN0 a1tjbWRsdmxdLnNyYyA9PSBDTURfVEYpICYmIC8qIENvbW1hbmQgc291cmNlIGlzIGZpbGUgKi8K LSNlbmRpZiAvKiBOT1NQTCAqLwotICAgICAgICAgICAgKHRsZXZlbCA+IC0xKSAmJgotICAgICAg ICAgICAgZmVvZih0ZmlsZVt0bGV2ZWxdKSkgICAgICAgIC8qIEFuZCBhdCBlbmQgb2YgZmlsZS4u LiAqLwotI2lmbmRlZiBOT1NQTAotICAgICAgICAgICAgICAgLyogT3IgY29tbWFuZCBzb3VyY2Ug aXMgbWFjcm8uLi4gKi8KLSAgICAgICAgICAgICAgIHx8ICgoY21kc3RrW2NtZGx2bF0uc3JjID09 IENNRF9NRCkgJiYKLSAgICAgICAgICAgICAgICAobWFjbHZsID4gLTEpICYmCi0gICAgICAgICAg ICAgICAgaXNlb20obWFjcFttYWNsdmxdKSkpICAvKiBhbmQgYXQgZW5kIG9mIG1hY3JvLCB0aGVu Li4uICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICAgICAgewotICAgICAgICAgICAgICBwb3Bj bHZsKCk7ICAgICAgICAgICAgICAgIC8qIHBvcCBjb21tYW5kIGxldmVsLiAqLwotICAgICAgICB9 Ci0gICAgfQotICAgIHJldHVybihjbWRsdmwgPCAxID8gMCA6IGNtZGx2bCk7ICAgIC8qIFJldHVy biBjb21tYW5kIGxldmVsICovCi19Ci0KLS8qIFNUT1AgLSBnZXQgYmFjayB0byBDLUtlcm1pdCBw cm9tcHQsIG5vIG1hdHRlciB3aGVyZSBmcm9tLiAqLwotCi1pbnQKLWRvc3RvcCgpIHsKLSAgICBl eHRlcm4gaW50IGNtZGRlcDsKLSAgICB3aGlsZSAocG9wY2x2bCgpKSA7ICAgICAgICAgLyogUG9w IGFsbCBtYWNyb3MgJiB0YWtlIGZpbGVzICovCi0jaWZuZGVmIE5PU1BMCi0gICAgaWYgKGNtZGRl cCA+IC0xKSAgICAgICAgICAgIC8qIEFuZCBhbGwgcmVjdXJzaXZlIGNtZCBwa2cgaW52b2NhdGlv bnMgKi8KLSAgICAgIHdoaWxlIChjbXBvcCgpID4gLTEpIDsKLSNlbmRpZiAvKiBOT1NQTCAqLwot ICAgIGNtaW5pKGNreGVjaCk7ICAgICAgICAgICAgICAvKiBDbGVhciB0aGUgY29tbWFuZCBidWZm ZXIuICovCi0gICAgcmV0dXJuKDApOwotfQotCi0vKiBDbG9zZSB0aGUgZ2l2ZW4gbG9nICovCi0K LWludAotZG9jbHNsb2coeCkgaW50IHg7IHsKLSAgICBpbnQgeTsKLSAgICBzd2l0Y2ggKHgpIHsK LSNpZmRlZiBERUJVRwotICAgICAgY2FzZSBMT0dEOgotICAgICAgICBpZiAoZGVibG9nIDw9IDAp IHsKLSAgICAgICAgICAgIHByaW50ZigiP0RlYnVnZ2luZyBsb2cgd2Fzbid0IG9wZW5cbiIpOwot ICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICB9Ci0gICAgICAgIGRlYnVnKEYxMDAsIkRl YnVnIExvZyBDbG9zZWQiLCIiLDBMKTsKLSAgICAgICAgKmRlYmZpbCA9ICdcMCc7Ci0gICAgICAg IGRlYmxvZyA9IDA7Ci0gICAgICAgIHJldHVybih6Y2xvc2UoWkRGSUxFKSk7Ci0jZW5kaWYgLyog REVCVUcgKi8KLQotI2lmbmRlZiBOT1hGRVIKLSAgICAgIGNhc2UgTE9HUDoKLSAgICAgICAgaWYg KHBrdGxvZyA8PSAwKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9QYWNrZXQgbG9nIHdhc24ndCBv cGVuXG4iKTsKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgfQotICAgICAgICAqcGt0 ZmlsID0gJ1wwJzsKLSAgICAgICAgcGt0bG9nID0gMDsKLSAgICAgICAgcmV0dXJuKHpjbG9zZSha UEZJTEUpKTsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBOT0xPQ0FMCi0gICAgICBj YXNlIExPR1M6Ci0gICAgICAgIGlmIChzZXNsb2cgPD0gMCkgewotICAgICAgICAgICAgcHJpbnRm KCI/U2Vzc2lvbiBsb2cgd2Fzbid0IG9wZW5cbiIpOwotICAgICAgICAgICAgcmV0dXJuKDApOwot ICAgICAgICB9Ci0gICAgICAgICpzZXNmaWwgPSAnXDAnOwotICAgICAgICBzZXRzZXNsb2coMCk7 Ci0gICAgICAgIHJldHVybih6Y2xvc2UoWlNGSUxFKSk7Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwot Ci0jaWZkZWYgVExPRwotICAgICAgY2FzZSBMT0dUOiB7Ci0jaWZkZWYgSUtTRAotICAgICAgICAg IGV4dGVybiBpbnQgaWtsb2dvcGVuLCB4ZmVybG9nOwotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAg ICAgICBpZiAodHJhbG9nIDw9IDAKLSNpZmRlZiBJS1NECi0gICAgICAgICAgICAgICYmICFpa2xv Z29wZW4KLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAgICAgICAgICkgewotICAgICAgICAgICAg ICBpZiAobXNnZmxnKQotICAgICAgICAgICAgICAgIHByaW50ZigiP1RyYW5zYWN0aW9uIGxvZyB3 YXNuJ3Qgb3BlblxuIik7Ci0gICAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgICB9Ci0j aWZkZWYgSUtTRAotICAgICAgICAgIGlmIChpa2xvZ29wZW4gJiYgIWluc2VydmVyKSB7Ci0gICAg ICAgICAgICAgIGNsb3NlKHhmZXJsb2cpOwotICAgICAgICAgICAgICBpa2xvZ29wZW4gPSAwOwot ICAgICAgICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAgICAgaWYgKHRyYWxvZykgewot ICAgICAgICAgICAgICB0bG9nKEYxMDAsIlRyYW5zYWN0aW9uIExvZyBDbG9zZWQiLCIiLDBMKTsK LSAgICAgICAgICAgICAgemNsb3NlKFpURklMRSk7Ci0gICAgICAgICAgfQotICAgICAgICAgICp0 cmFmaWwgPSAnXDAnOwotICAgICAgICAgIHRyYWxvZyA9IDA7Ci0gICAgICAgICAgcmV0dXJuKDEp OwotICAgICAgfQotI2VuZGlmIC8qIFRMT0cgKi8KLQotI2lmZGVmIENLTE9HRElBTAotICAgICAg Y2FzZSBMT0dNOgotICAgICAgICBpZiAoZGlhbG9nIDw9IDApIHsKLSAgICAgICAgICAgIGlmICht c2dmbGcpIHByaW50ZigiP0Nvbm5lY3Rpb24gbG9nIHdhc24ndCBvcGVuXG4iKTsKLSAgICAgICAg ICAgIHJldHVybigwKTsKLSAgICAgICAgfQotICAgICAgICAqZGlhZmlsID0gJ1wwJzsKLSAgICAg ICAgZGlhbG9nID0gMDsKLSAgICAgICAgcmV0dXJuKHpjbG9zZShaRElGSUwpKTsKLSNlbmRpZiAv KiBDS0xPR0RJQUwgKi8KLQotI2lmbmRlZiBOT1NQTAotICAgICAgY2FzZSBMT0dXOiAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFdSSVRFIGZpbGUgKi8KLSAgICAgIGNhc2UgTE9HUjogICAgICAg ICAgICAgICAgICAgICAgICAvKiBSRUFEIGZpbGUgKi8KLSAgICAgICAgeSA9ICh4ID09IExPR1Ip ID8gWlJGSUxFIDogWldGSUxFOwotICAgICAgICBpZiAoY2hrZm4oeSkgPCAxKSAgICAgICAgICAg ICAgIC8qIElmIG5vIGZpbGUgdG8gY2xvc2UgKi8KLSAgICAgICAgICByZXR1cm4oMSk7ICAgICAg ICAgICAgICAgICAgICAvKiBzdWNjZWVkIHNpbGVudGx5LiAqLwotICAgICAgICByZXR1cm4oemNs b3NlKHkpKTsgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSwgY2xvc2UgdGhlIGZpbGUuICovCi0j ZW5kaWYgLyogTk9TUEwgKi8KLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcHJpbnRmKCJcbj9V bmV4cGVjdGVkIGxvZyBkZXNpZ25hdG9yIC0gJWRcbiIsIHgpOwotICAgICAgICByZXR1cm4oMCk7 Ci0gICAgfQotfQotCi1zdGF0aWMgaW50IHNsYyA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyog U2NyZWVuIGxpbmUgY291bnQgKi8KLQotY2hhciAqCi1zaG93c3RyaW5nKHMpIGNoYXIgKiBzOyB7 Ci0gICAgcmV0dXJuKHMgPyBzIDogIihudWxsKSIpOwotfQotCi1jaGFyICoKLXNob3dvZmYoeCkg aW50IHg7IHsKLSAgICByZXR1cm4oeCA/ICJvbiIgOiAib2ZmIik7Ci19Ci0KLWNoYXIgKgotc2hv d29vYSh4KSBpbnQgeDsgewotICAgIHN3aXRjaCAoeCkgewotICAgICAgY2FzZSBTRVRfT0ZGOiAg cmV0dXJuKCJvZmYiKTsKLSAgICAgIGNhc2UgU0VUX09OOiAgIHJldHVybigib24iKTsKLSAgICAg IGNhc2UgU0VUX0FVVE86IHJldHVybigiYXV0b21hdGljIik7Ci0gICAgICBkZWZhdWx0OiAgICAg ICByZXR1cm4oIih1bmtub3duKSIpOwotICAgIH0KLX0KLQotI2lmZGVmIEdFTURPUwotaXN4ZGln aXQoYykgaW50IGM7IHsKLSAgICByZXR1cm4oaXNkaWdpdChjKSB8fAotICAgICAgICAgICAoYyA+ PSAnYScgJiYgYyA8PSAnZicpIHx8Ci0gICAgICAgICAgIChjID49ICdBJyAmJiBjIDw9ICdGJykp OwotfQotI2VuZGlmIC8qIEdFTURPUyAqLwotCi0jaWZuZGVmIE5PU0VUS0VZCi0jaWZkZWYgT1My Ci1zdGF0aWMgc3RydWN0IGtleXRhYiBzaG9rZXl0YWJbXSA9IHsgICAgLyogU0hPVyBLRVkgbW9k ZXMgKi8KLSAgICAiYWxsIiwgICAgMSwgMCwKLSAgICAib25lIiwgICAgMCwgMAotfTsKLXN0YXRp YyBpbnQgbnNob2tleSA9IChzaXplb2Yoc2hva2V5dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFi KSk7Ci0KLSNkZWZpbmUgU0hLRVlERUYgVFRfTUFYKzUKLXN0cnVjdCBrZXl0YWIgc2hva2V5bXRh YltdID0gewotICAgICJhYWEiLCAgICAgICBUVF9BQUEsICAgICBDTV9JTlYsICAgIC8qIEFubkFy Ym9yICovCi0gICAgImFkbTNhIiwgICAgIFRUX0FETTNBLCAgIDAsICAgICAgICAgLyogTFNJIEFE TS0zQSAqLwotICAgICJhZG01IiwgICAgICBUVF9BRE01LCAgICAwLCAgICAgICAgIC8qIExTSSBB RE0tNSAqLwotICAgICJhaXh0ZXJtIiwgICBUVF9BSVhURVJNLCAwLCAgICAgICAgIC8qIElCTSBB SVh0ZXJtICovCi0gICAgImFubmFyYm9yIiwgIFRUX0FBQSwgICAgIDAsICAgICAgICAgLyogQW5u QXJib3IgKi8KLSAgICAiYW5zaS1iYnMiLCAgVFRfQU5TSSwgICAgMCwgICAgICAgICAvKiBBTlNJ LlNZUyAoQkJTKSAqLwotICAgICJhdDM4NiIsICAgICBUVF9BVDM4NiwgICAwLCAgICAgICAgIC8q IFVuaXh3YXJlIEFOU0kgKi8KLSAgICAiYXZhdGFyLzArIiwgVFRfQU5TSSwgICAgMCwgICAgICAg ICAvKiBBVkFUQVIvMCsgKi8KLSAgICAiYmE4MCIsICAgICAgVFRfQkE4MCwgICAgMCwgICAgICAg ICAvKiBOaXhkb3JmIEJBODAgKi8KLSAgICAiYmUiLCAgICAgICAgVFRfQkVPUywgICAgQ01fSU5W fENNX0FCUiwKLSAgICAiYmVvcy1hbnNpIiwgVFRfQkVPUywgICAgQ01fSU5WLCAgICAvKiBCZU9T IEFOU0kgKi8KLSAgICAiYmV0ZXJtIiwgICAgVFRfQkVPUywgICAgMCwgICAgICAgICAvKiBCZU9T IENvbnNvbGUgKi8KLSAgICAiZDIwMCIsICAgICAgVFRfREcyMDAsICAgQ01fSU5WfENNX0FCUiwg LyogRGF0YSBHZW5lcmFsIERBU0hFUiAyMDAgKi8KLSAgICAiZDIxMCIsICAgICAgVFRfREcyMTAs ICAgQ01fSU5WfENNX0FCUiwgLyogRGF0YSBHZW5lcmFsIERBU0hFUiAyMTAgKi8KLSAgICAiZDIx NyIsICAgICAgVFRfREcyMTcsICAgQ01fSU5WfENNX0FCUiwgLyogRGF0YSBHZW5lcmFsIERBU0hF UiAyMTcgKi8KLSAgICAiZGVmYXVsdCIsICAgU0hLRVlERUYsICAgMCwKLSAgICAiZGcyMDAiLCAg ICAgVFRfREcyMDAsICAgMCwgICAgICAgICAvKiBEYXRhIEdlbmVyYWwgREFTSEVSIDIwMCAqLwot ICAgICJkZzIxMCIsICAgICBUVF9ERzIxMCwgICAwLCAgICAgICAgIC8qIERhdGEgR2VuZXJhbCBE QVNIRVIgMjEwICovCi0gICAgImRnMjE3IiwgICAgIFRUX0RHMjE3LCAgIDAsICAgICAgICAgLyog RGF0YSBHZW5lcmFsIERBU0hFUiAyMTcgKi8KLSAgICAiZW1hY3MiLCAgICAgVFRfS0JNX0VNQUNT LCAgIDAsICAgICAvKiBFbWFjcyBtb2RlICovCi0gICAgImgxOSIsICAgICAgIFRUX0gxOSwgICAg IENNX0lOViwgICAgLyogSGVhdGgtMTkgKi8KLSAgICAiaGVhdGgxOSIsICAgVFRfSDE5LCAgICAg MCwgICAgICAgICAvKiBIZWF0aC0xOSAqLwotICAgICJoZWJyZXciLCAgICBUVF9LQk1fSEVCUkVX LCAwLCAgICAgIC8qIEhlYnJldyBtb2RlICovCi0gICAgImhmdCIsICAgICAgIFRUX0hGVCwgICAg IDAsICAgICAgICAgLyogSUJNIEhGVCAqLwotICAgICJocDI2MjFhIiwgICBUVF9IUDI2MjEsICAw LCAgICAgICAgIC8qIEhQIDI2MjFBICovCi0gICAgImhwdGVybSIsICAgIFRUX0hQVEVSTSwgIDAs ICAgICAgICAgLyogSFAgVEVSTSAqLwotICAgICJoejE1MDAiLCAgICBUVF9IWkwxNTAwLCAwLCAg ICAgICAgIC8qIEhhemVsdGluZSAxNTAwICovCi0gICAgImlibTMxNTEiLCAgIFRUX0lCTTMxLCAg IDAsICAgICAgICAgLyogSUJNIDMxMDEteHgsMzE2MSAqLwotICAgICJsaW51eCIsICAgICBUVF9M SU5VWCwgICAwLCAgICAgICAgIC8qIExpbnV4ICovCi0gICAgInFhbnNpIiwgICAgIFRUX1FBTlNJ LCAgIDAsICAgICAgICAgLyogUU5YIEFOU0kgKi8KLSAgICAicW54IiwgICAgICAgVFRfUU5YLCAg ICAgMCwgICAgICAgICAvKiBRTlggKi8KLSAgICAicnVzc2lhbiIsICAgVFRfS0JNX1JVU1NJQU4s IDAsICAgICAvKiBSdXNzaWFuIG1vZGUgKi8KLSAgICAic2NvYW5zaSIsICAgVFRfU0NPQU5TSSwg MCwgICAgICAgICAvKiBTQ08gQU5TSSAqLwotICAgICJzbmktOTc4MDEiLCBUVF85NzgwMSwgICAw LCAgICAgICAgIC8qIFNpbml4IDk3ODAxICovCi0gICAgInN1biIsICAgICAgIFRUX1NVTiwgICAg IDAsICAgICAgICAgLyogU3VuIENvbnNvbGUgKi8KLSNpZmRlZiBPUzJQTQotI2lmZGVmIENPTU1F TlQKLSAgICAidGVrNDAxNCIsIFRUX1RFSzQwLCAwLAotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNl bmRpZiAvKiBPUzJQTSAqLwotICAgICJ0dHkiLCAgICAgVFRfTk9ORSwgIDAsCi0gICAgInR2aTkx MCsiLCBUVF9UVkk5MTAsIDAsCi0gICAgInR2aTkyNSIsICBUVF9UVkk5MjUsIDAsCi0gICAgInR2 aTk1MCIsICBUVF9UVkk5NTAsIDAsCi0gICAgInZjNDA0IiwgICBUVF9WQzQ0MDQsIDAsCi0gICAg InZjNDQwNCIsICBUVF9WQzQ0MDQsIENNX0lOViwKLSAgICAidmlwNzgwOSIsIFRUX1ZJUDc4MDks IDAsCi0gICAgInZ0MTAwIiwgICBUVF9WVDEwMCwgMCwKLSAgICAidnQxMDIiLCAgIFRUX1ZUMTAy LCAwLAotICAgICJ2dDIyMCIsICAgVFRfVlQyMjAsIDAsCi0gICAgInZ0MjIwcGMiLCBUVF9WVDIy MFBDLCAwLAotICAgICJ2dDMyMCIsICAgVFRfVlQzMjAsIDAsCi0gICAgInZ0MzIwcGMiLCBUVF9W VDMyMFBDLCAwLAotICAgICJ2dDUyIiwgICAgVFRfVlQ1MiwgIDAsCi0gICAgIndwIiwgICAgICBU VF9LQk1fV1AsIDAsCi0gICAgInd5MTYwIiwgICBUVF9XWTE2MCwgIDAsCi0gICAgInd5MzAiLCAg ICBUVF9XWTMwLCAgMCwKLSAgICAid3kzNzAiLCAgIFRUX1dZMzcwLCAwLAotICAgICJ3eTUwIiwg ICAgVFRfV1k1MCwgIDAsCi0gICAgInd5NjAiLCAgICBUVF9XWTYwLCAgMCwKLSAgICAid3lzZTMw IiwgIFRUX1dZMzAsICBDTV9JTlYsCi0gICAgInd5c2UzNzAiLCBUVF9XWTM3MCwgQ01fSU5WLAot ICAgICJ3eXNlNTAiLCAgVFRfV1k1MCwgIENNX0lOViwKLSAgICAid3lzZTYwIiwgIFRUX1dZNjAs ICBDTV9JTlYKLX07Ci1pbnQgbnNob2tleW0gPSAoc2l6ZW9mKHNob2tleW10YWIpIC8gc2l6ZW9m KHN0cnVjdCBrZXl0YWIpKTsKLSNlbmRpZiAvKiBPUzIgKi8KLQotVk9JRAotI2lmZGVmIE9TMgot c2hva2V5Y29kZShjLG0pIGludCBjLCBtOwotI2Vsc2UKLXNob2tleWNvZGUoYykgaW50IGM7Ci0j ZW5kaWYKLS8qIHNob2tleWNvZGUgKi8gewotICAgIEtFWSBjaDsKLSAgICBDSEFSICpzOwotI2lm ZGVmIE9TMgotICAgIGludCBpOwotICAgIGNvbl9ldmVudCBrbTsKLSNlbHNlIC8qIE9TMiAqLwot ICAgIGludCBrbTsKLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIE9TMgotICAgIGV4dGVybiBp bnQgbXNra2V5czsKLSAgICBjaGFyICogbXN0ciA9ICIiOwotCi0gICAgaWYgKGMgPj0gS01TSVpF KSB7Ci0gICAgICAgIGJsZWVwKEJQX0ZBSUwpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2Vs c2UgLyogT1MyICovCi0gICAgcHJpbnRmKCIgS2V5IGNvZGUgXFwlZCA9PiAiLCBjKTsKLSNlbmRp ZiAvKiBPUzIgKi8KLQotI2lmbmRlZiBPUzIKLSAgICBrbSA9IG1hcGtleShjKTsKLQotI2lmbmRl ZiBOT0tWRVJCUwotICAgIGlmIChJU19LVkVSQihrbSkpIHsgICAgICAgICAgICAgICAgIC8qIFxL dmVyYj8gKi8KLSAgICAgICAgaW50IGksIGt2OwotICAgICAgICBrdiA9IGttICYgfihGX0tWRVJC KTsKLSAgICAgICAgcHJpbnRmKCJWZXJiOiAiKTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG5r dmVyYnM7IGkrKykKLSAgICAgICAgICBpZiAoa3ZlcmJzW2ldLmt3dmFsID09IGt2KSB7Ci0gICAg ICAgICAgICAgIHByaW50ZigiXFxLJXMiLGt2ZXJic1tpXS5rd2QpOwotICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIHByaW50ZigiXG4iKTsKLSAgICB9IGVsc2UKLSNl bmRpZiAvKiBOT0tWRVJCUyAqLwotICAgICAgaWYgKElTX0NTSShrbSkpIHsKLSAgICAgICAgICBp bnQgeGttID0ga20gJiAweEZGOwotICAgICAgICAgIGlmICh4a20gPD0gMzIgfHwgeGttID49IDEy NykKLSAgICAgICAgICAgIHByaW50ZigiU3RyaW5nOiBcXHsyN31bXFx7JWR9XG4iLHhrbSk7Ci0g ICAgICAgICAgZWxzZQotICAgICAgICAgICAgcHJpbnRmKCJTdHJpbmc6IFxcezI3fVslY1xuIix4 a20pOwotICAgICAgfSBlbHNlIGlmIChJU19FU0Moa20pKSB7Ci0gICAgICAgICAgaW50IHhrbSA9 IGttICYgMHhGRjsKLSAgICAgICAgICBpZiAoeGttIDw9IDMyIHx8IHhrbSA+PSAxMjcpCi0gICAg ICAgICAgICBwcmludGYoIlN0cmluZzogXFx7Mjd9XFx7JWR9XG4iLHhrbSk7Ci0gICAgICAgICAg ZWxzZQotICAgICAgICAgICAgcHJpbnRmKCJTdHJpbmc6IFxcezI3fSVjXG4iLHhrbSk7Ci0gICAg ICB9IGVsc2UgaWYgKG1hY3JvdGFiW2NdKSB7ICAgICAgICAgLyogU2VlIGlmIHRoZXJlJ3MgYSBt YWNybyAqLwotICAgICAgICAgIHByaW50ZigiU3RyaW5nOiAiKTsgICAgICAgICAgIC8qIElmIHNv LCBkaXNwbGF5IGl0cyBkZWZpbml0aW9uICovCi0gICAgICAgICAgcyA9IG1hY3JvdGFiW2NdOwot ICAgICAgICAgIHNob3N0cmRlZihzKTsKLSAgICAgICAgICBwcmludGYoIlxuIik7Ci0jaWZuZGVm IE5PS1ZFUkJTCi0gICAgfSBlbHNlIGlmIChrbSA+PSAweDEwMCkgeyAgICAgICAgICAgLyogVGhp cyBtZWFucyAidW5kZWZpbmVkIiAqLwotICAgICAgICBwcmludGYoIlVuZGVmaW5lZFxuIik7Ci0j ZW5kaWYgLyogTk9LVkVSQlMgKi8KLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBObyBtYWNybywgc2hvdyBzaW5nbGUgY2hhcmFjdGVyICovCi0gICAgICAgIHByaW50 ZigiQ2hhcmFjdGVyOiAiKTsKLSAgICAgICAgY2ggPSBrbTsKLSAgICAgICAgaWYgKGNoIDwgMzIg fHwgY2ggPT0gMTI3Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICB8fCBjaCA+IDI1NQotI2VuZGlm IC8qIE9TMiAqLwotI2lmbmRlZiBORVhUCi0jaWZuZGVmIEFVWAotI2lmbmRlZiBYRU5JWAotI2lm bmRlZiBPUzIKLSAgICAgICAgICAgIHx8IChjaCA+IDEyNyAmJiBjaCA8IDE2MCkKLSNlbmRpZiAv KiBPUzIgKi8KLSNlbmRpZiAvKiBYRU5JWCAqLwotI2VuZGlmIC8qIEFVWCAqLwotI2VuZGlmIC8q IE5FWFQgKi8KLSAgICAgICAgICAgICkKLS8qCi0gIFRoZXNlIHVzZWQgdG8gYmUgJWQsIGJ1dCBn Y2MgMS45MyAmIGxhdGVyIGNvbXBsYWluIGFib3V0IHR5cGUgbWlzbWF0Y2hlcy4KLSAgJXUgaXMg c3VwcG9zZWQgdG8gYmUgdG90YWxseSBwb3J0YWJsZS4KLSovCi0gICAgICAgICAgcHJpbnRmKCJc XCV1IiwodW5zaWduZWQgaW50KSBjaCk7Ci0gICAgICAgIGVsc2UgcHJpbnRmKCIlYyBcXCV1Iiwo Q0hBUikgKGNoICYgMHhmZiksKHVuc2lnbmVkIGludCkgY2gpOwotICAgICAgICBpZiAoY2ggPT0g KEtFWSkgYykKLSAgICAgICAgICBwcmludGYoIiAoc2VsZiwgbm8gdHJhbnNsYXRpb24pXG4iKTsK LSAgICAgICAgZWxzZQotICAgICAgICAgIHByaW50ZigiXG4iKTsKLSAgICB9Ci0jZWxzZSAvKiBP UzIgKi8KLSAgICBpZiAobSA8IDApIHsKLSAgICAgICAga20gPSBtYXBrZXkoYyk7Ci0gICAgICAg IG1zdHIgPSAiZGVmYXVsdCI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAga20gPSBtYXB0ZXJta2V5 KGMsbSk7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBuc2hva2V5bTsgaSsrKSB7Ci0gICAgICAg ICAgICBpZiAobSA9PSBzaG9rZXltdGFiW2ldLmt3dmFsKSB7Ci0gICAgICAgICAgICAgICAgbXN0 ciA9IHNob2tleW10YWJbaV0ua3dkOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHMgPSBrZXluYW1lKGMpOwotICAgIGRlYnVnKEYx MTEsInNob2tleWNvZGUgbXN0ciIsbXN0cixtKTsKLSAgICBkZWJ1ZyhGMTExLCJzaG9rZXljb2Rl IGtleW5hbWUiLHMsYyk7Ci0gICAgcHJpbnRmKCIgJXNLZXkgY29kZSBcXCVkICVzICglcykgPT4g IiwKLSAgICAgICAgICAgIG1za2tleXMgPyAibXNrZXJtaXQgIiA6ICIiLAotICAgICAgICAgICAg bXNra2V5cyA/IGNrdG9tc2soYykgOiBjLAotICAgICAgICAgICAgcyA9PSBOVUxMID8gIiIgOiBz LCBtc3RyKTsKLQotICAgIHN3aXRjaCAoa20udHlwZSkgewotI2lmbmRlZiBOT0tWRVJCUwotICAg ICAgY2FzZSBrdmVyYjogewotICAgICAgICAgIGludCBpLCBrdjsKLSAgICAgICAgICBrdiA9IGtt Lmt2ZXJiLmlkICYgfihGX0tWRVJCKTsKLSAgICAgICAgICBwcmludGYoIlZlcmI6ICIpOwotICAg ICAgICAgIGZvciAoaSA9IDA7IGkgPCBua3ZlcmJzOyBpKyspIHsKLSAgICAgICAgICAgICAgaWYg KGt2ZXJic1tpXS5rd3ZhbCA9PSBrdikgewotICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcXEsl cyIsa3ZlcmJzW2ldLmt3ZCk7Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg ICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgICAgYnJl YWs7Ci0gICAgICB9Ci0jZW5kaWYgLyogTk9LVkVSQlMgKi8KLSAgICAgIGNhc2UgY3NpOiB7Ci0g ICAgICAgICAgaW50IHhrbSA9IGttLmNzaS5rZXkgJiAweEZGOwotICAgICAgICAgIGlmICh4a20g PD0gMzIgfHwgeGttID49IDEyNykKLSAgICAgICAgICAgIHByaW50ZigiU3RyaW5nOiBcXHsyN31b XFx7JWR9XG4iLHhrbSk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgcHJpbnRmKCJTdHJp bmc6IFxcezI3fVslY1xuIix4a20pOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAg Y2FzZSBlc2M6IHsKLSAgICAgICAgICBpbnQgeGttID0ga20uZXNjLmtleSAmIDB4RkY7Ci0gICAg ICAgICAgaWYgKHhrbSA8PSAzMiB8fCB4a20gPj0gMTI3KQotICAgICAgICAgICAgcHJpbnRmKCJT dHJpbmc6IFxceyVkfVxceyVkfVxuIixJU0RHMjAwKHR0X3R5cGUpPzMwOjI3LHhrbSk7Ci0gICAg ICAgICAgZWxzZQotICAgICAgICAgICAgcHJpbnRmKCJTdHJpbmc6IFxceyVkfSVjXG4iLElTREcy MDAodHRfdHlwZSk/MzA6MjcseGttKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAg IGNhc2UgbWFjcm86IHsKLSAgICAgICAgICBwcmludGYoIlN0cmluZzogIik7ICAgICAgICAgICAv KiBNYWNybywgZGlzcGxheSBpdHMgZGVmaW5pdGlvbiAqLwotICAgICAgICAgIHNob3N0cmRlZihr bS5tYWNyby5zdHJpbmcpOwotICAgICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgICBicmVh azsKLSAgICAgIH0KLSAgICAgIGNhc2UgbGl0ZXJhbDogewotICAgICAgICAgIHByaW50ZigiTGl0 ZXJhbCBzdHJpbmc6ICIpOyAgIC8qIExpdGVyYWwsIGRpc3BsYXkgaXRzIGRlZmluaXRpb24gKi8K LSAgICAgICAgICBzaG9zdHJkZWYoa20ubGl0ZXJhbC5zdHJpbmcpOwotICAgICAgICAgIHByaW50 ZigiXG4iKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgZXJyb3I6IHsK LSAgICAgICAgICBpZiAoYyA+PSAweDEwMCkgewotICAgICAgICAgICAgICBwcmludGYoIlVuZGVm aW5lZFxuIik7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgcHJpbnRmKCJDaGFy YWN0ZXI6ICIpOwotICAgICAgICAgICAgICBjaCA9IGM7Ci0gICAgICAgICAgICAgIGlmIChjaCA8 IDMyIHx8IGNoID09IDEyNyB8fCBjaCA+IDI1NQotI2lmbmRlZiBORVhUCi0jaWZuZGVmIEFVWAot I2lmbmRlZiBYRU5JWAotI2lmbmRlZiBPUzIKLSAgICAgICAgICAgICAgICAgICB8fCAoY2ggPiAx MjcgJiYgY2ggPCAxNjApCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogWEVOSVggKi8KLSNl bmRpZiAvKiBBVVggKi8KLSNlbmRpZiAvKiBORVhUICovCi0gICAgICAgICAgICAgICAgICAgKQot LyoKLSAgVGhlc2UgdXNlZCB0byBiZSAlZCwgYnV0IGdjYyAxLjkzICYgbGF0ZXIgY29tcGxhaW4g YWJvdXQgdHlwZSBtaXNtYXRjaGVzLgotICAldSBpcyBzdXBwb3NlZCB0byBiZSB0b3RhbGx5IHBv cnRhYmxlLgotKi8KLSAgICAgICAgICAgICAgICAgIHByaW50ZigiXFwldSIsKHVuc2lnbmVkIGlu dCkgY2gpOwotICAgICAgICAgICAgICBlbHNlIHByaW50ZigiJWMgXFwldSIsKENIQVIpIChjaCAm IDB4ZmYpLCh1bnNpZ25lZCBpbnQpIGNoKTsKLSAgICAgICAgICAgICAgcHJpbnRmKCIgKHNlbGYs IG5vIHRyYW5zbGF0aW9uKVxuIik7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAg ICAgfQotICAgICAgY2FzZSBrZXk6IHsKLSAgICAgICAgICBwcmludGYoIkNoYXJhY3RlcjogIik7 Ci0gICAgICAgICAgY2ggPSBrbS5rZXkuc2NhbmNvZGU7Ci0gICAgICAgICAgaWYgKGNoIDwgMzIg fHwgY2ggPT0gMTI3IHx8IGNoID4gMjU1Ci0jaWZuZGVmIE5FWFQKLSNpZm5kZWYgQVVYCi0jaWZu ZGVmIFhFTklYCi0jaWZuZGVmIE9TMgotICAgICAgICAgICAgICB8fCAoY2ggPiAxMjcgJiYgY2gg PCAxNjApCi0jZWxzZQotICAgICAgICAgICAgICAgfHwgKGNoID4gMTI3KQotI2VuZGlmIC8qIE9T MiAqLwotI2VuZGlmIC8qIFhFTklYICovCi0jZW5kaWYgLyogQVVYICovCi0jZW5kaWYgLyogTkVY VCAqLwotICAgICAgICAgICAgICApCi0vKgotICBUaGVzZSB1c2VkIHRvIGJlICVkLCBidXQgZ2Nj IDEuOTMgJiBsYXRlciBjb21wbGFpbiBhYm91dCB0eXBlIG1pc21hdGNoZXMuCi0gICV1IGlzIHN1 cHBvc2VkIHRvIGJlIHRvdGFsbHkgcG9ydGFibGUuCi0qLwotICAgICAgICAgICAgcHJpbnRmKCJc XCV1IiwodW5zaWduZWQgaW50KSBjaCk7Ci0gICAgICAgICAgZWxzZSBwcmludGYoIiVjIFxcJXUi LChDSEFSKSAoY2ggJiAweGZmKSwodW5zaWduZWQgaW50KSBjaCk7Ci0gICAgICAgICAgaWYgKGNo ID09IChLRVkpIGMpCi0gICAgICAgICAgICBwcmludGYoIiAoc2VsZiwgbm8gdHJhbnNsYXRpb24p XG4iKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAg ICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIE9TMiAqLwotfQotI2VuZGlmIC8q IE5PU0VUS0VZICovCi0KLVZPSUQKLXNob3N0cmRlZihzKSBDSEFSICogczsgewotICAgIENIQVIg Y2g7Ci0gICAgaWYgKCFzKSBzID0gKENIQVIgKikiIjsKLSAgICB3aGlsZSAoKGNoID0gKnMrKykp IHsKLSAgICAgICAgaWYgKGNoIDwgMzIgfHwgY2ggPT0gMTI3IHx8IGNoID09IDI1NQotLyoKLSAg U3lzdGVtcyB3aG9zZSBuYXRpdmUgY2hhcmFjdGVyIHNldHMgaGF2ZSBncmFwaGljIGNoYXJhY3Rl cnMgaW4gQzEuLi4KLSovCi0jaWZuZGVmIE5FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogTmVYVCAqLwotI2lmbmRlZiBBVVggICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1h Y2ludG9zaCAqLwotI2lmbmRlZiBYRU5JWCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElC TSBQQyAqLwotI2lmZGVmIE9TMgotLyoKLSAgSXQgZG9lc24ndCBtYXR0ZXIgd2hldGhlciB0aGUg bG9jYWwgaG9zdCBjYW4gZGlzcGxheSA4LWJpdCBjaGFyYWN0ZXJzOwotICB0aGV5IGFyZSBub3Qg cG9ydGFibGUgYW1vbmcgY2hhcmFjdGVyLXNldHMgYW5kIGZvbnRzLiAgV2hvIGtub3dzIHdoYXQK LSAgd291bGQgYmUgZGlzcGxheWVkLi4uCi0qLwotICAgICAgICAgICAgfHwgKGNoID4gMTI3KQot I2Vsc2UgLyogT1MyICovCi0gICAgICAgICAgICB8fCAoY2ggPiAxMjcgJiYgY2ggPCAxNjApCi0j ZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogWEVOSVggKi8KLSNlbmRpZiAvKiBBVVggKi8KLSNl bmRpZiAvKiBORVhUICovCi0gICAgICAgICAgICApCi0gICAgICAgICAgcHJpbnRmKCJcXHslZH0i LGNoKTsgICAgICAgICAgLyogRGlzcGxheSBjb250cm9sIGNoYXJhY3RlcnMgKi8KLSAgICAgICAg ZWxzZSBwdXRjaGFyKChjaGFyKSBjaCk7ICAgICAgICAvKiBpbiBiYWNrc2xhc2ggbm90YXRpb24g Ki8KLSAgICB9Ci19Ci0KLSNkZWZpbmUgeHhkaWZmKHYsc3lzKSBzdHJuY21wKHYsc3lzLHN0cmxl bihzeXMpKQotCi0jaWZuZGVmIE5PU0hPVwotVk9JRAotc2hvdmVyKCkgewotI2lmZGVmIE9TMgot ICAgIGV4dGVybiBjaGFyIGNreHN5c3RlbVtdOwotI2VuZGlmIC8qIE9TMiAqLwotICAgIGV4dGVy biBjaGFyICpja19wYXRjaCwgKiBja2xpYnY7Ci0gICAgcHJpbnRmKCJcblZlcnNpb25zOlxuICVz XG4iLHZlcnNpbyk7Ci0gICAgcHJpbnRmKCIgTnVtZXJpYzogJWxkXG4iLHZlcm51bSk7Ci0jaWZk ZWYgT1MyCi0gICAgcHJpbnRmKCIgT3BlcmF0aW5nIFN5c3RlbTogJXNcbiIsIGNreHN5c3RlbSk7 Ci0jZWxzZSAvKiBPUzIgKi8KLSAgICBwcmludGYoIiBCdWlsdCBmb3I6ICVzXG4iLCBja3hzeXMp OwotI2lmZGVmIENLX1VUU05BTUUKLSAgICBpZiAodW5tX25hbVswXSkKLSAgICAgIHByaW50Zigi IFJ1bm5pbmcgb246ICVzICVzICVzICVzXG4iLCB1bm1fbmFtLHVubV92ZXIsdW5tX3JlbCx1bm1f bWNoKTsKLSNlbmRpZiAvKiBDS19VVFNOQU1FICovCi0gICAgcHJpbnRmKCIgUGF0Y2hlczogJXNc biIsICpja19wYXRjaCA/IGNrX3BhdGNoIDogIihub25lKSIpOwotI2VuZGlmIC8qIE9TMiAqLwot ICAgIGlmICh4eGRpZmYoY2t4dixja3hzeXMpKQotICAgICAgcHJpbnRmKCIgJXMgZm9yJXNcbiIs Y2t4dixja3hzeXMpOwotICAgIGVsc2UKLSAgICAgIHByaW50ZigiICVzXG4iLGNreHYpOwotICAg IGlmICh4eGRpZmYoY2t6dixja3pzeXMpKQotICAgICAgcHJpbnRmKCIgJXMgZm9yJXNcbiIsY2t6 dixja3pzeXMpOwotICAgIGVsc2UKLSAgICAgIHByaW50ZigiICVzXG4iLGNrenYpOwotICAgIHBy aW50ZigiICVzXG4iLGNrbGlidik7Ci0gICAgcHJpbnRmKCIgJXNcbiIscHJvdHYpOwotICAgIHBy aW50ZigiICVzXG4iLGZuc3YpOwotICAgIHByaW50ZigiICVzXG4gJXNcbiIsY21kdix1c2Vydik7 Ci0jaWZuZGVmIE5PQ1NFVFMKLSAgICBwcmludGYoIiAlc1xuIix4bGF2KTsKLSNlbmRpZiAvKiBO T0NTRVRTICovCi0jaWZuZGVmIE1BQwotI2lmbmRlZiBOT0xPQ0FMCi0gICAgcHJpbnRmKCIgJXNc biIsY29ubnYpOwotI2lmZGVmIE9TMgotICAgIHByaW50ZigiICVzXG4iLGNreXYpOwotI2VuZGlm IC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNlbmRpZiAvKiBNQUMgKi8KLSNpZm5k ZWYgTk9ESUFMCi0gICAgcHJpbnRmKCIgJXNcbiIsZGlhbHYpOwotI2VuZGlmIC8qIE5PRElBTCAq LwotI2lmbmRlZiBOT1NDUklQVAotICAgIHByaW50ZigiICVzXG4iLGxvZ2ludik7Ci0jZW5kaWYg LyogTk9TQ1JJUFQgKi8KLSNpZmRlZiBORVRDT05OCi0gICAgcHJpbnRmKCIgJXNcbiIsY2tuZXR2 KTsKLSNpZmRlZiBPUzIKLSAgICBwcmludGYoIiAlc1xuIixja29uZXR2KTsKLSNpZmRlZiBDS19O RVRCSU9TCi0gICAgcHJpbnRmKCIgJXNcbiIsY2tvbmJpdik7Ci0jZW5kaWYgLyogQ0tfTkVUQklP UyAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSNpZmRlZiBUTkNP REUKLSAgICBwcmludGYoIiAlc1xuIixja3RlbHYpOwotI2VuZGlmIC8qIFROQ09ERSAqLwotI2lm ZGVmIFNTSEJVSUxUSU4KLSAgICBwcmludGYoIiAlc1xuIixja3NzaHYpOwotI2lmZGVmIFNGVFBf QlVJTFRJTgotICAgIHByaW50ZigiICVzXG4iLGNrc2Z0cHYpOwotI2VuZGlmIC8qIFNGVFBfQlVJ TFRJTiAqLwotI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KLSNpZmRlZiBPUzIKLSNpZmRlZiBPUzJN T1VTRQotICAgIHByaW50ZigiICVzXG4iLGNrb21vdXYpOwotI2VuZGlmIC8qIE9TMk1PVVNFICov Ci0jZW5kaWYgLyogT1MyICovCi0jaWZkZWYgTkVXRlRQCi0gICAgcHJpbnRmKCIgJXNcbiIsY2tm dHB2KTsKLSNlbmRpZiAvKiBORVdGVFAgKi8KLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotICAg IHByaW50ZigiICVzXG4iLGNrYXRodik7Ci0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8K LSNpZmRlZiBDS19FTkNSWVBUSU9OCi0jaWZkZWYgQ1JZUFRfRExMCi0gICAgcHJpbnRmKCIgJXNc biIsY2tfY3J5cHRfZGxsX3ZlcnNpb24oKSk7Ci0jZWxzZSAvKiBDUllQVF9ETEwgKi8KLSAgICBw cmludGYoIiAlc1xuIixja2NycHYpOwotI2VuZGlmIC8qIENSWVBUX0RMTCAqLwotI2VuZGlmIC8q IENLX0VOQ1JZUFRJT04gKi8KLSNpZmRlZiBDS19TU0wKLSAgICBwcmludGYoIiAlc1xuIixja3Nz bHYpOwotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgIHByaW50ZigiXG4iKTsKLX0KLQotI2lmZGVm IENLX0xBQkVMRUQKLVZPSUQKLXNob2xibCgpIHsKLSNpZmRlZiBWTVMKLSAgICBwcmludGYoIlZN UyBMYWJlbGVkIEZpbGUgRmVhdHVyZXM6XG4iKTsKLSAgICBwcmludGYoIiBhY2wgJXMgKEFDTCBp bmZvICVzKVxuIiwKLSAgICAgICAgICAgc2hvd29mZihsZl9vcHRzICYgTEJMX0FDTCksCi0gICAg ICAgICAgIGxmX29wdHMgJiBMQkxfQUNMID8gInByZXNlcnZlZCIgOiAiZGlzY2FyZGVkIik7Ci0g ICAgcHJpbnRmKCIgYmFja3VwLWRhdGUgJXMgKGJhY2t1cCBkYXRlL3RpbWUgJXMpXG4iLAotICAg ICAgICAgICBzaG93b2ZmKGxmX29wdHMgJiBMQkxfQkNLKSwKLSAgICAgICAgICAgbGZfb3B0cyAm IExCTF9CQ0sgPyAicHJlc2VydmVkIiA6ICJkaXNjYXJkZWQiKTsKLSAgICBwcmludGYoIiBuYW1l ICVzIChvcmlnaW5hbCBmaWxlbmFtZSAlcylcbiIsCi0gICAgICAgICAgIHNob3dvZmYobGZfb3B0 cyAmIExCTF9OQU0pLAotICAgICAgICAgICBsZl9vcHRzICYgTEJMX05BTSA/ICJwcmVzZXJ2ZWQi IDogImRpc2NhcmRlZCIpOwotICAgIHByaW50ZigiIG93bmVyICVzIChvcmlnaW5hbCBmaWxlIG93 bmVyIGlkICVzKVxuIiwKLSAgICAgICAgICAgc2hvd29mZihsZl9vcHRzICYgTEJMX09XTiksCi0g ICAgICAgICAgIGxmX29wdHMgJiBMQkxfT1dOID8gInByZXNlcnZlZCIgOiAiZGlzY2FyZGVkIik7 Ci0gICAgcHJpbnRmKCIgcGF0aCAlcyAob3JpZ2luYWwgZmlsZSdzIGRpc2s6W2RpcmVjdG9yeV0g JXMpXG4iLAotICAgICAgICAgICBzaG93b2ZmKGxmX29wdHMgJiBMQkxfUFRIKSwKLSAgICAgICAg ICAgbGZfb3B0cyAmIExCTF9QVEggPyAicHJlc2VydmVkIiA6ICJkaXNjYXJkZWQiKTsKLSNlbHNl Ci0jaWZkZWYgT1MyCi0gICAgcHJpbnRmKCJPUy8yIExhYmVsZWQgRmlsZSBmZWF0dXJlcyAoYXR0 cmlidXRlcyk6XG4iKTsKLSAgICBwcmludGYoIiBhcmNoaXZlOiAgICVzXG4iLCBzaG93b2ZmKGxm X29wdHMgJiBMQkxfQVJDKSk7Ci0gICAgcHJpbnRmKCIgZXh0ZW5kZWQ6ICAlc1xuIiwgc2hvd29m ZihsZl9vcHRzICYgTEJMX0VYVCkpOwotICAgIHByaW50ZigiIGhpZGRlbjogICAgJXNcbiIsIHNo b3dvZmYobGZfb3B0cyAmIExCTF9ISUQpKTsKLSAgICBwcmludGYoIiByZWFkLW9ubHk6ICVzXG4i LCBzaG93b2ZmKGxmX29wdHMgJiBMQkxfUk8gKSk7Ci0gICAgcHJpbnRmKCIgc3lzdGVtOiAgICAl c1xuIiwgc2hvd29mZihsZl9vcHRzICYgTEJMX1NZUykpOwotI2VuZGlmIC8qIE9TMiAqLwotI2Vu ZGlmIC8qIFZNUyAqLwotfQotI2VuZGlmIC8qIENLX0xBQkVMRUQgKi8KLQotVk9JRAotc2hvdGNz KGNzbCxjc3IpIGludCBjc2wsIGNzcjsgeyAgICAgICAgIC8qIFNob3cgdGVybWluYWwgY2hhcmFj dGVyIHNldCAqLwotI2lmbmRlZiBOT0NTRVRTCi0jaWZkZWYgT1MyCi0jaWZuZGVmIE5PVEVSTQot ICAgIGV4dGVybiBzdHJ1Y3QgX3Z0RyBHWzRdLCAqR0wsICpHUjsKLSAgICBleHRlcm4gaW50IGRl Y25yY20sIHNuaV9jaGNvZGU7Ci0gICAgZXh0ZXJuIGludCB0dF91dGY4LCBkZWNfbnJjLCBkZWNf a2JkLCBkZWNfbGFuZzsKLSAgICBleHRlcm4gcHJuY3M7Ci0KLSAgICBwcmludGYoIiBUZXJtaW5h bCBjaGFyYWN0ZXItc2V0czpcbiIpOwotICAgIGlmIChJUzk3ODAxKHR0X3R5cGVfbW9kZSkpIHsK LSAgICAgICAgaWYgKGNtYXNrID09IDAzNzcpCi0gICAgICAgICAgcHJpbnRmKCIgICAgIE1vZGU6 IDgtYml0IE1vZGVcbiIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcHJpbnRmKCIgICAgIE1v ZGU6IDctYml0IE1vZGVcbiIpOwotICAgICAgICBwcmludGYoIiAgICAgQ0guQ09ERSBpcyAlc1xu IixzbmlfY2hjb2RlPyJPbiI6Ik9mZiIpOwotICAgIH0gZWxzZSBpZiAoSVNWVDEwMCh0dF90eXBl X21vZGUpKSB7Ci0gICAgICAgIGlmIChkZWNucmNtKQotICAgICAgICAgIHByaW50ZigiICAgICBN b2RlOiA3LWJpdCBOYXRpb25hbCBNb2RlXG4iKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHBy aW50ZigiICAgICBNb2RlOiA4LWJpdCBNdWx0aW5hdGlvbmFsIE1vZGVcbiIpOwotICAgIH0KLSAg ICBpZiAoIGlzdW5pY29kZSgpICkKLSAgICAgICAgcHJpbnRmKCIgICAgTG9jYWw6IFVuaWNvZGUg ZGlzcGxheSAvICVzIGlucHV0XG4iLAotICAgICAgICAgICAgICAgIGNzbCA9PSBUWF9UUkFOU1Ag PyAidHJhbnNwYXJlbnQiIDoKLSAgICAgICAgICAgICAgICBjc2wgPT0gVFhfVU5ERUYgPyAidW5k ZWZpbmVkIiA6IHR4cmluZm9bY3NsXS0+a2V5d2QpOwotICAgIGVsc2UKLSAgICAgICAgcHJpbnRm KCIgICAgTG9jYWw6ICVzXG4iLAotICAgICAgICAgICAgICAgIGNzbCA9PSBUWF9UUkFOU1AgPyAi dHJhbnNwYXJlbnQiIDoKLSAgICAgICAgICAgICAgICBjc2wgPT0gVFhfVU5ERUYgPyAidW5kZWZp bmVkIiA6IHR4cmluZm9bY3NsXS0+a2V5d2QpOwotCi0gICAgaWYgKCB0dF91dGY4ICkgewotICAg ICAgICBwcmludGYoIiAgIFJlbW90ZTogVVRGLThcbiIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg IHByaW50ZigiICAgUmVtb3RlOiAlc0cwOiAlcyAoJXMpXG4iLAotICAgICAgICAgICBHTCA9PSAm R1swXSA/ICJHTC0+IiA6IEdSID09ICZHWzBdID8gIkdSLT4iIDogIiAgICAiLAotICAgICAgICAg ICB0eHJpbmZvW0dbMF0uZGVzaWduYXRpb25dLT5rZXl3ZCwKLSAgICAgICAgICAgR1swXS5kZXNp Z25hdGlvbiA9PSBUWF9UUkFOU1AgPyAiIiA6Ci0gICAgICAgICAgIEdbMF0uc2l6ZSA9PSBjczk0 ID8gIjk0IGNoYXJzIiA6Ci0gICAgICAgICAgIEdbMF0uc2l6ZSA9PSBjczk2ID8gIjk2IGNoYXJz IiA6ICJtdWx0aS1ieXRlIik7Ci0gICAgICAgIHByaW50ZigiICAgICAgICAgICAlc0cxOiAlcyAo JXMpXG4iLAotICAgICAgICAgICBHTCA9PSAmR1sxXSA/ICJHTC0+IiA6IEdSID09ICZHWzFdID8g IkdSLT4iIDogIiAgICAiLAotICAgICAgICAgICB0eHJpbmZvW0dbMV0uZGVzaWduYXRpb25dLT5r ZXl3ZCwKLSAgICAgICAgICAgR1sxXS5kZXNpZ25hdGlvbiA9PSBUWF9UUkFOU1AgPyAiIiA6Ci0g ICAgICAgICAgIEdbMV0uc2l6ZSA9PSBjczk0ID8gIjk0IGNoYXJzIiA6Ci0gICAgICAgICAgIEdb MV0uc2l6ZSA9PSBjczk2ID8gIjk2IGNoYXJzIiA6ICJtdWx0aS1ieXRlIik7Ci0gICAgICAgIHBy aW50ZigiICAgICAgICAgICAlc0cyOiAlcyAoJXMpXG4iLAotICAgICAgICAgICBHTCA9PSAmR1sy XSA/ICJHTC0+IiA6IEdSID09ICZHWzJdID8gIkdSLT4iIDogIiAgICAiLAotICAgICAgICAgICB0 eHJpbmZvW0dbMl0uZGVzaWduYXRpb25dLT5rZXl3ZCwKLSAgICAgICAgICAgR1syXS5kZXNpZ25h dGlvbiA9PSBUWF9UUkFOU1AgPyAiIiA6Ci0gICAgICAgICAgIEdbMl0uc2l6ZSA9PSBjczk0ID8g Ijk0IGNoYXJzIiA6Ci0gICAgICAgICAgIEdbMl0uc2l6ZSA9PSBjczk2ID8gIjk2IGNoYXJzIiA6 ICJtdWx0aS1ieXRlIik7Ci0gICAgICAgIHByaW50ZigiICAgICAgICAgICAlc0czOiAlcyAoJXMp XG4iLAotICAgICAgICAgICBHTCA9PSAmR1szXSA/ICJHTC0+IiA6IEdSID09ICZHWzNdID8gIkdS LT4iIDogIiAgICAiLAotICAgICAgICAgICB0eHJpbmZvW0dbM10uZGVzaWduYXRpb25dLT5rZXl3 ZCwKLSAgICAgICAgICAgR1szXS5kZXNpZ25hdGlvbiA9PSBUWF9UUkFOU1AgPyAiIiA6Ci0gICAg ICAgICAgIEdbM10uc2l6ZSA9PSBjczk0ID8gIjk0IGNoYXJzIiA6Ci0gICAgICAgICAgIEdbM10u c2l6ZSA9PSBjczk2ID8gIjk2IGNoYXJzIiA6ICJtdWx0aS1ieXRlIik7Ci0gICAgfQotICAgIHBy aW50ZigiXG4iKTsKLSAgICBwcmludGYoIiBLZXlib2FyZCBjaGFyYWN0ZXItc2V0czpcbiIpOwot ICAgIHByaW50ZigiICAgTXVsdGluYXRpb25hbDogJXNcbiIsdHhyaW5mb1tkZWNfa2JkXS0+a2V5 d2QpOwotICAgIHByaW50ZigiICAgICAgICBOYXRpb25hbDogJXNcbiIsdHhyaW5mb1tkZWNfbnJj XS0+a2V5d2QpOwotICAgIHByaW50ZigiXG4iKTsKLSAgICBwcmludGYoIiBQcmludGVyIGNoYXJh Y3Rlci1zZXQ6ICVzXG4iLHR4cmluZm9bcHJuY3NdLT5rZXl3ZCk7Ci0jZW5kaWYgLyogTk9URVJN ICovCi0jZWxzZSAvKiBPUzIgKi8KLSNpZm5kZWYgTUFDCi0gICAgY2hhciAqczsKLQotICAgIGRl YnVnKEYxMDEsIlRFUk0gTE9DQUwgQ1NFVCIsIiIsY3NsKTsKLSAgICBkZWJ1ZyhGMTAxLCJURVJN IFJFTU9URSBDU0VUIiwiIixjc3IpOwotICAgIHByaW50ZigiIFRlcm1pbmFsIGNoYXJhY3Rlci1z ZXQ6ICIpOwotICAgIGlmICh0Y3NfdHJhbnNwKSB7ICAgICAgICAgICAgICAgICAgIC8qIE5vIHRy YW5zbGF0aW9uICovCi0gICAgICAgIHByaW50ZigidHJhbnNwYXJlbnRcbiIpOwotICAgIH0gZWxz ZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zbGF0aW9uICovCi0gICAgICAg IHByaW50ZigiJXMgKHJlbW90ZSkgJXMgKGxvY2FsKVxuIiwKLSAgICAgICAgICAgICAgIGZjc2lu Zm9bY3NyXS5rZXl3b3JkLGZjc2luZm9bY3NsXS5rZXl3b3JkKTsKLSAgICAgICAgaWYgKGNzciAh PSBjc2wpIHsKLSAgICAgICAgICAgIHN3aXRjaChnZXR0Y3MoY3NyLGNzbCkpIHsKLSAgICAgICAg ICAgICAgY2FzZSBUQ19VU0FTQ0lJOiAgcyA9ICJhc2NpaSI7ICAgICAgICBicmVhazsKLSAgICAg ICAgICAgICAgY2FzZSBUQ18xTEFUSU46ICAgcyA9ICJsYXRpbjEtaXNvIjsgICBicmVhazsKLSAg ICAgICAgICAgICAgY2FzZSBUQ18yTEFUSU46ICAgcyA9ICJsYXRpbjItaXNvIjsgICBicmVhazsK LSAgICAgICAgICAgICAgY2FzZSBUQ19DWVJJTEw6ICAgcyA9ICJjeXJpbGxpYy1pc28iOyBicmVh azsKLSAgICAgICAgICAgICAgY2FzZSBUQ19KRVVDOiAgICAgcyA9ICJqYXBhbmVzZS1ldWMiOyBi cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBUQ19IRUJSRVc6ICAgcyA9ICJoZWJyZXctaXNvIjsg ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBUQ19HUkVFSzogICAgcyA9ICJncmVlay1pc28i OyAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBUQ185TEFUSU46ICAgcyA9ICJsYXRpbjkt aXNvIjsgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgcyA9ICJ0cmFu c3BhcmVudCI7ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdHJjbXAo cyxmY3NpbmZvW2NzbF0ua2V5d29yZCkgJiYKLSAgICAgICAgICAgICAgICBzdHJjbXAocyxmY3Np bmZvW2Nzcl0ua2V5d29yZCkpCi0gICAgICAgICAgICAgIHByaW50ZigiICAgICAgICAgICAgICAg ICAgICAgICAgICh2aWEgJXMpXG4iLHMpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIE1B QyAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLX0KLQotI2lmbmRl ZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi1leHRlcm4gY2hhciBodGFiW107Ci1WT0lECi1zaG90YWJz KCkgewotICAgIGludCBpLGosayxuOwotCi0gICAgcHJpbnRmKCJUYWIgU3RvcHM6XG5cbiIpOwot ICAgIGZvciAoaSA9IDAsIGogPSAxLCBrID0gVnNjcm5HZXRXaWR0aChWQ01EKTsgaSA8IE1BWFRF Uk1DT0w7ICkgewotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBwcmludGYoIiVjIixodGFiWysr aV09PSdUJz8nVCc6Jy0nKTsKLSAgICAgICAgfSB3aGlsZSAoaSAlIGsgJiYgaSA8IE1BWFRFUk1D T0wpOwotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgIGZvciAoIDsgaiA8PSBpOyBqKysp IHsKLSAgICAgICAgICAgIHN3aXRjaCAoIGolMTAgKSB7Ci0JICAgICAgY2FzZSAxOgotICAgICAg ICAgICAgICAgIHByaW50ZigiJWMiLGogPT0gMSA/ICcxJyA6ICcuJyk7Ci0gICAgICAgICAgICAg ICAgYnJlYWs7Ci0JICAgICAgY2FzZSAyOgotCSAgICAgIGNhc2UgMzoKLQkgICAgICBjYXNlIDQ6 Ci0JICAgICAgY2FzZSA1OgotCSAgICAgIGNhc2UgNjoKLQkgICAgICBjYXNlIDc6Ci0gICAgICAg ICAgICAgICAgcHJpbnRmKCIlYyIsJy4nKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQkgICAg ICBjYXNlIDg6Ci0gICAgICAgICAgICAgICAgbiA9IChqKzIpLzEwMDsKLSAgICAgICAgICAgICAg ICBpZiAobikKLQkJICBwcmludGYoIiVkIixuKTsKLSAgICAgICAgICAgICAgICBlbHNlIAotCQkg IHByaW50ZigiJWMiLCcuJyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0JICAgICAgY2FzZSA5 OgotICAgICAgICAgICAgICAgIG4gPSAoaisxKSUxMDAvMTA7Ci0gICAgICAgICAgICAgICAgaWYg KG4pCi0JCSAgcHJpbnRmKCIlZCIsbik7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoaj45MCkK LQkJICBwcmludGYoIjAiKTsKLSAgICAgICAgICAgICAgICBlbHNlIAotCQkgIHByaW50ZigiJWMi LCcuJyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0JICAgICAgY2FzZSAwOgotICAgICAgICAg ICAgICAgIHByaW50ZigiMCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg fQotICAgICAgICB9Ci0gICAgICAgIHByaW50ZigiXG4iKTsKLSAgICB9Ci0jaWZkZWYgQ09NTUVO VAotICAgIGZvciAoaSA9IDE7IGkgPD0gNzA7IGkrKykKLSAgICAgIHByaW50ZigiJWMiLGh0YWJb aV09PSdUJz8nVCc6Jy0nKTsKLSAgICBwcmludGYoIlxuMS4uLi4uLi4xMC4uLi4uLi4uMjAuLi4u Li4uLjMwLi4uLi4uLi40MC4uLi4uLi4uNTAuLi4uLi4uLjYwXAotLi4uLi4uLi43MFxuXG4iKTsK LSAgICBmb3IgKDsgaSA8PSAxNDA7IGkrKykKLSAgICAgIHByaW50ZigiJWMiLGh0YWJbaV09PSdU Jz8nVCc6Jy0nKTsKLSAgICBwcmludGYoIlxuLi4uLi4uLi44MC4uLi4uLi4uOTAuLi4uLi4uMTAw Li4uLi4uLjExMC4uLi4uLi4xMjAuLi4uLi4uMTMwXAotLi4uLi4uLjE0MFxuXG4iKTsKLSAgICBm b3IgKDsgaSA8PSAyMTA7IGkrKykKLSAgICAgIHByaW50ZigiJWMiLGh0YWJbaV09PSdUJz8nVCc6 Jy0nKTsKLSAgICBwcmludGYoIlxuLi4uLi4uLjE1MC4uLi4uLi4xNjAuLi4uLi4uMTcwLi4uLi4u LjE4MC4uLi4uLi4xOTAuLi4uLi4uMjAwXAotLi4uLi4uLjIxMFxuXG4iKTsKLSAgICBmb3IgKDsg aSA8PSAyNTU7IGkrKykKLSAgICAgIHByaW50ZigiJWMiLGh0YWJbaV09PSdUJz8nVCc6Jy0nKTsK LSAgICBwcmludGYoIlxuLi4uLi4uLjIyMC4uLi4uLi4yMzAuLi4uLi4uMjQwLi4uLi4uLjI1MC4u MjU1XG4iKTsKLSNlbmRpZgotCi19Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9MT0NB TCAqLwotCi0jaWZkZWYgT1MyTU9VU0UKLVZPSUQKLXNob21vdSgpIHsKLSAgICBpbnQgYnV0dG9u LCBldmVudCwgaWQsIGk7Ci0gICAgY2hhciAqIG5hbWUgPSAiIjsKLQotICAgIHByaW50ZigiTW91 c2Ugc2V0dGluZ3M6XG4iKTsKLSAgICBwcmludGYoIiAgIEJ1dHRvbiBDb3VudDogICAlZFxuIixt b3VzZWJ1dHRvbmNvdW50KCkpOwotICAgIHByaW50ZigiICAgQWN0aXZlOiAgICAgICAgICVzXG5c biIsc2hvd29mZih0dF9tb3VzZSkpOwotCi0gICAgZm9yIChidXR0b24gPSAwOyBidXR0b24gPCBN TUJVVFRPTk1BWDsgYnV0dG9uKyspCi0gICAgICBmb3IgKGV2ZW50ID0gMDsgZXZlbnQgPCBNTUVW RU5UU0laRTsgZXZlbnQrKykKLSAgICAgICAgaWYgKG1vdXNlbWFwW2J1dHRvbl1bZXZlbnRdLnR5 cGUgIT0gZXJyb3IpCi0gICAgICAgICAgc3dpdGNoIChtb3VzZW1hcFtidXR0b25dW2V2ZW50XS50 eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIGtleToKLSAgICAgICAgICAgICAgcHJpbnRmKCIgICAl cyA9IENoYXJhY3RlcjogJWMgXFwlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgIG1vdXNlbmFt ZShidXR0b24sZXZlbnQpLAotICAgICAgICAgICAgICAgICAgICAgbW91c2VtYXBbYnV0dG9uXVtl dmVudF0ua2V5LnNjYW5jb2RlLAotICAgICAgICAgICAgICAgICAgICAgbW91c2VtYXBbYnV0dG9u XVtldmVudF0ua2V5LnNjYW5jb2RlICk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgY2FzZSBrdmVyYjoKLSAgICAgICAgICAgICAgaWQgPSBtb3VzZW1hcFtidXR0b25dW2V2ZW50 XS5rdmVyYi5pZCAmIH4oRl9LVkVSQik7Ci0gICAgICAgICAgICAgIGlmIChpZCAhPSBLX0lHTk9S RSkgewotICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaTwgbmt2ZXJiczsgaSsrKQotICAg ICAgICAgICAgICAgICAgICBpZiAoaWQgPT0ga3ZlcmJzW2ldLmt3dmFsKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBuYW1lID0ga3ZlcmJzW2ldLmt3ZDsKLSAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBwcmlu dGYoIiAgICVzID0gS3ZlcmI6IFxcSyVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgIG1v dXNlbmFtZShidXR0b24sZXZlbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUKLSAg ICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBtYWNybzoKLSAgICAgICAgICAgICAgcHJpbnRmKCIg ICAlcyA9IE1hY3JvOiAiLAotICAgICAgICAgICAgICAgICAgICAgbW91c2VuYW1lKGJ1dHRvbixl dmVudCkgKTsKLSAgICAgICAgICAgICAgc2hvc3RyZGVmKG1vdXNlbWFwW2J1dHRvbl1bZXZlbnRd Lm1hY3JvLnN0cmluZyk7Ci0gICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgfQotfQotI2VuZGlmIC8qIE9TMk1PVVNFICovCi0KLSNpZm5k ZWYgTk9MT0NBTAotVk9JRAotc2hvdHJtKCkgewotICAgIGNoYXIgKnM7Ci0gICAgZXh0ZXJuIGNo YXIgKiBnZXRpYWN0KCk7Ci0gICAgZXh0ZXJuIGludCB0dF9wcmludCwgYWRsX2VycjsKLSNpZm5k ZWYgTk9UUklHR0VSCi0gICAgZXh0ZXJuIGNoYXIgKiB0dF90cmlnZ2VyW107Ci0jZW5kaWYgLyog Tk9UUklHR0VSICovCi0jaWZkZWYgQ0tUSURMRQotICAgIGV4dGVybiBjaGFyICogdHRfaWRsZXNu ZF9zdHI7Ci0gICAgZXh0ZXJuIGludCB0dF9pZGxlc25kX3RtbzsKLSAgICBleHRlcm4gaW50IHR0 X2lkbGVsaW1pdCwgdHRfaWRsZWFjdDsKLSNlbmRpZiAvKiBDS1RJRExFICovCi0jaWZkZWYgT1My Ci0gICAgZXh0ZXJuIGludCB3eV9hdXRvcGFnZSwgYXV0b3Njcm9sbCwgc2dyY29sb3JzLCBjb2xv cnJlc2V0LCB1c2VyX2VyYXNlbW9kZSwKLSAgICAgIGRlY3Njbm0sIGRlY3Njbm1fdXNyLCB0dF9k aWZmX3VwZCwgdHRfc2VuZGRhdGEsCi0gICAgICB3eV9ibG9ja2VuZCwgbWFyZ2luYmVsbCwgbWFy Z2luYmVsbGNvbCwgdHRfbW9kZWNoZywgZGd1bml4OwotICAgIGludCBsaW5lcyA9IDA7Ci0jaWZk ZWYgS1VJCi0gICAgZXh0ZXJuIENLRkxPQVQgdHRfbGluZXNwYWNpbmdbXTsKLSAgICBleHRlcm4g dHRfY3Vyc29yX2JsaW5rOwotI2VuZGlmIC8qIEtVSSAqLwotI2lmZGVmIFBDRk9OVFMKLSAgICBp bnQgaTsKLSAgICBjaGFyICpmb250OwotCi0gICAgaWYgKElzT1MyRnVsbFNjcmVlbigpKSB7ICAg ICAgICAgICAgLyogRGV0ZXJtaW5lIHRoZSBmb250IG5hbWUgKi8KLSAgICAgICAgaWYgKCFvczJM b2FkUENGb250cygpKSB7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnRlcm1mb250OyBp KyspIHsKLSAgICAgICAgICAgICAgICBpZiAodHRfZm9udCA9PSB0ZXJtX2ZvbnRbaV0ua3d2YWwp IHsKLSAgICAgICAgICAgICAgICAgICAgZm9udCA9IHRlcm1fZm9udFtpXS5rd2Q7Ci0gICAgICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvbnQgPSAiKERMTCBub3QgYXZhaWxhYmxlKSI7 Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmb250ID0gICAgICIoZnVsbCBzY3Jl ZW4gb25seSkiOwotICAgIH0KLSNlbmRpZiAvKiBQQ0ZPTlRTICovCi0jaWZkZWYgS1VJCi0gICAg Y2hhciBmb250WzY0XSA9ICIodW5rbm93bikiOwotICAgIGlmICggbnRlcm1mb250ID4gMCApIHsK LSAgICAgICAgaW50IGk7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBudGVybWZvbnQ7IGkrKykg ewotICAgICAgICAgICAgaWYgKHR0X2ZvbnQgPT0gdGVybV9mb250W2ldLmt3dmFsKSB7Ci0gICAg ICAgICAgICAgICAgY2tzdHJuY3B5KGZvbnQsdGVybV9mb250W2ldLmt3ZCw1OSk7Ci0gICAgICAg ICAgICAgICAgY2tzdHJuY2F0KGZvbnQsIiAiLDY0KTsKLSAgICAgICAgICAgICAgICBja3N0cm5j YXQoZm9udCxja2l0b2EodHRfZm9udF9zaXplLzIpLDY0KTsKLSAgICAgICAgICAgICAgICBpZiAo IHR0X2ZvbnRfc2l6ZSAlIDIgKQotICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQoZm9udCwi LjUiLDY0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg fQotICAgIH0KLSNlbmRpZiAvKiBLVUkgKi8KLQotICAgIHByaW50ZigiVGVybWluYWwgcGFyYW1l dGVyczpcbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9y ZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgcHJpbnRmKCIgJTE5czogJTFkJS0x MnMgICUxM3M6ICUxZCUtMTRzXG4iLAotICAgICAgICAgICAiQnl0ZXNpemU6IENvbW1hbmQiLAot ICAgICAgICAgICAoY21kbXNrID09IDAzNzcpID8gOCA6IDcsCi0gICAgICAgICAgICIgYml0cyIs IlRlcm1pbmFsIiwKLSAgICAgICAgICAgKGNtYXNrID09IDAzNzcpID8gOCA6IDcsIiBiaXRzIik7 Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVy bjsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBwcmludGYoIiAlMTlzOiAlLTEzcyIsIlR5cGUiLAot ICAgICAgICAgICAodHRfdHlwZSA+PSAwICYmIHR0X3R5cGUgPD0gbWF4X3R0KSA/Ci0gICAgICAg ICAgIHR0X2luZm9bdHRfdHlwZV0ueF9uYW1lIDoKLSAgICAgICAgICAgInVua25vd24iICk7Ci0g ICAgaWYgKHR0X3R5cGUgPj0gMCAmJiB0dF90eXBlIDw9IG1heF90dCkKLSAgICAgIGlmIChzdHJs ZW4odHRfaW5mb1t0dF90eXBlXS54X2lkKSkKLSAgICAgICAgcHJpbnRmKCIgICUxM3M6IDxFU0M+ JXMiLCJJRCIsdHRfaW5mb1t0dF90eXBlXS54X2lkKTsKLSAgICBwcmludGYoIlxuIik7Ci0gICAg aWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxz ZSBsaW5lcyA9IDA7IH0KLSAgICBwcmludGYoIiAlMTlzOiAlLTEzcyAgJTEzczogJS0xNXNcbiIs IkVjaG8iLAotICAgICAgICAgICBkdXBsZXggPyAibG9jYWwiIDogInJlbW90ZSIsIkxvY2tpbmct c2hpZnQiLHNob3dvZmYoc29zaSkpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7 IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgcHJpbnRmKCIg JTE5czogJS0xM3MgICUxM3M6ICUtMTVzXG4iLCJOZXdsaW5lLW1vZGUiLCBzaG93b2ZmKHRubG0p LAotCSAgICJDci1kaXNwbGF5Iix0dF9jcmQgPyAiY3JsZiIgOiAibm9ybWFsIik7Ci0gICAgaWYg KCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBs aW5lcyA9IDA7IH0KLSAgICBwcmludGYoIiAlMTlzOiAlLTEzcyAgJTEzczogJS0xNXNcbiIsIkN1 cnNvciIsCi0jaWZkZWYgS1VJCi0JICAgICh0dF9jdXJzb3IgPT0gMikgPyAodHRfY3Vyc29yX2Js aW5rID8gCi0JCQkJICJmdWxsICgqKSIgOiAiZnVsbCAoLikiKSA6Ci0JICAgICh0dF9jdXJzb3Ig PT0gMSkgPyAodHRfY3Vyc29yX2JsaW5rID8gCi0JCQkJICJoYWxmICgqKSIgOiAiaGFsZiAoLiki KSA6Ci0JICAgICh0dF9jdXJzb3JfYmxpbmsgPyAidW5kZXJsaW5lICgqKSIgOiAidW5kZXJsaW5l ICguKSIpLAotI2Vsc2UgLyogS1VJICovCi0gICAgICAgICAgICh0dF9jdXJzb3IgPT0gMikgPyAi ZnVsbCIgOgotICAgICAgICAgICAodHRfY3Vyc29yID09IDEpID8gImhhbGYiIDogInVuZGVybGlu ZSIsCi0jZW5kaWYgLyogS1VJICovCi0jaWZkZWYgQ0tfQVVUT0RMCi0gICAgICAgICAgICJhdXRv ZG93bmxvYWQiLGF1dG9kbCA9PSBUQURfT04gPwotICAgICAgICAgICAoYWRsX2VyciA/ICJvbiwg ZXJyb3Igc3RvcCIgOiAib24sIGVycm9yIGNvbnRpbnVlIikgOiAKLSAgICAgICAgICAgYXV0b2Rs ID09IFRBRF9BU0sgPyAKLSAgICAgICAgICAgKGFkbF9lcnIgPyAiYXNrLCBlcnJvciBzdG9wIiA6 ICJhc2ssIGVycm9yIGNvbnRpbnVlIikgOgotICAgICAgICAgICAib2ZmIgotI2Vsc2UgLyogQ0tf QVVUT0RMICovCi0gICAgICAgICAgICIiLCAiIgotI2VuZGlmIC8qIENLX0FVVE9ETCAqLwotICAg ICAgICAgICApOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9y ZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgcHJpbnRmKCIgJTE5czogJS0xM3Mg ICUxM3M6ICUtMTVzXG4iLCJBcnJvdy1rZXlzIiwKLSAgICAgICAgICAgdHRfYXJyb3cgPyAiYXBw bGljYXRpb24iIDogImN1cnNvciIsCi0gICAgICAgICAgICJLZXlwYWQtbW9kZSIsIHR0X2tleXBh ZCA/ICJhcHBsaWNhdGlvbiIgOiAibnVtZXJpYyIKLSAgICAgICAgICAgKTsKLQotICAgIGlmICgr K2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGlu ZXMgPSAwOyB9Ci0KLSAgICAvKiBKdXN0IHRvIG1ha2Ugc3VyZSB3ZSBhcmUgdXNpbmcgY3VycmVu dCBpbmZvICovCi0gICAgdXBkYW5zd2VyYmsoKTsKLQotICAgIC8qCi0gICAgICAgVGhpcyBsaW5l IGRvZXNuJ3QgZW5kIHdpdGggJ1xuJyBiZWNhdXNlIHRoZSBhbnN3ZXJiYWNrIHN0cmluZwotICAg ICAgIGlzIHRlcm1pbmF0ZWQgd2l0aCBhIG5ld2xpbmUKLSAgICAqLwotICAgIHByaW50ZigiICUx OXM6ICUtMTNzICAlMTNzOiAlLTE1cyIsIkFuc3dlcmJhY2siLAotICAgICAgICAgICBzaG93b2Zm KHR0X2Fuc3dlciksInJlc3BvbnNlIixhbnN3ZXJiYWNrKTsKLSAgICBzd2l0Y2ggKHR0X2JlbGwp IHsKLSAgICAgIGNhc2UgWFlCX05PTkU6Ci0gICAgICAgIHMgPSAibm9uZSI7Ci0gICAgICAgIGJy ZWFrOwotICAgICAgY2FzZSBYWUJfVklTOgotICAgICAgICBzPSAidmlzaWJsZSI7Ci0gICAgICAg IGJyZWFrOwotICAgICAgY2FzZSBYWUJfQVVEIHwgWFlCX0JFRVA6Ci0gICAgICAgIHM9ImJlZXAi OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgWFlCX0FVRCB8IFhZQl9TWVM6Ci0gICAgICAg IHM9InN5c3RlbSBzb3VuZHMiOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAg ICAgIHM9Iih1bmtub3duKSI7Ci0gICAgfQotICAgIHByaW50ZigiICUxOXM6ICUtMTNzICAlMTNz OiAlLTE1c1xuIiwiQmVsbCIscywKLSAgICAgICAgICAgIldyYXAiLHNob3dvZmYodHRfd3JhcCkp OwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1 cm47IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgcHJpbnRmKCIgJTE5czogJS0xM3MgICUxM3M6ICUt MTVzXG4iLCJBdXRvcGFnZSIsc2hvd29mZih3eV9hdXRvcGFnZSksCi0gICAgICAgICAgICJBdXRv c2Nyb2xsIixzaG93b2ZmKGF1dG9zY3JvbGwpKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dz IC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIHBy aW50ZigiICUxOXM6ICUtMTNzICAlMTNzOiAlLTE1c1xuIiwiU0dSIENvbG9ycyIsc2hvd29mZihz Z3Jjb2xvcnMpLAotICAgICAgICAgICAiRVNDWzBtIGNvbG9yIixjb2xvcnJlc2V0PyJkZWZhdWx0 LWNvbG9yIjoiY3VycmVudC1jb2xvciIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAz KSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgcHJpbnRm KCIgJTE5czogJS0xM3MgICUxM3M6ICUtMTVzXG4iLAotICAgICAgICAgICAgIkVyYXNlIGNvbG9y Iix1c2VyX2VyYXNlbW9kZT8iZGVmYXVsdC1jb2xvciI6ImN1cnJlbnQtY29sb3IiLAotICAgICAg ICAgICAiU2NyZWVuIG1vZGUiLGRlY3Njbm0/InJldmVyc2UiOiJub3JtYWwiKTsKLSAgICBpZiAo KytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxp bmVzID0gMDsgfQotCi0gICAgcHJpbnRmKCIgJTE5czogJS0xM2QgICUxM3M6ICUtMTVkXG4iLCJU cmFuc21pdC10aW1lb3V0Iix0dF9jdHN0bW8sCi0gICAgICAgICAgICJPdXRwdXQtcGFjaW5nIix0 dF9wYWNpbmcpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9y ZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9Ci0KLSAgICBwcmludGYoIiAlMTlzOiAlLTEz ZCAgJTEzczogJXNcbiIsIklkbGUtdGltZW91dCIsdHRfaWRsZWxpbWl0LAotICAgICAgICAgICAi SWRsZS1hY3Rpb24iLCBnZXRpYWN0KCkpOwotCi0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAt IDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBwcmlu dGYoIiAlMTlzOiAlLTEzcyAgJTEzczogJS0xNXNcbiIsIlNlbmQgZGF0YSIsCi0gICAgICAgICAg c2hvd29mZih0dF9zZW5kZGF0YSksIkVuZCBvZiBCbG9jayIsIHd5X2Jsb2NrZW5kPyJjcmxmL2V0 eCI6InVzL2NyIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2tt b3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KLSNpZm5kZWYgTk9UUklHR0VSCi0gICAg cHJpbnRmKCIgJTE5czogJS0xM3MgICUxM3M6ICVkIHNlY29uZHNcbiIsIkF1dG8tZXhpdCB0cmln Z2VyIiwKLSAgICAgICAgICAgdHRfdHJpZ2dlclswXSwiT3V0cHV0IHBhY2luZyIsdHRfcGFjaW5n ICk7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJl dHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KLSNlbmRpZiAvKiBOT1RSSUdHRVIgKi8KLSAgICBwcmlu dGYoIiAlMTlzOiAlLTEzcyAgJTEzczogJS0xNWRcbiIsIk1hcmdpbiBiZWxsIiwKLSAgICAgICAg ICAgc2hvd29mZihtYXJnaW5iZWxsKSwiYXQgY29sdW1uIiwgbWFyZ2luYmVsbGNvbCk7Ci0gICAg aWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxz ZSBsaW5lcyA9IDA7IH0KLSAgICBzd2l0Y2ggKHR0X21vZGVjaGcpIHsKLSAgICAgIGNhc2UgVFZD X0RJUzogcyA9ICJkaXNhYmxlZCI7IGJyZWFrOwotICAgICAgY2FzZSBUVkNfRU5BOiBzID0gImVu YWJsZWQiOyAgYnJlYWs7Ci0gICAgICBjYXNlIFRWQ19XOTU6IHMgPSAid2luOTUtcmVzdHJpY3Rl ZCI7IGJyZWFrOwotICAgICAgZGVmYXVsdDogcyA9ICIodW5rbm93bikiOwotICAgIH0KLSAgICBw cmludGYoIiAlMTlzOiAlLTEzcyAgJTEzczogJS0xNXNcbiIsIkRHIFVuaXggbW9kZSIsCi0gICAg ICAgICAgIHNob3dvZmYoZGd1bml4KSwiVmlkZW8gY2hhbmdlIiwgcyk7Ci0gICAgaWYgKCsrbGlu ZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9 IDA7IH0KLQotI2lmZGVmIENLX0FQQwotICAgIGlmIChhcGNzdGF0dXMgPT0gQVBDX09OKSBzID0g Im9uIjsKLSAgICBlbHNlIGlmIChhcGNzdGF0dXMgPT0gQVBDX09GRikgcyA9ICJvZmYiOwotICAg IGVsc2UgaWYgKGFwY3N0YXR1cyA9PSBBUENfT058QVBDX1VOQ0gpIHMgPSAidW5jaGVja2VkIjsK LSAgICBlbHNlIGlmIChhcGNzdGF0dXMgPT0gQVBDX09OfEFQQ19OT0lOUCkgcyA9ICJuby1pbnB1 dCI7Ci0gICAgZWxzZSBpZiAoYXBjc3RhdHVzID09IEFQQ19PTnxBUENfVU5DSHxBUENfTk9JTlAp IHMgPSAidW5jaGVja2VkLW5vLWlucHV0IjsKLSAgICBwcmludGYoIiAlMTlzOiAlLTEzcyAgJTEz czogJS0xNXNcbiIsCi0gICAgICAgICAgICJBUEMiLCBzLAotI2lmZGVmIFBDRk9OVFMKLSAgICAg ICAgICAgIkZvbnQgKFZHQSkiLGZvbnQKLSNlbHNlIC8qIFBDRk9OVFMgKi8KLSNpZmRlZiBLVUkK LSAgICAgICAgICAgIkZvbnQiLGZvbnQKLSNlbHNlCi0gICAgICAgICAgICJGb250IiwiKG5vdCBz dXBwb3J0ZWQpIgotI2VuZGlmIC8qIEtVSSAqLwotI2VuZGlmIC8qIFBDRk9OVFMgKi8KLQotICAg ICAgICAgICApOwotI2VuZGlmIC8qIENLX0FQQyAqLwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jv d3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9Ci0KLSNp ZmRlZiBDS19UVEdXU0laICAgICAgICAgICAgICAgICAgICAgICAvKiBDb25zb2xlIHRlcm1pbmFs IHNjcmVlbiBzaXplICovCi0gICAgaWYgKHR0X2NvbHNbVlRFUk1dIDwgMCB8fCB0dF9yb3dzW1ZU RVJNXSA8IDApCi0gICAgICB0dGd3c2l6KCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogVHJ5 IHRvIGdldCBsYXRlc3Qgc2l6ZSAqLwotI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KLSAgICBwcmlu dGYoIiAlMTlzOiAlLTEzZCAgJTEzczogJS0xNWRcbiIsIkhlaWdodCIsdHRfcm93c1tWVEVSTV0s Ci0gICAgICAgICAgICJXaWR0aCIsdHRfY29sc1tWVEVSTV0pOwotICAgIGlmICgrK2xpbmVzID4g Y21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9 Ci0jaWZkZWYgS1VJCi0gICAgcHJpbnRmKCIgJTE5czogJS0xMmYgICUxNHM6ICUtMTVkXG4iLCJM aW5lIHNwYWNpbmciLHR0X2xpbmVzcGFjaW5nW1ZURVJNXSwKLSAgICAgICAgICAgIkRpc3BsYXkg SGVpZ2h0IixWc2NybkdldERpc3BsYXlIZWlnaHQoVlRFUk0pKTsKLSAgICBpZiAoKytsaW5lcyA+ IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsg fQotI2VuZGlmIC8qIEtVSSAqLwotICAgIHByaW50ZigiICUxOXM6ICUtMTNzICAlMTNzOiAlZCBs aW5lc1xuIiwiUm9sbC1tb2RlIiwKLSAgICAgICAgICB0dF9yb2xsW1ZURVJNXT8iaW5zZXJ0Ijoi b3ZlcndyaXRlIiwiU2Nyb2xsYmFjayIsIHR0X3NjcnNpemVbVlRFUk1dKTsKLSAgICBpZiAoKyts aW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVz ID0gMDsgfQotCi0gICAgaWYgKHVwZG1vZGUgPT0gdHRfdXBkbW9kZSkKLSAgICAgIGlmICh1cGRt b2RlID09IFRUVV9GQVNUKQotICAgICAgICBzID0gImZhc3QgKGZhc3QpIjsKLSAgICAgIGVsc2UK LSAgICAgICAgcyA9ICJzbW9vdGggKHNtb290aCkiOwotICAgIGVsc2UKLSAgICAgIGlmICh1cGRt b2RlID09IFRUVV9GQVNUKQotICAgICAgICBzID0gImZhc3QgKHNtb290aCkiOwotICAgICAgZWxz ZQotICAgICAgICBzID0gInNtb290aCAoZmFzdCkiOwotCi0gICAgcHJpbnRmKCIgJTE5czogJS0x M3MgICUxM3M6ICVkIG1zXG4iLCJTY3JlZW4tdXBkYXRlOiBtb2RlIixzLAotICAgICAgICAgICAi aW50ZXJ2YWwiLHR0X3VwZGF0ZSk7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsg aWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBwcmludGYoIiAl MTlzOiAlLTEzcyAgJTEzczogJS0xNXNcbiIsCi0gICAgICAgICAgICJTY3JlZW4tb3B0aW1pemF0 aW9uIixzaG93b2ZmKHR0X2RpZmZfdXBkKSwKLSAgICAgICAgICAgIlN0YXR1cyBsaW5lIixzaG93 b2ZmKHR0X3N0YXR1c1tWVEVSTV0pKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykg eyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIHByaW50Zigi ICUxOXM6ICUtMTNzICAlMTNzOiAlLTE1c1xuIiwiRGVidWciLAotICAgICAgICAgICBzaG93b2Zm KGRlYnNlcyksIlNlc3Npb24gbG9nIiwgc2VzbG9nPyBzZXNmaWwgOiAiKG5vbmUpIiApOwotICAg IGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVs c2UgbGluZXMgPSAwOyB9Ci0KLSAgICAvKiBEaXNwbGF5IGNvbG9ycyAoc2hvdWxkIGJlY29tZSBT SE9XIENPTE9SUykgKi8KLSAgICB7Ci0gICAgICAgIFVTSE9SVCByb3csIGNvbDsKLSAgICAgICAg Y2hhciAqIGNvbG9yc1sxNl0gPSB7Ci0gICAgICAgICAgICAiYmxhY2siLCJibHVlIiwiZ3JlZW4i LCJjeWFuIiwicmVkIiwibWFnZW50YSIsImJyb3duIiwibGdyYXkiLAotICAgICAgICAgICAgImRn cmF5IiwibGJsdWUiLCJsZ3JlZW4iLCJsY3lhbiIsImxyZWQiLCJsbWFnZW50IiwieWVsbG93Iiwi d2hpdGUiCi0gICAgICAgIH07Ci0gICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgaWYgKCsr bGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5l cyA9IDA7IH0KLQotICAgICAgICBwcmludGYoIiBDb2xvcjoiKTsKLSNpZm5kZWYgT05FVEVSTVVQ RAotICAgICAgICBHZXRDdXJQb3MoJnJvdywgJmNvbCk7Ci0gICAgICAgIFdydENoYXJTdHJBdHQo ImJvcmRlciIsICAgIDYsIHJvdywgOSwgJmNvbG9yYm9yZGVyICk7Ci0gICAgICAgIFdydENoYXJT dHJBdHQoImRlYnVnIiwgICAgIDUsIHJvdywgMTcsICZjb2xvcmRlYnVnICk7Ci0gICAgICAgIFdy dENoYXJTdHJBdHQoImhlbHB0ZXh0IiwgIDgsIHJvdywgMjUsICZjb2xvcmhlbHAgKTsKLSAgICAg ICAgV3J0Q2hhclN0ckF0dCgicmV2ZXJzZSIsICAgNywgcm93LCAzNCwgJmNvbG9ycmV2ZXJzZSAp OwotICAgICAgICBXcnRDaGFyU3RyQXR0KCJzZWxlY3QiLCAgICA2LCByb3csIDQyLCAmY29sb3Jz ZWxlY3QgKTsKLSAgICAgICAgV3J0Q2hhclN0ckF0dCgic3RhdHVzIiwgICAgNiwgcm93LCA1MCwg JmNvbG9yc3RhdHVzICk7Ci0gICAgICAgIFdydENoYXJTdHJBdHQoInRlcm1pbmFsIiwgIDgsIHJv dywgNTgsICZjb2xvcm5vcm1hbCApOwotICAgICAgICBXcnRDaGFyU3RyQXR0KCJ1bmRlcmxpbmUi LCA5LCByb3csIDY3LCAmY29sb3J1bmRlcmxpbmUgKTsKLSNlbmRpZiAvKiBPTkVURVJNVVBEICov Ci0gICAgICAgIHJvdyA9IFZzY3JuR2V0Q3VyUG9zKFZDTUQpLT55KzE7Ci0gICAgICAgIFZzY3Ju V3J0Q2hhclN0ckF0dChWQ01ELCAiYm9yZGVyIiwgICAgNiwgcm93LCA5LCAmY29sb3Jib3JkZXIg KTsKLSAgICAgICAgVnNjcm5XcnRDaGFyU3RyQXR0KFZDTUQsICJkZWJ1ZyIsICAgICA1LCByb3cs IDE3LCAmY29sb3JkZWJ1ZyApOwotICAgICAgICBWc2NybldydENoYXJTdHJBdHQoVkNNRCwgImhl bHB0ZXh0IiwgIDgsIHJvdywgMjUsICZjb2xvcmhlbHAgKTsKLSAgICAgICAgVnNjcm5XcnRDaGFy U3RyQXR0KFZDTUQsICJyZXZlcnNlIiwgICA3LCByb3csIDM0LCAmY29sb3JyZXZlcnNlICk7Ci0g ICAgICAgIFZzY3JuV3J0Q2hhclN0ckF0dChWQ01ELCAic2VsZWN0IiwgICAgNiwgcm93LCA0Miwg JmNvbG9yc2VsZWN0ICk7Ci0gICAgICAgIFZzY3JuV3J0Q2hhclN0ckF0dChWQ01ELCAic3RhdHVz IiwgICAgNiwgcm93LCA1MCwgJmNvbG9yc3RhdHVzICk7Ci0gICAgICAgIFZzY3JuV3J0Q2hhclN0 ckF0dChWQ01ELCAidGVybWluYWwiLCAgOCwgcm93LCA1OCwgJmNvbG9ybm9ybWFsICk7Ci0gICAg ICAgIFZzY3JuV3J0Q2hhclN0ckF0dChWQ01ELCAidW5kZXJsaW5lIiwgIDksIHJvdywgNjcsICZj b2xvcnVuZGVybGluZSApOwotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgIGlmICgrK2xp bmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMg PSAwOyB9Ci0KLSAgICAgICAgLyogRm9yZWdyb3VuZCBjb2xvciBuYW1lcyAqLwotICAgICAgICBw cmludGYoIiU2czogJS04cyUtOHMlLTlzJS04cyUtOHMlLThzJS05cyUtOXNcbiIsImZvcmUiLAot ICAgICAgICAgICAgICAgICIiLAotICAgICAgICAgICAgICAgIGNvbG9yc1tjb2xvcmRlYnVnJjB4 MEZdLAotICAgICAgICAgICAgICAgIGNvbG9yc1tjb2xvcmhlbHAmMHgwRl0sCi0gICAgICAgICAg ICAgICAgY29sb3JzW2NvbG9ycmV2ZXJzZSYweDBGXSwKLSAgICAgICAgICAgICAgICBjb2xvcnNb Y29sb3JzZWxlY3QmMHgwRl0sCi0gICAgICAgICAgICAgICAgY29sb3JzW2NvbG9yc3RhdHVzJjB4 MEZdLAotICAgICAgICAgICAgICAgIGNvbG9yc1tjb2xvcm5vcm1hbCYweDBGXSwKLSAgICAgICAg ICAgICAgICBjb2xvcnNbY29sb3J1bmRlcmxpbmUmMHgwRl0pOwotICAgICAgICBpZiAoKytsaW5l cyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0g MDsgfQotCi0gICAgICAgIC8qIEJhY2tncm91bmQgY29sb3IgbmFtZXMgKi8KLSAgICAgICAgcHJp bnRmKCIlNnM6ICUtOHMlLThzJS05cyUtOHMlLThzJS04cyUtOXMlLTlzXG4iLCJiYWNrIiwKLSAg ICAgICAgICAgICAgICBjb2xvcnNbY29sb3Jib3JkZXJdLAotICAgICAgICAgICAgICAgIGNvbG9y c1tjb2xvcmRlYnVnPj40XSwKLSAgICAgICAgICAgICAgICBjb2xvcnNbY29sb3JoZWxwPj40XSwK LSAgICAgICAgICAgICAgICBjb2xvcnNbY29sb3JyZXZlcnNlPj40XSwKLSAgICAgICAgICAgICAg ICBjb2xvcnNbY29sb3JzZWxlY3Q+PjRdLAotICAgICAgICAgICAgICAgIGNvbG9yc1tjb2xvcnN0 YXR1cz4+NF0sCi0gICAgICAgICAgICAgICAgY29sb3JzW2NvbG9ybm9ybWFsPj40XSwKLSAgICAg ICAgICAgICAgICBjb2xvcnNbY29sb3J1bmRlcmxpbmU+PjRdICk7Ci0gICAgICAgIGlmICgrK2xp bmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMg PSAwOyB9Ci0gICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgaWYgKCsrbGluZXMgPiBjbWRf cm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KLSAg ICAgICAgcHJpbnRmKCIgQ29sb3I6Iik7Ci0jaWZuZGVmIE9ORVRFUk1VUEQKLSAgICAgICAgR2V0 Q3VyUG9zKCZyb3csICZjb2wpOwotICAgICAgICBXcnRDaGFyU3RyQXR0KCJncmFwaGljIiwgICA3 LCByb3csIDksICZjb2xvcmdyYXBoaWMgKTsKLSAgICAgICAgV3J0Q2hhclN0ckF0dCgiY29tbWFu ZCIsICAgNywgcm93LCAxNywgJmNvbG9yY21kICk7Ci0gICAgICAgIFdydENoYXJTdHJBdHQoIml0 YWxpYyIsICAgIDYsIHJvdywgMjYsICZjb2xvcml0YWxpYyApOwotI2VuZGlmIC8qIE9ORVRFUk1V UEQgKi8KLSAgICAgICAgcm93ID0gVnNjcm5HZXRDdXJQb3MoVkNNRCktPnkrMTsKLSAgICAgICAg VnNjcm5XcnRDaGFyU3RyQXR0KFZDTUQsICJncmFwaGljIiwgICA3LCByb3csIDksICAmY29sb3Jn cmFwaGljICk7Ci0gICAgICAgIFZzY3JuV3J0Q2hhclN0ckF0dChWQ01ELCAiY29tbWFuZCIsICAg Nywgcm93LCAxNywgJmNvbG9yY21kICk7Ci0gICAgICAgIFZzY3JuV3J0Q2hhclN0ckF0dChWQ01E LCAiaXRhbGljIiwgICAgNiwgcm93LCAyNiwgJmNvbG9yaXRhbGljICk7Ci0gICAgICAgIHByaW50 ZigiXG4iKTsKLSAgICAgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2tt b3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KLQotICAgICAgICAvKiBGb3JlZ3JvdW5k IGNvbG9yIG5hbWVzICovCi0gICAgICAgIHByaW50ZigiJTZzOiAlLThzJS04cyUtOHNcbiIsImZv cmUiLAotICAgICAgICAgICAgICAgIGNvbG9yc1tjb2xvcmdyYXBoaWMmMHgwRl0sCi0gICAgICAg ICAgICAgICAgY29sb3JzW2NvbG9yY21kJjB4MEZdLAotICAgICAgICAgICAgICAgIGNvbG9yc1tj b2xvcml0YWxpYyYweDBGXSk7Ci0gICAgICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7 IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9Ci0KLSAgICAgICAgLyog QmFja2dyb3VuZCBjb2xvciBuYW1lcyAqLwotICAgICAgICBwcmludGYoIiU2czogJS04cyUtOHMl LThzXG4iLCJiYWNrIiwKLSAgICAgICAgICAgICAgICBjb2xvcnNbY29sb3JncmFwaGljPj40XSwK LSAgICAgICAgICAgICAgICBjb2xvcnNbY29sb3JjbWQ+PjRdLAotICAgICAgICAgICAgICAgIGNv bG9yc1tjb2xvcml0YWxpYz4+NF0pOwotICAgICAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0g MykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIH0KLSAg ICBwcmludGYoIlxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFh c2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICB7Ci0gICAgICAgIGV4dGVy biBpbnQgdHJ1ZWJsaW5rLCB0cnVlZGltLCB0cnVlcmV2ZXJzZSwgdHJ1ZXVuZGVybGluZSwgdHJ1 ZWl0YWxpYzsKLSAgICAgICAgcHJpbnRmKAotCSAgICAiIEF0dHJpYnV0ZTogIFwKLWJsaW5rOiAl LTNzICBkaW06ICUtM3MgIGl0YWxpYzogJS0zcyAgcmV2ZXJzZTogJS0zcyAgdW5kZXJsaW5lOiAl LTNzXG4iLAotCSAgICB0cnVlYmxpbms/Im9uIjoib2ZmIiwgdHJ1ZWRpbT8ib24iOiJvZmYiLCB0 cnVlaXRhbGljPyJvbiI6Im9mZiIsIAotCSAgICB0cnVlcmV2ZXJzZT8ib24iOiJvZmYiLCB0cnVl dW5kZXJsaW5lPyJvbiI6Im9mZiIpOwotICAgICAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0g MykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIH0KLSAg ICB7Ci0gICAgICAgIGV4dGVybiB2dGF0dHJpYiBXUGF0dHJpYjsKLSAgICAgICAgcHJpbnRmKCIg QVNDSUkgUHJvdGVjdGVkIGNoYXJzOiAlcyVzJXMlcyVzJXMlc1xuIiwKLSAgICAgICAgICAgICAg ICBXUGF0dHJpYi5ibGlua2luZz8iYmxpbmsgIjoiIiwKLSAgICAgICAgICAgICAgICBXUGF0dHJp Yi5pdGFsaWM/Iml0YWxpYyAiOiIiLAotICAgICAgICAgICAgICAgIFdQYXR0cmliLnJldmVyc2Vk PyJyZXZlcnNlICI6IiIsCi0gICAgICAgICAgICAgICAgV1BhdHRyaWIudW5kZXJsaW5lZD8idW5k ZXJsaW5lICI6IiIsCi0gICAgICAgICAgICAgICAgV1BhdHRyaWIuYm9sZD8iYm9sZCAiOiIiLAot ICAgICAgICAgICAgICAgIFdQYXR0cmliLmRpbT8iZGltICI6IiIsCi0gICAgICAgICAgICAgICAg V1BhdHRyaWIuaW52aXNpYmxlPyJpbnZpc2libGUgIjoiIik7Ci0gICAgICAgIGlmICgrK2xpbmVz ID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAw OyB9Ci0gICAgfQotCi0gICAgcHJpbnRmKCJcbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jv d3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAg KFZPSUQpIHNob2VzYyhlc2NhcGUpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7 IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgcHJpbnRmKCIg U2VlIFNIT1cgQ0hBUkFDVEVSLVNFVFMgZm9yIGNoYXJhY3Rlci1zZXQgaW5mb1xuIik7Ci0gICAg aWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxz ZSBsaW5lcyA9IDA7IH0KLQotI2Vsc2UgLyogT1MyICovICAgLyogQmVnaW5uaW5nIG9mIG5ldyBu b24tT1MyIHZlcnNpb24gKi8KLQotICAgIHByaW50ZigiXG4iKTsKLSAgICBwcmludGYoIlRlcm1p bmFsIHBhcmFtZXRlcnM6XG4iKTsKLSAgICBwcmludGYoIiAlMTlzOiAlMWQlLTEycyAgJTEzczog JTFkJS0xNHNcbiIsCi0gICAgICAgICAgICJCeXRlc2l6ZTogQ29tbWFuZCIsCi0gICAgICAgICAg IChjbWRtc2sgPT0gMDM3NykgPyA4IDogNywKLSAgICAgICAgICAgIiBiaXRzIiwiVGVybWluYWwi LAotICAgICAgICAgICAoY21hc2sgPT0gMDM3NykgPyA4IDogNywiIGJpdHMiKTsKLSAgICBzID0g Z2V0ZW52KCJURVJNIik7Ci0jaWZkZWYgWFBSSU5UCi0gICAgcHJpbnRmKCIgJTE5czogJS0xM3Mg ICUxM3M6ICUtMTVzXG4iLAotICAgICAgICAgICAiVHlwZSIsCi0gICAgICAgICAgIHMgPyBzIDog Iih1bmtub3duKSIsCi0gICAgICAgICAgICJQcmludCIsCi0gICAgICAgICAgIHNob3dvZmYodHRf cHJpbnQpCi0gICAgICAgICAgICk7Ci0jZWxzZQotICAgIHByaW50ZigiICUxOXM6ICUtMTNzXG4i LCJUeXBlIiwgcyA/IHMgOiAiKHVua25vd24pIik7Ci0jZW5kaWYgLyogWFBSSU5UICovCi0gICAg cHJpbnRmKCIgJTE5czogJS0xM3MgICUxM3M6ICUtMTVzXG4iLCJFY2hvIiwKLSAgICAgICAgICAg ZHVwbGV4ID8gImxvY2FsIiA6ICJyZW1vdGUiLCJMb2NraW5nLXNoaWZ0IixzaG93b2ZmKHNvc2kp KTsKLSAgICBwcmludGYoIiAlMTlzOiAlLTEzcyAgJTEzczogJS0xNXNcbiIsIk5ld2xpbmUtbW9k ZSIsCi0gICAgICAgICAgIHNob3dvZmYodG5sbSksIkNyLWRpc3BsYXkiLHR0X2NyZCA/ICJjcmxm IiA6ICJub3JtYWwiKTsKLQotI2lmZGVmIENLX0FQQwotICAgIGlmIChhcGNzdGF0dXMgPT0gQVBD X09OKSBzID0gIm9uIjsKLSAgICBlbHNlIGlmIChhcGNzdGF0dXMgPT0gQVBDX09GRikgcyA9ICJv ZmYiOwotICAgIGVsc2UgaWYgKGFwY3N0YXR1cyA9PSAoQVBDX09OfEFQQ19VTkNIKSkgcyA9ICJ1 bmNoZWNrZWQiOwotICAgIGVsc2UgaWYgKGFwY3N0YXR1cyA9PSAoQVBDX09OfEFQQ19OT0lOUCkp IHMgPSAibm8taW5wdXQiOwotICAgIGVsc2UgaWYgKGFwY3N0YXR1cyA9PSAoQVBDX09OfEFQQ19V TkNIfEFQQ19OT0lOUCkpCi0gICAgICBzID0gInVuY2hlY2tlZC1uby1pbnB1dCI7Ci0gICAgcHJp bnRmKCIgJTE5czogJS0xM3MgICUxM3M6ICUtMTVzXG4iLAotICAgICAgICAgICAiQVBDIiwgcywK LSNpZmRlZiBDS19BVVRPREwKLSAgICAgICAgICAgIkF1dG9kb3dubG9hZCIsIGF1dG9kbCA/Ci0g ICAgICAgICAgIChhZGxfZXJyID8gIm9uLCBlcnJvciBzdG9wIiA6ICJvbiwgZXJyb3IgY29udGlu dWUiKSA6ICJvZmYiCi0jZWxzZQotICAgICAgICAgICAiIiwiIgotI2VuZGlmIC8qIENLX0FVVE9E TCAqLwotICAgICAgICAgICApOwotI2VuZGlmIC8qIENLX0FQQyAqLwotCi0jaWZkZWYgQ0tfVFRH V1NJWiAgICAgICAgICAgICAgICAgICAgICAgLyogQ29uc29sZSB0ZXJtaW5hbCBzY3JlZW4gc2l6 ZSAqLwotICAgIHR0Z3dzaXooKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRyeSB0byBn ZXQgbGF0ZXN0IHNpemUgKi8KLSAgICBwcmludGYoIiAlMTlzOiAlLTEzZCAgJTEzczogJS0xNWRc biIsIkhlaWdodCIsdHRfcm93cywgIldpZHRoIiwgdHRfY29scyk7Ci0jZW5kaWYgLyogQ0tfVFRH V1NJWiAqLwotCi0gICAgcHJpbnRmKCIgJTE5czogJS0xM3MgICUxM3M6ICUtMTVzXG4iLCJEZWJ1 ZyIsCi0gICAgICAgICAgIHNob3dvZmYoZGVic2VzKSwiU2Vzc2lvbiBsb2ciLCBzZXNsb2c/IHNl c2ZpbCA6ICIobm9uZSkiICk7Ci0KLSNpZmRlZiBDS1RJRExFCi0gICAgcHJpbnRmKCIgJTE5czog JS0xM2QgICUxM3M6ICVzXG4iLCJJZGxlLXRpbWVvdXQiLHR0X2lkbGVsaW1pdCwKLSAgICAgICAg ICAgIklkbGUtYWN0aW9uIiwgZ2V0aWFjdCgpKTsKLSNlbmRpZiAvKiBDS1RJRExFICovCi0KLSAg ICBwcmludGYoIiAlMTlzOiAlLTEzcyAgIiwiTGYtZGlzcGxheSIsIHR0X2xmZCA/ICJjcmxmIiA6 ICJub3JtYWwiKTsKLSNpZmRlZiBVTklYCi0jaWZuZGVmIE5PSkMKLSAgICBwcmludGYoIiUxM3M6 ICUtMTVzIiwiU3VzcGVuZCIsIHNob3dvZmYoeHN1c3BlbmQpKTsKLSNlbmRpZiAvKiBOT0pDICov Ci0jZW5kaWYgLyogVU5JWCAqLwotICAgIHByaW50ZigiXG4iKTsKLQotI2lmbmRlZiBOT1RSSUdH RVIKLSAgICBwcmludGYoIiAlMTlzOiAlLTEzc1xuIiwiVHJpZ2dlciIsCi0gICAgICAgICAgIHR0 X3RyaWdnZXJbMF0gPyB0dF90cmlnZ2VyWzBdIDogIihub25lKSIpOwotI2VuZGlmIC8qIE5PVFJJ R0dFUiAqLwotICAgIHByaW50ZigiXG4iKTsKLQotICAgIChWT0lEKSBzaG9lc2MoZXNjYXBlKTsK LSNpZm5kZWYgTk9DU0VUUwotICAgIHNob3Rjcyh0Y3NsLHRjc3IpOyAgICAgICAgICAvKiBTaG93 IHRlcm1pbmFsIGNoYXJhY3RlciBzZXRzICovCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi0jZW5k aWYgLyogT1MyICovCi19Ci0KLVZPSUQKLXNobWRtbGluKCkgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBCcmllZmx5IHNob3cgbW9kZW0gJiBsaW5lICovCi0jaWZuZGVmIE5PRElBTAot I2lmbmRlZiBNSU5JRElBTAotI2lmZGVmIE9MRFRCQ09ERQotICAgIGV4dGVybiBpbnQgdGJtb2Rl bDsKLSAgICBfUFJPVE9UWVAoIGNoYXIgKiBndGJtb2RlbCwgKHZvaWQpICk7Ci0jZW5kaWYgLyog T0xEVEJDT0RFICovCi0jZW5kaWYgLyogTUlOSURJQUwgKi8KLSNlbmRpZiAvKiBOT0RJQUwgKi8K LSAgICBpZiAobG9jYWwpCi0jaWZkZWYgT1MyCi0gICAgICBwcmludGYoIiBQb3J0OiAlcywgTW9k ZW0gdHlwZTogIix0dG5hbWUpOwotI2Vsc2UKLSAgICAgIHByaW50ZigiIExpbmU6ICVzLCBNb2Rl bSB0eXBlOiAiLHR0bmFtZSk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgZWxzZQotICAgICAgcHJp bnRmKAotI2lmZGVmIE9TMgotIiBDb21tdW5pY2F0aW9uIGRldmljZSBub3QgeWV0IHNlbGVjdGVk IHdpdGggU0VUIFBPUlRcbiBNb2RlbSB0eXBlOiAiCi0jZWxzZQotIiBDb21tdW5pY2F0aW9uIGRl dmljZSBub3QgeWV0IHNlbGVjdGVkIHdpdGggU0VUIExJTkVcbiBNb2RlbSB0eXBlOiAiCi0jZW5k aWYgLyogT1MyICovCi0gICAgICAgICAgICAgKTsKLSNpZm5kZWYgTk9ESUFMCi0gICAgcHJpbnRm KCIlcyIsZ21kbXR5cCgpKTsKLSNpZm5kZWYgTUlOSURJQUwKLSNpZmRlZiBPTERUQkNPREUKLSAg ICBpZiAodGJtb2RlbCkgcHJpbnRmKCIgKCVzKSIsZ3RibW9kZWwoKSk7IC8qIFRlbGViaXQgbW9k ZWwgaW5mbyAqLwotI2VuZGlmIC8qIE9MRFRCQ09ERSAqLwotI2VuZGlmIC8qIE1JTklESUFMICov Ci0jZWxzZQotICAgIHByaW50ZigiKGRpc2FibGVkKSIpOwotI2VuZGlmIC8qIE5PRElBTCAqLwot fQotCi0jaWZkZWYgQ0tfVEFQSQotdm9pZAotc2hvdGFwaShpbnQgb3B0aW9uKSB7Ci0gICAgaW50 IHJjPTAsayA7Ci0gICAgY2hhciAqcz1OVUxMOwotICAgIExQREVWQ0ZHICAgICAgICBscERldkNm ZyA9IE5VTEw7Ci0gICAgTFBDT01NQ09ORklHICAgIGxwQ29tbUNvbmZpZyA9IE5VTEw7Ci0gICAg TFBNT0RFTVNFVFRJTkdTIGxwTW9kZW1TZXR0aW5ncyA9IE5VTEw7Ci0gICAgRENCICogICAgICAg ICAgIGxwRENCID0gTlVMTDsKLSAgICBleHRlcm4gc3RydWN0IGtleXRhYiAqIHRhcGlsb2N0YWI7 ICAvKiBNaWNyb3NvZnQgVEFQSSBMb2NhdGlvbnMgKi8KLSAgICBleHRlcm4gaW50IG50YXBpbG9j OwotICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiICogdGFwaWxpbmV0YWI7IC8qIE1pY3Jvc29mdCBU QVBJIExpbmUgRGV2aWNlcyAqLwotICAgIGV4dGVybiBpbnQgbnRhcGlsaW5lOwotICAgIGV4dGVy biBpbnQgdHR0YXBpOyAgICAgICAgICAgICAgICAgIC8qIFRBUEkgaW4gdXNlICovCi0gICAgZXh0 ZXJuIGludCB0YXBpcGFzczsgICAgICAgICAgICAgICAgLyogVEFQSSBQYXNzdGhyb3VnaCBtb2Rl ICovCi0gICAgZXh0ZXJuIGludCB0YXBpY29udjsgICAgICAgICAgICAgICAgLyogVEFQSSBDb252 ZXJzaW9uIG1vZGUgKi8KLSAgICBleHRlcm4gaW50IHRhcGlsaWdodHM7Ci0gICAgZXh0ZXJuIGlu dCB0YXBpcHJldGVybTsKLSAgICBleHRlcm4gaW50IHRhcGlwb3N0dGVybTsKLSAgICBleHRlcm4g aW50IHRhcGltYW51YWw7Ci0gICAgZXh0ZXJuIGludCB0YXBpaW5hY3Rpdml0eTsKLSAgICBleHRl cm4gaW50IHRhcGlib25nOwotICAgIGV4dGVybiBpbnQgdGFwaXVzZWNmZzsKLSAgICBleHRlcm4g Y2hhciB0YXBpbG9jW107Ci0gICAgZXh0ZXJuIGludCB0YXBpbG9jaWQ7Ci0gICAgZXh0ZXJuIGlu dCBUQVBJQXZhaWw7Ci0KLSAgICBpZiAoIVRBUElBdmFpbCkgewotICAgICAgICBwcmludGYoIlRB UEkgU3VwcG9ydCBub3QgZW5hYmxlZFxyXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg ICBzd2l0Y2ggKG9wdGlvbikgewotICAgICAgY2FzZSAwOgotICAgICAgICBwcmludGYoIlRBUEkg U2V0dGluZ3M6XG4iKTsKLSAgICAgICAgcHJpbnRmKCIgIExpbmU6ICAgICAgICAgICAgICAgICAg ICAgICVzXG4iLAotICAgICAgICAgICAgICAgdHR0YXBpID8gdHRuYW1lIDogIihub25lIGluIHVz ZSkiKTsKLQotICAgICAgICBja3RhcGlCdWlsZExvY2F0aW9uVGFibGUoJnRhcGlsb2N0YWIsICZu dGFwaWxvYyk7Ci0gICAgICAgIGlmICh0YXBpbG9jaWQgPT0gLTEpCi0gICAgICAgICAgdGFwaWxv Y2lkID0gY2t0YXBpR2V0Q3VycmVudExvY2F0aW9uSUQoKTsKLQotICAgICAgICAvKiBGaW5kIHRo ZSBjdXJyZW50IHRhcGlsb2MgZW50cnkgKi8KLSAgICAgICAgLyogYW5kIHVzZSBpdCBhcyB0aGUg ZGVmYXVsdC4gKi8KLSAgICAgICAgZm9yIChrID0gMDsgayA8IG50YXBpbG9jOyBrKyspIHsKLSAg ICAgICAgICAgIGlmICh0YXBpbG9jdGFiW2tdLmt3dmFsID09IHRhcGlsb2NpZCkKLSAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGsgPj0gMCAmJiBrIDwgbnRhcGls b2MpCi0gICAgICAgICAgcyA9IHRhcGlsb2N0YWJba10ua3dkOwotICAgICAgICBlbHNlCi0gICAg ICAgICAgcyA9ICIodW5rbm93bikiOwotICAgICAgICBwcmludGYoIiAgTG9jYXRpb246ICAgICAg ICAgICAgICAgICAgJXNcbiIscyk7Ci0gICAgICAgIHByaW50ZigiICBNb2RlbS1kaWFsaW5nOiAg ICAgICAgICAgICAlc1xuIix0YXBpcGFzcz8ib2ZmIjoib24iKTsKLSAgICAgICAgcHJpbnRmKCIg IFBob25lLW51bWJlci1jb252ZXJzaW9uczogICVzXG4iLAotICAgICAgICAgICAgICAgIHRhcGlj b252PT1DS19PTj8ib24iOnRhcGljb252PT1DS19BVVRPPyJhdXRvIjoib2ZmIik7Ci0gICAgICAg IHByaW50ZigiICBNb2RlbS1saWdodHM6ICAgICAgICAgICAgICAlcyAlc1xuIix0YXBpbGlnaHRz PyJvbiAiOiJvZmYiLAotICAgICAgICAgICAgICAgIHRhcGlwYXNzPyIobi9hKSI6IiIpOwotICAg ICAgICBwcmludGYoIiAgUHJlZGlhbC10ZXJtaW5hbDogICAgICAgICAgJXMgJXNcbiIsdGFwaXBy ZXRlcm0/Im9uICI6Im9mZiIsCi0gICAgICAgICAgICAgICAgdGFwaXBhc3M/IihuL2EpIjoiIik7 Ci0gICAgICAgIHByaW50ZigiICBQb3N0ZGlhbC10ZXJtaW5hbDogICAgICAgICAlcyAlc1xuIix0 YXBpcG9zdHRlcm0/Im9uICI6Im9mZiIsCi0gICAgICAgICAgICAgICAgdGFwaXBhc3M/IihuL2Ep IjoiIik7Ci0gICAgICAgIHByaW50ZigiICBNYW51YWwtZGlhbDogICAgICAgICAgICAgICAlcyAl c1xuIix0YXBpbWFudWFsPyJvbiAiOiJvZmYiLAotICAgICAgICAgICAgICAgIHRhcGlwYXNzPyIo bi9hKSI6IiIpOwotICAgICAgICBwcmludGYoIiAgSW5hY3Rpdml0eS10aW1lb3V0OiAgICAgICAg JWQgc2Vjb25kcyAlc1xuIix0YXBpaW5hY3Rpdml0eSwKLSAgICAgICAgICAgICAgICB0YXBpcGFz cz8iKG4vYSkiOiIiKTsKLSAgICAgICAgcHJpbnRmKCIgIFdhaXQtZm9yLWJvbmc6ICAgICAgICAg ICAgICVkIHNlY29uZHMgJXNcbiIsdGFwaWJvbmcsCi0gICAgICAgICAgICAgICAgdGFwaXBhc3M/ IihuL2EpIjoiIik7Ci0gICAgICAgIHByaW50ZigiICBVc2Utd2luZG93cy1jb25maWd1cmF0aW9u OiAlcyAlc1xuIiwKLSAgICAgICAgICAgICAgICB0YXBpdXNlY2ZnPyJvbiAiOiJvZmYiLCB0YXBp cGFzcz8iKG4vYSkiOiIiKTsKLSAgICAgICAgcHJpbnRmKCJcbiIpOwotCi0jaWZkZWYgQkVUQVRF U1QKLSAgICAgICAgaWYgKHRhcGlwYXNzKSB7Ci1wcmludGYoIkstOTUgdXNlcyB0aGUgVEFQSSBM aW5lIGluIGFuIGV4Y2x1c2l2ZSBtb2RlLiAgT3RoZXIgYXBwbGljYXRpb25zXG4iKTsKLXByaW50 ZigibWF5IG9wZW4gdGhlIGRldmljZSBidXQgbWF5IG5vdCBwbGFjZSBjYWxscyBub3IgYW5zd2Vy IGNhbGxzLlxuIik7Ci1wcmludGYoIkRpYWxpbmcgaXMgcGVyZm9ybWVkIHVzaW5nIHRoZSBLLTk1 IGRpYWxpbmcgcHJvY2VkdXJlcy4gIFNFVCBNT0RFTVxuIik7Ci1wcmludGYoIlRZUEUgVEFQSSBh ZnRlciB0aGUgU0VUIFRBUEkgTElORSBjb21tYW5kIHRvIGFjdGl2YXRlIHRoZSBtb2RlbVxuIik7 Ci1wcmludGYoImRlZmluaXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBhY3RpdmUgVEFQSSBMSU5F IGRldmljZS5cblxuIik7Ci0KLSAgICAgICAgfSBlbHNlIHsKLQotcHJpbnRmKCJLLTk1IHVzZXMg dGhlIFRBUEkgTGluZSBpbiBhIGNvb3BlcmF0aXZlIG1vZGUuICBPdGhlciBhcHBsaWNhdGlvbnNc biIpOwotcHJpbnRmKCJtYXkgb3BlbiB0aGUgZGV2aWNlLCBwbGFjZSBhbmQgYW5zd2VyIGNhbGxz LiAgRGlhbGluZyBpcyBwZXJmb3JtZWRcbiIpOwotcHJpbnRmKCJieSBUQVBJLiAgSy05NSBTRVQg TU9ERU0gY29tbWFuZHMgYXJlIG5vdCB1c2VkLlxuXG4iKTsKLSAgICAgICAgfQotCi0gICAgICAg IGlmICh0YXBpY29udiA9PSBDS19PTiB8fAotICAgICAgICAgICAgdGFwaWNvbnYgPT0gQ0tfQVVU TyAmJiAhdGFwaXBhc3MpIHsKLXByaW50ZigKLSJQaG9uZSBudW1iZXJzIGFyZSBjb252ZXJ0ZWQg ZnJvbSBjYW5vbmljYWwgdG8gZGlhbGFibGUgZm9ybSBieSBUQVBJXG4iKTsKLXByaW50ZigidXNp bmcgdGhlIGRpYWxpbmcgcnVsZXMgc3BlY2lmaWVkIGluIHRoZSBUQVBJIERpYWxpbmcgUHJvcGVy dGllc1xuIik7Ci1wcmludGYoImRpYWxvZy5cblxuIik7Ci0KLSAgICAgICAgfSBlbHNlIHsKLQot cHJpbnRmKAotIlBob25lIG51bWJlcnMgYXJlIGNvbnZlcnRlZCBmcm9tIGNhbm9uaWNhbCB0byBk aWFsYWJsZSBmb3JtIGJ5IEstOTVcbiIpOwotcHJpbnRmKAotInVzaW5nIHRoZSBkaWFsaW5nIHJ1 bGVzIHNwZWNpZmllZCB3aXRoIHRoZSBTRVQgRElBTCBjb21tYW5kcy4gIFRBUElcbiIpOwotcHJp bnRmKAotIkRpYWxpbmcgUHJvcGVydGllcyBhcmUgaW1wb3J0ZWQgYXV0b21hdGljbHkgdXBvbiBz dGFydHVwIGFuZCB3aGVuZXZlclxuIik7Ci1wcmludGYoInRoZSBUQVBJIERpYWxpbmcgUHJvcGVy dGllcyBhcmUgYWx0ZXJlZCBvciB3aGVuIHRoZSBUQVBJIExvY2F0aW9uXG4iKTsKLXByaW50Zigi aXMgY2hhbmdlZC5cblxuIik7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBCRVRBVEVTVCAqLwotCi0g ICAgICAgIGlmICh0YXBpcGFzcykgewotICAgICAgICAgICAgcHJpbnRmKCJUeXBlIFNIT1cgTU9E RU0gdG8gc2VlIE1PREVNIGNvbmZpZ3VyYXRpb24uXG4iKTsKLSAgICAgICAgICAgIGlmICh0YXBp Y29udiA9PSBDS19PTikKLSAgICAgICAgICAgICAgcHJpbnRmKCJUeXBlIFNIT1cgRElBTCB0byBz ZWUgRElBTC1yZWxhdGVkIGl0ZW1zLlxuIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICBpZiAodGFwaWNvbnYgPT0gQ0tfT04gfHwgdGFwaWNvbnYgPT0gQ0tfQVVUTykKLSAgICAgICAg ICAgICAgcHJpbnRmKCJUeXBlIFNIT1cgRElBTCB0byBzZWUgRElBTC1yZWxhdGVkIGl0ZW1zLlxu Iik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDE6Ci0gICAgICAgIGNr dGFwaURpc3BsYXlUYXBpTG9jYXRpb25JbmZvKCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz ZSAyOgotICAgICAgICByYyA9IGNrdGFwaUdldE1vZGVtU2V0dGluZ3MoJmxwRGV2Q2ZnLCZscE1v ZGVtU2V0dGluZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxwQ29t bUNvbmZpZywmbHBEQ0IpOwotICAgICAgICBpZiAocmMpIHsKLSAgICAgICAgICAgIGNrdGFwaURp c3BsYXlNb2RlbVNldHRpbmdzKGxwRGV2Q2ZnLGxwTW9kZW1TZXR0aW5ncywKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHBDb21tQ29uZmlnLGxwRENCKTsKLSAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byByZXRyaWV2ZSBNb2Rl bSBTZXR0aW5nc1xuIik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDM6 IHsKLSAgICAgICAgICBIQU5ETEUgaE1vZGVtID0gR2V0TW9kZW1IYW5kbGVGcm9tTGluZSgoSExJ TkUpMCk7Ci0gICAgICAgICAgaWYgKGhNb2RlbSkKLSAgICAgICAgICAgIERpc3BsYXlDb21tUHJv cGVydGllcyhoTW9kZW0pOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHByaW50ZigiP1Vu YWJsZSB0byByZXRyaWV2ZSBhIHZhbGlkIE1vZGVtIEhhbmRsZVxuIik7Ci0gICAgICAgICAgQ2xv c2VIYW5kbGUoaE1vZGVtKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAg cHJpbnRmKCJcbiIpOwotfQotI2VuZGlmIC8qIENLX1RBUEkgKi8KLSNlbmRpZiAvKiBOT0xPQ0FM ICovCi0KLSNpZmRlZiBQQVRURVJOUwotc3RhdGljIFZPSUQKLXNob3BhdCgpIHsKLSAgICBleHRl cm4gY2hhciAqIGJpbnBhdHRlcm5zW10sICogdHh0cGF0dGVybnNbXTsKLSAgICBleHRlcm4gaW50 IHBhdHRlcm5zLCBmaWxlcGVlazsKLSAgICBjaGFyICoqcCwgKnM7Ci0gICAgaW50IGksIGosIGss IG4sIGZsYWcsIHdpZHRoOwotI2lmZGVmIENLX1RUR1dTSVoKLSAgICB0dGd3c2l6KCk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBUcnkgdG8gZ2V0IGxhdGVzdCBzaXplICovCi0jaWZkZWYg T1MyCi0gICAgd2lkdGggPSB0dF9jb2xzW1ZDTURdOwotI2Vsc2UgLyogT1MyICovCi0gICAgd2lk dGggPSB0dF9jb2xzOwotI2VuZGlmIC8qIE9TMiAqLwotICAgIGlmICh3aWR0aCA8IDEpCi0jZW5k aWYgLyogQ0tfVFRHV1NJWiAqLwotICAgICAgd2lkdGggPSA4MDsKLSAgICBwcmludGYoIlxuIik7 Ci0gICAgcHJpbnRmKCIgU2V0IGZpbGUgdHlwZTogICAgICAgICAgICAlc1xuIixnZm1vZGUoYmlu YXJ5LDEpKTsKLSAgICBwcmludGYoIiBTZXQgZmlsZSBwYXR0ZXJuczogICAgICAgICVzIiwgc2hv d29vYShwYXR0ZXJucykpOwotI2lmZGVmIENLX0xBQkVMRUQKLSAgICBpZiAoYmluYXJ5ID09IFhZ RlRfTCkKLSAgICAgIHByaW50ZigiIChidXQgU0VUIEZJTEUgVFlQRSBMQUJFTEVEIG92ZXJyaWRl cylcbiIpOwotICAgIGVsc2UKLSNlbmRpZiAvKiBDS19MQUJFTEVEICovCi0jaWZkZWYgVk1TCi0g ICAgaWYgKGJpbmFyeSA9PSBYWUZUX0kpCi0gICAgICBwcmludGYoIiAoYnV0IFNFVCBGSUxFIFRZ UEUgSU1BR0Ugb3ZlcnJpZGVzKVxuIik7Ci0gICAgZWxzZQotI2VuZGlmIC8qIFZNUyAqLwotICAg IGlmIChmaWxlcGVlaykKLSAgICAgIHByaW50ZigiIChidXQgU0VUIEZJTEUgU0NBTiBPTiBvdmVy cmlkZXMpXG4iKTsKLSAgICBlbHNlCi0gICAgICBwcmludGYoIlxuIik7Ci0gICAgcHJpbnRmKCIg TWF4aW11bSBwYXR0ZXJucyBhbGxvd2VkOiAlZFxuIiwgRlRQQVRURVJOUyk7Ci0gICAgZm9yIChr ID0gMDsgayA8IDI7IGsrKykgeyAgICAgICAgICAgLyogRm9yIGVhY2gga2luZCBvZiBwYXR0ZXIg Ki8KLSAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICBpZiAoayA9PSAwKSB7ICAgICAgICAg ICAgICAgICAgIC8qIGJpbmFyeS4uLiAqLwotICAgICAgICAgICAgcHJpbnRmKCIgRmlsZSBiaW5h cnktcGF0dGVybnM6ICIpOwotICAgICAgICAgICAgcCA9IGJpbnBhdHRlcm5zOwotICAgICAgICB9 IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRleHQuLi4gKi8KLSAgICAgICAgICAg IHByaW50ZigiIEZpbGUgdGV4dC1wYXR0ZXJuczogICAiKTsKLSAgICAgICAgICAgIHAgPSB0eHRw YXR0ZXJuczsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXBbMF0pIHsKLSAgICAgICAgICAgIHBy aW50ZigiKG5vbmUpXG4iKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHByaW50Zigi XG4gIik7Ci0gICAgICAgICAgICBuID0gMjsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBG VFBBVFRFUk5TOyBpKyspIHsgLyogRm9yIGVhY2ggcGF0dGVybiAqLwotICAgICAgICAgICAgICAg IGlmICghcFtpXSkgICAgICAgICAgICAgIC8qIERvbmUgKi8KLSAgICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICAgIHMgPSBwW2ldOyAgICAgICAgICAgICAgIC8qIExvb2sgZm9y IGVtYmVkZGVkIHNwYWNlICovCi0gICAgICAgICAgICAgICAgZm9yIChqID0gMCwgZmxhZyA9IDE7 ICpzOyBzKyssIGorKykgLyogYW5kIGFsc28gZ2V0IGxlbmd0aCAqLwotICAgICAgICAgICAgICAg ICAgaWYgKCpzID09IFNQKQotICAgICAgICAgICAgICAgICAgICBmbGFnID0gMzsKLSAgICAgICAg ICAgICAgICBuICs9IGogKyBmbGFnOyAgICAgICAgICAvKiBMZW5ndGggb2YgdGhpcyBsaW5lICov Ci0gICAgICAgICAgICAgICAgaWYgKG4gPj0gd2lkdGggLSAxKSB7Ci0gICAgICAgICAgICAgICAg ICAgIHByaW50ZigiXG4gIik7Ci0gICAgICAgICAgICAgICAgICAgIG4gPSBqKzI7Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHByaW50ZihmbGFnID09IDMgPyAiIHslc30iIDog IiAlcyIsIHBbaV0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG4gPiAyKQotICAg ICAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcHJpbnRmKCJc biIpOwotfQotI2VuZGlmIC8qIFBBVFRFUk5TICovCi0KLSNpZm5kZWYgTk9TUEwKLXN0YXRpYyBW T0lECi1zaG9vdXRwdXQoKSB7Ci0gICAgcHJpbnRmKCIgT3V0cHV0IHBhY2luZzogICAgICAgICAg JWQgKG1pbGxpc2Vjb25kcylcbiIscGFjaW5nKTsKLSAgICBwcmludGYoIiBPdXRwdXQgc3BlY2lh bC1lc2NhcGVzOiAlc1xuIiwgc2hvd29mZihvdXRlc2MpKTsKLX0KLQotc3RhdGljIFZPSUQKLXNo b2lucHV0KCkgewotI2lmZGVmIENLRkxPQVQKLSAgICBleHRlcm4gY2hhciAqIGlucHNjYWxlOwot I2VuZGlmCS8qIENLRkxPQVQgKi8KLQotI2lmZGVmIENLX0FVVE9ETAotICAgIHByaW50ZigiIElu cHV0IGF1dG9kb3dubG9hZDogICAgICVzXG4iLCBzaG93b2ZmKGluYXV0b2RsKSk7Ci0jZW5kaWYg LyogQ0tfQVVUT0RMICovCi0gICAgcHJpbnRmKCIgSW5wdXQgY2FuY2VsbGF0aW9uOiAgICAgJXNc biIsIHNob3dvZmYoaW5pbnRyKSk7Ci0gICAgcHJpbnRmKCIgSW5wdXQgY2FzZTogICAgICAgICAg ICAgJXNcbiIsIGlucGNhc1tjbWRsdmxdID8KLSAgICAgICAgICAgIm9ic2VydmUiIDogImlnbm9y ZSIpOwotICAgIHByaW50ZigiIElucHV0IGJ1ZmZlci1sZW5ndGg6ICAgICVkXG4iLCBpbmJ1ZnNp emUpOwotICAgIHByaW50ZigiIElucHV0IGVjaG86ICAgICAgICAgICAgICVzXG4iLCBzaG93b2Zm KGluZWNobykpOwotICAgIHByaW50ZigiIElucHV0IHNpbGVuY2U6ICAgICAgICAgICVkIChzZWNv bmRzKVxuIiwgaW5zaWxlbmNlKTsKLSNpZmRlZiBPUzIKLSAgICBwcmludGYoIiBJbnB1dCB0ZXJt aW5hbDogICAgICAgICAlc1xuIiwgc2hvd29mZihpbnRlcm0pKTsKLSNlbmRpZiAvKiBPUzIgKi8K LSAgICBwcmludGYoIiBJbnB1dCB0aW1lb3V0OiAgICAgICAgICAlc1xuIiwgaW50aW1lW2NtZGx2 bF0gPwotICAgICAgICAgICAicXVpdCIgOiAicHJvY2VlZCIpOwotI2lmZGVmIENLRkxPQVQKLSAg ICBwcmludGYoIiBJbnB1dCBzY2FsZS1mYWN0b3I6ICAgICAlc1xuIiwgaW5wc2NhbGUgPyBpbnBz Y2FsZSA6ICIxLjAiKTsKLSNlbmRpZgkvKiBDS0ZMT0FUICovCi0KLSAgICBpZiAoaW5zdGF0dXMg PCAwKQotICAgICAgcHJpbnRmKCIgTGFzdCBJTlBVVDogICAgICAgICAgICAgLTEgKElOUFVUIGNv bW1hbmQgbm90IHlldCBnaXZlbilcbiIpOwotICAgIGVsc2UKLSAgICAgIHByaW50ZigiIExhc3Qg SU5QVVQ6ICAgICAgICAgICAgICVkICglcylcbiIsIGluc3RhdHVzLGlfdGV4dFtpbnN0YXR1c10p OwotfQotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5kZWYgTk9TUEwKLWludAotc2hvd2FycmF5 KCkgewotI2lmZGVmIENPTU1FTlQKLSAgICBjaGFyICogcCwgKiBxLCAqKiBhcDsKLSAgICBpbnQg aTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgY2hhciAqczsgaW50IHggPSAwLCB5OwotICAg IGludCByYW5nZVsyXTsKLQotICAgIGlmICgoeSA9IGNtZmxkKCJBcnJheSBuYW1lIiwiIiwmcyxO VUxMKSkgPCAwKQotICAgICAgaWYgKHkgIT0gLTMpCi0gICAgICAgIHJldHVybih5KTsKLSAgICBj a3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7Ci0gICAgcyA9IGxpbmU7Ci0gICAgaWYgKCh5ID0g Y21jZm0oKSkgPCAwKQotICAgICAgcmV0dXJuKHkpOwotICAgIGlmICgqcykgewotICAgICAgICBj aGFyICoqIGFwOwotICAgICAgICBpZiAoKHggPSBhcnJheWJvdW5kcyhzLCYocmFuZ2VbMF0pLCYo cmFuZ2VbMV0pKSkgPCAwKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9CYWQgYXJyYXk6ICVzXG4i LHMpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgICAgICBhcCA9IGFf cHRyW3hdOwotICAgICAgICBpZiAoIWFwKSB7Ci0gICAgICAgICAgICBwcmludGYoIkFycmF5IG5v dCBkZWNsYXJlZDogJXNcbiIsIHMpOwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsK LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGludCBpLCBuLCBtYXg7Ci0gICAgICAgICAg ICBtYXggPSAocmFuZ2VbMV0gPiAwKSA/Ci0gICAgICAgICAgICAgIHJhbmdlWzFdIDoKLSAgICAg ICAgICAgICAgICAoKHJhbmdlWzBdID4gMCkgPyByYW5nZVswXSA6IGFfZGltW3hdKTsKLSAgICAg ICAgICAgIGlmIChyYW5nZVswXSA8IDApCi0gICAgICAgICAgICAgIHJhbmdlWzBdID0gMDsKLSAg ICAgICAgICAgIGlmIChtYXggPiBhX2RpbVt4XSkKLSAgICAgICAgICAgICAgbWF4ID0gYV9kaW1b eF07Ci0gICAgICAgICAgICBuID0gMTsKLSAgICAgICAgICAgIHByaW50ZigiXFwmJWNbXTogRGlt ZW5zaW9uID0gJWQiLGFycmF5aXRvYSh4KSxhX2RpbVt4XSk7Ci0gICAgICAgICAgICBpZiAoYV9s aW5rW3hdID4gLTEpCi0gICAgICAgICAgICAgIHByaW50ZigiIChMaW5rIHRvIFxcJiVjW10pIixh cnJheWl0b2EoYV9saW5rW3hdKSk7Ci0gICAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAg ICAgICBmb3IgKGkgPSByYW5nZVswXTsgaSA8PSBtYXg7IGkrKykgewotICAgICAgICAgICAgICAg IGlmIChhcFtpXSkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIiUzZC4gJXNcbiIsaSxh cFtpXSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh4YXNrbW9yZSkgewotICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKGNtZF9jb2xzID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHggPSBzdHJsZW4oYXBbaV0pICsgNTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB5 ID0gKHggJSBjbWRfY29scykgPyAxIDogMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBu ICs9ICh4IC8gY21kX2NvbHMpICsgeTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbisrOwotICAgICAgICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPiAoY21kX3Jvd3MgLSAzKSkgewot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXNrbW9yZSgpKQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDA7Ci0gICAgICAgICAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuKDEpOwotICAgIH0KLQotICAgIC8q IEFsbCBhcnJheXMgLSBqdXN0IHNob3cgbmFtZSBhbmQgZGltZW5zaW9uICovCi0KLSAgICBmb3Ig KHkgPSAwOyB5IDwgKGludCkgJ3onIC0gQVJSQVlCQVNFICsgMTsgeSsrKSB7Ci0gICAgICAgIGlm IChhX3B0clt5XSkgewotICAgICAgICAgICAgaWYgKHggPT0gMCkgcHJpbnRmKCJEZWNsYXJlZCBh cnJheXM6XG4iKTsKLSAgICAgICAgICAgIHggPSAxOwotICAgICAgICAgICAgcHJpbnRmKCIgXFwm JWNbJWRdIiwKLSAgICAgICAgICAgICAgICAgICAoeSA9PSAxKSA/IDY0IDogeSArIEFSUkFZQkFT RSwgYV9kaW1beV0pOwotICAgICAgICAgICAgaWYgKGFfbGlua1t5XSA+IC0xKQotICAgICAgICAg ICAgICBwcmludGYoIiA9PiBcXCYlY1tdIixhcnJheWl0b2EoYV9saW5rW3ldKSk7Ci0gICAgICAg ICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCF4KSBwcmludGYoIiBO byBhcnJheXMgZGVjbGFyZWRcbiIpOwotICAgIH0KLSAgICByZXR1cm4oMSk7Ci19Ci0jZW5kaWYg LyogTk9TUEwgKi8KLQotaW50Ci1kb3Nob3coeCkgaW50IHg7IHsKLSAgICBpbnQgeSwgeiwgaTsg bG9uZyB6ejsKLSAgICBleHRlcm4gaW50IG9wdGxpbmVzOwotICAgIGNoYXIgKnM7Ci0jaWZkZWYg T1MyCi0gICAgZXh0ZXJuIGludCBvczJna3M7Ci0gICAgZXh0ZXJuIGludCB0dF9rYl9tb2RlOwot I2VuZGlmIC8qIE9TMiAqLwotICAgIGV4dGVybiBpbnQgc3J2Y2Rtc2c7Ci0gICAgZXh0ZXJuIGNo YXIgKiBjZG1zZ3N0ciwgKiBja2NkcGF0aDsKLQotI2lmbmRlZiBOT1NFVEtFWQotICAgIGlmICh4 ID09IFNIS0VZKSB7ICAgICAgICAgICAgICAgICAgIC8qIFNIT1cgS0VZICovCi0gICAgICAgIGlu dCBjOwotI2lmZGVmIE9TMgotICAgICAgICBpZiAoKHggPSBjbWtleShzaG9rZXl0YWIsbnNob2tl eSwiSG93IG1hbnkga2V5cyBzaG91bGQgYmUgc2hvd24/IiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICJvbmUiLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIHN3aXRjaCAodHRf a2JfbW9kZSkgewotICAgICAgICAgIGNhc2UgS0JNX0VNOgotICAgICAgICAgICAgcyA9ICJlbWFj cyI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEtCTV9IRToKLSAgICAgICAg ICAgIHMgPSAiaGVicmV3IjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgS0JN X1JVOgotICAgICAgICAgICAgcyA9ICJydXNzaWFuIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgIGNhc2UgS0JNX0VOOgotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzID0g ImRlZmF1bHQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCh6 ID0gY21rZXkoc2hva2V5bXRhYixuc2hva2V5bSwiV2hpY2ggZGVmaW5pdGlvbiBzaG91bGQgYmUg c2hvd24/IiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHMseHhzdHJpbmcpKSA8IDApIHJldHVy bih6KTsKLSAgICAgICAgaWYgKHogPT0gU0hLRVlERUYpCi0gICAgICAgICAgeiA9IC0xOwotI2Vu ZGlmIC8qIE9TMiAqLwotICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsK LSNpZmRlZiBJS1NECi0gICAgICAgIGlmIChpbnNlcnZlcikgewotICAgICAgICAgICAgcHJpbnRm KCJTb3JyeSwgY29tbWFuZCBkaXNhYmxlZC5cclxuIik7Ci0gICAgICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDApOwotICAgICAgICB9Ci0jZW5kaWYgLyogSUtTRCAqLwotCi0jaWZkZWYgTUFDCi0g ICAgICAgIHByaW50ZigiTm90IGltcGxlbWVudGVkXG4iKTsKLSAgICAgICAgcmV0dXJuKDApOwot I2Vsc2UgLyogTm90IE1BQyAqLwotI2lmZGVmIE9TMgotICAgICAgICBpZiAoeCkgewotICAgICAg ICAgICAgY29uX2V2ZW50IGV2dDsKLSAgICAgICAgICAgIGZvciAoYyA9IDA7IGMgPCBLTVNJWkU7 IGMrKykgewotICAgICAgICAgICAgICAgIGV2dCA9ICh6IDwgMCkgPyBtYXBrZXkoYykgOiBtYXB0 ZXJta2V5KGMseik7Ci0gICAgICAgICAgICAgICAgaWYgKGV2dC50eXBlICE9IGVycm9yKSB7Ci0g ICAgICAgICAgICAgICAgICAgIHNob2tleWNvZGUoYyx6KTsKLSAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAg ICAgICBwcmludGYoIiBQcmVzcyBrZXk6ICIpOwotI2lmZGVmIFVOSVgKLSNpZmRlZiBOT1NFVEJV RgotICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7Ci0jZW5kaWYgLyogTk9TRVRCVUYgKi8KLSNl bmRpZiAvKiBVTklYICovCi0gICAgICAgICAgICBjb25iaW4oKGNoYXIpZXNjYXBlKTsgICAgICAg LyogUHV0IHRlcm1pbmFsIGluIGJpbmFyeSBtb2RlICovCi0jaWZkZWYgT1MyCi0gICAgICAgICAg ICBvczJna3MgPSAwOyAgICAgICAgICAgICAgICAgLyogUmF3IHNjYW5jb2RlIHByb2Nlc3Npbmcg Ki8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgIGMgPSBjb25na3MoMCk7ICAgICAgICAg ICAgICAvKiBHZXQgY2hhcmFjdGVyIG9yIHNjYW4gY29kZSAqLwotI2lmZGVmIE9TMgotICAgICAg ICAgICAgb3MyZ2tzID0gMTsgICAgICAgICAgICAgICAgIC8qIENvb2tlZCBzY2FuY29kZSBwcm9j ZXNzaW5nICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICBjb25jYigoY2hhcillc2Nh cGUpOyAgICAgICAgLyogUmVzdG9yZSB0ZXJtaW5hbCB0byBjYnJlYWsgbW9kZSAqLwotICAgICAg ICAgICAgaWYgKGMgPCAwKSB7ICAgICAgICAgICAgICAgIC8qIENoZWNrIGZvciBlcnJvciAqLwot ICAgICAgICAgICAgICAgIHByaW50ZigiP0Vycm9yIHJlYWRpbmcga2V5XG4iKTsKLSAgICAgICAg ICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgICAgICB9Ci0jaWZuZGVmIE9TMgotLyoKLSAgRG8g Tk9UIG1hc2sgd2hlbiBpdCBjYW4gYmUgYSByYXcgc2NhbiBjb2RlLCBwZXJoYXBzID4gMjU1Ci0q LwotICAgICAgICAgICAgYyAmPSBjbWRtc2s7ICAgICAgICAgICAgICAgIC8qIEFwcGx5IGNvbW1h bmQgbWFzayAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwot I2lmZGVmIE9TMgotICAgICAgICAgICAgc2hva2V5Y29kZShjLHopOwotI2Vsc2UgLyogT1MyICov Ci0gICAgICAgICAgICBzaG9rZXljb2RlKGMpOwotI2VuZGlmIC8qIE9TMiAqLwotI2lmZGVmIE9T MgotICAgICAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgIHJldHVybigxKTsKLSNlbmRp ZiAvKiBNQUMgKi8KLSAgICB9Ci0jaWZuZGVmIE5PS1ZFUkJTCi0gICAgaWYgKHggPT0gU0hLVkIp IHsgICAgICAgICAgICAgICAgICAgLyogU0hPVyBLVkVSQlMgKi8KLSAgICAgICAgaWYgKCh5ID0g Y21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0jaWZkZWYgSUtTRAotICAgICAgICBpZiAoaW5zZXJ2 ZXIpIHsKLSAgICAgICAgICAgIHByaW50ZigiU29ycnksIGNvbW1hbmQgZGlzYWJsZWQuXHJcbiIp OwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgfQotI2VuZGlmIC8q IElLU0QgKi8KLSAgICAgICAgcHJpbnRmKCJcblRoZSBmb2xsb3dpbmcgJWQga2V5Ym9hcmQgdmVy YnMgYXJlIGF2YWlsYWJsZTpcblxuIixua3ZlcmJzKTsKLSAgICAgICAga3dkaGVscChrdmVyYnMs bmt2ZXJicywiIiwiXFxLIiwiIiwzLDApOwotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAg IHJldHVybigxKTsKLSAgICB9Ci0jaWZkZWYgT1MyCi0gICAgaWYgKHggPT0gU0hVREspIHsgICAg ICAgICAgICAgICAgICAgLyogU0hPVyBVREtzICovCi0gICAgICAgIGV4dGVybiB2b2lkIHNob3d1 ZGsodm9pZCk7Ci0gICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotI2lm ZGVmIElLU0QKLSAgICAgICAgaWYgKGluc2VydmVyKSB7Ci0gICAgICAgICAgICBwcmludGYoIlNv cnJ5LCBjb21tYW5kIGRpc2FibGVkLlxyXG4iKTsKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNz ID0gMCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAgIHNob3d1ZGsoKTsK LSAgICAgICAgcmV0dXJuKDEpOwotICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBO T0tWRVJCUyAqLwotI2VuZGlmIC8qIE5PU0VUS0VZICovCi0KLSNpZm5kZWYgTk9TUEwKLSAgICBp ZiAoeCA9PSBTSE1BQykgeyAgICAgICAgICAgICAgICAgICAvKiBTSE9XIE1BQ1JPICovCi0gICAg ICAgIHN0cnVjdCBGREIga3csIGZsLCBjbTsKLSAgICAgICAgaW50IGksIGssIG4gPSAwLCBsZWZ0 LCBmbGFnLCBjb25maXJtZWQgPSAwOwotICAgICAgICBjaGFyICogcCwgKnFbNjRdOwotICAgICAg ICBmb3IgKGkgPSAwOyBpIDwgbm1hYzsgaSsrKSB7ICAgIC8qIGNvcHkgdGhlIG1hY3JvIHRhYmxl ICovCi0gICAgICAgICAgICBtYWNrZXlbaV0ua3dkID0gbWFjdGFiW2ldLmt3ZDsgLyogaW50byBh IHJlZ3VsYXIga2V5d29yZCB0YWJsZSAqLwotICAgICAgICAgICAgbWFja2V5W2ldLmt3dmFsID0g aTsgICAgICAgIC8qIHdpdGggdmFsdWUgPSBwb2ludGVyIHRvIG1hY3JvIHRibCAqLwotICAgICAg ICAgICAgbWFja2V5W2ldLmZsZ3MgPSBtYWN0YWJbaV0uZmxnczsKLSAgICAgICAgfQotICAgICAg ICBwID0gbGluZTsKLSAgICAgICAgbGVmdCA9IExJTkJVRlNJWjsKLSAgICAgICAgd2hpbGUgKCFj b25maXJtZWQgJiYgbiA8IDY0KSB7Ci0gICAgICAgICAgICBjbWZkYmkoJmt3LCAgICAgICAgICAg ICAgICAgLyogRmlyc3QgRkRCIC0gbWFjcm8gdGFibGUgKi8KLSAgICAgICAgICAgICAgICAgICBf Q01LRVksICAgICAgICAgICAgICAvKiBmY29kZSAqLwotICAgICAgICAgICAgICAgICAgICJNYWNy byBuYW1lIiwgICAgICAgIC8qIGhscG1zZyAqLwotICAgICAgICAgICAgICAgICAgICIiLCAgICAg ICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgICAgICAgICAiIiwgICAgICAg ICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAgICAgICAgICAgICAgIG5t YWMsICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLwot ICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMg ZGF0YSAyOiA0ID0gY21zd2kgKi8KLSAgICAgICAgICAgICAgICAgICB4eHN0cmluZywgICAgICAg ICAgICAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0gICAgICAgICAgICAgICAgICAgbWFja2V5 LCAgICAgICAgICAgICAgLyogS2V5d29yZCB0YWJsZSAqLwotICAgICAgICAgICAgICAgICAgICZm bCAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KLSAgICAgICAgICAg ICAgICAgICApOwotICAgICAgICAgICAgY21mZGJpKCZmbCwgICAgICAgICAgICAgICAgIC8qIDJu ZCBGREIgLSBzb21ldGhpbmcgbm90IGluIG1hY3RhYiAqLwotICAgICAgICAgICAgICAgICAgIF9D TUZMRCwgICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgICAgICAgICAgIiIsICAg ICAgICAgICAgICAgICAgLyogaGxwbXNnICovCi0gICAgICAgICAgICAgICAgICAgIiIsICAgICAg ICAgICAgICAgICAgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAgICAgICAgICIiLCAgICAgICAg ICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAgICAgICAgICAgICAgMCwg ICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KLSAgICAgICAgICAg ICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLwot ICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nLAotICAgICAgICAgICAgICAgICAgIE5VTEwsCi0g ICAgICAgICAgICAgICAgICAgJmNtCi0gICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAg IGNtZmRiaSgmY20sICAgICAgICAgICAgICAgICAvKiAzcmQgRkRCIC0gQ29uZmlybWF0aW9uICov Ci0gICAgICAgICAgICAgICAgICAgX0NNQ0ZNLCAgICAgICAgICAgICAgLyogZmNvZGUgKi8KLSAg ICAgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAvKiBobHBtc2cgKi8KLSAgICAg ICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAgICAg ICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8K LSAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmlj IGRhdGEgMSAqLwotICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgIC8qIGFk ZHRsIG51bWVyaWMgZGF0YSAyICovCi0gICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAg ICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAgICAgIE5VTEwKLSAgICAgICAgICAgICAg ICAgICApOwotICAgICAgICAgICAgeCA9IGNtZmRiKCZrdyk7ICAgICAgICAgICAgIC8qIFBhcnNl IHNvbWV0aGluZyAqLwotICAgICAgICAgICAgaWYgKHggPCAwKQotICAgICAgICAgICAgICByZXR1 cm4oeCk7Ci0gICAgICAgICAgICBzID0gYXRtYnVmOyAgICAgICAgICAgICAgICAgLyogV2hhdCB0 aGUgdXNlciB0eXBlZCAqLwotICAgICAgICAgICAgc3dpdGNoIChjbXJlc3VsdC5mY29kZSkgewot ICAgICAgICAgICAgICBjYXNlIF9DTUtFWTogICAgICAgICAgICAgIC8qIElmIGl0IHdhcyBhIGtl eXdvcmQgKi8KLSAgICAgICAgICAgICAgICB5ID0gbWxvb2sobWFjdGFiLGF0bWJ1ZixubWFjKTsg LyogZ2V0IGZ1bGwgbmFtZSAqLwotICAgICAgICAgICAgICAgIGlmICh5ID4gLTEpCi0gICAgICAg ICAgICAgICAgICBzID0gbWFjdGFiW3ldLmt3ZDsgICAgLyogKGZhbGwgdGhydSBvbiBwdXJwb3Nl Li4uKSAqLwotICAgICAgICAgICAgICBjYXNlIF9DTUZMRDoKLSAgICAgICAgICAgICAgICBrID0g Y2tzdHJuY3B5KHAscyxsZWZ0KSArIDE7IC8qIENvcHkgcmVzdWx0IHRvIGxpc3QgKi8KLSAgICAg ICAgICAgICAgICBsZWZ0IC09IGs7Ci0gICAgICAgICAgICAgICAgaWYgKGxlZnQgPD0gMCkgewot ICAgICAgICAgICAgICAgICAgICAqcCA9IE5VTDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHFbbisrXSA9IHA7ICAgICAgICAg ICAgIC8qIFBvaW50IHRvIHRoaXMgaXRlbSAqLwotICAgICAgICAgICAgICAgIHAgKz0gazsgICAg ICAgICAgICAgICAgIC8qIE1vdmUgYnVmZmVyIHBvaW50ZXIgcGFzdCBpdCAqLwotICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIF9DTUNGTTogICAgICAgICAgICAgIC8q IEVuZCBvZiBjb21tYW5kICovCi0gICAgICAgICAgICAgICAgY29uZmlybWVkKys7Ci0gICAgICAg ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgIH0KLSAgICAgICAgaWYgKG4gPT0gMCkgewotICAgICAgICAgICAgcHJpbnRmKCJNYWNy b3M6XG4iKTsKLSAgICAgICAgICAgIHNsYyA9IDE7Ci0gICAgICAgICAgICBmb3IgKHkgPSAwOyB5 IDwgbm1hYzsgeSsrKQotICAgICAgICAgICAgICBpZiAoc2hvbWFjKG1hY3RhYlt5XS5rd2QsbWFj dGFiW3ldLm12YWwpIDwgMCkgYnJlYWs7Ci0gICAgICAgICAgICByZXR1cm4oMSk7Ci0gICAgICAg IH0KLSAgICAgICAgc2xjID0gMDsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewot ICAgICAgICAgICAgZmxhZyA9IDA7Ci0gICAgICAgICAgICBzID0gcVtpXTsKLSAgICAgICAgICAg IGlmICghcykgcyA9ICIiOwotICAgICAgICAgICAgaWYgKCEqcykgY29udGludWU7Ci0gICAgICAg ICAgICBpZiAoaXN3aWxkKHMpKSB7ICAgICAgICAgICAgLyogUGF0dGVybiBtYXRjaCAqLwotICAg ICAgICAgICAgICAgIGZvciAoayA9IDAsIHggPSAwOyB4IDwgbm1hYzsgeCsrKSB7Ci0gICAgICAg ICAgICAgICAgICAgIGlmIChja21hdGNoKHMsbWFjdGFiW3hdLmt3ZCwwLDEpKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBzaG9tYWMobWFjdGFiW3hdLmt3ZCxtYWN0YWJbeF0ubXZhbCk7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBrKys7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFrKQotICAgICAgICAgICAgICAgICAg eCA9IC0xOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIGNvbnRpbnVl OwotICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIEV4YWN0IG1hdGNo ICovCi0gICAgICAgICAgICAgICAgeCA9IG14bG9vayhtYWN0YWIscyxubWFjKTsKLSAgICAgICAg ICAgICAgICBmbGFnID0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmbGFnICYm IHggPT0gLTEpCi0gICAgICAgICAgICAgIHggPSBtbG9vayhtYWN0YWIscyxubWFjKTsKLSAgICAg ICAgICAgIHN3aXRjaCAoeCkgewotICAgICAgICAgICAgICBjYXNlIC0zOiAgICAgICAgICAgICAg ICAgIC8qIE5vdGhpbmcgdG8gbG9vayB1cCAqLwotICAgICAgICAgICAgICBjYXNlIC0xOiAgICAg ICAgICAgICAgICAgIC8qIE5vdCBmb3VuZCAqLwotICAgICAgICAgICAgICAgIHByaW50ZigiJXMg LSAobm90IGRlZmluZWQpXG4iLHMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICBjYXNlIC0yOiAgICAgICAgICAgICAgICAgIC8qIEFtYmlndW91cywgbWF0Y2hlcyBtb3Jl IHRoYW4gb25lICovCi0gICAgICAgICAgICAgICAgcHJpbnRmKCIlcyAtIGFtYmlndW91c1xuIixz KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogICAgICAg ICAgICAgICAgICAvKiBNYXRjaGVzIG9uZSBleGFjdGx5ICovCi0gICAgICAgICAgICAgICAgc2hv bWFjKG1hY3RhYlt4XS5rd2QsbWFjdGFiW3hdLm12YWwpOwotICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybigxKTsKLSAgICB9Ci0j ZW5kaWYgLyogTk9TUEwgKi8KLQotLyoKLSAgT3RoZXIgU0hPVyBjb21tYW5kcyBvbmx5IGhhdmUg dHdvIGZpZWxkcy4gIEdldCBjb21tYW5kIGNvbmZpcm1hdGlvbiBoZXJlLAotICB0aGVuIGhhbmRs ZSB3aXRoIGJpZyBzd2l0Y2goKSBzdGF0ZW1lbnQuCi0qLwotI2lmbmRlZiBOT1NQTAotICAgIGlm ICh4ICE9IFNIQlVJICYmIHggIT0gU0hBUlIpCi0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICAgIGlm ICgoeSA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgcmV0dXJuKHkpOwotCi0jaWZkZWYgQ09NTUVO VAotICAgIC8qIFRoaXMgcmVzdHJpY3Rpb24gaXMgdG9vIGdlbmVyYWwuICovCi0jaWZkZWYgSUtT RAotICAgIGlmIChpbnNlcnZlciAmJgotI2lmZGVmIENLX0xPR0lOCi0gICAgICAgIGlzZ3Vlc3QK LSNlbHNlCi0gICAgICAgIDAKLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotICAgICAgICApIHsKLSAg ICAgICAgcHJpbnRmKCJTb3JyeSwgY29tbWFuZCBkaXNhYmxlZC5cclxuIik7Ci0gICAgICAgIHJl dHVybihzdWNjZXNzID0gMCk7Ci0gICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLSNlbmRpZiAvKiBD T01NRU5UICovCi0KLSAgICBzd2l0Y2ggKHgpIHsKLQotI2lmZGVmIEFOWVgyNQotI2lmbmRlZiBJ Qk1YMjUKLSAgICAgIGNhc2UgU0hQQUQ6Ci0gICAgICAgIHNob3BhZCgwKTsKLSAgICAgICAgYnJl YWs7Ci0jZW5kaWYgLyogSUJNWDI1ICovCi0jZW5kaWYgLyogQU5ZWDI1ICovCi0KLSAgICAgIGNh c2UgU0hORVQ6Ci0jaWZkZWYgTk9MT0NBTAotICAgICAgICBwcmludGYoIiBObyBuZXR3b3JrIHN1 cHBvcnQgaW4gdGhpcyB2ZXJzaW9uIG9mIEMtS2VybWl0LlxuIik7Ci0jZWxzZQotI2lmbmRlZiBO RVRDT05OCi0gICAgICAgIHByaW50ZigiIE5vIG5ldHdvcmsgc3VwcG9ydCBpbiB0aGlzIHZlcnNp b24gb2YgQy1LZXJtaXQuXG4iKTsKLSNlbHNlCi0gICAgICAgIHNob25ldCgpOwotI2VuZGlmIC8q IE5FVENPTk4gKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0gICAgICAgIGJyZWFrOwotCi0gICAg ICBjYXNlIFNIUEFSOgotICAgICAgICBzaG9wYXIoKTsKLSAgICAgICAgYnJlYWs7Ci0KLSNpZm5k ZWYgTk9YRkVSCi0gICAgICBjYXNlIFNIQVRUOgotICAgICAgICBzaG9hdHQoKTsKLSAgICAgICAg YnJlYWs7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYgTk9TUEwKLSAgICAgIGNhc2Ug U0hDT1U6Ci0gICAgICAgIHByaW50ZigiICVkXG4iLGNvdW50W2NtZGx2bF0pOwotICAgICAgICBi cmVhazsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVmIE5PU0VSVkVSCi0gICAgICBjYXNl IFNIU0VSOiAgICAgICAgICAgICAgICAgICAgICAgLyogU2hvdyBTZXJ2ZXIgKi8KLSAgICAgICAg aSA9IDA7Ci0jaWZuZGVmIE5PRlJJTExTCi0gICAgICAgIHByaW50ZigiRnVuY3Rpb246ICAgICAg ICAgIFN0YXR1czpcbiIpOwotICAgICAgICBpKys7Ci0gICAgICAgIHByaW50ZigiIEdFVCAgICAg ICAgICAgICAgICAlc1xuIixubVtlbl9nZXRdKTsKLSAgICAgICAgaSsrOwotICAgICAgICBwcmlu dGYoIiBTRU5EICAgICAgICAgICAgICAgJXNcbiIsbm1bZW5fc2VuXSk7Ci0gICAgICAgIGkrKzsK LSAgICAgICAgcHJpbnRmKCIgTUFJTCAgICAgICAgICAgICAgICVzXG4iLG5tW2luc2VydmVyID8g MCA6IGVuX21haV0pOwotICAgICAgICBpKys7Ci0gICAgICAgIHByaW50ZigiIFBSSU5UICAgICAg ICAgICAgICAlc1xuIixubVtpbnNlcnZlciA/IDAgOiBlbl9wcmldKTsKLSAgICAgICAgaSsrOwot I2lmbmRlZiBOT1NQTAotICAgICAgICBwcmludGYoIiBSRU1PVEUgQVNTSUdOICAgICAgJXNcbiIs bm1bZW5fYXNnXSk7Ci0gICAgICAgIGkrKzsKLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgICAgICBw cmludGYoIiBSRU1PVEUgQ0QvQ1dEICAgICAgJXNcbiIsbm1bZW5fY3dkXSk7Ci0gICAgICAgIGkr KzsKLSNpZmRlZiBaQ09QWQotICAgICAgICBwcmludGYoIiBSRU1PVEUgQ09QWSAgICAgICAgJXNc biIsbm1bZW5fY3B5XSk7Ci0gICAgICAgIGkrKzsKLSNlbmRpZiAvKiBaQ09QWSAqLwotICAgICAg ICBwcmludGYoIiBSRU1PVEUgREVMRVRFICAgICAgJXNcbiIsbm1bZW5fZGVsXSk7Ci0gICAgICAg IHByaW50ZigiIFJFTU9URSBESVJFQ1RPUlkgICAlc1xuIixubVtlbl9kaXJdKTsKLSAgICAgICAg cHJpbnRmKCIgUkVNT1RFIEhPU1QgICAgICAgICVzXG4iLG5tW2luc2VydmVyID8gMCA6IGVuX2hv c10pOwotICAgICAgICBpICs9IDM7Ci0jaWZuZGVmIE5PU1BMCi0gICAgICAgIHByaW50ZigiIFJF TU9URSBRVUVSWSAgICAgICAlc1xuIixubVtlbl9xdWVdKTsKLSAgICAgICAgaSsrOwotI2VuZGlm IC8qIE5PU1BMICovCi0gICAgICAgIHByaW50ZigiIFJFTU9URSBNS0RJUiAgICAgICAlc1xuIixu bVtlbl9ta2RdKTsKLSAgICAgICAgcHJpbnRmKCIgUkVNT1RFIFJNRElSICAgICAgICVzXG4iLG5t W2VuX3JtZF0pOwotICAgICAgICBwcmludGYoIiBSRU1PVEUgUkVOQU1FICAgICAgJXNcbiIsbm1b ZW5fcmVuXSk7Ci0gICAgICAgIHByaW50ZigiIFJFTU9URSBTRVQgICAgICAgICAlc1xuIixubVtl bl9zZXRdKTsKLSAgICAgICAgcHJpbnRmKCIgUkVNT1RFIFNQQUNFICAgICAgICVzXG4iLG5tW2Vu X3NwYV0pOwotICAgICAgICBwcmludGYoIiBSRU1PVEUgVFlQRSAgICAgICAgJXNcbiIsbm1bZW5f dHlwXSk7Ci0gICAgICAgIHByaW50ZigiIFJFTU9URSBXSE8gICAgICAgICAlc1xuIixubVtpbnNl cnZlciA/IDAgOiBlbl93aG9dKTsKLSAgICAgICAgcHJpbnRmKCIgQllFICAgICAgICAgICAgICAg ICVzXG4iLG5tW2VuX2J5ZV0pOwotICAgICAgICBwcmludGYoIiBGSU5JU0ggICAgICAgICAgICAg JXNcbiIsbm1bZW5fZmluXSk7Ci0gICAgICAgIHByaW50ZigiIEVYSVQgICAgICAgICAgICAgICAl c1xuIixubVtlbl94aXRdKTsKLSAgICAgICAgcHJpbnRmKCIgRU5BQkxFICAgICAgICAgICAgICVz XG4iLG5tW2VuX2VuYV0pOwotICAgICAgICBpICs9IDExOwotI2VuZGlmIC8qIE5PRlJJTExTICov Ci0gICAgICAgIGlmIChpID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4o MSk7IGVsc2UgaSA9IDA7IH0KLSAgICAgICAgcHJpbnRmKCJTZXJ2ZXIgdGltZW91dDogICAgICAl ZFxuIixzcnZ0aW0pOwotICAgICAgICBpZiAoKytpID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNr bW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgaSA9IDA7IH0KLSAgICAgICAgcHJpbnRmKCJTZXJ2ZXIg aWRsZS10aW1lb3V0OiAlZFxuIixzcnZpZGwpOwotICAgICAgICBpZiAoKytpID4gY21kX3Jvd3Mg LSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgaSA9IDA7IH0KLSAgICAgICAg cHJpbnRmKCJTZXJ2ZXIga2VlcGFsaXZlICAgICAlc1xuIiwgc2hvd29mZihzcnZwaW5nKSk7Ci0g ICAgICAgIGlmICgrK2kgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigx KTsgZWxzZSBpID0gMDsgfQotICAgICAgICBwcmludGYoIlNlcnZlciBjZC1tZXNzYWdlICAgICVz XG4iLCBzaG93b2ZmKHNydmNkbXNnKSk7Ci0gICAgICAgIGlmIChzcnZjZG1zZyAmJiBjZG1zZ3N0 cikKLSAgICAgICAgICBwcmludGYoIlNlcnZlciBjZC1tZXNzYWdlICAgICVzXG4iLCBjZG1zZ3N0 cik7Ci0gICAgICAgIGlmICgrK2kgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJl dHVybigxKTsgZWxzZSBpID0gMDsgfQotICAgICAgICBwcmludGYoIlNlcnZlciBkaXNwbGF5OiAg ICAgICVzXG4iLCBzaG93b2ZmKHNydmRpcykpOwotICAgICAgICBpZiAoKytpID4gY21kX3Jvd3Mg LSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgaSA9IDA7IH0KLSAgICAgICAg cHJpbnRmKCJTZXJ2ZXIgbG9naW46ICAgICAgICAiKTsKLSAgICAgICAgaWYgKCF4X3VzZXIpIHsK LSAgICAgICAgICAgIHByaW50ZigiKG5vbmUpXG4iKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg ICAgICAgIHByaW50ZigiXCIlc1wiLCBcIiVzXCIsIFwiJXNcIlxuIiwKLSAgICAgICAgICAgICAg ICAgICB4X3VzZXIsCi0gICAgICAgICAgICAgICAgICAgeF9wYXNzd2QgPyB4X3Bhc3N3ZCA6ICIi LAotICAgICAgICAgICAgICAgICAgIHhfYWNjdCA/IHhfYWNjdCA6ICIiCi0gICAgICAgICAgICAg ICAgICAgKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKytpID4gY21kX3Jvd3MgLSAzKSB7IGlm ICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgaSA9IDA7IH0KLSAgICAgICAgcHJpbnRmKCJT ZXJ2ZXIgZ2V0LXBhdGg6ICIpOwotICAgICAgICBpZiAobmdldHBhdGggPT0gMCkgewotICAgICAg ICAgICAgcHJpbnRmKCIgICAgKG5vbmUpXG4iKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGZvciAo eCA9IDA7IHggPCBuZ2V0cGF0aDsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGdldHBhdGhb eF0pIHByaW50ZigiICVkLiAlc1xuIiwgeCwgZ2V0cGF0aFt4XSk7Ci0gICAgICAgICAgICAgICAg aWYgKCsraSA+IChjbWRfcm93cyAtIDMpKSB7IC8qIE1vcmUgdGhhbiBhIHNjcmVlbmZ1bC4uLiAq LwotICAgICAgICAgICAgICAgICAgICBpZiAoIWFza21vcmUoKSkKLSAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg ICAgIGkgPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot ICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotCi0gICAgICBjYXNlIFNIU1RB OiAgICAgICAgICAgICAgICAgICAgICAgLyogU3RhdHVzIG9mIGxhc3QgY29tbWFuZCAqLwotICAg ICAgICBwcmludGYoIiAlc1xuIiwgc3VjY2VzcyA/ICJTVUNDRVNTIiA6ICJGQUlMVVJFIik7Ci0g ICAgICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAgICAgLyogRG9uJ3QgY2hhbmdlIGl0 ICovCi0KLSAgICAgIGNhc2UgU0hTVEs6IHsgICAgICAgICAgICAgICAgICAgICAvKiBTdGFjayBm b3IgTUFDIGRlYnVnZ2luZyAqLwotI2lmZGVmIE1BQwotICAgICAgICAgIGxvbmcgc3A7Ci0gICAg ICAgICAgc3AgPSAtMTsKLSAgICAgICAgICBsb2FkQTAgKChjaGFyICopJnNwKTsgICAgICAgICAv KiBzZXQgZGVzdGluYXRpb24gYWRkcmVzcyAqLwotICAgICAgICAgIFNQdG9hQTAoKTsgICAgICAg ICAgICAgICAgICAgIC8qIG1vdmUgU1AgdG8gZGVzdGluYXRpb24gKi8KLSAgICAgICAgICBwcmlu dGYoIlN0YWNrIGF0IDB4JXhcbiIsIHNwKTsKLSAgICAgICAgICBzaG93X3F1ZXVlKCk7ICAgICAg ICAgICAgICAgICAvKiBtb3JlIGRlYnVnZ2luZyAqLwotICAgICAgICAgIGJyZWFrOwotI2Vsc2UK LSAgICAgICAgICBzaG9zdGFjaygpOwotI2VuZGlmIC8qIE1BQyAqLwotICAgICAgICAgIGJyZWFr OwotICAgICAgfQotCi0KLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIE9TMgotICAgICAgY2FzZSBT SFRBQjogICAgICAgICAgICAgICAgICAgICAgIC8qIFNIT1cgVEFCUyAqLwotI2lmZGVmIElLU0QK LSAgICAgICAgaWYgKGluc2VydmVyKSB7Ci0gICAgICAgICAgICBwcmludGYoIlNvcnJ5LCBjb21t YW5kIGRpc2FibGVkLlxyXG4iKTsKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0g ICAgICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAgIHNob3RhYnMoKTsKLSAgICAgICAg YnJlYWs7Ci0jZW5kaWYgLyogT1MyICovCi0KLSAgICAgIGNhc2UgU0hURVI6ICAgICAgICAgICAg ICAgICAgICAgICAvKiBTSE9XIFRFUk1JTkFMICovCi0jaWZkZWYgSUtTRAotICAgICAgICBpZiAo aW5zZXJ2ZXIpIHsKLSAgICAgICAgICAgIHByaW50ZigiU29ycnksIGNvbW1hbmQgZGlzYWJsZWQu XHJcbiIpOwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgfQotI2Vu ZGlmIC8qIElLU0QgKi8KLSAgICAgICAgc2hvdHJtKCk7Ci0gICAgICAgIGJyZWFrOwotCi0jaWZk ZWYgT1MyCi0gICAgICBjYXNlIFNIVlNDUk46ICAgICAgICAgICAgICAgICAgICAgLyogU0hPVyBW aXJ0dWFsIFNjcmVlbiAtIGZvciBkZWJ1ZyAqLwotICAgICAgICBzaG92c2NybigpOwotICAgICAg ICBicmVhazsKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSNpZmRl ZiBPUzJNT1VTRQotICAgICAgY2FzZSBTSE1PVTogICAgICAgICAgICAgICAgICAgICAgIC8qIFNI T1cgTU9VU0UgKi8KLSNpZmRlZiBJS1NECi0gICAgICAgIGlmIChpbnNlcnZlcikgewotICAgICAg ICAgICAgcHJpbnRmKCJTb3JyeSwgY29tbWFuZCBkaXNhYmxlZC5cclxuIik7Ci0gICAgICAgICAg ICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAgICB9Ci0jZW5kaWYgLyogSUtTRCAqLwotICAg ICAgICBzaG9tb3UoKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogT1MyTU9VU0UgKi8KLQot I2lmbmRlZiBOT0ZSSUxMUwotICAgICAgY2FzZSBTSFZFUjoKLSAgICAgICAgc2hvdmVyKCk7Ci0g ICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIE5PRlJJTExTICovCi0KLSNpZm5kZWYgTk9TUEwKLSAg ICAgIGNhc2UgU0hCVUk6ICAgICAgICAgICAgICAgICAgICAgICAvKiBCdWlsdC1pbiB2YXJpYWJs ZXMgKi8KLQlsaW5lWzBdID0gTlVMOwotICAgICAgICBpZiAoKHkgPSBjbXR4dCgiVmFyaWFibGUg bmFtZSBvciBwYXR0ZXJuIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4o eSk7Ci0gICAgICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKLSAgICAgICAgLyogaWYg KGxpbmVbMF0pIGNrc3RybmNhdChsaW5lLCIqIixMSU5CVUZTSVopOyAqLwotCi0gICAgICBjYXNl IFNIRlVOOiAgICAgICAgICAgICAgICAgICAgICAgLyogb3IgYnVpbHQtaW4gZnVuY3Rpb25zICov Ci0jaWZkZWYgQ0tfVFRHV1NJWgotI2lmZGVmIE9TMgotICAgICAgICBpZiAodHRfY29sc1tWVEVS TV0gPCAwIHx8IHR0X3Jvd3NbVlRFUk1dIDwgMCkKLSAgICAgICAgICB0dGd3c2l6KCk7Ci0jZWxz ZSAvKiBPUzIgKi8KLSAgICAgICAgaWYgKHR0Z3dzaXooKSA+IDApIHsgICAgICAgICAgICAvKiBH ZXQgY3VycmVudCBzY3JlZW4gc2l6ZSAqLwotICAgICAgICAgICAgaWYgKHR0X3Jvd3MgPiAwICYm IHR0X2NvbHMgPiAwKSB7Ci0gICAgICAgICAgICAgICAgY21kX3Jvd3MgPSB0dF9yb3dzOwotICAg ICAgICAgICAgICAgIGNtZF9jb2xzID0gdHRfY29sczsKLSAgICAgICAgICAgIH0KLSAgICAgICAg fQotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KLQotICAgICAgICBp ZiAoeCA9PSBTSEZVTikgeyAgICAgICAgICAgICAgIC8qIEZ1bmN0aW9ucyAqLwotICAgICAgICAg ICAgcHJpbnRmKCJcblRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGU6XG5cbiIp OwotICAgICAgICAgICAga3dkaGVscChmbmN0YWIsbmZ1bmNzLCIiLCJcXEYiLCIoKSIsMywwKTsK LSAgICAgICAgICAgIHByaW50ZigiXG4iKTsKLSNpZm5kZWYgTk9IRUxQCi0gICAgICAgICAgICBw cmludGYoCi0iSEVMUCBGVU5DVElPTiA8bmFtZT4gZ2l2ZXMgdGhlIGNhbGxpbmcgY29udmVudGlv bnMgb2YgdGhlIGdpdmVuIGZ1bmN0aW9uLlxuXG4iCi0gICAgICAgICAgICAgICAgICAgKTsKLSNl bmRpZiAvKiBOT0hFTFAgKi8KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgeyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFZhcmlhYmxlcyAqLwotCSAgICBpbnQgaiwgZmxhZyA9 IDAsIGhhdmVhcmcgPSAwOwotCSAgICBzdHJ1Y3Qgc3RyaW5nYXJyYXkgKiBxID0gTlVMTDsKLQkg ICAgY2hhciAqKiBwcDsKLQkgICAgaWYgKGxpbmVbMF0pIHsJCS8qIEhhdmUgc29tZXRoaW5nIHRv IHNlYXJjaCBmb3IgKi8KLQkJaGF2ZWFyZyA9IDE7CQkvKiBNYXliZSBhIGxpc3Qgb2YgdGhpbmdz ICovCi0JCXEgPSBja3NwbGl0KDEsMCxsaW5lLE5VTEwsIl8tXiQqP1tde30iLDAsMCwwKTsKLQkJ aWYgKCFxKSBicmVhazsKLQkJcHAgPSBxLT5hX2hlYWQ7Ci0JICAgIH0KLQkgICAgaSA9IDA7Ci0J ICAgIGZvciAoeSA9IDA7IHkgPCBudmFyczsgeSsrKSB7Ci0JCWlmICgodmFydGFiW3ldLmZsZ3Mg JiBDTV9JTlYpKQotCQkgIGNvbnRpbnVlOwotCQlpZiAoaGF2ZWFyZykgewkJLyogSWYgSSBoYXZl IHNvbWV0aGluZyB0byBtYXRjaCAqLwotCQkgICAgY2hhciAqIHMyOwotCQkgICAgZm9yIChmbGFn ID0gMCwgaiA9IDE7IGogPD0gcS0+YV9zaXplICYmICFmbGFnOyBqKyspIHsKLQkJCXMyID0gcHBb al0gPyBwcFtqXSA6ICIiOwotI2lmZGVmIENPTU1FTlQKLS8qIFRoaXMgaXMgbm90IG5lZWRlZCBi ZWNhdXNlIGl0J3Mgd2hhdCB0aGUgNCBhcmcgZG9lcyBpbiBja21hdGNoKCkgKi8KLQkJCWxlbiA9 IHN0cmxlbihzMik7Ci0JCQlpZiAobGVuID4gMCkgewotCQkJICAgIGlmIChzMltsZW4tMV0gIT0g JyQnKSB7LyogVG8gYWxsb3cgYW5jaG9ycyAqLwotCQkJCWNrbWFrbXNnKGxpbmUsTElOQlVGU0la LHBwW2pdLCIqIixOVUxMLE5VTEwpOwotCQkJCXMyID0gbGluZTsKLQkJCSAgICB9Ci0JCQl9Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotCQkJaWYgKGNrbWF0Y2goczIsdmFydGFiW3ldLmt3ZCwwLDQp ID4gMCkgewotCQkJICAgIGZsYWcgPSAxOwkvKiBNYXRjaGVzICovCi0JCQkgICAgYnJlYWs7Ci0J CQl9Ci0JCSAgICB9Ci0JCSAgICBpZiAoIWZsYWcpCQkvKiBEb2Vzbid0IG1hdGNoICovCi0JCSAg ICAgIGNvbnRpbnVlOwotCQl9Ci0JCXMgPSBudmxvb2sodmFydGFiW3ldLmt3ZCk7Ci0JCXByaW50 ZigiIFxcdiglcykgPSAiLHZhcnRhYlt5XS5rd2QpOwotCQlpZiAodmFydGFiW3ldLmt3dmFsID09 IFZOX05FV0wpIHsgLyogXHYobmV3bGluZSkgKi8KLQkJICAgIHdoaWxlICgqcykJCS8qIFNob3cg Y29udHJvbCBjaGFycyBzeW1ib2xpY2FsbHkgKi8KLQkJICAgICAgcHJpbnRmKCJcXHslZH0iLCpz KyspOwotCQkgICAgcHJpbnRmKCJcbiIpOwotCQl9IGVsc2UgaWYgKHZhcnRhYlt5XS5rd3ZhbCA9 PSBWTl9JQlVGICB8fCAvKiBcdihpbnB1dCkgKi8KLQkJCSAgIHZhcnRhYlt5XS5rd3ZhbCA9PSBW Tl9RVUUgICB8fCAvKiBcdihxdWVyeSkgKi8KLSNpZmRlZiBPUzIKLQkJCSAgIHZhcnRhYlt5XS5r d3ZhbCA9PSBWTl9TRUxDVCB8fCAvKiBcdihzZWxlY3QpICovCi0jZW5kaWYgLyogT1MyICovCi0J CQkgICAodmFydGFiW3ldLmt3dmFsID49IFZOX01fQUFBICYmIC8qIG1vZGVtIG9uZXMgKi8KLQkJ CSAgICB2YXJ0YWJbeV0ua3d2YWwgPD0gVk5fTV9aWlopCi0JCQkgICApIHsKLQkJICAgIGludCBy ID0gMTI7CQkvKiBUaGlzIG9uZSBjYW4gd3JhcCBhcm91bmQgKi8KLQkJICAgIGNoYXIgYnVmWzEw XTsKLQkJICAgIHdoaWxlICgqcykgewotCQkJaWYgKGlzcHJpbnQoKnMpKSB7Ci0JCQkgICAgYnVm WzBdID0gKnM7Ci0JCQkgICAgYnVmWzFdID0gTlVMOwotCQkJICAgIHIrKzsKLQkJCX0gZWxzZSB7 Ci0JCQkgICAgc3ByaW50ZihidWYsIlxceyVkfSIsKnMpOyAvKiBTQUZFICovCi0JCQkgICAgciAr PSAoaW50KSBzdHJsZW4oYnVmKTsKLQkJCX0KLQkJCWlmIChyID49IGNtZF9jb2xzIC0gMSkgewot CQkJICAgIHByaW50ZigiXG4iKTsKLQkJCSAgICByID0gMDsKLQkJCSAgICBpKys7Ci0JCQl9Ci0J CQlwcmludGYoIiVzIixidWYpOwotCQkJcysrOwotCQkgICAgfQotCQkgICAgcHJpbnRmKCJcbiIp OwotCQl9IGVsc2UKLQkJICBwcmludGYoIiVzXG4iLHMpOwotCQlpZiAoKytpID4gKGNtZF9yb3dz IC0gMykpIHsgLyogTW9yZSB0aGFuIGEgc2NyZWVuZnVsLi4uICovCi0JCSAgICBpZiAoKHkgPj0g bnZhcnMgLSAxKSB8fCAhYXNrbW9yZSgpKQotCQkgICAgICBicmVhazsKLQkJICAgIGVsc2UKLQkJ ICAgICAgaSA9IDA7Ci0JCX0KLQkgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0g ICAgICBjYXNlIFNIVkFSOiAgICAgICAgICAgICAgICAgICAgICAgLyogR2xvYmFsIHZhcmlhYmxl cyAqLwotICAgICAgICB4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFZhcmlhYmxl IGNvdW50ICovCi0gICAgICAgIHNsYyA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU2Ny ZWVuIGxpbmUgY291bnQgZm9yICJtb3JlPyIgKi8KLSAgICAgICAgZm9yICh5ID0gMzM7IHkgPCBH VkFSUzsgeSsrKQotICAgICAgICAgIGlmIChnX3Zhclt5XSkgewotICAgICAgICAgICAgICBpZiAo eCsrID09IDApIHByaW50ZigiR2xvYmFsIHZhcmlhYmxlczpcbiIpOwotICAgICAgICAgICAgICBz cHJpbnRmKGxpbmUsIiBcXCUlJWMiLHkpOyAvKiBTQUZFICovCi0gICAgICAgICAgICAgIGlmIChz aG9tYWMobGluZSxnX3Zhclt5XSkgPCAwKSBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIGlm ICgheCkgcHJpbnRmKCIgTm8gdmFyaWFibGVzIGRlZmluZWRcbiIpOwotICAgICAgICBicmVhazsK LQotICAgICAgY2FzZSBTSEFSRzogeyAgICAgICAgICAgICAgICAgICAgIC8qIEFyZ3MgKi8KLSAg ICAgICAgICBjaGFyICogczEsICogczI7Ci0gICAgICAgICAgaWYgKG1hY2x2bCA+IC0xKSB7Ci0g ICAgICAgICAgICAgIHByaW50ZigiTWFjcm8gYXJndW1lbnRzIGF0IGxldmVsICVkIChcXHYoYXJn YykgPSAlZCk6XG4iLAotICAgICAgICAgICAgICAgICAgICAgbWFjbHZsLAotICAgICAgICAgICAg ICAgICAgICAgbWFjYXJnY1ttYWNsdmxdCi0gICAgICAgICAgICAgICAgICAgICApOwotICAgICAg ICAgICAgICBmb3IgKHkgPSAwOyB5IDwgbWFjYXJnY1ttYWNsdmxdOyB5KyspIHsKLSAgICAgICAg ICAgICAgICAgIHMxID0gbV9hcmdbbWFjbHZsXVt5XTsKLSAgICAgICAgICAgICAgICAgIGlmICgh czEpIHMxID0gIihOVUxMKSI7Ci0gICAgICAgICAgICAgICAgICBzMiA9IG1feGFyZ1ttYWNsdmxd W3ldOwotICAgICAgICAgICAgICAgICAgaWYgKCFzMikgczIgPSAiKE5VTEwpIjsKLSAgICAgICAg ICAgICAgICAgIGlmICh5IDwgMTApCi0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiIFxcJSUl ZCA9ICVzXG4iLHksczEpOwotICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg ICAgICBwcmludGYoIiBcXCZfWyVkXSA9ICVzXG4iLHksczIpOwotICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgcHJpbnRmKCJUb3AtbGV2ZWwgYXJndW1l bnRzIChcXHYoYXJnYykgPSAlZCk6XG4iLCB0b3BhcmdjKTsKLSAgICAgICAgICAgICAgZm9yICh5 ID0gMDsgeSA8IHRvcGFyZ2M7IHkrKykgewotICAgICAgICAgICAgICAgICAgczEgPSBnX3Zhclt5 ICsgJzAnXTsKLSAgICAgICAgICAgICAgICAgIGlmICghczEpIHMxID0gIihOVUxMKSI7Ci0gICAg ICAgICAgICAgICAgICBzMiA9IHRvcGFyZ1t5XTsKLSAgICAgICAgICAgICAgICAgIGlmICghczIp IHMyID0gIihOVUxMKSI7Ci0gICAgICAgICAgICAgICAgICBpZiAoeSA8IDEwICYmIGdfdmFyW3ld KQotICAgICAgICAgICAgICAgICAgICBwcmludGYoIiBcXCUlJWQgPSAlc1xuIix5LHMxKTsKLSAg ICAgICAgICAgICAgICAgIGlmICh0b3BhcmdbeV0pCi0gICAgICAgICAgICAgICAgICAgIHByaW50 ZigiIFxcJl9bJWRdID0gJXNcbiIseSxzMik7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICB9 Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgU0hBUlI6ICAgICAgICAg ICAgICAgICAgICAgICAvKiBBcnJheXMgKi8KLSAgICAgICAgcmV0dXJuKHNob3dhcnJheSgpKTsK LSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVmIE5PWEZFUgotICAgICAgY2FzZSBTSFBSTzog ICAgICAgICAgICAgICAgICAgICAgIC8qIFByb3RvY29sIHBhcmFtZXRlcnMgKi8KLSAgICAgICAg c2hvcGFycCgpOwotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlm IC8qIE5PWEZFUiAqLwotCi0jaWZuZGVmIE5PTE9DQUwKLSAgICAgIGNhc2UgU0hDT006ICAgICAg ICAgICAgICAgICAgICAgICAvKiBDb21tdW5pY2F0aW9uIHBhcmFtZXRlcnMgKi8KLSAgICAgICAg cHJpbnRmKCJcbiIpOwotICAgICAgICBzaG9wYXJjKCk7Ci0jaWZkZWYgT1MyCi0gICAgICAgIHsK LSAgICAgICAgICAgIGludCBpOwotICAgICAgICAgICAgY2hhciAqcyA9ICIodW5rbm93bikiOwot ICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG5wcnR5OyBpKyspCi0gICAgICAgICAgICAgIGlm IChwcnR5dGFiW2ldLmt3dmFsID09IHByaW9yaXR5KSB7Ci0gICAgICAgICAgICAgICAgICBzID0g cHJ0eXRhYltpXS5rd2Q7Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg fQotICAgICAgICAgICAgcHJpbnRmKCIgUHJpb3JpdHk6ICVzXG4iLCBzICk7Ci0gICAgICAgIH0K LSNlbmRpZiAvKiBPUzIgKi8KLQotICAgICAgICBwcmludGYoIlxuIik7Ci0jaWZkZWYgTkVUQ09O TgotICAgICAgICBpZiAoIW5ldHdvcmsKLSNpZmRlZiBJS1NECi0gICAgICAgICAgICAgJiYgIWlu c2VydmVyCi0jZW5kaWYgLyogSUtTRCAqLwotICAgICAgICAgICAgICkgewotI2VuZGlmIC8qIE5F VENPTk4gKi8KLSAgICAgICAgICAgIHNob21kbSgpOwotICAgICAgICAgICAgcHJpbnRmKCJcbiIp OwotI2lmZGVmIE5FVENPTk4KLSAgICAgICAgfQotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQotI2lm bmRlZiBOT0RJQUwKLSNpZmRlZiBJS1NECi0gICAgICAgIGlmICggIWluc2VydmVyICkKLSNlbmRp ZiAvKiBJS1NEICovCi0gICAgICAgIHsKLSAgICAgICAgICAgIHByaW50ZigiVHlwZSBTSE9XIERJ QUwgdG8gc2VlIERJQUwtcmVsYXRlZCBpdGVtcy5cbiIpOwotICAgICAgICAgICAgcHJpbnRmKCJU eXBlIFNIT1cgTU9ERU0gdG8gc2VlIG1vZGVtLXJlbGF0ZWQgaXRlbXMuXG4iKTsKLSNpZmRlZiBD S19UQVBJCi0gICAgICAgICAgICBwcmludGYoIlR5cGUgU0hPVyBUQVBJIHRvIHNlZSBUQVBJLXJl bGF0ZWQgaXRlbXMuXG4iKTsKLSNlbmRpZiAvKiBDS19UQVBJICovCi0gICAgICAgICAgICBwcmlu dGYoIlxuIik7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT0RJQUwgKi8KLSAgICAgICAgYnJlYWs7 Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0gICAgICBjYXNlIFNIRklMOiAgICAgICAgICAgICAg ICAgICAgICAgLyogRmlsZSBwYXJhbWV0ZXJzICovCi0gICAgICAgIHNob2ZpbCgpOwotICAgICAg ICAvKiBwcmludGYoIlxuIik7ICovICAgICAgICAgICAgIC8qIChvdXQgbycgc3BhY2UpICovCi0g ICAgICAgIGJyZWFrOwotCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICAgIGNhc2UgU0hMTkc6ICAgICAg ICAgICAgICAgICAgICAgICAvKiBMYW5ndWFnZXMgKi8KLSAgICAgICAgc2hvcGFybCgpOwotICAg ICAgICBicmVhazsKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSNpZm5kZWYgTk9TUEwKLSAgICAg IGNhc2UgU0hTQ1I6ICAgICAgICAgICAgICAgICAgICAgICAvKiBTY3JpcHRzICovCi0gICAgICAg IHByaW50ZigiIENvbW1hbmQgcXVvdGluZzogICAgICAgICVzXG4iLCBzaG93b2ZmKGNtZGdxdW8o KSkpOwotICAgICAgICBwcmludGYoIiBUYWtlICBlY2hvOiAgICAgICAgICAgICAlc1xuIiwgc2hv d29mZih0ZWNobykpOwotICAgICAgICBwcmludGYoIiBUYWtlICBlcnJvcjogICAgICAgICAgICAl c1xuIiwgc2hvd29mZih0YWtlcnJbY21kbHZsXSkpOwotICAgICAgICBwcmludGYoIiBNYWNybyBl Y2hvOiAgICAgICAgICAgICAlc1xuIiwgc2hvd29mZihtZWNobykpOwotICAgICAgICBwcmludGYo IiBNYWNybyBlcnJvcjogICAgICAgICAgICAlc1xuIiwgc2hvd29mZihtZXJyb3JbY21kbHZsXSkp OwotICAgICAgICBwcmludGYoIiBRdWlldDogICAgICAgICAgICAgICAgICAlc1xuIiwgc2hvd29m ZihxdWlldCkpOwotICAgICAgICBwcmludGYoIiBWYXJpYWJsZSBldmFsdWF0aW9uOiAgICAlcyBb XFwlJXggYW5kIFxcJnhbXSB2YXJpYWJsZXNdXG4iLAotCSAgICAgICB2YXJldmFsID8gInJlY3Vy c2l2ZSIgOiAic2ltcGxlIik7Ci0gICAgICAgIHByaW50ZigiIEZ1bmN0aW9uIGRpYWdub3N0aWNz OiAgICVzXG4iLCBzaG93b2ZmKGZuZGlhZ3MpKTsKLSAgICAgICAgcHJpbnRmKCIgRnVuY3Rpb24g ZXJyb3I6ICAgICAgICAgJXNcbiIsIHNob3dvZmYoZm5lcnJvcikpOwotI2lmZGVmIENLTEVBUk4K LSAgICAgICAgewotICAgICAgICAgICAgZXh0ZXJuIGNoYXIgKiBsZWFybmZpbGU7Ci0gICAgICAg ICAgICBleHRlcm4gaW50IGxlYXJuaW5nOwotICAgICAgICAgICAgaWYgKGxlYXJuZmlsZSkgewot ICAgICAgICAgICAgICAgIHByaW50ZigiIExFQVJOIGZpbGU6ICAgICAgICAgICAgICVzICglcylc biIsCi0gICAgICAgICAgICAgICAgICAgICAgIGxlYXJuZmlsZSwKLSAgICAgICAgICAgICAgICAg ICAgICAgbGVhcm5pbmcgPyAiT04iIDogIk9GRiIKLSAgICAgICAgICAgICAgICAgICAgICAgKTsK LSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICBwcmludGYoIiBMRUFSTiBmaWxlOiAg ICAgICAgICAgICAobm9uZSlcbiIpOwotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tMRUFSTiAqLwot ICAgICAgICBzaG9pbnB1dCgpOwotICAgICAgICBzaG9vdXRwdXQoKTsKLSNpZm5kZWYgTk9TQ1JJ UFQKLSAgICAgICAgcHJpbnRmKCIgU2NyaXB0IGVjaG86ICAgICAgICAgICAgJXNcbiIsIHNob3dv ZmYoc2VjaG8pKTsKLSNlbmRpZiAvKiBOT1NDUklQVCAqLwotICAgICAgICBwcmludGYoIiBDb21t YW5kIGJ1ZmZlciBsZW5ndGg6ICAlZFxuIiwgQ01EQkwpOwotICAgICAgICBwcmludGYoIiBBdG9t IGJ1ZmZlciBsZW5ndGg6ICAgICAlZFxuIiwgQVRNQkwpOwotICAgICAgICBicmVhazsKLSNlbmRp ZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVmIE5PWE1JVAotICAgICAgY2FzZSBTSFhNSToKLSAgICAg ICAgcHJpbnRmKCJcbiIpOwotICAgICAgICBwcmludGYoIiBGaWxlIHR5cGU6ICAgICAgICAgICAg ICAgICAgICAgICAlc1xuIiwKLSAgICAgICAgICAgICAgIGJpbmFyeSA/ICJiaW5hcnkiIDogInRl eHQiKTsKLSNpZm5kZWYgTk9DU0VUUwotICAgICAgICBwcmludGYoIiBGaWxlIGNoYXJhY3Rlci1z ZXQ6ICAgICAgICAgICAgICAlc1xuIiwKLSAgICAgICAgICAgICAgIGZjc2luZm9bZmNoYXJzZXRd LmtleXdvcmQpOwotI2lmZGVmIE9TMgotICAgICAgICBpZiAoIGlzdW5pY29kZSgpICkgewotICAg ICAgICBwcmludGYoIiBUZXJtaW5hbCBDaGFyYWN0ZXIgKHJlbW90ZSk6ICAgICAlc1xuIiwKLSAg ICAgICAgICAgICAgdHRfdXRmOCA/ICJ1dGYtOCIgOiB0Y3NyID09IFRYX1RSQU5TUCA/ICJ0cmFu c3BhcmVudCIgOgotICAgICAgICAgICAgICB0Y3NyID09IFRYX1VOREVGID8gInVuZGVmaW5lZCIg OiB0eHJpbmZvW3Rjc3JdLT5rZXl3ZCk7Ci0gICAgICAgIHByaW50ZigiIFRlcm1pbmFsIENoYXJh Y3RlciAobG9jYWwpOiAgICAgICVzXG4iLAotICAgICAgICAgICAgICB0Y3NsID09IFRYX1RSQU5T UCA/ICJ0cmFuc3BhcmVudCIgOgotICAgICAgICAgICAgICB0Y3NsID09IFRYX1VOREVGID8gInVu ZGVmaW5lZCIgOiB0eHJpbmZvW3Rjc2xdLT5rZXl3ZCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg ICAgIHByaW50ZigiIFRlcm1pbmFsIENoYXJhY3RlciAocmVtb3RlKTogICAgICVzXG4iLAotICAg ICAgICAgICAgICB0dF91dGY4ID8gInV0Zi04IiA6IHRjc3IgPT0gVFhfVFJBTlNQID8gInRyYW5z cGFyZW50IiA6Ci0gICAgICAgICAgICAgIHRjc3IgPT0gVFhfVU5ERUYgPyAidW5kZWZpbmVkIiA6 IHR4cmluZm9bdGNzcl0tPmtleXdkKTsKLSAgICAgICAgcHJpbnRmKCIgVGVybWluYWwgQ2hhcmFj dGVyIChsb2NhbCk6ICAgICAgJXNcbiIsCi0gICAgICAgICAgICAgIHRjc2wgPT0gVFhfVFJBTlNQ ID8gInRyYW5zcGFyZW50IiA6Ci0gICAgICAgICAgICAgIHRjc2wgPT0gVFhfVU5ERUYgPyAidW5k ZWZpbmVkIiA6IHR4cmluZm9bdGNzbF0tPmtleXdkKTsKLSAgICAgICAgfQotI2Vsc2UgLyogT1My ICovCi0gICAgICAgIHByaW50ZigiIFRlcm1pbmFsIGNoYXJhY3Rlci1zZXQgKHJlbW90ZSk6ICVz XG4iLAotICAgICAgICAgICAgICAgZmNzaW5mb1t0Y3NyXS5rZXl3b3JkKTsKLSAgICAgICAgcHJp bnRmKCIgVGVybWluYWwgY2hhcmFjdGVyLXNldCAobG9jYWwpOiAgJXNcbiIsCi0gICAgICAgICAg ICAgICBmY3NpbmZvW3Rjc2xdLmtleXdvcmQpOwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8q IE5PQ1NFVFMgKi8KLSAgICAgICAgcHJpbnRmKCIgVGVybWluYWwgYnl0ZXNpemU6ICAgICAgICAg ICAgICAgJWRcbiIsCi0gICAgICAgICAgICAgICAoY21hc2sgPT0gMHhmZikgPyA4IDogNyk7Ci0g ICAgICAgIHByaW50ZigiIFRlcm1pbmFsIGVjaG86ICAgICAgICAgICAgICAgICAgICVzXG4iLAot ICAgICAgICAgICAgICAgZHVwbGV4ID8gImxvY2FsIiA6ICJyZW1vdGUiKTsKLSAgICAgICAgcHJp bnRmKCIgVHJhbnNtaXQgRU9GOiAgICAgICAgICAgICAgICAgICAgIik7Ci0gICAgICAgIGlmICgq eG1pdGJ1ZiA9PSBOVUwpIHsKLSAgICAgICAgICAgIHByaW50ZigiKG5vbmUpXG4iKTsKLSAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNoYXIgKnA7Ci0gICAgICAgICAgICBwID0geG1pdGJ1 ZjsKLSAgICAgICAgICAgIHdoaWxlICgqcCkgewotICAgICAgICAgICAgICAgIGlmICgqcCA8IFNQ KQotICAgICAgICAgICAgICAgICAgcHJpbnRmKCJeJWMiLGN0bCgqcCkpOwotICAgICAgICAgICAg ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHByaW50ZigiJWMiLCpwKTsKLSAgICAgICAgICAg ICAgICBwKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAg ICAgIH0KLSAgICAgICAgaWYgKHhtaXRmKQotICAgICAgICAgIHByaW50ZigiIFRyYW5zbWl0IEZp bGw6ICAgICAgICAgICAgICAgICAgICVkXG4iLCB4bWl0Zik7Ci0gICAgICAgIGVsc2UKLSAgICAg ICAgICBwcmludGYoIiBUcmFuc21pdCBGaWxsOiAgICAgICAgICAgICAgICAgICAobm9uZSlcbiIp OwotICAgICAgICBwcmludGYoIiBUcmFuc21pdCBMaW5lZmVlZDogICAgICAgICAgICAgICAlc1xu IixzaG93b2ZmKHhtaXRsKSk7Ci0gICAgICAgIGlmICh4bWl0cCkKLSAgICAgICAgICBwcmludGYo IiBUcmFuc21pdCBQcm9tcHQ6ICAgICAgICAgICAgICAgICAlZCAoJXMpXG4iLAotICAgICAgICAg ICAgICAgICB4bWl0cCwKLSAgICAgICAgICAgICAgICAgY2hhcnRvc3RyKHhtaXRwKQotICAgICAg ICAgICAgICAgICApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcHJpbnRmKCIgVHJhbnNtaXQg UHJvbXB0OiAgICAgICAgICAgICAgICAgKG5vbmUpXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgVHJh bnNtaXQgRWNobzogICAgICAgICAgICAgICAgICAgJXNcbiIsIHNob3dvZmYoeG1pdHgpKTsKLSAg ICAgICAgcHJpbnRmKCIgVHJhbnNtaXQgTG9ja2luZy1TaGlmdDogICAgICAgICAgJXNcbiIsIHNo b3dvZmYoeG1pdHMpKTsKLSAgICAgICAgcHJpbnRmKCIgVHJhbnNtaXQgUGF1c2U6ICAgICAgICAg ICAgICAgICAgJWQgKG1pbGxpc2Vjb25kJXMpXG4iLAotICAgICAgICAgICAgICAgeG1pdHcsCi0g ICAgICAgICAgICAgICAoeG1pdHcgPT0gMSkgPyAiIiA6ICJzIgotICAgICAgICAgICAgICAgKTsK LSAgICAgICAgcHJpbnRmKCIgVHJhbnNtaXQgVGltZW91dDogICAgICAgICAgICAgICAgJWQgKHNl Y29uZCVzKVxuIiwKLSAgICAgICAgICAgICAgIHhtaXR0LAotICAgICAgICAgICAgICAgKHhtaXR0 ID09IDEpID8gIiIgOiAicyIKLSAgICAgICAgICAgICAgICk7Ci0gICAgICAgIHByaW50ZigiXG4i KTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogTk9YTUlUICovCi0KLSNpZm5kZWYgTk9ESUFM Ci0gICAgICBjYXNlIFNITU9EOiAgICAgICAgICAgICAgICAgICAgICAgLyogU0hPVyBNT0RFTSAq LwotI2lmZGVmIElLU0QKLSAgICAgICAgaWYgKGluc2VydmVyKSB7Ci0gICAgICAgICAgICBwcmlu dGYoIlNvcnJ5LCBjb21tYW5kIGRpc2FibGVkLlxyXG4iKTsKLSAgICAgICAgICAgIHJldHVybihz dWNjZXNzID0gMCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAgIHNob21v ZGVtKCk7ICAgICAgICAgICAgICAgICAgICAgLyogU2hvdyBTRVQgTU9ERU0gaXRlbXMgKi8KLSAg ICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogTk9ESUFMICovCi0KLSNpZm5kZWYgTUFDCi0gICAgICBj YXNlIFNIREZMVDoKLSAgICAgICAgcHJpbnRmKCIlc1xuIix6Z3RkaXIoKSk7Ci0gICAgICAgIGJy ZWFrOwotI2VuZGlmIC8qIE1BQyAqLwotCi0jaWZuZGVmIE5PTE9DQUwKLSAgICAgIGNhc2UgU0hF U0M6Ci0jaWZkZWYgSUtTRAotICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsKLSAgICAgICAgICAgIHBy aW50ZigiU29ycnksIGNvbW1hbmQgZGlzYWJsZWQuXHJcbiIpOwotICAgICAgICAgICAgcmV0dXJu KHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgICAgcmV0 dXJuKHNob2VzYyhlc2NhcGUpKTsKLQotI2lmbmRlZiBOT0RJQUwKLSAgICAgIGNhc2UgU0hESUE6 ICAgICAgICAgICAgICAgICAgICAgICAvKiBTSE9XIERJQUwgKi8KLSNpZmRlZiBJS1NECi0gICAg ICAgIGlmIChpbnNlcnZlcikgewotICAgICAgICAgICAgcHJpbnRmKCJTb3JyeSwgY29tbWFuZCBk aXNhYmxlZC5cclxuIik7Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAg ICB9Ci0jZW5kaWYgLyogSUtTRCAqLwotICAgICAgICBzaG1kbWxpbigpOwotICAgICAgICBwcmlu dGYoIiwgc3BlZWQ6ICIpOwotICAgICAgICBpZiAoKHp6ID0gdHRnc3BkKCkpIDwgMCkgewotICAg ICAgICAgICAgcHJpbnRmKCJ1bmtub3duIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICBpZiAoenogPT0gODg4MCkgcHJpbnRmKCI3NS8xMjAwIik7IGVsc2UgcHJpbnRmKCIlbGQiLHp6 KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY2FycmllciA9PSBDQVJfT0ZGKSBzID0gIm9mZiI7 Ci0gICAgICAgIGVsc2UgaWYgKGNhcnJpZXIgPT0gQ0FSX09OKSBzID0gIm9uIjsKLSAgICAgICAg ZWxzZSBpZiAoY2FycmllciA9PSBDQVJfQVVUKSBzID0gImF1dG8iOwotICAgICAgICBlbHNlIHMg PSAidW5rbm93biI7Ci0gICAgICAgIHByaW50ZigiLCBjYXJyaWVyOiAlcyIsIHMpOwotICAgICAg ICBpZiAoY2FycmllciA9PSBDQVJfT04pIHsKLSAgICAgICAgICAgIGlmIChjZHRpbW8pIHByaW50 ZigiLCB0aW1lb3V0OiAlZCBzZWMiLCBjZHRpbW8pOwotICAgICAgICAgICAgZWxzZSBwcmludGYo IiwgdGltZW91dDogbm9uZSIpOwotICAgICAgICB9Ci0gICAgICAgIHByaW50ZigiXG4iKTsKLSAg ICAgICAgZG9zaG9kaWFsKCk7Ci0gICAgICAgIGlmIChsb2NhbAotI2lmZGVmIE5FVENPTk4KLSAg ICAgICAgICAgICYmICFuZXR3b3JrCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotICAgICAgICAgICAg KSB7Ci0gICAgICAgICAgICBwcmludGYoIlR5cGUgU0hPVyBNT0RFTSB0byBzZWUgbW9kZW0gc2V0 dGluZ3MuXG4iKTsKLSNpZmRlZiBDS19UQVBJCi0gICAgICAgICAgICBwcmludGYoIlR5cGUgU0hP VyBUQVBJIHRvIHNlZSBUQVBJLXJlbGF0ZWQgaXRlbXNcbiIpOwotI2VuZGlmIC8qIENLX1RBUEkg Ki8KLSAgICAgICAgICAgIHByaW50ZigiVHlwZSBTSE9XIENPTU1VTklDQVRJT05TIHRvIHNlZSBt b2RlbSBzaWduYWxzLlxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyog Tk9ESUFMICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0jaWZuZGVmIE5PWEZFUgotI2lmZGVm IENLX0xBQkVMRUQKLSAgICAgIGNhc2UgU0hMQkw6ICAgICAgICAgICAgICAgICAgICAgICAvKiBM YWJlbGVkIGZpbGUgaW5mbyAqLwotICAgICAgICBzaG9sYmwoKTsKLSAgICAgICAgYnJlYWs7Ci0j ZW5kaWYgLyogQ0tfTEFCRUxFRCAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0gICAgICBjYXNl IFNIQ1NFOiAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVyIHNldHMgKi8KLSNpZmRl ZiBOT0NTRVRTCi0gICAgICAgIHByaW50ZigKLSIgQ2hhcmFjdGVyIHNldCB0cmFuc2xhdGlvbiBp cyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgdmVyc2lvbiBvZiBDLUtlcm1pdFxuIik7Ci0jZWxzZQot ICAgICAgICBzaG9jaGFyc2V0KCk7Ci0jaWZuZGVmIE5PWEZFUgotICAgICAgICBwcmludGYoIlxu IFVua25vd24tQ2hhci1TZXQ6ICVzXG4iLAotICAgICAgICAgICAgICAgdW5rY3MgPyAiS2VlcCIg OiAiRGlzY2FyZCIpOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotI2lmZGVmIE9TMgotICAgICAgICBw cmludGYoIlxuIik7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgIHNob3Rjcyh0Y3NsLHRjc3Ip OwotICAgICAgICBwcmludGYoIlxuIik7Ci0jaWZkZWYgT1MyCi0gICAgICAgIC8qIFBDIENvZGUg UGFnZSBpbmZvcm1hdGlvbiAqLwotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyIGNwYnVmWzEy OF07Ci0gICAgICAgICAgICBpbnQgY3BsaXN0WzE2XSwgY3BzOwotICAgICAgICAgICAgaW50IGFj dGl2ZWNwOwotICAgICAgICAgICAgY3BzID0gb3MyZ2V0Y3BsaXN0KGNwbGlzdCwgc2l6ZW9mKGNw bGlzdCkpOwotCi0gICAgICAgICAgICBzcHJpbnRmKGNwYnVmLCAgICAgICAgICAgICAgLyogU0FG RSAqLwotICAgICAgICAgICAgICAgICAgICAiJTNkLCUzZCwlM2QsJTNkLCUzZCwlM2QsJTNkLCUz ZCwlM2QsJTNkLCUzZCwlM2QiLAotICAgICAgICAgICAgICAgICAgICAgY3BzID4gMSA/IGNwbGlz dFsxXSA6IDAsCi0gICAgICAgICAgICAgICAgICAgICBjcHMgPiAyID8gY3BsaXN0WzJdIDogMCwg Y3BzID4gMyA/IGNwbGlzdFszXSA6IDAsCi0gICAgICAgICAgICAgICAgICAgICBjcHMgPiA0ID8g Y3BsaXN0WzRdIDogMCwgY3BzID4gNSA/IGNwbGlzdFs1XSA6IDAsCi0gICAgICAgICAgICAgICAg ICAgICBjcHMgPiA2ID8gY3BsaXN0WzZdIDogMCwgY3BzID4gNyA/IGNwbGlzdFs3XSA6IDAsCi0g ICAgICAgICAgICAgICAgICAgICBjcHMgPiA4ID8gY3BsaXN0WzhdIDogMCwgY3BzID4gOSA/IGNw bGlzdFs5XSA6IDAsCi0gICAgICAgICAgICAgICAgICAgICBjcHMgPiAxMCA/IGNwbGlzdFsxMF0g OiAwLCBjcHMgPiAxMSA/IGNwbGlzdFsxMV0gOiAwLAotICAgICAgICAgICAgICAgICAgICAgY3Bz ID4gMTIgPyBjcGxpc3RbMTJdIDogMAotICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAg ICAgIHByaW50ZigiIENvZGUgUGFnZXM6XG4iKTsKLSAgICAgICAgICAgIGFjdGl2ZWNwID0gb3My Z2V0Y3AoKTsKLSAgICAgICAgICAgIGlmICggYWN0aXZlY3AgKSB7Ci0gICAgICAgICAgICAgIHBy aW50ZigiICAgICBBY3RpdmU6ICVkXG4iLGFjdGl2ZWNwKTsKLSAgICAgICAgICAgICAgaWYgKCFp c1dpbjk1KCkpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCIgIEF2YWlsYWJsZTogJXNcbiIsY3Bi dWYpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgIHByaW50ZigiICAgICBBY3Rp dmU6IG4vYVxuIik7Ci0gICAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgIH0KLSNlbmRp ZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0gICAgICAgIGJyZWFrOwotCi0gICAg ICBjYXNlIFNIRkVBOiAgICAgICAgICAgICAgICAgICAgICAgLyogRmVhdHVyZXMgKi8KLSAgICAg ICAgc2hvZmVhKCk7Ci0gICAgICAgIGJyZWFrOwotCi0jaWZkZWYgQ0tfU1BFRUQKLSAgICAgIGNh c2UgU0hDVEw6ICAgICAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sLVByZWZpeCB0YWJsZSAq LwotICAgICAgICBzaG9jdGwoKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ0tfU1BFRUQg Ki8KLQotICAgICAgY2FzZSBTSEVYSTogewotICAgICAgICAgIGV4dGVybiBpbnQgZXhpdGhhbmd1 cDsKLSAgICAgICAgICBwcmludGYoIlxuIEV4aXQgd2FybmluZyAlc1xuIiwgeGl0d2FybiA/Ci0g ICAgICAgICAgICAgICAgICh4aXR3YXJuID09IDEgPyAib24iIDogImFsd2F5cyIpIDogIm9mZiIp OwotICAgICAgICAgIHByaW50ZigiIEV4aXQgb24tZGlzY29ubmVjdDogJXNcbiIsIHNob3dvZmYo ZXhpdG9uY2xvc2UpKTsKLSAgICAgICAgICBwcmludGYoIiBFeGl0IGhhbmd1cDogJXNcbiIsIHNo b3dvZmYoZXhpdGhhbmd1cCkpOwotICAgICAgICAgIHByaW50ZigiIEN1cnJlbnQgZXhpdCBzdGF0 dXM6ICVkXG5cbiIsIHhpdHN0YSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBj YXNlIFNIUFJUOiB7Ci0jaWZkZWYgUFJJTlRTV0kKLSAgICAgICAgICBleHRlcm4gaW50IHByaW50 dGltbywgcHJpbnRlcnR5cGUsIG5vcHJpbnRlcjsKLSAgICAgICAgICBleHRlcm4gY2hhciAqIHBy aW50dGVybSwgKiBwcmludHNlcDsKLSAgICAgICAgICBleHRlcm4gaW50IHBybmNzOwotI2lmZGVm IEJQUklOVAotICAgICAgICAgIGV4dGVybiBpbnQgcHJpbnRiaWRpOwotI2VuZGlmIC8qIEJQUklO VCAqLwotI2VuZGlmIC8qIFBSSU5UU1dJICovCi0KLSNpZmRlZiBJS1NECi0gICAgICAgIGlmIChp bnNlcnZlciAmJgotI2lmZGVmIENLX0xPR0lOCi0gICAgICAgICAgICBpc2d1ZXN0Ci0jZWxzZSAv KiBDS19MT0dJTiAqLwotICAgICAgICAgICAgMAotI2VuZGlmIC8qIENLX0xPR0lOICovCi0gICAg ICAgICAgICAgKSB7Ci0gICAgICAgICAgICBwcmludGYoIlNvcnJ5LCBjb21tYW5kIGRpc2FibGVk LlxyXG4iKTsKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAgIH0KLSNl bmRpZiAvKiBJS1NEICovCi0jaWZkZWYgUFJJTlRTV0kKLSAgICAgICAgICBpZiAobm9wcmludGVy KSB7Ci0gICAgICAgICAgICAgIHByaW50ZigiUHJpbnRlcjogKG5vbmUpXG5cbiIpOwotICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0jZW5kaWYgLyogUFJJTlRTV0kgKi8KLQotICAg ICAgICAgIHByaW50ZigiUHJpbnRlcjogJXMlc1xuIiwKLQotICAgICAgICAgICAgICAgICBwcmlu dHBpcGUgPyAifCAiIDogIiIsCi0gICAgICAgICAgICAgICAgIHByaW50ZXJuYW1lID8gcHJpbnRl cm5hbWUgOgotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICAiUFJOIgotI2Vsc2UKLSAgICAg ICAgICAgICAgICAgIihkZWZhdWx0KSIKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAg ICAgKTsKLSNpZmRlZiBQUklOVFNXSQotI2lmZGVmIEJQUklOVAotICAgICAgICAgIGlmIChwcmlu dGJpZGkpIHsKLSAgICAgICAgICAgICAgcHJpbnRmKCIgL0JJRElSRUNUSU9OQUxcbiIpOwotICAg ICAgICAgICAgICBpZiAocHBvcnRzcGVlZCA+IDApCi0gICAgICAgICAgICAgICAgcHJpbnRmKCIg L1NQRUVEOiVsZFxuIixwcG9ydHNwZWVkKTsKLSAgICAgICAgICAgICAgcHJpbnRmKCIgL1BBUklU WTolc1xuIixwYXJuYW0oKGNoYXIpcHBvcnRwYXJpdHkpKTsKLSAgICAgICAgICAgICAgcHJpbnRm KCIgL0ZMT1c6JXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICBwcG9ydGZsb3cgPT0gRkxPX05P TkUgPyAiTk9ORSIgOgotICAgICAgICAgICAgICAgICAgICAgKHBwb3J0ZmxvdyA9PSBGTE9fUlRT QyA/ICJSVFMvQ1RTIiA6ICJYT04vWE9GRiIpCi0gICAgICAgICAgICAgICAgICAgICApOwotICAg ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcHJpbnRmKCIgL09VVFBVVC1PTkxZXG4iKTsKLSNl bmRpZiAvKiBCUFJJTlQgKi8KLSAgICAgICAgICBzd2l0Y2ggKHByaW50ZXJ0eXBlKSB7Ci0gICAg ICAgICAgICBjYXNlIFBSVF9OT046IHByaW50ZigiIC9OT05FXG4iKTsgYnJlYWs7Ci0gICAgICAg ICAgICBjYXNlIFBSVF9GSUw6IHByaW50ZigiIC9GSUxFXG4iKTsgYnJlYWs7Ci0gICAgICAgICAg ICBjYXNlIFBSVF9QSVA6IHByaW50ZigiIC9QSVBFXG4iKTsgYnJlYWs7Ci0gICAgICAgICAgICBj YXNlIFBSVF9ET1M6IHByaW50ZigiIC9ET1MtREVWSUNFXG4iKTsgYnJlYWs7Ci0gICAgICAgICAg ICBjYXNlIFBSVF9XSU46IHByaW50ZigiIC9XSU5ET1dTLVFVRVVFXG4iKTsgYnJlYWs7Ci0gICAg ICAgICAgfQotICAgICAgICAgIHByaW50ZigiIC9USU1FT1VUOiVkXG4iLHByaW50dGltbyk7Ci0g ICAgICAgICAgaWYgKHByaW50dGVybSkgewotICAgICAgICAgICAgICBwcmludGYoIiAvRU5ELU9G LUpPQi1TVFJJTkc6Iik7Ci0gICAgICAgICAgICAgIHNob3N0cmRlZihwcmludHRlcm0pOwotICAg ICAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBw cmludGYoIiAvRU5ELU9GLUpPQi1TVFJJTkc6KG5vbmUpXG4iKTsKLSAgICAgICAgICBwcmludGYo IiAvSk9CLUhFQURFUi1GSUxFOiVzXG4iLHByaW50c2VwID8gcHJpbnRzZXAgOiAiKG5vbmUpIik7 Ci0gICAgICAgICAgcHJpbnRmKCIgL0NIQVJBQ1RFUi1TRVQ6ICVzXG4iLHR4cmluZm9bcHJuY3Nd LT5rZXl3ZCk7Ci0jZW5kaWYgLyogUFJJTlRTV0kgKi8KLSAgICAgICAgICBwcmludGYoIlxuIik7 Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2UgU0hDTUQ6IHsKLSNpZmRl ZiBET1VCTEVRVU9USU5HCi0gICAgICAgICAgZXh0ZXJuIGludCBkYmxxdW87Ci0jZW5kaWYgLyog RE9VQkxFUVVPVElORyAqLwotI2lmZGVmIENLX0FVVE9ETAotICAgICAgICAgIHByaW50ZigiIENv bW1hbmQgYXV0b2Rvd25sb2FkOiAlc1xuIixzaG93b2ZmKGNtZGFkbCkpOwotI2Vsc2UKLSAgICAg ICAgICBwcmludGYoIiBDb21tYW5kIGF1dG9kb3dubG9hZDogKG5vdCBhdmFpbGFibGUpXG4iKTsK LSNlbmRpZiAvKiBDS19BVVRPREwgKi8KLSAgICAgICAgICBwcmludGYoIiBDb21tYW5kIGJ5dGVz aXplOiAlZCBiaXRzXG4iLCAoY21kbXNrID09IDAzNzcpID8gOCA6IDcpOwotICAgICAgICAgIHBy aW50ZigiIENvbW1hbmQgZXJyb3ItZGlzcGxheTogJWRcbiIsIGNtZF9lcnIpOwotI2lmZGVmIENL X1JFQ0FMTAotICAgICAgICAgIHByaW50ZigiIENvbW1hbmQgcmVjYWxsLWJ1ZmZlci1zaXplOiAl ZFxuIixjbV9yZWNhbGwpOwotI2Vsc2UKLSAgICAgICAgICBwcmludGYoIiBDb21tYW5kIHJlY2Fs bC1idWZmZXIgbm90IGF2YWlsYWJsZSBpbiB0aGlzIHZlcnNpb25cbiIpOwotI2VuZGlmIC8qIENL X1JFQ0FMTCAqLwotI2lmZGVmIENLX1JFQ0FMTAotICAgICAgICAgIHByaW50ZigiIENvbW1hbmQg cmV0cnk6ICVzXG4iLHNob3dvZmYoY21fcmV0cnkpKTsKLSNlbHNlCi0gICAgICAgICAgcHJpbnRm KCIgQ29tbWFuZCByZXRyeSBub3QgYXZhaWxhYmxlIGluIHRoaXMgdmVyc2lvblxuIik7Ci0jZW5k aWYgLyogQ0tfUkVDQUxMICovCi0gICAgICAgICAgcHJpbnRmKCIgQ29tbWFuZCBpbnRlcnJ1cHRp b246ICVzXG4iLCBzaG93b2ZmKGNtZGludCkpOwotICAgICAgICAgIHByaW50ZigiIENvbW1hbmQg cXVvdGluZzogJXNcbiIsIHNob3dvZmYoY21kZ3F1bygpKSk7Ci0jaWZkZWYgRE9VQkxFUVVPVElO RwotICAgICAgICAgIHByaW50ZigiIENvbW1hbmQgZG91YmxlcXVvdGluZzogJXNcbiIsIHNob3dv ZmYoZGJscXVvKSk7Ci0jZW5kaWYgLyogRE9VQkxFUVVPVElORyAqLwotICAgICAgICAgIHByaW50 ZigiIENvbW1hbmQgbW9yZS1wcm9tcHRpbmc6ICVzXG4iLCBzaG93b2ZmKHhhc2ttb3JlKSk7Ci0g ICAgICAgICAgcHJpbnRmKCIgQ29tbWFuZCBoZWlnaHQ6ICVkXG4iLCBjbWRfcm93cyk7Ci0gICAg ICAgICAgcHJpbnRmKCIgQ29tbWFuZCB3aWR0aDogICVkXG4iLCBjbWRfY29scyk7Ci0jaWZuZGVm IElLU0RPTkxZCi0jaWZkZWYgT1MyCi0gICAgICAgICAgcHJpbnRmKCIgQ29tbWFuZCBzdGF0dXNs aW5lOiAlc1xuIixzaG93b2ZmKHR0X3N0YXR1c1tWQ01EXSkpOwotI2VuZGlmIC8qIE9TMiAqLwot I2VuZGlmIC8qIElLU0RPTkxZICovCi0jaWZkZWYgTE9DVVMKLSAgICAgICAgICBwcmludGYoIiBM b2N1czogICAgICAgICAgJXMiLAotICAgICAgICAgICAgICAgICBhdXRvbG9jdXMgPyAoYXV0b2xv Y3VzID09IDIgPyAiYXNrIiA6ICJhdXRvIikgOgotCQkgKGxvY3VzID8gImxvY2FsIiA6ICJyZW1v dGUiKSk7Ci0gICAgICAgICAgaWYgKGF1dG9sb2N1cykKLSAgICAgICAgICAgIHByaW50ZigiICgl cykiLCBsb2N1cyA/ICJsb2NhbCIgOiAicmVtb3RlIik7Ci0gICAgICAgICAgcHJpbnRmKCJcbiIp OwotI2VuZGlmIC8qIExPQ1VTICovCi0gICAgICAgICAgcHJpbnRmKCIgSGludHM6ICAgICAgICAg ICVzXG4iLCBzaG93b2ZmKGhpbnRzKSk7Ci0gICAgICAgICAgcHJpbnRmKCIgUXVpZXQ6ICAgICAg ICAgICVzXG4iLCBzaG93b2ZmKHF1aWV0KSk7Ci0gICAgICAgICAgcHJpbnRmKCIgTWF4aW11bSBj b21tYW5kIGxlbmd0aDogJWRcbiIsIENNREJMKTsKLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgICB7 Ci0gICAgICAgICAgICAgIGNoYXIgKiBzOwotICAgICAgICAgICAgICBpbnQgazsKLSAgICAgICAg ICAgICAgcHJpbnRmKCIgTWF4aW11bSBudW1iZXIgb2YgbWFjcm9zOiAlZFxuIiwgTUFDX01BWCk7 Ci0gICAgICAgICAgICAgIHByaW50ZigiIE1hY3JvcyBkZWZpbmVkOiAlZFxuIiwgbm1hYyk7Ci0g ICAgICAgICAgICAgIHByaW50ZigiIE1heGltdW0gbWFjcm8gZGVwdGg6ICVkXG4iLCBNQUNMRVZF TCk7Ci0gICAgICAgICAgICAgIHByaW50ZigiIE1heGltdW0gVEFLRSBkZXB0aDogJWRcbiIsIE1B WFRBS0UpOwotICAgICAgICAgICAgICBzID0gIihub3QgZGVmaW5lZCkiOwotICAgICAgICAgICAg ICBrID0gbWxvb2sobWFjdGFiLCJvbl91bmtub3duX2NvbW1hbmQiLG5tYWMpOwotICAgICAgICAg ICAgICBpZiAoayA+IC0xKSBpZiAobWFjdGFiW2tdLm12YWwpIHMgPSBtYWN0YWJba10ubXZhbDsK LSAgICAgICAgICAgICAgcHJpbnRmKCIgT05fVU5LTk9XTl9DT01NQU5EOiAlc1xuIixzKTsKLSAg ICAgICAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZmRlZiBVTklYCi0jaWZuZGVmIE5PSkMK LSAgICAgICAgICBwcmludGYoIiBTdXNwZW5kOiAlc1xuIiwgc2hvd29mZih4c3VzcGVuZCkpOwot I2VuZGlmIC8qIE5PSkMgKi8KLSNlbmRpZiAvKiBVTklYICovCi0gICAgICAgICAgcHJpbnRmKCIg QWNjZXNzIHRvIGV4dGVybmFsIGNvbW1hbmRzIGFuZCBwcm9ncmFtcyVzIGFsbG93ZWRcbiIsCi0j aWZuZGVmIE5PUFVTSAotICAgICAgICAgICAgICAgICAhbm9wdXNoID8gIiIgOgotI2VuZGlmIC8q IE5PUFVTSCAqLwotICAgICAgICAgICAgICAgICAgIiBub3QiKTsKLSAgICAgICAgICBicmVhazsK LSAgICAgIH0KLQotI2lmbmRlZiBOT1NQTAotICAgICAgY2FzZSBTSEFMUk06Ci0gICAgICAgIGlm IChja19hbGFybSkKLSAgICAgICAgICBwcmludGYoIkFsYXJtIGF0ICVzICVzXG4iLGFscm1fZGF0 ZSxhbHJtX3RpbWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcHJpbnRmKCIobm8gYWxhcm0g c2V0KVxuIik7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5kZWYg Tk9NU0VORAotICAgICAgY2FzZSBTSFNGTDogewotICAgICAgICAgIGV4dGVybiBzdHJ1Y3QgZmls ZWxpc3QgKiBmaWxlaGVhZDsKLSAgICAgICAgICBpZiAoIWZpbGVoZWFkKSB7Ci0gICAgICAgICAg ICAgIHByaW50Zigic2VuZC1saXN0IGlzIGVtcHR5XG4iKTsKLSAgICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgICBzdHJ1Y3QgZmlsZWxpc3QgKiBmbHA7Ci0gICAgICAgICAgICAgIGNoYXIg KiBzOwotICAgICAgICAgICAgICBmbHAgPSBmaWxlaGVhZDsKLSAgICAgICAgICAgICAgd2hpbGUg KGZscCkgewotICAgICAgICAgICAgICAgICAgcyA9IGZscC0+ZmxfYWxpYXM7Ci0gICAgICAgICAg ICAgICAgICBpZiAoIXMpIHMgPSAiKG5vbmUpIjsKLSAgICAgICAgICAgICAgICAgIHByaW50Zigi JXMsIG1vZGU6ICVzLCBhbGlhczogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZmxw LT5mbF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgIGdmbW9kZShmbHAtPmZsX21vZGUs MCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgcwotICAgICAgICAgICAgICAgICAgICAgICAg ICk7Ci0gICAgICAgICAgICAgICAgICBmbHAgPSBmbHAtPmZsX25leHQ7Ci0gICAgICAgICAgICAg IH0KLSAgICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSNlbmRpZiAvKiBOT01TRU5E ICovCi0KLSNpZmRlZiBDS1hYQ0hBUgotICAgICAgY2FzZSBTSERCTDoKLSAgICAgICAgc2hvZGJs KCk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIENLWFhDSEFSICovCi0KLSNpZm5kZWYgTk9Q VVNICi0jaWZuZGVmIE5PRlJJTExTCi0gICAgICBjYXNlIFNIRURJVDoKLSAgICAgICAgaWYgKCFl ZGl0b3JbMF0pIHsKLSAgICAgICAgICAgIHMgPSBnZXRlbnYoIkVESVRPUiIpOwotICAgICAgICAg ICAgaWYgKHMpIGNrc3RybmNweShlZGl0b3IscyxDS01BWFBBVEgpOwotICAgICAgICB9Ci0gICAg ICAgIHByaW50ZigiXG4gZWRpdG9yOiAgJXNcbiIsIGVkaXRvclswXSA/IGVkaXRvciA6ICIobm9u ZSkiKTsKLSAgICAgICAgaWYgKGVkaXRvclswXSkgewotICAgICAgICAgICAgcHJpbnRmKCIgb3B0 aW9uczogJXNcbiIsIGVkaXRvcHRzWzBdID8gZWRpdG9wdHMgOiAiKG5vbmUpIik7Ci0gICAgICAg ICAgICBwcmludGYoIiBmaWxlOiAgICAlc1xuIiwgZWRpdGZpbGVbMF0gPyBlZGl0ZmlsZSA6ICIo bm9uZSkiKTsKLSAgICAgICAgfQotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgIGJyZWFr OwotCi0jaWZkZWYgQlJPV1NFUgotICAgICAgY2FzZSBTSEJST1dTRToKLSAgICAgICAgaWYgKCFi cm93c2VyWzBdKSB7Ci0gICAgICAgICAgICBzID0gZ2V0ZW52KCJCUk9XU0VSIik7Ci0gICAgICAg ICAgICBpZiAocykgY2tzdHJuY3B5KGJyb3dzZXIscyxDS01BWFBBVEgpOwotICAgICAgICB9Ci0g ICAgICAgIHByaW50ZigiXG4gYnJvd3NlcjogJXNcbiIsIGJyb3dzZXJbMF0gPyBicm93c2VyIDog Iihub25lKSIpOwotICAgICAgICBpZiAoYnJvd3NlclswXSkgewotICAgICAgICAgICAgcHJpbnRm KCIgb3B0aW9uczogJXNcbiIsIGJyb3dzb3B0c1swXSA/IGJyb3dzb3B0cyA6ICIobm9uZSkiKTsK LSAgICAgICAgICAgIHByaW50ZigiIHVybDogICAgICVzXG4iLCBicm93c3VybFswXSA/IGJyb3dz dXJsIDogIihub25lKSIpOwotICAgICAgICB9Ci0gICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAg ICAgYnJlYWs7Ci0jZW5kaWYgLyogQlJPV1NFUiAqLwotI2VuZGlmIC8qICBOT0ZSSUxMUyAqLwot I2VuZGlmIC8qIE5PUFVTSCAqLwotCi0jaWZuZGVmIE5PTE9DQUwKLSNpZmRlZiBDS19UQVBJCi0g ICAgICBjYXNlIFNIVEFQSTogICAgICAgICAgICAgICAgICAgICAgLyogVEFQSSBvcHRpb25zICov Ci0jaWZkZWYgSUtTRAotICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsKLSAgICAgICAgICAgIHByaW50 ZigiU29ycnksIGNvbW1hbmQgZGlzYWJsZWQuXHJcbiIpOwotICAgICAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAwKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgICAgc2hvdGFw aSgwKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFNIVEFQSV9MOiAgICAgICAgICAgICAg ICAgICAgLyogVEFQSSBMb2NhdGlvbnMgKi8KLSNpZmRlZiBJS1NECi0gICAgICAgIGlmIChpbnNl cnZlcikgewotICAgICAgICAgICAgcHJpbnRmKCJTb3JyeSwgY29tbWFuZCBkaXNhYmxlZC5cclxu Iik7Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAgICB9Ci0jZW5kaWYg LyogSUtTRCAqLwotICAgICAgICBzaG90YXBpKDEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNh c2UgU0hUQVBJX006ICAgICAgICAgICAgICAgICAgICAvKiBUQVBJIE1vZGVtICovCi0jaWZkZWYg SUtTRAotICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsKLSAgICAgICAgICAgIHByaW50ZigiU29ycnks IGNvbW1hbmQgZGlzYWJsZWQuXHJcbiIpOwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAw KTsKLSAgICAgICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgICAgc2hvdGFwaSgyKTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFNIVEFQSV9DOiAgICAgICAgICAgICAgICAgICAgLyog VEFQSSBDb21tICovCi0jaWZkZWYgSUtTRAotICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsKLSAgICAg ICAgICAgIHByaW50ZigiU29ycnksIGNvbW1hbmQgZGlzYWJsZWQuXHJcbiIpOwotICAgICAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLSAg ICAgICAgc2hvdGFwaSgzKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ0tfVEFQSSAqLwot Ci0gICAgICBjYXNlIFNIVENQOiAgICAgICAgICAgICAgICAgICAgICAgLyogU0hPVENQICovCi0g ICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgc2hvdGNwKDApOwotICAgICAgICBwcmludGYo IlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0jaWZkZWYgVE5DT0RFCi0gICAgICBjYXNlIFNIVEVM OiAgICAgICAgICAgICAgICAgICAgICAgLyogVEVMTkVUICovCi0gICAgICAgIHByaW50ZigiXG4i KTsKLSAgICAgICAgc2hvdGVsKDApOwotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgIGJy ZWFrOwotCi0gICAgICBjYXNlIFNIVE9QVDogICAgICAgICAgICAgICAgICAgICAgLyogVEVMTkVU IE9QVElPTlMgKi8KLSAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICBzaG90b3B0KDApOwot ICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIFROQ09ERSAq LwotCi0jaWZkZWYgQ0tfVFJJR0dFUgotICAgICAgY2FzZSBTSFRSSUc6IHsKLSAgICAgICAgICBl eHRlcm4gY2hhciAqIHR0X3RyaWdnZXJbXSwgKiB0cmlnZ2VydmFsOwotICAgICAgICAgIGludCBp OwotICAgICAgICAgIGlmICghdHRfdHJpZ2dlclswXSkgewotICAgICAgICAgICAgICBwcmludGYo IiBUcmlnZ2VyczogKG5vbmUpXG4iKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg ICBwcmludGYoIiBUcmlnZ2VyczpcbiIpOwotICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwg VFJJR0dFUlM7IGkrKykgewotICAgICAgICAgICAgICAgICAgaWYgKCF0dF90cmlnZ2VyW2ldKQot ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIHByaW50ZigiICBc IiVzXCJcbiIsdHRfdHJpZ2dlcltpXSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg cHJpbnRmKCIgTW9zdCByZWNlbnQgdHJpZ2dlciBlbmNvdW50ZXJlZDogIik7Ci0gICAgICAgICAg ICAgIGlmICh0cmlnZ2VydmFsKQotICAgICAgICAgICAgICAgIHByaW50ZigiXCIlc1wiXG4iLHRy aWdnZXJ2YWwpOwotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcHJpbnRmKCIo bm9uZSlcbiIpOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSNlbmRp ZiAvKiBDS19UUklHR0VSICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0jaWZuZGVmIE5PU1BM Ci0gICAgICBjYXNlIFNISU5QOgotICAgICAgICBzaG9pbnB1dCgpOwotICAgICAgICBicmVhazsK LSNlbmRpZiAvKiBOT1NQTCAqLwotCi0gICAgICBjYXNlIFNITE9HOiB7Ci0jaWZuZGVmIE1BQwot I2lmZGVmIElLU0QKLSAgICAgICAgICBpZiAoaW5zZXJ2ZXIgJiYKLSNpZmRlZiBDS19MT0dJTgot ICAgICAgICAgICAgICBpc2d1ZXN0Ci0jZWxzZSAvKiBDS19MT0dJTiAqLwotICAgICAgICAgICAg ICAwCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSAgICAgICAgICAgICApIHsKLSAgICAgICAgICAg IHByaW50ZigiU29ycnksIGNvbW1hbmQgZGlzYWJsZWQuXHJcbiIpOwotICAgICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLSNpZmRlZiBE RUJVRwotICAgICAgICAgIHByaW50ZigiXG4gRGVidWcgbG9nOiAgICAgICAlcyIsIGRlYmxvZyA/ IGRlYmZpbCA6ICIobm9uZSkiKTsKLQkgIHsKLQkgICAgICBleHRlcm4gaW50IGRlYnRpbTsKLQkg ICAgICBpZiAoZGVidGltKSBwcmludGYoIiAodGltZXN0YW1wcykiKTsKLQkgICAgICBwcmludGYo IlxuIik7Ci0JICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNpZm5kZWYgTk9YRkVSCi0gICAgICAg ICAgcHJpbnRmKCIgUGFja2V0IGxvZzogICAgICAlc1xuIiwgICBwa3Rsb2cgPyBwa3RmaWwgOiAi KG5vbmUpIik7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0jaWZuZGVmIE5PTE9DQUwKLSAgICAgICAg ICBwcmludGYoIiBTZXNzaW9uIGxvZzogICAgICVzIiwgICBzZXNsb2cgPyBzZXNmaWwgOiAiKG5v bmUpIik7Ci0JICB7Ci0JICAgICAgZXh0ZXJuIGludCBzZXNzZnQsIHNsb2d0cywgc2xvZ251bDsK LQkgICAgICBzd2l0Y2ggKHNlc3NmdCkgewotCQljYXNlIFhZRlRfVDogcHJpbnRmKCIgKHRleHQp Iik7IGJyZWFrOwotCQljYXNlIFhZRlRfQjogcHJpbnRmKCIgKGJpbmFyeSkiKTsgYnJlYWs7Ci0J CWNhc2UgWFlGVF9EOiBwcmludGYoIiAoZGVidWcpIik7IGJyZWFrOwotCSAgICAgIH0KLQkgICAg ICBpZiAoc2xvZ3RzKSBwcmludGYoIih0aW1lc3RhbXBlZCkiKTsKLQkgICAgICBpZiAoc2xvZ251 bCkgcHJpbnRmKCIobnVsbC1wYWRkZWQpIik7Ci0JICAgICAgcHJpbnRmKCJcbiIpOwotCSAgfQot Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2lmZGVmIFRMT0cKLSAgICAgICAgICBwcmludGYoIiBU cmFuc2FjdGlvbiBsb2c6ICVzICglcylcbiIsCi0gICAgICAgICAgICAgICAgICh0cmFsb2cgPyAo KnRyYWZpbCA/IHRyYWZpbCA6ICIobm9uZSkiKSA6ICIobm9uZSkiKSwKLSAgICAgICAgICAgICAg ICAgKHRsb2dmbXQgPyAoKHRsb2dmbXQgPT0gMikgPyAiZnRwIiA6ICJ2ZXJib3NlIikgOiAiYnJp ZWYiKQotICAgICAgICAgICAgICAgICApOwotI2VuZGlmIC8qIFRMT0cgKi8KLSNpZmRlZiBDS0xP R0RJQUwKLSAgICAgICAgICAgIHByaW50ZigiIENvbm5lY3Rpb24gbG9nOiAgJXNcbiIsIGRpYWxv ZyA/IGRpYWZpbCA6ICIobm9uZSkiKTsKLSNlbmRpZiAvKiBDS0xPR0RJQUwgKi8KLSAgICAgICAg ICBwcmludGYoIlxuIik7Ci0jZW5kaWYgLyogTUFDICovCi0gICAgICAgICAgYnJlYWs7Ci0gICAg ICB9Ci0KLSNpZm5kZWYgTk9TUEwKLSAgICAgIGNhc2UgU0hPVVRQOiAgICAgICAgICAgICAgICAg ICAgICAvKiBPVVRQVVQgKi8KLSAgICAgICAgc2hvb3V0cHV0KCk7Ci0gICAgICAgIGJyZWFrOwot I2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZmRlZiBQQVRURVJOUwotICAgICAgY2FzZSBTSE9QQVQ6 ICAgICAgICAgICAgICAgICAgICAgIC8qIFBBVFRFUk5TICovCi0gICAgICAgIHNob3BhdCgpOwot ICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBQQVRURVJOUyAqLwotCi0jaWZkZWYgU1RSRUFNSU5H Ci0gICAgICBjYXNlIFNIT1NUUjogeyAgICAgICAgICAgICAgICAgICAgLyogU1RSRUFNSU5HICov Ci0gICAgICAgICAgZXh0ZXJuIGludCBzdHJlYW1ycSwgY2xlYXJycSwgY2xlYXJlZDsKLSAgICAg ICAgICBleHRlcm4gbG9uZyB0ZmNwczsKLSAgICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9XIFJFTElB QkxFIHJlbGlhYmxlIiwiIixyZWxpYWJsZSk7Ci0gICAgICAgICAgcHJpbnRmKCJcbiBSZWxpYWJs ZTogICAgICVzXG4iLHNob3dvb2EocmVsaWFibGUpKTsKLSAgICAgICAgICBwcmludGYoIiBDbGVh cmNoYW5uZWw6ICVzXG4iLHNob3dvb2EoY2xlYXJycSkpOwotICAgICAgICAgIHByaW50ZigiIFN0 cmVhbWluZzogICAgJXNcblxuIixzaG93b29hKHN0cmVhbXJxKSk7Ci0gICAgICAgICAgaWYgKCgh bG9jYWwgJiYgKHN0cmVhbXJxID09IFNFVF9PTikpIHx8Ci0gICAgICAgICAgICAgIChzdHJlYW1y cSA9PSBTRVRfQVVUTyAmJiByZWxpYWJsZSkpCi0gICAgICAgICAgICBwcmludGYoIiBTdHJlYW1p bmcgd2lsbCBiZSBkb25lIGlmIHJlcXVlc3RlZC5cbiIpOwotICAgICAgICAgIGVsc2UgaWYgKChz dHJlYW1ycSA9PSBTRVRfT0ZGKSB8fAotICAgICAgICAgICAgICAgICAgICgoc3RyZWFtcnEgPT0g U0VUX0FVVE8pICYmICFyZWxpYWJsZSkpCi0gICAgICAgICAgICBwcmludGYoIiBTdHJlYW1pbmcg d2lsbCBub3QgYmUgcmVxdWVzdGVkIGFuZCB3aWxsIG5vdCBiZSBkb25lLlxuIik7Ci0gICAgICAg ICAgZWxzZSBpZiAoKHN0cmVhbXJxID09IFNFVF9PTikgfHwKLSAgICAgICAgICAgICAgICAgICAo KHN0cmVhbXJxID09IFNFVF9BVVRPKSAmJiByZWxpYWJsZSkpCi0gICAgICAgICAgICBwcmludGYo Ci0iIFN0cmVhbWluZyB3aWxsIGJlIHJlcXVlc3RlZCBhbmQgd2lsbCBiZSBkb25lIGlmIHRoZSBv dGhlciBLZXJtaXQgYWdyZWVzLlxuIik7Ci0gICAgICAgICAgcHJpbnRmKCIgTGFzdCB0cmFuc2Zl cjogJXNzdHJlYW1pbmclcywgJWxkIGNwcy5cbiIsCi0gICAgICAgICAgICAgICAgIHN0cmVhbWVk ID4gMCA/ICIiIDogIm5vICIsCi0gICAgICAgICAgICAgICAgIGNsZWFyZWQgPyAiLCBjbGVhcmNo YW5uZWwiIDogIiIsCi0gICAgICAgICAgICAgICAgIHRmY3BzCi0gICAgICAgICAgICAgICAgICk7 Ci0gICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotI2Vu ZGlmIC8qIFNUUkVBTUlORyAqLwotCi0gICAgICBjYXNlIFNIT0lLUzoKLSAgICAgICAgcmV0dXJu KHNob19pa3MoKSk7Ci0gICAgICAgIGJyZWFrOwotCi0jaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04K LSAgICAgIGNhc2UgU0hPQVVUSDoKLSAgICAgICAgcmV0dXJuKHNob19hdXRoKDApKTsKLSNlbmRp ZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotCi0jaWZuZGVmIE5PRlRQCi0gICAgICBjYXNlIFNI T0ZUUDogewotI2lmZGVmIElLU0QKLSAgICAgICAgaWYgKGluc2VydmVyKSB7Ci0gICAgICAgICAg ICBwcmludGYoIlNvcnJ5LCBjb21tYW5kIGRpc2FibGVkLlxyXG4iKTsKLSAgICAgICAgICAgIHJl dHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0jaWZkZWYg U1lTRlRQCi0gICAgICAgIHsKLSAgICAgICAgICAgIGV4dGVybiBjaGFyIGZ0cGFwcFtdLCBmdHBv cHRzW107Ci0gICAgICAgICAgICBwcmludGYoIiBmdHAtY2xpZW50OiAgJXNcbiIsIGZ0cGFwcFsw XSA/IGZ0cGFwcCA6ICIobm9uZSkiKTsKLSAgICAgICAgICAgIGlmIChmdHBhcHBbMF0pCi0gICAg ICAgICAgICAgIHByaW50ZigiIGZ0cCBvcHRpb25zOiAlc1xuIiwgZnRwb3B0c1swXSA/IGZ0cG9w dHMgOiAiKG5vbmUpIik7Ci0gICAgICAgIH0KLSNlbHNlCi0jaWZkZWYgTkVXRlRQCi0gICAgICAg IHNob2Z0cCgwKTsKLSNlbHNlCi0gICAgICAgIHByaW50ZigiKE5vIEZUUCBjbGllbnQgaW5jbHVk ZWQgaW4gdGhpcyB2ZXJzaW9uIG9mIEtlcm1pdC4pXG4iKTsKLSNlbmRpZiAvKiBORVdGVFAgKi8K LSNlbmRpZiAvKiBTWVNGVFAgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0jZW5kaWYgLyog Tk9GVFAgKi8KLQotI2lmbmRlZiBOT0NNREwKLSAgICAgIGNhc2UgU0hYT1BUOiB7Ci0jaWZkZWYg SUtTREIKLSAgICAgICAgICBleHRlcm4gaW50IGRiZW5hYmxlZDsKLSAgICAgICAgICBleHRlcm4g Y2hhciAqIGRiZmlsZSwgKiBkYmRpcjsKLSNlbmRpZiAvKiBJS1NEQiAqLwotI2lmZGVmIENLV1RN UAotICAgICAgICAgIGV4dGVybiBpbnQgY2t4d3RtcDsKLSAgICAgICAgICBleHRlcm4gY2hhciAq IHd0bXBmaWxlOwotI2VuZGlmIC8qIENLV1RNUCAqLwotI2lmZGVmIENLX0xPR0lOCi0gICAgICAg ICAgZXh0ZXJuIGludCBja3hhbm9uLCB4ZmVybG9nLCBsb2dpbnRpbW87Ci0gICAgICAgICAgZXh0 ZXJuIGNoYXIgKiB4ZmVyZmlsZTsKLSNpZmRlZiBVTklYCi0gICAgICAgICAgZXh0ZXJuIGludCBj a3hwcml2OwotI2VuZGlmIC8qIFVOSVggKi8KLSNpZmRlZiBDS19QRVJNUwotICAgICAgICAgIGV4 dGVybiBpbnQgY2t4cGVybXM7Ci0jZW5kaWYgLyogQ0tfUEVSTVMgKi8KLSNlbmRpZiAvKiBDS19M T0dJTiAqLwotICAgICAgICAgIGV4dGVybiBjaGFyICogYmFubmVyZmlsZSwgKiBoZWxwZmlsZTsK LQotI2lmZGVmIElLU0QKLSAgICAgICAgICBpZiAoaW5zZXJ2ZXIgJiYKLSNpZmRlZiBDS19MT0dJ TgotICAgICAgICAgICAgICBpc2d1ZXN0Ci0jZWxzZSAvKiBDS19MT0dJTiAqLwotICAgICAgICAg ICAgICAwCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSAgICAgICAgICAgICAgKSB7Ci0gICAgICAg ICAgICAgIHByaW50ZigiU29ycnksIGNvbW1hbmQgZGlzYWJsZWQuXHJcbiIpOwotICAgICAgICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAgICAgIH0KLSNlbmRpZiAvKiBJS1NEICov Ci0gICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICAgIGlmICghY21kaW50KQotICAgICAg ICAgICAgcHJpbnRmKCIgLS1ub2ludGVycnVwdHNcbiIpOwotICAgICAgICAgIHByaW50ZigiIC0t YmFubmVyZmlsZT0lc1xuIixiYW5uZXJmaWxlID8gYmFubmVyZmlsZSA6ICIobnVsbCkiKTsKLSAg ICAgICAgICBwcmludGYoIiAtLWNkZmlsZTolc1xuIixjZG1zZ3N0ciA/IGNkbXNnc3RyIDogIihu dWxsKSIpOwotICAgICAgICAgIHByaW50ZigiIC0tY2RtZXNzYWdlOiVkXG4iLHNydmNkbXNnKTsK LSAgICAgICAgICBwcmludGYoIiAtLWhlbHBmaWxlOiVkXG4iLGhlbHBmaWxlKTsKLSAgICAgICAg ICBpZiAoaW5zZXJ2ZXIpIHsKLSAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICB9Ci0jaWZkZWYgQ0tTWVNMT0cKLSNpZmRlZiBTWVNMT0dM RVZFTAotICAgICAgICAgIHByaW50ZigiIC0tc3lzbG9nOiVkIChmb3JjZWQpXG4iLGNreHN5c2xv Zyk7Ci0jZWxzZQotICAgICAgICAgIHByaW50ZigiIC0tc3lzbG9nOiVkXG4iLGNreHN5c2xvZyk7 Ci0jZW5kaWYgLyogU1lTTE9HTEVWRUwgKi8KLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotI2lmZGVm IENLV1RNUAotICAgICAgICAgIHByaW50ZigiIC0td3RtcGxvZzolZFxuIixja3h3dG1wKTsKLSAg ICAgICAgICBwcmludGYoIiAtLXd0bXBmaWxlPSVzXG4iLHd0bXBmaWxlID8gd3RtcGZpbGUgOiAi KG51bGwpIik7Ci0jZW5kaWYgLyogQ0tXVE1QICovCi0jaWZkZWYgSUtTRAotI2lmZGVmIENLX0xP R0lOCi0gICAgICAgICAgcHJpbnRmKCIgLS1hbm9ueW1vdXM6JWRcbiIsY2t4YW5vbik7Ci0jaWZk ZWYgVU5JWAotICAgICAgICAgIHByaW50ZigiIC0tcHJpdmlkOiVkXG4iLGNreHByaXYpOwotI2Vu ZGlmIC8qIFVOSVggKi8KLSNpZmRlZiBDS19QRVJNUwotICAgICAgICAgIHByaW50ZigiIC0tcGVy bWlzc2lvbjolMDRvXG4iLGNreHBlcm1zKTsKLSNlbmRpZiAvKiBDS19QRVJNUyAqLwotICAgICAg ICAgIHByaW50ZigiIC0taW5pdGZpbGU6JXNcbiIsYW5vbmZpbGUgPyBhbm9uZmlsZSA6ICIobnVs bCkiKTsKLSAgICAgICAgICBwcmludGYoIiAtLXVzZXJmaWxlOiVzXG4iLHVzZXJmaWxlID8gdXNl cmZpbGUgOiAiKG51bGwpIik7Ci0gICAgICAgICAgcHJpbnRmKCIgLS1yb290OiVzXG4iLGFub25y b290ID8gYW5vbnJvb3QgOiAiKG51bGwpIik7Ci0gICAgICAgICAgcHJpbnRmKCIgLS14ZmVybG9n PSVkXG4iLHhmZXJsb2cpOwotICAgICAgICAgIHByaW50ZigiIC0teGZlcmZpbGU9JXNcbiIseGZl cmZpbGUgPyB4ZmVyZmlsZSA6ICIobnVsbCkiKTsKLSAgICAgICAgICBwcmludGYoIiAtLXRpbWVv dXQ9JWRcbiIsbG9naW50aW1vKTsKLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotI2lmZGVmIElLU0RC Ci0gICAgICAgICAgcHJpbnRmKCIgLS1kYXRhYmFzZT0lZFxuIixkYmVuYWJsZWQpOwotICAgICAg ICAgIHByaW50ZigiIC0tZGJmaWxlPSVzXG4iLGRiZmlsZSA/IGRiZmlsZSA6ICIobnVsbCkiKTsK LSAgICAgICAgICBpZiAoZGJkaXIpCi0gICAgICAgICAgICBwcmludGYoIiAgIChkYiBkaXJlY3Rv cnk9WyVzXSlcbiIsZGJkaXIpOwotI2VuZGlmIC8qIElLU0RCICovCi0jaWZkZWYgSUtTRENPTkYK LSAgICAgICAgICBwcmludGYoIiBJS1NEIGNvbmY9JXNcbiIsaWtzZGNvbmYpOwotI2VuZGlmIC8q IElLU0RDT05GICovCi0jZW5kaWYgLyogSUtTRCAqLwotICAgICAgICAgIHByaW50ZigiXG4iKTsK LSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSNlbmRpZiAvKiBOT0NNREwgKi8KLQotICAgICAg Y2FzZSBTSENEOiB7Ci0JICBleHRlcm4gY2hhciAqIG15aG9tZTsKLQkgIHMgPSBnZXRlbnYoIkNE UEFUSCIpOwotCSAgaWYgKCFzKSBzID0gIihub25lKSI7Ci0JICBwcmludGYoIlxuIGN1cnJlbnQg ZGlyZWN0b3J5OiAgJXNcbiIsIHpndGRpcigpKTsKLQkgIHByaW50ZigiIHByZXZpb3VzIGRpcmVj dG9yeTogJXNcbiIsIHByZXZkaXIgPyBwcmV2ZGlyIDogIihub25lKSIpOwotCSAgcHJpbnRmKCIg Y2QgaG9tZTogICAgICAgICAgICAlc1xuIiwgaG9tZXBhdGgoKSk7Ci0JICBwcmludGYoIiBjZCBw YXRoOiAgICAgICAgICAgICVzXG4iLCBja2NkcGF0aCA/IGNrY2RwYXRoIDogcyk7Ci0JICBwcmlu dGYoIiBjZCBtZXNzYWdlOiAgICAgICAgICVzXG4iLCBzaG93b2ZmKHNydmNkbXNnICYgMikpOwot CSAgcHJpbnRmKCIgc2VydmVyIGNkLW1lc3NhZ2U6ICAlc1xuIiwgc2hvd29mZihzcnZjZG1zZyAm IDEpKTsKLQkgIHByaW50ZigiIGNkIG1lc3NhZ2UgZmlsZTogICAgJXNcblxuIixjZG1zZ3N0ciA/ IGNkbXNnc3RyIDogIihub25lKSIpOwotCSAgYnJlYWs7Ci0gICAgICB9Ci0jaWZuZGVmIE5PQ1NF VFMKLSAgICAgIGNhc2UgU0hBU1NPQzoKLSAgICAgICAgKFZPSUQpIHNob3dhc3NvYygpOwotICAg ICAgICBicmVhazsKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSNpZmRlZiBDS0xPR0RJQUwKLSAg ICAgIGNhc2UgU0hDT05OWDoKLSNpZmRlZiBORVdGVFAKLSAgICAgICAgaWYgKGZ0cGlzY29ubmVj dGVkKCkpIHsKLSAgICAgICAgICAgIGV4dGVybiBjaGFyIGN4bG9nYnVmW107Ci0gICAgICAgICAg ICBkb2xvZ3Nob3coV19GVFAgfCAxKTsKLSAgICAgICAgICAgIGlmIChjeGxvZ2J1ZlswXSkKLSAg ICAgICAgICAgICAgZG9sb2dzaG93KDEpOwotICAgICAgICB9IGVsc2UgewotI2VuZGlmIC8qIE5F V0ZUUCAqLwotICAgICAgICAgICAgZG9sb2dzaG93KDEpOwotI2lmZGVmIE5FV0ZUUAotICAgICAg ICB9Ci0jZW5kaWYgLyogTkVXRlRQICovCi0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIENLTE9H RElBTCAqLwotCi0gICAgICBjYXNlIFNIT1BUUzoKLSAgICAgICAgb3B0bGluZXMgPSAwOwotI2lm bmRlZiBOT0ZSSUxMUwotICAgICAgICAoVk9JRCkgc2hvd2RlbG9wdHMoKTsKLSNlbmRpZiAvKiBO T0ZSSUxMUyAqLwotI2lmZGVmIERPTVlESVIKLSAgICAgICAgKFZPSUQpIHNob3dkaXJvcHRzKCk7 Ci0jZW5kaWYgLyogRE9NWURJUiAqLwotI2lmZGVmIENLUFVSR0UKLSAgICAgICAgKFZPSUQpIHNo b3dwdXJnb3B0cygpOwotI2VuZGlmIC8qIENLUFVSR0UgKi8KLSAgICAgICAgKFZPSUQpIHNob3d0 eXBvcHRzKCk7Ci0gICAgICAgIGJyZWFrOwotCi0jaWZuZGVmIE5PTE9DQUwKLSAgICAgIGNhc2Ug U0hPRkxPOgotICAgICAgICAoVk9JRCkgc2hvZmxvdygpOwotICAgICAgICBicmVhazsKLSNlbmRp ZiAvKiBOT0xPQ0FMICovCi0KLSNpZm5kZWYgTk9YRkVSCi0gICAgICBjYXNlIFNIT1hGRVI6Ci0g ICAgICAgIChWT0lEKSBzaG94ZmVyKCk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIE5PWEZF UiAqLwotCi0jaWZkZWYgQ0tfUkVDQUxMCi0gICAgICBjYXNlIFNISElTVE9SWToKLSAgICAgICAg KFZPSUQpIGNtaGlzdG9yeSgpOwotICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBDS19SRUNBTEwg Ki8KLQotI2lmbmRlZiBOT1NFWFAKLSNpZm5kZWYgTk9TUEwKLSAgICAgIGNhc2UgU0hTRVhQOgot ICAgICAgICAoVk9JRCkgc2hvc2V4cCgpOwotICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBOT1NQ TCAqLwotI2VuZGlmIC8qIE5PU0VYUCAqLwotCi0jaWZkZWYgQU5ZU1NICi0gICAgICBjYXNlIFNI T1NTSDoKLSAgICAgICAgKFZPSUQpIHNob3NzaCgpOwotICAgICAgICBicmVhazsKLSNlbmRpZiAv KiBBTllTU0ggKi8KLQotI2lmZGVmIEtVSQotICAgICAgY2FzZSBTSE9HVUk6Ci0gICAgICAgIChW T0lEKSBzaG9ndWkoKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogS1VJICovCi0KLSNpZm5k ZWYgTk9GUklMTFMKLSNpZm5kZWYgTk9SRU5BTUUKLSAgICAgIGNhc2UgU0hPUkVOOgotICAgICAg ICAoVk9JRCkgc2hvcmVuYW1lKCk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCS8qIE5PUkVOQU1F ICovCi0jZW5kaWYJLyogTk9GUklMTFMgKi8KLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcHJp bnRmKCJcbk5vdGhpbmcgdG8gc2hvdy4uLlxuIik7Ci0gICAgICAgIHJldHVybigtMik7Ci0gICAg fQotICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci19Ci0KLSNpZm5kZWYgTk9YRkVSCi1pbnQKLXNo b2F0dCgpIHsKLSAgICBwcmludGYoIkF0dHJpYnV0ZXM6ICVzXG4iLCBzaG93b2ZmKGF0Y2Fwcikp OwotICAgIGlmICghYXRjYXByKSByZXR1cm4oMCk7Ci0gICAgcHJpbnRmKCIgQmxvY2tzaXplOiAl c1xuIiwgc2hvd29mZihhdGJsa2kpKTsKLSAgICBwcmludGYoIiBEYXRlOiAlc1xuIiwgc2hvd29m ZihhdGRhdGkpKTsKLSAgICBwcmludGYoIiBEaXNwb3NpdGlvbjogJXNcbiIsIHNob3dvZmYoYXRk aXNpKSk7Ci0gICAgcHJpbnRmKCIgRW5jb2RpbmcgKENoYXJhY3RlciBTZXQpOiAlc1xuIiwgc2hv d29mZihhdGVuY2kpKTsKLSAgICBwcmludGYoIiBMZW5ndGg6ICVzXG4iLCBzaG93b2ZmKGF0bGVu aSkpOwotICAgIHByaW50ZigiIFR5cGUgKHRleHQvYmluYXJ5KTogJXNcbiIsIHNob3dvZmYoYXR0 eXBpKSk7Ci0gICAgcHJpbnRmKCIgU3lzdGVtIElEOiAlc1xuIiwgc2hvd29mZihhdHNpZGkpKTsK LSAgICBwcmludGYoIiBTeXN0ZW0gSW5mbzogJXNcbiIsIHNob3dvZmYoYXRzeXNpKSk7Ci0jaWZk ZWYgQ0tfUEVSTVMKLSAgICBwcmludGYoIiBQZXJtaXNzaW9ucyBJbjogICVzXG4iLCBzaG93b2Zm KGF0bHByaSkpOwotICAgIHByaW50ZigiIFBlcm1pc3Npb25zIE91dDogJXNcbiIsIHNob3dvZmYo YXRscHJvKSk7Ci0jZW5kaWYgLyogQ0tfUEVSTVMgKi8KLSNpZmRlZiBTVFJBVFVTCi0gICAgcHJp bnRmKCIgRm9ybWF0OiAlc1xuIiwgc2hvd29mZihhdGZybWkpKTsKLSAgICBwcmludGYoIiBDcmVh dG9yOiAlc1xuIiwgc2hvd29mZihhdGNyZWkpKTsKLSAgICBwcmludGYoIiBBY2NvdW50OiAlc1xu Iiwgc2hvd29mZihhdGFjdGkpKTsKLSNlbmRpZiAvKiBTVFJBVFVTICovCi0gICAgcmV0dXJuKDAp OwotfQotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZuZGVmIE5PU1BMCi1pbnQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0hPVyBNQUNST1MgKi8KLXNob21hYyhzMSwg czIpIGNoYXIgKnMxLCAqczI7IHsKLSAgICBpbnQgeCwgbiwgcHA7Ci0gICAgcHAgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFyZW50aGVzaXMgY291bnRlciAqLwotCi0gICAg ZGVidWcoRjExMCwic2hvbWFjIHMxIixzMSwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJzaG9tYWMgczIi LHMyLDApOwotCi0jaWZkZWYgSUtTRAotICAgIGlmICggaW5zZXJ2ZXIgJiYKLSNpZmRlZiBJS1NE Q09ORgotICAgICAgICBpa3NkY2YKLSNlbHNlIC8qIElLU0RDT05GICovCi0gICAgICAgIDEKLSNl bmRpZiAvKiBJS1NEQ09ORiAqLwotICAgICAgICApIHsKLSAgICAgICAgaWYgKCFja3N0cmNtcCgi b25fZXhpdCIsczEsLTEsMCkgfHwKLSAgICAgICAgICAgICFja3N0cmNtcCgib25fbG9nb3V0Iixz MSwtMSwwKSkKLSAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIElLU0QgKi8K LQotICAgIGlmICghczEpCi0gICAgICByZXR1cm4oMCk7Ci0gICAgZWxzZQotICAgICAgcHJpbnRm KCIlcyA9ICIsczEpOyAgICAgICAgICAgICAgIC8qIFByaW50IGJsYW5rIGxpbmUgYW5kIG1hY3Jv IG5hbWUgKi8KLSAgICBuID0gKGludClzdHJsZW4oczEpICsgNDsgICAgICAgICAgICAvKiBXaWR0 aCBvZiBjdXJyZW50IGxpbmUgKi8KLSAgICBpZiAoIXMyKSBzMiA9ICIobm90IGRlZmluZWQpIjsK LQotICAgIHdoaWxlICgoeCA9ICpzMisrKSkgeyAgICAgICAgICAgICAgIC8qIExvb3AgdGhydSBk ZWZpbml0aW9uICovCi0gICAgICAgIGlmICh4ID09ICcoJykgcHArKzsgICAgICAgICAgICAgLyog VHJlYXQgY29tbWFzIHdpdGhpbiBwYXJlbnMgKi8KLSAgICAgICAgaWYgKHggPT0gJyknKSBwcC0t OyAgICAgICAgICAgICAvKiBhcyBvcmRpbmFyeSB0ZXh0ICovCi0gICAgICAgIGlmIChwcCA8IDAp IHBwID0gMDsgICAgICAgICAgICAgLyogT3V0c2lkZSBwYXJlbnMsICovCi0gICAgICAgIGlmICh4 ID09ICcsJyAmJiBwcCA9PSAwKSB7ICAgICAgLyogY29tbWEgYmVjb21lcyBjb21tYS1kYXNoLU5M LiAqLwotICAgICAgICAgICAgcHV0Y2hhcignLCcpOwotICAgICAgICAgICAgcHV0Y2hhcignLScp OwotICAgICAgICAgICAgeCA9ICdcbic7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGluc2VydmVy ICYmICh4ID09ICdcbicpKSAgICAvKiBTZW5kIENSIGJlZm9yZSBMRiAqLwotICAgICAgICAgIHB1 dGNoYXIoQ1IpOwotICAgICAgICBwdXRjaGFyKChDSEFSKXgpOyAgICAgICAgICAgICAgIC8qIE91 dHB1dCB0aGUgY2hhcmFjdGVyICovCi0gICAgICAgIGlmICh4ID09ICdcbicpIHsgICAgICAgICAg ICAgICAgLyogSWYgaXQgd2FzIGEgbmV3bGluZSAqLwotI2lmZGVmIFVOSVgKLSNpZmRlZiBOT1NF VEJVRgotICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7Ci0jZW5kaWYgLyogTk9TRVRCVUYgKi8K LSNlbmRpZiAvKiBVTklYICovCi0gICAgICAgICAgICBwdXRjaGFyKCcgJyk7ICAgICAgICAgICAg ICAgLyogSW5kZW50IHRoZSBuZXh0IGxpbmUgMSBzcGFjZSAqLwotICAgICAgICAgICAgd2hpbGUo KnMyID09ICcgJykgczIrKzsgICAgIC8qIHNraXAgcGFzdCBsZWFkaW5nIGJsYW5rcyAqLwotICAg ICAgICAgICAgbiA9IDI7ICAgICAgICAgICAgICAgICAgICAgIC8qIHJlc3RhcnQgdGhlIGNoYXJh Y3RlciBjb3VudGVyICovCi0gICAgICAgICAgICBzbGMrKzsgICAgICAgICAgICAgICAgICAgICAg LyogYW5kIGluY3JlbWVudCB0aGUgbGluZSBjb3VudGVyLiAqLwotICAgICAgICB9IGVsc2UgaWYg KCsrbiA+IChjbWRfY29scyAtIDEpKSB7IC8qIElmIGxpbmUgaXMgdG9vIHdpZGUgKi8KLSAgICAg ICAgICAgIHB1dGNoYXIoJy0nKTsgICAgICAgICAgICAgICAvKiBvdXRwdXQgYSBkYXNoICovCi0g ICAgICAgICAgICBpZiAoaW5zZXJ2ZXIpCi0gICAgICAgICAgICAgIHB1dGNoYXIoQ1IpOyAgICAg ICAgICAgICAgLyogYW5kIGEgY2FycmlhZ2UgcmV0dXJuICovCi0gICAgICAgICAgICBwdXRjaGFy KE5MKTsgICAgICAgICAgICAgICAgLyogYW5kIGEgbmV3bGluZSAqLwotI2lmZGVmIFVOSVgKLSNp ZmRlZiBOT1NFVEJVRgotICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7Ci0jZW5kaWYgLyogTk9T RVRCVUYgKi8KLSNlbmRpZiAvKiBVTklYICovCi0gICAgICAgICAgICBuID0gMTsgICAgICAgICAg ICAgICAgICAgICAgLyogYW5kIHJlc3RhcnQgdGhlIGNoYXIgY291bnRlciAqLwotICAgICAgICAg ICAgc2xjKys7ICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBpbmNyZW1lbnQgdGhlIGxpbmUg Y291bnRlciAqLwotICAgICAgICB9Ci0gICAgICAgIGlmIChuIDwgMyAmJiBzbGMgPiAoY21kX3Jv d3MgLSAzKSkgeyAvKiBJZiBuZXcgbGluZSBhbmQgc2NyZWVuIGZ1bGwgKi8KLSAgICAgICAgICAg IGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyAvKiBhc2sgaWYgdGhleSB3YW50IG1vcmUuICov Ci0gICAgICAgICAgICBuID0gMTsgICAgICAgICAgICAgICAgICAgICAgLyogVGhleSBkbywgc3Rh cnQgYSBuZXcgbGluZSAqLwotICAgICAgICAgICAgc2xjID0gMDsgICAgICAgICAgICAgICAgICAg IC8qIGFuZCByZXN0YXJ0IGxpbmUgY291bnRlciAqLwotICAgICAgICB9Ci0gICAgfQotICAgIGlm IChpbnNlcnZlcikKLSAgICAgIHB1dGNoYXIoQ1IpOwotICAgIHB1dGNoYXIoTkwpOyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBkZWZpbml0aW9uICovCi0gICAgaWYgKCsrc2xjID4g KGNtZF9yb3dzIC0gMykpIHsKLSAgICAgICAgaWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7Ci0g ICAgICAgIHNsYyA9IDA7Ci0gICAgfQotICAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAvKiBOT1NQ TCAqLwotI2VuZGlmIC8qIE5PU0hPVyAqLwotCi1pbnQgeF9pZm51bSA9IDA7ICAgICAgICAgICAg ICAgICAgICAgICAgLyogRmxhZyBmb3IgSUYgTlVNRVJJQyBhY3RpdmUgKi8KLQotI2lmbmRlZiBO T1NQTAotLyogRXZhbHVhdGUgYW4gYXJpdGhtZXRpYyBleHByZXNzaW9uLiAqLwotLyogQ29kZSBh ZGFwdGVkIGZyb20gZXYsIGJ5IEhvd2llIEtheWUgb2YgQ29sdW1iaWEgVSAmIG90aGVycy4gKi8K LQotc3RhdGljIGludCB4ZXJyb3IgPSAwOwotaW50IGRpdmJ5emVybyA9IDA7Ci1zdGF0aWMgY2hh ciAqY3A7Ci1zdGF0aWMgQ0tfT0ZGX1QgdG9rdmFsOwotc3RhdGljIGNoYXIgY3VydG9rOwotc3Rh dGljIENLX09GRl9UIGV4cHZhbDsKLQotI2RlZmluZSBMT05HQklUUyAoOCpzaXplb2YgKENLX09G Rl9UKSkKLSNkZWZpbmUgTlVNQkVSICdOJwotI2RlZmluZSBOX0VPVCAnRScKLQotLyoKLSBSZXBs YWNlbWVudCBmb3Igc3RyY2hyKCkgYW5kIGluZGV4KCksIG5laXRoZXIgb2Ygd2hpY2ggc2VlbSB0 byBiZSB1bml2ZXJzYWwuCi0qLwotCi1zdGF0aWMgY2hhciAqCi0jaWZkZWYgQ0tfQU5TSUMKLXdp bmRleChjaGFyICogcywgY2hhciBjKQotI2Vsc2UKLXdpbmRleChzLGMpIGNoYXIgKnMsIGM7Ci0j ZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHdpbmRleCAqLyB7Ci0gICAgd2hpbGUgKCpzICE9IE5V TCAmJiAqcyAhPSBjKSBzKys7Ci0gICAgaWYgKCpzID09IGMpIHJldHVybihzKTsgZWxzZSByZXR1 cm4oTlVMTCk7Ci19Ci0KLQotLyoKLSBnIGUgdCB0IG8gawotCi0gUmV0dXJucyB0aGUgbmV4dCB0 b2tlbi4gIElmIHRva2VuIGlzIGEgTlVNQkVSLCBzZXRzIHRva3ZhbCBhcHByb3ByaWF0ZWx5Lgot Ki8KLXN0YXRpYyBjaGFyCi1nZXR0b2soKSB7Ci0gICAgY2hhciB0YnVmWzgwXSAvKiAsKnRwICov IDsgICAgICAgICAgLyogQnVmZmVyIHRvIGFjY3VtdWxhdGUgbnVtYmVyICovCi0KLSAgICB3aGls ZSAoaXNzcGFjZSgqY3ApKSAgICAgICAgICAgICAgICAvKiBTa2lwIHBhc3QgbGVhZGluZyBzcGFj ZXMgKi8KLSAgICAgIGNwKys7Ci0KLSAgICBkZWJ1ZyhGMTEwLCJHRVRUT0siLGNwLDApOwotCi0g ICAgc3dpdGNoICgqY3ApIHsKLSAgICAgIGNhc2UgJyQnOiAgICAgICAgICAgICAgICAgICAgICAg ICAvKiA/Pz8gKi8KLSAgICAgIGNhc2UgJysnOiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBB ZGQgKi8KLSAgICAgIGNhc2UgJy0nOiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdWJ0cmFj dCBvciBOZWdhdGUgKi8KLSAgICAgIGNhc2UgJ0AnOiAgICAgICAgICAgICAgICAgICAgICAgICAv KiBHcmVhdGVzdCBDb21tb24gRGl2aXNvciAqLwotICAgICAgY2FzZSAnKic6ICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIE11bHRpcGx5ICovCi0gICAgICBjYXNlICcvJzogICAgICAgICAgICAg ICAgICAgICAgICAgLyogRGl2aWRlICovCi0gICAgICBjYXNlICclJzogICAgICAgICAgICAgICAg ICAgICAgICAgLyogTW9kdWx1cyAqLwotICAgICAgY2FzZSAnPCc6ICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIExlZnQgc2hpZnQgKi8KLSAgICAgIGNhc2UgJz4nOiAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBSaWdodCBzaGlmdCAqLwotICAgICAgY2FzZSAnJic6ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEFuZCAqLwotICAgICAgY2FzZSAnfCc6ICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIE9yICovCi0gICAgICBjYXNlICcjJzogICAgICAgICAgICAgICAgICAgICAgICAgLyog RXhjbHVzaXZlIE9yICovCi0gICAgICBjYXNlICd+JzogICAgICAgICAgICAgICAgICAgICAgICAg LyogTm90ICovCi0gICAgICBjYXNlICdeJzogICAgICAgICAgICAgICAgICAgICAgICAgLyogRXhw b25lbnQgKi8KLSAgICAgIGNhc2UgJyEnOiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGYWN0 b3JpYWwgKi8KLSAgICAgIGNhc2UgJygnOiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQYXJl bnMgZm9yIGdyb3VwaW5nICovCi0gICAgICBjYXNlICcpJzogcmV0dXJuKCpjcCsrKTsgICAgICAg ICAgLyogb3BlcmF0b3IsIGp1c3QgcmV0dXJuIGl0ICovCi0gICAgICBjYXNlICdcbic6Ci0gICAg ICBjYXNlICdcMCc6IHJldHVybihOX0VPVCk7ICAgICAgICAgLyogRW5kIG9mIGxpbmUsIHJldHVy biB0aGF0ICovCi0gICAgfQotI2lmZGVmIENPTU1FTlQKLS8qIFRoaXMgaXMgdGhlIG9yaWdpbmFs IGNvZGUsIHdoaWNoIGFsbG93cyBvbmx5IGludGVnZXIgbnVtYmVycy4gKi8KLQotICAgIGlmIChp c3hkaWdpdCgqY3ApKSB7ICAgICAgICAgICAgICAgIC8qIERpZ2l0LCBtdXN0IGJlIGEgbnVtYmVy ICovCi0gICAgICAgIGludCByYWRpeCA9IDEwOyAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCBy YWRpeCAqLwotICAgICAgICBmb3IgKHRwID0gdGJ1ZjsgaXN4ZGlnaXQoKmNwKTsgY3ArKykKLSAg ICAgICAgICAqdHArKyA9IChjaGFyKSAoaXN1cHBlcigqY3ApID8gdG9sb3dlcigqY3ApIDogKmNw KTsKLSAgICAgICAgKnRwID0gJ1wwJzsgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgbnVtYmVy ICovCi0gICAgICAgIHN3aXRjaChpc3VwcGVyKCpjcCkgPyB0b2xvd2VyKCpjcCkgOiAqY3ApIHsg LyogRXhhbWluZSBicmVhayBjaGFyICovCi0gICAgICAgICAgY2FzZSAnaCc6Ci0gICAgICAgICAg Y2FzZSAneCc6IHJhZGl4ID0gMTY7IGNwKys7IGJyZWFrOyAvKiBpZiByYWRpeCBzaWduaWZpZXIu Li4gKi8KLSAgICAgICAgICBjYXNlICdvJzoKLSAgICAgICAgICBjYXNlICdxJzogcmFkaXggPSA4 OyBjcCsrOyBicmVhazsKLSAgICAgICAgICBjYXNlICd0JzogcmFkaXggPSAyOyBjcCsrOyBicmVh azsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHRwID0gdGJ1ZiwgdG9rdmFsID0gMDsgKnRwICE9 ICdcMCc7IHRwKyspICB7Ci0gICAgICAgICAgICBpbnQgZGlnOwotICAgICAgICAgICAgZGlnID0g KnRwIC0gJzAnOyAgICAgICAgICAgIC8qIENvbnZlcnQgbnVtYmVyICovCi0gICAgICAgICAgICBp ZiAoZGlnID4gMTApIGRpZyAtPSAnYSctJzAnLTEwOwotICAgICAgICAgICAgaWYgKGRpZyA+PSBy YWRpeCkgewotICAgICAgICAgICAgICAgIGlmIChjbWRsdmwgPT0gMCAmJiAheF9pZm51bSAmJiAh eGVycm9yKQotICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/SW52YWxpZCBkaWdpdCAnJWMnIGlu IG51bWJlclxuIiwqdHApOwotICAgICAgICAgICAgICAgIHhlcnJvciA9IDE7Ci0gICAgICAgICAg ICAgICAgcmV0dXJuKE5VTUJFUik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0b2t2YWwg PSByYWRpeCp0b2t2YWwgKyBkaWc7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuKE5VTUJFUik7 Ci0gICAgfQotICAgIGlmIChjbWRsdmwgPT0gMCAmJiAheF9pZm51bSAmJiAheGVycm9yKQotICAg ICAgcHJpbnRmKCJJbnZhbGlkIGNoYXJhY3RlciAnJWMnIGluIGlucHV0XG4iLCpjcCk7Ci0gICAg eGVycm9yID0gMTsKLSAgICBjcCsrOwotICAgIHJldHVybihnZXR0b2soKSk7Ci0jZWxzZQotLyog VGhpcyBjb2RlIGFsbG93cyBub24tbnVtYmVycyB0byBiZSB0cmVhdGVkIGFzIG1hY3JvIG5hbWVz ICovCi0gICAgewotICAgICAgICBpbnQgaSwgeDsKLSAgICAgICAgY2hhciAqIHMsICogY3AxOwot ICAgICAgICBjcDEgPSBjcDsKLSAgICAgICAgdHAgPSB0YnVmOwotICAgICAgICBmb3IgKGkgPSAw OyBpIDwgODA7IGkrKykgewotICAgICAgICAgICAgLyogTG9vayBhaGVhZCB0byBuZXh0IGJyZWFr IGNoYXJhY3RlciAqLwotICAgICAgICAgICAgLyogcHJldHR5IG11Y2ggYW55dGhpbmcgdGhhdCBp cyBub3QgaW4gdGhlIHN3aXRjaCgpIGFib3ZlLiAqLwotICAgICAgICAgICAgaWYgKGlzYWxwaGEo KmNwKSB8fCBpc2RpZ2l0KCpjcCkgfHwKLSAgICAgICAgICAgICAgICAqY3AgPT0gJ18nIHx8ICpj cCA9PSAnOicgfHwgKmNwID09ICcuJyB8fAotICAgICAgICAgICAgICAgICpjcCA9PSAnWycgfHwg KmNwID09ICddJyB8fAotICAgICAgICAgICAgICAgICpjcCA9PSAneycgfHwgKmNwID09ICd9Jwot ICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgdGJ1ZltpXSA9ICpjcCsrOwotICAgICAg ICAgICAgZWxzZQotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAo aSA+PSA4MCkgewotICAgICAgICAgICAgcHJpbnRmKCJUb28gbG9uZyAtIFwiJXNcIlxuIiwgY3Ax KTsKLSAgICAgICAgICAgIHhlcnJvciA9IDE7Ci0gICAgICAgICAgICBjcCsrOwotICAgICAgICAg ICAgcmV0dXJuKGdldHRvaygpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoeGVycm9yKSByZXR1 cm4oTlVNQkVSKTsKLQotICAgICAgICB0YnVmW2ldID0gTlVMOwotICAgICAgICBzID0gdGJ1ZjsK LSAgICAgICAgaWYgKCFpc2RpZ2l0KHRidWZbMF0pKSB7Ci0gICAgICAgICAgICBjaGFyICogczIg PSBOVUxMOwotICAgICAgICAgICAgeCA9IG14bG9vayhtYWN0YWIsdGJ1ZixubWFjKTsKLSAgICAg ICAgICAgIGRlYnVnKEYxMTEsImdldHRvayBteGxvb2siLHRidWYseCk7Ci0gICAgICAgICAgICBp ZiAoeCA8IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoY21kbHZsID09IDAgJiYgIXhfaWZudW0g JiYgIXhlcnJvcikKLSAgICAgICAgICAgICAgICAgIHByaW50ZigiQmFkIG51bWJlciAtIFwiJXNc IlxuIix0YnVmKTsKLSAgICAgICAgICAgICAgICB4ZXJyb3IgPSAxOwotICAgICAgICAgICAgICAg IGNwKys7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKGdldHRvaygpKTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIHMyID0gbWFjdGFiW3hdLm12YWw7Ci0gICAgICAgICAgICBpZiAoIXMyKSBz MiA9ICIiOwotICAgICAgICAgICAgaWYgKCpzMikgcyA9IHMyOwotICAgICAgICB9Ci0jaWZkZWYg Q0tGTE9BVAotICAgICAgICB4ID0gaXNmbG9hdChzLDApOwotI2Vsc2UKLSAgICAgICAgeCA9IGNo a251bShzKTsKLSNlbmRpZiAvKiBDS0ZMT0FUICovCi0gICAgICAgIGlmICh4ID4gMCkgewotICAg ICAgICAgICAgdG9rdmFsID0gY2thdG9mcyhzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgIGlmIChjbWRsdmwgPT0gMCAmJiAheF9pZm51bSAmJiAheGVycm9yKQotICAgICAgICAgICAg ICBwcmludGYoIkJhZCBudW1iZXIgLSBcIiVzXCJcbiIsdGJ1Zik7Ci0gICAgICAgICAgICB4ZXJy b3IgPSAxOwotICAgICAgICAgICAgY3ArKzsKLSAgICAgICAgICAgIHJldHVybihnZXR0b2soKSk7 Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuKE5VTUJFUik7Ci0gICAgfQotI2VuZGlmIC8qIENP TU1FTlQgKi8KLX0KLQotc3RhdGljIENLX09GRl9UCi0jaWZkZWYgQ0tfQU5TSUMKLWV4cG9uKENL X09GRl9UIHgsIENLX09GRl9UIHkpCi0jZWxzZQotZXhwb24oeCx5KSBDS19PRkZfVCB4LHk7Ci0j ZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGV4cG9uICovIHsKLSAgICBDS19PRkZfVCByZXN1bHQg PSAxOwotICAgIGludCBzaWduID0gMTsKLSAgICBpZiAoeSA8IDApIHJldHVybigwKTsKLSAgICBp ZiAoeCA8IDApIHsKLSAgICAgICAgeCA9IC14OwotICAgICAgICBpZiAoeSAmIDEpIHNpZ24gPSAt MTsKLSAgICB9Ci0gICAgd2hpbGUgKHkgIT0gMCkgewotICAgICAgICBpZiAoeSAmIDEpIHJlc3Vs dCAqPSB4OwotICAgICAgICB5ID4+PSAxOwotICAgICAgICBpZiAoeSAhPSAwKSB4ICo9IHg7Ci0g IH0KLSAgcmV0dXJuKHJlc3VsdCAqIHNpZ24pOwotfQotCi0vKgotICogZmFjdG9yIDo6PSBzaW1w bGUgfCBzaW1wbGUgXiBmYWN0b3IKLSAqCi0gKi8KLXN0YXRpYyBWT0lECi1mYWN0b3IoKSB7Ci0g ICAgQ0tfT0ZGX1Qgb2xkdmFsOwotICAgIHNpbXBsZSgpOwotICAgIGlmIChjdXJ0b2sgPT0gJ14n KSB7Ci0gICAgICAgIG9sZHZhbCA9IGV4cHZhbDsKLSAgICAgICAgY3VydG9rID0gZ2V0dG9rKCk7 Ci0gICAgICAgIGZhY3RvcigpOwotICAgICAgICBleHB2YWwgPSBleHBvbihvbGR2YWwsZXhwdmFs KTsKLSAgICB9Ci19Ci0KLS8qCi0gKiB0ZXJtcCA6Oj0gTlVMTCB8IHsqLC8sJSwmfSBmYWN0b3Ig dGVybXAKLSAqCi0gKi8KLXN0YXRpYyBWT0lECi10ZXJtcCgpIHsKLSAgICB3aGlsZSAoY3VydG9r ID09ICcqJyB8fCBjdXJ0b2sgPT0gJy8nIHx8IGN1cnRvayA9PSAnJScgfHwgY3VydG9rID09ICcm JykgewotICAgICAgICBDS19PRkZfVCBvbGR2YWw7Ci0gICAgICAgIGNoYXIgb3A7Ci0gICAgICAg IG9wID0gY3VydG9rOwotICAgICAgICBjdXJ0b2sgPSBnZXR0b2soKTsgICAgICAgICAgICAgIC8q IHNraXAgcGFzdCBvcGVyYXRvciAqLwotICAgICAgICBvbGR2YWwgPSBleHB2YWw7Ci0gICAgICAg IGZhY3RvcigpOwotICAgICAgICBzd2l0Y2gob3ApIHsKLSAgICAgICAgICBjYXNlICcqJzogZXhw dmFsID0gb2xkdmFsICogZXhwdmFsOyBicmVhazsKLSAgICAgICAgICBjYXNlICcvJzoKLSAgICAg ICAgICBjYXNlICclJzoKLSAgICAgICAgICAgIGlmIChleHB2YWwgPT0gMCkgewotICAgICAgICAg ICAgICAgIGlmICgheF9pZm51bSkKLSAgICAgICAgICAgICAgICAgIHByaW50ZigiP0RpdmlkZSBi eSB6ZXJvXG4iKTsKLSAgICAgICAgICAgICAgICB4ZXJyb3IgPSAxOwotICAgICAgICAgICAgICAg IGRpdmJ5emVybyA9IDE7Ci0gICAgICAgICAgICAgICAgZXhwdmFsID0gLTE7Ci0gICAgICAgICAg ICB9IGVsc2UKLSAgICAgICAgICAgICAgZXhwdmFsID0gKG9wID09ICcvJykgPyAob2xkdmFsIC8g ZXhwdmFsKSA6IChvbGR2YWwgJSBleHB2YWwpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgY2FzZSAnJic6Ci0gICAgICAgICAgICBleHB2YWwgPSBvbGR2YWwgJiBleHB2YWw7IGJyZWFr OwotICAgICAgICB9Ci0gICAgfQotfQotCi1zdGF0aWMgQ0tfT0ZGX1QKLSNpZmRlZiBDS19BTlNJ QwotZmFjdChDS19PRkZfVCB4KQotI2Vsc2UKLWZhY3QoeCkgQ0tfT0ZGX1QgeDsKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwotLyogZmFjdCAqLyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IGZhY3RvcmlhbCAqLwotICAgIENLX09GRl9UIHJlc3VsdCA9IDE7Ci0gICAgd2hpbGUgKHggPiAx KQotICAgICAgcmVzdWx0ICo9IHgtLTsKLSAgICByZXR1cm4ocmVzdWx0KTsKLX0KLQotLyoKLSAq IHRlcm0gOjo9IGZhY3RvciB0ZXJtcAotICoKLSAqLwotc3RhdGljIFZPSUQKLXRlcm0oKSB7Ci0g ICAgZmFjdG9yKCk7Ci0gICAgdGVybXAoKTsKLX0KLQotc3RhdGljIENLX09GRl9UCi0jaWZkZWYg Q0tfQU5TSUMKLWdjZChDS19PRkZfVCB4LCBDS19PRkZfVCB5KQotI2Vsc2UKLWdjZCh4LHkpIENL X09GRl9UIHgseTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogZ2NkICovIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEdyZWF0ZXN0IENvbW1vbiBEaXZpc29yICovCi0gICAgaW50 IG5zaGlmdCA9IDA7Ci0gICAgaWYgKHggPCAwKSB4ID0gLXg7Ci0gICAgaWYgKHkgPCAwKSB5ID0g LXk7ICAgICAgICAgICAgICAgICAgLyogdmFsaWRhdGUgYXJndW1lbnRzICovCi0gICAgaWYgKHgg PT0gMCB8fCB5ID09IDApIHJldHVybih4ICsgeSk7ICAgIC8qIHRoaXMgaXMgYm9ndXMgKi8KLQot ICAgIHdoaWxlICghKCh4ICYgMSkgfCAoeSAmIDEpKSkgeyAgICAgIC8qIGdldCByaWQgb2YgcG93 ZXJzIG9mIDIgKi8KLSAgICAgICAgbnNoaWZ0Kys7Ci0gICAgICAgIHggPj49IDE7Ci0gICAgICAg IHkgPj49IDE7Ci0gICAgfQotICAgIHdoaWxlICh4ICE9IDEgJiYgeSAhPSAxICYmIHggIT0gMCAm JiB5ICE9IDApIHsKLSAgICAgICAgd2hpbGUgKCEoeCAmIDEpKSB4ID4+PSAxOyAgICAgICAvKiBl bGltaW5hdGUgdW5uZWNlc3NhcnkgKi8KLSAgICAgICAgd2hpbGUgKCEoeSAmIDEpKSB5ID4+PSAx OyAgICAgICAvKiBwb3dlcnMgb2YgMiAqLwotICAgICAgICBpZiAoeCA8IHkpIHsgICAgICAgICAg ICAgICAgICAgIC8qIGZvcmNlIHggdG8gYmUgbGFyZ2VyICovCi0gICAgICAgICAgICBDS19PRkZf VCB0OwotICAgICAgICAgICAgdCA9IHg7Ci0gICAgICAgICAgICB4ID0geTsKLSAgICAgICAgICAg IHkgPSB0OwotICAgICAgICB9Ci0gICAgICAgIHggLT0geTsKLSAgICB9Ci0gICAgaWYgKHggPT0g MCB8fCB5ID09IDApIHJldHVybigoeCArIHkpIDw8IG5zaGlmdCk7IC8qIGdjZCBpcyBub24temVy byBvbmUgKi8KLSAgICBlbHNlIHJldHVybigoQ0tfT0ZGX1QpIDEgPDwgbnNoaWZ0KTsgICAgLyog ZWxzZSBnY2QgaXMgMSAqLwotfQotCi0vKgotICogZXhwcnAgOjo9IE5VTEwgfCB7KywtLHwsLi4u fSB0ZXJtIGV4cHJwCi0gKgotICovCi1zdGF0aWMgVk9JRAotZXhwcnAoKSB7Ci0gICAgd2hpbGUg KHdpbmRleCgiKy18PD4jQCIsY3VydG9rKSAhPSBOVUxMKSB7Ci0gICAgICAgIENLX09GRl9UIG9s ZHZhbDsKLSAgICAgICAgY2hhciBvcDsKLSAgICAgICAgb3AgPSBjdXJ0b2s7Ci0gICAgICAgIGN1 cnRvayA9IGdldHRvaygpOyAgICAgICAgICAgICAgLyogc2tpcCBwYXN0IG9wZXJhdG9yICovCi0g ICAgICAgIG9sZHZhbCA9IGV4cHZhbDsKLSAgICAgICAgdGVybSgpOwotICAgICAgICBzd2l0Y2go b3ApIHsKLSAgICAgICAgICBjYXNlICcrJyA6IGV4cHZhbCA9IG9sZHZhbCArIGV4cHZhbDsgYnJl YWs7Ci0gICAgICAgICAgY2FzZSAnLScgOiBleHB2YWwgPSBvbGR2YWwgLSBleHB2YWw7IGJyZWFr OwotICAgICAgICAgIGNhc2UgJ3wnIDogZXhwdmFsID0gb2xkdmFsIHwgZXhwdmFsOyBicmVhazsK LSAgICAgICAgICBjYXNlICcjJyA6IGV4cHZhbCA9IG9sZHZhbCBeIGV4cHZhbDsgYnJlYWs7Ci0g ICAgICAgICAgY2FzZSAnQCcgOiBleHB2YWwgPSBnY2Qob2xkdmFsLGV4cHZhbCk7IGJyZWFrOwot ICAgICAgICAgIGNhc2UgJzwnIDogZXhwdmFsID0gb2xkdmFsIDw8IGV4cHZhbDsgYnJlYWs7Ci0g ICAgICAgICAgY2FzZSAnPicgOiBleHB2YWwgPSBvbGR2YWwgPj4gZXhwdmFsOyBicmVhazsKLSAg ICAgICAgfQotICAgIH0KLX0KLQotLyoKLSAqIGV4cHIgOjo9IHRlcm0gZXhwcnAKLSAqCi0gKi8K LXN0YXRpYyBWT0lECi1leHByKCkgewotICAgIHRlcm0oKTsKLSAgICBleHBycCgpOwotfQotCi1z dGF0aWMgQ0tfT0ZGX1QKLXhwYXJzZSgpIHsKLSAgICBjdXJ0b2sgPSBnZXR0b2soKTsKLSAgICBl eHByKCk7Ci0jaWZkZWYgQ09NTUVOVAotICAgIGlmIChjdXJ0b2sgPT0gJyQnKSB7Ci0gICAgICAg IGN1cnRvayA9IGdldHRvaygpOwotICAgICAgICBpZiAoY3VydG9rICE9IE5VTUJFUikgewotICAg ICAgICAgICAgaWYgKGNtZGx2bCA9PSAwICYmICF4X2lmbnVtKQotICAgICAgICAgICAgICBwcmlu dGYoIj9JbGxlZ2FsIHJhZGl4XG4iKTsKLSAgICAgICAgICAgIHhlcnJvciA9IDE7Ci0gICAgICAg ICAgICByZXR1cm4oMCk7Ci0gICAgICAgIH0KLSAgICAgICAgY3VydG9rID0gZ2V0dG9rKCk7Ci0g ICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICBpZiAoY3VydG9rICE9IE5fRU9UKSB7Ci0g ICAgICAgIGlmIChjbWRsdmwgPT0gMCAmJiAheF9pZm51bSAmJiAheGVycm9yKQotICAgICAgICAg IHByaW50ZigiP0V4dHJhIGNoYXJhY3RlcnMgYWZ0ZXIgZXhwcmVzc2lvblxuIik7Ci0gICAgICAg IHhlcnJvciA9IDE7Ci0gICAgfQotICAgIHJldHVybihleHB2YWwpOwotfQotCi1jaGFyICogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2lsZW50IGZyb250IGVuZCBmb3IgZXZh bGEoKSAqLwotZXZhbHgocykgY2hhciAqczsgewotICAgIGNoYXIgKiBwOwotICAgIGludCB0Owot ICAgIHQgPSB4X2lmbnVtOwotICAgIHhfaWZudW0gPSAxOwotICAgIHAgPSBldmFsYShzKTsKLSAg ICB4X2lmbnVtID0gdDsKLSAgICByZXR1cm4ocCk7Ci19Ci0KLWNoYXIgKgotZXZhbGEocykgY2hh ciAqczsgewotICAgIENLX09GRl9UIHY7CQkJCS8qIE51bWVyaWMgdmFsdWUgKi8KLSAgICBpZiAo IXMpIHJldHVybigiIik7Ci0gICAgeGVycm9yID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAg LyogU3RhcnQgb3V0IHdpdGggbm8gZXJyb3IgKi8KLSAgICBkaXZieXplcm8gPSAwOwotICAgIGNw ID0gczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1ha2UgdGhlIGFyZ3VtZW50IGds b2JhbCAqLwotICAgIHYgPSB4cGFyc2UoKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhcnNl IHRoZSBzdHJpbmcgKi8KLSAgICByZXR1cm4oeGVycm9yID8gIiIgOiBja2ZzdG9hKHYpKTsJLyog UmV0dXJuIGVtcHR5IHN0cmluZyBvbiBlcnJvciAqLwotfQotCi0vKgotICogc2ltcGxlc3QgOjo9 IE5VTUJFUiB8ICggZXhwciApCi0gKgotICovCi1zdGF0aWMgVk9JRAotc2ltcGxlc3QoKSB7Ci0g ICAgY2hhciAqIHA7Ci0gICAgcCA9IGNwOwotICAgIGlmIChjdXJ0b2sgPT0gTlVNQkVSKQotICAg ICAgZXhwdmFsID0gdG9rdmFsOwotICAgIGVsc2UgaWYgKGN1cnRvayA9PSAnKCcpIHsKLSAgICAg ICAgY3VydG9rID0gZ2V0dG9rKCk7ICAgICAgICAgICAgICAvKiBza2lwIG92ZXIgcGFyZW4gKi8K LSAgICAgICAgZXhwcigpOwotICAgICAgICBpZiAoY3VydG9rICE9ICcpJykgewotICAgICAgICAg ICAgaWYgKGNtZGx2bCA9PSAwICYmICF4X2lmbnVtICYmICF4ZXJyb3IpCi0gICAgICAgICAgICAg IHByaW50ZigiP01pc3NpbmcgcmlnaHQgcGFyZW50aGVzaXNcbiIpOwotICAgICAgICAgICAgeGVy cm9yID0gMTsKLSAgICAgICAgfQotICAgICAgICBkZWJ1ZyhGMTEwLCJHRVRUT0sgU0lNUExFU1Qg KCkiLHAsMCk7Ci0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoY21kbHZsID09IDAgJiYgIXhf aWZudW0gJiYgIXhlcnJvcikKLSAgICAgICAgICBwcmludGYoIj9PcGVyYXRvciB1bmV4cGVjdGVk XG4iKTsKLSAgICAgICAgeGVycm9yID0gMTsKLSAgICB9Ci0gICAgY3VydG9rID0gZ2V0dG9rKCk7 Ci19Ci0KLS8qCi0gKiBzaW1wbGVyIDo6PSBzaW1wbGVzdCB8IHNpbXBsZXN0ICEKLSAqCi0gKi8K LXN0YXRpYyBWT0lECi1zaW1wbGVyKCkgewotICAgIHNpbXBsZXN0KCk7Ci0gICAgaWYgKGN1cnRv ayA9PSAnIScpIHsKLSAgICAgICAgY3VydG9rID0gZ2V0dG9rKCk7Ci0gICAgICAgIGV4cHZhbCA9 IGZhY3QoZXhwdmFsKTsKLSAgICB9Ci19Ci0KLS8qCi0gKiBzaW1wbGUgOjo9IHstLH4sIX0gc2lt cGxlciB8IHNpbXBsZXIKLSAqCi0gKi8KLQotc3RhdGljIFZPSUQKLXNpbXBsZSgpIHsKLSAgICBp ZiAoY3VydG9rID09ICctJyB8fCBjdXJ0b2sgPT0gJ34nIHx8IGN1cnRvayA9PSAnIScgfHwgY3Vy dG9rID09ICcrJykgewotICAgICAgICBpbnQgb3AgPSBjdXJ0b2s7Ci0gICAgICAgIGN1cnRvayA9 IGdldHRvaygpOyAgICAgICAgICAgICAgLyogc2tpcCBvdmVyIC0gc2lnbiAqLwotICAgICAgICBz aW1wbGVyKCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIHBhcnNlIHRoZSBmYWN0b3IgYWdhaW4g Ki8KLSAgICAgICAgaWYgKG9wICE9ICcrJykKLSAgICAgICAgICBleHB2YWwgPSAob3AgPT0gJy0n KSA/IC1leHB2YWwgOiAoKG9wID09ICchJykgPyAhZXhwdmFsIDogfmV4cHZhbCk7Ci0gICAgfSBl bHNlIHNpbXBsZXIoKTsKLX0KLQotLyogIEQgQyBMIEEgUiBSIEEgWSAgLS0gIERlY2xhcmUgYW4g YXJyYXkgICovCi0vKgotICBDYWxsIHdpdGg6Ci0gICBjaGFyIGEgPSBzaW5nbGUgY2hhcmFjdGVy IGRlc2lnbmF0b3IgZm9yIHRoZSBhcnJheSwgZS5nLiAiYSIuCi0gICBpbnQgIG4gPSBzaXplIG9m IGFycmF5LiAgLTEgbWVhbnMgdG8gdW5kZWNsYXJlIHRoZSBhcnJheS4KLSAgUmV0dXJuczoKLSAg IDAgb3IgZ3JlYXRlciBvbiBzdWNjZXNzLCBoYXZpbmcgY3JlYXRlZCB0aGUgcmVxdWVzdGVkIGFy cmF5IHdpdGgKLSAgICAgd2l0aCBuKzEgZWxlbWVudHMsIDAuLm4uICBJZiBhbiBhcnJheSBvZiB0 aGUgc2FtZSBuYW1lIGV4aXN0ZWQKLSAgICAgcHJldmlvdXNseSwgaXQgaXMgZGVzdHJveWVkLiAg VGhlIG5ldyBhcnJheSBoYXMgYWxsIGl0cyBlbGVtZW50cwotICAgICBpbml0aWFsaXplZCB0byBO VUxMIHBvaW50ZXJzLiAgV2hlbiBhbiBhcnJheSBpcyBzdWNjZXNzZnVsbHkgY3JlYXRlZCwKLSAg ICAgdGhlIHJldHVybiB2YWx1ZSBpcyBpdHMgaW5kZXggKDAgPSAnYScsIDEgPSAnYicsIGFuZCBz byBvbi4pCi0gIC0xIG9uIGZhaWx1cmUgKGJlY2F1c2UgJ2EnIG91dCBvZiByYW5nZSBvciBtYWxs b2MgZmFpbHVyZSkuCi0qLwotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWRjbGFycmF5KGNoYXIgYSwg aW50IG4pCi0jZWxzZQotZGNsYXJyYXkoYSxuKSBjaGFyIGE7IGludCBuOwotI2VuZGlmIC8qIENL X0FOU0lDICovCi0vKiBkY2xhcnJheSAqLyB7Ci0gICAgY2hhciBjLCAqKnA7IGludCBpLCBuMiwg cmM7Ci0KLSAgICBpZiAoYSA+IDYzICYmIGEgPCA5MSkgYSArPSAzMjsgICAgICAvKiBDb252ZXJ0 IGxldHRlcnMgdG8gbG93ZXJjYXNlICovCi0gICAgaWYgKGEgPCBBUlJBWUJBU0UgfHwgYSA+IDEy MikgICAgICAgLyogVmVyaWZ5IG5hbWUgKi8KLSAgICAgIHJldHVybigtMSk7Ci0KLSAgICBpZiAo biA8IDApICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBhcmcgKi8KLSAgICAgIHJl dHVybigtMSk7Ci0gICAgaWYgKG4rMSA8IDApICAgICAgICAgICAgICAgICAgICAgICAgLyogTUFY SU5UKzEgd3JhcHMgYXJvdW5kICovCi0gICAgICByZXR1cm4oLTEpOwotCi0gICAgYyA9IGE7Ci0g ICAgYSAtPSBBUlJBWUJBU0U7ICAgICAgICAgICAgICAgICAgICAgLyogQ29udmVydCBuYW1lIHRv IG51bWJlciAqLwotICAgIHJjID0gYTsJCQkJLyogQXJyYXkgaW5kZXggd2lsbCBiZSByZXR1cm4g Y29kZSAqLwotICAgIGlmICgocCA9IGFfcHRyW2FdKSAhPSBOVUxMKSB7ICAgICAgIC8qIERlbGV0 ZSBvbGQgYXJyYXkgb2Ygc2FtZSBuYW1lICovCi0gICAgICAgIGlmIChhX2xpbmtbYV0gPiAtMSkg eyAgICAgICAgICAgLyogSXMgaXQgYSBsaW5rPyAqLwotICAgICAgICAgICAgaWYgKG4gPT0gMCkg eyAgICAgICAgICAgICAgIC8qIElmIHdlJ3JlIGp1c3QgZGVsZXRpbmcgaXQgKi8KLSAgICAgICAg ICAgICAgICBhX3B0clthXSA9IChjaGFyICoqKSBOVUxMOyAvKiBjbGVhciBhbGwgdGhlIGluZm8u ICovCi0gICAgICAgICAgICAgICAgYV9kaW1bYV0gPSAwOwotICAgICAgICAgICAgICAgIGFfbGlu a1thXSA9IC0xOwotICAgICAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAgICAgIH0gICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgZGVsZXRpbmcgKi8KLSAgICAgICAgICAgIGEg PSBhX2xpbmtbYV07ICAgICAgICAgICAgICAvKiBTd2l0Y2ggdG8gbGlua2VkLXRvIGFycmF5ICov Ci0gICAgICAgIH0KLSAgICAgICAgbjIgPSBhX2RpbVthXTsgICAgICAgICAgICAgICAgICAvKiBS ZWFsIGFycmF5ICovCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPD0gbjI7IGkrKykgeyAgICAgLyog Rmlyc3QgZGVsZXRlIGl0cyBlbGVtZW50cyAqLwotICAgICAgICAgICAgaWYgKHBbaV0pIHsKLSAg ICAgICAgICAgICAgICBmcmVlKHBbaV0pOwotICAgICAgICAgICAgICAgIHBbaV0gPSBOVUxMOwot ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZyZWUoKGNoYXIgKilhX3B0clthXSk7 ICAgICAgICAgLyogVGhlbiB0aGUgZWxlbWVudCBsaXN0ICovCi0gICAgICAgIGlmIChuID09IDAp IHsgICAgICAgICAgICAgICAgICAgLyogSWYgdW5kZWNsYXJpbmcgdGhpcyBhcnJheS4uLiAqLwot ICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyMiAtIEFSUkFZQkFTRTsgaSsrKSB7IC8qIEFu eSBsaW5rZWQgYXJyYXlzPyAqLwotICAgICAgICAgICAgICAgIGlmIChpICE9IGEgJiYgYV9saW5r W2ldID09IGEpIHsgICAgIC8qIEZpbmQgdGhlbSAqLwotICAgICAgICAgICAgICAgICAgICBhX3B0 cltpXSA9IChjaGFyICoqKSBOVUxMOyAgICAgIC8qIGFuZCByZW1vdmUgdGhlbSAqLwotICAgICAg ICAgICAgICAgICAgICBhX2RpbVtpXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGFfbGlua1tp XSA9IC0xOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg ICAgICBhX3B0clthXSA9IChjaGFyICoqKSBOVUxMOyAgICAgIC8qIFJlbW92ZSBwb2ludGVyIHRv IGVsZW1lbnQgbGlzdCAqLwotICAgICAgICBhX2RpbVthXSA9IDA7ICAgICAgICAgICAgICAgICAg IC8qIFNldCBkaW1lbnNpb24gYXQgemVyby4gKi8KLSAgICAgICAgYV9saW5rW2FdID0gLTE7ICAg ICAgICAgICAgICAgICAvKiBVbnNldCBsaW5rIHdvcmQgKi8KLSAgICB9Ci0gICAgaWYgKG4gPCAw KQkJCQkvKiBJZiBvbmx5IHVuZGVjbGFyaW5nLCAqLwotICAgICAgcmV0dXJuKDApOwkJCS8qICB3 ZSdyZSBkb25lLiAqLwotICAgIHAgPSAoY2hhciAqKikgbWFsbG9jKChuKzEpICogc2l6ZW9mKGNo YXIgKiopKTsgLyogQWxsb2NhdGUgZm9yIG5ldyBhcnJheSAqLwotICAgIGlmIChwID09IE5VTEwp IHJldHVybigtMSk7ICAgICAgICAgIC8qIENoZWNrICovCi0gICAgYV9wdHJbYV0gPSBwOyAgICAg ICAgICAgICAgICAgICAgICAgLyogU2F2ZSBwb2ludGVyIHRvIG1lbWJlciBsaXN0ICovCi0gICAg YV9kaW1bYV0gPSBuOyAgICAgICAgICAgICAgICAgICAgICAgLyogU2F2ZSBkaW1lbnNpb24gKi8K LSAgICBmb3IgKGkgPSAwOyBpIDw9IG47IGkrKykgICAgICAgICAgICAvKiBJbml0aWFsaXplIG1l bWJlcnMgdG8gbnVsbCAqLwotICAgICAgcFtpXSA9IE5VTEw7Ci0gICAgZm9yIChpID0gMDsgaSA8 IChpbnQpICd6JyAtIEFSUkFZQkFTRTsgaSsrKSB7IC8qIEFueSBsaW5rZWQgYXJyYXlzPyAqLwot ICAgICAgICBpZiAoaSAhPSBhICYmIGFfbGlua1tpXSA9PSBhKSB7IC8qIEZpbmQgYW5kIHVwZGF0 ZSB0aGVtICovCi0gICAgICAgICAgICBhX3B0cltpXSA9IHA7Ci0gICAgICAgICAgICBhX2RpbVtp XSA9IG47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuKHJjKTsKLX0KLQotLyogIFggQSBS IFIgQSBZICAtLSBDb252ZXJ0IGFycmF5IG5hbWUgdG8gYXJyYXkgaW5kZXggICovCi0KLWludAot eGFycmF5KHMpIGNoYXIgKiBzOyB7Ci0gICAgY2hhciBidWZbOF07Ci0gICAgaW50IHg7Ci0gICAg Y2hhciBjOwotCi0gICAgaWYgKCFzKSBzID0gIiI7Ci0gICAgZGVidWcoRjExMCwieGFycmF5Iixz LDApOwotICAgIGlmICghKnMpCi0gICAgICByZXR1cm4oLTEpOwotICAgIHggPSBzdHJsZW4ocyk7 Ci0KLSAgICBidWZbMF0gPSBOVUw7Ci0gICAgYnVmWzFdID0gTlVMOwotICAgIGJ1ZlsyXSA9IHNb MF07Ci0gICAgYnVmWzNdID0gKHggPiAwKSA/IHNbMV0gOiBOVUw7Ci0gICAgYnVmWzRdID0gKHgg PiAxKSA/IHNbMl0gOiBOVUw7Ci0gICAgYnVmWzVdID0gKHggPiAyKSA/IHNbM10gOiBOVUw7Ci0g ICAgYnVmWzZdID0gTlVMOwotICAgIGRlYnVnKEYxMTAsInhhcnJheSBidWZbM10iLCZidWZbM10s MCk7Ci0gICAgcyA9IGJ1ZisyOwotICAgIGlmICgqcyA9PSAnJicpIHsKLSAgICAgICAgYnVmWzFd ID0gQ01EUTsKLSAgICAgICAgcy0tOwotICAgIH0gZWxzZSBpZiAoKnMgIT0gQ01EUSkgewotICAg ICAgICBidWZbMF0gPSBDTURROwotICAgICAgICBidWZbMV0gPSAnJic7Ci0gICAgICAgIHMgPSBi dWY7Ci0gICAgfQotICAgIGRlYnVnKEYxMTAsInhhcnJheSBzIixzLDApOwotICAgIGMgPSAqKHMr Mik7Ci0gICAgaWYgKGlzdXBwZXIoYykpCi0gICAgICBjID0gdG9sb3dlcihjKTsKLSAgICBpZiAo YyA9PSAnQCcpCi0gICAgICBjID0gOTY7Ci0gICAgeCA9IChpbnQpYyAtIEFSUkFZQkFTRTsKLSAg ICBpZiAoKihzKzMpID09ICdbJykKLSAgICAgICoocyszKSA9IE5VTDsKLSAgICBpZiAoeCA8IDAp IHsKLQlyZXR1cm4oLTEpOwotICAgIH0KLSAgICBpZiAoeCA+ICgneicgLSBBUlJBWUJBU0UpKSB7 Ci0JZGVidWcoRjEwMSwieGFycmF5IHggb3V0IG9mIHJhbmdlIiwiIix4KTsKLQlyZXR1cm4oLTEp OwotICAgIH0KLSAgICBpZiAoKihzKzMpKSB7Ci0JZGVidWcoRjExMCwieGFycmF5IHN5bnRheCIs cywwKTsKLQlyZXR1cm4oLTEpOwotICAgIH0KLSAgICByZXR1cm4oeCk7Ci19Ci0KLS8qCi0gIGJv dW5kc3BhaXIoKSAtLSBwYXJzZXMgYmxhaFtuOm1dCi0KLSAgRm9yIHVzZSB3aXRoIGFycmF5IHNl Z21lbnQgc3BlY2lmaWVycyBhbmQgY29tcGFjdCBzdWJzdHJpbmcgbm90YXRpb24uCi0gIElnbm9y ZXMgdGhlICJibGFoIiBwYXJ0LCBnZXRzIHRoZSB2YWx1ZXMgb2YgbiBhbmQgbSwgd2hpY2ggY2Fu IGJlCi0gIG51bWJlcnMsIHZhcmlhYmxlcywgb3IgYXJpdGhtZXRpYyBleHByZXNzaW9uczsgYW55 dGhpbmcgdGhhdCByZXNvbHZlcwotICB0byBhIG51bWJlci4KLQotICBDYWxsIHdpdGg6Ci0gICBz ICAgIC0gc3RyaW5nIHRvIHBhcnNlCi0gICBzZXAgIC0gYXJyYXkgb2YgcGVybWlzc2libGUgYm91 bmRzIHNlcGFyYXRvciBjaGFycwotICAgbG8gICAtIHBvaW50ZXIgdG8gbG93LWJvdW5kIHJlc3Vs dCAob3IgLTEpCi0gICBoaSAgIC0gcG9pbnRlciB0byBoaS1ib3VuZCByZXN1bHQgKG9yIC0xKQot ICAgenogICAtIHBvaW50ZXIgdG8gc2VwYXJhdG9yIGNoYXIgdGhhdCB3YXMgZW5jb3VudGVyZWQg KG9yIE5VTCkKLSAgUmV0dXJuczoKLSAgIC0xIG9uIGZhaWx1cmUKLSAgICAwIG9uIHN1Y2Nlc3MK LSovICAgICAgCi0KLWludAotI2lmZGVmIENLX0FOU0lDCi1ib3VuZHNwYWlyKGNoYXIgKnMsIGNo YXIgKnNlcCwgaW50ICpsbywgaW50ICpoaSwgY2hhciAqenopCi0jZWxzZQotYm91bmRzcGFpcihz LHNlcCxsbyxoaSx6eikgY2hhciAqcywgKnNlcCwgKnp6OyBpbnQgKmxvLCAqaGk7Ci0jZW5kaWYg LyogQ0tfQU5TSUMgKi8KLXsKLSAgICBpbnQgaSwgeCwgeSwgcmFuZ2VbMl0sIGJjID0gMDsKLSAg ICBjaGFyIGMgPSBOVUwsICpzMiA9IE5VTEwsIGJ1ZlsyNTZdLCAqcCwgKnEsICpyLCAqZVsyXSwg KnRtcCA9IE5VTEw7Ci0KLSAgICBkZWJ1ZyhGMTEwLCJib3VuZHNwYWlyIHMiLHMsMCk7Ci0gICAg ZGVidWcoRjExMCwiYm91bmRzcGFpciBzZXAiLHNlcCwwKTsKLQotICAgICpsbyA9IC0xOyAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgYm91bmRzICovCi0gICAgKmhpID0gLTE7 Ci0gICAgKnp6ID0gMDsJCQkJLyogRGVmYXVsdCBib3VuZHMgc2VwYXJhdG9yICovCi0KLSAgICBy YW5nZVswXSA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAvKiBJdCdzIE9LIC0tIGdldCBjb250 ZW50cyAqLwotICAgIHJhbmdlWzFdID0gLTE7ICAgICAgICAgICAgICAgICAgICAgIC8qIG9mIHN1 YnNjcmlwdCBicmFja2V0cyAqLwotICAgIGlmICghcykgcyA9ICIiOwotICAgIGlmICghKnMpCi0g ICAgICByZXR1cm4oLTEpOwotICAgIG1ha2VzdHIoJnRtcCxzKTsgICAgICAgICAgICAgICAgICAg IC8qIE1ha2UgYSBwb2tlYWJsZSBjb3B5ICovCi0gICAgcCA9IHRtcDsKLSAgICBxID0gTlVMTDsK LSAgICByID0gTlVMTDsKLSAgICBmb3IgKHAgPSBzOyAqcDsgcCsrKSB7CQkvKiBHZXQgdGhlIHR3 byBlbGVtZW50cyAqLwotCWlmICgqcCA9PSAnWycpIHsKLQkgICAgYmMrKzsJCQkvKiBCcmFja2V0 IGNvdW50ZXIgKi8KLQkgICAgaWYgKGJjID09IDEgJiYgIXEpIHEgPSBwKzE7Ci0JfSBlbHNlIGlm ICgqcCA9PSAnXScpIHsKLQkgICAgYmMtLTsKLQkgICAgaWYgKGJjID09IDAgJiYgcSkgKnAgPSBO VUw7Ci0JfSBlbHNlIGlmIChiYyA9PSAxKSB7CQkvKiBJZiB3aXRoaW4gYnJhY2tlcnMgKi8KLQkg ICAgczIgPSBja3N0cmNocihzZXAsKnApOwkvKiBDaGVjayBmb3Igc2VwYXJhdG9yICovCi0JICAg IGlmIChzMikgewotCQlkZWJ1ZyhGMDAwLCJib3VuZHNwYWlyICpzMiIsIiIsKnMyKTsKLQkJaWYg KGMpIHsgICAgICAgIAotCQkgICAgZGVidWcoRjAwMCwiYm91bmRzcGFpciIsIlRvbyBtYW55IHNl cGFyYXRvcnMiLCpzMik7Ci0JCSAgICBtYWtlc3RyKCZ0bXAsTlVMTCk7Ci0JCSAgICByZXR1cm4o LTEpOwotCQl9Ci0JCWMgPSAqczI7CQkvKiBTZXBhcmF0b3IgY2hhcmFjdGVyICovCi0JCSpwID0g TlVMOwotCQlyID0gcCsxOwotCSAgICB9Ci0JfQotICAgIH0KLSAgICBpZiAoYmMgPT0gMCAmJiAh cSkgewotCS8qIFRoaXMgYWxsb3dzIHN1Y2ggY29uc3RydWN0aW9ucyBhcyAic2hvdyBhcnJheSBh IiAqLwotCWRlYnVnKEYxMTAsImJvdW5kc3BhaXIiLCJubyBicmFja2V0cyIsMCk7Ci0JbWFrZXN0 cigmdG1wLE5VTEwpOwotCXJldHVybigwKTsKLSAgICB9Ci0gICAgaWYgKGJjICE9IDAgfHwgIXEp IHsKLQlkZWJ1ZyhGMTEwLCJib3VuZHNwYWlyIiwidW5iYWxhbmNlZCBvciBtaXNzaW5nIGJyYWNr ZXRzIiwwKTsKLQltYWtlc3RyKCZ0bXAsTlVMTCk7Ci0JcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAg aWYgKCFxKSBxID0gIiI7Ci0gICAgaWYgKCEqcSkgcSA9ICItMSI7Ci0gICAgaWYgKCFyKSByID0g IiI7Ci0gICAgaWYgKCEqcikgciA9ICItMSI7Ci0KLSAgICBlWzBdID0gcTsKLSAgICBlWzFdID0g cjsKLQotICAgIGRlYnVnKEYwMDAsImJvdW5kc3BhaXIgYyIsIiIsYyk7Ci0gICAgZGVidWcoRjEx MCwiYm91bmRzcGFpciBxIixxLDApOwotICAgIGRlYnVnKEYxMTAsImJvdW5kc3BhaXIgciIsciww KTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCAyICYmIGVbaV07IGkrKykgewotCXkgPSAyNTU7CQkJ LyogRXhwYW5kIHZhcmlhYmxlcywgZXRjLiAqLwotCXMgPSBidWY7Ci0JenpzdHJpbmcoZVtpXSwm cywmeSk7Ci0JcyA9IGV2YWx4KGJ1Zik7CQkJLyogRXZhbHVhdGUgaXQgYXJpdGhtZXRpY2FsbHkg Ki8KLQlpZiAocykgaWYgKCpzKQotCSAgY2tzdHJuY3B5KGJ1ZixzLDI1Nik7Ci0JaWYgKCFjaGtu dW0oYnVmKSkgewkJLyogRGlkIHdlIGdldCBhIG51bWJlcj8gKi8KLQkgICAgZGVidWcoRjExMCwi Ym91bmRzcGFpciBlbGVtZW50IG5vdCBudW1lcmljIixidWYsMCk7Ci0JICAgIG1ha2VzdHIoJnRt cCxOVUxMKTsJCS8qIE5vLCBmYWlsLiAqLwotCSAgICByZXR1cm4oLTEpOwotCX0KLQlyYW5nZVtp XSA9IGF0b2koYnVmKTsKLSAgICB9Ci0gICAgbWFrZXN0cigmdG1wLE5VTEwpOyAgICAgICAgICAg ICAgICAgLyogRnJlZSB0ZW1wb3JhcnkgcG9rZWQgc3RyaW5nICovCi0gICAgKmxvID0gcmFuZ2Vb MF07ICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIHdoYXQgd2UgZ290ICovCi0gICAgKmhp ID0gcmFuZ2VbMV07Ci0gICAgKnp6ID0gYzsKLSAgICBkZWJ1ZyhGMTAxLCJib3VuZHNwYWlyIGxv IiwiIiwqbG8pOwotICAgIGRlYnVnKEYxMDEsImJvdW5kc3BhaXIgaGkiLCIiLCpoaSk7Ci0gICAg cmV0dXJuKDApOwotfQotCi0vKiAgQSBSIFIgQSBZIEIgTyBVIE4gRCBTICAtLSAgUGFyc2UgYXJy YXkgc2VnbWVudCBub3RhdGlvbiBcJmFbbjptXSAgKi8KLQotLyoKLSAgQ2FsbCB3aXRoIHMgPSBh cnJheSByZWZlcmVuY2UsIHBsdXMgdHdvIHBvaW50ZXJzIHRvIGludHMuCi0gIFJldHVybnMgLTEg b24gZXJyb3IsIG9yIGFycmF5IGluZGV4LCB3aXRoIHRoZSB0d28gaW50cyBzZXQgYXMgZm9sbG93 czoKLSAgIFwmYVtdICAgICAtMSwgLTEKLSAgIFwmYVszXSAgICAgMywgLTEKLSAgIFwmYVszOjE3 XSAgMywgMTcKLSAgVGhlIGFycmF5IG5lZWQgbm90IGJlIGRlY2xhcmVkIC0tIHRoaXMgcm91dGlu ZSBpcyBqdXN0IGZvciBwYXJzaW5nLgotKi8KLWludAotYXJyYXlib3VuZHMocyxsbyxoaSkgY2hh ciAqIHM7IGludCAqIGxvLCAqIGhpOyB7Ci0gICAgaW50IGksIHgsIHksIHJhbmdlWzJdOwotICAg IGNoYXIgenosIGJ1ZlsyNTZdLCAqIHAsICogcTsKLSAgICBjaGFyICogdG1wID0gTlVMTDsKLQot ICAgICpsbyA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgYm91bmRz ICovCi0gICAgKmhpID0gLTE7Ci0KLSAgICBpZiAoIXMpIHMgPSAiIjsgICAgICAgICAgICAgICAg ICAgICAvKiBEZWZlbnNlIGRlIG51bGwgYXJncyAqLwotICAgIGlmICghKnMpCi0gICAgICByZXR1 cm4oLTEpOwotCi0gICAgeCA9IHhhcnJheShzKTsgICAgICAgICAgICAgICAgICAgICAgLyogQ2hl Y2sgYmFzaWMgc3RydWN0dXJlICovCi0gICAgZGVidWcoRjExMSwiYXJyYXlib3VuZHMgeGFycmF5 IixzLHgpOwotICAgIGlmICh4IDwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBP SywgZmFpbC4gKi8KLSAgICAgIHJldHVybigtMSk7Ci0gICAgeSA9IGJvdW5kc3BhaXIocywiOiIs bG8saGksJnp6KTsKLSAgICBkZWJ1ZyhGMTExLCJhcnJheWJvdW5kcyBib3VuZHNwYWlyIixzLHkp OwotICAgIGRlYnVnKEYxMDEsImFycmF5Ym91bmRzIGxvIiwiIiwqbG8pOwotICAgIGRlYnVnKEYx MDEsImFycmF5Ym91bmRzIGhpIiwiIiwqaGkpOwotICAgIGlmICh5IDwgMCkJCQkJLyogR2V0IGJv dW5kcyAqLwotICAgICAgcmV0dXJuKC0xKTsKLSAgICByZXR1cm4oeCk7Ci19Ci0KLS8qICBBIFIg UiBBIFkgTiBBIE0gIC0tICBQYXJzZSBhbiBhcnJheSBuYW1lICAqLwotCi0vKgotICBDYWxsIHdp dGggcG9pbnRlciB0byBzdHJpbmcgdGhhdCBzdGFydHMgd2l0aCB0aGUgYXJyYXkgcmVmZXJlbmNl LgotICBTdHJpbmcgbWF5IGJlZ2luIHdpdGggZWl0aGVyIFwmIG9yIGp1c3QgJi4KLSAgT24gc3Vj Y2VzcywKLSAgICBSZXR1cm5zIGxldHRlciBJRCAoYWx3YXlzIGxvd2VyY2FzZSkgaW4gYXJndW1l bnQgYywKLSAgICAgIHdoaWNoIGNhbiBhbHNvIGJlIGFjY2VudCBncmF2ZSAoYCA9IDk2OyAnQCcg aXMgY29udmVydGVkIHRvIGdyYXZlKTsKLSAgICBEaW1lbnNpb24gb3Igc3Vic2NyaXB0IGluIGFy Z3VtZW50IG47Ci0gICAgSU1QT1JUQU5UOiBUaGVzZSBhcmd1bWVudHMgbXVzdCBiZSBwcm92aWRl ZCBieSB0aGUgY2FsbGVyIGFzIGFkZHJlc3NlcwotICAgIG9mIGludHMgKG5vdCBjaGFycyksIGZv ciBleGFtcGxlOgotICAgICAgY2hhciAqczsgaW50IHgsIHk7Ci0gICAgICBhcnJheW5hbShzLCZ4 LCZ5KTsKLSAgT24gZmFpbHVyZSwgcmV0dXJucyBhIG5lZ2F0aXZlIG51bWJlciwgd2l0aCBhcmdz IG4gYW5kIGMgc2V0IHRvIHplcm8uCi0qLwotaW50Ci1hcnJheW5hbShzcyxjLG4pIGNoYXIgKnNz OyBpbnQgKmM7IGludCAqbjsgewotICAgIGludCBpLCB5LCBwcCwgbGVuOwotICAgIGNoYXIgeDsK LSAgICBjaGFyICpzLCAqcCwgKnN4LCAqdm5wOwotICAgIC8qIE9uIHN0YWNrIHRvIGFsbG93IGZv ciByZWN1cnNpdmUgY2FsbHMuLi4gKi8KLSAgICBjaGFyIHZuYnVmW0FSUkFZUkVGTEVOKzFdOyAg ICAgICAgICAvKiBFbnRpcmUgYXJyYXkgcmVmZXJlbmNlICovCi0gICAgY2hhciBzc2J1ZltBUlJB WVJFRkxFTisxXTsgICAgICAgICAgLyogU3Vic2NyaXB0IGluICJwbGFpbiB0ZXh0IiAqLwotICAg IGNoYXIgc3hidWZbMTZdOyAgICAgICAgICAgICAgICAgICAgIC8qIEV2YWx1YXRlZCBzdWJzY3Jp cHQgKi8KLQotICAgICpjID0gKm4gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRp YWxpemUgcmV0dXJuIHZhbHVlcyAqLwotICAgIGxlbiA9IHN0cmxlbihzcyk7Ci0gICAgZm9yIChw cCA9IDAsaSA9IDA7IGkgPCBsZW47IGkrKykgeyAgICAgICAgICAvKiBDaGVjayBsZW5ndGggKi8K LSAgICAgICAgaWYgKHNzW2ldID09ICdbJykgewotICAgICAgICAgICAgcHArKzsKLSAgICAgICAg fSBlbHNlIGlmIChzc1tpXSA9PSAnXScpIHsKLSAgICAgICAgICAgIGlmICgtLXBwID09IDApCi0g ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChpID4gQVJSQVlS RUZMRU4pIHsKLSAgICAgICAgcHJpbnRmKCI/QXJyYXkgcmVmZXJlbmNlIHRvbyBsb25nIC0gJXNc biIsc3MpOwotICAgICAgICByZXR1cm4oLTkpOwotICAgIH0KLSAgICBja3N0cm5jcHkodm5idWYs c3MsQVJSQVlSRUZMRU4pOwotICAgIHZucCA9IHZuYnVmOwotICAgIGlmICh2bmJ1ZlswXSA9PSBD TURRICYmIHZuYnVmWzFdID09ICcmJykgdm5wKys7Ci0gICAgaWYgKCp2bnAgIT0gJyYnKSB7Ci0g ICAgICAgIHByaW50ZigiP05vdCBhbiBhcnJheSAtICVzXG4iLHZuYnVmKTsKLSAgICAgICAgcmV0 dXJuKC05KTsKLSAgICB9Ci0gICAgeCA9ICoodm5wICsgMSk7ICAgICAgICAgICAgICAgICAgICAg LyogRm9sZCBjYXNlIG9mIGFycmF5IG5hbWUgKi8KLQotICAgIC8qIFdlIGRvbid0IHVzZSBpc3Vw cGVyICYgdG9sb3dlciBoZXJlIG9uIHB1cnBvc2UgYmVjYXVzZSB0aGVzZSAqLwotICAgIC8qIHdv dWxkIHByb2R1Y2UgdW5kZXNpcmVkIGVmZmVjdHMgd2l0aCBhY2NlbnRlZCBsZXR0ZXJzLiAqLwot ICAgIGlmICh4ID4gNjMgJiYgeCA8IDkxKSB4ICA9ICoodm5wICsgMSkgPSAoY2hhcikgKHggKyAz Mik7Ci0gICAgaWYgKCh4IDwgQVJSQVlCQVNFKSB8fCAoeCA+IDEyMikgfHwgKCoodm5wKzIpICE9 ICdbJykpIHsKLSAgICAgICAgaWYgKG1zZ2ZsZykgewotICAgICAgICAgICAgcHJpbnRmKCI/SW52 YWxpZCBmb3JtYXQgZm9yIGFycmF5IG5hbWUgLSAlc1xuIix2bmJ1Zik7Ci0gICAgICAgICAgICBy ZXR1cm4oLTkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICByZXR1cm4oLTIpOwotICAgIH0K LSAgICAqYyA9IHg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gdGhlIGFy cmF5IG5hbWUgKi8KLSAgICBzID0gdm5wKzM7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBH ZXQgZGltZW5zaW9uICovCi0gICAgcCA9IHNzYnVmOwotICAgIHBwID0gMTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEJyYWNrZXQgY291bnRlciAqLwotICAgIGZvciAoaSA9IDA7IGkg PCBBUlJBWVJFRkxFTiAmJiAqcyAhPSBOVUw7IGkrKykgeyAvKiBDb3B5IHVwIHRvIF0gKi8KLSAg ICAgICAgaWYgKCpzID09ICdbJykgcHArKzsKLSAgICAgICAgaWYgKCpzID09ICddJyAmJiAtLXBw ID09IDApIGJyZWFrOwotICAgICAgICAqcCsrID0gKnMrKzsKLSAgICB9Ci0gICAgaWYgKCpzICE9 ICddJykgewotICAgICAgICBwcmludGYoIj9ObyBjbG9zaW5nIGJyYWNrZXQgb24gYXJyYXkgZGlt ZW5zaW9uIC0gJXNcbiIsdm5idWYpOwotICAgICAgICByZXR1cm4oLTkpOwotICAgIH0KLSAgICBw LS07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUcmltIHdoaXRlc3BhY2UgZnJv bSBlbmQgKi8KLSAgICB3aGlsZSAoKnAgPT0gU1AgfHwgKnAgPT0gSFQpCi0gICAgICBwLS07Ci0g ICAgcCsrOwotICAgICpwID0gTlVMOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1p bmF0ZSBzdWJzY3JpcHQgd2l0aCBudWxsICovCi0gICAgcCA9IHNzYnVmOyAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogUG9pbnQgdG8gYmVnaW5uaW5nIG9mIHN1YnNjcmlwdCAqLwotICAgIHdo aWxlICgqcCA9PSBTUCB8fCAqcCA9PSBIVCkgICAgICAgIC8qIFRyaW0gd2hpdGVzcGFjZSBmcm9t IGJlZ2lubmluZyAqLwotICAgICAgcCsrOwotICAgIHN4ID0gc3hidWY7ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFdoZXJlIHRvIHB1dCBleHBhbmRlZCBzdWJzY3JpcHQgKi8KLSAgICB5ID0g MTY7Ci0gICAgewotCS8qIEV2ZW4gaWYgVkFSSUFCTEUtRVZBTFVBVElPTiBTSU1QTEUgdXNlIFJF Q1VSU0lWRSBmb3Igc3Vic2NyaXB0cyAqLwotCS8qIE5PVEU6IFRoaXMgaXMgdnVsbmVyYWJsZSB0 byBTSUdJTlQgYW5kIHdoYXRub3QuLi4gKi8KLQlpbnQgdG1wID0gdmFyZXZhbDsJCS8qIFNhdmUg VkFSSUFCTEUtRVZBTFVBVElPTiBzZXR0aW5nICovCi0JdmFyZXZhbCA9IDE7CQkJLyogRm9yY2Ug aXQgdG8gUkVDVVJTSVZFICovCi0JenpzdHJpbmcocCwmc3gsJnkpOwkJLyogQ29udmVydCB2YXJp YWJsZXMsIGV0Yy4gKi8KLQl2YXJldmFsID0gdG1wOwkJCS8qIFJlc3RvcmUgVkFSSUFCTEUtRVZB TFVBVElPTiAqLwotICAgIH0KLSAgICBzeCA9IHN4YnVmOwotICAgIHdoaWxlICgqc3ggPT0gU1Ap IHN4Kys7Ci0gICAgLyogZGVidWcoRjExMCwiYXJyYXluYW0gc3giLCIiLHN4KTsgKi8KLSAgICBp ZiAoISpzeCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbXB0eSBicmFja2V0cy4uLiAq LwotICAgICAgICAqbiA9IC0xNzsgICAgICAgICAgICAgICAgICAgICAgIC8qIChTZWNyZXQgY29k ZSA6LSkgKi8KLSAgICAgICAgcmV0dXJuKC0yKTsKLSAgICB9Ci0gICAgcCA9IGV2YWxhKHN4KTsg ICAgICAgICAgICAgICAgICAgICAgLyogUnVuIGl0IHRocnUgXGZuZXZhbCgpLi4uICovCi0gICAg aWYgKHApIGlmICgqcCkgY2tzdHJuY3B5KHN4YnVmLHAsMTYpOyAvKiBXZSBrbm93IGl0IGhhcyB0 byBiZSBhIG51bWJlci4gKi8KLQotICAgIGlmICghY2hrbnVtKHN4YnVmKSkgeyAgICAgICAgICAg ICAgIC8qIE1ha2Ugc3VyZSBpdCdzIGFsbCBkaWdpdHMgKi8KLSAgICAgICAgaWYgKG1zZ2ZsZykg ewotICAgICAgICAgICAgcHJpbnRmKCI/QXJyYXkgZGltZW5zaW9uIG9yIHN1YnNjcmlwdCBtaXNz aW5nIG9yIG5vdCBudW1lcmljXG4iKTsKLSAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAg IH0gZWxzZQotICAgICAgICAgIHJldHVybigtMik7Ci0gICAgfQotICAgIGlmICgoeSA9IGF0b2ko c3hidWYpKSA8IDApIHsKLSAgICAgICAgaWYgKGNtZmxncyA9PSAwKSBwcmludGYoIlxuIik7Ci0g ICAgICAgIGlmIChtc2dmbGcpIHsKLSAgICAgICAgICAgIHByaW50ZigiP0FycmF5IGRpbWVuc2lv biBvciBzdWJzY3JpcHQgbm90IHBvc2l0aXZlIG9yIHplcm9cbiIpOwotICAgICAgICAgICAgcmV0 dXJuKC05KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICB9Ci0g ICAgKm4gPSB5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIHRoZSBzdWJz Y3JpcHQgb3IgZGltZW5zaW9uICovCi0gICAgcmV0dXJuKDApOwotfQotCi0vKiBjaGthcnJheSBy ZXR1cm5zIDAgb3IgZ3JlYXRlciBpZiBhcnJheSBleGlzdHMsIG5lZ2F0aXZlIG90aGVyd2lzZSAq LwotCi1pbnQKLWNoa2FycmF5KGEsaSkgaW50IGEsIGk7IHsgICAgICAgICAgICAgICAvKiBDaGVj ayBpZiBhcnJheSBpcyBkZWNsYXJlZCAqLwotICAgIGludCB4OyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIGFuZCBpZiBzdWJzY3JpcHQgaXMgaW4gcmFuZ2UgKi8KLSAgICBpZiAoYSA9 PSA2NCkgYSA9IDk2OyAgICAgICAgICAgICAgICAvKiBDb252ZXJ0IGF0c2lnbiB0byBncmF2ZSBh Y2NlbnQgKi8KLSAgICB4ID0gYSAtIEFSUkFZQkFTRTsgICAgICAgICAgICAgICAgICAvKiBWYWx1 ZXMgbXVzdCBiZSBpbiByYW5nZSA5NS0xMjIgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgaWYgKHgg PT0gMCAmJiBtYWNsdmwgPCAwKSAgICAgICAgICAgLyogTWFjcm8gYXJnIHZlY3RvciBidXQgbm8g bWFjcm8gKi8KLSAgICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgaWYg KHggPCAwIHx8IHggPiAneicgLSBBUlJBWUJBU0UpICAgLyogTm90IGluIHJhbmdlICovCi0gICAg ICByZXR1cm4oLTIpOwotICAgIGlmIChhX3B0clt4XSA9PSBOVUxMKSByZXR1cm4oLTEpOyAgIC8q IE5vdCBkZWNsYXJlZCAqLwotICAgIGlmIChpID4gYV9kaW1beF0pIHJldHVybigtMik7ICAgICAg IC8qIERlY2xhcmVkIGJ1dCBvdXQgb2YgcmFuZ2UuICovCi0gICAgcmV0dXJuKGFfZGltW3hdKTsg ICAgICAgICAgICAgICAgICAgLyogQWxsIG9rLCByZXR1cm4gZGltZW5zaW9uICovCi19Ci0KLSNp ZmRlZiBDT01NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIGlzbid0IHVzZWQu ICovCi1jaGFyICoKLWFycmF5dmFsKGEsaSkgaW50IGEsIGk7IHsgICAgICAgICAgICAgICAvKiBS ZXR1cm4gdmFsdWUgb2YgXCZhW2ldICovCi0gICAgaW50IHg7IGNoYXIgKipwOyAgICAgICAgICAg ICAgICAgICAgLyogKHBvc3NpYmx5IE5VTEwpICovCi0gICAgaWYgKGEgPT0gNjQpIGEgPSA5Njsg ICAgICAgICAgICAgICAgLyogQ29udmVydCBhdHNpZ24gdG8gZ3JhdmUgYWNjZW50ICovCi0gICAg eCA9IGEgLSBBUlJBWUJBU0U7ICAgICAgICAgICAgICAgICAgLyogVmFsdWVzIG11c3QgYmUgaW4g cmFuZ2UgOTUtMTIyICovCi0gICAgaWYgKHggPCAwIHx8IHggPiAyNykgcmV0dXJuKE5VTEwpOyAg LyogTm90IGluIHJhbmdlICovCi0gICAgaWYgKCh4ID4gMCkgJiYgKHAgPSBhX3B0clt4XSkgPT0g TlVMTCkgLyogQXJyYXkgbm90IGRlY2xhcmVkICovCi0gICAgICByZXR1cm4oTlVMTCk7Ci0gICAg aWYgKGkgPiBhX2RpbVt4XSkgICAgICAgICAgICAgICAgICAgLyogU3Vic2NyaXB0IG91dCBvZiBy YW5nZS4gKi8KLSAgICAgIHJldHVybihOVUxMKTsKLSAgICByZXR1cm4ocFtpXSk7ICAgICAgICAg ICAgICAgICAgICAgICAvKiBBbGwgb2ssIHJldHVybiBwb2ludGVyIHRvIHZhbHVlLiAqLwotfQot I2VuZGlmIC8qIENPTU1FTlQgKi8KLQotLyoKLSAgcHVzaGFycmF5KCkgaXMgY2FsbGVkIHdoZW4g YW4gYXJyYXkgbmFtZSBpcyBpbmNsdWRlZCBpbiBhIExPQ0FMIHN0YXRlbWVudC4KLSAgSXQgbW92 ZXMgdGhlIHBvaW50ZXJzIGZyb20gdGhlIGdsb2JhbCBkZWZpbml0aW9uIHRvIHRoZSBzdGFjaywg YW5kIHJlbW92ZXMKLSAgdGhlIGdsb2JhbCBkZWZpbml0aW9uLiAgTGF0ZXIsIGlmIHRoZSBzYW1l IGFycmF5IGlzIGRlY2xhcmVkIGluIHRoZSBsb2NhbAotICBjb250ZXh0LCBpdCBvY2N1cGllcyB0 aGUgZ2xvYmFsIGRlZmluaXRpb24gaW4gdGhlIG5vcm1hbCB3YXkuICBCdXQgd2hlbgotICBwb3Bj bHZsKCkgaXMgY2FsbGVkLCBpdCByZXBsYWNlcyB0aGUgZ2xvYmFsIGRlZmluaXRpb24gd2l0aCB0 aGUgb25lIHNhdmVkCi0gIGhlcmUuICBUaGUgInNlY3JldCBjb2RlIiBpcyB1c2VkIHRvIGluZGlj YXRlIHRvIHBvcGNsdigpIHRoYXQgaXQgc2hvdWxkCi0gIHJlbW92ZSB0aGUgZ2xvYmFsIGFycmF5 IHdoZW4gcG9wcGluZyB0aHJvdWdoIHRoaXMgbGV2ZWwgLS0gb3RoZXJ3aXNlIGlmIGEKLSAgbG9j YWwgYXJyYXkgd2VyZSBkZWNsYXJlZCB0aGF0IGhhZCBubyBjb3VudGVycGFydCBhdCBhbnkgaGln aGVyIGxldmVsLCBpdAotICB3b3VsZCBuZXZlciBiZSBkZWxldGVkLiAgVGhpcyBhbGxvd3MgQWxn b2wtbGlrZSBpbmhlcml0YW5jZSB0byB3b3JrIGJvdGgKLSAgb24gdGhlIHdheSBkb3duIGFuZCBv biB0aGUgd2F5IGJhY2sgdXAuCi0qLwotaW50Ci1wdXNoYXJyYXkoeCx6KSBpbnQgeCwgejsgewot ICAgIGludCB5OwotICAgIGRlYnVnKEYwMDAsInB1c2hhcnJheSB4IiwiIix4KTsKLSAgICBkZWJ1 ZyhGMTAxLCJwdXNoYXJyYXkgeiIsIiIseik7Ci0gICAgeSA9IGNoa2FycmF5KHgseik7Ci0gICAg ZGVidWcoRjEwMSwicHVzaGFycmF5IHkiLCIiLHkpOwotICAgIHggLT0gQVJSQVlCQVNFOyAgICAg ICAgICAgICAgICAgICAgIC8qIENvbnZlcnQgbmFtZSBsZXR0ZXIgdG8gaW5kZXguICovCi0gICAg aWYgKHggPCAwIHx8IHggPiAyNykKLSAgICAgIHJldHVybigtMSk7Ci0gICAgaWYgKHkgPCAwKSB7 Ci0gICAgICAgIGFhX3B0cltjbWRsdmxdW3hdID0gKGNoYXIgKiopIE5VTEw7Ci0gICAgICAgIGFh X2RpbVtjbWRsdmxdW3hdID0gLTIzOyAgICAgICAgLyogU2VjcmV0IGNvZGUgKHNlZSBwb3BjbHZs KCkpICovCi0gICAgfSBlbHNlIHsKLSAgICAgICAgYWFfcHRyW2NtZGx2bF1beF0gPSBhX3B0clt4 XTsKLSAgICAgICAgYWFfZGltW2NtZGx2bF1beF0gPSB5OwotICAgIH0KLSAgICBhX3B0clt4XSA9 IChjaGFyICoqKSBOVUxMOwotICAgIGFfZGltW3hdID0gMDsKLSAgICByZXR1cm4oMCk7Ci19Ci0K LS8qICBQIEEgUiBTIEUgViBBIFIgIC0tICBQYXJzZSBhIHZhcmlhYmxlIG5hbWUgb3IgYXJyYXkg cmVmZXJlbmNlLiAgKi8KLS8qCi0gQ2FsbCB3aXRoOgotICAgcyAgPSBwb2ludGVyIHRvIGNhbmRp ZGF0ZSB2YXJpYWJsZSBuYW1lIG9yIGFycmF5IHJlZmVyZW5jZS4KLSAgICpjID0gYWRkcmVzcyBv ZiBpbnRlZ2VyIGluIHdoaWNoIHRvIHJldHVybiB2YXJpYWJsZSBJRC4KLSAgICppID0gYWRkcmVz cyBvZiBpbnRlZ2VyIGluIHdoaWNoIHRvIHJldHVybiBhcnJheSBzdWJzY3JpcHQuCi0gUmV0dXJu czoKLSAgIC0yOiAgc3ludGF4IGVycm9yIGluIHZhcmlhYmxlIG5hbWUgb3IgYXJyYXkgcmVmZXJl bmNlLgotICAgIDE6ICBzdWNjZXNzZnVsIHBhcnNlIG9mIGEgc2ltcGxlIHZhcmlhYmxlLCB3aXRo IElEIGluIGMuCi0gICAgMjogIHN1Y2Nlc3NmdWwgcGFyc2Ugb2YgYW4gYXJyYXkgcmVmZXJlbmNl LCB3L0lEIGluIGMgYW5kIHN1YnNjcmlwdCBpbiBpLgotKi8KLWludAotcGFyc2V2YXIocyxjLGkp IGNoYXIgKnM7IGludCAqYywgKmk7IHsKLSAgICBjaGFyICpwOwotICAgIGludCB4LHksejsKLQot ICAgIHAgPSBzOwotICAgIGlmICgqcyA9PSBDTURRKSBzKys7ICAgICAgICAgICAgICAgIC8qIFBv aW50IGFmdGVyIGJhY2tzbGFzaCAqLwotCi0gICAgaWYgKCpzICE9ICclJyAmJiAqcyAhPSAnJicp IHsgICAgICAgLyogTWFrZSBzdXJlIGl0J3MgJSBvciAmICovCi0gICAgICAgIHByaW50ZigiP05v dCBhIHZhcmlhYmxlIG5hbWUgLSAlc1xuIixwKTsKLSAgICAgICAgcmV0dXJuKC05KTsKLSAgICB9 Ci0gICAgaWYgKChpbnQpc3RybGVuKHMpIDwgMikgewotICAgICAgICBwcmludGYoIj9JbmNvbXBs ZXRlIHZhcmlhYmxlIG5hbWUgLSAlc1xuIixwKTsKLSAgICAgICAgcmV0dXJuKC05KTsKLSAgICB9 Ci0gICAgaWYgKCpzID09ICclJyAmJiAqKHMrMikgIT0gJ1wwJykgewotICAgICAgICBwcmludGYo Ij9Pbmx5IG9uZSBjaGFyYWN0ZXIgYWZ0ZXIgJyUlJyBpbiB2YXJpYWJsZSBuYW1lLCBwbGVhc2Vc biIpOwotICAgICAgICByZXR1cm4oLTkpOwotICAgIH0KLSAgICBpZiAoKnMgPT0gJyYnICYmICoo cysyKSAhPSAnWycpIHsKLSAgICAgICAgcHJpbnRmKCI/QXJyYXkgc3Vic2NyaXB0IGV4cGVjdGVk IC0gJXNcbiIscCk7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfQotICAgIGlmICgqcyA9PSAn JScpIHsgICAgICAgICAgICAgICAgICAgIC8qIFNpbXBsZSB2YXJpYWJsZS4gKi8KLSAgICAgICAg eSA9ICoocysxKTsgICAgICAgICAgICAgICAgICAgICAvKiBHZXQgdmFyaWFibGUgSUQgbGV0dGVy L2NoYXIgKi8KLSAgICAgICAgaWYgKGlzdXBwZXIoeSkpIHkgLT0gKCdhJy0nQScpOyAvKiBDb252 ZXJ0IHVwcGVyIHRvIGxvd2VyIGNhc2UgKi8KLSAgICAgICAgKmMgPSB5OyAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBTZXQgdGhlIHJldHVybiB2YWx1ZXMuICovCi0gICAgICAgICppID0gLTE7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gYXJyYXkgc3Vic2NyaXB0LiAqLwotICAgICAg ICByZXR1cm4oMSk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiAxID0gc2ltcGxlIHZh cmlhYmxlICovCi0gICAgfQotICAgIGlmICgqcyA9PSAnJicpIHsgICAgICAgICAgICAgICAgICAg IC8qIEFycmF5IHJlZmVyZW5jZS4gKi8KLSAgICAgICAgeSA9IGFycmF5bmFtKHMsJngsJnopOyAg ICAgICAgICAvKiBHbyBwYXJzZSBpdC4gKi8KLSAgICAgICAgZGVidWcoRjEwMSwicGFyc2V2YXIg YXJyYXluYW0iLCIiLHkpOwotICAgICAgICBpZiAoKHkpIDwgMCkgewotICAgICAgICAgICAgaWYg KHkgPT0gLTIpCi0gICAgICAgICAgICAgIHJldHVybihwdXNoYXJyYXkoeCx6KSk7Ci0gICAgICAg ICAgICBpZiAoeSAhPSAtOSkKLSAgICAgICAgICAgICAgcHJpbnRmKCI/SW52YWxpZCBhcnJheSBy ZWZlcmVuY2UgLSAlc1xuIixwKTsKLSAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0K LSAgICAgICAgaWYgKGNoa2FycmF5KHgseikgPCAwKSB7ICAgICAgICAvKiBDaGVjayBpZiBkZWNs YXJlZCwgZXRjLiAqLwotICAgICAgICAgICAgcHJpbnRmKCI/QXJyYXkgbm90IGRlY2xhcmVkIG9y IHN1YnNjcmlwdCBvdXQgb2YgcmFuZ2VcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAg ICAgICAgfQotICAgICAgICAqYyA9IHg7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVy biBhcnJheSBsZXR0ZXIgKi8KLSAgICAgICAgKmkgPSB6OyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBhbmQgc3Vic2NyaXB0LiAqLwotICAgICAgICByZXR1cm4oMik7Ci0gICAgfQotICAgIHJl dHVybigtMik7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vbmUgb2YgdGhlIGFib3ZlLiAq LwotfQotCi0KLSNkZWZpbmUgVkFMTiAzMgotCi0vKiBHZXQgdGhlIG51bWVyaWMgdmFsdWUgb2Yg YSB2YXJpYWJsZSAqLwotLyoKLSAgQ2FsbCB3aXRoIHBvaW50ZXIgdG8gdmFyaWFibGUgbmFtZSwg cG9pbnRlciB0byBpbnQgZm9yIHJldHVybiB2YWx1ZS4KLSAgUmV0dXJuczoKLSAgICAwIG9uIHN1 Y2Nlc3Mgd2l0aCBzZWNvbmQgYXJnIGNvbnRhaW5pbmcgdGhlIHZhbHVlLgotICAgLTEgb24gZmFp bHVyZSAoYmFkIHZhcmlhYmxlIHN5bnRheCwgdmFyaWFibGUgbm90IGRlZmluZWQgb3Igbm90IG51 bWVyaWMpLgotKi8KLWludAotdmFydmFsKHMsdikgY2hhciAqczsgQ0tfT0ZGX1QgKnY7IHsKLSAg ICBjaGFyIHZhbGJ1ZltWQUxOKzFdOyAgICAgICAgICAgICAgICAvKiBzIGlzIHBvaW50ZXIgdG8g dmFyaWFibGUgbmFtZSAqLwotICAgIGNoYXIgbmFtZVsyNTZdOwotICAgIGNoYXIgKnA7Ci0gICAg aW50IHk7Ci0KLSAgICBpZiAoKnMgIT0gQ01EUSkgeyAgICAgICAgICAgICAgICAgICAvKiBIYW5k bGUgbWFjcm8gbmFtZXMgdG9vICovCi0gICAgICAgIGNrbWFrbXNnKG5hbWUsMjU2LCJcXG0oIixz LCIpIixOVUxMKTsKLSAgICAgICAgcyA9IG5hbWU7Ci0gICAgfQotICAgIHAgPSB2YWxidWY7ICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEV4cGFuZCB2YXJpYWJsZSBpbnRvIHZhbGJ1Zi4gKi8K LSAgICB5ID0gVkFMTjsKLSAgICBpZiAoenpzdHJpbmcocywmcCwmeSkgPCAwKSByZXR1cm4oLTEp OwotICAgIHAgPSB2YWxidWY7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1ha2Ugc3VyZSB2 YWx1ZSBpcyBudW1lcmljICAqLwotICAgIGlmICghKnApIHsgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEJlIG5pY2UgLS0gbGV0IGFuIHVuZGVmaW5lZCAqLwotICAgICAgICB2YWxidWZbMF0g PSAnMCc7ICAgICAgICAgICAgICAgIC8qIHZhcmlhYmxlIGJlIHRyZWF0ZWQgYXMgMC4gICAqLwot ICAgICAgICB2YWxidWZbMV0gPSBOVUw7Ci0gICAgfQotICAgIGlmIChjaGtudW0ocCkpIHsgICAg ICAgICAgICAgICAgICAgIC8qIENvbnZlcnQgbnVtZXJpYyBzdHJpbmcgdG8gaW50ICovCi0gICAg ICAgICp2ID0gY2thdG9mcyhwKTsJCS8qIE9LICovCi0gICAgfSBlbHNlIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogTm90IE9LICovCi0gICAgICAgIHAgPSBldmFsYShwKTsgICAgICAg ICAgICAgICAgICAgLyogTWF5YmUgaXQncyBhbiBleHByZXNzaW9uICovCi0gICAgICAgIGlmICgh Y2hrbnVtKHApKSAgICAgICAgICAgICAgICAgLyogRGlkIGl0IGV2YWx1YXRlPyAqLwotICAgICAg ICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAgICAgIC8qIE5vLCBmYWlsdXJlLiAqLwotICAg ICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFllcywgKi8KLSAgICAgICAg ICAqdiA9IGNrYXRvZnMocCk7CQkvKiBzdWNjZXNzICovCi0gICAgfQotICAgIHJldHVybigwKTsK LX0KLQotLyogSW5jcmVtZW50IG9yIGRlY3JlbWVudCBhIHZhcmlhYmxlICovCi0vKiBSZXR1cm5z IC0xIG9uIGZhaWx1cmUsIDAgb24gc3VjY2VzcyAqLwotCi1pbnQKLWluY3ZhcihzLHgseikgY2hh ciAqczsgQ0tfT0ZGX1QgeDsgaW50IHo7IHsgIC8qIEluY3JlbWVudCBhIG51bWVyaWMgdmFyaWFi bGUgKi8KLSAgICBDS19PRkZfVCBuOwkJCQkvKiBzIGlzIHBvaW50ZXIgdG8gdmFyaWFibGUgbmFt ZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHggaXMgYW1v dW50IHRvIGluY3JlbWVudCBieSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIHogIT0gMCBtZWFucyBhZGQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiB6ID0gMCBtZWFucyBzdWJ0cmFjdCAqLwotICAgIGlmICh2YXJ2YWwo cywmbikgPCAwKSAgICAgICAgICAgICAgIC8qIENvbnZlcnQgbnVtZXJpYyBzdHJpbmcgdG8gaW50 ICovCi0gICAgICByZXR1cm4oLTEpOwotICAgIGlmICh6KSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEluY3JlbWVudCBpdCBieSB0aGUgZ2l2ZW4gYW1vdW50ICovCi0gICAgICBuICs9 IHg7Ci0gICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb3IgZGVjcmVt ZW50IGFzIHJlcXVlc3RlZC4gKi8KLSAgICAgIG4gLT0geDsKLSAgICBhZGRtYWMocyxja2ZzdG9h KG4pKTsJCS8qIFJlcGxhY2Ugb2xkIHZhcmlhYmxlICovCi0gICAgcmV0dXJuKDApOwotfQotCi0v KiBEIE8gRCBPICAtLSAgRG8gYSBtYWNybyAqLwotCi0vKgotICBDYWxsIHdpdGggeCA9IG1hY3Jv IHRhYmxlIGluZGV4LCBzID0gcG9pbnRlciB0byBhcmd1bWVudHMuCi0gIFJldHVybnMgMCBvbiBm YWlsdXJlLCAxIG9uIHN1Y2Nlc3MuCi0qLwotCi1pbnQKLWRvZG8oeCxzLGZsYWdzKSBpbnQgeDsg Y2hhciAqczsgaW50IGZsYWdzOyB7Ci0gICAgaW50IHk7Ci0gICAgZXh0ZXJuIGludCB0cmFfYXNn LCB0cmFfY21kOyBpbnQgdHJhX3RtcDsKLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIE9TMgotICAg IGV4dGVybiBpbnQgdGVybV9pbzsKLSAgICBpbnQgdGVybV9pb19zYXYgPSB0ZXJtX2lvOwotI2Vu ZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotICAgIGlmICh4IDwgMCkgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEl0IGNhbiBoYXBwZW4hICovCi0gICAgICByZXR1cm4o LTEpOwotCi0gICAgdHJhX3RtcCA9IHRyYV9hc2c7Ci0KLSAgICBpZiAoKyttYWNsdmwgPj0gTUFD TEVWRUwpIHsgICAgICAgICAvKiBNYWtlIHN1cmUgd2UgaGF2ZSBzdG9yYWdlICovCi0gICAgICAg IGRlYnVnKEYxMDEsImRvZG8gbWFjbHZsIHRvbyBkZWVwIiwiIixtYWNsdmwpOwotICAgICAgICAt LW1hY2x2bDsKLSAgICAgICAgcHJpbnRmKCJNYWNyb3MgbmVzdGVkIHRvbyBkZWVwbHlcbiIpOwot ICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotICAgIG1hY3BbbWFjbHZsXSA9IG1hY3RhYlt4XS5t dmFsOyAgICAgIC8qIFBvaW50IHRvIHRoZSBtYWNybyBib2R5ICovCi0gICAgbWFjeFttYWNsdmxd ID0gbWFjdGFiW3hdLm12YWw7ICAgICAgLyogUmVtZW1iZXIgd2hlcmUgdGhlIGJlZ2lubmluZyBp cyAqLwotCi0jaWZkZWYgQ09NTUVOVAotICAgIG1ha2VzdHIoJihtX2xpbmVbbWFjbHZsXSkscyk7 ICAgICAgIC8qIEVudGlyZSBhcmcgc3RyaW5nIGZvciAiXCUqIiAqLwotI2VuZGlmIC8qIENPTU1F TlQgKi8KLQotICAgIGNtZGx2bCsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVudGVy aW5nIGEgbmV3IGNvbW1hbmQgbGV2ZWwgKi8KLSAgICBpZiAoY21kbHZsID49IENNRFNUS0wpIHsg ICAgICAgICAgICAvKiBUb28gbWFueSBtYWNyb3MgKyBUQUtFIGZpbGVzPyAqLwotICAgICAgICBk ZWJ1ZyhGMTAxLCJkb2RvIGNtZGx2bCB0b28gZGVlcCIsIiIsY21kbHZsKTsKLSAgICAgICAgY21k bHZsLS07Ci0gICAgICAgIHByaW50ZigiP1RBS0UgZmlsZXMgYW5kIERPIGNvbW1hbmRzIG5lc3Rl ZCB0b28gZGVlcGx5XG4iKTsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNpZmRlZiBERUJV RwotICAgIGlmIChkZWJsb2cpIHsKLSAgICAgICAgZGVidWcoRjExMSwiQ01EICtNIixtYWN0YWJb eF0ua3dkLGNtZGx2bCk7Ci0gICAgICAgIGRlYnVnKEYwMTAsIkNNRCAtPiIscywwKTsKLSAgICB9 Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotI2lmZGVmIFZNUwotICAgIGNvbnJlcygpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFNvIEN0cmwtQywgZXRjLCB3aWxsIHdvcmsuICovCi0jZW5k aWYgLyogVk1TICovCi0jaWZuZGVmIE5PTE9DQUwKLSNpZmRlZiBPUzIKLSAgICB0ZXJtX2lvID0g MDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBEaXNhYmxlIHRlcm1pbmFsIGVtdWxhdG9yIEkv TyAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSAgICBpZmNtZFtj bWRsdmxdID0gMDsKLSAgICBpZnRlc3RbY21kbHZsXSA9IDA7Ci0gICAgY291bnRbY21kbHZsXSA9 IGNvdW50W2NtZGx2bC0xXTsgICAgLyogSW5oZXJpdCBDT1VOVCBmcm9tIHByZXZpb3VzIGxldmVs ICovCi0gICAgaW50aW1lW2NtZGx2bF0gPSBpbnRpbWVbY21kbHZsLTFdOyAgLyogSW5oZXJpdCBw cmV2aW91cyBJTlBVVCBUSU1FT1VUICovCi0gICAgaW5wY2FzW2NtZGx2bF0gPSBpbnBjYXNbY21k bHZsLTFdOyAgLyogICBhbmQgSU5QVVQgQ0FTRSAqLwotICAgIHRha2VycltjbWRsdmxdID0gdGFr ZXJyW2NtZGx2bC0xXTsgIC8qICAgYW5kIFRBS0UgRVJST1IgKi8KLSAgICBtZXJyb3JbY21kbHZs XSA9IG1lcnJvcltjbWRsdmwtMV07ICAvKiAgIGFuZCBNQUNSTyBFUlJPUiAqLwotICAgIHhxdWll dFtjbWRsdmxdID0gcXVpZXQ7Ci0gICAgeHZhcmV2W2NtZGx2bF0gPSB2YXJldmFsOwotICAgIHhj bWRzcmMgPSBDTURfTUQ7Ci0gICAgY21kc3RrW2NtZGx2bF0uc3JjID0gQ01EX01EOyAgICAgICAg LyogU2F5IHdlJ3JlIGluIGEgbWFjcm8gKi8KLSAgICBjbWRzdGtbY21kbHZsXS5sdmwgPSBtYWNs dmw7ICAgICAgICAvKiBhbmQgcmVtZW1iZXIgdGhlIG1hY3JvIGxldmVsICovCi0gICAgY21kc3Rr W2NtZGx2bF0uY2NmbGdzID0gZmxhZ3MgJiB+Q0ZfSU1BQzsgLyogU2V0IGZsYWdzICovCi0KLSAg ICAvKiBJbml0aWFsaXplIHJldHVybiB2YWx1ZSBleGNlcHQgaW4gRk9SLCBXSElMRSwgSUYsIGFu ZCBTV0lUQ0ggbWFjcm9zICovCi0KLSAgICBpZiAoIShmbGFncyAmIENGX0lNQUMpICYmIG1ydmFs W21hY2x2bF0pIHsKLSAgICAgICAgZnJlZShtcnZhbFttYWNsdmxdKTsKLSAgICAgICAgbXJ2YWxb bWFjbHZsXSA9IE5VTEw7Ci0gICAgfQotCi0gICAgLyogQ2xlYXIgb2xkICUwLi4lOSBhcmd1bWVu dHMgKi8KLQotICAgIGFkZG1hYygiJTAiLG1hY3RhYlt4XS5rd2QpOyAgICAgICAgIC8qIERlZmlu ZSAlMCA9IG5hbWUgb2YgbWFjcm8gKi8KLSAgICBtYWtlc3RyKCYobV94YXJnW21hY2x2bF1bMF0p LG1hY3RhYlt4XS5rd2QpOwotICAgIHZhcm5hbVswXSA9ICclJzsKLSAgICB2YXJuYW1bMl0gPSAn XDAnOwotICAgIHRyYV9hc2cgPSAwOwotICAgIGZvciAoeSA9IDE7IHkgPCAxMDsgeSsrKSB7ICAg ICAgICAgIC8qIENsZWFyIGFyZ3MgJTEuLiU5ICovCi0gICAgICAgIGlmIChtX2FyZ1ttYWNsdmxd W3ldKSB7ICAgICAgICAgLyogRG9uJ3QgY2FsbCBkZWxtYWMoKSB1bmxlc3MgKi8KLSAgICAgICAg ICAgIHZhcm5hbVsxXSA9IChjaGFyKSAoeSArICcwJyk7IC8qIHdlIGhhdmUgdG8uLi4gKi8KLSAg ICAgICAgICAgIGRlbG1hYyh2YXJuYW0sMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgdHJhX2Fz ZyA9IHRyYV90bXA7Ci0KLS8qIEFzc2lnbiB0aGUgbmV3IGFyZ3Mgb25lIHdvcmQgcGVyIGFyZywg YWxsb3dpbmcgYnJhY2VzIHRvIGdyb3VwIHdvcmRzICovCi0KLSAgICB4d29yZHMocyxNQVhBUkdM SVNULE5VTEwsMCk7Ci0KLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIE9TMgotICAgIHRlcm1faW8g PSB0ZXJtX2lvX3NhdjsKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0g ICAgaWYgKHRyYV9jbWQpCi0gICAgICBwcmludGYoIlslZF0gK006IFwiJXNcIlxuIixjbWRsdmws bWFjdGFiW3hdLmt3ZCk7Ci0gICAgcmV0dXJuKDEpOwotfQotCi0vKiBJbnNlcnQgImxpdGVyYWwi IHF1b3RlIGFyb3VuZCBlYWNoIGNvbW1hLXNlcGFyYXRlZCBjb21tYW5kIHRvIHByZXZlbnQgKi8K LS8qIGl0cyBwcmVtYXR1cmUgZXhwYW5zaW9uLiAgT25seSBkbyB0aGlzIGlmIG9iamVjdCBjb21t YW5kIGlzIHN1cnJvdW5kZWQgKi8KLS8qIGJ5IGJyYWNlcy4gKi8KLQotc3RhdGljIGNoYXIqIGZs aXQgPSAiXFxmbGl0KCI7Ci0KLWludAotbGl0Y21kKHNyYyxkZXN0LG4pIGNoYXIgKipzcmMsICoq ZGVzdDsgaW50IG47IHsKLSAgICBpbnQgYmMgPSAwLCBwcCA9IDA7Ci0gICAgY2hhciBjLCAqcywg KmxwLCAqc3M7Ci0KLSAgICBzID0gKnNyYzsKLSAgICBscCA9ICpkZXN0OwotCi0gICAgZGVidWco RjAxMCwibGl0Y21kIixzLDApOwotCi0gICAgd2hpbGUgKCpzID09IFNQKSBzKys7ICAgICAgICAg ICAgICAgLyogU3RyaXAgZXh0cmEgbGVhZGluZyBzcGFjZXMgKi8KLQotICAgIGlmICgqcyA9PSAn eycpIHsgICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0cyB3aXRoIGJyYWNlICovCi0gICAgICAg IHBwID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFyZW4gY291bnRlciAqLwotICAg ICAgICBiYyA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvdW50IGxlYWRpbmcgYnJh Y2UgKi8KLSAgICAgICAgKmxwKysgPSAqcysrOyAgICAgICAgICAgICAgICAgICAvKiBDb3B5IGl0 ICovCi0gICAgICAgIGlmICgtLW4gPCAxKSByZXR1cm4oLTEpOyAgICAgICAgLyogQ2hlY2sgc3Bh Y2UgKi8KLSAgICAgICAgd2hpbGUgKCpzID09IFNQKSBzKys7ICAgICAgICAgICAvKiBTdHJpcCBp bnRlcmlvciBsZWFkaW5nIHNwYWNlcyAqLwotICAgICAgICBzcyA9IGZsaXQ7ICAgICAgICAgICAg ICAgICAgICAgIC8qIFBvaW50IHRvICJcZmxpdCgiICovCi0gICAgICAgIHdoaWxlICgoKmxwKysg PSAqc3MrKykpICAgICAgICAgLyogQ29weSBpdCAqLwotICAgICAgICAgIGlmICgtLW4gPCAxKSAg ICAgICAgICAgICAgICAgIC8qIGFuZCBjaGVjayBzcGFjZSAqLwotICAgICAgICAgICAgcmV0dXJu KC0xKTsKLSAgICAgICAgbHAtLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCYWNrIHVw IG92ZXIgbnVsbCAqLwotCi0gICAgICAgIHdoaWxlICgqcykgeyAgICAgICAgICAgICAgICAgICAg LyogR28gdGhydSByZXN0IG9mIHRleHQgKi8KLSAgICAgICAgICAgIGMgPSAqczsKLSAgICAgICAg ICAgIGlmIChjID09ICd7JykgYmMrKzsgICAgICAgICAvKiBDb3VudCBicmFja2V0cyAqLwotICAg ICAgICAgICAgaWYgKGMgPT0gJygnKSBwcCsrOyAgICAgICAgIC8qIGFuZCBwYXJlbnMgKi8KLSAg ICAgICAgICAgIGlmIChjID09ICcpJykgeyAgICAgICAgICAgICAvKiBSaWdodCBwYXJlbnRoZXNp cy4gKi8KLSAgICAgICAgICAgICAgICBwcC0tOyAgICAgICAgICAgICAgICAgICAvKiBDb3VudCBp dC4gKi8KLSAgICAgICAgICAgICAgICBpZiAocHAgPCAwKSB7ICAgICAgICAgICAvKiBBbiB1bmJh bGFuY2VkIHJpZ2h0IHBhcmVuLi4uICovCi0jaWZkZWYgQ09NTUVOVAotLyoKLSAgVGhlIHByb2Js ZW0gaGVyZSBpcyB0aGF0ICJceyIgYXBwZWFycyB0byBiZSBhIHF1b3RlZCBicmFjZSBhbmQgdGhl cmVmb3JlCi0gIGlzbid0IGNvdW50ZWQ7IHRoZW4gdGhlICJ9IiBtYXRjaGVzIGFuIGVhcmxpZXIg b3BlbmluZyBicmFjZSwgY2F1c2luZwotICAoZS5nLikgdHJ1bmNhdGlvbiBvZiBtYWNyb3MgYnkg Z2V0bmNtKCkuCi0qLwotICAgICAgICAgICAgICAgICAgICBpZiAobiA8IDUpICAgICAgICAgIC8q IE91dCBvZiBzcGFjZSBpbiBkZXN0IGJ1ZmZlcj8gKi8KLSAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4oLTEpOyAgICAgICAvKiBJZiBzbywgZ2l2ZSB1cC4gKi8KLSAgICAgICAgICAgICAgICAg ICAgKmxwKysgPSBDTURROyAgICAgICAvKiBNdXN0IGJlIHF1b3RlZCB0byBwcmV2ZW50ICovCi0g ICAgICAgICAgICAgICAgICAgICpscCsrID0gJ30nOyAgICAgICAgLyogcHJlbWF0dXJlIHRlcm1p bmF0aW9uIG9mICovCi0gICAgICAgICAgICAgICAgICAgICpscCsrID0gJzQnOyAgICAgICAgLyog XGZsaXQoLi4uKSAqLwotICAgICAgICAgICAgICAgICAgICAqbHArKyA9ICcxJzsKLSAgICAgICAg ICAgICAgICAgICAgKmxwKysgPSAnfSc7Ci0gICAgICAgICAgICAgICAgICAgIG4gLT0gNTsKLSNl bHNlCi0vKiBIZXJlIHdlIHJlbHkgb24gdGhlIGZhY3QgdGhlIFxubm4gbmV2ZXIgdGFrZXMgbW9y ZSB0aGFuIDMgZGlnaXRzICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChuIDwgNCkgICAgICAg ICAgLyogT3V0IG9mIHNwYWNlIGluIGRlc3QgYnVmZmVyPyAqLwotICAgICAgICAgICAgICAgICAg ICAgIHJldHVybigtMSk7ICAgICAgIC8qIElmIHNvLCBnaXZlIHVwLiAqLwotICAgICAgICAgICAg ICAgICAgICAqbHArKyA9IENNRFE7ICAgICAgIC8qIE11c3QgYmUgcXVvdGVkIHRvIHByZXZlbnQg Ki8KLSAgICAgICAgICAgICAgICAgICAgKmxwKysgPSAnMCc7ICAgICAgICAvKiBwcmVtYXR1cmUg dGVybWluYXRpb24gb2YgKi8KLSAgICAgICAgICAgICAgICAgICAgKmxwKysgPSAnNCc7ICAgICAg ICAvKiBcZmxpdCguLi4pICovCi0gICAgICAgICAgICAgICAgICAgICpscCsrID0gJzEnOwotICAg ICAgICAgICAgICAgICAgICBuIC09IDQ7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAg ICAgICAgICAgICBwcCsrOyAgICAgICAgICAgICAgIC8qIFVuY291bnQgaXQuICovCi0gICAgICAg ICAgICAgICAgICAgIHMrKzsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGMgPT0gJ30nKSB7ICAg ICAgICAgICAgIC8qIENsb3NpbmcgYnJhY2UuICovCi0gICAgICAgICAgICAgICAgaWYgKC0tYmMg PT0gMCkgeyAgICAgICAgLyogRmluYWwgb25lPyAqLwotICAgICAgICAgICAgICAgICAgICAqbHAr KyA9ICcpJzsgICAgICAgIC8qIEFkZCBjbG9zaW5nIHBhcmVuIGZvciAiXGZsaXQoKSIgKi8KLSAg ICAgICAgICAgICAgICAgICAgaWYgKC0tbiA8IDEpIHJldHVybigtMSk7Ci0gICAgICAgICAgICAg ICAgICAgICpscCsrID0gYzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKC0tbiA8IDEpIHJldHVy bigtMSk7Ci0gICAgICAgICAgICAgICAgICAgIHMrKzsKLSAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgKmxwKysg PSBjOyAgICAgICAgICAgICAgICAgIC8qIEdlbmVyYWwgY2FzZSAqLwotICAgICAgICAgICAgaWYg KC0tbiA8IDEpIHJldHVybigtMSk7Ci0gICAgICAgICAgICBzKys7Ci0gICAgICAgIH0KLSAgICAg ICAgKmxwID0gTlVMOwotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IE5vIGJyYWNrZXRzIGFyb3VuZCwgKi8KLSAgICAgICAgd2hpbGUgKCgqbHArKyA9ICpzKyspKSAg ICAgICAgICAvKiBqdXN0IGNvcHkuICovCi0gICAgICAgICAgaWYgKC0tbiA8IDEpCi0gICAgICAg ICAgICByZXR1cm4oLTEpOwotICAgICAgICBscC0tOwotICAgIH0KLSAgICAqc3JjID0gczsgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gdXBkYXRlZCBzb3VyY2UgKi8KLSAgICAq ZGVzdCA9IGxwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgZGVzdGluYXRpb24gcG9p bnRlcnMgKi8KLSAgICBpZiAoYmMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGYWls IGlmIGJyYWNlcyB1bmJhbGFuY2VkICovCi0gICAgICByZXR1cm4oLTEpOwotICAgIGVsc2UgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSBzdWNjZWVkLiAqLwotICAg ICAgcmV0dXJuKDApOwotfQotI2VuZGlmIC8qIE5PU1BMICovCi0KLS8qIEZ1bmN0aW9ucyBtb3Zl ZCBoZXJlIGZyb20gY2t1dXNyLmMgdG8gZXZlbiBvdXQgdGhlIG1vZHVsZSBzaXplcy4uLiAqLwot Ci0vKgotICBCcmVha3MgdXAgc3RyaW5nIHMgLS0gSU4gUExBQ0UhIC0tIGludG8gYSBsaXN0IG9m IHVwIHRvIG1heCB3b3Jkcy4KLSAgUG9pbnRlcnMgdG8gZWFjaCB3b3JkIGdvIGludG8gdGhlIGFy cmF5IGxpc3RbXS4KLSAgbWF4IGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB3b3JkcyAocG9pbnRl cnMpLgotICBJZiBsaXN0IGlzIE5VTEwsIHRoZW4gdGhleSBhcmUgYWRkZWQgdG8gdGhlIG1hY3Jv IHRhYmxlLgotICBmbGFnID0gMCBtZWFucyB0aGUgbGFzdCBmaWVsZCBpcyB0byBiZSBvbmUgd29y ZCwgbGlrZSBhbGwgdGhlIG90aGVyIGZpZWxkcywKLSAgICAgICAgIHNvIGFueXRoaW5nIGFmdGVy IGl0IGlzIGRpc2NhcmRlZC4KLSAgZmxhZyA9IDEgbWVhbnMgdGhlIGxhc3QgZmllbGQgZXh0ZW5k cyB0byB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIGV2ZW4gaWYKLSAgICAgICAgIHRoZXJlIGFyZSBs b3RzIG9mIHdvcmRzIGxlZnQsIHNvIHRoZSBsYXN0IGZpZWxkIGNvbnRhaW5zIHRoZQotICAgICAg ICAgcmVtYWluZGVyIG9mIHRoZSBzdHJpbmcuCi0qLwotVk9JRAoteHdvcmRzKHMsbWF4LGxpc3Qs ZmxhZykgY2hhciAqczsgaW50IG1heDsgY2hhciAqbGlzdFtdOyBpbnQgZmxhZzsgewotICAgIGNo YXIgKnA7Ci0gICAgaW50IGIsIGksIGssIHEsIHksIHo7Ci0jaWZuZGVmIE5PU1BMCi0gICAgaW50 IG1hY3JvOwotICAgIG1hY3JvID0gKGxpc3QgPT0gTlVMTCk7Ci0gICAgZGVidWcoRjAxMCwieHdv cmRzIixzLDApOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZmRlZiBYV09SRFNERUJVRwotICAg IHByaW50ZigiWFdPUkRTIHN0cmluZz0lc1xuIixzKTsKLSAgICBwcmludGYoIlhXT1JEUyBtYXg9 JWRcbiIsbWF4KTsKLSNlbmRpZiAvKiBYV09SRFNERUJVRyAqLwotICAgIHAgPSBzOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gYmVnaW5uaW5nIG9mIHN0cmluZyAq LwotICAgIHEgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIGRv dWJsZXF1b3RlIHJlbW92YWwgKi8KLSAgICBiID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBGbGFnIGZvciBvdXRlciBicmFjZSByZW1vdmFsICovCi0gICAgayA9IDA7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgaW4td29yZCAqLwotICAgIHkgPSAw OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJyYWNlIG5lc3RpbmcgbGV2ZWwgKi8K LSAgICB6ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAiV29yZCIgY291bnRl ciwgMCB0aHJ1IG1heCAqLwotCi0gICAgaWYgKGxpc3QpCi0gICAgICBmb3IgKGkgPSAwOyBpIDw9 IG1heDsgaSsrKSAgICAgICAgLyogSW5pdGlhbGl6ZSBwb2ludGVycyAqLwotICAgICAgICBsaXN0 W2ldID0gTlVMTDsKLQotICAgIGlmIChmbGFnKSBtYXgtLTsKLQotICAgIHdoaWxlICgxKSB7ICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEdvIHRocnUgd29yZCBsaXN0ICovCi0gICAgICAgIGlm ICghcyB8fCAoKnMgPT0gJ1wwJykpIHsgICAgICAgLyogTm8gbW9yZSBjaGFyYWN0ZXJzPyAqLwot ICAgICAgICAgICAgaWYgKGsgIT0gMCkgeyAgICAgICAgICAgICAgIC8qIFdhcyBJIGluIGEgd29y ZD8gKi8KLSAgICAgICAgICAgICAgICBpZiAoeiA9PSBtYXgpIGJyZWFrOyAgICAvKiBZZXMsIG9u bHkgZ28gdXAgdG8gbWF4LiAqLwotICAgICAgICAgICAgICAgIHorKzsgICAgICAgICAgICAgICAg ICAgIC8qIENvdW50IHRoaXMgd29yZC4gKi8KLSNpZmRlZiBYV09SRFNERUJVRwotICAgICAgICAg ICAgICAgIHByaW50ZigiMSB6KysgPSAlZFxuIiwgeik7Ci0jZW5kaWYgLyogWFdPUkRTREVCVUcg Ki8KLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgICAgICAgICBpZiAobWFjcm8pIHsgICAgICAgICAg ICAvKiBEb2luZyBtYWNybyBhcmdzICovCi0gICAgICAgICAgICAgICAgICAgIGlmICh6IDwgMTAp IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcm5hbVsxXSA9IChjaGFyKSAoeiArICcwJyk7 IC8qIEFzc2lnbiBsYXN0IGFyZyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgYWRkbWFjKHZh cm5hbSxwKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAo eiA8PSBtYXgpIHsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo bWFjbHZsIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkbWFjKHZhcm5hbSxwKTsK LSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAg ICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJihtX3hhcmdbbWFjbHZsXVt6XSkscCk7Ci0g ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAg ICAgICAvKiBOb3QgZG9pbmcgbWFjcm8gYXJncyAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0gICAg ICAgICAgICAgICAgICAgIGxpc3Rbel0gPSBwOyAgICAgICAgLyogQXNzaWduIHBvaW50ZXIuICov Ci0jaWZkZWYgWFdPUkRTREVCVUcKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJbMV1MSVNU WyVkXT1cIiVzXCJcbiIseixsaXN0W3pdKTsKLSNlbmRpZiAvKiBYV09SRFNERUJVRyAqLwotI2lm bmRlZiBOT1NQTAotICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgICAg ICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIEFuZCBnZXQgb3V0LiAqLwotICAg ICAgICAgICAgfSBlbHNlIGJyZWFrOyAgICAgICAgICAgICAgIC8qIFdhcyBub3QgaW4gYSB3b3Jk ICovCi0gICAgICAgIH0KLSAgICAgICAgaWYgKGsgPT0gMCAmJiAoKnMgPT0gU1AgfHwgKnMgPT0g SFQpKSB7IC8qIEVhdCBsZWFkaW5nIGJsYW5rcyAqLwotICAgICAgICAgICAgcysrOwotICAgICAg ICAgICAgY29udGludWU7Ci0gICAgICAgIH0gZWxzZSBpZiAocSA9PSAwICYmICpzID09ICd7Jykg eyAvKiBBbiBvcGVuaW5nIGJyYWNlICovCi0gICAgICAgICAgICBpZiAoayA9PSAwICYmIHkgPT0g MCkgeyAgICAgLyogSWYgbGVhZGluZyBicmFjZSAqLwotICAgICAgICAgICAgICAgIHAgPSBzKzE7 ICAgICAgICAgICAgICAgIC8qIHBvaW50IHBhc3QgaXQgKi8KLSAgICAgICAgICAgICAgICBiID0g MTsgICAgICAgICAgICAgICAgICAvKiBhbmQgZmxhZyB0aGF0IHdlIGRpZCB0aGlzICovCi0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBrID0gMTsgICAgICAgICAgICAgICAgICAgICAgLyogRmxh ZyB0aGF0IHdlJ3JlIGluIGEgd29yZCAqLwotICAgICAgICAgICAgeSsrOyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIENvdW50IHRoZSBicmFjZS4gKi8KLSAgICAgICAgfSBlbHNlIGlmIChxID09 IDAgJiYgKnMgPT0gJ30nKSB7IC8qIEEgY2xvc2luZyBicmFjZS4gKi8KLSAgICAgICAgICAgIHkt LTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb3VudCBpdC4gKi8KLSAgICAgICAgICAgIGlm ICh5IDw9IDAgJiYgYiAhPSAwKSB7ICAgICAvKiBJZiBpdCBtYXRjaGVzIHRoZSBsZWFkaW5nIGJy YWNlICovCi0gICAgICAgICAgICAgICAgY2hhciBjOwotICAgICAgICAgICAgICAgIGMgPSAqKHMr MSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjIHx8IGMgPT0gU1AgfHwgYyA9PSBIVCkgeyAvKiBh dCBFT0wgb3IgZm9sbG93ZWQgYnkgU1AgKi8KLSAgICAgICAgICAgICAgICAgICAgKnMgPSBTUDsg ICAgICAgICAgICAvKiBjaGFuZ2UgaXQgdG8gYSBzcGFjZSAqLwotICAgICAgICAgICAgICAgICAg ICBiID0gMDsgICAgICAgICAgICAgIC8qIGFuZCB3ZSdyZSBub3QgaW4gYnJhY2VzIGFueSBtb3Jl ICovCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotI2lmZGVmIERPVUJMRVFVT1RJ TkcKLSAgICAgICAgLyogT3BlbmluZyBkb3VibGVxdW90ZSAqLwotICAgICAgICB9IGVsc2UgaWYg KGsgPT0gMCAmJiBiID09IDAgJiYgKnMgPT0gJyInICYmIGRibHF1bykgewotICAgICAgICAgICAg eSsrOwotICAgICAgICAgICAgcCA9IHMrMTsgICAgICAgICAgICAgICAgICAgIC8qIHBvaW50IHBh c3QgaXQgKi8KLSAgICAgICAgICAgIHEgPSAxOyAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQg ZmxhZyB0aGF0IHdlIGRpZCB0aGlzICovCi0gICAgICAgICAgICBrID0gMTsgICAgICAgICAgICAg ICAgICAgICAgLyogRmxhZyB0aGF0IHdlJ3JlIGluIGEgd29yZCAqLwotICAgICAgICAvKiBDbG9z aW5nIGRvdWJsZSBxdW90ZSAqLwotICAgICAgICB9IGVsc2UgaWYgKHEgPiAwICYmIGsgPiAwICYm IGIgPT0gMCAmJiAqcyA9PSAnIicgJiYgZGJscXVvKSB7Ci0gICAgICAgICAgICBjaGFyIGM7Ci0g ICAgICAgICAgICBjID0gKihzKzEpOwotICAgICAgICAgICAgaWYgKCFjIHx8IGMgPT0gU1AgfHwg YyA9PSBIVCkgeyAvKiBhdCBFT0wgb3IgZm9sbG93ZWQgYnkgU1AgKi8KLSAgICAgICAgICAgICAg ICB5LS07Ci0gICAgICAgICAgICAgICAgKnMgPSBTUDsgICAgICAgICAgICAgICAgLyogY2hhbmdl IGl0IHRvIGEgc3BhY2UgKi8KLSAgICAgICAgICAgICAgICBxID0gMDsgICAgICAgICAgICAgICAg ICAvKiBhbmQgd2UncmUgbm90IGluIHF1b3RlcyBhbnkgbW9yZSAqLwotICAgICAgICAgICAgfQot I2VuZGlmIC8qIERPVUJMRVFVT1RJTkcgKi8KLQotICAgICAgICB9IGVsc2UgaWYgKCpzICE9IFNQ ICYmICpzICE9IEhUKSB7IC8qIE5vbnNwYWNlIG1lYW5zIHdlJ3JlIGluIGEgd29yZCAqLwotICAg ICAgICAgICAgaWYgKGsgPT0gMCkgeyAgICAgICAgICAgICAgIC8qIElmIHdlIHdlcmVuJ3QgaW4g YSB3b3JkIGJlZm9yZSwgKi8KLSAgICAgICAgICAgICAgICBwID0gczsgICAgICAgICAgICAgICAg ICAvKiBNYXJrIHRoZSBiZWdpbm5pbmcgKi8KLSAgICAgICAgICAgICAgICBpZiAoZmxhZyAmJiB6 ID09IG1heCkgeyAvKiBXYW50IGxhc3Qgd29yZCB0byBiZSByZW1haW5kZXI/ICovCi0gICAgICAg ICAgICAgICAgICAgIHorKzsKLSNpZmRlZiBYV09SRFNERUJVRwotICAgICAgICAgICAgICAgICAg ICBwcmludGYoIjEgeisrID0gJWRcbiIsIHopOwotI2VuZGlmIC8qIFhXT1JEU0RFQlVHICovCi0g ICAgICAgICAgICAgICAgICAgIGxpc3Rbel0gPSBwOyAgICAgICAgLyogWWVzLCBwb2ludCB0byBp dCAqLwotI2lmZGVmIFhXT1JEU0RFQlVHCi0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiWzRd TElTVFslZF09XCIlc1wiXG4iLHosbGlzdFt6XSk7Ci0jZW5kaWYgLyogWFdPUkRTREVCVUcgKi8K LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAvKiBhbmQgcXVpdCAqLwot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBrID0gMTsgICAgICAgICAgICAgICAg ICAvKiBTZXQgaW4td29yZCBmbGFnICovCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg ICAgLyogSWYgd2UncmUgbm90IGluc2lkZSBhIGJyYWNlZCBxdWFudGl0eSwgYW5kIHdlIGFyZSBp biBhIHdvcmQsIGFuZCAqLwotICAgICAgICAvKiB3ZSBoYXZlIGhpdCB3aGl0ZXNwYWNlLCB0aGVu IHdlIGhhdmUgYSB3b3JkLiAqLwotICAgICAgICBpZiAoKHkgPCAxKSAmJiAoayAhPSAwKSAmJiAo KnMgPT0gU1AgfHwgKnMgPT0gSFQpICYmICFiKSB7Ci0gICAgICAgICAgICBpZiAoIWZsYWcgfHwg eiA8IG1heCkgICAgICAgLyogaWYgd2UgZG9uJ3Qgd2FudCB0byBrZWVwIHJlc3QgKi8KLSAgICAg ICAgICAgICAgKnMgPSAnXDAnOyAgICAgICAgICAgICAgICAvKiB0ZXJtaW5hdGUgdGhlIGFyZyB3 aXRoIG51bGwgKi8KLSAgICAgICAgICAgIGsgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBz YXkgd2UncmUgbm90IGluIGEgd29yZCBhbnkgbW9yZSAqLwotICAgICAgICAgICAgeSA9IDA7ICAg ICAgICAgICAgICAgICAgICAgIC8qIHN0YXJ0IGJyYWNlcyBvZmYgY2xlYW4gYWdhaW4gKi8KLSAg ICAgICAgICAgIGlmICh6ID09IG1heCkgYnJlYWs7ICAgICAgICAvKiBPbmx5IGdvIHVwIHRvIG1h eC4gKi8KLSAgICAgICAgICAgIHorKzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb3VudCB0 aGlzIGFyZyAqLwotI2lmZGVmIFhXT1JEU0RFQlVHCi0gICAgICAgICAgICBwcmludGYoIjEgeisr ID0gJWRcbiIsIHopOwotI2VuZGlmIC8qIFhXT1JEU0RFQlVHICovCi0KLSNpZm5kZWYgTk9TUEwK LSAgICAgICAgICAgIGlmIChtYWNybykgewotICAgICAgICAgICAgICAgIGlmICh6IDwgMTApIHsK LSAgICAgICAgICAgICAgICAgICAgdmFybmFtWzFdID0gKGNoYXIpICh6ICsgJzAnKTsgLyogY29t cHV0ZSBpdHMgbmFtZSAqLwotICAgICAgICAgICAgICAgICAgICBhZGRtYWModmFybmFtLHApOyAg IC8qIGFkZCBpdCB0byB0aGUgbWFjcm8gdGFibGUgKi8KLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgaWYgKHogPD0gbWF4KSB7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAg ICAgICAgICBpZiAobWFjbHZsIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICBhZGRtYWModmFy bmFtLHApOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0jZW5kaWYgLyogQ09NTUVOVCAqLwot ICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJihtX3hhcmdbbWFjbHZsXVt6XSkscCk7Ci0g ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSNlbmRpZiAvKiBOT1NQTCAq LwotICAgICAgICAgICAgICAgIGxpc3Rbel0gPSBwOwotI2lmZGVmIFhXT1JEU0RFQlVHCi0gICAg ICAgICAgICAgICAgcHJpbnRmKCJbMl1MSVNUWyVkXT1cIiVzXCJcbiIseixsaXN0W3pdKTsKLSNl bmRpZiAvKiBYV09SRFNERUJVRyAqLwotI2lmbmRlZiBOT1NQTAotICAgICAgICAgICAgfQotI2Vu ZGlmIC8qIE5PU1BMICovCi0gICAgICAgICAgICBwID0gcysxOwotICAgICAgICB9Ci0gICAgICAg IHMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgcGFzdCB0aGlzIGNoYXJh Y3RlciAqLwotICAgIH0KLSAgICBpZiAoKHogPT0gMCkgJiYgKHkgPiAxKSkgeyAgICAgICAgICAv KiBFeHRyYSBjbG9zaW5nIGJyYWNlKHMpIGF0IGVuZCAqLwotICAgICAgICB6Kys7Ci0jaWZuZGVm IE5PU1BMCi0gICAgICAgIGlmIChtYWNybykgewotICAgICAgICAgICAgaWYgKHogPCAxMCkgewot ICAgICAgICAgICAgICAgIHZhcm5hbVsxXSA9IHogKyAnMCc7ICAgIC8qIGNvbXB1dGUgaXRzIG5h bWUgKi8KLSAgICAgICAgICAgICAgICBhZGRtYWModmFybmFtLHApOyAgICAgICAvKiBBZGQgcmVz dCBvZiBsaW5lIHRvIGxhc3QgYXJnICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo eiA8PSBtYXgpIHsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICAgICAgaWYgKG1hY2x2bCA8 IDApCi0gICAgICAgICAgICAgICAgICBhZGRtYWModmFybmFtLHApOwotICAgICAgICAgICAgICAg IGVsc2UKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICAgICAgICBtYWtlc3RyKCYo bV94YXJnW21hY2x2bF1bel0pLHApOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ugewot I2VuZGlmIC8qIE5PU1BMICovCi0gICAgICAgICAgICBsaXN0W3pdID0gcDsKLSNpZmRlZiBYV09S RFNERUJVRwotICAgICAgICAgICAgcHJpbnRmKCJbM11MSVNUWyVkXT1cIiVzXCJcbiIseixsaXN0 W3pdKTsKLSNlbmRpZiAvKiBYV09SRFNERUJVRyAqLwotI2lmbmRlZiBOT1NQTAotICAgICAgICB9 Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICB9Ci0jaWZuZGVmIE5PU1BMCi0gICAgaWYgKG1hY3Jv KSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFjcm8gKi8KLSAgICAgICAgaWYgKG1hY2x2 bCA8IDApIHsKLSAgICAgICAgICAgIGFfZGltWzBdID0gejsgICAgICAgICAgICAgICAvKiBBcnJh eSBkaW1lbnNpb24gaXMgb25lIGxlc3MgKi8KLSAgICAgICAgICAgIHRvcGFyZ2MgPSB6ICsgMTsg ICAgICAgICAgICAvKiB0aGFuIFx2KGFyZ2MpICovCi0JICAgIGRlYnVnKEYxMTEsImFfZGltWzBd IiwiRCIsYV9kaW1bMF0pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbWFjYXJnY1tt YWNsdmxdID0geiArIDE7ICAgIC8qIFNldCBcdihhcmdjKSB2YXJpYWJsZSAqLwotICAgICAgICAg ICAgbl94YXJnW21hY2x2bF0gPSB6ICsgMTsgICAgIC8qIFRoaXMgaXMgdGhlIGFjdHVhbCBudW1i ZXIgKi8KLSAgICAgICAgICAgIGFfcHRyWzBdID0gbV94YXJnW21hY2x2bF07ICAvKiBQb2ludCBc Jl9bXSBhdCB0aGUgYXJncyAqLwotICAgICAgICAgICAgYV9kaW1bMF0gPSB6OyAgICAgICAgICAg ICAgIC8qIEFuZCBnaXZlIGl0IHRoaXMgZGltZW5zaW9uICovCi0JICAgIGRlYnVnKEYxMTEsImFf ZGltWzBdIiwiRSIsYV9kaW1bMF0pOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIE5PU1BM ICovCi0gICAgcmV0dXJuOwotfQotCi0jaWZuZGVmIE5PU1BMCi0KLS8qICBEIE8gUyBIIEkgRiBU ICAtLSAgRG8gdGhlIFNISUZUIENvbW1hbmQ7IHNoaWZ0IG1hY3JvIGFyZ3MgbGVmdCBieSBuICov Ci0KLS8qICBOb3RlOiBhdCBzb21lIHBvaW50IGxldCdzIGNvbnNvbGlkYXRlIG1fYXJnW11bXSBh bmQgbV94YXJnW11bXS4gKi8KLQotaW50Ci1kb3NoaWZ0KG4pIGludCBuOyB7ICAgICAgICAgICAg ICAgICAgICAgLyogbiA9IHNoaWZ0IGNvdW50ICovCi0gICAgaW50IGksIHRvcCwgbGV2ZWw7Ci0g ICAgY2hhciAvKiAqcywgKm0sICovIGJ1Zls2XTsgICAgICAgICAgLyogQnVmZmVyIHRvIGJ1aWxk IHNjYWxhciBuYW1lcyAqLwotICAgIGNoYXIgKiBzeCA9IHRtcGJ1ZjsKLSAgICBpbnQgbnggPSBU TVBCVUZTSVo7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJTSElGVCBjb3VudCIsIiIsbik7Ci0gICAgZGVi dWcoRjEwMSwiU0hJRlQgdG9wYXJnYyIsIiIsdG9wYXJnYyk7Ci0KLSAgICBpZiAobiA8IDEpICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBTdGF5IGluIHJhbmdlICovCi0gICAgICByZXR1cm4o biA9PSAwID8gMSA6IDApOwotCi0gICAgbGV2ZWwgPSBtYWNsdmw7Ci0gICAgdG9wID0gKGxldmVs IDwgMCkgPyB0b3BhcmdjIDogbWFjYXJnY1tsZXZlbF07Ci0KLSAgICBpZiAobiA+PSB0b3ApCi0g ICAgICBuID0gdG9wIC0gMTsKLQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewotICAg ICAgICBkZWJ1ZyhGMTAxLCJTSElGVCBjb3VudCAyIiwiIixuKTsKLSAgICAgICAgZGVidWcoRjEw MSwiU0hJRlQgbGV2ZWwiLCIiLGxldmVsKTsKLSAgICAgICAgaWYgKGxldmVsID4gLTEpCi0gICAg ICAgICAgZGVidWcoRjEwMSwiU0hJRlQgbWFjYXJnY1tsZXZlbF0iLCIiLG1hY2FyZ2NbbGV2ZWxd KTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotICAgIGJ1ZlswXSA9ICdcXCc7ICAgICAg ICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgbmFtZSB0ZW1wbGF0ZSAqLwotICAgIGJ1Zlsx XSA9ICclJzsKLSAgICBidWZbMl0gPSBOVUw7Ci0gICAgYnVmWzNdID0gTlVMOwotCi0gICAgZm9y IChpID0gMTsgaSA8PSBuOyBpKyspIHsgICAgICAgICAgLyogRnJlZSBzaGlmdGVkLW92ZXIgYXJn cyAqLwotICAgICAgICBpZiAobGV2ZWwgPCAwKSB7Ci0gICAgICAgICAgICBtYWtlc3RyKCYodG9w YXJnW2ldKSxOVUxMKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1ha2VzdHIoJiht X3hhcmdbbGV2ZWxdW2ldKSxOVUxMKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaSA8IDEwKSB7 ICAgICAgICAgICAgICAgICAgIC8qIElzIHRoaXMgbmVjZXNzYXJ5PyAqLwotICAgICAgICAgICAg YnVmWzJdID0gKGNoYXIpKGkrJzAnKTsKLSAgICAgICAgICAgIGRlbG1hYyhidWYsMCk7Ci0gICAg ICAgIH0KLSAgICB9Ci0gICAgZm9yIChpID0gMTsgaSA8PSB0b3AtbjsgaSsrKSB7ICAgICAgLyog U2hpZnQgcmVtYWluaW5nIGFyZ3MgKi8KLSAgICAgICAgaWYgKGxldmVsIDwgMCkgewotI2lmZGVm IENPTU1FTlQKLSAgICAgICAgICAgIHRvcGFyZ1tpXSA9IHRvcGFyZ1tpK25dOyAgICAvKiBGdWxs IHZlY3RvciAqLwotI2Vsc2UKLSAgICAgICAgICAgIG1ha2VzdHIoJih0b3BhcmdbaV0pLHRvcGFy Z1tpK25dKTsgLyogRnVsbCB2ZWN0b3IgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAg ICAgICBpZiAoaSA8IDEwKSAgICAgICAgICAgICAgICAgLyogU2NhbGFycy4uLiAqLwotICAgICAg ICAgICAgICBtYWtlc3RyKCYoZ192YXJbaSsnMCddKSx0b3BhcmdbaStuXSk7Ci0gICAgICAgIH0g ZWxzZSB7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgbV94YXJnW2xldmVsXVtpXSA9IG1f eGFyZ1tsZXZlbF1baStuXTsKLSNlbHNlCi0gICAgICAgICAgICBtYWtlc3RyKCYobV94YXJnW2xl dmVsXVtpXSksbV94YXJnW2xldmVsXVtpK25dKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAg ICAgICAgICBpZiAoaSA8IDEwKSB7Ci0gICAgICAgICAgICAgICAgYnVmWzJdID0gKGNoYXIpKGkr JzAnKTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMDEwLCJTSElGVCBidWYiLGJ1ZiwwKTsKLSAg ICAgICAgICAgICAgICBhZGRtYWMoYnVmLG1feGFyZ1tsZXZlbF1baStuXSk7Ci0gICAgICAgICAg ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZm9yIChpID0gdG9wLW47IGkgPD0gdG9wOyBpKysp IHsgICAgLyogQ2xlYXIgbiBhcmdzIGZyb20gdGhlIGVuZCAqLwotICAgICAgICBpZiAobGV2ZWwg PCAwKSB7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgdG9wYXJnW2ldID0gTlVMTDsKLSNl bHNlCi0gICAgICAgICAgICBtYWtlc3RyKCYodG9wYXJnW2ldKSxOVUxMKTsKLSNlbmRpZiAvKiBD T01NRU50ICovCi0gICAgICAgICAgICBpZiAoaSA8IDEwKQotICAgICAgICAgICAgICBtYWtlc3Ry KCYoZ192YXJbaSsnMCddKSxOVUxMKTsKLSAgICAgICAgfSBlbHNlIHsKLSNpZmRlZiBDT01NRU5U Ci0gICAgICAgICAgICBtX3hhcmdbbGV2ZWxdW2ldID0gTlVMTDsKLSNlbHNlCi0gICAgICAgICAg ICBtYWtlc3RyKCYobV94YXJnW2xldmVsXVtpXSksTlVMTCk7Ci0jZW5kaWYgLyogQ09NTUVOdCAq LwotICAgICAgICAgICAgaWYgKGkgPCAxMCkgewotICAgICAgICAgICAgICAgIGJ1ZlsyXSA9IChj aGFyKShpKycwJyk7Ci0gICAgICAgICAgICAgICAgZGVsbWFjKGJ1ZiwwKTsKLSAgICAgICAgICAg IH0KLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAobGV2ZWwgPiAtMSkgeyAgICAgICAgICAgICAg ICAgICAvKiBNYWNybyBhcmdzICovCi0gICAgICAgIG1hY2FyZ2NbbGV2ZWxdIC09IG47ICAgICAg ICAgICAgLyogQWRqdXN0IGNvdW50ICovCi0gICAgICAgIG5feGFyZ1ttYWNsdmxdID0gbWFjYXJn Y1tsZXZlbF07IC8qIEhlcmUgdG9vICovCi0gICAgICAgIGFfZGltWzBdID0gbWFjYXJnY1tsZXZl bF0gLSAxOyAgLyogQWRqdXN0IGFycmF5IGRpbWVuc2lvbiAqLwotCWRlYnVnKEYxMTEsImFfZGlt WzBdIiwiRiIsYV9kaW1bMF0pOwotICAgICAgICB6enN0cmluZygiXFxmam9pbigmX1tdLHsgfSwx KSIsJnN4LCZueCk7IC8qIEhhbmRsZSBcJSogKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIG1h a2VzdHIoJihtX2xpbmVbbGV2ZWxdKSx0bXBidWYpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAg ICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEaXR0byBmb3IgdG9wIGxl dmVsICovCi0gICAgICAgIHRvcGFyZ2MgLT0gbjsKLSAgICAgICAgYV9kaW1bMF0gPSB0b3Bhcmdj IC0gMTsKLQlkZWJ1ZyhGMTExLCJhX2RpbVswXSIsIkciLGFfZGltWzBdKTsKLSAgICAgICAgenpz dHJpbmcoIlxcZmpvaW4oJl9bXSx7IH0sMSkiLCZzeCwmbngpOwotI2lmZGVmIENPTU1FTlQKLSAg ICAgICAgbWFrZXN0cigmdG9wbGluZSx0bXBidWYpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAg ICB9Ci0gICAgcmV0dXJuKDEpOwotfQotI2VuZGlmIC8qIE5PU1BMICovCi0KLWludAotZG9jZChj eCkgaW50IGN4OyB7ICAgICAgICAgICAgICAgICAgICAgIC8qIERvIHRoZSBDRCBjb21tYW5kICov Ci0gICAgaW50IHg7Ci0gICAgZXh0ZXJuIGludCBzZXJ2ZXIsIHNydmNkbXNnLCBjZGFjdGl2ZTsK LSAgICBleHRlcm4gY2hhciAqIGNkbXNnZmlsZVtdLCAqIGNrY2RwYXRoOwotICAgIGNoYXIgKnMs ICpwOwotI2lmZGVmIE1BQwotICAgIGNoYXIgdGVtcFszNF07Ci0jZW5kaWYgLyogTUFDICovCi0j aWZkZWYgSUtTRENPTkYKLWV4dGVybiBpbnQgaWtzZGNmOwotI2VuZGlmIC8qIElLU0RDT05GICov Ci0KLSNpZm5kZWYgTk9GUklMTFMKLSAgICBpZiAoY3ggPT0gWFhCQUNLKSB7Ci0gICAgICAgIGlm ICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgY3dkZiA9IDE7Ci0gICAgICAgIGlmIChwcmV2 ZGlyKSB7Ci0gICAgICAgICAgICBzID0gemd0ZGlyKCk7Ci0gICAgICAgICAgICBpZiAoIXpjaGRp cihwcmV2ZGlyKSkgewotICAgICAgICAgICAgICAgIGN3ZGYgPSAwOwotICAgICAgICAgICAgICAg IHBlcnJvcihzKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbWFrZXN0 cigmcHJldmRpcixzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4o Y3dkZik7Ci0gICAgfQotI2VuZGlmIC8qIE5PRlJJTExTICovCi0KLSAgICBpZiAoY3ggPT0gWFhD RFVQKSB7Ci0jaWZkZWYgVk1TCi0gICAgICAgIHMgPSAiWy1dIjsKLSNlbHNlCi0jaWZkZWYgZGF0 YWdlbmVyYWwKLSAgICAgICAgcyA9ICJeIjsKLSNlbHNlCi0gICAgICAgIHMgPSAiLi4iOwotI2Vu ZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyogVk1TICovCi0gICAgICAgIGNrc3RybmNw eShsaW5lLHMsTElOQlVGU0laKTsKLSAgICAgICAgZ290byBnb2NkOwotICAgIH0KLSNpZm5kZWYg Tk9TUEwKLSAgICBpZiAoY3ggPT0gWFhLQ0QpIHsJCQkvKiBTeW1ib2xpYyAoS2VybWl0KSBDRCAq LwotCWNoYXIgKiBwOwotCWludCBuLCBrOwotCXggPSBjbWtleShrY2R0YWIsbmtjZHRhYiwiU3lt Ym9saWMgZGlyZWN0b3J5IG5hbWUiLCJob21lIix4eHN0cmluZyk7Ci0JaWYgKHggPCAwKQotCSAg cmV0dXJuKHgpOwotCXggPSBsb29rdXAoa2NkdGFiLGF0bWJ1Zixua2NkdGFiLCZrKTsgLyogR2V0 IGNvbXBsZXRlIGtleXdvcmQgKi8KLQlpZiAoeCA8IDApIHsKLQkgICAgcHJpbnRmKCI/TG9va3Vw IGVycm9yXG4iKTsJLyogc2hvdWxkbid0IGhhcHBlbiAqLwotCSAgICByZXR1cm4oLTkpOwotCX0K LSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotCSAgcmV0dXJuKHgpOwotCWlmIChrID09 IFZOX0hPTUUpIHsJCS8qIEhPTUU6IGFsbG93IFNFVCBIT01FIHRvIG92ZXJyaWRlICovCi0JICAg IGNrc3RybmNweShsaW5lLGhvbWVwYXRoKCksTElOQlVGU0laKTsKLQl9IGVsc2UgewkJCS8qIE90 aGVyIHN5bWJvbGljIG5hbWUgKi8KLQkgICAgLyogQ29udmVydCB0byB2YXJpYWJsZSBzeW50YXgg Ki8KLQkgICAgY2ttYWttc2codG1wYnVmLFRNUEJVRlNJWiwiXFx2KCIsa2NkdGFiW2tdLmt3ZCwi KSIsTlVMTCk7Ci0JICAgIHAgPSBsaW5lOwkJCS8qIEV4cGFuZCB0aGUgdmFyaWFibGUgKi8KLQkg ICAgbiA9IExJTkJVRlNJWjsKLQkgICAgenpzdHJpbmcodG1wYnVmLCZwLCZuKTsKLQkgICAgaWYg KCFsaW5lWzBdKSB7CQkvKiBGYWlsIGlmIHZhcmlhYmxlIG5vdCBkZWZpbmVkICovCi0JCXByaW50 ZigiPyVzIC0gbm90IGRlZmluZWRcbiIsdG1wYnVmKTsKLQkJcmV0dXJuKHN1Y2Nlc3MgPSAwKTsK LQkgICAgfQotCX0KLQlzID0gbGluZTsJCQkvKiBBbGwgT0ssIGdvIHRyeSB0byBDRC4uLiAqLwot CWdvdG8gZ29jZDsKLSAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotICAgIGNkYWN0aXZlID0g MTsKLSNpZmRlZiBHRU1ET1MKLSAgICBpZiAoKHggPSBjbWRpcigiTmFtZSBvZiBsb2NhbCBkaXJl Y3RvcnksIG9yIGNhcnJpYWdlIHJldHVybiIsCi0gICAgICAgICAgICAgICAgICAgaG9tZXBhdGgo KSwKLSAgICAgICAgICAgICAgICAgICAmcywKLSAgICAgICAgICAgICAgICAgICBOVUxMCi0gICAg ICAgICAgICAgICAgICAgKQotICAgICAgICAgKSA8IDAgKQotICAgICAgcmV0dXJuKHgpOwotI2Vs c2UKLSNpZmRlZiBPUzIKLSAgICBpZiAoKHggPSBjbWRpcnAoIk5hbWUgb2YgUEMgZGlzayBhbmQv b3IgZGlyZWN0b3J5LFxuXAotICAgICAgIG9yIHByZXNzIHRoZSBFbnRlciBrZXkgZm9yIHRoZSBk ZWZhdWx0IiwKLSAgICAgICAgICAgICAgICAgICAgaG9tZXBhdGgoKSwKLSAgICAgICAgICAgICAg ICAgICAgJnMsCi0gICAgICAgICAgICAgICAgICAgIGNrY2RwYXRoID8gY2tjZHBhdGggOiBnZXRl bnYoIkNEUEFUSCIpLAotICAgICAgICAgICAgICAgICAgICB4eHN0cmluZwotICAgICAgICAgICAg ICAgICAgICApCi0gICAgICAgICApIDwgMCApCi0gICAgICByZXR1cm4oeCk7Ci0jZWxzZQotI2lm ZGVmIE1BQwotICAgIHggPSBja3N0cm5jcHkodGVtcCxob21lcGF0aCgpLDMyKTsKLSAgICBpZiAo eCA+IDApIGlmICh0ZW1wW3gtMV0gIT0gJzonKSB7IHRlbXBbeF0gPSAnOic7IHRlbXBbeCsxXSA9 IE5VTDsgfQotICAgIGlmICgoeCA9IGNtdHh0KCJOYW1lIG9mIE1hY2ludG9zaCB2b2x1bWUgYW5k L29yIGZvbGRlcixcblwKLSBvciBwcmVzcyB0aGUgUmV0dXJuIGtleSBmb3IgdGhlIGRlc2t0b3Ag b24gdGhlIGJvb3QgZGlzayIsCi0gICAgICAgICAgICAgICAgICAgdGVtcCwmcywgeHhzdHJpbmcp KSA8IDAgKQotICAgICAgcmV0dXJuKHgpOwotI2Vsc2UKLSAgICBpZiAoKHggPSBjbWRpcnAoIkNh cnJpYWdlIHJldHVybiBmb3IgaG9tZSBkaXJlY3RvcnksXG5cCi1vciBuYW1lIG9mIGRpcmVjdG9y eSBvbiB0aGlzIGNvbXB1dGVyIiwKLSNpZmRlZiBWTVMKLSAgICAgICAgICAgICAgICAgICAgIlNZ UyRMT0dJTiIsICAgICAgICAvKiBXaXRoIG5vIGNvbG9uICovCi0jZWxzZQotICAgICAgICAgICAg ICAgICAgICBob21lcGF0aCgpLAkJLyogSW4gVk1TIHRoaXMgaXMgIlNZUyRMT0dJTjoiICovCi0j ZW5kaWYgLyogVk1TICovCi0gICAgICAgICAgICAgICAgICAgICZzLAotICAgICAgICAgICAgICAg ICAgICBja2NkcGF0aCA/IGNrY2RwYXRoIDogZ2V0ZW52KCJDRFBBVEgiKSwKLSAgICAgICAgICAg ICAgICAgICAgeHhzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgKSkgPCAwKQotICAgICAgcmV0 dXJuKHgpOwotI2VuZGlmIC8qIE1BQyAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIEdF TURPUyAqLwotICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsgICAgICAgIC8qIE1ha2Ug YSBzYWZlIGNvcHkgKi8KLSAgICBzID0gbGluZTsKLSNpZmRlZiBWTVMKLSAgICBpZiAoY2ttYXRj aCgiKi5ESVI7MSQiLHMsMCwwKSkKLSAgICAgIGlmIChjdnRkaXIocyx0bXBidWYsVE1QQlVGU0la KSA+IDApCi0gICAgICAgIHMgPSB0bXBidWY7Ci0jZW5kaWYgLyogVk1TICovCi0gICAgZGVidWco RjExMCwiZG9jZCIscywwKTsKLSNpZm5kZWYgTUFDCi0gICAgaWYgKCh4ID0gY21jZm0oKSkgPCAw KSAgICAgICAgICAgICAgLyogR2V0IGNvbmZpcm1hdGlvbiAqLwotICAgICAgcmV0dXJuKHgpOwot I2VuZGlmIC8qIE1BQyAqLwotCi0gIGdvY2Q6Ci0KLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgIHgg PSBzdHJsZW4obGluZSk7ICAgICAgICAgICAgICAgICAgIC8qIGhvbWRpciBlbmRzIGluIGNvbG9u LCAqLwotICAgIGlmICh4ID4gMSAmJiBsaW5lW3gtMV0gPT0gJzonKSAgICAgIC8qIGFuZCAiZGly IiBkb2Vzbid0IGxpa2UgdGhhdC4uLiAqLwotICAgICAgbGluZVt4LTFdID0gTlVMOwotI2VuZGlm IC8qIGRhdGFnZW5lcmFsICovCi0KLSNpZmRlZiBNQUMKLSAgICBjd2RmID0gMTsKLSAgICBpZiAo IXpjaGRpcihzKSkgewotICAgICAgICBjd2RmID0gMDsKLSAgICAgICAgaWYgKCpzICE9ICc6Jykg eyAgICAgICAgICAgICAgICAvKiBJZiBpdCBmYWlsZWQsICovCi0gICAgICAgICAgICBjaGFyICpw OyAgICAgICAgICAgICAgICAgICAgLyogc3VwcGx5IGxlYWRpbmcgY29sb24gKi8KLSAgICAgICAg ICAgIGludCBsZW4gPSAoaW50KXN0cmxlbihzKSArIDI7Ci0gICAgICAgICAgICBwID0gbWFsbG9j KGxlbik7ICAgICAgICAgICAgLyogYW5kIHRyeSBhZ2Fpbi4uLiAqLwotICAgICAgICAgICAgaWYg KHApIHsKLSAgICAgICAgICAgICAgICBzdHJjcHkocCwiOiIpOyAgICAgICAgICAvKiBzYWZlICov Ci0gICAgICAgICAgICAgICAgc3RyY2F0KHAscyk7ICAgICAgICAgICAgLyogc2FmZSAqLwotICAg ICAgICAgICAgICAgIGlmICh6Y2hkaXIocCkpCi0gICAgICAgICAgICAgICAgICBjd2RmID0gMTsK LSAgICAgICAgICAgICAgICBmcmVlKHApOwotICAgICAgICAgICAgICAgIHAgPSBOVUxMOwotICAg ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGlmICghY3dkZikKLSAgICAgIHBlcnJv cihzKTsKLSNlbHNlCi0gICAgcCA9IHpndGRpcigpOwotICAgIGlmICghemNoZGlyKHMpKSB7Ci0g ICAgICAgIGN3ZGYgPSAwOwotI2lmZGVmIENLUk9PVAotICAgICAgICBpZiAoY2tyb290ZXJyKQot ICAgICAgICAgIHByaW50ZigiP09mZiBsaW1pdHM6IFwiJXNcIlxuIixzKTsKLSAgICAgICAgZWxz ZQotI2VuZGlmIC8qIENLUk9PVCAqLwotICAgICAgICAgIHBlcnJvcihzKTsKLSAgICB9IGVsc2Ug Y3dkZiA9IDE7Ci0jZW5kaWYgLyogTUFDICovCi0KLSAgICB4ID0gMDsKLSAgICBpZiAoY3dkZikg ewotICAgICAgICBtYWtlc3RyKCZwcmV2ZGlyLHApOwotICAgICAgICBkZWJ1ZyhGMTExLCJkb2Nk Iiwic3J2Y2Rtc2ciLHNydmNkbXNnKTsKLSAgICAgICAgaWYgKHNydmNkbXNnCi0jaWZkZWYgSUtT RENPTkYKLSAgICAgICAgICAgICYmICEoaW5zZXJ2ZXIgJiYgIWlrc2RjZikKLSNlbmRpZiAvKiBJ S1NEQ09ORiAqLwotICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICBpbnQgaTsKLSAgICAgICAg ICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEx LCJkb2NkIGNkbXNnZmlsZVtpXSIsY2Rtc2dmaWxlW2ldLGkpOwotICAgICAgICAgICAgICAgIGlm ICh6Y2hraShjZG1zZ2ZpbGVbaV0pID4gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgeCA9IDE7 Ci0gICAgICAgICAgICAgICAgICAgIGRvdHlwZShjZG1zZ2ZpbGVbaV0seGFza21vcmUsMCwwLE5V TEwsMCxOVUxMLDAsMCxOVUxMLDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0vKiB4ZG9jZDog Ki8KLSAgICBpZiAoIXggJiYgc3J2Y2Rtc2cgJiYgIXNlcnZlcgotI2lmZGVmIElLU0RDT05GCi0g ICAgICAgICYmICEoaW5zZXJ2ZXIgJiYgIWlrc2RjZikKLSNlbmRpZiAvKiBJS1NEQ09ORiAqLwot ICAgICAgICAmJiAhcXVpZXQgJiYgIXhjbWRzcmMpCi0gICAgICBwcmludGYoIiVzXG4iLCB6Z3Rk aXIoKSk7Ci0KLSAgICByZXR1cm4oY3dkZik7Ci19Ci0KLXN0YXRpYyBpbnQgb25fY3RybGMgPSAw OwotCi1WT0lECi1maXhjbWQoKSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpeCBjb21tYW5k IHBhcnNlciBhZnRlciBpbnRlcnJ1cHRpb24gKi8KLSNpZm5kZWYgTk9TUEwKLSNpZm5kZWYgTk9P TkNUUkxDCi0gICAgaWYgKG5tYWMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQW55IG1h Y3JvcyBkZWZpbmVkPyAqLwotICAgICAgICBpbnQgazsgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFllcyAqLwotICAgICAgICBjaGFyICogcyA9ICJvbl9jdHJsYyI7ICAgICAgICAgIC8qIE5h bWUgb2YgQ3RybC1DIGhhbmRsaW5nIG1hY3JvICovCi0gICAgICAgIGsgPSBtbG9vayhtYWN0YWIs cyxubWFjKTsgICAgICAgLyogTG9vayBpdCB1cC4gKi8KLSAgICAgICAgaWYgKGsgPj0gMCkgeyAg ICAgICAgICAgICAgICAgICAvKiBJZiBmb3VuZCwgKi8KLSAgICAgICAgICAgIGlmIChvbl9jdHJs YysrID09IDApIHsgICAgICAvKiBpZiBub3QgYWxyZWFkeSBleGVjdXRpbmcsICovCi0gICAgICAg ICAgICAgICAgaWYgKGRvZG8oaywiIiwwKSA+IC0xKSAgLyogc2V0IGl0IHVwLCAqLwotICAgICAg ICAgICAgICAgICAgcGFyc2VyKDEpOyAgICAgICAgICAgIC8qIGV4ZWN1dGUgaXQsICovCi0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBkZWxtYWMocywxKTsgICAgICAgICAgICAgICAgLyogYW5k IHVuZGVmaW5lIGl0LiAqLwotICAgICAgICB9Ci0gICAgfQotICAgIG9uX2N0cmxjID0gMDsKLSNl bmRpZiAvKiBOT09OQ1RSTEMgKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgIGRvc3RvcCgpOyAg ICAgICAgICAgICAgICAgICAvKiBCYWNrIHRvIHRvcCBsZXZlbCAoYWxzbyBjYWxscyBjb25pbnQo KSkuICovCi0gICAgYmdjaGsoKTsgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGJhY2tncm91 bmQgc3RhdHVzICovCi0gICAgaWYgKCpwc2F2ZSkgeyAgICAgICAgICAgICAgIC8qIElmIG9sZCBw cm9tcHQgc2F2ZWQsICovCi0gICAgICAgIGNtc2V0cChwc2F2ZSk7ICAgICAgICAgIC8qIHJlc3Rv cmUgaXQuICovCi0gICAgICAgICpwc2F2ZSA9IE5VTDsKLSAgICB9Ci0gICAgc3VjY2VzcyA9IDA7 ICAgICAgICAgICAgICAgIC8qIFRlbGwgcGFyc2VyIGxhc3QgY29tbWFuZCBmYWlsZWQgKi8KLX0K LQotI2lmbmRlZiBOT1NIT1cgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNIT1cgRkVBVFVS RVMgKi8KLS8qCi0gIE5vdGUsIHByZXNlbnRseSBvcHRsaXN0W10gaW5kZXggb3ZlcmZsb3cgaXMg bm90IGNoZWNrZWQuCi0gIFRoZXJlIGlzIHBsZW50eSBvZiByb29tIChsZXNzIHRoYW4gMzYwIGVu dHJpZXMgZm9yIDEwMDAgc2xvdHMpLgotICBXaGVuIHNwYWNlIHN0YXJ0cyB0byBnZXQgdGlnaHQs IGNoZWNrIGZvciBub3B0bGlzdCA+PSBOT1BUTElTVAotICBldmVyeSB0aW1lIG5vcHRsaXN0IGlz IGluY3JlbWVudGVkLgotKi8KLSNkZWZpbmUgTk9QVExJU1QgMTAyNAotc3RhdGljIGludCBub3B0 bGlzdCA9IDA7Ci1zdGF0aWMgY2hhciAqIG9wdGxpc3RbTk9QVExJU1QrMV07Ci1zdGF0aWMgaW50 IGhwb3MgPSAwOwotCi1pbnQKLXBydG9wdChsaW5lcyxzKSBpbnQgKiBsaW5lczsgY2hhciAqczsg eyAvKiBQcmludCBhbiBvcHRpb24gKi8KLSAgICBpbnQgeSwgaTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBEb2VzIHdvcmQgd3JhcC4gKi8KLSAgICBpZiAoIXMpIHMgPSAiIjsKLSAgICBp ID0gKmxpbmVzOwotICAgIGlmICghKnMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVt cHR5IGFyZ3VtZW50ICovCi0gICAgICAgIGlmIChocG9zID4gMCkgeyAgICAgICAgICAgICAgICAg LyogbWVhbnMgdG8gZW5kIHRoaXMgbGluZS4gKi8KLSAgICAgICAgICAgIHByaW50ZigiXG4iKTsg ICAgICAgICAgICAgICAvKiBOb3QgbmVlZGVkIGlmIGFscmVhZHkgYXQgKi8KLSAgICAgICAgICAg IGlmICgrK2kgPiAoY21kX3Jvd3MgLSAzKSkgeyAvKiBiZWdpbm5pbmcgb2YgbmV3IGxpbmUuICov Ci0gICAgICAgICAgICAgICAgaWYgKCFhc2ttb3JlKCkpCi0gICAgICAgICAgICAgICAgICByZXR1 cm4oMCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgaSA9IDA7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcHJpbnRmKCJcbiIpOyAgICAgICAgICAg ICAgICAgICAvKiBBbmQgdGhlbiBtYWtlIGEgYmxhbmsgbGluZSAqLwotICAgICAgICBpZiAoKytp ID4gKGNtZF9yb3dzIC0gMykpIHsKLSAgICAgICAgICAgIGlmICghYXNrbW9yZSgpKQotICAgICAg ICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIGkgPSAw OwotICAgICAgICB9Ci0gICAgICAgIGhwb3MgPSAwOwotICAgICAgICAqbGluZXMgPSBpOwotICAg ICAgICByZXR1cm4oMSk7Ci0gICAgfQotICAgIHkgPSAoaW50KXN0cmxlbihzKSArIDE7Ci0gICAg aHBvcyArPSB5OwotICAgIGRlYnVnKEYxMDEsInBydG9wdCBocG9zIiwiIixocG9zKTsKLSAgICBk ZWJ1ZyhGMTAxLCJwcnRvcHQgY21kX2NvbHMiLCIiLGNtZF9jb2xzKTsKLQotICAgIGlmICgKLSNp ZmRlZiBPUzIKLSAgICAgICAgaHBvcyA+ICgoY21kX2NvbHMgPiA0MCkgPyAoY21kX2NvbHMgLSAx KSA6IDc5KQotI2Vsc2UgLyogT1MyICovCi0gICAgICAgIGhwb3MgPiAoKHR0X2NvbHMgPiA0MCkg PyAodHRfY29scyAtIDEpIDogNzkpCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICkgewotICAg ICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgIGlmICgrK2kgPiAoY21kX3Jvd3MgLSAzKSkgewot ICAgICAgICAgICAgaWYgKCFhc2ttb3JlKCkpCi0gICAgICAgICAgICAgIHJldHVybigwKTsKLSAg ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgaSA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAg cHJpbnRmKCIgJXMiLHMpOwotICAgICAgICBocG9zID0geTsKLSAgICB9IGVsc2UKLSAgICAgIHBy aW50ZigiICVzIixzKTsKLSAgICAqbGluZXMgPSBpOwotICAgIHJldHVybigxKTsKLX0KLQotc3Rh dGljIFZPSUQKLWluaXRvcHRsaXN0KCkgewotICAgIGludCBpOwotICAgIGlmIChub3B0bGlzdCA+ IDApCi0gICAgICByZXR1cm47Ci0gICAgZm9yIChpID0gMDsgaSA8IE5PUFRMSVNUOyBpKyspCi0g ICAgICBvcHRsaXN0W2ldID0gTlVMTDsKLQotI2lmZGVmIE1BQwotI2lmZGVmIE1QVwotICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTVBXIik7Ci0jZW5kaWYgLyogTVBXICovCi0j ZW5kaWYgLyogTUFDICovCi0KLSNpZmRlZiBNQUMKLSNpZmRlZiBUSElOS19DCi0gICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJUSElOS19DIik7Ci0jZW5kaWYgLyogVEhJTktfQyAq LwotI2VuZGlmIC8qIE1BQyAqLwotCi0jaWZkZWYgX18zODZfXwotICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiX18zODZfXyIpOwotI2VuZGlmIC8qIF9fMzg2X18gKi8KLQotLyog TWVtb3J5IG1vZGVscy4uLiAqLwotCi0jaWZkZWYgX19GTEFUX18KLSAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIl9fRkxBVF9fIik7Ci0jZW5kaWYgLyogX19GTEFUX18gKi8KLSNp ZmRlZiBfX1NNQUxMX18KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fU01B TExfXyIpOwotI2VuZGlmIC8qIF9fU01BTExfXyAqLwotI2lmZGVmIF9fTUVESVVNX18KLSAgICBt YWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fTUVESVVNX18iKTsKLSNlbmRpZiAvKiBf X01FRElVTV9fICovCi0jaWZkZWYgX19DT01QQUNUX18KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksIl9fQ09NUEFDVF9fIik7Ci0jZW5kaWYgLyogX19DT01QQUNUX18gKi8KLSNp ZmRlZiBfX0xBUkdFX18KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fTEFS R0VfXyIpOwotI2VuZGlmIC8qIF9fTEFSR0VfXyAqLwotCi0jaWZkZWYgREVCVUcKLSNpZmRlZiBJ RkRFQlVHCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJJRkRFQlVHIik7Ci0j ZWxzZQotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiREVCVUciKTsKLSNlbmRp ZiAvKiBJRkRFQlVHICovCi0jZW5kaWYgLyogREVCVUcgKi8KLSNpZmRlZiBUTE9HCi0gICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJUTE9HIik7Ci0jZW5kaWYgLyogVExPRyAqLwot I2lmZGVmIEJJR0JVRk9LCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJCSUdC VUZPSyIpOwotI2VuZGlmIC8qIEJJR0JVRk9LICovCi0jaWZkZWYgSU5QQlVGU0laCi0gICAgc3By aW50ZihsaW5lLCJJTlBCVUZTSVo9JWQiLElOUEJVRlNJWik7IC8qIFNBRkUgKi8KLSAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7Ci0jZW5kaWYgLyogSU5QQlVGU0laRSAq LwotI2lmZGVmIExJTkJVRlNJWgotICAgIHNwcmludGYobGluZSwiTElOQlVGU0laPSVkIixMSU5C VUZTSVopOyAvKiBTQUZFICovCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxp bmUpOwotI2VuZGlmIC8qIExJTkJVRlNJWkUgKi8KLSNpZmRlZiBJTkJVRlNJWkUKLSAgICBzcHJp bnRmKGxpbmUsIklOQlVGU0laRT0lZCIsSU5CVUZTSVpFKTsgLyogU0FGRSAqLwotICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKLSNlbmRpZiAvKiBJTkJVRlNJWkUgKi8K LSNpZmRlZiBPQlVGU0laRQotICAgIHNwcmludGYobGluZSwiT0JVRlNJWkU9JWQiLE9CVUZTSVpF KTsgLyogU0FGRSAqLwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsK LSNlbmRpZiAvKiBPQlVGU0laRSAqLwotI2lmZGVmIEZEX1NFVFNJWkUKLSAgICBzcHJpbnRmKGxp bmUsIkZEX1NFVFNJWkU9JWQiLEZEX1NFVFNJWkUpOyAvKiBTQUZFICovCi0gICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOwotI2VuZGlmIC8qIEZEX1NFVFNJWkUgKi8KLSNp ZmRlZiBYRlJDQU4KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlhGUkNBTiIp OwotI2VuZGlmIC8qIFhGUkNBTiAqLwotI2lmZGVmIFhQUklOVAotICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiWFBSSU5UIik7Ci0jZW5kaWYgLyogWFBSSU5UICovCi0jaWZkZWYg UElQRVNFTkQKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlBJUEVTRU5EIik7 Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLSNpZmRlZiBDS19TUEVFRAotICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfU1BFRUQiKTsKLSNlbmRpZiAvKiBDS19TUEVFRCAqLwot I2lmZGVmIENLX0ZBU1QKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX0ZB U1QiKTsKLSNlbmRpZiAvKiBDS19GQVNUICovCi0jaWZkZWYgQ0tfQVBDCi0gICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19BUEMiKTsKLSNlbmRpZiAvKiBDS19BUEMgKi8KLSNp ZmRlZiBDS19BVVRPREwKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX0FV VE9ETCIpOwotI2VuZGlmIC8qIENLX0FVVE9ETCAqLwotI2lmZGVmIENLX01LRElSCi0gICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19NS0RJUiIpOwotI2VuZGlmIC8qIENLX01L RElSICovCi0jaWZkZWYgTk9NS0RJUgotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwiTk9NS0RJUiIpOwotI2VuZGlmIC8qIE5PTUtESVIgKi8KLSNpZmRlZiBDS19MQUJFTEVECi0g ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19MQUJFTEVEIik7Ci0jZW5kaWYg LyogQ0tfTEFCRUxFRCAqLwotI2lmZGVmIE5PRElBTAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiTk9ESUFMIik7Ci0jZW5kaWYgLyogTk9ESUFMICovCi0jaWZkZWYgTUlOSURJ QUwKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk1JTklESUFMIik7Ci0jZW5k aWYgLyogTUlOSURJQUwgKi8KLSNpZmRlZiBXSEFUQU1JCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJXSEFUQU1JIik7Ci0jZW5kaWYgLyogV0hBVEFNSSAqLwotI2lmZGVmIERZ TkFNSUMKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkRZTkFNSUMiKTsKLSNl bmRpZiAvKiBEWU5BTUlDICovCi0jaWZuZGVmIE5PU1BMCi0gICAgc3ByaW50ZihsaW5lLCJDTURE RVA9JWQiLENNRERFUCk7ICAgLyogU0FGRSAqLwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSxsaW5lKTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZkZWYgTUFYUEFUSExFTgot ICAgIHNwcmludGYobGluZSwiTUFYUEFUSExFTj0lZCIsTUFYUEFUSExFTik7IC8qIFNBRkUgKi8K LSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7Ci0jZW5kaWYgLyogTUFY UEFUSExFTiAqLwotCi0jaWZkZWYgREVWTkFNTEVOCi0gICAgc3ByaW50ZihsaW5lLCJERVZOQU1M RU49JWQiLERFVk5BTUxFTik7IC8qIFNBRkUgKi8KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksbGluZSk7Ci0jZW5kaWYgLyogREVWTkFNTEVOICovCi0KLSNpZmRlZiBOT19QQVJB TV9ICi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOT19QQVJBTV9IIik7Ci0j ZW5kaWYgLyogTk9fUEFSQU1fSCAqLwotCi0jaWZkZWYgSU5DTF9QQVJBTV9ICi0gICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJJTkNMX1BBUkFNX0giKTsKLSNlbmRpZiAvKiBJTkNM X1BBUkFNX0ggKi8KLQotICAgIHNwcmludGYobGluZSwiQ0tNQVhQQVRIPSVkIixDS01BWFBBVEgp OyAvKiBTQUZFICovCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOwot Ci0gICAgc3ByaW50ZihsaW5lLCJDS01BWE9QRU49JWQiLENLTUFYT1BFTik7IC8qIFNBRkUgKi8K LSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7Ci0KLSAgICBzcHJpbnRm KGxpbmUsIlpfTUFYQ0hBTj0lZCIsWl9NQVhDSEFOKTsgLyogU0FGRSAqLwotICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKLQotI2lmZGVmIE9QRU5fTUFYCi0gICAgc3By aW50ZihsaW5lLCJPUEVOX01BWD0lZCIsT1BFTl9NQVgpOyAvKiBTQUZFICovCi0gICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOwotI2VuZGlmIC8qIE9QRU5fTUFYICovCi0K LSNpZmRlZiBfUE9TSVhfT1BFTl9NQVgKLSAgICBzcHJpbnRmKGxpbmUsIl9QT1NJWF9PUEVOX01B WD0lZCIsX1BPU0lYX09QRU5fTUFYKTsgLyogU0FGRSAqLwotICAgIG1ha2VzdHIoJihvcHRsaXN0 W25vcHRsaXN0KytdKSxsaW5lKTsKLSNlbmRpZiAvKiBfUE9TSVhfT1BFTl9NQVggKi8KLQotI2lm ZGVmIENLQ0hBTk5FTElPCi0gICAgewotICAgICAgICBleHRlcm4gaW50IHpfbWF4Y2hhbjsKLSNp ZmRlZiBVTklYCi0gICAgICAgIGV4dGVybiBpbnQgY2ttYXhmaWxlczsKLSAgICAgICAgc3ByaW50 ZihsaW5lLCJja21heGZpbGVzPSVkIixja21heGZpbGVzKTsgLyogU0FGRSAqLwotICAgICAgICBt YWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7Ci0jZW5kaWYgLyogVU5JWCAqLwot ICAgICAgICBzcHJpbnRmKGxpbmUsInpfbWF4Y2hhbj0lZCIsel9tYXhjaGFuKTsgLyogU0FGRSAq LwotICAgICAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7Ci0gICAgfQot I2VuZGlmIC8qIENLQ0hBTk5FTElPICovCi0KLSNpZmRlZiBGT1BFTl9NQVgKLSAgICBzcHJpbnRm KGxpbmUsIkZPUEVOX01BWD0lZCIsRk9QRU5fTUFYKTsgLyogU0FGRSAqLwotICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKLSNlbmRpZiAvKiBGT1BFTl9NQVggKi8KLQot I2lmZGVmIE1BWEdFVFBBVEgKLSAgICBzcHJpbnRmKGxpbmUsIk1BWEdFVFBBVEg9JWQiLE1BWEdF VFBBVEgpOyAvKiBTQUZFICovCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxp bmUpOwotI2VuZGlmIC8qIE1BWEdFVFBBVEggKi8KLQotI2lmZGVmIENNREJMCi0gICAgc3ByaW50 ZihsaW5lLCJDTURCTD0lZCIsQ01EQkwpOyAgICAgLyogU0FGRSAqLwotICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKLSNlbmRpZiAvKiBDTURCTCAqLwotCi0jaWZkZWYg Vk5BTUwKLSAgICBzcHJpbnRmKGxpbmUsIlZOQU1MPSVkIixWTkFNTCk7ICAgICAvKiBTQUZFICov Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOwotI2VuZGlmIC8qIFZO QU1MICovCi0KLSNpZmRlZiBBUlJBWVJFRkxFTgotICAgIHNwcmludGYobGluZSwiQVJSQVlSRUZM RU49JWQiLEFSUkFZUkVGTEVOKTsgLyogU0FGRSAqLwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSxsaW5lKTsKLSNlbmRpZiAvKiBBUlJBWVJFRkxFTiAqLwotCi0jaWZkZWYgVUlE QlVGTEVOCi0gICAgc3ByaW50ZihsaW5lLCJVSURCVUZMRU49JWQiLFVJREJVRkxFTik7IC8qIFNB RkUgKi8KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7Ci0jZW5kaWYg LyogVUlEQlVGTEVOICovCi0KLSNpZmRlZiBGT1JERVBUSAotICAgIHNwcmludGYobGluZSwiRk9S REVQVEg9JWQiLEZPUkRFUFRIKTsgLyogU0FGRSAqLwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSxsaW5lKTsKLSNlbmRpZiAvKiBGT1JERVBUSCAqLwotCi0jaWZkZWYgTUFYVEFL RQotICAgIHNwcmludGYobGluZSwiTUFYVEFLRT0lZCIsTUFYVEFLRSk7IC8qIFNBRkUgKi8KLSAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7Ci0jZW5kaWYgLyogTUFYVEFL RSAqLwotCi0jaWZkZWYgTUFDTEVWRUwKLSAgICBzcHJpbnRmKGxpbmUsIk1BQ0xFVkVMPSVkIixN QUNMRVZFTCk7IC8qIFNBRkUgKi8KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks bGluZSk7Ci0jZW5kaWYgLyogTUFDTEVWRUwgKi8KLQotI2lmZGVmIE1BQ19NQVgKLSAgICBzcHJp bnRmKGxpbmUsIk1BQ19NQVg9JWQiLE1BQ19NQVgpOyAvKiBTQUZFICovCi0gICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOwotI2VuZGlmIC8qIE1BQ19NQVggKi8KLQotI2lm ZGVmIF9MQVJHRUZJTEVfU09VUkNFCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJfTEFSR0VGSUxFX1NPVVJDRSIpOwotI2VuZGlmCS8qIF9MQVJHRUZJTEVfU09VUkNFICovCi0K LSNpZmRlZiBfRklMRV9PRkZTRVRfQklUUwotICAgIHNwcmludGYobGluZSwiX0ZJTEVfT0ZGU0VU X0JJVFM9JWQiLF9GSUxFX09GRlNFVF9CSVRTKTsgLyogU0FGRSAqLwotICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKLSNlbmRpZgkvKiBfRklMRV9PRkZTRVRfQklUUyAq LwotCi0jaWZkZWYgX19VU0VfRklMRV9PRkZTRVQ2NAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiX19VU0VfRklMRV9PRkZTRVQ2NCIpOwotI2VuZGlmCS8qIF9fVVNFX0ZJTEVf T0ZGU0VUNjQgKi8KLQotI2lmZGVmIF9fVVNFX0xBUkdFRklMRTY0Ci0gICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJfX1VTRV9MQVJHRUZJTEU2NCIpOwotI2VuZGlmCS8qIF9fVVNF X0xBUkdFRklMRTY0ICovCi0KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgQ0hBUl9NQVgKLSAgICBz cHJpbnRmKGxpbmUsIkNIQVJfTUFYPSVsbHgiLENIQVJfTUFYKTsgLyogU0FGRSAqLwotICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKLSNlbmRpZiAvKiBDSEFSX01BWCAq LwotI2lmZGVmIFVDSEFSX01BWAotICAgIHNwcmludGYobGluZSwiVUNIQVJfTUFYPSVsbHgiLFVD SEFSX01BWCk7IC8qIFNBRkUgKi8KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks bGluZSk7Ci0jZW5kaWYgLyogVUNIQVJfTUFYICovCi0jaWZkZWYgU0hSVF9NQVgKLSAgICBzcHJp bnRmKGxpbmUsIlNIUlRfTUFYPSVsbHgiLFNIUlRfTUFYKTsgLyogU0FGRSAqLwotICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKLSNlbmRpZiAvKiBTSFJUX01BWCAqLwot I2lmZGVmIFVTSFJUX01BWAotICAgIHNwcmludGYobGluZSwiVVNIUlRfTUFYPSVsbHgiLFVTSFJU X01BWCk7IC8qIFNBRkUgKi8KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGlu ZSk7Ci0jZW5kaWYgLyogVVNIUlRfTUFYICovCi0jaWZkZWYgSU5UX01BWAotICAgIHNwcmludGYo bGluZSwiSU5UX01BWD0lbGx4IixJTlRfTUFYKTsgLyogU0FGRSAqLwotICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKLSNlbmRpZiAvKiBJTlRfTUFYICovCi0jaWZkZWYg VUlOVF9NQVgKLSAgICBzcHJpbnRmKGxpbmUsIlVJTlRfTUFYPSVsbHgiLFVJTlRfTUFYKTsgLyog U0FGRSAqLwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKLSNlbmRp ZiAvKiBVSU5UX01BWCAqLwotI2lmZGVmIE1BWF9MT05HCi0gICAgc3ByaW50ZihsaW5lLCJNQVhf TE9ORz0lbGx4IixNQVhfTE9ORyk7IC8qIFNBRkUgKi8KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksbGluZSk7Ci0jZW5kaWYgLyogTUFYX0xPTkcgKi8KLSNpZmRlZiBMT05HX01B WAotICAgIHNwcmludGYobGluZSwiTE9OR19NQVg9JWxseCIsTE9OR19NQVgpOyAvKiBTQUZFICov Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOwotI2VuZGlmIC8qIExP TkdfTUFYICovCi0jaWZkZWYgVUxPTkdfTUFYCi0gICAgc3ByaW50ZihsaW5lLCJVTE9OR19NQVg9 JWxseCIsVUxPTkdfTUFYKTsgLyogU0FGRSAqLwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSxsaW5lKTsKLSNlbmRpZiAvKiBVTE9OR19NQVggKi8KLSNpZmRlZiBNQVhJTlQKLSAg ICBzcHJpbnRmKGxpbmUsIk1BWElOVD0lbGx4IixNQVhJTlQpOyAvKiBTQUZFICovCi0gICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOwotI2VuZGlmIC8qIE1BWElOVCAqLwot I2lmZGVmIE1BWExPTkcKLSAgICBzcHJpbnRmKGxpbmUsIk1BWExPTkc9JWxseCIsTUFYTE9ORyk7 IC8qIFNBRkUgKi8KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7Ci0j ZW5kaWYgLyogTUFYTE9ORyAqLwotI2lmZGVmIE5UCi0jaWZkZWYgTExPTkdfTUFYCi0gICAgc3By aW50ZihsaW5lLCJMTE9OR19NQVg9JUk2NHgiLExMT05HX01BWCk7IC8qIFNBRkUgKi8KLSAgICBt YWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7Ci0jZW5kaWYgLyogTExPTkdfTUFY ICovCi0jaWZkZWYgVUxMT05HX01BWAotICAgIHNwcmludGYobGluZSwiVUxMT05HX01BWD0lSTY0 eCIsVUxMT05HX01BWCk7IC8qIFNBRkUgKi8KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksbGluZSk7Ci0jZW5kaWYgLyogVUxMT05HX01BWCAqLwotI2lmZGVmIE1BWExPTkdMT05H Ci0gICAgc3ByaW50ZihsaW5lLCJNQVhMT05HTE9ORz0lSTY0eCIsTUFYTE9OR0xPTkcpOyAgLyog U0FGRSAqLwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKLSNlbmRp ZiAvKiBNQVhMT05HTE9ORyAqLwotI2Vsc2UKLSNpZmRlZiBMTE9OR19NQVgKLSAgICBzcHJpbnRm KGxpbmUsIkxMT05HX01BWD0lbGx4IixMTE9OR19NQVgpOyAvKiBTQUZFICovCi0gICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOwotI2VuZGlmIC8qIExMT05HX01BWCAqLwot I2lmZGVmIFVMTE9OR19NQVgKLSAgICBzcHJpbnRmKGxpbmUsIlVMTE9OR19NQVg9JWxseCIsVUxM T05HX01BWCk7IC8qIFNBRkUgKi8KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks bGluZSk7Ci0jZW5kaWYgLyogVUxMT05HX01BWCAqLwotI2lmZGVmIE1BWExPTkdMT05HCi0gICAg c3ByaW50ZihsaW5lLCJNQVhMT05HTE9ORz0lbGx4IixNQVhMT05HTE9ORyk7ICAvKiBTQUZFICov Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOwotI2VuZGlmIC8qIE1B WExPTkdMT05HICovCi0jZW5kaWYKLSNpZmRlZiBfSU5URUdSQUxfTUFYX0JJVFMKLSAgICBzcHJp bnRmKGxpbmUsIl9JTlRFR1JBTF9NQVhfQklUUz0lZCIsX0lOVEVHUkFMX01BWF9CSVRTKTsgIC8q IFNBRkUgKi8KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7Ci0jZW5k aWYgLyogX0lOVEVHUkFMX01BWF9CSVRTICovCi0jZW5kaWYJLyogQ09NTUVOVCAqLwotCi0jaWZk ZWYgTUlOUFVUTUFYCi0gICAgc3ByaW50ZihsaW5lLCJNSU5QVVRNQVg9JWQiLE1JTlBVVE1BWCk7 IC8qIFNBRkUgKi8KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7Ci0j ZW5kaWYgLyogTUlOUFVUTUFYICovCi0KLSNpZmRlZiBNQVhXTEQKLSAgICBzcHJpbnRmKGxpbmUs Ik1BWFdMRD0lZCIsTUFYV0xEKTsgLyogU0FGRSAqLwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSxsaW5lKTsKLSNlbHNlCi0jaWZkZWYgT1MyCi0gICAgbWFrZXN0cigmKG9wdGxp c3Rbbm9wdGxpc3QrK10pLCJNQVhXTEQ9dW5saW1pdGVkIik7Ci0jZW5kaWYgLyogT1MyICovCi0j ZW5kaWYgLyogTUFYV0xEICovCi0KLSNpZmRlZiBNU0VORE1BWAotICAgIHNwcmludGYobGluZSwi TVNFTkRNQVg9JWQiLE1TRU5ETUFYKTsgLyogU0FGRSAqLwotICAgIG1ha2VzdHIoJihvcHRsaXN0 W25vcHRsaXN0KytdKSxsaW5lKTsKLSNlbmRpZiAvKiBNU0VORE1BWCAqLwotCi0jaWZkZWYgTUFY RERJUgotICAgIHNwcmludGYobGluZSwiTUFYRERJUj0lZCIsTUFYRERJUik7IC8qIFNBRkUgKi8K LSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7Ci0jZW5kaWYgLyogTUFY RERJUiAqLwotCi0jaWZkZWYgTUFYRE5VTVMKLSAgICBzcHJpbnRmKGxpbmUsIk1BWEROVU1TPSVk IixNQVhETlVNUyk7IC8qIFNBRkUgKi8KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksbGluZSk7Ci0jZW5kaWYgLyogTUFYRE5VTVMgKi8KLQotI2lmZGVmIFVOSVgKLSAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlVOSVgiKTsKLSNlbmRpZiAvKiBVTklYICovCi0K LSNpZmRlZiBWTVMKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlZNUyIpOwot I2lmZGVmIF9fVk1TX1ZFUgotICAgIHNwcmludGYobGluZSwiX19WTVNfVkVSPSVkIixfX1ZNU19W RVIpOyAvKiBTQUZFICovCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUp OwotI2VuZGlmIC8qIF9fVk1TX1ZFUiAqLwotI2lmZGVmIFZNU1Y3MAotICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiVk1TVjcwIik7Ci0jZW5kaWYgLyogVk1TVjcwICovCi0jaWZk ZWYgT0xEX1ZNUwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiT0xEX1ZNUyIp OwotI2VuZGlmIC8qIE9MRF9WTVMgKi8KLSNpZmRlZiB2bXMKLSAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksInZtcyIpOwotI2VuZGlmIC8qIHZtcyAqLwotI2lmZGVmIFZNU1Y2MAot ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiVk1TVjYwIik7Ci0jZW5kaWYgLyog Vk1TVjYwICovCi0jaWZkZWYgVk1TVjgwCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJWTVNWODAiKTsKLSNlbmRpZiAvKiBWTVNWODAgKi8KLSNpZmRlZiBWTVNTSEFSRQotICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiVk1TU0hBUkUiKTsKLSNlbmRpZiAvKiBW TVNTSEFSRSAqLwotI2lmZGVmIE5PVk1TU0hBUkUKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksIk5PVk1TU0hBUkUiKTsKLSNlbmRpZiAvKiBOT1ZNU1NIQVJFICovCi0jZW5kaWYg LyogVk1TICovCi0KLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiZGF0YWdlbmVyYWwiKTsKLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2lm ZGVmIGFwb2xsbwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiYXBvbGxvIik7 Ci0jZW5kaWYgLyogYXBvbGxvICovCi0jaWZkZWYgYWVnaXMKLSAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksImFlZ2lzIik7Ci0jZW5kaWYgLyogYWVnaXMgKi8KLSNpZmRlZiBBOTg2 Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJBOTg2Iik7Ci0jZW5kaWYgLyog QTk4NiAqLwotI2lmZGVmIEFNSUdBCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJBTUlHQSIpOwotI2VuZGlmIC8qIEFNSUdBICovCi0jaWZkZWYgQ09OVkVYOQotICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ09OVkVYOSIpOwotI2VuZGlmIC8qIENPTlZFWDkg Ki8KLSNpZmRlZiBDT05WRVgxMAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi Q09OVkVYMTAiKTsKLSNlbmRpZiAvKiBDT05WRVg5ICovCi0jaWZkZWYgTUFDCi0gICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJNQUMiKTsKLSNlbmRpZiAvKiBNQUMgKi8KLSNpZmRl ZiBBVVgKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkFVWCIpOwotI2VuZGlm IC8qIEFVWCAqLwotCi0jaWZkZWYgT1MyCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJPUzIiKTsKLSNpZmRlZiBOVAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwiTlQiKTsKLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgT1NL Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJPUzkiKTsKLSNlbmRpZiAvKiBP U0sgKi8KLQotI2lmZGVmIE1TRE9TCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJNU0RPUyIpOwotI2VuZGlmIC8qIE1TRE9TICovCi0KLSNpZmRlZiBESVJFTlQKLSAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkRJUkVOVCIpOwotI2VuZGlmIC8qIERJUkVOVCAq LwotCi0jaWZkZWYgU0RJUkVOVAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi U0RJUkVOVCIpOwotI2VuZGlmIC8qIFNESVJFTlQgKi8KLQotI2lmZGVmIE5ESVIKLSAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5ESVIiKTsKLSNlbmRpZiAvKiBORElSICovCi0K LSNpZmRlZiBYTkRJUgotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiWE5ESVIi KTsKLSNlbmRpZiAvKiBYTkRJUiAqLwotCi0jaWZkZWYgU0FWRURVSUQKLSAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksIlNBVkVEVUlEIik7Ci0jZW5kaWYgLyogU0FWRURVSUQgKi8K LQotI2lmZGVmIFJFTkFNRQotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiUkVO QU1FIik7Ci0jZW5kaWYgLyogUkVOQU1FICovCi0KLSNpZmRlZiBDS19UTVBESVIKLSAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX1RNUERJUiIpOwotI2VuZGlmIC8qIENLX1RN UERJUiAqLwotCi0jaWZkZWYgTk9DQ1RSQVAKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIk5PQ0NUUkFQIik7Ci0jZW5kaWYgLyogTk9DQ1RSQVAgKi8KLQotI2lmZGVmIE5PQ09U Rk1DCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOT0NPVEZNQyIpOwotI2Vu ZGlmIC8qIE5PQ09URk1DICovCi0KLSNpZmRlZiBOT0ZSSUxMUwotICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiTk9GUklMTFMiKTsKLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotCi0j aWZkZWYgUEFSU0VOU0UKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlBBUlNF TlNFIik7Ci0jZW5kaWYgLyogUEFSU0VOU0UgKi8KLQotI2lmZGVmIFRJTUVICi0gICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJUSU1FSCIpOwotI2VuZGlmIC8qIFRJTUVIICovCi0K LSNpZmRlZiBOT1RJTUVICi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJUSU1F SCIpOwotI2VuZGlmIC8qIE5PVElNRUggKi8KLQotI2lmZGVmIFNZU1RJTUVICi0gICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTWVNUSU1FSCIpOwotI2VuZGlmIC8qIFNZU1RJTUVI ICovCi0KLSNpZmRlZiBOT1NZU1RJTUVICi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJTWVNUSU1FSCIpOwotI2VuZGlmIC8qIE5PU1lTVElNRUggKi8KLQotI2lmZGVmIFNZU1RJ TUVCSAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiU1lTVElNRUJIIik7Ci0j ZW5kaWYgLyogU1lTVElNRUJIICovCi0KLSNpZmRlZiBOT1NZU1RJTUVCSAotICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSwiU1lTVElNRUJIIik7Ci0jZW5kaWYgLyogTk9TWVNUSU1F QkggKi8KLQotI2lmZGVmIFVUSU1FSAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwiVVRJTUVIIik7Ci0jZW5kaWYgLyogVVRJTUVIICovCi0KLSNpZmRlZiBTWVNVVElNRUgKLSAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlNZU1VUSU1FSCIpOwotI2VuZGlmIC8q IFNZU1VUSU1FSCAqLwotCi0jaWZkZWYgQ0tfTkVFRF9TSUcKLSAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIkNLX05FRURfU0lHIik7Ci0jZW5kaWYgLyogQ0tfTkVFRF9TSUcgKi8K LQotI2lmZGVmIENLX1RUWUZECi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJD S19UVFlGRCIpOwotI2VuZGlmIC8qIENLX1RUWUZEICovCi0KLSNpZmRlZiBORVRDT05OCi0gICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJORVRDT05OIik7Ci0jZW5kaWYgLyogTkVU Q09OTiAqLwotCi0jaWZkZWYgVENQU09DS0VUCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLCJUQ1BTT0NLRVQiKTsKLSNpZmRlZiBOT1RDUE9QVFMKLSAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIk5PVENQT1BUUyIpOwotI2VuZGlmIC8qIE5PVENQT1BUUyAqLwot I2lmZGVmIENLX0ROU19TUlYKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNL X0ROU19TUlYiKTsKLSNlbmRpZiAvKiBDS19ETlNfU1JWICovCi0jaWZkZWYgTk9fRE5TX1NSVgot ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTk9fRE5TX1NSViIpOwotI2VuZGlm IC8qIE5PX0ROU19TUlYgKi8KLSNpZmRlZiBDS0dITkxIT1NUCi0gICAgbWFrZXN0cigmKG9wdGxp c3Rbbm9wdGxpc3QrK10pLCJDS0dITkxIT1NUIik7Ci0jZW5kaWYgLyogQ0tHSE5MSE9TVCAqLwot I2lmZGVmIE5PTElTVEVOCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOT0xJ U1RFTiIpOwotI2VuZGlmIC8qIE5PTElTVEVOICovCi0jaWZkZWYgU09MX1NPQ0tFVAotICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiU09MX1NPQ0tFVCIpOwotI2VuZGlmIC8qIFNP TF9TT0NLRVQgKi8KLSNpZmRlZiBTT19PT0JJTkxJTkUKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksIlNPX09PQklOTElORSIpOwotI2VuZGlmIC8qIFNPX09PQklOTE5FICovCi0j aWZkZWYgU09fRE9OVFJPVVRFCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJT T19ET05UUk9VVEUiKTsKLSNlbmRpZiAvKiBTT19ET05UUk9VVEUgKi8KLSNpZmRlZiBTT19LRUVQ QUxJVkUKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlNPX0tFRVBBTElWRSIp OwotI2VuZGlmIC8qIFNPX0tFRVBBTElWRSAqLwotI2lmZGVmIFNPX0xJTkdFUgotICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiU09fTElOR0VSIik7Ci0jZW5kaWYgLyogU09fTElO R0VSICovCi0jaWZkZWYgVENQX05PREVMQVkKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIlRDUF9OT0RFTEFZIik7Ci0jZW5kaWYgLyogVENQX05PREVMQVkgKi8KLSNpZmRlZiBT T19TTkRCVUYKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlNPX1NOREJVRiIp OwotI2VuZGlmIC8qIFNPX1NOREJVRiAqLwotI2lmZGVmIFNPX1JDVkJVRgotICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSwiU09fUkNWQlVGIik7Ci0jZW5kaWYgLyogU09fUkNWQlVG ICovCi0jaWZkZWYgaF9hZGRyCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJo X2FkZHIiKTsKLSNlbmRpZiAvKiBoX2FkZHIgKi8KLSNpZmRlZiBIQUREUkxJU1QKLSAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkhBRERSTElTVCIpOwotI2VuZGlmIC8qIEhBRERS TElTVCAqLwotI2lmZGVmIENLX1NPQ0tTCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJDS19TT0NLUyIpOwotI2lmZGVmIENLX1NPQ0tTNQotICAgIG1ha2VzdHIoJihvcHRsaXN0 W25vcHRsaXN0KytdKSwiQ0tfU09DS1M1Iik7Ci0jZW5kaWYgLyogQ0tfU09DS1M1ICovCi0jaWZk ZWYgQ0tfU09DS1NfTlMKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX1NP Q0tTX05TIik7Ci0jZW5kaWYgLyogQ0tfU09DS1NfTlMgKi8KLSNlbmRpZiAvKiBDS19TT0NLUyAq LwotI2lmZGVmIFJMT0dDT0RFCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJS TE9HQ09ERSIpOwotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0jaWZkZWYgTkVUQ01ECi0gICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJORVRDTUQiKTsKLSNlbmRpZiAvKiBORVRDTUQg Ki8KLSNpZmRlZiBOT05FVENNRAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi Tk9ORVRDTUQiKTsKLSNlbmRpZiAvKiBOT05FVENNRCAqLwotI2lmZGVmIE5FVFBUWQotICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTkVUUFRZIik7Ci0jZW5kaWYgLyogTkVUUFRZ ICovCi0jaWZkZWYgQ0tfRU5WSVJPTk1FTlQKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIkNLX0VOVklST05NRU5UIik7Ci0jZW5kaWYgLyogQ0tfRU5WSVJPTk1FTlQgKi8KLSNl bmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNpZmRlZiBUTkNPREUKLSAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIlROQ09ERSIpOwotI2VuZGlmIC8qIFROQ09ERSAqLwotI2lmZGVmIENL X0ZPUldBUkRfWAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfRk9SV0FS RF9YIik7Ci0jZW5kaWYgLyogQ0tfRk9SV0FSRF9YICovCi0jaWZkZWYgVE5fQ09NUE9SVAotICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiVE5fQ09NUE9SVCIpOwotI2VuZGlmIC8q IFROX0NPTVBPUlQgKi8KLSNpZmRlZiBNVUxUSU5FVAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiTVVMVElORVQiKTsKLSNlbmRpZiAvKiBNVUxUSU5FVCAqLwotI2lmZGVmIERF Q19UQ1BJUAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiREVDX1RDUElQIik7 Ci0jZW5kaWYgLyogREVDX1RDUElQICovCi0jaWZkZWYgVENQV0FSRQotICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiVENQV0FSRSIpOwotI2VuZGlmIC8qIFRDUFdBUkUgKi8KLSNp ZmRlZiBVQ1g1MAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiVUNYNTAiKTsK LSNlbmRpZiAvKiBVQ1g1MCAqLwotI2lmZGVmIENNVV9UQ1BJUAotICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiQ01VX1RDUElQIik7Ci0jZW5kaWYgLyogQ01VX1RDUElQICovCi0j aWZkZWYgVFRMRUJVRgotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiVFRMRUJV RiIpOwotI2VuZGlmIC8qIFRUTEVCVUYgKi8KLSNpZmRlZiBORVRMRUJVRgotICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSwiTkVUTEVCVUYiKTsKLSNlbmRpZiAvKiBORVRMRUJVRiAq LwotI2lmZGVmIElLU19PUFRJT04KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks IklLU19PUFRJT04iKTsKLSNlbmRpZiAvKiBJS1NfT1BUSU9OICovCi0jaWZkZWYgSUtTREIKLSAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIklLU0RCIik7Ci0jZW5kaWYgLyogSUtT REIgKi8KLSNpZmRlZiBJS1NEQ09ORgotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwiSUtTRENPTkYiKTsKLSNlbmRpZiAvKiBJS1NEQ09ORiAqLwotI2lmZGVmIENLX0xPR0lOCi0g ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19MT0dJTiIpOwotI2VuZGlmIC8q IENLX0xPR0lOICovCi0jaWZkZWYgQ0tfUEFNCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLCJDS19QQU0iKTsKLSNlbmRpZiAvKiBDS19QQU0gKi8KLSNpZmRlZiBDS19TSEFET1cK LSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX1NIQURPVyIpOwotI2VuZGlm IC8qIENLX1NIQURPVyAqLwotI2lmZGVmIENPTkdTUEQKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksIkNPTkdTUEQiKTsKLSNlbmRpZiAvKiBDT05HU1BEICovCi0jaWZkZWYgU1VO WDI1Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTVU5YMjUiKTsKLSNlbmRp ZiAvKiBTVU5YMjUgKi8KLSNpZmRlZiBJQk1YMjUKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksIklCTVgyNSIpOwotI2VuZGlmIC8qIElCTVgyNSAqLwotI2lmZGVmIEhQWDI1Ci0g ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJIUFgyNSIpOwotI2VuZGlmIC8qIEhQ WDI1ICovCi0jaWZkZWYgREVDTkVUCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJERUNORVQiKTsKLSNlbmRpZiAvKiBERUNORVQgKi8KLSNpZmRlZiBTVVBFUkxBVAotICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiU1VQRVJMQVQiKTsKLSNlbmRpZiAvKiBTVVBF UkxBVCAqLwotI2lmZGVmIE5QSVBFCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJOUElQRSIpOwotI2VuZGlmIC8qIE5QSVBFICovCi0jaWZkZWYgQ0tfTkVUQklPUwotICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfTkVUQklPUyIpOwotI2VuZGlmIC8qIENL X05FVEJJT1MgKi8KLSNpZmRlZiBBVFQ3MzAwCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLCJBVFQ3MzAwIik7Ci0jZW5kaWYgLyogQVRUNzMwMCAqLwotI2lmZGVmIEFUVDYzMDAK LSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkFUVDYzMDAiKTsKLSNlbmRpZiAv KiBBVFQ2MzAwICovCi0jaWZkZWYgSERCVVVDUAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSwiSERCVVVDUCIpOwotI2VuZGlmIC8qIEhEQlVVQ1AgKi8KLSNpZmRlZiBVU0VUVFlM T0NLCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJVU0VUVFlMT0NLIik7Ci0j ZW5kaWYgLyogVVNFVFRZTE9DSyAqLwotI2lmZGVmIFVTRV9VVV9MT0NLCi0gICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJVU0VfVVVfTE9DSyIpOwotI2VuZGlmIC8qIFVTRV9VVV9M T0NLICovCi0jaWZkZWYgSEFWRV9MT0NLREVWCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLCJIQVZFX0xPQ0tERVYiKTsKLSNlbmRpZiAvKiBIQVZFX0xPQ0tERVYgKi8KLSNpZmRl ZiBIQVZFX0JBVURCT1kKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkhBVkVf QkFVREJPWSIpOwotI2VuZGlmIC8qIEhBVkVfQkFVREJPWSAqLwotI2lmZGVmIEhBVkVfT1BFTlBU WQotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiSEFWRV9PUEVOUFRZIik7Ci0j ZW5kaWYgLyogSEFWRV9PUEVOUFRZICovCi0jaWZkZWYgVFRQVFlDTUQKLSAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksIlRUUFRZQ01EIik7Ci0jZW5kaWYgLyogVFRQVFlDTUQgKi8K LSNpZmRlZiBOT1VVQ1AKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5PVVVD UCIpOwotI2VuZGlmIC8qIE5PVVVDUCAqLwotI2lmZGVmIExPTkdGTgotICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiTE9OR0ZOIik7Ci0jZW5kaWYgLyogTE9OR0ZOICovCi0jaWZk ZWYgUkRDSEsKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlJEQ0hLIik7Ci0j ZW5kaWYgLyogUkRDSEsgKi8KLSNpZmRlZiBTRUxFQ1QKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksIlNFTEVDVCIpOwotI2VuZGlmIC8qIFNFTEVDVCAqLwotI2lmZGVmIFVTTEVF UAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiVVNMRUVQIik7Ci0jZW5kaWYg LyogVVNMRUVQICovCi0jaWZkZWYgTkFQCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJOQVAiKTsKLSNlbmRpZiAvKiBOQVAgKi8KLSNpZmRlZiBOQVBIQUNLCi0gICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOQVBIQUNLIik7Ci0jZW5kaWYgLyogTkFQSEFDSyAq LwotI2lmZGVmIENLX1BPTEwKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNL X1BPTEwiKTsKLSNlbmRpZiAvKiBDS19QT0xMICovCi0jaWZkZWYgTk9JRVhURU4KLSAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5PSUVYVEVOIik7Ci0jZW5kaWYgLyogTk9JRVhU RU4gKi8KLSNpZmRlZiBFWENFTEFOCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJFWENFTEFOIik7Ci0jZW5kaWYgLyogRVhDRUxBTiAqLwotI2lmZGVmIElOVEVSTEFOCi0gICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJJTlRFUkxBTiIpOwotI2VuZGlmIC8qIElO VEVSTEFOICovCi0jaWZkZWYgTk9GSUxFSAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiTk9GSUxFSCIpOwotI2VuZGlmIC8qIE5PRklMRUggKi8KLSNpZmRlZiBOT1NZU0lPQ1RM SAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTk9TWVNJT0NUTEgiKTsKLSNl bmRpZiAvKiBOT1NZU0lPQ1RMSCAqLwotI2lmZGVmIERDTFBPUEVOCi0gICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJEQ0xQT1BFTiIpOwotI2VuZGlmIC8qIERDTFBPUEVOICovCi0j aWZkZWYgTk9TRVRCVUYKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5PU0VU QlVGIik7Ci0jZW5kaWYgLyogTk9TRVRCVUYgKi8KLSNpZmRlZiBOT1hGRVIKLSAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5PWEZFUiIpOwotI2VuZGlmIC8qIE5PWEZFUiAqLwot I2lmZGVmIE5PQ1VSU0VTCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOT0NV UlNFUyIpOwotI2VuZGlmIC8qIE5PQ1VSU0VTICovCi0jaWZkZWYgTk9TRVJWRVIKLSAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5PU0VSVkVSIik7Ci0jZW5kaWYgLyogTk9TRVJW RVIgKi8KLSNpZmRlZiBOT1BBVFRFUk5TCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJOT1BBVFRFUk5TIik7Ci0jZWxzZQotI2lmZGVmIFBBVFRFUk5TCi0gICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJQQVRURVJOUyIpOwotI2VuZGlmIC8qIFBBVFRFUk5TICov Ci0jZW5kaWYgLyogTk9QQVRURVJOUyAqLwotI2lmZGVmIE5PQ0tFWEVDCi0gICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOT0NLRVhFQyIpOwotI2Vsc2UKLSNpZmRlZiBDS0VYRUMK LSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLRVhFQyIpOwotI2VuZGlmIC8q IENLRVhFQyAqLwotI2VuZGlmIC8qIE5PQ0tFWEVDICovCi0jaWZkZWYgTk9BVVRPREwKLSAgICBt YWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5PQVVUT0RMIik7Ci0jZW5kaWYgLyogTk9B VVRPREwgKi8KLSNpZmRlZiBOT01TRU5ECi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJOT01TRU5EIik7Ci0jZW5kaWYgLyogTk9NU0VORCAqLwotI2lmZGVmIE5PRkRaRVJPCi0g ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOT0ZEWkVSTyIpOwotI2VuZGlmIC8q IE5PRkRaRVJPICovCi0jaWZkZWYgTk9QT1BFTgotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSwiTk9QT1BFTiIpOwotI2VuZGlmIC8qIE5PUE9QRU4gKi8KLSNpZmRlZiBOT1BBUlRJ QUwKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5PUEFSVElBTCIpOwotI2Vu ZGlmIC8qIE5PUEFSVElBTCAqLwotI2lmZGVmIE5PS1ZFUkJTCi0gICAgbWFrZXN0cigmKG9wdGxp c3Rbbm9wdGxpc3QrK10pLCJOT0tWRVJCUyIpOwotI2VuZGlmIC8qIE5PS1ZFUkJTICovCi0jaWZk ZWYgTk9TRVRSRVUKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5PU0VUUkVV Iik7Ci0jZW5kaWYgLyogTk9TRVRSRVUgKi8KLSNpZmRlZiBMQ0tESVIKLSAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksIkxDS0RJUiIpOwotI2VuZGlmIC8qIExDS0RJUiAqLwotI2lm ZGVmIEFDVUNOVFJMCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJBQ1VDTlRS TCIpOwotI2VuZGlmIC8qIEFDVUNOVFJMICovCi0jaWZkZWYgQlNENAotICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiQlNENCIpOwotI2VuZGlmIC8qIEJTRDQgKi8KLSNpZmRlZiBC U0Q0NAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQlNENDQiKTsKLSNlbmRp ZiAvKiBCU0Q0NCAqLwotI2lmZGVmIEJTRDQxCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLCJCU0Q0MSIpOwotI2VuZGlmIC8qIEJTRDQxICovCi0jaWZkZWYgQlNENDMKLSAgICBt YWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkJTRDQzIik7Ci0jZW5kaWYgLyogQlNENDMg Ki8KLSNpZmRlZiBCU0QyOQotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQlNE MjkiKTsKLSNlbmRpZiAvKiBCU0QyOSAqLwotI2lmZGVmIEJTREkKLSAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIkJTREkiKTsKLSNlbmRpZiAvKiBCU0RJICovCi0jaWZkZWYgX19i c2RpX18KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fYnNkaV9fIik7Ci0j ZW5kaWYgLyogX19ic2RpX18gKi8KLSNpZmRlZiBfX05ldEJTRF9fCi0gICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJfX05ldEJTRF9fIik7Ci0jZW5kaWYgLyogX19OZXRCU0RfXyAq LwotI2lmZGVmIF9fT3BlbkJTRF9fCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJfX09wZW5CU0RfXyIpOwotI2VuZGlmIC8qIF9fT3BlbkJTRF9fICovCi0jaWZkZWYgX19GcmVl QlNEX18KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fRnJlZUJTRF9fIik7 Ci0jZW5kaWYgLyogX19GcmVlQlNEX18gKi8KLSNpZmRlZiBGUkVFQlNENAotICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSwiRlJFRUJTRDQiKTsKLSNlbmRpZiAvKiBGUkVFQlNENCAq LwotI2lmZGVmIEZSRUVCU0Q4Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJG UkVFQlNEOCIpOwotI2VuZGlmIC8qIEZSRUVCU0Q4ICovCi0jaWZkZWYgRlJFRUJTRDkKLSAgICBt YWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkZSRUVCU0Q5Iik7Ci0jZW5kaWYgLyogRlJF RUJTRDkgKi8KLSNpZmRlZiBfX2xpbnV4X18KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIl9fbGludXhfXyIpOwotI2VuZGlmIC8qIF9fbGludXhfXyAqLwotI2lmZGVmIExJTlVY X0hJX1NQRAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTElOVVhfSElfU1BE Iik7Ci0jZW5kaWYgLyogTElOVVhfSElfU1BEICovCi0jaWZkZWYgTFlOWE9TCi0gICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJMWU5YT1MiKTsKLSNlbmRpZiAvKiBMWU5YT1MgKi8K LSNpZmRlZiBWNwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiVjciKTsKLSNl bmRpZiAvKiBWNyAqLwotI2lmZGVmIEFJWDM3MAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSwiQUlYMzcwIik7Ci0jZW5kaWYgLyogQUlYMzcwICovCi0jaWZkZWYgUlRBSVgKLSAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlJUQUlYIik7Ci0jZW5kaWYgLyogUlRB SVggKi8KLSNpZmRlZiBIUFVYCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJI UFVYIik7Ci0jZW5kaWYgLyogSFBVWCAqLwotI2lmZGVmIEhQVVg5Ci0gICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJIUFVYOSIpOwotI2VuZGlmIC8qIEhQVVg5ICovCi0jaWZkZWYg SFBVWDEwCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJIUFVYMTAiKTsKLSNl bmRpZiAvKiBIUFVYMTAgKi8KLSNpZmRlZiBIUFVYMTAwMAotICAgIG1ha2VzdHIoJihvcHRsaXN0 W25vcHRsaXN0KytdKSwiSFBVWDEwMDAiKTsKLSNlbmRpZiAvKiBIUFVYMTAwMCAqLwotI2lmZGVm IEhQVVgxMTAwCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJIUFVYMTEwMCIp OwotI2VuZGlmIC8qIEhQVVgxMTAwICovCi0jaWZkZWYgSFBVWFBSRTY1Ci0gICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJIUFVYUFJFNjUiKTsKLSNlbmRpZiAvKiBIUFVYUFJFNjUg Ki8KLSNpZmRlZiBER1VYCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJER1VY Iik7Ci0jZW5kaWYgLyogREdVWCAqLwotI2lmZGVmIERHVVg0MzAKLSAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIkRHVVg0MzAiKTsKLSNlbmRpZiAvKiBER1VYNDMwICovCi0jaWZk ZWYgREdVWDU0MAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiREdVWDU0MCIp OwotI2VuZGlmIC8qIERHVVg1NDAgKi8KLSNpZmRlZiBER1VYNTQzCi0gICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJER1VYNTQzIik7Ci0jZW5kaWYgLyogREdVWDU0MyAqLwotI2lm ZGVmIERHVVg1NDQxMAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiREdVWDU0 NDEwIik7Ci0jZW5kaWYgLyogREdVWDU0NDEwICovCi0jaWZkZWYgREdVWDU0NDExCi0gICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJER1VYNTQ0MTEiKTsKLSNlbmRpZiAvKiBER1VY NTQ0MTEgKi8KLSNpZmRlZiBzb255X25ld3MKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksInNvbnlfbmV3cyIpOwotI2VuZGlmIC8qIHNvbnlfbmV3cyAqLwotI2lmZGVmIENJRQot ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0lFIik7Ci0jZW5kaWYgLyogQ0lF ICovCi0jaWZkZWYgWEVOSVgKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlhF TklYIik7Ci0jZW5kaWYgLyogWEVOSVggKi8KLSNpZmRlZiBTQ09fWEVOSVgKLSAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlNDT19YRU5JWCIpOwotI2VuZGlmIC8qIFNDT19YRU5J WCAqLwotI2lmZGVmIElTSUlJCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJJ U0lJSSIpOwotI2VuZGlmIC8qIElTSUlJICovCi0jaWZkZWYgSTM4NklYCi0gICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJJMzg2SVgiKTsKLSNlbmRpZiAvKiBJMzg2SVggKi8KLSNp ZmRlZiBSVFUKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlJUVSIpOwotI2Vu ZGlmIC8qIFJUVSAqLwotI2lmZGVmIFBST1ZYMQotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSwiUFJPVlgxIik7Ci0jZW5kaWYgLyogUFJPVlgxICovCi0jaWZkZWYgUFlSQU1JRAot ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiUFlSQU1JRCIpOwotI2VuZGlmIC8q IFBZUkFNSUQgKi8KLSNpZmRlZiBUT1dFUjEKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIlRPV0VSMSIpOwotI2VuZGlmIC8qIFRPV0VSMSAqLwotI2lmZGVmIFVURUsKLSAgICBt YWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlVURUsiKTsKLSNlbmRpZiAvKiBVVEVLICov Ci0jaWZkZWYgWklMT0cKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlpJTE9H Iik7Ci0jZW5kaWYgLyogWklMT0cgKi8KLSNpZmRlZiBUUlMxNgotICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiVFJTMTYiKTsKLSNlbmRpZiAvKiBUUlMxNiAqLwotI2lmZGVmIE1J TklYCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJNSU5JWCIpOwotI2VuZGlm IC8qIE1JTklYICovCi0jaWZkZWYgTUlOSVgyCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLCJNSU5JWDIiKTsKLSNlbmRpZiAvKiBNSU5JWDIgKi8KLSNpZmRlZiBNSU5JWDMKLSAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk1JTklYMyIpOwotI2VuZGlmIC8qIE1J TklYMyAqLwotI2lmZGVmIE1JTklYMzE1Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJNSU5JWDMxNSIpOwotI2VuZGlmIC8qIE1JTklYMzE1ICovCi0jaWZkZWYgQzcwCi0gICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDNzAiKTsKLSNlbmRpZiAvKiBDNzAgKi8K LSNpZmRlZiBBSVhQUzIKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkFJWFBT MiIpOwotI2VuZGlmIC8qIEFJWFBTMiAqLwotI2lmZGVmIEFJWFJTCi0gICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJBSVhSUyIpOwotI2VuZGlmIC8qIEFJWFJTICovCi0jaWZkZWYg VVRTVgotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiVVRTViIpOwotI2VuZGlm IC8qIFVUU1YgKi8KLSNpZmRlZiBBVFRTVgotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiQVRUU1YiKTsKLSNlbmRpZiAvKiBBVFRTViAqLwotI2lmZGVmIFNWUjMKLSAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlNWUjMiKTsKLSNlbmRpZiAvKiBTVlIzICovCi0j aWZkZWYgU1ZSNAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiU1ZSNCIpOwot I2VuZGlmIC8qIFNWUjQgKi8KLSNpZmRlZiBERUxMX1NWUjQKLSAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIkRFTExfU1ZSNCIpOwotI2VuZGlmIC8qIERFTExfU1ZSNCAqLwotI2lm ZGVmIElDTF9TVlI0Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJJQ0xfU1ZS NCIpOwotI2VuZGlmIC8qIElDTF9TVlI0ICovCi0jaWZkZWYgT1NGCi0gICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJPU0YiKTsKLSNlbmRpZiAvKiBPU0YgKi8KLSNpZmRlZiBPU0Yx Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJPU0YxIik7Ci0jZW5kaWYgLyog T1NGMSAqLwotI2lmZGVmIF9fT1NGCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJfX09TRiIpOwotI2VuZGlmIC8qIF9fT1NGICovCi0jaWZkZWYgX19PU0ZfXwotICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19PU0ZfXyIpOwotI2VuZGlmIC8qIF9fT1NGX18g Ki8KLSNpZmRlZiBfX29zZl9fCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJf X29zZl9fIik7Ci0jZW5kaWYgLyogX19vc2ZfXyAqLwotI2lmZGVmIF9fT1NGMQotICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19PU0YxIik7Ci0jZW5kaWYgLyogX19PU0YxICov Ci0jaWZkZWYgX19PU0YxX18KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9f T1NGMV9fIik7Ci0jZW5kaWYgLyogX19PU0YxX18gKi8KLSNpZmRlZiBQVFgKLSAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlBUWCIpOwotI2VuZGlmIC8qIFBUWCAqLwotI2lmZGVm IFBPU0lYCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJQT1NJWCIpOwotI2Vu ZGlmIC8qIFBPU0lYICovCi0jaWZkZWYgQlNENDRPUlBPU0lYCi0gICAgbWFrZXN0cigmKG9wdGxp c3Rbbm9wdGxpc3QrK10pLCJCU0Q0NE9SUE9TSVgiKTsKLSNlbmRpZiAvKiBCU0Q0NE9SUE9TSVgg Ki8KLSNpZmRlZiBTVk9SUE9TSVgKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks IlNWT1JQT1NJWCIpOwotI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwotI2lmZGVmIFNWUjRPUlBPU0lY Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTVlI0T1JQT1NJWCIpOwotI2Vu ZGlmIC8qIFNWUjRPUlBPU0lYICovCi0jaWZkZWYgT1MyT1JWTVMKLSAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIk9TMk9SVk1TIik7Ci0jZW5kaWYgLyogT1MyT1JWTVMgKi8KLSNp ZmRlZiBPUzJPUlVOSVgKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk9TMk9S VU5JWCIpOwotI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwotI2lmZGVmIFZNU09SVU5JWAotICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiVk1TT1JVTklYIik7Ci0jZW5kaWYgLyogVk1T T1JVTklYICovCi0jaWZkZWYgVk1TNjRCSVQKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIlZNUzY0QklUIik7CS8qIFZNUyBvbiBBbHBoYSBvciBJQTY0ICovCi0jZW5kaWYgLyog Vk1TNjRCSVQgKi8KLSNpZmRlZiBWTVNJNjQKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIlZNU0k2NCIpOyAvKiBWTVMgb24gSUE2NCAqLwotI2VuZGlmIC8qIFZNU0k2NCAqLwot I2lmZGVmIF9QT1NJWF9TT1VSQ0UKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks Il9QT1NJWF9TT1VSQ0UiKTsKLSNlbmRpZiAvKiBfUE9TSVhfU09VUkNFICovCi0jaWZkZWYgX1hP UEVOX1NPVVJDRQotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX1hPUEVOX1NP VVJDRSIpOwotI2VuZGlmCi0jaWZkZWYgX0FMTF9TT1VSQ0UKLSAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIl9BTExfU09VUkNFIik7Ci0jZW5kaWYKLSNpZmRlZiBfU1ZJRDMKLSAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9TVklEMyIpOwotI2VuZGlmIC8qIF9T VklEMyAqLwotI2lmZGVmIFBsYW45Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJQbGFuOSIpOwotI2VuZGlmIC8qIFBsYW45ICovCi0jaWZkZWYgU09MQVJJUwotICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiU09MQVJJUyIpOwotI2lmZGVmIFNPTEFSSVMyNAot ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiU09MQVJJUzI0Iik7Ci0jZW5kaWYg LyogU09MQVJJUzI0ICovCi0jaWZkZWYgU09MQVJJUzI1Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJTT0xBUklTMjUiKTsKLSNlbmRpZiAvKiBTT0xBUklTMjUgKi8KLSNpZmRl ZiBTT0xBUklTMjYKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlNPTEFSSVMy NiIpOwotI2VuZGlmIC8qIFNPTEFSSVMyNiAqLwotI2lmZGVmIFNPTEFSSVM3Ci0gICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTT0xBUklTNyIpOwotI2VuZGlmIC8qIFNPTEFSSVM3 ICovCi0jaWZkZWYgU09MQVJJUzgKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks IlNPTEFSSVM4Iik7Ci0jZW5kaWYgLyogU09MQVJJUzggKi8KLSNpZmRlZiBTT0xBUklTOQotICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiU09MQVJJUzkiKTsKLSNlbmRpZiAvKiBT T0xBUklTOSAqLwotI2lmZGVmIFNPTEFSSVMxMAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSwiU09MQVJJUzEwIik7Ci0jZW5kaWYgLyogU09MQVJJUzEwICovCi0jZW5kaWYgLyog U09MQVJJUyAqLwotCi0jaWZkZWYgU1VOT1M0Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLCJTVU5PUzQiKTsKLSNlbmRpZiAvKiBTVU5PUzQgKi8KLSNpZmRlZiBTVU40UzUKLSAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlNVTjRTNSIpOwotI2VuZGlmIC8qIFNV TjRTNSAqLwotI2lmZGVmIElSSVgKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks IklSSVgiKTsKLSNlbmRpZiAvKiBJUklYICovCi0jaWZkZWYgRU5DT1JFCi0gICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJFTkNPUkUiKTsKLSNlbmRpZiAvKiBFTkNPUkUgKi8KLSNp ZmRlZiB1bHRyaXgKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksInVsdHJpeCIp OwotI2VuZGlmCi0jaWZkZWYgc3hhRTUwCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJzeGFFNTAiKTsKLSNlbmRpZgotI2lmZGVmIG1pcHMKLSAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIm1pcHMiKTsKLSNlbmRpZgotI2lmZGVmIE1JUFMKLSAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk1JUFMiKTsKLSNlbmRpZgotI2lmZGVmIHZheAotICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwidmF4Iik7Ci0jZW5kaWYKLSNpZmRlZiBW QVgKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlZBWCIpOwotI2VuZGlmCi0j aWZkZWYgYWxwaGEKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksImFscGhhIik7 Ci0jZW5kaWYKLSNpZmRlZiBBTFBIQQotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwiQUxQSEEiKTsKLSNlbmRpZgotI2lmZGVmIF9fQUxQSEEKLSAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIl9fQUxQSEEiKTsKLSNlbmRpZgotI2lmZGVmIF9fYWxwaGEKLSAgICBt YWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fYWxwaGEiKTsKLSNlbmRpZgotI2lmZGVm IF9fQVhQCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX0FYUCIpOwotI2Vu ZGlmCi0jaWZkZWYgQVhQCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJBWFAi KTsKLSNlbmRpZgotI2lmZGVmIGF4cAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwiYXhwIik7Ci0jZW5kaWYKLSNpZmRlZiBfX0FMUEhBX18KLSAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIl9fQUxQSEFfXyIpOwotI2VuZGlmCi0jaWZkZWYgX19hbHBoYV9fCi0g ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX2FscGhhX18iKTsKLSNlbmRpZgot I2lmZGVmIHN1bgotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwic3VuIik7Ci0j ZW5kaWYKLSNpZmRlZiBzdW4zCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJz dW4zIik7Ci0jZW5kaWYKLSNpZmRlZiBzdW4zODYKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksInN1bjM4NiIpOwotI2VuZGlmCi0jaWZkZWYgX1NVTgotICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiX1NVTiIpOwotI2VuZGlmCi0jaWZkZWYgc3VuNAotICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwic3VuNCIpOwotI2VuZGlmCi0jaWZkZWYgc3Bh cmMKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksInNwYXJjIik7Ci0jZW5kaWYK LSNpZmRlZiBfQ1JBWQotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX0NSQVki KTsKLSNlbmRpZiAvKiBfQ1JBWSAqLwotI2lmZGVmIE5FWFQzMwotICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiTkVYVDMzIik7Ci0jZW5kaWYKLSNpZmRlZiBORVhUCi0gICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJORVhUIik7Ci0jZW5kaWYKLSNpZmRlZiBOZVhU Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOZVhUIik7Ci0jZW5kaWYKLSNp ZmRlZiBNQUNICi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJNQUNIIik7Ci0j ZW5kaWYKLQotI2lmZGVmIE1BQ09TWAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwiTUFDT1NYIik7Ci0jZW5kaWYKLSNpZmRlZiBNQUNPU1gxMAotICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiTUFDT1NYMTAiKTsKLSNlbmRpZgotI2lmZGVmIE1BQ09TWDEwMwot ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTUFDT1NYMTBlIik7Ci0jZW5kaWYK LSNpZmRlZiBDT01NRU5UCi0vKiBub3QgdXNlZCAqLwotI2lmZGVmIE1BQ09TWDEwMwotICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTUFDT1NYMTAzIik7Ci0jZW5kaWYKLSNlbmRp ZgkvKiBDT01NRU5UICovCi0KLSNpZmRlZiBzZ2kKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksInNnaSIpOwotI2VuZGlmCi0jaWZkZWYgTV9TWVM1Ci0gICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJNX1NZUzUiKTsKLSNlbmRpZgotI2lmZGVmIF9fU1lTVEVNX0ZJ VkUKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fU1lTVEVNX0ZJVkUiKTsK LSNlbmRpZgotI2lmZGVmIHN5c1YKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks InN5c1YiKTsKLSNlbmRpZgotI2lmZGVmIE1fWEVOSVggICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFNDTyBYZW5peCBWIGFuZCBVTklYLzM4NiAqLwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiTV9YRU5JWCIpOwotI2VuZGlmCi0jaWZkZWYgTV9VTklYICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogU0NPIFVOSVggKi8KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksIk1fVU5JWCIpOwotI2VuZGlmCi0jaWZkZWYgX01fVU5JWCAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogU0NPIFVOSVggMy4ydjQgPSBPRFQgMi4wICovCi0gICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfTV9VTklYIik7Ci0jZW5kaWYKLSNpZmRlZiBDS19TQ09W NQotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfU0NPVjUiKTsKLSNlbmRp ZgotI2lmZGVmIFNDT19PU1I1MDQKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks IlNDT19PU1I1MDQiKTsKLSNlbmRpZgotI2lmZGVmIE1fSUE2NAotICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiTV9JQTY0Iik7Ci0jZW5kaWYKLSNpZmRlZiBfTV9JQTY0Ci0gICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfTV9JQTY0Iik7Ci0jZW5kaWYKLSNpZmRl ZiBpYTY0Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJpYTY0Iik7Ci0jZW5k aWYKLSNpZmRlZiBfaWE2NAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX2lh NjQiKTsKLSNlbmRpZgotI2lmZGVmIF9pYTY0XwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSwiX2lhNjRfIik7Ci0jZW5kaWYKLSNpZmRlZiBfX2lhNjQKLSAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksIl9faWE2NCIpOwotI2VuZGlmCi0jaWZkZWYgTV9JNjg2Ci0g ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJNX0k2ODYiKTsKLSNlbmRpZgotI2lm ZGVmIF9NX0k2ODYKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9NX0k2ODYi KTsKLSNlbmRpZgotI2lmZGVmIGk2ODYKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksImk2ODYiKTsKLSNlbmRpZgotI2lmZGVmIE1fSTU4NgotICAgIG1ha2VzdHIoJihvcHRsaXN0 W25vcHRsaXN0KytdKSwiTV9JNTg2Iik7Ci0jZW5kaWYKLSNpZmRlZiBfTV9JNTg2Ci0gICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfTV9JNTg2Iik7Ci0jZW5kaWYKLSNpZmRlZiBp NTg2Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJpNTg2Iik7Ci0jZW5kaWYK LSNpZmRlZiBNX0k0ODYKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk1fSTQ4 NiIpOwotI2VuZGlmCi0jaWZkZWYgX01fSTQ4NgotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSwiX01fSTQ4NiIpOwotI2VuZGlmCi0jaWZkZWYgaTQ4NgotICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiaTQ4NiIpOwotI2VuZGlmCi0jaWZkZWYgTV9JMzg2Ci0gICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJNX0kzODYiKTsKLSNlbmRpZgotI2lmZGVm IF9NX0kzODYKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9NX0kzODYiKTsK LSNlbmRpZgotI2lmZGVmIGkzODYKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks ImkzODYiKTsKLSNlbmRpZgotI2lmZGVmIF9faTM4NgotICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiX19pMzg2Iik7Ci0jZW5kaWYKLSNpZmRlZiBfX3g4NgotICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSwiX194ODYiKTsKLSNlbmRpZgotI2lmZGVmIF9fYW1kNjQK LSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fYW1kNjQiKTsKLSNlbmRpZgot I2lmZGVmIF9JTFAzMgotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX0lMUDMy Iik7Ci0jZW5kaWYKLSNpZmRlZiBfSUxQNjQKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIl9JTFA2NCIpOwotI2VuZGlmCi0jaWZkZWYgX0xQMzIKLSAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIl9MUDMyIik7Ci0jZW5kaWYKLSNpZmRlZiBfTFA2NAotICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX0xQNjQiKTsKLSNlbmRpZgotI2lmZGVmIF9f TFAzMl9fCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX0xQMzJfXyIpOwot I2VuZGlmCi0jaWZkZWYgX19MUDY0X18KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksIl9fTFA2NF9fIik7Ci0jZW5kaWYKLSNpZmRlZiBfWEdQNF8yCi0gICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJfWEdQNF8yIik7Ci0jZW5kaWYKLSNpZmRlZiBfX3BwY19fCi0g ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX3BwY19fIik7Ci0jZW5kaWYKLSNp ZmRlZiBfX3BwYzMyX18KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fcHBj MzJfXyIpOwotI2VuZGlmCi0jaWZkZWYgX19wcGM2NF9fCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJfX3BwYzY0X18iKTsKLSNlbmRpZgotI2lmZGVmIENLXzY0QklUCi0gICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS182NEJJVCIpOwotI2VuZGlmCi0jaWZk ZWYgaTI4NgotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiaTI4NiIpOwotI2Vu ZGlmCi0jaWZkZWYgTV9JMjg2Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJN X0kyODYiKTsKLSNlbmRpZgotI2lmZGVmIF9fc3BhcmMKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksIl9fc3BhcmMiKTsKLSNlbmRpZgotI2lmZGVmIF9fc3BhcmN2OAotICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19zcGFyY3Y4Iik7Ci0jZW5kaWYKLSNpZmRl ZiBfX3NwYXJjdjkKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fc3BhcmN2 OSIpOwotI2VuZGlmCi0jaWZkZWYgbWM2ODAwMAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSwibWM2ODAwMCIpOwotI2VuZGlmCi0jaWZkZWYgbWM2ODAxMAotICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSwibWM2ODAxMCIpOwotI2VuZGlmCi0jaWZkZWYgbWM2ODAy MAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwibWM2ODAyMCIpOwotI2VuZGlm Ci0jaWZkZWYgbWM2ODAzMAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwibWM2 ODAzMCIpOwotI2VuZGlmCi0jaWZkZWYgbWM2ODA0MAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwibWM2ODA0MCIpOwotI2VuZGlmCi0jaWZkZWYgTV82ODAwMAotICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTV82ODAwMCIpOwotI2VuZGlmCi0jaWZkZWYgTV82 ODAxMAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTV82ODAxMCIpOwotI2Vu ZGlmCi0jaWZkZWYgTV82ODAyMAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi TV82ODAyMCIpOwotI2VuZGlmCi0jaWZkZWYgTV82ODAzMAotICAgIG1ha2VzdHIoJihvcHRsaXN0 W25vcHRsaXN0KytdKSwiTV82ODAzMCIpOwotI2VuZGlmCi0jaWZkZWYgTV82ODA0MAotICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTV82ODA0MCIpOwotI2VuZGlmCi0jaWZkZWYg bTY4awotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwibTY4ayIpOwotI2VuZGlm Ci0jaWZkZWYgbTg4awotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwibTg4ayIp OwotI2VuZGlmCi0jaWZkZWYgcGRwMTEKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksInBkcDExIik7Ci0jZW5kaWYKLSNpZmRlZiBpQVBYCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJpQVBYIik7Ci0jZW5kaWYKLSNpZmRlZiBocHV4Ci0gICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJocHV4Iik7Ci0jZW5kaWYKLSNpZmRlZiBfX2hwdXgKLSAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9faHB1eCIpOwotI2VuZGlmCi0jaWZk ZWYgX19ocDkwMDBzODAwCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX2hw OTAwMHM4MDAiKTsKLSNlbmRpZgotI2lmZGVmIF9faHA5MDAwczcwMAotICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiX19ocDkwMDBzNzAwIik7Ci0jZW5kaWYKLSNpZmRlZiBfX2hw OTAwMHM1MDAKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9faHA5MDAwczUw MCIpOwotI2VuZGlmCi0jaWZkZWYgX19ocDkwMDBzMzAwCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJfX2hwOTAwMHMzMDAiKTsKLSNlbmRpZgotI2lmZGVmIF9faHA5MDAwczIw MAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19ocDkwMDBzMjAwIik7Ci0j ZW5kaWYKLSNpZmRlZiBBSVgKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkFJ WCIpOwotI2VuZGlmCi0jaWZkZWYgX0FJWEZTCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLCJfQUlYRlMiKTsKLSNlbmRpZgotI2lmZGVmIHUzNzAKLSAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksInUzNzAiKTsKLSNlbmRpZgotI2lmZGVmIHUzYgotICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwidTNiIik7Ci0jZW5kaWYKLSNpZmRlZiB1M2IyCi0g ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJ1M2IyIik7Ci0jZW5kaWYKLSNpZmRl ZiBtdWx0aW1heAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwibXVsdGltYXgi KTsKLSNlbmRpZgotI2lmZGVmIGJhbGFuY2UKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksImJhbGFuY2UiKTsKLSNlbmRpZgotI2lmZGVmIGlibXJ0Ci0gICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJpYm1ydCIpOwotI2VuZGlmCi0jaWZkZWYgX0lCTVJUCi0gICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfSUJNUlQiKTsKLSNlbmRpZgotI2lmZGVm IGlibXJzNjAwMAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiaWJtcnM2MDAw Iik7Ci0jZW5kaWYKLSNpZmRlZiBfQUlYCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJfQUlYIik7Ci0jZW5kaWYgLyogX0FJWCAqLwotI2lmZGVmIF9JQk1SMgotICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX0lCTVIyIik7Ci0jZW5kaWYKLSNpZmRlZiBVTklY V0FSRQotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiVU5JWFdBUkUiKTsKLSNl bmRpZgotI2lmZGVmIFFOWAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiUU5Y Iik7Ci0jaWZkZWYgX19RTlhfXwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi X19RTlhfXyIpOwotI2lmZGVmIF9fMTZCSVRfXwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSwiX18xNkJJVF9fIik7Ci0jZW5kaWYKLSNpZmRlZiBDS19RTlgxNgotICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfUU5YMTYiKTsKLSNlbmRpZgotI2lmZGVmIF9f MzJCSVRfXwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX18zMkJJVF9fIik7 Ci0jZW5kaWYKLSNpZmRlZiBDS19RTlgzMgotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiQ0tfUU5YMzIiKTsKLSNlbmRpZgotI2VuZGlmIC8qIF9fUU5YX18gKi8KLSNlbmRpZiAv KiBRTlggKi8KLQotI2lmZGVmIFFOWDYKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksIlFOWDYiKTsKLSNlbmRpZiAvKiBRTlg2ICovCi0KLSNpZmRlZiBORVVUUklOTwotICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTkVVVFJJTk8iKTsKLSNlbmRpZiAvKiBORVVU UklOTyAqLwotCi0jaWZkZWYgX19TVFJJQ1RfQlNEX18KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksIl9fU1RSSUNUX0JTRF9fIik7Ci0jZW5kaWYKLSNpZmRlZiBfX1NUUklDVF9B TlNJX18KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fU1RSSUNUX0FOU0lf XyIpOwotI2VuZGlmCi0jaWZkZWYgX0FOU0lfQ19TT1VSQ0UKLSAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIl9BTlNJX0NfU09VUkNFIik7Ci0jZW5kaWYKLSNpZmRlZiBfX1NURENf XwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19TVERDX18iKTsKLSNlbmRp ZgotI2lmZGVmIGNwbHVzcGx1cwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi Y3BsdXNwbHVzIik7Ci0jZW5kaWYKLSNpZmRlZiBfX0RFQ0MKLSAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIl9fREVDQyIpOwotI2lmZGVmIF9fREVDQ19WRVIKLSAgICBzcHJpbnRm KGxpbmUsIl9fREVDQ19WRVI9JWQiLF9fREVDQ19WRVIpOyAvKiBTQUZFICovCi0gICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOwotI2VuZGlmIC8qIF9fREVDQ19WRVIgKi8K LSNlbmRpZiAvKiBfX0RFQ0MgKi8KLSNpZmRlZiBfX0NSVExfVkVSCi0gICAgc3ByaW50ZihsaW5l LCJfX0NSVExfVkVSPSVkIixfX0NSVExfVkVSKTsgLyogU0FGRSAqLwotICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKLSNlbmRpZiAvKiBfX0NSVExfVkVSICovCi0jaWZk ZWYgX19HTlVDX18gICAgICAgICAgICAgICAgICAgICAgICAgLyogZ2NjIGluIGFuc2kgbW9kZSAq LwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19HTlVDX18iKTsKLSNlbmRp ZgotI2lmZGVmIEdOVUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdjYyBpbiB0cmFk aXRpb25hbCBtb2RlICovCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJHTlVD Iik7Ci0jZW5kaWYKLSNpZmRlZiBfX0VHQ1NfXyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBl Z2NzIGluIGFuc2kgbW9kZSAqLwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi X19FR0NTX18iKTsKLSNlbmRpZgotI2lmZGVmIF9fZWdjc19fICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIGVnY3MgaW4gYW5zaSBtb2RlICovCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLCJfX2VnY3NfXyIpOwotI2VuZGlmCi0jaWZkZWYgX19XQVRDT01DX18KLSAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fV0FUQ09NQ19fIik7Ci0jZW5kaWYKLSNpZmRl ZiBDS19BTlNJQwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfQU5TSUMi KTsKLSNlbmRpZgotI2lmZGVmIENLX0FOU0lMSUJTCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9w dGxpc3QrK10pLCJDS19BTlNJTElCUyIpOwotI2VuZGlmCi0jaWZkZWYgQ0tDT05JTlRCNENCCi0g ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS0NPTklOVEI0Q0IiKTsKLSNlbmRp ZiAvKiBDS0NPTklOVEI0Q0IgKi8KLSNpZmRlZiBOT1RFUk1DQVAKLSAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIk5PVEVSTUNBUCIpOwotI2VuZGlmIC8qIE5PVEVSTUNBUCAqLwot I2lmZGVmIF9fR0xJQkNfXwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19H TElCQ19fIik7Ci0jZW5kaWYKLSNpZmRlZiBfU0NfSk9CX0NPTlRST0wKLSAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksIl9TQ19KT0JfQ09OVFJPTCIpOwotI2VuZGlmCi0jaWZkZWYg X1BPU0lYX0pPQl9DT05UUk9MCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJf UE9TSVhfSk9CX0NPTlRST0wiKTsKLSNlbmRpZgotI2lmZGVmIFNJR19JCi0gICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTSUdfSSIpOwotI2VuZGlmIC8qIFNJR19JICovCi0jaWZk ZWYgU0lHX1YKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlNJR19WIik7Ci0j ZW5kaWYgLyogU0lHX1YgKi8KLSNpZmRlZiBDS19QT1NJWF9TSUcKLSAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIkNLX1BPU0lYX1NJRyIpOwotI2VuZGlmCi0jaWZkZWYgU1ZSM0pD Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTVlIzSkMiKTsKLSNlbmRpZgot I2lmZGVmIF8zODZCU0QKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl8zODZC U0QiKTsKLSNlbmRpZgotI2lmZGVmIF9CU0QKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIl9CU0QiKTsKLSNlbmRpZgotI2lmZGVmIFVTRV9NRU1DUFkKLSAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksIlVTRV9NRU1DUFkiKTsKLSNlbmRpZiAvKiBVU0VfTUVNQ1BZ ICovCi0jaWZkZWYgVVNFX0xTVEFUCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJVU0VfTFNUQVQiKTsKLSNlbmRpZiAvKiBVU0VfTFNUQVQgKi8KLSNpZmRlZiBURVJNSU9YCi0g ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJURVJNSU9YIik7Ci0jZW5kaWYgLyog VEVSTUlPWCAqLwotI2lmZGVmIFNURVJNSU9YCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLCJTVEVSTUlPWCIpOwotI2VuZGlmIC8qIFNURVJNSU9YICovCi0jaWZkZWYgQ0tfQ1VS U0VTCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19DVVJTRVMiKTsKLSNl bmRpZiAvKiBDS19DVVJTRVMgKi8KLSNpZmRlZiBDS19ORVdURVJNCi0gICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJDS19ORVdURVJNIik7Ci0jZW5kaWYgLyogQ0tfTkVXVEVSTSAq LwotI2lmZGVmIENLX1dSRUZSRVNICi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJDS19XUkVGUkVTSCIpOwotI2VuZGlmIC8qIENLX1dSRUZSRVNIICovCi0jaWZkZWYgQ0tfUENU X0JBUgotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfUENUX0JBUiIpOwot I2VuZGlmIC8qIENLX1BDVF9CQVIgKi8KLSNpZmRlZiBDS19EVFJDRAotICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfRFRSQ0QiKTsKLSNlbmRpZiAvKiBDS19EVFJDRCAqLwot I2lmZGVmIENLX0RUUkNUUwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tf RFRSQ1RTIik7Ci0jZW5kaWYgLyogQ0tfRFRSQ1RTICovCi0jaWZkZWYgQ0tfUlRTQ1RTCi0gICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19SVFNDVFMiKTsKLSNlbmRpZiAvKiBD S19SVFNDVFMgKi8KLSNpZmRlZiBQT1NJWF9DUlRTQ1RTCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJQT1NJWF9DUlRTQ1RTIik7Ci0jZW5kaWYgLyogUE9TSVhfQ1JUU0NUUyAq LwotI2lmZGVmIEZJWENSVFNDVFMKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks IkZJWENSVFNDVFMiKTsKLSNlbmRpZiAvKiBGSVhDUlRTQ1RTICovCi0jaWZkZWYgSFdQQVJJVFkK LSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkhXUEFSSVRZIik7Ci0jZW5kaWYg LyogSFdQQVJJVFkgKi8KLSNpZmRlZiBDS19TWVNJTkkKLSNpZmRlZiBDS19JTklfQQotICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfSU5JX0EiKTsKLSAgICBja21ha21zZyhs aW5lLExJTkJVRlNJWiwiQ0tfU1lTSU5JPVwiIixDS19TWVNJTkksIlwiIixOVUxMKTsKLSAgICBt YWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7Ci0jZWxzZQotI2lmZGVmIENLX0lO SV9CCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19JTklfQiIpOwotICAg IGNrbWFrbXNnKGxpbmUsTElOQlVGU0laLCJDS19TWVNJTkk9XCIiLENLX1NZU0lOSSwiXCIiLE5V TEwpOwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKLSNlbHNlCi0g ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19TWVNJTkkiKTsKLSNlbmRpZiAv KiBDS19JTklfQiAqLwotI2VuZGlmIC8qIENLX0lOSV9BICovCi0jZW5kaWYgLyogQ0tfRFNZU0lO SSAqLwotI2lmZGVmIENLX0RTWVNJTkkKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksIkNLX0RTWVNJTkkiKTsKLSNlbmRpZiAvKiBDS19EU1lTSU5JICovCi0jaWZkZWYgQ0tfVFRH V1NJWgotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfVFRHV1NJWiIpOwot I2VuZGlmIC8qIENLX1RUR1dTSVogKi8KLSNpZmRlZiBDS19OQVdTCi0gICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJDS19OQVdTIik7Ci0jZW5kaWYgLyogQ0tfTkFXUyAqLwotI2lm ZGVmIE1ETUhVUAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTURNSFVQIik7 Ci0jZW5kaWYgLyogTURNSFVQICovCi0jaWZkZWYgSFVQX0NMT1NFX1BPU0lYCi0gICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJIVVBfQ0xPU0VfUE9TSVgiKTsKLSNlbmRpZiAvKiBI VVBfQ0xPU0VfUE9TSVggKi8KLSNpZmRlZiBOT19IVVBfQ0xPU0VfUE9TSVgKLSAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5PX0hVUF9DTE9TRV9QT1NJWCIpOwotI2VuZGlmIC8q IE5PX0hVUF9DTE9TRV9QT1NJWCAqLwotI2lmZGVmIERDTURCVUYKLSAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIkRDTURCVUYiKTsKLSNlbmRpZiAvKiBEQ01EQlVGICovCi0jaWZk ZWYgQ0tfUkVDQUxMCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19SRUNB TEwiKTsKLSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLSNpZmRlZiBCUk9XU0VSCi0gICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJCUk9XU0VSIik7Ci0jZW5kaWYgLyogQlJPV1NFUiAq LwotI2lmZGVmIENMU09QTgotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0xT T1BOIik7Ci0jZW5kaWYgLyogQ0xTT1BOICovCi0jaWZkZWYgU1RSQVRVUwotICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSwiU1RSQVRVUyIpOwotI2VuZGlmIC8qIFNUUkFUVVMgKi8K LSNpZmRlZiBfX1ZPU19fCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX1ZP U19fIik7Ci0jZW5kaWYgLyogX19WT1NfXyAqLwotI2lmZGVmIFNUUkFUVVNYMjUKLSAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlNUUkFUVVNYMjUiKTsKLSNlbmRpZiAvKiBTVFJB VFVTWDI1ICovCi0jaWZkZWYgT1MyTU9VU0UKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIk9TMk1PVVNFIik7Ci0jZW5kaWYgLyogT1MyTU9VU0UgKi8KLSNpZmRlZiBDS19SRVhY Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19SRVhYIik7Ci0jZW5kaWYg LyogQ0tfUkVYWCAqLwotI2lmZGVmIENLX1RJTUVSUwotICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiQ0tfVElNRVJTIik7Ci0jZW5kaWYgLyogQ0tfVElNRVJTICovCi0jaWZkZWYg VFRTUERMSVNUCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJUVFNQRExJU1Qi KTsKLSNlbmRpZiAvKiBUVFNQRExJU1QgKi8KLSNpZmRlZiBDS19QRVJNUwotICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfUEVSTVMiKTsKLSNlbmRpZiAvKiBDS19QRVJNUyAq LwotI2lmZGVmIENLVFVOSU5HCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJD S1RVTklORyIpOwotI2VuZGlmIC8qIENLVFVOSU5HICovCi0jaWZkZWYgTkVXRlRQCi0gICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJORVdGVFAiKTsKLSNlbmRpZiAvKiBORVdGVFAg Ki8KLSNpZmRlZiBTWVNGVFAKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlNZ U0ZUUCIpOwotI2VuZGlmIC8qIFNZU0ZUUCAqLwotI2lmZGVmIE5PRlRQCi0gICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOT0ZUUCIpOwotI2VuZGlmIC8qIE5PRlRQICovCi0jaWZk ZWYgQ0tIVFRQCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS0hUVFAiKTsK LSNlbmRpZiAvKiBDS0hUVFAgKi8KLSNpZmRlZiBOT0hUVFAKLSAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIk5PSFRUUCIpOwotI2VuZGlmIC8qIE5PSFRUUCAqLwotI2lmZGVmIENL Uk9PVAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tST09UIik7Ci0jZW5k aWYgLyogQ0tST09UICovCi0jaWZkZWYgQ0tSRUFMUEFUSAotICAgIG1ha2VzdHIoJihvcHRsaXN0 W25vcHRsaXN0KytdKSwiQ0tSRUFMUEFUSCIpOwotI2VuZGlmIC8qIENLUkVBTFBBVEggKi8KLSNp ZmRlZiBTVFJFQU1JTkcKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlNUUkVB TUlORyIpOwotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotI2lmZGVmIFVOUFJFRklYWkVSTwotICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiVU5QUkVGSVhaRVJPIik7Ci0jZW5kaWYg LyogVU5QUkVGSVhaRVJPICovCi0jaWZkZWYgQ0tSRUdFWAotICAgIG1ha2VzdHIoJihvcHRsaXN0 W25vcHRsaXN0KytdKSwiQ0tSRUdFWCIpOwotI2VuZGlmIC8qIENLUkVHRVggKi8KLSNpZmRlZiBa WFJFV0lORAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiWlhSRVdJTkQiKTsK LSNlbmRpZiAvKiBaWFJFV0lORCAqLwotI2lmZGVmIENLU1lTTE9HCi0gICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJDS1NZU0xPRyIpOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0j aWZkZWYgU1lTTE9HTEVWRUwKLSAgICBzcHJpbnRmKGxpbmUsIlNZU0xPR0xFVkVMPSVkIixTWVNM T0dMRVZFTCk7IC8qIFNBRkUgKi8KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks bGluZSk7Ci0jZW5kaWYgLyogU1lTTE9HTEVWRUwgKi8KLSNpZmRlZiBOT1NFWFAKLSAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5PU0VYUCIpOwotI2VuZGlmIC8qIE5PU0VYUCAq LwotI2lmZGVmIENLTEVBUk4KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNL TEVBUk4iKTsKLSNlbHNlCi0jaWZkZWYgTk9MT0VBUk4KLSAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksIk5PTE9FQVJOIik7Ci0jZW5kaWYgLyogTk9MT0VBUk4gKi8KLSNlbmRpZiAv KiBDS0xFQVJOICovCi0KLSNpZmRlZiBOT0ZMT0FUCi0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9w dGxpc3QrK10pLCJOT0ZMT0FUIik7Ci0jZWxzZQotI2lmZGVmIEZORkxPQVQKLSAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkZORkxPQVQiKTsKLSNlbmRpZiAvKiBGTkZMT0FUICov Ci0jaWZkZWYgQ0tGTE9BVAotI2lmZGVmIEdGVElNRVIKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksIkdGVElNRVIiKTsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0jaWZkZWYgQ0tG TE9BVF9TCi0gICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVosIkNLRkxPQVQ9IixDS0ZMT0FUX1Ms TlVMTCxOVUxMKTsKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7Ci0j ZWxzZQotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tGTE9BVCIpOwotI2Vu ZGlmIC8qIENLRkxPQVRfUyAqLwotI2VuZGlmIC8qIENLRkxPQVQgKi8KLSNlbmRpZiAvKiBOT0ZM T0FUICovCi0KLSNpZmRlZiBTU0gKLSAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks IlNTSCIpOwotI2VuZGlmIC8qIFNTSCAqLwotI2lmZGVmIE5FVERMTAotICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiTkVURExMIik7Ci0jZW5kaWYgLyogTkVURExMICovCi0jaWZk ZWYgTkVURklMRQotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTkVURklMRSIp OwotI2VuZGlmIC8qIE5FVEZJTEUgKi8KLSNpZmRlZiBDS19UQVBJCi0gICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJDS19UQVBJIik7Ci0jZW5kaWYgLyogQ0tfVEFQSSAqLwotI2lm ZGVmIENLX1NTTAotICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfU1NMIik7 Ci0jaWZkZWYgT1BFTlNTTF9WRVJTSU9OX1RFWFQKLSAgICBja21ha21zZyhsaW5lLExJTkJVRlNJ WiwKLQkgICAgICJPUEVOU1NMX1ZFUlNJT05fVEVYVD0iLCJcIiIsT1BFTlNTTF9WRVJTSU9OX1RF WFQsIlwiIik7Ci0gICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOwotI2Vu ZGlmCS8qIE9QRU5TU0xfVkVSU0lPTl9URVhUICovCi0jZW5kaWYgLyogQ0tfU1NMICovCi0gICAg ZGVidWcoRjEwMSwiaW5pdG9wdGxpc3Qgbm9wdGxpc3QiLCIiLG5vcHRsaXN0KTsKLSAgICBzaF9z b3J0KG9wdGxpc3QsTlVMTCxub3B0bGlzdCwwLDAsMCk7Ci19Ci0KLWludAotc2hvZmVhKCkgewot ICAgIGludCBpOwotICAgIGludCBmbGFnID0gMDsKLSAgICBpbnQgbGluZXMgPSAxOwotI2lmZGVm IEZORkxPQVQKLSAgICBleHRlcm4gaW50IGZwX2RpZ2l0cywgZnBfcm91bmRpbmc7Ci0jZW5kaWYg LyogRk5GTE9BVCAqLwotICAgIGV4dGVybiBpbnQgYnl0ZW9yZGVyOwotICAgIHByaW50ZigiJXNc biIsdmVyc2lvKTsKLSAgICBpZiAoaW5zZXJ2ZXIpCi0gICAgICByZXR1cm4oMSk7Ci0KLSAgICBk ZWJ1ZyhGMTAxLCJzaG9mZWEgTk9QVExJU1QiLCIiLE5PUFRMSVNUKTsKLSAgICBpbml0b3B0bGlz dCgpOwotICAgIGRlYnVnKEYxMDEsInNob2ZlYSBub3B0bGlzdCIsIiIsbm9wdGxpc3QpOwotI2lm ZGVmIE9TMgotI2lmZGVmIE5UCi0jaWZkZWYgX01fQUxQSEEKLSAgICBwcmludGYoIk1pY3Jvc29m dCBXaW5kb3dzIE9wZXJhdGluZyBTeXN0ZW1zIGZvciBBbHBoYSBDUFVzLlxuIik7Ci0jZWxzZSAv KiBfTV9BTFBIQSAqLwotI2lmZGVmIF9NX1BQQwotICAgIHByaW50ZigiTWljcm9zb2Z0IFdpbmRv d3MgT3BlcmF0aW5nIFN5c3RlbXMgZm9yIFBvd2VyUEMgQ1BVcy5cbiIpOwotI2Vsc2UgLyogX01f UFBDICovCi0jaWZkZWYgX01fTVJYMDAwCi0gICAgcHJpbnRmKCJNaWNyb3NvZnQgV2luZG93cyBP cGVyYXRpbmcgU3lzdGVtcyBmb3IgTUlQUyBDUFVzLlxuIik7Ci0jZWxzZSAvKiBfTV9NUlgwMDAg Ki8KLSNpZmRlZiBfTV9JWDg2Ci0gICAgcHJpbnRmKCJNaWNyb3NvZnQgV2luZG93cyBPcGVyYXRp bmcgU3lzdGVtcyBmb3IgMzItYml0IEludGVsIENQVXMuXG4iKTsKLSNlbHNlIC8qIF9NX0lYODYg Ki8KLSAgICBVTktOT1dOIFdJTkRPV1MgUExBVEZPUk0KLSNlbmRpZiAvKiBfTV9JWDg2ICovCi0j ZW5kaWYgLyogX01fTVJYMDAwICovCi0jZW5kaWYgLyogX01fUFBDICovCi0jZW5kaWYgLyogX01f QUxQSEEgKi8KLSNlbHNlIC8qIE5UICovCi0jaWZkZWYgTV9JMjg2Ci0gICAgcHJpbnRmKCJJQk0g T1MvMiAxNi1iaXQuXG4iKTsKLSNlbHNlCi0gICAgcHJpbnRmKCJJQk0gT1MvMiAzMi1iaXQuXG4i KTsKLSNlbmRpZiAvKiBNX0kyODYgKi8KLSNlbmRpZiAvKiBOVCAqLwotICAgIGxpbmVzKys7Ci0j ZW5kaWYgLyogT1MyICovCi0gICAgcHJpbnRmKCJcbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21k X3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9 Ci0gICAgcHJpbnRmKCJNYWpvciBvcHRpb25hbCBmZWF0dXJlcyBpbmNsdWRlZDpcbiIpOwotICAg IGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7 IGVsc2UgbGluZXMgPSAwOyB9Ci0KLSAgICBpZiAoc2l6ZW9mKENLX09GRl9UKSA9PSA4KSB7Ci0J cHJpbnRmKCIgTGFyZ2UgZmlsZXMgYW5kIGxhcmdlIGludGVnZXJzICg2NCBiaXRzKVxuIik7Ci0g ICAgICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7Ci0JICAgIGlmICghYXNrbW9yZSgp KSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOwotCX0KLSAgICB9Ci0jaWZkZWYgTkVUQ09OTgot ICAgIHByaW50ZigiIE5ldHdvcmsgc3VwcG9ydCAodHlwZSBTSE9XIE5FVCBmb3IgZnVydGhlciBp bmZvKVxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSNpZmRlZiBJS1NfT1BUSU9OCi0gICAg cHJpbnRmKCIgVGVsbmV0IEtlcm1pdCBPcHRpb25cbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21k X3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9 Ci0jZW5kaWYgLyogSUtTX09QVElPTiAqLwotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0gICAg cHJpbnRmKCIgVGVsbmV0IEF1dGhlbnRpY2F0aW9uIE9wdGlvblxuIik7Ci0gICAgaWYgKCsrbGlu ZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5l cyA9IDA7IH0KLSNpZmRlZiBDS19LRVJCRVJPUwotI2lmZGVmIEtSQjQKLSNpZmRlZiBLUkI1Ci0g ICAgcHJpbnRmKCIgS2VyYmVyb3MoVE0pIElWIGFuZCBLZXJiZXJvcyBWIGF1dGhlbnRpY2F0aW9u XG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkg cmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotI2Vsc2UgLyogS1JCNSAqLwotICAgIHByaW50 ZigiIEtlcmJlcm9zKFRNKSBJViBhdXRoZW50aWNhdGlvblxuIik7Ci0gICAgaWYgKCsrbGluZXMg PiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9 IDA7IH0KLSNlbmRpZiAvKiBLUkI1ICovCi0jZWxzZSAvKiBLUkI0ICovCi0jaWZkZWYgS1JCNQot ICAgIHByaW50ZigiIEtlcmJlcm9zKFRNKSBWIGF1dGhlbnRpY2F0aW9uXG4iKTsKLSAgICBpZiAo KytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNl IGxpbmVzID0gMDsgfQotI2VuZGlmIC8qIEtSQjUgKi8KLSNlbmRpZiAvKiBLUkI0ICovCi0jZW5k aWYgLyogQ0tfS0VSQkVST1MgKi8KLSNpZmRlZiBDS19TUlAKLSAgICBwcmludGYoIiBTUlAoVE0p IChTZWN1cmUgUmVtb3RlIFBhc3N3b3JkKSBhdXRoZW50aWNhdGlvblxuIik7Ci0gICAgaWYgKCsr bGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBs aW5lcyA9IDA7IH0KLSNlbmRpZiAvKiBDS19TUlAgKi8KLSNpZmRlZiBDS19TU0wKLSAgICBwcmlu dGYoIiBTZWN1cmUgU29ja2V0cyBMYXllciAoU1NMKVxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBj bWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7 IH0KLSAgICBwcmludGYoIiBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKFRMUylcbiIpOwotICAg IGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7 IGVsc2UgbGluZXMgPSAwOyB9Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0jaWZkZWYgU1NIQlVJTFRJ TgotICAgIHByaW50ZigiIFNlY3VyZSBTaGVsbCAoU1NIKSBbaW50ZXJuYWxdXG4iKTsKLSAgICBp ZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBl bHNlIGxpbmVzID0gMDsgfQotI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KLSNpZmRlZiBTU0hDTUQK LSAgICBwcmludGYoIiBTZWN1cmUgU2hlbGwgKFNTSCkgW2V4dGVybmFsXVxuIik7Ci0gICAgaWYg KCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxz ZSBsaW5lcyA9IDA7IH0KLSNlbmRpZiAvKiBTU0hDTUQgKi8KLSNpZmRlZiBDS19FTkNSWVBUSU9O Ci0gICAgcHJpbnRmKCIgVGVsbmV0IEVuY3J5cHRpb24gT3B0aW9uXG4iKTsKLSAgICBpZiAoKyts aW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxp bmVzID0gMDsgfQotI2lmZGVmIENLX0RFUwotICAgIHByaW50ZigiIFRlbG5ldCBERVMgRW5jcnlw dGlvblxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSNlbmRpZiAvKiBDS19ERVMgKi8KLSNp ZmRlZiBDS19DQVNUCi0gICAgcHJpbnRmKCIgVGVsbmV0IENBU1QgRW5jcnlwdGlvblxuIik7Ci0g ICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigx KTsgZWxzZSBsaW5lcyA9IDA7IH0KLSNlbmRpZiAvKiBDS19DQVNUICovCi0KLSNpZmRlZiBDS19L RVJCRVJPUwotI2lmZGVmIEtSQjUKLSNpZmRlZiBBTExPV19LUkJfM0RFU19FTkNSWVBUCi0gICAg cHJpbnRmKCIgS2VyYmVyb3MgM0RFUy9BRVMgVGVsbmV0IEVuY3J5cHRpb25cbiIpOwotICAgIGlm ICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVs c2UgbGluZXMgPSAwOyB9Ci0jZW5kaWYgLyogQUxMT1dfS1JCXzNERVNfRU5DUllQVCAqLwotI2Vu ZGlmIC8qIEtSQjUgKi8KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotCi0jZW5kaWYgLyogQ0tf RU5DUllQVElPTiAqLwotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0jaWZkZWYgQ0tf Rk9SV0FSRF9YCi0gICAgcHJpbnRmKCIgWCBXaW5kb3dzIGZvcndhcmRpbmdcbiIpOwotICAgIGlm ICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVs c2UgbGluZXMgPSAwOyB9Ci0jZW5kaWYgLyogQ0tfRk9SV0FSRF9YICovCi0jaWZkZWYgVE5fQ09N UE9SVAotICAgIHByaW50ZigiIFRlbG5ldCBSZW1vdGUgQ29tIFBvcnQgQ29udHJvbCBPcHRpb25c biIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSBy ZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0jZW5kaWYgLyogVE5fQ09NUE9SVCAqLwotI2lm ZGVmIENLX1NPQ0tTCi0jaWZkZWYgQ0tfU09DS1M1Ci0gICAgcHJpbnRmKCIgU09DS1MgNVxuIik7 Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVy bigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSNlbHNlIC8qIENLX1NPQ0tTNSAqLwotICAgIHByaW50 ZigiIFNPQ0tTIDRcbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICgh YXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0jZW5kaWYgLyogQ0tfU09D S1M1ICovCi0jZW5kaWYgLyogQ0tfU09DS1MgKi8KLSNpZmRlZiBORVdGVFAKLSAgICBwcmludGYo IiBCdWlsdC1pbiBGVFAgY2xpZW50XG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0g MykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotI2VuZGlm IC8qIE5FV0ZUUCAqLwotI2lmZGVmIENLSFRUUAotICAgIHByaW50ZigiIEJ1aWx0LWluIEhUVFAg Y2xpZW50XG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotI2VuZGlmIC8qIENLSFRUUCAqLwot I2VuZGlmIC8qIE5FVENPTk4gKi8KLQotI2lmZGVmIENLX1JUU0NUUwotICAgIHByaW50ZigiIEhh cmR3YXJlIGZsb3cgY29udHJvbFxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMp IHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSNlbmRpZiAv KiBDS19SVFNDVFMgKi8KLQotI2lmZGVmIENLX1hZWgotI2lmZGVmIFhZWl9JTlRFUk5BTAotICAg IHByaW50ZigiIEJ1aWx0LWluIFhZWk1PREVNIHByb3RvY29sc1xuIik7Ci0jZWxzZQotICAgIHBy aW50ZigiIEV4dGVybmFsIFhZWk1PREVNIHByb3RvY29sIHN1cHBvcnRcbiIpOwotI2VuZGlmIC8q IFhZWl9JTlRFUk5BTCAqLwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICgh YXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0jZW5kaWYgLyogQ0tfWFla ICovCi0KLSNpZm5kZWYgTk9DU0VUUwotICAgIHByaW50ZigiIExhdGluLTEgKFdlc3QgRXVyb3Bl YW4pIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb25cbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21k X3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9 Ci0jaWZkZWYgTEFUSU4yCi0gICAgcHJpbnRmKCIgTGF0aW4tMiAoRWFzdCBFdXJvcGVhbikgY2hh cmFjdGVyLXNldCB0cmFuc2xhdGlvblxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAt IDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSNlbmRp ZiAvKiBMQVRJTjIgKi8KLSNpZmRlZiBDWVJJTExJQwotICAgIHByaW50ZigiIEN5cmlsbGljIChS dXNzaWFuLCBVa3JhaW5pYW4sIGV0YykgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvblxuIik7Ci0g ICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigx KTsgZWxzZSBsaW5lcyA9IDA7IH0KLSNlbmRpZiAvKiBDWVJJTExJQyAqLwotI2lmZGVmIEdSRUVL Ci0gICAgcHJpbnRmKCIgR3JlZWsgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvblxuIik7Ci0gICAg aWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsg ZWxzZSBsaW5lcyA9IDA7IH0KLSNlbmRpZiAvKiBHUkVFSyAqLwotI2lmZGVmIEhFQlJFVwotICAg IHByaW50ZigiIEhlYnJldyBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uXG4iKTsKLSAgICBpZiAo KytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNl IGxpbmVzID0gMDsgfQotI2VuZGlmIC8qIEhFQlJFVyAqLwotI2lmZGVmIEtBTkpJCi0gICAgcHJp bnRmKCIgSmFwYW5lc2UgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvblxuIik7Ci0gICAgaWYgKCsr bGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBs aW5lcyA9IDA7IH0KLSNlbmRpZiAvKiBLQU5KSSAqLwotI2lmZGVmIFVOSUNPREUKLSAgICBwcmlu dGYoIiBVbmljb2RlIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb25cbiIpOwotICAgIGlmICgrK2xp bmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGlu ZXMgPSAwOyB9Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotI2lmZGVmIENLT1VOSQotICAgIGlmIChp c3VuaWNvZGUoKSkKLSAgICAgIHByaW50ZigiIFVuaWNvZGUgc3VwcG9ydCBmb3IgSVNPLTIwMjIg VGVybWluYWwgRW11bGF0aW9uXG4iKTsKLSAgICBlbHNlCi0gICAgICBwcmludGYoIiBVbmljb2Rl IHRyYW5zbGF0aW9uIGZvciBUZXJtaW5hbCBDaGFyYWN0ZXItU2V0c1xuIik7Ci0gICAgaWYgKCsr bGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBs aW5lcyA9IDA7IH0KLSNlbmRpZiAvKiBDS09VTkkgKi8KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0K LSNpZmRlZiBORVRQVFkKLSAgICBwcmludGYoIiBQc2V1ZG90ZXJtaW5hbCBjb250cm9sXG4iKTsK LSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJu KDEpOyBlbHNlIGxpbmVzID0gMDsgfQotI2VuZGlmIC8qIE5FVFBUWSAqLwotCi0jaWZkZWYgQ0tf UkVESVIKLSAgICBwcmludGYoIiBSRURJUkVDVCBjb21tYW5kXG4iKTsKLSAgICBpZiAoKytsaW5l cyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVz ID0gMDsgfQotI2VuZGlmIC8qIENLX1JFRElSICovCi0KLSNpZmRlZiBDS19SRVNFTkQKLSAgICBw cmludGYoIiBSRVNFTkQgY29tbWFuZFxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAt IDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSNlbmRp ZiAvKiBDS19SRVNFTkQgKi8KLQotI2lmbmRlZiBOT1hGRVIKLSNpZmRlZiBDS19DVVJTRVMKLSAg ICBwcmludGYoIiBGdWxsc2NyZWVuIGZpbGUgdHJhbnNmZXIgZGlzcGxheVxuIik7Ci0gICAgaWYg KCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxz ZSBsaW5lcyA9IDA7IH0KLSNlbmRpZiAvKiBDS19DVVJTRVMgKi8KLSNlbmRpZiAvKiBOT1hGRVIg Ki8KLQotI2lmZGVmIENLX1NQRUVECi0gICAgcHJpbnRmKCIgQ29udHJvbC1jaGFyYWN0ZXIgdW5w cmVmaXhpbmdcbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNr bW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0jZW5kaWYgLyogQ0tfU1BFRUQg Ki8KLQotI2lmZGVmIFNUUkVBTUlORwotICAgIHByaW50ZigiIFN0cmVhbWluZ1xuIik7Ci0gICAg aWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsg ZWxzZSBsaW5lcyA9IDA7IH0KLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLQotI2lmZGVmIENLX0FV VE9ETAotICAgIHByaW50ZigiIEF1dG9kb3dubG9hZFxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBj bWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7 IH0KLSNlbmRpZiAvKiBDS19BVVRPREwgKi8KLQotI2lmZGVmIE9TMk1PVVNFCi0gICAgcHJpbnRm KCIgTW91c2Ugc3VwcG9ydFxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsg aWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSNlbmRpZiAvKiBP UzJNT1VTRSAqLwotCi0jaWZkZWYgQ0tfUkVYWAotICAgIHByaW50ZigiIFJFWFggc2NyaXB0IGxh bmd1YWdlIGludGVyZmFjZVxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsg aWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSNlbmRpZiAvKiBD S19SRVhYICovCi0KLSNpZmRlZiBJS1NECi0jaWZkZWYgQ0tfTE9HSU4KLSAgICBwcmludGYoIiBJ bnRlcm5ldCBLZXJtaXQgU2VydmljZSB3aXRoIHVzZXIgbG9naW4gc3VwcG9ydFxuIik7Ci0jZWxz ZSAvKiBDS19MT0dJTiAqLwotICAgIHByaW50ZigiIEludGVybmV0IEtlcm1pdCBTZXJ2aWNlIHdp dGhvdXQgdXNlciBsb2dpbiBzdXBwb3J0XG4iKTsKLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotICAg IGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7 IGVsc2UgbGluZXMgPSAwOyB9Ci0jZW5kaWYgLyogSUtTRCAqLwotCi0gICAgcHJpbnRmKCJcbiIp OwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1 cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgcHJpbnRmKCJNYWpvciBvcHRpb25hbCBmZWF0 dXJlcyBub3QgaW5jbHVkZWQ6XG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykg eyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotCi0gICAgaWYg KHNpemVvZihDS19PRkZfVCkgPD0gNCkgewotCXByaW50ZigiIE5vIGxhcmdlIGZpbGVzIG9yIGxh cmdlIGludGVnZXJzXG4iKTsKLSAgICAgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsK LQkgICAgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7Ci0JfQotICAg IH0KLQotI2lmZGVmIE5PWEZFUgotICAgIHByaW50ZigiIE5vIGZpbGUtdHJhbnNmZXIgcHJvdG9j b2xzXG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUo KSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIGZsYWcgPSAxOwotI2Vsc2UKLSNp Zm5kZWYgQ0tfQ1VSU0VTCi0jaWZuZGVmIE1BQwotICAgIHByaW50ZigiIE5vIGZ1bGxzY3JlZW4g ZmlsZSB0cmFuc2ZlciBkaXNwbGF5XG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0g MykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIGZs YWcgPSAxOwotI2VuZGlmIC8qIE1BQyAqLwotI2VuZGlmIC8qIENLX0NVUlNFUyAqLwotCi0jaWZk ZWYgTk9TRVJWRVIKLSAgICBwcmludGYoIiBObyBzZXJ2ZXIgbW9kZVxuIik7Ci0gICAgaWYgKCsr bGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBs aW5lcyA9IDA7IH0KLSAgICBmbGFnID0gMTsKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotCi0jaWZu ZGVmIENLX1NQRUVECi0gICAgcHJpbnRmKCIgTm8gY29udHJvbC1jaGFyYWN0ZXIgdW5wcmVmaXhp bmdcbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgp KSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgZmxhZyA9IDE7Ci0jZW5kaWYgLyog Q0tfU1BFRUQgKi8KLQotI2lmbmRlZiBTVFJFQU1JTkcKLSAgICBwcmludGYoIiBObyBzdHJlYW1p bmdcbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgp KSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgZmxhZyA9IDE7Ci0jZW5kaWYgLyog U1RSRUFNSU5HICovCi0KLSNpZm5kZWYgQ0tfQVVUT0RMCi0gICAgcHJpbnRmKCIgTm8gYXV0b2Rv d25sb2FkXG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIGZsYWcgPSAxOwotI2VuZGlm IC8qIENLX0FVVE9ETCAqLwotCi0jaWZuZGVmIENLX1hZWgotICAgIHByaW50ZigiIE5vIGJ1aWx0 LWluIFhZWk1PREVNIHByb3RvY29sc1xuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAt IDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBm bGFnID0gMTsKLSNlbmRpZiAvKiBDS19YWVogKi8KLQotI2lmZGVmIE5PRkxPQVQKLSAgICBwcmlu dGYoIiBObyBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljXG4iKTsKLSAgICBpZiAoKytsaW5lcyA+ IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0g MDsgfQotICAgIGZsYWcgPSAxOwotICAgIHByaW50ZigiIE5vIFMtRXhwcmVzc2lvbnMgKExJU1Ag aW50ZXJwcmV0ZXIpXG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAo IWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIGZsYWcgPSAxOwot I2Vsc2UKLSNpZmRlZiBOT1NFWFAKLSAgICBwcmludGYoIiBObyBTLUV4cHJlc3Npb25zIChMSVNQ IGludGVycHJldGVyKVxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYg KCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBmbGFnID0gMTsK LSNlbmRpZgkvKiBOT1NFWFAgKi8KLSNlbmRpZgkvKiBOT0ZMT0FUICovCi0KLSNpZmRlZiBOT1RM T0cKLSAgICBwcmludGYoIiBObyB0cmFuc2FjdGlvbiBsb2dcbiIpOwotICAgIGlmICgrK2xpbmVz ID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMg PSAwOyB9Ci0gICAgZmxhZyA9IDE7Ci0jZW5kaWYgLyogTk9UTE9HICovCi0jZW5kaWYgLyogTk9Y RkVSICovCi0KLSNpZmRlZiBOT0RFQlVHCi0gICAgcHJpbnRmKCIgTm8gZGVidWdnaW5nXG4iKTsK LSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJu KDEpOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIGZsYWcgPSAxOwotI2VuZGlmIC8qIE5PREVCVUcg Ki8KLQotI2lmZGVmIE5PSEVMUAotICAgIHByaW50ZigiIE5vIGJ1aWx0LWluIGhlbHBcbiIpOwot ICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4o MSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgZmxhZyA9IDE7Ci0jZW5kaWYgLyogTk9IRUxQICov Ci0KLSNpZmRlZiBOT0xPQ0FMCi0gICAgcHJpbnRmKCIgTm8gbWFraW5nIGNvbm5lY3Rpb25zXG4i KTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0 dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIGZsYWcgPSAxOwotI2Vsc2UKLSNpZm5kZWYg TkVUQ09OTgotICAgIHByaW50ZigiIE5vIG5ldHdvcmsgc3VwcG9ydFxuIik7Ci0gICAgaWYgKCsr bGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBs aW5lcyA9IDA7IH0KLSAgICBmbGFnID0gMTsKLSNlbHNlIC8qIE5FVENPTk4gKi8KLSNpZm5kZWYg SUtTX09QVElPTgotICAgIHByaW50ZigiIE5vIFRlbG5ldCBLZXJtaXQgT3B0aW9uXG4iKTsKLSAg ICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEp OyBlbHNlIGxpbmVzID0gMDsgfQotICAgIGZsYWcgPSAxOwotI2VuZGlmIC8qIElLU19PUFRJT04g Ki8KLSNlbmRpZiAvKiBORVRDT05OICovCi0KLSNpZmRlZiBOT1NTSAotICAgIHByaW50ZigiIE5v IFNlY3VyZSBTaGVsbCAoU1NIKVxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMp IHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSNlbmRpZiAv KiBOT1NTSCAqLwotI2lmbmRlZiBDS19BVVRIRU5USUNBVElPTgotICAgIHByaW50ZigiIE5vIEtl cmJlcm9zKFRNKSBhdXRoZW50aWNhdGlvblxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93 cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSAg ICBwcmludGYoIiBObyBTUlAoVE0pIChTZWN1cmUgUmVtb3RlIFBhc3N3b3JkKSBwcm90b2NvbFxu Iik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJl dHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBwcmludGYoIiBObyBTZWN1cmUgU29ja2V0 cyBMYXllciAoU1NMKSBwcm90b2NvbFxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAt IDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBw cmludGYoIiBObyBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKFRMUykgcHJvdG9jb2xcbiIpOwot ICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4o MSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgcHJpbnRmKCIgTm8gZW5jcnlwdGlvblxuIik7Ci0g ICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigx KTsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBmbGFnID0gMTsKLSNlbHNlIC8qIENLX0FVVEhFTlRJ Q0FUSU9OICovCi0jaWZuZGVmIENLX0tFUkJFUk9TCi0gICAgcHJpbnRmKCIgTm8gS2VyYmVyb3Mo VE0pIGF1dGhlbnRpY2F0aW9uXG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykg eyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIGZsYWcg PSAxOwotI2Vsc2UgLyogQ0tfS0VSQkVST1MgKi8KLSNpZm5kZWYgS1JCNAotICAgIHByaW50Zigi IE5vIEtlcmJlcm9zKFRNKSBJViBhdXRoZW50aWNhdGlvblxuIik7Ci0gICAgaWYgKCsrbGluZXMg PiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9 IDA7IH0KLSAgICBmbGFnID0gMTsKLSNlbmRpZiAvKiBLUkI0ICovCi0jaWZuZGVmIEtSQjUKLSAg ICBwcmludGYoIiBObyBLZXJiZXJvcyhUTSkgViBhdXRoZW50aWNhdGlvblxuIik7Ci0gICAgaWYg KCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxz ZSBsaW5lcyA9IDA7IH0KLSAgICBmbGFnID0gMTsKLSNlbmRpZiAvKiBLUkI1ICovCi0jZW5kaWYg LyogQ0tfS0VSQkVST1MgKi8KLSNpZm5kZWYgQ0tfU1JQCi0gICAgcHJpbnRmKCIgTm8gU1JQKFRN KSAoU2VjdXJlIFJlbW90ZSBQYXNzd29yZCkgYXV0aGVudGljYXRpb25cbiIpOwotICAgIGlmICgr K2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2Ug bGluZXMgPSAwOyB9Ci0gICAgZmxhZyA9IDE7Ci0jZW5kaWYgLyogQ0tfU1JQICovCi0jaWZuZGVm IENLX1NTTAotICAgIHByaW50ZigiIE5vIFNlY3VyZSBTb2NrZXRzIExheWVyIChTU0wpIHByb3Rv Y29sXG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUo KSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIHByaW50ZigiIE5vIFRyYW5zcG9y dCBMYXllciBTZWN1cml0eSAoVExTKSBwcm90b2NvbFxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBj bWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7 IH0KLSAgICBmbGFnID0gMTsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNpZm5kZWYgQ0tfRU5DUllQ VElPTgotICAgIHByaW50ZigiIE5vIFRlbG5ldCBFbmNyeXB0aW9uIE9wdGlvblxuIik7Ci0gICAg aWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsg ZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBmbGFnID0gMTsKLSNlbHNlIC8qIENLX0VOQ1JZUFRJT04g Ki8KLSNpZm5kZWYgT1MyCi0jaWZuZGVmIENLX0RFUwotICAgIHByaW50ZigiIE5vIFRlbG5ldCBE RVMgZW5jcnlwdGlvblxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYg KCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBmbGFnID0gMTsK LSNlbmRpZiAvKiBDS19ERVMgKi8KLSNpZm5kZWYgQ0tfQ0FTVAotICAgIHByaW50ZigiIE5vIFRl bG5ldCBDQVNUIGVuY3J5cHRpb25cbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAz KSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgZmxh ZyA9IDE7Ci0jZW5kaWYgLyogQ0tfQ0FTVCAqLwotCi0jaWZkZWYgQ09NTUVOVAotI2lmZGVmIENL X0tFUkJFUk9TCi0jaWZkZWYgS1JCNQotI2lmbmRlZiBBTExPV19LUkJfM0RFU19FTkNSWVBUCi0g ICAgcHJpbnRmKCIgTm8gS2VyYmVyb3MgM0RFUy9BRVMgVGVsbmV0IEVuY3J5cHRpb25cbiIpOwot ICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4o MSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0jZW5kaWYgLyogQUxMT1dfS1JCXzNERVNfRU5DUllQVCAq LwotI2VuZGlmIC8qIEtSQjUgKi8KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotI2VuZGlmIC8q IENPTU1FTlQgKi8KLQotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04g Ki8KLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotI2lmbmRlZiBDS19GT1JXQVJEX1gK LSAgICBwcmludGYoIiBObyBYIFdpbmRvd3MgZm9yd2FyZGluZ1xuIik7Ci0gICAgaWYgKCsrbGlu ZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5l cyA9IDA7IH0KLSNlbmRpZiAvKiBDS19GT1JXQVJEX1ggKi8KLSNpZm5kZWYgVE5fQ09NUE9SVAot ICAgIHByaW50ZigiIE5vIFRlbG5ldCBSZW1vdGUgQ29tIFBvcnQgQ29udHJvbCBPcHRpb25cbiIp OwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1 cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0jZW5kaWYgLyogVE5fQ09NUE9SVCAqLwotI2lmbmRl ZiBDS19TT0NLUwotICAgIHByaW50ZigiIE5vIFNPQ0tTXG4iKTsKLSAgICBpZiAoKytsaW5lcyA+ IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0g MDsgfQotI2VuZGlmIC8qIENLX1NPQ0tTICovCi0jaWZuZGVmIE5FV0ZUUAotICAgIHByaW50Zigi IE5vIGJ1aWx0LWluIEZUUCBjbGllbnRcbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3Mg LSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0jZW5k aWYgLyogTkVXRlRQICovCi0jaWZkZWYgTk9IVFRQCi0gICAgcHJpbnRmKCIgTm8gYnVpbHQtaW4g SFRUUCBjbGllbnRcbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICgh YXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0jZW5kaWYgLyogTk9IVFRQ ICovCi0KLSNpZmRlZiBOT0RJQUwKLSAgICBwcmludGYoIiBObyBESUFMIGNvbW1hbmRcbiIpOwot ICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4o MSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgZmxhZyA9IDE7Ci0jZWxzZQotI2lmZGVmIE1JTklE SUFMCi0gICAgcHJpbnRmKCIgU3VwcG9ydCBmb3IgbW9zdCBtb2RlbSB0eXBlcyBleGNsdWRlZFxu Iik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJl dHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBmbGFnID0gMTsKLSNlbmRpZiAvKiBNSU5J RElBTCAqLwotI2VuZGlmIC8qIE5PRElBTCAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lm bmRlZiBDS19SVFNDVFMKLSNpZm5kZWYgTUFDCi0gICAgcHJpbnRmKCIgTm8gaGFyZHdhcmUgZmxv dyBjb250cm9sXG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFz a21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIGZsYWcgPSAxOwotI2Vu ZGlmIC8qIE1BQyAqLwotI2VuZGlmIC8qIENLX1JUU0NUUyAqLwotCi0jaWZkZWYgTk9YTUlUCi0g ICAgcHJpbnRmKCIgTm8gVFJBTlNNSVQgY29tbWFuZFxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBj bWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7 IH0KLSAgICBmbGFnID0gMTsKLSNlbmRpZiAvKiBOT1hNSVQgKi8KLQotI2lmZGVmIE5PU0NSSVBU Ci0gICAgcHJpbnRmKCIgTm8gU0NSSVBUIGNvbW1hbmRcbiIpOwotICAgIGlmICgrK2xpbmVzID4g Y21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAw OyB9Ci0gICAgZmxhZyA9IDE7Ci0jZW5kaWYgLyogTk9TQ1JJUFQgKi8KLQotI2lmZGVmIE5PU1BM Ci0gICAgcHJpbnRmKCIgTm8gc2NyaXB0IHByb2dyYW1taW5nIGZlYXR1cmVzXG4iKTsKLSAgICBp ZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBl bHNlIGxpbmVzID0gMDsgfQotICAgIGZsYWcgPSAxOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNp ZmRlZiBOT0NTRVRTCi0gICAgcHJpbnRmKCIgTm8gY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvblxu Iik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJl dHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBmbGFnID0gMTsKLSNlbHNlCi0KLSNpZm5k ZWYgTEFUSU4yCi0gICAgcHJpbnRmKCIgTm8gTGF0aW4tMiBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0 aW9uXG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUo KSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIGZsYWcgPSAxOwotI2VuZGlmIC8q IExBVElOMiAqLwotCi0jaWZkZWYgTk9HUkVFSwotICAgIHByaW50ZigiIE5vIEdyZWVrIGNoYXJh Y3Rlci1zZXQgdHJhbnNsYXRpb25cbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAz KSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgZmxh ZyA9IDE7Ci0jZW5kaWYgLyogTk9HUkVFSyAqLwotCi0jaWZkZWYgTk9IRUJSRVcKLSAgICBwcmlu dGYoIiBObyBIZWJyZXcgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvblxuIik7Ci0gICAgaWYgKCsr bGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBs aW5lcyA9IDA7IH0KLSAgICBmbGFnID0gMTsKLSNlbmRpZiAvKiBOT0hFQlJFVyAqLwotCi0jaWZk ZWYgTk9VTklDT0RFCi0gICAgcHJpbnRmKCIgTm8gVW5pY29kZSBjaGFyYWN0ZXItc2V0IHRyYW5z bGF0aW9uXG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIGZsYWcgPSAxOwotI2VuZGlm IC8qIE5PVU5JQ09ERSAqLwotCi0jaWZkZWYgTk9DWVJJTAotICAgIHByaW50ZigiIE5vIEN5cmls bGljIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb25cbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21k X3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9 Ci0gICAgZmxhZyA9IDE7Ci0jZW5kaWYgLyogTk9DWVJJTCAqLwotCi0jaWZuZGVmIEtBTkpJCi0g ICAgcHJpbnRmKCIgTm8gS2FuamkgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvblxuIik7Ci0gICAg aWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsg ZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBmbGFnID0gMTsKLSNlbmRpZiAvKiBLQU5KSSAqLwotI2Vu ZGlmIC8qIE5PQ1NFVFMgKi8KLQotI2lmZGVmIE5PQ01ETAotICAgIHByaW50ZigiIE5vIGNvbW1h bmQtbGluZSBhcmd1bWVudHNcbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7 IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgZmxhZyA9 IDE7Ci0jZW5kaWYgLyogTk9DTURMICovCi0KLSNpZmRlZiBOT1BVU0gKLSAgICBwcmludGYoIiBO byBlc2NhcGUgdG8gc3lzdGVtXG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykg eyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIGZsYWcg PSAxOwotI2VuZGlmIC8qIE5PUFVTSCAqLwotCi0jaWZkZWYgTk9KQwotI2lmZGVmIFVOSVgKLSAg ICBwcmludGYoIiBObyBVTklYIGpvYiBjb250cm9sXG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNt ZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsg fQotICAgIGZsYWcgPSAxOwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBOT0pDICovCi0K LSNpZmRlZiBOT1NFVEtFWQotICAgIHByaW50ZigiIE5vIFNFVCBLRVkgY29tbWFuZFxuIik7Ci0g ICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigx KTsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBmbGFnID0gMTsKLSNlbmRpZiAvKiBOT1NFVEtFWSAq LwotCi0jaWZuZGVmIENLX1JFRElSCi0gICAgcHJpbnRmKCIgTm8gUkVESVJFQ1Qgb3IgUElQRSBj b21tYW5kXG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIGZsYWcgPSAxOwotI2VuZGlm IC8qIENLX1JFRElSICovCi0KLSNpZmRlZiBVTklYCi0jaWZuZGVmIE5FVFBUWQotICAgIHByaW50 ZigiIE5vIHBzZXVkb3Rlcm1pbmFsIGNvbnRyb2xcbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21k X3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9 Ci0gICAgZmxhZyA9IDE7Ci0jZW5kaWYgLyogTkVUUFRZICovCi0jZW5kaWYgLyogVU5JWCAqLwot Ci0jaWZuZGVmIENLX1JFU0VORAotICAgIHByaW50ZigiIE5vIFJFU0VORCBjb21tYW5kXG4iKTsK LSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJu KDEpOyBlbHNlIGxpbmVzID0gMDsgfQotICAgIGZsYWcgPSAxOwotI2VuZGlmIC8qIENLX1JFU0VO RCAqLwotCi0jaWZkZWYgT1MyCi0jaWZkZWYgX18zMkJJVF9fCi0jaWZuZGVmIE9TMk1PVVNFCi0g ICAgcHJpbnRmKCIgTm8gTW91c2Ugc3VwcG9ydFxuIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRf cm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0K LSAgICBmbGFnID0gMTsKLSNlbmRpZiAvKiBfXzMyQklUX18gKi8KLSNlbmRpZiAvKiBPUzIgKi8K LSNlbmRpZiAvKiBPUzJNT1VTRSAqLwotCi0jaWZkZWYgT1MyCi0jaWZuZGVmIE5UCi0jaWZuZGVm IENLX1JFWFgKLSAgICBwcmludGYoIiBObyBSRVhYIHNjcmlwdCBsYW5ndWFnZSBpbnRlcmZhY2Vc biIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSBy ZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgZmxhZyA9IDE7Ci0jZW5kaWYgLyogQ0tf UkVYWCAqLwotI2VuZGlmIC8qIE5UICovCi0jZW5kaWYgLyogT1MyICovCi0KLSNpZm5kZWYgSUtT RAotICAgIHByaW50ZigiIE5vIEludGVybmV0IEtlcm1pdCBTZXJ2aWNlXG4iKTsKLSAgICBpZiAo KytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNl IGxpbmVzID0gMDsgfQotICAgIGZsYWcgPSAxOwotI2VuZGlmIC8qIElLU0QgKi8KLQotICAgIGlm IChmbGFnID09IDApIHsKLSAgICAgICAgcHJpbnRmKCIgTm9uZVxuIik7Ci0gICAgICAgIGlmICgr K2xpbmVzID4gY21kX3Jvd3MgLSAzKQotICAgICAgICAgIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVy bigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICB9Ci0gICAgcHJpbnRmKCJcbiIpOwotICAgIGlm ICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVs c2UgbGluZXMgPSAwOyB9Ci0KLSNpZmRlZiBDS19VVFNOQU1FCi0gICAgaWYgKCsrbGluZXMgPiBj bWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7 IH0KLSAgICBwcmludGYoIkhvc3QgaW5mbzpcbiIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jv d3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0g ICAgcHJpbnRmKCIgTWFjaGluZTogICAgJXNcbiIsdW5tX21jaFswXSA/IHVubV9tY2ggOiAiKHVu a25vd24pIik7Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBwcmludGYoIiBNb2RlbDogICAg ICAlc1xuIix1bm1fbW9kWzBdID8gdW5tX21vZCA6ICIodW5rbm93bikiKTsKLSAgICBpZiAoKyts aW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxp bmVzID0gMDsgfQotICAgIHByaW50ZigiIE9TOiAgICAgICAgICVzXG4iLHVubV9uYW1bMF0gPyB1 bm1fbmFtIDogIih1bmtub3duKSIpOwotICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7 IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Ci0gICAgcHJpbnRm KCIgT1MgUmVsZWFzZTogJXNcbiIsdW5tX3JlbFswXSA/IHVubV9yZWwgOiAiKHVua25vd24pIik7 Ci0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVy bigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSAgICBwcmludGYoIiBPUyBWZXJzaW9uOiAlc1xuIix1 bm1fdmVyWzBdID8gdW5tX3ZlciA6ICIodW5rbm93bikiKTsKLSAgICBpZiAoKytsaW5lcyA+IGNt ZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsg fQotICAgIHByaW50ZigiXG4iKTsKLSAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBp ZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQotI2VuZGlmIC8qIENL X1VUU05BTUUgKi8KLQotLyoKLSAgUHJpbnQgY29tcGlsZS10aW1lICgtRCkgb3B0aW9ucywgYXMg d2VsbCBhcyBDIHByZXByb2Nlc3NvcgotICBwcmVkZWZpbmVkIHN5bWJvbHMgdGhhdCBtaWdodCBh ZmZlY3QgdXMuLi4KLSovCi0jaWZkZWYgS1RBUkdFVAotICAgIHsKLSAgICAgICAgY2hhciAqIHM7 ICAgICAgICAgICAgICAgICAgICAgICAvKiBNYWtlZmlsZSB0YXJnZXQgKi8KLSAgICAgICAgcyA9 IEtUQVJHRVQ7Ci0gICAgICAgIGlmICghcykgcyA9ICIiOwotICAgICAgICBpZiAoISpzKSBzID0g Iih1bmtub3duKSI7Ci0gICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgaWYgKCsrbGluZXMg PiBjbWRfcm93cyAtIDMpIHsKLSAgICAgICAgICAgIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7 IGVsc2UgbGluZXMgPSAwOwotICAgICAgICB9Ci0gICAgICAgIHByaW50ZigiVGFyZ2V0OiAlc1xu Iiwgcyk7Ci0gICAgICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7Ci0gICAgICAgICAg ICBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsKLSAgICAgICAgfQot ICAgIH0KLSNlbmRpZiAvKiBLVEFSR0VUICovCi0KLSNpZmRlZiBfX1ZFUlNJT05fXwotI2lmZGVm IF9fR05VQ19fCi0gICAgcHJpbnRmKCJHQ0MgdmVyc2lvbjogJXNcbiIsIF9fVkVSU0lPTl9fKTsK LSNlbHNlCi0gICAgcHJpbnRmKCJDb21waWxlciB2ZXJzaW9uOiAlc1xuIiwgX19WRVJTSU9OX18p OwotI2VuZGlmIC8qIF9fR05VQ19fICovCi0gICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMp IHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KLSNlbmRpZiAv KiBfX1ZFUlNJT05fXyAqLwotCi0jaWZkZWYgX19EQVRFX18gICAgICAgICAgICAgICAgICAgICAg ICAgLyogR05VIGFuZCBvdGhlciBBTlNJICovCi0jaWZkZWYgX19USU1FX18KLSAgICBwcmludGYo IkNvbXBpbGVkICVzICVzLCBvcHRpb25zOlxuIiwgX19EQVRFX18sIF9fVElNRV9fKTsKLSNlbHNl Ci0gICAgcHJpbnRmKCJDb21waWxlZCAlcywgb3B0aW9uczpcbiIsIF9fREFURV9fKTsKLSNlbmRp ZiAvKiBfX1RJTUVfXyAqLwotI2Vsc2UgLyogIV9fREFURV9fICovCi0gICAgcHJpbnRmKCJDb21w aWxlciBvcHRpb25zOlxuIik7Ci0jZW5kaWYgLyogX19EQVRFX18gKi8KLSAgICBpZiAoKytsaW5l cyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVz ID0gMDsgfQotCi0gICAgZm9yIChpID0gMDsgaSA8IG5vcHRsaXN0OyBpKyspICAgICAgLyogUHJp bnQgc29ydGVkIG9wdGlvbiBsaXN0ICovCi0gICAgICBpZiAoIXBydG9wdCgmbGluZXMsb3B0bGlz dFtpXSkpCi0gICAgICAgIHJldHVybigwKTsKLQotICAgIGlmICghcHJ0b3B0KCZsaW5lcywiIikp IHJldHVybigwKTsgIC8qIFN0YXJ0IGEgbmV3IHNlY3Rpb24gKi8KLQotLyogU2l6ZXMgb2YgZGF0 YSB0eXBlcyAqLwotCi0gICAgY2ttYWttc2cobGluZSwKLSAgICAgICAgICAgICBMSU5CVUZTSVos Ci0gICAgICAgICAgICAgImJ5dGUgb3JkZXI6ICIsCi0gICAgICAgICAgICAgYnl0ZW9yZGVyID8g ImxpdHRsZSIgOiAiYmlnIiwKLSAgICAgICAgICAgICAiIGVuZGlhbiIsCi0gICAgICAgICAgICAg TlVMTAotICAgICAgICAgICAgICk7Ci0gICAgewotLyogV2hldGhlciB0byB1c2UgJWQgb3IgJWxk IHdpdGggc2l6ZW9mIGlzIGEgcG9ydGFiaWxpdHkgaXNzdWUsIHNvLi4uICovCi0JaW50IHNpemUg PSAwOwotCi0JaWYgKCFwcnRvcHQoJmxpbmVzLGxpbmUpKSByZXR1cm4oMCk7Ci0JaWYgKCFwcnRv cHQoJmxpbmVzLCIiKSkgcmV0dXJuKDApOyAgLyogU3RhcnQgYSBuZXcgc2VjdGlvbiAqLwotCi0J c2l6ZSA9IChpbnQpc2l6ZW9mKGludCk7Ci0Jc3ByaW50ZihsaW5lLCJzaXplb2ZzOiBpbnQ9JWQi LHNpemUpOyAvKiBTQUZFICovCi0JaWYgKCFwcnRvcHQoJmxpbmVzLGxpbmUpKSByZXR1cm4oMCk7 Ci0KLQlzaXplID0gKGludClzaXplb2YobG9uZyk7Ci0Jc3ByaW50ZihsaW5lLCJsb25nPSVkIixz aXplKTsgLyogU0FGRSAqLwotCWlmICghcHJ0b3B0KCZsaW5lcyxsaW5lKSkgcmV0dXJuKDApOwot Ci0jaWZuZGVmIE9TMgotCS8qIFdpbmRvd3MgZG9lc24ndCBoYXZlIG9mZl90ICovCi0Jc2l6ZSA9 IChpbnQpc2l6ZW9mKG9mZl90KTsKLQlzcHJpbnRmKGxpbmUsIm9mZl90PSVkIixzaXplKTsgLyog U0FGRSAqLwotCWlmICghcHJ0b3B0KCZsaW5lcyxsaW5lKSkgcmV0dXJuKDApOwotI2VuZGlmIC8q IE9TMiAqLwotCi0Jc2l6ZSA9IChpbnQpc2l6ZW9mKENLX09GRl9UKTsKLQlzcHJpbnRmKGxpbmUs IkNLX09GRl9UPSVkIixzaXplKTsgLyogU0FGRSAqLwotCWlmICghcHJ0b3B0KCZsaW5lcyxsaW5l KSkgcmV0dXJuKDApOwotCi0jaWZkZWYgQklHQlVGT0sKLQlzaXplID0gKGludClzaXplb2Yoc2l6 ZV90KTsKLQlzcHJpbnRmKGxpbmUsInNpemVfdD0lZCIsc2l6ZSk7IC8qIFNBRkUgKi8KLQlpZiAo IXBydG9wdCgmbGluZXMsbGluZSkpIHJldHVybigwKTsKLSNlbmRpZiAvKiBCSUdCVUZPSyAqLwot Ci0Jc2l6ZSA9IChpbnQpc2l6ZW9mKHNob3J0KTsKLQlzcHJpbnRmKGxpbmUsInNob3J0PSVkIixz aXplKTsgLyogU0FGRSAqLwotCWlmICghcHJ0b3B0KCZsaW5lcyxsaW5lKSkgcmV0dXJuKDApOwot Ci0Jc2l6ZSA9IChpbnQpc2l6ZW9mKGNoYXIpOwotCXNwcmludGYobGluZSwiY2hhcj0lZCIsc2l6 ZSk7IC8qIFNBRkUgKi8KLQlpZiAoIXBydG9wdCgmbGluZXMsbGluZSkpIHJldHVybigwKTsKLQot CXNpemUgPSAoaW50KXNpemVvZihjaGFyICopOwotCXNwcmludGYobGluZSwiY2hhcio9JWQiLHNp emUpOyAvKiBTQUZFICovCi0JaWYgKCFwcnRvcHQoJmxpbmVzLGxpbmUpKSByZXR1cm4oMCk7Ci0K LQlzaXplID0gKGludClzaXplb2YoZmxvYXQpOwotCXNwcmludGYobGluZSwiZmxvYXQ9JWQiLHNp emUpOyAvKiBTQUZFICovCi0JaWYgKCFwcnRvcHQoJmxpbmVzLGxpbmUpKSByZXR1cm4oMCk7Ci0K LQlzaXplID0gKGludClzaXplb2YoZG91YmxlKTsKLQlzcHJpbnRmKGxpbmUsImRvdWJsZT0lZCIs c2l6ZSk7IC8qIFNBRkUgKi8KLQlpZiAoIXBydG9wdCgmbGluZXMsbGluZSkpIHJldHVybigwKTsK LSAgICB9Ci0KLSNpZmRlZiBGTkZMT0FUCi0gICAgaWYgKCFwcnRvcHQoJmxpbmVzLCIiKSkgcmV0 dXJuKDApOyAgLyogU3RhcnQgYSBuZXcgc2VjdGlvbiAqLwotICAgIGlmICghcHJ0b3B0KCZsaW5l cywiZmxvYXRpbmctcG9pbnQ6IikpIHJldHVybigwKTsKLSAgICBzcHJpbnRmKGxpbmUsInByZWNp c2lvbj0lZCIsZnBfZGlnaXRzKTsgLyogU0FGRSAqLwotICAgIGlmICghcHJ0b3B0KCZsaW5lcyxs aW5lKSkgcmV0dXJuKDApOwotICAgIHNwcmludGYobGluZSwicm91bmRpbmc9JWQiLGZwX3JvdW5k aW5nKTsgLyogU0FGRSAqLwotICAgIGlmICghcHJ0b3B0KCZsaW5lcyxsaW5lKSkgcmV0dXJuKDAp OwotI2VuZGlmIC8qIEZORkxPQVQgKi8KLQotICAgIHBydG9wdCgmbGluZXMsIiIpOwotICAgIHJl dHVybigwKTsKLX0KLSNlbmRpZiAvKiBOT1NIT1cgKi8KLSNlbmRpZiAvKiBOT0lDUCAqLwoKZGlm ZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXM2LmMg Yi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzNi5jCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDk5MGM2Li4wMDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4w LjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXM2LmMKKysrIC9kZXYvbnVsbApAQCAtMSwx MjAwOSArMCwwIEBACi0jaW5jbHVkZSAiY2tjc3ltLmgiCi0jaWZuZGVmIE5PSUNQCi0KLS8qCi0g IEF1dGhvcnM6Ci0gICAgRnJhbmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4sCi0gICAgICBU aGUgS2VybWl0IFByb2plY3QsIENvbHVtYmlhIFVuaXZlcnNpdHksIE5ldyBZb3JrIENpdHkKLSAg ICBKZWZmcmV5IEUgQWx0bWFuIDxqYWx0bWFuQHNlY3VyZS1lbmRwb2ludHMuY29tPgotICAgICAg U2VjdXJlIEVuZHBvaW50cyBJbmMuLCBOZXcgWW9yayBDaXR5Ci0KLSAgQ29weXJpZ2h0IChDKSAx OTg1LCAyMDExLAotICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENp dHkgb2YgTmV3IFlvcmsuCi0gICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJt aXQgQ09QWUlORy5UWFQgZmlsZSBvciB0aGUKLSAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tj bWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KLSovCi0KLS8qIElu Y2x1ZGVzICovCi0KLSNpbmNsdWRlICJja2NkZWIuaCIKLSNpbmNsdWRlICJja2Nhc2MuaCIKLSNp bmNsdWRlICJja2NrZXIuaCIKLSNpbmNsdWRlICJja3V1c3IuaCIKLSNpbmNsdWRlICJja2N4bGEu aCIKLSNpbmNsdWRlICJja2NuZXQuaCIgICAgICAgICAgICAgICAgICAgICAvKiBOZXR3b3JrIHN5 bWJvbHMgKi8KLSNpbmNsdWRlIDxzaWduYWwuaD4KLQotI2lmbmRlZiBOT1NUQVQKLSNpZmRlZiBW TVMKLS8qIDIwMTAtMDMtMDkgU01TLiAgVkFYIEMgbmVlZHMgaGVscCB0byBmaW5kICJzeXMiLiAg SXQncyBlYXNpZXIgbm90IHRvIHRyeS4gKi8KLSNpbmNsdWRlIDxzdGF0Lmg+Ci0jZWxzZSAvKiBk ZWYgVk1TICovCi0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNlbmRpZiAvKiBkZWYgVk1TIFtlbHNl XSAqLwotI2VuZGlmIC8qIE5PU1RBVCAqLwotCi0jaWZkZWYgVk1TCi0jaWZuZGVmIFRDUFNPQ0tF VAotI2luY2x1ZGUgPGVycm5vLmg+Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0jZW5kaWYgLyog Vk1TICovCi0KLSNpZmRlZiBkYXRhZ2VuZXJhbAotI2RlZmluZSBmZ2V0cyhzdHJpbmdidWYsbWF4 LGZkKSBkZ19mZ2V0cyhzdHJpbmdidWYsbWF4LGZkKQotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICov Ci0KLSNpZmRlZiBRTlg2Ci0jZGVmaW5lIHJlYWRibG9jayBrcmVhZGJsb2NrCi0jZW5kaWYgLyog UU5YNiAqLwotCi0vKiBFeHRlcm5hbCBLZXJtaXQgVmFyaWFibGVzLCBzZWUgY2ttYWluLmMgZm9y IGRlc2NyaXB0aW9uLiAqLwotCi1leHRlcm4geHhfc3RycCB4eHN0cmluZzsKLQotZXh0ZXJuIGlu dCBsb2NhbCwgeGl0c3RhLCBiaW5hcnksIHBhcml0eSwgZXNjYXBlLCBmbG93LCBjbWRfcm93cywg dHVybiwKLSAgdHVybmNoLCBkdXBsZXgsIGNreGVjaCwgc2VzbG9nLCBkZmxvYywgY25mbGcsIHRs ZXZlbCwgcGZsYWcsIG1zZ2ZsZywgbWRtdHlwLAotICB6aW5jbnQsIHF1aWV0LCByZXBhcnMsIHRl Y2hvLCBuZXR3b3JrLCBuenhvcHRzLCB3aGF0LCBmaWxlcGVlaywgcmVjdXJzaXZlOwotCi1leHRl cm4gaW50IHhhc2ttb3JlLCB0dF9yb3dzLCB0dF9jb2xzLCBjbWRfY29scywgZ19tYXRjaGRvdCwg ZGlyYWN0aXZlLAotICB4Y21kc3JjLCBuc2NhbmZpbGUsIHJlbGlhYmxlLCBub2xpbmtzLCBjbWZs Z3M7Ci0KLSNpZmRlZiBWTVNPUlVOSVgKLWV4dGVybiBpbnQgemdmc19kaXIsIHpnZnNfbGluazsK LSNlbmRpZiAvKiBWTVNPUlVOSVggKi8KLQotI2lmZGVmIENLX0lGUk8KLSAgZXh0ZXJuIGludCBy ZW1vbmx5OwotI2VuZGlmIC8qIENLX0lGUk8gKi8KLQotI2lmZGVmIE9TMgotZXh0ZXJuIGludCBT dGFydGVkRnJvbURpYWxlciA7Ci1leHRlcm4gaW50IHZtb2RlOwotZXh0ZXJuIGludCBrOTVzdGRv dXQ7Ci0jaWZuZGVmIE5UCi0jZGVmaW5lIElOQ0xfTk9QTQotI2RlZmluZSBJTkNMX1ZJTyAgICAg ICAgICAgICAgICAgICAgICAgIC8qIE5lZWRlZCBmb3IgY2tvY29uLmggKi8KLSNpbmNsdWRlIDxv czIuaD4KLSN1bmRlZiBDT01NRU5UCi0jZWxzZQotI2RlZmluZSBBUElSRVQgVUxPTkcKLSNpbmNs dWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8dGFwaS5oPgotI2luY2x1ZGUgImNrbnRhcC5oIgot I2VuZGlmIC8qIE5UICovCi0jaW5jbHVkZSAiY2tvY29uLmgiCi0jZW5kaWYgLyogT1MyICovCi0K LWV4dGVybiBsb25nIHZlcm51bSwgc3BlZWQ7Ci1leHRlcm4gY2hhciAqdmVyc2lvLCAqcHJvdHYs ICpja3h2LCAqY2t6diwgKmZuc3YsICpjb25udiwgKmRmdHR5LCAqY21kdjsKLWV4dGVybiBjaGFy ICpkaWFsdiwgKmxvZ2ludiwgKmZvcl9kZWZbXSwgKndoaWxfZGVmW10sICp4aWZfZGVmW10sICpz d19kZWZbXTsKLWV4dGVybiBjaGFyICpmb3pfZGVmW107Ci1leHRlcm4gY2hhciAqY2t4c3lzLCAq Y2t6c3lzOwotI2lmbmRlZiBPUzIKLWV4dGVybiBjaGFyICpESVJDTUQ7Ci0jaWZuZGVmIFVOSVgK LWV4dGVybiBjaGFyICpERUxDTUQ7Ci0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIE9TMiAq LwotZXh0ZXJuIGNoYXIgdHRuYW1lW10sIGZpbG5hbVtdOwotZXh0ZXJuIENIQVIgc3N0YXRlLCBm ZW9sOwotZXh0ZXJuIGNoYXIgKnppbnB0cjsKLQotI2lmZGVmIFVOSVgKLWV4dGVybiBjaGFyICoq IG10Y2hzOyAgICAgICAgICAgICAgICAgICAvKiB6eHBhbmQoKSBmaWxlIGxpc3QgKi8KLSNlbmRp ZiAvKiBVTklYICovCi0KLSNpZm5kZWYgTk9YRkVSCi1leHRlcm4gaW50IG9vcHRzLCBvbW9kZSwg b25hbWUsIG9wYXRoOyAgLyogTy1QYWNrZXQgb3B0aW9ucyAqLwotCi1leHRlcm4gaW50IHN0ZGlu Ziwgc25kc3JjLCBzaXplLCBycHNpeiwgdXJwc2l6LCBmbmNudiwgZm5ycGF0aCwgZGlzcGxhLAot ICBzdGRvdWYsIGlzZ3Vlc3QsIHBrdGxvZywgbmZpbHMsIGtlZXAsIG1heHJwcywgZmJsa3Npeiwg ZnJlY2wsIGZyZWNmbSwKLSAgYXRjYXByLCBhdGRpc28sIHNwc2l6Ziwgc3BzaXosIHNwc2l6ciwg c3BtYXgsIHdzbG90ciwgcHJlZml4aW5nLAotICBmbmNhY3QsIGZuc3BhdGgsIG5wcm90b3MsIGdf cHJvdG8sIGdfdXJwc2l6LCBnX3Nwc2l6ZiwKLSAgZ19zcHNpeiwgZ19zcHNpenIsIGdfc3BtYXgs IGdfd3Nsb3RyLCBnX3ByZWZpeGluZywgZ19mbmNhY3QsIGdfZm5jbnYsCi0gIGdfZm5zcGF0aCwg Z19mbnJwYXRoLCB4ZnJ4bGEsIGdfeGZyeGxhOwotCi1leHRlcm4gY2hhciAqY21hcmcsICpjbWFy ZzI7Ci0KLSNpZm5kZWYgTk9NU0VORCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNdWx0aXBs ZSBTRU5EICovCi1leHRlcm4gY2hhciAqbXNmaWxlc1tdOwotI2VuZGlmIC8qIE5PTVNFTkQgKi8K LWV4dGVybiBjaGFyIGZzcGVjW107ICAgICAgICAgICAgICAgICAgICAvKiBNb3N0IHJlY2VudCBm aWxlc3BlYyAqLwotZXh0ZXJuIGludCBmc3BlY2xlbjsKLQotI2lmZGVmIENLX1RNUERJUgotZXh0 ZXJuIGludCBmX3RtcGRpcjsgICAgICAgICAgICAgICAgICAgIC8qIERpcmVjdG9yeSBjaGFuZ2Vk IHRlbXBvcmFyaWx5ICovCi1leHRlcm4gY2hhciBzYXZkaXJbXTsgICAgICAgICAgICAgICAgICAg LyogRm9yIHNhdmluZyBjdXJyZW50IGRpcmVjdG9yeSAqLwotI2VuZGlmIC8qIENLX1RNUERJUiAq LwotCi1leHRlcm4gc3RydWN0IGtleXRhYiBwcm90b3NbXTsgICAgICAgICAgLyogRmlsZSB0cmFu c2ZlciBwcm90b2NvbHMgKi8KLWV4dGVybiBzdHJ1Y3QgY2tfcCBwdGFiW05QUk9UT1NdOwotI2Vu ZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZkZWYgRENNREJVRiAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogRGVjbGFyYXRpb25zIGZyb20gY21kIHBhY2thZ2UgKi8KLWV4dGVybiBjaGFyICpjbWRi dWYsICphdG1idWY7ICAgICAgICAgICAvKiBDb21tYW5kIGJ1ZmZlcnMgKi8KLSNlbHNlCi1leHRl cm4gY2hhciBjbWRidWZbXSwgYXRtYnVmW107ICAgICAgICAgLyogQ29tbWFuZCBidWZmZXJzICov Ci0jZW5kaWYgLyogRENNREJVRiAqLwotCi1leHRlcm4gaW50IG5vcHVzaDsKLQotI2lmbmRlZiBO T1NQTAotaW50IGFza2ZsYWcgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFTSy1jbGFz cyBjb21tYW5kIGFjdGl2ZSAqLwotaW50IGVjaG9zdGFycyA9IDA7CQkJLyogQVNLUSBzaG91bGQg ZWNobyBhc3Rlcmlza3MgKi8KLWV4dGVybiBjaGFyICoqYV9wdHJbXTsKLWV4dGVybiBpbnQgYV9k aW1bXTsKLWV4dGVybiBjaGFyICoqbV94YXJnW107Ci1leHRlcm4gaW50IG5feGFyZ1tdOwotZXh0 ZXJuIHN0cnVjdCBtdGFiICptYWN0YWI7Ci1leHRlcm4gaW50IG5tYWM7Ci1leHRlcm4gbG9uZyBj a19hbGFybTsKLWV4dGVybiBjaGFyIGFscm1fZGF0ZVtdLCBhbHJtX3RpbWVbXTsKLWV4dGVybiBp bnQgeF9pZm51bTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi1leHRlcm4gaW50IGluc2VydmVyOyAg ICAgICAgICAgICAgICAgICAgLyogSSBhbSBJS1NEICovCi1leHRlcm4gaW50IGJhY2tncmQ7ICAg ICAgICAgICAgICAgICAgICAgLyogS2VybWl0IGV4ZWN1dGluZyBpbiBiYWNrZ3JvdW5kICovCi1l eHRlcm4gY2hhciBwc2F2ZVtdOyAgICAgICAgICAgICAgICAgICAgLyogRm9yIHNhdmluZyAmIHJl c3RvcmluZyBwcm9tcHQgKi8KLWV4dGVybiBjaGFyICp0cDsgICAgICAgICAgICAgICAgICAgICAg ICAvKiBUZW1wb3JhcnkgYnVmZmVyICovCi0KLWludCByZWFkYmxvY2sgPSA0MDk2OyAgICAgICAg ICAgICAgICAgICAvKiBSRUFEIGJ1ZmZlciBzaXplICovCi1DSEFSICogcmVhZGJ1ZiA9IE5VTEw7 ICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byByZWFkIGJ1ZmZlciAqLwotaW50IHJlYWRz aXplID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIE51bWJlciBvZiBjaGFycyBhY3R1YWxs eSByZWFkICovCi1pbnQgZ2V0Y21kID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogR0VU LWNsYXNzIGNvbW1hbmQgd2FzIGdpdmVuICovCi0KLWV4dGVybiBpbnQgemNoa29kLCB6Y2hraWQ7 Ci0KLS8qICBDIEsgVSBVIFMgNiAtLSAgIlVzZXIgSW50ZXJmYWNlIiBmb3IgVW5peCBLZXJtaXQg KFBhcnQgNikgICovCi0KLXN0cnVjdCBrZXl0YWIgZGVsdGFiW10gPSB7ICAgICAgICAgICAgICAv KiBERUxFVEUgQ29tbWFuZCBPcHRpb25zICovCi0gICAgeyAiL2FsbCIsICAgICAgICAgICBERUxf QUxMLCAgQ01fSU5WIH0sCi0gICAgeyAiL2FmdGVyIiwgICAgICAgICBERUxfQUZULCAgQ01fQVJH IH0sCi0gICAgeyAiL2FzayIsICAgICAgICAgICBERUxfQVNLLCAgMCB9LAotICAgIHsgIi9iZWZv cmUiLCAgICAgICAgREVMX0JFRiwgIENNX0FSRyB9LAotICAgIHsgIi9kaXJlY3RvcmllcyIsICAg REVMX0RJUiwgIDAgfSwKLSAgICB7ICIvZG90ZmlsZXMiLCAgICAgIERFTF9ET1QsICAwIH0sCi0g ICAgeyAiL2V4Y2VwdCIsICAgICAgICBERUxfRVhDLCAgQ01fQVJHIH0sCi0gICAgeyAiL2hlYWRp bmciLCAgICAgICBERUxfSERHLCAgMCB9LAotICAgIHsgIi9sIiwgICAgICAgICAgICAgREVMX0xJ UywgIENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICIvbGFyZ2VyLXRoYW4iLCAgIERFTF9MQVIsICBD TV9BUkcgfSwKLSAgICB7ICIvbGlzdCIsICAgICAgICAgIERFTF9MSVMsICAwIH0sCi0gICAgeyAi L2xvZyIsICAgICAgICAgICBERUxfTElTLCAgQ01fSU5WIH0sCi0gICAgeyAiL25vYXNrIiwgICAg ICAgICBERUxfTkFTLCAgMCB9LAotICAgIHsgIi9ub2RvdGZpbGVzIiwgICAgREVMX05PRCwgIDAg fSwKLSAgICB7ICIvbm9oZWFkaW5nIiwgICAgIERFTF9OT0gsICAwIH0sCi0gICAgeyAiL25vbCIs ICAgICAgICAgICBERUxfTk9MLCAgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgIi9ub2xpc3QiLCAg ICAgICAgREVMX05PTCwgIDAgfSwKLSAgICB7ICIvbm9sb2ciLCAgICAgICAgIERFTF9OT0wsICBD TV9JTlYgfSwKLSAgICB7ICIvbm9wYWdlIiwgICAgICAgIERFTF9OT1AsICAwIH0sCi0gICAgeyAi L25vdC1hZnRlciIsICAgICBERUxfTkFGLCAgQ01fQVJHIH0sCi0gICAgeyAiL25vdC1iZWZvcmUi LCAgICBERUxfTkJGLCAgQ01fQVJHIH0sCi0gICAgeyAiL25vdC1zaW5jZSIsICAgICBERUxfTkFG LCAgQ01fSU5WfENNX0FSRyB9LAotICAgIHsgIi9wYWdlIiwgICAgICAgICAgREVMX1BBRywgIDAg fSwKLSAgICB7ICIvcXVpZXQiLCAgICAgICAgIERFTF9RVUksICBDTV9JTlYgfSwKLSAgICB7ICIv cmVjdXJzaXZlIiwgICAgIERFTF9SRUMsICAwIH0sCi0gICAgeyAiL3NpbXVsYXRlIiwgICAgICBE RUxfU0lNLCAgMCB9LAotICAgIHsgIi9zaW5jZSIsICAgICAgICAgREVMX0FGVCwgIENNX0FSR3xD TV9JTlYgfSwKLSAgICB7ICIvc21hbGxlci10aGFuIiwgIERFTF9TTUEsICBDTV9BUkcgfSwKLSAg ICB7ICIvc3VtbWFyeSIsICAgICAgIERFTF9TVU0sICAwIH0sCi0gICAgeyAiL3RyZWUiLCAgICAg ICAgICBERUxfQUxMLCAgMCB9LAotICAgIHsgIi90eXBlIiwgICAgICAgICAgREVMX1RZUCwgIENN X0FSRyB9LAotICAgIHsgIi92ZXJib3NlIiwgICAgICAgREVMX1ZSQiwgIENNX0lOViB9Ci19Owot aW50IG5kZWx0YWIgPSBzaXplb2YoZGVsdGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7Ci0KLS8q IC9RVUlFVC0vVkVSQk9TRSAoL0xJU1QtL05PTElTVCkgKC9MT0ctL05PTE9HKSB0YWJsZSAqLwot Ci1zdHJ1Y3Qga2V5dGFiIHF2c3d0YWJbXSA9IHsKLSAgICB7ICIvbCIsICAgICAgICAgICBERUxf TElTLCAgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgIi9saXN0IiwgICAgICAgIERFTF9MSVMsICAw IH0sCi0gICAgeyAiL2xvZyIsICAgICAgICAgREVMX0xJUywgIENNX0lOViB9LAotICAgIHsgIi9u b2wiLCAgICAgICAgIERFTF9OT0wsICBDTV9JTlZ8Q01fQUJSIH0sCi0gICAgeyAiL25vbGlzdCIs ICAgICAgREVMX05PTCwgIDAgfSwKLSAgICB7ICIvbm9sb2ciLCAgICAgICBERUxfTk9MLCAgQ01f SU5WIH0sCi0gICAgeyAiL3F1aWV0IiwgICAgICAgREVMX1FVSSwgIENNX0lOViB9LAotICAgIHsg Ii92ZXJib3NlIiwgICAgIERFTF9WUkIsICBDTV9JTlYgfQotfTsKLWludCBucXZzd3RhYiA9IHNp emVvZihxdnN3dGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5 dGFiIHJlbmFtc3dbXSA9IHsKLSAgICB7ICIvY29sbGlzaW9uIiwgICBSRU5fT1ZXLCAgQ01fQVJH IH0sCi0jaWZuZGVmIE5PVU5JQ09ERQotICAgIHsgIi9jb252ZXJ0IiwgICAgIFJFTl9YTEEsICBD TV9BUkcgfSwKLSNlbmRpZgkvKiBOT1VOSUNPREUgKi8KLSAgICB7ICIvZml4c3BhY2VzIiwgICBS RU5fU1BBLCAgQ01fQVJHIH0sCi0gICAgeyAiL2wiLCAgICAgICAgICAgREVMX0xJUywgIENNX0lO VnxDTV9BQlIgfSwKLSAgICB7ICIvbGlzdCIsICAgICAgICBERUxfTElTLCAgMCAgICAgIH0sCi0g ICAgeyAiL2xvZyIsICAgICAgICAgREVMX0xJUywgIENNX0lOViB9LAotICAgIHsgIi9sb3dlciIs ICAgICAgIFJFTl9MT1csICBDTV9BUkcgfSwKLSAgICB7ICIvbm9sIiwgICAgICAgICBERUxfTk9M LCAgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgIi9ub2xpc3QiLCAgICAgIERFTF9OT0wsICAwICAg ICAgfSwKLSAgICB7ICIvbm9sb2ciLCAgICAgICBERUxfTk9MLCAgQ01fSU5WIH0sCi0gICAgeyAi L3F1aWV0IiwgICAgICAgREVMX1FVSSwgIENNX0lOViB9LAotICAgIHsgIi9yZXBsYWNlIiwgICAg IFJFTl9SUEwsICBDTV9BUkcgfSwKLSAgICB7ICIvc2ltdWxhdGUiLCAgICBERUxfU0lNLCAgMCAg ICAgIH0sCi0gICAgeyAiL3VwcGVyIiwgICAgICAgUkVOX1VQUCwgIENNX0FSRyB9LAotICAgIHsg Ii92ZXJib3NlIiwgICAgIERFTF9WUkIsICBDTV9JTlYgfQotfTsKLXN0YXRpYyBpbnQgbnJlbmFt c3cgPSBzaXplb2YocmVuYW1zdykvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOwotCi1zdGF0aWMgc3Ry dWN0IGtleXRhYiByZW5hbXNldFtdID0gewotICAgIHsgImNvbGxpc2lvbiIsICAgIFJFTl9PVlcs ICAwIH0sCi0gICAgeyAibGlzdCIsICAgICAgICAgREVMX0xJUywgIDAgfQotfTsKLXN0YXRpYyBp bnQgbnJlbmFtc2V0ID0gc2l6ZW9mKHJlbmFtc2V0KS9zaXplb2Yoc3RydWN0IGtleXRhYik7Ci0K LS8qIEFyZ3MgZm9yIFJFTkFNRSAvTE9XRVI6IGFuZCAvVVBQRVI6ICovCi0KLXN0YXRpYyBzdHJ1 Y3Qga2V5dGFiIHJfdXBwZXJbXSA9IHsKLSAgICB7ICJhbGwiLCAgIDEsIDAgfSwKLSAgICB7ICJs b3dlciIsIDAsIDAgfQotfTsKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgcl9sb3dlcltdID0gewot ICAgIHsgImFsbCIsICAgMSwgMCB9LAotICAgIHsgInVwcGVyIiwgMCwgMCB9Ci19OwotCi0vKiBB cmdzIGZvciBSRU5BTUUgL0NPTExJU0lPTi4uLiAqLwotCi0jZGVmaW5lIFJFTlhfRkFJTCAwCi0j ZGVmaW5lIFJFTlhfT1ZXUiAxCi0jZGVmaW5lIFJFTlhfU0tJUCAyCi0KLXN0YXRpYyBzdHJ1Y3Qg a2V5dGFiIHJfY29sbGlzaW9uW10gPSB7Ci0gICAgeyAiZmFpbCIsICAgICAgUkVOWF9GQUlMLCAw IH0sCi0gICAgeyAib3ZlcndyaXRlIiwgUkVOWF9PVldSLCAwIH0sCi0gICAgeyAicHJvY2VlZCIs ICAgUkVOWF9TS0lQLCBDTV9JTlYgfSwKLSAgICB7ICJza2lwIiwgICAgICBSRU5YX1NLSVAsIDAg fQotfTsKLXN0YXRpYyBpbnQgbnJfY29sbGlzaW9uID0gc2l6ZW9mKHJfY29sbGlzaW9uKS9zaXpl b2Yoc3RydWN0IGtleXRhYik7Ci0KLXN0cnVjdCBrZXl0YWIgY29weXRhYltdID0gewotICAgIHsg Ii9hcHBlbmQiLCAgICAgIDk5OCwgICAgICAwIH0sCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAiL2Zy b21iNjQiLCAgICAgOTk3LCAgICAgIDAgfSwKLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgIHsgIi9s IiwgICAgICAgICAgIERFTF9MSVMsICBDTV9JTlZ8Q01fQUJSIH0sCi0gICAgeyAiL2xpc3QiLCAg ICAgICAgREVMX0xJUywgIDAgfSwKLSAgICB7ICIvbG9nIiwgICAgICAgICBERUxfTElTLCAgQ01f SU5WIH0sCi0gICAgeyAiL25vbCIsICAgICAgICAgREVMX05PTCwgIENNX0lOVnxDTV9BQlIgfSwK LSAgICB7ICIvbm9saXN0IiwgICAgICBERUxfTk9MLCAgMCB9LAotICAgIHsgIi9ub2xvZyIsICAg ICAgIERFTF9OT0wsICBDTV9JTlYgfSwKLSAgICB7ICIvb3ZlcndyaXRlIiwgICA5OTQsICAgICAg Q01fQVJHIH0sCi0jaWZuZGVmIE5PWEZFUgotICAgIHsgIi9wcmVzZXJ2ZSIsICAgIDk5NSwgICAg ICAwIH0sCi0jZW5kaWYJLyogTk9YRkVSICovCi0gICAgeyAiL3F1aWV0IiwgICAgICAgREVMX1FV SSwgIENNX0lOViB9LAotICAgIHsgIi9zd2FwLWJ5dGVzIiwgIDk5OSwgICAgICAwIH0sCi0jaWZu ZGVmIE5PU1BMCi0gICAgeyAiL3RvYjY0IiwgICAgICAgOTk2LCAgICAgIDAgfSwKLSNlbmRpZiAv KiBOT1NQTCAqLwotICAgIHsgIi92ZXJib3NlIiwgICAgIERFTF9WUkIsICBDTV9JTlYgfQotfTsK LWludCBuY29weXRhYiA9IHNpemVvZihjb3B5dGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7Ci0K LSNkZWZpbmUgT1ZXX0FMV0FZUyAwCi0jZGVmaW5lIE9WV19ORVZFUiAgMQotI2RlZmluZSBPVldf T0xERVIgIDIKLSNkZWZpbmUgT1ZXX05FV0VSICAzCi0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIG92 d3RhYltdID0gewotICAgIHsgImFsd2F5cyIsIE9WV19BTFdBWVMsIDAgfSwKLSAgICB7ICJuZXZl ciIsICBPVldfTkVWRVIsIDAgfSwKLSAgICB7ICJuZXdlciIsICBPVldfTkVXRVIsIDAgfSwKLSAg ICB7ICJvbGRlciIsICBPVldfT0xERVIsIDAgfQotfTsKLXN0YXRpYyBpbnQgbm92d3RhYiA9IDQ7 Ci0KLSNpZm5kZWYgTk9YRkVSCi1zdGF0aWMgc3RydWN0IGtleXRhYiBnZXR0YWJbXSA9IHsgICAg ICAgLyogR0VUIG9wdGlvbnMgKi8KLSAgICB7ICIvYXMtbmFtZSIsICAgICAgICAgU05EX0FTTiwg Q01fQVJHIH0sCi0gICAgeyAiL2JpbmFyeSIsICAgICAgICAgIFNORF9CSU4sIDAgfSwKLSNpZmRl ZiBDQUxJQlJBVEUKLSAgICB7ICIvY2FsaWJyYXRlIiwgICAgICAgU05EX0NBTCwgQ01fSU5WIH0s Ci0jZW5kaWYgLyogQ0FMSUJSQVRFICovCi0jaWZkZWYgUElQRVNFTkQKLSAgICB7ICIvY29tbWFu ZCIsICAgICAgICAgU05EX0NNRCwgQ01fUFNIIH0sCi0jZW5kaWYgLyogUElQRVNFTkQgKi8KLSAg ICB7ICIvZGVsZXRlIiwgICAgICAgICAgU05EX0RFTCwgMCB9LAotICAgIHsgIi9leGNlcHQiLCAg ICAgICAgICBTTkRfRVhDLCBDTV9BUkcgfSwKLSAgICB7ICIvZmlsZW5hbWVzIiwgICAgICAgU05E X05BTSwgQ01fQVJHIH0sCi0jaWZkZWYgUElQRVNFTkQKLSAgICB7ICIvZmlsdGVyIiwgICAgICAg ICAgU05EX0ZMVCwgQ01fQVJHfENNX1BTSCB9LAotI2VuZGlmIC8qIFBJUEVTRU5EICovCi0jaWZk ZWYgVk1TCi0gICAgeyAiL2ltYWdlIiwgICAgICAgICAgIFNORF9JTUcsIDAgfSwKLSAgICB7ICIv bGFiZWxlZCIsICAgICAgICAgU05EX0xCTCwgMCB9LAotI2Vsc2UKLSAgICB7ICIvaW1hZ2UiLCAg ICAgICAgICAgU05EX0JJTiwgQ01fSU5WIH0sCi0jZW5kaWYgLyogVk1TICovCi0jaWZkZWYgQ0tf VE1QRElSCi0gICAgeyAiL21vdmUtdG8iLCAgICAgICAgIFNORF9NT1YsIENNX0FSRyB9LAotI2Vu ZGlmIC8qIENLX1RNUERJUiAqLwotICAgIHsgIi9wYXRobmFtZXMiLCAgICAgICBTTkRfUFRILCBD TV9BUkcgfSwKLSAgICB7ICIvcGlwZXMiLCAgICAgICAgICAgU05EX1BJUCwgQ01fQVJHfENNX1BT SCB9LAotICAgIHsgIi9xdWlldCIsICAgICAgICAgICBTTkRfU0hILCAwIH0sCi0jaWZkZWYgQ0tf UkVTRU5ECi0gICAgeyAiL3JlY292ZXIiLCAgICAgICAgIFNORF9SRVMsIDAgfSwKLSNlbmRpZiAv KiBDS19SRVNFTkQgKi8KLSAgICB7ICIvcmVjdXJzaXZlIiwgICAgICAgU05EX1JFQywgMCB9LAot ICAgIHsgIi9yZW5hbWUtdG8iLCAgICAgICBTTkRfUkVOLCBDTV9BUkcgfSwKLSNpZmRlZiBDT01N RU5UCi0gICAgeyAiL3NtYWxsZXItdGhhbiIsICAgIFNORF9TTUEsIENNX0FSRyB9LAotI2VuZGlm IC8qIENPTU1FTlQgKi8KLSAgICB7ICIvc3ViZGlyZWN0b3JpZXMiLCAgU05EX1JFQywgQ01fSU5W IH0sCi0gICAgeyAiL3RleHQiLCAgICAgICAgICAgIFNORF9UWFQsIDAgfSwKLSAgICB7ICIvdHJh bnNwYXJlbnQiLCAgICAgU05EX1hQQSwgMCB9Ci19OwotI2RlZmluZSBOR0VUVEFCIHNpemVvZihn ZXR0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKQotc3RhdGljIGludCBuZ2V0dGFiID0gTkdFVFRB QjsKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgcmN2dGFiW10gPSB7ICAgICAgIC8qIFJFQ0VJVkUg b3B0aW9ucyAqLwotICAgIHsgIi9hcy1uYW1lIiwgICAgICAgICBTTkRfQVNOLCBDTV9BUkcgfSwK LSAgICB7ICIvYmluYXJ5IiwgICAgICAgICAgU05EX0JJTiwgMCB9LAotI2lmZGVmIENBTElCUkFU RQotICAgIHsgIi9jYWxpYnJhdGUiLCAgICAgICBTTkRfQ0FMLCBDTV9JTlYgfSwKLSNlbmRpZiAv KiBDQUxJQlJBVEUgKi8KLSNpZmRlZiBQSVBFU0VORAotICAgIHsgIi9jb21tYW5kIiwgICAgICAg ICBTTkRfQ01ELCBDTV9QU0ggfSwKLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotICAgIHsgIi9leGNl cHQiLCAgICAgICAgICBTTkRfRVhDLCBDTV9BUkcgfSwKLSAgICB7ICIvZmlsZW5hbWVzIiwgICAg ICAgU05EX05BTSwgQ01fQVJHIH0sCi0jaWZkZWYgUElQRVNFTkQKLSAgICB7ICIvZmlsdGVyIiwg ICAgICAgICAgU05EX0ZMVCwgQ01fQVJHfENNX1BTSCB9LAotI2VuZGlmIC8qIFBJUEVTRU5EICov Ci0jaWZkZWYgVk1TCi0gICAgeyAiL2ltYWdlIiwgICAgICAgICAgIFNORF9JTUcsIDAgfSwKLSAg ICB7ICIvbGFiZWxlZCIsICAgICAgICAgU05EX0xCTCwgMCB9LAotI2Vsc2UKLSAgICB7ICIvaW1h Z2UiLCAgICAgICAgICAgU05EX0JJTiwgQ01fSU5WIH0sCi0jZW5kaWYgLyogVk1TICovCi0jaWZk ZWYgQ0tfVE1QRElSCi0gICAgeyAiL21vdmUtdG8iLCAgICAgICAgIFNORF9NT1YsIENNX0FSRyB9 LAotI2VuZGlmIC8qIENLX1RNUERJUiAqLwotICAgIHsgIi9wYXRobmFtZXMiLCAgICAgICBTTkRf UFRILCBDTV9BUkcgfSwKLSAgICB7ICIvcGlwZXMiLCAgICAgICAgICAgU05EX1BJUCwgQ01fQVJH fENNX1BTSCB9LAotI2lmZGVmIENLX1hZWgotICAgIHsgIi9wcm90b2NvbCIsICAgICAgICBTTkRf UFJPLCBDTV9BUkcgfSwKLSNlbHNlCi0gICAgeyAiL3Byb3RvY29sIiwgICAgICAgIFNORF9QUk8s IENNX0FSR3xDTV9JTlYgfSwKLSNlbmRpZiAvKiBDS19YWVogKi8KLSAgICB7ICIvcXVpZXQiLCAg ICAgICAgICAgU05EX1NISCwgMCB9LAotICAgIHsgIi9yZWN1cnNpdmUiLCAgICAgICBTTkRfUkVD LCAwIH0sCi0gICAgeyAiL3JlbmFtZS10byIsICAgICAgIFNORF9SRU4sIENNX0FSRyB9LAotICAg IHsgIi90ZXh0IiwgICAgICAgICAgICBTTkRfVFhULCAwIH0sCi0gICAgeyAiL3RyYW5zcGFyZW50 IiwgICAgIFNORF9YUEEsIDAgfQotfTsKLSNkZWZpbmUgTlJDVlRBQiBzaXplb2YocmN2dGFiKS9z aXplb2Yoc3RydWN0IGtleXRhYikKLXN0YXRpYyBpbnQgbnJjdnRhYiA9IE5SQ1ZUQUI7Ci0jZW5k aWYgLyogTk9YRkVSICovCi0KLS8qIFdBSVQgdGFibGUgKi8KLQotI2RlZmluZSBXQUlUX0ZJTCA5 OTcKLSNkZWZpbmUgV0FJVF9NRE0gOTk4Ci0KLXN0cnVjdCBrZXl0YWIgd2FpdHRhYltdID0gewot ICAgIHsgImNkIiwgICAgICAgICAgICBCTV9EQ0QsICAgQ01fSU5WIH0sIC8qIChDYXJyaWVyIERl dGVjdCkgKi8KLSAgICB7ICJjdHMiLCAgICAgICAgICAgQk1fQ1RTLCAgIENNX0lOViB9LCAvKiAo Q2xlYXIgVG8gU2VuZCkgICovCi0gICAgeyAiZHNyIiwgICAgICAgICAgIEJNX0RTUiwgICBDTV9J TlYgfSwgLyogKERhdGEgU2V0IFJlYWR5KSAqLwotICAgIHsgImZpbGUiLCAgICAgICAgICBXQUlU X0ZJTCwgMCB9LCAgICAgIC8qIE5ldyBjYXRlZ29yeSBzZWxlY3RvciBrZXl3b3JkcyAqLwotICAg IHsgIm1vZGVtLXNpZ25hbHMiLCBXQUlUX01ETSwgMCB9LCAgICAgIC8qIC4uLiAqLwotICAgIHsg InJpIiwgICAgICAgICAgICBCTV9STkcsICAgQ01fSU5WIH0gIC8qIChSaW5nIEluZGljYXRvcikg Ki8KLX07Ci1pbnQgbndhaXR0YWIgPSAoc2l6ZW9mKHdhaXR0YWIpIC8gc2l6ZW9mKHN0cnVjdCBr ZXl0YWIpKTsKLQotLyogTW9kZW0gc2lnbmFsIHRhYmxlICovCi0KLXN0cnVjdCBrZXl0YWIgbXN0 YWJbXSA9IHsKLSAgICB7ICJjZCIsICAgIEJNX0RDRCwgMCB9LCAgICAgICAgICAgICAvKiBDYXJy aWVyIERldGVjdCAqLwotICAgIHsgImN0cyIsICAgQk1fQ1RTLCAwIH0sICAgICAgICAgICAgIC8q IENsZWFyIFRvIFNlbmQgICovCi0gICAgeyAiZHNyIiwgICBCTV9EU1IsIDAgfSwgICAgICAgICAg ICAgLyogRGF0YSBTZXQgUmVhZHkgKi8KLSAgICB7ICJyaSIsICAgIEJNX1JORywgMCB9ICAgICAg ICAgICAgICAvKiBSaW5nIEluZGljYXRvciAqLwotfTsKLWludCBubXMgPSAoc2l6ZW9mKG1zdGFi KSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLSNkZWZpbmUgV0ZfTU9EIDEKLSNkZWZpbmUg V0ZfREVMIDIKLSNkZWZpbmUgV0ZfQ1JFIDMKLQotc3RydWN0IGtleXRhYiB3ZnN3aVtdID0geyAg ICAgICAgICAgICAgIC8qIFdBSVQgRklMRSBzd2l0Y2hlcyAqLwotICAgIHsgImNyZWF0aW9uIiwg ICAgIFdGX0NSRSwgMCB9LCAgICAgIC8qIFdhaXQgZm9yIGZpbGUgdG8gYmUgY3JlYXRlZCAqLwot ICAgIHsgImRlbGV0aW9uIiwgICAgIFdGX0RFTCwgMCB9LCAgICAgIC8qIFdhaXQgZm9yIGZpbGUg dG8gYmUgZGVsZXRlZCAqLwotICAgIHsgIm1vZGlmaWNhdGlvbiIsIFdGX01PRCwgMCB9ICAgICAg IC8qIFdhaXQgZm9yIGZpbGUgdG8gYmUgbW9kaWZpZWQgKi8KLX07Ci1pbnQgbndmc3dpID0gKHNp emVvZih3ZnN3aSkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi0jaWZuZGVmIE5PU1BMCi1z dHJ1Y3Qga2V5dGFiIGFzZ3RhYltdID0geyAgICAgICAgICAgICAgLyogQXNzaWdubWVudCBvcGVy YXRvcnMgZm9yICIuIiAqLwotICAgIHsgIjo6PSIsIDIsIDAgfSwgICAgICAgICAgICAgICAgICAg IC8qIEFTU0lHTiBhbmQgRVZBTFVBVEUgKi8KLSAgICB7ICI6PSIsICAxLCAwIH0sICAgICAgICAg ICAgICAgICAgICAvKiBBU1NJR04gKi8KLSAgICB7ICI9IiwgICAwLCAwIH0gICAgICAgICAgICAg ICAgICAgICAvKiBERUZJTkUgKi8KLX07Ci1pbnQgbmFzZ3RhYiA9IChzaXplb2YoYXNndGFiKSAv IHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLXN0cnVjdCBrZXl0YWIgb3BudGFiW10gPSB7Ci0j aWZuZGVmIE5PUFVTSAotICAgIHsgIiFyZWFkIiwgIE9QTl9QSV9SLCBDTV9JTlYgfSwKLSAgICB7 ICIhd3JpdGUiLCBPUE5fUElfVywgQ01fSU5WIH0sCi0jZW5kaWYgLyogTk9QVVNIICovCi0gICAg eyAiYXBwZW5kIiwgT1BOX0ZJX0EsIDAgfSwKLSAgICB7ICJob3N0IiwgICBPUE5fTkVULCAgMCB9 LAotI2lmZGVmIE9TMgotICAgIHsgImxpbmUiLCAgIE9QTl9TRVIsICBDTV9JTlYgfSwKLSAgICB7 ICJwb3J0IiwgICBPUE5fU0VSLCAgMCB9LAotI2Vsc2UKLSAgICB7ICJsaW5lIiwgICBPUE5fU0VS LCAgMCB9LAotICAgIHsgInBvcnQiLCAgIE9QTl9TRVIsICBDTV9JTlYgfSwKLSNlbmRpZiAvKiBP UzIgKi8KLSAgICB7ICJyZWFkIiwgICBPUE5fRklfUiwgMCB9LAotICAgIHsgIndyaXRlIiwgIE9Q Tl9GSV9XLCAwIH0KLX07Ci1pbnQgbm9wbiA9IChzaXplb2Yob3BudGFiKSAvIHNpemVvZihzdHJ1 Y3Qga2V5dGFiKSk7Ci0KLS8qIElGIGNvbmRpdGlvbnMgKi8KLQotI2RlZmluZSAgWFhJRkNPIDAg ICAgICAgLyogSUYgQ09VTlQgKi8KLSNkZWZpbmUgIFhYSUZFUiAxICAgICAgIC8qIElGIEVSUk9S TEVWRUwgKi8KLSNkZWZpbmUgIFhYSUZFWCAyICAgICAgIC8qIElGIEVYSVNUICovCi0jZGVmaW5l ICBYWElGRkEgMyAgICAgICAvKiBJRiBGQUlMVVJFICovCi0jZGVmaW5lICBYWElGU1UgNCAgICAg ICAvKiBJRiBTVUNDRVNTICovCi0jZGVmaW5lICBYWElGTk8gNSAgICAgICAvKiBJRiBOT1QgKi8K LSNkZWZpbmUgIFhYSUZERSA2ICAgICAgIC8qIElGIERFRklORUQgKi8KLSNkZWZpbmUgIFhYSUZF USA3ICAgICAgIC8qIElGIEVRVUFMIChzdHJpbmdzKSAqLwotI2RlZmluZSAgWFhJRkFFIDggICAg ICAgLyogSUYgPSAobnVtYmVycykgKi8KLSNkZWZpbmUgIFhYSUZMVCA5ICAgICAgIC8qIElGIDwg KG51bWJlcnMpICovCi0jZGVmaW5lICBYWElGR1QgMTAgICAgICAvKiBJRiA+IChudW1iZXJzKSAq LwotI2RlZmluZSAgWFhJRkxMIDExICAgICAgLyogSUYgTGV4aWNhbGx5IExlc3MgVGhhbiAoc3Ry aW5ncykgKi8KLSNkZWZpbmUgIFhYSUZMRyAxMiAgICAgIC8qIElGIExleGljYWxseSBHcmVhdGVy IFRoYW4gKHN0cmluZ3MpICovCi0jZGVmaW5lICBYWElGRU8gMTMgICAgICAvKiBJRiBFT0YgKFJF QUQgZmlsZSkgKi8KLSNkZWZpbmUgIFhYSUZCRyAxNCAgICAgIC8qIElGIEJBQ0tHUk9VTkQgKi8K LSNkZWZpbmUgIFhYSUZOVSAxNSAgICAgIC8qIElGIE5VTUVSSUMgKi8KLSNkZWZpbmUgIFhYSUZG RyAxNiAgICAgIC8qIElGIEZPUkVHUk9VTkQgKi8KLSNkZWZpbmUgIFhYSUZESSAxNyAgICAgIC8q IElGIERJUkVDVE9SWSAqLwotI2RlZmluZSAgWFhJRk5FIDE4ICAgICAgLyogSUYgTkVXRVIgKi8K LSNkZWZpbmUgIFhYSUZSTyAxOSAgICAgIC8qIElGIFJFTU9URS1PTkxZICovCi0jZGVmaW5lICBY WElGQUwgMjAgICAgICAvKiBJRiBBTEFSTSAqLwotI2RlZmluZSAgWFhJRlNEIDIxICAgICAgLyog SUYgU1RBUlRFRC1GUk9NLURJQUxFUiAqLwotI2RlZmluZSAgWFhJRlRSIDIyICAgICAgLyogSUYg VFJVRSAqLwotI2RlZmluZSAgWFhJRk5UIDIzICAgICAgLyogSUYgRkFMU0UgKi8KLSNkZWZpbmUg IFhYSUZUTSAyNCAgICAgIC8qIElGIFRFUk1JTkFMLU1BQ1JPICovCi0jZGVmaW5lICBYWElGRU0g MjUgICAgICAvKiBJRiBFTVVMQVRJT04gKi8KLSNkZWZpbmUgIFhYSUZPUCAyNiAgICAgIC8qIElG IE9QRU4gKi8KLSNkZWZpbmUgIFhYSUZMRSAyNyAgICAgIC8qIElGIDw9ICovCi0jZGVmaW5lICBY WElGR0UgMjggICAgICAvKiBJRiA+PSAqLwotI2RlZmluZSAgWFhJRklQIDI5ICAgICAgLyogSUYg SU5QQVRIICovCi0jZGVmaW5lICBYWElGVEEgMzAgICAgICAvKiBJRiBUQVBJICovCi0jZGVmaW5l ICBYWElGTUEgMzEgICAgICAvKiBJRiBNQVRDSCAqLwotI2RlZmluZSAgWFhJRkZMIDMyICAgICAg LyogSUYgRkxBRyAqLwotI2RlZmluZSAgWFhJRkFCIDMzICAgICAgLyogSUYgQUJTT0xVVEUgKi8K LSNkZWZpbmUgIFhYSUZBViAzNCAgICAgIC8qIElGIEFWQUlMQUJMRSAqLwotI2RlZmluZSAgWFhJ RkFUIDM1ICAgICAgLyogSUYgQVNLVElNRU9VVCAqLwotI2RlZmluZSAgWFhJRlJEIDM2ICAgICAg LyogSUYgUkVBREFCTEUgKi8KLSNkZWZpbmUgIFhYSUZXUiAzNyAgICAgIC8qIElGIFdSSVRFQUJM RSAqLwotI2RlZmluZSAgWFhJRkFOIDM4ICAgICAgLyogSUYgLi4uIEFORCAuLi4gKi8KLSNkZWZp bmUgIFhYSUZPUiAzOSAgICAgIC8qIElGIC4uLiBPUiAuLi4gKi8KLSNkZWZpbmUgIFhYSUZMUCA0 MCAgICAgIC8qIElGIGxlZnQgcGFyZW50aGVzaXMgKi8KLSNkZWZpbmUgIFhYSUZSUCA0MSAgICAg IC8qIElGIHJpZ2h0IHBhcmVudGhlc2lzICovCi0jZGVmaW5lICBYWElGTlEgNDIgICAgICAvKiBJ RiAhPSAoPT0gIk5PVCA9IikgKi8KLSNkZWZpbmUgIFhYSUZRVSA0MyAgICAgIC8qIElGIFFVSUVU ICovCi0jZGVmaW5lICBYWElGQ0sgNDQgICAgICAvKiBJRiBDLUtFUk1JVCAqLwotI2RlZmluZSAg WFhJRks5IDQ1ICAgICAgLyogSUYgSy05NSAqLwotI2RlZmluZSAgWFhJRk1TIDQ2ICAgICAgLyog SUYgTVMtS0VSTUlUICovCi0jZGVmaW5lICBYWElGV0kgNDcgICAgICAvKiBJRiBXSUxEICovCi0j ZGVmaW5lICBYWElGTE8gNDggICAgICAvKiBJRiBMT0NBTCAqLwotI2RlZmluZSAgWFhJRkNNIDQ5 ICAgICAgLyogSUYgQ09NTUFORCAqLwotI2RlZmluZSAgWFhJRkZQIDUwICAgICAgLyogSUYgRkxP QVQgKi8KLSNkZWZpbmUgIFhYSUZJSyA1MSAgICAgIC8qIElGIElLUyAqLwotI2RlZmluZSAgWFhJ RktCIDUyICAgICAgLyogSUYgS0JISVQgKi8KLSNkZWZpbmUgIFhYSUZLRyA1MyAgICAgIC8qIElG IEtFUkJBTkcgKi8KLSNkZWZpbmUgIFhYSUZWRSA1NCAgICAgIC8qIElGIFZFUlNJT04gKi8KLSNk ZWZpbmUgIFhYSUZEQyA1NSAgICAgIC8qIElGIERFQ0xBUkVEICovCi0jZGVmaW5lICBYWElGR1Ug NTYgICAgICAvKiBJRiBHVUkgKi8KLSNkZWZpbmUgIFhYSUZMTiA1NwkvKiBJRiBMSU5LICovCi0j ZGVmaW5lICBYWElGREIgNTgJLyogSUYgREVCVUcgKi8KLQotc3RydWN0IGtleXRhYiBpZnRhYltd ID0geyAgICAgICAgICAgICAgIC8qIElGIGNvbW1hbmRzICovCi0gICAgeyAiISIsICAgICAgICAg IFhYSUZOTywgMCB9LAotICAgIHsgIiE9IiwgICAgICAgICBYWElGTlEsIDAgfSwKLSAgICB7ICIm JiIsICAgICAgICAgWFhJRkFOLCAwIH0sCi0gICAgeyAiKCIsICAgICAgICAgIFhYSUZMUCwgMCB9 LAotICAgIHsgIikiLCAgICAgICAgICBYWElGUlAsIDAgfSwKLSAgICB7ICI8IiwgICAgICAgICAg WFhJRkxULCAwIH0sCi0gICAgeyAiPD0iLCAgICAgICAgIFhYSUZMRSwgMCB9LAotICAgIHsgIj0i LCAgICAgICAgICBYWElGQUUsIDAgfSwKLSAgICB7ICI9PSIsICAgICAgICAgWFhJRkFFLCBDTV9J TlYgfSwKLSAgICB7ICI+IiwgICAgICAgICAgWFhJRkdULCAwIH0sCi0gICAgeyAiPj0iLCAgICAg ICAgIFhYSUZHRSwgMCB9LAotICAgIHsgImFic29sdXRlIiwgICBYWElGQUIsIDAgfSwKLSAgICB7 ICJhbGFybSIsICAgICAgWFhJRkFMLCAwIH0sCi0gICAgeyAiYW5kIiwgICAgICAgIFhYSUZBTiwg MCB9LAotICAgIHsgImFza3RpbWVvdXQiLCBYWElGQVQsIDAgfSwKLSAgICB7ICJhdmFpbGFibGUi LCAgWFhJRkFWLCAwIH0sCi0gICAgeyAiYmFja2dyb3VuZCIsIFhYSUZCRywgMCB9LAotICAgIHsg ImMta2VybWl0IiwgICBYWElGQ0ssIDAgfSwKLSAgICB7ICJjb21tYW5kIiwgICAgWFhJRkNNLCAw IH0sCi0gICAgeyAiY291bnQiLCAgICAgIFhYSUZDTywgMCB9LAotICAgIHsgImRjbCIsICAgICAg ICBYWElGREMsIENNX0lOViB9LAotICAgIHsgImRlYnVnIiwgICAgICBYWElGREIsIDAgfSwKLSAg ICB7ICJkZWNsYXJlZCIsICAgWFhJRkRDLCAwIH0sCi0gICAgeyAiZGVmaW5lZCIsICAgIFhYSUZE RSwgMCB9LAotI2lmZGVmIENLX1RNUERJUgotICAgIHsgImRpcmVjdG9yeSIsICBYWElGREksIDAg fSwKLSNlbmRpZiAvKiBDS19UTVBESVIgKi8KLSAgICB7ICJlbXVsYXRpb24iLCAgWFhJRkVNLCAw IH0sCi0jaWZkZWYgQ09NTUVOVAotICAgIHsgImVvZiIsICAgICAgICBYWElGRU8sIDAgfSwKLSNl bmRpZiAvKiBDT01NRU5UICovCi0gICAgeyAiZXF1YWwiLCAgICAgIFhYSUZFUSwgMCB9LAotICAg IHsgImVycm9yIiwgICAgICBYWElGRkEsIENNX0lOViB9LAotICAgIHsgImV4aXN0IiwgICAgICBY WElGRVgsIDAgfSwKLSAgICB7ICJmYWlsdXJlIiwgICAgWFhJRkZBLCAwIH0sCi0gICAgeyAiZmFs c2UiLCAgICAgIFhYSUZOVCwgMCB9LAotICAgIHsgImZsYWciLCAgICAgICBYWElGRkwsIDAgfSwK LSNpZmRlZiBDS0ZMT0FUCi0gICAgeyAiZmxvYXQiLCAgICAgIFhYSUZGUCwgMCB9LAotI2VuZGlm IC8qIENLRkxPQVQgKi8KLSAgICB7ICJmb3JlZ3JvdW5kIiwgWFhJRkZHLCAwIH0sCi0jaWZkZWYg T1MyCi0gICAgeyAiZ3VpIiwgICAgICAgIFhYSUZHVSwgMCB9LAotI2Vsc2UKLSAgICB7ICJndWki LCAgICAgICAgWFhJRkdVLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBPUzIgKi8KLSNpZmRlZiBJS1NE Ci0gICAgeyAiaWtzZCIsICAgICAgIFhYSUZJSywgMCB9LAotI2Vsc2UKLSAgICB7ICJpa3NkIiwg ICAgICAgWFhJRklLLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBJS1NEICovCi0gICAgeyAiaW50ZWdl ciIsICAgIFhYSUZOVSwgQ01fSU5WIH0sCi0gICAgeyAiay05NSIsICAgICAgIFhYSUZLOSwgMCB9 LAotICAgIHsgImtiaGl0IiwgICAgICBYWElGS0IsIDAgfSwKLSNpZmRlZiBVTklYCi0gICAgeyAi a2VyYmFuZyIsICAgIFhYSUZLRywgMCB9LAotI2Vsc2UKLSAgICB7ICJrZXJiYW5nIiwgICAgWFhJ RktHLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBVTklYICovCi0gICAgeyAibGd0IiwgICAgICAgIFhY SUZMRywgMCB9LAotI2lmZGVmIFVOSVgKLSAgICB7ICJsaW5rIiwgICAgICAgWFhJRkxOLCAwIH0s Ci0jZW5kaWYgLyogVU5JWCAqLwotICAgIHsgImxsdCIsICAgICAgICBYWElGTEwsIDAgfSwKLSAg ICB7ICJsb2NhbCIsICAgICAgWFhJRkxPLCAwIH0sCi0gICAgeyAibWF0Y2giLCAgICAgIFhYSUZN QSwgMCB9LAotICAgIHsgIm1zLWtlcm1pdCIsICBYWElGTVMsIENNX0lOViB9LAotI2lmZGVmIFpG Q0RBVAotICAgIHsgIm5ld2VyIiwgICAgICBYWElGTkUsIDAgfSwKLSNlbmRpZiAvKiBaRkNEQVQg Ki8KLSAgICB7ICJub3QiLCAgICAgICAgWFhJRk5PLCAwIH0sCi0gICAgeyAibnVtZXJpYyIsICAg IFhYSUZOVSwgMCB9LAotICAgIHsgIm9rIiwgICAgICAgICBYWElGU1UsIENNX0lOViB9LAotICAg IHsgIm9wZW4iLCAgICAgICBYWElGT1AsIDAgfSwKLSAgICB7ICJvciIsICAgICAgICAgWFhJRk9S LCAwIH0sCi0gICAgeyAicXVpZXQiLCAgICAgIFhYSUZRVSwgMCB9LAotICAgIHsgInJlYWRhYmxl IiwgICBYWElGUkQsIDAgfSwKLSAgICB7ICJyZW1vdGUtb25seSIsWFhJRlJPLCAwIH0sCi0gICAg eyAic3RhcnRlZC1mcm9tLWRpYWxlciIsWFhJRlNELCBDTV9JTlYgfSwKLSAgICB7ICJzdWNjZXNz IiwgICAgWFhJRlNVLCAwIH0sCi0gICAgeyAidGFwaSIsICAgICAgIFhYSUZUQSwgMCB9LAotI2lm ZGVmIE9TMgotICAgIHsgInRlcm1pbmFsLW1hY3JvIiwgWFhJRlRNLCAwIH0sCi0jZWxzZQotICAg IHsgInRlcm1pbmFsLW1hY3JvIiwgWFhJRlRNLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBPUzIgKi8K LSAgICB7ICJ0cnVlIiwgICAgICAgWFhJRlRSLCAwIH0sCi0gICAgeyAidmVyc2lvbiIsICAgIFhY SUZWRSwgMCB9LAotICAgIHsgIndpbGQiLCAgICAgICBYWElGV0ksIDAgfSwKLSAgICB7ICJ3cml0 ZWFibGUiLCAgWFhJRldSLCAwIH0sCi0gICAgeyAifHwiLCAgICAgICAgIFhYSUZPUiwgMCB9LAot ICAgIHsgIiIsIDAsIDAgfQotfTsKLWludCBuaWYgPSAoc2l6ZW9mKGlmdGFiKSAvIHNpemVvZihz dHJ1Y3Qga2V5dGFiKSkgLSAxOwotCi1zdHJ1Y3Qga2V5dGFiIGlvdGFiW10gPSB7ICAgICAgICAg ICAgICAgLyogS2V5d29yZHMgZm9yIElGIE9QRU4gKi8KLSAgICB7ICIhcmVhZC1maWxlIiwgICAg ICBaUkZJTEUsIENNX0lOViB9LAotICAgIHsgIiF3cml0ZS1maWxlIiwgICAgIFpXRklMRSwgQ01f SU5WIH0sCi0gICAgeyAiYXBwZW5kLWZpbGUiLCAgICAgWldGSUxFLCBDTV9JTlYgfSwKLSAgICB7 ICJjb25uZWN0aW9uIiwgICAgICA4ODg4LCAgIDAgfSwKLSNpZmRlZiBDS0xPR0RJQUwKLSAgICB7 ICJjeC1sb2ciLCAgICAgICAgICA3Nzc3LCAgIDAgfSwKLSNlbmRpZiAvKiBDS0xPR0RJQUwgKi8K LSAgICB7ICJkZWJ1Zy1sb2ciLCAgICAgICBaREZJTEUsIDAgfSwKLSAgICB7ICJlcnJvciIsICAg ICAgICAgICA5OTk5LCAgIDAgfSwKLSAgICB7ICJwYWNrZXQtbG9nIiwgICAgICBaUEZJTEUsIDAg fSwKLSAgICB7ICJyZWFkLWZpbGUiLCAgICAgICBaUkZJTEUsIDAgfSwKLSAgICB7ICJzY3JlZW4i LCAgICAgICAgICBaU1RESU8sIDAgfSwKLSAgICB7ICJzZXNzaW9uLWxvZyIsICAgICBaU0ZJTEUs IDAgfSwKLSAgICB7ICJ0cmFuc2FjdGlvbi1sb2ciLCBaVEZJTEUsIDAgfSwKLSAgICB7ICJ3cml0 ZS1maWxlIiwgICAgICBaV0ZJTEUsIDAgfQotfTsKLWludCBuaW90ID0gKHNpemVvZihpb3RhYikg LyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLS8qIFZhcmlh YmxlcyBhbmQgcHJvdG90eXBlcyAqLwotCi1fUFJPVE9UWVAoc3RhdGljIGludCBkb3ltZGlyLChp bnQpKTsKLV9QUk9UT1RZUChzdGF0aWMgaW50IHJlbmFtZW9uZSwoY2hhciAqLGNoYXIgKiwKLQkJ CQlpbnQsaW50LGludCxpbnQsaW50LGludCxpbnQsaW50LGludCxpbnQsaW50KSk7Ci0KLSNpZmRl ZiBORVRDT05OCi1leHRlcm4gaW50IG5uZXRkaXI7ICAgICAgICAgICAgICAgICAgICAgLyogSG93 IG1hbnkgbmV0d29yayBkaXJlY3RvcmllcyAqLwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSNpZmRl ZiBDS19TRUNVUklUWQotX1BST1RPVFlQKGludCBja19rcmI0X2lzX2luc3RhbGxlZCwodm9pZCkp OwotX1BST1RPVFlQKGludCBja19rcmI1X2lzX2luc3RhbGxlZCwodm9pZCkpOwotX1BST1RPVFlQ KGludCBja19udGxtX2lzX2luc3RhbGxlZCwodm9pZCkpOwotX1BST1RPVFlQKGludCBja19zcnBf aXNfaW5zdGFsbGVkLCh2b2lkKSk7Ci1fUFJPVE9UWVAoaW50IGNrX3NzbGVheV9pc19pbnN0YWxs ZWQsKHZvaWQpKTsKLV9QUk9UT1RZUChpbnQgY2tfc3NoX2lzX2luc3RhbGxlZCwodm9pZCkpOwot X1BST1RPVFlQKGludCBja19jcnlwdF9pc19pbnN0YWxsZWQsKHZvaWQpKTsKLSNlbHNlCi0jZGVm aW5lIGNrX2tyYjRfaXNfaW5zdGFsbGVkKCkgKDApCi0jZGVmaW5lIGNrX2tyYjVfaXNfaW5zdGFs bGVkKCkgKDApCi0jZGVmaW5lIGNrX250bG1faXNfaW5zdGFsbGVkKCkgKDApCi0jZGVmaW5lIGNr X3NycF9pc19pbnN0YWxsZWQoKSAoMCkKLSNkZWZpbmUgY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgp ICgwKQotI2RlZmluZSBja19zc2hfaXNfaW5zdGFsbGVkKCkgKDApCi0jZGVmaW5lIGNrX2NyeXB0 X2lzX2luc3RhbGxlZCgpICgwKQotI2VuZGlmIC8qIENLX1NFQ1VSSVRZICovCi0KLSNkZWZpbmUg QVZfS1JCNCAgIDEKLSNkZWZpbmUgQVZfS1JCNSAgIDIKLSNkZWZpbmUgQVZfTlRMTSAgIDMKLSNk ZWZpbmUgQVZfU1JQICAgIDQKLSNkZWZpbmUgQVZfU1NMICAgIDUKLSNkZWZpbmUgQVZfQ1JZUFRP IDYKLSNkZWZpbmUgQVZfU1NIICAgIDcKLQotc3RydWN0IGtleXRhYiBhdmFpbHRhYltdID0geyAg ICAgICAgICAgICAvKiBBdmFpbGFibGUgYXV0aGVudGljYXRpb24gdHlwZXMgKi8KLSAgICB7ICJj cnlwdG8iLCAgICAgQVZfQ1JZUFRPLCBDTV9JTlYgfSwgLyogYW5kIGVuY3J5cHRpb24gKi8KLSAg ICB7ICJlbmNyeXB0aW9uIiwgQVZfQ1JZUFRPLCAwIH0sCi0gICAgeyAiazQiLCAgICAgICAgIEFW X0tSQjQsICAgQ01fSU5WIH0sCi0gICAgeyAiazUiLCAgICAgICAgIEFWX0tSQjUsICAgQ01fSU5W IH0sCi0gICAgeyAia2VyYmVyb3M0IiwgIEFWX0tSQjQsICAgMCB9LAotICAgIHsgImtlcmJlcm9z NSIsICBBVl9LUkI1LCAgIDAgfSwKLSAgICB7ICJrcmI0IiwgICAgICAgQVZfS1JCNCwgICBDTV9J TlYgfSwKLSAgICB7ICJrcmI1IiwgICAgICAgQVZfS1JCNSwgICBDTV9JTlYgfSwKLSAgICB7ICJu dGxtIiwgICAgICAgQVZfTlRMTSwgICAwIH0sCi0gICAgeyAic3JwIiwgICAgICAgIEFWX1NSUCwg ICAgMCB9LAotICAgIHsgInNzaCIsICAgICAgICBBVl9TU0gsICAgIDAgfSwKLSAgICB7ICJzc2wi LCAgICAgICAgQVZfU1NMLCAgICAwIH0sCi0gICAgeyAidGxzIiwgICAgICAgIEFWX1NTTCwgICAg MCB9LAotICAgIHsgIiIsICAgICAgICAgICAwLCAgICAgICAgIDAgfQotfTsKLWludCBhdmFpbHRh Ym4gPSBzaXplb2YoYXZhaWx0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKS0xOwotCi0jaWZuZGVm IE5PRElBTAotX1BST1RPVFlQKHN0YXRpYyBpbnQgZGRjdnQsIChjaGFyICosIEZJTEUgKiwgaW50 KSApOwotX1BST1RPVFlQKHN0YXRpYyBpbnQgZG5jdnQsIChpbnQsIGludCwgaW50LCBpbnQpICk7 Ci1fUFJPVE9UWVAoY2hhciAqIGdldGRuYW1lLCAodm9pZCkgKTsKLQotc3RhdGljIGludCBwYXJ0 aWFsICA9IDA7ICAgICAgICAgICAgICAgIC8qIEZvciBwYXJ0aWFsIGRpYWwgKi8KLXN0YXRpYyBj aGFyICpkc2NvcHkgPSBOVUxMOwotaW50IGRpYWx0eXBlID0gLTE7Ci0KLWNoYXIgKmRpYWxudW0g PSAoY2hhciAqKTA7ICAgICAgICAgICAgICAvKiBSZW1lbWJlciBESUFMIG51bWJlciBmb3IgUkVE SUFMICovCi1pbnQgZGlybGluZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRGlhbCBk aXJlY3RvcnkgbGluZSBudW1iZXIgKi8KLWV4dGVybiBjaGFyICogZGlhbGRpcltdOyAgICAgICAg ICAgICAgICAvKiBEaWFsIGRpcmVjdG9yeSBmaWxlIG5hbWVzICovCi1leHRlcm4gaW50IGRpYWxk cHk7ICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBESVNQTEFZIG9uL29mZiAqLwotZXh0ZXJu IGludCBuZGlhbGRpcjsgICAgICAgICAgICAgICAgICAgIC8qIEhvdyBtYW55IGRpYWwgZGlyZWN0 b3JpZXMgKi8KLWV4dGVybiBpbnQgbnRvbGxmcmVlOyAgICAgICAgICAgICAgICAgICAvKiBUb2xs LWZyZWUgY2FsbCBpbmZvICovCi1leHRlcm4gaW50IG5kaWFscHh4OyAgICAgICAgICAgICAgICAg ICAgLyogTGlzdCBvZiBQQlggZXhjaGFuZ2VzICovCi1leHRlcm4gY2hhciAqZGlhbHRmY1tdOwot Y2hhciAqIG1hdGNocHh4ID0gTlVMTDsgICAgICAgICAgICAgICAgIC8qIFBCWCBleGNoYW5nZSB0 aGF0IG1hdGNoZWQgKi8KLWV4dGVybiBpbnQgbmxvY2FsYWM7ICAgICAgICAgICAgICAgICAgICAv KiBMb2NhbCBhcmVhLWNvZGUgbGlzdCAqLwotZXh0ZXJuIGNoYXIgKiBkaWFsbGNhY1tdOwotZXh0 ZXJuIGludCB0dHRhcGk7Ci0jaWZkZWYgQ0tfVEFQSQotZXh0ZXJuIGludCB0YXBpY29udjsgICAg ICAgICAgICAgICAgICAgIC8qIFRBUEkgQ29udmVyc2lvbnMgKi8KLWV4dGVybiBpbnQgdGFwaXBh c3M7ICAgICAgICAgICAgICAgICAgICAvKiBUQVBJIFBhc3N0aHJvdWdoICovCi0jZW5kaWYgLyog Q0tfVEFQSSAqLwotZXh0ZXJuIGludCBkaWFsYXRtbzsKLWV4dGVybiBjaGFyICogZGlhbG5wciwg KiBkaWFsc2Z4OwotZXh0ZXJuIGNoYXIgKiBkaWFsaXhwLCAqIGRpYWxpeHMsICogZGlhbG1hYzsK LWV4dGVybiBjaGFyICogZGlhbGxkcCwgKiBkaWFsbGRzLCAqIGRpYWx0ZnA7Ci1leHRlcm4gY2hh ciAqIGRpYWxweGksICogZGlhbHB4bywgKiBkaWFsbGFjOwotZXh0ZXJuIGNoYXIgKiBkaWFsbGNw LCAqIGRpYWxsY3MsICogZGlhbGxjYzsKLWV4dGVybiBjaGFyICogZGlhbHB4eFtdOwotCi1leHRl cm4gaW50IGRpYWxjbmY7ICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBDT05GSVJNQVRJT04g Ki8KLWludCBkaWFsZmxkID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBESUFMIEZPUkNF LUxPTkctRElTVEFOQ0UgKi8KLWludCBkaWFsc3J0ID0gMTsgICAgICAgICAgICAgICAgICAgICAg ICAvKiBESUFMIFNPUlQgT04gKi8KLWludCBkaWFscnN0ciA9IDY7ICAgICAgICAgICAgICAgICAg ICAgICAvKiBESUFMIFJFU1RSSUNUSU9OICovCi1pbnQgZGlhbHRlc3QgPSAwOyAgICAgICAgICAg ICAgICAgICAgICAgLyogRElBTCBURVNUICovCi1pbnQgZGlhbGNvdW50ID0gMDsgICAgICAgICAg ICAgICAgICAgICAgLyogXHYoZGlhbGNvdW50KSAqLwotCi1leHRlcm4gaW50IGRpYWxzdGE7ICAg ICAgICAgICAgICAgICAgICAgLyogRGlhbCBzdGF0dXMgKi8KLWludCBkaWFscnRyID0gLTEsICAg ICAgICAgICAgICAgICAgICAgICAvKiBEaWFsIHJldHJpZXMgKi8KLSAgICBkaWFsaW50ID0gMTA7 ICAgICAgICAgICAgICAgICAgICAgICAvKiBEaWFsIHJldHJ5IGludGVydmFsICovCi1leHRlcm4g bG9uZyBkaWFsY2FwYXM7ICAgICAgICAgICAgICAgICAgLyogTW9kZW0gY2FwYWJpbGl0aWVzICov Ci1leHRlcm4gaW50IGRpYWxjdnQ7ICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBDT05WRVJU LURJUkVDVE9SWSAqLwotI2VuZGlmIC8qIE5PRElBTCAqLwotCi0jaWZuZGVmIE5PU1BMCi0jZGVm aW5lIElGQ09ORExFTiAyNTYKLWludCBpZmMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBJRiBjYXNlICovCi0gICAgbm90ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogRmxhZyBmb3IgSUYgTk9UICovCi0gICAgaWZhcmdzID0gMDsgICAgICAgICAgICAgICAgICAg ICAgICAgLyogQ291bnQgb2YgSUYgY29uZGl0aW9uIHdvcmRzICovCi1jaGFyIGlmY29uZFtJRkNP TkRMRU5dOyAgICAgICAgICAgICAgICAgLyogSUYgY29uZGl0aW9uIHRleHQgKi8KLWNoYXIgKmlm Y3A7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIElGIGNvbmRpdGlv biB0ZXh0ICovCi1leHRlcm4gaW50IHZhcmV2YWw7Ci0jaWZkZWYgRENNREJVRgotZXh0ZXJuIGlu dAotICppZmNtZCwgICpjb3VudCwgICppZnRlc3QsICppbnRpbWUsCi0gICAgKmlucGNhcywgKnRh a2VyciwgKm1lcnJvciwgKnhxdWlldCwgKnh2YXJldjsKLSNlbHNlCi1leHRlcm4gaW50IGlmY21k W107ICAgICAgICAgICAgICAgICAgICAgLyogTGFzdCBjb21tYW5kIHdhcyBJRiAqLwotZXh0ZXJu IGludCBpZnRlc3RbXTsgICAgICAgICAgICAgICAgICAgIC8qIExhc3QgSUYgd2FzIHRydWUgKi8K LWV4dGVybiBpbnQgY291bnRbXTsgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgSUYgQ09VTlQs IG9uZSBmb3IgZWFjaCBjbWRsdmwgKi8KLWV4dGVybiBpbnQgaW50aW1lW107ICAgICAgICAgICAg ICAgICAgICAvKiBEaXR0byBmb3Igb3RoZXIgc3RhY2thYmxlcy4uLiAqLwotZXh0ZXJuIGludCBp bnBjYXNbXTsKLWV4dGVybiBpbnQgdGFrZXJyW107Ci1leHRlcm4gaW50IG1lcnJvcltdOwotZXh0 ZXJuIGludCB4cXVpZXRbXTsKLWV4dGVybiBpbnQgeHZhcmV2W107Ci0jZW5kaWYgLyogRENNREJV RiAqLwotI2Vsc2UKLWV4dGVybiBpbnQgdGFrZXJyW107Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQot I2lmZGVmIERDTURCVUYKLWV4dGVybiBjaGFyICpsaW5lOyAgICAgICAgICAgICAgICAgICAgICAv KiBDaGFyYWN0ZXIgYnVmZmVyIGZvciBhbnl0aGluZyAqLwotZXh0ZXJuIGNoYXIgKnRtcGJ1ZjsK LSNlbHNlCi1leHRlcm4gY2hhciBsaW5lW10sIHRtcGJ1ZltdOwotI2VuZGlmIC8qIERDTURCVUYg Ki8KLWV4dGVybiBjaGFyICpscDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRv IGxpbmUgYnVmZmVyICovCi0KLWludCBjd2RmID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBDV0QgaGFzIGJlZW4gZG9uZSAqLwotCi0vKiBGbGFncyBmb3IgRU5BQkxFL0RJU0FCTEUg Ki8KLWV4dGVybiBpbnQgZW5fY3dkLCBlbl9jcHksIGVuX2RlbCwgZW5fZGlyLCBlbl9maW4sCi0g ICBlbl9nZXQsIGVuX2hvcywgZW5fcmVuLCBlbl9zZW4sIGVuX3NldCwgZW5fc3BhLCBlbl90eXAs IGVuX3dobywgZW5fYnllLAotICAgZW5fYXNnLCBlbl9xdWUsIGVuX3JldCwgZW5fbWFpLCBlbl9w cmksIGVuX21rZCwgZW5fcm1kLCBlbl94aXQsIGVuX2VuYTsKLQotZXh0ZXJuIEZJTEUgKnRmaWxl W107ICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgcG9pbnRlcnMgZm9yIFRBS0UgY29tbWFuZCAq LwotZXh0ZXJuIGNoYXIgKnRmbmFtW107ICAgICAgICAgICAgICAgICAgIC8qIE5hbWVzIG9mIFRB S0UgZmlsZXMgKi8KLWV4dGVybiBpbnQgdGZsaW5lW107ICAgICAgICAgICAgICAgICAgICAvKiBU QUtFLWZpbGUgbGluZSBudW1iZXIgKi8KLQotZXh0ZXJuIGludCBzdWNjZXNzOyAgICAgICAgICAg ICAgICAgICAgIC8qIENvbW1hbmQgc3VjY2Vzcy9mYWlsdXJlIGZsYWcgKi8KLWV4dGVybiBpbnQg Y21kbHZsOyAgICAgICAgICAgICAgICAgICAgICAvKiBDdXJyZW50IHBvc2l0aW9uIGluIGNvbW1h bmQgc3RhY2sgKi8KLQotI2lmbmRlZiBOT1NQTAotZXh0ZXJuIGludCBtYWNsdmw7ICAgICAgICAg ICAgICAgICAgICAgIC8qIE1hY3JvIHRvIGV4ZWN1dGUgKi8KLWV4dGVybiBjaGFyICptYWN4W107 ICAgICAgICAgICAgICAgICAgICAvKiBJbmRleCBvZiBjdXJyZW50IG1hY3JvICovCi1leHRlcm4g Y2hhciAqbXJ2YWxbXTsgICAgICAgICAgICAgICAgICAgLyogTWFjcm8gcmV0dXJuIHZhbHVlICov Ci1leHRlcm4gY2hhciAqbWFjcFtdOyAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBt YWNybyAqLwotZXh0ZXJuIGludCBtYWNhcmdjW107ICAgICAgICAgICAgICAgICAgIC8qIEFSR0Mg ZnJvbSBtYWNybyBpbnZvY2F0aW9uICovCi0KLSNpZmRlZiBDT01NRU5UCi1leHRlcm4gY2hhciAq bV9saW5lW107Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi1leHRlcm4gY2hhciAqbV9hcmdbTUFD TEVWRUxdW05BUkdTXTsgICAgLyogU3RhY2sgb2YgbWFjcm8gYXJndW1lbnRzICovCi1leHRlcm4g Y2hhciAqZ192YXJbXTsgICAgICAgICAgICAgICAgICAgLyogR2xvYmFsIHZhcmlhYmxlcyAlYSwg JWIsIGV0YyAqLwotCi0jaWZkZWYgRENNREJVRgotZXh0ZXJuIHN0cnVjdCBjbWRwdHIgKmNtZHN0 azsgICAgICAgICAgIC8qIFRoZSBjb21tYW5kIHN0YWNrIGl0c2VsZiAqLwotI2Vsc2UKLWV4dGVy biBzdHJ1Y3QgY21kcHRyIGNtZHN0a1tdOyAgICAgICAgICAvKiBUaGUgY29tbWFuZCBzdGFjayBp dHNlbGYgKi8KLSNlbmRpZiAvKiBEQ01EQlVGICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2Rl ZmluZSB4c3lzdGVtKHMpIHpzeXNjbWQocykKLQotc3RhdGljIGludCB4LCB5LCB6ID0gMDsKLXN0 YXRpYyBjaGFyICpzLCAqcDsKLQotI2lmZGVmIE9TMgotX1BST1RPVFlQKCBpbnQgb3Myc2V0dGl0 bGUsIChjaGFyICosIGludCkgKTsKLSNlbmRpZiAvKiBPUzIgKi8KLQotZXh0ZXJuIHN0cnVjdCBr ZXl0YWIgeWVzbm9bXSwgb25vZmZbXSwgZm50YWJbXTsKLWV4dGVybiBpbnQgbnllc25vLCBuZm50 YWI7Ci0KLSNpZm5kZWYgTk9TUEwKLQotLyogRG8gdGhlIEFTSywgQVNLUSwgR0VUT0ssIGFuZCBS RUFEIGNvbW1hbmRzICovCi0KLWludCBhc2t0aW1lZG91dCA9IDA7Ci0KLSNkZWZpbmUgQVNLX1BV UCAxCi0jZGVmaW5lIEFTS19UTU8gMgotI2RlZmluZSBBU0tfR1VJIDMKLSNkZWZpbmUgQVNLX1FV SSA0Ci0jZGVmaW5lIEFTS19ERUYgNQotI2RlZmluZSBBU0tfRUNIIDYKLQotc3RhdGljIHN0cnVj dCBrZXl0YWIgYXNrdGFiW10gPSB7Ci0gICAgeyAgIi9kZWZhdWx0IiwgQVNLX0RFRiwgQ01fQVJH IH0sCi0gICAgeyAgIi9ndWkiLCAgICAgQVNLX0dVSSwgICAgICAKLSNpZmRlZiBLVUkKLSAgICAg ICAgICAgMAotI2Vsc2UgLyogS1VJICovCi0gICAgICAgICAgIENNX0lOVgotI2VuZGlmIC8qIEtV SSAqLwotICAgIH0sCi0gICAgeyAiL3BvcHVwIiwgICAgQVNLX1BVUCwgICAKLSNpZmRlZiBPUzIK LSAgICAgICAgICAgMAotI2Vsc2UgLyogT1MyICovCi0gICAgICAgICAgIENNX0lOVgotI2VuZGlm IC8qIE9TMiAqLwotICAgIH0sCi0gICAgeyAiL3F1aWV0IiwgICAgQVNLX1FVSSwgMCB9LAotICAg IHsgIi90aW1lb3V0IiwgIEFTS19UTU8sIENNX0FSRyB9LAotICAgIHsgIiIsIDAsIDAgfQotfTsK LXN0YXRpYyBpbnQgbmFza3RhYiA9IHNpemVvZihhc2t0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFi KS0xOwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBhc2txdGFiW10gPSB7Ci0gICAgeyAiL2RlZmF1 bHQiLCAgQVNLX0RFRiwgQ01fQVJHIH0sCi0gICAgeyAiL2VjaG8iLCAgICAgQVNLX0VDSCwgQ01f QVJHIH0sCi0gICAgeyAiL2d1aSIsICAgICAgQVNLX0dVSSwgICAgICAKLSNpZmRlZiBLVUkKLSAg ICAgICAgICAgMAotI2Vsc2UgLyogS1VJICovCi0gICAgICAgICAgIENNX0lOVgotI2VuZGlmIC8q IEtVSSAqLwotICAgIH0sCi0gICAgeyAiL25vZWNobyIsICAgQVNLX1FVSSwgQ01fSU5WIH0sCi0g ICAgeyAiL3BvcHVwIiwgICAgQVNLX1BVUCwgICAKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgMAot I2Vsc2UgLyogT1MyICovCi0gICAgICAgICAgIENNX0lOVgotI2VuZGlmIC8qIE9TMiAqLwotICAg IH0sCi0gICAgeyAiL3F1aWV0IiwgICAgQVNLX1FVSSwgMCB9LAotICAgIHsgIi90aW1lb3V0Iiwg IEFTS19UTU8sIENNX0FSRyB9LAotICAgIHsgIiIsIDAsIDAgfQotfTsKLXN0YXRpYyBpbnQgbmFz a3F0YWIgPSBzaXplb2YoYXNrcXRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpLTE7Ci0KLWludAot ZG9hc2soY3gpIGludCBjeDsgewotICAgIGV4dGVybiBpbnQgYXNrdGltZXIsIHRpbWVsaW1pdDsK LSNpZmRlZiBDS19SRUNBTEwKLSAgICBleHRlcm4gaW50IG9uX3JlY2FsbDsKLSNlbmRpZiAvKiBD S19SRUNBTEwgKi8KLSAgICBpbnQgZWNob2NoYXIgPSAwOwotICAgIGludCBwb3B1cGZsZyA9IDA7 Ci0gICAgaW50IGd1aWZsZyA9IDA7Ci0gICAgaW50IG5vbXNnID0gMDsKLSAgICBpbnQgbXl0aW1l ciA9IDA7Ci0jaWZkZWYgQ0tfQVBDCi0gICAgZXh0ZXJuIGludCBhcGNhY3RpdmUsIGFwY3N0YXR1 czsKLSNlbmRpZiAvKiBDS19BUEMgKi8KLQotICAgIGNoYXIgZGZidWZbMTAyNF07CQkJLyogQnVm ZmVyIGZvciBkZWZhdWx0IGFuc3dlciAqLwotICAgIGNoYXIgKiBkZmFuc3dlciA9IE5VTEw7CQkv KiBQb2ludGVyIHRvIGl0ICovCi0KLSAgICBjaGFyIHZuYW1idWZbVk5BTUwrMV07ICAgICAgICAg ICAgICAvKiBCdWZmZXIgZm9yIHZhcmlhYmxlIG5hbWVzICovCi0gICAgY2hhciAqdm5wID0gTlVM TDsgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBzYW1lICovCi0gICAgCi0gICAgZGZi dWZbMF0gPSBOVUw7Ci0gICAgdm5hbWJ1ZlswXSA9IE5VTDsKLQotI2lmZGVmIENLX0FQQwotICAg IGlmICggYXBjYWN0aXZlICE9IEFQQ19JTkFDVElWRSAmJiAoYXBjc3RhdHVzICYgQVBDX05PSU5Q KSApIHsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tf QVBDICovCi0KLSAgICBteXRpbWVyID0gYXNrdGltZXI7ICAgICAgICAgICAgICAgICAvKiBJbmhl cml0IGdsb2JhbCBBU0sgdGltZXIgKi8KLSAgICBlY2hvc3RhcnMgPSAwOwkJCS8qIEZvciBBU0tR ICovCi0KLSAgICBpZiAoY3ggPT0gWFhBU0sgfHwgY3ggPT0gWFhBU0tRKSB7Ci0gICAgICAgIHN0 cnVjdCBGREIgc3csIGZsOwotICAgICAgICBpbnQgZ2V0dmFsOwotICAgICAgICBjaGFyIGM7Ci0g ICAgICAgIGlmIChjeCA9PSBYWEFTS1EpICAgICAgICAgICAgICAgLyogRG9uJ3QgbG9nIEFTS1Eg cmVzcG9uc2UgKi8KLSAgICAgICAgICBkZWJvayA9IDA7Ci0gICAgICAgIGNtZmRiaSgmc3csICAg ICAgICAgICAgICAgICAgICAgLyogRmlyc3QgRkRCIC0gY29tbWFuZCBzd2l0Y2hlcyAqLwotICAg ICAgICAgICAgICAgX0NNS0VZLCAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAg ICAgICAgICAiVmFyaWFibGUgbmFtZSBvciBzd2l0Y2giLAotICAgICAgICAgICAgICAgIiIsICAg ICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgICAgICIiLCAgICAg ICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotCSAgICAgICAoKGN4ID09 IFhYQVNLKSA/IG5hc2t0YWIgOiBuYXNrcXRhYiksIC8qIFRhYmxlIHNpemUgKi8KLSAgICAgICAg ICAgICAgIDQsICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjog NCA9IGNtc3dpICovCi0gICAgICAgICAgICAgICB4eHN0cmluZywgICAgICAgICAgICAgICAgLyog UHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotCSAgICAgICAoKGN4ID09IFhYQVNLKSA/IGFza3RhYiA6 IGFza3F0YWIpLCAvKiBLZXl3b3JkIHRhYmxlICovCi0gICAgICAgICAgICAgICAmZmwgICAgICAg ICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLwotICAgICAgICAgICAgICAg KTsKLSAgICAgICAgY21mZGJpKCZmbCwgICAgICAgICAgICAgICAgICAgICAvKiBBbnl0aGluZyB0 aGF0IGRvZXNuJ3QgbWF0Y2ggKi8KLSAgICAgICAgICAgICAgIF9DTUZMRCwgICAgICAgICAgICAg ICAgICAvKiBmY29kZSAqLwotICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAg IC8qIGhscG1zZyAqLwotICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgIC8q IGRlZmF1bHQgKi8KLSAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAvKiBh ZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAg ICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCi0gICAgICAgICAgICAgICAwLCAgICAgICAg ICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KLSAgICAgICAgICAgICAg IE5VTEwsCi0gICAgICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAgTlVMTAotICAgICAg ICAgICAgICAgKTsKLSAgICAgICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAgICAgICAgICAvKiBQ YXJzZSAwIG9yIG1vcmUgc3dpdGNoZXMgKi8KLSAgICAgICAgICAgIHggPSBjbWZkYigmc3cpOyAg ICAgICAgICAgICAvKiBQYXJzZSBzb21ldGhpbmcgKi8KLSAgICAgICAgICAgIGlmICh4IDwgMCkK LSAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgaWYgKGNtcmVzdWx0LmZjb2Rl ICE9IF9DTUtFWSkgLyogQnJlYWsgb3V0IGlmIG5vdCBhIHN3aXRjaCAqLwotICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgIGMgPSBjbWdicmsoKTsKLSAgICAgICAgICAgIGlmICgoZ2V0 dmFsID0gKGMgPT0gJzonIHx8IGMgPT0gJz0nKSkgJiYgIShjbWdrd2ZsZ3MoKSAmIENNX0FSRykp IHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtlIGFu IGFyZ3VtZW50XG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAg fQotICAgICAgICAgICAgaWYgKCFnZXR2YWwgJiYgKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgewot ICAgICAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50 XG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgfQotICAgICAg ICAgICAgc3dpdGNoIChjbXJlc3VsdC5ucmVzdWx0KSB7Ci0JICAgICAgY2FzZSBBU0tfUVVJOgot CQlub21zZyA9IDE7Ci0JCWlmIChjeCA9PSBYWEFTS1EpCi0JCSAgZWNob3N0YXJzID0gMDsKLQkJ YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgQVNLX1BVUDoKLSAgICAgICAgICAgICAgICBwb3B1 cGZsZyA9IDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0JICAgICAgY2FzZSBBU0tfR1VJOgot CQlndWlmbGcgPSAxOwotCQlicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBBU0tfVE1POiB7Ci0g ICAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbW51bSgic2Vjb25kcyIsIjEiLDEwLCZ4LHh4c3Ry aW5nKSkgPCAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAg ICAgICBpZiAoeCA8IDApCi0gICAgICAgICAgICAgICAgICAgIHggPSAwOwotICAgICAgICAgICAg ICAgICAgbXl0aW1lciA9IHg7Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICBjYXNlIEFTS19FQ0g6IHsKLSAgICAgICAgICAgICAgICAgIGlm ICgoeSA9IGNtZmxkKCJDaGFyYWN0ZXIgdG8gZWNobyIsIioiLCZzLHh4c3RyaW5nKSkgPCAwKQot ICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0JCSAgZWNob2NoYXIgPSAqczsKLSAgICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGNhc2Ug QVNLX0RFRjogewotICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gY21mbGQoIlRleHQgdG8gc3Vw cGx5IGlmIHJlcGx5IGlzIGVtcHR5IiwKLQkJCQkgIiIsJnMseHhzdHJpbmcpKSA8IDApCi0gICAg ICAgICAgICAgICAgICAgIHJldHVybih5KTsKLQkJICBja3N0cm5jcHkoZGZidWYscywxMDI0KTsK LQkJICBkZmFuc3dlciA9IGRmYnVmOwotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuKC0yKTsKLSAgICAgICAgICAg IH0KLSAgICAgICAgfQotICAgICAgICAvKiBIYXZlIHZhcmlhYmxlIG5hbWUsIG1ha2UgY29weS4g Ki8KLSAgICAgICAgY2tzdHJuY3B5KHZuYW1idWYsY21yZXN1bHQuc3Jlc3VsdCxWTkFNTCk7Ci0g ICAgICAgIHZucCA9IHZuYW1idWY7Ci0gICAgICAgIGlmICh2bmFtYnVmWzBdID09IENNRFEgJiYK LSAgICAgICAgICAgICh2bmFtYnVmWzFdID09ICclJyB8fCB2bmFtYnVmWzFdID09ICcmJykpCi0g ICAgICAgICAgdm5wKys7Ci0gICAgICAgIHkgPSAwOwotICAgICAgICBpZiAoKnZucCA9PSAnJScg fHwgKnZucCA9PSAnJicpIHsKLSAgICAgICAgICAgIGlmICgoeSA9IHBhcnNldmFyKHZucCwmeCwm eikpIDwgMCkKLQkgICAgICByZXR1cm4oeSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGN4 ICE9IFhYR09LICYmIGN4ICE9IFhYUkRCTCkgeyAvKiBHZXQgdmFyaWFibGUgbmFtZSAqLwotICAg ICAgICBpZiAoKHkgPSBjbWZsZCgiVmFyaWFibGUgbmFtZSIsIiIsJnMsTlVMTCkpIDwgMCkgewot ICAgICAgICAgICAgaWYgKHkgPT0gLTMpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9WYXJp YWJsZSBuYW1lIHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAg ICAgICAgICAgfSBlbHNlIHJldHVybih5KTsKLSAgICAgICAgfQotICAgICAgICBja3N0cm5jcHko dm5hbWJ1ZixzLFZOQU1MKTsgICAgIC8qIE1ha2UgYSBjb3B5LiAqLwotICAgICAgICB2bnAgPSB2 bmFtYnVmOwotICAgICAgICBpZiAodm5hbWJ1ZlswXSA9PSBDTURRICYmCi0gICAgICAgICAgICAo dm5hbWJ1ZlsxXSA9PSAnJScgfHwgdm5hbWJ1ZlsxXSA9PSAnJicpKQotICAgICAgICAgIHZucCsr OwotICAgICAgICB5ID0gMDsKLSAgICAgICAgaWYgKCp2bnAgPT0gJyUnIHx8ICp2bnAgPT0gJyYn KSB7Ci0gICAgICAgICAgICBpZiAoKHkgPSBwYXJzZXZhcih2bnAsJngsJnopKSA8IDApCi0gICAg ICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoY3ggPT0gWFhS RUEgfHwgY3ggPT0gWFhSREJMKSB7ICAvKiBSRUFEIG9yIFJFQURCTE9DSyBjb21tYW5kICovCi0g ICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgICAgICAgICAgLyogR2V0IGNvbmZpcm1hdGlv biAqLwotICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgaWYgKGNoa2ZuKFpSRklMRSkgPCAx KSB7ICAgICAgICAvKiBGaWxlIG9wZW4/ICovCi0gICAgICAgICAgICBwcmludGYoIj9SZWFkIGZp bGUgbm90IG9wZW5cbiIpOwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAg ICAgfQotICAgICAgICBpZiAoIShzID0gKGNoYXIgKilyZWFkYnVmKSkgeyAgICAgICAgICAgLyog V2hlcmUgdG8gcmVhZCBpbnRvLiAqLwotICAgICAgICAgICAgcHJpbnRmKCI/T29wcywgbm8gUkVB RCBidWZmZXIhXG4iKTsKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAg IH0KLSAgICAgICAgeSA9IHpzaW5sKFpSRklMRSwgcywgcmVhZGJsb2NrKTsgLyogUmVhZCBhIGxp bmUuICovCi0gICAgICAgIGRlYnVnKEYxMTEsInJlYWQgenNpbmwiLHMseSk7Ci0gICAgICAgIGlm ICh5IDwgMCkgeyAgICAgICAgICAgICAgICAgICAgLyogT24gRU9GIG9yIG90aGVyIGVycm9yLCAq LwotICAgICAgICAgICAgemNsb3NlKFpSRklMRSk7ICAgICAgICAgICAgIC8qIGNsb3NlIHRoZSBm aWxlLCAqLwotICAgICAgICAgICAgZGVsbWFjKHZucCwwKTsgICAgICAgICAgICAgIC8qIGRlbGV0 ZSB0aGUgdmFyaWFibGUsICovCi0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOyAgICAg ICAgLyogYW5kIHJldHVybiBmYWlsdXJlLiAqLwotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFJlYWQgd2FzIE9LLiAqLwotICAgICAgICAgICAgcmVhZHNpemUgPSAo aW50KSBzdHJsZW4ocyk7Ci0gICAgICAgICAgICBzdWNjZXNzID0gKGFkZG1hYyh2bnAscykgPCAw ID8gMCA6IDEpOyAvKiBEZWZpbmUgdmFyaWFibGUgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTEs InJlYWQgYWRkbWFjIix2bnAsc3VjY2Vzcyk7Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2Vzcyk7 ICAgICAgICAgICAgLyogUmV0dXJuIHN1Y2Nlc3MuICovCi0gICAgICAgIH0KLSAgICB9Ci0KLSAg ICAvKiBBU0ssIEFTS1EsIEdFVE9LLCBvciBHRVRDICovCi0KLSAgICBpZiAoY3ggPT0gWFhHT0sp IHsJCQkvKiBHRVRPSyBjYW4gdGFrZSBzd2l0Y2hlcyAqLwotICAgICAgICBzdHJ1Y3QgRkRCIHN3 LCBmbDsKLSAgICAgICAgaW50IGdldHZhbDsKLSAgICAgICAgY2hhciBjOwotICAgICAgICBjbWZk YmkoJnN3LCAgICAgICAgICAgICAgICAgICAgIC8qIEZpcnN0IEZEQiAtIGNvbW1hbmQgc3dpdGNo ZXMgKi8KLSAgICAgICAgICAgICAgIF9DTUtFWSwgICAgICAgICAgICAgICAgICAvKiBmY29kZSAq LwotICAgICAgICAgICAgICAgIlZhcmlhYmxlIG5hbWUgb3IgcXVlc3Rpb24gcHJvbXB0IiwKLSAg ICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAg ICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEg Ki8KLSAgICAgICAgICAgICAgIG5hc2t0YWIsICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1l cmljIGRhdGEgMTogdGJsIHNpemUgKi8KLSAgICAgICAgICAgICAgIDQsICAgICAgICAgICAgICAg ICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICovCi0gICAgICAgICAg ICAgICB4eHN0cmluZywgICAgICAgICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwot ICAgICAgICAgICAgICAgYXNrdGFiLCAgICAgICAgICAgICAgICAgIC8qIEtleXdvcmQgdGFibGUg Ki8KLSAgICAgICAgICAgICAgICZmbCAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRv IG5leHQgRkRCICovCi0gICAgICAgICAgICAgICApOwotICAgICAgICBjbWZkYmkoJmZsLCAgICAg ICAgICAgICAgICAgICAgIC8qIEFueXRoaW5nIHRoYXQgZG9lc24ndCBtYXRjaCAqLwotICAgICAg ICAgICAgICAgX0NNVFhULCAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAg ICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgLyogaGxwbXNnICovCi0gICAgICAgICAgICAg ICAiIiwgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAgICAg IiIsICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAg ICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEg Ki8KLSAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1l cmljIGRhdGEgMiAqLwotICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgIE5VTEws Ci0gICAgICAgICAgICAgICBOVUxMCi0gICAgICAgICAgICAgICApOwotICAgICAgICB3aGlsZSAo MSkgeyAgICAgICAgICAgICAgICAgICAgIC8qIFBhcnNlIDAgb3IgbW9yZSBzd2l0Y2hlcyAqLwot ICAgICAgICAgICAgeCA9IGNtZmRiKCZzdyk7ICAgICAgICAgICAgIC8qIFBhcnNlIHNvbWV0aGlu ZyAqLwotICAgICAgICAgICAgaWYgKHggPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0g ICAgICAgICAgICBpZiAoY21yZXN1bHQuZmNvZGUgIT0gX0NNS0VZKSAvKiBCcmVhayBvdXQgaWYg bm90IGEgc3dpdGNoICovCi0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgYyA9IGNt Z2JyaygpOwotICAgICAgICAgICAgaWYgKChnZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAnPScp KSAmJiAhKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgewotICAgICAgICAgICAgICAgIHByaW50Zigi P1RoaXMgc3dpdGNoIGRvZXMgbm90IHRha2UgYW4gYXJndW1lbnRcbiIpOwotICAgICAgICAgICAg ICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWdldHZhbCAm JiAoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/VGhp cyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOwotICAgICAgICAgICAgICAgIHJldHVy bigtOSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1 bHQpIHsKLSAgICAgICAgICAgICAgY2FzZSBBU0tfUFVQOgotICAgICAgICAgICAgICAgIHBvcHVw ZmxnID0gMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQkgICAgICBjYXNlIEFTS19HVUk6Ci0J CWd1aWZsZyA9IDE7Ci0JCWJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEFTS19UTU86IHsKLSAg ICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtbnVtKCJzZWNvbmRzIiwiMSIsMTAsJngseHhzdHJp bmcpKSA8IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgICAg ICAgIGlmICh4IDwgMCkKLSAgICAgICAgICAgICAgICAgICAgeCA9IDA7Ci0gICAgICAgICAgICAg ICAgICBteXRpbWVyID0geDsKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgIGNhc2UgQVNLX0RFRjogewotICAgICAgICAgICAgICAgICAgaWYg KCh5ID0gY21mbGQoIlRleHQgdG8gc3VwcGx5IGlmIHJlcGx5IGlzIGVtcHR5IiwKLQkJCQkgIiIs JnMseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKLQkJICBj a3N0cm5jcHkoZGZidWYscywxMDI0KTsKLQkJICBkZmFuc3dlciA9IGRmYnVmOwotICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLQkgICAgICBjYXNlIEFTS19RVUk6Ci0J CW5vbXNnID0gMTsKLQkJYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybigtMik7 Ci0gICAgICAgICAgICB9Ci0JfQotCXAgPSBjbXJlc3VsdC5zcmVzdWx0OwotICAgIH0gZWxzZQot ICAgICAgaWYgKCh5ID0gY210eHQoCi0iUHJvbXB0LFxuXAotIGVuY2xvc2UgaW4geyBicmFjZXMg fSBvciBcIiBxdW90ZXMgXCIgdG8gcHJlc2VydmUgbGVhZGluZyBhbmQgdHJhaWxpbmdcblwKLSBz cGFjZXMsIHByZWNlZGUgcXVlc3Rpb24gbWFyayB3aXRoIGJhY2tzbGFzaCAoXFwpLiIsCi0gICAg ICAgICAgICAgICAgICAgIiIsJnAseHhzdHJpbmcpKSA8IDApCi0gICAgICAgIHJldHVybih5KTsK LQotICAgIGlmICghcCkgcCA9ICIiOwotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0gICAg aWYgKHBvcHVwZmxnKSB7ICAgICAgICAgICAgICAgICAgICAgLyogUG9wdXAgcmVxdWVzdGVkICov Ci0gICAgICAgIGludCBsZW4gPSAtMTsKLSAgICAgICAgY2tzdHJuY3B5KHRtcGJ1ZixicnN0cmlw KHApLFRNUEJVRlNJWik7Ci0gICAgICAgIHAgPSB0bXBidWY7Ci0gICAgICAgIGlmIChjeCA9PSBY WEFTSyB8fCBjeCA9PSBYWEFTS1EpIHsKLSAgICAgICAgICAgIGlmIChjeCA9PSBYWEFTSykKLSAg ICAgICAgICAgICAgbGVuID0gcG9wdXBfcmVhZHRleHQodm1vZGUsTlVMTCxwLGxpbmUsTElOQlVG U0laLG15dGltZXIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBsZW4gPSBwb3B1 cF9yZWFkcGFzcyh2bW9kZSxOVUxMLHAsbGluZSxMSU5CVUZTSVosbXl0aW1lcik7Ci0gICAgICAg ICAgICBhc2t0aW1lZG91dCA9ICggbGVuIDwgMCAmJiBteXRpbWVyICk7Ci0gICAgICAgIH0gZWxz ZSBpZiAoY3ggPT0gWFhHT0spIHsKLQkgICAgcHJpbnRmKCI/U29ycnksIEdFVE9LIC9QT1BVUCBu b3QgaW1wbGVtZW50ZWQgeWV0XG4iKTsKLQkgICAgdGltZWxpbWl0ID0gMDsKLQkgICAgcmV0dXJu KC05KTsKLQl9Ci0gICAgICAgIGlmIChsZW4gPj0gMCkgewotCSAgICB5ID0gYWRkbWFjKHZucCwo Y2hhciAqKWxpbmUpOyAvKiBBZGQgaXQgdG8gdGhlIG1hY3JvIHRhYmxlLiAqLwotICAgICAgICB9 IGVsc2UgaWYgKCBhc2t0aW1lZG91dCAmJiBkZmFuc3dlciApIHsKLSAgICAgICAgICAgIHkgPSBh ZGRtYWModm5wLGRmYW5zd2VyKTsJICAgIC8qIEFkZCBpdCB0byB0aGUgbWFjcm8gdGFibGUuICov Ci0gICAgICAgICAgICBhc2t0aW1lZG91dCA9IDA7Ci0gICAgICAgICAgICBsZW4gPSAwOwotICAg ICAgICB9Ci0gICAgICAgIHRpbWVsaW1pdCA9IDA7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0g KChsZW4gPj0gMCkgJiYgKHkgPj0gMCkpICYmICFhc2t0aW1lZG91dCk7Ci0gICAgfQotI2lmZGVm IEtVSQotICAgIGlmIChndWlmbGcpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIEdVSSByZXF1 ZXN0ZWQgKi8KLSAgICAgICAgaW50IHJjLCBuOwotCWNoYXIgKiBzMTsKLQlzMSA9IHRtcGJ1ZjsK LQluID0gVE1QQlVGU0laLTE7Ci0JenpzdHJpbmcoYnJzdHJpcChwKSwmczEsJm4pOwotICAgICAg ICBwID0gdG1wYnVmOwotICAgICAgICBpZiAoY3ggPT0gWFhBU0sgfHwgY3ggPT0gWFhBU0tRKSB7 Ci0gICAgICAgICAgICByYyA9IGd1aV90eHRfZGlhbG9nKE5VTEwscCwoY3ggPT0gWFhBU0spLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLExJTkJVRlNJWixkZmFuc3dlcixt eXRpbWVyKTsKLSAgICAgICAgICAgIGFza3RpbWVkb3V0ID0gKHJjID09IC0xICYmIG15dGltZXIp OwotICAgICAgICAgICAgaWYgKHJjID09IDEpIHsKLSAgICAgICAgICAgICAgICB5ID0gYWRkbWFj KHZucCwoY2hhciAqKWxpbmUpOyAvKiBBZGQgaXQgdG8gdGhlIG1hY3JvIHRhYmxlLiAqLwotICAg ICAgICAgICAgfSBlbHNlIGlmICggYXNrdGltZWRvdXQgJiYgZGZhbnN3ZXIgKSB7Ci0gICAgICAg ICAgICAgICAgeSA9IGFkZG1hYyh2bnAsZGZhbnN3ZXIpOyAvKiBBZGQgZGVmYXVsdCB0byBtYWNy byB0YWJsZS4gKi8KLSAgICAgICAgICAgICAgICBhc2t0aW1lZG91dCA9IDA7Ci0gICAgICAgICAg ICAgICAgcmMgPSAxOwotICAgICAgICAgICAgfQotCSAgICB0aW1lbGltaXQgPSAwOwotCSAgICBy ZXR1cm4oc3VjY2VzcyA9IChyYyA9PSAxICYmICh5ID49IDApKSAmJiAhYXNrdGltZWRvdXQpOwot CX0gZWxzZSBpZiAoY3ggPT0gWFhHT0spIHsKLQkgICAgaW50IHg7Ci0JICAgIHggPSBsb29rdXAo eWVzbm8sZGZhbnN3ZXIsbnllc25vLE5VTEwpOwotCSAgICBpZiAoeCAhPSAxKSB4ID0gMjsKLQkg ICAgcmMgPSB1cV9vayhOVUxMLCBwLCAzLCBOVUxMLCB4KTsKLQkgICAgcmV0dXJuKHN1Y2Nlc3Mg PSAocmMgPT0gMSkpOwotCX0KLSAgICB9Ci0jZW5kaWYgLyogS1VJICovCi0jZW5kaWYgLyogT1My ICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0gICAgY29uY2IoKGNoYXIpZXNjYXBlKTsgICAg ICAgICAgICAgICAgLyogRW50ZXIgQ0JSRUFLIG1vZGUgKi8KLSAgICBjbXNhdnAocHNhdmUsUFJP TVBUTCk7ICAgICAgICAgICAgICAvKiBTYXZlIG9sZCBwcm9tcHQgKi8KLSAgICBjbXNldHAoYnJz dHJpcChwKSk7ICAgICAgICAgICAgICAgICAvKiBNYWtlIG5ldyBwcm9tcHQgKi8KLQotcmVwcm9t cHQ6Ci0gICAgaWYgKGN4ID09IFhYQVNLUSkgeyAgICAgICAgICAgICAgICAgLyogRm9yIEFTS1Es ICovCi0gICAgICAgIGNtaW5pKDApOyAgICAgICAgICAgICAgICAgICAgICAgLyogbm8tZWNobyBt b2RlLiAqLwotCWlmIChlY2hvY2hhcikKLQkgIGVjaG9zdGFycyA9IGVjaG9jaGFyOwotICAgIH0g ZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBvdGhlcnMsIHJlZ3VsYXIg ZWNob2luZy4gKi8KLSAgICAgICAgY21pbmkoY2t4ZWNoKTsKLQllY2hvc3RhcnMgPSAwOwotICAg IH0KLSAgICBhc2tmbGFnID0gMTsKLSAgICB4ID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBUaGlzIG1lYW5zIHRvIHJlcGFyc2UuICovCi0gICAgY21mbGdzID0gMDsKLSAgICBp ZiAocGZsYWcpCi0gICAgICBwcm9tcHQoeHhzdHJpbmcpOyAgICAgICAgICAgICAgICAgLyogSXNz dWUgcHJvbXB0LiAqLwotCi0gICAgYXNrdGltZWRvdXQgPSAwOyAgICAgICAgICAgICAgICAgICAg LyogSGFuZGxlIHRpbWVkIHJlc3BvbnNlcy4gKi8KLSAgICB0aW1lbGltaXQgPSBteXRpbWVyOwot cmVwYXJzZToKLSAgICBjbXJlcygpOwotICAgIGlmIChjeCA9PSBYWEdPSykgeyAgICAgICAgICAg ICAgICAgIC8qIEdFVE9LICovCi0jaWZkZWYgQ0tfUkVDQUxMCi0gICAgICAgIG9uX3JlY2FsbCA9 IDA7Ci0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0gICAgICAgIGFza2ZsYWcgPSAwOwotCS8qIEdF VE9LIHVzZXMga2V5d29yZCB0YWJsZSAqLwotICAgICAgICB4ID0gY21rZXkoeWVzbm8sbnllc25v LCIiLGRmYW5zd2VyLHh4c3RyaW5nKTsKLSAgICAgICAgaWYgKHggPCAwKSB7ICAgICAgICAgICAg ICAgICAgICAvKiBQYXJzZSBlcnJvciAqLwotICAgICAgICAgICAgaWYgKHggPT0gLTEwKSB7Ci0J CWNoYXIgKiBkczsKLQkJZHMgPSBkZmFuc3dlciA/IGRmYW5zd2VyIDogIk5vIjsKLQkJaWYgKCFu b21zZykKLQkJICBwcmludGYoIj9UaW1lZCBvdXQsIGFzc3VtaW5nIFwiJXNcIiIsZHMpOwotCQlw cmludGYoIlxuIik7Ci0gICAgICAgICAgICAgICAgYXNrdGltZWRvdXQgPSAxOwotCQl4ID0gbG9v a3VwKHllc25vLGRzLG55ZXNubyxOVUxMKTsKLQkJaWYgKHggIT0gMSkgeCA9IDA7Ci0gICAgICAg ICAgICAgICAgZ290byBnb2tkb25lOwotICAgICAgICAgICAgfSBlbHNlIGlmICh4ID09IC0zKSB7 ICAgICAgIC8qIE5vIGFuc3dlcj8gKi8KLSAgICAgICAgICAgICAgICBwcmludGYoIlBsZWFzZSBy ZXNwb25kIFllcyBvciBOb1xuIik7IC8qIE1ha2UgdGhlbSBhbnN3ZXIgKi8KLSAgICAgICAgICAg ICAgICBjbWluaShja3hlY2gpOwotICAgICAgICAgICAgICAgIGdvdG8gcmVwcm9tcHQ7Ci0gICAg ICAgICAgICB9IGVsc2UgaWYgKHggPT0gLTEpIHsKLSAgICAgICAgICAgICAgICBnb3RvIHJlcGFy c2U7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgZ290byByZXByb21wdDsKLSAg ICAgICAgfQotICAgICAgICBpZiAoY21jZm0oKSA8IDApICAgICAgICAgICAgICAgIC8qIEdldCBj b25maXJtYXRpb24gKi8KLSAgICAgICAgICBnb3RvIHJlcGFyc2U7Ci0gIGdva2RvbmU6Ci0gICAg ICAgIGFza2ZsYWcgPSAwOwotICAgICAgICBjbXNldHAocHNhdmUpOyAgICAgICAgICAgICAgICAg IC8qIFJlc3RvcmUgcHJvbXB0ICovCi0jaWZkZWYgVk1TCi0gICAgICAgIGlmIChjbWRsdmwgPiAw KSAgICAgICAgICAgICAgICAgLyogSW4gVk1TIGFuZCBub3QgYXQgdG9wIGxldmVsLCAqLwotICAg ICAgICAgIGNvbnJlcygpOyAgICAgICAgICAgICAgICAgICAgIC8qICByZXN0b3JlIGNvbnNvbGUg YWdhaW4uICovCi0jZW5kaWYgLyogVk1TICovCi0gICAgICAgIHRpbWVsaW1pdCA9IDA7Ci0gICAg ICAgIHJldHVybih4KTsgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIHN1Y2Nlc3Mgb3Ig ZmFpbHVyZSAqLwotICAgIH0gZWxzZSBpZiAoY3ggPT0gWFhHRVRDICAgICAgICAgICAgIC8qIEdF VEMgKi8KLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgIHx8IGN4ID09IFhYR0VUSyAgICAgICAg ICAvKiBvciBHRVRLRVlDT0RFICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAp IHsgICAgICAgICAgICAgICAgICAgICAgLyogR0VUQyAqLwotICAgICAgICBjaGFyIHRtcFsxNl07 Ci0gICAgICAgIGNvbmJpbigoY2hhcillc2NhcGUpOyAgICAgICAgICAgLyogUHV0IGtleWJvYXJk IGluIHJhdyBtb2RlICovCi0jaWZuZGVmIE5PU0VUS0VZCi0jaWZkZWYgT1MyCi0gICAgICAgIGlm IChjeCA9PSBYWEdFVEspIHsgICAgICAgICAgICAgLyogR0VUS0VZQ09ERSAqLwotICAgICAgICAg ICAgZXh0ZXJuIGludCBvczJna3M7Ci0gICAgICAgICAgICBpbnQgdDsKLSAgICAgICAgICAgIHQg PSBvczJna3M7ICAgICAgICAgICAgICAgICAvKiBUdXJuIG9mZiBrdmVyYiByZWNvZ25pdGlvbiAq LwotICAgICAgICAgICAgb3MyZ2tzID0gMDsKLSAgICAgICAgICAgIHggPSBjb25na3ModGltZWxp bWl0KTsgICAgICAvKiBSZWFkIGEga2V5IGV2ZW50LCBibG9ja2luZyAqLwotICAgICAgICAgICAg b3MyZ2tzID0gdDsgICAgICAgICAgICAgICAgIC8qIFB1dCBiYWNrIGt2ZXJiIHJlY29nbml0aW9u ICovCi0gICAgICAgIH0gZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR0VUQyAqLwot I2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PU0VUS0VZICovCi0gICAgICAgIHsKLSAgICAg ICAgICAgIGRlYnVnKEYxMDEsIkdFVEMgY29uY2hrIiwiIixjb25jaGsoKSk7Ci0gICAgICAgICAg ICB4ID0gY29uaW5jKHRpbWVsaW1pdCk7ICAgICAgLyogSnVzdCByZWFkIG9uZSBjaGFyYWN0ZXIg Ki8KLSAgICAgICAgICAgIGRlYnVnKEYxMDEsIkdFVEMgY29uaW5jIiwiIix4KTsKLSAgICAgICAg fQotICAgICAgICBjb25jYigoY2hhcillc2NhcGUpOyAgICAgICAgICAgIC8qIFB1dCBrZXlib2Fy ZCBiYWNrIGluIGNicmVhayBtb2RlICovCi0gICAgICAgIGlmICh4ID4gLTEpIHsKLSAgICAgICAg ICAgIGlmICh4Y21kc3JjID09IDApCi0gICAgICAgICAgICAgIHByaW50ZigiXHJcbiIpOwotI2lm ZGVmIE9TMgotICAgICAgICAgICAgaWYgKGN4ID09IFhYR0VUSykgeyAgICAgICAgIC8qIEdFVEtF WUNPREUgKi8KLSAgICAgICAgICAgICAgICBzcHJpbnRmKHRtcCwiJWQiLHgpOyAgICAvKiBTQUZF ICovCi0gICAgICAgICAgICB9IGVsc2UgewotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAg ICAgIHRtcFswXSA9IChjaGFyKSAoeCAmIDB4ZmYpOwotICAgICAgICAgICAgICAgIHRtcFsxXSA9 IE5VTDsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAg ICAgICAgIHkgPSBhZGRtYWModm5wLHRtcCk7ICAgICAgICAvKiBBZGQgaXQgdG8gdGhlIG1hY3Jv IHRhYmxlLiAqLwotICAgICAgICAgICAgZGVidWcoRjExMSwiZ2V0Yy9nZXRrIGFkZG1hYyIsdm5w LHkpOwotICAgICAgICB9IGVsc2UgeSA9IC0xOwotICAgICAgICBjbXNldHAocHNhdmUpOyAgICAg ICAgICAgICAgICAgIC8qIFJlc3RvcmUgb2xkIHByb21wdC4gKi8KLSAgICAgICAgaWYgKHggPCAt MSkgewotICAgICAgICAgICAgYXNrdGltZWRvdXQgPSAxOwotICAgICAgICAgICAgaWYgKCFxdWll dCAmJiAhbm9tc2cpCi0gICAgICAgICAgICAgIHByaW50ZigiP1RpbWVkIG91dCIpOwotCSAgICBw cmludGYoIlxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgdGltZWxpbWl0ID0gMDsKLSAgICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSAoKHkgPCAwID8gMCA6IDEpICYmIChhc2t0aW1lZG91dCA9PSAwKSkp OwotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFTSyBvciBBU0tR ICovCi0jaWZkZWYgQ0tfUkVDQUxMCi0gICAgICAgIG9uX3JlY2FsbCA9IDA7CQkJLyogRG9uJ3Qg cHV0IHJlc3BvbnNlIGluIHJlY2FsbCBidWYgKi8KLSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLQlh c2tmbGFnID0gMTsJCQkvKiBBU0tbUV0gYWx3YXlzIGdvZXMgdG8gdGVybWluYWwgKi8KLSAgICAg ICAgeSA9IGNtZGdxdW8oKTsgICAgICAgICAgICAgICAgICAvKiBHZXQgY3VycmVudCBxdW90aW5n ICovCi0gICAgICAgIGNtZHNxdW8oMCk7ICAgICAgICAgICAgICAgICAgICAgLyogVHVybiBvZmYg cXVvdGluZyAqLwotICAgICAgICB3aGlsZSAoeCA9PSAtMSkgeyAgICAgICAgICAgICAgIC8qIFBy b21wdCB0aWxsIHRoZXkgYW5zd2VyICovCi0gICAgICAgICAgICB4ID0gY210eHQoIlBsZWFzZSBy ZXNwb25kLiIsZGZhbnN3ZXIsJnMsTlVMTCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJBU0sg Y210eHQiLHMseCk7Ci0gICAgICAgICAgICBjbXJlcygpOwotICAgICAgICB9Ci0gICAgICAgIGNt ZHNxdW8oeSk7ICAgICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSBwcmV2aW91cyBxdW90aW5n ICovCi0gICAgICAgIGlmIChjeCA9PSBYWEFTS1EpICAgICAgICAgICAgICAgLyogQVNLUSBtdXN0 IGVjaG8gQ1JMRiBoZXJlICovCi0gICAgICAgICAgcHJpbnRmKCJcclxuIik7Ci0JaWYgKHggPT0g LTEwICYmIGRmYW5zd2VyKSB7CS8qIERvbid0IGZhaWwgb24gdGltZW91dCBpZiAqLwotCSAgICBz ID0gZGZhbnN3ZXI7CQkvKiBhIGRlZmF1bHQgd2FzIHNwZWNpZmllZCAqLwotCSAgICBhc2t0aW1l ZG91dCA9IDA7CQkvKiBhbmQgZG9uJ3QgZmFpbCAqLwotCSAgICB4ID0gMDsKLQl9Ci0gICAgICAg IGlmICh4IDwgMCkgeyAgICAgICAgICAgICAgICAgICAgLyogSWYgY210eHQgcGFyc2UgZXJyb3Is ICovCi0gICAgICAgICAgICBjbXNldHAocHNhdmUpOyAgICAgICAgICAgICAgLyogcmVzdG9yZSBv cmlnaW5hbCBwcm9tcHQgKi8KLSNpZmRlZiBWTVMKLSAgICAgICAgICAgIGlmIChjbWRsdmwgPiAw KSAgICAgICAgICAgICAvKiBJbiBWTVMgYW5kIG5vdCBhdCB0b3AgbGV2ZWwsICovCi0gICAgICAg ICAgICAgIGNvbnJlcygpOyAgICAgICAgICAgICAgICAgLyogIHJlc3RvcmUgY29uc29sZSBhZ2Fp bi4gKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSAgICAgICAgICAgIGlmICh4ID09IC0xMCkgewkJLyog VGltZWQgb3V0IHdpdGggbm8gcmVzcG9uc2UgKi8KLQkJaWYgKCFub21zZykKLQkJICBwcmludGYo Ij9UaW1lZCBvdXQiKTsKLQkJcHJpbnRmKCJcbiIpOwotICAgICAgICAgICAgICAgIGFza3RpbWVk b3V0ID0gMTsKLQkJaWYgKGRmYW5zd2VyKQkJLyogU3VwcGx5IGRlZmF1bHQgYW5zd2VyIGlmIGFu eSAqLwotCQkgIHMgPSBkZmFuc3dlcjsKLSAgICAgICAgICAgICAgICBzdWNjZXNzID0geCA9IDA7 CS8qICh3YXMgInggPSAtOTsiKSAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGltZWxp bWl0ID0gMDsKLSAgICAgICAgICAgIHJldHVybih4KTsgICAgICAgICAgICAgICAgICAvKiBhbmQg cmV0dXJuIGNtdHh0J3MgZXJyb3IgY29kZS4gKi8KLSAgICAgICAgfQotICAgICAgICBpZiAoIXMg fHwgKnMgPT0gTlVMKSB7CQkvKiBJZiB1c2VyIHR5cGVkIGEgYmFyZSBDUiwgKi8KLSAgICAgICAg ICAgIGNtc2V0cChwc2F2ZSk7ICAgICAgICAgICAgICAvKiBSZXN0b3JlIG9sZCBwcm9tcHQsICov Ci0gICAgICAgICAgICBkZWxtYWModm5wLDApOyAgICAgICAgICAgICAgLyogZGVsZXRlIHZhcmlh YmxlIGlmIGl0IGV4aXN0cywgKi8KLSNpZmRlZiBWTVMKLSAgICAgICAgICAgIGlmIChjbWRsdmwg PiAwKSAgICAgICAgICAgICAvKiBJbiBWTVMgYW5kIG5vdCBhdCB0b3AgbGV2ZWwsICovCi0gICAg ICAgICAgICAgIGNvbnJlcygpOyAgICAgICAgICAgICAgICAgLyogIHJlc3RvcmUgY29uc29sZSBh Z2Fpbi4gKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSAgICAgICAgICAgIHRpbWVsaW1pdCA9IDA7Ci0g ICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOyAgICAgICAgLyogYW5kIHJldHVybi4gKi8K LSAgICAgICAgfQotICAgICAgICB5ID0gYWRkbWFjKHZucCxzKTsgICAgICAgICAgICAgIC8qIEFk ZCBpdCB0byB0aGUgbWFjcm8gdGFibGUuICovCi0gICAgICAgIGRlYnVnKEYxMTEsImFzayBhZGRt YWMiLHZucCx5KTsKLSAgICAgICAgY21zZXRwKHBzYXZlKTsgICAgICAgICAgICAgICAgICAvKiBS ZXN0b3JlIG9sZCBwcm9tcHQuICovCi0jaWZkZWYgVk1TCi0gICAgICAgIGlmIChjbWRsdmwgPiAw KSAgICAgICAgICAgICAgICAgLyogSW4gVk1TIGFuZCBub3QgYXQgdG9wIGxldmVsLCAqLwotICAg ICAgICAgIGNvbnJlcygpOyAgICAgICAgICAgICAgICAgICAgIC8qICByZXN0b3JlIGNvbnNvbGUg YWdhaW4uICovCi0jZW5kaWYgLyogVk1TICovCi0gICAgICAgIHRpbWVsaW1pdCA9IDA7Ci0gICAg ICAgIHJldHVybihzdWNjZXNzID0gKHkgPCAwID8gMCA6IDEpICYmIChhc2t0aW1lZG91dCA9PSAw KSk7Ci0gICAgfQotfQotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5kZWYgTk9TUEwKLWludAot ZG9pbmNyKGN4KSBpbnQgY3g7IHsgICAgICAgICAgICAgICAgICAgIC8qIElOQ1JFTUVOVCwgREVD UkVNRU5UICovCi0gICAgY2hhciB2bmFtYnVmW1ZOQU1MKzFdOyAgICAgICAgICAgICAgLyogQnVm ZmVyIGZvciB2YXJpYWJsZSBuYW1lcyAqLwotICAgIGludCBldmFsID0gMDsKLSAgICBDS19PRkZf VCB4OwotICAgIGV2YWwgPSAoY3ggPT0gWFhfREVDUiB8fCBjeCA9PSBYWF9JTkNSKTsKLQotICAg IGlmICgoeSA9IGNtZmxkKCJWYXJpYWJsZSBuYW1lIiwiIiwmcywgZXZhbCA/IHh4c3RyaW5nIDog TlVMTCkpIDwgMCkgewotICAgICAgICBpZiAoeSA9PSAtMykgewotICAgICAgICAgICAgcHJpbnRm KCI/VmFyaWFibGUgbmFtZSByZXF1aXJlZFxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwot ICAgICAgICB9IGVsc2UgcmV0dXJuKHkpOwotICAgIH0KLSAgICBja3N0cm5jcHkodm5hbWJ1Zixz LFZOQU1MKTsKLSAgICBpZiAoKHkgPSBjbW51bXcoImJ5IGFtb3VudCIsIjEiLDEwLCZ4LHh4c3Ry aW5nKSkgPCAwKQotICAgICAgcmV0dXJuKHkpOwotICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkK LSAgICAgIHJldHVybih5KTsKLQotICAgIHogPSAoY3ggPT0gWFhfSU5DUiB8fCBjeCA9PSBYWElO QykgPyAxIDogMDsgLyogSW5jcmVtZW50IG9yIGRlY3JlbWVudD8gKi8KLQotICAgIGlmIChpbmN2 YXIodm5hbWJ1Zix4LHopIDwgMCkgewotICAgICAgICBwcmludGYoIj9WYXJpYWJsZSAlcyBub3Qg ZGVmaW5lZCBvciBub3QgbnVtZXJpY1xuIix2bmFtYnVmKTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSAwKTsKLSAgICB9Ci0gICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLX0KLQotLyogVXNlZCBi eSBkb3VuZGVmKCkgKi8KLXN0YXRpYyBpbnQKLXh4dW5kZWYocyx2ZXJib3NlLHNpbXVsYXRlKSBj aGFyICogczsgaW50IHZlcmJvc2UsIHNpbXVsYXRlOyB7Ci0gICAgaW50IHJjID0gMDsKLSAgICBp ZiAoIXMpIHJldHVybigwKTsKLSAgICBpZiAoKnMgPT0gQ01EUSAmJiAqKHMrMSkgPT0gJyUnKSB7 Ci0gICAgICAgIGNoYXIgYyA9ICoocysyKSwgKiBwID0gTlVMTDsKLSAgICAgICAgaWYgKGMgPj0g JzAnICYmIGMgPD0gJzknKSB7Ci0gICAgICAgICAgICBpZiAobWFjbHZsIDwgMCkKLSAgICAgICAg ICAgICAgcCA9IGdfdmFyW2NdOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBwID0g bV9hcmdbbWFjbHZsXVtjIC0gJzAnXTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlm IChpc3VwcGVyKGMpKSBjICs9ICgnYSctJ0EnKTsKLSAgICAgICAgICAgIGlmIChjID49ICdhJyAm JiBjIDw9ICd6JykKLSAgICAgICAgICAgICAgcCA9IGdfdmFyW2NdOwotICAgICAgICB9Ci0gICAg ICAgIGlmICghcCkgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgaWYgKHZlcmJvc2UpCi0gICAgICBw cmludGYoIiAlcyAiLHMpOwotICAgIGlmIChzaW11bGF0ZSkgewotICAgICAgICBwcmludGYoIihT RUxFQ1RFRClcbiIpOwotICAgIH0gZWxzZSBpZiAoKHggPSBkZWxtYWMocywxKSkgPiAtMSkgeyAv KiBGdWxsIG5hbWUgcmVxdWlyZWQgKi8KLSAgICAgICAgcmMgPSAxOwotICAgICAgICBpZiAodmVy Ym9zZSkgcHJpbnRmKCIoT0spXG4iKTsKLSAgICB9IGVsc2UgaWYgKHZlcmJvc2UpCi0gICAgICBw cmludGYoIihGQUlMRUQpXG4iKTsKLSAgICByZXR1cm4ocmMpOwotfQotCi0vKiBEbyB0aGUgKF8p REVGSU5FLCAoXylBU1NJR04sIGFuZCBVTkRFRklORSBjb21tYW5kcyAqLwotCi0jZGVmaW5lIFVO RF9NQVQgMQotI2RlZmluZSBVTkRfVlJCIDIKLSNkZWZpbmUgVU5EX0VYQyAzCi0jZGVmaW5lIFVO RF9TSU0gMwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiB1bmRlZnN3aVtdID0gewotICAgIHsgIi9s aXN0IiwgICAgIFVORF9WUkIsIDAgfSwKLSNpZmRlZiBDT01NRU5UCi0gICAgeyAiL2V4Y2VwdCIs ICAgVU5EX0VYQywgQ01fQVJHIH0sCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIHsgIi9tYXRj aGluZyIsIFVORF9NQVQsIDAgfSwKLSAgICB7ICIvc2ltdWxhdGUiLCBVTkRfU0lNLCAwIH0sCi0g ICAgeyAiL3ZlcmJvc2UiLCAgVU5EX1ZSQiwgQ01fSU5WIH0KLX07Ci1zdGF0aWMgaW50IG51bmRl ZnN3aSA9IHNpemVvZih1bmRlZnN3aSkgLyBzaXplb2Yoc3RydWN0IGtleXRhYik7Ci0KLSNkZWZp bmUgVU5ERUZNQVggNjQKLXN0YXRpYyBjaGFyICoqIHVuZGVmbGlzdCA9IE5VTEw7Ci1pbnQKLWRv dW5kZWYoY3gpIGludCBjeDsgeyAgICAgICAgICAgICAgICAgICAvKiBVTkRFRiwgX1VOREVGICov Ci0gICAgaW50IGksIGosIG4sIHJjID0gMCwgYXJyYXltc2cgPSAwOwotICAgIGludCBkb21hdGNo ID0gMCwgdmVyYm9zZSA9IDAsIGVycm9ycyA9IDAsIHNpbXVsYXRlID0gMCwgZmxhZyA9IDA7Ci0g ICAgY2hhciAqdm5wLCB2bmJ1Zls0XTsKLSNpZmRlZiBDT01NRU5UCi0gICAgY2hhciAqZXhjZXB0 ID0gTlVMTDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgc3RydWN0IEZEQiBzdywgZmw7Ci0g ICAgaW50IGdldHZhbDsKLSAgICBjaGFyIGM7Ci0KLSAgICBpZiAoIXVuZGVmbGlzdCkgeyAgICAg ICAgICAgICAgICAgICAvKiBBbGxvY2F0ZSBsaXN0IGlmIG5lY2Vzc2FyeSAqLwotICAgICAgICB1 bmRlZmxpc3QgPSAoY2hhciAqKiltYWxsb2MoVU5ERUZNQVggKiBzaXplb2YoY2hhciAqKSk7Ci0g ICAgICAgIGlmICghdW5kZWZsaXN0KSB7Ci0gICAgICAgICAgICBwcmludGYoIj9NZW1vcnkgYWxs b2NhdGlvbiBmYWlsdXJlXG4iKTsKLSAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0K LSAgICAgICAgZm9yIChpID0gMDsgaSA8IFVOREVGTUFYOyBpKyspCi0gICAgICAgICAgdW5kZWZs aXN0W2ldID0gTlVMTDsKLSAgICB9Ci0gICAgY21mZGJpKCZzdywgICAgICAgICAgICAgICAgICAg ICAgICAgLyogRmlyc3QgRkRCIC0gY29tbWFuZCBzd2l0Y2hlcyAqLwotICAgICAgICAgICBfQ01L RVksICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgICJWYXJpYWJs ZSBuYW1lIG9yIHN3aXRjaCIsCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAgICAgIG51bmRlZnN3aSwgICAgICAgICAg ICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCi0gICAgICAgICAg IDQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQg PSBjbXN3aSAqLwotICAgICAgICAgICB4eHN0cmluZywgICAgICAgICAgICAgICAgICAgIC8qIFBy b2Nlc3NpbmcgZnVuY3Rpb24gKi8KLSAgICAgICAgICAgdW5kZWZzd2ksICAgICAgICAgICAgICAg ICAgICAvKiBLZXl3b3JkIHRhYmxlICovCi0gICAgICAgICAgICZmbCAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLwotICAgICAgICAgICApOwotICAgIGNt ZmRiaSgmZmwsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFueXRoaW5nIHRoYXQgZG9lc24n dCBtYXRjaCAqLwotICAgICAgICAgICBfQ01GTEQsICAgICAgICAgICAgICAgICAgICAgIC8qIGZj b2RlICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaGxwbXNn ICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAq LwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmlu ZyBkYXRhICovCi0gICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRk dGwgbnVtZXJpYyBkYXRhIDEgKi8KLSAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLwotICAgICAgICAgICAoY3ggPT0gWFhVTkRF RikgPyBOVUxMIDogeHhzdHJpbmcsCi0gICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgIE5VTEwK LSAgICAgICAgICAgKTsKLSAgICB3aGlsZSAoMSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBQYXJzZSAwIG9yIG1vcmUgc3dpdGNoZXMgKi8KLSAgICAgICAgeCA9IGNtZmRiKCZzdyk7ICAg ICAgICAgICAgICAgICAvKiBQYXJzZSBzb21ldGhpbmcgKi8KLSAgICAgICAgaWYgKHggPCAwKQot ICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgaWYgKGNtcmVzdWx0LmZjb2RlICE9IF9DTUtF WSkgICAvKiBCcmVhayBvdXQgaWYgbm90IGEgc3dpdGNoICovCi0gICAgICAgICAgYnJlYWs7Ci0g ICAgICAgIGMgPSBjbWdicmsoKTsKLSAgICAgICAgaWYgKChnZXR2YWwgPSAoYyA9PSAnOicgfHwg YyA9PSAnPScpKSAmJiAhKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgewotICAgICAgICAgICAgcHJp bnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBhbiBhcmd1bWVudFxuIik7Ci0gICAgICAg ICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAoY21yZXN1bHQubnJl c3VsdCkgewotICAgICAgICAgIGNhc2UgVU5EX01BVDogZG9tYXRjaCAgPSAxOyBicmVhazsKLSAg ICAgICAgICBjYXNlIFVORF9TSU06IHNpbXVsYXRlID0gMTsgLyogZmFsbCB0aHJ1IG9uIHB1cnBv c2UgKi8KLSAgICAgICAgICBjYXNlIFVORF9WUkI6IHZlcmJvc2UgID0gMTsgYnJlYWs7Ci0KLSNp ZmRlZiBDT01NRU5UCi0gICAgICAgICAgY2FzZSBVTkRfRVhDOgotICAgICAgICAgICAgaWYgKCFn ZXR2YWwpIGJyZWFrOwotICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQoIlBhdHRlcm4iLCIiLCZz LHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKLSAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCI/UGF0dGVybiByZXF1aXJlZFxuIik7Ci0gICAgICAgICAg ICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZ290 byB4Z2V0eDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1ha2VzdHIoJmV4Y2VwdCxjbXJl c3VsdC5zcmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIENPTU1FTlQgKi8K LQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4oLTIpOwotICAgICAgICB9 Ci0gICAgfQotICAgIG4gPSAwOwotICAgIG1ha2VzdHIoJih1bmRlZmxpc3RbbisrXSksY21yZXN1 bHQuc3Jlc3VsdCk7Ci0gICAgZm9yIChpID0gMTsgaSA8IFVOREVGTUFYOyBpKyspIHsKLSAgICAg ICAgeCA9IGNtZmxkKCJNYWNybyBvciB2YXJpYWJsZSBuYW1lIiwiIiwmcywKLSAgICAgICAgICAg ICAgICAgICgoY3ggPT0gWFhVTkRFRikgPyBOVUxMIDogeHhzdHJpbmcpCi0gICAgICAgICAgICAg ICAgICApOwotICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAgICAgICAgaWYgKCh5ID0gY21j Zm0oKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICBicmVhazsK LSAgICAgICAgfSBlbHNlIGlmICh5IDwgMCkgewotICAgICAgICAgICAgcmV0dXJuKHkpOwotICAg ICAgICB9Ci0gICAgICAgIG1ha2VzdHIoJih1bmRlZmxpc3RbbisrXSkscyk7Ci0gICAgfQotICAg IC8qIE5vdyB3ZSBoYXZlIGEgbGlzdCBvZiBuIHZhcmlhYmxlcyBvciBwYXR0ZXJucyB0byB1bmRl ZmluZSAqLwotCi0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICBmbGFnID0g MDsKLSAgICAgICAgaWYgKCEodm5wID0gdW5kZWZsaXN0W2ldKSkKLSAgICAgICAgICBjb250aW51 ZTsKLSAgICAgICAgaWYgKHZucFswXSA9PSBDTURRICYmICh2bnBbMV0gPT0gJyUnIHx8IHZucFsx XSA9PSAnJicpKSB7Ci0gICAgICAgICAgICBmbGFnKys7Ci0gICAgICAgICAgICB2bnArKzsKLSAg ICAgICAgfQotICAgICAgICBpZiAoIWRvbWF0Y2gpIHsgICAgICAgICAgICAgICAgIC8qIFBhdHRl cm4gbWF0Y2ggbm90IHJlcXVlc3RlZCAqLwotICAgICAgICAgICAgaWYgKGZsYWcpIHsKLSAgICAg ICAgICAgICAgICBpZiAoKHkgPSBwYXJzZXZhcih2bnAsJngsJnopKSA8IDApIHsKLSAgICAgICAg ICAgICAgICAgICAgdm5wLS07Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKSBwcmlu dGYoIiAlcy4uLmVycm9yXG4iLHZucCk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB2bnAtLTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIHggPSB4eHVuZGVmKHZucCx2ZXJib3NlLHNpbXVsYXRlKTsKLSAgICAgICAg ICAgIGlmICh4ID4gLTEpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXggJiYgIXNpbXVsYXRlKSBl cnJvcnMrKzsKLSAgICAgICAgICAgICAgICByYyArPSB4OwotICAgICAgICAgICAgfQotICAgICAg ICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgLyogUGF0dGVybiBtYXRjaCByZXF1 ZXN0ZWQgKi8KLQotICAgICAgICBpZiAoIWZsYWcpIHsgICAgICAgICAgICAgICAgICAgIC8qIEl0 J3MgYSBtYWNybyAqLwotICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG5tYWM7IGorKykgewot ICAgICAgICAgICAgICAgIGlmIChja21hdGNoKHZucCxtYWN0YWJbal0ua3dkLDAsMSkpIHsKLSAg ICAgICAgICAgICAgICAgICAgeCA9IHh4dW5kZWYobWFjdGFiW2pdLmt3ZCx2ZXJib3NlLHNpbXVs YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHggPiAtMSkgewotICAgICAgICAgICAgICAg ICAgICAgICAgcmMgKz0geDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgheCkgZXJyb3Jz Kys7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFzaW11 bGF0ZSkKLSAgICAgICAgICAgICAgICAgICAgICBqLS07ICAgICAgICAgICAgICAvKiBCZWNhdXNl IG1hY3RhYiBzaGlmdGVkIHVwICovCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot ICAgICAgICB9IGVsc2UgaWYgKHZucFswXSA9PSAnJScpIHsgICAgIC8qIEl0J3MgYSBcJXggdmFy aWFibGUgKi8KLSAgICAgICAgICAgIHZuYnVmWzBdID0gQ01EUTsKLSAgICAgICAgICAgIHZuYnVm WzFdID0gJyUnOwotICAgICAgICAgICAgdm5idWZbM10gPSBOVUw7Ci0gICAgICAgICAgICBmb3Ig KGogPSAnMCc7IGogPD0gJ3onOyBqKyspIHsgLyogMC4uOSBhLi56ICovCi0gICAgICAgICAgICAg ICAgdm5idWZbMl0gPSBqOwotICAgICAgICAgICAgICAgIGlmIChja21hdGNoKHZucCwmdm5idWZb MV0sMCwxKSkgewotICAgICAgICAgICAgICAgICAgICB4ID0geHh1bmRlZih2bmJ1Zix2ZXJib3Nl LHNpbXVsYXRlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHggPiAtMSkgewotICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKCF4KSBlcnJvcnMrKzsKLSAgICAgICAgICAgICAgICAgICAgICAg IHJjICs9IHg7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgaWYgKGogPT0gJzknKSBqID0gKGludCknYScgLSAxOyAvKiA5IC0+IGEgKi8K LSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICh2bnBbMF0gPT0gJyYnKSB7Ci0gICAg ICAgICAgICBpZiAoIWFycmF5bXNnICYmICFxdWlldCkgewotICAgICAgICAgICAgICAgIHByaW50 ZigiP1VOREVGSU5FIC9NQVRDSCBjYW4ndCBiZSB1c2VkIHdpdGggYXJyYXlzLlxuIik7Ci0gICAg ICAgICAgICAgICAgcHJpbnRmKCIoVHlwZSBIRUxQIEFSUkFZIHRvIHNlZSBvdGhlciBtZXRob2Rz LilcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXJyYXltc2crKzsKLSAgICAgICAg ICAgIGVycm9ycysrOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICh2ZXJib3NlKQotICAgICAg cHJpbnRmKCJ1bmRlZmluZWQ6ICVkLCBlcnJvcnM6ICVkXG4iLHJjLGVycm9ycyk7Ci0KLSAgICBm b3IgKGkgPSAwOyBpIDwgVU5ERUZNQVg7IGkrKykgeyAgICAvKiBDaGVjayB0aGVtIGFsbCAqLwot ICAgICAgICBpZiAodW5kZWZsaXN0W2ldKSB7ICAgICAgICAgICAgIC8qIGluIGNhc2Ugd2Ugd2Vy ZSBpbnRlcnJ1cHRlZCAqLwotICAgICAgICAgICAgZnJlZSh1bmRlZmxpc3RbaV0pOyAgICAgICAg IC8qIHByZXZpb3VzbHkuLi4gKi8KLSAgICAgICAgICAgIHVuZGVmbGlzdFtpXSA9IE5VTEw7Ci0g ICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuKHN1Y2Nlc3MgPSAoZXJyb3JzID09IDApID8gMSA6 IDApOwotfQotCi1pbnQKLWRvZGVmKGN4KSBpbnQgY3g7IHsKLSAgICBleHRlcm4gaW50IHh4ZG90 OwotICAgIGV4dGVybiBjaGFyIHBwdm5hbWJ1ZltdOwotICAgIGludCBkb2V2YWwgPSAwOwotICAg IGNoYXIgdm5hbWJ1ZltWTkFNTCsxXTsgICAgICAgICAgICAgIC8qIEJ1ZmZlciBmb3IgdmFyaWFi bGUgbmFtZXMgKi8KLSAgICBjaGFyICp2bnA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQ b2ludGVyIHRvIHNhbWUgKi8KLSAgICBpbnQgaywgbXlkb3Q7Ci0gICAgbXlkb3QgPSB4eGRvdDsg ICAgICAgICAgICAgICAgICAgICAgLyogQ29weSAqLwotICAgIHh4ZG90ID0gMDsgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGFuZCByZXNldCAqLwotLyoKLSAgSW4gY2FzZSB3ZSBnb3QgaGVy ZSBmcm9tIGEgY29tbWFuZCB0aGF0IGJlZ2lucyBsaWtlICIuXCVhIiwgY21rZXkoKSBoYXMKLSAg YWxyZWFkeSBldmFsdWF0ZWQgXCVhLCBidXQgd2UgZG9uJ3Qgd2FudCB0aGF0LCBzbyB3ZSByZXRy aWV2ZSB0aGUgdmFyaWFibGUKLSAgbmFtZSBmcm9tIGEgc3BlY2lhbCBwcmUtZXZhbHVhdGlvbiBi dWZmZXIgaW4gdGhlIGNvbW1hbmQgbW9kdWxlLCBhbmQgd2UKLSAgdW5kbyB0aGUgInVuZ2V0IHdv cmQiIHRoYXQgd291bGQgYmUgZG9uZSBiZWNhdXNlIG9mIHRoZSB0b2tlbiwgYmVjYXVzZSBpZgot ICB0aGUgdmFyaWFibGUgd2FzIGRlZmluZWQsIGl0IHdpbGwgdW5nZXQgaXRzIHZhbHVlIHJhdGhl ciB0aGFuIGl0cyBuYW1lLgotKi8KLSAgICBzID0gTlVMTDsKLQotICAgIGlmIChteWRvdCAmJiBw cHZuYW1idWZbMF0gPT0gJy4nICYmIHBwdm5hbWJ1ZlsxXSkgewotICAgICAgICBzID0gcHB2bmFt YnVmKzE7Ci0gICAgICAgIHVudW5ndygpOwotICAgIH0KLSAgICBpZiAoIXMpIHsKLSAgICAgICAg aWYgKGN4ID09IFhYREZYIHx8IGN4ID09IFhYQVNYKQotICAgICAgICAgIC8qIEV2YWx1YXRlIHZh cmlhYmxlIG5hbWUgKi8KLSAgICAgICAgICB5ID0gY21mbGQoIk1hY3JvIG9yIHZhcmlhYmxlIG5h bWUiLCIiLCZzLHh4c3RyaW5nKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIC8qIERvbid0IGV2 YWx1YXRlIHRoZSB2YXJpYWJsZSBuYW1lICovCi0gICAgICAgICAgeSA9IGNtZmxkKCJNYWNybyBv ciB2YXJpYWJsZSBuYW1lIiwiIiwmcyxOVUxMKTsKLSAgICAgICAgaWYgKHkgPCAwKSB7Ci0gICAg ICAgICAgICBpZiAoeSA9PSAtMykgewotICAgICAgICAgICAgICAgIHByaW50ZigiP1ZhcmlhYmxl IG5hbWUgcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAg ICAgICB9IGVsc2UgcmV0dXJuKHkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGsgPSBzdHJsZW4o cyk7Ci0gICAgaWYgKGsgPiBWTkFNTCkgewotICAgICAgICBwcmludGYoIj9OYW1lIHRvbyBsb25n OiBcIiVzXCJcbiIscyk7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfQotICAgIGNrc3RybmNw eSh2bmFtYnVmLHMsVk5BTUwpOwotICAgIHZuYW1idWZbVk5BTUxdID0gTlVMOwotICAgIHZucCA9 IHZuYW1idWY7Ci0gICAgaWYgKHZuYW1idWZbMF0gPT0gQ01EUSAmJiAodm5hbWJ1ZlsxXSA9PSAn JScgfHwgdm5hbWJ1ZlsxXSA9PSAnJicpKSB2bnArKzsKLSAgICBpZiAoKnZucCA9PSAnJScgfHwg KnZucCA9PSAnJicpIHsKLSAgICAgICAgaWYgKCh5ID0gcGFyc2V2YXIodm5wLCZ4LCZ6KSkgPCAw KSByZXR1cm4oeSk7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICBpZiAoY3ggPT0gWFhVTkRFRikg eyAgICAgICAgICAgIC8qIFVuZGVmaW5lICovCi0gICAgICAgICAgICBpZiAoKHkgPSBjbXR4dCgi VGV4dCB0byBiZSBpZ25vcmVkIiwiIiwmcyxOVUxMKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAg ICAgICBkZWxtYWModm5wLDApOwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAg ICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgZGVidWcoRjEwMSwiZG9kZWYg cGFyc2V2YXIgeCIsIiIseCk7Ci0gICAgICAgIGlmIChteWRvdCkgewotICAgICAgICAgICAgaWYg KChkb2V2YWwgPSBjbWtleShhc2d0YWIsbmFzZ3RhYiwib3BlcmF0b3IiLCI9IixOVUxMKSkgPCAw KQotICAgICAgICAgICAgICByZXR1cm4oZG9ldmFsKTsKLSAgICAgICAgICAgIGlmIChkb2V2YWwg PiAwKSAgICAgICAgICAgICAvKiBUeXBlIG9mIGFzc2lnbm1lbnQgKi8KLSAgICAgICAgICAgICAg Y3ggPSBYWEFTUzsKLSAgICAgICAgfQotICAgICAgICBpZiAoeSA9PSAxKSB7ICAgICAgICAgICAg ICAgICAgIC8qIFNpbXBsZSB2YXJpYWJsZSAqLwotICAgICAgICAgICAgaWYgKCh5ID0gY210eHQo IkRlZmluaXRpb24gb2YgdmFyaWFibGUiLCIiLCZzLE5VTEwpKSA8IDApCi0gICAgICAgICAgICAg IHJldHVybih5KTsKLSAgICAgICAgICAgIHMgPSBicnN0cmlwKHMpOwotICAgICAgICAgICAgZGVi dWcoRjExMCwieHhkZWYgdmFyIG5hbWUiLHZucCwwKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAs Inh4ZGVmIHZhciBkZWYiLHMsMCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoeSA9PSAyKSB7ICAgICAg ICAgICAgLyogQXJyYXkgZWxlbWVudCAqLwotICAgICAgICAgICAgaWYgKCh5ID0gYXJyYXluYW0o dm5wLCZ4LCZ6KSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgICAgICBpZiAoeCA9PSA5Nikgewot ICAgICAgICAgICAgICAgIHByaW50ZigiP0FyZ3VtZW50IHZlY3RvciBhcnJheSBpcyByZWFkLW9u bHlcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgICAgICBpZiAoY2hrYXJyYXkoeCx6KSA8IDApIHJldHVybigtMik7Ci0gICAgICAgICAgICBp ZiAoKHkgPSBjbXR4dCgiRGVmaW5pdGlvbiBvZiBhcnJheSBlbGVtZW50IiwiIiwmcyxOVUxMKSkg PCAwKQotICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ4 eGRlZiBhcnJheSByZWYiLHZucCwwKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsInh4ZGVmIGFy cmF5IGRlZiIscywwKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIE1hY3JvICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICBpZiAoY3ggPT0g WFhVTkRFRikgeyAgICAgICAgICAgIC8qIFVuZGVmaW5lICovCi0gICAgICAgICAgICBpZiAoKHkg PSBjbXR4dCgiVGV4dCB0byBiZSBpZ25vcmVkIiwiIiwmcyxOVUxMKSkgPCAwKSByZXR1cm4oeSk7 Ci0gICAgICAgICAgICBkZWxtYWModm5wLDApOwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3Mg PSAxKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgaWYgKG15ZG90 KSB7Ci0gICAgICAgICAgICBpZiAoKGRvZXZhbCA9IGNta2V5KGFzZ3RhYixuYXNndGFiLCJvcGVy YXRvciIsIj0iLE5VTEwpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybihkb2V2YWwpOwotICAg ICAgICAgICAgaWYgKGRvZXZhbCA+IDApCi0gICAgICAgICAgICAgIGN4ID0gWFhBU1M7Ci0gICAg ICAgIH0KLSAgICAgICAgaWYgKCh5ID0gY210eHQoIkRlZmluaXRpb24gb2YgbWFjcm8iLCIiLCZz LE5VTEwpKSA8IDApIHJldHVybih5KTsKLSNpZmRlZiBERUJVRwotICAgICAgICBpZiAoZGVibG9n KSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ4eGRlZiBtYWNybyBuYW1lIix2bnAsMCk7Ci0g ICAgICAgICAgICBkZWJ1ZyhGMDEwLCJ4eGRlZiBtYWNybyBkZWYiLHMsMCk7Ci0gICAgICAgIH0K LSNlbmRpZiAvKiBERUJVRyAqLwotICAgICAgICBzID0gYnJzdHJpcChzKTsKLSAgICB9Ci0gICAg aWYgKCpzID09IE5VTCkgeyAgICAgICAgICAgICAgICAgICAgLyogTm8gYXJnIGdpdmVuLCB1bmRl ZmluZSAqLwotICAgICAgICBkZWxtYWModm5wLDEpOyAgICAgICAgICAgICAgICAgIC8qIHNpbGVu dGx5Li4uICovCi0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7ICAgICAgICAgICAgLyogZXZl biBpZiBpdCBkb2Vzbid0IGV4aXN0Li4uICovCi0gICAgfQotICAgIC8qIERlZmluaW5nIGEgbmV3 IG1hY3JvIG9yIHZhcmlhYmxlICovCi0KLSAgICBpZiAoY3ggPT0gWFhBU1MgfHwgY3ggPT0gWFhB U1gpIHsgICAvKiBBU1NJR04gcmF0aGVyIHRoYW4gREVGSU5FPyAqLwotICAgICAgICBpbnQgdDsK LSAgICAgICAgdCA9IExJTkJVRlNJWi0xOwotICAgICAgICBscCA9IGxpbmU7ICAgICAgICAgICAg ICAgICAgICAgIC8qIElmIHNvLCBleHBhbmQgaXRzIHZhbHVlIG5vdyAqLwotICAgICAgICB6enN0 cmluZyhzLCZscCwmdCk7Ci0gICAgICAgIHMgPSBsaW5lOwotICAgIH0KLSAgICBpZiAoZG9ldmFs ID09IDIpIHsgICAgICAgICAgICAgICAgICAvKiBBcml0aG1ldGljIGV2YWx1YXRpb24gd2FudGVk IHRvbz8gKi8KLSAgICAgICAgY2tzdHJuY3B5KGxpbmUsZXZhbGEocyksTElOQlVGU0laKTsKLSAg ICAgICAgbGluZVtMSU5CVUZTSVpdID0gTlVMOwotICAgIH0KLSAgICAvKiBkZWJ1ZyhGMTExLCJj YWxsaW5nIGFkZG1hYyIscywoaW50KXN0cmxlbihzKSk7ICovCi0KLSAgICB5ID0gYWRkbWFjKHZu cCxzKTsgICAgICAgICAgICAgICAgICAvKiBBZGQgaXQgdG8gdGhlIGFwcHJvcHJpYXRlIHRhYmxl LiAqLwotICAgIGlmICh5IDwgMCkgewotICAgICAgICBwcmludGYoIj8lcyBmYWlsZWRcbiIsKGN4 ID09IFhYQVNTIHx8IGN4ID09IFhYQVNYKSA/Ci0gICAgICAgICAgICAgICAiQVNTSUdOIiA6ICJE RUZJTkUiKTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICB9IGVsc2UgaWYgKGN4 ID09IFhYQVNYIHx8IGN4ID09IFhYREZYKSAvKiBGb3IgX0FTRyBvciBfREVGLCAqLwotICAgICAg cmV0dXJuKDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbid0IGNoYW5nZSBzdWNj ZXNzIHZhcmlhYmxlICovCi0gICAgZWxzZQotICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLX0K LSNlbmRpZiAvKiBOT1NQTCAqLwotCi0KLSNpZm5kZWYgTk9ESUFMCi0vKgotICAgTCBVIEQgSSBB IEwgIC0tICBMb29rdXAgdXAgZGlhbGluZyBkaXJlY3RvcnkgZW50cnkuCi0KLSAgIENhbGwgd2l0 aCBzdHJpbmcgdG8gbG9vayB1cCBhbmQgZmlsZSBkZXNjcmlwdG9yIG9mIG9wZW4gZGlhbGluZyBk aXJlY3RvcnkKLSAgIGZpbGUuICBPbiBzdWNjZXNzLCByZXR1cm5zIG51bWJlciBvZiBtYXRjaGVz IGZvdW5kLCB3aXRoIG51bWJlcnMgc3RvcmVkCi0gICBpbiBhbiBhcnJheSBhY2Nlc3NpYmxlIHZp YSBnZXRkbnVtKCkuCi0qLwotc3RhdGljIGNoYXIgKmRuX3BbTUFYRE5VTVMgKyAxXTsgICAgICAg IC8qIERpYWwgTnVtYmVyIHBvaW50ZXJzICovCi1zdGF0aWMgY2hhciAqZG5fcDJbTUFYRE5VTVMg KyAxXTsgICAgICAgLyogQ29udmVydGVkIGRpYWwgbnVtYmVyIHBvaW50ZXJzICovCi1zdGF0aWMg aW50IGRuX3hbTUFYRE5VTVMgKyAxXTsgICAgICAgICAgLyogVHlwZSBvZiBjYWxsICovCi1zdGF0 aWMgaW50IGRuY291bnQgPSAwOwotY2hhciAqIGRfbmFtZSA9IE5VTEw7ICAgICAgICAgICAgICAg ICAgIC8qIERpYWwgbmFtZSBwb2ludGVyICovCi0KLWNoYXIgKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBHZXQgZGlhbCBkaXJlY3RvcnkgZW50cnkgbmFtZSAqLwotZ2V0ZG5h bWUoKSB7Ci0gICAgcmV0dXJuKGRfbmFtZSA/IGRfbmFtZSA6ICIiKTsKLX0KLQotY2hhciAqCi1n ZXRkbnVtKG4pIGludCBuOyB7ICAgICAgICAgICAgICAgICAgICAgLyogR2V0IGRpYWwgbnVtYmVy IG4gZnJvbSBkaXJlY3RvcnkgKi8KLSAgICBpZiAobiA8IDAgfHwgbiA+IGRuY291bnQgfHwgbiA+ IE1BWEROVU1TKQotICAgICAgcmV0dXJuKCIiKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4oZG5f cFtuXSk7Ci19Ci0KLWNoYXIgKiAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGFyZWEgY29kZSBm b3Igc3B1cmlvdXMgbGVhZGluZyBkaWdpdCAqLwotY2hrX2FjKGksYnVmKSBpbnQgaTsgY2hhciBi dWZbXTsgewotICAgIGNoYXIgKnA7Ci0gICAgaWYgKCFidWYpCi0gICAgICByZXR1cm4oIiIpOwot ICAgIHAgPSAoY2hhciAqKSBidWY7ICAgICAgICAgICAgICAgICAgIC8qIENvdW50cnkgd2UgYXJl IGNhbGxpbmc6ICovCi0gICAgaWYgKGkgPT0gIDQ0IHx8ICAgICAgICAgICAgICAgICAgICAgLyog VUsgKi8KLSAgICAgICAgaSA9PSAgNDkgfHwgICAgICAgICAgICAgICAgICAgICAvKiBHZXJtYW55 ICovCi0gICAgICAgIGkgPT0gIDM5IHx8ICAgICAgICAgICAgICAgICAgICAgLyogSXRhbHkgKi8K LSAgICAgICAgaSA9PSAgMzEgfHwgICAgICAgICAgICAgICAgICAgICAvKiBOZXRoZXJsYW5kcyAq LwotICAgICAgICBpID09IDM1MSB8fCAgICAgICAgICAgICAgICAgICAgIC8qIFBvcnR1Z2FsICov Ci0gICAgICAgIGkgPT0gIDU1IHx8ICAgICAgICAgICAgICAgICAgICAgLyogQnJhemlsICovCi0g ICAgICAgIGkgPT0gOTcyIHx8ICAgICAgICAgICAgICAgICAgICAgLyogSXNyYWVsICovCi0gICAg ICAgIGkgPT0gIDQxIHx8ICAgICAgICAgICAgICAgICAgICAgLyogU3dpdHplcmxhbmQgKi8KLSAg ICAgICAgaSA9PSAgNDMgfHwgICAgICAgICAgICAgICAgICAgICAvKiBBdXN0cmlhICovCi0gICAg ICAgIGkgPT0gIDQyIHx8ICAgICAgICAgICAgICAgICAgICAgLyogQ3plY2ggUmVwdWJsaWMgKi8K LSAgICAgICAgaSA9PSAgMzYgfHwgICAgICAgICAgICAgICAgICAgICAvKiBIdW5nYXJ5ICovCi0g ICAgICAgIGkgPT0gIDMwIHx8ICAgICAgICAgICAgICAgICAgICAgLyogR3JlZWNlICovCi0gICAg ICAgIGkgPT0gMzUyIHx8ICAgICAgICAgICAgICAgICAgICAgLyogTHV4ZW1ib3VyZyAqLwotICAg ICAgICBpID09ICA0OCB8fCAgICAgICAgICAgICAgICAgICAgIC8qIFBvbGFuZCAqLwotICAgICAg ICBpID09ICAyNyB8fCAgICAgICAgICAgICAgICAgICAgIC8qIFNvdXRoIEFmcmljYSAqLwotICAg ICAgICBpID09ICAzMyB8fCAgICAgICAgICAgICAgICAgICAgIC8qIEZyYW5jZSAoYXMgb2YgMTk5 NykgKi8KLSAgICAgICAgaSA9PSAgMzU4ICAgICAgICAgICAgICAgICAgICAgICAvKiBGaW5sYW5k IChkaXR0bykgKi8KLSAgICAgICAgKSB7Ci0gICAgICAgIGlmIChidWZbMF0gPT0gJzAnKQotICAg ICAgICAgIHArKzsKLSAgICB9Ci0gICAgcmV0dXJuKHApOwotfQotCi0vKiBDYWxsIElzIExvbmcg RGlzdGFuY2UgLS0gRXhwYW5kIHRoaXMgdG8gY292ZXIgMTAtZGlnaXQgbG9jYWwgZGlhbGluZyBl dGMgKi8KLS8qCi0gICBzcmMgID0gYXJlYSBjb2RlIG9mIGNhbGxlcgotICAgZGVzdCA9IGFyZWEg Y29kZSBvZiBjYWxsZWUKLSAgIFJldHVybnM6Ci0gICAgIDAgaWYgY2FsbCBpcyBsb2NhbAotICAg ICAxIGlmIGNhbGwgaXMgbG9uZyBkaXN0YW5jZQotICAgICAyIGlmIGNhbGwgaXMgbG9jYWwgYnV0 IGFyZWEgY29kZSBtdXN0IGJlIGRpYWxlZCBhbnl3YXkKLSovCi1zdGF0aWMgaW50Ci1jYWxsaXNs ZChzcmMsIGRlc3QpIGNoYXIgKiBzcmMsICogZGVzdDsgewotICAgIGludCBpOwotICAgIGlmIChk aWFsZmxkKSAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvcmNlIGxvbmcgZGlzdGFuY2U/ICov Ci0gICAgICByZXR1cm4oMSk7Ci0gICAgaWYgKCFzdHJjbXAoc3JjLGRlc3QpKSB7ICAgICAgICAg ICAgLyogQXJlYSBjb2RlcyBhcmUgdGhlIHNhbWUgKi8KLSAgICAgICAgZm9yIChpID0gMDsgaSA8 IG5sb2NhbGFjOyBpKyspICAvKiBJcyBBQyBpbiB0aGUgbGMtYXJlYS1jb2RlcyBsaXN0PyAqLwot ICAgICAgICAgIGlmICghc3RyY21wKHNyYyxkaWFsbGNhY1tpXSkpCi0gICAgICAgICAgICByZXR1 cm4oMik7ICAgICAgICAgICAgICAgICAgLyogWWVzIHNvIG11c3QgYmUgZGlhbGVkICovCi0gICAg ICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAgICAgLyogTm8gc28gZG9uJ3QgZGlhbCBp dC4gKi8KLSAgICB9Ci0gICAgZm9yIChpID0gMDsgaSA8IG5sb2NhbGFjOyBpKyspICAgICAgLyog QUNzIG5vdCB0aGUgc2FtZSBzbyBsb29rIGluIGxpc3QgKi8KLSAgICAgIGlmICghc3RyY21wKGRl c3QsZGlhbGxjYWNbaV0pKSAgICAvKiBNYXRjaCAqLwotICAgICAgICByZXR1cm4oMik7ICAgICAg ICAgICAgICAgICAgICAgIC8qIFNvIGxvY2FsIGNhbGwgd2l0aCBhcmVhIGNvZGUgKi8KLSAgICBy ZXR1cm4oMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgbG9jYWwgc28gbG9uZy1k aXN0YW5jZSAqLwotfQotCi1jaGFyIHBkc2Z4WzY0XSA9IHsgTlVMLCBOVUwgfTsKLQotI2lmbmRl ZiBOT1NQTAotc3RhdGljIGNoYXIgKgoteGRpYWwocykgY2hhciAqczsgeyAgICAgICAgICAgICAg ICAgICAgIC8qIFJ1biBkaWFsIHN0cmluZyB0aHJ1IG1hY3JvICovCi0gICAgaW50IHgsIG07Ci0g ICAgY2hhciAqIHMyOwotICAgIHMyID0gTlVMTDsKLSAgICBtYWtlc3RyKCZzMixzKTsJCQkvKiBD b3B5IHRoZSBhcmd1bWVudCAqLwotICAgIGlmICghZGlhbG1hYykgICAgICAgICAgICAgICAgICAg ICAgIC8qIERpYWwgbWFjcm8gbmFtZSBnaXZlbj8gKi8KLSAgICAgIHJldHVybihOVUxMKTsKLSAg ICBpZiAoKHggPSBteGxvb2sobWFjdGFiLGRpYWxtYWMsbm1hYykpIDwgMCkgLyogSXMgdGhlIG1h Y3JvIGRlZmluZWQ/ICovCi0gICAgICByZXR1cm4oTlVMTCk7Ci0gICAgbSA9IG1hY2x2bDsKLSAg ICB4ID0gZG9kbyh4LHMyLDApOwkJCS8qIFNldCB1cCB0aGUgbWFjcm8gKi8KLSAgICBpZiAoczIp IGZyZWUoczIpOwotICAgIGlmICh4ID4gMCkgewotICAgICAgICB3aGlsZSAobWFjbHZsID4gbSkg ICAgICAgICAgICAgIC8qIEV4ZWN1dGUgdGhlIHBhcnNlciAqLwotICAgICAgICAgIHBhcnNlcigx KTsKLSAgICAgICAgcmV0dXJuKG1ydmFsW21hY2x2bCsxXSk7ICAgICAgICAvKiBSZXR1cm4gdGhl IHJlc3VsdCAqLwotICAgIH0KLSAgICByZXR1cm4oTlVMTCk7Ci19Ci0jZW5kaWYgLyogTk9TUEwg Ki8KLQotc3RhdGljIGludAotZG5jdnQoayxjeCwgcHJlZml4LCBzdWZmaXgpCi0gICAgaW50IGss IGN4LCBwcmVmaXgsIHN1ZmZpeDsgeyAgICAgICAgLyogRGlhbCBOdW1iZXIgQ29udmVydCAqLwot ICAgIGludCBpLCBqLCBuLCB3aGF0OyAgICAgICAgICAgICAgICAgIC8qIGN4IGlzIHRvcC1sZXZl bCBjb21tYW5kIGluZGV4ICovCi0gICAgY2hhciAqc3M7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogcHJlZml4IC0gYWRkIHByZWZpeGVzPyAqLwotICAgIGNoYXIgKnAsICpwMiwgKnB4bzsg ICAgICAgICAgICAgICAgIC8qIHN1ZmZpeCAtIGFkZCBzdWZmaXhlcz8gKi8KLSAgICBjaGFyICps YWM7Ci0gICAgY2hhciAqbnByOwotICAgIGNoYXIgKnNmeDsKLSAgICAvKiBjaGFyICpwc2Z4OyAq LwotICAgIGNoYXIgY2NidWZbMTI4XTsKLSAgICBpbnQgY2M7Ci0gICAgY2hhciBhY2J1ZlsyNF07 Ci0gICAgY2hhciAqYWNwdHI7Ci0gICAgY2hhciBvdXRidWZbMjU2XTsKLS8qCi0gIEZpcnN0IHBh c3MgZm9yIHN0cmljdCAocHVuY3R1YXRpb24tYmFzZWQpIGludGVycHJldGF0aW9uLgotICBJZiBp dCBmYWlscywgd2UgdHJ5IHRoZSBsb29zZXIgKGxlbmd0aC1iYXNlZCkgb25lLgotKi8KLSAgICBk aWFsdHlwZSA9IC0xOwotICAgIHdoYXQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFR5cGUgb2YgY2FsbCAqLwotICAgIHMgPSBkbl9wW2tdOyAgICAgICAgICAgICAgICAgICAgICAg IC8qIE51bWJlciB0byBiZSBjb252ZXJ0ZWQuICovCi0gICAgZGVidWcoRjExMSwiZG5jdnQiLHMs ayk7Ci0gICAgaWYgKGRuX3AyW2tdKSB7Ci0gICAgICAgIGZyZWUoZG5fcDJba10pOwotICAgICAg ICBkbl9wMltrXSA9IE5VTEw7Ci0gICAgfQotICAgIGlmICghcykgewotICAgICAgICBwcmludGYo IkVycm9yIC0gTm8gcGhvbmUgbnVtYmVyIHRvIGNvbnZlcnRcbiIpOwotICAgICAgICByZXR1cm4o LTEpOwotICAgIH0KLSAgICBpZiAoKGludClzdHJsZW4ocykgPiAyMDApIHsKLSAgICAgICAgY2tz dHJuY3B5KG91dGJ1ZixzLDQwKTsKLSAgICAgICAgcHJpbnRmKCI/VG9vIGxvbmc6IFwiJXMuLi5c IlxuIixvdXRidWYpOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBucHIgPSAocHJl Zml4ICYmIGRpYWxucHIpID8gZGlhbG5wciA6ICIiOwotICAgIHNmeCA9IChzdWZmaXggJiYgZGlh bHNmeCkgPyBkaWFsc2Z4IDogIiI7Ci0gICAgLyogaWYgKHBhcnRpYWwpIHBzZnggPSBkaWFsc2Z4 ID8gZGlhbHNmeCA6ICIiOyAqLwotICAgIHB4byA9IChwcmVmaXggJiYgZGlhbHB4bykgPyBkaWFs cHhvIDogIiI7Ci0gICAgbGFjID0gZGlhbGxhYyA/IGRpYWxsYWMgOiAiIjsgICAgICAgLyogTG9j YWwgYXJlYSBjb2RlICovCi0KLSAgICBvdXRidWZbMF0gPSBOVUw7ICAgICAgICAgICAgICAgICAg ICAvKiBJbml0aWFsaXplIGNvbnZlcnNpb24gYnVmZmVyICovCi0gICAgc3MgPSBzOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgb3JpZ2luYWwgc3RyaW5nICovCi0KLSAg ICBpZiAoKnMgIT0gJysnKSB7ICAgICAgICAgICAgICAgICAgICAvKiBMaXRlcmFsIG51bWJlciAq LwotICAgICAgICBkbl94W2tdID0gRE5fVU5LOyAgICAgICAgICAgICAgIC8qIFNvcnQga2V5IGlz ICJ1bmtub3duIi4gKi8KLSAgICAgICAgY2ttYWttc2cob3V0YnVmLDI1NiwgICAgICAgICAgICAv KiBTYW5kd2ljaCBpdCBiZXR3ZWVuICovCi0gICAgICAgICAgICAgICAgIHB4byxucHIscyxzZngg ICAgICAgICAgLyogRElBTCBQUkVGSVggYW5kIFNVRkZJWCAqLwotICAgICAgICAgICAgICAgICk7 Ci0jaWZkZWYgQ0tfVEFQSQotICAgICAgICBpZiAodHR0YXBpICYmICAgICAgICAgICAgICAgICAg IC8qIFRBUEkgZG9lcyBpdHMgb3duIGNvbnZlcnNpb25zICovCi0gICAgICAgICAgICAhdGFwaXBh c3MgJiYgICAgICAgICAgICAgICAgLyogaWYgbm90IGluIHBhc3N0aHJ1IG1vZGUgKi8KLSAgICAg ICAgICAgIHRhcGljb252ID09IENLX0FVVE8gfHwgICAgICAvKiBhbmQgVEFQSSBjb252ZXJzaW9u cyBhcmUgQVVUTyAqLwotICAgICAgICAgICAgdGFwaWNvbnYgPT0gQ0tfT04gICAgICAgICAgIC8q IE9SIGlmIFRBUEkgY29udmVyc2lvbnMgYXJlIE9OICovCi0gICAgICAgICAgICApIHsKLSAgICAg ICAgICAgIGNoYXIgKiBwID0gTlVMTDsKLSAgICAgICAgICAgIGRpYWx0eXBlID0gLTI7Ci0gICAg ICAgICAgICBpZiAoIWNrdGFwaUNvbnZlcnRQaG9uZU51bWJlcihkbl9wW2tdLCAmcCkpCi0gICAg ICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICBtYWtlc3RyKCZkbl9wMltrXSwgcCk7 Ci0gICAgICAgICAgICBpZiAocCkgZnJlZShwKTsKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAg ICAgICAgfSBlbHNlCi0jZW5kaWYgLyogQ0tfVEFQSSAqLwotICAgICAgICAgIG1ha2VzdHIoJmRu X3AyW2tdLCBvdXRidWYpOyAgIC8qIE5vdCBUQVBJICovCi0gICAgICAgIGRpYWx0eXBlID0gd2hh dDsKLSAgICAgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAgICAgICAvKiBEb25lLiAqLwot ICAgIH0KLSAgICBpID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb3J0YWJs ZSBudW1iZXIgKi8KLSAgICBzKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBU aXB0b2UgcGFzdCB0aGUgcGx1cyBzaWduICovCi0gICAgY2NidWZbMF0gPSBOVUw7ICAgICAgICAg ICAgICAgICAgICAgLyogRG8gY291bnRyeSBjb2RlIGZpcnN0ICovCi0KLSAgICBpZiAoIWRpYWxs Y2MpIHsgICAgICAgICAgICAgICAgICAgICAvKiBEbyB3ZSBrbm93IG91ciBvd24/ICovCi0gICAg ICAgIGlmIChjeCAhPSBYWExPT0spCi0gICAgICAgICAgcHJpbnRmKCJFcnJvciAtIHByaW9yIFNF VCBESUFMIENPVU5UUlktQ09ERSBjb21tYW5kIHJlcXVpcmVkXG4iKTsKLSAgICAgICAgcmV0dXJu KC0xKTsKLSAgICB9Ci0KLSAgICAvKiBQYXJzZSB0aGUgbnVtYmVyICovCi0KLSAgICB3aGlsZSAo MSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHZXQgdGhlIGNvdW50cnkgY29kZSAqLwot ICAgICAgICB3aGlsZSAoKnMgPT0gSFQgfHwgKnMgPT0gU1ApCi0gICAgICAgICAgcysrOwotICAg ICAgICBpZiAoIXMpICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBpbiBzdGFuZGFyZCBm b3JtYXQgKi8KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKCpzID09ICcoJykgeyAgICAg ICAgICAgICAgICAvKiBCZWdpbm5pbmcgb2YgYXJlYSBjb2RlICAqLwotICAgICAgICAgICAgcysr OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNraXAgcGFzdCBwYXJlbnRoZXNpcyAgICovCi0g ICAgICAgICAgICBjY2J1ZltpXSA9IE5VTDsgICAgICAgICAgICAgLyogRW5kIG9mIGNvdW50cnkg Y29kZSAqLwotICAgICAgICAgICAgaWYgKCFzKSB7ICAgICAgICAgICAgICAgICAgIC8qIENoZWNr IGZvciBlbmQgb2Ygc3RyaW5nICovCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJFcnJvciAtIHBo b25lIG51bWJlciBlbmRzIHByZW1hdHVyZWx5OiBcIiVzXCJcbiIsc3MpOwotICAgICAgICAgICAg ICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg ICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb2xsZWN0IGNvdW50cnkgY29k ZSAqLwotICAgICAgICAgICAgaWYgKGlzZGlnaXQoKnMpKQotICAgICAgICAgICAgICBjY2J1Zltp KytdID0gKnM7ICAgICAgICAgIC8qIGNvcHkgdGhpcyBjaGFyYWN0ZXIgKi8KLSAgICAgICAgICAg IHMrKzsKLSAgICAgICAgICAgIGlmICghKnMgfHwgaSA+IDEyNykgICAgICAgICAvKiB3YXRjaCBv dXQgZm9yIG1lbW9yeSBsZWFrICovCi0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g ICAgfQotICAgIGNjID0gYXRvaShjY2J1Zik7ICAgICAgICAgICAgICAgICAgIC8qIE51bWVyaWMg dmVyc2lvbiBvZiBjb3VudHJ5IGNvZGUgKi8KLQotICAgIGkgPSAwOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIE5vdyBnZXQgYXJlYSBjb2RlICovCi0gICAgYWNidWZbMF0gPSBOVUw7 ICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBhcmVhLWNvZGUgYnVmZmVyICovCi0g ICAgYWNwdHIgPSBhY2J1ZjsgICAgICAgICAgICAgICAgICAgICAgLyogYW5kIHBvaW50ZXIuICov Ci0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgd2hpbGUgKCpzID09IEhUIHx8ICpzID09IFNQKSAg ICAvKiBJZ25vcmUgd2hpdGVzcGFjZSAqLwotICAgICAgICAgIHMrKzsKLSAgICAgICAgaWYgKCFz KSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdHJpbmcgZmluaXNoZWQgKi8KLSAgICAgICAg ICBicmVhazsKLSAgICAgICAgaWYgKCpzID09ICcpJykgeyAgICAgICAgICAgICAgICAvKiBFbmQg b2YgYXJlYSBjb2RlICAqLwotICAgICAgICAgICAgcysrOyAgICAgICAgICAgICAgICAgICAgICAg IC8qIFNraXAgcGFzdCBwYXJlbnRoZXNpcyAgICovCi0gICAgICAgICAgICBhY2J1ZltpXSA9IE5V TDsgICAgICAgICAgICAgLyogVGVybWluYXRlIGFyZWEtY29kZSBidWZmZXIgKi8KLSAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBh cnQgb2YgYXJlYSBjb2RlICovCi0gICAgICAgICAgICBpZiAoaXNkaWdpdCgqcykpICAgICAgICAg ICAgLyogSWYgaXQncyBhIGRpZ2l0LCAqLwotICAgICAgICAgICAgICBhY2J1ZltpKytdID0gKnM7 ICAgICAgICAgIC8qIGNvcHkgdGhpcyBjaGFyYWN0ZXIgKi8KLSAgICAgICAgICAgIHMrKzsgICAg ICAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byBuZXh0ICovCi0gICAgICAgICAgICBpZiAo ISpzIHx8IGkgPiAyMykgICAgICAgICAgLyogV2F0Y2ggb3V0IGZvciBvdmVyZmxvdyAqLwotICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotLyoKLSAgIEhlcmUgd2Ugc3Ry aXAgYW55IGxlYWRpbmcgMCBmb3IgY291bnRyaWVzIHRoYXQgd2Uga25vdyBoYXZlCi0gICAwIGFz IGEgbG9uZy1kaXN0YW5jZSBwcmVmaXggYW5kIGRvIG5vdCBoYXZlIGFueSBhcmVhIGNvZGVzIHRo YXQKLSAgIHN0YXJ0IHdpdGggMCAoZm9ybWVybHkgYWxzbyBkaXR0byBmb3IgIjkiIGluIEZpbmxh bmQuLi4pCi0qLwotICAgIGkgPSBhdG9pKGNjYnVmKTsKLSAgICBhY3B0ciA9IGNoa19hYyhpLGFj YnVmKTsKLQotICAgIHdoaWxlICgqcyA9PSBIVCB8fCAqcyA9PSBTUCkgICAgICAgIC8qIFNraXAg d2hpdGVzcGFjZSAqLwotICAgICAgcysrOwotCi0vKiBwcmludGYoIlM9WyVzXSwgQUNQVFI9WyVz XVxuIixzLGFjcHRyKTsgKi8KLQotICAgIGlmICgqcyAmJiAqYWNwdHIpIHsgICAgICAgICAgICAg ICAgIC8qIEFyZWEgY29kZSB3YXMgZGVsaW1pdGVkICovCi0KLSAgICAgICAgd2hpbGUgKCpzID09 ICctJyB8fCAqcyA9PSAnLicpICAvKiBTa2lwIHBhc3QgZ3JhdHVpdGlvdXMgcHVuY3R1YXRpb24g Ki8KLSAgICAgICAgICBzKys7Ci0gICAgICAgIGlmICghKnMpIHMtLTsgICAgICAgICAgICAgICAg ICAgLyogQnV0IG5vdCB0byBlbmQgb2Ygc3RyaW5nICovCi0KLSAgICAgICAgaWYgKHN0cmNtcChk aWFsbGNjLGNjYnVmKSkgeyAgICAvKiBPdXQgb2YgY291bnRyeT8gKi8KLSAgICAgICAgICAgIGlm ICghZGlhbGl4cCkgeyAgICAgICAgICAgICAvKiBOZWVkIGludGwtcHJlZml4ICovCi0gICAgICAg ICAgICAgICAgaWYgKGN4ICE9IFhYTE9PSykKLSAgICAgICAgICAgICAgICAgIHByaW50ZigiRXJy b3IgLSBObyBpbnRlcm5hdGlvbmFsIGRpYWxpbmcgcHJlZml4IGRlZmluZWRcbiIpOwotICAgICAg ICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB3aGF0ID0g ZG5feFtrXSA9IEROX0lOVEw7Ci0gICAgICAgICAgICBwICA9IChwcmVmaXggJiYgZGlhbGl4cCkg PyBkaWFsaXhwIDogIiI7IC8qIEludGwtcHJlZml4ICovCi0gICAgICAgICAgICBwMiA9IChzdWZm aXggJiYgZGlhbGl4cykgPyBkaWFsaXhzIDogIiI7IC8qIEludGwtc3VmZml4ICovCi0KLSAgICAg ICAgICAgIC8qIEZvcm0gdGhlIGZpbmFsIHBob25lIG51bWJlciAqLwotI2lmZGVmIENPTU1FTlQK LSAgICAgICAgICAgIHNwcmludGYocGRzZngsIiVzJXMiLHAyLHNmeCk7IC8qIFVOU0FGRSAqLwot ICAgICAgICAgICAgc3ByaW50ZihvdXRidWYsCi0gICAgICAgICAgICAgICAgICAgICIlcyVzJXMl cyVzJXMlcyVzIiwKLSAgICAgICAgICAgICAgICAgICAgcHhvLG5wcixwLGNjYnVmLGFjcHRyLHMs cDIsc2Z4Ci0gICAgICAgICAgICAgICAgICAgICk7Ci0jZWxzZQotICAgICAgICAgICAgY2ttYWtt c2cocGRzZngsNjQscDIsc2Z4LE5VTEwsTlVMTCk7Ci0gICAgICAgICAgICBja21ha3htc2cob3V0 YnVmLDI1NixweG8sbnByLHAsY2NidWYsYWNwdHIscyxwMixzZngsCi0gICAgICAgICAgICAgICAg ICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAg ICAgIH0gZWxzZSBpZiAoKHggPSBjYWxsaXNsZChsYWMsYWNwdHIpKSA+PSAxKSB7IC8qIEluLWNv dW50cnkgTEQgKi8KLSAgICAgICAgICAgIGlmICghZGlhbGxhYyAmJiBjeCAhPSBYWExPT0spIHsg LyogRG9uJ3Qga25vdyBteSBvd24gYXJlYSBjb2RlICovCi0gICAgICAgICAgICAgICAgaWYgKGNj ID09IDEpCi0gICAgICAgICAgICAgICAgICBwcmludGYoIldBUk5JTkcgLSBQcmlvciBTRVQgRElB TCBBUkVBLUNPREUgbmVlZGVkXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh4 ID09IDIpIHsgICAgICAgICAgICAgICAvKiBMb2NhbCBjYWxsIHdpdGggYXJlYSBjb2RlICovCi0g ICAgICAgICAgICAgICAgd2hhdCA9IGRuX3hba10gPSBETl9MT0NBTDsgICAgICAvKiBMb2NhbC1j YWxsICovCi0gICAgICAgICAgICAgICAgcCAgPSAocHJlZml4ICYmIGRpYWxsY3ApID8gZGlhbGxj cCA6ICIiOyAvKiBsb2NhbC1wcmVmaXggKi8KLSAgICAgICAgICAgICAgICBwMiA9IChzdWZmaXgg JiYgZGlhbGxjcykgPyBkaWFsbGNzIDogIiI7IC8qIGxvY2FsLXN1ZmZpeCAqLwotICAgICAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB3aGF0ID0gZG5feFtrXSA9IEROX0xPTkc7ICAg ICAgIC8qIExvbmctZGlzdGFuY2UgKi8KLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwg bnRvbGxmcmVlOyBpKyspIHsgLyogQnV0IHRvbGwtZnJlZSB0b28/ICovCi0gICAgICAgICAgICAg ICAgICAgIGlmICghc3RyY21wKGFjcHRyLGRpYWx0ZmNbaV0pKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICB3aGF0ID0gZG5feFtrXSA9IEROX0ZSRUU7Ci0gICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICBpZiAod2hhdCA9PSBETl9GUkVFKSB7ICAvKiBUb2xsLWZyZWUgY2FsbCAqLwot ICAgICAgICAgICAgICAgICAgICBwID0gKHByZWZpeCAmJiBkaWFsdGZwKSA/IGRpYWx0ZnAgOgot ICAgICAgICAgICAgICAgICAgICAgICAgKChwcmVmaXggJiYgZGlhbGxkcCkgPyBkaWFsbGRwIDog IiIpOwotICAgICAgICAgICAgICAgICAgICBwMiA9ICIiOyAgICAgICAgICAgIC8qIG5vIHN1ZmZp eCAqLwotICAgICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyog bm9ybWFsIGxvbmcgZGlzdGFuY2UgKi8KLSAgICAgICAgICAgICAgICAgICAgcCAgPSAocHJlZml4 ICYmIGRpYWxsZHApID8gZGlhbGxkcCA6ICIiOyAvKiBsZC1wcmVmaXggKi8KLSAgICAgICAgICAg ICAgICAgICAgcDIgPSAoc3VmZml4ICYmIGRpYWxsZHMpID8gZGlhbGxkcyA6ICIiOyAvKiBsZC1z dWZmaXggKi8KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAv KiBGb3JtIHRoZSBudW1iZXIgdG8gYmUgZGlhbGVkICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAg ICAgICAgc3ByaW50ZihvdXRidWYsIiVzJXMlcyVzJXMlcyVzIiwKLSAgICAgICAgICAgICAgICAg ICAgcHhvLG5wcixwLGFjcHRyLHMscDIsc2Z4Ci0gICAgICAgICAgICAgICAgICAgICk7Ci0gICAg ICAgICAgICBzcHJpbnRmKHBkc2Z4LCIlcyVzIixwMixzZngpOwotI2Vsc2UKLSAgICAgICAgICAg IGNrbWFreG1zZyhvdXRidWYsMjU2LAotICAgICAgICAgICAgICAgICAgICAgIHB4byxucHIscCxh Y3B0cixzLHAyLHNmeCwKLSAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxM LE5VTEwpOwotICAgICAgICAgICAgY2ttYWttc2cocGRzZngsNjQscDIsc2Z4LE5VTEwsTlVMTCk7 Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFNhbWUgY291bnRyeSwgc2FtZSBhcmVhIGNvZGUgKi8KLSAgICAgICAgICAgIHdo YXQgPSBkbl94W2tdID0gRE5fTE9DQUw7ICAvKiBTbyBpdCdzIGEgbG9jYWwgY2FsbC4gKi8KLSAg ICAgICAgICAgIGlmICghcHJlZml4IHx8ICEoZGlhbHB4byB8fCBuZGlhbHB4eCkpIHsgLyogTm90 IGRpYWxpbmcgZnJvbSBQQlggKi8KLSAgICAgICAgICAgICAgICBwICA9IChwcmVmaXggJiYgZGlh bGxjcCkgPyBkaWFsbGNwIDogIiI7IC8qIGxvY2FsLXByZWZpeCAqLwotICAgICAgICAgICAgICAg IHAyID0gKHN1ZmZpeCAmJiBkaWFsbGNzKSA/IGRpYWxsY3MgOiAiIjsgLyogbG9jYWwtc3VmZml4 ICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgICAgIGlmICh4ID09IDIpCi0gICAgICAg ICAgICAgICAgICBzcHJpbnRmKG91dGJ1ZiwiJXMlcyVzJXMlcyVzIixucHIscCxhY3B0cixzLHAy LHNmeCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgc3ByaW50Zihv dXRidWYsIiVzJXMlcyVzJXMiLG5wcixwLHMscDIsc2Z4KTsKLSAgICAgICAgICAgICAgICBzcHJp bnRmKHBkc2Z4LCIlcyVzIixwMixzZngpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBpZiAoeCA9 PSAyKQotICAgICAgICAgICAgICAgICAgY2ttYWt4bXNnKG91dGJ1ZiwyNTYsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgbnByLHAsYWNwdHIscyxwMixzZngsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgICAgICAgICAg ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIGNrbWFreG1zZyhvdXRidWYsMjU2LAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5wcixwLHMscDIsc2Z4LAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgICAgICAg ICAgICAgIGNrbWFrbXNnKHBkc2Z4LDY0LHAyLHNmeCxOVUxMLE5VTEwpOwotI2VuZGlmIC8qIENP TU1FTlQgKi8KLQotICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIERp YWxpbmcgZnJvbSBhIFBCWCBhbmQgbm90IFRBUEkgKi8KLSAgICAgICAgICAgICAgICBpZiAobmRp YWxweHgpIHsgICAgICAgICAvKiBJcyBpdCBpbnRlcm5hbD8gKi8KLSNpZmRlZiBDT01NRU5UCi0g ICAgICAgICAgICAgICAgICAgIGkgPSAoaW50KSBzdHJsZW4oZGlhbHB4eCk7Ci0gICAgICAgICAg ICAgICAgICAgIGogPSAoaW50KSBzdHJsZW4ocyk7Ci0gICAgICAgICAgICAgICAgICAgIHggPSAt MTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGogPiBpKQotICAgICAgICAgICAgICAgICAgICAg IHggPSBja3N0cmNtcChkaWFscHh4LHMsaSwwKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAg IGludCBreDsKLSAgICAgICAgICAgICAgICAgICAgeCA9IC0xOwotICAgICAgICAgICAgICAgICAg ICBqID0gKGludCkgc3RybGVuKHMpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGt4ID0gMDsg a3ggPCBuZGlhbHB4eDsga3grKykgewotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IChpbnQp IHN0cmxlbihkaWFscHh4W2t4XSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaiA+IGkp Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHggPSBja3N0cmNtcChkaWFscHh4W2t4 XSxzLGksMCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgICAgICAgICBp ZiAoIXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBpY3AsIGJ1ZlszMl07Ci0g ICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZtYXRjaHB4eCxkaWFscHh4W2t4XSk7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJkbmN2dCBtYXRjaHB4eCIsbWF0Y2hw eHgsa3gpOwotICAgICAgICAgICAgICAgICAgICAgICAgd2hhdCA9IGRuX3hba3hdID0gRE5fSU5U RVJOOyAgIC8qIEludGVybmFsIGNhbGwuICovCi0gICAgICAgICAgICAgICAgICAgICAgICBzICs9 IGk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnRlcm5hbC1jYWxsIHByZWZpeCAqLwot ICAgICAgICAgICAgICAgICAgICAgICAgaWNwID0gZGlhbHB4aTsKLSNpZm5kZWYgTk9TUEwKLSAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChpY3ApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoKmljcCA9PSAnXFwnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgYywgKmJwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbjsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9ICooaWNwKzEpOwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoaXN1cHBlcihjKSkgYyA9IHRvbG93ZXIoYyk7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09ICd2JyB8fCBjID09ICdmJykgewot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDMyOwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYnAgPSBidWY7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB6enN0cmluZyhpY3AsJmJwLCZuKTsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGljcCA9IGJ1ZjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg ICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgcCA9IChw cmVmaXggJiYgaWNwKSA/IGljcCA6ICIiOwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgICAg ICAgICAgICAgIHNwcmludGYob3V0YnVmLCIlcyVzJXMlcyIsbnByLHAscyxzZngpOwotI2Vsc2UK LSAgICAgICAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKG91dGJ1ZiwyNTYsbnByLHAscyxzZngp OwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgICAg ICAgICAgICAvKiBFeHRlcm5hbCBsb2NhbCBjYWxsICovCi0gICAgICAgICAgICAgICAgICAgICAg ICAvKiBsb2NhbC1wcmVmaXggKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHAgID0gKHByZWZp eCAmJiBkaWFsbGNwKSA/IGRpYWxsY3AgOiAiIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8q IGxvY2FsLXN1ZmZpeCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgcDIgPSAocHJlZml4ICYm IGRpYWxsY3MpID8gZGlhbGxjcyA6ICIiOwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgICAg ICAgICAgICAgIGlmICh4ID09IDIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYo b3V0YnVmLCIlcyVzJXMlcyVzJXMlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGlhbHB4byA/IGRpYWxweG8gOiAiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBucHIscCxhY3B0cixzLHAyLHNmeCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNl Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYob3V0YnVmLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICIlcyVzJXMlcyVzJXMiLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRpYWxweG8gPyBkaWFscHhvIDogIiIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbnByLHAscyxwMixzZngKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ID09IDIp Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNrbWFreG1zZyhvdXRidWYsIDI1NiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlhbHB4byA/IGRpYWxweG8gOiAiIiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnByLHAsYWNwdHIscyxwMixzZngsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVM TCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAg ICAgIGNrbWFreG1zZyhvdXRidWYsIDI1NiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRpYWxweG8gPyBkaWFscHhvIDogIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBucHIscCxzLHAyLHNmeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSNlbmRpZiAvKiBDT01NRU5U ICovCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICB9Ci0gICAgICAgIH0KLQotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEFyZWEgY29kZSB3YXMgbm90IGRlbGltaXRlZCAqLwotCi0gICAgICAgIGNoYXIgeGJ1Zlsy NTZdOyAgICAgICAgICAgICAgICAgLyogQ29tcGFyaXNvbiBiYXNlZCBvbmx5IG9uIGxlbmd0aCAq LwotICAgICAgICBjaGFyIHlidWZbMjU2XTsKLSAgICAgICAgaW50IHgsIGo7Ci0KLSAgICAgICAg cyA9IHNzOwotCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTU7IGkrKykgewotICAgICAgICAg ICAgaWYgKCEqcykgYnJlYWs7Ci0gICAgICAgICAgICB3aGlsZSAoIWlzZGlnaXQoKnMpKSB7ICAg ICAgLyogUGF5IGF0dGVudGlvbiBvbmx5IHRvIGRpZ2l0cyAqLwotICAgICAgICAgICAgICAgIHMr KzsKLSAgICAgICAgICAgICAgICBpZiAoISpzKSBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIHhidWZbaV0gPSAqcysrOwotICAgICAgICB9Ci0gICAgICAgIHhidWZbaV0gPSBOVUw7 Ci0KLSAgICAgICAgeCA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBc3N1bWUgTEQg Ki8KLSAgICAgICAgbiA9IDA7Ci0gICAgICAgIGlmICghZGlhbGZsZCkgeyAgICAgICAgICAgICAg ICAgLyogSWYgTEQgbm90IGZvcmNlZCAqLwotICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG5s b2NhbGFjOyBqKyspIHsgLyogY2hlY2sgbG9jYWwgQUMgbGlzdD8gKi8KLSAgICAgICAgICAgICAg ICBja21ha21zZyh5YnVmLDI1NixkaWFsbGNjLGRpYWxsY2FjW2pdLE5VTEwsTlVMTCk7Ci0gICAg ICAgICAgICAgICAgbiA9IChpbnQpIHN0cmxlbih5YnVmKTsKLSAgICAgICAgICAgICAgICBpZiAo biA+IDAgJiYgIWNrc3RyY21wKHhidWYseWJ1ZixuLDApKSB7Ci0gICAgICAgICAgICAgICAgICAg IHggPSAyOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoeCA9PSAxKSB7ICAgICAgICAgICAgICAgLyog T3IgZXhhY3QgbWF0Y2ggd2l0aCBsb2NhbCBDQytBQz8gKi8KLSAgICAgICAgICAgICAgICBja21h a21zZyh5YnVmLDI1NixkaWFsbGNjLGxhYyxOVUxMLE5VTEwpOwotICAgICAgICAgICAgICAgIG4g PSAoaW50KSBzdHJsZW4oeWJ1Zik7Ci0gICAgICAgICAgICAgICAgaWYgKG4gPiAwICYmICFja3N0 cmNtcCh4YnVmLHlidWYsbiwwKSkKLSAgICAgICAgICAgICAgICAgIHggPSAwOwotICAgICAgICAg ICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICh4ID09IDAgfHwgeCA9PSAyKSB7ICAgICAgICAg LyogTG9jYWwgY2FsbCAqLwotICAgICAgICAgICAgaW50IHh4LGt4OyAgICAgICAgICAgICAgICAg IC8qIEJlZ2luIDEgRGVjIDIwMDEuLi4gKi8KLSAgICAgICAgICAgIC8qIEFjY291bnQgZm9yIFBC WCBpbnRlcm5hbCBjYWxscyAqLwotICAgICAgICAgICAgaWYgKG5kaWFscHh4KSB7Ci0gICAgICAg ICAgICAgICAgeHggPSAtMTsKLSAgICAgICAgICAgICAgICBqID0gKGludCkgc3RybGVuKHlidWYp OwotICAgICAgICAgICAgICAgIGZvciAoa3ggPSAwOyBreCA8IG5kaWFscHh4OyBreCsrKSB7Ci0g ICAgICAgICAgICAgICAgICAgIGkgPSAoaW50KSBzdHJsZW4oZGlhbHB4eFtreF0pOwotICAgICAg ICAgICAgICAgICAgICBpZiAoaiA+PSBpKQotICAgICAgICAgICAgICAgICAgICAgIGlmICghKHh4 ID0gY2tzdHJjbXAoZGlhbHB4eFtreF0sJnhidWZbal0saSwwKSkpCi0gICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICBpZiAoIXh4KSB7Ci0gICAgICAgICAgICAgICAgY2hhciAqIGljcCwgYnVmWzMyXTsKLSAg ICAgICAgICAgICAgICBtYWtlc3RyKCZtYXRjaHB4eCxkaWFscHh4W2t4XSk7Ci0gICAgICAgICAg ICAgICAgZGVidWcoRjExMSwiZG5jdnQgbWF0Y2hweHgiLG1hdGNocHh4LGt4KTsKLSAgICAgICAg ICAgICAgICB3aGF0ID0gZG5feFtreF0gPSBETl9JTlRFUk47IC8qIEludGVybmFsIGNhbGwuICov Ci0gICAgICAgICAgICAgICAgcyA9IHhidWYgKyBqICsgaTsKLSAgICAgICAgICAgICAgICBpY3Ag PSBkaWFscHhpOyAgICAgICAgICAvKiBJbnRlcm5hbC1jYWxsIHByZWZpeCAqLwotI2lmbmRlZiBO T1NQTAotICAgICAgICAgICAgICAgIGlmIChpY3ApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg KCppY3AgPT0gJ1xcJykgewotICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjLCAqYnA7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBpbnQgbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGMg PSAqKGljcCsxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3VwcGVyKGMpKSBjID0g dG9sb3dlcihjKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09ICd2JyB8fCBjID09 ICdmJykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAzMjsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBicCA9IGJ1ZjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB6 enN0cmluZyhpY3AsJmJwLCZuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3AgPSBi dWY7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICAgICAgICAgICAgICBwID0g KHByZWZpeCAmJiBpY3ApID8gaWNwIDogIiI7Ci0gICAgICAgICAgICAgICAgY2ttYWttc2cob3V0 YnVmLDI1NixucHIscCxzLHNmeCk7Ci0gICAgICAgICAgICAgICAgLyogRW5kIDEgRGVjIDIwMDEu Li4gKi8KLQotICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBQ QlggaW50ZXJuYWwgKi8KLQotICAgICAgICAgICAgICAgIGRuX3hba10gPSBETl9MT0NBTDsKLSAg ICAgICAgICAgICAgICBwID0gKHByZWZpeCAmJiBkaWFsbGNwKSA/IGRpYWxsY3AgOiAiIjsKLSAg ICAgICAgICAgICAgICBwMiA9IChzdWZmaXggJiYgZGlhbGxjcykgPyBkaWFsbGNzIDogIiI7Ci0g ICAgICAgICAgICAgICAgcyA9IChjaGFyICopICh4YnVmICsgKCh4ID09IDApID8gbiA6IChpbnQp c3RybGVuKGRpYWxsY2MpKSk7Ci0gICAgICAgICAgICAgICAgY2ttYWt4bXNnKG91dGJ1ZiwyNTYs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHB4byxucHIscCxzLHAyLHNmeCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgICAg ICAgICAgICAgIGNrbWFrbXNnKHBkc2Z4LDY0LHAyLHNmeCxOVUxMLE5VTEwpOwotICAgICAgICAg ICAgfQotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBsb2Nh bCAqLwotICAgICAgICAgICAgbiA9IGNrc3RybmNweSh5YnVmLGRpYWxsY2MsMjU2KTsKLSAgICAg ICAgICAgIGlmIChuID4gMCAmJiAhY2tzdHJjbXAoeGJ1Zix5YnVmLG4sMCkpIHsgLyogTG9uZyBk aXN0YW5jZSAqLwotICAgICAgICAgICAgICAgIGRuX3hba10gPSBETl9MT05HOwotICAgICAgICAg ICAgICAgIHAgPSAocHJlZml4ICYmIGRpYWxsZHApID8gZGlhbGxkcCA6ICIiOwotICAgICAgICAg ICAgICAgIHAyID0gKHN1ZmZpeCAmJiBkaWFsbGRzKSA/IGRpYWxsZHMgOiAiIjsKLSAgICAgICAg ICAgICAgICBzID0geGJ1ZiArIG47Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCpzID09ICctJyB8 fCAqcyA9PSAnLicpCi0gICAgICAgICAgICAgICAgICBzKys7Ci0jaWZkZWYgQ09NTUVOVAotICAg ICAgICAgICAgICAgIHNwcmludGYob3V0YnVmLCIlcyVzJXMlcyVzJXMiLHB4byxucHIscCxzLHAy LHNmeCk7Ci0gICAgICAgICAgICAgICAgc3ByaW50ZihwZHNmeCwiJXMlcyIscDIsc2Z4KTsKLSNl bHNlCi0gICAgICAgICAgICAgICAgY2ttYWt4bXNnKG91dGJ1ZiwyNTYsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgIHB4byxucHIscCxzLHAyLHNmeCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0gICAgICAgICAgICAgICAgY2ttYWtt c2cocGRzZngsNjQscDIsc2Z4LE5VTEwsTlVMTCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAg ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkbl94W2tdID0gRE5fSU5UTDsgICAg ICAvKiBJbnRlcm5hdGlvbmFsICovCi0gICAgICAgICAgICAgICAgaWYgKCFkaWFsaXhwKSB7Ci0g ICAgICAgICAgICAgICAgICAgIGlmIChjeCAhPSBYWExPT0spIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgIHByaW50ZigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIC0gTm8gaW50 ZXJuYXRpb25hbCBkaWFsaW5nIHByZWZpeCBkZWZpbmVkXG4iCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcCA9 IChwcmVmaXggJiYgZGlhbGl4cCkgPyBkaWFsaXhwIDogIiI7Ci0gICAgICAgICAgICAgICAgcDIg PSAoc3VmZml4ICYmIGRpYWxpeHMpID8gZGlhbGl4cyA6ICIiOwotI2lmZGVmIENPTU1FTlQKLSAg ICAgICAgICAgICAgICBzcHJpbnRmKG91dGJ1ZiwiJXMlcyVzJXMlcyVzIixweG8sbnByLHAseGJ1 ZixwMixzZngpOwotICAgICAgICAgICAgICAgIHNwcmludGYocGRzZngsIiVzJXMiLHAyLHNmeCk7 Ci0jZWxzZQotICAgICAgICAgICAgICAgIGNrbWFreG1zZyhvdXRidWYsMjU2LAotICAgICAgICAg ICAgICAgICAgICAgICAgICBweG8sbnByLHAseGJ1ZixwMixzZngsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICAgICAgICAgICAg ICBja21ha21zZyhwZHNmeCw2NCxwMixzZngsTlVMTCxOVUxMKTsKLSNlbmRpZiAvKiBDT01NRU5U ICovCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0jaWZkZWYgQ0tfVEFQSQotICAg IGlmICh0dHRhcGkgJiYgICAgICAgICAgICAgICAgICAgICAgIC8qIFRBUEkgcGVyZm9ybXMgdGhl IGNvbnZlcnNpb25zICovCi0gICAgICAgICF0YXBpcGFzcyAmJgotICAgICAgICB0YXBpY29udiA9 PSBDS19BVVRPIHx8Ci0gICAgICAgIHRhcGljb252ID09IENLX09OCi0gICAgICAgICkgewotICAg ICAgICBwID0gTlVMTDsKLSAgICAgICAgZGlhbHR5cGUgPSAtMjsKLSAgICAgICAgaWYgKCFja3Rh cGlDb252ZXJ0UGhvbmVOdW1iZXIoZG5fcFtrXSwmcCkpCi0gICAgICAgICAgcmV0dXJuKC0xKTsK LSAgICAgICAgbWFrZXN0cigmZG5fcDJba10sIHApOwotICAgICAgICBpZiAocCkgZnJlZShwKTsK LSAgICAgICAgcmV0dXJuKDApOwotICAgIH0gZWxzZSB7Ci0jZW5kaWYgLyogQ0tfVEFQSSAqLwot ICAgICAgICBtYWtlc3RyKCZkbl9wMltrXSwgb3V0YnVmKTsKLSNpZmRlZiBDS19UQVBJCi0gICAg fQotI2VuZGlmIC8qIENLX1RBUEkgKi8KLSAgICBkaWFsdHlwZSA9IHdoYXQ7Ci0gICAgcmV0dXJu KDApOwotfQotCi1zdGF0aWMgaW50Ci1kZGN2dChzLCBmLCBuKSBjaGFyICogczsgRklMRSAqIGY7 IGludCBuOyB7IC8qIERpYWwgRGlyZWN0b3J5IENvbnZlcnQgKi8KLSAgICBjaGFyIGxpbmVidWZb MTAyNF0sICpzMjsgICAgICAgICAgICAvKiBCdWZmZXJzIGFuZCBwb2ludGVycyAqLwotI2lmZGVm IFZNUwotICAgIGNoYXIgKiB0ZW1wID0gTlVMTDsKLSNlbmRpZiAvKiBWTVMgKi8KLSAgICBjaGFy ICppbmZvWzhdOyAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVycyB0byB3b3JkcyBmcm9t IGVudHJ5ICovCi0gICAgRklMRSAqIGYyID0gTlVMTDsKLSAgICBpbnQgeCwgcmM7Ci0gICAgcmMg PSAtMTsKLQotICAgIGRlYnVnKEYxMTAsImRkY3Z0IGZpbGUiLHMsMCk7Ci0KLSAgICBpZiAoIXMg fHwgIWYpICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBmaWxlbmFtZSBvciBmaWxlICovCi0g ICAgICByZXR1cm4oLTEpOwotICAgIGlmICghKnMpCi0KLSAgICBmY2xvc2UoZik7Ci0gICAgem5l d24ocywmczIpOyAgICAgICAgICAgICAgICAgICAgICAgLyogczIgPSBhZGRyZXNzIG9mIHN0YXRp YyBidWZmZXIgKi8KLSAgICBkZWJ1ZyhGMTEwLCJkZGN2dCBuZXduYW1lIixzMiwwKTsKLQotI2lm ZGVmIFZNUwotICAgIC8qIEluIFZNUywgem5ld24oKSByZXR1cm5zIHRoZSBzYW1lIGZpbGUgbmFt ZSB3aXRoIGEgbmV3IHZlcnNpb24gbnVtYmVyICovCi0gICAgbWFrZXN0cigmdGVtcCxzKTsgICAg ICAgICAgICAgICAgICAgLyogU3dhcCAtIG90aGVyd2lzZSB0aGUgbmV3ICovCi0gICAgcyA9IHMy OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdmVyc2lvbiBoYXMgdGhlIG9sZGVyIHZl cnNpb24gKi8KLSAgICBzMiA9IHRlbXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1i ZXIuLi4gKi8KLSAgICBkZWJ1ZyhGMTEwLCJkZGN2dCBhZnRlciBzd2FwIHMiLHMsMCk7Ci0gICAg ZGVidWcoRjExMCwiZGRjdnQgYWZ0ZXIgc3dhcCBzMiIsczIsMCk7Ci0gICAgbWFrZXN0cigmKGRp YWxkaXJbbl0pLHMpOyAgICAgICAgICAgLyogTmV3IGZpbGUgZ2V0cyBuZXcgdmVyc2lvbiBudW1i ZXIgKi8KLSAgICBkZWJ1ZyhGMTEwLCJkZGN2dCBhZnRlciBtYWtlc3RyIHMyIixzMiwwKTsKLSAg ICBkZWJ1ZyhGMTExLCJkZGN2dCBkaWFsZGlyW25dIixkaWFsZGlyW25dLG4pOwotI2Vsc2UKLSAg ICBpZiAoenJlbmFtZShzLHMyKSA8IDApIHsgICAgICAgICAgICAvKiBOb3QgVk1TIC0gcmVuYW1l IG9sZCBmaWxlICovCi0gICAgICAgIHBlcnJvcihzMik7ICAgICAgICAgICAgICAgICAgICAgLyog dG8gbmV3ICh3aWVyZCkgbmFtZS4gKi8KLSAgICAgICAgZ290byBkZGV4aXQ7Ci0gICAgfQotI2Vu ZGlmIC8qIFZNUyAqLwotICAgIGRlYnVnKEYxMTAsImRkY3Z0IHMyIChvbGQpIixzMiwwKTsKLSAg ICBpZiAoKGYgPSBmb3BlbihzMiwiciIpKSA9PSBOVUxMKSB7ICAvKiBSZW9wZW4gb2xkIGZpbGUg d2l0aCB3aWVyZCBuYW1lICovCi0gICAgICAgIGRlYnVnKEYxMTAsImRkY3Z0IHMyIG9wZW4gZXJy b3IiLGNrX2VycnN0cigpLDApOwotICAgICAgICBkaXJsaW5lID0gMDsgICAgICAgICAgICAgICAg ICAgIC8qIChvciBpbiBWTVMsIG9sZCB2ZXJzaW9uKSAqLwotICAgICAgICBwZXJyb3IoczIpOwot ICAgICAgICBnb3RvIGRkZXhpdDsKLSAgICB9Ci0gICAgZGVidWcoRjExMCwiZGRjdnQgZm9wZW4o czIpIE9LIixzMiwwKTsKLQotICAgIGRlYnVnKEYxMTAsImRkY3Z0IHMgKG5ldykiLHMsMCk7Ci0g ICAgaWYgKChmMiA9IGZvcGVuKHMsInciKSkgPT0gTlVMTCkgeyAgLyogQ3JlYXRlIG5ldyBmaWxl IHdpdGggb2xkIG5hbWUgKi8KLSAgICAgICAgZGVidWcoRjExMCwiZGRjdnQgcyBvcGVuIGVycm9y Iixja19lcnJzdHIoKSwwKTsKLSAgICAgICAgcGVycm9yKHMpOyAgICAgICAgICAgICAgICAgICAg ICAvKiAob3IgaW4gVk1TLCBuZXcgdmVyc2lvbikgKi8KLSAgICAgICAgZ290byBkZGV4aXQ7Ci0g ICAgfQotICAgIGRlYnVnKEYxMTAsImRkY3Z0IGZvcGVuKHMpIE9LIixzLDApOwotCi0gICAgcHJp bnRmKCJcblNhdmluZyBvbGQgZGlyZWN0b3J5IGFzICVzLlxuQ29udmVydGluZyAlcy4uLiIsczIs cyk7Ci0gICAgZnByaW50ZihmMiwiOyAlcyAtIEtlcm1pdCBkaWFsaW5nIGRpcmVjdG9yeVxuIiwg cyk7Ci0gICAgZnByaW50ZihmMiwiJS0xNnMgJS0yMHMgOyAlNXMgJS02cyA7ICVzXG4iLAotICAg ICAgICAgICAgICAgIjsgTmFtZSIsIk51bWJlciIsIlNwZWVkIiwiUGFyaXR5IiwiQ29tbWVudCIK LSAgICAgICAgICAgICAgICk7Ci0KLSAgICB3aGlsZSAoMSkgewotICAgICAgICBsaW5lYnVmWzBd ID0gTlVMOyAgICAgICAgICAgICAgIC8qIFJlYWQgYSBsaW5lICovCi0gICAgICAgIGlmIChmZ2V0 cyhsaW5lYnVmLDEwMjMsZikgPT0gTlVMTCkKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVi dWcoRjExMCwiZGRjdnQgbGluZWJ1ZiIsbGluZWJ1ZiwwKTsKLSAgICAgICAgaWYgKCFsaW5lYnVm WzBdKSB7ICAgICAgICAgICAgICAvKiBFbXB0eSBsaW5lICovCi0gICAgICAgICAgICBmcHJpbnRm KGYyLCJcbiIpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgeCA9 IChpbnQpIHN0cmxlbihsaW5lYnVmKTsgICAgICAvKiBTdHJpcCBsaW5lIHRlcm1pbmF0b3IsICov Ci0gICAgICAgIHdoaWxlICh4LS0gPiAwKSB7ICAgICAgICAgICAgICAgLyogaWYgYW55LiAqLwot ICAgICAgICAgICAgaWYgKGxpbmVidWZbeF0gPD0gU1ApCi0gICAgICAgICAgICAgIGxpbmVidWZb eF0gPSBOVUw7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICB9Ci0gICAgICAgIHh3b3JkcyhsaW5lYnVmLDUsaW5mbywxKTsgICAgICAgLyogUGFyc2UgaXQg dGhlIG9sZCB3YXkgKi8KLSAgICAgICAgZm9yICh4ID0gMTsgeCA8IDY7IHgrKykKLSAgICAgICAg ICBpZiAoIWluZm9beF0pIGluZm9beF0gPSAiIjsKLSAgICAgICAgZnByaW50ZihmMiwiJS0xNnMg JS0yMHMgOyAlNXMgJS02cyAlc1xuIiwKLSAgICAgICAgICAgICAgIGluZm9bMV0saW5mb1syXSxp bmZvWzNdLGluZm9bNF0saW5mb1s1XQotICAgICAgICAgICAgICAgKTsKLSAgICB9Ci0gICAgcHJp bnRmKCIgT0tcblxuIik7Ci0gICAgcmMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogU3VjY2VzcyAqLwotICBkZGV4aXQ6Ci0gICAgaWYgKGYpIGZjbG9zZShmKTsKLSAgICBpZiAo ZjIpIGZjbG9zZShmMik7Ci0jaWZkZWYgVk1TCi0gICAgaWYgKHRlbXApIGZyZWUodGVtcCk7Ci0j ZW5kaWYgLyogVk1TICovCi0gICAgcmV0dXJuKHJjKTsKLX0KLQotaW50ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHMgPSBuYW1lIHRvIGxvb2sgdXAgICAqLwotI2lmZGVm IENLX0FOU0lDICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGN4ID0gaW5kZXggb2YgY29tbWFu ZCAqLwotbHVkaWFsKGNoYXIgKnMsIGludCBjeCkgICAgICAgICAgICAgICAgIC8qIChESUFMLCBM T09LVVAsIGV0YykgICAqLwotI2Vsc2UKLWx1ZGlhbChzLCBjeCkgY2hhciAqczsgaW50IGN4Owot I2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBsdWRpYWwgKi8gewotCi0gICAgaW50IGRkLCBuMSwg bjIsIG4zLCBpLCBqLCB0OyAgICAgICAgLyogV29ya2VycyAqLwotICAgIGludCBvbGRkaXIsIG5l d2Rpciwgb2xkZW50cnksIG5ld2VudHJ5OwotICAgIGludCBwYXNzID0gMDsKLSAgICBpbnQgb2xk ZmxnID0gMDsKLSAgICBpbnQgYW1iaWd1b3VzID0gMDsgICAgICAgICAgICAgICAgICAvKiBGbGFn IGZvciBsb29rdXAgd2FzIGFtYmlndW91cyAqLwotICAgIGNoYXIgKmluZm9bN107ICAgICAgICAg ICAgICAgICAgICAgIC8qIFBvaW50ZXJzIHRvIHdvcmRzIGZyb20gZW50cnkgKi8KLSAgICBjaGFy ICpwcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIGVsZW1lbnQgb2Yg YXJyYXkgKi8KLSAgICBGSUxFICogZjsKLSAgICBjaGFyICpsaW5lOyAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBGaWxlIGlucHV0IGJ1ZmZlciAqLwotCi0vKiAjZGVmaW5lIExVREVCVUcgKi8K LQotI2lmZGVmIExVREVCVUcKLWludCB6eiA9IDE7Ci0jZW5kaWYgLyogTFVERUJVRyAqLwotCi0g ICAgaWYgKCFzIHx8IG5kaWFsZGlyIDwgMSkgICAgICAgICAgICAgLyogVmFsaWRhdGUgYXJndW1l bnRzICovCi0gICAgICByZXR1cm4oLTEpOwotCi0gICAgaWYgKChuMSA9IChpbnQpIHN0cmxlbihz KSkgPCAxKSAgICAgLyogTGVuZ3RoIG9mIHN0cmluZyB0byBsb29rIHVwICovCi0gICAgICByZXR1 cm4oLTEpOwotCi0gICAgaWYgKCEobGluZSA9IG1hbGxvYygxMDI0KSkpICAgICAgICAgLyogQWxs b2NhdGUgaW5wdXQgYnVmZmVyICovCi0gICAgICByZXR1cm4oLTEpOwotCi0jaWZkZWYgTFVERUJV RwotaWYgKHp6KSBwcmludGYoIkxVRElBTCAxIHNbJXNdLCBuMT0lZFxuIixzLG4xKTsKLSNlbmRp ZiAvKiBMVURFQlVHICovCi0KLSAgICBwYXNzID0gMDsKLSAgbHVfYWdhaW46Ci0gICAgZiA9IE5V TEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGlhbCBkaXJlY3RvcnkgZmlsZSBkZXNj cmlwdG9yICovCi0gICAgdCA9IGRuY291bnQgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogRGlh bC1udW1iZXIgbWF0Y2ggY291bnQgKi8KLSAgICBkZCA9IDA7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBEaXJlY3RvcnkgY291bnRlciAqLwotICAgIG9sZGRpciA9IDA7Ci0gICAgbmV3 ZGlyID0gMDsKLS8qCi0gIFdlIG5lZWQgdG8gcmVjb2duaXplIGJvdGggb2xkLSBhbmQgbmV3LXN0 eWxlIGRpcmVjdG9yaWVzLgotICBCdXQgd2UgY2FuJ3QgYWxsb3cgb2xkLXN0eWxlIGFuZCBuZXct c3R5bGUgZW50cmllcyBpbiB0aGUgc2FtZQotICBkaXJlY3RvcnkgYmVjYXVzZSB0aGVyZSBpcyBu byB3YXkgdG8gdGVsbCBmb3Igc3VyZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuCi0gIGFuIG9sZC1z dHlsZSBlbnRyeSBsaWtlIHRoaXM6Ci0KLSAgICBmb28gIDU1NTEyMTIgIDk2MDAKLQotICBhbmQg YSBuZXctc3R5bGUgbGl0ZXJhbCBlbnRyeSBsaWtlIHRoaXM6Ci0KLSAgICBmb28gIDU1NSA5NjAw Ci0KLSAgSS5lLiBpcyB0aGUgIjk2MDAiIGEgc3BlZWQsIG9yIHBhcnQgb2YgdGhlIHBob25lIG51 bWJlcj8KLSovCi0gICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2Ug bWFrZSBvbmUgcGFzcyAqLwotICAgICAgICBpZiAoIWYpIHsgICAgICAgICAgICAgICAgICAgICAg IC8qIERpcmVjdG9yeSBub3Qgb3BlbiAqLwotICAgICAgICAgICAgaWYgKGRkID49IG5kaWFsZGly KSAgICAgICAgIC8qIE5vIGRpcmVjdG9yaWVzIGxlZnQ/ICovCi0gICAgICAgICAgICAgIGJyZWFr OyAgICAgICAgICAgICAgICAgICAgLyogRG9uZS4gKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTEs Imx1ZGlhbCBkaWFsZGlyW2RkXSIsZGlhbGRpcltkZF0sZGQpOwotICAgICAgICAgICAgaWYgKChm ID0gZm9wZW4oZGlhbGRpcltkZF0sInIiKSkgPT0gTlVMTCkgeyAvKiBPcGVuIGl0ICovCi0gICAg ICAgICAgICAgICAgcGVycm9yKGRpYWxkaXJbZGRdKTsgICAgLyogQ2FuJ3QsIHByaW50IG1lc3Nh Z2Ugc2F5aW5nIHdoeSAqLwotICAgICAgICAgICAgICAgIGlmIChsaW5lKSB7Ci0gICAgICAgICAg ICAgICAgICAgIGZyZWUobGluZSk7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBOVUxMOwot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkZCsrOyAgICAgICAgICAgICAgICAg ICAvKiBHbyBvbiB0byBuZXh0IG9uZSwgaWYgYW55Li4uICovCi0gICAgICAgICAgICAgICAgY29u dGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkaXJsaW5lID0gMDsgICAgICAgICAg ICAgICAgLyogRGlyZWN0b3J5IGZpbGUgbGluZSBudW1iZXIgKi8KLSAgICAgICAgICAgIGlmIChk aWFsZHB5ICYmICFwYXNzKQotICAgICAgICAgICAgICBwcmludGYoIk9wZW5pbmc6ICVzLi4uXG4i LGRpYWxkaXJbZGRdKTsKLSAgICAgICAgICAgIGRkKys7Ci0gICAgICAgICAgICBpZiAoIW9sZGZs Zykgb2xkZGlyID0gMDsKLSAgICAgICAgICAgIG5ld2RpciA9IDA7Ci0gICAgICAgIH0KLSAgICAg ICAgb2xkZW50cnkgPSAwOwotICAgICAgICBuZXdlbnRyeSA9IDA7Ci0gICAgICAgIGxpbmVbMF0g PSBOVUw7Ci0gICAgICAgIGlmIChnZXRuY3QobGluZSwxMDIzLGYsMSkgPCAwKSB7IC8qIFJlYWQg YSBsaW5lICovCi0gICAgICAgICAgICBpZiAoZikgeyAgICAgICAgICAgICAgICAgICAgLyogZiBj YW4gYmUgY2xvYmJlcmVkISAqLwotICAgICAgICAgICAgICAgIGZjbG9zZShmKTsgICAgICAgICAg ICAgIC8qIENsb3NlIHRoZSBmaWxlICovCi0gICAgICAgICAgICAgICAgZiA9IE5VTEw7ICAgICAg ICAgICAgICAgLyogSW5kaWNhdGUgbmV4dCBvbmUgbmVlZHMgb3BlbmluZyAqLwotICAgICAgICAg ICAgICAgIG9sZGZsZyA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb250aW51ZTsK LSAgICAgICAgfQotICAgICAgICBpZiAoIWxpbmVbMF0pICAgICAgICAgICAgICAgICAgIC8qIEVt cHR5IGxpbmUgKi8KLSAgICAgICAgICBjb250aW51ZTsKLSNpZmRlZiBMVURFQlVHCi1pZiAoenop IHByaW50ZigiTFVESUFMIDIgc1slc11cbiIscyk7Ci0jZW5kaWYgLyogTFVERUJVRyAqLwotCi0g ICAgICAgIC8qIE1ha2UgYSBjb3B5IGFuZCBwYXJzZSBpdCB0aGUgb2xkIHdheSAqLwotICAgICAg ICAvKiBBIGNvcHkgaXMgbmVlZGVkIGJlY2F1c2UgeHdvcmRzKCkgcG9rZXMgTlVMcyBpbnRvIHRo ZSBzdHJpbmcgKi8KLQotICAgICAgICBpZiAoKHBwID0gbWFsbG9jKChpbnQpc3RybGVuKGxpbmUp ICsgMSkpKSB7Ci0gICAgICAgICAgICBzdHJjcHkocHAsbGluZSk7ICAgICAgICAgICAgLyogc2Fm ZSAqLwotICAgICAgICAgICAgeHdvcmRzKHBwLDUsaW5mbywwKTsgICAgICAgIC8qIFBhcnNlIGl0 IHRoZSBvbGQgd2F5ICovCi0KLSNpZmRlZiBMVURFQlVHCi1pZiAoenopIHByaW50ZigiTFVESUFM IDMgc1slc11cbiIscyk7Ci0jZW5kaWYgLyogTFVERUJVRyAqLwotCi0gICAgICAgICAgICBpZiAo IWluZm9bMV0pCi0gICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKCppbmZv WzFdID09ICc7JykgeyAgICAgIC8qIElmIGZ1bGwtbGluZSBjb21tZW50LCAqLwotICAgICAgICAg ICAgICAgIG5ld2RpciA9IDE7ICAgICAgICAgICAgIC8qIChvbmx5IG5ldyBkaXJlY3RvcmllcyBo YXZlIHRoZW0pICovCi0gICAgICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgICAgLyog a2VlcCByZWFkaW5nLiAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFpbmZvWzJd KQotICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICgqaW5mb1syXSA9PSAn KycpCi0gICAgICAgICAgICAgIG5ld2VudHJ5ID0gMTsKLSAgICAgICAgICAgIGlmIChpbmZvWzRd KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCgqaW5mb1s0XSA9PSAnPScpIHx8Ci0gICAgICAgICAg ICAgICAgICAgICFja3N0cmNtcChpbmZvWzRdLCJub25lIiwgNCwwKSB8fAotICAgICAgICAgICAg ICAgICAgICAhY2tzdHJjbXAoaW5mb1s0XSwiZXZlbiIsIDQsMCkgfHwKLSAgICAgICAgICAgICAg ICAgICAgIWNrc3RyY21wKGluZm9bNF0sInNwYWNlIiw1LDApIHx8Ci0gICAgICAgICAgICAgICAg ICAgICFja3N0cmNtcChpbmZvWzRdLCJtYXJrIiwgNCwwKSB8fAotICAgICAgICAgICAgICAgICAg ICAhY2tzdHJjbXAoaW5mb1s0XSwib2RkIiwgIDMsMCkKLSAgICAgICAgICAgICAgICAgICAgKQot ICAgICAgICAgICAgICAgICAgb2xkZW50cnkgPSAxOwotICAgICAgICAgICAgfQotICAgICAgICB9 Ci0gICAgICAgIGlmIChwcCkgewotICAgICAgICAgICAgZnJlZShwcCk7Ci0gICAgICAgICAgICBw cCA9IE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBDaGVjayBjb25zaXN0ZW5jeSAqLwot Ci0gICAgICAgIGlmICgob2xkZW50cnkgfHwgb2xkZGlyKSAmJiAobmV3ZW50cnkgfHwgbmV3ZGly KSkgewotICAgICAgICAgICAgcHJpbnRmKAotIlxuRVJST1I6IFlvdSBzZWVtIHRvIGhhdmUgb2xk LSBhbmQgbmV3LWZvcm1hdCBlbnRyaWVzIG1peGVkIGluIHlvdXJcbiIpOwotICAgICAgICAgICAg cHJpbnRmKAotImRpYWxpbmcgZGlyZWN0b3J5LiAgWW91J2xsIGhhdmUgdG8gZWRpdCBpdCBieSBo YW5kIHRvIGNvbnZlcnQgaXQgdG8gdGhlXG4iKTsKLSNpZm5kZWYgTk9IRUxQCi0gICAgICAgICAg ICBwcmludGYoIm5ldyBmb3JtYXQuICBUeXBlIEhFTFAgRElBTCBmb3IgZnVydGhlciBpbmZvcm1h dGlvbi5cblxuIik7Ci0jZWxzZQotICAgICAgICAgICAgcHJpbnRmKCJuZXcgZm9ybWF0LlxuXG4i KTsKLSNlbmRpZiAvKiBOT0hFTFAgKi8KLSAgICAgICAgICAgIGlmIChsaW5lKSB7Ci0gICAgICAg ICAgICAgICAgZnJlZShsaW5lKTsKLSAgICAgICAgICAgICAgICBsaW5lID0gTlVMTDsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg KCFvbGRkaXIgJiYgb2xkZW50cnkpIHsKLSAgICAgICAgICAgIGludCBjb252ZXJ0ID0gMDsKLSAg ICAgICAgICAgIG9sZGRpciA9IDE7Ci0gICAgICAgICAgICBpZiAoZGlhbGN2dCA9PSAyKSB7ICAg ICAgICAgLyogMiA9PSBBU0sgKi8KLSAgICAgICAgICAgICAgICBzcHJpbnRmKHRtcGJ1ZiwKLSJX QVJOSU5HOiBPbGQtc3R5bGUgZGlhbGluZyBkaXJlY3RvcnkgZGV0ZWN0ZWQ6XG4lcyIsIGxpbmUp OwotCQljb252ZXJ0ID0gdXFfb2sodG1wYnVmLAotCQkJCSJTaGFsbCBJIGNvbnZlcnQgaXQgZm9y IHlvdT8gIiwzLE5VTEwsMCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgY29u dmVydCA9IGRpYWxjdnQ7Ci0gICAgICAgICAgICBpZiAoY29udmVydCkgewotICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTEsImx1ZGlhbCBjYWxsaW5nIGRkY3Z0IixkaWFsZGlyW2RkLTFdLGRkKTsK LSAgICAgICAgICAgICAgICBpZiAoZGRjdnQoZGlhbGRpcltkZC0xXSxmLGRkLTEpIDwgMCkgewot ICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJsdWRpYWwgZGRjdnQgZmFpbGVkIixkaWFs ZGlyW2RkLTFdLGRkKTsKLSAgICAgICAgICAgICAgICAgICAgb2xkZmxnID0gMTsKLSAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKAotIiAgU29ycnksIGNhbid0IGNvbnZlcnQuIik7Ci0gICAgICAg ICAgICAgICAgICAgIHByaW50ZigKLSIgIFdpbGwgaWdub3JlIHNwZWVkIGFuZCBwYXJpdHkgZmll bGRzLCBjb250aW51aW5nLi4uXG5cbiIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg ICAgICAgICAgICAgICAgIG9sZGRpciA9IG5ld2RpciA9IDA7Ci0gICAgICAgICAgICAgICAgICAg IGRlYnVnKEYxMTEsImx1ZGlhbCBkZGN2dCBvayIsZGlhbGRpcltkZC0xXSxkZCk7Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRkLS07Ci0gICAgICAgICAgICAgICAgZiA9IE5V TEw7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg ICAgICAgICAgICAgIGlmIChkaWFsY3Z0ID09IDIpCi0gICAgICAgICAgICAgICAgICBwcmludGYo Ci0iICBPSywgd2lsbCBpZ25vcmUgc3BlZWQgYW5kIHBhcml0eSBmaWVsZHMsIGNvbnRpbnVpbmcu Li5cblxuIik7Ci0gICAgICAgICAgICAgICAgb2xkZGlyID0gMTsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgfQotCi0jaWZkZWYgTFVERUJVRwotaWYgKHp6KSBwcmludGYoIkxVRElBTCBYWCBzWyVz XSwgbjE9JWRcbiIscyxuMSk7Ci0jZW5kaWYgLyogTFVERUJVRyAqLwotCi0gICAgICAgIC8qIE5v dyBwYXJzZSBhZ2FpbiBmb3IgcmVhbCAqLwotCi0gICAgICAgIGlmIChvbGRlbnRyeSkgICAgICAg ICAgICAgICAgICAgLyogUGFyc2UgaXQgdGhlIG9sZCB3YXkgKi8KLSAgICAgICAgICB4d29yZHMo bGluZSw1LGluZm8sMCk7Ci0gICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogUGFyc2UgaXQgdGhlIG5ldyB3YXkgKi8KLSAgICAgICAgICB4d29yZHMobGluZSwyLGluZm8s MSk7Ci0KLSNpZmRlZiBMVURFQlVHCi1pZiAoenopIHByaW50ZigiTFVESUFMIFlZIHNbJXNdLCBu MT0lZFxuIixzLG4xKTsKLWlmICh6eikgcHJpbnRmKCIlcyBbJXNdXG4iLGluZm9bMV0saW5mb1sy XSk7Ci0jZW5kaWYgLyogTFVERUJVRyAqLwotCi0gICAgICAgIGlmIChpbmZvWzFdKSB7ICAgICAg ICAgICAgICAgICAgLyogRmlyc3Qgd29yZCBpcyBlbnRyeSBuYW1lICovCi0gICAgICAgICAgICBp ZiAoKG4zID0gKGludCkgc3RybGVuKGluZm9bMV0pKSA8IDEpIC8qIEl0cyBsZW5ndGggKi8KLSAg ICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgICAgICAvKiBJZiBubyBmaXJzdCB3b3Jk LCBrZWVwIHJlYWRpbmcuICovCi0gICAgICAgICAgICBpZiAobjMgPCBuMSkgICAgICAgICAgICAg ICAgLyogU2VhcmNoIG5hbWUgaXMgbG9uZ2VyICovCi0gICAgICAgICAgICAgIGNvbnRpbnVlOyAg ICAgICAgICAgICAgICAgLyogQ2FuJ3QgcG9zc2libHkgbWF0Y2ggKi8KLSAgICAgICAgICAgIGlm IChhbWJpZ3VvdXMgJiYgbjMgIT0gbjEpCi0gICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0jaWZk ZWYgTFVERUJVRwotaWYgKHp6KSBwcmludGYoIk1BVENISU5HOiBbJXNdIFslc10sIG4xPSVkXG4i LHMsaW5mb1sxXSxuMSk7Ci0jZW5kaWYgLyogTFVERUJVRyAqLwotCi0gICAgICAgICAgICBpZiAo Y2tzdHJjbXAocyxpbmZvWzFdLG4xLDApKSAvKiBDYXNlbGVzcyBzdHJpbmcgY29tcGFyaXNvbiAq LwotICAgICAgICAgICAgICBjb250aW51ZTsKLQotI2lmZGVmIExVREVCVUcKLWlmICh6eikgcHJp bnRmKCJNQVRDSCBPSzogWyVzXSBbJXNdLCBuMT0lZFxuIixzLGluZm9bMV0sbjEpOwotI2VuZGlm IC8qIExVREVCVUcgKi8KLQotICAgICAgICAgICAgaWYgKCFpbmZvWzJdKSAgICAgICAgICAgICAg IC8qIE5vIHBob25lIG51bWJlciBnaXZlbiAqLwotICAgICAgICAgICAgICBjb250aW51ZTsKLSAg ICAgICAgICAgIGlmICgobjIgPSAoaW50KSBzdHJsZW4oaW5mb1syXSkpIDwgMSkgLyogTGVuZ3Ro IG9mIHBob25lIG51bWJlciAqLwotICAgICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAg ICAgIC8qIElnbm9yZSBlbXB0eSBwaG9uZSBudW1iZXJzICovCi0KLSAgICAgICAgICAgIC8qIEdv dCBvbmUgKi8KLQotICAgICAgICAgICAgaWYgKCEocHAgPSAoY2hhciAqKW1hbGxvYyhuMiArIDEp KSkgeyAvKiBBbGxvY2F0ZSBzdG9yYWdlIGZvciBpdCAqLwotICAgICAgICAgICAgICAgIHByaW50 ZigiP2ludGVybmFsIGVycm9yIC0gbHVkaWFsIG1hbGxvYyAxXG4iKTsKLSAgICAgICAgICAgICAg ICBpZiAobGluZSkgewotICAgICAgICAgICAgICAgICAgICBmcmVlKGxpbmUpOwotICAgICAgICAg ICAgICAgICAgICBsaW5lID0gTlVMTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgZG5jb3VudCA9IDA7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIHN0cmNweShwcCxpbmZvWzJdKTsgICAgICAgICAvKiBzYWZlICovCi0K LSAgICAgICAgICAgIGlmIChkbmNvdW50ID4gTUFYRE5VTVMpIHsKLSAgICAgICAgICAgICAgICBw cmludGYoIldhcm5pbmc6ICVkIG1hdGNoZXMgZm91bmQsICVkIG1heFxuIiwKLSAgICAgICAgICAg ICAgICAgICAgICAgZG5jb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgTUFYRE5VTVMKLSAg ICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICBkbmNvdW50ID0gTUFYRE5V TVM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBk bl9wW2RuY291bnQrK10gPSBwcDsgICAgICAgLyogQWRkIHBvaW50ZXIgdG8gYXJyYXkuICovCi0g ICAgICAgICAgICBpZiAoZG5jb3VudCA9PSAxKSB7ICAgICAgICAgLyogRmlyc3Qgb25lLi4uICov Ci0gICAgICAgICAgICAgICAgaWYgKGRfbmFtZSkgZnJlZShkX25hbWUpOwotICAgICAgICAgICAg ICAgIGlmICghKGRfbmFtZSA9IChjaGFyICopbWFsbG9jKG4zICsgMSkpKSB7IC8qIFNhdmUgaXRz IG5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/aW50ZXJuYWwgZXJyb3IgLSBs dWRpYWwgbWFsbG9jIDJcbiIpOwotICAgICAgICAgICAgICAgICAgICBpZiAobGluZSkgewotICAg ICAgICAgICAgICAgICAgICAgICAgZnJlZShsaW5lKTsKLSAgICAgICAgICAgICAgICAgICAgICAg IGxpbmUgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg IGRuY291bnQgPSAwOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICB0ID0gbjM7ICAgICAgICAgICAgICAgICAvKiBBbmQg aXRzIGxlbmd0aCAqLwotICAgICAgICAgICAgICAgIHN0cmNweShkX25hbWUsaW5mb1sxXSk7IC8q IHNhZmUgKi8KLSAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiBTZWNv bmQgb3Igc3Vic2VxdWVudCBvbmUgKi8KLQotI2lmZGVmIExVREVCVUcKLSAgICAgICAgICAgICAg ICBpZiAoenopCi0gICAgICAgICAgICAgICAgICBwcmludGYoImRfbmFtZT1bJXNdLGluZm9bMV09 JXMsdD1bJWRdXG4iLGRfbmFtZSxpbmZvWzFdLHQpOwotI2VuZGlmIC8qIExVREVCVUcgKi8KLQot ICAgICAgICAgICAgICAgIGlmICgoaW50KSBzdHJsZW4oaW5mb1sxXSkgPT0gdCkgLyogTGVuZ3Ro cyBjb21wYXJlICovCi0gICAgICAgICAgICAgICAgICBpZiAoIWNrc3RyY21wKGRfbmFtZSxpbmZv WzFdLHQsMCkpIC8qIENhc2VsZXNzIGNvbXBhcmUgT0sgKi8KLSAgICAgICAgICAgICAgICAgICAg Y29udGludWU7Ci0KLSAgICAgICAgICAgICAgICAvKiBOYW1lIGdpdmVuIGJ5IHVzZXIgbWF0Y2hl cyBlbnRyaWVzIHdpdGggZGlmZmVyZW50IG5hbWVzICovCi0KLSAgICAgICAgICAgICAgICBpZiAo YW1iaWd1b3VzKSAgICAgICAgICAvKiBCZWVuIGhlcmUgYmVmb3JlICovCi0gICAgICAgICAgICAg ICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGFtYmlndW91cyA9IDE7ICAgICAgICAgIC8q IE5vdyBhbiBleGFjdCBtYXRjaCBpcyByZXF1aXJlZCAqLwotICAgICAgICAgICAgICAgIGZvciAo aiA9IDA7IGogPCBkbmNvdW50OyBqKyspIHsgLyogQ2xlYW4gb3V0IHByZXZpb3VzIGxpc3QgKi8K LSAgICAgICAgICAgICAgICAgICAgaWYgKGRuX3Bbal0pIHsKLSAgICAgICAgICAgICAgICAgICAg ICAgIGZyZWUoZG5fcFtqXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkbl9wW2pdID0gTlVM TDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICBwYXNzKys7ICAgICAgICAgICAgICAgICAvKiBTZWNvbmQgcGFzcy4uLiAqLwotICAgICAg ICAgICAgICAgIGdvdG8gbHVfYWdhaW47ICAgICAgICAgIC8qIERvIGl0IGFsbCBvdmVyIGFnYWlu LiAqLwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChsaW5lKSBmcmVl KGxpbmUpOwotICAgIGlmIChkbmNvdW50ID09IDAgJiYgYW1iaWd1b3VzKSB7Ci0gICAgICAgIHBy aW50ZigiIExvb2t1cDogXCIlc1wiIC0gYW1iaWd1b3VzJXNcbiIsCi0gICAgICAgICAgICAgICBz LAotICAgICAgICAgICAgICAgY3ggPT0gWFhMT09LID8gIiIgOiAiIC0gZGlhbGluZyBza2lwcGVk IgotICAgICAgICAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuKC0yKTsKLSAgICB9Ci0gICAgcmV0 dXJuKGRuY291bnQpOwotfQotCi1jaGFyICoKLXBuY3Z0KHMpIGNoYXIgKnM7IHsgICAgICAgICAg ICAgICAgICAgICAvKiBQaG9uZSBudW1iZXIgY29udmVyc2lvbiAqLwotICAgIGNoYXIgKnAgPSBO VUxMOyAgICAgICAgICAgICAgICAgICAgIC8qIChqdXN0IGEgd3JhcHBlciBmb3IgZG5jdnQoKSAq LwotICAgIGNoYXIgKnEgPSBOVUxMOwotICAgIHN0YXRpYyBjaGFyIHBuYnVmWzEyOF07Ci0gICAg bWFrZXN0cigmcCxkbl9wWzBdKTsgICAgICAgICAgICAgICAgLyogU2F2ZSB0aGVzZSBpbiBjYXNl IHRoZXkgYXJlICovCi0gICAgbWFrZXN0cigmcSxkbl9wMlswXSk7ICAgICAgICAgICAgICAgLyog YmVpbmcgdXNlZCAqLwotICAgIG1ha2VzdHIoJmRuX3BbMF0scyk7ICAgICAgICAgICAgICAgIC8q IENvcHkgdGhlIGFyZ3VtZW50IHN0cmluZyB0byBoZXJlICovCi0gICAgZG5jdnQoMCxYWExPT0ss MSwxKTsgICAgICAgICAgICAgICAgLyogQ29udmVydCBpdCAqLwotICAgIGlmICghZG5fcDJbMF0p ICAgICAgICAgICAgICAgICAgICAgIC8qIFB1dCByZXN1bHQgd2hlcmUgY2FuIHJldHVybiBpdCAq LwotICAgICAgcG5idWZbMF0gPSBOVUw7Ci0gICAgZWxzZQotICAgICAgY2tzdHJuY3B5KHBuYnVm LGRuX3AyWzBdLDEyNyk7Ci0gICAgbWFrZXN0cigmZG5fcFswXSxwKTsgICAgICAgICAgICAgICAg LyogUmVzdG9yZSB0aGVzZSAqLwotICAgIG1ha2VzdHIoJmRuX3AyWzBdLHEpOwotICAgIG1ha2Vz dHIoJnAsTlVMTCk7ICAgICAgICAgICAgICAgICAgIC8qIEZyZWUgdGhlc2UgKi8KLSAgICBtYWtl c3RyKCZxLE5VTEwpOwotICAgIHJldHVybigoY2hhciAqKXBuYnVmKTsKLX0KLQotaW50Ci1kb2Rp YWwoY3gpIGludCBjeDsgeyAgICAgICAgICAgICAgICAgICAgLyogRElBTCBvciBSRURJQUwgKi8K LSAgICBpbnQgaSA9IDAsIHggPSAwOyAgICAgICAgICAgICAgICAgICAvKiBXb3JrZXJzICovCi0g ICAgaW50IHNwYXJpdHkgPSAtMTsgICAgICAgICAgICAgICAgICAgLyogRm9yIHNhdmluZyBnbG9i YWwgcGFyaXR5IHZhbHVlICovCi0gICAgaW50IHByZXZpb3VzID0gMDsKLSAgICBpbnQgbGVuID0g MDsKLSAgICBpbnQgbGl0ZXJhbCA9IDA7Ci0gICAgaW50IGZsb3dzYXZlOwotICAgIGludCBsdWZv dW5kID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIERpZCBhbnkgbG9va3VwIHN1Y2NlZWQ/ICov Ci0gICAgaW50IHByZWZpeCA9IDE7Ci0gICAgaW50IHBvc3RmaXggPSAxOwotICAgIGludCB3YXNh bHBoYSA9IDA7Ci0gICAgaW50IHhyZWRpYWwgPSAwOwotICAgIGludCBicmFjZXMgPSAwOwotCi0g ICAgY2hhciAqcCA9IE5VTEwsICpzMyA9IE5VTEwsICogc2F2ID0gTlVMTDsKLSAgICBpbnQgaiA9 IDAsIHQgPSAwLCBuID0gMDsKLSAgICBpbnQgeHJldHJpZXMsIHhsY2M7Ci0KLSNpZmRlZiBDT01N RU5UCi0gICAgZGVidWcoRjEwMSwiZG9kaWFsIGN4IiwiIixjeCk7Ci0gICAgZGVidWcoRjExMSwi ZG9kaWFsIGRpYWxsY2MiLGRpYWxsY2MsZGlhbGxjYyk7Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwot Ci0gICAgeHJldHJpZXMgPSBkaWFscnRyOyAgICAgICAgICAgICAgICAgLyogSWYgcmV0cmllcyBu b3Qgc2V0LCAqLwotICAgIGlmIChkaWFsbGNjKSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIGNo b29zZSBkZWZhdWx0IGJhc2VkIG9uICovCi0gICAgICAgIHhsY2MgPSBhdG9pKGRpYWxsY2MpOyAg ICAgICAgICAgLyogbG9jYWwgY291bnRyeSBjb2RlLiAqLwotICAgICAgICBpZiAoeHJldHJpZXMg PCAwKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHhsY2MpIHsKLSAgICAgICAgICAgICAgY2FzZSAx OiB4cmV0cmllcyA9IDEwOyBicmVhazsgLyogTm8gcmVzdHJpY3Rpb25zIGluIE5BTlAgKi8KLSAg ICAgICAgICAgICAgICAvKiBBZGQgb3RoZXIgY291bnRyeSBjb2RlcyBoZXJlICovCi0gICAgICAg ICAgICAgICAgLyogdGhhdCBhcmUga25vd24gdG8gaGF2ZSBubyByZXN0cmljdGlvbnMgb24gcmVk aWFsaW5nLiAqLwotICAgICAgICAgICAgICBkZWZhdWx0OiB4cmV0cmllcyA9IDE7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGN4ID09IFhYUERJQSkgeyAgICAgICAg ICAgICAgICAgLyogU2hvcnRjdXQuLi4gKi8KLSAgICAgICAgY3ggPSBYWERJQUw7Ci0gICAgICAg IHBhcnRpYWwgPSAxOwotICAgICAgICBkZWJ1ZyhGMTAwLCJQRElBTCBzZXRzIHBhcnRpYWw9MSIs IiIsMCk7Ci0gICAgICAgIHBvc3RmaXggPSAwOyAgICAgICAgICAgICAgICAgICAgLyogRG8gbm90 IGFkZCBwb3N0Zml4ICovCi0gICAgfSBlbHNlIHsKLSAgICAgICAgcGFydGlhbCA9IDA7Ci0gICAg ICAgIGRlYnVnKEYxMDAsIkRJQUwgc2V0cyBwYXJ0aWFsPTAiLCIiLDApOwotICAgIH0KLSAgICBw cmV2aW91cyA9IGRpYWxzdGE7ICAgICAgICAgICAgICAgICAvKiBTdGF0dXMgb2YgcHJldmlvdXMg Y2FsbCwgaWYgYW55ICovCi0gICAgaWYgKHByZXZpb3VzID09IERJQV9QQVJUKSB7Ci0gICAgICAg IHByZWZpeCA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogZG8gbm90IGFkZCBwcmVmaXggKi8K LSAgICB9Ci0gICAgcyA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlh bGl6ZSB1c2VyJ3MgZGlhbCBzdHJpbmcgKi8KLSAgICBpZiAoY3ggPT0gWFhSRUQpIHsgICAgICAg ICAgICAgICAgICAvKiBSRURJQUwgb3IuLi4gKi8KLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkg PCAwKQotICAgICAgICAgIHJldHVybih5KTsKLSAgICB9IGVsc2UgaWYgKGN4ID09IFhYQU5TVykg eyAgICAgICAgICAvKiBBTlNXRVIgb3IgLi4uICovCi0gICAgICAgIGlmICgoeSA9IGNtbnVtKCJ0 aW1lb3V0IChzZWNvbmRzKSIsIjAiLDEwLCZ4LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJl dHVybih5KTsKLSAgICAgICAgZGlhbGF0bW8gPSB4OwotICAgICAgICBpZiAoKHkgPSBjbWNmbSgp KSA8IDApCi0gICAgICAgICAgcmV0dXJuKHkpOwotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIERJQUwgb3IgTE9PS1VQICovCi0gICAgICAgIGlmIChuZGlhbGRpciA+ IDApCi0gICAgICAgICAgczMgPSAiTnVtYmVyIHRvIGRpYWwgb3IgZW50cnkgZnJvbSBkaWFsIGRp cmVjdG9yeSI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBzMyA9ICJOdW1iZXIgdG8gZGlhbCI7 Ci0gICAgICAgIGlmICgoeCA9IGNtdHh0KHMzLCBkaWFsbnVtID8gZGlhbG51bSA6ICIiLCZzLHh4 c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgaWYgKHMpIHsKLSAg ICAgICAgICAgIGxlbiA9IChpbnQpIHN0cmxlbihzKTsKLSAgICAgICAgICAgIGNrc3RybmNweSh0 bXBidWYscyxUTVBCVUZTSVopOyAvKiBTYXZlIGxpdGVyYWwgY29weSAqLwotI2lmZGVmIENPTU1F TlQKLSAgICAgICAgICAgIGlmIChsZW4gPiAxKSB7ICAgICAgICAgICAgICAvKiBTdHJpcCBvdXRl ciBicmFjZXMgaWYgZ2l2ZW4gKi8KLSAgICAgICAgICAgICAgICBpZiAoKnMgPT0gJ3snKSB7Ci0g ICAgICAgICAgICAgICAgICAgIGlmIChzW2xlbi0xXSA9PSAnfScpIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgIHNbbGVuLTFdID0gTlVMOwotICAgICAgICAgICAgICAgICAgICAgICAgcysrOwot ICAgICAgICAgICAgICAgICAgICAgICAgbGVuIC09IDI7Ci0gICAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgcyA9 IGJyc3RyaXAocyk7ICAgICAgICAgICAgIC8qIFN0cmlwIG91dGVyIGJyYWNlcyBvciBxdW90ZXMg Ki8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoY3gg IT0gWFhMT09LKSB7ICAgICAgICAgICAgICAgICAvKiBOb3QgTE9PS1VQICovCi0jaWZkZWYgSUtT RAotICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsKLSAgICAgICAgICAgIHByaW50ZigiU29ycnksIGRp YWxpbmcgaXMgZGlzYWJsZWQuXHJcbiIpOwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAw KTsKLSAgICAgICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLSNpZmRlZiBDS19UQVBJCi0gICAgICAg IGlmICh0dHRhcGkgJiYgIXRhcGlwYXNzKSB7Ci0gICAgICAgICAgOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogU2tpcCB0aGUgbW9kZW0gdGVzdCBpZiBUQVBJICovCi0gICAgICAgIH0g ZWxzZQotI2VuZGlmIC8qIENLX1RBUEkgKi8KLSAgICAgICAgaWYgKG1kbXR5cCA8IDEgJiYgIWRp YWx0ZXN0KSB7Ci0gICAgICAgICAgICBpZiAobmV0d29yawotI2lmZGVmIFROX0NPTVBPUlQKLSAg ICAgICAgICAgICAgICAgJiYgIWlzdG5jb21wb3J0KCkKLSNlbmRpZiAvKiBUTl9DT01QT1JUICov Ci0gICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgcHJpbnRmKCJQbGVhc2UgU0VUIEhP U1QgZmlyc3QsIGFuZCB0aGVuIFNFVCBNT0RFTSBUWVBFXG4iKTsKLSAgICAgICAgICAgIGVsc2UK LSAgICAgICAgICAgICAgcHJpbnRmKCJTb3JyeSwgeW91IG11c3QgU0VUIE1PREVNIFRZUEUgZmly c3RcbiIpOwotICAgICAgICAgICAgZGlhbHN0YSA9IERJQV9OT01POwotICAgICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWxvY2FsICYmICFkaWFs dGVzdCkgewotICAgICAgICAgICAgcHJpbnRmKCJTb3JyeSwgeW91IG11c3QgU0VUICVzIG9yIFNF VCBIT1NUIGZpcnN0XG4iLAotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICAgICJQT1JUIgot I2Vsc2UKLSAgICAgICAgICAgICAgICAgICAiTElORSIKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAg ICAgICAgICAgICAgICApOwotICAgICAgICAgICAgZGlhbHN0YSA9IERJQV9OT0xJOwotICAgICAg ICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKCFuZXR3 b3JrIAotI2lmZGVmIFROX0NPTVBPUlQKLSAgICAgICAgICAgICAgfHwgaXN0bmNvbXBvcnQoKQot I2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLSAgICAgICAgICAgICAgKSAmJiAhZGlhbHRlc3QgJiYK LSNpZmRlZiBDS19UQVBJCi0gICAgICAgICAgICAgIXR0dGFwaSAmJgotI2VuZGlmIC8qIENLX1RB UEkgKi8KLSAgICAgICAgICAgIChzcGVlZCA8IDBMKQotI2lmZGVmIFVOSVgKLSAgICAgICAgICAg ICYmIChzdHJjbXAodHRuYW1lLCIvZGV2L251bGwiKSkKLSNlbHNlCi0jaWZkZWYgT1NLCi0gICAg ICAgICAgICAmJiAoc3RyY21wKHR0bmFtZSwiL25pbCIpKQotI2VuZGlmIC8qIE9TSyAqLwotI2Vu ZGlmIC8qIFVOSVggKi8KLSAgICAgICAgICAgICkgewotICAgICAgICAgICAgcHJpbnRmKCJcblNv cnJ5LCB5b3UgbXVzdCBTRVQgU1BFRUQgZmlyc3RcbiIpOwotICAgICAgICAgICAgZGlhbHN0YSA9 IERJQV9OT1NQOwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgfQot ICAgIH0KLSAgICBpZiAoY3ggIT0gWFhBTlNXKSB7Ci0gICAgICAgIGZvciAoaiA9IDA7IGogPCBN QVhETlVNUzsgaisrKSB7IC8qIEluaXRpYWxpemUgZGlhbC1udW1iZXIgbGlzdCAqLwotICAgICAg ICAgICAgaWYgKCFkaWFsbnVtKSB7ICAgICAgICAgICAgIC8qIEZpcnN0IHRpbWUgZGlhbGluZyAq LwotICAgICAgICAgICAgICAgIGRuX3Bbal0gPSBOVUxMOyAgICAgICAgIC8qIGluaXRpYWxpemUg YWxsIHBvaW50ZXJzLiAqLwotICAgICAgICAgICAgICAgIGRuX3AyW2pdID0gTlVMTDsKLSAgICAg ICAgICAgIH0gZWxzZSBpZiAoZG5fcFtqXSkgeyAgICAgICAvKiBOb3QgdGhlIGZpcnN0IHRpbWUs ICovCi0gICAgICAgICAgICAgICAgZnJlZShkbl9wW2pdKTsgICAgICAgICAgLyogZnJlZSBwcmV2 aW91cywgaWYgYW55LCAqLwotICAgICAgICAgICAgICAgIGRuX3Bbal0gPSBOVUxMOyAgICAgICAg IC8qIHRoZW4gc2V0IHRvIE5VTEwuICovCi0gICAgICAgICAgICAgICAgaWYgKGRuX3AyW2pdKQot ICAgICAgICAgICAgICAgICAgZnJlZShkbl9wMltqXSk7Ci0gICAgICAgICAgICAgICAgZG5fcDJb al0gPSBOVUxMOwotICAgICAgICAgICAgfSBlbHNlIGJyZWFrOyAgICAgICAgICAgICAgIC8qIEFs cmVhZHkgTlVMTCAqLwotICAgICAgICB9Ci0gICAgICAgIGlmIChsZW4gPT0gMCkKLSAgICAgICAg ICBzID0gTlVMTDsKLSAgICAgICAgaWYgKCFzKQotICAgICAgICAgIHMgPSBkaWFsbnVtOwotICAg ICAgICBpZiAoIXMpIHsKLSAgICAgICAgICAgIGlmIChjeCA9PSBYWExPT0spCi0gICAgICAgICAg ICAgIHByaW50ZigiP0xvb2t1cCB3aGF0P1xuIik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg ICAgICAgIHByaW50ZigiJXNcbiIsIChjeCA9PSBYWFJFRCkgPwotICAgICAgICAgICAgICAgICAg ICI/Tm8gRElBTCBjb21tYW5kIGdpdmVuIHlldCIgOgotICAgICAgICAgICAgICAgICAgICI/WW91 IG11c3Qgc3BlY2lmeSBhIG51bWJlciB0byBkaWFsIgotICAgICAgICAgICAgICAgICAgICk7Ci0g ICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0KLSAgICAvKiBOb3cgd2UgaGF2ZSB0 aGUgInJhdyIgZGlhbCBvciBsb29rdXAgc3RyaW5nIGFuZCBzIGlzIG5vdCBOVUxMICovCi0KLSAg ICAgICAgbWFrZXN0cigmZHNjb3B5LHMpOyAgICAgICAgICAgICAvKiBQdXQgaXQgaW4gYSBzYWZl IHBsYWNlICovCi0gICAgICAgIHMgPSBkc2NvcHk7Ci0gICAgICAgIG4gPSAwOwotCi0gICAgICAg IGRlYnVnKEYxMTEsImRvZGlhbCIscyxuZGlhbGRpcik7Ci0KLSAgICAgICAgd2FzYWxwaGEgPSAw OwotICAgICAgICBpZiAoaXNhbHBoYSgqcykpIHsKLSAgICAgICAgICAgIHdhc2FscGhhID0gMTsK LSAgICAgICAgICAgIGlmIChuZGlhbGRpciA+IDApIHsgICAgICAgICAvKiBEbyB3ZSBoYXZlIGEg ZGlhbGluZyBkaXJlY3Rvcnk/ICovCi0gICAgICAgICAgICAgICAgbiA9IGx1ZGlhbChzLGN4KTsg ICAgICAgLyogTG9vayB1cCB3aGF0IHRoZSB1c2VyIHR5cGVkICovCi0gICAgICAgICAgICAgICAg aWYgKG4gPT0gMCkKLSAgICAgICAgICAgICAgICAgIHByaW50ZigiIExvb2t1cDogXCIlc1wiIC0g bm90IGZvdW5kJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcywKLSAgICAgICAgICAg ICAgICAgICAgICAgICBjeCA9PSBYWExPT0sgPyAiIiA6ICIgLSBkaWFsaW5nIGFzIGdpdmVuXG4i Ci0gICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg IGRlYnVnKEYxMDEsImRvZGlhbCIscyxuKTsKLSAgICAgICAgICAgIGlmIChuIDwgMCAmJiBjeCAh PSBYWExPT0spIHsgLyogRXJyb3Igb3V0IGlmIHRoZXkgd2FudGVkIHRvIGRpYWwgKi8KLSAgICAg ICAgICAgICAgICBpZiAobiA9PSAtMSkgICAgICAgICAgICAvKiAtMiBtZWFucyBsdWRpYWwgYWxy ZWFkeSBnYXZlIG1zZyAqLwotICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgTG9va3VwOiBmYXRh bCBlcnJvciAtIGRpYWxpbmcgc2tpcHBlZFxuIik7Ci0gICAgICAgICAgICAgICAgZGlhbHN0YSA9 IERJQV9ESVI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIGlmIChuID4gMCkgICAgICAgICAgICAgICAgICAvKiBBIHN1Y2Nlc3NmdWwgbG9v a3VwICovCi0gICAgICAgICAgICAgIGx1Zm91bmQgPSAxOwotICAgICAgICB9IGVsc2UgaWYgKCpz ID09ICc9JykgeyAgICAgICAgIC8qIElmIG51bWJlciBzdGFydHMgd2l0aCA9IHNpZ24gKi8KLSAg ICAgICAgICAgIHMrKzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdHJpcCBpdCAqLwotICAg ICAgICAgICAgbGl0ZXJhbCA9IDE7ICAgICAgICAgICAgICAgIC8qIHJlbWVtYmVyIHRoaXMgKi8K LSAgICAgICAgICAgIHdoaWxlICgqcyA9PSBTUCkgcysrOyAgICAgICAvKiBhbmQgdGhlbiBhbHNv IGFueSBsZWFkaW5nIHNwYWNlcyAqLwotICAgICAgICB9IGVsc2UgaWYgKHRtcGJ1ZlswXSA9PSAn eycgJiYgdG1wYnVmWzFdID09ICd7JykgewotICAgICAgICAgICAgbWFrZWxpc3QodG1wYnVmLGRu X3AsTUFYRE5VTVMpOwotICAgICAgICAgICAgbWFrZXN0cigmZHNjb3B5LHRtcGJ1Zik7Ci0gICAg ICAgICAgICBzID0gdG1wYnVmOwotICAgICAgICAgICAgZm9yIChuID0gMDsgbiA8IE1BWEROVU1T OyBuKyspIC8qIChoYXZlIHRvIGNvdW50IGhvdyBtYW55KSAqLwotICAgICAgICAgICAgICBpZiAo IWRuX3Bbbl0pIGJyZWFrOwotICAgICAgICAgICAgYnJhY2VzID0gMTsKLSAgICAgICAgfQotICAg ICAgICBpZiAoY3ggPT0gWFhMT09LICYmICF3YXNhbHBoYSAmJiAhYnJhY2VzKSB7Ci0gICAgICAg ICAgICAvKiBXZSd2ZSBiZWVuIHRvbGQgdG8gbG9va3VwIGEgbnVtYmVyIG9yIGEgcXVvdGVkIG5h bWUgKi8KLSAgICAgICAgICAgIGNoYXIgKnA7Ci0gICAgICAgICAgICBuID0gMDsKLSAgICAgICAg ICAgIHAgPSBsaXRlcmFsID8gcyA6IHBuY3Z0KGRzY29weSk7Ci0gICAgICAgICAgICBpZiAoIXAp IHAgPSAiIjsKLSAgICAgICAgICAgIGlmICgqcCkgewotICAgICAgICAgICAgICAgIHByaW50Zigi JXMgID0+ICVzXG4iLCBkc2NvcHksIHApOwotICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNz ID0gMSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByaW50ZigiP0Jh ZCBwaG9uZSBudW1iZXJcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLyogU2F2ZSBESUFMIG9yIHN1Y2Nl c3NmdWwgTE9PS1VQIHN0cmluZyBmb3IgZnV0dXJlIERJQUwgb3IgUkVESUFMICovCi0gICAgICAg IC8qIEJ1dCBkb24ndCBzYXZlIHBpZWNlcyBvZiBwYXJ0aWFsIGRpYWwgLi4uICovCi0KLSAgICAg ICAgZGVidWcoRjEwMSwiRElBTCBzYXZlIGRpYWxudW0gcGFydGlhbCIsIiIscGFydGlhbCk7Ci0g ICAgICAgIGRlYnVnKEYxMDEsIkRJQUwgc2F2ZSBkaWFsbnVtIHByZXZpb3VzIiwiIixwcmV2aW91 cyk7Ci0gICAgICAgIGlmICgoY3ggPT0gWFhESUFMICYmIHBhcnRpYWwgPT0gMCAmJiBwcmV2aW91 cyAhPSBESUFfUEFSVCkgfHwKLSAgICAgICAgICAgIChjeCA9PSBYWExPT0sgJiYgbiA+IDApKSB7 Ci0gICAgICAgICAgICBtYWtlc3RyKCZkaWFsbnVtLGRzY29weSk7Ci0gICAgICAgICAgICBpZiAo IXF1aWV0ICYmIGRzY29weSAmJiAhZGlhbG51bSkKLSAgICAgICAgICAgICAgcHJpbnRmKCJXQVJO SU5HIC0gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZTogcmVkaWFsIG51bWJlclxuIik7Ci0gICAg ICAgIH0KLSAgICAgICAgaWYgKG4gPiAwKSB7Ci0gICAgICAgICAgICBpZiAoIXF1aWV0ICYmICFi YWNrZ3JkICYmICFicmFjZXMgLyogJiYgZGlhbGRweSAqLyApIHsKLSAgICAgICAgICAgICAgICBp ZiAoIXN0cmNtcChkX25hbWUscykpCi0gICAgICAgICAgICAgICAgICBwcmludGYoIiBMb29rdXA6 IFwiJXNcIiAtIGV4YWN0IG1hdGNoXG4iLHMpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg ICAgICAgICAgICAgIHByaW50ZigiIExvb2t1cDogXCIlc1wiIC0gdW5pcXVlbHkgbWF0Y2hlcyBc IiVzXCJcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcywKLSAgICAgICAgICAgICAgICAg ICAgICAgICBkX25hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAg fQotICAgICAgICAgICAgaWYgKChjeCA9PSBYWExPT0spIHx8Ci0gICAgICAgICAgICAgICAgKChu ID4gMSkgJiYgIXF1aWV0ICYmICFiYWNrZ3JkIC8qICYmIGRpYWxkcHkgKi8gKSkgewotICAgICAg ICAgICAgICAgIHByaW50ZigiICVkIHRlbGVwaG9uZSBudW1iZXIlc2ZvdW5kIGZvciBcIiVzXCIl c1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgbiwKLSAgICAgICAgICAgICAgICAgICAgICAg KG4gPT0gMSkgPyAiICIgOiAicyAiLAotICAgICAgICAgICAgICAgICAgICAgICBzLAotICAgICAg ICAgICAgICAgICAgICAgICAobiA+IDApID8gIjoiIDogIi4iCi0gICAgICAgICAgICAgICAgICAg ICAgICk7Ci0gICAgICAgICAgICAgICAgczMgPSBnZXRkbmFtZSgpOwotICAgICAgICAgICAgfQot ICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeyAgIC8qIENvbnZlcnQgKi8KLSAg ICAgICAgICAgICAgICBkbl94W2ldID0gLTE7Ci0gICAgICAgICAgICAgICAgaWYgKGRuY3Z0KGks Y3gscHJlZml4LHBvc3RmaXgpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoY3ggIT0g WFhMT09LKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaWFsc3RhID0gRElBX0RJUjsKLSAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZGlhbHNy dCAmJiBuID4gMSkgeyAgICAgLyogU29ydCBpbnRvIG9wdGltYWwgb3JkZXIgKi8KLSAgICAgICAg ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbi0xOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAg Zm9yIChqID0gaSsxOyBqIDwgbjsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo ZG5feFtqXSA8IGRuX3hbaV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gZG5f eFtqXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbl94W2pdID0gZG5feFtpXTsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkbl94W2ldID0gdDsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwID0gZG5fcFtqXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbl9w W2pdID0gZG5fcFtpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbl9wW2ldID0gcDsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gZG5fcDJbal07Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgZG5fcDJbal0gPSBkbl9wMltpXTsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkbl9wMltpXSA9IHA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICBpZiAoKGN4ID09IFhYTE9PSykgfHwKLSAgICAgICAgICAgICAgICAoKG4gPiAxKSAmJiAh cXVpZXQgJiYgIWJhY2tncmQgLyogJiYgZGlhbGRweSAqLyApKSB7Ci0gICAgICAgICAgICAgICAg aW50IG5uID0gbjsKLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgICAgICAgICBjaGFyICogcDsKLSNl bmRpZiAvKiBOT1NQTCAqLwotICAgICAgICAgICAgICAgIGlmIChjeCAhPSBYWExPT0spCi0gICAg ICAgICAgICAgICAgICBpZiAobiA+IDEyKSBubiA9IDEyOwotICAgICAgICAgICAgICAgIGZvciAo aSA9IDA7IGkgPCBubjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiJTNkLiAl LTEycyAgJS0yMHMgPT4gICUtMjBzICAoJWQpXG4iLGkrMSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIHMzLCBkbl9wW2ldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZG5fcDJbaV0g PyBkbl9wMltpXSA6ICIocHJvY2Vzc2luZyBmYWlsZWQpIiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRuX3hbaV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjeCAhPSBYWExPT0sgJiYgbiAhPSBubikKLSAg ICAgICAgICAgICAgICAgIHByaW50ZigiQW5kICVkIG1vcmUuLi5cbiIsIG4gLSBubik7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAobiA9PSAwKSB7ICAgICAgICAgICAgLyogTm90 IGZvdW5kIGluIGRpcmVjdG9yeSAqLwotICAgICAgICAgICAgbWFrZXN0cigmKGRuX3BbMF0pLGxp dGVyYWwgPyBzIDogZHNjb3B5KTsKLSAgICAgICAgICAgIG1ha2VzdHIoJmRfbmFtZSxsaXRlcmFs ID8gcyA6IGRzY29weSk7Ci0gICAgICAgICAgICBkbmNvdW50ID0gMTsKLSAgICAgICAgICAgIG4g PSAxOwotICAgICAgICAgICAgaWYgKGRuY3Z0KDAsY3gscHJlZml4LHBvc3RmaXgpIDwgMCkgeyAv KiBJbiBjYXNlIHRoZXkgdHlwZWQgYSAqLwotICAgICAgICAgICAgICAgIGRpYWxzdGEgPSBESUFf RElSOyAgICAgIC8qIHBvcnRhYmxlLWZvcm1hdCBudW1iZXIgLi4uICovCi0gICAgICAgICAgICAg ICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0jaWZuZGVmIE5PTkVU Ci0jaWZkZWYgTkVUQ09OTgotICAgICAgICAvKiBJdCdzIG5vdCBnb29kIHRoYXQgdGhlIG5ldHdv cmtzIGRpcmVjdG9yeSBkZXBlbmRzIG9uIE5PVC1OT0RJQUwuLiAqLwotICAgICAgICBpZiAoY3gg PT0gWFhMT09LICYmIGRzY29weSkgeyAgIC8qIE5ldHdvcmtzIGhlcmUgdG9vLi4uICovCi0gICAg ICAgICAgICBleHRlcm4gY2hhciAqbmhfcFtdLCAqbmhfcDJbXSwgKm5fbmFtZTsKLSAgICAgICAg ICAgIGV4dGVybiBjaGFyICpuaF9weFs0XVtNQVhETlVNUysxXTsKLSAgICAgICAgICAgIG4gPSAt MTsKLSAgICAgICAgICAgIGlmIChubmV0ZGlyID4gMCkgeyAgICAgICAgICAvKiBEbyB3ZSBoYXZl IGEgbmV0d29yayBkaXJlY3Rvcnk/ICovCi0gICAgICAgICAgICAgICAgZGlybGluZSA9IDA7Ci0g ICAgICAgICAgICAgICAgbiA9IGx1bmV0KGRzY29weSk7ICAgICAgLyogTG9vayB1cCB3aGF0IHRo ZSB1c2VyIHR5cGVkICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobiA+IC0xKSB7 Ci0gICAgICAgICAgICAgICAgaW50IGs7Ci0gICAgICAgICAgICAgICAgaWYgKG4gPiAwKSAgICAg ICAgICAgICAgLyogQSBzdWNjZXNzZnVsIGxvb2t1cCAqLwotICAgICAgICAgICAgICAgICAgbHVm b3VuZCA9IDE7Ci0gICAgICAgICAgICAgICAgaWYgKGN4ID09IFhYTE9PSyAmJiBuID09IDApCi0g ICAgICAgICAgICAgICAgICBwcmludGYoIiBMb29rdXA6IFwiJXNcIiAtIG5vdCBmb3VuZFxuIixk c2NvcHkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHByaW50Zigi JXMgJWQgbmV0d29yayBlbnRyJXMgZm91bmQgZm9yIFwiJXNcIiVzXG4iLAotICAgICAgICAgICAg ICAgICAgICAgICAgIGN4ID09IFhYTE9PSyA/ICIgTG9va3VwOiIgOiAiIiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICBuLAotICAgICAgICAgICAgICAgICAgICAgICAgIChuID09IDEpID8gInki IDogImllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZHNjb3B5LAotICAgICAgICAgICAg ICAgICAgICAgICAgIChuID4gMCkgPyAiOiIgOiAiLiIKLSAgICAgICAgICAgICAgICAgICAgICAg ICApOwotCi0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotCi0gICAg ICAgICAgICAgICAgICAgIHByaW50ZigiJTNkLiAlLTEycyA9PiAlLTlzICVzIiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgIGkrMSxuX25hbWUsbmhfcDJbaV0sbmhfcFtpXSk7Ci0gICAgICAg ICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCA0OyBrKyspIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChuaF9weFtrXVtpXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy aW50ZigiICVzIixuaF9weFtrXVtpXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UK LSAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSNlbmRpZiAvKiBO T05FVCAqLwotICAgICAgICBpZiAoY3ggPT0gWFhMT09LKQotICAgICAgICAgIHJldHVybihzdWNj ZXNzID0gbHVmb3VuZCk7Ci0gICAgfSAvKiBjeCAhPSBYWEFOU1cgKi8KLQotI2lmZGVmIFZNUwot ICAgIGNvbnJlcygpOyAgICAgICAgICAgICAgICAgICAvKiBTbyBDdHJsLUMvWSB3aWxsIHdvcmsg Ki8KLSNlbmRpZiAvKiBWTVMgKi8KLS8qCi0gIFNvbWUgbW9kZW1zIGRvIG5vdCByZWFjdCB3ZWxs IHRvIHBhcml0eS4gIEFsc28sIGlmIHdlIGFyZSBkaWFsaW5nIHRocm91Z2ggYQotICBUQ1AvSVAg VEVMTkVUIG1vZGVtIHNlcnZlciwgcGFyaXR5IGNhbiBiZSBmYXRhbGx5IG1pc2ludGVycHJldGVk IGFzIFRFTE5FVAotICBuZWdvdGlhdGlvbnMuCi0KLSAgVGhpcyBzaG91bGQgd29yayBldmVuIGlm IHRoZSB1c2VyIGludGVycnVwdHMgdGhlIERJQUwgY29tbWFuZCwgYmVjYXVzZSB0aGUKLSAgRElB TCBtb2R1bGUgaGFzIGl0cyBvd24gaW50ZXJydXB0IGhhbmRsZXIuICBCVVQuLi4gaWYsIGZvciBz b21lIHJlYXNvbiwgYQotICBkaWFsaW5nIGRldmljZSBhY3R1YWxseSAqcmVxdWlyZXMqIHBhcml0 eSAoZS5nLiBDQ0lUVCBWLjI1YmlzIHNheXMgdGhhdCBldmVuCi0gIHBhcml0eSBzaG91bGQgYmUg dXNlZCksIHRoaXMgbWlnaHQgcHJldmVudCBzdWNjZXNzZnVsIGRpYWxpbmcuICBGb3IgdGhhdAot ICByZWFzb24sIHdlIGRvbid0IGRvIHRoaXMgZm9yIFYuMjViaXMgbW9kZW1zLgotKi8KLSAgICBz cGFyaXR5ID0gcGFyaXR5OyAgICAgICAgICAgICAgICAgICAvKiBTYXZlIGN1cnJlbnQgcGFyaXR5 ICovCi0gICAgaWYgKChkaWFsY2FwYXMgJiBDS0RfVjI1KSA9PSAwKSAgICAgLyogSWYgbm90IFYu MjViaXMuLi4gICovCi0gICAgICBwYXJpdHkgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyog U2V0IHBhcml0eSB0byBOT05FICovCi0KLSAgICBmbG93c2F2ZSA9IGZsb3c7Ci0vKgotICBUaGVz ZSBtb2RlbXMgdXNlIHNvbWUga2luZCBvZiBzY3Jld3kgZmxvdyBjb250cm9sIHdoaWxlIGluIGNv bW1hbmQgbW9kZSwKLSAgYW5kIGRvIG5vdCBwcmVzZW50IENUUyBhcyB0aGV5IHNob3VsZC4gIFNv IGlmIFJUUy9DVFMgaXMgc2V0IChvciBldmVuIGlmCi0gIGl0IGlzbid0KSBkaXNhYmxlIGZsb3cg Y29udHJvbCBkdXJpbmcgZGlhbGluZy4KLSovCi0jaWZuZGVmIE1JTklESUFMCi0gICAgaWYgKG1k bXR5cCA9PSBuX0FUVDE5MTAgfHwgbWRtdHlwID09IG5fQVRUMTkwMCkgewotICAgICAgICBmbG93 ID0gRkxPX05PTkU7ICAgICAgICAgICAgICAgIC8qIFRoaXMgaXMgbm90IGVub3VnaCAqLwotI2lm ZGVmIENLX1RUU0VURkxPVwotICAgICAgICB0dHNldGZsb3coRkxPX05PTkUpOyAgICAgICAgICAg IC8qIFJlYWxseSB0dXJuIGl0IG9mZiAqLwotI2VuZGlmIC8qIENLX1RUU0VURkxPVyAqLwotICAg IH0KLSNlbmRpZiAvKiBNSU5JRElBTCAqLwotICAgIGlmICghbmV0d29yawotI2lmZGVmIFROX0NP TVBPUlQKLSAgICAgICAgfHwgaXN0bmNvbXBvcnQoKQotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8K LSAgICAgICAgICkgewotICAgICAgICBpbnQgeDsKLSAgICAgICAgaWYgKCh4ID0gdHRnbWRtKCkp ID4gLTEpIHsKLSAgICAgICAgICAgIGlmICgheCAmJiBtc2dmbGcpIHsKLSAgICAgICAgICAgICAg ICBwcmludGYoCi0iV0FSTklORyAtIE5vIG1vZGVtIHNpZ25hbHMgZGV0ZWN0ZWQuICBJcyB5b3Vy IG1vZGVtIHR1cm5lZCBvbj8gIElmIG5vdCxcblwKLXVzZSBDdHJsLUMgdG8gaW50ZXJydXB0IGRp YWxpbmcsIHR1cm4gb24geW91ciBtb2RlbSwgdGhlbiAlcy5cbiIsCi0gICAgICAgICAgICAgICAg ICAgICAgIGN4ID09IFhYQU5TVyA/Ci0gICAgICAgICAgICAgICAgICAgICAgICJBTlNXRVIgYWdh aW4iIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIlJFRElBTCIKLSAgICAgICAgICAgICAgICAg ICAgICAgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmbG93ID09IEZMT19SVFND KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCEoeCAmIEJNX0NUUykpIHsKLSAgICAgICAgICAgICAg ICAgICAgaWYgKG1zZ2ZsZykKLSAgICAgICAgICAgICAgICAgICAgICBwcmludGYoCi0iV0FSTklO RyAtIFNFVCBGTE9XIFJUUy9DVFMgaXMgaW4gZWZmZWN0IGJ1dCBtb2RlbSdzIENUUyBzaWduYWwg aXMgb2ZmLlxuXAotRGlzYWJsaW5nIGZsb3cgY29udHJvbCB0ZW1wb3JhcmlseSAlcy4uLlxuIiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ggPT0gWFhBTlNXID8KLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIndoaWxlIHdhaXRpbmcgZm9yIGNhbGwiIDoKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgImR1cmluZyBkaWFsaW5nIgotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwotICAgICAgICAgICAgICAgICAgICBmbG93ID0gRkxPX05PTkU7Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChjeCA9 PSBYWEFOU1cpIHsgICAgICAgICAgICAgICAgIC8qIEFOU1dFUiAqLwotICAgICAgICBzdWNjZXNz ID0gY2tkaWFsKCIiLDAsMCwxLDApOwotICAgICAgICBnb3RvIGRpYWxmaW47Ci0gICAgfQotCi0v KiBFZGl0IDE5MiBhZGRzIHRoZSBhYmlsaXR5IHRvIGRpYWwgcmVwZWF0ZWRseS4gKi8KLQotICAg IGkgPSAwOwotICAgIGRpYWxjb3VudCA9IDA7Ci0gICAgZG8gewotICAgICAgICBpZiAoaSA+IDAp IHByaW50ZigiXG5EaWFsIGF0dGVtcHQgJWQgb2YgJWQuLi5cbiIsIGkrMSwgeHJldHJpZXMpOwot ICAgICAgICBkaWFsY291bnQgPSBpKzE7Ci0gICAgICAgIHN1Y2Nlc3MgPSAwOwotICAgICAgICAv KiBBbmQgdGhlIGFiaWxpdHkgdG8gZGlhbCBhbHRlcm5hdGUgbnVtYmVycy4gKi8KLSAgICAgICAg LyogTG9vcCB0byBkaWFsIGVhY2ggaW4gYSBsaXN0IG9mIG51bWJlcnMgZm9yIHRoZSBzYW1lIG5h bWUuLi4gKi8KLSAgICAgICAgZm9yIChqID0gMDsgaiA8IG4gJiYgIXN1Y2Nlc3M7IGorKykgeyAv KiB1bnRpbCBvbmUgYW5zd2Vycy4gKi8KLSAgICAgICAgICAgIHMgPSBkbl9wMltqXTsgICAgICAg ICAgICAgICAvKiBOZXh0IG51bWJlciBpbiBsaXN0ICovCi0gICAgICAgICAgICBpZiAoZG5feFtq XSA+PSBkaWFscnN0cikgeyAgLyogRGlhbCByZXN0cmljdGlvbiAqLwotICAgICAgICAgICAgICAg IHByaW50ZigiUmVzdHJpY3RlZDogJXMsIHNraXBwaW5nLi4uXG4iLGRuX3Bbal0pOwotICAgICAg ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgeHJlZGlhbCA9 IChpID09IDAgJiYgaiA9PSAwKSA/IDAgOiAxOwotICAgICAgICAgICAgaWYgKCFzKSBzID0gZG5f cFtqXTsKLQotI2lmbmRlZiBOT1NQTAotICAgICAgICAgICAgc2F2ID0gczsKLSAgICAgICAgICAg IHAgPSB4ZGlhbChzKTsgICAgICAgICAgICAgICAvKiBBcHBseSBESUFMIG1hY3JvIG5vdyAqLwot ICAgICAgICAgICAgaWYgKHApIGlmICgqcCkgcyA9IHA7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQot CSAgICAvKiBEaWFsIGNvbmZpcm1hdGlvbiAqLwotCSAgICAvKiBOT1RFOiB0aGUgdXFfeHh4KCkg Y2FsbHMgYWxsb3cgZm9yIGEgR1VJIGRpYWxvZyAqLwotCi0gICAgICAgICAgICBpZiAoaSA9PSAw ICYmIGRpYWxjbmYpIHsKLQkJY2hhciBtc2didWZbMTI4XTsKLQkJY2ttYWttc2cobXNnYnVmLDEy OCwiRGlhbGluZyAiLHMsTlVMTCxOVUxMKTsKLQkJeCA9IHVxX29rKG1zZ2J1ZiwiSXMgdGhpcyBu dW1iZXIgY29ycmVjdD8gIiwzLE5VTEwsMCk7Ci0gICAgICAgICAgICAgICAgaWYgKCF4KSB7Ci0K LSNpZm5kZWYgQ09NTUVOVAotCQkgICAgeCA9IHVxX3R4dCgJCS8qIEFsbG93IEdVSSBkaWFsb2cg Ki8KLSNpZmRlZiBPUzIKLSIgUGxlYXNlIGVudGVyIHRoZSBjb3JyZWN0IG51bWJlcixcclxuIG9y IHByZXNzIEVudGVyIHRvIHNraXAuIiwKLSNlbHNlCi0iIFBsZWFzZSBlbnRlciB0aGUgY29ycmVj dCBudW1iZXIsXHJcbiBvciBwcmVzcyBSZXR1cm4gdG8gc2tpcC4iLAotI2VuZGlmIC8qIE9TMiAq LwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvcnJlY3RlZCBwaG9uZSBudW1iZXI6 ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwKLQkJCSAgICAgICBOVUxMLAot CQkJICAgICAgIGF0bWJ1ZiwKLQkJCSAgICAgICBBVE1CTCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfVVFf VElNRU9VVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0JCSAgICBpZiAoeCAm JiBhdG1idWZbMF0pIHsgLyogVGhleSBnYXZlIGEgbmV3IG9uZSAqLwotCQkJcyA9IGF0bWJ1ZjsK LQkJCW1ha2VzdHIoJihkbl9wMltqXSksIHMpOwotCQkgICAgfQkJCQotCi0jZWxzZSAgLyogQ09N TUVOVCAqLwotCi0jaWZkZWYgQ0tfUkVDQUxMCi0gICAgICAgICAgICAgICAgICAgIGV4dGVybiBp bnQgb25fcmVjYWxsOwotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotICAgICAgICAgICAgICAgICAg ICBjbXNhdnAocHNhdmUsUFJPTVBUTCk7Ci0gICAgICAgICAgICAgICAgICAgIGNtc2V0cCgKLSNp ZmRlZiBPUzIKLSIgUGxlYXNlIGVudGVyIHRoZSBjb3JyZWN0IG51bWJlcixcclxuIG9yIHByZXNz IEVudGVyIHRvIHNraXA6ICIKLSNlbHNlCi0iIFBsZWFzZSBlbnRlciB0aGUgY29ycmVjdCBudW1i ZXIsXHJcbiBvciBwcmVzcyBSZXR1cm4gdG8gc2tpcDogIgotI2VuZGlmIC8qIE9TMiAqLwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgY21pbmkoY2t4 ZWNoKTsKLSAgICAgICAgICAgICAgICAgICAgeCA9IC0xOwotICAgICAgICAgICAgICAgICAgICBp ZiAocGZsYWcpIHByb21wdChOVUxMKTsKLSNpZmRlZiBDS19SRUNBTEwKLSAgICAgICAgICAgICAg ICAgICAgb25fcmVjYWxsID0gMDsKLSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLSAgICAgICAgICAg ICAgICAgICAgeSA9IGNtZGdxdW8oKTsKLSAgICAgICAgICAgICAgICAgICAgY21kc3F1bygwKTsK LSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHggPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICB4ID0gY210eHQoIkNvcnJlY3RlZCBwaG9uZSBudW1iZXIiLCIiLCZzLE5VTEwpOwotICAg ICAgICAgICAgICAgICAgICAgICAgY21yZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICAgICAgICBpZiAoKGludCkgc3RybGVuKHMpIDwgMSkgewotICAgICAgICAgICAg ICAgICAgICAgICAgY21zZXRwKHBzYXZlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp bnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG1ha2VzdHIo Jihkbl9wMltqXSksIHMpOwotICAgICAgICAgICAgICAgICAgICBjbWRzcXVvKHkpOwotICAgICAg ICAgICAgICAgICAgICBjbXNldHAocHNhdmUpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZGlhbHRlc3QpIHsg ICAgICAgICAgICAgLyogSnVzdCB0ZXN0aW5nICovCi0gICAgICAgICAgICAgICAgaWYgKGkgKyBq ID09IDApCi0gICAgICAgICAgICAgICAgICBwcmludGYoIlxuVEVTVElORy4uLlxuIik7Ci0gICAg ICAgICAgICAgICAgaWYgKGRpYWxtYWMpCi0gICAgICAgICAgICAgICAgICBwcmludGYoIiBOdW1i ZXI6IFwiJXNcIiA9PiBcIiVzXCJcbiIsc2F2LHMpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAg ICAgICAgICAgICAgICAgIHByaW50ZigiIE51bWJlcjogXCIlc1wiXG4iLHMpOwotICAgICAgICAg ICAgICAgIGRpYWxzdGEgPSBESUFfQlVTWTsKLSAgICAgICAgICAgICAgICBzdWNjZXNzID0gMDsK LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgd2hhdCB8PSBXX0RJQUxJTkc7 Ci0gICAgICAgICAgICAgICAgc3VjY2VzcyA9IGNrZGlhbChzLGksaixwYXJ0aWFsID8gMyA6IDAs IHhyZWRpYWwpOyAvKiBEaWFsIGl0ICovCi0gICAgICAgICAgICAgICAgd2hhdCAmPSB+KFdfRElB TElORyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICAgICAgICAgICAg ICAgIGlmIChkaWFsc3RhIDwgOCB8fCAgLyogQnJlYWsgb3V0IGlmIHVucmVjb3ZlcmFibGUgZXJy b3IgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxzdGEgID09IERJQV9JTlRSIHx8Ci0g ICAgICAgICAgICAgICAgICAgICAgICBkaWFsc3RhICA9PSBESUFfRVJSICB8fAotICAgICAgICAg ICAgICAgICAgICAgICAgcHJldmlvdXMgPT0gRElBX1BBUlQKLSAgICAgICAgICAgICAgICAgICAg ICAgICkKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHN1Y2Nlc3MpICAgICAgICAgICAg ICAgICAgICAvKiBTdWNjZWVkZWQsIGxlYXZlIHRoZSBvdXRlciBsb29wICovCi0gICAgICAgICAg YnJlYWs7Ci0gICAgICAgIGlmIChkaWFsc3RhIDwgOCB8fCAgICAgICAgICAgICAgLyogQnJlYWsg b3V0IGlmIHVucmVjb3ZlcmFibGUgZXJyb3IgKi8KLSAgICAgICAgICAgIGRpYWxzdGEgPT0gRElB X0lOVFIgfHwgICAgICAvKiBJbnRlcnJ1cHRlZCAqLwotICAgICAgICAgICAgZGlhbHN0YSA9PSBE SUFfTk9EVCB8fCAgICAgIC8qIE5vIGRpYWx0b25lICovCi0gICAgICAgICAgICBkaWFsc3RhID09 IERJQV9OT0FDIHx8ICAgICAgLyogQWNjZXNzIGZvcmJpZGRlbiAqLwotICAgICAgICAgICAgZGlh bHN0YSA9PSBESUFfQkxDSyB8fCAgICAgIC8qIEJsYWNrbGlzdGVkICovCi0gICAgICAgICAgICBk aWFsc3RhID09IERJQV9ESVIgIHx8ICAgICAgLyogRGlhbGluZyBkaXJlY3RvcnkgZXJyb3IgKi8K LSAgICAgICAgICAgIGRpYWxzdGEgPT0gRElBX0VSUiAgfHwgICAgICAvKiBNb2RlbSBjb21tYW5k IGVycm9yICovCi0gICAgICAgICAgICBwcmV2aW91cyA9PSBESUFfUEFSVCkKLSAgICAgICAgICBi cmVhazsKLSAgICAgICAgaWYgKCsraSA+PSB4cmV0cmllcykgICAgICAgICAgICAvKiBCcmVhayBv dXQgaWYgdG9vIG1hbnkgdHJpZXMgKi8KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKCFi YWNrZ3JkICYmICFxdWlldCkgewotICAgICAgICAgICAgaWYgKGRpYWxpbnQgPiA1KQotICAgICAg ICAgICAgICBwcmludGYoCi0iXG5XaWxsIHJlZGlhbCBpbiAlZCBzZWNvbmQlcy0gcHJlc3MgYW55 IGtleSB0byByZWRpYWwgaW1tZWRpYXRlbHkuXG4iLAotICAgICAgICAgICAgICAgICAgICAgZGlh bGludCwKLSAgICAgICAgICAgICAgICAgICAgIGRpYWxpbnQgPT0gMSA/ICIgIiA6ICJzICIKLSAg ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBwcmludGYoIkN0cmwtQyB0byBjYW5j ZWwuLi5cbiIpOwotICAgICAgICB9Ci0gICAgICAgIHggPSBkaWFsaW50OyAgICAgICAgICAgICAg ICAgICAgLyogUmVkaWFsIGludGVydmFsICovCi0gICAgICAgIHdoaWxlICh4LS0gPiAwKSB7Ci0g ICAgICAgICAgICBpZiAoKHkgPSBjb25jaGsoKSkgPiAwKSB7ICAgLyogRGlkIHRoZXkgdHlwZSBz b21ldGhpbmc/ICovCi0gICAgICAgICAgICAgICAgd2hpbGUgKHktLSkgY29uaW5jKDApOyAgLyog WWVzLCBhYnNvcmIgaXQgKi8KLSAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAg ICAvKiBBbmQgd2FrZSB1cCAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2xlZXAoMSk7 ICAgICAgICAgICAgICAgICAgIC8qIE5vIGludGVycnVwdCwgc2xlZXAgYSBzZWMgKi8KLSAgICAg ICAgfQotICAgIH0gd2hpbGUgKCFzdWNjZXNzKTsKLQotICBkaWFsZmluOgotCi0gICAgaWYgKGN4 ICE9IFhYTE9PSykgewotICAgICAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgICAgYmxlZXAoKHNo b3J0KSBCUF9GQUlMKTsKLSAgICAgICAgZWxzZSBpZiAoIXF1aWV0KQotICAgICAgICAgIGJsZWVw KChzaG9ydCkgQlBfTk9URSk7Ci0jaWZkZWYgT1MyCi0gICAgICAgIHNldGludCgpOyAgICAgICAg ICAgICAgICAgICAgICAgLyogRml4IE9TLzIgaW50ZXJydXB0cyAqLwotI2VuZGlmIC8qIE9TMiAq LwotICAgICAgICBpZiAoc3Bhcml0eSA+IC0xKQotICAgICAgICAgIHBhcml0eSA9IHNwYXJpdHk7 ICAgICAgICAgICAgIC8qIFJlc3RvcmUgcGFyaXR5IGlmIHdlIHNhdmVkIGl0ICovCi0gICAgICAg IGZsb3cgPSBmbG93c2F2ZTsKLSNpZmRlZiBPUzIKLSAgICAgICAgdHRyZXMoKTsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBSZXN0b3JlIERJQUwgZGV2aWNlICovCi0jZW5kaWYgLyogT1MyICov Ci0jaWZkZWYgVk1TCi0gICAgICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7ICAgICAgICAgICAgLyog UmVzdG9yZSBjb25zb2xlICovCi0jZW5kaWYgLyogVk1TICovCi0jaWZkZWYgT1MyCi0gICAgICAg IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IHNlc3Npb24gdGl0bGUgKi8K LSAgICAgICAgICAgIGNoYXIgKiBwLCBuYW1lWzcyXTsgICAgICAgICAvKiBpbiB3aW5kb3cgbGlz dC4gKi8KLSAgICAgICAgICAgIGNoYXIgKiBxOwotICAgICAgICAgICAgaWYgKGN4ID09IFhYQU5T VykgewotICAgICAgICAgICAgICAgIHEgPSAiSW5jb21pbmcgY2FsbCI7Ci0gICAgICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChkX25hbWUpCi0gICAgICAgICAgICAgICAgICBx ID0gZF9uYW1lOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRpYWxudW0pCi0gICAgICAgICAg ICAgICAgICBxID0gZGlhbG51bTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmICh0dG5hbWVbMF0p Ci0gICAgICAgICAgICAgICAgICBxID0gdHRuYW1lOwotICAgICAgICAgICAgICAgIGVsc2UgcSA9 ICIiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcCA9IG5hbWU7Ci0gICAgICAgICAgICBp ZiAoc3VjY2VzcykgewotICAgICAgICAgICAgICAgIHN0cm5jcHkobmFtZSxxLDQ4KTsKLSAgICAg ICAgICAgICAgICB3aGlsZSAoKnApIHsgICAgICAgICAgICAvKiBVcHBlcmNhc2UgaXQgZm9yIGVt cGhhc2lzLiAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoaXNsb3dlcigqcCkpCi0gICAgICAg ICAgICAgICAgICAgICAgKnAgPSB0b3VwcGVyKCpwKTsKLSAgICAgICAgICAgICAgICAgICAgcCsr OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICBu YW1lWzBdID0gTlVMIDsKLSAgICAgICAgICAgIG9zMnNldHRpdGxlKChjaGFyICopIG5hbWUsIFRS VUUpOwotICAgICAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0gICAgfQotICAgIGlmIChjeCAhPSBY WExPT0spIHsKLSAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKLSAgICAgICAgICAgIGlmIChyZWxpYWJs ZSA9PSBTRVRfQVVUTykgeyAvKiBJdCdzIG5vdCBhIHJlbGlhYmxlIGNvbm5lY3Rpb24uICovCi0g ICAgICAgICAgICAgICAgcmVsaWFibGUgPSBTRVRfT0ZGOwotICAgICAgICAgICAgICAgIGRlYnVn KEYxMDEsImRvZGlhbCByZWxpYWJsZSIsIiIscmVsaWFibGUpOwotICAgICAgICAgICAgfQotICAg ICAgICB9IGVsc2UgewotI2lmbmRlZiBOT0hJTlRTCi0gICAgICAgICAgICBleHRlcm4gaW50IGhp bnRzOwotICAgICAgICAgICAgaWYgKGhpbnRzICYmICFxdWlldCAmJiBkaWFsc3RhICE9IDkpIHsg LyogOSA9PSBVc2VyIGludGVycnVwdGVkICovCi0gICAgICAgICAgICAgICAgZXh0ZXJuIGludCBk aWFsbWh1LCBkaWFsaG5nLCBkaWFsZHB5OwotICAgICAgICAgICAgICAgIGV4dGVybiBjaGFyICog ZGlhbG1zZ1tdOwotICAgICAgICAgICAgICAgIHByaW50ZigiXG4qKioqKioqKioqKioqKioqKioq KioqKioqXG4iKTsKLSAgICAgICAgICAgICAgICBwcmludGYoIkRJQUwtY2xhc3MgY29tbWFuZCBm YWlsZWQuXG4iKTsKLSAgICAgICAgICAgICAgICBwcmludGYoIk1vZGVtIHR5cGU6ICAlc1xuIiwg Z21kbXR5cCgpKTsKLSAgICAgICAgICAgICAgICBwcmludGYoIkRldmljZTogICAgICAlc1xuIiwg dHRuYW1lKTsKLSAgICAgICAgICAgICAgICBwcmludGYoIlNwZWVkOiAgICAgICAlbGRcbiIsIHNw ZWVkKTsKLSAgICAgICAgICAgICAgICBwcmludGYoIkRpYWwgc3RhdHVzOiAlZCIsZGlhbHN0YSk7 Ci0gICAgICAgICAgICAgICAgaWYgKGRpYWxzdGEgPCAzNSAmJiBkaWFsbXNnW2RpYWxzdGFdKQot ICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgWyVzXSIsZGlhbG1zZ1tkaWFsc3RhXSk7Ci0gICAg ICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICAgICAgICAgIGlmIChkaWFsc3RhID09 IERJQV9USU1PIHx8Ci0gICAgICAgICAgICAgICAgICAgIGRpYWxzdGEgPT0gRElBX05SRFkgfHwK LSAgICAgICAgICAgICAgICAgICAoZGlhbHN0YSA+IDEzICYmIGRpYWxzdGEgIT0gRElBX0JVU1kg JiYgZGlhbHN0YSAhPSBESUFfTk9BTikKLSAgICAgICAgICAgICAgICAgICAgKSB7Ci0gICAgICAg ICAgICAgICAgICAgIHN3aXRjaCAoZGlhbHN0YSkgewotICAgICAgICAgICAgICAgICAgICAgIGNh c2UgRElBX1RJTU86Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoCi0iIC4gU0VUIERJ QUwgVElNRU9VVCB0byBhIGdyZWF0ZXIgdmFsdWUgYW5kIHRyeSBhZ2Fpbi5cbiIKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBESUFfTlJTUDoKLSAgICAgICAgICAgICAgICAg ICAgICBjYXNlIERJQV9OUkRZOgotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRElBX05PSU46 Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoCi0iIC4gSXMgdGhlIG1vZGVtIHR1cm5l ZCBvbj9cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKAotIiAuIEFyZSB5b3UgdXNpbmcgdGhlIHJpZ2h0IGNvbW11bmlj YXRpb24gcG9ydD9cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBESUFf Tk9EVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigKLSIgLiBJcyB0aGUgbW9kZW0g Y29ubmVjdGVkIHRvIHRoZSB0ZWxlcGhvbmUgbGluZT9cbiIKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg IGlmIChtZG10eXAgPT0gbl9HRU5FUklDKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmlu dGYoCi0iIC4gUGxlYXNlIGNob29zZSBhIHNwZWNpZmljIG1vZGVtIHR5cGUgd2l0aCBTRVQgTU9E RU0gVFlQRSBhbmQgdHJ5IGFnYWluLlxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoCi0iICAgIFNFVCBNT0RFTSBUWVBF ID8gdG8gc2VlIHRoZSBsaXN0IG9mIGtub3duIG1vZGVtIHR5cGVzLlxuIgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICBwcmludGYoCi0iIC4gQXJlIHlvdSBzdXJlIHlvdSBoYXZlIGNo b3NlbiB0aGUgYXBwcm9wcmlhdGUgbW9kZW0gdHlwZT9cbiIKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg IGlmIChzcGVlZCA+IDE5MjAwTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAot IiAuIE1heWJlIHRoZSBpbnRlcmZhY2Ugc3BlZWQgKCVsZCkgaXMgdG9vIGZhc3Q6XG4iLCBzcGVl ZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBwcmludGYoCi0iICAgIFNFVCBTUEVFRCB0byBhIGxvd2VyIHNwZWVkIGFuZCB0cnkgYWdh aW4uXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAg ICAgICAgICAgIHByaW50ZigKLSIgICAgU0VUIFNQRUVEID8gdG8gc2VlIHRoZSBsaXN0IG9mIHZh bGlkIHNwZWVkcy5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkaWFsaG5nKSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICBpZiAoZGlhbG1odSkKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgcHJpbnRmKAotIiAuIFNFVCBNT0RFTSBIQU5HVVAtTUVUSE9EIFJTMjMyIGFuZCB0cnkgYWdh aW4uXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAg ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoCi0iIC4g U0VUIE1PREVNIEhBTkdVUC1NRVRIT0QgTU9ERU0tQ09NTUFORCBhbmQgdHJ5IGFnYWluLlxuIgot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAg ICAgIHByaW50ZigKLSIgLiBJZiB0aGF0IGRvZXNuJ3Qgd29yaywgdHJ5IGFnYWluIHdpdGggU0VU IERJQUwgSEFOR1VQIE9GRi5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwot ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJp bnRmKAotIiAuIEdpdmUgYSBIQU5HVVAgb3IgU0VUIERJQUwgSEFOR1VQIE9OIGNvbW1hbmQgYW5k IHRyeSBhZ2Fpbi5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZGlhbGRweSkKLSAgICAg ICAgICAgICAgICAgICAgICBwcmludGYoCi0iIC4gVXNlIFNFVCBESUFMIERJU1BMQVkgT04gdG8g d2F0Y2ggdGhlIGRpYWxvZyBiZXR3ZWVuIEtlcm1pdCBhbmQgbW9kZW0uXG4iCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgfQotI2lmbmRlZiBOT1NIT1cK LSAgICAgICAgICAgICAgICBwcmludGYoCi0iIC4gU0hPVyBDT01NVU5JQ0FUSU9OUywgU0hPVyBN T0RFTSwgU0hPVyBESUFMIHRvIHNlZSBjdXJyZW50IHNldHRpbmdzLlxuIgotICAgICAgICAgICAg ICAgICAgICAgICApOwotI2VuZGlmIC8qIE5PU0hPVyAqLwotCi0jaWZuZGVmIE5PSEVMUAotICAg ICAgICAgICAgICAgIHByaW50ZigKLSIgLiBIRUxQIFNFVCBNT0RFTSwgSEVMUCBTRVQgRElBTCwg YW5kIEhFTFAgRElBTCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIKLSAgICAgICAgICAgICAgICAg ICAgICAgKTsKLSNlbmRpZiAvKiBOT0hFTFAgKi8KLSAgICAgICAgICAgICAgICBwcmludGYoIihV c2UgU0VUIEhJTlRTIE9GRiB0byBzdXBwcmVzcyBmdXR1cmUgaGludHMuKVxuIik7Ci0gICAgICAg ICAgICAgICAgcHJpbnRmKCIqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiIpOwotICAgICAg ICAgICAgfQotI2VuZGlmIC8qIE5PSElOVFMgKi8KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1 cm4oc3VjY2Vzcyk7Ci19Ci0jZW5kaWYgLyogTk9ESUFMICovCi0KLS8qICBEIE8gVCBZIFAgRSAg LS0gIFR5cGUgKGRpc3BsYXkpIGEgZmlsZSB3aXRoIHZhcmlvdXMgb3B0aW9ucy4uLiAgKi8KLQot I2lmZGVmIEJJR0JVRk9LCi0jZGVmaW5lIFRZUEJVRkwgMTYzODQKLSNlbHNlCi0jZGVmaW5lIFRZ UEJVRkwgMjU2Ci0jZW5kaWYgLyogQklHQlVGT0sgKi8KLQotaW50IHR5cF9saW5lcyA9IDA7ICAg ICAgICAgICAgICAgICAgICAgIC8qIFx2KHR5X2xuKSAqLwotaW50IHR5cF9tdGNocyA9IDA7ICAg ICAgICAgICAgICAgICAgICAgIC8qIFx2KHR5X2xtKSAqLwotc3RhdGljIGludCB0eXBfaW50ID0g MDsgICAgICAgICAgICAgICAgIC8qIEZsYWcgaWYgVFlQRSBpbnRlcnJ1cHRlZCAqLwotCi0jaWZk ZWYgVU5JQ09ERQotZXh0ZXJuIGludCBmY2hhcnNldCwgZmlsZW9yZGVyLCBieXRlb3JkZXIsIHVj c29yZGVyOwotI2RlZmluZSBUWVBYQlVGTCBUWVBCVUZMK1RZUEJVRkwrVFlQQlVGTCs0Ci1zdGF0 aWMgY2hhciAqIG1wID0gTlVMTDsKLXN0YXRpYyBjaGFyICogbWJ1ZiA9IE5VTEw7Ci1zdGF0aWMg bG9uZyB4biA9IDBMOwotCi1zdGF0aWMgaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXN0b3JlY2hhcihj aGFyIGMpCi0jZWxzZQotc3RvcmVjaGFyKGMpIGNoYXIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAq LwotewotICAgIGlmICghbXApIHJldHVybigtMSk7Ci0gICAgaWYgKCsreG4gPiBUWVBYQlVGTCkK LSAgICAgIHJldHVybigtMSk7Ci0gICAgZGVidWcoRjExMSwic3RvcmVjaGFyIHhuIixja2l0b2Eo KGludCljKSx4bik7Ci0gICAgKm1wKysgPSBjOwotICAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAv KiBVTklDT0RFICovCi0KLXN0YXRpYyBGSUxFICogb2ZwID0gTlVMTDsgICAgICAgICAgICAgICAv KiBGb3IgL09VVFBVVDogZmlsZSAqLwotCi1zdGF0aWMgaW50Ci10eXBlbGluZShidWYsbGVuLG91 dGNzLG9mcCkgY2hhciAqIGJ1ZjsgaW50IGxlbiwgb3V0Y3M7IEZJTEUgKiBvZnA7IHsKLSAgICBy ZWdpc3RlciBpbnQgaTsKLQotICAgIGRlYnVnKEYwMTEsInR5cGVsaW5lIGJ1ZiIsYnVmLGxlbik7 Ci0gICAgLyogZGVidWcoRjEwMSwidHlwZWxpbmUgb3V0Y3MiLCIiLG91dGNzKTsgKi8KLQotI2lm ZGVmIE9TMgotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgVU5JQ09ERQotICAgIC8qIEluIEs5NSBv bmx5LCB0aGUgYnVmZmVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgaW4gVUNTLTIgaWYgb3V0Y3MgPj0g MC4gKi8KLSAgICAvKiBMZW4gaXMgaXRzIGxlbmd0aCBpbiBieXRlcy4gIFRoZXJlIGlzIG5vIGxp bmUgdGVybWluYXRvci4gKi8KLSAgICAvKiBvdXRjcyBpcyB0aGUgZmlsZSBjaGFyYWN0ZXItc2V0 IG51bWJlciAoRkNfeHh4KSBvZiB0aGUgdGFyZ2V0IHNldCAqLwotICAgIC8qIHRoYXQgd2FzIHJl cXVlc3RlZCBieSB0aGUgdXNlci4gKi8KLSAgICBpZiAoIWluc2VydmVyICYmICFrOTVzdGRvdXQp IHsKLSAgICAgICAgZXh0ZXJuIGludCB3aGVyZXhbXSwgd2hlcmV5W107Ci0gICAgICAgIGV4dGVy biB1bnNpZ25lZCBjaGFyIGNvbG9yY21kOwotCi0gICAgICAgIFZzY3JuV3J0VUNTMlN0ckF0dCgg VkNNRCwgKHVuc2lnbmVkIHNob3J0ICopYnVmLCBsZW4vMiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIHdoZXJleVtWQ01EXSwgd2hlcmV4W1ZDTURdLCAmY29sb3JjbWQpOwotICAgICAgICBw cmludGYoIlxyXG4iKTsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBVTklD T0RFICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0vKiBJbiBV bml4LCBWTVMsIGV0YywgdGhlIGxpbmUgaGFzIGFscmVhZHkgYmVlbiBjb252ZXJ0ZWQgdG8gdGhl IGRlc2lyZWQgICovCi0vKiBjaGFyYWN0ZXItc2V0LCBpZiBvbmUgd2FzIGdpdmVuLiAgT1IuLi4g b24gYWxsIHBsYXRmb3JtcywgaW5jbHVkaW5nIGluICovCi0vKiBLOTUsIHdlIGRvbid0IGtub3cg dGhlIGNoYXJhY3RlciBzZXQuICBJbiBlaXRoZXIgY2FzZSB3ZSBkdW1wIHRoZSBsaW5lICovCi0v KiBieXRlIGJ5IGJ5dGUgaW4gY2FzZSBpdCBjb250YWlucyBOVUxzIChwcmludGYoKSB3b3VsZCB0 cnVuY2F0ZSkuICovCi0KLSNpZmRlZiBDT01NRU5UCi0gICAgZm9yIChpID0gMDsgaSA8IGxlbjsg aSsrKQotICAgICAgcHV0Y2hhcihidWZbaV0pOwotI2Vsc2UKLSAgICBmb3IgKGkgPSAwOyBpIDwg bGVuOyBpKyspIHsKLSAgICAgICAgaWYgKG9mcCA9PSBzdGRvdXQpIHsKLSAgICAgICAgICAgIHB1 dGNoYXIoYnVmW2ldKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1dGMoYnVmW2ld LG9mcCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0jaWZkZWYg SUtTRAotICAgIGlmIChpbnNlcnZlcikgewotI2lmZGVmIFVOSUNPREUKLSAgICAgICAgaWYgKG91 dGNzID09IEZDX1VDUzIpIHsKLSAgICAgICAgICAgIGlmIChvZnAgPT0gc3Rkb3V0KSB7Ci0gICAg ICAgICAgICAgICAgcHV0Y2hhcihOVUwpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgICAgICBwdXRjKE5VTCxvZnApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYg LyogVU5JQ09ERSAqLwotICAgICAgICBpZiAob2ZwID09IHN0ZG91dCkgewotICAgICAgICAgICAg cHV0Y2hhcignXHInKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1dGMoJ1xyJyxv ZnApOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLSNpZmRlZiBVTklDT0RF Ci0gICAgaWYgKG91dGNzID09IEZDX1VDUzIpIHsKLSAgICAgICAgaWYgKG9mcCA9PSBzdGRvdXQp IHsKLSAgICAgICAgICAgIHB1dGNoYXIoTlVMKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgIHB1dGMoTlVMLG9mcCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogVU5JQ09ERSAq LwotICAgIGlmIChvZnAgPT0gc3Rkb3V0KSB7Ci0gICAgICAgIHB1dGNoYXIoJ1xuJyk7Ci0gICAg fSBlbHNlIHsKLSAgICAgICAgcHV0YygnXG4nLG9mcCk7Ci0gICAgfQotICAgIGZmbHVzaChzdGRv dXQpOwotICAgIHJldHVybigwKTsKLX0KLQotc3RhdGljIGludCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEdldCB0cmFuc2xhdGVkIGxpbmUgKi8KLXR5cGVnZXRsaW5lKGluY3MsIG91 dGNzLCBidWYsIG4pIGludCBpbmNzLCBvdXRjcywgbjsgY2hhciAqIGJ1ZjsgewotICAgIGludCB4 ID0gMCwgYzAsIGMxLCBsZW4gPSAwLCBjb3VudCA9IDAsIGVvZiA9IDAsIHhsYXRlID0gMDsKLSNp ZmRlZiBVTklDT0RFCi0gICAgaW50IHh4biA9IC0xOwotICAgIGludCB5eW4gPSAtOTsKLSAgICB4 biA9IDBMOwotCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nICYmIHR5cF9saW5lcyA9PSAw KSB7Ci0gICAgICAgIGRlYnVnKEYxMDEsInR5cGVnZXRsaW5lIGluY3MiLCIiLGluY3MpOwotICAg ICAgICBkZWJ1ZyhGMTAxLCJ0eXBlZ2V0bGluZSBvdXRjcyIsIiIsb3V0Y3MpOwotICAgICAgICBk ZWJ1ZyhGMTAxLCJ0eXBlZ2V0bGluZSBmZW9sIiwiIixmZW9sKTsKLSAgICAgICAgZGVidWcoRjEw MSwidHlwZWdldGxpbmUgYnl0ZW9yZGVyIiwiIixieXRlb3JkZXIpOwotICAgICAgICBkZWJ1ZyhG MTAxLCJ0eXBlZ2V0bGluZSB1Y3NvcmRlciAiLCIiLHVjc29yZGVyKTsKLSAgICAgICAgZGVidWco RjExMSwidHlwZWdldGxpbmUgZmlsZW9yZGVyIiwiMSIsZmlsZW9yZGVyKTsKLSAgICB9Ci0jZW5k aWYgLyogREVCVUcgKi8KLQotICAgIGlmIChpbmNzIDwgMCkgICAgICAgICAgICAgICAgICAgICAg IC8qIFNob3VsZG4ndCBoYXBwZW4gKi8KLSAgICAgIHJldHVybigtMik7Ci0KLSAgICBpZiAob3V0 Y3MgPT0gLTEpICAgICAgICAgICAgICAgICAgICAvKiBDYW4gaGFwcGVuICovCi0gICAgICBvdXRj cyA9IGluY3M7Ci0KLSAgICBpZiAoaW5jcyAhPSBvdXRjcyB8fCBpbmNzID09IEZDX1VDUzIpIHsg LyogU2VlIGlmIHdlIHNob3VsZCB0cmFuc2xhdGUgKi8KLSAgICAgICAgeGxhdGUgPSAxOwotICAg ICAgICBpZiAoIW1idWYpIHsgICAgICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIGJ1ZmZlciBp ZiBub3QgYWxsb2NhdGVkICovCi0gICAgICAgICAgICBtYnVmID0gKGNoYXIgKiltYWxsb2MoVFlQ WEJVRkwrMSk7IC8qIHlldCAqLwotICAgICAgICAgICAgaWYgKCFtYnVmKSB7Ci0gICAgICAgICAg ICAgICAgcHJpbnRmKCJXQVJOSU5HOiBUcmFuc2xhdGlvbiBidWZmZXIgYWxsb2NhdGlvbiBmYWls dXJlLlxuIik7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJUcmFuc2xhdGlvbiB3aWxsIGJlIHNr aXBwZWQuLi5cbiIpOwotICAgICAgICAgICAgICAgIHhsYXRlID0gMDsKLSAgICAgICAgICAgIH0K LSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoeGxhdGUpIHsgICAgICAgICAgICAgICAgICAgICAg ICAvKiBUcmFuc2xhdGluZy4uLiAqLwotICAgICAgICBtcCA9IG1idWY7ICAgICAgICAgICAgICAg ICAgICAgIC8qIFJlc2V0IHdvcmtpbmcgYnVmZmVyIHBvaW50ZXIgKi8KLS8qCi0gIEhlcmUgd2Ug Y2FsbCB4Z25ieXRlKCkgaW4gYSBsb29wLCBoYXZpbmcgaXQgcmV0dXJuIFVDUy0yIGJ5dGVzLiAg SW4gSzk1LCB3ZQotICB1c2UgVUNTLTIgZGlyZWN0bHkuICBFbHNld2hlcmUsIHdlIGZlZWQgdGhl IFVDUy0yIGJ5dGVzIGludG8geHBuYnl0ZSgpIHRvCi0gIGNvbnZlcnQgdGhlbSB0byB0aGUgZGVz aXJlZCB0YXJnZXQgY2hhcmFjdGVyIHNldC4gIEJ1dCBzaW5jZSB3ZSBhcmUgdXNpbmcKLSAgVUNT LTIsIHdlIGhhdmUgc2V2ZXJhbCBzb3VyY2VzIGZvciBjb25mdXNpb246ICgxKSB4Z25ieXRlKCkg bWlnaHQgcmV0dXJuIGluCi0gIExFIG9yIEJFIGJ5dGUgb3JkZXIsIHdpdGggbm8gZXhwbGljaXQg aW5kaWNhdGlvbiBvZiB3aGF0IHRoZSBvcmRlciBpczsgYnV0Ci0gICgyKSB4cG5ieXRlKCkgd2Fu dHMgQkU7IGJ1dCAoMykgV2luZG93cyB3YW50cyBMRS4KLSovCi0gICAgICAgIHdoaWxlICgxKSB7 Ci0gICAgICAgICAgICBpZiAodHlwX2ludCkgICAgICAgICAgICAgICAgLyogUXVpdCBpZiBpbnRl cnJ1cHRlZCAqLwotICAgICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgICAgICBjMCA9IHhn bmJ5dGUoRkNfVUNTMixpbmNzLE5VTEwpOyAvKiBDb252ZXJ0IHRvIFVDUy0yICovCi0gICAgICAg ICAgICBkZWJ1ZyhGMDAwLCJ0eXBlZ2V0bGluZSBjMCIsIiIsYzApOwotICAgICAgICAgICAgaWYg KGMwIDwgMCkgeyAgICAgICAgICAgICAgIC8qIEVPRiAqLwotICAgICAgICAgICAgICAgIGVvZisr OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYzEg PSB4Z25ieXRlKEZDX1VDUzIsaW5jcyxOVUxMKTsgLyogQ29udmVydCB0byBVQ1MtMiAqLwotICAg ICAgICAgICAgZGVidWcoRjAwMCwidHlwZWdldGxpbmUgYzEiLCIiLGMxKTsKLSAgICAgICAgICAg IGlmIChjMSA8IDApIHsgICAgICAgICAgICAgICAvKiBFT0YgKi8KLSAgICAgICAgICAgICAgICBl b2YrKzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSNpZmRlZiBERUJV RwotICAgICAgICAgICAgaWYgKGRlYmxvZyAmJiB0eXBfbGluZXMgPT0gMCkgewotICAgICAgICAg ICAgICAgIGlmIChjb3VudCA9PSAwKSAvKiBDaGVjayBmaWxlb3JkZXIgYWZ0ZXIgQk9NICovCi0g ICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0eXBlZ2V0bGluZSBmaWxlb3JkZXIiLCIyIixm aWxlb3JkZXIpOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0KLSNpZmRlZiBD T01NRU5UCi0vKiBOb3cgd2UgaGF2ZSB0aGUgdHdvIFVDUy0yIGJ5dGVzLiAgV2hpY2ggb3JkZXIg YXJlIHRoZXkgaW4/ICovCi0KLSAgICAgICAgICAgIGlmIChmaWxlb3JkZXIgPiAwKSB7ICAgICAg ICAvKiBMaXR0bGUgRW5kaWFuICovCi0gICAgICAgICAgICAgICAgaW50IHQ7ICAgICAgICAgICAg ICAgICAgLyogU28gc3dhcCB0aGVtICovCi0gICAgICAgICAgICAgICAgZGVidWcoRjEwMCwidHlw ZWdldGxpbmUgc3dhcHBpbmciLCIiLDApOwotICAgICAgICAgICAgICAgIHQgPSBjMTsKLSAgICAg ICAgICAgICAgICBjMSA9IGMwOwotICAgICAgICAgICAgICAgIGMwID0gdDsKLSAgICAgICAgICAg IH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICBpZiAoYzAgPT0gMCAmJiBjMSA9 PSAweDBEKSAgLyogTm93IHNlZSBpZiB3ZSBoYXZlIEVPTCAqLwotICAgICAgICAgICAgICB5eW4g PSB4bjsKLQotICAgICAgICAgICAgaWYgKGMwID09IDAgJiYgYzEgPT0gMHgwQSkgIC8qIE5vdyBz ZWUgaWYgd2UgaGF2ZSBFT0wgKi8KLSAgICAgICAgICAgICAgeHhuID0geG47Ci0KLSAgICAgICAg ICAgIGNvdW50Kys7ICAgICAgICAgICAgICAgICAgICAvKiBDb3VudCBieXRlICovCi0KLS8qIEdp dmUgdGhlIHR3byBieXRlcyB0byB4cG5ieXRlKCkgaW4gQkUgb3JkZXIgKi8KLQotICAgICAgICAg ICAgaWYgKCh4ID0geHBuYnl0ZShjMCxUQ19VQ1MyLG91dGNzLHN0b3JlY2hhcikpIDwgMCkgcmV0 dXJuKC0xKTsKLSAgICAgICAgICAgIGlmICgoeCA9IHhwbmJ5dGUoYzEsVENfVUNTMixvdXRjcyxz dG9yZWNoYXIpKSA8IDApIHJldHVybigtMSk7Ci0KLSAgICAgICAgICAgIGlmICh4eG4gPiAtMSkg eyAgICAgICAgICAgICAvKiBIYXZlIGVuZCBvZiBsaW5lPyAqLwotICAgICAgICAgICAgICAgIHhu ID0geHhuOwotICAgICAgICAgICAgICAgIGlmICh5eW4gPT0geHhuIC0gMikgICAgIC8qIEFkanVz dCBmb3IgQ1JMRiAqLwotICAgICAgICAgICAgICAgICAgeG4gPSB5eW47Ci0gICAgICAgICAgICAg ICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogQW5kIGJyZWFrIG91dCBvZiBsb29wLiAqLwot ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1idWZbeG5dID0gTlVMOwotICAgICAg ICBpZiAoeG4gPiBuKSAgICAgICAgICAgICAgICAgICAgIC8qIENhbiB0cnVuY2F0ZSBoZXJlLi4u ICovCi0gICAgICAgICAgeG4gPSBuOwotICAgICAgICBtZW1jcHkoYnVmLG1idWYseG4pOwotICAg ICAgICBkZWJ1ZyhGMDExLCJ0eXBlZ2V0bGluZSB4bGF0ZSIsYnVmLHhuKTsKLSAgICAgICAgcmV0 dXJuKChlb2YgJiYgKHhuID09IDApKSA/IC0xIDogeG4pOwotICAgIH0KLSNlbmRpZiAvKiBVTklD T0RFICovCi0jaWZkZWYgQ09NTUVOVAotICAgIC8qIFdlIGNhbid0IHVzZSB0aGlzIGJlY2F1c2Us IHN0dXBpZGx5LCB6c2lubCgpIGRvZXNuJ3QgcmV0dXJuIGEgbGVuZ3RoLiAqLwotICAgIC8qIEl0 IGNvdWxkIGJlIGNoYW5nZWQgYnV0IHRoZW4gd2UnZCBoYXZlIHRvIGNoYW5nZSBhbGwgY2s/Zmlv LmMgbW9kdWxlcyAqLwotICAgIHggPSB6c2lubChaSUZJTEUsYnVmLG4pOwotI2Vsc2UKLSAgICAv KiBTbyBpbnN0ZWFkLCB3ZSBjb3B5IHpzaW5sKCkgdG8gaGVyZS4uLiAqLwotICAgIC8qIEJ1dCBu b3RlOiBUaGlzIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGhhbmRsZSBVQ1MtMiBhbGlnbm1lbnQgcHJv cGVybHk7ICAqLwotICAgIC8qIHRoYXQncyB3aGF0IHRoZSBjb2RlIGluIHRoZSBmaXJzdCBzZWN0 aW9uIG9mIHRoaXMgcm91dGluZSBpcyBmb3IuICovCi0gICAgLyogQnV0IGl0IGRvZXMgdG9sZXJh dGUgZmlsZXMgdGhhdCBjb250YWluIE5VTHMuICovCi0gICAgewotICAgICAgICBpbnQgYTsKLSAg ICAgICAgY2hhciAqczsKLQotICAgICAgICBzID0gYnVmOwotICAgICAgICBhID0gLTE7ICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgY2hhcmFjdGVyLCBub25lIHlldC4gKi8KLSAg ICAgICAgZGVidWcoRjEwMSwidHlwZWdldGxpbmUgenNpbmwgc2ltdWxhdGlvbiIsIiIsbik7Ci0g ICAgICAgIHdoaWxlIChuLS0pIHsgICAgICAgICAgICAgICAgICAgLyogVXAgdG8gZ2l2ZW4gbGVu Z3RoICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgaW50IG9sZCA9IDA7Ci0gICAgICAg ICAgICBpZiAoZmVvbCkgICAgICAgICAgICAgICAgICAgLyogUHJldmlvdXMgY2hhcmFjdGVyICov Ci0gICAgICAgICAgICAgIG9sZCA9IGE7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAg ICAgaWYgKHpjaGluKFpJRklMRSwmYSkgPCAwKSB7IC8qIFJlYWQgYSBjaGFyYWN0ZXIgZnJvbSB0 aGUgZmlsZSAqLwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsInR5cGVnZXRsaW5lIHpjaGlu IGZhaWwiLCIiLGNvdW50KTsKLSAgICAgICAgICAgICAgICBpZiAoY291bnQgPT0gMCkKLSAgICAg ICAgICAgICAgICAgIHggPSAtMTsgICAgICAgICAgICAgICAvKiBFT0Ygb3Igb3RoZXIgZXJyb3Ig Ki8KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg ICAgICBjb3VudCsrOwotICAgICAgICAgICAgaWYgKGZlb2wpIHsgICAgICAgICAgICAgICAgIC8q IFNpbmdsZS1jaGFyYWN0ZXIgbGluZSB0ZXJtaW5hdG9yICovCi0gICAgICAgICAgICAgICAgaWYg KGEgPT0gZmVvbCkKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfSBlbHNl IHsgICAgICAgICAgICAgICAgICAgIC8qIENSTEYgbGluZSB0ZXJtaW5hdG9yICovCi0jaWZkZWYg Q09NTUVOVAotLyogRGVidWcgbG9nIHNob3dzIHRoYXQgaW4gV2luZG93cywgPENSPjxMRj4gaXMg cmV0dXJuZWQgYXMgPExGPi4gKi8KLS8qIEFwcGFyZW50bHkgd2UncmUgbm90IHJlYWRpbmcgdGhl IGZpbGUgaW4gYmluYXJ5IG1vZGUuICovCi0KLSAgICAgICAgICAgICAgICBpZiAoYSA9PSAnXDAx NScpICAgICAgICAvKiBDUiwgZ2V0IG5leHQgY2hhcmFjdGVyICovCi0gICAgICAgICAgICAgICAg ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAob2xkID09ICdcMDE1JykgeyAgICAvKiBQ cmV2aW91cyBjaGFyYWN0ZXIgd2FzIENSICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChhID09 ICdcMDEyJykgeyAgLyogVGhpcyBvbmUgaXMgTEYsIHNvIHdlIGhhdmUgYSBsaW5lICovCi0gICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsg ICAgICAgICAgICAvKiBOb3QgTEYsIGRlcG9zaXQgQ1IgKi8KLSAgICAgICAgICAgICAgICAgICAg ICAgICpzKysgPSAnXDAxNSc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuLS07Ci0gICAgICAg ICAgICAgICAgICAgICAgICBsZW4rKzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgaWYgKGEgPT0gTEYpIHsKLSAgICAgICAg ICAgICAgICAgICAgaWYgKHNbbGVuXSA9PSBDUikgeyAvKiBUaGlzIHByb2JhYmx5IHdvbid0IGhh cHBlbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgc1tsZW5dID0gTlVMOwotICAgICAgICAg ICAgICAgICAgICAgICAgcy0tOwotICAgICAgICAgICAgICAgICAgICAgICAgbGVuLS07Ci0gICAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICpzID0gYTsgICAgICAgICAgICAgICAgICAgICAvKiBEZXBvc2l0IGNoYXJhY3RlciAqLwotICAg ICAgICAgICAgcysrOwotICAgICAgICAgICAgbGVuKys7Ci0gICAgICAgIH0KLSAgICAgICAgKnMg PSAnXDAnOyAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGUgdGhlIHN0cmluZyAqLwot ICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgcmV0dXJuKHggPCAwID8gLTEgOiBsZW4p OwotfQotCi0KLSNpZm5kZWYgTUFDCi1TSUdUWVAKLSNpZmRlZiBDS19BTlNJQwotdHl0cmFwKGlu dCBmb28pICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRZUEUgaW50ZXJydXB0IHRyYXAgKi8K LSNlbHNlCi10eXRyYXAoZm9vKSBpbnQgZm9vOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB0 eXRyYXAgKi8gewotI2lmZGVmIF9fRU1YX18KLSAgICBzaWduYWwoU0lHSU5ULCBTSUdfQUNLKTsK LSNlbmRpZgotICAgIGRlYnVnKEYxMDAsInR5cGUgdHl0cmFwIFNJR0lOVCIsIiIsMCk7Ci0gICAg dHlwX2ludCA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgLyogKE5lZWQgYXJnIGZvciBBTlNJ IEMpICovCi0gICAgU0lHUkVUVVJOOwotfQotI2VuZGlmIC8qIE1BQyAqLwotCi1pbnQKLWRvdHlw ZShmaWxlLCBwYWdpbmcsIGZpcnN0LCBoZWFkLCBwYXQsIHdpZHRoLCBwcmVmaXgsIGluY3MsIG91 dGNzLCBvdXRmaWxlLCB6KQotICAgIGNoYXIgKiBmaWxlLCAqIHBhdCwgKiBwcmVmaXg7IGludCBw YWdpbmcsIGZpcnN0LCBoZWFkLCB3aWR0aCwgaW5jcywgb3V0Y3M7Ci0gICAgY2hhciAqIG91dGZp bGU7IGludCB6OwotLyogZG90eXBlICovIHsKLSAgICBleHRlcm4gQ0tfT0ZGX1QgZmZjOwotICAg IGNoYXIgYnVmW1RZUEJVRkwrMl07Ci0gICAgY2hhciAqIHMgPSBOVUxMOwotICAgIGludCByYyA9 IDEsIGxpbmVzID0gMCwgdWNzMiA9IDA7Ci0gICAgY2hhciAqKiB0YWlsID0gTlVMTDsKLSAgICBp bnQgKiB0bGVuID0gTlVMTDsKLSAgICBpbnQgdGFpbGluZyA9IDAsIGNvdW50aW5nID0gMDsKLSAg ICBpbnQgeCwgYywgbiwgaSwgaiwgayA9IDA7Ci0gICAgaW50IG51bWJlciA9IDAsIHNhdmUsIGxl biwgcGZ4bGVuID0gMCwgZXZhbHBmeCA9IDE7Ci0jaWZkZWYgVU5JQ09ERQotICAgIGludCB1Y3Ni b21fc2F2OwotICAgIGV4dGVybiBpbnQgdWNzYm9tOwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSNp ZmRlZiBOVAotICAgIGludCBndWkgPSAwOwotI2VuZGlmIC8qIE5UICovCi0KLSNpZm5kZWYgTUFD Ci0jaWZkZWYgT1MyCi0jaWZkZWYgTlQKLSAgICBTSUdUWVAgKCogb2xkc2lnKShpbnQpOyAgICAg ICAgICAgICAvKiBGb3Igc2F2aW5nIG9sZCBpbnRlcnJ1cHQgdHJhcC4gKi8KLSNlbHNlIC8qIE5U ICovCi0gICAgU0lHVFlQICgqIHZvbGF0aWxlIG9sZHNpZykoaW50KTsKLSNlbmRpZiAvKiBOVCAq LwotI2Vsc2UgLyogT1MyICovCi0gICAgU0lHVFlQICgqIG9sZHNpZykoKTsKLSNlbmRpZiAvKiBP UzIgKi8KLSNlbmRpZiAvKiBNQUMgKi8KLQotI2lmZGVmIEtVSQotICAgIGlmIChvdXRmaWxlID09 IChjaGFyICopMSkgewotICAgICAgICBndWkgPSAxOwotICAgICAgICBvdXRmaWxlID0gIiI7Ci0g ICAgfQotI2VuZGlmIC8qIEtVSSAqLwotCi0gICAgaWYgKCFmaWxlKSBmaWxlID0gIiI7Ci0gICAg aWYgKCEqZmlsZSkgcmV0dXJuKC0yKTsKLQotICAgIGlmIChvZnAgIT0gc3Rkb3V0KSB7ICAgICAg ICAgICAgICAgIC8qIEluIGNhc2Ugb2YgcHJldmlvdXMgaW50ZXJydXB0aW9uICovCi0gICAgICAg IGlmIChvZnApIGZjbG9zZShvZnApOwotICAgICAgICBvZnAgPSBzdGRvdXQ7Ci0gICAgfQotICAg IGlmICghb3V0ZmlsZSkgb3V0ZmlsZSA9ICIiOwotICAgIGlmIChvdXRmaWxlWzBdKSB7Ci0gICAg ICAgIG9mcCA9IGZvcGVuKG91dGZpbGUsInciKTsgICAgICAgLyogT3BlbiBvdXRwdXQgZmlsZSAq LwotICAgICAgICBpZiAoIW9mcCkgewotICAgICAgICAgICAgcHJpbnRmKCI/Q2FuJ3Qgb3BlbiBv dXRwdXQgZmlsZSAlczogJXNcbiIsb3V0ZmlsZSxja19lcnJzdHIoKSk7Ci0gICAgICAgICAgICBv ZnAgPSBzdGRvdXQ7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0gICAgfQot ICAgIG51bWJlciA9IHo7Ci0gICAgaWYgKG51bWJlciAmJiBwcmVmaXgpIHByZWZpeCA9IE5VTEw7 Ci0KLSNpZmRlZiBVTklDT0RFCi0gICAgdWNzYm9tX3NhdiA9IHVjc2JvbTsgICAgICAgICAgICAg ICAgLyogV2UgYXJlIG5vdCBjcmVhdGluZyBhIGZpbGUgKi8KLSAgICB1Y3Nib20gPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBEbyBub3QgdXNlIEJPTSBieXRlcyAqLwotI2VuZGlmIC8q IFVOSUNPREUgKi8KLQotICAgIHR5cF9pbnQgPSAwOwotCi0gICAgc2F2ZSA9IGJpbmFyeTsgICAg ICAgICAgICAgICAgICAgICAgLyogU2F2ZSBmaWxlIHR5cGUgKi8KLQotICAgIGRlYnVnKEYxMDEs ImRvdHlwZSBpbmNzIiwiIixpbmNzKTsKLSAgICBkZWJ1ZyhGMTAxLCJkb3R5cGUgb3V0Y3MiLCIi LG91dGNzKTsKLQotI2lmZGVmIFVOSUNPREUKLSAgICBkZWJ1ZyhGMTExLCJkb3R5cGUgZmlsZW9y ZGVyIiwiQSIsZmlsZW9yZGVyKTsKLSNpZmRlZiBPUzIKLSAgICBpZiAoIWluc2VydmVyICYmICFr OTVzdGRvdXQpCi0gICAgICBvdXRjcyA9IEZDX1VDUzI7Ci0jZW5kaWYgLyogT1MyICovCi0KLSAg ICBpZiAob3V0Y3MgPT0gRkNfVUNTMikgICAgICAgICAgICAgICAvKiBPdXRwdXQgaXMgVUNTLTI/ ICovCi0gICAgICB1Y3MyID0gMTsKLSAgICBpZiAoZmlsZW9yZGVyIDwgMCkKLSAgICAgIGZpbGVv cmRlciA9IHVjc29yZGVyOwotICAgIGRlYnVnKEYxMTEsImRvdHlwZSBmaWxlb3JkZXIiLCJCIixm aWxlb3JkZXIpOwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQotI2lmZGVmIENLX1RUR1dTSVoKLSNp ZmRlZiBPUzIKLSAgICB0dGdjd3N6KCk7Ci0jZWxzZSAvKiBPUzIgKi8KLSAgICAvKiBDaGVjayB3 aGV0aGVyIHdpbmRvdyBzaXplIGNoYW5nZWQgKi8KLSAgICBpZiAodHRnd3NpeigpID4gMCkgewot ICAgICAgICBpZiAodHRfcm93cyA+IDAgJiYgdHRfY29scyA+IDApIHsKLSAgICAgICAgICAgIGNt ZF9yb3dzID0gdHRfcm93czsKLSAgICAgICAgICAgIGNtZF9jb2xzID0gdHRfY29sczsKLSAgICAg ICAgICAgIGRlYnVnKEYxMDEsImRvdHlwZSBjbWRfcm93cyIsIiIsY21kX3Jvd3MpOwotICAgICAg ICAgICAgZGVidWcoRjEwMSwiZG90eXBlIGNtZF9jb2xzIiwiIixjbWRfY29scyk7Ci0gICAgICAg IH0KLSAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogQ0tfVFRHV1NJWiAqLwotCi0g ICAgaWYgKHByZWZpeCkKLSAgICAgIHBmeGxlbiA9IHN0cmxlbihwcmVmaXgpOwotCi0gICAgaWYg KHBhZ2luZyA8IDApIHsgICAgICAgICAgICAgICAgICAgLyogQ291bnQgb25seSwgZG9uJ3QgcHJp bnQgKi8KLSAgICAgICAgY291bnRpbmcgPSAxOwotICAgICAgICBwcmVmaXggPSBOVUxMOwotICAg ICAgICB3aWR0aCA9IDA7Ci0gICAgICAgIHBhZ2luZyA9IDA7Ci0gICAgfQotICAgIGlmICh1Y3My KSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENydWRlLi4uICovCi0gICAgICB3aWR0aCAq PSAyOwotCi0jaWZkZWYgT1MyCi0gICAgaWYgKCpmaWxlKSB7Ci0gICAgICAgIGNrc3RybmNweShi dWYsIGZpbGUsIFRZUEJVRkwpOyAgLyogQ2hhbmdlIC8gdG8gXC4gKi8KLSAgICAgICAgcCA9IGJ1 ZjsKLSAgICAgICAgd2hpbGUgKCpwKSB7Ci0gICAgICAgICAgICBpZiAoKnAgPT0gJy8nKSAqcCA9 ICdcXCc7Ci0gICAgICAgICAgICBwKys7Ci0gICAgICAgIH0KLSAgICAgICAgZmlsZSA9IGJ1ZjsK LSAgICB9IGVsc2UgewotICAgICAgICByYyA9IDA7Ci0gICAgICAgIGdvdG8geGRvdHlwZTsKLSAg ICB9Ci0jZW5kaWYgLyogT1MyICovCi0KLSAgICBpZiAoemNoa2koZmlsZSkgPT0gLTIpIHsgICAg ICAgICAgICAvKiBJdCdzIGEgZGlyZWN0b3J5ICovCi0gICAgICAgIGRlYnVnKEYxMTEsImRvdHlw ZSB6Y2hraSBmYWlsdXJlIixmaWxlLC0yKTsKLSAgICAgICAgaWYgKHhjbWRzcmMgPT0gMCkgewot ICAgICAgICAgICAgcHJpbnRmKCI/Tm90IGEgcmVndWxhciBmaWxlOiBcIiVzXCJcbiIsZmlsZSk7 Ci0gICAgICAgICAgICByYyA9IC05OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICByYyA9IDA7 Ci0gICAgICAgIGdvdG8geGRvdHlwZTsKLSAgICB9Ci0gICAgaWYgKCF6b3BlbmkoWklGSUxFLCBm aWxlKSkgeyAgICAgICAgLyogTm90IGEgZGlyZWN0b3J5LCBvcGVuIGl0ICovCi0gICAgICAgIGRl YnVnKEYxMTEsImRvdHlwZSB6b3BlbmkgZmFpbHVyZSIsZmlsZSwwKTsKLSAgICAgICAgaWYgKHhj bWRzcmMgPT0gMCkgewotICAgICAgICAgICAgcHJpbnRmKCI/Q2FuJ3Qgb3BlbiBmaWxlOiBcIiVz XCJcbiIsZmlsZSk7Ci0gICAgICAgICAgICByYyA9IC05OwotICAgICAgICB9IGVsc2UKLSAgICAg ICAgICByYyA9IDA7Ci0gICAgICAgIGdvdG8geGRvdHlwZTsKLSAgICB9Ci0KLSNpZm5kZWYgQU1J R0EKLSNpZm5kZWYgTUFDCi0gICAgZXJybm8gPSAwOwotICAgIG9sZHNpZyA9IHNpZ25hbChTSUdJ TlQsIHR5dHJhcCk7ICAgIC8qIFNhdmUgY3VycmVudCBpbnRlcnJ1cHQgdHJhcC4gKi8KLSAgICAv KiBkZWJ1ZyhGMTExLCJ0eXBlIFNJR0lOVCB0cmFwIHNldCIsY2tpdG9hKGVycm5vKSxvbGRzaWcp OyAqLwotI2VuZGlmIC8qIE1BQyAqLwotI2VuZGlmIC8qIEFNSUdBICovCi0KLSAgICBpZiAocGFn aW5nID4gLTEpICAgICAgICAgICAgICAgICAgICAvKiBNb3JlLXByb21wdGluZyAqLwotICAgICAg eGFza21vcmUgPSBwYWdpbmc7Ci0KLSAgICBiaW5hcnkgPSAwOwotCi0gICAgaWYgKGhlYWQgPCAw KSB7ICAgICAgICAgICAgICAgICAgICAgLyogInRhaWwiIHdhcyByZXF1ZXN0ZWQgKi8KLSAgICAg ICAgdGFpbGluZyA9IDE7ICAgICAgICAgICAgICAgICAgICAvKiBTZXQgZmxhZyAqLwotICAgICAg ICBoZWFkID0gMCAtIGhlYWQ7ICAgICAgICAgICAgICAgIC8qIEdldCBhYnNvbHV0ZSBudW1iZXIg b2YgbGluZXMgKi8KLSAgICAgICAgaWYgKCFjb3VudGluZykgewotICAgICAgICAgICAgdGFpbCA9 IChjaGFyICoqKSBtYWxsb2MoaGVhZCAqIHNpemVvZihjaGFyICopKTsgLyogQWxsb2NhdGUgbGlz dCAqLwotICAgICAgICAgICAgaWYgKCF0YWlsKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/ TWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIik7Ci0gICAgICAgICAgICAgICAgZ290byB4ZG90 eXBlOwotCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0bGVuID0gKGludCAqKSBtYWxsb2Mo aGVhZCAqIHNpemVvZihpbnQpKTsKLSAgICAgICAgICAgIGlmICghdGxlbikgewotICAgICAgICAg ICAgICAgIHByaW50ZigiP01lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIpOwotICAgICAgICAg ICAgICAgIGdvdG8geGRvdHlwZTsKLQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yIChp ID0gMDsgaSA8IGhlYWQ7IGkrKykgeyAvKiBJbml0aWFsaXplIGVhY2ggcG9pbnRlciBpbiBsaXN0 LiAqLwotICAgICAgICAgICAgICAgIHRhaWxbaV0gPSBOVUxMOwotICAgICAgICAgICAgICAgIHRs ZW5baV0gPSAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHR5cF9saW5l cyA9IDA7Ci0gICAgdHlwX210Y2hzID0gMDsKLQotI2lmZGVmIFVOSUNPREUKLSAgICBpZiAob3V0 Y3MgPiAtMSAmJiAoaW5jcyAhPSBvdXRjcyB8fCBpbmNzID09IEZDX1VDUzIpKSB7IC8qIFRyYW5z bGF0aW5nPyAqLwotICAgICAgICBmZmMgPSAoQ0tfT0ZGX1QpMDsKLSAgICAgICAgaW5pdHhsYXRl KGluY3Msb3V0Y3MpOyAgICAgICAgICAvKiBTZXQgdXAgdHJhbnNsYXRpb24gZnVuY3Rpb25zICov Ci0gICAgfSBlbHNlCi0jZW5kaWYgLyogVU5JQ09ERSAqLwotICAgICAgb3V0Y3MgPSAtMTsgICAg ICAgICAgICAgICAgICAgICAgIC8qIE1lYW5zIHdlIGRvbid0IGtub3cgdGhlIGNoYXJzZXQgKi8K LQotICAgIGRlYnVnKEYxMDEsImRvdHlwZSBmZmMiLCIiLGZmYyk7Ci0gICAgZGVidWcoRjEwMSwi ZG90eXBlIG91dGNzIDIiLCIiLG91dGNzKTsKLSNpZmRlZiBVTklDT0RFCi0gICAgZGVidWcoRjEx MSwiZG90eXBlIGZpbGVvcmRlciIsIkMiLGZpbGVvcmRlcik7Ci0jZW5kaWYgLyogVU5JQ09ERSAq LwotCi0gICAgLyogQWxsb3cgdGhlIGJ1ZmZlciB0byBjb250YWluIE5VTHMgKi8KLQotICAgIGZv ciAobiA9IGZpcnN0OwotICAgICAgICAgKGxlbiA9IHR5cGVnZXRsaW5lKGluY3Msb3V0Y3MsYnVm LFRZUEJVRkwpKSA+IC0xOwotICAgICAgICAgbGluZXMrKwotICAgICAgICAgKSB7Ci0gICAgICAg IGRlYnVnKEYwMTEsImRvdHlwZSBsaW5lIixidWYsbGVuKTsKLSNpZm5kZWYgTUFDCi0gICAgICAg IGlmICh0eXBfaW50KSB7ICAgICAgICAgICAgICAgICAgLyogSW50ZXJydXB0ZWQ/ICovCi0gICAg ICAgICAgICB0eXBfaW50ID0gMDsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsInR5cGUgaW50ZXJy dXB0ZWQgbGluZSIsIiIsbGluZXMpOwotICAgICAgICAgICAgcHJpbnRmKCJeQy4uLlxuIik7ICAg ICAgICAgIC8qIFByaW50IG1lc3NhZ2UgKi8KLSAgICAgICAgICAgIGlmIChvZnAgIT0gc3Rkb3V0 KSB7ICAgICAgICAvKiBDbG9zZSBhbnkgb3V0cHV0IGZpbGUgKi8KLSAgICAgICAgICAgICAgICBp ZiAob2ZwKSBmY2xvc2Uob2ZwKTsKLSAgICAgICAgICAgICAgICBvZnAgPSBzdGRvdXQ7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBnb3RvIHh4ZG90eXBlOwotICAgICAgICB9Ci0jZW5kaWYg LyogTUFDICovCi0gICAgICAgIHR5cF9saW5lcysrOyAgICAgICAgICAgICAgICAgICAgLyogRm9y IFx2KHR5X2xuKSAqLwotICAgICAgICBpZiAocGF0KSAgICAgICAgICAgICAgICAgICAgICAgIC8q IE1hdGNoaW5nPyAqLwotICAgICAgICAgIGlmICghY2ttYXRjaChwYXQsYnVmLDEsMSs0KSkgIC8q IExpbmUgbWF0Y2hlcyBwYXR0ZXJuPyAqLwotICAgICAgICAgICAgY29udGludWU7ICAgICAgICAg ICAgICAgICAgIC8qIE5vLCBza2lwIGl0ICovCi0gICAgICAgIHR5cF9tdGNocysrOwotCi0gICAg ICAgIGlmIChoZWFkID4gMCAmJiAhdGFpbGluZyAmJiBsaW5lcyA9PSBoZWFkKSAvKiBIYW5kbGUg L0hFQUQ6biAqLwotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGJ1ZltUWVBCVUZMKzFdID0g TlVMOyAgICAgICAgICAgLyogSnVzdCBpbiBjYXNlLi4uICovCi0gICAgICAgIGlmIChwcmVmaXgp IHsgICAgICAgICAgICAgICAgICAgLyogQWRkIHNwZWNpZmllZCBwcmVmaXggdG8gZWFjaCBsaW5l ICovCi0gICAgICAgICAgICBjaGFyIHBidWZbNjRdOwotICAgICAgICAgICAgY2hhciAqIHBwOwot ICAgICAgICAgICAgcHAgPSBwcmVmaXg7Ci0jaWZuZGVmIE5PU1BMCi0gICAgICAgICAgICBpZiAo ZXZhbHBmeCkgeyAgICAgICAgICAgICAgLyogUHJlZml4IGlzIGEgdmFyaWFibGU/ICovCi0gICAg ICAgICAgICAgICAgaW50IG4gPSA2MzsgICAgICAgICAgICAgLyogTWF5YmUgLSBldmFsdWF0ZSBp dCBhbmQgc2VlICovCi0gICAgICAgICAgICAgICAgY2hhciAqIHAgPSBwYnVmOwotICAgICAgICAg ICAgICAgIHp6c3RyaW5nKHByZWZpeCwmcCwmbik7IC8qIElmIHRoZXJlIGlzIG5vIGNoYW5nZSAq LwotICAgICAgICAgICAgICAgIGlmICghc3RyY21wKHByZWZpeCxwYnVmKSkgeyAvKiBpdCdzIG5v dCBhIHZhcmlhYmxlICovCi0gICAgICAgICAgICAgICAgICAgIGV2YWxwZnggPSAwOyAgICAgICAg LyogU28gZG9uJ3QgZG8gdGhpcyBhZ2Fpbi4gKi8KLSAgICAgICAgICAgICAgICB9IGVsc2UgeyAg ICAgICAgICAgICAgICAvKiBJdCB3YXMgYSB2YXJpYWJsZSAqLwotICAgICAgICAgICAgICAgICAg ICBwcCA9IHBidWY7ICAgICAgICAgIC8qIFNvIHN1YnN0aXR1dGUgaXRzIHZhbHVlICovCi0gICAg ICAgICAgICAgICAgICAgIHBmeGxlbiA9IDYzIC0gbjsgICAgLyogYW5kIGdldCBpdHMgbmV3IGxl bmd0aCAqLwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBOT1NQ TCAqLwotICAgICAgICAgICAgaWYgKGxlbiArIHBmeGxlbiArIDIgPCBUWVBCVUZMKSB7Ci0gICAg ICAgICAgICAgICAgLyogU2hpZnQgcmlnaHQgdG8gbWFrZSByb29tIGZvciBwcmVmaXggKi8KLSAg ICAgICAgICAgICAgICBtZW1jcHkoKGNoYXIgKilsaW5lK3BmeGxlbiwoY2hhciAqKWJ1ZixsZW4p OwotICAgICAgICAgICAgICAgIGxzZXQoKGNoYXIgKilsaW5lLHBwLHBmeGxlbixTUCk7Ci0gICAg ICAgICAgICAgICAgZGVidWcoRjExMCwiZG90eXBlIHByZWZpeCIsbGluZSxwZnhsZW4pOwotICAg ICAgICAgICAgICAgIGxlbiArPSBwZnhsZW47Ci0gICAgICAgICAgICAgICAgbWVtY3B5KChjaGFy ICopYnVmLChjaGFyICopbGluZSxsZW4pOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ug aWYgKG51bWJlcikgeyAgICAgICAgICAgIC8qIExpbmUgbnVtYmVycyAqLwotICAgICAgICAgICAg aW50IHg7Ci0gICAgICAgICAgICBzcHJpbnRmKGxpbmUsIiU0ZC4gIix0eXBfbGluZXMpOwotICAg ICAgICAgICAgeCA9IHN0cmxlbihsaW5lKTsKLSAgICAgICAgICAgIGxlbiArPSB4OwotICAgICAg ICAgICAgaWYgKGxlbiA8IExJTkJVRlNJWikgewotICAgICAgICAgICAgICAgIG1lbWNweSgoY2hh ciAqKSZsaW5lW3hdLChjaGFyICopYnVmLGxlbik7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KChj aGFyICopYnVmLChjaGFyICopbGluZSxsZW4pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g ICAgICAgIGlmICh3aWR0aCA+IDAgJiYgd2lkdGggPD0gVFlQQlVGTCkgeyAvKiBUcnVuY2F0ZSBh dCBnaXZlbiB3aWR0aC4gKi8KLSAgICAgICAgICAgIGNoYXIgKiBvYnVmID0gbGluZTsgICAgICAg ICAvKiBCdXQgdG8gZG8gdGhhdCBmaXJzdCB3ZSBtdXN0ICovCi0gICAgICAgICAgICBpbnQgaSxr LHo7ICAgICAgICAgICAgICAgICAgLyogZXhwYW5kIHRhYnM7IGFzc3VtZSBldmVyeSA4IGNvbHMu ICovCi0gICAgICAgICAgICBsaW5lWzBdID0gTlVMOwotICAgICAgICAgICAgZm9yIChpID0gMCwg ayA9IDA7IGkgPCB3aWR0aDsgaysrKSB7IC8qIENoYXJhY3RlciBsb29wLi4uICovCi0gICAgICAg ICAgICAgICAgaWYgKCFidWZba10pICAgICAgICAgICAgLyogTm8gbW9yZSBjaGFycyBpbiB0aGlz IGxpbmUsIGRvbmUuICovCi0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg ICBpZiAoYnVmW2tdICE9ICdcdCcpIHsgICAvKiBJZiBpdCdzIG5vdCBhIHRhYiAqLwotICAgICAg ICAgICAgICAgICAgICBpZiAoaSA+PSBMSU5CVUZTSVopIC8qIENoZWNrIGZvciBvdmVyZmxvdyAq LwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBvYnVm W2krK10gPSBidWZba107IC8qIGFuZCB0aGVuIGRlcG9zaXQgaXQuICovCi0gICAgICAgICAgICAg ICAgICAgIG9idWZbaV0gPSBOVUw7ICAgICAgLyogS2VlcCBpdCBudWxsLXRlcm1pbmF0ZWQgKi8K LSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIHogPSA4IC0gKGkgJSA4KTsgICAgICAgIC8qIEl0J3MgYSB0YWIsIGV4cGFuZCBp dC4gKi8KLSAgICAgICAgICAgICAgICBpZiAoeiA9PSAwKSB6ID0gODsKLSAgICAgICAgICAgICAg ICBmb3IgKGogPSAwOyBqIDwgeiAmJiBpIDwgTElOQlVGU0laOyBqKyspIHsKLSNpZmRlZiBVTklD T0RFCi0gICAgICAgICAgICAgICAgICAgIGlmICh1Y3MyICYmICF1Y3NvcmRlcikKLSAgICAgICAg ICAgICAgICAgICAgICBvYnVmW2krK10gPSBOVUw7Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotICAg ICAgICAgICAgICAgICAgICBvYnVmW2krK10gPSAnICc7Ci0jaWZkZWYgVU5JQ09ERQotICAgICAg ICAgICAgICAgICAgICBpZiAodWNzMiAmJiB1Y3NvcmRlcikKLSAgICAgICAgICAgICAgICAgICAg ICBvYnVmW2krK10gPSBOVUw7Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICBvYnVmW2krK10gPSBOVUw7Ci0gICAgICAgICAgICAgICAgb2J1 ZltpXSA9IE5VTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG9idWZbd2lkdGhdID0gTlVM OyAgICAgICAgICAvKiBOb3cgdHJ1bmNhdGUgYXQgZ2l2ZW4gd2lkdGguICovCi0jaWZkZWYgQ09N TUVOVAotICAgICAgICAgICAgLyogVGhpcyBkb2Vzbid0IHdvcmsgZm9yIFVDUy0yIGJlY2F1c2Ug aXQgY29udGFpbnMgTlVMcyAqLwotICAgICAgICAgICAgY2tzdHJuY3B5KGJ1ZixvYnVmLFRZUEJV RkwpOyAvKiBhbmQgY29weSBpdCBiYWNrIChhZ2Fpbj8pICovCi0jZWxzZQotICAgICAgICAgICAg bWVtY3B5KChjaGFyICopYnVmLChjaGFyICopb2J1ZixpKTsgLyogQ29weSBpdCBiYWNrICovCi0j ZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgbGVuID0gKGkgPiB3aWR0aCkgPyB3aWR0 aCA6IGk7IC8qIFNwYXJlIHVzIGFub3RoZXIgc3RybGVuKCkuLi4gKi8KLSAgICAgICAgfQotICAg ICAgICBpZiAodGFpbGluZykgeyAgICAgICAgICAgICAgICAgIC8qIElmIC9UQUlMOm4uLi4gKi8K LSAgICAgICAgICAgIGsgPSBsaW5lcyAlIGhlYWQ7ICAgICAgICAgICAvKiBzYXZlIHRoaXMgbGlu ZSBpbiBjaXJjdWxhciBidWZmZXIgKi8KLSAgICAgICAgICAgIGlmICghY291bnRpbmcpIHsKLSAg ICAgICAgICAgICAgICBpZiAodGFpbFtrXSkgZnJlZSh0YWlsW2tdKTsKLSAgICAgICAgICAgICAg ICB0YWlsW2tdID0gbWFsbG9jKGxlbisyKTsKLSAgICAgICAgICAgICAgICBpZiAoIXRhaWxba10p IHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/TWVtb3J5IGFsbG9jYXRpb24gZmFpbHVy ZVxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8geGRvdHlwZTsKLSAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHRhaWxba10sYnVmLGxlbik7Ci0gICAgICAgICAg ICAgICAgdGxlbltrXSA9IGxlbjsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoY291bnRpbmcpICAgICAgICAgICAgICAgICAg IC8qIElmIG9ubHkgY291bnRpbmcgKi8KLSAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAg ICAgICAgICAvKiB3ZSdyZSBkb25lIHdpdGggdGhpcyBsaW5lICovCi0KLSAgICAgICAgaWYgKHBh Z2luZykgeyAgICAgICAgICAgICAgICAgICAvKiBEaXNwbGF5aW5nIHRoaXMgbGluZS4uLiAqLwot ICAgICAgICAgICAgaW50IHU7Ci0gICAgICAgICAgICB1ID0gbGVuOyAgICAgICAgICAgICAgICAg ICAgLyogTGVuZ3RoIGluIEJZVEVTICovCi0gICAgICAgICAgICBpZiAodWNzMikgICAgICAgICAg ICAgICAgICAgLyogSWYgb3V0cHV0dGluZyBpbiBVQ1MtMiAqLwotICAgICAgICAgICAgICB1IC89 IDI7ICAgICAgICAgICAgICAgICAgIC8qIGNvbnZlcnQgbGVuZ3RoIHRvIENIQVJBQ1RFUlMgKi8K LSAgICAgICAgICAgIHggPSAodSAvIGNtZF9jb2xzKSArIDE7ICAgICAvKiBDcnVkZWx5IGFsbG93 IGZvciB3cmFwICovCi0gICAgICAgICAgICBpZiAoY21kX3Jvd3MgPiAwICYmIGNtZF9jb2xzID4g MCkKLSAgICAgICAgICAgICAgbiArPSB4OyAgICAgICAgICAgICAgICAgICAvKiBUaGlzIGFzc3Vt ZXMgdGVybWluYWwgd2lsbCB3cmFwICovCi0gICAgICAgIH0KLSNpZmRlZiBLVUkKLSAgICAgICAg aWYgKCBndWkgKSB7Ci0gICAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNo b3J0ICogdWNoID0gKHVuc2lnbmVkIHNob3J0ICopYnVmOwotICAgICAgICAgICAgZm9yICggaT0w OyBpPGxlbi8yOyBpKyspCi0gICAgICAgICAgICAgICAgZ3VpX3RleHRfcG9wdXBfYXBwZW5kKHVj aFtpXSk7Ci0JCQlndWlfdGV4dF9wb3B1cF9hcHBlbmQoQ1IpOwotCQkJZ3VpX3RleHRfcG9wdXBf YXBwZW5kKExGKTsKLSAgICAgICAgfSAKLSAgICAgICAgZWxzZQotI2VuZGlmIC8qIEtVSSAqLwot ICAgICAgICB0eXBlbGluZShidWYsbGVuLG91dGNzLG9mcCk7ICAgIC8qIFByaW50IGxpbmUsIGxl bmd0aCBiYXNlZCAqLwotI2lmZGVmIENLX1RUR1dTSVoKLSAgICAgICAgZGVidWcoRjEwMSwiZG90 eXBlIG4iLCIiLG4pOwotICAgICAgICBpZiAocGFnaW5nID4gMCAmJiBvZnAgPT0gc3Rkb3V0KSB7 IC8qIFBhdXNlIGF0IGVuZCBvZiBzY3JlZW4gKi8KLSAgICAgICAgICAgIGlmIChjbWRfcm93cyA+ IDAgJiYgY21kX2NvbHMgPiAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG4gPiBjbWRfcm93cyAt IDMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFhc2ttb3JlKCkpCi0gICAgICAgICAgICAg ICAgICAgICAgZ290byB4ZG90eXBlOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg ICAgICAgICAgICAgICAgbiA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot ICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfVFRHV1NJWiAqLwotICAgIH0KLQotICB4ZG90eXBlOgot ICAgIGlmIChjb3VudGluZykgewotICAgICAgICBmcHJpbnRmKG9mcCwKLSAgICAgICAgICAgICAg ICAiJXM6ICVkIGxpbmUlc1xuIixmaWxlLHR5cF9saW5lcyx0eXBfbGluZXMgPT0gMSA/ICIiIDog InMiKTsKLSAgICAgICAgaWYgKHBhdCkKLSAgICAgICAgICBmcHJpbnRmKG9mcCwKLSAgICAgICAg ICAgICAgICAgICIlczogJWQgbWF0Y2glc1xuIixwYXQsdHlwX210Y2hzLHR5cF9tdGNocyA9PSAx ID8gIiIgOiAiZXMiKTsKLSAgICAgICAgZ290byB4eGRvdHlwZTsKLSAgICB9Ci0gICAgaWYgKHRh aWxpbmcgJiYgdGFpbCkgeyAgICAgICAgICAgICAgLyogVHlwaW5nIHRhaWwgb2YgZmlsZT8gKi8K LSAgICAgICAgaWYgKGxpbmVzIDwgaGVhZCkgeyAgICAgICAgICAgICAvKiBZZXMsIHNob3cgdGhl IGxpbmVzIHdlIHNhdmVkICovCi0gICAgICAgICAgICBrID0gMDsgICAgICAgICAgICAgICAgICAg ICAgLyogU2hvdyBhbGwgbGluZXMgKi8KLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAg ICAgICAgICAvKiBNb3JlIGxpbmVzIHRoYW4gdGFpbCBudW1iZXIgKi8KLSAgICAgICAgICAgIGxp bmVzID0gazsgICAgICAgICAgICAgICAgICAvKiBMYXN0IGxpbmUgdG8gc2hvdyAqLwotICAgICAg ICAgICAgaysrOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpcnN0IGxpbmUgdG8gc2hvdyAq LwotICAgICAgICAgICAgaWYgKGsgPj0gaGVhZCkKLSAgICAgICAgICAgICAgayA9IDA7Ci0gICAg ICAgIH0KLSAgICAgICAgbiA9IGZpcnN0OyAgICAgICAgICAgICAgICAgICAgICAvKiBPdXRwdXQg bGluZSBjb3VudGVyICovCi0gICAgICAgIGZvciAoaSA9IGsgOzsgaSsrKSB7ICAgICAgICAgICAg LyogTG9vcCB0aHJ1IGNpcmN1bGFyIGJ1ZmZlciAqLwotI2lmbmRlZiBNQUMKLSAgICAgICAgICAg IGlmICh0eXBfaW50KSB7ICAgICAgICAgICAgICAvKiBJbnRlcnJ1cHRlZD8gKi8KLSAgICAgICAg ICAgICAgICBwcmludGYoIl5DLi4uXG4iKTsgICAgICAvKiBQcmludCBtZXNzYWdlICovCi0gICAg ICAgICAgICAgICAgZ290byB4eGRvdHlwZTsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBNQUMg Ki8KLSAgICAgICAgICAgIGogPSBpICUgaGVhZDsgICAgICAgICAgICAgICAvKiBJbmRleCBvZiB0 aGlzIGxpbmUgKi8KLSAgICAgICAgICAgIHMgPSB0YWlsW2pdOyAgICAgICAgICAgICAgICAvKiBQ b2ludCB0byBsaW5lIHRvIGRpc3BsYXkgKi8KLSAgICAgICAgICAgIGlmICghcykgICAgICAgICAg ICAgICAgICAgICAvKiAoc2hvdWxkbid0IGhhcHBlbi4uLikgKi8KLSAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICBpZiAocGFnaW5nKSB7ICAgICAgICAgICAgICAgLyogQ3J1ZGVseSBh bGxvdyBmb3IgbGluZSB3cmFwICovCi0gICAgICAgICAgICAgICAgeCA9IHRsZW5bal07Ci0gICAg ICAgICAgICAgICAgaWYgKHVjczIpIHggLz0gMjsKLSAgICAgICAgICAgICAgICB4ID0geCAvIGNt ZF9jb2xzICsgMTsKLSAgICAgICAgICAgICAgICBpZiAoY21kX3Jvd3MgPiAwICYmIGNtZF9jb2xz ID4gMCkKLSAgICAgICAgICAgICAgICAgIG4gKz0geDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIHR5cGVsaW5lKHMsdGxlbltqXSxvdXRjcyxvZnApOyAvKiBEaXNwbGF5IHRoaXMgbGluZSAq LwotICAgICAgICAgICAgaWYgKHBhZ2luZyAmJiBvZnAgPT0gc3Rkb3V0KSB7IC8qIFBhdXNlIGF0 IGVuZCBvZiBzY3JlZW4gKi8KLSAgICAgICAgICAgICAgICBpZiAoY21kX3Jvd3MgPiAwICYmIGNt ZF9jb2xzID4gMCkgewotICAgICAgICAgICAgICAgICAgICBpZiAobiA+IGNtZF9yb3dzIC0gMykg ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhc2ttb3JlKCkpCi0gICAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAg ICAgICAgICAgICAgICAgICAgICBuID0gMDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRhaWxbal0gPSBOVUxMOwot ICAgICAgICAgICAgZnJlZShzKTsgICAgICAgICAgICAgICAgICAgIC8qIEZyZWUgdGhlIGxpbmUg Ki8KLSAgICAgICAgICAgIGlmIChpICUgaGVhZCA9PSBsaW5lcykgICAgICAvKiBXaGVuIHRvIHN0 b3AgKi8KLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZnJlZSgoY2hh ciAqKXRhaWwpOyAgICAgICAgICAgICAvKiBGcmVlIHRoZSBsaXN0ICovCi0gICAgICAgIHRhaWwg PSBOVUxMOwotICAgICAgICBpZiAodGxlbikgZnJlZSgoY2hhciAqKXRsZW4pOwotICAgICAgICB0 bGVuID0gTlVMTDsKLSAgICB9Ci0KLS8qIENvbWUgaGVyZSB3aGVuIGZpbmlzaGVkIG9yIG9uIFNJ R0lOVCAqLwotCi0gIHh4ZG90eXBlOgotI2lmbmRlZiBBTUlHQQotI2lmbmRlZiBNQUMKLSAgICBz aWduYWwoU0lHSU5ULG9sZHNpZyk7ICAgICAgICAgICAgICAvKiBQdXQgb2xkIHNpZ25hbCBhY3Rp b24gYmFjay4gKi8KLSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBBTUlHQSAqLwotICAgIGlm ICh0YWlsaW5nICYmIHRhaWwpIHsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGhlYWQ7IGkrKykg eyAgICAvKiBGcmVlIGVhY2ggbGluZS4gKi8KLSAgICAgICAgICAgIGlmICh0YWlsW2ldKQotICAg ICAgICAgICAgICBmcmVlKHRhaWxbaV0pOwotICAgICAgICB9Ci0gICAgICAgIGZyZWUoKGNoYXIg Kil0YWlsKTsgICAgICAgICAgICAgLyogRnJlZSBsaXN0IHBvaW50ZXIgKi8KLSAgICAgICAgaWYg KHRsZW4pCi0gICAgICAgICAgZnJlZSgoY2hhciAqKXRsZW4pOwotICAgIH0KLSAgICB4ID0gemNs b3NlKFpJRklMRSk7ICAgICAgICAgICAgICAgICAvKiBEb25lLCBjbG9zZSB0aGUgaW5wdXQgZmls ZSAqLwotICAgIGlmIChvZnAgIT0gc3Rkb3V0KSB7ICAgICAgICAgICAgICAgIC8qIENsb3NlIGFu eSBvdXRwdXQgZmlsZSAqLwotICAgICAgICBpZiAob2ZwKSBmY2xvc2Uob2ZwKTsKLSAgICAgICAg b2ZwID0gc3Rkb3V0OwotICAgIH0KLSAgICBiaW5hcnkgPSBzYXZlOyAgICAgICAgICAgICAgICAg ICAgICAvKiBSZXN0b3JlIHRleHQvYmluYXJ5IG1vZGUgKi8KLSNpZmRlZiBVTklDT0RFCi0gICAg dWNzYm9tID0gdWNzYm9tX3NhdjsgICAgICAgICAgICAgICAgLyogUmVzdG9yZSBCT00gdXNhZ2Ug Ki8KLSNlbmRpZiAvKiBVTklDT0RFICovCi0KLSNpZmRlZiBLVUkKLSAgICBpZiAoIGd1aSApCi0g ICAgICAgIGd1aV90ZXh0X3BvcHVwX3dhaXQoLTEpOyAgICAgICAgLyogV2FpdCBmb3IgdXNlciB0 byBjbG9zZSB0aGUgZGlhbG9nICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgcmV0dXJuKHJjKTsK LX0KLQotLyogR1JFUCBjb21tYW5kICovCi0KLSNkZWZpbmUgR1JFUF9DQVNFICAwICAgICAgICAg ICAgICAgICAgICAvKiAvQ0FTRSAqLwotI2RlZmluZSBHUkVQX0NPVU4gIDEgICAgICAgICAgICAg ICAgICAgIC8qIC9DT1VOVCAqLwotI2RlZmluZSBHUkVQX0RPVEYgIDIgICAgICAgICAgICAgICAg ICAgIC8qIC9ET1RGSUxFUyAqLwotI2RlZmluZSBHUkVQX05BTUUgIDMgICAgICAgICAgICAgICAg ICAgIC8qIC9OQU1FT05MWSAqLwotI2RlZmluZSBHUkVQX05PQksgIDQgICAgICAgICAgICAgICAg ICAgIC8qIC9OT0JBQ0tVUCAqLwotI2RlZmluZSBHUkVQX05PRE8gIDUgICAgICAgICAgICAgICAg ICAgIC8qIC9OT0RPVEZJTEVTICovCi0jZGVmaW5lIEdSRVBfTk9MSSAgNiAgICAgICAgICAgICAg ICAgICAgLyogL05PTElTVCAqLwotI2RlZmluZSBHUkVQX05PTUEgIDcgICAgICAgICAgICAgICAg ICAgIC8qIC9JTlZFUlQgPSAvTk9NQVRDSCAqLwotI2RlZmluZSBHUkVQX05PUEEgIDggICAgICAg ICAgICAgICAgICAgIC8qIC9OT1BBR0UgKi8KLSNkZWZpbmUgR1JFUF9OVU1TICA5ICAgICAgICAg ICAgICAgICAgICAvKiAvTElORU5VTUJFUlMgKi8KLSNkZWZpbmUgR1JFUF9QQUdFIDEwICAgICAg ICAgICAgICAgICAgICAvKiAvUEFHRSAqLwotI2RlZmluZSBHUkVQX1JFQ1UgMTEgICAgICAgICAg ICAgICAgICAgIC8qIC9SRUNVUlNJVkUgKi8KLSNkZWZpbmUgR1JFUF9UWVBFIDEyICAgICAgICAg ICAgICAgICAgICAvKiAvVFlQRTogKi8KLSNkZWZpbmUgR1JFUF9PVVRQIDEzICAgICAgICAgICAg ICAgICAgICAvKiAvT1VUUFVURklMRTogKi8KLSNkZWZpbmUgR1JFUF9FWENQIDE0CQkJLyogL0VY Q0VQVDogKi8KLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgZ3JlcHRhYltdID0gewotICAgIHsgIi9j b3VudCIsICAgICAgICBHUkVQX0NPVU4sIENNX0FSRyB9LAotICAgIHsgIi9kb3RmaWxlcyIsICAg ICBHUkVQX0RPVEYsIDAgfSwKLSAgICB7ICIvZXhjZXB0IiwgICAgICAgR1JFUF9FWENQLCBDTV9B UkcgfSwKLSAgICB7ICIvbGluZW51bWJlcnMiLCAgR1JFUF9OVU1TLCAwIH0sCi0gICAgeyAiL25h bWVvbmx5IiwgICAgIEdSRVBfTkFNRSwgMCB9LAotICAgIHsgIi9ub2JhY2t1cGZpbGVzIixHUkVQ X05PQkssIDAgfSwKLSAgICB7ICIvbm9jYXNlIiwgICAgICAgR1JFUF9DQVNFLCAwIH0sCi0gICAg eyAiL25vZG90ZmlsZXMiLCAgIEdSRVBfTk9ETywgMCB9LAotICAgIHsgIi9ub2xpc3QiLCAgICAg ICBHUkVQX05PTEksIDAgfSwKLSAgICB7ICIvbm9tYXRjaCIsICAgICAgR1JFUF9OT01BLCAwIH0s Ci0gICAgeyAiL25vcGFnZSIsICAgICAgIEdSRVBfTk9QQSwgMCB9LAotICAgIHsgIi9vdXRwdXQi LCAgICAgICBHUkVQX09VVFAsIENNX0FSRyB9LAotICAgIHsgIi9wYWdlIiwgICAgICAgICBHUkVQ X1BBR0UsIDAgfSwKLSAgICB7ICIvcXVpZXQiLCAgICAgICAgR1JFUF9OT0xJLCBDTV9JTlYgfSwK LSNpZmRlZiBSRUNVUlNJVkUKLSAgICB7ICIvcmVjdXJzaXZlIiwgICAgR1JFUF9SRUNVLCAwIH0s Ci0jZW5kaWYgLyogUkVDVVJTSVZFICovCi0gICAgeyAiL3R5cGUiLCAgICAgICAgIEdSRVBfVFlQ RSwgQ01fQVJHIH0sCi0gICAgeyAiIiwgMCwgMCB9Ci19Owotc3RhdGljIGludCBuZ3JlcHRhYiA9 ICBzaXplb2YoZ3JlcHRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpLTE7Ci0KLXN0YXRpYyBjaGFy ICogZ3JlcF9leGNlcHQgPSBOVUxMOwotCi1pbnQKLWRvZ3JlcCgpIHsKLSAgICBpbnQgbWF0Y2gs IHgsIHksIGZjLCBnZXR2YWwsIG1jID0gMCwgY291bnQgPSAwLCBiaWdjb3VudCA9IDA7Ci0gICAg aW50IGZsaW5lID0gMCwgc2xpbmUgPSAwLCB3aWxkID0gMCwgbGVuID0gMDsKLSAgICBpbnQgeG1v ZGUgPSAtMSwgc2NhbiA9IDA7Ci0gICAgY2hhciBjLCBuYW1lW0NLTUFYUEFUSCsxXSwgb3V0Zmls ZVtDS01BWFBBVEgrMV0sICpwLCAqcywgKmN2ID0gTlVMTDsKLSAgICBGSUxFICogZnAgPSBOVUxM OwotCi0gICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3dpdGNoIHZh bHVlcyBhbmQgZGVmYXVsdHMgKi8KLSAgICAgIGdyX2NvdW4gPSAwLAotICAgICAgZ3JfbmFtZSA9 IDAsCi0gICAgICBncl9ub2JrID0gMCwKLSAgICAgIGdyX2Nhc2UgPSAxLAotICAgICAgZ3Jfbm9s aSA9IDAsCi0gICAgICBncl9ub21hID0gMCwKLSAgICAgIGdyX251bXMgPSAwLAotICAgICAgZ3Jf ZXhjcCA9IDAsCi0gICAgICBncl9wYWdlID0geGFza21vcmU7Ci0KLSAgICBzdHJ1Y3QgRkRCIHN3 LCBmbDsKLQotICAgIGdfbWF0Y2hkb3QgPSBtYXRjaGRvdDsgICAgICAgICAgICAgIC8qIFNhdmUg Z2xvYmFsIG1hdGNoZG90IHNldHRpbmcgKi8KLSAgICBvdXRmaWxlWzBdID0gTlVMOwotICAgIG1h a2VzdHIoJmdyZXBfZXhjZXB0LE5VTEwpOwotCi0gICAgaWYgKG9mcCAhPSBzdGRvdXQpIHsgICAg ICAgICAgICAgICAgLyogSW4gY2FzZSBvZiBwcmV2aW91cyBpbnRlcnJ1cHRpb24gKi8KLSAgICAg ICAgaWYgKG9mcCkgZmNsb3NlKG9mcCk7Ci0gICAgICAgIG9mcCA9IHN0ZG91dDsKLSAgICB9Ci0g ICAgY21mZGJpKCZzdywgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlyc3QgRkRCIC0gY29t bWFuZCBzd2l0Y2hlcyAqLwotICAgICAgICAgICBfQ01LRVksICAgICAgICAgICAgICAgICAgICAg IC8qIGZjb2RlICovCi0gICAgICAgICAgICJTdHJpbmcgb3IgcGF0dGVybiB0byBzZWFyY2ggZm9y LCBvciBzd2l0Y2giLAotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IGRlZmF1bHQgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBh ZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAgICAgICBuZ3JlcHRhYiwgICAgICAgICAgICAgICAg ICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLwotICAgICAgICAgICA0LCAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21z d2kgKi8KLSAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgICAgICAgICAvKiBQcm9jZXNz aW5nIGZ1bmN0aW9uICovCi0gICAgICAgICAgIGdyZXB0YWIsICAgICAgICAgICAgICAgICAgICAg LyogS2V5d29yZCB0YWJsZSAqLwotICAgICAgICAgICAmZmwgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KLSAgICAgICAgICAgKTsKLSAgICBjbWZkYmko JmZsLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbnl0aGluZyB0aGF0IGRvZXNuJ3QgbWF0 Y2ggKi8KLSAgICAgICAgICAgX0NNRkxELCAgICAgICAgICAgICAgICAgICAgICAvKiBmY29kZSAq LwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhscG1zZyAqLwot ICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KLSAg ICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0 YSAqLwotICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51 bWVyaWMgZGF0YSAxICovCi0gICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KLSAgICAgICAgICAgeHhzdHJpbmcsCQkJLyogeHhz dHJpbmcgKi8KLSAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgTlVMTAotICAgICAgICAgICAp OwotICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhcnNlIDAgb3Ig bW9yZSBzd2l0Y2hlcyAqLwotICAgICAgICB4ID0gY21mZGIoJnN3KTsgICAgICAgICAgICAgICAg IC8qIFBhcnNlIHNvbWV0aGluZyAqLwotICAgICAgICBpZiAoeCA8IDApCi0gICAgICAgICAgcmV0 dXJuKHgpOwotICAgICAgICBpZiAoY21yZXN1bHQuZmNvZGUgIT0gX0NNS0VZKSAgIC8qIEJyZWFr IG91dCBpZiBub3QgYSBzd2l0Y2ggKi8KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgYyA9IGNt Z2JyaygpOwotICAgICAgICBpZiAoKGdldHZhbCA9IChjID09ICc6JyB8fCBjID09ICc9JykpICYm ICEoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9UaGlzIHN3 aXRjaCBkb2VzIG5vdCB0YWtlIGFuIGFyZ3VtZW50XG4iKTsKLSAgICAgICAgICAgIHJldHVybigt OSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKChjbXJlc3VsdC5ucmVzdWx0ICE9IEdSRVBfQ09V TikgJiYgIWdldHZhbCAmJgotICAgICAgICAgICAgKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgewot ICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIp OwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgICAgICBzd2l0Y2ggKGNt cmVzdWx0Lm5yZXN1bHQpIHsKLSAgICAgICAgICBjYXNlIEdSRVBfQ09VTjogewotICAgICAgICAg ICAgICBncl9jb3VuKys7Ci0gICAgICAgICAgICAgIGlmIChnZXR2YWwpIHsKLSAgICAgICAgICAg ICAgICAgIGlmICgoeCA9IGNtZmxkKCJWYXJpYWJsZSBmb3IgcmVzdWx0IiwiIiwmcyxOVUxMKSkg PCAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICAgICAgICBt YWtlc3RyKCZjdixzKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICB9Ci0gICAgICAgICAgY2FzZSBHUkVQX0NBU0U6IGdyX2Nhc2U9MDsgYnJlYWs7Ci0g ICAgICAgICAgY2FzZSBHUkVQX05BTUU6IGdyX25hbWUrKzsgZ3Jfbm9saT0wOyBicmVhazsKLSAg ICAgICAgICBjYXNlIEdSRVBfTk9CSzogZ3Jfbm9iaysrOyBicmVhazsKLSAgICAgICAgICBjYXNl IEdSRVBfTk9MSTogZ3Jfbm9saSsrOyBncl9uYW1lPTA7IGdyX251bXM9MDsgYnJlYWs7Ci0gICAg ICAgICAgY2FzZSBHUkVQX05PTUE6IGdyX25vbWErKzsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBH UkVQX05PUEE6IGdyX3BhZ2U9MDsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHUkVQX05VTVM6IGdy X251bXMrKzsgZ3Jfbm9saT0wOyBicmVhazsKLSAgICAgICAgICBjYXNlIEdSRVBfUEFHRTogZ3Jf cGFnZSsrOyBncl9ub2xpPTA7IGJyZWFrOwotICAgICAgICAgIGNhc2UgR1JFUF9OT0RPOgotICAg ICAgICAgICAgbWF0Y2hkb3QgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz ZSBHUkVQX0RPVEY6Ci0gICAgICAgICAgICBtYXRjaGRvdCA9IDE7Ci0gICAgICAgICAgICBicmVh azsKLSNpZmRlZiBSRUNVUlNJVkUKLSAgICAgICAgICBjYXNlIEdSRVBfUkVDVToKLSAgICAgICAg ICAgIHJlY3Vyc2l2ZSA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBSRUNVUlNJ VkUgKi8KLSAgICAgICAgICBjYXNlIEdSRVBfVFlQRTogewotICAgICAgICAgICAgICBleHRlcm4g c3RydWN0IGtleXRhYiB0eHRiaW5bXTsKLSAgICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkodHh0 YmluLDMsIiIsIiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuKHgpOwot ICAgICAgICAgICAgICBpZiAoeCA9PSAyKSB7ICAgICAgICAgICAgIC8qIEFMTCAqLwotICAgICAg ICAgICAgICAgICAgeG1vZGUgPSAtMTsKLSAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAg ICAgICAgICAvKiBURVhUIG9yIEJJTkFSWSBvbmx5ICovCi0gICAgICAgICAgICAgICAgICB4bW9k ZSA9IHg7Ci0gICAgICAgICAgICAgICAgICBzY2FuID0gMTsKLSAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSBHUkVQX09VVFA6 ICAgICAgICAgICAgICAgLyogU2VuZCBvdXRwdXQgdG8gZmlsZSAqLwotICAgICAgICAgICAgaWYg KCh4ID0gY21vZmkoIkZpbGUgZm9yIEdSRVAnZCBsaW5lcyIsIiIsJnMseHhzdHJpbmcpKSA8IDAp Ci0gICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgIGNrc3RybmNweShvdXRmaWxl LHMsQ0tNQVhQQVRIKTsKLSAgICAgICAgICAgIGJyZWFrOwotCSAgY2FzZSBHUkVQX0VYQ1A6CQkv KiBFeGNlcHRpb24gcGF0dGVybiAqLwotCSAgICBpZiAoZ2V0dmFsKSB7Ci0JCWlmICgoeCA9IGNt ZmxkKCJFeGNlcHRpb24gcGF0dGVybiIsCi0JCQkgICAgICAgIiIsCi0JCQkgICAgICAgJnMsCi0J CQkgICAgICAgeHhzdHJpbmcKLQkJCSAgICAgICApKSA8IDApCi0JCSAgcmV0dXJuKHgpOwotCQln cl9leGNwKys7Ci0JCW1ha2VzdHIoJmdyZXBfZXhjZXB0LHMpOwotCSAgICB9Ci0gICAgICAgIH0K LSAgICB9Ci0gICAgaWYgKG91dGZpbGVbMF0pIHsKLSAgICAgICAgb2ZwID0gZm9wZW4ob3V0Zmls ZSwidyIpOyAgICAgICAvKiBPcGVuIG91dHB1dCBmaWxlICovCi0gICAgICAgIGlmICghb2ZwKSB7 Ci0gICAgICAgICAgICBwcmludGYoIj9DYW4ndCBvcGVuIG91dHB1dCBmaWxlICVzOiAlc1xuIixv dXRmaWxlLGNrX2VycnN0cigpKTsKLSAgICAgICAgICAgIG9mcCA9IHN0ZG91dDsKLSAgICAgICAg ICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0KLSAgICAgICAgZ3JfcGFnZSA9IDA7Ci0gICAgfQot ICAgIHMgPSBjbXJlc3VsdC5zcmVzdWx0OwotICAgIHMgPSBicnN0cmlwKHMpOyAgICAgICAgICAg ICAgICAgICAgIC8qIFN0cmlwIGJyYWNlcyBmcm9tIHBhdHRlcm4gKi8KLSAgICBpZiAoISpzKSB7 Ci0gICAgICAgIHByaW50ZigiP1BhdHRlcm4gcmVxdWlyZWRcbiIpOwotICAgICAgICByZXR1cm4o LTkpOwotICAgIH0KLSAgICBja3N0cm5jcHkodG1wYnVmLHMsVE1QQlVGU0laKTsgICAgICAvKiBT YXZlIHBhdHRlcm4gKi8KLSAgICBpZiAoKHggPSBjbWlmaSgiRmlsZShzKSB0byBzZWFyY2giLCIi LCZzLCZ3aWxkLHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgIGlmICh4ID09IC0zKSB7Ci0gICAg ICAgICAgICBwcmludGYoIj9GaWxlIHNwZWNpZmljYXRpb24gcmVxdWlyZWRcbiIpOwotICAgICAg ICAgICAgeCA9IC05OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybih4KTsKLSAgICB9Ci0gICAg cyA9IGJyc3RyaXAocyk7ICAgICAgICAgICAgICAgICAgICAgLyogU3RyaXAgYnJhY2VzIGZyb20g ZmlsZW5hbWUgKi8KLSNpZm5kZWYgWlhSRVdJTkQKLSAgICBja3N0cm5jcHkobGluZSxzLExJTkJV RlNJWik7Ci0jZW5kaWYgLyogWlhSRVdJTkQgKi8KLSAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDAp Ci0gICAgICByZXR1cm4oeSk7Ci0KLSAgICBpZiAoZ3JfcGFnZSA+IC0xKQotICAgICAgeGFza21v cmUgPSBncl9wYWdlOyAgICAgICAgICAgICAgIC8qIFBhZ2luZy4uLiAqLwotCi0gICAgcCA9IHRt cGJ1ZjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gcGF0dGVybiAqLwotI2lm ZGVmIENPTU1FTlQKLS8qIE5vdyB0aGlzIGlzIGRvbmUgaW4gY2ttYXRjaCAqLwotICAgIGlmICgq cCA9PSAnXicpIHsgICAgICAgICAgICAgICAgICAgIC8qICdeJyBhbmNob3JzIHBhdHRlcm4gdG8g YmVnaW5uaW5nICovCi0gICAgICAgIHArKzsKLSAgICB9IGVsc2UgaWYgKCpwICE9ICcqJykgeyAg ICAgICAgICAgICAvKiBPdGhlcndpc2UgcHJlcGVuZCBpbXBsaWVkICcqJyAqLwotICAgICAgICB0 bXBidWZbMF0gPSAnKic7Ci0gICAgICAgIHAgPSB0bXBidWY7Ci0gICAgfQotICAgIHggPSBzdHJs ZW4ocCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCBsZW5ndGggb2YgcmVzdWx0ICovCi0g ICAgaWYgKHggPiAwICYmIHggPCBUTVBCVUZTSVopIHsgICAgICAgLyogJyQnIGF0IGVuZCBhbmNo b3JzIHBhdHRlcm4gdG8gZW5kICovCi0gICAgICAgIGlmIChwW3gtMV0gPT0gJyQnKSB7Ci0gICAg ICAgICAgICBwW3gtMV0gPSBOVUw7Ci0gICAgICAgIH0gZWxzZSBpZiAocFt4LTFdICE9ICcqJykg ewotICAgICAgICAgICAgcFt4XSA9ICcqJzsKLSAgICAgICAgICAgIHBbeCsxXSA9IE5VTDsKLSAg ICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgZGVidWcoRjExMSwiZ3Jl cCBwYXQiLHAseCk7Ci0KLSNpZmRlZiBaWFJFV0lORAotICAgIGZjID0genhyZXdpbmQoKTsgICAg ICAgICAgICAgICAgICAgIC8qIFJld2luZCB0aGUgZmlsZSBsaXN0ICovCi0jZWxzZQotICAgIHsK LSAgICAgICAgaW50IGZsYWdzID0gWlhfRklMT05MWTsgICAgICAgICAvKiBFeHBhbmQgZmlsZSBs aXN0ICovCi0gICAgICAgIGlmIChtYXRjaGRvdCkgIGZsYWdzIHw9IFpYX01BVENIRE9UOwotICAg ICAgICBpZiAocmVjdXJzaXZlKSBmbGFncyB8PSBaWF9SRUNVUlNFOwotICAgICAgICBmYyA9IG56 eHBhbmQobGluZSxmbGFncyk7Ci0gICAgfQotI2VuZGlmIC8qIFpYUkVXSU5EICovCi0jaWZkZWYg VU5JWAotICAgIHNoX3NvcnQobXRjaHMsTlVMTCxmYywwLDAsZmlsZWNhc2UpOwotI2VuZGlmIC8q IFVOSVggKi8KLQotICAgIGRlYnVnKEYxMDEsImdyZXAgY21kX3Jvd3MiLCIiLGNtZF9yb3dzKTsK LSAgICBkZWJ1ZyhGMTAxLCJncmVwIGNtZF9jb2xzIiwiIixjbWRfY29scyk7Ci0KLSAgICB3aGls ZSAoMSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb29wIGZvciBlYWNoIGZpbGUgKi8K LSAgICAgICAgem5leHQobmFtZSk7ICAgICAgICAgICAgICAgICAgICAvKiBHZXQgbmV4dCBmaWxl ICovCi0gICAgICAgIGlmICghbmFtZVswXSkgICAgICAgICAgICAgICAgICAgLyogTm8gbW9yZSwg ZG9uZSAqLwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoZ3Jfbm9iaykgICAgICAgICAg ICAgICAgICAgIC8qIFNraXBwaW5nIGJhY2t1cCBmaWxlcz8gKi8KLSAgICAgICAgICBpZiAoY2tt YXRjaCgiKi5+WzEtOV0qfiIsbmFtZSwxLDEpKSAvKiBCYWNrdXAgZmlsZT8gKi8KLSAgICAgICAg ICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgICAvKiBZZXMsIHNraXAgKi8KLSAgICAgICAg aWYgKHNjYW4pIHsgICAgICAgICAgICAgICAgICAgICAvKiAvVFlQRTogZ2l2ZW4/ICovCi0gICAg ICAgICAgICBzd2l0Y2ggKHNjYW5maWxlKG5hbWUsJnksbnNjYW5maWxlKSkgeyAvKiBZZXMsIHNj YW4gdGhlIGZpbGUgKi8KLSAgICAgICAgICAgICAgY2FzZSBGVF9CSU46Ci0gICAgICAgICAgICAg ICAgaWYgKHhtb2RlICE9IDEpCi0gICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBGVF9URVhUOgotICAgICAgICAgICAg ICBjYXNlIEZUXzdCSVQ6Ci0gICAgICAgICAgICAgIGNhc2UgRlRfOEJJVDoKLSNpZmRlZiBVTklD T0RFCi0gICAgICAgICAgICAgIGNhc2UgRlRfVVRGODoKLSAgICAgICAgICAgICAgY2FzZSBGVF9V Q1MyOgotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSAgICAgICAgICAgICAgICBpZiAoeG1vZGUgIT0g MCkKLSAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9 Ci0gICAgICAgIGZwID0gZm9wZW4obmFtZSwiciIpOyAgICAgICAgICAgLyogT3BlbiAqLwotICAg ICAgICBpZiAoIWZwKSAgICAgICAgICAgICAgICAgICAgICAgIC8qIENhbid0ICovCi0gICAgICAg ICAgY29udGludWU7ICAgICAgICAgICAgICAgICAgICAgLyogU2tpcCAqLwotICAgICAgICBjb3Vu dCA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIE1hdGNoIGNvdW50LCB0aGlzIGZpbGUgKi8K LSAgICAgICAgZmxpbmUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBMaW5lIGNvdW50LCB0 aGlzIGZpbGUgKi8KLSAgICAgICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAgICAgICAgICAvKiBM b29wIGZvciBlYWNoIGxpbmUgKi8KLSAgICAgICAgICAgIGlmIChmZ2V0cyhsaW5lLExJTkJVRlNJ WixmcCkgPT0gTlVMTCkgeyAvKiBHZXQgbmV4dCBsaW5lICovCi0gICAgICAgICAgICAgICAgZmNs b3NlKGZwKTsKLSAgICAgICAgICAgICAgICBmcCA9IE5VTEw7Ci0JCWRlYnVnKEYxMDAsIkdSRVAg RU9GIiwiIiwwKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIGZsaW5lKys7ICAgICAgICAgICAgICAgICAgICAvKiBDb3VudCB0aGlzIGxpbmUgKi8K LSAgICAgICAgICAgIGxpbmVbTElOQlVGU0laXSA9IE5VTDsgICAgICAvKiBNYWtlIHN1cmUgaXQn cyB0ZXJtaW5hdGVkICovCi0JICAgIGRlYnVnKEYxMTEsIkdSRVAiLGxpbmUsZmxpbmUpOwotICAg ICAgICAgICAgbGVuID0gKGludClzdHJsZW4obGluZSk7ICAgIC8qIEdldCBsZW5ndGggKi8KLSAg ICAgICAgICAgIHdoaWxlIChsZW4gPiAwICYmIChsaW5lW2xlbi0xXSA9PSAnXG4nIHx8IGxpbmVb bGVuLTFdID09ICdccicpKQotICAgICAgICAgICAgICBsaW5lWy0tbGVuXSA9IE5VTDsgICAgICAg IC8qIENob3Agb2ZmIHRlcm1pbmF0b3JzICovCi0gICAgICAgICAgICBtYXRjaCA9IGNrbWF0Y2go cCxsaW5lLGdyX2Nhc2UsMSs0KTsgLyogTWF0Y2ggYWdhaW5zdCBwYXR0ZXJuICovCi0JICAgIGlm IChtYXRjaCAmJiBncl9leGNwKSB7Ci0JCWlmIChja21hdGNoKGdyZXBfZXhjZXB0LGxpbmUsZ3Jf Y2FzZSwxKzQpKQotCQkgICAgbWF0Y2ggPSAwOwotCSAgICB9Ci0gICAgICAgICAgICBpZiAoZ3Jf bm9tYSkgICAgICAgICAgICAgICAgLyogSW52ZXJ0IG1hdGNoIHNlbnNlIGlmIHJlcXVlc3RlZCAq LwotICAgICAgICAgICAgICBtYXRjaCA9ICFtYXRjaDsKLSAgICAgICAgICAgIGlmIChtYXRjaCkg eyAgICAgICAgICAgICAgICAvKiBIYXZlIGEgbWF0Y2hpbmcgbGluZSAqLwotICAgICAgICAgICAg ICAgIG1jKys7ICAgICAgICAgICAgICAgICAgIC8qIFRvdGFsIG1hdGNoIGNvdW50ICovCi0gICAg ICAgICAgICAgICAgY291bnQrKzsgICAgICAgICAgICAgICAgLyogTWF0Y2ggY291bnQgdGhpcyBm aWxlICovCi0gICAgICAgICAgICAgICAgaWYgKGdyX25hbWUpIHsgICAgICAgICAgLyogRG9uJ3Qg Y2FyZSBob3cgbWFueSBsaW5lcyBtYXRjaCAqLwotICAgICAgICAgICAgICAgICAgICBmY2xvc2Uo ZnApOyAgICAgICAgIC8qIENsb3NlIHRoZSBmaWxlICovCi0gICAgICAgICAgICAgICAgICAgIGZw ID0gTlVMTDsgICAgICAgICAgLyogYW5kIHF1aXQgdGhlIGxpbmUtcmVhZGluZyBsb29wLiAqLwot ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgaWYgKGdyX2NvdW4gfHwgZ3Jfbm9saSkgLyogTm90IGxpc3RpbmcgZWFjaCBsaW5lICov Ci0gICAgICAgICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgLyogc28gZG9uJ3QgcHJp bnQgYW55dGhpbmcgbm93LiAqLwotICAgICAgICAgICAgICAgIGlmICh3aWxkKSB7CQkvKiBJZiBz ZWFyY2hpbmcgbXVsdGlwbGUgZmlsZXMgKi8KLSAgICAgICAgICAgICAgICAgICAgZnByaW50Zihv ZnAsIiVzOiIsbmFtZSk7IC8qIHByaW50IGZpbGVuYW1lLiAqLwotICAgICAgICAgICAgICAgICAg ICBsZW4gKz0gKGludClzdHJsZW4obmFtZSkgKyAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICBpZiAoZ3JfbnVtcykgeyAgICAgICAgICAvKiBJZiBsaW5lIG51bWJlcnMgd2Fu dGVkICovCi0gICAgICAgICAgICAgICAgICAgIGNoYXIgbmJ1ZlszMl07Ci0gICAgICAgICAgICAg ICAgICAgIGxlbiArPSBja21ha21zZyhuYnVmLDMyLGNraXRvYShmbGluZSksIjoiLE5VTEwsTlVM TCk7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYob2ZwLCIlcyIsbmJ1Zik7Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjbWRfcm93cyA+IDAgJiYgY21kX2NvbHMg PiAwKQotICAgICAgICAgICAgICAgICAgc2xpbmUgKz0gKGxlbiAvIGNtZF9jb2xzKSArIDE7Ci0g ICAgICAgICAgICAgICAgZnByaW50ZihvZnAsIiVzXG4iLGxpbmUpOyAvKiBQcmludCB0aGUgbGlu ZS4gKi8KLSAgICAgICAgICAgICAgICBpZiAoc2xpbmUgPiBjbWRfcm93cyAtIDMpIHsKLSAgICAg ICAgICAgICAgICAgICAgaWYgKCFhc2ttb3JlKCkpIGdvdG8geGdyZXA7IGVsc2Ugc2xpbmUgPSAw OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBp ZiAoIWdyX25vbGkpIHsJCQkvKiBJZiBub3Qgbm90IGxpc3RpbmcuLi4gKi8KLSAgICAgICAgICAg IHggPSAwOwotICAgICAgICAgICAgaWYgKGdyX2NvdW4pIHsgICAgICAgICAgICAgIC8qIFNob3cg bWF0Y2ggY291bnQgb25seSAqLwotICAgICAgICAgICAgICAgIGZwcmludGYob2ZwLCIlczolZFxu IixuYW1lLGNvdW50KTsKLSAgICAgICAgICAgICAgICB4Kys7Ci0gICAgICAgICAgICB9IGVsc2Ug aWYgKGdyX25hbWUgJiYgY291bnQgPiAwKSB7IC8qIFNob3cgbmFtZSBvbmx5ICovCi0gICAgICAg ICAgICAgICAgZnByaW50ZihvZnAsIiVzXG4iLG5hbWUpOwotICAgICAgICAgICAgICAgIHgrKzsK LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh4ID4gMCkgewotICAgICAgICAgICAgICAg IGlmICgrK3NsaW5lID4gY21kX3Jvd3MgLSAzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh YXNrbW9yZSgpKSBnb3RvIHhncmVwOyBlbHNlIHNsaW5lID0gMDsKLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYmlnY291bnQgKz0gY291bnQ7ICAg ICAgICAgICAgICAvKiBPdmVyYWxsIGNvdW50ICovCi0gICAgfQotICB4Z3JlcDoKLSNpZm5kZWYg Tk9TUEwKLSAgICBpZiAoZ3JfY291biAmJiBjdikgeyAgICAgICAgICAgICAgICAvKiAvQ09VTlQ6 YmxhaCAqLwotICAgICAgICBhZGRtYWMoY3YsY2tpdG9hKGJpZ2NvdW50KSk7ICAgIC8qIHNldCB0 aGUgdmFyaWFibGUgKi8KLSAgICAgICAgbWFrZXN0cigmY3YsTlVMTCk7ICAgICAgICAgICAgICAv KiBmcmVlIHRoaXMgKi8KLSAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICBpZiAoZnApIGZj bG9zZShmcCk7ICAgICAgICAgICAgICAgICAvKiBjbG9zZSBpbnB1dCBmaWxlIGlmIHN0aWxsIG9w ZW4gKi8KLSAgICBpZiAob2ZwICE9IHN0ZG91dCkgeyAgICAgICAgICAgICAgICAvKiBDbG9zZSBh bnkgb3V0cHV0IGZpbGUgKi8KLSAgICAgICAgaWYgKG9mcCkgZmNsb3NlKG9mcCk7Ci0gICAgICAg IG9mcCA9IHN0ZG91dDsKLSAgICB9Ci0gICAgcmV0dXJuKHN1Y2Nlc3MgPSBtYyA/IDEgOiAwKTsK LX0KLQotLyogU3lzdGVtLWluZGVwZW5kZW50IGRpcmVjdG9yeSAqLwotCi1zdGF0aWMgY2hhciAq KiBkaXJsaXN0ID0gTlVMTDsKLXN0YXRpYyBpbnQgbmRpcmxpc3QgPSAwOwotCi1zdGF0aWMgVk9J RAotZnJlZWRpcmxpc3QoKSB7Ci0gICAgaWYgKGRpcmxpc3QpIHsKLSAgICAgICAgaW50IGk7Ci0g ICAgICAgIGZvciAoaSA9IDA7IGkgPCBuZGlybGlzdDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAo ZGlybGlzdFtpXSkKLSAgICAgICAgICAgICAgZnJlZShkaXJsaXN0W2ldKTsKLSAgICAgICAgfQot ICAgICAgICBmcmVlKChjaGFyICopZGlybGlzdCk7Ci0gICAgICAgIGRpcmxpc3QgPSBOVUxMOwot ICAgIH0KLSAgICBuZGlybGlzdCA9IDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGRpcnN3 dGFiW10gPSB7ICAgICAvKiBESVJFQ1RPUlkgY29tbWFuZCBzd2l0Y2hlcyAqLwotICAgIHsgIi9h ZnRlciIsICAgICAgIERJUl9BRlQsIENNX0FSRyB9LAotICAgIHsgIi9hbGwiLCAgICAgICAgIERJ Ul9BTEwsIDAgfSwKLSNpZm5kZWYgTk9TUEwKLSAgICB7ICIvYXJyYXkiLCAgICAgICBESVJfQVJS LCBDTV9BUkcgfSwKLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgIHsgIi9hc2NlbmRpbmciLCAgIERJ Ul9BU0MsIDAgfSwKLSAgICB7ICIvYmFja3VwIiwgICAgICBESVJfQlVQLCAwIH0sCi0gICAgeyAi L2JlZm9yZSIsICAgICAgRElSX0JFRiwgQ01fQVJHIH0sCi0gICAgeyAiL2JyaWVmIiwgICAgICAg RElSX0JSRiwgMCB9LAotICAgIHsgIi9jb3VudCIsICAgICAgIERJUl9DT1UsIENNX0FSRyB9LAot ICAgIHsgIi9kZXNjZW5kaW5nIiwgIERJUl9EU0MsIENNX0lOViB9LAotICAgIHsgIi9kaXJlY3Rv cmllcyIsIERJUl9ESVIsIDAgfSwKLSAgICB7ICIvZG90ZmlsZXMiLCAgICBESVJfRE9ULCAwIH0s Ci0gICAgeyAiL2VuZ2xpc2hkYXRlIiwgRElSX0RBVCwgMCB9LAotICAgIHsgIi9leGNlcHQiLCAg ICAgIERJUl9FWEMsIENNX0FSRyB9LAotICAgIHsgIi9maWxlcyIsICAgICAgIERJUl9GSUwsIDAg fSwKLSAgICB7ICIvaGVhZGluZyIsICAgICBESVJfSERHLCAwIH0sCi0gICAgeyAiL2lzb2RhdGUi LCAgICAgRElSX0lTTywgMCB9LAotICAgIHsgIi9sYXJnZXItdGhhbiIsIERJUl9MQVIsIENNX0FS RyB9LAotI2lmZGVmIENLU1lNTElOSwotICAgIHsgIi9mb2xsb3dsaW5rcyIsIERJUl9MTkssIDAg fSwKLSNlbmRpZiAvKiBDS1NZTUxJTksgKi8KLSAgICB7ICIvbWVzc2FnZSIsICAgICBESVJfTVNH LCBDTV9BUkcgfSwKLSAgICB7ICIvbm9iYWNrdXBmaWxlcyIsRElSX05PQiwgMCB9LAotICAgIHsg Ii9ub2RvdGZpbGVzIiwgIERJUl9OT0QsIDAgfSwKLSNpZmRlZiBDS1NZTUxJTksKLSAgICB7ICIv bm9mb2xsb3dsaW5rcyIsRElSX05MSywgMCB9LAotI2VuZGlmIC8qIENLU1lNTElOSyAqLwotICAg IHsgIi9ub2hlYWRpbmciLCAgIERJUl9OT0gsIDAgfSwKLSNpZmRlZiBDS1NZTUxJTksKLSAgICB7 ICIvbm9saW5rcyIsICAgICBESVJfTk9MLCAwIH0sCi0jZW5kaWYgLyogQ0tTWU1MSU5LICovCi0g ICAgeyAiL25vbWVzc2FnZSIsICAgRElSX05PTSwgMCB9LAotI2lmZGVmIENLX1RUR1dTSVoKLSAg ICB7ICIvbm9wYWdlIiwgICAgICBESVJfTk9QLCAwIH0sCi0jZW5kaWYgLyogQ0tfVFRHV1NJWiAq LwotI2lmZGVmIFJFQ1VSU0lWRQotICAgIHsgIi9ub3JlY3Vyc2l2ZSIsIERJUl9OT1IsIDAgfSwK LSNlbHNlCi0jaWZkZWYgVk1TCi0gICAgeyAiL25vcmVjdXJzaXZlIiwgRElSX05PUiwgMCB9LAot I2Vsc2UKLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgIHsgIi9ub3JlY3Vyc2l2ZSIsIERJUl9OT1Is IDAgfSwKLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlm IC8qIFJFQ1VSU0lWRSAqLwotICAgIHsgIi9ub3NvcnQiLCAgICAgIERJUl9OT1MsIDAgfSwKLSAg ICB7ICIvbm90LWFmdGVyIiwgICBESVJfTkFGLCBDTV9BUkcgfSwKLSAgICB7ICIvbm90LWJlZm9y ZSIsICBESVJfTkJGLCBDTV9BUkcgfSwKLSAgICB7ICIvbm90LXNpbmNlIiwgICBESVJfTkFGLCBD TV9JTlZ8Q01fQVJHIH0sCi0gICAgeyAiL25veGZlcm1vZGUiLCAgRElSX05PVCwgMCB9LAotICAg IHsgIi9vdXRwdXQiLCAgICAgIERJUl9PVVQsIENNX0FSRyB9LAotI2lmZGVmIENLX1RUR1dTSVoK LSAgICB7ICIvcGFnZSIsICAgICAgICBESVJfUEFHLCAwIH0sCi0jZW5kaWYgLyogQ0tfVFRHV1NJ WiAqLwotI2lmZGVmIFJFQ1VSU0lWRQotICAgIHsgIi9yZWN1cnNpdmUiLCAgIERJUl9SRUMsIDAg fSwKLSNlbHNlCi0jaWZkZWYgVk1TCi0gICAgeyAiL3JlY3Vyc2l2ZSIsICAgRElSX1JFQywgMCB9 LAotI2Vsc2UKLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgIHsgIi9yZWN1cnNpdmUiLCAgIERJUl9S RUMsIDAgfSwKLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2Vu ZGlmIC8qIFJFQ1VSU0lWRSAqLwotICAgIHsgIi9yZXZlcnNlIiwgICAgIERJUl9EU0MsIDAgfSwK LSAgICB7ICIvc2luY2UiLCAgICAgICBESVJfQUZULCBDTV9BUkd8Q01fSU5WIH0sCi0gICAgeyAi L3NtYWxsZXItdGhhbiIsRElSX1NNQSwgQ01fQVJHIH0sCi0gICAgeyAiL3NvcnQiLCAgICAgICAg RElSX1NSVCwgQ01fQVJHIH0sCi0gICAgeyAiL3N1bW1hcnkiLCAgICAgRElSX1NVTSwgMCB9LAot ICAgIHsgIi90b3AiLCAgICAgICAgIERJUl9UT1AsIENNX0FSRyB9LAotICAgIHsgIi90eXBlIiwg ICAgICAgIERJUl9CSU4sIENNX0FSRyB9LAotICAgIHsgIi94ZmVybW9kZSIsICAgIERJUl9UWVAs IDAgfSwKLSAgICB7ICIvdmVyYm9zZSIsICAgICBESVJfVlJCLCAwIH0sCi0gICAgeyAiIiwwLDAg fQotfTsKLXN0YXRpYyBpbnQgbmRpcnN3dGFiID0gKHNpemVvZihkaXJzd3RhYikgLyBzaXplb2Yo c3RydWN0IGtleXRhYikpIC0gMTsKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgZGlyc29ydFtdID0g eyAgICAgIC8qIERJUkVDVE9SWSAvU09SVDogb3B0aW9ucyAqLwotICAgIHsgImRhdGUiLCAgICAg ICAgIERJUlNfRFQsIDAgfSwKLSAgICB7ICJuYW1lIiwgICAgICAgICBESVJTX05NLCAwIH0sCi0g ICAgeyAic2l6ZSIsICAgICAgICAgRElSU19TWiwgMCB9Ci19Owotc3RhdGljIGludCBuZGlyc29y dCA9IChzaXplb2YoZGlyc29ydCkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi1zdGF0aWMg aW50IGRpcl9kYXRlID0gLTE7ICAgICAgICAgICAgICAgLyogT3B0aW9uIGRlZmF1bHRzICgtMSBt ZWFucyBub25lKSAqLwotc3RhdGljIGludCBkaXJfcGFnZSA9IC0xOwotc3RhdGljIGludCBkaXJf dmVyYiA9ICAxOwotc3RhdGljIGludCBkaXJfbXNnICA9IC0xOwotI2lmZGVmIFZNUwotc3RhdGlj IGludCBkaXJfc29ydCA9IC0xOyAgICAgICAgICAgICAgIC8qIE5hbWVzIGFyZSBhbHJlYWR5IHNv cnRlZCBpbiBWTVMgKi8KLXN0YXRpYyBpbnQgZGlyX3J2cnMgPSAtMTsKLSNlbHNlCi1zdGF0aWMg aW50IGRpcl9zb3J0ID0gIDE7ICAgICAgICAgICAgICAgLyogU29ydCBieSBkZWZhdWx0ICovCi1z dGF0aWMgaW50IGRpcl9ydnJzID0gIDA7ICAgICAgICAgICAgICAgLyogTm90IGluIHJldmVyc2Ug Ki8KLSNlbmRpZiAvKiBWTVMgKi8KLXN0YXRpYyBpbnQgZGlyX3NrZXkgPSBESVJTX05NOyAgICAg ICAgICAvKiBCeSBuYW1lICovCi0jaWZkZWYgUkVDVVJTSVZFCi1zdGF0aWMgaW50IGRpcl9yZWN1 ID0gLTE7Ci0jZW5kaWYgLyogUkVDVVJTSVZFICovCi1zdGF0aWMgaW50IGRpcl9tb2RlID0gLTE7 Ci1zdGF0aWMgaW50IGRpcl9zaG93ID0gLTE7ICAgICAgICAgICAgICAgLyogU2hvdyBhbGwgZmls ZXMgYnkgZGVmYXVsdCAqLwotaW50IGRpcl9kb3RzID0gIC0xOwkJCS8qIEV4Y2VwdCBkb3QgZmls ZXMgKi8KLWludCBkaXJfYmFjayA9ICAxOwotaW50IGRpcl9oZWFkID0gIDA7Ci1zdGF0aWMgY2hh ciAqIGRpcm1zZyA9IE5VTEw7Ci1zdGF0aWMgaW50IGRpcm1zZ2xlbiA9IDA7Ci0KLSNpZm5kZWYg Tk9TSE9XCi1WT0lECi1zaG93ZGlyb3B0cygpIHsKLSAgICBpbnQgeCA9IDA7Ci0gICAgZXh0ZXJu IGludCBvcHRsaW5lczsKLSAgICBwcnRvcHQoJm9wdGxpbmVzLCJESVJFQ1RPUlkiKTsKLSAgICBp ZiAoZGlyX3Nob3cgPiAwKSB7Ci0gICAgICAgIHBydG9wdCgmb3B0bGluZXMsKGRpcl9zaG93ID09 IDEpID8gIi9GSUxFUyIgOgotICAgICAgICAgICAgICAgKChkaXJfc2hvdyA9PSAyKSA/ICIvRElS RUNUT1JJRVMiIDogIi9BTEwiKSk7Ci0gICAgICAgIHgrKzsKLSAgICB9IGVsc2UgewotICAgICAg ICBwcnRvcHQoJm9wdGxpbmVzLCIvQUxMIik7Ci0gICAgICAgIHgrKzsKLSAgICB9Ci0gICAgaWYg KGRpcl92ZXJiID4gLTEpIHsKLSAgICAgICAgcHJ0b3B0KCZvcHRsaW5lcyxkaXJfdmVyYiA/ICIv VkVSQk9TRSIgOiAiL0JSSUVGIik7Ci0gICAgICAgIHgrKzsKLSAgICB9Ci0gICAgaWYgKGRpcl9w YWdlID4gLTEpIHsKLSAgICAgICAgcHJ0b3B0KCZvcHRsaW5lcyxkaXJfcGFnZSA/ICIvUEFHRSIg OiAiL05PUEFHRSIpOwotICAgICAgICB4Kys7Ci0gICAgfQotICAgIGlmIChkaXJfZGF0ZSA+IC0x KSB7Ci0gICAgICAgIHBydG9wdCgmb3B0bGluZXMsZGlyX2RhdGUgPyAiL0VOR0xJU0hEQVRFIiA6 ICIvSVNPREFURSIpOwotICAgICAgICB4Kys7Ci0gICAgfQotICAgIGlmIChkaXJfZG90cyA+IC0x KSB7Ci0gICAgICAgIHBydG9wdCgmb3B0bGluZXMsZGlyX2RvdHMgPyAiL0RPVEZJTEVTIiA6ICIv Tk9ET1RGSUxFUyIpOwotICAgICAgICB4Kys7Ci0gICAgfQotICAgIGlmIChkaXJfYmFjayA+IC0x KSB7Ci0gICAgICAgIHBydG9wdCgmb3B0bGluZXMsZGlyX2JhY2sgPyAiL0JBQ0tVUCIgOiAiL05P QkFDS1VQIik7Ci0gICAgICAgIHgrKzsKLSAgICB9Ci0gICAgaWYgKGRpcl9oZWFkID4gLTEpIHsK LSAgICAgICAgcHJ0b3B0KCZvcHRsaW5lcyxkaXJfaGVhZCA/ICIvSEVBRElORyIgOiAiL05PSEVB RElORyIpOwotICAgICAgICB4Kys7Ci0gICAgfQotI2lmZGVmIFJFQ1VSU0lWRQotICAgIGlmIChk aXJfcmVjdSA+IC0xKSB7Ci0gICAgICAgIHBydG9wdCgmb3B0bGluZXMsZGlyX3JlY3UgPyAiL1JF Q1VSU0lWRSIgOiAiL05PUkVDVVJTSVZFIik7Ci0gICAgICAgIHgrKzsKLSAgICB9Ci0jZW5kaWYg LyogUkVDVVJTSVZFICovCi0gICAgaWYgKGRpcl9tb2RlID4gLTEpIHsKLSAgICAgICAgcHJ0b3B0 KCZvcHRsaW5lcyxkaXJfbW9kZSA/ICIvWEZFUk1PREUiIDogIi9OT1hGRVJNT0RFIik7Ci0gICAg ICAgIHgrKzsKLSAgICB9Ci0gICAgaWYgKGRpcl9zb3J0ID09IDApIHsKLSAgICAgICAgeCsrOwot ICAgICAgICBwcnRvcHQoJm9wdGxpbmVzLCIvTk9TT1JUICIpOwotICAgIH0gZWxzZSBpZiAoZGly X3NvcnQgPiAwKSB7Ci0gICAgICAgIHgrKzsKLSAgICAgICAgaWYgKGRpcl9za2V5ID09IERJUlNf Tk0pIHMgPSAiL1NPUlQ6TkFNRSI7Ci0gICAgICAgIGVsc2UgaWYgKGRpcl9za2V5ID09IERJUlNf U1opIHMgPSAiL1NPUlQ6U0laRSI7Ci0gICAgICAgIGVsc2UgaWYgKGRpcl9za2V5ID09IERJUlNf RFQpIHMgPSAiL1NPUlQ6REFURSI7Ci0gICAgICAgIHBydG9wdCgmb3B0bGluZXMscyk7Ci0gICAg fQotICAgIGlmIChkaXJfcnZycyA+IC0xKSB7Ci0gICAgICAgIHBydG9wdCgmb3B0bGluZXMsZGly X3J2cnMgPyAiL1JFVkVSU0UiIDogIi9BU0NFTkRJTkciKTsKLSAgICAgICAgeCsrOwotICAgIH0K LSAgICBpZiAoZGlyX21zZyA+IC0xKSB7Ci0gICAgICAgIGlmIChkaXJfbXNnID09IDApIHsKLSAg ICAgICAgICAgIHBydG9wdCgmb3B0bGluZXMsIi9OT01FU1NBR0UiKTsKLSAgICAgICAgfSBlbHNl IHsKLSAgICAgICAgICAgIGNrbWFrbXNnKHRtcGJ1ZixUTVBCVUZTSVosIi9NRVNTQUdFOnsiLGRp cm1zZywifSIsTlVMTCk7Ci0gICAgICAgICAgICBwcnRvcHQoJm9wdGxpbmVzLHRtcGJ1Zik7Ci0g ICAgICAgIH0KLSAgICAgICAgeCsrOwotICAgIH0KLSAgICBpZiAoIXgpIHBydG9wdCgmb3B0bGlu ZXMsIihubyBvcHRpb25zIHNldCkiKTsKLSAgICBwcnRvcHQoJm9wdGxpbmVzLCIiKTsKLX0KLSNl bmRpZiAvKiBOT1NIT1cgKi8KLQotaW50Ci1zZXRkaXJvcHRzKCkgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogU2V0IERJUkVDVE9SWSBvcHRpb24gZGVmYXVsdHMgKi8KLSAgICBpbnQgeGIg PSAtMSwgeHYgPSAtMSwgeHAgPSAtMSwgeGQgPSAtMSwgeGggPSAtMSwgeGYgPSAtMTsKLSAgICBp bnQgeGsgPSAtMSwgeHIgPSAtMSwgeHMgPSAtMSwgeHggPSAtMSwgeG0gPSAtMSwgeGEgPSAtMSwg eGcgPSAtMTsKLSAgICBpbnQgZ2V0dmFsOwotICAgIGNoYXIgYzsKLSAgICB3aGlsZSAoMSkgewot ICAgICAgICBpZiAoKHkgPSBjbXN3aShkaXJzd3RhYixuZGlyc3d0YWIsIlN3aXRjaCIsIiIseHhz dHJpbmcpKSA8IDApIHsKLSAgICAgICAgICAgIGlmICh5ID09IC0zKQotICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAg ICB9Ci0gICAgICAgIGMgPSBjbWdicmsoKTsKLSAgICAgICAgaWYgKChnZXR2YWwgPSAoYyA9PSAn OicgfHwgYyA9PSAnPScpKSAmJiAhKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgewotICAgICAgICAg ICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBhbiBhcmd1bWVudFxuIik7Ci0g ICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghZ2V0dmFsICYm IChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKLSAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dp dGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKLSAgICAgICAgICAgIHJldHVybigtOSk7Ci0g ICAgICAgIH0KLSAgICAgICAgc3dpdGNoICh5KSB7Ci0gICAgICAgICAgY2FzZSBESVJfQlJGOiB4 diA9IDA7IGJyZWFrOwotICAgICAgICAgIGNhc2UgRElSX1ZSQjogeHYgPSAxOyBicmVhazsKLSAg ICAgICAgICBjYXNlIERJUl9QQUc6IHhwID0gMTsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBESVJf Tk9QOiB4cCA9IDA7IGJyZWFrOwotICAgICAgICAgIGNhc2UgRElSX0lTTzogeGQgPSAwOyBicmVh azsKLSAgICAgICAgICBjYXNlIERJUl9EQVQ6IHhkID0gMTsgYnJlYWs7Ci0gICAgICAgICAgY2Fz ZSBESVJfSERHOiB4aCA9IDE7IGJyZWFrOwotICAgICAgICAgIGNhc2UgRElSX05PSDogeGggPSAw OyBicmVhazsKLSAgICAgICAgICBjYXNlIERJUl9ET1Q6IHhmID0gMTsgYnJlYWs7Ci0gICAgICAg ICAgY2FzZSBESVJfTk9EOiB4ZiA9IDA7IGJyZWFrOwotICAgICAgICAgIGNhc2UgRElSX0FMTDog eGEgPSAzOyBicmVhazsKLSAgICAgICAgICBjYXNlIERJUl9ESVI6IHhhID0gMjsgYnJlYWs7Ci0g ICAgICAgICAgY2FzZSBESVJfRklMOiB4YSA9IDE7IGJyZWFrOwotICAgICAgICAgIGNhc2UgRElS X1NSVDoKLSAgICAgICAgICAgIHggPSBESVJTX05NOwotICAgICAgICAgICAgaWYgKGdldHZhbCkK LSAgICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkoZGlyc29ydCxuZGlyc29ydCwiU29ydCBrZXki LCJuYW1lIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAg ICAgICAgICB4ayA9IHg7Ci0gICAgICAgICAgICB4cyA9IDE7Ci0gICAgICAgICAgICBicmVhazsK LSAgICAgICAgICBjYXNlIERJUl9OT1M6IHhzID0gMDsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBE SVJfQVNDOiB4eCA9IDA7IGJyZWFrOwotICAgICAgICAgIGNhc2UgRElSX0RTQzogeHggPSAxOyBi cmVhazsKLSAgICAgICAgICBjYXNlIERJUl9SRUM6IHhyID0gMTsgYnJlYWs7Ci0gICAgICAgICAg Y2FzZSBESVJfTk9SOiB4ciA9IDA7IGJyZWFrOwotICAgICAgICAgIGNhc2UgRElSX1RZUDogeG0g PSAxOyBicmVhazsKLSAgICAgICAgICBjYXNlIERJUl9OT1Q6IHhtID0gMDsgYnJlYWs7Ci0gICAg ICAgICAgY2FzZSBESVJfQlVQOiB4YiA9IDE7IGJyZWFrOwotICAgICAgICAgIGNhc2UgRElSX05P QjogeGIgPSAwOyBicmVhazsKLSAgICAgICAgICBjYXNlIERJUl9OT006IHhnID0gMDsgYnJlYWs7 Ci0gICAgICAgICAgY2FzZSBESVJfTVNHOgotICAgICAgICAgICAgaWYgKGdldHZhbCkKLSAgICAg ICAgICAgICAgaWYgKCh4ID0gY21mbGQoIk1lc3NhZ2UgdG8gYXBwZW5kIHRvIGVhY2ggbGluZSIs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKSkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybih4 KTsKLSAgICAgICAgICAgIHhnID0gMTsKLSAgICAgICAgICAgIGNrc3RybmNweSh0bXBidWYsYnJz dHJpcChzKSxUTVBCVUZTSVopOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVs dDoKLSAgICAgICAgICAgIHByaW50ZigiP1RoaXMgb3B0aW9uIGNhbiBub3QgYmUgc2V0XG4iKTsK LSAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCh4ID0g Y21jZm0oKSkgPCAwKSAgICAgICAgICAgICAgLyogR2V0IGNvbmZpcm1hdGlvbiAqLwotICAgICAg cmV0dXJuKHgpOwotICAgIGlmICh4diA+IC0xKSBkaXJfdmVyYiA9IHh2OyAgICAgICAgIC8qIENv bmZpcm1lZCwgc2F2ZSBkZWZhdWx0cyAqLwotICAgIGlmICh4cCA+IC0xKSBkaXJfcGFnZSA9IHhw OwotICAgIGlmICh4ZCA+IC0xKSBkaXJfZGF0ZSA9IHhkOwotICAgIGlmICh4aCA+IC0xKSBkaXJf aGVhZCA9IHhoOwotICAgIGlmICh4cyA+IC0xKSBkaXJfc29ydCA9IHhzOwotICAgIGlmICh4ayA+ IC0xKSBkaXJfc2tleSA9IHhrOwotICAgIGlmICh4eCA+IC0xKSBkaXJfcnZycyA9IHh4OwotICAg IGlmICh4ZiA+IC0xKSBkaXJfZG90cyA9IHhmOwotICAgIGlmICh4YSA+IC0xKSBkaXJfc2hvdyA9 IHhhOwotICAgIGlmICh4bSA+IC0xKSBkaXJfbW9kZSA9IHhtOwotICAgIGlmICh4YiA+IC0xKSBk aXJfYmFjayA9IHhiOwotI2lmZGVmIFJFQ1VSU0lWRQotICAgIGlmICh4ciA+IC0xKSBkaXJfcmVj dSA9IHhyOwotI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLwotICAgIGlmICh4ZyA+IC0xKSBkaXJfbXNn ICA9IHhnOwotICAgIGlmICh4ZyA+IDApCi0gICAgICBtYWtlc3RyKCZkaXJtc2csdG1wYnVmKTsK LSAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotfQotCi1pbnQKLWRvbXlkaXIoY3gpIGludCBjeDsg ewkJCS8qIEludGVybmFsIERJUkVDVE9SWSBjb21tYW5kICovCi0gICAgZXh0ZXJuIGNoYXIgKm1v bnRoc1tdOwotI2lmZGVmIFZNUwotICAgIF9QUk9UT1RZUCggY2hhciAqIHpyZWxuYW1lLCAoY2hh ciAqLGNoYXIgKikgKTsKLSAgICBjaGFyICogY2RwID0gTlVMTDsKLSNlbmRpZiAvKiBWTVMgKi8K LQotICAgIGNoYXIgbmFtZVtDS01BWFBBVEgrMV0sIG91dGZpbGVbQ0tNQVhQQVRIKzFdLCAqcCA9 IE5VTEwsIGMgPSBOVUw7Ci0gICAgY2hhciBsaW5lYnVmW0NLTUFYUEFUSCsyNTZdOwotICAgIGNo YXIgKiBtc3RyID0gTlVMTCwgKiBkc3RyID0gTlVMTCwgKiBzMiA9IE5VTEwsICogY3YgPSBOVUxM OwotICAgIENLX09GRl9UIGxlbiA9IChDS19PRkZfVCkwLCBuYnl0ZXMgPSAoQ0tfT0ZGX1QpMDsK LSAgICBDS19PRkZfVCBtaW5zaXplID0gKENLX09GRl9UKS0xLCBtYXhzaXplID0gKENLX09GRl9U KS0xOwotICAgIGxvbmcgbmRpcnMgPSAwLCBuZmlsZXMgPSAwLCBubWF0Y2hlcyA9IDA7Ci0gICAg aW50IHZlcmJvc2UgPSAwLCB3aWxkID0gMCwgcGFnZSA9IDAsIG4gPSAwLCBlbmdkYXRlID0gMCwg c3VtbWFyeSA9IDA7Ci0gICAgaW50IGhlYWRpbmcgPSAwLCB4c29ydCA9IDAsIHJldmVyc2UgPSAw LCBzb3J0YnkgPSAwLCBtc2cgPSAwOwotICAgIGludCBrLCBpID0gMCwgeCA9IDAsIG54ID0gMCwg c2tleSA9IDAsIGRsZW4gPSAwLCBpdHNhZGlyID0gMDsKLSAgICBpbnQgc2hvdyA9IDMsIHhmZXJt b2QgPSAwLCBiYWNrdXAgPSAxLCByYyA9IDAsIGdldHZhbCA9IDA7Ci0gICAgaW50IHRvdWNoID0g MDsKLSAgICBpbnQgZnMgPSAwOwotICAgIGludCBtdWx0aXBsZSA9IDA7Ci0gICAgaW50IGNtaWZu MSA9IDEsIGNtaWZuMiA9IDA7Ci0gICAgaW50IGRpcl90b3AgPSAwLCBkaXJfY291ID0gMDsKLSAg ICBpbnQgZG9udHNob3dsaW5rcyA9IDA7Ci0gICAgaW50IGRvbnRmb2xsb3dsaW5rcyA9IDA7Ci0g ICAgaW50IGFycmF5aW5kZXggPSAtMTsKLSAgICBzdHJ1Y3QgRkRCIHN3LCBmaSwgZmw7Ci0gICAg Y2hhciBkYnVmWzMyXSwgeGJ1ZlszMl07Ci0KLSNpZm5kZWYgTk9TUEwKLSAgICBjaGFyIGFycmF5 ID0gTlVMOwotICAgIGNoYXIgKiogYXAgPSBOVUxMOwotI2VuZGlmIC8qIE5PU1BMICovCi0gICAg Y2hhcgotICAgICAgKiBkaXJfYWZ0ID0gTlVMTCwKLSAgICAgICogZGlyX2JlZiA9IE5VTEwsCi0g ICAgICAqIGRpcl9uYWYgPSBOVUxMLAotICAgICAgKiBkaXJfbmJmID0gTlVMTCwKLSAgICAgICog ZGlyX2V4YyA9IE5VTEw7Ci0gICAgY2hhciAqIHhsaXN0WzE2XTsKLQotICAgIGRlYnVnKEYxMDEs ImRvbXlkaXIgY3giLCIiLGN4KTsKLQotICAgIGdfbWF0Y2hkb3QgPSBtYXRjaGRvdDsgICAgICAg ICAgICAgIC8qIFNhdmUgZ2xvYmFsIG1hdGNoZG90IHNldHRpbmcgKi8KLSNpZmRlZiBDT01NRU5U Ci0gICAgbm9saW5rcyA9IDI7ICAgICAgICAgICAgICAgICAgICAgICAgLyogKGl0IHNob3VsZCBh bHJlYWR5IGJlIDIpICovCi0jZW5kaWYJLyogQ09NTUVOVCAqLwotICAgIG91dGZpbGVbMF0gPSBO VUw7ICAgICAgICAgICAgICAgICAgIC8qIE5vIG91dHB1dCBmaWxlIHlldCAqLwotCi0gICAgaWYg KG9mcCAhPSBzdGRvdXQpIHsgICAgICAgICAgICAgICAgLyogSW4gY2FzZSBvZiBwcmV2aW91cyBp bnRlcnJ1cHRpb24gKi8KLSAgICAgICAgaWYgKG9mcCkgZmNsb3NlKG9mcCk7Ci0gICAgICAgIG9m cCA9IHN0ZG91dDsKLSAgICB9Ci0gICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHhsaXN0W2ld ID0gTlVMTDsKLQotICAgIGRpcl90b3AgPSAwOwotICAgIG5hbWVbMF0gPSBOVUw7Ci0gICAgZnJl ZWRpcmxpc3QoKTsgICAgICAgICAgICAgICAgICAgICAgLyogSW4gY2FzZSBub3QgZnJlZWQgbGFz dCB0aW1lICovCi0gICAgcGFnZSAgICAgID0gZGlyX3BhZ2UgPiAtMSA/IGRpcl9wYWdlIDogeGFz a21vcmU7IC8qIFNldCBvcHRpb24gZGVmYXVsdHMgKi8KLSAgICBlbmdkYXRlICAgPSBkaXJfZGF0 ZSA+IC0xID8gZGlyX2RhdGUgOiAwOwotICAgIHZlcmJvc2UgICA9IGRpcl92ZXJiID4gLTEgPyBk aXJfdmVyYiA6IDE7Ci0gICAgaGVhZGluZyAgID0gZGlyX2hlYWQgPiAtMSA/IGRpcl9oZWFkIDog MDsKLSAgICB4c29ydCAgICAgPSBkaXJfc29ydCA+IC0xID8gZGlyX3NvcnQgOiAwOwotICAgIHNv cnRieSAgICA9IGRpcl9za2V5ID4gLTEgPyBkaXJfc2tleSA6IDA7Ci0gICAgcmV2ZXJzZSAgID0g ZGlyX3J2cnMgPiAtMSA/IGRpcl9ydnJzIDogMDsKLSAgICBtc2cgICAgICAgPSBkaXJfbXNnICA+ IC0xID8gZGlyX21zZyAgOiAwOwotI2lmZGVmIFVOSVhPUk9TSwotICAgIGlmIChkaXJfZG90cyA+ IC0xKSBtYXRjaGRvdCA9IGRpcl9kb3RzOwotI2VuZGlmIC8qIFVOSVhPUk9TSyAqLwotICAgIHhm ZXJtb2QgICA9IGRpcl9tb2RlID4gLTEgPyBkaXJfbW9kZSA6IDA7Ci0gICAgYmFja3VwICAgID0g ZGlyX2JhY2sgPiAtMSA/IGRpcl9iYWNrIDogMTsKLSNpZmRlZiBSRUNVUlNJVkUKLSAgICByZWN1 cnNpdmUgPSBkaXJfcmVjdSA+IC0xID8gZGlyX3JlY3UgOiAwOwotI2VuZGlmIC8qIFJFQ1VSU0lW RSAqLwotICAgIHNob3cgICAgICA9IGRpcl9zaG93ID4gLTEgPyBkaXJfc2hvdyA6IDM7Ci0KLSAg ICBpZiAoY3ggPT0gWFhXRElSKSB7CQkJLyogV0RJUkVDVE9SWSAqLwotCWRlYnVnKEYxMDAsImRv bXlkaXIgV0RJUkVDVE9SWSIsIiIsMCk7Ci0JcmV2ZXJzZSA9IDE7CQkJLyogUmV2ZXJzZSBjaHJv bm9sb2dpY2FsIG9yZGVyICovCi0JeHNvcnQgPSAxOwotCXNvcnRieSA9IERJUlNfRFQ7Ci0gICAg fSBlbHNlIGlmIChjeCA9PSBYWEhESVIpIHsJCS8qIEhESVJFQ1RPUlkgKi8KLQlkZWJ1ZyhGMTAw LCJkb215ZGlyIEhESVJFQ1RPUlkiLCIiLDApOwotCXJldmVyc2UgPSAxOwkJCS8qIFJldmVyc2Ug b3JkZXIgYnkgc2l6ZSAqLwotCXhzb3J0ID0gMTsKLQlzb3J0YnkgPSBESVJTX1NaOwotICAgIH0g ZWxzZSBpZiAoY3ggPT0gWFhUT1VDKSB7Ci0JdG91Y2ggPSAxOwotCXZlcmJvc2UgPSAwOwotICAg IH0JCi0KLSNpZmRlZiBDS19UVEdXU0laCi0jaWZkZWYgT1MyCi0gICAgdHRnY3dzeigpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogU2NyZWVuIGxlbmd0aCBmb3IgbW9yZS1wcm9tcHRpbmcg Ki8KLSNlbHNlIC8qIE9TMiAqLwotICAgIC8qIENoZWNrIHdoZXRoZXIgd2luZG93IHNpemUgY2hh bmdlZCAqLwotICAgIGlmICh0dGd3c2l6KCkgPiAwKSB7Ci0gICAgICAgIGlmICh0dF9yb3dzID4g MCAmJiB0dF9jb2xzID4gMCkgewotICAgICAgICAgICAgY21kX3Jvd3MgPSB0dF9yb3dzOwotICAg ICAgICAgICAgY21kX2NvbHMgPSB0dF9jb2xzOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8q IE9TMiAqLwotI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KLQotICAgIGRpcmFjdGl2ZSA9IDE7Ci0g ICAgY21pZm4xID0gbm9saW5rcyB8IDE7ICAgICAgICAgICAgICAgLyogMSA9IGZpbGVzIG9yIGRp cmVjdG9yaWVzICovCi0gICAgY21pZm4yID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyog MCA9IG5vdCBkaXJlY3RvcmllcyBvbmx5ICovCi0KLSAgYWdhaW46Ci0KLSAgICBjbWZkYmkoJnN3 LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaXJzdCBGREIgLSBjb21tYW5kIHN3aXRjaGVz ICovCi0gICAgICAgICAgIF9DTUtFWSwgICAgICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8K LSAgICAgICAgICAgIkVudGVyIG9yIFJldHVybiB0byBjb25maXJtIHRoZSBjb21tYW5kLCBvclxu XAotIGZpbGUgc3BlY2lmaWNhdGlvbiwgb3Igc3dpdGNoIiwKLSAgICAgICAgICAgIiIsICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICIiLCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAgICAgICAgbmRp cnN3dGFiLCAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNp emUgKi8KLSAgICAgICAgICAgNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBu dW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICovCi0gICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAg ICAgICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotICAgICAgICAgICBkaXJzd3Rh YiwgICAgICAgICAgICAgICAgICAgIC8qIEtleXdvcmQgdGFibGUgKi8KLSAgICAgICAgICAgJmZp ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCi0gICAg ICAgICAgICk7Ci0gICAgY21mZGJpKCZmaSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogMm5k IEZEQiAtIGZpbGVzcGVjIHRvIG1hdGNoICovCi0gICAgICAgICAgIF9DTUlGSSwgICAgICAgICAg ICAgICAgICAgICAgLyogZmNvZGUgKi8KLSAgICAgICAgICAgIkZpbGUgc3BlY2lmaWNhdGlvbiIs ICAgICAgICAvKiBobHBtc2cgKi8KLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgICAgICAgICAiKyIs ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgZmlsZXNwZWMgaXMgd2lsZGNhcmQg Ki8KLSNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGF0IG1hdGNo ZXMgYWxsIGZpbGVzLi4uICovCi0jaWZkZWYgVk1TCi0gICAgICAgICAgICIqLioiLAotI2Vsc2UK LSAgICAgICAgICAgIioiLAotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIGRhdGFnZW5lcmFs ICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3Ry aW5nIGRhdGEgKi8KLSAgICAgICAgICAgY21pZm4xLAotICAgICAgICAgICBjbWlmbjIsICAgICAg ICAgICAgICAgICAgICAgIC8qIDEgPSBvbmx5IGRpcnM7IDAgZmlsZXMgb3IgZGlycyAqLwotICAg ICAgICAgICB4eHN0cmluZywKLSAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgJmZsCi0gICAg ICAgICAgICk7Ci0gICAgY21mZGJpKCZmbCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQW55 dGhpbmcgdGhhdCBkb2Vzbid0IG1hdGNoICovCi0gICAgICAgICAgIF9DTUZMRCwgICAgICAgICAg ICAgICAgICAgICAgLyogZmNvZGUgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBobHBtc2cgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAgICAgICAgMCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLwotICAgICAgICAgICAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCi0gICAgICAg ICAgIHh4c3RyaW5nLAotICAgICAgICAgICBOVUxMLAotICAgICAgICAgICBOVUxMCi0gICAgICAg ICAgICk7Ci0gICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFyc2Ug MCBvciBtb3JlIHN3aXRjaGVzICovCi0gICAgICAgIHggPSBjbWZkYigmc3cpOyAgICAgICAgICAg ICAgICAgLyogUGFyc2Ugc29tZXRoaW5nICovCi0gICAgICAgIGRlYnVnKEYxMDEsImRvbXlkaXIg Y21mZGIiLCIiLHgpOwotICAgICAgICBpZiAoeCA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOyAK LSAgICAgICAgaWYgKGNtcmVzdWx0LmZjb2RlICE9IF9DTUtFWSkgICAvKiBCcmVhayBvdXQgaWYg bm90IGEgc3dpdGNoICovCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGMgPSBjbWdicmsoKTsK LSAgICAgICAgaWYgKChnZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAnPScpKSAmJiAhKGNtZ2t3 ZmxncygpICYgQ01fQVJHKSkgewotICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9l cyBub3QgdGFrZSBhbiBhcmd1bWVudFxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAg ICAgICB9Ci0JayA9IGNtcmVzdWx0Lm5yZXN1bHQ7Ci0gICAgICAgIGlmICghZ2V0dmFsICYmCi0J ICAgIChjbWdrd2ZsZ3MoKSAmIENNX0FSRykgJiYgayAhPSBESVJfVE9QICYmIGsgIT0gRElSX0NP VSkgewotICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1l bnRcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgICAgICBzd2l0 Y2ggKGspIHsKLSAgICAgICAgICBjYXNlIERJUl9DT1U6IHsKLSAgICAgICAgICAgICAgZGlyX2Nv dSsrOwotICAgICAgICAgICAgICBpZiAoZ2V0dmFsKSB7Ci0gICAgICAgICAgICAgICAgICBpZiAo KHggPSBjbWZsZCgiVmFyaWFibGUgZm9yIHJlc3VsdCIsIiIsJnMsTlVMTCkpIDwgMCkKLSAgICAg ICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgICAgICAgbWFrZXN0cigmY3Ys cyk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQot ICAgICAgICAgIGNhc2UgRElSX0JSRjogdmVyYm9zZSA9IDA7IGJyZWFrOwotICAgICAgICAgIGNh c2UgRElSX1ZSQjogdmVyYm9zZSA9IDE7IGJyZWFrOwotI2lmZGVmIENLX1RUR1dTSVoKLSAgICAg ICAgICBjYXNlIERJUl9QQUc6IHBhZ2UgPSAxOyAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERJ Ul9OT1A6IHBhZ2UgPSAwOyAgICBicmVhazsKLSNlbmRpZiAvKiBDS19UVEdXU0laICovCi0gICAg ICAgICAgY2FzZSBESVJfSVNPOiBlbmdkYXRlID0gMDsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBE SVJfREFUOiBlbmdkYXRlID0gMTsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBESVJfSERHOiBoZWFk aW5nID0gMTsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBESVJfTk9IOiBoZWFkaW5nID0gMDsgYnJl YWs7Ci0jaWZkZWYgVU5JWE9ST1NLCi0gICAgICAgICAgY2FzZSBESVJfRE9UOiBtYXRjaGRvdCA9 IDE7IGJyZWFrOwotICAgICAgICAgIGNhc2UgRElSX05PRDogbWF0Y2hkb3QgPSAwOyBicmVhazsK LSNlbmRpZiAvKiBVTklYT1JPU0sgKi8KLSAgICAgICAgICBjYXNlIERJUl9BTEw6Ci0gICAgICAg ICAgICBzaG93ID0gMzsKLSAgICAgICAgICAgIGNtaWZuMSB8PSAxOwotICAgICAgICAgICAgY21p Zm4yID0gMDsKLSAgICAgICAgICAgIGdvdG8gYWdhaW47Ci0gICAgICAgICAgY2FzZSBESVJfRElS OgotICAgICAgICAgICAgc2hvdyA9IDI7Ci0gICAgICAgICAgICBjbWlmbjEgfD0gMTsKLSAgICAg ICAgICAgIGNtaWZuMiA9IDE7Ci0gICAgICAgICAgICBnb3RvIGFnYWluOwotICAgICAgICAgIGNh c2UgRElSX0ZJTDoKLSAgICAgICAgICAgIHNob3cgPSAxOwotICAgICAgICAgICAgY21pZm4xICY9 IH4oMSk7Ci0gICAgICAgICAgICBjbWlmbjIgPSAwOwotICAgICAgICAgICAgZ290byBhZ2FpbjsK LSAgICAgICAgICBjYXNlIERJUl9TUlQ6Ci0gICAgICAgICAgICB4ID0gRElSU19OTTsKLSAgICAg ICAgICAgIGlmIChjID09ICc6JyB8fCBjID09ICc9JykKLSAgICAgICAgICAgICAgaWYgKCh4ID0g Y21rZXkoZGlyc29ydCxuZGlyc29ydCwiU29ydCBrZXkiLCJuYW1lIix4eHN0cmluZykpIDwgMCkK LSAgICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICB4c29ydCA9IDE7Ci0gICAg ICAgICAgICBzb3J0YnkgPSB4OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNl IERJUl9CVVA6IGJhY2t1cCAgPSAxOyBmcysrOyAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRElS X05PQjogYmFja3VwICA9IDA7IGZzKys7ICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIERJUl9O T1M6IHhzb3J0ID0gMDsgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRElSX0FTQzogcmV2ZXJz ZSA9IDA7ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBESVJfRFNDOiByZXZlcnNlID0gMTsgICBi cmVhazsKLSNpZmRlZiBSRUNVUlNJVkUKLSAgICAgICAgICBjYXNlIERJUl9SRUM6IHJlY3Vyc2l2 ZSA9IDE7IGRpcmFjdGl2ZSA9IDE7IGJyZWFrOwotICAgICAgICAgIGNhc2UgRElSX05PUjogcmVj dXJzaXZlID0gMDsgZGlyYWN0aXZlID0gMDsgYnJlYWs7Ci0jZW5kaWYgLyogUkVDVVJTSVZFICov Ci0gICAgICAgICAgY2FzZSBESVJfVFlQOiB4ZmVybW9kID0gMTsgICBicmVhazsKLSAgICAgICAg ICBjYXNlIERJUl9OT1Q6IHhmZXJtb2QgPSAwOyAgIGJyZWFrOwotCi0jaWZkZWYgQ0tTWU1MSU5L Ci0gICAgICAgICAgY2FzZSBESVJfTE5LOiAgICAgICAgICAgICAgICAgLyogRm9sbG93IGxpbmtz ICovCi0jaWZkZWYgQ09NTUVOVAotCSAgICAvKiBBIGNvbW1hbmQgc3dpdGNoIHNob3VsZG4ndCBi ZSBzZXR0aW5nIGEgZ2xvYmFsIHZhbHVlISAqLwotICAgICAgICAgICAgbm9saW5rcyA9IDA7Ci0j ZW5kaWYJLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgY21pZm4xICY9IH4oMik7Ci0JICAgIGRv bnRmb2xsb3dsaW5rcyA9IDA7Ci0gICAgICAgICAgICBnb3RvIGFnYWluOwotICAgICAgICAgIGNh c2UgRElSX05MSzogICAgICAgICAgICAgICAgIC8qIERvbid0IGZvbGxvdyBsaW5rcyAqLwotI2lm ZGVmIENPTU1FTlQKLSAgICAgICAgICAgIG5vbGlua3MgPSAyOwotI2VuZGlmCS8qIENPTU1FTlQg Ki8KLSAgICAgICAgICAgIGNtaWZuMSAmPSB+KDIpOwotCSAgICBkb250Zm9sbG93bGlua3MgPSAx OwotICAgICAgICAgICAgZ290byBhZ2FpbjsKLQkgIGNhc2UgRElSX05PTDoJCQkvKiBEb24ndCBz aG93IGxpbmtzIGF0IGFsbCAqLwotCSAgICBkb250c2hvd2xpbmtzID0gMTsKLQkgICAgZ290byBh Z2FpbjsKLSNlbmRpZiAvKiBDS1NZTUxJTksgKi8KLQotICAgICAgICAgIGNhc2UgRElSX05PTTog bXNnICAgICA9IDA7ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBESVJfTVNHOgotICAgICAgICAg ICAgaWYgKGMgPT0gJzonIHx8IGMgPT0gJz0nKQotICAgICAgICAgICAgICBpZiAoKHggPSBjbWZs ZCgiTWVzc2FnZSB0byBhcHBlbmQgdG8gZWFjaCBsaW5lIiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB4eHN0cmluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgbXNnID0g MTsKLSAgICAgICAgICAgIGNrc3RybmNweSh0bXBidWYsYnJzdHJpcChzKSxUTVBCVUZTSVopOwot ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIERJUl9TTUE6Ci0gICAgICAgICAg Y2FzZSBESVJfTEFSOiB7Ci0JICAgICAgQ0tfT0ZGX1QgeTsKLQkgICAgICBpZiAoIWdldHZhbCkg YnJlYWs7Ci0JICAgICAgaWYgKCh4ID0gY21udW13KCJGaWxlIHNpemUgaW4gYnl0ZXMiLCIwIiwx MCwmeSx4eHN0cmluZykpIDwgMCkKLQkJcmV0dXJuKHgpOwotCSAgICAgIGZzKys7Ci0JICAgICAg c2hvdyA9IDE7Ci0JICAgICAgc3dpdGNoIChjbXJlc3VsdC5ucmVzdWx0KSB7Ci0JCWNhc2UgRElS X1NNQTogbWluc2l6ZSA9IHk7IGJyZWFrOwotCQljYXNlIERJUl9MQVI6IG1heHNpemUgPSB5OyBi cmVhazsKLQkgICAgICB9Ci0JICAgICAgYnJlYWs7Ci0JICB9Ci0JICBjYXNlIERJUl9UT1A6Ci0J ICAgIGRpcl90b3AgPSAxMDsKLQkgICAgaWYgKCFnZXR2YWwpIGJyZWFrOwotCSAgICAgIGlmICgo eCA9IGNtbnVtKCJIb3cgbWFueSBsaW5lcyB0byBzaG93IiwiMTAiLDEwLCZ5LHh4c3RyaW5nKSk8 IDApCi0JCXJldHVybih4KTsKLQkgICAgICBkaXJfdG9wID0geTsKLQkgICAgICBicmVhazsKLQot I2lmbmRlZiBOT1NQTAotICAgICAgICAgIGNhc2UgRElSX0FSUjoKLSAgICAgICAgICAgIGlmIChj ICE9ICc6JyAmJiBjICE9ICc9JykgewotICAgICAgICAgICAgICAgIHByaW50ZigiP0FycmF5IG5h bWUgcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAg ICB9Ci0gICAgICAgICAgICBpZiAoKHggPSBjbWZsZCgiQXJyYXkgbmFtZSAoYSBzaW5nbGUgbGV0 dGVyIHdpbGwgZG8pIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgJnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICApKSA8IDApIHsKLSAgICAgICAgICAgICAgICBpZiAo eCA9PSAtMykgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9BcnJheSBuYW1lIHJlcXVp cmVkXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAg ICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIGlmICghKnMpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9BcnJheSBuYW1l IHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAg fQotICAgICAgICAgICAgczIgPSBzOwotICAgICAgICAgICAgaWYgKCpzID09IENNRFEpIHMrKzsK LSAgICAgICAgICAgIGlmICgqcyA9PSAnJicpIHMrKzsKLSAgICAgICAgICAgIGlmICghaXNhbHBo YSgqcykpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9CYWQgYXJyYXkgbmFtZSAtIFwiJXNc IlxuIixzMik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIGFycmF5ID0gKnMrKzsKLSAgICAgICAgICAgIGlmIChpc3VwcGVyKGFycmF5KSkg YXJyYXkgPSB0b2xvd2VyKGFycmF5KTsKLSAgICAgICAgICAgIGlmICgqcyAmJiAoKnMgIT0gJ1sn IHx8ICoocysxKSAhPSAnXScpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/QmFkIGFycmF5 IG5hbWUgLSBcIiVzXCJcbiIsczIpOwotICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgICAg ICAgIGNhc2UgRElSX0FGVDoKLSAgICAgICAgICBjYXNlIERJUl9CRUY6Ci0gICAgICAgICAgY2Fz ZSBESVJfTkFGOgotICAgICAgICAgIGNhc2UgRElSX05CRjoKLSAgICAgICAgICAgIGlmICghZ2V0 dmFsKSBicmVhazsKLSAgICAgICAgICAgIGlmICgoeCA9IGNtZGF0ZSgiRmlsZS10aW1lIiwiIiwm cywwLHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKLSAg ICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/RGF0ZS10aW1lIHJlcXVpcmVkXG4iKTsKLSAgICAg ICAgICAgICAgICAgICAgcmMgPSAtOTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg ICAgICAgICAgIHJjID0geDsKLSAgICAgICAgICAgICAgICBnb3RvIHhkb215ZGlyOwotICAgICAg ICAgICAgfQotICAgICAgICAgICAgZnMrKzsKLSAgICAgICAgICAgIHN3aXRjaCAoaykgewotICAg ICAgICAgICAgICBjYXNlIERJUl9BRlQ6IG1ha2VzdHIoJmRpcl9hZnQscyk7IGJyZWFrOwotICAg ICAgICAgICAgICBjYXNlIERJUl9CRUY6IG1ha2VzdHIoJmRpcl9iZWYscyk7IGJyZWFrOwotICAg ICAgICAgICAgICBjYXNlIERJUl9OQUY6IG1ha2VzdHIoJmRpcl9uYWYscyk7IGJyZWFrOwotICAg ICAgICAgICAgICBjYXNlIERJUl9OQkY6IG1ha2VzdHIoJmRpcl9uYmYscyk7IGJyZWFrOwotICAg ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBESVJfRVhDOgot ICAgICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOwotICAgICAgICAgICAgaWYgKCh4ID0gY21m bGQoIlBhdHRlcm4iLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgaWYg KHggPT0gLTMpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/UGF0dGVybiByZXF1aXJl ZFxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJjID0gLTk7Ci0gICAgICAgICAgICAgICAgfSBl bHNlCi0gICAgICAgICAgICAgICAgICByYyA9IHg7Ci0gICAgICAgICAgICAgICAgZ290byB4ZG9t eWRpcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZzKys7Ci0gICAgICAgICAgICBtYWtl c3RyKCZkaXJfZXhjLHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIERJ Ul9TVU06Ci0gICAgICAgICAgICBzdW1tYXJ5ID0gMTsgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNl IERJUl9CSU46IHsKLSAgICAgICAgICAgICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgdHh0YmluW107 Ci0gICAgICAgICAgICAgIGV4dGVybiBpbnQgeGZpbGV0eXBlOwotICAgICAgICAgICAgICBpZiAo IWdldHZhbCkgYnJlYWs7Ci0gICAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KHR4dGJpbiwzLCIi LCJhbGwiLHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICByYyA9IHg7Ci0gICAg ICAgICAgICAgICAgICBnb3RvIHhkb215ZGlyOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgIGlmICh4ID09IDIpIHsKLSAgICAgICAgICAgICAgICAgIHhmaWxldHlwZSA9IC0xOwotICAg ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgeGZpbGV0eXBlID0geDsKLSAg ICAgICAgICAgICAgICAgIGZzID0gMTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSBESVJfT1VUOgotICAgICAgICAgICAg aWYgKCh4ID0gY21vZmkoIkZpbGUgZm9yIGRpcmVjdG9yeSBsaXN0aW5nIiwiIiwmcyx4eHN0cmlu ZykpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgY2tzdHJuY3B5 KG91dGZpbGUscyxDS01BWFBBVEgrMSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg IGRlZmF1bHQ6Ci0gICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgbm90IGltcGxlbWVudGVkIHll dCAtIFwiJXNcIlxuIiwgYXRtYnVmKTsKLSAgICAgICAgICAgIGdvdG8geGRvbXlkaXI7Ci0gICAg ICAgIH0KLSAgICB9Ci0gICAgY2tzdHJuY3B5KGxpbmUsY21yZXN1bHQuc3Jlc3VsdCxMSU5CVUZT SVopOyAvKiBTYWZlIGNvcHkgb2YgZmlsZXNwZWMgKi8KLQotLyogXl5eIFNUQVJUIE1VTFRJUExF ICovCi0gICAgCi0gICAgd2hpbGUgKCF0b3VjaCkgewotCXggPSBjbWZsZCgiQW5vdGhlciBmaWxl c3BlYyBvciBFbnRlciIsIiIsJnMseHhzdHJpbmcpOwotCWlmICh4ID09IC0zKQotCSAgYnJlYWs7 Ci0JaWYgKHggPCAwKQotCSAgcmV0dXJuKHgpOwotCWNrc3RybmNhdChsaW5lLCIsIixMSU5CVUZT SVopOwotCWNrc3RybmNhdChsaW5lLHMsTElOQlVGU0laKTsKLQltdWx0aXBsZSsrOwotICAgIH0K LSAgICBja21ha21zZyh0bXBidWYsVE1QQlVGU0laLCJ7IixsaW5lLCJ9IixOVUxMKTsKLSAgICBj a3N0cm5jcHkobGluZSx0bXBidWYsTElOQlVGU0laKTsKLSAgICBjbXJlc3VsdC5ucmVzdWx0ID0g MTsKLSAgICBjbXJlc3VsdC5mY29kZSA9IF9DTUlGSTsKLQotLyogXl5eIEVORCBNVUxUSVBMRSAq LwotCi0gICAgcyA9IGxpbmU7Ci0KLSAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApICAgICAgICAg ICAgICAvKiBHZXQgY29uZmlybWF0aW9uICovCi0gICAgICByZXR1cm4oeCk7Ci0KLS8qCi0gIENv bW1hbmQgaXMgVE9VQ0ggYW5kIGZpbGUgZG9lc24ndCBleGlzdC4KLSovCi0gICAgaWYgKHRvdWNo KSB7CQkJLyogVE9VQ0ggKi8KLQlpZiAoKGNtcmVzdWx0LmZjb2RlID09IF9DTUlGSSAmJiB6Y2hr aShzKSA9PSAoQ0tfT0ZGX1QpLTEpKSB7Ci0JICAgIEZJTEUgKiBmcDsKLQkgICAgcyA9IGJyc3Ry aXAocyk7Ci0JICAgIGlmICghaXN3aWxkKHMpKSB7Ci0jaWZkZWYgVU5JWAotCQlpZiAoc1swXSA9 PSAnficpCi0JCSAgcyA9IHRpbGRlX2V4cGFuZChzKTsKLSNlbmRpZgkvKiBVTklYICovCi0JCWZw ID0gZm9wZW4ocywidyIpOwkvKiBDcmVhdGUgZmlsZSAqLwotCQlpZiAoIWZwKSB7Ci0JCSAgICBw cmludGYoIj9UT1VDSCAlczogJXNcbiIscyxja19lcnJzdHIoKSk7Ci0JCSAgICByYyA9IC05Owot CQkgICAgZ290byB4ZG9teWRpcjsKLQkJfQotCQlmY2xvc2UoZnApOwotCQljeCA9IFhYRElSOwkJ LyogTm93IG1heWJlIGxpc3QgaXQuICovCi0JCW11bHRpcGxlKys7CQkvKiBGb3JjZSBuZXcgZGly ZWN0b3J5IHNjYW4gKi8KLQkgICAgfQotCX0KLSAgICB9IGVsc2UKLQotICAgIGlmIChjbXJlc3Vs dC5mY29kZSAhPSBfQ01JRkkpIHsgICAgIC8qIE5vdGhpbmcgbWF0Y2hlZCAqLwotCS8qCi0JICBO b3RlIC0gdGhpcyBuZXZlciBnZXRzIGV4ZWN1dGVkIGJlY2F1c2UgYWZ0ZXIgdGhlICJiZWdpbgot CSAgbXVsdGlwbGUiIGhhY2sgYWJvdmUsIHRoZSByZXN1bHQgaXMgYWx3YXlzIF9DTUlGSSkuCi0J Ki8KLSAgICAgICAgY2hhciAqIG07Ci0JaWYgKCpzID09ICcvJykKLSNpZmRlZiBVTklYT1JPU0sK LQkgIG0gPSAiZG9lcyBub3QgbWF0Y2ggc3dpdGNoIG9yIG5hbWUgb2YgYWNjZXNzaWJsZSBmaWxl IjsKLSNlbHNlCi0jaWZkZWYgT1MyCi0JbSA9ICJkb2VzIG5vdCBtYXRjaCBzd2l0Y2ggb3IgbmFt ZSBvZiBhY2Nlc3NpYmxlIGZpbGUiOwotI2Vsc2UKLQltID0gIm5vIHN3aXRjaGVzIG1hdGNoIjsK LSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBVTklYT1JPU1ggKi8KLQllbHNlCi0JICBtID0g Im5vdCBmb3VuZCBvciBub3QgYWNjZXNzaWJsZSI7Ci0JcHJpbnRmKCJcIiVzXCIgLSAlc1xuIixz LG0pOwotCXJjID0gLTk7Ci0JZ290byB4ZG9teWRpcjsKLSAgICB9Ci0jaWZkZWYgQ09NTUVOVAot ICAgIC8qIFRoaXMgY2FuJ3QgYmUgcmlnaHQgYmVjYXVzZSBpdCdzIGJhc2VkIG9uIF9DTUNGTSAq LwotICAgIHdpbGQgPSBjbXJlc3VsdC5ucmVzdWx0OyAgICAgICAgICAgIC8qIFdpbGRjYXJkIHdh cyBnaXZlbj8gKi8KLSAgICBkZWJ1ZyhGMTExLCJkb215ZGlyIGNtaWZpMiIscyx3aWxkKTsKLSNl bHNlCi0gICAgd2lsZCA9IDA7Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwotCi0gICAgaWYgKG91dGZp bGVbMF0pIHsJCQkvKiBJZiBhbiBvdXRwdXQgZmlsZSB3YXMgc3BlY2lmaWVkICovCi0gICAgICAg IG9mcCA9IGZvcGVuKG91dGZpbGUsInciKTsgICAgICAgLyogb3BlbiBpdCAqLwotICAgICAgICBp ZiAoIW9mcCkgewotICAgICAgICAgICAgcHJpbnRmKCI/Q2FuJ3Qgb3BlbiBvdXRwdXQgZmlsZSAl czogJXNcbiIsb3V0ZmlsZSxja19lcnJzdHIoKSk7Ci0gICAgICAgICAgICBvZnAgPSBzdGRvdXQ7 Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0gICAgICAgIHBhZ2UgPSAwOwot ICAgIH0KLQotI2lmZGVmIE9TMgotICAgIGlmICghd2lsZCkgewotICAgICAgICBpZiAoemNoa2ko cykgPT0gLTIpIHsgICAgICAgICAgIC8qIEZvdW5kIGEgZGlyZWN0b3J5ICovCi0gICAgICAgICAg ICBwID0gcyArIChpbnQpc3RybGVuKHMpIC0gMTsgLyogWWVzICovCi0gICAgICAgICAgICBpZiAo KnAgPT0gJ1xcJyB8fCAqcCA9PSAnLycpCi0gICAgICAgICAgICAgIHN0cmNhdChzLCAiKiIpOwot ICAgICAgICAgICAgZWxzZSBpZiAoKnAgPT0gJzonKQotICAgICAgICAgICAgICBzdHJjYXQocywg Ii4vKiIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBzdHJjYXQocywgIi8qIik7 Ci0gICAgICAgICAgICB3aWxkID0gMTsgICAgICAgICAgICAgICAgICAgLyogTm93IGl0J3Mgd2ls ZCAqLwotICAgICAgICB9Ci0gICAgfQotI2Vsc2UKLSAgICBpZiAoIXdpbGQpIGlmIChpc2Rpcihz KSkgeyAgICAgICAgICAvKiBJcyBpdCBhIGRpcmVjdG9yeT8gKi8KLSAgICAgICAgcCA9IHMgKyAo aW50KXN0cmxlbihzKSAtIDE7ICAgICAvKiBZZXMgKi8KLSNpZmRlZiBWTVMKLSAgICAgICAgewot ICAgICAgICAgICAgLyogQ29udmVydCBmcm9tIEZPTy5ESVI7MSB0byBbeC5GT09dIGlmIG5lY2Vz c2FyeSAqLwotICAgICAgICAgICAgY2hhciBidWZbQ0tNQVhQQVRIKzFdOwotICAgICAgICAgICAg ZGVidWcoRjAwMCwiZG9teWRpciBkaXJlY3RvcnkgMCIscywqcCk7Ci0gICAgICAgICAgICBpZiAo Y3Z0ZGlyKHMsYnVmLENLTUFYUEFUSCkgPiAwKQotICAgICAgICAgICAgICBja3N0cm5jcHkobGlu ZSxidWYsTElOQlVGU0laKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIFZNUyAqLwotICAgICAgICBk ZWJ1ZyhGMDAwLCJkb215ZGlyIGRpcmVjdG9yeSAxIixzLCpwKTsKLSNpZmRlZiBWTVMKLSAgICAg ICAgaWYgKCpwID09ICddJyB8fCAqcCA9PSAnPicgfHwgKnAgPT0gJzonKQotICAgICAgICAgIHN0 cmNhdChzLCAiKi4qIik7Ci0jZWxzZQotI2lmZGVmIGRhdGFnZW5lcmFsCi0gICAgICAgIGlmICgq cCA9PSAnOicpCi0gICAgICAgICAgc3RyY2F0KHMsICIrIik7Ci0gICAgICAgIGVsc2UKLSAgICAg ICAgICBzdHJjYXQocywgIjorIik7Ci0jZWxzZQotI2lmZGVmIFNUUkFUVVMKLSAgICAgICAgaWYg KCpwID09ICc+JykKLSAgICAgICAgICBzdHJjYXQocywgIioiKTsKLSAgICAgICAgZWxzZQotICAg ICAgICAgIHN0cmNhdChzLCAiPioiKTsKLSNlbmRpZiAvKiBTVFJBVFVTICovCi0jZW5kaWYgLyog ZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSAgICAgICAgd2lsZCA9IDE7ICAgICAg ICAgICAgICAgICAgICAgICAvKiBOb3cgaXQncyB3aWxkICovCi0gICAgICAgIGRlYnVnKEYwMDAs ImRvbXlkaXIgZGlyZWN0b3J5IDIiLHMsKnApOwotICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLQot I2lmZGVmIFpYUkVXSU5ECi0vKiBjbWlmaSgpIGFscmVhZHkgY2FsbGVkIG56eHBhbmQgc28gd2Ug Y2FuIGp1c3QgcmUtdXNlIHRoZSBzYW1lIGxpc3QuICovCi0gICAgaWYgKCFtdWx0aXBsZSkgewot CXggPSB6eHJld2luZCgpOwkJCS8qIFJld2luZCB0aGUgbGlzdCAqLwotCWRlYnVnKEYxMTEsImRv bXlkaXIgenhyZXdpbmQiLHMseCk7Ci0gICAgfSBlbHNlIHsKLSNlbmRpZiAvKiBaWFJFV0lORCAq LwotLyoKLSAgSW4gY2FzZSB3ZSBnYXZlIG11bHRpcGxlIGZpbGVzcGVjcyB0aGV5IGFyZSBub3cg aW4ge2EsYixjfSBsaXN0IGZvcm1hdC4KLSAgV2hpY2ggaXMgYSB2YWxpZCB3aWxkY2FyZC4gIFdl IHBhc3MgaXQgdG8gbnp4cGFuZCgpIHRvIGdldCBiYWNrIHRoZSBsaXN0Ci0gIG9mIGZpbGVzIHRo YXQgbWF0Y2guICBUaGlzIGlzIGZpbmUgZm9yIERJUkVDVE9SWSBidXQgaXQncyBub3QgZmluZCBm b3IKLSAgVE9VQ0ggYmVjYXVzZSB3ZSB3YW50IFRPVUNIIHRvIHNlZSB0aG9zZSBuYW1lcyBzbyBp dCBjYW4gY3JlYXRlIHRoZSBmaWxlcy4KLSAgU28gZm9yIG5vdyBhdCBsZWFzdCwgaWYgVE9VQ0gg aXMgdG8gYmUgdXNlZCB0byBjcmVhdGUgZmlsZXMgLS0gYXMgb3Bwb3NlZAotICB0byBjaGFuZ2lu ZyB0aGUgdGltZXN0YW1wcyBvZiBleGlzdGluZyBmaWxlcyAtLSBpdCBjYW4gb25seSBkbyBvbmUg ZmlsZQotICBhdCBhIHRpbWUuCi0qLwotCW56eG9wdHMgPSAoc2hvdyA9PSBaWF9ESVJPTkxZKSA/ IFpYX0RJUk9OTFkgOgotCSAgKHNob3cgPT0gWlhfRklMT05MWSA/IFpYX0ZJTE9OTFkgOiAwKTsK LQlpZiAobWF0Y2hkb3QpICBuenhvcHRzIHw9IFpYX01BVENIRE9UOwotCWlmIChyZWN1cnNpdmUp IG56eG9wdHMgfD0gWlhfUkVDVVJTRTsKLQl4ID0gbnp4cGFuZChzLG56eG9wdHMpOyAgICAgICAg ICAgICAvKiBFeHBhbmQgZmlsZSBsaXN0ICovCi0JZGVidWcoRjExMSwiZG9teWRpciBuenhwYW5k IixzLHgpOwotI2lmZGVmIFpYUkVXSU5ECi0gICAgfQotI2VuZGlmIC8qIFpYUkVXSU5EICovCi0K LSNpZm5kZWYgTk9TUEwKLSAgICBpZiAoYXJyYXkpIHsKLSAgICAgICAgaW50IG4sIHh4OwotICAg ICAgICBuID0gKHggPCAwKSA/IDAgOiB4OwotICAgICAgICBpZiAoKHh4ID0gZGNsYXJyYXkoYXJy YXksbikpIDwgMCkgewotICAgICAgICAgICAgcHJpbnRmKCI/QXJyYXkgZGVjbGFyYXRpb24gZmFp bHVyZVxuIik7Ci0gICAgICAgICAgICByYyA9IC05OwotICAgICAgICAgICAgZ290byB4ZG9teWRp cjsKLSAgICAgICAgfQotCWFycmF5aW5kZXggPSB4eDsKLSAgICAgICAgYXAgPSBhX3B0clt4eF07 CQkJLyogUG9pbnRlciB0byBsaXN0IG9mIGVsZW1lbnRzICovCi0gICAgICAgIGlmIChhcCkJCQkJ LyogU2V0IGVsZW1lbnQgMCB0byBkaW1lbnNpb24gKi8KLSAgICAgICAgICBtYWtlc3RyKCYoYXBb MF0pLCIwIik7CS8qIHdoaWNoIHNvIGZhciBpcyB6ZXJvICovCi0gICAgICAgIGlmIChuIDwgMSkg ewkJCS8qIE5vIGZpbGVzIG1hdGNoZWQsIGRvbmUuICovCi0gICAgICAgICAgICByYyA9IDA7Ci0g ICAgICAgICAgICBnb3RvIHhkb215ZGlyOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0jZW5kaWYg LyogTk9TUEwgKi8KLSAgICAgIGlmICghdG91Y2ggJiYgeCA8IDEpIHsKLSNpZmRlZiBDS1JPT1QK LSAgICAgICAgICBleHRlcm4gaW50IGNrcm9vdGVycjsKLSAgICAgICAgICBpZiAoY2tyb290ZXJy KQotICAgICAgICAgICAgcHJpbnRmKCI/T2ZmIGxpbWl0czogJXNcbiIscyk7Ci0gICAgICAgICAg ZWxzZQotI2VuZGlmIC8qIENLUk9PVCAqLwotICAgICAgICAgICAgaWYgKHggPT0gMCAmJiBpc2Rp cihzKSkKLSAgICAgICAgICAgICAgcHJpbnRmKCI/RW1wdHkgZGlyZWN0b3J5IC0gXCIlc1wiXG4i LCBzKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcHJpbnRmKCI/JXMgJXMgbWF0 Y2ggLSBcIiVzXCJcbiIsCi0gICAgICAgICAgICAgICAgICAgICAoeCA9PSAwKSA/ICJObyIgOiAi VG9vIG1hbnkiLAotICAgICAgICAgICAgICAgICAgICAgKHNob3cgPT0gMikgPyAiZGlyZWN0b3Jp ZXMiIDogImZpbGVzIiwKLSAgICAgICAgICAgICAgICAgICAgIGJyc3RyaXAocykKLSAgICAgICAg ICAgICAgICAgICAgICk7Ci0gICAgICAgICAgcmMgPSAtOTsKLSAgICAgICAgICBnb3RvIHhkb215 ZGlyOwotICAgIH0KLSAgICBueCA9IHg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBS ZW1lbWJlciBob3cgbWFueSBmaWxlcyAqLwotICAgIGlmIChueCA8IDIpIHhzb3J0ID0gMDsJCS8q IFNraXAgc29ydGluZyBpZiBub25lIG9yIG9uZSAqLwotCi0gICAgaWYgKG1zZykgewotICAgICAg ICBtYWtlc3RyKCZkaXJtc2csdG1wYnVmKTsKLSAgICAgICAgZGlybXNnbGVuID0gc3RybGVuKHRt cGJ1Zik7Ci0gICAgfQotCi0jaWZkZWYgVk1TCi0gICAgY2RwID0gemd0ZGlyKCk7ICAgICAgICAg ICAgICAgICAgICAgLyogR2V0IGN1cnJlbnQgZGlyZWN0b3J5ICovCi0gICAgZGVidWcoRjExMCwi ZG9teWRpciBWTVMgemd0ZGlyIixjZHAsMCk7Ci0jZW5kaWYgLyogVk1TICovCi0KLSAgICBpZiAo eHNvcnQgJiYgdmVyYm9zZSkgeyAgICAgICAgICAgICAvKiBJZiBzb3J0aW5nLCBhbGxvY2F0ZSBz cGFjZSAqLwotICAgICAgICBpZiAoIShkaXJsaXN0ID0gKGNoYXIgKiopIG1hbGxvYygoeCArIDEp ICogc2l6ZW9mKGNoYXIgKiopKSkpIHsKLSAgICAgICAgICAgIGlmICghcXVpZXQpIHsKLSAgICAg ICAgICAgICAgICBwcmludGYoIiogV2FybmluZzogRmFpbHVyZSB0byBhbGxvY2F0ZSBtZW1vcnkg Zm9yIHNvcnRpbmcuXG4iKTsKLSAgICAgICAgICAgICAgICBwcmludGYoIiogV2lsbCBwcm9jZWVk IHdpdGhvdXQgc29ydGluZy4uLlxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB4c29y dCA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgZGVidWcoRjEwMSwiZG9teWRpciBzb3J0IG1hbGxv YyIsIiIseHNvcnQpOwotICAgIH0KLQotICAgIC8qIERpc3BsYXkgdGhlIGxpc3RpbmcgKi8KLQot I2lmbmRlZiBOT1NQTAotICAgIGlmIChhcnJheSkgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFN0b3JpbmcgaW5zdGVhZCBvZiBwcmludGluZyAqLwotICAgICAgaGVhZGluZyA9IDA7Ci0jZW5k aWYgLyogTk9TUEwgKi8KLQotICAgIGlmIChoZWFkaW5nKSB7ICAgICAgICAgICAgICAgICAgICAg IC8qIElmIC9IRUFESU5HIHByaW50IGhlYWRpbmcgKi8KLSAgICAgICAgemZucWZwKHMsVE1QQlVG U0laLHRtcGJ1Zik7Ci0gICAgICAgIGZwcmludGYob2ZwLCJcbkRpcmVjdG9yeSBvZiAlc1xuXG4i LHRtcGJ1Zik7Ci0gICAgICAgIG4gKz0gMzsKLSAgICB9Ci0gICAgaWYgKHBhZ2UgPiAtMSkgICAg ICAgICAgICAgICAgICAgICAgLyogUGFnaW5nICovCi0gICAgICB4YXNrbW9yZSA9IHBhZ2U7Ci0K LSAgICBpZiAoIXZlcmJvc2UgJiYgIXRvdWNoKSB7CQkvKiAvQlJJRUYgKi8KLSAgICAgICAgaWYg KG91dGZpbGVbMF0pIHsgICAgICAgICAgICAgICAvKiBUbyBmaWxlICAqLwotICAgICAgICAgICAg aW50IGsgPSAwOwotICAgICAgICAgICAgem5leHQobmFtZSk7Ci0gICAgICAgICAgICB3aGlsZSAo bmFtZVswXSkgeyAgICAgICAgICAgLyogT25lIGxpbmUgcGVyIGZpbGUgKi8KLSAgICAgICAgICAg ICAgICBrKys7Ci0gICAgICAgICAgICAgICAgaWYgKGZzKSBpZiAoZmlsZXNlbGVjdChuYW1lLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyX2FmdCxkaXJfYmVmLGRp cl9uYWYsZGlyX25iZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1p bnNpemUsbWF4c2l6ZSwhYmFja3VwLDE2LHhsaXN0KSA8IDEpIHsKLSAgICAgICAgICAgICAgICAg ICAgem5leHQobmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICBmcHJpbnRmKG9mcCwiJXNcbiIsbmFtZSk7Ci0gICAg ICAgICAgICAgICAgem5leHQobmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo aGVhZGluZykKLSAgICAgICAgICAgICAgZnByaW50ZihvZnAsIkZpbGVzOiAlZFxuXG4iLGspOwot ICAgICAgICAgICAgcmMgPSAxOwotICAgICAgICAgICAgZ290byB4ZG9teWRpcjsKLSAgICAgICAg fSBlbHNlIHsKLSAgICAgICAgICAgIHJjID0geGZpbGhlbHAoeCwiIiwiIixuLDAsMSwKLQkJCSAg ZGlyX2FmdCxkaXJfYmVmLGRpcl9uYWYsZGlyX25iZiwKLQkJCSAgbWluc2l6ZSxtYXhzaXplLCFi YWNrdXAsMTYseGxpc3QpOwotICAgICAgICAgICAgaWYgKHJjIDwgMCkKLSAgICAgICAgICAgICAg Z290byB4ZG9teWRpcjsKLSAgICAgICAgICAgIGlmIChoZWFkaW5nICYmIHJjID4gMCkKLSAgICAg ICAgICAgICAgZnByaW50ZihvZnAsIkZpbGVzOiAlZFxuXG4iLHgpOyAvKiAoTWlnaHQgc2Nyb2xs IGEgbGluZSBvciAyKSAqLwotICAgICAgICAgICAgcmMgPSAxOwotICAgICAgICAgICAgZ290byB4 ZG9teWRpcjsKLSAgICAgICAgfQotICAgIH0KLSAgICBuZGlycyA9IG5maWxlcyA9IDBMOwkJLyog SW5pdGlhbGl6ZSBjb3VudGVycyAqLwotICAgIG5ieXRlcyA9IChDS19PRkZfVCkwOwotCi0gICAg aWYgKGRpcl9leGMpICAgICAgICAgICAgICAgICAgICAgICAgLyogSGF2ZSBleGNlcHRpb24gbGlz dD8gKi8KLSAgICAgIG1ha2VsaXN0KGRpcl9leGMseGxpc3QsMTYpOwkvKiBZZXMsIGNvbnZlcnQg dG8gYXJyYXkgKi8KLQotICAgIGRpcmFjdGl2ZSA9IDE7Ci0gICAgem5leHQobmFtZSk7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogR2V0IG5leHQgZmlsZSAqLwotICAgIHdoaWxlIChuYW1lWzBd KSB7ICAgICAgICAgICAgICAgICAgIC8qIExvb3AgZm9yIGVhY2ggZmlsZSAqLwotICAgICAgICBp ZiAoZnMpIGlmIChmaWxlc2VsZWN0KG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGRpcl9h ZnQsZGlyX2JlZixkaXJfbmFmLGRpcl9uYmYsCi0gICAgICAgICAgICAgICAgICAgICAgIG1pbnNp emUsbWF4c2l6ZSwhYmFja3VwLDE2LHhsaXN0KSA8IDEpIHsKLSAgICAgICAgICAgIHpuZXh0KG5h bWUpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgbGVuID0gemdl dGZzKG5hbWUpOyAgICAgICAgICAgICAvKiBHZXQgZmlsZSBsZW5ndGggKi8KLSAgICAgICAgZGVi dWcoRjExMSwiZG9teWRpciB6Z2V0ZnMiLG5hbWUsbGVuKTsKLSNpZmRlZiBWTVNPUlVOSVgKLSAg ICAgICAgaXRzYWRpciA9IHpnZnNfZGlyOyAgICAgICAgICAgICAvKiBTZWUgaWYgaXQncyBhIGRp cmVjdG9yeSAqLwotI2Vsc2UKLSAgICAgICAgaXRzYWRpciA9IChsZW4gPT0gKENLX09GRl9UKS0y IHx8IGlzZGlyKG5hbWUpKTsKLSNlbmRpZiAvKiBWTVNPVU5JWCAqLwotICAgICAgICBkZWJ1ZyhG MTExLCJkb215ZGlyIGl0c2FkaXIiLG5hbWUsaXRzYWRpcik7Ci0gICAgICAgIGlmICgoaXRzYWRp ciAmJiAoc2hvdyA9PSAxKSkgfHwgKCFpdHNhZGlyICYmIChzaG93ID09IDIpKSkgewotICAgICAg ICAgICAgem5leHQobmFtZSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAg ICAgICAvKiBHZXQgaGVyZSB3aGVuIHdlIGtub3cgd2UgaGF2ZSBzZWxlY3RlZCB0aGlzIGZpbGUg Ki8KLQotICAgICAgICBubWF0Y2hlcysrOwotICAgICAgICBpZiAoaXRzYWRpcikgeyAgICAgICAg ICAgICAgICAgIC8qIEFjY3VtdWxhdGUgdG90YWxzIGZvciBzdW1tYXJ5ICovCi0gICAgICAgICAg ICBuZGlycysrOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbmZpbGVzKys7Ci0gICAg ICAgICAgICBuYnl0ZXMgKz0gbGVuOwotICAgICAgICB9Ci0JZHN0ciA9IE5VTEw7Ci0JaWYgKGN4 ID09IFhYVE9VQykgewkJLyogQ29tbWFuZCB3YXMgVE9VQ0gsIG5vdCBESVJFQ1RPUlkgKi8KLQkg ICAgY2hhciAqIGZpbGVuYW1lOwotCSAgICBzdHJ1Y3QgemF0dHIgeHg7Ci0JICAgIGRzdHIgPSBj a2N2dGRhdGUoIiIsMCk7Ci0JICAgIHh4LmRhdGUudmFsID0gZHN0cjsKLQkgICAgeHguZGF0ZS5s ZW4gPSAoaW50KXN0cmxlbih4eC5kYXRlLnZhbCk7Ci0JICAgIHh4Lmxwcm90ZWN0LmxlbiA9IDA7 Ci0JICAgIGRlYnVnKEYxMTAsImRvbXlkaXIgdG91Y2giLG5hbWUsMCk7Ci0JICAgIGRlYnVnKEYx MTAsImRvbXlkaXIgdG91Y2giLGRzdHIsMCk7Ci0JICAgIGlmICh6c3RpbWUobmFtZSwmeHgsMCkg PCAwKSB7Ci0JCXByaW50ZigiP1RPVUNIICVzOiAlc1xuIixuYW1lLGNrX2VycnN0cigpKTsKLQkJ cmMgPSAtOTsKLQkJZ290byB4ZG9teWRpcjsKLQkgICAgfQotCSAgICBpZiAoIXZlcmJvc2UpIHsJ CS8qIE5vIGxpc3Rpbmcgc28gc2tpcCBkZXRhaWwgKi8KLQkJem5leHQobmFtZSk7Ci0JCWNvbnRp bnVlOwotCSAgICB9Ci0JfQotICAgICAgICBpZiAoc3VtbWFyeSkgewkJCS8qIFN1bW1hcnkgb25s eSwgbm8gZGV0YWlsICovCi0gICAgICAgICAgICB6bmV4dChuYW1lKTsKLSAgICAgICAgICAgIGNv bnRpbnVlOwotICAgICAgICB9Ci0KLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgaWYgKGFycmF5KSB7 Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJkb215ZGlyIGFycmF5IixuYW1lLG5maWxlcyk7Ci0g ICAgICAgICAgICBpZiAoYXApCi0gICAgICAgICAgICAgIG1ha2VzdHIoJihhcFtubWF0Y2hlc10p LG5hbWUpOwotICAgICAgICAgICAgem5leHQobmFtZSk7Ci0gICAgICAgICAgICBjb250aW51ZTsK LSAgICAgICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0KLS8qCi0gIE5PVEU6IFRoZSBzcHJpbnRm J3MgaW4gdGhpcyByb3V0aW5lIHNob3VsZCBiZSBzYWZlLiAgVGhleSBpbnZvbHZlCi0gIHBlcm1p c3Npb24gc3RyaW5ncywgZGF0ZS90aW1lIHN0cmluZ3MsIGFuZCBmaWxlbmFtZXMsIGFsbCBvZiB3 aGljaCBoYXZlCi0gIGtub3duIG1heGltdW0gbGVuZ3Roczsgbm9uZSBvZiB0aGVzZSBpdGVtcyBp cyBpbnB1dCBmcm9tIHVzZXJzLiAgVGhlCi0gIGRlc3RpbmF0aW9uIGJ1ZmZlcnMgYXJlIGxhcmdl IGVub3VnaCB0byBob2xkIG1heGltdW0gc2l6ZXMgZm9yIGFueSBhbmQKLSAgYWxsIGl0ZW1zLiAg Tk9URSAyOiBJZiBjb21tYW5kIHdhcyBUT1VDSCwgZHN0ciB3YXMgYWxyZWFkeSBzZXQganVzdAot ICBhYm92ZS4KLSovCi0JaWYgKCFkc3RyKSB7CQkJLyogR2V0IGZpbGUncyBtb2RpZmljYXRpb24g ZGF0ZS90aW1lICovCi0JICAgIGRzdHIgPSB6ZmNkYXQobmFtZSk7Ci0JICAgIGRlYnVnKEYxMTEs ImRvbXlkaXIgemNmZGF0Iixkc3RyLDApOwotCX0KLSAgICAgICAgaWYgKCFkc3RyKSBkc3RyID0g IiI7Ci0gICAgICAgIHsKLS8qCi0gIE5vdGUgdGhhdCB6ZmNkYXQoKSBhbHdheXMgcmV0dXJucyAi IiBvciB5eXl5bW1kZCBoaDptbTpzcywgc28gYW55IHdhcm5pbmdzCi0gIGFib3V0IHBvc3NpYmxl IG91dC1vZi1ib3VuZHMgZHN0cltdIGFycmF5IHJlZnMgZG8gbm90IGFwcGx5LiAgVGhpcyBibG9j ayBvZgotICBjb2RlIGlzIHRvIHN0aWZsZSB0aGUgd2FybmluZ3MgYW5kIGFsc28gYWxsb3dzIGZv ciBhbnkgb3V0LW9mLXNwZWMKLSAgemZjZGF0KCkgaW1wbGVtZW50YXRpb25zLgotKi8KLSAgICAg ICAgICAgIGludCB4OwotICAgICAgICAgICAgY2hhciAqIHAgPSAiMDAwMDAwMDAgMDA6MDA6MDAi OwotICAgICAgICAgICAgeCA9IGNrc3RybmNweSh4YnVmLGRzdHIsMzIpOwotICAgICAgICAgICAg aWYgKHggPCAxNykgY2tzdHJuY3B5KCZ4YnVmW3hdLHAreCwzMi14KTsKLSAgICAgICAgICAgIGRz dHIgPSB4YnVmOwotICAgICAgICB9Ci0gICAgICAgIGlmIChlbmdkYXRlKSB7ICAgICAgICAgICAg ICAgICAgLyogRW5nbGlzaCBkYXRlIHJlcXVlc3RlZD8gKi8KLSAgICAgICAgICAgIHNob3J0IG1v bnRoLCBkYXksIHllYXIsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kczsKLSAgICAgICAgICAgIG1vbnRo ID0gKGRzdHJbNF0tNDgpKjEwICsgKGRzdHJbNV0tNDgpOwotICAgICAgICAgICAgbXN0ciAgPSAo bW9udGggPiAwICYmIG1vbnRoIDw9IDEyKSA/IG1vbnRoc1ttb250aC0xXSA6ICJ4eHgiOwotICAg ICAgICAgICAgZGF5ICAgPSAoZHN0cls2XS00OCkqMTAgKyAoZHN0cls3XS00OCk7Ci0gICAgICAg ICAgICB5ZWFyICA9ICgoKGRzdHJbMF0tNDgpKjEwICsKLSAgICAgICAgICAgICAgICAgICAgICAo ZHN0clsxXS00OCkpKjEwICsKLSAgICAgICAgICAgICAgICAgICAgICAoZHN0clsyXS00OCkpKjEw ICsKLSAgICAgICAgICAgICAgICAgICAgICAoZHN0clszXS00OCk7Ci0gICAgICAgICAgICBob3Vy ICA9IChkc3RyWzldLTQ4KSoxMCArIChkc3RyWzEwXS00OCk7Ci0gICAgICAgICAgICBtaW51dGUg PSAoZHN0clsxMl0tNDgpKjEwICsgKGRzdHJbMTNdLTQ4KTsKLSAgICAgICAgICAgIHNlY29uZHMg PSAoZHN0clsxNV0tNDgpKjEwICsgKGRzdHJbMTZdLTQ4KTsKLSAgICAgICAgICAgIHNwcmludGYo ZGJ1ZiwgICAgICAgICAgICAgICAvKiBTQUZFICovCi0gICAgICAgICAgICAgICAgICAgICIlMmQt JXMtJTRkICUwMmQ6JTAyZDolMDJkIiwKLSAgICAgICAgICAgICAgICAgICAgZGF5LG1zdHIseWVh cixob3VyLG1pbnV0ZSxzZWNvbmRzCi0gICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAg ICBkc3RyID0gZGJ1ZjsKLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAv KiBJU08gZGF0ZSAqLwotICAgICAgICAgICAgZGJ1ZlswXSA9IGRzdHJbMF07ICAgICAgICAgIC8q IHl5eXkgKi8KLSAgICAgICAgICAgIGRidWZbMV0gPSBkc3RyWzFdOwotICAgICAgICAgICAgZGJ1 ZlsyXSA9IGRzdHJbMl07Ci0gICAgICAgICAgICBkYnVmWzNdID0gZHN0clszXTsKLSAgICAgICAg ICAgIGRidWZbNF0gPSAnLSc7Ci0gICAgICAgICAgICBkYnVmWzVdID0gZHN0cls0XTsgICAgICAg ICAgLyogbW0gKG51bWVyaWMpICovCi0gICAgICAgICAgICBkYnVmWzZdID0gZHN0cls1XTsKLSAg ICAgICAgICAgIGRidWZbN10gPSAnLSc7Ci0gICAgICAgICAgICBkYnVmWzhdID0gZHN0cls2XTsg ICAgICAgICAgLyogZGQgKi8KLSAgICAgICAgICAgIGRidWZbOV0gPSBkc3RyWzddOwotICAgICAg ICAgICAgc3RyY3B5KGRidWYrMTAsZHN0cis4KTsgICAgIC8qIGhoOm1tOnNzICovCi0gICAgICAg ICAgICBkc3RyID0gZGJ1ZjsKLSAgICAgICAgfQotICAgICAgICBkbGVuID0gc3RybGVuKGRidWYp OyAgICAgICAgICAgIC8qIExlbmd0aCBvZiBkYXRlICovCi0gICAgICAgIG5hbWVbQ0tNQVhQQVRI XSA9IE5VTDsKLSNpZmRlZiBDS19QRVJNUwotI2lmZGVmIFZNU09SVU5JWAotICAgICAgICBwID0g emlwZXJtKG5hbWUpOyAgICAgICAgICAgICAgIC8qIEdldCBwZXJtaXNzaW9ucyAqLwotICAgICAg ICBkZWJ1ZyhGMTEwLCJ6aXBlcm0gcGVybXMiLHAsMCk7Ci0jZWxzZQotICAgICAgICBwID0gemdw ZXJtKG5hbWUpOwotICAgICAgICBkZWJ1ZyhGMTEwLCJ6Z3Blcm0gcGVybXMiLHAsMCk7Ci0jZW5k aWYgLyogVk1TT1JVTklYICovCi0jZWxzZQotICAgICAgICBwID0gTlVMTDsKLSAgICAgICAgZGVi dWcoRjExMCwiTlVMTCBwZXJtcyIscCwwKTsKLSNlbmRpZiAvKiBDS19QRVJNUyAqLwotCi0jaWZk ZWYgVk1TCi0gICAgICAgIC8qIEdldCByZWxhdGl2ZSBuYW1lIHRvIHNhdmUgc3BhY2UgLS0gVk1T IGZ1bGxuYW1lcyBhcmUgbG9uZy4uLiAqLwotICAgICAgICBja3N0cm5jcHkobmFtZSx6cmVsbmFt ZShuYW1lLGNkcCksQ0tNQVhQQVRIKTsKLSNlbmRpZiAvKiBWTVMgKi8KLQotICAgICAgICBpZiAo aXRzYWRpciAmJiBsZW4gPCAoQ0tfT0ZGX1QpMCkgeyAvKiBEaXJlY3RvcnkgKi8KLSNpZmRlZiBW TVMKLSAgICAgICAgICAgIHNwcmludGYobGluZWJ1ZiwiJS0yMnMlLTEwcyAgJXMgICVzIixwLCI8 RElSPiIsZHN0cixuYW1lKTsKLSNlbHNlCi0gICAgICAgICAgICBpZiAocCkKLSAgICAgICAgICAg ICAgc3ByaW50ZihsaW5lYnVmLCIlMTBzJS0xMHMgICVzICAlcyIscCwiPERJUj4iLGRzdHIsbmFt ZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHNwcmludGYobGluZWJ1ZiwiJS0x MHMgICVzICAlcyIsICI8RElSPiIsIGRzdHIsIG5hbWUpOwotI2VuZGlmIC8qIFZNUyAqLwotICAg ICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlZ3VsYXIgZmlsZSAqLwot I2lmZGVmIFZNUwotICAgICAgICAgICAgc3ByaW50ZihsaW5lYnVmLCIlLTIycyUxMHMgICVzICAl cyIsIHAsIGNrZnN0b2EobGVuKSwgZHN0ciwgbmFtZSk7Ci0jZWxzZQotICAgICAgICAgICAgaWYg KHApCi0gICAgICAgICAgICAgIHNwcmludGYobGluZWJ1ZiwiJTEwcyUxMHMgICVzICAlcyIsIHAs IGNrZnN0b2EobGVuKSwgZHN0ciwgbmFtZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg ICAgIHNwcmludGYobGluZWJ1ZiwiJTEwcyAgJXMgICVzIiwgY2tmc3RvYShsZW4pLCBkc3RyLCBu YW1lKTsKLSNlbmRpZiAvKiBWTVMgKi8KLSAgICAgICAgfQotI2lmZGVmIFVOSVgKLSNpZmRlZiBD S1NZTUxJTksKLSAgICAgICAgaWYgKHpnZnNfbGluaykgewkJLyogSWYgaXQncyBhIHN5bWxpbmsg Ki8KLQkgICAgaWYgKGRvbnRzaG93bGlua3MpIHsJLyogSWYgL05PTElOS1MgZG9uJ3Qgc2hvdyBp dCAqLwotCQl6bmV4dChuYW1lKTsKLQkJY29udGludWU7Ci0JICAgIH0KLQl9Ci0gICAgICAgIGlm ICh6Z2ZzX2xpbmsgJiYgIWRvbnRmb2xsb3dsaW5rcykgeyAvKiBTeW1saW5rIGFuZCBmb2xsb3dp bmcgbGlua3MgKi8KLSAgICAgICAgICAgIGludCBuLCBtOwkJCS8qIFNob3cgd2hhdCB0aGUgbGlu ayBwb2ludHMgdG8gKi8KLSAgICAgICAgICAgIGV4dGVybiBjaGFyIGxpbmtuYW1lW107Ci0gICAg ICAgICAgICBuID0gc3RybGVuKGxpbmVidWYpOwotICAgICAgICAgICAgbSA9IHN0cmxlbihsaW5r bmFtZSkgKyBuOwotICAgICAgICAgICAgaWYgKG0gPCBDS01BWFBBVEggKyA1OCkKLSAgICAgICAg ICAgICAgc3RyY3B5KGxpbmVidWYrbiwgIiAtPiAiKTsgLyogc2FmZSAoY2hlY2tlZCkgKi8KLSAg ICAgICAgICAgIGlmIChtICsgNCA8IENLTUFYUEFUSCAtIDU4KQotICAgICAgICAgICAgICBzdHJj cHkobGluZWJ1ZituKzQsIGxpbmtuYW1lKTsgLyogc2FmZSAoY2hlY2tlZCkgKi8KLSAgICAgICAg fSBlbHNlCi0jZW5kaWYgLyogQ0tTWU1MSU5LICovCi0jZW5kaWYgLyogVU5JWCAqLwotICAgICAg ICBpZiAoeGZlcm1vZCkgeyAgICAgICAgICAgICAgICAgIC8qIFNob3cgdHJhbnNmZXIgbW9kZSAq LwotICAgICAgICAgICAgaW50IGksIHgsIHk7Ci0gICAgICAgICAgICBjaGFyICogcyA9ICIiOwot ICAgICAgICAgICAgeSA9IC0xOwotICAgICAgICAgICAgeCA9IHNjYW5maWxlKG5hbWUsJnksbnNj YW5maWxlKTsKLSAgICAgICAgICAgIHN3aXRjaCAoeCkgewotICAgICAgICAgICAgICBjYXNlIEZU X1RFWFQ6IHMgPSAiIChUKSI7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEZUXzdCSVQ6IHMg PSAiIChUKSg3QklUKSI7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEZUXzhCSVQ6IHMgPSAi IChUKSg4QklUKSI7IGJyZWFrOwotI2lmZGVmIFVOSUNPREUKLSAgICAgICAgICAgICAgY2FzZSBG VF9VVEY4OiBzID0gIiAoVCkoVVRGOCkiOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBGVF9V Q1MyOgotICAgICAgICAgICAgICAgIHMgPSB5ID8gIiAoVCkoVUNTMkxFKSIgOiAiIChUKShVQ1My QkUpIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBVTklDT0RFICovCi0gICAg ICAgICAgICAgIGNhc2UgRlRfQklOOiAgcyA9ICIgKEIpIjsgYnJlYWs7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgICAgICBpZiAoISpzKSB7Ci0gICAgICAgICAgICAgICAgcyA9IGJpbmFyeSA/ICIg KEIpIiA6ICIgKFQpIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgqcykgewotICAg ICAgICAgICAgICAgIGludCBuOwotICAgICAgICAgICAgICAgIG4gPSBzdHJsZW4obGluZWJ1Zik7 Ci0gICAgICAgICAgICAgICAgaWYgKG4gKyA0IDwgQ0tNQVhQQVRIIC0gNTgpCi0gICAgICAgICAg ICAgICAgICBzdHJjcHkobGluZWJ1ZituLCBzKTsgLyogc2FmZSAoY2hlY2tlZCkgKi8KLSAgICAg ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAobXNnICYmIGRpcm1zZykgewotICAgICAg ICAgICAgaW50IG47Ci0gICAgICAgICAgICBuID0gc3RybGVuKGxpbmVidWYpOwotICAgICAgICAg ICAgaWYgKG4gKyBkaXJtc2dsZW4gKyAyIDwgQ0tNQVhQQVRIKQotICAgICAgICAgICAgICBzcHJp bnRmKChjaGFyICopKGxpbmVidWYrbiksIiAlcyIsIGRpcm1zZyk7IC8qIFNBRkUgKi8KLSAgICAg ICAgfQotICAgICAgICBpZiAoeHNvcnQpIHsJCQkvKiBTb3J0aW5nIC0gc2F2ZSBsaW5lICovCi0g ICAgICAgICAgICBpID0gc3RybGVuKGxpbmVidWYpOwotICAgICAgICAgICAgaWYgKChuZGlybGlz dCA+PSBueCkgfHwKLSAgICAgICAgICAgICAgICAhKGRpcmxpc3RbbmRpcmxpc3RdID0gKGNoYXIg KiltYWxsb2MoaSsxKSkpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9NZW1vcnkgYWxsb2Nh dGlvbiBlcnJvciAtIHRyeSAvTk9TT1JUXG4iKTsKLSAgICAgICAgICAgICAgICByYyA9IC05Owot ICAgICAgICAgICAgICAgIGdvdG8geGRvbXlkaXI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg ICBzdHJjcHkoZGlybGlzdFtuZGlybGlzdF0sbGluZWJ1Zik7IC8qIHNhZmUgKi8KLSAgICAgICAg ICAgIG5kaXJsaXN0Kys7Ci0gICAgICAgIH0KLSAgICAgICAgem5leHQobmFtZSk7ICAgICAgICAg ICAgICAgICAgICAvKiBQZWVrIGFoZWFkIHRvIG5leHQgZmlsZSAqLwotICAgICAgICBpZiAoIXhz b3J0KSB7Ci0JICAgIGlmICghdG91Y2ggfHwgKHRvdWNoICYmIHZlcmJvc2UpKQotCSAgICAgIGZw cmludGYob2ZwLCIlc1xuIixsaW5lYnVmKTsKLSAgICAgICAgICAgIGlmIChwYWdlICYmIChuYW1l WzBdIHx8IGhlYWRpbmcpKSB7IC8qIElmIC9QQUdFICovCi0gICAgICAgICAgICAgICAgaWYgKGNt ZF9jb2xzID4gMCkgewotICAgICAgICAgICAgICAgICAgICBpbnQgeCA9IHN0cmxlbihsaW5lYnVm KTsKLSAgICAgICAgICAgICAgICAgICAgaW50IHk7Ci0gICAgICAgICAgICAgICAgICAgIHkgPSAo eCAlIGNtZF9jb2xzKSA/IDEgOiAwOwotICAgICAgICAgICAgICAgICAgICBuICs9IHggLyBjbWRf Y29scyArIHk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg bisrOwotICAgICAgICAgICAgICAgIH0KLSNpZmRlZiBDS19UVEdXU0laCi0gICAgICAgICAgICAg ICAgaWYgKG4gPiAoY21kX3Jvd3MgLSAzKSkgeyAvKiBEbyBtb3JlLXByb21wdGluZyAqLwotICAg ICAgICAgICAgICAgICAgICBpZiAoIWFza21vcmUoKSkgewotICAgICAgICAgICAgICAgICAgICAg ICAgcmMgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byB4ZG9teWRpcjsKLSAgICAg ICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgbiA9IDA7Ci0gICAg ICAgICAgICAgICAgfQotI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KLSAgICAgICAgICAgIH0KLSAg ICAgICAgfQotICAgIH0KLSNpZm5kZWYgTk9TUEwKLSAgICBpZiAoYXJyYXkpIHsKLSAgICAgICAg aWYgKGFwKQotICAgICAgICAgIG1ha2VzdHIoJihhcFswXSksY2tpdG9hKG5tYXRjaGVzKSk7Ci0g ICAgICAgIHJjID0gMTsKLSAgICAgICAgZ290byB4ZG9teWRpcjsKLSAgICB9Ci0jZW5kaWYgLyog Tk9TUEwgKi8KLSAgICBpZiAoeHNvcnQpIHsKLQlpbnQgbmFtZXBvczsKLSAgICAgICAgc2tleSA9 IDA7Ci0jaWZkZWYgVk1TCi0JbmFtZXBvcyA9IGRsZW4gKyAzNTsKLSAgICAgICAgc3dpdGNoIChz b3J0YnkpIHsKLSAgICAgICAgICBjYXNlIERJUlNfTk06IHNrZXkgPSBuYW1lcG9zOyBicmVhazsK LSAgICAgICAgICBjYXNlIERJUlNfRFQ6IHNrZXkgPSAzMzsgYnJlYWs7Ci0gICAgICAgICAgY2Fz ZSBESVJTX1NaOiBza2V5ID0gMjE7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIGlmIChwKSB7 Ci0JICAgIG5hbWVwb3MgPSBkbGVuICsgMjQ7Ci0gICAgICAgICAgICBzd2l0Y2ggKHNvcnRieSkg ewotICAgICAgICAgICAgICBjYXNlIERJUlNfTk06IHNrZXkgPSBuYW1lcG9zOyBicmVhazsKLSAg ICAgICAgICAgICAgY2FzZSBESVJTX0RUOiBza2V5ID0gMjI7IGJyZWFrOwotICAgICAgICAgICAg ICBjYXNlIERJUlNfU1o6IHNrZXkgPSAxMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNl IHsKLQkgICAgbmFtZXBvcyA9IGRsZW4gKyAxNDsKLSAgICAgICAgICAgIHN3aXRjaCAoc29ydGJ5 KSB7Ci0gICAgICAgICAgICAgIGNhc2UgRElSU19OTTogc2tleSA9IG5hbWVwb3M7IGJyZWFrOwot ICAgICAgICAgICAgICBjYXNlIERJUlNfRFQ6IHNrZXkgPSAxMjsgYnJlYWs7Ci0gICAgICAgICAg ICAgIGNhc2UgRElSU19TWjogc2tleSA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNl bmRpZiAvKiBWTVMgKi8KLSAgICAgICAgc2hfc29ydChkaXJsaXN0LE5VTEwsbmRpcmxpc3Qsc2tl eSxyZXZlcnNlLGZpbGVjYXNlKTsKLQlpZiAoZGlyX3RvcCA+IDAgJiYgZGlyX3RvcCA8IG5kaXJs aXN0KQotCSAgbmRpcmxpc3QgPSBkaXJfdG9wOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmRp cmxpc3Q7IGkrKykgewotICAgICAgICAgICAgZnByaW50ZihvZnAsIiVzXG4iLGRpcmxpc3RbaV0p OwotICAgICAgICAgICAgaWYgKHBhZ2UgJiYgKGkgPCBuZGlybGlzdCAtMSB8fCBoZWFkaW5nKSkg eyAvKiBJZiAvUEFHRSAqLwotICAgICAgICAgICAgICAgIGlmIChjbWRfY29scyA+IDApIHsKLSAg ICAgICAgICAgICAgICAgICAgaW50IHggPSBzdHJsZW4oZGlybGlzdFtpXSk7Ci0gICAgICAgICAg ICAgICAgICAgIGludCB5OwotICAgICAgICAgICAgICAgICAgICB5ID0gKHggJSBjbWRfY29scykg PyAxIDogMDsKLSAgICAgICAgICAgICAgICAgICAgbiArPSAoKGludClzdHJsZW4oZGlybGlzdFtp XSkgLyBjbWRfY29scykgKyB5OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICAgICAgICAgIG4rKzsKLSAgICAgICAgICAgICAgICB9Ci0jaWZkZWYgQ0tfVFRHV1NJWgotICAg ICAgICAgICAgICAgIGlmIChuID4gKGNtZF9yb3dzIC0gMykpIHsgLyogRG8gbW9yZS1wcm9tcHRp bmcgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFhc2ttb3JlKCkpIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgIHJjID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8geGRvbXlk aXI7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgIG4g PSAwOwotICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19UVEdXU0laICovCi0gICAgICAg ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoaGVhZGluZyB8fCBzdW1tYXJ5KSB7 Ci0jaWZkZWYgQ0tGTE9BVAotICAgICAgICBDS0ZMT0FUIGdtOwotI2VuZGlmIC8qIENLRkxPQVQg Ki8KLSAgICAgICAgZnByaW50ZihvZnAsIlxuJWxkIGRpcmVjdG9yJXMsICVsZCBmaWxlJXMsICVz IGJ5dGUlcyIsCi0gICAgICAgICAgICAgICBuZGlycywKLSAgICAgICAgICAgICAgIChuZGlycyA9 PSAxKSA/ICJ5IiA6ICJpZXMiLAotICAgICAgICAgICAgICAgbmZpbGVzLAotICAgICAgICAgICAg ICAgKG5maWxlcyA9PSAxKSA/ICIiIDogInMiLAotCSAgICAgICBja2ZzdG9hKG5ieXRlcyksCi0g ICAgICAgICAgICAgICAobmJ5dGVzID09IDEpID8gIiIgOiAicyIKLSAgICAgICAgICAgICAgICk7 Ci0jaWZkZWYgQ0tGTE9BVAotICAgICAgICBnbSA9ICgoQ0tGTE9BVCkgbmJ5dGVzICkgLyAxMDAw MDAwLjA7Ci0gICAgICAgIGlmIChnbSA+IDEwMDAuMCkKLSAgICAgICAgICBmcHJpbnRmKG9mcCwi ICglMC4yZkdCKSIsKGdtIC8gMTAwMC4wKSk7Ci0gICAgICAgIGVsc2UgaWYgKGdtID49IDAuMDEp Ci0gICAgICAgICAgZnByaW50ZihvZnAsIiAoJTAuMmZNQikiLGdtKTsKLSNlbmRpZiAvKiBDS0ZM T0FEICovCi0gICAgICAgIGZwcmludGYob2ZwLCJcblxuIik7Ci0gICAgfSBlbHNlIGlmIChkaXJf Y291ICYmICFjdikgewotCWZwcmludGYob2ZwLCJcbiBGaWxlczogJWxkXG5cbiIsbmZpbGVzKTsK LSAgICB9Ci0gIHhkb215ZGlyOgotI2lmbmRlZiBOT1NQTAotICAgIGlmIChkaXJfY291ICYmIGN2 KSB7ICAgICAgICAgICAgICAgIC8qIC9DT1VOVDp2YXIgKi8KLSAgICAgICAgYWRkbWFjKGN2LGNr aXRvYShuZmlsZXMpKTsJLyogc2V0IHRoZSB2YXJpYWJsZSAqLwotICAgICAgICBtYWtlc3RyKCZj dixOVUxMKTsgICAgICAgICAgICAgIC8qIGZyZWUgdGhpcyAqLwotICAgIH0KLSAgICBpZiAoYXAp IHsJCQkJLyogSWYgd2UgaGF2ZSBhIHJlc3VsdCBhcnJheSAqLwotCWlmIChhX2RpbVthcnJheWlu ZGV4XSA+IG5tYXRjaGVzKSAvKiBidXQgaXQgd2FzIG5vdCBmaWxsZWQgKi8KLQkgIGFfZGltW2Fy cmF5aW5kZXhdID0gbm1hdGNoZXM7ICAgLyogYWRqdXN0IGRpbWVuc2lvbiAqLwotICAgIH0KLSNl bmRpZgkvKiBOT1NQTCAqLwotICAgIGlmIChnX21hdGNoZG90ID4gLTEpIHsKLSAgICAgICAgbWF0 Y2hkb3QgPSBnX21hdGNoZG90OyAgICAgICAgICAvKiBSZXN0b3JlIHRoZXNlLi4uICovCi0gICAg ICAgIGdfbWF0Y2hkb3QgPSAtMTsKLSAgICB9Ci0gICAgZnJlZWRpcmxpc3QoKTsKLSAgICBpZiAo b2ZwICE9IHN0ZG91dCkgeyAgICAgICAgICAgICAgICAvKiBDbG9zZSBhbnkgb3V0cHV0IGZpbGUg Ki8KLSAgICAgICAgaWYgKG9mcCkgZmNsb3NlKG9mcCk7Ci0gICAgICAgIG9mcCA9IHN0ZG91dDsK LSAgICB9Ci0gICAgaWYgKHJjID4gMCkKLSAgICAgIHN1Y2Nlc3MgPSAxOwotICAgIHJldHVybihy Yyk7Ci19Ci0KLWludAotZG9kaXIoY3gpIGludCBjeDsgeyAgICAgICAgICAgICAgICAgICAgIC8q IERvIHRoZSBESVJFQ1RPUlkgY29tbWFuZCAqLwotICAgIGNoYXIgKmRjICwgKm1zZzsKLQotI2lm ZGVmIE9TMgotICAgIHJldHVybihkb215ZGlyKGN4KSk7Ci0jZWxzZSAvKiBPUzIgKi8KLSAgICBp ZiAobm9wdXNoCi0jaWZkZWYgRE9NWURJUiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQnVp bGRzIHRoYXQgZG9teWRpcigpIGJ5IGRlZmF1bHQgKi8KLSAgICAgICAgfHwgKGN4ID09IFhYRElS ICB8fCBjeCA9PSBYWExESVIgfHwgY3ggPT0gWFhXRElSIHx8Ci0JICAgIGN4ID09IFhYSERJUiB8 fCBjeCA9PSBYWFRPVUMpCi0jZW5kaWYgLyogRE9NWURJUiAqLwotICAgICAgICApCi0gICAgICBy ZXR1cm4oZG9teWRpcihjeCkpOwkJLyogQnVpbHQtaW4gZGlyZWN0b3J5IGNvbW1hbmQgKi8KLQot ICAgIC8qIFVzZSB0aGUgc3lzdGVtJ3MgZGlyZWN0b3J5IGNvbW1hbmQuICovCi0KLSAgICBtc2cg PSAoY3ggPT0gWFhMUykgPwotICAgICAgIkFyZ3VtZW50cyBmb3IgbHMiIDoKLSAgICAgICAgIkRp cmVjdG9yeSBhbmQvb3IgZmlsZSBzcGVjaWZpY2F0aW9uIjsKLSAgICBpZiAoKHggPSBjbXR4dCht c2csIiIsJnMseHhzdHJpbmcpKSA8IDApCi0gICAgICByZXR1cm4oeCk7Ci0KLSAgICBja3N0cm5j cHkodG1wYnVmLHMsVE1QQlVGU0laKTsgICAgICAvKiBDb3B5IHRoZSBmaWxlc3BlYyAqLwotICAg IHMgPSB0bXBidWY7Ci0KLSAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLQot ICAgIGxwID0gbGluZTsKLSAgICBpZiAoIShkYyA9IGdldGVudigiQ0tfRElSIikpKQotICAgICAg ZGMgPSBESVJDTUQ7Ci0gICAgY2ttYWttc2cobHAsTElOQlVGU0laLGRjLCIgIixzLE5VTEwpOwot ICAgIGRlYnVnKEYxMTAsIkRJUiIsbGluZSwwKTsKLSNpZmRlZiBWTVMKLSAgICBjb25yZXMoKTsK LSNlbmRpZiAvKiBWTVMgKi8KLSAgICB4ID0genNoY21kKGxpbmUpOwotI2lmZGVmIFZNUwotICAg IGNvbmNiKChjaGFyKWVzY2FwZSk7Ci0jZW5kaWYgLyogVk1TICovCi0gICAgcmV0dXJuKHN1Y2Nl c3MgPSAoeCA8IDEpID8gMCA6IDEpOwotI2VuZGlmIC8qIE9TMiAqLwotfQotCi0jaWZuZGVmIE5P U0VSVkVSCi0jaWZuZGVmIE5PRlJJTExTCi0vKiBEbyB0aGUgRU5BQkxFIGFuZCBESVNBQkxFIGNv bW1hbmRzICovCi0KLWludAotZG9lbmFibGUoeSx4KSBpbnQgeSwgeDsgewotI2lmZGVmIENLX0xP R0lOCi0gICAgaWYgKGlzZ3Vlc3QpICAgICAgICAgICAgICAgICAgICAgICAgLyogSUtTRDogRG9u J3QgbGV0IGd1ZXN0cyAqLwotICAgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAgICAgICAg IC8qIGVuYWJsZSBhbnl0aGluZyB0aGF0J3MgZGlzYWJsZWQgKi8KLSNlbmRpZiAvKiBDS19MT0dJ TiAqLwotICAgIHN3aXRjaCAoeCkgewotICAgICAgY2FzZSBFTl9BTEw6Ci0gICAgICAgIGVuX2N3 ZCA9IGVuX2NweSA9IGVuX2RlbCA9IGVuX2RpciA9IGVuX2ZpbiA9IGVuX2dldCA9IHk7Ci0gICAg ICAgIGVuX3JlbiA9IGVuX3NlbiA9IGVuX3NldCA9IGVuX3NwYSA9IGVuX3R5cCA9IGVuX3JldCA9 IHk7Ci0gICAgICAgIGlmICghaW5zZXJ2ZXIpCi0gICAgICAgICAgZW5fd2hvID0gZW5fbWFpID0g ZW5fcHJpID0geTsKLSAgICAgICAgZW5fbWtkID0gZW5fcm1kID0geTsKLSAgICAgICAgZW5feGl0 ID0geTsKLSNpZm5kZWYgZGF0YWdlbmVyYWwKLSAgICAgICAgZW5fYnllID0geTsKLSNlbmRpZiAv KiBkYXRhZ2VuZXJhbCAqLwotI2lmbmRlZiBOT1BVU0gKLSAgICAgICAgaWYgKCFub3B1c2ggJiYg IWluc2VydmVyKQotICAgICAgICAgIGVuX2hvcyA9IHk7Ci0jZW5kaWYgLyogTk9QVVNIICovCi0j aWZuZGVmIE5PU1BMCi0gICAgICAgIGVuX2FzZyA9IGVuX3F1ZSA9IHk7Ci0jZW5kaWYgLyogTk9T UEwgKi8KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRU5fQllFOgotI2lmbmRlZiBkYXRh Z2VuZXJhbAotLyoKLSAgSW4gRGF0YSBHZW5lcmFsIEFPUy9WUyBLZXJtaXQgY2FuJ3QgbG9nIG91 dCBpdHMgc3VwZXJpb3IgcHJvY2Vzcy4KLSovCi0gICAgICAgIGVuX2J5ZSA9IHk7Ci0jZW5kaWYg LyogZGF0YWdlbmVyYWwgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVOX0NQWToKLSAg ICAgICAgZW5fY3B5ID0geTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVOX0NXRDoKLSAg ICAgICAgZW5fY3dkID0geTsKLSNpZmRlZiBJS1NECi0gICAgICAgIGlmIChpbnNlcnZlciAmJiB5 ID09IDApIHsKLSAgICAgICAgICAgIGZucnBhdGggPSBQQVRIX09GRjsKLSAgICAgICAgICAgIGZu c3BhdGggPSBQQVRIX09GRjsKLSAgICAgICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgICAg YnJlYWs7Ci0gICAgICBjYXNlIEVOX0RFTDogICAgICAgICAgICAgICAgICAgICAgLyogRGVsZXRp bmcgb2YgZmlsZXMgKi8KLSAgICAgICAgZW5fZGVsID0geTsKLSAgICAgICAgYnJlYWs7Ci0gICAg ICBjYXNlIEVOX0RJUjoKLSAgICAgICAgZW5fZGlyID0geTsKLSAgICAgICAgYnJlYWs7Ci0gICAg ICBjYXNlIEVOX0ZJTjoKLSAgICAgICAgZW5fZmluID0geTsKLSAgICAgICAgYnJlYWs7Ci0gICAg ICBjYXNlIEVOX0dFVDoKLSAgICAgICAgZW5fZ2V0ID0geTsKLSAgICAgICAgYnJlYWs7Ci0jaWZu ZGVmIE5PUFVTSAotICAgICAgY2FzZSBFTl9IT1M6Ci0gICAgICAgIGlmICghbm9wdXNoKQotICAg ICAgICAgZW5faG9zID0geTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogTk9QVVNIICovCi0g ICAgICBjYXNlIEVOX1JFTjoKLSAgICAgICAgZW5fcmVuID0geTsKLSAgICAgICAgYnJlYWs7Ci0g ICAgICBjYXNlIEVOX1NFTjoKLSAgICAgICAgZW5fc2VuID0geTsKLSAgICAgICAgYnJlYWs7Ci0g ICAgICBjYXNlIEVOX1NFVDoKLSAgICAgICAgZW5fc2V0ID0geTsKLSAgICAgICAgYnJlYWs7Ci0g ICAgICBjYXNlIEVOX1NQQToKLSAgICAgICAgZW5fc3BhID0geTsKLSAgICAgICAgYnJlYWs7Ci0g ICAgICBjYXNlIEVOX1RZUDoKLSAgICAgICAgZW5fdHlwID0geTsKLSAgICAgICAgYnJlYWs7Ci0g ICAgICBjYXNlIEVOX1dITzoKLSAgICAgICAgZW5fd2hvID0geTsKLSAgICAgICAgYnJlYWs7Ci0j aWZuZGVmIE5PU1BMCi0gICAgICBjYXNlIEVOX0FTRzoKLSAgICAgICAgZW5fYXNnID0geTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVOX1FVRToKLSAgICAgICAgZW5fcXVlID0geTsKLSAg ICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICAgIGNhc2UgRU5fUkVUOgotICAg ICAgICBlbl9kZWwgPSB5OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU5fTUFJOgotI2lm ZGVmIENLX0xPR0lOCi0gICAgICAgIGlmIChpc2d1ZXN0ICYmIHkpIHsKLSAgICAgICAgICAgIHBy aW50ZigiP1NvcnJ5LCBub3QgdmFsaWQgZm9yIGd1ZXN0c1xuIik7Ci0gICAgICAgICAgICByZXR1 cm4oLTkpOwotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSAgICAgICAgZW5fbWFp ID0geTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVOX1BSSToKLSNpZmRlZiBDS19MT0dJ TgotICAgICAgICBpZiAoaXNndWVzdCAmJiB5KSB7Ci0gICAgICAgICAgICBwcmludGYoIj9Tb3Jy eSwgbm90IHZhbGlkIGZvciBndWVzdHNcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAg ICAgICAgfQotI2VuZGlmIC8qIENLX0xPR0lOICovCi0gICAgICAgIGVuX3ByaSA9IHk7Ci0gICAg ICAgIGJyZWFrOwotICAgICAgY2FzZSBFTl9NS0Q6Ci0gICAgICAgIGVuX21rZCA9IHk7Ci0gICAg ICAgIGJyZWFrOwotICAgICAgY2FzZSBFTl9STUQ6Ci0gICAgICAgIGVuX3JtZCA9IHk7Ci0gICAg ICAgIGJyZWFrOwotICAgICAgY2FzZSBFTl9YSVQ6Ci0gICAgICAgIGVuX3hpdCA9IHk7Ci0gICAg ICAgIGJyZWFrOwotICAgICAgY2FzZSBFTl9FTkE6Ci0gICAgICAgIGlmICgoKHkgJiAxKSAmJiAh KGVuX2VuYSAmIDEpKSB8fAotICAgICAgICAgICAgKCh5ICYgMikgJiYgIShlbl9lbmEgJiAyKSkp IHsKLSAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBESVNBQkxFIEVOQUJMRSBjYW4gbm90IGJl IHVuZG9uZVxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgZW5fZW5hID0geTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g ICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4oLTIpOwotICAgIH0KLSAgICByZXR1cm4oMSk7 Ci19Ci0jZW5kaWYgLyogTk9GUklMTFMgKi8KLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotCi0jaWZu ZGVmIE5PRlJJTExTCi0KLXN0YXRpYyBpbnQgZGVsX2xpcyA9IDA7Ci1zdGF0aWMgaW50IGRlbF9k b3QgPSAwOwotc3RhdGljIGludCBkZWxfaGRnID0gMDsKLXN0YXRpYyBpbnQgZGVsX3BhZyA9IC0x Owotc3RhdGljIGludCBkZWxfYXNrID0gMDsKLQotI2lmbmRlZiBOT1NIT1cKLVZPSUQKLXNob3dk ZWxvcHRzKCkgewotICAgIGludCB4ID0gMDsKLSAgICBleHRlcm4gaW50IG9wdGxpbmVzOwotICAg IHBydG9wdCgmb3B0bGluZXMsIiIpOwotICAgIHBydG9wdCgmb3B0bGluZXMsIkRFTEVURSIpOwot ICAgIGlmIChkZWxfYXNrID4gLTEpIHsKLSAgICAgICAgcHJ0b3B0KCZvcHRsaW5lcywgZGVsX2Fz ayA/ICIvQVNLIiA6ICIvTk9BU0siKTsKLSAgICAgICAgeCsrOwotICAgIH0KLSNpZmRlZiBVTklY T1JPU0sKLSAgICBpZiAoZGVsX2RvdCA+IC0xKSB7Ci0gICAgICAgIHBydG9wdCgmb3B0bGluZXMs IGRlbF9kb3QgPyAiL0RPVEZJTEVTIiA6ICIvTk9ET1RGSUxFUyIpOwotICAgICAgICB4Kys7Ci0g ICAgfQotI2VuZGlmIC8qIFVOSVhPUk9TSyAqLwotICAgIGlmIChkZWxfbGlzID4gLTEpIHsKLSAg ICAgICAgcHJ0b3B0KCZvcHRsaW5lcywgZGVsX2xpcyA/ICIvTElTVCIgOiAiL05PTElTVCIpOwot ICAgICAgICB4Kys7Ci0gICAgfQotICAgIGlmIChkZWxfaGRnID4gLTEpIHsKLSAgICAgICAgcHJ0 b3B0KCZvcHRsaW5lcywgZGVsX2hkZyA/ICIvSEVBRElORyIgOiAiL05PSEVBRElORyIpOwotICAg ICAgICB4Kys7Ci0gICAgfQotI2lmbmRlZiBDS19UVEdXU0laCi0gICAgaWYgKGRlbF9wYWcgPiAt MSkgewotICAgICAgICBwcnRvcHQoJm9wdGxpbmVzLCBkZWxfcGFnID8gIi9QQUdFIiA6ICIvTk9Q QUdFIik7Ci0gICAgICAgIHgrKzsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfVFRHV1NJWiAqLwotICAg IGlmICgheCkgcHJ0b3B0KCZvcHRsaW5lcywiKG5vIG9wdGlvbnMgc2V0KSIpOwotICAgIHBydG9w dCgmb3B0bGluZXMsIiIpOwotfQotI2VuZGlmIC8qIE5PU0hPVyAqLwotCi0KLWludAotc2V0ZGVs b3B0cygpIHsKLSAgICBpbnQgeF9saXMgPSAtMSwgeF9wYWcgPSAtMSwgeF9kb3QgPSAtMSwgeF9o ZGcgPSAtMSwgeF9hc2sgPSAtMTsKLSAgICBpbnQgZ2V0dmFsID0gMDsKLSAgICBjaGFyIGM7Ci0g ICAgd2hpbGUgKDEpIHsKLSAgICAgICAgaWYgKCh5ID0gY21zd2koZGVsdGFiLG5kZWx0YWIsIlN3 aXRjaCIsIiIseHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAgICAgIGlmICh5ID09IC0zKQotICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcmV0dXJu KHkpOwotICAgICAgICB9Ci0gICAgICAgIGMgPSBjbWdicmsoKTsKLSAgICAgICAgaWYgKChnZXR2 YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAnPScpKSAmJiAhKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkg ewotICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBhbiBhcmd1 bWVudFxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0gICAgICAgIGlm ICghZ2V0dmFsICYmIChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKLSAgICAgICAgICAgIHByaW50 ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKLSAgICAgICAgICAgIHJl dHVybigtOSk7Ci0gICAgICAgIH0KLSAgICAgICAgc3dpdGNoICh5KSB7Ci0gICAgICAgICAgY2Fz ZSBERUxfRE9UOgotICAgICAgICAgICAgeF9kb3QgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgY2FzZSBERUxfTk9EOgotICAgICAgICAgICAgeF9kb3QgPSAwOwotICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBERUxfSERHOgotICAgICAgICAgICAgeF9oZGcgPSAx OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBERUxfTElTOgotICAgICAgICAg ICAgeF9saXMgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBERUxfTk9M OgotICAgICAgICAgICAgeF9saXMgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0jaWZuZGVmIENL X1RUR1dTSVoKLSAgICAgICAgICBjYXNlIERFTF9QQUc6Ci0gICAgICAgICAgICB4X3BhZyA9IDE7 Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERFTF9OT1A6Ci0gICAgICAgICAg ICB4X3BhZyA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBDS19UVEdXU0laICov Ci0gICAgICAgICAgY2FzZSBERUxfUVVJOgotICAgICAgICAgICAgeF9saXMgPSAwOwotICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBERUxfVlJCOgotICAgICAgICAgICAgeF9saXMg PSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBERUxfQVNLOgotICAgICAg ICAgICAgeF9hc2sgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBERUxf TkFTOgotICAgICAgICAgICAgeF9hc2sgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCB0aGlzIG9wdGlvbiBjYW4g bm90IGJlIHNldFxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0gICAg fQotICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgICAgICAgICAgICAgIC8qIEdldCBjb25maXJt YXRpb24gKi8KLSAgICAgIHJldHVybih4KTsKLSAgICBpZiAoeF9wYWcgPiAtMSkgZGVsX3BhZyA9 IHhfcGFnOwotICAgIGlmICh4X2RvdCA+IC0xKSBkZWxfZG90ID0geF9kb3Q7Ci0gICAgaWYgKHhf aGRnID4gLTEpIGRlbF9oZGcgPSB4X2hkZzsKLSAgICBpZiAoeF9saXMgPiAtMSkgZGVsX2xpcyA9 IHhfbGlzOwotICAgIGlmICh4X2FzayA+IC0xKSBkZWxfYXNrID0geF9hc2s7Ci0gICAgcmV0dXJu KHN1Y2Nlc3MgPSAxKTsKLX0KLQotI2lmZGVmIE9TMgotc3RhdGljIGNoYXIgKiogeG10Y2hzID0g TlVMTDsKLXN0YXRpYyBpbnQgeG10Y2huID0gMDsKLSNlbmRpZiAvKiBPUzIgKi8KLQotaW50Ci1k b2RlbCgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogREVMRVRFICovCi0gICAg aW50IGksIGosIGssIHg7Ci0gICAgaW50IGZzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAg LyogTmVlZCB0byBjYWxsIGZpbGVzZWxlY3QoKSAqLwotICAgIGludCBsZW4gPSAwOwotICAgIGlu dCBiYWQgPSAwOwotICAgIGludCBnZXR2YWwgPSAwLCBhc2tpbmcgPSAwOwotICAgIGludCBzaW11 bGF0ZSA9IDAsIHJjID0gMDsKLSAgICBDS19PRkZfVCBtaW5zaXplID0gLTFMLCBtYXhzaXplID0g LTFMOwotICAgIGludCBoYXZlbmFtZSA9IDAsIGNvbmZpcm1lZCA9IDA7Ci0gICAgaW50IHFmbGFn ID0gMDsKLSAgICBpbnQgc3VtbWFyeSA9IDA7Ci0gICAgaW50IGRlbGRpcnMgPSAwOwotICAgIGlu dCBkZWx0cmVlID0gMDsKLSAgICBpbnQgaXRzYWRpciA9IDA7Ci0gICAgaW50IGFyZ2lzZGlyID0g MDsKLSAgICBpbnQgeG1vZGUgPSAtMSwgc2NhbiA9IDAsIHNraXAgPSAwOwotI2lmZGVmIENPTU1F TlQKLSAgICBpbnQgcGFzcyA9IDA7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIGNoYXIgYzsK LSAgICBjaGFyICogZGVsZGVmID0gIiI7Ci0gICAgY2hhciBzYWZlYnVmW0NLTUFYUEFUSCsxXTsK LSAgICBzdHJ1Y3QgRkRCIHN3LCBmaSwgZmw7Ci0gICAgY2hhcgotICAgICAgKiBkZWxfYWZ0ID0g TlVMTCwKLSAgICAgICogZGVsX2JlZiA9IE5VTEwsCi0gICAgICAqIGRlbF9uYWYgPSBOVUxMLAot ICAgICAgKiBkZWxfbmJmID0gTlVMTCwKLSAgICAgICogZGVsX2V4YyA9IE5VTEw7Ci0gICAgaW50 Ci0gICAgICB4X2xpcyA9IDAsCi0gICAgICAvKiB4X2RvdCA9IC0xLCAqLwotICAgICAgeF9oZGcg PSAwOwotCi0gICAgY2hhciAqIGR4bGlzdFs4XTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCA4OyBp KyspIGR4bGlzdFtpXSA9IE5VTEw7Ci0KLSAgICBnX21hdGNoZG90ID0gbWF0Y2hkb3Q7Ci0KLSAg ICBpZiAoZGVsX2xpcyA+IC0xKSB4X2xpcyAgICA9IGRlbF9saXM7Ci0gICAgaWYgKGRlbF9kb3Qg PiAtMSkgbWF0Y2hkb3QgPSBkZWxfZG90OwotICAgIGlmIChkZWxfaGRnID4gLTEpIHhfaGRnICAg ID0gZGVsX2hkZzsKLSAgICBpZiAoZGVsX3BhZyA+IC0xKSB4YXNrbW9yZSA9IGRlbF9wYWc7Ci0g ICAgaWYgKGRlbF9hc2sgPiAtMSkgYXNraW5nICAgPSBkZWxfYXNrOwotCi0gICAgZGlyYWN0aXZl ID0gMTsKLSAgICBub2xpbmtzID0gMjsgICAgICAgICAgICAgICAgICAgICAgICAvKiBCeSBkZWZh dWx0IGRvbid0IGZvbGxvdyBsaW5rcyAqLwotCi0gICAgY21mZGJpKCZzdywgICAgICAgICAgICAg ICAgICAgICAgICAgLyogRmlyc3QgRkRCIC0gY29tbWFuZCBzd2l0Y2hlcyAqLwotICAgICAgICAg ICBfQ01LRVksICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgICJG aWxlIHNwZWNpZmljYXRpb247XG4gb3Igc3dpdGNoIiwKLSAgICAgICAgICAgIiIsICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAgICAgICAgbmRlbHRh YiwgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUg Ki8KLSAgICAgICAgICAgNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1l cmljIGRhdGEgMjogNCA9IGNtc3dpICovCi0gICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAg ICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotICAgICAgICAgICBkZWx0YWIsICAg ICAgICAgICAgICAgICAgICAgIC8qIEtleXdvcmQgdGFibGUgKi8KLSAgICAgICAgICAgJmZpICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCi0gICAgICAg ICAgICk7Ci0gICAgY21mZGJpKCZmbCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQW55dGhp bmcgdGhhdCBkb2Vzbid0IG1hdGNoICovCi0gICAgICAgICAgIF9DTUZMRCwgICAgICAgICAgICAg ICAgICAgICAgLyogZmNvZGUgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBobHBtc2cgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLwotICAgICAgICAgICAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCi0gICAgICAgICAg IHh4c3RyaW5nLAotICAgICAgICAgICBOVUxMLAotICAgICAgICAgICBOVUxMCi0gICAgICAgICAg ICk7Ci0gIGFnYWluOgotICAgIGNtZmRiaSgmZmksICAgICAgICAgICAgICAgICAgICAgICAgIC8q IDJuZCBGREIgLSBmaWxlIHRvIGRlbGV0ZSAqLwotICAgICAgICAgICBfQ01JRkksICAgICAgICAg ICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgICJGaWxlKHMpIHRvIGRlbGV0ZSIs ICAgICAgICAgLyogaGxwbXNnICovCi0gICAgICAgICAgIGRlbGRlZiwgICAgICAgICAgICAgICAg ICAgICAgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAgICAgIG5vbGlua3MgfCBkZWxkaXJz LCAgICAgICAgICAgLyogMCA9IGZpbGVzLCAxID0gZmlsZXMgb3IgZGlycyAqLwotICAgICAgICAg ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEgPSBkaXJzIG9ubHkgKi8KLSAgICAg ICAgICAgeHhzdHJpbmcsCi0gICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICZmbAotICAgICAg ICAgICApOwotICAgIHdoaWxlICghaGF2ZW5hbWUgJiYgIWNvbmZpcm1lZCkgewotICAgICAgICB4 ID0gY21mZGIoJnN3KTsgICAgICAgICAgICAgICAgIC8qIFBhcnNlIHNvbWV0aGluZyAqLwotICAg ICAgICBpZiAoeCA8IDApIHsgICAgICAgICAgICAgICAgICAgIC8qIEVycm9yICovCi0gICAgICAg ICAgICBpZiAoeCA9PSAtMykKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAo eCA9PSAtMiB8fCB4ID09IC05KQotICAgICAgICAgICAgICBwcmludGYoIj9Eb2VzIG5vdCBtYXRj aCBzd2l0Y2ggb3IgZmlsZW5hbWU6IFwiJXNcIlxuIixhdG1idWYpOwotICAgICAgICAgICAgcmV0 dXJuKHgpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjbXJlc3VsdC5mY29kZSAhPSBfQ01LRVkp ICAgLyogQnJlYWsgb3V0IGlmIG5vdCBhIHN3aXRjaCAqLwotICAgICAgICAgIGJyZWFrOwotICAg ICAgICBjID0gY21nYnJrKCk7ICAgICAgICAgICAgICAgICAgIC8qIEdldCBicmVhayBjaGFyYWN0 ZXIgKi8KLSAgICAgICAgaWYgKChnZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAnPScpKSAmJiAh KGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgewotICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0 Y2ggZG9lcyBub3QgdGFrZSBhbiBhcmd1bWVudFxuIik7Ci0gICAgICAgICAgICByYyA9IC05Owot ICAgICAgICAgICAgZ290byB4ZGVsZXRlOwotICAgICAgICB9Ci0gICAgICAgIGlmICghZ2V0dmFs ICYmIChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKLSAgICAgICAgICAgIHByaW50ZigiP1RoaXMg c3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKLSAgICAgICAgICAgIHJjID0gLTk7Ci0g ICAgICAgICAgICBnb3RvIHhkZWxldGU7Ci0gICAgICAgIH0KLSAgICAgICAgc3dpdGNoIChrID0g Y21yZXN1bHQubnJlc3VsdCkgewotICAgICAgICAgIGNhc2UgREVMX0FGVDoKLSAgICAgICAgICBj YXNlIERFTF9CRUY6Ci0gICAgICAgICAgY2FzZSBERUxfTkFGOgotICAgICAgICAgIGNhc2UgREVM X05CRjoKLSAgICAgICAgICAgIGlmICghZ2V0dmFsKSBicmVhazsKLSAgICAgICAgICAgIGlmICgo eCA9IGNtZGF0ZSgiRmlsZS10aW1lIiwiIiwmcywwLHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAg ICAgICAgICAgaWYgKHggPT0gLTMpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/RGF0 ZS10aW1lIHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgeCA9IC05OwotICAgICAg ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgcmMgPSB4OwotICAgICAgICAgICAg ICAgIGdvdG8geGRlbGV0ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZzKys7Ci0gICAg ICAgICAgICBkZWx0cmVlID0gMDsKLSAgICAgICAgICAgIHN3aXRjaCAoaykgewotICAgICAgICAg ICAgICBjYXNlIERFTF9BRlQ6IG1ha2VzdHIoJmRlbF9hZnQscyk7IGJyZWFrOwotICAgICAgICAg ICAgICBjYXNlIERFTF9CRUY6IG1ha2VzdHIoJmRlbF9iZWYscyk7IGJyZWFrOwotICAgICAgICAg ICAgICBjYXNlIERFTF9OQUY6IG1ha2VzdHIoJmRlbF9uYWYscyk7IGJyZWFrOwotICAgICAgICAg ICAgICBjYXNlIERFTF9OQkY6IG1ha2VzdHIoJmRlbF9uYmYscyk7IGJyZWFrOwotICAgICAgICAg ICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBERUxfRE9UOgotICAgICAg ICAgICAgbWF0Y2hkb3QgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBE RUxfTk9EOgotICAgICAgICAgICAgbWF0Y2hkb3QgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgY2FzZSBERUxfQUxMOgotICAgICAgICAgICAgZnMgPSAwOwotI2lmZGVmIFZNUwot ICAgICAgICAgICAgZGVsZGVmID0gIiouKiI7ICAgICAgICAgICAgIC8qIFVOSVgsIFdpbmRvd3Ms IE9TLzIgKi8KLSNlbHNlCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICAgICAgICAgIGRlbGRlZiA9 ICIrIjsgICAgICAgICAgICAgICAvKiBBT1MvVlMgKi8KLSNlbHNlCi0gICAgICAgICAgICBkZWxk ZWYgPSAiKiI7ICAgICAgICAgICAgICAgLyogVU5JWCwgV2luZG93cywgT1MvMiwgVk1TLi4uICov Ci0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSAgICAgICAgICAg IGRlbHRyZWUgPSAxOwotICAgICAgICAgICAgbm9saW5rcyA9IDI7Ci0gICAgICAgICAgICBtYXRj aGRvdCA9IDE7Ci0gICAgICAgICAgICByZWN1cnNpdmUgPSAxOyAgICAgICAgICAgICAgLyogRmFs bCB0aHJvdWdoIHB1cnBvc2VseS4uLiAqLwotICAgICAgICAgIGNhc2UgREVMX0RJUjoKLSAgICAg ICAgICAgIGRlbGRpcnMgPSAxOwotICAgICAgICAgICAgZ290byBhZ2FpbjsKLSAgICAgICAgICBj YXNlIERFTF9FWEM6Ci0gICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0gICAgICAgICAg ICBpZiAoKHggPSBjbWZsZCgiUGF0dGVybiIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKLSAgICAg ICAgICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9Q YXR0ZXJuIHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgeCA9IC05OwotICAgICAg ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgcmMgPSB4OwotICAgICAgICAgICAg ICAgIGdvdG8geGRlbGV0ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZzKys7Ci0gICAg ICAgICAgICBkZWx0cmVlID0gMDsKLSAgICAgICAgICAgIG1ha2VzdHIoJmRlbF9leGMscyk7Ci0g ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERFTF9IREc6Ci0gICAgICAgICAgICB4 X2hkZyA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSNpZmRlZiBSRUNVUlNJVkUKLSAgICAgICAg ICBjYXNlIERFTF9SRUM6Ci0gICAgICAgICAgICByZWN1cnNpdmUgPSAxOwotICAgICAgICAgICAg YnJlYWs7Ci0jZW5kaWYgLyogUkVDVVJTSVZFICovCi0gICAgICAgICAgY2FzZSBERUxfTElTOgot ICAgICAgICAgICAgeF9saXMgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz ZSBERUxfU1VNOgotICAgICAgICAgICAgc3VtbWFyeSA9IDE7Ci0gICAgICAgICAgICB4X2xpcyA9 IDA7Ci0gICAgICAgICAgICB4X2hkZyA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICBjYXNlIERFTF9OT0w6Ci0gICAgICAgICAgICB4X2xpcyA9IDA7Ci0gICAgICAgICAgICBicmVh azsKLSNpZm5kZWYgQ0tfVFRHV1NJWgotICAgICAgICAgIGNhc2UgREVMX1BBRzoKLSAgICAgICAg ICAgIHhhc2ttb3JlID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgREVM X05PUDoKLSAgICAgICAgICAgIHhhc2ttb3JlID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotI2Vu ZGlmIC8qIENLX1RUR1dTSVogKi8KLSAgICAgICAgICBjYXNlIERFTF9RVUk6Ci0gICAgICAgICAg ICBxZmxhZyA9IDE7Ci0gICAgICAgICAgICB4X2xpcyA9IDA7Ci0gICAgICAgICAgICBicmVhazsK LSAgICAgICAgICBjYXNlIERFTF9WUkI6Ci0gICAgICAgICAgICB4X2xpcyA9IDE7Ci0gICAgICAg ICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgREVMX1NNQToKLSAgICAgICAgICBjYXNlIERF TF9MQVI6Ci0gICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0gICAgICAgICAgICBpZiAo KHggPSBjbW51bSgiRmlsZSBzaXplIGluIGJ5dGVzIiwiMCIsMTAsJnkseHhzdHJpbmcpKSA8IDAp Ci0gICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgIGZzKys7Ci0gICAgICAgICAg ICBkZWx0cmVlID0gMDsKLSAgICAgICAgICAgIHN3aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgewot ICAgICAgICAgICAgICBjYXNlIERFTF9TTUE6IG1pbnNpemUgPSB5OyBicmVhazsKLSAgICAgICAg ICAgICAgY2FzZSBERUxfTEFSOiBtYXhzaXplID0geTsgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgREVMX1NJTToKLSAgICAgICAgICAg IHNpbXVsYXRlID0gMTsKLSAgICAgICAgICAgIHhfbGlzID0gMTsKLSAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgIGNhc2UgREVMX0FTSzoKLSAgICAgICAgICAgIGFza2luZyA9IDE7Ci0gICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERFTF9OQVM6Ci0gICAgICAgICAgICBhc2tp bmcgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBERUxfVFlQOiB7Ci0g ICAgICAgICAgICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiIHR4dGJpbltdOwotICAgICAgICAgICAg ICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0gICAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KHR4dGJp biwzLCIiLCIiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAg ICAgICAgICAgICAgaWYgKHggPT0gMikgeyAgICAgICAgICAgICAvKiBBTEwgKi8KLSAgICAgICAg ICAgICAgICAgIHhtb2RlID0gLTE7Ci0gICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAg ICAgICAgLyogVEVYVCBvciBCSU5BUlkgb25seSAqLwotICAgICAgICAgICAgICAgICAgeG1vZGUg PSB4OwotICAgICAgICAgICAgICAgICAgc2NhbiA9IDE7Ci0gICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg ICAgICBwcmludGYoIj9Ob3QgaW1wbGVtZW50ZWQgeWV0IC0gXCIlc1wiXG4iLGF0bWJ1Zik7Ci0g ICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChxZmxhZyAm JiAoY21yZXN1bHQuZmNvZGUgPT0gX0NNRkxEKSkgewotICAgICAgICBpZiAoKHggPSBjbWNmbSgp KSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICB9Ci0gICAgaWYgKGNtcmVzdWx0LmZjb2RlICE9IF9DTUlG SSkgewotICAgICAgICBpZiAoKmF0bWJ1ZikgewotCSAgICBpbnQgeDsKLSAgICAgICAgICAgIGlm IChpc3dpbGQoYXRtYnVmKSAmJiBuenhwYW5kKGF0bWJ1ZixuenhvcHRzKSA9PSAwKQotICAgICAg ICAgICAgICBwcmludGYoIj9ObyBmaWxlcyBtYXRjaDogJXNcbiIsYnJzdHJpcChhdG1idWYpKTsK LSAgICAgICAgICAgIGVsc2UgaWYgKCh4ID0gemNoa2koYXRtYnVmKSkgPT0gLTEpCi0JICAgICAg cHJpbnRmKCI/RmlsZSBub3QgZm91bmQ6ICVzXG4iLGJyc3RyaXAoYXRtYnVmKSk7Ci0JICAgIGVs c2UgaWYgKHggPT0gLTIpCi0JICAgICAgcHJpbnRmKCI/Tm90IGEgcmVndWxhciBmaWxlOiAlc1xu IixhdG1idWYpOwotCSAgICBlbHNlCi0gICAgICAgICAgICAgIC8qIHByaW50ZigiP05vdCBhIGRl bGV0YWJsZSBmaWxlOiAlc1xuIixhdG1idWYpOyAqLwotICAgICAgICAgICAgICBnb3RvIHRyeWFu eXdheTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHByaW50ZigiP0EgZmlsZSBzcGVj aWZpY2F0aW9uIGlzIHJlcXVpcmVkXG4iKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4oLTkp OwotICAgIH0KLSAgdHJ5YW55d2F5OgotICAgIGNrc3RybmNweSh0bXBidWYsY21yZXN1bHQuc3Jl c3VsdCxUTVBCVUZTSVopOyAvKiBTYWZlIGNvcHkgb2YgZmlsZXNwZWMgKi8KLSAgICBpZiAoZGVs ZGlycykgewotICAgICAgICBja3N0cm5jcHkoc2FmZWJ1ZixjbXJlc3VsdC5zcmVzdWx0LENLTUFY UEFUSCk7Ci0jaWZkZWYgVk1TT1JVTklYCi0gICAgICAgIGxlbiA9IHpnZXRmcyh0bXBidWYpOyAg ICAgICAgICAgLyogSXMgaXQgYSBkaXJlY3RvcnkgbmFtZT8gKi8KLSAgICAgICAgYXJnaXNkaXIg PSB6Z2ZzX2RpcjsgICAgICAgICAgICAvKiBUaGVuIGJlY2F1c2Ugb2YgaG93IHp4cGFuZCgpICov Ci0gICAgICAgIGlmIChhcmdpc2RpciAmJiB6Z2ZzX2xpbmspICAgICAgLyogd29ya3MsIHdlIGhh dmUgdG8gYWRkIGl0IHRvICovCi0gICAgICAgICAgYXJnaXNkaXIgPSAwOyAgICAgICAgICAgICAg ICAgLyogdGhlIGxpc3QuICovCi0gICAgICAgIGlmIChpdHNhZGlyKQotICAgICAgICAgIGxlbiA9 IC0yOwotI2Vsc2UKLSAgICAgICAgbGVuID0gemNoa2kodG1wYnVmKTsKLSAgICAgICAgaWYgKGxl biA8IDApCi0gICAgICAgICAgYXJnaXNkaXIgPSBpc2Rpcih0bXBidWYpOwotI2VuZGlmIC8qIFZN U09SVU5JWCAqLwotICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJERUxFVEUgZmlsZSIsdG1wYnVmLDAp OwotICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgIHJldHVybih4KTsKLQotI2lmZGVm IElLU0QKLSNpZmRlZiBDS19MT0dJTgotICAgIGlmIChpbnNlcnZlciAmJiBpc2d1ZXN0KSB7Ci0g ICAgICAgIHByaW50ZigiP1NvcnJ5LCBERUxFVEUgdW5hdmFpbGFibGUgdG8gZ3Vlc3RzXG4iKTsK LSAgICAgICAgcmV0dXJuKC05KTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSNlbmRp ZiAvKiBJS1NEICovCi0KLSNpZm5kZWYgT1MyT1JVTklYCi0gICAgaWYgKHNpbXVsYXRlKSB7Ci0g ICAgICAgIHByaW50ZigiP1NvcnJ5LCAvU0lNVUxBVEUgbm90IGltcGxlbWVudGVkIG9uIHRoaXMg cGxhdGZvcm1cbiIpOwotICAgICAgICByZXR1cm4oLTkpOwotICAgIH0KLSNlbmRpZiAvKiBPUzJP UlVOSVggKi8KLQotI2lmZGVmIENPTU1FTlQKLSAgICAvKiAobm90IG5lZWRlZCkgKi8KLSAgICBp ZiAoIWlzd2lsZCh0bXBidWYpKSB7Ci0gICAgICAgIGNoYXIgKm07Ci0gICAgICAgIGVycm5vID0g MDsKLSAgICAgICAgeCA9IHpjaGtpKHRtcGJ1Zik7Ci0gICAgICAgIGlmICh4IDwgMCkgewotICAg ICAgICAgICAgc3dpdGNoICh4KSB7Ci0gICAgICAgICAgICAgIGNhc2UgLTI6IG0gPSAiTm90IGEg cmVndWxhciBmaWxlIjsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgLTE6IG0gPSAiRmlsZSBu b3QgZm91bmQgb3Igbm90IGFjY2Vzc2libGUiOyBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVs dDogbSA9IGVycm5vID8gY2tfZXJyc3RyKCkgOiAiQ2FuJ3QgZGVsZXRlIjsKLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIHByaW50ZigiPyVzOiBcIiVzXCJcbiIsbSx0bXBidWYpOwotICAgICAg ICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICov Ci0KLSAgICBtYWtlbGlzdChkZWxfZXhjLGR4bGlzdCw4KTsKLQotLyogdG1wYnVmW10gaGFzIHRo ZSBuYW1lIC0gbm93IGRvIGFueSBuZWVkZWQgY29udmVyc2lvbnMgb24gaXQgKi8KLQotI2lmZGVm IE9TMgotICAgIHsgICAvKiBMb3dlciBsZXZlbCBmdW5jdGlvbnMgY2hhbmdlIC8gdG8gXCwgbm90 IGdvb2QgZm9yIENNRC5FWEUuICovCi0gICAgICAgIGNoYXIgKnAgPSB0bXBidWY7Ci0gICAgICAg IHdoaWxlICgqcCkgeyAgICAgICAgICAgICAgICAgICAgLyogQ2hhbmdlIHRoZW0gYmFjayB0byBc ICovCi0gICAgICAgICAgICBpZiAoKnAgPT0gJy8nKSAqcCA9ICdcXCc7Ci0gICAgICAgICAgICBw Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBWTVMKLSAg ICBpZiAoaXN3aWxkKHRtcGJ1ZikpIHsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIC8qIERvZXMg bm90IGhhbmRsZSAnLicgYXMgdmVyc2lvbiBzZXBhcmF0b3IgKi8KLSAgICAgICAgY2hhciAqcCA9 IHRtcGJ1ZjsKLSAgICAgICAgeCA9IDA7Ci0gICAgICAgIHdoaWxlICgqcCkgewotICAgICAgICAg ICAgaWYgKCpwID09ICc7JykgewotICAgICAgICAgICAgICAgIHggPSAxOwotICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgIHArKzsKLSAgICAg ICAgfQotICAgICAgICBpZiAoIXgpIGNrc3RybmNhdCh0bXBidWYsIjsqIixUTVBCVUZTSVopOwot I2Vsc2UKLSAgICAgICAgaiA9IDA7IHggPSAwOyAgICAgICAgICAgICAgICAgICAvKiBmb3IgZW5k X2RvdCBhbmQgbnVtYmVyIG9mIGRvdHMgKi8KLSAgICAgICAgaSA9IHN0cmxlbih0bXBidWYpOwot ICAgICAgICBpZiAodG1wYnVmW2ldID09ICc7JykgewotICAgICAgICAgICAgY2tzdHJuY2F0KHRt cGJ1ZiwiMCIsVE1QQlVGU0laKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICh0 bXBidWZbaS0tXSA9PSAnLicpCi0gICAgICAgICAgICAgIGorKzsKLSAgICAgICAgICAgIGZvciAo OyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgICAgIGlmICh0bXBidWZbaV0gPT0gJzsnIHx8 IHRtcGJ1ZltpXSA9PSAnOicgfHwKLSAgICAgICAgICAgICAgICAgICAgdG1wYnVmW2ldID09ICdd JyB8fCB0bXBidWZbaV0gPT0gJz4nKQotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgICAgZWxzZSBpZiAodG1wYnVmW2ldID09ICcuJykKLSAgICAgICAgICAgICAgICAgIHgr KzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0bXBidWZbaV0gIT0gJzsnKSB7ICAg ICAvKiBkb3QgbWF5IGhhdmUgYmVlbiB1c2VkICovCi0gICAgICAgICAgICAgICAgaWYgKGopIHsg ICAgICAgICAgICAgICAgLyogbGFzdCBjaGFyIGlzIGRvdCAqLwotICAgICAgICAgICAgICAgICAg aWYgKHgpICAgICAgICAgICAgICAgIC8qIHNlY29uZCBpcyB2ZXJzaW9uIHNlcGFyYXRvciAqLwot ICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQodG1wYnVmLCIwIixUTVBCVUZTSVopOwotICAg ICAgICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgIC8qICdmb28uJyAqLwotICAgICAg ICAgICAgICAgICAgICBja3N0cm5jYXQodG1wYnVmLCI7MCIsVE1QQlVGU0laKTsKLSAgICAgICAg ICAgICAgICB9IGVsc2UgaWYgKHggPT0gMSkgICAgICAvKiBsYWNraW5nIGEgdmVyc2lvbiBzZXBh cmF0b3IgKi8KLSAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0bXBidWYsIjswIixUTVBCVUZT SVopOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHggPT0gMCkgICAgICAgIC8qIHggPT0gMiBo YXMgYSB2ZXJzaW9uICovCi0gICAgICAgICAgICAgICAgICBja3N0cm5jYXQodG1wYnVmLCIuKjsw IixUTVBCVUZTSVopOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLyogQ09NTUVO VCAqLwotICAgIH0KLSNlbmRpZiAvKiBWTVMgKi8KLQotICAgIGRlYnVnKEYxMTAsImRvZGVsIHRt cGJ1ZiIsdG1wYnVmLDApOyAvKiBGaWxlbmFtZSAqLwotCi0jaWZuZGVmIE9TMk9SVU5JWCAgICAg ICAgICAgICAgICAgICAgICAgLyogTm8gYnVpbHQtaW4gREVMRVRFIGNvZGUuLi4gKi8KLSAgICAv KiBDb25zdHJ1Y3Qgc3lzdGVtIGNvbW1hbmQuICovCi0gICAgY2ttYWttc2cobGluZSxMSU5CVUZT SVosREVMQ01ELCIgIix0bXBidWYsTlVMTCk7Ci0jZWxzZQotI2lmZGVmIFZNUwotICAgIGlmIChh c2tpbmcpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIE1heWJlIG92ZXJ3cml0ZSBpbiBWTVMg Ki8KLSAgICAgICAgaWYgKHhfbGlzKSAgICAgICAgICAgICAgICAgICAgICAvKiBpZiBvcHRpb25z IGFyZSBuZWVkZWQuLi4gKi8KLSAgICAgICAgICBja21ha21zZyhsaW5lLExJTkJVRlNJWixERUxD TUQsIiAvY29uZmlybS9sb2cgIix0bXBidWYsTlVMTCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg ICBja21ha21zZyhsaW5lLExJTkJVRlNJWixERUxDTUQsIiAvY29uZmlybSAiLHRtcGJ1ZixOVUxM KTsKLSAgICB9IGVsc2UgaWYgKHhfbGlzKQotICAgICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVos REVMQ01ELCIgL2xvZyAiLHRtcGJ1ZixOVUxMKTsKLSAgICBjb25yZXMoKTsKLSNlbmRpZiAvKiBW TVMgKi8KLQotICAgIGRlYnVnKEYxMTAsImRvZGVsIGxpbmUiLGxpbmUsMCk7Ci0jZW5kaWYgLyog T1MyT1JVTklYICovCi0KLSNpZmRlZiBNQUMKLSAgICBzdWNjZXNzID0gKHpkZWxldCh0bXBidWYp ID09IDApOwotCi0jZWxzZSAgLyogIU1BQyAuLi4gKi8KLQotI2lmZGVmIE9TMk9SVU5JWAotICAg IHsKLSAgICAgICAgaW50IGZpbGVzcGFjZSA9IDA7Ci0gICAgICAgIGludCBjb3VudCA9IDA7Ci0g ICAgICAgIGludCBsaW5lcyA9IDA7Ci0gICAgICAgIGludCBuID0gMDsKLQotICAgICAgICBzID0g dG1wYnVmOwotCi0jaWZkZWYgQ0tfVFRHV1NJWgotI2lmZGVmIE9TMgotICAgICAgICB0dGdjd3N6 KCk7Ci0jZWxzZSAvKiBPUzIgKi8KLSAgICAgICAgLyogQ2hlY2sgd2hldGhlciB3aW5kb3cgc2l6 ZSBjaGFuZ2VkICovCi0gICAgICAgIGlmICh0dGd3c2l6KCkgPiAwKSB7Ci0gICAgICAgICAgICBp ZiAodHRfcm93cyA+IDAgJiYgdHRfY29scyA+IDApIHsKLSAgICAgICAgICAgICAgICBjbWRfcm93 cyA9IHR0X3Jvd3M7Ci0gICAgICAgICAgICAgICAgY21kX2NvbHMgPSB0dF9jb2xzOwotICAgICAg ICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogQ0tfVFRHV1NJ WiAqLwotCi0gICAgICAgIGlmICh4X2hkZyA+IDAgJiYgIXN1bW1hcnkpIHsKLSAgICAgICAgICAg IHByaW50ZigiRGVsZXRpbmcgJXMuLi4lc1xuIiwgcywgc2ltdWxhdGUgPyAiIChTSU1VTEFUSU9O KSIgOiAiIik7Ci0gICAgICAgICAgICBuICs9IDI7Ci0gICAgICAgIH0KLSNpZmRlZiBaWFJFV0lO RAotICAgICAgICB6ID0genhyZXdpbmQoKTsgICAgICAgICAgICAgICAgIC8qIFJld2luZCBmaWxl IGxpc3QgKi8KLSNlbHNlCi0gICAgICAgIGlmICghZGVsZGlycykKLSAgICAgICAgICBuenhvcHRz ID0gWlhfRklMT05MWTsKLSAgICAgICAgaWYgKHJlY3Vyc2l2ZSkgbnp4b3B0cyB8PSBaWF9SRUNV UlNFOwotICAgICAgICBpZiAobWF0Y2hkb3QpICBuenhvcHRzIHw9IFpYX01BVENIRE9UOwotICAg ICAgICBlcnJubyA9IDA7Ci0gICAgICAgIHogPSBuenhwYW5kKHMsbnp4b3B0cyk7ICAgICAgICAg LyogRXhwYW5kIGZpbGUgbGlzdCAqLwotI2VuZGlmIC8qIFpYUkVXSU5EICovCi0gICAgICAgIGRl YnVnKEYxMTEsImRvZGVsIixzLHopOwotCi0gICAgICAgIC8qIElmIGRlbGV0aW5nIGRpcmVjdG9y aWVzLCBzb3J0IGluIHJldmVyc2Ugb3JkZXIgKi8KLSAgICAgICAgLyogc28gd2UgZGVsZXRlIHRo ZSBmaWxlcyBmaXJzdCwgdGhlbiB0aGUgZGlyZWN0b3J5LiAqLwotCi0jaWZkZWYgT1MyCi0gICAg ICAgIC8qIEluIEs5NSwgd2UgaGF2ZSBubyBtdGNocyBhcnJheSwgbm9yIGFueSBjb250cm9sIG92 ZXIgKi8KLSAgICAgICAgLyogdGhlIG9yZGVyIGluIHdoaWNoIHpuZXh0KCkgcmV0dXJucyBmaWxl bmFtZXMsIHNvIHdlICAqLwotICAgICAgICAvKiBtdXN0IGNvcHkgdGhlIGFycmF5IGFuZCBzb3J0 IGl0LiAqLwotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICAgIGlmICh4 bXRjaHMpIHsgICAgICAgICAgICAgICAvKiBGcmVlIHByZXZpb3VzIGxpc3QgaW4gY2FzZSAqLwot ICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImRvZGVsIGZyZWVpbmcgcHJldmlvdXMgbGlzdCIs IiIseG10Y2huKTsKLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgeG10Y2huOyBpKysp IC8qIGl0IHdhc24ndCBmcmVlZCBsYXN0IHRpbWUuICovCi0gICAgICAgICAgICAgICAgICBpZiAo eG10Y2hzW2ldKQotICAgICAgICAgICAgICAgICAgICBmcmVlKHhtdGNoc1tpXSk7Ci0gICAgICAg ICAgICAgICAgZnJlZSh4bXRjaHMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgeG10Y2hu ID0gMDsKLSAgICAgICAgICAgIHhtdGNocyA9IChjaGFyICoqKW1hbGxvYyh6ICogKHNpemVvZihj aGFyICoqKSkpOyAvKiBNYWtlIG5ldyBvbmUgKi8KLSAgICAgICAgICAgIGlmICgheG10Y2hzKSB7 Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/TWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIik7 Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg IGZvciAoaSA9IDA7IGkgPCB6OyBpKyspIHsKLSAgICAgICAgICAgICAgICB4bXRjaHNbaV0gPSBO VUxMOwotICAgICAgICAgICAgICAgIHpuZXh0KHRtcGJ1Zik7Ci0gICAgICAgICAgICAgICAgaWYg KCEqdG1wYnVmKQotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgbWFr ZXN0cigmKHhtdGNoc1tpXSksdG1wYnVmKTsKLSAgICAgICAgICAgICAgICBpZiAoIXhtdGNoc1tp XSkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9NZW1vcnkgYWxsb2NhdGlvbiBmYWls dXJlXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgeG10Y2huID0gaSAtIDE7Ci0gICAgICAgICAg ICAgICAgICAgIHJjID0gLTk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8geGRlbGV0ZTsKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLyogZGVidWcoRjExMSwiZG9kZWwgYWRk Iix4bXRjaHNbaV0saSk7ICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB4bXRjaG4gPSBp OwotICAgICAgICAgICAgZGVidWcoRjEwMSwiZG9kZWwgeG10Y2huIiwiIix4bXRjaG4pOwotICAg ICAgICAgICAgc2hfc29ydCh4bXRjaHMsTlVMTCx6LDAsZGVsZGlycywwKTsKLSAgICAgICAgfQot I2Vsc2UKLSNpZmRlZiBVTklYCi0gICAgICAgIHNoX3NvcnQobXRjaHMsTlVMTCx6LDAsZGVsZGly cyxmaWxlY2FzZSk7Ci0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAg ICAgIGlmICh6ID4gMCkgewotICAgICAgICAgICAgaW50IGk7Ci0jaWZkZWYgT1MyCi0gICAgICAg ICAgICBpbnQgaXggPSAwOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgc3VjY2VzcyA9 IDE7Ci0gICAgICAgICAgICBpZiAoeF9oZGcgPiAwKQotICAgICAgICAgICAgICBwcmludGYoIlxu Iik7Ci0KLSAgICAgICAgICAgIHdoaWxlICgKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAg ICBpeCA8IHhtdGNobgotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAxCi0jZW5kaWYgLyogT1My ICovCi0gICAgICAgICAgICAgICAgICAgKSB7ICAgICAgICAgICAgICAgICAgLyogTG9vcCBmb3Ig YWxsIGZpbGVzICovCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgY2tzdHJuY3B5KHRtcGJ1 Zix4bXRjaHNbaXgrK10sVE1QQlVGU0laKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgem5leHQo dG1wYnVmKTsgICAgICAgICAgLyogR2V0IG5leHQgZmlsZSAqLwotI2VuZGlmIC8qIE9TMiAqLwot ICAgICAgICAgICAgICAgIGlmICghKnRtcGJ1ZikgeyAgICAgICAgIC8qIE5vIG1vcmUgKi8KLSAg ICAgICAgICAgICAgICAgICAgaWYgKGRlbGRpcnMgJiYgcmVjdXJzaXZlICYmIGFyZ2lzZGlyKSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkodG1wYnVmLHNhZmVidWYsVE1QQlVG U0laKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZ2lzZGlyID0gMDsgICAvKiAob25seSBk byB0aGlzIG9uY2UpICovCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBza2lw ID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoIWRlbHRyZWUpIHsKLSAgICAgICAgICAgICAgICAg ICAgaWYgKGZzKQotICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlc2VsZWN0KHRtcGJ1ZiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxfYWZ0LGRlbF9iZWYsZGVs X25hZixkZWxfbmJmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnNp emUsbWF4c2l6ZSwwLDgsZHhsaXN0KSA8IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg c2tpcCsrOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgaWYgKCFza2lwICYmIHNjYW4gJiYgaXRzYWRpcikgewotICAgICAgICAgICAg ICAgICAgICBza2lwKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgh c2tpcCAmJiBzY2FuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzY2FuZmlsZSh0 bXBidWYsJnksbnNjYW5maWxlKSkgewotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRlRfQklO OgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhtb2RlICE9IDEpCi0gICAgICAgICAgICAg ICAgICAgICAgICAgIHNraXArKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgICAgICAgICAgIGNhc2UgRlRfVEVYVDoKLSAgICAgICAgICAgICAgICAgICAgICBj YXNlIEZUXzdCSVQ6Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBGVF84QklUOgotI2lmZGVm IFVOSUNPREUKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZUX1VURjg6Ci0gICAgICAgICAg ICAgICAgICAgICAgY2FzZSBGVF9VQ1MyOgotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSAgICAgICAg ICAgICAgICAgICAgICAgIGlmICh4bW9kZSAhPSAwKQotICAgICAgICAgICAgICAgICAgICAgICAg ICBza2lwKys7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgaWYgKCFza2lwICYmIGFza2luZykgewotICAgICAgICAgICAgICAgICAgICBp bnQgeDsKLSAgICAgICAgICAgICAgICAgICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVosIiBEZWxl dGUgIix0bXBidWYsIj8gIixOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgeCA9IGdldHllc25v KGxpbmUsMyk7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoeCkgewotICAgICAgICAgICAg ICAgICAgICAgIGNhc2UgMDogY29udGludWU7ICAgICAgICAgICAvKiBubyAqLwotICAgICAgICAg ICAgICAgICAgICAgIGNhc2UgMTogYnJlYWs7ICAgICAgICAgICAgICAvKiB5ZXMgKi8KLSAgICAg ICAgICAgICAgICAgICAgICBjYXNlIDI6IGdvdG8geGRlbGV0ZTsgICAgICAgLyogcXVpdCAqLwot ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogYXNraW5nID0gMDsgYnJlYWs7ICAvKiBnbyAq LwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotI2lmZGVmIFZNU09S VU5JWAotICAgICAgICAgICAgICAgIGxlbiA9IHpnZXRmcyh0bXBidWYpOyAgIC8qIEdldCBsZW5n dGggYW5kIGFjY2Vzc2liaWxpdHkgKi8KLSAgICAgICAgICAgICAgICBpdHNhZGlyID0gemdmc19k aXI7Ci0gICAgICAgICAgICAgICAgaWYgKGl0c2FkaXIgJiYgemdmc19saW5rKSB7IC8qIFRyZWF0 IGxpbmtzIHRvIGRpcmVjdG9yaWVzICovCi0gICAgICAgICAgICAgICAgICAgIGl0c2FkaXIgPSAw OyAgICAgICAgLyogYXMgcmVndWxhciBmaWxlcyAqLwotICAgICAgICAgICAgICAgICAgICBpZiAo c2NhbikgICAgICAgICAgIC8qIEJ1dCBub3QgaWYgL1RZUEU6IHdhcyBnaXZlbiAqLwotICAgICAg ICAgICAgICAgICAgICAgIHNraXArKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgaWYgKGl0c2FkaXIpICAgICAgICAgICAgLyogKGVtdWxhdGUgbm9uLVVuaXggY29kZSkgKi8K LSAgICAgICAgICAgICAgICAgIGxlbiA9IC0yOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBsZW4g PSB6Y2hraSh0bXBidWYpOyAgICAvKiBHZXQgYWNjZXNzaWJpbGl0eSAqLwotICAgICAgICAgICAg ICAgIGlmIChsZW4gPCAwKSAgICAgICAgICAgIC8qIFNlZSBpZiBpdCdzIGEgZGlyZWN0b3J5ICov Ci0gICAgICAgICAgICAgICAgICBpdHNhZGlyID0gaXNkaXIodG1wYnVmKTsKLSNlbmRpZiAvKiBW TVNPUlVOSVggKi8KLQotICAgICAgICAgICAgICAgIGlmIChza2lwKSB7Ci0jaWZkZWYgQ09NTUVO VCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVG9vIHZlcmJvc2UgKi8KLSAgICAgICAgICAg ICAgICAgICAgaWYgKHhfbGlzID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMr KzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICVzIChTS0lQUEVEKVxuIix0bXBi dWYpOwotI2lmZGVmIENLX1RUR1dTSVoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK24g PiBjbWRfcm93cyAtIDMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXNrbW9yZSgp KSBnb3RvIHhkZWxldGU7IGVsc2UgbiA9IDA7Ci0jZW5kaWYgLyogQ0tfVFRHV1NJWiAqLwotICAg ICAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgICAg ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTExLCJERUxFVEUgbGVuIix0bXBidWYsbGVuKTsKLSAgICAgICAgICAgICAgICBpZiAoc2lt dWxhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgZmlsZXNwYWNlICs9IGxlbjsKLSAgICAgICAg ICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHhfbGlzID4gMCkg ewotICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMrKzsKLSAgICAgICAgICAgICAgICAgICAg ICAgIHByaW50ZigiICVzIChTRUxFQ1RFRClcbiIsdG1wYnVmKTsKLSAgICAgICAgICAgICAgICAg ICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgeHg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeHggPSBhc2ttb3JlKCk7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF4eCkgZ290byB4ZGVsZXRlOyBlbHNl IG4gPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsZW4gPj0gMCB8fCAhaXRzYWRpcikgeyAvKiBS ZWd1bGFyIGZpbGUgKi8KLSAgICAgICAgICAgICAgICAgICAgemRlbGV0KHRtcGJ1Zik7ICAgICAg ICAgICAgICAgIC8qIG9yIHN5bWxpbmssIGV0Yy4uLiAqLwotICAgICAgICAgICAgICAgICAgICBp ZiAoemNoa2kodG1wYnVmKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzcGFj ZSArPSBsZW47Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKHhfbGlzID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxpbmVzKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgJXMgKE9LKVxu Iix0bXBidWYpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93 cyAtIDMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFza21vcmUoKSkgZ290 byB4ZGVsZXRlOyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgYmFkKys7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gMDsKLSAgICAgICAgICAgICAgICAgICAg ICAgIGlmICh4X2xpcyA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcysr OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICVzIChGQUlMRUQ6ICVzKVxu Iix0bXBidWYsY2tfZXJyc3RyKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgr K24gPiBjbWRfcm93cyAtIDMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFz a21vcmUoKSkgZ290byB4ZGVsZXRlOyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgv KiBwYXNzID4gMCAmJiAqLyBkZWxkaXJzICYmIGl0c2FkaXIpIHsKLSAgICAgICAgICAgICAgICAg ICAgLyogSXQncyBhIGRpcmVjdG9yeSAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoenJtZGly KHRtcGJ1ZikgPiAtMSkgeyAvKiBPbmx5IHdvcmtzIGlmIGVtcHR5ICovCi0gICAgICAgICAgICAg ICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhfbGlzID4g MCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzKys7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCIgJXMgKE9LKVxuIix0bXBidWYpOwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoIWFza21vcmUoKSkgZ290byB4ZGVsZXRlOyBlbHNlIG4gPSAwOwot ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IDA7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBpZiAoeF9saXMgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMr KzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAlcyAoRkFJTEVEOiAlcylc biIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcGJ1ZiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tfZXJyc3RyKCkpOwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoIWFza21vcmUoKSkgZ290byB4ZGVsZXRlOyBlbHNlIG4gPSAwOwotICAg ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgfSBlbHNlIGlmICh4X2xpcyA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgbGluZXMr KzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzZGlyKHRtcGJ1ZikpCi0gICAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCIgJXMgKEZBSUxFRDogZGlyZWN0b3J5KVxuIix0bXBidWYpOwotICAg ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgJXMg KEZBSUxFRDogbm90IGEgcmVndWxhciBmaWxlKVxuIix0bXBidWYpOwotICAgICAgICAgICAgICAg ICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKQotICAgICAgICAgICAgICAgICAgICAgIGlmICgh YXNrbW9yZSgpKSBnb3RvIHhkZWxldGU7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHhfaGRnID4gMCkgewotICAgICAgICAgICAg ICAgIGlmIChsaW5lcyA+IDApCi0gICAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAg ICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykKLSAgICAgICAgICAgICAgICAgIGlm ICghYXNrbW9yZSgpKSBnb3RvIHhkZWxldGU7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICAgICAg cHJpbnRmKCIlZCBmaWxlJXMgJXNkZWxldGVkLCAlZCBieXRlJXMgJXNmcmVlZCVzXG4iLAotICAg ICAgICAgICAgICAgICAgICAgICBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgY291bnQg IT0gMSA/ICJzIiA6ICIiLAotICAgICAgICAgICAgICAgICAgICAgICBzaW11bGF0ZSA/ICJ3b3Vs ZCBiZSAiIDogIiIsCi0gICAgICAgICAgICAgICAgICAgICAgIGZpbGVzcGFjZSwKLSAgICAgICAg ICAgICAgICAgICAgICAgZmlsZXNwYWNlICE9IDEgPyAicyIgOiAiIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgc2ltdWxhdGUgPyAid291bGQgYmUgIiA6ICIiLAotICAgICAgICAgICAgICAgICAg ICAgICBzaW11bGF0ZSA/ICIgKG1heWJlKSIgOiAiIgotICAgICAgICAgICAgICAgICAgICAgICAp OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCF4X2xpcyAmJiAhc3VjY2VzcyAmJiAh cXVpZXQpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9ERUxFVEUgZmFpbGVkIGZvciAlZCBm aWxlJXMgXAotKHVzZSBERUxFVEUgL0xJU1QgdG8gc2VlIGRldGFpbHMpXG4iLAotICAgICAgICAg ICAgICAgICAgICAgICBiYWQsIGJhZCA9PSAxID8gIiIgOiAicyIKLSAgICAgICAgICAgICAgICAg ICAgICAgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICh4X2xpcyA+IDApIHsK LSAgICAgICAgICAgIGlmIChlcnJubykKLSAgICAgICAgICAgICAgcHJpbnRmKCI/JXM6ICVzXG4i LGNrX2VycnN0cigpLCB0bXBidWYpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBw cmludGYoIj9DYW4ndCBkZWxldGU6ICVzXG4iLHRtcGJ1Zik7Ci0gICAgICAgIH0KLSAgICB9Ci0j ZWxzZSAvKiBPUzJPUlVOSVggKi8KLSNpZm5kZWYgVk1TICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBPdGhlcnMgLSBsZXQgdGhlIHN5c3RlbSBkbyBpdC4gKi8KLSAgICB4c3lzdGVtKGxp bmUpOwotICAgIHggPSBuenhwYW5kKHRtcGJ1ZixuenhvcHRzKTsKLSAgICBzdWNjZXNzID0gKHgg PiAwKSA/IDAgOiAxOwotICAgIGlmICh4X2hkZyA+IDApCi0gICAgICBwcmludGYoIiVzIC0gJXNk ZWxldGVkXG4iLCB0bXBidWYsIHN1Y2Nlc3MgPyAiIiA6ICJub3QgIik7Ci0jZWxzZQotICAgIGlm IChhc2tpbmcpCi0gICAgICBwcmludGYoIlxuIik7Ci0gICAgeCA9IHhzeXN0ZW0obGluZSk7ICAg ICAgICAgICAgICAgICAgLyogenNoY21kIHJldHVybnMgMSBmb3Igc3VjY2VzcyAqLwotICAgIHN1 Y2Nlc3MgPSAoeCA+IDApID8gMSA6IDA7Ci0gICAgaWYgKHhfaGRnID4gMCAmJiAhYXNraW5nKQot ICAgICAgcHJpbnRmKCIlcyAtICVzZGVsZXRlZFxuIiwgdG1wYnVmLCBzdWNjZXNzID8gIiIgOiAi bm90ICIpOwotICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7Ci0jZW5kaWYgLyogVk1TICovCi0jZW5k aWYgLyogT1MyT1JVTklYICovCi0jZW5kaWYgLyogTUFDICovCi0gIHhkZWxldGU6Ci0gICAgaWYg KGdfbWF0Y2hkb3QgPiAtMSkgewotICAgICAgICBtYXRjaGRvdCA9IGdfbWF0Y2hkb3Q7ICAgICAg ICAgIC8qIFJlc3RvcmUgdGhlc2UuLi4gKi8KLSAgICAgICAgZ19tYXRjaGRvdCA9IC0xOwotICAg IH0KLSNpZmRlZiBPUzIKLSAgICBpZiAoeG10Y2hzKSB7Ci0gICAgICAgIGludCBpOwotICAgICAg ICBkZWJ1ZyhGMTAxLCJkb2RlbCBmcmVlaW5nIGxpc3QiLCIiLHhtdGNobik7Ci0gICAgICAgIGZv ciAoaSA9IDA7IGkgPCB4bXRjaG47IGkrKykKLSAgICAgICAgICBpZiAoeG10Y2hzW2ldKSBmcmVl KHhtdGNoc1tpXSk7Ci0gICAgICAgIGZyZWUoeG10Y2hzKTsKLSAgICAgICAgeG10Y2hzID0gTlVM TDsKLSAgICAgICAgeG10Y2huID0gMDsKLSAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0gICAgZGVi dWcoRjEwMSwiZG9kZWwgcmVzdWx0IiwiIixyYyk7Ci0gICAgcmV0dXJuKChyYyA8IDApID8gcmMg OiBzdWNjZXNzKTsKLX0KLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotCi0jaWZuZGVmIE5PU1BMICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIEVMU0UgY29tbWFuZCAqLwotX1BST1RPVFlQ KCBWT0lEIHB1c2hxY21kLCAoY2hhciAqKSApOwotCi1pbnQKLWRvZWxzZSgpIHsKLSAgICBpZiAo IWlmY21kW2NtZGx2bF0pIHsKLSAgICAgICAgcHJpbnRmKCI/RUxTRSBkb2Vzbid0IGZvbGxvdyBJ RlxuIik7Ci0gICAgICAgIHJldHVybigtMik7Ci0gICAgfQotI2lmZGVmIENPTU1FTlQKLS8qCi0g IFdyb25nLiAgVGhpcyBwcmV2ZW50cyBJRi4uRUxTRSBJRi4uLkVMU0UgSUYuLi5FTFNFIElGLi4u RUxTRS4uLgotICBmcm9tIHdvcmtpbmcuCi0qLwotICAgIGlmY21kW2NtZGx2bF0gPSAwOwotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLSAgICBpZiAoIWlmdGVzdFtjbWRsdmxdKSB7ICAgICAgICAgICAg ICAvKiBJZiBJRiB3YXMgZmFsc2UgZG8gRUxTRSBwYXJ0ICovCi0gICAgICAgIGlmIChtYWNsdmwg PiAtMSB8fCB0bGV2ZWwgPiAtMSkgeyAvKiBJbiBtYWNybyBvciBjb21tYW5kIGZpbGUgKi8KLSAg ICAgICAgICAgIGRlYnVnKEYxMDAsImRvZWxzZSBwdXNoaW5nIiwiIiwwKTsKLSNpZm5kZWYgQ09N TUVOVAotICAgICAgICAgICAgcHVzaGNtZChOVUxMKTsgICAgICAgICAgICAgIC8qIHNhdmUgcmVz dCBvZiBjb21tYW5kLiAqLwotI2Vsc2UKLSAgICAgICAgICAgIC8qIFRoaXMgZml4ZXMgY2VydGFp biBvYnNjdXJlIHByb2JsZW1zICovCi0gICAgICAgICAgICAvKiBidXQgYnJlYWtzIG1hbnkgb3Ro ZXIgY29uc3RydWN0aW9ucyB0aGF0IG11c3Qgd29yay4gKi8KLSAgICAgICAgICAgIHB1c2hxY21k KE5VTEwpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBJZiBpbnRlcmFjdGl2ZSwgKi8KLSAgICAgICAgICAgIGNtaW5pKGNr eGVjaCk7ICAgICAgICAgICAgICAvKiBqdXN0IHN0YXJ0IGEgbmV3IGNvbW1hbmQgKi8KLSAgICAg ICAgICAgIHByaW50ZigiXG4iKTsgICAgICAgICAgICAgICAvKiAobGlrZSBpbiBNUy1ET1MgS2Vy bWl0KSAqLwotICAgICAgICAgICAgaWYgKHBmbGFnKSBwcm9tcHQoeHhzdHJpbmcpOwotICAgICAg ICB9Ci0gICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29uZGl0aW9u IGlzIGZhbHNlICovCi0gICAgICAgIGlmICgoeSA9IGNtdHh0KCJjb21tYW5kIHRvIGJlIGlnbm9y ZWQiLCIiLCZzLE5VTEwpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHkpOyAgICAgICAgICAgICAg ICAgICAgLyogR29iYmxlIHVwIHJlc3Qgb2YgbGluZSAqLwotICAgIH0KLSAgICByZXR1cm4oMCk7 Ci19Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT1NQTAotaW50Ci1kb3N3aXRjaCgp IHsKLSAgICBjaGFyICpscCwgKmFwOyAgICAgICAgICAgICAgICAgICAgICAvKiBNYWNybyBhcmd1 bWVudCBwb2ludGVyICovCi0gICAgaW50IGxlbiA9IDAsIHgsIHksIHBwID0gMDsKLSAgICBjaGFy IGJyYnVmWzNdOwotCi0gICAgLyogR2V0IHZhcmlhYmxlIG5hbWUgKi8KLQotICAgIHRtcGJ1Zlsw XSA9IE5VTDsKLSAgICBicmJ1ZlswXSA9ICd7JzsKLSAgICBicmJ1ZlsxXSA9ICd9JzsKLSAgICBi cmJ1ZlsyXSA9IE5VTDsKLQotICAgIHkgPSBjbWZsZCgiVmFyaWFibGUgbmFtZSIsIiIsJnMseHhz dHJpbmcpOwotICAgIGRlYnVnKEYxMTEsImRvc3dpdGNoIGNtZmxkIixzLHkpOwotICAgIGlmICh5 IDwgMCkgewotICAgICAgICBpZiAoeSA9PSAtMykJCQkvKiBCZWNhdXNlIGJyc3RyaXAoKSB3cml0 ZXMgKi8KLSAgICAgICAgICBzID0gYnJidWY7CQkJLyogaW50byBpdHMgYXJndW1lbnQuICovCi0g ICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgfQotICAgIGRlYnVnKEYxMTAs ImRvc3dpdGNoIEEiLHMsMCk7Ci0gICAgaWYgKCFzdHJjbXAocywiKCIpKSB7Ci0gICAgICAgIHBw Kys7Ci0gICAgICAgIGlmICgoeSA9IGNtZmxkKCJWYXJpYWJsZSBuYW1lIiwiIiwmcyx4eHN0cmlu ZykpIDwgMCkgewotICAgICAgICAgICAgaWYgKHkgPT0gLTMpCi0gICAgICAgICAgICAgIHMgPSBi cmJ1ZjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcmV0dXJuKHkpOwotCSAgICBk ZWJ1ZyhGMTEwLCJkb3N3aXRjaCBCIixzLDApOwotICAgICAgICB9Ci0gICAgfQotICAgIGxlbiA9 IGNrc3RybmNweSh0bXBidWYsYnJzdHJpcChzKSxUTVBCVUZTSVopOwotICAgIGlmICh0bXBidWZb MF0gPT0gQ01EUSkgewotICAgICAgICBpZiAoY2hrdmFyKHMpIDwgMSkgewotICAgICAgICAgICAg cHJpbnRmKCI/VmFyaWFibGUgbmFtZSByZXF1aXJlZFxuIik7Ci0gICAgICAgICAgICByZXR1cm4o LTkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChwcCA+IDApIHsgICAgICAgICAgICAgICAg ICAgICAgIC8qIElmIG9wZW4gcGFyZW4gZ2l2ZW4gcGFyc2UgY2xvc2luZyAqLwotICAgICAgICBp ZiAoKHkgPSBjbWZsZCgiQ2xvc2luZyBwYXJlbnRoZXNpcyIsIiIsJnMsTlVMTCkpIDwgMCkKLSAg ICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgIGlmIChzdHJjbXAoYXRtYnVmLCIpIikpIHsKLSAg ICAgICAgICAgIHByaW50ZigiP0Nsb3NpbmcgcGFyZW50aGVzaXMgcmVxdWlyZWRcbiIpOwotICAg ICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBscCA9IGxpbmU7Ci0g ICAgeCA9IGNrc3RybmNweShscCwiX3N3aXR4ICIsTElOQlVGU0laKTsgLyogX3N3aXR4ICsgc3Bh Y2UgKi8KLSAgICBscCArPSB4OwotICAgIGFwID0gbHA7Ci0gICAgZGVidWcoRjAxMCwiU1dJVENI IGEiLGxpbmUsMCk7Ci0KLSNpZmRlZiBDT01NRU5UCi0gICAgeCA9IGNrbWFrbXNnKGxwLExJTkJV RlNJWi14LHRtcGJ1ZiwiICIsTlVMTCxOVUxMKTsgLyogdmFyaWFibGUgbmFtZSArIFNQICovCi0j ZWxzZQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHZhcmlhYmxl IG5hbWUgKyBTUCAqLwotICAgICAgICBjaGFyICogcCA9IHRtcGJ1ZjsKLQlpZiAobGVuID4gMCkg ewotCSAgICBpZiAodG1wYnVmWzBdID09ICcoJyAmJiB0bXBidWZbbGVuLTFdID09ICcpJykgewot CQl0bXBidWZbbGVuLTFdID0gTlVMOwotCQlwKys7Ci0JICAgIH0KLSAgICAgICAgfQotICAgICAg ICB4ID0gY2ttYWttc2cobHAsTElOQlVGU0laLXgsInsiLGJyc3RyaXAocCksIn0iLCIgIik7Ci0g ICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICBkZWJ1ZyhGMDEwLCJTV0lUQ0ggYiIsbGlu ZSwwKTsKLSAgICBscCArPSB4OwotCi0gICAgLyogR2V0IGJvZHkgKi8KLQotICAgIGlmICgoeSA9 IGNtdHh0KCJzZXJpZXMgb2YgY2FzZXMiLCIiLCZzLE5VTEwpKSA8IDApIHJldHVybih5KTsKLSAg ICBpZiAoKHkgPSAoaW50KXN0cmxlbihzKSkgPCAxKSByZXR1cm4oLTIpOwotICAgIGlmIChzWzBd ICE9ICd7JyAmJiBzW3ktMV0gIT0gJ30nKSB7IC8qIFN1cHBseSBicmFjZXMgaWYgbWlzc2luZyAq LwotICAgICAgICBja21ha21zZyh0bXBidWYsVE1QQlVGU0laLCJ7ICIscywiIH0iLE5VTEwpOwot ICAgICAgICBzID0gdG1wYnVmOwotICAgIH0KLSAgICBpZiAobGl0Y21kKCZzLCZscCwoTElOQlVG U0laIC0gKGxwIC0gKGNoYXIgKilsaW5lKSAtIDIpKSA8IDApIHsKLSAgICAgICAgcHJpbnRmKCI/ VW5iYWxhbmNlZCBicmFjZXNcbiIpOwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotICAgIGRl YnVnKEYwMTAsIlNXSVRDSCBjIixsaW5lLDApOwotCi0gICAgeCA9IG1sb29rKG1hY3RhYiwiX3N3 aXR4IixubWFjKTsgICAgLyogTG9vayB1cCBTV0lUQ0ggbWFjcm8gZGVmaW5pdGlvbiAqLwotICAg IGlmICh4IDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCB0aGVyZT8gKi8KLSAg ICAgICAgYWRkbW1hYygiX3N3aXR4Iixzd19kZWYpOyAgICAgICAvKiBQdXQgaXQgYmFjay4gKi8K LSAgICAgICAgaWYgKCh4ID0gbWxvb2sobWFjdGFiLCJfc3dpdHgiLG5tYWMpKSA8IDApIHsgLyog TG9vayBpdCB1cCBhZ2Fpbi4gKi8KLSAgICAgICAgICAgIHByaW50ZigiP1NXSVRDSCBtYWNybyBk ZWZpbml0aW9uIGdvbmUhXG4iKTsgLyogU2hvdWxkbid0IGhhcHBlbi4gKi8KLSAgICAgICAgICAg IHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZGVidWcoRjAxMCwi U1dJVENIIGNvbW1hbmQiLGxpbmUsMCk7IC8qIEV4ZWN1dGUgdGhlIFNXSVRDSCBtYWNyby4gKi8K LSAgICBzdWNjZXNzID0gZG9kbyh4LGFwLGNtZHN0a1tjbWRsdmxdLmNjZmxncyB8IENGX0lNQUMp OwotICAgIGRlYnVnKEYxMDEsIlNXSVRDSCBzdGF0dXMiLCIiLHN1Y2Nlc3MpOwotICAgIHJldHVy bihzdWNjZXNzKTsKLX0KLQotaW50Ci1kb2ZvcigpIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogVGhlIEZPUiBjb21tYW5kLiAqLwotICAgIGludCBpLCBmeCwgZnksIGZ6OyAgICAg ICAgICAgICAgICAgIC8qIGxvb3AgdmFyaWFibGVzICovCi0gICAgY2hhciAqYXAsICpkaTsgICAg ICAgICAgICAgICAgICAgICAgLyogbWFjcm8gYXJndW1lbnQgcG9pbnRlciAqLwotICAgIGludCBw cCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhcmVuIGxldmVsICovCi0gICAgaW50 IG11c3RxdW90ZSA9IDA7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0gICAgICAg IGlmICgoeSA9IGNtZmxkKCJWYXJpYWJsZSBuYW1lIiwiIiwmcyxOVUxMKSkgPCAwKSB7Ci0gICAg ICAgICAgICBpZiAoeSA9PSAtMykgewotICAgICAgICAgICAgICAgIHByaW50ZigiP1ZhcmlhYmxl IG5hbWUgcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAg ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICB9Ci0gICAgICAg IGlmIChzdHJjbXAocywiKCIpKQotICAgICAgICAgIGJyZWFrOwotICAgICAgICBwcCsrOwotICAg IH0KLSNpZmRlZiBDT01NRU5UCi0gICAgaWYgKCh5ID0gcGFyc2V2YXIocywmeCwmeikpIDwgMCkg ICAgLyogQ2hlY2sgdmFyaWFibGUuICovCi0gICAgICByZXR1cm4oeSk7Ci0jZWxzZQotICAgIGlm ICgqcyA9PSBDTURRKSAgICAgICAgICAgICAgICAgICAgIC8qIElmIGxvb3AgdmFyaWFibGUgc3Rh cnRzIHdpdGggKi8KLSAgICAgIG11c3RxdW90ZSsrOyAgICAgICAgICAgICAgICAgICAgICAvKiBi YWNrc2xhc2gsIG11c3RxdW90ZSBpcyA+IDAuICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0g ICAgbHAgPSBsaW5lOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQnVpbGQgYSBjb3B5IG9m IHRoZSBjb21tYW5kICovCi0gICAgY2tzdHJuY3B5KGxwLCJfZm9yeCAiLExJTkJVRlNJWik7Ci0g ICAgbHAgKz0gKGludClzdHJsZW4obGluZSk7ICAgICAgICAgICAgLyogIl9mb3IiIG1hY3JvLiAq LwotICAgIGFwID0gbHA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNhdmUgcG9pbnRl ciB0byBtYWNybyBhcmdzLiAqLwotCi0gICAgaWYgKCpzID09IENNRFEpIHMrKzsgICAgICAgICAg ICAgICAgLyogU2tpcCBwYXN0IGJhY2tzbGFzaCBpZiBhbnkuICovCi0gICAgd2hpbGUgKCgqbHAr KyA9ICpzKyspKSA7ICAgICAgICAgICAgLyogY29weSBpdCAqLwotICAgIGxwLS07ICpscCsrID0g U1A7ICAgICAgICAgICAgICAgICAgIC8qIGFkZCBhIHNwYWNlICovCi0KLSAgICBpZiAoKHkgPSBj bW51bSgiaW5pdGlhbCB2YWx1ZSIsIiIsMTAsJmZ4LHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAg IGlmICh5ID09IC0zKSByZXR1cm4oLTIpOwotICAgICAgICBlbHNlIHJldHVybih5KTsKLSAgICB9 Ci0gICAgZGVidWcoRjEwMSwiZG9mb3IgZngiLCIiLGZ4KTsKLSAgICBzID0gYXRtYnVmOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBDb3B5IHRoZSBhdG9tIGJ1ZmZlciAqLwotCi0gICAgaWYg KChpbnQpc3RybGVuKHMpIDwgMSkgZ290byBiYWRmb3I7Ci0vKgotICBJbiBlZGl0IDE5Miwgd2Ug Y2hhbmdlIHRoZSBsb29wIHZhcmlhYmxlcyB0byBiZSBldmFsdWF0ZWQgYXQgbG9vcCBlbnRyeSwK LSAgbm90IGVhY2ggdGltZSB0aHJvdWdoIHRoZSBsb29wLiAgVGhpcyB3YXMgcmVxdWlyZWQgaW4g b3JkZXIgdG8gYWxsb3cKLSAgXHYoYXJnYykgdG8gYmUgdXNlZCBhcyBhIGxvb3AgdmFyaWFibGUs IG9yIGluIGEgbG9vcC12YXJpYWJsZSBleHByZXNzaW9uLgotICBUaHVzLCB3ZSBjYW4ndCBoYXZl IEZPUiBsb29wcyB0aGF0IG1vZGlmeSB0aGVpciBvd24gZXhpdCBjb25kaXRpb25zIGJ5Ci0gIGNo YW5naW5nIHRoZSBmaW5hbCB2YWx1ZSBvciB0aGUgaW5jcmVtZW50LiAgVGhlIHByb2JsZW0gd2l0 aCBcdihhcmdjKSB3YXMKLSAgdGhhdCBpdCBpcyBvbiB0aGUgbWFjcm8gc3RhY2s7IGFmdGVyIGVu dHJ5IGludG8gdGhlIF9mb3J4IG1hY3JvLCBpdCBpcyBhdAotICB0aGUgd3JvbmcgcGxhY2UuCi0q LwotICAgIHNwcmludGYodG1wYnVmLCIlZCIsZngpOyAgICAgICAgICAgIC8qIChTQUZFKSBTdWJz dGl0dXRlIGFjdHVhbCB2YWx1ZSAqLwotICAgIHMgPSB0bXBidWY7Ci0gICAgd2hpbGUgKCgqbHAr KyA9ICpzKyspKSA7ICAgICAgICAgICAgLyogKHdoYXQgdGhleSBhY3R1YWxseSB0eXBlZCkgKi8K LSAgICBscC0tOyAqbHArKyA9IFNQOwotI2lmZGVmIERFQlVHCi0gICAgKmxwID0gTlVMOwotICAg IGRlYnVnKEYxMTAsIkZPUiBBIixsaW5lLDApOwotI2VuZGlmIC8qIERFQlVHICovCi0KLSAgICBp ZiAoKHkgPSBjbW51bSgiZmluYWwgdmFsdWUiLCIiLDEwLCZmeSx4eHN0cmluZykpIDwgMCkgewot ICAgICAgICBpZiAoeSA9PSAtMykgcmV0dXJuKC0yKTsKLSAgICAgICAgZWxzZSByZXR1cm4oeSk7 Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsImRvZm9yIGZ5IiwiIixmeSk7Ci0gICAgcyA9IGF0bWJ1 ZjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2FtZSBkZWFsICovCi0gICAgaWYgKChpbnQp c3RybGVuKHMpIDwgMSkKLSAgICAgIGdvdG8gYmFkZm9yOwotCi0gICAgc3ByaW50Zih0bXBidWYs IiVkIixmeSk7ICAgICAgICAgICAgLyogU0FGRSAqLwotICAgIHMgPSB0bXBidWY7Ci0gICAgd2hp bGUgKCgqbHArKyA9ICpzKyspKSA7Ci0gICAgbHAtLTsKLSAgICAqbHArKyA9IFNQOwotI2lmZGVm IERFQlVHCi0gICAgKmxwID0gTlVMOwotICAgIGRlYnVnKEYxMTAsIkZPUiBCIixsaW5lLDApOwot I2VuZGlmIC8qIERFQlVHICovCi0KLSAgICB4X2lmbnVtID0gMTsgICAgICAgICAgICAgICAgICAg ICAgICAvKiBJbmNyZW1lbnQgb3IgcGFyZW50aGVzaXMgKi8KLSAgICBkaSA9IChmeCA8IGZ5KSA/ ICIxIiA6ICItMSI7ICAgICAgICAvKiBEZWZhdWx0IGluY3JlbWVudCAqLwotICAgIGlmICgoeSA9 IGNtbnVtKCJpbmNyZW1lbnQiLGRpLDEwLCZmeix4eHN0cmluZykpIDwgMCkgewotICAgICAgICBk ZWJ1ZyhGMTExLCJkb2ZvciBpbmNyZW1lbnQiLGF0bWJ1Zix5KTsKLSAgICAgICAgeF9pZm51bSA9 IDA7Ci0gICAgICAgIGlmICh5ID09IC0zKSB7ICAgICAgICAgICAgICAgICAgLyogUHJlbWF0dXJl IHRlcm1pbmF0aW9uICovCi0gICAgICAgICAgICByZXR1cm4oLTIpOwotICAgICAgICB9IGVsc2Ug aWYgKHkgPT0gLTIpIHsgICAgICAgICAgIC8qIE1heWJlIGNsb3NpbmcgcGFyZW4gKi8KLSAgICAg ICAgICAgIGlmICghc3RyY21wKGF0bWJ1ZiwiKSIpKSB7Ci0gICAgICAgICAgICAgICAgcHAtLTsg ICAgICAgICAgICAgICAgICAgLyogQ291bnQgaXQgKi8KLSAgICAgICAgICAgICAgICBzID0gZGk7 ICAgICAgICAgICAgICAgICAvKiBzdXBwbHkgZGVmYXVsdCBpbnRlcnZhbCAqLwotICAgICAgICAg ICAgICAgIGZ6ID0gYXRvaShzKTsKLSAgICAgICAgICAgIH0gZWxzZSAgICAgICAgICAgICAgICAg ICAgICAvKiBOb3QgY2xvc2luZyBwYXJlbiwgaW52YWxpZCAqLwotICAgICAgICAgICAgICByZXR1 cm4oeSk7Ci0gICAgICAgIH0gZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3RoZXIg ZXJyb3IgKi8KLSAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgfSBlbHNlIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogTnVtYmVyICovCi0gICAgICAgIHhfaWZudW0gPSAwOwotICAgICAg ICBkZWJ1ZyhGMTAxLCJkb2ZvciBmeiIsIiIsZnopOwotICAgICAgICBzID0gYXRtYnVmOyAgICAg ICAgICAgICAgICAgICAgIC8qIFVzZSBpdCAqLwotICAgIH0KLSAgICBpZiAoKGludClzdHJsZW4o cykgPCAxKQotICAgICAgZ290byBiYWRmb3I7Ci0KLSAgICBzcHJpbnRmKHRtcGJ1ZiwiJWQiLGZ6 KTsgICAgICAgICAgICAvKiAoU0FGRSkgU2FtZSBkZWFsICovCi0gICAgcyA9IHRtcGJ1ZjsKLSAg ICB3aGlsZSAoKCpscCsrID0gKnMrKykpIDsKLSAgICBscC0tOyAqbHArKyA9IFNQOwotCi0jaWZk ZWYgREVCVUcKLSAgICAqbHAgPSBOVUw7Ci0gICAgZGVidWcoRjExMCwiRk9SIEMiLGxpbmUsMCk7 Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotICAgIC8qIEluc2VydCB0aGUgYXBwcm9wcmlhdGUgY29t cGFyaXNvbiBvcGVyYXRvciAqLwotICAgIGlmIChmeiA8IDApCi0gICAgICAqbHArKyA9ICc8JzsK LSAgICBlbHNlCi0gICAgICAqbHArKyA9ICc+JzsKLSAgICAqbHArKyA9IFNQOwotCi0jaWZkZWYg REVCVUcKLSAgICAqbHAgPSBOVUw7Ci0gICAgZGVidWcoRjExMCwiRk9SIEQiLGxpbmUsMCk7Ci0j ZW5kaWYgLyogREVCVUcgKi8KLQotICAgIGlmIChwcCA+IDApIHsgICAgICAgICAgICAgICAgICAg ICAgIC8qIElmIG9wZW4gcGFyZW4gZ2l2ZW4gcGFyc2UgY2xvc2luZyAqLwotICAgICAgICBpZiAo KHkgPSBjbWZsZCgiQ2xvc2luZyBwYXJlbnRoZXNpcyIsIiIsJnMsTlVMTCkpIDwgMCkKLSAgICAg ICAgICByZXR1cm4oeSk7Ci0gICAgICAgIGlmIChzdHJjbXAoYXRtYnVmLCIpIikpIHsKLSAgICAg ICAgICAgIHByaW50ZigiP0Nsb3NpbmcgcGFyZW50aGVzaXMgcmVxdWlyZWRcbiIpOwotICAgICAg ICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoKHkgPSBjbXR4dCgi Q29tbWFuZCB0byBleGVjdXRlIiwiIiwmcyxOVUxMKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgaWYg KCh5ID0gKGludClzdHJsZW4ocykpIDwgMSkgcmV0dXJuKC0yKTsKLSAgICBpZiAoc1swXSAhPSAn eycgJiYgc1t5LTFdICE9ICd9JykgeyAvKiBTdXBwbHkgYnJhY2VzIGlmIG1pc3NpbmcgKi8KLSAg ICAgICAgY2ttYWttc2codG1wYnVmLFRNUEJVRlNJWiwieyAiLHMsIiB9IixOVUxMKTsKLSAgICAg ICAgcyA9IHRtcGJ1ZjsKLSAgICB9Ci0gICAgaWYgKGxpdGNtZCgmcywmbHAsKExJTkJVRlNJWiAt IChscCAtIChjaGFyICopbGluZSkgLSAyKSkgPCAwKSB7Ci0gICAgICAgIHByaW50ZigiP1VuYmFs YW5jZWQgYnJhY2VzXG4iKTsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNpZmRlZiBERUJV RwotICAgICpscCA9IE5VTDsKLSAgICBkZWJ1ZyhGMTEwLCJGT1IgRSIsbGluZSwwKTsKLSNlbmRp ZiAvKiBERUJVRyAqLwotCi0jaWZkZWYgQ09NTUVOVAotLyogVG9vIHN0cmljdCAqLwotICAgIGlm IChmeiA9PSAwKSB7Ci0gICAgICAgIHByaW50ZigiP1plcm8gaW5jcmVtZW50IG5vdCBhbGxvd2Vk XG4iKTsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0v KgotICBJbiB2ZXJzaW9uIDguMCB3ZSBkZWNpZGVkIHRvIGFsbG93IG1hY3JvIG5hbWVzIGFueXBs YWNlIGEgbnVtZXJpYy12YWxlZAotICB2YXJpYWJsZSBjb3VsZCBhcHBlYXIuICBCdXQgdGhpcyBj YXVzZWQgdHJvdWJsZSBmb3IgdGhlIEZPUiBsb29wcyBiZWNhdXNlCi0gIHRoZSBxdW90aW5nIGlu IGZvcl9kZWZbXSBhc3N1bWVkIGEgXCVpLXN0eWxlIGxvb3AgdmFyaWFibGUuICBXZSBhY2NvdW50 Ci0gIGZvciB0aGlzIGhlcmUgaW4gdGhlIGlmIChtdXN0cXVvdGUpLi4uZWxzZSBsb2dpYyBieSBp bnZva2luZyBzZXBhcmF0ZQotICBGT1IgbWFjcm8gZGVmaW5pdGlvbnMgaW4gdGhlIHR3byBjYXNl cy4KLSovCi0gICAgaWYgKG11c3RxdW90ZSkgeyAgICAgICAgICAgICAgICAgICAgLyogXCVpLXN0 eWxlIGxvb3AgdmFyaWFibGUgKi8KLSAgICAgICAgeCA9IG1sb29rKG1hY3RhYiwiX2ZvcngiLG5t YWMpOyAvKiBMb29rIHVwIEZPUiBtYWNybyBkZWZpbml0aW9uICovCi0gICAgICAgIGlmICh4IDwg MCkgeyAgICAgICAgICAgICAgICAgICAgLyogTm90IHRoZXJlPyAqLwotICAgICAgICAgICAgYWRk bW1hYygiX2ZvcngiLGZvcl9kZWYpOyAgIC8qIFB1dCBpdCBiYWNrLiAqLwotICAgICAgICAgICAg aWYgKCh4ID0gbWxvb2sobWFjdGFiLCJfZm9yeCIsbm1hYykpIDwgMCkgeyAvKiBMb29rIGl0IHVw IGFnYWluLiAqLwotICAgICAgICAgICAgICAgIHByaW50ZigiP0ZPUiBtYWNybyBkZWZpbml0aW9u IGdvbmUhXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAg ICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogTG9vcCB2YXJpYWJsZSBpcyBhIG1hY3JvICovCi0gICAgICAgIHggPSBtbG9vayhtYWN0 YWIsIl9mb3J6IixubWFjKTsKLSAgICAgICAgaWYgKHggPCAwKSB7Ci0gICAgICAgICAgICBhZGRt bWFjKCJfZm9yeiIsZm96X2RlZik7Ci0gICAgICAgICAgICBpZiAoKHggPSBtbG9vayhtYWN0YWIs Il9mb3J6IixubWFjKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/Rk9SIG1hY3Jv IGRlZmluaXRpb24gZ29uZSFcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0g MCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZGVidWcoRjAxMCwiRk9S IGNvbW1hbmQiLGxpbmUsMCk7ICAgLyogRXhlY3V0ZSB0aGUgRk9SIG1hY3JvLiAqLwotICAgIHJl dHVybihzdWNjZXNzID0gZG9kbyh4LGFwLGNtZHN0a1tjbWRsdmxdLmNjZmxncyB8IENGX0lNQUMp KTsKLQotYmFkZm9yOgotICAgIHByaW50ZigiP0luY29tcGxldGUgRk9SIGNvbW1hbmRcbiIpOwot ICAgIHJldHVybigtMik7Ci19Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotCi0jaWZuZGVmIE5PU1BM Ci0KLS8qICBUIE8gRCAyIFMgRSBDICAtLSAgQ29udmVydCB0aW1lIG9mIGRheSBhcyBoaDptbTpz cyB0byBzZWNzIHNpbmNlIG1pZG5pdGUgKi8KLS8qCi0gIENhbGwgd2l0aCBhIHN0cmluZyBoaDpt bSBvciBoaDptbTpzcy4KLSAgUmV0dXJucyBhIDAgdG8gODY0MDAgb24gc3VjY2Vzcywgb3IgYSBu ZWdhdGl2ZSBudW1iZXIgb24gZmFpbHVyZS4KLSovCi1sb25nCi10b2Qyc2VjKHQpIGNoYXIgKiB0 OyB7Ci0gICAgbG9uZyB0MjsKLSAgICBsb25nIGhoID0gMEwsIG1tID0gMEwsIHNzID0gMEw7Ci0K LSAgICBpZiAoIXQpIHQgPSAiIjsKLSAgICBpZiAoISp0KQotICAgICAgcmV0dXJuKC0zTCk7Ci0g ICAgZGVidWcoRjExMCwidG9kMnNlYyIsdCwwKTsKLQotICAgIGlmIChpc2RpZ2l0KCp0KSkgICAg ICAgICAgICAgICAgICAgIC8qIEdldCBob3VycyBmcm9tIGFyZ3VtZW50ICovCi0gICAgICBoaCA9 ICp0KysgLSAnMCc7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKC0xTCk7Ci0gICAgaWYgKGlzZGln aXQoKnQpKQotICAgICAgaGggPSBoaCAqIDEwICsgKnQrKyAtICcwJzsKLSNpZmRlZiBDT01NRU5U Ci0gICAgaWYgKGhoID4gMjRMKQotICAgICAgcmV0dXJuKC0xTCk7Ci0jZW5kaWYgLyogQ09NTUVO VCAqLwotICAgIGlmICgqdCA9PSAnOicpCi0gICAgICB0Kys7Ci0gICAgZWxzZSBpZiAoISp0KQot ICAgICAgZ290byB4dG9kMnNlYzsKLSAgICBlbHNlCi0gICAgICByZXR1cm4oLTFMKTsKLQotICAg IGlmIChpc2RpZ2l0KCp0KSkgICAgICAgICAgICAgICAgICAgIC8qIE1pbnV0ZXMgKi8KLSAgICAg IG1tID0gKnQrKyAtICcwJzsKLSAgICBlbHNlCi0gICAgICByZXR1cm4oLTFMKTsKLSAgICBpZiAo aXNkaWdpdCgqdCkpCi0gICAgICBtbSA9IG1tICogMTAgKyAqdCsrIC0gJzAnOwotICAgIGlmICht bSA+IDYwTCkKLSAgICAgIHJldHVybigtMUwpOwotICAgIGlmICgqdCA9PSAnOicpCi0gICAgICB0 Kys7Ci0gICAgZWxzZSBpZiAoISp0KQotICAgICAgZ290byB4dG9kMnNlYzsKLSAgICBlbHNlCi0g ICAgICByZXR1cm4oLTFMKTsKLQotICAgIGlmIChpc2RpZ2l0KCp0KSkgICAgICAgICAgICAgICAg ICAgIC8qIFNlY29uZHMgKi8KLSAgICAgIHNzID0gKnQrKyAtICcwJzsKLSAgICBlbHNlCi0gICAg ICByZXR1cm4oLTFMKTsKLSAgICBpZiAoaXNkaWdpdCgqdCkpCi0gICAgICBzcyA9IHNzICogMTAg KyAqdCsrIC0gJzAnOwotICAgIGlmIChzcyA+IDYwTCkKLSAgICAgIHJldHVybigtMUwpOwotCi0g ICAgaWYgKCp0ID4gMzIpICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gdHJhaWxpbmcganVu ayBhbGxvd2VkICovCi0gICAgICByZXR1cm4oLTFMKTsKLQotICB4dG9kMnNlYzoKLQotICAgIHQy ID0gaGggKiAzNjAwTCArIG1tICogNjBMICsgc3M7ICAgIC8qIFNlY29uZHMgc2luY2UgbWlkbmln aHQgZnJvbSBhcmcgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ0b2Qyc2VjIHQyIiwiIix0Mik7Ci0KLSAg ICByZXR1cm4odDIpOwotfQotCi1pbnQgd2FpdGludGVydmFsID0gMTsKLQotI2lmZGVmIE9MRFdB SVQKLSN1bmRlZiBPTERXQUlUCi0jZW5kaWYgLyogT0xEV0FJVCAqLwotCi1pbnQga2JjaGFyID0g TlVMOwotCi1pbnQKLWRvcGF1cyhjeCkgaW50IGN4OyB7Ci0gICAgbG9uZyB6ejsKLSAgICBleHRl cm4gaW50IHNsZWVwY2FuOwotCi0jaWZkZWYgT0xEV0FJVAotICAgIHp6ID0gLTFMOwotICAgIHhf aWZudW0gPSAxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIGludGVybmFsIGNv bXBsYWludHMgKi8KLSAgICBpZiAoY3ggPT0gWFhXQUkpCi0gICAgICB5ID0gY21udW0oInNlY29u ZHMgdG8gd2FpdCwgb3IgdGltZSBvZiBkYXkgaGg6bW06c3MiLCIxIiwxMCwmeCx4eHN0cmluZyk7 Ci0gICAgZWxzZSBpZiAoY3ggPT0gWFhQQVUpCi0gICAgICB5ID0gY21udW0oInNlY29uZHMgdG8g cGF1c2UsIG9yIHRpbWUgb2YgZGF5IGhoOm1tOnNzIiwKLSAgICAgICAgICAgICAgICAiMSIsMTAs JngseHhzdHJpbmcpOwotICAgIGVsc2UKLSAgICAgIHkgPSBjbW51bSgibWlsbGlzZWNvbmRzIHRv IHNsZWVwLCBvciB0aW1lIG9mIGRheSBoaDptbTpzcyIsCi0gICAgICAgICAgICAgICAgIjEwMCIs MTAsJngseHhzdHJpbmcpOwotICAgIHhfaWZudW0gPSAwOwotICAgIGlmICh5IDwgMCkgewotICAg ICAgICBpZiAoeSA9PSAtMikgeyAgICAgICAgICAgICAgICAgIC8qIEludmFsaWQgbnVtYmVyIG9y IGV4cHJlc3Npb24gKi8KLSAgICAgICAgICAgIGNoYXIgKnAgPSB0bXBidWY7ICAgICAgICAgICAv KiBSZXRyaWV2ZSBzdHJpbmcgZnJvbSBhdG1idWYgKi8KLSAgICAgICAgICAgIGludCBuID0gVE1Q QlVGU0laOwotICAgICAgICAgICAgKnAgPSBOVUw7Ci0gICAgICAgICAgICB6enN0cmluZyhhdG1i dWYsJnAsJm4pOyAgICAgLyogRXZhbHVhdGUgaW4gY2FzZSBpdCdzIGEgdmFyaWFibGUgKi8KLSAg ICAgICAgICAgIHp6ID0gdG9kMnNlYyh0bXBidWYpOyAgICAgICAvKiBDb252ZXJ0IHRvIHNlY3Mg c2luY2UgbWlkbmlnaHQgKi8KLSAgICAgICAgICAgIGlmICh6eiA8IDBMKSB7Ci0gICAgICAgICAg ICAgICAgcHJpbnRmKCI/TnVtYmVyLCBleHByZXNzaW9uLCBvciB0aW1lIG9mIGRheSByZXF1aXJl ZFxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICAgICAgY2hhciBub3dbMzJdOyAgICAgICAgICAgLyogQ3VycmVudCB0aW1l ICovCi0gICAgICAgICAgICAgICAgY2hhciAqcDsKLSAgICAgICAgICAgICAgICBsb25nIHRub3c7 Ci0gICAgICAgICAgICAgICAgcCA9IG5vdzsKLSAgICAgICAgICAgICAgICB6dGltZSgmcCk7Ci0g ICAgICAgICAgICAgICAgdG5vdyA9IGF0b2wocCsxMSkgKiAzNjAwTCArIGF0b2wocCsxNCkgKiA2 MEwgKyBhdG9sKHArMTcpOwotICAgICAgICAgICAgICAgIGlmICh6eiA8IHRub3cpICAgICAgICAg IC8qIFVzZXIncyB0aW1lIGJlZm9yZSBub3cgKi8KLSAgICAgICAgICAgICAgICAgIHp6ICs9IDg2 NDAwTDsgICAgICAgICAvKiBTbyBtYWtlIGl0IHRvbW9ycm93ICovCi0gICAgICAgICAgICAgICAg enogLT0gdG5vdzsgICAgICAgICAgICAgLyogU2Vjb25kcyBmcm9tIG5vdy4gKi8KLSAgICAgICAg ICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgcmV0dXJuKHkpOwotICAgIH0KLSAgICBp ZiAoeCA8IDApIHggPSAwOwotICAgIHN3aXRjaCAoY3gpIHsKLSAgICAgIGNhc2UgWFhQQVU6ICAg ICAgICAgICAgICAgICAgICAgICAvKiBQQVVTRSAqLwotICAgICAgY2FzZSBYWE1TTDogICAgICAg ICAgICAgICAgICAgICAgIC8qIE1TTEVFUCAqLwotICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8 IDApIHJldHVybih5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFhYV0FJOiAgICAgICAg ICAgICAgICAgICAgICAgLyogV0FJVCAqLwotICAgICAgICB6ID0gMDsgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIE1vZGVtIHNpZ25hbCBtYXNrICovCi0gICAgICAgIHdoaWxlICgxKSB7ICAg ICAgICAgICAgICAgICAgICAgLyogUmVhZCB6ZXJvIG9yIG1vcmUgc2lnbmFsIG5hbWVzICovCi0g ICAgICAgICAgICB5ID0gY21rZXkobXN0YWIsbm1zLCJtb2RlbSBzaWduYWwiLCIiLHh4c3RyaW5n KTsKLSAgICAgICAgICAgIGlmICh5ID09IC0zKSBicmVhazsgICAgICAgICAvKiAtMyBtZWFucyB0 aGV5IHR5cGVkIENSICovCi0gICAgICAgICAgICBpZiAoeSA8IDApIHJldHVybih5KTsgICAgICAg LyogT3RoZXIgbmVnYXRpdmVzIGFyZSBlcnJvcnMgKi8KLSAgICAgICAgICAgIHogfD0geTsgICAg ICAgICAgICAgICAgICAgICAvKiBPUiB0aGUgYml0IGludG8gdGhlIHNpZ25hbCBtYXNrICovCi0g ICAgICAgIH0KLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAg ICAgIGJyZWFrOwotCi0gICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgLyog U2hvdWxkbid0IGhhcHBlbiAqLwotICAgICAgICByZXR1cm4oLTIpOwotICAgIH0KLQotLyogQ29t bWFuZCBpcyBlbnRlcmVkLCBub3cgZG8gaXQuICovCi0KLSAgICBpZiAoenogPiAtMUwpIHsgICAg ICAgICAgICAgICAgICAgICAvKiBUaW1lIG9mIGRheSBnaXZlbj8gKi8KLSAgICAgICAgeCA9IHp6 OwotICAgICAgICBpZiAoenogIT0gKGxvbmcpIHgpIHsKLSAgICAgICAgICAgIHByaW50ZigKLSJT b3JyeSwgYXJpdGhtZXRpYyBvdmVyZmxvdyAtIGhoOm1tOnNzIG5vdCB1c2FibGUgb24gdGhpcyBw bGF0Zm9ybS5cbiIKLSAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgcmV0dXJuKC05 KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoY3ggPT0gWFhNU0wpIHsgICAgICAgICAgICAg ICAgICAvKiBNaWxsaXNlY29uZCBzbGVlcCAqLwotICAgICAgICBtc2xlZXAoenogPCAwID8geCA6 IHggKiAxMDAwKTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICB9Ci0gICAgaWYg KGN4ID09IFhYUEFVICYmICFzbGVlcGNhbikgeyAgICAgLyogU0xFRVAgQ0FOQ0VMTEFUSU9OIGlz IE9GRiAqLwotICAgICAgICBzbGVlcCh4KTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsK LSAgICB9Ci0KLSAgICAvKiBXQUlULCBvciBlbHNlIFNMRUVQIHdpdGggY2FuY2VsbGF0aW9uIGFs bG93ZWQuLi4gKi8KLQotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFNsZWVwIGxvb3AgKi8KLSAgICAgICAgaW50IG1kbXNpZzsKLSAgICAgICAgaWYgKHNsZWVwY2Fu KSB7ICAgICAgICAgICAgICAgICAvKiBLZXlib2FyZCBjYW5jZWxsYXRpb24gYWxsb3dlZD8gKi8K LSAgICAgICAgICAgIGlmICh5ID0gY29uY2hrKCkpIHsgICAgICAgICAvKiBEaWQgdGhleSB0eXBl IHNvbWV0aGluZz8gKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICAgICAgd2hpbGUgKHkt LSkgY29uaW5jKDApOyAgLyogWWVzLCBnb2JibGUgaXQgYWxsIHVwICovCi0jZWxzZQotICAgICAg ICAgICAgICAgIC8qIFRoZXJlIGlzIGEgZGViYXRlIG92ZXIgd2hldGhlciBQQVVTRSBzaG91bGQg YWJzb3JiICAgICovCi0gICAgICAgICAgICAgICAgLyogaXRzIGNhbmNlbGxpbmcgY2hhcmFjdGVy KHMpLiAgVGhlcmUgYXJlIHNldmVyYWwgICAgICAgKi8KLSAgICAgICAgICAgICAgICAvKiByZWFz b25zIHdoeSBpdCBzaG91bGQgZ29iYmxlIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXI6ICAqLwotICAg ICAgICAgICAgICAgIC8qICgxKSBNUy1ET1MgS2VybWl0IGRvZXMgaXQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgLyogKDIpIGlmIG5vdCwgc3Vic2VxdWVu dCBQQVVTRSBjb21tYW5kcyB3aWxsIHRlcm1pbmF0ZSAgKi8KLSAgICAgICAgICAgICAgICAvKiAg ICAgaW1tZWRpYXRlbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwot ICAgICAgICAgICAgICAgIC8qICgzKSBpZiBub3QsIHN1YnNlcXVlbnQgQVNLIGNvbW1hbmRzIHdp bGwgdXNlIGl0IGFzICAgICovCi0gICAgICAgICAgICAgICAgLyogICAgIHZhbGlkIGlucHV0LiAg SWYgXDEzLCB0aGVuIGl0IHdpbGwgZ2V0IG5vIGlucHV0ICAgKi8KLSAgICAgICAgICAgICAgICAv KiAoNCkgaWYgbm90LCB0aGVuIHRoZSBjaGFyYWN0ZXIgYXBwZWFycyBvbiB0aGUgY29tbWFuZCAq LwotICAgICAgICAgICAgICAgIC8qICAgICBsaW5lIGFmdGVyIGFsbCBlbmNsb3NpbmcgbWFjcm9z IGFyZSBjb21wbGV0ZS4gICAgICovCi0gICAgICAgICAgICAgICAga2JjaGFyID0gY29uaW5jKDAp OyAgICAgLyogR29iYmxlIG9uZSB1cCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAg ICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBBbmQgcXVpdCBQQVVTaW5nIG9yIFdB SVRpbmcgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoY3ggPT0gWFhX QUkpIHsgICAgICAgICAgICAgIC8qIFdBSVQgKHogPT0gbW9kZW0gc2lnbmFsIG1hc2spICovCi0g ICAgICAgICAgICBkZWJ1ZyhGMTAxLCJXQUlUIHgiLCIiLHgpOwotICAgICAgICAgICAgaWYgKHog PiAwKSB7ICAgICAgICAgICAgICAgIC8qIExvb2tpbmcgZm9yIGFueSBtb2RlbSBzaWduYWxzPyAq LwotICAgICAgICAgICAgICAgIG1kbXNpZyA9IHR0Z21kbSgpOyAgICAgIC8qIFllcywgZ2V0IHRo ZW0gKi8KLSAgICAgICAgICAgICAgICBpZiAobWRtc2lnIDwgMCkgICAgICAgICAvKiBGYWlsZWQg Ki8KLSAgICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAgICAgICAg ICAgaWYgKChtZG1zaWcgJiB6KSA9PSB6KSAgLyogR290IHdoYXQgd2Ugd2FudGVkPyAqLwotICAg ICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsgIC8qIFN1Y2NlZWQgKi8KLSAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIGlmICh4ID09IDApICAgICAgICAgICAgICAgICAvKiBXQUlU IDAgYW5kIGRpZG4ndCBnZXQgb3VyIHNpZ25hbHMgKi8KLSAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgIH0KLSAgICAgICAgc2xlZXAoMSk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBp bnRlcnJ1cHQsIHNsZWVwIG9uZSBzZWNvbmQgKi8KLSAgICB9IHdoaWxlICgtLXggPiAwKTsKLQot ICAgIGlmIChjeCA9PSBYWFdBSSkgICAgICAgICAgICAgICAgICAgIC8qIElmIFdBSVQgYW5kIGxv b3AgZXhoYXVzdGVkICovCi0gICAgICBzdWNjZXNzID0gKHogPT0gMCk7ICAgICAgICAgICAgICAg LyogRmFpbC4gKi8KLSAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAg Ki8KLSAgICAgIHN1Y2Nlc3MgPSAoeCA9PSAwKTsgICAgICAgICAgICAgICAvKiBTZXQgU1VDQ0VT Uy9GQUlMVVJFIGZvciBQQVVTRS4gKi8KLSAgICByZXR1cm4oc3VjY2Vzcyk7Ci0KLSNlbHNlICAv KiBOZXcgY29kZSB1c2VzIGNoYWluZWQgRkRCcyBhbmQgYWxsb3dzIEZJTEUgd2FpdHMuLi4gKi8K LQotICAgIGNoYXIgKiBtID0gIiI7ICAgICAgICAgICAgICAgICAgICAgIC8qIEhlbHAgbWVzc2Fn ZSAqLwotICAgIHN0cnVjdCBGREIgbnUsIGZsOyAgICAgICAgICAgICAgICAgIC8qIFBhcnNlIGZ1 bmN0aW9uIGRlc2NyaXB0b3IgYmxvY2tzICovCi0gICAgaW50IGZpbGV3YWl0ID0gMDsKLSAgICBp bnQgbWRtc2lnID0gMCwgZnMgPSAwOwotICAgIGNoYXIgZmlsZWRhdGVbMzJdOwotCi0gICAga2Jj aGFyID0gMDsKLQotICAgIHN3aXRjaCAoY3gpIHsKLSAgICAgIGNhc2UgWFhXQUk6IG0gPSAic2Vj b25kcyB0byB3YWl0LCBvciB0aW1lIG9mIGRheSBoaDptbTpzcyI7IGJyZWFrOwotICAgICAgY2Fz ZSBYWFBBVTogbSA9ICJzZWNvbmRzIHRvIHBhdXNlLCBvciB0aW1lIG9mIGRheSBoaDptbTpzcyI7 IGJyZWFrOwotICAgICAgY2FzZSBYWE1TTDogbSA9ICJtaWxsaXNlY29uZHMgdG8gc2xlZXAsIG9y IHRpbWUgb2YgZGF5IGhoOm1tOnNzIjsgYnJlYWs7Ci0gICAgfQotICAgIHp6ID0gLTFMOwotICAg IGNtZmRiaSgmbnUsCi0gICAgICAgICAgIF9DTU5VTSwgICAgICAgICAgICAgICAgICAgICAgLyog TnVtYmVyICovCi0gICAgICAgICAgIG0sICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSGVs cCBtZXNzYWdlICovCi0gICAgICAgICAgIChjeCA9PSBYWE1TTCkgPyAiMTAwIiA6ICIxIiwgLyog RGVmYXVsdCAqLwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE4v QSAqLwotICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE4vQSAqLwot ICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE4vQSAqLwotICAgICAg ICAgICB4eHN0cmluZywgICAgICAgICAgICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24g Ki8KLSAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBOL0EgKi8KLSAg ICAgICAgICAgJmZsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZXh0ICovCi0gICAgICAg ICAgICk7Ci0gICAgY21mZGJpKCZmbCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGltZSBv ZiBkYXkgKi8KLSAgICAgICAgICAgX0NNRkxELCAgICAgICAgICAgICAgICAgICAgICAvKiBGaWVs ZCAqLwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhscG1zZyAq LwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8K LSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcg ZGF0YSAqLwotICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRs IG51bWVyaWMgZGF0YSAxICovCi0gICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KLSAgICAgICAgICAgeHhzdHJpbmcsICAgICAg ICAgICAgICAgICAgICAvKiBwcm9jZXNzaW5nIGZ1bmMgKi8KLSAgICAgICAgICAgTlVMTCwgICAg ICAgICAgICAgICAgICAgICAgICAvKiBOL0EgKi8KLSAgICAgICAgICAgTlVMTCAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBObyBuZXh0ICovCi0gICAgICAgICAgICk7Ci0gICAgeCA9IGNtZmRi KCZudSk7ICAgICAgICAgICAgICAgICAgICAgLyogUGFyc2UgYSBudW1iZXIgb3IgYSBmaWVsZCAq LwotICAgIGlmICh4IDwgMCkgewotICAgICAgICBpZiAoeCA9PSAtMykKLSAgICAgICAgICB4ID0g LTI7Ci0gICAgICAgIHJldHVybih4KTsKLSAgICB9Ci0gICAgc3dpdGNoIChjbXJlc3VsdC5mY29k ZSkgewotICAgICAgY2FzZSBfQ01OVU06ICAgICAgICAgICAgICAgICAgICAgIC8qIE51bWJlciAq LwotICAgICAgICB4ID0gY21yZXN1bHQubnJlc3VsdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj YXNlIF9DTUZMRDogICAgICAgICAgICAgICAgICAgICAgLyogRmllbGQgKi8KLSAgICAgICAgenog PSB0b2Qyc2VjKGNtcmVzdWx0LnNyZXN1bHQpOyAvKiBDb252ZXJ0IHRvIHNlY3Mgc2luY2UgbWlk bmlnaHQgKi8KLSAgICAgICAgaWYgKHp6IDwgMEwpIHsKLSAgICAgICAgICAgIHByaW50ZigiP051 bWJlciwgZXhwcmVzc2lvbiwgb3IgdGltZSBvZiBkYXkgcmVxdWlyZWRcbiIpOwotICAgICAgICAg ICAgcmV0dXJuKC05KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNoYXIgbm93WzMy XTsgICAgICAgICAgICAgICAvKiBDdXJyZW50IHRpbWUgKi8KLSAgICAgICAgICAgIGNoYXIgKnA7 Ci0gICAgICAgICAgICBsb25nIHRub3c7Ci0gICAgICAgICAgICBwID0gbm93OwotICAgICAgICAg ICAgenRpbWUoJnApOwotICAgICAgICAgICAgdG5vdyA9IGF0b2wocCsxMSkgKiAzNjAwTCArIGF0 b2wocCsxNCkgKiA2MEwgKyBhdG9sKHArMTcpOwotICAgICAgICAgICAgaWYgKHp6IDwgdG5vdykg ICAgICAgICAgICAgIC8qIFVzZXIncyB0aW1lIGJlZm9yZSBub3cgKi8KLSAgICAgICAgICAgICAg enogKz0gODY0MDBMOyAgICAgICAgICAgICAvKiBTbyBtYWtlIGl0IHRvbW9ycm93ICovCi0gICAg ICAgICAgICB6eiAtPSB0bm93OyAgICAgICAgIC8qIFNlY29uZHMgZnJvbSBub3cuICovCi0gICAg ICAgIH0KLSAgICB9Ci0gICAgZGVidWcoRjEwMSwiUEFVU0UvV0FJVC9NU0xFRVAgenoiLCIiLHp6 KTsKLSAgICBzd2l0Y2ggKGN4KSB7Ci0gICAgICBjYXNlIFhYUEFVOiAgICAgICAgICAgICAgICAg ICAgICAgLyogUEFVU0UgKi8KLSAgICAgIGNhc2UgWFhNU0w6ICAgICAgICAgICAgICAgICAgICAg ICAvKiBNU0xFRVAgKi8KLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7 Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBYWFdBSTogICAgICAgICAgICAgICAgICAgICAg IC8qIFdBSVQgKi8KLSAgICAgICAgeiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBN b2RlbSBzaWduYWwgbWFzayAqLwotICAgICAgICB5ID0gY21rZXkod2FpdHRhYixud2FpdHRhYiwi IiwiIix4eHN0cmluZyk7Ci0gICAgICAgIGlmICh5IDwgMCkgewotICAgICAgICAgICAgaWYgKHkg PT0gLTMpIHsKLSAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCi0gICAgICAg ICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICB9IGVsc2UKLSAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICB9Ci0gICAgICAgIGlm ICh5ID09IFdBSVRfRklMKSB7ICAgICAgICAgICAgLyogRklMRSAqLwotICAgICAgICAgICAgaW50 IHdpbGQgPSAwOwotICAgICAgICAgICAgaWYgKCh6ID0gY21rZXkod2Zzd2ksbndmc3dpLCJldmVu dCIsIiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih6KTsKLSAgICAgICAg ICAgIGZpbGV3YWl0ID0gejsKLSAgICAgICAgICAgIGlmIChmaWxld2FpdCA9PSBXRl9NT0QgfHwg ZmlsZXdhaXQgPT0gV0ZfREVMKQotICAgICAgICAgICAgICB6ID0gY21pZmkoIkZpbGVuYW1lIiwi Iiwmcywmd2lsZCx4eHN0cmluZyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHog PSBjbWZsZCgiRmlsZW5hbWUiLCIiLCZzLHh4c3RyaW5nKTsKLSAgICAgICAgICAgIGlmICh6IDwg MCkKLSAgICAgICAgICAgICAgcmV0dXJuKHopOwotICAgICAgICAgICAgaWYgKHdpbGQgfHwgKChm aWxld2FpdCA9PSBXRl9DUkUpICYmIGlzd2lsZChzKSkpIHsKLSAgICAgICAgICAgICAgICBwcmlu dGYoIj9XaWxkY2FyZHMgbm90IHZhbGlkIGhlcmVcbiIpOwotICAgICAgICAgICAgICAgIHJldHVy bigtOSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBja3N0cm5jcHkodG1wYnVmLHMsVE1Q QlVGU0laKTsKLSAgICAgICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAg ICAgcmV0dXJuKHopOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gZWxzZSBpZiAoeSAh PSBXQUlUX01ETSkgeyAgICAgLyogQSBtb2RlbSBzaWduYWwgKi8KLSAgICAgICAgICAgIHogfD0g eTsgICAgICAgICAgICAgICAgICAgICAvKiBPUiB0aGUgYml0IGludG8gdGhlIHNpZ25hbCBtYXNr ICovCi0gICAgICAgIH0KLSAgICAgICAgaWYgKCFmaWxld2FpdCkgeyAgICAgICAgICAgICAgICAv KiBNb2RlbSBzaWduYWxzLi4uICovCi0gICAgICAgICAgICB3aGlsZSAoMSkgeyAgICAgICAgICAg ICAgICAgLyogR2V0IHplcm8gb3IgbW9yZSBzaWduYWwgbmFtZXMgKi8KLSAgICAgICAgICAgICAg ICB5ID0gY21rZXkobXN0YWIsbm1zLCJtb2RlbSBzaWduYWwiLCIiLHh4c3RyaW5nKTsKLSAgICAg ICAgICAgICAgICBpZiAoeSA9PSAtMykgYnJlYWs7ICAgICAvKiAtMyBtZWFucyB0aGV5IHR5cGVk IENSICovCi0gICAgICAgICAgICAgICAgaWYgKHkgPCAwKSByZXR1cm4oeSk7ICAgLyogT3RoZXIg bmVnYXRpdmVzIGFyZSBlcnJvcnMgKi8KLSAgICAgICAgICAgICAgICB6IHw9IHk7ICAgICAgICAg ICAgICAgICAvKiBPUiB0aGUgYml0IGludG8gdGhlIHNpZ25hbCBtYXNrICovCi0gICAgICAgICAg ICB9Ci0gICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBTaG91bGRuJ3QgaGFwcGVuICovCi0gICAgICAgIHJldHVybigtMik7Ci0g ICAgfSAvKiBzd2l0Y2ggKGN4KSAqLwotCi0vKiBDb21tYW5kIGlzIGVudGVyZWQsIG5vdyBkbyBp dC4gKi8KLQotICAgIGlmICh6eiA+IC0xTCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIFRpbWUg b2YgZGF5IGdpdmVuPyAqLwotICAgICAgICB4ID0geno7Ci0gICAgICAgIGlmICh6eiAhPSAobG9u ZykgeCkgewotICAgICAgICAgICAgcHJpbnRmKAotIlNvcnJ5LCBhcml0aG1ldGljIG92ZXJmbG93 IC0gaGg6bW06c3Mgbm90IHVzYWJsZSBvbiB0aGlzIHBsYXRmb3JtLlxuIgotICAgICAgICAgICAg ICAgICAgICk7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0gICAgfQotICAg IGlmIChzbGVlcGNhbikKLSAgICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7ICAgICAgICAgICAgICAv KiBFbnN1cmUgc2luZ2xlLWNoYXIgd2FrZXVwICovCi0KLSAgICBpZiAoY3ggPT0gWFhNU0wpIHsg ICAgICAgICAgICAgICAgICAvKiBNaWxsaXNlY29uZCBzbGVlcCAqLwotICAgICAgICBtc2xlZXAo enogPCAwID8geCA6IHggKiAxMDAwKTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAg ICB9Ci0gICAgaWYgKGN4ID09IFhYUEFVICYmICFzbGVlcGNhbikgeyAgICAgLyogU0xFRVAgQ0FO Q0VMTEFUSU9OIGlzIE9GRiAqLwotICAgICAgICBzbGVlcCh4KTsKLSAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsKLSAgICB9Ci0gICAgaWYgKGZpbGV3YWl0KSB7ICAgICAgICAgICAgICAgICAg ICAgLyogRklMRS4uLiAqLwotICAgICAgICBmcyA9IHpjaGtpKHRtcGJ1Zik7ICAgICAgICAgICAg IC8qIENoZWNrIGlmIGZpbGUgZXhpc3RzICovCi0gICAgICAgIHN3aXRjaCAoZmlsZXdhaXQpIHsK LSAgICAgICAgICBjYXNlIFdGX0RFTDoKLSAgICAgICAgICAgIGlmIChmcyA9PSAtMSkKLSAgICAg ICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgIGNhc2UgV0ZfTU9EOgotICAgICAgICAgICAgaWYgKGZzID09IC0xKSB7Ci0gICAgICAgICAg ICAgICAgcHJpbnRmKCI/RmlsZSBkb2VzIG5vdCBleGl0OiAlc1xuIix0bXBidWYpOwotICAgICAg ICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzID0gemZj ZGF0KHRtcGJ1Zik7ICAgICAgICAgLyogR2V0IGN1cnJlbnQgbW9kaWZpY2F0aW9uIGRhdGUgKi8K LSAgICAgICAgICAgIGlmICghcykgcyA9ICIiOwotICAgICAgICAgICAgaWYgKGNrc3RybmNweShm aWxlZGF0ZSxzLDMyKSAhPSAxNykgewotICAgICAgICAgICAgICAgIHByaW50ZigiP0Nhbid0IGdl dCBtb2RpZmljYXRpb24gdGltZTogJXNcbiIsdG1wYnVmKTsKLSAgICAgICAgICAgICAgICByZXR1 cm4oLTkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz ZSBXRl9DUkU6Ci0gICAgICAgICAgICBpZiAoZnMgPiAtMSkKLSAgICAgICAgICAgICAgcmV0dXJu KHN1Y2Nlc3MgPSAxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAg IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvbGxpbmcgbG9vcCAqLwot ICAgICAgICBpZiAoc2xlZXBjYW4pIHsgICAgICAgICAgICAgICAgIC8qIEtleWJvYXJkIGNhbmNl bGxhdGlvbiBhbGxvd2VkPyAqLwotICAgICAgICAgICAgaWYgKCh5ID0gY29uY2hrKCkpID4gMCkg eyAgIC8qIERpZCB0aGV5IHR5cGUgc29tZXRoaW5nPyAqLwotICAgICAgICAgICAgICAgIGtiY2hh ciA9IGNvbmluYygwKTsgICAgIC8qIFllcywgZ2V0IGZpcnN0IGNoYXIgdGhleSB0eXBlZCAqLwot ICAgICAgICAgICAgICAgIGRlYnVnKEYwMDAsIldBSVQga2JjaGFyIiwiIixrYmNoYXIpOwotI2lm ZGVmIENPTU1FTlQKLSAgICAgICAgICAgICAgICB3aGlsZSAoLS15ID4gMCkgICAgICAgICAvKiBH b2JibGUgdGhlIHJlc3QgdXAgKi8KLSAgICAgICAgICAgICAgICAgIGNvbmluYygwKTsKLSNlbmRp ZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsgICAg LyogQW5kIHF1aXQgUEFVU2luZyBvciBXQUlUaW5nICovCi0gICAgICAgICAgICB9Ci0gICAgICAg IH0KLSAgICAgICAgaWYgKGZpbGV3YWl0ID09IDApIHsKLSAgICAgICAgICAgIGlmIChjeCA9PSBY WFdBSSkgeyAgICAgICAgICAvKiBXQUlUIGZvciBtb2RlbSBzaWduYWxzICovCi0gICAgICAgICAg ICAgICAgaWYgKHogIT0gMCkgewotICAgICAgICAgICAgICAgICAgICBtZG1zaWcgPSB0dGdtZG0o KTsgIC8qIEdldCB0aGVtLiAqLwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJXQUlU IHR0Z21kbSIsIiIsbWRtc2lnKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1kbXNpZyA8IDAp ICAgICAvKiBGYWlsdXJlIHRvIGdldCB0aGVtPyAqLwotICAgICAgICAgICAgICAgICAgICAgIHJl dHVybihzdWNjZXNzID0gMCk7IC8qIEZhaWwuICovCi0gICAgICAgICAgICAgICAgICAgIGlmICgo bWRtc2lnICYgeikgPT0geikgLyogR290IGRlc2lyZWQgb25lcz8gKi8KLSAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOyAvKiBTdWNjZWVkLiAqLwotICAgICAgICAgICAg ICAgIH0gZWxzZSBpZiAoeCA9PSAwKQotICAgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3Mg PSAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAg ICAgICAvKiBGSUxFLi4uICovCi0gICAgICAgICAgICBmcyA9IHpjaGtpKHRtcGJ1Zik7ICAgICAg ICAgLyogR2V0IGZpbGUgc3RhdHVzICovCi0gICAgICAgICAgICBpZiAoZmlsZXdhaXQgPT0gV0Zf TU9EKSB7ICAgLyogV2FpdCBmb3IgbW9kaWZpY2F0aW9uICovCi0gICAgICAgICAgICAgICAgaWYg KGZzID09IC0xKSAgICAgICAgICAgLyogRmFpbHVyZSB0byBnZXQgc3RhdHVzICovCi0gICAgICAg ICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOyAgLyogc28gV0FJVCBmYWlscy4gKi8KLSAg ICAgICAgICAgICAgICBzID0gemZjZGF0KHRtcGJ1Zik7ICAgICAvKiBHZXQgY3VycmVudCBtb2Rp ZmljYXRpb24gdGltZSAqLwotICAgICAgICAgICAgICAgIGlmICghcykgcyA9ICIiOyAgICAgICAg IC8qIEFuZCBjb21wYXJlIHdpdGggdGhlIHRpbWUgKi8KLSAgICAgICAgICAgICAgICBpZiAoc3Ry Y21wKHMsZmlsZWRhdGUpKSAvKiB3aGVuIHRoZSBXQUlUIHN0YXJ0ZWQgKi8KLSAgICAgICAgICAg ICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGZpbGV3 YWl0ID09IFdGX0RFTCkgeyAvKiBXYWl0IGZvciBkZWxldGlvbiAqLwotICAgICAgICAgICAgICAg IGlmIChmcyA9PSAtMSkgICAgICAgICAgIC8qIElmIGZpbGUgZG9lc24ndCBleGlzdCwgKi8KLSAg ICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7ICAvKiBzdWNjZWVkLiAqLwotICAg ICAgICAgICAgfSBlbHNlIGlmIChmaWxld2FpdCA9PSBXRl9DUkUpIHsgLyogV2FpdCBmb3IgY3Jl YXRpb24gKi8KLSAgICAgICAgICAgICAgICBpZiAoZnMgIT0gLTEpICAgICAgICAgICAvKiBJZiBm aWxlIGV4aXN0cyAqLwotICAgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsgIC8q IHN1Y2NlZWQuICovCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHggPCAx KSAgICAgICAgICAgICAgICAgICAgICAvKiBTTEVFUC9XQUlUL1BBVVNFIDAgKi8KLSAgICAgICAg ICBicmVhazsKLSAgICAgICAgc2xlZXAod2FpdGludGVydmFsKTsgICAgICAgICAgICAvKiBObyBp bnRlcnJ1cHQsIHNsZWVwICovCi0gICAgICAgIHggLT0gd2FpdGludGVydmFsOyAgICAgICAgICAg ICAgLyogRGVkdWN0IHNsZWVwIHRpbWUgKi8KLSAgICB9IHdoaWxlICh4ID4gMCk7Ci0KLSAgICBp ZiAoY3ggPT0gWFhXQUkpICAgICAgICAgICAgICAgICAgICAvKiBXQUlUIHRpbWUgZXhwaXJlZCAq LwotICAgICAgc3VjY2VzcyA9ICh6ID09IDApOyAgICAgICAgICAgICAgIC8qIFN1Y2NlZWQgaWYg bm8gbW9kZW0gc2lnbmFscyAqLwotICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEZvciBTTEVFUCBvciBQQVVTRSwgc3VjY2VzcyAqLwotICAgICAgc3VjY2VzcyA9ICh4 ID09IDApOyAgICAgICAgICAgICAgIC8qIGRlcGVuZHMgb24gd2hldGhlciBpdCB3YXMgKi8KLSAg ICByZXR1cm4oc3VjY2Vzcyk7ICAgICAgICAgICAgICAgICAgICAvKiBpbnRlcnJ1cHRlZCBmcm9t IHRoZSBrZXlib2FyZC4gKi8KLSNlbmRpZiAvKiBPTERXQUlUICovCi19Ci0jZW5kaWYgLyogTk9T UEwgKi8KLQotI2lmZGVmIE9TMk9SVU5JWAotX1BST1RPVFlQKGludCB6Y21wZm4sKGNoYXIgKiwg Y2hhciAqKSk7Ci0jZW5kaWYgLyogT1MyT1JVTklYICovCi0KLSNpZm5kZWYgTk9GUklMTFMKLSNp ZmRlZiBOVAotaW50IAotZG9saW5rKCkgewotICAgIC8qIFBhcnNlIGEgZmlsZSBvciBhIGRpcmVj dG9yeSBuYW1lICovCi0gICAgaW50IGksIHgsIHosIGxpc3RpbmcgPSAwLCBoYXZlbmFtZSA9IDAs IHdpbGQgPSAwLCByYyA9IDE7Ci0gICAgc3RydWN0IEZEQiBzdywgZmk7Ci0KLSAgICBjbWZkYmko JnN3LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAybmQgRkRCIC0gb3B0aW9uYWwgL1BBR0Ug c3dpdGNoICovCi0gICAgICAgICAgIF9DTUtFWSwgICAgICAgICAgICAgICAgICAgICAgLyogZmNv ZGUgKi8KLSAgICAgICAgICAgIkZpbGVuYW1lIG9yIHN3aXRjaCIsICAgICAgICAvKiBobHBtc2cg Ki8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICov Ci0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5n IGRhdGEgKi8KLSAgICAgICAgICAgbnF2c3d0YWIsICAgICAgICAgICAgICAgICAgICAvKiBhZGR0 bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KLSAgICAgICAgICAgNCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICovCi0gICAg ICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5jdGlv biAqLwotICAgICAgICAgICBxdnN3dGFiLCAgICAgICAgICAgICAgICAgICAgIC8qIEtleXdvcmQg dGFibGUgKi8KLSAgICAgICAgICAgJmZpICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2lu dGVyIHRvIG5leHQgRkRCICovCi0gICAgICAgICAgICk7Ci0KLSAgICBjbWZkYmkoJmZpLCAgICAg ICAgICAgICAgICAgICAgICAgICAvKiAxc3QgRkRCIC0gZmlsZSB0byB0eXBlICovCi0gICAgICAg ICAgIF9DTUlGSSwgICAgICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KLSAgICAgICAgICAg IiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBobHBtc2cgKi8KLSAgICAgICAgICAgIiIs ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICIiLCAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAgICAg ICAgMywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAq LwotICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVy aWMgZGF0YSAyICovCi0gICAgICAgICAgIHh4c3RyaW5nLAotICAgICAgICAgICBOVUxMLAotICAg ICAgICAgICBOVUxMCi0gICAgICAgICAgICk7Ci0KLSAgICB3aGlsZSAoIWhhdmVuYW1lKSB7Ci0g ICAgICAgIHggPSBjbWZkYigmc3cpOyAgICAgICAgICAgICAgICAgLyogUGFyc2Ugc29tZXRoaW5n ICovCi0gICAgICAgIGlmICh4IDwgMCkgICAgICAgICAgICAgICAgICAgICAgLyogRXJyb3IgKi8K LSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIHN3aXRjaCAoY21yZXN1bHQuZmNvZGUpIHsK LSAgICAgICAgICBjYXNlIF9DTUtFWToKLSAgICAgICAgICAgIHN3aXRjaCAoY21yZXN1bHQubnJl c3VsdCkgewotICAgICAgICAgICAgICBjYXNlIERFTF9MSVM6Ci0gICAgICAgICAgICAgIGNhc2Ug REVMX1ZSQjoKLSAgICAgICAgICAgICAgICBsaXN0aW5nID0gMTsKLSAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBERUxfTk9MOgotICAgICAgICAgICAgICBjYXNlIERF TF9RVUk6Ci0gICAgICAgICAgICAgICAgbGlzdGluZyA9IDA7Ci0gICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIF9D TUlGSToKLSAgICAgICAgICAgIHMgPSBjbXJlc3VsdC5zcmVzdWx0OwotICAgICAgICAgICAgaGF2 ZW5hbWUgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAg ICAgICAgIHJldHVybigtMik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgd2lsZCA9IGNtcmVzdWx0 Lm5yZXN1bHQ7ICAgICAgICAgICAgLyogU291cmNlIHNwZWNpZmljYXRpb24gd2lsZD8gKi8KLQot ICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsgICAgICAgIC8qIE1ha2UgYSBzYWZlIGNv cHkgb2Ygc291cmNlIG5hbWUgKi8KLSAgICBzID0gbGluZTsKLQotICAgIGlmICghd2lsZCkKLSAg ICAgIHdpbGQgPSBpc3dpbGQobGluZSk7Ci0KLSAgICBwID0gdG1wYnVmOyAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBQbGFjZSBmb3IgbmV3IG5hbWUgKi8KLSAgICBpZiAoKHggPSBjbW9maSh3 aWxkID8gIlRhcmdldCBkaXJlY3RvcnkiIDogIk5ldyBuYW1lIiwKLSAgICAgICAgICAgICAgICAg ICAiIiwmcyx4eHN0cmluZykpIDwgMCkgeyAvKiBHZXQgbmV3IG5hbWUgKi8KLSAgICAgICAgaWYg KHggPT0gLTMpIHsKLSAgICAgICAgICAgIHByaW50ZigiPyVzIHJlcXVpcmVkXG4iLCB3aWxkID8g IlRhcmdldCBkaXJlY3RvcnkiIDogIk5ldyBuYW1lIik7Ci0gICAgICAgICAgICByZXR1cm4oLTkp OwotICAgICAgICB9IGVsc2UgcmV0dXJuKHgpOwotICAgIH0KLSAgICBja3N0cm5jcHkocCxzLFRN UEJVRlNJWik7ICAgICAgICAgICAvKiBNYWtlIGEgc2FmZSBjb3B5IG9mIHRoZSBuZXcgbmFtZSAq LwotICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotCi0gICAgaWYgKCF3aWxk KSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogSnVzdCBvbmUgKi8KLSAgICAgICAgaWYgKGxp c3RpbmcpIHByaW50ZigiJXMgPT4gJXMgIixsaW5lLHApOwotICAgICAgICBpZiAoemxpbmsobGlu ZSxwKSA8IDApIHsKLSAgICAgICAgICAgIGlmIChsaXN0aW5nKSBwcmludGYoIihGQUlMRUQ6ICVz XG4iLGNrX2VycnN0cigpKTsKLSAgICAgICAgICAgIHJjID0gMDsKLSAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgIGlmIChsaXN0aW5nKSBwcmludGYoIihPSylcbiIpOwotICAgICAgICB9Ci0g ICAgICAgIHJldHVybihzdWNjZXNzID0gcmMpOwotICAgIH0KLSAgICBpZiAoIWlzZGlyKHApKSB7 ICAgICAgICAgICAgICAgICAgICAvKiBNdWx0aXBsZSAqLwotICAgICAgICBwcmludGYoICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIGlmIHRhcmdldCBpcyBub3QgYSBkaXJlY3RvcnkgKi8KLSI/ TXVsdGlwbGUgc291cmNlIGZpbGVzIG5vdCBhbGxvd2VkIGlmIHRhcmdldCBpcyBub3QgYSBkaXJl Y3RvcnkuXG4iKTsKLSAgICAgICAgcmV0dXJuKC05KTsKLSAgICB9Ci0jaWZkZWYgQ09NTUVOVAot ICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNob3cgZnVsbCBwYXRo IG9mIHRhcmdldCAqLwotICAgICAgICBjaGFyIGJ1ZltDS01BWFBBVEhdOyAgICAgICAgICAgIC8q ICh0b28gbXVjaCkgKi8KLSAgICAgICAgaWYgKHpmbnFmcChwLENLTUFYUEFUSCxidWYpKQotICAg ICAgICAgIGNrc3RybmNweSh0bXBidWYsYnVmLFRNUEJVRlNJWik7Ci0gICAgfQotI2VuZGlmIC8q IENPTU1FTlQgKi8KLQotI2lmZGVmIFZNUwotICAgIGNvbnJlcygpOyAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIExldCBDdHJsLUMgd29yay4gKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSAgICBk ZWJ1ZyhGMTEwLCJkb2xpbmsgbGluZSIsbGluZSwwKTsKLQotI2lmZGVmIFpYUkVXSU5ECi0gICAg eiA9IHp4cmV3aW5kKCk7ICAgICAgICAgICAgICAgICAgICAgLyogUmV3aW5kIGZpbGUgbGlzdCAq LwotI2Vsc2UKLSAgICB6ID0gbnp4cGFuZChzLDApOyAgICAgICAgICAgICAgICAgICAvKiBFeHBh bmQgZmlsZSBsaXN0ICovCi0jZW5kaWYgLyogWlhSRVdJTkQgKi8KLSAgICBkZWJ1ZyhGMTExLCJk b2xpbmsgcCIscCx6KTsKLQotI2lmZGVmIFVOSVgKLSAgICBpZiAod2lsZCAmJiB6ID4gMSkKLSAg ICAgIHNoX3NvcnQobXRjaHMsTlVMTCx6LDAsMCxmaWxlY2FzZSk7IC8qIEFscGhhYmV0aXplIHRo ZSBmaWxlbmFtZSBsaXN0ICovCi0jZW5kaWYgLyogVU5JWCAqLwotCi0gICAgd2hpbGUgKHotLSA+ IDApIHsKLSAgICAgICAgaWYgKCEoeiA9PSAwICYmICF3aWxkKSkKLSAgICAgICAgICB6bmV4dChs aW5lKTsKLSAgICAgICAgaWYgKCFsaW5lWzBdKQotICAgICAgICAgIGJyZWFrOwotICAgICAgICBp ZiAobGlzdGluZykgcHJpbnRmKCIlcyA9PiAlcyAiLGxpbmUscCk7Ci0gICAgICAgIGlmICh6bGlu ayhsaW5lLHApIDwgMCkgewotICAgICAgICAgICAgaWYgKGxpc3RpbmcpIHByaW50ZigiKEZBSUxF RDogJXNcbiIsY2tfZXJyc3RyKCkpOwotICAgICAgICAgICAgcmMgPSAwOwotICAgICAgICB9IGVs c2UgewotICAgICAgICAgICAgaWYgKGxpc3RpbmcpIHByaW50ZigiKE9LKVxuIik7Ci0gICAgICAg IH0KLSAgICB9Ci0jaWZkZWYgVk1TCi0gICAgY29uY2IoKGNoYXIpZXNjYXBlKTsKLSNlbmRpZiAv KiBWTVMgKi8KLSAgICByZXR1cm4oc3VjY2VzcyA9IHJjKTsKLX0KLSNlbmRpZiAvKiBOVCAqLwot Ci0jaWZkZWYgWkNPUFkKLWludAotZG9jb3B5KCkgewotICAgIGludCBpLCB4LCBsaXN0aW5nID0g MCwgbm9saXN0ID0gMCwgaGF2ZW5hbWUgPSAwLCBnZXR2YWw7Ci0gICAgY2hhciBjOwotICAgIHN0 cnVjdCBGREIgc3csIGZpOwotICAgIGludCBvdmVyd3JpdGUgPSBPVldfQUxXQVlTOwotICAgIGlu dCB0YXJnZXRpc2RpciA9IDA7Ci0gICAgaW50IHRhcmdldGxlbiA9IDA7Ci0gICAgaW50IGFwcGVu ZGluZyA9IDA7Ci0gICAgaW50IHByZXNlcnZlID0gMDsKLSAgICBpbnQgc3dhcHBpbmcgPSAwOwot ICAgIGludCBmcm9tYjY0ID0gMDsKLSAgICBpbnQgdG9iNjQgPSAwOwotICAgIGludCB3aWxkID0g MDsKLSAgICBpbnQgcmMgPSAxOwotCi0gICAgY2hhciBuZXduYW1lW0NLTUFYUEFUSF0sICogbm07 Ci0gICAgbm0gPSBuZXduYW1lOwotCi0gICAgY21mZGJpKCZzdywgICAgICAgICAgICAgICAgICAg ICAgICAgLyogMXN0IEZEQiAtIHN3aXRjaGVzICovCi0gICAgICAgICAgIF9DTUtFWSwgICAgICAg ICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KLSAgICAgICAgICAgIkZpbGVuYW1lIG9yIHN3aXRj aCIsICAgICAgICAvKiBobHBtc2cgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAgICAgICAgbmNvcHl0YWIsICAgICAg ICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KLSAgICAg ICAgICAgNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEg MjogNCA9IGNtc3dpICovCi0gICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAgICAg LyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotICAgICAgICAgICBjb3B5dGFiLCAgICAgICAgICAg ICAgICAgICAgIC8qIEtleXdvcmQgdGFibGUgKi8KLSAgICAgICAgICAgJmZpICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCi0gICAgICAgICAgICk7Ci0g ICAgY21mZGJpKCZmaSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogMm5kIEZEQiAtIGZpbGUg dG8gY29weSAqLwotICAgICAgICAgICBfQ01JRkksICAgICAgICAgICAgICAgICAgICAgIC8qIGZj b2RlICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaGxwbXNn ICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAq LwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmlu ZyBkYXRhICovCi0gICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRk dGwgbnVtZXJpYyBkYXRhIDEgKi8KLSAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLwotICAgICAgICAgICB4eHN0cmluZywKLSAg ICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgTlVMTAotICAgICAgICAgICApOwotCi0gICAgd2hp bGUgKCFoYXZlbmFtZSkgewotICAgICAgICB4ID0gY21mZGIoJnN3KTsgICAgICAgICAgICAgICAg IC8qIFBhcnNlIHNvbWV0aGluZyAqLwotICAgICAgICBpZiAoeCA8IDApICAgICAgICAgICAgICAg ICAgICAgIC8qIEVycm9yICovCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBzd2l0Y2gg KGNtcmVzdWx0LmZjb2RlKSB7Ci0gICAgICAgICAgY2FzZSBfQ01LRVk6Ci0JICAgIGMgPSBjbWdi cmsoKTsgICAgICAgICAgICAgICAgICAgLyogR2V0IGJyZWFrIGNoYXJhY3RlciAqLwotCSAgICBp ZiAoKGdldHZhbCA9IChjID09ICc6JyB8fCBjID09ICc9JykpICYmICEoY21na3dmbGdzKCkgJiBD TV9BUkcpKSB7Ci0JCXByaW50ZigiP1RoaXMgc3dpdGNoIGRvZXMgbm90IHRha2UgYW4gYXJndW1l bnRcbiIpOwotCQlyYyA9IC05OwotCQlyZXR1cm4ocmMpOwotCSAgICB9Ci0JICAgIGlmICghZ2V0 dmFsICYmIChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKLQkJcHJpbnRmKCI/VGhpcyBzd2l0Y2gg cmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOwotCQlyYyA9IC05OwotCQlyZXR1cm4ocmMpOwotCSAg ICB9Ci0gICAgICAgICAgICBzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsKLSAgICAgICAgICAg ICAgY2FzZSBERUxfTElTOgotICAgICAgICAgICAgICBjYXNlIERFTF9WUkI6Ci0JCW5vbGlzdCA9 IDA7Ci0gICAgICAgICAgICAgICAgbGlzdGluZyA9IDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgIGNhc2UgREVMX05PTDoKLSAgICAgICAgICAgICAgY2FzZSBERUxfUVVJ OgotCQlub2xpc3QgPSAxOwotICAgICAgICAgICAgICAgIGxpc3RpbmcgPSAwOwotICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIDk5OToKLSAgICAgICAgICAgICAgICBz d2FwcGluZyA9IDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug OTk4OgotICAgICAgICAgICAgICAgIGFwcGVuZGluZyA9IDE7Ci0gICAgICAgICAgICAgICAgYnJl YWs7Ci0JICAgICAgY2FzZSA5OTU6Ci0JCXByZXNlcnZlID0gMTsKLSAgICAgICAgICAgICAgICBi cmVhazsKLQkgICAgICBjYXNlIDk5NDoKLQkJaWYgKCh4ID0gY21rZXkob3Z3dGFiLG5vdnd0YWIs Ci0JCQkgICAgICAgIldoZW4gdG8gb3ZlcndyaXRlIGV4aXN0aW5nIGRlc3RpbmF0aW9uIGZpbGUi LAotCQkJICAgICAgICIiLHh4c3RyaW5nKSkgPCAwKQotCQkgIHJldHVybih4KTsKLQkJb3Zlcndy aXRlID0geDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSNpZm5kZWYgTk9TUEwKLSAgICAgICAg ICAgICAgY2FzZSA5OTc6Ci0gICAgICAgICAgICAgICAgZnJvbWI2NCA9IDE7Ci0gICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgOTk2OgotICAgICAgICAgICAgICAgIHRv YjY0ID0gMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBOT1NQTCAqLwotICAg ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBfQ01JRkk6Ci0g ICAgICAgICAgICBzID0gY21yZXN1bHQuc3Jlc3VsdDsKLSAgICAgICAgICAgIGhhdmVuYW1lID0g MTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBy ZXR1cm4oLTIpOwotICAgICAgICB9Ci0gICAgfQotICAgIHdpbGQgPSBjbXJlc3VsdC5ucmVzdWx0 OwotICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsgICAgICAgIC8qIE1ha2UgYSBzYWZl IGNvcHkgb2Ygc291cmNlIG5hbWUgKi8KLSAgICBzID0gbGluZTsKLSAgICBwID0gdG1wYnVmOyAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBQbGFjZSBmb3IgbmV3IG5hbWUgKi8KLQotICAgIC8q IEdldCBkZXN0aW5hdGlvbiBuYW1lICovCi0gICAgaWYgKCh4ID0gY21vZmkoImRlc3RpbmF0aW9u IG5hbWUgYW5kL29yIGRpcmVjdG9yeSIsCi0jaWZkZWYgVU5JWAotICAgICAgICAgICAgICAgICAg ICIuIgotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAiIgotI2VuZGlmIC8qIFVOSVggKi8KLSAg ICAgICAgICAgICAgICAgICAsJnMseHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAgaWYgKHggPT0g LTMpIHsKLSAgICAgICAgICAgIHByaW50ZigiP05hbWUgZm9yIGRlc3RpbmF0aW9uIGZpbGUgcmVx dWlyZWRcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfSBlbHNlIHJldHVy bih4KTsKLSAgICB9Ci0gICAgY2tzdHJuY3B5KHAscyxUTVBCVUZTSVopOyAgICAgICAgICAgLyog U2FmZSBjb3B5IG9mIGRlc3RpbmF0aW9uIG5hbWUgKi8KLSAgICBpZiAoKHkgPSBjbWNmbSgpKSA8 IDApIHJldHVybih5KTsKLSAgICBpZiAoYXBwZW5kaW5nICYmIHN3YXBwaW5nKSB7Ci0gICAgICAg IHByaW50ZigiP1NvcnJ5LCAvQVBQRU5EIGFuZCAvU1dBUCBjb25mbGljdFxuIik7Ci0gICAgICAg IHJldHVybigtOSk7Ci0gICAgfQotI2lmZGVmIENPTU1FTlQKLS8qCi0gIFRoaXMgdW5yZWFzb25h Ymx5IHByZXZlbnRlZCAiQ09QWSAvQVBQRU5EICouKiBiaWdmaWxlIiBmcm9tIGNvbmNhdGVuYXRp bmcKLSAgYSBidW5jaCBvZiBmaWxlcyBpbnRvIG9uZSBiaWcgZmlsZS4KLSovCi0gICAgaWYgKGFw cGVuZGluZyAmJiB3aWxkKSB7Ci0gICAgICAgIHByaW50ZigiP1NvcnJ5LCAvQVBQRU5EIGNhbiBi ZSB1c2VkIG9ubHkgd2l0aCBzaW5nbGUgZmlsZXNcbiIpOwotICAgICAgICByZXR1cm4oLTkpOwot ICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgdGFyZ2V0aXNkaXIgPSBpc2RpcihwKTsK LSAgICB4ID0gc3RybGVuKHApOwotICAgIGlmICh0YXJnZXRpc2RpcikgewotI2lmZGVmIFVOSVhP Uk9TSwotICAgICAgICBpZiAocFt4LTFdICE9ICcvJykgewotICAgICAgICAgICAgY2tzdHJuY2F0 KHAsIi8iLFRNUEJVRlNJWik7Ci0gICAgICAgICAgICB4Kys7Ci0gICAgICAgIH0KLSNlbHNlCi0j aWZkZWYgT1MyCi0gICAgICAgIGlmIChwW3gtMV0gIT0gJy8nKSB7Ci0gICAgICAgICAgICBja3N0 cm5jYXQocCwiLyIsVE1QQlVGU0laKTsKLSAgICAgICAgICAgIHgrKzsKLSAgICAgICAgfQotI2Vs c2UKLSNpZmRlZiBTVFJBVFVTCi0gICAgICAgIGlmIChwW3gtMV0gIT0gJz4nKSB7Ci0gICAgICAg ICAgICBja3N0cm5jYXQocCwiPiIsVE1QQlVGU0laKTsKLSAgICAgICAgICAgIHgrKzsKLSAgICAg ICAgfQotI2Vsc2UKLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgICAgICBpZiAocFt4LTFdICE9ICc6 JykgewotICAgICAgICAgICAgY2tzdHJuY2F0KHAsIjoiLFRNUEJVRlNJWik7Ci0gICAgICAgICAg ICB4Kys7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIGlmIChwW3gtMV0gIT0gJy8nKSB7Ci0g ICAgICAgICAgICBja3N0cm5jYXQocCwiLyIsVE1QQlVGU0laKTsKLSAgICAgICAgICAgIHgrKzsK LSAgICAgICAgfQotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyogU1RSQVRVUyAq LwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFVOSVhPUk9TSyAqLwotICAgIH0KLSAgICB0 YXJnZXRsZW4gPSB4OwotCi0gICAgaWYgKCFhcHBlbmRpbmcpIHsJCQkvKiBJZiAvQVBQRU5EIG5v dCBnaXZlbiAqLwotCWlmICh3aWxkICYmICF0YXJnZXRpc2RpcikgewkvKiBObyB3aWxkY2FyZHMg YWxsb3dlZCAqLwotCSAgICBwcmludGYoCQkJLyogaWYgdGFyZ2V0IGlzIG5vdCBhIGRpcmVjdG9y eSAqLwotIj9NdWx0aXBsZSBzb3VyY2UgZmlsZXMgbm90IGFsbG93ZWQgaWYgdGFyZ2V0IGlzIG5v dCBhIGRpcmVjdG9yeS5cbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLSAgICB9Ci0KLSNpZmRl ZiBWTVMKLSAgICBjb25yZXMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMZXQgQ3Ry bC1DIHdvcmsuICovCi0jZW5kaWYgLyogVk1TICovCi0gICAgZGVidWcoRjExMCwiZG9jb3B5IGxp bmUiLGxpbmUsMCk7Ci0gICAgZGVidWcoRjExMCwiZG9jb3B5IHAiLHAsMCk7Ci0gICAgZGVidWco RjExMCwiZG9jb3B5IG5tIixubSwwKTsKLQotI2lmZGVmIFpYUkVXSU5ECi0gICAgeiA9IHp4cmV3 aW5kKCk7ICAgICAgICAgICAgICAgICAgICAgLyogUmV3aW5kIGZpbGUgbGlzdCAqLwotI2Vsc2UK LSAgICB6ID0gbnp4cGFuZChzLDApOyAgICAgICAgICAgICAgICAgICAvKiBFeHBhbmQgZmlsZSBs aXN0ICovCi0jZW5kaWYgLyogWlhSRVdJTkQgKi8KLQotI2lmZGVmIFVOSVgKLSAgICBpZiAod2ls ZCkKLSAgICAgIHNoX3NvcnQobXRjaHMsTlVMTCx6LDAsMCxmaWxlY2FzZSk7IC8qIEFscGhhYmV0 aXplIHRoZSBmaWxlbmFtZSBsaXN0ICovCi0jZW5kaWYgLyogVU5JWCAqLwotCi0jaWZkZWYgSUtT RAotICAgIGlmICghdGFyZ2V0aXNkaXIgJiYgemNoa2kocCkgPiAtMSkgeyAvKiBEZXN0aW5hdGlv biBmaWxlIGV4aXN0cz8gKi8KLSAgICAgICAgaWYgKGluc2VydmVyICYmICghRU5BQkxFRChlbl9k ZWwpCi0jaWZkZWYgQ0tfTE9HSU4KLSAgICAgICAgICAgICAgICAgICAgICAgICB8fCBpc2d1ZXN0 Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICApKSB7Ci0g ICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgb3ZlcndyaXRpbmcgZXhpc3RpbmcgZmlsZXMgaXMg ZGlzYWJsZWRcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgIH0K LSNlbmRpZiAvKiBJS1NEICovCi0KLSAgICBpZiAodG9iNjQgJiYgZnJvbWI2NCkgeyAgICAgICAg ICAgICAvKiBUbyBhbmQgZnJvbSBCNjQgPSBubyBjb252ZXJzaW9uICovCi0gICAgICAgIHRvYjY0 ID0gMDsKLSAgICAgICAgZnJvbWI2NCA9IDA7Ci0gICAgfQotICAgIGRlYnVnKEYxMTAsIkNPUFkg ZGVzdCIscCwwKTsKLQotICAgIHdoaWxlICh6ID4gMCkgewotCi0gICAgICAgIHpuZXh0KGxpbmUp OwotICAgICAgICBpZiAoIWxpbmVbMF0pCi0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZXJy bm8gPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBlcnJubyAqLwotCi0JaWYgKHRh cmdldGlzZGlyKSB7Ci0JICAgIHpzdHJpcChsaW5lLCZubSk7Ci0JICAgIGNrbWFrbXNnKG5ld25h bWUsQ0tNQVhQQVRILHAsbm0sTlVMTCxOVUxMKTsKLQkgICAgbm0gPSBuZXduYW1lOwotCX0gZWxz ZSB7Ci0JICAgIG5tID0gcDsKLQl9Ci0JaWYgKG92ZXJ3cml0ZSkgewkJLyogT3ZlcndyaXRlIGNo ZWNraW5nPyAqLwotCSAgICBpZiAoemNoa2kobm0pID49IChDS19PRkZfVCkwKSB7IC8qIERlc3Rp bmF0aW9uIGZpbGUgZXhpc3RzPyAqLwotCi0JCWNoYXIgZDFbMjBdLCAqIGQyOwotCQljaGFyICog bjEsICogbjI7Ci0JCWludCBpLCBza2lwID0gMDsKLQotCQlpID0gc3RybGVuKGxpbmUpOwkvKiBJ c29sYXRlIHNvdXJjZSBmaWxlbmFtZSAqLwotCQlmb3IgKDsgaSA+PSAwOyBpLS0pIHsKLQkJICAg IGlmIChJU0RJUlNFUChsaW5lW2ldKSkgewotCQkJbjEgPSAmbGluZVtpKzFdOwotCQkJYnJlYWs7 Ci0JCSAgICB9Ci0JCX0KLQkJZGVidWcoRjExMCwiQ09QWSBuMSIsIG4xLCAwKTsKLQkJaSA9IHN0 cmxlbihubSk7CQkvKiBBbmQgZGVzdGluYXRpb24gZmlsZW5hbWUgKi8KLQkJZm9yICg7IGkgPj0g MDsgaS0tKSB7Ci0JCSAgICBpZiAoSVNESVJTRVAobm1baV0pKSB7Ci0JCQluMiA9ICZubVtpKzFd OwotCQkJYnJlYWs7Ci0JCSAgICB9Ci0JCX0KLQkJZGVidWcoRjExMCwiQ09QWSBuMiIsIG4yLCAw KTsKLQkJaWYgKCFzdHJjbXAobjEsbjIpKSB7ICAgICAgICAgIAkgIC8qIFNhbWUgbmFtZT8gKi8K LQkJICAgIGlmIChvdmVyd3JpdGUgPT0gT1ZXX05FVkVSKSB7IC8qIE5ldmVyIG92ZXJ3cml0ZT8g Ki8KLQkJCWlmIChsaXN0aW5nKQkgICAgICAgICAgLyogU2tpcCAqLwotCQkJICBpZiAobGlzdGlu ZykgcHJpbnRmKCIlcyA9PiAlcyAoU0tJUFBFRClcbiIsbGluZSxubSk7Ci0JCQljb250aW51ZTsK LQkJICAgIH0KLQkJICAgIGNrc3RybmNweShkMSx6ZmNkYXQobGluZSksMjApOyAvKiBTb3VyY2Ug ZmlsZSB0aW1lc3RhbXAgKi8KLQkJICAgIGQyID0gemZjZGF0KG5tKTsJICAgICAgIC8qIFRpbWVz dGFtcCBvZiBkZXN0IGZpbGUgKi8KLQkJICAgIHggPSBzdHJjbXAoZDEsZDIpOwkgICAgICAgLyog Q29tcGFyZSB0aGVtICovCi0JCSAgICBpZiAoKChvdmVyd3JpdGUgPT0gT1ZXX05FV0VSKSAmJiAo eCA8IDApKSB8fAotCQkJKChvdmVyd3JpdGUgPT0gT1ZXX09MREVSKSAmJiAoeCA+IDApKSkgewot CQkJaWYgKGxpc3RpbmcpCi0JCQkgIGlmIChsaXN0aW5nKSBwcmludGYoIiVzID0+ICVzIChTS0lQ UEVEKVxuIixsaW5lLG5tKTsKLQkJCWNvbnRpbnVlOwotCQkgICAgfQotCQl9Ci0JICAgIH0KLQl9 Ci0gICAgICAgIGlmIChsaXN0aW5nKSBwcmludGYoIiVzID0+ICVzICIsbGluZSxubSk7Ci0KLSAg ICAgICAgLyogU3RyYWlnaHQgY29weSAqLwotICAgICAgICBpZiAoIXN3YXBwaW5nICYmICFhcHBl bmRpbmcgJiYgIWZyb21iNjQgJiYgIXRvYjY0KSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJD T1BZIHpjb3B5IixsaW5lLDApOwotCi0gICAgICAgICAgICBpZiAoKHggPSB6Y29weShsaW5lLHAp KSA8IDApIHsgLyogTGV0IHpjb3B5KCkgZG8gaXQuICovCi0JCWRlYnVnKEYxMTEsIkNPUFkgbm90 IE9LIixsaW5lLHgpOwotICAgICAgICAgICAgICAgIHN3aXRjaCAoeCkgewotICAgICAgICAgICAg ICAgICAgY2FzZSAtMjoKLQkJICAgIGlmIChsaXN0aW5nKQotCQkgICAgICBwcmludGYoIihGQUlM RUQ6IE5vdCBhIHJlZ3VsYXIgZmlsZSlcbiIpOwotCQkgICAgZWxzZSBpZiAoIW5vbGlzdCkKLQkJ ICAgICAgcHJpbnRmKCI/Tm90IGEgcmVndWxhciBmaWxlIC0gJXNcbiIsbGluZSk7Ci0gICAgICAg ICAgICAgICAgICAgIHJjID0gMDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgICAgICBjYXNlIC0zOgotCQkgICAgaWYgKGxpc3RpbmcpCi0JCSAgICAgIHByaW50Zigi KEZBSUxFRDogTm90IGZvdW5kIG9yIG5vdCBhY2Nlc3NpYmxlKVxuIik7Ci0JCSAgICBlbHNlIGlm ICghbm9saXN0KQotCQkgICAgICBwcmludGYoIj9Ob3QgZm91bmQgb3Igbm90IGFjY2Vzc2libGUg LSAlc1xuIixsaW5lKTsKLSAgICAgICAgICAgICAgICAgICAgcmMgPSAwOwotICAgICAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgLTQ6Ci0JCSAgICBpZiAobGlz dGluZykKLQkJICAgICAgcHJpbnRmKCIoRkFJTEVEOiBQZXJtaXNzaW9uIGRlbmllZClcbiIpOwot CQkgICAgZWxzZSBpZiAoIW5vbGlzdCkKLQkJICAgICAgcHJpbnRmKCI/UGVybWlzc2lvbiBkZW5p ZWQgLSAlc1xuIixsaW5lKTsKLSAgICAgICAgICAgICAgICAgICAgcmMgPSAwOwotICAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgLTU6Ci0JCSAgICBpZiAo bGlzdGluZykKLQkJICAgICAgcHJpbnRmKCIoU291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgdGhl IHNhbWUgZmlsZSlcbiIpOwotCQkgICAgZWxzZSBpZiAoIW5vbGlzdCkKLQkJICAgICAgcHJpbnRm KAotCQkJICAiP1NvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1lIGZpbGUgLSAlc1xu IiwKLQkJCSAgbGluZQotCQkJICApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgICAgICAgIGNhc2UgLTY6Ci0JCSAgICBpZiAobGlzdGluZykKLQkJICAgICAgcHJpbnRm KCIoRkFJTEVEOiBJbnB1dC9PdXRwdXQgZXJyb3IpXG4iKTsKLQkJICAgIGVsc2UgaWYgKCFub2xp c3QpCi0JCSAgICAgIHByaW50ZigiP0lucHV0L091dHB1dCBlcnJvciAtICVzXG4iLGxpbmUpOwot ICAgICAgICAgICAgICAgICAgICByYyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICAgICAgY2FzZSAtNzoKLQkJICAgIGlmIChsaXN0aW5nKQotCQkgICAgICBw cmludGYoIihGQUlMRUQ6ICVzIC0gJXMpXG4iLHAsY2tfZXJyc3RyKCkpOwotCQkgICAgZWxzZSBp ZiAoIW5vbGlzdCkKLQkJICAgICAgcHJpbnRmKCI/JXMgLSAlc1xuIixja19lcnJzdHIoKSxwKTsK LSAgICAgICAgICAgICAgICAgICAgcmMgPSAwOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0JCSAgICBpZiAobGlzdGluZykKLQkJICAgICAg cHJpbnRmKCIoRkFJTEVEOiAlcylcbiIsY2tfZXJyc3RyKCkpOwotCQkgICAgZWxzZSBpZiAoIW5v bGlzdCkKLQkJICAgICAgcHJpbnRmKCI/JXNcbiIsY2tfZXJyc3RyKCkpOwotICAgICAgICAgICAg ICAgICAgICByYyA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsJ CQkvKiBSZWd1bGFyIGNvcHkgc3VjY2VlZGVkICovCi0JCWRlYnVnKEYxMTAsIkNPUFkgT0suLiIs bmV3bmFtZSwwKTsKLSNpZm5kZWYgTk9YRkVSCi0JCWlmIChwcmVzZXJ2ZSkgewkJLyogSGFuZGxl IC9QUkVTRVJWRSAqLwotCQkgICAgY2hhciAqIHBzdHIgPSAiIjsJLyogRmlsZSBwZXJtaXNzaW9u cyBzdHJpbmcgKi8KLQkJICAgIHN0cnVjdCB6YXR0ciB4eDsJLyogRmlsZSBhdHRyaWJ1dGUgc3Ry dWN0dXJlICovCi0JCSAgICBleHRlcm4gY2hhciAqIGNrc3lzaWQ7Ci0KLQkJICAgIGluaXRhdHRy KCZ4eCk7CS8qIEluaXRpYWxpemUgdGhlIHN0cnVjdCAqLwotCi0JCSAgICB4eC5zeXN0ZW1pZC52 YWwgPSBja3N5c2lkOyAvKiBTZXQgb3VyIHN5c3RlbSBJRCAqLwotCQkgICAgeHguc3lzdGVtaWQu bGVuID0gKGludClzdHJsZW4oY2tzeXNpZCk7Ci0jaWZkZWYgQ0tfUEVSTVMKLQkJICAgIHBzdHIg PSB6Z3Blcm0obGluZSk7IC8qIEdldCBzb3VyY2UgZmlsZSdzIHBlcm1pc3Npb25zICovCi0jZW5k aWYgLyogQ0tfUEVSTVMgKi8KLQkJICAgIHh4Lmxwcm90ZWN0LnZhbCA9IHBzdHI7Ci0JCSAgICB4 eC5scHJvdGVjdC5sZW4gPSAoaW50KXN0cmxlbihwc3RyKTsKLQkJICAgIHh4LmRhdGUudmFsID0g emZjZGF0KGxpbmUpOwkvKiBTb3VyY2UgZmlsZSdzIHRpbWVzdGFtcCAqLwotCQkgICAgeHguZGF0 ZS5sZW4gPSAoaW50KXN0cmxlbih4eC5kYXRlLnZhbCk7Ci0JCSAgICBpZiAoenN0aW1lKG5tLCZ4 eCwwKSA8IDApIHsKLQkJCXByaW50ZigiP0NPUFkgL1BSRVNFUlZFICVzOiAlc1xuIixubSxja19l cnJzdHIoKSk7Ci0JCQlyYyA9IC05OwotCQkgICAgfQotCQl9Ci0jZW5kaWYJLyogTk9YRkVSICov Ci0JCWlmIChsaXN0aW5nICYmIHJjID4gLTEpCi0JCSAgcHJpbnRmKCIoT0spXG4iKTsKLSAgICAg ICAgICAgIH0KLQotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNw ZWNpYWwgb3B0aW9ucyAqLwotCi0gICAgICAgICAgICBpbnQgcHJldiwgeSwgeCA9IDA7ICAgICAg ICAgLyogVmFyaWFibGVzIG5lZWRlZCBmb3IgdGhlbSAqLwotICAgICAgICAgICAgaW50IGksIHQ7 Ci0gICAgICAgICAgICBjaGFyIGlidWZbMTAwXTsKLSAgICAgICAgICAgIGNoYXIgb2J1ZlsyMDBd OwotICAgICAgICAgICAgRklMRSAqIGluID0gTlVMTDsKLSAgICAgICAgICAgIEZJTEUgKiBvdXQg PSBOVUxMOwotCi0gICAgICAgICAgICBpZiAoKGluID0gZm9wZW4obGluZSwiciIpKSA9PSBOVUxM KSB7IC8qIE9wZW4gaW5wdXQgZmlsZSAqLwotICAgICAgICAgICAgICAgIGlmIChsaXN0aW5nKQot CQkgIHByaW50ZigiKEZBSUxFRDogJXMpXG4iLGNrX2VycnN0cigpKTsKLQkJZWxzZSBpZiAoIW5v bGlzdCkKLQkJICBwcmludGYoIj8lcyAtICVzKVxuIixja19lcnJzdHIoKSxsaW5lKTsKLSAgICAg ICAgICAgICAgICByYyA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg ICB9Ci0gICAgICAgICAgICBpZiAodGFyZ2V0aXNkaXIpIHsgICAgICAgICAgLyogVGFyZ2V0IGlz IGRpcmVjdG9yeSAqLwotICAgICAgICAgICAgICAgIGNoYXIgKiBidWYgPSBOVUxMOyAgICAgIC8q IHNvIGFwcGVuZCB0aGlzIGZpbGVuYW1lIHRvIGl0ICovCi0gICAgICAgICAgICAgICAgenN0cmlw KGxpbmUsJmJ1Zik7Ci0gICAgICAgICAgICAgICAgcFt0YXJnZXRsZW5dID0gTlVMOwotICAgICAg ICAgICAgICAgIGlmIChidWYpCi0gICAgICAgICAgICAgICAgICBja3N0cm5jYXQocCxidWYsVE1Q QlVGU0laKTsKLSAgICAgICAgICAgIH0KLSNpZmRlZiBPUzJPUlVOSVgKLSAgICAgICAgICAgIGlm ICh6Y21wZm4obGluZSxwKSkgeyAgICAgICAvKiBJbnB1dCBhbmQgb3V0cHV0IGFyZSBzYW1lIGZp bGU/ICovCi0gICAgICAgICAgICAgICAgaWYgKGxpc3RpbmcpCi0gICAgICAgICAgICAgICAgICBw cmludGYoIihGQUlMRUQ6IFNvdXJjZSBhbmQgZGVzdGluYXRpb24gaWRlbnRpY2FsKVxuIik7Ci0J CWVsc2UgaWYgKCFub2xpc3QpCi0gICAgICAgICAgICAgICAgICBwcmludGYoIj9Tb3VyY2UgYW5k IGRlc3RpbmF0aW9uIGlkZW50aWNhbCAtICVzXG4iLCBsaW5lKTsgCi0gICAgICAgICAgICAgICAg cmMgPSAwOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotI2VuZGlm IC8qIE9TMk9SVU5JWCAqLwotICAgICAgICAgICAgaWYgKChvdXQgPSBmb3BlbihwLCAoYXBwZW5k aW5nID8gImEiIDogInciKSkpID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBmY2xvc2UoaW4p OwotICAgICAgICAgICAgICAgIGlmIChsaXN0aW5nKQotCQkgIHByaW50ZigiKEZBSUxFRDogJXMg LSAlcylcbiIscCxja19lcnJzdHIoKSk7Ci0JCWVsc2UgaWYgKCFub2xpc3QpCi0JCSAgcHJpbnRm KCI/JXMgLSAlc1xuIixwLGNrX2VycnN0cigpKTsKLSAgICAgICAgICAgICAgICByYyA9IDA7Ci0g ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0jaWZuZGVmIE5PU1BMCi0g ICAgICAgICAgICBpZiAodG9iNjQpIHsgICAgICAgICAgICAgICAgLyogQ29udmVydGluZyB0byBC YXNlLTY0ICovCi0KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJDT1BZIHRvYjY0IixsaW5l LDApOwotCi0gICAgICAgICAgICAgICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAgLyogTG9vcC4u LiAqLwotICAgICAgICAgICAgICAgICAgICBwcmV2ID0geDsKLSAgICAgICAgICAgICAgICAgICAg aWYgKCh4ID0gZnJlYWQoaWJ1ZiwxLDU0LGluKSkgPCAxKSB7IC8qIEVPRiAqLwotICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKGxpc3RpbmcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBy aW50ZigiKE9LKVxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAocHJldiAlIDMpIHsKLSAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChsaXN0aW5nKQotICAgICAgICAgICAgICAgICAgICAgICAg ICBwcmludGYoIihGQUlMRUQ6IFBoYXNlIGVycm9yIGF0ICVkKVxuIixwcmV2KTsKLQkJCWVsc2Ug aWYgKCFub2xpc3QpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1BoYXNlIGVy cm9yIGF0ICVkXG4iLHByZXYpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAwOwotICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICAgICAgaWYgKHN3YXBwaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp ZiAoeCAmIDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlzdGluZykKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiKEZBSUxFRDogU3dhcCBlcnJvcilc biIpOwotCQkJICAgIGVsc2UgaWYgKCFub2xpc3QpCi0JCQkgICAgICBwcmludGYoIj9Td2FwIGVy cm9yXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYyA9IDA7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgeDsgaSs9MikgewotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHQgPSBpYnVmW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlidWZbaV0gPSBpYnVmW2krMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWJ1 ZltpKzFdID0gdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoKHkgPSBiOHRvYjY0KGlidWYseCxvYnVmLDE4 MCkpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3RpbmcpCi0gICAgICAg ICAgICAgICAgICAgICAgICAgIHByaW50ZigiKEZBSUxFRDogRW5jb2RpbmcgZXJyb3IpXG4iKTsK LQkJCWVsc2UgaWYgKCFub2xpc3QpCi0JCQkgIHByaW50ZigiP0VuY29kaW5nIGVycm9yXG4iKTsK LSAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGZwcmlu dGYob3V0LCIlc1xuIixvYnVmKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIH0g ZWxzZSBpZiAoZnJvbWI2NCkgeyAgICAgICAvKiBDb252ZXJ0aW5nIGZyb20gQmFzZSA2NCAqLwot Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMCwiQ09QWSBmcm9tYjY0IixsaW5lLDApOwotCi0g ICAgICAgICAgICAgICAgaWYgKChvdXQgPSBmb3BlbihwLGFwcGVuZGluZyA/ICJhIiA6ICJ3Iikp ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgZmNsb3NlKGluKTsKLSAgICAgICAgICAg ICAgICAgICAgaWYgKGxpc3RpbmcpCi0JCSAgICAgIHByaW50ZigiKEZBSUxFRDogJXMgLSAlcylc biIscCxja19lcnJzdHIoKSk7Ci0JCSAgICBlbHNlIGlmICghbm9saXN0KQotCQkgICAgICBwcmlu dGYoIj8lcyAtICVzXG4iLHAsY2tfZXJyc3RyKCkpOwotICAgICAgICAgICAgICAgICAgICByYyA9 IDA7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICB4ID0gMTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoeCkgewotICAgICAg ICAgICAgICAgICAgICB4ID0gZnJlYWQoaWJ1ZiwxLDgwLGluKTsKLSAgICAgICAgICAgICAgICAg ICAgaWYgKCh5ID0gYjY0dG9iOChpYnVmLHgsb2J1Ziw4MCkpIDwgMCkgewotICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKGxpc3RpbmcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50 ZigiKEZBSUxFRDogRGVjb2RpbmcgZXJyb3IpXG4iKTsKLQkJCWVsc2UgaWYgKCFub2xpc3QpCi0J CQkgIHByaW50ZigiP0RlY29kaW5nIGVycm9yXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAg IHJjID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzd2FwcGluZykgewotICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKHggJiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KGxpc3RpbmcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIihGQUlMRUQ6 IFN3YXAgZXJyb3IpXG4iKTsKLQkJCSAgICBlbHNlIGlmICghbm9saXN0KQotCQkJICAgICAgcHJp bnRmKCI/U3dhcCBlcnJvclxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAw OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHk7IGkrPTIp IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gb2J1ZltpXTsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBvYnVmW2ldID0gb2J1ZltpKzFdOwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG9idWZbaSsxXSA9IHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHkgPiAwKSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICBpZiAoZndyaXRlKG9idWYsMSx5LG91dCkgPCAxKSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3RpbmcpCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwcmludGYoIihGQUlMRUQ6ICVzIC0gJXMpXG4iLHAsY2tfZXJyc3RyKCkpOwot CQkJICAgIGVsc2UgaWYgKCFub2xpc3QpCi0JCQkgICAgICBwcmludGYoIj8lcyAtICVzXG4iLHAs Y2tfZXJyc3RyKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gMDsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg fSBlbHNlCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotICAgICAgICAgICAgaWYgKHN3YXBwaW5nKSB7 ICAgICAgICAgICAgIC8qIFN3YXBwaW5nIGJ5dGVzICovCi0KLSAgICAgICAgICAgICAgICBDSEFS IGNbM107Ci0gICAgICAgICAgICAgICAgY1syXSA9IE5VTDsKLQotICAgICAgICAgICAgICAgIGRl YnVnKEYxMTAsIkNPUFkgc3dhcHBpbmciLGxpbmUsMCk7Ci0KLSAgICAgICAgICAgICAgICB3aGls ZSAoMSkgewotICAgICAgICAgICAgICAgICAgICB4ID0gZnJlYWQoKGNoYXIgKiljLDEsMixpbik7 Ci0gICAgICAgICAgICAgICAgICAgIGlmICh4IDwgMSkgewotICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKGxpc3RpbmcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiKE9LKVxu Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg fSBlbHNlIGlmICh4ID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNbMV0gPSBjWzBd OwotICAgICAgICAgICAgICAgICAgICAgICAgY1swXSA9IE5VTDsKLSAgICAgICAgICAgICAgICAg ICAgICAgIHByaW50ZigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKFdBUk5JTkc6IE9k ZCBieXRlIGNvdW50KSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsaXN0aW5nKSBw cmludGYoIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg aWYgKGZwcmludGYob3V0LCIlYyVjIixjWzFdLGNbMF0pID09IEVPRikgewotICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKGxpc3RpbmcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50 ZigiKEZBSUxFRDogJXMgLSAlcylcbiIscCxja19lcnJzdHIoKSk7Ci0JCQllbHNlIGlmICghbm9s aXN0KQotICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj8lcyAtICVzXG4iLHAsY2tf ZXJyc3RyKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAwOwotICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICB9Ci0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoYXBwZW5kaW5nKSB7ICAgICAvKiBBcHBlbmRp bmcgdG8gdGFyZ2V0IGZpbGUgKi8KLQotICAgICAgICAgICAgICAgIGNoYXIgYzsKLQotICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTAsIkNPUFkgYXBwZW5kaW5nIixsaW5lLDApOwotCi0gICAgICAg ICAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgICAgICAgICAgeCA9IGZyZWFkKCZjLDEs MSxpbik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh4IDwgMSkgewotICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKGxpc3RpbmcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigi KE9LKVxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoZndyaXRlKCZjLDEsMSxvdXQpIDwgMSkg ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3RpbmcpCi0gICAgICAgICAgICAgICAg ICAgICAgICAgIHByaW50ZigiKEZBSUxFRDogJXMgLSAlcylcbiIscCxja19lcnJzdHIoKSk7Ci0J CQllbHNlIGlmICghbm9saXN0KQotICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj8l cyAtICVzXG4iLHAsY2tfZXJyc3RyKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAw OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAob3V0KSBm Y2xvc2Uob3V0KTsKLSAgICAgICAgICAgIGlmIChpbikgZmNsb3NlKGluKTsKLSAgICAgICAgfQot I2lmZGVmIFZNU09SVU5JWAotICAgICAgICBjb25jYigoY2hhcillc2NhcGUpOwotI2VuZGlmIC8q IFZNU09SVU5JWCAqLwotICAgIH0KLSAgICBpZiAocmMgPiAtMSkgc3VjY2VzcyA9IHJjOwotICAg IHJldHVybihyYyk7Ci19Ci0jZW5kaWYgLyogWkNPUFkgKi8KLSNlbmRpZiAvKiBOT0ZSSUxMUyAq LwotCi0jaWZuZGVmIE5PQ1NFVFMKLSNpZm5kZWYgTk9VTklDT0RFCi1zdGF0aWMgc3RydWN0IGtl eXRhYiAqIHhmY3N0YWIgPSBOVUxMOwkvKiBGb3IgUkVOQU1FIC9DT05WRVJUOiAqLwotc3RhdGlj IGNoYXIgY3Z0YnVmaW5bQ0tNQVhQQVRIKzhdID0geyBOVUwsIE5VTCB9Owotc3RhdGljIGNoYXIg Y3Z0YnVmb3V0W0NLTUFYUEFUSCs4XSA9IHsgTlVMLCBOVUwgfTsKLXN0YXRpYyBjaGFyICogcGN2 dGJ1ZmluID0gTlVMTDsKLXN0YXRpYyBjaGFyICogcGN2dGJ1Zm91dCA9IE5VTEw7Ci0KLXN0YXRp YyBpbnQJCQkJLyogSW5wdXQgZnVuY3Rpb24geGduYnl0ZSgpICovCi1jdnRmbmluKCkgewotICAg IENIQVIgYzsKLSAgICBjID0gKnBjdnRidWZpbisrOwotICAgIHJldHVybihjID8gYyA6IC0xKTsK LX0KLQotX1BST1RPVFlQKGludCBjdnRmbm91dCwoY2hhcikpOwkJLyogT3V0cHV0IGZ1bmN0aW9u IGZvciB4cG5ieXRlKCkgKi8KLWludAotI2lmZGVmIENLX0FOU0lDCi1jdnRmbm91dChjaGFyIGMp Ci0jZWxzZQotY3Z0Zm5vdXQoYykgY2hhciBjOwotI2VuZGlmCS8qIENLX0FOU0lDICovCi17Ci0g ICAgaWYgKHBjdnRidWZvdXQgLSBjdnRidWZvdXQgPj0gQ0tNQVhQQVRIKQotICAgICAgcmV0dXJu KC0xKTsKLSAgICAqcGN2dGJ1Zm91dCsrID0gYzsKLSAgICAqcGN2dGJ1Zm91dCA9IE5VTDsKLSAg ICByZXR1cm4oMSk7Ci19Ci0KLS8qIENvbnZlcnQgYSBzdHJpbmcgZnJvbSBhbnkgY2hhcnNldCB0 byBhbnkgb3RoZXIgY2hhcnNldCAqLwotCi1jaGFyICoKLWN2dHN0cmluZyhzLGNzaW4sY3NvdXQp IGNoYXIgKiBzOyBpbnQgY3NpbiwgY3NvdXQ7IHsKLSAgICBpbnQgYzsKLSAgICBleHRlcm4gQ0tf T0ZGX1QgZmZjOwotCi0gICAgY2tzdHJuY3B5KGN2dGJ1ZmluLHMsQ0tNQVhQQVRIKTsJLyogUHV0 IGl0IGluIGEgcHVibGljIHBsYWNlICovCi0gICAgcGN2dGJ1ZmluID0gY3Z0YnVmaW47CQkvKiB3 aXRoIHB1YmxpYyBwb2ludGVycyAqLwotICAgIHBjdnRidWZvdXQgPSBjdnRidWZvdXQ7Ci0gICAg KnBjdnRidWZvdXQgPSBOVUw7Ci0KLSAgICBpZiAoY3NpbiA9PSBjc291dCkJCQkvKiBJZiB0aGUg dHdvIHNldHMgYXJlIHRoZSBzYW1lICovCi0gICAgICByZXR1cm4oKGNoYXIgKiljdnRidWZpbik7 CQkvKiBkb24ndCBib3RoZXIgY29udmVydGluZyAqLwotCi0gICAgaW5pdHhsYXRlKGNzaW4sY3Nv dXQpOwkJLyogSW5pdGlhbGl6ZSB0aGUgdHJhbnNsYXRvciAqLwotCi0gICAgd2hpbGUgKChjID0g eGduYnl0ZShGQ19VQ1MyLGNzaW4sY3Z0Zm5pbikpID4gLTEpIHsgLyogTG9vcCB0aHJ1IHN0cmlu ZyAqLwotCWlmICh4cG5ieXRlKGMsVENfVUNTMixjc291dCxjdnRmbm91dCkgPCAwKSB7Ci0JICAg IGZmYyA9IChDS19PRkZfVCkwOwotCSAgICByZXR1cm4oIiIpOwotCX0KLSAgICB9Ci0gICAgLyog ZmZjIGlzIHRvdWNoZWQgYnkgeGduYnl0ZSgpIGJ1dCB0aGlzIGlzIG5vdCBmaWxlIHRyYW5zZmVy ICovCi0gICAgLyogc28gd2UgaGF2ZSB0byB1bmRvIGl0ICovCi0gICAgZmZjID0gKENLX09GRl9U KTA7Ci0gICAgcmV0dXJuKChjaGFyICopY3Z0YnVmb3V0KTsKLX0KLSNlbmRpZiAvKiBOT1VOSUNP REUgKi8KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSNpZm5kZWYgTk9SRU5BTUUKLSNpZm5kZWYg Tk9GUklMTFMKLSNpZmRlZiBaUkVOQU1FCi0KLS8qIFRoZSBSRU5BTUUgY29tbWFuZCAtIGV4cGFu ZGVkIGFuZCBpbXByb3ZlZCBpbiA4LjAuMjEyIEFwcmlsIDIwMDYgKi8KLQotc3RhdGljIGNoYXIg KiByZW5fc3ViWzRdID0geyBOVUxMLE5VTEwsTlVMTCxOVUxMIH07IC8qIEZvciBSRU5BTUUgL1JF UExBQ0UgKi8KLQotaW50IHJlbl9saXN0ID0gMDsJCSAgICAgICAgLyogRGVmYXVsdCBsaXN0aW5n IGFjdGlvbiBmb3IgUkVOQU1FICovCi1pbnQgcmVuX2NvbGwgPSBSRU5YX09WV1I7CQkvKiBEZWZh dWx0IGNvbGxpc2lvbiBhY3Rpb24gKi8KLQotaW50Ci1zaG9yZW5hbWUoKSB7Ci0gICAgY2hhciAq IHM7Ci0gICAgc3dpdGNoIChyZW5fY29sbCkgewotICAgICAgY2FzZSBSRU5YX0ZBSUw6IHMgPSAi ZmFpbCI7IGJyZWFrOwotICAgICAgY2FzZSBSRU5YX09WV1I6IHMgPSAib3ZlcndyaXRlIjsgYnJl YWs7Ci0gICAgICBjYXNlIFJFTlhfU0tJUDogcyA9ICJwcm9jZWVkIjsgYnJlYWs7Ci0gICAgfQot ICAgIHByaW50ZigiIHJlbmFtZSBjb2xsaXNpb246ICVzXG4iLHMpOwotICAgIHByaW50ZigiIHJl bmFtZSBsaXN0OiAgICAgICVzXG4iLHNob3dvZmYocmVuX2xpc3QpKTsKLSAgICByZXR1cm4oMSk7 Ci19Ci0KLWludAotc2V0cmVuYW1lKCkgewkJCQkvKiBQYXJzZSBTRVQgUkVOQU1FIG9wdGlvbnMg Ki8KLSAgICBpbnQgeCwgeTsKLSAgICBpZiAoKHggPSBjbWtleShyZW5hbXNldCxucmVuYW1zZXQs IiIsIiIsIHh4c3RyaW5nKSkgPCAwKQotICAgICAgcmV0dXJuKHgpOwotICAgIHN3aXRjaCAoeCkg ewotICAgICAgY2FzZSBSRU5fT1ZXOgkJCS8qIENPTExJU0lPTiAqLwotCWlmICgoeCA9IGNta2V5 KHJfY29sbGlzaW9uLG5yX2NvbGxpc2lvbiwiIiwiIiwgeHhzdHJpbmcpKSA8IDApCi0JICByZXR1 cm4oeCk7Ci0JaWYgKCh5ID0gY21jZm0oKSkgPCAwKQotCSAgcmV0dXJuKHkpOwotCXJlbl9jb2xs ID0geDsKLQlicmVhazsKLSAgICAgIGNhc2UgREVMX0xJUzoJCQkvKiBMSVNUICovCi0JcmV0dXJu KHNldG9uKCZyZW5fbGlzdCkpOwotICAgIH0KLSAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotfQot Ci0vKiBSZXZlcnNlIGEgc3RyaW5nIC0gQXNzdW1lcyBhIHNpbmdsZS1ieXRlIGNoYXJhY3RlciBz ZXQgKi8KLQotaW50Ci1nbmlydHMoczEsIHMyLCBsZW4pIGNoYXIgKiBzMSwgKiBzMjsgaW50IGxl bjsgewotICAgIGludCBuLCBtID0gMDsKLSAgICBpZiAoIXMxKQkJCQkvKiBOdWxsIHNvdXJjZSBw b2ludGVyLCBmYWlsICovCi0gICAgICByZXR1cm4oMCk7Ci0gICAgbiA9IChpbnQpIHN0cmxlbihz MSk7Ci0gICAgaWYgKG4gPiBsZW4tMSkJCQkvKiBTb3VyY2UgbG9uZ2VyIHRoYW4gZGVzdCwgZmFp bCAqLwotICAgICAgcmV0dXJuKDApOwotICAgIHMyW24tLV0gPSBOVUw7CQkJLyogRGVwb3NpdCBu dWxsIGJ5dGUgYXQgZW5kIG9mIGRlc3QgKi8KLSAgICBmb3IgKDsgbiA+PSAwOyBuLS0pIHsJCS8q IENvcHkgdGhlIHJlc3QgYmFja3dhcmRzICovCi0JKnMyKysgPSBzMVtuXTsKLQltKys7Ci0gICAg fQotICAgIHJldHVybihtKTsKLX0KLQotLyoKLSAgciBlIG4gYSBtIGUgbyBuIGUKLQotICBXb3Jr ZXIgZnVuY3Rpb24gdG8gcmVuYW1lIG9uZSBmaWxlIGZvciBkb3JlbmFtKCkgKGJlbG93KS4KLSAg ICBvbGQgICAgICAgID0gbmFtZSBvZiBmaWxlIG9yIGRpcmVjdG9yeSB0byBiZSByZW5hbWVkCi0g ICAgbmV3ICAgICAgICA9IG5ldyBuYW1lIChub3QgcmVxdWlyZWQgZm9yIC9VUFBFUiwgL0xPV0VS LCBhbmQgL1JFUExBQ0UpCi0gICAgcmVwbGFjaW5nICA9IDEgaWYgZG9pbmcgc3RyaW5nIHJlcGxh Y2VtZW50IG9uIHRoZSBuYW1lICAKLSAgICBjYXNpbmcgICAgID0gMSBpZiBjb252ZXJ0aW5nIG5h bWUgdG8gbG93ZXJjYXNlLCAyIGlmIHRvIHVwcGVyY2FzZQotICAgIGFsbCAgICAgICAgPSBpZiBk b2luZyBjYXNlIGNvbnZlcnNpb24gb24gYWxsIG5hbWVzLCBub3QganVzdCBtb25vY2FzZSBvbmVz Ci0gICAgY29udmVydGluZyA9IDEgaWYgY29udmVydGluZyBjaGFyYWN0ZXIgc2V0cwotICAgIGNz ZXQxICAgICAgPSBjaGFyYWN0ZXIgc2V0IHRvIGNvbnZlcnQgZnJvbSAoRmlsZSBDaGFyYWN0ZXIg U2V0IGluZGV4KQotICAgIGNzZXQyICAgICAgPSBjaGFyYWN0ZXIgc2V0IHRvIGNvbnZlcnQgdG8g KGRpdHRvLCBzZWUgY2s/eGxhLmgpCi0gICAgbGlzdGluZyAgICA9IDEgdG8gc2hvdyByZXN1bHRz IG9mIHJlbmFtZQotICAgIG5vbGlzdCAgICAgPSAxIHRvIGJlIGNvbXBsZXRlbHkgc2lsZW50IChk b24ndCBldmVuIHByaW50IGVycm9yIG1lc3NhZ2VzKQotICAgIG9wICAgICAgICAgPSAxIG1lYW5z IHNpbXVsYXRlLCAyIG1lYW5zIGNoZWNrIGZvciBjb2xsaXNpb24sIDAgbWVhbnMgcmVuYW1lCi0g ICAgc2l6ZSAgICAgICA9IGxlbmd0aCBvZiByZXN1bHQgYnVmZmVyLgotICAgIGNvbGxpc2lvbiAg PSBhY3Rpb24gdG8gdGFrZSBpZiBkZXN0aW5hdGlvbiBmaWxlIGFscmVhZHkgZXhpc3RzOgotICAg ICAgICAgICAgICAgICAwID0gZmFpbAotICAgICAgICAgICAgICAgICAxID0gb3ZlcndyaXRlIGFu ZCBzdWNjZWVkCi0gICAgICAgICAgICAgICAgIDIgPSBza2lwIGFuZCBzdWNjZWVkCi0gIFJldHVy bnM6Ci0gICAgIDA6IG9uIGZhaWx1cmUgdG8gcmVuYW1lIG9yIHdoZW4gYSBmb3JiaWRkZW4gY29s bGlzaW9uIHdvdWxkIGhhdmUgb2NjdXJyZWQuCi0gICAgIDE6IG9uIHN1Y2Nlc3MgKGZpbGUgd2Fz IHJlbmFtZWQgb3IgZGlkIG5vdCBuZWVkIHRvIGJlIHJlbmFtZWQpLgotICBOb3RlOgotICAgICBJ ZiB0aGlzIGNvZGUgaXMgZXZlciBidWlsdCBvbiBhbnkgcGxhdGZvcm0gdGhhdCBpcyBub3QgVW5p eCwgV2luZG93cywKLSAgICAgVk1TLCBvciBPUy8yLCB0aGlzIHJvdXRpbmUgbWlnaHQgbmVlZCBz b21lIGFkanVzdG1lbnQuCi0qLwotCi0vKiBPcGNvZGVzIGZvciBvcC4uLiAqLwotI2RlZmluZSBS RU5fT1BfU0lNIDEJCQkvKiBTaW11bGF0ZSAqLwotI2RlZmluZSBSRU5fT1BfQ0hLIDIJCQkvKiBD aGVjayBmb3IgY29sbGlzaW9ucyAqLwotCi1zdGF0aWMgaW50Ci1yZW5hbWVvbmUob2xkLG5ldywK LQkgIHJlcGxhY2luZyxjYXNpbmcsYWxsLGNvbnZlcnRpbmcsY3NldDEsY3NldDIsCi0JICBsaXN0 aW5nLG5vbGlzdCxvcCxzaXplLGNvbGxpc2lvbikKLSAgICBjaGFyICogb2xkLCAqIG5ldzsKLSAg ICBpbnQgcmVwbGFjaW5nLGNhc2luZyxhbGwsY29udmVydGluZyxjc2V0MSxjc2V0MiwKLSAgICBs aXN0aW5nLG5vbGlzdCxvcCxzaXplLGNvbGxpc2lvbjsKLXsKLSAgICBjaGFyIGJ1ZltDS01BWFBB VEhdOwkJLyogVGVtcG9yYXJ5IGZpbGVuYW1lIGJ1ZmZlciAqLwotICAgIGNoYXIgb3V0W0NLTUFY UEFUSF07CQkvKiBCdWZmZXIgZm9yIG5ldyBuYW1lICovCi0gICAgY2hhciBkaXJbQ0tNQVhQQVRI XTsJCS8qIERlc3RpbmF0aW9uIGRpcmVjdG9yeSAqLwotICAgIGNoYXIgcGF0W0NLTUFYUEFUSF07 CQkvKiBQYXRoIHNlZ21lbnQgb24gb2xkIGZpbGVuYW1lICovCi0KLSAgICBjaGFyICogZGVzdGRp cjsJCQkvKiBEZXN0aW5hdGlvbiBkaXJlY3RvcnksIGlmIGFueSAqLwotICAgIGNoYXIgKiBzcmNw YXRoOwkJCS8qIFNvdXJjZSBwYXRoLCBpZiBhbnkgKi8KLSAgICBpbnQgcmMgPSAxLCBmbGFnID0g MCwgc2tpcCA9IDA7CS8qIENvbnRyb2wgKi8KLSAgICBpbnQgaG9ub3JjYXNlID0gMCwgcmVwbGFj ZWQgPSAwOwotICAgIGludCBhbmNob3IgPSAwOwkJCS8qIDEgPSBiZWdpbm5pbmcsIDIgPSBlbmQg Ki8KLSAgICBpbnQgb2NjdXIgPSAwOwkJCS8qIE9jY3VycmVuY2UgKi8KLSAgICBpbnQgbWludXMg PSAwOwkJCS8qIE9jY3VycmVuY2UgaXMgbmVnYXRpdmUgKi8KLSAgICBpbnQgYWxsYnV0ID0gMDsJ CQkvKiBPY2N1cnJlbmNlIGlzICJhbGwgYnV0IiAqLwotICAgIGludCBhcmcyaXNmaWxlID0gMDsJ CQkvKiBBcmcyICgibmV3IikgaXMgYSBmaWxlbmFtZSAqLwotICAgIAotICAgIGRlYnVnKEYxMTAs IlJFTkFNRU9ORSBvbGQiLG9sZCwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJSRU5BTUVPTkUgbmV3Iixu ZXcsMCk7Ci0gICAgZGVidWcoRjExMCwiUkVOQU1FT05FIHJlbl9zdWJbMF0iLHJlbl9zdWJbMF0s MCk7Ci0gICAgZGVidWcoRjExMCwiUkVOQU1FT05FIHJlbl9zdWJbMV0iLHJlbl9zdWJbMV0sMCk7 Ci0gICAgZGVidWcoRjExMCwiUkVOQU1FT05FIHJlbl9zdWJbMl0iLHJlbl9zdWJbMl0sMCk7Ci0K LSAgICBpZiAob3AgPT0gUkVOX09QX1NJTSAmJiAhbm9saXN0KQkvKiBGb3IgY29udmVuaWVuY2Ug Ki8KLSAgICAgIGxpc3RpbmcgPSAxOwotI2lmbmRlZiBOT1NQTAotICAgIGhvbm9yY2FzZSA9IGlu cGNhc1tjbWRsdmxdOwkJLyogSW5oZXJpdCBTRVQgQ0FTRSB2YWx1ZSAqLwotI2Vsc2UKLSNpZmRl ZiBVTklYCi0gICAgaG9ub3JjYXNlID0gMTsKLSNlbHNlCi0gICAgaG9ub3JjYXNlID0gMDsKLSNl bmRpZgkvKiBVTklYICovCi0jZW5kaWYJLyogTk9TUEwgKi8KLQotICAgIGlmICghb2xkKSBvbGQg PSAiIjsJCQkvKiBJbiBjYXNlIG9mIGJhZCBhcmdzICovCi0gICAgaWYgKCFuZXcpIG5ldyA9ICIi OwotICAgIGlmICghKm9sZCkgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICBja3N0cm5jcHkob3V0 LG5ldyxDS01BWFBBVEgpOwkvKiBTbyB3ZSBkb24ndCB3cml0ZSBpbnRvICovCi0gICAgbmV3ID0g b3V0OwkJCQkvKiBvdXIgYXJndW1lbnQuLi4gKi8KLSAgICBzaXplID0gQ0tNQVhQQVRIOwotCi0g ICAgcGF0WzBdID0gTlVMOwkJCS8qIEFzc3VtZSBubyBwYXRoIGluIHNvdXJjZSBmaWxlLi4gKi8K LSAgICBzcmNwYXRoID0gcGF0OwotICAgIHsKLQlpbnQgbjsJCQkJLyogSWYgdGhlIG9sZCBuYW1l IGluY2x1ZGVzIGEgcGF0aCAqLwotCW4gPSAoaW50KXN0cmxlbihvbGQpIC0gMTsJLyogcHV0IGl0 IGluIGEgc2VwYXJhdGUgcGxhY2UuICAgICAqLwotCWZvciAoOyBuID49IDA7IG4tLSkgewkJLyog V2UgYXJlIHJlbmFtaW5nIHRoZSBmaWxlIG9ubHkuICAqLwotCSAgICBpZiAoSVNESVJTRVAob2xk W25dKSkgewotCQlja3N0cm5jcHkocGF0LG9sZCxDS01BWFBBVEgpOwotCQlwYXRbbisxXSA9IE5V TDsKLQkJb2xkID0gb2xkK24rMTsKLQkJYnJlYWs7Ci0JICAgIH0KLQl9Ci0gICAgfQotICAgIGRl YnVnKEYxMTAsIlJFTkFNRU9ORSBvbGQgMiIsb2xkLDApOwotICAgIGRlYnVnKEYxMTAsIlJFTkFN RU9ORSBwYXQgMiIscGF0LDApOwotCi0gICAgZGlyWzBdID0gTlVMOwkJCS8qIEFzc3VtZSBubyBk ZXN0aW5hdGlvbiBkaXJlY3RvcnkgKi8KLSAgICBkZXN0ZGlyID0gZGlyOwotICAgIGlmICgqbmV3 KSB7CQkJCS8qIElmIEFyZzIgZ2l2ZW4gKi8KLQlpZiAoaXNkaXIobmV3KSkgewkJLyogSWYgaXQn cyBhIGRpcmVjdG9yeSAqLwotCSAgICBja3N0cm5jcHkoZGlyLG5ldyxDS01BWFBBVEgpOyAvKiBw dXQgaXQgaGVyZSAqLwotCX0gZWxzZSB7CQkJLyogb3RoZXJ3aXNlICovCi0JICAgIGFyZzJpc2Zp bGUrKzsJCS8qIGZsYWcgdGhhdCBpdCdzIGEgZmlsZW5hbWUgKi8KLQl9ICAgIAotICAgIH0KLSAg ICBpZiAoIWNhc2luZyAmJiAhcmVwbGFjaW5nICYmICFjb252ZXJ0aW5nKSB7Ci0JaWYgKCEqbmV3 KQotCSAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLQlpZiAoIWFyZzJpc2ZpbGUpIHsJCS8qIERlc3Rp bmF0aW9uIGlzIGEgZGlyZWN0b3J5PyAqLwotCSAgICBpZiAoIWlzZGlyKG9sZCkpIHsJCS8qIGFu ZCBzb3VyY2UgaXMgbm90PyAqLwotI2lmbmRlZiBWTVMKLQkJaW50IG4sIHggPSAwOwkJLyogQ29u Y2F0ZW5hdGUgdGhlbSAqLwotCQlpZiAoKG4gPSBzdHJsZW4obmV3KSkgPiAwKSAvKiBzbyB3ZSBj YW4gY2hlY2sgZm9yICovCi0JCSAgaWYgKElTRElSU0VQKG5ld1tuLTFdKSkgIC8qIGNvbGxpc2lv bnMuICovCi0JCSAgICB4Kys7Ci0JCWNrbWFrbXNnKGJ1ZixzaXplLG5ldyx4ID8gIiIgOiAiLyIs IG9sZCwgIiIpOwotI2Vsc2UKLQkJY2ttYWttc2coYnVmLHNpemUsbmV3LCBvbGQsIE5VTEwsIE5V TEwpOwotI2VuZGlmCS8qIFZNUyAqLwotCQlkZWJ1ZyhGMTEwLCJSRU5BTUVPTkUgbmV3IG5ldyIs bmV3LDApOwkJCi0JCW5ldyA9IGJ1ZjsKLQkJc2l6ZSA9IENLTUFYUEFUSDsKLQkgICAgfQotCX0K LSAgICB9IGVsc2UgaWYgKCpuZXcpIHsJCQkvKiBEaXJlY3RvcnkgdG8gbW92ZSBmaWxlIHRvICov Ci0JaW50IG4sIHggPSAwOwkJCS8qIGFmdGVyIGNoYW5naW5nIGl0cyBuYW1lICovCi0JaWYgKCFp c2RpcihuZXcpKQotCSAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSNpZm5kZWYgVk1TCi0JaWYgKChu ID0gc3RybGVuKG5ldykpID4gMCkKLQkgIGlmIChJU0RJUlNFUChuZXdbbi0xXSkpCi0JICAgIHgr KzsKLQlja21ha21zZyhkaXIsQ0tNQVhQQVRILG5ldyx4ID8gIiIgOiAiLyIsICIiLCAiIik7Ci0j ZWxzZQotCWNrc3RybmNweShkaXIsbmV3LENLTUFYUEFUSCk7Ci0jZW5kaWYJLyogVk1TICovCi0g ICAgfQotCi0jaWZuZGVmIE5PQ1NFVFMKLSNpZm5kZWYgTk9VTklDT0RFCi0gICAgaWYgKGNvbnZl cnRpbmcpIHsKLQluZXcgPSBjdnRzdHJpbmcob2xkLGNzZXQxLGNzZXQyKTsKLSAgICB9Ci0jZW5k aWYJLyogTk9VTklDT0RFICovCi0jZW5kaWYJLyogTk9DU0VUUyAqLwotCi0gICAgaWYgKHJlcGxh Y2luZykgewkJCS8qIFJlcGxhY2luZyBzdHJpbmdzICovCi0JaW50IHRvZG8gPSAwOwotCWludCBs ZW4wLCBsZW4xLCBsZW4yOwotCWNoYXIgYywgKnAsICpzLCAqYnBbM107Ci0KLQlicFswXSA9IG9s ZDsJCQkvKiBPcmlnaW5hbCBuYW1lICovCi0JYnBbMV0gPSByZW5fc3ViWzBdOwkJLyogU3RyaW5n IHRvIGJlIHJlcGxhY2VkICovCi0JYnBbMl0gPSByZW5fc3ViWzFdOwkJLyogV2hhdCB0byByZXBs YWNlIGl0IHdpdGggKi8KLQlpZiAoIWJwWzJdKSBicFsyXSA9ICIiOwotCi0JbGVuMCA9IChpbnQp c3RybGVuKGJwWzBdKTsJLyogbGVuZ3RoIG9mIG9yaWdpbmFsIGZpbGVuYW1lICovCi0JbGVuMSA9 IChpbnQpc3RybGVuKGJwWzFdKTsJLyogbGVuZ3RoIG9mIHRhcmdldCBzdWJzdHJpbmcgKi8KLQls ZW4yID0gKGludClzdHJsZW4oYnBbMl0pOwkvKiBMZW5ndGggb2YgcmVwbGFjZW1lbnQgc3RyaW5n ICovCi0KLQlpZiAocmVuX3N1YlsyXSkgewkJLyogT3B0aW9uYWwgb3B0aW9ucyAqLwotCSAgICBw ID0gcmVuX3N1YlsyXTsKLQkgICAgd2hpbGUgKChjID0gKnArKykpIHsKLQkJc3dpdGNoIChjKSB7 Ci0JCSAgY2FzZSAnXic6Ci0JCSAgICBhbmNob3IgPSAxOyBvY2N1ciA9IDA7IG1pbnVzID0gMDsg YWxsYnV0ID0gMDsgYnJlYWs7Ci0JCSAgY2FzZSAnJCc6Ci0JCSAgICBhbmNob3IgPSAyOyBvY2N1 ciA9IDA7IG1pbnVzID0gMDsgYWxsYnV0ID0gMDsgYnJlYWs7Ci0JCSAgY2FzZSAnQSc6IGhvbm9y Y2FzZSA9IDE7IG1pbnVzID0gMDsgYWxsYnV0ID0gMDsgYnJlYWs7Ci0JCSAgY2FzZSAnYSc6IGhv bm9yY2FzZSA9IDA7IG1pbnVzID0gMDsgYWxsYnV0ID0gMDsgYnJlYWs7Ci0JCSAgY2FzZSAnLSc6 IG1pbnVzID0gMTsgYnJlYWs7Ci0JCSAgY2FzZSAnfic6IGFsbGJ1dCA9IDE7IGJyZWFrOwotCQkg IGRlZmF1bHQ6Ci0JCSAgICBpZiAoaXNkaWdpdChjKSkgewotCQkJb2NjdXIgPSBjIC0gJzAnOwot CQkJaWYgKG1pbnVzKSBvY2N1ciA9IDAgLSBvY2N1cjsKLQkJCWFuY2hvciA9IDA7Ci0JCSAgICB9 Ci0JCSAgICBtaW51cyA9IDA7Ci0JCX0KLQkgICAgfQotCX0KLQlpZiAoYW5jaG9yKSB7CQkJLyog QW5jaG9yZWQgcmVwbGFjZW1lbnQuLi4gKi8KLQkgICAgeSA9IGxlbjAgLSBsZW4xOwotCSAgICBp ZiAoeSA+IDApIHsKLQkJaW50IHg7Ci0JCXN3aXRjaCAoYW5jaG9yKSB7Ci0JCSAgY2FzZSAxOgkJ LyogQW5jaG9yZWQgYXQgYmVnaW5uaW5nICovCi0JCSAgICBpZiAoIWNrc3RyY21wKGJwWzFdLGJw WzBdLGxlbjEsaG9ub3JjYXNlKSkgewotCQkJeCA9IGNrc3RybmNweShuZXcsYnBbMl0sc2l6ZSk7 Ci0JCQkoVk9JRCkgY2tzdHJuY3B5KG5ldyt4LGJwWzBdK2xlbjEsc2l6ZS14KTsKLQkJCXJlcGxh Y2VkID0gMTsKLQkJICAgIH0KLQkJICAgIGJyZWFrOwotCQkgIGNhc2UgMjoJCS8qIEFuY2hvcmVk IGF0IGVuZCAqLwotCQkgICAgaWYgKCFja3N0cmNtcChicFsxXSxicFswXSt5LGxlbjEsaG9ub3Jj YXNlKSkgewotCQkJeCA9IGNrc3RybmNweShuZXcsYnBbMF0seSsxKTsKLQkJCShWT0lEKSBja3N0 cm5jcHkobmV3K3ksYnBbMl0sc2l6ZS14KTsKLQkJCXJlcGxhY2VkID0gMTsKLQkJICAgIH0KLQkJ ICAgIGJyZWFrOwotCQl9Ci0JICAgIH0KLQkgICAgaWYgKCFyZXBsYWNlZCkgewotCQlja3N0cm5j cHkobmV3LG9sZCxzaXplKTsgLyogS2VlcCBvbGQgbmFtZSAqLwotCQlyZXBsYWNlZCA9IDE7Ci0J ICAgIH0KLQl9IGVsc2UgewkJCS8qIFJlcGxhY2UgYWxsIG9jY3VycmVuY2VzICovCi0JICAgIGlu dCBqLCBuID0gMDsJCS8qIG9yIGEgcGFydGljdWxhciBvY2N1cnJlbmNlICovCi0JICAgIGNoYXIg YzsKLQkgICAgaW50IHggPSAwOwotCSAgICBjaGFyICogczAgPSBOVUxMLCAqIHMxID0gTlVMTCwg KiBzMiA9IE5VTEw7Ci0JICAgIHAgPSBuZXc7CQkJLyogUG9pbnRlciB0byBuZXcgbmFtZSAqLwot Ci0JICAgIGlmIChvY2N1ciA8IDApIHsJCS8qIG50aCBvY2N1cnJlbmNlIGZyb20gdGhlIHJpZ2h0 ICovCi0JCW9jY3VyID0gMCAtIG9jY3VyOwotCQlzMCA9IChjaGFyICopbWFsbG9jKGxlbjArMSk7 IC8qIFJldmVyc2Ugb3JpZ2luYWwgc3RyaW5nICovCi0JCWlmIChzMCkgewotCQkgICAgKFZPSUQp IGduaXJ0cyhicFswXSxzMCxsZW4wKzEpOwotCQkgICAgYnBbMF0gPSBzMDsKLQkJfSBlbHNlIHJl dHVybigwKTsgCi0JCXMxID0gKGNoYXIgKiltYWxsb2MobGVuMSsxKTsgLyogUmV2ZXJzZSB0YXJn ZXQgc3RyaW5nICovCi0JCWlmIChzMSkgewotCQkgICAgKFZPSUQpIGduaXJ0cyhicFsxXSxzMSxs ZW4xKzEpOwotCQkgICAgYnBbMV0gPSBzMTsKLQkJfSBlbHNlIHJldHVybigwKTsgCi0JCXMyID0g KGNoYXIgKiltYWxsb2MobGVuMisxKTsgLyogUmV2ZXJzZSByZXBsYWNlbWVudCBzdHJpbmcgKi8K LQkJaWYgKHMyKSB7Ci0JCSAgICAoVk9JRCkgZ25pcnRzKGJwWzJdLHMyLGxlbjIrMSk7Ci0JCSAg ICBicFsyXSA9IHMyOwotCQl9IGVsc2UgcmV0dXJuKDApOyAKLQkJZGVidWcoRjExMSwiUkVOQU1F T05FIHMwIixzMCxsZW4wKTsKLQkJZGVidWcoRjExMSwiUkVOQU1FT05FIHMxIixzMSxsZW4xKTsK LQkJZGVidWcoRjExMSwiUkVOQU1FT05FIHMyIixzMixsZW4yKTsKLQkgICAgfQotCSAgICBzID0g YnBbMF07CQkJLyogUG9pbnRlciB0byBvbGQgbmFtZSAqLwotCSAgICBwID0gbmV3OwkJCS8qIFBv aW50ZXIgdG8gbmV3IG5hbWUgKi8KLQkgICAgaiA9IGxlbjAgLSBsZW4xICsgMTsJLyogSG93IG11 Y2ggdG8gc2NhbiAqLwotCSAgICB3aGlsZSAoai0tID4gMCkgewkJLyogRm9yIGVhY2ggY2hhcmFj dGVyLi4uICovCi0JCWlmICghY2tzdHJjbXAoYnBbMV0scyxsZW4xLGhvbm9yY2FzZSkpIHsgLyog TWF0Y2g/ICovCi0JCSAgICBuKys7CQkvKiBPY2N1cnJlbmNlIGNvdW50ZXIgKi8KLQkJICAgIHRv ZG8gPSAob2NjdXIgPT0gMCkgfHwKLQkJCSghYWxsYnV0ICYmIG4gPT0gb2NjdXIpIHx8Ci0JCQko YWxsYnV0ICYmIG4gIT0gb2NjdXIpOwotCQkgICAgaWYgKCF0b2RvKSB7CS8qIERlc2lyZWQgb2Nj dXJyZW5jZT8gKi8KLQkJCXNpemUgLT0gY2tzdHJuY3B5KHAsYnBbMV0sc2l6ZSk7IC8qIE5vLi4u ICovCi0JCQlwICs9IGxlbjE7CS8qIENvcHkgdGFyZ2V0IHN0cmluZyAqLwotCQkJcyArPSBsZW4x OwkvKiBpbnN0ZWFkIG9mIHJlcGxhY2VtZW50IHN0cmluZyAqLwotCQkJY29udGludWU7Ci0JCSAg ICB9Ci0JCSAgICBpZiAobGVuMikgewkJLyogSWYgcmVwbGFjZW1lbnQgc3RyaW5nIG5vdCBlbXB0 eSAqLwotCQkJc2l6ZSAtPSBja3N0cm5jcHkocCxicFsyXSxzaXplKTsgLyogQ29weSBpdCAqLwot CQkJcCArPSBsZW4yOwotCQkgICAgfQotCQkgICAgcyArPSBsZW4xOwkJLyogQWR2YW5jZSBzb3Vy Y2UgcG9zaXRpb24gKi8KLQkJfSBlbHNlIHsJCS8qIE5vIG1hdGNoICovCi0JCSAgICAqcCsrID0g KnMrKzsJLyoganVzdCBjb3B5IHRoaXMgY2hhcmFjdGVyICovCi0JCSAgICBzaXplLS07Ci0JCX0K LQkgICAgfQotCSAgICB3aGlsZSAoKCpwKysgPSAqcysrKSk7CS8qIERvbmUgY29weSB0aGUgcmVz dCAqLwotCSAgICByZXBsYWNlZCA9IDE7CQkvKiBSZW1lbWJlciB3ZSBjaGFuZ2VkIHRoZSBuYW1l ICovCi0JICAgIGlmIChzMCkgewkJCS8qIFdlcmUgd2UgZG9pbmcgImFsbCBidXQiPyAqLwotCQlk ZWJ1ZyhGMTEwLCJSRU5BTUVPTkUgbmV3MSIsbmV3LDApOwotCQl4ID0gKGludClzdHJsZW4obmV3 KTsJLyogVW5yZXZlcnNlIHRoZSByZXN1bHQgKi8KLQkJaWYgKChwID0gKGNoYXIgKiltYWxsb2Mo eCsyKSkpIHsKLQkJICAgIChWT0lEKSBnbmlydHMobmV3LHAseCsyKTsKLQkJICAgIGRlYnVnKEYx MTAsIlJFTkFNRU9ORSBuZXcyIixuZXcsMCk7Ci0JCSAgICBja3N0cm5jcHkobmV3LHAseCsyKTsK LQkJICAgIGZyZWUocCk7Ci0JCX0KLQkJaWYgKHMwKSBmcmVlKHMwKTsJLyogRnJlZSB0aGUgdGVt cG9yYXJ5IHN0cmluZ3MgKi8KLQkJaWYgKHMxKSBmcmVlKHMxKTsKLQkJaWYgKHMyKSBmcmVlKHMy KTsKLQkJZGVidWcoRjExMCwiUkVOQU1FT05FIG5ldzMiLG5ldywwKTsKLQkgICAgfQotCX0KLSAg ICB9Ci0gICAgaWYgKGNhc2luZykgewkJCS8qIENoYW5naW5nIGNhc2U/ICovCi0JY2hhciBjLCAq IHQ7CQkJLyogU2VlIGlmIG1peGVkIGNhc2UuICovCi0JaWYgKCFyZXBsYWNlZCkKLQkgIGNrc3Ry bmNweShuZXcsb2xkLHNpemUpOwkvKiBDb3B5IG9sZCBuYW1lIHRvIG5ldyBuYW1lICovCi0JdCA9 IG5ldzsKLQl3aGlsZSAoKGMgPSAqdCsrKSkgewotCSAgICBpZiAoaXNsb3dlcihjKSkgZmxhZyB8 PSAxOyAvKiBIYXZlIGEgbG93ZXJjYXNlIGxldHRlciAqLwotCSAgICBlbHNlIGlmIChpc3VwcGVy KGMpKSBmbGFnIHw9IDI7IC8qIEhhdmUgYW4gdXBwZXJjYXNlIGxldHRlciAqLwotCSAgICBpZiAo ZmxhZyA9PSAzKSBicmVhazsJLyogSGF2ZSBhIG1peGVkLWNhc2UgbmFtZSAqLwotCX0KLQlpZiAo YWxsIHx8IGZsYWcgPCAzKSB7CS8qIE5vdCBza2lwcGluZyBvciBub3QgbWl4ZWQgY2FzZSAqLwot CSAgICBpZiAoY2FzaW5nID09IDEgJiYgZmxhZyAhPSAxKSAvKiBDaGFuZ2UgY2FzZSB0byBsb3dl ciAqLwotCSAgICAgIChWT0lEKSBja2xvd2VyKG5ldyk7Ci0JICAgIGVsc2UgaWYgKGNhc2luZyA9 PSAyICYmIGZsYWcgIT0gMikgLyogQ2hhbmdlIGNhc2UgdG8gdXBwZXIgKi8KLQkgICAgICAoVk9J RCkgY2t1cHBlcihuZXcpOwotCX0KLSAgICB9Ci0gICAgZGVidWcoRjExMCwiWFhYIDEgbmV3Iixu ZXcsMCk7Ci0gICAgZGVidWcoRjExMCwiWFhYIDEgb2xkIixvbGQsMCk7Ci0gICAgZGVidWcoRjEx MCwiWFhYIDEgc3JjcGF0aCIsc3JjcGF0aCwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJYWFggMSBkZXN0 ZGlyIixkZXN0ZGlyLDApOwotCi0gICAgaWYgKCpkZXN0ZGlyICYmICFhcmcyaXNmaWxlKSB7CS8q IE1vdmluZyB3aXRob3V0IHJlbmFtaW5nICovCi0JY2tzdHJuY2F0KHNyY3BhdGgsb2xkLENLTUFY UEFUSCk7Ci0Jb2xkID0gc3JjcGF0aDsKLQluZXcgPSBkZXN0ZGlyOwotICAgIH0gZWxzZSBpZiAo KmRlc3RkaXIgfHwgKnNyY3BhdGgpIHsJLyogV2VyZSB0aGVyZSBhbnkgcGF0aG5hbWVzPyAqLwot CWNoYXIgdG1wW0NLTUFYUEFUSF07Ci0JY2ttYWttc2codG1wLENLTUFYUEFUSCxzcmNwYXRoLG9s ZCxOVUxMLE5VTEwpOwotCWNrc3RybmNweShvbGQsdG1wLENLTUFYUEFUSCk7Ci0JaWYgKCpkZXN0 ZGlyKSB7CQkJLyogRGlyZWN0b3J5LXRvLW1vdmUtdG8gZ2l2ZW4/ICovCi0JICAgIGNrc3RybmNh dChkZXN0ZGlyLG5ldyxDS01BWFBBVEgpOwotCSAgICBuZXcgPSBkZXN0ZGlyOwotCX0gZWxzZSBp ZiAoKnNyY3BhdGggJiYgIWFyZzJpc2ZpbGUpIHsgLyogT3Igd2FzIHRoZXJlIGEgc291cmNlIHBh dGg/ICovCi0JICAgIGNrc3RybmNhdChzcmNwYXRoLG5ldyxDS01BWFBBVEgpOwotCSAgICBuZXcg PSBzcmNwYXRoOwotCX0KLSAgICB9Ci0gICAgZGVidWcoRjExMCwiWFhYIDIiLG5ldywwKTsKLQot ICAgIHNraXAgPSAwOwkJCQkvKiBDYW4gd2Ugc2tpcCB0aGlzIG9uZT8gKi8KLSNpZmRlZiBDT01N RU5UCi0gICAgaWYgKGNhc2luZyAmJiAhcmVwbGFjZWQpIHsKLQlza2lwID0gKCgoYWxsID09IDAp ICYmIChmbGFnID09IDMpKSB8fCAoZmxhZyA9PSBjYXNpbmcpKSA/IDEgOiAwOwotCWlmICghc2tp cCAmJiBkZXN0ZGlyKSBza2lwID0gMDsKLSAgICB9Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwotICAg IGlmICghc2tpcCkgewotCWlmICghY2tzdHJjbXAob2xkLG5ldywtMSwxKSkKLQkgIHNraXAgPSAx OwotICAgIH0KLSAgICBpZiAob3AgPT0gMCAmJiAhc2tpcCAmJiAoY29sbGlzaW9uICE9IFJFTlhf T1ZXUikpIHsKLQlpZiAoemNoa2kobmV3KSA+IChDS19PRkZfVCktMSkgeyAvKiBOZXcgZmlsZSBh bHJlYWR5IGV4aXN0cz8gICovCi0JICAgIHN3aXRjaCAoY29sbGlzaW9uKSB7CS8qIFllcywgdGFr ZSBzcGVjaWZpZWQgYWN0aW9uICovCi0JICAgICAgY2FzZSBSRU5YX1NLSVA6CQkvKiBTa2lwIHRo aXMgb25lIGFuZCBwcm9jZWVkICAqLwotCQlza2lwID0gMjsKLQkJYnJlYWs7Ci0JICAgICAgY2Fz ZSBSRU5YX0ZBSUw6CQkvKiBPciBmYWlsLiAqLwotCQlza2lwID0gMzsKLQkJaWYgKCFsaXN0aW5n ICYmICFub2xpc3QpCi0JCSAgcHJpbnRmKCI/RmlsZSBhbHJlYWR5IGV4aXN0czogJXNcbiIsbmV3 KTsKLQkgICAgfQotCX0KLSAgICB9Ci0gICAgZGVidWcoRjExMCwiUkVOQU1FT05FIG5ldyIsbmV3 LDApOwotICAgIGRlYnVnKEYxMDEsIlJFTkFNRU9ORSBmbGFnIiwiIixmbGFnKTsJCi0gICAgZGVi dWcoRjEwMSwiUkVOQU1FT05FIHNraXAiLCIiLHNraXApOwkKLSAgICBkZWJ1ZyhGMTAwLCJSRU5B TUVPTkUgLS0tLS0tLS0tLS0tLS0tLSIsIiIsMCk7Ci0KLSAgICBpZiAoc2tpcCA9PSAzKSB7Ci0J aWYgKGxpc3RpbmcpIHByaW50ZigiJXMgPT4gJXMgKFNLSVBQRUQ6ICVzIGFscmVhZHkgZXhpc3Rz KVxuIiwKLQkJCSAgICBvbGQsbmV3LG5ldyk7Ci0JcmMgPSAwOwotICAgIH0gZWxzZSBpZiAoc2tp cCkgewkJCS8qIFNraXBwaW5nIHRoaXMgb25lICovCi0JaWYgKGxpc3RpbmcpIHByaW50ZigiJXMg PT4gJXMgKCVzKVxuIiwKLQkJCSAgICBvbGQsbmV3LAotCQkJICAgIChza2lwID09IDIpID8gIkNP TExJU0lPTjogU0tJUFBFRCIgOiAiU0tJUFBFRCIpOwotICAgIH0gZWxzZSB7CQkJCS8qIEhhdmUg dG8gcmVuYW1lIHRoaXMgb25lICovCi0JaWYgKG9wID09IFJFTl9PUF9DSEspIHsJCS8qIENoZWNr aW5nIGZvciBjb2xsaXNpb25zICovCi0JICAgIHJldHVybigoemNoa2kobmV3KSA+IChDS19PRkZf VCktMSkgPyAwIDogMSApOwotCX0gZWxzZSBpZiAob3AgPT0gUkVOX09QX1NJTSkgewkvKiBTaW11 bGF0aW5nICovCi0JICAgIGlmIChsaXN0aW5nKSBwcmludGYoIiVzID0+ICVzIChTSU1VTEFURUQp XG4iLG9sZCxuZXcpOwotCX0gZWxzZSB7CQkJLyogUmVhbGx5IHJlbmFtaW5nICovCi0JICAgIGlm IChsaXN0aW5nKSBwcmludGYoIiVzID0+ICVzICIsb2xkLG5ldyk7Ci0JICAgIGlmICh6cmVuYW1l KG9sZCxuZXcpIDwgMCkgewotCQlyYyA9IDA7Ci0JCWlmIChsaXN0aW5nKQotCQkgIHByaW50Zigi KEZBSUxFRDogJXMpXG4iLGNrX2VycnN0cigpKTsKLQkJZWxzZSBpZiAoIW5vbGlzdCkKLQkJICBw cmludGYoIj8lc1xuIixja19lcnJzdHIoKSk7Ci0JICAgIH0gZWxzZSB7Ci0JCWlmIChsaXN0aW5n KSBwcmludGYoIihPSylcbiIpOwotCSAgICB9Ci0JfQotICAgIH0KLSAgICByZXR1cm4oc3VjY2Vz cyA9IHJjKTsgIC8qIFN1Y2NlZWRzIGFsc28gaWYgbm90aGluZyBuZWVkZWQgdG8gYmUgcmVuYW1l ZCAqLwotfQotCi1pbnQKLWRvcmVuYW0oKSB7Ci0jaWZuZGVmIE5PQ1NFVFMKLSNpZm5kZWYgTk9V TklDT0RFCi0gICAgZXh0ZXJuIGludCBuZmlsYzsKLSAgICBleHRlcm4gc3RydWN0IGtleXRhYiBm Y3N0YWJbXTsKLSAgICBleHRlcm4gc3RydWN0IGNzaW5mbyBmY3NpbmZvW107Ci0jZW5kaWYJLyog Tk9VTklDT0RFICovCi0jZW5kaWYJLyogTk9DU0VUUyAqLwotICAgIGludCBjc2V0MSA9IDAsIGNz ZXQyID0gMDsKLQotICAgIGludCBpLCB4LCB6LCBmbiwgbGlzdGluZyA9IDAsIGhhdmVuYW1lID0g MCwgd2lsZCA9IDAsIHJjID0gMSwgbm9hcmcgPSAwOwotICAgIGludCBub2xpc3QgPSAwLCBhbGwg PSAwLCBjYXNpbmcgPSAwLCByZXBsYWNpbmcgPSAwLCBnZXR2YWwgPSAwLCBzaW0gPSAwOwotICAg IGludCBjb252ZXJ0aW5nID0gMCwgY29sbGlzaW9uID0gMDsKLQotICAgIGNoYXIgYzsKLSAgICBz dHJ1Y3QgRkRCIHN3LCBmaTsKLQotICAgIGNvbGxpc2lvbiA9IHJlbl9jb2xsOwkJLyogSW5oZXJp dCBTRVQgUkVOQU1FIENPTExJU0lPTiAqLwotICAgIGxpc3RpbmcgPSByZW5fbGlzdDsJCQkvKiBJ bmhlcmVpdCBTRVQgUkVOQU1FIExJU1QgKi8KLQotICAgIGlmIChyZW5fc3ViWzBdKSBtYWtlc3Ry KCYocmVuX3N1YlswXSksTlVMTCk7Ci0gICAgaWYgKHJlbl9zdWJbMV0pIG1ha2VzdHIoJihyZW5f c3ViWzFdKSxOVUxMKTsKLSAgICBpZiAocmVuX3N1YlsyXSkgbWFrZXN0cigmKHJlbl9zdWJbMl0p LE5VTEwpOwotICAgIGxpbmVbMF0gPSBOVUw7Ci0gICAgdG1wYnVmWzBdID0gTlVMOwotCi0gICAg Y21mZGJpKCZzdywgICAgICAgICAgICAgICAgICAgICAgICAgLyogMXN0IEZEQiAtIHN3aXRjaGVz ICovCi0gICAgICAgICAgIF9DTUtFWSwgICAgICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8K LSAgICAgICAgICAgIkZpbGVuYW1lIG9yIHN3aXRjaCIsICAgICAgICAvKiBobHBtc2cgKi8KLSAg ICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAg ICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEg Ki8KLSAgICAgICAgICAgbnJlbmFtc3csCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBz aXplICovCi0gICAgICAgICAgIDQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwg bnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLwotICAgICAgICAgICB4eHN0cmluZywgICAgICAg ICAgICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KLSAgICAgICAgICAgcmVuYW1z dywgICAgICAgICAgICAgICAgICAgICAvKiBLZXl3b3JkIHRhYmxlICovCi0gICAgICAgICAgICZm aSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLwotICAg ICAgICAgICApOwotCi0gICAgY21mZGJpKCZmaSwgICAgICAgICAgICAgICAgICAgICAgICAgLyog Mm5kIEZEQiAtIGZpbGUgb3IgZGlyZWN0b3J5IG5hbWUgKi8KLSAgICAgICAgICAgX0NNSUZJLCAg ICAgICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLwotICAgICAgICAgICAiIiwgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGhscG1zZyAqLwotICAgICAgICAgICAiIiwgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAgICAgICAzLCAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEZsYWdzICovCi0gICAgICAgICAgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogMCA9IFBhcnNlIGZpbGUgb3IgZGlyZWN0b3J5IG5hbWVzICovCi0g ICAgICAgICAgIHh4c3RyaW5nLAotICAgICAgICAgICBOVUxMLAotICAgICAgICAgICBOVUxMCi0g ICAgICAgICAgICk7Ci0KLSAgICBpZiAoY21mbGdzID09IDEpIHsKLQlwcmludGYoIj9GaWxlIG9y IGRpcmVjdG9yeSBuYW1lIHJlcXVpcmVkXG4iKTsKLQlyZXR1cm4oLTkpOwotICAgIH0KLSAgICB3 aGlsZSAoIWhhdmVuYW1lKSB7Ci0Jbm9hcmcgPSAwOwotICAgICAgICB4ID0gY21mZGIoJnN3KTsg ICAgICAgICAgICAgICAgIC8qIFBhcnNlIHNvbWV0aGluZyAqLwotCWlmICh4ID09IC0zKSB7CQkJ LyogVGhleSBoaXQgRW50ZXIgcHJlbWF0dXJlbHkgKi8KLQkgICAgcHJpbnRmKCI/Q29tbWFuZCBp bmNvbXBsZXRlXG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9IGVsc2UgaWYgKHggPCAwKSB7CQkv KiBPdGhlciBlcnJvciAqLwotCSAgICBpZiAoeCA9PSAtMSkKLQkgICAgICByZXR1cm4oeCk7Ci0g ICAgICAgICAgICBpZiAoaXN3aWxkKGF0bWJ1ZikgJiYgbnp4cGFuZChhdG1idWYsbnp4b3B0cykg PT0gMCkKLSAgICAgICAgICAgICAgcHJpbnRmKCI/Tm8gZmlsZXMgbWF0Y2g6ICVzXG4iLGJyc3Ry aXAoYXRtYnVmKSk7Ci0gICAgICAgICAgICBlbHNlIGlmICh6Y2hraShhdG1idWYpID09IC0xKQot CSAgICAgIHByaW50ZigiP0ZpbGUgbm90IGZvdW5kOiAlc1xuIixicnN0cmlwKGF0bWJ1ZikpOwot CSAgICBlbHNlCi0JICAgICAgcHJpbnRmKCI/RXJyb3Igd2l0aCBzd2l0Y2ggb3IgZmlsZW5hbWU6 ICVzXG4iLGJyc3RyaXAoYXRtYnVmKSk7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotCWZuID0gY21y ZXN1bHQubnJlc3VsdDsJCS8qIEZvciBicmV2aXR5ICovCi0gICAgICAgIHN3aXRjaCAoY21yZXN1 bHQuZmNvZGUpIHsJLyogSGFuZGxlIGVhY2gga2luZCBvZiBmaWVsZCAqLwotICAgICAgICAgIGNh c2UgX0NNS0VZOgkJCS8qIEtleXdvcmQgKHN3aXRjaCkgKi8KLSAgICAgICAgICAgIGMgPSBjbWdi cmsoKTsKLSAgICAgICAgICAgIGlmICgoZ2V0dmFsID0gKGMgPT0gJzonIHx8IGMgPT0gJz0nKSkg JiYgIShjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9U aGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtlIGFuIGFyZ3VtZW50XG4iKTsKLSAgICAgICAgICAgICAg ICByZXR1cm4oLTkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFnZXR2YWwgJiYg KGNtZ2t3ZmxncygpICYgQ01fQVJHKSkKLQkgICAgICBub2FyZyA9IDE7CQkvKiBSZW1lbWJlciBh cmcgaXMgbWlzc2luZyAqLwotICAgICAgICAgICAgc3dpdGNoIChjbXJlc3VsdC5ucmVzdWx0KSB7 CS8qIEhhbmRsZSB0aGUgc3dpdGNoICovCi0gICAgICAgICAgICAgIGNhc2UgREVMX0xJUzoJCS8q IC9MSVNUICovCi0gICAgICAgICAgICAgIGNhc2UgREVMX1ZSQjoJCS8qIC9WRVJCT1NFICovCi0g ICAgICAgICAgICAgICAgbGlzdGluZyA9IDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgIGNhc2UgREVMX05PTDoJCS8qIC9OT0xJU1QgKi8KLSAgICAgICAgICAgICAgY2Fz ZSBERUxfUVVJOgkJLyogL1FVSUVUICovCi0JCW5vbGlzdCA9IDE7Ci0gICAgICAgICAgICAgICAg bGlzdGluZyA9IDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug REVMX1NJTToJCS8qIC9TSU1VTEFURSAqLwotICAgICAgICAgICAgICAgIHNpbSA9IDE7Ci0gICAg ICAgICAgICAgICAgYnJlYWs7Ci0JICAgICAgY2FzZSBSRU5fVVBQOgkJLyogL1VQUEVSOiAqLwot CSAgICAgIGNhc2UgUkVOX0xPVzoJCS8qIC9MT1dFUiAqLwotCQlhbGwgPSAxOwotCQlpZiAoIW5v YXJnKSB7Ci0JCSAgICBpZiAoKHggPSBjbWtleSgoZm4gPT0gUkVOX1VQUCkgPyByX3VwcGVyIDog cl9sb3dlciwKLQkJCQkgICAyLCAiIiwiYWxsIix4eHN0cmluZykpIDwgMCkgewotCQkJaWYgKHgg PT0gLTMpCi0JCQkgIHggPSAxOwotCQkJZWxzZQotCQkJICByZXR1cm4oeCk7Ci0JCSAgICB9Ci0J CSAgICBhbGwgPSB4OwotCQl9Ci0JCS8qIDAgPSBkb24ndCBjb252ZXJ0OyAxID0gY29udmVydCB0 byBsb3dlcjsgMiA9IHRvIHVwcGVyICovCi0JCWNhc2luZyA9IChmbiA9PSBSRU5fVVBQKSA/IDIg OiAxOwotCQljb252ZXJ0aW5nID0gMDsKLQkJYnJlYWs7Ci0JICAgICAgY2FzZSBSRU5fT1ZXOgkJ LyogL0NPTExJU0lPTiAqLwotCQlpZiAoIW5vYXJnKSB7Ci0JCSAgICBpZiAoKHggPSBjbWtleShy X2NvbGxpc2lvbiwKLQkJCQkgICBucl9jb2xsaXNpb24sIiIsIm92ZXJ3cml0ZSIseHhzdHJpbmcp KTwwKSB7Ci0JCQlpZiAoeCA9PSAtMykKLQkJCSAgeCA9IFJFTlhfT1ZXUjsKLQkJCWVsc2UKLQkJ CSAgcmV0dXJuKHgpOwotCQkgICAgfQotCQkgICAgY29sbGlzaW9uID0geDsKLQkJfQotCQlicmVh azsKLQkgICAgICBjYXNlIFJFTl9SUEw6CQkvKiAvUkVQTEFDRTogKi8KLQkJaWYgKG5vYXJnKSB7 Ci0JCSAgICBwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7Ci0J CSAgICByZXR1cm4oLTkpOwotCQl9Ci0JCWlmICgoeCA9IGNtZmxkKCJTdHJpbmcgdG8gcmVtb3Zl LCBvciB7e1N0cmluZzF9e1N0cmluZzJ9fSIsCi0JCQkgICAgICAgIiIsJnMseHhzdHJpbmcpKSA8 IDApIHsKLQkJICAgIGlmICh4ID09IC0zKSB7Ci0JCQlwcmludGYoIj9UYXJnZXQgc3RyaW5nIHJl cXVpcmVkXG4iKTsKLQkJCXggPSAtOTsKLQkJICAgIH0KLQkJICAgIHJldHVybih4KTsKLQkJfQot CQlpZiAoc1swXSkgewotCQkgICAgaWYgKHNbMF0gPT0gJ3snICYmIHNbMV0gPT0gJ3snKSAvKiBH ZXQgdGhlIGxpc3QgKi8KLQkJICAgICAgbWFrZWxpc3QocyxyZW5fc3ViLDMpOwotCQkgICAgZWxz ZQotCQkgICAgICBtYWtlc3RyKCYocmVuX3N1YlswXSkscyk7Ci0JCX0KLQkJY29udmVydGluZyA9 IDA7Ci0JCWJyZWFrOwotCi0JICAgICAgY2FzZSBSRU5fU1BBOgkJLyogL0ZJWFNQQUNFUzogKi8K LQkJaWYgKCFub2FyZykKLQkJICBpZiAoKHggPSBjbWZsZCgiQ2hhcmFjdGVyIG9yIHN0cmluZyB0 byByZXBsYWNlIHNwYWNlcyB3aXRoIiwKLQkJCQkgIl8iLCZzLHh4c3RyaW5nKSkgPCAwKQotCQkg ICAgaWYgKHggPT0gLTMpCi0JCSAgICAgIHMgPSAiXyI7Ci0JCSAgICBlbHNlCi0JCSAgICAgIHJl dHVybih4KTsKLQkJbWFrZXN0cigmKHJlbl9zdWJbMF0pLCIgIik7Ci0JCW1ha2VzdHIoJihyZW5f c3ViWzFdKSxub2FyZyA/ICJfIiA6IGJyc3RyaXAocykpOwotCQltYWtlc3RyKCYocmVuX3N1Ylsz XSksTlVMTCk7Ci0JCWNvbnZlcnRpbmcgPSAwOwotCQlicmVhazsKLQotI2lmbmRlZiBOT0NTRVRT Ci0jaWZuZGVmIE5PVU5JQ09ERQotCSAgICAgIGNhc2UgUkVOX1hMQToJCS8qIC9DT05WRVJUOmNz ZXQxOmNzZXQyICovCi0JCWlmICgheGZjc3RhYikgewkJLyogTWFrZSBhIGNvcHkgb2YgdGhlIGZp bGUgY2hhcnNldCAqLwotCQkgICAgaW50IGksIHg7CQkvKiB0YWJsZSB3aXRoIENNX0FSRyBzZXQg Zm9yIGVhY2ggKi8KLQkJICAgIHggPSAobmZpbGMgKyAxKSAqIHNpemVvZihzdHJ1Y3Qga2V5dGFi KTsKLQkJICAgIHhmY3N0YWIgPSAoc3RydWN0IGtleXRhYiAqKW1hbGxvYyh4KTsKLQkJICAgIGlm ICgheGZjc3RhYikgewotCQkJcHJpbnRmKCI/TWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIik7 Ci0JCQlyZXR1cm4oLTkpOwotCQkgICAgfQotCQkgICAgZm9yIChpID0gMDsgaSA8IG5maWxjOyBp KyspIHsKLQkJCXhmY3N0YWJbaV0ua3dkID0gZmNzdGFiW2ldLmt3ZDsKLQkJCXhmY3N0YWJbaV0u a3d2YWwgPSBmY3N0YWJbaV0ua3d2YWw7Ci0JCQl4ZmNzdGFiW2ldLmZsZ3MgPSBmY3N0YWJbaV0u ZmxncyB8IENNX0FSRzsKLQkJICAgIH0KLQkJfQotCQlpZiAoKHggPSBjbXN3aSh4ZmNzdGFiLG5m aWxjLAotCQkJICAgICAgICJDaGFyYWN0ZXItc2V0IG9mIG9sZCBuYW1lIiwiIix4eHN0cmluZykp IDwgMCkgewotCQkgICAgaWYgKHggPT0gLTMpIHsKLQkJCXByaW50ZigiP1BhaXIgb2YgY2hhcmFj dGVyLXNldCBuYW1lcyByZXF1aXJlZFxuIik7Ci0JCQlyZXR1cm4oLTkpOwotCQkgICAgfSBlbHNl Ci0JCSAgICAgIHJldHVybih4KTsKLQkJfQotCQljc2V0MSA9IHg7Ci0JCWMgPSBjbWdicmsoKTsK LQkJaWYgKCFnZXR2YWwpIHsKLQkJICAgIHByaW50ZigiP1NlY29uZGNoYXJhY3Rlci1zZXQgbmFt ZSByZXF1aXJlZFxuIik7Ci0JCSAgICByZXR1cm4oLTkpOwotCQl9Ci0JCWlmICgoeCA9IGNta2V5 KGZjc3RhYixuZmlsYywKLQkJCSAgICAgICAiQ2hhcmFjdGVyLXNldCBvZiBuZXcgbmFtZSIsIiIs eHhzdHJpbmcpKSA8IDApIHsKLQkJICAgIGlmICh4ID09IC0zKSB7Ci0JCQlwcmludGYoIj9TZWNv bmQgY2hhcmFjdGVyLXNldCBuYW1lIHJlcXVpcmVkXG4iKTsKLQkJCXJldHVybigtOSk7Ci0JCSAg ICB9IGVsc2UKLQkJICAgICAgcmV0dXJuKHgpOwotCQl9Ci0JCWNzZXQyID0geDsKLQkJaWYgKGNh c2luZykKLQkJICBjYXNpbmcgPSAwOwotCQlpZiAocmVuX3N1YlswXSkKLQkJICBtYWtlc3RyKCYo cmVuX3N1YlswXSksTlVMTCk7Ci0JCWlmIChyZW5fc3ViWzFdKQotCQkgIG1ha2VzdHIoJihyZW5f c3ViWzFdKSxOVUxMKTsKLQkJaWYgKHJlbl9zdWJbMl0pCi0JCSAgbWFrZXN0cigmKHJlbl9zdWJb Ml0pLE5VTEwpOwotCQljb252ZXJ0aW5nID0gMTsKLQkJYnJlYWs7Ci0jZW5kaWYJLyogTk9VTklD T0RFICovCi0jZW5kaWYJLyogTk9DU0VUUyAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgY2FzZSBfQ01JRkk6CQkJLyogRmlsZSBvciBkaXJlY3RvcnkgbmFt ZSAqLwotICAgICAgICAgICAgcyA9IGNtcmVzdWx0LnNyZXN1bHQ7Ci0gICAgICAgICAgICBoYXZl bmFtZSA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotCSAgICBw cmludGYoIj9GaWxlIG9yIGRpcmVjdG9yeSBuYW1lIHJlcXVpcmVkXG4iKTsKLQkgICAgcmV0dXJu KC05KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoaGF2ZW5hbWUpIHsKLQlja3N0cm5jcHko bGluZSxzLExJTkJVRlNJWik7CS8qIE1ha2UgYSBzYWZlIGNvcHkgb2Ygc291cmNlIG5hbWUgKi8K LSAgICB9IGVsc2UgewotCXByaW50ZigiP0ludGVybmFsIGVycm9yXG4iKTsKLQlyZXR1cm4oLTkp OwkJCS8qIFNob3VsZG4ndCBoYXBwZW4gKi8KLSAgICB9Ci0gICAgd2lsZCA9IGNtcmVzdWx0Lm5y ZXN1bHQ7ICAgICAgICAgICAgLyogU291cmNlIHNwZWNpZmljYXRpb24gd2lsZD8gKi8KLSAgICBp ZiAoIXdpbGQpCi0gICAgICB3aWxkID0gaXN3aWxkKGxpbmUpOwotCi0gICAgZGVidWcoRjExMSwi UkVOQU1FIFdJTEQiLGxpbmUsd2lsZCk7Ci0KLSAgICBwID0gdG1wYnVmOyAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBQbGFjZSBmb3IgbmV3IG5hbWUgKi8KLSAgICBwWzBdID0gTlVMOwotICAg IHJlcGxhY2luZyA9IHJlbl9zdWJbMF0gPyAxIDogMDsKLQotI2lmZGVmIENPTU1FTlQKLSAgICBp ZiAoIShjYXNpbmcgfHwgcmVwbGFjaW5nIHx8IGNvbnZlcnRpbmcpKSB7Ci0JaWYgKCh4ID0gY21v Zmkod2lsZCA/ICJUYXJnZXQgZGlyZWN0b3J5IiA6ICJOZXcgbmFtZSIsCi0JCSAgICAgICAiIiwm cyx4eHN0cmluZykpIDwgMCkgeyAvKiBHZXQgbmV3IG5hbWUgKi8KLQkgICAgaWYgKHggPT0gLTMp IHsKLQkJcHJpbnRmKCI/JXMgcmVxdWlyZWRcbiIsCi0JCSAgICAgICB3aWxkID8gIlRhcmdldCBk aXJlY3RvcnkiIDogIk5ldyBuYW1lIik7Ci0JCXJldHVybigtOSk7Ci0JICAgIH0gZWxzZSByZXR1 cm4oeCk7Ci0JfQotCWNrc3RybmNweShwLHMsVE1QQlVGU0laKTsJLyogTWFrZSBhIHNhZmUgY29w eSBvZiB0aGUgbmV3IG5hbWUgKi8KLSAgICB9Ci0jZWxzZQotICAgIGlmICgoeCA9IGNtb2ZpKHdp bGQgPyAiVGFyZ2V0IGRpcmVjdG9yeSIgOiAiTmV3IG5hbWUiLAotCQkgICAiIiwmcyx4eHN0cmlu ZykpIDwgMCkgeyAvKiBHZXQgbmV3IG5hbWUgKi8KLQlpZiAoeCA9PSAtMykgewotCSAgICBpZiAo Y2FzaW5nIHx8IHJlcGxhY2luZyB8fCBjb252ZXJ0aW5nKSB7Ci0JCXMgPSAiIjsKLQkgICAgfSBl bHNlIHsKLQkJcHJpbnRmKCI/JXMgcmVxdWlyZWRcbiIsCi0JCSAgICAgICB3aWxkID8gIlRhcmdl dCBkaXJlY3RvcnkiIDogIk5ldyBuYW1lIik7Ci0JCXJldHVybigtOSk7Ci0JICAgIH0KLQl9IGVs c2UgcmV0dXJuKHgpOwotICAgIH0KLSAgICBja3N0cm5jcHkocCxzLFRNUEJVRlNJWik7CQkvKiBN YWtlIGEgc2FmZSBjb3B5IG9mIHRoZSBuZXcgbmFtZSAqLwotI2VuZGlmCS8qIENPTU1FTlQgKi8K LQotICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwkvKiBDb25maXJtIHRoZSBj b21tYW5kICovCi0KLSNpZmRlZiBDT01NRU5UCi0jaWZuZGVmIE5PVU5JQ09ERQotICAgIGlmIChj b252ZXJ0aW5nKSB7Ci0JcHJpbnRmKCIgRnJvbTogJXNcbiIsZmNzaW5mb1tjc2V0MV0ua2V5d29y ZCk7Ci0JcHJpbnRmKCIgVG86ICAgJXNcbiIsZmNzaW5mb1tjc2V0Ml0ua2V5d29yZCk7Ci0gICAg fQotI2VuZGlmCS8qIE5PVU5JQ09ERSAqLwotICAgIGlmIChjYXNpbmcpIHsKLQlwcmludGYoIkNB U0lORzogJXNcbiIsIChjYXNpbmcgPT0gMSkgPyAiTE9XRVIiIDogIlVQUEVSIik7Ci0gICAgfQot ICAgIGlmIChyZXBsYWNpbmcpIHsKLQlwcmludGYoIlJFUExBQ0lORzogJyVzJyB3aXRoICclcydc biIsCi0JICAgICAgIHJlbl9zdWJbMF0sCi0JICAgICAgIHJlbl9zdWJbMV0gPyByZW5fc3ViWzFd IDogIiIpOwotICAgIH0KLSNlbmRpZgkvKiBDT01NRU5UICovCi0KLSAgICBzID0gbGluZTsKLSAg ICBpZiAoIXdpbGQpCQkJCS8qIEp1c3Qgb25lICovCi0gICAgICByZXR1cm4oc3VjY2VzcyA9Ci0J ICAgICByZW5hbWVvbmUocyxwLAotCQkgICAgICAgcmVwbGFjaW5nLGNhc2luZyxhbGwsY29udmVy dGluZyxjc2V0MSxjc2V0MiwKLQkJICAgICAgIGxpc3Rpbmcsbm9saXN0LHNpbSxUTVBCVUZTSVos Y29sbGlzaW9uKSk7Ci0KLSAgICBpZiAoIWNhc2luZyAmJiAhcmVwbGFjaW5nICYmICFjb252ZXJ0 aW5nKSB7CS8qIE11bHRpcGxlIGZpbGVzICovCi0JaWYgKCFpc2RpcihwKSkgewotCSAgICBwcmlu dGYoCQkJLyogaWYgdGFyZ2V0IGlzIG5vdCBhIGRpcmVjdG9yeSAqLwotIj9NdWx0aXBsZSBzb3Vy Y2UgZmlsZXMgbm90IGFsbG93ZWQgaWYgdGFyZ2V0IGlzIG5vdCBhIGRpcmVjdG9yeS5cbiIpOwot CSAgICByZXR1cm4oLTkpOwotCX0KLSAgICB9Ci0jaWZkZWYgQ09NTUVOVAotICAgIGVsc2UgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNob3cgZnVsbCBwYXRoIG9mIHRhcmdldCAq LwotICAgICAgICBjaGFyIGJ1ZltDS01BWFBBVEhdOyAgICAgICAgICAgIC8qICh0b28gbXVjaCkg Ki8KLSAgICAgICAgaWYgKHpmbnFmcChwLENLTUFYUEFUSCxidWYpKQotICAgICAgICAgIGNrc3Ry bmNweSh0bXBidWYsYnVmLFRNUEJVRlNJWik7Ci0gICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8K LQotI2lmZGVmIFZNUwotICAgIGNvbnJlcygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IExldCBDdHJsLUMgd29yay4gKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSAgICBkZWJ1ZyhGMTEwLCJk b3JlbmFtZSBsaW5lIixsaW5lLDApOwotCi0jaWZkZWYgWlhSRVdJTkQKLSAgICB6ID0genhyZXdp bmQoKTsgICAgICAgICAgICAgICAgICAgICAvKiBSZXdpbmQgZmlsZSBsaXN0ICovCi0jZWxzZQot ICAgIHogPSBuenhwYW5kKHMsMCk7ICAgICAgICAgICAgICAgICAgIC8qIEV4cGFuZCBmaWxlIGxp c3QgKi8KLSNlbmRpZiAvKiBaWFJFV0lORCAqLwotICAgIGRlYnVnKEYxMTEsImRvcmVuYW1lIHAi LHAseik7Ci0KLSNpZmRlZiBVTklYCi0gICAgaWYgKHdpbGQgJiYgeiA+IDEpCi0gICAgICBzaF9z b3J0KG10Y2hzLE5VTEwseiwwLDAsZmlsZWNhc2UpOyAvKiBBbHBoYWJldGl6ZSB0aGUgZmlsZW5h bWUgbGlzdCAqLwotI2VuZGlmIC8qIFVOSVggKi8KLQotICAgIC8qIEZvciAvQ09MTElTSU9OOkZB SUwgbWFrZSBhIHNpbGVudCBwYXNzIHRvIHNlZSBpZiB0aGVyZSB3b3VsZCBiZSBhbnkgKi8KLQot ICAgIGlmIChjb2xsaXNpb24gPT0gUkVOWF9GQUlMKSB7Ci0JaW50IG4gPSAwOwotCWNoYXIgbGlu ZVtDS01BWFBBVEgrMl07Ci0Jd2hpbGUgKHotLSA+IDApIHsKLQkgICAgaWYgKCEoeiA9PSAwICYm ICF3aWxkKSkKLQkgICAgICB6bmV4dChsaW5lKTsKLQkgICAgaWYgKCFsaW5lWzBdKQotCSAgICAg IGJyZWFrOwotCSAgICBpZiAoIXJlbmFtZW9uZSgoY2hhciAqKWxpbmUscCwKLQkJCSAgIHJlcGxh Y2luZyxjYXNpbmcsYWxsLGNvbnZlcnRpbmcsY3NldDEsY3NldDIsCi0JCQkgICAwLDEsUkVOX09Q X0NISyxUTVBCVUZTSVosUkVOWF9GQUlMKSkKLQkgICAgICBuKys7Ci0JfQotCWlmIChuID4gMCkg ewotCSAgICBwcmludGYoIj9GYWlsZWQ6ICVkIGZpbGUlcyB3b3VsZCBiZSBvdmVyd3JpdHRlblxu IiwKLQkJICAgbiwgKG4gIT0gMSkgPyAicyIgOiAiIik7Ci0jaWZkZWYgVk1TCi0JICAgIGNvbmNi KChjaGFyKWVzY2FwZSk7Ci0jZW5kaWYgLyogVk1TICovCi0JICAgIHJldHVybihzdWNjZXNzID0g MCk7Ci0JfQotCS8qIEdldCB0aGUgZmlsZSBsaXN0IGJhY2suICovCi0jaWZkZWYgWlhSRVdJTkQK LQl6ID0genhyZXdpbmQoKTsKLSNlbHNlCi0JeiA9IG56eHBhbmQocywwKTsKLSNlbmRpZiAvKiBa WFJFV0lORCAqLwotICAgIH0KLSAgICB3aGlsZSAoei0tID4gMCAmJiByYyA+IDApIHsKLQljaGFy IGxpbmVbQ0tNQVhQQVRIKzJdOwotICAgICAgICBpZiAoISh6ID09IDAgJiYgIXdpbGQpKQotICAg ICAgICAgIHpuZXh0KGxpbmUpOwotICAgICAgICBpZiAoIWxpbmVbMF0pCi0gICAgICAgICAgYnJl YWs7Ci0JcmMgPSByZW5hbWVvbmUoKGNoYXIgKilsaW5lLHAsIAotCQkgICAgICAgcmVwbGFjaW5n LGNhc2luZyxhbGwsY29udmVydGluZyxjc2V0MSxjc2V0MiwKLQkJICAgICAgIGxpc3Rpbmcsbm9s aXN0LHNpbSxUTVBCVUZTSVosY29sbGlzaW9uKTsKLSAgICB9Ci0jaWZkZWYgVk1TCi0gICAgY29u Y2IoKGNoYXIpZXNjYXBlKTsKLSNlbmRpZiAvKiBWTVMgKi8KLSAgICByZXR1cm4oc3VjY2VzcyA9 IHJjKTsKLX0KLSNlbmRpZiAvKiBaUkVOQU1FICovCi0jZW5kaWYgLyogTk9GUklMTFMgKi8KLSNl bmRpZiAvKiBOT1JFTkFNRSAqLwotCi0jaWZuZGVmIE5PU1BMCi0KLS8qIERvIHRoZSBSRVRVUk4g Y29tbWFuZCAqLwotCi1pbnQKLWRvcmV0dXJuKHMpIGNoYXIgKnM7IHsKLSAgICBpbnQgeDsKLSAg ICBleHRlcm4gaW50IHRyYV9hc2c7Ci0gICAgY2hhciAqIGxpbmUsICogbHA7Ci0KLSAgICBpZiAo Y21kbHZsIDwgMSkgewotICAgICAgICBwcmludGYoIlxuP0Nhbid0IHJldHVybiBmcm9tIGxldmVs ICVkXG4iLG1hY2x2bCk7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgfQotICAg IGxpbmUgPSBtYWxsb2MoTElOQlVGU0laKTsKLSAgICBpZiAobGluZSA9PSBOVUxMKQotICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICBscCA9IGxpbmU7ICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBFeHBhbmQgcmV0dXJuIHZhbHVlIG5vdyAqLwotICAgIHggPSBMSU5CVUZTSVotMTsK LSAgICBpZiAoIXMpIHMgPSAiIjsKLSAgICBkZWJ1ZyhGMTEwLCJSRVRVUk4gcyIscywwKTsKLSAg ICBpZiAoenpzdHJpbmcocywmbHAsJngpID4gLTEpIHsKLSAgICAgICAgcyA9IGxpbmU7Ci0gICAg ICAgIGRlYnVnKEYxMTAsIlJFVFVSTiB6enN0cmluZyIscywwKTsKLSAgICB9Ci0KLSAgICAvKiBQ b3AgZnJvbSBhbGwgRk9SL1dISUxFL1NXSVRDSC9YSUZzICovCi0gICAgd2hpbGUgKChtYWNsdmwg PiAwKSAmJgotICAgICAgICAgICAobV9hcmdbbWFjbHZsLTFdWzBdKSAmJgotICAgICAgICAgICAo Y21kc3RrW2NtZGx2bF0uc3JjID09IENNRF9NRCkgJiYKLSAgICAgICAgICAgKCFzdHJuY21wKG1f YXJnW21hY2x2bC0xXVswXSwiX3hpZiIsNCkgfHwKLSAgICAgICAgICAgICFzdHJuY21wKG1fYXJn W21hY2x2bC0xXVswXSwiX2ZvciIsNCkgfHwKLSAgICAgICAgICAgICFzdHJuY21wKG1fYXJnW21h Y2x2bC0xXVswXSwiX3N3aSIsNCkgfHwKLSAgICAgICAgICAgICFzdHJuY21wKG1fYXJnW21hY2x2 bC0xXVswXSwiX3doaSIsNCkpKSB7Ci0gICAgICAgIGRlYnVnKEYxMTEsIlJFVFVSTiBJRi9GT1Iv V0hJL1NXSSBwb3AiLG1fYXJnW21hY2x2bC0xXVswXSxtYWNsdmwpOwotICAgICAgICBkb2d0YShY WFBUQSk7ICAgICAgICAgICAgICAgICAgIC8qIFB1dCBhcmdzIGJhY2sgKi8KLSAgICAgICAgcG9w Y2x2bCgpOyAgICAgICAgICAgICAgICAgICAgICAvKiBQb3AgdXAgdHdvIGxldmVscyAqLwotICAg ICAgICBwb3BjbHZsKCk7Ci0gICAgfQotICAgIGlmICh0cmFfYXNnKSB7ICAgICAgICAgICAgICAg ICAgICAgIC8qIElmIHRyYWNpbmcgc2hvdyByZXR1cm4gdmFsdWUgKi8KLSAgICAgICAgaWYgKCpz KQotICAgICAgICAgIHByaW50ZigiPDw8ICVzOiBcIiVzXCJcbiIsIG1fYXJnW21hY2x2bF1bMF0s IHMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcHJpbnRmKCI8PDwgJXM6IChudWxsKVxuIiwg bV9hcmdbbWFjbHZsXVswXSk7Ci0gICAgfQotICAgIHBvcGNsdmwoKTsgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFBvcCBmcm9tIGVuY2xvc2luZyBUQUtFIG9yIG1hY3JvICovCi0gICAgZGVi dWcoRjExMSwiUkVUVVJOIHRvbGV2ZWwiLHMsbWFjbHZsKTsKLSAgICBpZiAoIXMpIHMgPSAiIjsK LSAgICBpZiAoISpzKSBzID0gTlVMTDsKLSAgICBtYWtlc3RyKCYobXJ2YWxbbWFjbHZsKzFdKSxz KTsgICAgICAvKiBTZXQgdGhlIFJFVFVSTiB2YWx1ZSAqLwotICAgIGZyZWUobGluZSk7Ci0gICAg cmV0dXJuKHN1Y2Nlc3MgPSAxKTsgICAgICAgICAgICAgICAgLyogTWFjcm8gc3VjY2VlZHMgaWYg d2UgUkVUVVJOICovCi19Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT1NQTAotLyog RG8gdGhlIE9QRU4gY29tbWFuZCAqLwotCi1pbnQKLWRvb3BlbigpICB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBPUEVOIHsgYXBwZW5kLCByZWFkLCB3cml0ZSB9ICovCi0gICAgaW50 IHgsIHksIHogPSAwOyBjaGFyICpzOwotICAgIHN0YXRpYyBzdHJ1Y3QgZmlsaW5mbyBmY2I7ICAg ICAgICAgIC8qIChtdXN0IGJlIHN0YXRpYykgKi8KLSAgICBpZiAoKHggPSBjbWtleShvcG50YWIs bm9wbiwibW9kZSIsIiIseHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAgaWYgKHggPT0gLTMpIHsK LSAgICAgICAgICAgIHByaW50ZigiP01vZGUgcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAgcmV0 dXJuKC05KTsKLSAgICAgICAgfSBlbHNlIHJldHVybih4KTsKLSAgICB9Ci0gICAgc3dpdGNoICh4 KSB7Ci0gICAgICBjYXNlIE9QTl9GSV9SOiAgICAgICAgICAgICAgICAgICAgLyogT2xkIGZpbGUg KFJFQUQpICovCi0gICAgICAgIGlmIChjaGtmbihaUkZJTEUpID4gMCkgewotICAgICAgICAgICAg cHJpbnRmKCI/UmVhZCBmaWxlIGFscmVhZHkgb3BlblxuIik7Ci0gICAgICAgICAgICByZXR1cm4o LTIpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoeiA9IGNtaWZpKCJGaWxlIHRvIHJlYWQiLCIi LCZzLCZ5LHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICBpZiAoeiA9PSAtMykgewotICAg ICAgICAgICAgICAgIHByaW50ZigiP0lucHV0IGZpbGVuYW1lIHJlcXVpcmVkXG4iKTsKLSAgICAg ICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgfSBlbHNlIHJldHVybih6KTsKLSAg ICAgICAgfQotICAgICAgICBpZiAoeSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogTm8gd2lsZGNhcmRzIGFsbG93ZWQgKi8KLSAgICAgICAgICAgIHByaW50ZigiXG4/UGxlYXNl IHNwZWNpZnkgYSBzaW5nbGUgZmlsZVxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTIpOwotICAg ICAgICB9Ci0gICAgICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKLSAgICAgICAgaWYg KChpbnQpc3RybGVuKGxpbmUpIDwgMSkgcmV0dXJuKC0yKTsKLSAgICAgICAgaWYgKCh6ID0gY21u dW0oImJ1ZmZlciBzaXplIiwiNDA5NiIsMTAsJnkseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAg cmV0dXJuKHopOwotICAgICAgICBpZiAoeSA8IDEpIHsKLSAgICAgICAgICAgIHByaW50ZigiP1Bv c2l0aXZlIG51bWJlciByZXF1aXJlZFxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAg ICAgICB9Ci0gICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHopOwotICAgICAg ICByZWFkYmxvY2sgPSB5OwotICAgICAgICBpZiAocmVhZGJ1ZikKLSAgICAgICAgICBmcmVlKChj aGFyICopcmVhZGJ1Zik7Ci0gICAgICAgIGlmICghKHJlYWRidWYgPSAoQ0hBUiAqKSBtYWxsb2Mo cmVhZGJsb2NrKzEpKSkgewotICAgICAgICAgICAgcHJpbnRmKCI/Q2FuJ3QgYWxsb2NhdGUgcmVh ZCBidWZmZXJcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgICAg ICByZXR1cm4oc3VjY2VzcyA9IHpvcGVuaShaUkZJTEUsbGluZSkpOwotCi0jaWZuZGVmIE1BQwot I2lmbmRlZiBOT1BVU0gKLSAgICAgIGNhc2UgT1BOX1BJX1I6ICAgICAgICAgICAgICAgICAgICAv KiBQaXBlL1Byb2Nlc3MgKCFSRUFEKSAqLwotICAgICAgICBpZiAobm9wdXNoKSB7Ci0gICAgICAg ICAgICBwcmludGYoIj9SZWFkIGZyb20gcGlwZSBkaXNhYmxlZFxuIik7Ci0gICAgICAgICAgICBy ZXR1cm4oc3VjY2Vzcz0wKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY2hrZm4oWlJGSUxFKSA+ IDApIHsKLSAgICAgICAgICAgIHByaW50ZigiP1JlYWQgZmlsZSBhbHJlYWR5IG9wZW5cbiIpOwot ICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKHkgPSBjbXR4 dCgiU3lzdGVtIGNvbW1hbmQgdG8gcmVhZCBmcm9tIiwiIiwmcyx4eHN0cmluZykpIDwgMCkgewot ICAgICAgICAgICAgaWYgKHkgPT0gLTMpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9Db21t YW5kIG5hbWUgcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAg ICAgICAgICB9IGVsc2UgcmV0dXJuKHkpOwotICAgICAgICB9Ci0gICAgICAgIGNrc3RybmNweShs aW5lLGJyc3RyaXAocyksTElOQlVGU0laKTsKLSAgICAgICAgaWYgKCFsaW5lWzBdKSByZXR1cm4o LTIpOwotICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAg aWYgKCFyZWFkYnVmKSB7Ci0gICAgICAgICAgICBpZiAoIShyZWFkYnVmID0gKENIQVIgKikgbWFs bG9jKHJlYWRibG9jaysxKSkpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9DYW4ndCBhbGxv Y2F0ZSByZWFkIGJ1ZmZlclxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHp4Y21kKFpSRklM RSxsaW5lKSk7Ci0KLSAgICAgIGNhc2UgT1BOX1BJX1c6ICAgICAgICAgICAgICAgICAgICAvKiBX cml0ZSB0byBwaXBlICovCi0gICAgICAgIGlmIChub3B1c2gpIHsKLSAgICAgICAgICAgIHByaW50 ZigiP1dyaXRlIHRvIHBpcGUgZGlzYWJsZWRcbiIpOwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nl c3M9MCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNoa2ZuKFpXRklMRSkgPiAwKSB7Ci0gICAg ICAgICAgICBwcmludGYoIj9Xcml0ZSBmaWxlIGFscmVhZHkgb3BlblxuIik7Ci0gICAgICAgICAg ICByZXR1cm4oLTIpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoeSA9IGNtdHh0KCJTeXN0ZW0g Y29tbWFuZCB0byB3cml0ZSB0byIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAgICAg IGlmICh5ID09IC0zKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/Q29tbWFuZCBuYW1lIHJl cXVpcmVkXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgfSBl bHNlIHJldHVybih5KTsKLSAgICAgICAgfQotICAgICAgICBja3N0cm5jcHkobGluZSxicnN0cmlw KHMpLExJTkJVRlNJWik7Ci0gICAgICAgIGlmICghbGluZVswXSkgcmV0dXJuKC0yKTsKLSAgICAg ICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgIHN1Y2Nlc3MgPSB6 eGNtZChaV0ZJTEUsbGluZSk7Ci0gICAgICAgIGlmICghc3VjY2VzcyAmJiBtc2dmbGcpCi0gICAg ICAgICAgcHJpbnRmKCJDYW4ndCBvcGVuIHByb2Nlc3MgZm9yIHdyaXRpbmc6ICVzXG4iLGxpbmUp OwotICAgICAgICByZXR1cm4oc3VjY2Vzcyk7Ci0jZW5kaWYgLyogTk9QVVNIICovCi0jZW5kaWYg LyogTUFDICovCi0KLSAgICAgIGNhc2UgT1BOX0ZJX1c6ICAgICAgICAgICAgICAgICAgICAvKiBO ZXcgZmlsZSAoV1JJVEUpICovCi0gICAgICBjYXNlIE9QTl9GSV9BOiAgICAgICAgICAgICAgICAg ICAgLyogKEFQUEVORCkgKi8KLSAgICAgICAgaWYgKCh6ID0gY21vZmkoIk5hbWUgb2YgbG9jYWwg ZmlsZSB0byBjcmVhdGUiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICBpZiAo eiA9PSAtMykgewotICAgICAgICAgICAgICAgIHByaW50ZigiP0ZpbGVuYW1lIHJlcXVpcmVkXG4i KTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgfSBlbHNlIHJldHVy bih6KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoeiA9PSAyKSB7Ci0gICAgICAgICAgICBwcmlu dGYoIj9Tb3JyeSwgJXMgaXMgYSBkaXJlY3RvcnkgbmFtZVxuIixzKTsKLSAgICAgICAgICAgIHJl dHVybigtOSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNoa2ZuKFpXRklMRSkgPiAwKSB7Ci0g ICAgICAgICAgICBwcmludGYoIj9Xcml0ZS9BcHBlbmQgZmlsZSBhbHJlYWR5IG9wZW5cbiIpOwot ICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgfQotICAgICAgICBmY2IuYnMgPSBmY2Iu Y3MgPSBmY2IucmwgPSBmY2IuZm10ID0gZmNiLm9yZyA9IGZjYi5jYyA9IGZjYi50eXAgPSAwOwot ICAgICAgICBmY2IubGJsb3B0cyA9IDA7Ci0gICAgICAgIGZjYi5kc3AgPSAoeCA9PSBPUE5fRklf VykgPyBYWUZaX04gOiBYWUZaX0E7IC8qIENyZWF0ZSBvciBBcHBlbmQgKi8KLSAgICAgICAgY2tz dHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOwotICAgICAgICBpZiAoKGludClzdHJsZW4obGluZSkg PCAxKSByZXR1cm4oLTIpOwotICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5 KTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSB6b3Blbm8oWldGSUxFLGxpbmUsTlVMTCwmZmNi KSk7Ci0KLSNpZm5kZWYgTk9MT0NBTAotICAgICAgY2FzZSBPUE5fU0VSOiAgICAgICAgICAgICAg ICAgICAgIC8qIE9QRU4gUE9SVCBvciBMSU5FICovCi0gICAgICBjYXNlIE9QTl9ORVQ6IHsgICAg ICAgICAgICAgICAgICAgLyogT1BFTiBIT1NUICovCi0gICAgICAgICAgZXh0ZXJuIGludCBkaWRz ZXRsaW4sIHR0bnByb3RvOwotICAgICAgICAgIGlmICh4ID09IE9QTl9ORVQpIHsKLSAgICAgICAg ICAgICAgeiA9IHR0bnByb3RvOwotICAgICAgICAgICAgICB0dG5wcm90byA9IE5QX05PTkU7Ci0g ICAgICAgICAgfQotICAgICAgICAgIGlmICgoeSA9IHNldGxpbigoeCA9PSBPUE5fU0VSKSA/IFhZ TElORSA6IFhZSE9TVCwgMSwgMCkpIDwgMCkgewotICAgICAgICAgICAgICBpZiAoeCA9PSBPUE5f TkVUKQotICAgICAgICAgICAgICAgIHR0bnByb3RvID0gejsKLSAgICAgICAgICAgICAgc3VjY2Vz cyA9IDA7Ci0gICAgICAgICAgfQotICAgICAgICAgIGRpZHNldGxpbisrOwotICAgICAgICAgIHJl dHVybih5KTsKLSAgICAgIH0KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSAgICAgIGRlZmF1bHQ6 Ci0gICAgICAgIHByaW50ZigiP05vdCBpbXBsZW1lbnRlZCIpOwotICAgICAgICByZXR1cm4oLTIp OwotICAgIH0KLX0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVmIE5PWEZFUgotLyogIEQg TyBYIEcgRSBUICAtLSAgR0VUIGNvbW1hbmQgcGFyc2VyIHdpdGggc3dpdGNoZXMgICovCi0KLSNp ZmRlZiBDS19MQUJFTEVECi1pbnQgZ19sZl9vcHRzID0gLTE7Ci1leHRlcm4gaW50IGxmX29wdHM7 Ci0jZW5kaWYgLyogQ0tfTEFCRUxFRCAqLwotCi1pbnQKLWRveGdldChjeCkgaW50IGN4OyB7Ci0g ICAgZXh0ZXJuIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRXh0ZXJuYWwgdmFyaWFi bGVzIHdlIG5lZWQgKi8KLSNpZmRlZiBSRUNVUlNJVkUKLSAgICAgIHJlY3Vyc2l2ZSwKLSNlbmRp ZiAvKiBSRUNVUlNJVkUgKi8KLSAgICAgIHhmZXJtb2RlLCBmZGlzcGxhLCBwcm90b2NvbCwgdXNl cGlwZXMsCi0gICAgICBnX2JpbmFyeSwgZ194ZmVybW9kZSwgZ19kaXNwbGEsIGdfcnBhdGgsIGdf dXNlcGlwZXM7Ci0gICAgZXh0ZXJuIGNoYXIgKiByY3ZfbW92ZTsgICAgICAgICAgICAgLyogRGly ZWN0b3J5IHRvIG1vdmUgbmV3IGZpbGVzIHRvICovCi0gICAgZXh0ZXJuIGNoYXIgKiByY3ZfcmVu YW1lOyAgICAgICAgICAgLyogV2hhdCB0byByZW5hbWUgbmV3IGZpbGVzIHRvICovCi0gICAgZXh0 ZXJuIGNoYXIgKiByY3ZleGNlcHRbXTsgICAgICAgICAgLyogUkVDRUlWRSAvIEdFVCBleGNlcHRp b24gbGlzdCAqLwotICAgIGludCBvcGt0ICA9ICAwOyAgICAgICAgICAgICAgICAgICAgIC8qIEZs YWcgZm9yIE8tUGFja2V0IG5lZWRlZCAqLwotCi0jaWZkZWYgUElQRVNFTkQKLSAgICBleHRlcm4g aW50IHBpcGVzZW5kOwotICAgIGV4dGVybiBjaGFyICogcmN2ZmlsdGVyOwotI2VuZGlmIC8qIFBJ UEVTRU5EICovCi0gICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgcnBhdGh0YWJbXTsKLSAgICBleHRl cm4gaW50IG5ycGF0aHRhYjsKLSAgICBleHRlcm4gQ0tfT0ZGX1QgY2FsaWJyYXRlOwotICAgIGlu dCBhc25hbWUgPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIGhhdmUgYXMtbmFt ZSAqLwotICAgIGludCBrb25seSA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIEtlcm1pdC1v bmx5IGZ1bmN0aW9uICovCi0gICAgaW50IGMsIGksIG4sIGNvbmZpcm1lZCA9IDA7ICAgICAgICAg LyogV29ya2VycyAqLwotICAgIGludCBnZXR2YWwgPSAwOyAgICAgICAgICAgICAgICAgICAgIC8q IFdoZXRoZXIgdG8gZ2V0IHN3aXRjaCB2YWx1ZSAqLwotICAgIGludCByY3ZjbWQgPSAwOyAgICAg ICAgICAgICAgICAgICAgIC8qIFdoZXRoZXIgaXQgaXMgdGhlIFJFQ0VJVkUgY29tbWFuZCAqLwot ICAgIGludCBtZ2V0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFdoZXRoZXIgaXQgaXMg dGhlIE1HRVQgY29tbWFuZCAqLwotICAgIHN0cnVjdCBzdHJpbmdpbnQgcHZbU05EX01BWCsxXTsg ICAgLyogVGVtcG9yYXJ5IGFycmF5IGZvciBzd2l0Y2ggdmFsdWVzICovCi0gICAgc3RydWN0IEZE QiBzdywgZmwsIGNtOyAgICAgICAgICAgICAgLyogRkRCcyBmb3IgZWFjaCBwYXJzZSBmdW5jdGlv biAqLwotICAgIGNoYXIgKiBjbWRzdHIgPSAidGhpcyBjb21tYW5kIjsKLQotI2lmZGVmIE5FV0ZU UAotICAgIGlmIChjeCA9PSBYWEdFVCB8fCBjeCA9PSBYWFJFR0VUIHx8IGN4ID09IFhYTUdFVCB8 fCBjeCA9PSBYWFJFVFIpIHsKLSAgICAgICAgZXh0ZXJuIGludCBmdHBnZXQ7Ci0gICAgICAgIGV4 dGVybiBpbnQgZnRwaXNvcGVuKCk7Ci0gICAgICAgIGlmICgoZnRwZ2V0ID09IDEpIHx8ICgoZnRw Z2V0ID09IDIpICYmIGZ0cGlzb3BlbigpKSkgewotCSAgICBpbnQgeDsKLQkgICAgeCA9IGRvZnRw Z2V0KGN4LDApOwotCSAgICBkZWJ1ZyhGMTAxLCJkb2Z0cGdldCByZXR1cm4iLCIiLHgpOwotCSAg ICBpZiAoeCA+IC0xKQotCSAgICAgIHN1Y2Nlc3MgPSB4OwotCSAgICBkZWJ1ZyhGMTAxLCJkb2Z0 cGdldCBzdWNjZXNzIiwiIixzdWNjZXNzKTsKLQkgICAgcmV0dXJuKHgpOwotCX0KLSAgICB9Ci0j ZW5kaWYgLyogTkVXRlRQICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJ4Z2V0IGN4IiwiIixjeCk7Ci0K LSAgICBvb3B0cyA9IC0xOwotICAgIG9tb2RlID0gLTE7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDw9 IFNORF9NQVg7IGkrKykgeyAgICAvKiBJbml0aWFsaXplIHN3aXRjaCB2YWx1ZXMgKi8KLSAgICAg ICAgcHZbaV0uc3ZhbCA9IE5VTEw7Ci0gICAgICAgIHB2W2ldLml2YWwgPSAtMTsKLSAgICAgICAg cHZbaV0ud3ZhbCA9IChDS19PRkZfVCktMTsKLSAgICB9Ci0gICAgLyogUHJlc2V0IHN3aXRjaCB2 YWx1ZXMgYmFzZWQgb24gdG9wLWxldmVsIGNvbW1hbmQgdGhhdCBjYWxsZWQgdXMgKi8KLQotICAg IHN3aXRjaCAoY3gpIHsKLSAgICAgIGNhc2UgWFhSRUM6ICAgICAgICAgICAgICAgICAgICAgICAv KiBSRUNFSVZFICovCi0gICAgICAgIGNtZHN0ciA9ICJSRUNFSVZFIjsKLSAgICAgICAgcmN2Y21k ID0gMTsgYnJlYWs7Ci0gICAgICBjYXNlIFhYR0VUOiAgICAgICAgICAgICAgICAgICAgICAgLyog R0VUICovCi0gICAgICAgIGNtZHN0ciA9ICJHRVQiOwotICAgICAgICBrb25seSA9IDE7Ci0gICAg ICAgIGJyZWFrOwotI2lmZGVmIENLX1JFU0VORAotICAgICAgY2FzZSBYWFJFR0VUOiAgICAgICAg ICAgICAgICAgICAgIC8qIFJFR0VUICovCi0gICAgICAgIGNtZHN0ciA9ICJSRUdFVCI7Ci0gICAg ICAgIGtvbmx5ID0gMTsKLSAgICAgICAgcHZbU05EX0JJTl0uaXZhbCA9IDE7ICAgICAgICAgICAv KiBJbXBsaWVzIC9CSU5BUlkgKi8KLSAgICAgICAgcHZbU05EX1JFU10uaXZhbCA9IDE7IGJyZWFr OwotI2VuZGlmIC8qIENLX1JFU0VORCAqLwotICAgICAgY2FzZSBYWFJFVFI6ICAgICAgICAgICAg ICAgICAgICAgIC8qIFJFVFJJRVZFICovCi0gICAgICAgIGNtZHN0ciA9ICJSRVRSSUVWRSI7Ci0g ICAgICAgIGtvbmx5ID0gMTsKLSAgICAgICAgcHZbU05EX0RFTF0uaXZhbCA9IDE7IGJyZWFrOwot I2lmZGVmIFBJUEVTRU5ECi0gICAgICBjYXNlIFhYQ1JFQzogICAgICAgICAgICAgICAgICAgICAg LyogQ1JFQ0VJVkUgKi8KLSAgICAgICAgY21kc3RyID0gIkNSRUNFSVZFIjsKLSAgICAgICAga29u bHkgPSAxOwotICAgICAgICByY3ZjbWQgPSAxOwotICAgICAgICBwdltTTkRfQ01EXS5pdmFsID0g MTsgYnJlYWs7Ci0gICAgICBjYXNlIFhYQ0dFVDogICAgICAgICAgICAgICAgICAgICAgLyogQ0dF VCAqLwotICAgICAgICBjbWRzdHIgPSAiQ0dFVCI7Ci0gICAgICAgIGtvbmx5ID0gMTsKLSAgICAg ICAgcHZbU05EX0NNRF0uaXZhbCA9IDE7IGJyZWFrOwotI2VuZGlmIC8qIFBJUEVTRU5EICovCi0j aWZuZGVmIE5PTUdFVAotICAgICAgY2FzZSBYWE1HRVQ6ICAgICAgICAgICAgICAgICAgICAgIC8q IE1HRVQgKi8KLSAgICAgICAgY21kc3RyID0gIk1HRVQiOwotICAgICAgICBrb25seSA9IDE7Ci0g ICAgICAgIG1nZXQgPSAxOyBicmVhazsKLSNlbmRpZiAvKiBOT01HRVQgKi8KLSAgICB9Ci0gICAg ZGVidWcoRjExMSwieGdldCByY3ZjbWQiLGNtZHN0cixyY3ZjbWQpOwotICAgIGRlYnVnKEYxMDEs InhnZXQga29ubHkiLCIiLGtvbmx5KTsKLQotI2lmZGVmIENLX1hZWgotICAgIGlmICghcmN2Y21k ICYmIHByb3RvY29sICE9IFBST1RPX0spIHsKLSAgICAgICAgcHJpbnRmKCI/U29ycnksICVzIHdv cmtzIG9ubHkgd2l0aCBLZXJtaXQgcHJvdG9jb2xcbiIsY21kc3RyKTsKLSAgICAgICAgcmV0dXJu KC05KTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfWFlaICovCi0KLSAgICAvKiBTZXQgdXAgY2hhaW5l ZCBwYXJzZSBmdW5jdGlvbnMuLi4gKi8KLQotICAgIGNtZmRiaSgmc3csICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEZpcnN0IEZEQiAtIGNvbW1hbmQgc3dpdGNoZXMgKi8KLSAgICAgICAgICAg X0NNS0VZLCAgICAgICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLwotICAgICAgICAgICByY3Zj bWQgPwotICAgICAgICAgICAiT3B0aW9uYWwgbmFtZS90ZW1wbGF0ZSB0byBzdG9yZSBpbmNvbWlu ZyBmaWxlcyB1bmRlciwgb3Igc3dpdGNoIiA6Ci0gICAgICAgICAgICJSZW1vdGUgZmlsZW5hbWUs IG9yIHN3aXRjaCIsIC8qIGhscG1zZyAqLwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAgICAgICByY3ZjbWQgPyBucmN2 dGFiIDogbmdldHRhYiwgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLwotICAg ICAgICAgICA0LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0 YSAyOiA0ID0gY21zd2kgKi8KLSAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgICAgICAg ICAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0gICAgICAgICAgIHJjdmNtZCA/IHJjdnRhYiA6 IGdldHRhYiwgICAgLyogS2V5d29yZCB0YWJsZSAqLwotICAgICAgICAgICAmZmwgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KLSAgICAgICAgICAgKTsK LSAgICBpZiAocmN2Y21kIHx8IG1nZXQpICAgICAgICAgICAgICAgICAvKiBSRUNFSVZFIG9yIE1H RVQgKi8KLSAgICAgIGNtZmRiaSgmZmwsCi0gICAgICAgICAgIF9DTVRYVCwgICAgICAgICAgICAg ICAgICAgICAgLyogZmNvZGUgKi8KLSAgICAgICAgICAgcmN2Y21kID8gICAgICAgICAgICAgICAg ICAgICAvKiBobHBtc2cgKi8KLSAgICAgICAgICAgICAiT3V0cHV0IGZpbGVuYW1lIG9yIENvbW1h bmQiIDogLyogT3V0cHV0IGZpbGVuYW1lICovCi0gICAgICAgICAgICAgIkZpbGUocykgdG8gR0VU IiwgICAgICAgICAgICAgIC8qIEZpbGVzIHdlIGFyZSBhc2tpbmcgZm9yICovCi0gICAgICAgICAg ICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAi IiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAg ICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRh IDEgKi8KLSAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBu dW1lcmljIGRhdGEgMiAqLwotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBDS19YWVoKLSAgICAgICAg ICAgKHByb3RvY29sID09IFBST1RPX1ggfHwgcHJvdG9jb2wgPT0gUFJPVE9fWEMpID8KLSAgICAg ICAgICAgICB4eHN0cmluZyA6Ci0gICAgICAgICAgICAgKHJjdmNtZCA/ICh4eF9zdHJwKTAgIDog eHhzdHJpbmcpCi0jZWxzZQotICAgICAgICAgICByY3ZjbWQgPyAoeHhfc3RycCkwICA6IHh4c3Ry aW5nIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KLSNlbmRpZiAvKiBDS19YWVogKi8KLSNlbHNl ICAvKiBDT01NRU5UICovCi0JICAgeHhzdHJpbmcJCQkvKiBBbHdheXMgZXZhbHVhdGUgLSBmZGMg MjAwNi8wMi8wMSAqLwotI2VuZGlmCS8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgICAsCi0gICAg ICAgICAgIE5VTEwsCi0gICAgICAgICAgICZjbQotICAgICAgICAgICApOwotICAgIGVsc2UKLSAg ICAgIGNtZmRiaSgmZmwsICAgICAgICAgICAgICAgICAgICAgICAvKiBSZW1vdGUgZmlsZW5hbWUg b3IgY29tbWFuZCAqLwotICAgICAgICAgICBfQ01GTEQsICAgICAgICAgICAgICAgICAgICAgIC8q IGZjb2RlICovCi0gICAgICAgICAgICJSZW1vdGUgZmlsZW5hbWUiLCAgICAgICAgICAgLyogaGxw bXNnICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVs dCAqLwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0 cmluZyBkYXRhICovCi0gICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog YWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KLSAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLwotICAgICAgICAgICB4eHN0cmluZywK LSAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgJmNtCi0gICAgICAgICAgICk7Ci0gICAgY21m ZGJpKCZjbSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29uZmlybWF0aW9uICovCi0gICAg ICAgICAgIF9DTUNGTSwgICAgICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KLSAgICAgICAg ICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBobHBtc2cgKi8KLSAgICAgICAgICAg IiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICIi LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAg ICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEg MSAqLwotICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51 bWVyaWMgZGF0YSAyICovCi0gICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgIE5VTEwsCi0gICAg ICAgICAgIE5VTEwKLSAgICAgICAgICAgKTsKLQotICAgIC8qIChTZWUgZG94c2VuZCgpIGZvciBm dWxsZXIgY29tbWVudGFyeSkgKi8KLQotICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFBhcnNlIDAgb3IgbW9yZSBzd2l0Y2hlcyAqLwotICAgICAgICB4ID0gY21mZGIo JnN3KTsgICAgICAgICAgICAgICAgIC8qIFBhcnNlIHNvbWV0aGluZyAqLwotICAgICAgICBkZWJ1 ZyhGMTAxLCJ4Z2V0IGNtZmRiIiwiIix4KTsKLSAgICAgICAgaWYgKHggPCAwKSAgICAgICAgICAg ICAgICAgICAgICAvKiBFcnJvciAqLwotICAgICAgICAgIGdvdG8geGdldHg7ICAgICAgICAgICAg ICAgICAgIC8qIG9yIHJlcGFyc2UgbmVlZGVkICovCi0gICAgICAgIGlmIChjbXJlc3VsdC5mY29k ZSAhPSBfQ01LRVkpICAgLyogQnJlYWsgb3V0IGlmIG5vdCBhIHN3aXRjaCAqLwotICAgICAgICAg IGJyZWFrOwotICAgICAgICBjID0gY21nYnJrKCk7ICAgICAgICAgICAgICAgICAgIC8qIEdldCBi cmVhayBjaGFyYWN0ZXIgKi8KLSAgICAgICAgaWYgKChnZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9 PSAnPScpKSAmJiAhKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgewotICAgICAgICAgICAgcHJpbnRm KCI/VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBhbiBhcmd1bWVudFxuIik7Ci0gICAgICAgICAg ICB4ID0gLTk7Ci0gICAgICAgICAgICBnb3RvIHhnZXR4OwotICAgICAgICB9Ci0gICAgICAgIGlm ICghZ2V0dmFsICYmIChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKLSAgICAgICAgICAgIHByaW50 ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKLSAgICAgICAgICAgIHgg PSAtOTsKLSAgICAgICAgICAgIGdvdG8geGdldHg7Ci0gICAgICAgIH0KLSAgICAgICAgbiA9IGNt cmVzdWx0Lm5yZXN1bHQ7ICAgICAgICAgICAvKiBOdW1lcmljIHJlc3VsdCA9IHN3aXRjaCB2YWx1 ZSAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJ4Z2V0IHN3aXRjaCIsIiIsbik7Ci0KLSAgICAgICAg c3dpdGNoIChuKSB7ICAgICAgICAgICAgICAgICAgICAvKiBQcm9jZXNzIHRoZSBzd2l0Y2ggKi8K LSNpZmRlZiBQSVBFU0VORAotICAgICAgICAgIGNhc2UgU05EX0NNRDogICAgICAgICAgICAgICAg IC8qIFRoZXNlIHRha2Ugbm8gYXJncyAqLwotICAgICAgICAgICAgaWYgKG5vcHVzaCkgewotICAg ICAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBzeXN0ZW0gY29tbWFuZCBhY2Nlc3MgaXMgZGlz YWJsZWRcbiIpOwotICAgICAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgICAgICBnb3Rv IHhnZXR4OwotICAgICAgICAgICAgfSBlbHNlIGlmIChyY3ZmaWx0ZXIpIHsKLSAgICAgICAgICAg ICAgICBwcmludGYoCi0iP1NvcnJ5LCBubyBHRVQgL0NPTU1BTkQgd2hlbiBSRUNFSVZFIEZJTFRF UiBzZWxlY3RlZFxuIik7Ci0gICAgICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgICAg IGdvdG8geGdldHg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocmN2Y21kKQotICAg ICAgICAgICAgICBzdy5obHBtc2cgPSAiQ29tbWFuZCwgb3Igc3dpdGNoIjsgLyogQ2hhbmdlIGhl bHAgbWVzc2FnZSAqLwotICAgICAgICAgICAgLyogRmFsbCB0aHJ1Li4uICovCi0jZW5kaWYgLyog UElQRVNFTkQgKi8KLQotICAgICAgICAgIGNhc2UgU05EX1JFQzogICAgICAgICAgICAgICAgIC8q IC9SRUNVUlNJVkUgKi8KLSAgICAgICAgICAgIHB2W1NORF9QVEhdLml2YWwgPSBQQVRIX1JFTDsg LyogSW1wbGllcyByZWxhdGl2ZSBwYXRobmFtZXMgKi8KLSAgICAgICAgICAgIHB2W25dLml2YWwg PSAxOyAgICAgICAgICAgICAvKiBTZXQgdGhlIHJlY3Vyc2l2ZSBmbGFnICovCi0gICAgICAgICAg ICBicmVhazsKLQotICAgICAgICAgIGNhc2UgU05EX1JFUzogICAgICAgICAgICAgICAgIC8qIC9S RUNPVkVSICovCi0gICAgICAgICAgICBwdltTTkRfQklOXS5pdmFsID0gMTsgICAgICAgLyogSW1w bGllcyAvQklOQVJZICovCi0gICAgICAgICAgICBwdltuXS5pdmFsID0gMTsgICAgICAgICAgICAg LyogU2V0IHRoZSByZXNlbmQgZmxhZyAqLwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg ICBjYXNlIFNORF9ERUw6ICAgICAgICAgICAgICAgICAvKiAvREVMRVRFICovCi0gICAgICAgICAg Y2FzZSBTTkRfU0hIOiAgICAgICAgICAgICAgICAgLyogL1FVSUVUICovCi0gICAgICAgICAgY2Fz ZSBTTkRfQ0FMOiAgICAgICAgICAgICAgICAgLyogL0NBTElCUkFURSAqLwotICAgICAgICAgIGNh c2UgU05EX1hQQTogICAgICAgICAgICAgICAgIC8qIC9UUkFOU1BBUkVOVCAqLwotICAgICAgICAg ICAgcHZbbl0uaXZhbCA9IDE7ICAgICAgICAgICAgIC8qIEp1c3Qgc2V0IHRoZSBhcHByb3ByaWF0 ZSBmbGFnICovCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgU05EX1BJUDog ICAgICAgICAgICAgICAgIC8qIC9QSVBFUzp7T04sT0ZGfSAqLwotICAgICAgICAgICAgaWYgKCFn ZXR2YWwpIHsKLSAgICAgICAgICAgICAgICBwdltuXS5pdmFsID0gMTsKLSAgICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KG9ub2Zm LDIsIiIsIm9uIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgZ290byB4Z2V0eDsKLSAg ICAgICAgICAgIGlmICghbm9wdXNoKQotICAgICAgICAgICAgICBwdltuXS5pdmFsID0geDsKLSAg ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgLyogRmlsZSB0cmFuc2ZlciBtb2RlcyAtIGVh Y2ggdW5kb2VzIHRoZSBvdGhlcnMgKi8KLQotICAgICAgICAgIGNhc2UgU05EX0JJTjogICAgICAg ICAgICAgICAgIC8qIEJpbmFyeSAqLwotICAgICAgICAgIGNhc2UgU05EX1RYVDogICAgICAgICAg ICAgICAgIC8qIFRleHQgKi8KLSAgICAgICAgICBjYXNlIFNORF9JTUc6ICAgICAgICAgICAgICAg ICAvKiBJbWFnZSAqLwotICAgICAgICAgIGNhc2UgU05EX0xCTDogICAgICAgICAgICAgICAgIC8q IExhYmVsZWQgKi8KLSAgICAgICAgICAgIHB2W1NORF9CSU5dLml2YWwgPSAwOyAgICAgICAvKiBV bnNldCBhbGwgKi8KLSAgICAgICAgICAgIHB2W1NORF9UWFRdLml2YWwgPSAwOwotICAgICAgICAg ICAgcHZbU05EX0lNR10uaXZhbCA9IDA7Ci0gICAgICAgICAgICBwdltTTkRfTEJMXS5pdmFsID0g MDsKLSAgICAgICAgICAgIHB2W25dLml2YWwgPSAxOyAgICAgICAgICAgICAvKiBTZXQgdGhlIHJl cXVlc3RlZCBvbmUgKi8KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBTTkRf RVhDOiAgICAgICAgICAgICAgICAgLyogRXhjbHVkZXMgKi8KLSAgICAgICAgICAgIGlmICghZ2V0 dmFsKSBicmVhazsKLSAgICAgICAgICAgIGlmICgoeCA9IGNtZmxkKCJQYXR0ZXJuIiwiIiwmcyx4 eHN0cmluZykpIDwgMCkgewotICAgICAgICAgICAgICAgIGlmICh4ID09IC0zKSB7Ci0gICAgICAg ICAgICAgICAgICAgIHByaW50ZigiP1BhdHRlcm4gcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAg ICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGdvdG8g eGdldHg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocHZbbl0uc3ZhbCkgZnJlZShw dltuXS5zdmFsKTsKLSAgICAgICAgICAgIHkgPSBzdHJsZW4ocyk7Ci0gICAgICAgICAgICBpZiAo eSA+IDI1NikgewotICAgICAgICAgICAgICAgIHByaW50ZigiP1BhdHRlcm4gdG9vIGxvbmcgLSAy NTYgbWF4XG4iKTsKLSAgICAgICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICAgICAgZ290 byB4Z2V0eDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHB2W25dLnN2YWwgPSBtYWxsb2Mo eSsxKTsKLSAgICAgICAgICAgIGlmIChwdltuXS5zdmFsKSB7Ci0gICAgICAgICAgICAgICAgc3Ry Y3B5KHB2W25dLnN2YWwscyk7ICAgLyogc2FmZSAqLwotICAgICAgICAgICAgICAgIHB2W25dLml2 YWwgPSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSNpZmRlZiBDT01N RU5UCi0gICAgICAgICAgLyogTm90IGltcGxlbWVudGVkICovCi0gICAgICAgICAgY2FzZSBTTkRf UFJJOiAgICAgICAgICAgICAgICAgLyogR0VUIHRvIHByaW50ZXIgKi8KLSAgICAgICAgICAgIHB2 W25dLml2YWwgPSAxOwotICAgICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOwotICAgICAgICAg ICAgaWYgKCh4ID0gY21mbGQoIlByaW50IG9wdGlvbnMiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQot ICAgICAgICAgICAgICBnb3RvIHhnZXR4OwotICAgICAgICAgICAgcHZbbl0uc3ZhbCA9IG1hbGxv YygoaW50KXN0cmxlbihzKSsxKTsKLSAgICAgICAgICAgIGlmIChwdltuXS5zdmFsKQotICAgICAg ICAgICAgICBzdHJjcHkocHZbbl0uc3ZhbCxzKTsgICAgIC8qIHNhZmUgKi8KLSAgICAgICAgICAg IGJyZWFrOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgICAgICAgIGNhc2UgU05EX01PVjog ICAgICAgICAgICAgICAgIC8qIE1PVkUgYWZ0ZXIgKi8KLSAgICAgICAgICBjYXNlIFNORF9SRU46 ICAgICAgICAgICAgICAgICAvKiBSRU5BTUUgYWZ0ZXIgKi8KLSAgICAgICAgICAgIGlmICghZ2V0 dmFsKSBicmVhazsKLSAgICAgICAgICAgIGlmICgoeCA9IGNtZmxkKG4gPT0gU05EX01PViA/Ci0g ICAgICAgICAgICJkZXZpY2UgYW5kL29yIGRpcmVjdG9yeSBmb3Igc291cmNlIGZpbGUgYWZ0ZXIg c2VuZGluZyIgOgotICAgICAgICAgICAibmV3IG5hbWUgZm9yIHNvdXJjZSBmaWxlIGFmdGVyIHNl bmRpbmciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAmcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPT0gU05EX01PViA/ IHh4c3RyaW5nIDogTlVMTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkgPCAwKSB7Ci0g ICAgICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRm KCIlc1xuIiwgbiA9PSBTTkRfTU9WID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICI/RGVz dGluYXRpb24gcmVxdWlyZWQiIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICI/TmV3IG5h bWUgcmVxdWlyZWQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAg ICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGdvdG8g eGdldHg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocHZbbl0uc3ZhbCkgewotICAg ICAgICAgICAgICAgIGZyZWUocHZbbl0uc3ZhbCk7Ci0gICAgICAgICAgICAgICAgcHZbbl0uc3Zh bCA9IE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzID0gYnJzdHJpcChzKTsKLSAg ICAgICAgICAgIHkgPSBzdHJsZW4ocyk7Ci0gICAgICAgICAgICBpZiAoeSA+IDApIHsKLSAgICAg ICAgICAgICAgICBwdltuXS5zdmFsID0gbWFsbG9jKHkrMSk7Ci0gICAgICAgICAgICAgICAgaWYg KHB2W25dLnN2YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RyY3B5KHB2W25dLnN2YWwscyk7 IC8qIHNhZmUgKi8KLSAgICAgICAgICAgICAgICAgICAgcHZbbl0uaXZhbCA9IDE7Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg ICBjYXNlIFNORF9BU046ICAgICAgICAgICAgICAgICAvKiBBcy1uYW1lICovCi0gICAgICAgICAg ICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0gICAgICAgICAgICBpZiAobWdldCkgewotICAgICAgICAg ICAgICAgIHByaW50ZigiP1NvcnJ5LCBhcy1uYW1lIG5vdCBhbGxvd2VkIHdpdGggTUdFVFxuIik7 Ci0gICAgICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgICAgIGdvdG8geGdldHg7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoCi0jaWZkZWYgQ09NTUVOVAotCQkoeCA9IGNt ZmxkKCJOYW1lIHRvIHN0b3JlIGl0IHVuZGVyIiwiIiwmcyxOVUxMKSkKLSNlbHNlCi0JCSh4ID0g Y21mbGQoIk5hbWUgdG8gc3RvcmUgaXQgdW5kZXIiLCIiLCZzLHh4c3RyaW5nKSkKLSNlbmRpZgkv KiBDT01NRU5UICovCi0JCTwgMCkKLSAgICAgICAgICAgICAgZ290byB4Z2V0eDsKLSAgICAgICAg ICAgIHMgPSBicnN0cmlwKHMpOwotICAgICAgICAgICAgaWYgKCh5ID0gc3RybGVuKHMpKSA+IDAp IHsKLSAgICAgICAgICAgICAgICBpZiAocHZbbl0uc3ZhbCkgZnJlZShwdltuXS5zdmFsKTsKLSAg ICAgICAgICAgICAgICBwdltuXS5zdmFsID0gbWFsbG9jKHkrMSk7Ci0gICAgICAgICAgICAgICAg aWYgKHB2W25dLnN2YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RyY3B5KHB2W25dLnN2YWws cyk7IC8qIHNhZmUgKi8KLSAgICAgICAgICAgICAgICAgICAgcHZbbl0uaXZhbCA9IDE7Ci0gICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSNpZmRl ZiBQSVBFU0VORAotICAgICAgICAgIGNhc2UgU05EX0ZMVDogICAgICAgICAgICAgICAgIC8qIEZp bHRlciAqLwotICAgICAgICAgICAgZGVidWcoRjEwMSwieGdldCAvZmlsdGVyIGdldHZhbCIsIiIs Z2V0dmFsKTsKLSAgICAgICAgICAgIGlmICghZ2V0dmFsKSBicmVhazsKLSAgICAgICAgICAgIGlm ICgoeCA9IGNtZmxkKCJGaWx0ZXIgcHJvZ3JhbSB0byByZWNlaXZlIHRocm91Z2giLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIiIsJnMsTlVMTCkpIDwgMCkgewotICAgICAgICAgICAgICAg IGlmICh4ID09IC0zKQotICAgICAgICAgICAgICAgICAgcyA9ICIiOwotICAgICAgICAgICAgICAg IGVsc2UKLSAgICAgICAgICAgICAgICAgIGdvdG8geGdldHg7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgICAgICBpZiAoKnMpIHMgPSBicnN0cmlwKHMpOwotICAgICAgICAgICAgeSA9IHN0cmxlbihz KTsKLSAgICAgICAgICAgIGZvciAoeCA9IDA7IHggPCB5OyB4KyspIHsgICAvKiBNYWtlIHN1cmUg dGhleSBpbmNsdWRlZCAiXHYoLi4uKSIgKi8KLSAgICAgICAgICAgICAgICBpZiAoc1t4XSAhPSAn XFwnKSBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAoc1t4KzFdID09ICd2JykgYnJlYWs7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoeCA9PSB5KSB7Ci0gICAgICAgICAgICAg ICAgcHJpbnRmKAotICAgICAgICAgICAgICAgICI/RmlsdGVyIG11c3QgY29udGFpbiBhIHJlcGxh Y2VtZW50IHZhcmlhYmxlIGZvciBmaWxlbmFtZS5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAg KTsKLSAgICAgICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICAgICAgZ290byB4Z2V0eDsK LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHB2W25dLml2YWwgPSAxOwotICAgICAgICAgICAg aWYgKHB2W25dLnN2YWwpIHsKLSAgICAgICAgICAgICAgICBmcmVlKHB2W25dLnN2YWwpOwotICAg ICAgICAgICAgICAgIHB2W25dLnN2YWwgPSBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICAg ICAgaWYgKCh5ID0gc3RybGVuKHMpKSA+IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoKHB2W25d LnN2YWwgPSBtYWxsb2MoeSsxKSkpCi0gICAgICAgICAgICAgICAgICBzdHJjcHkocHZbbl0uc3Zh bCxzKTsgLyogc2FmZSAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0jZW5k aWYgLyogUElQRVNFTkQgKi8KLQotICAgICAgICAgIGNhc2UgU05EX1BUSDogICAgICAgICAgICAg ICAgIC8qIFBhdGhuYW1lcyAqLwotICAgICAgICAgICAgaWYgKCFnZXR2YWwpIHsKLSAgICAgICAg ICAgICAgICBwdltuXS5pdmFsID0gUEFUSF9SRUw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKHggPSBjbWtleShycGF0aHRhYixucnBhdGh0 YWIsIiIsIm9uIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgZ290byB4Z2V0eDsKLSAg ICAgICAgICAgIHB2W25dLml2YWwgPSB4OyAgICAgICAgICAgICAvKiBEaXR0byAqLwotICAgICAg ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFNORF9OQU06ICAgICAgICAgICAgICAgICAv KiBGaWxlbmFtZXMgKi8KLSAgICAgICAgICAgIGlmICghZ2V0dmFsKSBicmVhazsKLSAgICAgICAg ICAgIGlmICgoeCA9IGNta2V5KGZudGFiLG5mbnRhYiwiIiwiY29udmVydGVkIix4eHN0cmluZykp IDwgMCkKLSAgICAgICAgICAgICAgZ290byB4Z2V0eDsKLSAgICAgICAgICAgIHB2W25dLml2YWwg PSB4OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFNORF9QUk86ICAgICAg ICAgICAgICAgICAvKiBQcm90b2NvbCB0byB1c2UgKi8KLSAgICAgICAgICAgIGlmICghZ2V0dmFs KSBicmVhazsKLSAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KHByb3RvcyxucHJvdG9zLCJGaWxl LXRyYW5zZmVyIHByb3RvY29sIiwiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHh4c3Ry aW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gLTMpCi0gICAgICAgICAgICAg ICAgICB4ID0gMDsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBnb3Rv IHhnZXR4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVidWcoRjExMSwieGdldCAvcHJv dG8iLGF0bWJ1Zix4KTsKLSAgICAgICAgICAgIHB2W25dLml2YWwgPSB4OwotICAgICAgICAgICAg aWYgKGtvbmx5ICYmIHggIT0gUFJPVE9fSykgewotICAgICAgICAgICAgICAgIHByaW50ZigKLSI/ U29ycnksIHRoaXMgY29tbWFuZCB3b3JrcyBvbmx5IHdpdGggS2VybWl0IHByb3RvY29sXG4iCi0g ICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgeCA9IC05OwotICAgICAg ICAgICAgICAgIGdvdG8geGdldHg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK LQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBwcmludGYoIj9VbmV4cGVjdGVkIHN3 aXRjaCB2YWx1ZSAtICVkXG4iLGNtcmVzdWx0Lm5yZXN1bHQpOwotICAgICAgICAgICAgeCA9IC05 OwotICAgICAgICAgICAgZ290byB4Z2V0eDsKLSAgICAgICAgfQotICAgIH0KLSAgICBkZWJ1ZyhG MTAxLCJ4Z2V0IGNtcmVzdWx0IGZjb2RlIiwiIixjbXJlc3VsdC5mY29kZSk7Ci0KLSAgICBjbWFy ZyA9IGxpbmU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHN0cmluZyBwb2lu dGVycyAqLwotICAgIGNtYXJnMiA9IHRtcGJ1ZjsKLSAgICBhc25hbWUgPSAwOwotICAgIGxpbmVb MF0gPSBOVUw7ICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBidWZmZXJzLiAqLwotICAgIHRt cGJ1ZlswXSA9IE5VTDsKLQotICAgIHN3aXRjaCAoY21yZXN1bHQuZmNvZGUpIHsgICAgICAgICAg IC8qIEhvdyBkaWQgd2UgZ2V0IG91dCBvZiBzd2l0Y2ggbG9vcCAqLwotICAgICAgY2FzZSBfQ01G TEQ6ICAgICAgICAgICAgICAgICAgICAgIC8qICgzKSBSZW1vdGUgZmlsZXNwZWMgKi8KLSAgICAg ICAgY2tzdHJuY3B5KGxpbmUsY21yZXN1bHQuc3Jlc3VsdCxMSU5CVUZTSVopOwotICAgICAgICBi cmVhazsKLSAgICAgIGNhc2UgX0NNVFhUOiAgICAgICAgICAgICAgICAgICAgICAvKiAoNCkgQXMt bmFtZSAqLwotICAgICAgICBpZiAocmN2Y21kKSB7Ci0gICAgICAgICAgICBja3N0cm5jcHkodG1w YnVmLGNtcmVzdWx0LnNyZXN1bHQsVE1QQlVGU0laKTsKLSAgICAgICAgICAgIGlmICgoaW50KXN0 cmxlbih0bXBidWYpID4gMCkKLSAgICAgICAgICAgICAgYXNuYW1lID0gMTsKLSAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgIGNrc3RybmNweShsaW5lLGNtcmVzdWx0LnNyZXN1bHQsTElOQlVG U0laKTsKLSAgICAgICAgfQotICAgICAgY2FzZSBfQ01DRk06ICAgICAgICAgICAgICAgICAgICAg IC8qICg2KSBDb25maXJtYXRpb24gKi8KLSAgICAgICAgY29uZmlybWVkID0gMTsKLSAgICAgICAg YnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBwcmludGYoIj9VbmV4cGVjdGVkIGZ1bmN0 aW9uIGNvZGU6ICVkXG4iLGNtcmVzdWx0LmZjb2RlKTsKLSAgICAgICAgeCA9IC05OwotICAgICAg ICBnb3RvIHhnZXR4OwotICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJ4Z2V0IHN0cmluZyIsY21hcmcs MCk7Ci0gICAgZGVidWcoRjEwMSwieGdldCBjb25maXJtZWQiLCIiLGNvbmZpcm1lZCk7Ci0KLSAg ICBjbWFyZyA9IGJyc3RyaXAoY21hcmcpOyAgICAgICAgICAgICAvKiBTdHJpcCBhbnkgYnJhY2Vz ICovCi0KLSAgICBpZiAoIWNvbmZpcm1lZCkgeyAgICAgICAgICAgICAgICAgICAvKiBDUiBub3Qg dHlwZWQgeWV0LCBnZXQgbW9yZSBmaWVsZHMgKi8KLSAgICAgICAgaWYgKHB2W1NORF9DTURdLml2 YWwgPiAwKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ4Z2V0IGNhbGxpbmcgY210eHQiLCIi LDApOwotICAgICAgICAgICAgeCA9IGNtdHh0KCJMb2NhbCBjb21tYW5kIHRvIHBpcGUgaW50byIs IiIsJnMsTlVMTCk7Ci0gICAgICAgICAgICBpZiAoeCA8IDAgJiYgeCAhPSAtMykgZ290byB4Z2V0 eDsKLSAgICAgICAgICAgIGlmICh4ICE9IC0zKSB7Ci0gICAgICAgICAgICAgICAgY2tzdHJuY3B5 KHRtcGJ1ZixzLFRNUEJVRlNJWik7Ci0gICAgICAgICAgICAgICAgYXNuYW1lID0gMTsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICghcmN2Y21kKSB7Ci0jaWZkZWYgVk1TCi0gICAg ICAgICAgICAvKiBjbW9maSgpIGZhaWxzIGlmIHlvdSBnaXZlIGl0IGEgZGlyZWN0b3J5IG5hbWUg Ki8KLSAgICAgICAgICAgIHggPSBjbWZsZCgiTmFtZSBvciBkaXJlY3RvcnkgZm9yIGluY29taW5n IGZpbGUiLCIiLCZzLE5VTEwpOwotICAgICAgICAgICAgZGVidWcoRjExMSwieGdldCBjbWZsZCIs cyx4KTsKLSNlbHNlCi0gICAgICAgICAgICB4ID0gY21vZmkoIk5hbWUgb3IgZGlyZWN0b3J5IGZv ciBpbmNvbWluZyBmaWxlIiwiIiwmcyxOVUxMKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsInhn ZXQgY21vZmkiLHMseCk7Ci0jZW5kaWYgLyogVk1TICovCi0gICAgICAgICAgICBpZiAoeCA8IDAg JiYgeCAhPSAtMykgZ290byB4Z2V0eDsKLSAgICAgICAgICAgIGlmICh4ICE9IC0zKSB7Ci0gICAg ICAgICAgICAgICAgY2tzdHJuY3B5KHRtcGJ1ZixzLFRNUEJVRlNJWik7Ci0gICAgICAgICAgICAg ICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSBnb3RvIHhnZXR4OwotICAgICAgICAgICAgICAgIGFz bmFtZSA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLyogQXJyaXZl IGhlcmUgd2l0aCBjbWFyZyBhbmQgY21hcmcyIGFsbCBzZXQgKi8KLQotICAgIGRlYnVnKEYxMTEs InhnZXQgYXNuYW1lIixjbWFyZzIsYXNuYW1lKTsKLSAgICBpZiAoIWFzbmFtZSkgewotICAgICAg ICBpZiAocHZbU05EX0FTTl0uc3ZhbCkKLSAgICAgICAgICBja3N0cm5jcHkodG1wYnVmLHB2W1NO RF9BU05dLnN2YWwsVE1QQlVGU0laKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHRtcGJ1Zlsw XSA9IE5VTDsKLSAgICB9Ci0gICAgY21hcmcyID0gYnJzdHJpcChjbWFyZzIpOyAgICAgICAgICAg LyogU3RyaXAgb3V0ZXIgYnJhY2VzIGlmIGFueS4gKi8KLSAgICBkZWJ1ZyhGMTEwLCJ4Z2V0IGNt YXJnIixjbWFyZywwKTsKLSAgICBkZWJ1ZyhGMTEwLCJ4Z2V0IGNtYXJnMiIsY21hcmcyLDApOwot Ci0gICAgaWYgKCEqY21hcmcgJiYKLSAgICAgICAgKGN4ID09IFhYR0VUIHx8IGN4ID09IFhYUkVH RVQgfHwgY3ggPT0gWFhDR0VUIHx8IGN4ID09IFhYTUdFVCkpIHsKLSAgICAgICAgcHJpbnRmKCI/ QSByZW1vdGUgZmlsZSBzcGVjaWZpY2F0aW9uIGlzIHJlcXVpcmVkXG4iKTsKLSAgICAgICAgeCA9 IC05OwotICAgICAgICBnb3RvIHhnZXR4OwotICAgIH0KLSNpZmRlZiBQSVBFU0VORAotICAgIGlm IChwdltTTkRfQ01EXS5pdmFsID4gMCkgeyAgICAgICAgIC8qIC9DT01NQU5EIHNldHMgcGlwZXNl bmQgZmxhZyAqLwotICAgICAgICB4ID0gLTk7Ci0gICAgICAgIGlmICghKmNtYXJnMikgewotICAg ICAgICAgICAgcHJpbnRmKCI/Q29tbWFuZCByZXF1aXJlZFxuIik7Ci0gICAgICAgICAgICBnb3Rv IHhnZXR4OwotICAgICAgICB9IGVsc2UgaWYgKG5vcHVzaCkgewotICAgICAgICAgICAgcHJpbnRm KCI/U29ycnksIHN5c3RlbSBjb21tYW5kIGFjY2VzcyBpcyBkaXNhYmxlZFxuIik7Ci0gICAgICAg ICAgICBnb3RvIHhnZXR4OwotICAgICAgICB9IGVsc2UgaWYgKHJjdmZpbHRlcikgewotICAgICAg ICAgICAgcHJpbnRmKCI/U29ycnksIG5vIEdFVCAvQ09NTUFORCB3aGlsZSBSRUNFSVZFIEZJTFRF UiBzZWxlY3RlZFxuIik7Ci0gICAgICAgICAgICBnb3RvIHhnZXR4OwotICAgICAgICB9IGVsc2UK LSAgICAgICAgICBwaXBlc2VuZCA9IDE7Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsInhnZXQgL0NP TU1BTkQgcGlwZXNlbmQiLCIiLHBpcGVzZW5kKTsKLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotCi0j aWZkZWYgQ0tfUkVTRU5ECi0gICAgaWYgKHB2W1NORF9SRVNdLml2YWwgPiAwKSB7ICAgICAgICAg LyogUkVHRVQgb3IgR0VUIC9SRUNPVkVSICovCi0jaWZkZWYgUkVDVVJTSVZFCi0gICAgICAgIGlm IChwdltTTkRfUkVDXS5pdmFsID4gMCkgeyAgICAgLyogUkVDVVJTSVZFICovCi0jaWZkZWYgQ09N TUVOVAotICAgICAgICAgICAgcHJpbnRmKCI/VW5zdXBwb3J0ZWQgb3B0aW9uIGNvbWJpbmF0aW9u OiAvUkVDT1ZFUiAvUkVDVVJTSVZFXG4iKTsKLSAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAg ICAgIGdvdG8geGdldHg7Ci0jZWxzZQotICAgICAgICAgICAgb3BrdCA9IDE7Ci0jZW5kaWYgLyog Q09NTUVOVCAqLwotICAgICAgICB9Ci0jZW5kaWYgLyogUkVDVVJTSVZFICovCi0gICAgICAgIGlm IChwdltTTkRfREVMXS5pdmFsID4gMCkgeyAgICAgLyogL0RFTEVURSAqLwotI2lmZGVmIENPTU1F TlQKLSAgICAgICAgICAgIHByaW50ZigiP1Vuc3VwcG9ydGVkIG9wdGlvbiBjb21iaW5hdGlvbjog L1JFQ09WRVIgL0RFTEVURVxuIik7Ci0gICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICBn b3RvIHhnZXR4OwotI2Vsc2UKLSAgICAgICAgICAgIG9wa3QgPSAxOwotI2VuZGlmIC8qIENPTU1F TlQgKi8KLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBDS19SRVNFTkQgKi8KLQotICAgIGlm IChwdltTTkRfRVhDXS5pdmFsID4gMCkgICAgICAgICAgIC8qIC9FWENFUFQgKi8KLSAgICAgIG1h a2VsaXN0KHB2W1NORF9FWENdLnN2YWwscmN2ZXhjZXB0LE5TTkRFWENFUFQpOwotCi0jaWZkZWYg SUtTX09QVElPTgotICAgIGlmICghcmN2Y21kCi0jaWZkZWYgQ0tfWFlaCi0gICAgICAgICAmJiBw cm90b2NvbCA9PSBQUk9UT19LCi0jZW5kaWYgLyogQ0tfWFlaICovCi0gICAgICAgICApIHsKLSAg ICAgICAgaWYgKCFpa3Nfd2FpdChLRVJNSVRfUkVRX1NUQVJULDEpKSB7Ci0gICAgICAgICAgICBw cmludGYoCi0gICAgICAgICAgICAgICI/QSBLZXJtaXQgU2VydmVyIGlzIG5vdCBhdmFpbGFibGUg dG8gcHJvY2VzcyB0aGlzIGNvbW1hbmRcbiIpOwotICAgICAgICAgICAgeCA9IC05OyAgICAgICAg ICAgICAgICAgICAgIC8qIGNvcnJlY3QgdGhlIHJldHVybiBjb2RlICovCi0gICAgICAgICAgICBn b3RvIHhnZXR4OwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIElLU19PUFRJT04gKi8KLQot I2lmZGVmIENLX1hZWgotICAgIHsKLSAgICAgICAgaW50IHBvLCBwZzsgICAgICAgICAgICAgICAg ICAgICAvKiAoZm9yIGNsYXJpdHkpICovCi0gICAgICAgIHBvID0gcHZbU05EX1BST10uaXZhbDsg ICAgICAgICAgLyogL1BST1RPQ09MIG9wdGlvbiAqLwotICAgICAgICBwZyA9IHByb3RvY29sOyAg ICAgICAgICAgICAgICAgIC8qIFByb3RvY29sIGdsb2JhbCAgKi8KLSAgICAgICAgaWYgKChyY3Zj bWQgJiYgISpjbWFyZzIpICYmICAgICAvKiBJZiBubyBhcy1uYW1lIHdhcyBnaXZlbiAqLwotICAg ICAgICAgICAgLyogYW5kIC9QUk9UT0NPTCBpcyBYTU9ERU0gb3IgZ2xvYmFsIHByb3RvY29sIGlz IFhNT0RFTS4uLiAqLwotICAgICAgICAgICAgKChwbyA8ICAwICYmIChwZyA9PSBQUk9UT19YIHx8 IHBnID09IFBST1RPX1hDKSkgfHwKLSAgICAgICAgICAgICAocG8gPiAtMSAmJiAocG8gPT0gUFJP VE9fWCB8fCBwbyA9PSBQUk9UT19YQykpKQotICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICBw cmludGYoCi0iU29ycnksIHlvdSBtdXN0IHNwZWNpZnkgYSBuYW1lIHdoZW4gcmVjZWl2aW5nIGEg ZmlsZSB3aXRoIFhNT0RFTSBwcm90b2NvbFxuIgotICAgICAgICAgICAgICAgICAgICk7Ci0gICAg ICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICBnb3RvIHhnZXR4OwotICAgICAgICB9Ci0gICAg fQotI2VuZGlmIC8qIENLX1hZWiAqLwotCi0jaWZkZWYgUkVDVVJTSVZFCi0gICAgaWYgKHB2W1NO RF9SRUNdLml2YWwgPiAwKSB7ICAgICAgICAgLyogUkVDVVJTSVZFICovCi0gICAgICAgIHJlY3Vy c2l2ZSA9IDE7Ci0gICAgICAgIHB2W1NORF9QVEhdLml2YWwgPSBQQVRIX1JFTDsgICAgLyogSW1w bGllcyByZWxhdGl2ZSBwYXRobmFtZXMgdG9vICovCi0gICAgfQotI2VuZGlmIC8qIFJFQ1VSU0lW RSAqLwotCi0gICAgaWYgKHB2W1NORF9QSVBdLml2YWwgPiAtMSkgewotICAgICAgICBnX3VzZXBp cGVzID0gdXNlcGlwZXM7Ci0gICAgICAgIHVzZXBpcGVzID0gcHZbU05EX1BJUF0uaXZhbDsKLSAg ICB9Ci0KLSAgICAvKiBTYXZlIGdsb2JhbCBwcm90b2NvbCBwYXJhbWV0ZXJzICovCi0KLSAgICBn X3Byb3RvID0gcHJvdG9jb2w7Ci0jaWZkZWYgQ0tfTEFCRUxFRAotICAgIGdfbGZfb3B0cyA9IGxm X29wdHM7ICAgICAgICAgICAgICAgIC8qIFNhdmUgbGFiZWxlZCB0cmFuc2ZlciBvcHRpb25zICov Ci0jZW5kaWYgLyogQ0tfTEFCRUxFRCAqLwotICAgIGdfdXJwc2l6ID0gdXJwc2l6OyAgICAgICAg ICAgICAgICAgIC8qIFJlY2VpdmUgcGFja2V0IGxlbmd0aCAqLwotICAgIGdfc3BzaXpmID0gc3Bz aXpmOyAgICAgICAgICAgICAgICAgIC8qIFNlbmQgcGFja2V0IGxlbmd0aCBmbGFnICovCi0gICAg Z19zcHNpeiA9IHNwc2l6OyAgICAgICAgICAgICAgICAgICAgLyogU2VuZCBwYWNrZXQgbGVuZ3Ro ICovCi0gICAgZ19zcHNpenIgPSBzcHNpenI7ICAgICAgICAgICAgICAgICAgLyogZXRjIGV0YyAq LwotICAgIGdfc3BtYXggPSBzcG1heDsKLSAgICBnX3dzbG90ciA9IHdzbG90cjsKLSAgICBnX3By ZWZpeGluZyA9IHByZWZpeGluZzsKLSAgICBnX2ZuY2FjdCA9IGZuY2FjdDsKLSAgICBnX2ZuY252 ID0gZm5jbnY7Ci0gICAgZ19mbnNwYXRoID0gZm5zcGF0aDsKLSAgICBnX2ZucnBhdGggPSBmbnJw YXRoOwotICAgIGdfeGZyeGxhID0geGZyeGxhOwotCi0gICAgaWYgKHB2W1NORF9QUk9dLml2YWwg PiAtMSkgeyAgICAgICAgLyogQ2hhbmdlIGFjY29yZGluZyB0byBzd2l0Y2ggKi8KLSAgICAgICAg cHJvdG9jb2wgPSBwdltTTkRfUFJPXS5pdmFsOwotICAgICAgICBpZiAocHRhYltwcm90b2NvbF0u cnBrdGxlbiA+IC0xKSAgIC8qIGNvcGllZCBmcm9tIGluaXRwcm90bygpICovCi0gICAgICAgICAg ICB1cnBzaXogPSBwdGFiW3Byb3RvY29sXS5ycGt0bGVuOwotICAgICAgICBpZiAocHRhYltwcm90 b2NvbF0uc3BrdGZsZyA+IC0xKQotICAgICAgICAgICAgc3BzaXpmID0gcHRhYltwcm90b2NvbF0u c3BrdGZsZzsKLSAgICAgICAgaWYgKHB0YWJbcHJvdG9jb2xdLnNwa3RsZW4gPiAtMSkgewotICAg ICAgICAgICAgc3BzaXogPSBwdGFiW3Byb3RvY29sXS5zcGt0bGVuOwotICAgICAgICAgICAgaWYg KHNwc2l6ZikKLSAgICAgICAgICAgICAgICBzcHNpenIgPSBzcG1heCA9IHNwc2l6OwotICAgICAg ICB9Ci0gICAgICAgIGlmIChwdGFiW3Byb3RvY29sXS53aW5zaXplID4gLTEpCi0gICAgICAgICAg ICB3c2xvdHIgPSBwdGFiW3Byb3RvY29sXS53aW5zaXplOwotICAgICAgICBpZiAocHRhYltwcm90 b2NvbF0ucHJlZml4ID4gLTEpCi0gICAgICAgICAgICBwcmVmaXhpbmcgPSBwdGFiW3Byb3RvY29s XS5wcmVmaXg7Ci0gICAgICAgIGlmIChwdGFiW3Byb3RvY29sXS5mbmNhID4gLTEpCi0gICAgICAg ICAgICBmbmNhY3QgID0gcHRhYltwcm90b2NvbF0uZm5jYTsKLSAgICAgICAgaWYgKHB0YWJbcHJv dG9jb2xdLmZuY24gPiAtMSkKLSAgICAgICAgICAgIGZuY252ICAgPSBwdGFiW3Byb3RvY29sXS5m bmNuOwotICAgICAgICBpZiAocHRhYltwcm90b2NvbF0uZm5zcCA+IC0xKQotICAgICAgICAgICAg Zm5zcGF0aCA9IHB0YWJbcHJvdG9jb2xdLmZuc3A7Ci0gICAgICAgIGlmIChwdGFiW3Byb3RvY29s XS5mbnJwID4gLTEpCi0gICAgICAgICAgICBmbnJwYXRoID0gcHRhYltwcm90b2NvbF0uZm5ycDsK LSAgICB9Ci0gICAgZGVidWcoRjEwMSwieGdldCBwcm90b2NvbCIsIiIscHJvdG9jb2wpOwotICAg IGRlYnVnKEYxMTEsInhnZXQgY21hcmcyIixjbWFyZzIseGZlcm1vZGUpOwotCi0gICAgZ194ZmVy bW9kZSA9IHhmZXJtb2RlOwotICAgIGdfYmluYXJ5ID0gYmluYXJ5OwotICAgIGlmIChwdltTTkRf QklOXS5pdmFsID4gMCkgeyAgICAgICAgIC8qIENoYW5nZSBhY2NvcmRpbmcgdG8gc3dpdGNoICov Ci0gICAgICAgIHhmZXJtb2RlID0gWE1PREVfTTsKLSAgICAgICAgYmluYXJ5ID0gWFlGVF9COyAg ICAgICAgICAgICAgICAvKiBGSUxFIFRZUEUgQklOQVJZICovCi0gICAgICAgIG9tb2RlID0gR01P RF9CSU47ICAgICAgICAgICAgICAgLyogTy1QYWNrZXQgbW9kZSAqLwotICAgICAgICBkZWJ1ZyhG MTAxLCJkb3hnZXQgL0JJTkFSWSB4ZmVybW9kZSIsIiIseGZlcm1vZGUpOwotICAgIH0gZWxzZSBp ZiAocHZbU05EX1RYVF0uaXZhbCA+IDApIHsgIC8qIERpdHRvIGZvciAvVEVYVCAqLwotICAgICAg ICB4ZmVybW9kZSA9IFhNT0RFX007Ci0gICAgICAgIGJpbmFyeSA9IFhZRlRfVDsKLSAgICAgICAg b21vZGUgPSBHTU9EX1RYVDsKLSAgICAgICAgZGVidWcoRjEwMSwiZG94Z2V0IC9URVhUIHhmZXJt b2RlIiwiIix4ZmVybW9kZSk7Ci0gICAgfSBlbHNlIGlmIChwdltTTkRfSU1HXS5pdmFsID4gMCkg ewotICAgICAgICB4ZmVybW9kZSA9IFhNT0RFX007Ci0jaWZkZWYgVk1TCi0gICAgICAgIGJpbmFy eSA9IFhZRlRfSTsKLSNlbHNlCi0gICAgICAgIGJpbmFyeSA9IFhZRlRfQjsKLSNlbmRpZiAvKiBW TVMgKi8KLSAgICAgICAgb21vZGUgPSBHTU9EX1RYVDsKLSAgICAgICAgZGVidWcoRjEwMSwiZG94 Z2V0IC9JTUFHRSB4ZmVybW9kZSIsIiIseGZlcm1vZGUpOwotICAgIH0KLSNpZmRlZiBDS19MQUJF TEVECi0gICAgZWxzZSBpZiAocHZbU05EX0xCTF0uaXZhbCA+IDApIHsKLSAgICAgICAgeGZlcm1v ZGUgPSBYTU9ERV9NOwotICAgICAgICBiaW5hcnkgPSBYWUZUX0w7Ci0gICAgICAgIG9tb2RlID0g R01PRF9MQkw7Ci0gICAgICAgIGRlYnVnKEYxMDEsImRveGdldCAvTEFCRUxFRCB4ZmVybW9kZSIs IiIseGZlcm1vZGUpOwotICAgIH0KLSNlbmRpZiAvKiBDS19MQUJFTEVEICovCi0gICAgZGVidWco RjEwMSwieGdldCBiaW5hcnkiLCIiLGJpbmFyeSk7Ci0gICAgZGVidWcoRjEwMSwieGdldCBvbW9k ZSIsIiIsb21vZGUpOwotCi0gICAgaWYgKHB2W1NORF9YUEFdLml2YWwgPiAwKSAgICAgICAgICAg LyogL1RSQU5TUEFSRU5UICovCi0gICAgICB4ZnJ4bGEgPSAwOyAgICAgICAgICAgICAgICAgICAg ICAgLyogRG9uJ3QgdHJhbnNsYXRlIGNoYXJhY3RlciBzZXRzICovCi0KLSNpZmRlZiBQSVBFU0VO RAotICAgIGlmIChwdltTTkRfRkxUXS5pdmFsID4gMCkKLSAgICAgIG1ha2VzdHIoJnJjdmZpbHRl cixwdltTTkRfRkxUXS5zdmFsKTsKLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotCi0jaWZkZWYgQ0tf VE1QRElSCi0gICAgaWYgKHB2W1NORF9NT1ZdLml2YWwgPiAwKSB7Ci0gICAgICAgIGludCBsZW47 Ci0gICAgICAgIGNoYXIgKiBwID0gcHZbU05EX01PVl0uc3ZhbDsKLSNpZmRlZiBDS19MT0dJTgot ICAgICAgICBpZiAoaXNndWVzdCkgewotICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksIC9NT1ZF LVRPIG5vdCBhdmFpbGFibGUgdG8gZ3Vlc3RzXG4iKTsKLSAgICAgICAgICAgIHggPSAtOTsKLSAg ICAgICAgICAgIGdvdG8geGdldHg7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS19MT0dJTiAqLwot ICAgICAgICBsZW4gPSBzdHJsZW4ocCk7Ci0gICAgICAgIGlmICghaXNkaXIocCkpIHsgICAgICAg ICAgICAgICAgLyogQ2hlY2sgZGlyZWN0b3J5ICovCi0jaWZkZWYgQ0tfTUtESVIKLSAgICAgICAg ICAgIGNoYXIgKiBzID0gTlVMTDsKLSAgICAgICAgICAgIHMgPSAoY2hhciAqKW1hbGxvYyhsZW4g KyA0KTsKLSAgICAgICAgICAgIGlmIChzKSB7Ci0gICAgICAgICAgICAgICAgc3RyY3B5KHMscCk7 ICAgICAgICAgICAgLyogc2FmZSAqLwotI2lmZGVmIGRhdGFnZW5lcmFsCi0gICAgICAgICAgICAg ICAgaWYgKHNbbGVuLTFdICE9ICc6JykgeyBzW2xlbisrXSA9ICc6Jzsgc1tsZW5dID0gTlVMOyB9 Ci0jZWxzZQotICAgICAgICAgICAgICAgIGlmIChzW2xlbi0xXSAhPSAnLycpIHsgc1tsZW4rK10g PSAnLyc7IHNbbGVuXSA9IE5VTDsgfQotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0gICAgICAg ICAgICAgICAgc1tsZW4rK10gPSAnWCc7Ci0gICAgICAgICAgICAgICAgc1tsZW5dID0gTlVMOwot ICAgICAgICAgICAgICAgIHggPSB6bWtkaXIocyk7Ci0gICAgICAgICAgICAgICAgZnJlZShzKTsK LSAgICAgICAgICAgICAgICBpZiAoeCA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRm KCI/Q2FuJ3QgY3JlYXRlIFwiJXNcIlxuIixwKTsKLSAgICAgICAgICAgICAgICAgICAgeCA9IC05 OwotICAgICAgICAgICAgICAgICAgICBnb3RvIHhnZXR4OwotICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICBwcmludGYoIj9EaXJlY3RvcnkgXCIlc1wi IG5vdCBmb3VuZFxuIixwKTsKLSAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgIGdvdG8g eGdldHg7Ci0jZW5kaWYgLyogQ0tfTUtESVIgKi8KLSAgICAgICAgfQotICAgICAgICB6Zm5xZnAo cCxMSU5CVUZTSVosbGluZSk7Ci0gICAgICAgIG1ha2VzdHIoJnJjdl9tb3ZlLGxpbmUpOwotICAg IH0KLSNlbmRpZiAvKiBDS19UTVBESVIgKi8KLQotICAgIGlmIChwdltTTkRfUkVOXS5pdmFsID4g MCkgeyAgICAgICAgIC8qIC9SRU5BTUUtVE86bmFtZSAqLwotICAgICAgICBjaGFyICogcCA9IHB2 W1NORF9SRU5dLnN2YWw7Ci0jaWZkZWYgQ0tfTE9HSU4KLSAgICAgICAgaWYgKGlzZ3Vlc3QpIHsK LSAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCAvUkVOQU1FLVRPIG5vdCBhdmFpbGFibGUgdG8g Z3Vlc3RzXG4iKTsKLSAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgIGdvdG8geGdldHg7 Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotICAgICAgICBpZiAoIXApIHAgPSAi IjsKLSAgICAgICAgaWYgKCEqcCkgewotICAgICAgICAgICAgcHJpbnRmKCI/TmV3IG5hbWUgcmVx dWlyZWQgZm9yIC9SRU5BTUVcbiIpOwotICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAg Z290byB4Z2V0eDsKLSAgICAgICAgfQotICAgICAgICBwID0gYnJzdHJpcChwKTsKLSAgICAgICAg bWFrZXN0cigmcmN2X3JlbmFtZSxwKTsKLSAgICAgICAgZGVidWcoRjExMCwieGdldCByY3ZfcmVu YW1lIiwiIiwwKTsKLSAgICB9Ci0KLSNpZmRlZiBDQUxJQlJBVEUKLSAgICBpZiAocHZbU05EX0NB TF0uaXZhbCA+IDApCi0gICAgICBjYWxpYnJhdGUgPSAoQ0tfT0ZGX1QpMTsKLSNlbmRpZiAvKiBD QUxJQlJBVEUgKi8KLSAgICBnX2Rpc3BsYSA9IGZkaXNwbGE7Ci0gICAgaWYgKHB2W1NORF9TSEhd Lml2YWwgPiAwKQotICAgICAgZmRpc3BsYSA9IDA7Ci0gICAgZGVidWcoRjEwMSwieGdldCBkaXNw bGF5IiwiIixmZGlzcGxhKTsKLQotICAgIGlmIChwdltTTkRfTkFNXS5pdmFsID4gLTEpIHsgICAg ICAgIC8qIC9GSUxFTkFNRVMgKi8KLSAgICAgICAgZ19mbmNudiA9IGZuY252OyAgICAgICAgICAg ICAgICAvKiBTYXZlIGdsb2JhbCB2YWx1ZSAqLwotICAgICAgICBmbmNudiA9IHB2W1NORF9OQU1d Lml2YWw7Ci0gICAgICAgIGRlYnVnKEYxMDEsInhzZW5kIGZuY252IiwiIixmbmNudik7Ci0gICAg ICAgIC8qIFdlIHNob3VsZCBhbHNvIGhhbmRsZSBPIHBhY2tldCBmaWxlbmFtZSBvcHRpb24gaGVy ZSAqLwotICAgICAgICAvKiBidXQgd2UgZG9uJ3QgcmVhbGx5IG5lZWQgdG8gc2luY2UgV0hBVEFN SSBhbHJlYWR5IGhhbmRsZXMgaXQgKi8KLSAgICB9Ci0gICAgaWYgKHB2W1NORF9QVEhdLml2YWwg PiAtMSkgeyAgICAgICAgLyogUEFUSE5BTUVTICovCi0gICAgICAgIGdfcnBhdGggPSBmbnJwYXRo OyAgICAgICAgICAgICAgLyogU2F2ZSBnbG9iYWwgdmFsdWVzICovCi0gICAgICAgIGZucnBhdGgg PSBwdltTTkRfUFRIXS5pdmFsOwotICAgICAgICBkZWJ1ZyhGMTAxLCJ4c2VuZCBmbnJwYXRoIiwi IixmbnJwYXRoKTsKLSNpZm5kZWYgTlpMVE9SCi0gICAgICAgIGlmIChmbnJwYXRoICE9IFBBVEhf T0ZGKSB7Ci0gICAgICAgICAgICBnX2ZuY252ID0gZm5jbnY7Ci0gICAgICAgICAgICBmbmNudiA9 IFhZRk5fTDsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsInhzZW5kIGZuY252IiwiIixmbmNudik7 Ci0gICAgICAgIH0KLSAgICAgICAgLyogV2Ugc2hvdWxkIGFsc28gaGFuZGxlIE8gcGFja2V0IHBh dGhuYW1lIG9wdGlvbiBoZXJlICovCi0gICAgICAgIC8qIGJ1dCB3ZSBkb24ndCByZWFsbHkgbmVl ZCB0byBzaW5jZSBXSEFUQU1JIGFscmVhZHkgaGFuZGxlcyBpdCAqLwotI2VuZGlmIC8qIE5aTFRP UiAqLwotICAgIH0KLQotICAgIC8qIFNldCBwcm90b2NvbCBzdGFydCBzdGF0ZSAqLwotCi0gICAg aWYgKG9wa3QpIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogRXh0ZW5kZWQgR0VUIE9wdGlv bnMqLwotICAgICAgICBzc3RhdGUgPSAoQ0hBUikgJ28nOwotICAgICAgICBvb3B0cyA9IDA7Ci0g ICAgICAgIGlmIChwdltTTkRfREVMXS5pdmFsID4gMCkgb29wdHMgfD0gR09QVF9ERUw7IC8qIEdF VCAvREVMRVRFICovCi0gICAgICAgIGlmIChwdltTTkRfUkVTXS5pdmFsID4gMCkgb29wdHMgfD0g R09QVF9SRVM7IC8qIEdFVCAvUkVDT1ZFUiAqLwotICAgICAgICBpZiAocHZbU05EX1JFQ10uaXZh bCA+IDApIG9vcHRzIHw9IEdPUFRfUkVDOyAvKiBHRVQgL1JFQ1VSU0lWRSAqLwotICAgIH0gZWxz ZSBpZiAocmN2Y21kKQotICAgICAgc3N0YXRlID0gKENIQVIpICd2JzsgICAgICAgICAgICAgIC8q IFJFQ0VJVkUgb3IgQ1JFQ0VJVkUgKi8KLSAgICBlbHNlIGlmIChwdltTTkRfREVMXS5pdmFsID4g MCkKLSAgICAgIHNzdGF0ZSA9IChDSEFSKSAnaCc7ICAgICAgICAgICAgICAvKiBHRVQgL0RFTEVU RSAoPSBSRVRSSUVWRSkgKi8KLSAgICBlbHNlIGlmIChwdltTTkRfUkVTXS5pdmFsID4gMCkKLSAg ICAgIHNzdGF0ZSA9IChDSEFSKSAnaic7ICAgICAgICAgICAgICAvKiBHRVQgL1JFQ09WRVIgKD0g UkVHRVQpICovCi0gICAgZWxzZQotICAgICAgc3N0YXRlID0gKENIQVIpICdyJzsgICAgICAgICAg ICAgIC8qIFJlZ3VsYXIgR0VUICovCi0gICAgZ2V0Y21kID0gMTsKLSAgICBkZWJ1ZyhGMDAwLCJ4 Z2V0IHNzdGF0ZSIsIiIsc3N0YXRlKTsKLSNpZmRlZiBNQUMKLSAgICB3aGF0ID0gV19SRUNWOwot ICAgIHNjcmNyZWF0ZSgpOwotI2VuZGlmIC8qIE1BQyAqLwotICAgIGlmIChsb2NhbCkgewotICAg ICAgICBpZiAocHZbU05EX1NISF0uaXZhbCAhPSAwKQotICAgICAgICAgIGRpc3BsYSA9IDE7Ci0J aWYgKHByb3RvY29sID09IFBST1RPX0spCS8qIGZkYyAyMDA3MDEwOCAqLwotCSAgdHRmbHVpKCk7 Ci0gICAgfQotICAgIHggPSAwOwotI2lmZGVmIFBJUEVTRU5ECi0gICAgaWYgKHBpcGVzZW5kKQot ICAgICAgZ290byB4Z2V0eDsKLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotCi0jaWZkZWYgQ0tfVE1Q RElSCi0vKgotICBjbWFyZzIgaXMgYWxzbyBhbGxvd2VkIHRvIGJlIGEgZGV2aWNlIG9yIGRpcmVj dG9yeSBuYW1lOwotICBldmVuIHRoZSBuYW1lIG9mIGEgZGlyZWN0b3J5IHRoYXQgZG9lc24ndCBl eGlzdC4KLSovCi0gICAgeSA9IHN0cmxlbihjbWFyZzIpOwotICAgIGRlYnVnKEYxMTEsInhnZXQg c3RybGVuKGNtYXJnMikiLGNtYXJnMix5KTsKLSAgICBpZiAoKHkgPiAwKSAmJgotI2lmZGVmIE9T MgotICAgICAgICAoKGlzYWxwaGEoY21hcmcyWzBdKSAmJgotICAgICAgICAgY21hcmcyWzFdID09 ICc6JyAmJgotICAgICAgICAgY21hcmcyWzJdID09IE5VTCkgfHwKLSAgICAgICAgKGNtYXJnW3kt MV0gPT0gJy8nIHx8IGNtYXJnW3ktMV0gPT0gJ1xcJykgfHwKLSAgICAgICAgaXNkaXIoY21hcmcy KSkKLSNlbHNlCi0jaWZkZWYgVU5JWE9ST1NLCi0gICAgICAgIChjbWFyZzJbeS0xXSA9PSAnLycg fHwgaXNkaXIoY21hcmcyKSkKLSNlbHNlCi0jaWZkZWYgVk1TCi0gICAgICAgIChjbWFyZzJbeS0x XSA9PSAnXScgfHwgY21hcmcyW3ktMV0gPT0gJz4nIHx8IGlzZGlyKGNtYXJnMikpCi0jZWxzZQot I2lmZGVmIFNUUkFUVVMKLSAgICAgICAgKGNtYXJnMlt5LTFdID09ICc+JyB8fCBpc2RpcihjbWFy ZzIpKQotI2Vsc2UKLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgICAgICAoY21hcmcyW3ktMV0gPT0g JzonIHx8IGNtYXJnWzBdID09ICc6JyB8fCBpc2RpcihjbWFyZzIpKQotI2Vsc2UKLSAgICAgICAg aXNkaXIoY21hcmcyKQotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyogU1RSQVRV UyAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIFVOSVhPUk9TSyAqLwotI2VuZGlmIC8q IE9TMiAqLwotICAgICAgICApIHsKLSAgICAgICAgZGVidWcoRjExMCwiZG94Z2V0IFJFQ0VJVkUg Y21hcmcyIGRpc2sgb3IgZGlyIixjbWFyZzIsMCk7Ci0gICAgICAgIGlmICghZl90bXBkaXIpIHsK LSAgICAgICAgICAgIGludCB4OwotICAgICAgICAgICAgcyA9IHpndGRpcigpOwotICAgICAgICAg ICAgaWYgKHMpIHsKLSAgICAgICAgICAgICAgICBja3N0cm5jcHkoc2F2ZGlyLHMsVE1QRElSTEVO KTsgLyogcmVtZW1iZXIgb2xkIGRpc2svZGlyICovCi0gICAgICAgICAgICAgICAgZl90bXBkaXIg PSAxOyAgIC8qIGFuZCB0aGF0IHdlIGRpZCB0aGlzICovCi0gICAgICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgICAgIHByaW50ZigiP0Nhbid0IGdldCBjdXJyZW50IGRpcmVjdG9yeVxuIik7 Ci0gICAgICAgICAgICAgICAgY21hcmcyID0gIiI7Ci0gICAgICAgICAgICAgICAgZl90bXBkaXIg PSAwOwotICAgICAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgICAgICBnb3RvIHhnZXR4 OwotICAgICAgICAgICAgfQotI2lmZGVmIENLX01LRElSCi0gICAgICAgICAgICB4ID0gemNoa2ko Y21hcmcyKTsgICAgICAgICAgLyogRG9lcyBhcy1uYW1lIGV4aXN0PyAqLwotICAgICAgICAgICAg aWYgKHggPT0gLTEpIHsgICAgICAgICAgICAgIC8qIERvZXNuJ3QgZXhpc3QgKi8KLSAgICAgICAg ICAgICAgICBjaGFyICogcCA9IE5VTEw7ICAgICAgICAvKiBUcnkgdG8gY3JlYXRlIGl0ICovCi0g ICAgICAgICAgICAgICAgeCA9IHN0cmxlbihjbWFyZzIpOwotICAgICAgICAgICAgICAgIGlmICgo cCA9IChjaGFyICopbWFsbG9jKHgrNCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwcmludGYo cCwiJXMlcyIsY21hcmcyLCJ4LngiKTsgLyogU0FGRSAocHJlY2hlY2tlZCkgKi8KLSAgICAgICAg ICAgICAgICAgICAgeCA9IHpta2RpcihwKTsKLSAgICAgICAgICAgICAgICAgICAgZnJlZShwKTsK LSAgICAgICAgICAgICAgICAgICAgaWYgKHggPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg ICBwcmludGYoIj9DYW4ndCBjcmVhdGUgJXNcbiIsY21hcmcyKTsKLSAgICAgICAgICAgICAgICAg ICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8geGdldHg7Ci0gICAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0jZW5k aWYgLyogQ0tfTUtESVIgKi8KLSAgICAgICAgICAgIGlmICghemNoZGlyKGNtYXJnMikpIHsgICAg ICAvKiBjaGFuZ2UgdG8gZ2l2ZW4gZGlzay9kaXJlY3RvcnksICovCi0gICAgICAgICAgICAgICAg cHJpbnRmKCI/Q2FuJ3QgYWNjZXNzICVzXG4iLGNtYXJnMik7Ci0gICAgICAgICAgICAgICAgeCA9 IC05OwotICAgICAgICAgICAgICAgIGdvdG8geGdldHg7Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICBjbWFyZzIgPSAiIjsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBDS19UTVBESVIg Ki8KLQotICAgIGNrc3RybmNweShmc3BlYyxjbWFyZyxDS01BWFBBVEgpOyAgIC8qIE5vdGUgLSB0 aGlzIGlzIGEgUkVNT1RFIGZpbGVzcGVjICovCi0gICAgZGVidWcoRjExMSwieGdldCBmc3BlYyIs ZnNwZWMsZnNwZWNsZW4pOwotICAgIGRlYnVnKEYxMTAsInhnZXQgY21hcmcyIixjbWFyZzIsMCk7 Ci0KLSAgeGdldHg6Ci0gICAgZm9yIChpID0gMDsgaSA8IFNORF9NQVg7IGkrKykKLSAgICAgIGlm IChwdltpXS5zdmFsKQotICAgICAgICBmcmVlKHB2W2ldLnN2YWwpOwotICAgIHJldHVybih4KTsK LX0KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBOT1NQTAotCi0vKgotICBEIE8gRyBU IEEgIC0tICBEbyBfR0VUQVJHUyBvciBfUFVUQVJHUyBDb21tYW5kLgotCi0gIFVzZWQgYnkgWElG LCBGT1IsIFdISUxFLCBhbmQgU1dJVENILCBlYWNoIG9mIHdoaWNoIGFyZSBpbXBsZW1lbnRlZCBh cwotICAyLWxldmVsIG1hY3JvczsgdGhlIGZpcnN0IGxldmVsIGRlZmluZXMgdGhlIG1hY3JvLCB0 aGUgc2Vjb25kIHJ1bnMgaXQuCi0gIFRoaXMgcm91dGluZSBoaWRlcyB0aGUgZmFjdCB0aGF0IHRo ZXkgYXJlIG1hY3JvcyBieSBpbXBvcnRpbmcgdGhlCi0gIG1hY3JvIGFyZ3VtZW50cyAoaWYgYW55 KSBmcm9tIHR3byBsZXZlbHMgdXAsIHRvIG1ha2UgdGhlbSBhdmFpbGFibGUKLSAgaW4gdGhlIElG LCBGT1IsIFNXSVRDSCwgYW5kIFdISUxFIGNvbW1hbmRzIHRoZW1zZWx2ZXM7IGZvciBleGFtcGxl IGFzCi0gIGxvb3AgaW5kaWNlcywgZXRjLCBhbmQgd2l0aGluIHRoZSBJRi9GT1IvV0hJTEUvU1dJ VENIIGJvZHkgaXRzZWxmLgotICBfUFVUQVJHUyBpcyBpbiBjYXNlIHdlIGNoYW5nZWQgYW55IG9m IHRoZXNlIHZhcmlhYmxlcyBvciB1c2VkIFNISUZUCi0gIG9uIHRoZW0sIHNvIHRoZSBuZXcgdmFs dWVzIHdvbid0IGJlIGxvc3QgYXMgd2UgcG9wIHVwIHRoZSBzdGFjay4KLSovCi1pbnQKLWRvZ3Rh KGN4KSBpbnQgY3g7IHsKLSAgICBpbnQgaSwgbjsKLSAgICBjaGFyIGMsICpwLCAgbWJ1Zls0XTsK LSAgICBleHRlcm4gaW50IHRvcGFyZ2MsIGNtZGludDsKLSAgICBleHRlcm4gY2hhciAqKiB0b3B4 YXJnOwotCi0gICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQotICAgICAgcmV0dXJuKHkpOwotICAg IGRlYnVnKEYxMDEsImRvZ3RhIGN4IiwiIixjeCk7Ci0gICAgZGVidWcoRjEwMSwiZG9ndGEgbWFj bHZsIiwiIixtYWNsdmwpOwotICAgIGlmIChjeCA9PSBYWEdUQSkgewotICAgICAgICBkZWJ1ZyhG MTAxLCJkb2d0YSBfR0VUQVJHUyBtYWNsdmwiLCIiLG1hY2x2bCk7Ci0gICAgfSBlbHNlIGlmIChj eCA9PSBYWFBUQSkgewotICAgICAgICBkZWJ1ZyhGMTAxLCJkb2d0YSBfUFVUQVJHUyBtYWNsdmwi LCIiLG1hY2x2bCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuKC0yKTsKLSAgICB9Ci0g ICAgaWYgKG1hY2x2bCA8IDEpCi0gICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotCi0gICAgLyog TWFrZSBuZXcgY29waWVzIG9mIG1hY3JvIGFyZ3VtZW50cyAvJTAuLjkgKi8KLQotICAgIG1idWZb MF0gPSAnJSc7IG1idWZbMV0gPSAnMCc7IG1idWZbMl0gPSBOVUw7IC8qIEFyZ3VtZW50IG5hbWUg YnVmICovCi0KLSAgICBpZiAoY3ggPT0gWFhQVEEpIHsgICAgICAgICAgICAgICAgICAvKiBHbyBO T0lOVCBiZWNhdXNlIF9QVVRBUkdTICovCi0gICAgICAgIGlmIChjbWRpbnQpICAgICAgICAgICAg ICAgICAgICAgLyogdGVtcG9yYXJpbHkgY2hhbmdlcyBtYWNsdmwuICovCi0gICAgICAgICAgY29u bm9pKCk7ICAgICAgICAgICAgICAgICAgICAgLyogSW50ZXJydXB0cyBPRkYuICovCi0gICAgfQot ICAgIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7ICAgICAgICAgIC8qIEZvciBhbGwgYXJncyAq LwotICAgICAgICBjID0gKGNoYXIpIChpICsgJzAnKTsgICAgICAgICAgIC8qIE1ha2UgbmFtZSAq LwotICAgICAgICBtYnVmWzFdID0gKGNoYXIpIGM7ICAgICAgICAgICAgIC8qIEluc2VydCBkaWdp dCAqLwotICAgICAgICBpZiAoY3ggPT0gWFhHVEEpIHsgICAgICAgICAgICAgIC8qIEdldCBhcmcg ZnJvbSBsZXZlbC1taW51cy0yICovCi0gICAgICAgICAgICBpZiAobWFjbHZsID09IDEpIHAgPSBn X3ZhcltjXTsgLyogSWYgYXQgbGV2ZWwgMSB1c2UgZ2xvYmFscyAwLi45ICovCi0gICAgICAgICAg ICBlbHNlIHAgPSBtX2FyZ1ttYWNsdmwtMl1baV07ICAgLyogT3RoZXJ3aXNlIHRoZXkncmUgb24g dGhlIHN0YWNrICovCi0gICAgICAgICAgICBhZGRtYWMobWJ1ZixwKTsKLSNpZmRlZiBDT01NRU5U Ci0gICAgICAgICAgICBpZiAobWFjbHZsID4gMSkKLSAgICAgICAgICAgICAgbWFrZXN0cigmKG1f bGluZVttYWNsdmxdKSxtX2xpbmVbbWFjbHZsLTJdKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0g ICAgICAgIH0gZWxzZSBpZiAoY3ggPT0gWFhQVEEpIHsgICAgICAgLyogUHV0IGFyZ3MgbGV2ZWwr MiAqLwotICAgICAgICAgICAgbWFjbHZsIC09IDI7ICAgICAgICAgICAgICAgIC8qIFRoaXMgaXMg Z3Jvc3MsIGl0J3MgYmVjYXVzZSB3ZSdyZSAqLwotICAgICAgICAgICAgYWRkbWFjKG1idWYsbV9h cmdbbWFjbHZsKzJdW2ldKTsgLyogYWRkaW5nIG1hY3JvcyB0d28gbGV2ZWxzIHVwICovCi0gICAg ICAgICAgICBtYWNsdmwgKz0gMjsgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgYWRkbWFjKCkg dXNlcyBtYWNsdmwuICovCi0gICAgICAgICAgICBjb3VudFtjbWRsdmwgLSAyXSAgPSBjb3VudFtj bWRsdmxdOwotICAgICAgICAgICAgaW50aW1lW2NtZGx2bCAtIDJdID0gaW50aW1lW2NtZGx2bF07 Ci0gICAgICAgICAgICBpbnBjYXNbY21kbHZsIC0gMl0gPSBpbnBjYXNbY21kbHZsXTsKLSAgICAg ICAgICAgIHRha2VycltjbWRsdmwgLSAyXSA9IHRha2VycltjbWRsdmxdOwotICAgICAgICAgICAg bWVycm9yW2NtZGx2bCAtIDJdID0gbWVycm9yW2NtZGx2bF07Ci0gICAgICAgICAgICB4cXVpZXRb Y21kbHZsIC0gMl0gPSB4cXVpZXRbY21kbHZsXTsKLSAgICAgICAgICAgIHh2YXJldltjbWRsdmwg LSAyXSA9IHh2YXJldltjbWRsdmxdOwotICAgICAgICB9IGVsc2UgcmV0dXJuKHN1Y2Nlc3MgPSAw KTsgICAgIC8qIEJhZCBjYWxsIHRvIHRoaXMgcm91dGluZSAqLwotICAgIH0KLSAgICBpZiAoY3gg PT0gWFhQVEEpIHsgICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIGludGVycnVwdHMgaWYgd2Ug Ki8KLSAgICAgICAgaWYgKGNtZGludCkgICAgICAgICAgICAgICAgICAgICAvKiB0dXJuZWQgdGhl bSBvZmYgYWJvdmUuICovCi0gICAgICAgICAgY29uaW50KHRyYXAsc3RwdHJhcCk7Ci0gICAgfQot ICAgIC8qIE5vdyB0YWtlIGNhcmUgb2YgdGhlIGFyZ3VtZW50IHZlY3RvciBhcnJheSBcJl9bXSwg XHYocmV0dXJuKSwgKi8KLSAgICAvKiBhbmQgXHYoYXJnYykgYnkganVzdCBjb3B5aW5nIHRoZSBw b2ludGVycy4gKi8KLQotICAgIGlmIChjeCA9PSBYWEdUQSkgeyAgICAgICAgICAgICAgICAgIC8q IEdFVEFSR1MgZnJvbSAyIGxldmVscyB1cCAqLwotICAgICAgICBpZiAobWFjbHZsID09IDEpIHsK LSAgICAgICAgICAgIGFfcHRyWzBdID0gdG9weGFyZzsgICAgICAgICAvKiBcJl9bXSBhcnJheSAq LwotICAgICAgICAgICAgYV9kaW1bMF0gPSB0b3BhcmdjIC0gMTsgICAgIC8qIERpbWVuc2lvbiBk b2Vzbid0IGluY2x1ZGUgWzBdICovCi0gICAgICAgICAgICBtX3hhcmdbbWFjbHZsXSA9IHRvcHhh cmc7Ci0gICAgICAgICAgICBuX3hhcmdbbWFjbHZsXSA9IHRvcGFyZ2M7ICAgLyogQnV0IFx2KGFy Z2MpIGRvZXMgaW5jbHVkZSBcJTAgKi8KLSAgICAgICAgICAgIG1hY2FyZ2NbbWFjbHZsXSA9IHRv cGFyZ2M7Ci0gICAgICAgICAgICBtYWtlc3RyKCYobXJ2YWxbbWFjbHZsKzFdKSxtcnZhbFswXSk7 IC8qIChzZWUgdm5sb29rKCkpICovCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhX3B0 clswXSA9IG1feGFyZ1ttYWNsdmwtMl07Ci0gICAgICAgICAgICBhX2RpbVswXSA9IG5feGFyZ1tt YWNsdmwtMl07Ci0gICAgICAgICAgICBtX3hhcmdbbWFjbHZsXSA9IG1feGFyZ1ttYWNsdmwtMl07 Ci0gICAgICAgICAgICBuX3hhcmdbbWFjbHZsXSA9IG5feGFyZ1ttYWNsdmwtMl07Ci0gICAgICAg ICAgICBtYWNhcmdjW21hY2x2bF0gPSBuX3hhcmdbbWFjbHZsLTJdOwotICAgICAgICAgICAgbWFr ZXN0cigmKG1ydmFsW21hY2x2bCsxXSksbXJ2YWxbbWFjbHZsLTFdKTsgLyogKHNlZSB2bmxvb2so KSkgKi8KLQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogUFVUQVJHUyAyIGxldmVscyB1cCAqLwotICAgICAgICBpZiAobWFjbHZsID4gMSkgewot ICAgICAgICAgICAgYV9wdHJbMF0gPSBtX3hhcmdbbWFjbHZsXTsKLSAgICAgICAgICAgIG1feGFy Z1ttYWNsdmwtMl0gPSBtX3hhcmdbbWFjbHZsXTsKLSAgICAgICAgICAgIGFfZGltWzBdID0gbl94 YXJnW21hY2x2bF07Ci0gICAgICAgICAgICBuX3hhcmdbbWFjbHZsLTJdID0gbl94YXJnW21hY2x2 bF07Ci0gICAgICAgICAgICBtYWNhcmdjW21hY2x2bC0yXSA9IG5feGFyZ1ttYWNsdmxdOwotICAg ICAgICB9Ci0gICAgfQotICAgIHJldHVybigxKTsgICAgICAgICAgICAgICAgICAvKiBJbnRlcm5h bCBjb21tYW5kIC0gZG9uJ3QgY2hhbmdlIHN1Y2Nlc3MgKi8KLX0KLSNlbmRpZiAvKiBOT1NQTCAq LwotCi0jaWZuZGVmIE5PU1BMCi0vKgotICBEbyB0aGUgR09UTyBhbmQgW19dRk9SV0FSRCBjb21t YW5kcy4KLSAgcyA9IExhYmVsIHRvIHNlYXJjaCBmb3IsIGN4ID0gZnVuY3Rpb24gY29kZTogWFhH T1RPLCBYWEZXRCwgb3IgWFhYRldELgotKi8KLQotaW50Ci1kb2dvdG8ocywgY3gpIGNoYXIgKnM7 IGludCBjeDsgewotICAgIGludCBpLCBqLCB4LCB5LCB6LCBiYzsKLSAgICBpbnQgZW1wdHkgPSAw LCBzdG9wZmxnID0gMDsKLSAgICBjaGFyICogY21kOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBOYW1lIG9mIHRoaXMgY29tbWFuZCAqLwotICAgIGNoYXIgdG1wbGJsW0xCTFNJWisxXSwgKmxw OwkgICAgICAgIC8qIEN1cnJlbnQgbGFiZWwgZnJvbSBjb21tYW5kIHN0cmVhbSAqLwotICAgIGNo YXIgdG1wMltMQkxTSVorMV07CQkvKiBTV0lUQ0ggbGFiZWwgY29udmVyc2lvbiBidWZmZXIgKi8K LSAgICBjaGFyIHRtcDNbTEJMU0laKzFdOwkJLyogVGFyZ2V0IGxhYmVsICovCi0KLSAgICBzdG9w ZmxnID0gKGN4ID09IFhYWEZXRCk7ICAgICAgICAgICAvKiBfRk9SV0FSRCAodXNlZCBpbiBTV0lU Q0gpICovCi0gICAgYmMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQnJhY2Ug Y291bnRlciAqLwotCi0gICAgY21kID0gKGN4ID09IFhYR09UTykgPyAiR09UTyIgOiAoKGN4ID09 IFhYRldEKSA/ICJGT1JXQVJEIiA6ICJfRk9SV0FSRCIpOwotICAgIGlmICghcykgcyA9ICIiOwot ICAgIGlmICghKnMpIGVtcHR5ID0gMTsKLQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykg ewotICAgICAgICBkZWJ1ZyhGMTExLCJHT1RPIGNvbW1hbmQiLGNtZCxjeCk7Ci0gICAgICAgIGRl YnVnKEYxMDEsIkdPVE8gY21kbHZsIiwiIixjbWRsdmwpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJH T1RPIG1hY2x2bCIsIiIsbWFjbHZsKTsKLSAgICAgICAgZGVidWcoRjEwMSwiR09UTyB0bGV2ZWwi LCIiLHRsZXZlbCk7Ci0gICAgICAgIGRlYnVnKEYxMTEsIkdPVE8gdGFyZ2V0IixzLGVtcHR5KTsK LSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICBkZWJ1ZyhGMTEwLGNtZCxzLDApOwotICAg IHggPSBja3N0cm5jcHkodG1wMysxLHMsTEJMU0laKTsKLSAgICBkZWJ1ZyhGMTAxLCJHT1RPIHRh cmdldCBsZW4iLCIiLHgpOwotICAgIGRlYnVnKEYxMDEsIkdPVE8gdGFyZ2V0IGF0IHgiLCIiLHNb eF0pOwotICAgIGlmIChzW3hdKSB7Ci0JZGVidWcoRjEwMCwiR09UTyB0YXJnZXQgb3ZlcmZsb3ci LCIiLDApOwotCXByaW50ZigiP0dPVE8gdGFyZ2V0IG9yIFNXSVRDSCBjYXNlIGxhYmVsIHRvbyBs b25nXG4iKTsKLQlpZiAoc3RvcGZsZykgZG9zdG9wKCk7CQkvKiBJZiBpbiBTV0lUQ0ggcmV0dXJu IHRvIHByb21wdCAqLwotCXJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgfQotICAgIHMgPSB0bXAz KzE7Ci0gICAgaWYgKCpzICE9ICc6JykgeyAgICAgICAgICAgICAgICAgICAgLyogTWFrZSBjb3B5 IG9mIGxhYmVsICovCi0gICAgICAgIHRtcDNbMF0gPSAnOic7ICAgICAgICAgICAgICAgICAgLyog Z3VhcmFudGVlZCB0byBzdGFydCB3aXRoICI6IiAqLwotICAgICAgICBzLS07Ci0gICAgfQotICAg IGlmICghc3RvcGZsZyAmJiAhZW1wdHkpIHsKLSAgICAgICAgaWYgKHNbMV0gPT0gJy4nIHx8IHNb MV0gPT0gU1AgfHwgc1sxXSA9PSBOVUwpIHsKLSAgICAgICAgICAgIHByaW50ZigiP0JhZCBsYWJl bCBzeW50YXggLSAnJXMnXG4iLHMpOwotCSAgICBpZiAoc3RvcGZsZykgZG9zdG9wKCk7CS8qIElm IGluIFNXSVRDSCByZXR1cm4gdG8gcHJvbXB0ICovCi0gICAgICAgICAgICByZXR1cm4oc3VjY2Vz cyA9IDApOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChjbWRsdmwgPT0gMCkgewotICAgICAg ICBwcmludGYoIj9Tb3JyeSwgJXMgb25seSB3b3JrcyBpbiBhIGNvbW1hbmQgZmlsZSBvciBtYWNy b1xuIixjbWQpOwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgIH0KLSAgICB5ID0g c3RybGVuKHMpOyAgICAgICAgICAgICAgICAgICAgICAvKiB5ID0gbGVuZ3RoIG9mIHRhcmdldCBs YWJlbCAqLwotICAgIGRlYnVnKEYxMTEsY21kLHMseSk7Ci0KLSAgICB3aGlsZSAoY21kbHZsID4g MCkgeyAgICAgICAgICAgICAgICAvKiBBcyBsb25nIGFzIG5vdCBhdCB0b3AgbGV2ZWwuLi4gKi8K LSAgICAgICAgaWYgKGNtZHN0a1tjbWRsdmxdLnNyYyA9PSBDTURfTUQpIHsgLyogR09UTyBpbnNp ZGUgbWFjcm8gKi8KLSAgICAgICAgICAgIGludCBpLCBtLCBmbGFnOwotICAgICAgICAgICAgY2hh ciAqeHAsICp0cDsKLQotICAgICAgICAgICAgLyogR09UTzogcmV3aW5kIHRoZSBtYWNybzsgRk9S V0FSRDogc3RhcnQgYXQgY3VycmVudCBwb3NpdGlvbiAqLwotCi0gICAgICAgICAgICBscCA9IChj eCA9PSBYWEdPVE8pID8gbWFjeFttYWNsdmxdIDogbWFjcFttYWNsdmxdOwotICAgICAgICAgICAg bSA9IChpbnQpc3RybGVuKGxwKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsIkdPVE8gaW4gbWFj cm8iLGxwLG0pOwotCi0gICAgICAgICAgICBmbGFnID0gMTsgICAgICAgICAgICAgICAgICAgLyog ZmxhZyBmb3IgdmFsaWQgbGFiZWwgcG9zaXRpb24gKi8KLSAgICAgICAgICAgIGZvciAoaSA9IDA7 IGkgPCBtOyBpKyssbHArKykgeyAvKiBzZWFyY2ggZm9yIGxhYmVsIGluIG1hY3JvIGJvZHkgKi8K LSAgICAgICAgICAgICAgICBpZiAoKmxwID09ICd7JykgICAgICAgICAvKiBCdXQgb25seSBhdCB0 aGlzIGxldmVsICovCi0gICAgICAgICAgICAgICAgICBiYysrOyAgICAgICAgICAgICAgICAgLyog QW55dGhpbmcgaW5zaWRlIGJyYWNlcyBpcyBvZmYgKi8KLSAgICAgICAgICAgICAgICBlbHNlIGlm ICgqbHAgPT0gJ30nKSAgICAvKiBsaW1pdHMuICovCi0gICAgICAgICAgICAgICAgICBiYy0tOwot ICAgICAgICAgICAgICAgIGlmIChzdG9wZmxnICYmIGJjID4gMCkgIC8qIFRoaXMgaXMgZ29vZCBm b3IgU1dJVENIICovCi0gICAgICAgICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgLyog YnV0IGludGVyZmVyZXMgd2l0aCBXSElMRSwgZXRjLiAqLwotICAgICAgICAgICAgICAgIGlmICgq bHAgPT0gJywnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZsYWcgPSAxOwotICAgICAgICAgICAg ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYg KGZsYWcpIHsgICAgICAgICAgICAgLyogSWYgaW4gdmFsaWQgbGFiZWwgcG9zaXRpb24gKi8KLSAg ICAgICAgICAgICAgICAgICAgaWYgKCpscCA9PSBTUCkgICAgICAvKiBlYXQgbGVhZGluZyBzcGFj ZXMgKi8KLSAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAg ICAgaWYgKCpscCAhPSAnOicpIHsgICAvKiBMb29rIGZvciBsYWJlbCBpbnRyb2R1Y2VyICovCi0g ICAgICAgICAgICAgICAgICAgICAgICBmbGFnID0gMDsgICAgICAgLyogdGhpcyBpc24ndCBpdCAq LwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7ICAgICAgIC8qIGtlZXAgbG9va2lu ZyAqLwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgIGlmICghZmxhZykgICAgICAgICAgICAgIC8qIFdlIGRvbid0IGhhdmUgYSBsYWJlbCAq LwotICAgICAgICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgIC8qICBzbyBrZWVwIGxv b2tpbmcuLi4gKi8KLSAgICAgICAgICAgICAgICB4cCA9IGxwOyB0cCA9IHRtcGxibDsgICAvKiBD b3B5IHRoZSBsYWJlbCBmcm9tIHRoZSBtYWNybyAqLwotICAgICAgICAgICAgICAgIGogPSAwOyAg ICAgICAgICAgICAgICAgIC8qIHRvIG1ha2UgaXQgbnVsbC10ZXJtaW5hdGVkICovCi0gICAgICAg ICAgICAgICAgd2hpbGUgKCgqdHAgPSAqeHApKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChq KysgPiBMQkxTSVotMSkgeyAvKiBqID0gbGVuZ3RoIG9mIHdvcmQgZnJvbSBtYWNybyAqLwotCQkJ cHJpbnRmKCI/R09UTyB0YXJnZXQgb3IgU1dJVENIIGNhc2UgbGFiZWwgdG9vIGxvbmdcbiIpOwot CQkJaWYgKHN0b3BmbGcpIGRvc3RvcCgpOyAvKiBSZXR1cm4gdG8gcHJvbXB0ICovCi0JCQlyZXR1 cm4oc3VjY2VzcyA9IDApOwotCQkgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoISp0cCB8 fCAqdHAgPT0gJywnKSAvKiBMb29rIGZvciBlbmQgb2Ygd29yZCAqLwotICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBlbHNlIHRwKyssIHhwKys7ICAgIC8q IE5leHQgY2hhcmFjdGVyICovCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICp0 cCA9IE5VTDsgICAgICAgICAgICAgIC8qIEluIGNhc2Ugd2Ugc3RvcHBlZCBlYXJseSAqLwotICAg ICAgICAgICAgICAgIC8qIE5vdyBkbyBjYXNlbGVzcyBzdHJpbmcgY29tcGFyaXNvbiwgdXNpbmcg bG9uZ2VzdCBsZW5ndGggKi8KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJtYWNybyBHT1RP IGxhYmVsIixzLHkpOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsIm1hY3JvIHRhcmdldCBs YWJlbCIsdG1wbGJsLGopOwotICAgICAgICAgICAgICAgIGlmIChzdG9wZmxnKSB7ICAgICAgICAg IC8qIEFsbG93IHZhcmlhYmxlcyBhcyBTV0lUQ0ggbGFiZWxzICovCi0gICAgICAgICAgICAgICAg ICAgIGludCBuID0gTEJMU0laIC0gMTsKLSAgICAgICAgICAgICAgICAgICAgY2hhciAqIHAgPSB0 bXAyOwotICAgICAgICAgICAgICAgICAgICB6enN0cmluZyh0bXBsYmwsJnAsJm4pOwotCQkgICAg aWYgKG4gPCAwKSB7Ci0JCQlwcmludGYoIj9HT1RPIHRhcmdldCBvciBTV0lUQ0ggY2FzZSBsYWJl bCB0b28gbG9uZ1xuIik7Ci0JCQlpZiAoc3RvcGZsZykgZG9zdG9wKCk7IC8qIFJldHVybiB0byBw cm9tcHQgKi8KLQkJCXJldHVybigwKTsKLQkJICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY2tz dHJuY3B5KHRtcGxibCx0bXAyLExCTFNJWik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgIGRlYnVnKEYxMTEsIkdPVE8gcyIscyx5KTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhG MTExLCJHT1RPIHRtcGxibCIsdG1wbGJsLGopOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEs IkdPVE8gZW1wdHkiLGNraXRvYShzdG9wZmxnKSxlbXB0eSk7Ci0KLSAgICAgICAgICAgICAgICBp ZiAoZW1wdHkpIHsJCSAgIC8qIEVtcHR5IHRhcmdldCAqLwotCQkgICAgeiA9ICghc3RyY21wKHMs IjoiKSAmJiAvKiBTdHJpbmcgaXMgZW1wdHkgKi8KLQkJCSAvKiBhbmQgTGFiZWwgaXMgIjoiIG9y ICI6KiIuLi4gKi8KLQkJCSAoIXN0cmNtcCh0bXBsYmwsIjoiKSB8fCAhc3RyY21wKHRtcGxibCwi OioiKSkpCi0JCQk/IDAgOiAxOwotCQkgICAgZGVidWcoRjExMSwiR09UTyIsIkEiLHopOwotICAg ICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RvcGZsZykgewotICAgICAgICAgICAgICAgICAgICB6 ID0gY2ttYXRjaCh0bXBsYmwscyxpbnBjYXNbY21kbHZsXSwxKSA/IDAgOiAxOwotCQkgICAgZGVi dWcoRjExMSwiR09UTyIsIkIiLHopOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg ICAgICAgICAgICAgIHogPSAoc3RvcGZsZyAmJiBpbnBjYXNbY21kbHZsXSkgPwotICAgICAgICAg ICAgICAgICAgICAgIHN0cmNtcChzLHRtcGxibCkgOgotICAgICAgICAgICAgICAgICAgICAgICAg Y2tzdHJjbXAocyx0bXBsYmwsKHkgPiBqKSA/IHkgOiBqLCAwKTsKLQkJICAgIGRlYnVnKEYxMTEs IkdPVE8iLCJDIix6KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCF6 KSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0gZWxzZSBp ZiAoc3RvcGZsZyAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICFja3N0cmNtcCgiOmRlZmF1 bHQiLHRtcGxibCwoOCA+IGopID8gOCA6IGosIDApKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRl YnVnKEYxMDAsIkdPVE8gREVGQVVMVCIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZsYWcgPSAw OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlYnVnKEYx MTEsIkdPVE8gbWFjcm8gaSIsY21kLGkpOwotICAgICAgICAgICAgZGVidWcoRjExMSwiR09UTyBt YWNybyBtIixjbWQsbSk7Ci0gICAgICAgICAgICBpZiAoaSA+PSBtKSB7ICAgICAgICAgICAgICAg LyogRGlkbid0IGZpbmQgdGhlIGxhYmVsICovCi0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwi R09UTyBmYWlsZWQgY21kbHZsIiwiIixjbWRsdmwpOwotI2lmZGVmIENPTU1FTlQKLQkJLyogTU9W RUQgVE8gQUZURVIgUE9QQ0xWTCBBQk9VVCAyMCBMSU5FUyBET1dOIDUgQVVHIDIwMDIgKi8KLQkJ ICAgaWYgKHN0b3BmbGcpCi0gICAgICAgICAgICAgICAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyog Q09NTUVOVCAqLwotICAgICAgICAgICAgICAgIGlmICgobWFjbHZsID4gMCkgJiYKLSAgICAgICAg ICAgICAgICAgICAgICAgKG1fYXJnW21hY2x2bC0xXVswXSkgJiYKLSAgICAgICAgICAgICAgICAg ICAgICAgKGNtZHN0a1tjbWRsdmxdLnNyYyA9PSBDTURfTUQpICYmCi0gICAgICAgICAgICAgICAg ICAgICAgICghc3RybmNtcChtX2FyZ1ttYWNsdmwtMV1bMF0sIl94aWYiLDQpIHx8Ci0gICAgICAg ICAgICAgICAgICAgICAgICAhc3RybmNtcChtX2FyZ1ttYWNsdmwtMV1bMF0sIl9mb3IiLDQpIHx8 Ci0gICAgICAgICAgICAgICAgICAgICAgICAhc3RybmNtcChtX2FyZ1ttYWNsdmwtMV1bMF0sIl9z d2kiLDQpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAhc3RybmNtcChtX2FyZ1ttYWNsdmwt MV1bMF0sIl93aGkiLDQpKSkgewotICAgICAgICAgICAgICAgICAgICBkb2d0YShYWFBUQSk7ICAg ICAgIC8qIFJlc3RvcmUgYXJncyAqLwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJH T1RPIGluIFhJRi9GT1IvV0hJL1NXSSBwb3BwaW5nIiwiIixjbWRsdmwpOwotICAgICAgICAgICAg ICAgICAgICBwb3BjbHZsKCk7ICAgICAgICAgIC8qIFBvcCBhbiBleHRyYSBsZXZlbCAqLwotICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJHT1RPIHBvcHBpbmci LCIiLGNtZGx2bCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwb3BjbHZsKCkpIHsgICAgICAgLyog cG9wIHVwIHRvIG5leHQgaGlnaGVyIGxldmVsICovCi0gICAgICAgICAgICAgICAgICAgIHByaW50 ZigiP0xhYmVsICclcycgbm90IGZvdW5kXG4iLHMpOyAvKiBpZiBub25lICovCi0gICAgICAgICAg ICAgICAgICAgIHJldHVybigwKTsgICAgICAgICAgLyogUXVpdCAqLwotICAgICAgICAgICAgICAg IH0gZWxzZSBpZiAoc3RvcGZsZykgewkvKiBTV0lUQ0ggbm8gY2FzZSBsYWJlbCBtYXRjaCAqLwot CQkgICAgcmV0dXJuKDApOwkJLyogYW5kIG5vIERFRkFVTFQgbGFibGUuICovCi0JCX0gZWxzZSB7 Ci0JCSAgICBjb250aW51ZTsgICAgICAgIC8qIG90aGVyd2lzZSBsb29rIGFnYWluICovCi0JCX0K LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlYnVnKEYxMTAsIkdPVE8gZm91bmQgbWFjcm8g bGFiZWwiLHRtcGxibCwwKTsKLSAgICAgICAgICAgIG1hY3BbbWFjbHZsXSA9IGxwOyAgICAgICAg ICAvKiBzZXQgbWFjcm8gYnVmZmVyIHBvaW50ZXIgKi8KLSAgICAgICAgICAgIHJldHVybigxKTsK LSAgICAgICAgfSBlbHNlIGlmIChjbWRzdGtbY21kbHZsXS5zcmMgPT0gQ01EX1RGKSB7Ci0gICAg ICAgICAgICB4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogR09UTyBpc3N1ZWQgaW4gdGFr ZSBmaWxlICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJHT1RPIGluIFRBS0UgZmlsZSIsY21k LGN4KTsKLSAgICAgICAgICAgIGlmIChjeCA9PSBYWEdPVE8pIHsgICAgICAgICAvKiBJZiBHT1RP LCBidXQgbm90IEZPUldBUkQsICovCi0gICAgICAgICAgICAgICAgcmV3aW5kKHRmaWxlW3RsZXZl bF0pOyAgLyogc2VhcmNoIGZpbGUgZnJvbSBiZWdpbm5pbmcgKi8KLSAgICAgICAgICAgICAgICB0 ZmxpbmVbdGxldmVsXSA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB3aGlsZSAoISBm ZW9mKHRmaWxlW3RsZXZlbF0pKSB7Ci0jaWZkZWYgQ09NTUVOVAotLyogVGhpcyBpcyB3cm9uZyAt IGl0IGxldHMgdXMganVtcCB0byBsYWJlbHMgaW5zaWRlIGluZmVyaW9yIGJsb2NrcyAqLwotICAg ICAgICAgICAgICAgIHRmbGluZVt0bGV2ZWxdKys7Ci0gICAgICAgICAgICAgICAgaWYgKGZnZXRz KGxpbmUsTElOQlVGU0laLHRmaWxlW3RsZXZlbF0pID09IE5VTEwpIC8qIEdldCBsaW5lICovCi0j ZWxzZQotICAgICAgICAgICAgICAgIGlmIChnZXRuY3QobGluZSxMSU5CVUZTSVosdGZpbGVbdGxl dmVsXSwwKSA8IDApCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgICAgICAgYnJl YWs7ICAgICAgICAgICAgICAgIC8qIElmIG5vIG1vcmUsIGRvbmUsIGxhYmVsIG5vdCBmb3VuZCAq LwotICAgICAgICAgICAgICAgIGxwID0gbGluZTsgICAgICAgICAgICAgIC8qIEdvdCBsaW5lICov Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCpscCA9PSBTUCB8fCAqbHAgPT0gSFQpCi0gICAgICAg ICAgICAgICAgICBscCsrOyAgICAgICAgICAgICAgICAgLyogU3RyaXAgbGVhZGluZyB3aGl0ZXNw YWNlICovCi0gICAgICAgICAgICAgICAgaWYgKCpscCAhPSAnOicpIGNvbnRpbnVlOyAvKiBDaGVj ayBmb3IgbGFiZWwgaW50cm9kdWNlciAqLwotICAgICAgICAgICAgICAgIHdoaWxlICgqKGxwKzEp ID09IFNQKSB7IC8qIFJlbW92ZSBzcGFjZSBiZXR3ZWVuIDogYW5kIG5hbWUgKi8KLSAgICAgICAg ICAgICAgICAgICAgKihscCsxKSA9ICc6JzsKLSAgICAgICAgICAgICAgICAgICAgbHArKzsgICAg ICAgICAgICAgICAvKiBTdHJpcCBsZWFkaW5nIHdoaXRlc3BhY2UgKi8KLSAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgdHAgPSBscDsgICAgICAgICAgICAgICAgLyogR2V0IGVuZCBv ZiB3b3JkICovCi0gICAgICAgICAgICAgICAgaiA9IDA7Ci0gICAgICAgICAgICAgICAgd2hpbGUg KCp0cCkgeyAgICAgICAgICAgLyogQW5kIG51bGwtdGVybWluYXRlIGl0ICovCi0gICAgICAgICAg ICAgICAgICAgIGlmICgqdHAgPCAzMykgewotICAgICAgICAgICAgICAgICAgICAgICAgKnRwID0g TlVMOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg IH0gZWxzZSB0cCsrLCBqKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlm ICghY2tzdHJjbXAobHAscywoeSA+IGopID8geSA6IGosMCkpIHsgLyogQ2FzZWxlc3MgY29tcGFy ZSAqLwotICAgICAgICAgICAgICAgICAgICB4ID0gMTsgICAgICAgICAgICAgIC8qIEdvdCBpdCAq LwotICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgIC8qIGRvbmUuICovCi0g ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdG9wZmxnICYmCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAhY2tzdHJjbXAoIjpkZWZhdWx0Iix0bXBsYmwsKDggPiBqKSA/IDggOiBqLDApKSB7 Ci0gICAgICAgICAgICAgICAgICAgIHggPSAxOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoeCA9PSAw KSB7ICAgICAgICAgICAgICAgLyogSWYgbm90IGZvdW5kLCBwcmludCBtZXNzYWdlICovCi0gICAg ICAgICAgICAgICAgZGVidWcoRjEwMSwiR09UTyBmYWlsZWQgYXQgY21kbHZsIiwiIixjbWRsdmwp OwotICAgICAgICAgICAgICAgIGlmIChzdG9wZmxnKQotICAgICAgICAgICAgICAgICAgcmV0dXJu KDApOwotICAgICAgICAgICAgICAgIGlmICghcG9wY2x2bCgpKSB7ICAgICAgIC8qIHBvcCB1cCB0 byBuZXh0IGhpZ2hlciBsZXZlbCAqLwotICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9MYWJl bCAnJXMnIG5vdCBmb3VuZFxuIixzKTsgLyogaWYgbm9uZSAqLwotICAgICAgICAgICAgICAgICAg ICByZXR1cm4oMCk7ICAgICAgICAgIC8qIHF1aXQgKi8KLSAgICAgICAgICAgICAgICB9IGVsc2Ug Y29udGludWU7ICAgICAgICAvKiBvdGhlcndpc2UgbG9vayBhZ2FpbiAqLwotICAgICAgICAgICAg fQotICAgICAgICAgICAgcmV0dXJuKHgpOyAgICAgICAgICAgICAgICAgIC8qIFNlbmQgYmFjayBy ZXR1cm4gY29kZSAqLwotICAgICAgICB9Ci0gICAgfQotICAgIHByaW50ZigiP1N0YWNrIHByb2Js ZW0gaW4gR09UTyAlc1xuIixzKTsgLyogU2hvdWxkbid0IHNlZSB0aGlzICovCi0gICAgcmV0dXJu KDApOwotfQotI2VuZGlmIC8qIE5PU1BMICovCi0KLS8qIEZpbmlzaCBwYXJzaW5nIGFuZCBkbyB0 aGUgSUYsIFhJRiwgYW5kIFdISUxFIGNvbW1hbmRzICovCi0KLSNpZm5kZWYgTk9TUEwKLQotLyog IEMgSCBLIFYgQSBSICAtLSAgQ2hlY2sgKGlmIGl0J3MgYSkgVmFyaWFibGUgICovCi0KLQotI2lm ZGVmIE9MRENIS1ZBUgotLyoKLSAgQ3J1ZGUgYW5kIGRpc2d1c3RpbmcsIGJ1dCBuZWVkZWQgZm9y IE9TLzIsIERPUywgYW5kIFdpbmRvd3MsIHdoZXJlIGZpbGVuYW1lcwotICBoYXZlIGJhY2tzbGFz aGVzIGluIHRoZW0uICBIb3cgZG8gd2Uga25vdyBpZiBhIGJhY2tzbGFzaCBpbiBhIGZpbGVuYW1l IGlzIGEKLSAgZGlyZWN0b3J5IHNlcGFyYXRvciwgb3IgaWYgaXQncyBhIEtlcm1pdCBiYWNrc2xh c2g/ICBUaGlzIHJvdXRpbmUgZG9lcyBhCi0gIHJvdWdoIHN5bnRheCBjaGVjayBvZiB0aGUgbmV4 dCBmZXcgY2hhcmFjdGVycyBhbmQgaWYgaXQgbG9va3MgbGlrZSBpdCBNSUdIVAotICBiZSBhIHZh cmlhYmxlLCB0aGVuIGl0IHRyaWVzIHRvIGV2YWx1YXRlIGl0LCBhbmQgaWYgdGhlIHJlc3VsdCBp cyBub3QgZW1wdHksCi0gIHdlIHNheSBpdCdzIGEgdmFyaWFibGUsIGFsdGhvdWdoIHNvbWV0aW1l cyBpdCBtaWdodCBub3QgYmUgLS0gc29tZSBjYXNlcyBhcmUKLSAgdHJ1bHkgYW1iaWd1b3VzLiAg Rm9yIGV4YW1wbGUgdGhlcmUgbWlnaHQgYSBET1MgZGlyZWN0b3J5IGNhbGxlZCBcJWEsIGFuZAot ICB3ZSBhbHNvIGhhdmUgYSB2YXJpYWJsZSB3aXRoIHRoZSBzYW1lIG5hbWUuICBUaGlzIGlzIGFs bCBmb3IgdGhlIHNha2Ugb2Ygbm90Ci0gIGhhdmluZyB0byB0ZWxsIFBDIHVzZXJzIHRoYXQgdGhl eSBoYXZlIHRvIGRvdWJsZSBhbGwgYmFja3NsYXNoZXMgaW4gZmlsZQotICBhbmQgZGlyZWN0b3J5 IG5hbWVzLgotKi8KLSNlbHNlCi0vKgotICBTb21ld2hhdCBsZXNzIGNydWRlICYgZGlzZ3VzdGlu Zy4gIFRoZSBwcmV2aW91cyBtZXRob2Qgd2FzIG5vbmRldGVybWluaXN0aWMKLSAgYW5kICh3b3Jz ZSkgaXQgaW50ZXJmZXJlZCB3aXRoIG1hY3JvIGFyZ3VtZW50IHBhc3NpbmcuICBTbyBub3cgd2Ug b25seQotICBjaGVjayB0aGUgc3ludGF4IG9mIGJhY2tzbGFzaC1pdGVtcyB0byBzZWUgaWYgdGhl eSBhcmUgdmFyaWFibGVzLCBidXQgd2UKLSAgZG8gTk9UIGNoZWNrIHRoZWlyIHZhbHVlcy4KLSov Ci0jZW5kaWYgLyogT0xEQ0hLVkFSICovCi0vKgotICBDYWxsIHdpdGggYSBzdHJpbmcgcG9pbnRl ciBwb2ludGluZyBhdCB0aGUgYmFja3NsYXNoIG9mIHRoZSBwdXJwb3J0ZWQKLSAgdmFyaWFibGUu ICBSZXR1cm5zIDEgaWYgaXQgaGFzIHRoZSBzeW50YXggb2YgYSB2YXJpYWJsZSwgMCBpZiBub3Qu Ci0qLwotaW50Ci1jaGt2YXIocykgY2hhciAqczsgewotICAgIGludCB6ID0gMDsgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFJldHVybiBjb2RlIC0gYXNzdW1lIGZhaWx1cmUuICovCi0gICAg aWYgKCFzKSBzID0gIiI7ICAgICAgICAgICAgICAgICAgICAgLyogV2F0Y2ggb3VyIGZvciBudWxs IHBvaW50ZXJzLiAqLwotICAgIGlmICghKnMpIHJldHVybigwKTsgICAgICAgICAgICAgICAgIC8q IEVtcHR5IGFyZyBzbyBub3QgYSB2YXJpYWJsZS4gKi8KLSAgICBpZiAoKnMgPT0gQ01EUSkgeyAg ICAgICAgICAgICAgICAgICAvKiBPYmplY3QgYmVnaW5zIHdpdGggYmFja3NsYXNoLiAqLwotICAg ICAgICBjaGFyIGM7Ci0gICAgICAgIGMgPSBzWzFdOyAgICAgICAgICAgICAgICAgICAgICAgLyog Q2hhcmFjdGVyIGZvbGxvd2luZyBiYWNrc2xhc2guICovCi0gICAgICAgIGlmIChjKSB7Ci0gICAg ICAgICAgICBpbnQgdCA9IDA7Ci0gICAgICAgICAgICBpZiAoYyA9PSBDTURRKSAgICAgICAgICAg ICAgLyogUXVvdGVkIGJhY2tzbGFzaCAqLwotICAgICAgICAgICAgICByZXR1cm4oMSk7Ci0gICAg ICAgICAgICBjID0gKGNoYXIpIChpc2xvd2VyKGMpID8gdG91cHBlcihjKSA6IGMpOyAvKiBPdGhl cndpc2UuLi4gKi8KLSAgICAgICAgICAgIGlmIChjID09ICclJykgeyAgICAgICAgICAgICAvKiBT aW1wbGUgdmFyaWFibGUgKi8KLSNpZmRlZiBPTERDSEtWQVIKLSAgICAgICAgICAgICAgICB0ID0g MTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuKDEpOwotI2VuZGlmIC8qIE9MRENIS1ZB UiAqLwotICAgICAgICAgICAgfSBlbHNlIGlmIChjID09ICcmJykgeyAgICAgIC8qIEFycmF5ICov Ci0gICAgICAgICAgICAgICAgaWYgKCFzWzJdKSByZXR1cm4oMCk7Ci0gICAgICAgICAgICAgICAg aWYgKHNbM10gPT0gJ1snKQotICAgICAgICAgICAgICAgICAgdCA9IGNraW5kZXgoIl0iLHMsNCww LDEpOwotI2lmbmRlZiBPTERDSEtWQVIKLSAgICAgICAgICAgICAgICByZXR1cm4oKHQgPiAwKSA/ IDEgOiAwKTsKLSNlbmRpZiAvKiBPTERDSEtWQVIgKi8KLSAgICAgICAgICAgIH0gZWxzZSBpZiAo YyA9PSAnJCcgfHwgICAgICAvKiBFbnZpcm9ubWVudCB2YXJpYWJsZSAqLwotICAgICAgICAgICAg ICAgICAgICAgICBjID09ICdWJyB8fCAgICAgIC8qIEJ1aWx0LWluIHZhcmlhYmxlICovCi0gICAg ICAgICAgICAgICAgICAgICAgIGMgPT0gJ00nKSB7ICAgICAgLyogTWFjcm8gbmFtZSAqLwotICAg ICAgICAgICAgICAgIHQgPSAoc1syXSA9PSAnKCcpOwotI2lmbmRlZiBPTERDSEtWQVIKLSAgICAg ICAgICAgICAgICByZXR1cm4oKHQgPiAwKSA/IDEgOiAwKTsKLSNlbmRpZiAvKiBPTERDSEtWQVIg Ki8KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnRicpIHsgICAgICAvKiBGdW5jdGlvbiBy ZWZlcmVuY2UgKi8KLSAgICAgICAgICAgICAgICAvKiBEb24ndCBhY3R1YWxseSBjYWxsIGl0IC0g aXQgbWlnaHQgaGF2ZSBzaWRlIGVmZmVjdHMgKi8KLSAgICAgICAgICAgICAgICBpbnQgeDsKLSAg ICAgICAgICAgICAgICBpZiAoKHggPSBja2luZGV4KCIoIixzLDMsMCwxKSkpIC8qIEp1c3QgY2hl Y2sgc3ludGF4ICovCi0gICAgICAgICAgICAgICAgICBpZiAoKHggPSBja2luZGV4KCIpIixzLHgs MCwxKSkpCi0gICAgICAgICAgICAgICAgICAgIHogPSAxOwotICAgICAgICAgICAgICAgIC8qIElu c2VydCBhIGJldHRlciBzeW50YXggY2hlY2sgaGVyZSBpZiBuZWNlc3NhcnkgKi8KLSAgICAgICAg ICAgIH0KLSNpZmRlZiBPTERDSEtWQVIKLSAgICAgICAgICAgIGlmICh0KSB7Ci0gICAgICAgICAg ICAgICAgdCA9IDI1NTsgICAgICAgICAgICAgICAgLyogVGhpcyBsZXRzIHVzIHRlc3QgXHYoeHh4 KSAqLwotICAgICAgICAgICAgICAgIGxwID0gbGluZTsgICAgICAgICAgICAgIC8qIGFuZCBldmVu IFxmLi4uKHh4eCkgKi8KLSAgICAgICAgICAgICAgICB6enN0cmluZyhzLCZscCwmdCk7ICAgICAv KiBFdmFsdWF0ZSBpdCwgd2hhdGV2ZXIgaXQgaXMuICovCi0gICAgICAgICAgICAgICAgdCA9IHN0 cmxlbihsaW5lKTsgICAgICAgLyogR2V0IGl0cyBsZW5ndGguICovCi0gICAgICAgICAgICAgICAg ZGVidWcoRjExMSwiY2hrdmFyIixsaW5lLHQpOwotICAgICAgICAgICAgICAgIHogPSB0ID4gMDsg ICAgICAgICAgICAgIC8qIElmIGxlbmd0aCA+IDAsIGl0J3MgZGVmaW5lZCAqLwotICAgICAgICAg ICAgfQotI2VuZGlmIC8qIE9MRENIS1ZBUiAqLwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVy bih6KTsKLX0KLQotLyogIEIgTyBPIEwgRSBYIFAgIC0tICBFdmFsdWF0ZSBhIEJvb2xlYW4gZXhw cmVzc2lvbiAgKi8KLQotI2RlZmluZSBCT09MTEVOIDEwMjQKLXN0YXRpYyBjaGFyIGJvb2x2YWxb Qk9PTExFTl07Ci0KLWludAotYm9vbGV4cChjeCkgaW50IGN4OyB7Ci0gICAgaW50IHgsIHksIHo7 IGNoYXIgKnMsICpwOwotICAgIGludCBwYXJlbnMgPSAwLCBwY291bnQgPSAwLCBlY291bnQgPSAw OwotICAgIGNoYXIgKnEsICpieDsKLSAgICBzdHJ1Y3QgRkRCIGt3LCBudTsKLSNpZmRlZiBGTkZM T0FUCi0gICAgc3RydWN0IEZEQiBmbDsKLSAgICBDS0ZMT0FUIGYxID0gMC4wLCBmMiA9IDAuMDsK LSAgICBpbnQgZjFmbGFnID0gMCwgZjJmbGFnID0gMDsKLSNlbmRpZiAvKiBGTkZMT0FUICovCi0j aWZkZWYgT1MyCi0gICAgZXh0ZXJuIGludCBrZXltYWM7Ci0jZW5kaWYgLyogT1MyICovCi0KLSAg ICBub3QgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciB3aGV0aGVy ICJOT1QiIHdhcyBzZWVuICovCi0gICAgeiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogSW5pdGlhbCBJRiBjb25kaXRpb24gKi8KLSAgICBpZmFyZ3MgPSAwOyAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBDb3VudCBvZiBJRiBjb25kaXRpb24gd29yZHMgKi8KLSAgICBieCA9 IGJvb2x2YWw7ICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIGJvb2xlYW4gdmFs dWUgKi8KLSAgICAqYnggPSBOVUw7Ci0KLSAgaWZhZ2FpbjoKLSAgICBjbWZkYmkoJmt3LCAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBGaXJzdCBGREIgLSBjb21tYW5kIHN3aXRjaGVzICovCi0g ICAgICAgICAgIF9DTUtFWSwgICAgICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KLSAgICAg ICAgICAgIk51bWJlciwgbnVtZXJpYy12YWx1ZWQgdmFyaWFibGUsIEJvb2xlYW4gZXhwcmVzc2lv biwgb3Iga2V5d29yZCIsCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogZGVmYXVsdCAqLwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAgICAgIG5pZiwgICAgICAgICAgICAgICAgICAg ICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCi0gICAgICAgICAgIDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBz aWxlbnQgKi8KLSAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgICAgICAgICAvKiBQcm9j ZXNzaW5nIGZ1bmN0aW9uICovCi0gICAgICAgICAgIGlmdGFiLCAgICAgICAgICAgICAgICAgICAg ICAgLyogS2V5d29yZCB0YWJsZSAqLwotICAgICAgICAgICAmbnUgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KLSAgICAgICAgICAgKTsKLSAgICBjbWZk YmkoJm51LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAybmQgRkRCIC0gQW4gaW50ZWdlciAq LwotICAgICAgICAgICBfQ01OVU0sICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCi0g ICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaGxwbXNnICovCi0gICAg ICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCAqLwotICAgICAg ICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICov Ci0gICAgICAgICAgIDAsCi0gICAgICAgICAgIDAsCi0gICAgICAgICAgIHh4c3RyaW5nLAotICAg ICAgICAgICBOVUxMLAotI2lmZGVmIEZORkxPQVQKLSAgICAgICAgICAgJmZsCi0jZWxzZQotICAg ICAgICAgICBOVUxMCi0jZW5kaWYgLyogRk5GTE9BVCAqLwotICAgICAgICAgICApOwotI2lmZGVm IEZORkxPQVQKLSAgICBjbWZkYmkoJmZsLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBIGZs b2F0aW5nLXBvaW50IG51bWJlciAqLwotICAgICAgICAgICBfQ01GTEQsICAgICAgICAgICAgICAg ICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogaGxwbXNnICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogZGVmYXVsdCAqLwotICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KLSAgICAgICAgICAgMCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLwotICAgICAgICAgICB4 eHN0cmluZywKLSAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgTlVMTAotICAgICAgICAgICAp OwotI2VuZGlmIC8qIEZORkxPQVQgKi8KLSAgICB4ID0gY21mZGIoJmt3KTsgICAgICAgICAgICAg ICAgICAgICAvKiBQYXJzZSBhIGtleXdvcmQgb3IgYSBudW1iZXIgKi8KLSAgICBkZWJ1ZyhGMTEx LCJib29sdmFsIGNtZmRiIiwiIix4KTsKLSAgICBpZiAoeCA8IDApIHsKLSAgICAgICAgaWYgKHgg PT0gLTMpCi0gICAgICAgICAgeCA9IC0yOwotICAgICAgICByZXR1cm4oeCk7Ci0gICAgfQotICAg IGRlYnVnKEYxMTEsImJvb2x2YWwgc3dpdGNoIiwiIixjbXJlc3VsdC5mY29kZSk7Ci0gICAgc3dp dGNoIChjbXJlc3VsdC5mY29kZSkgeyAgICAgICAgICAgLyogV2hhdCBkaWQgd2UgZ2V0PyAqLwot ICAgICAgY2FzZSBfQ01GTEQ6IHsJCQkvKiBBICJmaWVsZCIgKi8KLQkgIGludCBpOwotCSAgY2hh ciAqIHM7Ci0JICBzID0gY21yZXN1bHQuc3Jlc3VsdDsKLS8qCi0gIEMtS2VybWl0IDkuMDogVGhp cyBhbGxvd3MgYSBtYWNybyBuYW1lIHRvIHNlcnZlIGFzIGFuCi0gIElGIGNvbmRpdGlvbiB3aXRo b3V0IGhhdmluZyB0byBlbmNsb3NlIGl0IGluIFxtKC4uLikuCi0qLwotCSAgaWYgKAotI2lmZGVm IEZORkxPQVQJICAKLQkgICAgICAhaXNmbG9hdChjbXJlc3VsdC5zcmVzdWx0LDApIC8qIE5vdCBh IG51bWJlciAqLwotI2Vsc2UKLQkgICAgICAhY2hrbnVtKGNtcmVzdWx0LnNyZXN1bHQpIC8qIE5v dCBhIG51bWJlciAqLwotI2VuZGlmCS8qIEZORkxPQVQgKi8KLQkgICAgICApIHsKLQkgICAgICBp ID0gbWxvb2sobWFjdGFiLGNtcmVzdWx0LnNyZXN1bHQsbm1hYyk7IC8qIExvb2sgaXQgdXAgKi8K LQkgICAgICBpZiAoaSA+IC0xKQkJLyogaW4gdGhlIG1hY3JvIHRhYmxlICovCi0JCXMgPSBtYWN0 YWJbeF0ubXZhbDsJLyogYW5kIGdldCBpdHMgdmFsdWUgKi8KLQkgICAgICBlbHNlCQkJLyogT3Ro ZXJ3aXNlIGlmIG5vIHN1Y2ggbWFjcm8gKi8KLQkJcyA9ICIwIjsJCS8qIGV2YWx1YXRlIGFzIEZB TFNFLiAqLwotCSAgfQotI2lmZGVmIEZORkxPQVQKLSAgICAgICAgaWYgKGlzZmxvYXQocywwKSkg ewkJLyogQSBmbG9hdGluZy1wb2ludCBudW1iZXI/ICovCi0gICAgICAgICAgICBmMSA9IGZsb2F0 dmFsOyAgICAgICAgICAgICAgLyogWWVzLCBnZXQgaXRzIHZhbHVlICovCi0gICAgICAgICAgICBm MWZsYWcgPSAxOyAgICAgICAgICAgICAgICAgLyogcmVtZW1iZXIgd2UgZGlkIHRoaXMgKi8KLSAg ICAgICAgICAgIGlmYyA9IDk5OTk7ICAgICAgICAgICAgICAgICAvKiBTZXQgc3BlY2lhbCAiaWYt Y29kZSIgKi8KLSAgICAgICAgfQotI2Vsc2UKLQlpZiAoY2hrbnVtKHMpKSB7Ci0JICAgIGNtcmVz dWx0Lm5yZXN1bHQgPSBhdG9pKHMpOwotCSAgICBpZmMgPSA5OTk5OwotCSAgICBicmVhazsKLQl9 Ci0jZW5kaWYgLyogRk5GTE9BVCAqLwotCWVsc2UKLQkgIHJldHVybigtMik7Ci0gICAgICB9Ci0g ICAgICBjYXNlIF9DTU5VTTogICAgICAgICAgICAgICAgICAgICAgLyogQSBudW1iZXIuLi4gKi8K LSAgICAgICAgaWZjID0gOTk5OTsgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgc3BlY2lhbCAi aWYtY29kZSIgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIF9DTUtFWTogICAgICAgICAg ICAgICAgICAgICAgLyogQSBrZXl3b3JkICovCi0gICAgICAgIGlmYyA9IGNtcmVzdWx0Lm5yZXN1 bHQ7ICAgICAgICAgLyogR2V0IGlmLWNvZGUgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZh dWx0OgotICAgICAgICByZXR1cm4oLTIpOwotICAgIH0KLSAgICBzd2l0Y2ggKGlmYykgeyAgICAg ICAgICAgICAgICAgICAgICAvKiBzZXQgeiA9IDEgZm9yIHRydWUsIDAgZm9yIGZhbHNlICovCi0g ICAgICBjYXNlIDk5OTk6ICAgICAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyICovCi0jaWZk ZWYgRk5GTE9BVAotICAgICAgICBpZiAoZjFmbGFnKSB7Ci0gICAgICAgICAgICB6ID0gKGYxID09 IDAuMCkgPyAwIDogMTsKLSAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyogRk5GTE9BVCAqLwotICAg ICAgICB6ID0gKGNtcmVzdWx0Lm5yZXN1bHQgPT0gMCkgPyAwIDogMTsKLSAgICAgICAgYnJlYWs7 Ci0gICAgICBjYXNlIFhYSUZMUDogICAgICAgICAgICAgICAgICAgICAgLyogTGVmdCBwYXJlbiAq LwotICAgICAgICBpZiAocGNvdW50ID09IDAgJiYgaWZhcmdzID4gMCkKLSAgICAgICAgICByZXR1 cm4oLTIpOwotICAgICAgICBwYXJlbnMgPSAxOwotICAgICAgICBwY291bnQrKzsKLSAgICAgICAg aWZhcmdzKys7Ci0gICAgICAgICpieCsrID0gJygnOwotICAgICAgICBnb3RvIGlmYWdhaW47Ci0g ICAgICBjYXNlIFhYSUZSUDogICAgICAgICAgICAgICAgICAgICAgLyogUmlnaHQgcGFyZW4gKi8K LSAgICAgICAgaWYgKCFwYXJlbnMpCi0gICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgaWYg KC0tcGNvdW50IDwgMCkKLSAgICAgICAgICByZXR1cm4oLTIpOwotICAgICAgICBpZmFyZ3MrKzsK LSAgICAgICAgKmJ4KysgPSAnKSc7Ci0gICAgICAgICpieCA9IE5VTDsKLSAgICAgICAgaWYgKHBj b3VudCA9PSAwKQotICAgICAgICAgIGdvdG8gaWZlbmQ7Ci0gICAgICAgIGdvdG8gaWZhZ2FpbjsK LSAgICAgIGNhc2UgWFhJRkFOOiAgICAgICAgICAgICAgICAgICAgICAvKiBBTkQgKCYmKSAqLwot ICAgICAgICBpZmFyZ3MrKzsKLSAgICAgICAgaWYgKCFlY291bnQpCi0gICAgICAgICAgcmV0dXJu KC0yKTsKLSAgICAgICAgKmJ4KysgPSAnJic7Ci0gICAgICAgIGdvdG8gaWZhZ2FpbjsKLSAgICAg IGNhc2UgWFhJRk9SOiAgICAgICAgICAgICAgICAgICAgICAvKiBPUiAofHwpICovCi0gICAgICAg IGlmYXJncysrOwotICAgICAgICBpZiAoIWVjb3VudCkKLSAgICAgICAgICByZXR1cm4oLTIpOwot ICAgICAgICAqYngrKyA9ICd8JzsKLSAgICAgICAgZ290byBpZmFnYWluOwotICAgICAgY2FzZSBY WElGTk86ICAgICAgICAgICAgICAgICAgICAgIC8qIElGIE5PVCBbIE5PVCBbIE5PVCAuLi4gXSBd ICovCi0gICAgICAgIGlmIChieCA+IGJvb2x2YWwpIHsgICAgICAgICAgICAgLyogZXZhbGEoKSBk b2Vzbid0IGxpa2UgY2FzY2FkZWQgKi8KLSAgICAgICAgICAgIGlmICgqKGJ4LTEpID09ICchJykg eyAgICAgICAvKiB1bmFyeSBvcGVyYXRvcnMuLi4gKi8KLSAgICAgICAgICAgICAgICAqKGJ4LTEp ID0gTlVMOyAgICAgICAgICAvKiBTbyBoZXJlLCB0d28gd3JvbmdzIG1ha2UgYSByaWdodC4gKi8K LSAgICAgICAgICAgICAgICBieC0tOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg ICAgICAqYngrKyA9ICchJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAg ICAgICAgICpieCsrID0gJyEnOwotICAgICAgICB9Ci0gICAgICAgIGlmYXJncysrOwotICAgICAg ICBnb3RvIGlmYWdhaW47Ci0gICAgICBjYXNlIFhYSUZUUjogICAgICAgICAgICAgICAgICAgICAg LyogSUYgVFJVRSAqLwotICAgICAgICB6ID0gMTsKLSAgICAgICAgZGVidWcoRjEwMSwiaWYgdHJ1 ZSIsIiIseik7Ci0gICAgICAgIGlmYXJncyArPSAxOwotICAgICAgICBicmVhazsKLSAgICAgIGNh c2UgWFhJRk5UOiAgICAgICAgICAgICAgICAgICAgICAvKiBJRiBGQUxTRSAqLwotICAgICAgICB6 ID0gMDsKLSAgICAgICAgZGVidWcoRjEwMSwiaWYgdHJ1ZSIsIiIseik7Ci0gICAgICAgIGlmYXJn cyArPSAxOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgWFhJRlNVOiAgICAgICAgICAgICAg ICAgICAgICAvKiBJRiBTVUNDRVNTICovCi0gICAgICAgIHogPSAoIHN1Y2Nlc3MgIT0gMCApID8g MSA6IDA7Ci0gICAgICAgIGRlYnVnKEYxMDEsImlmIHN1Y2Nlc3MiLCIiLHopOwotICAgICAgICBp ZmFyZ3MgKz0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFhYSUZGQTogICAgICAgICAg ICAgICAgICAgICAgLyogSUYgRkFJTFVSRSAqLwotICAgICAgICB6ID0gKCBzdWNjZXNzID09IDAg KSA/IDEgOiAwOwotICAgICAgICBkZWJ1ZyhGMTAxLCJpZiBmYWlsdXJlIiwiIix6KTsKLSAgICAg ICAgaWZhcmdzICs9IDE7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFhYSUZERTogICAg ICAgICAgICAgICAgICAgICAgLyogSUYgREVGSU5FRCAqLwotICAgICAgICBpZiAoKHggPSBjbWZs ZCgiTWFjcm8gb3IgdmFyaWFibGUgbmFtZSIsIiIsJnMsTlVMTCkpIDwgMCkKLSAgICAgICAgICBy ZXR1cm4oKHggPT0gLTMpID8gLTIgOiB4KTsKLQotICAgICAgICBpZiAoKnMgPT0gQ01EUSkgewot ICAgICAgICAgICAgY2hhciAqIGxwOwotICAgICAgICAgICAgY2hhciBsaW5lWzI1Nl07Ci0gICAg ICAgICAgICBpbnQgdCwgeDsKLSAgICAgICAgICAgIGlmICgqKHMrMSkgPT0gJ2YnIHx8ICoocysx KSA9PSAnRicpIHsgLyogQnVpbHQtaW4gZnVuY3Rpb24gKi8KLSAgICAgICAgICAgICAgICBleHRl cm4gc3RydWN0IGtleXRhYiBmbmN0YWJbXTsKLSAgICAgICAgICAgICAgICBleHRlcm4gaW50IG5m dW5jczsKLSAgICAgICAgICAgICAgICBja3N0cm5jcHkobGluZSxzKzIsMjU2KTsKLSAgICAgICAg ICAgICAgICBpZiAobGluZVswXSkgewotICAgICAgICAgICAgICAgICAgICBscCA9IGNrc3RyY2hy KGxpbmUsJygnKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxwKSAqbHAgPSBOVUw7Ci0gICAg ICAgICAgICAgICAgICAgIHggPSBsb29rdXAoZm5jdGFiLGxpbmUsbmZ1bmNzLCZ0KTsKLSAgICAg ICAgICAgICAgICAgICAgeiA9IHggPiAtMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgZGVidWcoRjExMSwiaWYgZGVmaW5lZCBmdW5jdGlvbiIsbGluZSx6KTsKLSAgICAgICAg ICAgIH0gZWxzZSBpZiAoKihzKzEpID09ICd2JyB8fCAqKHMrMSkgPT0gJ1YnKSB7IC8qIDguMC4y MDAgKi8KLSAgICAgICAgICAgICAgICBleHRlcm4gc3RydWN0IGtleXRhYiB2YXJ0YWJbXTsKLSAg ICAgICAgICAgICAgICBleHRlcm4gaW50IG52YXJzOwotICAgICAgICAgICAgICAgIHogPSAwOwot ICAgICAgICAgICAgICAgIGlmICgqKHMrMikgPT0gJygnKSB7Ci0gICAgICAgICAgICAgICAgICAg IGNrc3RybmNweShsaW5lLHMrMywyNTYpOwotICAgICAgICAgICAgICAgICAgICBpZiAobGluZVsw XSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbHAgPSBja3N0cmNocihsaW5lLCcpJyk7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBpZiAobHApICpscCA9IE5VTDsKLSAgICAgICAgICAgICAg ICAgICAgICAgIHggPSBsb29rdXAodmFydGFiLGxpbmUsbnZhcnMsJnQpOwotICAgICAgICAgICAg ICAgICAgICAgICAgeiA9IHggPiAtMTsKLQkJCWlmICh6KSB7CS8qIDguMC4yMDMgKi8KLQkJCSAg ICBpbnQgdDsJLyogSXQgbXVzdCBoYXZlIGEgdmFsdWUgdG8gc3VjY2VlZCAqLwotCQkJICAgIHQg PSAyNTU7CS8qIGFzIGluIEMtS2VybWl0IDYuMCBhbmQgNy4wICovCi0JCQkgICAgbHAgPSBsaW5l OwkvKiAodGhpcyB3YXMgYnJva2VuIGluIDguMC4yMDAtMjAxKSAqLwotCQkJICAgIHp6c3RyaW5n KHMsJmxwLCZ0KTsKLQkJCSAgICB0ID0gc3RybGVuKGxpbmUpOwotCQkJICAgIHogPSBsaW5lWzBd ID8gMSA6IDA7Ci0JCQl9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwiaWYgZGVmaW5lZCB2YXJpYWJsZSIsbGluZSx6 KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgeiA9IGNoa3ZhcihzKTsg ICAgICAgICAgLyogU3RhcnRzIHdpdGggYmFja3NsYXNoICovCi0gICAgICAgICAgICAgICAgaWYg KHogPiAwKSB7ICAgICAgICAgICAgLyogWWVzLi4uICovCi0gICAgICAgICAgICAgICAgICAgIHQg PSAyNTU7ICAgICAgICAgICAgLyogdGhhbiBidWZmZXIgc28gaWYgenpzdHJpbmcgZmFpbHMgICov Ci0gICAgICAgICAgICAgICAgICAgIGxwID0gbGluZTsgICAgICAgICAgLyogY2hlY2sgZm9yIHRo YXQgLS0gb3ZlcmZsb3cgbWVhbnMgKi8KLSAgICAgICAgICAgICAgICAgICAgbGluZVswXSA9IE5V TDsgICAgICAvKiB0aGUgcXVhbnRpdHkgaXMgZGVmaW5lZC4gKi8KLSAgICAgICAgICAgICAgICAg ICAgeCA9IHp6c3RyaW5nKHMsJmxwLCZ0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCh4IDwg MCAmJiB0ICE9IDI1NSkgfHwgIWxpbmVbMF0pCi0gICAgICAgICAgICAgICAgICAgICAgeiA9IDA7 Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImlmIGRlZmluZWQgenpzdHJpbmciLGxp bmUseik7Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImlmIGRlZmluZWQgenpzdHJp bmcgdCIsIiIsdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgeiA9IChteGxvb2sobWFjdGFiLHMsbm1hYykgPiAtMSk7IC8q IExvb2sgZm9yIGV4YWN0IG1hdGNoICovCi0gICAgICAgIH0KLSAgICAgICAgZGVidWcoRjExMSwi aWYgZGVmaW5lZCBmaW5hbCIscyx6KTsKLSAgICAgICAgaWZhcmdzICs9IDI7Ci0gICAgICAgIGJy ZWFrOwotCi0gICAgICBjYXNlIFhYSUZEQzogeyAgICAgICAgICAgICAgICAgICAgLyogSUYgREVD TEFSRUQgKi8KLSAgICAgICAgICBjaGFyICogbHA7Ci0gICAgICAgICAgY2hhciBsaW5lWzMyXTsK LSAgICAgICAgICBpbnQgaiwgaywgdCwgeDsKLSAgICAgICAgICBpZiAoKHggPSBjbWZsZCgiQXJy YXkgbmFtZSIsIiIsJnMsTlVMTCkpIDwgMCkKLSAgICAgICAgICAgIHJldHVybigoeCA9PSAtMykg PyAtMiA6IHgpOwotICAgICAgICAgIGlmICgqcyA9PSBDTURRKSB7Ci0gICAgICAgICAgICAgIGlm ICgqKHMrMSkgIT0gJyYnKSB7Ci0gICAgICAgICAgICAgICAgICB0ID0gMzE7Ci0gICAgICAgICAg ICAgICAgICBscCA9IGxpbmU7Ci0gICAgICAgICAgICAgICAgICBsaW5lWzBdID0gTlVMOwotICAg ICAgICAgICAgICAgICAgeCA9IHp6c3RyaW5nKHMsJmxwLCZ0KTsKLSAgICAgICAgICAgICAgICAg IHMgPSBsaW5lOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIHogPSAw OwotICAgICAgICAgIGlmICgoeCA9IGFycmF5Ym91bmRzKHMsJmosJmspKSA+IC0xKSB7Ci0gICAg ICAgICAgICAgIGlmIChhX3B0clt4XSkgewotICAgICAgICAgICAgICAgICAgaWYgKGogPCAxKQot ICAgICAgICAgICAgICAgICAgICB6ID0gMTsKLSAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGog PD0gYV9kaW1beF0pCi0gICAgICAgICAgICAgICAgICAgIHogPSAxOwotICAgICAgICAgICAgICAg ICAgaWYgKHogPT0gMSAmJiBrID4gYV9kaW1beF0pCi0gICAgICAgICAgICAgICAgICAgIHogPSAw OwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAg fQotICAgICAgY2FzZSBYWElGQkc6ICAgICAgICAgICAgICAgICAgICAgIC8qIElGIEJBQ0tHUk9V TkQgKi8KLSAgICAgIGNhc2UgWFhJRkZHOiAgICAgICAgICAgICAgICAgICAgICAvKiBJRiBGT1JF R1JPVU5EICovCi0gICAgICAgIGJnY2hrKCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hl Y2sgYmFja2dyb3VuZCBzdGF0dXMgKi8KLSAgICAgICAgaWYgKGlmYyA9PSBYWElGRkcpICAgICAg ICAgICAgICAvKiBGb3JlZ3JvdW5kICovCi0gICAgICAgICAgeiA9IHBmbGFnID8gMSA6IDA7Ci0g ICAgICAgIGVsc2UgeiA9IHBmbGFnID8gMCA6IDE7ICAgICAgICAgLyogQmFja2dyb3VuZCAqLwot ICAgICAgICBpZmFyZ3MgKz0gMTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgWFhJRkNP OiAgICAgICAgICAgICAgICAgICAgICAvKiBJRiBDT1VOVCAqLwotICAgICAgICB6ID0gKCAtLWNv dW50W2NtZGx2bF0gPiAwICk7Ci0gICAgICAgIGlmIChjeCA9PSBYWFdISSkgY291bnRbY21kbHZs XSArPSAyOyAvKiBEb24ndCBhc2suLi4gKi8KLSAgICAgICAgZGVidWcoRjEwMSwiaWYgY291bnQi LCIiLHopOwotICAgICAgICBpZmFyZ3MgKz0gMTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNh c2UgWFhJRkVYOiAgICAgICAgICAgICAgICAgICAgICAvKiBJRiBFWElTVCAqLwotI2lmZGVmIENL X1RNUERJUgotICAgICAgY2FzZSBYWElGREk6ICAgICAgICAgICAgICAgICAgICAgIC8qIElGIERJ UkVDVE9SWSAqLwotI2VuZGlmIC8qIENLX1RNUERJUiAqLwotICAgICAgY2FzZSBYWElGQUI6ICAg ICAgICAgICAgICAgICAgICAgIC8qIElGIEFCU09MVVRFICovCi0gICAgICBjYXNlIFhYSUZMTjoJ CQkvKiBJRiBMSU5LICovCi0gICAgICAgIGlmICgoeCA9IGNtZmxkKAotICAgICAgICAgICAgICAg ICAgICAgICAoKGlmYyA9PSBYWElGREkpID8gIkRpcmVjdG9yeSBuYW1lIiA6ICJGaWxlIiksCi0g ICAgICAgICAgICAgICAgICAgICAgICIiLCZzLAotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAg ICAgICAgICBOVUxMICAgICAgICAgICAgIC8qIFRoaXMgYWxsb3dzIFwncyBpbiBmaWxlbmFtZXMg Ki8KLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nCi0jZW5kaWYgLyogT1My ICovCi0gICAgICAgICAgICAgICAgICAgICAgICkpIDwgMCkgewotICAgICAgICAgICAgaWYgKHgg PT0gLTMpIHsKLSAgICAgICAgICAgICAgICBleHRlcm4gaW50IGNtZmxnczsKLSAgICAgICAgICAg ICAgICBpZiAoY21mbGdzID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/Rmls ZSBvciBkaXJlY3RvcnkgbmFtZSByZXF1aXJlZFxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJl dHVybigtOSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHJldHVybih4 KTsKLSAgICAgICAgfQotICAgICAgICBzID0gYnJzdHJpcChzKTsKLSNpZmRlZiBVTklYCi0JaWYg KGlmYyA9PSBYWElGTE4pIHsKLQkgICAgeiA9IGlzYWxpbmsocyk7Ci0JfSBlbHNlCi0jZW5kaWYJ LyogVU5JWCAqLwotICAgICAgICBpZiAoaWZjID09IFhYSUZBQikgewotICAgICAgICAgICAgeiA9 IGlzYWJzb2x1dGUocyk7Ci0gICAgICAgIH0gZWxzZSBpZiAoaWZjID09IFhYSUZFWCkgewotICAg ICAgICAgICAgeiA9ICh6Z2V0ZnMocykgPiAtMUwpOwotICAgICAgICAgICAgZGVidWcoRjEwMSwi aWYgZXhpc3QgMSIsIiIseik7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICBpZiAoIXopIHsgICAg ICAgICAgICAgICAgICAgLyogRmlsZSBub3QgZm91bmQuICovCi0gICAgICAgICAgICAgICAgaW50 IHQ7ICAgICAgICAgICAgICAgICAgLyogVHJ5IGV4cGFuZGluZyB2YXJpYWJsZXMgKi8KLSAgICAg ICAgICAgICAgICB0ID0gTElOQlVGU0laLTE7ICAgICAgICAvKiBhbmQgbG9va2luZyBhZ2Fpbi4g Ki8KLSAgICAgICAgICAgICAgICBscCA9IGxpbmU7Ci0gICAgICAgICAgICAgICAgenpzdHJpbmco cywmbHAsJnQpOwotICAgICAgICAgICAgICAgIHMgPSBsaW5lOwotICAgICAgICAgICAgICAgIHog PSAoIHpjaGtpKHMpID4gLTFMICk7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiaWYgZXhp c3QgMiIsIiIseik7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0jaWZkZWYgQ0tf VE1QRElSCi0gICAgICAgIH0gZWxzZSB7Ci0jaWZkZWYgVk1TCi0gICAgICAgICAgICB6ID0gKHpj aGtpKHMpID09IC0yKQotI2Vsc2UKLS8qIEJlY2F1c2UgdGhpcyBkb2Vzbid0IGNhdGNoICRESVNL MTpbRk9PXUJMQUguRElSOzEgKi8KLSAgICAgICAgICAgIHogPSBpc2RpcihzKQotI2lmZGVmIE9T MgotICAgICAgICAgICAgICB8fCAoaXNhbHBoYShzWzBdKSAmJiBzWzFdID09ICc6JyAmJiBzWzJd ID09IE5VTCkKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSAgICAgICAgICAg ICAgOwotICAgICAgICAgICAgZGVidWcoRjEwMSwiaWYgZGlyZWN0b3J5IDEiLCIiLHopOwotCi0g ICAgICAgICAgICBpZiAoIXopIHsJCQkvKiBGaWxlIG5vdCBmb3VuZC4gKi8KLSAgICAgICAgICAg ICAgICBpbnQgdDsgICAgICAgICAgICAgICAgICAvKiBUcnkgZXhwYW5kaW5nIHZhcmlhYmxlcyAq LwotICAgICAgICAgICAgICAgIHQgPSBMSU5CVUZTSVotMTsgICAgICAgIC8qIGFuZCBsb29raW5n IGFnYWluLiAqLwotICAgICAgICAgICAgICAgIGxwID0gbGluZTsKLSAgICAgICAgICAgICAgICB6 enN0cmluZyhzLCZscCwmdCk7Ci0gICAgICAgICAgICAgICAgcyA9IGxpbmU7Ci0gICAgICAgICAg ICAgICAgeiA9IGlzZGlyKHMpCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgICB8fCAoaXNh bHBoYShzWzBdKSAmJiBzWzFdID09ICc6JyAmJiBzWzJdID09IE5VTCkKLSNlbmRpZiAvKiBPUzIg Ki8KLSAgICAgICAgICAgICAgICAgICAgOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImlm IGRpcmVjdG9yeSAyIiwiIix6KTsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19UTVBESVIg Ki8KLSAgICAgICAgfQotICAgICAgICBpZmFyZ3MgKz0gMjsKLSAgICAgICAgYnJlYWs7Ci0KLSAg ICAgIGNhc2UgWFhJRkVROiAgICAgICAgICAgICAgICAgICAgICAvKiBJRiBFUVVBTCAoc3RyaW5n IGNvbXBhcmlzb24pICovCi0gICAgICBjYXNlIFhYSUZMTDogICAgICAgICAgICAgICAgICAgICAg LyogSUYgTGV4aWNhbGx5IExlc3MgVGhhbiAqLwotICAgICAgY2FzZSBYWElGTEc6ICAgICAgICAg ICAgICAgICAgICAgIC8qIElmIExleGljYWxseSBHcmVhdGVyIFRoYW4gKi8KLSAgICAgICAgaWYg KCh4ID0gY21mbGQoImZpcnN0IHdvcmQgb3IgdmFyaWFibGUgbmFtZSIsIiIsJnMseHhzdHJpbmcp KSA8IDApIHsKLSAgICAgICAgICAgIGlmICh4ID09IC0zKSB7Ci0gICAgICAgICAgICAgICAgcHJp bnRmKCI/VGV4dCByZXF1aXJlZFxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAg ICAgICAgICAgIH0gZWxzZSByZXR1cm4oeCk7Ci0gICAgICAgIH0KLSAgICAgICAgcyA9IGJyc3Ry aXAocyk7ICAgICAgICAgICAgICAgICAvKiBTdHJpcCBicmFjZXMgKi8KLSAgICAgICAgeCA9IChp bnQpc3RybGVuKHMpOwotICAgICAgICBpZiAoeCA+IExJTkJVRlNJWi0xKSB7Ci0gICAgICAgICAg ICBwcmludGYoIj9JRjogc3RyaW5ncyB0b28gbG9uZ1xuIik7Ci0gICAgICAgICAgICByZXR1cm4o LTIpOwotICAgICAgICB9Ci0gICAgICAgIGxwID0gbGluZTsgICAgICAgICAgICAgICAgICAgICAg LyogbHAgcG9pbnRzIHRvIGZpcnN0IHN0cmluZyAqLwotICAgICAgICBja3N0cm5jcHkobGluZSxz LExJTkJVRlNJWik7Ci0gICAgICAgIGlmICgoeSA9IGNtZmxkKCJzZWNvbmQgd29yZCBvciB2YXJp YWJsZSBuYW1lIiwiIiwmcyx4eHN0cmluZykpIDwgMCkgewotICAgICAgICAgICAgaWYgKHkgPT0g LTMpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9UZXh0IHJlcXVpcmVkXG4iKTsKLSAgICAg ICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgfSBlbHNlIHJldHVybih5KTsKLSAg ICAgICAgfQotICAgICAgICBzID0gYnJzdHJpcChzKTsKLSAgICAgICAgeSA9IChpbnQpc3RybGVu KHMpOwotICAgICAgICBpZiAoeCArIHkgKyAyID4gTElOQlVGU0laKSB7Ci0gICAgICAgICAgICBw cmludGYoIj9JRjogc3RyaW5ncyB0b28gbG9uZ1xuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTIp OwotICAgICAgICB9Ci0gICAgICAgIHRwID0gbHAgKyB4ICsgMjsgICAgICAgICAgICAgICAgLyog dHAgcG9pbnRzIHRvIHNlY29uZCBzdHJpbmcgKi8KLSAgICAgICAgc3RyY3B5KHRwLHMpOyAgICAg ICAgICAgICAgICAgICAvKiBzYWZlIChjaGVja2VkKSAqLwotICAgICAgICB4ID0gY2tzdHJjbXAo bHAsdHAsLTEsaW5wY2FzW2NtZGx2bF0pOyAvKiBVc2UgbG9uZ2VzdCBsZW5ndGggKi8KLSAgICAg ICAgc3dpdGNoIChpZmMpIHsKLSAgICAgICAgICBjYXNlIFhYSUZFUTogICAgICAgICAgICAgICAg ICAvKiBJRiBFUVVBTCAoc3RyaW5nIGNvbXBhcmlzb24pICovCi0gICAgICAgICAgICB6ID0gKHgg PT0gMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFhYSUZMTDogICAgICAg ICAgICAgICAgICAvKiBJRiBMZXhpY2FsbHkgTGVzcyBUaGFuICovCi0gICAgICAgICAgICB6ID0g KHggPCAwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgWFhJRkxHOiAgICAg ICAgICAgICAgICAgIC8qIElmIExleGljYWxseSBHcmVhdGVyIFRoYW4gKi8KLSAgICAgICAgICAg IHogPSAoeCA+IDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVi dWcoRjEwMSwiSUYgRVEgcmVzdWx0IiwiIix6KTsKLSAgICAgICAgaWZhcmdzICs9IDM7Ci0gICAg ICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFhYSUZWRTogICAgICAgICAgICAgICAgICAgICAgLyog SUYgVkVSU0lPTiAqLwotICAgICAgY2FzZSBYWElGQUU6ICAgICAgICAgICAgICAgICAgICAgIC8q IElGIChhcml0aG1ldGljYWxseSkgPSAqLwotICAgICAgY2FzZSBYWElGTlE6ICAgICAgICAgICAg ICAgICAgICAgIC8qIElGICE9IChub3QgYXJpdGhtZXRpY2FsbHkgZXF1YWwpICovCi0gICAgICBj YXNlIFhYSUZMVDogICAgICAgICAgICAgICAgICAgICAgLyogSUYgPCAgKi8KLSAgICAgIGNhc2Ug WFhJRkxFOiAgICAgICAgICAgICAgICAgICAgICAvKiBJRiA8PSAqLwotICAgICAgY2FzZSBYWElG R0U6ICAgICAgICAgICAgICAgICAgICAgIC8qIElGID49ICovCi0gICAgICBjYXNlIFhYSUZHVDog eyAgICAgICAgICAgICAgICAgICAgLyogSUYgPiAgKi8KLQotCSAgLyogSnVseSAyMDA2IC0gY29u dmVydGVkIHRvIHVzZSBDS19PRkZfVCByYXRoZXIgdGhhbiBpbnQgdG8gKi8KLSAgICAgICAgICAv KiBhbGxvdyBsb25nIGludGVnZXJzIG9uIHBsYXRmb3JtcyB0aGF0IGhhdmUgY2tfb2ZmX3QgPiAz MiBiaXRzICovCi0JICBpbnQgeHg7Ci0JICBDS19PRkZfVCBuMSA9IChDS19PRkZfVCkwLCBuMiA9 IChDS19PRkZfVCkwOwotICAgICAgICBpZiAoaWZjID09IFhYSUZWRSkgewotICAgICAgICAgICAg bjEgPSAoQ0tfT0ZGX1QpIHZlcm51bTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHgg PSBjbWZsZCgiZmlyc3QgbnVtYmVyIG9yIHZhcmlhYmxlIG5hbWUiLCIiLCZzLHh4c3RyaW5nKTsK LSAgICAgICAgICAgIGlmICh4ID09IC0zKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/UXVh bnRpdHkgcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgICAgICBpZiAoeCA8IDApIHJldHVybih4KTsKLSAgICAgICAgICAgIGRl YnVnKEYxMDEsInh4aWZndCBjbWZsZCIsIiIseCk7Ci0gICAgICAgICAgICBja3N0cm5jcHkobGlu ZSxzLExJTkJVRlNJWik7Ci0gICAgICAgICAgICBscCA9IGJyc3RyaXAobGluZSk7Ci0gICAgICAg ICAgICBkZWJ1ZyhGMTEwLCJ4eGlmZ3QgZXhwMSIsbHAsMCk7Ci0KLS8qIFRoZSBmb2xsb3dpbmcg Yml0IGlzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkIHZlcnNpb25zIG9mIE1TLURPUyBLZXJt aXQgKi8KLQotICAgICAgICAgICAgaWYgKCFja3N0cmNtcChscCwiY291bnQiLDUsMCkpIHsKLSAg ICAgICAgICAgICAgICBuMSA9IChDS19PRkZfVCljb3VudFtjbWRsdmxdOwotICAgICAgICAgICAg fSBlbHNlIGlmICghY2tzdHJjbXAobHAsInZlcnNpb24iLDcsMCkpIHsKLSAgICAgICAgICAgICAg ICBuMSA9IChDS19PRkZfVCkgdmVybnVtOwotICAgICAgICAgICAgfSBlbHNlIGlmICghY2tzdHJj bXAobHAsImFyZ2MiLDQsMCkpIHsKLSAgICAgICAgICAgICAgICBuMSA9IChDS19PRkZfVCkgbWFj YXJnY1ttYWNsdmxdOwotICAgICAgICAgICAgfSBlbHNlIHsKLQotLyogRW5kIG9mIGNvbXBhdGli aWxpdHkgYml0ICovCi0KLSNpZmRlZiBGTkZMT0FUCi0gICAgICAgICAgICAgICAgaWYgKGlzZmxv YXQobHAsMCkgPiAxKSB7IC8qIEFsbG93IGZsb2F0aW5nLXBvaW50IGNvbXBhcmlzb25zICovCi0g ICAgICAgICAgICAgICAgICAgIGYxID0gZmxvYXR2YWw7Ci0gICAgICAgICAgICAgICAgICAgIGYx ZmxhZyA9IDE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyogRk5GTE9BVCAqLwot ICAgICAgICAgICAgICAgICAgaWYgKGNoa251bShscCkpIHsKLSAgICAgICAgICAgICAgICAgICAg ICBuMSA9IGNrYXRvZnMobHApOwotICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAg ICAgIC8qIENoZWNrIGZvciBhcml0aG1ldGljIGV4cHJlc3Npb24gKi8KLSAgICAgICAgICAgICAg ICAgICAgICBxID0gZXZhbGEobHApOyAgICAvKiBjbW51bSgpIGRvZXMgdGhpcyBidXQgLi4uICov Ci0gICAgICAgICAgICAgICAgICAgICAgaWYgKGNoa251bShxKSkgewkvKiB3ZSdyZSBub3QgdXNp bmcgY21udW0oKS4gKi8KLQkJCSAgbjEgPSBja2F0b2ZzKHEpOwotCQkgICAgICB9IGVsc2Ugewot CQkJICBwcmludGYoIj9WYWx1ZSBub3QgbnVtZXJpYyAtICVzIiwgbHApOwotCQkJICByZXR1cm4o LTkpOwotCQkgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg ICAgIH0KLSAgICAgICAgeSA9IGNtZmxkKCJudW1iZXIgb3IgdmFyaWFibGUgbmFtZSIsIiIsJnMs eHhzdHJpbmcpOwotICAgICAgICBpZiAoeSA9PSAtMykgewotICAgICAgICAgICAgcHJpbnRmKCI/ UXVhbnRpdHkgcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAg fQotICAgICAgICBpZiAoeSA8IDApIHJldHVybih5KTsKLSAgICAgICAgcyA9IGJyc3RyaXAocyk7 Ci0gICAgICAgIGlmICghKnMpIHJldHVybigtMik7Ci0gICAgICAgIGlmIChpZmMgPT0gWFhJRlZF KSB7Ci0gICAgICAgICAgICB0cCA9IGxpbmU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICB4ID0gKGludClzdHJsZW4obHApOwotICAgICAgICAgICAgdHAgPSBsaW5lICsgeCArIDI7Ci0g ICAgICAgIH0KLSAgICAgICAgY2tzdHJuY3B5KHRwLHMsTElOQlVGU0laLXgtMik7Ci0gICAgICAg IGRlYnVnKEYxMTAsInh4aWZndCBleHAyIix0cCwwKTsKLSAgICAgICAgaWYgKCFja3N0cmNtcCh0 cCwiY291bnQiLDUsMCkpIHsKLSAgICAgICAgICAgIG4yID0gKENLX09GRl9UKSBjb3VudFtjbWRs dmxdOwotICAgICAgICB9IGVsc2UgaWYgKCFja3N0cmNtcCh0cCwidmVyc2lvbiIsNywwKSkgewot ICAgICAgICAgICAgbjIgPSAoQ0tfT0ZGX1QpIHZlcm51bTsKLSAgICAgICAgfSBlbHNlIGlmICgh Y2tzdHJjbXAodHAsImFyZ2MiLDQsMCkpIHsKLSAgICAgICAgICAgIG4yID0gKENLX09GRl9UKSBt YWNhcmdjW21hY2x2bF07Ci0gICAgICAgIH0gZWxzZSB7Ci0jaWZkZWYgRk5GTE9BVAotICAgICAg ICAgICAgaWYgKGlzZmxvYXQodHAsMCkgPiAxKSB7Ci0gICAgICAgICAgICAgICAgZjIgPSBmbG9h dHZhbDsKLSAgICAgICAgICAgICAgICBmMmZsYWcgPSAxOwotICAgICAgICAgICAgfSBlbHNlCi0j ZW5kaWYgLyogRk5GTE9BVCAqLwotICAgICAgICAgICAgaWYgKGNoa251bSh0cCkpIHsKLSAgICAg ICAgICAgICAgICBuMiA9IGNrYXRvZnModHApOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg ICAgICAgICAgICBxID0gZXZhbGEodHApOwotCQlpZiAoY2hrbnVtKHEpKSB7CS8qIHdlJ3JlIG5v dCB1c2luZyBjbW51bSgpLiAqLwotCQkgICAgbjIgPSBja2F0b2ZzKHEpOwotCQl9IGVsc2Ugewot CQkgICAgcHJpbnRmKCI/VmFsdWUgbm90IG51bWVyaWMgLSAlcyIsIHRwKTsKLQkJICAgIHJldHVy bigtOSk7Ci0JCX0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB4eCA9IChpZmMg PT0gWFhJRlZFKSA/IFhYSUZHRSA6IGlmYzsKLQotI2lmZGVmIEZORkxPQVQKLSAgICAgICAgaWYg KGYxZmxhZyAmJiAhZjJmbGFnKSB7Ci0gICAgICAgICAgICBmMiA9IChDS0ZMT0FUKW4yOwotICAg ICAgICAgICAgZjJmbGFnID0gMTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZjJmbGFnICYmICFm MWZsYWcpCi0gICAgICAgICAgZjEgPSAoQ0tGTE9BVCluMTsKLSAgICAgICAgaWYgKGYxZmxhZykK LSAgICAgICAgICB6ID0gKChmMSA8ICBmMiAmJiB4eCA9PSBYWElGTFQpCi0gICAgICAgICAgICAg ICB8fCAoZjEgIT0gZjIgJiYgeHggPT0gWFhJRk5RKQotICAgICAgICAgICAgICAgfHwgKGYxIDw9 IGYyICYmIHh4ID09IFhYSUZMRSkKLSAgICAgICAgICAgICAgIHx8IChmMSA9PSBmMiAmJiB4eCA9 PSBYWElGQUUpCi0gICAgICAgICAgICAgICB8fCAoZjEgPj0gZjIgJiYgeHggPT0gWFhJRkdFKQot ICAgICAgICAgICAgICAgfHwgKGYxID4gIGYyICYmIHh4ID09IFhYSUZHVCkpOwotICAgICAgICBl bHNlCi0jZW5kaWYgLyogRk5GTE9BVCAqLwotICAgICAgICAgIHogPSAoKG4xIDwgIG4yICYmIHh4 ID09IFhYSUZMVCkKLSAgICAgICAgICAgICAgIHx8IChuMSAhPSBuMiAmJiB4eCA9PSBYWElGTlEp Ci0gICAgICAgICAgICAgICB8fCAobjEgPD0gbjIgJiYgeHggPT0gWFhJRkxFKQotICAgICAgICAg ICAgICAgfHwgKG4xID09IG4yICYmIHh4ID09IFhYSUZBRSkKLSAgICAgICAgICAgICAgIHx8IChu MSA+PSBuMiAmJiB4eCA9PSBYWElGR0UpCi0gICAgICAgICAgICAgICB8fCAobjEgPiAgbjIgJiYg eHggPT0gWFhJRkdUKSk7Ci0gICAgICAgIGRlYnVnKEYxMDEsInh4aWZnZSB6IiwiIix6KTsKLSAg ICAgICAgaWYgKGlmYyA9PSBYWElGVkUpCi0gICAgICAgICAgaWZhcmdzICs9IDI7Ci0gICAgICAg IGVsc2UKLSAgICAgICAgICBpZmFyZ3MgKz0gMzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0K LSAgICAgIGNhc2UgWFhJRk5VOiAgICAgICAgICAgICAgICAgICAgICAvKiBJRiBOVU1FUklDICov Ci0gICAgICAgIHggPSBjbWZsZCgidmFyaWFibGUgbmFtZSBvciBjb25zdGFudCIsIiIsJnMsTlVM TCk7Ci0gICAgICAgIGlmICh4ID09IC0zKSB7Ci0gICAgICAgICAgICBleHRlcm4gaW50IGNtZmxn czsKLSAgICAgICAgICAgIGlmIChjbWZsZ3MgPT0gMSkgewotICAgICAgICAgICAgICAgIHByaW50 ZigiP1F1YW50aXR5IHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwot ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHggPCAwKQotICAgICAgICAgIHJldHVy bih4KTsKLSAgICAgICAgeCA9IExJTkJVRlNJWi0xOwotICAgICAgICBscCA9IGxpbmU7Ci0gICAg ICAgIHp6c3RyaW5nKHMsJmxwLCZ4KTsKLSAgICAgICAgbHAgPSBsaW5lOwotICAgICAgICBkZWJ1 ZyhGMTEwLCJ4eGlmbnUgcXVhbnRpdHkiLGxwLDApOwotICAgICAgICB6ID0gY2hrbnVtKGxwKTsK LSNpZmRlZiBDT01NRU5UCi0vKgotICBUaGlzIHdvcmtzLCBidXQgaXQncyBub3Qgd2lzZSAtLSBJ RiBOVU1FUklDIGlzIG1vc3RseSB1c2VkIHRvIHNlZSBpZiBhCi0gIHN0cmluZyByZWFsbHkgZG9l cyBjb250YWluIG9ubHkgbnVtZXJpYyBjaGFyYWN0ZXJzLiAgSWYgdGhleSB3YW50IHRvIGZvcmNl Ci0gIGV2YWx1YXRpb24sIHRoZXkgY2FuIHVzZSBcZmV2YWwoKSBvbiB0aGUgYXJndW1lbnQgc3Ry aW5nLgotKi8KLSAgICAgICAgaWYgKCF6KSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3Qg YSBudW1iZXIgKi8KLSAgICAgICAgICAgIHhfaWZudW0gPSAxOyAgICAgICAgICAgICAgICAvKiBB dm9pZCAiZXZhbCIgZXJyb3IgbWVzc2FnZXMgKi8KLSAgICAgICAgICAgIHEgPSBldmFsYShscCk7 ICAgICAgICAgICAgICAvKiBNYXliZSBpdCdzIGFuIGV4cHJlc3Npb24gKi8KLSAgICAgICAgICAg IHogPSBjaGtudW0ocSk7ICAgICAgICAgICAgICAvKiB0aGF0IGV2YWx1YXRlcyB0byBhIG51bWJl ciAqLwotICAgICAgICAgICAgeF9pZm51bSA9IDA7ICAgICAgICAgICAgICAgIC8qIFB1dCBldmFs IG1lc3NhZ2VzIGJhY2sgdG8gbm9ybWFsICovCi0gICAgICAgICAgICBpZiAoeikgZGVidWcoRjEx MCwieHhpZm51IGV4cCIsbHAsMCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0g ICAgICAgIGRlYnVnKEYxMDEsInh4aWZudSBjaGtudW0iLCIiLHopOwotICAgICAgICBpZmFyZ3Mg Kz0gMjsKLSAgICAgICAgYnJlYWs7Ci0KLSNpZmRlZiBaRkNEQVQKLSAgICAgIGNhc2UgWFhJRk5F OiB7ICAgICAgICAgICAgICAgICAgICAvKiBJRiBORVdFUiAqLwotICAgICAgICBjaGFyIGQxWzIw XSwgKiBkMjsgICAgICAgICAgICAgIC8qIEJ1ZmZlcnMgZm9yIDIgZGF0ZXMgKi8KLSAgICAgICAg aWYgKCh6ID0gY21pZmkoIkZpcnN0IGZpbGUiLCIiLCZzLCZ5LHh4c3RyaW5nKSkgPCAwKQotICAg ICAgICAgIHJldHVybih6KTsKLSAgICAgICAgY2tzdHJuY3B5KGQxLHpmY2RhdChzKSwyMCk7Ci0g ICAgICAgIGlmICgoeiA9IGNtaWZpKCJTZWNvbmQgZmlsZSIsIiIsJnMsJnkseHhzdHJpbmcpKSA8 IDApCi0gICAgICAgICAgcmV0dXJuKHopOwotICAgICAgICBkMiA9IHpmY2RhdChzKTsKLSAgICAg ICAgaWYgKChpbnQpc3RybGVuKGQxKSAhPSAxNyB8fCAoaW50KXN0cmxlbihkMikgIT0gMTcpIHsK LSAgICAgICAgICAgIHByaW50ZigiP0ZhaWx1cmUgdG8gZ2V0IGZpbGUgZGF0ZVxuIik7Ci0gICAg ICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0gICAgICAgIGRlYnVnKEYxMTAsInh4aWZu ZXdlciBkMSIsZDEsMCk7Ci0gICAgICAgIGRlYnVnKEYxMTAsInh4aWZuZXdlciBkMiIsZDIsMCk7 Ci0gICAgICAgIHogPSAoc3RyY21wKGQxLGQyKSA+IDApID8gMSA6IDA7Ci0gICAgICAgIGRlYnVn KEYxMDEsInh4aWZuZXdlciIsIiIseik7Ci0gICAgICAgIGlmYXJncyArPSAyOwotICAgICAgICBi cmVhazsKLSAgICAgIH0KLSNlbmRpZiAvKiBaRkNEQVQgKi8KLQotI2lmZGVmIENLX0lGUk8KLSAg ICAgIGNhc2UgWFhJRlJPOiAgICAgICAgICAgICAgICAgICAgICAvKiBSRU1PVEUtT05MWSBhZHZp c29yeSAqLwotICAgICAgICBpZmFyZ3MrKzsKLSNpZmRlZiBOT0xPQ0FMCi0gICAgICAgIHogPSAx OwotI2Vsc2UKLSAgICAgICAgeiA9IHJlbW9ubHk7Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotICAg ICAgICBicmVhazsKLSNlbmRpZiAvKiBDS19JRlJPICovCi0KLSAgICAgIGNhc2UgWFhJRkFMOiAg ICAgICAgICAgICAgICAgICAgICAvKiBBTEFSTSAqLwotICAgICAgICBpZmFyZ3MrKzsKLSAgICAg ICAgZGVidWcoRjEwMSwiSUYgQUxBUk0gY2tfYWxhcm0iLCIiLGNrX2FsYXJtKTsKLSAgICAgICAg ZGVidWcoRjExMCwiSUYgQUxBUk0gYWxybV9kYXRlIixhbHJtX2RhdGUsMCk7Ci0gICAgICAgIGRl YnVnKEYxMTAsIklGIEFMQVJNIGFscm1fdGltZSIsYWxybV90aW1lLDApOwotCi0gICAgICAgIGlm IChja19hbGFybSA8IDFMIHx8IGFscm1fZGF0ZVswXSA8ICcwJyB8fCBhbHJtX3RpbWVbMF0gPCAn MCcpIHsKLSAgICAgICAgICAgIHogPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBBTEFSTSBu b3QgU0VUICovCi0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgLyogc28g SUYgQUxBUk0gZmFpbHMgKi8KLSAgICAgICAgfQotICAgICAgICAvKiBHZXQgY3VycmVudCBkYXRl IGFuZCB0aW1lICovCi0gICAgICAgIGNrc3RybmNweSh0bXBidWYsY2tjdnRkYXRlKCIiLDEpLFRN UEJVRlNJWik7Ci0gICAgICAgIHMgPSB0bXBidWY7Ci0gICAgICAgIHNbOF0gPSBOVUw7Ci0gICAg ICAgIHogPSAoaW50KSBzdHJuY21wKHRtcGJ1ZixhbHJtX2RhdGUsOCk7IC8qIENvbXBhcmUgZGF0 ZXMgKi8KLSAgICAgICAgZGVidWcoRjEwMSwiSUYgQUxBUk0gZGF0ZSB6IiwiIix6KTsKLSAgICAg ICAgaWYgKHogPT0gMCkgeyAgICAgICAgICAgICAgICAgICAvKiBEYXRlcyBhcmUgdGhlIHNhbWUg Ki8KLSAgICAgICAgICAgIC8qIENvbXBhcmUgdGltZXMgKi8KLSAgICAgICAgICAgIHogPSAodG9k MnNlYyh0bXBidWYrOSkgPj0gYXRvbChhbHJtX3RpbWUpKSA/IDEgOiAtMTsKLSAgICAgICAgICAg IGRlYnVnKEYxMDEsIklGIEFMQVJNIHRpbWUgeiIsIiIseik7Ci0gICAgICAgIH0KLSAgICAgICAg dG1wYnVmWzBdID0gTlVMOyAgICAgICAgICAgICAgICAvKiB6ID49IDAgaWYgYWxhcm0gaXMgcGFz c2VkICovCi0gICAgICAgIHogPSAoKHogPj0gMCkgPyAxIDogMCk7ICAgICAgICAgLyogeiA8ICAw IG90aGVyd2lzZSAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJJRiBBTEFSTSBmaW5hbCB6IiwiIix6 KTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgWFhJRk9QOiAgICAgICAgICAgICAgICAg ICAgICAvKiBJRiBPUEVOICovCi0gICAgICAgIGlmICgoeCA9IGNta2V5KGlvdGFiLG5pb3QsImZp bGUgb3IgbG9nIiwiIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAg ICAgIGlmICh4ID09IDk5OTkgfHwgeCA9PSBaU1RESU8pIHsKLSAgICAgICAgICAgIGJnY2hrKCk7 ICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBiYWNrZ3JvdW5kIHN0YXR1cyAqLwotICAgICAg ICAgICAgeiA9IHBmbGFnID8gMSA6IDA7Ci0gICAgICAgIH0gZWxzZSBpZiAoeCA9PSA4ODg4KSB7 Ci0gICAgICAgICAgICB6ID0gbG9jYWwgPyB0dGNoaygpID4gLTEgOiAwOwotI2lmZGVmIENLTE9H RElBTAotICAgICAgICB9IGVsc2UgaWYgKHggPT0gNzc3NykgewotICAgICAgICAgICAgZXh0ZXJu IGludCBkaWFsb2c7Ci0gICAgICAgICAgICB6ID0gZGlhbG9nID8gMSA6IDA7Ci0jZW5kaWYgLyog Q0tMT0dESUFMICovCi0gICAgICAgIH0gZWxzZQotICAgICAgICAgIHogPSAoY2hrZm4oeCkgPiAw KSA/IDEgOiAwOwotICAgICAgICBpZmFyZ3MgKz0gMTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAg IGNhc2UgWFhJRlNEOiAgICAgICAgICAgICAgICAgICAgICAvKiBTdGFydGVkLUZyb20tRGlhbGVy ICovCi0jaWZkZWYgT1MyCi0gICAgICAgIHogPSBTdGFydGVkRnJvbURpYWxlcjsKLSNlbHNlCi0g ICAgICAgIHogPSAwOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICBicmVhazsKLQotICAgICAg Y2FzZSBYWElGVE06ICAgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmFsLU1hY3JvICovCi0j aWZkZWYgT1MyCi0gICAgICAgIHogPSBjbWRzdGtbY21kbHZsXS5jY2ZsZ3MgJiBDRl9LTUFDOwot I2Vsc2UKLSAgICAgICAgeiA9IDA7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgIGJyZWFrOwot Ci0gICAgICBjYXNlIFhYSUZFTTogICAgICAgICAgICAgICAgICAgICAgLyogRW11bGF0aW9uIGlz IGFjdGl2ZSAqLwotI2lmZGVmIE9TMgotICAgICAgICB6ID0gMTsKLSNlbHNlCi0gICAgICAgIHog PSAwOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBYWElG SUs6ICAgICAgICAgICAgICAgICAgICAgIC8qIFJ1bm5pbmcgYXMgSUtTRD8gKi8KLSAgICAgICAg eiA9IGluc2VydmVyOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBYWElGVEE6ICAgICAg ICAgICAgICAgICAgICAgIC8qIENvbm5lY3Rpb24gaXMgVEFQSSAqLwotICAgICAgICB6ID0gMDsK LSNpZm5kZWYgTk9ESUFMCi0jaWZkZWYgQ0tfVEFQSQotICAgICAgICBpZiAobG9jYWwgJiYgIW5l dHdvcmsgJiYgdHR0YXBpKQotICAgICAgICAgIHogPSAxOwotI2VuZGlmIC8qIENLX1RBUEkgKi8K LSNlbmRpZiAvKiBOT0RJQUwgKi8KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgWFhJRk1B OiAgICAgICAgICAgICAgICAgICAgICAvKiBJRiBNQVRDSCAqLwotICAgICAgICB4ID0gY21mbGQo IlN0cmluZyBvciB2YXJpYWJsZSIsIiIsJnMseHhzdHJpbmcpOwotICAgICAgICBpZiAoeCA9PSAt MykgewotICAgICAgICAgICAgZXh0ZXJuIGludCBjbWZsZ3M7Ci0gICAgICAgICAgICBpZiAoY21m bGdzID09IDEpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9TdHJpbmcgcmVxdWlyZWRcbiIp OwotICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g ZWxzZSBpZiAoeCA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBja3N0cm5jcHko bGluZSxzLExJTkJVRlNJWik7Ci0gICAgICAgIHMgPSBicnN0cmlwKGxpbmUpOwotICAgICAgICBk ZWJ1ZyhGMTEwLCJ4eGlmbWEgc3RyaW5nIixsaW5lLDApOwotICAgICAgICB4ID0gY21mbGQoIlBh dHRlcm4iLCIiLCZwLHh4c3RyaW5nKTsKLSAgICAgICAgaWYgKHggPT0gLTMpIHsKLSAgICAgICAg ICAgIGV4dGVybiBpbnQgY21mbGdzOwotICAgICAgICAgICAgaWYgKGNtZmxncyA9PSAxKSB7Ci0g ICAgICAgICAgICAgICAgcHJpbnRmKCI/UGF0dGVybiByZXF1aXJlZFxuIik7Ci0gICAgICAgICAg ICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICh4IDwg MCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIGNrc3RybmNweSh0bXBidWYscCxUTVBC VUZTSVopOwotICAgICAgICBwID0gYnJzdHJpcCh0bXBidWYpOwotICAgICAgICBkZWJ1ZyhGMTEw LCJ4eGlmbWEgcGF0dGVybiIsdG1wYnVmLDApOwotICAgICAgICB6ID0gY2ttYXRjaChwLHMsaW5w Y2FzW2NtZGx2bF0sMSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFhYSUZGTDogeyAg ICAgICAgICAgICAgICAgICAgLyogSUYgRkxBRyAqLwotICAgICAgICAgIGV4dGVybiBpbnQgb29m bGFnOwotICAgICAgICAgIHogPSBvb2ZsYWc7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0g ICAgICBjYXNlIFhYSUZBVjogeyAgICAgICAgICAgICAgICAgICAgLyogSUYgQVZBSUxBQkxFICov Ci0gICAgICAgICAgaWYgKCh4ID0gY21rZXkoYXZhaWx0YWIsYXZhaWx0YWJuLCIiLCIiLHh4c3Ry aW5nKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgIHN3aXRjaCAoeCkg ewotICAgICAgICAgICAgY2FzZSBBVl9LUkI0OgotICAgICAgICAgICAgICB6ID0gY2tfa3JiNF9p c19pbnN0YWxsZWQoKTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFW X0tSQjU6Ci0gICAgICAgICAgICAgIHogPSBja19rcmI1X2lzX2luc3RhbGxlZCgpOwotICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQVZfU1JQOgotICAgICAgICAgICAgICB6 ID0gY2tfc3JwX2lzX2luc3RhbGxlZCgpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgIGNhc2UgQVZfU1NMOgotICAgICAgICAgICAgICB6ID0gY2tfc3NsZWF5X2lzX2luc3RhbGxl ZCgpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQVZfTlRMTToKLSAg ICAgICAgICAgICAgeiA9IGNrX250bG1faXNfaW5zdGFsbGVkKCk7Ci0gICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgY2FzZSBBVl9DUllQVE86Ci0gICAgICAgICAgICAgIHogPSBja19j cnlwdF9pc19pbnN0YWxsZWQoKTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj YXNlIEFWX1NTSDoKLSAgICAgICAgICAgICAgeiA9IGNrX3NzaF9pc19pbnN0YWxsZWQoKTsKLSAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICB6 ID0gMDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNl IFhYSUZBVDogICAgICAgICAgICAgICAgICAgICAgLyogSUYgQVNLVElNRU9VVCAqLwotICAgICAg ICB6ID0gYXNrdGltZWRvdXQ7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFhYSUZSRDog ICAgICAgICAgICAgICAgICAgICAgLyogSUYgUkVBREFCTEUgKi8KLSAgICAgIGNhc2UgWFhJRldS OiAgICAgICAgICAgICAgICAgICAgICAvKiBJRiBXUklURUFCTEUgKi8KLSAgICAgICAgaWYgKCh4 ID0gY21mbGQoIkZpbGUgb3IgZGlyZWN0b3J5IG5hbWUiLAotICAgICAgICAgICAgICAgICAgICAg ICAiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgJnMsCi0jaWZkZWYgT1MyCi0gICAgICAgICAg ICAgICAgICAgICAgIE5VTEwgICAgICAgICAgICAgLyogVGhpcyBhbGxvd3MgXCdzIGluIGZpbGVu YW1lcyAqLwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcKLSNlbmRpZiAv KiBPUzIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgKSkgPCAwKSB7Ci0gICAgICAgICAgICBp ZiAoeCA9PSAtMykgewotICAgICAgICAgICAgICAgIGV4dGVybiBpbnQgY21mbGdzOwotICAgICAg ICAgICAgICAgIGlmIChjbWZsZ3MgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYo Ij9GaWxlIG9yIGRpcmVjdG9yeSBuYW1lIHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgcmV0 dXJuKHgpOwotICAgICAgICB9Ci0gICAgICAgIHMgPSBicnN0cmlwKHMpOwotLyoKLSAgemNoa1tp b10oKSBkbyBub3QgZG8gd2hhdCB3ZSB3YW50IGhlcmUgZm9yIGRpcmVjdG9yaWVzLCBzbyB3ZSBz ZXQKLSAgYSBnbG9iYWwgZmxhZyB0ZWxsaW5nIGl0IHRvIGJlaGF2ZSBzcGVjaWFsbHkgaW4gdGhp cyBjYXNlLiAgT3RoZXdpc2UKLSAgd2UnZCBoYXZlIHRvIGNoYW5nZSB0aGUgQVBJIGFuZCBjaGFu Z2UgYWxsIGNrP2Zpby5jIG1vZHVsZXMgYWNjb3JkaW5nbHkuCi0qLwotICAgICAgICB5ID0gMDsg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRyeS1hZ2FpbiBjb250cm9sICovCi0jaWZkZWYg T1MyCi0gIGlmcmRhZ2FpbjoKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgaWYgKGlmYyA9PSBY WElGUkQpIHsgICAgICAgICAgICAvKiBJRiBSRUFEQUJMRSAqLwotICAgICAgICAgICAgemNoa2lk ID0gMTsKLSAgICAgICAgICAgIHogPSB6Y2hraShzKSA+IC0xOwotICAgICAgICAgICAgemNoa2lk ID0gMDsKLSAgICAgICAgfSBlbHNlIGlmIChpZmMgPT0gWFhJRldSKSB7ICAgICAvKiBJRiBXUklU RUFCTEUgKi8KLSAgICAgICAgICAgIHpjaGtvZCA9IDE7Ci0gICAgICAgICAgICB6ID0gemNoa28o cykgPiAtMTsKLSAgICAgICAgICAgIHpjaGtvZCA9IDA7Ci0gICAgICAgIH0KLSNpZmRlZiBPUzIK LSAgICAgICAgaWYgKCF6ICYmICF5KSB7ICAgICAgICAgICAgICAgICAvKiBGaWxlIG5vdCBmb3Vu ZC4gKi8KLSAgICAgICAgICAgIGludCB0OyAgICAgICAgICAgICAgICAgICAgICAvKiBUcnkgZXhw YW5kaW5nIHZhcmlhYmxlcyAqLwotICAgICAgICAgICAgdCA9IExJTkJVRlNJWi0xOyAgICAgICAg ICAgIC8qIGFuZCBsb29raW5nIGFnYWluLiAqLwotICAgICAgICAgICAgbHAgPSBsaW5lOwotICAg ICAgICAgICAgenpzdHJpbmcocywmbHAsJnQpOwotICAgICAgICAgICAgcyA9IGxpbmU7Ci0gICAg ICAgICAgICB6ID0gemNoa28ocykgPiAtMTsKLSAgICAgICAgICAgIHkrKzsKLSAgICAgICAgICAg IGdvdG8gaWZyZGFnYWluOwotICAgICAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgIGlm YXJncyArPSAyOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgWFhJRlFVOiAgICAgICAgICAg ICAgICAgICAgICAvKiBJRiBRVUlFVCAqLwotICAgICAgICB6ID0gcXVpZXQgPyAxIDogMDsKLSAg ICAgICAgZGVidWcoRjEwMSwiaWYgcXVpZXQiLCIiLHopOwotICAgICAgICBpZmFyZ3MgKz0gMTsK LSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgWFhJRldJOiAgICAgICAgICAgICAgICAgICAg ICAvKiBXSUxEICovCi0gICAgICAgIGlmICgoeCA9IGNtZmxkKCJGaWxlIHNwZWNpZmljYXRpb24i LCIiLCZzLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIHogPSBpc3dpbGQocyk7 Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFhYSUZDSzogICAgICAgICAgICAgICAgICAg ICAgLyogQy1LRVJNSVQgKi8KLSNpZmRlZiBPUzIKLSAgICAgICAgeiA9IDA7Ci0jZWxzZQotICAg ICAgICB6ID0gMTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNh c2UgWFhJRks5OiAgICAgICAgICAgICAgICAgICAgICAvKiBLLTk1ICovCi0jaWZkZWYgT1MyCi0g ICAgICAgIHogPSAxOwotI2Vsc2UKLSAgICAgICAgeiA9IDA7Ci0jZW5kaWYgLyogT1MyICovCi0g ICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFhYSUZHVTogICAgICAgICAgICAgICAgICAgICAg LyogR1VJICovCi0jaWZkZWYgS1VJCi0gICAgICAgIHogPSAxOwotI2Vsc2UKLSAgICAgICAgeiA9 IDA7Ci0jZW5kaWYgLyogS1VJICovCi0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFhYSUZN UzogICAgICAgICAgICAgICAgICAgICAgLyogTVMtS0VSTUlUICovCi0gICAgICAgIHogPSAwOwot ICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBYWElGTE86ICAgICAgICAgICAgICAgICAgICAg IC8qIElGIExPQ0FMICovCi0gICAgICAgIHogPSBsb2NhbCA/IDEgOiAwOwotICAgICAgICBicmVh azsKLQotICAgICAgY2FzZSBYWElGQ006IHsgICAgICAgICAgICAgICAgICAgIC8qIElGIENPTU1B TkQgKi8KLSAgICAgICAgICBleHRlcm4gc3RydWN0IGtleXRhYiBjbWR0YWJbXTsKLSAgICAgICAg ICBleHRlcm4gaW50IG5jbWQ7Ci0gICAgICAgICAgaWYgKCh4ID0gY21mbGQoIldvcmQiLCIiLCZz LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgIHogPSBs b29rdXAoY21kdGFiLHMsbmNtZCwmeSk7Ci0gICAgICAgICAgeiA9ICh6ID09IC0yIHx8IHogPiAt MSkgPyAxIDogMDsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSNpZmRlZiBDS0ZMT0FUCi0g ICAgICBjYXNlIFhYSUZGUDogICAgICAgICAgICAgICAgICAgICAgLyogSUYgRkxPQVQgKi8KLSAg ICAgICAgaWYgKCh4ID0gY21mbGQoIk51bWJlciIsIiIsJnMseHhzdHJpbmcpKSA8IDApCi0gICAg ICAgICAgaWYgKHggIT0gLTMpICAgICAgICAgICAgICAgICAgLyogZS5nLiBlbXB0eSB2YXJpYWJs ZSAqLwotICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICB6ID0gaXNmbG9hdChzLDApOwot ICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBDS0ZMT0FUICovCi0KLSAgICAgIGNhc2UgWFhJRktC OiAgICAgICAgICAgICAgICAgICAgICAvKiBLQkhJVCAqLwotICAgICAgICB6ID0gY29uY2hrKCk7 Ci0gICAgICAgIGlmICh6IDwgMCkgeiA9IDA7Ci0gICAgICAgIGlmICh6ID4gMSkgeiA9IDE7Ci0g ICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFhYSUZLRzogeyAgICAgICAgICAgICAgICAgICAg LyogS0VSQkFORyAqLwotICAgICAgICAgIGV4dGVybiBpbnQgY2ZpbGVmOwotI2lmZGVmIENPTU1F TlQKLSAgICAgICAgICB6ID0gKHhjbWRzcmMgPT0gMCkgPyAwIDogKGNmaWxlZiAmJiBjbWRsdmwg PT0gMSk7Ci0jZWxzZQotICAgICAgICAgIHogPSAoeGNtZHNyYyA9PSAwKSA/IDAgOiAoY2ZpbGVm ICYmIHRsZXZlbCA9PSAwKTsKLSNlbmRpZgkvKiBDT01NRU5UICovCi0gICAgICAgICAgYnJlYWs7 Ci0gICAgICB9Ci0KLSAgICAgIGNhc2UgWFhJRkRCOiB7CQkJLyogSUYgREVCVUcgLSAyMDEwLzAz LzE2ICovCi0gICAgICAgICAgZXh0ZXJuIGludCBkZWJtc2c7Ci0gICAgICAgICAgeiA9IGRlYm1z ZzsKLQkgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogU2hvdWxkbid0IGhhcHBlbiAqLwotICAgICAgICByZXR1cm4oLTIpOwotICAg IH0gLyogZW5kIG9mIHN3aXRjaCAqLwotCi0gICAgaWYgKHopCi0gICAgICAqYngrKyA9ICcxJzsK LSAgICBlbHNlCi0gICAgICAqYngrKyA9ICcwJzsKLSAgICAqYnggPSBOVUw7Ci0gICAgaWYgKGJ4 ID4gYm9vbHZhbCArIEJPT0xMRU4gLSAyKSB7Ci0gICAgICAgIHByaW50ZigiP0Jvb2xlYW4gZXhw cmVzc2lvbiB0b28gbG9uZyIpOwotICAgICAgICByZXR1cm4oLTkpOwotICAgIH0KLSAgICBlY291 bnQrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFeHByZXNzaW9uIGNvdW50ZXIgKi8K LSAgICBkZWJ1ZyhGMTAxLCJib29sZXhwIHBhcmVucyIsIiIscGFyZW5zKTsKLSAgICBkZWJ1ZyhG MTAxLCJib29sZXhwIHBjb3VudCIsIiIscGNvdW50KTsKLSAgICBpZiAocGFyZW5zICYmIHBjb3Vu dCA+IDApCi0gICAgICBnb3RvIGlmYWdhaW47Ci0KLSAgaWZlbmQ6ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBObyBtb3JlIC0gZG9uZSAqLwotICAgICpieCA9IE5VTDsKLSAgICB6 ID0gYXRvaShldmFseChib29sdmFsKSk7Ci0gICAgZGVidWcoRjExMSwiYm9vbGV4cCBib29sdmFs Iixib29sdmFsLHopOwotICAgIHJldHVybih6KTsKLX0KLQotLyogIEQgTyBJIEYgIC0tICBEbyB0 aGUgSUYgY29tbWFuZCAgKi8KLQotaW50Ci1kb2lmKGN4KSBpbnQgY3g7IHsKLSAgICBpbnQgeCwg eSwgejsgY2hhciAqcywgKnA7Ci0gICAgY2hhciAqcTsKLSNpZmRlZiBPUzIKLSAgICBleHRlcm4g aW50IGtleW1hYzsKLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgIGRlYnVnKEYxMDEsImRvaWYgY3gi LCIiLGN4KTsKLQotICAgIHogPSBib29sZXhwKGN4KTsgICAgICAgICAgICAgICAgICAgIC8qIEV2 YWx1YXRlIHRoZSBjb25kaXRpb24ocykgKi8KLSAgICBkZWJ1ZyhGMDEwLCJkb2lmIGNtZGJ1ZiIs Y21kYnVmLDApOwotICAgIGRlYnVnKEYxMDEsImRvaWYgYm9vbGV4cCIsIiIseik7Ci0gICAgaWYg KHogPCAwKQotICAgICAgcmV0dXJuKHopOwotCi0gICAgaWYgKGN4ID09IFhYSUYpIHsgICAgICAg ICAgICAgICAgICAgLyogQWxsb3cgSUYgdG8gaGF2ZSBYSUYgc2VtYW50aWNzLiAqLwotICAgICAg ICBjaGFyICogcDsKLSAgICAgICAgcCA9IGNtcGVlaygpOwotICAgICAgICBpZiAoIXApIHAgPSAi IjsKLSAgICAgICAgd2hpbGUgKCpwKSB7Ci0gICAgICAgICAgICBpZiAoKnAgPT0gU1AgfHwgKnAg PT0gSFQpCi0gICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCpwID09ICd7JykKLSAgICAgICAgICBj eCA9IFhYSUZYOwotICAgIH0KLSAgICBzd2l0Y2ggKGN4KSB7ICAgICAgICAgICAgICAgICAgICAg ICAvKiBTZXBhcmF0ZSBoYW5kbGluZyBmb3IgSUYgYW5kIFhJRiAqLwotCi0gICAgICBjYXNlIFhY QVNTRVI6ICAgICAgICAgICAgICAgICAgICAgLyogQW5kIEFTU0VSVCAqLwotICAgICAgICBpZiAo KHggPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICByZXR1cm4o c3VjY2VzcyA9IHopOwotCi0gICAgICBjYXNlIFhYSUY6ICAgICAgICAgICAgICAgICAgICAgICAg LyogVGhpcyBpcyBJRi4uLiAqLwotICAgICAgICBpZmNtZFtjbWRsdmxdID0gMTsgICAgICAgICAg ICAgIC8qIFdlIGp1c3QgY29tcGxldGVkIGFuIElGIGNvbW1hbmQgKi8KLSAgICAgICAgZGVidWco RjEwMSwiZG9pZiBjb25kaXRpb24iLCIiLHopOwotICAgICAgICBpZiAoeikgeyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIENvbmRpdGlvbiBpcyB0cnVlICovCi0gICAgICAgICAgICBpZnRlc3Rb Y21kbHZsXSA9IDE7ICAgICAgICAgLyogUmVtZW1iZXIgdGhhdCBJRiBzdWNjZWVkZWQgKi8KLSAg ICAgICAgICAgIGlmIChtYWNsdmwgPiAtMSkgeyAgICAgICAgICAvKiBJbiBtYWNybywgKi8KLSAg ICAgICAgICAgICAgICBwdXNoY21kKE5VTEwpOyAgICAgICAgICAvKiBzYXZlIHJlc3Qgb2YgY29t bWFuZC4gKi8KLSAgICAgICAgICAgIH0gZWxzZSBpZiAodGxldmVsID4gLTEpIHsgICAvKiBJbiB0 YWtlIGZpbGUsICovCi0gICAgICAgICAgICAgICAgZGVidWcoRjEwMCwgImRvaWY6IHB1c2hpbmcg Y29tbWFuZCIsICIiLCAwKTsKLSAgICAgICAgICAgICAgICBwdXNoY21kKE5VTEwpOyAgICAgICAg ICAvKiBzYXZlIHJlc3Qgb2YgY29tbWFuZC4gKi8KLSAgICAgICAgICAgIH0gZWxzZSB7ICAgICAg ICAgICAgICAgICAgICAvKiBJZiBpbnRlcmFjdGl2ZSwgKi8KLSAgICAgICAgICAgICAgICBjbWlu aShja3hlY2gpOyAgICAgICAgICAvKiBqdXN0IHN0YXJ0IGEgbmV3IGNvbW1hbmQgKi8KLSAgICAg ICAgICAgICAgICBwcmludGYoIlxuIik7ICAgICAgICAgICAvKiAobGlrZSBpbiBNUy1ET1MgS2Vy bWl0KSAqLwotICAgICAgICAgICAgICAgIGlmIChwZmxhZykgcHJvbXB0KHh4c3RyaW5nKTsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBD b25kaXRpb24gaXMgZmFsc2UgKi8KLSAgICAgICAgICAgIGlmdGVzdFtjbWRsdmxdID0gMDsgICAg ICAgICAvKiBSZW1lbWJlciBjb21tYW5kIGZhaWxlZC4gKi8KLSAgICAgICAgICAgIGlmICgoeSA9 IGNtdHh0KCJjb21tYW5kIHRvIGJlIGlnbm9yZWQiLCIiLCZzLE5VTEwpKSA8IDApCi0gICAgICAg ICAgICAgIHJldHVybih5KTsgICAgICAgICAgICAgICAgLyogR29iYmxlIHVwIHJlc3Qgb2YgbGlu ZSAqLwotICAgICAgICB9Ci0gICAgICAgIHJldHVybigwKTsKLQotICAgICAgY2FzZSBYWElGWDog eyAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgaXMgWElGIChFeHRlbmRlZCBJRikgKi8KLSAg ICAgICAgICBjaGFyICpwOwotICAgICAgICAgIGNoYXIgZVs1XTsKLSAgICAgICAgICBpbnQgaTsK LSAgICAgICAgICBpZiAoKHkgPSBjbXR4dCgiT2JqZWN0IGNvbW1hbmQiLCIiLCZzLE5VTEwpKSA8 IDApCi0gICAgICAgICAgICByZXR1cm4oeSk7ICAgICAgICAgICAgICAgICAgLyogR2V0IG9iamVj dCBjb21tYW5kLiAqLwotICAgICAgICAgIHAgPSBzOwotICAgICAgICAgIGxwID0gbGluZTsKLSAg ICAgICAgICBkZWJ1ZyhGMTEwLCJkb2lmIFRIRU4gcGFydCIscywtNTQpOwotICAgICAgICAgIGlm IChsaXRjbWQoJnAsJmxwLExJTkJVRlNJWiAtIDEpIDwgMCkgeyAvKiBRdW90ZSBUSEVOLXBhcnQg Ki8KLSAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZGVi dWcoRjExMSwiZG9pZiBUSEVOIHBhcnQgMiIsbGluZSx6KTsKLQotICAgICAgICAgIHdoaWxlICgq cCA9PSBTUCkgcCsrOyAgICAgICAgIC8qIFN0cmlwIHRyYWlsaW5nIHNwYWNlcyAqLwotICAgICAg ICAgIGlmY21kW2NtZGx2bF0gPSAwOyAgICAgICAgICAgIC8qIEFzc3VtZSBFTFNFIHBhcnQgaW4g c2FtZSBsaW5lICovCi0gICAgICAgICAgaWZ0ZXN0W2NtZGx2bF0gPSB6ID8gMSA6IDA7Ci0gICAg ICAgICAgaWYgKCpwKSB7ICAgICAgICAgICAgICAgICAgICAgLyogQXQgZW5kPyAqLwotICAgICAg ICAgICAgICBpZiAoIXopIHsgICAgICAgICAgICAgICAgIC8qIE5vLCB1c2UgRUxTRS1wYXJ0LCBp ZiBhbnkgKi8KLSAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIGVbaV0g PSAqcCsrOwotICAgICAgICAgICAgICAgICAgaWYgKGNrc3RyY21wKGUsImVsc2UiLDQsMCkpIC8q IFNlZSBpZiB3ZSBoYXZlIGFuIEVMU0UgKi8KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0y KTsgICAgICAgICAvKiBTb21ldGhpbmcgZWxzZSAtIGVycm9yLiAqLwotICAgICAgICAgICAgICAg ICAgZGVidWcoRjAxMCwiZG9pZiBFTFNFIGxpbmUgMSIscCwwKTsKLSAgICAgICAgICAgICAgICAg IHdoaWxlICgqcCA9PSBTUCkgcCsrOyAvKiBTa2lwIHNwYWNlcyAqLwotICAgICAgICAgICAgICAg ICAgaWYgKCpwICE9ICd7JykgeyAgICAgIC8qIEJyYWNlIEVMU0UgcGFydCBpZiBuZWNlc3Nhcnkg Ki8KLSAgICAgICAgICAgICAgICAgICAgICBja21ha21zZyh0bXBidWYsVE1QQlVGU0laLCJ7Iixw LCIgfSIsTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgICAgcCA9IHRtcGJ1ZjsKLSAgICAgICAg ICAgICAgICAgICAgICBkZWJ1ZyhGMDEwLCJkb2lmIEVMU0UgbGluZSAyIixwLDApOwotICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgbHAgPSBsaW5lOyAgICAgICAgICAgIC8q IFdyaXRlIG92ZXIgVEhFTiBwYXJ0Li4uICovCi0gICAgICAgICAgICAgICAgICAqbHAgPSBOVUw7 ICAgICAgICAgICAgLyogd2l0aCBFTFNFIHBhcnQuICovCi0gICAgICAgICAgICAgICAgICBpZiAo bGl0Y21kKCZwLCZscCxMSU5CVUZTSVogLSAyKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4oLTIpOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgd2hp bGUgKCpwID09IFNQKSBwKys7IC8qIFN0cmlwIHRyYWlsaW5nIHNwYWNlcyAqLwotICAgICAgICAg ICAgICAgICAgaWYgKCpwKSByZXR1cm4oLTIpOyAgIC8qIFNob3VsZCBiZSBub3RoaW5nIGhlcmUu ICovCi0gICAgICAgICAgICAgICAgICBkZWJ1ZyhGMDEwLCJkb2lmIEVMU0UgbGluZSAzIixsaW5l LDApOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAg ICAgICAgLyogQXQgZW5kLCB0cmVhdCBsaWtlIGFuIElGIGNvbW1hbmQgKi8KLSAgICAgICAgICAg ICAgaWYgKCF6KSBsaW5lWzBdID0gTlVMOyAgICAvKiBDb25kaXRpb24gbm90IHRydWUgYW5kIG5v IEVMU0UgKi8KLSAgICAgICAgICAgICAgaWZjbWRbY21kbHZsXSA9IDE7ICAgICAgICAvKiBBbGxv dyBFTFNFIG9uIG5leHQgbGluZSAqLwotICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJJRiBjb25k aXRpb24iLCIiLHopOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAobGluZVswXSkgewotICAg ICAgICAgICAgICB4ID0gbWxvb2sobWFjdGFiLCJfeGlmIixubWFjKTsgLyogR2V0IGluZGV4IG9m ICJfeGlmIiBtYWNyby4gKi8KLSAgICAgICAgICAgICAgaWYgKHggPCAwKSB7ICAgICAgICAgICAg ICAgICAgICAgIC8qIE5vdCB0aGVyZT8gKi8KLSAgICAgICAgICAgICAgICAgIGFkZG1tYWMoIl94 aWYiLHhpZl9kZWYpOyAgICAgIC8qIFB1dCBpdCBiYWNrLiAqLwotICAgICAgICAgICAgICAgICAg aWYgKG1sb29rKG1hY3RhYiwiX3hpZiIsbm1hYykgPCAwKSB7IC8qIExvb2sgaXQgdXAgYWdhaW4u ICovCi0gICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/WElGIG1hY3JvIGdvbmUhXG4iKTsK LSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGRvZG8oeCxsaW5lLGNtZHN0 a1tjbWRsdmxdLmNjZmxncyB8IENGX0lNQUMpOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1 cm4oMCk7Ci0gICAgICB9Ci0gICAgICBjYXNlIFhYV0hJOiB7ICAgICAgICAgICAgICAgICAgICAg LyogV0hJTEUgQ29tbWFuZCAqLwotICAgICAgICAgIHAgPSBjbWRidWY7ICAgICAgICAgICAgICAg ICAgIC8qIENhcHR1cmUgSUYgY29uZGl0aW9uICovCi0gICAgICAgICAgaWZjb25kWzBdID0gTlVM OyAgICAgICAgICAgICAgLyogZnJvbSBjb21tYW5kIGJ1ZmZlciAqLwotICAgICAgICAgIHdoaWxl ICgqcCA9PSBTUCkgcCsrOwotICAgICAgICAgIHdoaWxlICgqcCAhPSBTUCkgcCsrOwotICAgICAg ICAgIGlmY3AgPSBpZmNvbmQ7Ci0gICAgICAgICAgaWZjcCArPSBja3N0cm5jcHkoaWZjcCwieyBc XGZsaXQoaWYgKCBub3QgIixJRkNPTkRMRU4pOwotI2lmZGVmIENPTU1FTlQKLS8qCi0gIFRoaXMg ZG9lc24ndCB3b3JrIGJlY2F1c2UgaXQgYnJlYWtzIG9uIHRoZSBmaXJzdCBsZWZ0IGJyYWNlLCB3 aGljaCBkb2VzCi0gIG5vdCBuZWNlc3NhcmlseSBzdGFydCB0aGUgY29tbWFuZCBsaXN0LCBlLmcu ICJ3aGlsZSBlcXVhbCBcJWEge1wzNX0iLgotKi8KLSAgICAgICAgICB3aGlsZSAoKnAgIT0gJ3sn ICYmICpwICE9IE5VTCkgKmlmY3ArKyA9ICpwKys7Ci0gICAgICAgICAgcCA9ICIgKSBnb3RvIF8u LmJvdCkgfSAiOwotICAgICAgICAgIHdoaWxlICgqaWZjcCsrID0gKnArKykgOwotI2Vsc2UKLS8q Ci0gIFRoZSBjb21tYW5kIHBhcnNlciBzZXRzIGNtYnB0ciB0byB0aGUgc3BvdCB3aGVyZSBpdCBs ZWZ0IG9mZiBwYXJzaW5nIGluCi0gIHRoZSBjb21tYW5kIGJ1ZmZlci4KLSovCi0gICAgICAgICAg ewotICAgICAgICAgICAgICBleHRlcm4gY2hhciAqIGNtYnB0cjsKLSAgICAgICAgICAgICAgaWYg KGNtYnB0cikgewotICAgICAgICAgICAgICAgICAgd2hpbGUgKHAgPCBjbWJwdHIgJiYgKnAgIT0g TlVMKQotICAgICAgICAgICAgICAgICAgICAqaWZjcCsrID0gKnArKzsKLSAgICAgICAgICAgICAg ICAgIHAgPSAiICkgZ290byBfLi5ib3QpIH0gIjsKLSAgICAgICAgICAgICAgICAgIHdoaWxlICgo KmlmY3ArKyA9ICpwKyspKSA7Ci0gICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg ICAgICBwcmludGYoIj9JbnRlcm5hbCBlcnJvciBwYXJzaW5nIFdISUxFIGNvbmRpdGlvblxuIik7 Ci0gICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgICAgICAgIGRlYnVnKEYxMTAsIldISUxF IGNtZCIsaWZjb25kLDApOwotCi0gICAgICAgICAgaWYgKCh5ID0gY210eHQoIk9iamVjdCBjb21t YW5kIiwiIiwmcyxOVUxMKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuKHkpOyAgICAgICAgICAg ICAgICAgIC8qIEdldCBvYmplY3QgY29tbWFuZC4gKi8KLSAgICAgICAgICBwID0gczsKLSAgICAg ICAgICBscCA9IGxpbmU7Ci0gICAgICAgICAgaWYgKGxpdGNtZCgmcCwmbHAsTElOQlVGU0laIC0g MikgPCAwKSB7IC8qIFF1b3RlIG9iamVjdCBjb21tYW5kICovCi0gICAgICAgICAgICAgIHJldHVy bigtMik7Ci0gICAgICAgICAgfQotICAgICAgICAgIGRlYnVnKEYxMDEsIldISUxFIGJvZHkiLGxp bmUsLTU0KTsKLSAgICAgICAgICBpZiAobGluZVswXSkgewotICAgICAgICAgICAgICBjaGFyICpw OwotICAgICAgICAgICAgICB4ID0gbWxvb2sobWFjdGFiLCJfd2hpbGUiLG5tYWMpOyAvKiBpbmRl eCBvZiAiX3doaWxlIiBtYWNyby4gKi8KLSAgICAgICAgICAgICAgaWYgKHggPCAwKSB7ICAgICAg ICAgICAgICAvKiBOb3QgdGhlcmU/ICovCi0gICAgICAgICAgICAgICAgICBhZGRtbWFjKCJfd2hp bGUiLHdoaWxfZGVmKTsgLyogUHV0IGl0IGJhY2suICovCi0gICAgICAgICAgICAgICAgICBpZiAo bWxvb2sobWFjdGFiLCJfd2hpbGUiLG5tYWMpIDwgMCkgeyAvKiBMb29rIGl0IHVwIGFnYWluICov Ci0gICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/V0hJTEUgbWFjcm8gZGVmaW5pdGlvbiBn b25lIVxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBwID0gbWFs bG9jKChpbnQpc3RybGVuKGlmY29uZCkgKyAoaW50KXN0cmxlbihsaW5lKSArIDIpOwotICAgICAg ICAgICAgICBpZiAocCkgewotICAgICAgICAgICAgICAgICAgc3RyY3B5KHAsaWZjb25kKTsgICAg IC8qIHNhZmUgKHByZWNoZWNrZWQpICovCi0gICAgICAgICAgICAgICAgICBzdHJjYXQocCxsaW5l KTsgICAgICAgLyogc2FmZSAocHJlY2hlY2tlZCkgKi8KLSAgICAgICAgICAgICAgICAgIGRlYnVn KEYwMTAsIldISUxFIGRvZG8iLHAsMCk7Ci0gICAgICAgICAgICAgICAgICBkb2RvKHgscCxjbWRz dGtbY21kbHZsXS5jY2ZsZ3MgfCBDRl9JTUFDKTsKLSAgICAgICAgICAgICAgICAgIGZyZWUocCk7 Ci0gICAgICAgICAgICAgICAgICBwID0gTlVMTDsKLSAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg ICAgICAgICAgICAgICAgIHByaW50ZigiP0Nhbid0IGFsbG9jYXRlIHN0b3JhZ2UgZm9yIFdISUxF IGNvbW1hbmQiKTsKLSAgICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAg ICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuKDApOwotICAgICAgfQot ICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuKC0yKTsKLSAgICB9Ci19Ci0jZW5kaWYgLyog Tk9TUEwgKi8KLQotLyogU2V0IHVwIGEgVEFLRSBjb21tYW5kIGZpbGUgKi8KLQotaW50Ci1kb3Rh a2UocykgY2hhciAqczsgewotI2lmbmRlZiBOT1NQTAotICAgIGV4dGVybiBpbnQgdHJhX2NtZDsK LSNlbmRpZiAvKiBOT1NQTCAqLwotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0gICAgZXh0 ZXJuIGludCB0ZXJtX2lvOwotICAgIGludCB0ZXJtX2lvX3NhdiA9IHRlcm1faW87Ci0jZW5kaWYg LyogT1MyICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotICAgIGludCBzbGVuOwotCi0gICAgZGVi dWcoRjExMCwiZG90YWtlIixzLDApOwotICAgIGlmICghcykgcyA9ICIiOwotICAgIGlmICghKnMp IHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgc2xlbiA9IHN0cmxlbihzKTsKLSAgICBkZWJ1ZyhG MTAxLCJkb3Rha2UgbGVuIiwiIixzbGVuKTsKLQotICAgIGlmICgodGZpbGVbKyt0bGV2ZWxdID0g Zm9wZW4ocywiciIpKSA9PSBOVUxMKSB7Ci0gICAgICAgIHBlcnJvcihzKTsKLSAgICAgICAgZGVi dWcoRjExMCwiZG90YWtlIGZhaWwiLHMsMCk7Ci0gICAgICAgIHRsZXZlbC0tOwotICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHRmbGluZVt0bGV2ZWxd ID0gMDsgICAgICAgICAgICAgLyogTGluZSBjb3VudGVyICovCi0jaWZkZWYgVk1TCi0gICAgICAg IGNvbnJlcygpOyAgICAgICAgICAgICAgICAgICAgICAgLyogU28gQ3RybC1DIHdpbGwgd29yayAq LwotI2VuZGlmIC8qIFZNUyAqLwotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0gICAgICAg IHRlcm1faW8gPSAwOyAgICAgICAgICAgICAgICAgICAgLyogRGlzYWJsZSBUZXJtaW5hbCBFbXVs YXRvciBJL08gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jaWZu ZGVmIE5PU1BMCi0gICAgICAgIGNtZGx2bCsrOyAgICAgICAgICAgICAgICAgICAgICAgLyogRW50 ZXJpbmcgYSBuZXcgY29tbWFuZCBsZXZlbCAqLwotICAgICAgICBkZWJ1ZyhGMTExLCJDTUQgK0Yi LHMsY21kbHZsKTsKLSAgICAgICAgZGVidWcoRjEwMSwiZG90YWtlIGNtZGx2bCIsIiIsY21kbHZs KTsKLSAgICAgICAgZGVidWcoRjEwMSwiZG90YWtlIHRsZXZlbCIsIiIsdGxldmVsKTsKLSAgICAg ICAgaWYgKGNtZGx2bCA+IENNRFNUS0wpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsImRvdGFr ZSBzdGFjayBvdmVyZmxvdyIsIiIsMCk7Ci0gICAgICAgICAgICBjbWRsdmwtLTsKLSAgICAgICAg ICAgIGRlYnVnKEYxMTEsIkNNRCotRiIscyxjbWRsdmwpOwotICAgICAgICAgICAgZmNsb3NlKHRm aWxlW3RsZXZlbC0tXSk7Ci0gICAgICAgICAgICBwcmludGYoIj9UQUtFIGZpbGVzIGFuZC9vciBE TyBjb21tYW5kcyBuZXN0ZWQgdG9vIGRlZXBseVxuIik7Ci0gICAgICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDApOwotICAgICAgICB9Ci0gICAgICAgIGlmICh0Zm5hbVt0bGV2ZWxdKSB7ICAgICAg ICAgICAgLyogQ29weSB0aGUgZmlsZW5hbWUgKi8KLSAgICAgICAgICAgIGZyZWUodGZuYW1bdGxl dmVsXSk7Ci0gICAgICAgICAgICB0Zm5hbVt0bGV2ZWxdID0gTlVMTDsKLSAgICAgICAgfQotICAg ICAgICBpZiAoKHRmbmFtW3RsZXZlbF0gPSBtYWxsb2Moc3RybGVuKHMpICsgMSkpKSB7Ci0gICAg ICAgICAgICBzdHJjcHkodGZuYW1bdGxldmVsXSxzKTsgICAgLyogc2FmZSAqLwotICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgcHJpbnRmKCI/TWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxu Iik7Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAgICB9Ci0gICAgICAg IGlmY21kW2NtZGx2bF0gPSAwOyAgICAgICAgICAgICAgLyogU2V0IHZhcmlhYmxlcyBmb3IgdGhp cyBjbWQgZmlsZSAqLwotICAgICAgICBpZnRlc3RbY21kbHZsXSA9IDA7Ci0gICAgICAgIGNvdW50 W2NtZGx2bF0gID0gY291bnRbY21kbHZsLTFdOyAgLyogSW5oZXJpdCB0aGlzICovCi0gICAgICAg IGludGltZVtjbWRsdmxdID0gaW50aW1lW2NtZGx2bC0xXTsgLyogSW5oZXJpdCB0aGlzICovCi0g ICAgICAgIGlucGNhc1tjbWRsdmxdID0gaW5wY2FzW2NtZGx2bC0xXTsgLyogSW5oZXJpdCB0aGlz ICovCi0gICAgICAgIHRha2VycltjbWRsdmxdID0gdGFrZXJyW2NtZGx2bC0xXTsgLyogSW5oZXJp dCB0aGlzICovCi0gICAgICAgIG1lcnJvcltjbWRsdmxdID0gbWVycm9yW2NtZGx2bC0xXTsgLyog SW5oZXJpdCB0aGlzICovCi0gICAgICAgIHhxdWlldFtjbWRsdmxdID0gcXVpZXQ7Ci0gICAgICAg IHh2YXJldltjbWRsdmxdID0gdmFyZXZhbDsKLSAgICAgICAgeGNtZHNyYyA9IENNRF9URjsKLSAg ICAgICAgY21kc3RrW2NtZGx2bF0uc3JjID0gQ01EX1RGOyAgICAvKiBTYXkgd2UncmUgaW4gYSBU QUtFIGZpbGUgKi8KLSAgICAgICAgY21kc3RrW2NtZGx2bF0ubHZsID0gdGxldmVsOyAgICAvKiBu ZXN0ZWQgYXQgdGhpcyBsZXZlbCAqLwotICAgICAgICBjbWRzdGtbY21kbHZsXS5jY2ZsZ3MgPSBj bWRzdGtbY21kbHZsLTFdLmNjZmxnczsKLSNlbHNlCi0gICAgICAgIHRha2Vyclt0bGV2ZWxdID0g dGFrZXJyW3RsZXZlbC0xXTsgLyogSW5oZXJpdCB0aGlzICovCi0jZW5kaWYgLyogTk9TUEwgKi8K LSAgICB9Ci0jaWZuZGVmIE5PU1BMCi0gICAgaWYgKHRyYV9jbWQpCi0gICAgICBwcmludGYoIlsl ZF0gK0Y6IFwiJXNcIlxuIixjbWRsdmwscyk7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZm5kZWYg Tk9MT0NBTAotI2lmZGVmIE9TMgotICAgIHRlcm1faW8gPSB0ZXJtX2lvX3NhdjsKLSNlbmRpZiAv KiBPUzIgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0gICAgcmV0dXJuKDEpOwotfQotI2VuZGlm IC8qIE5PSUNQICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQt OS4wLjMwMi9ja3V1czcuYyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIv Y2t1dXM3LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlNzRhYjYuLjAwMDAwMDAK LS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1czcuYworKysg L2Rldi9udWxsCkBAIC0xLDE1MzIzICswLDAgQEAKLSNpbmNsdWRlICJja2NzeW0uaCIKLQotLyog IEMgSyBVIFUgUyA3IC0tICAiVXNlciBJbnRlcmZhY2UiIGZvciBDLUtlcm1pdCwgcGFydCA3ICAq LwotCi0vKgotICBBdXRob3JzOgotICAgIEZyYW5rIGRhIENydXogPGZkY0Bjb2x1bWJpYS5lZHU+ LAotICAgICAgVGhlIEtlcm1pdCBQcm9qZWN0LCBDb2x1bWJpYSBVbml2ZXJzaXR5LCBOZXcgWW9y ayBDaXR5Ci0gICAgSmVmZnJleSBFIEFsdG1hbiA8amFsdG1hbkBzZWN1cmUtZW5kcG9pbnRzLmNv bT4KLSAgICAgIFNlY3VyZSBFbmRwb2ludHMgSW5jLiwgTmV3IFlvcmsgQ2l0eQotCi0gIENvcHly aWdodCAoQykgMTk4NSwgMjAxMSwKLSAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5 IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgotICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUg dGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCi0gICAgY29weXJpZ2h0IHRleHQg aW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCi0q LwotCi0vKgotICBUaGlzIGZpbGUgY3JlYXRlZCBmcm9tIHBhcnRzIG9mIGNrdXVzMy5jLCB3aGlj aCBiZWNhbWUgdG9vIGJpZyBmb3IKLSAgTWFyayBXaWxsaWFtcyBDb2hlcmVudCBjb21waWxlciB0 byBoYW5kbGUuCi0qLwotCi0vKgotICBEZWZpbml0aW9ucyBoZXJlIHN1cGVyc2VkZSB0aG9zZSBm cm9tIHN5c3RlbSBpbmNsdWRlIGZpbGVzLgotKi8KLSNpbmNsdWRlICJja2NkZWIuaCIgICAgICAg ICAgICAgICAgICAgICAvKiBEZWJ1Z2dpbmcgJiBjb21waWxlciB0aGluZ3MgKi8KLSNpbmNsdWRl ICJja2Nhc2MuaCIgICAgICAgICAgICAgICAgICAgICAvKiBBU0NJSSBjaGFyYWN0ZXIgc3ltYm9s cyAqLwotI2luY2x1ZGUgImNrY2tlci5oIiAgICAgICAgICAgICAgICAgICAgIC8qIEtlcm1pdCBh cHBsaWNhdGlvbiBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgImNrY3hsYS5oIiAgICAgICAgICAg ICAgICAgICAgIC8qIENoYXJhY3RlciBzZXQgdHJhbnNsYXRpb24gKi8KLSNpbmNsdWRlICJja2Nu ZXQuaCIgICAgICAgICAgICAgICAgICAgICAvKiBOZXR3b3JrIHN5bWJvbHMgKi8KLSNpbmNsdWRl ICJja3V1c3IuaCIgICAgICAgICAgICAgICAgICAgICAvKiBVc2VyIGludGVyZmFjZSBzeW1ib2xz ICovCi0jaW5jbHVkZSAiY2t1Y21kLmgiCi0jaW5jbHVkZSAiY2tjbGliLmgiCi0KLSNpZmRlZiBW TVMKLSNpZm5kZWYgVENQU09DS0VUCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNlbmRpZiAvKiBUQ1BT T0NLRVQgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQotI2lmZGVmIE9TMgotI2lmbmRlZiBOVAotI2Rl ZmluZSBJTkNMX05PUE0KLSNkZWZpbmUgSU5DTF9WSU8gICAgICAgICAgICAgICAgICAgICAgICAv KiBOZWVkZWQgZm9yIGNrb2Nvbi5oICovCi0jZGVmaW5lIElOQ0xfRE9TTU9EVUxFTUdSCi0jaW5j bHVkZSA8b3MyLmg+Ci0jdW5kZWYgQ09NTUVOVAotI2Vsc2UgLyogTlQgKi8KLSNkZWZpbmUgQVBJ UkVUIFVMT05HCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHRhcGkuaD4KLSNpbmNs dWRlICJja253aW4uaCIKLSNpbmNsdWRlICJja250YXAuaCIKLSNlbmRpZiAvKiBOVCAqLwotI2lu Y2x1ZGUgImNrb3dpbi5oIgotI2luY2x1ZGUgImNrb2Nvbi5oIgotI2luY2x1ZGUgImNrb2Rpci5o IgotI2lmZGVmIE9TMk1PVVNFCi0jaW5jbHVkZSAiY2tva2V5LmgiCi0jZW5kaWYgLyogT1MyTU9V U0UgKi8KLSNpZmRlZiBLVUkKLSNpbmNsdWRlICJpa3VpLmgiCi0jZW5kaWYgLyogS1VJICovCi0j aWZkZWYgcHV0Y2hhcgotI3VuZGVmIHB1dGNoYXIKLSNlbmRpZiAvKiBwdXRjaGFyICovCi0jZGVm aW5lIHB1dGNoYXIoeCkgY29ub2MoeCkKLWV4dGVybiBpbnQgbXNra2V5czsKLWV4dGVybiBpbnQg bXNrcmVuYW1lOwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04K LSNpbmNsdWRlICJja3VhdGguaCIKLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotI2lm ZGVmIENLX1NTTAotI2luY2x1ZGUgImNrX3NzbC5oIgotI2VuZGlmIC8qIENLX1NTTCAqLwotI2lm ZGVmIFNTSEJVSUxUSU4KLSNpbmNsdWRlICJja29zc2guaCIKLSNlbmRpZiAvKiBTU0hCVUlMVElO ICovCi0jaWZkZWYgU1RSQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3RyYXR1cyBD b21wdXRlciwgSW5jLiAgVk9TICovCi0jaWZkZWYgcHV0Y2hhcgotI3VuZGVmIHB1dGNoYXIKLSNl bmRpZiAvKiBwdXRjaGFyICovCi0jZGVmaW5lIHB1dGNoYXIoeCkgY29ub2MoeCkKLSNpZmRlZiBn ZXRjaGFyCi0jdW5kZWYgZ2V0Y2hhcgotI2VuZGlmIC8qIGdldGNoYXIgKi8KLSNkZWZpbmUgZ2V0 Y2hhcih4KSBjb25pbmMoMCkKLSNlbmRpZiAvKiBTVFJBVFVTICovCi0KLWNoYXIgKiBzbG1zZyA9 IE5VTEw7Ci0KLXN0YXRpYyBpbnQgeCwgeSA9IDAsIHo7Ci1zdGF0aWMgY2hhciAqczsKLQotZXh0 ZXJuIENIQVIgZmVvbDsKLWV4dGVybiBpbnQgZ19tYXRjaGRvdCwgaGludHMsIHhjbWRzcmMsIHJj ZGFjdGl2ZTsKLQotZXh0ZXJuIGNoYXIgKiBrX2luZm9fZGlyOwotCi0jaWZkZWYgQ0tfTE9HSU4K LSNpZmRlZiBDS19QQU0KLWludCBnb3RlbXB0eXBhc3N3ZCA9IDA7ICAgLyogZGlzdGluZ3Vpc2gg ZW1wdHkgcGFzc3dkIGZyb20gbm9uZSBnaXZlbiAqLwotI2VuZGlmIC8qIENLX1BBTSAqLwotI2Vu ZGlmIC8qIENLX0xPR0lOICovCi0KLSNpZm5kZWYgTk9TUEwKLWV4dGVybiBpbnQgbm1hYzsKLWV4 dGVybiBzdHJ1Y3QgbXRhYiAqbWFjdGFiOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5kZWYg Tk9YRkVSCi0jaWZkZWYgQ0tfU1BFRUQKLWV4dGVybiBzaG9ydCBjdGxwW107ICAgICAgICAgICAg ICAgICAgICAvKiBDb250cm9sLWNoYXIgcHJlZml4aW5nIHRhYmxlICovCi0jZW5kaWYgLyogQ0tf U1BFRUQgKi8KLQotI2lmZGVmIFBJUEVTRU5ECi1leHRlcm4gY2hhciAqIHNuZGZpbHRlciwgKiBn X3NmaWx0ZXI7Ci1leHRlcm4gY2hhciAqIHJjdmZpbHRlciwgKiBnX3JmaWx0ZXI7Ci0jZW5kaWYg LyogUElQRVNFTkQgKi8KLQotZXh0ZXJuIGNoYXIgKiBzbmRfbW92ZTsKLWV4dGVybiBjaGFyICog c25kX3JlbmFtZTsKLWV4dGVybiBjaGFyICogZ19zbmRfbW92ZTsKLWV4dGVybiBjaGFyICogZ19z bmRfcmVuYW1lOwotZXh0ZXJuIGNoYXIgKiByY3ZfbW92ZTsKLWV4dGVybiBjaGFyICogcmN2X3Jl bmFtZTsKLWV4dGVybiBjaGFyICogZ19yY3ZfbW92ZTsKLWV4dGVybiBjaGFyICogZ19yY3ZfcmVu YW1lOwotCi0jaWZkZWYgUEFUVEVSTlMKLWV4dGVybiBjaGFyICpiaW5wYXR0ZXJuc1tdLCAqdHh0 cGF0dGVybnNbXTsKLWV4dGVybiBpbnQgcGF0dGVybnM7Ci0jZW5kaWYgLyogUEFUVEVSTlMgKi8K LQotZXh0ZXJuIGNoYXIgKiByZW1kZXN0OwotI2lmZGVmIENLX1RNUERJUgotY2hhciAqIGRsZGly ID0gTlVMTDsKLSNlbmRpZiAvKiBDS19UTVBESVIgKi8KLQotZXh0ZXJuIHN0cnVjdCBja19wIHB0 YWJbXTsKLQotZXh0ZXJuIGludCBwcm90b2NvbCwgcmVtZmlsZSwgcmVtcGlwZSwgcmVtYXBwZCwg cmVsaWFibGUsIHhyZWxpYWJsZSwgZm1hc2ssCi0gIGZuY252LCBmcmVjbCwgbWF4cnBzLCB3c2xv dHIsIGJpZ3Nic2l6LCBiaWdyYnNpeiwgdXJwc2l6LCBycHNpeiwgc3BzaXosCi0gIGJjdHIsIG5w YWQsIHRpbWVmLCB0aW1pbnQsIHNwc2l6ciwgc3BzaXpmLCBtYXhzcHMsIHNwbWF4LCBuZmlscywg ZGlzcGxhLAotICBhdGNhcHIsIHBrdHRpbSwgcnRpbW8sIGZuY2FjdCwgbXlwYWRuLCBmZGlzcGxh LCBmX3NhdmUsIHBrdHBhdXMsIHNldHJlbGlhYmxlLAotICBmbnJwYXRoLCBmbnNwYXRoLCBhdGVu Y2ksIGF0ZW5jbywgYXRkYXRpLCBhdGRhdG8sIGF0bGVuaSwgYXRsZW5vLCBhdGJsa2ksCi0gIGF0 YmxrbywgYXR0eXBpLCBhdHR5cG8sIGF0c2lkaSwgYXRzaWRvLCBhdHN5c2ksIGF0c3lzbywgYXRk aXNpLCBhdGRpc287Ci0KLWV4dGVybiBpbnQgc3RhdGhhY2s7Ci0KLWV4dGVybiBpbnQgYXRmcm1p LCBhdGZybW87Ci0jaWZkZWYgU1RSQVRVUwotZXh0ZXJuIGludCBhdGNyZWksIGF0Y3JlbywgYXRh Y3RpLCBhdGFjdG87Ci0jZW5kaWYgLyogU1RSQVRVUyAqLwotI2lmZGVmIENLX1BFUk1TCi1leHRl cm4gaW50IGF0bHByaSwgYXRscHJvLCBhdGdwcmksIGF0Z3BybzsKLSNlbmRpZiAvKiBDS19QRVJN UyAqLwotCi1leHRlcm4gQ0hBUgotICBzc3RhdGUsIGVvbCwgc2VvbCwgc3RjaHIsIG15c3RjaCwg bXlwYWRjLCBwYWRjaCwgY3RscSwgbXljdGxxOwotCi0jaWZkZWYgSUtTRAotZXh0ZXJuIGludCBp bnNlcnZlcjsKLSNpZmRlZiBJS1NEQ09ORgotZXh0ZXJuIGludCBpa3NkY2Y7Ci0jZW5kaWYgLyog SUtTRENPTkYgKi8KLSNlbmRpZiAvKiBJS1NEICovCi0KLWV4dGVybiBjaGFyICpjbWFyZywgKmNt YXJnMjsKLQotI2lmbmRlZiBOT0ZSSUxMUwotZXh0ZXJuIGNoYXIgb3B0YnVmW107ICAgICAgICAg ICAgICAgICAgIC8qIEJ1ZmZlciBmb3IgTUFJTCBvciBQUklOVCBvcHRpb25zICovCi1leHRlcm4g aW50IHJwcmludGY7ICAgICAgICAgICAgICAgICAgICAgLyogUkVNT1RFIFBSSU5UIGZsYWcgKi8K LSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZkZWYgQ0tf VFJJR0dFUgotZXh0ZXJuIGNoYXIgKiB0dF90cmlnZ2VyW107Ci0jZW5kaWYgLyogQ0tfVFJJR0dF UiAqLwotCi1leHRlcm4gaW50IHRjc190cmFuc3A7Ci0jaWZkZWYgUENURVJNCi1leHRlcm4gaW50 IHR0X3BjdGVybTsKLSNlbmRpZiAvKiBQQ1RFUk0gKi8KLSNpZmRlZiBOVAotZXh0ZXJuIGludCB0 dF92dG50OwotI2VuZGlmIC8qIE5UICovCi0KLSNpZmRlZiBTU0hCVUlMVElOCi1pbnQgc2xfc3No X3hmdyA9IDA7Ci1pbnQgc2xfc3NoX3hmd19zYXZlZCA9IDA7Ci1pbnQgc2xfc3NoX3ZlciA9IDA7 Ci1pbnQgc2xfc3NoX3Zlcl9zYXZlZCA9IDA7Ci0jZW5kaWYgLyogU1NIQlVJTFRJTiAqLwotCi0j aWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KLWV4dGVybiBpbnQgYXV0aF90eXBlX3VzZXJbXTsKLWlu dCBzbF9hdXRoX3R5cGVfdXNlcltBVVRIVFlQTFNUU1pdID0ge0FVVEhUWVBFX05VTEwsIEFVVEhU WVBFX05VTEx9OwotaW50IHNsX2F1dGhfc2F2ZWQgPSAwOwotaW50IHNsX3RvcHRfYV9zdSA9IDA7 Ci1pbnQgc2xfdG9wdF9hX3Nfc2F2ZWQgPSAwOwotaW50IHNsX3RvcHRfYV9jbSA9IDA7Ci1pbnQg c2xfdG9wdF9hX2Nfc2F2ZWQgPSAwOwotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0j aWZkZWYgQ0tfRU5DUllQVElPTgotZXh0ZXJuIGludCBjeF90eXBlOwotaW50IHNsX2N4X3R5cGUg PSAwOwotaW50IHNsX2N4X3NhdmVkID0gMDsKLWludCBzbF90b3B0X2Vfc3UgPSAwOwotaW50IHNs X3RvcHRfZV9zbSA9IDA7Ci1pbnQgc2xfdG9wdF9lX3Nfc2F2ZWQgPSAwOwotaW50IHNsX3RvcHRf ZV9jdSA9IDA7Ci1pbnQgc2xfdG9wdF9lX2NtID0gMDsKLWludCBzbF90b3B0X2VfY19zYXZlZCA9 IDA7Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotZXh0ZXJuIGNoYXIgdWlkYnVmW107Ci1z dGF0aWMgaW50IHVpZGZsYWcgPSAwOwotY2hhciBzbF91aWRidWZbVUlEQlVGTEVOXSA9IHsgTlVM LCBOVUwgfTsKLWludCAgc2xfdWlkX3NhdmVkID0gMDsKLSNpZmRlZiBUTkNPREUKLWludCAgc2xf dG5fd2FpdCA9IDA7Ci1pbnQgIHNsX3RuX3NhdmVkID0gMDsKLSNlbmRpZiAvKiBUTkNPREUgKi8K LQotI2lmZGVmIFROQ09ERQotZXh0ZXJuIGludCB0bl93YWl0X2ZsZzsKLSNlbmRpZiAvKiBUTkNP REUgKi8KLQotVk9JRAotc2xyZXN0b3IoKSB7Ci0jaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KLSAg ICBpbnQgeDsKLSAgICBpZiAoc2xfYXV0aF9zYXZlZCkgewotICAgICAgICBmb3IgKHggPSAwOyB4 IDwgQVVUSFRZUExTVFNaOyB4KyspCi0gICAgICAgICAgYXV0aF90eXBlX3VzZXJbeF0gPSBzbF9h dXRoX3R5cGVfdXNlclt4XTsKLSAgICAgICAgc2xfYXV0aF9zYXZlZCA9IDA7Ci0gICAgfQotICAg IGlmIChzbF90b3B0X2Ffc19zYXZlZCkgewotICAgICAgICBURUxPUFRfREVGX1NfVV9NT0RFKFRF TE9QVF9BVVRIRU5USUNBVElPTikgPSBzbF90b3B0X2Ffc3U7Ci0gICAgICAgIHNsX3RvcHRfYV9z X3NhdmVkID0gMDsKLSAgICB9Ci0gICAgaWYgKHNsX3RvcHRfYV9jX3NhdmVkKSB7Ci0gICAgICAg IFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9BVVRIRU5USUNBVElPTikgPSBzbF90b3B0X2Ff Y207Ci0gICAgICAgIHNsX3RvcHRfYV9jX3NhdmVkID0gMDsKLSAgICB9Ci0jZW5kaWYgLyogQ0tf QVVUSEVOVElDQVRJT04gKi8KLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgaWYgKHNsX2N4X3Nh dmVkKSB7Ci0gICAgICAgIGN4X3R5cGUgPSBzbF9jeF90eXBlOwotICAgICAgICBzbF9jeF9zYXZl ZCA9IDA7Ci0gICAgfQotICAgIGlmIChzbF90b3B0X2Vfc19zYXZlZCkgewotICAgICAgICBURUxP UFRfREVGX1NfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSAgPSBzbF90b3B0X2Vfc3U7Ci0gICAg ICAgIFRFTE9QVF9ERUZfU19NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IHNsX3RvcHRfZV9z bTsKLSAgICAgICAgc2xfdG9wdF9lX3Nfc2F2ZWQgPSAwOwotICAgIH0KLSAgICBpZiAoc2xfdG9w dF9lX2Nfc2F2ZWQpIHsKLSAgICAgICAgVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfRU5DUllQ VElPTikgID0gc2xfdG9wdF9lX2N1OwotICAgICAgICBURUxPUFRfREVGX0NfTUVfTU9ERShURUxP UFRfRU5DUllQVElPTikgPSBzbF90b3B0X2VfY207Ci0gICAgICAgIHNsX3RvcHRfZV9jX3NhdmVk ID0gMDsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotICAgIGlmIChzbF91aWRf c2F2ZWQpIHsKLSAgICAgICAgY2tzdHJuY3B5KHVpZGJ1ZixzbF91aWRidWYsVUlEQlVGTEVOKTsK LSAgICAgICAgc2xfdWlkX3NhdmVkID0gMDsKLSAgICB9Ci0jaWZkZWYgVE5DT0RFCi0gICAgaWYg KHNsX3RuX3NhdmVkKSB7Ci0gICAgICAgIHRuX3dhaXRfZmxnID0gc2xfdG5fd2FpdDsKLSAgICAg ICAgc2xfdG5fc2F2ZWQgPSAwOwotICAgIH0KLSNlbmRpZiAvKiBUTkNPREUgKi8KLSNpZmRlZiBT U0hCVUlMVElOCi0gICAgaWYgKHNsX3NzaF94Zndfc2F2ZWQpIHsKLSAgICAgICAgc3NoX3hmdyA9 IHNsX3NzaF94Znc7Ci0gICAgICAgIHNsX3NzaF94Zndfc2F2ZWQgPSAwOwotICAgIH0KLSAgICBp ZiAoc2xfc3NoX3Zlcl9zYXZlZCkgewotICAgICAgICBzc2hfdmVyID0gc2xfc3NoX3ZlcjsKLSAg ICAgICAgc2xfc3NoX3Zlcl9zYXZlZCA9IDA7Ci0gICAgfQotI2VuZGlmIC8qIFNTSEJVSUxUSU4g Ki8KLX0KLQotaW50IG9sZHBsZXggPSAtMTsgICAgICAgICAgICAgICAgICAgICAgIC8qIER1cGxl eCBob2xkZXIgYXJvdW5kIG5ldHdvcmsgKi8KLQotI2lmbmRlZiBOT0lDUAotI2lmZGVmIExPQ1VT Ci1leHRlcm4gaW50IGxvY3VzLCBhdXRvbG9jdXM7Ci0jZW5kaWYgLyogTE9DVVMgKi8KLSNpZm5k ZWYgTk9ESUFMCi1leHRlcm4gaW50IGRpYWxzdGE7Ci0jZW5kaWYgLyogTk9ESUFMICovCi0KLS8q IE5vdGU6IGdjYyAtV2FsbCB3YW50cyBicmFjZXMgYXJvdW5kIGVhY2gga2V5d29yZCB0YWJsZSBl bnRyeS4gKi8KLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgcHNsdGFiW10gPSB7ICAgICAgIC8qIFNF VCBMSU5FL1BPUlQgY29tbWFuZCBvcHRpb25zICovCi0gICAgeyAiL2Nvbm5lY3QiLCBTTF9DTlgs IDAgfSwKLSNpZmRlZiBPUzJPUlZNUwotICAgIHsgIi9ub3NoYXJlIiwgU0xfTlNILCAwIH0sCi0j ZW5kaWYgLyogT1MyT1JWTVMgKi8KLSAgICB7ICIvc2VydmVyIiwgIFNMX1NSViwgMCB9LAotI2lm ZGVmIE9TMk9SVk1TCi0gICAgeyAiL3NoYXJlIiwgICBTTF9TSFIsIDAgfSwKLSNlbmRpZiAvKiBP UzJPUlZNUyAqLwotICAgIHsgIiIsIDAsIDAgfQotfTsKLXN0YXRpYyBpbnQgbnBzbHRhYiA9IHNp emVvZihwc2x0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKSAtIDE7Ci0KLSNpZmRlZiBORVRDT05O Ci1zdGF0aWMgc3RydWN0IGtleXRhYiBzaHRhYltdID0geyAgICAgICAgLyogU0VUIEhPU1QgY29t bWFuZCBvcHRpb25zICovCi0jaWZkZWYgTkVUQ01ECi0gICAgLyogKENPTU1BTkQgaXMgYWxzbyBh IG5ldHdvcmsgdHlwZSkgKi8KLSAgICB7ICIvY29tbWFuZCIsICAgICAgU0xfQ01ELCAgICBDTV9J TlYgfSwKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSAgICB7ICIvY29ubmVjdCIsICAgICAgU0xfQ05Y LCAgICAwIH0sCi0gICAgeyAiL25ldHdvcmstdHlwZSIsIFNMX05FVCwgICAgQ01fQVJHIH0sCi0g ICAgeyAiL25vd2FpdCIsICAgICAgIFNMX05PV0FJVCwgMCB9LAotI2lmbmRlZiBOT1NQTAotI2lm ZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0gICAgeyAiL3Bhc3N3b3JkIiwgICAgIFNMX1BTVywgICAg Q01fQVJHIH0sCi0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSNlbmRpZiAvKiBOT1NQ TCAqLwotI2lmZGVmIE5FVENNRAotICAgIHsgIi9waXBlIiwgICAgICAgICBTTF9DTUQsICAgIDAg fSwKLSNlbmRpZiAvKiBORVRDTUQgKi8KLSNpZmRlZiBORVRQVFkKLSAgICB7ICIvcHR5IiwgICAg ICAgICAgU0xfUFRZLCAgICAwIH0sCi0jZW5kaWYgLyogTkVUUFRZICovCi0gICAgeyAiL3NlcnZl ciIsICAgICAgIFNMX1NSViwgICAgMCB9LAotICAgIHsgIi90aW1lb3V0IiwgICAgICBTTF9UTU8s ICAgIENNX0FSRyB9LAotICAgIHsgIi91c2VyaWQiLCAgICAgICBTTF9VSUQsICAgIENNX0FSRyB9 LAotICAgIHsgIi93YWl0IiwgICAgICAgICBTTF9XQUlULCAgIDAgfSwKLSAgICB7ICIiLCAwLCAw IH0KLX07Ci1zdGF0aWMgaW50IG5zaHRhYiA9IHNpemVvZihzaHRhYikvc2l6ZW9mKHN0cnVjdCBr ZXl0YWIpIC0gMTsKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgc2h0ZWx0YWJbXSA9IHsgICAgIC8q IFRFTE5FVCBjb21tYW5kIG9wdGlvbnMgKi8KLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotICAg IHsgIi9hdXRoIiwgICAgICAgICBTTF9BVVRILCAgIENNX0FSRyB9LAotI2VuZGlmIC8qIENLX0FV VEhFTlRJQ0FUSU9OICovCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgIHsgIi9lbmNyeXB0Iiwg ICAgICBTTF9FTkMsICAgIENNX0FSRyB9LAotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSAg ICB7ICIvbm93YWl0IiwgICAgICAgU0xfTk9XQUlULCAwIH0sCi0jaWZuZGVmIE5PU1BMCi0jaWZk ZWYgQ0tfQVVUSEVOVElDQVRJT04KLSAgICB7ICIvcGFzc3dvcmQiLCAgICAgU0xfUFNXLCAgICBD TV9BUkcgfSwKLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotI2VuZGlmIC8qIE5PU1BM ICovCi0gICAgeyAiL3RpbWVvdXQiLCAgICAgIFNMX1RNTywgICAgQ01fQVJHIH0sCi0gICAgeyAi L3VzZXJpZCIsICAgICAgIFNMX1VJRCwgICAgQ01fQVJHIH0sCi0gICAgeyAiL3dhaXQiLCAgICAg ICAgIFNMX1dBSVQsICAgMCB9LAotICAgIHsgIiIsIDAgLDAgfQotfTsKLXN0YXRpYyBpbnQgbnNo dGVsdGFiID0gc2l6ZW9mKHNodGVsdGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYikgLSAxOwotCi0j aWZkZWYgUkxPR0NPREUKLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNocmxndGFiW10gPSB7ICAgICAv KiBTRVQgSE9TVCBSTE9HSU4gY29tbWFuZCBvcHRpb25zICovCi0jaWZkZWYgQ0tfS0VSQkVST1MK LSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgeyAiL2VuY3J5cHQiLCAgICAgIFNMX0VOQywgMCB9 LAotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSAgICB7ICIvazQiLCAgICAgICAgICAgU0xf S1JCNCwgQ01fSU5WIH0sCi0gICAgeyAiL2s1IiwgICAgICAgICAgIFNMX0tSQjUsIENNX0lOViB9 LAotICAgIHsgIi9rZXJiZXJvczQiLCAgICBTTF9LUkI0LCAwIH0sCi0gICAgeyAiL2tlcmJlcm9z NSIsICAgIFNMX0tSQjUsIDAgfSwKLSAgICB7ICIva2VyYmVyb3NfaXYiLCAgU0xfS1JCNCwgQ01f SU5WIH0sCi0gICAgeyAiL2tlcmJlcm9zX3YiLCAgIFNMX0tSQjUsIENNX0lOViB9LAotICAgIHsg Ii9rcmI0IiwgICAgICAgICBTTF9LUkI0LCBDTV9JTlYgfSwKLSAgICB7ICIva3JiNSIsICAgICAg ICAgU0xfS1JCNSwgQ01fSU5WIH0sCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSAgICB7ICIi LCAwICwwIH0KLX07Ci1zdGF0aWMgaW50IG5zaHJsZ3RhYiA9IHNpemVvZihzaHJsZ3RhYikvc2l6 ZW9mKHN0cnVjdCBrZXl0YWIpLTE7Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8KLQotZXh0ZXJuIHN0 cnVjdCBrZXl0YWIgbmV0Y21kW107Ci1leHRlcm4gaW50IG5uZXRzOwotI2lmbmRlZiBOT0RJQUwK LWV4dGVybiBpbnQgZGlybGluZTsKLWV4dGVybiBpbnQgbm5ldGRpcjsgICAgICAgICAgICAgICAg ICAgICAvKiBOZXR3b3JrIHNlcnZpY2VzIGRpcmVjdG9yeSAqLwotZXh0ZXJuIGNoYXIgKm5ldGRp cltdOwotX1BST1RPVFlQKCBWT0lEIG5kcmVzZXQsICh2b2lkKSApOwotY2hhciAqbmhfcFtNQVhE TlVNUyArIDFdOyAgICAgICAgICAgICAgIC8qIE5ldHdvcmsgZGlyZWN0b3J5IGVudHJ5IHBvaW50 ZXJzICovCi1jaGFyICpuaF9wMltNQVhETlVNUyArIDFdOyAgICAgICAgICAgICAgLyogTmV0d29y ayBkaXJlY3RvcnkgZW50cnkgbmV0dHlwZSAqLwotY2hhciAqbmhfcHhbNF1bTUFYRE5VTVMgKyAx XTsgICAgICAgICAgIC8qIE5ldHdvcmstc3BlY2lmaWMgc3R1ZmYuLi4gKi8KLSNlbmRpZiAvKiBO T0RJQUwgKi8KLWludCBuaGNvdW50ID0gMDsKLWludCBuZGluaXRlZCA9IDA7Ci1jaGFyICogbl9u YW1lID0gTlVMTDsgICAgICAgICAgICAgICAgICAgLyogTmV0d29yayBuYW1lIHBvaW50ZXIgKi8K LSNlbmRpZiAvKiBORVRDT05OICovCi0KLV9QUk9UT1RZUChpbnQgcmVtdHh0LCAoY2hhciAqKikg KTsKLV9QUk9UT1RZUChWT0lEIHJtc2csICh2b2lkKSApOwotX1BST1RPVFlQKHN0YXRpYyBpbnQg cmVtY2ZtLCAodm9pZCkgKTsKLQotZXh0ZXJuIGludCBub3B1c2g7Ci0KLWludCBtZG1zYXYgPSAt MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTYXZlIG1vZGVtIHR5cGUgYXJvdW5kIG5ldHdv cmsgKi8KLWV4dGVybiBpbnQgaXNndWVzdDsgICAgICAgICAgICAgICAgICAgICAvKiBHbG9iYWwg ZmxhZyBmb3IgYW5vbnltb3VzIGxvZ2luICovCi0KLWV4dGVybiB4eF9zdHJwIHh4c3RyaW5nOwot Ci1leHRlcm4gaW50IHN1Y2Nlc3MsIGJpbmFyeSwgYl9zYXZlLCBja3dhcm4sIG1zZ2ZsZywgcXVp ZXQsIGNtYXNrLCBwZmxhZywgbG9jYWwsCi0gIG5ldHR5cGUsIGVzY2FwZSwgbWRtdHlwLCBkdXBs ZXgsIGRmbG9jLCBuZXR3b3JrLCBjZHRpbW8sIGF1dG9mbG93LCB0bmxtLAotICBzb3NpLCB0bGV2 ZWwsIGxmX29wdHMsIGJhY2tncmQsIGZsb3csIGRlYnNlcywgcGFyaXR5LCB0dG5wcm90bywgY2t4 ZWNoLAotICB4X2lmbnVtLCBjbWZsZ3MsIGhhdmVsaW5lLCBjeHR5cGUsIGN4Zmxvd1tdLCBtYWNs dmw7Ci0KLSNpZmRlZiBEQ01EQlVGCi1leHRlcm4gc3RydWN0IGNtZHB0ciAqY21kc3RrOyAgICAg ICAgICAgLyogVGhlIGNvbW1hbmQgc3RhY2sgaXRzZWxmICovCi0jZWxzZQotZXh0ZXJuIHN0cnVj dCBjbWRwdHIgY21kc3RrW107ICAgICAgICAgIC8qIFRoZSBjb21tYW5kIHN0YWNrIGl0c2VsZiAq LwotI2VuZGlmIC8qIERDTURCVUYgKi8KLWV4dGVybiBGSUxFICogdGZpbGVbXTsKLWV4dGVybiBj aGFyICogbWFjcFtdOwotCi1leHRlcm4gY2hhciBwc2F2ZVtdOyAgICAgICAgICAgICAgICAgICAg LyogRm9yIHNhdmluZyAmIHJlc3RvcmluZyBwcm9tcHQgKi8KLWV4dGVybiBpbnQgc3BybWxlbiwg cnBybWxlbjsKLQotI2lmZGVmIE9TMgotc3RhdGljIHN0cnVjdCBrZXl0YWIgc3RybWtleXRhYltd ID0gewotICAgIHsgImNsZWFyIiwgICAwLCAwIH0sCi0gICAgeyAiZGVmYXVsdCIsIDEsIDAgfQot fTsKLXN0YXRpYyBpbnQgbnN0cm1rZXl0YWIgPSBzaXplb2Yoc3RybWtleXRhYikvc2l6ZW9mKHN0 cnVjdCBrZXl0YWIpOwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBzdHJtc3dpdGFiW10gPSB7Ci0g ICAgeyAiL2xpdGVyYWwiLCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5zdHJtc3dpdGFiID0gc2l6 ZW9mKHN0cm1zd2l0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKTsKLQotc3RhdGljIHN0cnVjdCBr ZXl0YWIgbm9ybXJldltdID0gewotICAgIHsgImRhcmstZGlzcGxheSIsIDAsIDAgfSwKLSAgICB7 ICJsaWdodC1kaXNwbGF5IiwgMSwgMCB9LAotICAgIHsgIm5vcm1hbCIsICAgMCwgMCB9LAotICAg IHsgInJldmVyc2UiLCAgMSwgMCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBwcm5tdGFi W10gPSB7Ci0gICAgeyAiYXV0byIsIDEsIDAgfSwKLSAgICB7ICJjb3B5IiwgMiwgMCB9LAotICAg IHsgIm9mZiIsICAwLCAwIH0sCi0gICAgeyAib24iLCAgIDEsIENNX0lOViB9LCAgICAgICAgICAg ICAgLyogQ29tcGF0aWJpbGl0eSB3aXRoIFhQUklOVCB2ZXJzaW9uICovCi0gICAgeyAidXNlciIs IDMsIDAgfSwKLSAgICB7ICJ0cmFuc3BhcmVudCIsIDMsIENNX0lOViB9ICAgICAgICAvKiBub3Qg cmVhbGx5IHRyYW5zcGFyZW50ICovCi19Owotc3RhdGljIGludCBucHJubXRhYiA9IHNpemVvZihw cm5tdGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7Ci0KLWV4dGVybiBpbnQgdHRfZGlmZl91cGQ7 Ci0KLSNpZmRlZiBOVAotI2RlZmluZSBzdHJpY21wIF9zdHJpY21wCi1leHRlcm4gaW50IHR0X2F0 dHJfYnVnOwotI2VuZGlmIC8qIE5UICovCi1leHRlcm4gaW50IHR0X3Jvd3NbXSwgdHRfY29sc1td OwotZXh0ZXJuIGludCB0dF9jb2xzX3VzcjsKLWV4dGVybiBpbnQgdHRfc3pjaG5nW1ZOVU1dOwot aW50IHR0X21vZGVjaGcgPSBUVkNfRU5BOwotZXh0ZXJuIGludCB0dF91cmxfaGlsaXRlLCB0dF91 cmxfaGlsaXRlX2F0dHI7Ci1leHRlcm4gc3RydWN0IF92dEcgR1s0XTsKLWV4dGVybiBpbnQgcHJp b3JpdHk7Ci1leHRlcm4gYm9vbCBzZW5kX2MxOwotaW50IHNlbmRfYzFfdXNyID0gRkFMU0U7Ci1l eHRlcm4gaW50IHNncmNvbG9yczsKLWV4dGVybiBpbnQgbWFyZ2luYmVsbCwgbWFyZ2luYmVsbGNv bDsKLWV4dGVybiBpbnQgYXV0b3Njcm9sbCwgd3lfYXV0b3BhZ2U7Ci1leHRlcm4gaW50IHR0X3Nh YzsKLWV4dGVybiBpbnQgZGVjX25yYywgZGVjX2xhbmcsIGRlY19rYmQ7Ci0jZWxzZSAvKiBPUzIg Ki8KLWV4dGVybiBpbnQgdHRfcm93cywgdHRfY29sczsKLSNlbmRpZiAvKiAgT1MyICovCi0KLWV4 dGVybiBpbnQgdHRfZXNjYXBlOwotZXh0ZXJuIGxvbmcgc3BlZWQ7Ci0KLWV4dGVybiBjaGFyICpk ZnR0eTsKLQotZXh0ZXJuIGNoYXIgKnRwLCAqbHA7ICAgICAgICAgICAgICAgICAgIC8qIFRlbXBv cmFyeSBidWZmZXIgJiBwb2ludGVycyAqLwotZXh0ZXJuIGNoYXIgdHRuYW1lW107Ci0KLSNpZmRl ZiBDS19UQVBJCi1pbnQgdHR0YXBpID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXMg TGluZSBUQVBJPyAqLwotc3RydWN0IGtleXRhYiAqIHRhcGlsaW5ldGFiID0gTlVMTDsKLXN0cnVj dCBrZXl0YWIgKiBfdGFwaWxpbmV0YWIgPSBOVUxMOwotaW50IG50YXBpbGluZSA9IDA7Ci0jZW5k aWYgLyogQ0tfVEFQSSAqLwotCi0jaWZkZWYgTkVUQ09OTiAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogTmV0d29yayBpdGVtcyAqLwotCi0jaWZkZWYgQU5ZWDI1Ci1leHRlcm4gaW50IHJldmNh bGwsIGNsb3NnciwgY3VkYXRhLCBueDI1OwotZXh0ZXJuIGNoYXIgdWRhdGFbXTsKLWV4dGVybiBz dHJ1Y3Qga2V5dGFiIHgyNXRhYltdOwotI2lmbmRlZiBJQk1YMjUKLWV4dGVybiBpbnQgbnBhZHgz OwotZXh0ZXJuIENIQVIgcGFkcGFybXNbXTsKLWV4dGVybiBzdHJ1Y3Qga2V5dGFiIHBhZHgzdGFi W107Ci0jZW5kaWYgLyogSUJNWDI1ICovCi0jZW5kaWYgLyogQU5ZWDI1ICovCi0KLSNpZmRlZiBP UzIKLWV4dGVybiBib29sIHR0c2hhcmU7Ci0jaWZuZGVmIE5UCi1leHRlcm4gYm9vbCB0dHNsaXAs dHRwcHA7Ci0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNpZmRlZiBOUElQRQot ZXh0ZXJuIGNoYXIgcGlwZW5hbWVbXTsKLSNlbmRpZiAvKiBOUElQRSAqLwotCi0jaWZkZWYgVENQ U09DS0VUCi1zdGF0aWMgc3RydWN0IGtleXRhYiB0Y3ByYXd0YWJbXSA9IHsgICAgLyogU0VUIEhP U1Qgb3B0aW9ucyAqLwotICAgIHsgIi9kZWZhdWx0IiwgICAgTlBfREVGQVVMVCwgICAgQ01fSU5W IH0sCi0jaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KLSNpZmRlZiBDS19LRVJCRVJPUwotI2lmZGVm IFJMT0dDT0RFCi0gICAgeyAiL2VrNGxvZ2luIiwgICAgTlBfRUs0TE9HSU4sICAgIDAgfSwKLSAg ICB7ICIvZWs1bG9naW4iLCAgICBOUF9FSzVMT0dJTiwgICAgMCB9LAotICAgIHsgIi9rNGxvZ2lu IiwgICAgIE5QX0s0TE9HSU4sICAgICAwIH0sCi0gICAgeyAiL2s1bG9naW4iLCAgICAgTlBfSzVM T0dJTiwgICAgIDAgfSwKLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotI2lmZGVmIEtSQjVfVTJVCi0g ICAgeyAiL2s1dXNlcjJ1c2VyIiwgTlBfSzVVMlUsICAgICAgIDAgfSwKLSNlbmRpZiAvKiBLUkI1 X1UyVSAqLwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0jZW5kaWYgLyogQ0tfQVVUSEVOVElD QVRJT04gKi8KLSAgICB7ICIvbm8tdGVsbmV0LWluaXQiLCBOUF9OT05FLCAgIDAgfSwKLSAgICB7 ICIvbm9uZSIsICAgICAgIE5QX05PTkUsICAgQ01fSU5WIH0sCi0gICAgeyAiL3Jhdy1zb2NrZXQi LCBOUF9UQ1BSQVcsIDAgfSwKLSNpZmRlZiBSTE9HQ09ERQotICAgIHsgIi9ybG9naW4iLCAgICAg TlBfUkxPR0lOLCAwIH0sCi0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNpZmRlZiBDS19TU0wKLSAg ICB7ICIvc3NsIiwgICAgICAgIE5QX1NTTCwgICAgMCB9LAotICAgIHsgIi9zc2wtcmF3IiwgICAg TlBfU1NMX1JBVywgMCB9LAotICAgIHsgIi9zc2wtdGVsbmV0IiwgTlBfU1NMX1RFTE5FVCwgMCB9 LAotI2VuZGlmIC8qIENLX1NTTCAqLwotICAgIHsgIi90ZWxuZXQiLCAgICAgTlBfVEVMTkVULCAw IH0sCi0jaWZkZWYgQ0tfU1NMCi0gICAgeyAiL3RscyIsICAgICAgICBOUF9UTFMsICAgIDAgfSwK LSAgICB7ICIvdGxzLXJhdyIsICAgIE5QX1RMU19SQVcsIDAgfSwKLSAgICB7ICIvdGxzLXRlbG5l dCIsIE5QX1RMU19URUxORVQsIDAgfSwKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICB7ICIiLCAw LCAwIH0KLX07Ci1zdGF0aWMgaW50IG50Y3ByYXcgPSAoc2l6ZW9mKHRjcHJhd3RhYikgLyBzaXpl b2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLQotI2lmZGVmIFJMT0dDT0RFCi1fUFJPVE9UWVAoIGlu dCBybG9nX25hd3MsICh2b2lkKSApOwotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0jZW5kaWYgLyog VENQU09DS0VUICovCi0KLSNpZmRlZiBTVVBFUkxBVAotZXh0ZXJuIGNoYXIgc2xhdF9wd2RbMThd OwotI2VuZGlmIC8qIFNVUEVSTEFUICovCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotCi0jaWZkZWYg Q09NTUVOVAotI2lmbmRlZiBOT1NFVEtFWQotZXh0ZXJuIEtFWSAqa2V5bWFwOwotI2lmbmRlZiBP UzIKLSNkZWZpbmUgbWFwa2V5KHgpIGtleW1hcFt4XQotI2VuZGlmIC8qIE9TMiAqLwotZXh0ZXJu IE1BQ1JPICptYWNyb3RhYjsKLSNpZm5kZWYgTk9LVkVSQlMKLWV4dGVybiBzdHJ1Y3Qga2V5dGFi IGt2ZXJic1tdOwotZXh0ZXJuIGludCBua3ZlcmJzOwotI2VuZGlmIC8qIE5PS1ZFUkJTICovCi0j ZW5kaWYgLyogTk9TRVRLRVkgKi8KLSNlbHNlCi0jaWZuZGVmIE5PU0VUS0VZCi1leHRlcm4gS0VZ ICprZXltYXA7Ci1leHRlcm4gTUFDUk8gKm1hY3JvdGFiOwotI2lmbmRlZiBOT0tWRVJCUwotZXh0 ZXJuIHN0cnVjdCBrZXl0YWIga3ZlcmJzW107Ci1leHRlcm4gaW50IG5rdmVyYnM7Ci0jZW5kaWYg LyogTk9LVkVSQlMgKi8KLSNlbmRpZiAvKiBOT1NFVEtFWSAqLwotI2VuZGlmIC8qIENPTU1FTlQg Ki8KLQotI2lmZGVmIE9TMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFVVE9ET1dO TE9BRCBwYXJhbWV0ZXJzICovCi1leHRlcm4gaW50ICAgIGFkbF9rbW9kZSwgYWRsX3ptb2RlOyAg ICAgLyogTWF0Y2ggUGFja2V0IHRvIHNpZ25hbCBkb3dubG9hZCAqLwotZXh0ZXJuIGNoYXIgKiBh ZGxfa3N0cjsgICAgICAgICAgICAgICAgIC8qIEtFUk1JVCBEb3dubG9hZCBTdHJpbmcgKi8KLWV4 dGVybiBjaGFyICogYWRsX3pzdHI7ICAgICAgICAgICAgICAgICAvKiBaTU9ERU0gRG93bmxvYWQg U3RyaW5nICovCi1leHRlcm4gaW50IGFkbF9rYzAsIGFkbF96YzA7ICAgICAgICAgICAgLyogUHJv Y2VzcyBBREwgQzBzIGluIGVtdWxhdGlvbiAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0vKiBLZXl3 b3JkIHRhYmxlcyAuLi4gKi8KLQotZXh0ZXJuIHN0cnVjdCBrZXl0YWIgb25vZmZbXSwgcmx0YWJb XTsKLWV4dGVybiBpbnQgbnJsdDsKLQotI2lmbmRlZiBOT0NTRVRTCi1zdGF0aWMgc3RydWN0IGtl eXRhYiBmZGZsdGFiW10gPSB7Ci0gICAgeyAiN2JpdC1jaGFyYWN0ZXItc2V0IiwgNywgMCB9LAot ICAgIHsgIjhiaXQtY2hhcmFjdGVyLXNldCIsIDgsIDAgfQotfTsKLXN0YXRpYyBpbnQgbmZkZmx0 ID0gKHNpemVvZihmZGZsdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0jZW5kaWYgLyog Tk9DU0VUUyAqLwotCi0vKiBTRVQgRklMRSBwYXJhbWV0ZXJzICovCi0KLXN0YXRpYyBzdHJ1Y3Qg a2V5dGFiIGZpbHRhYltdID0gewotI2lmbmRlZiBOT1hGRVIKLSNpZmRlZiBQQVRURVJOUwotICAg IHsgImJpbmFyeS1wYXR0ZXJucyIsICAgWFlGSUJQLCAgMCB9LAotI2VuZGlmIC8qIFBBVFRFUk5T ICovCi0gICAgeyAiYnl0ZXNpemUiLCAgICAgICAgIFhZRklMUywgICAwIH0sCi0jaWZuZGVmIE5P Q1NFVFMKLSAgICB7ICJjaGFyYWN0ZXItc2V0IiwgICAgWFlGSUxDLCAgIDAgfSwKLSNlbmRpZiAv KiBOT0NTRVRTICovCi0gICAgeyAiY29sbGlzaW9uIiwgICAgICAgIFhZRklMWCwgICAwIH0sCi0g ICAgeyAiZGVmYXVsdCIsICAgICAgICAgIFhZRl9ERkxULCAwIH0sCi0gICAgeyAiZGVzdGluYXRp b24iLCAgICAgIFhZRklMWSwgICAwIH0sCi0gICAgeyAiZGlzcGxheSIsICAgICAgICAgIFhZRklM RCwgICBDTV9JTlYgfSwKLSNpZmRlZiBDS19UTVBESVIKLSAgICB7ICJkb3dubG9hZC1kaXJlY3Rv cnkiLCBYWUZJTEcsIDAgfSwKLSNlbmRpZiAvKiBDS19UTVBESVIgKi8KLSNlbmRpZiAvKiBOT1hG RVIgKi8KLSAgICB7ICJlbmQtb2YtbGluZSIsICAgICAgWFlGSUxBLCAgIDAgfSwKLSAgICB7ICJl b2wiLCAgICAgICAgICAgICAgWFlGSUxBLCAgIENNX0lOViB9LAotI2lmZGVmIENLX0NUUkxaCi0g ICAgeyAiZW9mIiwgICAgICAgICAgICAgIFhZRklMViwgICAwIH0sCi0jZW5kaWYgLyogQ0tfQ1RS TFogKi8KLSNpZm5kZWYgTk9YRkVSCi0gICAgeyAiZmFzdGxvb2t1cHMiLCAgICAgIDk5OTcsICAg ICBDTV9JTlYgfSwKLSAgICB7ICJpbmNvbXBsZXRlIiwgICAgICAgWFlGSUxJLCAgIDAgfSwKLSNp Zm5kZWYgZGF0YWdlbmVyYWwKLSAgICB7ICJpbnNwZWN0aW9uIiwgICAgICAgWFlGX0lOU1AsIENN X0lOViB9LAotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jaWZkZWYgQ0tfTEFCRUxFRAotICAg IHsgImxhYmVsIiwgICAgICAgICAgICBYWUZJTEwsIDAgfSwKLSNlbmRpZiAvKiBDS19MQUJFTEVE ICovCi0KLSNpZmRlZiBVTklYCi0jaWZkZWYgRFlOQU1JQwotICAgIHsgImxpc3RzaXplIiwgICAg ICAgICBYWUZfTFNJWiwgMCB9LAotI2VuZGlmIC8qIERZTkFNSUMgKi8KLSNlbmRpZiAvKiBVTklY ICovCi0KLSAgICB7ICJuYW1lcyIsICAgICAgICAgICAgWFlGSUxOLCAwIH0sCi0jaWZkZWYgVU5J WAotICAgIHsgIm91dHB1dCIsICAgICAgICAgICBYWUZJTEgsIDAgfSwKLSNlbmRpZiAvKiBVTklY ICovCi0jaWZkZWYgUEFUVEVSTlMKLSAgICB7ICJwYXR0ZXJucyIsICAgICAgICAgWFlGSVBBLCAw IH0sCi0jZW5kaWYgLyogUEFUVEVSTlMgKi8KLSNpZmRlZiBDT01NRU5UIC8qIE5vdCBpbXBsZW1l bnRlZCAoYnV0IHNlZSBDSE1PRCkgKi8KLSAgICB7ICJwZXJtaXNzaW9ucyIsICAgICAgWFlGX1BS TSwgQ01fSU5WIH0sCi0gICAgeyAicHJvdGVjdGlvbiIsICAgICAgIFhZRl9QUk0sIDAgfSwKLSNl bmRpZiAvKiBDT01NRU50ICovCi0jaWZkZWYgVk1TCi0gICAgeyAicmVjb3JkLWxlbmd0aCIsICAg IFhZRklMUiwgMCB9LAotI2VuZGlmIC8qIFZNUyAqLwotI2lmbmRlZiBkYXRhZ2VuZXJhbAotICAg IHsgInNjYW4iLCAgICAgICAgICAgICBYWUZfSU5TUCwgMCB9LAotI2VuZGlmIC8qIGRhdGFnZW5l cmFsICovCi0KLSNpZmRlZiBVTklYCi0jaWZkZWYgRFlOQU1JQwotICAgIHsgInN0cmluZ3NwYWNl IiwgICAgICBYWUZfU1NQQSwgMCB9LAotI2VuZGlmIC8qIERZTkFNSUMgKi8KLSNlbmRpZiAvKiBV TklYICovCi0KLSNpZmRlZiBQQVRURVJOUwotICAgIHsgInQiLCAgICAgICAgICAgICAgICBYWUZJ TFQsIENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICJ0ZXh0LXBhdHRlcm5zIiwgICAgWFlGSVRQLCAw IH0sCi0jZW5kaWYgLyogUEFUVEVSTlMgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSAgICB7ICJ0 eXBlIiwgICAgICAgICAgICAgWFlGSUxULCAwIH0sCi0jaWZkZWYgVU5JQ09ERQotICAgIHsgInVj cyIsICAgICAgICAgICAgICBYWUZJTFUsIDAgfSwKLSNlbmRpZiAvKiBVTklDT0RFICovCi0jaWZu ZGVmIE5PWEZFUgotICAgIHsgIndhcm5pbmciLCAgICAgICAgICBYWUZJTFcsIENNX0lOViB9Ci0j ZW5kaWYgLyogTk9YRkVSICovCi19Owotc3RhdGljIGludCBuZmlscCA9IChzaXplb2YoZmlsdGFi KSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLXN0cnVjdCBrZXl0YWIgcGF0aHRhYltdID0g ewotICAgIHsgImFic29sdXRlIiwgIFBBVEhfQUJTLCAgMCAgICAgIH0sCi0gICAgeyAibm9uZSIs ICAgICAgUEFUSF9PRkYsICBDTV9JTlYgfSwKLSAgICB7ICJvZmYiLCAgICAgICBQQVRIX09GRiwg IDAgICAgICB9LAotICAgIHsgIm9uIiwgICAgICAgIFBBVEhfQUJTLCAgQ01fSU5WIH0sCi0gICAg eyAicmVsYXRpdmUiLCAgUEFUSF9SRUwsICAwICAgICAgfQotfTsKLWludCBucGF0aHRhYiA9IChz aXplb2YocGF0aHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi1zdHJ1Y3Qga2V5dGFi IHJwYXRodGFiW10gPSB7Ci0gICAgeyAiYWJzb2x1dGUiLCAgUEFUSF9BQlMsICAwICAgICAgfSwK LSAgICB7ICJhdXRvIiwgICAgICBQQVRIX0FVVE8sIDAgICAgICB9LAotICAgIHsgIm5vbmUiLCAg ICAgIFBBVEhfT0ZGLCAgQ01fSU5WIH0sCi0gICAgeyAib2ZmIiwgICAgICAgUEFUSF9PRkYsICAw ICAgICAgfSwKLSAgICB7ICJvbiIsICAgICAgICBQQVRIX0FCUywgIENNX0lOViB9LAotICAgIHsg InJlbGF0aXZlIiwgIFBBVEhfUkVMLCAgMCAgICAgIH0KLX07Ci1pbnQgbnJwYXRodGFiID0gKHNp emVvZihycGF0aHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi0jaWZkZWYgQ0tfQ1RS TFoKLXN0cnVjdCBrZXl0YWIgZW9mdGFiW10gPSB7ICAgICAgICAgICAgICAvKiBFT0YgZGV0ZWN0 aW9uIG1ldGhvZCAqLwotICAgIHsgImN0cmwteiIsICAgICAgICAgIDEsIDAgICAgICB9LAotICAg IHsgImxlbmd0aCIsICAgICAgICAgIDAsIDAgICAgICB9LAotICAgIHsgIm5vY3RybC16IiwgICAg ICAgIDAsIENNX0lOViB9Ci19OwotI2VuZGlmIC8qIENLX0NUUkxaICovCi0KLXN0cnVjdCBrZXl0 YWIgZnR0YWJbXSA9IHsgICAgICAgICAgICAgICAvKiBGaWxlIHR5cGVzIGZvciBTRVQgRklMRSBU WVBFICovCi0gICAgeyAiYXNjaWkiLCAgICAgWFlGVF9ULCBDTV9JTlYgfSwKLSNpZmRlZiBWTVMK LSAgICB7ICJiIiwgICAgICAgICBYWUZUX0IsIENNX0lOVnxDTV9BQlIgfSwKLSNlbmRpZiAvKiBW TVMgKi8KLSAgICB7ICJiaW5hcnkiLCAgICBYWUZUX0IsIDAgfSwKLSNpZmRlZiBWTVMKLSAgICB7 ICJibG9jayIsICAgICBYWUZUX0ksIENNX0lOViB9LAotICAgIHsgImltYWdlIiwgICAgIFhZRlRf SSwgMCB9LAotI2VuZGlmIC8qIFZNUyAqLwotI2lmZGVmIENLX0xBQkVMRUQKLSAgICB7ICJsYWJl bGVkIiwgICBYWUZUX0wsIDAgfSwKLSNlbmRpZiAvKiBDS19MQUJFTEVEICovCi0jaWZkZWYgTUFD Ci0gICAgeyAibWFjYmluYXJ5IiwgWFlGVF9NLCAwIH0sCi0jZW5kaWYgLyogTUFDICovCi0gICAg eyAidGV4dCIsICAgICAgWFlGVF9ULCAwIH0KLX07Ci1pbnQgbmZ0dHlwID0gKHNpemVvZihmdHRh YikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiByZnR0 YWJbXSA9IHsgICAgICAgLyogRmlsZSB0eXBlcyBmb3IgUkVNT1RFIFNFVCBGSUxFICovCi0gICAg eyAiYXNjaWkiLCAgICAgWFlGVF9ULCBDTV9JTlYgfSwKLSAgICB7ICJiaW5hcnkiLCAgICBYWUZU X0IsIDAgfSwKLSNpZmRlZiBWTVMKLSAgICB7ICJsYWJlbGVkIiwgICBYWUZUX0wsIDAgfSwKLSNl bHNlCi0jaWZkZWYgT1MyCi0gICAgeyAibGFiZWxlZCIsICAgWFlGVF9MLCAwIH0sCi0jZW5kaWYg LyogT1MyICovCi0jZW5kaWYgLyogVk1TICovCi0gICAgeyAidGV4dCIsICAgICAgWFlGVF9ULCAw IH0KLX07Ci1zdGF0aWMgaW50IG5yZnR0eXAgPSAoc2l6ZW9mKHJmdHRhYikgLyBzaXplb2Yoc3Ry dWN0IGtleXRhYikpOwotCi0jaWZkZWYgT1MyT1JVTklYCi0jZGVmaW5lIFpPRl9CTEsgIDAKLSNk ZWZpbmUgWk9GX05CTEsgMQotI2RlZmluZSBaT0ZfQlVGICAyCi0jZGVmaW5lIFpPRl9OQlVGIDMK LXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHpvZnRhYltdID0gewotICAgIHsgImJsb2NraW5nIiwgICAg Wk9GX0JMSywgIDAgfSwKLSAgICB7ICJidWZmZXJlZCIsICAgIFpPRl9CVUYsICAwIH0sCi0gICAg eyAibm9uYmxvY2tpbmciLCBaT0ZfTkJMSywgMCB9LAotICAgIHsgInVuYnVmZmVyZWQiLCAgWk9G X05CVUYsIDAgfQotfTsKLXN0YXRpYyBpbnQgbnpvZnRhYiA9IChzaXplb2Yoem9mdGFiKSAvIHNp emVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0jZW5kaWYgLyogT1MyT1JVTklYICovCi0KLWV4dGVybiBp bnQgcXVlcnk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBHbG9iYWwgZmxhZyBmb3IgUVVFUlkg YWN0aXZlICovCi0KLSNpZm5kZWYgTk9TUEwKLSNpZm5kZWYgTk9YRkVSCi1zdGF0aWMgc3RydWN0 IGtleXRhYiB2YXJ0eXBbXSA9IHsgICAgICAgLyogVmFyaWFibGUgdHlwZXMgZm9yIFJFTU9URSBR VUVSWSAqLwotICAgIHsgImdsb2JhbCIsICAgKGludCkgJ0cnLCBDTV9JTlYgfSwKLSAgICB7ICJr ZXJtaXQiLCAgIChpbnQpICdLJywgMCB9LAotICAgIHsgInN5c3RlbSIsICAgKGludCkgJ1MnLCAw IH0sCi0gICAgeyAidXNlciIsICAgICAoaW50KSAnRycsIDAgfQotfTsKLXN0YXRpYyBpbnQgbnZh cnR5cCA9IChzaXplb2YodmFydHlwKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0jZW5kaWYg LyogTk9YRkVSICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmZGVmIENLX1RJTUVSUwotc3Rh dGljIHN0cnVjdCBrZXl0YWIgdGltb3RhYltdID0geyAgICAgIC8qIFRpbWVyIHR5cGVzICovCi0g ICAgeyAiZHluYW1pYyIsIDEsIDAgfSwKLSAgICB7ICJmaXhlZCIsICAgMCwgMCB9Ci19OwotI2Vu ZGlmIC8qIENLX1RJTUVSUyAqLwotCi0jaWZkZWYgRENNREJVRgotZXh0ZXJuIGNoYXIgKmF0eGJ1 ZiwgKmF0bWJ1ZjsgICAgICAgICAgIC8qIEF0b20gYnVmZmVyICovCi1leHRlcm4gY2hhciAqY21k YnVmOyAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBidWZmZXIgKi8KLWV4dGVybiBjaGFy ICpsaW5lLCAqdG1wYnVmOyAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIgYnVmZmVycyBmb3IgYW55 dGhpbmcgKi8KLWV4dGVybiBpbnQgKmludGltZTsgICAgICAgICAgICAgICAgICAgICAvKiBJTlBV VCBUSU1FT1VUICovCi0KLSNlbHNlICAvKiBOb3QgRENNREJVRiAuLi4gKi8KLQotZXh0ZXJuIGNo YXIgYXR4YnVmW10sIGF0bWJ1ZltdOyAgICAgICAgIC8qIEF0b20gYnVmZmVyICovCi1leHRlcm4g Y2hhciBjbWRidWZbXTsgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBidWZmZXIgKi8KLWV4 dGVybiBjaGFyIGxpbmVbXSwgdG1wYnVmW107ICAgICAgICAgICAvKiBDaGFyYWN0ZXIgYnVmZmVy IGZvciBhbnl0aGluZyAqLwotZXh0ZXJuIGludCBpbnRpbWVbXTsKLQotI2VuZGlmIC8qIERDTURC VUYgKi8KLQotI2lmbmRlZiBOT0NTRVRTCi1leHRlcm4gc3RydWN0IGtleXRhYiBmY3N0YWJbXTsg ICAgICAgICAgLyogRm9yIFNFVCBGSUxFIENIQVJBQ1RFUi1TRVQgKi8KLWV4dGVybiBzdHJ1Y3Qg Y3NpbmZvIGZjc2luZm9bXTsgICAgICAgICAvKiBGaWxlIGNoYXJhY3RlciBzZXQgaW5mby4gKi8K LWV4dGVybiBzdHJ1Y3Qga2V5dGFiIHR0Y3N0YWJbXTsKLWV4dGVybiBpbnQgbmZpbGMsIGZjaGFy c2V0LCB0Y2hhcnNldCwgbnRlcm1jLCB0Y3NyLCB0Y3NsLCBkY3NldDcsIGRjc2V0ODsKLSNpZmRl ZiBDS09VTkkKLWV4dGVybiBpbnQgdHRfdXRmODsKLSNlbmRpZiAvKiBDS09VTkkgKi8KLSNpZmRl ZiBPUzIKLV9QUk9UT1RZUCggaW50IG9zMnNldGNwLCAoaW50KSApOwotX1BST1RPVFlQKCBpbnQg b3MyZ2V0Y3AsICh2b2lkKSApOwotX1BST1RPVFlQKCB2b2lkIG9zMmRlYnVnb2ZmLCAodm9pZCkg KTsKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLWV4dGVybiBpbnQg Y21kbHZsOyAgICAgICAgICAgICAgICAgICAgICAvKiBPdmVyYWxsIGNvbW1hbmQgbGV2ZWwgKi8K LQotI2lmbmRlZiBOT1NQTAotI2lmZGVmIERDTURCVUYKLWV4dGVybiBpbnQgKmlucGNhczsgICAg ICAgICAgICAgICAgICAgICAvKiBJTlBVVCBDQVNFIHNldHRpbmcgb24gY21kIHN0YWNrICovCi0j ZWxzZQotZXh0ZXJuIGludCBpbnBjYXNbXTsKLSNlbmRpZiAvKiBEQ01EQlVGICovCi0jZW5kaWYg LyogTk9TUEwgKi8KLQotI2lmZGVmIENLX0NVUlNFUwotI2lmbmRlZiBWTVMKLV9QUk9UT1RZUChp bnQgdGdldGVudCwoY2hhciAqLCBjaGFyICopKTsKLSNlbHNlCi0jaWZkZWYgX19ERUNDCi1fUFJP VE9UWVAoaW50IHRnZXRlbnQsKGNoYXIgKiwgY2hhciAqKSk7Ci0jZW5kaWYgLyogX19ERUNDICov Ci0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogQ0tfQ1VSU0VTICovCi0KLSNpZm5kZWYgTk9Y TUlUCi0jZGVmaW5lIFhNSVRGIDAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFRSQU5T TUlUIHZhbHVlcyAqLwotI2RlZmluZSBYTUlUTCAxICAgICAgICAgICAgICAgICAgICAgICAgIC8q IChMb2NhbCB0byB0aGlzIG1vZHVsZSkgKi8KLSNkZWZpbmUgWE1JVFAgMgotI2RlZmluZSBYTUlU RSAzCi0jZGVmaW5lIFhNSVRYIDQKLSNkZWZpbmUgWE1JVFMgNQotI2RlZmluZSBYTUlUVyA2Ci0j ZGVmaW5lIFhNSVRUIDcKLQotI2RlZmluZSBYTUJVRkwgNTAKLWV4dGVybiBpbnQgeG1pdGYsIHht aXRsLCB4bWl0cCwgeG1pdHgsIHhtaXRzLCB4bWl0dywgeG1pdHQ7Ci1jaGFyIHhtaXRidWZbWE1C VUZMKzFdID0geyBOVUwgfTsgICAgICAgLyogVFJBTlNNSVQgZW9mIHN0cmluZyAqLwotCi1zdHJ1 Y3Qga2V5dGFiIHhtaXRhYltdID0geyAgICAgICAgICAgICAgLyogU0VUIFRSQU5TTUlUICovCi0g ICAgeyAiZWNobyIsICAgICAgICAgIFhNSVRYLCAwIH0sCi0gICAgeyAiZW9mIiwgICAgICAgICAg IFhNSVRFLCAwIH0sCi0gICAgeyAiZmlsbCIsICAgICAgICAgIFhNSVRGLCAwIH0sCi0gICAgeyAi bGluZWZlZWQiLCAgICAgIFhNSVRMLCAwIH0sCi0gICAgeyAibG9ja2luZy1zaGlmdCIsIFhNSVRT LCAwIH0sCi0gICAgeyAicGF1c2UiLCAgICAgICAgIFhNSVRXLCAwIH0sCi0gICAgeyAicHJvbXB0 IiwgICAgICAgIFhNSVRQLCAwIH0sCi0gICAgeyAidGltZW91dCIsICAgICAgIFhNSVRULCAwIH0K LX07Ci1pbnQgbnhtaXQgPSAoc2l6ZW9mKHhtaXRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikp OwotI2VuZGlmIC8qIE5PWE1JVCAqLwotCi0vKiBGb3IgU0VUIEZJTEUgQ09MTElTSU9OICovCi0v KiBTb21lIG9mIHRoZSBmb2xsb3dpbmcgbWF5IGJlIHBvc3NpYmxlIGZvciBzb21lIEMtS2VybWl0 IGltcGxlbWVudGF0aW9ucyAqLwotLyogYnV0IG5vdCBvdGhlcnMuICBUaG9zZSB0aGF0IGFyZSBu b3QgcG9zc2libGUgZm9yIHlvdXIgaW1wbGVtZW50YXRpb24gKi8KLS8qIHNob3VsZCBiZSBpZmRl ZidkIG91dC4gKi8KLQotc3RydWN0IGtleXRhYiBjb2x4dGFiW10gPSB7IC8qIFNFVCBGSUxFIENP TExJU0lPTiBvcHRpb25zICovCi0jaWZuZGVmIE1BQwotICAgIHsgImFwcGVuZCIsICAgIFhZRlhf QSwgMCB9LCAgICAgICAgIC8qIGFwcGVuZCB0byBvbGQgZmlsZSAqLwotI2VuZGlmIC8qIE1BQyAq LwotI2lmZGVmIENPTU1FTlQKLSAgICB7ICJhc2siLCAgICAgICBYWUZYX1EsIDAgfSwgICAgICAg ICAvKiBhc2sgd2hhdCB0byBkbyAobm90IGltcGxlbWVudGVkKSAqLwotI2VuZGlmCi0gICAgeyAi YmFja3VwIiwgICAgWFlGWF9CLCAwIH0sICAgICAgICAgLyogcmVuYW1lIG9sZCBmaWxlICovCi0j aWZuZGVmIE1BQwotICAgIC8qIFRoaXMgY3Jhc2hlcyBNYWMgS2VybWl0LiAqLwotICAgIHsgImRp c2NhcmQiLCAgIFhZRlhfRCwgQ01fSU5WIH0sCS8qIGRvbid0IGFjY2VwdCBuZXcgZmlsZSAqLwot ICAgIHsgIm5vLXN1cGVyc2VkZSIsIFhZRlhfRCwgQ01fSU5WIH0sIC8qIGRpdHRvIChNU0sgY29t cGF0aWJpbGl0eSkgKi8KLSNlbmRpZiAvKiBNQUMgKi8KLSAgICB7ICJvdmVyd3JpdGUiLCBYWUZY X1gsIDAgfSwgICAgICAgICAvKiBvdmVyd3JpdGUgdGhlIG9sZCBmaWxlICovCi0gICAgeyAicmVq ZWN0IiwgICAgWFlGWF9ELCAwIH0sCQkvKiAoYmV0dGVyIHdvcmQgdGhhbiBkaXNjYXJkKSAqLwot ICAgIHsgInJlbmFtZSIsICAgIFhZRlhfUiwgMCB9LCAgICAgICAgIC8qIHJlbmFtZSB0aGUgaW5j b21pbmcgZmlsZSAqLwotI2lmbmRlZiBNQUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFRoaXMgY3Jhc2hlcyBNYWMgS2VybWl0LiAqLwotICAgIHsgInVwZGF0ZSIsICAgIFhZRlhfVSwg MCB9LCAgICAgICAgIC8qIHJlcGxhY2UgaWYgbmV3ZXIgKi8KLSNlbmRpZiAvKiBNQUMgKi8KLSAg ICB7ICIiLCAwLCAwIH0KLX07Ci1pbnQgbmNvbHggPSAoc2l6ZW9mKGNvbHh0YWIpIC8gc2l6ZW9m KHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHJmaWx0YWJbXSA9 IHsgICAgICAvKiBmb3IgUkVNT1RFIFNFVCBGSUxFICovCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICB7 ICJjaGFyYWN0ZXItc2V0IiwgWFlGSUxDLCAwIH0sCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotICAg IHsgImNvbGxpc2lvbiIsICAgICBYWUZJTFgsIDAgfSwKLSAgICB7ICJpbmNvbXBsZXRlIiwgICAg WFlGSUxJLCAwIH0sCi0gICAgeyAibmFtZXMiLCAgICAgICAgIFhZRklMTiwgMCB9LAotICAgIHsg InJlY29yZC1sZW5ndGgiLCBYWUZJTFIsIDAgfSwKLSAgICB7ICJ0eXBlIiwgICAgICAgICAgWFlG SUxULCAwIH0KLX07Ci1pbnQgbnJmaWxwID0gKHNpemVvZihyZmlsdGFiKSAvIHNpemVvZihzdHJ1 Y3Qga2V5dGFiKSk7Ci0KLXN0cnVjdCBrZXl0YWIgZW9sdGFiW10gPSB7ICAgICAgICAgICAgICAv KiBGaWxlIGVvZiBkZWxpbWl0ZXJzICovCi0gICAgeyAiY3IiLCAgICAgICAgWFlGQV9DLCAwIH0s Ci0gICAgeyAiY3JsZiIsICAgICAgWFlGQV8yLCAwIH0sCi0gICAgeyAibGYiLCAgICAgICAgWFlG QV9MLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5lb2x0YWIgPSAoc2l6ZW9mKGVvbHRhYikgLyBzaXpl b2Yoc3RydWN0IGtleXRhYikpOwotCi1zdHJ1Y3Qga2V5dGFiIGZudGFiW10gPSB7ICAgICAgICAg ICAgICAgLyogRmlsZSBuYW1pbmcgKi8KLSAgICB7ICJjb252ZXJ0ZWQiLCBYWUZOX0MsIDAgICAg ICB9LAotICAgIHsgImxpdGVyYWwiLCAgIFhZRk5fTCwgMCAgICAgIH0sCi0gICAgeyAic3RhbmRh cmQiLCAgWFlGTl9DLCBDTV9JTlYgfQotfTsKLWludCBuZm50YWIgPSAoc2l6ZW9mKGZudGFiKSAv IHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLSNpZm5kZWYgTk9MT0NBTAotLyogVGVybWluYWwg cGFyYW1ldGVycyB0YWJsZSAqLwotc3RhdGljIHN0cnVjdCBrZXl0YWIgdHJtdGFiW10gPSB7Ci0j aWZkZWYgT1MyCi0gICAgeyAiYW5zd2VyYmFjayIsICAgIFhZVEFOUywgICAgMCB9LAotI2VuZGlm IC8qIE9TMiAqLwotI2lmZGVmIENLX0FQQwotICAgIHsgImFwYyIsICAgICAgICAgICBYWVRBUEMs ICAgIDAgfSwKLSNlbmRpZiAvKiBDS19BUEMgKi8KLSNpZmRlZiBPUzIKLSAgICB7ICJhcnJvdy1r ZXlzIiwgICAgWFlUQVJSLCAgICAwIH0sCi0jZW5kaWYgLyogT1MyICovCi0jaWZkZWYgTlQKLSAg ICB7ICJhdCIsICAgICAgICAgICAgWFlUQVRUUiwgICBDTV9JTlZ8Q01fQUJSIH0sCi0gICAgeyAi YXR0IiwgICAgICAgICAgIFhZVEFUVFIsICAgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgImF0dHIi LCAgICAgICAgICBYWVRBVFRSLCAgIENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICJhdHRyLWJ1ZyIs ICAgICAgWFlUQVRUQlVHLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBOVCAqLwotI2lmZGVmIE9TMgot ICAgIHsgImF0dHJpYnV0ZSIsICAgICBYWVRBVFRSLCAgIDAgfSwKLSNlbmRpZiAvKiBPUzIgKi8K LSNpZmRlZiBDS19BUEMKLSNpZmRlZiBDS19BVVRPREwKLSAgIHsgImF1dG9kb3dubG9hZCIsICAg WFlUQVVUT0RMLCAwLCB9LAotI2VuZGlmIC8qIENLX0FVVE9ETCAqLwotI2VuZGlmIC8qIENLX0FQ QyAqLwotI2lmZGVmIE9TMgotICAgIHsgImF1dG9wYWdlIiwgICAgICBYWVRBUEFHRSwgIDAgfSwK LSAgICB7ICJhdXRvc2Nyb2xsIiwgICAgWFlUQVNDUkwsICAwIH0sCi0gICAgeyAiYmVsbCIsICAg ICAgICAgIFhZVEJFTCwgICAgQ01fSU5WIH0sCi0jZW5kaWYgLyogT1MyICovCi0gICAgeyAiYnl0 ZXNpemUiLCAgICAgIFhZVEJZVCwgICAgMCB9LAotI2lmbmRlZiBOT0NTRVRTCi0gICAgeyAiY2hh cmFjdGVyLXNldCIsIFhZVENTLCAgICAgMCB9LAotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSNpZmRl ZiBPUzIKLSAgICB7ICJjb2RlLXBhZ2UiLCAgICAgWFlUQ1BHLCAgICAwIH0sCi0gICAgeyAiY29s b3IiLCAgICAgICAgIFhZVENPTCwgICAgMCB9LAotICAgIHsgImNvbnRyb2xzIiwgICAgICBYWVRD VFJMLCAgIDAgfSwKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB7ICJjci1kaXNwbGF5IiwgICAgWFlU Q1JELCAgICAwIH0sCi0jaWZkZWYgT1MyCi0gICAgeyAiY3Vyc29yIiwgICAgICAgIFhZVENVUiwg ICAgMCB9LAotI2VuZGlmIC8qIE9TMiAqLwotICAgIHsgImRlYnVnIiwgICAgICAgICBYWVRERUIs ICAgIDAgfSwKLSNpZmRlZiBPUzIKLSAgICB7ICJkZy11bml4LW1vZGUiLCAgWFlUVU5YLCAgICAw IH0sCi0jZW5kaWYgLyogT1MyICovCi0gICAgeyAiZWNobyIsICAgICAgICAgIFhZVEVDLCAgICAg MCB9LAotICAgIHsgImVzY2FwZS1jaGFyYWN0ZXIiLCBYWVRFU0MsIDAgfSwKLSNpZmRlZiBPUzIK LSNpZmRlZiBQQ0ZPTlRTCi0gICAgeyAiZm9udCIsICAgICAgICAgIFhZVEZPTiwgICAgMCB9LAot I2Vsc2UKLSNpZmRlZiBLVUkKLSAgICB7ICJmb250IiwgICAgICAgICAgWFlURk9OLCAgICAwIH0s Ci0jZW5kaWYgLyogS1VJICovCi0jZW5kaWYgLyogUENGT05UUyAqLwotI2VuZGlmIC8qIE9TMiAq LwotICAgIHsgImhlaWdodCIsICAgICAgICBYWVRISUcsICAgIDAgfSwKLSNpZmRlZiBDS1RJRExF Ci0gICAgeyAiaWRsZS1hY3Rpb24iLCAgIFhZVElBQ1QsICAgMCB9LAotICAgIHsgImlkbGUtbGlt aXQiLCAgICBYWVRJVE1PLCAgIENNX0lOViB9LAotICAgIHsgImlkbGUtc2VuZCIsICAgICBYWVRJ RExFLCAgIENNX0lOViB9LAotICAgIHsgImlkbGUtdGltZW91dCIsICBYWVRJVE1PLCAgIDAgfSwK LSNlbmRpZiAvKiBDS1RJRExFICovCi0jaWZkZWYgT1MyCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICB7 ICJrYmQtZm9sbG93cy1nbC9nciIsIFhZVEtCREdMLCAwIH0sCi0jZW5kaWYgLyogTk9DU0VUUyAq LwotICAgIHsgImtleSIsICAgICAgICAgICBYWVRLRVksICAgIDAgfSwKLSAgICB7ICJrZXlib2Fy ZC1tb2RlIiwgWFlUS0JNT0QsICAwIH0sCi0gICAgeyAia2V5cGFkLW1vZGUiLCAgIFhZVEtQRCwg ICAgMCB9LAotI2VuZGlmIC8qIE9TMiAqLwotICAgIHsgImxmLWRpc3BsYXkiLCAgICBYWVRMRkQs ICAgIDAgfSwKLSNpZm5kZWYgTk9DU0VUUwotI2lmZGVmIE9TMgotI2lmbmRlZiBLVUkKLSAgICB7 ICJsaW5lLXNwYWNpbmciLCAgWFlUTFNQLCAgICBDTV9JTlYgfSwKLSAgICB7ICJsb2NhbC1jaGFy YWN0ZXItc2V0IiwgWFlUTENTLCAgMCB9LAotI2Vsc2UKLSAgICB7ICJsaW5lLXNwYWNpbmciLCAg WFlUTFNQLCAgICAwIH0sCi0gICAgeyAibG9jYWwtY2hhcmFjdGVyLXNldCIsIFhZVExDUywgIENN X0lOViB9LAotI2VuZGlmIC8qIEtVSSAqLwotI2Vsc2UKLSAgICB7ICJsb2NhbC1jaGFyYWN0ZXIt c2V0IiwgWFlUTENTLCAgQ01fSU5WIH0sCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogTk9D U0VUUyAqLwotICAgIHsgImxvY2tpbmctc2hpZnQiLCBYWVRTTywgICAgIDAgfSwKLSNpZmRlZiBP UzIKLSAgICB7ICJtYXJnaW4tYmVsbCIsICAgWFlUTUJFTCwgICAwIH0sCi0jZW5kaWYgLyogT1My ICovCi0jaWZkZWYgT1MyTU9VU0UKLSAgICB7ICJtb3VzZSIsICAgICAgICAgWFlUTU9VLCAgICBD TV9JTlYgfSwKLSNlbmRpZiAvKiBPUzJNT1VTRSAqLwotICAgIHsgIm5ld2xpbmUtbW9kZSIsICBY WVROTCwgICAgIDAgfSwKLSNpZmRlZiBPUzIKLSAgICB7ICJvdXRwdXQtcGFjaW5nIiwgWFlUUEFD LCAgICAwIH0sCi0jaWZkZWYgUENURVJNCi0gICAgeyAicGN0ZXJtIiwgICAgICAgIFhZVFBDVEVS TSwgMCB9LAotI2VuZGlmIC8qIFBDVEVSTSAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2lmZGVmIE9T Mk9SVU5JWAotICAgIHsgInByaW50IiwgICAgICAgICBYWVRQUk4sICAgIDAgfSwKLSNlbmRpZiAv KiBPUzJPUlVOSVggKi8KLSNpZm5kZWYgTk9DU0VUUwotI2lmZGVmIE9TMgotICAgIHsgInJlbW90 ZS1jaGFyYWN0ZXItc2V0IiwgWFlUUkNTLCAgMCB9LAotI2Vsc2UKLSAgICB7ICJyZW1vdGUtY2hh cmFjdGVyLXNldCIsIFhZVFJDUywgIENNX0lOViB9LAotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlm IC8qIE5PQ1NFVFMgKi8KLSNpZmRlZiBPUzIKLSAgICB7ICJyb2xsLW1vZGUiLCAgICAgICBYWVRS T0wsIDAgfSwKLSAgICB7ICJzIiwgICAgICAgICAgICAgICBYWVRVUEQsIENNX0FCUnxDTV9JTlYg fSwKLSAgICB7ICJzYyIsICAgICAgICAgICAgICBYWVRVUEQsIENNX0FCUnxDTV9JTlYgfSwKLSAg ICB7ICJzY3IiLCAgICAgICAgICAgICBYWVRVUEQsIENNX0FCUnxDTV9JTlYgfSwKLSAgICB7ICJz Y3JlZSIsICAgICAgICAgICBYWVRVUEQsIENNX0FCUnxDTV9JTlYgfSwKLSAgICB7ICJzY3JlZW4i LCAgICAgICAgICBYWVRVUEQsIENNX0FCUnxDTV9JTlYgfSwKLSAgICB7ICJzY3JlZW4tIiwgICAg ICAgICBYWVRVUEQsIENNX0FCUnxDTV9JTlYgfSwKLSAgICB7ICJzY3JlZW4tbW9kZSIsICAgICBY WVRTQ05NLCAgIDAgfSwKLSAgICB7ICJzY3JlZW4tb3B0aW1pemUiLCBYWVRPUFRJLCAgIDAgfSwK LSAgICB7ICJzY3JlZW4tdXBkYXRlIiwgICBYWVRVUEQsICAgIDAgfSwKLSAgICB7ICJzY3JvbGxi YWNrIiwgICAgICBYWVNDUlMsICAgIDAgfSwKLSAgICB7ICJzZW5kLWRhdGEiLCAgICAgICAgIFhZ VFNFTkQsIDAgfSwKLSAgICB7ICJzZW5kLWVuZC1vZi1ibG9jayIsIFhZVFNFT0IsIDAgfSwKLSAg ICB7ICJzZ3ItY29sb3JzIiwgICAgICAgICAgICBYWVRTR1JDLCAgMCB9LAotICAgIHsgInNuaS1j aC5jb2RlIiwgICAgICAgICAgIFhZVFNOSUNDLCAwIH0sCi0gICAgeyAic25pLWZpcm13YXJlLXZl cnNpb25zIiwgWFlUU05JRlYsIDAgfSwKLSAgICB7ICJzbmktbGFuZ3VhZ2UiLCAgICAgICAgICBY WVRWVExORywgMCB9LAotICAgIHsgInNuaS1wYWdlbW9kZSIsICAgICAgICAgIFhZVFNOSVBNLCBD TV9JTlYgfSwKLSAgICB7ICJzbmktc2Nyb2xsbW9kZSIsICAgICAgICAgICAgICBYWVRTTklTTSwg Q01fSU5WIH0sCi0gICAgeyAic3BhY2luZy1hdHRyaWJ1dGUtY2hhcmFjdGVyIiwgWFlUU0FDLCAg IENNX0lOViB9LAotICAgIHsgInN0YXR1c2xpbmUiLCAgICAgICAgICAgICAgICAgIFhZVFNUQVQs ICAwIH0sCi0gICAgeyAidHJhIiwgICAgICAgICAgICAgICAgICAgICAgICAgWFlUQ1RTLCAgIENN X0lOVnxDTV9BQlIgfSwKLSAgICB7ICJ0cmFuc21pdC10aW1lb3V0IiwgICAgICAgICAgICBYWVRD VFMsICAgMCB9LAotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgT1MyT1JVTklYCi0gICAgeyAi dHJhbnNwYXJlbnQtcHJpbnQiLCBYWVRQUk4sICAgQ01fSU5WIH0sCi0jZW5kaWYgLyogT1MyT1JV TklYICovCi0KLSNpZmRlZiBDS19UUklHR0VSCi0gICAgeyAidHJpZ2dlciIsICAgICAgICAgICBY WVRSSUdHRVIsMCB9LAotI2VuZGlmIC8qIENLX1RSSUdHRVIgKi8KLSNpZmRlZiBPUzIKLSAgICB7 ICJ0eXBlIiwgICAgICAgICAgICAgIFhZVFRZUCwgICAwIH0sCi0jZWxzZQotICAgIHsgInR5cGUi LCAgICAgICAgICAgICAgWFlUVFlQLCAgIENNX0lOViB9LAotI2VuZGlmIC8qIE9TMiAqLwotCi0j aWZuZGVmIE5PQ1NFVFMKLSNpZmRlZiBVTklDT0RFCi0jaWZkZWYgQ0tPVU5JCi0gICAgeyAidW5p Y29kZSIsICAgICAgICAgICBYWVRVTkksICAgQ01fSU5WIH0sCi0jZW5kaWYgLyogQ0tPVU5JICov Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSNpZmRlZiBPUzIK LSAgICB7ICJ1bml4LW1vZGUiLCAgICAgICAgIFhZVFVOWCwgICBDTV9JTlYgfSwKLSAgICB7ICJ1 cmwtaGlnaGxpZ2h0IiwgICAgIFhZVFVSTEhJLCAwIH0sCi0jaWZkZWYgTlQKLSAgICB7ICJ2aWRl by1jaGFuZ2UiLCAgICAgIFhZVFZDSCwgICAwIH0sCi0jZW5kaWYgLyogTlQgKi8KLSAgICB7ICJ2 dC1sYW5ndWFnZSIsICAgICAgIFhZVFZUTE5HLCAwIH0sCi0gICAgeyAidnQtbnJjLW1vZGUiLCAg ICAgICBYWVRWVE5SQywgMCB9LAotI2VuZGlmIC8qIE9TMiAqLwotICAgIHsgIndpZHRoIiwgICAg ICAgICAgICAgWFlUV0lELCAgIDAgfSwKLSNpZmRlZiBPUzIKLSAgICB7ICJ3cmFwIiwgICAgICAg ICAgICAgIFhZVFdSUCwgICAwIH0sCi0jZW5kaWYgLyogT1MyICovCi0gICAgeyAiIiwgMCwgMCB9 Ci19OwotaW50IG50cm0gPSAoc2l6ZW9mKHRybXRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikp IC0gMTsKLQotI2lmZGVmIE9TMgotc3RydWN0IGtleXRhYiB0ZXJtY3RybFtdID0geyAgICAvKiBT RVQgVEVSTSBDT05UUk9MUyAqLwotICAgIHsgIjciLCAgICAgIDcsIDAgfSwKLSAgICB7ICI4Iiwg ICAgICA4LCAwIH0KLX07Ci1pbnQgbnRlcm1jdHJsID0gKHNpemVvZih0ZXJtY3RybCkgLyBzaXpl b2Yoc3RydWN0IGtleXRhYikpOwotCi1zdHJ1Y3Qga2V5dGFiIGN1cm9udGFiW10gPSB7ICAgIC8q IFNFVCBURVJNIENVUlNPUiAqLwotI2lmZGVmIEtVSQotICAgIHsgIm5vYmxpbmsiLCAyLCAwIH0s Ci0jZWxzZQotICAgIHsgIm5vYmxpbmsiLCAyLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBLVUkgKi8K LSAgICB7ICJvZmYiLCAgICAgMCwgMCB9LAotICAgIHsgIm9uIiwgICAgICAxLCAwIH0KLX07Ci1p bnQgbmN1cm9uID0gKHNpemVvZihjdXJvbnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwot Ci1zdHJ1Y3Qga2V5dGFiIHJvbGx0YWJbXSA9IHsgICAvKiBTZXQgVEVSTSBSb2xsIE9wdGlvbnMg Ki8KLSAgICB7ICJpbnNlcnQiLCAgICBUVFJfSU5TRVJULCAwICAgICAgfSwKLSAgICB7ICJrZXlz dHJva2VzIixUVFJfS0VZUywgICAwICAgICAgfSwKLSAgICB7ICJvZmYiLCAgICAgICBUVFJfT1ZF UiwgICBDTV9JTlYgfSwKLSAgICB7ICJvbiIsICAgICAgICBUVFJfSU5TRVJULCBDTV9JTlYgfSwK LSAgICB7ICJvdmVyd3JpdGUiLCBUVFJfT1ZFUiwgICAwICAgICAgfQotfTsKLWludCBucm9sbCA9 IChzaXplb2Yocm9sbHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi1zdHJ1Y3Qga2V5 dGFiIHJvbGxrZXl0YWJbXSA9IHsJCS8qIFNldCBURVJNIFJPTEwgS0VZU1RST0tFUyAqLwotICAg IHsgImlnbm9yZSIsICAgICAgICAgICAgVFRSS19JR04sIDAgfSwKLSAgICB7ICJyZXN0b3JlLWFu ZC1zZW5kIiwgIFRUUktfUlNULCAwIH0sCi0gICAgeyAic2VuZCIsICAgICAgICAgICAgICBUVFJL X1NORCwgMCB9Ci19OwotaW50IG5yb2xsa2V5ID0gKHNpemVvZihyb2xsa2V5dGFiKSAvIHNpemVv ZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLSNkZWZpbmUgVFRfR1JfQUxMIDQKLSNkZWZpbmUgVFRfR1Jf RzAgIDAKLSNkZWZpbmUgVFRfR1JfRzEgIDEKLSNkZWZpbmUgVFRfR1JfRzIgIDIKLSNkZWZpbmUg VFRfR1JfRzMgIDMKLSNkZWZpbmUgVFRfR1JfS0JEIDQKLXN0cnVjdCBrZXl0YWIgZ3JhcGhzZXR0 YWJbXSA9IHsgIC8qIERFQyBWVCBHcmFwaGljIFNldHMgKi8KLSAgICB7ICJhbGwiLCAgICAgIFRU X0dSX0FMTCwgMCB9LAotICAgIHsgImcwIiwgICAgICAgVFRfR1JfRzAsICAwIH0sCi0gICAgeyAi ZzEiLCAgICAgICBUVF9HUl9HMSwgIDAgfSwKLSAgICB7ICJnMiIsICAgICAgIFRUX0dSX0cyLCAg MCB9LAotICAgIHsgImczIiwgICAgICAgVFRfR1JfRzMsICAwIH0sCi0gICAgeyAia2V5Ym9hcmQi LCBUVF9HUl9LQkQsIDAgfQotfTsKLWludCBuZ3JhcGhzZXQgPSAoc2l6ZW9mKGdyYXBoc2V0dGFi KSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0jZW5kaWYgLyogT1MyICovCi0KLXN0cnVjdCBr ZXl0YWIgYWRsdGFiW10gPSB7ICAgICAgICAgICAgICAvKiBBdXRvZG93bmxvYWQgT3B0aW9ucyAq LwotICAgIHsgImFzayIsICAgICBUQURfQVNLLCAwIH0sCi0gICAgeyAiZXJyb3IiLCAgIFRBRF9F UlIsIDAgfSwKLSNpZmRlZiBPUzIKLSAgICB7ICJrZXJtaXQiLCAgVEFEX0ssICAgMCB9LAotI2Vu ZGlmIC8qIE9TMiAqLwotICAgIHsgIm9mZiIsICAgICBUQURfT0ZGLCAwIH0sCi0gICAgeyAib24i LCAgICAgIFRBRF9PTiwgIDAgfSwKLSNpZmRlZiBPUzIKLSAgICB7ICJ6bW9kZW0iLCAgVEFEX1os ICAgMCB9LAotI2VuZGlmIC8qIE9TMiAqLwotICAgIHsgIiIsIDAsIDAgfQotfTsKLWludCBuYWRs dGFiID0gKHNpemVvZihhZGx0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLXN0 cnVjdCBrZXl0YWIgYWRsZXJydGFiW10gPSB7ICAgICAgICAgICAvKiBBdXRvZG93bmxvYWQgRXJy b3IgT3B0aW9ucyAqLwotICAgIHsgImNvbnRpbnVlIiwgMCwgMCB9LAotICAgIHsgImdvIiwgICAg ICAgMCwgQ01fSU5WIH0sCi0gICAgeyAic3RvcCIsICAgICAxLCAwIH0KLX07Ci1pbnQgbmFkbGVy cnRhYiA9IChzaXplb2YoYWRsZXJydGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLSNp ZmRlZiBPUzIKLXN0cnVjdCBrZXl0YWIgYWRseHRhYltdID0geyAgICAgICAgICAgICAvKiBBdXRv ZG93bmxvYWQgT3B0aW9ucyAqLwotICAgIHsgImMwLWNvbmZsaWN0cyIsICAgICBUQURfWF9DMCwg ICAgIDAgfSwKLSAgICB7ICJkZXRlY3Rpb24tbWV0aG9kIiwgVEFEX1hfREVURUNULCAwIH0sCi0g ICAgeyAic3RyaW5nIiwgICAgICAgICAgIFRBRF9YX1NUUiwgICAgMCB9Ci19OwotaW50IG5hZGx4 dGFiID0gKHNpemVvZihhZGx4dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLXN0cnVj dCBrZXl0YWIgYWRsZHRhYltdID0geyAgICAgICAgICAgICAvKiBBdXRvLWRsIERldGVjdGlvbiBN ZXRob2RzICovCi0gICAgeyAicGFja2V0IiwgICAgICAgICAgIEFETF9QQUNLLCAgICAgMCB9LAot ICAgIHsgInN0cmluZyIsICAgICAgICAgICBBRExfU1RSLCAgICAgIDAgfQotfTsKLWludCBuYWRs ZHRhYiA9IChzaXplb2YoYWRsZHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi1zdHJ1 Y3Qga2V5dGFiIGFkbGMwdGFiW10gPSB7ICAgICAgICAgICAgLyogQXV0by1kbCBEZXRlY3Rpb24g TWV0aG9kcyAqLwotICAgIHsgImlnbm9yZWQtYnktZW11bGF0b3IiLCAgICAwLCAgICAgIDAgfSwK LSAgICB7ICJwcm9jZXNzZWQtYnktZW11bGF0b3IiLCAgMSwgICAgICAwIH0KLX07Ci1pbnQgbmFk bGMwdGFiID0gKHNpemVvZihhZGxjMHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi0j aWZuZGVmIE5PQ1NFVFMKLXN0cnVjdCBrZXl0YWIgdnRsYW5ndGFiW10gPSB7Ci0gICAgeyAiYmVs Z2lhbiIsICAgICAgICBWVExfQkVMR0lBTiAsIDAgfSwKLSAgICB7ICJicml0aXNoIiwgICAgICAg IFZUTF9CUklUSVNIICwgMCB9LAotICAgIHsgImNhbmFkaWFuIiwgICAgICAgVlRMX0NBTkFESUFO LCAwIH0sCi0gICAgeyAiY3plY2giLCAgICAgICAgICBWVExfQ1pFQ0ggICAsIDAgfSwKLSAgICB7 ICJkYW5pc2giLCAgICAgICAgIFZUTF9EQU5JU0ggICwgMCB9LAotICAgIHsgImR1dGNoIiwgICAg ICAgICAgVlRMX0RVVENIICAgLCAwIH0sCi0gICAgeyAiZmlubmlzaCIsICAgICAgICBWVExfRklO TklTSCAsIDAgfSwKLSAgICB7ICJmcmVuY2giLCAgICAgICAgIFZUTF9GUkVOQ0ggICwgMCB9LAot ICAgIHsgImZyZW5jaC1jYW5hZGlhbiIsVlRMX0ZSX0NBTiAgLCAwIH0sCi0gICAgeyAiZ2VybWFu IiwgICAgICAgICBWVExfR0VSTUFOICAsIDAgfSwKLSAgICB7ICJncmVlayIsICAgICAgICAgIFZU TF9HUkVFSyAgICwgMCB9LAotICAgIHsgImhlYnJldyIsICAgICAgICAgVlRMX0hFQlJFVyAgLCAw IH0sCi0gICAgeyAiaHVuZ2FyaWFuIiwgICAgICBWVExfSFVOR0FSSUEsIDAgfSwKLSAgICB7ICJp dGFsaWFuIiwgICAgICAgIFZUTF9JVEFMSUFOICwgMCB9LAotICAgIHsgImxhdGluLWFtZXJpY2Fu IiwgVlRMX0xBVElOX0FNLCAwIH0sCi0gICAgeyAibm9ydGgtYW1lcmljYW4iLCBWVExfTk9SVEhf QU0sIDAgfSwKLSAgICB7ICJub3J3ZWdpYW4iLCAgICAgIFZUTF9OT1JXRUdJQSwgMCB9LAotICAg IHsgInBvbGlzaCIsICAgICAgICAgVlRMX1BPTElTSCAgLCAwIH0sCi0gICAgeyAicG9ydHVnZXNl IiwgICAgICBWVExfUE9SVFVHRVMsIDAgfSwKLSAgICB7ICJyb21hbmlhbiIsICAgICAgIFZUTF9S T01BTklBTiwgMCB9LAotICAgIHsgInJ1c3NpYW4iLCAgICAgICAgVlRMX1JVU1NJQU4gLCAwIH0s Ci0gICAgeyAic2NzIiwgICAgICAgICAgICBWVExfU0NTICAgICAsIENNX0lOViB9LAotICAgIHsg InNsb3ZhayIsICAgICAgICAgVlRMX1NMT1ZBSyAgLCAwIH0sCi0gICAgeyAic3BhbmlzaCIsICAg ICAgICBWVExfU1BBTklTSCAsIDAgfSwKLSAgICB7ICJzd2VkaXNoIiwgICAgICAgIFZUTF9TV0VE SVNIICwgMCB9LAotICAgIHsgInN3aXNzLWZyZW5jaCIsICAgVlRMX1NXX0ZSICAgLCAwIH0sCi0g ICAgeyAic3dpc3MtZ2VybWFuIiwgICBWVExfU1dfR1IgICAsIDAgfSwKLSAgICB7ICJ0dXJraXNo LWYiLCAgICAgIFZUTF9UVVJLX0YgICwgQ01fSU5WIH0sCi0gICAgeyAidHVya2lzaC1xIiwgICAg ICBWVExfVFVSS19RICAsIENNX0lOViB9Ci19OwotaW50IG52dGxhbmd0YWIgPSAoc2l6ZW9mKHZ0 bGFuZ3RhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8K LSNlbmRpZiAvKiBPUzIgKi8KLQotc3RydWN0IGtleXRhYiBjcmR0YWJbXSA9IHsgICAgICAgICAg ICAgIC8qIENhcnJpYWdlLXJldHVybiBkaXNwbGF5ICovCi0gICAgeyAiY3JsZiIsICAgICAgICAx LCAwIH0sCi0gICAgeyAibm9ybWFsIiwgICAgICAwLCAwIH0KLX07Ci1leHRlcm4gaW50IHR0X2Ny ZDsgICAgICAgICAgICAgICAgICAgICAgLyogQ2FycmlhZ2UtcmV0dXJuIGRpc3BsYXkgdmFyaWFi bGUgKi8KLWV4dGVybiBpbnQgdHRfbGZkOwkJCS8qIExpbmVmZWVkIGRpc3BsYXkgdmFyaWFibGUg Ki8KLQotI2lmZGVmIENLX0FQQwotZXh0ZXJuIGludCBhcGNzdGF0dXMsIGFwY2FjdGl2ZTsKLXN0 YXRpYyBzdHJ1Y3Qga2V5dGFiIGFwY3RhYltdID0geyAgICAgICAvKiBUZXJtaW5hbCBBUEMgcGFy YW1ldGVycyAqLwotICAgIHsgICJuby1pbnB1dCIsIEFQQ19PTnxBUENfTk9JTlAsMCB9LAotICAg IHsgIm9mZiIsICAgICAgIEFQQ19PRkYsICAwIH0sCi0gICAgeyAib24iLCAgICAgICAgQVBDX09O LCAgIDAgfSwKLSAgICB7ICJ1bmNoZWNrZWQiLCBBUENfT058QVBDX1VOQ0gsIDAgfSwKLSAgICB7 ICJ1bmNoZWNrZWQtbm8taW5wdXQiLCBBUENfT058QVBDX05PSU5QfEFQQ19VTkNILCAwIH0KLX07 Ci1pbnQgbmFwY3RhYiA9IChzaXplb2YoYXBjdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7 Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi1leHRlcm4gaW50 IGF1dG9kbCwgYWRsX2VyciwgYWRsX2FzazsKLQotc3RydWN0IGtleXRhYiBiZWx0YWJbXSA9IHsg ICAgICAgICAgICAgIC8qIFRlcm1pbmFsIGJlbGwgbW9kZSAqLwotI2lmZGVmIE9TMgotICAgIHsg ImF1ZGlibGUiLCBYWUJfQVVELCAgMCB9LAotICAgIHsgIm5vbmUiLCAgICBYWUJfTk9ORSwgMCB9 LAotI2Vsc2UKLSAgICB7ICJhdWRpYmxlIiwgWFlCX0FVRCwgIENNX0lOViB9LAotICAgIHsgIm5v bmUiLCAgICBYWUJfTk9ORSwgQ01fSU5WIH0sCi0jZW5kaWYgLyogT1MyICovCi0jaWZkZWYgT1My Ci0gICAgeyAib2ZmIiwgICAgIFhZQl9OT05FLCBDTV9JTlYgfSwKLSAgICB7ICJvbiIsICAgICAg WFlCX0FVRCwgIENNX0lOViB9LAotI2Vsc2UKLSAgICB7ICJvZmYiLCAgICAgWFlCX05PTkUsIDAg fSwKLSAgICB7ICJvbiIsICAgICAgWFlCX0FVRCwgIDAgfSwKLSNlbmRpZiAvKiBPUzIgKi8KLSNp ZmRlZiBPUzIKLSAgICB7ICJ2aXNpYmxlIiwgWFlCX1ZJUywgIDAgfSwKLSNlbmRpZiAvKiBPUzIg Ki8KLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1pbnQgbmJlbHRhYiA9IHNpemVvZihiZWx0YWIpL3Np emVvZihzdHJ1Y3Qga2V5dGFiKSAtIDE7Ci0KLWludCB0dF91bmljb2RlID0gMTsgICAgICAgICAg ICAgICAgICAgICAvKiBVc2UgVW5pY29kZSBpZiBwb3NzaWJsZSAqLwotI2lmZGVmIENLVElETEUK LWludCB0dF9pZGxlc25kX3RtbyA9IDA7ICAgICAgICAgICAgICAgICAvKiBJZGxlIFNlbmQgVGlt ZW91dCwgZGlzYWJsZWQgKi8KLWNoYXIgKiB0dF9pZGxlc25kX3N0ciA9IE5VTEw7ICAgICAgICAg ICAvKiBJZGxlIFNlbmQgU3RyaW5nLCBub25lICovCi1jaGFyICogdHRfaWRsZXN0ciA9IE5VTEw7 Ci1leHRlcm4gaW50IHR0X2lkbGVhY3QsIHR0X2lkbGVsaW1pdDsKLSNlbmRpZiAvKiBDS1RJRExF ICovCi0KLSNpZmRlZiBPUzIKLSNpZm5kZWYgTk9MT0NBTAotLyoKLSAgT1MvMiBzZXJpYWwgY29t bXVuaWNhdGlvbiBkZXZpY2VzLgotKi8KLXN0cnVjdCBrZXl0YWIgb3MyZGV2dGFiW10gPSB7Ci0g ICAgeyAiMSIsICAgIDEsIENNX0lOViB9LCAgICAgICAgICAgICAgICAgICAgICAvKiBJbnZpc2li bGUgc3lub255bXMsIGxpa2UgKi8KLSAgICB7ICIyIiwgICAgMiwgQ01fSU5WIH0sICAgICAgICAg ICAgICAgICAgICAgIC8qICJzZXQgcG9ydCAxIiAqLwotICAgIHsgIjMiLCAgICAzLCBDTV9JTlYg fSwKLSAgICB7ICI0IiwgICAgNCwgQ01fSU5WIH0sCi0gICAgeyAiNSIsICAgIDUsIENNX0lOViB9 LAotICAgIHsgIjYiLCAgICA2LCBDTV9JTlYgfSwKLSAgICB7ICI3IiwgICAgNywgQ01fSU5WIH0s Ci0gICAgeyAiOCIsICAgIDgsIENNX0lOViB9LAotICAgIHsgImNvbTEiLCAxLCAwIH0sICAgICAg ICAgICAgICAgICAgIC8qIFJlYWwgZGV2aWNlIG5hbWVzICovCi0gICAgeyAiY29tMiIsIDIsIDAg fSwKLSAgICB7ICJjb20zIiwgMywgMCB9LAotICAgIHsgImNvbTQiLCA0LCAwIH0sCi0gICAgeyAi Y29tNSIsIDUsIDAgfSwKLSAgICB7ICJjb202IiwgNiwgMCB9LAotICAgIHsgImNvbTciLCA3LCAw IH0sCi0gICAgeyAiY29tOCIsIDgsIDAgfSwKLSNpZmRlZiBPUzJPTkxZCi0gICAgeyAic2xpcGNv bTEiLCAxLCAwIH0sICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgdXNlIHdpdGggU0xJUCBk cml2ZXIgKi8KLSAgICB7ICJzbGlwY29tMiIsIDIsIDAgfSwgICAgICAgICAgICAgICAgICAgICAg IC8qIHNoYXJlZCBhY2Nlc3MgKi8KLSAgICB7ICJzbGlwY29tMyIsIDMsIDAgfSwKLSAgICB7ICJz bGlwY29tNCIsIDQsIDAgfSwKLSAgICB7ICJzbGlwY29tNSIsIDUsIDAgfSwKLSAgICB7ICJzbGlw Y29tNiIsIDYsIDAgfSwKLSAgICB7ICJzbGlwY29tNyIsIDcsIDAgfSwKLSAgICB7ICJzbGlwY29t OCIsIDgsIDAgfSwKLSAgICB7ICJwcHBjb20xIiwgMSwgMCB9LCAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEZvciB1c2Ugd2l0aCBQUFAgZHJpdmVyICovCi0gICAgeyAicHBwY29tMiIsIDIsIDAg fSwgICAgICAgICAgICAgICAgICAgICAgICAvKiBzaGFyZWQgYWNjZXNzICovCi0gICAgeyAicHBw Y29tMyIsIDMsIDAgfSwKLSAgICB7ICJwcHBjb200IiwgNCwgMCB9LAotICAgIHsgInBwcGNvbTUi LCA1LCAwIH0sCi0gICAgeyAicHBwY29tNiIsIDYsIDAgfSwKLSAgICB7ICJwcHBjb203IiwgNywg MCB9LAotICAgIHsgInBwcGNvbTgiLCA4LCAwIH0KLSNlbmRpZiAvKiBPUzJPTkxZICovCi19Owot aW50IG5vczJkZXYgPSAoc2l6ZW9mKG9zMmRldnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikp IC0gMTsKLQotI2lmZGVmIE9TMk9OTFkKLXN0cnVjdCBrZXl0YWIgb3MycHBwdGFiW10gPSB7Ci0g ICAgeyAiMCIsICAgIDAsIENNX0lOViB9LAotICAgIHsgIjEiLCAgICAxLCBDTV9JTlYgfSwgICAg ICAgICAgICAgICAgICAgICAgLyogSW52aXNpYmxlIHN5bm9ueW1zLCBsaWtlICovCi0gICAgeyAi MiIsICAgIDIsIENNX0lOViB9LCAgICAgICAgICAgICAgICAgICAgICAvKiAic2V0IHBvcnQgMSIg Ki8KLSAgICB7ICIzIiwgICAgMywgQ01fSU5WIH0sCi0gICAgeyAiNCIsICAgIDQsIENNX0lOViB9 LAotICAgIHsgIjUiLCAgICA1LCBDTV9JTlYgfSwKLSAgICB7ICI2IiwgICAgNiwgQ01fSU5WIH0s Ci0gICAgeyAiNyIsICAgIDcsIENNX0lOViB9LAotICAgIHsgIjgiLCAgICA4LCBDTV9JTlYgfSwK LSAgICB7ICI5IiwgICAgOSwgQ01fSU5WIH0sCi0gICAgeyAicHBwMCIsIDAsIDAgfSwKLSAgICB7 ICJwcHAxIiwgMSwgMCB9LCAgICAgICAgICAgICAgICAgICAvKiBGb3IgdXNlIHdpdGggUFBQIGRy aXZlciAqLwotICAgIHsgInBwcDIiLCAyLCAwIH0sICAgICAgICAgICAgICAgICAgIC8qIHNoYXJl ZCBhY2Nlc3MgKi8KLSAgICB7ICJwcHAzIiwgMywgMCB9LAotICAgIHsgInBwcDQiLCA0LCAwIH0s Ci0gICAgeyAicHBwNSIsIDUsIDAgfSwKLSAgICB7ICJwcHA2IiwgNiwgMCB9LAotICAgIHsgInBw cDciLCA3LCAwIH0sCi0gICAgeyAicHBwOCIsIDgsIDAgfSwKLSAgICB7ICJwcHA5IiwgOSwgMCB9 Ci19OwotaW50IG5vczJwcHAgPSAoc2l6ZW9mKG9zMnBwcHRhYikgLyBzaXplb2Yoc3RydWN0IGtl eXRhYikpOwotI2VuZGlmIC8qIE9TMk9OTFkgKi8KLQotLyoKLSAgVGVybWluYWwgcGFyYW1ldGVy cyB0aGF0IGNhbiBiZSBzZXQgYnkgU0VUIGNvbW1hbmRzLgotICBVc2VkIGJ5IHRoZSBjaz9jb24u YyB0ZXJtaW5hbCBlbXVsYXRvciBjb2RlLgotICBGb3Igbm93LCBvbmx5IHVzZWQgZm9yICNpZmRl ZiBPUzIuICBTaG91bGQgYWRkIHRoZXNlIGZvciBNYWNpbnRvc2guCi0qLwotaW50IHR0X2Fycm93 ID0gVFRLX05PUk07ICAgICAgICAgICAgICAgIC8qIEFycm93IGtleSBtb2RlOiBub3JtYWwgKGN1 cnNvcikgKi8KLWludCB0dF9rZXlwYWQgPSBUVEtfTk9STTsgICAgICAgICAgICAgICAvKiBLZXlw YWQgbW9kZTogbm9ybWFsIChudW1lcmljKSAqLwotaW50IHR0X3NoaWZ0X2tleXBhZCA9IDA7ICAg ICAgICAgICAgICAgIC8qIEtleXBhZCBTaGlmdCBtb2RlOiBPZmYgKi8KLWludCB0dF93cmFwID0g MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hbCB3cmFwLCAxID0gT24gKi8KLWlu dCB0dF90eXBlID0gVFRfVlQyMjA7ICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hbCB0eXBlLCBp bml0aWFsbHkgVlQyMjAgKi8KLWludCB0dF90eXBlX21vZGUgPSBUVF9WVDIyMDsgICAgICAgICAg ICAvKiBUZXJtaW5hbCB0eXBlIHNldCBieSBob3N0IGNvbW1hbmQgKi8KLWludCB0dF9jdXJzb3Ig PSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hbCBjdXJzb3IsIDAgPSBVbmRlcmxp bmUgKi8KLWludCB0dF9jdXJzb3JfdXNyID0gMDsgICAgICAgICAgICAgICAgICAvKiBVc2VycyBU ZXJtaW5hbCBjdXJzb3IgdHlwZSAqLwotaW50IHR0X2N1cnNvcmVuYV91c3IgPSAxOyAgICAgICAg ICAgICAgIC8qIFVzZXJzIFRlcm1pbmFsIGN1cnNvciBlbmFibGVkICovCi1pbnQgdHRfY3Vyc29y X2JsaW5rID0gMTsgICAgICAgICAgICAgICAgLyogVGVybWluYWwgQ3Vyc29yIEJsaW5rICovCi1p bnQgdHRfYW5zd2VyID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogVGVybWluYWwgYW5zd2Vy YmFjayAoZGlzYWJsZWQpICovCi1pbnQgdHRfc2Nyc2l6ZVtWTlVNXSA9IHs1MTIsNTEyLDUxMiwx fTsgLyogVGVybWluYWwgc2Nyb2xsYmFjayBidWZmZXIgc2l6ZSAqLwotaW50IHR0X3JvbGxbVk5V TV0gPSB7MSwxLDEsMX07ICAgICAgICAgIC8qIFRlcm1pbmFsIHJvbGwgKG9uKSAqLwotaW50IHR0 X3JrZXlzW1ZOVU1dID0gezEsMSwxLDF9OwkJLyogVGVybWluYWwgcm9sbCBrZXlzIChzZW5kKSAq LwotaW50IHR0X3BhY2luZyA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmFsIG91 dHB1dC1wYWNpbmcgKG5vbmUpICovCi1pbnQgdHRfY3RzdG1vID0gMTU7ICAgICAgICAgICAgICAg ICAgICAgLyogVGVybWluYWwgdHJhbnNtaXQtdGltZW91dCAqLwotaW50IHR0X2NvZGVwYWdlID0g LTE7ICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmFsIGNvZGUtcGFnZSAqLwotaW50IHR0X3Vw ZGF0ZSA9IDEwMDsgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmFsIHNjcmVlbi11cGRhdGUg aW50ZXJ2YWwgKi8KLWludCB0dF91cGRtb2RlID0gVFRVX0ZBU1Q7ICAgICAgICAgICAgICAvKiBU ZXJtaW5hbCBzY3JlZW4tdXBkYXRlIG1vZGUgRkFTVCAqLwotZXh0ZXJuIGludCB1cGRtb2RlOwot I2lmbmRlZiBLVUkKLWludCB0dF9zdGF0dXNbVk5VTV0gPSB7MSwxLDAsMH07ICAgICAgICAvKiBU ZXJtaW5hbCBzdGF0dXMgbGluZSBkaXNwbGF5ZWQgKi8KLWludCB0dF9zdGF0dXNfdXNyW1ZOVU1d ID0gezEsMSwwLDB9OwotI2Vsc2UgIC8qIEtVSSAqLwotZXh0ZXJuIENLRkxPQVQgZmxvYXR2YWw7 Ci1DS0ZMT0FUIHR0X2xpbmVzcGFjaW5nW1ZOVU1dID0gezEuMCwxLjAsMS4wLDEuMH07Ci0jaWZk ZWYgSzk1RwotaW50IHR0X3N0YXR1c1tWTlVNXSA9IHsxLDEsMCwwfTsgICAgICAgIC8qIFRlcm1p bmFsIHN0YXR1cyBsaW5lIGRpc3BsYXllZCAqLwotaW50IHR0X3N0YXR1c191c3JbVk5VTV0gPSB7 MSwxLDAsMH07Ci0jZWxzZSAvKiBLOTVHICovCi1pbnQgdHRfc3RhdHVzW1ZOVU1dID0gezAsMCww LDB9OyAgICAgICAgLyogVGVybWluYWwgc3RhdHVzIGxpbmUgZGlzcGxheWVkICovCi1pbnQgdHRf c3RhdHVzX3VzcltWTlVNXSA9IHswLDAsMCwwfTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYg LyogS1VJICovCi1pbnQgdHRfc2VuZGRhdGEgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogTGV0 IGhvc3QgcmVhZCB0ZXJtaW5hbCBkYXRhICovCi1leHRlcm4gaW50IHd5X2Jsb2NrZW5kOyAgICAg ICAgICAgICAgICAgLyogVGVybWluYWwgU2VuZCBEYXRhIEVPQiB0eXBlICovCi1pbnQgdHRfaGlk YXR0ciA9IDE7ICAgICAgICAgICAgICAgICAgICAgLyogQXR0cmlidXRlcyBhcmUgaGlkZGVuICov Ci0KLWV4dGVybiB1bnNpZ25lZCBjaGFyIGNvbG9ybm9ybWFsLCBjb2xvcnNlbGVjdCwKLWNvbG9y dW5kZXJsaW5lLCBjb2xvcnN0YXR1cywgY29sb3JoZWxwLCBjb2xvcmJvcmRlciwKLWNvbG9yZ3Jh cGhpYywgY29sb3JkZWJ1ZywgY29sb3JyZXZlcnNlLCBjb2xvcml0YWxpYzsKLQotZXh0ZXJuIGlu dCB0cnVlYmxpbmssIHRydWV1bmRlcmxpbmUsIHRydWVyZXZlcnNlLCB0cnVlaXRhbGljLCB0cnVl ZGltOwotCi1leHRlcm4gaW50IGJnaSwgZmdpOwotZXh0ZXJuIGludCBzY3JuaW5pdGlhbGl6ZWRb XTsKLQotc3RydWN0IGtleXRhYiBhdWRpYmxldGFiW10gPSB7ICAgICAgICAgIC8qIFRlcm1pbmFs IEJlbGwgQXVkaWJsZSBtb2RlICovCi0gICAgeyAiYmVlcCIsICAgICAgICAgIFhZQl9CRUVQLCAw IH0sICAgLyogVmFsdWVzIE9SZCB3aXRoIGJlbGwgbW9kZSAqLwotICAgIHsgInN5c3RlbS1zb3Vu ZHMiLCBYWUJfU1lTLCAgMCB9Ci19OwotaW50IG5hdWRpYmxldGFiID0gc2l6ZW9mKGF1ZGlibGV0 YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKTsKLQotc3RydWN0IGtleXRhYiBha210YWJbXSA9IHsg ICAgICAgICAgICAgIC8qIEFycm93IGtleSBtb2RlICovCi0gICAgeyAiYXBwbGljYXRpb24iLCBU VEtfQVBQTCwgMCB9LAotICAgIHsgImN1cnNvciIsICAgICAgVFRLX05PUk0sIDAgfQotfTsKLXN0 cnVjdCBrZXl0YWIga3BtdGFiW10gPSB7ICAgICAgICAgICAgICAvKiBLZXlwYWQgbW9kZSAqLwot ICAgIHsgImFwcGxpY2F0aW9uIiwgVFRLX0FQUEwsIDAgfSwKLSAgICB7ICJudW1lcmljIiwgICAg IFRUS19OT1JNLCAwIH0KLX07Ci0KLXN0cnVjdCBrZXl0YWIgdHRjb2xtb2RldGFiW10gPSB7Ci0g ICAgeyAiY3VycmVudC1jb2xvciIsIDAsIDAgfSwKLSAgICB7ICJkZWZhdWx0LWNvbG9yIiwgMSwg MCB9Ci19OwotaW50IG5jb2xtb2RlID0gc2l6ZW9mKHR0Y29sbW9kZXRhYikvc2l6ZW9mKHN0cnVj dCBrZXl0YWIpOwotCi0jZGVmaW5lIFRUQ09MTk9SICAwCi0jZGVmaW5lIFRUQ09MUkVWICAxCi0j ZGVmaW5lIFRUQ09MVU5EICAyCi0jZGVmaW5lIFRUQ09MU1RBICAzCi0jZGVmaW5lIFRUQ09MSExQ ICA0Ci0jZGVmaW5lIFRUQ09MQk9SICA1Ci0jZGVmaW5lIFRUQ09MU0VMICA2Ci0jZGVmaW5lIFRU Q09MREVCICA3Ci0jZGVmaW5lIFRUQ09MR1JQICA4Ci0jZGVmaW5lIFRUQ09MSVRBICA5Ci0jZGVm aW5lIFRUQ09MUkVTICAxMAotI2RlZmluZSBUVENPTEVSQSAgMTEKLQotc3RydWN0IGtleXRhYiB0 dHljb2x0YWJbXSA9IHsgICAgICAgICAgICAgICAgICAgLyogVGVybWluYWwgU2NyZWVuIGNvbG9y aW5nICovCi0gICAgeyAiYm9yZGVyIiwgICAgICAgICAgICAgVFRDT0xCT1IsIDAgfSwgICAgICAv KiBTY3JlZW4gYm9yZGVyIGNvbG9yICovCi0gICAgeyAiZGVidWctdGVybWluYWwiLCAgICAgVFRD T0xERUIsIDAgfSwgICAgICAvKiBEZWJ1ZyBjb2xvciAqLwotICAgIHsgImVyYXNlIiwgICAgICAg ICAgICAgIFRUQ09MRVJBLCAwIH0sICAgICAgLyogRXJhc2UgbW9kZSAqLwotICAgIHsgImdyYXBo aWMiLCAgICAgICAgICAgIFRUQ09MR1JQLCAwIH0sICAgICAgLyogR3JhcGhpYyBDb2xvciAqLwot ICAgIHsgImhlbHAtdGV4dCIsICAgICAgICAgIFRUQ09MSExQLCAwIH0sICAgICAgLyogSGVscCBz Y3JlZW5zICovCi0gICAgeyAiaXRhbGljIiwgICAgICAgICAgICAgVFRDT0xJVEEsIDAgfSwgICAg ICAvKiBJdGFsaWMgQ29sb3IgKi8KLSAgICB7ICJub3JtYWwiLCAgICAgICAgICAgICBUVENPTE5P UiwgQ01fSU5WIH0sIC8qIE5vcm1hbCBzY3JlZW4gdGV4dCAqLwotICAgIHsgInJlc2V0LW9uLWVz Y1swbSIsICAgIFRUQ09MUkVTLCAwIH0sICAgICAgLyogUmVzZXQgb24gRVNDIFsgMCBtICovCi0g ICAgeyAicmV2ZXJzZS12aWRlbyIsICAgICAgVFRDT0xSRVYsIDAgfSwgICAgICAvKiBSZXZlcnNl IHZpZGVvICovCi0gICAgeyAic3RhdHVzLWxpbmUiLCAgICAgICAgVFRDT0xTVEEsIDAgfSwgICAg ICAvKiBTdGF0dXMgbGluZSAqLwotICAgIHsgInNlbGVjdGlvbiIsICAgICAgICAgIFRUQ09MU0VM LCAwIH0sICAgICAgLyogU2VsZWN0aW9uIGNvbG9yICovCi0gICAgeyAidGVybWluYWwtc2NyZWVu IiwgICAgVFRDT0xOT1IsIDAgfSwgICAgICAvKiBCZXR0ZXIgbmFtZSB0aGFuICJub3JtYWwiICov Ci0gICAgeyAidW5kZXJsaW5lZC10ZXh0IiwgICAgVFRDT0xVTkQsIDAgfSAgICAgICAvKiBVbmRl cmxpbmVkIHRleHQgKi8KLX07Ci1pbnQgbmNvbG9ycyA9IChzaXplb2YodHR5Y29sdGFiKSAvIHNp emVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLSNkZWZpbmUgVFRBVFROT1IgIDAKLSNkZWZpbmUgVFRB VFRCTEkgIDEKLSNkZWZpbmUgVFRBVFRSRVYgIDIKLSNkZWZpbmUgVFRBVFRVTkQgIDMKLSNkZWZp bmUgVFRBVFRQUk8gIDQKLSNkZWZpbmUgVFRBVFRCTEQgIDUKLSNkZWZpbmUgVFRBVFRESU0gIDYK LSNkZWZpbmUgVFRBVFRJTlYgIDcKLSNkZWZpbmUgVFRBVFRJVEEgIDgKLSNkZWZpbmUgVFRBVFRE T05FIDkKLQotc3RydWN0IGtleXRhYiB0dHlhdHRydGFiW10gPSB7Ci0gICAgeyAiYmxpbmsiLCAg ICAgVFRBVFRCTEksIDAgfSwKLSAgICB7ICJkaW0iLCAgICAgICBUVEFUVERJTSwgMCB9LAotICAg IHsgIml0YWxpYyIsICAgIFRUQVRUSVRBLCAwIH0sCi0gICAgeyAicHJvdGVjdGVkIiwgVFRBVFRQ Uk8sIDAgfSwKLSAgICB7ICJyZXZlcnNlIiwgICBUVEFUVFJFViwgMCB9LAotICAgIHsgInVuZGVy bGluZSIsIFRUQVRUVU5ELCAwIH0KLX07Ci1pbnQgbmF0dHJpYiA9IChzaXplb2YodHR5YXR0cnRh YikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi1zdHJ1Y3Qga2V5dGFiIHR0eXByb3RhYltd ID0gewotICAgIHsgImJsaW5rIiwgICAgICAgVFRBVFRCTEksICAwIH0sCi0gICAgeyAiYm9sZCIs ICAgICAgICBUVEFUVEJMRCwgIDAgfSwKLSAgICB7ICJkaW0iLCAgICAgICAgIFRUQVRURElNLCAg MCB9LAotICAgIHsgImRvbmUiLCAgICAgICAgVFRBVFRET05FLCBDTV9JTlYgfSwKLSAgICB7ICJp bnZpc2libGUiLCAgIFRUQVRUSU5WLCAgMCB9LAotICAgIHsgIml0YWxpYyIsICAgICAgVFRBVFRJ VEEsICAwIH0sCi0gICAgeyAibm9ybWFsIiwgICAgICBUVEFUVE5PUiwgIDAgfSwKLSAgICB7ICJy ZXZlcnNlIiwgICAgIFRUQVRUUkVWLCAgMCB9LAotICAgIHsgInVuZGVybGluZWQiLCAgVFRBVFRV TkQsICAwIH0KLQotfTsKLWludCBucHJvdGVjdCA9IChzaXplb2YodHR5cHJvdGFiKSAvIHNpemVv ZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLXN0cnVjdCBrZXl0YWIgdHR5c2VvYnRhYltdID0gewotICAg IHsgImNybGZfZXR4IiwgIDEsIDAgfSwKLSAgICB7ICJ1c19jciIsICAgICAwLCAwIH0KLX07Ci0K LXN0cnVjdCBrZXl0YWIgdHR5Y2xydGFiW10gPSB7ICAgICAgICAgICAvKiBDb2xvcnMgKi8KLSAg ICB7ICJibGFjayIsICAgICAgICAgMCwgMCAgICAgIH0sCi0gICAgeyAiYmx1ZSIsICAgICAgICAg IDEsIDAgICAgICB9LAotICAgIHsgImJyb3duIiwgICAgICAgICA2LCAwICAgICAgfSwKLSAgICB7 ICJjeWFuIiwgICAgICAgICAgMywgMCAgICAgIH0sCi0gICAgeyAiZGFya2dyYXkiLCAgICAgIDgs IENNX0lOViB9LAotICAgIHsgImRncmF5IiwgICAgICAgICA4LCAwICAgICAgfSwKLSAgICB7ICJn cmVlbiIsICAgICAgICAgMiwgMCAgICAgIH0sCi0gICAgeyAibGJsdWUiLCAgICAgICAgIDksIENN X0lOViB9LAotICAgIHsgImxjeWFuIiwgICAgICAgIDExLCBDTV9JTlYgfSwKLSAgICB7ICJsZ3Jh eSIsICAgICAgICAgNywgQ01fSU5WIH0sCi0gICAgeyAibGdyZWVuIiwgICAgICAgMTAsIENNX0lO ViB9LAotICAgIHsgImxpZ2h0Ymx1ZSIsICAgICA5LCAwICAgICAgfSwKLSAgICB7ICJsaWdodGN5 YW4iLCAgICAxMSwgMCAgICAgIH0sCi0gICAgeyAibGlnaHRncmF5IiwgICAgIDcsIDAgICAgICB9 LAotICAgIHsgImxpZ2h0Z3JlZW4iLCAgIDEwLCAwICAgICAgfSwKLSAgICB7ICJsaWdodG1hZ2Vu dGEiLCAxMywgMCAgICAgIH0sCi0gICAgeyAibGlnaHRyZWQiLCAgICAgMTIsIDAgICAgICB9LAot ICAgIHsgImxtYWdlbnRhIiwgICAgIDEzLCBDTV9JTlYgfSwKLSAgICB7ICJscmVkIiwgICAgICAg ICAxMiwgQ01fSU5WIH0sCi0gICAgeyAibWFnZW50YSIsICAgICAgIDUsIDAgICAgICB9LAotICAg IHsgInJlZCIsICAgICAgICAgICA0LCAwICAgICAgfSwKLSAgICB7ICJ3aGl0ZSIsICAgICAgICAx NSwgMCAgICAgIH0sCi0gICAgeyAieWVsbG93IiwgICAgICAgMTQsIDAgICAgICB9Ci19OwotaW50 IG5jbHJzID0gKHNpemVvZiAodHR5Y2xydGFiKSAvIHNpemVvZiAoc3RydWN0IGtleXRhYikpOwot Ci1zdHJ1Y3Qga2V5dGFiIHR0eWN1cnRhYltdID0gewotICAgIHsgImZ1bGwiLCAgICAgICAgVFRD X0JMT0NLLCAwIH0sCi0gICAgeyAiaGFsZiIsICAgICAgICBUVENfSEFMRiwgIDAgfSwKLSAgICB7 ICJ1bmRlcmxpbmUiLCAgIFRUQ19VTElORSwgMCB9Ci19OwotaW50IG5jdXJzb3JzID0gMzsKLQot c3RydWN0IGtleXRhYiB0dHlwdGFiW10gPSB7Ci0gICAgeyAiYWFhIiwgICAgICBUVF9BQUEsICAg ICBDTV9JTlYgfSwgICAgIC8qIEFubkFyYm9yICovCi0gICAgeyAiYWRtM2EiLCAgICBUVF9BRE0z QSwgICAwIH0sICAgICAgICAgIC8qIExTSSBBRE0tM0EgKi8KLSAgICB7ICJhZG01IiwgICAgIFRU X0FETTUsICAgIDAgfSwgICAgICAgICAgLyogTFNJIEFETS01ICovCi0gICAgeyAiYWl4dGVybSIs ICBUVF9BSVhURVJNLCAwIH0sICAgICAgICAgIC8qIElCTSBBSVh0ZXJtICovCi0gICAgeyAiYW5u YXJib3IiLCBUVF9BQUEsICAgICAwIH0sICAgICAgICAgIC8qIEFubkFyYm9yICovCi0gICAgeyAi YW5zaS1iYnMiLCBUVF9BTlNJLCAgICAwIH0sICAgICAgICAgIC8qIEFOU0kuU1lTIChCQlMpICov Ci0gICAgeyAiYXQzODYiLCAgICBUVF9BVDM4NiwgICAwIH0sICAgICAgICAgIC8qIFVuaXh3YXJl IEFOU0kgKi8KLSAgICB7ICJhdmF0YXIvMCsiLFRUX0FOU0ksICAgIDAgfSwgICAgICAgICAgLyog QVZBVEFSLzArICovCi0gICAgeyAiYmE4MCIsICAgICBUVF9CQTgwLCAgICAwIH0sICAgICAgICAg IC8qIE5peGRvcmYgQkE4MCAqLwotICAgIHsgImJlIiwgICAgICAgVFRfQkVPUywgICAgQ01fSU5W fENNX0FCUiB9LAotICAgIHsgImJlb3MtYW5zaSIsVFRfQkVPUywgICAgQ01fSU5WIH0sICAgICAv KiBCZU9TIEFOU0kgKi8KLSAgICB7ICJiZXRlcm0iLCAgIFRUX0JFT1MsICAgIDAgfSwgICAgICAg ICAgLyogQmVPUyBUZXJtaW5hbCAoYXMgb2YgUFIyICkgKi8KLSAgICB7ICJkMjAwIiwgICAgIFRU X0RHMjAwLCAgIENNX0lOVnxDTV9BQlIgfSwgLyogRGF0YSBHZW5lcmFsIERBU0hFUiAyMDAgKi8K LSAgICB7ICJkMjEwIiwgICAgIFRUX0RHMjEwLCAgIENNX0lOVnxDTV9BQlIgfSwgLyogRGF0YSBH ZW5lcmFsIERBU0hFUiAyMTAgKi8KLSAgICB7ICJkMjE3IiwgICAgIFRUX0RHMjE3LCAgIENNX0lO VnxDTV9BQlIgfSwgLyogRGF0YSBHZW5lcmFsIERBU0hFUiAyMTcgKi8KLSAgICB7ICJkZzIwMCIs ICAgIFRUX0RHMjAwLCAgIDAgfSwgICAgICAgICAgLyogRGF0YSBHZW5lcmFsIERBU0hFUiAyMDAg Ki8KLSAgICB7ICJkZzIxMCIsICAgIFRUX0RHMjEwLCAgIDAgfSwgICAgICAgICAgLyogRGF0YSBH ZW5lcmFsIERBU0hFUiAyMTAgKi8KLSAgICB7ICJkZzIxNyIsICAgIFRUX0RHMjE3LCAgIDAgfSwg ICAgICAgICAgLyogRGF0YSBHZW5lcmFsIERBU0hFUiAyMTcgKi8KLSAgICB7ICJoMTUwMCIsICAg IFRUX0haTDE1MDAsIENNX0lOViB9LCAgICAgLyogSGF6ZWx0aW5lIDE1MDAgKi8KLSAgICB7ICJo MTkiLCAgICAgIFRUX0gxOSwgICAgIENNX0lOViB9LCAgICAgLyogSGVhdGgtMTkgKi8KLSAgICB7 ICJoZWF0aDE5IiwgIFRUX0gxOSwgICAgIDAgfSwgICAgICAgICAgLyogSGVhdGgtMTkgKi8KLSAg ICB7ICJoZnQiLCAgICAgIFRUX0hGVCwgICAgIDAgfSwgICAgICAgICAgLyogSUJNIEhpZ2ggRnVu Y3Rpb24gVGVybWluYWwgKi8KLSAgICB7ICJocDI2MjFhIiwgIFRUX0hQMjYyMSwgIDAgfSwgICAg ICAgICAgLyogSFAgMjYyMUEgKi8KLSAgICB7ICJocHRlcm0iLCAgIFRUX0hQVEVSTSwgIDAgfSwg ICAgICAgICAgLyogSFAgVEVSTSAqLwotICAgIHsgImh6MTUwMCIsICAgVFRfSFpMMTUwMCwgMCB9 LCAgICAgICAgICAvKiBIYXplbHRpbmUgMTUwMCAqLwotICAgIHsgImlibTMxNTEiLCAgVFRfSUJN MzEsICAgMCB9LCAgICAgICAgICAvKiBJQk0gMzEwMS14eCwzMTYxICovCi0gICAgeyAibGludXgi LCAgICBUVF9MSU5VWCwgICAwIH0sICAgICAgICAgIC8qIExpbnV4ICovCi0gICAgeyAicWFuc2ki LCAgICBUVF9RQU5TSSwgICAwIH0sICAgICAgICAgIC8qIFFOWCBBTlNJICovCi0gICAgeyAicW54 IiwgICAgICBUVF9RTlgsICAgICAwIH0sICAgICAgICAgIC8qIFFOWCBDb25zb2xlICovCi0gICAg eyAic2NvYW5zaSIsICBUVF9TQ09BTlNJLCAwIH0sICAgICAgICAgIC8qIFNDTyBBTlNJICovCi0g ICAgeyAic25pLTk3ODAxIixUVF85NzgwMSwgICAwIH0sICAgICAgICAgIC8qIFNOSSA5NzgwMSAq LwotICAgIHsgInN1biIsICAgICAgVFRfU1VOLCAgICAgMCB9LCAgICAgICAgICAvKiBTVU4gQ29u c29sZSAqLwotLyoKLSAgVGhlIGlkZWEgb2YgTk9ORSBpcyB0byBsZXQgdGhlIGNvbnNvbGUgZHJp dmVyIGhhbmRsZSB0aGUgZXNjYXBlIHNlcXVlbmNlcywKLSAgd2hpY2gsIGluIHRoZW9yeSBhdCBs ZWFzdCwgd291bGQgZ2l2ZSBub3Qgb25seSBBTlNJIGVtdWxhdGlvbiwgYnV0IGFsc28gYW55Ci0g IG90aGVyIGtpbmQgb2YgZW11bGF0aW9uIHRoYXQgbWlnaHQgYmUgcHJvdmlkZWQgYnkgYWx0ZXJu YXRpdmUgY29uc29sZQotICBkcml2ZXJzLCBpZiBhbnkgZXhpc3RlZC4KLQotICBGb3IgdGhpcyB0 byB3b3JrLCBja29jb24uYyB3b3VsZCBuZWVkIHRvIGJlIG1vZGlmaWVkIHRvIG1ha2UgaGlnaGVy LWxldmVsCi0gIGNhbGxzLCBsaWtlIFZpb1dydFRUWSgpLCBEb3NXcml0ZSgpLCBvciAoc2ltcGx5 KSB3cml0ZSgpLCByYXRoZXIgdGhhbgotICBWaW9XcnQqQ2VsbCgpIGFuZCBzaW1pbGFyLCBhbmQg aXQgd291bGQgYWxzbyBoYXZlIHRvIGdpdmUgdXAgaXRzIHJvbGxiYWNrCi0gIGZlYXR1cmUsIGFu ZCBpdHMgc3RhdHVzIGxpbmUgYW5kIGhlbHAgc2NyZWVucyB3b3VsZCBhbHNvIGhhdmUgdG8gYmUK LSAgZm9yZ290dGVuIG9yIGVsc2UgZG9uZSBpbiBhbiBBTlNJIHdheS4KLQotICBBcyBtYXR0ZXJz IHN0YW5kLCB3ZSBhbHJlYWR5IGhhdmUgcGVyZmVjdGx5IGdvb2QgQU5TSSBlbXVsYXRpb24gYnVp bHQgaW4sCi0gIGFuZCB0aGVyZSBhcmUgbm8gYWx0ZXJuYXRpdmUgY29uc29sZSBkcml2ZXJzIGF2 YWlsYWJsZSwgc28gdGhlcmUgaXMgbm8gcG9pbnQKLSAgaW4gaGF2aW5nIGEgdGVybWluYWwgdHlw ZSBvZiBOT05FLCBzbyBpdCBpcyBjb21tZW50ZWQgb3V0LiAgSG93ZXZlciwgc2hvdWxkCi0gIHlv dSB1bmNvbW1lbnQgaXQsIGl0IHdpbGwgd29yayBsaWtlIGEgImdsYXNzIHR0eSIgLS0gbm8gZXNj YXBlIHNlcXVlbmNlCi0gIGludGVycHJldGF0aW9uIGF0IGFsbDsgc29tZXdoYXQgc2ltaWxhciB0 byBkZWJ1ZyBtb2RlLCBleGNlcHQgd2l0aG91dCB0aGUKLSAgZGVidWdnaW5nIChubyBoaWdobGln aHRpbmcgb2YgY29udHJvbCBjaGFycyBvciBlc2NhcGUgc2VxdWVuY2VzKTsgaGVscAotICBzY3Jl ZW5zLCBzdGF0dXMgbGluZSwgYW5kIHJvbGxiYWNrIHdpbGwgc3RpbGwgd29yay4KLSovCi0jaWZk ZWYgT1MyUE0KLSNpZmRlZiBDT01NRU5UCi0gICAgeyAidGVrNDAxNCIsIFRUX1RFSzQwLCAgMCB9 LAotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNlbmRpZiAvKiBPUzJQTSAqLwotICAgIHsgInR0eSIs ICAgICBUVF9OT05FLCAgIDAgfSwKLSAgICB7ICJ0dmk5MTArIiwgVFRfVFZJOTEwLCAwIH0sCi0g ICAgeyAidHZpOTI1IiwgIFRUX1RWSTkyNSwgMCB9LAotICAgIHsgInR2aTk1MCIsICBUVF9UVkk5 NTAsIDAgfSwKLSAgICB7ICJ2YzQwNCIsICAgVFRfVkM0NDA0LCAwIH0sCi0gICAgeyAidmM0NDA0 IiwgIFRUX1ZDNDQwNCwgQ01fSU5WIH0sCi0gICAgeyAidmlwNzgwOSIsIFRUX1ZJUDc4MDksMCB9 LAotICAgIHsgInZ0MTAwIiwgICBUVF9WVDEwMCwgIDAgfSwKLSAgICB7ICJ2dDEwMiIsICAgVFRf VlQxMDIsICAwIH0sCi0gICAgeyAidnQyMjAiLCAgIFRUX1ZUMjIwLCAgMCB9LAotICAgIHsgInZ0 MjIwcGMiLCBUVF9WVDIyMFBDLDAgfSwKLSAgICB7ICJ2dDMyMCIsICAgVFRfVlQzMjAsICAwIH0s Ci0gICAgeyAidnQzMjBwYyIsIFRUX1ZUMzIwUEMsMCB9LAotICAgIHsgInZ0NTIiLCAgICBUVF9W VDUyLCAgIDAgfSwKLSNpZmRlZiBOVAotICAgIHsgInZ0bnQiLCAgICBUVF9WVE5ULCAgIDAgfSwK LSNlbHNlIC8qIE5UICovCi0gICAgeyAidnRudCIsICAgIFRUX1ZUTlQsICBDTV9JTlYgfSwKLSNl bmRpZiAvKiBOVCAqLwotICAgIHsgInd5MTYwIiwgICBUVF9XWTE2MCwgIDAgfSwKLSAgICB7ICJ3 eTMwIiwgICAgVFRfV1kzMCwgICAwIH0sCi0gICAgeyAid3kzNzAiLCAgIFRUX1dZMzcwLCAgMCB9 LAotICAgIHsgInd5NTAiLCAgICBUVF9XWTUwLCAgIDAgfSwKLSAgICB7ICJ3eTYwIiwgICAgVFRf V1k2MCwgICAwIH0sCi0gICAgeyAid3lzZTMwIiwgIFRUX1dZMzAsICAgQ01fSU5WIH0sCi0gICAg eyAid3lzZTM3MCIsIFRUX1dZMzcwLCAgQ01fSU5WIH0sCi0gICAgeyAid3lzZTUwIiwgIFRUX1dZ NTAsICAgQ01fSU5WIH0sCi0gICAgeyAid3lzZTYwIiwgIFRUX1dZNjAsICAgQ01fSU5WIH0KLX07 Ci1pbnQgbnR0eXAgPSAoc2l6ZW9mKHR0eXB0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsK LQotc3RydWN0IGtleXRhYiB0dGtleXRhYltdID0gewotICAgIHsgImFhYSIsICAgICAgIFRUX0FB QSwgICAgICAgIENNX0lOViB9LCAgICAgICAgLyogQW5uQXJib3IgKi8KLSAgICB7ICJhZG0zYSIs ICAgICBUVF9BRE0zQSwgICAgICAwIH0sICAgICAgICAgICAgIC8qIExTSSBBRE0tM0EgKi8KLSAg ICB7ICJhZG01IiwgICAgICBUVF9BRE01LCAgICAgICAwIH0sICAgICAgICAgICAgIC8qIExTSSBB RE0tNSAqLwotICAgIHsgImFpeHRlcm0iLCAgIFRUX0FJWFRFUk0sICAgIDAgfSwgICAgICAgICAg ICAgLyogSUJNIEFJWHRlcm0gKi8KLSAgICB7ICJhbm5hcmJvciIsICBUVF9BQUEsICAgICAgICAw IH0sICAgICAgICAgICAgIC8qIEFubkFyYm9yICovCi0gICAgeyAiYW5zaS1iYnMiLCAgVFRfQU5T SSwgICAgICAgMCB9LCAgICAgICAgICAgICAvKiBBTlNJLlNZUyAoQkJTKSAqLwotICAgIHsgImF0 Mzg2IiwgICAgIFRUX0FUMzg2LCAgICAgIDAgfSwgICAgICAgICAgICAgLyogVW5peHdhcmUgQU5T SSAqLwotICAgIHsgImF2YXRhci8wKyIsIFRUX0FOU0ksICAgICAgIDAgfSwgICAgICAgICAgICAg LyogQVZBVEFSLzArICovCi0gICAgeyAiYmE4MCIsICAgICAgVFRfQkE4MCwgICAgICAgMCB9LCAg ICAgICAgICAgICAvKiBOaXhkb3JmIEJBODAgKi8KLSAgICB7ICJiZSIsICAgICAgICBUVF9CRU9T LCAgICAgICBDTV9JTlZ8Q01fQUJSIH0sCi0gICAgeyAiYmVvcy1hbnNpIiwgVFRfQkVPUywgICAg ICAgQ01fSU5WIH0sICAgICAgICAvKiBCZU9TIEFOU0kgKi8KLSAgICB7ICJiZXRlcm0iLCAgICBU VF9CRU9TLCAgICAgICAwIH0sICAgICAgICAgICAgIC8qIEJlT1MgVGVybWluYWwgKERSMikgKi8K LSAgICB7ICJkMjAwIiwgICAgICBUVF9ERzIwMCwgICAgICBDTV9JTlZ8Q01fQUJSIH0sIC8qIERH IERBU0hFUiAyMDAgKi8KLSAgICB7ICJkMjEwIiwgICAgICBUVF9ERzIxMCwgICAgICBDTV9JTlZ8 Q01fQUJSIH0sIC8qIERHIERBU0hFUiAyMTAgKi8KLSAgICB7ICJkMjE3IiwgICAgICBUVF9ERzIx NywgICAgICBDTV9JTlZ8Q01fQUJSIH0sIC8qIERHIERBU0hFUiAyMTcgKi8KLSAgICB7ICJkZzIw MCIsICAgICBUVF9ERzIwMCwgICAgICAwIH0sICAgICAgICAgICAgIC8qIERHIERBU0hFUiAyMDAg Ki8KLSAgICB7ICJkZzIxMCIsICAgICBUVF9ERzIxMCwgICAgICAwIH0sICAgICAgICAgICAgIC8q IERHIERBU0hFUiAyMTAgKi8KLSAgICB7ICJkZzIxNyIsICAgICBUVF9ERzIxNywgICAgICAwIH0s ICAgICAgICAgICAgIC8qIERHIERBU0hFUiAyMTcgKi8KLSAgICB7ICJlbWFjcyIsICAgICBUVF9L Qk1fRU1BQ1MsICAwIH0sICAgICAgICAgICAgIC8qIEVtYWNzIG1vZGUgKi8KLSAgICB7ICJoMTki LCAgICAgICBUVF9IMTksICAgICAgICBDTV9JTlYgfSwgICAgICAgIC8qIEhlYXRoLTE5ICovCi0g ICAgeyAiaGVhdGgxOSIsICAgVFRfSDE5LCAgICAgICAgMCB9LCAgICAgICAgICAgICAvKiBIZWF0 aC0xOSAqLwotICAgIHsgImhlYnJldyIsICAgIFRUX0tCTV9IRUJSRVcsIDAgfSwgICAgICAgICAg ICAgLyogSGVicmV3IG1vZGUgKi8KLSAgICB7ICJoZnQiLCAgICAgICBUVF9IRlQsICAgICAgICAw IH0sICAgICAgICAgICAgIC8qIElCTSBIaWdoIEZ1bmN0aW9uIFRlcm0gKi8KLSAgICB7ICJocDI2 MjFhIiwgICBUVF9IUDI2MjEsICAgICAwIH0sICAgICAgICAgICAgIC8qIEhQIDI2MjFBICovCi0g ICAgeyAiaHB0ZXJtIiwgICAgVFRfSFBURVJNLCAgICAgMCB9LCAgICAgICAgICAgICAvKiBIUCBU RVJNICovCi0gICAgeyAiaHoxNTAwIiwgICAgVFRfSFpMMTUwMCwgICAgMCB9LCAgICAgICAgICAg ICAvKiBIYXplbHRpbmUgMTUwMCAqLwotICAgIHsgImlibTMxNTEiLCAgIFRUX0lCTTMxLCAgICAg IDAgfSwgICAgICAgICAgICAgLyogSUJNIDMxMDEteHgsMzE2MSAqLwotICAgIHsgImxpbnV4Iiwg ICAgIFRUX0xJTlVYLCAgICAgIDAgfSwgICAgICAgICAgICAgLyogTGludXggKi8KLSAgICB7ICJx YW5zaSIsICAgICBUVF9RQU5TSSwgICAgICAwIH0sICAgICAgICAgICAgIC8qIFFOWCBBTlNJICov Ci0gICAgeyAicW54IiwgICAgICAgVFRfUU5YLCAgICAgICAgMCB9LCAgICAgICAgICAgICAvKiBR TlggKi8KLSAgICB7ICJydXNzaWFuIiwgICBUVF9LQk1fUlVTU0lBTiwwIH0sICAgICAgICAgICAg IC8qIFJ1c3NpYW4gbW9kZSAqLwotICAgIHsgInNjb2Fuc2kiLCAgIFRUX1NDT0FOU0ksICAgIDAg fSwgICAgICAgICAgICAgLyogU0NPIEFOU0kgKi8KLSAgICB7ICJzbmktOTc4MDEiLCBUVF85Nzgw MSwgICAgICAwIH0sICAgICAgICAgICAgIC8qIFNOSSA5NzgwMSAqLwotICAgIHsgInN1biIsICAg ICAgIFRUX1NVTiwgICAgICAgIDAgfSwgICAgICAgICAgICAgLyogU1VOIENvbnNvbGUgKi8KLSNp ZmRlZiBPUzJQTQotI2lmZGVmIENPTU1FTlQKLSAgICB7ICJ0ZWs0MDE0IiwgICBUVF9URUs0MCwg ICAgICAwIH0sCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2VuZGlmIC8qIE9TMlBNICovCi0gICAg eyAidHR5IiwgICAgICAgVFRfTk9ORSwgICAgICAgMCB9LAotICAgIHsgInR2aTkxMCsiLCAgIFRU X1RWSTkxMCwgICAgIDAgfSwKLSAgICB7ICJ0dmk5MjUiLCAgICBUVF9UVkk5MjUsICAgICAwIH0s Ci0gICAgeyAidHZpOTUwIiwgICAgVFRfVFZJOTUwLCAgICAgMCB9LAotICAgIHsgInZjNDA0Iiwg ICAgIFRUX1ZDNDQwNCwgICAgIDAgfSwKLSAgICB7ICJ2YzQ0MDQiLCAgICBUVF9WQzQ0MDQsICAg ICBDTV9JTlYgfSwKLSAgICB7ICJ2aXA3ODA5IiwgICBUVF9WSVA3ODA5LCAgICAwIH0sCi0gICAg eyAidnQxMDAiLCAgICAgVFRfVlQxMDAsICAgICAgMCB9LAotICAgIHsgInZ0MTAyIiwgICAgIFRU X1ZUMTAyLCAgICAgIDAgfSwKLSAgICB7ICJ2dDIyMCIsICAgICBUVF9WVDIyMCwgICAgICAwIH0s Ci0gICAgeyAidnQyMjBwYyIsICAgVFRfVlQyMjBQQywgICAgMCB9LAotICAgIHsgInZ0MzIwIiwg ICAgIFRUX1ZUMzIwLCAgICAgIDAgfSwKLSAgICB7ICJ2dDMyMHBjIiwgICBUVF9WVDMyMFBDLCAg ICAwIH0sCi0gICAgeyAidnQ1MiIsICAgICAgVFRfVlQ1MiwgICAgICAgMCB9LAotICAgIHsgInZ0 bnQiLCAgICAgIFRUX1ZUTlQsICAgICAgIENNX0lOViB9LAotICAgIHsgIndwIiwgICAgICAgIFRU X0tCTV9XUCwgICAgIDAgfSwgICAgICAgICAgICAgLyogV29yZCBQZXJmZWN0IG1vZGUgKi8KLSAg ICB7ICJ3eTE2MCIsICAgICBUVF9XWTE2MCwgICAgICAwIH0sCi0gICAgeyAid3kzMCIsICAgICAg VFRfV1kzMCwgICAgICAgMCB9LAotICAgIHsgInd5MzcwIiwgICAgIFRUX1dZMzcwLCAgICAgIDAg fSwKLSAgICB7ICJ3eTUwIiwgICAgICBUVF9XWTUwLCAgICAgICAwIH0sCi0gICAgeyAid3k2MCIs ICAgICAgVFRfV1k2MCwgICAgICAgMCB9LAotICAgIHsgInd5c2UzMCIsICAgIFRUX1dZMzAsICAg ICAgIENNX0lOViB9LAotICAgIHsgInd5c2UzNzAiLCAgIFRUX1dZMzcwLCAgICAgIENNX0lOViB9 LAotICAgIHsgInd5c2U1MCIsICAgIFRUX1dZNTAsICAgICAgIENNX0lOViB9LAotICAgIHsgInd5 c2U2MCIsICAgIFRUX1dZNjAsICAgICAgIENNX0lOViB9Ci19OwotaW50IG50dGtleSA9IChzaXpl b2YodHRrZXl0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotI2lmbmRlZiBOT1NFVEtF WQotc3RydWN0IGtleXRhYiBrYm1vZHRhYltdID0gewotICAgIHsgImVtYWNzIiwgICBLQk1fRU0s IDAgICAgICB9LAotICAgIHsgImVuZ2xpc2giLCBLQk1fRU4sIENNX0lOViB9LAotICAgIHsgImhl YnJldyIsICBLQk1fSEUsIDAgICAgICB9LAotICAgIHsgIm5vcm1hbCIsICBLQk1fRU4sIDAgICAg ICB9LAotICAgIHsgIm5vbmUiLCAgICBLQk1fRU4sIENNX0lOViB9LAotICAgIHsgInJ1c3NpYW4i LCBLQk1fUlUsIDAgICAgICB9LAotICAgIHsgIndwIiwgICAgICBLQk1fV1AsIDAgICAgICB9Ci19 OwotaW50IG5rYm1vZHRhYiA9IChzaXplb2Yoa2Jtb2R0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0 YWIpKTsKLSNlbmRpZiAvKiBOT1NFVEtFWSAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotaW50 IHR0X2lucGFjaW5nID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIGlucHV0LXBhY2luZyAobm9u ZSkgKi8KLQotc3RydWN0IGtleXRhYiBwcnR5dGFiW10gPSB7IC8qIE9TLzIgUHJpb3JpdHkgTGV2 ZWxzICovCi0gICAgeyAiZm9yZWdyb3VuZC1zZXJ2ZXIiLCBYWVBfU1JWLCAwICAgICAgIH0sCi0g ICAgeyAiaWRsZSIsICAgICAgICAgICAgICBYWVBfSURMRSwgQ01fSU5WIH0sCi0gICAgeyAicmVn dWxhciIsICAgICAgICAgICBYWVBfUkVHLCAwICAgICAgIH0sCi0gICAgeyAidGltZS1jcml0aWNh bCIsICAgICBYWVBfUlRQLCAwICAgICAgIH0KLX07Ci1pbnQgbnBydHkgPSAoc2l6ZW9mKHBydHl0 YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVm IE5UCi1zdHJ1Y3Qga2V5dGFiIHdpbjk1dGFiW10gPSB7IC8qIFdpbjk1IHdvcmstYXJvdW5kcyAq LwotICAgIHsgIjguMy1maWxlbmFtZXMiLCAgICAgICAgIFhZVzhfMywgICAgMCB9LAotICAgIHsg ImFsdC1nciIsICAgICAgICAgICAgICAgIFhZV0FHUiwgICAgMCB9LAotICAgIHsgImhvcml6b250 YWwtc2Nhbi1saW5lLXN1YnN0aXR1dGlvbnMiLCBYWVdIU0wsIDAgfSwKLSAgICB7ICJrZXlib2Fy ZC10cmFuc2xhdGlvbiIsICBYWVdLRVksICAgIDAgfSwKLSAgICB7ICJsdWNpZGEtc3Vic3RpdHV0 aW9ucyIsICBYWVdMVUMsICAgIDAgfSwKLSAgICB7ICJvdmVybGFwcGVkLWlvIiwgICAgICAgICBY WVdPSU8sICAgIDAgfSwKLSAgICB7ICJwb3B1cHMiLCAgICAgICAgICAgICAgICBYWVdQT1BVUCwg IDAgfSwKLSAgICB7ICJzZWxlY3QtYnVnIiwgICAgICAgICAgICBYWVdTRUxFQ1QsIDAgfQotfTsK LWludCBud2luOTUgPSAoc2l6ZW9mKHdpbjk1dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7 Ci0jZW5kaWYgLyogTlQgKi8KLQotI2lmZGVmIE9TMk1PVVNFCi1leHRlcm4gaW50IHdpZGVyZXN1 bHQ7Ci1pbnQgdHRfbW91c2UgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgLyogVGVybWluYWwg bW91c2Ugb24vb2ZmICovCi0KLXN0cnVjdCBrZXl0YWIgbW91c2V0YWJbXSA9IHsgICAgICAgICAg ICAvKiBNb3VzZSBpdGVtcyAqLwotICAgIHsgImFjdGl2YXRlIiwgWFlNX09OLCAgICAgMCB9LAot ICAgIHsgImJ1dHRvbiIsICAgWFlNX0JVVFRPTiwgMCB9LAotICAgIHsgImNsZWFyIiwgICAgWFlN X0NMRUFSLCAgMCB9LAotICAgIHsgImRlYnVnIiwgICAgWFlNX0RFQlVHLCAgMCB9Ci19OwotaW50 IG5tdGFiID0gKHNpemVvZihtb3VzZXRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotc3Ry dWN0IGtleXRhYiBtb3VzZWJ1dHRvbnRhYltdID0geyAgICAgIC8qIGV2ZW50IGJ1dHRvbiAqLwot ICAgIHsgIjEiLCAgICAgICAgICAgICBYWU1fQjEsIDAgfSwKLSAgICB7ICIyIiwgICAgICAgICAg ICAgWFlNX0IyLCAwIH0sCi0gICAgeyAiMyIsICAgICAgICAgICAgIFhZTV9CMywgMCB9LAotICAg IHsgIm9uZSIsICAgICAgICAgICBYWU1fQjEsIENNX0lOViB9LAotICAgIHsgInRocmVlIiwgICAg ICAgICBYWU1fQjMsIENNX0lOViB9LAotICAgIHsgInR3byIsICAgICAgICAgICBYWU1fQjIsIENN X0lOViB9Ci19OwotaW50IG5tYnRhYiA9IChzaXplb2YobW91c2VidXR0b250YWIpIC8gc2l6ZW9m KHN0cnVjdCBrZXl0YWIpKTsKLQotc3RydWN0IGtleXRhYiBtb3VzZW1vZHRhYltdID0geyAgICAg ICAgIC8qIGV2ZW50IGJ1dHRvbiBrZXkgbW9kaWZpZXIgKi8KLSAgICB7ICJhbHQiLCAgICAgICAg ICAgICAgWFlNX0FMVCwgICAwIH0sCi0gICAgeyAiYWx0LXNoaWZ0IiwgICAgICAgIFhZTV9TSElG VHxYWU1fQUxULCAwIH0sCi0gICAgeyAiY3RybCIsICAgICAgICAgICAgIFhZTV9DVFJMLCAgMCB9 LAotICAgIHsgImN0cmwtYWx0IiwgICAgICAgICBYWU1fQ1RSTHxYWU1fQUxULCAwIH0sCi0gICAg eyAiY3RybC1hbHQtc2hpZnQiLCAgIFhZTV9DVFJMfFhZTV9TSElGVHxYWU1fQUxULCAwIH0sCi0g ICAgeyAiY3RybC1zaGlmdCIsICAgICAgIFhZTV9DVFJMfFhZTV9TSElGVCwgMCB9LAotICAgIHsg Im5vbmUiLCAgICAgICAgICAgICAwLCAwIH0sCi0gICAgeyAic2hpZnQiLCAgICAgICAgICAgIFhZ TV9TSElGVCwgMCB9Ci19OwotaW50IG5tbXRhYiA9IChzaXplb2YobW91c2Vtb2R0YWIpIC8gc2l6 ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotc3RydWN0IGtleXRhYiBtY2xpY2t0YWJbXSA9IHsgICAg ICAgICAgIC8qIGV2ZW50IGJ1dHRvbiBjbGljayBtb2RpZmllciAqLwotICAgIHsgImNsaWNrIiwg ICAgICAgIFhZTV9DMSwgICAwIH0sCi0gICAgeyAiZHJhZyIsICAgICAgICAgWFlNX0RSQUcsIDAg fSwKLSAgICB7ICJkb3VibGUtY2xpY2siLCBYWU1fQzIsICAgMCB9Ci19OwotaW50IG5tY3RhYiA9 IChzaXplb2YobWNsaWNrdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Ci0KLSNpZm5kZWYg Tk9LVkVSQlMKLWV4dGVybiBpbnQgbmt2ZXJiczsKLWV4dGVybiBzdHJ1Y3Qga2V5dGFiIGt2ZXJi c1tdOwotI2VuZGlmIC8qIE5PS1ZFUkJTICovCi0jZW5kaWYgLyogT1MyTU9VU0UgKi8KLQotLyog I2lmZGVmIFZNUyAqLwotc3RydWN0IGtleXRhYiBmYnRhYltdID0geyAgICAgICAgICAgICAgIC8q IEJpbmFyeSByZWNvcmQgdHlwZXMgZm9yIFZNUyAqLwotICAgIHsgImZpeGVkIiwgICAgIFhZRlRf QiwgMCB9LCAgICAgICAgIC8qIEZpeGVkIGlzIG5vcm1hbCBmb3IgYmluYXJ5ICovCi0gICAgeyAi dW5kZWZpbmVkIiwgWFlGVF9VLCAwIH0gICAgICAgICAgLyogVW5kZWZpbmVkIGlmIHRoZXkgYXNr IGZvciBpdCAqLwotfTsKLWludCBuZmJ0eXAgPSAoc2l6ZW9mKGZidGFiKSAvIHNpemVvZihzdHJ1 Y3Qga2V5dGFiKSk7Ci0vKiAjZW5kaWYgKi8KLQotI2lmZGVmIFZNUwotc3RydWN0IGtleXRhYiBs Ymx0YWJbXSA9IHsgICAgICAgICAgICAgIC8qIExhYmVsZWQgRmlsZSBpbmZvICovCi0gICAgeyAi YWNsIiwgICAgICAgICBMQkxfQUNMLCAwIH0sCi0gICAgeyAiYmFja3VwLWRhdGUiLCBMQkxfQkNL LCAwIH0sCi0gICAgeyAibmFtZSIsICAgICAgICBMQkxfTkFNLCAwIH0sCi0gICAgeyAib3duZXIi LCAgICAgICBMQkxfT1dOLCAwIH0sCi0gICAgeyAicGF0aCIsICAgICAgICBMQkxfUFRILCAwIH0K LX07Ci1pbnQgbmxibHAgPSAoc2l6ZW9mKGxibHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikp OwotI2Vsc2UKLSNpZmRlZiBPUzIKLXN0cnVjdCBrZXl0YWIgbGJsdGFiW10gPSB7ICAgICAgICAg ICAgICAvKiBMYWJlbGVkIEZpbGUgaW5mbyAqLwotICAgIHsgImFyY2hpdmUiLCAgIExCTF9BUkMs IDAgfSwKLSAgICB7ICJleHRlbmRlZCIsICBMQkxfRVhULCAwIH0sCi0gICAgeyAiaGlkZGVuIiwg ICAgTEJMX0hJRCwgMCB9LAotICAgIHsgInJlYWQtb25seSIsIExCTF9STywgIDAgfSwKLSAgICB7 ICJzeXN0ZW0iLCAgICBMQkxfU1lTLCAwIH0KLX07Ci1pbnQgbmxibHAgPSAoc2l6ZW9mKGxibHRh YikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8q IFZNUyAqLwotCi0jaWZkZWYgQ0tfQ1VSU0VTCi0jaWZkZWYgQ0tfUENUX0JBUgotc3RhdGljIHN0 cnVjdCBrZXl0YWIgZmRmdGFiW10gPSB7ICAgICAgIC8qIFNFVCBGSUxFIERJU1BMQVkgRlVMTCBv cHRpb25zICovCi0gICAgeyAidGhlcm1vbWV0ZXIiLCAgICAxLCAwLCB9LAotICAgIHsgIm5vLXRo ZXJtb21ldGVyIiwgMCwgMCAgfQotfTsKLWV4dGVybiBpbnQgdGhlcm1vbWV0ZXI7Ci0jZW5kaWYg LyogQ0tfUENUX0JBUiAqLwotI2VuZGlmIC8qIENLX0NVUlNFUyAqLwotCi1zdGF0aWMgc3RydWN0 IGtleXRhYiBmZHRhYltdID0geyAgICAgICAgLyogU0VUIEZJTEUgRElTUExBWSBvcHRpb25zICov Ci0jaWZkZWYgTUFDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFjaW50b3NoICov Ci0gICAgeyAiZnVsbHNjcmVlbiIsIFhZRkRfUiwgICAgICAwIH0sICAgLyogRnVsbC1zY3JlZW4g YnV0IG5vdCBjdXJzZXMgKi8KLSAgICB7ICJub25lIiwgICAgICAgWFlGRF9OLCAgICAgIDAgfSwK LSAgICB7ICJvZmYiLCAgICAgICAgWFlGRF9OLCBDTV9JTlYgfSwKLSAgICB7ICJvbiIsICAgICAg ICAgWFlGRF9SLCBDTV9JTlYgfSwKLSAgICB7ICJxdWlldCIsICAgICAgWFlGRF9OLCBDTV9JTlYg fSwKLSNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgTWFjICov Ci0gICAgeyAiYnJpZWYiLCBYWUZEX0IsIDAgfSwgICAgICAgICAgICAgLyogQnJpZWYgKi8KLSAg ICB7ICJjcnQiLCBYWUZEX1MsIDAgfSwgICAgICAgICAgICAgICAvKiBDUlQgZGlzcGxheSAqLwot I2lmZGVmIENLX0NVUlNFUwotI2lmZGVmIENPTU1FTlQKLSAgICB7ICJjdXJzZXMiLCAgICAgWFlG RF9DLCAgQ01fSU5WIH0sICAvKiBGdWxsLXNjcmVlbiwgY3Vyc2VzICovCi0jZW5kaWYgLyogQ09N TUVOVCAqLwotICAgIHsgImZ1bGxzY3JlZW4iLCBYWUZEX0MsICAwIH0sICAgICAgIC8qIEZ1bGwt c2NyZWVuLCB3aGF0ZXZlciB0aGUgbWV0aG9kICovCi0jZW5kaWYgLyogQ0tfQ1VSU0VTICovCi0j aWZkZWYgS1VJCi0gICAgeyAiZ3VpIiwgICAgWFlGRF9HLCAwIH0sICAgICAgICAgICAgLyogR1VJ ICovCi0jZW5kaWYgLyogS1VJICovICAgICAgICAKLSAgICB7ICJub25lIiwgICBYWUZEX04sIDAg ICAgICB9LCAgICAgICAvKiBObyBkaXNwbGF5ICovCi0gICAgeyAib2ZmIiwgICAgWFlGRF9OLCBD TV9JTlYgfSwgICAgICAgLyogRGl0dG8gKi8KLSAgICB7ICJvbiIsICAgICBYWUZEX1IsIENNX0lO ViB9LCAgICAgICAvKiBPbiA9IFNlcmlhbCAqLwotICAgIHsgInF1aWV0IiwgIFhZRkRfTiwgQ01f SU5WIH0sICAgICAgIC8qIE5vIGRpc3BsYXkgKi8KLSAgICB7ICJzZXJpYWwiLCBYWUZEX1IsIDAg ICAgICB9LCAgICAgICAvKiBTZXJpYWwgKi8KLSNlbmRpZiAvKiBNQUMgKi8KLSAgICB7ICIiLCAw LCAwIH0KLX07Ci1pbnQgbmZkdGFiID0gKHNpemVvZihmZHRhYikgLyBzaXplb2Yoc3RydWN0IGtl eXRhYikpIC0gMTsKLQotc3RydWN0IGtleXRhYiByc3J0YWJbXSA9IHsgICAgICAgICAgICAgIC8q IEZvciBSRU1PVEUgU0VUIFJFQ0VJVkUgKi8KLSAgICB7ICJwYWNrZXQtbGVuZ3RoIiwgWFlMRU4s ICAwIH0sCi0gICAgeyAidGltZW91dCIsICAgICAgIFhZVElNTywgMCB9Ci19OwotaW50IG5yc3J0 YWIgPSAoc2l6ZW9mKHJzcnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi0vKiBTZW5k L1JlY2VpdmUgUGFyYW1ldGVycyAqLwotCi1zdHJ1Y3Qga2V5dGFiIHNydGFiW10gPSB7Ci0gICAg eyAiYmFja3VwIiwgWFlCVVAsIDAgfSwKLSNpZm5kZWYgTk9DU0VUUwotICAgIHsgImNoYXJhY3Rl ci1zZXQtc2VsZWN0aW9uIiwgWFlDU0VULCAwIH0sCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotICAg IHsgImNvbnRyb2wtcHJlZml4IiwgWFlRQ1RMLCAwIH0sCi0jaWZkZWYgQ0tYWENIQVIKLSAgICB7 ICJkb3VibGUtY2hhcmFjdGVyIiwgWFlEQkwsIDAgfSwKLSNlbmRpZiAvKiBDS1hYQ0hBUiAqLwot ICAgIHsgImVuZC1vZi1wYWNrZXQiLCBYWUVPTCwgMCB9LAotI2lmZGVmIFBJUEVTRU5ECi0gICAg eyAiZmlsdGVyIiwgWFlGTFRSLCAwIH0sCi0jZW5kaWYgLyogUElQRVNFTkQgKi8KLSNpZmRlZiBD S1hYQ0hBUgotICAgIHsgImlnbm9yZS1jaGFyYWN0ZXIiLCBYWUlHTiwgMCB9LAotI2VuZGlmIC8q IENLWFhDSEFSICovCi0gICAgeyAiaS1wYWNrZXRzIiwgOTkzLCAwIH0sCi0gICAgeyAibW92ZS10 byIsIFhZTU9WRSwgMCB9LAotICAgIHsgIm5lZ290aWF0aW9uLXN0cmluZy1tYXgtbGVuZ3RoIiwg WFlJTklMLCBDTV9JTlYgfSwKLSAgICB7ICJwYWNrZXQtbGVuZ3RoIiwgWFlMRU4sIDAgfSwKLSAg ICB7ICJwYWQtY2hhcmFjdGVyIiwgWFlQQURDLCAwIH0sCi0gICAgeyAicGFkZGluZyIsIFhZTlBB RCwgMCB9LAotICAgIHsgInBhdGhuYW1lcyIsIFhZRlBBVEgsIDAgfSwKLSAgICB7ICJwYXVzZSIs IFhZUEFVUywgMCB9LAotI2lmZGVmIENLX1BFUk1TCi0gICAgeyAicGVybWlzc2lvbnMiLCA5OTQs IDB9LAkJLyogMjA2ICovCi0jZW5kaWYgLyogQ0tfUEVSTVMgKi8KLSAgICB7ICJxdW90ZSIsIFhZ UUNUTCwgQ01fSU5WIH0sICAgICAgICAvKiA9IENPTlRST0wtUFJFRklYICovCi0gICAgeyAicmVu YW1lLXRvIiwgWFlSRU5BTUUsIDAgfSwKLSAgICB7ICJzdGFydC1vZi1wYWNrZXQiLCBYWU1BUkss IDAgfSwKLSAgICB7ICJ0aW1lb3V0IiwgWFlUSU1PLCAwIH0sCi0jaWZkZWYgVk1TCi0gICAgeyAi dmVyc2lvbi1udW1iZXJzIiwgODg3LCAwIH0sICAgICAgLyogVk1TIHZlcnNpb24gbnVtYmVycyAq LwotI2VuZGlmIC8qIFZNUyAqLwotICAgIHsgIiIsIDAsIDAgfQotfTsKLWludCBuc3J0YWIgPSAo c2l6ZW9mKHNydGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwotCi0jaWZkZWYgVU5J Q09ERQotI2RlZmluZSBVQ1NfQk9NIDEKLSNkZWZpbmUgVUNTX0JZVCAyCi1zdGF0aWMgc3RydWN0 IGtleXRhYiB1Y3N0YWJbXSA9IHsKLSAgICB7ICJib20iLCAgICAgICAgVUNTX0JPTSwgMCB9LAot ICAgIHsgImJ5dGUtb3JkZXIiLCBVQ1NfQllULCAwIH0sCi0gICAgeyAiIiwgMCwgMCB9Ci19Owot aW50IG51Y3N0YWIgPSAoc2l6ZW9mKHVjc3RhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0g MTsKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgYm90YWJbXSA9IHsKLSAgICB7ICJiaWctZW5kaWFu IiwgICAgMCwgMCB9LAotICAgIHsgImxpdHRsZS1lbmRpYW4iLCAxLCAwIH0KLX07Ci1zdGF0aWMg aW50IG5ib3RhYiA9IDI7Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotCi0vKiBSRU1PVEUgU0VUICov Ci0KLXN0cnVjdCBrZXl0YWIgcm1zdGFiW10gPSB7Ci0gICAgeyAiYXR0cmlidXRlcyIsICBYWUFU VFIsIDAgICAgICB9LAotICAgIHsgImJsb2NrLWNoZWNrIiwgWFlDSEtULCAwICAgICAgfSwKLSAg ICB7ICJmaWxlIiwgICAgICAgIFhZRklMRSwgMCAgICAgIH0sCi0gICAgeyAiaW5jb21wbGV0ZSIs ICBYWUlGRCwgIENNX0lOViB9LCAgLyogPSBSRU1PVEUgU0VUIEZJTEUgSU5DT01QTEVURSAqLwot ICAgIHsgIm1hdGNoIiwgICAgICAgWFlNQVRDSCwwICAgICAgfSwKLSAgICB7ICJyZWNlaXZlIiwg ICAgIFhZUkVDViwgMCAgICAgIH0sCi0gICAgeyAicmV0cnkiLCAgICAgICBYWVJFVFIsIDAgICAg ICB9LAotICAgIHsgInNlcnZlciIsICAgICAgWFlTRVJWLCAwICAgICAgfSwKLSAgICB7ICJ0cmFu c2ZlciIsICAgIFhZWEZFUiwgMCAgICAgIH0sCi0gICAgeyAid2luZG93IiwgICAgICBYWVdJTkQs IDAgICAgICB9LAotICAgIHsgInhmZXIiLCAgICAgICAgWFlYRkVSLCBDTV9JTlYgfQotfTsKLWlu dCBucm1zID0gKHNpemVvZihybXN0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotc3Ry dWN0IGtleXRhYiBhdHRydGFiW10gPSB7Ci0jaWZkZWYgU1RSQVRVUwotICAgIHsgImFjY291bnQi LCAgICAgICBBVF9BQ0NULCAwIH0sCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotICAgIHsgImFsbCIs ICAgICAgICAgICBBVF9YQUxMLCAwIH0sCi0jaWZkZWYgQ09NTUVOVAotICAgIHsgImJsb2Nrc2l6 ZSIsICAgICBBVF9CTEtTLCAwIH0sICAgIC8qIChub3QgdXNlZCkgKi8KLSNlbmRpZiAvKiBDT01N RU5UICovCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICB7ICJjaGFyYWN0ZXItc2V0IiwgQVRfRU5DTywg MCB9LAotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSNpZmRlZiBTVFJBVFVTCi0gICAgeyAiY3JlYXRv ciIsICAgICAgIEFUX0NSRUEsIDAgfSwKLSNlbmRpZiAvKiBTVFJBVFVTICovCi0gICAgeyAiZGF0 ZSIsICAgICAgICAgIEFUX0RBVEUsIDAgfSwKLSAgICB7ICJkaXNwb3NpdGlvbiIsICAgQVRfRElT UCwgMCB9LAotICAgIHsgImVuY29kaW5nIiwgICAgICBBVF9FTkNPLCBDTV9JTlYgfSwKLSAgICB7 ICJmb3JtYXQiLCAgICAgICAgQVRfUkVDRiwgQ01fSU5WIH0sCi0gICAgeyAibGVuZ3RoIiwgICAg ICAgIEFUX0xFTkssIDAgfSwKLSAgICB7ICJvZmYiLCAgICAgICAgICAgQVRfQUxMTiwgMCB9LAot ICAgIHsgIm9uIiwgICAgICAgICAgICBBVF9BTExZLCAwIH0sCi0jaWZkZWYgQ09NTUVOVAotICAg IHsgIm9zLXNwZWNpZmljIiwgICBBVF9TWVNQLCAwIH0sICAgIC8qIChub3QgdXNlZCBieSBVTklY IG9yIFZNUykgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0jaWZkZWYgQ0tfUEVSTVMKLSAgICB7 ICJwcm90ZWN0aW9uIiwgICAgQVRfTFBSTywgMCB9LAotICAgIHsgInBlcm1pc3Npb25zIiwgICBB VF9MUFJPLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBDS19QRVJNUyAqLwotICAgIHsgInJlY29yZC1m b3JtYXQiLCBBVF9SRUNGLCAwIH0sCi0gICAgeyAic3lzdGVtLWlkIiwgICAgIEFUX1NZU0ksIDAg fSwKLSAgICB7ICJ0eXBlIiwgICAgICAgICAgQVRfRlRZUCwgMCB9Ci19OwotaW50IG5hdHIgPSAo c2l6ZW9mKGF0dHJ0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsgLyogaG93IG1hbnkgYXR0 cmlidXRlcyAqLwotCi0jaWZkZWYgQ0tUSURMRQotc3RydWN0IGtleXRhYiBpZGxhY3RzW10gPSB7 Ci0gICAgeyAiZXhpdCIsICAgICAgIElETEVfRVhJVCwgMCB9LAotICAgIHsgImhhbmd1cCIsICAg ICBJRExFX0hBTkcsIDAgfSwKLSAgICB7ICJvdXRwdXQiLCAgICAgSURMRV9PVVQsICAwIH0sCi0g ICAgeyAicmV0dXJuIiwgICAgIElETEVfUkVULCAgMCB9LAotI2lmZGVmIFROQ09ERQotICAgIHsg InRlbG5ldC1ub3AiLCBJRExFX1ROT1AsIDAgfSwKLSAgICB7ICJ0ZWxuZXQtYXl0IiwgSURMRV9U QVlULCAwIH0sCi0jZW5kaWYgLyogVE5DT0RFICovCi0gICAgeyAiIiwgMCwgMCB9Ci19OwotaW50 IG5pZGxhY3RzID0gKHNpemVvZihpZGxhY3RzKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAx OwotI2VuZGlmIC8qIENLVElETEUgKi8KLQotI2lmbmRlZiBOT1NQTAotZXh0ZXJuIGludCBpbmRl ZiwgaW5lY2hvLCBpbnNpbGVuY2UsIGluYnVmc2l6ZSwgaW5hdXRvZGwsIGluaW50cjsKLSNpZmRl ZiBDS0ZMT0FUCi1leHRlcm4gQ0tGTE9BVCBpbnNjYWxlOwotI2VuZGlmCS8qIENLRkxPQVQgKi8K LWV4dGVybiBjaGFyICogaW5wYnVmLCAqIGlucGJwOwotI2lmZGVmIE9TMgotZXh0ZXJuIGludCBp bnRlcm07Ci0jZW5kaWYgLyogT1MyICovCi1zdHJ1Y3Qga2V5dGFiIGlucHRhYltdID0geyAgICAg ICAgICAgICAgLyogU0VUIElOUFVUIHBhcmFtZXRlcnMgKi8KLSNpZmRlZiBDS19BVVRPREwKLSAg ICB7ICJhdXRvZG93bmxvYWQiLCAgICBJTl9BREwsIDAgfSwKLSNlbmRpZiAvKiBDS19BVVRPREwg Ki8KLSAgICB7ICJidWZmZXItbGVuZ3RoIiwgICBJTl9CVUYsIDAgfSwKLSAgICB7ICJjYW5jZWxs YXRpb24iLCAgICBJTl9DQU4sIDAgfSwKLSAgICB7ICJjYXNlIiwgICAgICAgICAgICBJTl9DQVMs IDAgfSwKLSAgICB7ICJkZWZhdWx0LXRpbWVvdXQiLCBJTl9ERUYsIENNX0lOViB9LCAvKiBUaGVy ZSBpcyBubyBkZWZhdWx0IHRpbWVvdXQgKi8KLSAgICB7ICJlY2hvIiwgICAgICAgICAgICBJTl9F Q0gsIDAgfSwKLSNpZmRlZiBPUzIKLSAgICB7ICJwYWNpbmciLCAgICAgICAgICBJTl9QQUMsIENN X0lOViB9LAotI2VuZGlmIC8qIE9TMiAqLwotICAgIHsgInNjYWxlLWZhY3RvciIsICAgIElOX1ND QSwgMCB9LAotICAgIHsgInNpbGVuY2UiLCAgICAgICAgIElOX1NJTCwgMCB9LAotI2lmZGVmIE9T MgotICAgIHsgInRlcm1pbmFsIiwgICAgICAgIElOX1RSTSwgMCB9LAotI2VuZGlmIC8qIE9TMiAq LwotICAgIHsgInRpbWVvdXQtYWN0aW9uIiwgIElOX1RJTSwgMCB9Ci19OwotaW50IG5pbnAgPSAo c2l6ZW9mKGlucHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi1zdHJ1Y3Qga2V5dGFi IGludGltdFtdID0geyAgICAgICAgICAgICAgLyogU0VUIElOUFVUIFRJTUVPVVQgcGFyYW1ldGVy cyAqLwotICAgIHsgInByb2NlZWQiLCAwLCAwIH0sICAgICAgICAgICAgICAgIC8qIDAgPSBwcm9j ZWVkICovCi0gICAgeyAicXVpdCIsICAgIDEsIDAgfSAgICAgICAgICAgICAgICAgLyogMSA9IHF1 aXQgKi8KLX07Ci0KLXN0cnVjdCBrZXl0YWIgaW5jYXN0W10gPSB7ICAgICAgICAgICAgICAvKiBT RVQgSU5QVVQgQ0FTRSBwYXJhbWV0ZXJzICovCi0gICAgeyAiaWdub3JlIiwgIDAsIDAgfSwgICAg ICAgICAgICAgICAgLyogMCA9IGlnbm9yZSAqLwotICAgIHsgIm9ic2VydmUiLCAxLCAwIH0gICAg ICAgICAgICAgICAgIC8qIDEgPSBvYnNlcnZlICovCi19OwotI2VuZGlmIC8qIE5PU1BMICovCi0K LXN0cnVjdCBrZXl0YWIgbmFibHRhYltdID0geyAgICAgICAgICAgICAvKiBGb3IgYW55IGNvbW1h bmQgdGhhdCBuZWVkcyAqLwotICAgIHsgImRpc2FibGVkIiwgMCwgMCB9LAotICAgIHsgImVuYWJs ZWQiLCAgMSwgMCB9LAotICAgIHsgIm9mZiIsICAgICAgMCwgQ01fSU5WIH0sICAgICAgICAgIC8q IHRoZXNlIGtleXdvcmRzLi4uICovCi0gICAgeyAib24iLCAgICAgICAxLCBDTV9JTlYgfQotfTsK LWludCBubmFibHRhYiA9IHNpemVvZihuYWJsdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKTsK LQotI2lmZGVmIE9TMgotc3RydWN0IGtleXRhYiB0dmN0YWJbXSA9IHsgICAgICAgICAgICAgIC8q IFNFVCBURVJNIFZJREVPLUNIQU5HRSAqLwotICAgIHsgImRpc2FibGVkIiwgICAgIFRWQ19ESVMs IDAgfSwKLSAgICB7ICJlbmFibGVkIiwgICAgICBUVkNfRU5BLCAwIH0sCi0jaWZkZWYgTlQKLSAg ICB7ICJ3aW45NS1zYWZlIiwgICBUVkNfVzk1LCAwIH0sCi0jZW5kaWYgLyogTlQgKi8KLSAgICB7 ICIiLCAwLCAwIH0KLX07Ci1pbnQgbnR2Y3RhYiA9IChzaXplb2YodHZjdGFiKSAvIHNpemVvZihz dHJ1Y3Qga2V5dGFiKSkgLSAxOwotCi1zdHJ1Y3Qga2V5dGFiIG1za3RhYltdID0geyAvKiBTRVQg TVMtRE9TIEtFUk1JVCBjb21wYXRpYmlsaXRpZXMgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgeyAi Y29sb3IiLCAgICBNU0tfQ09MT1IsICAwIH0sCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIHsg ImZpbGUtcmVuYW1pbmciLCBNU0tfUkVOLCAwIH0sCi0gICAgeyAia2V5Y29kZXMiLCBNU0tfS0VZ UywgICAwIH0KLX07Ci1pbnQgbm1zayA9IChzaXplb2YobXNrdGFiKSAvIHNpemVvZihzdHJ1Y3Qg a2V5dGFiKSk7Ci0KLXN0cnVjdCBrZXl0YWIgc2NybnVwZFtdID0geyAgICAgICAgICAgICAvKiBT RVQgVEVSTUlOQUwgU0NSRUVOLVVQREFURSAqLwotICAgIHsgImZhc3QiLCAgIFRUVV9GQVNULCAg IDAgfSwKLSAgICB7ICJzbW9vdGgiLCBUVFVfU01PT1RILCAwIH0KLX07Ci1pbnQgbnNjcm51cGQg PSAoc2l6ZW9mKHNjcm51cGQpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotI2lmZGVmIFBD Rk9OVFMKLS8qIFRoaXMgZGVmaW5pdGlvbiBvZiB0aGUgdGVybV9mb250W10gdGFibGUgaXMgb25s eSBmb3IgICAgICovCi0vKiB0aGUgT1MvMiBGdWxsIFNjcmVlbiBTZXNzaW9uIGFuZCBpcyBub3Qg dXNlZCBvbiBXaW5kb3dzICovCi1zdHJ1Y3Qga2V5dGFiIHRlcm1fZm9udFtdID0geyAgICAgICAg ICAgLyogU0VUIFRFUk1JTkFMIEZPTlQgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgeyAiY3AxMTEi LCBUVEZfMTExLCAwIH0sCi0gICAgeyAiY3AxMTIiLCBUVEZfMTEyLCAwIH0sCi0gICAgeyAiY3Ax MTMiLCBUVEZfMTEzLCAwIH0sCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIHsgImNwNDM3Iiwg VFRGXzQzNywgMCB9LAotICAgIHsgImNwODUwIiwgVFRGXzg1MCwgMCB9LAotI2lmZGVmIENPTU1F TlQKLSAgICB7ICJjcDg1MSIsIFRURl84NTEsIDAgfSwKLSNlbmRpZiAvKiBDT01NRU5UICovCi0g ICAgeyAiY3A4NTIiLCBUVEZfODUyLCAwIH0sCi0jaWZkZWYgQ09NTUVOVAotICAgIHsgImNwODUz IiwgVFRGXzg1MywgMCB9LAotICAgIHsgImNwODYwIiwgVFRGXzg2MCwgMCB9LAotICAgIHsgImNw ODYxIiwgVFRGXzg2MSwgMCB9LAotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB7ICJjcDg2MiIs IFRURl84NjIsIDAgfSwKLSNpZmRlZiBDT01NRU5UCi0gICAgeyAiY3A4NjMiLCBUVEZfODYzLCAw IH0sCi0gICAgeyAiY3A4NjQiLCBUVEZfODY0LCAwIH0sCi0gICAgeyAiY3A4NjUiLCBUVEZfODY1 LCAwIH0sCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIHsgImNwODY2IiwgVFRGXzg2NiwgMCB9 LAotI2lmZGVmIENPTU1FTlQKLSAgICB7ICJjcDg4MCIsIFRURl84ODAsIDAgfSwKLSAgICB7ICJj cDg4MSIsIFRURl84ODEsIDAgfSwKLSAgICB7ICJjcDg4MiIsIFRURl84ODIsIDAgfSwKLSAgICB7 ICJjcDg4MyIsIFRURl84ODMsIDAgfSwKLSAgICB7ICJjcDg4NCIsIFRURl84ODQsIDAgfSwKLSAg ICB7ICJjcDg4NSIsIFRURl84ODUsIDAgfSwKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgeyAi ZGVmYXVsdCIsVFRGX1JPTSwwIH0KLX07Ci1pbnQgbnRlcm1mb250ID0gKHNpemVvZih0ZXJtX2Zv bnQpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLWludCB0dF9mb250ID0gVFRGX1JPTTsgICAg ICAgICAgICAgICAgICAvKiBUZXJtaW5hbCBzY3JlZW4gZm9udCAqLwotI2Vsc2UgLyogUENGT05U UyAqLwotI2lmZGVmIE5UCi0jaWZkZWYgS1VJCi1zdHJ1Y3Qga2V5dGFiICogdGVybV9mb250ID0g TlVMTDsKLXN0cnVjdCBrZXl0YWIgKiBfdGVybV9mb250ID0gTlVMTDsKLWNoYXIgKiB0dF9mYWNl bmFtZSA9IE5VTEw7Ci1pbnQgbnRlcm1mb250ID0gMDsKLWludCB0dF9mb250ID0gMDsKLWludCB0 dF9mb250X3NpemUgPSAwOwotI2VuZGlmIC8qIEtVSSAqLwotI2VuZGlmIC8qIE5UICovCi0jZW5k aWYgLyogUENGT05UUyAqLwotCi1zdHJ1Y3Qga2V5dGFiIGFuYmt0YWJbXSA9IHsgICAgICAgICAg ICAgLyogRm9yIGFueSBjb21tYW5kIHRoYXQgbmVlZHMgKi8KLSAgICB7ICJtZXNzYWdlIiwgMiwg MCB9LCAgICAgICAgICAgICAgICAvKiB0aGVzZSBrZXl3b3Jkcy4uLiAqLwotICAgIHsgIm9mZiIs ICAgICAwLCAwIH0sCi0gICAgeyAib24iLCAgICAgIDEsIDAgfSwKLSAgICB7ICJ1bnNhZmUtbWVz c2FnMCIsIDk5LCBDTV9JTlYgfSwKLSAgICB7ICJ1bnNhZmUtbWVzc2FnZSIsIDMsICBDTV9JTlYg fQotfTsKLWludCBuYW5zYmsgPSAoc2l6ZW9mKGFuYmt0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0 YWIpKTsKLQotaW50IHdpbjk1X3BvcHVwID0gMTsKLSNpZmRlZiBOVAotI2lmZGVmIEtVSQotaW50 IHdpbjk1bHVjaWRhID0gMDsKLWludCB3aW45NWhzbCA9IDE7Ci0jZWxzZSAvKiBLVUkgKi8KLWlu dCB3aW45NWx1Y2lkYSA9IDE7Ci1pbnQgd2luOTVoc2wgPSAxOwotI2VuZGlmIC8qIEtVSSAqLwot I2Vsc2UgLyogTlQgKi8KLWludCB3aW45NWx1Y2lkYSA9IDA7Ci1pbnQgd2luOTVoc2wgPSAxOwot I2VuZGlmIC8qIE5UICovCi0jaWZkZWYgTlQKLWludCB3aW45NWFsdGdyICA9IDA7Ci1leHRlcm4g aW50IHdpbjk1c2VsZWN0YnVnOwotZXh0ZXJuIGludCB3aW45NV84XzM7Ci0KLSNpZmRlZiBDT01N RU5UCi1leHRlcm4gQ0hBUiAoKnhscltNQVhUQ1NFVFMrMV1bTUFYRkNTRVRTKzFdKShDSEFSKTsK LWV4dGVybiBzdHJ1Y3Qga2V5dGFiIHRjc3RhYltdOwotZXh0ZXJuIGludCBudGNzOwotI2VuZGlm IC8qIENPTU1FTlQgKi8KLWV4dGVybiBpbnQgbWF4b3csIG1heG93X3Vzcjsgb3d3YWl0OyAgICAv KiBPdmVybGFwcGVkIEkvTyB2YXJpYWJsZXMgKi8KLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8q IE9TMiAqLwotCi0KLS8qIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgYnJva2VuIG91dCBvZiBkb3By bSgpIHRvIGdpdmUgY29tcGlsZXJzIGEgYnJlYWsuICovCi0KLS8qICBTIEUgVCBPIE4gIC0tICBQ YXJzZSBvbi9vZmYgKGRlZmF1bHQgb24pLCBzZXQgcGFyYW1ldGVyIHRvIHJlc3VsdCAgKi8KLQot aW50Ci1zZXRvbihwcm0pIGludCAqcHJtOyB7Ci0gICAgaW50IHgsIHk7Ci0gICAgaWYgKCh5ID0g Y21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgaWYg KCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgKnBybSA9IHk7Ci0gICAgcmV0dXJu KDEpOwotfQotCi0vKiAgUyBFIFQgTyBOIEEgVSBUIE8gLS0gIFBhcnNlIG9uL29mZi9hdXRvIChk ZWZhdWx0IGF1dG8pICYgc2V0IHJlc3VsdCAqLwotCi1zdHJ1Y3Qga2V5dGFiIG9ub2ZmYXV0W10g PSB7Ci0gICAgeyAiYXV0byIsIFNFVF9BVVRPLCAwIH0sICAgICAgICAgICAgLyogMiAqLwotICAg IHsgIm9mZiIsICBTRVRfT0ZGLCAgMCB9LCAgICAgICAgICAgIC8qIDAgKi8KLSAgICB7ICJvbiIs ICAgU0VUX09OLCAgIDAgfSAgICAgICAgICAgICAvKiAxICovCi19OwotCi1pbnQKLXNldG9uYXV0 KHBybSkgaW50ICpwcm07IHsKLSAgICBpbnQgeCwgeTsKLSAgICBpZiAoKHkgPSBjbWtleShvbm9m ZmF1dCwzLCIiLCJhdXRvIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOwotICAgIGlmICgoeCA9 IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICpwcm0gPSB5OwotICAgIHJldHVybigxKTsK LX0KLQotLyogIFMgRSBUIE4gVSBNICAtLSAgU2V0IHBhcmFtZXRlciB0byByZXN1bHQgb2YgY21u dW0oKSBwYXJzZS4gICovCi0vKgotIENhbGwgd2l0aCBwb2ludGVyIHRvIGludGVnZXIgdmFyaWFi bGUgdG8gYmUgc2V0LAotICAgeCA9IG51bWJlciBmcm9tIGNudW0gcGFyc2UsIHkgPSByZXR1cm4g Y29kZSBmcm9tIGNtbnVtLAotICAgbWF4ID0gbWF4aW11bSB2YWx1ZSB0byBhY2NlcHQsIC0xIGlm IG5vIG1heGltdW0uCi0gUmV0dXJucyAtOSBvbiBmYWlsdXJlLCBhZnRlciBwcmludGluZyBhIG1l c3NhZ2UsIG9yIDEgb24gc3VjY2Vzcy4KLSovCi1pbnQKLXNldG51bShwcm0seCx5LG1heCkgaW50 IHgsIHksICpwcm0sIG1heDsgewotICAgIGRlYnVnKEYxMDEsInNldG51bSIsIiIseSk7Ci0gICAg aWYgKHkgPT0gLTMpIHsKLSAgICAgICAgcHJpbnRmKCJcbj9WYWx1ZSByZXF1aXJlZFxuIik7Ci0g ICAgICAgIHJldHVybigtOSk7Ci0gICAgfQotICAgIGlmICh5ID09IC0yKSB7Ci0gICAgICAgIHBy aW50ZigiJXM/Tm90IGEgbnVtYmVyOiAlc1xuIixjbWZsZ3MgPT0gMSA/ICIiIDogIlxuIiwgYXR4 YnVmKTsKLSAgICAgICAgcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgaWYgKHkgPCAwKSByZXR1cm4o eSk7Ci0gICAgaWYgKG1heCA+IC0xICYmIHggPiBtYXgpIHsKLSAgICAgICAgcHJpbnRmKCI/U29y cnksICVkIGlzIHRoZSBtYXhpbXVtXG4iLG1heCk7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAg fQotICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICpwcm0gPSB4Owot ICAgIHJldHVybigxKTsKLX0KLQotLyogIFMgRSBUIEMgQyAgLS0gIFNldCBwYXJhbWV0ZXIgdmFy IHRvIGFuIEFTQ0lJIGNvbnRyb2wgY2hhcmFjdGVyIHZhbHVlLiAgKi8KLS8qCi0gIFBhcnNlcyBh IG51bWJlciwgb3IgYSBsaXRlcmFsIGNvbnRyb2wgY2hhcmFjdGVyLCBvciBhIGNhcmV0ICheKSBm b2xsb3dlZAotICBieSBhbiBBU0NJSSBjaGFyYWN0ZXIgd2hvc2UgdmFsdWUgaXMgNjMtOTUgb3Ig OTctMTIyLCB0aGVuIGdldHMgY29uZmlybWF0aW9uLAotICB0aGVuIHNldHMgdGhlIHBhcmFtZXRl ciB0byB0aGUgY29kZSB2YWx1ZSBvZiB0aGUgY2hhcmFjdGVyIGdpdmVuLiAgSWYgdGhlcmUKLSAg YXJlIGFueSBwYXJzZSBlcnJvcnMsIHRoZXkgYXJlIHJldHVybmVkLCBvdGhlcndpc2Ugb24gc3Vj Y2VzcyAxIGlzIHJldHVybmVkLgotKi8KLWludAotc2V0Y2MoZGZsdCx2YXIpIGNoYXIgKmRmbHQ7 IGludCAqdmFyOyB7Ci0gICAgaW50IHgsIHk7Ci0gICAgdW5zaWduZWQgaW50IGM7Ci0gICAgY2hh ciAqaGxwbXNnID0gIkNvbnRyb2wgY2hhcmFjdGVyLFxuXAotIG51bWVyaWMgQVNDSUkgdmFsdWUs XG5cCi0gb3IgaW4gXlggbm90YXRpb24sXG5cCi0gb3IgcHJlY2VkZWQgYnkgYSBiYWNrc2xhc2gg YW5kIGVudGVyZWQgbGl0ZXJhbGx5IjsKLQotICAgIC8qIFRoaXMgaXMgYSBoYWNrIHRvIHR1cm4g b2ZmIGNvbXBsYWludHMgZnJvbSBleHByZXNzaW9uIGV2YWx1YXRvci4gKi8KLSAgICB4X2lmbnVt ID0gMTsKLSAgICB5ID0gY21udW0oaGxwbXNnLCBkZmx0LCAxMCwgJngsIHh4c3RyaW5nKTsgLyog UGFyc2UgYSBudW1iZXIgKi8KLSAgICB4X2lmbnVtID0gMDsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogQWxsb3cgY29tcGxhaW50cyBhZ2FpbiAqLwotICAgIGlmICh5IDwgMCkgeyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFBhcnNlIGZhaWxlZCAqLwotICAgICAgICBpZiAoeSAh PSAtMikgICAgICAgICAgICAgICAgICAgIC8qIFJlcGFyc2UgbmVlZGVkIG9yIHNvbWVzdWNoICov Ci0gICAgICAgICAgcmV0dXJuKHkpOyAgICAgICAgICAgICAgICAgICAgLyogUGFzcyBmYWlsdXJl IGJhY2sgdXAgdGhlIGNoYWluICovCi0gICAgfQotICAgIC8qIFJlYWwgY29udHJvbCBjaGFyYWN0 ZXIgb3IgbGl0ZXJhbCA4LWJpdCBjaGFyYWN0ZXIuLi4gKi8KLQotICAgIGZvciAoYyA9IHN0cmxl bihhdG1idWYpIC0gMTsgYyA+IDA7IGMtLSkgLyogVHJpbSAqLwotICAgICAgaWYgKGF0bWJ1Zltj XSA9PSBTUCkgYXRtYnVmW2NdID0gTlVMOwotCi0gICAgaWYgKHkgPCAwKSB7ICAgICAgICAgICAg ICAgICAgICAgICAgLyogSXQgd2FzIG5vdCBhIG51bWJlciAqLwotICAgICAgICBpZiAoKChjID0g YXRtYnVmWzBdKSkgJiYgIWF0bWJ1ZlsxXSkgeyAvKiBMaXRlcmFsIGNoYXJhY3Rlcj8gKi8KLSAg ICAgICAgICAgIGMgJj0gMHhmZjsKLSAgICAgICAgICAgIGlmICgoKGMgPiAzMSkgJiYgKGMgPCAx MjcpKSB8fCAoYyA+IDI1NSkpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIlxuPyVkOiBPdXQg b2YgcmFuZ2UgLSBtdXN0IGJlIDAtMzEgb3IgMTI3LTI1NVxuIixjKTsKLSAgICAgICAgICAgICAg ICByZXR1cm4oLTkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAo KHkgPSBjbWNmbSgpKSA8IDApICAvKiBDb25maXJtICovCi0gICAgICAgICAgICAgICAgICByZXR1 cm4oeSk7Ci0gICAgICAgICAgICAgICAgKnZhciA9IGM7ICAgICAgICAgICAgICAgLyogU2V0IHRo ZSB2YXJpYWJsZSAqLwotICAgICAgICAgICAgICAgIHJldHVybigxKTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgfSBlbHNlIGlmIChhdG1idWZbMF0gPT0gJ14nICYmICFhdG1idWZbMl0pIHsgLyog T3IgXlggbm90YXRpb24/ICovCi0gICAgICAgICAgICBjID0gYXRtYnVmWzFdOwotICAgICAgICAg ICAgaWYgKGlzbG93ZXIoKGNoYXIpIGMpKSAgICAgIC8qIFVwcGVyY2FzZSBsb3dlcmNhc2UgbGV0 dGVycyAqLwotICAgICAgICAgICAgICBjID0gdG91cHBlcihjKTsKLSAgICAgICAgICAgIGlmIChj ID4gNjIgJiYgYyA8IDk2KSB7ICAgICAvKiBDaGVjayByYW5nZSAqLwotICAgICAgICAgICAgICAg IGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSAg ICAgICAgICAgICAgICAqdmFyID0gY3RsKGMpOyAgICAgICAgICAvKiBPSyAqLwotICAgICAgICAg ICAgICAgIHJldHVybigxKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg cHJpbnRmKCI/Tm90IGEgY29udHJvbCBjaGFyYWN0ZXIgLSAlc1xuIiwgYXRtYnVmKTsKLSAgICAg ICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgeyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFNvbWV0aGluZyBpbGxlZ2FsIHdhcyB0eXBlZCAqLwot ICAgICAgICAgICAgcHJpbnRmKCI/SW52YWxpZCAtICVzXG4iLCBhdG1idWYpOwotICAgICAgICAg ICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoKCh4ID4gMzEpICYmICh4 IDwgMTI3KSkgfHwgKHggPiAyNTUpKSB7IC8qIFRoZXkgdHlwZWQgYSBudW1iZXIgKi8KLSAgICAg ICAgcHJpbnRmKCJcbj8lZDogT3V0IG9mIHJhbmdlIC0gbXVzdCBiZSAwLTMxIG9yIDEyNy0yNTVc biIseCk7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfQotICAgIGlmICgoeSA9IGNtY2ZtKCkp IDwgMCkgICAgICAgICAgICAgIC8qIEluIHJhbmdlLCBjb25maXJtICovCi0gICAgICByZXR1cm4o eSk7Ci0gICAgKnZhciA9IHg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IHZhcmlh YmxlICovCi0gICAgcmV0dXJuKDEpOwotfQotCi0jaWZuZGVmIE5PU1BMICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogVGhlIFNPUlQgY29tbWFuZC4uLiAqLwotCi1zdGF0aWMgc3RydWN0IGtl eXRhYiBzcnRzd3RhYltdID0geyAgICAgLyogU09SVCBjb21tYW5kIHN3aXRjaGVzICovCi0gICAg eyAiL2Nhc2UiLCAgICBTUlRfQ0FTLCBDTV9BUkcgfSwKLSAgICB7ICIva2V5IiwgICAgIFNSVF9L RVksIENNX0FSRyB9LAotICAgIHsgIi9udW1lcmljIiwgU1JUX05VTSwgMCB9LAotICAgIHsgIi9y YW5nZSIsICAgU1JUX1JORywgQ01fQVJHIH0sCi0gICAgeyAiL3JldmVyc2UiLCBTUlRfUkVWLCAw IH0KLX07Ci1zdGF0aWMgaW50IG5zcnRzd3RhYiA9IHNpemVvZihzcnRzd3RhYikvc2l6ZW9mKHN0 cnVjdCBrZXl0YWIpOwotCi1leHRlcm4gY2hhciAqKmFfcHRyW107ICAgICAgICAgICAgICAgICAg LyogQXJyYXkgcG9pbnRlcnMgKi8KLWV4dGVybiBpbnQgYV9kaW1bXTsgICAgICAgICAgICAgICAg ICAgICAvKiBBcnJheSBkaW1lbnNpb25zICovCi0KLWludAotZG9zb3J0KCkgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIERvIHRoZSBTT1JUIGNvbW1hbmQgKi8KLSAgICBjaGFyIGMs ICpwID0gTlVMTCwgKiogYXAsICoqIHhwID0gTlVMTDsKLSAgICBzdHJ1Y3QgRkRCIHN3LCBmbCwg Y207Ci0gICAgaW50IGhpLCBsbzsKLSAgICBpbnQgeG4gPSAwLCB4ciA9IC0xLCB4ayA9IC0xLCB4 YyA9IC0xLCB4cyA9IDA7Ci0gICAgaW50IGdldHZhbCA9IDAsIHJhbmdlWzJdLCBjb25maXJtZWQg PSAwOwotCi0gICAgY21mZGJpKCZzdywgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlyc3Qg RkRCIC0gY29tbWFuZCBzd2l0Y2hlcyAqLwotICAgICAgICAgICBfQ01LRVksICAgICAgICAgICAg ICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgICJBcnJheSBuYW1lIG9yIHN3aXRjaCIs Ci0gICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwot ICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBk YXRhICovCi0gICAgICAgICAgIG5zcnRzd3RhYiwgICAgICAgICAgICAgICAgICAgLyogYWRkdGwg bnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCi0gICAgICAgICAgIDQsICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLwotICAgICAg ICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24g Ki8KLSAgICAgICAgICAgc3J0c3d0YWIsICAgICAgICAgICAgICAgICAgICAvKiBLZXl3b3JkIHRh YmxlICovCi0gICAgICAgICAgICZmbCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRl ciB0byBuZXh0IEZEQiAqLwotICAgICAgICAgICApOwotICAgIGNtZmRiaSgmZmwsICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEFueXRoaW5nIHRoYXQgZG9lc24ndCBtYXRjaCAqLwotICAgICAg ICAgICBfQ01GTEQsICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAg ICJBcnJheSBuYW1lIiwgICAgICAgICAgICAgICAgLyogaGxwbXNnICovCi0gICAgICAgICAgICIi LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAiIiwg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAg ICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEg Ki8KLSAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1l cmljIGRhdGEgMiAqLwotICAgICAgICAgICBOVUxMLAotICAgICAgICAgICBOVUxMLAotICAgICAg ICAgICAmY20KLSAgICAgICAgICAgKTsKLSAgICBjbWZkYmkoJmNtLCAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBPciBwcmVtYXR1cmUgY29uZmlybWF0aW9uICovCi0gICAgICAgICAgIF9DTUNG TSwgICAgICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KLSAgICAgICAgICAgIiIsICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBobHBtc2cgKi8KLSAgICAgICAgICAgIiIsICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICIiLCAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAgICAgICAgMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLwotICAgICAg ICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAy ICovCi0gICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgIE5VTEwK LSAgICAgICAgICAgKTsKLQotICAgIHJhbmdlWzBdID0gLTE7Ci0gICAgcmFuZ2VbMV0gPSAtMTsK LQotICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhcnNlIDAgb3Ig bW9yZSBzd2l0Y2hlcyAqLwotICAgICAgICB4ID0gY21mZGIoJnN3KTsKLSAgICAgICAgaWYgKHgg PCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgaWYgKGNtcmVzdWx0LmZjb2RlICE9 IF9DTUtFWSkgICAvKiBCcmVhayBvdXQgaWYgbm90IGEgc3dpdGNoICovCi0gICAgICAgICAgYnJl YWs7Ci0gICAgICAgIGMgPSBjbWdicmsoKTsKLSAgICAgICAgZ2V0dmFsID0gKGMgPT0gJzonIHx8 IGMgPT0gJz0nKTsKLSAgICAgICAgaWYgKGdldHZhbCAmJiAhKGNtcmVzdWx0LmtmbGFncyAmIENN X0FSRykpIHsKLSAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIGRvZXMgbm90IHRha2Ug YXJndW1lbnRzXG4iKTsKLSAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0KLSAgICAg ICAgc3dpdGNoIChjbXJlc3VsdC5ucmVzdWx0KSB7Ci0gICAgICAgICAgY2FzZSBTUlRfUkVWOgot ICAgICAgICAgICAgeHIgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBT UlRfS0VZOgotICAgICAgICAgICAgaWYgKGdldHZhbCkgewotICAgICAgICAgICAgICAgIGlmICgo eSA9IGNtbnVtKCJDb2x1bW4gZm9yIGNvbXBhcmlzb24gKDEtYmFzZWQpIiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiMSIsMTAsJngseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAg ICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgICAgeGsgPSB4IC0gMTsKLSAgICAgICAg ICAgIH0gZWxzZQotICAgICAgICAgICAgICB4ayA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICBjYXNlIFNSVF9DQVM6Ci0gICAgICAgICAgICBpZiAoZ2V0dmFsKSB7Ci0gICAgICAg ICAgICAgICAgaWYgKCh5ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKQot ICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAgIHhjID0geTsKLSAg ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICB4YyA9IDE7Ci0gICAgICAgICAgICBicmVh azsKLSAgICAgICAgICBjYXNlIFNSVF9STkc6ICAgICAgICAgICAgICAgICAvKiAvUkFOR0UgKi8K LSAgICAgICAgICAgIGlmIChnZXR2YWwpIHsKLSAgICAgICAgICAgICAgICBjaGFyIGJ1ZlszMl07 Ci0gICAgICAgICAgICAgICAgY2hhciBidWYyWzE2XTsKLSAgICAgICAgICAgICAgICBpbnQgaTsK LSAgICAgICAgICAgICAgICBjaGFyICogcCwgKiBxOwotICAgICAgICAgICAgICAgIGlmICgoeSA9 IGNtZmxkKCJsb3c6aGlnaCBlbGVtZW50IiwiMSIsJnMsTlVMTCkpIDwgMCkKLSAgICAgICAgICAg ICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgICAgICBzID0gYnJzdHJpcChzKTsKLSAgICAg ICAgICAgICAgICBja3N0cm5jcHkoYnVmLHMsMzIpOwotICAgICAgICAgICAgICAgIHAgPSBidWY7 Ci0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgKnAgJiYgaSA8IDI7IGkrKykgeyAvKiBHZXQg bG93IGFuZCBoaWdoICovCi0gICAgICAgICAgICAgICAgICAgIHEgPSBwOyAgICAgICAgICAgICAg LyogU3RhcnQgb2YgdGhpcyBwaWVjZSAqLwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnAp IHsgICAgICAgIC8qIEZpbmQgZW5kIG9mIHRoaXMgcGllY2UgKi8KLSAgICAgICAgICAgICAgICAg ICAgICAgIGlmICgqcCA9PSAnOicpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCA9 IE5VTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwKys7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgICAgICAgICBwKys7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICAgICAgeSA9IDE1OyAgICAgICAgICAgICAvKiBFdmFsdWF0ZSB0aGlzIHBpZWNlICovCi0gICAg ICAgICAgICAgICAgICAgIHMgPSBidWYyOwotICAgICAgICAgICAgICAgICAgICB6enN0cmluZyhx LCZzLCZ5KTsKLSAgICAgICAgICAgICAgICAgICAgcyA9IGV2YWx4KGJ1ZjIpOwotICAgICAgICAg ICAgICAgICAgICBpZiAocykgaWYgKCpzKSBja3N0cm5jcHkoYnVmMixzLDE2KTsKLSAgICAgICAg ICAgICAgICAgICAgaWYgKCFyZGlnaXRzKGJ1ZjIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg ICBwcmludGYoIj9Ob3QgbnVtZXJpYzogJXNcbiIsYnVmMik7Ci0gICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg ICAgIHJhbmdlW2ldID0gYXRvaShidWYyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFNSVF9OVU06ICAgICAgICAg ICAgICAgICAvKiAvTlVNRVJJQyAqLwotICAgICAgICAgICAgeG4gPSAxOwotICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAg ICAgIH0KLSAgICB9Ci0gICAgc3dpdGNoIChjbXJlc3VsdC5mY29kZSkgewotICAgICAgY2FzZSBf Q01DRk06Ci0gICAgICAgIGNvbmZpcm1lZCA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz ZSBfQ01GTEQ6Ci0gICAgICAgIGNrc3RybmNweShsaW5lLGNtcmVzdWx0LnNyZXN1bHQsTElOQlVG U0laKTsgLyogU2FmZSBjb3B5IG9mIG5hbWUgKi8KLSAgICAgICAgcyA9IGxpbmU7Ci0gICAgICAg IGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcHJpbnRmKCI/VW5leHBlY3RlZCBmdW5j dGlvbiBjb2RlOiAlZFxuIixjbXJlc3VsdC5mY29kZSk7Ci0gICAgICAgIHJldHVybigtOSk7Ci0g ICAgfQotICAgIGlmIChjb25maXJtZWQpIHsKLSAgICAgICAgcHJpbnRmKCI/QXJyYXkgbmFtZSBy ZXF1aXJlZFxuIik7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfQotICAgIGNrbWFrbXNnKHRt cGJ1ZixUTVBCVUZTSVosCi0gICAgICAgICAgICAgIlNlY29uZCBhcnJheSB0byBzb3J0IGFjY29y ZGluZyB0byAiLHMsTlVMTCxOVUxMKTsKLSAgICBpZiAoKHggPSBjbWZsZCh0bXBidWYsIiIsJnAs TlVMTCkpIDwgMCkKLSAgICAgIGlmICh4ICE9IC0zKQotICAgICAgICByZXR1cm4oeCk7Ci0gICAg dG1wYnVmWzBdID0gTlVMOwotICAgIGNrc3RybmNweSh0bXBidWYscCxUTVBCVUZTSVopOwotICAg IHAgPSB0bXBidWY7Ci0gICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSAgICAgICAgICAgICAgLyog R2V0IGNvbmZpcm1hdGlvbiAqLwotICAgICAgcmV0dXJuKHgpOwotCi0gICAgeCA9IGFycmF5Ym91 bmRzKHMsJmxvLCZoaSk7ICAgICAgICAgLyogR2V0IGFycmF5IGluZGV4ICYgYm91bmRzICovCi0g ICAgaWYgKHggPCAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgKi8KLSAgICAg ICAgcHJpbnRmKCI/QmFkIGFycmF5IG5hbWU6ICVzXG4iLHMpOwotICAgICAgICByZXR1cm4oLTkp OwotICAgIH0KLSAgICBpZiAobG8gPiAtMSkgcmFuZ2VbMF0gPSBsbzsgICAgICAgICAvKiBTZXQg cmFuZ2UgKi8KLSAgICBpZiAoaGkgPiAtMSkgcmFuZ2VbMV0gPSBoaTsKLSAgICBhcCA9IGFfcHRy W3hdOyAgICAgICAgICAgICAgICAgICAgICAvKiBHZXQgcG9pbnRlciB0byBhcnJheSBlbGVtZW50 IGxpc3QgKi8KLSAgICBpZiAoIWFwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVj ayAqLwotICAgICAgICBwcmludGYoIj9BcnJheSBub3QgZGVjbGFyZWQ6ICVzXG4iLCBzKTsKLSAg ICAgICAgcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgaWYgKHJhbmdlWzBdIDwgMCkgICAgICAgICAg ICAgICAgICAgLyogU3RhcnRpbmcgZWxlbWVudCAqLwotICAgICAgcmFuZ2VbMF0gPSAxOwotICAg IGlmIChyYW5nZVsxXSA8IDApICAgICAgICAgICAgICAgICAgIC8qIEZpbmFsIGVsZW1lbnQgKi8K LSAgICAgIHJhbmdlWzFdID0gYV9kaW1beF07Ci0gICAgaWYgKHJhbmdlWzFdID4gYV9kaW1beF0p IHsKLSAgICAgICAgcHJpbnRmKCI/cmFuZ2UgJWQ6JWQgZXhjZWVkcyBhcnJheSBkaW1lbnNpb24g JWRcbiIsCi0gICAgICAgICAgICAgICByYW5nZVswXSxyYW5nZVsxXSxhX2RpbVt4XQotICAgICAg ICAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgYXAgKz0gcmFuZ2Vb MF07Ci0gICAgeHMgPSByYW5nZVsxXSAtIHJhbmdlWzBdICsgMTsgICAgICAgLyogTnVtYmVyIG9m IGVsZW1lbnRzIHRvIHNvcnQgKi8KLSAgICBpZiAoeHMgPCAxKSB7ICAgICAgICAgICAgICAgICAg ICAgICAvKiBDaGVjayAqLwotICAgICAgICBwcmludGYoIj9CYWQgcmFuZ2U6ICVkOiVkXG4iLHJh bmdlWzBdLHJhbmdlWzFdKTsKLSAgICAgICAgcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgaWYgKHhr IDwgMCkgeGsgPSAwOyAgICAgICAgICAgICAgICAgLyogS2V5IHBvc2l0aW9uICovCi0gICAgaWYg KHhyIDwgMCkgeHIgPSAwOyAgICAgICAgICAgICAgICAgLyogUmV2ZXJzZSBmbGFnICovCi0gICAg aWYgKHhuKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTnVtZXJpYyBmbGFnICovCi0g ICAgICB4YyA9IDI7Ci0gICAgZWxzZSBpZiAoeGMgPCAwKSAgICAgICAgICAgICAgICAgICAgLyog Tm90IG51bWVyaWMgKi8KLSAgICAgIHhjID0gaW5wY2FzW2NtZGx2bF07ICAgICAgICAgICAgICAv KiBzbyBhbHBoYSBjYXNlIG9wdGlvbiAqLwotCi0gICAgaWYgKCpwKSB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogUGFyYWxsZWwgYXJyYXkgZ2l2ZW4/ICovCi0gICAgICAgIHkgPSB4YXJy YXkocCk7ICAgICAgICAgICAgICAgICAgLyogWWVzLCBnZXQgaXRzIGluZGV4LiAqLwotICAgICAg ICBpZiAoeSA8IDApIHsKLSAgICAgICAgICAgIHByaW50ZigiP0JhZCBhcnJheSBuYW1lOiAlc1xu IiwgcCk7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0gICAgICAgIGlmICh5 ICE9IHgpIHsgICAgICAgICAgICAgICAgICAgLyogSWYgdGhlIDIgYXJyYXlzIGFyZSBkaWZmZXJl bnQgICovCi0gICAgICAgICAgICB4cCA9IGFfcHRyW3ldOyAgICAgICAgICAgICAgLyogUG9pbnRl ciB0byAybmQgYXJyYXkgZWxlbWVudCBsaXN0ICovCi0gICAgICAgICAgICBpZiAoIXhwKSB7Ci0g ICAgICAgICAgICAgICAgcHJpbnRmKCI/QXJyYXkgbm90IGRlY2xhcmVkOiAlc1xuIiwgcCk7Ci0g ICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm IChhX2RpbVt5XSA8IHJhbmdlWzFdKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/QXJyYXkg JXMgc21hbGxlciB0aGFuICVzXG4iLCBwLCBzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTkp OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgeHAgKz0gcmFuZ2VbMF07ICAgICAgICAgICAg IC8qIFNldCBiYXNlIHRvIHNhbWUgYXMgMXN0IGFycmF5ICovCi0gICAgICAgIH0KLSAgICB9Ci0g ICAgc2hfc29ydChhcCx4cCx4cyx4ayx4cix4Yyk7ICAgICAgICAgLyogU29ydCB0aGUgYXJyYXko cykgKi8KLSAgICByZXR1cm4oc3VjY2VzcyA9IDEpOyAgICAgICAgICAgICAgICAvKiBBbHdheXMg c3VjY2VlZHMgKi8KLX0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi1zdGF0aWMgc3RydWN0IGtleXRh YiBwdXJndGFiW10gPSB7ICAgICAgLyogUFVSR0UgY29tbWFuZCBzd2l0Y2hlcyAqLwotICAgIHsg Ii9hZnRlciIsICAgICAgICBQVV9BRlQsICBDTV9BUkcgfSwKLSAgICB7ICIvYXNrIiwgICAgICAg ICAgUFVfQVNLLCAgMCB9LAotICAgIHsgIi9iZWZvcmUiLCAgICAgICBQVV9CRUYsICBDTV9BUkcg fSwKLSAgICB7ICIvZGVsZXRlIiwgICAgICAgUFVfREVMRSwgQ01fSU5WIH0sCi0jaWZkZWYgVU5J WE9ST1NLCi0gICAgeyAiL2RvdGZpbGVzIiwgICAgIFBVX0RPVCwgIDAgfSwKLSNlbmRpZiAvKiBV TklYT1JPU0sgKi8KLSAgICB7ICIvZXhjZXB0IiwgICAgICAgUFVfRVhDLCAgQ01fQVJHIH0sCi0g ICAgeyAiL2hlYWRpbmciLCAgICAgIFBVX0hERywgIDAgfSwKLSAgICB7ICIva2VlcCIsICAgICAg ICAgUFVfS0VFUCwgQ01fQVJHIH0sCi0gICAgeyAiL2xhcmdlci10aGFuIiwgIFBVX0xBUiwgIENN X0FSRyB9LAotICAgIHsgIi9saXN0IiwgICAgICAgICBQVV9MSVNULCAwIH0sCi0gICAgeyAiL2xv ZyIsICAgICAgICAgIFBVX0xJU1QsIENNX0lOViB9LAotICAgIHsgIi9ub2FzayIsICAgICAgICBQ VV9OQVNLLCAwIH0sCi0gICAgeyAiL25vZGVsZXRlIiwgICAgIFBVX05PREUsIENNX0lOViB9LAot I2lmZGVmIFVOSVhPUk9TSwotICAgIHsgIi9ub2RvdGZpbGVzIiwgICBQVV9OT0RPVCwwIH0sCi0j ZW5kaWYgLyogVU5JWE9ST1NLICovCi0gICAgeyAiL25vaGVhZGluZyIsICAgIFBVX05PSCwgIDAg fSwKLSAgICB7ICIvbm9sIiwgICAgICAgICAgUFVfTk9MSSwgQ01fSU5WfENNX0FCUiB9LAotICAg IHsgIi9ub2xpc3QiLCAgICAgICBQVV9OT0xJLCAwIH0sCi0gICAgeyAiL25vbG9nIiwgICAgICAg IFBVX05PTEksIENNX0lOViB9LAotI2lmZGVmIENLX1RUR1dTSVoKLSAgICB7ICIvbm9wYWdlIiwg ICAgICAgUFVfTk9QQSwgMCB9LAotI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KLSAgICB7ICIvbm90 LWFmdGVyIiwgICAgUFVfTkFGLCAgQ01fQVJHIH0sCi0gICAgeyAiL25vdC1iZWZvcmUiLCAgIFBV X05CRiwgIENNX0FSRyB9LAotICAgIHsgIi9ub3Qtc2luY2UiLCAgICBQVV9OQUYsICBDTV9JTlZ8 Q01fQVJHIH0sCi0jaWZkZWYgQ0tfVFRHV1NJWgotICAgIHsgIi9wYWdlIiwgICAgICAgICBQVV9Q QUdFLCAwIH0sCi0jZW5kaWYgLyogQ0tfVFRHV1NJWiAqLwotICAgIHsgIi9xdWlldCIsICAgICAg ICBQVV9RVUlFLCBDTV9JTlYgfSwKLSNpZmRlZiBSRUNVUlNJVkUKLSAgICB7ICIvcmVjdXJzaXZl IiwgICAgUFVfUkVDVSwgMCB9LAotI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLwotICAgIHsgIi9zaW5j ZSIsICAgICAgICBQVV9BRlQsICBDTV9BUkd8Q01fSU5WIH0sCi0gICAgeyAiL3NpbXVsYXRlIiwg ICAgIFBVX05PREUsIDAgfSwKLSAgICB7ICIvc21hbGxlci10aGFuIiwgUFVfU01BLCAgQ01fQVJH IH0sCi0gICAgeyAiL3ZlcmJvc2UiLCAgICAgIFBVX1ZFUkIsIENNX0lOViB9Ci19Owotc3RhdGlj IGludCBucHVyZ3RhYiA9IHNpemVvZihwdXJndGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7Ci0K LQotCi0KLQotaW50Ci1ia3VwbnVtKHMsaSkgY2hhciAqIHM7IGludCAqaTsgewotICAgIGludCBr ID0gMCwgcG9zID0gMDsKLSAgICBjaGFyICogcCA9IE5VTEwsICpxOwotICAgICppID0gcG9zOwot ICAgIGlmICghcykgcyA9ICIiOwotICAgIGlmICghKnMpCi0gICAgICByZXR1cm4oLTEpOwotICAg IGlmICgoayA9IHN0cmxlbihzKSkgPCA1KQotICAgICAgcmV0dXJuKC0xKTsKLQotICAgIGlmIChz W2stMV0gIT0gJ34nKQotICAgICAgcmV0dXJuKC0xKTsKLSAgICBwb3MgPSBrIC0gMjsKLSAgICBx ID0gcyArIHBvczsKLSAgICB3aGlsZSAocSA+PSBzICYmIGlzZGlnaXQoKnEpKSB7Ci0gICAgICAg IHAgPSBxLS07Ci0gICAgICAgIHBvcy0tOwotICAgIH0KLSAgICBpZiAoIXApCi0gICAgICByZXR1 cm4oLTEpOwotICAgIGlmIChxIDwgcysyKQotICAgICAgcmV0dXJuKC0xKTsKLSAgICBpZiAoKnEg IT0gJ34nIHx8ICoocS0xKSAhPSAnLicpCi0gICAgICByZXR1cm4oLTEpOwotICAgIHBvcy0tOwot ICAgICppID0gcG9zOwotICAgIGRlYnVnKEYxMTEsImJrdXBudW0iLHMrcG9zLHBvcyk7Ci0gICAg cmV0dXJuKGF0b2kocCkpOwotfQotCi0jaWZkZWYgQ0tQVVJHRQotLyogUHJlc2VudGx5IG9ubHkg Zm9yIFVOSVggYmVjYXVzZSB3ZSBuZWVkIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIGZpbGUgYXJyYXku ICovCi0vKiBOb3QgbmVlZGVkIGZvciBWTVMgYW55d2F5LCBiZWNhdXNlIHdlIGRvbid0IG1ha2Ug YmFja3VwIGZpbGVzIHRoZXJlLiAqLwotCi0jZGVmaW5lIE1BWEtFRVAgMzIgICAgICAgICAgICAg ICAgICAgICAgLyogQmlnZ2VzdCAvS0VFUDogdmFsdWUgKi8KLQotc3RhdGljIGludAotICBwdV9r ZWVwID0gMCwgcHVfbGlzdCA9IDAsIHB1X2RvdCA9IDAsIHB1X2FzayA9IDAsIHB1X2hkZyA9IDA7 Ci0KLSNpZmRlZiBDS19UVEdXU0laCi1zdGF0aWMgaW50IHB1X3BhZ2UgPSAtMTsKLSNlbHNlCi1z dGF0aWMgaW50IHB1X3BhZ2UgPSAwOwotI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KLQotI2lmbmRl ZiBOT1NIT1cKLVZPSUQKLXNob3dwdXJnb3B0cygpIHsgICAgICAgICAgICAgICAgICAgICAgICAv KiBTSE9XIFBVUkdFIGNvbW1hbmQgb3B0aW9ucyAqLwotICAgIGludCB4ID0gMDsKLSAgICBleHRl cm4gaW50IG9wdGxpbmVzOwotICAgIHBydG9wdCgmb3B0bGluZXMsIlBVUkdFIik7Ci0gICAgaWYg KHB1X2FzayA+IC0xKSB7Ci0gICAgICAgIHgrKzsKLSAgICAgICAgcHJ0b3B0KCZvcHRsaW5lcywg cHVfYXNrID8gIi9BU0siIDogIi9OT0FTSyIpOwotICAgIH0KLSNpZmRlZiBVTklYT1JPU0sKLSAg ICBpZiAocHVfZG90ID4gLTEpIHsKLSAgICAgICAgeCsrOwotICAgICAgICBwcnRvcHQoJm9wdGxp bmVzLCBwdV9kb3QgPyAiL0RPVEZJTEVTIiA6ICIvTk9ET1RGSUxFUyIpOwotICAgIH0KLSNlbmRp ZiAvKiBVTklYT1JPU0sgKi8KLSAgICBpZiAocHVfa2VlcCA+IC0xKSB7Ci0gICAgICAgIHgrKzsK LSAgICAgICAgY2ttYWttc2codG1wYnVmLFRNUEJVRlNJWiwiL0tFRVA6Iixja2l0b2EocHVfa2Vl cCksTlVMTCxOVUxMKTsKLSAgICAgICAgcHJ0b3B0KCZvcHRsaW5lcyx0bXBidWYpOwotICAgIH0K LSAgICBpZiAocHVfbGlzdCA+IC0xKSB7Ci0gICAgICAgIHgrKzsKLSAgICAgICAgcHJ0b3B0KCZv cHRsaW5lcywgcHVfbGlzdCA/ICIvTElTVCIgOiAiL05PTElTVCIpOwotICAgIH0KLSAgICBpZiAo cHVfaGRnID4gLTEpIHsKLSAgICAgICAgeCsrOwotICAgICAgICBwcnRvcHQoJm9wdGxpbmVzLCBw dV9oZGcgPyAiL0hFQURJTkciIDogIi9OT0hFQURJTkciKTsKLSAgICB9Ci0jaWZkZWYgQ0tfVFRH V1NJWgotICAgIGlmIChwdV9wYWdlID4gLTEpIHsKLSAgICAgICAgeCsrOwotICAgICAgICBwcnRv cHQoJm9wdGxpbmVzLCBwdV9wYWdlID8gIi9QQUdFIiA6ICIvTk9QQUdFIik7Ci0gICAgfQotI2Vu ZGlmIC8qIENLX1RUR1dTSVogKi8KLSAgICBpZiAoIXgpIHBydG9wdCgmb3B0bGluZXMsIihubyBv cHRpb25zIHNldCkiKTsKLSAgICBwcnRvcHQoJm9wdGxpbmVzLCIiKTsKLX0KLSNlbmRpZiAvKiBO T1NIT1cgKi8KLQotaW50Ci1zZXRwdXJnb3B0cygpIHsgICAgICAgICAgICAgICAgICAgICAgICAg LyogU2V0IFBVUkdFIGNvbW1hbmQgb3B0aW9ucyAqLwotICAgIGludCBjLCB6LCBnZXR2YWwgPSAw OwotICAgIGludAotICAgICAgeF9rZWVwICA9IC0xLCB4X2xpc3QgPSAtMSwgeF9wYWdlID0gLTEs Ci0gICAgICB4X2hkZyAgID0gLTEsIHhfYXNrICA9IC0xLCB4X2RvdCAgPSAtMTsKLQotICAgIHdo aWxlICgxKSB7Ci0gICAgICAgIGlmICgoeSA9IGNtc3dpKHB1cmd0YWIsbnB1cmd0YWIsIlN3aXRj aCIsIiIseHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAgICAgIGlmICh5ID09IC0zKQotICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcmV0dXJuKHkp OwotICAgICAgICB9Ci0gICAgICAgIGMgPSBjbWdicmsoKTsKLSAgICAgICAgaWYgKChnZXR2YWwg PSAoYyA9PSAnOicgfHwgYyA9PSAnPScpKSAmJiAhKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgewot ICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBhbiBhcmd1bWVu dFxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgh Z2V0dmFsICYmIChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKLSAgICAgICAgICAgIHByaW50Zigi P1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKLSAgICAgICAgICAgIHJldHVy bigtOSk7Ci0gICAgICAgIH0KLSAgICAgICAgc3dpdGNoICh5KSB7Ci0gICAgICAgICAgY2FzZSBQ VV9LRUVQOgotICAgICAgICAgICAgeiA9IDE7Ci0gICAgICAgICAgICBpZiAoYyA9PSAnOicgfHwg YyA9PSAnPScpCi0gICAgICAgICAgICAgIGlmICgoeSA9IGNtbnVtKCJIb3cgbWFueSBiYWNrdXAg ZmlsZXMgdG8ga2VlcCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiwxMCwmeix4 eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICBp ZiAoeiA8IDAgfHwgeiA+IE1BWEtFRVApIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9QbGVh c2Ugc3BlY2lmeSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kICVkXG4iLAotICAgICAgICAgICAgICAg ICAgICAgICBNQVhLRUVQCi0gICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAg ICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHhfa2VlcCA9IHo7Ci0g ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFBVX0xJU1Q6Ci0gICAgICAgICAgY2Fz ZSBQVV9WRVJCOgotICAgICAgICAgICAgeF9saXN0ID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgIGNhc2UgUFVfUVVJRToKLSAgICAgICAgICBjYXNlIFBVX05PTEk6Ci0gICAgICAg ICAgICB4X2xpc3QgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgQ0tfVFRHV1NJWgot ICAgICAgICAgIGNhc2UgUFVfUEFHRToKLSAgICAgICAgICAgIHhfcGFnZSA9IDE7Ci0gICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFBVX05PUEE6Ci0gICAgICAgICAgICB4X3BhZ2Ug PSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ0tfVFRHV1NJWiAqLwotICAgICAg ICAgIGNhc2UgUFVfSERHOgotICAgICAgICAgICAgeF9oZGcgPSAxOwotICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgY2FzZSBQVV9OT0g6Ci0gICAgICAgICAgICB4X2hkZyA9IDA7Ci0gICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFBVX0FTSzoKLSAgICAgICAgICAgIHhfYXNr ID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgUFVfTkFTSzoKLSAgICAg ICAgICAgIHhfYXNrID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotI2lmZGVmIFVOSVhPUk9TSwot ICAgICAgICAgIGNhc2UgUFVfRE9UOgotICAgICAgICAgICAgeF9kb3QgPSAxOwotICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBQVV9OT0RPVDoKLSAgICAgICAgICAgIHhfZG90ID0g MDsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIFVOSVhPUk9TSyAqLwotICAgICAgICAg IGRlZmF1bHQ6Ci0gICAgICAgICAgICBwcmludGYoIj9UaGlzIG9wdGlvbiBjYW4gbm90IGJlIHNl dFxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlm ICgoeCA9IGNtY2ZtKCkpIDwgMCkgICAgICAgICAgICAgIC8qIEdldCBjb25maXJtYXRpb24gKi8K LSAgICAgIHJldHVybih4KTsKLSAgICBpZiAoeF9rZWVwID4gLTEpICAgICAgICAgICAgICAgICAg ICAvKiBTZXQgUFVSR0UgZGVmYXVsdHMuICovCi0gICAgICBwdV9rZWVwID0geF9rZWVwOwotICAg IGlmICh4X2xpc3QgPiAtMSkKLSAgICAgIHB1X2xpc3QgPSB4X2xpc3Q7Ci0jaWZkZWYgQ0tfVFRH V1NJWgotICAgIGlmICh4X3BhZ2UgPiAtMSkKLSAgICAgIHB1X3BhZ2UgPSB4X3BhZ2U7Ci0jZW5k aWYgLyogQ0tfVFRHV1NJWiAqLwotICAgIGlmICh4X2hkZyA+IC0xKQotICAgICAgcHVfaGRnID0g eF9oZGc7Ci0gICAgaWYgKHhfYXNrID4gLTEpCi0gICAgICBwdV9hc2sgPSB4X2FzazsKLSAgICBp ZiAoeF9kb3QgPiAtMSkKLSAgICAgIHB1X2RvdCA9IHhfZG90OwotICAgIHJldHVybihzdWNjZXNz ID0gMSk7Ci19Ci0KLWludAotZG9wdXJnZSgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIERvIHRoZSBQVVJHRSBjb21tYW5kICovCi0gICAgZXh0ZXJuIGNoYXIgKiogbXRjaHM7Ci0g ICAgZXh0ZXJuIGludCB4YXNrbW9yZSwgY21kX3Jvd3MsIHJlY3Vyc2l2ZTsKLSAgICBpbnQgc2lt dWxhdGUgPSAwLCBhc2tpbmcgPSAwOwotICAgIGludCBsaXN0aW5nID0gMCwgcGFnaW5nID0gLTEs IGxpbmVzID0gMCwgZGVsZXRpbmcgPSAxLCBlcnJvcnMgPSAwOwotICAgIHN0cnVjdCBGREIgc3cs IHNmLCBjbTsKLSAgICBpbnQgZywgaSwgaiwgaywgbSA9IDAsIG4sIHgsIHksIHosIGRvbmUgPSAw LCBjb3VudCA9IDAsIGZsYWdzID0gMDsKLSAgICBpbnQgdG9rZWVwID0gMCwgZ2V0dmFsID0gMCwg aGF2ZW5hbWUgPSAwLCBjb25maXJtZWQgPSAwOwotICAgIGludCB4eFtNQVhLRUVQKzFdOyAgICAg ICAgICAgICAgICAgIC8qIEFycmF5IG9mIG51bWJlcnMgdG8ga2VlcCAqLwotICAgIGludCBtaW4g PSAtMTsKLSAgICBpbnQgeF9oZGcgPSAwLCBmcyA9IDAsIHJjID0gMDsKLSAgICBDS19PRkZfVCBt aW5zaXplID0gLTFMLCBtYXhzaXplID0gLTFMOwotICAgIGNoYXIgbmFtZWJ1ZltDS01BWFBBVEgr NF07Ci0gICAgY2hhciBiYXNlYnVmW0NLTUFYUEFUSCs0XTsKLSAgICBjaGFyCi0gICAgICAqIHB1 X2FmdCA9IE5VTEwsCi0gICAgICAqIHB1X2JlZiA9IE5VTEwsCi0gICAgICAqIHB1X25hZiA9IE5V TEwsCi0gICAgICAqIHB1X25iZiA9IE5VTEwsCi0gICAgICAqIHB1X2V4YyA9IE5VTEw7Ci0gICAg Y2hhciAqIHB4bGlzdFs4XTsgICAgICAgICAgICAgICAgICAgLyogRXhjZXB0aW9uIGxpc3QgKi8K LQotICAgIGlmIChwdV9rZWVwID4gLTEpICAgICAgICAgICAgICAgICAgIC8qIFNldCBQVVJHRSBk ZWZhdWx0cy4gKi8KLSAgICAgIHRva2VlcCA9IHB1X2tlZXA7Ci0gICAgaWYgKHB1X2xpc3QgPiAt MSkKLSAgICAgIGxpc3RpbmcgPSBwdV9saXN0OwotI2lmZGVmIENLX1RUR1dTSVoKLSAgICBpZiAo cHVfcGFnZSA+IC0xKQotICAgICAgcGFnaW5nID0gcHVfcGFnZTsKLSNlbmRpZiAvKiBDS19UVEdX U0laICovCi0KLSAgICBmb3IgKGkgPSAwOyBpIDw9IE1BWEtFRVA7IGkrKykgICAgICAvKiBDbGVh ciB0aGlzIG51bWJlciBidWZmZXIgKi8KLSAgICAgIHh4W2ldID0gMDsKLSAgICBmb3IgKGkgPSAw OyBpIDwgODsgaSsrKSAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHRoZXNlLi4uICovCi0gICAg ICBweGxpc3RbaV0gPSBOVUxMOwotCi0gICAgZ19tYXRjaGRvdCA9IG1hdGNoZG90OyAgICAgICAg ICAgICAgLyogU2F2ZSB0aGVzZS4uLiAqLwotCi0gICAgY21mZGJpKCZzdywgICAgICAgICAgICAg ICAgICAgICAgICAgLyogMXN0IEZEQiAtIFBVUkdFIHN3aXRjaGVzICovCi0gICAgICAgICAgIF9D TUtFWSwgICAgICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KLSAgICAgICAgICAgIkZpbGVu YW1lIG9yIHN3aXRjaCIsICAgICAgICAvKiBobHBtc2cgKi8KLSAgICAgICAgICAgIiIsICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICIiLCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAgICAgICAgbnB1 cmd0YWIsICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNp emUgKi8KLSAgICAgICAgICAgNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBu dW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICovCi0gICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAg ICAgICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotICAgICAgICAgICBwdXJndGFi LCAgICAgICAgICAgICAgICAgICAgIC8qIEtleXdvcmQgdGFibGUgKi8KLSAgICAgICAgICAgJnNm ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCi0gICAg ICAgICAgICk7Ci0gICAgY21mZGJpKCZzZiwgICAgICAgICAgICAgICAgICAgICAgICAgLyogMm5k IEZEQiAtIGZpbGVzcGVjIHRvIHB1cmdlICovCi0gICAgICAgICAgIF9DTUlGSSwgICAgICAgICAg ICAgICAgICAgICAgLyogZmNvZGUgKi8KLSAgICAgICAgICAgIiIsCi0gICAgICAgICAgICIiLCAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAiIiwgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAgICAg IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8K LSAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmlj IGRhdGEgMiAqLwotICAgICAgICAgICB4eHN0cmluZywKLSAgICAgICAgICAgTlVMTCwKLSAgICAg ICAgICAgJmNtCi0gICAgICAgICAgICk7Ci0gICAgY21mZGJpKCZjbSwgICAgICAgICAgICAgICAg ICAgICAgICAgLyogT3IgcHJlbWF0dXJlIGNvbmZpcm1hdGlvbiAqLwotICAgICAgICAgICBfQ01D Rk0sICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgICIiLCAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogaGxwbXNnICovCi0gICAgICAgICAgICIiLCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAiIiwgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAgICAgIDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KLSAgICAg ICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEg MiAqLwotICAgICAgICAgICBOVUxMLAotICAgICAgICAgICBOVUxMLAotICAgICAgICAgICBOVUxM Ci0gICAgICAgICAgICk7Ci0KLSAgICB3aGlsZSAoIWhhdmVuYW1lICYmICFjb25maXJtZWQpIHsK LSAgICAgICAgeCA9IGNtZmRiKCZzdyk7ICAgICAgICAgICAgICAgICAvKiBQYXJzZSBzb21ldGhp bmcgKi8KLSAgICAgICAgaWYgKHggPCAwKSB7ICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciAq LwotICAgICAgICAgICAgcmMgPSB4OwotICAgICAgICAgICAgZ290byB4cHVyZ2U7Ci0gICAgICAg IH0gZWxzZSBpZiAoY21yZXN1bHQuZmNvZGUgPT0gX0NNS0VZKSB7Ci0gICAgICAgICAgICBjaGFy IGM7Ci0gICAgICAgICAgICBjID0gY21nYnJrKCk7Ci0gICAgICAgICAgICBpZiAoKGdldHZhbCA9 IChjID09ICc6JyB8fCBjID09ICc9JykpICYmICEoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7Ci0g ICAgICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBhbiBhcmd1 bWVudFxuIik7Ci0gICAgICAgICAgICAgICAgcmMgPSAtOTsKLSAgICAgICAgICAgICAgICBnb3Rv IHhwdXJnZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghZ2V0dmFsICYmIChjbWdr d2ZsZ3MoKSAmIENNX0FSRykpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRj aCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7Ci0gICAgICAgICAgICAgICAgcmMgPSAtOTsKLSAg ICAgICAgICAgICAgICBnb3RvIHhwdXJnZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN3 aXRjaCAoayA9IGNtcmVzdWx0Lm5yZXN1bHQpIHsKLSAgICAgICAgICAgICAgY2FzZSBQVV9LRUVQ OgotICAgICAgICAgICAgICAgIHogPSAxOwotICAgICAgICAgICAgICAgIGlmIChjID09ICc6JyB8 fCBjID09ICc9JykgewotICAgICAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbW51bSgiSG93IG1h bnkgYmFja3VwIGZpbGVzIHRvIGtlZXAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiMSIsMTAsJnoseHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg IHJjID0geTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8geHB1cmdlOwotICAgICAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh6IDwg MCB8fCB6ID4gTUFYS0VFUCkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9QbGVhc2Ug c3BlY2lmeSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kICVkXG4iLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgTUFYS0VFUAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAg ICAgICAgICAgICAgcmMgPSAtOTsKLSAgICAgICAgICAgICAgICAgICAgZ290byB4cHVyZ2U7Ci0g ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRva2VlcCA9IHo7Ci0gICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgUFVfTElTVDoKLSAgICAgICAgICAgICAg ICBsaXN0aW5nID0gMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz ZSBQVV9OT0xJOgotICAgICAgICAgICAgICAgIGxpc3RpbmcgPSAwOwotICAgICAgICAgICAgICAg IGJyZWFrOwotI2lmZGVmIENLX1RUR1dTSVoKLSAgICAgICAgICAgICAgY2FzZSBQVV9QQUdFOgot ICAgICAgICAgICAgICAgIHBhZ2luZyA9IDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgIGNhc2UgUFVfTk9QQToKLSAgICAgICAgICAgICAgICBwYWdpbmcgPSAwOwotICAg ICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KLSAgICAgICAgICAg ICAgY2FzZSBQVV9ERUxFOgotICAgICAgICAgICAgICAgIGRlbGV0aW5nID0gMTsKLSAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBQVV9OT0RFOgotICAgICAgICAgICAg ICAgIGRlbGV0aW5nID0gMDsKLSAgICAgICAgICAgICAgICBzaW11bGF0ZSA9IDE7Ci0gICAgICAg ICAgICAgICAgbGlzdGluZyA9IDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICAgIGNhc2UgUFVfQVNLOgotICAgICAgICAgICAgICAgIGFza2luZyA9IDE7Ci0gICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgUFVfTkFTSzoKLSAgICAgICAgICAgICAg ICBhc2tpbmcgPSAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl IFBVX0FGVDoKLSAgICAgICAgICAgICAgY2FzZSBQVV9CRUY6Ci0gICAgICAgICAgICAgIGNhc2Ug UFVfTkFGOgotICAgICAgICAgICAgICBjYXNlIFBVX05CRjoKLSAgICAgICAgICAgICAgICBpZiAo KHggPSBjbWRhdGUoIkZpbGUtdGltZSIsIiIsJnMsMCx4eHN0cmluZykpIDwgMCkgewotICAgICAg ICAgICAgICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJp bnRmKCI/RGF0ZS10aW1lIHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJj ID0gLTk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAg IHJjID0geDsKLSAgICAgICAgICAgICAgICAgICAgZ290byB4cHVyZ2U7Ci0gICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgIGZzKys7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChrKSB7 Ci0gICAgICAgICAgICAgICAgICBjYXNlIFBVX0FGVDogbWFrZXN0cigmcHVfYWZ0LHMpOyBicmVh azsKLSAgICAgICAgICAgICAgICAgIGNhc2UgUFVfQkVGOiBtYWtlc3RyKCZwdV9iZWYscyk7IGJy ZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBQVV9OQUY6IG1ha2VzdHIoJnB1X25hZixzKTsg YnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFBVX05CRjogbWFrZXN0cigmcHVfbmJmLHMp OyBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgIGNhc2UgUFVfU01BOgotICAgICAgICAgICAgICBjYXNlIFBVX0xBUjoKLSAgICAg ICAgICAgICAgICBpZiAoKHggPSBjbW51bSgiRmlsZSBzaXplIGluIGJ5dGVzIiwiMCIsMTAsJnks eHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgcmMgPSB4OwotICAgICAgICAg ICAgICAgICAgICBnb3RvIHhwdXJnZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgZnMrKzsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsKLSAg ICAgICAgICAgICAgICAgIGNhc2UgUFVfU01BOiBtaW5zaXplID0geTsgYnJlYWs7Ci0gICAgICAg ICAgICAgICAgICBjYXNlIFBVX0xBUjogbWF4c2l6ZSA9IHk7IGJyZWFrOwotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBQVV9ET1Q6 Ci0gICAgICAgICAgICAgICAgbWF0Y2hkb3QgPSAxOwotICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICBjYXNlIFBVX05PRE9UOgotICAgICAgICAgICAgICAgIG1hdGNoZG90ID0g MDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBQVV9FWEM6Ci0g ICAgICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQoIlBhdHRlcm4iLCIiLCZzLHh4c3RyaW5nKSkg PCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh4ID09IC0zKSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBwcmludGYoIj9QYXR0ZXJuIHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAgICAg ICAgICAgICAgIHJjID0gLTk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg ICAgICAgICAgICAgIHJjID0geDsKLSAgICAgICAgICAgICAgICAgICAgZ290byB4cHVyZ2U7Ci0g ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZzKys7Ci0gICAgICAgICAgICAgICAg bWFrZXN0cigmcHVfZXhjLHMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICBjYXNlIFBVX0hERzoKLSAgICAgICAgICAgICAgICB4X2hkZyA9IDE7Ci0gICAgICAgICAgICAg ICAgYnJlYWs7Ci0jaWZkZWYgUkVDVVJTSVZFCi0gICAgICAgICAgICAgIGNhc2UgUFVfUkVDVTog ICAgICAgICAgICAgLyogL1JFQ1VSU0lWRSAqLwotICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZSA9 IDI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogUkVDVVJTSVZFICovCi0gICAg ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/Tm90IGltcGxlbWVu dGVkIHlldCAtIFwiJXNcIlxuIixhdG1idWYpOwotICAgICAgICAgICAgICAgIHJjID0gLTk7Ci0g ICAgICAgICAgICAgICAgZ290byB4cHVyZ2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz ZSBpZiAoY21yZXN1bHQuZmNvZGUgPT0gX0NNSUZJKSB7Ci0gICAgICAgICAgICBoYXZlbmFtZSA9 IDE7Ci0gICAgICAgIH0gZWxzZSBpZiAoY21yZXN1bHQuZmNvZGUgPT0gX0NNQ0ZNKSB7Ci0gICAg ICAgICAgICBjb25maXJtZWQgPSAxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmMg PSAtMjsKLSAgICAgICAgICAgIGdvdG8geHB1cmdlOwotICAgICAgICB9Ci0gICAgfQotICAgIGlm IChoYXZlbmFtZSkgewotI2lmZGVmIENLUkVHRVgKLSAgICAgICAgY2ttYWttc2cobGluZSxMSU5C VUZTSVosY21yZXN1bHQuc3Jlc3VsdCwiLn5bMS05XSp+IixOVUxMLE5VTEwpOwotI2Vsc2UKLSAg ICAgICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVosY21yZXN1bHQuc3Jlc3VsdCwiLn4qfiIsTlVM TCxOVUxMKTsKLSNlbmRpZiAvKiBDS1JFR0VYICovCi0gICAgfSBlbHNlIHsKLSNpZmRlZiBDS1JF R0VYCi0gICAgICAgIGNrc3RybmNweShsaW5lLCIqLn5bMS05XSp+IixMSU5CVUZTSVopOwotI2Vs c2UKLSAgICAgICAgY2tzdHJuY3B5KGxpbmUsIioufip+IixMSU5CVUZTSVopOwotI2VuZGlmIC8q IENLUkVHRVggKi8KLSAgICB9Ci0gICAgaWYgKCFjb25maXJtZWQpIHsKLSAgICAgICAgaWYgKCh4 ID0gY21jZm0oKSkgPCAwKSB7Ci0gICAgICAgICAgICByYyA9IHg7Ci0gICAgICAgICAgICBnb3Rv IHhwdXJnZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAvKiBQYXJzZSBmaW5pc2hlZCAtIG5vdyBh Y3Rpb24gKi8KLQotI2lmZGVmIENLX0xPR0lOCi0gICAgaWYgKGlzZ3Vlc3QpIHsKLSAgICAgICAg cHJpbnRmKCI/RmlsZSBkZWxldGlvbiBieSBndWVzdHMgbm90IHBlcm1pdHRlZC5cbiIpOwotICAg ICAgICByYyA9IC05OwotICAgICAgICBnb3RvIHhwdXJnZTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tf TE9HSU4gKi8KLQotI2lmZGVmIENLX1RUR1dTSVoKLSAgICBpZiAocGFnaW5nIDwgMCkgICAgICAg ICAgICAgICAgICAgICAvKiAvW05PXVBBR0Ugbm90IGdpdmVuICovCi0gICAgICBwYWdpbmcgPSB4 YXNrbW9yZTsgICAgICAgICAgICAgICAgLyogc28gdXNlIHByZXZhaWxpbmcgKi8KLSNlbmRpZiAv KiBDS19UVEdXU0laICovCi0KLSAgICBsaW5lcyA9IDA7Ci0gICAgaWYgKHhfaGRnID4gMCkgewot ICAgICAgICBwcmludGYoIlB1cmdpbmcgJXMsIGtlZXBpbmcgJWQuLi4lc1xuIiwKLSAgICAgICAg ICAgICAgIHMsCi0gICAgICAgICAgICAgICB0b2tlZXAsCi0gICAgICAgICAgICAgICBzaW11bGF0 ZSA/ICIgKFNJTVVMQVRJT04pIiA6ICIiKTsKLSAgICAgICAgbGluZXMgKz0gMjsKLSAgICB9Ci0g ICAgZmxhZ3MgPSBaWF9GSUxPTkxZOwotICAgIGlmIChyZWN1cnNpdmUpIGZsYWdzIHw9IFpYX1JF Q1VSU0U7Ci0gICAgbiA9IG56eHBhbmQobGluZSxmbGFncyk7ICAgICAgICAgICAgLyogR2V0IGxp c3Qgb2YgYmFja3VwIGZpbGVzICovCi0gICAgaWYgKHRva2VlcCA8IDEpIHsgICAgICAgICAgICAg ICAgICAgLyogRGVsZXRpbmcgYWxsIG9mIHRoZW0uLi4gKi8KLSAgICAgICAgZm9yIChpID0gMDsg aSA8IG47IGkrKykgewotICAgICAgICAgICAgaWYgKGZzKSBpZiAoZmlsZXNlbGVjdChtdGNoc1tp XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVfYWZ0LHB1X2JlZixwdV9u YWYscHVfbmJmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5zaXplLG1h eHNpemUsMCw4LHB4bGlzdCkgPCAxKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxpc3RpbmcgPiAw KSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiICVzIChTS0lQUEVEKVxuIixtdGNoc1tp XSk7Ci0jaWZkZWYgQ0tfVFRHV1NJWgotICAgICAgICAgICAgICAgICAgICBpZiAocGFnaW5nKQot ICAgICAgICAgICAgICAgICAgICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgIGlmICghYXNrbW9yZSgpKSBnb3RvIHhwdXJnZTsgZWxzZSBs aW5lcyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIENLX1RUR1dTSVog Ki8KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgICAgICBpZiAoYXNraW5nKSB7Ci0gICAgICAgICAgICAgICAgaW50IHg7 Ci0gICAgICAgICAgICAgICAgY2ttYWttc2codG1wYnVmLFRNUEJVRlNJWiwiIERlbGV0ZSAiLG10 Y2hzW2ldLCI/IixOVUxMKTsKLSAgICAgICAgICAgICAgICB4ID0gZ2V0eWVzbm8odG1wYnVmLDEp OwotICAgICAgICAgICAgICAgIHN3aXRjaCAoeCkgewotICAgICAgICAgICAgICAgICAgY2FzZSAw OiBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgIGNhc2UgMTogYnJlYWs7Ci0gICAgICAgICAg ICAgICAgICBjYXNlIDI6IGdvdG8geHB1cmdlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIHggPSBkZWxldGluZyA/IHpkZWxldChtdGNoc1tpXSkgOiAwOwot ICAgICAgICAgICAgaWYgKHggPiAtMSkgewotICAgICAgICAgICAgICAgIGlmIChsaXN0aW5nKQot ICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgJXMgKCVzKVxuIiwgbXRjaHNbaV0sZGVsZXRpbmcg PyAiT0siIDogIlNFTEVDVEVEIik7Ci0gICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAg ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZXJyb3JzKys7Ci0gICAgICAgICAgICAgICAg aWYgKGxpc3RpbmcpCi0gICAgICAgICAgICAgICAgICBwcmludGYoIiAlcyAoRkFJTEVEKVxuIiwg bXRjaHNbaV0pOwotICAgICAgICAgICAgfQotI2lmZGVmIENLX1RUR1dTSVoKLSAgICAgICAgICAg IGlmIChsaXN0aW5nICYmIHBhZ2luZykKLSAgICAgICAgICAgICAgaWYgKCsrbGluZXMgPiBjbWRf cm93cyAtIDMpIHsKLSAgICAgICAgICAgICAgICAgIGlmICghYXNrbW9yZSgpKSBnb3RvIHhwdXJn ZTsgZWxzZSBsaW5lcyA9IDA7Ci0gICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19UVEdXU0la ICovCi0gICAgICAgIH0KLSAgICAgICAgZ290byB4cHVyZ2U7Ci0gICAgfQotICAgIGlmIChuIDwg dG9rZWVwKSB7ICAgICAgICAgICAgICAgICAgIC8qIE5vdCBkZWxldGluZyBhbnkgKi8KLSAgICAg ICAgY291bnQgPSAwOwotICAgICAgICBpZiAobGlzdGluZykKLSAgICAgICAgICBwcmludGYoIiBN YXRjaGVzID0gJWQ6IE5vdCBlbm91Z2ggdG8gcHVyZ2UuXG4iLG4pOwotICAgICAgICBnb3RvIHhw dXJnZTsKLSAgICB9Ci0KLSAgICAvKiBHZW5lcmFsIGNhc2UgLSBkZWxldGUgc29tZSBidXQgbm90 IG90aGVycyAqLwotCi0gICAgc2hfc29ydChtdGNocyxOVUxMLG4sMCwwLGZpbGVjYXNlKTsgLyog QWxwaGFiZXRpemUgdGhlIGxpc3QgKEVTU0VOVElBTCkgKi8KLQotICAgIGcgPSAwOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IG9mIGN1cnJlbnQgZ3JvdXAgKi8KLSAgICBm b3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7ICAgICAgICAgICAvKiBHbyB0aHJ1IHNvcnRlZCBmaWxl IGxpc3QgKi8KLSAgICAgICAgeCA9IHpuZXh0KG5hbWVidWYpOyAgICAgICAgICAgICAvKiBHZXQg bmV4dCBmaWxlICovCi0gICAgICAgIGlmICh4IDwgMSB8fCAhbmFtZWJ1ZlswXSB8fCBpID09IG4g LSAxKSAvKiBObyBtb3JlPyAqLwotICAgICAgICAgIGRvbmUgPSAxOyAgICAgICAgICAgICAgICAg ICAgIC8qIE5PVEU6ICdkb25lJyBtdXN0IGJlIDAgb3IgMSBvbmx5ICovCi0gICAgICAgIGlmIChm cykgaWYgKGZpbGVzZWxlY3QobmFtZWJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwdV9hZnQscHVfYmVmLHB1X25hZixwdV9uYmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbWluc2l6ZSxtYXhzaXplLDAsOCxweGxpc3QpIDwgMSkgewotICAgICAgICAgICAgaWYg KGxpc3RpbmcgPiAwKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIgJXMgKFNLSVBQRUQpXG4i LG5hbWVidWYpOwotICAgICAgICAgICAgICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKQot ICAgICAgICAgICAgICAgICAgaWYgKCFhc2ttb3JlKCkpIGdvdG8geHB1cmdlOyBlbHNlIGxpbmVz ID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0g ICAgICAgIGlmICh4ID4gMCkKLSAgICAgICAgICBpZiAoKG0gPSBia3VwbnVtKG5hbWVidWYsJnop KSA8IDApIC8qIFRoaXMgZmlsZSdzIGJhY2t1cCBudW1iZXIuICovCi0gICAgICAgICAgICBjb250 aW51ZTsKLSAgICAgICAgZm9yIChqID0gMDsgaiA8IHRva2VlcDsgaisrKSB7ICAvKiBJbnNlcnQg aW4gbGlzdC4gKi8KLSAgICAgICAgICAgIGlmIChtID4geHhbal0pIHsKLSAgICAgICAgICAgICAg ICBmb3IgKGsgPSB0b2tlZXAgLSAxOyBrID4gajsgay0tKQotICAgICAgICAgICAgICAgICAgeHhb a10gPSB4eFtrLTFdOwotICAgICAgICAgICAgICAgIHh4W2pdID0gbTsKLSAgICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvKiBOZXcgZ3JvdXA/ ICovCi0gICAgICAgIGlmIChkb25lIHx8IChpID4gMCAmJiBja3N0cmNtcChuYW1lYnVmLGJhc2Vi dWYseiwxKSkpIHsKLSAgICAgICAgICAgIGlmIChpICsgZG9uZSAtIGcgPiB0b2tlZXApIHsgLyog RG8gd2UgaGF2ZSBlbm91Z2ggdG8gcHVyZ2U/ICovCi0gICAgICAgICAgICAgICAgbWluID0geHhb dG9rZWVwLTFdOyAgICAgLyogWWVzLCBsb3dlc3QgYmFja3VwIG51bWJlciB0byBrZWVwICovCi0g ICAgICAgICAgICAgICAgZGVidWcoRjExMSwiZG9wdXJnZSBncm91cCIsYmFzZWJ1ZixtaW4pOwot ICAgICAgICAgICAgICAgIGZvciAoaiA9IGc7IGogPCBpICsgZG9uZTsgaisrKSB7IC8qIEdvIHRo cm91Z2ggdGhpcyBncm91cCAqLwotICAgICAgICAgICAgICAgICAgICB4ID0gYmt1cG51bShtdGNo c1tqXSwmeik7ICAgIC8qIEdldCBmaWxlIGJhY2t1cCBudW1iZXIgKi8KLSAgICAgICAgICAgICAg ICAgICAgaWYgKHggPiAwICYmIHggPCBtaW4pIHsgICAgICAvKiBCZWxvdyBtaW5pbXVtPyAqLwot ICAgICAgICAgICAgICAgICAgICAgICAgeCA9IGRlbGV0aW5nID8gemRlbGV0KG10Y2hzW2pdKSA6 IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCA8IDApIGVycm9ycysrOwotICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKGxpc3RpbmcpCi0gICAgICAgICAgICAgICAgICAgICAgICAg IHByaW50ZigiICVzICglcylcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt dGNoc1tqXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCA8IDApID8gIkVS Uk9SIiA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlbGV0aW5nID8gIkRF TEVURUQiIDogIlNFTEVDVEVEIikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OwotICAgICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICAgICAg fSBlbHNlIGlmIChsaXN0aW5nKSAvKiBOb3QgYmVsb3cgbWluaW11bSAtIGtlZXAgdGhpcyBvbmUg Ki8KLSAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAlcyAoS0VQVClcbiIsbXRjaHNbal0p OwotI2lmZGVmIENLX1RUR1dTSVoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3RpbmcgJiYg cGFnaW5nKQotICAgICAgICAgICAgICAgICAgICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAz KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXNrbW9yZSgpKSBnb3RvIHhwdXJn ZTsgZWxzZSBsaW5lcyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIENL X1RUR1dTSVogKi8KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGxp c3RpbmcgJiYgcGFnaW5nKSB7IC8qIE5vdCBlbm91Z2ggdG8gcHVyZ2UgKi8KLSAgICAgICAgICAg ICAgICBwcmludGYoIiAlcy5+Kn4gKEtFUFQpXG4iLGJhc2VidWYpOwotI2lmZGVmIENLX1RUR1dT SVoKLSAgICAgICAgICAgICAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgewotICAgICAg ICAgICAgICAgICAgICBpZiAoIWFza21vcmUoKSkgZ290byB4cHVyZ2U7IGVsc2UgbGluZXMgPSAw OwotICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19UVEdXU0laICovCi0gICAgICAgICAg ICB9Ci0gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgdG9rZWVwOyBqKyspIC8qIENsZWFyIHRo ZSBiYWNrdXAgbnVtYmVyIGxpc3QgKi8KLSAgICAgICAgICAgICAgeHhbal0gPSAwOwotICAgICAg ICAgICAgZyA9IGk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IHRoZSBncm91cCBwb2lu dGVyICovCi0gICAgICAgIH0KLSAgICAgICAgaWYgKGRvbmUpICAgICAgICAgICAgICAgICAgICAg ICAvKiBObyBtb3JlIGZpbGVzLCBkb25lLiAqLwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBz dHJuY3B5KGJhc2VidWYsbmFtZWJ1Zix6KTsgICAgIC8qIFNldCBiYXNlbmFtZSBvZiB0aGlzIGZp bGUgKi8KLSAgICAgICAgYmFzZWJ1Zlt6XSA9IE5VTDsKLSAgICB9Ci0gIHhwdXJnZTogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29tbW9uIGV4aXQgcG9pbnQgKi8KLSAgICBpZiAo Z19tYXRjaGRvdCA+IC0xKSB7Ci0gICAgICAgIG1hdGNoZG90ID0gZ19tYXRjaGRvdDsgICAgICAg ICAgLyogUmVzdG9yZSB0aGVzZS4uLiAqLwotICAgICAgICBnX21hdGNoZG90ID0gLTE7Ci0gICAg fQotICAgIGlmIChyYyA8IDApIHJldHVybihyYyk7ICAgICAgICAgICAgIC8qIFBhcnNlIGVycm9y ICovCi0gICAgaWYgKHhfaGRnKQotICAgICAgcHJpbnRmKCJGaWxlcyBwdXJnZWQ6ICVkJXNcbiIs Ci0gICAgICAgICAgICAgY291bnQsCi0gICAgICAgICAgICAgZGVsZXRpbmcgPyAiIiA6ICIgKG5v dCByZWFsbHkpIgotICAgICAgICAgICAgICk7Ci0gICAgcmV0dXJuKHN1Y2Nlc3MgPSBjb3VudCA+ IDAgPyAxIDogKGVycm9ycyA+IDApID8gMCA6IDEpOwotfQotI2VuZGlmIC8qIENLUFVSR0UgKi8K LQotI2lmbmRlZiBOT1hGRVIKLSNpZm5kZWYgTk9MT0NBTAotaW50Ci1kb3hkaXMod2hpY2gpIGlu dCB3aGljaDsgewkJLyogMSA9IEtlcm1pdCwgMiA9IEZUUCAqLwotICAgIGV4dGVybiBpbnQgbm9s b2NhbDsKLSAgICBpbnQgeCwgeSA9IDAsIHo7Ci0jaWZkZWYgTkVXRlRQCi0gICAgZXh0ZXJuIGlu dCBmdHBfZGlzOwotI2VuZGlmIC8qIE5FV0ZUUCAqLwotCi0jaWZkZWYgQ09NTUVOVAotICAgIGNo YXIgKnM7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgaWYgKCh4ID0gY21rZXkoZmR0YWIs bmZkdGFiLCJmaWxlIHRyYW5zZmVyIGRpc3BsYXkgc3R5bGUiLCIiLAotICAgICAgICAgICAgICAg ICAgIHh4c3RyaW5nKSkgPCAwKQotICAgICAgcmV0dXJuKHgpOwotI2lmZGVmIENLX1BDVF9CQVIK LSAgICBpZiAoKHkgPSBjbWtleShmZGZ0YWIsMiwiIiwidGhlcm1vbWV0ZXIiLHh4c3RyaW5nKSkg PCAwKQotICAgICAgcmV0dXJuKHkpOwotI2VuZGlmIC8qIENLX1BDVF9CQVIgKi8KLSAgICBpZiAo KHogPSBjbWNmbSgpKSA8IDApIHJldHVybih6KTsKLSNpZmRlZiBDS19DVVJTRVMKLSAgICBpZiAo eCA9PSBYWUZEX0MpIHsgICAgICAgICAgICAgICAgICAvKiBGVUxMU0NSRUVOICovCi0jaWZkZWYg Q09NTUVOVAotI2lmbmRlZiBNWUNVUlNFUwotICAgICAgICBleHRlcm4gY2hhciAqIHRybWJ1Zjsg ICAgICAgICAgIC8qIFJlYWwgY3Vyc2VzICovCi0gICAgICAgIGludCB6OwotI2VuZGlmIC8qIE1Z Q1VSU0VTICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgICAgIGlmIChub2xvY2FsKSAg ICAgICAgICAgICAgICAgICAgLyogTm90aGluZyB0byBkbyBpbiB0aGlzIGNhc2UgKi8KLQkgIHJl dHVybihzdWNjZXNzID0gMSk7Ci0KLSNpZmRlZiBDT01NRU5UCi0jaWZuZGVmIE1ZQ1VSU0VTCi0j aWZuZGVmIFZNUwotICAgICAgICBzID0gZ2V0ZW52KCJURVJNIik7Ci0gICAgICAgIGRlYnVnKEYx MTAsImRveGRpcyBURVJNIixzLDApOwotICAgICAgICBpZiAoIXMpIHMgPSAiIjsKLSAgICAgICAg ZnhkaW5pdCh4KTsKLSAgICAgICAgaWYgKCpzICYmIHRybWJ1ZikgeyAgICAgICAgICAgICAvKiBE b24ndCBjYWxsIHRnZXRlbnQgKi8KLSAgICAgICAgICAgIHogPSB0Z2V0ZW50KHRybWJ1ZixzKTsg ICAgICAvKiBpZiB0cm1idWYgbm90IGFsbG9jYXRlZCAqLwotICAgICAgICAgICAgZGVidWcoRjEx MSwiZG94ZGlzIHRnZXRlbnQiLHMseik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB6 ID0gMDsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImRveGRpcyB0Z2V0ZW50IHNraXBwZWQiLHMs MCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHogPCAxKSB7Ci0gICAgICAgICAgICBwcmludGYo IlNvcnJ5LCB0ZXJtaW5hbCB0eXBlIHVua25vd246IFwiJXNcIlxuIixzKTsKLSAgICAgICAgICAg IHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRp ZiAvKiBNWUNVUlNFUyAqLwotI2Vsc2UKLSAgICAgICAgZnhkaW5pdCh4KTsKLSNlbmRpZiAvKiBD T01NRU5UICovCi0KLSNpZmRlZiBDS19QQ1RfQkFSCi0gICAgICAgIHRoZXJtb21ldGVyID0geTsK LSNlbmRpZiAvKiBDS19QQ1RfQkFSICovCi0KLSAgICAgICAgbGluZVswXSA9ICdcMCc7ICAgICAg ICAgICAgICAgICAvKiAoV2hhdCdzIHRoaXMgZm9yPykgKi8KLSAgICB9Ci0jZW5kaWYgLyogQ0tf Q1VSU0VTICovCi0gICAgaWYgKHdoaWNoID09IDEpCQkJLyogSXQncyBPSy4gKi8KLSAgICAgIGZk aXNwbGEgPSB4OwotI2lmZGVmIE5FV0ZUUAotICAgIGVsc2UgaWYgKHdoaWNoID09IDIpCi0gICAg ICBmdHBfZGlzID0geDsKLSNlbmRpZiAvKiBORVdGVFAgKi8KLSAgICByZXR1cm4oc3VjY2VzcyA9 IDEpOwotfQotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotaW50 Ci1zZXRmaWwocm1zZmxnKSBpbnQgcm1zZmxnOyB7Ci0jaWZkZWYgQ09NTUVOVAotICAgIGV4dGVy biBpbnQgZW5fZGVsOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNpZm5kZWYgTk9YRkVSCi0gICAg aWYgKHJtc2ZsZykgewotICAgICAgICBpZiAoKHkgPSBjbWtleShyZmlsdGFiLG5yZmlscCwiUmVt b3RlIGZpbGUgcGFyYW1ldGVyIiwiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcp KSA8IDApIHsKLSAgICAgICAgICAgIGlmICh5ID09IC0zKSB7Ci0gICAgICAgICAgICAgICAgcHJp bnRmKCI/UmVtb3RlIGZpbGUgcGFyYW1ldGVyIHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAgICAg ICByZXR1cm4oLTkpOwotICAgICAgICAgICAgfSBlbHNlIHJldHVybih5KTsKLSAgICAgICAgfQot ICAgIH0gZWxzZSB7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0gICAgICAgIGlmICgoeSA9IGNta2V5 KGZpbHRhYixuZmlscCwiRmlsZSBwYXJhbWV0ZXIiLCIiLHh4c3RyaW5nKSkgPCAwKQotICAgICAg ICAgIHJldHVybih5KTsKLSNpZm5kZWYgTk9YRkVSCi0gICAgfQotI2VuZGlmIC8qIE5PWEZFUiAq LwotICAgIHN3aXRjaCAoeSkgewotI2lmZGVmIENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIE5vdCBuZWVkZWQgKi8KLSAgICAgIGNhc2UgWFlGSUxCOiAgICAgICAgICAgICAgICAg ICAgICAvKiBCbG9ja3NpemUgKi8KLSAgICAgICAgaWYgKCh5ID0gY21udW0oImZpbGUgYmxvY2sg c2l6ZSIsY2tpdG9hKERCTEtTSVopLDEwLCZ6LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJl dHVybih5KTsKLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAg ICAgIGlmIChybXNmbGcpIHsKLSAgICAgICAgICAgIHNzdGF0ZSA9IHNldGdlbignUycsICIzMTEi LCBja2l0b2EoeiksICIiKTsKLSAgICAgICAgICAgIHJldHVybigoaW50KSBzc3RhdGUpOwotICAg ICAgICB9IGVsc2UgewotICAgICAgICAgICAgZmJsa3NpeiA9IHo7Ci0gICAgICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0jaWZu ZGVmIE5PWEZFUgotICAgICAgY2FzZSBYWUZJTFM6ICAgICAgICAgICAgICAgICAgICAgIC8qIEJ5 dGUgc2l6ZSAqLwotICAgICAgICBpZiAoKHkgPSBjbW51bSgiZmlsZSBieXRlIHNpemUgKDcgb3Ig OCkiLCI4IiwxMCwmeix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeSk7Ci0gICAg ICAgIGlmICh6ICE9IDcgJiYgeiAhPSA4KSB7Ci0gICAgICAgICAgICBwcmludGYoIlxuP1RoZSBj aG9pY2VzIGFyZSA3IGFuZCA4XG4iKTsKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAgICAg fQotICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgaWYg KHogPT0gNykgZm1hc2sgPSAwMTc3OwotICAgICAgICBlbHNlIGlmICh6ID09IDgpIGZtYXNrID0g MDM3NzsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQotI2lmbmRlZiBOT0NTRVRTCi0g ICAgICBjYXNlIFhZRklMQzogeyAgICAgICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVyIHNldCAq LwotICAgICAgICAgIGNoYXIgKiBjc2V0bmFtZSA9IE5VTEw7Ci0gICAgICAgICAgZXh0ZXJuIGlu dAotICAgICAgICAgICAgcl9jc2V0LCBzX2NzZXQsIGFmY3NldFtdOyAgIC8qIFNFTkQgQ0hBUkFD VEVSLVNFVCBBVVRPIG9yIE1BTlVBTCAqLwotCi0gICAgICAgICAgc3RydWN0IEZEQiBrdywgZmw7 Ci0gICAgICAgICAgY21mZGJpKCZrdywgICAgICAgICAgICAgICAgICAgLyogRmlyc3QgRkRCIC0g Y29tbWFuZCBzd2l0Y2hlcyAqLwotICAgICAgICAgICAgICAgICBfQ01LRVksICAgICAgICAgICAg ICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgICAgICAgIHJtc2ZsZyA/ICJzZXJ2ZXIgY2hhcmFj dGVyLXNldCBuYW1lIiA6ICIiLCAgLyogaGVscCAqLwotICAgICAgICAgICAgICAgICAiIiwgICAg ICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgICAgICAgIiIsICAgICAg ICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAgICAgICAgICAgICBu ZmlsYywgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAq LwotICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVy aWMgZGF0YSAyOiAwID0ga2V5d29yZCAqLwotICAgICAgICAgICAgICAgICB4eHN0cmluZywgICAg ICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KLSAgICAgICAgICAgICAgICAgZmNz dGFiLCAgICAgICAgICAgICAgICAvKiBLZXl3b3JkIHRhYmxlICovCi0gICAgICAgICAgICAgICAg IHJtc2ZsZyA/ICZmbCA6IE5VTEwgICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLwotICAgICAg ICAgICApOwotICAgICAgICAgIGNtZmRiaSgmZmwsICAgICAgICAgICAgICAgICAgIC8qIEFueXRo aW5nIHRoYXQgZG9lc24ndCBtYXRjaCAqLwotICAgICAgICAgICAgICAgICBfQ01GTEQsICAgICAg ICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAg ICAgICAgLyogaGxwbXNnICovCi0gICAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAg ICAgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAg IC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAg ICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KLSAgICAgICAgICAgICAgICAgMCwg ICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLwotICAgICAgICAg ICAgICAgICB4eHN0cmluZywKLSAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAg ICAgTlVMTAotICAgICAgICAgICAgICAgICApOwotICAgICAgICAgIGlmICgoeCA9IGNtZmRiKCZr dykpIDwgMCkKLSAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICBpZiAoY21yZXN1bHQu ZmNvZGUgPT0gX0NNS0VZKSB7Ci0gICAgICAgICAgICAgIHggPSBjbXJlc3VsdC5ucmVzdWx0Owot ICAgICAgICAgICAgICBjc2V0bmFtZSA9IGZjc2luZm9beF0ua2V5d29yZDsKLSAgICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgICBja3N0cm5jcHkobGluZSxjbXJlc3VsdC5zcmVzdWx0LExJ TkJVRlNJWik7Ci0gICAgICAgICAgICAgIGNzZXRuYW1lID0gbGluZTsKLSAgICAgICAgICB9Ci0g ICAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeik7Ci0gICAgICAgICAgaWYg KHJtc2ZsZykgewotICAgICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1MnLCAiMzIwIiwgY3Nl dG5hbWUsICIiKTsKLSAgICAgICAgICAgICAgcmV0dXJuKChpbnQpIHNzdGF0ZSk7Ci0gICAgICAg ICAgfQotICAgICAgICAgIGZjaGFyc2V0ID0geDsKLSAgICAgICAgICBpZiAoc19jc2V0ID09IFhN T0RFX0EpICAgICAgICAvKiBJZiBTRU5EIENIQVJBQ1RFUi1TRVQgaXMgQVVUTyAqLwotICAgICAg ICAgICAgaWYgKHggPiAtMSAmJiB4IDw9IE1BWEZDU0VUUykKLSAgICAgICAgICAgICAgaWYgKGFm Y3NldFt4XSA+IC0xICYmIGFmY3NldFt4XSA8PSBNQVhUQ1NFVFMpCi0gICAgICAgICAgICAgICAg dGNoYXJzZXQgPSBhZmNzZXRbeF07IC8qIFBpY2sgY29ycmVzcG9uZGluZyB4ZmVyIGNoYXJzZXQg Ki8KLSAgICAgICAgICBzZXR4bGF0eXBlKHRjaGFyc2V0LGZjaGFyc2V0KTsgLyogVHJhbnNsYXRp b24gdHlwZSAqLwotICAgICAgICAgIC8qIElmIEkgc2F5IFNFVCBGSUxFIENIQVJBQ1RFUi1TRVQg YmxhaCwgSSB3YW50IHRvIGJlIGJsYWghICovCi0gICAgICAgICAgcl9jc2V0ID0gWE1PREVfTTsg ICAgICAgICAgICAgLyogRG9uJ3Qgc3dpdGNoIGluY29taW5nIHNldCEgKi8KLSAgICAgICAgICB4 ID0gZmNzaW5mb1tmY2hhcnNldF0uc2l6ZTsgICAvKiBBbHNvIHNldCBkZWZhdWx0IHgtYml0IGNo YXJzZXQgKi8KLSAgICAgICAgICBpZiAoeCA9PSAxMjgpICAgICAgICAgICAgICAgICAvKiA3LWJp dC4uLiAqLwotICAgICAgICAgICAgZGNzZXQ3ID0gZmNoYXJzZXQ7Ci0gICAgICAgICAgZWxzZSBp ZiAoeCA9PSAyNTYpICAgICAgICAgICAgLyogOC1iaXQuLi4gKi8KLSAgICAgICAgICAgIGRjc2V0 OCA9IGZjaGFyc2V0OwotICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICB9Ci0j ZW5kaWYgLyogTk9DU0VUUyAqLwotCi0jaWZuZGVmIE5PTE9DQUwKLSAgICAgIGNhc2UgWFlGSUxE OiAgICAgICAgICAgICAgICAgICAgICAvKiBEaXNwbGF5ICovCi0gICAgICAgIHJldHVybihkb3hk aXMoMSkpOwkJLyogMSA9PSBrZXJtaXQgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jZW5kaWYg LyogTk9YRkVSICovCi0KLSAgICAgIGNhc2UgWFlGSUxBOiAgICAgICAgICAgICAgICAgICAgICAv KiBFbmQtb2YtbGluZSAqLwotI2lmZGVmIE5MQ0hBUgotICAgICAgICBzID0gIiI7Ci0gICAgICAg IGlmIChOTENIQVIgPT0gMDE1KQotICAgICAgICAgIHMgPSAiY3IiOwotICAgICAgICBlbHNlIGlm IChOTENIQVIgPT0gMDEyKQotICAgICAgICAgIHMgPSAibGYiOwotICAgICAgICBpZiAoKHggPSBj bWtleShlb2x0YWIsIG5lb2x0YWIsCi0gICAgICAgICAgICAgICAgICAgICAgICJsb2NhbCB0ZXh0 LWZpbGUgbGluZSB0ZXJtaW5hdG9yIixzLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVy bih4KTsKLSNlbHNlCi0gICAgICAgIGlmICgoeCA9IGNta2V5KGVvbHRhYiwgbmVvbHRhYiwKLSAg ICAgICAgICAgICAgICAgICAgICAgImxvY2FsIHRleHQtZmlsZSBsaW5lIHRlcm1pbmF0b3IiLCJj cmxmIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0jZW5kaWYgLyogTkxD SEFSICovCi0gICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHopOwotICAgICAg ICBmZW9sID0gKENIQVIpIHg7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0KLSNpZm5k ZWYgTk9YRkVSCi0gICAgICBjYXNlIFhZRklMTjogICAgICAgICAgICAgICAgICAgICAgLyogTmFt ZXMgKi8KLSAgICAgICAgaWYgKCh4ID0gY21rZXkoZm50YWIsbmZudGFiLCJob3cgdG8gaGFuZGxl IGZpbGVuYW1lcyIsImNvbnZlcnRlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5n KSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkg PCAwKSByZXR1cm4oeik7Ci0gICAgICAgIGlmIChybXNmbGcpIHsKLSAgICAgICAgICAgIHNzdGF0 ZSA9IHNldGdlbignUycsICIzMDEiLCBja2l0b2EoMSAtIHgpLCAiIik7Ci0gICAgICAgICAgICBy ZXR1cm4oKGludCkgc3N0YXRlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB0YWJb cHJvdG9jb2xdLmZuY24gPSB4OyAgICAvKiBTZXQgc3RydWN0dXJlICovCi0gICAgICAgICAgICBm bmNudiA9IHg7ICAgICAgICAgICAgICAgICAgLyogU2V0IHZhcmlhYmxlICovCi0gICAgICAgICAg ICBmX3NhdmUgPSB4OyAgICAgICAgICAgICAgICAgLyogQW5kIHNldCAicGVybWFuZW50IiB2YXJp YWJsZSAqLwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgICAgfQotCi0g ICAgICBjYXNlIFhZRklMUjogICAgICAgICAgICAgICAgICAgICAgLyogUmVjb3JkIGxlbmd0aCAq LwotICAgICAgICBpZiAoKHkgPSBjbW51bSgiZmlsZSByZWNvcmQgbGVuZ3RoIiwKLSAgICAgICAg ICAgICAgICAgICAgICAgY2tpdG9hKERMUkVDTCksMTAsJnoseHhzdHJpbmcpKSA8IDApCi0gICAg ICAgICAgcmV0dXJuKHkpOwotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4 KTsKLSAgICAgICAgaWYgKHJtc2ZsZykgewotICAgICAgICAgICAgc3N0YXRlID0gc2V0Z2VuKCdT JywgIjMxMiIsIGNraXRvYSh6KSwgIiIpOwotICAgICAgICAgICAgcmV0dXJuKChpbnQpIHNzdGF0 ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmcmVjbCA9IHo7Ci0gICAgICAgICAg ICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICB9Ci0KLSNpZmRlZiBDT01NRU5UCi0gICAg ICBjYXNlIFhZRklMTzogICAgICAgICAgICAgICAgICAgICAgLyogT3JnYW5pemF0aW9uICovCi0g ICAgICAgIGlmICgoeCA9IGNta2V5KGZvcmd0YWIsbmZvcmcsImZpbGUgb3JnYW5pemF0aW9uIiwi c2VxdWVudGlhbCIsCi0gICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKQotICAg ICAgICAgIHJldHVybih4KTsKLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4o eSk7Ci0gICAgICAgIGlmIChybXNmbGcpIHsKLSAgICAgICAgICAgIHNzdGF0ZSA9IHNldGdlbign UycsICIzMTQiLCBja2l0b2EoeCksICIiKTsKLSAgICAgICAgICAgIHJldHVybigoaW50KSBzc3Rh dGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yZyA9IHg7Ci0gICAgICAgICAg ICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwot Ci0jaWZkZWYgQ09NTUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IG5lZWRlZCAq LwotICAgICAgY2FzZSBYWUZJTEY6ICAgICAgICAgICAgICAgICAgICAgIC8qIEZvcm1hdCAqLwot ICAgICAgICBpZiAoKHggPSBjbWtleShmcmVjdGFiLG5mcmVjLCJmaWxlIHJlY29yZCBmb3JtYXQi LCJzdHJlYW0iLAotICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZykpIDwgMCkKLSAgICAg ICAgICByZXR1cm4oeCk7Ci0gICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkp OwotICAgICAgICBpZiAocm1zZmxnKSB7Ci0gICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1Mn LCAiMzEzIiwgY2tpdG9hKHgpLCAiIik7Ci0gICAgICAgICAgICByZXR1cm4oKGludCkgc3N0YXRl KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZyZWNmbSA9IHg7Ci0gICAgICAgICAg ICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwot Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgY2FzZSBYWUZJTFA6ICAgICAgICAgICAgICAgICAgICAg IC8qIFByaW50ZXIgY2FycmlhZ2UgY29udHJvbCAqLwotICAgICAgICBpZiAoKHggPSBjbWtleShm Y2N0YWIsbmZjYywiZmlsZSBjYXJyaWFnZSBjb250cm9sIiwibmV3bGluZSIsCi0gICAgICAgICAg ICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAg ICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgIGlmIChybXNmbGcp IHsKLSAgICAgICAgICAgIHNzdGF0ZSA9IHNldGdlbignUycsICIzMTUiLCBja2l0b2EoeCksICIi KTsKLSAgICAgICAgICAgIHJldHVybigoaW50KSBzc3RhdGUpOwotICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgZmNjdHJsID0geDsKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7 Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0K LSAgICAgIGNhc2UgWFlGSUxUOiAgICAgICAgICAgICAgICAgICAgICAvKiBUeXBlICovCi0gICAg ICAgIGlmICgoeCA9IGNta2V5KHJtc2ZsZyA/IHJmdHRhYiAgOiBmdHRhYiwKLSAgICAgICAgICAg ICAgICAgICAgICAgcm1zZmxnID8gbnJmdHR5cCA6IG5mdHR5cCwKLSAgICAgICAgICAgICAgICAg ICAgICAgInR5cGUgb2YgZmlsZSB0cmFuc2ZlciIsInRleHQiLHh4c3RyaW5nKSkgPCAwKQotICAg ICAgICAgIHJldHVybih4KTsKLQotI2lmZGVmIFZNUwotICAgICAgICAvKiBBbGxvdyBWTVMgdXNl cnMgdG8gY2hvb3NlIHJlY29yZCBmb3JtYXQgZm9yIGJpbmFyeSBmaWxlcyAqLwotICAgICAgICBp ZiAoKHggPT0gWFlGVF9CKSAmJiAocm1zZmxnID09IDApKSB7Ci0gICAgICAgICAgICBpZiAoKHgg PSBjbWtleShmYnRhYixuZmJ0eXAsIlZNUyByZWNvcmQgZm9ybWF0IiwiZml4ZWQiLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVy bih4KTsKLSAgICAgICAgfQotI2VuZGlmIC8qIFZNUyAqLwotICAgICAgICBpZiAoKHkgPSBjbWNm bSgpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgYmluYXJ5ID0geDsKLSAgICAgICAgYl9zYXZl ID0geDsKLSNpZmRlZiBNQUMKLSAgICAgICAgKHZvaWQpIG1hY19zZXRmaWxkZmxnKGJpbmFyeSk7 Ci0jZW5kaWYgLyogTUFDICovCi0jaWZuZGVmIE5PWEZFUgotICAgICAgICBpZiAocm1zZmxnKSB7 Ci0gICAgICAgICAgICAvKiBBbGxvdyBmb3IgTEFCRUxFRCBpbiBWTVMgJiBPUy8yICovCi0gICAg ICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1MnLCAiMzAwIiwgY2tpdG9hKHgpLCAiIik7Ci0gICAg ICAgICAgICByZXR1cm4oKGludCkgc3N0YXRlKTsKLSAgICAgICAgfSBlbHNlIHsKLSNlbmRpZiAv KiBOT1hGRVIgKi8KLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0jaWZuZGVmIE5P WEZFUgotICAgICAgICB9Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYgTk9YRkVSCi0g ICAgICBjYXNlIFhZRklMWDogICAgICAgICAgICAgICAgICAgICAgLyogQ29sbGlzaW9uIEFjdGlv biAqLwotICAgICAgICBpZiAoKHggPSBjbWtleShjb2x4dGFiLG5jb2x4LCJGaWxlbmFtZSBjb2xs aXNpb24gYWN0aW9uIiwiYmFja3VwIiwKLSAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcp KSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8 IDApIHJldHVybih5KTsKLSNpZmRlZiBDS19MT0dJTgotICAgICAgICBpZiAoaXNndWVzdCkgewot ICAgICAgICAgICAgLyogRG9uJ3QgbGV0IGd1ZXN0cyBjaGFuZ2UgZXhpc3RpbmcgZmlsZXMgKi8K LSAgICAgICAgICAgIHByaW50ZigiP1RoaXMgY29tbWFuZCBub3QgdmFsaWQgZm9yIGd1ZXN0c1xu Iik7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfTE9H SU4gKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIC8qIE5vdCBhcHByb3ByaWF0ZSAtIERJU0FC TEUgREVMRVRFIG9ubHkgcmVmZXJzIHRvIHNlcnZlciAqLwotICAgICAgICBpZiAoKHggPT0gWFlG WF9YIHx8IHggPT0gWFlGWF9CIHx8IHggPT0gWFlGWF9VIHx8IHggPT0gWFlGWF9BKSAmJgotICAg ICAgICAgICAgKCFFTkFCTEVEKGVuX2RlbCkpKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9Tb3Jy eSwgZmlsZSBkZWxldGlvbiBpcyBkaXNhYmxlZC5cbiIpOwotICAgICAgICAgICAgcmV0dXJuKC05 KTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgZm5jYWN0ID0geDsK LSAgICAgICAgcHRhYltwcm90b2NvbF0uZm5jYSA9IHg7Ci0gICAgICAgIGlmIChybXNmbGcpIHsK LSAgICAgICAgICAgIHNzdGF0ZSA9IHNldGdlbignUycsICIzMDIiLCBja2l0b2EoZm5jYWN0KSwg IiIpOwotICAgICAgICAgICAgcmV0dXJuKChpbnQpIHNzdGF0ZSk7Ci0gICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICBpZiAoZm5jYWN0ID09IFhZRlhfUikgY2t3YXJuID0gMTsgLyogRklMRSBX QVJOSU5HIGltcGxpY2F0aW9ucyAqLwotICAgICAgICAgICAgaWYgKGZuY2FjdCA9PSBYWUZYX1gp IGNrd2FybiA9IDA7IC8qIC4uLiAqLwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsK LSAgICAgICAgfQotCi0gICAgICBjYXNlIFhZRklMVzogICAgICAgICAgICAgICAgICAgICAgLyog V2FybmluZy9Xcml0ZS1Qcm90ZWN0ICovCi0gICAgICAgIGlmICgoeCA9IHNldG9uKCZja3dhcm4p KSA8IDApIHJldHVybih4KTsKLSAgICAgICAgaWYgKGNrd2FybikKLSAgICAgICAgICBmbmNhY3Qg PSBYWUZYX1I7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBmbmNhY3QgPSBYWUZYX1g7Ci0gICAg ICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0KLSNpZmRlZiBDS19MQUJFTEVECi0gICAgICBjYXNl IFhZRklMTDogICAgICAgICAgICAgICAgICAgICAgLyogTEFCRUxFRCBGSUxFIHBhcmFtZXRlcnMg Ki8KLSAgICAgICAgaWYgKCh4ID0gY21rZXkobGJsdGFiLG5sYmxwLCJMYWJlbGVkIGZpbGUgZmVh dHVyZSIsIiIsCi0gICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKQotICAgICAg ICAgIHJldHVybih4KTsKLSAgICAgICAgaWYgKChzdWNjZXNzID0gc2V0b24oJnkpKSA8IDApCi0g ICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOwotICAgICAgICBpZiAoeSkgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFNldCBvciByZXNldCB0aGUgc2VsZWN0ZWQgYml0ICovCi0gICAgICAgICAg bGZfb3B0cyB8PSB4OyAgICAgICAgICAgICAgICAgLyogaW4gdGhlIG9wdGlvbnMgYml0bWFzay4g Ki8KLSAgICAgICAgZWxzZQotICAgICAgICAgIGxmX29wdHMgJj0gfng7Ci0gICAgICAgIHJldHVy bihzdWNjZXNzKTsKLSNlbmRpZiAvKiBDS19MQUJFTEVEICovCi0KLSAgICAgIGNhc2UgWFlGSUxJ OiB7ICAgICAgICAgICAgICAgICAgICAvKiBJTkNPTVBMRVRFICovCi0gICAgICAgICAgZXh0ZXJu IHN0cnVjdCBrZXl0YWIgaWZkYXRhYltdOwotICAgICAgICAgIGV4dGVybiBpbnQga2VlcDsKLSAg ICAgICAgICBpZiAoKHkgPSBjbWtleShpZmRhdGFiLDMsIiIsImF1dG8iLHh4c3RyaW5nKSkgPCAw KSByZXR1cm4oeSk7Ci0gICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7 Ci0gICAgICAgICAgaWYgKHJtc2ZsZykgewotICAgICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4o J1MnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMxMCIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB5ID09IDAgPyAiMCIgOiAoeSA9PSAxID8gIjEiIDogIjIiKSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOwotICAgICAgICAgICAgICByZXR1cm4oKGludCkgc3N0YXRlKTsKLSAgICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgICBrZWVwID0geTsKLSAgICAgICAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsKLSAgICAgICAgICB9Ci0gICAgICB9Ci0KLSNpZmRlZiBDS19UTVBESVIKLSAg ICAgIGNhc2UgWFlGSUxHOiB7ICAgICAgICAgICAgICAgICAgICAvKiBEb3dubG9hZCBkaXJlY3Rv cnkgKi8KLSAgICAgICAgICBpbnQgeDsKLSAgICAgICAgICBjaGFyICpzOwotI2lmZGVmIFpGTlFG UAotICAgICAgICAgIHN0cnVjdCB6Zm5mcCAqIGZucDsKLSNlbmRpZiAvKiBaRk5RRlAgKi8KLSNp ZmRlZiBNQUMKLSAgICAgICAgICBjaGFyIHRlbXBbMzRdOwotI2VuZGlmIC8qIE1BQyAqLwotCi0j aWZkZWYgR0VNRE9TCi0gICAgICAgICAgaWYgKCh4ID0gY21kaXIoIk5hbWUgb2YgbG9jYWwgZGly ZWN0b3J5LCBvciBjYXJyaWFnZSByZXR1cm4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICIi LCZzLAotICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpKSA8IDAgKSB7Ci0gICAgICAgICAg ICAgIGlmICh4ICE9IC0zKQotICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICB9 Ci0jZWxzZQotI2lmZGVmIE9TMgotICAgICAgICAgIGlmICgoeCA9IGNtZGlyKCJOYW1lIG9mIFBD IGRpc2sgYW5kL29yIGRpcmVjdG9yeSxcblwKLSAgICAgICBvciBwcmVzcyB0aGUgRW50ZXIga2V5 IHRvIHVzZSBjdXJyZW50IGRpcmVjdG9yeSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIiIs JnMseHhzdHJpbmcpKSA8IDAgKSB7Ci0gICAgICAgICAgICAgIGlmICh4ICE9IC0zKQotICAgICAg ICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICB9Ci0jZWxzZQotI2lmZGVmIE1BQwotICAg ICAgICAgIHggPSBja3N0cm5jcHkodGVtcCx6aG9tZSgpLDMyKTsKLSAgICAgICAgICBpZiAoeCA+ IDApIGlmICh0ZW1wW3gtMV0gIT0gJzonKSB7IHRlbXBbeF0gPSAnOic7IHRlbXBbeCsxXSA9IE5V TDsgfQotICAgICAgICAgIGlmICgoeCA9IGNtdHh0KCJOYW1lIG9mIE1hY2ludG9zaCB2b2x1bWUg YW5kL29yIGZvbGRlcixcblwKLSBvciBwcmVzcyB0aGUgUmV0dXJuIGtleSBmb3IgdGhlIGRlc2t0 b3Agb24gdGhlIGJvb3QgZGlzayIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCwmcywg eHhzdHJpbmcpKSA8IDAgKQotICAgICAgICAgICAgcmV0dXJuKHgpOwotI2Vsc2UKLSAgICAgICAg ICBpZiAoKHggPSBjbWRpcigiTmFtZSBvZiBsb2NhbCBkaXJlY3RvcnksIG9yIGNhcnJpYWdlIHJl dHVybiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIiIsICZzLCB4eHN0cmluZykpIDwgMCAp IHsKLSAgICAgICAgICAgICAgaWYgKHggIT0gLTMpCi0gICAgICAgICAgICAgICAgcmV0dXJuKHgp OwotICAgICAgICAgIH0KLSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRp ZiAvKiBHRU1ET1MgKi8KLSAgICAgICAgICBkZWJ1ZyhGMTEwLCJkb3dubG9hZCBkaXIiLHMsMCk7 Ci0KLSNpZm5kZWYgTUFDCi0gICAgICAgICAgaWYgKHggPT0gMikgewotICAgICAgICAgICAgICBw cmludGYoIj9XaWxkY2FyZHMgbm90IGFsbG93ZWQgaW4gZGlyZWN0b3J5IG5hbWVcbiIpOwotICAg ICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgIH0KLSNlbmRpZiAvKiBNQUMgKi8KLQot I2lmZGVmIFpGTlFGUAotICAgICAgICAgIGlmICgoZm5wID0gemZucWZwKHMsVE1QQlVGU0laIC0g MSx0bXBidWYpKSkgewotICAgICAgICAgICAgICBpZiAoZm5wLT5mcGF0aCkKLSAgICAgICAgICAg ICAgICBpZiAoKGludCkgc3RybGVuKGZucC0+ZnBhdGgpID4gMCkKLSAgICAgICAgICAgICAgICAg IHMgPSBmbnAtPmZwYXRoOwotICAgICAgICAgIH0KLSAgICAgICAgICBkZWJ1ZyhGMTEwLCJkb3du bG9hZCB6Zm5xZnAiLHMsMCk7Ci0jZW5kaWYgLyogWkZOUUZQICovCi0KLSAgICAgICAgICBja3N0 cm5jcHkobGluZSxzLExJTkJVRlNJWik7ICAvKiBNYWtlIGEgc2FmZSBjb3B5ICovCi0jaWZuZGVm IE1BQwotICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgICAgICAgIC8qIEdldCBjb25m aXJtYXRpb24gKi8KLSAgICAgICAgICAgIHJldHVybih4KTsKLSNlbmRpZiAvKiBNQUMgKi8KLQot I2lmZGVmIENLX0xPR0lOCi0gICAgICAgIGlmIChpc2d1ZXN0KSB7Ci0gICAgICAgICAgICAvKiBE b24ndCBsZXQgZ3Vlc3RzIGNoYW5nZSBleGlzdGluZyBmaWxlcyAqLwotICAgICAgICAgICAgcHJp bnRmKCI/VGhpcyBjb21tYW5kIG5vdCB2YWxpZCBmb3IgZ3Vlc3RzXG4iKTsKLSAgICAgICAgICAg IHJldHVybigtOSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotICAgICAgICAg IHggPSBzdHJsZW4ocyk7Ci0KLSAgICAgICAgICBpZiAoeCkgewotI2lmZGVmIGRhdGFnZW5lcmFs CQkJLyogQU9TL1ZTICovCi0gICAgICAgICAgICAgIGlmIChzW3gtMV0gPT0gJzonKSAgICAgICAg LyogaG9tZGlyIGVuZHMgaW4gY29sb24sICovCi0gICAgICAgICAgICAgICAgc1t4LTFdID0gTlVM OyAgICAgICAgICAgLyogYW5kICJkaXIiIGRvZXNuJ3QgbGlrZSB0aGF0Li4uICovCi0jZWxzZQot I2lmZGVmIE9TMk9SVU5JWAkJCS8qIFVuaXggb3IgSy05NS4uLiAqLwotCSAgICAgIGlmICgoeCA8 IChMSU5CVUZTSVogLSAyKSkgJiYgLyogQWRkIHRyYWlsaW5nIGRpcnNlcCAqLwotCQkgIChzW3gt MV0gIT0gJy8nKSkgewkvKiBpZiBub25lIHByZXNlbnQuICAqLwotCQkgIHNbeF0gPSAnLyc7CQkv KiBOb3RlIHRoYXQgV2luZG93cyBwYXRoIGhhcyAqLwotCQkgIHNbeCsxXSA9IE5VTDsJCS8qIGJl ZW4gY2Fub25pY2FsaXplZCB0byBmb3J3YXJkICovCi0JICAgICAgfSAgICAgICAgICAgICAgICAJ CS8qIHNsYXNoZXMgYXQgdGhpcyBwb2ludC4gKi8KLSNlbmRpZiAvKiBPUzJPUlVOSVggKi8KLSNl bmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotICAgICAgICAgICAgICBtYWtlc3RyKCZkbGRpcixzKTsK LSAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1ha2VzdHIoJmRsZGlyLE5VTEwpOyAgICAg ICAvKiBkbGRpciBpcyBOVUxMIHdoZW4gbm90IGFzc2lnbmVkICovCi0KLSAgICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IDEpOwotICAgICAgfQotI2VuZGlmIC8qIENLX1RNUERJUiAqLwotICAgICAg Y2FzZSBYWUZJTFk6Ci0gICAgICAgIHJldHVybihzZXRkZXN0KCkpOwotI2VuZGlmIC8qIE5PWEZF UiAqLwotCi0jaWZkZWYgQ0tfQ1RSTFoKLSAgICAgIGNhc2UgWFlGSUxWOiB7ICAgICAgICAgICAg ICAgICAgICAvKiBFT0YgKi8KLSAgICAgICAgICBleHRlcm4gaW50IGVvZm1ldGhvZDsKLSAgICAg ICAgICBpZiAoKHggPSBjbWtleShlb2Z0YWIsMywiZW5kLW9mLWZpbGUgZGV0ZWN0aW9uIG1ldGhv ZCIsIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDApCi0gICAgICAg ICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQotICAgICAg ICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgIGVvZm1ldGhvZCA9IHg7Ci0gICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgIH0KLSNlbmRpZiAvKiBDS19DVFJMWiAqLwotCi0jaWZu ZGVmIE5PWEZFUgotI2lmZGVmIFVOSVgKLSAgICAgIGNhc2UgWFlGSUxIOiB7ICAgICAgICAgICAg ICAgICAgICAvKiBPVVRQVVQgKi8KLSAgICAgICAgICBleHRlcm4gaW50IHpvZmJ1ZmZlciwgem9i dWZzaXplLCB6b2ZibG9jazsKLSNpZmRlZiBEWU5BTUlDCi0gICAgICAgICAgZXh0ZXJuIGNoYXIg KiB6b3V0YnVmZmVyOwotI2VuZGlmIC8qIERZTkFNSUMgKi8KLQotICAgICAgICAgIGlmICgoeCA9 IGNta2V5KHpvZnRhYixuem9mdGFiLCJvdXRwdXQgZmlsZSB3cml0aW5nIG1ldGhvZCIsIiIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICByZXR1 cm4oeCk7Ci0gICAgICAgICAgaWYgKHggPT0gWk9GX0JVRiB8fCB4ID09IFpPRl9OQlVGKSB7Ci0g ICAgICAgICAgICAgIGlmICgoeSA9IGNtbnVtKCJvdXRwdXQgYnVmZmVyIHNpemUiLCIzMjc2OCIs MTAsJnoseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAg ICAgICAgICBpZiAoeiA8IDEpIHsKLSAgICAgICAgICAgICAgICAgIHByaW50ZigiP0JhZCBzaXpl IC0gJWRcbiIsIHopOwotICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAg ICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVy bih5KTsKLSAgICAgICAgICBzd2l0Y2ggKHgpIHsKLSAgICAgICAgICAgIGNhc2UgWk9GX0JVRjoK LSAgICAgICAgICAgIGNhc2UgWk9GX05CVUY6Ci0gICAgICAgICAgICAgIHpvZmJ1ZmZlciA9ICh4 ID09IFpPRl9CVUYpOwotICAgICAgICAgICAgICB6b2J1ZnNpemUgPSB6OwotICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgWk9GX0JMSzoKLSAgICAgICAgICAgIGNhc2UgWk9G X05CTEs6Ci0gICAgICAgICAgICAgIHpvZmJsb2NrID0gKHggPT0gWk9GX0JMSyk7Ci0gICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSNpZmRlZiBEWU5BTUlDCi0gICAgICAgICAgaWYg KHpvdXRidWZmZXIpIGZyZWUoem91dGJ1ZmZlcik7Ci0gICAgICAgICAgaWYgKCEoem91dGJ1ZmZl ciA9IChjaGFyICopbWFsbG9jKHopKSkgewotICAgICAgICAgICAgICBwcmludGYoIk1FTU9SWSBB TExPQ0FUSU9OIEVSUk9SIC0gRkFUQUxcbiIpOwotICAgICAgICAgICAgICBkb2V4aXQoQkFEX0VY SVQsLTEpOwotICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgem9idWZzaXplID0gejsKLSNl bHNlCi0gICAgICAgICAgaWYgKHogPD0gT0JVRlNJWkUpIHsKLSAgICAgICAgICAgICAgem9idWZz aXplID0gejsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICBwcmludGYoIj9Tb3Jy eSwgJWQgaXMgdG9vIGJpZyAtICVkIGlzIHRoZSBtYXhpbXVtXG4iLHosT0JVRlNJWkUpOwotICAg ICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgIH0KLSNlbmRpZiAvKiBEWU5BTUlDICov Ci0gICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgIH0KLSNlbmRpZiAvKiBVTklY ICovCi0KLSNpZmRlZiBQQVRURVJOUwotICAgICAgY2FzZSBYWUZJQlA6ICAgICAgICAgICAgICAg ICAgICAgIC8qIEJJTkFSWS1QQVRURVJOICovCi0gICAgICBjYXNlIFhZRklUUDogeyAgICAgICAg ICAgICAgICAgICAgLyogVEVYVC1QQVRURVJOICovCi0gICAgICAgICAgY2hhciAqIHRtcFtGVFBB VFRFUk5TXTsKLSAgICAgICAgICBpbnQgaSwgbiA9IDA7Ci0gICAgICAgICAgd2hpbGUgKG4gPCBG VFBBVFRFUk5TKSB7Ci0gICAgICAgICAgICAgIHRtcFtuXSA9IE5VTEw7Ci0gICAgICAgICAgICAg IGlmICgoeCA9IGNtZmxkKCJQYXR0ZXJuIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKLSAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVop OwotICAgICAgICAgICAgICBzID0gYnJzdHJpcChsaW5lKTsKLSAgICAgICAgICAgICAgbWFrZXN0 cigmKHRtcFtuKytdKSxzKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHggPT0gLTMpIHgg PSBjbWNmbSgpOwotICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gbjsgaSsrKSB7Ci0gICAgICAg ICAgICAgIGlmICh4ID4gLTEpIHsKLSAgICAgICAgICAgICAgICAgIGlmICh5ID09IFhZRklCUCkK LSAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmKGJpbnBhdHRlcm5zW2ldKSx0bXBbaV0pOwot ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCYodHh0 cGF0dGVybnNbaV0pLHRtcFtpXSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZnJl ZSh0bXBbaV0pOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoeSA9PSBYWUZJQlApICAgICAg ICAgICAgICAvKiBOdWxsLXRlcm1pbmF0ZSB0aGUgbGlzdCAqLwotICAgICAgICAgICAgbWFrZXN0 cigmKGJpbnBhdHRlcm5zW2ldKSxOVUxMKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBt YWtlc3RyKCYodHh0cGF0dGVybnNbaV0pLE5VTEwpOwotICAgICAgICAgIHJldHVybih4KTsKLSAg ICAgIH0KLQotICAgICAgY2FzZSBYWUZJUEE6ICAgICAgICAgICAgICAgICAgICAgIC8qIFBBVFRF Uk5TICovCi0gICAgICAgIGlmICgoeCA9IHNldG9uYXV0KCZwYXR0ZXJucykpIDwgMCkKLSAgICAg ICAgICByZXR1cm4oeCk7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0jZW5kaWYgLyog UEFUVEVSTlMgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmZGVmIFVOSUNPREUKLSAgICAg IGNhc2UgWFlGSUxVOiB7ICAgICAgICAgICAgICAgICAgICAvKiBVQ1MgKi8KLSAgICAgICAgICBl eHRlcm4gaW50IHVjc29yZGVyLCB1Y3Nib20sIGJ5dGVvcmRlcjsKLSAgICAgICAgICBpZiAoKHgg PSBjbWtleSh1Y3N0YWIsbnVjc3RhYiwiIiwiIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAg IHJldHVybih4KTsKLSAgICAgICAgICBzd2l0Y2ggKHgpIHsKLSAgICAgICAgICAgIGNhc2UgVUNT X0JZVDoKLSAgICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkoYm90YWIsbmJvdGFiLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiQnl0ZSBvcmRlciIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJ5dGVvcmRlciA/ICJsaXR0bGUtZW5kaWFuIiA6ICJiaWctZW5kaWFuIiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgICkgPCAwKQotICAgICAgICAgICAgICAgIHJl dHVybih5KTsKLSAgICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAg ICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgICAgdWNzb3JkZXIgPSB5OwotICAgICAgICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICAgICAgY2FzZSBVQ1NfQk9NOgotICAg ICAgICAgICAgICBpZiAoKHkgPSBjbWtleShvbm9mZiwyLCIiLCJvbiIseHhzdHJpbmcpKSA8IDAp Ci0gICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICBpZiAoKHggPSBjbWNm bSgpKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgICB1Y3Ni b20gPSB5OwotICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICAgICAg ZGVmYXVsdDoKLSAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgICB9Ci0gICAgICB9 Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotCi0jaWZuZGVmIGRhdGFnZW5lcmFsCi0gICAgICBjYXNl IFhZRl9JTlNQOiB7ICAgICAgICAgICAgICAgICAgLyogU0NBTiAoSU5TUEVDVElPTikgKi8KLSAg ICAgICAgICBleHRlcm4gaW50IGZpbGVwZWVrLCBuc2NhbmZpbGU7Ci0gICAgICAgICAgaWYgKCh4 ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgcmV0 dXJuKHgpOwotICAgICAgICAgIGlmICh5KSB7Ci0gICAgICAgICAgICAgIGlmICgoeSA9IGNtbnVt KCJIb3cgbXVjaCB0byBzY2FuIixja2l0b2EoU0NBTkZJTEVCVUYpLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxMCwmeix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1 cm4oeSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKLSAg ICAgICAgICAgIHJldHVybih5KTsKLSNpZmRlZiBWTVMKLSAgICAgICAgICBmaWxlcGVlayA9IDA7 Ci0gICAgICAgICAgbnNjYW5maWxlID0gMDsKLSAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDAp OwotI2Vsc2UKLSAgICAgICAgICBmaWxlcGVlayA9IHg7Ci0gICAgICAgICAgbnNjYW5maWxlID0g ejsKLSAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotI2VuZGlmIC8qIFZNUyAqLwotICAg ICAgfQotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0KLSAgICAgIGNhc2UgWFlGX0RGTFQ6Ci0g ICAgICAgIHkgPSAwOwotI2lmbmRlZiBOT0NTRVRTCi0gICAgICAgIGlmICgoeSA9IGNta2V5KGZk Zmx0YWIsbmZkZmx0LCIiLCIiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih5KTsK LSAgICAgICAgaWYgKHkgPT0gNyB8fCB5ID09IDgpIHsKLSAgICAgICAgICAgIGlmICh5ID09IDcp Ci0gICAgICAgICAgICAgIHMgPSBmY3NpbmZvW2Rjc2V0N10ua2V5d29yZDsKLSAgICAgICAgICAg IGVsc2UKLSAgICAgICAgICAgICAgcyA9IGZjc2luZm9bZGNzZXQ4XS5rZXl3b3JkOwotICAgICAg ICAgICAgaWYgKCh4ID0gY21rZXkoZmNzdGFiLG5maWxjLCJjaGFyYWN0ZXItc2V0IixzLHh4c3Ry aW5nKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIH0KLSAgICAgICAg Y2tzdHJuY3B5KGxpbmUsZmNzaW5mb1t4XS5rZXl3b3JkLExJTkJVRlNJWik7Ci0gICAgICAgIHMg PSBsaW5lOwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkg PCAwKQotICAgICAgICAgIHJldHVybih6KTsKLSAgICAgICAgc3dpdGNoICh5KSB7Ci0jaWZuZGVm IE5PQ1NFVFMKLSAgICAgICAgICBjYXNlIDc6Ci0gICAgICAgICAgICBpZiAoZmNzaW5mb1t4XS5z aXplICE9IDEyOCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiJXMgLSBOb3QgYSA3LWJpdCBz ZXRcbiIscyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIGRjc2V0NyA9IHg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNl IDg6Ci0gICAgICAgICAgICBpZiAoZmNzaW5mb1t4XS5zaXplICE9IDI1NikgewotICAgICAgICAg ICAgICAgIHByaW50ZigiJXMgLSBOb3QgYW4gOC1iaXQgc2V0XG4iLHMpOwotICAgICAgICAgICAg ICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkY3NldDggPSB4Owot ICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotICAgICAgICAgIGRlZmF1 bHQ6Ci0gICAgICAgICAgICByZXR1cm4oLTIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybihz dWNjZXNzID0gMSk7Ci0KLSNpZm5kZWYgTk9YRkVSCi0gICAgICBjYXNlIDk5OTc6ICAgICAgICAg ICAgICAgICAgICAgICAgLyogRkFTVExPT0tVUFMgKi8KLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3Mg PSBzZXRvbigmc3RhdGhhY2spKTsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmZGVmIFVOSVgK LSNpZmRlZiBEWU5BTUlDCi0gICAgICBjYXNlIFhZRl9MU0laOiB7ICAgICAgICAgICAgICAgICAg LyogTElTVFNJWkUgKi8KLSAgICAgICAgICBpbnQgeno7Ci0gICAgICAgICAgeSA9IGNtbnVtKCJN YXhpbXVtIG51bWJlciBvZiBmaWxlbmFtZXMiLCIiLDEwLCZ4LHh4c3RyaW5nKTsKLSAgICAgICAg ICBpZiAoKHggPSBzZXRudW0oJnp6LHgseSwtMSkpIDwgMCkKLSAgICAgICAgICAgIHJldHVybih4 KTsKLSAgICAgICAgICBpZiAoenNldGZpbCh6eiwzKSA8IDApIHsKLSAgICAgICAgICAgICAgcHJp bnRmKCI/TWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIik7Ci0gICAgICAgICAgICAgIHJldHVy bigtOSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAg ICB9Ci0gICAgICBjYXNlIFhZRl9TU1BBOiB7ICAgICAgICAgICAgICAgICAgLyogU1RSSU5HU1BB Q0UgKi8KLSAgICAgICAgICBpbnQgeno7Ci0gICAgICAgICAgeSA9IGNtbnVtKCJOdW1iZXIgb2Yg Y2hhcmFjdGVycyBmb3IgZmlsZW5hbWUgbGlzdCIsCi0gICAgICAgICAgICAgICAgICAgICIiLDEw LCZ4LHh4c3RyaW5nKTsKLSAgICAgICAgICBpZiAoKHggPSBzZXRudW0oJnp6LHgseSwtMSkpIDwg MCkKLSAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICBpZiAoenNldGZpbCh6eiwxKSA8 IDApIHsKLSAgICAgICAgICAgICAgcHJpbnRmKCI/TWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxu Iik7Ci0gICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJl dHVybihzdWNjZXNzID0gMSk7Ci0gICAgICB9Ci0KLSNlbmRpZiAvKiBEWU5BTUlDICovCi0jZW5k aWYgLyogVU5JWCAqLwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBwcmludGYoIj91bmV4cGVj dGVkIGZpbGUgcGFyYW1ldGVyXG4iKTsKLSAgICAgICAgcmV0dXJuKC0yKTsKLSAgICB9Ci19Ci0K LSNpZmRlZiBVTklYCi0jaWZuZGVmIE5PUFVURU5WCi0jaWZkZWYgQklHQlVGT0sKLSNkZWZpbmUg TlBVVEVOVlMgNDA5NgotI2Vsc2UKLSNkZWZpbmUgTlBVVEVOVlMgMTI4Ci0jZW5kaWYJLyogQklH QlVGT0sgKi8KLS8qIGVudmlyb25tZW50IHZhcmlhYmxlcyBtdXN0IGJlIHN0YXRpYywgbm90IGF1 dG9tYXRpYyAqLwotCi1zdGF0aWMgY2hhciAqIHB1dGVudnNbTlBVVEVOVlNdOwkvKiBBcnJheSBv ZiBlbnZpcm9ubWVudCB2YXIgc3RyaW5ncyAqLwotc3RhdGljIGludCBucHV0ZW52cyA9IC0xOwkJ LyogUG9pbnRlciBpbnRvIGFycmF5ICovCi0vKgotICBJZiBhbnlvbmUgZXZlciBub3RpY2VzIHRo ZSBsaW1pdGF0aW9uIG9uIHRoZSBudW1iZXIgb2YgUFVURU5WcywgdGhlIGxpc3QKLSAgY2FuIGJl IG1hZGUgZHluYW1pYywgd2UgY2FuIHJlY3ljbGUgZW50cmllcyB3aXRoIHRoZSBzYW1lIG5hbWUs IGV0Yy4KLSovCi1pbnQKLWRvcHV0ZW52KHMxLCBzMikgY2hhciAqIHMxOyBjaGFyICogczI7IHsK LSAgICBjaGFyICogcywgKiB0ID0gdG1wYnVmOwkJLyogQ3JlYXRlIG9yIGFsdGVyIGVudmlyb25t ZW50IHZhciAqLwotCi0gICAgaWYgKG5wdXRlbnZzID09IC0xKSB7CQkvKiBUYWJsZSBub3QgdXNl ZCB5ZXQgKi8KLQlpbnQgaTsJCQkJLyogSW5pdGlhbGl6ZSB0aGUgcG9pbnRlcnMgKi8KLQlmb3Ig KGkgPSAwOyBpIDwgTlBVVEVOVlM7IGkrKykKLQkgIHB1dGVudnNbaV0gPSBOVUxMOwotCW5wdXRl bnZzID0gMDsKLSAgICB9Ci0gICAgaWYgKCFzMSkgcmV0dXJuKDEpOwkJCS8qIE5vdGhpbmcgdG8g ZG8gKi8KLSAgICBpZiAoISpzMSkgcmV0dXJuKDEpOwkJLyogZGl0dG8gKi8KLQotICAgIGlmIChj a2luZGV4KCI9IixzMSwwLDAsMCkpIHsJLyogRG9lcyB0aGUgbmFtZSBjb250YWluIGFuICc9Jz8g Ki8KLQlwcmludGYoCQkJCS8qIHB1dGVudigpIGRvZXMgbm90IGFsbG93IHRoaXMuICovCi0JIC8q IFRoaXMgYWxzbyBjYXRjaGVzIHRoZSAncHV0ZW52IG5hbWU9dmFsdWUnIGNhc2UgKi8KLSAgICAg ICAgICI/UFVURU5WIC0gRXF1YWwgc2lnbiBpbiB2YXJpYWJsZSBuYW1lIC0gJ2hlbHAgcHV0ZW52 JyBmb3IgaW5mby5cbiIpOwotICAgICAgICByZXR1cm4oLTkpOwotICAgIH0KLSAgICBucHV0ZW52 cysrOwkJCQkvKiBQb2ludCB0byBuZXh0IGZyZWUgc3RyaW5nICovCi0KLSAgICBkZWJ1ZyhGMTEx LCJkb3B1dGVudiBzMSIsczEsbnB1dGVudnMpOwotICAgIGRlYnVnKEYxMTEsImRvcHV0ZW52IHMy IixzMixucHV0ZW52cyk7Ci0KLSAgICBpZiAobnB1dGVudnMgPiBOUFVURU5WUyAtIDEpIHsJLyog Tm90aWNlIHRoZSBlbmQgKi8KLQlwcmludGYoIj9QVVRFTlYgLSBzdGF0aWMgYnVmZmVyIHNwYWNl IGV4aGF1c3RlZFxuIik7Ci0JcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgLyogUXVvdGVzIGFyZSBu b3QgbmVlZGVkIGJ1dCB3ZSBhbGxvdyB0aGVtIGZvciBmYW1pbGlhcml0eSAqLwotICAgIC8qIGJ1 dCB0aGVuIHdlIHN0cmlwIHRoZW0sIHNvIHN5bnRheCBpcyBzYW1lIGFzIGZvciBVbml4IHNoZWxs ICovCi0KLSAgICBpZiAoczIpIHsKLQlzMiA9IGJyc3RyaXAoczIpOwotICAgIH0gZWxzZSB7Ci0J czIgPSAoY2hhciAqKSIiOwotICAgIH0KLSAgICBja21ha21zZyh0LFRNUEJVRlNJWixzMSwiPSIs czIsTlVMTCk7Ci0gICAgZGVidWcoRjExMSwiZG9wdXRlbnYiLHQsbnB1dGVudnMpOwotICAgIChW T0lEKSBtYWtlc3RyKCYocHV0ZW52c1tucHV0ZW52c10pLHQpOyAvKiBNYWtlIGEgc2FmZSBwZXJt YW5hbmVudCBjb3B5ICovCi0gICAgaWYgKCFwdXRlbnZzW25wdXRlbnZzXSkgewotCXByaW50Zigi P1BVVEVOViAtIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIpOwotCXJldHVybigtOSk7Ci0g ICAgfQotICAgIGlmIChwdXRlbnYocHV0ZW52c1tucHV0ZW52c10pKSB7Ci0JcHJpbnRmKCI/UFVU RU5WIC0gJXNcbiIsY2tfZXJyc3RyKCkpOwotCXJldHVybigtOSk7Ci0gICAgfSBlbHNlIHJldHVy bihzdWNjZXNzID0gMSk7Ci19Ci0jZW5kaWYJLyogTk9QVVRFTlYgKi8KLSNlbmRpZgkvKiBVTklY ICovCi0KLWludAotc2V0dHJtdHlwKCkgewotI2lmZGVmIE9TMgotI2lmZGVmIFROQ09ERQotICAg IGV4dGVybiBpbnQgdHRudW07ICAgICAgICAgICAgICAgICAgICAvKiBMYXN0IFRlbG5ldCBUZXJt aW5hbCBUeXBlIHNlbnQgKi8KLSAgICBleHRlcm4gaW50IHR0bnVtZW5kOyAgICAgICAgICAgICAg ICAgLyogSGFzIGVuZCBvZiBsaXN0IGJlZW4gZm91bmQgKi8KLSNlbmRpZiAvKiBUTkNPREUgKi8K LSAgICBpZiAoKHggPSBjbWtleSh0dHlwdGFiLG50dHlwLCIiLCJ2dDIyMCIseHhzdHJpbmcpKSA8 IDApCi0gICAgICByZXR1cm4oeCk7Ci0gICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQotICAgICAg cmV0dXJuKHkpOwotICAgIHNldHRlcm10eXBlKHgsMSk7Ci0jaWZkZWYgVE5DT0RFCi0gICAgLyog U28gd2Ugc2VuZCB0aGUgY29ycmVjdCB0ZXJtaW5hbCBuYW1lIHRvIHRoZSBob3N0IGlmIGl0IGFz a3MgZm9yIGl0ICovCi0gICAgdHRudW0gPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyog TGFzdCBUZWxuZXQgVGVybWluYWwgVHlwZSBzZW50ICovCi0gICAgdHRudW1lbmQgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgLyogZW5kIG9mIGxpc3Qgbm90IGZvdW5kICovCi0jZW5kaWYgLyog VE5DT0RFICovCi0gICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSNlbHNlICAvKiBOb3QgT1MyICov Ci0jaWZkZWYgVU5JWAotICAgIGV4dGVybiBpbnQgZnhkX2luaXRlZDsKLSAgICB4ID0gY210eHQo IlRlcm1pbmFsIHR5cGUgbmFtZSwgY2FzZSBzZW5zaXRpdmUiLCIiLCZzLE5VTEwpOwotI2lmZGVm IE5PUFVURU5WCi0gICAgc3VjY2VzcyA9IDE7Ci0jZWxzZQotICAgIHN1Y2Nlc3MgPSBkb3B1dGVu digiVEVSTSIscyk7CS8qIFNldCB0aGUgVEVSTSB2YXJpYWJsZSAqLwotI2lmZGVmIENLX0NVUlNF UwotICAgIGZ4ZF9pbml0ZWQgPSAwOwkgICAgICAgLyogRm9yY2UgcmVpbml0aWFsaXphdGlvbiBv ZiBjdXJzZXMgZGF0YWJhc2UgKi8KLSAgICAodm9pZClkb3hkaXMoMCk7CQkgICAgIC8qIFJlLWlu aXRpYWxpemUgZmlsZSB0cmFuc2ZlciBkaXNwbGF5ICovCi0gICAgY29uY2IoKGNoYXIpZXNjYXBl KTsJCS8qIEZpeCBjb21tYW5kIHRlcm1pbmFsICovCi0jZW5kaWYJLyogQ0tfQ1VSU0VTICovCi0j ZW5kaWYJLyogTk9QVVRFTlYgKi8KLSAgICByZXR1cm4oc3VjY2Vzcyk7Ci0jZWxzZQotICAgIHBy aW50ZigKLSJcbiBTb3JyeSwgdGhpcyB2ZXJzaW9uIG9mIEMtS2VybWl0IGRvZXMgbm90IHN1cHBv cnQgdGhlIFNFVCBURVJNSU5BTCBUWVBFXG4iKTsKLSAgICBwcmludGYoCi0iIGNvbW1hbmQuICBU eXBlIFwiaGVscCBzZXQgdGVybWluYWxcIiBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi5cbiIpOwot ICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0jZW5kaWYJLyogVU5JWCAqLwotI2VuZGlmIC8qIE9T MiAqLwotfQotCi0jaWZuZGVmIE5PTE9DQUwKLSNpZmRlZiBPUzIKLS8qIE1TLURPUyBLRVJNSVQg Y29tcGF0aWJpbGl0eSBtb2RlcyAqLwotaW50Ci1zZXRtc2soKSB7Ci0gICAgaWYgKCh5ID0gY21r ZXkobXNrdGFiLG5tc2ssIk1TLURPUyBLZXJtaXQgY29tcGF0aWJpbGl0eSBtb2RlIiwKLSAgICAg ICAgICAgICAgICAgICAgImtleWNvZGVzIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOwotCi0g ICAgc3dpdGNoICggeSApIHsKLSNpZmRlZiBDT01NRU5UCi0gICAgICBjYXNlIE1TS19DT0xPUjoK LSAgICAgICAgcmV0dXJuKHNldG9uKCZtc2tjb2xvcnMpKTsKLSNlbmRpZiAvKiBDT01NRU5UICov Ci0gICAgICBjYXNlIE1TS19LRVlTOgotICAgICAgICByZXR1cm4oc2V0b24oJm1za2tleXMpKTsK LSAgICAgIGNhc2UgTVNLX1JFTjoKLSAgICAgICAgcmV0dXJuKHNldG9uKCZtc2tyZW5hbWUpKTsK LSAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTaG91bGRuJ3QgZ2V0 IGhlcmUuICovCi0gICAgICAgIHJldHVybigtMik7Ci0gICAgfQotfQotI2VuZGlmIC8qIE9TMiAq LwotCi0jaWZkZWYgQ0tUSURMRQotc3RhdGljIGNoYXIgaWFjdGJ1ZlsxMzJdOwotCi1jaGFyICoK LWdldGlhY3QoKSB7Ci0gICAgc3dpdGNoICh0dF9pZGxlYWN0KSB7Ci0gICAgICBjYXNlIElETEVf UkVUOiAgcmV0dXJuKCJyZXR1cm4iKTsKLSAgICAgIGNhc2UgSURMRV9FWElUOiByZXR1cm4oImV4 aXQiKTsKLSAgICAgIGNhc2UgSURMRV9IQU5HOiByZXR1cm4oImhhbmd1cCIpOwotI2lmZGVmIFRO Q09ERQotICAgICAgY2FzZSBJRExFX1ROT1A6IHJldHVybigiVGVsbmV0IE5PUCIpOwotICAgICAg Y2FzZSBJRExFX1RBWVQ6IHJldHVybigiVGVsbmV0IEFZVCIpOwotI2VuZGlmIC8qIFROQ09ERSAq LwotCi0gICAgICBjYXNlIElETEVfT1VUOiB7Ci0gICAgICAgICAgaW50IGMsIGssIG47Ci0gICAg ICAgICAgY2hhciAqIHAsICogcSwgKiB0OwotICAgICAgICAgIGsgPSBja3N0cm5jcHkoaWFjdGJ1 Ziwib3V0cHV0ICIsMTMyKTsKLSAgICAgICAgICBuID0gazsKLSAgICAgICAgICBxID0gJmlhY3Ri dWZba107Ci0gICAgICAgICAgcCA9IHR0X2lkbGVzdHI7Ci0gICAgICAgICAgaWYgKCFwKSBwID0g IiI7Ci0gICAgICAgICAgaWYgKCEqcCkgcmV0dXJuKCJvdXRwdXQgTlVMIik7Ci0gICAgICAgICAg d2hpbGUgKChjID0gKnArKykgJiYgbiA8IDEzMSkgewotICAgICAgICAgICAgICBjICY9IDB4ZmY7 Ci0gICAgICAgICAgICAgIGlmIChjID09ICdcXCcpIHsKLSAgICAgICAgICAgICAgICAgIGlmIChu ID4gMTMwKSBicmVhazsKLSAgICAgICAgICAgICAgICAgICpxKysgPSAnXFwnOwotICAgICAgICAg ICAgICAgICAgKnErKyA9ICdcXCc7Ci0gICAgICAgICAgICAgICAgICAqcSA9IE5VTDsKLSAgICAg ICAgICAgICAgICAgIG4gKz0gMjsKLSAgICAgICAgICAgICAgfSBlbHNlIGlmICgoYyA+IDMyICYm IGMgPCAxMjcpIHx8IGMgPiAxNTkpIHsKLSAgICAgICAgICAgICAgICAgICpxKysgPSBjOwotICAg ICAgICAgICAgICAgICAgKnEgPSBOVUw7Ci0gICAgICAgICAgICAgICAgICBuKys7Ci0gICAgICAg ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICBpZiAobiA+ICgxMzEgLSA2KSkKLSAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBzcHJpbnRmKHEsIlxc eyVkfSIsYyk7Ci0gICAgICAgICAgICAgICAgICBrID0gc3RybGVuKHEpOwotICAgICAgICAgICAg ICAgICAgcSArPSBrOwotICAgICAgICAgICAgICAgICAgbiArPSBrOwotICAgICAgICAgICAgICAg ICAgKnEgPSBOVUw7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgKnEg PSBOVUw7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgayA9IHR0X2NvbHNbVlRFUk1dOwotI2Vsc2UK LSAgICAgICAgICBrID0gdHRfY29sczsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICBpZiAo biA+IGsgLSA1MikgewotICAgICAgICAgICAgICBuID0gayAtIDUyOwotICAgICAgICAgICAgICBp YWN0YnVmW24tMl0gPSAnLic7Ci0gICAgICAgICAgICAgIGlhY3RidWZbbi0xXSA9ICcuJzsKLSAg ICAgICAgICAgICAgaWFjdGJ1ZltuXSA9IE5VTDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0 dXJuKGlhY3RidWYpOwotICAgICAgfQotICAgICAgZGVmYXVsdDogcmV0dXJuKCJ1bmtub3duIik7 Ci0gICAgfQotfQotI2VuZGlmIC8qIENLVElETEUgKi8KLQotI2lmbmRlZiBOT0NTRVRTCi1WT0lE Ci1zZXRsY2xjaGFyc2V0KHgpIGludCB4OyB7Ci0gICAgaW50IGk7Ci0gICAgdGNzbCA9IHk7ICAg ICAgICAgICAgICAgICAgIC8qIExvY2FsIGNoYXJhY3RlciBzZXQgKi8KLSNpZmRlZiBPUzIKLSAg ICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0gICAgICAgIEdbaV0uaW5pdCA9IFRSVUU7Ci0g ICAgICAgIHggPSBHW2ldLmRlc2lnbmF0aW9uOwotICAgICAgICBHW2ldLmMxID0gKHggIT0gdGNz bCkgJiYgY3NfaXNfc3RkKHgpOwotICAgICAgICB4ID0gR1tpXS5kZWZfZGVzaWduYXRpb247Ci0g ICAgICAgIEdbaV0uZGVmX2MxID0gKHggIT0gdGNzbCkgJiYgY3NfaXNfc3RkKHgpOwotICAgIH0K LSNlbmRpZiAvKiBPUzIgKi8KLX0KLQotVk9JRAotc2V0cmVtY2hhcnNldCh4LCB6KSBpbnQgeCwg ejsgewotICAgIGludCBpOwotCi0jaWZkZWYgS1VJCi0gICAgS3VpU2V0UHJvcGVydHkoIEtVSV9U RVJNX1JFTUNIQVJTRVQsIChsb25nKSB4LCAobG9uZykgeiApIDsKLSNlbmRpZiAvKiBLVUkgKi8K LSNpZmRlZiBVTklDT0RFCi0gICAgaWYgKHggPT0gVFhfVFJBTlNQKQotI2Vsc2UgLyogVU5JQ09E RSAqLwotICAgIGlmICh4ID09IEZDX1RSQU5TUCkKLSNlbmRpZiAvKiBVTklDT0RFICovCi0gICAg eyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRSQU5TUEFSRU5UPyAqLwotI2lmbmRlZiBP UzIKLSAgICAgICAgdGNzciA9IHRjc2w7ICAgICAgICAgICAgLyogTWFrZSBib3RoIHNldHMgdGhl IHNhbWUgKi8KLSNlbHNlIC8qIE9TMiAqLwotI2lmZGVmIENLT1VOSQotICAgICAgICB0dF91dGY4 ID0gMDsgICAgICAgICAgICAvKiBUdXJuIG9mZiBVVEY4IGZsYWcgKi8KLSAgICAgICAgdGNzciA9 IHRjc2wgPSBkZWNfa2JkID0gVFhfVFJBTlNQOyAvKiBObyB0cmFuc2xhdGlvbiAqLwotICAgICAg ICB0Y3NfdHJhbnNwID0gMTsKLQotICAgICAgICBpZiAoIWNzX2lzX25yYyh0Y3NsKSkgewotICAg ICAgICAgICAgR1swXS5kZWZfZGVzaWduYXRpb24gPSBHWzBdLmRlc2lnbmF0aW9uID0gVFhfQVND SUk7Ci0gICAgICAgICAgICBHWzBdLmluaXQgPSBUUlVFOwotICAgICAgICAgICAgR1swXS5kZWZf YzEgPSBHWzBdLmMxID0gRkFMU0U7Ci0gICAgICAgICAgICBHWzBdLnNpemUgPSBjczk0OwotICAg ICAgICAgICAgR1swXS5uYXRpb25hbCA9IEZBTFNFOwotICAgICAgICB9Ci0gICAgICAgIGZvciAo aSA9IGNzX2lzX25yYyh0Y3NsKSA/IDAgOiAxOyBpIDwgNDsgaSsrKSB7Ci0gICAgICAgICAgICBH W2ldLmRlZl9kZXNpZ25hdGlvbiA9IEdbaV0uZGVzaWduYXRpb24gPSB0Y3NsOwotICAgICAgICAg ICAgR1tpXS5pbml0ID0gVFJVRTsKLSAgICAgICAgICAgIEdbaV0uZGVmX2MxID0gR1tpXS5jMSA9 IEZBTFNFOwotICAgICAgICAgICAgc3dpdGNoIChjc19zaXplKEdbaV0uZGVzaWduYXRpb24pKSB7 IC8qIDk0LCA5Niwgb3IgMTI4ICovCi0gICAgICAgICAgICBjYXNlIDEyODoKLSAgICAgICAgICAg IGNhc2UgOTY6Ci0gICAgICAgICAgICAgICAgR1tpXS5zaXplID0gR1tpXS5kZWZfc2l6ZSA9IGNz OTY7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDk0OgotICAgICAg ICAgICAgICAgIEdbaV0uc2l6ZSA9IEdbaV0uZGVmX3NpemUgPSBjczk0OwotICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBHW2ldLnNp emUgPSBHW2ldLmRlZl9zaXplID0gY3NtYjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIEdbaV0ubmF0aW9uYWwgPSBjc19pc19ucmMoeCk7Ci0gICAg ICAgIH0KLSNlbHNlIC8qIENLT1VOSSAqLwotICAgICAgICB0Y3NyID0gdGNzbDsgICAgICAgICAg ICAvKiBNYWtlIGJvdGggc2V0cyB0aGUgc2FtZSAqLwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwg NDsgaSsrKSB7Ci0gICAgICAgICAgICBHW2ldLmRlZl9kZXNpZ25hdGlvbiA9IEdbaV0uZGVzaWdu YXRpb24gPSBGQ19UUkFOU1A7Ci0gICAgICAgICAgICBHW2ldLmluaXQgPSBGQUxTRTsKLSAgICAg ICAgICAgIEdbaV0uc2l6ZSA9IEdbaV0uZGVmX3NpemUgPSBjczk2OwotICAgICAgICAgICAgR1tp XS5jMSA9IEdbaV0uZGVmX2MxID0gRkFMU0U7Ci0gICAgICAgICAgICBHW2ldLnJ0b2kgPSBOVUxM OwotICAgICAgICAgICAgR1tpXS5pdG9sID0gTlVMTDsKLSAgICAgICAgICAgIEdbaV0ubHRvaSA9 IE5VTEw7Ci0gICAgICAgICAgICBHW2ldLml0b3IgPSBOVUxMOwotICAgICAgICAgICAgR1tpXS5u YXRpb25hbCA9IEZBTFNFOwotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tPVU5JICovCi0jZW5kaWYg LyogT1MyICovCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jaWZkZWYgT1MyCi0jaWZkZWYgQ0tP VU5JCi0gICAgZWxzZSBpZiAoeCA9PSBUWF9VVEY4KSB7Ci0gICAgICAgIHRjc190cmFuc3AgPSAw OwotICAgICAgICB0dF91dGY4ID0gMTsgICAgICAgICAgICAvKiBUdXJuIGl0IG9uIGlmIHdlIGFy ZSBVVEY4ICovCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYgLyogQ0tPVU5JICovCi0g ICAgZWxzZSB7Ci0gICAgICAgIHRjc190cmFuc3AgPSAwOwotICAgICAgICB0Y3NyID0geDsgICAg ICAgICAgICAgICAgICAgICAgIC8qIFJlbW90ZSBjaGFyYWN0ZXIgc2V0ICovCi0jaWZkZWYgQ0tP VU5JCi0gICAgICAgIHR0X3V0ZjggPSAwOyAgICAgICAgICAgICAgICAgICAgLyogVHVybiBvZmYg VVRGOCBmbGFnICovCi0jZW5kaWYgLyogQ0tPVU5JICovCi0KLSAgICAgICAgaWYgKHogPT0gVFRf R1JfQUxMKSB7Ci0gICAgICAgICAgICBpbnQgaTsKLSNpZmRlZiBVTklDT0RFCi0gICAgICAgICAg ICBkZWNfa2JkID0geDsKLSNlbmRpZiAvKiBVTklDT0RFICovCi0gICAgICAgICAgICBmb3IgKGkg PSAwOyBpIDwgNDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgR1tpXS5pbml0ID0gVFJVRTsKLSAg ICAgICAgICAgICAgICBpZiAoIGkgPT0gMCAmJiAhY3NfaXNfbnJjKHgpICkgewotICAgICAgICAg ICAgICAgICAgICBHWzBdLmRlc2lnbmF0aW9uID0gR1swXS5kZWZfZGVzaWduYXRpb24gPSBGQ19V U0FTQ0lJOwotICAgICAgICAgICAgICAgICAgICBHWzBdLnNpemUgPSBHWzBdLmRlZl9zaXplID0g Y3M5NDsKLSAgICAgICAgICAgICAgICAgICAgR1swXS5uYXRpb25hbCA9IDE7Ci0gICAgICAgICAg ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgR1tpXS5kZWZfZGVzaWduYXRpb24g PSBHW2ldLmRlc2lnbmF0aW9uID0geDsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjc19z aXplKHgpKSB7ICAgICAgIC8qIDk0LCA5Niwgb3IgMTI4ICovCi0gICAgICAgICAgICAgICAgICAg IGNhc2UgMTI4OgotICAgICAgICAgICAgICAgICAgICBjYXNlIDk2OgotICAgICAgICAgICAgICAg ICAgICAgICAgR1tpXS5zaXplID0gR1tpXS5kZWZfc2l6ZSA9IGNzOTY7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSA5NDoKLSAgICAgICAg ICAgICAgICAgICAgICAgIEdbaV0uc2l6ZSA9IEdbaV0uZGVmX3NpemUgPSBjczk0OwotICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g ICAgICAgICAgICAgICAgICAgICAgICBHW2ldLnNpemUgPSBHW2ldLmRlZl9zaXplID0gY3NtYjsK LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgICAgIEdbaV0ubmF0aW9uYWwgPSBjc19pc19ucmMoeCk7Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgIEdbaV0uYzEgPSBHW2ldLmRlZl9jMSA9IHggIT0g dGNzbCAmJiBjc19pc19zdGQoeCk7Ci0gICAgICAgICAgICB9Ci0jaWZkZWYgVU5JQ09ERQotICAg ICAgICB9IGVsc2UgaWYgKHogPT0gVFRfR1JfS0JEKSB7ICAgIC8qIEtleWJvYXJkIG9ubHkgKi8K LSAgICAgICAgICAgIGRlY19rYmQgPSB4OwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSAgICAgICAg fSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTcGVjaWZpYyBHbiAqLwotICAgICAg ICAgICAgR1t6XS5kZWZfZGVzaWduYXRpb24gPSBHW3pdLmRlc2lnbmF0aW9uID0geDsKLSAgICAg ICAgICAgIEdbel0uaW5pdCA9IFRSVUU7Ci0gICAgICAgICAgICBzd2l0Y2ggKGNzX3NpemUoeCkp IHsgICAgICAgLyogOTQsIDk2LCBvciAxMjggKi8KLSAgICAgICAgICAgIGNhc2UgMTI4OgotICAg ICAgICAgICAgY2FzZSA5NjoKLSAgICAgICAgICAgICAgICBHW3pdLnNpemUgPSBHW3pdLmRlZl9z aXplID0gY3M5NjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgOTQ6 Ci0gICAgICAgICAgICAgICAgR1t6XS5zaXplID0gR1t6XS5kZWZfc2l6ZSA9IGNzOTQ7Ci0gICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg IEdbel0uc2l6ZSA9IEdbel0uZGVmX3NpemUgPSBjc21iOwotICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgR1t6XS5jMSA9IEdbel0uZGVmX2MxID0geCAh PSB0Y3NsICYmIGNzX2lzX3N0ZCh4KTsKLSAgICAgICAgICAgIEdbel0ubmF0aW9uYWwgPSBjc19p c19ucmMoeCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZSAvKiBub3QgT1MyICovCi0gICAgdGNz ciA9IHg7ICAgICAgICAgICAgICAgICAgIC8qIFJlbW90ZSBjaGFyYWN0ZXIgc2V0ICovCi0jZW5k aWYgLyogT1MyICovCi19Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi1WT0lECi1zZXRjbWFzayh4 KSBpbnQgeDsgewotICAgIGlmICh4ID09IDcpIHsKLSAgICAgICAgY21hc2sgPSAwMTc3OwotICAg IH0gZWxzZSBpZiAoeCA9PSA4KSB7Ci0gICAgICAgIGNtYXNrID0gMDM3NzsKLSAgICAgICAgcGFy aXR5ID0gMDsKLSAgICB9Ci0jaWZkZWYgS1VJICAgICAgCi0gICAgS3VpU2V0UHJvcGVydHkoS1VJ X1RFUk1fQ01BU0sseCwwKTsKLSNlbmRpZiAvKiBLVUkgKi8KLX0KLQotI2lmZGVmIENLX0FVVE9E TAotVk9JRAotc2V0YXV0b2RsKHgseSkgaW50IHgseTsgewotICAgIGF1dG9kbCA9IHg7Ci0gICAg YWRsX2FzayA9IHk7Ci0jaWZkZWYgS1VJICAgICAgCi0gICAgS3VpU2V0UHJvcGVydHkoS1VJX1RF Uk1fQVVUT0RPV05MT0FELHg/KHk/MjoxKTowLDApOwotI2VuZGlmIC8qIEtVSSAqLwotfQotI2Vu ZGlmIC8qIENLX0FVVE9ETCAqLwotCi0jaWZkZWYgT1MyCi1WT0lECi1zZXR1cmxobChpbnQgeCkg ewotICAgIHR0X3VybF9oaWxpdGUgPSB4OwotI2lmZGVmIEtVSSAgICAgIAotICAgIEt1aVNldFBy b3BlcnR5KEtVSV9URVJNX1VSTF9ISUdITElHSFQseCwwKTsKLSNlbmRpZiAvKiBLVUkgKi8KLX0K LQotVk9JRAotc2V0YXByaW50KGludCB4KSB7Ci0gICAgZXh0ZXJuIGludCBhcHJpbnQ7Ci0gICAg YXByaW50ID0geDsKLSNpZmRlZiBLVUkKLSAgICBLdWlTZXRQcm9wZXJ0eShLVUlfVEVSTV9QUklO VEVSQ09QWSx4LDApOwotI2VuZGlmIC8qIEtVSSAqLwotfQotI2VuZGlmIC8qIE9TMiAqLwotCi1p bnQKLXNldHRybSgpIHsKLSAgICBpbnQgaSA9IDA7Ci0jaWZkZWYgT1MyCi0gICAgZXh0ZXJuIGlu dCBjb2xvcnJlc2V0LCB1c2VyX2VyYXNlbW9kZTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICBpZiAo KHkgPSBjbWtleSh0cm10YWIsbnRybSwiIiwgIiIseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsK LSNpZmRlZiBNQUMKLSAgICBwcmludGYoIlxuP1NvcnJ5LCBub3QgaW1wbGVtZW50ZWQgeWV0LiAg UGxlYXNlIHVzZSB0aGUgU2V0dGluZ3MgbWVudS5cbiIpOwotICAgIHJldHVybigtOSk7Ci0jZWxz ZQotI2lmZGVmIElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIpIHsKLSAgICAgICAgaWYgKCh5ID0gY21j Zm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgIHByaW50ZigiP1NvcnJ5LCBjb21tYW5kIGRp c2FibGVkLlxyXG4iKTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICB9Ci0jZW5k aWYgLyogSUtTRCAqLwotCi0gICAgc3dpdGNoICh5KSB7Ci0gICAgICBjYXNlIFhZVEJZVDogICAg ICAgICAgICAgICAgICAgICAgLyogU0VUIFRFUk1JTkFMIEJZVEVTSVpFICovCi0gICAgICAgIGlm ICgoeSA9IGNtbnVtKCJieXRlc2l6ZSBmb3IgdGVybWluYWwgY29ubmVjdGlvbiIsIjgiLDEwLCZ4 LAotICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1 cm4oeSk7Ci0gICAgICAgIGlmICh4ICE9IDcgJiYgeCAhPSA4KSB7Ci0gICAgICAgICAgICBwcmlu dGYoIlxuP1RoZSBjaG9pY2VzIGFyZSA3IGFuZCA4XG4iKTsKLSAgICAgICAgICAgIHJldHVybihz dWNjZXNzID0gMCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSBy ZXR1cm4oeSk7Ci0gICAgICAgIHNldGNtYXNrKHgpOwotI2lmZGVmIE9TMgotICAgICAgICBpZiAo SVM5NzgwMSh0dF90eXBlX21vZGUpKQotICAgICAgICAgIFNOSV9iaXRtb2RlKHgpOwotI2VuZGlm IC8qIE9TMiAqLwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0gICAgICBjYXNlIFhZ VFNPOiAgICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFRFUk1JTkFMIExPQ0tJTkctU0hJRlQg Ki8KLSAgICAgICAgcmV0dXJuKHNldG9uKCZzb3NpKSk7Ci0KLSAgICAgIGNhc2UgWFlUTkw6ICAg ICAgICAgICAgICAgICAgICAgICAvKiBTRVQgVEVSTUlOQUwgTkVXTElORS1NT0RFICovCi0gICAg ICAgIHJldHVybihzZXRvbigmdG5sbSkpOwotCi0jaWZkZWYgT1MyCi0gICAgICBjYXNlIFhZVENP TDoKLSAgICAgICAgaWYgKCh4ID0gY21rZXkodHR5Y29sdGFiLG5jb2xvcnMsIiIsInRlcm1pbmFs Iix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIGVsc2UgaWYg KHggPT0gVFRDT0xSRVMpIHsKLSAgICAgICAgICAgIGlmICgoeSA9IGNta2V5KHR0Y29sbW9kZXRh YixuY29sbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLCJkZWZhdWx0LWNvbG9y Iix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAg aWYgKCh6ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeik7Ci0gICAgICAg ICAgICBjb2xvcnJlc2V0ID0geTsKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0g ICAgICAgIH0gZWxzZSBpZiAoeCA9PSBUVENPTEVSQSkgewotICAgICAgICAgICAgaWYgKCh5ID0g Y21rZXkodHRjb2xtb2RldGFiLG5jb2xtb2RlLCIiLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgImN1cnJlbnQtY29sb3IiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4o eSk7Ci0gICAgICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgICAgIHJl dHVybih6KTsKLSAgICAgICAgICAgIHVzZXJfZXJhc2Vtb2RlID0geTsKLSAgICAgICAgICAgIHJl dHVybihzdWNjZXNzPTEpOwotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAg IC8qIE5vIHBhcnNlIGVycm9yICovCi0gICAgICAgICAgICBpbnQgZmcgPSAwLCBiZyA9IDA7Ci0g ICAgICAgICAgICBmZyA9IGNta2V5KHR0eWNscnRhYiwgbmNscnMsCi0gICAgICAgICAgICAgICAg ICAgICAgICh4ID09IFRUQ09MQk9SID8KLSAgICAgICAgICAgICAgICAgICAgICAgICJjb2xvciBm b3Igc2NyZWVuIGJvcmRlciIgOgotICAgICAgICAgICAgICAgICAgICAgICAgImZvcmVncm91bmQg Y29sb3IgYW5kIHRoZW4gYmFja2dyb3VuZCBjb2xvciIpLAotICAgICAgICAgICAgICAgICAgICAg ICAibGdyYXkiLCB4eHN0cmluZyk7Ci0gICAgICAgICAgICBpZiAoZmcgPCAwKQotICAgICAgICAg ICAgICByZXR1cm4oZmcpOwotICAgICAgICAgICAgaWYgKHggIT0gVFRDT0xCT1IpIHsKLSAgICAg ICAgICAgICAgICBpZiAoKGJnID0gY21rZXkodHR5Y2xydGFiLG5jbHJzLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiYmFja2dyb3VuZCBjb2xvciIsImJsdWUiLHh4c3RyaW5nKSkg PCAwKQotICAgICAgICAgICAgICAgICAgcmV0dXJuKGJnKTsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHkpOwot ICAgICAgICAgICAgc3dpdGNoICh4KSB7Ci0gICAgICAgICAgICAgIGNhc2UgVFRDT0xOT1I6Ci0g ICAgICAgICAgICAgICAgY29sb3Jub3JtYWwgPSBmZyB8IGJnIDw8IDQ7Ci0gICAgICAgICAgICAg ICAgZmdpID0gZmcgJiAweDA4OwotICAgICAgICAgICAgICAgIGJnaSA9IGJnICYgMHgwODsKLSAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBUVENPTFJFVjoKLSAgICAg ICAgICAgICAgICBjb2xvcnJldmVyc2UgPSBmZyB8IGJnIDw8IDQ7Ci0gICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgVFRDT0xJVEE6Ci0gICAgICAgICAgICAgICAgY29s b3JpdGFsaWMgPSBmZyB8IGJnIDw8IDQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgIGNhc2UgVFRDT0xVTkQ6Ci0gICAgICAgICAgICAgICAgY29sb3J1bmRlcmxpbmUgPSBm ZyB8IGJnIDw8IDQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug VFRDT0xHUlA6Ci0gICAgICAgICAgICAgICAgY29sb3JncmFwaGljID0gZmcgfCBiZyA8PCA0Owot ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIFRUQ09MREVCOgotICAg ICAgICAgICAgICAgIGNvbG9yZGVidWcgPSBmZyB8IGJnIDw8IDQ7Ci0gICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgVFRDT0xTVEE6Ci0gICAgICAgICAgICAgICAgY29s b3JzdGF0dXMgPSBmZyB8IGJnIDw8IDQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgIGNhc2UgVFRDT0xITFA6Ci0gICAgICAgICAgICAgICAgY29sb3JoZWxwID0gZmcgfCBi ZyA8PCA0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIFRUQ09M Qk9SOgotICAgICAgICAgICAgICAgIGNvbG9yYm9yZGVyID0gZmc7Ci0gICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgVFRDT0xTRUw6Ci0gICAgICAgICAgICAgICAgY29s b3JzZWxlY3QgPSBmZyB8IGJnIDw8IDQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIlcyAtIGludmFsaWRcbiIs Y21kYnVmKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2NybmluaXRpYWxpemVkW1ZURVJNXSA9 IDA7Ci0gICAgICAgICAgICBWc2NybkluaXQoVlRFUk0pOwotICAgICAgICB9Ci0gICAgICAgIHJl dHVybihzdWNjZXNzID0gMSk7Ci0KLSAgICAgIGNhc2UgWFlUQ1VSOiB7ICAgICAgICAgICAgICAg ICAgICAvKiBTRVQgVEVSTUlOQUwgQ1VSU09SICovCi0gICAgICAgICAgZXh0ZXJuIGludCBjdXJz b3JlbmFbXTsKLSAgICAgICAgICBleHRlcm4gaW50IGN1cnNvcm9uW10gOyAgICAgICAvKiBDdXJz b3Igc3RhdGUgb24vb2ZmICAgICAgICovCi0gICAgICAgICAgaWYgKCh4ID0gY21rZXkodHR5Y3Vy dGFiLG5jdXJzb3JzLCIiLCJ1bmRlcmxpbmUiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAg cmV0dXJuKHgpOwotICAgICAgICAgIGlmICgoeiA9IGNta2V5KGN1cm9udGFiLG5jdXJvbiwiIiwi b24iLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuKHopOwotICAgICAgICAgIGlm ICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICAgIHR0X2N1cnNvciA9IHR0 X2N1cnNvcl91c3IgPSB4OwotICAgICAgICAgIGlmICggeiA9PSAyICkgewotICAgICAgICAgICAg ICBjdXJzb3JlbmFbVlRFUk1dID0gdHRfY3Vyc29yZW5hX3VzciA9IDE7Ci0gICAgICAgICAgICAg IHR0X2N1cnNvcl9ibGluayA9IDA7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg Y3Vyc29yZW5hW1ZURVJNXSA9IHR0X2N1cnNvcmVuYV91c3IgPSB6Oy8qIHR1cm4gY3Vyc29yIG9u L29mZiAqLwotICAgICAgICAgICAgICB0dF9jdXJzb3JfYmxpbmsgPSAxOwotICAgICAgICAgIH0K LSAgICAgICAgICBjdXJzb3JvbltWVEVSTV0gPSBGQUxTRTsgLyogRm9yY2UgbmV3Y3Vyc29yIHRv IHJlc3RvcmUgdGhlIGN1cnNvciAqLwotICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0g ICAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0KLSAgICAgIGNhc2UgWFlUVFlQOiAgICAgICAgICAg ICAgICAgICAgICAvKiBTRVQgVEVSTUlOQUwgVFlQRSAqLwotICAgICAgICByZXR1cm4oc2V0dHJt dHlwKCkpOwotCi0jaWZkZWYgT1MyCi0gICAgICBjYXNlIFhZVEFSUjogICAgICAgICAgICAgICAg ICAgICAgLyogU0VUIFRFUk1JTkFMIEFSUk9XLUtFWVMgKi8KLSAgICAgICAgaWYgKCh4ID0gY21r ZXkoYWttdGFiLDIsIiIsIiIseHhzdHJpbmcpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgaWYg KCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgIHR0X2Fycm93ID0geDsgICAg ICAgICAgICAgICAgICAgLyogVFRLX05PUk0gLyBUVEtfQVBQTDsgc2VlIGNrdXVzci5oICovCi0g ICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0KLSAgICAgIGNhc2UgWFlUS1BEOiAgICAgICAg ICAgICAgICAgICAgICAvKiBTRVQgVEVSTUlOQUwgS0VZUEFELU1PREUgKi8KLSAgICAgICAgaWYg KCh4ID0gY21rZXkoa3BtdGFiLDIsIiIsIiIseHhzdHJpbmcpKSA8IDApIHJldHVybih4KTsKLSAg ICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgIHR0X2tleXBh ZCA9IHg7ICAgICAgICAgICAgICAgICAgLyogVFRLX05PUk0gLyBUVEtfQVBQTDsgc2VlIGNrdXVz ci5oICovCi0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0KLSAgICAgIGNhc2UgWFlUVU5Y OiB7ICAgICAgICAgICAgICAgICAgICAvKiBTRVQgVEVSTSBVTklYLU1PREUgKERHKSAqLwotICAg ICAgICBleHRlcm4gaW50IGRndW5peCxkZ3VuaXhfdXNyOwotICAgICAgICB4ID0gc2V0b24oJmRn dW5peCk7Ci0gICAgICAgIGRndW5peF91c3IgPSBkZ3VuaXg7Ci0gICAgICAgIHJldHVybih4KTsK LSAgICAgIH0KLSAgICAgIGNhc2UgWFlUS0JNT0Q6IHsgICAgICAgICAgICAgICAgICAvKiBTRVQg VEVSTSBLRVlCT0FSRCBNT0RFICovCi0gICAgICAgICAgZXh0ZXJuIGludCB0dF9rYl9tb2RlOwot ICAgICAgICAgIGlmICgoeCA9IGNta2V5KGtibW9kdGFiLAotICAgICAgICAgICAgICAgICAgICAg ICAgIG5rYm1vZHRhYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAibm9ybWFsIiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAic3BlY2lhbCBrZXlib2FyZCBtb2RlIGZvciB0ZXJtaW5hbCBl bXVsYXRpb24iLAotICAgICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKQotICAgICAgICAg ICAgICAgKSA8IDApCi0gICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgaWYgKCh5ID0g Y21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgICAgdHRfa2JfbW9kZSA9IHg7Ci0gICAg ICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgIH0KLQotICAgICAgY2FzZSBYWVRXUlA6 ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBURVJNSU5BTCBXUkFQICovCi0gICAgICAgIHJl dHVybihzZXRvbigmdHRfd3JhcCkpOwotCi0gICAgICBjYXNlIFhZU0NSUzoKLSAgICAgICAgaWYg KCh5ID0gY21udW0oIkNPTk5FQ1Qgc2Nyb2xsYmFjayBidWZmZXIgc2l6ZSwgbGluZXMiLCIyMDAw IiwxMCwmeCwKLSAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDApCi0gICAgICAg ICAgcmV0dXJuKHkpOwotICAgICAgICAvKiBUaGUgbWF4IG51bWJlciBvZiBsaW5lcyBpcyB0aGUg UkFNICAqLwotICAgICAgICAvKiB3ZSBjYW4gYWN0dWFsbHkgZGVkaWNhdGUgdG8gYSAgICAgICAq LwotICAgICAgICAvKiBzY3JvbGxiYWNrIGJ1ZmZlciBnaXZlbiB0aGUgbWF4aW11bSAqLwotICAg ICAgICAvKiBwcm9jZXNzIG1lbW9yeSBzcGFjZSBvZiA1MTJNQiAgICAgICAqLwotICAgICAgICBp ZiAoeCA8IDI1NiB8fCB4ID4gMjAwMDAwMEwpIHsKLSAgICAgICAgICAgIHByaW50ZigiXG4/VGhl IHNpemUgbXVzdCBiZSBiZXR3ZWVuIDI1NiBhbmQgMiwwMDAsMDAwLlxuIik7Ci0gICAgICAgICAg ICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoeSA9IGNtY2Zt KCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICB0dF9zY3JzaXplW1ZURVJNXSA9IHg7Ci0gICAg ICAgIFZzY3JuSW5pdChWVEVSTSk7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0jZW5k aWYgLyogT1MyICovCi0KLSNpZm5kZWYgTk9DU0VUUwotICAgICAgY2FzZSBYWVRDUzogeyAgICAg ICAgICAgICAgICAgICAgIC8qIFNFVCBURVJNSU5BTCBDSEFSQUNURVItU0VUICovCi0gICAgICAg IGludCBlb2w7Ci0gICAgICAgICAgLyogc2V0IHRlcm1pbmFsIGNoYXJhY3Rlci1zZXQgPHJlbW90 ZT4gPGxvY2FsPiAqLwotICAgICAgICBpZiAoKHggPSBjbWtleSgKLSNpZmRlZiBDS09VTkkKLSAg ICAgICAgICAgICAgICAgICAgICAgdHhydGFiLG50eHJ0YWIsCi0jZWxzZSAgLyogQ0tPVU5JICov Ci0gICAgICAgICAgICAgICAgICAgICAgIHR0Y3N0YWIsbnRlcm1jLAotI2VuZGlmIC8qIENLT1VO SSAqLwotICAgICAgICAgICAgICAgICAgICAgICAicmVtb3RlIHRlcm1pbmFsIGNoYXJhY3Rlci1z ZXQiLCIiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLQotI2lmZGVmIFVO SUNPREUKLSAgICAgICAgaWYgKHggPT0gVFhfVFJBTlNQCi0jaWZkZWYgQ0tPVU5JCi0gICAgICAg ICAgICB8fCB4ID09IFRYX1VURjgKLSNlbmRpZiAvKiBDS09VTkkgKi8KLSAgICAgICAgICAgKSB7 Ci0gICAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgICAgLyogQ29uZmlybSB0aGUg Y29tbWFuZCAqLwotICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotI2lmZGVmIE9TMgotICAg ICAgICAgICAgaWYgKCBpc3VuaWNvZGUoKSAmJiB4ID09IFRYX1RSQU5TUCApIHsKLSAgICAgICAg ICAgICAgICAvKiBJZiB3ZSBhcmUgaW4gdW5pY29kZSBkaXNwbGF5IG1vZGUgdGhlbiB0cmFuc3Bh cmVudAotICAgICAgICAgICAgICAgICAqIG9ubHkgYWZmZWN0cyB0aGUgb3V0cHV0IGRpcmVjdGlv bi4gIFdlIG5lZWQgdG8ga25vdwotICAgICAgICAgICAgICAgICAqIHRoZSBhY3R1YWwgcmVtb3Rl IGNoYXJhY3RlciBzZXQgaW4gb3JkZXIgdG8gcGVyZm9ybQotICAgICAgICAgICAgICAgICAqIHRo ZSB0Y3NyIC0+IHVjczIgdHJhbnNsYXRpb24gZm9yIGRpc3BsYXkuCi0gICAgICAgICAgICAgICAg ICovCi0gICAgICAgICAgICAgICAgeCA9IHkgPSB0Y3NsOwotICAgICAgICAgICAgfSBlbHNlCi0j ZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAgeSA9IHg7Ci0gICAgICAgIH0KLSNlbHNl IC8qIFVOSUNPREUgKi8KLSAgICAgICAgaWYgKHggPT0gRkNfVFJBTlNQKSB7Ci0gICAgICAgICAg ICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApICAgICAgLyogQ29uZmlybSB0aGUgY29tbWFuZCAqLwot ICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgIHkgPSB4OwotICAgICAgICB9 Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotCi0gICAgICAgIC8qIE5vdCB0cmFuc3BhcmVudCBvciBV VEY4LCBzbyBnZXQgbG9jYWwgc2V0IHRvIHRyYW5zbGF0ZSBpdCBpbnRvICovCi0gICAgICAgIHMg PSAiIjsKLSNpZmRlZiBPUzIKLSAgICAgICAgeSA9IG9zMmdldGNwKCk7ICAgICAgICAgICAgICAg ICAvKiBEZWZhdWx0IGlzIGN1cnJlbnQgY29kZSBwYWdlICovCi0gICAgICAgIHN3aXRjaCAoeSkg ewotICAgICAgICAgIGNhc2UgNDM3OiBzID0gImNwNDM3IjsgYnJlYWs7Ci0gICAgICAgICAgY2Fz ZSA4NTA6IHMgPSAiY3A4NTAiOyBicmVhazsKLSAgICAgICAgICBjYXNlIDg1MjogcyA9ICJjcDg1 MiI7IGJyZWFrOwotICAgICAgICAgIGNhc2UgODU3OiBzID0gImNwODU3IjsgYnJlYWs7Ci0gICAg ICAgICAgY2FzZSA4NTg6IHMgPSAiY3A4NTgiOyBicmVhazsKLSAgICAgICAgICBjYXNlIDg2Mjog cyA9ICJjcDg2MiI7IGJyZWFrOwotICAgICAgICAgIGNhc2UgODY2OiBzID0gImNwODY2IjsgYnJl YWs7Ci0gICAgICAgICAgY2FzZSA4Njk6IHMgPSAiY3A4NjkiOyBicmVhazsKLSAgICAgICAgICBj YXNlIDEyNTA6IHMgPSAiY3AxMjUwIjsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAxMjUxOiBzID0g ImNwMTI1MSI7IGJyZWFrOwotICAgICAgICAgIGNhc2UgMTI1MjogcyA9ICJjcDEyNTIiOyBicmVh azsKLSAgICAgICAgICBjYXNlIDEyNTM6IHMgPSAiY3AxMjUzIjsgYnJlYWs7Ci0gICAgICAgICAg Y2FzZSAxMjU0OiBzID0gImNwMTI1NCI7IGJyZWFrOwotICAgICAgICAgIGNhc2UgMTI1NTogcyA9 ICJjcDEyNTUiOyBicmVhazsKLSAgICAgICAgICBjYXNlIDEyNTY6IHMgPSAiY3AxMjU2IjsgYnJl YWs7Ci0gICAgICAgICAgY2FzZSAxMjU3OiBzID0gImNwMTI1NyI7IGJyZWFrOwotICAgICAgICAg IGNhc2UgMTI1ODogcyA9ICJjcDEyNTgiOyBicmVhazsKLSAgICAgICAgfQotI2lmZGVmIFBDRk9O VFMKLS8qCi0gICBJZiB0aGUgdXNlciBoYXMgbG9hZGVkIGEgZm9udCB3aXRoIFNFVCBURVJNSU5B TCBGT05UIHRoZW4gd2Ugd2FudAotICAgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGNvZGUgcGFnZSB0 byB0aGUgZm9udCB0aGF0IHdhcyBsb2FkZWQuCi0qLwotICAgICAgICBpZiAodHRfZm9udCAhPSBU VEZfUk9NKSB7Ci0gICAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgbnRlcm1mb250OyB5KysgKSB7 Ci0gICAgICAgICAgICAgICAgaWYgKHRlcm1fZm9udFt5XS5rd3ZhbCA9PSB0dF9mb250KSB7Ci0g ICAgICAgICAgICAgICAgICAgIHMgPSB0ZXJtX2ZvbnRbeV0ua3dkOwotICAgICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K LSNlbmRpZiAvKiBQQ0ZPTlRTICovCi0jZWxzZSAgLyogTm90IEs5NS4uLiAqLwotICAgICAgICBz ID0gZmNzaW5mb1tmY2hhcnNldF0ua2V5d29yZDsKLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgICAg ICBpZiAoKHkgPSBjbWtleSgKLSNpZmRlZiBDS09VTkkKLSAgICAgICAgICAgICAgICAgICAgICAg dHhydGFiLG50eHJ0YWIsCi0jZWxzZSAvKiBDS09VTkkgKi8KLSAgICAgICAgICAgICAgICAgICAg ICAgdHRjc3RhYixudGVybWMsCi0jZW5kaWYgLyogQ0tPVU5JICovCi0gICAgICAgICAgICAgICAg ICAgICAgICJsb2NhbCBjaGFyYWN0ZXItc2V0IixzLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAg IHJldHVybih5KTsKLQotI2lmZGVmIFVOSUNPREUKLSAgICAgICAgaWYgKHkgPT0gVFhfVVRGOCkg ewotICAgICAgICAgICAgcHJpbnRmKCI/VVRGOCBtYXkgbm90IGJlIHVzZWQgYXMgYSBsb2NhbCBj aGFyYWN0ZXIgc2V0LlxyXG4iKTsKLSAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0K LSNlbmRpZiAvKiBVTklDT0RFICovCi0jaWZkZWYgT1MyCi0gICAgICAgIGlmICgoeiA9IGNta2V5 KGdyYXBoc2V0dGFiLG5ncmFwaHNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgIkRFQyBWVCBp bnRlcm1lZGlhdGUgZ3JhcGhpYyBzZXQiLCJhbGwiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAg ICAgcmV0dXJuKHopOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICBpZiAoKGVvbCA9IGNtY2Zt KCkpIDwgMCkKLSAgICAgICAgICAgIHJldHVybihlb2wpOyAvKiBDb25maXJtIHRoZSBjb21tYW5k ICovCi0KLSAgICAgICAgLyogRW5kIG9mIGNvbW1hbmQgcGFyc2luZyAtIGFjdGlvbnMgYmVnaW4g Ki8KLSAgICAgICAgc2V0bGNsY2hhcnNldCh5KTsKLSAgICAgICAgc2V0cmVtY2hhcnNldCh4LHop OwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgfQotI2VuZGlmIC8qIE5PQ1NF VFMgKi8KLQotI2lmbmRlZiBOT0NTRVRTCi0gICAgICBjYXNlIFhZVExDUzogICAgICAgICAgICAg ICAgICAgICAgLyogU0VUIFRFUk1JTkFMIExPQ0FMLUNIQVJBQ1RFUi1TRVQgKi8KLSAgICAgICAg Lyogc2V0IHRlcm1pbmFsIGNoYXJhY3Rlci1zZXQgPGxvY2FsPiAqLwotICAgICAgICBzID0gZ2V0 ZGNzZXQoKTsgICAgICAgICAgICAgICAgIC8qIEdldCBkaXNwbGF5IGNoYXJhY3Rlci1zZXQgbmFt ZSAqLwotICAgICAgICBpZiAoKHkgPSBjbWtleSgKLSNpZmRlZiBDS09VTkkKLSAgICAgICAgICAg ICAgICAgICAgICAgdHhydGFiLG50eHJ0YWIsCi0jZWxzZSAvKiBDS09VTkkgKi8KLSAgICAgICAg ICAgICAgICAgICAgICAgZmNzdGFiLG5maWxjLAotI2VuZGlmIC8qIENLT1VOSSAqLwotICAgICAg ICAgICAgICAgICAgICAgICAibG9jYWwgY2hhcmFjdGVyLXNldCIscyx4eHN0cmluZykpIDwgMCkK LSAgICAgICAgICByZXR1cm4oeSk7Ci0KLSNpZmRlZiBVTklDT0RFCi0gICAgICAgICAgaWYgKHkg PT0gVFhfVVRGOCkgewotICAgICAgICAgICAgICBwcmludGYoIj9VVEY4IG1heSBub3QgYmUgdXNl ZCBhcyBhIGxvY2FsIGNoYXJhY3RlciBzZXQuXHJcbiIpOwotICAgICAgICAgICAgICByZXR1cm4o LTkpOwotICAgICAgICAgIH0KLSNlbmRpZiAvKiBVTklDT0RFICovCi0gICAgICAgICAgaWYgKCh6 ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeik7IC8qIENvbmZpcm0gdGhlIGNvbW1hbmQgKi8KLQot ICAgICAgICAgIC8qIEVuZCBvZiBjb21tYW5kIHBhcnNpbmcgLSBhY3Rpb24gYmVnaW5zICovCi0K LSAgICAgICAgc2V0bGNsY2hhcnNldCh5KTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsK LSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSNpZm5kZWYgTk9DU0VUUwotI2lmZGVmIFVOSUNPREUK LSAgICAgIGNhc2UgWFlUVU5JOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgVEVSTUlOQUwg VU5JQ09ERSAqLwotICAgICAgICByZXR1cm4oc2V0b24oJnR0X3VuaWNvZGUpKTsKLSNlbmRpZiAv KiBVTklDT0RFICovCi0KLSAgICAgIGNhc2UgWFlUUkNTOiAgICAgICAgICAgICAgICAgICAgICAv KiBTRVQgVEVSTUlOQUwgUkVNT1RFLUNIQVJBQ1RFUi1TRVQgKi8KLSAgICAgICAgLyogc2V0IHRl cm1pbmFsIGNoYXJhY3Rlci1zZXQgPHJlbW90ZT4gPEdyYXBoaWMtc2V0PiAqLwotICAgICAgICBp ZiAoKHggPSBjbWtleSgKLSNpZmRlZiBDS09VTkkKLSAgICAgICAgICAgICAgICB0eHJ0YWIsIG50 eHJ0YWIsCi0jZWxzZSAvKiBDS09VTkkgKi8KLSAgICAgICAgICAgICAgICB0dGNzdGFiLG50ZXJt YywKLSNlbmRpZiAvKiBDS09VTkkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgInJlbW90ZSB0 ZXJtaW5hbCBjaGFyYWN0ZXItc2V0IiwiIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1 cm4oeCk7Ci0KLSNpZmRlZiBVTklDT0RFCi0gICAgICAgIGlmICh4ID09IFRYX1RSQU5TUAotI2lm ZGVmIENLT1VOSQotICAgICAgICAgICAgfHwgeCA9PSBUWF9VVEY4Ci0jZW5kaWYgLyogQ0tPVU5J ICovCi0gICAgICAgICAgICkgewotICAgICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDAp ICAgIC8qIENvbmZpcm0gdGhlIGNvbW1hbmQgKi8KLSAgICAgICAgICAgICAgICAgIHJldHVybih5 KTsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgIGlmICggaXN1bmljb2RlKCkgJiYgeCA9PSBUWF9U UkFOU1AgKSB7Ci0gICAgICAgICAgICAgICAgLyogSWYgd2UgYXJlIGluIHVuaWNvZGUgZGlzcGxh eSBtb2RlIHRoZW4gdHJhbnNwYXJlbnQKLSAgICAgICAgICAgICAgICAgKiBvbmx5IGFmZmVjdHMg dGhlIG91dHB1dCBkaXJlY3Rpb24uICBXZSBuZWVkIHRvIGtub3cKLSAgICAgICAgICAgICAgICAg KiB0aGUgYWN0dWFsIHJlbW90ZSBjaGFyYWN0ZXIgc2V0IGluIG9yZGVyIHRvIHBlcmZvcm0KLSAg ICAgICAgICAgICAgICAgKiB0aGUgdGNzciAtPiB1Y3MyIHRyYW5zbGF0aW9uIGZvciBkaXNwbGF5 LgotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIHggPSB0Y3NsOwotICAgICAg ICAgICAgfQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICB9Ci0jZWxzZSAvKiBVTklDT0RFICov Ci0gICAgICAgIGlmICh4ID09IEZDX1RSQU5TUCkgewotICAgICAgICAgIGlmICgoeSA9IGNtY2Zt KCkpIDwgMCkgICAgICAgIC8qIENvbmZpcm0gdGhlIGNvbW1hbmQgKi8KLSAgICAgICAgICAgIHJl dHVybih5KTsKLSAgICAgICAgfQotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSAgICAgICAgZWxzZSB7 Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgaWYgKCh6ID0gY21rZXkoZ3JhcGhzZXR0YWIsbmdyYXBo c2V0LAotICAgICAgICAgICAgICAgICAgICAgICJERUMgVlQgaW50ZXJtZWRpYXRlIGdyYXBoaWMg c2V0IiwiYWxsIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgIHJldHVybih6KTsKLSNlbmRp ZiAvKiBPUzIgKi8KLSAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApICAgICAgICAvKiBD b25maXJtIHRoZSBjb21tYW5kICovCi0gICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgIH0K LSAgICAgICAgLyogQ29tbWFuZCBwYXJzaW5nIGVuZHMgaGVyZSAqLwotCi0gICAgICAgIHNldHJl bWNoYXJzZXQoeCx6KTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSNlbmRpZiAvKiBO T0NTRVRTICovCi0KLSAgICAgIGNhc2UgWFlURUM6ICAgICAgICAgICAgICAgICAgICAgICAvKiBT RVQgVEVSTUlOQUwgRUNITyAqLwotICAgICAgICBpZiAoKHggPSBjbWtleShybHRhYixucmx0LCJ3 aGljaCBzaWRlIGVjaG9zIGR1cmluZyBDT05ORUNUIiwKLSAgICAgICAgICAgICAgICAgICAgICAg InJlbW90ZSIsIHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIGlmICgoeSA9IGNt Y2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotI2lmZGVmIE5FVENPTk4KLSAgICAgICAgb2xkcGxleCA9 IHg7Ci0jZW5kaWYgLyogTkVUQ09OTiAqLwotICAgICAgICBkdXBsZXggPSB4OwotICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0gICAgICBjYXNlIFhZVEVTQzogICAgICAgICAgICAgICAg ICAgICAgLyogU0VUIFRFUk0gRVNDICovCi0gICAgICAgIGlmICgoeCA9IGNta2V5KG5hYmx0YWIs bm5hYmx0YWIsIiIsImVuYWJsZWQiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih4 KTsKLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgIHR0 X2VzY2FwZSA9IHg7Ci0gICAgICAgIHJldHVybigxKTsKLQotICAgICAgY2FzZSBYWVRDUkQ6ICAg ICAgICAgICAgICAgICAgICAgIC8qIFNFVCBURVJNSU5BTCBDUi1ESVNQTEFZICovCi0gICAgICAg IGlmICgoeCA9IGNta2V5KGNyZHRhYiwyLCIiLCAibm9ybWFsIiwgeHhzdHJpbmcpKSA8IDApIHJl dHVybih4KTsKLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAg ICAgIHR0X2NyZCA9IHg7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0KLSAgICAgIGNh c2UgWFlUTEZEOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgVEVSTUlOQUwgTEYtRElTUExB WSAqLwotICAgICAgICBpZiAoKHggPSBjbWtleShjcmR0YWIsMiwiIiwgIm5vcm1hbCIsIHh4c3Ry aW5nKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0 dXJuKHkpOwotICAgICAgICB0dF9sZmQgPSB4OwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEp OwotCi0jaWZkZWYgT1MyCi0gICAgICBjYXNlIFhZVEFOUzogeyAgICAgICAgICAgICAgICAgICAg LyogU0VUIFRFUk1JTkFMIEFOU1dFUkJBQ0sgKi8KLS8qCi0gIE5PVEU6IFdlIGxldCB0aGVtIGVu YWJsZSBhbmQgZGlzYWJsZSB0aGUgYW5zd2VyYmFjayBzZXF1ZW5jZSwgYnV0IHdlCi0gIGRvIE5P VCBsZXQgdGhlbSBjaGFuZ2UgaXQsIGFuZCB3ZSBkZWZpbml0ZWx5IGRvIG5vdCBsZXQgdGhlIGhv c3Qgc2V0IGl0LgotICBUaGlzIGlzIGEgc2VjdXJpdHkgZmVhdHVyZS4KLQotICBBcyBvZiAxLjEu OCB3ZSBhbGxvdyB0aGUgU0VUIFRFUk0gQU5TV0VSQkFDSyBNRVNTQUdFIDxzdHJpbmc+IHRvIGJl Ci0gIHVzZWQganVzdCBhcyBNUy1ET1MgS2VybWl0IGRvZXMuICBDMCBhbmQgQzEgY29udHJvbHMg YXMgd2VsbCBhcyBERUwKLSAgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIHVzZWQgYXMgY2hhcmFjdGVy cy4gIFRoZXkgYXJlIHRyYW5zbGF0ZWQgdG8KLSAgdW5kZXJzY29yZS4gIFRoaXMgbWF5IG5vdCBi ZSBzZXQgYnkgQVBDLgotKi8KLSAgICAgICAgICBpZiAoKHggPSBjbWtleShhbmJrdGFiLG5hbnNi aywiIiwgIm9mZiIsIHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuKHgpOwotICAg ICAgICAgIGlmICh4IDwgMikgewotICAgICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDAp Ci0gICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICB0dF9hbnN3ZXIgPSB4 OwotICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICAgIH0gZWxzZSBp ZiAoIHggPT0gMiB8fCB4ID09IDMpIHsKLSAgICAgICAgICAgICAgaW50IGxlbiA9IDA7Ci0gICAg ICAgICAgICAgIGV4dGVybiBpbnQgc2FmZWFuc3dlcmJrOwotICAgICAgICAgICAgICBleHRlcm4g Y2hhciB1c2VyYW5zd2VyYmtbXTsKLSAgICAgICAgICAgICAgaWYgKCh5ID0gY210eHQoIkFuc3dl cmJhY2sgZXh0ZW5zaW9uIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICBy ZXR1cm4oeSk7Ci0gICAgICAgICAgICAgIGlmIChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMIHx8Ci0g ICAgICAgICAgICAgICAgICAoYXBjYWN0aXZlID09IEFQQ19SRU1PVEUgJiYgIShhcGNzdGF0dXMg JiBBUENfVU5DSCkpKQotICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAg ICAgICAgICAgIGxlbiA9IHN0cmxlbihzKTsKLSAgICAgICAgICAgICAgaWYgKHggPT0gMikgewot ICAgICAgICAgICAgICAgICAgLyogU2FmZSBBbnN3ZXJiYWNrJ3MgZG9uJ3QgaGF2ZSBDMC9DMSBj aGFycyAqLwotICAgICAgICAgICAgICAgICAgZm9yICh6ID0gMDsgeiA8IGxlbjsgeisrKSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgaWYgKChzW3pdICYgMHg3RikgPD0gU1AgfHwgKHNbel0gJiAw eDdGKSA9PSBERUwpCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2VyYW5zd2VyYmtbel0gPSAn Xyc7Ci0gICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAg dXNlcmFuc3dlcmJrW3pdID0gc1t6XTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICAgIHVzZXJhbnN3ZXJia1t6XSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgICBzYWZlYW5z d2VyYmsgPSAxIDsgICAgLyogVFJVRSAqLwotICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg ICAgICAgICAgICAgY2tzdHJuY3B5KHVzZXJhbnN3ZXJiayxzLDYwKTsgLyogKHNlZSBja29jb24u YykgKi8KLSAgICAgICAgICAgICAgICAgIHNhZmVhbnN3ZXJiayA9IDA7ICAgICAvKiBGQUxTRSAq LwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIHVwZGFuc3dlcmJrKCk7Ci0gICAgICAg ICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg ICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAgfQotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZk ZWYgQ0tfQVBDCi0gICAgICBjYXNlIFhZVEFQQzoKLSAgICAgICAgaWYgKCh5ID0gY21rZXkoYXBj dGFiLG5hcGN0YWIsCi0gICAgICAgICAgICAgICAgICAgICAgICJhcHBsaWNhdGlvbiBwcm9ncmFt IGNvbW1hbmQgZXhlY3V0aW9uIiwiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcp KSA8IDApCi0gICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8 IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBpZiAoYXBjYWN0aXZlID09IEFQQ19M T0NBTCB8fAotICAgICAgICAgICAgKGFwY2FjdGl2ZSA9PSBBUENfUkVNT1RFICYmICEoYXBjc3Rh dHVzICYgQVBDX1VOQ0gpKSkKLSAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAg ICBhcGNzdGF0dXMgPSB5OwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0jaWZkZWYg Q0tfQVVUT0RMCi0gICAgICBjYXNlIFhZVEFVVE9ETDogICAgICAgICAgICAgICAgICAgLyogQVVU T0RPV05MT0FEICovCi0gICAgICAgIGlmICgoeSA9IGNta2V5KGFkbHRhYixuYWRsdGFiLCJBdXRv LWRvd25sb2FkIG9wdGlvbnMiLCIiLAotICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZykp IDwgMCkKLSAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgIHN3aXRjaCAoeSkgewotICAgICAg ICAgIGNhc2UgVEFEX09OOgotICAgICAgICAgIGNhc2UgVEFEX09GRjoKLSAgICAgICAgICAgIGlm ICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAg ICAgc2V0YXV0b2RsKHksMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFRB RF9BU0s6Ci0gICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgICAg IHJldHVybih4KTsKLSAgICAgICAgICAgIHNldGF1dG9kbChUQURfT04sMSk7Ci0gICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICBjYXNlIFRBRF9FUlI6Ci0gICAgICAgICAgICBpZiAoKHkgPSBj bWtleShhZGxlcnJ0YWIsbmFkbGVycnRhYiwiIiwiIiwgeHhzdHJpbmcpKSA8IDApCi0gICAgICAg ICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAg ICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgYWRsX2VyciA9IHk7Ci0gICAgICAg ICAgICBicmVhazsKLSNpZmRlZiBPUzIKLSAgICAgICAgICBjYXNlIFRBRF9LOgotICAgICAgICAg ICAgaWYgKCh5ID0gY21rZXkoYWRseHRhYixuYWRseHRhYiwiIiwiIiwgeHhzdHJpbmcpKSA8IDAp Ci0gICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgIHN3aXRjaCAoeSkgewotICAg ICAgICAgICAgICBjYXNlIFRBRF9YX0MwOgotICAgICAgICAgICAgICAgIGlmICgoeSA9IGNta2V5 KGFkbGMwdGFiLG5hZGxjMHRhYiwiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi cHJvY2Vzc2VkLWJ5LWVtdWxhdG9yIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICAg IHJldHVybih5KTsKLSAgICAgICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAg ICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICAgICAgYWRsX2tjMCA9IHk7Ci0g ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgVEFEX1hfREVURUNUOgot ICAgICAgICAgICAgICAgIGlmICgoeSA9IGNta2V5KGFkbGR0YWIsbmFkbGR0YWIsIiIsInBhY2tl dCIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAg ICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgICAgICAgICAgcmV0dXJu KHgpOwotICAgICAgICAgICAgICAgIGFkbF9rbW9kZSA9IHk7Ci0gICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAgIGNhc2UgVEFEX1hfU1RSOgotICAgICAgICAgICAgICAgIGlmICgo eSA9IGNtdHh0KCJLZXJtaXQgc3RhcnQgc3RyaW5nIiwiS0VSTUlUIFJFQURZIFRPIFNFTkQuLi4i LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzLHh4c3RyaW5nKSkgPCAwKQotICAg ICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAgIGZyZWUoYWRsX2tzdHIp OwotICAgICAgICAgICAgICAgIGFkbF9rc3RyID0gc3RyZHVwKHMpOwotICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBj YXNlIFRBRF9aOgotICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkoYWRseHRhYixuYWRseHRhYiwi IiwiIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAg ICAgc3dpdGNoICh5KSB7Ci0gICAgICAgICAgICAgIGNhc2UgVEFEX1hfQzA6Ci0gICAgICAgICAg ICAgICAgaWYgKCh5ID0gY21rZXkoYWRsYzB0YWIsbmFkbGMwdGFiLCIiLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJwcm9jZXNzZWQtYnktZW11bGF0b3IiLHh4c3RyaW5nKSkgPCAw KQotICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAgIGlmICgoeCA9 IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAg ICAgICBhZGxfemMwID0geTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg Y2FzZSBUQURfWF9ERVRFQ1Q6Ci0gICAgICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkoYWRsZHRh YixuYWRsZHRhYiwiIiwicGFja2V0Iix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICAg IHJldHVybih5KTsKLSAgICAgICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAg ICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICAgICAgYWRsX3ptb2RlID0geTsK LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBUQURfWF9TVFI6Ci0g ICAgICAgICAgICAgICAgaWYgKCh5ID0gY210eHQoIiIsInJ6XFx7MTN9Iiwmcyx4eHN0cmluZykp IDwgMCkKLSAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgICAgICBmcmVl KGFkbF96c3RyKTsKLSAgICAgICAgICAgICAgICBhZGxfenN0ciA9IHN0cmR1cChzKTsKLSAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotI2Vu ZGlmIC8qIE9TMiAqLwotICAgICAgICB9Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0K LSNlbmRpZiAvKiBDS19BVVRPREwgKi8KLSNlbmRpZiAvKiBDS19BUEMgKi8KLQotI2lmZGVmIE9T MgotICAgICAgY2FzZSBYWVRCRUw6Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gc2V0YmVsbCgp KTsKLQotICAgICAgY2FzZSBYWVRNQkVMOiAgICAgICAgICAgICAgICAgICAgIC8qIE1BUkdJTi1C RUxMICovCi0gICAgICAgIGlmICgoeSA9IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykp IDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBpZiAoeSkgeyAgICAgICAgICAgICAgICAgICAgICAg IC8qIE9OICovCi0gICAgICAgICAgICBpZiAoKHogPSBjbW51bSgiQ29sdW1uIGF0IHdoaWNoIHRv IHNldCBtYXJnaW4gYmVsbCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiNzIiLDEwLCZ4 LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeik7Ci0gICAgICAgIH0KLSAg ICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeik7Ci0gICAgICAgIG1hcmdpbmJl bGwgPSB5OwotICAgICAgICBtYXJnaW5iZWxsY29sID0geDsKLSAgICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSAxKTsKLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIENLVElETEUKLSAgICAgIGNhc2Ug WFlUSURMRTogICAgICAgICAgICAgICAgICAgICAvKiBJRExFLVNFTkQgKi8KLSAgICAgIGNhc2Ug WFlUSVRNTzogICAgICAgICAgICAgICAgICAgICAvKiBJRExFLVRJTUVPVVQgKi8KLSAgICAgICAg aWYgKCh6ID0gY21udW0oInNlY29uZHMgb2YgaWRsZSB0aW1lIHRvIHdhaXQsIG9yIDAgdG8gZGlz YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICIwIiwxMCwmeCx4eHN0cmluZykpIDwgMCkK LSAgICAgICAgICByZXR1cm4oeik7Ci0gICAgICAgIGlmICh5ID09IFhZVElETEUpIHsKLSAgICAg ICAgICAgIGlmICgoeSA9IGNtdHh0KCJzdHJpbmcgdG8gc2VuZCwgbWF5IGNvbnRhaW4ga3ZlcmJz IGFuZCB2YXJpYWJsZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxcdihuZXdsaW5l KSIsJnMseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAg ICAgIHR0X2lkbGVzbmRfdG1vID0geDsgICAgICAgICAvKiAob2xkKSAqLwotICAgICAgICAgICAg dHRfaWRsZWxpbWl0ID0geDsgICAgICAgICAgIC8qIChuZXcpICovCi0gICAgICAgICAgICBtYWtl c3RyKCZ0dF9pZGxlc3RyLGJyc3RyaXAocykpOyAvKiAobmV3KSAqLwotICAgICAgICAgICAgdHRf aWRsZXNuZF9zdHIgPSB0dF9pZGxlc3RyOyAvKiAob2xkKSAqLwotICAgICAgICAgICAgdHRfaWRs ZWFjdCA9IElETEVfT1VUOyAgICAgIC8qIChuZXcpICovCi0gICAgICAgIH0gZWxzZSB7Ci0gICAg ICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih5KTsK LSAgICAgICAgICAgIHR0X2lkbGVsaW1pdCA9IHg7Ci0gICAgICAgIH0KLSNpZmRlZiBPUzIKLSAg ICAgICAgcHV0ZXJyb3IoVlRFUk0pOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDEpOwotCi0gICAgICBjYXNlIFhZVElBQ1Q6IHsgICAgICAgICAgICAgICAgICAg LyogU0VUIFRFUk0gSURMRS1BQ1RJT04gKi8KLSAgICAgICAgICBpZiAoKHkgPSBjbWtleShpZGxh Y3RzLG5pZGxhY3RzLCIiLCIiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuKHkp OwotICAgICAgICAgIGlmICh5ID09IElETEVfT1VUKSB7Ci0gICAgICAgICAgICAgIGlmICgoeCA9 IGNtdHh0KCJzdHJpbmcgdG8gc2VuZCwgbWF5IGNvbnRhaW4ga3ZlcmJzIGFuZCB2YXJpYWJsZXMi Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIiIsJnMseHhzdHJpbmcpKSA8IDApCi0g ICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgICBtYWtlc3RyKCZ0dF9pZGxl c3RyLGJyc3RyaXAocykpOyAvKiAobmV3KSAqLwotICAgICAgICAgICAgICB0dF9pZGxlc25kX3N0 ciA9IHR0X2lkbGVzdHI7IC8qIChvbGQpICovCi0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybih4KTsK LSAgICAgICAgICB9Ci0gICAgICAgICAgdHRfaWRsZWFjdCA9IHk7Ci0gICAgICAgICAgcmV0dXJu KHN1Y2Nlc3MgPSAxKTsKLSAgICAgIH0KLSNlbmRpZiAvKiBDS1RJRExFICovCi0KLSAgICAgIGNh c2UgWFlUREVCOiAgICAgICAgICAgICAgICAgICAgICAvKiBURVJNSU5BTCBERUJVRyAqLwotICAg ICAgICB5ID0gc2V0b24oJngpOyAgICAgICAgICAgICAgICAgIC8qIEdvIHBhcnNlIE9OIG9yIE9G RiAqLwotICAgICAgICBpZiAoeSA+IDApICAgICAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQg c3VjY2VlZGVkPyAqLwotICAgICAgICAgIHNldGRlYnNlcyh4KTsKLSAgICAgICAgcmV0dXJuKHkp OwotCi0jaWZkZWYgT1MyCi0gICAgICBjYXNlIFhZVEFTQ1JMOiAgICAgICAgICAgICAgICAgICAg LyogU0VUIFRFUk1JTkFMIEFVVE9TQ1JPTEwgKi8KLSAgICAgICAgICB5ID0gc2V0b24oJmF1dG9z Y3JvbGwpOwotICAgICAgICAgIHJldHVybih5KTsKLQotICAgICAgY2FzZSBYWVRBUEFHRTogICAg ICAgICAgICAgICAgICAgIC8qIFNFVCBURVJNSU5BTCBBVVRPUEFHRSAqLwotICAgICAgICAgIHkg PSBzZXRvbigmd3lfYXV0b3BhZ2UpOwotICAgICAgICAgIHJldHVybih5KTsKLQotICAgICAgY2Fz ZSBYWVRST0w6ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBURVJNSU5BTCBST0xMICovCi0g ICAgICAgIGlmICgoeSA9IGNta2V5KHJvbGx0YWIsbnJvbGwsInNjcm9sbGJhY2sgbW9kZSIsImlu c2VydCIseHhzdHJpbmcpKTwwKQotCSAgcmV0dXJuKHkpOwotCWlmICh5ID09IFRUUl9LRVlTKSB7 Ci0JICAgIGlmICgoeCA9IGNta2V5KHJvbGxrZXl0YWIsbnJvbGxrZXksIiIsInNlbmQiLHh4c3Ry aW5nKSk8MCkKLQkgICAgICByZXR1cm4oeCk7Ci0JICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkg cmV0dXJuKHopOwotCSAgICB0dF9ya2V5c1tWVEVSTV0gPSB4OwotCX0gZWxzZSB7Ci0JICAgIGlm ICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotCSAgICB0dF9yb2xsW1ZURVJNXSA9IHk7 Ci0JfQotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0gICAgICBjYXNlIFhZVENUUzog ICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFRFUk1JTkFMIFRSQU5TTUlULVRJTUVPVVQgKi8K LSAgICAgICAgeSA9IGNtbnVtKCJNYXhpbXVtIHNlY29uZHMgdG8gYWxsb3cgQ1RTIG9mZiBkdXJp bmcgQ09OTkVDVCIsCi0gICAgICAgICAgICAgICAgICAiNSIsMTAsJngseHhzdHJpbmcpOwotICAg ICAgICByZXR1cm4oc2V0bnVtKCZ0dF9jdHN0bW8seCx5LDEwMDAwKSk7Ci0KLSAgICAgIGNhc2Ug WFlUQ1BHOiB7ICAgICAgICAgICAgICAgICAgICAvKiBTRVQgVEVSTUlOQUwgQ09ERS1QQUdFICov Ci0gICAgICAgIGludCBpOwotICAgICAgICBpbnQgY3AgPSAtMTsKLSAgICAgICAgeSA9IGNtbnVt KCJQQyBjb2RlIHBhZ2UgdG8gdXNlIGR1cmluZyB0ZXJtaW5hbCBlbXVsYXRpb24iLAotICAgICAg ICAgICAgICAgICAgY2tpdG9hKG9zMmdldGNwKCkpLDEwLCZ4LHh4c3RyaW5nKTsKLSAgICAgICAg aWYgKCh4ID0gc2V0bnVtKCZjcCx4LHksMTEwMDApKSA8IDApIHJldHVybih4KTsKLSAgICAgICAg aWYgKG9zMnNldGNwKGNwKSAhPSAxKSB7Ci0jaWZkZWYgTlQKLSAgICAgICAgICAgIGlmIChpc1dp bjk1KCkpCi0gICAgICAgICAgICAgIHByaW50ZigKLSAgICAgICAgICAgICAgICAgIlNvcnJ5LCBX aW5kb3dzIDk1IGRvZXMgbm90IHN1cHBvcnQgY29kZSBwYWdlIHN3aXRjaGluZ1xuIik7Ci0gICAg ICAgICAgICBlbHNlCi0jZW5kaWYgLyogTlQgKi8KLSAgICAgICAgICAgICAgcHJpbnRmKAotICAg ICAgICAgICAgICAgICAiU29ycnksICVkIGlzIG5vdCBhIHZhbGlkIGNvZGUgcGFnZSBmb3IgdGhp cyBzeXN0ZW0uXG4iLGNwKTsKLSAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0KLSAg ICAvKiBGb3JjZSB0aGUgdGVybWluYWwgY2hhcmFjdGVyLXNldHMgY29udmVyc2lvbnMgdG8gYmUg dXBkYXRlZCAqLwotICAgICAgICBmb3IgKCBpID0gMDsgaSA8IDQ7IGkrKyApCi0gICAgICAgICAg R1tpXS5pbml0ID0gVFJVRTsKLSAgICAgICAgcmV0dXJuKDEpOwotICAgIH0KLQotICAgICAgY2Fz ZSBYWVRQQUM6ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBURVJNSU5BTCBPVVRQVVQtUEFD SU5HICovCi0gICAgICAgIHkgPSBjbW51bSgKLSAgICAgICAgICAgIlBhdXNlIGJldHdlZW4gc2Vu ZGluZyBlYWNoIGNoYXJhY3RlciBkdXJpbmcgQ09OTkVDVCwgbWlsbGlzZWNvbmRzIiwKLSAgICAg ICAgICAgICAgICAgICItMSIsMTAsJngseHhzdHJpbmcpOwotICAgICAgICByZXR1cm4oc2V0bnVt KCZ0dF9wYWNpbmcseCx5LDEwMDAwKSk7Ci0KLSNpZmRlZiBPUzJNT1VTRQotICAgICAgY2FzZSBY WVRNT1U6IHsgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBURVJNSU5BTCBNT1VTRSAqLwotICAg ICAgICAgIGludCBvbGRfbW91ID0gdHRfbW91c2U7Ci0gICAgICAgICAgaWYgKCh4ID0gc2V0b24o JnR0X21vdXNlKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgIGlmICh0 dF9tb3VzZSAhPSBvbGRfbW91KQotICAgICAgICAgICAgaWYgKHR0X21vdXNlKQotICAgICAgICAg ICAgICBvczJfbW91c2VvbigpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBvczJf bW91c2VvZmYoKTsKLSAgICAgICAgICByZXR1cm4oMSk7Ci0gICAgICB9Ci0jZW5kaWYgLyogT1My TU9VU0UgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgICAgY2FzZSBYWVRXSUQ6IHsKLSAgICAg ICAgICBpZiAoKHkgPSBjbW51bSgKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAgICAgICAg ICAibnVtYmVyIG9mIGNvbHVtbnMgaW4gZGlzcGxheSB3aW5kb3cgZHVyaW5nIENPTk5FQ1QiLAot I2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAibnVtYmVyIG9mIGNvbHVtbnMgb24geW91 ciBzY3JlZW4iLAotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICI4 MCIsMTAsJngseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAg ICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0jaWZkZWYgT1MyCi0gICAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSBvczJfc2V0dGVybXdpZHRoKHgpKTsKLSNlbHNlICAvKiBOb3Qg T1MvMiAqLwotICAgICAgICAgIHR0X2NvbHMgPSB4OwotICAgICAgICAgIHJldHVybihzdWNjZXNz ID0gMSk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICB9Ci0KLSAgICAgIGNhc2UgWFlUSElHOgot ICAgICAgICBpZiAoKHkgPSBjbW51bSgKLSNpZmRlZiBPUzIKLSAibnVtYmVyIG9mIHJvd3MgaW4g ZGlzcGxheSB3aW5kb3cgZHVyaW5nIENPTk5FQ1QsIG5vdCBpbmNsdWRpbmcgc3RhdHVzIGxpbmUi LAotIHR0X3N0YXR1c1tWVEVSTV0/IjI0IjoiMjUiLAotI2Vsc2UKLSAiMjQiLCJudW1iZXIgb2Yg cm93cyBvbiB5b3VyIHNjcmVlbiIsCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAg ICAgICAgIDEwLCZ4LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih5KTsKLSAgICAg ICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0KLSNpZmRlZiBPUzIKLSAgICAg ICAgcmV0dXJuIChzdWNjZXNzID0gb3MyX3NldHRlcm1oZWlnaHQoeCkpOwotI2Vsc2UgIC8qIE5v dCBPUy8yICovCi0gICAgICAgIHR0X3Jvd3MgPSB4OwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDEpOwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgT1MyCi0gICAgICBjYXNlIFhZVFBSTjog eyAgICAgICAgICAgICAgICAgICAgLyogUHJpbnQgTW9kZSAqLwotICAgICAgICAgIGV4dGVybiBi b29sIHhwcmludCwgYXByaW50LCBjcHJpbnQsIHVwcmludDsKLSAgICAgICAgICBpZiAoKHkgPSBj bWtleShwcm5tdGFiLG5wcm5tdGFiLCIiLCJvZmYiLCB4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkp OwotICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICAg IHN3aXRjaCAoeSkgewotICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICBpZiAoY3By aW50IHx8IHVwcmludCB8fCBhcHJpbnQgfHwgeHByaW50KQotICAgICAgICAgICAgICAgIHByaW50 ZXJvZmYoKTsKLSAgICAgICAgICAgICAgY3ByaW50ID0geHByaW50ID0gdXByaW50ID0gMDsKLSAg ICAgICAgICAgICAgc2V0YXByaW50KDApOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgaWYgKCEoY3ByaW50IHx8IHVwcmludCB8fCBhcHJp bnQgfHwgeHByaW50KSkKLSAgICAgICAgICAgICAgICBwcmludGVyb24oKTsKLSAgICAgICAgICAg ICAgc2V0YXByaW50KDEpOwotICAgICAgICAgICAgICBjcHJpbnQgPSB4cHJpbnQgPSB1cHJpbnQg PSAwOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAg ICAgICAgaWYgKCEoY3ByaW50IHx8IHVwcmludCB8fCBhcHJpbnQgfHwgeHByaW50KSkKLSAgICAg ICAgICAgICAgICBwcmludGVyb24oKTsKLSAgICAgICAgICAgICAgY3ByaW50ID0gMTsKLSAgICAg ICAgICAgICAgc2V0YXByaW50KDApOwotCSAgICAgIHhwcmludCA9IHVwcmludCA9IDA7Ci0gICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgICBpZiAo IShjcHJpbnQgfHwgdXByaW50IHx8IGFwcmludCB8fCB4cHJpbnQpKQotICAgICAgICAgICAgICAg IHByaW50ZXJvbigpOwotICAgICAgICAgICAgICB1cHJpbnQgPSAxOwotICAgICAgICAgICAgICBz ZXRhcHJpbnQoMCk7Ci0gICAgICAgICAgICAgIHhwcmludCA9IGNwcmludCA9IDA7Ci0gICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4oMSk7Ci0gICAgICB9 Ci0jZWxzZQotI2lmZGVmIFhQUklOVAotICAgICAgY2FzZSBYWVRQUk46IHsKLSAgICAgICAgICBl eHRlcm4gaW50IHR0X3ByaW50OwotICAgICAgICAgIGlmICgoeCA9IHNldG9uKCZ0dF9wcmludCkp IDwgMCkKLSAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDEpOwotICAgICAgfQotI2VuZGlmIC8qIFhQUklOVCAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0j aWZkZWYgT1MyCi0gICAgICBjYXNlIFhZVFNDTk06IHsKLSAgICAgICAgICBleHRlcm4gaW50IGRl Y3Njbm0sIGRlY3Njbm1fdXNyOwotICAgICAgICAgIGlmICgoeSA9IGNta2V5KG5vcm1yZXYsNCwi IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkZWNzY25tX3Vzcj8icmV2ZXJzZSI6Im5vcm1h bCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpCi0gICAgICAgICAgICAgICAp IDwgMCkKLSAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICBpZiAoKHggPSBjbWNmbSgp KSA8IDApIHJldHVybih4KTsKLSAgICAgICAgICBkZWNzY25tX3VzciA9IHk7Ci0gICAgICAgICAg aWYgKGRlY3Njbm0gIT0gZGVjc2NubV91c3IpCi0gICAgICAgICAgICBmbGlwc2NyZWVuKFZURVJN KTsKLSAgICAgICAgICByZXR1cm4oMSk7Ci0gICAgfQotICAgIGNhc2UgWFlUT1BUSToKLSAgICAg ICAgaWYgKCh5ID0gY21rZXkob25vZmYsMiwiIix0dF9kaWZmX3VwZD8ib24iOiJvZmYiLAotICAg ICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAg aWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIHR0X2RpZmZfdXBkID0g eTsKLSAgICAgICAgcmV0dXJuKDEpOwotICAgIGNhc2UgWFlUVVBEOiB7Ci0gICAgICAgIGludCBt b2RlLCBkZWxheTsKLSAgICAgICAgaWYgKChtb2RlID0gY21rZXkoc2NybnVwZCxuc2NybnVwZCwi IiwiZmFzdCIseHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAgICAgIHJldHVybihtb2RlKTsKLSAg ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHkgPSBjbW51bSgKLSAgICAgICAgICAgICJQYXVz ZSBiZXR3ZWVuIEZBU1Qgc2NyZWVuIHVwZGF0ZXMgaW4gQ09OTkVDVCBtb2RlLCBtaWxsaXNlY29u ZHMiLAotICAgICAgICAgICAgICAgICAgICAgICIxMDAiLDEwLCZ4LHh4c3RyaW5nCi0gICAgICAg ICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGlmICh4IDwgMCB8fCB4ID4gMTAwMCApIHsK LSAgICAgICAgICAgICAgICBwcmludGYoCi0gICAgICAgICAgICAiXG4/VGhlIHVwZGF0ZSByYXRl IG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxMDAwIG1pbGxpc2Vjb25kcy5cbiIKLSAgICAgICAgICAg ICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAg ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7 Ci0KLSAgICAgICAgICAgIHVwZG1vZGUgPSB0dF91cGRtb2RlID0gbW9kZTsKLSAgICAgICAgICAg IHJldHVybihzZXRudW0oJnR0X3VwZGF0ZSx4LHksMTAwMDApKTsKLSAgICAgICAgfQotICAgIH0K LSAgICBjYXNlIFhZVENUUkw6Ci0gICAgICAgICAgaWYgKCh4ID0gY21rZXkodGVybWN0cmwsbnRl cm1jdHJsLCIiLCI3Iix4eHN0cmluZykpIDwgMCkgewotICAgICAgICAgICAgICByZXR1cm4oeCk7 Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAw KQotICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICBzd2l0Y2ggKCB4 ICkgewotICAgICAgICAgICAgICBjYXNlIDg6Ci0gICAgICAgICAgICAgICAgICBzZW5kX2MxID0g c2VuZF9jMV91c3IgPSBUUlVFOwotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICAgIGNhc2UgNzoKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgIHNl bmRfYzEgPSBzZW5kX2MxX3VzciA9IEZBTFNFOwotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBU UlVFKTsKLSAgICAgICAgICBicmVhazsKLQotI2lmZGVmIFBDRk9OVFMKLSAgICAgIGNhc2UgWFlU Rk9OOgotICAgICAgICBpZiAoICFJc09TMkZ1bGxTY3JlZW4oKSApIHsKLSAgICAgICAgICAgIHBy aW50ZigKLSAgICAgICAgIlxuP1NFVCBURVJNSU5BTCBGT05UIGlzIG9ubHkgc3VwcG9ydGVkIGlu IEZ1bGwgU2NyZWVuIHNlc3Npb25zLlxuIik7Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IEZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgoeCA9IGNta2V5KHRlcm1fZm9udCxu dGVybWZvbnQsIiIsImRlZmF1bHQiLHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICByZXR1 cm4oeCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8 IDApIHJldHVybih5KTsKLSAgICAgICAgICAgIGlmICggIW9zMkxvYWRQQ0ZvbnRzKCkgKSB7Ci0g ICAgICAgICAgICAgICAgdHRfZm9udCA9IHg7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSBUUlVFKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRm KAotICAgICAgIlxuP1BDRk9OVFMuRExMIGlzIG5vdCBhdmFpbGFibGUgaW4gQ0tFUk1JVCBleGVj dXRhYmxlIGRpcmVjdG9yeS5cbiIpOwotICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0g RkFMU0UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotI2Vsc2Ug LyogUENGT05UUyAqLwotI2lmZGVmIE5UCi0jaWZkZWYgS1VJCi0gICAgY2FzZSBYWVRGT046Ci0g ICAgICAgIHJldHVybihzZXRndWlmb250KCkpOyAgICAgICAgICAgLyogY2t1dXMzLmMgKi8KLSNl bmRpZiAvKiBLVUkgKi8KLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIFBDRk9OVFMgKi8KLQot ICAgICAgY2FzZSBYWVRWQ0g6IHsKLSAgICAgICAgICBleHRlcm4gaW50IHBoZWlnaHQsIG1hcmdp bmJvdCwgY21kX3Jvd3MsIGNtZF9jb2xzOwotICAgICAgICAgIGlmICgoeCA9IGNta2V5KHR2Y3Rh YixudHZjdGFiLCIiLGlzV2luOTUoKT8id2luOTUtc2FmZSI6ImVuYWJsZWQiLAotICAgICAgICAg ICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuKHgpOwot ICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotI2lmbmRlZiBLVUkK LSAgICAgICAgICBpZiAoeCAhPSB0dF9tb2RlY2hnKSB7Ci0gICAgICAgICAgICAgIHN3aXRjaCAo eCkgewotICAgICAgICAgICAgICAgIGNhc2UgVFZDX0RJUzoKLSAgICAgICAgICAgICAgICAgIC8q IFdoZW4gZGlzYWJsZWQgdGhlIGhlaWdodHMgb2YgYWxsIG9mIHRoZSB2aXJ0dWFsIHNjcmVlbnMg Ki8KLSAgICAgICAgICAgICAgICAgIC8qIG11c3QgYmUgZXF1YWwgdG8gdGhlIHBoeXNpY2FsIGhl aWdodCBvZiB0aGUgY29uc29sZSAgICAgKi8KLSAgICAgICAgICAgICAgICAgIC8qIHdpbmRvdyBh bmQgbWF5IG5vdCBiZSBjaGFuZ2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAg ICAgICAgICAgICAgIC8qIFRoZSB3aWR0aCBvZiB0aGUgd2luZG93IG1heSBub3QgYmUgYWx0ZXJl ZC4gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgIHR0X21vZGVjaGcgPSBUVkNfRU5B OyAgICAgICAgICAgICAgICAgLyogVGVtcG9yYXJ5ICovCi0gICAgICAgICAgICAgICAgICBpZiAo bWFyZ2luYm90ID4gcGhlaWdodC0odHRfc3RhdHVzW1ZURVJNXT8xOjApKQotICAgICAgICAgICAg ICAgICAgICBtYXJnaW5ib3QgPSBwaGVpZ2h0LSh0dF9zdGF0dXNbVlRFUk1dPzE6MCk7Ci0gICAg ICAgICAgICAgICAgICB0dF9zemNobmdbVkNNRF0gPSAxIDsKLSAgICAgICAgICAgICAgICAgIHR0 X3Jvd3NbVkNNRF0gPSBwaGVpZ2h0OwotICAgICAgICAgICAgICAgICAgVnNjcm5Jbml0KFZDTUQp OwotICAgICAgICAgICAgICAgICAgU2V0Q29scyhWQ01EKTsKLSAgICAgICAgICAgICAgICAgIGNt ZF9yb3dzID0geTsKLQotICAgICAgICAgICAgICAgICAgdHRfc3pjaG5nW1ZURVJNXSA9IDIgOwot ICAgICAgICAgICAgICAgICAgdHRfcm93c1tWVEVSTV0gPSBwaGVpZ2h0IC0gKHR0X3N0YXR1c1tW VEVSTV0/MTowKTsKLSAgICAgICAgICAgICAgICAgIFZzY3JuSW5pdChWVEVSTSk7Ci0KLSAgICAg ICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBUVkNfRU5BOgotICAg ICAgICAgICAgICAgICAgLyogV2hlbiBlbmFibGVkIHRoZSBwaHlzaWNhbCBoZWlnaHQgb2YgdGhl IGNvbnNvbGUgd2luZG93cyAqLwotICAgICAgICAgICAgICAgICAgLyogc2hvdWxkIGJlIGFkanVz dGVkIHRvIHRoZSBoZWlnaHQgb2YgdGhlIHZpcnR1YWwgc2NyZWVuICAqLwotICAgICAgICAgICAg ICAgICAgLyogVGhlIHdpZHRoIG1heSBiZSBzZXQgdG8gYW55dGhpbmcuICAgICAgICAgICAgICAg ICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgLyogbm90aGluZyB0byBkbyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0KLSAgICAgICAgICAgICAgY2FzZSBUVkNfVzk1OgotICAgICAgICAgICAgICAgICAgLyog V2luOTUtc2FmZSBtb2RlIGFsbG93cyB0aGUgcGh5c2ljYWwgaGVpZ2h0IHRvIGNoYW5nZSAgICAq LwotICAgICAgICAgICAgICAgICAgLyogYnV0IHJlc3RyaWN0cyBpdCB0byBhIHdpZHRoIG9mIDgw IGFuZCBhIGhlaWdodCBlcXVhbCB0byAqLwotICAgICAgICAgICAgICAgICAgLyogMjUsIDQzLCBv ciA1MC4gIE11c3QgYmUgYWRqdXN0ZWQgbm93LiAgICAgICAgICAgICAgICAgICAqLwotICAgICAg ICAgICAgICAgICAgLyogVGhlIHZpcnR1YWwgaGVpZ2h0cyBtdXN0IGJlIGVxdWFsIHRvIHRoZSBh Ym92ZS4gICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgaWYgKHBoZWlnaHQgIT0gMjUgJiYg cGhlaWdodCAhPSA0MyAmJiBwaGVpZ2h0ICE9IDUwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg aWYgKHBoZWlnaHQgPCAyNSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHkgPSAyNTsKLSAgICAg ICAgICAgICAgICAgICAgICBlbHNlIGlmIChwaGVpZ2h0IDwgNDMpCi0gICAgICAgICAgICAgICAg ICAgICAgICB5ID0gNDM7Ci0gICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg ICAgICAgICAgICAgeSA9IDUwOwotICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg ICAgICAgICAgIHkgPSBwaGVpZ2h0OwotCi0gICAgICAgICAgICAgICAgICB0dF9tb2RlY2hnID0g VFZDX0VOQTsgLyogVGVtcG9yYXJ5ICovCi0KLSAgICAgICAgICAgICAgICAgIHR0X3N6Y2huZ1tW Q01EXSA9IDE7Ci0gICAgICAgICAgICAgICAgICB0dF9yb3dzW1ZDTURdID0geTsKLSAgICAgICAg ICAgICAgICAgIHR0X2NvbHNbVkNNRF0gPSA4MDsKLSAgICAgICAgICAgICAgICAgIFZzY3JuSW5p dChWQ01EKTsKLSAgICAgICAgICAgICAgICAgIFNldENvbHMoVkNNRCk7Ci0gICAgICAgICAgICAg ICAgICBjbWRfcm93cyA9IHk7Ci0gICAgICAgICAgICAgICAgICBjbWRfY29scyA9IDgwOwotCi0g ICAgICAgICAgICAgICAgICBtYXJnaW5ib3QgPSB5LSh0dF9zdGF0dXNbVlRFUk1dPzE6MCk7Ci0g ICAgICAgICAgICAgICAgICB0dF9zemNobmdbVlRFUk1dID0gMjsKLSAgICAgICAgICAgICAgICAg IHR0X3Jvd3NbVlRFUk1dID0geSAtICh0dF9zdGF0dXNbVlRFUk1dPzE6MCk7Ci0gICAgICAgICAg ICAgICAgICB0dF9jb2xzW1ZURVJNXSA9IDgwOwotICAgICAgICAgICAgICAgICAgVnNjcm5Jbml0 KFZURVJNKTsKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgIHR0X21vZGVjaGcgPSB4OwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDEpOwotI2Vsc2UKLSAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotI2Vu ZGlmIC8qIEtVSSAqLwotICAgICAgfQotICAgICAgY2FzZSBYWVRTVEFUOiB7Ci0gICAgICAgICAg ZXh0ZXJuIGludCBtYXJnaW5ib3Q7Ci0gICAgICAgICAgaWYgKCh5ID0gY21rZXkob25vZmYsMiwi Iiwib24iLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgICAgaWYgKCh4ID0gY21j Zm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgICAgaWYgKHkgIT0gdHRfc3RhdHVzW1ZURVJN XSB8fCB5ICE9IHR0X3N0YXR1c191c3JbVlRFUk1dKSB7Ci0gICAgICAgICAgICAgIC8qIE1pZ2h0 IG5lZWQgdG8gZml4dXAgdGhlIG1hcmdpbnMgKi8KLSAgICAgICAgICAgICAgaWYgKCBtYXJnaW5i b3QgPT0gVnNjcm5HZXRIZWlnaHQoVlRFUk0pLSh0dF9zdGF0dXNbVlRFUk1dPzE6MCkgKQotICAg ICAgICAgICAgICAgIGlmICh5KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1hcmdpbmJvdC0tOwot ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG1hcmdpbmJvdCsr OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgdHRfc3RhdHVzX3VzcltWVEVSTV0g PSB0dF9zdGF0dXNbVlRFUk1dID0geTsKLSAgICAgICAgICAgICAgaWYgKHkpIHsKLSAgICAgICAg ICAgICAgICAgICAgdHRfc3pjaG5nW1ZURVJNXSA9IDI7Ci0gICAgICAgICAgICAgICAgICAgIHR0 X3Jvd3NbVlRFUk1dLS07Ci0gICAgICAgICAgICAgICAgICAgIFZzY3JuSW5pdChWVEVSTSk7ICAv KiBIZWlnaHQgc2V0IGhlcmUgKi8KLSNpZmRlZiBUTkNPREUKLSAgICAgICAgICAgICAgICAgICAg aWYgKFRFTE9QVF9NRShURUxPUFRfTkFXUykpCi0gICAgICAgICAgICAgICAgICAgICAgdG5fc25h d3MoKTsKLSNlbmRpZiAvKiBUTkNPREUgKi8KLSNpZmRlZiBSTE9HQ09ERQotICAgICAgICAgICAg ICAgICAgICBpZiAoVEVMT1BUX01FKFRFTE9QVF9OQVdTKSkKLSAgICAgICAgICAgICAgICAgICAg ICBybG9nX25hd3MoKTsKLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotI2lmZGVmIFNTSEJVSUxUSU4K LSAgICAgICAgICAgICAgICAgICAgaWYgKFRFTE9QVF9NRShURUxPUFRfTkFXUykpCi0gICAgICAg ICAgICAgICAgICAgICAgc3NoX3NuYXdzKCk7Ci0jZW5kaWYgLyogU1NIQlVJTFRJTiAqLwotICAg ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgdHRfc3pjaG5nW1ZURVJNXSA9 IDE7Ci0gICAgICAgICAgICAgICAgICB0dF9yb3dzW1ZURVJNXSsrOwotICAgICAgICAgICAgICAg ICAgVnNjcm5Jbml0KFZURVJNKTsgICAgIC8qIEhlaWdodCBzZXQgaGVyZSAqLwotI2lmZGVmIFRO Q09ERQotICAgICAgICAgICAgICAgICAgaWYgKFRFTE9QVF9NRShURUxPUFRfTkFXUykpCi0gICAg ICAgICAgICAgICAgICAgIHRuX3NuYXdzKCk7Ci0jZW5kaWYgLyogVE5DT0RFICovCi0jaWZkZWYg UkxPR0NPREUKLSAgICAgICAgICAgICAgICAgIGlmIChURUxPUFRfTUUoVEVMT1BUX05BV1MpKQot ICAgICAgICAgICAgICAgICAgICBybG9nX25hd3MoKTsKLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwot I2lmZGVmIFNTSEJVSUxUSU4KLSAgICAgICAgICAgICAgICAgIGlmIChURUxPUFRfTUUoVEVMT1BU X05BV1MpKQotICAgICAgICAgICAgICAgICAgICBzc2hfc25hd3MoKTsKLSNlbmRpZiAvKiBTU0hC VUlMVElOICovCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJu KDEpOwotICAgICAgfQotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgTlQKLSAgICAgIGNhc2Ug WFlUQVRUQlVHOgotICAgICAgICBpZiAoKHkgPSBjbWtleShvbm9mZiwyLCIiLCJvbiIseHhzdHJp bmcpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1 cm4oeCk7Ci0gICAgICAgIHR0X2F0dHJfYnVnID0geTsKLSAgICAgICAgcmV0dXJuKDEpOwotI2Vu ZGlmIC8qIE5UICovCi0KLSNpZmRlZiBPUzIKLSAgICAgIGNhc2UgWFlUU0dSQzoKLSAgICAgICAg aWYgKCh5ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7 Ci0gICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICBzZ3Jj b2xvcnMgPSB5OwotICAgICAgICByZXR1cm4oMSk7Ci0KLSAgICAgIGNhc2UgWFlUU0VORDoKLSAg ICAgICAgICBpZiAoKHkgPSBjbWtleShvbm9mZiwyLCIiLCJvbiIseHhzdHJpbmcpKSA8IDApIHJl dHVybih5KTsKLSAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAg ICAgICAgICB0dF9zZW5kZGF0YSA9IHk7Ci0gICAgICAgICAgcmV0dXJuKDEpOwotCi0gICAgICBj YXNlIFhZVFNFT0I6Ci0gICAgICAgICAgaWYgKCh5ID0gY21rZXkodHR5c2VvYnRhYiwyLCIiLCJ1 c19jciIseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgICBpZiAoKHggPSBjbWNm bSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgICB3eV9ibG9ja2VuZCA9IHk7Ci0gICAgICAg ICAgcmV0dXJuKDEpOwotCi0gICAgICBjYXNlIFhZVFVSTEhJOiB7Ci0gICAgICAgICAgaW50IGRv bmUgPSAwLCBhdHRyID0gVlRfQ0hBUl9BVFRSX05PUk1BTDsKLQotICAgICAgICAgIGlmICgoeCA9 IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgIHJldHVy bih4KTsKLSAgICAgICAgICBpZiAoeCkgewotICAgICAgICAgICAgICB6ID0gMDsKLSAgICAgICAg ICAgICAgd2hpbGUgKCFkb25lKSB7Ci0gICAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbWtleSh0 dHlwcm90YWIsbnByb3RlY3QsIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6 PyJkb25lIjoicmV2ZXJzZSIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgICAgIHJl dHVybih5KTsKLSAgICAgICAgICAgICAgICAgIHN3aXRjaCAoeSkgewotICAgICAgICAgICAgICAg ICAgICBjYXNlIFRUQVRURE9ORToKLSAgICAgICAgICAgICAgICAgICAgICBkb25lID0gVFJVRTsK LSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBU VEFUVEJMSToKLSAgICAgICAgICAgICAgICAgICAgICBhdHRyIHw9IFZUX0NIQVJfQVRUUl9CTElO SzsKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2Fz ZSBUVEFUVFJFVjoKLSAgICAgICAgICAgICAgICAgICAgICBhdHRyIHw9IFZUX0NIQVJfQVRUUl9S RVZFUlNFOwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg ICBjYXNlIFRUQVRUSVRBOgotICAgICAgICAgICAgICAgICAgICAgIGF0dHIgfD0gVlRfQ0hBUl9B VFRSX0lUQUxJQzsKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg ICAgICAgY2FzZSBUVEFUVFVORDoKLSAgICAgICAgICAgICAgICAgICAgICBhdHRyIHw9IFZUX0NI QVJfQVRUUl9VTkRFUkxJTkU7Ci0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgICAgICAgIGNhc2UgVFRBVFRCTEQ6Ci0gICAgICAgICAgICAgICAgICAgICAgYXR0ciB8 PSBWVF9DSEFSX0FUVFJfQk9MRDsKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgICAgICAgICAgY2FzZSBUVEFUVERJTToKLSAgICAgICAgICAgICAgICAgICAgICBhdHRy IHw9IFZUX0NIQVJfQVRUUl9ESU07Ci0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgICAgICAgIGNhc2UgVFRBVFRJTlY6Ci0gICAgICAgICAgICAgICAgICAgICAgYXR0 ciB8PSBWVF9DSEFSX0FUVFJfSU5WSVNJQkxFOwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgICAgICBjYXNlIFRUQVRUTk9SOgotICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgeiA9IDE7 ICAgICAgICAgICAgICAgIC8qIE9uZSBhdHRyaWJ1dGUgaGFzIGJlZW4gY2hvc2VuICovCi0gICAg ICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAw KSByZXR1cm4oeik7Ci0gICAgICAgICAgc2V0dXJsaGwoeCk7Ci0gICAgICAgICAgaWYgKHgpCi0g ICAgICAgICAgICB0dF91cmxfaGlsaXRlX2F0dHIgPSBhdHRyOwotICAgICAgICAgIHJldHVybigx KTsKLSAgICAgIH0KLSAgICAgIGNhc2UgWFlUQVRUUjoKLSAgICAgICAgaWYgKCh4ID0gY21rZXko dHR5YXR0cnRhYixuYXR0cmliLCIiLCJ1bmRlcmxpbmUiLHh4c3RyaW5nKSkgPCAwKQotICAgICAg ICAgIHJldHVybih4KTsKLSAgICAgICAgc3dpdGNoICh4KSB7Ci0gICAgICAgICAgY2FzZSBUVEFU VEJMSToKLSAgICAgICAgICAgIGlmICgoeSA9IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmlu ZykpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSBy ZXR1cm4oeCk7Ci0gICAgICAgICAgICB0cnVlYmxpbmsgPSB5OwotI2lmbmRlZiBLVUkKLSAgICAg ICAgICAgIGlmICggIXRydWVibGluayAmJiB0cnVldW5kZXJsaW5lICkgewotICAgICAgICAgICAg ICAgIHRydWV1bmRlcmxpbmUgPSAwOwotICAgICAgICAgICAgICAgIHByaW50ZigiV2FybmluZzog VW5kZXJsaW5lIGJlaW5nIHNpbXVsYXRlZCBieSBjb2xvci5cbiIpOwotICAgICAgICAgICAgfQot Ci0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2Ug VFRBVFRESU06Ci0gICAgICAgICAgICBpZiAoKHkgPSBjbWtleShvbm9mZiwyLCIiLCJvbiIseHhz dHJpbmcpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwg MCkgcmV0dXJuKHgpOwotICAgICAgICAgICAgdHJ1ZWRpbSA9IHk7Ci0gICAgICAgICAgICBicmVh azsKLQotICAgICAgICAgIGNhc2UgVFRBVFRSRVY6Ci0gICAgICAgICAgICBpZiAoKHkgPSBjbWtl eShvbm9mZiwyLCIiLCJvbiIseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgICAg IGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICAgICAgdHJ1ZXJldmVy c2UgPSB5OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFRUQVRUVU5EOgot ICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAw KSByZXR1cm4oeSk7Ci0gICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4 KTsKLSAgICAgICAgICAgIHRydWV1bmRlcmxpbmUgPSB5OwotI2lmbmRlZiBLVUkKLSAgICAgICAg ICAgIGlmICghdHJ1ZWJsaW5rICYmIHRydWV1bmRlcmxpbmUpIHsKLSAgICAgICAgICAgICAgICB0 cnVlYmxpbmsgPSAxOwotICAgICAgICAgICAgICAgIHByaW50ZigiV2FybmluZzogVHJ1ZSBibGlu ayBtb2RlIGlzIGFjdGl2ZS5cbiIpOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIEtVSSAqLwot ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFRUQVRUSVRBOgotICAgICAgICAg ICAgICBpZiAoKHkgPSBjbWtleShvbm9mZiwyLCIiLCJvbiIseHhzdHJpbmcpKSA8IDApIHJldHVy bih5KTsKLSAgICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0g ICAgICAgICAgICAgIHRydWVpdGFsaWMgPSB5OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg ICAgICBjYXNlIFRUQVRUUFJPOiB7ICAgICAgLyogU2V0IGRlZmF1bHQgUHJvdGVjdGVkIENoYXJh Y3RlciBhdHRyaWJ1dGUgKi8KLSAgICAgICAgICAgICAgZXh0ZXJuIHZ0YXR0cmliIFdQYXR0cmli OyAgICAvKiBjdXJyZW50IFdQIE1vZGUgQXR0cmliICovCi0gICAgICAgICAgICAgIGV4dGVybiB2 dGF0dHJpYiBkZWZXUGF0dHJpYjsgLyogZGVmYXVsdCBXUCBNb2RlIEF0dHJpYiAqLwotICAgICAg ICAgICAgICB2dGF0dHJpYiB3cGEgPSB7MCwwLDAsMCwwLDEsMCwwLDAsMCwwfTsgICAvKiBQcm90 ZWN0ZWQgKi8KLSAgICAgICAgICAgICAgaW50IGRvbmUgPSAwOwotCi0gICAgICAgICAgICAgIHgg PSAwOwotICAgICAgICAgICAgICB3aGlsZSAoIWRvbmUpIHsKLSAgICAgICAgICAgICAgICAgIGlm ICgoeSA9IGNta2V5KHR0eXByb3RhYixucHJvdGVjdCwiIiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHg/ImRvbmUiOiJkaW0iLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAg ICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgICAgICBzd2l0Y2ggKHkpIHsKLSAgICAg ICAgICAgICAgICAgICAgY2FzZSBUVEFUVE5PUjoKLSAgICAgICAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBUVEFUVEJMSTogICAgICAvKiBCbGlua2luZyBk b2Vzbid0IHdvcmsgKi8KLSAgICAgICAgICAgICAgICAgICAgICB3cGEuYmxpbmtpbmcgPSBUUlVF OwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNl IFRUQVRUUkVWOgotICAgICAgICAgICAgICAgICAgICAgIHdwYS5yZXZlcnNlZCA9IFRSVUU7Ci0g ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVFRB VFRJVEE6Ci0gICAgICAgICAgICAgICAgICAgICAgd3BhLml0YWxpYyA9IFRSVUU7Ci0gICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVFRBVFRVTkQ6 Ci0gICAgICAgICAgICAgICAgICAgICAgd3BhLnVuZGVybGluZWQgPSBUUlVFOwotICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIFRUQVRUQkxEOgot ICAgICAgICAgICAgICAgICAgICAgIHdwYS5ib2xkID0gVFJVRTsKLSAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBUVEFUVERJTToKLSAgICAgICAg ICAgICAgICAgICAgICB3cGEuZGltID0gVFJVRTsKLSAgICAgICAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBUVEFUVElOVjoKLSAgICAgICAgICAgICAgICAg ICAgICB3cGEuaW52aXNpYmxlID0gVFJVRSA7Ci0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVFRBVFRET05FOgotICAgICAgICAgICAgICAgICAg ICAgIGRvbmUgPSBUUlVFOwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgeCA9IDE7ICAgICAgICAgICAgICAgIC8qIE9u ZSBhdHRyaWJ1dGUgaGFzIGJlZW4gY2hvc2VuICovCi0gICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgICAgICAgIFdQ YXR0cmliID0gZGVmV1BhdHRyaWIgPSB3cGE7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4oMSk7Ci0KLSAgICAgIGNhc2UgWFlUS0VZ OiB7ICAgICAgICAgICAgICAgICAgICAvKiBTRVQgVEVSTUlOQUwgS0VZICovCi0gICAgICAgICAg aW50IHQsIHgsIHk7Ci0gICAgICAgICAgaW50IGNsZWFyID0gMCwgZGVmbHQgPSAwOwotICAgICAg ICAgIGludCBjb25maXJtZWQgPSAwOwotICAgICAgICAgIGludCBmbGFnID0gMDsKLSAgICAgICAg ICBpbnQga2MgPSAtMTsgICAgICAgICAgICAgICAgICAvKiBLZXkgY29kZSAqLwotICAgICAgICAg IGludCBsaXRzdHIgPSAwOyAgICAgICAgICAgICAgIC8qIExpdGVyYWwgU3RyaW5nPyAqLwotICAg ICAgICAgIGNoYXIgKnMgPSBOVUxMOyAgICAgICAgICAgICAgIC8qIEtleSBiaW5kaW5nICovCi0j aWZuZGVmIE5PS1ZFUkJTCi0gICAgICAgICAgY2hhciAqcCA9IE5VTEw7ICAgICAgICAgICAgICAg LyogV29ya2VyICovCi0jZW5kaWYgLyogTk9LVkVSQlMgKi8KLSAgICAgICAgICBjb25fZXZlbnQg ZGVmZXZ0OwotICAgICAgICAgIGV4dGVybiBpbnQgb3MyZ2tzOwotICAgICAgICAgIGV4dGVybiBp bnQgbXNra2V5czsKLSAgICAgICAgICBleHRlcm4gaW50IGluaXR2aWs7Ci0gICAgICAgICAgc3Ry dWN0IEZEQiBrdyxzdyxudSxjbTsKLQotICAgICAgICAgIGRlZmV2dC50eXBlID0gZXJyb3I7Ci0K LSAgICAgICAgICBpZiAoKHQgPSBjbWtleSh0dGtleXRhYixudHRrZXksIiIsIiIseHhzdHJpbmcp KSA8IDApCi0gICAgICAgICAgICByZXR1cm4odCk7Ci0gICAgICAgICAgY21mZGJpKCZudSwgICAg ICAgICAgICAgICAgICAgLyogRmlyc3QgRkRCIC0gY29tbWFuZCBzd2l0Y2hlcyAqLwotICAgICAg ICAgICAgICAgICBfQ01OVU0sICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAg ICAgICAgICIvbGl0ZXJhbCwga2V5Y29kZSwgb3IgYWN0aW9uIiwKLSAgICAgICAgICAgICAgICAg IiIsICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICAgICAgICIi LCAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAgICAgICAg ICAgICAgMTAsICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogcmFk aXggKi8KLSAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBu dW1lcmljIGRhdGEgMjogMCAqLwotICAgICAgICAgICAgICAgICB4eHN0cmluZywgICAgICAgICAg ICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KLSAgICAgICAgICAgICAgICAgTlVMTCwgICAg ICAgICAgICAgICAgICAvKiBLZXl3b3JkIHRhYmxlICovCi0gICAgICAgICAgICAgICAgICZzdyAg ICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLwotICAgICAgICAgICAg ICAgICApOyAgICAgICAgICAgICAgICAgICAgIC8qICAqLwotICAgICAgICAgIGNtZmRiaSgmc3cs ICAgICAgICAgICAgICAgICAgIC8qIFNlY29uZCBGREIgLSBzd2l0Y2hlcyAqLwotICAgICAgICAg ICAgICAgICBfQ01LRVksICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgICAg ICAgICIiLAotICAgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1 bHQgKi8KLSAgICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBz dHJpbmcgZGF0YSAqLwotICAgICAgICAgICAgICAgICBuc3RybXN3aXRhYiwgICAgICAgICAgIC8q IGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLwotICAgICAgICAgICAgICAgICA0LCAg ICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kgKi8K LSAgICAgICAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgICAvKiBQcm9jZXNzaW5nIGZ1 bmN0aW9uICovCi0gICAgICAgICAgICAgICAgIHN0cm1zd2l0YWIsICAgICAgICAgICAgLyogS2V5 d29yZCB0YWJsZSAqLwotICAgICAgICAgICAgICAgICAma3cgICAgICAgICAgICAgICAgICAgIC8q IFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KLSAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICBj bWZkYmkoJmt3LCAgICAgICAgICAgICAgICAgICAvKiBUaGlyZCBGREIgLSBjb21tYW5kIHN3aXRj aGVzICovCi0gICAgICAgICAgICAgICAgIF9DTUtFWSwgICAgICAgICAgICAgICAgLyogZmNvZGUg Ki8KLSAgICAgICAgICAgICAgICAgIi9saXRlcmFsLCBrZXljb2RlLCBvciBhY3Rpb24iLAotICAg ICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KLSAgICAg ICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAq LwotICAgICAgICAgICAgICAgICBuc3RybWtleXRhYiwgICAgICAgICAgIC8qIGFkZHRsIG51bWVy aWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLwotICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAg ICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCi0gICAgICAgICAgICAgICAgIHh4c3Ry aW5nLCAgICAgICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotICAgICAgICAgICAg ICAgICBzdHJta2V5dGFiLCAgICAgICAgICAgIC8qIEtleXdvcmQgdGFibGUgKi8KLSAgICAgICAg ICAgICAgICAgJmNtICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICov Ci0gICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgY21mZGJpKCZjbSwgICAgICAgICAgICAg ICAgICAgLyogRmluYWwgRkRCIC0gQ29uZmlybWF0aW9uICovCi0gICAgICAgICAgICAgICAgIF9D TUNGTSwgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KLSAgICAgICAgICAgICAgICAgIiIsCi0g ICAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwotICAg ICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRh ICovCi0gICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVt ZXJpYyBkYXRhIDE6IHRibCBzaXplICovCi0gICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAg ICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLwotICAgICAgICAg ICAgICAgICB4eHN0cmluZywgICAgICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8K LSAgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAvKiBLZXl3b3JkIHRhYmxl ICovCi0gICAgICAgICAgICAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0 byBuZXh0IEZEQiAqLwotICAgICAgICAgICAgICAgICApOwotICAgICAgICAgIHdoaWxlIChrYyA8 IDApIHsKLSAgICAgICAgICAgICAgeCA9IGNtZmRiKCZudSk7ICAgICAgICAgICAvKiBQYXJzZSBz b21ldGhpbmcgKi8KLSAgICAgICAgICAgICAgaWYgKHggPCAwKQotICAgICAgICAgICAgICAgIHJl dHVybih4KTsKLQotICAgICAgICAgICAgICBzd2l0Y2ggKGNtcmVzdWx0LmZjb2RlKSB7Ci0gICAg ICAgICAgICAgICAgY2FzZSBfQ01DRk06Ci0gICAgICAgICAgICAgICAgICBwcmludGYoIiBQcmVz cyBrZXkgdG8gYmUgZGVmaW5lZDogIik7Ci0gICAgICAgICAgICAgICAgICBjb25iaW4oKGNoYXIp ZXNjYXBlKTsgLyogUHV0IHRlcm1pbmFsIGluIGJpbmFyeSBtb2RlICovCi0gICAgICAgICAgICAg ICAgICBvczJna3MgPSAwOyAgICAgICAgICAgLyogVHVybiBvZmYgS3ZlcmIgcHJlcHJvY2Vzc2lu ZyAqLwotICAgICAgICAgICAgICAgICAga2MgPSBjb25na3MoMCk7ICAgICAgIC8qIEdldCBjaGFy YWN0ZXIgb3Igc2NhbiBjb2RlICovCi0gICAgICAgICAgICAgICAgICBvczJna3MgPSAxOyAgICAg ICAgICAgLyogVHVybiBvbiBLdmVyYiBwcmVwcm9jZXNzaW5nICovCi0gICAgICAgICAgICAgICAg ICBjb25jYigoY2hhcillc2NhcGUpOyAgLyogUmVzdG9yZSB0ZXJtaW5hbCB0byBjYnJlYWsgbW9k ZSAqLwotICAgICAgICAgICAgICAgICAgaWYgKGtjIDwgMCkgeyAgICAgICAgIC8qIENoZWNrIGZv ciBlcnJvciAqLwotICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0Vycm9yIHJlYWRpbmcg a2V5XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgICBzaG9rZXljb2RlKGtjLHQpOyAgICAgLyogU2hvdyBj dXJyZW50IGRlZmluaXRpb24gKi8KLSAgICAgICAgICAgICAgICAgIGZsYWcgPSAxOyAgICAgICAg ICAgICAvKiBSZW1lbWJlciBpdCdzIGEgbXVsdGlsaW5lIGNvbW1hbmQgKi8KLSAgICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgX0NNTlVNOgotICAgICAgICAgICAg ICAgICAga2MgPSBjbXJlc3VsdC5ucmVzdWx0OwotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICAgICAgY2FzZSBfQ01LRVk6Ci0gICAgICAgICAgICAgICAgICBpZiAoY21yZXN1 bHQuZmRiYWRkciA9PSAmc3cpIHsgLyogU3dpdGNoICovCi0gICAgICAgICAgICAgICAgICAgICAg aWYgKGNtcmVzdWx0Lm5yZXN1bHQgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpdHN0 ciA9IDE7Ci0gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNtcmVzdWx0LmZkYmFkZHIgPT0g Jmt3KSB7IC8qIEtleXdvcmQgKi8KLSAgICAgICAgICAgICAgICAgICAgICBpZiAoY21yZXN1bHQu bnJlc3VsdCA9PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXIgPSAxOwotICAgICAg ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmx0ID0gMTsK LSAgICAgICAgICAgICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICAgICAgICAgICAgaWYgKGNsZWFy KQotICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJrZXltYXAodCk7Ci0gICAgICAgICAgICAg ICAgICAgICAgZWxzZSBpZiAoZGVmbHQpCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0 a2V5bWFwKHQpOwotICAgICAgICAgICAgICAgICAgICAgIGluaXR2aWsgPSAxOwotICAgICAgICAg ICAgICAgICAgICAgIHJldHVybigxKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgfQotICAgICAgICAgIH0KLQotICAgIC8qIE5vcm1hbCBTRVQgVEVSTUlOQUwgS0VZIDx0ZXJt aW5hbD4gPHNjYW5jb2RlPiA8dmFsdWU+IGNvbW1hbmQuLi4gKi8KLQotICAgICAgICAgIGlmICht c2trZXlzKQotICAgICAgICAgICAga2MgPSBtc2t0b2NrKGtjKTsKLQotICAgICAgICAgIGlmIChr YyA8IDAgfHwga2MgPj0gS01TSVpFKSB7Ci0gICAgICAgICAgICAgIHByaW50ZigiP2tleSBjb2Rl IG11c3QgYmUgYmV0d2VlbiAwIGFuZCAlZFxuIiwgS01TSVpFIC0gMSk7Ci0gICAgICAgICAgICAg IHJldHVybigtOSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChrYyA9PSBlc2NhcGUpIHsK LSAgICAgICAgICAgICAgcHJpbnRmKCJTb3JyeSwgJWQgaXMgdGhlIENPTk5FQ1QtbW9kZSBlc2Nh cGUgY2hhcmFjdGVyXG4iLGtjKTsKLSAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAg ICB9Ci0gICAgICAgICAgd2lkZXJlc3VsdCA9IC0xOwotICAgICAgICAgIGlmIChmbGFnKSB7Ci0g ICAgICAgICAgICAgIGNtc2F2cChwc2F2ZSxQUk9NUFRMKTsKLSAgICAgICAgICAgICAgY21zZXRw KCIgRW50ZXIgbmV3IGRlZmluaXRpb246ICIpOwotICAgICAgICAgICAgICBjbWluaShja3hlY2gp OwotICAgICAgICAgIH0KLSAgICAgICAgZGVmX2FnYWluOgotICAgICAgICAgIGlmIChmbGFnKSBw cm9tcHQoTlVMTCk7Ci0gICAgICAgICAgaWYgKCh5ID0gY210eHQoImtleSBkZWZpbml0aW9uLFxu XAotIG9yIEN0cmwtQyB0byBjYW5jZWwgdGhpcyBjb21tYW5kLFxuXAotIG9yIEVudGVyIHRvIHJl c3RvcmUgZGVmYXVsdCBkZWZpbml0aW9uIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiIiwm cyxOVUxMKSkgPCAwKSB7Ci0gICAgICAgICAgICAgIGlmIChmbGFnKSAgICAgICAgICAgICAgICAg LyogSGFuZGxlIHBhcnNlIGVycm9ycyAqLwotICAgICAgICAgICAgICAgIGdvdG8gZGVmX2FnYWlu OwotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAg ICAgIH0KLSAgICAgICAgICBzID0gYnJzdHJpcChzKTsKLSNpZm5kZWYgTk9LVkVSQlMKLSAgICAg ICAgICBwID0gczsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTYXZlIHRoaXMgcGxhY2UgKi8K LSNlbmRpZiAvKiBOT0tWRVJCUyAqLwotLyoKLSAgSWYgdGhlIGRlZmluaXRpb24gaW5jbHVkZWQg YW55IFxLdmVyYnMsIHF1b3RlIHRoZSBiYWNrc2xhc2ggc28gdGhlIFxLdmVyYgotICB3aWxsIHN0 aWxsIGJlIGluIHRoZSBkZWZpbml0aW9uIHdoZW4gdGhlIGtleSBpcyBwcmVzc2VkLiAgV2UgZG9u J3QgZG8gdGhpcwotICBpbiB6enN0cmluZygpLCBiZWNhdXNlIFxLdmVyYnMgYXJlIHZhbGlkIG9u bHkgaW4gdGhpcyBjb250ZXh0IGFuZCBub3doZXJlCi0gIGVsc2UuCi0KLSAgV2UgdXNlIHRoaXMg Y29kZSBhY3RpdmUgZm9yIGFsbCB2ZXJzaW9ucyB0aGF0IHN1cHBvcnQgU0VUIEtFWSwgZXZlbiBp ZiB0aGV5Ci0gIGRvbid0IHN1cHBvcnQgXEt2ZXJicywgYmVjYXVzZSBvdGhlcndpc2UgXEsgd291 bGQgYmVoYXZlIGRpZmZlcmVudGx5IGZvcgotICBkaWZmZXJlbnQgdmVyc2lvbnMuCi0qLwotICAg ICAgICAgIGZvciAoeCA9IDAsIHkgPSAwOyBzW3hdOyB4KyssIHkrKykgeyAvKiBDb252ZXJ0IFxL IHRvIFxcSyAqLwotICAgICAgICAgICAgICBpZiAoKHggPiAwKSAmJgotICAgICAgICAgICAgICAg ICAgKHNbeF0gPT0gJ0snIHx8IHNbeF0gPT0gJ2snKQotICAgICAgICAgICAgICAgICAgKSB7ICAg ICAgICAgICAgICAgICAgIC8qIEhhdmUgSyAqLwotCi0gICAgICAgICAgICAgICAgICBpZiAoKHgg PT0gMSAmJiBzW3gtMV0gPT0gQ01EUSkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAoeCA+IDEg JiYgc1t4LTFdID09IENNRFEgJiYgc1t4LTJdICE9IENNRFEpKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgbGluZVt5KytdID0gQ01EUTsgLyogTWFrZSBpdCBcXEsgKi8KLSAgICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICAgIGlmICh4ID4gMSAmJiBzW3gtMV0gPT0gJ3snICYmIHNb eC0yXSA9PSBDTURRKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgbGluZVt5LTFdID0gQ01EUTsg LyogSGF2ZSBce0sgKi8KLSAgICAgICAgICAgICAgICAgICAgICBsaW5lW3krK10gPSAneyc7ICAv KiBNYWtlIGl0IFxce0sgKi8KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICBsaW5lW3ldID0gc1t4XTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgbGlu ZVt5KytdID0gTlVMOyAgICAgICAgICAgICAgLyogVGVybWluYXRlICovCi0gICAgICAgICAgcyA9 IGxpbmUgKyB5ICsgMTsgICAgICAgICAgICAgLyogUG9pbnQgdG8gYWZ0ZXIgaXQgKi8KLSAgICAg ICAgICB4ID0gTElOQlVGU0laIC0gKGludCkgc3RybGVuKGxpbmUpIC0gMTsgLyogR2V0IHJlbWFp bmluZyBzcGFjZSAqLwotICAgICAgICAgIGlmICgoeCA8IChMSU5CVUZTSVogLyAyKSkgfHwKLSAg ICAgICAgICAgICAgKHp6c3RyaW5nKGxpbmUsICZzLCAmeCkgPCAwKSkgeyAvKiBFeHBhbmQgdmFy aWFibGVzLCBldGMuICovCi0gICAgICAgICAgICAgIHByaW50ZigiP0tleSBkZWZpbml0aW9uIHRv byBsb25nXG4iKTsKLSAgICAgICAgICAgICAgaWYgKGZsYWcpIGNtc2V0cChwc2F2ZSk7Ci0gICAg ICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHMgPSBsaW5lICsg eSArIDE7ICAgICAgICAgICAgIC8qIFBvaW50IHRvIHJlc3VsdC4gKi8KLQotI2lmbmRlZiBOT0tW RVJCUwotLyoKLSAgU3BlY2lhbCBjYXNlOiBzZWUgaWYgdGhlIGRlZmluaXRpb24gc3RhcnRzIHdp dGggYSBcS3ZlcmIuCi0gIElmIGl0IGRvZXMsIHBvaW50IHRvIGl0IHdpdGggcCwgb3RoZXJ3aXNl IHNldCBwIHRvIE5VTEwuCi0qLwotICAgICAgICAgIHAgPSBzOwotICAgICAgICAgIGlmICgqcCsr ID09IENNRFEpIHsKLSAgICAgICAgICAgICAgaWYgKCpwID09ICd7JykgcCsrOwotICAgICAgICAg ICAgICBwID0gKCpwID09ICdrJyB8fCAqcCA9PSAnSycpID8gcCArIDEgOiBOVUxMOwotICAgICAg ICAgIH0KLSNlbmRpZiAvKiBOT0tWRVJCUyAqLwotCi0gICAgICAgICAgc3dpdGNoIChzdHJsZW4o cykpIHsgICAgICAgICAgLyogQWN0aW9uIGRlcGVuZHMgb24gbGVuZ3RoICovCi0gICAgICAgICAg ICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgaW5kaXZpZHVhbCBrZXkgZGVm ICovCi0gICAgICAgICAgICAgIGRlbGV0ZWtleW1hcCh0LGtjKTsKLSAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgIGlmICghbGl0c3RyKSB7Ci0g ICAgICAgICAgICAgICAgICBkZWZldnQudHlwZSA9IGtleTsgICAgLyogU2luZ2xlIGNoYXJhY3Rl ciAqLwotICAgICAgICAgICAgICAgICAgZGVmZXZ0LmtleS5zY2FuY29kZSA9ICpzOwotICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1bHQ6 ICAgICAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIgc3RyaW5nICovCi0jaWZuZGVmIE5PS1ZF UkJTCi0gICAgICAgICAgICAgIGlmIChwKSB7Ci0gICAgICAgICAgICAgICAgICB5ID0geGxvb2t1 cChrdmVyYnMscCxua3ZlcmJzLCZ4KTsgLyogTG9vayBpdCB1cCAqLwotICAgICAgICAgICAgICAg ICAgLyogTmVlZCBleGFjdCBtYXRjaCAqLwotICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwi c2V0IGtleSBrdmVyYiBsb29rdXAiLDAseSk7Ci0gICAgICAgICAgICAgICAgICBpZiAoeSA+IC0x KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgZGVmZXZ0LnR5cGUgPSBrdmVyYjsKLSAgICAgICAg ICAgICAgICAgICAgICBkZWZldnQua3ZlcmIuaWQgPSB5OwotICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyog Tk9LVkVSQlMgKi8KLSAgICAgICAgICAgICAgaWYgKGxpdHN0cikgewotICAgICAgICAgICAgICAg ICAgZGVmZXZ0LnR5cGUgPSBsaXRlcmFsOwotICAgICAgICAgICAgICAgICAgZGVmZXZ0LmxpdGVy YWwuc3RyaW5nID0gKGNoYXIgKikgbWFsbG9jKHN0cmxlbihzKSsxKTsKLSAgICAgICAgICAgICAg ICAgIGlmIChkZWZldnQubGl0ZXJhbC5zdHJpbmcpCi0gICAgICAgICAgICAgICAgICAgIHN0cmNw eShkZWZldnQubGl0ZXJhbC5zdHJpbmcsIHMpOyAvKiBzYWZlICovCi0gICAgICAgICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICBkZWZldnQudHlwZSA9IG1hY3JvOwotICAgICAgICAg ICAgICAgICAgZGVmZXZ0Lm1hY3JvLnN0cmluZyA9IChjaGFyICopIG1hbGxvYyhzdHJsZW4ocykr MSk7Ci0gICAgICAgICAgICAgICAgICBpZiAoZGVmZXZ0Lm1hY3JvLnN0cmluZykKLSAgICAgICAg ICAgICAgICAgICAgc3RyY3B5KGRlZmV2dC5tYWNyby5zdHJpbmcsIHMpOyAvKiBzYWZlICovCi0g ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAg ICAgIGluc2VydGtleW1hcCh0LCBrYywgZGVmZXZ0KTsKLSAgICAgICAgICBpZiAoZmxhZykKLSAg ICAgICAgICAgIGNtc2V0cChwc2F2ZSk7Ci0gICAgICAgICAgaW5pdHZpayA9IDE7ICAgICAgICAg ICAgICAgICAgLyogVXBkYXRlIFZJSyB0YWJsZSAqLwotICAgICAgICAgIHJldHVybigxKTsKLSAg ICAgIH0KLQotI2lmZGVmIFBDVEVSTQotICAgICAgY2FzZSBYWVRQQ1RFUk06ICAgICAgICAgICAg ICAgICAgIC8qIFBDVEVSTSBLZXlib2FyZCBNb2RlICovCi0gICAgICAgIGlmICgoeCA9IHNldG9u KCZ0dF9wY3Rlcm0pKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAx KTsKLSNlbmRpZiAvKiBQQ1RFUk0gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIENLX1RS SUdHRVIKLSAgICAgIGNhc2UgWFlUUklHR0VSOgotICAgICAgICBpZiAoKHkgPSBjbXR4dCgiU3Ry aW5nIHRvIHRyaWdnZXIgYXV0b21hdGljIHJldHVybiB0byBjb21tYW5kIG1vZGUiLAotICAgICAg ICAgICAgICAgICAgICAgICAiIiwmcyx4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4o eSk7Ci0gICAgICAgIG1ha2VsaXN0KHMsdHRfdHJpZ2dlcixUUklHR0VSUyk7Ci0gICAgICAgIHJl dHVybigxKTsKLSNlbmRpZiAvKiBDS19UUklHR0VSICovCi0KLSNpZmRlZiBPUzIKLSAgICAgIGNh c2UgWFlUU0FDOgotICAgICAgICBpZiAoKHkgPSBjbW51bSgiQVNDSUkgdmFsdWUgdG8gdXNlIGZv ciBzcGFjaW5nIGF0dHJpYnV0ZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAiMzIiLDEwLCZ4 LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgaWYgKCh5ID0g Y21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgIHR0X3NhYyA9IHg7Ci0gICAgICAgIHJl dHVybihzdWNjZXNzID0gMSk7Ci0KLSAgICAgIGNhc2UgWFlUS0JER0w6IHsgICAgICAvKiBTRVQg VEVSTSBLQkQtRk9MTE9XUy1HTC9HUiAqLwotICAgICAgICAgIGV4dGVybiBpbnQgdHRfa2JfZ2xn cjsgICAgICAgIC8qIGZyb20gY2tvY28zLmMgKi8KLSAgICAgICAgICBpZiAoKHggPSBzZXRvbigm dHRfa2JfZ2xncikpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgIHJl dHVybihzdWNjZXNzID0gMSk7Ci0gICAgICB9Ci0jaWZuZGVmIE5PQ1NFVFMKLSAgICAgIGNhc2Ug WFlUVlRMTkc6ICAgICAgICAvKiBTRVQgVEVSTSBERUMtTEFOR1VBR0UgKi8KLSAgICAgICAgaWYg KCh5ID0gY21rZXkodnRsYW5ndGFiLG52dGxhbmd0YWIsIlZUIGxhbmd1YWdlIiwKLSAgICAgICAg ICAgICAgICAgICAgICAgSVM5NzgwMSh0dF90eXBlX21vZGUpPyJnZXJtYW4iOiJub3J0aC1hbWVy aWNhbiIsCi0gICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAg IHJldHVybih5KTsKLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0K LSAgICAgICAgLyogQSByZWFsIFZUIHRlcm1pbmFsIHdvdWxkIHVzZSB0aGUgbGFuZ3VhZ2UgdG8g c2V0IHRoZSAgICovCi0gICAgICAgIC8qIGRlZmF1bHQga2V5Ym9hcmQgbGFuZ3VhZ2UgZm9yIGJv dGggOC1iaXQgbXVsdGluYXRpb25hbCAqLwotICAgICAgICAvKiBhbmQgNy1iaXQgbmF0aW9uYWwg bW9kZXMuICBGb3IgOC1iaXQgbW9kZSBpdCB3b3VsZCAgICAgKi8KLSAgICAgICAgLyogc2V0IHRo ZSB0ZXJtaW5hbCBjaGFyYWN0ZXItc2V0IHRvIHRoZSBJU08gc2V0IGlmIGl0ICAgICovCi0gICAg ICAgIC8qIGlzIG5vdCBhbHJlYWR5IHNldC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqLwotICAgICAgICAvKiBMYXRpbi0xIGNhbiBiZSByZXBsYWNlZCBieSBERUMgTXVsdGlu YXRpb25hbCAgICAgICAgICAgKi8KLSAgICAgICAgc3dpdGNoICh5KSB7Ci0gICAgICAgICAgY2Fz ZSBWVExfTk9SVEhfQU06ICAvKiBOb3J0aCBBbWVyaWNhbiAqLwotICAgICAgICAgICAgLyogTXVs dGluYXRpb25hbDogTGF0aW4tMSAgICovCi0gICAgICAgICAgICAvKiBOYXRpb25hbDogICAgICBV U19BU0NJSSAgKi8KLSAgICAgICAgICAgIGRlY19sYW5nID0geTsKLSAgICAgICAgICAgIGRlY19u cmMgPSBUWF9BU0NJSTsKLSAgICAgICAgICAgIGRlY19rYmQgPSBUWF84ODU5XzE7Ci0gICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFZUTF9CUklUSVNIIDoKLSAgICAgICAgICAgIC8q IE11bHRpbmF0aW9uYWw6IExhdGluLTEgICAqLwotICAgICAgICAgICAgLyogTmF0aW9uYWw6ICAg ICAgVUtfQVNDSUkgICovCi0gICAgICAgICAgICBkZWNfbGFuZyA9IHk7Ci0gICAgICAgICAgICBk ZWNfbnJjID0gVFhfQlJJVElTSDsKLSAgICAgICAgICAgIGRlY19rYmQgPSBUWF84ODU5XzE7Ci0g ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFZUTF9GUkVOQ0ggIDoKLSAgICAgICAg ICBjYXNlIFZUTF9CRUxHSUFOIDoKLSAgICAgICAgICBjYXNlIFZUTF9DQU5BRElBTjoKLSAgICAg ICAgICAgIC8qIE11bHRpbmF0aW9uYWw6IExhdGluLTEgICAqLwotICAgICAgICAgICAgLyogTmF0 aW9uYWw6ICAgICAgRlJfQVNDSUkgICovCi0gICAgICAgICAgICBkZWNfbGFuZyA9IHk7Ci0gICAg ICAgICAgICBkZWNfbnJjID0gVFhfRlJFTkNIOwotICAgICAgICAgICAgZGVjX2tiZCA9IFRYXzg4 NTlfMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgVlRMX0ZSX0NBTiAgOgot ICAgICAgICAgICAgLyogTXVsdGluYXRpb25hbDogTGF0aW4tMSAgICovCi0gICAgICAgICAgICAv KiBOYXRpb25hbDogICAgICBGQ19BU0NJSSAgKi8KLSAgICAgICAgICAgIGRlY19sYW5nID0geTsK LSAgICAgICAgICAgIGRlY19ucmMgPSBUWF9DTl9GUkVOQ0g7Ci0gICAgICAgICAgICBkZWNfa2Jk ID0gVFhfODg1OV8xOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBWVExfREFO SVNIICA6Ci0gICAgICAgICAgY2FzZSBWVExfTk9SV0VHSUE6Ci0gICAgICAgICAgICAvKiBNdWx0 aW5hdGlvbmFsOiBMYXRpbi0xICAgKi8KLSAgICAgICAgICAgIC8qIE5hdGlvbmFsOiAgICAgIE5P X0FTQ0lJICAqLwotICAgICAgICAgICAgZGVjX2xhbmcgPSB5OwotICAgICAgICAgICAgZGVjX25y YyA9IFRYX05PUldFR0lBTjsKLSAgICAgICAgICAgIGRlY19rYmQgPSBUWF84ODU5XzE7Ci0gICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFZUTF9GSU5OSVNIIDoKLSAgICAgICAgICAg IC8qIE11bHRpbmF0aW9uYWw6IExhdGluLTEgICAqLwotICAgICAgICAgICAgLyogTmF0aW9uYWw6 ICAgICAgRklfQVNDSUkgICovCi0gICAgICAgICAgICBkZWNfbGFuZyA9IHk7Ci0gICAgICAgICAg ICBkZWNfbnJjID0gVFhfRklOTklTSDsKLSAgICAgICAgICAgIGRlY19rYmQgPSBUWF84ODU5XzE7 Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFZUTF9HRVJNQU4gIDoKLSAgICAg ICAgICAgIC8qIE11bHRpbmF0aW9uYWw6IExhdGluLTEgICAqLwotICAgICAgICAgICAgLyogTmF0 aW9uYWw6ICAgICAgR1JfQVNDSUkgICovCi0gICAgICAgICAgICBkZWNfbGFuZyA9IHk7Ci0gICAg ICAgICAgICBkZWNfbnJjID0gVFhfR0VSTUFOOwotICAgICAgICAgICAgZGVjX2tiZCA9IFRYXzg4 NTlfMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgVlRMX0RVVENIICAgOgot ICAgICAgICAgICAgLyogTXVsdGluYXRpb25hbDogTGF0aW4tMSAgICovCi0gICAgICAgICAgICAv KiBOYXRpb25hbDogICAgICBEVV9BU0NJSSAgKi8KLSAgICAgICAgICAgIGRlY19sYW5nID0geTsK LSAgICAgICAgICAgIGRlY19ucmMgPSBUWF9EVVRDSDsKLSAgICAgICAgICAgIGRlY19rYmQgPSBU WF84ODU5XzE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFZUTF9JVEFMSUFO IDoKLSAgICAgICAgICAgIC8qIE11bHRpbmF0aW9uYWw6IExhdGluLTEgICAqLwotICAgICAgICAg ICAgLyogTmF0aW9uYWw6ICAgICAgSVRfQVNDSUkgICovCi0gICAgICAgICAgICBkZWNfbGFuZyA9 IHk7Ci0gICAgICAgICAgICBkZWNfbnJjID0gVFhfSVRBTElBTjsKLSAgICAgICAgICAgIGRlY19r YmQgPSBUWF84ODU5XzE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFZUTF9T V19GUiAgIDoKLSAgICAgICAgICBjYXNlIFZUTF9TV19HUiAgIDoKLSAgICAgICAgICAgIC8qIE11 bHRpbmF0aW9uYWw6IExhdGluLTEgICAqLwotICAgICAgICAgICAgLyogTmF0aW9uYWw6ICAgICAg Q0hfQVNDSUkgICovCi0gICAgICAgICAgICBkZWNfbGFuZyA9IHk7Ci0gICAgICAgICAgICBkZWNf bnJjID0gVFhfU1dJU1M7Ci0gICAgICAgICAgICBkZWNfa2JkID0gVFhfODg1OV8xOwotICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBWVExfU1dFRElTSCA6Ci0gICAgICAgICAgICAv KiBNdWx0aW5hdGlvbmFsOiBMYXRpbi0xICAgKi8KLSAgICAgICAgICAgIC8qIE5hdGlvbmFsOiAg ICAgIFNXX0FTQ0lJICAqLwotICAgICAgICAgICAgZGVjX2xhbmcgPSB5OwotICAgICAgICAgICAg ZGVjX25yYyA9IFRYX1NXRURJU0g7Ci0gICAgICAgICAgICBkZWNfa2JkID0gVFhfODg1OV8xOwot ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBWVExfU1BBTklTSCA6Ci0gICAgICAg ICAgICAvKiBNdWx0aW5hdGlvbmFsOiBMYXRpbi0xICAgKi8KLSAgICAgICAgICAgIC8qIE5hdGlv bmFsOiAgICAgIFNQX0FTQ0lJICAqLwotICAgICAgICAgICAgZGVjX2xhbmcgPSB5OwotICAgICAg ICAgICAgZGVjX25yYyA9IFRYX1NQQU5JU0g7Ci0gICAgICAgICAgICBkZWNfa2JkID0gVFhfODg1 OV8xOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBWVExfUE9SVFVHRVM6Ci0g ICAgICAgICAgICAvKiBNdWx0aW5hdGlvbmFsOiBMYXRpbi0xICAgKi8KLSAgICAgICAgICAgIC8q IE5hdGlvbmFsOiAgICAgIFBvcnR1Z2VzZSBBU0NJSSAgKi8KLSAgICAgICAgICAgIGRlY19sYW5n ID0geTsKLSAgICAgICAgICAgIGRlY19ucmMgPSBUWF9QT1JUVUdVRVNFOwotICAgICAgICAgICAg ZGVjX2tiZCA9IFRYXzg4NTlfMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug VlRMX0hFQlJFVyAgOgotICAgICAgICAgICAgLyogTXVsdGluYXRpb25hbDogTGF0aW4tSGVicmV3 IC8gREVDLUhlYnJldyAgKi8KLSAgICAgICAgICAgIC8qIE5hdGlvbmFsOiAgICAgIERFQyA3LWJp dCBIZWJyZXcgICovCi0gICAgICAgICAgICBkZWNfbGFuZyA9IHk7Ci0gICAgICAgICAgICBkZWNf bnJjID0gVFhfSEU3OwotICAgICAgICAgICAgZGVjX2tiZCA9IFRYXzg4NTlfODsKLSAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgVlRMX0dSRUVLICAgOgotICAgICAgICAgICAgLyog TXVsdGluYXRpb25hbDogTGF0aW4tR3JlZWsgLyBERUMtR3JlZWsgICAqLwotICAgICAgICAgICAg LyogTmF0aW9uYWw6ICAgICAgREVDIEdyZWVrIE5SQyAgICAgICAgICAgICAqLwotICAgICAgICAg ICAgLyogaXMgRUxPVDkyNyBlcXVpdmFsZW50IHRvIERFQyBHcmVlaz8/Pz8gICAqLwotICAgICAg ICAgICAgZGVjX2xhbmcgPSB5OwotICAgICAgICAgICAgZGVjX25yYyA9IFRYX0VMT1Q5Mjc7Ci0g ICAgICAgICAgICBkZWNfa2JkID0gVFhfODg1OV83OwotICAgICAgICAgICAgYnJlYWs7Ci0jaWZk ZWYgQ09NTUVOVAotICAgICAgICAgIGNhc2UgVlRMX1RVUktfUSAgOgotICAgICAgICAgIGNhc2Ug VlRMX1RVUktfRiAgOgotICAgICAgICAgICAgLyogTXVsdGluYXRpb25hbDogTGF0aW4tVHVya2lz aCAvIERFQy1UdXJraXNoICAgKi8KLSAgICAgICAgICAgIC8qIE5hdGlvbmFsOiAgICAgIERFQyA3 LWJpdCBUdXJraXNoICAgICAgICAgICAgICovCi0gICAgICAgICAgICBicmVhazsKLSNlbmRpZiAv KiBDT01NRU5UICovCi0gICAgICAgICAgY2FzZSBWVExfSFVOR0FSSUE6Ci0gICAgICAgICAgICAv KiBNdWx0aW5hdGlvbmFsOiBMYXRpbi0yICAgKi8KLSAgICAgICAgICAgIC8qIE5hdGlvbmFsOiAg ICAgIG5vIG5hdGlvbmFsIG1vZGUgICovCi0gICAgICAgICAgICBkZWNfbGFuZyA9IHk7Ci0gICAg ICAgICAgICBkZWNfbnJjID0gVFhfSFVOR0FSSUFOOwotICAgICAgICAgICAgZGVjX2tiZCA9IFRY Xzg4NTlfMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgVlRMX1NMT1ZBSyAg OgotICAgICAgICAgIGNhc2UgVlRMX0NaRUNIICAgOgotICAgICAgICAgIGNhc2UgVlRMX1BPTElT SCAgOgotICAgICAgICAgIGNhc2UgVlRMX1JPTUFOSUFOOgotICAgICAgICAgICAgLyogTXVsdGlu YXRpb25hbDogTGF0aW4tMiAgICovCi0gICAgICAgICAgICAvKiBOYXRpb25hbDogICAgICBubyBu YXRpb25hbCBtb2RlICAqLwotICAgICAgICAgICAgZGVjX2xhbmcgPSB5OwotICAgICAgICAgICAg ZGVjX25yYyA9IFRYX0FTQ0lJOwotICAgICAgICAgICAgZGVjX2tiZCA9IFRYXzg4NTlfMjsKLSAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgVlRMX1JVU1NJQU4gOgotICAgICAgICAg ICAgLyogTXVsdGluYXRpb25hbDogTGF0aW4tQ3lyaWxsaWMgLyBLT0ktOCAgICovCi0gICAgICAg ICAgICAvKiBOYXRpb25hbDogICAgICBERUMgUnVzc2lhbiBOUkMgICovCi0gICAgICAgICAgICBk ZWNfbGFuZyA9IHk7Ci0gICAgICAgICAgICBkZWNfbnJjID0gVFhfS09JNzsKLSAgICAgICAgICAg IGRlY19rYmQgPSBUWF84ODU5XzU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNl IFZUTF9MQVRJTl9BTToKLSAgICAgICAgICAgIC8qIE11bHRpbmF0aW9uYWw6IG5vdCBsaXN0ZWQg aW4gdGFibGUgICAqLwotICAgICAgICAgICAgLyogTmF0aW9uYWw6ICAgICAgbm90IGxpc3RlZCBp biB0YWJsZSAgKi8KLSAgICAgICAgICAgIGRlY19sYW5nID0geTsKLSAgICAgICAgICAgIGRlY19u cmMgPSBUWF9BU0NJSTsKLSAgICAgICAgICAgIGRlY19rYmQgPSBUWF84ODU5XzE7Ci0gICAgICAg ICAgICBicmVhazsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgY2FzZSBWVExfU0NTICAgICA6 Ci0gICAgICAgICAgICAvKiBNdWx0aW5hdGlvbmFsOiBMYXRpbi0yICAgKi8KLSAgICAgICAgICAg IC8qIE5hdGlvbmFsOiAgICAgIFNDUyBOUkMgICAqLwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5k aWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDApOwotICAgICAgICB9Ci0gICAgICAgIGlmIChJUzk3ODAxKHR0X3R5cGVfbW9k ZSkpIHsKLSAgICAgICAgICAgIFNOSV9iaXRtb2RlKGNtYXNrID09IDAzNzcgPyA4IDogNyk7Ci0g ICAgICAgIH0KLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSNlbmRpZiAvKiBOT0NTRVRT ICovCi0KLSAgICAgIGNhc2UgWFlUVlROUkM6IHsgICAgICAgICAgICAgICAgICAvKiBTRVQgVEVS TSBERUMtTlJDLU1PREUgKi8KLSAgICAgICAgICBleHRlcm4gaW50IGRlY25yY21fdXNyLCBkZWNu cmNtOyAgICAgICAgLyogZnJvbSBja29jbzMuYyAqLwotICAgICAgICAgIGlmICgoeCA9IHNldG9u KCZkZWNucmNtX3VzcikpIDwgMCkKLSAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICBk ZWNucmNtID0gZGVjbnJjbV91c3I7Ci0gICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAg ICAgIH0KLSAgICAgIGNhc2UgWFlUU05JUE06IHsgICAgICAgICAgICAgICAgICAvKiBTRVQgVEVS TSBTTkktUEFHRU1PREUgKi8KLSAgICAgICAgICBleHRlcm4gaW50IHNuaV9wYWdlbW9kZSwgc25p X3BhZ2Vtb2RlX3VzcjsKLSAgICAgICAgICBpZiAoKHkgPSBjbWtleShvbm9mZiwyLCIiLCJvbiIs eHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8 IDApIHJldHVybih4KTsKLSAgICAgICAgICBzbmlfcGFnZW1vZGVfdXNyID0gc25pX3BhZ2Vtb2Rl ID0geTsKLSAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgfQotICAgICAgY2Fz ZSBYWVRTTklTTTogeyAgICAgICAgICAgICAgICAgIC8qIFNFVCBURVJNIFNOSS1TQ1JPTExNT0RF ICovCi0gICAgICAgICAgZXh0ZXJuIGludCBzbmlfc2Nyb2xsX21vZGUsIHNuaV9zY3JvbGxfbW9k ZV91c3I7Ci0gICAgICAgICAgaWYgKCh5ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5n KSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1 cm4oeCk7Ci0gICAgICAgICAgc25pX3Njcm9sbF9tb2RlX3VzciA9IHNuaV9zY3JvbGxfbW9kZSA9 IHk7Ci0gICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICAgIH0KLSAgICAgIGNhc2Ug WFlUU05JQ0M6IHsgIC8qIFNFVCBURVJNIFNOSS1DSC5DT0RFICovCi0gICAgICAgICAgZXh0ZXJu IGludCBzbmlfY2hjb2RlX3VzcjsKLSAgICAgICAgICBpZiAoKHkgPSBjbWtleShvbm9mZiwyLCIi LCJvbiIseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgICBpZiAoKHggPSBjbWNm bSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgICBzbmlfY2hjb2RlX3VzciA9IHk7Ci0gICAg ICAgICAgU05JX2NoY29kZSh5KTsKLSAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAg ICAgfQotICAgICAgY2FzZSBYWVRTTklGVjogeyAgLyogU0VUIFRFUk0gU05JLUZJUk1XQVJFLVZF UlNJT05TICovCi0gICAgICAgICAgZXh0ZXJuIENIQVIgc25pX2tiZF9maXJtd2FyZVtdLCBzbmlf dGVybV9maXJtd2FyZVtdOwotICAgICAgICAgIENIQVIga2JkWzddLHRlcm1bN107Ci0KLSAgICAg ICAgICBpZiAoKHggPSBjbWZsZCgiS2V5Ym9hcmQgRmlybXdhcmUgVmVyc2lvbiIsc25pX2tiZF9m aXJtd2FyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAmcywgeHhzdHJpbmcpKSA8IDApCi0g ICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgaWYgKChpbnQpc3RybGVuKHMpICE9IDYp IHsKLSAgICAgICAgICAgICAgcHJpbnRmKCI/U29ycnkgLSB0aGUgZmlybXdhcmUgdmVyc2lvbiBt dXN0IGJlIDYgZGlnaXRzIGxvbmdcbiIpOwotICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAg ICAgICAgIH0KLSAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7Ci0gICAgICAgICAg ICAgIGlmICghaXNkaWdpdChzW2ldKSkgewotICAgcHJpbnRmKCI/U29ycnkgLSB0aGUgZmlybXdh cmUgdmVyc2lvbiBjYW4gb25seSBjb250YWluIGRpZ2l0cyBbMC05XVxuIik7Ci0gICAgICAgICAg ICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAg ICAgIGNrc3RybmNweShrYmQscyw3KTsKLQotICAgICAgICAgIGlmICgoeCA9IGNtZmxkKCJUZXJt aW5hbCBGaXJtd2FyZSBWZXJzaW9uIixzbmlfdGVybV9maXJtd2FyZSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAmcywgeHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICByZXR1cm4oeCk7Ci0g ICAgICAgICAgaWYgKChpbnQpc3RybGVuKHMpICE9IDYpIHsKLSAgICAgICAgICAgICAgcHJpbnRm KCI/U29ycnkgLSB0aGUgZmlybXdhcmUgdmVyc2lvbiBtdXN0IGJlIDYgZGlnaXRzIGxvbmdcbiIp OwotICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgIH0KLSAgICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgNjsgaSsrKSB7Ci0gICAgICAgICAgICAgIGlmICghaXNkaWdpdChzW2ldKSkg ewotICAgcHJpbnRmKCI/U29ycnkgLSB0aGUgZmlybXdhcmUgdmVyc2lvbiBjYW4gb25seSBjb250 YWluIGRpZ2l0cyBbMC05XVxuIik7Ci0gICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAg ICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBja3N0cm5jcHkodGVybSxzLDcp OwotICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotCi0gICAgICAg ICAgY2tzdHJuY3B5KHNuaV9rYmRfZmlybXdhcmUsa2JkLDcpOwotICAgICAgICAgIGNrc3RybmNw eShzbmlfdGVybV9maXJtd2FyZSx0ZXJtLDcpOwotICAgICAgICAgIHJldHVybihzdWNjZXNzID0g MSk7Ci0gICAgfQotCi0gICAgY2FzZSBYWVRMU1A6IHsgICAgICAgICAgICAgIC8qIFNFVCBURVJN IExJTkUtU1BBQ0lORyAqLwotICAgICAgICBpZiAoKHggPSBjbWZsZCgiTGluZSBTcGFjaW5nIiwi MSIsJnMsIHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgaWYg KGlzZmxvYXQocywwKSA8IDEpIHsJCS8qIChzZXRzIGZsb2F0dmFsKSAqLwotICAgICAgICAgICAg cHJpbnRmKCI/SW50ZWdlciBvciBmbG9hdGluZy1wb2ludCBudW1iZXIgcmVxdWlyZWRcbiIpOwot ICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZmxvYXR2YWwg PCAxLjAgfHwgZmxvYXR2YWwgPiAzLjApIHsKLSAgICAgICAgICAgIHByaW50ZigiP1ZhbHVlIG11 c3Qgd2l0aGluIHRoZSByYW5nZSAxLjAgYW5kIDMuMCAoaW5jbHVzaXZlKVxuIik7Ci0gICAgICAg ICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwg MCkgcmV0dXJuKHgpOwotI2lmZGVmIEtVSQotICAgICAgICB0dF9saW5lc3BhY2luZ1tWQ01EXSA9 IHR0X2xpbmVzcGFjaW5nW1ZURVJNXSA9IGZsb2F0dmFsOwotICAgICAgICByZXR1cm4oc3VjY2Vz cyA9IDEpOwotI2Vsc2UgLyogS1VJICovCi0gICAgICAgIHByaW50ZigiP1NvcnJ5LCBMaW5lLXNw YWNpbmcgaXMgb25seSBzdXBwb3J0ZWQgaW4gSzk1Ry5FWEUuXG4iKTsKLSAgICAgICAgcmV0dXJu KHN1Y2Nlc3MgPSAwKTsKLSNlbmRpZiAvKiBLVUkgKi8KLSAgICB9Ci0jZW5kaWYgLyogT1MyICov Ci0KLSAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTaG91bGRuJ3Qg Z2V0IGhlcmUuICovCi0gICAgICAgIHJldHVybigtMik7Ci0gICAgfQotI2VuZGlmIC8qIE1BQyAq LwotI2lmZGVmIENPTU1FTlQKLSAgICAvKgotICAgICAgVGhpcyB3YXMgc3VwcG9zZWQgdG8gc2h1 dCB1cCBwaWNreSBjb21waWxlcnMgYnV0IGluc3RlYWQgaXQgbWFrZXMKLSAgICAgIG1vc3QgY29t cGlsZXJzIGNvbXBsYWluIGFib3V0ICJzdGF0ZW1lbnQgbm90IHJlYWNoZWQiLgotICAgICovCi0g ICAgcmV0dXJuKC0yKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0jaWZkZWYgT1MyCi0gICAgcmV0 dXJuKC0yKTsKLSNlbmRpZiAvKiBPUzIgKi8KLX0KLQotI2lmZGVmIE9TMgotaW50Ci1zZXR0aXRs ZSh2b2lkKSB7Ci0gICAgZXh0ZXJuIGNoYXIgdXNlcnRpdGxlW107Ci0gICAgaWYgKCh5ID0gY210 eHQoInRpdGxlIHRleHQiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQotICAgICAgcmV0dXJuKHkpOwot I2lmZGVmIElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIpIHsKLSAgICAgICAgcHJpbnRmKCI/U29ycnks IGNvbW1hbmQgZGlzYWJsZWQuXHJcbiIpOwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwot ICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0gICAgcyA9IGJyc3RyaXAocyk7Ci0gICAgY2tzdHJu Y3B5KHVzZXJ0aXRsZSxzLDY0KTsKLSAgICBvczJzZXR0aXRsZSgiIiwxKTsKLSAgICByZXR1cm4o MSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGRpYWxlcnRhYltdID0geyAgICAvKiBLOTUg RGlhbGVyIHR5cGVzICovCi0gICAgImJhY2tzcGFjZSIsICAgICAgICAwLCAwLAotICAgICJlbnRl ciIsICAgICAgICAgICAgMSwgMAotfTsKLXN0YXRpYyBpbnQgbmRpYWxlciA9IDI7Ci0KLWludAot c2V0ZGlhbGVyKHZvaWQpIHsKLSAgICBpbnQgdCwgeCwgeTsKLSAgICBpbnQgY2xlYXIgPSAwLCBk ZWZsdCA9IDA7Ci0gICAgaW50IGtjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogS2V5 IGNvZGUgKi8KLSAgICBjaGFyICpzID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAvKiBLZXkg YmluZGluZyAqLwotI2lmbmRlZiBOT0tWRVJCUwotICAgIGNoYXIgKnAgPSBOVUxMOyAgICAgICAg ICAgICAgICAgICAgIC8qIFdvcmtlciAqLwotI2VuZGlmIC8qIE5PS1ZFUkJTICovCi0gICAgY29u X2V2ZW50IGRlZmV2dDsKLSAgICBleHRlcm4gaW50IG9zMmdrczsKLSAgICBleHRlcm4gaW50IG1z a2tleXM7Ci0gICAgZXh0ZXJuIGludCBpbml0dmlrOwotCi0gICAgZGVmZXZ0LnR5cGUgPSBlcnJv cjsKLQotICAgIGlmICgoIHggPSBjbWtleShkaWFsZXJ0YWIsIG5kaWFsZXIsCi0gICAgICAgICAg ICAgICAgICAgICJLZXJtaXQtOTUgZGlhbGVyIHdvcmstYXJvdW5kcyIsCi0gICAgICAgICAgICAg ICAgICAgICIiLCB4eHN0cmluZykpIDwgMCApCi0gICAgICByZXR1cm4oeCk7Ci0gICAgc3dpdGNo ICh4KSB7Ci0gICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQmFja3Nw YWNlICovCi0gICAgICAgIGtjID0gMjY0OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgMTog ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbnRlciAqLwotICAgICAgICBrYyA9IDI2OTsK LSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBwcmludGYoIklsbGVnYWwg dmFsdWUgaW4gc2V0ZGlhbGVyKClcbiIpOwotICAgICAgICByZXR1cm4oLTkpOwotICAgIH0KLSAg ICBpZiAoKHkgPSBjbXR4dCgiS2V5IGRlZmluaXRpb24iLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQot ICAgICAgcmV0dXJuKHkpOwotCi0jaWZkZWYgSUtTRAotICAgIGlmIChpbnNlcnZlcikgewotICAg ICAgICBwcmludGYoIj9Tb3JyeSwgY29tbWFuZCBkaXNhYmxlZC5cclxuIik7Ci0gICAgICAgIHJl dHVybihzdWNjZXNzID0gMCk7Ci0gICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLSAgICBzID0gYnJz dHJpcChzKTsKLSNpZm5kZWYgTk9LVkVSQlMKLSAgICBwID0gczsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBTYXZlIHRoaXMgcGxhY2UgKi8KLSNlbmRpZiAvKiBOT0tWRVJCUyAqLwot LyoKLSAgSWYgdGhlIGRlZmluaXRpb24gaW5jbHVkZWQgYW55IFxLdmVyYnMsIHF1b3RlIHRoZSBi YWNrc2xhc2ggc28gdGhlIFxLdmVyYgotICB3aWxsIHN0aWxsIGJlIGluIHRoZSBkZWZpbml0aW9u IHdoZW4gdGhlIGtleSBpcyBwcmVzc2VkLiAgV2UgZG9uJ3QgZG8gdGhpcwotICBpbiB6enN0cmlu ZygpLCBiZWNhdXNlIFxLdmVyYnMgYXJlIHZhbGlkIG9ubHkgaW4gdGhpcyBjb250ZXh0IGFuZCBu b3doZXJlCi0gIGVsc2UuCi0KLSAgV2UgdXNlIHRoaXMgY29kZSBhY3RpdmUgZm9yIGFsbCB2ZXJz aW9ucyB0aGF0IHN1cHBvcnQgU0VUIEtFWSwgZXZlbiBpZiB0aGV5Ci0gIGRvbid0IHN1cHBvcnQg XEt2ZXJicywgYmVjYXVzZSBvdGhlcndpc2UgXEsgd291bGQgYmVoYXZlIGRpZmZlcmVudGx5IGZv cgotICBkaWZmZXJlbnQgdmVyc2lvbnMuCi0qLwotICAgIGZvciAoeCA9IDAsIHkgPSAwOyBzW3hd OyB4KyssIHkrKykgeyAvKiBDb252ZXJ0IFxLIHRvIFxcSyAqLwotICAgICAgICBpZiAoKHggPiAw KSAmJgotICAgICAgICAgICAgKHNbeF0gPT0gJ0snIHx8IHNbeF0gPT0gJ2snKQotICAgICAgICAg ICAgKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhhdmUgSyAqLwotCi0gICAgICAgICAg ICBpZiAoKHggPT0gMSAmJiBzW3gtMV0gPT0gQ01EUSkgfHwKLSAgICAgICAgICAgICAgICAoeCA+ IDEgJiYgc1t4LTFdID09IENNRFEgJiYgc1t4LTJdICE9IENNRFEpKSB7Ci0gICAgICAgICAgICAg ICAgbGluZVt5KytdID0gQ01EUTsgICAgICAgLyogTWFrZSBpdCBcXEsgKi8KLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIGlmICh4ID4gMSAmJiBzW3gtMV0gPT0gJ3snICYmIHNbeC0yXSA9PSBD TURRKSB7Ci0gICAgICAgICAgICAgICAgbGluZVt5LTFdID0gQ01EUTsgICAgICAgLyogSGF2ZSBc e0sgKi8KLSAgICAgICAgICAgICAgICBsaW5lW3krK10gPSAneyc7ICAgICAgICAvKiBNYWtlIGl0 IFxce0sgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBsaW5lW3ldID0gc1t4 XTsKLSAgICB9Ci0gICAgbGluZVt5KytdID0gTlVMOyAgICAgICAgICAgICAgICAgICAgLyogVGVy bWluYXRlICovCi0gICAgcyA9IGxpbmUgKyB5ICsgMTsgICAgICAgICAgICAgICAgICAgLyogUG9p bnQgdG8gYWZ0ZXIgaXQgKi8KLSAgICB4ID0gTElOQlVGU0laIC0gKGludCkgc3RybGVuKGxpbmUp IC0gMTsgLyogQ2FsY3VsYXRlIHJlbWFpbmluZyBzcGFjZSAqLwotICAgIGlmICgoeCA8IChMSU5C VUZTSVogLyAyKSkgfHwKLSAgICAgICAgKHp6c3RyaW5nKGxpbmUsICZzLCAmeCkgPCAwKSkgeyAv KiBFeHBhbmQgdmFyaWFibGVzLCBldGMuICovCi0gICAgICAgIHByaW50ZigiP0tleSBkZWZpbml0 aW9uIHRvbyBsb25nXG4iKTsKLSAgICAgICAgcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgcyA9IGxp bmUgKyB5ICsgMTsgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gcmVzdWx0LiAqLwotCi0j aWZuZGVmIE5PS1ZFUkJTCi0vKgotICBTcGVjaWFsIGNhc2U6IHNlZSBpZiB0aGUgZGVmaW5pdGlv biBzdGFydHMgd2l0aCBhIFxLdmVyYi4KLSAgSWYgaXQgZG9lcywgcG9pbnQgdG8gaXQgd2l0aCBw LCBvdGhlcndpc2Ugc2V0IHAgdG8gTlVMTC4KLSovCi0gICAgcCA9IHM7Ci0gICAgaWYgKCpwKysg PT0gQ01EUSkgewotICAgICAgICBpZiAoKnAgPT0gJ3snKSBwKys7Ci0gICAgICAgIHAgPSAoKnAg PT0gJ2snIHx8ICpwID09ICdLJykgPyBwICsgMSA6IE5VTEw7Ci0gICAgfQotI2VuZGlmIC8qIE5P S1ZFUkJTICovCi0KLSAgICAvKiBDbGVhciB0aGUgZGVmaW5pdGlvbiBmb3IgU0VUIEtFWSAqLwot ICAgIGlmIChtYWNyb3RhYltrY10pIHsgICAgICAgICAgICAgICAgIC8qIFBvc3NpYmx5IGZyZWUg b2xkIG1hY3JvIGZyb20ga2V5LiAqLwotICAgICAgICBmcmVlKChjaGFyICopbWFjcm90YWJba2Nd KTsKLSAgICAgICAgbWFjcm90YWJba2NdID0gTlVMTDsKLSAgICB9Ci0gICAga2V5bWFwW2tjXSA9 IChLRVkpIGtjOwotCi0gICAgLyogTm93IHJlcHJvZ3JhbSB0aGUgZGVmYXVsdCB2YWx1ZSBmb3Ig YWxsIHRlcm1pbmFsIHR5cGVzICovCi0gICAgLyogcmVtZW1iZXIgdG8gdHJlYXQgV3lzZSBhbmQg VGVsZXZpZGVvIHRlcm1pbmFscyBzcGVjaWFsICovCi0gICAgLyogYmVjYXVzZSBvZiB0aGVpciB1 c2Ugb2YgS3ZlcmJzIGZvciBCYWNrc3BhY2UgYW5kIEVudGVyICovCi0gICAgZm9yICh0ID0gMDsg dCA8PSBUVF9NQVg7IHQrKykgewotICAgICAgICBpZiAoIElTREcyMDAodCkgJiYga2MgPT0gMjY0 KSB7Ci0gICAgICAgICAgICBleHRlcm4gY2hhciAqIHVka2ZrZXlzW10gOwotICAgICAgICAgICAg aWYgKGtjID09IDI2NCkgeyAgICAgICAgICAgIC8qIFxLZGdicyAqLwotICAgICAgICAgICAgICAg IGlmICh1ZGtma2V5c1s4M10pCi0gICAgICAgICAgICAgICAgICBmcmVlKHVka2ZrZXlzWzgzXSk7 Ci0gICAgICAgICAgICAgICAgdWRrZmtleXNbODNdID0gc3RyZHVwKHMpOwotICAgICAgICAgICAg fQotICAgICAgICB9IGVsc2UgaWYgKElTV1lTRSh0KSB8fCBJU1RWSSh0KSkgewotICAgICAgICAg ICAgZXh0ZXJuIGNoYXIgKiB1ZGtma2V5c1tdIDsKLSAgICAgICAgICAgIGlmIChrYyA9PSAyNjQp IHsgICAgICAgICAgICAvKiBcS3d5YnMgb3IgXEt0dmlicyAqLwotICAgICAgICAgICAgICAgIGlm ICh1ZGtma2V5c1szMl0pCi0gICAgICAgICAgICAgICAgICBmcmVlKHVka2ZrZXlzWzMyXSk7Ci0g ICAgICAgICAgICAgICAgdWRrZmtleXNbMzJdID0gc3RyZHVwKHMpOwotICAgICAgICAgICAgfQot ICAgICAgICAgICAgaWYgKGtjID09IDI2OSkgeyAgICAgICAgICAgIC8qIFxLd3llbnRlciBhbmQg XEt3eXJldHVybiAqLwotICAgICAgICAgICAgICAgIGlmICh1ZGtma2V5c1szOV0pICAgICAgIC8q IFxLdHZpZW50ZXIgYW5kIFxLdHZpcmV0dXJuICovCi0gICAgICAgICAgICAgICAgICBmcmVlKHVk a2ZrZXlzWzM5XSk7Ci0gICAgICAgICAgICAgICAgdWRrZmtleXNbMzldID0gc3RyZHVwKHMpOwot ICAgICAgICAgICAgICAgIGlmICh1ZGtma2V5c1s0OV0pCi0gICAgICAgICAgICAgICAgICBmcmVl KHVka2ZrZXlzWzQ5XSk7Ci0gICAgICAgICAgICAgICAgdWRrZmtleXNbNDldID0gc3RyZHVwKHMp OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3dpdGNoIChz dHJsZW4ocykpIHsgICAgICAgIC8qIEFjdGlvbiBkZXBlbmRzIG9uIGxlbmd0aCAqLwotICAgICAg ICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIGluZGl2aWR1YWwga2V5 IGRlZiAqLwotICAgICAgICAgICAgICAgIGRlbGV0ZWtleW1hcCh0LGtjKTsKLSAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgIGRlZmV2 dC50eXBlID0ga2V5OyAgICAgIC8qIFNpbmdsZSBjaGFyYWN0ZXIgKi8KLSAgICAgICAgICAgICAg ICBkZWZldnQua2V5LnNjYW5jb2RlID0gKnM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVyIHN0cmluZyAq LwotI2lmbmRlZiBOT0tWRVJCUwotICAgICAgICAgICAgICAgIGlmIChwKSB7Ci0gICAgICAgICAg ICAgICAgICAgIHkgPSB4bG9va3VwKGt2ZXJicyxwLG5rdmVyYnMsJngpOyAvKiBMb29rIGl0IHVw ICovCi0gICAgICAgICAgICAgICAgICAgIC8qIEV4YWN0IG1hdGNoIHJlcSdkICovCi0gICAgICAg ICAgICAgICAgICAgIGRlYnVnKEYxMDEsInNldCBrZXkga3ZlcmIgbG9va3VwIiwwLHkpOwotICAg ICAgICAgICAgICAgICAgICBpZiAoeSA+IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk ZWZldnQudHlwZSA9IGt2ZXJiOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXZ0Lmt2ZXJi LmlkID0geTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIE5PS1ZFUkJTICovCi0gICAgICAg ICAgICAgICAgZGVmZXZ0LnR5cGUgPSBtYWNybzsKLSAgICAgICAgICAgICAgICBkZWZldnQubWFj cm8uc3RyaW5nID0gKGNoYXIgKikgbWFsbG9jKHN0cmxlbihzKSsxKTsKLSAgICAgICAgICAgICAg ICBpZiAoZGVmZXZ0Lm1hY3JvLnN0cmluZykKLSAgICAgICAgICAgICAgICAgIHN0cmNweShkZWZl dnQubWFjcm8uc3RyaW5nLCBzKTsgLyogc2FmZSAqLwotICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5zZXJ0a2V5bWFwKCB0LCBrYywgZGVmZXZ0ICkg OwotICAgICAgICAgICAgaW5pdHZpayA9IDE7ICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSBWSUsg dGFibGUgKi8KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4oMSk7Ci19Ci0jZW5kaWYgLyog T1MyICovCi0KLSNpZmRlZiBOVAotaW50Ci1zZXR3aW45NSggdm9pZCApIHsKLSAgICBpbnQgeCwg eSwgejsKLQotICAgIGlmICgoIHkgPSBjbWtleSh3aW45NXRhYiwgbndpbjk1LAotICAgICAgICAg ICAgICAgICAgICAiV2luZG93cyA5NSBzcGVjaWZpYyB3b3JrLWFyb3VuZHMiLAotICAgICAgICAg ICAgICAgICAgICAia2V5Ym9hcmQtdHJhbnNsYXRpb24iLAotICAgICAgICAgICAgICAgICAgICB4 eHN0cmluZykpIDwgMCApCi0gICAgICAgIHJldHVybiAoeSk7Ci0gICAgc3dpdGNoICh5KSB7Ci0g ICAgICBjYXNlIFhZV1BPUFVQOgotICAgICAgICBpZiAoKHkgPSBjbWtleShvbm9mZiwyLCJwb3B1 cHMgYXJlIHVzZWQgdG8gcHJvbXB0IHRoZSB1c2VyIGZvciBkYXRhIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgIm9uIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeSk7Ci0gICAg ICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICB3aW45NV9wb3B1 cCA9IHk7Ci0gICAgICAgIHJldHVybigxKTsKLQotICAgICAgY2FzZSBYWVc4XzM6Ci0gICAgICAg IGlmICgoeSA9IGNta2V5KG9ub2ZmLDIsIjguMyBGQVQgZmlsZSBuYW1lcyIsIm9mZiIseHhzdHJp bmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICBpZiAoKHggPSBjbWNmbSgp KSA8IDApIHJldHVybih4KTsKLSAgICAgICAgd2luOTVfOF8zID0geTsKLSAgICAgICAgcmV0dXJu KDEpOwotCi0gICAgICBjYXNlIFhZV1NFTEVDVDoKLSAgICAgICAgaWYgKCh5ID0gY21rZXkob25v ZmYsMiwiXCJzZWxlY3QoKVwiIGZhaWxzIG9uIHdyaXRlIiwib2ZmIiwKLSAgICAgICAgICAgICB4 eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgIGlmICgoeCA9IGNt Y2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICB3aW45NXNlbGVjdGJ1ZyA9IHk7Ci0gICAg ICAgIHJldHVybigxKTsKLQotICAgICAgY2FzZSBYWVdBR1I6Ci0gICAgICAgIGlmICgoeSA9IGNt a2V5KG9ub2ZmLDIsIlJpZ2h0LUFsdCBpcyBBbHQtR3IiLCJvZmYiLHh4c3RyaW5nKSkgPCAwKQot ICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1 cm4oeCk7Ci0gICAgICAgIHdpbjk1YWx0Z3IgPSB5OwotICAgICAgICByZXR1cm4oMSk7Ci0KLSAg ICAgIGNhc2UgWFlXT0lPOgotICAgICAgICBpZiAoKHkgPSBjbWtleShvbm9mZiwyLCJVc2UgT3Zl cmxhcHBlZCBJL08iLCJvbiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHkpOwot ICAgICAgICBpZiAoeSkgewotICAgICAgICAgICAgaWYgKCh4ID0gY21udW0oIk1heGltdW0gbnVt YmVyIG9mIG91dHN0YW5kaW5nIEkvTyByZXF1ZXN0cyIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAiMTAiLDEwLCZ6LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeCk7 Ci0gICAgICAgICAgICBpZiAoeiA8IDEgfHwgeiA+IDcpIHsKLSAgICAgICAgICAgICAgICBwcmlu dGYoCi0iP01heGltdW0gb3V0c3RhbmRpbmcgSS9PIHJlcXVlc3RzIG11c3QgYmUgYmV0d2VlbiAx IGFuZCA3LlxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgeiA9IDE7Ci0gICAgICAgIGlmICgoeCA9IGNtY2Zt KCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICBvd3dhaXQgPSAheTsKLSAgICAgICAgbWF4b3cg PSBtYXhvd191c3IgPSB6OwotICAgICAgICByZXR1cm4oMSk7Ci0KLSAgICAgIGNhc2UgWFlXS0VZ OgotI2lmbmRlZiBDT01NRU5UCi0gICAgICAgIHByaW50ZigiXG4/XCJLZXlib2FyZC1UcmFuc2xh dGlvblwiIGlzIG5vIGxvbmdlciByZXF1aXJlZC5cbiIpOwotICAgICAgICByZXR1cm4oLTkpOwot I2Vsc2UgLyogQ09NTUVOVCAqLwotICAgICAgICBpZiAoKCB6ID0gY21rZXkodGNzdGFiLCBudGNz LAotICAgICAgICAgICAgICAgICAgICAgICAgIktleWJvYXJkIENoYXJhY3RlciBTZXQiLAotICAg ICAgICAgICAgICAgICAgICAgICAgImxhdGluMS1pc28iLAotICAgICAgICAgICAgICAgICAgICAg ICAgeHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuICh6KTsKLSAgICAgICAgaWYgKCh4 ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLQotICAgICAgICB3aW45NWtj c2kgPSB6OwotICAgICAgICB3aW45NWtsMiA9ICh3aW45NWtjc2kgPT0gVENfMkxBVElOKTsKLQot ICAgICAgICBpZiAod2luOTVrY3NpID09IFRDX1RSQU5TUCkgewotICAgICAgICAgICAgd2luOTVr Y3MgPSBOVUxMOwotICAgICAgICB9IGVsc2UgewotI2lmZGVmIFVOSUNPREUKLSAgICAgICAgICAg IHdpbjk1a2NzID0geGxyW3dpbjk1a2NzaV1bdHgyZmModGNzbCldOwotI2Vsc2UgLyogVU5JQ09E RSAqLwotICAgICAgICAgICAgd2luOTVrY3MgPSB4bHJbd2luOTVrY3NpXVt0Y3NsXTsKLSNlbmRp ZiAvKiBVTklDT0RFICovCi0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuKDEpOwotI2VuZGlmIC8q IENPTU1FTlQgKi8KLQotICAgICAgY2FzZSBYWVdMVUM6Ci0gICAgICAgIGlmICgoeSA9IGNta2V5 KG9ub2ZmLDIsIlVuaWNvZGUtdG8tTHVjaWRhLUNvbnNvbGUgc3Vic3RpdHV0aW9ucyIsCi0gICAg ICAgICAgICAgICAgICAgICAgICJvbiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJu KHkpOwotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAg d2luOTVsdWNpZGEgPSB5OwotICAgICAgICByZXR1cm4oMSk7Ci0KLSAgICAgIGNhc2UgWFlXSFNM OgotCWlmICgoeSA9IGNta2V5KG9ub2ZmLDIsIkhvcml6b250YWwgU2NhbiBMaW5lIHN1YnN0aXR1 dGlvbnMiLAotCQkgICAgICAgIm9uIix4eHN0cmluZykpIDwgMCkKLQkgIHJldHVybih5KTsKLQlp ZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLQl3aW45NWhzbCA9IHk7Ci0JcmV0dXJu KDEpOwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBwcmludGYoIklsbGVnYWwgdmFsdWUgaW4g c2V0d2luOTUoKVxuIik7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfQotfQotI2VuZGlmIC8q IE5UICovCi0KLSNpZmRlZiBPUzIKLWludAotc2V0cHJ0eSAoCi0jaWZkZWYgQ0tfQU5TSUMKLSAg ICB2b2lkCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHNldHBydHkgKi8gKSB7Ci0gICAgaW50 IHgsIHksIHo7Ci0KLSAgICBpZiAoKCB5ID0gY21rZXkocHJ0eXRhYiwgbnBydHksCi0gICAgICAg ICAgICAgICAgICAgICJwcmlvcml0eSBsZXZlbCBvZiB0ZXJtaW5hbCBhbmQgY29tbXVuaWNhdGlv biB0aHJlYWRzIiwKLSAgICAgICAgICAgICAgICAgICAgImZvcmVncm91bmQtc2VydmVyIiwKLSAg ICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDAgKQotICAgICAgcmV0dXJuICh5KTsKLQot ICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgIHJldHVybiAoeCk7Ci0jaWZkZWYgSUtT RAotICAgIGlmIChpbnNlcnZlciAmJgotI2lmZGVmIElLU0RDT05GCi0gICAgICAgICBpa3NkY2YK LSNlbHNlCi0gICAgICAgICAxCi0jZW5kaWYgLyogSUtTRENPTkYgKi8KLSAgICApIHsKLSAgICAg ICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgIHByaW50ZigiP1Nv cnJ5LCBjb21tYW5kIGRpc2FibGVkLlxyXG4iKTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAw KTsKLSAgICB9Ci0jZW5kaWYgLyogSUtTRCAqLwotICAgIHByaW9yaXR5ID0geTsKLSAgICByZXR1 cm4oVFJVRSk7Ci19Ci0jZW5kaWYgLyogT1MyICovCi0KLWludAotc2V0YmVsbCgpIHsKLSAgICBp bnQgeSwgeDsKLSNpZmRlZiBPUzIKLSAgICBpbnQgejsKLSNlbmRpZiAvKiBPUzIgKi8KLQotICAg IGlmICgoeSA9IGNta2V5KGJlbHRhYixuYmVsdGFiLAotI2lmZGVmIE9TMgotICAgICAgICAiaG93 IGNvbnNvbGUgYW5kIHRlcm1pbmFsIGJlbGxzIHNob3VsZFxuYmUgZ2VuZXJhdGVkIiwgImF1ZGli bGUiLAotI2Vsc2UKLSAgICAgICAgIldoZXRoZXIgS2VybWl0IHNob3VsZCByaW5nIHRoZSB0ZXJt aW5hbCBiZWxsIChiZWVwKSIsICJvbiIsCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAg ICAgICAgeHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHkpOwotCi0jaWZkZWYgSUtT RAotICAgIGlmIChpbnNlcnZlcikgewotICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJl dHVybih5KTsKLSAgICAgICAgcHJpbnRmKCI/U29ycnksIGNvbW1hbmQgZGlzYWJsZWQuXHJcbiIp OwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgIH0KLSNlbmRpZiAvKiBJS1NEICov Ci0KLSAgICBzd2l0Y2ggKHkpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgQkVMTCAq LwotICAgICAgY2FzZSBYWUJfTk9ORToKLSNpZmRlZiBPUzIKLSAgICAgIGNhc2UgWFlCX1ZJUzoK LSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAg ICAgIHJldHVybih4KTsKLSNpZmRlZiBPUzIKLSAgICAgICAgdHRfYmVsbCA9IHk7Ci0jZWxzZQot ICAgICAgICB0dF9iZWxsID0gMDsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgYnJlYWs7Ci0K LSAgICAgIGNhc2UgWFlCX0FVRDoKLSNpZmRlZiBPUzIKLSAgICAgICAgaWYgKCh4ID0gY21rZXko YXVkaWJsZXRhYiwgbmF1ZGlibGV0YWIsCi0gICAgICAgICAgICAgICAiaG93IGF1ZGlibGUgY29u c29sZSBhbmQgdGVybWluYWxcbmJlbGxzIHNob3VsZCBiZSBnZW5lcmF0ZWQiLAotICAgICAgICAg ICAgICAgICAgICAgICAiYmVlcCIseHhzdHJpbmcpKTwwKQotICAgICAgICAgIHJldHVybih4KTsK LSAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgIHJldHVybih6KTsKLSAg ICAgICAgdHRfYmVsbCA9IHkgfCB4OwotI2Vsc2UKLSAgICAgICAgLyogVGhpcyBsZXRzIEMtS2Vy bWl0IGFjY2VwdCBidXQgaWdub3JlIHRyYWlsaW5nIEs5NSBrZXl3b3JkcyAqLwotICAgICAgICBp ZiAoKHggPSBjbXR4dCgiQ29uZmlybSB3aXRoIGNhcnJpYWdlIHJldHVybiIsIiIsJnMseHhzdHJp bmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICB0dF9iZWxsID0gMTsKLSNl bmRpZiAvKiBPUzIgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybigxKTsKLX0K LQotI2lmZGVmIE9TMk1PVVNFCi1pbnQKLXNldG1vdSgKLSNpZmRlZiBDS19BTlNJQwotICAgICAg IHZvaWQKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotIC8qIHNldG1vdSAqLyApIHsKLSAgICBleHRl cm4gaW50IGluaXR2aWs7Ci0gICAgaW50IGJ1dHRvbiA9IDAsIGV2ZW50ID0gMDsKLSAgICBjaGFy ICogcDsKLQotICAgIGlmICgoeSA9IGNta2V5KG1vdXNldGFiLG5tdGFiLCIiLCIiLHh4c3RyaW5n KSkgPCAwKQotICAgICAgcmV0dXJuKHkpOwotCi0jaWZkZWYgSUtTRAotICAgIGlmIChpbnNlcnZl cikgewotICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAg cHJpbnRmKCI/U29ycnksIGNvbW1hbmQgZGlzYWJsZWQuXHJcbiIpOwotICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDApOwotICAgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0KLSAgICBpZiAoeSA9PSBY WU1fT04pIHsgICAgICAgICAgICAgICAgICAvKiBNT1VTRSBBQ1RJVkFUSU9OICovCi0gICAgICAg IGludCBvbGRfbW91ID0gdHRfbW91c2U7Ci0gICAgICAgIGlmICgoeCA9IHNldG9uKCZ0dF9tb3Vz ZSkpIDwgMCkKLSAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgaWYgKHR0X21vdXNlICE9 IG9sZF9tb3UpCi0gICAgICAgICAgaWYgKHR0X21vdXNlKQotICAgICAgICAgICAgb3MyX21vdXNl b24oKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBvczJfbW91c2VvZmYoKTsKLSAgICAg ICAgcmV0dXJuKDEpOwotICAgIH0KLQotICAgIGlmICh5ID09IFhZTV9ERUJVRykgeyAgICAgICAg ICAgICAgIC8qIE1PVVNFIERFQlVHICovCi0gICAgICAgIGV4dGVybiBpbnQgTW91c2VEZWJ1ZzsK LSAgICAgICAgaWYgKCh4ID0gc2V0b24oJk1vdXNlRGVidWcpKSA8IDApCi0gICAgICAgICAgICBy ZXR1cm4oeCk7Ci0gICAgICAgIHJldHVybigxKTsKLSAgICB9Ci0KLSAgICBpZiAoeSA9PSBYWU1f Q0xFQVIpIHsgICAgICAgICAgICAgICAvKiBSZXNldCBNb3VzZSBEZWZhdWx0cyAqLwotICAgICAg ICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgbW91c2VtYXBpbml0 KC0xLC0xKTsKLSAgICAgICAgaW5pdHZpayA9IDE7ICAgICAgICAgICAgICAgICAgICAvKiBVcGRh dGUgVklLIFRhYmxlICovCi0gICAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICBpZiAoeSAhPSBY WU1fQlVUVE9OKSB7ICAgICAgICAgICAgICAvKiBTaG91bGRuJ3QgaGFwcGVuLiAqLwotICAgICAg ICBwcmludGYoIkludGVybmFsIHBhcnNpbmcgZXJyb3JcbiIpOwotICAgICAgICByZXR1cm4oLTkp OwotICAgIH0KLQotICAgIC8qIE1PVVNFIEVWRU5UIC4uLiAqLwotCi0gICAgaWYgKChidXR0b24g PSBjbWtleShtb3VzZWJ1dHRvbnRhYixubWJ0YWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAi QnV0dG9uIG51bWJlciIsIjEiLAotICAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8 IDApCi0gICAgICByZXR1cm4oYnV0dG9uKTsKLQotICAgIGlmICgoeSA9ICBjbWtleShtb3VzZW1v ZHRhYixubW10YWIsCi0gICAgICAgICAgICAgICAgICAgICJLZXlib2FyZCBtb2RpZmllciIsIm5v bmUiLAotICAgICAgICAgICAgICAgICAgICB4eHN0cmluZykpIDwgMCkKLSAgICAgIHJldHVybih5 KTsKLQotICAgIGV2ZW50IHw9IHk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9SIGluIHRo ZSBiaXRzICovCi0KLSAgICBpZiAoKHkgPSAgY21rZXkobWNsaWNrdGFiLG5tY3RhYiwiIiwiY2xp Y2siLHh4c3RyaW5nKSkgPCAwKQotICAgICAgcmV0dXJuKHkpOwotCi0gICAgLyogVHdvIGJpdHMg YXJlIGFzc2lnbmVkLCBpZiBuZWl0aGVyIGFyZSBzZXQgdGhlbiBpdCBpcyBidXR0b24gb25lICov Ci0KLSAgICBldmVudCB8PSB5OyAgICAgICAgICAgICAgICAgLyogT1IgaW4gdGhlIGJpdCAqLwot Ci0gICAgd2lkZXJlc3VsdCA9IC0xOwotCi0gICAgaWYgKCh5ID0gY210eHQoImRlZmluaXRpb24s XG5cCi1vciBDdHJsLUMgdG8gY2FuY2VsIHRoaXMgY29tbWFuZCxcblwKLW9yIEVudGVyIHRvIHJl c3RvcmUgZGVmYXVsdCBkZWZpbml0aW9uIiwKLSAgICAgICAgICAgICAgICAgICAiIiwmcyxOVUxM KSkgPCAwKSB7Ci0gICAgICAgIHJldHVybih5KTsKLSAgICB9Ci0gICAgcyA9IGJyc3RyaXAocyk7 Ci0gICAgcCA9IHM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2F2ZSB0aGlzIHBs YWNlICovCi0vKgotICBJZiB0aGUgZGVmaW5pdGlvbiBpbmNsdWRlZCBhbnkgXEt2ZXJicywgcXVv dGUgdGhlIGJhY2tzbGFzaCBzbyB0aGUgXEt2ZXJiCi0gIHdpbGwgc3RpbGwgYmUgaW4gdGhlIGRl ZmluaXRpb24gd2hlbiB0aGUga2V5IGlzIHByZXNzZWQuICBXZSBkb24ndCBkbyB0aGlzCi0gIGlu IHp6c3RyaW5nKCksIGJlY2F1c2UgXEt2ZXJicyBhcmUgdmFsaWQgb25seSBpbiB0aGlzIGNvbnRl eHQgYW5kIG5vd2hlcmUKLSAgZWxzZS4gIFRoaXMgY29kZSBjb3BpZWQgZnJvbSBTRVQgS0VZLCBx LnYuIGZvciBhZGR0J2wgY29tbWVudGFyeS4KLSovCi0gICAgZm9yICh4ID0gMCwgeSA9IDA7IHNb eF07IHgrKywgeSsrKSB7IC8qIENvbnZlcnQgXEsgdG8gXFxLICovCi0gICAgICAgIGlmICgoeCA+ IDApICYmCi0gICAgICAgICAgICAoc1t4XSA9PSAnSycgfHwgc1t4XSA9PSAnaycpCi0gICAgICAg ICAgICApIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogSGF2ZSBLICovCi0KLSAgICAgICAg ICAgIGlmICgoeCA9PSAxICYmIHNbeC0xXSA9PSBDTURRKSB8fAotICAgICAgICAgICAgICAgICh4 ID4gMSAmJiBzW3gtMV0gPT0gQ01EUSAmJiBzW3gtMl0gIT0gQ01EUSkpIHsKLSAgICAgICAgICAg ICAgICBsaW5lW3krK10gPSBDTURROyAgICAgICAvKiBNYWtlIGl0IFxcSyAqLwotICAgICAgICAg ICAgfQotICAgICAgICAgICAgaWYgKHggPiAxICYmIHNbeC0xXSA9PSAneycgJiYgc1t4LTJdID09 IENNRFEpIHsKLSAgICAgICAgICAgICAgICBsaW5lW3ktMV0gPSBDTURROyAgICAgICAvKiBIYXZl IFx7SyAqLwotICAgICAgICAgICAgICAgIGxpbmVbeSsrXSA9ICd7JzsgICAgICAgIC8qIE1ha2Ug aXQgXFx7SyAqLwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGxpbmVbeV0gPSBz W3hdOwotICAgIH0KLSAgICBsaW5lW3krK10gPSBOVUw7ICAgICAgICAgICAgICAgICAgICAvKiBU ZXJtaW5hdGUgKi8KLSAgICBzID0gbGluZSArIHkgKyAxOyAgICAgICAgICAgICAgICAgICAvKiBQ b2ludCB0byBhZnRlciBpdCAqLwotICAgIHggPSBMSU5CVUZTSVogLSAoaW50KSBzdHJsZW4obGlu ZSkgLSAxOyAvKiBDYWxjdWxhdGUgcmVtYWluaW5nIHNwYWNlICovCi0gICAgaWYgKCh4IDwgKExJ TkJVRlNJWiAvIDIpKSB8fAotICAgICAgICAoenpzdHJpbmcobGluZSwgJnMsICZ4KSA8IDApKSB7 IC8qIEV4cGFuZCB2YXJpYWJsZXMsIGV0Yy4gKi8KLSAgICAgICAgcHJpbnRmKCI/S2V5IGRlZmlu aXRpb24gdG9vIGxvbmdcbiIpOwotICAgICAgICByZXR1cm4oLTkpOwotICAgIH0KLSAgICBzID0g bGluZSArIHkgKyAxOyAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byByZXN1bHQuICovCi0K LSNpZm5kZWYgTk9LVkVSQlMKLS8qCi0gIFNwZWNpYWwgY2FzZTogc2VlIGlmIHRoZSBkZWZpbml0 aW9uIHN0YXJ0cyB3aXRoIGEgXEt2ZXJiLgotICBJZiBpdCBkb2VzLCBwb2ludCB0byBpdCB3aXRo IHAsIG90aGVyd2lzZSBzZXQgcCB0byBOVUxMLgotKi8KLSAgICBwID0gczsKLSAgICBpZiAoKnAr KyA9PSBDTURRKSB7Ci0gICAgICAgIGlmICgqcCA9PSAneycpIHArKzsKLSAgICAgICAgcCA9ICgq cCA9PSAnaycgfHwgKnAgPT0gJ0snKSA/IHAgKyAxIDogTlVMTDsKLSAgICB9Ci0jZWxzZQotICAg IHAgPSBOVUxMOwotI2VuZGlmIC8qIE5PS1ZFUkJTICovCi0KLSAgICAvKiBmcmVlIHRoZSBvbGQg ZGVmaW5pdGlvbiBpZiBuZWNlc3NhcnkgKi8KLSAgICBpZiAobW91c2VtYXBbYnV0dG9uXVtldmVu dF0udHlwZSA9PSBtYWNybykgewotICAgICAgICBmcmVlKCBtb3VzZW1hcFtidXR0b25dW2V2ZW50 XS5tYWNyby5zdHJpbmcpOwotICAgICAgICBtb3VzZW1hcFtidXR0b25dW2V2ZW50XS5tYWNyby5z dHJpbmcgPSBOVUxMOwotICAgIH0KLSAgICBzd2l0Y2ggKHN0cmxlbihzKSkgeyAgICAgICAgICAg ICAgICAvKiBBY3Rpb24gZGVwZW5kcyBvbiBsZW5ndGggKi8KLSAgICAgIGNhc2UgMDogICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCB0byBkZWZhdWx0IGJpbmRpbmcgKi8KLSAgICAg ICAgbW91c2VtYXBpbml0KCBidXR0b24sIGV2ZW50ICk7Ci0gICAgICAgIGJyZWFrOwotICAgICAg Y2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNpbmdsZSBjaGFyYWN0ZXIgKi8K LSAgICAgICAgICAgIG1vdXNlbWFwW2J1dHRvbl1bZXZlbnRdLnR5cGUgPSBrZXk7Ci0gICAgICAg IG1vdXNlbWFwW2J1dHRvbl1bZXZlbnRdLmtleS5zY2FuY29kZSA9ICpzOwotICAgICAgICBicmVh azsKLSAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIg c3RyaW5nICovCi0jaWZuZGVmIE5PS1ZFUkJTCi0gICAgICAgIGlmIChwKSB7Ci0gICAgICAgICAg ICB5ID0geGxvb2t1cChrdmVyYnMscCxua3ZlcmJzLCZ4KTsgLyogTG9vayBpdCB1cCAqLwotICAg ICAgICAgICAgZGVidWcoRjEwMSwic2V0IG1vdXNlIGt2ZXJiIGxvb2t1cCIsMCx5KTsgLyogbmVl ZCBleGFjdCBtYXRjaCAqLwotICAgICAgICAgICAgaWYgKHkgPiAtMSkgewotICAgICAgICAgICAg LyogQXNzaWduIHRoZSBrdmVyYiB0byB0aGUgZXZlbnQgKi8KLSAgICAgICAgICAgIG1vdXNlbWFw W2J1dHRvbl1bZXZlbnRdLnR5cGUgPSBrdmVyYjsKLSAgICAgICAgICAgIG1vdXNlbWFwW2J1dHRv bl1bZXZlbnRdLmt2ZXJiLmlkID0gRl9LVkVSQiB8IHk7Ci0gICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIE5PS1ZFUkJTICovCi0KLSAgICAgICAv KiBPdGhlcndpc2UsIGl0J3MgYSBtYWNybywgc28gYXNzaWduIHRoZSBtYWNybyB0byB0aGUgZXZl bnQgKi8KLSAgICAgICBtb3VzZW1hcFtidXR0b25dW2V2ZW50XS50eXBlID0gbWFjcm87Ci0gICAg ICAgbW91c2VtYXBbYnV0dG9uXVtldmVudF0ubWFjcm8uc3RyaW5nID0gKE1BQ1JPKSBtYWxsb2Mo c3RybGVuKHMpKzEpOwotICAgICAgIGlmIChtb3VzZW1hcFtidXR0b25dW2V2ZW50XS5tYWNyby5z dHJpbmcpCi0gICAgICAgICBzdHJjcHkoKGNoYXIgKikgbW91c2VtYXBbYnV0dG9uXVtldmVudF0u bWFjcm8uc3RyaW5nLCBzKTsgLyogc2FmZSAqLwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg aW5pdHZpayA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgLyogVXBkYXRlIFZJSyBUYWJsZSAq LwotICAgIGlmICggKGJ1dHRvbiA9PSBYWU1fQjMpICYmIChtb3VzZWJ1dHRvbmNvdW50KCkgPCAz KSAmJiAhcXVpZXQgKQotICAgIHsKLSAgICAgICAgcHJpbnRmKCI/V2FybmluZzogdGhpcyBtYWNo aW5lIGRvZXMgbm90IGhhdmUgYSB0aHJlZSBidXR0b24gbW91c2UuXG4iKTsKLSAgICAgICAgcmV0 dXJuKDApOwotICAgIH0KLSAgICByZXR1cm4oMSk7Ci19Ci0jZW5kaWYgLyogT1MyTU9VU0UgKi8K LSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSNpZm5kZWYgTk9YRkVSCi1pbnQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFNFTkQvUkVDRUlWRSAqLwotc2V0c3IoeHgs IHJtc2ZsZykgaW50IHh4OyBpbnQgcm1zZmxnOyB7Ci0gICAgaWYgKHh4ID09IFhZUkVDVikKLSAg ICAgIGNrc3RybmNweShsaW5lLCJQYXJhbWV0ZXIgZm9yIGluYm91bmQgcGFja2V0cyIsTElOQlVG U0laKTsKLSAgICBlbHNlCi0gICAgICBja3N0cm5jcHkobGluZSwiUGFyYW1ldGVyIGZvciBvdXRi b3VuZCBwYWNrZXRzIixMSU5CVUZTSVopOwotCi0gICAgaWYgKHJtc2ZsZykgewotICAgICAgICBp ZiAoKHkgPSBjbWtleShyc3J0YWIsbnJzcnRhYixsaW5lLCIiLHh4c3RyaW5nKSkgPCAwKSB7Ci0g ICAgICAgICAgICBpZiAoeSA9PSAtMykgewotICAgICAgICAgICAgICAgIHByaW50ZigiP1JlbW90 ZSByZWNlaXZlIHBhcmFtZXRlciByZXF1aXJlZFxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJu KC05KTsKLSAgICAgICAgICAgIH0gZWxzZSByZXR1cm4oeSk7Ci0gICAgICAgIH0KLSAgICB9IGVs c2UgewotICAgICAgICBpZiAoKHkgPSBjbWtleShzcnRhYixuc3J0YWIsbGluZSwiIix4eHN0cmlu ZykpIDwgMCkgcmV0dXJuKHkpOwotICAgIH0KLSAgICBzd2l0Y2ggKHkpIHsKLSAgICAgIGNhc2Ug WFlRQ1RMOiAgICAgICAgICAgICAgICAgICAgICAvKiBDT05UUk9MLVBSRUZJWCAqLwotICAgICAg ICBpZiAoKHggPSBjbW51bSgiQVNDSUkgdmFsdWUgb2YgY29udHJvbCBwcmVmaXgiLCIiLDEwLCZ5 LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgaWYgKCh4ID0g Y21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIGlmICgoeSA+IDMyICYmIHkgPCA2Mykg fHwgKHkgPiA5NSAmJiB5IDwgMTI3KSkgewotICAgICAgICAgICAgaWYgKHh4ID09IFhZUkVDVikK LSAgICAgICAgICAgICAgY3RscSA9IChDSEFSKSB5OyAgICAgICAgICAvKiBSRUNFSVZFIHByZWZp eCwgdXNlIHdpdGggY2F1dGlvbiEgKi8KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg bXljdGxxID0gKENIQVIpIHk7ICAgICAgICAvKiBTRU5EIHByZWZpeCwgT0sgdG8gY2hhbmdlICov Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgICB9IGVsc2UgewotICAg ICAgICAgICAgcHJpbnRmKCI/SWxsZWdhbCB2YWx1ZSBmb3IgcHJlZml4IGNoYXJhY3RlclxuIik7 Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgWFlFT0w6 Ci0gICAgICAgIGlmICgoeSA9IHNldGNjKCIxMyIsJnopKSA8IDApCi0gICAgICAgICAgICByZXR1 cm4oeSk7Ci0gICAgICAgIGlmICh6ID4gMzEpIHsKLSAgICAgICAgICAgIHByaW50ZigiU29ycnks IHRoZSBsZWdhbCB2YWx1ZXMgYXJlIDAtMzFcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsK LSAgICAgICAgfQotICAgICAgICBpZiAoeHggPT0gWFlSRUNWKQotICAgICAgICAgIGVvbCA9IChD SEFSKSB6OwotICAgICAgICBlbHNlCi0gICAgICAgICAgc2VvbCA9IChDSEFSKSB6OwotICAgICAg ICByZXR1cm4oc3VjY2VzcyA9IHkpOwotCi0gICAgICBjYXNlIFhZTEVOOgotICAgICAgICB5ID0g Y21udW0oIk1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gYSBwYWNrZXQiLCI5MCIsMTAs JngsCi0gICAgICAgICAgICAgICAgICB4eHN0cmluZyk7Ci0gICAgICAgIGlmICh4eCA9PSBYWVJF Q1YpIHsgICAgICAgICAgICAgLyogUmVjZWl2ZS4uLiAqLwotICAgICAgICAgICAgaWYgKCh5ID0g c2V0bnVtKCZ6LHgseSxtYXhycHMpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih5KTsKLSAg ICAgICAgICAgIGlmIChwcm90b2NvbCAhPSBQUk9UT19LKSB7Ci0gICAgICAgICAgICAgICAgcHJp bnRmKCI/U29ycnksIHRoaXMgY29tbWFuZCBkb2VzIG5vdCBhcHBseSB0byAlcyBwcm90b2NvbC5c biIsCi0gICAgICAgICAgICAgICAgICAgICAgIHB0YWJbcHJvdG9jb2xdLnBfbmFtZQotICAgICAg ICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgIHByaW50ZigiVXNlIFNFVCBTRU5E IFBBQ0tFVC1MRU5HVEggZm9yIFhZWk1PREVNXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4o LTkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHogPCAxMCkgewotICAgICAgICAg ICAgICAgIHByaW50ZigiU29ycnksIDEwIGlzIHRoZSBtaW5pbXVtXG4iKTsKLSAgICAgICAgICAg ICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJtc2ZsZykg ewotICAgICAgICAgICAgICAgIHNzdGF0ZSA9IHNldGdlbignUycsICI0MDEiLCBja2l0b2Eoeiks ICIiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oKGludCkgc3N0YXRlKTsKLSAgICAgICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHByb3RvY29sID09IFBST1RPX0spIHsKLSAg ICAgICAgICAgICAgICAgICAgaWYgKHogPiBNQVhSUCkgeiA9IE1BWFJQOwotICAgICAgICAgICAg ICAgICAgICB5ID0gYWRqcGtsKHosd3Nsb3RyLGJpZ3Jic2l6KTsKLSAgICAgICAgICAgICAgICAg ICAgaWYgKHkgIT0geikgewotICAgICAgICAgICAgICAgICAgICAgICAgdXJwc2l6ID0geTsKLSAg ICAgICAgICAgICAgICAgICAgICAgIGlmICgheGNtZHNyYykKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKG1zZ2ZsZykgcHJpbnRmKAotIiBBZGp1c3RpbmcgcmVjZWl2ZSBwYWNrZXQtbGVu Z3RoIHRvICVkIGZvciAlZCB3aW5kb3cgc2xvdHNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB5LCB3c2xvdHIpOwotICAgICAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgICAgIHVycHNpeiA9IHk7Ci0gICAgICAgICAgICAgICAgICAgIHB0 YWJbcHJvdG9jb2xdLnJwa3RsZW4gPSB1cnBzaXo7Ci0gICAgICAgICAgICAgICAgICAgIHJwc2l6 ID0gICh5ID4gOTQpID8gOTQgOiB5OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0jaWZkZWYg Q0tfWFlaCi0gICAgICAgICAgICAgICAgICAgIGlmICgocHJvdG9jb2wgPT0gUFJPVE9fWCB8fCBw cm90b2NvbCA9PSBQUk9UT19YQykgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICB6ICE9IDEy OCAmJiB6ICE9IDEwMjQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiU29ycnks IGJhZCBwYWNrZXQgbGVuZ3RoIGZvciBYTU9ERU0uXG4iKTsKLSAgICAgICAgICAgICAgICAgICAg ICAgIHByaW50ZigiUGxlYXNlIHVzZSAxMjggb3IgMTAyNC5cbiIpOwotICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIENL X1hZWiAqLwotICAgICAgICAgICAgICAgICAgICB1cnBzaXogPSBycHNpeiA9IHo7Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFNlbmQuLi4gKi8KLSAgICAgICAgICAgIGlmICgoeSA9IHNldG51bSgmeix4 LHksbWF4c3BzKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICBp ZiAoeiA8IDEwKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJTb3JyeSwgMTAgaXMgdGhlIG1p bmltdW1cbiIpOwotICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgICAgICBpZiAocHJvdG9jb2wgPT0gUFJPVE9fSykgewotICAgICAgICAgICAgICAgIGlm ICh6ID4gTUFYU1ApIHogPSBNQVhTUDsKLSAgICAgICAgICAgICAgICBzcHNpeiA9IHo7ICAgICAg ICAgICAgICAvKiBTZXQgaXQgKi8KLSAgICAgICAgICAgICAgICB5ID0gYWRqcGtsKHNwc2l6LHdz bG90cixiaWdzYnNpeik7Ci0gICAgICAgICAgICAgICAgaWYgKHkgIT0gc3BzaXogJiYgIXhjbWRz cmMpCi0gICAgICAgICAgICAgICAgICBpZiAobXNnZmxnKQotICAgICAgICAgICAgICAgICAgICBw cmludGYoIkFkanVzdGluZyBwYWNrZXQgc2l6ZSB0byAlZCBmb3IgJWQgd2luZG93IHNsb3RzXG4i LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgeSx3c2xvdHIpOwotICAgICAgICAgICAgfSBl bHNlCi0gICAgICAgICAgICAgIHkgPSB6OwotI2lmZGVmIENLX1hZWgotICAgICAgICAgICAgaWYg KChwcm90b2NvbCA9PSBQUk9UT19YIHx8IHByb3RvY29sID09IFBST1RPX1hDKSAmJgotICAgICAg ICAgICAgICAgICB6ICE9IDEyOCAmJiB6ICE9IDEwMjQpIHsKLSAgICAgICAgICAgICAgICBwcmlu dGYoIlNvcnJ5LCBiYWQgcGFja2V0IGxlbmd0aCBmb3IgWE1PREVNLlxuIik7Ci0gICAgICAgICAg ICAgICAgcHJpbnRmKCJQbGVhc2UgdXNlIDEyOCBvciAxMDI0LlxuIik7Ci0gICAgICAgICAgICAg ICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19YWVogKi8KLSAgICAg ICAgICAgIHNwc2l6ID0gc3BtYXggPSBzcHNpenIgPSB5OyAvKiBTZXQgaXQgYW5kIGZsYWcgdGhh dCBpdCB3YXMgc2V0ICovCi0gICAgICAgICAgICBzcHNpemYgPSAxOyAgICAgICAgICAgICAgICAg LyogdG8gYWxsb3cgb3ZlcnJpZGluZyBTZW5kLUluaXQuICovCi0gICAgICAgICAgICBwdGFiW3By b3RvY29sXS5zcGt0ZmxnID0gc3BzaXpmOwotICAgICAgICAgICAgcHRhYltwcm90b2NvbF0uc3Br dGxlbiA9IHNwc2l6OwotICAgICAgICB9Ci0gICAgICAgIGlmIChwZmxhZyAmJiBwcm90b2NvbCA9 PSBQUk9UT19LICYmICF4Y21kc3JjKSB7Ci0gICAgICAgICAgICBpZiAoeiA+IDk0ICYmICFyZWxp YWJsZSAmJiBtc2dmbGcpIHsKLSAgICAgICAgICAgICAgICAvKiBwcmludGYoIkV4dGVuZGVkLWxl bmd0aCBwYWNrZXRzIHJlcXVlc3RlZC5cbiIpOyAqLwotICAgICAgICAgICAgICAgIGlmIChiY3Ry IDwgMiAmJiB6ID4gMjAwKSBwcmludGYoIlwKLVJlbWVtYmVyIHRvIFNFVCBCTE9DSyAyIG9yIDMg Zm9yIGxvbmcgcGFja2V0cy5cbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHNw ZWVkIDw9IDBMKSBzcGVlZCA9IHR0Z3NwZCgpOwotI2lmZGVmIENPTU1FTlQKLS8qCi0gIEtlcm1p dCBkb2VzIHRoaXMgbm93IGl0c2VsZi4KLSovCi0gICAgICAgICAgICBpZiAoc3BlZWQgPD0gMEwg JiYgeiA+IDIwMCAmJiBtc2dmbGcpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIlwKLU1ha2Ug c3VyZSB5b3VyIHRpbWVvdXQgaW50ZXJ2YWwgaXMgbG9uZyBlbm91Z2ggZm9yICVkLWJ5dGUgcGFj a2V0cy5cbiIseik7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAg ICB9Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0geSk7Ci0KLSAgICAgIGNhc2UgWFlNQVJLOgot I2lmZGVmIERPT01TREFZCi0vKgotICBQcmludGFibGUgc3RhcnQtb2YtcGFja2V0IHdvcmtzIGZv ciBVTklYIGFuZCBWTVMgb25seSEKLSovCi0gICAgICAgIHhfaWZudW0gPSAxOwotICAgICAgICB5 ID0gY21udW0oIkNvZGUgZm9yIHBhY2tldC1zdGFydCBjaGFyYWN0ZXIiLCIxIiwxMCwmeCx4eHN0 cmluZyk7Ci0gICAgICAgIHhfaWZudW0gPSAwOwotICAgICAgICBpZiAoKHkgPSBzZXRudW0oJnos eCx5LDEyNikpIDwgMCkgcmV0dXJuKHkpOwotI2Vsc2UKLSAgICAgICAgaWYgKCh5ID0gc2V0Y2Mo IjEiLCZ6KSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuKHkpOwotI2VuZGlmIC8qIERPT01TREFZ ICovCi0gICAgICAgIGlmICh4eCA9PSBYWVJFQ1YpCi0gICAgICAgICAgc3RjaHIgPSAoQ0hBUikg ejsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBteXN0Y2ggPSAoQ0hBUikgejsKLSNpZmRl ZiBJS1NfT1BUSU9OCi0gICAgICAgICAgICAvKiBJZiBJS1MgbmVnb3RpYXRpb24gaW4gdXNlICAg Ki8KLSAgICAgICAgICAgIGlmIChURUxPUFRfVShURUxPUFRfS0VSTUlUKSB8fCBURUxPUFRfTUUo VEVMT1BUX0tFUk1JVCkpCi0gICAgICAgICAgICAgIHRuX3Npa3MoS0VSTUlUX1NPUCk7ICAgICAg LyogUmVwb3J0IGNoYW5nZSB0byBvdGhlciBzaWRlICovCi0jZW5kaWYgLyogSUtTX09QVElPTiAq LwotICAgICAgICB9Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0geSk7Ci0KLSAgICAgIGNhc2Ug WFlOUEFEOiAgICAgICAgICAgICAgICAgICAgICAvKiBQQURESU5HICovCi0gICAgICAgIHkgPSBj bW51bSgiSG93IG1hbnkgcGFkZGluZyBjaGFyYWN0ZXJzIGZvciBpbmJvdW5kIHBhY2tldHMiLCIw IiwxMCwmeCwKLSAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKTsKLSAgICAgICAgaWYgKCh5ID0g c2V0bnVtKCZ6LHgseSw5NCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBpZiAoeHggPT0gWFlS RUNWKQotICAgICAgICAgIG15cGFkbiA9IChDSEFSKSB6OwotICAgICAgICBlbHNlCi0gICAgICAg ICAgbnBhZCA9IChDSEFSKSB6OwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHkpOwotCi0gICAg ICBjYXNlIFhZUEFEQzogICAgICAgICAgICAgICAgICAgICAgLyogUEFELUNIQVJBQ1RFUiAqLwot ICAgICAgICBpZiAoKHkgPSBzZXRjYygiMCIsJnopKSA8IDApIHJldHVybih5KTsKLSAgICAgICAg aWYgKHh4ID09IFhZUkVDVikgbXlwYWRjID0gejsgZWxzZSBwYWRjaCA9IHo7Ci0gICAgICAgIHJl dHVybihzdWNjZXNzID0geSk7Ci0KLSAgICAgIGNhc2UgWFlUSU1POiAgICAgICAgICAgICAgICAg ICAgICAvKiBUSU1FT1VUICovCi0gICAgICAgIGlmICh4eCA9PSBYWVJFQ1YpIHsKLSAgICAgICAg ICAgIHkgPSBjbW51bSgiUGFja2V0IHRpbWVvdXQgaW50ZXJ2YWwiLGNraXRvYShVUlRJTUUpLDEw LCZ4LHh4c3RyaW5nKTsKLSAgICAgICAgICAgIGlmICgoeSA9IHNldG51bSgmeix4LHksOTQpKSA8 IDApIHJldHVybih5KTsKLQotICAgICAgICAgICAgaWYgKHJtc2ZsZykgeyAgICAgICAgICAgICAg IC8qIFJFTU9URSBTRVQgUkVDRUlWRSBUSU1FT1VUICovCi0gICAgICAgICAgICAgICAgc3N0YXRl ID0gc2V0Z2VuKCdTJywgIjQwMiIsIGNraXRvYSh6KSwgIiIpOwotICAgICAgICAgICAgICAgIHJl dHVybigoaW50KSBzc3RhdGUpOwotICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAg ICAgIC8qIFNFVCBSRUNFSVZFIFRJTUVPVVQgKi8KLSAgICAgICAgICAgICAgICBwa3R0aW0gPSB6 OyAgICAgICAgICAgICAvKiAgIFZhbHVlIHRvIHB1dCBpbiBteSBuZWdvdGlhdGlvbiAqLwotICAg ICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgcGFja2V0IGZvciBvdGhl ciBLZXJtaXQgdG8gdXNlICovCi0KLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAg ICAgICAvKiBTRVQgU0VORCBUSU1FT1VUICovCi0jaWZkZWYgQ0tfVElNRVJTCi0gICAgICAgICAg ICBleHRlcm4gaW50IHJ0dGZsZywgbWludGltZSwgbWF4dGltZTsKLSAgICAgICAgICAgIGludCB0 bWluID0gMCwgdG1heCA9IDA7Ci0jZW5kaWYgLyogQ0tfVElNRVJTICovCi0gICAgICAgICAgICB5 ID0gY21udW0oIlBhY2tldCB0aW1lb3V0IGludGVydmFsIixja2l0b2EoRE1ZVElNKSwxMCwmeCx4 eHN0cmluZyk7Ci0gICAgICAgICAgICBpZiAoeSA9PSAtMykgeyAgICAgICAgICAgICAgLyogVGhl eSBjYW5jZWxsZWQgYSBwcmV2aW91cyAqLwotICAgICAgICAgICAgICAgIHggPSBETVlUSU07ICAg ICAgICAgICAgIC8qIFNFVCBTRU5EIGNvbW1hbmQsIHNvIHJlc3RvcmUgKi8KLSAgICAgICAgICAg ICAgICB0aW1lZiA9IDA7ICAgICAgICAgICAgICAvKiBhbmQgdHVybiBvZmYgdGhlIG92ZXJyaWRl IGZsYWcgKi8KLSAgICAgICAgICAgICAgICB5ID0gY21jZm0oKTsKLSAgICAgICAgICAgIH0KLSNp ZmRlZiBDS19USU1FUlMKLSAgICAgICAgICAgIGlmICh5IDwgMCkgcmV0dXJuKHkpOwotICAgICAg ICAgICAgaWYgKHggPCAwKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/T3V0IG9mIHJhbmdl IC0gJWRcbiIseCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIGlmICgoeiA9IGNta2V5KHRpbW90YWIsMiwiIiwiZHluYW1pYyIseHhzdHJp bmcpKSA8IDApIHJldHVybih6KTsKLSAgICAgICAgICAgIGlmICh6KSB7Ci0gICAgICAgICAgICAg ICAgaWYgKCh5ID0gY21udW0oIk1pbmltdW0gdGltZW91dCB0byBhbGxvdyIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIjEiLDEwLCZ0bWluLHh4c3RyaW5nKSkgPCAwKQotICAgICAg ICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAgIGlmICh0bWluIDwgMSkgewot ICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9PdXQgb2YgcmFuZ2UgLSAlZFxuIix0bWluKTsK LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgaWYgKCh5ID0gY21udW0oIk1heGltdW0gdGltZW91dCB0byBhbGxvdyIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiLDEwLCZ0bWF4LHh4c3RyaW5nKSkgPCAw KQotICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAgIC8qIDAgbWVh bnMgbGV0IEtlcm1pdCBjaG9vc2UsIDwgMCBtZWFucyBubyBtYXhpbXVtICovCi0gICAgICAgICAg ICB9Ci0gICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgICAgIHJl dHVybih5KTsKLSAgICAgICAgICAgIHJ0dGZsZyA9IHo7ICAgICAgICAgICAgICAgICAvKiBSb3Vu ZC10cmlwIHRpbWVyIGZsYWcgKi8KLSAgICAgICAgICAgIHogPSB4OwotI2Vsc2UKLSAgICAgICAg ICAgIGlmICgoeSA9IHNldG51bSgmeix4LHksOTQpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVy bih5KTsKLSNlbmRpZiAvKiBDS19USU1FUlMgKi8KLSAgICAgICAgICAgIHRpbWVmID0gMTsgICAg ICAgICAgICAgICAgICAvKiBUdXJuIG9uIHRoZSBvdmVycmlkZSBmbGFnICovCi0gICAgICAgICAg ICB0aW1pbnQgPSBydGltbyA9IHo7ICAgICAgICAgLyogT3ZlcnJpZGUgdmFsdWUgZm9yIG1lIHRv IHVzZSAqLwotI2lmZGVmIENLX1RJTUVSUwotICAgICAgICAgICAgaWYgKHJ0dGZsZykgeyAgICAg ICAgICAgICAgIC8qIExvd2VyIGFuZCB1cHBlciBib3VuZHMgKi8KLSAgICAgICAgICAgICAgICBt aW50aW1lID0gdG1pbjsKLSAgICAgICAgICAgICAgICBtYXh0aW1lID0gdG1heDsKLSAgICAgICAg ICAgIH0KLSNlbmRpZiAvKiBDS19USU1FUlMgKi8KLSAgICAgICAgfQotICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDEpOwotCi0gICAgICBjYXNlIFhZRlBBVEg6ICAgICAgICAgICAgICAgICAgICAg LyogUEFUSE5BTUVTICovCi0gICAgICAgIGlmICh4eCA9PSBYWVJFQ1YpIHsKLSAgICAgICAgICAg IHkgPSBjbWtleShycGF0aHRhYixucnBhdGh0YWIsIiIsImF1dG8iLHh4c3RyaW5nKTsKLSAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHkgPSBjbWtleShwYXRodGFiLG5wYXRodGFiLCIiLCJv ZmYiLHh4c3RyaW5nKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoeSA8IDApIHJldHVybih5KTsK LQotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgaWYg KHh4ID09IFhZUkVDVikgeyAgICAgICAgICAgICAvKiBTRVQgUkVDRUlWRSBQQVRITkFNRVMgKi8K LSAgICAgICAgICAgIGZucnBhdGggPSB5OwotICAgICAgICAgICAgcHRhYltwcm90b2NvbF0uZm5y cCA9IGZucnBhdGg7Ci0gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyog U0VUIFNFTkQgUEFUSE5BTUVTICovCi0gICAgICAgICAgICBmbnNwYXRoID0geTsKLSAgICAgICAg ICAgIHB0YWJbcHJvdG9jb2xdLmZuc3AgPSBmbnNwYXRoOwotICAgICAgICB9Ci0gICAgICAgIHJl dHVybihzdWNjZXNzID0gMSk7ICAgICAgICAgICAgLyogTm90ZTogMCA9IE9OLCAxID0gT0ZGICov Ci0gICAgICAgIC8qIEluIG90aGVyIHdvcmRzLCBPTiA9IGxlYXZlIHBhdGhuYW1lcyBPTiwgT0ZG ID0gdGFrZSB0aGVtIG9mZi4gKi8KLQotICAgICAgY2FzZSBYWVBBVVM6ICAgICAgICAgICAgICAg ICAgICAgIC8qIFNFVCBTRU5EL1JFQ0VJVkUgUEFVU0UgKi8KLSAgICAgICAgeSA9IGNtbnVtKCJN aWxsaXNlY29uZHMgdG8gcGF1c2UgYmV0d2VlbiBwYWNrZXRzIiwiMCIsMTAsJngseHhzdHJpbmcp OwotICAgICAgICBpZiAoKHkgPSBzZXRudW0oJnoseCx5LDE1MDAwKSkgPCAwKQotICAgICAgICAg IHJldHVybih5KTsKLSAgICAgICAgcGt0cGF1cyA9IHo7Ci0gICAgICAgIHJldHVybihzdWNjZXNz ID0gMSk7Ci0KLSNpZmRlZiBDS1hYQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQg U0VORC9SRUNFSVZFIElHTk9SRS9ET1VCTEUgKi8KLSAgICAgIGNhc2UgWFlJR046Ci0gICAgICBj YXNlIFhZREJMOiB7Ci0gICAgICAgICAgaW50IGksIHp6OwotICAgICAgICAgIHNob3J0ICpwOwot ICAgICAgICAgIGV4dGVybiBzaG9ydCBkYmx0W107Ci0gICAgICAgICAgZXh0ZXJuIGludCBkYmxm bGFnLCBpZ25mbGFnOwotCi0gICAgICAgICAgLyogTWFrZSBzcGFjZSBmb3IgYSB0ZW1wb3Jhcnkg Y29weSBvZiB0aGUgaWdub3JlL2RvdWJsZSB0YWJsZSAqLwotCi0gICAgICAgICAgenogPSB5Owot I2lmZGVmIENPTU1FTlQKLSAgICAgICAgICBpZiAoenogPT0gWFlJR04gJiYgeHggPT0gWFlTRU5E KSB7Ci0gICAgICAgICAgICAgIGJsYWggYmxhaCB3aG8gY2FyZXMKLSAgICAgICAgICB9Ci0gICAg ICAgICAgaWYgKHp6ID09IFhZREJMICYmIHh4ID09IFhZUkVDVikgewotICAgICAgICAgICAgICBi bGFoIGJsYWgKLSAgICAgICAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgIHAg PSAoc2hvcnQgKiltYWxsb2MoMjU2ICogc2l6ZW9mKHNob3J0KSk7Ci0gICAgICAgICAgaWYgKCFw KSB7Ci0gICAgICAgICAgICAgIHByaW50ZigiP0ludGVybmFsIGVycm9yIC0gbWFsbG9jIGZhaWx1 cmVcbiIpOwotICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgIH0KLSAgICAgICAg ICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHBbaV0gPSBkYmx0W2ldOyAvKiBDb3B5IGN1cnJl bnQgdGFibGUgKi8KLQotICAgICAgICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAgICAgICAgIC8q IENvbGxlY3QgYSBsaXN0IG9mIG51bWJlcnMgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgICAg ICAgeF9pZm51bSA9IDE7ICAgICAgICAgICAgICAvKiBUdXJuIG9mZiBjb21wbGFpbnRzIGZyb20g ZXZhbCgpICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICAgICAgICAgICAgaWYgKCh4ID0gY21u dW0oenogPT0gWFlEQkwgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2hhcmFjdGVy IHRvIGRvdWJsZSIgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2hhcmFjdGVyIHRv IGlnbm9yZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLDEwLCZ5LHh4c3RyaW5n Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpIDwgMCkgewotI2lmbmRlZiBOT1NQTAot ICAgICAgICAgICAgICAgICAgeF9pZm51bSA9IDA7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICAg ICAgICAgICAgICAgIGlmICh4ID09IC0zKSAgICAgICAgICAvKiBEb25lICovCi0gICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgaWYgKHggPT0gLTIpIHsKLSAgICAg ICAgICAgICAgICAgICAgICBpZiAocCkgeyBmcmVlKHApOyBwID0gTlVMTDsgfQotICAgICAgICAg ICAgICAgICAgICAgIGRlYnVnKEYxMTAsIlNFVCBTL1IgRE9VQkxFL0lHTk9SRSBhdG1idWYiLGF0 bWJ1ZiwwKTsKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNrc3RyY21wKGF0bWJ1Ziwibm9u ZSIsNCwwKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAhY2tzdHJjbXAoYXRtYnVmLCJu b24iLDMsMCkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIWNrc3RyY21wKGF0bWJ1Ziwi bm8iLDIsMCkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIWNrc3RyY21wKGF0bWJ1Ziwi biIsMSwwKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8 IDApIC8qIEdldCBjb25maXJtYXRpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4oeCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCAyNTY7 IHkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYmx0W3ldICY9ICh6eiA9PSBYWURC TCkgPyAxIDogMjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHp6ID09IFhZREJMKSBk YmxmbGFnID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHp6ID09IFhZSUdOKSBp Z25mbGFnID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAx KTsKLSAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg ICAgICBwcmludGYoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIj9QbGVhc2Ugc3BlY2lm eSBhIG51bWJlciBvciB0aGUgd29yZCBOT05FXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgIGZyZWUocCk7Ci0gICAgICAgICAgICAg ICAgICAgICAgcCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAg ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0jaWZuZGVmIE5PU1BMCi0gICAgICAg ICAgICAgIHhfaWZudW0gPSAwOwotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgICAgICAgICAgIGlm ICh5IDwgMCB8fCB5ID4gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICBwcmludGYoIj9QbGVhc2Ug ZW50ZXIgYSBjaGFyYWN0ZXIgY29kZSBpbiByYW5nZSAwLTI1NVxuIik7Ci0gICAgICAgICAgICAg ICAgICBmcmVlKHApOwotICAgICAgICAgICAgICAgICAgcCA9IE5VTEw7Ci0gICAgICAgICAgICAg ICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIHBbeV0gfD0g KHp6ID09IFhZREJMKSA/IDIgOiAxOwotICAgICAgICAgICAgICBpZiAoenogPT0gWFlEQkwpIGRi bGZsYWcgPSAxOwotICAgICAgICAgICAgICBpZiAoenogPT0gWFlJR04pIGlnbmZsYWcgPSAxOwot ICAgICAgICAgIH0gLyogRW5kIG9mIHdoaWxlIGxvb3AgKi8KLQotICAgICAgICAgIGlmICgoeCA9 IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotLyoKLSAgR2V0IGhlcmUgb25seSBpZiB0aGV5IGhh dmUgbWFkZSBubyBtaXN0YWtlcy4gIENvcHkgdGVtcG9yYXJ5IHRhYmxlIGJhY2sgdG8KLSAgcGVy bWFuZW50IG9uZSwgdGhlbiBmcmVlIHRlbXBvcmFyeSB0YWJsZSBhbmQgcmV0dXJuIHN1Y2Nlc3Nm dWxseS4KLSovCi0gICAgICAgICAgaWYgKHApIHsKLSAgICAgICAgICAgICAgZm9yIChpID0gMDsg aSA8IDI1NjsgaSsrKSBkYmx0W2ldID0gcFtpXTsKLSAgICAgICAgICAgICAgZnJlZShwKTsKLSAg ICAgICAgICAgICAgcCA9IE5VTEw7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybihzdWNj ZXNzID0gMSk7Ci0gICAgICB9Ci0jZW5kaWYgLyogQ0tYWENIQVIgKi8KLQotI2lmZGVmIFBJUEVT RU5ECi0gICAgICBjYXNlIFhZRkxUUjogeyAgICAgICAgICAgICAgICAgICAgLyogU0VUIHsgU0VO RCwgUkVDRUlWRSB9IEZJTFRFUiAqLwotICAgICAgICAgIGlmICgoeSA9IGNtdHh0KCh4eCA9PSBY WVNFTkQpID8KLSAgICAgICAgICAgICAgICAiRmlsdGVyIHByb2dyYW0gZm9yIHNlbmRpbmcgZmls ZXMgLVxuXAotIHVzZSBcXHYoZmlsZW5hbWUpIHRvIHN1YnN0aXR1dGUgZmlsZW5hbWUiIDoKLSAg ICAgICAgICAgICAgICAiRmlsdGVyIHByb2dyYW0gZm9yIHJlY2VpdmluZyBmaWxlcyAtXG5cCi0g dXNlIFxcdihmaWxlbmFtZSkgdG8gc3Vic3RpdHV0ZSBmaWxlbmFtZSIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgIiIsJnMsTlVMTCkpIDwgMCkKLSAgICAgICAgICAgIHJldHVybih5KTsKLSAg ICAgICAgICBpZiAoISpzKSB7ICAgICAgICAgICAgICAgICAgICAvKiBSZW1vdmluZyBhIGZpbHRl ci4uLiAqLwotICAgICAgICAgICAgICBpZiAoeHggPT0gWFlTRU5EICYmIHNuZGZpbHRlcikgewot ICAgICAgICAgICAgICAgICAgbWFrZXN0cigmZ19zZmlsdGVyLE5VTEwpOwotICAgICAgICAgICAg ICAgICAgbWFrZXN0cigmc25kZmlsdGVyLE5VTEwpOwotICAgICAgICAgICAgICB9IGVsc2UgaWYg KHJjdmZpbHRlcikgewotICAgICAgICAgICAgICAgICAgbWFrZXN0cigmZ19yZmlsdGVyLE5VTEwp OwotICAgICAgICAgICAgICAgICAgbWFrZXN0cigmcmN2ZmlsdGVyLE5VTEwpOwotICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICAgICAgfSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWRkaW5nIGEgZmlsdGVyLi4uICovCi0gICAg ICAgICAgcyA9IGJyc3RyaXAocyk7ICAgICAgICAgICAgICAgLyogU3RyaXAgYW55IGJyYWNlcyAq LwotICAgICAgICAgIHkgPSBzdHJsZW4ocyk7Ci0gICAgICAgICAgaWYgKHh4ID09IFhZU0VORCkg eyAgICAgICAgICAgLyogRm9yIFNFTkQgZmlsdGVyLi4uICovCi0gICAgICAgICAgICAgIGZvciAo eCA9IDA7IHggPCB5OyB4KyspIHsgLyogbWFrZSBzdXJlIHRoZXkgaW5jbHVkZWQgIlx2KC4uLiki ICovCi0gICAgICAgICAgICAgICAgICBpZiAoc1t4XSAhPSAnXFwnKSBjb250aW51ZTsKLSAgICAg ICAgICAgICAgICAgIGlmIChzW3grMV0gPT0gJ3YnKSBicmVhazsKLSAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICBpZiAoeCA9PSB5KSB7Ci0gICAgICAgICAgICAgICAgICBwcmludGYoCi0g ICAgICAgICAgICAgICI/RmlsdGVyIG11c3QgY29udGFpbiBhIHJlcGxhY2VtZW50IHZhcmlhYmxl IGZvciBmaWxlbmFtZS5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAg ICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAg ICAgICBpZiAoeHggPT0gWFlTRU5EKSB7Ci0gICAgICAgICAgICAgIG1ha2VzdHIoJnNuZGZpbHRl cixzKTsKLSAgICAgICAgICAgICAgbWFrZXN0cigmZ19zZmlsdGVyLHMpOwotICAgICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgICAgIG1ha2VzdHIoJnJjdmZpbHRlcixzKTsKLSAgICAgICAgICAg ICAgbWFrZXN0cigmZ19yZmlsdGVyLHMpOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDEpOwotICAgICAgfQotI2VuZGlmIC8qIFBJUEVTRU5EICovCi0KLSAgICAgIGNh c2UgWFlJTklMOgotICAgICAgICB5ID0gY21udW0oIk1heCBsZW5ndGggZm9yIHByb3RvY29sIGlu aXQgc3RyaW5nIiwiLTEiLDEwLCZ4LHh4c3RyaW5nKTsKLSAgICAgICAgaWYgKCh5ID0gc2V0bnVt KCZ6LHgseSwtMSkpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgIGlmICh4eCA9 PSBYWVNFTkQpCi0gICAgICAgICAgc3BybWxlbiA9IHo7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg ICBycHJtbGVuID0gejsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQotICAgICAgY2Fz ZSA5OTM6IHsKLSAgICAgICAgICBleHRlcm4gaW50IHNlbmRpcGt0czsKLSAgICAgICAgICBpZiAo eHggPT0gWFlTRU5EKSB7Ci0gICAgICAgICAgICAgIGlmICgoeCA9IHNldG9uKCZzZW5kaXBrdHMp KSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgIH0KLSAgICAgICAg ICByZXR1cm4oMSk7Ci0gICAgICB9Ci0jaWZkZWYgQ0tfUEVSTVMKLSAgICAgIGNhc2UgOTk0Ogot CXN3aXRjaCh4eCkgewotCSAgY2FzZSBYWVNFTkQ6Ci0JICAgIGlmICgoeCA9IHNldG9uKCZhdGxw cm8pKSA8IDApIHJldHVybih4KTsKLQkgICAgYXRncHJvID0gYXRscHJvOwotCSAgICByZXR1cm4o MSk7Ci0JICBjYXNlIFhZUkVDVjoKLQkgICAgaWYgKCh4ID0gc2V0b24oJmF0bHByaSkpIDwgMCkg cmV0dXJuKHgpOwotCSAgICBhdGdwcmkgPSBhdGxwcmk7Ci0JICAgIHJldHVybigxKTsKLQkgIGRl ZmF1bHQ6Ci0JICAgIHJldHVybigtMik7Ci0JfQotI2VuZGlmIC8qIENLX1BFUk1TICovCi0KLSNp Zm5kZWYgTk9DU0VUUwotICAgICAgY2FzZSBYWUNTRVQ6IHsgICAgICAgICAgICAgICAgICAgIC8q IENIQVJBQ1RFUi1TRVQtU0VMRUNUSU9OICovCi0gICAgICAgICAgZXh0ZXJuIHN0cnVjdCBrZXl0 YWIgeGZybXRhYltdOwotICAgICAgICAgIGV4dGVybiBpbnQgcl9jc2V0LCBzX2NzZXQ7Ci0gICAg ICAgICAgaWYgKCh5ID0gY21rZXkoeGZybXRhYiwyLCIiLCJhdXRvbWF0aWMiLHh4c3RyaW5nKSkg PCAwKQotICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkp IDwgMCkKLSAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICBpZiAoeHggPT0gWFlTRU5E KQotICAgICAgICAgICAgc19jc2V0ID0geTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBy X2NzZXQgPSB5OwotICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICB9Ci0jZW5k aWYgLyogTk9DU0VUUyAqLwotCi0gICAgICBjYXNlIFhZQlVQOgotICAgICAgICBpZiAoKHkgPSBj bWtleShvbm9mZiwyLCIiLCJvbiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHkp OwotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgaWYg KHh4ID09IFhZU0VORCkgewotICAgICAgICAgICAgZXh0ZXJuIGludCBza2lwYnVwOwotICAgICAg ICAgICAgc2tpcGJ1cCA9ICh5ID09IDApID8gMSA6IDA7Ci0gICAgICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDEpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHJpbnRmKAotIj9QbGVh c2UgdXNlIFNFVCBGSUxFIENPTExJU0lPTiB0byBjaG9vc2UgdGhlIGRlc2lyZWQgYWN0aW9uXG4i KTsKLSAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0KLQotICAgICAgY2FzZSBYWU1P VkU6Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICB5ID0gY21kaXIoIkRpcmVjdG9yeSB0byBtb3Zl IGZpbGUocykgdG8gYWZ0ZXIgc3VjY2Vzc2Z1bCB0cmFuc2ZlciIsCi0gICAgICAgICAgICAgICAg ICAiIiwmcyx4eHN0cmluZyk7Ci0jZWxzZQotICAgICAgICB5ID0gY210eHQoIkRpcmVjdG9yeSB0 byBtb3ZlIGZpbGUocykgdG8gYWZ0ZXIgc3VjY2Vzc2Z1bCB0cmFuc2ZlciIsCi0JCSAgIiIsJnMs eHhzdHJpbmcpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgICAgICBpZiAoeSA8IDAgJiYg eSAhPSAtMykKLSAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgIGNrc3RybmNweShsaW5lLHMs TElOQlVGU0laKTsKLSAgICAgICAgcyA9IGJyc3RyaXAobGluZSk7Ci0KLSNpZmRlZiBDT01NRU5U Ci0JLyogT25seSBuZWVkZWQgZm9yIGNtZGlyKCkgKi8KLSAgICAgICAgaWYgKCh4ID0gY21jZm0o KSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0JCi0J LyogQ2hlY2sgZGlyZWN0b3J5IGV4aXN0ZW5jZSBpZiBhYnNvbHV0ZSAqLwotCS8qIFRISVMgTUVB TlMgSVQgQ0FOJ1QgSU5DTFVERSBBTlkgREVGRVJSRUQgVkFSSUFCTEVTISAqLwotCWlmIChzKSBp ZiAoKnMpIHsKLQkgICAgaWYgKGlzYWJzb2x1dGUocykgJiYgIWlzZGlyKHMpKSB7Ci0JCXByaW50 ZigiP0RpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCAtICVzXG4iLHMpOwotCQlyZXR1cm4oLTkpOwot CSAgICB9Ci0JfQotICAgICAgICBpZiAoeHggPT0gWFlTRU5EKSB7Ci0gICAgICAgICAgICBpZiAo KnMpIHsKLSNpZmRlZiBDT01NRU5UCi0JCS8qIEFsbG93IGl0IHRvIGJlIHJlbGF0aXZlICovCi0g ICAgICAgICAgICAgICAgemZucWZwKHMsTElOQlVGU0laLGxpbmUpOwotI2VuZGlmIC8qIENPTU1F TlQgKi8KLSAgICAgICAgICAgICAgICBtYWtlc3RyKCZzbmRfbW92ZSxsaW5lKTsKLSAgICAgICAg ICAgICAgICBtYWtlc3RyKCZnX3NuZF9tb3ZlLGxpbmUpOwotICAgICAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgICAgICBtYWtlc3RyKCZzbmRfbW92ZSxOVUxMKTsKLSAgICAgICAgICAgICAg ICBtYWtlc3RyKCZnX3NuZF9tb3ZlLE5VTEwpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVs c2UgewotICAgICAgICAgICAgaWYgKCpzKSB7Ci0jaWZkZWYgQ09NTUVOVAotCQkvKiBBbGxvdyBp dCB0byBiZSByZWxhdGl2ZSAqLwotICAgICAgICAgICAgICAgIHpmbnFmcChzLExJTkJVRlNJWixs aW5lKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICAgICAgbWFrZXN0cigmcmN2 X21vdmUsbGluZSk7Ci0gICAgICAgICAgICAgICAgbWFrZXN0cigmZ19yY3ZfbW92ZSxsaW5lKTsK LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbWFrZXN0cigmcmN2X21vdmUs TlVMTCk7Ci0gICAgICAgICAgICAgICAgbWFrZXN0cigmZ19yY3ZfbW92ZSxOVUxMKTsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0gICAg ICBjYXNlIFhZUkVOQU1FOgotICAgICAgICB5ID0gY210eHQoIlRlbXBsYXRlIHRvIHJlbmFtZSBm aWxlKHMpIHRvIGFmdGVyIHN1Y2Nlc3NmdWwgdHJhbnNmZXIiLAotICAgICAgICAgICAgICAgICAg IiIsJnMsTlVMTCk7CQkvKiBOT1RFOiBubyB4eHN0cmluZyAqLwotICAgICAgICBpZiAoeSA8IDAg JiYgeSAhPSAtMykJCS8qIEV2YWx1YXRpb24gaXMgZGVmZXJyZWQgKi8KLSAgICAgICAgICByZXR1 cm4oeSk7Ci0gICAgICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKLSAgICAgICAgcyA9 IGJyc3RyaXAobGluZSk7Ci0gICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAg ICByZXR1cm4oeCk7Ci0gICAgICAgIGlmICh4eCA9PSBYWVNFTkQpIHsKLSAgICAgICAgICAgIGlm ICgqcykgewotICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNuZF9yZW5hbWUscyk7Ci0gICAgICAg ICAgICAgICAgbWFrZXN0cigmZ19zbmRfcmVuYW1lLHMpOwotICAgICAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgICAgICBtYWtlc3RyKCZzbmRfcmVuYW1lLE5VTEwpOwotICAgICAgICAgICAg ICAgIG1ha2VzdHIoJmdfc25kX3JlbmFtZSxOVUxMKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg fSBlbHNlIHsKLSAgICAgICAgICAgIGlmICgqcykgewotICAgICAgICAgICAgICAgIG1ha2VzdHIo JnJjdl9yZW5hbWUscyk7Ci0gICAgICAgICAgICAgICAgbWFrZXN0cigmZ19yY3ZfcmVuYW1lLHMp OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtYWtlc3RyKCZyY3ZfcmVu YW1lLE5VTEwpOwotICAgICAgICAgICAgICAgIG1ha2VzdHIoJmdfcmN2X3JlbmFtZSxOVUxMKTsK LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwot Ci0jaWZkZWYgVk1TCi0gICAgICBjYXNlIDg4NzoJCQkJLyogVkVSU0lPTi1OVU1CRVJTICovCi0g ICAgICAgIGlmICh4eCA9PSBYWVNFTkQpIHsKLSAgICAgICAgICAgIGV4dGVybiBpbnQgdm1zc3Zl cnNpb25zOwotICAgICAgICAgICAgcmV0dXJuKHNldG9uKCZ2bXNzdmVyc2lvbnMpKTsKLSAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGV4dGVybiBpbnQgdm1zcnZlcnNpb25zOwotICAgICAg ICAgICAgcmV0dXJuKHNldG9uKCZ2bXNydmVyc2lvbnMpKTsKLSAgICAgICAgfQotI2VuZGlmIC8q IFZNUyAqLwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4oLTIpOwotICAgIH0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBTRVQgU0VORC9SRUNFSVZF Li4uICovCi19Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYgTk9YTUlUCi1pbnQKLXNl dHhtaXQoKSB7Ci0gICAgaWYgKCh5ID0gY21rZXkoeG1pdGFiLG54bWl0LCIiLCIiLHh4c3RyaW5n KSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgc3dpdGNoICh5KSB7Ci0gICAgICBjYXNlIFhNSVRFOiAg ICAgICAgICAgICAgICAgICAgICAgLyogRU9GICovCi0gICAgICAgIHkgPSBjbXR4dCgiQ2hhcmFj dGVycyB0byBzZW5kIGF0IGVuZCBvZiBmaWxlLFxuXAotIFVzZSBiYWNrc2xhc2ggY29kZXMgZm9y IGNvbnRyb2wgY2hhcmFjdGVycyIsIiIsJnMseHhzdHJpbmcpOwotICAgICAgICBpZiAoeSA8IDAp IHJldHVybih5KTsKLSAgICAgICAgaWYgKChpbnQpc3RybGVuKHMpID4gWE1CVUZMKSB7Ci0gICAg ICAgICAgICBwcmludGYoIj9Ub28gbWFueSBjaGFyYWN0ZXJzLCAlZCBtYXhpbXVtXG4iLFhNQlVG TCk7Ci0gICAgICAgICAgICByZXR1cm4oLTIpOwotICAgICAgICB9Ci0gICAgICAgIGNrc3RybmNw eSh4bWl0YnVmLHMsWE1CVUZMKTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQotICAg ICAgY2FzZSBYTUlURjogICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGwgKi8KLSAgICAgICAg eSA9IGNtbnVtKCJOdW1lcmljIGNvZGUgZm9yIGJsYW5rLWxpbmUgZmlsbCBjaGFyYWN0ZXIiLCIw IiwxMCwmeCwKLSAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKTsKLSAgICAgICAgaWYgKCh5ID0g c2V0bnVtKCZ6LHgseSwxMjcpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgeG1pdGYgPSB6Owot ICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgY2FzZSBYTUlUTDogICAgICAgICAg ICAgICAgICAgICAgIC8qIExpbmVmZWVkICovCi0gICAgICAgIHJldHVybihzZXRvbigmeG1pdGwp KTsKLSAgICAgIGNhc2UgWE1JVFM6ICAgICAgICAgICAgICAgICAgICAgICAvKiBMb2NraW5nLVNo aWZ0ICovCi0gICAgICAgIHJldHVybihzZXRvbigmeG1pdHMpKTsKLSAgICAgIGNhc2UgWE1JVFA6 ICAgICAgICAgICAgICAgICAgICAgICAvKiBQcm9tcHQgKi8KLSAgICAgICAgeSA9IGNtbnVtKCJO dW1lcmljIGNvZGUgZm9yIGhvc3QncyBwcm9tcHQgY2hhcmFjdGVyLCAwIGZvciBub25lIiwKLSAg ICAgICAgICAgICAgICAgICIxMCIsMTAsJngseHhzdHJpbmcpOwotICAgICAgICBpZiAoKHkgPSBz ZXRudW0oJnoseCx5LDEyNykpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICB4bWl0cCA9IHo7Ci0g ICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICBjYXNlIFhNSVRYOiAgICAgICAgICAg ICAgICAgICAgICAgLyogRWNobyAqLwotICAgICAgICByZXR1cm4oc2V0b24oJnhtaXR4KSk7Ci0g ICAgICBjYXNlIFhNSVRXOiAgICAgICAgICAgICAgICAgICAgICAgLyogUGF1c2UgKi8KLSAgICAg ICAgeSA9IGNtbnVtKCJOdW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHBhdXNlIGJldHdlZW4gYmlu YXJ5IGNoYXJhY3RlcnNcblwKLW9yIHRleHQgbGluZXMgZHVyaW5nIHRyYW5zbWlzc2lvbiIsIjAi LDEwLCZ4LHh4c3RyaW5nKTsKLSAgICAgICAgaWYgKCh5ID0gc2V0bnVtKCZ6LHgseSwxMDAwKSkg PCAwKSByZXR1cm4oeSk7Ci0gICAgICAgIHhtaXR3ID0gejsKLSAgICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSAxKTsKLSAgICAgIGNhc2UgWE1JVFQ6ICAgICAgICAgICAgICAgICAgICAgICAvKiBUaW1l b3V0ICovCi0gICAgICAgIHkgPSBjbW51bSgiU2Vjb25kcyB0byB3YWl0IGZvciBlYWNoIGNoYXJh Y3RlciB0byBlY2hvIiwKLSAgICAgICAgICAgICAgICAgICIxIiwxMCwmeCx4eHN0cmluZyk7Ci0g ICAgICAgIGlmICgoeSA9IHNldG51bSgmeix4LHksMTAwMCkpIDwgMCkgcmV0dXJuKHkpOwotICAg ICAgICB4bWl0dCA9IHo7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICBkZWZh dWx0OgotICAgICAgICByZXR1cm4oLTIpOwotICAgIH0KLX0KLSNlbmRpZiAvKiBOT1hNSVQgKi8K LQotI2lmbmRlZiBOT1hGRVIKLS8qICBEIE8gUiBNIFQgIC0tICBEbyBhIHJlbW90ZSBjb21tYW5k ICAqLwotCi1WT0lECi1ybXNnKCkgewotICAgIGlmIChwZmxhZyAmJiAhcXVpZXQgJiYgZmRpc3Bs YSAhPSBYWUZEX04pCi0gICAgICBwcmludGYoCi0jaWZkZWYgQ0tfTkVFRF9TSUcKLSAgICAgICAi IFR5cGUgeW91ciBlc2NhcGUgY2hhcmFjdGVyLCAlcywgZm9sbG93ZWQgYnkgWCBvciBFIHRvIGNh bmNlbC5cbiIsCi0gICAgICAgZGJjaHIoZXNjYXBlKQotI2Vsc2UKLSAgICAgICAiIFByZXNzIHRo ZSBYIG9yIEUga2V5IHRvIGNhbmNlbC5cbiIKLSNlbmRpZiAvKiBDS19ORUVEX1NJRyAqLwotICAg ICAgKTsKLX0KLQotc3RhdGljIGludCB4emNtZCA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIEds b2JhbCBjb3B5IG9mIFJFTU9URSBjbWQgaW5kZXggKi8KLQotLyogIFIgRSBNIEMgRiBNICAtLSAg Q29uZmlybSBhIFJFTU9URSBjb21tYW5kICAqLwotLyoKLSAgTGlrZSBjbWNmbSgpLCBidXQgYWxs b3dzIGZvciBhIHJlZGlyZWN0aW9uIGluZGljYXRvciBvbiB0aGUgZW5kLAotICBsaWtlICI+IGZp bGVuYW1lIiBvciAifCBjb21tYW5kIi4gIFJldHVybnMgd2hhdCBjbWNmbSgpIHdvdWxkIGhhdmUK LSAgcmV0dXJuZWQ6IC0xIGlmIHJlcGFyc2UgbmVlZGVkLCBldGMgZXRjIGJsYWggYmxhaC4gIE9u IHN1Y2Nlc3MsCi0gIHJldHVybnMgMSB3aXRoOgotCi0gICAgY2hhciAqIHJlbWRlc3QgY29udGFp bmluZyB0aGUgbmFtZSBvZiB0aGUgZmlsZSBvciBjb21tYW5kLgotICAgIGludCByZW1maWxlIHNl dCB0byAxIGlmIHRoZXJlIGlzIHRvIGJlIGFueSByZWRpcmVjdGlvbi4KLSAgICBpbnQgcmVtYXBw ZCBzZXQgdG8gMSBpZiBvdXRwdXQgZmlsZSBpcyB0byBiZSBhcHBlbmRlZCB0by4KLSAgICBpbnQg cmVtcGlwZSBzZXQgdG8gMSBpZiByZW1kZXN0IGlzIGEgY29tbWFuZCwgMCBpZiBpdCBpcyBhIGZp bGUuCi0qLwotc3RhdGljIGludAotcmVtY2ZtKCkgewotICAgIGludCB4OwotICAgIGNoYXIgKnM7 Ci0gICAgY2hhciBjOwotCi0gICAgcmVtZmlsZSA9IDA7Ci0gICAgcmVtcGlwZSA9IDA7Ci0gICAg cmVtYXBwZCA9IDA7Ci0KLSAgICBpZiAoKHggPSBjbXR4dCgKLSAgICAgICAgICAgICAiPiBmaWxl bmFtZSwgfCBjb21tYW5kLFxuXAotb3IgdHlwZSBjYXJyaWFnZSByZXR1cm4gdG8gY29uZmlybSB0 aGUgY29tbWFuZCIsCi0gICAgICAgICAgICAgICAgICAgIiIsJnMseHhzdHJpbmcpKSA8IDApCi0g ICAgICByZXR1cm4oeCk7Ci0gICAgaWYgKHJlbWRlc3QpIHsKLSAgICAgICAgZnJlZShyZW1kZXN0 KTsKLSAgICAgICAgcmVtZGVzdCA9IE5VTEw7Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsInJlbWNm bSBsb2NhbCIsIiIsbG9jYWwpOwotICAgIGRlYnVnKEYxMTAsInJlbWNmbSBzIixzLDApOwotICAg IGRlYnVnKEYxMDEsInJlbWNmbSBjbWQiLCIiLHh6Y21kKTsKLS8qIAotICBUaGlzIGNoZWNrIHdh cyBhZGRlZCBpbiBDLUtlcm1pdCA2LjAgb3IgNy4wIGJ1dCBpdCB0dXJucyBvdXQgdG8gYmUKLSAg dW5oZWxwZnVsIGluIHRoZSBzaXR1YXRpb24gd2hlcmUgdGhlIHJlbW90ZSBpcyBydW5uaW5nIGEg c2NyaXB0IHRoYXQgc2VuZHMKLSAgUkVNT1RFIGNvbW1hbmRzIHRvIHRoZSBsb2NhbCB3b3Jrc3Rh dGlvbi4gIFdoYXQgaGFwcGVucyBpcywgdGhlIGxvY2FsCi0gIHNlcnZlciBleGVjdXRlcyB0aGUg Y29tbWFuZCBhbmQgc2VuZHMgdGhlIHJlc3VsdCBiYWNrIGFzIHNjcmVlbiB0ZXh0LCB3aGljaAot ICBpcyBpbmRpY2F0ZWQgYnkgdXNpbmcgYW4gWCBwYWNrZXQgaW5zdGVhZCBvZiBhbiBGIHBhY2tl dCBhcyB0aGUgZmlsZQotICBoZWFkZXIuICBUaGVyZSBhcmUgdHdvIHBhcnRzIHRvIHRoaXM6IGV4 ZWN1dGluZyB0aGUgY29tbWFuZCB1bmRlciBjb250cm9sCi0gIG9mIHRoZSByZW1vdGUgS2VybWl0 LCB3aGljaCBpcyBkZXNpcmFibGUgKGFuZCBpbiBmYWN0IHNvbWUgYmlnIGFwcGxpY2F0aW9ucwot ICBkZXBlbmQgb24gaXQsIGFuZCB0aGVyZWZvcmUgbmV2ZXIgaW5zdGFsbGVkIGFueSBuZXcgQy1L ZXJtaXQgdmVyc2lvbnMgYWZ0ZXIKLSAgNUEpLCBhbmQgZGlzcGxheWluZyB0aGUgcmVzdWx0LiAg Q29tbWVudGluZyBvdXQgdGhlIGNoZWNrIGFsbG93cyB0aGUKLSAgY29tbWFuZCB0byBiZSBleGVj dXRlZCwgYnV0IHRoZSByZXN1bHQgaXMgc3RpbGwgc2VudCBiYWNrIHRvIHRoZSByZW1vdGUgaW4K LSAgYSBmaWxlIHRyYW5zZmVyLCB3aGVyZSBpdCB2YW5pc2hlcyBpbnRvIHRoZSBldGhlci4gIEFj dHVhbGx5IGl0J3Mgb24gdGhlCi0gIGNvbW11bmljYXRpb24gY29ubmVjdGlvbiwgbWl4ZWQgaW4g d2l0aCB0aGUgcGFja2V0cy4gIFByZXR0eSBhbWF6aW5nIHRoYXQKLSAgdGhlIGZpbGUgdHJhbnNm ZXIgc3RpbGwgd29ya3MsIHJpZ2h0PwotKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgaWYgKCEqcykg eyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gcmVkaXJlY3Rpb24gaW5kaWNhdG9yICov Ci0gICAgICAgIGlmICghbG9jYWwgJiYKLSAgICAgICAgICAgICh4emNtZCA9PSBYWkRJUiB8fCB4 emNtZCA9PSBYWlRZUCB8fAotICAgICAgICAgICAgIHh6Y21kID09IFhaWElUIHx8IHh6Y21kID09 IFhaU1BBIHx8Ci0gICAgICAgICAgICAgeHpjbWQgPT0gWFpITFAgfHwgeHpjbWQgPT0gWFpQV0Qg fHwKLSAgICAgICAgICAgICB4emNtZCA9PSBYWkxHSSB8fCB4emNtZCA9PSBYWkxHTyB8fAotICAg ICAgICAgICAgIHh6Y21kID09IFhaV0hPIHx8IHh6Y21kID09IFhaSE9TKSkgewotICAgICAgICAg ICAgcHJpbnRmKCI/XCIlc1wiIGhhcyBubyBlZmZlY3QgaW4gcmVtb3RlIG1vZGVcbiIsY21kYnVm KTsKLSAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgIHJl dHVybigxKTsKLSAgICB9Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwotICAgIGMgPSAqczsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFdlIGhhdmUgc29tZXRoaW5nICovCi0gICAgaWYgKGMg IT0gJz4nICYmIGMgIT0gJ3wnKSB7ICAgICAgICAgLyogSXMgaXQgPiBvciB8ID8gKi8KLSAgICAg ICAgcHJpbnRmKCI/Tm90IGNvbmZpcm1lZFxuIik7ICAgICAvKiBObyAqLwotICAgICAgICByZXR1 cm4oLTkpOwotICAgIH0KLSAgICBzKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBTZWUgd2hhdCBmb2xsb3dzICovCi0gICAgaWYgKGMgPT0gJz4nICYmICpzID09ICc+JykgeyAg ICAgICAgLyogQWxsb3cgZm9yICI+PiIgdG9vICovCi0gICAgICAgIHMrKzsKLSAgICAgICAgcmVt YXBwZCA9IDE7ICAgICAgICAgICAgICAgICAgICAvKiBBcHBlbmQgdG8gb3V0cHV0IGZpbGUgKi8K LSAgICB9Ci0gICAgd2hpbGUgKCpzID09IFNQIHx8ICpzID09IEhUKSBzKys7ICAgLyogU3RyaXAg aW50ZXJ2ZW5pbmcgd2hpdGVzcGFjZSAqLwotICAgIGlmICghKnMpIHsKLSAgICAgICAgcHJpbnRm KCI/JXMgbWlzc2luZ1xuIiwgYyA9PSAnPicgPyAiRmlsZW5hbWUiIDogIkNvbW1hbmQiKTsKLSAg ICAgICAgcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgaWYgKGMgPT0gJz4nICYmIHpjaGtvKHMpIDwg MCkgeyAgICAgLyogQ2hlY2sgYWNjZXNzaWJpbGl0eSAqLwotICAgICAgICBwcmludGYoIj9BY2Nl c3MgZGVuaWVkIC0gJXNcbiIsIHMpOwotICAgICAgICByZXR1cm4oLTkpOwotICAgIH0KLSAgICBy ZW1maWxlID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgZ2xvYmFsIHJlc3VsdHMg Ki8KLSAgICByZW1waXBlID0gKGMgPT0gJ3wnKTsKLSAgICBpZiAocmVtcGlwZQotI2lmbmRlZiBO T1BVU0gKLSAgICAgICAgJiYgbm9wdXNoCi0jZW5kaWYgLyogTk9QVVNIICovCi0gICAgICAgICkg ewotICAgICAgICBwcmludGYoIj9Tb3JyeSwgYWNjZXNzIHRvIGV4dGVybmFsIGNvbW1hbmRzIGlz IGRpc2FibGVkLlxuIik7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfQotICAgIG1ha2VzdHIo JnJlbWRlc3Qscyk7Ci0jaWZuZGVmIE5PREVCVUcKLSAgICBpZiAoZGVibG9nKSB7Ci0gICAgICAg IGRlYnVnKEYxMDEsInJlbWNmbSByZW1maWxlIiwiIixyZW1maWxlKTsKLSAgICAgICAgZGVidWco RjEwMSwicmVtY2ZtIHJlbWFwcGQiLCIiLHJlbWFwcGQpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJy ZW1jZm0gcmVtcGlwZSIsIiIscmVtcGlwZSk7Ci0gICAgICAgIGRlYnVnKEYxMTAsInJlbWNmbSBy ZW1kZXN0IixyZW1kZXN0LCAwKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9ERUJVRyAqLwotICAgIHJl dHVybigxKTsKLX0KLQotLyogIFIgRSBNIFQgWCBUICAtLSAgTGlrZSByZW1jZm0oKS4uLiAgKi8K LS8qCi0gICAuLi4gYnV0IGZvciBSRU1PVEUgY29tbWFuZHMgdGhhdCBlbmQgd2l0aCBjbXR4dCgp LgotICAgSGVyZSB3ZSBtdXN0IGRlY2lwaGVyIGJyYWNlcyB0byBkaXNjb3ZlciB3aGV0aGVyIHRo ZSB0cmFpbGluZwotICAgcmVkaXJlY3Rpb24gaW5kaWNhdG9yIGlzIGludGVuZGVkIGZvciBsb2Nh bCB1c2UsIG9yIHRvIGJlIHNlbnQgb3V0Ci0gICB0byB0aGUgc2VydmVyLCBhcyBpbjoKLQotICAg ICByZW1vdGUgaG9zdCBibGFoIGJsYWggPiBmaWxlICAgICAgICAgICAgICAgICBUaGlzIGVuZAot ICAgICByZW1vdGUgaG9zdCB7IGJsYWggYmxhaCB9ID4gZmlsZSAgICAgICAgICAgICBUaGlzIGVu ZAotICAgICByZW1vdGUgaG9zdCB7IGJsYWggYmxhaCA+IGZpbGUgfSAgICAgICAgICAgICBUaGF0 IGVuZAotICAgICByZW1vdGUgaG9zdCB7IGJsYWggYmxhaCA+IGZpbGUgfSA+IGZpbGUgICAgICBC b3RoIGVuZHMKLQotICAgUGlwZXMgdG9vOgotCi0gICAgIHJlbW90ZSBob3N0IGJsYWggYmxhaCB8 IGNtZCAgICAgICAgICAgICAgICAgIFRoaXMgZW5kCi0gICAgIHJlbW90ZSBob3N0IHsgYmxhaCBi bGFoIH0gfCBjbWQgICAgICAgICAgICAgIFRoaXMgZW5kCi0gICAgIHJlbW90ZSBob3N0IHsgYmxh aCBibGFoIHwgY21kIH0gICAgICAgICAgICAgIFRoYXQgZW5kCi0gICAgIHJlbW90ZSBob3N0IHsg YmxhaCBibGFoIHwgY21kIH0gfCBjbWQgICAgICAgIEJvdGggZW5kcwotCi0gICBPciBib3RoOgot Ci0gICAgIHJlbW90ZSBob3N0IGJsYWggYmxhaCB8IGNtZCA+IGZpbGUgICAgICAgICAgIFRoaXMg ZW5kLCBldGMgZXRjLi4uCi0KLSAgIE5vdGU6IHRoaXMgcmVhbGx5IG9ubHkgbWFrZXMgc2Vuc2Ug Zm9yIFJFTU9URSBIT1NULCBidXQgd2h5IGJlIHBpY2t5PwotICAgQ2FsbCBhZnRlciBjYWxsaW5n IGNtdHh0KCksIHdpdGggcG9pbnRlciB0byBzdHJpbmcgdGhhdCBjbXR4dCgpIHBhcnNlZCwKLSAg IGFzIGluICJyZW10eHQoJnMpOyIuCi0KLSAgIFJldHVybnM6Ci0gICAgMSBvbiBzdWNjZXNzIHdp dGggYnJhY2VzICYgcmVkaXJlY3Rpb24gdGhpbmdzIHJlbW92ZWQgJiBwb2ludGVyIHVwZGF0ZWQs Ci0gICAtOSBvbiBmYWlsdXJlIChiYWQgaW5kaXJlY3Rpb24pLCBhZnRlciBwcmludGluZyBlcnJv ciBtZXNzYWdlLgotKi8KLWludAotcmVtdHh0KHApIGNoYXIgKiogcDsgewotICAgIGludCBpLCB4 LCBicG9zLCBwcG9zOwotICAgIGNoYXIgYywgKnMsICpxOwotCi0gICAgcmVtZmlsZSA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBnbG9iYWwgcmVzdWx0cyAqLwotICAg IHJlbXBpcGUgPSAwOwotICAgIHJlbWFwcGQgPSAwOwotICAgIGlmIChyZW1kZXN0KSB7Ci0gICAg ICAgIGZyZWUocmVtZGVzdCk7Ci0gICAgICAgIHJlbWRlc3QgPSBOVUxMOwotICAgIH0KLSAgICBz ID0gKnA7Ci0gICAgaWYgKCFzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gcmVk aXJlY3Rpb24gaW5kaWNhdG9yICovCi0gICAgICBzID0gIiI7Ci0jaWZkZWYgQ09NTUVOVAotICAg IGlmICghKnMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERpdHRvICovCi0gICAgICAg IGlmICghbG9jYWwgJiYKLSAgICAgICAgICAgICh4emNtZCA9PSBYWkRJUiB8fCB4emNtZCA9PSBY WlRZUCB8fAotICAgICAgICAgICAgIHh6Y21kID09IFhaWElUIHx8IHh6Y21kID09IFhaU1BBIHx8 Ci0gICAgICAgICAgICAgeHpjbWQgPT0gWFpITFAgfHwgeHpjbWQgPT0gWFpQV0QgfHwKLSAgICAg ICAgICAgICB4emNtZCA9PSBYWkxHSSB8fCB4emNtZCA9PSBYWkxHTyB8fAotICAgICAgICAgICAg IHh6Y21kID09IFhaV0hPIHx8IHh6Y21kID09IFhaSE9TKSkgewotICAgICAgICAgICAgcHJpbnRm KCI/XCIlc1wiIGhhcyBubyBlZmZlY3QgaW4gcmVtb3RlIG1vZGVcbiIsY21kYnVmKTsKLSAgICAg ICAgICAgIGlmIChoaW50cykgewotICAgICAgICAgICAgICAgIHByaW50ZigiSGludDogVHJ5IGFn YWluIHdpdGggYW4gb3V0cHV0IHJlZGlyZWN0b3IuXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgIHJldHVybigxKTsK LSAgICB9Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwotICAgIGJwb3MgPSAtMTsgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFBvc2l0aW9uIG9mID4gKGJyYWNrZXQpICovCi0gICAgcHBvcyA9IC0x OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9zaXRpb24gb2YgfCAocGlwZSkgKi8KLSAg ICB4ID0gc3RybGVuKHMpOyAgICAgICAgICAgICAgICAgICAgICAvKiBMZW5ndGggb2YgY210eHQo KSBzdHJpbmcgKi8KLQotICAgIGZvciAoaSA9IHgtMTsgaSA+PSAwOyBpLS0pIHsgICAgICAgIC8q IFNlYXJjaCByaWdodCB0byBsZWZ0LiAqLwotICAgICAgICBjID0gc1tpXTsKLSAgICAgICAgaWYg KGMgPT0gJ30nKSAgICAgICAgICAgICAgICAgICAvKiBCcmVhayBvbiBmaXJzdCByaWdodCBicmFj ZSAqLwotICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvbid0IGxv b2sgYXQgY29udGVudHMgb2YgYnJhY2VzICovCi0gICAgICAgIGVsc2UgaWYgKGMgPT0gJz4nKSAg ICAgICAgICAgICAgLyogUmVjb3JkIHBvc2l0aW9uIG9mID4gKi8KLSAgICAgICAgICBicG9zID0g aTsKLSAgICAgICAgZWxzZSBpZiAoYyA9PSAnfCcpICAgICAgICAgICAgICAvKiBhbmQgb2YgfCAq LwotICAgICAgICAgIHBwb3MgPSBpOwotICAgIH0KLSAgICBpZiAoYnBvcyA8IDAgJiYgcHBvcyA8 IDApIHsgICAgICAgICAvKiBObyByZWRpcmVjdG9ycy4gKi8KLSNpZmRlZiBDT01NRU5UCi0gICAg ICAgIGlmICghbG9jYWwgJiYKLSAgICAgICAgICAgICh4emNtZCA9PSBYWkRJUiB8fCB4emNtZCA9 PSBYWlRZUCB8fAotICAgICAgICAgICAgIHh6Y21kID09IFhaWElUIHx8IHh6Y21kID09IFhaU1BB IHx8Ci0gICAgICAgICAgICAgeHpjbWQgPT0gWFpITFAgfHwgeHpjbWQgPT0gWFpQV0QgfHwKLSAg ICAgICAgICAgICB4emNtZCA9PSBYWkxHSSB8fCB4emNtZCA9PSBYWkxHTyB8fAotICAgICAgICAg ICAgIHh6Y21kID09IFhaV0hPIHx8IHh6Y21kID09IFhaSE9TKSkgewotICAgICAgICAgICAgcHJp bnRmKCI/XCIlc1wiIGhhcyBubyBlZmZlY3QgaW4gcmVtb3RlIG1vZGVcbiIsY21kYnVmKTsKLSAg ICAgICAgICAgIGlmIChoaW50cykgewotICAgICAgICAgICAgICAgIHByaW50ZigiSGludDogVHJ5 IGFnYWluIHdpdGggYW4gb3V0cHV0IHJlZGlyZWN0b3IuXG4iKTsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgIH0KLSNlbmRpZgkvKiBDT01NRU5UICovCi0g ICAgICAgIHMgPSBicnN0cmlwKHMpOyAgICAgICAgICAgICAgICAgLyogUmVtb3ZlIG91dGVyIGJy YWNlcyBpZiBhbnkuICovCi0gICAgICAgICpwID0gczsgICAgICAgICAgICAgICAgICAgICAgICAg LyogUG9pbnQgdG8gcmVzdWx0ICovCi0gICAgICAgIHJldHVybigxKTsgICAgICAgICAgICAgICAg ICAgICAgLyogYW5kIHJldHVybi4gKi8KLSAgICB9Ci0gICAgcmVtZmlsZSA9IDE7ICAgICAgICAg ICAgICAgICAgICAgICAgLyogSXQncyB8IG9yID4gKi8KLSAgICBpID0gLTE7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBHZXQgbGVmdG1vc3Qgc3ltYm9sICovCi0gICAgaWYgKGJwb3Mg PiAtMSkgICAgICAgICAgICAgICAgICAgICAgLyogQnJhY2tldCAqLwotICAgICAgaSA9IGJwb3M7 Ci0gICAgaWYgKHBwb3MgPiAtMSAmJiAocHBvcyA8IGJwb3MgfHwgYnBvcyA8IDApKSB7IC8qIG9y IHBpcGUgKi8KLSAgICAgICAgaSA9IHBwb3M7Ci0gICAgICAgIHJlbXBpcGUgPSAxOwotICAgIH0K LSAgICBpZiAocmVtcGlwZQotI2lmbmRlZiBOT1BVU0gKLSAgICAgICAgJiYgbm9wdXNoCi0jZW5k aWYgLyogTk9QVVNIICovCi0gICAgICAgICkgewotICAgICAgICBwcmludGYoIj9Tb3JyeSwgYWNj ZXNzIHRvIGV4dGVybmFsIGNvbW1hbmRzIGlzIGRpc2FibGVkLlxuIik7Ci0gICAgICAgIHJldHVy bigtOSk7Ci0gICAgfQotICAgIGMgPSBzW2ldOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IENvcHkgb2Ygc3ltYm9sICovCi0KLSAgICBpZiAoYyA9PSAnPicgJiYgc1tpKzFdID09ICc+Jykg ICAgICAvKiAiPj4iIGZvciBhcHBlbmQ/ICovCi0gICAgICByZW1hcHBkID0gMTsgICAgICAgICAg ICAgICAgICAgICAvKiBJdCdzIG5vdCBqdXN0IGEgZmxhZyBpdCdzIGEgbnVtYmVyICovCi0KLSAg ICBxID0gcyArIGkgKyAxICsgcmVtYXBwZDsgICAgICAgICAgICAvKiBQb2ludCBwYXN0IHN5bWJv bCBpbiBzdHJpbmcgKi8KLSAgICB3aGlsZSAoKnEgPT0gU1AgfHwgKnEgPT0gSFQpIHErKzsgICAv KiBhbmQgYW55IGludGVydmVuaW5nIHdoaXRlc3BhY2UgKi8KLSAgICBpZiAoISpxKSB7Ci0gICAg ICAgIHByaW50ZigiPyVzIG1pc3NpbmdcbiIsIGMgPT0gJz4nID8gIkZpbGVuYW1lIiA6ICJDb21t YW5kIik7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfQotICAgIGlmIChjID09ICc+JyAmJiB6 Y2hrbyhxKSA8IDApIHsgICAgIC8qIChEb2Vzbid0IHdvcmsgZm9yIHwgY21kID4gZmlsZSkgKi8K LSAgICAgICAgcHJpbnRmKCI/QWNjZXNzIGRlbmllZCAtICVzXG4iLCBxKTsKLSAgICAgICAgcmV0 dXJuKC05KTsKLSAgICB9Ci0gICAgbWFrZXN0cigmcmVtZGVzdCxxKTsgICAgICAgICAgICAgICAg LyogQ3JlYXRlIHRoZSBkZXN0aW5hdGlvbiBzdHJpbmcgKi8KLSAgICBxID0gcyArIGkgLSAxOyAg ICAgICAgICAgICAgICAgICAgICAvKiBQb2ludCBiZWZvcmUgc3ltYm9sICovCi0gICAgd2hpbGUg KHEgPiBzICYmICgqcSA9PSBTUCB8fCAqcSA9PSBIVCkpIC8qIFN0cmlwIHRyYWlsaW5nIHdoaXRl c3BhY2UgKi8KLSAgICAgIHEtLTsKLSAgICAqKHErMSkgPSBOVUw7ICAgICAgICAgICAgICAgICAg ICAgICAvKiBUZXJtaW5hdGUgdGhlIHN0cmluZy4gKi8KLSAgICBzID0gYnJzdHJpcChzKTsgICAg ICAgICAgICAgICAgICAgICAvKiBSZW1vdmUgYW55IGJyYWNlcyAqLwotICAgICpwID0gczsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCByZXR1cm4gdmFsdWUgKi8KLQotI2lmbmRl ZiBOT0RFQlVHCi0gICAgaWYgKGRlYmxvZykgewotICAgICAgICBkZWJ1ZyhGMTAxLCJyZW10eHQg cmVtZmlsZSIsIiIscmVtZmlsZSk7Ci0gICAgICAgIGRlYnVnKEYxMDEsInJlbXR4dCByZW1hcHBk IiwiIixyZW1hcHBkKTsKLSAgICAgICAgZGVidWcoRjEwMSwicmVtdHh0IHJlbXBpcGUiLCIiLHJl bXBpcGUpOwotICAgICAgICBkZWJ1ZyhGMTEwLCJyZW10eHQgcmVtZGVzdCIscmVtZGVzdCwgMCk7 Ci0gICAgICAgIGRlYnVnKEYxMTAsInJlbXR4dCBjb21tYW5kIixzLDApOwotICAgIH0KLSNlbmRp ZiAvKiBOT0RFQlVHICovCi0KLSAgICByZXR1cm4oMSk7Ci19Ci0KLWludAotcGxvZ2luKHh4KSBp bnQgeHg7IHsKLSAgICBjaGFyICpwMSA9IE5VTEwsICpwMiA9IE5VTEwsICpwMyA9IE5VTEw7Ci0g ICAgaW50IHBzYXZlZCA9IDAsIHJjID0gMDsKLSNpZmRlZiBDS19SRUNBTEwKLSAgICBleHRlcm4g aW50IG9uX3JlY2FsbDsgICAgICAgICAgICAgICAvKiBhcm91bmQgUGFzc3dvcmQgcHJvbXB0aW5n ICovCi0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0gICAgZGVidWcoRjEwMSwicGxvZ2luIGxvY2Fs IiwiIixsb2NhbCk7Ci0KLSAgICBpZiAoIWxvY2FsIHx8IChuZXR3b3JrICYmIHR0Y2hrKCkgPCAw KSkgewotICAgICAgICBwcmludGYoIj9ObyBjb25uZWN0aW9uXG4iKTsKLSAgICAgICAgcmV0dXJu KC05KTsKLSAgICB9Ci0gICAgaWYgKCh4ID0gY21mbGQoIlVzZXIgSUQiLCIiLCZzLHh4c3RyaW5n KSkgPCAwKSB7IC8qIEdldCBVc2VyIElEICovCi0gICAgICAgIGlmICh4ICE9IC0zKSByZXR1cm4o eCk7Ci0gICAgfQotICAgIHkgPSBzdHJsZW4ocyk7Ci0gICAgaWYgKHkgPiAwKSB7Ci0gICAgICAg IGlmICgocDEgPSBtYWxsb2MoeSArIDEpKSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBwcmludGYo Ij9JbnRlcm5hbCBlcnJvcjogbWFsbG9jXG4iKTsKLSAgICAgICAgICAgIHJjID0gLTk7Ci0gICAg ICAgICAgICBnb3RvIFhaWExHSTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgc3RyY3B5KHAx LHMpOyAgICAgICAgICAgICAgICAgLyogc2FmZSAqLwotICAgICAgICBpZiAoKHJjID0gY21mbGQo IlBhc3N3b3JkIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICBpZiAocmMgIT0gLTMp IGdvdG8gWFpYTEdJOwotICAgICAgICB5ID0gc3RybGVuKHMpOwotICAgICAgICBpZiAoeSA+IDAp IHsKLSAgICAgICAgICAgIGlmICgocDIgPSBtYWxsb2MoeSArIDEpKSA9PSBOVUxMKSB7Ci0gICAg ICAgICAgICAgICAgcHJpbnRmKCI/SW50ZXJuYWwgZXJyb3I6IG1hbGxvY1xuIik7Ci0gICAgICAg ICAgICAgICAgcmMgPSAtOTsKLSAgICAgICAgICAgICAgICBnb3RvIFhaWExHSTsKLSAgICAgICAg ICAgIH0gZWxzZQotICAgICAgICAgICAgICBzdHJjcHkocDIscyk7ICAgICAgICAgICAgIC8qIHNh ZmUgKi8KLSAgICAgICAgICAgIGlmICgocmMgPSBjbWZsZCgiQWNjb3VudCIsIiIsJnMseHhzdHJp bmcpKSA8IDApCi0gICAgICAgICAgICAgIGlmIChyYyAhPSAtMykgZ290byBYWlhMR0k7Ci0gICAg ICAgICAgICB5ID0gc3RybGVuKHMpOwotICAgICAgICAgICAgaWYgKHkgPiAwKSB7Ci0gICAgICAg ICAgICAgICAgaWYgKChwMyA9IG1hbGxvYyh5ICsgMSkpID09IE5VTEwpIHsKLSAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCI/SW50ZXJuYWwgZXJyb3I6IG1hbGxvY1xuIik7Ci0gICAgICAgICAg ICAgICAgICAgIHJjID0gLTk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gWFpYTEdJOwotICAg ICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgc3RyY3B5KHAzLHMpOyAgICAg ICAgIC8qIHNhZmUgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAo KHJjID0gcmVtdHh0KCZzKSkgPCAwKSAgICAgICAgICAvKiBDb25maXJtICYgaGFuZGxlIHJlZGly ZWN0b3JzICovCi0gICAgICBnb3RvIFhaWExHSTsKLQotICAgIGlmICghcDEpIHsgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIE5vIFVzZXJpZCBzcGVjaWZpZWQuLi4gKi8KLSAgICAgICAgZGVi b2sgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBEb24ndCBsb2cgdGhpcyAqLwotICAgICAg ICAvKiBQcm9tcHQgZm9yIHVzZXJuYW1lLCBwYXNzd29yZCwgYW5kIGFjY291bnQgKi8KLSNpZmRl ZiBDS19SRUNBTEwKLSAgICAgICAgb25fcmVjYWxsID0gMDsKLSNlbmRpZiAvKiBDS19SRUNBTEwg Ki8KLSAgICAgICAgY21zYXZwKHBzYXZlLFBST01QVEwpOyAgICAgICAgICAvKiBTYXZlIG9sZCBw cm9tcHQgKi8KLSAgICAgICAgcHNhdmVkID0gMTsKLSAgICAgICAgZGVidWcoRjExMCwiUkVNT1RF IExPR0lOIHNhdmVkIixwc2F2ZSwwKTsKLQotICAgICAgICBjbXNldHAoIlVzZXJuYW1lOiAiKTsg ICAgICAgICAgIC8qIE1ha2UgbmV3IHByb21wdCAqLwotICAgICAgICBjb25jYigoY2hhcillc2Nh cGUpOyAgICAgICAgICAgIC8qIFB1dCBjb25zb2xlIGluIGNicmVhayBtb2RlICovCi0gICAgICAg IGNtaW5pKDEpOwotICAgICAgICBwcm9tcHQoeHhzdHJpbmcpOwotICAgICAgICByYyA9IC05Owot ICAgICAgICBmb3IgKHggPSAtMTsgeCA8IDA7ICkgeyAgICAgICAgIC8qIFByb21wdCB0aWxsIHRo ZXkgYW5zd2VyICovCi0gICAgICAgICAgICBjbXJlcygpOyAgICAgICAgICAgICAgICAgICAgLyog UmVzZXQgdGhlIHBhcnNlciAqLwotICAgICAgICAgICAgeCA9IGNtdHh0KCIiLCIiLCZzLE5VTEwp OyAgIC8qIEdldCBhIGxpdGVyYWwgbGluZSBvZiB0ZXh0ICovCi0gICAgICAgIH0KLSAgICAgICAg eSA9IHN0cmxlbihzKTsKLSAgICAgICAgaWYgKHkgPCAxKSB7Ci0gICAgICAgICAgICBwcmludGYo Ij9DYW5jZWxlZFxuIik7Ci0gICAgICAgICAgICBnb3RvIFhaWExHSTsKLSAgICAgICAgfQotICAg ICAgICBpZiAoKHAxID0gbWFsbG9jKHkgKyAxKSkgPT0gTlVMTCkgewotICAgICAgICAgICAgcHJp bnRmKCI/SW50ZXJuYWwgZXJyb3I6IG1hbGxvY1xuIik7Ci0gICAgICAgICAgICBnb3RvIFhaWExH STsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgc3RyY3B5KHAxLHMpOyAgICAgICAgICAgICAg ICAgLyogc2FmZSAqLwotCi0gICAgICAgIGNtc2V0cCgiUGFzc3dvcmQ6ICIpOyAgICAgICAgICAg LyogTWFrZSBuZXcgcHJvbXB0ICovCi0gICAgICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7ICAgICAg ICAgICAgLyogUHV0IGNvbnNvbGUgaW4gY2JyZWFrIG1vZGUgKi8KLSAgICAgICAgY21pbmkoMCk7 ICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBlY2hvICovCi0gICAgICAgIHByb21wdCh4eHN0 cmluZyk7Ci0gICAgICAgIGRlYm9rID0gMDsKLSAgICAgICAgZm9yICh4ID0gLTE7IHggPCAwICYm IHggIT0gLTM7ICkgeyAvKiBHZXQgYW5zd2VyICovCi0gICAgICAgICAgICBjbXJlcygpOyAgICAg ICAgICAgICAgICAgICAgLyogUmVzZXQgdGhlIHBhcnNlciAqLwotICAgICAgICAgICAgeCA9IGNt dHh0KCIiLCIiLCZzLE5VTEwpOyAgIC8qIEdldCBsaXRlcmFsIGxpbmUgb2YgdGV4dCAqLwotICAg ICAgICB9Ci0gICAgICAgIGlmICgocDIgPSBtYWxsb2MoKGludClzdHJsZW4ocykgKyAxKSkgPT0g TlVMTCkgewotICAgICAgICAgICAgcHJpbnRmKCI/SW50ZXJuYWwgZXJyb3I6IG1hbGxvY1xuIik7 Ci0gICAgICAgICAgICBnb3RvIFhaWExHSTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgc3Ry Y3B5KHAyLHMpOyAgICAgICAgICAgICAgICAgLyogc2FmZSAqLwotICAgICAgICBwcmludGYoIlxy XG4iKTsKLSAgICAgICAgaWYgKChyYyA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICBnb3RvIFha WExHSTsKLSAgICB9Ci0gICAgc3N0YXRlID0gc2V0Z2VuKCdJJyxwMSxwMixwMyk7ICAgICAgLyog R2V0IGhlcmUgd2l0aCBhdCBsZWFzdCB1c2VyIElEICovCi0gICAgcmMgPSAwOwotCi0gIFhaWExH STogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29tbW9uIGV4aXQgcG9pbnQgKi8K LSAgICBpZiAocHNhdmVkKQotICAgICAgY21zZXRwKHBzYXZlKTsgICAgICAgICAgICAgICAgICAg IC8qIFJlc3RvcmUgb3JpZ2luYWwgcHJvbXB0ICovCi0gICAgaWYgKHAzKSB7IGZyZWUocDMpOyBw MyA9IE5VTEw7IH0gICAgLyogRnJlZSBtYWxsb2MnZCBzdG9yYWdlICovCi0gICAgaWYgKHAyKSB7 IGZyZWUocDIpOyBwMiA9IE5VTEw7IH0KLSAgICBpZiAocDEpIHsgZnJlZShwMSk7IHAxID0gTlVM TDsgfQotICAgIGlmIChyYyA+IC0xKSB7Ci0gICAgICAgIGlmIChsb2NhbCAmJiByYyA+IC0xKSAg ICAgICAgICAgLyogSWYgbG9jYWwsIGZsdXNoIHR0eSBpbnB1dCBidWZmZXIgKi8KLSAgICAgICAg ICB0dGZsdWkoKTsKLSAgICB9Ci0gICAgcmV0dXJuKHJjKTsKLX0KLQotI2lmZGVmIE9TMgotI2lm bmRlZiBOT0xPQ0FMCi1pbnQKLWRvcm10KHh4KSBpbnQgeHg7IHsKLSAgICBpbnQgcmMgPSAwOwot ICAgIGV4dGVybiBpbnQgdGVybV9pbzsKLSAgICBpbnQgdGVybV9pb19zYXYgPSB0ZXJtX2lvOwot I2lmZGVmIE5FV0ZUUAotICAgIGV4dGVybiBpbnQgZnRwZ2V0LCBmdHBpc29wZW4oKTsKLSAgICBp ZiAoKGZ0cGdldCA9PSAxKSB8fCAoKGZ0cGdldCA9PSAyKSAmJiBmdHBpc29wZW4oKSkpCi0gICAg ICByZXR1cm4oZG9mdHBybXQoeHgsMCkpOwotI2VuZGlmIC8qIE5FV0ZUUCAqLwotICAgIHRlcm1f aW8gPSAwOwotICAgIHJjID0geHhkb3JtdCh4eCk7Ci0gICAgdGVybV9pbyA9IHRlcm1faW9fc2F2 OwotICAgIHJldHVybiByYzsKLX0KLQotCi1pbnQKLXh4ZG9ybXQoeHgpIGludCB4eDsKLSNlbHNl IC8qIE5PTE9DQUwgKi8KLWludAotZG9ybXQoeHgpIGludCB4eDsKLSNlbmRpZiAvKiBOT0xPQ0FM ICovCi0jZWxzZSAvKiBPUzIgKi8KLWludAotZG9ybXQoeHgpIGludCB4eDsKLSNlbmRpZiAvKiBP UzIgKi8KLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSRU1PVEUg Y29tbWFuZHMgKi8KLSAgICBpbnQgeCwgeSwgcmV0Y29kZTsKLSAgICBjaGFyICpzLCBzYnVmWzUw XSwgKnMyOwotCi0jaWZkZWYgTkVXRlRQCi0gICAgZXh0ZXJuIGludCBmdHBnZXQsIGZ0cGlzb3Bl bigpOwotICAgIGlmICgoZnRwZ2V0ID09IDEpIHx8ICgoZnRwZ2V0ID09IDIpICYmIGZ0cGlzb3Bl bigpKSkKLSAgICAgIHJldHVybihkb2Z0cHJtdCh4eCwwKSk7Ci0jZW5kaWYgLyogTkVXRlRQICov Ci0KLSAgICByZW1maWxlID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciB0aGVz ZSAqLwotICAgIHJlbXBpcGUgPSAwOwotICAgIHJlbWFwcGQgPSAwOwotCi0gICAgaWYgKHh4IDwg MCkgcmV0dXJuKHh4KTsgICAgICAgICAgICAgLyogUkVNT1RFIHdoYXQ/ICovCi0KLSAgICB4emNt ZCA9IHh4OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYWtlIGdsb2JhbCBjb3B5IG9mIGFy ZyAqLwotCi0gICAgaWYgKHh4ID09IFhaU0VUKSB7ICAgICAgICAgICAgICAgICAgLyogUkVNT1RF IFNFVCAqLwotICAgICAgICBpZiAoKHkgPSBjbWtleShybXN0YWIsbnJtcywiIiwiIix4eHN0cmlu ZykpIDwgMCkgewotICAgICAgICAgICAgaWYgKHkgPT0gLTMpIHsKLSAgICAgICAgICAgICAgICBw cmludGYoIj9QYXJhbWV0ZXIgbmFtZSByZXF1aXJlZFxuIik7Ci0gICAgICAgICAgICAgICAgcmV0 dXJuKC05KTsKLSAgICAgICAgICAgIH0gZWxzZSByZXR1cm4oeSk7Ci0gICAgICAgIH0KLSAgICAg ICAgcmV0dXJuKGRvcHJtKHksMSkpOwotICAgIH0KLQotICAgIHN3aXRjaCAoeHgpIHsgICAgICAg ICAgICAgICAgICAgICAgIC8qIE90aGVycy4uLiAqLwotCi0gICAgICBjYXNlIFhaQ0RVOgotICAg ICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgcHJpbnRmKCI/ U29ycnksIFJFTU9URSBDRFVQIG5vdCBzdXBwb3J0ZWQgeWV0XG4iKTsKLSAgICAgICAgcmV0dXJu KC05KTsKLQotICAgICAgY2FzZSBYWkNXRDogICAgICAgICAgICAgICAgICAgICAgIC8qIENXRCAo Q0QpICovCi0gICAgICAgIGlmICgoeCA9IGNtdHh0KCJSZW1vdGUgZGlyZWN0b3J5IG5hbWUiLCIi LCZzLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgaWYgKCh4 ID0gcmVtdHh0KCZzKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgZGVidWco RjExMSwiWFpDV0Q6ICIscyx4KTsKLSAgICAgICAgKnNidWYgPSBOVUw7Ci0gICAgICAgIHMyID0g c2J1ZjsKLS8qCi0gIFRoZSBmb2xsb3dpbmcgaXMgY29tbWVudGVkIG91dCBiZWNhdXNlIHNpbmNl IHRoZSBkaXNhcHBlYXJhbmNlIG9mIHRoZQotICBERUNTWVNURU0tMjAgZnJvbSB0aGUgcGxhbmV0 LCBubyBrbm93biBjb21wdXRlciByZXF1aXJlcyBhIHBhc3N3b3JkIGZvcgotICBjaGFuZ2luZyBk aXJlY3RvcnkuCi0qLwotI2lmZGVmIERJUlBXRFBSCi0gICAgICAgIGlmICgqcyAhPSBOVUwpIHsg ICAgICAgICAgICAgICAgLyogSWYgZGlyZWN0b3J5IG5hbWUgZ2l2ZW4sICovCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZ2V0IHBhc3N3b3JkIG9uIHNlcGFyYXRl IGxpbmUuICovCi0gICAgICAgICAgICBpZiAodGxldmVsID4gLTEpIHsgICAgICAgICAgLyogRnJv bSB0YWtlIGZpbGUuLi4gKi8KLQotICAgICAgICAgICAgICAgIGlmIChmZ2V0cyhzYnVmLDUwLHRm aWxlW3RsZXZlbF0pID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICBmYXRhbCgidGFrZSBmaWxl IGVuZHMgcHJlbWF0dXJlbHkgaW4gJ3JlbW90ZSBjd2QnIik7Ci0gICAgICAgICAgICAgICAgZGVi dWcoRjExMCwiIHBzd2QgZnJvbSB0YWtlIGZpbGUiLHMyLDApOwotICAgICAgICAgICAgICAgIGZv ciAoeCA9IChpbnQpc3RybGVuKHNidWYpOwotICAgICAgICAgICAgICAgICAgICAgeCA+IDAgJiYg KHNidWZbeC0xXSA9PSBOTCB8fCBzYnVmW3gtMV0gPT0gQ1IpOwotICAgICAgICAgICAgICAgICAg ICAgeC0tKQotICAgICAgICAgICAgICAgICAgc2J1Zlt4LTFdID0gJ1wwJzsKLQotICAgICAgICAg ICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIEZyb20gdGVybWluYWwuLi4gKi8KLQot ICAgICAgICAgICAgICAgIHByaW50ZigiIFBhc3N3b3JkOiAiKTsgIC8qIGdldCBhIHBhc3N3b3Jk ICovCi0jaWZkZWYgSUtTRAotICAgICAgICAgICAgICAgIGlmICghbG9jYWwgJiYgaW5zZXJ2ZXIp IHsKLSAgICAgICAgICAgICAgICAgICAgeCA9IGNvbmluYygwKTsKLSAgICAgICAgICAgICAgICB9 IGVsc2UKLSNlbmRpZiAvKiBJS1NEICovCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgICB4 ID0gaXNfYV90dHkoMCkgPyBjb25pbmMoMCkgOiAvKiB3aXRoIG5vIGVjaG8gLi4uICovCi0gICAg ICAgICAgICAgICAgICAgIGdldGNoYXIoKTsKLSNlbHNlIC8qIE9TMiAqLwotICAgICAgICAgICAg ICAgIHggPSBnZXRjaGFyKCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAgd2hp bGUgKCh4ICE9IE5MKSAmJiAoeCAhPSBDUikpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCh4 ICY9IDAxNzcpID09ICc/JykgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/IFBh c3N3b3JkIG9mIHJlbW90ZSBkaXJlY3RvcnlcbiBQYXNzd29yZDogIik7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBzMiA9IHNidWY7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqc2J1ZiA9IE5V TDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh4ID09IEVTQykgLyogTWluaSBjb21t YW5kIGxpbmUgZWRpdG9yLi4uICovCi0gICAgICAgICAgICAgICAgICAgICAgYmxlZXAoQlBfV0FS Tik7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHggPT0gQlMgfHwgeCA9PSAwMTc3KQot ICAgICAgICAgICAgICAgICAgICAgIHMyLS07Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg KHggPT0gMDI1KSB7ICAgICAgICAvKiBDdHJsLVUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAg IHMyID0gc2J1ZjsKLSAgICAgICAgICAgICAgICAgICAgICAgICpzYnVmID0gTlVMOwotICAgICAg ICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAqczIrKyA9IHg7Ci0K LSAgICAgICAgICAgICAgICAgICAgLyogR2V0IHRoZSBuZXh0IGNoYXJhY3RlciAqLwotI2lmZGVm IElLU0QKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2NhbCAmJiBpbnNlcnZlcikgewotICAg ICAgICAgICAgICAgICAgICAgICAgeCA9IGNvbmluYygwKTsKLSAgICAgICAgICAgICAgICAgICAg fSBlbHNlCi0jZW5kaWYgLyogSUtTRCAqLwotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICAg ICB4ID0gaXNfYV90dHkoMCkgPyBjb25pbmMoMCkgOiAvKiB3aXRoIG5vIGVjaG8gLi4uICovCi0g ICAgICAgICAgICAgICAgICAgICAgZ2V0Y2hhcigpOwotI2Vsc2UgLyogT1MyICovCi0gICAgICAg ICAgICAgICAgICAgIHggPSBnZXRjaGFyKCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgICpzMiA9IE5VTDsKLSAgICAgICAgICAgICAgICBwdXRj aGFyKCdcbicpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgczIgPSBzYnVmOwotICAgICAg ICB9IGVsc2UgczIgPSAiIjsKLSNlbmRpZiAvKiBESVJQV0RQUiAqLwotCi0gICAgICAgIGRlYnVn KEYxMTAsIiBwYXNzd29yZCIsczIsMCk7Ci0JcmNkYWN0aXZlID0gMTsKLSAgICAgICAgc3N0YXRl ID0gc2V0Z2VuKCdDJyxzLHMyLCIiKTsKLSAgICAgICAgcmV0Y29kZSA9IDA7Ci0gICAgICAgIGJy ZWFrOwotCi0gICAgICBjYXNlIFhaREVMOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBEZWxldGUgKi8KLSAgICAgICAgaWYgKCh4ID0gY210eHQoIk5hbWUgb2YgcmVtb3RlIGZpbGUo cykgdG8gZGVsZXRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIiIsJnMseHhzdHJpbmcpKSA8 IDApIHsKLSAgICAgICAgICAgIGlmICh4ID09IC0zKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRm KCI/TmFtZSBvZiByZW1vdGUgZmlsZShzKSByZXF1aXJlZFxuIik7Ci0gICAgICAgICAgICAgICAg cmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0gZWxzZSByZXR1cm4oeCk7Ci0gICAgICAgIH0KLSAg ICAgICAgaWYgKCh4ID0gcmVtdHh0KCZzKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAg ICAgICAgaWYgKGxvY2FsKSB0dGZsdWkoKTsgICAgICAgICAgICAvKiBJZiBsb2NhbCwgZmx1c2gg dHR5IGlucHV0IGJ1ZmZlciAqLwotICAgICAgICByZXRjb2RlID0gc3N0YXRlID0gcmZpbG9wKHMs J0UnKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgWFpESVI6ICAgICAgICAgICAgICAg ICAgICAgICAvKiBEaXJlY3RvcnkgKi8KLSAgICAgICAgaWYgKCh4ID0gY210eHQoIlJlbW90ZSBk aXJlY3Rvcnkgb3IgZmlsZSBzcGVjaWZpY2F0aW9uIiwiIiwmcywKLSAgICAgICAgICAgICAgICAg ICAgICAgeHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBpZiAo KHggPSByZW10eHQoJnMpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBpZiAo bG9jYWwpIHR0Zmx1aSgpOyAgICAgICAgICAgIC8qIElmIGxvY2FsLCBmbHVzaCB0dHkgaW5wdXQg YnVmZmVyICovCi0gICAgICAgIHJtc2coKTsKLSAgICAgICAgcmV0Y29kZSA9IHNzdGF0ZSA9IHNl dGdlbignRCcscywiIiwiIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFhaSExQOiAg ICAgICAgICAgICAgICAgICAgICAgLyogSGVscCAqLwotICAgICAgICBpZiAoKHggPSByZW1jZm0o KSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIHNzdGF0ZSA9IHNldGdlbignSCcsIiIsIiIsIiIp OwotICAgICAgICByZXRjb2RlID0gMDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgWFpI T1M6ICAgICAgICAgICAgICAgICAgICAgICAvKiBIb3N0ICovCi0gICAgICAgIGlmICgoeCA9IGNt dHh0KCJDb21tYW5kIGZvciByZW1vdGUgc3lzdGVtIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKLSAg ICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIGlmICgoeCA9IHJlbXR4dCgmcykpIDwgMCkKLSAg ICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIGlmICgoeSA9IChpbnQpc3RybGVuKHMpKSA8IDEp Ci0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJ Wik7Ci0gICAgICAgIGNtYXJnID0gbGluZTsKLSAgICAgICAgcm1zZygpOwotICAgICAgICByZXRj b2RlID0gc3N0YXRlID0gJ2MnOwotICAgICAgICBicmVhazsKLQotI2lmbmRlZiBOT0ZSSUxMUwot ICAgICAgY2FzZSBYWktFUjoKLSAgICAgICAgaWYgKCh4ID0gY210eHQoIkNvbW1hbmQgZm9yIHJl bW90ZSBLZXJtaXQiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsK LSAgICAgICAgaWYgKCh4ID0gcmVtdHh0KCZzKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsK LSAgICAgICAgaWYgKChpbnQpc3RybGVuKHMpIDwgMSkgIHsKLSAgICAgICAgICAgIGlmICh4ID09 IC0zKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/UmVtb3RlIEtlcm1pdCBjb21tYW5kIHJl cXVpcmVkXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgfSBl bHNlIHJldHVybih4KTsKLSAgICAgICAgfQotICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJV RlNJWik7Ci0gICAgICAgIGNtYXJnID0gbGluZTsKLSAgICAgICAgcmV0Y29kZSA9IHNzdGF0ZSA9 ICdrJzsKLSAgICAgICAgcm1zZygpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBYWkxH STogICAgICAgICAgICAgICAgICAgICAgIC8qIExvZ2luICovCi0JcmNkYWN0aXZlID0gMTsJCQkv KiBTdXBwcmVzcyAiTG9nZ2VkIGluIiBtc2cgaWYgcXVpZXQgKi8KLSAgICAgICAgcmV0dXJuKHBs b2dpbihYWFJFTSkpOwotCi0gICAgICBjYXNlIFhaTEdPOiB7ICAgICAgICAgICAgICAgICAgICAg LyogTG9nb3V0ICovCi0gICAgICAgICAgZXh0ZXJuIGludCBieWVfYWN0aXZlOwotICAgICAgICAg IGlmICgoeCA9IHJlbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgICBzc3RhdGUgPSBz ZXRnZW4oJ0knLCIiLCIiLCIiKTsKLSAgICAgICAgICByZXRjb2RlID0gMDsKLSAgICAgICAgICBi eWVfYWN0aXZlID0gMTsgICAgICAgICAgICAgICAvKiBDbG9zZSBjb25uZWN0aW9uIHdoZW4gZG9u ZSAqLwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBjYXNlIFhaUFJJOiAgICAg ICAgICAgICAgICAgICAgICAgLyogUHJpbnQgKi8KLSAgICAgICAgaWYgKCFhdGRpc28gfHwgIWF0 Y2FwcikgeyAgICAgICAvKiBEaXNwb3NpdGlvbiBhdHRyaWJ1dGUgb2ZmPyAqLwotICAgICAgICAg ICAgcHJpbnRmKCI/RGlzcG9zaXRpb24gQXR0cmlidXRlIGlzIE9mZlxuIik7Ci0gICAgICAgICAg ICByZXR1cm4oLTIpOwotICAgICAgICB9Ci0gICAgICAgIGNtYXJnID0gIiI7Ci0gICAgICAgIGNt YXJnMiA9ICIiOwotICAgICAgICBpZiAoKHggPSBjbWlmaSgiTG9jYWwgZmlsZShzKSB0byBwcmlu dCBvbiByZW1vdGUgcHJpbnRlciIsIiIsJnMsJnksCi0gICAgICAgICAgICAgICAgICAgICAgIHh4 c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAgICAgICAg ICAgIHByaW50ZigiP05hbWUgb2YgbG9jYWwgZmlsZShzKSByZXF1aXJlZFxuIik7Ci0gICAgICAg ICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybih4 KTsKLSAgICAgICAgfQotICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7ICAgIC8q IE1ha2UgYSBzYWZlIGNvcHkgb2YgZmlsZW5hbWUgKi8KLSAgICAgICAgKm9wdGJ1ZiA9IE5VTDsg ICAgICAgICAgICAgICAgICAvKiBXaXBlIG91dCBhbnkgb2xkIG9wdGlvbnMgKi8KLSAgICAgICAg aWYgKCh4ID0gY210eHQoIk9wdGlvbnMgZm9yIHJlbW90ZSBwcmludCBjb21tYW5kIiwiIiwmcyx4 eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIGlmICgoeCA9IHJl bXR4dCgmcykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIGlmICgoaW50KXN0 cmxlbihvcHRidWYpID4gOTQpIHsgLyogTWFrZSBzdXJlIHRoaXMgaXMgbGVnYWwgKi8KLSAgICAg ICAgICAgIHByaW50ZigiP09wdGlvbiBzdHJpbmcgdG9vIGxvbmdcbiIpOwotICAgICAgICAgICAg cmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgICAgICBja3N0cm5jcHkob3B0YnVmLHMsT1BUQlVG TEVOKTsgIC8qIE1ha2UgYSBzYWZlIGNvcHkgb2Ygb3B0aW9ucyAqLwotICAgICAgICBuZmlscyA9 IC0xOyAgICAgICAgICAgICAgICAgICAgIC8qIEV4cGFuZCBmaWxlIGxpc3QgaW50ZXJuYWxseSAq LwotICAgICAgICBjbWFyZyA9IGxpbmU7ICAgICAgICAgICAgICAgICAgIC8qIFBvaW50IHRvIGZp bGUgbGlzdC4gKi8KLSAgICAgICAgcnByaW50ZiA9IDE7ICAgICAgICAgICAgICAgICAgICAvKiBS RU1PVEUgUFJJTlQgbW9kaWZpZXIgZm9yIFNFTkQgKi8KLSAgICAgICAgc3N0YXRlID0gJ3MnOyAg ICAgICAgICAgICAgICAgICAvKiBTZXQgc3RhcnQgc3RhdGUgdG8gU0VORCAqLwotICAgICAgICBp ZiAobG9jYWwpIGRpc3BsYSA9IDE7Ci0gICAgICAgIHJldGNvZGUgPSAwOwotICAgICAgICBicmVh azsKLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotCi0gICAgICBjYXNlIFhaU1BBOiAgICAgICAgICAg ICAgICAgICAgICAgLyogU3BhY2UgKi8KLSAgICAgICAgaWYgKCh4ID0gY210eHQoIkNvbmZpcm0s IG9yIHJlbW90ZSBkaXJlY3RvcnkgbmFtZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICIiLCZz LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgaWYgKCh4ID0g cmVtdHh0KCZzKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgcmV0Y29kZSA9 IHNzdGF0ZSA9IHNldGdlbignVScscywiIiwiIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBj YXNlIFhaTVNHOiAgICAgICAgICAgICAgICAgICAgICAgLyogTWVzc2FnZSAqLwotICAgICAgICBp ZiAoKHggPSBjbXR4dCgiU2hvcnQgdGV4dCBtZXNzYWdlIGZvciBzZXJ2ZXIiLCIiLCZzLHh4c3Ry aW5nKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgaWYgKCh4ID0gcmVtdHh0 KCZzKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgcmV0Y29kZSA9IHNzdGF0 ZSA9IHNldGdlbignTScscywiIiwiIik7Ci0gICAgICAgIGJyZWFrOwotCi0jaWZuZGVmIE5PRlJJ TExTCi0gICAgICBjYXNlIFhaVFlQOiAgICAgICAgICAgICAgICAgICAgICAgLyogVHlwZSAqLwot ICAgICAgICBpZiAoKHggPSBjbXR4dCgiUmVtb3RlIGZpbGUgc3BlY2lmaWNhdGlvbiIsIiIsJnMs eHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBpZiAoKGludClz dHJsZW4ocykgPCAxKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9SZW1vdGUgZmlsZW5hbWUgcmVx dWlyZWRcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgICAgICBp ZiAoKHggPSByZW10eHQoJnMpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBy bXNnKCk7Ci0gICAgICAgIHJldGNvZGUgPSBzc3RhdGUgPSByZmlsb3AocywnVCcpOwotICAgICAg ICBicmVhazsKLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotCi0jaWZuZGVmIE5PRlJJTExTCi0gICAg ICBjYXNlIFhaV0hPOgotICAgICAgICBpZiAoKHggPSBjbXR4dCgiUmVtb3RlIHVzZXIgbmFtZSwg b3IgY2FycmlhZ2UgcmV0dXJuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIiIsJnMseHhzdHJp bmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBpZiAoKHggPSByZW10eHQo JnMpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICByZXRjb2RlID0gc3N0YXRl ID0gc2V0Z2VuKCdXJyxzLCIiLCIiKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogTk9GUklM TFMgKi8KLQotICAgICAgY2FzZSBYWlBXRDogICAgICAgICAgICAgICAgICAgICAgIC8qIFBXRCAq LwotICAgICAgICBpZiAoKHggPSByZW1jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIHNz dGF0ZSA9IHNldGdlbignQScsIiIsIiIsIiIpOwotICAgICAgICByZXRjb2RlID0gMDsKLSAgICAg ICAgYnJlYWs7Ci0KLSNpZm5kZWYgTk9TUEwKLSAgICAgIGNhc2UgWFpRVUU6IHsgICAgICAgICAg ICAgICAgICAgICAvKiBRdWVyeSAqLwotICAgICAgICAgIGNoYXIgYnVmWzJdOwotICAgICAgICAg IGV4dGVybiBjaGFyIHF1ZXJ5YnVmW10sICogcWJ1ZnA7Ci0gICAgICAgICAgZXh0ZXJuIGludCBx YnVmbjsKLSAgICAgICAgICBpZiAoKHkgPSBjbWtleSh2YXJ0eXAsbnZhcnR5cCwiIiwiIix4eHN0 cmluZykpIDwgMCkKLSAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICBpZiAoKHggPSBj bXR4dCh5ID09ICdGJyA/ICJSZW1vdGUgZnVuY3Rpb24gaW52b2NhdGlvbiIgOgotICAgICAgICAg ICAgICAgICAgICAgICAgICgnSycgPyAiUmVtb3RlIHZhcmlhYmxlIG5hbWUgb3IgZnVuY3Rpb24i OgotICAgICAgICAgICAgICAgICAgICAgICAgICJSZW1vdGUgdmFyaWFibGUgbmFtZSIpLAotICAg ICAgICAgICAgICAgICAgICAgICAgICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICZzLAot ICAgICAgICAgICAgICAgICAgICAgICAgICh5ID09ICdLJykgPyB4eHN0cmluZyA6IE5VTEwKLSAg ICAgICAgICAgICAgICAgICAgICAgICApKSA8IDApICAgICAgICAvKiBEb24ndCBldmFsdWF0ZSAq LwotICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgIGlmICgoeCA9IHJlbXR4dCgmcykp IDwgMCkKLSAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICBxdWVyeSA9IDE7ICAgICAg ICAgICAgICAgICAgICAvKiBRVUVSWSBpcyBhY3RpdmUgKi8KLSAgICAgICAgICBxYnVmcCA9IHF1 ZXJ5YnVmOyAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHF1ZXJ5IHJlc3BvbnNlIGJ1ZmZlciAq LwotICAgICAgICAgIHFidWZuID0gMDsKLSAgICAgICAgICBxdWVyeWJ1ZlswXSA9IE5VTDsKLSAg ICAgICAgICBidWZbMF0gPSAoY2hhcikgKHkgJiAxMjcpOwotICAgICAgICAgIGJ1ZlsxXSA9IE5V TDsKLSAgICAgICAgICByZXRjb2RlID0gc3N0YXRlID0gc2V0Z2VuKCdWJywiUSIsKGNoYXIgKili dWYscyk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2UgWFpBU0c6IHsg ICAgICAgICAgICAgICAgICAgICAvKiBBc3NpZ24gKi8KLSAgICAgICAgICBjaGFyIGJ1ZltWTkFN TF07Ci0gICAgICAgICAgaWYgKCh5ID0gY21mbGQoIlJlbW90ZSB2YXJpYWJsZSBuYW1lIiwiIiwm cyxOVUxMKSkgPCAwKSAvKiBObyBldmFsICovCi0gICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAg ICAgICAgaWYgKChpbnQpc3RybGVuKHMpID49IFZOQU1MKSB7Ci0gICAgICAgICAgICAgIHByaW50 ZigiP1RvbyBsb25nXG4iKTsKLSAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICB9 Ci0gICAgICAgICAgY2tzdHJuY3B5KGJ1ZixzLFZOQU1MKTsKLSAgICAgICAgICBpZiAoKHggPSBj bXR4dCgiQXNzaWdubWVudCBmb3IgcmVtb3RlIHZhcmlhYmxlIiwKLSAgICAgICAgICAgICAgICAg ICAiIiwmcyx4eHN0cmluZykpIDwgMCkgLyogRXZhbHVhdGUgdGhpcyBvbmUgKi8KLSAgICAgICAg ICAgIHJldHVybih4KTsKLSAgICAgICAgICBpZiAoKHggPSByZW10eHQoJnMpKSA8IDApCi0gICAg ICAgICAgICByZXR1cm4oeCk7Ci0jaWZkZWYgQ09NTUVOVAotLyoKLSAgU2VydmVyIGNvbW1hbmRz IGNhbid0IGJlIGxvbmcgcGFja2V0cy4gIEluIHByaW5jaXBsZSB0aGVyZSdzIG5vIHJlYXNvbgot ICB3aHkgdGhleSBzaG91bGRuJ3QgYmUsIGV4Y2VwdCB0aGF0IHdlIGRvbid0IGtub3cgYXQgdGhp cyBwb2ludCBpZiB0aGUKLSAgc2VydmVyIGlzIGNhcGFibGUgb2YgYWNjZXB0aW5nIGxvbmcgcGFj a2V0cyBiZWNhdXNlIHdlIGhhdmVuJ3Qgc3RhcnRlZAotICB0aGUgcHJvdG9jb2wgeWV0LiAgSW4g cHJhY3RpY2UsIGFsbG93aW5nIGEgbG9uZyBwYWNrZXQgaGVyZSBicmVha3MgYSBsb3QKLSAgb2Yg YXNzdW1wdGlvbnMsIGNhdXNlcyBidWZmZXIgb3ZlcnJ1bnMgYW5kIGNyYXNoZXMsIGV0Yy4gIFRv IGJlIGZpeGVkCi0gIGxhdGVyLiAgKEJ1dCBzaW5jZSB0aGlzIGlzIGNvbW1lbnRlZCBvdXQsIGV2 aWRlbnRseSBJIGZpeGVkIGl0IGxhdGVyLi4uKQotKi8KLSAgICAgICAgICBpZiAoKGludClzdHJs ZW4ocykgPiA4NSkgeyAgICAvKiBBbGxvdyBmb3IgZW5jb2RpbmcgZXhwYW5zaW9uICovCi0gICAg ICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCB2YWx1ZSBpcyB0b28gbG9uZyAtIDg1IGNoYXJhY3Rl cnMgbWF4XG4iKTsKLSAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICB9Ci0jZW5k aWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgIHJldGNvZGUgPSBzc3RhdGUgPSBzZXRnZW4oJ1Yn LCJTIiwoY2hhciAqKWJ1ZixzKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSNlbmRpZiAv KiBOT1NQTCAqLwotCi0gICAgICBjYXNlIFhaQ1BZOiB7ICAgICAgICAgICAgICAgICAgICAgLyog Q09QWSAqLwotICAgICAgICAgIGNoYXIgYnVmW1RNUEJVRlNJWl07Ci0gICAgICAgICAgYnVmW1RN UEJVRlNJWi0xXSA9ICdcMCc7Ci0gICAgICAgICAgaWYgKCh4ID0gY21mbGQoIk5hbWUgb2YgcmVt b3RlIGZpbGUgdG8gY29weSIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKLSAgICAgICAgICAgICAg aWYgKHggPT0gLTMpIHsKLSAgICAgICAgICAgICAgICAgIHByaW50ZigiP05hbWUgb2YgcmVtb3Rl IGZpbGUgcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuKHgp OwotICAgICAgICAgIH0KLSAgICAgICAgICBja3N0cm5jcHkoYnVmLHMsVE1QQlVGU0laKTsKLSAg ICAgICAgICBpZiAoKHggPSBjbWZsZCgiTmFtZSBvZiByZW1vdGUgZGVzdGluYXRpb24gZmlsZSBv ciBkaXJlY3RvcnkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICIiLCZzLCB4eHN0cmluZykp IDwgMCkgewotICAgICAgICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAgICAgICAgICAgICAg cHJpbnRmKCI/TmFtZSBvZiByZW1vdGUgZmlsZSBvciBkaXJlY3RvcnkgcmVxdWlyZWRcbiIpOwot ICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgfSBlbHNlIHJldHVy bih4KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2tzdHJuY3B5KHRtcGJ1ZixzLFRNUEJVRlNJ Wik7Ci0gICAgICAgICAgaWYgKCh4ID0gcmVtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgIHJldHVy bih4KTsKLSAgICAgICAgICBpZiAobG9jYWwpIHR0Zmx1aSgpOyAgICAgICAgICAvKiBJZiBsb2Nh bCwgZmx1c2ggdHR5IGlucHV0IGJ1ZmZlciAqLwotICAgICAgICAgIHJldGNvZGUgPSBzc3RhdGUg PSBzZXRnZW4oJ0snLGJ1Zix0bXBidWYsIiIpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQot ICAgICAgY2FzZSBYWlJFTjogeyAgICAgICAgICAgICAgICAgICAgIC8qIFJlbmFtZSAqLwotICAg ICAgICAgIGNoYXIgYnVmW1RNUEJVRlNJWl07Ci0gICAgICAgICAgYnVmW1RNUEJVRlNJWi0xXSA9 ICdcMCc7Ci0gICAgICAgICAgaWYgKCh4ID0gY21mbGQoIk5hbWUgb2YgcmVtb3RlIGZpbGUgdG8g cmVuYW1lIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiIiwmcyx4eHN0cmluZykpIDwgMCkg ewotICAgICAgICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAgICAgICAgICAgICAgcHJpbnRm KCI/TmFtZSBvZiByZW1vdGUgZmlsZSByZXF1aXJlZFxuIik7Ci0gICAgICAgICAgICAgICAgICBy ZXR1cm4oLTkpOwotICAgICAgICAgICAgICB9IGVsc2UgcmV0dXJuKHgpOwotICAgICAgICAgIH0K LSAgICAgICAgICBja3N0cm5jcHkoYnVmLHMsVE1QQlVGU0laKTsKLSAgICAgICAgICBpZiAoKHgg PSBjbWZsZCgiTmV3IG5hbWUgb2YgcmVtb3RlIGZpbGUiLCIiLCZzLCB4eHN0cmluZykpIDwgMCkg ewotICAgICAgICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAgICAgICAgICAgICAgcHJpbnRm KCI/TmFtZSBvZiByZW1vdGUgZmlsZSByZXF1aXJlZFxuIik7Ci0gICAgICAgICAgICAgICAgICBy ZXR1cm4oLTkpOwotICAgICAgICAgICAgICB9IGVsc2UgcmV0dXJuKHgpOwotICAgICAgICAgIH0K LSAgICAgICAgICBja3N0cm5jcHkodG1wYnVmLHMsVE1QQlVGU0laKTsKLSAgICAgICAgICBpZiAo KHggPSByZW1jZm0oKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgIGlm IChsb2NhbCkgdHRmbHVpKCk7ICAgICAgICAgIC8qIElmIGxvY2FsLCBmbHVzaCBkZXZpY2UgYnVm ZmVyICovCi0gICAgICAgICAgcmV0Y29kZSA9IHNzdGF0ZSA9IHNldGdlbignUicsYnVmLHRtcGJ1 ZiwiIik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIFhaTUtEOiAgICAg ICAgICAgICAgICAgICAgICAgLyogbWtkaXIgKi8KLSAgICAgIGNhc2UgWFpSTUQ6ICAgICAgICAg ICAgICAgICAgICAgICAvKiBybWRpciAqLwotICAgICAgICBpZiAoKHggPSBjbXR4dCgoeHggPT0g WFpNS0QpID8KLSAgICAgICAgICAgICAgICAgICAgICAgIk5hbWUgb2YgcmVtb3RlIGRpcmVjdG9y eSB0byBjcmVhdGUiIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIk5hbWUgb2YgcmVtb3RlIGRp cmVjdG9yeSB0byBkZWxldGUiLAotICAgICAgICAgICAgICAgICAgICAgICAiIiwKLSAgICAgICAg ICAgICAgICAgICAgICAgJnMsCi0gICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nCi0gICAg ICAgICAgICAgICAgICAgICAgICkpIDwgMCkgewotICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsK LSAgICAgICAgICAgICAgICBwcmludGYoIj9OYW1lIHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAg ICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgfSBlbHNlIHJldHVybih4KTsKLSAgICAgICAg fQotICAgICAgICBpZiAoKHggPSByZW10eHQoJnMpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgp OwotICAgICAgICBpZiAobG9jYWwpIHR0Zmx1aSgpOyAgICAgICAgICAgIC8qIElmIGxvY2FsLCBm bHVzaCB0dHkgaW5wdXQgYnVmZmVyICovCi0gICAgICAgIHJldGNvZGUgPSBzc3RhdGUgPSByZmls b3AocywgKGNoYXIpKHh4ID09IFhaTUtEID8gJ20nIDogJ2QnKSk7Ci0gICAgICAgIGJyZWFrOwot Ci0gICAgICBjYXNlIFhaWElUOiAgICAgICAgICAgICAgICAgICAgICAgLyogRXhpdCAqLwotICAg ICAgICBpZiAoKHggPSByZW1jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIHNzdGF0ZSA9 IHNldGdlbignWCcsIiIsIiIsIiIpOwotICAgICAgICByZXRjb2RlID0gMDsKLSAgICAgICAgYnJl YWs7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmICgoeCA9IHJlbWNmbSgpKSA8IDApIHJl dHVybih4KTsKLSAgICAgICAgcHJpbnRmKCI/Tm90IGltcGxlbWVudGVkIC0gJXNcbiIsY21kYnVm KTsKLSAgICAgICAgcmV0dXJuKC0yKTsKLSAgICB9Ci0gICAgaWYgKGxvY2FsICYmIHJldGNvZGUg PiAtMSkgICAgICAgICAgLyogSWYgbG9jYWwsIGZsdXNoIHR0eSBpbnB1dCBidWZmZXIgKi8KLSAg ICAgIHR0Zmx1aSgpOwotICAgIHJldHVybihyZXRjb2RlKTsKLX0KLQotCi0vKiAgUiBGIEkgTCBP IFAgIC0tICBSZW1vdGUgRmlsZSBPcGVyYXRpb24gICovCi0KLUNIQVIKLSNpZmRlZiBDS19BTlNJ QwotcmZpbG9wKGNoYXIgKiBzLCBjaGFyIHQpCi0jZWxzZQotcmZpbG9wKHMsdCkgY2hhciAqcywg dDsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogcmZpbG9wICovIHsKLSAgICBpZiAoKnMgPT0g TlVMKSB7Ci0gICAgICAgIHByaW50ZigiP0ZpbGUgc3BlY2lmaWNhdGlvbiByZXF1aXJlZFxuIik7 Ci0gICAgICAgIHJldHVybigoQ0hBUikgMCk7Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsInJmaWxv cCIscyx0KTsKLSAgICByZXR1cm4oc2V0Z2VuKHQscywiIiwiIikpOwotfQotI2VuZGlmIC8qIE5P WEZFUiAqLwotCi0jaWZkZWYgQU5ZWDI1Ci1pbnQKLXNldHgyNSgpIHsKLSAgICBpZiAoKHkgPSBj bWtleSh4MjV0YWIsbngyNSwiWC4yNSBjYWxsIG9wdGlvbnMiLCIiLHh4c3RyaW5nKSkgPCAwKQot ICAgICAgcmV0dXJuKHkpOwotICAgIHN3aXRjaCAoeSkgewotICAgICAgY2FzZSBYWVVEQVQ6Ci0g ICAgICAgIGlmICgoeiA9IGNta2V5KG9ub2ZmLDIsIlguMjUgY2FsbCB1c2VyIGRhdGEiLCIiLHh4 c3RyaW5nKSkKLSAgICAgICAgICAgIDwgMCkgcmV0dXJuKHopOwotICAgICAgICBpZiAoeiA9PSAw KSB7Ci0gICAgICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApIHJldHVybih6KTsKLSAgICAg ICAgICAgIGN1ZGF0YSA9IDA7ICAgICAgICAgICAgIC8qIGRpc2FibGUgY2FsbCB1c2VyIGRhdGEg Ki8KLSAgICAgICAgICAgIHJldHVybiAoc3VjY2VzcyA9IDEpOwotICAgICAgICB9Ci0gICAgICAg IGlmICgoeCA9IGNtdHh0KCJYLjI1IGNhbGwgdXNlciBkYXRhIHN0cmluZyIsIiIsJnMseHhzdHJp bmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICBpZiAoKGludClzdHJsZW4o cykgPT0gMCkgewotICAgICAgICAgICAgcmV0dXJuICgtMyk7Ci0gICAgICAgIH0gZWxzZSBpZiAo KGludClzdHJsZW4ocykgPiBNQVhDVURBVEEpIHsKLSAgICAgICAgICAgIHByaW50ZigiP1RoZSBs ZW5ndGggbXVzdCBiZSA+IDAgYW5kIDw9ICVkXG4iLE1BWENVREFUQSk7Ci0gICAgICAgICAgICBy ZXR1cm4oLTIpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0 dXJuKHkpOwotICAgICAgICBja3N0cm5jcHkodWRhdGEscyxNQVhDVURBVEEpOwotICAgICAgICBj dWRhdGEgPSAxOyAgICAgICAgICAgICAgICAgICAgIC8qIFguMjUgY2FsbCB1c2VyIGRhdGEgc3Bl Y2lmaWVkICovCi0gICAgICAgIHJldHVybiAoc3VjY2VzcyA9IDEpOwotICAgICAgY2FzZSBYWUNM T1M6Ci0gICAgICAgIGlmICgoeiA9IGNta2V5KG9ub2ZmLDIsIlguMjUgY2xvc2VkIHVzZXIgZ3Jv dXAgY2FsbCIsIiIseHhzdHJpbmcpKQotICAgICAgICAgICAgPCAwKSByZXR1cm4oeik7Ci0gICAg ICAgIGlmICh6ID09IDApIHsKLSAgICAgICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkgcmV0 dXJuKHopOwotICAgICAgICAgICAgY2xvc2dyID0gLTE7ICAgICAgICAgICAgICAgIC8qIGRpc2Fi bGUgY2xvc2VkIHVzZXIgZ3JvdXAgKi8KLSAgICAgICAgICAgIHJldHVybiAoc3VjY2VzcyA9IDEp OwotICAgICAgICB9Ci0gICAgICAgIGlmICgoeSA9IGNtbnVtKCIwIDw9IGN1ZyBpbmRleCA+PSA5 OSIsIiIsMTAsJngseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHkpOwotICAgICAg ICBpZiAoeCA8IDAgfHwgeCA+IDk5KSB7Ci0gICAgICAgICAgICBwcmludGYoIj9UaGUgY2hvaWNl cyBhcmUgMCA8PSBjdWcgaW5kZXggPj0gOTlcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC0yKTsK LSAgICAgICAgfQotICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSAg ICAgICAgY2xvc2dyID0geDsgICAgICAgICAgICAgICAgICAgICAvKiBjbG9zZWQgdXNlciBncm91 cCBzZWxlY3RlZCAqLwotICAgICAgICByZXR1cm4gKHN1Y2Nlc3MgPSAxKTsKLQotICAgICAgY2Fz ZSBYWVJFVkM6Ci0gICAgICAgIGlmKCh6ID0gY21rZXkob25vZmYsMiwiWC4yNSByZXZlcnNlIGNo YXJnZSBjYWxsIiwiIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeik7Ci0gICAg ICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICByZXZjYWxsID0g ejsKLSAgICAgICAgcmV0dXJuIChzdWNjZXNzID0gMSk7Ci0gICAgfQotfQotCi0jaWZuZGVmIElC TVgyNQotaW50Ci1zZXRwYWRwKCkgewotICAgIGlmICgoeSA9IGNta2V5KHBhZHgzdGFiLG5wYWR4 MywiUEFEIFguMyBwYXJhbWV0ZXIgbmFtZSIsIiIseHhzdHJpbmcpKSA8IDApCi0gICAgICByZXR1 cm4oeSk7Ci0gICAgeCA9IHk7Ci0gICAgc3dpdGNoICh4KSB7Ci0gICAgICBjYXNlIFBBRF9CUkVB S19DSEFSQUNURVI6Ci0gICAgICAgIGlmICgoeSA9IGNtbnVtKCJQQUQgYnJlYWsgY2hhcmFjdGVy IHZhbHVlIiwiIiwxMCwmeix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeSk7Ci0g ICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBicmVhazsK LSAgICAgIGNhc2UgUEFEX0VTQ0FQRToKLSAgICAgICAgaWYgKCh5ID0gY21udW0oIlBBRCBlc2Nh cGUiLCIiLDEwLCZ6LHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgIGlmICh6ICE9 IDAgJiYgeiAhPSAxKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9UaGUgY2hvaWNlcyBhcmUgMCBv ciAxXG4iKTsKLSAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg KCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz ZSBQQURfRUNITzoKLSAgICAgICAgaWYgKCh5ID0gY21udW0oIlBBRCBlY2hvIiwiIiwxMCwmeix4 eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBpZiAoeiAhPSAwICYmIHogIT0gMSkg ewotICAgICAgICAgICAgcHJpbnRmKCI/VGhlIGNob2ljZXMgYXJlIDAgb3IgMVxuIik7Ci0gICAg ICAgICAgICByZXR1cm4oLTIpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoeSA9IGNtY2ZtKCkp IDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgUEFEX0RBVEFfRk9S V0FSRF9DSEFSOgotICAgICAgICBpZiAoKHkgPSBjbW51bSgiUEFEIGRhdGEgZm9yd2FyZCBjaGFy IiwiIiwxMCwmeix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAg IGlmICh6ICE9IDAgJiYgeiAhPSAyKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9UaGUgY2hvaWNl cyBhcmUgMCBvciAyXG4iKTsKLSAgICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgIH0KLSAg ICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgIGJyZWFrOwot ICAgICAgY2FzZSBQQURfREFUQV9GT1JXQVJEX1RJTUVPVVQ6Ci0gICAgICAgIGlmICgoeSA9IGNt bnVtKCJQQUQgZGF0YSBmb3J3YXJkIHRpbWVvdXQiLCIiLDEwLCZ6LHh4c3RyaW5nKSkgPCAwKQot ICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICBpZiAoeiA8IDAgfHwgeiA+IDI1NSkgewot ICAgICAgICAgICAgcHJpbnRmKCI/VGhlIGNob2ljZXMgYXJlIDAgb3IgMSA8PSB0aW1lb3V0IDw9 IDI1NVxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTIpOwotICAgICAgICB9Ci0gICAgICAgIGlm ICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBicmVhazsKLSAgICAgIGNh c2UgUEFEX0ZMT1dfQ09OVFJPTF9CWV9QQUQ6Ci0gICAgICAgIGlmICgoeSA9IGNtbnVtKCJQQUQg cGFkIGZsb3cgY29udHJvbCIsIiIsMTAsJnoseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0 dXJuKHkpOwotICAgICAgICBpZiAoeiAhPSAwICYmIHogIT0gMSkgewotICAgICAgICAgICAgcHJp bnRmKCI/VGhlIGNob2ljZXMgYXJlIDAgb3IgMVxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTIp OwotICAgICAgICB9Ci0gICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwot ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgUEFEX1NVUFBSRVNTSU9OX09GX1NJR05BTFM6Ci0g ICAgICAgIGlmICgoeSA9IGNtbnVtKCJQQUQgc2VydmljZSIsIiIsMTAsJnoseHhzdHJpbmcpKSA8 IDApIHJldHVybih5KTsKLSAgICAgICAgaWYgKHogIT0gMCAmJiB6ICE9IDEpIHsKLSAgICAgICAg ICAgIHByaW50ZigiP1RoZSBjaG9pY2VzIGFyZSAwIG9yIDFcbiIpOwotICAgICAgICAgICAgcmV0 dXJuKC0yKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVy bih5KTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgUEFEX0JSRUFLX0FDVElPTjoKLSAg ICAgICAgaWYgKCh5ID0gY21udW0oIlBBRCBicmVhayBhY3Rpb24iLCIiLDEwLCZ6LHh4c3RyaW5n KSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgIGlmICh6ICE9IDAgJiYgeiAhPSAxICYmIHogIT0g MiAmJiB6ICE9IDUgJiYgeiAhPSA4ICYmIHogIT0gMjEpIHsKLSAgICAgICAgICAgIHByaW50Zigi P1RoZSBjaG9pY2VzIGFyZSAwLCAxLCAyLCA1LCA4IG9yIDIxXG4iKTsKLSAgICAgICAgICAgIHJl dHVybigtMik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1 cm4oeSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFBBRF9TVVBQUkVTU0lPTl9PRl9E QVRBOgotICAgICAgICBpZiAoKHkgPSBjbW51bSgiUEFEIGRhdGEgZGVsaXZlcnkiLCIiLDEwLCZ6 LHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgIGlmICh6ICE9IDAgJiYgeiAhPSAx KSB7Ci0gICAgICAgICAgICBwcmludGYoIj9UaGUgY2hvaWNlcyBhcmUgMCBvciAxXG4iKTsKLSAg ICAgICAgICAgIHJldHVybigtMik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCh5ID0gY21jZm0o KSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFBBRF9QQURE SU5HX0FGVEVSX0NSOgotICAgICAgICBpZiAoKHkgPSBjbW51bSgiUEFEIGNycGFkIiwiIiwxMCwm eix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBpZiAoeiA8IDAgfHwgeiA+IDcp IHsKLSAgICAgICAgICAgIHByaW50ZigiP1RoZSBjaG9pY2VzIGFyZSAwIG9yIDEgPD0gY3JwYWQg PD0gN1xuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTIpOwotICAgICAgICB9Ci0gICAgICAgIGlm ICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBicmVhazsKLQotICAgICAg Y2FzZSBQQURfTElORV9GT0xESU5HOgotICAgICAgICBpZiAoKHkgPSBjbW51bSgiUEFEIGxpbmVm b2xkIiwiIiwxMCwmeix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBpZiAoeiA8 IDAgfHwgeiA+IDI1NSkgewotICAgICAgICAgICAgcHJpbnRmKCI/VGhlIGNob2ljZXMgYXJlIDAg b3IgMSA8PSBsaW5lZm9sZCA8PSAyNTVcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAg ICAgICAgfQotICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKLSAgICAg ICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgUEFEX0xJTkVfU1BFRUQ6Ci0gICAgICAgIGlmICgoeSA9 IGNtbnVtKCJQQUQgYmF1ZHJhdGUiLCIiLDEwLCZ6LHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7 Ci0gICAgICAgIGlmICh6IDwgMCB8fCB6ID4gMTgpIHsKLSAgICAgICAgICAgIHByaW50ZigiP1Ro ZSBjaG9pY2VzIGFyZSAwIDw9IGJhdWRyYXRlIDw9IDE4XG4iKTsKLSAgICAgICAgICAgIHJldHVy bigtMik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4o eSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFBBRF9GTE9XX0NPTlRST0xfQllfVVNF UjoKLSAgICAgICAgaWYgKCh5ID0gY21udW0oIlBBRCB0ZXJtaW5hbCBmbG93IGNvbnRyb2wiLCIi LDEwLCZ6LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuKHkpOwotICAgICAgICBp ZiAoeiAhPSAwICYmIHogIT0gMSkgewotICAgICAgICAgICAgcHJpbnRmKCI/VGhlIGNob2ljZXMg YXJlIDAgb3IgMVxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTIpOwotICAgICAgICB9Ci0gICAg ICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBicmVhazsKLQot ICAgICAgY2FzZSBQQURfTEZfQUZURVJfQ1I6Ci0gICAgICAgIGlmICgoeSA9IGNtbnVtKCJQQUQg Y3JwYWQiLCIiLDEwLCZ6LHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgICAgIGlmICh6 IDwgMCB8fCB6ID09IDMgfHwgeiA+IDcpIHsKLSAgICAgICAgICAgIHByaW50ZigiP1RoZSBjaG9p Y2VzIGFyZSAwLCAxLCAyLCA0LCA1LCA2IG9yIDdcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC0y KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsK LSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgUEFEX1BBRERJTkdfQUZURVJfTEY6Ci0gICAg ICAgIGlmICgoeSA9IGNtbnVtKCJQQUQgbGZwYWQiLCIiLDEwLCZ6LHh4c3RyaW5nKSkgPCAwKSBy ZXR1cm4oeSk7Ci0gICAgICAgIGlmICh6IDwgMCB8fCB6ID4gNykgewotICAgICAgICAgICAgcHJp bnRmKCI/VGhlIGNob2ljZXMgYXJlIDAgb3IgMSA8PSBsZnBhZCA8PSA3XG4iKTsKLSAgICAgICAg ICAgIHJldHVybigtMik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAw KSByZXR1cm4oeSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFBBRF9FRElUSU5HOgot ICAgICAgICBpZiAoKHkgPSBjbW51bSgiUEFEIGVkaXQgY29udHJvbCIsIiIsMTAsJnoseHhzdHJp bmcpKSA8IDApIHJldHVybih5KTsKLSAgICAgICAgaWYgKHogIT0gMCAmJiB6ICE9IDEpIHsKLSAg ICAgICAgICAgIHByaW50ZigiP1RoZSBjaG9pY2VzIGFyZSAwIG9yIDFcbiIpOwotICAgICAgICAg ICAgcmV0dXJuKC0yKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDAp IHJldHVybih5KTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgUEFEX0NIQVJfREVMRVRF X0NIQVI6Ci0gICAgICAgIGlmICgoeSA9IGNtbnVtKCJQQUQgY2hhciBkZWxldGUgY2hhciIsIiIs MTAsJnoseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgIGlm ICh6IDwgMCB8fCB6ID4gMTI3KSB7Ci0gICAgICAgICAgICBwcmludGYoIj9UaGUgY2hvaWNlcyBh cmUgMCBvciAxIDw9IGNoYXJkZWxldGUgPD0gMTI3XG4iKTsKLSAgICAgICAgICAgIHJldHVybigt Mik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7 Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFBBRF9CVUZGRVJfREVMRVRFX0NIQVI6Ci0g ICAgICAgIGlmICgoeSA9IGNtbnVtKCJQQUQgYnVmZmVyIGRlbGV0ZSBjaGFyIiwiIiwxMCwmeix4 eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgaWYgKHogPCAw IHx8IHogPiAxMjcpIHsKLSAgICAgICAgICAgIHByaW50ZigiP1RoZSBjaG9pY2VzIGFyZSAwIG9y IDEgPD0gYnVmZmVyZGVsZXRlIDw9IDEyN1xuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTIpOwot ICAgICAgICB9Ci0gICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotICAg ICAgICBicmVhazsKLQotICAgICAgY2FzZSBQQURfQlVGRkVSX0RJU1BMQVlfQ0hBUjoKLSAgICAg ICAgaWYgKCh5ID0gY21udW0oIlBBRCBkaXNwbGF5IGxpbmUgY2hhciIsIiIsMTAsJnoseHhzdHJp bmcpKSA8IDApCi0gICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgIGlmICh6IDwgMCB8fCB6 ID4gMTI3KSB7Ci0gICAgICAgICAgICBwcmludGYoIj9UaGUgY2hvaWNlcyBhcmUgMCBvciAxIDw9 IGRpc3BsYXlsaW5lIDw9IDEyN1xuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTIpOwotICAgICAg ICB9Ci0gICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBi cmVhazsKLSAgICB9Ci0gICAgcGFkcGFybXNbeF0gPSB6OwotICAgIHJldHVybihzdWNjZXNzID0g MSk7Ci19Ci0jZW5kaWYgLyogSUJNWDI1ICovCi0jZW5kaWYgLyogQU5ZWDI1ICovCi0KLSNpZm5k ZWYgTk9YRkVSCi1pbnQKLXNldGF0KHJtc2ZsZykgaW50IHJtc2ZsZzsgewotICAgIGludCB4eDsK LSAgICBpZiAoKHkgPSBjbWtleShhdHRydGFiLG5hdHIsIkZpbGUgQXR0cmlidXRlIHBhY2tldHMi LCIiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgcmV0dXJuKHkpOwotICAgIGlmICh5ID09IEFUX1hB TEwpIHsgICAgICAgICAgICAgICAgIC8qIEFUVFJJQlVURVMgQUxMIE9OIG9yIEFMTCBPRkYgKi8K LSAgICAgICAgaWYgKCh6ID0gc2V0b24oJnh4KSkgPCAwKSByZXR1cm4oeik7Ci0gICAgICAgIGlm IChybXNmbGcpIHsKLSAgICAgICAgICAgIHByaW50ZigiU29ycnksIGNvbW1hbmQgbm90IGF2YWls YWJsZVxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9IGVsc2UgewotICAg ICAgICAgICAgYXRlbmNpID0geHg7ICAgICAgICAgICAgICAgIC8qIEVuY29kaW5nIGluICovCi0g ICAgICAgICAgICBhdGVuY28gPSB4eDsgICAgICAgICAgICAgICAgLyogRW5jb2Rpbmcgb3V0ICov Ci0gICAgICAgICAgICBhdGRhdGkgPSB4eDsgICAgICAgICAgICAgICAgLyogRGF0ZSBpbiAqLwot ICAgICAgICAgICAgYXRkYXRvID0geHg7ICAgICAgICAgICAgICAgIC8qIERhdGUgb3V0ICovCi0g ICAgICAgICAgICBhdGRpc2kgPSB4eDsgICAgICAgICAgICAgICAgLyogRGlzcG9zaXRpb24gaW4v b3V0ICovCi0gICAgICAgICAgICBhdGRpc28gPSB4eDsKLSAgICAgICAgICAgIGF0bGVuaSA9IHh4 OyAgICAgICAgICAgICAgICAvKiBMZW5ndGggaW4vb3V0IChib3RoIGtpbmRzKSAqLwotICAgICAg ICAgICAgYXRsZW5vID0geHg7Ci0gICAgICAgICAgICBhdGJsa2kgPSB4eDsgICAgICAgICAgICAg ICAgLyogQmxvY2tzaXplIGluL291dCAqLwotICAgICAgICAgICAgYXRibGtvID0geHg7Ci0gICAg ICAgICAgICBhdHR5cGkgPSB4eDsgICAgICAgICAgICAgICAgLyogRmlsZSB0eXBlIGluL291dCAq LwotICAgICAgICAgICAgYXR0eXBvID0geHg7Ci0gICAgICAgICAgICBhdHNpZGkgPSB4eDsgICAg ICAgICAgICAgICAgLyogU3lzdGVtIElEIGluL291dCAqLwotICAgICAgICAgICAgYXRzaWRvID0g eHg7Ci0gICAgICAgICAgICBhdHN5c2kgPSB4eDsgICAgICAgICAgICAgICAgLyogU3lzdGVtLWRl cGVuZGVudCBwYXJhbXMgaW4vb3V0ICovCi0gICAgICAgICAgICBhdHN5c28gPSB4eDsKLSNpZmRl ZiBDS19QRVJNUyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcm90ZWN0aW9uICovCi0gICAg ICAgICAgICBhdGxwcmkgPSB4eDsgICAgICAgICAgICAgICAgLyogTG9jYWwgaW4gKi8KLSAgICAg ICAgICAgIGF0bHBybyA9IHh4OyAgICAgICAgICAgICAgICAvKiBMb2NhbCBvdXQgKi8KLSAgICAg ICAgICAgIGF0Z3ByaSA9IHh4OyAgICAgICAgICAgICAgICAvKiBHZW5lcmljIGluICovCi0gICAg ICAgICAgICBhdGdwcm8gPSB4eDsgICAgICAgICAgICAgICAgLyogR2VuZXJpYyBvdXQgKi8KLSNl bmRpZiAvKiBDS19QRVJNUyAqLwotI2lmZGVmIFNUUkFUVVMKLSAgICAgICAgICAgIGF0ZnJtaSA9 IHh4OyAgICAgICAgICAgICAgICAvKiBGb3JtYXQgaW4vb3V0ICovCi0gICAgICAgICAgICBhdGZy bW8gPSB4eDsKLSAgICAgICAgICAgIGF0Y3JlaSA9IHh4OyAgICAgICAgICAgICAgICAvKiBDcmVh dG9yIGlkIGluL291dCAqLwotICAgICAgICAgICAgYXRjcmVvID0geHg7Ci0gICAgICAgICAgICBh dGFjdGkgPSB4eDsgICAgICAgICAgICAgICAgLyogQWNjb3VudCBpbi9vdXQgKi8KLSAgICAgICAg ICAgIGF0YWN0byA9IHh4OwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSAgICAgICAgfQotICAgICAg ICByZXR1cm4oeik7Ci0gICAgfSBlbHNlIGlmICh5ID09IEFUX0FMTFkgfHwgeSA9PSBBVF9BTExO KSB7IC8qIEFUVFJJQlVURVMgT04gb3IgT0ZGICovCi0gICAgICAgIGlmICgoeCA9IGNtY2ZtKCkp IDwgMCkgcmV0dXJuKHgpOwotICAgICAgICBhdGNhcHIgPSAoeSA9PSBBVF9BTExZKSA/IDEgOiAw OwotICAgICAgICBpZiAocm1zZmxnKSB7Ci0gICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1Mn LCAiMTMyIiwgYXRjYXByID8gIjEiIDogIjAiLCAiIik7Ci0gICAgICAgICAgICByZXR1cm4oKGlu dCkgc3N0YXRlKTsKLSAgICAgICAgfSBlbHNlIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgfQot ICAgIC8qIE90aGVyd2lzZSwgaXQncyBhbiBpbmRpdmlkdWFsIGF0dHJpYnV0ZSB0aGF0IHdhbnRz IHR1cm5pbmcgb2ZmL29uICovCi0KLSAgICBpZiAoKHogPSBjbWtleShvbm9mZiwyLCIiLCIiLHh4 c3RyaW5nKSkgPCAwKSByZXR1cm4oeik7Ci0gICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1 cm4oeCk7Ci0KLS8qIFRoZXJlIGFyZSBiZXR0ZXIgd2F5cyB0byBkbyB0aGlzLi4uICovCi0vKiBU aGUgcmVhbCBwcm9ibGVtIGlzIHRoYXQgd2UncmUgbm90IHNlcGFyYXRpbmcgdGhlIGluIGFuZCBv dXQgY2FzZXMgKi8KLS8qIGFuZCBzbyB3ZSBoYXZlIHRvIGFyYml0cmFyaWx5IHBpY2sgdGhlICJp biIgY2FzZSwgaS5lIHRlbGwgdGhlIHJlbW90ZSAqLwotLyogc2VydmVyIHRvIGlnbm9yZSBpbmNv bWluZyBhdHRyaWJ1dGVzIG9mIHRoZSBzcGVjaWZpZWQgdHlwZSwgcmF0aGVyICovCi0vKiB0aGFu IHRlbGxpbmcgaXQgbm90IHRvIHNlbmQgdGhlbS4gIFRoZSBwcm90b2NvbCBkb2VzIG5vdCAoeWV0 KSBkZWZpbmUgKi8KLS8qIGNvZGVzIGZvciAiaW4tYW5kLW91dC1hdC10aGUtc2FtZS10aW1lIi4g Ki8KLQotICAgIHN3aXRjaCAoeSkgewotI2lmZGVmIENLX1BFUk1TCi0vKiBXZSdyZSBsdW1waW5n IGxvY2FsIGFuZCBnZW5lcmljIHByb3RlY3Rpb24gdG9nZXRoZXIgZm9yIG5vdy4uLiAqLwotICAg ICAgY2FzZSBBVF9MUFJPOgotICAgICAgY2FzZSBBVF9HUFJPOgotICAgICAgICBpZiAocm1zZmxn KSB7Ci0gICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1MnLCAiMTQzIiwgeiA/ICIxIiA6ICIw IiwgIiIpOwotICAgICAgICAgICAgcmV0dXJuKChpbnQpIHNzdGF0ZSk7Ci0gICAgICAgIH0KLSAg ICAgICAgYXRscHJpID0gYXRscHJvID0gYXRncHJpID0gYXRncHJvID0gejsgYnJlYWs7Ci0jZW5k aWYgLyogQ0tfUEVSTVMgKi8KLSAgICAgIGNhc2UgQVRfRElTUDoKLSAgICAgICAgaWYgKHJtc2Zs ZykgewotICAgICAgICAgICAgc3N0YXRlID0gc2V0Z2VuKCdTJywgIjE0MiIsIHogPyAiMSIgOiAi MCIsICIiKTsKLSAgICAgICAgICAgIHJldHVybigoaW50KSBzc3RhdGUpOwotICAgICAgICB9Ci0g ICAgICAgIGF0ZGlzaSA9IGF0ZGlzbyA9IHo7IGJyZWFrOwotICAgICAgY2FzZSBBVF9FTkNPOgot ICAgICAgICBpZiAocm1zZmxnKSB7Ci0gICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1MnLCAi MTQxIiwgeiA/ICIxIiA6ICIwIiwgIiIpOwotICAgICAgICAgICAgcmV0dXJuKChpbnQpIHNzdGF0 ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXRlbmNpID0gYXRlbmNvID0gejsgYnJlYWs7Ci0gICAg ICBjYXNlIEFUX0RBVEU6Ci0gICAgICAgIGlmIChybXNmbGcpIHsKLSAgICAgICAgICAgIHNzdGF0 ZSA9IHNldGdlbignUycsICIxMzUiLCB6ID8gIjEiIDogIjAiLCAiIik7Ci0gICAgICAgICAgICBy ZXR1cm4oKGludCkgc3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBhdGRhdGkgPSBhdGRhdG8g PSB6OyBicmVhazsKLSAgICAgIGNhc2UgQVRfTEVOQjoKLSAgICAgIGNhc2UgQVRfTEVOSzoKLSAg ICAgICAgaWYgKHJtc2ZsZykgewotICAgICAgICAgICAgc3N0YXRlID0gc2V0Z2VuKCdTJywgIjEz MyIsIHogPyAiMSIgOiAiMCIsICIiKTsKLSAgICAgICAgICAgIHJldHVybigoaW50KSBzc3RhdGUp OwotICAgICAgICB9Ci0gICAgICAgIGF0bGVuaSA9IGF0bGVubyA9IHo7IGJyZWFrOwotICAgICAg Y2FzZSBBVF9CTEtTOgotICAgICAgICBpZiAocm1zZmxnKSB7Ci0gICAgICAgICAgICBzc3RhdGUg PSBzZXRnZW4oJ1MnLCAiMTM5IiwgeiA/ICIxIiA6ICIwIiwgIiIpOwotICAgICAgICAgICAgcmV0 dXJuKChpbnQpIHNzdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXRibGtpID0gYXRibGtvID0g ejsgYnJlYWs7Ci0gICAgICBjYXNlIEFUX0ZUWVA6Ci0gICAgICAgIGlmIChybXNmbGcpIHsKLSAg ICAgICAgICAgIHNzdGF0ZSA9IHNldGdlbignUycsICIxMzQiLCB6ID8gIjEiIDogIjAiLCAiIik7 Ci0gICAgICAgICAgICByZXR1cm4oKGludCkgc3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBh dHR5cGkgPSBhdHR5cG8gPSB6OyBicmVhazsKLSNpZmRlZiBTVFJBVFVTCi0gICAgICBjYXNlIEFU X0NSRUE6Ci0gICAgICAgIGlmIChybXNmbGcpIHsKLSAgICAgICAgICAgIHNzdGF0ZSA9IHNldGdl bignUycsICIxMzYiLCB6ID8gIjEiIDogIjAiLCAiIik7Ci0gICAgICAgICAgICByZXR1cm4oKGlu dCkgc3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBhdGNyZWkgPSBhdGNyZW8gPSB6OyBicmVh azsKLSAgICAgIGNhc2UgQVRfQUNDVDoKLSAgICAgICAgaWYgKHJtc2ZsZykgewotICAgICAgICAg ICAgc3N0YXRlID0gc2V0Z2VuKCdTJywgIjEzNyIsIHogPyAiMSIgOiAiMCIsICIiKTsKLSAgICAg ICAgICAgIHJldHVybigoaW50KSBzc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGF0YWN0aSA9 IGF0YWN0byA9IHo7IGJyZWFrOwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSAgICAgIGNhc2UgQVRf U1lTSToKLSAgICAgICAgaWYgKHJtc2ZsZykgewotICAgICAgICAgICAgc3N0YXRlID0gc2V0Z2Vu KCdTJywgIjE0NSIsIHogPyAiMSIgOiAiMCIsICIiKTsKLSAgICAgICAgICAgIHJldHVybigoaW50 KSBzc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGF0c2lkaSA9IGF0c2lkbyA9IHo7IGJyZWFr OwotICAgICAgY2FzZSBBVF9SRUNGOgotICAgICAgICBpZiAocm1zZmxnKSB7Ci0gICAgICAgICAg ICBzc3RhdGUgPSBzZXRnZW4oJ1MnLCAiMTQ2IiwgeiA/ICIxIiA6ICIwIiwgIiIpOwotICAgICAg ICAgICAgcmV0dXJuKChpbnQpIHNzdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXRmcm1pID0g YXRmcm1vID0gejsgYnJlYWs7Ci0gICAgICBjYXNlIEFUX1NZU1A6Ci0gICAgICAgIGlmIChybXNm bGcpIHsKLSAgICAgICAgICAgIHNzdGF0ZSA9IHNldGdlbignUycsICIxNDciLCB6ID8gIjEiIDog IjAiLCAiIik7Ci0gICAgICAgICAgICByZXR1cm4oKGludCkgc3N0YXRlKTsKLSAgICAgICAgfQot ICAgICAgICBhdHN5c2kgPSBhdHN5c28gPSB6OyBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAg ICAgIHByaW50ZigiP05vdCBhdmFpbGFibGVcbiIpOwotICAgICAgICByZXR1cm4oLTIpOwotICAg IH0KLSAgICByZXR1cm4oMSk7Ci19Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYgTk9T UEwKLWludAotc2V0aW5wKCkgewotICAgIGlmICgoeSA9IGNta2V5KGlucHRhYixuaW5wLCIiLCIi LHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7Ci0gICAgc3dpdGNoICh5KSB7Ci0jaWZkZWYgT1My Ci0gICAgICBjYXNlIElOX1BBQzogICAgICAgICAgICAgICAgICAgICAgLyogU0VUIElOUFVUIFBB Q0lORyAqLwotICAgICAgICB6ID0gY21udW0oIm1pbGxpc2Vjb25kcyIsIjAiLDEwLCZ4LHh4c3Ry aW5nKTsKLSAgICAgICAgcmV0dXJuKHNldG51bSgmdHRfaW5wYWNpbmcseCx6LDEwMDApKTsKLSAg ICAgIGNhc2UgSU5fVFJNOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgSU5QVVQgVEVSTUlO QUwgKi8KLSAgICAgICAgcmV0dXJuKHNldG9uKCZpbnRlcm0pKTsKLSNlbmRpZiAvKiBPUzIgKi8K LSAgICAgIGNhc2UgSU5fREVGOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgSU5QVVQgREVG QVVMVC1USU1FT1VUICovCi0gICAgICAgIHogPSBjbW51bSgiUG9zaXRpdmUgbnVtYmVyIiwiIiwx MCwmeCx4eHN0cmluZyk7Ci0gICAgICAgIHJldHVybihzZXRudW0oJmluZGVmLHgseiw5NCkpOwot I2lmZGVmIENLRkxPQVQKLSAgICAgIGNhc2UgSU5fU0NBOiAgICAgICAgICAgICAgICAgICAgICAv KiBTRVQgSU5QVVQgU0NBTEUtRkFDVE9SICovCi0JaWYgKCh4ID0gY21mbGQoIk51bWJlciBzdWNo IGFzIDIgb3IgMC41IiwiMS4wIiwmcywgeHhzdHJpbmcpKSA8IDApCi0JICByZXR1cm4oeCk7Ci0g ICAgICAgIGlmIChpc2Zsb2F0KHMsMCkpIHsJCS8qIEEgZmxvYXRpbmctcG9pbnQgbnVtYmVyPyAq LwotICAgICAgICAgICAgZXh0ZXJuIGNoYXIgKiBpbnBzY2FsZTsKLQkgICAgaW5zY2FsZSA9IGZs b2F0dmFsOwkJLyogWWVzLCBnZXQgaXRzIHZhbHVlICovCi0JICAgIG1ha2VzdHIoJmlucHNjYWxl LHMpOwkvKiBTYXZlIGl0IGFzIFx2KGluc2NhbGUpICovCi0JICAgIHJldHVybihzdWNjZXNzID0g MSk7Ci0JfSBlbHNlIHsKLQkgICAgcmV0dXJuKC0yKTsKLQl9Ci0jZW5kaWYJLyogQ0tGTE9BVCAq LwotICAgICAgY2FzZSBJTl9USU06ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBJTlBVVCBU SU1FT1VULUFDVElPTiAqLwotICAgICAgICBpZiAoKHogPSBjbWtleShpbnRpbXQsMiwiIiwiIix4 eHN0cmluZykpIDwgMCkgcmV0dXJuKHopOwotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDAp IHJldHVybih4KTsKLSAgICAgICAgaW50aW1lW2NtZGx2bF0gPSB6OwotICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDEpOwotICAgICAgY2FzZSBJTl9DQVM6ICAgICAgICAgICAgICAgICAgICAgIC8q IFNFVCBJTlBVVCBDQVNFICovCi0gICAgICAgIGlmICgoeiA9IGNta2V5KGluY2FzdCwyLCIiLCIi LHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeik7Ci0gICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwg MCkgcmV0dXJuKHgpOwotICAgICAgICBpbnBjYXNbY21kbHZsXSA9IHo7Ci0gICAgICAgIHJldHVy bihzdWNjZXNzID0gMSk7Ci0gICAgICBjYXNlIElOX0VDSDogICAgICAgICAgICAgICAgICAgICAg LyogU0VUIElOUFVUIEVDSE8gKi8KLSAgICAgICAgcmV0dXJuKHNldG9uKCZpbmVjaG8pKTsKLSAg ICAgIGNhc2UgSU5fU0lMOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgSU5QVVQgU0lMRU5D RSAqLwotICAgICAgICB6ID0gY21udW0oIlNlY29uZHMgb2YgaW5hY3Rpdml0eSBiZWZvcmUgSU5Q VVQgZmFpbHMiLCIiLDEwLCZ4LAotICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpOwotICAgICAg ICByZXR1cm4oc2V0bnVtKCZpbnNpbGVuY2UseCx6LC0xKSk7Ci0KLSAgICAgIGNhc2UgSU5fQlVG OiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgSU5QVVQgQlVGRkVSLVNJWkUgKi8KLSAgICAg ICAgaWYgKCh6ID0gY21udW0oIk51bWJlciBvZiBieXRlcyBpbiBJTlBVVCBidWZmZXIiLAotICAg ICAgICAgICAgICAgICAgICAgICBja2l0b2EoSU5QQlVGU0laKSwxMCwmeCwgeHhzdHJpbmcpKSA8 IDApCi0gICAgICAgICAgcmV0dXJuKHopOwotICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDAp IHJldHVybih5KTsKLSAgICAgICAgaW5idWZzaXplID0gMDsKLSAgICAgICAgaWYgKGlucGJ1Zikg ewotICAgICAgICAgICAgZnJlZShpbnBidWYpOwotICAgICAgICAgICAgaW5wYnVmID0gTlVMTDsK LSAgICAgICAgICAgIGlucGJwID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIShzID0g KGNoYXIgKiltYWxsb2MoeCArIDEpKSkKLSAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIGlu cGJ1ZiA9IHM7Ci0gICAgICAgIGlucGJwID0gczsKLSAgICAgICAgaW5idWZzaXplID0geDsKLSAg ICAgICAgZm9yICh4ID0gMDsgeCA8PSBpbmJ1ZnNpemU7IHgrKykKLSAgICAgICAgICBpbnBidWZb eF0gPSBOVUw7Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0KLSNpZmRlZiBDS19BVVRP REwKLSAgICAgIGNhc2UgSU5fQURMOiAgICAgICAgICAgICAgICAgICAgICAvKiBBVVRPRE9XTkxP QUQgKi8KLSAgICAgICAgcmV0dXJuKHNldG9uKCZpbmF1dG9kbCkpOwotI2VuZGlmIC8qIENLX0FV VE9ETCAqLwotCi0gICAgICBjYXNlIElOX0NBTjogICAgICAgICAgICAgICAgICAgICAgLyogU0VU IElOUFVUIElOVEVSUlVQVFMgKi8KLSAgICAgICAgcmV0dXJuKHNldG9uKCZpbmludHIpKTsKLSAg ICB9Ci0gICAgcmV0dXJuKDApOwotfQotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZmRlZiBORVRD T05OCi1WT0lECi1uZHJlc2V0KCkgewotI2lmbmRlZiBOT0RJQUwgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFRoaXMgZGVwZW5kcyBvbiBESUFMLi4uICovCi0gICAgaW50IGk9MCwgaj0wOwot ICAgIGlmICghbmRpbml0ZWQpICAgICAgICAgICAgICAgICAgICAgIC8qIERvbid0IGZyZWUgZ2Fy YmFnZS4uLiAqLwotICAgICAgcmV0dXJuOwotICAgIGZvciAoaSA9IDA7IGkgPCBuaGNvdW50OyBp KyspIHsgICAgIC8qIENsZWFuIG91dCBwcmV2aW91cyBsaXN0ICovCi0gICAgICAgIGlmIChuaF9w W2ldKQotICAgICAgICAgIGZyZWUobmhfcFtpXSk7Ci0gICAgICAgIG5oX3BbaV0gPSBOVUxMOwot ICAgICAgICBpZiAobmhfcDJbaV0pCi0gICAgICAgICAgZnJlZShuaF9wMltpXSk7Ci0gICAgICAg IG5oX3AyW2ldID0gTlVMTDsKLSAgICAgICAgZm9yIChqID0gMDsgaiA8IDQ7IGorKykgewotICAg ICAgICAgICAgaWYgKG5oX3B4W2pdW2ldKQotICAgICAgICAgICAgICBmcmVlKG5oX3B4W2pdW2ld KTsKLSAgICAgICAgICAgIG5oX3B4W2pdW2ldID0gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLSNl bmRpZiAvKiBOT0RJQUwgKi8KLX0KLQotVk9JRAotbmRpbml0KCkgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIE5ldCBkaXJlY3RvcnkgcG9pbnRlcnMgKi8KLSNpZm5kZWYgTk9ESUFM ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIGRlcGVuZHMgb24gRElBTC4uLiAqLwot ICAgIGludCBpLCBqOwotICAgIGlmIChuZGluaXRlZCsrKSAgICAgICAgICAgICAgICAgICAgIC8q IERvbid0IGRvIHRoaXMgbW9yZSB0aGFuIG9uY2UuICovCi0gICAgICByZXR1cm47Ci0gICAgZm9y IChpID0gMDsgaSA8IE1BWERESVI7IGkrKykgeyAgICAgLyogSW5pdCBhbGwgcG9pbnRlcnMgdG8g TlVMTCAqLwotICAgICAgICBuZXRkaXJbaV0gPSBOVUxMOwotICAgIH0KLSAgICBmb3IgKGkgPSAw OyBpIDwgTUFYRE5VTVM7IGkrKykgewotICAgICAgICBuaF9wW2ldID0gTlVMTDsKLSAgICAgICAg bmhfcDJbaV0gPSBOVUxMOwotICAgICAgICBmb3IgKGogPSAwOyBqIDwgNDsgaisrKQotICAgICAg ICAgIG5oX3B4W2pdW2ldID0gTlVMTDsKLSAgICB9Ci0jZW5kaWYgLyogTk9ESUFMICovCi19Ci0K LSNpZm5kZWYgTk9ESUFMCi0jaWZkZWYgTkVUQ09OTgotVk9JRCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEdldCBuZXQgZGVmYXVsdHMgZnJvbSBlbnZpcm9ubWVudCAqLwot Z2V0bmV0ZW52KCkgewotICAgIGNoYXIgKnAgPSBOVUxMOwotCi0gICAgbWFrZXN0cigmcCxnZXRl bnYoIktfTkVUX0RJUkVDVE9SWSIpKTsgLyogRGlhbGluZyBkaXJlY3RvcmllcyAqLwotICAgIGlm IChwKSB7Ci0gICAgICAgIGludCBpOwotICAgICAgICB4d29yZHMocCxNQVhERElSLG5ldGRpciww KTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IE1BWERESVI7IGkrKykgeyAvKiBGaWxsIGluIGFu eSBnYXBzLi4uICovCi0gICAgICAgICAgICBpZiAoIW5ldGRpcltpKzFdKQotICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgbmV0ZGlyW2ldID0gbmV0 ZGlyW2krMV07Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJuZXRkaXJbaV0iLG5ldGRpcltpXSxp KTsKLSAgICAgICAgfQotICAgICAgICBubmV0ZGlyID0gaTsKLSAgICB9Ci19Ci0jZW5kaWYgLyog TkVUQ09OTiAqLwotI2VuZGlmIC8qIE5PRElBTCAqLwotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwot bHVuZXQoY2hhciAqcykgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHMgPSBuYW1lIHRvIGxv b2sgdXAgICAqLwotI2Vsc2UKLWx1bmV0KHMpIGNoYXIgKnM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMg Ki8KLS8qIGx1bmV0ICovIHsKLSNpZm5kZWYgTk9ESUFMICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBUaGlzIGRlcGVuZHMgb24gRElBTC4uLiAqLwotICAgIGludCBuLCBuMSwgdCwgZGQgPSAw OwotICAgIGludCBhbWJpZ3VvdXMgPSAwOwotICAgIEZJTEUgKiBmOwotICAgIGNoYXIgKmxpbmUg PSBOVUxMOwotICAgIGV4dGVybiBpbnQgZGlhbGRweTsKLSAgICBpbnQgbmV0ZHB5ID0gZGlhbGRw eTsKLSAgICBjaGFyICppbmZvWzhdOwotCi0gICAgbmhjb3VudCA9IDA7ICAgICAgICAgICAgICAg ICAgICAgICAgLyogU2V0IHRoaXMgYmVmb3JlIHJldHVybmluZyAqLwotCi0gICAgaWYgKCFzIHx8 IG5uZXRkaXIgPCAxKSAgICAgICAgICAgICAgLyogVmFsaWRhdGUgYXJndW1lbnRzICovCi0gICAg ICByZXR1cm4oLTEpOwotCi0gICAgaWYgKGlzZGlnaXQoKnMpIHx8ICpzID09ICcqJyB8fCAqcyA9 PSAnLicpCi0gICAgICByZXR1cm4oMCk7Ci0KLSAgICBpZiAoKG4xID0gKGludCkgc3RybGVuKHMp KSA8IDEpICAgICAvKiBMZW5ndGggb2Ygc3RyaW5nIHRvIGxvb2sgdXAgKi8KLSAgICAgIHJldHVy bigtMSk7Ci0KLSAgICBpZiAoIShsaW5lID0gbWFsbG9jKDEwMjQpKSkgICAgICAgICAvKiBBbGxv Y2F0ZSBpbnB1dCBidWZmZXIgKi8KLSAgICAgIHJldHVybigtMSk7Ci0KLSAgbHVfYWdhaW46Ci0g ICAgZiA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmV0d29yayBkaXJlY3Rv cnkgZmlsZSBkZXNjcmlwdG9yICovCi0gICAgdCA9IG5oY291bnQgPSAwOyAgICAgICAgICAgICAg ICAgICAgLyogTWF0Y2ggY291bnQgKi8KLSAgICBkZCA9IDA7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBEaXJlY3RvcnkgY291bnRlciAqLwotCi0gICAgZGlybGluZSA9IDA7Ci0gICAg d2hpbGUgKDEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2UgbWFrZSBvbmUgcGFzcyAq LwotICAgICAgICBpZiAoIWYpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIERpcmVjdG9yeSBu b3Qgb3BlbiAqLwotICAgICAgICAgICAgaWYgKGRkID49IG5uZXRkaXIpICAgICAgICAgIC8qIE5v IGRpcmVjdG9yaWVzIGxlZnQ/ICovCi0gICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAg ICAgICAgLyogRG9uZS4gKi8KLSAgICAgICAgICAgIGlmICgoZiA9IGZvcGVuKG5ldGRpcltkZF0s InIiKSkgPT0gTlVMTCkgeyAvKiBPcGVuIGl0ICovCi0gICAgICAgICAgICAgICAgcGVycm9yKG5l dGRpcltkZF0pOyAgICAgLyogQ2FuJ3QsIHByaW50IG1lc3NhZ2Ugc2F5aW5nIHdoeSAqLwotICAg ICAgICAgICAgICAgIGRkKys7Ci0gICAgICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAg ICAgLyogQnV0IGdvIG9uIHRvIG5leHQgb25lLiAqLwotICAgICAgICAgICAgfQotICAgICAgICAg ICAgaWYgKG5ldGRweSkKLSAgICAgICAgICAgICAgcHJpbnRmKCJPcGVuaW5nICVzLi4uXG4iLG5l dGRpcltkZF0pOwotICAgICAgICAgICAgZGQrKzsKLSAgICAgICAgfQotICAgICAgICBsaW5lWzBd ID0gTlVMOwotICAgICAgICBpZiAoZ2V0bmN0KGxpbmUsMTAyMyxmLDEpIDwgMCkgeyAvKiBSZWFk IGEgbGluZSAqLwotICAgICAgICAgICAgaWYgKGYpIHsgICAgICAgICAgICAgICAgICAgIC8qIGYg Y2FuIGJlIGNsb2JiZXJlZCEgKi8KLSAgICAgICAgICAgICAgICBmY2xvc2UoZik7ICAgICAgICAg ICAgICAvKiBDbG9zZSB0aGUgZmlsZSAqLwotICAgICAgICAgICAgICAgIGYgPSBOVUxMOyAgICAg ICAgICAgICAgIC8qIEluZGljYXRlIG5leHQgb25lIG5lZWRzIG9wZW5pbmcgKi8KLSAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbGlu ZVswXSkgICAgICAgICAgICAgICAgICAgLyogRW1wdHkgbGluZSAqLwotICAgICAgICAgIGNvbnRp bnVlOwotCi0gICAgICAgIHh3b3JkcyhsaW5lLDcsaW5mbywwKTsgICAgICAgICAgLyogUGFyc2Ug aXQgKi8KLQotICAgICAgICBpZiAoIWluZm9bMV0gfHwgIWluZm9bMl0gfHwgIWluZm9bM10pIC8q IFJlcXVpcmVkIGZpZWxkcyAqLwotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoKmlu Zm9bMV0gPT0gJzsnKSAgICAgICAgICAgIC8qIEZ1bGwtbGluZSBjb21tZW50ICovCi0gICAgICAg ICAgY29udGludWU7Ci0gICAgICAgIGlmICgobiA9IChpbnQpIHN0cmxlbihpbmZvWzFdKSkgPCAx KSAvKiBMZW5ndGggb2YgbmFtZS10YWcgKi8KLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg aWYgKG4gPCBuMSkgICAgICAgICAgICAgICAgICAgICAvKiBTZWFyY2ggbmFtZSBpcyBsb25nZXIg Ki8KLSAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgICAgICAgICAvKiBDYW4ndCBwb3Nz aWJseSBtYXRjaCAqLwotICAgICAgICBpZiAoYW1iaWd1b3VzICYmIG4gIT0gbjEpCi0gICAgICAg ICAgY29udGludWU7Ci0gICAgICAgIGlmIChja3N0cmNtcChzLGluZm9bMV0sbjEsMCkpICAgLyog Q29tcGFyZSB1c2luZyBsZW5ndGggb2YgKi8KLSAgICAgICAgICBjb250aW51ZTsgICAgICAgICAg ICAgICAgICAgICAvKiBzZWFyY2ggc3RyaW5nIHMuICovCi0KLSAgICAgICAgLyogSGF2ZSBhIG1h dGNoICovCi0KLSAgICAgICAgbWFrZXN0cigmKG5oX3Bbbmhjb3VudF0pLCBpbmZvWzNdKTsgICAg LyogYWRkcmVzcyAqLwotICAgICAgICBtYWtlc3RyKCYobmhfcDJbbmhjb3VudF0pLGluZm9bMl0p OyAgICAvKiBuZXQgdHlwZSAqLwotICAgICAgICBtYWtlc3RyKCYobmhfcHhbMF1bbmhjb3VudF0p LGluZm9bNF0pOyAvKiBuZXQtc3BlY2lmaWMgc3R1ZmYuLi4gKi8KLSAgICAgICAgbWFrZXN0cigm KG5oX3B4WzFdW25oY291bnRdKSxpbmZvWzVdKTsKLSAgICAgICAgbWFrZXN0cigmKG5oX3B4WzJd W25oY291bnRdKSxpbmZvWzZdKTsKLSAgICAgICAgbWFrZXN0cigmKG5oX3B4WzNdW25oY291bnRd KSxpbmZvWzddKTsKLQotICAgICAgICBuaGNvdW50Kys7ICAgICAgICAgICAgICAgICAgICAgIC8q IENvdW50IHRoaXMgbWF0Y2ggKi8KLSAgICAgICAgaWYgKG5oY291bnQgPiBNQVhETlVNUykgeyAg ICAgICAvKiBXYXRjaCBvdXQgZm9yIHRvbyBtYW55ICovCi0gICAgICAgICAgICBwcmludGYoIldh cm5pbmc6ICVkIG1hdGNoZXMgZm91bmQsICVkIG1heFxuIiwKLSAgICAgICAgICAgICAgICAgICBu aGNvdW50LAotICAgICAgICAgICAgICAgICAgIE1BWEROVU1TCi0gICAgICAgICAgICAgICAgICAg KTsKLSAgICAgICAgICAgIG5oY291bnQgPSBNQVhETlVNUzsKLSAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICB9Ci0gICAgICAgIGlmIChuaGNvdW50ID09IDEpIHsgICAgICAgICAgICAgLyogRmly c3Qgb25lIC0gc2F2ZSBlbnRyeSBuYW1lICovCi0gICAgICAgICAgICBpZiAobl9uYW1lKSB7ICAg ICAgICAgICAgICAgLyogRnJlZSB0aGUgb25lIGZyb20gYmVmb3JlIGlmIGFueSAqLwotICAgICAg ICAgICAgICAgIGZyZWUobl9uYW1lKTsKLSAgICAgICAgICAgICAgICBuX25hbWUgPSBOVUxMOwot ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCEobl9uYW1lID0gKGNoYXIgKiltYWxsb2Mo biArIDEpKSkgeyAvKiBBbGxvY2F0ZSBuZXcgc3RvcmFnZSAqLwotICAgICAgICAgICAgICAgIHBy aW50ZigiP21lbW9yeSBhbGxvY2F0aW9uIGVycm9yIC0gbHVuZXQ6M1xuIik7Ci0gICAgICAgICAg ICAgICAgaWYgKGxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgZnJlZShsaW5lKTsKLSAgICAg ICAgICAgICAgICAgICAgbGluZSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgIG5oY291bnQgPSAwOwotICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgICAgICB0ID0gbjsgICAgICAgICAgICAgICAgICAgICAgLyogUmVtZW1i ZXIgaXRzIGxlbmd0aCAqLwotICAgICAgICAgICAgc3RyY3B5KG5fbmFtZSxpbmZvWzFdKTsgICAg IC8qIHNhZmUgKi8KLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBT ZWNvbmQgb3Igc3Vic2VxdWVudCBvbmUgKi8KLSAgICAgICAgICAgIGlmICgoaW50KSBzdHJsZW4o aW5mb1sxXSkgPT0gdCkgLyogTGVuZ3RocyBjb21wYXJlICovCi0gICAgICAgICAgICAgIGlmICgh Y2tzdHJjbXAobl9uYW1lLGluZm9bMV0sdCwwKSkgLyogQ2FzZWxlc3MgY29tcGFyZSBPSyAqLwot ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAvKiBOYW1lIGdpdmVuIGJ5 IHVzZXIgbWF0Y2hlcyBlbnRyaWVzIHdpdGggZGlmZmVyZW50IG5hbWVzICovCi0KLSAgICAgICAg ICAgIGlmIChhbWJpZ3VvdXMpICAgICAgICAgICAgICAvKiBCZWVuIGhlcmUgYmVmb3JlICovCi0g ICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBhbWJpZ3VvdXMgPSAxOyAgICAgICAg ICAgICAgLyogTm93IGFuIGV4YWN0IG1hdGNoIGlzIHJlcXVpcmVkICovCi0gICAgICAgICAgICBu ZHJlc2V0KCk7ICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgb3V0IHByZXZpb3VzIGxpc3QgKi8K LSAgICAgICAgICAgIGdvdG8gbHVfYWdhaW47ICAgICAgICAgICAgICAvKiBEbyBpdCBhbGwgb3Zl ciBhZ2Fpbi4gKi8KLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAobGluZSkgewotICAgICAgICBm cmVlKGxpbmUpOwotICAgICAgICBsaW5lID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKG5oY291bnQg PT0gMCAmJiBhbWJpZ3VvdXMpCi0gICAgICBwcmludGYoIj9cIiVzXCIgLSBhbWJpZ3VvdXMgaW4g bmV0d29yayBkaXJlY3RvcnlcbiIscyk7Ci0jZWxzZQotICAgIG5oY291bnQgPSAwOwotI2VuZGlm IC8qIE5PRElBTCAqLwotICAgIHJldHVybihuaGNvdW50KTsKLX0KLSNlbmRpZiAvKiBORVRDT05O ICovCi0KLSNpZm5kZWYgTk9MT0NBTAotLyogIEMgTCBTIEMgTyBOIE4gWCAgLS0gIENsb3NlIGNv bm5lY3Rpb24gICovCi0KLWludAotY2xzY29ubngoYXNrKSBpbnQgYXNrOyB7Ci0gICAgaW50IHgs IHJjID0gMDsKLSNpZmRlZiBORVdGVFAKLSAgICBleHRlcm4gaW50IGZ0cGdldCwgZnRwaXNvcGVu KCk7Ci0gICAgaWYgKChmdHBnZXQgPT0gMSkgfHwgKChmdHBnZXQgPT0gMikgJiYgIWxvY2FsICYm IGZ0cGlzb3BlbigpKSkKLSAgICAgIHJldHVybihzdWNjZXNzID0gZnRwYnllKCkpOwotI2VuZGlm IC8qIE5FV0ZUUCAqLwotICAgIGRlYnVnKEYxMDEsImNsc2Nvbm54IGxvY2FsIiwiIixsb2NhbCk7 Ci0gICAgaWYgKGxvY2FsKSB7Ci0gICAgICAgIHggPSBhc2sgPyBodXBvaygxKSA6IDE7ICAgICAg ICAgLyogTWFrZSBzdXJlIGl0J3MgT0sgdG8gY2xvc2UgKi8KLSAgICAgICAgaWYgKCF4KSB7Ci0g ICAgICAgICAgICByYyA9IC0xOwotICAgICAgICAgICAgZGVidWcoRjEwMSwiY2xzY29ubnggaHVw b2sgc2F5cyBubyIsIiIscmMpOwotICAgICAgICAgICAgcmV0dXJuKHJjKTsKLSAgICAgICAgfQot ICAgICAgICB0dGZsdWkoKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIGF3YXkgYnVm ZmVyZWQgdXAganVuayAqLwotI2lmbmRlZiBOT0RJQUwKLSNpZmRlZiBPUzJPTkxZCi0vKiBEb24n dCBoYW5ndXAgYSBsaW5lIHRoYXQgaXMgc2hhcmVkIHdpdGggdGhlIFNMSVAgb3IgUFBQIGRyaXZl ciAqLwotICAgICAgICBpZiAoIXR0c2xpcCAmJiAhdHRwcHApCi0jZW5kaWYgLyogT1MyT05MWSAq LwotICAgICAgICAgIG1kbWh1cCgpOwotI2VuZGlmIC8qIE5PRElBTCAqLwotICAgICAgICBpZiAo bmV0d29yayAmJiBtc2dmbGcpCi0gICAgICAgICAgcHJpbnRmKCIgQ2xvc2luZyBjb25uZWN0aW9u XG4iKTsKLSAgICAgICAgdHRjbG9zKDApOyAgICAgICAgICAgICAgICAgICAgICAvKiBDbG9zZSBv bGQgY29ubmVjdGlvbiwgaWYgYW55ICovCi0gICAgICAgIHJjID0gMTsKLSAgICAgICAgewotICAg ICAgICAgICAgZXh0ZXJuIGludCB3YXNjbG9zZWQsIHdoeWNsb3NlZDsKLSAgICAgICAgICAgIGlm ICh3YXNjbG9zZWQpIHsKLSAgICAgICAgICAgICAgICB3aHljbG9zZWQgPSBXQ19DTE9TOwotI2lm bmRlZiBOT1NQTAotICAgICAgICAgICAgICAgIGlmIChubWFjKSB7ICAgICAgICAgICAgIC8qIEFu eSBtYWNyb3MgZGVmaW5lZD8gKi8KLSAgICAgICAgICAgICAgICAgICAgaW50IGs7ICAgICAgICAg ICAgICAvKiBZZXMgKi8KLSAgICAgICAgICAgICAgICAgICAgLyogcHJpbnRmKCJPTl9DTE9TRSBD TFNDT05OWFxuIik7ICovCi0gICAgICAgICAgICAgICAgICAgIHdhc2Nsb3NlZCA9IDA7Ci0gICAg ICAgICAgICAgICAgICAgIGsgPSBtbG9vayhtYWN0YWIsIm9uX2Nsb3NlIixubWFjKTsgIC8qIExv b2sgdGhpcyB1cCAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoayA+PSAwKSB7ICAgICAgICAg ICAgICAgICAgICAgICAvKiBJZiBmb3VuZCwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlm IChkb2RvKGssY2tpdG9hKHdoeWNsb3NlZCksMCkgPiAtMSkgLyogc2V0IGl0IHVwLCAqLwotICAg ICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIoMSk7ICAgICAgICAgICAgICAgICAgICAvKiBh bmQgZXhlY3V0ZSBpdCAqLwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg fQotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgICAgICAgICAgICAgd2h5Y2xvc2VkID0gV0NfUkVN TzsKLSAgICAgICAgICAgICAgICB3YXNjbG9zZWQgPSAwOwotICAgICAgICAgICAgfQotICAgICAg ICB9Ci0gICAgfQotI2lmZGVmIFZNUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9y IG1heWJlICNpZm5kZWYgVU5JWD8gKi8KLSAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBOZWVkIHRvIGRvIHRoaXMgaW4gVk1TIHRvICovCi0gICAgICAgIHR0Y2xvcygw KTsgICAgICAgICAgICAgICAgICAgICAgLyogZnJlZSB0aGUgdHR5IGNoYW5uZWwgbnVtYmVyICov Ci0gICAgICAgIHJjID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2J0YWluZWQgaW4g dHRvcGVuKCkgb3IgZWxzZSAqLwotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHN1YnNlcXVlbnQgdHRvcGVuJ3Mgd29uJ3Qgd29yayAqLwotI2VuZGlmIC8qIFZNUyAq LwotICAgIGRvbG9nZW5kKCk7Ci0gICAgaGF2ZWxpbmUgPSAwOwotICAgIGlmIChtZG10eXAgPCAw KSB7ICAgICAgICAgICAgICAgICAgIC8qIFN3aXRjaGluZyBmcm9tIG5ldCB0byBhc3luYz8gKi8K LSAgICAgICAgaWYgKG1kbXNhdiA+IC0xKSAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIG1vZGVt IHR5cGUgZnJvbSBsYXN0ICovCi0gICAgICAgICAgbWRtdHlwID0gbWRtc2F2OyAgICAgICAgICAg ICAgLyogU0VUIE1PREVNIGNvbW1hbmQsIGlmIGFueS4gKi8KLSAgICAgICAgZWxzZQotICAgICAg ICAgIG1kbXR5cCA9IDA7Ci0gICAgICAgIG1kbXNhdiA9IC0xOwotICAgIH0KLSAgICBpZiAobmV0 d29yaykKLSAgICAgIG5ldHdvcmsgPSAwOwotI2lmZGVmIE5FVENPTk4KLSAgICBpZiAob2xkcGxl eCA+IC0xKSB7ICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIHByZXZpb3VzIGR1cGxleCBzZXR0 aW5nLiAqLwotICAgICAgICBkdXBsZXggPSBvbGRwbGV4OwotICAgICAgICBvbGRwbGV4ID0gLTE7 Ci0gICAgfQotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSNpZm5kZWYgTUFDCi0gICAgY2tzdHJuY3B5 KHR0bmFtZSxkZnR0eSxUVE5BTUxFTik7ICAgLyogUmVzdG9yZSBkZWZhdWx0IGNvbW11bmljYXRp b24gKi8KLSNlbmRpZiAvKiBNQUMgKi8KLSAgICBsb2NhbCA9IGRmbG9jOyAgICAgICAgICAgICAg ICAgICAgICAvKiBkZXZpY2UgYW5kIGxvY2FsL3JlbW90ZSBzdGF0dXMgKi8KLSAgICBpZiAobG9j YWwpIHsKLSAgICAgICAgY3h0eXBlID0gQ1hUX0RJUkVDVDsgICAgICAgICAgICAvKiBTb21ldGhp bmcgcmVhc29uYWJsZSAqLwotICAgICAgICBzcGVlZCA9IHR0Z3NwZCgpOyAgICAgICAgICAgICAg IC8qIEdldCB0aGUgY3VycmVudCBzcGVlZCAqLwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGN4dHlw ZSA9IENYVF9SRU1PVEU7Ci0gICAgICAgIHNwZWVkID0gLTFMOwotICAgIH0KLSNpZm5kZWYgTk9Y RkVSCi0gICAgaWYgKHhyZWxpYWJsZSA+IC0xICYmICFzZXRyZWxpYWJsZSkgewotICAgICAgICBy ZWxpYWJsZSA9IHhyZWxpYWJsZTsKLSAgICAgICAgZGVidWcoRjEwMSwiY2xzY29ubnggcmVsaWFi bGUgQSIsIiIscmVsaWFibGUpOwotICAgIH0gZWxzZSBpZiAoIXNldHJlbGlhYmxlKSB7Ci0gICAg ICAgIHJlbGlhYmxlID0gU0VUX0FVVE87Ci0gICAgICAgIGRlYnVnKEYxMDEsImNsc2Nvbm54IHJl bGlhYmxlIEIiLCIiLHJlbGlhYmxlKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9YRkVSICovCi0gICAg c2V0ZmxvdygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV2ZXJ0IGZsb3cgY29udHJv bCAqLwotICAgIHJldHVybihyYyk7Ci19Ci0KLWludAotY2xza2Nvbm54KHgpIGludCB4OyB7ICAg ICAgICAgICAgICAgICAgIC8qIENsb3NlIEtlcm1pdCBjb25uZWN0aW9uIG9ubHkgKi8KLSAgICBp bnQgdCwgcmM7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAobm90IEZUUCkgKi8KLSNpZmRl ZiBORVdGVFAKLSAgICBleHRlcm4gaW50IGZ0cGdldDsKLSAgICB0ID0gZnRwZ2V0OwotICAgIGZ0 cGdldCA9IDA7Ci0jZW5kaWYgLyogTkVXRlRQICovCi0gICAgcmMgPSBjbHNjb25ueCh4KTsKLSNp ZmRlZiBORVdGVFAKLSAgICBmdHBnZXQgPSB0OwotI2VuZGlmIC8qIE5FV0ZUUCAqLwotICAgIHJl dHVybihyYyk7Ci19Ci0KLS8qIE1heSAyMDAyOiBzZXRsaW4oKSBkZWNvbXBvc2l0aW9uIHN0YXJ0 cyBoZXJlIC4uLiAqLwotCi0jaWZkZWYgT1MyCi0jZGVmaW5lIFNSVkJVRlNJWiBQSVBFTkFNTAot I2Vsc2UgLyogT1MyICovCi0jZGVmaW5lIFNSVkJVRlNJWiA2MwotI2VuZGlmIC8qIE9TMiAqLwot I2RlZmluZSBIT1NUTkFNTEVOIDE1KjY1Ci0KLWludCBuZXRzYXZlID0gLTE7Ci1zdGF0aWMgY2hh ciAqIHRtcHN0cmluZyA9IE5VTEw7Ci1zdGF0aWMgY2hhciAqIHRtcHVzcmlkID0gTlVMTDsKLQot I2lmZGVmIFNTSENNRAotY2hhciAqIHNzaGNtZCA9IE5VTEw7Ci1jaGFyICogZGVmc3NoY21kID0g InNzaCAtZSBub25lIjsKLSNlbHNlCi0jaWZkZWYgU1NIQlVJTFRJTgotY2hhciAqIHNzaHJjbWQg PSBOVUxMOwotY2hhciAqIHNzaHRtcGNtZCA9IE5VTEw7Ci0jZW5kaWYgLyogU1NIQlVJTFRJTiAq LwotI2VuZGlmIC8qIFNTSENNRCAqLwotCi0vKiBjIHggXyBmIGEgaSBsICAtLSAgQ29tbW9uIGVy cm9yIGV4aXQgcm91dGluZSBmb3IgY3hfbmV0LCBjeF9saW5lICovCi0KLWludAotY3hfZmFpbCht c2csIHRleHQpIGludCBtc2c7IGNoYXIgKiB0ZXh0OyB7Ci0gICAgbWFrZXN0cigmc2xtc2csdGV4 dCk7CQkvKiBGb3IgdGhlIHJlY29yZCAob3IgR1VJKSAqLwotICAgIGlmIChtc2cpCQkJCS8qIE5v dCBHVUksIG5vdCBxdWlldCwgZXRjICovCi0gICAgICBwcmludGYoIj8lc1xuIix0ZXh0KTsJCS8q IFByaW50IGVycm9yIG1lc3NhZ2UgKi8KLSAgICBzbHJlc3RvcigpOwkJCQkvKiBSZXN0b3JlIExJ TkUvSE9TVCB0byBrbm93biBzdGF0ZSAqLwotICAgIHJldHVybihtc2cgPyAtOSA6IChzdWNjZXNz ID0gMCkpOwkvKiBSZXR1cm4gYXBwcm9wcmlhdGUgY29kZSAqLwotfQotCi0jaWZkZWYgTkVUQ09O TgotLyogYyB4IF8gbiBlIHQgIC0tICBNYWtlIGEgbmV0d29yayBjb25uZWN0aW9uICovCi0KLS8q Ci0gIENhbGwgd2l0aDoKLSAgICBuZXQgICAgICA9IG5ldHdvcmsgdHlwZQotICAgIHByb3RvY29s ID0gcHJvdG9jb2wgdHlwZQotICAgIGhvc3QgICAgID0gc3RyaW5nIHBvaW50ZXIgdG8gaG9zdCBu YW1lLgotICAgIHN2YyAgICAgID0gc3RyaW5nIHBvaW50ZXIgdG8gc2VydmljZSBvciBwb3J0IG9u IGhvc3QuCi0gICAgdXNlcm5hbWUgPSB1c2VybmFtZSBmb3IgY29ubmVjdGlvbgotICAgIHBhc3N3 b3JkID0gcGFzc3dvcmQgZm9yIGNvbm5lY3Rpb24KLSAgICBjb21tYW5kICA9IGNvbW1hbmQgdG8g ZXhlY3V0ZQotICAgIHBhcmFtMSAgID0gVGVsbmV0OiBBdXRoZW50aWNhdGlvbiB0eXBlCi0gICAg ICAgICAgICAgICBTU0g6ICAgIFZlcnNpb24KLSAgICBwYXJhbTIgICA9IFRlbG5ldDogRW5jcnlw dGlvbiB0eXBlCi0gICAgICAgICAgICAgICBTU0g6ICAgIENvbW1hbmQgYXMgU3Vic3lzdGVtCi0g ICAgcGFyYW0zICAgPSBUZWxuZXQ6IDEgdG8gd2FpdCBmb3IgbmVnb3RpYXRpb25zLCAwIG90aGVy d2lzZQotICAgICAgICAgICAgICAgU1NIOiAgICBYMTEgRm9yd2FyZGluZwotICAgIGN4ICAgICAg ID0gMSB0byBhdXRvbWF0aWNhbGx5IGVudGVyIENvbm5lY3QgbW9kZSwgMCBvdGhlcndpc2UuCi0g ICAgc3ggICAgICAgPSAxIHRvIGF1dG9tYXRpY2FsbHkgZW50ZXIgU2VydmVyIG1vZGUsIDAgb3Ro ZXJ3aXNlLgotICAgIGZsYWcgICAgID0gaWYgbm8gaG9zdCBuYW1lIGdpdmVuLCAxID0gY2xvc2Ug Y3VycmVudCBjb25uZWN0aW9uLCAwID0gcmVzdW1lCi0gICAgZ3VpICAgICAgPSAxIGlmIGNhbGxl ZCBmcm9tIEdVSSBkaWFsb2csIDAgb3RoZXJ3aXNlLgotICBSZXR1cm5zOgotICAgIDEgb24gc3Vj Y2VzcwotICAgIDAgb24gZmFpbHVyZSBhbmQgbm8gbWVzc2FnZSBwcmludGVkLCBzbG1zZyBzZXQg dG8gZmFpbHVyZSBtZXNzYWdlLgotICAgLTkgb24gZmFpbHVyZSBhbmQgbWVzc2FnZSBwcmludGVk LCBkaXR0by4KLSovCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotY3hfbmV0KCBpbnQgbmV0LCBpbnQg cHJvdG9jb2wsIGNoYXIgKiB4aG9zdCwgY2hhciAqIHN2YywgCi0gICAgICAgIGNoYXIgKiB1c2Vy bmFtZSwgY2hhciAqIHBhc3N3b3JkLCBjaGFyICogY29tbWFuZCwKLSAgICAgICAgaW50IHBhcmFt MSwgaW50IHBhcmFtMiwgaW50IHBhcmFtMywgaW50IGN4LCBpbnQgc3gsIGludCBmbGFnLCBpbnQg Z3VpKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLWN4X25ldChuZXQsIHByb3RvY29sLCB4aG9zdCwg c3ZjLAotICAgICAgIHVzZXJuYW1lLCBwYXNzd29yZCwgY29tbWFuZCwKLSAgICAgICBwYXJhbTEs IHBhcmFtMiwgcGFyYW0zLCBjeCwgc3gsIGZsYWcsIGd1aSkKLSAgICBjaGFyICogeGhvc3QsICog c3ZjLCAqIHVzZXJuYW1lLCAqcGFzc3dvcmQsICpjb21tYW5kOyAKLSAgICBpbnQgbmV0LCBwcm90 b2NvbCwgY3gsIHN4LCBmbGFnLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zLCBndWk7IAotI2VuZGlm IC8qIENLX0FOU0lDICovCi0vKiBjeF9uZXQgKi8gewotCi0gICAgaW50IGksIG4sIHgsIG1zZzsK LSAgICBpbnQgX2xvY2FsID0gLTE7Ci0KLSAgICBleHRlcm4gY2hhciBwd2J1ZltdLCAqIGdfcHN3 ZDsKLSAgICBleHRlcm4gaW50IHB3ZmxnLCBwd2NyeXB0LCBnX3BmbGcsIGdfcGNwdCwgbm9sb2Nh bDsKLQotICAgIGNoYXIgc3J2YnVmW1NSVkJVRlNJWisxXTsJCS8qIFNlcnZpY2UgKi8KLSAgICBj aGFyIGhvc3RidWZbSE9TVE5BTUxFTl07CQkvKiBIb3N0IGJ1ZmZlciB0byBtYW5pcHVsYXRlICov Ci0gICAgY2hhciBob3N0bmFtZVtIT1NUTkFNTEVOXTsJCS8qIENvcHkgb2YgaG9zdCBwYXJhbWV0 ZXIgKi8KLSAgICBjaGFyICogaG9zdCA9IGhvc3RidWY7CQkvKiBQb2ludGVyIHRvIGNvcHkgb2Yg aG9zdCBwYXJhbSAqLwotCi0gICAgaWYgKCF4aG9zdCkgeGhvc3QgPSAiIjsJCS8qIFdhdGNoIG91 dCBmb3IgbnVsbCBwb2ludGVycyAqLwotICAgIGlmICghc3ZjKSBzdmMgPSAiIjsKLSAgICBja3N0 cm5jcHkoaG9zdCx4aG9zdCxIT1NUTkFNTEVOKTsJLyogQXZvaWQgYnVmZmVyIGNvbmZ1c2lvbiAq LwotCi0gICAgZGVidWcoRjExMCwiY3hfbmV0IGhvc3QiLGhvc3QsMCk7Ci0gICAgZGVidWcoRjEx MSwiY3hfbmV0IHNlcnZpY2UiLHN2YyxTUlZCVUZTSVopOwotICAgIGRlYnVnKEYxMDEsImN4X25l dCBuZXR3b3JrIHR5cGUiLCIiLG5ldCk7Ci0KLSAgICBtc2cgPSAoZ3VpID09IDApICYmIG1zZ2Zs ZzsJCS8qIFdoZXRoZXIgdG8gcHJpbnQgbWVzc2FnZXMgKi8KLQotI2lmbmRlZiBOT0RJQUwKLSAg ICBkZWJ1ZyhGMTAxLCJjeF9uZXQgbm5ldGRpciIsIiIsbm5ldGRpcik7Ci0gICAgeCA9IDA7CQkJ CS8qIExvb2sgdXAgaW4gbmV0d29yayBkaXJlY3RvcnkgKi8KLSAgICBpZiAoKmhvc3QgPT0gJz0n KSB7CQkJLyogSWYgbnVtYmVyIHN0YXJ0cyB3aXRoID0gc2lnbiAqLwotCWhvc3QrKzsJCQkJLyog c3RyaXAgaXQgKi8KLQl3aGlsZSAoKmhvc3QgPT0gU1ApIGhvc3QrKzsJLyogYW5kIGFueSBsZWFk aW5nIHNwYWNlcyAqLwotCWRlYnVnKEYxMTAsImN4X25ldCBob3N0IDIiLGhvc3QsMCk7Ci0Jbmhj b3VudCA9IDA7Ci0gICAgfSBlbHNlIGlmICgqaG9zdCkgewkJCS8qIFdlIHdhbnQgdG8gbG9vayBp dCB1cC4gKi8KLQlpZiAobm5ldGRpciA+IDApCQkvKiBJZiB0aGVyZSBpcyBhIGRpcmVjdG9yeS4u LiAqLwotCSAgeCA9IGx1bmV0KGhvc3QpOwkJLyogKHNldHMgbmhjb3VudCkgKi8KLQllbHNlCQkJ CS8qIG90aGVyd2lzZSAqLwotCSAgbmhjb3VudCA9IDA7CQkJLyogd2UgZGlkbid0IGZpbmQgYW55 IHRoZXJlICovCi0JaWYgKHggPCAwKQkJCS8qIEludGVybmFsIGVycm9yPyAqLwotCSAgcmV0dXJu KGN4X2ZhaWwobXNnLCJOZXR3b3JrIGRpcmVjdG9yeSBsb29rdXAgZXJyb3IiKSk7Ci0JZGVidWco RjExMSwiY3hfbmV0IGx1bmV0IG5oY291bnQiLGhvc3Qsbmhjb3VudCk7Ci0gICAgfQotI2VuZGlm IC8qIE5PRElBTCAqLwotCi0gICAgLyogTmV3IGNvbm5lY3Rpb24gd2FudGVkLiAgTWFrZSBhIGNv cHkgb2YgdGhlIGhvc3QgbmFtZS9hZGRyZXNzLi4uICovCi0KLSAgICBpZiAoY2xza2Nvbm54KDEp IDwgMCkJCS8qIENsb3NlIGN1cnJlbnQgS2VybWl0IGNvbm5lY3Rpb24gKi8KLSAgICAgIHJldHVy bihjeF9mYWlsKG1zZywiRXJyb3IgY2xvc2luZyBwcmV2aW91cyBjb25uZWN0aW9uIikpOwotCi0g ICAgaWYgKCpob3N0KSB7CQkJLyogVGhleSBnYXZlIGEgaG9zdG5hbWUgKi8KLQlfbG9jYWwgPSAx OwkJCS8qIE5ldHdvcmsgY29ubmVjdGlvbiBhbHdheXMgbG9jYWwgKi8KLQlpZiAobWRtc2F2IDwg MCkKLQkgIG1kbXNhdiA9IG1kbXR5cDsJCS8qIFJlbWVtYmVyIG9sZCBtb2RlbSB0eXBlICovCi0J bWRtdHlwID0gLW5ldDsJCQkvKiBTcGVjaWFsIGNvZGUgZm9yIG5ldHdvcmsgKi8KLSAgICB9IGVs c2UgewkJCQkvKiBUaGV5IGp1c3Qgc2FpZCAic2V0IGhvc3QiICovCi0JaG9zdCA9IGRmdHR5OwkJ CS8qIFNvIGdvIGJhY2sgdG8gbm9ybWFsICovCi0JX2xvY2FsID0gZGZsb2M7CQkJLyogZGVmYXVs dCB0dHksIGxvY2F0aW9uLCAqLwotCWlmIChmbGFnKSB7CQkJLyogQ2xvc2UgY3VycmVudCBjb25u ZWN0aW9uICovCi0JICAgIHNldGZsb3coKTsJCQkvKiBNYXliZSBjaGFuZ2UgZmxvdyBjb250cm9s ICovCi0JICAgIGhhdmVsaW5lID0gMTsJCS8qICgqIGlzIHRoaXMgcmlnaHQ/ICopICovCi0JICAg IGRvbG9nZW5kKCk7Ci0jaWZuZGVmIE5PRElBTAotCSAgICBkaWFsc3RhID0gRElBX1VOSzsKLSNl bmRpZiAvKiBOT0RJQUwgKi8KLSNpZmRlZiBMT0NVUwotCSAgICBpZiAoYXV0b2xvY3VzKSB7Ci0J CXNldGxvY3VzKDEsMSk7Ci0JICAgIH0KLSNlbmRpZiAvKiBMT0NVUyAqLwotICAgICAgICAgICAg LyogWFhYIC0gSXMgdGhpcyByaWdodD8gKi8KLQkgICAgLyogU2hvdWxkIHdlIGJlIHJldHVybmlu ZyB3aXRob3V0IGRvaW5nIGFueXRoaW5nID8gKi8KLQkgICAgLyogWWVzIGl0J3MgcmlnaHQgLS0g d2UgY2xvc2VkIHRoZSBvbGQgY29ubmVjdGlvbiBqdXN0IGFib3ZlLiAqLwotCSAgICByZXR1cm4o c3VjY2VzcyA9IDEpOyAgICAgICAgCi0JfQotICAgIH0KLSAgICBzdWNjZXNzID0gMDsKLSAgICBp ZiAoaG9zdCAhPSBsaW5lKSAgICAgICAgICAgICAgICAgICAvKiBsaW5lW10gaXMgYSBnbG9iYWwg Ki8KLSAgICAgIGNrc3RybmNweShsaW5lLGhvc3QsTElOQlVGU0laKTsKLSAgICBja3N0cm5jcHko aG9zdG5hbWUsaG9zdCxIT1NUTkFNTEVOKTsKLSAgICBja3N0cm5jcHkoc3J2YnVmLHN2YyxTUlZC VUZTSVorMSk7Ci0KLSNpZm5kZWYgTk9ESUFMCi0gICAgaWYgKChuaGNvdW50ID4gMSkgJiYgbXNn KSB7Ci0JaW50IGs7Ci0JcHJpbnRmKCIlZCBlbnRyJXMgZm91bmQgZm9yIFwiJXNcIiVzXG4iLAot CSAgICAgICBuaGNvdW50LAotCSAgICAgICAobmhjb3VudCA9PSAxKSA/ICJ5IiA6ICJpZXMiLAot CSAgICAgICBzLAotCSAgICAgICAobmhjb3VudCA+IDApID8gIjoiIDogIi4iCi0JICAgICAgICk7 Ci0JZm9yIChpID0gMDsgaSA8IG5oY291bnQ7IGkrKykgewotCQlwcmludGYoIiUzZC4gJS0xMnMg PT4gJS05cyAlcyIsCi0JCSAgICAgICBpKzEsbl9uYW1lLG5oX3AyW2ldLG5oX3BbaV0pOwotCSAg ICBmb3IgKGsgPSAwOyBrIDwgNDsgaysrKSB7IC8qIEFsc28gbGlzdCBuZXQtc3BlY2lmaWMgaXRl bXMgKi8KLQkJaWYgKG5oX3B4W2tdW2ldKSAgICAgIC8qIGZyZWUgZm9ybWF0Li4uICovCi0JCSAg cHJpbnRmKCIgJXMiLG5oX3B4W2tdW2ldKTsKLQkJZWxzZQotCQkgIGJyZWFrOwotCSAgICB9Ci0J ICAgIHByaW50ZigiXG4iKTsKLQl9Ci0gICAgfQotICAgIGlmIChuaGNvdW50ID09IDApCi0gICAg ICBuID0gMTsKLSAgICBlbHNlCi0gICAgICBuID0gbmhjb3VudDsKLSNlbHNlCi0gICAgbiA9IDE7 Ci0gICAgbmhjb3VudCA9IDA7Ci0jZW5kaWYgLyogTk9ESUFMICovCi0KLSAgICBmb3IgKGkgPSAw OyBpIDwgbjsgaSsrKSB7CQkvKiBMb29wIGZvciBlYWNoIGVudHJ5IGZvdW5kICovCi0JZGVidWco RjEwMSwiY3hfbmV0IGxvb3AgaSIsIiIsaSk7Ci0jaWZuZGVmIE5PRElBTAotCWlmIChuaGNvdW50 ID4gMCkgewkJLyogSWYgd2UgZm91bmQgYXQgbGVhc3Qgb25lIGVudHJ5Li4uICovCi0JICAgIGNr c3RybmNweShsaW5lLG5oX3BbaV0sTElOQlVGU0laKTsgLyogQ29weSBjdXJyZW50IGVudHJ5ICov Ci0JICAgIGlmIChsb29rdXAobmV0Y21kLG5oX3AyW2ldLG5uZXRzLCZ4KSA+IC0xKSB7IC8qIE5l dCB0eXBlICovCi0JCWludCB4eDsKLQkJeHggPSBuZXRjbWRbeF0ua3d2YWw7Ci0JCS8qIFVzZXIg c3BlY2lmaWVkIFNTSCBzbyBkb24ndCBsZXQgbmV0IGRpcmVjdG9yeSBvdmVycmlkZSAqLwotCQlp ZiAobmV0ICE9IE5FVF9TU0ggfHwgeHggIT0gTkVUX1RDUEIpIHsKLQkJICAgIG5ldCA9IHh4Owot CQkgICAgbWRtdHlwICA9IDAgLSBuZXQ7Ci0JCX0KLQkgICAgfSBlbHNlIHsKLQkJbWFrZXN0cigm c2xtc2csIk5ldHdvcmsgdHlwZSBub3Qgc3VwcG9ydGVkIik7Ci0JCWlmIChtc2cpCi0JCSAgcHJp bnRmKCJFcnJvciAtIG5ldHdvcmsgdHlwZSBcIiVzXCIgbm90IHN1cHBvcnRlZFxuIiwKLQkJCSBu aF9wMltpXQotCQkgICAgICAgICApOwotCQljb250aW51ZTsKLQkgICAgfQotCSAgICBzd2l0Y2gg KG5ldCkgewkJLyogTmV0LXNwZWNpZmljIGRpcmVjdG9yeSB0aGluZ3MgKi8KLSNpZmRlZiBTU0hC VUlMVElOCi0JICAgICAgY2FzZSBORVRfU1NIOgkJLyogU1NIICovCi0gICAgICAgICAgICAgICAg LyogQW55IFNTSCBzcGVjaWZpYyBuZXR3b3JrIGRpcmVjdG9yeSBzdHVmZj8gKi8KLSAgICAgICAg ICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBORVRfU1NIICovCi0jZW5kaWYgLyog U1NIQlVJTFRJTiAqLwotCi0JICAgICAgY2FzZSBORVRfVENQQjogewkJLyogVENQL0lQIFRFTE5F VCxSTE9HSU4sLi4uICovCi0jaWZkZWYgVENQU09DS0VUCi0JCSAgY2hhciAqcTsKLQkJICBpbnQg ZmxhZyA9IDA7Ci0KLQkJICAvKiBFeHRyYWN0ICI6c2VydmljZSIsIGlmIGFueSwgZnJvbSBob3N0 IHN0cmluZyAqLwotCQkgIGRlYnVnKEYxMTAsImN4X25ldCBzZXJ2aWNlIDEiLGxpbmUsMCk7Ci0J CSAgZm9yIChxID0gbGluZTsgKCpxICE9ICdcMCcpICYmICgqcSAhPSAnOicpOyBxKyspCi0JCSAg ICA7Ci0JCSAgaWYgKCpxID09ICc6JykgeyAqcSsrID0gTlVMOyBmbGFnID0gMTsgfQotCQkgIGRl YnVnKEYxMTEsImN4X25ldCBzZXJ2aWNlIDIiLGxpbmUsZmxhZyk7Ci0KLQkJICAvKiBHZXQgc2Vy dmljZSwgaWYgYW55LCBmcm9tIGRpcmVjdG9yeSBlbnRyeSAqLwotCi0JCSAgaWYgKCEqc3J2YnVm KSB7Ci0JCSAgICAgIGlmIChuaF9weFswXVtpXSkgewotCQkJICBja3N0cm5jcHkoc3J2YnVmLG5o X3B4WzBdW2ldLFNSVkJVRlNJWik7Ci0JCQkgIGRlYnVnKEYxMTAsImN4X25ldCBzZXJ2aWNlIDMi LHNydmJ1ZiwwKTsKLQkJICAgICAgfQotCQkgICAgICBpZiAoZmxhZykgewotCQkJICBja3N0cm5j cHkoc3J2YnVmLHEsU1JWQlVGU0laKTsKLQkJCSAgZGVidWcoRjExMCwiY3hfbmV0IHNlcnZpY2Ug NCIsc3J2YnVmLDApOwotCQkgICAgICB9Ci0JCSAgfQotCQkgIGNrc3RybmNweShob3N0bmFtZSxs aW5lLEhPU1ROQU1MRU4pOwotCi0JCSAgLyogSWYgd2UgaGF2ZSBhIHNlcnZpY2UsIGFwcGVuZCB0 byBob3N0IG5hbWUvYWRkcmVzcyAqLwotCQkgIGlmICgqc3J2YnVmKSB7Ci0JCSAgICAgIGNrc3Ry bmNhdChsaW5lLCAiOiIsIExJTkJVRlNJWik7Ci0JCSAgICAgIGNrc3RybmNhdChsaW5lLCBzcnZi dWYsIExJTkJVRlNJWik7Ci0JCSAgICAgIGRlYnVnKEYxMTAsImN4X25ldCBzZXJ2aWNlIDUiLGxp bmUsMCk7Ci0JCSAgfQotI2lmZGVmIFJMT0dDT0RFCi0JCSAgLyogSWYgbm8gc2VydmljZSBnaXZl biBidXQgY29tbWFuZCB3YXMgUkxPR0lOICovCi0JCSAgZWxzZSBpZiAodHRucHJvdG8gPT0gTlBf UkxPR0lOKSB7IC8qIGFkZCB0aGlzLi4uICovCi0JCSAgICAgIGNrc3RybmNhdChsaW5lLCAiOmxv Z2luIixMSU5CVUZTSVopOwotCQkgICAgICBkZWJ1ZyhGMTEwLCJjeF9uZXQgc2VydmljZSA2Iixs aW5lLDApOwotCQkgIH0KLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotI2lmZGVmIENLX0tFUkJF Uk9TCi0JCSAgZWxzZSBpZiAodHRucHJvdG8gPT0gTlBfSzRMT0dJTiB8fAotCQkJICAgdHRucHJv dG8gPT0gTlBfSzVMT0dJTikgeyAvKiBhZGQgdGhpcy4uLiAqLwotCQkgICAgICBja3N0cm5jYXQo bGluZSwgIjprbG9naW4iLExJTkJVRlNJWik7Ci0JCSAgICAgIGRlYnVnKEYxMTAsImN4X25ldCBz ZXJ2aWNlIDciLGxpbmUsMCk7Ci0JCSAgfQotCQkgIGVsc2UgaWYgKHR0bnByb3RvID09IE5QX0VL NExPR0lOIHx8Ci0JCQkgICB0dG5wcm90byA9PSBOUF9FSzVMT0dJTikgeyAvKiBhZGQgdGhpcy4u LiAqLwotCQkgICAgICBja3N0cm5jYXQobGluZSwgIjpla2xvZ2luIixMSU5CVUZTSVopOwotCQkg ICAgICBkZWJ1ZyhGMTEwLCJjeF9uZXQgc2VydmljZSA4IixsaW5lLDApOwotCQkgIH0KLSNlbmRp ZiAvKiBDS19LRVJCRVJPUyAqLwotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0jZW5k aWYgLyogUkxPR0NPREUgKi8KLQkJICBlbHNlIHsJCS8qIE90aGVyd2lzZSwgYWRkICI6dGVsbmV0 Ii4gKi8KLQkJICAgICAgY2tzdHJuY2F0KGxpbmUsICI6dGVsbmV0IiwgTElOQlVGU0laKTsKLQkJ ICAgICAgZGVidWcoRjExMCwiY3hfbmV0IHNlcnZpY2UgOSIsbGluZSwwKTsKLQkJICB9Ci0JCSAg aWYgKHVzZXJuYW1lKSB7CS8qIFRoaXMgaXMgYSBwYXJhbWV0ZXIuLi4gKi8KLQkJICAgICAgY2tz dHJuY3B5KHVpZGJ1Zix1c2VybmFtZSxVSURCVUZMRU4pOwotCQkgICAgICB1aWRmbGFnID0gMTsK LQkJICB9Ci0JCSAgLyogRmlmdGggZmllbGQsIGlmIGFueSwgaXMgdXNlciBJRCAoZm9yIHJsb2dp bikgKi8KLQotCQkgIGlmIChuaF9weFsxXVtpXSAmJiAhdWlkZmxhZykKLQkJICAgIGNrc3RybmNw eSh1aWRidWYsdXNlcm5hbWUsVUlEQlVGTEVOKTsKLSNpZmRlZiBSTE9HQ09ERQotCQkgIGlmIChJ U19STE9HSU4oKSAmJiAhdWlkYnVmWzBdKQotCQkgICAgcmV0dXJuKGN4X2ZhaWwobXNnLCJVc2Vy bmFtZSByZXF1aXJlZCIpKTsKLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotI2VuZGlmIC8qIFRDUFNP Q0tFVCAqLwotCQkgIGJyZWFrOwotCSAgICAgIH0KLQkgICAgICBjYXNlIE5FVF9QSVBFOgkJLyog UGlwZSAqLwotI2lmZGVmIE5QSVBFCi0JCWlmICghcGlwZW5hbWVbMF0pIHsgLyogVXNlciBkaWRu J3QgZ2l2ZSBhIHBpcGVuYW1lICovCi0JCSAgICBpZiAobmhfcHhbMF1baV0pIHsgLyogQnV0IGRp cmVjdG9yeSBlbnRyeSBoYXMgb25lICovCi0JCQlpZiAoc3RyY21wKHBpcGVuYW1lLCJcXHBpcGVc XCIpKSB7Ci0JCQkgICAgY2tzdHJuY3B5KHBpcGVuYW1lLCJcXHBpcGVcXCIsTElOQlVGU0laKTsK LQkJCSAgICBja3N0cm5jYXQoc3J2YnVmLG5oX3B4WzBdW2ldLFBJUEVOQU1MLTYpOwotCQkJfSBl bHNlIHsKLQkJCSAgICBja3N0cm5jcHkocGlwZW5hbWUsbmhfcHhbMF1baV0sUElQRU5BTUwpOwot CQkJfQotCQkJZGVidWcoRjExMCwiY3hfbmV0IHBpcGVuZW1lIixwaXBlbmFtZSwwKTsKLQkJICAg IH0KLQkJfQotI2VuZGlmIC8qIE5QSVBFICovCi0JCWJyZWFrOwotCi0JICAgICAgY2FzZSBORVRf U0xBVDogICAgICAgICAgICAvKiBMQVQgLyBDVEVSTSAqLwotI2lmZGVmIFNVUEVSTEFUCi0JCWlm ICghc2xhdF9wd2RbMF0pIHsgLyogVXNlciBkaWRuJ3QgZ2l2ZSBhIHBhc3N3b3JkICovCi0JCSAg ICBpZiAobmhfcHhbMF1baV0pIHsgLyogQnV0IGRpcmVjdG9yeSBlbnRyeSBoYXMgb25lICovCi0J CQlja3N0cm5jcHkoc2xhdF9wd2QsbmhfcHhbMF1baV0sMTgpOwotCQkJZGVidWcoRjExMCwiY3hf bmV0IFN1cGVyTEFUIHBhc3N3b3JkIixzbGF0X3B3ZCwwKTsKLQkJICAgIH0KLQkJfQotI2VuZGlm IC8qIFNVUEVSTEFUICovCi0JCWJyZWFrOwotCi0JICAgICAgY2FzZSBORVRfU1gyNTogICAgICAg IC8qIFguMjUga2V5d29yZCBwYXJhbWV0ZXJzICovCi0JICAgICAgY2FzZSBORVRfSVgyNToKLQkg ICAgICBjYXNlIE5FVF9WWDI1OiB7Ci0jaWZkZWYgQU5ZWDI1Ci0JCSAgaW50IGs7ICAgICAgICAg ICAgLyogQ3ljbGUgdGhyb3VnaCB0aGUgZm91ciBmaWVsZHMgKi8KLQkJICBmb3IgKGsgPSAwOyBr IDwgNDsgaysrKSB7Ci0JCSAgICAgIGlmICghbmhfcHhba11baV0pIC8qIEJhaWwgb3V0IGlmIG5v bmUgbGVmdCAqLwotCQkJYnJlYWs7Ci0JCSAgICAgIGlmICghY2tzdHJjbXAobmhfcHhba11baV0s ImN1Zz0iLDQsMCkpIHsKLQkJCSAgY2xvc2dyID0gYXRvaShuaF9weFtrXVtpXSs0KTsKLQkJCSAg ZGVidWcoRjEwMSwiWDI1IENVRyIsIiIsY2xvc2dyKTsKLQkJICAgICAgfSBlbHNlIGlmICghY2tz dHJjbXAobmhfcHhba11baV0sImN1ZD0iLDQsMCkpIHsKLQkJCSAgY3VkYXRhID0gMTsKLQkJCSAg Y2tzdHJuY3B5KHVkYXRhLG5oX3B4W2tdW2ldKzQsTUFYQ1VEQVRBKTsKLQkJCSAgZGVidWcoRjEx MCwiWDI1IENVRCIsY3VkYXRhLDApOwotCQkgICAgICB9IGVsc2UgaWYgKCFja3N0cmNtcChuaF9w eFtrXVtpXSwicmV2PSIsNCwwKSkgewotCQkJICByZXZjYWxsID0gIWNrc3RyY21wKG5oX3B4W2td W2ldKzQsIj1vbiIsMywwKTsKLQkJCSAgZGVidWcoRjEwMSwiWDI1IFJFViIsIiIscmV2Y2FsbCk7 Ci0jaWZuZGVmIElCTVgyNQotCQkgICAgICB9IGVsc2UgaWYgKCFja3N0cmNtcChuaF9weFtrXVtp XSwicGFkPSIsNCwwKSkgewotCQkJICBpbnQgeDNwYXIsIHgzdmFsOwotCQkJICBjaGFyICpzMSwg KnMyOwotCQkJICBzMSA9IHMyID0gbmhfcHhba11baV0rNDsgLyogUEFEIHBhcmFtZXRlcnMgKi8K LQkJCSAgd2hpbGUgKCpzMikgeyAgICAgICAgICAgIC8qIFBpY2sgdGhlbSBhcGFydCAqLwotCQkJ ICAgICAgaWYgKCpzMiA9PSAnOicpIHsKLQkJCQkgICpzMiA9IE5VTDsKLQkJCQkgIHgzcGFyID0g YXRvaShzMSk7Ci0JCQkJICBzMSA9ICsrczI7Ci0JCQkJICBjb250aW51ZTsKLQkJCSAgICAgIH0g ZWxzZSBpZiAoKnMyID09ICcsJykgewotCQkJCSAgKnMyID0gTlVMOwotCQkJCSAgeDN2YWwgPSBh dG9pKHMxKTsKLQkJCQkgIHMxID0gKytzMjsKLQkJCQkgIGRlYnVnKEYxMTEsIlgyNSBQQUQiLHgz cGFyLHgzdmFsKTsKLQkJCQkgIGlmICh4M3BhciA+IC0xICYmCi0JCQkJICAgICAgeDNwYXIgPD0g TUFYUEFEUEFSTVMpCi0JCQkJICAgIHBhZHBhcm1zW3gzcGFyXSA9IHgzdmFsOwotCQkJCSAgY29u dGludWU7Ci0JCQkgICAgICB9IGVsc2UKLQkJCQlzMisrOwotCQkJICB9Ci0jZW5kaWYgLyogSUJN WDI1ICovCi0JCSAgICAgIH0KLQkJICB9Ci0jZW5kaWYgLyogQU5ZWDI1ICovCi0JCSAgYnJlYWs7 Ci0JICAgICAgfQotCSAgICAgIGRlZmF1bHQ6CQkJLyogTm90aGluZyBzcGVjaWFsIGZvciBvdGhl ciBuZXRzICovCi0JCWJyZWFrOwotCSAgICB9Ci0JfSBlbHNlCi0jZW5kaWYgLyogTk9ESUFMICov Ci0JewkJCQkvKiBObyBkaXJlY3RvcnkgZW50cmllcyBmb3VuZC4gKi8KLQkgICAgY2tzdHJuY3B5 KGxpbmUsaG9zdG5hbWUsTElOQlVGU0laKTsgLyogUHV0IHRoaXMgYmFjay4uLiAqLwotCSAgICAv KiBJZiB0aGUgdXNlciBnYXZlIGEgVENQIHNlcnZpY2UgKi8KLQkgICAgaWYgKG5ldCA9PSBORVRf VENQQiB8fCBuZXQgPT0gTkVUX1NTSCkKLQkgICAgICBpZiAoKnNydmJ1ZikgewkJLyogQXBwZW5k IGl0IHRvIGhvc3QgbmFtZS9hZGRyZXNzICovCi0JCSAgY2tzdHJuY2F0KGxpbmUsICI6IiwgTElO QlVGU0laKTsKLQkJICBja3N0cm5jYXQobGluZSwgc3J2YnVmLExJTkJVRlNJWik7Ci0JICAgICAg fQotCX0KLQkvKgotCSAgIEdldCBoZXJlIHdpdGggaG9zdCBuYW1lL2FkZHJlc3MgYW5kIGFsbCBu ZXQtc3BlY2lmaWMKLQkgICBwYXJhbWV0ZXJzIHNldCwgcmVhZHkgdG8gb3BlbiB0aGUgY29ubmVj dGlvbi4KLQkqLwotCW1kbXR5cCA9IC1uZXQ7CQkJLyogVGhpcyBzaG91bGQgaGF2ZSBiZWVuIGRv bmUgKi8KLQkJCQkJLyogYWxyZWFkeSBidXQganVzdCBpbiBjYXNlIC4uLiAqLwotCi0JZGVidWco RjExMCwiY3hfbmV0IG5ldCBsaW5lW10gYmVmb3JlIHR0b3BlbiIsbGluZSwwKTsKLQlkZWJ1ZyhG MTAxLCJjeF9uZXQgbmV0IG1kbXR5cCBiZWZvcmUgdHRvcGVuIiwiIixtZG10eXApOwotCWRlYnVn KEYxMDEsImN4X25ldCBuZXQgdHRucHJvdG8iLCIiLHR0bnByb3RvKTsKLQotI2lmZGVmIFNTSEJV SUxUSU4KLSAgICAgICAgaWYgKG5ldCA9PSBORVRfU1NIKSB7Ci0gICAgICAgICAgICBtYWtlc3Ry KCZzc2hfaHN0LGhvc3RuYW1lKTsgICAgICAgIC8qIFN0YXNoIGV2ZXJ5dGhpbmcgKi8KLSAgICAg ICAgICAgIGlmICh1c2VybmFtZSkgewotICAgICAgICAgICAgICAgIGlmICghc2xfdWlkX3NhdmVk KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShzbF91aWRidWYsdWlkYnVmLFVJREJV RkxFTik7Ci0gICAgICAgICAgICAgICAgICAgIHNsX3VpZF9zYXZlZCA9IDE7Ci0gICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgIGNrc3RybmNweSh1aWRidWYsdXNlcm5hbWUsVUlEQlVG TEVOKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzcnZidWZbMF0pIHsKLSAgICAg ICAgICAgICAgICBtYWtlc3RyKCZzc2hfcHJ0LHNydmJ1Zik7Ci0gICAgICAgICAgICB9IGVsc2UK LSAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2hfcHJ0LE5VTEwpOwotCi0gICAgICAgICAgICBp ZiAoY29tbWFuZCkgewotICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF9jbWQsYnJzdHJpcChj b21tYW5kKSk7Ci0gICAgICAgICAgICAgICAgc3NoX2NhcyA9IHBhcmFtMjsKLSAgICAgICAgICAg IH0gZWxzZQotICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF9jbWQsTlVMTCk7Ci0KLSAgICAg ICAgICAgIGlmIChwYXJhbTEgPiAtMSkgewotI2lmbmRlZiBTU0hURVNUCi0gICAgICAgICAgICAg ICAgaWYgKCFzbF9zc2hfdmVyX3NhdmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsX3NzaF92 ZXIgPSBzc2hfdmVyOwotICAgICAgICAgICAgICAgICAgICBzbF9zc2hfdmVyX3NhdmVkID0gMTsK LSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogU1NIVEVTVCAqLwotICAgICAgICAgICAgICAg IHNzaF92ZXIgPSBwYXJhbTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocGFyYW0z ID4gLTEpIHsKLSNpZm5kZWYgU1NIVEVTVAotICAgICAgICAgICAgICAgIGlmICghc2xfc3NoX3hm d19zYXZlZCkgewotICAgICAgICAgICAgICAgICAgICBzbF9zc2hfeGZ3ID0gc3NoX3hmdzsKLSAg ICAgICAgICAgICAgICAgICAgc2xfc3NoX3hmd19zYXZlZCA9IDE7Ci0gICAgICAgICAgICAgICAg fQotI2VuZGlmIC8qIFNTSFRFU1QgKi8KLSAgICAgICAgICAgICAgICBzc2hfeGZ3ID0gcGFyYW0z OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIE5FVF9TU0ggKi8KLSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0jaWZkZWYgVENQU09DS0VU Ci0JICBpZiAobmV0ID09IE5FVF9UQ1BCKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHByb3RvY29s KSB7Ci0jaWZkZWYgQ0tfU1NMCi0jaWZkZWYgQ09NTUVOVAotLyoKLSAgSmVmZidzIHZlcnNpb24g ZnJvbSAzMCBEZWMgMjAwNiAtIGRvZXNuJ3Qgd29yayAtIFNTTC9UTFNfUkFXIHN0aWxsCi0gIHN0 YXJ0IFRlbG5ldCBuZWdvdGlvbnMgaWYgYSAweGZmIGJ5dGUgY29tZXMgaW4uCi0qLwotCSAgICAg IGNhc2UgTlBfU1NMX1JBVzoKLSAgICAgICAgICAgICAgICB0dG5wcm90byA9IE5QX1NTTF9SQVc7 Ci0JCWRlYnVnKEYxMDEsIk5QX1NTTF9SQVcgdHRucHJvdG8iLCIiLHR0bnByb3RvKTsKLSAgICAg ICAgICAgICAgICBzc2xfb25seV9mbGFnID0gMTsKLSAgICAgICAgICAgICAgICB0bHNfb25seV9m bGFnID0gMDsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotCSAgICAgIGNhc2UgTlBfVExTX1JB VzoKLQkJICB0dG5wcm90byA9IE5QX1RMU19SQVc7Ci0JCSAgZGVidWcoRjEwMSwiTlBfVExTX1JB VyB0dG5wcm90byIsIiIsdHRucHJvdG8pOwotCQkgIHNzbF9vbmx5X2ZsYWcgPSAwOwotCQkgIHRs c19vbmx5X2ZsYWcgPSAxOwotCQkgIGJyZWFrOwotCi0JICAgICAgY2FzZSBOUF9TU0w6Ci0gICAg ICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9TU0w7Ci0JCWRlYnVnKEYxMDEsIk5QX1NTTCB0dG5w cm90byIsIiIsdHRucHJvdG8pOwotICAgICAgICAgICAgICAgIHNzbF9vbmx5X2ZsYWcgPSAxOwot ICAgICAgICAgICAgICAgIHRsc19vbmx5X2ZsYWcgPSAwOwotICAgICAgICAgICAgICAgIGJyZWFr OwotCi0JICAgICAgY2FzZSBOUF9UTFM6Ci0gICAgICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9U TFM7Ci0JCWRlYnVnKEYxMDEsIk5QX1RMUyB0dG5wcm90byIsIiIsdHRucHJvdG8pOwotICAgICAg ICAgICAgICAgIHNzbF9vbmx5X2ZsYWcgPSAwOwotICAgICAgICAgICAgICAgIHRsc19vbmx5X2Zs YWcgPSAxOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0JICAgICAgY2FzZSBOUF9TU0xfVEVM TkVUOgotICAgICAgICAgICAgICAgIHR0bnByb3RvID0gTlBfVEVMTkVUOwotCQlkZWJ1ZyhGMTAx LCJOUF9TU0xfVEVMTkVUIHR0bnByb3RvIiwiIix0dG5wcm90byk7Ci0gICAgICAgICAgICAgICAg c3NsX29ubHlfZmxhZyA9IDE7Ci0gICAgICAgICAgICAgICAgdGxzX29ubHlfZmxhZyA9IDA7Ci0g ICAgICAgICAgICAgICAgYnJlYWs7Ci0KLQkgICAgICBjYXNlIE5QX1RMU19URUxORVQ6Ci0gICAg ICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9URUxORVQ7Ci0JCWRlYnVnKEYxMDEsIk5QX1RMU19U RUxORVQgdHRucHJvdG8iLCIiLHR0bnByb3RvKTsKLSAgICAgICAgICAgICAgICBzc2xfb25seV9m bGFnID0gMDsKLSAgICAgICAgICAgICAgICB0bHNfb25seV9mbGFnID0gMTsKLSAgICAgICAgICAg ICAgICBicmVhazsKLSNlbHNlCi0vKiBmZGMgdmVyc2lvbiBvZiA0IERlYyAyMDA2IHdvcmtzIE9L ICovCi0JICAgICAgY2FzZSBOUF9TU0xfUkFXOgotCSAgICAgIGNhc2UgTlBfU1NMOgotCQlzc2xf cmF3X2ZsYWcgPSAocHJvdG9jb2wgPT0gTlBfU1NMX1JBVykgPyAxIDogMDsKLSAgICAgICAgICAg ICAgICB0dG5wcm90byA9IHByb3RvY29sOwotCQlkZWJ1ZyhGMTAxLHByb3RvY29sPT1OUF9TU0wg PwotCQkgICAgICAiTlBfU1NMIHR0bnByb3RvIiA6Ci0JCSAgICAgICJOUF9TU0xfUkFXIHR0bnBy b3RvIiwKLQkJICAgICAgIiIsdHRucHJvdG8pOwotICAgICAgICAgICAgICAgIHNzbF9vbmx5X2Zs YWcgPSAxOwotICAgICAgICAgICAgICAgIHRsc19vbmx5X2ZsYWcgPSAwOwotICAgICAgICAgICAg ICAgIGJyZWFrOwotCi0JICAgICAgY2FzZSBOUF9UTFM6Ci0JICAgICAgY2FzZSBOUF9UTFNfUkFX OgotCQl0bHNfcmF3X2ZsYWcgPSAocHJvdG9jb2wgPT0gTlBfU1NMX1JBVykgPyAxIDogMDsKLSAg ICAgICAgICAgICAgICB0dG5wcm90byA9IHByb3RvY29sOwotCQlkZWJ1ZyhGMTAxLHByb3RvY29s PT1OUF9UTFMgPwotCQkgICAgICAiTlBfVExTIHR0bnByb3RvIiA6Ci0JCSAgICAgICJOUF9UTFNf UkFXIHR0bnByb3RvIiwKLQkJICAgICAgIiIsdHRucHJvdG8pOwotICAgICAgICAgICAgICAgIHNz bF9vbmx5X2ZsYWcgPSAwOwotICAgICAgICAgICAgICAgIHRsc19vbmx5X2ZsYWcgPSAxOwotICAg ICAgICAgICAgICAgIGJyZWFrOwotCi0JICAgICAgY2FzZSBOUF9TU0xfVEVMTkVUOgotCQlzc2xf cmF3X2ZsYWcgPSAwOwotICAgICAgICAgICAgICAgIHR0bnByb3RvID0gTlBfVEVMTkVUOwotCQlk ZWJ1ZyhGMTAxLCJOUF9TU0xfVEVMTkVUIHR0bnByb3RvIiwiIix0dG5wcm90byk7Ci0gICAgICAg ICAgICAgICAgc3NsX29ubHlfZmxhZyA9IDE7Ci0gICAgICAgICAgICAgICAgdGxzX29ubHlfZmxh ZyA9IDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLQkgICAgICBjYXNlIE5QX1RMU19URUxO RVQ6Ci0JCXRsc19yYXdfZmxhZyA9IDA7Ci0gICAgICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9U RUxORVQ7Ci0JCWRlYnVnKEYxMDEsIk5QX1RMU19URUxORVQgdHRucHJvdG8iLCIiLHR0bnByb3Rv KTsKLSAgICAgICAgICAgICAgICBzc2xfb25seV9mbGFnID0gMDsKLSAgICAgICAgICAgICAgICB0 bHNfb25seV9mbGFnID0gMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSNlbmRpZgkvKiBDT01N RU5UICovCi0jZW5kaWYgLyogQ0tfU1NMICovCi0KLQkgICAgICBjYXNlIE5QX05PTkU6Ci0JICAg ICAgY2FzZSBOUF9UQ1BSQVc6Ci0JICAgICAgY2FzZSBOUF9STE9HSU46Ci0JICAgICAgY2FzZSBO UF9LNExPR0lOOgotCSAgICAgIGNhc2UgTlBfSzVMT0dJTjoKLQkgICAgICBjYXNlIE5QX0VLNExP R0lOOgotCSAgICAgIGNhc2UgTlBfRUs1TE9HSU46Ci0JICAgICAgY2FzZSBOUF9URUxORVQ6Ci0J ICAgICAgY2FzZSBOUF9LRVJNSVQ6Ci0JICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICB0 dG5wcm90byA9IHByb3RvY29sOwotI2lmZGVmIENLX1NTTAotI2lmZGVmIENPTU1FTlQKLQkJLyog SmVmZiB2ZXJzaW9uIGZyb20gMzAgRGVjIDIwMDYgKi8KLSAgICAgICAgICAgICAgICBzc2xfb25s eV9mbGFnID0gMDsKLSAgICAgICAgICAgICAgICB0bHNfb25seV9mbGFnID0gMDsKLSNlbHNlCi0J CS8qIGZkYyB2ZXJzaW9uIGZyb20gNCBEZWMgMjAwNiAqLwotCQlzc2xfcmF3X2ZsYWcgPSAwOwot CQl0bHNfcmF3X2ZsYWcgPSAwOwotICAgICAgICAgICAgICAgIHNzbF9vbmx5X2ZsYWcgPSAwOwot ICAgICAgICAgICAgICAgIHRsc19vbmx5X2ZsYWcgPSAwOwotI2VuZGlmCS8qIENPTU1FTlQgKi8K LSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg IH0KLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotICAgICAgICAgICAgaWYgKCh0dG5wcm90byA9 PSBOUF9URUxORVQgfHwgdHRucHJvdG8gPT0gTlBfS0VSTUlUKSAmJgotCQlwYXJhbTEgPiAtMSkg ewotCSAgICBpZiAoIXNsX2F1dGhfc2F2ZWQpIHsKLQkJaW50IHg7Ci0JCWZvciAoeCA9IDA7IHgg PCBBVVRIVFlQTFNUU1o7IHgrKykKLQkJICBzbF9hdXRoX3R5cGVfdXNlclt4XSA9IGF1dGhfdHlw ZV91c2VyW3hdOwotCQlzbF9hdXRoX3NhdmVkID0gMTsKLQkgICAgfQotCSAgICBpZiAoIXNsX3Rv cHRfYV9zX3NhdmVkKSB7Ci0JCXNsX3RvcHRfYV9zdSA9IFRFTE9QVF9ERUZfU19VX01PREUoVEVM T1BUX0FVVEhFTlRJQ0FUSU9OKTsKLQkJc2xfdG9wdF9hX3Nfc2F2ZWQgPSAxOwotCSAgICB9Ci0J ICAgIGlmICghc2xfdG9wdF9hX2Nfc2F2ZWQpIHsKLQkJc2xfdG9wdF9hX2NtID0gVEVMT1BUX0RF Rl9DX01FX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKTsKLQkJc2xfdG9wdF9hX2Nfc2F2ZWQg PSAxOwotCSAgICB9Ci0JICAgIHN3aXRjaCAocGFyYW0xKSB7Ci0JICAgICAgY2FzZSBBVVRIVFlQ RV9BVVRPOgotCQlhdXRoX3R5cGVfdXNlclswXSA9IEFVVEhUWVBFX0FVVE87Ci0JCVRFTE9QVF9E RUZfU19VX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA9IFROX05HX1JROwotCQlURUxPUFRf REVGX0NfTUVfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID0gVE5fTkdfUlE7Ci0JCWJyZWFr OwotCSAgICAgIGNhc2UgQVVUSFRZUEVfTlVMTDoKLQkJYXV0aF90eXBlX3VzZXJbMF0gPSBBVVRI VFlQRV9OVUxMOwotCQlURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9BVVRIRU5USUNBVElPTikg PSBUTl9OR19SRjsKLQkJVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9O KSA9IFROX05HX1JGOwotCQlicmVhazsKLSNpZmRlZiBDS19TUlAKLQkgICAgICBjYXNlIEFVVEhU WVBFX1NSUDoKLQkJYXV0aF90eXBlX3VzZXJbMF0gPSBBVVRIVFlQRV9TUlA7Ci0JCWF1dGhfdHlw ZV91c2VyWzFdID0gQVVUSFRZUEVfTlVMTDsKLQkJVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRf QVVUSEVOVElDQVRJT04pID0gVE5fTkdfTVU7Ci0JCVRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9Q VF9BVVRIRU5USUNBVElPTikgPSBUTl9OR19NVTsKLQkJYnJlYWs7Ci0jZW5kaWYgLyogQ0tfU1JQ ICovCi0jaWZkZWYgQ0tfU1NMCi0JICAgICAgY2FzZSBBVVRIVFlQRV9TU0w6Ci0JCWF1dGhfdHlw ZV91c2VyWzBdID0gQVVUSFRZUEVfU1NMOwotCQlhdXRoX3R5cGVfdXNlclsxXSA9IEFVVEhUWVBF X05VTEw7Ci0JCVRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA9IFRO X05HX01VOwotCQlURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID0g VE5fTkdfTVU7Ci0JCWJyZWFrOwotI2VuZGlmIC8qIENLX1NTTCAqLwotI2lmZGVmIE5UCi0JICAg ICAgY2FzZSBBVVRIVFlQRV9OVExNOgotCQlhdXRoX3R5cGVfdXNlclswXSA9IEFVVEhUWVBFX05U TE07Ci0JCWF1dGhfdHlwZV91c2VyWzFdID0gQVVUSFRZUEVfTlVMTDsKLQkJVEVMT1BUX0RFRl9T X1VfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID0gVE5fTkdfTVU7Ci0JCVRFTE9QVF9ERUZf Q19NRV9NT0RFKFRFTE9QVF9BVVRIRU5USUNBVElPTikgPSBUTl9OR19NVTsKLQkJYnJlYWs7Ci0j ZW5kaWYgLyogTlQgKi8KLSNpZmRlZiBDS19LRVJCRVJPUwotCSAgICAgIGNhc2UgQVVUSFRZUEVf S0VSQkVST1NfVjQ6Ci0JCWF1dGhfdHlwZV91c2VyWzBdID0gQVVUSFRZUEVfS0VSQkVST1NfVjQ7 Ci0JCWF1dGhfdHlwZV91c2VyWzFdID0gQVVUSFRZUEVfTlVMTDsKLQkJVEVMT1BUX0RFRl9TX1Vf TU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID0gVE5fTkdfTVU7Ci0JCVRFTE9QVF9ERUZfQ19N RV9NT0RFKFRFTE9QVF9BVVRIRU5USUNBVElPTikgPSBUTl9OR19NVTsKLQkJYnJlYWs7Ci0KLQkg ICAgICBjYXNlIEFVVEhUWVBFX0tFUkJFUk9TX1Y1OgotCQlhdXRoX3R5cGVfdXNlclswXSA9IEFV VEhUWVBFX0tFUkJFUk9TX1Y1OwotCQlhdXRoX3R5cGVfdXNlclsxXSA9IEFVVEhUWVBFX05VTEw7 Ci0JCVRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA9IFROX05HX01V OwotCQlURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID0gVE5fTkdf TVU7Ci0JCWJyZWFrOwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0JICAgIH0KLQl9Ci0JLyoK LQkgICBJZiB0aGUgdXNlciByZXF1aXJlcyBhIHBhcnRpY3VsYXIgdHlwZSBvZiBLZXJiZXJvcyBj b25uZWN0aW9uLAotCSAgIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgdmFsaWQgVEdULgotCSovCi0JbWFr ZXN0cigmc2xtc2csIkF1dGhlbnRpY2F0aW9uIGZhaWx1cmUiKTsKLQlpZiAoKHR0bnByb3RvID09 IE5QX1RFTE5FVCB8fCB0dG5wcm90byA9PSBOUF9LRVJNSVQpICYmCi0JICAgIChsaW5lWzBdID09 ICcqJyAmJgotCSAgICAgVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04p ID09IFROX05HX01VIHx8Ci0JICAgICBsaW5lWzBdICE9ICcqJyAmJgotCSAgICAgVEVMT1BUX0RF Rl9DX01FX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA9PSBUTl9OR19NVSkKLQkgICAgKSB7 Ci0jaWZkZWYgQ0tfS0VSQkVST1MKLQkgICAgaWYgKCBhdXRoX3R5cGVfdXNlclswXSA9PSBBVVRI VFlQRV9LRVJCRVJPU19WNCApIHsKLQkJZXh0ZXJuIGludCBrcmI0X2F1dG9nZXQ7Ci0JCWlmICgh Y2tfa3JiNF9pc19pbnN0YWxsZWQoKSkKLQkJICByZXR1cm4oY3hfZmFpbChtc2csCi0JICAgICAg IlJlcXVpcmVkIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCAoS2VyYmVyb3MgNCkgaXMgbm90IGluc3Rh bGxlZCIpKTsKLSNpZmRlZiBDT01NRU5UCi0JCS8qIFRoaXMgY29kZSByZXN1bHRzIGluIGZhbHNl IGZhaWx1cmVzIHdoZW4gdXNpbmcgKi8KLQkJLyoga2VyYmVyb3MgdG8gbWFjaGluZXMgaW4gcmVh bG1zIG90aGVyIHRoYW4gdGhlICAqLwotCQkvKiBkZWZhdWx0IHNpbmNlIHdlIGRvbid0IGtub3cg dGhlIHJlYWxtIG9mIHRoZSAgICovCi0JCS8qIG90aGVyIG1hY2hpbmUgdW50aWwgcGVyZm9ybSB0 aGUgcmV2ZXJzZSBETlMgICAgKi8KLQkJLyogbG9va3VwLiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqLwotCQllbHNlIGlmIChsaW5lWzBdICE9ICcqJyAmJiAhY2tfa3Ji NF9pc190Z3RfdmFsaWQoKSAmJgotCQkJICAgKCFrcmI0X2F1dG9nZXQgfHwKLQkJCSAgICBrcmI0 X2F1dG9nZXQgJiYgIWNrX2tyYjRfYXV0b2dldF9UR1QoTlVMTCkpKSB7Ci0JCSAgICByZXR1cm4o Y3hfZmFpbChtc2csCi0JCQkgICAiS2VyYmVyb3MgNDogVGlja2V0IEdldHRpbmcgVGlja2V0IG5v dCB2YWxpZCIpKTsKLQkJfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkgICAgfSBlbHNlIGlmIChh dXRoX3R5cGVfdXNlclswXSA9PSBBVVRIVFlQRV9LRVJCRVJPU19WNSkgewotCQlleHRlcm4gaW50 IGtyYjVfYXV0b2dldDsKLQkJaWYgKCFja19rcmI1X2lzX2luc3RhbGxlZCgpKSB7Ci0JCSAgICBy ZXR1cm4oY3hfZmFpbChtc2csCi0JICAgIlJlcXVpcmVkIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCAo S2VyYmVyb3MgNSkgaXMgbm90IGluc3RhbGxlZCIpKTsKLQkJfQotI2lmZGVmIENPTU1FTlQKLQkJ LyogVGhpcyBjb2RlIHJlc3VsdHMgaW4gZmFsc2UgZmFpbHVyZXMgd2hlbiB1c2luZyAqLwotCQkv KiBrZXJiZXJvcyB0byBtYWNoaW5lcyBpbiByZWFsbXMgb3RoZXIgdGhhbiB0aGUgICovCi0JCS8q IGRlZmF1bHQgc2luY2Ugd2UgZG9uJ3Qga25vdyB0aGUgcmVhbG0gb2YgdGhlICAgKi8KLQkJLyog b3RoZXIgbWFjaGluZSB1bnRpbCBwZXJmb3JtIHRoZSByZXZlcnNlIEROUyAgICAqLwotCQkvKiBs b29rdXAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JCWVsc2Ug aWYgKGxpbmVbMF0gIT0gJyonICYmICFja19rcmI1X2lzX3RndF92YWxpZCgpICYmCi0JCQkgICAo IWtyYjVfYXV0b2dldCB8fAotCQkJICAgIGtyYjVfYXV0b2dldCAmJiAhY2tfa3JiNV9hdXRvZ2V0 X1RHVChOVUxMKSkpIHsKLQkJICAgIHJldHVybihjeF9mYWlsKG1zZywKLQkJCSAiS2VyYmVyb3Mg NTogVGlja2V0IEdldHRpbmcgVGlja2V0IG5vdCB2YWxpZC4iKSk7Ci0JCX0KLSNlbmRpZiAvKiBD T01NRU5UICovCi0JICAgIH0KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotI2lmZGVmIE5UCi0J ICAgIGlmIChhdXRoX3R5cGVfdXNlclswXSA9PSBBVVRIVFlQRV9OVExNKSB7Ci0JCWlmICghY2tf bnRsbV9pc19pbnN0YWxsZWQoKSkgewotCQkgICAgcmV0dXJuKGN4X2ZhaWwobXNnLAotCQkgICAi UmVxdWlyZWQgYXV0aGVudGljYXRpb24gbWV0aG9kIChOVExNKSBpcyBub3QgaW5zdGFsbGVkIikp OwotCQl9IGVsc2UgaWYgKGxpbmVbMF0gIT0gJyonICYmICFja19udGxtX2lzX3ZhbGlkKDApKSB7 Ci0JCSAgICByZXR1cm4oY3hfZmFpbChtc2csIk5UTE06IENyZWRlbnRpYWxzIGFyZSB1bmF2YWls YWJsZS4iKSk7Ci0JCX0KLQkgICAgfQotI2VuZGlmIC8qIE5UICovCi0jaWZkZWYgQ0tfU1NMCi0J ICAgIGlmIChhdXRoX3R5cGVfdXNlclswXSA9PSBBVVRIVFlQRV9TU0wpIHsKLQkJaWYgKCFja19z c2xlYXlfaXNfaW5zdGFsbGVkKCkpIHsKLQkJICAgIHJldHVybihjeF9mYWlsKG1zZywKLQkJICAg ICAiUmVxdWlyZWQgYXV0aGVudGljYXRpb24gbWV0aG9kIChTU0wpIGlzIG5vdCBpbnN0YWxsZWQi KSk7Ci0JCX0KLQkgICAgfQotI2VuZGlmIC8qIENLX1NTTCAqLwotI2lmZGVmIENLX1NSUAotCSAg ICBpZiAoYXV0aF90eXBlX3VzZXJbMF0gPT0gQVVUSFRZUEVfU1JQKSB7Ci0JCWlmICghY2tfc3Jw X2lzX2luc3RhbGxlZCgpKSB7Ci0JCSAgICByZXR1cm4oY3hfZmFpbChtc2csCi0JCSAgICAgIlJl cXVpcmVkIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCAoU1JQKSBpcyBub3QgaW5zdGFsbGVkIikpOwot CQl9Ci0JICAgIH0KLSNlbmRpZiAvKiBDS19TUlAgKi8KLQl9Ci0jZW5kaWYgLyogQ0tfQVVUSEVO VElDQVRJT04gKi8KLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0JaWYgKCh0dG5wcm90byA9PSBOUF9U RUxORVQgfHwgdHRucHJvdG8gPT0gTlBfS0VSTUlUKSAmJgotCSAgICAgcGFyYW0yID4gLTEpIHsK LQkgICAgaWYgKCFzbF9jeF9zYXZlZCkgewotCQlzbF9jeF90eXBlID0gY3hfdHlwZTsKLQkJc2xf Y3hfc2F2ZWQgPSAxOwotCSAgICB9Ci0JICAgIGlmICghc2xfdG9wdF9lX3Nfc2F2ZWQpIHsKLQkJ c2xfdG9wdF9lX3N1ID0gVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfRU5DUllQVElPTik7Ci0J CXNsX3RvcHRfZV9zbSA9IFRFTE9QVF9ERUZfU19NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKTsK LQkJc2xfdG9wdF9lX3Nfc2F2ZWQgPSAxOwotCSAgICB9Ci0JICAgIGlmICghc2xfdG9wdF9lX2Nf c2F2ZWQpIHsKLQkJc2xfdG9wdF9lX2N1ID0gVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfRU5D UllQVElPTik7Ci0JCXNsX3RvcHRfZV9jbSA9IFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9F TkNSWVBUSU9OKTsKLQkJc2xfdG9wdF9lX2Nfc2F2ZWQgPSAxOwotCSAgICB9Ci0JICAgIGN4X3R5 cGUgPSBwYXJhbTI7Ci0JICAgIGlmIChjeF90eXBlID09IENYX0FVVE8pIHsKLQkJVEVMT1BUX0RF Rl9TX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SUTsKLQkJVEVMT1BUX0RFRl9T X01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUlE7Ci0JCVRFTE9QVF9ERUZfQ19V X01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUlE7Ci0JCVRFTE9QVF9ERUZfQ19NRV9N T0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JROwotCSAgICB9IGVsc2UgaWYgKGN4X3R5 cGUgPT0gQ1hfTk9ORSkgewotCQlURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9O KSA9IFROX05HX1JGOwotCQlURUxPUFRfREVGX1NfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikg PSBUTl9OR19SRjsKLQkJVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBU Tl9OR19SRjsKLQkJVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5f TkdfUkY7Ci0JICAgIH0gZWxzZSB7Ci0JCVRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX0VOQ1JZ UFRJT04pID0gVE5fTkdfTVU7Ci0JCVRFTE9QVF9ERUZfU19NRV9NT0RFKFRFTE9QVF9FTkNSWVBU SU9OKSA9IFROX05HX01VOwotCQlURUxPUFRfREVGX0NfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9O KSA9IFROX05HX01VOwotCQlURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikg PSBUTl9OR19NVTsKLQkgICAgfQotCX0KLQlpZiAodHRucHJvdG8gPT0gTlBfRUs0TE9HSU4gfHwg dHRucHJvdG8gPT0gTlBfRUs1TE9HSU4gfHwKLQkgICAgKHR0bnByb3RvID09IE5QX1RFTE5FVCB8 fCB0dG5wcm90byA9PSBOUF9LRVJNSVQpICYmCi0JICAgICgobGluZVswXSA9PSAnKicgJiYKLQkg ICAgICBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9PSBUTl9OR19NVSAm JgotCSAgICAgIFRFTE9QVF9ERUZfU19NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9PSBUTl9O R19NVSkgfHwKLQkgICAgIChsaW5lWzBdICE9ICcqJyAmJgotCSAgICAgIFRFTE9QVF9ERUZfQ19V X01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID09IFROX05HX01VICYmCi0JICAgICAgVEVMT1BUX0RF Rl9DX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID09IFROX05HX01VKSkKLQkgICAgKSB7Ci0J ICAgIGlmICghY2tfY3J5cHRfaXNfaW5zdGFsbGVkKCkpIHsKLQkJcmV0dXJuKGN4X2ZhaWwobXNn LAotCQkgICJSZXF1aXJlZCBFbmNyeXB0aW9uIG1ldGhvZHMgYXJlIG5vdCBpbnN0YWxsZWQiKSk7 Ci0JICAgIH0KLQl9Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotI2lmZGVmIFJMT0dDT0RF Ci0jaWZkZWYgQ0tfS0VSQkVST1MKLSNpZmRlZiBLUkI0Ci0JaWYgKHR0bnByb3RvID09IE5QX0s0 TE9HSU4gfHwgdHRucHJvdG8gPT0gTlBfRUs0TE9HSU4pIHsKLQkgICAgZXh0ZXJuIGludCBrcmI0 X2F1dG9nZXQ7Ci0JICAgIGNoYXIgdGd0WzI1Nl07Ci0JICAgIGNoYXIgKiByZWFsbTsKLQotCSAg ICAvKiBXZSBkb24ndCBoYXZlIHRoZSBmdWxsIGhvc3RuYW1lIGF0IHlldCBzbyAgKi8KLQkgICAg Lyogd2UgZG8gYSBETlMgbG9va3VwIGJlZm9yZSBjYWxsaW5nIHR0b3BlbigpICovIAotCi0JICAg IHJlYWxtID0gY2tfa3JiNF9yZWFsbW9maG9zdChja2dldGZxaG9zdG5hbWUoaG9zdG5hbWUpKTsK LQkgICAgY2ttYWttc2codGd0LDI1Niwia3JidGd0LiIscmVhbG0sIkAiLHJlYWxtKTsKLQkgICAg aWYgKCFja19rcmI0X2lzX2luc3RhbGxlZCgpKSB7Ci0JCXJldHVybihjeF9mYWlsKG1zZywKLQkJ ICJSZXF1aXJlZCBhdXRoZW50aWNhdGlvbiBtZXRob2QgKEtlcmJlcm9zIDQpIGlzIG5vdCBpbnN0 YWxsZWQiCi0JCQkgICAgICAgKSk7Ci0JICAgIH0gZWxzZSB7Ci0JCWlmICgoY2tfa3JiNF90a3Rf aXN2YWxpZCh0Z3QpIDw9IDApICYmCi0JCSAgICAoIWtyYjRfYXV0b2dldCB8fAotCQkgICAgIGty YjRfYXV0b2dldCAmJiAhY2tfa3JiNF9hdXRvZ2V0X1RHVChyZWFsbSkpKSB7Ci0JCSAgICByZXR1 cm4oY3hfZmFpbChtc2csCi0JCQkgICAiS2VyYmVyb3MgNDogVGlja2V0IEdldHRpbmcgVGlja2V0 IG5vdCB2YWxpZCIpKTsKLQkJfQotCSAgICB9Ci0JfQotI2VuZGlmIC8qIEtSQjQgKi8KLSNpZmRl ZiBLUkI1Ci0JaWYgKHR0bnByb3RvID09IE5QX0s1TE9HSU4gfHwgdHRucHJvdG8gPT0gTlBfRUs1 TE9HSU4gfHwKLQkgICAgdHRucHJvdG8gPT0gTlBfSzVVMlUpCi0JewotCSAgICBleHRlcm4gaW50 IGtyYjVfYXV0b2dldDsKLQkgICAgY2hhciB0Z3RbMjU2XTsKLQkgICAgY2hhciAqIHJlYWxtOwot Ci0JICAgIC8qIE11c3QgZ2V0IGZ1bGwgaG9zdG5hbWUgYmVmb3JlIGNhbGxpbmcgdHRvcGVuKCkg Ki8KLQotCSAgICByZWFsbSA9IGNrX2tyYjVfcmVhbG1vZmhvc3QoY2tnZXRmcWhvc3RuYW1lKGhv c3RuYW1lKSk7Ci0JICAgIGNrbWFrbXNnKHRndCwyNTYsImtyYnRndC8iLHJlYWxtLCJAIixyZWFs bSk7Ci0KLQkgICAgaWYgKCFja19rcmI1X2lzX2luc3RhbGxlZCgpKSB7Ci0JCXJldHVybihjeF9m YWlsKG1zZywKLSAgICAgICAgICAgICAgICAgIlJlcXVpcmVkIGF1dGhlbnRpY2F0aW9uIG1ldGhv ZCAoS2VyYmVyb3MgNSkgbm90IGluc3RhbGxlZCIpKTsKLQkgICAgfSBlbHNlIGlmICghKChja19r cmI1X3RrdF9pc3ZhbGlkKE5VTEwsdGd0KSA+IDApIHx8Ci0JCQkgIGNrX2tyYjVfaXNfdGd0X3Zh bGlkKCkpICYmCi0JCSAgICAgICAoIWtyYjVfYXV0b2dldCB8fAotCQkJa3JiNV9hdXRvZ2V0ICYm ICFja19rcmI1X2F1dG9nZXRfVEdUKHJlYWxtKSkpIHsKLQkJcmV0dXJuKGN4X2ZhaWwobXNnLAot CQkgICAgICAgIktlcmJlcm9zIDU6IFRpY2tldCBHZXR0aW5nIFRpY2tldCBub3QgdmFsaWQuIikp OwotCSAgICB9Ci0JfQotI2VuZGlmIC8qIEtSQjUgKi8KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAq LwotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0KLSNpZm5kZWYgTk9TUEwKLSNpZmRlZiBSTE9HQ09E RQotCWlmICh1c2VybmFtZSkgewotCSAgICBpZiAoIXNsX3VpZF9zYXZlZCkgewotCQlja3N0cm5j cHkoc2xfdWlkYnVmLHVpZGJ1ZixVSURCVUZMRU4pOwotCQlzbF91aWRfc2F2ZWQgPSAxOwotCSAg ICB9Ci0JICAgIGNrc3RybmNweSh1aWRidWYsdXNlcm5hbWUsVUlEQlVGTEVOKTsKLQkgICAgdWlk ZmxhZyA9IDE7Ci0JfQotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0jaWZkZWYgVE5DT0RFCi0JaWYg KCFzbF90bl9zYXZlZCkgewotCSAgICBzbF90bl93YWl0ID0gdG5fd2FpdF9mbGc7Ci0JICAgIHNs X3RuX3NhdmVkID0gMTsKLQl9Ci0JdG5fd2FpdF9mbGcgPSBwYXJhbTM7Ci0jZW5kaWYgLyogVE5D T0RFICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLQl9IC8qIGlmIChuZXQgPT0gTkVUX1RDUEIpICov Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0KLSNpZm5kZWYgTk9TUEwKLSNpZmRlZiBDS19TRUNV UklUWQotCWlmIChwYXNzd29yZCkgewotCSAgICBpZiAocGFzc3dvcmRbMF0pIHsKLQkJY2tzdHJu Y3B5KHB3YnVmLHBhc3N3b3JkLFBXQlVGTCsxKTsKLQkJcHdmbGcgPSAxOwotCQlwd2NyeXB0ID0g MDsKLQkgICAgfSBlbHNlCi0JCXB3ZmxnID0gMDsKLQl9Ci0jZW5kaWYgLyogQ0tfU0VDVVJJVFkg Ki8KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0JLyogVHJ5IHRvIG9wZW4gLSBuZXR3b3JrICovCi0J Y2tzdHJuY3B5KHR0bmFtZSxsaW5lLFRUTkFNTEVOKTsKLQl5ID0gdHRvcGVuKGxpbmUsICZfbG9j YWwsIG1kbXR5cCwgMCApOwotCi0jaWZuZGVmIE5PSFRUUAotCS8qICBJZiB0aGUgY29ubmVjdGlv biBmYWlsZWQgYW5kIHdlIGFyZSB1c2luZyBhbiBIVFRQIFByb3h5Ci0JICogIGFuZCB0aGUgcmVh c29uIGZvciB0aGUgZmFpbHVyZSB3YXMgYW4gYXV0aGVudGljYXRpb24KLQkgKiAgZXJyb3IsIHRo ZW4gd2UgbmVlZCB0byBnaXZlIHRoZSB1c2VyIHRvIGFiaWxpdHkgdG8KLQkgKiAgZW50ZXIgYSB1 c2VybmFtZSBhbmQgcGFzc3dvcmQsIGp1c3QgbGlrZSBhIGJyb3dzZXIuCi0JICoKLQkgKiAgSSB0 cmllZCB0byBkbyBhbGwgb2YgdGhpcyB3aXRoaW4gdGhlIG5ldG9wZW4oKSBjYWxsCi0JICogIGJ1 dCBpdCBpcyBtdWNoIHRvbyBtdWNoIHdvcmsuCi0JICovCi0Jd2hpbGUgKHkgPCAwICYmIHRjcF9o dHRwX3Byb3h5ICE9IE5VTEwgKSB7Ci0KLQkgICAgaWYgKHRjcF9odHRwX3Byb3h5X2Vycm5vID09 IDQwMSB8fAotCQl0Y3BfaHR0cF9wcm94eV9lcnJubyA9PSA0MDcgKSB7Ci0JCWNoYXIgdWlkW1VJ REJVRkxFTl07Ci0JCWNoYXIgcHdkWzI1Nl07Ci0gICAgICAgICAgICAgICAgc3RydWN0IHR4dGJv eCB0YlsyXTsKLSAgICAgICAgICAgICAgICBpbnQgb2s7Ci0KLSAgICAgICAgICAgICAgICB0Ylsw XS50X2J1ZiA9IHVpZDsKLSAgICAgICAgICAgICAgICB0YlswXS50X2xlbiA9IFVJREJVRkxFTjsK LSAgICAgICAgICAgICAgICB0YlswXS50X2xibCA9ICJQcm94eSBVc2VyaWQ6ICI7Ci0gICAgICAg ICAgICAgICAgdGJbMF0udF9kZmx0ID0gTlVMTDsKLSAgICAgICAgICAgICAgICB0YlswXS50X2Vj aG8gPSAxOwotICAgICAgICAgICAgICAgIHRiWzFdLnRfYnVmID0gcHdkOwotICAgICAgICAgICAg ICAgIHRiWzFdLnRfbGVuID0gMjU2OwotICAgICAgICAgICAgICAgIHRiWzFdLnRfbGJsID0gIlBy b3h5IFBhc3NwaHJhc2U6ICI7Ci0gICAgICAgICAgICAgICAgdGJbMV0udF9kZmx0ID0gTlVMTDsK LSAgICAgICAgICAgICAgICB0YlsxXS50X2VjaG8gPSAyOwotCi0gICAgICAgICAgICAgICAgb2sg PSB1cV9tdHh0KCJQcm94eSBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUmVxdWlyZWRcbiIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAyLCB0Yik7Ci0KLQkJaWYgKG9rICYmIHVp ZFswXSkgewotCQkgICAgY2hhciAqIHByb3h5X3VzZXIsICogcHJveHlfcHdkOwotCi0JCSAgICBw cm94eV91c2VyID0gdGNwX2h0dHBfcHJveHlfdXNlcjsKLQkJICAgIHByb3h5X3B3ZCAgPSB0Y3Bf aHR0cF9wcm94eV9wd2Q7Ci0KLQkJICAgIHRjcF9odHRwX3Byb3h5X3VzZXIgPSB1aWQ7Ci0JCSAg ICB0Y3BfaHR0cF9wcm94eV9wd2QgPSBwd2Q7Ci0KLQkJICAgIGNrc3RybmNweSh0dG5hbWUsbGlu ZSxUVE5BTUxFTik7Ci0JCSAgICB5ID0gdHRvcGVuKGxpbmUsICZfbG9jYWwsIG1kbXR5cCwgMCk7 Ci0JCSAgICBtZW1zZXQocHdkLDAsc2l6ZW9mKHB3ZCkpOwotCQkgICAgdGNwX2h0dHBfcHJveHlf dXNlciA9IHByb3h5X3VzZXI7Ci0JCSAgICB0Y3BfaHR0cF9wcm94eV9wd2QgPSBwcm94eV9wd2Q7 Ci0JCX0gZWxzZQotCQkgIGJyZWFrOwotCSAgICB9IGVsc2UKLQkgICAgICBicmVhazsKLQl9Ci0j ZW5kaWYgLyogTk9IVFRQICovCi0JaWYgKHkgPCAwKSB7Ci0JICAgIHNscmVzdG9yKCk7Ci0JICAg IG1ha2VzdHIoJnNsbXNnLCJOZXR3b3JrIGNvbm5lY3Rpb24gZmFpbHVyZSIpOwotI2lmZGVmIFZN UwotCSAgICBpZiAobXNnICYmIGhpbnRzICYmICF4Y21kc3JjICYmIElTX1JMT0dJTigpKSB7Ci0J CW1ha2VzdHIoJnNsbXNnLCJSTE9HSU4gZmFpbHVyZSIpOwotCQlpZiAgKHNvY2tldF9lcnJubyA9 PSBFQUNDRVMpIHsKLQkJICAgIHByaW50ZigiKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7 Ci0JCSAgICBwcmludGYoCi0JICAgIkhpbnQ6IFJMT0dJTiByZXF1aXJlcyBwcml2aWxlZ2VzIHRv IG9wZW4gYW4gb3V0Ym91bmQgcG9ydC5cbiIpOwotCQkgICAgcHJpbnRmKAotCQkgICAgIihVc2Ug U0VUIEhJTlRTIE9GRiB0byBzdXBwcmVzcyBmdXR1cmUgaGludHMuKVxuIik7Ci0JCSAgICBwcmlu dGYoIioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOwotCQl9Ci0JICAgIH0KLSNlbHNlICAv KiBOb3QgVk1TLi4uICovCi0JICAgIGlmIChlcnJubykgewotCQlpbnQgeDsKLQkJZGVidWcoRjEx MSwic2V0IGhvc3QgbGluZSwgZXJybm8iLCIiLGVycm5vKTsKLQkJbWFrZXN0cigmc2xtc2csY2tf ZXJyc3RyKCkpOwotCQlpZiAobXNnKSB7Ci0jaWZkZWYgT1MyCi0JCSAgICBwcmludGYoIkNhbid0 IGNvbm5lY3QgdG8gJXNcbiIsbGluZSk7Ci0jZWxzZSAvKiBPUzIgKi8KLSNpZmRlZiBVTklYCi0J CSAgICBpZiAoaGludHMgJiYgIXhjbWRzcmMgJiYgSVNfUkxPR0lOKCkpIHsKLQkJCW1ha2VzdHIo JnNsbXNnLCJSTE9HSU4gZmFpbHVyZSIpOwotCQkJcHJpbnRmKCIqKioqKioqKioqKioqKioqKioq KioqKioqXG4iKTsKLQkJCXByaW50ZigKLQkgIkhpbnQ6IFJMT0dJTiByZXF1aXJlcyBwcml2aWxl Z2VzIHRvIG9wZW4gYW4gb3V0Ym91bmQgcG9ydC5cbiIpOwotCQkJcHJpbnRmKAotCSAiKFVzZSBT RVQgSElOVFMgT0ZGIHRvIHN1cHByZXNzIGZ1dHVyZSBoaW50cy4pXG4iKTsKLQkJCXByaW50Zigi KioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7Ci0JCSAgICB9Ci0jZW5kaWYgLyogVU5JWCAq LwotI2VuZGlmIC8qIE9TMiAqLwotCQl9IGVsc2UgcHJpbnRmKCJDYW4ndCBjb25uZWN0IHRvICVz XG4iLGxpbmUpOwotCSAgICB9IGVsc2UKLSNlbmRpZiAvKiBWTVMgKi8KLQkgICAgICBpZiAobXNn KSBwcmludGYoIkNhbid0IG9wZW4gY29ubmVjdGlvbiB0byAlc1xuIixsaW5lKTsKLQkgICAgY29u dGludWU7Ci0JfSBlbHNlIHsKLQkgICAgc3VjY2VzcyA9IDE7Ci0jaWZuZGVmIE5PRElBTAotCSAg ICBkaWFsc3RhID0gRElBX1VOSzsKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLQkgICAgc3dpdGNoIChu ZXQpIHsKLQkgICAgICBjYXNlIE5FVF9UQ1BBOgotCSAgICAgIGNhc2UgTkVUX1RDUEI6Ci0JCWN4 dHlwZSA9IENYVF9UQ1BJUDsKLSNpZmRlZiBDT01NRU5UCi0vKiBUaGlzIHdvcmtzIGJ1dCBpdCBt ZXNzZXMgdXAgaW50ZXJhY3RpdmUgYW5vbnltb3VzIGxvZ2luICovCi0jaWZuZGVmIE5PWEZFUgot I2lmZGVmIElLU19PUFRJT04KLQkJLyogSWYgd2UgaGF2ZSBjb25uZWN0ZWQgdG8gYW4gSW50ZXJu ZXQgS2VybWl0IHNlcnZpY2UgKi8KLQkJLyogYW5kIGEgL1VTRVI6IHN3aXRjaCB3YXMgZ2l2ZW4s IHRoZW4gbG9nIGluLiAqLwotCi0JCWlmIChURUxPUFRfVShURUxPUFRfS0VSTUlUKSB8fCBURUxP UFRfTUUoVEVMT1BUX0tFUk1JVCkpIHsKLQkJICAgIGRlYnVnKEYxMTEsImN4X25ldCBJS1NEIC9V U0VSOiIsdWlkYnVmLGhhdmV1c2VyKTsKLQkJICAgIGlmIChoYXZldXNlciAvKiAmJiBjeCA9PSAw ICovICkgeyAvKiAvVVNFUjogZ2l2ZW4gKi8KLQkJCWNoYXIgKiBwc3cgPSBwd2J1ZjsgLyogRG8g d2UgaGF2ZSBhIHBhc3N3b3JkPyAqLwotCQkJaWYgKCEqcHN3KSB7ICAgICAgICAvKiBOby4uLiAq LwotCQkJICAgIGlmICghc3RyY21wKHVpZGJ1ZiwiYW5vbnltb3VzIikgfHwKLQkJCQkhc3RyY21w KHVpZGJ1ZiwiZnRwIikpIHsKLQkJCQlleHRlcm4gY2hhciBteWhvc3RbXTsKLQkJCQljaGFyICog dSA9IChjaGFyICopc2xfdWlkYnVmOwotCQkJCWNoYXIgKiBoID0gKGNoYXIgKilteWhvc3Q7Ci0J CQkJaWYgKCEqdSkgdSA9ICJub2JvZHkiOwotCQkJCWlmICghKmgpIGggPSAibm93aGVyZSI7Ci0J CQkJY2ttYWttc2codG1wYnVmLFRNUEJVRlNJWix1LCJAIixoLE5VTEwpOwotCQkJCXBzdyA9IHRt cGJ1ZjsKLQkJCQlkZWJ1ZyhGMTEwLCJjeF9uZXQgSUtTRCBhbm9uIixwc3csMCk7Ci0JCQkgICAg fSBlbHNlIHsKLQkJCQlyZWFkcGFzcygiIFBhc3N3b3JkOiAiLHB3YnVmLFBXQlVGTCk7Ci0JCQkg ICAgfQotCQkJfQotCQkJc3N0YXRlID0gc2V0Z2VuKCdJJyx1aWRidWYscHN3LCIiKTsKLQkJICAg IH0KLQkJfQotI2VuZGlmIC8qIElLU19PUFRJT04gKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSNl bmRpZiAvKiBDT01NRU5UICovCi0JCWJyZWFrOwotCSAgICAgIGNhc2UgTkVUX1NTSDoKLQkJY3h0 eXBlID0gQ1hUX1NTSDsKLQkJZHVwbGV4ID0gMDsgICAgICAgICAvKiBSZW1vdGUgZWNobyAqLwot CQlicmVhazsKLQkgICAgICBjYXNlIE5FVF9TTEFUOgotCQljeHR5cGUgPSBDWFRfTEFUOwotCQli cmVhazsKLQkgICAgICBjYXNlIE5FVF9TWDI1OgotCSAgICAgIGNhc2UgTkVUX0lYMjU6Ci0JICAg ICAgY2FzZSBORVRfSFgyNToKLQkgICAgICBjYXNlIE5FVF9WWDI1OgotCQljeHR5cGUgPSBDWFRf WDI1OwotCQlicmVhazsKLQkgICAgICBjYXNlIE5FVF9CSU9TOgotCQljeHR5cGUgPSBDWFRfTkVU QklPUzsKLQkJYnJlYWs7Ci0JICAgICAgY2FzZSBORVRfRklMRToKLQkgICAgICBjYXNlIE5FVF9Q SVBFOgotCSAgICAgIGNhc2UgTkVUX0NNRDoKLQkgICAgICBjYXNlIE5FVF9ETEw6Ci0JICAgICAg Y2FzZSBORVRfUFRZOgotCQljeHR5cGUgPSBDWFRfUElQRTsKLQkJYnJlYWs7Ci0JICAgICAgZGVm YXVsdDoKLQkJY3h0eXBlID0gQ1hUX1BJUEU7Ci0JCWJyZWFrOwotCSAgICB9Ci0JICAgIGJyZWFr OwotCX0KLSAgICB9IC8qIGZvci1sb29wICovCi0gICAgcyA9IGxpbmU7Ci0KLSAgICBkZWJ1ZyhG MTAxLCJjeF9uZXQgcG9zdCB0dG9wZW4gc3VjY2VzcyIsIiIsc3VjY2Vzcyk7Ci0gICAgaWYgKCFz dWNjZXNzKSB7Ci0gICAgICAgIGxvY2FsID0gZGZsb2M7ICAgICAgICAgICAgICAgICAgLyogR28g YmFjayB0byBub3JtYWwgKi8KLSNpZm5kZWYgTUFDCi0gICAgICAgIGNrc3RybmNweSh0dG5hbWUs ZGZ0dHksVFROQU1MRU4pOyAvKiBSZXN0b3JlIGRlZmF1bHQgdHR5IG5hbWUgKi8KLSNlbmRpZiAv KiBNQUMgKi8KLSAgICAgICAgc3BlZWQgPSB0dGdzcGQoKTsKLSAgICAgICAgbmV0d29yayA9IDA7 ICAgICAgICAgICAgICAgICAgICAvKiBObyBuZXR3b3JrIGNvbm5lY3Rpb24gYWN0aXZlICovCi0g ICAgICAgIGhhdmVsaW5lID0gMDsKLSAgICAgICAgaWYgKG1kbXR5cCA8IDApIHsgICAgICAgICAg ICAgICAvKiBTd2l0Y2hpbmcgZnJvbSBuZXQgdG8gYXN5bmM/ICovCi0gICAgICAgICAgICBpZiAo bWRtc2F2ID4gLTEpICAgICAgICAgICAgLyogUmVzdG9yZSBtb2RlbSB0eXBlIGZyb20gbGFzdCAq LwotICAgICAgICAgICAgICBtZG10eXAgPSBtZG1zYXY7ICAgICAgICAgIC8qIFNFVCBNT0RFTSBj b21tYW5kLCBpZiBhbnkuICovCi0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIG1kbXR5 cCA9IDA7Ci0gICAgICAgICAgICBtZG1zYXYgPSAtMTsKLSAgICAgICAgfQotICAgICAgICByZXR1 cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBmYWlsdXJlICovCi0gICAgfQot ICAgIGlmIChfbG9jYWwgPiAtMSkgbG9jYWwgPSBfbG9jYWw7ICAgIC8qIE9wZW5lZCBvaywgc2V0 IGxvY2FsL3JlbW90ZS4gKi8KLSAgICBtYWtlc3RyKCZzbG1zZyxOVUxMKTsKLSAgICBuZXR3b3Jr ID0gKG1kbXR5cCA8IDApOyAgICAgICAgICAgICAvKiBSZW1lbWJlciBjb25uZWN0aW9uIHR5cGUu ICovCi0gICAgY2tzdHJuY3B5KHR0bmFtZSxzLFRUTkFNTEVOKTsgICAgICAgLyogQ29weSBuYW1l IGludG8gcmVhbCBwbGFjZS4gKi8KLSAgICBkZWJ1ZyhGMTEwLCJjeF9uZXQgb2siLHR0bmFtZSww KTsKLSAgICBkZWJ1ZyhGMTAxLCJjeF9uZXQgbmV0d29yayIsIiIsbmV0d29yayk7Ci0jaWZuZGVm IE5PWEZFUgotICAgIGlmICgocmVsaWFibGUgIT0gU0VUX09GRiB8fCAhc2V0cmVsaWFibGUpKSAv KiBBc3N1bWUgbm90IHJlbGlhYmxlLiAqLwotICAgICAgcmVsaWFibGUgPSBTRVRfT0ZGOwotI2Vu ZGlmIC8qIE5PWEZFUiAqLwotICAgIGlmICghbmV0d29yayB8fCBpc3RuY29tcG9ydCgpKQkKLSAg ICAgIHNwZWVkID0gdHRnc3BkKCk7ICAgICAgICAgICAgICAgICAvKiBHZXQgdGhlIGN1cnJlbnQg c3BlZWQuICovCi0gICAgZGVidWcoRjEwMSwiY3hfbmV0IGxvY2FsIiwiIixsb2NhbCk7Ci0gICAg aWYgKG5ldHdvcmspIHsKLSAgICAgICAgZGVidWcoRjEwMSwiY3hfbmV0IG5ldCIsIiIsbmV0KTsK LSNpZm5kZWYgTk9YRkVSCi0gICAgICAgIC8qIEZvcmNlIHByZWZpeGluZyBvZiAyNTUgb24gVENQ L0lQIGNvbm5lY3Rpb25zLi4uICovCi0gICAgICAgIGlmIChuZXQgPT0gTkVUX1RDUEIKLSNpZmRl ZiBTU0hCVUlMVElOCi0gICAgICAgICAgICAgfHwgbmV0ID09IE5FVF9TU0gKLSNlbmRpZiAvKiBT U0hCVUlMVElOICovCi0gICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJj eF9uZXQgcmVsaWFibGUgQSIsIiIscmVsaWFibGUpOwotI2lmZGVmIENLX1NQRUVECi0gICAgICAg ICAgICBjdGxwWyh1bnNpZ25lZCkyNTVdID0gMTsKLSNlbmRpZiAvKiBDS19TUEVFRCAqLwotICAg ICAgICAgICAgaWYgKChyZWxpYWJsZSAhPSBTRVRfT0ZGIHx8ICFzZXRyZWxpYWJsZSkpIHsKLSNp ZmRlZiBUTl9DT01QT1JUCi0gICAgICAgICAgICAgICAgaWYgKGlzdG5jb21wb3J0KCkpIHsgICAg LyogVGVsbmV0IGNvbW11bmljYXRpb24gcG9ydCAqLwotICAgICAgICAgICAgICAgICAgICByZWxp YWJsZSA9IFNFVF9PRkY7IC8qIFRyYW5zcG9ydCBpcyBub3QgcmVsaWFibGUgKi8KLSAgICAgICAg ICAgICAgICAgICAgZGVidWcoRjEwMSwiY3hfbmV0IHJlbGlhYmxlIGlzdG5jb21wb3J0KCkiLCIi LDEpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlbGlh YmxlID0gU0VUX09OOyAgLyogVHJhbnNwb3J0IGlzIHJlbGlhYmxlIGVuZCB0byBlbmQgKi8KLSAg ICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiY3hfbmV0IHJlbGlhYmxlIGlzdG5jb21wb3J0 KCkiLCIiLDApOwotICAgICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgcmVs aWFibGUgPSBTRVRfT047ICAgICAgLyogVHJhbnNwb3J0IGlzIHJlbGlhYmxlIGVuZCB0byBlbmQg Ki8KLSNlbmRpZiAvKiBpZmRlZiBUTl9DT01QT1JUICovCi0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJjeF9uZXQgcmVsaWFibGUgQiIsIiIscmVsaWFibGUpOwotICAgICAg ICB9IGVsc2UgaWYgKG5ldCA9PSBORVRfU1gyNSB8fAotICAgICAgICAgICAgICAgICAgIG5ldCA9 PSBORVRfVlgyNSB8fAotICAgICAgICAgICAgICAgICAgIG5ldCA9PSBORVRfSVgyNSB8fAotICAg ICAgICAgICAgICAgICAgIG5ldCA9PSBORVRfSFgyNSkgewotICAgICAgICAgICAgZHVwbGV4ID0g MTsgICAgICAgICAgICAgICAgIC8qIExvY2FsIGVjaG8gZm9yIFguMjUgKi8KLSAgICAgICAgICAg IGlmIChyZWxpYWJsZSAhPSBTRVRfT0ZGIHx8ICFzZXRyZWxpYWJsZSkKLSAgICAgICAgICAgICAg cmVsaWFibGUgPSBTRVRfT047ICAgICAgICAvKiBUcmFuc3BvcnQgaXMgcmVsaWFibGUgZW5kIHRv IGVuZCAqLwotICAgICAgICB9Ci0jZW5kaWYgLyogTk9YRkVSICovCi0gICAgfQotI2lmbmRlZiBO T1hGRVIKLSAgICBkZWJ1ZyhGMTAxLCJjeF9uZXQgcmVsaWFibGUiLCIiLHJlbGlhYmxlKTsKLSNl bmRpZiAvKiBOT1hGRVIgKi8KLSNpZmRlZiBPUzIKLSAgICBpZiAobWRtdHlwIDw9IDApICAgICAg ICAgICAgICAgICAgICAvKiBOZXR3b3JrIG9yIERpcmVjdCBDb25uZWN0aW9uICovCi0gICAgICBE aWFsZXJTZW5kKE9QVF9LRVJNSVRfQ09OTkVDVCwgMCk7Ci0jZW5kaWYgLyogT1MyICovCi0KLSAg eGN4X25ldDoKLQotICAgIHNldGZsb3coKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNl dCBhcHByb3ByaWF0ZSBmbG93IGNvbnRyb2wgKi8KLQotICAgIGhhdmVsaW5lID0gMTsKLSNpZmRl ZiBDS0xPR0RJQUwKLSAgICBkb2xvZ25ldCgpOwotI2VuZGlmIC8qIENLTE9HRElBTCAqLwotCi0j aWZuZGVmIE5PU1BMCi0gICAgaWYgKGxvY2FsKSB7Ci0gICAgICAgIGlmIChubWFjKSB7ICAgICAg ICAgICAgICAgICAgICAgLyogQW55IG1hY3JvcyBkZWZpbmVkPyAqLwotICAgICAgICAgICAgaW50 IGs7ICAgICAgICAgICAgICAgICAgICAgIC8qIFllcyAqLwotICAgICAgICAgICAgayA9IG1sb29r KG1hY3RhYiwib25fb3BlbiIsbm1hYyk7ICAgLyogTG9vayB0aGlzIHVwICovCi0gICAgICAgICAg ICBpZiAoayA+PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBmb3VuZCwgKi8KLSAg ICAgICAgICAgICAgICBpZiAoZG9kbyhrLHR0bmFtZSwwKSA+IC0xKSAgICAgIC8qIHNldCBpdCB1 cCwgKi8KLSAgICAgICAgICAgICAgICAgIHBhcnNlcigxKTsgICAgICAgICAgICAgICAgICAgIC8q IGFuZCBleGVjdXRlIGl0ICovCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5k aWYgLyogTk9TUEwgKi8KLQotICAgIGlmIChsb2NhbCAmJiAoY3ggfHwgc3gpKSB7ICAgICAgICAg IC8qIC9DT05ORUNUIG9yIC9TRVJWRVIgc3dpdGNoIGdpdmVuICovCi0gICAgICAgIGlmIChjeCkg eyAgICAgICAgICAgICAgICAgICAgICAgLyogL0NPTk5FQ1QgKi8KLQkgICAgaWYgKCFndWkpIHsK LQkJLyogQ29tbWFuZCB3YXMgY29uZmlybWVkIHNvIHdlIGNhbiBwcmUtcG9wIGNvbW1hbmQgbGV2 ZWwuICAqLwotCQkvKiBUaGlzIGlzIHNvIENPTk5FQ1QgbW9kdWxlIHdvbid0IHRoaW5rIHdlJ3Jl IGV4ZWN1dGluZyBhICovCi0JCS8qIHNjcmlwdCBpZiBDT05ORUNUIHdhcyB0aGUgZmluYWwgY29t bWFuZCBpbiB0aGUgc2NyaXB0LiAgKi8KLQkJaWYgKGNtZGx2bCA+IDApCi0JCSAgcHJlcG9wKCk7 Ci0JICAgIH0KLSNpZm5kZWYgTk9ESUFMCi0gICAgICAgICAgICBkaWFsc3RhID0gRElBX1VOSzsK LSNlbmRpZiAvKiBOT0RJQUwgKi8KLSNpZmRlZiBMT0NVUwotICAgICAgICAgICAgaWYgKGF1dG9s b2N1cykgewotCQlzZXRsb2N1cygxLDEpOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIExPQ1VT ICovCi0gICAgICAgICAgICBzdWNjZXNzID0gZG9jb25lY3QoMCwgY21kbHZsID09IDAgPyAxIDog MCk7Ci0gICAgICAgICAgICBpZiAodHRjaGsoKSA8IDApCi0gICAgICAgICAgICAgIGRvbG9nZW5k KCk7Ci0JICAgIGRlYnVnKEYxMDEsImN4X25ldCBwb3N0IGRvY29uZWN0IHN1Y2Nlc3MiLCIiLHN1 Y2Nlc3MpOwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOwotI2lmbmRlZiBOT1hGRVIKLSAg ICAgICAgfSBlbHNlIGlmIChzeCkgeyAgICAgICAgICAgICAgICAvKiAvU0VSVkVSICovCi0gICAg ICAgICAgICBzc3RhdGUgPSAneCc7Ci0jaWZkZWYgTUFDCi0gICAgICAgICAgICB3aGF0ID0gV19S RUNWOwotICAgICAgICAgICAgc2NyY3JlYXRlKCk7Ci0jZW5kaWYgLyogTUFDICovCi0gICAgICAg ICAgICBpZiAobG9jYWwpIGRpc3BsYSA9IDE7Ci0jaWZkZWYgQU1JR0EKLSAgICAgICAgICAgIHJl cW9mZigpOyAgICAgICAgICAgICAgICAgICAvKiBObyBET1MgcmVxdWVzdG9ycyB3aGlsZSBzZXJ2 ZXIgKi8KLSNlbmRpZiAvKiBBTUlHQSAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgICAgICB9 Ci0gICAgfQotI2lmbmRlZiBOT0RJQUwKLSAgICBkaWFsc3RhID0gRElBX1VOSzsKLSNlbmRpZiAv KiBOT0RJQUwgKi8KLSNpZmRlZiBMT0NVUwotICAgIGlmIChhdXRvbG9jdXMpIHsKLSAgICAgICAg c2V0bG9jdXMoMSwxKTsKLSAgICB9Ci0jZW5kaWYgLyogTE9DVVMgKi8KLSAgICByZXR1cm4oc3Vj Y2VzcyA9IDEpOwotfQotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQotLyogYyB4IF8gcyBlIHIgaSBh IGwgIC0tICBNYWtlIGEgc2VyaWFsIGNvbm5lY3Rpb24gKi8KLQotLyoKLSAgQ2FsbCB3aXRoOgot ICAgIGRldmljZSAgPSBzdHJpbmcgcG9pbnRlciB0byBkZXZpY2UgbmFtZS4KLSAgICBjeCAgICAg ID0gMSB0byBhdXRvbWF0aWNhbGx5IGVudGVyIENvbm5lY3QgbW9kZSwgMCBvdGhlcndpc2UuCi0g ICAgc3ggICAgICA9IDEgdG8gYXV0b21hdGljYWxseSBlbnRlciBTZXJ2ZXIgbW9kZSwgMCBvdGhl cndpc2UuCi0gICAgc2hyICAgICA9IDEgaWYgZGV2aWNlIHNob3VsZCBiZSBvcGVuZWQgaW4gc2hh cmVhYmxlIG1vZGUsIDAgb3RoZXJ3aXNlLgotICAgIGZsYWcgICAgPSBpZiBubyBkZXYgbmFtZSBn aXZlbjogMSA9IGNsb3NlIGN1cnJlbnQgY29ubmVjdGlvbiwgMCA9IHJlc3VtZS4KLSAgICBndWkg ICAgID0gMSBpZiBjYWxsZWQgZnJvbSBHVUkgZGlhbG9nLCAwIG90aGVyd2lzZS4KLSAgUmV0dXJu czoKLSAgICAxIG9uIHN1Y2Nlc3MKLSAgICAwIG9uIGZhaWx1cmUgYW5kIG5vIG1lc3NhZ2UgcHJp bnRlZCwgc2xtc2cgc2V0IHRvIGZhaWx1cmUgbWVzc2FnZS4KLSAgIC05IG9uIGZhaWx1cmUgYW5k IG1lc3NhZ2UgcHJpbnRlZCwgZGl0dG8uCi0qLwotCi0vKiB0aGVzZSBhcmUgYml0IGZsYWdzICov Ci0jZGVmaW5lIENYX1RBUEkgMQotI2RlZmluZSBDWF9QUFAgIDIKLSNkZWZpbmUgQ1hfU0xJUCA0 Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi1jeF9zZXJpYWwoY2hhciAqZGV2aWNlLCAKLSAgICAg ICAgICBpbnQgY3gsIGludCBzeCwgaW50IHNociwgaW50IGZsYWcsIGludCBndWksIGludCBzcGVj aWFsKQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLWN4X3NlcmlhbChkZXZpY2UsIGN4LCBzeCwgc2hy LCBmbGFnLCBndWksIHNwZWNpYWwpCi0gICAgY2hhciAqIGRldmljZTsgaW50IGN4LCBzeCwgc2hy LCBmbGFnLCBndWksIHNwZWNpYWw7IAotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBjeF9zZXJp YWwgKi8gewotICAgIGludCBpLCBuLCB4LCB5LCBtc2c7Ci0gICAgaW50IF9sb2NhbCA9IC0xOwot ICAgIGNoYXIgKnM7Ci0KLSAgICBkZWJ1ZyhGMTEwLCJjeF9zZXJpYWwgZGV2aWNlIixkZXZpY2Us MCk7Ci0gICAgcyA9IGRldmljZTsKLSAgICBtc2cgPSAoZ3VpID09IDApICYmIG1zZ2ZsZzsJCS8q IFdoZXRoZXIgdG8gcHJpbnQgbWVzc2FnZXMgKi8KLSAgICBzdWNjZXNzID0gMDsKLQotI2lmbmRl ZiBOT0RJQUwKLSAgICBkaWFsc3RhID0gRElBX1VOSzsKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLSAg ICBkZWJ1ZyhGMTAxLCJjeF9zZXJpYWwgbWRtdHlwIiwiIixtZG10eXApOwotICAgIGlmIChjbHNr Y29ubngoMSkgPCAwKQkJLyogQ2xvc2UgdGhlIEtlcm1pdCBjb25uZWN0aW9uICovCi0gICAgICBy ZXR1cm4oc3VjY2VzcyA9IDApOwotICAgIGlmICgqcykgewkJCQkvKiBUaGV5IGdhdmUgYSBkZXZp Y2UgbmFtZSAqLwotCV9sb2NhbCA9IC0xOwkJCS8qIExldCB0dG9wZW4gZGVjaWRlIGFib3V0IGl0 ICovCi0gICAgfSBlbHNlIHsJCQkJLyogVGhleSBqdXN0IHNhaWQgInNldCBsaW5lIiAqLwotCXMg PSBkZnR0eTsJCQkvKiBzbyBnbyBiYWNrIHRvIG5vcm1hbCB0dHkgKi8KLQlfbG9jYWwgPSBkZmxv YzsJCQkvKiBhbmQgbW9kZS4gKi8KLSAgICB9Ci0jaWZkZWYgVk1TCi0gICAgewotCWV4dGVybiBp bnQgb2tfdG9fc2hhcmU7Ci0Jb2tfdG9fc2hhcmUgPSBzaHI7Ci0gICAgfQotI2VuZGlmIC8qIFZN UyAqLwotCi0jaWZkZWYgT1MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTXVzdCB3 YWl0IHVudGlsIGFmdGVyIHR0Y2xvcygpICovCi0jaWZkZWYgTlQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogdG8gY2hhbmdlIHRoZXNlIHNldHRpbmdzICAgICAgICovCi0jaWZkZWYg Q0tfVEFQSQotICAgIHR0dGFwaSA9IHNwZWNpYWwgJiBDWF9UQVBJOwotI2VuZGlmIC8qIENLX1RB UEkgKi8KLSNlbHNlCi0gICAgdHRzbGlwID0gc3BlY2lhbCAmIENYX1NMSVA7Ci0gICAgdHRwcHAg ID0gc3BlY2lhbCAmIENYX1BQUDsKLSNlbmRpZiAvKiBOVCAqLwotICAgIHR0c2hhcmUgPSBzaHI7 CQkJLyogU2hhcmVhYmxlIGRldmljZSA/ICovCi0gICAgZGVidWcoRjExMCwiT1MyIFNFVCBQT1JU IGZpbmFsIHMiLHMsIiIpOwotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAgLyogT3BlbiB0aGUgbmV3 IGxpbmUgKi8gICAgICAgIAotCi0gICAgY2tzdHJuY3B5KHR0bmFtZSxzLFRUTkFNTEVOKTsKLSAg ICBpZiAoKHkgPSB0dG9wZW4ocywmX2xvY2FsLG1kbXR5cCxjZHRpbW8pKSA+IC0xKSB7Ci0JY3h0 eXBlID0gKG1kbXR5cCA+IDApID8gQ1hUX01PREVNIDogQ1hUX0RJUkVDVDsKLSNpZm5kZWYgTk9E SUFMCi0JZGlhbHN0YSA9IERJQV9VTks7Ci0jaWZkZWYgQ0tfVEFQSQotCS8qIGlmIHRoZSBsaW5l IGlzIGEgdGFwaSBkZXZpY2UsIHRoZW4gd2UgbmVlZCB0byBhdXRvLWV4ZWN1dGUgKi8KLQkvKiBT RVQgTU9ERU0gVFlQRSBUQVBJIC0gd2hpY2ggd2UgZG8gdGhlIGVxdWl2YWxlbnQgb2YgaGVyZS4g ICovCi0JaWYgKHR0dGFwaSkgewotCSAgICBleHRlcm4gaW50IHVzZXJtZG07Ci0JICAgIHVzZXJt ZG0gPSAwOwotCSAgICBpbml0bWRtKDM4KTsJCS8qIEZyb20gY2t1ZGlhLmMgbl9UQVBJID09IDM4 ICovCi0JfQotI2VuZGlmIC8qIENLX1RBUEkgKi8KLSNlbmRpZiAvKiBOT0RJQUwgKi8KLQlzdWNj ZXNzID0gMTsKLSAgICB9IGVsc2UgewkJCQkvKiBGYWlsZWQgKi8KLSNpZmRlZiBPUzJPTkxZCi0J aWYgKCFzdHJjbXAocyxkZnR0eSkpICAgLyogRG8gbm90IGdlbmVyYXRlIGFuIGVycm9yIHdpdGgg ZGZ0dHkgKi8KLQkgIDsKLQllbHNlIGlmICh5ID09IC02ICYmIHR0c2xpcCkgewotCSAgICBtYWtl c3RyKCZzbG1zZywiQ2FuJ3QgYWNjZXNzIFNMSVAgZHJpdmVyIik7Ci0JICAgIGlmIChtc2cpIHBy aW50ZigiPyVzXG4iLHNsbXNnKTsKLQl9IGVsc2UgaWYgKHkgPT0gLTYgJiYgdHRwcHApIHsKLQkg ICAgbWFrZXN0cigmc2xtc2csIkNhbid0IGFjY2VzcyBQUFAgZHJpdmVyIik7Ci0JICAgIGlmICht c2cpIHByaW50ZigiPyVzXG4iLHNsbXNnKTsKLQl9IGVsc2UKLSNlbmRpZiAvKiBPUzJPTkxZICov Ci0JICBpZiAoeSA9PSAtMikgewotCSAgICAgIG1ha2VzdHIoJnNsbXNnLCJUaW1lZCBvdXQgLSBu byBjYXJyaWVyIik7Ci0JICAgICAgaWYgKG1zZykgewotCQkgIHByaW50ZigiPyVzXG4iLHNsbXNn KTsKLQkJICBpZiAoaGludHMpIHsKLQkJICAgICAgcHJpbnRmKCJcbioqKioqKioqKioqKioqKioq KioqKioqKipcbiIpOwotCQkgICAgICBwcmludGYoCi0JCSAgICAgICAiSElOVCAoVXNlIFNFVCBI SU5UUyBPRkYgdG8gc3VwcHJlc3MgZnV0dXJlIGhpbnRzKTpcbiIpOwotCQkgICAgICBwcmludGYo Ci0JCQkgICJUcnkgU0VUIENBUlJJRVIgT0ZGIGFuZCBTRVQgTElORSBhZ2Fpbiwgb3IgZWxzZVxu Iik7Ci0JCSAgICAgIHByaW50ZigiU0VUIE1PREVNLCBTRVQgTElORSwgYW5kIHRoZW4gRElBTC5c biIpOwotCQkgICAgICBwcmludGYoIioqKioqKioqKioqKioqKioqKioqKioqKipcblxuIik7Ci0J CSAgfQotCSAgICAgIH0KLQkgIH0gZWxzZSBpZiAoeSA9PSAtMykgewotCSAgICAgIG1ha2VzdHIo JnNsbXNnLCJBY2Nlc3MgdG8gbG9jayBkZW5pZWQiKTsKLQkgICAgICBpZiAobXNnKSB7Ci0jaWZk ZWYgVU5JWAotCQkgIHByaW50ZigKLQkJICAgIlNvcnJ5LCB3cml0ZSBhY2Nlc3MgdG8gVVVDUCBs b2NrZmlsZSBkaXJlY3RvcnkgZGVuaWVkLlxuIik7Ci0jaWZuZGVmIE5PSElOVFMKLQkJICBpZiAo aGludHMpIHsKLQkJICAgICAgcHJpbnRmKCJcbioqKioqKioqKioqKioqKioqKioqKioqKipcbiIp OwotCQkgICAgICBwcmludGYoCi0JCSAgICAgICAiSElOVCAoVXNlIFNFVCBISU5UUyBPRkYgdG8g c3VwcHJlc3MgZnV0dXJlIGhpbnRzKTpcbiIpOwotCQkgICAgICBwcmludGYoCi0JICAiUGxlYXNl IHJlYWQgdGhlIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMgZmlsZSwgJXNja3VpbnMudHh0LFxu IiwKLQkgICAgICAgICAgICAgICAgICAgICBrX2luZm9fZGlyID8ga19pbmZvX2RpciA6ICIiCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0JCSAgICAgIHByaW50ZigKLQkgICJvciB0 aGUgVU5JWCBhcHBlbmRpeCBvZiB0aGUgbWFudWFsLCBcIlVzaW5nIEMtS2VybWl0XCJcbiIKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLQkJICAgICAgcHJpbnRmKAotICAgICAgICAg ICJvciB2aXNpdCBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwgXG4i Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0JCSAgICAgIHByaW50ZigiKioqKioq KioqKioqKioqKioqKioqKioqKlxuXG4iKTsKLQkJICB9Ci0jZW5kaWYgLyogTk9ISU5UUyAqLwot I2Vsc2UKLQkJICBwcmludGYoIlNvcnJ5LCBhY2Nlc3MgdG8gbG9jayBkZW5pZWQ6ICVzXG4iLHMp OwotI2VuZGlmIC8qIFVOSVggKi8KLQkgICAgICB9Ci0JICB9IGVsc2UgaWYgKHkgPT0gLTQpIHsK LQkgICAgICBtYWtlc3RyKCZzbG1zZywiQWNjZXNzIHRvIGRldmljZSBkZW5pZWQiKTsKLQkgICAg ICBpZiAobXNnKSB7Ci0JCSAgcHJpbnRmKCJTb3JyeSwgYWNjZXNzIHRvIGRldmljZSBkZW5pZWQ6 ICVzXG4iLHMpOwotI2lmZGVmIFVOSVgKLSNpZm5kZWYgTk9ISU5UUwotCQkgIGlmIChoaW50cykg ewotCQkgICAgICBwcmludGYoIlxuKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7Ci0JCSAg ICAgIHByaW50ZigKLQkJICAgICAgIkhJTlQgKFVzZSBTRVQgSElOVFMgT0ZGIHRvIHN1cHByZXNz IGZ1dHVyZSBoaW50cyk6XG4iKTsKLQkJICAgICAgcHJpbnRmKAotCSAgICAiUGxlYXNlIHJlYWQg dGhlIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMgZmlsZSwgJXNja3VpbnMudHh0LFxuIiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAga19pbmZvX2RpciA/IGtfaW5mb19kaXIgOiAiIgot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotCQkgICAgICBwcmludGYoCi0JICAgICJv ciB0aGUgVU5JWCBhcHBlbmRpeCBvZiB0aGUgbWFudWFsLCBcIlVzaW5nIEMtS2VybWl0XCIuXG4i Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0JCSAgICAgIHByaW50ZigiKioqKioq KioqKioqKioqKioqKioqKioqKlxuXG4iKTsKLQkJICB9Ci0jZW5kaWYgLyogTk9ISU5UUyAqLwot I2VuZGlmIC8qIFVOSVggKi8KLQkgICAgICB9Ci0JICB9IGVsc2UgaWYgKHkgPT0gLTUpIHsKLQkg ICAgICBtYWtlc3RyKCZzbG1zZywiRGV2aWNlIGlzIGluIHVzZSBvciB1bmF2YWlsYWJsZSIpOwot CSAgICAgIGlmIChtc2cpCi0jaWZkZWYgVk1TCi0JCXByaW50ZigKLQkJICAiU29ycnksIGRldmlj ZSBpcyBpbiB1c2Ugb3Igb3RoZXJ3aXNlIHVuYXZhaWxhYmxlOiAlc1xuIixzKTsKLSNlbHNlCi0J ICAgICAgcHJpbnRmKCJTb3JyeSwgZGV2aWNlIGlzIGluIHVzZTogJXNcbiIscyk7Ci0jZW5kaWYg LyogVk1TICovCi0JICB9IGVsc2UgewkJCS8qIE90aGVyIGVycm9yLiAqLwotCSAgICAgIG1ha2Vz dHIoJnNsbXNnLCJEZXZpY2Ugb3BlbiBmYWlsZWQiKTsKLQkgICAgICBpZiAoCi0jaWZkZWYgVk1T Ci0JCSAgMQotI2Vsc2UKLQkJICBlcnJubwotI2VuZGlmIC8qIFZNUyAqLwotCQkgICkgewotCQkg IGludCB4OwkJLyogRmluZCBhIHNhZmUsIGxvbmcgYnVmZmVyICovCi0JCSAgbWFrZXN0cigmc2xt c2csY2tfZXJyc3RyKCkpOwotI2lmbmRlZiBWTVMKLQkJICBkZWJ1ZyhGMTExLCJjeF9zZXJpYWwg c2VyaWFsIGVycm5vIixzbG1zZyxlcnJubyk7Ci0jZW5kaWYgLyogVk1TICovCi0JCSAgaWYgKG1z ZykKLQkJICAgIHByaW50ZigiQ29ubmVjdGlvbiB0byAlcyBmYWlsZWQ6ICVzXG4iLHMsc2xtc2cp OwotCSAgICAgIH0gZWxzZSBpZiAobXNnKQotCQlwcmludGYoIlNvcnJ5LCBjYW4ndCBvcGVuIGNv bm5lY3Rpb246ICVzXG4iLHMpOwotCSAgfQotICAgIH0KLSAgICBuZXR3b3JrID0gMDsJCQkvKiBO byBuZXR3b3JrIGNvbm5lY3Rpb24gYWN0aXZlICovCi0gICAgc3BlZWQgPSB0dGdzcGQoKTsKLSAg ICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgbG9jYWwgPSBkZmxvYzsgICAgICAgICAgICAgICAg ICAvKiBHbyBiYWNrIHRvIG5vcm1hbCAqLwotI2lmbmRlZiBNQUMKLSAgICAgICAgY2tzdHJuY3B5 KHR0bmFtZSxkZnR0eSxUVE5BTUxFTik7IC8qIFJlc3RvcmUgZGVmYXVsdCB0dHkgbmFtZSAqLwot I2VuZGlmIC8qIE1BQyAqLwotICAgICAgICBoYXZlbGluZSA9IDA7Ci0gICAgICAgIGlmIChtZG10 eXAgPCAwKSB7ICAgICAgICAgICAgICAgLyogU3dpdGNoaW5nIGZyb20gbmV0IHRvIGFzeW5jPyAq LwotICAgICAgICAgICAgaWYgKG1kbXNhdiA+IC0xKSAgICAgICAgICAgIC8qIFJlc3RvcmUgbW9k ZW0gdHlwZSBmcm9tIGxhc3QgKi8KLSAgICAgICAgICAgICAgbWRtdHlwID0gbWRtc2F2OyAgICAg ICAgICAvKiBTRVQgTU9ERU0gY29tbWFuZCwgaWYgYW55LiAqLwotICAgICAgICAgICAgZWxzZQot ICAgICAgICAgICAgICBtZG10eXAgPSAwOwotICAgICAgICAgICAgbWRtc2F2ID0gLTE7Ci0gICAg ICAgIH0KLSAgICAgICAgcmV0dXJuKG1zZyA/IC05IDogMCk7CQkvKiBSZXR1cm4gZmFpbHVyZSAq LwotICAgIH0KLSAgICBpZiAoX2xvY2FsID4gLTEpCi0gICAgICBsb2NhbCA9IF9sb2NhbDsJCQkv KiBPcGVuZWQgb2ssIHNldCBsb2NhbC9yZW1vdGUuICovCi0gICAgbWFrZXN0cigmc2xtc2csTlVM TCk7CQkvKiBFcmFzZSBTRVQgTElORSBtZXNzYWdlICovCi0gICAgY2tzdHJuY3B5KHR0bmFtZSxz LFRUTkFNTEVOKTsgICAgICAgLyogQ29weSBuYW1lIGludG8gcmVhbCBwbGFjZS4gKi8KLSAgICBk ZWJ1ZyhGMTEwLCJjeF9zZXJpYWwgb2siLHR0bmFtZSwwKTsKLSNpZm5kZWYgTk9YRkVSCi0gICAg aWYgKChyZWxpYWJsZSAhPSBTRVRfT0ZGIHx8ICFzZXRyZWxpYWJsZSkpIC8qIEFzc3VtZSBub3Qg cmVsaWFibGUuICovCi0gICAgICByZWxpYWJsZSA9IFNFVF9PRkY7Ci0jZW5kaWYgLyogTk9YRkVS ICovCi0KLSAgeGN4X3NlcmlhbDoKLSAgICBzZXRmbG93KCk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBTZXQgYXBwcm9wcmlhdGUgZmxvdyBjb250cm9sICovCi0gICAgaGF2ZWxpbmUgPSAx OwotI2lmZGVmIENLTE9HRElBTAotICAgICAgZG9sb2dsaW5lKCk7Ci0jZW5kaWYgLyogQ0tMT0dE SUFMICovCi0KLSNpZm5kZWYgTk9TUEwKLSAgICBpZiAobG9jYWwpIHsKLSAgICAgICAgaWYgKG5t YWMpIHsgICAgICAgICAgICAgICAgICAgICAvKiBBbnkgbWFjcm9zIGRlZmluZWQ/ICovCi0gICAg ICAgICAgICBpbnQgazsgICAgICAgICAgICAgICAgICAgICAgLyogWWVzICovCi0gICAgICAgICAg ICBrID0gbWxvb2sobWFjdGFiLCJvbl9vcGVuIixubWFjKTsgICAvKiBMb29rIHRoaXMgdXAgKi8K LSAgICAgICAgICAgIGlmIChrID49IDApIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIGZv dW5kLCAqLwotICAgICAgICAgICAgICAgIGlmIChkb2RvKGssdHRuYW1lLDApID4gLTEpICAgICAg Lyogc2V0IGl0IHVwLCAqLwotICAgICAgICAgICAgICAgICAgcGFyc2VyKDEpOyAgICAgICAgICAg ICAgICAgICAgLyogYW5kIGV4ZWN1dGUgaXQgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot ICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0gICAgaWYgKGxvY2FsICYmIChjeCB8fCBzeCkp IHsgICAgICAgICAgLyogL0NPTk5FQ1Qgb3IgL1NFUlZFUiBzd2l0Y2ggZ2l2ZW4gKi8KLSAgICAg ICAgZXh0ZXJuIGludCBjYXJyaWVyOwotICAgICAgICBpZiAoY2FycmllciAhPSBDQVJfT0ZGKSB7 CS8qIExvb2tpbmcgZm9yIGNhcnJpZXI/ICovCi0gICAgICAgICAgICAvKiBPcGVuKCkgdHVybnMg b24gRFRSIC0tIHdhaXQgdXAgdG8gYSBzZWNvbmQgZm9yIENEIHRvIGNvbWUgdXAgKi8KLSAgICAg ICAgICAgIGludCBpLCB4OwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsg IC8qIFdBSVQgMSBDRC4uLiAqLwotICAgICAgICAgICAgICAgIHggPSB0dGdtZG0oKTsKLSAgICAg ICAgICAgICAgICBpZiAoeCA8IDAgfHwgeCAmIEJNX0RDRCkKLSAgICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICAgIG1zbGVlcCgxMDApOwotICAgICAgICAgICAgfQotICAgICAg ICB9Ci0gICAgICAgIGlmIChjeCkgeyAgICAgICAgICAgICAgICAgICAgICAgLyogL0NPTk5FQ1Qg Ki8KLSAgICAgICAgICAgIC8qIENvbW1hbmQgd2FzIGNvbmZpcm1lZCBzbyB3ZSBjYW4gcHJlLXBv cCBjb21tYW5kIGxldmVsLiAqLwotICAgICAgICAgICAgLyogVGhpcyBpcyBzbyBDT05ORUNUIG1v ZHVsZSB3b24ndCB0aGluayB3ZSdyZSBleGVjdXRpbmcgYSAqLwotICAgICAgICAgICAgLyogc2Ny aXB0IGlmIENPTk5FQ1Qgd2FzIHRoZSBmaW5hbCBjb21tYW5kIGluIHRoZSBzY3JpcHQuICovCi0K LSAgICAgICAgICAgIGlmIChjbWRsdmwgPiAwKQotICAgICAgICAgICAgICBwcmVwb3AoKTsKLSNp Zm5kZWYgTk9ESUFMCi0gICAgICAgICAgICBkaWFsc3RhID0gRElBX1VOSzsKLSNlbmRpZiAvKiBO T0RJQUwgKi8KLSNpZmRlZiBMT0NVUwotICAgICAgICAgICAgaWYgKGF1dG9sb2N1cykgewotICAg ICAgICAgICAgICAgIHNldGxvY3VzKDEsMSk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYgLyogTE9D VVMgKi8KLSAgICAgICAgICAgIHN1Y2Nlc3MgPSBkb2NvbmVjdCgwLCBjbWRsdmwgPT0gMCA/IDEg OiAwKTsKLSAgICAgICAgICAgIGlmICh0dGNoaygpIDwgMCkKLSAgICAgICAgICAgICAgZG9sb2dl bmQoKTsKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzKTsKLSNpZm5kZWYgTk9YRkVSCi0gICAg ICAgIH0gZWxzZSBpZiAoc3gpIHsgICAgICAgICAgICAgICAgLyogL1NFUlZFUiAqLwotICAgICAg ICAgICAgc3N0YXRlID0gJ3gnOwotI2lmZGVmIE1BQwotICAgICAgICAgICAgd2hhdCA9IFdfUkVD VjsKLSAgICAgICAgICAgIHNjcmNyZWF0ZSgpOwotI2VuZGlmIC8qIE1BQyAqLwotICAgICAgICAg ICAgaWYgKGxvY2FsKSBkaXNwbGEgPSAxOwotI2lmZGVmIEFNSUdBCi0gICAgICAgICAgICByZXFv ZmYoKTsgICAgICAgICAgICAgICAgICAgLyogTm8gRE9TIHJlcXVlc3RvcnMgd2hpbGUgc2VydmVy ICovCi0jZW5kaWYgLyogQU1JR0EgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSAgICAgICAgfQot ICAgIH0KLSNpZm5kZWYgTk9ESUFMCi0gICAgZGlhbHN0YSA9IERJQV9VTks7Ci0jZW5kaWYgLyog Tk9ESUFMICovCi0jaWZkZWYgTE9DVVMKLSAgICBpZiAoYXV0b2xvY3VzKSB7Ci0gICAgICAgIHNl dGxvY3VzKDEsMSk7Ci0gICAgfQotI2VuZGlmIC8qIExPQ1VTICovCi0gICAgcmV0dXJuKHN1Y2Nl c3MgPSAxKTsKLX0KLQotCi0vKiBTIEUgVCBMIEkgTiAtLSBwYXJzZSBuYW1lIG9mIGFuZCB0aGVu IG9wZW4gY29tbXVuaWNhdGlvbiBkZXZpY2UuICovCi0vKgotICBDYWxsIHdpdGg6Ci0gICAgeHgg PT0gWFlMSU5FIGZvciBhIHNlcmlhbCAodHR5KSBsaW5lLCBYWUhPU1QgZm9yIGEgbmV0d29yayBo b3N0LAotICAgIHp6ID09IDAgbWVhbnMgaWYgdXNlciBkb2Vzbid0IGdpdmUgYSBkZXZpY2UgbmFt ZSwgY29udGludWUgY3VycmVudAotICAgICAgICAgICAgYWN0aXZlIGNvbm5lY3Rpb24gKGlmIGFu eSk7Ci0gICAgenogIT0gMCBtZWFucyBpZiB1c2VyIGRvZXNuJ3QgZ2l2ZSBhIGRldmljZSBuYW1l LCB0aGVuIGNsb3NlIHRoZQotICAgICAgICAgICAgY3VycmVudCBjb25uZWN0aW9uIGFuZCByZXN0 b3JlIHRoZSBkZWZhdWx0IGNvbW11bmljYXRpb24gZGV2aWNlLgotICAgIGZjID09IDAgdG8ganVz dCBtYWtlIHRoZSBjb25uZWN0aW9uLCAxIHRvIGFsc28gQ09OTkVDVCAoZS5nLiAidGVsbmV0Iiku Ci0qLwotaW50Ci1zZXRsaW4oeHgsIHp6LCBmYykgCi0gICAgaW50IHh4LCB6eiwgZmM7IAotewot ICAgIGV4dGVybiBjaGFyIHB3YnVmW10sICogZ19wc3dkOwotICAgIGV4dGVybiBpbnQgcHdmbGcs IHB3Y3J5cHQsIGdfcGZsZywgZ19wY3B0LCBub2xvY2FsOwotICAgIGludCB3YWl0OwotICAgIC8q IGludCB0bl93YWl0X3N2OyAqLwotICAgIGludCBteW5ldDsKLSAgICBpbnQgX2xvY2FsID0gLTE7 Ci0gICAgaW50IGMsIGksIGhhdmVzd2l0Y2ggPSAwOwotICAgIGludCBoYXZldXNlciA9IDA7Ci0g ICAgaW50IGdldHZhbCA9IDA7Ci0gICAgaW50IHdpbGQgPSAwOyAgICAgICAgICAgICAgICAgICAg ICAgLyogRmlsZXNwZWMgaGFzIHdpbGRjYXJkcyAqLwotICAgIGludCBjeCA9IDA7ICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIENvbm5lY3QgYWZ0ZXIgKi8KLSAgICBpbnQgc3ggPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBCZWNvbWUgc2VydmVyIGFmdGVyICovCi0gICAgaW50IGFf dHlwZSA9IC0xOyAgICAgICAgICAgICAgICAgICAgLyogQXV0aGVudGljYXRpb24gdHlwZSAqLwot ICAgIGludCBlX3R5cGUgPSAtMTsgICAgICAgICAgICAgICAgICAgIC8qIFRlbG5ldCAvRU5DUllQ VCB0eXBlICovCi0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgIGludCBlbmNyeXB0ID0gMDsgICAg ICAgICAgICAgICAgICAgIC8qIEVuY3J5cHRlZD8gKi8KLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9O ICovCi0gICAgaW50IHNociA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU2hhcmUgc2Vy aWFsIGRldmljZSAqLwotICAgIGludCBjb25maXJtZWQgPSAwOyAgICAgICAgICAgICAgICAgIC8q IENvbW1hbmQgaGFzIGJlZW4gZW50ZXJlZCAqLwotICAgIHN0cnVjdCBGREIgc3csIHR4LCBueDsK LSNpZmRlZiBPUzIKLSAgICBzdHJ1Y3QgRkRCIGZsOwotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAg Y2hhciAqIHNzOwotI2lmZGVmIFRDUFNPQ0tFVAotICAgIGludCByYXdmbGcgPSAwOwotI2VuZGlm IC8qIFRDUFNPQ0tFVCAqLwotCi0gICAgY2hhciBzcnZidWZbU1JWQlVGU0laKzFdOwotCi0jaWZk ZWYgT1MyCi0jaWZkZWYgTlQKLSAgICBpbnQgeHh0YXBpID0gMDsKLSNlbHNlCi0gICAgaW50IHh4 c2xpcCA9IDAsIHh4cHBwID0gMDsKLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIE9TMiAqLwot Ci0gICAgaW50IGRvc3NoID0gMDsKLQotICAgIGRlYnVnKEYxMDEsInNldGxpbiBmYyIsIiIsZmMp OwotICAgIGRlYnVnKEYxMDEsInNldGxpbiB6eiIsIiIsenopOwotICAgIGRlYnVnKEYxMDEsInNl dGxpbiB4eCIsIiIseHgpOwotCi0jaWZkZWYgU1NIQ01ECi0gICAgaWYgKHh4ID09IFhYU1NIKSB7 ICAgICAgICAgICAgICAgICAgLyogU1NIIGJlY29tZXMgUFRZIFNTSCAuLi4gKi8KLSAgICAgICAg ZG9zc2ggPSAxOwotICAgICAgICB4eCA9IFhZSE9TVDsKLSAgICB9IGVsc2UgaWYgKCFja3N0cmNt cCgic3NoICIsbGluZSw0LDApKSB7IC8qIDIwMTAvMDMvMDEgKi8KLSAgICAgICAgZG9zc2ggPSAx OwotICAgICAgICB4eCA9IFhZSE9TVDsKLSAgICB9Ci0gICAgZGVidWcoRjEwMSwic2V0bGluIGRv c3NoIiwiIixkb3NzaCk7Ci0jZW5kaWYgLyogU1NIQ01EICovCi0KLSNpZmRlZiBUTkNPREUKLSAg ICAvKiB0bl93YWl0X3N2ID0gdG5fd2FpdF9mbGc7ICovCi0gICAgd2FpdCA9IHRuX3dhaXRfZmxn OwotI2Vsc2UKLSAgICAvKiB0bl93YWl0X3N2ID0gMDsgKi8KLSAgICB3YWl0ID0gMDsKLSNlbmRp ZiAvKiBUTkNPREUgKi8KLQotICAgIG15bmV0ID0gbmV0dHlwZTsKLQotICAgIGlmIChub2xvY2Fs KSB7Ci0gICAgICAgIG1ha2VzdHIoJnNsbXNnLCJNYWtpbmcgY29ubmVjdGlvbnMgaXMgZGlzYWJs ZWQiKTsKLSAgICAgICAgcHJpbnRmKCI/U29ycnksIG1ha2luZyBjb25uZWN0aW9ucyBpcyBkaXNh YmxlZFxuIik7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfQotICAgIGlmIChuZXRzYXZlID4g LTEpCi0gICAgICBuZXR0eXBlID0gbmV0c2F2ZTsKLQotICAgIGlmIChmYyAhPSAwIHx8IHp6ID09 IDApICAgICAgICAgICAgIC8qIFByZXNldCAvQ09OTkVDVCBzd2l0Y2ggKi8KLSAgICAgIGN4ID0g MTsKLQotICAgIGRlYnVnKEYxMDEsInNldGxpbiBjeCIsIiIsY3gpOwotCi0gICAgKnNydmJ1ZiA9 IE5VTDsKLQotICAgIGxpbmVbMF0gPSBOVUw7Ci0gICAgcyA9IGxpbmU7Ci0KLSNpZmRlZiBORVRD T05OCi0jaWZkZWYgQ0tfU0VDVVJJVFkKLSAgICBpZiAodG1wc3RyaW5nKQotICAgICAgICBtYWtl c3RyKCZ0bXBzdHJpbmcsTlVMTCk7Ci0jZW5kaWYgLyogQ0tfU0VDVVJJVFkgKi8KLSAgICBpZiAo dG1wdXNyaWQpCi0gICAgICAgIG1ha2VzdHIoJnRtcHVzcmlkLE5VTEwpOwotI2VuZGlmIC8qIE5F VENPTk4gKi8KLQotICAgIGF1dG9mbG93ID0gMTsgICAgICAgICAgICAgICAgICAgICAgIC8qIEVu YWJsZSBhdXRvbWF0aWMgZmxvdyBzZXR0aW5nICovCi0KLSAgICBpZiAoeHggPT0gWFlIT1NUKSB7 ICAgICAgICAgICAgICAgICAvKiBTRVQgSE9TVCA8aG9zdG5hbWU+ICovCi0jaWZuZGVmIE5FVENP Tk4KLSAgICAgICAgbWFrZXN0cigmc2xtc2csIk5ldHdvcmsgY29ubmVjdGlvbnMgbm90IHN1cHBv cnRlZCIpOwotICAgICAgICBwcmludGYoIj8lc1xuIixzbG1zZyk7Ci0gICAgICAgIHJldHVybigt OSk7Ci0jZWxzZSAvKiBORVRDT05OICovCi0jaWZuZGVmIE5PUFVTSAotICAgICAgICBpZiAoKG15 bmV0ID09IE5FVF9DTUQgfHwgbXluZXQgPT0gTkVUX1BUWSB8fCBkb3NzaCkgJiYgbm9wdXNoKSB7 Ci0gICAgICAgICAgICBtYWtlc3RyKCZzbG1zZywiQWNjZXNzIHRvIGV4dGVybmFsIGNvbW1hbmRz IGlzIGRpc2FibGVkIik7Ci0gICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgYWNjZXNzIHRvIGV4 dGVybmFsIGNvbW1hbmRzIGlzIGRpc2FibGVkXG4iKTsKLSAgICAgICAgICAgIHJldHVybigtOSk7 Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT1BVU0ggKi8KLQotI2lmZGVmIFNTSENNRAotICAgICAg ICBpZiAoZG9zc2gpIHsgICAgICAgICAgICAgICAgICAgIC8qIFNTSCBjb25uZWN0aW9uIHZpYSBw dHkgKi8KLSAgICAgICAgICAgIGludCBrOwotCSAgICBleHRlcm4gaW50IHR0eWZkOwkJLyogMjAx MC8wMy8wMSAqLwotICAgICAgICAgICAgayA9IGNrc3RybmNweShsaW5lLCBzc2hjbWQgPyBzc2hj bWQgOiBkZWZzc2hjbWQsIExJTkJVRlNJWik7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJzZXRs aW4gc3NoY21kIDEiLGxpbmUsayk7Ci0gICAgICAgICAgICBpZiAoKHggPSBjbXR4dCgiT3B0aW9u YWwgc3dpdGNoZXMgYW5kIGhvc3RuYW1lIiwiIiwmcyx4eHN0cmluZykpPDApCi0gICAgICAgICAg ICAgIHJldHVybih4KTsKLQotICAgICAgICAgICAgLyogMjAxMC0wMy0zMCAqLwotCSAgICBpZiAo ISpzICYmIHR0eWZkIDwgMCAmJiAhY2tzdHJjbXAoInNzaCAiLHR0bmFtZSw0LDApKSB7IAotCQl4 ID0gY2tzdHJuY3B5KGxpbmUsdHRuYW1lLExJTkJVRlNJWik7Ci0JICAgIH0gZWxzZSB7Ci0JCWlm ICghKnMpIHsKLQkJICAgIHByaW50ZigiP1NTSCB0byB3aGVyZT9cbiIpOwotCQkgICAgcmV0dXJu KC05KTsKLQkJfQotCQlpZiAoayA8IExJTkJVRlNJWikgewotCQkgICAgbGluZVtrKytdID0gU1A7 Ci0JCSAgICBsaW5lW2tdID0gTlVMOwotCQkgICAgZGVidWcoRjExMSwic2V0bGluIHNzaGNtZCAy IixsaW5lLGspOwotCQl9IGlmIChrIDwgTElOQlVGU0laKSB7Ci0JCSAgICBja3N0cm5jcHkoJmxp bmVba10scyxMSU5CVUZTSVotayk7Ci0JCSAgICBkZWJ1ZyhGMTExLCJzZXRsaW4gc3NoY21kIDMi LGxpbmUsayk7Ci0JCX0gZWxzZSB7Ci0JCSAgICBwcmludGYoIj9Ub28gbG9uZ1xuIik7Ci0JCSAg ICByZXR1cm4oLTkpOwotCQl9Ci0JICAgIH0KLQkgICAgeCA9IGN4X25ldCggTkVUX1BUWSwgICAg ICAgICAgICAgICAgLyogbmV0d29yayB0eXBlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAw LCAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAobm90IHVzZWQpICovCi0gICAgICAg ICAgICAgICAgICAgICAgICBsaW5lLCAgICAgICAgICAgICAgICAgICAvKiBob3N0ICovCi0gICAg ICAgICAgICAgICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAvKiBzZXJ2aWNlIChu b3QgdXNlZCkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAg ICAgIC8qIHVzZXJuYW1lIChub3QgdXNlZCkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIE5V TEwsICAgICAgICAgICAgICAgICAgIC8qIHBhc3N3b3JkIChub3QgdXNlZCkgKi8KLSAgICAgICAg ICAgICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgKG5vdCB1 c2VkKSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgLTEsLTEsLTEsICAgICAgICAgICAgICAg LyogcGFyYW1zIDEtMyAobm90IHVzZWQpICovCi0gICAgICAgICAgICAgICAgICAgICAgICAxLCAg ICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0IGltbWVkaWF0ZWx5ICovCi0gICAgICAgICAg ICAgICAgICAgICAgICBzeCwgICAgICAgICAgICAgICAgICAgICAvKiBzZXJ2ZXI/ICovCi0gICAg ICAgICAgICAgICAgICAgICAgICB6eiwgICAgICAgICAgICAgICAgICAgICAvKiBjbG9zZSBjdXJy ZW50PyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgMCk7ICAgICAgICAgICAgICAgICAgICAg Lyogbm90IGd1aSAqLwotCSAgICBkZWJ1ZyhGMTExLCJzZXRsaW4gY3hfbmV0IixsaW5lLHgpOwot CSAgICByZXR1cm4oeCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBTU0hDTUQgKi8KLQotLyoKLSAg SGVyZSB3ZSBwYXJzZSBvcHRpb25hbCBzd2l0Y2hlcyBhbmQgdGhlbiB0aGUgaG9zdG5hbWUgb3Ig d2hhdGV2ZXIsCi0gIHdoaWNoIGRlcGVuZHMgb24gdGhlIG5ldHdvcmsgdHlwZS4gIFRoZSB0cmlj a3kgcGFydCBpcywgdGhlIG5ldHdvcmsgdHlwZQotICBjYW4gYmUgc2V0IGJ5IGEgc3dpdGNoLgot Ki8KLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgbWFrZXN0cigmZ19wc3dkLHB3YnVmKTsgICAgICAg ICAvKiBTYXZlIGdsb2JhbCBwd2J1ZiAqLwotICAgICAgICBnX3BmbGcgPSBwd2ZsZzsgICAgICAg ICAgICAgICAgIC8qIGFuZCBmbGFnICovCi0gICAgICAgIGdfcGNwdCA9IHB3Y3J5cHQ7Ci0jZW5k aWYgLyogTk9TUEwgKi8KLQotICAgICAgICBjb25maXJtZWQgPSAwOwotICAgICAgICBoYXZlc3dp dGNoID0gMDsKLSNpZmRlZiBORVRGSUxFCi0gICAgICAgIGlmIChteW5ldCAhPSBORVRfRklMRSkg ewotI2VuZGlmIC8qIE5FVEZJTEUgKi8KLSAgICAgICAgICAgIHNzID0gKG15bmV0ID09IE5FVF9D TUQgfHwgbXluZXQgPT0gTkVUX1BUWSkgPwotICAgICAgICAgICAgICAiQ29tbWFuZCwgb3Igc3dp dGNoIiA6Ci0gICAgICAgICAgICAgICAgKG15bmV0ID09IE5FVF9UQ1BBIHx8IG15bmV0ID09IE5F VF9UQ1BCCi0gICAgICAgICAgICAgICAgICB8fCBteW5ldCA9PSBORVRfU1NIKSA/Ci0gICAgICAg ICAgICAgICAgICAiSG9zdG5hbWUsIGlwLWFkZHJlc3MsIG9yIHN3aXRjaCIgOgotICAgICAgICAg ICAgICAgICAgICAiSG9zdCBvciBzd2l0Y2giOwotICAgICAgICAgICAgaWYgKGZjKSB7Ci0gICAg ICAgICAgICAgICAgaWYgKG15bmV0ID09IE5FVF9UQ1BCICYmCi0gICAgICAgICAgICAgICAgICAg ICh0dG5wcm90byA9PSBOUF9URUxORVQgfHwgdHRucHJvdG8gPT0gTlBfS0VSTUlUKSkgewotICAg ICAgICAgICAgICAgICAgICBpZiAobnNodGVsdGFiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg ICBoYXZlc3dpdGNoKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjbWZkYmkoJnN3LF9DTUtF WSxzcywiIiwiIixuc2h0ZWx0YWIsNCx4eHN0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2h0ZWx0YWIsJm54KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgIH0KLSNpZmRlZiBSTE9HQ09ERQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG15bmV0ID09 IE5FVF9UQ1BCICYmIHR0bnByb3RvID09IE5QX1JMT0dJTikgewotICAgICAgICAgICAgICAgICAg ICBpZiAobnNocmxndGFiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYXZlc3dpdGNoKys7 Ci0gICAgICAgICAgICAgICAgICAgICAgICBjbWZkYmkoJnN3LF9DTUtFWSxzcywiIiwiIixuc2hy bGd0YWIsNCx4eHN0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaHJsZ3Rh YiwmbngpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlm IC8qIFJMT0dDT0RFICovCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGhh dmVzd2l0Y2grKzsKLSAgICAgICAgICAgICAgICBjbWZkYmkoJnN3LF9DTUtFWSxzcywiIiwiIixu c2h0YWIsNCx4eHN0cmluZyxzaHRhYiwmbngpOwotICAgICAgICAgICAgfQotI2lmZGVmIE5FVEZJ TEUKLSAgICAgICAgfQotI2VuZGlmIC8qIE5FVEZJTEUgKi8KLSAgICAgICAgaWYgKG15bmV0ID09 IE5FVF9UQ1BCIHx8IG15bmV0ID09IE5FVF9TTEFUIHx8Ci0JICAgIG15bmV0ID09IE5FVF9TU0gg IHx8IG15bmV0ID09IE5FVF9ERUMpIHsKLSAgICAgICAgICAgIGNtZmRiaSgmbngsX0NNRkxELCJI b3N0IiwiIiwiIiwwLDAseHhzdHJpbmcsTlVMTCxOVUxMKTsKLSNpZmRlZiBORVRGSUxFCi0gICAg ICAgIH0gZWxzZSBpZiAobXluZXQgPT0gTkVUX0ZJTEUpIHsKLSAgICAgICAgICAgIGNtZmRiaSgm bngsX0NNSUZJLCJGaWxlbmFtZSIsIiIsIiIsMCwwLHh4c3RyaW5nLE5VTEwsTlVMTCk7Ci0jZW5k aWYgLyogTkVURklMRSAqLwotI2lmZGVmIFBUWU9SUElQRQotICAgICAgICB9IGVsc2UgaWYgKG15 bmV0ID09IE5FVF9DTUQgfHwgbXluZXQgPT0gTkVUX1BUWSkgewotICAgICAgICAgICAgY21mZGJp KCZueCxfQ01UWFQsIkNvbW1hbmQiLCIiLCIiLDAsMCx4eHN0cmluZyxOVUxMLE5VTEwpOwotI2Vu ZGlmIC8qIFBUWU9SUElQRSAqLwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY21mZGJp KCZueCxfQ01UWFQsIkhvc3QiLCIiLCIiLDAsMCx4eHN0cmluZyxOVUxMLE5VTEwpOwotICAgICAg ICB9Ci0gICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICB4ID0gY21mZGIoaGF2ZXN3aXRj aCA/ICZzdyA6ICZueCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJzZXRsaW4gY21mZGIiLCIi LHgpOwotICAgICAgICAgICAgaWYgKHggPCAwKQotICAgICAgICAgICAgICBpZiAoeCAhPSAtMykK LSAgICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICBpZiAoeCA9PSAtMykgewot ICAgICAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgewotICAgICAgICAgICAgICAg ICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg ICAgICAgY29uZmlybWVkID0gMTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNtcmVzdWx0LmZjb2Rl ICE9IF9DTUtFWSkgeyAgICAvKiBOb3QgYSBzd2l0Y2ggKi8KLSAgICAgICAgICAgICAgICBja3N0 cm5jcHkobGluZSxjbXJlc3VsdC5zcmVzdWx0LExJTkJVRlNJWik7IC8qIFNhdmUgdGhlIGRhdGEg Ki8KLSAgICAgICAgICAgICAgICBzID0gbGluZTsgICAgICAgICAgICAgICAgICAgICAgLyogdGhh dCB3YXMgcGFyc2VkLi4uICovCi0gICAgICAgICAgICAgICAgaWYgKGNtcmVzdWx0LmZjb2RlID09 IF9DTUlGSSkgewotICAgICAgICAgICAgICAgICAgICB3aWxkID0gY21yZXN1bHQubnJlc3VsdDsK LSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNtcmVzdWx0LmZjb2RlID09IF9DTVRYVCkgewot ICAgICAgICAgICAgICAgICAgICBjb25maXJtZWQgPSAxOwotICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBhbmQgYnJlYWsgb3V0IG9m IHRoaXMgbG9vcCAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYyA9IGNtZ2JyaygpOyAg ICAgICAgICAgICAgIC8qIEhhdmUgc3dpdGNoIC0gZ2V0IGJyZWFrIGNoYXJhY3RlciAqLwotICAg ICAgICAgICAgZ2V0dmFsID0gKGMgPT0gJzonIHx8IGMgPT0gJz0nKTsgLyogTXVzdCBwYXJzZSBh biBhZ3VtZW50PyAqLwotICAgICAgICAgICAgaWYgKGdldHZhbCAmJiAhKGNtcmVzdWx0LmtmbGFn cyAmIENNX0FSRykpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCBkb2Vz IG5vdCB0YWtlIGFyZ3VtZW50c1xuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghZ2V0dmFsICYmIChjbWdrd2ZsZ3MoKSAmIENN X0FSRykpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJlcyBh biBhcmd1bWVudFxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIHN3aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgeyAvKiBJdCdzIGEgc3dp dGNoLi4gKi8KLSAgICAgICAgICAgICAgY2FzZSBTTF9DTlg6ICAgICAgICAgICAgICAvKiAvQ09O TkVDVCAqLwotICAgICAgICAgICAgICAgIGN4ID0gMTsKLSAgICAgICAgICAgICAgICBzeCA9IDA7 Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgU0xfU1JWOiAgICAg ICAgICAgICAgLyogL1NFUlZFUiAqLwotICAgICAgICAgICAgICAgIGN4ID0gMDsKLSAgICAgICAg ICAgICAgICBzeCA9IDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgTkVUQ01ECi0g ICAgICAgICAgICAgIGNhc2UgU0xfQ01EOiAgICAgICAgICAgICAgLyogL0NPTU1BTkQgKi8KLSAg ICAgICAgICAgICAgICBuZXRzYXZlID0gbXluZXQ7Ci0gICAgICAgICAgICAgICAgbXluZXQgPSBO RVRfQ01EOwotICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIE5FVENNRCAqLwotI2lm ZGVmIE5FVFBUWQotICAgICAgICAgICAgICBjYXNlIFNMX1BUWTogICAgICAgICAgICAgIC8qIC9Q VFkgKi8KLSAgICAgICAgICAgICAgICBuZXRzYXZlID0gbXluZXQ7Ci0gICAgICAgICAgICAgICAg bXluZXQgPSBORVRfUFRZOwotICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIE5FVFBU WSAqLwotICAgICAgICAgICAgICBjYXNlIFNMX05FVDogICAgICAgICAgICAgIC8qIC9ORVRXT1JL LVRZUEUgKi8KLSAgICAgICAgICAgICAgICBpZiAoKHggPSBjbWtleShuZXRjbWQsbm5ldHMsIiIs IiIseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAg ICAgICAgICAgbXluZXQgPSB4OwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0jaWZkZWYgQ0tf U0VDVVJJVFkKLSAgICAgICAgICAgICAgY2FzZSBTTF9QU1c6ICAgICAgICAgICAgICAvKiAvUEFT U1dPUkQ6ICovCi0gICAgICAgICAgICAgICAgaWYgKCFnZXR2YWwpCi0gICAgICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWJvayA9IDA7Ci0gICAgICAgICAgICAgICAgaWYg KCh4ID0gY21mbGQoIlBhc3N3b3JkIiwiIiwmcyx4eHN0cmluZykpIDwgMCkgewotICAgICAgICAg ICAgICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0 cigmdG1wc3RyaW5nLCIiKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHMgPSBicnN0cmlwKHMpOwot ICAgICAgICAgICAgICAgICAgICBpZiAoKHggPSAoaW50KXN0cmxlbihzKSkgPiBQV0JVRkwpIHsK LSAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNsbXNnLCJJbnRlcm5hbCBlcnJvciIp OwotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksIHRvbyBsb25nIC0gbWF4 ID0gJWRcbiIsUFdCVUZMKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0g ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmdG1wc3Ry aW5nLHMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSNlbmRp ZiAvKiBDS19TRUNVUklUWSAqLwotCi0gICAgICAgICAgICAgIGNhc2UgU0xfVUlEOiAgICAgICAg ICAgICAgLyogL1VTRVJJRDogKi8KLSAgICAgICAgICAgICAgICBpZiAoIWdldHZhbCkKLSAgICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGlmICgoeCA9IGNtZmxkKCJVc2Vy aWQiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh4ID09 IC0zKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZ0bXB1c3JpZCwiIik7Ci0g ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4oeCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgICAgICAgICBzID0gYnJzdHJpcChzKTsKLSAgICAgICAgICAgICAgICAgICAg aWYgKCh4ID0gKGludClzdHJsZW4ocykpID4gNjMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg IG1ha2VzdHIoJnNsbXNnLCJJbnRlcm5hbCBlcnJvciIpOwotICAgICAgICAgICAgICAgICAgICAg ICAgcHJpbnRmKCI/U29ycnksIHRvbyBsb25nIC0gbWF4ID0gJWRcbiIsNjMpOwotICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgICAgICBtYWtlc3RyKCZ0bXB1c3JpZCxzKTsKLSAgICAgICAgICAgICAgICAgICAg aGF2ZXVzZXIgPSAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsK LQotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0jaWZkZWYgQ0tfU1JQCi0gICAgICAgICAgICAg IGNhc2UgU0xfU1JQOgotICAgICAgICAgICAgICAgIGFfdHlwZSA9IEFVVEhUWVBFX1NSUDsKLSAg ICAgICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBDS19TUlAgKi8KLSNpZmRlZiBDS19TU0wK LSAgICAgICAgICAgICAgY2FzZSBTTF9TU0w6Ci0gICAgICAgICAgICAgICAgYV90eXBlID0gQVVU SFRZUEVfU1NMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIENLX1NTTCAqLwot I2lmZGVmIE5UCi0gICAgICAgICAgICAgIGNhc2UgU0xfTlRMTToKLSAgICAgICAgICAgICAgICBh X3R5cGUgPSBBVVRIVFlQRV9OVExNOwotICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8q IE5UICovCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSAgICAgICAgICAgICAgY2FzZSBTTF9LUkI0Ogot ICAgICAgICAgICAgICAgIGFfdHlwZSA9IEFVVEhUWVBFX0tFUkJFUk9TX1Y0OwotICAgICAgICAg ICAgICAgIGlmICh0dG5wcm90byA9PSBOUF9STE9HSU4pCi0gICAgICAgICAgICAgICAgICB0dG5w cm90byA9Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICAgICAgICAgICAgICBlbmNyeXB0 ID8gTlBfRUs0TE9HSU4gOgotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSAgICAgICAgICAg ICAgICAgICAgICBOUF9LNExPR0lOOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR0bnByb3Rv ID09IE5QX0s1TE9HSU4pCi0gICAgICAgICAgICAgICAgICB0dG5wcm90byA9IE5QX0s0TE9HSU47 Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR0bnByb3Rv ID09IE5QX0VLNUxPR0lOKQotICAgICAgICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9FSzRMT0dJ TjsKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICAgIGNhc2UgU0xfS1JCNToKLSAgICAgICAgICAgICAgICBhX3R5cGUgPSBBVVRI VFlQRV9LRVJCRVJPU19WNTsKLSAgICAgICAgICAgICAgICBpZiAodHRucHJvdG8gPT0gTlBfUkxP R0lOKQotICAgICAgICAgICAgICAgICAgdHRucHJvdG8gPQotI2lmZGVmIENLX0VOQ1JZUFRJT04K LSAgICAgICAgICAgICAgICAgICAgZW5jcnlwdCA/IE5QX0VLNUxPR0lOIDoKLSNlbmRpZiAvKiBD S19FTkNSWVBUSU9OICovCi0gICAgICAgICAgICAgICAgICAgICAgTlBfSzVMT0dJTjsKLSAgICAg ICAgICAgICAgICBlbHNlIGlmICh0dG5wcm90byA9PSBOUF9LNExPR0lOKQotICAgICAgICAgICAg ICAgICAgdHRucHJvdG8gPSBOUF9LNUxPR0lOOwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAg ICAgICAgICAgICBlbHNlIGlmICh0dG5wcm90byA9PSBOUF9FSzRMT0dJTikKLSAgICAgICAgICAg ICAgICAgIHR0bnByb3RvID0gTlBfRUs1TE9HSU47Ci0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAq LwotICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0gICAg ICAgICAgICAgIGNhc2UgU0xfQVVUSDogewotICAgICAgICAgICAgICAgICAgZXh0ZXJuIHN0cnVj dCBrZXl0YWIgYXV0eXB0YWJbXTsKLSAgICAgICAgICAgICAgICAgIGV4dGVybiBpbnQgbmF1dHlw OwotICAgICAgICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkoYXV0eXB0YWIsbmF1dHlwLCJ0eXBl IG9mIGF1dGhlbnRpY2F0aW9uIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJh dXRvbWF0aWMiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7 Ci0gICAgICAgICAgICAgICAgICBhX3R5cGUgPSB4OwotICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwotI2lmZGVm IENLX0VOQ1JZUFRJT04KLSAgICAgICAgICAgICAgY2FzZSBTTF9FTkM6Ci0gICAgICAgICAgICAg ICAgc3dpdGNoICh0dG5wcm90bykgewotICAgICAgICAgICAgICAgICAgY2FzZSBOUF9LNExPR0lO OgotICAgICAgICAgICAgICAgICAgICB0dG5wcm90byA9IE5QX0VLNExPR0lOOwotICAgICAgICAg ICAgICAgICAgICBlbmNyeXB0ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgICAgICBjYXNlIE5QX0s1TE9HSU46Ci0gICAgICAgICAgICAgICAgICAgIHR0bnBy b3RvID0gTlBfRUs1TE9HSU47Ci0gICAgICAgICAgICAgICAgICAgIGVuY3J5cHQgPSAxOwotICAg ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgTlBfS0VSTUlU OgotICAgICAgICAgICAgICAgICAgY2FzZSBOUF9URUxORVQ6IHsKLSAgICAgICAgICAgICAgICAg ICAgICBzdGF0aWMgc3RydWN0IGtleXRhYiAqIHRuZXRibCA9IE5VTEw7Ci0gICAgICAgICAgICAg ICAgICAgICAgc3RhdGljIGludCBudG5ldGJsID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICB4 ID0gY2tfZ2V0X2NyeXB0X3RhYmxlKCZ0bmV0YmwsJm50bmV0YmwpOwotICAgICAgICAgICAgICAg ICAgICAgIGRlYnVnKEYxMDEsImNrX2dldF9jcnlwdF90YWJsZSB4IiwiIix4KTsKLSAgICAgICAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJja19nZXRfY3J5cHRfdGFibGUgbiIsIiIsbnRuZXRi bCk7Ci0gICAgICAgICAgICAgICAgICAgICAgaWYgKHggPCAxIHx8ICF0bmV0YmwgfHwgbnRuZXRi bCA8IDEpIC8qIERpZG4ndCBnZXQgaXQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHggPSAw OwotICAgICAgICAgICAgICAgICAgICAgIGlmICgheCkgewotICAgICAgICAgICAgICAgICAgICAg ICAgICBtYWtlc3RyKCZzbG1zZywiSW50ZXJuYWwgZXJyb3IiKTsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCI/T29wcywgdHlwZXMgbm90IGxvYWRlZFxuIik7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KHRuZXRibCxudG5ldGJsLCJ0eXBlIG9m IGVuY3J5cHRpb24iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdXRv bWF0aWMiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHgp OwotICAgICAgICAgICAgICAgICAgICAgIGVfdHlwZSA9IHg7Ci0gICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSAgICAgICAgICAg ICAgY2FzZSBTTF9XQUlUOgotICAgICAgICAgICAgICAgIHdhaXQgPSAxOwotICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIFNMX05PV0FJVDoKLSAgICAgICAgICAgICAg ICB3YWl0ID0gMDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgfQotCi0jaWZkZWYgTkVURklMRQotICAgICAgICBpZiAobXluZXQgPT0gTkVUX0ZJTEUpIHsg ICAgICAgIC8qIFBhcnNlZCBieSBjbWlmaSgpICovCi0JICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwg MCkJLyogTmVlZHMgY29uZmlybWF0aW9uICovCi0JICAgICAgcmV0dXJuKHgpOwotCSAgICB4ID0g Y3hfbmV0KG15bmV0LAkJLyogbmV0dHlwZSAqLwotCQkgICAgICAgMCwJCS8qIHByb3RvY29sIChu b3QgdXNlZCkgKi8KLQkJICAgICAgIGxpbmUsCQkvKiBob3N0ICovCi0JCSAgICAgICAiIiwJCS8q IHBvcnQgKi8KLQkJICAgICAgIE5VTEwsCQkvKiBhbHRlcm5hdGUgdXNlcm5hbWUgKi8KLQkJICAg ICAgIE5VTEwsCQkvKiBwYXNzd29yZCAqLwotCQkgICAgICAgTlVMTCwJCS8qIGNvbW1hbmQgdG8g ZXhlY3V0ZSAqLwotCQkgICAgICAgMCwJCS8qIHBhcmFtMSAqLwotCQkgICAgICAgMCwJCS8qIHBh cmFtMiAqLwotCQkgICAgICAgMCwJCS8qIHBhcmFtMyAqLwotCQkgICAgICAgY3gsCQkvKiBlbnRl ciBDT05ORUNUIG1vZGUgKi8KLQkJICAgICAgIHN4LAkJLyogZW50ZXIgU0VSVkVSIG1vZGUgKi8K LQkJICAgICAgIHp6LAkJLyogY2xvc2UgY29ubmVjdGlvbiBpZiBvcGVuICovCi0JCSAgICAgICAw CQkvKiBndWkgKi8KLQkJICAgICAgICk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBORVRGSUxFICov Ci0KLSNpZmRlZiBORVRDTUQKLSAgICAgICAgaWYgKG15bmV0ID09IE5FVF9DTUQgfHwgbXluZXQg PT0gTkVUX1BUWSkgewotICAgICAgICAgICAgY2hhciAqcCA9IE5VTEw7Ci0gICAgICAgICAgICBp ZiAoIWNvbmZpcm1lZCkgewotICAgICAgICAgICAgICAgIGlmICgoeCA9IGNtdHh0KCJSZXN0IG9m IGNvbW1hbmQiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgICAgcmV0dXJu KHgpOwotICAgICAgICAgICAgICAgIGlmICgqcykgewotICAgICAgICAgICAgICAgICAgICBja3N0 cm5jYXQobGluZSwiICIsTElOQlVGU0laKTsKLSAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0 KGxpbmUscyxMSU5CVUZTSVopOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBz ID0gbGluZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8qIHMgPT0gbGluZSAtIHNvIHdl IG11c3QgcHJvdGVjdCB0aGUgbGluZSBidWZmZXIgKi8KLSAgICAgICAgICAgIHMgPSBicnN0cmlw KHMpOwotICAgICAgICAgICAgbWFrZXN0cigmcCxzKTsKLSAgICAgICAgICAgIGNrc3RybmNweShs aW5lLHAsTElOQlVGU0laKTsKLSAgICAgICAgICAgIG1ha2VzdHIoJnAsTlVMTCk7Ci0KLSAgICAg ICAgICAgIHggPSBjeF9uZXQoIG15bmV0LCAgICAgICAgICAgICAgICAgIC8qIG5ldHR5cGUgKi8K LSAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3Rv Y29sIChub3QgdXNlZCkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUsICAgICAgICAg ICAgICAgICAgIC8qIGhvc3QgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICIiLCAgICAgICAg ICAgICAgICAgICAgIC8qIHBvcnQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICAg ICAgICAgICAgICAgICAgIC8qIGFsdGVybmF0ZSB1c2VybmFtZSAqLwotICAgICAgICAgICAgICAg ICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgLyogcGFzc3dvcmQgKi8KLSAgICAgICAg ICAgICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgdG8gZXhl Y3V0ZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAg LyogcGFyYW0xICovCi0gICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAg ICAgICAvKiBwYXJhbTIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAg ICAgICAgICAgIC8qIHBhcmFtMyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgY3gsICAgICAg ICAgICAgICAgICAgICAgLyogZW50ZXIgQ09OTkVDVCBtb2RlICovCi0gICAgICAgICAgICAgICAg ICAgICAgICBzeCwgICAgICAgICAgICAgICAgICAgICAvKiBlbnRlciBTRVJWRVIgbW9kZSAqLwot ICAgICAgICAgICAgICAgICAgICAgICAgenosICAgICAgICAgICAgICAgICAgICAgLyogY2xvc2Ug Y29ubmVjdGlvbiBpZiBvcGVuICovCi0gICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAg ICAgICAgICAgICAgICAvKiBndWkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg ICAgIH0KLSNlbmRpZiAvKiBORVRDTUQgKi8KLQotI2lmZGVmIE5QSVBFICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIE5hbWVkIHBpcGUgKi8KLSAgICAgICAgaWYgKG15bmV0ID09IE5FVF9Q SVBFKSB7ICAgICAgICAvKiBOZWVkcyBiYWNrc2xhc2ggdHdpZGRsaW5nICovCi0gICAgICAgICAg ICBpZiAobGluZVswXSkgewotICAgICAgICAgICAgICAgIGlmIChzdHJjbXAobGluZSwiKiIpKSB7 ICAgIC8qIElmIHJlbW90ZSwgYmVnaW4gd2l0aCAqLwotICAgICAgICAgICAgICAgICAgICBjaGFy ICogcCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnAsbGluZSk7ICAgICAg Ci0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShsaW5lLCJcXFxcIixMSU5CVUZTSVopOyAv KiBzZXJ2ZXIgbmFtZSAqLwotICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQobGluZSxwLExJ TkJVRlNJWik7Ci0gICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnAsTlVMTCk7ICAgICAgCi0g ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbGluZVswXT0nXDAn OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBja3N0cm5jYXQobGluZSwiXFxw aXBlXFwiLCBMSU5CVUZTSVopOyAvKiBNYWtlIHBpcGUgbmFtZSAqLwotICAgICAgICAgICAgICAg IGNrc3RybmNhdChsaW5lLHBpcGVuYW1lLCBMSU5CVUZTSVopOyAvKiBBZGQgbmFtZSBvZiBwaXBl ICovCi0KLSAgICAgICAgICAgICAgICB4ID0gY3hfbmV0KG15bmV0LAkvKiBuZXR0eXBlICovCi0J CQkgICAwLAkJLyogcHJvdG9jb2wgKG5vdCB1c2VkKSAqLwotCQkJICAgbGluZSwJLyogaG9zdCAq LwotCQkJICAgIiIsCQkvKiBwb3J0ICovCi0JCQkgICBOVUxMLAkvKiBhbHRlcm5hdGUgdXNlcm5h bWUgKi8KLQkJCSAgIE5VTEwsCS8qIHBhc3N3b3JkICovCi0JCQkgICBOVUxMLAkvKiBjb21tYW5k IHRvIGV4ZWN1dGUgKi8KLQkJCSAgIDAsCQkvKiBwYXJhbTEgKi8KLQkJCSAgIDAsCQkvKiBwYXJh bTIgKi8KLQkJCSAgIDAsCQkvKiBwYXJhbTMgKi8KLQkJCSAgIGN4LAkJLyogZW50ZXIgQ09OTkVD VCBtb2RlICovCi0JCQkgICBzeCwJCS8qIGVudGVyIFNFUlZFUiBtb2RlICovCi0JCQkgICB6eiwJ CS8qIGNsb3NlIGNvbm5lY3Rpb24gaWYgb3BlbiAqLwotCQkJICAgMAkJLyogZ3VpICovCi0JCQkg ICApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLyogTlBJUEUgKi8KLQotI2lm ZGVmIFNVUEVSTEFUCi0gICAgICAgIGlmIChteW5ldCA9PSBORVRfU0xBVCkgeyAgICAgICAgLyog TmVlZHMgcGFzc3dvcmQsIGV0Yy4gKi8KLSAgICAgICAgICAgIHNsYXRfcHdkWzBdID0gTlVMOyAg ICAgICAgICAvKiBFcmFzZSBhbnkgcHJldmlvdXMgcGFzc3dvcmQgKi8KLSAgICAgICAgICAgIGRl Ym9rID0gMDsKLSAgICAgICAgICAgIGlmICgqbGluZSkgewkJLyogSWYgdGhleSBnYXZlIGEgaG9z dCBuYW1lLi4uICovCi0gICAgICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQoCi0gICAgICAgICAg ICAgICAgICAgICAicGFzc3dvcmQsXG4gb3IgY2FycmlhZ2UgcmV0dXJuIGlmIG5vIHBhc3N3b3Jk IHJlcXVpcmVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB4eHN0cmluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpIDwgMCAmJiB4ICE9 IC0zKQotICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgICAgIGNrc3Ry bmNweShzbGF0X3B3ZCxzLDE4KTsgLyogU2V0IHRoZSBwYXNzd29yZCwgaWYgYW55ICovCi0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsg LyogQ29uZmlybSB0aGUgY29tbWFuZCAqLwotCi0gICAgICAgICAgICB4ID0gY3hfbmV0KG15bmV0 LAkJLyogbmV0dHlwZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAwLAkJLyogcHJvdG9jb2wg KG5vdCB1c2VkKSAqLwotICAgICAgICAgICAgICAgICAgICAgICBsaW5lLAkJLyogaG9zdCAqLwot ICAgICAgICAgICAgICAgICAgICAgICAiIiwJCS8qIHBvcnQgKi8KLSAgICAgICAgICAgICAgICAg ICAgICAgTlVMTCwJCS8qIGFsdGVybmF0ZSB1c2VybmFtZSAqLwotICAgICAgICAgICAgICAgICAg ICAgICBOVUxMLAkJLyogcGFzc3dvcmQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwJ CS8qIGNvbW1hbmQgdG8gZXhlY3V0ZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAwLAkJLyog cGFyYW0xICovCi0gICAgICAgICAgICAgICAgICAgICAgIDAsCQkvKiBwYXJhbTIgKi8KLSAgICAg ICAgICAgICAgICAgICAgICAgMCwJCS8qIHBhcmFtMyAqLwotICAgICAgICAgICAgICAgICAgICAg ICBjeCwJCS8qIGVudGVyIENPTk5FQ1QgbW9kZSAqLwotICAgICAgICAgICAgICAgICAgICAgICBz eCwJCS8qIGVudGVyIFNFUlZFUiBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgIHp6LAkJ LyogY2xvc2UgY29ubmVjdGlvbiBpZiBvcGVuICovCi0gICAgICAgICAgICAgICAgICAgICAgIDAJ CS8qIGd1aSAqLwotICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICB9Ci0jZW5kaWYg LyogU1VQRVJMQVQgKi8KLQotI2lmZGVmIERFQ05FVAotICAgICAgICBpZiAobXluZXQgPT0gTkVU X0RFQykgeyAgCi0gICAgICAgICAgICBpZiAoIWxpbmVbMF0pIHsgICAgICAgICAgICAgICAgICAg LyogSWYgdGhleSBnYXZlIGEgaG9zdCBuYW1lLi4uICovCi0gICAgICAgICAgICAgICAgcHJpbnRm KCI/aG9zdG5hbWUgcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybigtMyk7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4 KTsgLyogQ29uZmlybSB0aGUgY29tbWFuZCAqLwotCi0gICAgICAgICAgICB4ID0gY3hfbmV0KG15 bmV0LAkJLyogbmV0dHlwZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAwLAkJLyogcHJvdG9j b2wgKG5vdCB1c2VkKSAqLwotICAgICAgICAgICAgICAgICAgICAgICBsaW5lLAkJLyogaG9zdCAq LwotICAgICAgICAgICAgICAgICAgICAgICAiIiwJCS8qIHBvcnQgKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgTlVMTCwJCS8qIGFsdGVybmF0ZSB1c2VybmFtZSAqLwotICAgICAgICAgICAgICAg ICAgICAgICBOVUxMLAkJLyogcGFzc3dvcmQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgTlVM TCwJCS8qIGNvbW1hbmQgdG8gZXhlY3V0ZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAwLAkJ LyogcGFyYW0xICovCi0gICAgICAgICAgICAgICAgICAgICAgIDAsCQkvKiBwYXJhbTIgKi8KLSAg ICAgICAgICAgICAgICAgICAgICAgMCwJCS8qIHBhcmFtMyAqLwotICAgICAgICAgICAgICAgICAg ICAgICBjeCwJCS8qIGVudGVyIENPTk5FQ1QgbW9kZSAqLwotICAgICAgICAgICAgICAgICAgICAg ICBzeCwJCS8qIGVudGVyIFNFUlZFUiBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgIHp6 LAkJLyogY2xvc2UgY29ubmVjdGlvbiBpZiBvcGVuICovCi0gICAgICAgICAgICAgICAgICAgICAg IDAJCS8qIGd1aSAqLwotICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICB9Ci0jZW5k aWYgLyogREVDTkVUICovCi0KLSNpZmRlZiBTU0hCVUlMVElOCi0gICAgICAgIGlmIChteW5ldCA9 PSBORVRfU1NIKSB7CQkvKiBTU0ggY29ubmVjdGlvbiAqLwotICAgICAgICAgICAgaW50IGssIGhh dmVob3N0ID0gMCwgdHJpcHMgPSAwOwotICAgICAgICAgICAgaW50ICAgIHRtcHZlciA9IC0xLCB0 bXB4ZncgPSAtMSwgdG1wc3NoX2NhczsKLSNpZm5kZWYgU1NIVEVTVAotICAgICAgICAgICAgZXh0 ZXJuIGludCBzbF9zc2hfeGZ3LCBzbF9zc2hfeGZ3X3NhdmVkOwotICAgICAgICAgICAgZXh0ZXJu IGludCBzbF9zc2hfdmVyLCBzbF9zc2hfdmVyX3NhdmVkOwotI2VuZGlmIC8qIFNTSFRFU1QgKi8K LSAgICAgICAgICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiIHNzaG9wbnN3W107Ci0gICAgICAgICAg ICBleHRlcm4gaW50IG5zc2hvcG5zdzsKLSAgICAgICAgICAgIGV4dGVybiBjaGFyICpzc2hfdG1w Y21kLCAqc3NoX3RtcHBvcnQ7Ci0gICAgICAgICAgICBzdHJ1Y3QgRkRCIHN3LCBrdywgZmw7Ci0K LSAgICAgICAgICAgIGRlYnVnKEYxMTAsInNldGxpbiBTU0ggc2VydmljZSAwIixzcnZidWYsMCk7 Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzZXRsaW4gU1NIIGhvc3QgcyAyIixzLDApOwotICAg ICAgICAgICAgaWYgKCpzKSB7ICAgICAgICAgICAvKiBJZiB0aGV5IGdhdmUgYSBob3N0IG5hbWUu Li4gKi8KLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzZXRsaW4gU1NIIGhvc3QgcyAxIixz LDApOwotICAgICAgICAgICAgICAgIGlmICgqcyA9PSAnKicpIHsKLSAgICAgICAgICAgICAgICAg ICAgbWFrZXN0cigmc2xtc2csIkluY29taW5nIGNvbm5lY3Rpb25zIG5vdCBzdXBwb3J0ZWQiKTsK LSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAotICAgICAiP1NvcnJ5LCBpbmNvbWluZyBjb25u ZWN0aW9ucyBub3Qgc3VwcG9ydGVkIGZvciBTU0guXG4iCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICApOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7Ci0gICAgICAg ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByaW50ZigiP2hvc3RuYW1lIHJlcXVpcmVk XG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTMpOwotICAgICAgICAgICAgfQotCi0gICAg ICAgICAgICAvKiBQYXJzZSBbIHBvcnQgXSBbIHN3aXRjaGVzIF0gKi8KLSAgICAgICAgICAgIGNt ZmRiaSgma3csICAgICAgICAgICAgICAgICAvKiBTd2l0Y2hlcyAqLwotICAgICAgICAgICAgICAg ICAgICBfQ01LRVksCi0gICAgICAgICAgICAgICAgICAgICJQb3J0IG51bWJlciBvciBzZXJ2aWNl IG5hbWUsXG5vciBzd2l0Y2giLAotICAgICAgICAgICAgICAgICAgICAiIiwKLSAgICAgICAgICAg ICAgICAgICAgIiIsCi0gICAgICAgICAgICAgICAgICAgIG5zc2hvcG5zdywKLSAgICAgICAgICAg ICAgICAgICAgNCwKLSAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcsCi0gICAgICAgICAgICAg ICAgICAgIHNzaG9wbnN3LAotICAgICAgICAgICAgICAgICAgICAmZmwKLSAgICAgICAgICAgICAg ICAgICAgKTsKLSAgICAgICAgICAgIGNtZmRiaSgmZmwsICAgICAgICAgICAgICAgICAvKiBQb3J0 IG51bWJlciBvciBzZXJ2aWNlIG5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgX0NNRkxELAot ICAgICAgICAgICAgICAgICAgICAiIiwKLSAgICAgICAgICAgICAgICAgICAgIiIsCi0gICAgICAg ICAgICAgICAgICAgICIiLAotICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAg ICAgICAwLAotICAgICAgICAgICAgICAgICAgICB4eHN0cmluZywKLSAgICAgICAgICAgICAgICAg ICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgTlVMTAotICAgICAgICAgICAgICAgICAgICAp OwotICAgICAgICAgICAgdHJpcHMgPSAwOyAgICAgICAgICAgICAgICAgIC8qIEV4cGxhaW5lZCBi ZWxvdyAqLwotICAgICAgICAgICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAgICAgIC8qIFBhcnNl IHBvcnQgYW5kIHN3aXRjaGVzICovCi0gICAgICAgICAgICAgICAgeSA9IGNtZmRiKCZrdyk7ICAg ICAgICAgLyogR2V0IGEgZmllbGQgKi8KLSAgICAgICAgICAgICAgICBpZiAoeSA9PSAtMykgICAg ICAgICAgICAvKiBVc2VyIHR5cGVkIENSIHNvIHF1aXQgZnJvbSBsb29wICovCi0gICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGlmICh5IDwgMCkgICAgICAgICAgICAg IC8qIE90aGVyIHBhcnNlIGVycm9yLCBwYXNzIGl0IGJhY2sgKi8KLSAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAgIHN3aXRjaCAoY21yZXN1bHQuZmNvZGUpIHsg LyogRmllbGQgb3IgS2V5d29yZD8gKi8KLSAgICAgICAgICAgICAgICBjYXNlIF9DTUZMRDogICAg ICAgICAgICAgIC8qIEZpZWxkICovCi0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShzcnZi dWYsY21yZXN1bHQuc3Jlc3VsdCxTUlZCVUZTSVopOwotICAgICAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgICAgICBjYXNlIF9DTUtFWTogICAgICAgICAgICAvKiBLZXl3b3JkICov Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgeyAvKiBXaGlj aCBvbmU/ICovCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgU1NIU1dfUFdEOgotICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKCFjbWdicmsoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZGVib2sgPSAwOwotICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKCh5ID0gY21mbGQoIlBhc3N3b3JkIiwiIiwmcyx4eHN0cmluZykpIDwgMCkg ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5ID09IC0zKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnRtcHN0cmluZywiIik7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGJy c3RyaXAocyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gKGludClzdHJs ZW4ocykpID4gUFdCVUZMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vz dHIoJnNsbXNnLCJJbnRlcm5hbCBlcnJvciIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwcmludGYoIj9Tb3JyeSwgdG9vIGxvbmcgLSBtYXggPSAlZFxuIixQV0JVRkwpOwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZ0bXBz dHJpbmcscyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTU0hTV19VU1I6ICAgICAgICAg ICAgIC8qIC9VU0VSOiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjbWdicmsoKSkg ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIHJlcXVp cmVzIGFuIGFyZ3VtZW50XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4o LTkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg aWYgKCh5ID0gY21mbGQoIlVzZXJuYW1lIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBz ID0gYnJzdHJpcChzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnRtcHVzcmlk LHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg IGNhc2UgU1NIU1dfVkVSOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gY21udW0o Ik51bWJlciIsIiIsMTAsJnoseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHogPCAxIHx8IHog PiAyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/T3V0IG9mIHJhbmdl OiAlZFxuIix6KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAg ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgdG1wdmVyID0g ejsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBj YXNlIFNTSFNXX0NNRDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTU0hTV19TVUI6Ci0gICAg ICAgICAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbWZsZCgiVGV4dCIsIiIsJnMseHhzdHJpbmcp KSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAg ICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF90bXBjbWQscyk7Ci0gICAgICAgICAgICAgICAgICAg ICAgICB0bXBzc2hfY2FzID0gKGNtcmVzdWx0Lm5yZXN1bHQgPT0gU1NIU1dfU1VCKTsKLSAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIFNTSFNX X1gxMToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoeSA9IGNta2V5KG9ub2ZmLDIsIiIs Im9uIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4o eSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0bXB4ZncgPSB5OwotICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4oLTIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh0cmlwcysrID09IDApIHsgICAgIC8qIEFm dGVyIGZpcnN0IHRpbWUgdGhyb3VnaCAqLwotICAgICAgICAgICAgICAgICAgICBjbWZkYmkoJmt3 LCAgICAgICAgIC8qIG9ubHkgcGFyc2Ugc3dpdGNoZXMsIG5vdCBwb3J0LiAqLwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9DTUtFWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAi U3dpdGNoIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc3Nob3Buc3cs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgNCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICB4eHN0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hvcG5zdywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo KHkgPSBjbWNmbSgpKSA8IDApICAgICAgLyogR2V0IGNvbmZpcm1hdGlvbiAqLwotICAgICAgICAg ICAgICAgIHJldHVybih5KTsKLQotICAgICAgICAgICAgZGVidWcoRjExMCwic2V0bGluIHByZS1j eF9uZXQgbGluZSIsbGluZSwwKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsInNldGxpbiBwcmUt Y3hfbmV0IHNydmJ1ZiIsc3J2YnVmLDApOwotICAgICAgICAgICAgeCA9IGN4X25ldCggbXluZXQs ICAgICAgICAgICAgICAgICAgLyogbmV0dHlwZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAg MCwgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG9jb2wgKG5vdCB1c2VkKSAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgbGluZSwgICAgICAgICAgICAgICAgICAgLyogaG9zdCAqLwotICAg ICAgICAgICAgICAgICAgICAgICAgc3J2YnVmLCAgICAgICAgICAgICAgICAgLyogcG9ydCAqLwot ICAgICAgICAgICAgICAgICAgICAgICAgdG1wdXNyaWQsICAgICAgICAgICAgICAgLyogYWx0ZXJu YXRlIHVzZXJuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAgICB0bXBzdHJpbmcsICAgICAg ICAgICAgICAvKiBwYXNzd29yZCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgc3NoX3RtcGNt ZCwgICAgICAgICAgICAgLyogY29tbWFuZCB0byBleGVjdXRlICovCi0gICAgICAgICAgICAgICAg ICAgICAgICB0bXB2ZXIsICAgICAgICAgICAgICAgICAvKiBwYXJhbTEgLSBzc2ggdmVyc2lvbiAq LwotICAgICAgICAgICAgICAgICAgICAgICAgdG1wc3NoX2NhcywgICAgICAgICAgICAgLyogcGFy YW0yIC0gc3NoIGNhcyAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHRtcHhmdywgICAgICAg ICAgICAgICAgIC8qIHBhcmFtMyAtIHNzaCB4MTFmd2QgKi8KLSAgICAgICAgICAgICAgICAgICAg ICAgIGN4LCAgICAgICAgICAgICAgICAgICAgIC8qIGVudGVyIENPTk5FQ1QgbW9kZSAqLwotICAg ICAgICAgICAgICAgICAgICAgICAgc3gsICAgICAgICAgICAgICAgICAgICAgLyogZW50ZXIgU0VS VkVSIG1vZGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHp6LCAgICAgICAgICAgICAgICAg ICAgIC8qIGNsb3NlIGNvbm5lY3Rpb24gaWYgb3BlbiAqLwotICAgICAgICAgICAgICAgICAgICAg ICAgMCAgICAgICAgICAgICAgICAgICAgICAgLyogZ3VpICovCi0gICAgICAgICAgICAgICAgICAg ICAgICApOwotICAgICAgICAgICAgaWYgKHRtcHVzcmlkKQotICAgICAgICAgICAgICAgIG1ha2Vz dHIoJnRtcHVzcmlkLE5VTEwpOwotICAgICAgICAgICAgaWYgKHNzaF90bXBjbWQpCi0gICAgICAg ICAgICAgICAgbWFrZXN0cigmc3NoX3RtcGNtZCxOVUxMKTsKLSAgICAgICAgfQotI2VuZGlmIC8q IFNTSEJVSUxUSU4gKi8KLQotI2lmZGVmIFRDUFNPQ0tFVAotICAgICAgICBpZiAobXluZXQgPT0g TkVUX1RDUEIpIHsgICAgICAgIC8qIFRDUC9JUCBjb25uZWN0aW9uICovCi0gICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJzZXRsaW4gc2VydmljZSAwIixzcnZidWYsMCk7Ci0gICAgICAgICAgICBkZWJ1 ZyhGMTEwLCJzZXRsaW4gaG9zdCBzIDIiLHMsMCk7Ci0gICAgICAgICAgICBpZiAoKnMpIHsJCQkv KiBJZiB0aGV5IGdhdmUgYSBob3N0IG5hbWUuLi4gKi8KLSAgICAgICAgICAgICAgICBkZWJ1ZyhG MTEwLCJzZXRsaW4gaG9zdCBzIDEiLHMsMCk7Ci0jaWZkZWYgTk9MSVNURU4KLSAgICAgICAgICAg ICAgICBpZiAoKnMgPT0gJyonKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNsbXNn LCJJbmNvbWluZyBjb25uZWN0aW9ucyBub3Qgc3VwcG9ydGVkIik7Ci0gICAgICAgICAgICAgICAg ICAgIHByaW50ZigKLSAgICAgIj9Tb3JyeSwgaW5jb21pbmcgY29ubmVjdGlvbnMgbm90IHN1cHBv cnRlZCBpbiB0aGlzIHZlcnNpb24gb2YgS2VybWl0LlxuIgotICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAg ICB9Ci0jZW5kaWYgLyogTk9MSVNURU4gKi8KLSNpZmRlZiBSTE9HQ09ERQotICAgICAgICAgICAg ICAgIC8qIEFsbG93IGEgdXNlcm5hbWUgaWYgcmxvZ2luIGlzIHJlcXVlc3RlZCAqLwotICAgICAg ICAgICAgICAgIGlmIChteW5ldCA9PSBORVRfVENQQiAmJgotICAgICAgICAgICAgICAgICAgICAo dHRucHJvdG8gPT0gTlBfUkxPR0lOIHx8IHR0bnByb3RvID09IE5QX0s1TE9HSU4gfHwKLSAgICAg ICAgICAgICAgICAgICAgIHR0bnByb3RvID09IE5QX0VLNUxPR0lOIHx8IHR0bnByb3RvID09IE5Q X0s0TE9HSU4gfHwKLSAgICAgICAgICAgICAgICAgICAgIHR0bnByb3RvID09IE5QX0VLNExPR0lO Ci0gICAgICAgICAgICAgICAgICAgICkpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHk7Ci0g ICAgICAgICAgICAgICAgICAgIHVpZGZsYWcgPSAwOwotICAgICAgICAgICAgICAgICAgICAvKiBD aGVjayBmb3IgImhvc3Q6c2VydmljZSIgKi8KLSAgICAgICAgICAgICAgICAgICAgZm9yICggOyAo KnMgIT0gJ1wwJykgJiYgKCpzICE9ICc6Jyk7IHMrKykgOwotICAgICAgICAgICAgICAgICAgICBp ZiAoKnMpIHsgICAvKiBTZXJ2aWNlLCBzYXZlIGl0ICovCi0gICAgICAgICAgICAgICAgICAgICAg ICAqcyA9IE5VTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShzcnZidWYsKytz LFNSVkJVRlNJWik7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgLyog Tm8gOnNlcnZpY2UsIHRoZW4gdXNlIGRlZmF1bHQuICovCi0jaWZkZWYgVk1TCi0gICAgICAgICAg ICAgICAgICAgICAgICBzd2l0Y2ggKHR0bnByb3RvKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgIGNhc2UgTlBfUkxPR0lOOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNw eShzcnZidWYsIjUxMyIsU1JWQlVGU0laKTsgLyogImxvZ2luIiAqLwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE5QX0s0 TE9HSU46Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgTlBfSzVMT0dJTjoKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkoc3J2YnVmLCI1NDMiLFNSVkJVRlNJWik7 IC8qICJrbG9naW4iICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgTlBfRUs0TE9HSU46Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgIGNhc2UgTlBfRUs1TE9HSU46Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2tzdHJuY3B5KHNydmJ1ZiwiMjEwNSIsU1JWQlVGU0laKTsgLyogImVrbG9naW4iICovCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9 Ci0jZWxzZSAvKiBWTVMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHRucHJv dG8pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBOUF9STE9HSU46Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHNydmJ1ZiwibG9naW4iLFNSVkJVRlNJWik7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgIGNhc2UgTlBfSzRMT0dJTjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBO UF9LNUxPR0lOOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShzcnZidWYs Imtsb2dpbiIsU1JWQlVGU0laKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBOUF9FSzRMT0dJTjoKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgY2FzZSBOUF9FSzVMT0dJTjoKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBja3N0cm5jcHkoc3J2YnVmLCJla2xvZ2luIixTUlZCVUZTSVopOwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlm IC8qIFZNUyAqLwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlm ICghY29uZmlybWVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB5ID0gY21mbGQoIlVzZXJp ZCBvbiByZW1vdGUgc3lzdGVtIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 aWRidWYsJnMseHhzdHJpbmcpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHkgPCAwICYm IHkgIT0gLTMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAg ICAgICAgICAgICAgICAgIGlmICgoaW50KXN0cmxlbihzKSA+IDYzKSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgbWFrZXN0cigmc2xtc2csIkludGVybmFsIGVycm9yIik7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJTb3JyeSwgdG9vIGxvbmdcbiIpOwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZ0bXB1c3JpZCxzKTsKLSAgICAg ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAvKiBURUxO RVQgb3IgU0VUIEhPU1QgKi8KLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotICAgICAgICAgICAgICAg ICAgICAvKiBDaGVjayBmb3IgImhvc3Q6c2VydmljZSIgKi8KLSAgICAgICAgICAgICAgICAgICAg Zm9yICggOyAoKnMgIT0gJ1wwJykgJiYgKCpzICE9ICc6Jyk7IHMrKykgOwotICAgICAgICAgICAg ICAgICAgICBpZiAoKnMpIHsgICAvKiBTZXJ2aWNlLCBzYXZlIGl0ICovCi0gICAgICAgICAgICAg ICAgICAgICAgICAqcyA9IE5VTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShz cnZidWYsKytzLFNSVkJVRlNJWik7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNv bmZpcm1lZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gOnNlcnZpY2UsIGxldCB0 aGVtIHR5cGUgb25lLiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpsaW5lICE9ICcq JykgeyAvKiBOb3QgaW5jb21pbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo bXluZXQgPT0gTkVUX1RDUEIgJiYgdHRucHJvdG8gPT0gTlBfS0VSTUlUKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlmICgoeCA9IGNtZmxkKAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVENQIHNlcnZpY2UgbmFtZSBvciBudW1iZXIi LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2VybWl0 Iiwmcyx4eHN0cmluZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDwg MCAmJiB4ICE9IC0zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybih4 KTsKLSNpZmRlZiBSTE9HQ09ERQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp ZiAobXluZXQgPT0gTkVUX1RDUEIgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHR0bnByb3RvID09IE5QX1JMT0dJTikgewotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoKHggPSBjbWZsZCgKLSAgIlRDUCBzZXJ2aWNlIG5hbWUgb3IgbnVtYmVyLFxu IG9yIGNhcnJpYWdlIHJldHVybiBmb3IgcmxvZ2luICg1MTMpIiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvZ2luIiwmcyx4eHN0cmluZykKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDwgMCAmJiB4ICE9IC0zKQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSNpZmRlZiBDS19BVVRIRU5U SUNBVElPTgotI2lmZGVmIENLX0tFUkJFUk9TCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg fSBlbHNlIGlmIChteW5ldCA9PSBORVRfVENQQiAmJgotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHR0bnByb3RvID09IE5QX0s0TE9HSU4gfHwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHR0bnByb3RvID09IE5QX0s1TE9HSU4pKSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoeCA9IGNtZmxkKAotICAiVENQIHNlcnZp Y2UgbmFtZSBvciBudW1iZXIsXG4gb3IgY2FycmlhZ2UgcmV0dXJuIGZvciBrbG9naW4gKDU0Myki LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2xvZ2lu Iiwmcyx4eHN0cmluZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDwg MCAmJiB4ICE9IC0zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybih4 KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG15bmV0ID09IE5FVF9U Q1BCICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHRucHJvdG8g PT0gTlBfRUs0TE9HSU4gfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0dG5wcm90byA9PSBOUF9FSzVMT0dJTikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKCh4ID0gY21mbGQoCi0gICJUQ1Agc2VydmljZSBuYW1lIG9yIG51bWJlcixcbiBv ciBjYXJyaWFnZSByZXR1cm4gZm9yIGVrbG9naW4gKDIxMDUpIiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVrbG9naW4iLCZzLHh4c3RyaW5nKQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgPCAwICYmIHggIT0gLTMpCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotI2VuZGlmIC8qIENLX0tF UkJFUk9TICovCi0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSNlbmRpZiAvKiBSTE9H Q09ERSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIERvIG5vdCBzZXQgYSBkZWZhdWx0IHZhbHVlIGluIHRo aXMgY2FsbCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiB5b3UgZG8g dGhlbiBpdCB3aWxsIHByZXZlbnQgZW50cmllcyAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogaW4gdGhlIG5ldHdvcmsgZGlyZWN0b3J5IGZyb20gYWNjZXNzaW5nICovCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFsdGVybmF0ZSBwb3J0cy4gICAgICAg ICAgICAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm ICgoeCA9IGNtZmxkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiVENQIHNlcnZpY2UgbmFtZSBvciBudW1iZXIiLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwmcyx4eHN0cmluZykKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApIDwgMCAmJiB4ICE9IC0zKQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyAvKiBJbmNvbWluZyBjb25uZWN0 aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQoIlRDUCBz ZXJ2aWNlIG5hbWUgb3IgbnVtYmVyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiIiwmcyx4eHN0cmluZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICkgPCAwICYmIHggIT0gLTMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4oeCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg ICBpZiAoKnMpICAgICAgICAgLyogSWYgdGhleSBnYXZlIGEgc2VydmljZSwgKi8KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHNydmJ1ZixzLFNSVkJVRlNJWik7IC8qIGNvcHkg aXQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInNldGxpbiBzZXJ2aWNl IDAuNSIsc3J2YnVmLDApOwotICAgICAgICAgICAgICAgICAgICB9Ci0jaWZkZWYgUkxPR0NPREUK LSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSAgICAgICAgICAgICAg ICBpZiAoIWNvbmZpcm1lZCkgewotICAgICAgICAgICAgICAgICAgICBjaGFyICogZGVmcHJvdG87 Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHRucHJvdG8pIHsKLSAgICAgICAgICAgICAg ICAgICAgICBjYXNlIE5QX1JMT0dJTjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZnByb3Rv ID0gIi9ybG9naW4iOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICAgICAgICAgICAgY2FzZSBOUF9LNExPR0lOOgotICAgICAgICAgICAgICAgICAgICAgICAgZGVm cHJvdG8gPSAiL2s0bG9naW4iOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgICAgICAgICAgY2FzZSBOUF9LNUxPR0lOOgotICAgICAgICAgICAgICAgICAgICAg ICAgZGVmcHJvdG8gPSAiL2s1bG9naW4iOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBOUF9FSzRMT0dJTjoKLSAgICAgICAgICAgICAg ICAgICAgICAgIGRlZnByb3RvID0gIi9lazRsb2dpbiI7Ci0gICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIE5QX0VLNUxPR0lOOgotICAgICAg ICAgICAgICAgICAgICAgICAgZGVmcHJvdG8gPSAiL2VrNWxvZ2luIjsKLSAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgTlBfS0VSTUlUOgot ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgTlBfVEVMTkVUOgotICAgICAgICAgICAgICAgICAg ICAgICAgZGVmcHJvdG8gPSAiL3RlbG5ldCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAg ICAgZGVmcHJvdG8gPSAiL2RlZmF1bHQiOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KHRjcHJhd3RhYixudGNwcmF3LCJTd2l0Y2giLGRl ZnByb3RvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZykpIDwg MCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggIT0gLTMpCi0gICAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg KCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7 Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy YXdmbGcgPSB4OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAw KQotICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWJ1 ZyhGMTEwLCJzZXRsaW4gcHJlLWN4X25ldCBsaW5lIixsaW5lLDApOwotICAgICAgICAgICAgZGVi dWcoRjExMCwic2V0bGluIHByZS1jeF9uZXQgc3J2YnVmIixzcnZidWYsMCk7Ci0gICAgICAgICAg ICB4ID0gY3hfbmV0KCBteW5ldCwgICAgICAgICAgICAgICAgICAvKiBuZXR0eXBlICovCi0gICAg ICAgICAgICAgICAgICAgICAgICByYXdmbGcgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAq LywKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUsICAgICAgICAgICAgICAgICAgIC8qIGhv c3QgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHNydmJ1ZiwgICAgICAgICAgICAgICAgIC8q IHBvcnQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHRtcHVzcmlkLCAgICAgICAgICAgICAg IC8qIGFsdGVybmF0ZSB1c2VybmFtZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgdG1wc3Ry aW5nLCAgICAgICAgICAgICAgLyogcGFzc3dvcmQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAg IE5VTEwsICAgICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgdG8gZXhlY3V0ZSAqLwotICAgICAg ICAgICAgICAgICAgICAgICAgYV90eXBlLCAgICAgICAgICAgICAgICAgLyogcGFyYW0xIC0gdGVs bmV0IGF1dGh0eXBlICovCi0gICAgICAgICAgICAgICAgICAgICAgICBlX3R5cGUsICAgICAgICAg ICAgICAgICAvKiBwYXJhbTIgLSB0ZWxuZXQgZW5jdHlwZSAgKi8KLSAgICAgICAgICAgICAgICAg ICAgICAgIHdhaXQsICAgICAgICAgICAgICAgICAgIC8qIHBhcmFtMyAtIHRlbG5ldCB3YWl0ICov Ci0gICAgICAgICAgICAgICAgICAgICAgICBjeCwgICAgICAgICAgICAgICAgICAgICAvKiBlbnRl ciBDT05ORUNUIG1vZGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHN4LCAgICAgICAgICAg ICAgICAgICAgIC8qIGVudGVyIFNFUlZFUiBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAg ICB6eiwgICAgICAgICAgICAgICAgICAgICAvKiBjbG9zZSBjb25uZWN0aW9uIGlmIG9wZW4gKi8K LSAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgIC8qIGd1aSAq LwotICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIFRDUFNP Q0tFVCAqLwotCi0jaWZkZWYgQ0tfU0VDVVJJVFkKLSAgICAgICAgaWYgKHRtcHN0cmluZykKLSAg ICAgICAgICAgIG1ha2VzdHIoJnRtcHN0cmluZyxOVUxMKTsKLSNlbmRpZiAvKiBDS19TRUNVUklU WSAqLwotICAgICAgICBpZiAodG1wdXNyaWQpCi0gICAgICAgICAgICBtYWtlc3RyKCZ0bXB1c3Jp ZCxOVUxMKTsKLQlkZWJ1ZyhGMTExLCJzZXRsaW4gY3hfbmV0IixsaW5lLHgpOwotCXJldHVybih4 KTsKLSNlbmRpZiAvKiBORVRDT05OICovCi0gICAgfQotCi0vKiBTZXJpYWwgdHR5IGRldmljZSwg cG9zc2libHkgbW9kZW0sIGNvbm5lY3Rpb24uLi4gKi8KLQotI2lmZGVmIE9TMgotLyoKLSAgVXNl ciBjYW4gdHlwZToKLSAgICBDT00xLi5DT004ID0gUmVndWxhciBDT00gcG9ydAotICAgIDEuLjgg ICAgICAgPSBTeW5vbnltIGZvciBDT00xLi5DT004LCBpcyB0cmFuc2xhdGVkIHRvIENPTTEuLkNP TTgKLSAgICBfbiAgICAgICAgID0gKG4gaXMgYSBudW1iZXIpID0gb3BlbiBmaWxlIGhhbmRsZQot ICAgIHN0cmluZyAgICAgPSBhbnkgdGV4dCBzdHJpbmcgPSBuYW1lIG9mIHNvbWUgb3RoZXIga2lu ZCBvZiBkZXZpY2UsCi0gICAgICAgICAgICAgICAgIHRha2VuIGxpdGVyYWxseSwgYXMgZ2l2ZW4u Ci0qLwotICAgIHMgPSAiQ29tbXVuaWNhdGlvbiBkZXZpY2UgbmFtZSI7Ci0KLSNpZmRlZiBDS19U QVBJCi0gICAgaWYgKFRBUElBdmFpbCkKLSAgICAgIGNrdGFwaUJ1aWxkTGluZVRhYmxlKCZ0YXBp bGluZXRhYiwgJl90YXBpbGluZXRhYiwgJm50YXBpbGluZSk7Ci0gICAgaWYgKCEodGFwaWxpbmV0 YWIgJiYgX3RhcGlsaW5ldGFiICYmIG50YXBpbGluZSA+IDApICYmCi0JeHggPT0gWFlUQVBJX0xJ TiApIHsKLQltYWtlc3RyKCZzbG1zZywiVEFQSSBkZXZpY2Ugbm90IGNvbmZpZ3VyZWQiKTsKLQlw cmludGYoIlxuTm8gVEFQSSBMaW5lIERldmljZXMgYXJlIGNvbmZpZ3VyZWQgZm9yIHRoaXMgc3lz dGVtXG4iKTsKLQlyZXR1cm4oLTkpOwotICAgIH0KLSAgICBpZiAoeHggPT0gWFlUQVBJX0xJTikg ewkJLyogRGVmYXVsdCAoZmlyc3QpIFRBUEkgbGluZSAqLwotCXMgPSAidGFwaSI7CQkJLyogKHdo YXRldmVyIGl0IGlzKSAqLwotICAgIH0gZWxzZSB7CQkJCS8qIFF1ZXJ5IHRoZSB1c2VyICovCi0j ZW5kaWYgLyogQ0tfVEFQSSAqLwotCi0vKiBOb3cgcGFyc2Ugb3B0aW9uYWwgc3dpdGNoZXMgYW5k IHRoZW4gZGV2aWNlIG5hbWUgKi8KLQotCWNvbmZpcm1lZCA9IDA7Ci0JY21mZGJpKCZzdyxfQ01L RVksIkRldmljZSBuYW1lLCBvciBzd2l0Y2giLAotCSAgICAgICAiIiwiIixucHNsdGFiLDQseHhz dHJpbmcscHNsdGFiLCZmbCk7Ci0JY21mZGJpKCZmbCxfQ01GTEQsIiIsZGZ0dHksIiIsMCwwLHh4 c3RyaW5nLE5VTEwsTlVMTCk7Ci0Jd2hpbGUgKDEpIHsKLQkgICAgeCA9IGNtZmRiKCZzdyk7Ci0J ICAgIGRlYnVnKEYxMDEsInNldGxpbiBjbWZkYiIsIiIseCk7Ci0JICAgIGlmICh4IDwgMCkKLQkg ICAgICBpZiAoeCAhPSAtMykKLQkJcmV0dXJuKHgpOwotCSAgICBpZiAoeCA9PSAtMykgewotCQlp ZiAoKHggPSBjbWNmbSgpKSA8IDApIHsKLQkJICAgIHJldHVybih4KTsKLQkJfSBlbHNlIHsKLQkJ ICAgIGNvbmZpcm1lZCA9IDE7Ci0JCSAgICBicmVhazsKLQkJfQotCSAgICB9Ci0JICAgIGlmIChj bXJlc3VsdC5mY29kZSA9PSBfQ01GTEQpIHsKLQkJcyA9IGNtcmVzdWx0LnNyZXN1bHQ7Ci0JCWJy ZWFrOwotCSAgICB9IGVsc2UgaWYgKGNtcmVzdWx0LmZjb2RlID09IF9DTUtFWSkgewotCQlzd2l0 Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsKLQkJICBjYXNlIFNMX0NOWDoJCS8qIC9DT05ORUNUICov Ci0JCSAgICBjeCA9IDE7Ci0JCSAgICBzeCA9IDA7Ci0JCSAgICBicmVhazsKLQkJICBjYXNlIFNM X1NSVjoJCS8qIC9TRVJWRVIgKi8KLQkJICAgIGN4ID0gMDsKLQkJICAgIHN4ID0gMTsKLQkJICAg IGJyZWFrOwotCQkgIGNhc2UgU0xfU0hSOgkJLyogL1NIQVJFICovCi0JCSAgICBzaHIgPSAxOwot CQkgICAgYnJlYWs7Ci0JCSAgY2FzZSBTTF9OU0g6CQkvKiAvTk9TSEFSRSAqLwotCQkgICAgc2hy ID0gMDsKLQkJICAgIGJyZWFrOwotCQl9Ci0JICAgIH0KLQl9Ci0jaWZkZWYgQ0tfVEFQSQotICAg IH0KLSNlbmRpZiAvKiBDS19UQVBJICovCi0KLSAgICBkZWJ1ZyhGMTEwLCJPUzIgU0VUIFBPUlQg cyIscywwKTsKLSAgICB5ID0gbG9va3VwKG9zMmRldnRhYixzLG5vczJkZXYsJngpOyAvKiBMb29r IHVwIGluIGtleXdvcmQgdGFibGUgKi8KLSAgICBkZWJ1ZyhGMTAxLCJPUzIgU0VUIFBPUlQgeCIs IiIseCk7Ci0gICAgZGVidWcoRjEwMSwiT1MyIFNFVCBQT1JUIHkiLCIiLHkpOwotICAgIGlmICgo eSA+IC0xKSAmJiAoeCA+PSAwICYmIHggPCA4KSkgeyAvKiBVc2VyIHR5cGVkIGEgZGlnaXQgMS4u OCAqLwotCXMgPSBvczJkZXZ0YWJbeCs4XS5rd2Q7CQkvKiBTdWJzdGl0aXRlIGl0cyByZWFsIG5h bWUgKi8KLSNpZmRlZiBOVAotCXh4dGFwaSA9IDA7Ci0jZWxzZSAvKiBOVCAqLwotCXh4c2xpcCA9 IHh4cHBwID0gMDsKLSNlbmRpZiAvKiBOVCAqLwotCWRlYnVnKEYxMTAsIk9TMiBTRVQgUE9SVCBz dWJzdCBzIixzLCIiKTsKLSNpZm5kZWYgTlQKLSAgICB9IGVsc2UgaWYgKCh5ID4tMSkgJiYgKHgg Pj0gMTYgJiYgeCA8IDI0KSkgeyAvKiBTTElQIGFjY2VzcyAqLwotCXMgPSBvczJkZXZ0YWJbeC04 XS5rd2Q7CQkvKiBTdWJzdGl0aXRlIGl0cyByZWFsIG5hbWUgKi8KLQlkZWJ1ZyhGMTEwLCJPUzIg U0VUIFBPUlQgU0xJUCBzdWJzdCBzIixzLCIiKTsKLQl4eHNsaXAgPSAxOwotCXh4cHBwICA9IDA7 Ci0gICAgfSBlbHNlIGlmICgoeSA+LTEpICYmICh4ID49IDI0ICYmIHggPCAzMikpIHsgLyogUFBQ IGFjY2VzcyAqLwotCXMgPSBvczJkZXZ0YWJbeC0xNl0ua3dkOwkvKiBTdWJzdGl0aXRlIGl0cyBy ZWFsIG5hbWUgKi8KLQlkZWJ1ZyhGMTEwLCJPUzIgU0VUIFBPUlQgUFBQIHN1YnN0IHMiLHMsIiIp OwotCXh4cHBwID0gMTsKLQl4eHNsaXAgPSAwOwotCWlmICgoeSA9IGNta2V5KG9zMnBwcHRhYiwK LQkJICAgICAgIG5vczJwcHAsCi0JCSAgICAgICAiUFBQIGRyaXZlciBpbnRlcmZhY2UiLAotCQkg ICAgICAgInBwcDAiLAotCQkgICAgICAgeHhzdHJpbmcpCi0JICAgICApIDwgMCkKLQkgIHJldHVy bih5KTsKLQlkZWJ1ZyhGMTAxLCJPUzIgU0VUIFBPUlQgUFBQIElOVEVSRkFDRSB5IiwiIix5KTsK LQl4eHBwcCA9ICh5ICUgMTApICsgMTsKLSNlbmRpZiAvKiBOVCAqLwotICAgIH0gZWxzZSBpZiAo KnMgPT0gJ18nKSB7CQkvKiBVc2VyIHVzZWQgIl8iIHByZWZpeCAqLwotCXMrKzsJCQkJLyogUmVt b3ZlIGl0ICovCi0JLyogUmVzdCBtdXN0IGJlIG51bWVyaWMgKi8KLQlkZWJ1ZyhGMTEwLCJPUzIg U0VUIFBPUlQgSEFORExFIF9zdWJzdCBzIixzLDApOwotCWlmICghcmRpZ2l0cyhzKSkgewotCSAg ICBtYWtlc3RyKCZzbG1zZywiSW52YWxpZCBmaWxlIGhhbmRsZSIpOwotCSAgICBwcmludGYoIj9J bnZhbGlkIGZvcm1hdCBmb3IgZmlsZSBoYW5kbGVcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0K LSNpZmRlZiBOVAotCXh4dGFwaSA9IDA7Ci0jZWxzZSAvKiBOVCAqLwotCXh4c2xpcCA9IHh4cHBw ID0gMDsKLSNlbmRpZiAvKiBOVCAqLwotICAgIH0gZWxzZSB7CQkJCS8qIEEgbm9ybWFsIENPTXgg cG9ydCBvciBhIHN0cmluZyAqLwotCXMgPSBicnN0cmlwKHMpOwkJCS8qIFN0cmlwIGJyYWNlcyBp ZiBhbnkgKi8KLSNpZmRlZiBOVAotI2lmZGVmIENLX1RBUEkKLQkvKiBXaW5kb3dzIFRBUEkgc3Vw cG9ydCAtIExvb2sgdXAgaW4ga2V5d29yZCB0YWJsZSAqLwotCWlmICh0YXBpbGluZXRhYiAmJiBf dGFwaWxpbmV0YWIgJiYgbnRhcGlsaW5lID4gMCkgewotCSAgICBpZiAoIWNrc3RyY21wKHMsInRh cGkiLDQsMCkpIHsKLQotCQkvKiBGaW5kIG91dCB3aGF0IHRoZSBsb3dlc3QgbnVtYmVyZWQgVEFQ SSBkZXZpY2UgaXMgKi8KLQkJLyogYW5kIHVzZSBpdCBhcyB0aGUgZGVmYXVsdC4gICAgICAgICAg ICAgICAgICAgICAgICovCi0JCWludCBqID0gOTk5OSwgayA9IC0xOwotCQlmb3IgKGkgPSAwOyBp IDwgbnRhcGlsaW5lOyBpKyspIHsKLQkJICAgIGlmICh0YXBpbGluZXRhYltpXS5rd3ZhbCA8IGop IHsKLQkJCWogPSB0YXBpbGluZXRhYltpXS5rd3ZhbDsKLQkJCWsgPSBpOwotCQkgICAgfQotCQl9 Ci0JCWlmIChrID49IDApCi0JCSAgcyA9IF90YXBpbGluZXRhYltrXS5rd2Q7Ci0JCWVsc2UKLQkJ ICBzID0gIiI7Ci0KLQkJaWYgKCh5ID0gY21rZXkoX3RhcGlsaW5ldGFiLG50YXBpbGluZSwKLQkJ CSAgICAgICAiVEFQSSBkZXZpY2UgbmFtZSIscyx4eHN0cmluZykpIDwgMCkKLQkJICByZXR1cm4o eSk7Ci0KLQkJeHh0YXBpID0gMTsKLQotCQkvKiBHZXQgdGhlIG5vbiBVbmRlcnNjb3JlZCBzdHJp bmcgKi8KLQkJZm9yIChpID0gMDsgaSA8IG50YXBpbGluZTsgaSsrICkgewotCQkgICAgaWYgKHRh cGlsaW5ldGFiW2ldLmt3dmFsID09IHkpIHsKLQkJCXMgPSB0YXBpbGluZXRhYltpXS5rd2Q7Ci0J CQlicmVhazsKLQkJICAgIH0KLQkJfQotCSAgICB9IGVsc2UKLQkgICAgICB4eHRhcGkgPSAwOwot CX0KLSNlbmRpZiAvKiBDS19UQVBJICovCi0jZWxzZSAvKiBOVCAqLwotCS8qIG5vdCBPUy8yIFNM SVAgb3IgUFBQICovCi0JeHhzbGlwID0geHhwcHAgPSAwOwotI2VuZGlmIC8qIE5UICovCi0gICAg fQotICAgIGNrc3RybmNweSh0bXBidWYscyxUTVBCVUZTSVopOwkvKiBDb3B5IHRvIGEgc2FmZSBw bGFjZSAqLwotICAgIHMgPSB0bXBidWY7Ci0gICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAg ICAgcmV0dXJuKHgpOwotCi0jZWxzZSAvKiAhT1MyICovCi0KLSAgICBjbWZkYmkoJnN3LF9DTUtF WSwiRGV2aWNlIG5hbWUsIG9yIHN3aXRjaCIsCi0JICAgIiIsIiIsbnBzbHRhYiw0LHh4c3RyaW5n LHBzbHRhYiwmdHgpOwotICAgIGNtZmRiaSgmdHgsX0NNVFhULCIiLGRmdHR5LCIiLDAsMCx4eHN0 cmluZyxOVUxMLE5VTEwpOwotICAgIHdoaWxlICghY29uZmlybWVkKSB7Ci0JeCA9IGNtZmRiKCZz dyk7Ci0JZGVidWcoRjEwMSwic2V0bGluIGNtZmRiIiwiIix4KTsKLQlpZiAoeCA8IDApCi0JICBp ZiAoeCAhPSAtMykKLQkgICAgcmV0dXJuKHgpOwotCWlmICh4ID09IC0zKSB7Ci0JICAgIGlmICgo eCA9IGNtY2ZtKCkpIDwgMCkgewotCQlyZXR1cm4oeCk7Ci0JICAgIH0gZWxzZSB7Ci0JCWNvbmZp cm1lZCA9IDE7Ci0JCWJyZWFrOwotCSAgICB9Ci0JfQotCXN3aXRjaCAoY21yZXN1bHQuZmNvZGUp IHsKLQkgIGNhc2UgX0NNVFhUOgotCSAgICBja3N0cm5jcHkodG1wYnVmLGNtcmVzdWx0LnNyZXN1 bHQsVE1QQlVGU0laKTsKLQkgICAgcyA9IHRtcGJ1ZjsKLQkgICAgZGVidWcoRjExMCwic2V0bGlu IENNVFhUIix0bXBidWYsMCk7Ci0JICAgIGNvbmZpcm1lZCA9IDE7Ci0JICAgIGJyZWFrOwotCSAg Y2FzZSBfQ01LRVk6CQkJLyogU3dpdGNoICovCi0JICAgIGRlYnVnKEYxMDEsInNldGxpbiBDTUtF WSIsdG1wYnVmLGNtcmVzdWx0Lm5yZXN1bHQpOwotCSAgICBzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1 bHQpIHsKLQkgICAgICBjYXNlIFNMX0NOWDoJCS8qIC9DT05ORUNUICovCi0JCWN4ID0gMTsKLQkJ c3ggPSAwOwotCQlicmVhazsKLQkgICAgICBjYXNlIFNMX1NSVjoJCS8qIC9TRVJWRVIgKi8KLQkJ Y3ggPSAwOwotCQlzeCA9IDE7Ci0JCWJyZWFrOwotI2lmZGVmIFZNUwotCSAgICAgIGNhc2UgU0xf U0hSOgkJLyogL1NIQVJFICovCi0JCXNociA9IDE7Ci0JCWJyZWFrOwotCSAgICAgIGNhc2UgU0xf TlNIOgkJLyogL05PU0hBUkUgKi8KLQkJc2hyID0gMDsKLQkJYnJlYWs7Ci0jZW5kaWYgLyogVk1T ICovCi0JICAgIH0KLQkgICAgY29udGludWU7Ci0JICBkZWZhdWx0OgotCSAgICBkZWJ1ZyhGMTAx LCJzZXRsaW4gYmFkIGNtZmRiIHJlc3VsdCIsIiIsY21yZXN1bHQuZmNvZGUpOwotCSAgICBtYWtl c3RyKCZzbG1zZywiSW50ZXJuYWwgZXJyb3IiKTsKLQkgICAgcHJpbnRmKCI/SW50ZXJuYWwgcGFy c2luZyBlcnJvclxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBP UzIgKi8KLSAgICBpZiAoIWNvbmZpcm1lZCkKLSAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkK LQlyZXR1cm4oeCk7Ci0KLSAgICBkZWJ1ZyhGMTEwLCJzZXRsaW4gcHJlLWN4X3NlcmlhbCBzIixz LDApOwotICAgIGRlYnVnKEYxMTAsInNldGxpbiBwcmUtY3hfc2VyaWFsIGxpbmUiLGxpbmUsMCk7 Ci0gICAgeCA9IGN4X3NlcmlhbChzLGN4LHN4LHNocix6eiwwLAotI2lmZGVmIE9TMgotI2lmZGVm IE5UCi0gICAgICAgICAgICAgICAgICAgKHh4dGFwaSA/IENYX1RBUEkgOiAwKQotI2Vsc2UKLSAg ICAgICAgICAgICAgICAgICAoeHhzbGlwID8gQ1hfU0xJUCA6IDApIHwgKHh4cHBwID8gQ1hfUFBQ IDogMCkKLSNlbmRpZiAvKiBOVCAqLwotI2Vsc2UgLyogT1MyICovCi0gICAgICAgICAgICAgICAg ICAgMAotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgICAgICk7Ci0gICAgZGVidWco RjExMSwic2V0bGluIGN4X3NlcmlhbCIsbGluZSx4KTsKLSAgICByZXR1cm4oeCk7Ci19Ci0jZW5k aWYgLyogTk9MT0NBTCAqLwotCi0jaWZkZWYgQ0tDSEFOTkVMSU8KLS8qCi0gIEMtTGlicmFyeSBi YXNlZCBmaWxlLWkvbyBwYWNrYWdlIGZvciBzY3JpcHRzLiAgVGhpcyBzaG91bGQgYmUgcG9ydGFi bGUgdG8KLSAgYWxsIEMtS2VybWl0IHZlcnNpb25zIHNpbmNlIGl0IHVzZXMgdGhlIHNhbWUgQVBJ cyB3ZSBoYXZlIGFsd2F5cyB1c2VkIGZvcgotICBwcm9jZXNzaW5nIGNvbW1hbmQgZmlsZXMuICBU aGUgZW50aXJlIGNoYW5uZWwgaS9vIHBhY2thZ2UgaXMgY29udGFpbmVkCi0gIGhlcmVpbiwgYXBh cnQgZnJvbSBzb21lIGtleXdvcmQgdGFibGUgZW50cmllcyBpbiB0aGUgbWFpbiBrZXl3b3JkIHRh YmxlCi0gIGFuZCB0aGUgaGVscCB0ZXh0IGluIHRoZSBIRUxQIGNvbW1hbmQgbW9kdWxlLgotCi0g IE9uIHBsYXRmb3JtcyBsaWtlIFZNUyBhbmQgVk9TLCB0aGlzIHBhY2thZ2UgaGFuZGxlcyBvbmx5 IFVOSVgtc3R5bGUKLSAgc3RyZWFtIGZpbGVzLiAgSWYgZGVzaXJlZCwgaXQgY2FuIGJlIHJlcGxh Y2VkIGZvciB0aG9zZSBwbGF0Zm9ybXMgYnkKLSAgPCM+aWZkZWYnaW5nIG91dCB0aGlzIGNvZGUg YW5kIGFkZGluZyB0aGUgZXF1aXZhbGVudCByZXBsYWNlbWVudCByb3V0aW5lcwotICB0byB0aGUg Y2s/ZmlvLmMgbW9kdWxlLCBlLmcuIGZvciBSTVMtYmFzZWQgZmlsZSBpL28gaW4gY2t2ZmlvLmMu Ci0qLwotI2lmbmRlZiBOT1NUQVQKLSNpZmRlZiBWTVMKLS8qIDIwMTAtMDMtMDkgU01TLiAgVkFY IEMgbmVlZHMgaGVscCB0byBmaW5kICJzeXMiLiAgSXQncyBlYXNpZXIgbm90IHRvIHRyeS4gKi8K LSNpbmNsdWRlIDxzdGF0Lmg+Ci0jZWxzZSAvKiBkZWYgVk1TICovCi0jaW5jbHVkZSA8c3lzL3N0 YXQuaD4KLSNlbmRpZiAvKiBkZWYgVk1TIFtlbHNlXSAqLwotI2VuZGlmIC8qIE5PU1RBVCAqLwot Ci0jaWZkZWYgTkxDSEFSCi1zdGF0aWMgaW50IHpfbHQgPSAxOyAgICAgICAgICAgICAgICAgICAg LyogTGVuZ3RoIG9mIGxpbmUgdGVybWluYXRvciAqLwotI2Vsc2UKLXN0YXRpYyBpbnQgel9sdCA9 IDI7Ci0jZW5kaWYgLyogTkxDSEFSICovCi0KLXN0cnVjdCBja3pfZmlsZSB7ICAgICAgICAgICAg ICAgICAgICAgICAvKiBDLUtlcm1pdCBmaWxlIHN0cnVjdCAqLwotICAgIEZJTEUgKiB6X2ZwOyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEluY2x1ZGVzIHRoZSBDLUxpYiBmaWxlIHN0cnVjdCAq LwotICAgIHVuc2lnbmVkIGludCB6X2ZsYWdzOyAgICAgICAgICAgICAgIC8qIFBsdXMgQy1LZXJt aXQgbW9kZSBmbGFncywgKi8KLSAgICBDS19PRkZfVCB6X25saW5lOwkJCS8qIGN1cnJlbnQgbGlu ZSBudW1iZXIgaWYga25vd24sICovCi0gICAgY2hhciB6X25hbWVbQ0tNQVhQQVRIKzJdOyAgICAg ICAgICAgLyogYW5kIHRoZSBmaWxlJ3MgbmFtZS4gKi8KLX07Ci1zdGF0aWMgc3RydWN0IGNrel9m aWxlICoqIHpfZmlsZSA9IE5VTEw7IC8qIEFycmF5IG9mIEMtS2VybWl0IGZpbGUgc3RydWN0cyAq Lwotc3RhdGljIGludCB6X2luaXRlZCA9IDA7ICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIGFy cmF5IGluaXRpYWxpemVkICovCi1pbnQgel9tYXhjaGFuID0gWl9NQVhDSEFOOyAgICAgICAgICAg ICAgLyogTWF4IG51bWJlciBvZiBDLUtlcm1pdCBjaGFubmVscyAqLwotaW50IHpfb3Blbm1heCA9 IENLTUFYT1BFTjsgICAgICAgICAgICAgIC8qIE1heCBudW1iZXIgb2Ygb3BlbiBmaWxlcyBvdmVy YWxsICovCi1pbnQgel9ub3BlbiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogSG93IG1h bnkgY2hhbm5lbHMgcHJlc2VudGx5IG9wZW4gKi8KLWludCB6X2Vycm9yID0gMDsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBNb3N0IHJlY2VudCBlcnJvciAqLwotaW50IHpfZmlsY291bnQgPSAt MTsgICAgICAgICAgICAgICAgICAgIC8qIE1vc3QgcmVjZW50IEZJTEUgQ09VTlQgcmVzdWx0ICov Ci0KLSNkZWZpbmUgUkRfTElORSAwICAgICAgICAgICAgICAgICAgICAgICAvKiBGSUxFIFJFQUQg b3B0aW9ucyAqLwotI2RlZmluZSBSRF9DSEFSIDEKLSNkZWZpbmUgUkRfU0laRSAyCi0jZGVmaW5l IFJEX1RSSU0gOAkJCS8qIExpa2UgU25vYm9sICZUUklNID0gMSAqLwotI2RlZmluZSBSRF9VTlRB IDkJCQkvKiBVbnRhYmlmeSAqLwotCi0jZGVmaW5lIFdSX0xJTkUgUkRfTElORSAgICAgICAgICAg ICAgICAgLyogRklMRSBXUklURSBvcHRpb25zICovCi0jZGVmaW5lIFdSX0NIQVIgUkRfQ0hBUgot I2RlZmluZSBXUl9TSVpFIFJEX1NJWkUKLSNkZWZpbmUgV1JfU1RSSSAzCi0jZGVmaW5lIFdSX0xQ QUQgNAotI2RlZmluZSBXUl9SUEFEIDUKLQotI2lmZGVmIFVOSVgKLWV4dGVybiBpbnQgY2ttYXhm aWxlczsgICAgICAgICAgICAgICAgICAvKiBGaWxsZWQgaW4gYnkgc3lzaW5pdCgpLiAqLwotI2Vu ZGlmIC8qIFVOSVggKi8KLQotLyogU2VlIGNrY2tlci5oIGZvciBlcnJvciBudW1iZXJzICovCi0v KiBTZWUgY2tjZGViLmggZm9yIFpfTUFYQ0hBTiBhbmQgQ0tNQVhPUEVOIGRlZmluaXRpb25zICov Ci0vKiBOT1RFOiBGb3IgVk1TIHdlIG1pZ2h0IGJlIGFibGUgdG8gZmlsbCBpbiBja21heGZpbGVz ICovCi0vKiBmcm9tIEZJTExNIGFuZCBDSEFOTkVMQ05UIC0tIGZpbmQgb3V0IGFib3V0IHRoZXNl Li4uICovCi0KLXN0YXRpYyBjaGFyICogZm9wbmFyZ3NbXSA9IHsgICAgICAgICAgICAvKiBNb2Rl IGNvbWJpbmF0aW9ucyBmb3IgZm9wZW4oKSAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAvKiBBbGwg Y29tYmluYXRpb25zIG9mIHJ3YSAqLwotICAgICIiLCAgInIiLCAgInciLCAgInJ3IiwgICJhIiwg ICJyYSIsICAid2EiLCAgInJ3YSIsIC8qIFRleHQgbW9kZSAqLwotICAgICJiIiwgInJiIiwgIndi IiwgInJ3YiIsICJhYiIsICJyYWIiLCAid2FiIiwgInJ3YWIiIC8qIEJpbmFyeSBtb2RlICovCi0j ZWxzZQotICAgIC8qIENvbWJpbmF0aW9ucyBhbmQgc3ludGF4IHBlcm1pdHRlZCBieSBDIGxpYnJh cmllcy4uLiAqLwotICAgICIiLCAgInIiLCAgInciLCAgInIrIiwgICJhIiwgICIiLCAgICJhIiwg ICIiLCAvKiBUZXh0IG1vZGUgKi8KLSNpZmRlZiBPUzIKLSAgICAiIiwgICJyYiIsICJ3YiIsICJy K2IiLCAiYWIiLCAiIiwgICAiYWIiLCAiIiAvKiBCaW5hcnkgbW9kZXMgZm9yIEs5NSAqLwotI2Vs c2UKLSNpZmRlZiBWTVMKLSAgICAiIiwgICJyYiIsICJ3YiIsICJyK2IiLCAiYWIiLCAiIiwgICAi YWIiLCAiIiAvKiBCaW5hcnkgbW9kZXMgZm9yIFZNUyAqLwotI2Vsc2UKLSAgICAiIiwgICJyIiwg ICAidyIsICJyKyIsICAiYSIsICAiIiwgICAiYSIsICAiIiAvKiBCaW5hcnkgbW9kZXMgZm9yIFVO SVggKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBDT01N RU5UICovCi19Owotc3RhdGljIGludCBuZm9wbmFyZ3MgPSBzaXplb2YoZm9wbmFyZ3MpIC8gc2l6 ZW9mKGNoYXIgKik7Ci0KLWNoYXIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBFcnJvciBtZXNzYWdlcyAqLwotY2tmZXJyb3IobikgaW50IG47IHsKLSAgICBzd2l0Y2ggKG4p IHsKLSAgICAgIGNhc2UgRlhfTkVSOiByZXR1cm4oIk5vIGVycm9yIik7Ci0gICAgICBjYXNlIEZY X1NZUzogcmV0dXJuKGNrX2VycnN0cigpKTsKLSAgICAgIGNhc2UgRlhfRU9GOiByZXR1cm4oIkVu ZCBvZiBmaWxlIik7Ci0gICAgICBjYXNlIEZYX05PUDogcmV0dXJuKCJGaWxlIG5vdCBvcGVuIik7 Ci0gICAgICBjYXNlIEZYX0NITjogcmV0dXJuKCJDaGFubmVsIG91dCBvZiByYW5nZSIpOwotICAg ICAgY2FzZSBGWF9STkc6IHJldHVybigiUGFyYW1ldGVyIG91dCBvZiByYW5nZSIpOwotICAgICAg Y2FzZSBGWF9OTUY6IHJldHVybigiVG9vIG1hbnkgZmlsZXMgb3BlbiIpOwotICAgICAgY2FzZSBG WF9GT1A6IHJldHVybigiT3BlcmF0aW9uIGNvbmZsaWN0cyB3aXRoIE9QRU4gbW9kZSIpOwotICAg ICAgY2FzZSBGWF9OWUk6IHJldHVybigiT1BFTiBtb2RlIG5vdCBzdXBwb3J0ZWQiKTsKLSAgICAg IGNhc2UgRlhfQk9NOiByZXR1cm4oIklsbGVnYWwgY29tYmluYXRpb24gb2YgT1BFTiBtb2RlcyIp OwotICAgICAgY2FzZSBGWF9BQ0M6IHJldHVybigiQWNjZXNzIGRlbmllZCIpOwotICAgICAgY2Fz ZSBGWF9GTkY6IHJldHVybigiRmlsZSBub3QgZm91bmQiKTsKLSAgICAgIGNhc2UgRlhfT0ZMOiBy ZXR1cm4oIkJ1ZmZlciBvdmVyZmxvdyIpOwotICAgICAgY2FzZSBGWF9MTlU6IHJldHVybigiQ3Vy cmVudCBsaW5lIG51bWJlciB1bmtub3duIik7Ci0gICAgICBjYXNlIEZYX1JPTzogcmV0dXJuKCJP ZmYgbGltaXRzIik7Ci0gICAgICBjYXNlIEZYX1VOSzogcmV0dXJuKCJPcGVyYXRpb24gZmFpbHMg LSByZWFzb24gdW5rbm93biIpOwotICAgICAgZGVmYXVsdDogcmV0dXJuKCJFcnJvciBudW1iZXIg b3V0IG9mIHJhbmdlIik7Ci0gICAgfQotfQotCi0vKgotICBaIF8gTyBQIEUgTiAtLSAgT3BlbiBh IGZpbGUgZm9yIHRoZSByZXF1ZXN0ZWQgdHlwZSBvZiBhY2Nlc3MuCi0KLSAgQ2FsbCB3aXRoOgot ICAgIG5hbWU6ICBOYW1lIG9mIGZpbGUgdG8gYmUgb3BlbmVkLgotICAgIGZsYWdzOiBBbnkgY29t YmluYXRpb24gb2YgRk1feHh4IHZhbHVlcyBleGNlcHQgRk1fRU9GIChja2NrZXIuaCkuCi0gIFJl dHVybnM6Ci0gICAgPj0gMCBvbiBzdWNjZXNzOiBUaGUgYXNzaWduZWQgY2hhbm5lbCBudW1iZXIK LSAgICA8ICAwIG9uIGZhaWx1cmU6IEEgbmVnYXRpdmUgRlhfeHh4IGVycm9yIGNvZGUgKGNrY2tl ci5oKS4KLSovCi1pbnQKLXpfb3BlbihuYW1lLCBmbGFncykgY2hhciAqIG5hbWU7IGludCBmbGFn czsgewotICAgIGludCBpLCBuOwotICAgIEZJTEUgKiB0OwotICAgIGNoYXIgKiBtb2RlOwotICAg IGRlYnVnKEYxMTEsInpfb3BlbiIsbmFtZSxmbGFncyk7Ci0gICAgaWYgKCFuYW1lKSBuYW1lID0g IiI7ICAgICAgICAgICAgICAgLyogQ2hlY2sgbmFtZSBhcmd1bWVudCAqLwotICAgIGlmICghbmFt ZVswXSkKLSAgICAgIHJldHVybih6X2Vycm9yID0gRlhfQkZOKTsKLSAgICBpZiAoZmxhZ3MgJiBG TV9DTUQpICAgICAgICAgICAgICAgICAvKiBPcGVuaW5nIHBpcGVzIG5vdCBpbXBsZW1lbnRlZCB5 ZXQgKi8KLSAgICAgIHJldHVybih6X2Vycm9yID0gRlhfTllJKTsgICAgICAgICAvKiAoYW5kIG5v dCBwb3J0YWJsZSBlaXRoZXIpICovCi0gICAgZGVidWcoRjEwMSwiel9vcGVuIG5mb3BuYXJncyIs IiIsbmZvcG5hcmdzKTsKLSAgICBpZiAoZmxhZ3MgPCAwIHx8IGZsYWdzID49IG5mb3BuYXJncykg LyogUmFuZ2UgY2hlY2sgZmxhZ3MgKi8KLSAgICAgIHJldHVybih6X2Vycm9yID0gRlhfUk5HKTsK LSAgICBtb2RlID0gZm9wbmFyZ3NbZmxhZ3NdOyAgICAgICAgICAgICAvKiBHZXQgZm9wZW4oKSBh cmcgKi8KLSAgICBkZWJ1ZyhGMTExLCJ6X29wZW4gZm9wZW4gYXJncyIsbW9kZSxmbGFncyk7Ci0g ICAgaWYgKCFtb2RlWzBdKSAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgZm9yIGlsbGVn YWwgY29tYmluYXRpb25zICovCi0gICAgICByZXR1cm4oel9lcnJvciA9IEZYX0JPTSk7Ci0gICAg aWYgKCF6X2luaXRlZCkgeyAgICAgICAgICAgICAgICAgICAgLyogSWYgZmlsZSBzdHJ1Y3RzIG5v dCBpbml0ZWQgKi8KLSAgICAgICAgZGVidWcoRjEwMSwiel9vcGVuIHpfbWF4Y2hhbiAxIiwiIix6 X21heGNoYW4pOwotI2lmZGVmIFVOSVgKLSAgICAgICAgZGVidWcoRjEwMSwiel9vcGVuIGNrbWF4 ZmlsZXMiLCIiLGNrbWF4ZmlsZXMpOwotICAgICAgICBpZiAoY2ttYXhmaWxlcyA+IDApIHsgICAg ICAgICAgIC8qIFNldCBpbiBjaz90aW8uYzogc3lzaW5pdCgpICovCi0gICAgICAgICAgICBpbnQg eDsKLSAgICAgICAgICAgIHggPSBja21heGZpbGVzIC0gWk5GSUxTIC0gNTsKLSAgICAgICAgICAg IGlmICh4ID4gel9tYXhjaGFuKSAgICAgICAgICAvKiBzeXNjb25mKCkgdmFsdWUgZ3JlYXRlciB0 aGFuICovCi0gICAgICAgICAgICAgIHpfbWF4Y2hhbiA9IHg7ICAgICAgICAgICAgLyogdmFsdWUg ZnJvbSBoZWFkZXIgZmlsZXMuICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6X29wZW4gel9t YXhjaGFuIDIiLCIiLHpfbWF4Y2hhbik7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBVTklYICovCi0g ICAgICAgIGlmICh6X21heGNoYW4gPCBaX01JTkNIQU4pICAgICAgLyogQWxsb2NhdGUgYXQgbGVh c3QgdGhpcyBtYW55LiAqLwotICAgICAgICAgIHpfbWF4Y2hhbiA9IFpfTUlOQ0hBTjsKLSAgICAg ICAgZGVidWcoRjEwMSwiel9vcGVuIHpfbWF4Y2hhbiAzIiwiIix6X21heGNoYW4pOwotICAgICAg ICAvKiBOb3RlOiBUaGlzIGNvdWxkIGJlIGEgcHJldHR5IGJpZyBjaHVuayBvZiBtZW1vcnkgKi8K LSAgICAgICAgLyogaWYgel9tYXhjaGFuIGlzIGEgYmlnIG51bWJlci4gIElmIHRoaXMgYmVjb21l cyBhIHByb2JsZW0gKi8KLSAgICAgICAgLyogd2UnbGwgbmVlZCB0byBtYWxsb2MgYW5kIGZyZWUg ZWFjaCBlbGVtZW50IGF0IG9wZW4vY2xvc2UgdGltZSAqLwotI2lmZGVmIENPTU1FTlQKLQkvKiBN YXkgMjAwNiAtIGl0J3MgdGltZSAtIGluIGN1cnJlbnQgTGludXggdGhpcyBhYm91dCAzTUIgKi8K LSAgICAgICAgaWYgKCEoel9maWxlID0gKHN0cnVjdCBja3pfZmlsZSAqKQotICAgICAgICAgICAg ICBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBja3pfZmlsZSkgKiAoel9tYXhjaGFuICsgMSkpKSkKLSAg ICAgICAgICByZXR1cm4oel9lcnJvciA9IEZYX05NRik7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkg PCB6X21heGNoYW47IGkrKykgewotICAgICAgICAgICAgel9maWxlW2ldLnpfZnAgPSBOVUxMOwot ICAgICAgICAgICAgel9maWxlW2ldLnpfZmxhZ3MgPSAwOwotICAgICAgICAgICAgel9maWxlW2ld LnpfbmxpbmUgPSAwOwotICAgICAgICAgICAgKih6X2ZpbGVbaV0uel9uYW1lKSA9ICdcMCc7Ci0g ICAgICAgIH0KLSNlbHNlCi0JLyogTmV3IGVjb25vbWljYWwgd2F5LCBhbGxvY2F0ZSBzdG9yYWdl IGZvciBlYWNoIGNoYW5uZWwgYXMgbmVlZGVkICovCi0JaWYgKCF6X2ZpbGUpIHsKLQkgICAgel9m aWxlID0gKHN0cnVjdCBja3pfZmlsZSAqKiltYWxsb2MoKHpfbWF4Y2hhbiArIDEpICoKLQkJCQkJ CXNpemVvZihzdHJ1Y3QgY2t6X2ZpbGUgKikpOwotCSAgICBpZiAoIXpfZmlsZSkKLQkgICAgICBy ZXR1cm4oel9lcnJvciA9IEZYX05NRik7Ci0JICAgIGZvciAoaSA9IDA7IGkgPCB6X21heGNoYW47 IGkrKykKLQkgICAgICB6X2ZpbGVbaV0gPSBOVUxMOwotCX0KLSNlbmRpZgkvKiBDT01NRU5UICov Ci0gICAgICAgIHpfaW5pdGVkID0gMTsgICAgICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgd2Ug aW5pdGlhbGl6ZWQgKi8KLSAgICB9Ci0gICAgZm9yIChuID0gLTEsIGkgPSAwOyBpIDwgel9tYXhj aGFuOyBpKyspIHsgLyogRmluZCBhIGZyZWUgY2hhbm5lbCAqLwotI2lmZGVmIENPTU1FTlQKLSAg ICAgICAgaWYgKCF6X2ZpbGVbaV0uel9mcCkgewotICAgICAgICAgICAgbiA9IGk7Ci0gICAgICAg ICAgICBicmVhazsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgaWYgKCF6X2ZpbGVbaV0pIHsK LQkgICAgel9maWxlW2ldID0gKHN0cnVjdCBja3pfZmlsZSAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVj dCBja3pfZmlsZSkpOwotCSAgICBpZiAoIXpfZmlsZVtpXSkKLQkgICAgICByZXR1cm4oel9lcnJv ciA9IEZYX05NRik7Ci0gICAgICAgICAgICBuID0gaTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICB9Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwotCi0gICAgfQotICAgIGlmIChuIDwgMCB8fCBu ID49IHpfbWF4Y2hhbikgICAgICAgIC8qIEFueSBmcmVlIGNoYW5uZWxzPyAqLwotICAgICAgcmV0 dXJuKHpfZXJyb3IgPSBGWF9OTUYpOyAgICAgICAgIC8qIE5vLCBmYWlsLiAqLwotICAgIGVycm5v ID0gMDsKLQotICAgIHpfZmlsZVtuXS0+el9mbGFncyA9IDA7CQkvKiBJbiBjYXNlIG9mIGZhaWx1 cmUuLi4gKi8KLSAgICB6X2ZpbGVbbl0tPnpfZnAgPSBOVUxMOwkJLyogU2V0IGZpbGUgcG9pbnRl ciB0byBOVUxMICovCi0KLSAgICB0ID0gZm9wZW4obmFtZSwgbW9kZSk7ICAgICAgICAgICAgICAv KiBUcnkgdG8gb3BlbiB0aGUgZmlsZS4gKi8KLSAgICBpZiAoIXQpIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBGYWlsZWQuLi4gKi8KLSAgICAgICAgZGVidWcoRjExMSwiel9vcGVuIGVy cm9yIixuYW1lLGVycm5vKTsKLSNpZmRlZiBFTUZJTEUKLSAgICAgICAgaWYgKGVycm5vID09IEVN RklMRSkKLSAgICAgICAgICByZXR1cm4oel9lcnJvciA9IEZYX05NRik7Ci0jZW5kaWYgLyogRU1G SUxFICovCi0JZnJlZSh6X2ZpbGVbbl0pOwotCXpfZmlsZVtuXSA9IE5VTEw7Ci0gICAgICAgIHJl dHVybih6X2Vycm9yID0gKGVycm5vID8gIEZYX1NZUyA6IEZYX1VOSykpOyAvKiBSZXR1cm4gZXJy b3IgY29kZSAqLwotICAgIH0KLSNpZmRlZiBOVAotI2lmZGVmIE9fU0VRVUVOVElBTAotICAgIGlm ICh0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENhY2hpbmcgaGludCBmb3IgTlQg Ki8KLSAgICAgIF9zZXRtb2RlKF9maWxlbm8odCksT19TRVFVRU5USUFMKTsKLSNlbmRpZiAvKiBP X1NFUVVFTlRJQUwgKi8KLSNlbmRpZiAvKiBOVCAqLwotICAgIHpfbm9wZW4rKzsgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIE9wZW4sIGNvdW50IGl0LiAqLwotICAgIHpfZmlsZVtuXS0+el9m cCA9IHQ7CQkvKiBTdGFzaCB0aGUgZmlsZSBwb2ludGVyICovCi0gICAgel9maWxlW25dLT56X2Zs YWdzID0gZmxhZ3M7CQkvKiBhbmQgdGhlIGZsYWdzICovCi0gICAgel9maWxlW25dLT56X25saW5l ID0gMDsJCS8qIEN1cnJlbnQgbGluZSBudW1iZXIgaXMgMCAqLwotICAgIHpfZXJyb3IgPSAwOwot ICAgIHpmbnFmcChuYW1lLENLTUFYUEFUSCx6X2ZpbGVbbl0tPnpfbmFtZSk7IC8qIGFuZCB0aGUg ZmlsZSdzIGZ1bGwgbmFtZSAqLwotICAgIHJldHVybihuKTsgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFJldHVybiB0aGUgY2hhbm5lbCBudW1iZXIgKi8KLX0KLQotaW50Ci16X2Nsb3NlKGNo YW5uZWwpIGludCBjaGFubmVsOyB7ICAgICAgICAgLyogQ2xvc2UgZmlsZSBvbiBnaXZlbiBjaGFu bmVsICovCi0gICAgaW50IHg7Ci0gICAgRklMRSAqIHQ7Ci0gICAgaWYgKCF6X2luaXRlZCkgICAg ICAgICAgICAgICAgICAgICAgLyogQ2FsbGVkIGJlZm9yZSBhbnkgZmlsZXMgYXJlIG9wZW4/ICov Ci0gICAgICByZXR1cm4oel9lcnJvciA9IEZYX05PUCk7Ci0gICAgaWYgKGNoYW5uZWwgPj0gel9t YXhjaGFuKSAgICAgICAgICAgLyogQ2hhbm5lbCBvdXQgb2YgcmFuZ2U/ICovCi0gICAgICByZXR1 cm4oel9lcnJvciA9IEZYX0NITik7Ci0gICAgaWYgKCF6X2ZpbGVbY2hhbm5lbF0pCi0gICAgICBy ZXR1cm4oel9lcnJvciA9IEZYX05PUCk7Ci0gICAgaWYgKCEodCA9IHpfZmlsZVtjaGFubmVsXS0+ el9mcCkpICAgIC8qIENoYW5uZWwgd2Fzbid0IG9wZW4/ICovCi0gICAgICByZXR1cm4oel9lcnJv ciA9IEZYX05PUCk7Ci0gICAgZXJybm8gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyog U2V0IGVycm5vIDAgdG8gZ2V0IGEgZ29vZCByZWFkaW5nICovCi0gICAgeCA9IGZjbG9zZSh0KTsg ICAgICAgICAgICAgICAgICAgICAgLyogVHJ5IHRvIGNsb3NlICovCi0gICAgaWYgKHggPT0gRU9G KSAgICAgICAgICAgICAgICAgICAgICAgLyogT24gZmFpbHVyZSAqLwotICAgICAgcmV0dXJuKHpf ZXJyb3IgPSBGWF9TWVMpOyAgICAgICAgIC8qIGluZGljYXRlIHN5c3RlbSBlcnJvci4gKi8KLSAg ICB6X25vcGVuLS07ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbG9zZWQgT0ssIGRlY3Jl bWVudCBvcGVuIGNvdW50ICovCi0gICAgel9maWxlW2NoYW5uZWxdLT56X2ZwID0gTlVMTDsJLyog U2V0IGZpbGUgcG9pbnRlciB0byBOVUxMICovCi0gICAgel9maWxlW2NoYW5uZWxdLT56X25saW5l ID0gMDsJLyogQ3VycmVudCBsaW5lIG51bWJlciBpcyAwICovCi0gICAgel9maWxlW2NoYW5uZWxd LT56X2ZsYWdzID0gMDsJLyogU2V0IGZsYWdzIHRvIDAgKi8KLSAgICAqKHpfZmlsZVtjaGFubmVs XS0+el9uYW1lKSA9ICdcMCc7CS8qIENsZWFyIG5hbWUgKi8KLSAgICBmcmVlKHpfZmlsZVtjaGFu bmVsXSk7Ci0gICAgel9maWxlW2NoYW5uZWxdID0gTlVMTDsKLSAgICByZXR1cm4oel9lcnJvciA9 IDApOwotfQotCi0vKgotICBaIF8gTyBVIFQgIC0tICBPdXRwdXQgc3RyaW5nIHRvIGNoYW5uZWwu Ci0KLSAgQ2FsbCB3aXRoOgotICAgIGNoYW5uZWw6ICAgICBDaGFubmVsIG51bWJlciB0byB3cml0 ZSB0by4KLSAgICBzOiAgICAgICAgICAgU3RyaW5nIHRvIHdyaXRlLgotICAgIGxlbmd0aCA+IC0x OiBIb3cgbWFueSBjaGFyYWN0ZXJzIG9mIHMgdG8gd3JpdGUuCi0gICAgbGVuZ3RoIDwgMDogIFdy aXRlIGVudGlyZSBOVUwtdGVybWluYXRlZCBzdHJpbmcuCi0gICAgZmxhZ3MgPT0gMDogIFN1cHBs eSBsaW5lIHRlcm1pbmF0aW9uLgotICAgIGZsYWdzID4gIDA6ICBEb24ndCBzdXBwbHkgbGluZSB0 ZXJtaW5hdGlvbi4KLSAgICBmbGFncyA8ICAwOiAgV3JpdGUgJ2xlbmd0aCcgTlVMIGNoYXJhY3Rl cnMuCi0gIFNwZWNpYWwgY2FzZToKLSAgICBJZiBmbGFncyA+IC0xIGFuZCBzIGlzIGVtcHR5IG9y IE5VTEwgYW5kIGxlbmd0aCA9PSAxLCB3cml0ZSAxIE5VTC4KLSAgUmV0dXJuczoKLSAgICBOdW1i ZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuIHRvIGNoYW5uZWwgb24gc3VjY2Vzcywgb3IKLSAgICBu ZWdhdGl2ZSBGWF94eHggZXJyb3IgY29kZSBvbiBmYWlsdXJlLgotKi8KLWludAotel9vdXQoY2hh bm5lbCxzLGxlbmd0aCxmbGFncykgaW50IGNoYW5uZWwsIGZsYWdzLCBsZW5ndGg7IGNoYXIgKiBz OyB7Ci0gICAgRklMRSAqIHQ7Ci0gICAgaW50IHgsIG47Ci0gICAgY2hhciBjID0gJ1wwJzsKLQot ICAgIGlmICghcykgcyA9ICIiOyAgICAgICAgICAgICAgICAgICAgIC8qIEd1YXJkIGFnYWluc3Qg bnVsbCBwb2ludGVyICovCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKSB7Ci0gICAgICAg IGRlYnVnKEYxMTEsInpfb3V0IixzLGNoYW5uZWwpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJ6X291 dCBsZW5ndGgiLCIiLGxlbmd0aCk7Ci0gICAgICAgIGRlYnVnKEYxMDEsInpfb3V0IGZsYWdzIiwi IixmbGFncyk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0gICAgaWYgKCF6X2luaXRlZCkg ICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBpL28gaW5pdGVkPyAqLwotICAgICAgcmV0dXJu KHpfZXJyb3IgPSBGWF9OT1ApOwotICAgIGlmIChjaGFubmVsID49IHpfbWF4Y2hhbikgICAgICAg ICAgIC8qIENoYW5uZWwgaW4gcmFuZ2U/ICovCi0gICAgICByZXR1cm4oel9lcnJvciA9IEZYX0NI Tik7Ci0gICAgaWYgKCF6X2ZpbGVbY2hhbm5lbF0pCi0gICAgICByZXR1cm4oel9lcnJvciA9IEZY X05PUCk7Ci0gICAgaWYgKCEodCA9IHpfZmlsZVtjaGFubmVsXS0+el9mcCkpICAgIC8qIEZpbGUg b3Blbj8gKi8KLSAgICAgIHJldHVybih6X2Vycm9yID0gRlhfTk9QKTsKLSAgICBpZiAoISgoel9m aWxlW2NoYW5uZWxdLT56X2ZsYWdzKSAmIChGTV9XUkl8Rk1fQVBQKSkpIC8qIEluIHdyaXRlIG1v ZGU/ICovCi0gICAgICByZXR1cm4oel9lcnJvciA9IEZYX0ZPUCk7Ci0gICAgbiA9IGxlbmd0aDsg ICAgICAgICAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIHN0cmluZyB0byB3cml0ZSAqLwot ICAgIGlmIChuIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5lZ2F0aXZlIG1lYW5z IGdldCBpdCBvdXJzZWx2ZXMgKi8KLSAgICAgICAgaWYgKGZsYWdzIDwgMCkgICAgICAgICAgICAg ICAgICAvKiBFeGNlcHQgd2hlbiB0b2xkIHRvIHdyaXRlIE5VTHMgaW4gKi8KLSAgICAgICAgICBy ZXR1cm4oel9lcnJvciA9IEZYX1JORyk7ICAgICAvKiB3aGljaCBjYXNlIGFyZ3MgYXJlIGluY29u c2lzdGVudCAqLwotICAgICAgICBuID0gc3RybGVuKHMpOyAgICAgICAgICAgICAgICAgIC8qIEdl dCBsZW5ndGggb2Ygc3RyaW5nIGFyZyAqLwotICAgIH0KLSAgICBlcnJubyA9IDA7ICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBSZXNldCBlcnJubyAqLwotICAgIGRlYnVnKEYxMDEsInpfb3V0 IG4iLCIiLG4pOwotICAgIGlmIChmbGFncyA8IDApIHsgICAgICAgICAgICAgICAgICAgIC8qIFdy aXRpbmcgTlVMcy4uLiAqLwotICAgICAgICBpbnQgaTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8 IG47IGkrKykgewotICAgICAgICAgICAgeCA9IGZ3cml0ZSgmYywxLDEsdCk7Ci0gICAgICAgICAg ICBpZiAoeCA8IDEpCi0gICAgICAgICAgICAgIHJldHVybih6X2Vycm9yID0gKGVycm5vID8gRlhf U1lTIDogRlhfVU5LKSk7Ci0gICAgICAgIH0KLSAgICAgICAgel9maWxlW2NoYW5uZWxdLT56X25s aW5lID0gLTE7ICAgLyogQ3VycmVudCBsaW5lIG5vIGxvbmdlciBrbm93biAqLwotICAgICAgICB6 X2Vycm9yID0gMDsKLSAgICAgICAgcmV0dXJuKGkpOwotICAgIH0gZWxzZSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFdyaXRpbmcgc3RyaW5nIGFyZyAqLwotICAgICAgICBpZiAobiA9 PSAxICYmICFzWzBdKSAgICAgICAgICAgIC8qIFdyaXRpbmcgb25lIGNoYXIgYnV0IGl0J3MgTlVM ICovCi0gICAgICAgICAgeCA9IGZ3cml0ZSgmYywxLDEsdCk7Ci0gICAgICAgIGVsc2UgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogV3JpdGluZyBub24tTlVMIGNoYXIgb3Igc3RyaW5nICov Ci0gICAgICAgICAgeCA9IGZ3cml0ZShzLDEsbix0KTsKLSAgICAgICAgZGVidWcoRjEwMSwiel9v dXQgZndyaXRlIixja2l0b2EoeCksZXJybm8pOwotICAgICAgICBpZiAoeCA8IG4pICAgICAgICAg ICAgICAgICAgICAgIC8qIEZhaWx1cmUgdG8gd3JpdGUgcmVxdWVzdGVkIGFtb3VudCAqLwotICAg ICAgICAgIHJldHVybih6X2Vycm9yID0gKGVycm5vID8gRlhfU1lTIDogRlhfVU5LKSk7IC8qIFJl dHVybiBlcnJvciAqLwotICAgICAgICBpZiAoZmxhZ3MgPT0gMCkgeyAgICAgICAgICAgICAgIC8q IElmIHN1cHBseWluZyBsaW5lIHRlcm1pbmF0aW9uICovCi0gICAgICAgICAgICBpZiAoZndyaXRl KCJcbiIsMSwxLHQpKSAgICAgLyogZG8gdGhhdCAgKi8KLSAgICAgICAgICAgICAgeCArPSB6X2x0 OyAgICAgICAgICAgICAgICAvKiBjb3VudCB0aGUgdGVybWluYXRvciAqLwotICAgICAgICAgICAg aWYgKHpfZmlsZVtjaGFubmVsXS0+el9ubGluZSA+IC0xKSAvKiBjb3VudCB0aGlzIGxpbmUgKi8K LSAgICAgICAgICAgICAgel9maWxlW2NoYW5uZWxdLT56X25saW5lKys7Ci0gICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICB6X2ZpbGVbY2hhbm5lbF0tPnpfbmxpbmUgPSAtMTsgLyogQ3VycmVu dCBsaW5lIG5vIGxvbmdlciBrbm93biAqLwotICAgICAgICB9Ci0gICAgfQotICAgIHpfZXJyb3Ig PSAwOwotICAgIHJldHVybih4KTsKLX0KLQotI2RlZmluZSBaX0lOQlVGTEVOIDY0Ci0KLS8qCi0g IFogXyBJIE4gIC0tICBNdWx0aWNoYW5uZWwgaS9vIGZpbGUgaW5wdXQgZnVuY3Rpb24uCi0KLSAg Q2FsbCB3aXRoOgotICAgIGNoYW5uZWwgbnVtYmVyIHRvIHJlYWQgZnJvbS4KLSAgICBzID0gYWRk cmVzcyBvZiBkZXN0aW5hdGlvbiBidWZmZXIuCi0gICAgYnVmbGVuID0gZGVzdGluYXRpb24gYnVm ZmVyIGxlbmd0aC4KLSAgICBsZW5ndGggPSBOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCwgbXVzdCBi ZSA8IGJ1Zmxlbi4KLSAgICBmbGFnczogMCA9IHJlYWQgYSBsaW5lOyBub256ZXJvID0gcmVhZCB0 aGUgZ2l2ZW4gbnVtYmVyIG9mIGJ5dGVzLgotICBSZXR1cm5zOgotICAgIE51bWJlciBvZiBieXRl cyByZWFkIGludG8gYnVmZmVyIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KLSAgICBBIHRlcm1p bmF0aW5nIE5VTCBpcyBkZXBvc2l0ZWQgYWZ0ZXIgdGhlIGxhc3QgYnl0ZSB0aGF0IHdhcyByZWFk LgotKi8KLWludAotel9pbihjaGFubmVsLHMsYnVmbGVuLGxlbmd0aCxmbGFncykKLSBpbnQgY2hh bm5lbCwgYnVmbGVuLCBsZW5ndGgsIGZsYWdzOyBjaGFyICogczsKLS8qIHpfaW4gKi8gewotICAg IGludCBpLCBqLCB4OwotICAgIEZJTEUgKiB0OwotICAgIGNoYXIgKiBwOwotCi0gICAgaWYgKCF6 X2luaXRlZCkgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgZXZlcnl0aGluZy4uLiAqLwot ICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9OT1ApOwotICAgIGlmIChjaGFubmVsID49IHpfbWF4 Y2hhbikKLSAgICAgIHJldHVybih6X2Vycm9yID0gRlhfQ0hOKTsKLSAgICBpZiAoIXpfZmlsZVtj aGFubmVsXSkKLSAgICAgIHJldHVybih6X2Vycm9yID0gRlhfTk9QKTsKLSAgICBpZiAoISh0ID0g el9maWxlW2NoYW5uZWxdLT56X2ZwKSkKLSAgICAgIHJldHVybih6X2Vycm9yID0gRlhfTk9QKTsK LSAgICBpZiAoISgoel9maWxlW2NoYW5uZWxdLT56X2ZsYWdzKSAmIEZNX1JFQSkpCi0gICAgICBy ZXR1cm4oel9lcnJvciA9IEZYX0ZPUCk7Ci0gICAgaWYgKCFzKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogQ2hlY2sgZGVzdGluYXRpb24gKi8KLSAgICAgcmV0dXJuKHpfZXJyb3IgPSBG WF9STkcpOwotICAgIHNbMF0gPSBOVUw7Ci0gICAgaWYgKGxlbmd0aCA9PSAwKSAgICAgICAgICAg ICAgICAgICAgLyogUmVhZCAwIGJ5dGVzIC0gZWFzeS4gKi8KLSAgICAgIHJldHVybih6X2Vycm9y ID0gMCk7Ci0gICAgZGVidWcoRjEwMSwiel9pbiBjaGFubmVsIiwiIixjaGFubmVsKTsKLSAgICBk ZWJ1ZyhGMTAxLCJ6X2luIGJ1ZmxlbiIsIiIsYnVmbGVuKTsKLSAgICBkZWJ1ZyhGMTAxLCJ6X2lu IGxlbmd0aCIsIiIsbGVuZ3RoKTsKLSAgICBkZWJ1ZyhGMTAxLCJ6X2luIGZsYWdzIiwiIixmbGFn cyk7Ci0gICAgaWYgKGxlbmd0aCA8IDAgfHwgYnVmbGVuIDwgMCkgICAgICAgLyogQ2hlY2sgbGVu Z3RoIGFyZ3MgKi8KLSAgICAgIHJldHVybih6X2Vycm9yID0gRlhfUk5HKTsKLSAgICBpZiAoYnVm bGVuIDw9IGxlbmd0aCkKLSAgICAgIHJldHVybih6X2Vycm9yID0gRlhfUk5HKTsKLSAgICBlcnJu byA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBlcnJubyAqLwotICAgIGlm IChmbGFncykgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlYWQgYmxvY2sgb3IgYnl0ZSAq LwotCWludCBuOwkJCQkvKiAyMDA1MDkxMiAqLwotCW4gPSBsZW5ndGg7CQkJLyogMjAwNTA5MTIg Ki8KLQlpID0gMDsJCQkJLyogMjAwNTA5MTIgKi8KLQl3aGlsZSAobiA+IDApIHsJCQkvKiAyMDA1 MDkxMiAqLwotCSAgICBpID0gZnJlYWQocywxLG4sdCk7CQkvKiAyMDA1MDkxMiAqLwotI2lmZGVm IERFQlVHCi0JICAgIGlmIChkZWJsb2cpIHsKLQkJZGVidWcoRjExMSwiel9pbiBibG9jayIscyxp KTsKLQkJZGVidWcoRjEwMSwiel9pbiBibG9jayBlcnJubyIsIiIsZXJybm8pOwotCQlkZWJ1ZyhG MTAxLCJ6X2luIGJsb2NrIGZlcnJvciIsIiIsZmVycm9yKHQpKTsKLQkJZGVidWcoRjEwMSwiel9p biBibG9jayBmZW9mIiwiIixmZW9mKHQpKTsKLQkgICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0J ICAgIGlmIChpID09IDApIGJyZWFrOwkJLyogMjAwNTA5MTIgKi8KLQkgICAgcyArPSBpOwkJCS8q IDIwMDUwOTEyICovCi0JICAgIG4gLT0gaTsJCQkvKiAyMDA1MDkxMiAqLwotCX0KLQkvKiBDdXJy ZW50IGxpbmUgbm8gbG9uZ2VyIGtub3duICovCi0gICAgICAgIHpfZmlsZVtjaGFubmVsXS0+el9u bGluZSA9IChDS19PRkZfVCktMTsKLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBSZWFkIGxpbmUgKi8KLSNpZm5kZWYgQ09NTUVOVAotICAgICAgICAvKiBUaGlzIG1l dGhvZCBpcyB1c2VkIGJlY2F1c2UgaXQncyBzaW1wbGVyIHRoYW4gdGhlIG90aGVycyAqLwotICAg ICAgICAvKiBhbmQgYWxzbyBtYXJnaW5hbGx5IGZhc3Rlci4gKi8KLSAgICAgICAgZGVidWcoRjEw MSwiel9pbiBnZXRjIGxvb3AiLCIiLENLRlRFTEwodCkpOwotICAgICAgICBmb3IgKGkgPSAwOyBp IDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlmICgoeCA9IGdldGModCkpID09IEVPRikg ewotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsInpfaW4gZ2V0YyBlcnJvciIsIiIsQ0tGVEVM TCh0KSk7Ci0gICAgICAgICAgICAgICAgc1tpXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzW2ldID0geDsKLSAgICAgICAgICAgIGlm IChzW2ldID09ICdcbicpIHsKLSAgICAgICAgICAgICAgICBzW2ldID0gJ1wwJzsKLSAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBkZWJ1ZyhG MTExLCJ6X2luIGxpbmUgYnl0ZSBsb29wIixja2l0b2EoZXJybm8pLGkpOwotICAgICAgICBkZWJ1 ZyhGMTExLCJ6X2luIGxpbmUgZ290IixzLHpfZmlsZVtjaGFubmVsXS0+el9ubGluZSk7Ci0gICAg ICAgIGlmICh6X2ZpbGVbY2hhbm5lbF0tPnpfbmxpbmUgPiAtMSkKLSAgICAgICAgICB6X2ZpbGVb Y2hhbm5lbF0tPnpfbmxpbmUrKzsKLSNlbHNlCi0jaWZkZWYgQ09NTUVOVDIKLSAgICAgICAgLyog U3RyYWlnaHRmb3J3YXJkIGJ1dCBzdHJsZW4oKSBzbG93cyBpdCBkb3duLiAqLwotICAgICAgICBz WzBdID0gJ1wwJzsKLSAgICAgICAgaSA9IDA7Ci0gICAgICAgIGlmIChmZ2V0cyhzLGxlbmd0aCx0 KSkgewotICAgICAgICAgICAgaSA9IHN0cmxlbihzKTsKLSAgICAgICAgICAgIGlmIChpID4gMCAm JiBzW2ktMV0gPT0gJ1xuJykgaS0tOwotICAgICAgICB9Ci0gICAgICAgIGRlYnVnKEYxMTEsInpf aW4gbGluZSBmZ2V0cyIsY2tpdG9hKGVycm5vKSxpKTsKLSAgICAgICAgaWYgKHpfZmlsZVtjaGFu bmVsXS0+el9ubGluZSA+IC0xKQotICAgICAgICAgIHpfZmlsZVtjaGFubmVsXS0+el9ubGluZSsr OwotI2Vsc2UKLSAgICAgICAgLyogVGhpcyBpcyBhIGRvLWl0LXlvdXJzZWxmIGZnZXRzKCkgd2l0 aCBpdHMgb3duIHJlYWRhaGVhZCBhbmQgKi8KLSAgICAgICAgLyogcHV0YmFjay4gIEl0J3MgYSBi aXQgZmFzdGVyIHRoYW4gcmVhbCBmZ2V0cygpIGJ1dCBub3QgZW5vdWdoICovCi0gICAgICAgIC8q IHRvIGp1c3RpZnkgdGhlIGFkZGVkIGNvbXBsZXhpdHkgb3IgdGhlIHJpc2sgb2YgdGhlIGZ0ZWxs KCkgYW5kICovCi0gICAgICAgIC8qIGZzZWVrKCkgY2FsbHMgZmFpbGluZy4gKi8KLSAgICAgICAg aW50IGssIGZsYWcgPSAwOwotICAgICAgICBDS19PRkZfVCBwb3M7Ci0gICAgICAgIGZvciAoaSA9 IDA7ICFmbGFnICYmIGkgPD0gKGxlbmd0aCAtIFpfSU5CVUZMRU4pOyBpICs9IFpfSU5CVUZMRU4p IHsKLSAgICAgICAgICAgIGsgPSAoKGxlbmd0aCAtIGkpIDwgWl9JTkJVRkxFTikgPyBsZW5ndGgg LSBpIDogWl9JTkJVRkxFTjsKLSAgICAgICAgICAgIGlmICgoeCA9IGZyZWFkKHMraSwxLGssdCkp IDwgMSkKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBzW2kreF0gPSAnXDAnOwot ICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHg7IGorKykgewotICAgICAgICAgICAgICAgIGlm IChzW2kral0gPT0gJ1xuJykgewotICAgICAgICAgICAgICAgICAgICBzW2kral0gPSAnXDAnOwot ICAgICAgICAgICAgICAgICAgICBmbGFnICsrOwotICAgICAgICAgICAgICAgICAgICBwb3MgPSBD S0ZURUxMKHQpOwotICAgICAgICAgICAgICAgICAgICBpZiAocG9zID4gLTEpIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgIHBvcyAtPSAoeCAtIGogLSAxKTsKLSAgICAgICAgICAgICAgICAgICAg ICAgIHggPSBDS0ZTRUVLKHQsIHBvcywgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpICs9 IGo7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg fSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9TWVMpOwot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAo el9maWxlW2NoYW5uZWxdLT56X25saW5lID4gLTEpCi0gICAgICAgICAgel9maWxlW2NoYW5uZWxd LT56X25saW5lKys7Ci0gICAgICAgIGRlYnVnKEYxMTEsInpfaW4gbGluZSBjaHVuayBsb29wIixj a2l0b2EoZXJybm8pLGkpOwotI2VuZGlmIC8qIENPTU1FTlQyICovCi0jZW5kaWYgLyogQ09NTUVO VCAqLwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJ6X2luIGkiLGNraXRvYShlcnJubyksaSk7Ci0g ICAgaWYgKGkgPCAwKSBpID0gMDsgICAgICAgICAgICAgICAgICAgLyogTlVMLXRlcm1pbmF0ZSBy ZXN1bHQgKi8KLSAgICBzW2ldID0gJ1wwJzsKLSAgICBpZiAoaSA+IDApIHsKLSAgICAgICAgel9l cnJvciA9IDA7Ci0gICAgICAgIHJldHVybihpKTsKLSAgICB9Ci0gICAgaWYgKGkgPT0gMCAmJiBm ZW9mKHQpKSAgICAgICAgICAgICAgLyogRU9GIG9uIHJlYWRpbmc/ICovCi0gICAgICByZXR1cm4o el9lcnJvciA9IEZYX0VPRik7ICAgICAgICAgLyogUmV0dXJuIEVPRiBjb2RlICovCi0gICAgcmV0 dXJuKGVycm5vID8gKHpfZXJyb3IgPSAtMSkgOiBpKTsgLyogUmV0dXJuIGxlbmd0aCBvciBzeXN0 ZW0gZXJyb3IgKi8KLX0KLQotaW50Ci16X2ZsdXNoKGNoYW5uZWwpIGludCBjaGFubmVsOyB7ICAg ICAgICAgLyogRmx1c2ggb3V0cHV0IGNoYW5uZWwgKi8KLSAgICBGSUxFICogdDsKLSAgICBpbnQg eDsKLSAgICBpZiAoIXpfaW5pdGVkKSAgICAgICAgICAgICAgICAgICAgICAvKiBSZWd1bGFyIGNo ZWNrcyAqLwotICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9OT1ApOwotICAgIGlmIChjaGFubmVs ID49IHpfbWF4Y2hhbikKLSAgICAgIHJldHVybih6X2Vycm9yID0gRlhfQ0hOKTsKLSAgICBpZiAo IXpfZmlsZVtjaGFubmVsXSkKLSAgICAgIHJldHVybih6X2Vycm9yID0gRlhfTk9QKTsKLSAgICBp ZiAoISh0ID0gel9maWxlW2NoYW5uZWxdLT56X2ZwKSkKLSAgICAgIHJldHVybih6X2Vycm9yID0g RlhfTk9QKTsKLSAgICBpZiAoISgoel9maWxlW2NoYW5uZWxdLT56X2ZsYWdzKSAmIChGTV9XUkl8 Rk1fQVBQKSkpIC8qIFdyaXRlIGFjY2Vzcz8gKi8KLSAgICAgIHJldHVybih6X2Vycm9yID0gRlhf Rk9QKTsKLSAgICBlcnJubyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBl cnJubyAqLwotICAgIHggPSBmZmx1c2godCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFRyeSB0 byBmbHVzaCAqLwotICAgIHJldHVybih4ID8gKHpfZXJyb3IgPSBGWF9TWVMpIDogMCk7IC8qIFJl dHVybiBzeXN0ZW0gZXJyb3Igb3IgMCBpZiBPSyAqLwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJ Qwotel9zZWVrKGludCBjaGFubmVsLCBDS19PRkZfVCBwb3MpCS8qIE1vdmUgZmlsZSBwb2ludGVy IHRvIGJ5dGUgKi8KLSNlbHNlCi16X3NlZWsoY2hhbm5lbCxwb3MpIGludCBjaGFubmVsOyBDS19P RkZfVCBwb3M7IC8qIChzZWVrIHRvIGdpdmVuIHBvc2l0aW9uKSAqLwotI2VuZGlmIC8qIENLX0FO U0lDICovCi17Ci0gICAgaW50IGksIHggPSAwLCByYzsKLSAgICBGSUxFICogdDsKLSAgICBpZiAo IXpfaW5pdGVkKSAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVjay4uLiAqLwotICAgICAgcmV0 dXJuKHpfZXJyb3IgPSBGWF9OT1ApOwotICAgIGlmIChjaGFubmVsID49IHpfbWF4Y2hhbikKLSAg ICAgIHJldHVybih6X2Vycm9yID0gRlhfQ0hOKTsKLSAgICBpZiAoIXpfZmlsZVtjaGFubmVsXSkK LSAgICAgIHJldHVybih6X2Vycm9yID0gRlhfTk9QKTsKLSAgICBpZiAoISh0ID0gel9maWxlW2No YW5uZWxdLT56X2ZwKSkKLSAgICAgIHJldHVybih6X2Vycm9yID0gRlhfTk9QKTsKLSAgICBpZiAo cG9zIDwgMEwpIHsKLSAgICAgICAgeCA9IDI7Ci0gICAgICAgIHBvcyA9IChwb3MgPT0gLTIpID8g LTFMIDogMEw7Ci0gICAgfQotICAgIGVycm5vID0gMDsKLSAgICByYyA9IENLRlNFRUsodCxwb3Ms eCk7CQkvKiBUcnkgdG8gc2VlayAqLwotICAgIGRlYnVnKEYxMTEsInpfc2VlayIsY2tpdG9hKGVy cm5vKSxyYyk7Ci0gICAgaWYgKHJjIDwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgLyogT0s/ ICovCi0gICAgICByZXR1cm4oel9lcnJvciA9IEZYX1NZUyk7IC8qIE5vLiAqLwotICAgIHpfZmls ZVtjaGFubmVsXS0+el9ubGluZSA9ICgocG9zIHx8IHgpID8gLTEgOiAwKTsKLSAgICByZXR1cm4o el9lcnJvciA9IDApOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotel9saW5lKGludCBjaGFu bmVsLCBDS19PRkZfVCBwb3MpICAgICAgICAgICAvKiBNb3ZlIGZpbGUgcG9pbnRlciB0byBsaW5l ICovCi0jZWxzZQotel9saW5lKGNoYW5uZWwscG9zKSBpbnQgY2hhbm5lbDsgQ0tfT0ZGX1QgcG9z OyAvKiAoc2VlayB0byBnaXZlbiBwb3NpdGlvbikgKi8KLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot ewotICAgIGludCBpLCBsZW4sIHggPSAwOwotICAgIENLX09GRl9UIGN1cnJlbnQgPSAoQ0tfT0ZG X1QpMCwgcHJldiA9IChDS19PRkZfVCktMSwgb2xkID0gKENLX09GRl9UKS0xOwotICAgIEZJTEUg KiB0OwotICAgIGNoYXIgdG1wYnVmWzI1Nl07Ci0gICAgaWYgKCF6X2luaXRlZCkgICAgICAgICAg ICAgICAgICAgICAgLyogQ2hlY2suLi4gKi8KLSAgICAgIHJldHVybih6X2Vycm9yID0gRlhfTk9Q KTsKLSAgICBpZiAoY2hhbm5lbCA+PSB6X21heGNoYW4pCi0gICAgICByZXR1cm4oel9lcnJvciA9 IEZYX0NITik7Ci0gICAgaWYgKCF6X2ZpbGVbY2hhbm5lbF0pCi0gICAgICByZXR1cm4oel9lcnJv ciA9IEZYX05PUCk7Ci0gICAgaWYgKCEodCA9IHpfZmlsZVtjaGFubmVsXS0+el9mcCkpCi0gICAg ICByZXR1cm4oel9lcnJvciA9IEZYX05PUCk7Ci0gICAgZGVidWcoRjEwMSwiel9saW5lIHBvcyIs IiIscG9zKTsKLSAgICBpZiAocG9zIDwgMEwpIHsgICAgICAgICAgICAgICAgICAgICAvKiBFT0Yg d2FudGVkICovCi0gICAgICAgIENLX09GRl9UIG47Ci0gICAgICAgIG4gPSB6X2ZpbGVbY2hhbm5l bF0tPnpfbmxpbmU7Ci0gICAgICAgIGRlYnVnKEYxMDEsInpfbGluZSBuIiwiIixuKTsKLSAgICAg ICAgaWYgKG4gPCAwIHx8IHBvcyA8IDApIHsKLSAgICAgICAgICAgIHJld2luZCh0KTsKLSAgICAg ICAgICAgIG4gPSAwOwotICAgICAgICB9Ci0gICAgICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAg ICAgICAgICAgLyogVGhpcyBjb3VsZCB0YWtlIGEgd2hpbGUuLi4gKi8KLSAgICAgICAgICAgIGlm ICgoeCA9IGdldGModCkpID09IEVPRikKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICBpZiAoeCA9PSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgbisrOwotICAgICAgICAgICAgICAg IGlmIChwb3MgPT0gLTIpIHsKLSAgICAgICAgICAgICAgICAgICAgb2xkID0gcHJldjsKLSAgICAg ICAgICAgICAgICAgICAgcHJldiA9IENLRlRFTEwodCk7Ci0gICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGRlYnVnKEYxMDEsInpfbGluZSBvbGQiLCIi LG9sZCk7Ci0gICAgICAgIGRlYnVnKEYxMDEsInpfbGluZSBwcmV2IiwiIixwcmV2KTsKLSAgICAg ICAgaWYgKHBvcyA9PSAtMikgewotICAgICAgICAgICAgaWYgKCh4ID0gel9zZWVrKGNoYW5uZWws b2xkKSkgPCAwKQotICAgICAgICAgICAgICByZXR1cm4oel9lcnJvciA9IHgpOwotICAgICAgICAg ICAgZWxzZQotICAgICAgICAgICAgICBuLS07Ci0gICAgICAgIH0KLSAgICAgICAgel9maWxlW2No YW5uZWxdLT56X25saW5lID0gbjsKLSAgICAgICAgcmV0dXJuKHpfZXJyb3IgPSAwKTsKLSAgICB9 Ci0gICAgaWYgKHBvcyA9PSAwTCkgeyAgICAgICAgICAgICAgICAgICAgLyogUmV3aW5kIHdhbnRl ZCAqLwotICAgICAgICB6X2ZpbGVbY2hhbm5lbF0tPnpfbmxpbmUgPSAwTDsKLSAgICAgICAgcmV3 aW5kKHQpOwotICAgICAgICBkZWJ1ZyhGMTAwLCJ6X2xpbmUgcmV3aW5kIiwiIiwwKTsKLSAgICAg ICAgcmV0dXJuKDBMKTsKLSAgICB9Ci0gICAgdG1wYnVmWzI1NV0gPSBOVUw7ICAgICAgICAgICAg ICAgICAgLyogTWFrZSBzdXJlIGJ1ZiBpcyBOVUwgdGVybWluYXRlZCAqLwotICAgIGN1cnJlbnQg PSB6X2ZpbGVbY2hhbm5lbF0tPnpfbmxpbmU7ICAvKiBDdXJyZW50IGxpbmUgKi8KLSAgICAvKgot ICAgICAgSWYgbmVjZXNzYXJ5IHRoZSBmb2xsb3dpbmcgY291bGQgYmUgb3B0aW1pemVkLCBlLmcu IGZvciBwb3NpdGlvbmluZwotICAgICAgdG8gYSBwcmV2aW91cyBsaW5lIGluIGEgbGFyZ2UgZmls ZSB3aXRob3V0IHN0YXJ0aW5nIG92ZXIuCi0gICAgKi8KLSAgICBpZiAoY3VycmVudCA8IDAgfHwg cG9zIDwgY3VycmVudCkgeyAvKiBOb3Qga25vd24gb3IgYmVoaW5kIHVzLi4uICovCi0gICAgICAg IGRlYnVnKEYxMDEsInpfbGluZSByZXdpbmRpbmciLCIiLHBvcyk7Ci0gICAgICAgIGlmICgoeCA9 IHpfc2VlayhjaGFubmVsLCAwTCkpIDwgMCkgLyogUmV3aW5kICovCi0gICAgICAgICAgcmV0dXJu KHpfZXJyb3IgPSB4KTsKLSAgICAgICAgaWYgKHBvcyA9PSAwKSAgICAgICAgICAgICAgICAgICAv KiBJZiAwdGggbGluZSB3YW50ZWQgd2UncmUgZG9uZSAqLwotICAgICAgICAgIHJldHVybih6X2Vy cm9yID0gMCk7Ci0gICAgICAgIGN1cnJlbnQgPSAwOwotICAgIH0KLSAgICB3aGlsZSAoY3VycmVu dCA8IHBvcykgeyAgICAgICAgICAgICAvKiBTZWFyY2ggZm9yIHNwZWNpZmllZCBsaW5lICovCi0g ICAgICAgIGlmIChmZ2V0cyh0bXBidWYsMjU1LHQpKSB7Ci0gICAgICAgICAgICBsZW4gPSBzdHJs ZW4odG1wYnVmKTsKLSAgICAgICAgICAgIGlmIChsZW4gPiAwICYmIHRtcGJ1ZltsZW4tMV0gPT0g J1xuJykgewotICAgICAgICAgICAgICAgIGN1cnJlbnQrKzsKLSAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTExLCJ6X2xpbmUgcmVhZCIsY2tpdG9hKGxlbiksY3VycmVudCk7Ci0gICAgICAgICAgICB9 IGVsc2UgaWYgKGxlbiA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKHpfZXJyb3IgPSBG WF9VTkspOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgel9m aWxlW2NoYW5uZWxdLT56X25saW5lID0gLTFMOwotICAgICAgICAgICAgZGVidWcoRjEwMSwiel9s aW5lIHByZW1hdHVyZSBFT0YiLCIiLGN1cnJlbnQpOwotICAgICAgICAgICAgcmV0dXJuKHpfZXJy b3IgPSBGWF9FT0YpOwotICAgICAgICB9Ci0gICAgfQotICAgIHpfZmlsZVtjaGFubmVsXS0+el9u bGluZSA9IGN1cnJlbnQ7Ci0gICAgZGVidWcoRjEwMSwiel9saW5lIHJlc3VsdCIsIiIsY3VycmVu dCk7Ci0gICAgel9lcnJvciA9IDA7Ci0gICAgcmV0dXJuKGN1cnJlbnQpOwotfQotCi1jaGFyICoK LXpfZ2V0bmFtZShjaGFubmVsKSBpbnQgY2hhbm5lbDsgeyAgICAgICAvKiBSZXR1cm4gbmFtZSBv ZiBmaWxlIG9uIGNoYW5uZWwgKi8KLSAgICBGSUxFICogdDsKLSAgICBpZiAoIXpfaW5pdGVkKSB7 Ci0gICAgICAgIHpfZXJyb3IgPSBGWF9OT1A7Ci0gICAgICAgIHJldHVybihOVUxMKTsKLSAgICB9 Ci0gICAgaWYgKGNoYW5uZWwgPj0gel9tYXhjaGFuKSB7Ci0gICAgICAgIHpfZXJyb3IgPSBGWF9D SE47Ci0gICAgICAgIHJldHVybihOVUxMKTsKLSAgICB9Ci0gICAgaWYgKCF6X2ZpbGVbY2hhbm5l bF0pIHsKLSAgICAgICAgel9lcnJvciA9IEZYX05PUDsKLSAgICAgICAgcmV0dXJuKE5VTEwpOwot ICAgIH0KLSAgICBpZiAoISh0ID0gel9maWxlW2NoYW5uZWxdLT56X2ZwKSkgewotICAgICAgICB6 X2Vycm9yID0gRlhfTk9QOwotICAgICAgICByZXR1cm4oTlVMTCk7Ci0gICAgfQotICAgIHJldHVy bigoY2hhciAqKSh6X2ZpbGVbY2hhbm5lbF0tPnpfbmFtZSkpOwotfQotCi1pbnQKLXpfZ2V0bW9k ZShjaGFubmVsKSBpbnQgY2hhbm5lbDsgeyAgICAgICAvKiBSZXR1cm4gT1BFTiBtb2RlcyBvZiBj aGFubmVsICovCi0gICAgRklMRSAqIHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMCBp ZiBmaWxlIG5vdCBvcGVuICovCi0jaWZuZGVmIE5PU1RBVAotI2lmZGVmIE5UCi0gICAgc3RydWN0 IF9zdGF0IHN0YXRidWY7Ci0jZWxzZSAvKiBOVCAqLwotICAgIHN0cnVjdCBzdGF0IHN0YXRidWY7 Ci0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBOT1NUQVQgKi8KLSAgICBpbnQgeDsKLSAgICBp ZiAoIXpfaW5pdGVkKQotICAgICAgcmV0dXJuKDApOwotICAgIGlmIChjaGFubmVsID49IHpfbWF4 Y2hhbikKLSAgICAgIHJldHVybih6X2Vycm9yID0gRlhfQ0hOKTsKLSAgICBpZiAoIXpfZmlsZVtj aGFubmVsXSkKLSAgICAgIHJldHVybigwKTsKLSAgICBpZiAoISh0ID0gel9maWxlW2NoYW5uZWxd LT56X2ZwKSkKLSAgICAgIHJldHVybigwKTsKLSAgICB4ID0gel9maWxlW2NoYW5uZWxdLT56X2Zs YWdzOwotICAgIGlmIChmZW9mKHQpKSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgbWln aHQgbm90IHdvcmsgZm9yICovCi0gICAgICAgIHggfD0gRk1fRU9GOyAgICAgICAgICAgICAgICAg ICAgLyogb3V0cHV0IGZpbGVzICovCi0jaWZuZGVmIE5PU1RBVAotICAgIC8qIEJ1dCB0aGlzIGRv ZXMgaWYgd2UgY2FuIHVzZSBpdC4gKi8KLSAgICB9IGVsc2UgaWYgKHN0YXQoel9maWxlW2NoYW5u ZWxdLT56X25hbWUsJnN0YXRidWYpID4gLTEpIHsKLSAgICAgICAgaWYgKENLRlRFTEwodCkgPT0g c3RhdGJ1Zi5zdF9zaXplKQotICAgICAgICAgIHggfD0gRk1fRU9GOwotI2VuZGlmIC8qIE5PU1RB VCAqLwotICAgIH0KLSAgICByZXR1cm4oeCk7Ci19Ci0KLUNLX09GRl9UCi16X2dldHBvcyhjaGFu bmVsKSBpbnQgY2hhbm5lbDsgeyAgICAgICAgLyogR2V0IGZpbGUgcG9pbnRlciBwb3NpdGlvbiAq LwotICAgIEZJTEUgKiB0OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9uIHRoaXMgY2hh bm5lbCAqLwotICAgIENLX09GRl9UIHg7Ci0gICAgaWYgKCF6X2luaXRlZCkKLSAgICAgIHJldHVy bih6X2Vycm9yID0gRlhfTk9QKTsKLSAgICBpZiAoY2hhbm5lbCA+PSB6X21heGNoYW4pCi0gICAg ICByZXR1cm4oel9lcnJvciA9IEZYX0NITik7Ci0gICAgaWYgKCF6X2ZpbGVbY2hhbm5lbF0pCi0g ICAgICByZXR1cm4oel9lcnJvciA9IEZYX05PUCk7Ci0gICAgaWYgKCEodCA9IHpfZmlsZVtjaGFu bmVsXS0+el9mcCkpCi0gICAgICByZXR1cm4oel9lcnJvciA9IEZYX05PUCk7Ci0gICAgeCA9IENL RlRFTEwodCk7Ci0gICAgcmV0dXJuKCh4IDwgMEwpID8gKHpfZXJyb3IgPSBGWF9TWVMpIDogeCk7 Ci19Ci0KLUNLX09GRl9UCi16X2dldGxpbmUoY2hhbm5lbCkgaW50IGNoYW5uZWw7IHsgICAgICAg LyogR2V0IGN1cnJlbnQgbGluZSBudW1iZXIgKi8KLSAgICBGSUxFICogdDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBpbiBmaWxlIG9uIHRoaXMgY2hhbm5lbCAqLwotICAgIENLX09GRl9U IHJjOwotICAgIGlmICghel9pbml0ZWQpCi0gICAgICByZXR1cm4oel9lcnJvciA9IEZYX05PUCk7 Ci0gICAgaWYgKGNoYW5uZWwgPj0gel9tYXhjaGFuKQotICAgICAgcmV0dXJuKHpfZXJyb3IgPSBG WF9DSE4pOwotICAgIGlmICghel9maWxlW2NoYW5uZWxdKQotICAgICAgcmV0dXJuKHpfZXJyb3Ig PSBGWF9OT1ApOwotICAgIGlmICghKHQgPSB6X2ZpbGVbY2hhbm5lbF0tPnpfZnApKQotICAgICAg cmV0dXJuKHpfZXJyb3IgPSBGWF9OT1ApOwotICAgIGRlYnVnKEYxMDEsInpfZ2V0bGluZSIsIiIs el9maWxlW2NoYW5uZWxdLT56X25saW5lKTsKLSAgICByYyA9IHpfZmlsZVtjaGFubmVsXS0+el9u bGluZTsKLSAgICByZXR1cm4oKHJjIDwgMCkgPyAoel9lcnJvciA9IEZYX0xOVSkgOiByYyk7Ci19 Ci0KLWludAotel9nZXRmbnVtKGNoYW5uZWwpIGludCBjaGFubmVsOyB7ICAgICAgIC8qIEdldCBm aWxlIG51bWJlciAvIGhhbmRsZSAqLwotICAgIEZJTEUgKiB0OyAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIGZvciBmaWxlIG9uIHRoaXMgY2hhbm5lbCAqLwotICAgIGlmICghel9pbml0ZWQp Ci0gICAgICByZXR1cm4oel9lcnJvciA9IEZYX05PUCk7Ci0gICAgaWYgKGNoYW5uZWwgPj0gel9t YXhjaGFuKQotICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9DSE4pOwotICAgIGlmICghel9maWxl W2NoYW5uZWxdKQotICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9OT1ApOwotICAgIGlmICghKHQg PSB6X2ZpbGVbY2hhbm5lbF0tPnpfZnApKQotICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9OT1Ap OwotICAgIHpfZXJyb3IgPSAwOwotICAgIHJldHVybihmaWxlbm8odCkpOwotfQotCi0vKgotICBM aW5lLW9yaWVudGVkIGNvdW50cyBhbmQgc2Vla3MgYXJlIGFzIGR1bWIgYXMgdGhleSBjYW4gYmUg YXQgdGhlIG1vbWVudC4KLSAgTGF0ZXIgd2UgY2FuIHNwZWVkIHRoZW0gdXAgYnkgYnVpbGRpbmcg bGl0dGxlIGluZGV4ZXMuCi0qLwotQ0tfT0ZGX1QKLXpfY291bnQoY2hhbm5lbCwgd2hhdCkgaW50 IGNoYW5uZWwsIHdoYXQ7IHsgLyogQ291bnQgYnl0ZXMgb3IgbGluZXMgaW4gZmlsZSAqLwotICAg IEZJTEUgKiB0OwotICAgIGludCBpLCB4OwotICAgIENLX09GRl9UIHBvcywgY291bnQgPSAoQ0tf T0ZGX1QpMDsKLSAgICBpZiAoIXpfaW5pdGVkKSAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVj ayBzdHVmZi4uLiAqLwotICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9OT1ApOwotICAgIGlmIChj aGFubmVsID49IHpfbWF4Y2hhbikKLSAgICAgIHJldHVybih6X2Vycm9yID0gRlhfQ0hOKTsKLSAg ICBpZiAoIXpfZmlsZVtjaGFubmVsXSkKLSAgICAgIHJldHVybih6X2Vycm9yID0gRlhfTk9QKTsK LSAgICBpZiAoISh0ID0gel9maWxlW2NoYW5uZWxdLT56X2ZwKSkKLSAgICAgIHJldHVybih6X2Vy cm9yID0gRlhfTk9QKTsKLSAgICBwb3MgPSBDS0ZURUxMKHQpOwkJCS8qIFNhdmUgY3VycmVudCBm aWxlIHBvaW50ZXIgKi8KLSAgICBlcnJubyA9IDA7Ci0gICAgel9lcnJvciA9IDA7Ci0gICAgaWYg KHdoYXQgPT0gUkRfQ0hBUikgeyAgICAgICAgICAgICAgLyogU2l6ZSBpbiBieXRlcyByZXF1ZXN0 ZWQgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIGlmICghQ0tGU0VFSyh0LDBMLDIpKSB7CQkv KiBTZWVrIHRvIGVuZCAqLwotICAgICAgICAgICAgY291bnQgPSBDS0ZURUxMKHQpOwkJLyogR2V0 IGZpbGUgcG9pbnRlciAqLwotICAgICAgICAgICAgQ0tGU0VFSyh0LHBvcywwKTsJCS8qIFJlc3Rv cmUgZmlsZSBmaWxlIHBvaW50ZXIgKi8KLSAgICAgICAgICAgIHJldHVybihjb3VudCk7Ci0gICAg ICAgIH0gZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmFsbGJhY2sgaW4gY2FzZSBz ZWVrIGZhaWxzICovCi0jZW5kaWYJLyogQ09NTUVOVCAqLwotICAgICAgICAgIHJldHVybih6Z2V0 ZnMoel9maWxlW2NoYW5uZWxdLT56X25hbWUpKTsKLSAgICB9Ci0gICAgcmV3aW5kKHQpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogTGluZSBjb3VudCByZXF1ZXN0ZWQgLSByZXdpbmQuICov Ci0gICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ291bnQgbGluZXMu ICovCi0gICAgICAgIGlmICgoeCA9IGdldGModCkpID09IEVPRikgICAgICAgLyogU3R1cGlkIGJ5 dGUgbG9vcCAqLwotICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJ1 dCBpdCB3b3JrcyBhcyB3ZWxsIGFzIGFueXRoaW5nICovCi0gICAgICAgIGlmICh4ID09ICdcbicp ICAgICAgICAgICAgICAgICAgLyogZWxzZS4uLiAqLwotICAgICAgICAgIGNvdW50Kys7Ci0gICAg fQotICAgIHggPSBDS0ZTRUVLKHQscG9zLDApOwkJLyogUmVzdG9yZSBmaWxlIHBvaW50ZXIgKi8K LSAgICByZXR1cm4oY291bnQpOwotfQotCi0vKiBVc2VyIGludGVyZmFjZSBmb3IgZ2VuZXJhbGl6 ZWQgY2hhbm5lbC1vcmllbnRlZCBmaWxlIGkvbyAqLwotCi1zdHJ1Y3Qga2V5dGFiIGZjdGFiW10g PSB7ICAgICAgICAgICAgICAgLyogRklMRSBzdWJjb21tYW5kcyAqLwotICAgIHsgImNsb3NlIiwg ICAgICBGSUxfQ0xTLCAwIH0sCi0gICAgeyAiY291bnQiLCAgICAgIEZJTF9DT1UsIDAgfSwKLSAg ICB7ICJmbHVzaCIsICAgICAgRklMX0ZMVSwgMCB9LAotICAgIHsgImxpc3QiLCAgICAgICBGSUxf TElTLCAwIH0sCi0gICAgeyAib3BlbiIsICAgICAgIEZJTF9PUE4sIDAgfSwKLSAgICB7ICJyZWFk IiwgICAgICAgRklMX1JFQSwgMCB9LAotICAgIHsgInJld2luZCIsICAgICBGSUxfUkVXLCAwIH0s Ci0gICAgeyAic2VlayIsICAgICAgIEZJTF9TRUUsIDAgfSwKLSAgICB7ICJzdGF0dXMiLCAgICAg RklMX1NUQSwgMCB9LAotICAgIHsgIndyaXRlIiwgICAgICBGSUxfV1JJLCAwIH0KLX07Ci1pbnQg bmZjdGFiID0gKHNpemVvZiAoZmN0YWIpIC8gc2l6ZW9mIChzdHJ1Y3Qga2V5dGFiKSk7Ci0KLXN0 YXRpYyBzdHJ1Y3Qga2V5dGFiIGZjc3d0YWJbXSA9IHsgICAgICAvKiBPUEVOIG1vZGVzICovCi0g ICAgeyAiL2FwcGVuZCIsICAgIEZNX0FQUCwgIDAgfSwKLSAgICB7ICIvYmluYXJ5IiwgICAgRk1f QklOLCAgMCB9LAotI2lmZGVmIENPTU1FTlQKLSAgICB7ICIvY29tbWFuZCIsICAgRk1fQ01ELCAg MCB9LCAgICAgICAvKiBOb3QgaW1wbGVtZW50ZWQgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0g ICAgeyAiL3JlYWQiLCAgICAgIEZNX1JFQSwgIDAgfSwKLSAgICB7ICIvd3JpdGUiLCAgICAgRk1f V1JJLCAgMCB9Ci19Owotc3RhdGljIGludCBuZmNzd3RhYiA9IChzaXplb2YgKGZjc3d0YWIpIC8g c2l6ZW9mIChzdHJ1Y3Qga2V5dGFiKSk7Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGZjbGt3dGFi W10gPSB7ICAgICAvKiBDTE9TRSBvcHRpb25zICovCi0gICAgeyAiYWxsIiwgICAgICAgIDEsICAg ICAgIDAgfQotfTsKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgZnNla3d0YWJbXSA9IHsgICAgIC8q IFNFRUsgc3ltYm9scyAqLwotICAgIHsgImVvZiIsICAgICAgICAxLCAgICAgICAwIH0sCi0gICAg eyAibGFzdCIsICAgICAgIDIsICAgICAgIDAgfQotfTsKLXN0YXRpYyBpbnQgbmZzZWt3dGFiID0g KHNpemVvZiAoZnNla3d0YWIpIC8gc2l6ZW9mIChzdHJ1Y3Qga2V5dGFiKSk7Ci0KLSNkZWZpbmUg U0VFX0xJTkUgIFJEX0xJTkUgICAgICAgICAgICAgICAvKiBTRUVLIG9wdGlvbnMgKi8KLSNkZWZp bmUgU0VFX0NIQVIgIFJEX0NIQVIKLSNkZWZpbmUgU0VFX1JFTCAgIDMKLSNkZWZpbmUgU0VFX0FC UyAgIDQKLSNkZWZpbmUgU0VFX0ZJTkQgIDUKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgZnNrc3d0 YWJbXSA9IHsKLSAgICB7ICIvYWJzb2x1dGUiLCAgU0VFX0FCUywgIDAgfSwKLSAgICB7ICIvYnl0 ZSIsICAgICAgU0VFX0NIQVIsIDAgfSwKLSAgICB7ICIvY2hhcmFjdGVyIiwgU0VFX0NIQVIsIENN X0lOViB9LAotICAgIHsgIi9maW5kIiwgICAgICBTRUVfRklORCwgQ01fQVJHIH0sCi0gICAgeyAi L2xpbmUiLCAgICAgIFNFRV9MSU5FLCAwIH0sCi0gICAgeyAiL3JlbGF0aXZlIiwgIFNFRV9SRUws ICAwIH0KLX07Ci1zdGF0aWMgaW50IG5mc2tzd3RhYiA9IChzaXplb2YgKGZza3N3dGFiKSAvIHNp emVvZiAoc3RydWN0IGtleXRhYikpOwotCi0jZGVmaW5lIENPVV9MSU5FICBSRF9MSU5FICAgICAg ICAgICAgICAgLyogQ09VTlQgb3B0aW9ucyAqLwotI2RlZmluZSBDT1VfQ0hBUiAgUkRfQ0hBUgot I2RlZmluZSBDT1VfTElTICAgMwotI2RlZmluZSBDT1VfTk9MICAgNAotCi1zdGF0aWMgc3RydWN0 IGtleXRhYiBmY29zd3RhYltdID0gewotICAgIHsgIi9ieXRlcyIsICAgICBDT1VfQ0hBUiwgMCAg ICAgIH0sCi0gICAgeyAiL2NoYXJhY3RlcnMiLENPVV9DSEFSLCBDTV9JTlYgfSwKLSAgICB7ICIv bGluZXMiLCAgICAgQ09VX0xJTkUsIDAgICAgICB9LAotICAgIHsgIi9saXN0IiwgICAgICBDT1Vf TElTLCAgMCAgICAgIH0sCi0gICAgeyAiL25vbGlzdCIsICAgIENPVV9OT0wsICAwICAgICAgfSwK LSAgICB7ICIvcXVpZXQiLCAgICAgQ09VX05PTCwgIENNX0lOViB9Ci19Owotc3RhdGljIGludCBu ZmNvc3d0YWIgPSAoc2l6ZW9mIChmY29zd3RhYikgLyBzaXplb2YgKHN0cnVjdCBrZXl0YWIpKTsK LQotc3RhdGljIHN0cnVjdCBrZXl0YWIgZnJkdGFiW10gPSB7ICAgICAgIC8qIFJFQUQgdHlwZXMg Ki8KLSAgICB7ICIvYmxvY2siLCAgICAgUkRfU0laRSwgQ01fSU5WfENNX0FSRyB9LAotICAgIHsg Ii9ieXRlIiwgICAgICBSRF9DSEFSLCBDTV9JTlYgfSwKLSAgICB7ICIvY2hhcmFjdGVyIiwgUkRf Q0hBUiwgMCAgICAgIH0sCi0gICAgeyAiL2xpbmUiLCAgICAgIFJEX0xJTkUsIDAgICAgICB9LAot ICAgIHsgIi9zaXplIiwgICAgICBSRF9TSVpFLCBDTV9BUkcgfSwKLSAgICB7ICIvdHJpbSIsICAg ICAgUkRfVFJJTSwgMCAgICAgIH0sCi0gICAgeyAiL3VudGFiaWZ5IiwgIFJEX1VOVEEsIDAgICAg ICB9Ci19Owotc3RhdGljIGludCBuZnJkdGFiID0gKHNpemVvZiAoZnJkdGFiKSAvIHNpemVvZiAo c3RydWN0IGtleXRhYikpOwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBmd3J0YWJbXSA9IHsgICAg ICAgLyogV1JJVEUgdHlwZXMgKi8KLSAgICB7ICIvYmxvY2siLCAgICAgV1JfU0laRSwgQ01fSU5W fENNX0FSRyB9LAotICAgIHsgIi9ieXRlIiwgICAgICBXUl9DSEFSLCBDTV9JTlYgfSwKLSAgICB7 ICIvY2hhcmFjdGVyIiwgV1JfQ0hBUiwgMCAgICAgIH0sCi0gICAgeyAiL2xpbmUiLCAgICAgIFdS X0xJTkUsIDAgICAgICB9LAotICAgIHsgIi9scGFkIiwgICAgICBXUl9MUEFELCBDTV9BUkcgfSwK LSAgICB7ICIvcnBhZCIsICAgICAgV1JfUlBBRCwgQ01fQVJHIH0sCi0gICAgeyAiL3NpemUiLCAg ICAgIFdSX1NJWkUsIENNX0FSRyB9LAotICAgIHsgIi9zdHJpbmciLCAgICBXUl9TVFJJLCAwICAg ICAgfQotfTsKLXN0YXRpYyBpbnQgbmZ3cnRhYiA9IChzaXplb2YgKGZ3cnRhYikgLyBzaXplb2Yg KHN0cnVjdCBrZXl0YWIpKTsKLQotc3RhdGljIGNoYXIgYmxhbmtzW10gPSAiXDA0MFwwNDBcMDQw XDA0MCI7IC8qIFNvbWUgYmxhbmtzIGZvciBmb3JtYXR0aW5nICovCi1zdGF0aWMgY2hhciAqIHNl ZWtfdGFyZ2V0ID0gTlVMTDsKLQotaW50Ci1kb2ZpbGUob3ApIGludCBvcDsgeyAgICAgICAgICAg ICAgICAgICAgLyogRG8gdGhlIEZJTEUgY29tbWFuZCAqLwotICAgIGNoYXIgdm5hbWJ1ZltWTkFN TF07ICAgICAgICAgICAgICAgIC8qIEJ1ZmZlciBmb3IgdmFyaWFibGUgbmFtZXMgKi8KLSAgICBj aGFyICp2bnAgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIHNhbWUgKi8K LSAgICBjaGFyIHpmaWxuYW1bQ0tNQVhQQVRIKzJdOwotICAgIGNoYXIgKiBwLCAqIG07Ci0gICAg c3RydWN0IEZEQiBmbCwgc3csIG51OwotICAgIENLX09GRl9UIHo7Ci0gICAgaW50IHJzaXplLCBm aWxtb2RlID0gMCwgcmVsYXRpdmUgPSAtMSwgZW9mZmxnID0gMDsKLSAgICBpbnQgcmMsIHgsIHks IGN4LCBuLCBnZXR2YWwsIGR1bW15LCBjb25maXJtZWQsIGxpc3RpbmcgPSAtMTsKLSAgICBpbnQg Y2hhcmZsYWcgPSAwLCBzaXplZmxhZyA9IDA7Ci0gICAgaW50IHBhZCA9IDMyLCB3cl9scGFkID0g MCwgd3JfcnBhZCA9IDAsIHJkX3RyaW0gPSAwLCByZF91bnRhYiA9IDA7Ci0KLSAgICBtYWtlc3Ry KCZzZWVrX3RhcmdldCxOVUxMKTsKLQotICAgIGlmIChvcCA9PSBYWEZJTEUpIHsgICAgICAgICAg ICAgICAgIC8qIEZJTEUgY29tbWFuZCB3YXMgZ2l2ZW4gKi8KLSAgICAgICAgLyogR2V0IHN1YmNv bW1hbmQgKi8KLSAgICAgICAgaWYgKChjeCA9IGNta2V5KGZjdGFiLG5mY3RhYiwiT3BlcmF0aW9u IiwiIix4eHN0cmluZykpIDwgMCkgewotICAgICAgICAgICAgaWYgKGN4ID09IC0zKSB7Ci0gICAg ICAgICAgICAgICAgcHJpbnRmKCI/RmlsZSBvcGVyYXRpb24gcmVxdWlyZWRcbiIpOwotICAgICAg ICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybihjeCk7 Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBT aG9ydGhhbmQgY29tbWFuZCB3YXMgZ2l2ZW4gKi8KLSAgICAgICAgc3dpdGNoIChvcCkgewotICAg ICAgICAgIGNhc2UgWFhGX0NMOiBjeCA9IEZJTF9DTFM7IGJyZWFrOyAvKiBGQ0xPU0UgKi8KLSAg ICAgICAgICBjYXNlIFhYRl9GTDogY3ggPSBGSUxfRkxVOyBicmVhazsgLyogRkZMVVNIICovCi0g ICAgICAgICAgY2FzZSBYWEZfTEk6IGN4ID0gRklMX0xJUzsgYnJlYWs7IC8qIEZMSVNUICovCi0g ICAgICAgICAgY2FzZSBYWEZfT1A6IGN4ID0gRklMX09QTjsgYnJlYWs7IC8qIGV0Yy4uLiAqLwot ICAgICAgICAgIGNhc2UgWFhGX1JFOiBjeCA9IEZJTF9SRUE7IGJyZWFrOwotICAgICAgICAgIGNh c2UgWFhGX1JXOiBjeCA9IEZJTF9SRVc7IGJyZWFrOwotICAgICAgICAgIGNhc2UgWFhGX1NFOiBj eCA9IEZJTF9TRUU7IGJyZWFrOwotICAgICAgICAgIGNhc2UgWFhGX1NUOiBjeCA9IEZJTF9TVEE7 IGJyZWFrOwotICAgICAgICAgIGNhc2UgWFhGX1dSOiBjeCA9IEZJTF9XUkk7IGJyZWFrOwotICAg ICAgICAgIGNhc2UgWFhGX0NPOiBjeCA9IEZJTF9DT1U7IGJyZWFrOwotICAgICAgICAgIGRlZmF1 bHQ6IHJldHVybigtMik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgc3dpdGNoIChjeCkgeyAgICAg ICAgICAgICAgICAgICAgICAgLyogRG8gcmVxdWVzdGVkIHN1YmNvbW1hbmQgKi8KLSAgICAgIGNh c2UgRklMX09QTjogICAgICAgICAgICAgICAgICAgICAvKiBPUEVOICovCi0gICAgICAgIGNtZmRi aSgmc3csICAgICAgICAgICAgICAgICAgICAgLyogU3dpdGNoZXMgKi8KLSAgICAgICAgICAgICAg IF9DTUtFWSwgICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLwotICAgICAgICAgICAgICAgIlZh cmlhYmxlIG9yIHN3aXRjaCIsICAgIC8qIGhscG1zZyAqLwotICAgICAgICAgICAgICAgIiIsICAg ICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgICAgICIiLCAgICAg ICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAgICAgICAgICAgICAg bmZjc3d0YWIsICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6 ZSAqLwotICAgICAgICAgICAgICAgNCwgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51 bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kgKi8KLSAgICAgICAgICAgICAgIHh4c3RyaW5nLCAgICAg ICAgICAgICAgICAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0gICAgICAgICAgICAgICBmY3N3 dGFiLCAgICAgICAgICAgICAgICAgLyogS2V5d29yZCB0YWJsZSAqLwotICAgICAgICAgICAgICAg JmZsICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KLSAgICAg ICAgICAgICAgICk7Ci0gICAgICAgIGNtZmRiaSgmZmwsICAgICAgICAgICAgICAgICAgICAgLyog QW55dGhpbmcgdGhhdCBkb2Vzbid0IG1hdGNoICovCi0gICAgICAgICAgICAgICBfQ01GTEQsICAg ICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KLSAgICAgICAgICAgICAgICJWYXJpYWJsZSIsICAg ICAgICAgICAgICAvKiBobHBtc2cgKi8KLSAgICAgICAgICAgICAgICIiLAotICAgICAgICAgICAg ICAgIiIsCi0gICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAg ICAgIE5VTEwsCi0gICAgICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAgTlVMTAotICAg ICAgICAgICAgICAgKTsKLSAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgIHggPSBjbWZk Yigmc3cpOyAgICAgICAgICAgICAvKiBQYXJzZSBzb21ldGhpbmcgKi8KLSAgICAgICAgICAgIGlm ICh4IDwgMCkgewotICAgICAgICAgICAgICAgIGlmICh4ID09IC0zKSB7Ci0gICAgICAgICAgICAg ICAgICAgIHByaW50ZigiP1ZhcmlhYmxlIG5hbWUgYW5kIGZpbGUgbmFtZSByZXF1aXJlZFxuIik7 Ci0gICAgICAgICAgICAgICAgICAgIHggPSAtOTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNtcmVz dWx0LmZjb2RlID09IF9DTUZMRCkKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBl bHNlIGlmIChjbXJlc3VsdC5mY29kZSA9PSBfQ01LRVkpIHsKLSAgICAgICAgICAgICAgICBjaGFy IGM7Ci0gICAgICAgICAgICAgICAgYyA9IGNtZ2JyaygpOwotICAgICAgICAgICAgICAgIGlmICgo Z2V0dmFsID0KLSAgICAgICAgICAgICAgICAgICAgIChjID09ICc6JyB8fCBjID09ICc9JykpICYm ICEoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50Zigi P1RoaXMgc3dpdGNoIGRvZXMgbm90IHRha2UgYW4gYXJndW1lbnRcbiIpOwotICAgICAgICAgICAg ICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICAgIH0KLSNpZmRlZiBDT01NRU5UCi0g ICAgICAgICAgICAgICAgLyogVW5jb21tZW50IGlmIHdlIGFkZCBhbnkgc3dpdGNoZXMgaGVyZSB0 aGF0IHRha2UgYXJncyAqLwotICAgICAgICAgICAgICAgIGlmICghZ2V0dmFsICYmIChjbWdrd2Zs Z3MoKSAmIENNX0FSRykpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0 Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4o LTkpOyAgICAgICAgIC8qIChub25lIGRvLi4uKSAqLwotICAgICAgICAgICAgICAgIH0KLSNlbmRp ZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICAgICAgZmlsbW9kZSB8PSBjbXJlc3VsdC5ucmVz dWx0OyAvKiBPUiBpbiB0aGUgZmlsZSBtb2RlICovCi0gICAgICAgICAgICB9IGVsc2UKLSAgICAg ICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgfQotICAgICAgICAvKiBOb3QgYSBzd2l0Y2gg LSBnZXQgdGhlIHN0cmluZyAqLwotICAgICAgICBja3N0cm5jcHkodm5hbWJ1ZixjbXJlc3VsdC5z cmVzdWx0LFZOQU1MKTsKLSAgICAgICAgaWYgKCF2bmFtYnVmWzBdIHx8IGNoa251bSh2bmFtYnVm KSkgeyAvKiAoaWYgdGhlcmUgaXMgb25lLi4uKSAqLwotICAgICAgICAgICAgcHJpbnRmKCI/VmFy aWFibGUgbmFtZSByZXF1aXJlZFxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAg ICB9Ci0gICAgICAgIHZucCA9IHZuYW1idWY7ICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgdmFy aWFibGUtbmFtZSBzeW50YXggKi8KLSAgICAgICAgaWYgKHZuYW1idWZbMF0gPT0gQ01EUSAmJgot ICAgICAgICAgICAgKHZuYW1idWZbMV0gPT0gJyUnIHx8IHZuYW1idWZbMV0gPT0gJyYnKSkKLSAg ICAgICAgICB2bnArKzsKLSAgICAgICAgeSA9IDA7Ci0gICAgICAgIGlmICgqdm5wID09ICclJyB8 fCAqdm5wID09ICcmJykgewotICAgICAgICAgICAgaWYgKCh5ID0gcGFyc2V2YXIodm5wLCZ4LCZk dW1teSkpIDwgMCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiP1N5bnRheCBlcnJvciBpbiB2 YXJpYWJsZSBuYW1lXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAg ICAgfQotICAgICAgICB9Ci0JLyogQXNzaWduIGEgbmVnYXRpdmUgY2hhbm5lbCBudW1iZXIgaW4g Y2FzZSB3ZSBmYWlsICovCi0JYWRkbWFjKHZuYW1idWYsIi0xIik7Ci0KLSAgICAgICAgaWYgKCEo ZmlsbW9kZSAmIEZNX1JXQSkpICAgICAgICAvKiBJZiBubyBhY2Nlc3MgbW9kZSBzcGVjaWZpZWQg Ki8KLSAgICAgICAgICBmaWxtb2RlIHw9IEZNX1JFQTsgICAgICAgICAgICAvKiBkZWZhdWx0IHRv IC9SRUFELiAqLwotCi0gICAgICAgIHkgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyog Tm93IHBhcnNlIHRoZSBmaWxlbmFtZSAqLwotICAgICAgICBpZiAoKGZpbG1vZGUgJiBGTV9SV0Ep ID09IEZNX1dSSSkgewotCSAgICB4ID0gY21vZmkoIk5hbWUgb2YgbmV3IGZpbGUiLCIiLCZzLHh4 c3RyaW5nKTsKLQl9IGVsc2UgaWYgKChmaWxtb2RlICYgRk1fUldBKSA9PSBGTV9SRUEpIHsKLQkg ICAgeCA9IGNtaWZpKCJOYW1lIG9mIGV4aXN0aW5nIGZpbGUiLCIiLCZzLCZ5LHh4c3RyaW5nKTsK LQl9IGVsc2UgewotICAgICAgICAgICAgeCA9IGNtaW9maSgiRmlsZW5hbWUiLCIiLCZzLCZ5LHh4 c3RyaW5nKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImZvcGVuIC9hcHBlbmQgeCIscyx4KTsK LQl9Ci0gICAgICAgIGlmICh4IDwgMCkgewotICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKLSAg ICAgICAgICAgICAgICBwcmludGYoIj9GaWxlbmFtZSByZXF1aXJlZFxuIik7Ci0gICAgICAgICAg ICAgICAgeCA9IC05OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuKHgpOwotICAg ICAgICB9Ci0gICAgICAgIGlmICh5KSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gd2ls ZGNhcmRzICovCi0gICAgICAgICAgICBwcmludGYoIj9XaWxkY2FyZHMgbm90IGFsbG93ZWQgaGVy ZVxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChm aWxtb2RlICYgKEZNX0FQUHxGTV9XUkkpKSB7IC8qIENoZWNrIG91dHB1dCBhY2Nlc3MgKi8KLSNp Zm5kZWYgVk1TCi0gICAgICAgICAgICBpZiAoemNoa28ocykgPCAwKSB7ICAgICAgICAgIC8qIGFu ZCBzZXQgZXJyb3IgY29kZSBpZiBkZW5pZWQgKi8KLSAgICAgICAgICAgICAgICB6X2Vycm9yID0g RlhfQUNDOwotICAgICAgICAgICAgICAgIHByaW50ZigiP1dyaXRlIGFjY2VzcyBkZW5pZWQgLSBc IiVzXCJcbiIscyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0K LSNlbmRpZiAvKiBWTVMgKi8KLSAgICAgICAgfQotICAgICAgICBja3N0cm5jcHkoemZpbG5hbSxz LENLTUFYUEFUSCk7IC8qIElzIE9LIC0gbWFrZSBzYWZlIGNvcHkgKi8KLSAgICAgICAgaWYgKCh4 ID0gY21jZm0oKSkgPCAwKSAgICAgICAgICAvKiBHZXQgY29uZmlybWF0aW9uIG9mIGNvbW1hbmQg Ki8KLSAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgIGlmICgobiA9IHpfb3Blbih6ZmlsbmFt LGZpbG1vZGUpKSA8IDApIHsKLSAgICAgICAgICAgIHByaW50ZigiP09QRU4gZmFpbGVkIC0gJXM6 ICVzXG4iLHpmaWxuYW0sY2tmZXJyb3IobikpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAg ICAgICAgfQotICAgICAgICBhZGRtYWModm5hbWJ1Zixja2l0b2EobikpOyAgICAgIC8qIEFzc2ln biBjaGFubmVsIG51bWJlciB0byB2YXJpYWJsZSAqLwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDEpOwotCi0gICAgICBjYXNlIEZJTF9SRVc6ICAgICAgICAgICAgICAgICAgICAgLyogUkVXSU5E ICovCi0gICAgICAgIGlmICgoeCA9IGNtbnVtKCJDaGFubmVsIG51bWJlciIsIiIsMTAsJm4sIHh4 c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAgICAgICAg ICAgIHByaW50ZigiP0NoYW5uZWwgbnVtYmVyIHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAgICAg ICB4ID0gLTk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAg IH0KLSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsK LQlpZiAobiA9PSAtOSkgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLQlpZiAobiA9PSAtOCkgcmV0dXJu KHN1Y2Nlc3MgPSAxKTsKLQotICAgICAgICBpZiAoKHJjID0gel9zZWVrKG4sMEwpKSA8IDApIHsK LSAgICAgICAgICAgIHByaW50ZigiP1JFV0lORCBmYWlsZWQgLSBDaGFubmVsICVkOiAlc1xuIixu LGNrZmVycm9yKHJjKSk7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0gICAg ICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0KLSAgICAgIGNhc2UgRklMX0NMUzogICAgICAgICAg ICAgICAgICAgICAvKiBDTE9TRSAqLwotI2lmZGVmIENPTU1FTlQJCQkJLyogZmRjIDIwMTAwODA0 IC0gYmFkIGlkZWEgKi8KLSAgICAgICAgIHsKLQkgICAgaW50IGksIGosIGs7CQkvKiBTdXBwbHkg ZGVmYXVsdCBpZiBvbmx5IG9uZSBvcGVuICovCi0JICAgIHMgPSAiIjsKLQkgICAgZm9yIChrID0g MCwgaiA9IDAsIGkgPSAwOyBpIDwgel9tYXhjaGFuOyBpKyspIHsKLQkJaWYgKHpfZmlsZSkKLQkJ ICBpZiAoel9maWxlW2ldKQotCQkgICAgaWYgKHpfZmlsZVtpXS0+el9mcCkgeyBrKys7IGogPSBp OyB9Ci0JICAgIH0KLQkgICAgaWYgKGsgPT0gMSkgcyA9IGNraXRvYShqKTsKLQkgfQotI2VuZGlm CS8qIENPTU1FTlQgKi8KLSAgICAgICAgICBjbWZkYmkoJm51LCAgICAgICAgICAgICAgICAgICAv KiBTZWNvbmQgRkRCIC0gY2hhbm5lbCBudW1iZXIgKi8KLSAgICAgICAgICAgICAgICAgX0NNTlVN LCAgICAgICAgICAgICAgICAvKiBmY29kZSAqLwotICAgICAgICAgICAgICAgICAiQ2hhbm5lbCBu dW1iZXIgb3IgQUxMIiwgLyogSGVscCBtZXNzYWdlICovCi0gICAgICAgICAgICAgICAgIHMsCQkJ LyogZGVmYXVsdCAqLwotICAgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgIC8q IGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAgICAgICAgICAgIDEwLCAgICAgICAgICAgICAg ICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHJhZGl4ICovCi0gICAgICAgICAgICAgICAg IDAsICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDAgKi8KLSAg ICAgICAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgICAvKiBQcm9jZXNzaW5nIGZ1bmN0 aW9uICovCi0gICAgICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgLyogS2V5d29y ZCB0YWJsZSAqLwotICAgICAgICAgICAgICAgICAmc3cJCQkvKiBQb2ludGVyIHRvIG5leHQgRkRC ICovCi0gICAgICAgICAgICAgICAgICk7ICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0 byBuZXh0IEZEQiAqLwotCSBjbWZkYmkoJnN3LAkJCS8qIEZpcnN0IEZEQiAtIGNvbW1hbmQgc3dp dGNoZXMgKi8KLSAgICAgICAgICAgICAgICAgX0NNS0VZLCAgICAgICAgICAgICAgICAvKiBmY29k ZSAqLwotICAgICAgICAgICAgICAgICAiIiwJCQkvKiBoZWxwIG1lc3NhZ2UgKi8KLQkJICIiLAkJ CS8qIERlZmF1bHQgKi8KLQkJICIiLAkJCS8qIE5vIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAg ICAgICAgICAgICAgIDEsICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRh IDE6IHRibCBzaXplICovCi0gICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAg LyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLwotICAgICAgICAgICAgICAgICB4 eHN0cmluZywgICAgICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KLSAgICAgICAg ICAgICAgICAgZmNsa3d0YWIsICAgICAgICAgICAgICAvKiBLZXl3b3JkIHRhYmxlICovCi0JCSBO VUxMCQkJLyogTGFzdCBpbiBjaGFpbiAqLwotICAgICAgICAgICAgICAgICApOwotICAgICAgICB4 ID0gY21mZGIoJm51KTsgICAgICAgICAgICAgICAgIC8qIFBhcnNlIHNvbWV0aGluZyAqLwotICAg ICAgICBpZiAoeCA8IDApIHsKLSAgICAgICAgICAgIGlmICh4ID09IC0zKSB7Ci0gICAgICAgICAg ICAgICAgcHJpbnRmKCI/Q2hhbm5lbCBudW1iZXIgb3IgQUxMIHJlcXVpcmVkXG4iKTsKLSAgICAg ICAgICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4oeCk7 Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNtcmVzdWx0LmZjb2RlID09IF9DTU5VTSkKLSAgICAg ICAgICBuID0gY21yZXN1bHQubnJlc3VsdDsKLSAgICAgICAgZWxzZSBpZiAoY21yZXN1bHQuZmNv ZGUgPT0gX0NNS0VZKQotICAgICAgICAgIG4gPSAtMTsKLSAgICAgICAgaWYgKCh4ID0gY21jZm0o KSkgPCAwKQotICAgICAgICAgIHJldHVybih4KTsKLQlpZiAobiA9PSAtOSkgcmV0dXJuKHN1Y2Nl c3MgPSAwKTsKLQlpZiAobiA9PSAtOCkgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQotICAgICAgICBy YyA9IDE7Ci0gICAgICAgIGlmIChuIDwgMCkgewotICAgICAgICAgICAgaW50IGNvdW50ID0gMDsK LSAgICAgICAgICAgIGludCBpOwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHpfbWF4Y2hh bjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgeCA9IHpfY2xvc2UoaSk7Ci0gICAgICAgICAgICAg ICAgaWYgKHggPT0gRlhfU1lTKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0NMT1NF IGZhaWxlZCAtIENoYW5uZWwgJWQ6ICVzXG4iLG4sY2tmZXJyb3IoeCkpOwotICAgICAgICAgICAg ICAgICAgICByYyA9IDA7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh4ID4gLTEpCi0gICAg ICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVidWco RjEwMSwiRklMRSBDTE9TRSBBTEwiLCIiLGNvdW50KTsKLSAgICAgICAgfSBlbHNlIGlmICgoeCA9 IHpfY2xvc2UobikpIDwgMCkgewotICAgICAgICAgICAgcHJpbnRmKCI/Q0xPU0UgZmFpbGVkIC0g Q2hhbm5lbCAlZDogJXNcbiIsbixja2ZlcnJvcih4KSk7Ci0gICAgICAgICAgICByZXR1cm4oLTkp OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gcmMpOwotCi0gICAgICBjYXNl IEZJTF9SRUE6ICAgICAgICAgICAgICAgICAgICAgLyogUkVBRCAqLwotICAgICAgY2FzZSBGSUxf V1JJOiAgICAgICAgICAgICAgICAgICAgIC8qIFdSSVRFICovCi0gICAgICAgIHJzaXplID0gMDsK LSAgICAgICAgY21mZGJpKCZzdywgICAgICAgICAgICAgICAgICAgICAvKiBTd2l0Y2hlcyAqLwot ICAgICAgICAgICAgICAgX0NNS0VZLCAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAg ICAgICAgICAgICAiQ2hhbm5lbCBvciBzd2l0Y2giLCAgICAgLyogaGxwbXNnICovCi0gICAgICAg ICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwotICAgICAgICAg ICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0g ICAgICAgICAgICAgICAoY3ggPT0gRklMX1JFQSkgPyBuZnJkdGFiIDogbmZ3cnRhYiwKLSAgICAg ICAgICAgICAgIDQsICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEg MjogNCA9IGNtc3dpICovCi0gICAgICAgICAgICAgICB4eHN0cmluZywgICAgICAgICAgICAgICAg LyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotICAgICAgICAgICAgICAgKGN4ID09IEZJTF9SRUEp ID8gZnJkdGFiIDogZndydGFiLCAvKiBLZXl3b3JkIHRhYmxlICovCi0gICAgICAgICAgICAgICAm bnUgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLwotICAgICAg ICAgICAgICAgKTsKLSAgICAgICAgY21mZGJpKCZudSwgICAgICAgICAgICAgICAgICAgICAvKiBD aGFubmVsIG51bWJlciAqLwotICAgICAgICAgICAgICAgX0NNTlVNLCAgICAgICAgICAgICAgICAg IC8qIGZjb2RlICovCi0gICAgICAgICAgICAgICAiQ2hhbm5lbCIsCi0gICAgICAgICAgICAgICAi IiwgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAgICAgIiIs ICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAgICAg ICAgICAxMCwgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHJh ZGl4ICovCi0gICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwg bnVtZXJpYyBkYXRhIDI6IDAgKi8KLSAgICAgICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAg ICAgICAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0gICAgICAgICAgICAgICBOVUxMLCAgICAg ICAgICAgICAgICAgICAgLyogS2V5d29yZCB0YWJsZSAqLwotICAgICAgICAgICAgICAgTlVMTCAg ICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KLSAgICAgICAgICAg ICAgICk7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIHggPSBjbWZkYigmc3cpOyAgICAgICAg ICAgICAvKiBQYXJzZSBzb21ldGhpbmcgKi8KLSAgICAgICAgICAgIGlmICh4IDwgMCkgewotICAg ICAgICAgICAgICAgIGlmICh4ID09IC0zKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50Zigi P0NoYW5uZWwgbnVtYmVyIHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgeCA9IC05 OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgICAgICBpZiAoY21yZXN1bHQuZmNvZGUgPT0gX0NNTlVNKSAvKiBDaGFu bmVsIG51bWJlciAqLwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGVsc2UgaWYg KGNtcmVzdWx0LmZjb2RlID09IF9DTUtFWSkgeyAvKiBTd2l0Y2ggKi8KLSAgICAgICAgICAgICAg ICBjaGFyIGM7Ci0gICAgICAgICAgICAgICAgYyA9IGNtZ2JyaygpOwotICAgICAgICAgICAgICAg IGlmICgoZ2V0dmFsID0KLSAgICAgICAgICAgICAgICAgICAgIChjID09ICc6JyB8fCBjID09ICc9 JykpICYmICEoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBy aW50ZigiP1RoaXMgc3dpdGNoIGRvZXMgbm90IHRha2UgYW4gYXJndW1lbnRcbiIpOwotICAgICAg ICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICBpZiAoIWdldHZhbCAmJiAoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7Ci0gICAgICAgICAg ICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsK LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgc3dpdGNoIChjbXJlc3VsdC5ucmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAg ICBjYXNlIFdSX0xJTkU6Ci0gICAgICAgICAgICAgICAgICAgIGNoYXJmbGFnID0gMDsKLSAgICAg ICAgICAgICAgICAgICAgc2l6ZWZsYWcgPSAwOwotICAgICAgICAgICAgICAgICAgICByc2l6ZSA9 IDA7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBX Ul9DSEFSOgotICAgICAgICAgICAgICAgICAgICByc2l6ZSA9IDE7Ci0gICAgICAgICAgICAgICAg ICAgIGNoYXJmbGFnID0gMTsKLSAgICAgICAgICAgICAgICAgICAgc2l6ZWZsYWcgPSAxOwotICAg ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgV1JfU0laRToK LSAgICAgICAgICAgICAgICAgICAgaWYgKCh4ID0gY21udW0oIkJ5dGVzIiwiIiwxMCwmcnNpemUs IHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSAtMykg ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP051bWJlciByZXF1aXJlZFxu Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAg ICAgICAgICAgICB9Ci0JCSAgICBpZiAocnNpemUgPiBMSU5CVUZTSVopIHsKLQkJCXByaW50Zigi P01heGltdW0gRlJFQUQvRldSSVRFIHNpemUgaXMgJWRcbiIsTElOQlVGU0laKTsKLQkJCXJzaXpl ID0gMDsKLQkJCXJldHVybigtOSk7Ci0JCSAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNoYXJm bGFnID0gMDsKLSAgICAgICAgICAgICAgICAgICAgc2l6ZWZsYWcgPSAxOwotICAgICAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgV1JfU1RSSToKLSAgICAgICAg ICAgICAgICAgICAgcnNpemUgPSAxOwotICAgICAgICAgICAgICAgICAgICBjaGFyZmxhZyA9IDA7 Ci0gICAgICAgICAgICAgICAgICAgIHNpemVmbGFnID0gMDsKLSAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIFdSX0xQQUQ6Ci0gICAgICAgICAgICAgICAg ICBjYXNlIFdSX1JQQUQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoeCA9IGNtbnVtKCJOdW1l cmljIEFTQ0lJIGNoYXJhY3RlciB2YWx1ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICIzMiIsMTAsJnBhZCwgeHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY21yZXN1bHQubnJlc3VsdCA9 PSBXUl9MUEFEKQotICAgICAgICAgICAgICAgICAgICAgIHdyX2xwYWQgPSAxOwotICAgICAgICAg ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgd3JfcnBhZCA9IDE7Ci0gICAg ICAgICAgICAgICAgICAgIGJyZWFrOwotCQkgIGNhc2UgUkRfVFJJTToKLQkJICAgIHJkX3RyaW0g PSAxOwotCQkgICAgYnJlYWs7Ci0JCSAgY2FzZSBSRF9VTlRBOgotCQkgICAgcmRfdW50YWIgPSAx OwotCQkgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRlYnVn KEYxMDEsIkZJTEUgUkVBRCByc2l6ZSAyIiwiIixyc2l6ZSk7Ci0gICAgICAgICAgICB9IGVsc2UK LSAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSAgICAgICAgfSB3aGlsZQotICAgICAgICAgIChj bXJlc3VsdC5mY29kZSA9PSBfQ01LRVkpOwotCi0gICAgICAgIG4gPSBjbXJlc3VsdC5ucmVzdWx0 OyAgICAgICAgICAgLyogQ2hhbm5lbCAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJGSUxFIFJFQUQv V1JJVEUgY2hhbm5lbCIsIiIsbik7Ci0KLSAgICAgICAgaWYgKGN4ID09IEZJTF9XUkkpIHsgICAg ICAgICAgICAvKiBXUklURSAqLwotICAgICAgICAgICAgaW50IGxlbiA9IDA7Ci0gICAgICAgICAg ICBpZiAoKHggPSBjbXR4dCgiVGV4dCIsIiIsJnMseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAg ICAgIHJldHVybih4KTsKLQkgICAgaWYgKG4gPT0gLTkpIHJldHVybihzdWNjZXNzID0gMCk7Ci0J ICAgIGlmIChuID09IC04KSByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0gICAgICAgICAgICBja3N0 cm5jcHkobGluZSxzLExJTkJVRlNJWik7IC8qIE1ha2UgYSBzYWZlIGNvcHkgKi8KLSAgICAgICAg ICAgIHMgPSBsaW5lOwotICAgICAgICAgICAgcyA9IGJyc3RyaXAocyk7ICAgICAgICAgICAgIC8q IFN0cmlwIGJyYWNlcyAqLwotICAgICAgICAgICAgaWYgKGNoYXJmbGFnKSB7ICAgICAgICAgICAg IC8qIFdyaXRlIG9uZSBjaGFyICovCi0gICAgICAgICAgICAgICAgbGVuID0gMTsgICAgICAgICAg ICAgICAgLyogU28gbGVuZ3RoID0gMSAqLwotICAgICAgICAgICAgICAgIHJzaXplID0gMTsgICAg ICAgICAgICAgIC8qIERvbid0IHN1cHBseSB0ZXJtaW5hdG9yICovCi0gICAgICAgICAgICB9IGVs c2UgaWYgKCFzaXplZmxhZykgeyAgICAgLyogV3JpdGUgYSBzdHJpbmcgKi8KLSAgICAgICAgICAg ICAgICBsZW4gPSAtMTsgICAgICAgICAgICAgICAvKiBTbyBsZW5ndGggaXMgdW5zcGVjaWZpZWQg Ki8KLSAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBhIGJs b2NrIG9mIGdpdmVuIHNpemUgKi8KLSAgICAgICAgICAgICAgICBpbnQgaSwgaywgeHg7Ci0gICAg ICAgICAgICAgICAgaWYgKHJzaXplID4gVE1QQlVGU0laKSB7Ci0gICAgICAgICAgICAgICAgICAg IHpfZXJyb3IgPSBGWF9PRkw7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0J1ZmZlciBv dmVyZmxvd1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgIGxlbiA9IHJzaXplOyAgICAgICAgICAgIC8qIHJzaXpl IGlzIHJlYWxseSBsZW5ndGggKi8KLSAgICAgICAgICAgICAgICByc2l6ZSA9IDE7ICAgICAgICAg ICAgICAvKiBEb24ndCBzdXBwbHkgYSB0ZXJtaW5hdG9yICovCi0gICAgICAgICAgICAgICAgeHgg PSBzdHJsZW4ocyk7ICAgICAgICAgLyogU2l6ZSBvZiBnaXZlbiBzdHJpbmcgKi8KLSAgICAgICAg ICAgICAgICBpZiAoeHggPj0gbGVuKSB7ICAgICAgICAvKiBCaWdnZXIgb3IgZXF1YWwgKi8KLSAg ICAgICAgICAgICAgICAgICAgc1tsZW5dID0gTlVMOwotICAgICAgICAgICAgICAgIH0gZWxzZSBp ZiAod3JfbHBhZCkgeyAgIC8qIFNtYWxsZXIsIGxlZnQtcGFkZGluZyByZXF1ZXN0ZWQgKi8KLSAg ICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbiAtIHh4OyBpKyspIC8qIE11c3Qg bWFrZSBhIGNvcHkgKi8KLSAgICAgICAgICAgICAgICAgICAgICB0bXBidWZbaV0gPSBwYWQ7Ci0g ICAgICAgICAgICAgICAgICAgIGNrc3RybmNweSh0bXBidWYraSxzLFRNUEJVRlNJWi1pKTsKLSAg ICAgICAgICAgICAgICAgICAgdG1wYnVmW2xlbl0gPSBOVUw7Ci0gICAgICAgICAgICAgICAgICAg IHMgPSB0bXBidWY7ICAgICAgICAgLyogUmVkaXJlY3Qgd3JpdGUgc291cmNlICovCi0gICAgICAg ICAgICAgICAgfSBlbHNlIGlmICh3cl9ycGFkKSB7ICAgLyogU21hbGxlciB3aXRoIHJpZ2h0LXBh ZGRpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpID0geHg7IGkgPCBsZW47IGkrKykK LSAgICAgICAgICAgICAgICAgICAgICBzW2ldID0gcGFkOwotICAgICAgICAgICAgICAgICAgICBz W2xlbl0gPSBOVUw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg ICAgaWYgKChyYyA9IHpfb3V0KG4scyxsZW4scnNpemUpKSA8IDApIHsgLyogVHJ5IHRvIHdyaXRl ICovCi0gICAgICAgICAgICAgICAgcHJpbnRmKCI/Q2hhbm5lbCAlZCBXUklURSBlcnJvcjogJXNc biIsbixja2ZlcnJvcihyYykpOwotICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRklMX1JF QSBSRUFEICovCi0gICAgICAgICAgICBjb25maXJtZWQgPSAwOwotICAgICAgICAgICAgdm5hbWJ1 ZlswXSA9IE5VTDsKLSAgICAgICAgICAgIHggPSBjbWZsZCgiVmFyaWFibGUgbmFtZSIsIiIsJnMs TlVMTCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJGSUxFIFJFQUQgY21mbGQiLHMseCk7Ci0g ICAgICAgICAgICBpZiAoeCA8IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoeCA9PSAtMyB8fCAh KnMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAg ICAgICAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAg ICAgICAgICAgICAgICAgICAgIGNvbmZpcm1lZCsrOwotICAgICAgICAgICAgICAgIH0gZWxzZQot ICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg Y2tzdHJuY3B5KHZuYW1idWYscyxWTkFNTCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJGSUxF IFJFQUQgdm5hbWJ1ZiIsdm5hbWJ1Zixjb25maXJtZWQpOwotICAgICAgICAgICAgaWYgKHZuYW1i dWZbMF0pIHsgICAgICAgICAgIC8qIFZhcmlhYmxlIG5hbWUgZ2l2ZW4sIGNoZWNrIGl0ICovCi0g ICAgICAgICAgICAgICAgaWYgKCFjb25maXJtZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgeCA9 IGNtY2ZtKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh4IDwgMCkKLSAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg ICAgICAgICAgICBjb25maXJtZWQrKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgdm5wID0gdm5hbWJ1ZjsKLSAgICAgICAgICAgICAgICBpZiAodm5hbWJ1ZlswXSA9PSBDTURR ICYmCi0gICAgICAgICAgICAgICAgICAgICh2bmFtYnVmWzFdID09ICclJyB8fCB2bmFtYnVmWzFd ID09ICcmJykpCi0gICAgICAgICAgICAgICAgICB2bnArKzsKLSAgICAgICAgICAgICAgICB5ID0g MDsKLSAgICAgICAgICAgICAgICBpZiAoKnZucCA9PSAnJScgfHwgKnZucCA9PSAnJicpIHsKLSAg ICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gcGFyc2V2YXIodm5wLCZ4LCZkdW1teSkpIDwgMCkg ewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/U3ludGF4IGVycm9yIGluIHZhcmlh YmxlIG5hbWVcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAg ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIGRlYnVnKEYxMTEsIkZJTEUgUkVBRCB2YXJpYWJsZSIsdm5hbWJ1Zixjb25maXJtZWQp OwotCi0gICAgICAgICAgICBpZiAoIWNvbmZpcm1lZCkKLSAgICAgICAgICAgICAgaWYgKCh4ID0g Y21jZm0oKSkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybih4KTsKLQotCSAgICBpZiAobiA9 PSAtOSkgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLQkgICAgaWYgKG4gPT0gLTgpIHJldHVybihzdWNj ZXNzID0gMSk7Ci0KLSAgICAgICAgICAgIGxpbmVbMF0gPSBOVUw7ICAgICAgICAgICAgICAvKiBD bGVhciBkZXN0aW5hdGlvbiBidWZmZXIgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICBp ZiAocnNpemUgPj0gTElOQlVGU0laKSAgICAgLyogRG9uJ3Qgb3ZlcnJ1biBpdCAqLwotICAgICAg ICAgICAgICByc2l6ZSA9IExJTkJVRlNJWiAtIDE7Ci0jZW5kaWYJLyogQ09NTUVOVCAqLwotCi0g ICAgICAgICAgICBpZiAocnNpemUgPT0gMCkgewkJLyogUmVhZCBhIGxpbmUgKi8KLQkJcmMgPSB6 X2luKG4sbGluZSxMSU5CVUZTSVosTElOQlVGU0laLTEsMCk7Ci0gICAgICAgICAgICB9IGVsc2Ug ewotCQlyYyA9IHpfaW4obixsaW5lLExJTkJVRlNJWixyc2l6ZSwxKTsgLyogUmVhZCBhIGJsb2Nr ICovCi0JICAgIH0KLSAgICAgICAgICAgIGlmIChyYyA8IDApIHsgICAgICAgICAgICAgICAvKiBF cnJvci4uLiAqLwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsIkZJTEUgUkVBRCBlcnJvciIs IiIscmMpOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsIkZJTEUgUkVBRCBlcnJubyIsIiIs ZXJybm8pOwotICAgICAgICAgICAgICAgIGlmIChyYyA9PSBGWF9FT0YpIHsgICAgIC8qIEVPRiAt IGZhaWwgYnV0IG5vIGVycm9yIG1lc3NhZ2UgKi8KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu KHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAv KiBPdGhlciBlcnJvciAtIGZhaWwgYW5kIHByaW50IG1zZyAqLwotICAgICAgICAgICAgICAgICAg ICBwcmludGYoIj9SRUFEIGVycm9yOiAlc1xuIixja2ZlcnJvcihyYykpOwotICAgICAgICAgICAg ICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQkg ICAgaWYgKHJzaXplID09IDApIHsJCS8qIEZSRUFEIC9MSU5FIHBvc3Rwcm9jZXNzaW5nICovCi0J CWlmIChyZF90cmltKSB7CQkvKiBUcmltICovCi0JCSAgICBpbnQgaSwgazsKLQkJICAgIGsgPSBz dHJsZW4obGluZSk7Ci0JCSAgICBpZiAoayA+IDApIHsKLQkJCWZvciAoaSA9IGstMTsgaSA+IDA7 IGktLSkgewotCQkJICAgIGlmIChsaW5lW2ldID09IFNQIHx8IGxpbmVbaV0gPT0gJ1x0JykKLQkJ CSAgICAgIGxpbmVbaV0gPSBOVUw7Ci0JCQkgICAgZWxzZQotCQkJICAgICAgYnJlYWs7Ci0JCQl9 Ci0JCSAgICB9Ci0JCX0KLQkJaWYgKHJkX3VudGFiKSB7CQkvKiBVbnRhYmlmeSAqLwotCQkgICAg aWYgKHVudGFiaWZ5KGxpbmUsdG1wYnVmLFRNUEJVRlNJWikgPiAtMSkKLQkJICAgICAgY2tzdHJu Y3B5KGxpbmUsdG1wYnVmLExJTkJVRlNJWik7Ci0JCX0KLQkgICAgfQotICAgICAgICAgICAgZGVi dWcoRjExMCwiRklMRSBSRUFEIGRhdGEiLGxpbmUsMCk7Ci0gICAgICAgICAgICBpZiAodm5hbWJ1 ZlswXSkgICAgICAgICAgICAgLyogUmVhZCBPSyAtIElmIHZhcmlhYmxlIG5hbWUgZ2l2ZW4gKi8K LSAgICAgICAgICAgICAgYWRkbWFjKHZuYW1idWYsbGluZSk7ICAgICAvKiBBc3NpZ24gcmVzdWx0 IHRvIHZhcmlhYmxlICovCi0gICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAg Lyogb3RoZXJ3aXNlICovCi0gICAgICAgICAgICAgIHByaW50ZigiJXNcbiIsbGluZSk7ICAgICAg LyoganVzdCBwcmludCBpdCAqLwotICAgICAgICB9Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0g MSk7Ci0KLSAgICAgIGNhc2UgRklMX1NFRTogICAgICAgICAgICAgICAgICAgICAvKiBTRUVLICov Ci0gICAgICBjYXNlIEZJTF9DT1U6ICAgICAgICAgICAgICAgICAgICAgLyogQ09VTlQgKi8KLSAg ICAgICAgcnNpemUgPSBSRF9DSEFSOyAgICAgICAgICAgICAgICAvKiBEZWZhdWx0cyB0byAvQllU RSAqLwotICAgICAgICBjbWZkYmkoJnN3LCAgICAgICAgICAgICAgICAgICAgIC8qIFN3aXRjaGVz ICovCi0gICAgICAgICAgICAgICBfQ01LRVksICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8K LSAgICAgICAgICAgICAgICJDaGFubmVsIG9yIHN3aXRjaCIsICAgICAvKiBobHBtc2cgKi8KLSAg ICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAg ICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEg Ki8KLSAgICAgICAgICAgICAgICgoY3ggPT0gRklMX1NFRSkgPyBuZnNrc3d0YWIgOiBuZmNvc3d0 YWIpLAotICAgICAgICAgICAgICAgNCwgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51 bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kgKi8KLSAgICAgICAgICAgICAgIHh4c3RyaW5nLCAgICAg ICAgICAgICAgICAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0gICAgICAgICAgICAgICAoKGN4 ID09IEZJTF9TRUUpID8gZnNrc3d0YWIgOiBmY29zd3RhYiksCi0gICAgICAgICAgICAgICAmbnUg ICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLwotICAgICAgICAg ICAgICAgKTsKLSAgICAgICAgY21mZGJpKCZudSwgICAgICAgICAgICAgICAgICAgICAvKiBDaGFu bmVsIG51bWJlciAqLwotICAgICAgICAgICAgICAgX0NNTlVNLCAgICAgICAgICAgICAgICAgIC8q IGZjb2RlICovCi0gICAgICAgICAgICAgICAiQ2hhbm5lbCIsCi0gICAgICAgICAgICAgICAiIiwg ICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAgICAgIiIsICAg ICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAgICAgICAg ICAxMCwgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHJhZGl4 ICovCi0gICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVt ZXJpYyBkYXRhIDI6IDAgKi8KLSAgICAgICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAg ICAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0gICAgICAgICAgICAgICBOVUxMLCAgICAgICAg ICAgICAgICAgICAgLyogS2V5d29yZCB0YWJsZSAqLwotICAgICAgICAgICAgICAgTlVMTCAgICAg ICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KLSAgICAgICAgICAgICAg ICk7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIHggPSBjbWZkYigmc3cpOyAgICAgICAgICAg ICAvKiBQYXJzZSBzb21ldGhpbmcgKi8KLSAgICAgICAgICAgIGlmICh4IDwgMCkgewotICAgICAg ICAgICAgICAgIGlmICh4ID09IC0zKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0No YW5uZWwgbnVtYmVyIHJlcXVpcmVkXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgeCA9IC05Owot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAg ICB9Ci0gICAgICAgICAgICBpZiAoY21yZXN1bHQuZmNvZGUgPT0gX0NNTlVNKSAvKiBDaGFubmVs IG51bWJlciAqLwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNt cmVzdWx0LmZjb2RlID09IF9DTUtFWSkgeyAvKiBTd2l0Y2ggKi8KLSAgICAgICAgICAgICAgICBj aGFyIGM7Ci0gICAgICAgICAgICAgICAgYyA9IGNtZ2JyaygpOwotICAgICAgICAgICAgICAgIGlm ICgoZ2V0dmFsID0KLSAgICAgICAgICAgICAgICAgICAgIChjID09ICc6JyB8fCBjID09ICc9Jykp ICYmICEoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50 ZigiP1RoaXMgc3dpdGNoIGRvZXMgbm90IHRha2UgYW4gYXJndW1lbnRcbiIpOwotICAgICAgICAg ICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICBpZiAoY3ggPT0gRklMX1NFRSkgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNtcmVz dWx0Lm5yZXN1bHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNFRV9SRUw6IHJlbGF0 aXZlID0gMTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBTRUVfQUJTOiByZWxh dGl2ZSA9IDA7IGJyZWFrOwotCQkgICAgICBjYXNlIFNFRV9GSU5EOiB7Ci0JCQkgIGlmIChnZXR2 YWwpIHsKLQkJCSAgICAgIHkgPSBjbWZsZCgic3RyaW5nIG9yIHBhdHRlcm4iLCIiLCZzLHh4c3Ry aW5nKTsKLQkJCSAgICAgIGlmICh5IDwgMCkKLQkJCQlyZXR1cm4oeSk7Ci0JCQkgICAgICBtYWtl c3RyKCZzZWVrX3RhcmdldCxicnN0cmlwKHMpKTsKLQkJCSAgICAgIGJyZWFrOwotCQkJICB9Ci0J CSAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiByc2l6ZSA9IGNtcmVzdWx0 Lm5yZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2Ug aWYgKGN4ID09IEZJTF9DT1UpIHsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjbXJlc3Vs dC5ucmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBDT1VfTElTOiBsaXN0aW5n ID0gMTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBDT1VfTk9MOiBsaXN0aW5n ID0gMDsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcnNpemUgPSBjbXJl c3VsdC5ucmVzdWx0OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgfQotICAgICAgICB9IHdoaWxlCi0gICAgICAgICAgKGNtcmVzdWx0LmZjb2Rl ID09IF9DTUtFWSk7Ci0KLSAgICAgICAgbiA9IGNtcmVzdWx0Lm5yZXN1bHQ7ICAgICAgICAgICAv KiBDaGFubmVsICovCi0gICAgICAgIGRlYnVnKEYxMDEsIkZJTEUgU0VFSy9DT1VOVCBjaGFubmVs IiwiIixuKTsKLSAgICAgICAgaWYgKGN4ID09IEZJTF9DT1UpIHsKLSAgICAgICAgICAgIGlmICgo eCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgICAgICAgICAgcmV0dXJuKHgpOwotCSAgICBpZiAobiA9 PSAtOSkgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLQkgICAgaWYgKG4gPT0gLTgpIHJldHVybihzdWNj ZXNzID0gMSk7Ci0KLSAgICAgICAgICAgIHpfZmlsY291bnQgPSB6X2NvdW50KG4scnNpemUpOwot ICAgICAgICAgICAgaWYgKHpfZmlsY291bnQgPCAwKSB7Ci0gICAgICAgICAgICAgICAgcmMgPSB6 X2ZpbGNvdW50OwotICAgICAgICAgICAgICAgIHByaW50ZigiP0NPVU5UIGVycm9yOiAlc1xuIixj a2ZlcnJvcihyYykpOwotICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgICAgICBpZiAobGlzdGluZyA8IDApCi0gICAgICAgICAgICAgIGxpc3RpbmcgPSAh eGNtZHNyYzsKLSAgICAgICAgICAgIGlmIChsaXN0aW5nKQotICAgICAgICAgICAgICBwcmludGYo IiAlbGQgJXMlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgIHpfZmlsY291bnQsCi0gICAgICAg ICAgICAgICAgICAgICAoKHJzaXplID09IFJEX0NIQVIpID8gImJ5dGUiIDogImxpbmUiKSwKLSAg ICAgICAgICAgICAgICAgICAgICgoel9maWxjb3VudCA9PSAxTCkgPyAiIiA6ICJzIikKLSAgICAg ICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9ICh6X2ZpbGNv dW50ID4gLTEpID8gMSA6IDApOwotICAgICAgICB9Ci0JbSA9IChyc2l6ZSA9PSBSRF9DSEFSKSA/ Ci0JICAgICJOdW1iZXIgb2YgYnl0ZXM7XG4gb3Iga2V5d29yZCIgOgotCSAgICAiTnVtYmVyIG9m IGxpbmVzO1xuIG9yIGtleXdvcmQiOwotICAgICAgICBjbWZkYmkoJnN3LCAgICAgICAgICAgICAg ICAgICAgIC8qIFNFRUsgc3ltYm9saWMgdGFyZ2V0cyAoRU9GKSAqLwotICAgICAgICAgICAgICAg X0NNS0VZLCAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCi0gICAgICAgICAgICAgICBtLAot ICAgICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAg ICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAgICAgICAgICAgIG5mc2Vrd3RhYiwgICAg ICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGFibGUgc2l6ZSAqLwotICAgICAg ICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAy OiA0ID0gY21zd2kgKi8KLSAgICAgICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAv KiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0gICAgICAgICAgICAgICBmc2Vrd3RhYiwgICAgICAg ICAgICAgICAgLyogS2V5d29yZCB0YWJsZSAqLwotICAgICAgICAgICAgICAgJm51ICAgICAgICAg ICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KLSAgICAgICAgICAgICAgICk7 Ci0gICAgICAgIGNtZmRiaSgmbnUsICAgICAgICAgICAgICAgICAgICAgLyogQnl0ZSBvciBsaW5l IG51bWJlciAqLwotICAgICAgICAgICAgICAgX0NNTlVXLCAgICAgICAgICAgICAgICAgIC8qIGZj b2RlICovCi0gICAgICAgICAgICAgICAiIiwKLSAgICAgICAgICAgICAgICIiLCAgICAgICAgICAg ICAgICAgICAgICAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAg ICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAgICAgICAgICAgIDEwLCAgICAg ICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogcmFkaXggKi8KLSAgICAg ICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEg MjogMCAqLwotICAgICAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgICAgIC8qIFByb2Nl c3NpbmcgZnVuY3Rpb24gKi8KLSAgICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAg ICAvKiBLZXl3b3JkIHRhYmxlICovCi0gICAgICAgICAgICAgICBOVUxMICAgICAgICAgICAgICAg ICAgICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLwotICAgICAgICAgICAgICAgKTsKLSAgICAg ICAgeCA9IGNtZmRiKCZzdyk7ICAgICAgICAgICAgICAgICAvKiBQYXJzZSBzb21ldGhpbmcgKi8K LSAgICAgICAgaWYgKHggPCAwKSB7Ci0gICAgICAgICAgICBpZiAoeCA9PSAtMykgewotICAgICAg ICAgICAgICAgIHByaW50ZigiP0NoYW5uZWwgbnVtYmVyIG9yIEVPRiByZXF1aXJlZFxuIik7Ci0g ICAgICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu KHgpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjbXJlc3VsdC5mY29kZSA9PSBfQ01OVVcpIHsK LSAgICAgICAgICAgIHogPSBjbXJlc3VsdC53cmVzdWx0OwotICAgICAgICAgICAgZGVidWcoRjEx MCwiRklMRSBTRUVLIGF0bWJ1ZiIsYXRtYnVmLDApOwotICAgICAgICAgICAgaWYgKHJlbGF0aXZl IDwgMCkgewotICAgICAgICAgICAgICAgIGlmIChjeCA9PSBGSUxfU0VFICYmIChhdG1idWZbMF0g PT0gJysnIHx8IGF0bWJ1ZlswXSA9PSAnLScpKQotICAgICAgICAgICAgICAgICAgcmVsYXRpdmUg PSAxOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHJlbGF0aXZlID0g MDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChjbXJlc3VsdC5mY29kZSA9PSBf Q01LRVkpIHsKLSAgICAgICAgICAgIGVvZmZsZyA9IGNtcmVzdWx0Lm5yZXN1bHQ7Ci0gICAgICAg ICAgICByZWxhdGl2ZSA9IDA7Ci0gICAgICAgICAgICB5ID0gMCAtIGVvZmZsZzsKLSAgICAgICAg fQotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwot CWlmIChuID09IC05KSByZXR1cm4oc3VjY2VzcyA9IDApOwotCWlmIChuID09IC04KSByZXR1cm4o c3VjY2VzcyA9IDEpOwotICAgICAgICB5ID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFJlY3ljbGUgdGhpcyAqLwotICAgICAgICB6X2ZsdXNoKG4pOwotICAgICAgICBkZWJ1ZyhGMTAx LCJGSUxFIFNFRUsgcmVsYXRpdmUiLCIiLHJlbGF0aXZlKTsKLSAgICAgICAgZGVidWcoRjEwMSwi RklMRSBTRUVLIHJzaXplIiwiIixyc2l6ZSk7Ci0KLSAgICAgICAgaWYgKHJzaXplID09IFJEX0NI QVIpIHsgICAgICAgICAvKiBTZWVrIHRvIGJ5dGUgcG9zaXRpb24gKi8KLSAgICAgICAgICAgIGlm IChyZWxhdGl2ZSA+IDApIHsKLSAgICAgICAgICAgICAgICBDS19PRkZfVCBwb3M7Ci0gICAgICAg ICAgICAgICAgcG9zID0gel9nZXRwb3Mobik7Ci0gICAgICAgICAgICAgICAgaWYgKHBvcyA8IChD S19PRkZfVCkwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJjID0gcG9zOwotICAgICAgICAgICAg ICAgICAgICBwcmludGYoIj9SZWxhdGl2ZSBTRUVLIGZhaWxlZDogJXNcbiIsY2tmZXJyb3IocmMp KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgeiArPSBwb3M7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg ICAgICAgIGlmICh6IDwgMCAmJiAhZW9mZmxnKSB7IC8qIE5lZ2F0aXZlIGFyZyBidXQgbm90IHJl bGF0aXZlICovCi0gICAgICAgICAgICAgICAgICAgIHkgPSAwOyAgICAgICAgICAgICAgLyogUmVt ZW1iZXIgdGhpcyB3YXMgYmFkICovCi0gICAgICAgICAgICAgICAgICAgIHogPSAwOyAgICAgICAg ICAgICAgLyogYnV0IHN1YnN0aXR1dGUgMCAqLwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIGRlYnVnKEYxMDEsIkZJTEUgU0VFSyAvQ0hBUiB6IiwiIix6KTsK LSAgICAgICAgICAgIGlmICh6IDwgMCAmJiAhZW9mZmxnKSB7Ci0gICAgICAgICAgICAgICAgel9l cnJvciA9IEZYX1JORzsKLSAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAg ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChyYyA9IHpfc2VlayhuLHopKSA8IDApIHsKLSAg ICAgICAgICAgICAgICBpZiAocmMgPT0gRlhfRU9GKSByZXR1cm4oc3VjY2VzcyA9IDApOwotICAg ICAgICAgICAgICAgIHByaW50ZigiP1NFRUsgL0JZVEUgZmFpbGVkIC0gQ2hhbm5lbCAlZDogJXNc biIsbixja2ZlcnJvcihyYykpOwotICAgICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VlayB0 byBsaW5lICovCi0gICAgICAgICAgICBpZiAocmVsYXRpdmUgPiAwKSB7Ci0gICAgICAgICAgICAg ICAgQ0tfT0ZGX1QgcG9zOwotICAgICAgICAgICAgICAgIHBvcyA9IHpfZ2V0bGluZShuKTsKLSAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJGSUxFIFNFRUsgL0xJTkUgcG9zIiwiIixwb3MpOwot ICAgICAgICAgICAgICAgIGlmIChwb3MgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJjID0g cG9zOwotICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9SZWxhdGl2ZSBTRUVLIGZhaWxlZDog JXNcbiIsY2tmZXJyb3IocmMpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgeiArPSBwb3M7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJGSUxFIFNFRUsgL0xJTkUgeiIsIiIseik7Ci0gICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJGSUxFIFNFRUsgL0xJTkUgZW9mZmxnIiwiIixlb2ZmbGcpOwot ICAgICAgICAgICAgaWYgKHogPCAwICYmICFlb2ZmbGcpIHsKLSAgICAgICAgICAgICAgICB6X2Vy cm9yID0gRlhfUk5HOwotICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKHJjID0gel9saW5lKG4seikpIDwgMCkgewotICAg ICAgICAgICAgICAgIGlmIChyYyA9PSBGWF9FT0YpIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAg ICAgICAgICAgICAgcHJpbnRmKCI/U0VFSyAvTElORSBmYWlsZWQgLSBDaGFubmVsICVkOiAlc1xu IixuLGNrZmVycm9yKHJjKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgfQotCS8qCi0JICBOb3csIGhhdmluZyBzb3VnaHQgdG8gdGhlIGRlc2ly ZWQgc3RhcnRpbmcgc3BvdCwgaWYgYSAvRklORDoKLQkgIHRhcmdldCB3YXMgc3BlY2lmaWVkLCBs b29rIGZvciBpdCBub3cuCi0JKi8KLQlpZiAoc2Vla190YXJnZXQpIHsKLQkgICAgaW50IGZsYWcg PSAwLCBpc3BhdCA9IDAsIG1hdGNocmVzdWx0ID0gMDsKLQkgICAgd2hpbGUgKCFmbGFnKSB7Ci0J CXkgPSB6X2luKG4sbGluZSxMSU5CVUZTSVosTElOQlVGU0laLTEsMCk7Ci0JCWlmICh5IDwgMCkg ewotCQkgICAgeSA9IDA7Ci0JCSAgICBicmVhazsKLQkJfQotCQlpZiAoaXNwYXR0ZXJuKHNlZWtf dGFyZ2V0KSkgewotCQkgICAgbWF0Y2hyZXN1bHQgPSBja21hdGNoKHNlZWtfdGFyZ2V0LGxpbmUs aW5wY2FzW2NtZGx2bF0sMSs0KTsKLQkJfSBlbHNlIHsKLQkJICAgIC8qIFRoaXMgaXMgZmFzdGVy ICovCi0JCSAgICBtYXRjaHJlc3VsdCA9IGNraW5kZXgoc2Vla190YXJnZXQsbGluZSwwLDAsaW5w Y2FzW2NtZGx2bF0pOwotCQl9Ci0JCWlmIChtYXRjaHJlc3VsdCkgewotCQkgICAgZmxhZyA9IDE7 Ci0JCSAgICBicmVhazsKLQkJfQotCSAgICB9Ci0JICAgIGlmIChmbGFnKSB7Ci0JCWRlYnVnKEYx MTEsIkZTRUVLIEhBVkUgTUFUQ0giLHNlZWtfdGFyZ2V0LHpfZ2V0bGluZShuKSk7Ci0JCS8qIEJh Y2sgdXAgdG8gYmVnaW5uaW5nIG9mIGxpbmUgd2hlcmUgdGFyZ2V0IGZvdW5kICovCi0JCWlmICgo eSA9IHpfbGluZShuLHpfZ2V0bGluZShuKS0xKSkgPCAwKSB7Ci0JCSAgICBpZiAocmMgPT0gRlhf RU9GKSByZXR1cm4oc3VjY2VzcyA9IDApOwotCQkgICAgcHJpbnRmKCI/U0VFSyAvTElORSBmYWls ZWQgLSBDaGFubmVsICVkOiAlc1xuIiwKLQkJCSAgIG4sY2tmZXJyb3IocmMpKTsKLQkJICAgIHJl dHVybigtOSk7Ci0JCX0KLQkJZGVidWcoRjEwMSwiRlNFRUsgTElORSIsIiIseSk7Ci0JICAgIH0K LQl9Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gKHkgPCAwKSA/IDAgOiAxKTsKLQotICAgICAg Y2FzZSBGSUxfTElTOiB7ICAgICAgICAgICAgICAgICAgIC8qIExJU1Qgb3BlbiBmaWxlcyAqLwot I2lmZGVmIENLX1RUR1dTSVoKLSAgICAgICAgICBleHRlcm4gaW50IGNtZF9yb3dzLCBjbWRfY29s czsKLSNlbmRpZiAvKiBDS19UVEdXU0laICovCi0gICAgICAgICAgZXh0ZXJuIGludCB4YXNrbW9y ZTsKLSAgICAgICAgICBpbnQgaSwgeCwgbiA9IDAsIHBhZ2luZyA9IDA7Ci0gICAgICAgICAgY2hh ciAqIHM7Ci0KLSAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgICBy ZXR1cm4oeCk7Ci0KLSNpZmRlZiBDS19UVEdXU0laCi0gICAgICAgICAgaWYgKGNtZF9yb3dzID4g MCAmJiBjbWRfY29scyA+IDApCi0jZW5kaWYgLyogQ0tfVFRHV1NJWiAqLwotICAgICAgICAgICAg cGFnaW5nID0geGFza21vcmU7Ci0KLSAgICAgICAgICBwcmludGYoIlN5c3RlbSBvcGVuIGZpbGUg bGltaXQ6JTVkXG4iLCB6X29wZW5tYXgpOwotICAgICAgICAgIHByaW50ZigiTWF4aW11bSBmb3Ig RklMRSBPUEVOOiAlNWRcbiIsIHpfbWF4Y2hhbik7Ci0gICAgICAgICAgcHJpbnRmKCJGaWxlcyBj dXJyZW50bHkgb3BlbjogICU1ZFxuXG4iLCB6X25vcGVuKTsKLSAgICAgICAgICBuID0gNDsKLSAg ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgel9tYXhjaGFuOyBpKyspIHsKLSAgICAgICAgICAgICAg cyA9IHpfZ2V0bmFtZShpKTsgICAgICAgICAvKiBHb3Qgb25lPyAqLwotICAgICAgICAgICAgICBp ZiAocykgeyAgICAgICAgICAgICAgICAgIC8qIFllcyAqLwotICAgICAgICAgICAgICAgICAgY2hh ciBtWzhdOwotICAgICAgICAgICAgICAgICAgbVswXSA9IE5VTDsKLSAgICAgICAgICAgICAgICAg IHByaW50ZigiJTJkLiAlcyIsaSxzKTsgLyogUHJpbnQgbmFtZSAqLwotICAgICAgICAgICAgICAg ICAgbisrOyAgICAgICAgICAgICAgICAgICAvKiBDb3VudCBpdCAqLwotICAgICAgICAgICAgICAg ICAgeCA9IHpfZ2V0bW9kZShpKTsgICAgICAvKiBHZXQgbW9kZXMgJiBwcmludCB0aGVtICovCi0g ICAgICAgICAgICAgICAgICBpZiAoeCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICBpZiAo eCAmIEZNX1JFQSkgY2tzdHJuY2F0KG0sIlIiLDgpOwotICAgICAgICAgICAgICAgICAgICAgIGlm ICh4ICYgRk1fV1JJKSBja3N0cm5jYXQobSwiVyIsOCk7Ci0gICAgICAgICAgICAgICAgICAgICAg aWYgKHggJiBGTV9BUFApIGNrc3RybmNhdChtLCJBIiw4KTsKLSAgICAgICAgICAgICAgICAgICAg ICBpZiAoeCAmIEZNX0JJTikgY2tzdHJuY2F0KG0sIkIiLDgpOwotICAgICAgICAgICAgICAgICAg ICAgIGlmIChtWzBdKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgKCVzKSIsbSk7 Ci0gICAgICAgICAgICAgICAgICAgICAgaWYgKHggJiBGTV9FT0YpCi0gICAgICAgICAgICAgICAg ICAgICAgICBwcmludGYoIiBbRU9GXSIpOwotICAgICAgICAgICAgICAgICAgICAgIGVsc2UJCS8q IEFuZCBmaWxlIHBvc2l0aW9uIHRvbyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRm KCIgJXMiLGNrZnN0b2Eoel9nZXRwb3MoaSkpKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKLSNpZmRlZiBDS19UVEdXU0laCi0gICAgICAgICAg ICAgICAgICBpZiAocGFnaW5nID4gMCkgeyAgICAgLyogUGF1c2UgYXQgZW5kIG9mIHNjcmVlbiAq LwotICAgICAgICAgICAgICAgICAgICAgIGlmIChuID4gY21kX3Jvd3MgLSAzKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgIGlmICghYXNrbW9yZSgpKQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgbiA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgICAgfQotI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KLSAgICAgICAgICAgICAgfQot ICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgICAgfQotCi0g ICAgICBjYXNlIEZJTF9GTFU6ICAgICAgICAgICAgICAgICAgICAgLyogRkxVU0ggKi8KLSAgICAg ICAgaWYgKCh4ID0gY21udW0oIkNoYW5uZWwgbnVtYmVyIiwiIiwxMCwmbiwgeHhzdHJpbmcpKSA8 IDApIHsKLSAgICAgICAgICAgIGlmICh4ID09IC0zKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRm KCI/Q2hhbm5lbCBudW1iZXIgcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAgICAgIHggPSAtOTsK LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybih4KTsKLSAgICAgICAgfQotICAgICAg ICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotCWlmIChuID09 IC05KSByZXR1cm4oc3VjY2VzcyA9IDApOwotCWlmIChuID09IC04KSByZXR1cm4oc3VjY2VzcyA9 IDEpOwotICAgICAgICBpZiAoKHJjID0gel9mbHVzaChuKSkgPCAwKSB7Ci0gICAgICAgICAgICBw cmludGYoIj9GTFVTSCBmYWlsZWQgLSBDaGFubmVsICVkOiAlc1xuIixuLGNrZmVycm9yKHJjKSk7 Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybihzdWNj ZXNzID0gMSk7Ci0KLSAgICAgIGNhc2UgRklMX1NUQTogICAgICAgICAgICAgICAgICAgICAvKiBT VEFUVVMgKi8KLQl7Ci0JICAgIGludCBpLCBqLCBrOwkJLyogU3VwcGx5IGRlZmF1bHQgaWYgb25s eSBvbmUgb3BlbiAqLwotCSAgICBzID0gIiI7Ci0JICAgIGZvciAoayA9IDAsIGogPSAwLCBpID0g MDsgaSA8IHpfbWF4Y2hhbjsgaSsrKSB7Ci0JCWlmICh6X2ZpbGUpCi0JCSAgaWYgKHpfZmlsZVtp XSkKLQkJICAgIGlmICh6X2ZpbGVbaV0tPnpfZnApIHsgaysrOyBqID0gaTsgfQotCSAgICB9Ci0J ICAgIGlmIChrID09IDEpIHMgPSBja2l0b2Eoaik7Ci0JfQotICAgICAgICBpZiAoKHggPSBjbW51 bSgiQ2hhbm5lbCBudW1iZXIiLHMsMTAsJm4sIHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAg ICBpZiAoeCA9PSAtMykgewotCQlpZiAoel9ub3BlbiA+IDEpIHsKLQkJICAgIHByaW50ZigiPyVk IGZpbGVzIG9wZW4gLSBwbGVhc2Ugc3VwcGx5IGNoYW5uZWwgbnVtYmVyXG4iLAotCQkJICAgel9u b3Blbik7Ci0JCSAgICByZXR1cm4oLTkpOwotCQl9Ci0gICAgICAgICAgICB9IGVsc2UKLQkgICAg ICByZXR1cm4oeCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQot ICAgICAgICAgIHJldHVybih5KTsKLQlpZiAoKCF6X2ZpbGUgfHwgel9ub3BlbiA9PSAwKSAmJiB4 ID09IC0zKSB7Ci0JICAgIHByaW50ZigiTm8gZmlsZXMgb3BlblxuIik7Ci0JICAgIHJldHVybihz dWNjZXNzID0gMSk7Ci0JfQotICAgICAgICBwID0gYmxhbmtzICsgMzsgICAgICAgICAgICAgICAg IC8qIFRyaWNreSBmb3JtYXR0aW5nLi4uICovCi0gICAgICAgIGlmIChuIDwgMTAwMCkgcC0tOwot ICAgICAgICBpZiAobiA8IDEwMCkgcC0tOwotICAgICAgICBpZiAobiA8IDEwKSBwLS07Ci0gICAg ICAgIGlmICgocmMgPSB6X2dldG1vZGUobikpIDwgMCkgewotICAgICAgICAgICAgcHJpbnRmKCJD aGFubmVsICVkOiVzJXNcbiIsbixwLGNrZmVycm9yKHJjKSk7Ci0gICAgICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDApOwotICAgICAgICB9IGVsc2UgaWYgKCFyYykgewotICAgICAgICAgICAgcHJp bnRmKCJDaGFubmVsICVkOiVzTm90IG9wZW5cbiIsbixwKTsKLSAgICAgICAgICAgIHJldHVybihz dWNjZXNzID0gMCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBDS19PRkZfVCB4eDsK LSAgICAgICAgICAgIHMgPSB6X2dldG5hbWUobik7Ci0gICAgICAgICAgICBpZiAoIXMpIHMgPSAi KG5hbWUgdW5rbm93bikiOwotICAgICAgICAgICAgcHJpbnRmKCJDaGFubmVsICVkOiVzT3Blblxu IixuLHApOwotICAgICAgICAgICAgcHJpbnRmKCIgRmlsZTogICAgICAgICVzXG4gTW9kZXM6ICAg ICAgIixzKTsKLSAgICAgICAgICAgIGlmIChyYyAmIEZNX1JFQSkgcHJpbnRmKCIgL1JFQUQiKTsK LSAgICAgICAgICAgIGlmIChyYyAmIEZNX1dSSSkgcHJpbnRmKCIgL1dSSVRFIik7Ci0gICAgICAg ICAgICBpZiAocmMgJiBGTV9BUFApIHByaW50ZigiIC9BUFBFTkQiKTsKLSAgICAgICAgICAgIGlm IChyYyAmIEZNX0JJTikgcHJpbnRmKCIgL0JJTkFSWSIpOwotICAgICAgICAgICAgaWYgKHJjICYg Rk1fQ01EKSBwcmludGYoIiAvQ09NTUFORCIpOwotICAgICAgICAgICAgaWYgKHJjICYgRk1fRU9G KSBwcmludGYoIiBbRU9GXSIpOwotICAgICAgICAgICAgcHJpbnRmKCJcbiBTaXplOiAgICAgICAg JXNcbiIsY2tmc3RvYSh6X2NvdW50KG4sUkRfQ0hBUikpKTsKLSAgICAgICAgICAgIHByaW50Zigi IEF0IGJ5dGU6ICAgICAlc1xuIixja2ZzdG9hKHpfZ2V0cG9zKG4pKSk7Ci0gICAgICAgICAgICB4 eCA9IHpfZ2V0bGluZShuKTsKLSAgICAgICAgICAgIGlmICh4eCA+IChDS19PRkZfVCktMSkKLSAg ICAgICAgICAgICAgcHJpbnRmKCIgQXQgbGluZTogICAgICVzXG4iLGNrZnN0b2EoeHgpKTsKLSAg ICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgICAgIH0KLSAgICAgIGRlZmF1bHQ6 Ci0gICAgICAgIHJldHVybigtMik7Ci0gICAgfQotfQotI2VuZGlmIC8qIENLQ0hBTk5FTElPICov Ci0KLSNpZm5kZWYgTk9TRVRLRVkKLS8qIFNhdmUgS2V5IG1hcHMgYW5kIGluIE9TLzIgTW91c2Ug bWFwcyAqLwotaW50Ci1zYXZrZXlzKG5hbWUsZGlzcCkgY2hhciAqIG5hbWU7IGludCBkaXNwOyB7 Ci0gICAgY2hhciAqdHA7Ci0gICAgc3RhdGljIHN0cnVjdCBmaWxpbmZvIHh4OwotICAgIGludCBz YXZmaWwsIGksIGosIGs7Ci0gICAgY2hhciBidWZbMTAyNF07Ci0KLSAgICB6Y2xvc2UoWk1GSUxF KTsKLQotICAgIGlmIChkaXNwKSB7Ci0gICAgICAgIHh4LmJzID0gMDsgeHguY3MgPSAwOyB4eC5y bCA9IDA7IHh4Lm9yZyA9IDA7IHh4LmNjID0gMDsKLSAgICAgICAgeHgudHlwID0gMDsgeHguZHNw ID0gWFlGWl9BOyB4eC5vc19zcGVjaWZpYyA9ICIiOwotICAgICAgICB4eC5sYmxvcHRzID0gMDsK LSAgICAgICAgc2F2ZmlsID0gem9wZW5vKFpNRklMRSxuYW1lLE5VTEwsJnh4KTsKLSAgICB9IGVs c2Ugc2F2ZmlsID0gem9wZW5vKFpNRklMRSxuYW1lLE5VTEwsTlVMTCk7Ci0KLSAgICBpZiAoc2F2 ZmlsKSB7Ci0jaWZkZWYgT1MyCi0gICAgICAgIHp0aW1lKCZ0cCk7Ci0gICAgICAgIHpzb3V0KFpN RklMRSwgIjsgS2VybWl0IDk1IFNBVkUgS0VZTUFQIGZpbGU6ICIpOwotICAgICAgICB6c291dGwo Wk1GSUxFLHRwKTsKLSAgICAgICAgaWYgKG1za2tleXMpIHsKLSAgICAgICAgICAgIHpzb3V0bCha TUZJTEUsCi0gICAgICAgICAiaWYgZXEgXCJcXHYocHJvZ3JhbSlcIiBcIkMtS2VybWl0XCIgc2V0 IG1za2VybWl0IGtleWNvZGVzIG9uIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB6 c291dGwoWk1GSUxFLAotICAgICAgICAgImlmIE5PVCBlcSBcIlxcdihwcm9ncmFtKVwiIFwiQy1L ZXJtaXRcIiBzdG9wIDEgQy1LZXJtaXQgcmVxdWlyZWQuIik7Ci0gICAgICAgICAgICB6c291dGwo Wk1GSUxFLCJzZXQgbXNrZXJtaXQga2V5Y29kZXMgb2ZmIik7Ci0gICAgICAgIH0KLSAgICAgICAg enNvdXRsKFpNRklMRSwiIik7Ci0jZWxzZSAvKiBPUzIgKi8KLSAgICAgICAgenRpbWUoJnRwKTsK LSAgICAgICAgenNvdXQoWk1GSUxFLCAiOyBDLUtlcm1pdCBTQVZFIEtFWU1BUCBmaWxlOiAiKTsK LSAgICAgICAgenNvdXRsKFpNRklMRSx0cCk7Ci0jZW5kaWYgLyogT1MyICovCi0KLSAgICAgICAg enNvdXRsKFpNRklMRSwiOyBDbGVhciBwcmV2aW91cyBrZXlib2FyZCBtYXBwaW5ncyAiKTsKLSAg ICAgICAgenNvdXRsKFpNRklMRSwic2V0IGtleSBjbGVhciIpOwotI2lmZGVmIE9TMgotICAgICAg ICBmb3IgKGsgPSAwOyBrIDwgbnR0a2V5OyBrKyspIHsKLSAgICAgICAgICAgIGlmICghdHRrZXl0 YWJba10uZmxncykgewotICAgICAgICAgICAgICAgIGNrbWFrbXNnKGJ1ZiwxMDI0LAotICAgICAg ICAgICAgICAgICAgICAgICAgICJzZXQgdGVybWluYWwga2V5ICIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgdHRrZXl0YWJba10ua3dkLAotICAgICAgICAgICAgICAgICAgICAgICAgICIgY2xl YXIiLAotICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwKLSAgICAgICAgICAgICAgICAgICAg ICAgICApOwotICAgICAgICAgICAgICAgIHpzb3V0bChaTUZJTEUsYnVmKTsKLSAgICAgICAgICAg IH0KLSAgICAgICAgfQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICB6c291dGwoWk1GSUxFLCIi KTsKLQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgS01TSVpFOyBpKyspIHsKLSAgICAgICAgICAg IGlmIChtYWNyb3RhYltpXSkgewotICAgICAgICAgICAgICAgIGludCBsZW4gPSBzdHJsZW4oKGNo YXIgKiltYWNyb3RhYltpXSk7Ci0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgY2ttYWttc2co YnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgIDEwMjQsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgInNldCBrZXkgXFwiLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNraXRvYShtc2tr ZXlzID8gY2t0b21zayhpKSA6IGkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICIgIiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICBOVUxMCi0gICAgICAgICAgICAgICAgICAgICAgICAgKTsK LSNlbHNlIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgIGNrbWFrbXNnKGJ1ZiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAxMDI0LAotICAgICAgICAgICAgICAgICAgICAgICAgICJzZXQga2V5 IFxcIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBja2l0b2EoaSksCi0gICAgICAgICAgICAg ICAgICAgICAgICAgTlVMTCxOVUxMCi0gICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbmRp ZiAvKiBPUzIgKi8KLSAgICAgICAgICAgICAgICB6c291dChaTUZJTEUsYnVmKTsKLQotICAgICAg ICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsZW47IGorKykgewotICAgICAgICAgICAgICAgICAg ICBjaGFyIGNoID0gbWFjcm90YWJbaV1bal07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaCA8 PSBTUCB8fCBjaCA+PSBERUwgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9PSAnLScg fHwgY2ggPT0gJywnIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgY2ggPT0gJ3snIHx8IGNo ID09ICd9JyB8fAotICAgICAgICAgICAgICAgICAgICAgICAgIGNoID09ICc7JyB8fCBjaCA9PSAn PycgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9PSAnLicgfHwgY2ggPT0gJ1wnJyB8 fAotICAgICAgICAgICAgICAgICAgICAgICAgIGNoID09ICdcXCcgfHwgY2ggPT0gJy8nIHx8Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgY2ggPT0gJyMnKSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBja21ha21zZyhidWYsMTAyNCwiXFx7Iixja2l0b2EoKGludCljaCksIn0iLE5VTEwpOwot ICAgICAgICAgICAgICAgICAgICAgICAgenNvdXQoWk1GSUxFLGJ1Zik7Ci0gICAgICAgICAgICAg ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBja21ha21zZyhidWYsMTAy NCxja2N0b2EoKGNoYXIpY2gpLE5VTEwsTlVMTCxOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAg ICAgIHpzb3V0KFpNRklMRSxidWYpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgfQotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgIGNrbWFrbXNnKGJ1ZiwxMDI0LCJc dDsgIixrZXluYW1lKGkpLE5VTEwsTlVMTCk7Ci0gICAgICAgICAgICAgICAgenNvdXRsKFpNRklM RSxidWYpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICB6c291dGwoWk1GSUxFLCIiKTsKLSNlbmRp ZiAvKiBPUzIgKi8KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIGtleW1hcFtpXSAhPSBpICkgewot I2lmbmRlZiBOT0tWRVJCUwotICAgICAgICAgICAgICAgIGlmIChJU19LVkVSQihrZXltYXBbaV0p KSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBua3ZlcmJzOyBqKyspCi0g ICAgICAgICAgICAgICAgICAgICAgaWYgKGt2ZXJic1tqXS5rd3ZhbCA9PSAoa2V5bWFwW2ldICYg fkZfS1ZFUkIpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg ICAgICAgIGlmIChqICE9IG5rdmVyYnMpIHsKLSNpZmRlZiBPUzIKLSNpZmRlZiBDT01NRU5UCi0g ICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwgInNldCBrZXkgXFwlZCBcXEslc1x0 OyAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1za2tleXMgPyBja3RvbXNr KGkpIDogaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3ZlcmJzW2pdLmt3ZCwg a2V5bmFtZShpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2Vsc2UKLSAg ICAgICAgICAgICAgICAgICAgICAgIGNrbWFreG1zZyhidWYsICAvKiAxMiBzdHJpbmcgYXJncyAq LwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMjQsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgInNldCBrZXkgXFwiLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNraXRvYShtc2trZXlzID8gY2t0b21zayhpKSA6IGkpLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICIgXFxLIiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBrdmVyYnNbal0ua3dkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJcdDsgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXluYW1lKGkp LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgICAgICAg ICAgICAgIHpzb3V0bChaTUZJTEUsYnVmKTsKLSNlbHNlCi0jaWZkZWYgQ09NTUVOVAotICAgICAg ICAgICAgICAgICAgICAgICAgc3ByaW50ZihidWYsICJzZXQga2V5IFxcJWQgXFxLJXMiLCBpLCBr dmVyYnNbal0ua3dkKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBja21ha21zZyhi dWYsMTAyNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXQga2V5IFxcIiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNraXRvYShpKSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICIgXFxLIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGt2ZXJic1tqXS5rd2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgenNvdXRsKFpN RklMRSxidWYpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICB9IGVsc2UKLSNlbmRpZiAvKiBOT0tWRVJCUyAqLwotICAgICAgICAgICAgICAgICAgewotI2lm ZGVmIE9TMgotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1 ZiwgInNldCBrZXkgXFwlZCBcXHslZH1cdDsgJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbXNra2V5cyA/IGNrdG9tc2soaSkgOiBpLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAga2V5bWFwW2ldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5bmFtZShp KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbHNlCi0gICAgICAgICAgICAg ICAgICAgICAgY2ttYWt4bXNnKGJ1ZiwgICAgLyogOCBzdHJpbmcgYXJncyAqLwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAxMDI0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAic2V0IGtleSBcXCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNraXRv YShtc2trZXlzID8gY2t0b21zayhpKSA6IGkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiIFxceyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNraXRvYShrZXlt YXBbaV0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifVx0OyAiLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBrZXluYW1lKGkpLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0jZW5kaWYgLyog Q09NTUVOVCAqLwotICAgICAgICAgICAgICAgICAgICAgIHpzb3V0bChaTUZJTEUsYnVmKTsKLSNl bHNlCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoYnVmLCAi c2V0IGtleSBcXCVkIFxceyVkfSIsIGksIGtleW1hcFtpXSk7Ci0jZWxzZQotICAgICAgICAgICAg ICAgICAgICAgIGNrbWFreG1zZyhidWYsMTAyNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAic2V0IGtleSBcXCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tpdG9h KGkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgXFx7IiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBja2l0b2Eoa2V5bWFwW2ldKSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAifSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCxO VUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAg ICAgICAgICAgICAgICAgICAgIHpzb3V0bChaTUZJTEUsYnVmKTsKLSNlbmRpZiAvKiBPUzIgKi8K LSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2lmZGVmIE9T MgotICAgICAgICAvKiBPUy8yIGFsc28gaGFzIHRoZSBTRVQgVEVSTUlOQUwgS0VZIDx0ZXJtdHlw ZT4gZGVmaW5lcyAqLwotICAgICAgICBmb3IgKGsgPSAwOyBrIDwgbnR0a2V5OyBrKyspIHsKLSAg ICAgICAgICAgIGV4dGVybiBzdHJ1Y3Qga2V5bm9kZSAqIHR0a2V5bWFwW107Ci0gICAgICAgICAg ICBzdHJ1Y3Qga2V5bm9kZSAqIHBub2RlID0gTlVMTDsKLQotICAgICAgICAgICAgaWYgKHR0a2V5 dGFiW2tdLmZsZ3MpICAgICAgIC8qIERvbid0IHByb2Nlc3MgQ01fSU5WIG9yIENNX0FCUiAqLwot ICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgenNvdXRsKFpNRklMRSwiIik7 Ci0gICAgICAgICAgICBja21ha21zZyhidWYsMTAyNCwiOyBTRVQgVEVSTUlOQUwgS0VZICIsdHRr ZXl0YWJba10ua3dkLE5VTEwsTlVMTCk7Ci0gICAgICAgICAgICB6c291dGwoWk1GSUxFLGJ1Zik7 Ci0KLSAgICAgICAgICAgIGZvciAocG5vZGUgPSB0dGtleW1hcFt0dGtleXRhYltrXS5rd3ZhbF07 Ci0gICAgICAgICAgICAgICAgIHBub2RlOwotICAgICAgICAgICAgICAgICBwbm9kZSA9IHBub2Rl LT5uZXh0Ci0gICAgICAgICAgICAgICAgICkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAocG5v ZGUtPmRlZi50eXBlKSB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIGtleToKLSNpZmRlZiBDT01N RU5UCi0gICAgICAgICAgICAgICAgICAgIHNwcmludGYoYnVmLCAic2V0IHRlcm1pbmFsIGtleSAl cyBcXCVkIFxceyVkfVx0OyAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRrZXl0 YWJba10ua3dkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1za2tleXMgPyBja3RvbXNr KHBub2RlLT5rZXkpIDogcG5vZGUtPmtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw bm9kZS0+ZGVmLmtleS5zY2FuY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlu YW1lKHBub2RlLT5rZXkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbHNlCi0g ICAgICAgICAgICAgICAgICAgIGNrbWFreG1zZyhidWYsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAxMDI0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNldCB0ZXJtaW5h bCBrZXkgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0a2V5dGFiW2tdLmt3ZCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgXFwiLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2tpdG9hKG1za2tleXMgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNrdG9tc2socG5vZGUtPmtleSkgOgotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBub2RlLT5rZXkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IiBcXHsiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tpdG9hKHBub2RlLT5kZWYu a2V5LnNjYW5jb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9XHQ7ICIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXluYW1lKHBub2RlLT5rZXkpLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICAg ICAgICAgIHpzb3V0bChaTUZJTEUsYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICAgICAgICBjYXNlIGt2ZXJiOgotICAgICAgICAgICAgICAgICAgICBmb3IgKGog PSAwOyBqIDwgbmt2ZXJiczsgaisrKQotICAgICAgICAgICAgICAgICAgICAgIGlmIChrdmVyYnNb al0ua3d2YWwgPT0gKHBub2RlLT5kZWYua3ZlcmIuaWQgJiB+Rl9LVkVSQikpCi0gICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGogIT0gbmt2ZXJi cykgewotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoYnVm LCAic2V0IHRlcm1pbmFsIGtleSAlcyBcXCVkIFxcSyVzXHQ7ICVzIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdHRrZXl0YWJba10ua3dkLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtc2trZXlzID8gY2t0b21zayhwbm9kZS0+a2V5KSA6IHBub2RlLT5rZXksCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt2ZXJic1tqXS5rd2QsIGtleW5hbWUocG5v ZGUtPmtleSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbHNlCi0gICAg ICAgICAgICAgICAgICAgICAgICBja21ha3htc2coYnVmLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDEwMjQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNl dCB0ZXJtaW5hbCBrZXkgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dGtl eXRhYltrXS5rd2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBcXCIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tpdG9hKG1za2tleXMgPwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBja3RvbXNrKHBub2RlLT5rZXkpIDoK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5vZGUtPmtleSksCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBcXEsiLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGt2ZXJic1tqXS5rd2QsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlx0OyAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtl eW5hbWUocG5vZGUtPmtleSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM TCxOVUxMLE5VTEwsTlVMTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgenNvdXRsKFpNRklM RSxidWYpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgICAgY2FzZSBtYWNybzogewotICAgICAgICAgICAgICAgICAgICAg IGludCBsZW4gPSBzdHJsZW4oKGNoYXIgKilwbm9kZS0+ZGVmLm1hY3JvLnN0cmluZyk7Ci0jaWZk ZWYgQ09NTUVOVAotICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoYnVmLCJzZXQgdGVybWlu YWwga2V5ICVzIFxcJWQgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0a2V5dGFi W2tdLmt3ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1za2tleXMgPyBja3RvbXNr KHBub2RlLT5rZXkpIDogcG5vZGUtPmtleSk7Ci0jZWxzZQotICAgICAgICAgICAgICAgICAgICAg IGNrbWFreG1zZyhidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAyNCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0IHRlcm1pbmFsIGtleSAiLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHR0a2V5dGFiW2tdLmt3ZCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiIFxcIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj a2l0b2EobXNra2V5cyA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNr dG9tc2socG5vZGUtPmtleSkgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwbm9kZS0+a2V5KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEws TlVMTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbmRpZiAvKiBDT01NRU5U ICovCi0gICAgICAgICAgICAgICAgICAgICAgenNvdXQoWk1GSUxFLGJ1Zik7Ci0KLSAgICAgICAg ICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciBjaCA9IHBub2RlLT5kZWYubWFjcm8uc3RyaW5nW2pdOwotICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPD0gU1AgfHwgY2ggPj0gREVMIHx8Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2ggPT0gJy0nIHx8IGNoID09ICcsJyB8fAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoID09ICd7JyB8fCBjaCA9PSAnfScgfHwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9PSAnOycgfHwgY2ggPT0gJz8nIHx8Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPT0gJy4nIHx8IGNoID09ICdcJycgfHwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9PSAnXFwnIHx8IGNoID09ICcvJyB8fAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID09ICcjJykgewotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2ttYWttc2coYnVmLDEwMjQsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiXFx7Iixja2l0b2EoKGludCljaCksIn0iLE5VTEwpOwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgenNvdXQoWk1GSUxFLGJ1Zik7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj a21ha21zZyhidWYsMTAyNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNrY3RvYSgoY2hhciljaCksTlVMTCxOVUxMLE5VTEwpOwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgenNvdXQoWk1GSUxFLGJ1Zik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgY2ttYWttc2co YnVmLDEwMjQsIlx0OyAiLGtleW5hbWUocG5vZGUtPmtleSksTlVMTCxOVUxMKTsKLSAgICAgICAg ICAgICAgICAgICAgICB6c291dGwoWk1GSUxFLGJ1Zik7Ci0gICAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBjYXNlIGxpdGVy YWw6IHsKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuID0gc3RybGVuKChjaGFyICopcG5v ZGUtPmRlZi5saXRlcmFsLnN0cmluZyk7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgICAg ICAgICAgIHNwcmludGYoYnVmLCJzZXQgdGVybWluYWwga2V5ICVzIC9saXRlcmFsIFxcJWQgIiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0a2V5dGFiW2tdLmt3ZCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1za2tleXMgPyBja3RvbXNrKHBub2RlLT5rZXkpIDogcG5v ZGUtPmtleSk7Ci0jZWxzZQotICAgICAgICAgICAgICAgICAgICAgIGNrbWFreG1zZyhidWYsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAyNCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAic2V0IHRlcm1pbmFsIGtleSAiLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHR0a2V5dGFiW2tdLmt3ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi IC9saXRlcmFsIFxcIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBja2l0b2EobXNr a2V5cyA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNrdG9tc2socG5v ZGUtPmtleSkgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbm9kZS0+ a2V5KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgICAgICAgICAgIHpzb3V0KFpNRklMRSxi dWYpOwotCi0gICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxlbjsgaisrKSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY2ggPSBwbm9kZS0+ZGVmLmxpdGVyYWwu c3RyaW5nW2pdOwotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPD0gU1AgfHwgY2gg Pj0gREVMIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPT0gJy0nIHx8IGNo ID09ICcsJyB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID09ICd7JyB8fCBj aCA9PSAnfScgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9PSAnOycgfHwg Y2ggPT0gJz8nIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPT0gJy4nIHx8 IGNoID09ICdcJycgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9PSAnXFwn IHx8IGNoID09ICcvJyB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID09ICcj JykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ttYWttc2coYnVmLDEwMjQsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXFx7Iixja2l0b2EoKGludClj aCksIn0iLE5VTEwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenNvdXQoWk1GSUxF LGJ1Zik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBja21ha21zZyhidWYsMTAyNCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNrY3RvYSgoY2hhciljaCksTlVMTCxOVUxMLE5VTEwpOwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgenNvdXQoWk1GSUxFLGJ1Zik7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgICAgICAgY2ttYWttc2coYnVmLDEwMjQsIlx0OyAiLGtleW5hbWUocG5vZGUtPmtleSksTlVM TCxOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgICB6c291dGwoWk1GSUxFLGJ1Zik7Ci0gICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgICBjYXNlIGVzYzoKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICAgICAgICAgIHNw cmludGYoYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAic2V0IHRlcm1pbmFsIGtleSAlcyAv bGl0ZXJhbCBcXCVkIFxceyVkfVxceyVkfVx0OyAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgdHRrZXl0YWJba10ua3dkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1za2tl eXMgPyBja3RvbXNrKHBub2RlLT5rZXkpIDogcG5vZGUtPmtleSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBJU0RHMjAwKHR0a2V5dGFiW2tdLmt3dmFsKSA/IDMwIDogMjcsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgcG5vZGUtPmRlZi5lc2Mua2V5ICYgfkZfRVNDLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGtleW5hbWUocG5vZGUtPmtleSkKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgY2ttYWt4bXNnKGJ1 ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMjQsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAic2V0IHRlcm1pbmFsIGtleSAiLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdHRrZXl0YWJba10ua3dkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IiAvbGl0ZXJhbCBcXCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBja2l0b2EobXNr a2V5cyA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2t0b21zayhwbm9k ZS0+a2V5KSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5vZGUtPmtl eSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFxceyIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBja2l0b2EoSVNERzIwMCh0dGtleXRhYltrXS5rd3ZhbCkgPyAzMCA6 IDI3KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9XFx7IiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNraXRvYShwbm9kZS0+ZGVmLmVzYy5rZXkgJiB+Rl9FU0MpLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn1cdDsgIiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGtleW5hbWUocG5vZGUtPmtleSksCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBOVUxMLE5VTEwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZW5k aWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgICAgICAgICB6c291dGwoWk1GSUxFLGJ1Zik7 Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBjc2k6 Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwKLSAgICAg ICAgICAgICAgICAgICAgICAgInNldCB0ZXJtaW5hbCBrZXkgJXMgL2xpdGVyYWwgXFwlZCBcXHsy N31bXFx7JWR9XHQ7ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dGtleXRhYltr XS5rd2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNra2V5cyA/IGNrdG9tc2socG5v ZGUtPmtleSkgOiBwbm9kZS0+a2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBub2Rl LT5kZWYuY3NpLmtleSAmIH5GX0NTSSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlu YW1lKHBub2RlLT5rZXkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbHNlCi0g ICAgICAgICAgICAgICAgICAgIGNrbWFreG1zZyhidWYsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAxMDI0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNldCB0ZXJtaW5h bCBrZXkgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0a2V5dGFiW2tdLmt3ZCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgL2xpdGVyYWwgXFwiLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2tpdG9hKG1za2tleXMgPwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNrdG9tc2socG5vZGUtPmtleSkgOgotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBub2RlLT5rZXkpLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIiBcXHsyN31bXFx7IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNr aXRvYShwbm9kZS0+ZGVmLmNzaS5rZXkgJiB+Rl9DU0kpLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIn1cdDsgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleW5hbWUo cG5vZGUtPmtleSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVM TCxOVUxMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2VuZGlmIC8qIENPTU1F TlQgKi8KLSAgICAgICAgICAgICAgICAgICAgenNvdXRsKFpNRklMRSxidWYpOwotICAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg ICAgICAgfQotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAgICAgIHpzb3V0bChaTUZJTEUsIiIpOwot ICAgICAgICB6c291dGwoWk1GSUxFLCI7IEVuZCIpOwotICAgICAgICB6Y2xvc2UoWk1GSUxFKTsK LSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IDApOwotICAgIH0KLX0KLSNlbmRpZiAvKiBOT1NFVEtFWSAqLwotCi0jZGVm aW5lIFNWX1NDUkwgMAotI2RlZmluZSBTVl9ISVNUIDEKLQotI2lmZGVmIE9TMgotI2lmbmRlZiBO T0xPQ0FMCi1zdGF0aWMgc3RydWN0IGtleXRhYiB0cm10cm1vcHRbXSA9IHsKLSAgICB7ICJzY3Jv bGxiYWNrIiwgU1ZfU0NSTCwgMCB9Ci19OwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNlbmRpZiAv KiBPUzIgKi8KLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgY21kdHJtb3B0W10gPSB7Ci0jaWZkZWYg Q0tfUkVDQUxMCi0gICAgeyAiaGlzdG9yeSIsICAgIFNWX0hJU1QsIDAgfSwKLSNlbmRpZiAvKiBD S19SRUNBTEwgKi8KLSNpZmRlZiBPUzIKLSNpZm5kZWYgTk9MT0NBTAotICAgIHsgInNjcm9sbGJh Y2siLCBTVl9TQ1JMLCAwIH0sCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2VuZGlmIC8qIE9TMiAq LwotICAgIHsgIiIsIDAsIDAgfQotfTsKLXN0YXRpYyBpbnQgbmNtZHRybW9wdCA9IChzaXplb2Yg KGNtZHRybW9wdCkgLyBzaXplb2YgKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLSNpZmRlZiBPUzIK LSNpZm5kZWYgTk9MT0NBTAotX1BST1RPVFlQKGludCBzYXZzY3JiaywgKGludCwgY2hhciAqLCBp bnQpKTsKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBD S19SRUNBTEwKLV9QUk9UT1RZUChpbnQgc2F2aGlzdG9yeSwgKGNoYXIgKiwgaW50KSk7Ci0jZW5k aWYgLyogQ0tfUkVDQUxMICovCi0KLWludAotZG9zYXZlKHh4KSBpbnQgeHg7IHsKLSAgICBpbnQg eCwgeSA9IDAsIGRpc3A7Ci0gICAgY2hhciAqIHMgPSBOVUxMOwotICAgIGV4dGVybiBzdHJ1Y3Qg a2V5dGFiIGRpc3B0YltdOwotI2lmZGVmIFpGTlFGUAotICAgIHN0cnVjdCB6Zm5mcCAqIGZucDsK LSNlbmRpZiAvKiBaRk5RRlAgKi8KLQotI2lmbmRlZiBOT1NFVEtFWQotICAgIGlmICh4eCA9PSBY U0tFWSkgeyAgICAgICAgICAgICAgICAgIC8qIFNBVkUgS0VZTUFQLi4gKi8KLSAgICAgICAgeiA9 IGNtb2ZpKCJOYW1lIG9mIEtlcm1pdCBjb21tYW5kIGZpbGUiLCJrZXltYXAua3NjIiwmcyx4eHN0 cmluZyk7Ci0gICAgfSBlbHNlIHsKLSNlbmRpZiAvKiBOT1NFVEtFWSAqLwotICAgICAgICBzd2l0 Y2ggKHh4KSB7Ci0gICAgICAgICAgY2FzZSBYU0NNRDogICAgICAgICAgICAgICAgICAgLyogU0FW RSBDT01NQU5ELi4gKi8KLSAgICAgICAgICAgIGlmICgoeSA9IGNta2V5KGNtZHRybW9wdCwgbmNt ZHRybW9wdCwgIldoYXQgdG8gc2F2ZSIsCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAic2Nyb2xsYmFjayIsCi0jZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg Imhpc3RvcnkiLAotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAg eHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgIHJldHVybih5KTsKLSAgICAgICAgICAgIGJy ZWFrOwotI2lmZGVmIE9TMgotI2lmbmRlZiBOT0xPQ0FMCi0gICAgICAgICAgY2FzZSBYU1RFUk06 ICAgICAgICAgICAgICAgICAgLyogU0FWRSBURVJNSU5BTC4uICovCi0gICAgICAgICAgICBpZiAo KHkgPSBjbWtleSh0cm10cm1vcHQsMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJXaGF0 IHRvIHNhdmUiLCJzY3JvbGxiYWNrIix4eHN0cmluZykpIDwgMCkKLSAgICAgICAgICAgICAgcmV0 dXJuKHkpOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2VuZGlm IC8qIE9TMiAqLwotICAgICAgICB9Ci0gICAgICAgIHogPSBjbW9maSgiRmlsZW5hbWUiLAotICAg ICAgICAgICAgICAgICAgKCh5ID09IFNWX1NDUkwpID8gInNjcm9sbGJrLnR4dCIgOiAiaGlzdG9y eS50eHQiKSwKLSAgICAgICAgICAgICAgICAgICZzLAotICAgICAgICAgICAgICAgICAgeHhzdHJp bmcKLSAgICAgICAgICAgICAgICAgICk7Ci0jaWZuZGVmIE5PU0VUS0VZCi0gICAgfQotI2VuZGlm IC8qIE5PU0VUS0VZICovCi0gICAgaWYgKHogPCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAg LyogQ2hlY2sgb3V0cHV0LWZpbGUgcGFyc2UgcmVzdWx0cyAqLwotICAgICAgcmV0dXJuKHopOwot ICAgIGlmICh6ID09IDIpIHsKLSAgICAgICAgcHJpbnRmKCI/U29ycnksICVzIGlzIGEgZGlyZWN0 b3J5IG5hbWVcbiIscyk7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfQotI2lmZGVmIFpGTlFG UAotICAgIGlmICgoZm5wID0gemZucWZwKHMsVE1QQlVGU0laIC0gMSx0bXBidWYpKSkgey8qIENv bnZlcnQgdG8gZnVsbCBwYXRobmFtZSAqLwotICAgICAgICBpZiAoZm5wLT5mcGF0aCkKLSAgICAg ICAgICBpZiAoKGludCkgc3RybGVuKGZucC0+ZnBhdGgpID4gMCkKLSAgICAgICAgICAgIHMgPSBm bnAtPmZwYXRoOwotICAgIH0KLSNlbmRpZiAvKiBaRk5RRlAgKi8KLQotICAgIGNrc3RybmNweShs aW5lLHMsTElOQlVGU0laKTsgICAgICAgIC8qIE1ha2Ugc2FmZSBjb3B5IG9mIHBhdGhuYW1lICov Ci0gICAgcyA9IGxpbmU7Ci0jaWZkZWYgTUFDCi0gICAgeiA9IDA7Ci0jZWxzZQotICAgIC8qIEdl dCBORVcvQVBQRU5EIGRpc3Bvc2l0aW9uICovCi0gICAgaWYgKCh6ID0gY21rZXkoZGlzcHRiLDIs IkRpc3Bvc2l0aW9uIiwibmV3Iix4eHN0cmluZykpIDwgMCkKLSAgICAgIHJldHVybih6KTsKLSNl bmRpZiAvKiBNQUMgKi8KLSAgICBkaXNwID0gejsKLSAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDAp ICAgICAgICAgICAgICAvKiBHZXQgY29uZmlybWF0aW9uICovCi0gICAgICByZXR1cm4oeCk7Ci0K LSAgICBzd2l0Y2ggKHh4KSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBEbyBhY3Rpb24uLiAq LwotI2lmbmRlZiBOT1NFVEtFWQotICAgICAgY2FzZSBYU0tFWTogICAgICAgICAgICAgICAgICAg ICAgIC8qIFNBVkUgS0VZTUFQICovCi0gICAgICAgIHJldHVybiAoc2F2a2V5cyhzLGRpc3ApKTsK LSNlbmRpZiAvKiBOT1NFVEtFWSAqLwotCi0gICAgICBjYXNlIFhTQ01EOiAgICAgICAgICAgICAg ICAgICAgICAgLyogU0FWRSBDT01NQU5ELi4gKi8KLSNpZmRlZiBPUzIKLSNpZm5kZWYgTk9MT0NB TAotICAgICAgICBpZiAoeSA9PSBTVl9TQ1JMKSAgICAgICAgICAgICAgIC8qIC4uIFNDUk9MTEJB Q0sgKi8KLSAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNhdnNjcmJrKFZDTUQscyxkaXNwKSk7 Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2lmbmRlZiBOT1JFQ0FM TAotICAgICAgICBpZiAoeSA9PSBTVl9ISVNUKSAgICAgICAgICAgICAgIC8qIC4uIEhJU1RPUlkg Ki8KLSAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNhdmhpc3RvcnkocyxkaXNwKSk7Ci0jZW5k aWYgLyogTk9SRUNBTEwgKi8KLSAgICAgICAgYnJlYWs7Ci0KLSNpZmRlZiBPUzIKLSNpZm5kZWYg Tk9MT0NBTAotICAgICAgY2FzZSBYU1RFUk06ICAgICAgICAgICAgICAgICAgICAgIC8qIFNBVkUg VEVSTUlOQUwgU0NST0xMQkFDSyAqLwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNhdnNjcmJr KFZURVJNLHMsZGlzcCkpOwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNlbmRpZiAvKiBPUzIgKi8K LSAgICB9Ci0gICAgc3VjY2VzcyA9IDA7Ci0gICAgcmV0dXJuKC0yKTsKLX0KLQotLyoKLSAgUiBF IEEgRCBUIEUgWCBUCi0KLSAgUmVhZCB0ZXh0IHdpdGggYSBjdXN0b20gcHJvbXB0IGludG8gZ2l2 ZW4gYnVmZmVyIHVzaW5nIGNvbW1hbmQgcGFyc2VyIGJ1dAotICB3aXRoIG5vIGVjaG9pbmcgb3Ig ZW50cnkgaW50byByZWNhbGwgYnVmZmVyLgotKi8KLWludAotcmVhZHRleHQocHJtcHQsIGJ1ZmZl ciwgYnVmc2l6KSBjaGFyICogcHJtcHQ7IGNoYXIgKiBidWZmZXI7IGludCBidWZzaXo7IHsKLSNp ZmRlZiBDS19SRUNBTEwKLSAgICBleHRlcm4gaW50IG9uX3JlY2FsbDsgICAgICAgICAgICAgICAv KiBBcm91bmQgUGFzc3dvcmQgcHJvbXB0aW5nICovCi0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0g ICAgaW50IHJjOwotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0gICAgZXh0ZXJuIGludCB2 bW9kZTsKLSAgICBleHRlcm4gaW50IHN0YXJ0ZmxhZ3M7Ci0gICAgaW50IHZtb2RlX3NhdiA9IHZt b2RlOwotCi0gICAgaWYgKCFwcm1wdCkgcHJtcHQgPSAiIjsKLQotICAgIGlmICh3aW45NV9wb3B1 cCAmJiAhKHN0YXJ0ZmxhZ3MgJiA5NikKLSNpZmRlZiBJS1NECi0gICAgICAgICAmJiAhaW5zZXJ2 ZXIKLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAgICApCi0gICAgICByZXR1cm4ocG9wdXBfcmVh ZHRleHQodm1vZGUsTlVMTCxwcm1wdCxidWZmZXIsYnVmc2l6LDApKTsKLQotICAgIGlmICh2bW9k ZSA9PSBWVEVSTSkgewotICAgICAgICB2bW9kZSA9IFZDTUQ7Ci0gICAgICAgIFZzY3JuSXNEaXJ0 eShWVEVSTSk7Ci0gICAgICAgIFZzY3JuSXNEaXJ0eShWQ01EKTsKLSAgICB9Ci0jZW5kaWYgLyog T1MyICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0jaWZkZWYgQ0tfUkVDQUxMCi0gICAgb25f cmVjYWxsID0gMDsKLSNlbmRpZiAvKiBDS19SRUNBTEwgKi8KLSAgICBjbXNhdnAocHNhdmUsUFJP TVBUTCk7ICAgICAgICAgICAgICAvKiBTYXZlIG9sZCBwcm9tcHQgKi8KLSAgICBjbXNldHAocHJt cHQpOyAgICAgICAgICAgICAgICAgICAgICAvKiBNYWtlIG5ldyBwcm9tcHQgKi8KLSAgICBjb25j YigoY2hhcillc2NhcGUpOyAgICAgICAgICAgICAgICAvKiBQdXQgY29uc29sZSBpbiBjYnJlYWsg bW9kZSAqLwotICAgIGNtaW5pKDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBl Y2hvIG1vZGUgKi8KLSAgICBpZiAocGZsYWcpIHByb21wdCh4eHN0cmluZyk7ICAgICAgICAvKiBJ c3N1ZSBwcm9tcHQgaWYgYXQgdG9wIGxldmVsICovCi0gICAgY21yZXMoKTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogUmVzZXQgdGhlIHBhcnNlciAqLwotICAgIGZvciAocmMgPSAtMTsg cmMgPCAwOyApIHsgICAgICAgICAgIC8qIFByb21wdCB0aWxsIHRoZXkgYW5zd2VyICovCi0gICAg ICAgIHJjID0gY210eHQoIiIsIiIsJnMsTlVMTCk7ICAgICAgLyogR2V0IGEgbGl0ZXJhbCBsaW5l IG9mIHRleHQgKi8KLSAgICAgICAgY21yZXMoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBS ZXNldCB0aGUgcGFyc2VyIGFnYWluICovCi0gICAgfQotICAgIGNrc3RybmNweShidWZmZXIscyxi dWZzaXopOwotICAgIGNtc2V0cChwc2F2ZSk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc3Rv cmUgb3JpZ2luYWwgcHJvbXB0ICovCi0KLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIE9TMgotICAg IGlmICh2bW9kZSAhPSB2bW9kZV9zYXYpIHsKLSAgICAgICAgdm1vZGUgPSBWVEVSTTsKLSAgICAg ICAgVnNjcm5Jc0RpcnR5KFZDTUQpOwotICAgICAgICBWc2NybklzRGlydHkoVlRFUk0pOwotICAg IH0KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0gICAgcmV0dXJuKDAp OwotfQotI2VuZGlmIC8qIE5PSUNQICovCi0KLS8qIEEgZ2VuZXJhbCBmdW5jdGlvbiB0byBhbGxv dyBhIFBhc3N3b3JkIG9yIG90aGVyIGluZm9ybWF0aW9uICAqLwotLyogdG8gYmUgcmVhZCBmcm9t IHRoZSBjb21tYW5kIHByb21wdCB3aXRob3V0IGl0IGdvaW5nIGludG8gICAgICovCi0vKiB0aGUg cmVjYWxsIGJ1ZmZlciBvciBiZWluZyBlY2hvJ2QuICAgICAgICAgICAgICAgICAgICAgICAgICAg Ki8KLQotaW50Ci1yZWFkcGFzcyhwcm1wdCwgYnVmZmVyLCBidWZzaXopIGNoYXIgKiBwcm1wdDsg Y2hhciAqIGJ1ZmZlcjsgaW50IGJ1ZnNpejsgewotICAgIGludCB4OwotI2lmZGVmIE5PSUNQCi0g ICAgaWYgKCFwcm1wdCkgcHJtcHQgPSAiIjsKLSAgICBwcmludGYoIiVzIiwgcHJtcHQpOwotI2lm ZGVmIENPTU1FTlQKLSAgICAvKiBTb21lIGxpbmtlcnMgd29uJ3QgYWxsb3cgdGhpcyBiZWNhdXNl IGl0J3MgdW5zYWZlICovCi0gICAgZ2V0cyhidWZmZXIpOwotI2Vsc2UgIC8qIENPTU1FTlQgKi8K LSAgICB7Ci0gICAgICAgIGludCBjLCBpOyBjaGFyICogcDsKLSAgICAgICAgcCA9IGJ1ZmZlcjsK LSAgICAgICAgZm9yIChpID0gMDsgaSA8IGJ1ZnNpei0xOyBpKyspIHsKLSAgICAgICAgICAgIGlm ICgoYyA9IGdldGNoYXIoKSkgPT0gRU9GKQotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgIGlmIChjIDwgU1ApCi0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgYnVmZmVy W2ldID0gYzsKLSAgICAgICAgfQotICAgICAgICBidWZmZXJbaV0gPSBOVUw7Ci0gICAgfQotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLSAgICByZXR1cm4oMSk7Ci0jZWxzZSAgLyogTk9JQ1AgKi8KLSNp ZmRlZiBDS19SRUNBTEwKLSAgICBleHRlcm4gaW50IG9uX3JlY2FsbDsgICAgICAgICAgICAgICAv KiBhcm91bmQgUGFzc3dvcmQgcHJvbXB0aW5nICovCi0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0g ICAgaW50IHJjOwotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0gICAgZXh0ZXJuIGludCB2 bW9kZTsKLSAgICBleHRlcm4gaW50IHN0YXJ0ZmxhZ3M7Ci0gICAgaW50IHZtb2RlX3NhdiA9IHZt b2RlOwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNpZmRlZiBDS1NZ U0xPRwotICAgIGludCBzYXZsb2c7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICBpZiAoIXBy bXB0KSBwcm1wdCA9ICIiOwotI2lmbmRlZiBOT0xPQ0FMCi0gICAgZGVib2sgPSAwOyAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogRG9uJ3QgbG9nICovCi0jaWZkZWYgT1MyCi0gICAgaWYgKHdp bjk1X3BvcHVwICYmICEoc3RhcnRmbGFncyAmIDk2KQotI2lmZGVmIElLU0QKLSAgICAgICAgICYm ICFpbnNlcnZlcgotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgICAgICkgewotICAgICAgICB4ID0g cG9wdXBfcmVhZHBhc3Modm1vZGUsTlVMTCxwcm1wdCxidWZmZXIsYnVmc2l6LDApOwotICAgICAg ICBkZWJvayA9IDE7Ci0gICAgICAgIHJldHVybih4KTsKLSAgICB9Ci0jZW5kaWYgLyogT1MyICov Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0jaWZkZWYgQ0tTWVNMT0cKLSAgICBzYXZsb2cgPSBj a3hzeXNsb2c7ICAgICAgICAgICAgICAgICAvKiBTYXZlIGFuZCB0dXJuIG9mZiBzeXNsb2dnaW5n ICovCi0gICAgY2t4c3lzbG9nID0gMDsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotI2lmbmRlZiBO T0xPQ0FMCi0jaWZkZWYgT1MyCi0gICAgaWYgKHZtb2RlID09IFZURVJNKSB7Ci0gICAgICAgIHZt b2RlID0gVkNNRDsKLSAgICAgICAgVnNjcm5Jc0RpcnR5KFZURVJNKTsKLSAgICAgICAgVnNjcm5J c0RpcnR5KFZDTUQpOwotICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT0xPQ0FM ICovCi0jaWZkZWYgQ0tfUkVDQUxMCi0gICAgb25fcmVjYWxsID0gMDsKLSNlbmRpZiAvKiBDS19S RUNBTEwgKi8KLSAgICBjbXNhdnAocHNhdmUsUFJPTVBUTCk7ICAgICAgICAgICAgICAvKiBTYXZl IG9sZCBwcm9tcHQgKi8KLSAgICBjbXNldHAocHJtcHQpOyAgICAgICAgICAgICAgICAgICAgICAv KiBNYWtlIG5ldyBwcm9tcHQgKi8KLSAgICBjb25jYigoY2hhcillc2NhcGUpOyAgICAgICAgICAg ICAgICAvKiBQdXQgY29uc29sZSBpbiBjYnJlYWsgbW9kZSAqLwotICAgIGNtaW5pKDApOyAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBuby1lY2hvIG1vZGUgKi8KLSAgICBpZiAocGZs YWcpIHByb21wdCh4eHN0cmluZyk7ICAgICAgICAvKiBJc3N1ZSBwcm9tcHQgaWYgYXQgdG9wIGxl dmVsICovCi0gICAgY21yZXMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQg dGhlIHBhcnNlciAqLwotICAgIGZvciAocmMgPSAtMTsgcmMgPCAwOyApIHsgICAgICAgICAgIC8q IFByb21wdCB0aWxsIHRoZXkgYW5zd2VyICovCi0gICAgICAgIHJjID0gY210eHQoIiIsIiIsJnMs TlVMTCk7ICAgICAgLyogR2V0IGEgbGl0ZXJhbCBsaW5lIG9mIHRleHQgKi8KLSAgICAgICAgY21y ZXMoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCB0aGUgcGFyc2VyIGFnYWluICov Ci0gICAgfQotICAgIGNrc3RybmNweShidWZmZXIscyxidWZzaXopOwotICAgIHByaW50ZigiXHJc biIpOyAgICAgICAgICAgICAgICAgICAgIC8qIEVjaG8gYSBDUkxGICovCi0gICAgY21zZXRwKHBz YXZlKTsgICAgICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSBvcmlnaW5hbCBwcm9tcHQgKi8K LSAgICBjbWluaSgxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIGVjaG8g bW9kZSAqLwotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0gICAgaWYgKHZtb2RlICE9IHZt b2RlX3NhdikgewotICAgICAgICB2bW9kZSA9IFZURVJNOwotICAgICAgICBWc2NybklzRGlydHko VkNNRCk7Ci0gICAgICAgIFZzY3JuSXNEaXJ0eShWVEVSTSk7Ci0gICAgfQotI2VuZGlmIC8qIE9T MiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNpZmRlZiBDS1NZU0xPRwotICAgIGNreHN5c2xv ZyA9IHNhdmxvZzsgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgc3lzbG9nZ2luZyAqLwotI2Vu ZGlmIC8qIENLU1lTTE9HICovCi0gICAgZGVib2sgPSAxOwotICAgIHJldHVybigwKTsKLSNlbmRp ZiAvKiBOT0lDUCAqLwotfQotCi0jaWZuZGVmIE5PSUNQCi1zdHJ1Y3Qga2V5dGFiIGF1dGh0YWJb XSA9IHsgICAgICAgICAgICAgLyogQXZhaWxhYmxlIGF1dGhlbnRpY2F0aW9uIHR5cGVzICovCi0j aWZkZWYgQ0tfS0VSQkVST1MKLSAgICB7ICJrNCIsICAgICAgICBBVVRIX0tSQjQsIENNX0lOViB9 LAotICAgIHsgIms1IiwgICAgICAgIEFVVEhfS1JCNSwgQ01fSU5WIH0sCi0gICAgeyAia2VyYmVy b3M0IiwgQVVUSF9LUkI0LCAwICAgICAgfSwKLSAgICB7ICJrZXJiZXJvczUiLCBBVVRIX0tSQjUs IDAgICAgICB9LAotICAgIHsgImtyYjQiLCAgICAgIEFVVEhfS1JCNCwgQ01fSU5WIH0sCi0gICAg eyAia3JiNSIsICAgICAgQVVUSF9LUkI1LCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBDS19LRVJCRVJP UyAqLwotI2lmZGVmIE5UCi0gICAgeyAibnRsbSIsICAgICAgQVVUSF9OVExNLCAwIH0sCi0jZW5k aWYgLyogTlQgKi8KLSNpZmRlZiBDS19TUlAKLSAgICB7ICJzcnAiLCAgICAgICBBVVRIX1NSUCwg IDAgfSwKLSNlbmRpZiAvKiBDS19TUlAgKi8KLSNpZmRlZiBDS19TU0wKLSAgICB7ICJzc2wiLCAg ICAgICBBVVRIX1NTTCwgIDAgfSwKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICB7ICIiLCAgICAg ICAgICAwLCAgICAgICAgIDAgfQotfTsKLWludCBhdXRodGFibiA9IHNpemVvZihhdXRodGFiKS9z aXplb2Yoc3RydWN0IGtleXRhYiktMTsKLQotI2lmZGVmIENLX0tFUkJFUk9TCi1zdHJ1Y3Qga2V5 dGFiIGtlcmJ0YWJbXSA9IHsgICAgICAgICAgICAgLyogS2VyYmVyb3MgYXV0aGVudGljYXRpb24g dHlwZXMgKi8KLSAgICB7ICJrNCIsICAgICAgICBBVVRIX0tSQjQsIENNX0lOViB9LAotICAgIHsg Ims1IiwgICAgICAgIEFVVEhfS1JCNSwgQ01fSU5WIH0sCi0gICAgeyAia2VyYmVyb3M0IiwgQVVU SF9LUkI0LCAwICAgICAgfSwKLSAgICB7ICJrZXJiZXJvczUiLCBBVVRIX0tSQjUsIDAgICAgICB9 LAotICAgIHsgImtyYjQiLCAgICAgIEFVVEhfS1JCNCwgQ01fSU5WIH0sCi0gICAgeyAia3JiNSIs ICAgICAgQVVUSF9LUkI1LCBDTV9JTlYgfQotfTsKLWludCBrZXJidGFibiA9IHNpemVvZihrZXJi dGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGtyYl9z X3RibFtdID0geyAgICAvKiBBVVRIRU5USUNBVEUgY29tbWFuZCBzd2l0Y2hlczogKi8KLSAgICB7 ICIvY2FjaGUiLCAgIEtSQl9TX0NBLCBDTV9BUkcgfQotfTsKLXN0YXRpYyBpbnQga3JiX3NfbiA9 IHNpemVvZihrcmJfc190YmwpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKTsKLQotc3RhdGljIHN0cnVj dCBrZXl0YWIga3JiX3ZfdGJsW10gPSB7ICAgIC8qIEtFUkJFUk9TIHZlcnNpb24gdmFsdWVzOiAq LwotICAgIHsgIjQiLCAgICA0LCAwIH0sCi0gICAgeyAiNSIsICAgIDUsIDAgfSwgICAgICAgICAg ICAgICAgICAgLyogKGFkZCBvdGhlcnMgYXMgbmVlZGVkLi4uKSAqLwotICAgIHsgImF1dG8iLCAw LCAwIH0gICAgICAgICAgICAgICAgICAgIC8qIE5vdGU6IDAgPSBhdXRvICovCi19Owotc3RhdGlj IGludCBrcmJfdl9uID0gc2l6ZW9mKGtyYl92X3RibCkvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOwot Ci1zdGF0aWMgc3RydWN0IGtleXRhYiBrcmJfYV90YmxbXSA9IHsgICAgLyogS0VSQkVST1MgYWN0 aW9uczogKi8KLSAgICB7ICJkZXN0cm95IiwgICAgICAgICAgIEtSQl9BX0RFLCAwIH0sCi0gICAg eyAiaW5pdGlhbGl6ZSIsICAgICAgICBLUkJfQV9JTiwgMCB9LAotICAgIHsgImxpc3QtY3JlZGVu dGlhbHMiLCAgS1JCX0FfTEMsIDAgfQotfTsKLXN0YXRpYyBpbnQga3JiX2FfbiA9IHNpemVvZihr cmJfYV90YmwpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKTsKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIg a3JiNF9pX3RibFtdID0geyAgIC8qIEtFUkJFUk9TIDQgSU5JVElBTElaRSBzd2l0Y2hlczogKi8K LSAgICB7ICIvYnJpZWYiLCAgICAgICAgICAgIEtSQl9JX0JSLCAwIH0sICAgICAgLyogL0JSSUVG ICAgICAgICovCi0gICAgeyAiL2luc3RhbmNlIiwgICAgICAgICBLUkJfSV9JTiwgQ01fQVJHIH0s IC8qIC9JTlNUQU5DRTogICAqLwotICAgIHsgIi9saWZldGltZSIsICAgICAgICAgS1JCX0lfTEYs IENNX0FSRyB9LCAvKiAvTElGRVRJTUU6ICAgKi8KLSAgICB7ICIvbm90LXByZWF1dGgiLCAgICAg IEtSQl9JX05QQSwgMCB9LCAgICAgLyogL05PVC1QUkVBVVRIICovCi0gICAgeyAiL3Bhc3N3b3Jk IiwgICAgICAgICBLUkJfSV9QVywgQ01fQVJHIH0sIC8qIC9QQVNTV09SRDogICAqLwotI2lmZGVm IE9TMgotICAgIHsgIi9wb3B1cCIsICAgICAgICAgICAgS1JCX0lfUE9QLCAwIH0sICAgICAvKiAv UE9QVVAgICAgICAgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB7ICIvcHJlYXV0aCIsICAgICAg ICAgIEtSQl9JX1BBLCAwIH0sICAgICAgLyogL1BSRUFVVEggICAgICovCi0gICAgeyAiL3JlYWxt IiwgICAgICAgICAgICBLUkJfSV9STCwgQ01fQVJHIH0sIC8qIC9SRUFMTTogICAgICAqLwotICAg IHsgIi92ZXJib3NlIiwgICAgICAgICAgS1JCX0lfVkIsIDAgfSwgICAgICAvKiAvVkVSQk9TRSAg ICAgKi8KLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IGtyYjRfaV9uID0gc2l6ZW9m KGtyYjRfaV90YmwpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKSAtIDE7Ci0KLXN0YXRpYyBzdHJ1Y3Qg a2V5dGFiIGtyYjVfaV90YmxbXSA9IHsgICAvKiBLRVJCRVJPUyA1IElOSVRJQUxJWkUgc3dpdGNo ZXM6ICovCi0gICAgeyAiL2FkZHJlc3NlcyIsICAgICAgICBLUkJfSV9BRFIsIENNX0FSRyB9LAot ICAgIHsgIi9mb3J3YXJkYWJsZSIsICAgICAgS1JCX0lfRlcsICAwIH0sICAgICAgICAgLyogL0ZP UldBUkRBQkxFICovCi0gICAgeyAiL2luc3RhbmNlIiwgICAgICAgICBLUkJfSV9JTiwgQ01fQVJH IH0sIC8qIC9JTlNUQU5DRTogICAqLwotICAgIHsgIi9rNCIsICAgICAgICAgICAgICAgS1JCX0lf SzQsICBDTV9JTlYgfSwgLyogL0tFUkJFUk9TNCAgICovCi0gICAgeyAiL2tlcmJlcm9zNCIsICAg ICAgICBLUkJfSV9LNCwgIDAgfSwgICAgICAvKiAvS0VSQkVST1M0ICAgKi8KLSAgICB7ICIva3Ji NCIsICAgICAgICAgICAgIEtSQl9JX0s0LCAgQ01fSU5WIH0sIC8qIC9LRVJCRVJPUzQgICAqLwot ICAgIHsgIi9saWZldGltZSIsICAgICAgICAgS1JCX0lfTEYsICBDTV9BUkcgfSwgLyogL0xJRkVU SU1FOiAgICovCi0gICAgeyAiL25vLWFkZHJlc3NlcyIsICAgICBLUkJfSV9OQUQsIDAgfSwgICAg ICAvKiAvTk8tQUREUkVTU0VTICovCi0gICAgeyAiL25vLWs0IiwgICAgICAgICAgICBLUkJfSV9O SzQsIENNX0lOViB9LC8qIC9OTy1LRVJCRVJPUzQgKi8KLSAgICB7ICIvbm8ta2VyYmVyb3M0Iiwg ICAgIEtSQl9JX05LNCwgMCB9LCAgICAgLyogL05PLUtFUkJFUk9TNCAqLwotICAgIHsgIi9uby1r cmI0IiwgICAgICAgICAgS1JCX0lfTks0LCBDTV9JTlYgfSwvKiAvTk8tS0VSQkVST1M0ICovCi0g ICAgeyAiL25vdC1mb3J3YXJkYWJsZSIsICBLUkJfSV9ORlcsIDAgfSwgICAgICAgICAvKiAvTk9U LUZPUldBUkRBQkxFICovCi0gICAgeyAiL25vdC1wcm94aWFibGUiLCAgICBLUkJfSV9OUFIsIDAg fSwgICAgIC8qIC9OT1QtUFJPWElBQkxFICAgKi8KLSAgICB7ICIvcGFzc3dvcmQiLCAgICAgICAg IEtSQl9JX1BXLCAgQ01fQVJHIH0sIC8qIC9QQVNTV09SRDogICAqLwotI2lmZGVmIE9TMgotICAg IHsgIi9wb3B1cCIsICAgICAgICAgICAgS1JCX0lfUE9QLCAwIH0sICAgICAvKiAvUE9QVVAgICAg ICAgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB7ICIvcG9zdGRhdGUiLCAgICAgICAgIEtSQl9J X1BELCBDTV9BUkcgfSwgLyogL1BPU1REQVRFOiAgICovCi0gICAgeyAiL3ByIiwgICAgICAgICAg ICAgICBLUkJfSV9QUiwgQ01fSU5WfENNX0FCUiB9LCAvKiB0byBhbGxvdyBmb3IgKi8KLSAgICB7 ICIvcHJvIiwgICAgICAgICAgICAgIEtSQl9JX1BSLCBDTV9JTlZ8Q01fQUJSIH0sIC8qIGRpZmZl cmVudCBzcGVsbGluZ3MgKi8KLSAgICB7ICIvcHJveCIsICAgICAgICAgICAgIEtSQl9JX1BSLCBD TV9JTlZ8Q01fQUJSIH0sCi0gICAgeyAiL3Byb3hpYWJsZSIsICAgICAgICBLUkJfSV9QUiwgMCB9 LCAgICAgIC8qIC9QUk9YSUFCTEUgICAqLwotICAgIHsgIi9wcm94eWFibGUiLCAgICAgICAgS1JC X0lfUFIsIENNX0lOViB9LCAvKiAvUFJPWFlBQkxFICAgKi8KLSAgICB7ICIvcmVhbG0iLCAgICAg ICAgICAgIEtSQl9JX1JMLCBDTV9BUkcgfSwgLyogL1JFQUxNOiAgICAgICovCi0gICAgeyAiL3Jl bmV3IiwgICAgICAgICAgICBLUkJfSV9STiwgMCB9LCAgICAgICAgICAvKiAvUkVORVcgICAgICAg Ki8KLSAgICB7ICIvcmVuZXdhYmxlIiwgICAgICAgIEtSQl9JX1JCLCBDTV9BUkcgfSwgLyogL1JF TkVXQUJMRTogICovCi0gICAgeyAiL3NlcnZpY2UiLCAgICAgICAgICBLUkJfSV9TUiwgQ01fQVJH IH0sIC8qIC9TRVJWSUNFOiAgICAqLwotICAgIHsgIi92YWxpZGF0ZSIsICAgICAgICAgS1JCX0lf VkEsIDAgfSwgICAgICAgICAgLyogL1ZBTElEQVRFICAgICovCi0gICAgeyAiIiwgMCwgMCB9Ci19 Owotc3RhdGljIGludCBrcmI1X2lfbiA9IHNpemVvZihrcmI1X2lfdGJsKS9zaXplb2Yoc3RydWN0 IGtleXRhYikgLSAxOwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBrbGN0YWJbXSA9IHsgICAgICAg LyogTGlzdCBDcmVkZW50aWFscyBzd2l0Y2hlcyovCi0gICAgeyAiL2FkZHJlc3NlcyIsICBYWUtM Q0FELCAwIH0sCi0gICAgeyAiL2VuY3J5cHRpb24iLCBYWUtMQ0VOLCAwIH0sCi0gICAgeyAiL2Zs YWdzIiwgICAgICBYWUtMQ0ZMLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5rbGN0YWIgPSBzaXplb2Yo a2xjdGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7Ci0KLWV4dGVybiBpbnQga3JiX2FjdGlvbjsK LWV4dGVybiBzdHJ1Y3Qga3JiX29wX2RhdGEga3JiX29wOwotCi1leHRlcm4gc3RydWN0IGtyYjVf bGlzdF9jcmVkX2RhdGEga3JiNV9sYzsKLWV4dGVybiBzdHJ1Y3Qga3JiNV9pbml0X2RhdGEga3Ji NV9pbml0OwotZXh0ZXJuIGNoYXIgKiBrcmI1X2RfcHJpbmNpcGFsOyAgICAgICAgIC8qIERlZmF1 bHQgcHJpbmNpcGFsICovCi1leHRlcm4gY2hhciAqIGtyYjVfZF9pbnN0YW5jZTsKLWV4dGVybiBj aGFyICoga3JiNV9kX3JlYWxtOyAgICAgICAgICAgICAvKiBEZWZhdWx0IHJlYWxtICovCi1leHRl cm4gY2hhciAqIGtyYjVfZF9jYzsgICAgICAgICAgICAgICAgLyogRGVmYXVsdCBjcmVkZW50aWFs cyBjYWNoZSAqLwotZXh0ZXJuIGNoYXIgKiBrcmI1X2Rfc3J2OyAgICAgICAgICAgICAgIC8qIERl ZmF1bHQgc2VydmljZSBuYW1lICovCi1leHRlcm4gaW50ICAgIGtyYjVfZF9saWZldGltZTsgICAg ICAgICAgLyogRGVmYXVsdCBsaWZldGltZSAqLwotZXh0ZXJuIGludCAgICBrcmI1X2RfZm9yd2Fy ZGFibGU7Ci1leHRlcm4gaW50ICAgIGtyYjVfZF9wcm94aWFibGU7Ci1leHRlcm4gaW50ICAgIGty YjVfZF9yZW5ld2FibGU7Ci1leHRlcm4gaW50ICAgIGtyYjVfYXV0b2dldDsKLWV4dGVybiBpbnQg ICAga3JiNV9hdXRvZGVsOwotZXh0ZXJuIGludCAgICBrcmI1X2RfZ2V0azQ7Ci1leHRlcm4gaW50 ICAgIGtyYjVfZF9ub19hZGRyZXNzZXM7Ci1leHRlcm4gaW50ICAgIGtyYjVfY2hlY2thZGRyczsK LWV4dGVybiBjaGFyICoga3JiNV9kX2FkZHJzW107Ci1leHRlcm4gY2hhciAqIGs1X2tleXRhYjsg ICAgICAgICAgICAgICAgLyogS2V5dGFiIGZpbGUgKi8KLQotZXh0ZXJuIHN0cnVjdCBrcmI0X2lu aXRfZGF0YSBrcmI0X2luaXQ7Ci1leHRlcm4gY2hhciAqIGtyYjRfZF9wcmluY2lwYWw7ICAgICAg ICAgLyogRGVmYXVsdCBwcmluY2lwYWwgKi8KLWV4dGVybiBjaGFyICoga3JiNF9kX3JlYWxtOyAg ICAgICAgICAgICAvKiBEZWZhdWx0IHJlYWxtICovCi1leHRlcm4gY2hhciAqIGtyYjRfZF9zcnY7 ICAgICAgICAgICAgICAgLyogRGVmYXVsdCBzZXJ2aWNlIG5hbWUgKi8KLWV4dGVybiBpbnQgICAg a3JiNF9kX2xpZmV0aW1lOyAgICAgICAgICAvKiBEZWZhdWx0IGxpZmV0aW1lICovCi1leHRlcm4g aW50ICAgIGtyYjRfZF9wcmVhdXRoOwotZXh0ZXJuIGNoYXIgKiBrcmI0X2RfaW5zdGFuY2U7Ci1l eHRlcm4gaW50ICAgIGtyYjRfYXV0b2dldDsKLWV4dGVybiBpbnQgICAga3JiNF9hdXRvZGVsOwot ZXh0ZXJuIGludCAgICBrcmI0X2NoZWNrYWRkcnM7Ci1leHRlcm4gY2hhciAqIGs0X2tleXRhYjsg ICAgICAgICAgICAgICAgLyogS2V5dGFiIGZpbGUgKi8KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAq LwotCi0jaWZuZGVmIE5PU0hPVwotaW50Ci1zaG9faWtzKCkgewotI2lmZGVmIElLU0RDT05GCi0j aWZkZWYgQ0tfTE9HSU4KLSAgICBleHRlcm4gaW50IGNreHN5c2xvZywgY2t4d3RtcCwgY2t4YW5v bjsKLSNpZmRlZiBVTklYCi0gICAgZXh0ZXJuIGludCBja3hwcml2OwotI2VuZGlmIC8qIFVOSVgg Ki8KLSNpZmRlZiBDS19QRVJNUwotICAgIGV4dGVybiBpbnQgY2t4cGVybXM7Ci0jZW5kaWYgLyog Q0tfUEVSTVMgKi8KLSAgICBleHRlcm4gY2hhciAqIGFub25maWxlLCAqIHVzZXJmaWxlLCAqIGFu b25yb290OwotI2lmZGVmIE9TMgotICAgIGV4dGVybiBjaGFyICogYW5vbmFjY3Q7Ci0jZW5kaWYg LyogT1MyICovCi0jaWZkZWYgTlQKLSAgICBleHRlcm4gY2hhciAqIGlrc19kb21haW47Ci0jZW5k aWYgLyogTlQgKi8KLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotI2lmZGVmIENLV1RNUAotICAgIGV4 dGVybiBjaGFyICogd3RtcGZpbGU7Ci0jZW5kaWYgLyogQ0tXVE1QICovCi0jaWZkZWYgSUtTREIK LSAgICBleHRlcm4gY2hhciAqIGRiZmlsZTsKLSAgICBleHRlcm4gaW50IGRiZW5hYmxlZDsKLSNl bmRpZiAvKiBJS1NEQiAqLwotI2lmZGVmIENLX0xPR0lOCi0gICAgZXh0ZXJuIGludCBsb2dpbnRp bW87Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSAgICBleHRlcm4gaW50IHNydmNkbXNnLCBzdWNj ZXNzLCBpa3NkY2YsIG5vaW5pdCwgYXJnX3g7Ci0gICAgZXh0ZXJuIGNoYXIgKiBjZG1zZ2ZpbGVb XSwgKiBjZG1zZ3N0ciwgKmtlcm1yYzsKLSAgICBjaGFyICogYmFubmVyZmlsZSA9IE5VTEw7Ci0g ICAgY2hhciAqIGhlbHBmaWxlID0gTlVMTDsKLSAgICBleHRlcm4gaW50IHhmZXJsb2c7Ci0gICAg ZXh0ZXJuIGNoYXIgKiB4ZmVyZmlsZTsKLSAgICBpbnQgaTsKLQotICAgIGlmIChpc2d1ZXN0KSB7 Ci0gICAgICAgIHByaW50ZigiP0NvbW1hbmQgZGlzYWJsZWRcclxuIik7Ci0gICAgICAgIHJldHVy bihzdWNjZXNzID0gMCk7Ci0gICAgfQotCi0gICAgcHJpbnRmKCJJS1MgU2V0dGluZ3NcclxuIik7 Ci0jaWZkZWYgQ0tfTE9HSU4KLSNpZmRlZiBPUzIKLSAgICBwcmludGYoIiAgQW5vbnltb3VzIEFj Y291bnQ6ICAgJXNcclxuIixhbm9uYWNjdD9hbm9uYWNjdDoiPG5vbmU+Iik7Ci0jZW5kaWYgLyog T1MyICovCi0gICAgcHJpbnRmKCIgIEFub255bW91cyBJbml0ZmlsZTogICVzXHJcbiIsYW5vbmZp bGU/YW5vbmZpbGU6Ijxub25lPiIpOwotICAgIHByaW50ZigiICBBbm9ueW1vdXMgTG9naW46ICAg ICAlZFxyXG4iLGNreGFub24pOwotICAgIHByaW50ZigiICBBbm9ueW1vdXMgUm9vdDogICAgICAl c1xyXG4iLGFub25yb290P2Fub25yb290OiI8bm9uZT4iKTsKLSNlbmRpZiAvKiBDS19MT0dJTiAq LwotICAgIHByaW50ZigiICBCYW5uZXJmaWxlOiAgICAgICAgICAlc1xyXG4iLGJhbm5lcmZpbGU/ YmFubmVyZmlsZToiPG5vbmU+Iik7Ci0gICAgcHJpbnRmKCIgIENEZmlsZTogICAgICAgICAgICAg ICVzXHJcbiIsY2Rtc2dmaWxlWzBdP2NkbXNnZmlsZVswXToiPG5vbmU+Iik7Ci0gICAgZm9yICgg aT0xO2k8MTYgJiYgY2Rtc2dmaWxlW2ldO2krKyApCi0gICAgICAgIHByaW50ZigiICBDRGZpbGU6 ICAgICAgICAgICAgICAlc1xyXG4iLGNkbXNnZmlsZVtpXSk7Ci0gICAgcHJpbnRmKCIgIENETWVz c2FnZTogICAgICAgICAgICVkXHJcbiIsc3J2Y2Rtc2cpOwotI2lmZGVmIElLU0RCCi0gICAgcHJp bnRmKCIgIERCZmlsZTogICAgICAgICAgICAgICVzXHJcbiIsZGJmaWxlP2RiZmlsZToiPG5vbmU+ Iik7Ci0gICAgcHJpbnRmKCIgIERCZW5hYmxlZDogICAgICAgICAgICVkXHJcbiIsZGJlbmFibGVk KTsKLSNlbmRpZiAvKiBJS1NEQiAqLwotI2lmZGVmIENLX0xPR0lOCi0jaWZkZWYgTlQKLSAgICBw cmludGYoIiAgRGVmYXVsdC1kb21haW46ICAgICAgJXNcclxuIixpa3NfZG9tYWluP2lrc19kb21h aW46Ii4iKTsKLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIENLX0xPR0lOICovCi0gICAgcHJp bnRmKCIgIEhlbHBmaWxlOiAgICAgICAgICAgICVzXHJcbiIsaGVscGZpbGU/aGVscGZpbGU6Ijxu b25lPiIpOwotICAgIHByaW50ZigiICBJbml0ZmlsZTogICAgICAgICAgICAlc1xyXG4iLGtlcm1y Yz9rZXJtcmM6Ijxub25lPiIpOwotICAgIHByaW50ZigiICBOby1Jbml0ZmlsZTogICAgICAgICAl ZFxyXG4iLG5vaW5pdCk7Ci0jaWZkZWYgQ0tfTE9HSU4KLSNpZmRlZiBDS19QRVJNCi0gICAgcHJp bnRmKCIgIFBlcm1pc3Npb24gY29kZTogICAgICUwZFxyXG4iLGNreHBlcm1zKTsKLSNlbmRpZiAv KiBDS19QRVJNICovCi0jaWZkZWYgVU5JWAotICAgIHByaW50ZigiICBQcml2aWxlZ2VkIExvZ2lu OiAgICAlZFxyXG4iLGNreHByaXYpOwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBDS19M T0dJTiAqLwotICAgIHByaW50ZigiICBTZXJ2ZXItb25seTogICAgICAgICAlZFxyXG4iLGFyZ194 KTsKLSAgICBwcmludGYoIiAgU3lzbG9nOiAgICAgICAgICAgICAgJWRcclxuIixja3hzeXNsb2cp OwotICAgIHByaW50ZigiICBUaW1lb3V0IChzZWNvbmRzKTogICAlZFxyXG4iLGxvZ2ludGltbyk7 Ci0gICAgcHJpbnRmKCIgIFVzZXJmaWxlOiAgICAgICAgICAgICVzXHJcbiIsdXNlcmZpbGU/dXNl cmZpbGU6Ijxub25lPiIpOwotI2lmZGVmIENLX0xPR0lOCi0jaWZkZWYgQ0tXVE1QCi0gICAgcHJp bnRmKCIgIFd0bXBsb2c6ICAgICAgICAgICAgICVkXHJcbiIsY2t4d3RtcCk7Ci0gICAgcHJpbnRm KCIgIFd0bXBmaWxlOiAgICAgICAgICAgICVzXHJcbiIsd3RtcGZpbGU/d3RtcGZpbGU6Ijxub25l PiIpOwotI2VuZGlmIC8qIENLV1RNUCAqLwotI2VuZGlmIC8qIENLX0xPR0lOICovCi0gICAgcHJp bnRmKCIgIFhmZXJmaWxlOiAgICAgICAgICAgICVzXHJcbiIseGZlcmZpbGU/eGZlcmZpbGU6Ijxu b25lPiIpOwotICAgIHByaW50ZigiICBYZmVybG9nOiAgICAgICAgICAgICAlZFxyXG4iLHhmZXJs b2cpOwotI2Vsc2UgLyogSUtTRENPTkYgKi8KLSAgICBwcmludGYoIj9Ob3RoaW5nIHRvIHNob3cu XHJcbiIpOwotI2VuZGlmIC8qIElLU0RDT05GICovCi0gICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsK LX0KLQotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi1pbnQKLXNob19hdXRoKGN4KSBpbnQgY3g7 IHsKLSAgICBleHRlcm4gaW50IGF1dGhfdHlwZV91c2VyW10sIGNtZF9yb3dzOwotICAgIGludCBp OwotICAgIGNoYXIgKiBwOwotICAgIGludCBrdiA9IDAsIGFsbCA9IDAsIG4gPSAwOwotCi0jaWZk ZWYgSUtTRAotICAgIGlmIChpbnNlcnZlciAmJiBpc2d1ZXN0KSB7Ci0gICAgICAgIHByaW50Zigi P1NvcnJ5LCBjb21tYW5kIGRpc2FibGVkLlxyXG4iKTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3Mg PSAwKTsKLSAgICB9Ci0jZW5kaWYgLyogSUtTRCAqLwotICAgIGlmIChjeCkgewotICAgICAgICBr diA9IGN4OwotICAgIH0gZWxzZSBpZiAoYXV0aF90eXBlX3VzZXJbMF0gIT0gQVVUSFRZUEVfQVVU TykgewotICAgICAgICBrdiA9IGF1dGhfdHlwZV91c2VyWzBdOwotICAgIH0gZWxzZSB7Ci0gICAg ICAgIGFsbCA9IDE7Ci0gICAgICAgIGt2ID0gQVVUSFRZUEVfS0VSQkVST1NfVjQ7Ci0gICAgfQot ICAgIHdoaWxlIChrdikgewotICAgICAgICBzd2l0Y2ggKGt2KSB7Ci0gICAgICAgICAgY2FzZSBB VVRIVFlQRV9LRVJCRVJPU19WNDoKLSAgICAgICAgICAgIGt2ID0gYWxsID8gQVVUSFRZUEVfS0VS QkVST1NfVjUgOiAwOwotICAgICAgICAgICAgaWYgKGNrX2tyYjRfaXNfaW5zdGFsbGVkKCkpIHsK LSAgICAgICAgICAgICAgICBwcmludGYoIiBBdXRoZW50aWNhdGlvbjogICAgICBLZXJiZXJvcyA0 XG4iKTsKLSAgICAgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg ICAgICAgICAgICBwcmludGYoIiBBdXRoZW50aWNhdGlvbjogICAgICBLZXJiZXJvcyA0IChub3Qg aW5zdGFsbGVkKVxuIik7Ci0gICAgICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykg aWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAgICAgICBj b250aW51ZTsKLSAgICAgICAgICAgIH0KLSNpZmRlZiBDS19LRVJCRVJPUwotICAgICAgICAgICAg cHJpbnRmKCIgS2V5dGFiIGZpbGU6ICAgICAgICAgJXNcbiIsCi0gICAgICAgICAgICAgICAgICAg ICAgazRfa2V5dGFiID8gazRfa2V5dGFiIDogIihub25lKSIpOwotICAgICAgICAgICAgaWYgKCsr biA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsK LSAgICAgICAgICAgIGlmIChrcmJfYWN0aW9uIDwgMCkgewotICAgICAgICAgICAgICAgIHAgPSAi KG5vbmUpIjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZm9yIChwID0g IiIsIGkgPSAwOyBpIDwga3JiX2FfbjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChr cmJfYWN0aW9uID09IGtyYl9hX3RibFtpXS5rd3ZhbCkgewotICAgICAgICAgICAgICAgICAgICAg ICAgcCA9IGtyYl9hX3RibFtpXS5rd2Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIHByaW50ZigiIEFjdGlvbjogICAgICAgICAgICAgICVzXG4iLCBwKTsKLSAg ICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4o MCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICBwcmludGYoIiBEZWZhdWx0IGxpZmV0aW1lICAg ICAlZFxuIixrcmI0X2RfbGlmZXRpbWUpOwotICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dz IC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAg IHByaW50ZigiIExpZmV0aW1lOiAgICAgICAgICAgICVkIChtaW51dGVzKVxuIixrcmI0X2luaXQu bGlmZXRpbWUpOwotICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2tt b3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAgIHByaW50ZigiIERlZmF1 bHQgcHJlYXV0aDogICAgICVkXG4iLGtyYjRfZF9wcmVhdXRoKTsKLSAgICAgICAgICAgIGlmICgr K24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7 Ci0gICAgICAgICAgICBwcmludGYoIiBQcmVhdXRoOiAgICAgICAgICAgICAlZFxuIixrcmI0X2lu aXQucHJlYXV0aCk7Ci0gICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFz a21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgcHJpbnRmKCIgRGVm YXVsdCBwcmluY2lwYWw6ICAgXCIlc1wiXG4iLAotICAgICAgICAgICAgICAgICAgICBrcmI0X2Rf cHJpbmNpcGFsID8ga3JiNF9kX3ByaW5jaXBhbCA6ICIiKTsKLSAgICAgICAgICAgIGlmICgrK24g PiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0g ICAgICAgICAgICBwcmludGYoIiBQcmluY2lwYWw6ICAgICAgICAgICBcIiVzXCJcbiIsCi0gICAg ICAgICAgICAgICAgICAgIGtyYjRfaW5pdC5wcmluY2lwYWwgPyBrcmI0X2luaXQucHJpbmNpcGFs IDogIiIpOwotICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAgIHByaW50ZigiIERlZmF1bHQg cmVhbG06ICAgICAgIFwiJXNcIlxuIiwKLSAgICAgICAgICAgICAgICAgICAga3JiNF9kX3JlYWxt ID8ga3JiNF9kX3JlYWxtIDogIiIpOwotICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0g MykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAgIHBy aW50ZigiIFJlYWxtOiAgICAgICAgICAgICAgIFwiJXNcIlxuIiwKLSAgICAgICAgICAgICAgICAg ICAga3JiNF9pbml0LnJlYWxtID8ga3JiNF9pbml0LnJlYWxtIDogIiIpOwotICAgICAgICAgICAg aWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBu ID0gMDsKLSAgICAgICAgICAgIHByaW50ZigiIERlZmF1bHQgaW5zdGFuY2U6ICAgIFwiJXNcIlxu IiwKLSAgICAgICAgICAgICAgICAgICAga3JiNF9kX2luc3RhbmNlID8ga3JiNF9kX2luc3RhbmNl IDogIiIpOwotICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAgIHByaW50ZigiIEluc3RhbmNl OiAgICAgICAgICAgIFwiJXNcIlxuIiwKLSAgICAgICAgICAgICAgICAgICAga3JiNF9pbml0Lmlu c3RhbmNlID8ga3JiNF9pbml0Lmluc3RhbmNlIDogIiIpOwotICAgICAgICAgICAgaWYgKCsrbiA+ IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAg ICAgICAgICAgIHByaW50ZigiIEF1dG8tR2V0IFRHVHM6ICAgICAgICVkXG4iLGtyYjRfYXV0b2dl dCk7Ci0gICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkg cmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgcHJpbnRmKCIgQXV0by1EZXN0cm95 IFRHVHM6ICAgJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgIGtyYjRfYXV0b2RlbD09S1JCX0RF TF9OTz8ibmV2ZXIiOgotICAgICAgICAgICAgICAgICAgICBrcmI0X2F1dG9kZWw9PUtSQl9ERUxf Q0w/Im9uLWNsb3NlIjoib24tZXhpdCIpOwotICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dz IC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAg IHByaW50ZigiIENoZWNrIElQIEFkZHJlc3NlczogICVkXG4iLGtyYjRfY2hlY2thZGRycyk7Ci0g ICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJu KDApOyBlbHNlIG4gPSAwOwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgIHByaW50ZigiIFBh c3N3b3JkOiAgICBcIiVzXCJcbiIsCi0gICAgICAgICAgICAgICAgICAgIGtyYjRfaW5pdC5wYXNz d29yZCAgPyBrcmI0X2luaXQucGFzc3dvcmQgIDogIiIpOwotICAgICAgICAgICAgaWYgKCsrbiA+ IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSNl bmRpZiAvKiBDT01NRU5UICovCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSAgICAgICAgICAg IHByaW50ZigiXG4iKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICgh YXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAg ICAgICAgY2FzZSBBVVRIVFlQRV9LRVJCRVJPU19WNToKLSAgICAgICAgICAgIGt2ID0gYWxsID8g QVVUSFRZUEVfU1NMIDogMDsKLSAgICAgICAgICAgIGlmIChja19rcmI1X2lzX2luc3RhbGxlZCgp KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNrX2dzc2FwaV9pc19pbnN0YWxsZWQoKSkKLSAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCIgQXV0aGVudGljYXRpb246ICAgICAgS2VyYmVyb3MgNSBw bHVzIEdTU0FQSVxuIik7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg ICBwcmludGYoIiBBdXRoZW50aWNhdGlvbjogICAgICBLZXJiZXJvcyA1XG4iKTsKLSAgICAgICAg ICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDAp OyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcmlu dGYoIiBBdXRoZW50aWNhdGlvbjogICAgICBLZXJiZXJvcyA1IChub3QgaW5zdGFsbGVkKVxuIik7 Ci0gICAgICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkp IHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg ICAgICAgIH0KLQotI2lmZGVmIENLX0tFUkJFUk9TCi0gICAgICAgICAgICBwcmludGYoIiBDYWNo ZSBmaWxlOiAgICAgICAgICAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAga3JiX29wLmNhY2hl ID8ga3JiX29wLmNhY2hlIDogIihub25lKSIpOwotICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9y b3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAg ICAgIHByaW50ZigiIERlZmF1bHQgY2FjaGU6ICAgICAgICVzXG4iLAotICAgICAgICAgICAgICAg ICAgICBrcmI1X2RfY2MgPyBrcmI1X2RfY2MgOiAiKG5vbmUpIik7Ci0gICAgICAgICAgICBpZiAo KytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAw OwotICAgICAgICAgICAgcHJpbnRmKCIgS2V5dGFiIGZpbGU6ICAgICAgICAgJXNcbiIsCi0gICAg ICAgICAgICAgICAgICAgICAgazVfa2V5dGFiID8gazVfa2V5dGFiIDogIihub25lKSIpOwotICAg ICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigw KTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAgIGlmIChrcmJfYWN0aW9uIDwgMCkgewotICAgICAg ICAgICAgICAgIHAgPSAiKG5vbmUpIjsKLSAgICAgICAgICAgIH0gZWxzZSAgewotICAgICAgICAg ICAgICAgIGZvciAocCA9ICIiLCBpID0gMDsgaSA8IGtyYl9hX247IGkrKykgewotICAgICAgICAg ICAgICAgICAgICBpZiAoa3JiX2FjdGlvbiA9PSBrcmJfYV90YmxbaV0ua3d2YWwpIHsKLSAgICAg ICAgICAgICAgICAgICAgICAgIHAgPSBrcmJfYV90YmxbaV0ua3dkOwotICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmludGYoIiBBY3Rpb246ICAgICAgICAgICAg ICAlc1xuIiwgcCk7Ci0gICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFz a21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotCi0gICAgICAgICAgICBwcmludGYoIiBE ZWZhdWx0IGZvcndhcmRhYmxlICAlZFxuIixrcmI1X2RfZm9yd2FyZGFibGUpOwotICAgICAgICAg ICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxz ZSBuID0gMDsKLSAgICAgICAgICAgIHByaW50ZigiIEZvcndhcmRhYmxlOiAgICAgICAgICVkXG4i LGtyYjVfaW5pdC5mb3J3YXJkYWJsZSk7Ci0gICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3Mg LSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICAgICAg cHJpbnRmKCIgRGVmYXVsdCBsaWZldGltZSAgICAgJWRcbiIsa3JiNV9kX2xpZmV0aW1lKTsKLSAg ICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4o MCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICBwcmludGYoIiBMaWZldGltZTogICAgICAgICAg ICAlZCAobWludXRlcylcbiIsa3JiNV9pbml0LmxpZmV0aW1lKTsKLSAgICAgICAgICAgIGlmICgr K24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7 Ci0gICAgICAgICAgICBwcmludGYoIiBQb3N0ZGF0ZTogICAgICAgICAgICBcIiVzXCJcbiIsCi0g ICAgICAgICAgICAgICAgICAgIGtyYjVfaW5pdC5wb3N0ZGF0ZSA/IGtyYjVfaW5pdC5wb3N0ZGF0 ZTogIiIpOwotICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAgIHByaW50ZigiIERlZmF1bHQg cHJveGlhYmxlOiAgICVkXG4iLGtyYjVfZF9wcm94aWFibGUpOwotICAgICAgICAgICAgaWYgKCsr biA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsK LSAgICAgICAgICAgIHByaW50ZigiIFByb3hpYWJsZTogICAgICAgICAgICVkXG4iLGtyYjVfaW5p dC5wcm94aWFibGUpOwotICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFh c2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAgIHByaW50ZigiIFJl bmV3OiAgICAgICAgICAgICAgICVkXG4iLGtyYjVfaW5pdC5yZW5ldyk7Ci0gICAgICAgICAgICBp ZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4g PSAwOwotICAgICAgICAgICAgcHJpbnRmKCIgRGVmYXVsdCByZW5ld2FibGU6ICAgJWQgKG1pbnV0 ZXMpXG4iLGtyYjVfZF9yZW5ld2FibGUpOwotICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dz IC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAg IHByaW50ZigiIFJlbmV3YWJsZTogICAgICAgICAgICVkIChtaW51dGVzKVxuIixrcmI1X2luaXQu cmVuZXdhYmxlKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNr bW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICBwcmludGYoIiBTZXJ2 aWNlOiAgICAgICAgICAgICBcIiVzXCJcbiIsCi0gICAgICAgICAgICAgICAgICAgIGtyYjVfaW5p dC5zZXJ2aWNlID8ga3JiNV9pbml0LnNlcnZpY2UgOiAiIik7Ci0gICAgICAgICAgICBpZiAoKytu ID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwot ICAgICAgICAgICAgcHJpbnRmKCIgVmFsaWRhdGU6ICAgICAgICAgICAgJWRcbiIsa3JiNV9pbml0 LnZhbGlkYXRlKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNr bW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICBwcmludGYoIiBEZWZh dWx0IHByaW5jaXBhbDogICBcIiVzXCJcbiIsCi0gICAgICAgICAgICAgICAgICAgIGtyYjVfZF9w cmluY2lwYWwgPyBrcmI1X2RfcHJpbmNpcGFsIDogIiIpOwotICAgICAgICAgICAgaWYgKCsrbiA+ IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAg ICAgICAgICAgIHByaW50ZigiIFByaW5jaXBhbDogICAgICAgICAgIFwiJXNcIlxuIiwKLSAgICAg ICAgICAgICAgICAgICAga3JiNV9pbml0LnByaW5jaXBhbCA/IGtyYjVfaW5pdC5wcmluY2lwYWwg OiAiIik7Ci0gICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUo KSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgcHJpbnRmKCIgRGVmYXVsdCBp bnN0YW5jZTogICAgXCIlc1wiXG4iLAotICAgICAgICAgICAgICAgICAgICBrcmI1X2RfaW5zdGFu Y2UgPyBrcmI1X2RfaW5zdGFuY2UgOiAiIik7Ci0gICAgICAgICAgICBpZiAoKytuID4gY21kX3Jv d3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICAg ICAgcHJpbnRmKCIgRGVmYXVsdCByZWFsbTogICAgICAgXCIlc1wiXG4iLAotICAgICAgICAgICAg ICAgICAgICBrcmI1X2RfcmVhbG0gPyBrcmI1X2RfcmVhbG0gOiAiIik7Ci0gICAgICAgICAgICBp ZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4g PSAwOwotICAgICAgICAgICAgcHJpbnRmKCIgUmVhbG06ICAgICAgICAgICAgICAgXCIlc1wiXG4i LAotICAgICAgICAgICAgICAgICAgICBrcmI1X2luaXQucmVhbG0gPyBrcmI1X2luaXQucmVhbG0g OiAiIik7Ci0gICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUo KSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgcHJpbnRmKCIgQXV0by1HZXQg VEdUczogICAgICAgJWRcbiIsa3JiNV9hdXRvZ2V0KTsKLSAgICAgICAgICAgIGlmICgrK24gPiBj bWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAg ICAgICAgICBwcmludGYoIiBBdXRvLURlc3Ryb3kgVEdUczogICAlc1xuIiwKLSAgICAgICAgICAg ICAgICAgICAga3JiNV9hdXRvZGVsPT1LUkJfREVMX05PPyJuZXZlciI6Ci0gICAgICAgICAgICAg ICAgICAgIGtyYjVfYXV0b2RlbD09S1JCX0RFTF9DTD8ib24tY2xvc2UiOiJvbi1leGl0Iik7Ci0g ICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJu KDApOyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgcHJpbnRmKCIgRGVmYXVsdCBnZXQgSzQgVEdU czogJWRcbiIsa3JiNV9kX2dldGs0KTsKLSAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAt IDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICBw cmludGYoIiBHZXQgSzQgVEdUczogJWRcbiIsa3JiNV9pbml0LmdldGs0KTsKLSAgICAgICAgICAg IGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2Ug biA9IDA7Ci0gICAgICAgICAgICBwcmludGYoIiBDaGVjayBJUCBBZGRyZXNzZXM6ICAlZFxuIixr cmI1X2NoZWNrYWRkcnMpOwotICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYg KCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAgIHByaW50Zigi IE5vIElQIEFkZHJlc3NlczogICVkXG4iLGtyYjVfZF9ub19hZGRyZXNzZXMpOwotICAgICAgICAg ICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxz ZSBuID0gMDsKLSAgICAgICAgICAgIHByaW50ZigiIElQLUFkZHJlc3NlczogICAgICAgICIpOwot ICAgICAgICAgICAgaWYgKGtyYjVfaW5pdC5hZGRycyAmJiBrcmI1X2luaXQuYWRkcnNbMF0pIHsK LSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBrcmI1X2luaXQuYWRkcnNbaV07IGkrKykgewot ICAgICAgICAgICAgICAgICAgICBpZiAoaSkKLSAgICAgICAgICAgICAgICAgICAgICBwcmludGYo IiwiKTsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlcyIsa3JiNV9pbml0LmFkZHJzW2ld KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGtyYjVfZF9hZGRy c1swXSkgewotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7aSA8IEtSQjVfTlVNX09GX0FERFJT ICYmIGtyYjVfZF9hZGRyc1tpXTtpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGkpCi0g ICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIsIik7Ci0gICAgICAgICAgICAgICAgICAgIHBy aW50ZigiJXMiLGtyYjVfZF9hZGRyc1tpXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIih1c2UgZGVmYXVsdCkiKTsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgICAgIGlmICgr K24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7 Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgcHJpbnRmKCIgUGFzc3dvcmQ6ICAgICAgICAg ICAgXCIlc1wiXG4iLAotICAgICAgICAgICAgICAgICAgICBrcmI1X2luaXQucGFzc3dvcmQgID8g a3JiNV9pbml0LnBhc3N3b3JkICA6ICIiKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93 cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0jZW5kaWYgLyog Q09NTUVOVCAqLwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0gICAgICAgICAgICBwcmludGYo IlxuIik7Ci0gICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUo KSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgQ0tf U1NMCi0gICAgICAgICAgY2FzZSBBVVRIVFlQRV9TU0w6Ci0gICAgICAgICAgICBrdiA9IGFsbCA/ IEFVVEhUWVBFX1NSUCA6IDA7Ci0gICAgICAgICAgICBpZiAoY2tfc3NsZWF5X2lzX2luc3RhbGxl ZCgpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIgQXV0aGVudGljYXRpb246ICAgICAgU1NM L1RMUyAoJXMpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgU1NMZWF5X3ZlcnNpb24oU1NM RUFZX1ZFUlNJT04pKTsKLSAgICAgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBp ZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgfSBlbHNl IHsKLSAgICAgICAgICAgICAgICBwcmludGYoIiBBdXRoZW50aWNhdGlvbjogICAgICBTU0wvVExT IChub3QgaW5zdGFsbGVkKVxuIik7Ci0gICAgICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dz IC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAg ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByaW50ZigiIFJTQSBD ZXJ0cyBmaWxlOiAlc1xuIixzc2xfcnNhX2NlcnRfZmlsZT8KLSAgICAgICAgICAgICAgICAgIHNz bF9yc2FfY2VydF9maWxlOiIobm9uZSkiKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93 cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAg ICBwcmludGYoIiBSU0EgQ2VydHMgQ2hhaW4gZmlsZTogJXNcbiIsc3NsX3JzYV9jZXJ0X2NoYWlu X2ZpbGU/Ci0gICAgICAgICAgICAgICAgICBzc2xfcnNhX2NlcnRfY2hhaW5fZmlsZToiKG5vbmUp Iik7Ci0gICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkg cmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgcHJpbnRmKCIgUlNBIEtleSBmaWxl OiAlc1xuIixzc2xfcnNhX2tleV9maWxlPwotICAgICAgICAgICAgICAgICAgc3NsX3JzYV9rZXlf ZmlsZToiKG5vbmUpIik7Ci0gICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAo IWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgcHJpbnRmKCIg RFNBIENlcnRzIGZpbGU6ICVzXG4iLHNzbF9kc2FfY2VydF9maWxlPwotICAgICAgICAgICAgICAg ICAgc3NsX2RzYV9jZXJ0X2ZpbGU6Iihub25lKSIpOwotICAgICAgICAgICAgaWYgKCsrbiA+IGNt ZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAg ICAgICAgIHByaW50ZigiIERTQSBDZXJ0cyBDaGFpbiBmaWxlOiAlc1xuIixzc2xfZHNhX2NlcnRf Y2hhaW5fZmlsZT8KLSAgICAgICAgICAgICAgICAgIHNzbF9kc2FfY2VydF9jaGFpbl9maWxlOiIo bm9uZSkiKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9y ZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICBwcmludGYoIiBESCBLZXkg ZmlsZTogJXNcbiIsc3NsX2RoX2tleV9maWxlPwotICAgICAgICAgICAgICAgICAgc3NsX2RoX2tl eV9maWxlOiIobm9uZSkiKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlm ICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICBwcmludGYo IiBESCBQYXJhbSBmaWxlOiAlc1xuIixzc2xfZGhfcGFyYW1fZmlsZT8KLSAgICAgICAgICAgICAg ICAgIHNzbF9kaF9wYXJhbV9maWxlOiIobm9uZSkiKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBj bWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAg ICAgICAgICBwcmludGYoIiBDUkwgZmlsZTogJXNcbiIsc3NsX2NybF9maWxlPwotICAgICAgICAg ICAgICAgICAgc3NsX2NybF9maWxlOiIobm9uZSkiKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBj bWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAg ICAgICAgICBwcmludGYoIiBDUkwgZGlyOiAlc1xuIixzc2xfY3JsX2Rpcj8KLSAgICAgICAgICAg ICAgICAgICAgc3NsX2NybF9kaXI6Iihub25lKSIpOwotICAgICAgICAgICAgaWYgKCsrbiA+IGNt ZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAg ICAgICAgIHByaW50ZigiIFJhbmRvbSBmaWxlOiAlc1xuIixzc2xfcm5kX2ZpbGU/Ci0gICAgICAg ICAgICAgICAgICBzc2xfcm5kX2ZpbGU6Iihub25lKSIpOwotICAgICAgICAgICAgaWYgKCsrbiA+ IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAg ICAgICAgICAgIHByaW50ZigiIFZlcmlmeSBmaWxlOiAlc1xuIixzc2xfdmVyaWZ5X2ZpbGU/Ci0g ICAgICAgICAgICAgICAgICBzc2xfdmVyaWZ5X2ZpbGU6Iihub25lKSIpOwotICAgICAgICAgICAg aWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBu ID0gMDsKLSAgICAgICAgICAgIHByaW50ZigiIFZlcmlmeSBkaXI6ICVzXG4iLHNzbF92ZXJpZnlf ZGlyPwotICAgICAgICAgICAgICAgICAgc3NsX3ZlcmlmeV9kaXI6Iihub25lKSIpOwotICAgICAg ICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsg ZWxzZSBuID0gMDsKLSAgICAgICAgICAgIHByaW50ZigiIENpcGhlciBsaXN0OiAlc1xuIixzc2xf Y2lwaGVyX2xpc3QgPyBzc2xfY2lwaGVyX2xpc3QgOiAKLQkJICAgIERFRkFVTFRfQ0lQSEVSX0xJ U1QpOwotICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkp IHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAgIGlmIChzc2xfY29uID09IE5VTEwp IHsKLSAgICAgICAgICAgICAgICBTU0xfbGlicmFyeV9pbml0KCk7Ci0gICAgICAgICAgICAgICAg c3NsX2N0eCA9IChTU0xfQ1RYICopCi0gICAgICAgICAgICAgICAgICBTU0xfQ1RYX25ldygoU1NM X01FVEhPRCAqKVRMU3YxX21ldGhvZCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoc3NsX2N0eCAh PSBOVUxMKQotICAgICAgICAgICAgICAgICAgc3NsX2Nvbj0gKFNTTCAqKSBTU0xfbmV3KHNzbF9j dHgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHNzbF9jb24gIT0gTlVMTCkgewot ICAgICAgICAgICAgICAgIENIQVIgKiBwID0gTlVMTDsKLSAgICAgICAgICAgICAgICBpbnQgaTsK LQotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg ICAgIHAgPSAoQ0hBUiAqKSBTU0xfZ2V0X2NpcGhlcl9saXN0KHNzbF9jb24saSk7Ci0gICAgICAg ICAgICAgICAgICAgIGlmIChwID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiICAgICVzXG4iLHApOwotICAgICAgICAgICAg ICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKQotICAgICAgICAgICAgICAgICAgICAgICAg aWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmludGYoIiBDZXJ0cyBPSz8gJXNcbiIsc3Ns X2NlcnRzb2tfZmxhZz8gInllcyIgOiAibm8iKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBjbWRf cm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAg ICAgICBwcmludGYoIiBEZWJ1ZyBtb2RlOiAlc1xuIiwgc3NsX2RlYnVnX2ZsYWcgPyAib24iIDog Im9mZiIpOwotICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAgIHByaW50ZigiIFZlcmJvc2Ug bW9kZTogJXNcbiIsIHNzbF92ZXJib3NlX2ZsYWcgPyAib24iIDogIm9mZiIpOwotICAgICAgICAg ICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxz ZSBuID0gMDsKLSAgICAgICAgICAgIHByaW50ZigiIFZlcmlmeSBtb2RlOiAlc1xuIiwKLSAgICAg ICAgICAgICAgICAgICAgc3NsX3ZlcmlmeV9mbGFnID09IFNTTF9WRVJJRllfTk9ORSA/ICJub25l IiA6Ci0gICAgICAgICAgICAgICAgICAgIHNzbF92ZXJpZnlfZmxhZyA9PSBTU0xfVkVSSUZZX1BF RVIgPyAicGVlci1jZXJ0IiA6Ci0gICAgICAgICAgICAgICAgICAgICJmYWlsLWlmLW5vLXBlZXIt Y2VydCIpOwotICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAgIHByaW50ZigiIFNTTCBvbmx5 PyAlc1xuIiwgc3NsX29ubHlfZmxhZyA/ICJ5ZXMiIDogIm5vIik7Ci0gICAgICAgICAgICBpZiAo KytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAw OwotICAgICAgICAgICAgcHJpbnRmKCIgVExTIG9ubHk/ICVzXG4iLCB0bHNfb25seV9mbGFnID8g InllcyIgOiAibm8iKTsKLSAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICgh YXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0g ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEFVVEhUWVBFX05UTE06Ci0gICAgICAg ICAgICBrdiA9IDA7Ci0gICAgICAgICAgICBpZiAoY2tfbnRsbV9pc19pbnN0YWxsZWQoKSkgewot ICAgICAgICAgICAgICAgIHByaW50ZigiIEF1dGhlbnRpY2F0aW9uOiAgICAgIE5UTE1cbiIpOwot ICAgICAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSBy ZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIgTm8gb3B0aW9u c1xuIik7Ci0gICAgICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2tt b3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg ICAgICAgICAgICAgcHJpbnRmKCIgQXV0aGVudGljYXRpb246ICAgICAgTlRMTSAobm90IGluc3Rh bGxlZClcbiIpOwotICAgICAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICgh YXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGlu dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgICAg ICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNl IG4gPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBBVVRIVFlQRV9TUlA6 Ci0gICAgICAgICAgICBrdiA9IGFsbCA/IEFVVEhUWVBFX05UTE0gOiAwOwotICAgICAgICAgICAg aWYgKGNrX3NycF9pc19pbnN0YWxsZWQoKSkgewotICAgICAgICAgICAgICAgIGlmIChja19rcnlw dG9faXNfaW5zdGFsbGVkKCkpCi0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiIEF1dGhlbnRp Y2F0aW9uOiAgICAgIFNSUCBwbHVzIEtyeXB0byBBUElcbiIpOwotICAgICAgICAgICAgICAgIGVs c2UKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgQXV0aGVudGljYXRpb246ICAgICAgU1JQ XG4iKTsKLSAgICAgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgICAgIHByaW50ZigiIE5v IG9wdGlvbnNcbiIpOwotICAgICAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlm ICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgICAgIHByaW50ZigiIEF1dGhlbnRpY2F0aW9uOiAgICAgIFNSUCAobm90 IGluc3RhbGxlZClcbiIpOwotICAgICAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMp IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0gICAgICAgICAgICAgICAg Y29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAg ICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDAp OyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg cmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLX0KLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwot I2VuZGlmIC8qIE5PU0hPVyAqLwotCi0jaWZkZWYgQ0tfS0VSQkVST1MKLQotLyogIEMgUCBfIEEg VSBUIEggIC0tICBBVVRIRU5USUNBVEUgY29tbWFuZCBwYXJzaW5nICAqLwotCi1pbnQKLWNwX2F1 dGgoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kX1BhcnNlIEFVVEhF TlRJQ0FURSAqLwotICAgIGludCBjLCBpLCBuOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdv cmtlcnMgKi8KLSAgICBpbnQgcmMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1 cm4gY29kZSAqLwotICAgIGludCBnZXR2YWw7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBh cnNpbmcgaGVscGVycyAqLwotICAgIGludCB0bXBhdXRoID0gMDsgICAgICAgICAgICAgICAgICAg IC8qIFRlbXBvcmFyeSBhdXRoZW50aWNhdGlvbiB0eXBlICovCi0gICAgaW50IGt2ID0gMDsgICAg ICAgICAgICAgICAgICAgICAgICAgLyogVGVtcG9yYXJ5IEtlcmJlcm9zIHZlcnNpb24gKi8KLSAg ICBpbnQgdG1wX2FjdGlvbiA9IC0xOyAgICAgICAgICAgICAgICAvKiBUZW1wb3JhcnkgS2VyYmVy b3MgYWN0aW9uICovCi0gICAgaW50IHRtcF9rbGMgPSAwOyAgICAgICAgICAgICAgICAgICAgLyog VGVtcG9yYXJ5IGxpc3QtY3JlZGVudGlhbHMgKi8KLSAgICBjaGFyIHRtcGhscFsyNTZdOyAgICAg ICAgICAgICAgICAgICAvKiBGb3IgYnVpbGRpbmcgaGVscCBtZXNzYWdlICovCi0gICAgY2hhciAq IHA7Ci0gICAgY2hhciAqIHRtcHBzd2QgID0gTlVMTDsgICAgICAgICAgICAgLyogUGFzc3dvcmQg Ki8KLSAgICBjaGFyICogdG1wcHJpbnogPSBOVUxMOyAgICAgICAgICAgICAvKiBQcmluY2lwYWwg Ki8KLSAgICBjaGFyICogdG1wcmVhbG0gPSBOVUxMOyAgICAgICAgICAgICAvKiBSZWFsbSAqLwot ICAgIGNoYXIgKiB0bXBjYWNoZSA9IE5VTEw7ICAgICAgICAgICAgIC8qIENhY2hlIGZpbGUgKi8K LSAgICBjaGFyICogdG1waW5zdCAgPSBOVUxMOyAgICAgICAgICAgICAvKiBLNCBJbnN0YW5jZSAq LwotICAgIGNoYXIgKiB0bXBhZGRyc1tLUkI1X05VTV9PRl9BRERSU107Ci0jaWZkZWYgQ0tfUkVD QUxMCi0gICAgZXh0ZXJuIGludCBvbl9yZWNhbGw7ICAgICAgICAgICAgICAgLyogYXJvdW5kIFBh c3N3b3JkIHByb21wdGluZyAqLwotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotICAgIHN0cnVjdCBz dHJpbmdpbnQgcHZbS1JCX0lfTUFYKzFdOyAgIC8qIFRlbXBvcmFyeSBhcnJheSBmb3Igc3dpdGNo IHZhbHVlcyAqLwotICAgIHN0cnVjdCBGREIga3csIHN3LCBmbDsgICAgICAgICAgICAgIC8qIEZE QnMgZm9yIGVhY2ggcGFyc2UgZnVuY3Rpb24gKi8KLQotICAgIGtyYl9hY3Rpb24gPSAtMTsgICAg ICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgS2VyYmVyb3MgYWN0aW9uLiAqLwotICAgIHRt cF9hY3Rpb24gPSAtMTsgICAgICAgICAgICAgICAgICAgIC8qIEFuZCBvdXIgbG9jYWwgY29weS4g Ki8KLSAgICBmb3IgKGkgPSAwOyBpIDwgS1JCNV9OVU1fT0ZfQUREUlM7IGkrKykKLSAgICAgIHRt cGFkZHJzW2ldID0gTlVMTDsKLQotICAgIGlmICgoeSA9IGNta2V5KGtlcmJ0YWIsa2VyYnRhYm4s ImF1dGhlbnRpY2F0aW9uIHR5cGUiLCIiLHh4c3RyaW5nKSkgPCAwKQotICAgICAgewotICAgICAg ICAgIGlmICh5ID09IC0zKQotICAgICAgICAgICAgcHJpbnRmKCI/QXV0aGVudGljYXRpb24gdHlw ZSBub3Qgc3BlY2lmaWVkIC0gbm90aGluZyBoYXBwZW5zXG4iKTsKLSAgICAgICAgICByZXR1cm4o eSk7Ci0gICAgICB9Ci0gICAgdG1wYXV0aCA9IHk7Ci0gICAgZGVidWcoRjEwMSwia2VyYmVyb3Mg YXV0aGVudGljYXRpb24iLCIiLHRtcGF1dGgpOwotICAgIHN3aXRjaCAodG1wYXV0aCkgewotICAg ICAgY2FzZSBBVVRIX0tSQjQ6IGt2ID0gNDsgYnJlYWs7ICAgIC8qIERvbid0IGFzc3VtZSB2YWx1 ZXMgYXJlIHRoZSBzYW1lICovCi0gICAgICBjYXNlIEFVVEhfS1JCNToga3YgPSA1OyBicmVhazsK LSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHByaW50ZigiP0F1dGhlbnRpY2F0aW9uIHR5cGUgbm90 IHN1cHBvcnRlZDogXCIlc1wiXG4iLGF0bWJ1Zik7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAg fQotCi0gICAgLyogRnJvbSBoZXJlIGRvd24gaXMgS2VyYmVyb3MgKi8KLSAgICBpbmlfa2VyYigp OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBJbml0IGRhdGEgdG8gZGVmYXVsdHMg Ki8KLQotICAgIGlmIChrdiA9PSA0KSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBLNCBk ZWZhdWx0cyAqLwotICAgICAgICBpZiAoa3JiNF9kX3JlYWxtKQotICAgICAgICAgIG1ha2VzdHIo JnRtcHJlYWxtLGtyYjRfZF9yZWFsbSk7Ci0gICAgICAgIGlmIChrcmI0X2RfcHJpbmNpcGFsKQot ICAgICAgICAgIG1ha2VzdHIoJnRtcHByaW56LGtyYjRfZF9wcmluY2lwYWwpOwotICAgICAgICBp ZiAoa3JiNF9kX2luc3RhbmNlKQotICAgICAgICAgIG1ha2VzdHIoJnRtcGluc3Qsa3JiNF9kX2lu c3RhbmNlKTsKLSAgICB9IGVsc2UgaWYgKGt2ID09IDUpIHsgICAgICAgICAgICAgICAvKiBTZXQg SzUgZGVmYXVsdHMgKi8KLSAgICAgICAgaWYgKGtyYjVfZF9jYykKLSAgICAgICAgICBtYWtlc3Ry KCZ0bXBjYWNoZSxrcmI1X2RfY2MpOwotICAgICAgICBpZiAoa3JiNV9kX3JlYWxtKQotICAgICAg ICAgIG1ha2VzdHIoJnRtcHJlYWxtLGtyYjVfZF9yZWFsbSk7Ci0gICAgICAgIGlmIChrcmI1X2Rf cHJpbmNpcGFsKQotICAgICAgICAgIG1ha2VzdHIoJnRtcHByaW56LGtyYjVfZF9wcmluY2lwYWwp OwotICAgICAgICBpZiAoa3JiNV9kX2luc3RhbmNlKQotICAgICAgICAgIG1ha2VzdHIoJnRtcGlu c3Qsa3JiNV9kX2luc3RhbmNlKTsKLSAgICB9Ci0gICAgZm9yIChpID0gMDsgaSA8PSBLUkJfSV9N QVg7IGkrKykgeyAgLyogSW5pdGlhbGl6ZSBzd2l0Y2ggdmFsdWVzICovCi0gICAgICAgIHB2W2ld LnN2YWwgPSBOVUxMOyAgICAgICAgICAgICAgLyogdG8gbnVsbCBwb2ludGVycyAqLwotICAgICAg ICBwdltpXS5pdmFsID0gMDsgICAgICAgICAgICAgICAgIC8qIGFuZCAwIGludCB2YWx1ZXMgKi8K LSAgICAgICAgcHZbaV0ud3ZhbCA9IChDS19PRkZfVCktMTsJLyogYW5kIC0xIHdpZGUgdmFsdWVz ICovCi0gICAgfQotICAgIGlmIChrdiA9PSA0KSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIEtl cmJlcm9zIDQgKi8KLSAgICAgICAgcHZbS1JCX0lfTEZdLml2YWwgPSBrcmI0X2RfbGlmZXRpbWU7 Ci0gICAgICAgIHB2W0tSQl9JX1BBXS5pdmFsID0ga3JiNF9kX3ByZWF1dGg7Ci0KLSAgICAgICAg aWYgKChuID0gY21rZXkoa3JiX2FfdGJsLGtyYl9hX24sIktlcmJlcm9zIDQgYWN0aW9uIiwiIix4 eHN0cmluZykpIDwgMCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmIChuID09IC0zKQot ICAgICAgICAgICAgICAgIHByaW50ZigiP0FjdGlvbiBub3Qgc3BlY2lmaWVkIC0gbm90aGluZyBo YXBwZW5zLlxuIik7Ci0gICAgICAgICAgICAgIHJldHVybihuKTsKLSAgICAgICAgICB9Ci0gICAg fSBlbHNlIGlmIChrdiA9PSA1KSB7ICAgICAgICAgICAgICAgLyogS2VyYmVyb3MgNSAqLwotICAg ICAgICBwdltLUkJfSV9GV10uaXZhbCA9IGtyYjVfZF9mb3J3YXJkYWJsZTsKLSAgICAgICAgcHZb S1JCX0lfUFJdLml2YWwgPSBrcmI1X2RfcHJveGlhYmxlOwotICAgICAgICBwdltLUkJfSV9MRl0u aXZhbCA9IGtyYjVfZF9saWZldGltZTsKLSAgICAgICAgcHZbS1JCX0lfUkJdLml2YWwgPSBrcmI1 X2RfcmVuZXdhYmxlOwotICAgICAgICBwdltLUkJfSV9LNF0uaXZhbCA9IGtyYjVfZF9nZXRrNDsK LSAgICAgICAgcHZbS1JCX0lfTkFEXS5pdmFsID0ga3JiNV9kX25vX2FkZHJlc3NlczsKLQotICAg ICAgICAvKiBNYWtlIGhlbHAgbWVzc2FnZSB0aGF0IHNob3dzIHN3aXRjaGVzIGFuZCBhY3Rpb24g a2V5d29yZHMgKi8KLSAgICAgICAgY2tzdHJuY3B5KHRtcGhscCwiS2VyYmVyb3MgNSBhY3Rpb24s IG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICIsMjU2KTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8 IGtyYl9hX247IGkrKykgewotICAgICAgICAgICAgY2tzdHJuY2F0KHRtcGhscCxrcmJfYV90Ymxb aV0ua3dkLHNpemVvZih0bXBobHApKTsKLSAgICAgICAgICAgIGlmIChpID09IGtyYl9hX24gLSAx KQotICAgICAgICAgICAgICBja3N0cm5jYXQodG1waGxwLCJcbm9yIHN3aXRjaCIsc2l6ZW9mKHRt cGhscCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBja3N0cm5jYXQodG1waGxw LCIgICAiLHNpemVvZih0bXBobHApKTsKLSAgICAgICAgfQotICAgICAgICAvKiBTZXQgdXAgZmly c3Qgc2V0IG9mIGNoYWluZWQgRkRCJ3MgKi8KLQotICAgICAgICBjbWZkYmkoJnN3LCAgICAgICAg ICAgICAgICAgICAgIC8qIEZpcnN0IEZEQiAtIGNvbW1hbmQgc3dpdGNoZXMgKi8KLSAgICAgICAg ICAgICAgIF9DTUtFWSwgICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLwotICAgICAgICAgICAg ICAgdG1waGxwLCAgICAgICAgICAgICAgICAgIC8qIGhscG1zZyAqLwotICAgICAgICAgICAgICAg IiIsICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKG5vbmUpICovCi0gICAgICAgICAg ICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAg ICAgICAgICAgICAgIGtyYl9zX24sICAgICAgICAgICAgICAgICAvKiBTd2l0Y2ggdGFibGUgc2l6 ZSAqLwotICAgICAgICAgICAgICAgNCwgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51 bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kgKi8KLSAgICAgICAgICAgICAgIHh4c3RyaW5nLCAgICAg ICAgICAgICAgICAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0gICAgICAgICAgICAgICBrcmJf c190YmwsICAgICAgICAgICAgICAgLyogU3dpdGNoIHRhYmxlICovCi0gICAgICAgICAgICAgICAm a3cgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLwotICAgICAg ICAgICAgICAgKTsKLSAgICAgICAgY21mZGJpKCZrdywgICAgICAgICAgICAgICAgICAgICAvKiBT ZWNvbmQgRkRCIC0gYWN0aW9uIGtleXdvcmRzICovCi0gICAgICAgICAgICAgICBfQ01LRVksICAg ICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KLSAgICAgICAgICAgICAgICJLZXJiZXJvcyBhY3Rp b24iLCAgICAgICAvKiBobHBtc2cgKi8KLSAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAg ICAgICAgICAvKiBkZWZhdWx0IChub25lKSAqLwotICAgICAgICAgICAgICAgIiIsICAgICAgICAg ICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAgICAgICAgICBrcmJf YV9uLCAgICAgICAgICAgICAgICAgLyogU3dpdGNoIHRhYmxlIHNpemUgKi8KLSAgICAgICAgICAg ICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW0gZGF0YSAoMCA9IE5PVCBz d2l0Y2gpICovCi0gICAgICAgICAgICAgICB4eHN0cmluZywgICAgICAgICAgICAgICAgLyogUHJv Y2Vzc2luZyBmdW5jdGlvbiAqLwotICAgICAgICAgICAgICAga3JiX2FfdGJsLCAgICAgICAgICAg ICAgIC8qIEtleXdvcmQgdGFibGUgKi8KLSAgICAgICAgICAgICAgIE5VTEwgICAgICAgICAgICAg ICAgICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCIChub25lKSAqLwotICAgICAgICAgICAgICAg KTsKLQotICAgICAgICAvKiBQYXJzZSAqLwotCi0gICAgICAgIHdoaWxlICgxKSB7ICAgICAgICAg ICAgICAgICAgICAgLyogUGFyc2UgMCBvciBtb3JlIHN3aXRjaGVzICovCi0gICAgICAgICAgICBy YyA9IGNtZmRiKCZzdyk7ICAgICAgICAgICAgLyogUGFyc2Ugc29tZXRoaW5nICovCi0gICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJrZXJiZXJvcyBjbWZkYiAxIHJjIiwiIixyYyk7Ci0gICAgICAgICAg ICBpZiAocmMgPCAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciAqLwotICAgICAg ICAgICAgICAgIGlmIChyYyA9PSAtMykKLSAgICAgICAgICAgICAgICAgIHByaW50ZigiP0FjdGlv biBub3Qgc3BlY2lmaWVkIC0gbm90aGluZyBoYXBwZW5zLlxuIik7Ci0gICAgICAgICAgICAgICAg cmV0dXJuKHJjKTsgICAgICAgICAgICAgLyogb3IgcmVwYXJzZSBuZWVkZWQgKi8KLSAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIGlmIChjbXJlc3VsdC5mZGJhZGRyICE9ICZzdykgLyogQnJlYWsg b3V0IGlmIG5vdCBhIHN3aXRjaCAqLwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg IGMgPSBjbWdicmsoKTsgICAgICAgICAgICAgICAvKiBIYXZlIHN3aXRjaCAtIGdldCBicmVhayBj aGFyYWN0ZXIgKi8KLSAgICAgICAgICAgIGdldHZhbCA9IChjID09ICc6JyB8fCBjID09ICc9Jyk7 IC8qIE11c3QgcGFyc2UgYW4gYWd1bWVudD8gKi8KLSAgICAgICAgICAgIGlmIChnZXR2YWwgJiYg IShjbXJlc3VsdC5rZmxhZ3MgJiBDTV9BUkcpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/ VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBhcmd1bWVudHNcbiIpOwotICAgICAgICAgICAgICAg IHJldHVybigtOSk7ICAgICAgICAgICAgIC8qIE9LIGJlY2F1c2Ugbm90aGluZyBtYWxsb2MnZCB5 ZXQgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghZ2V0dmFsICYmIChjbWdrd2Zs Z3MoKSAmIENNX0FSRykpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCBy ZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIG4gPSBjbXJlc3VsdC5ucmVzdWx0OyAgICAgICAvKiBO dW1lcmljIHJlc3VsdCA9IHN3aXRjaCB2YWx1ZSAqLwotICAgICAgICAgICAgZGVidWcoRjEwMSwi a2VyYmVyb3MgY29tbWFuZCBzd2l0Y2giLCIiLG4pOwotCi0gICAgICAgICAgICBzd2l0Y2ggKG4p IHsgICAgICAgICAgICAgICAgLyogSGFuZGxlIHRoZSBzd2l0Y2ggKi8KLSAgICAgICAgICAgICAg Y2FzZSBLUkJfU19DQTogICAgICAgICAgICAvKiAvQ0FDSEU6PGZpbGVuYW1lPiAqLwotICAgICAg ICAgICAgICAgIHAgPSBrcmI1X2RfY2MgPyBrcmI1X2RfY2MgOiAiIjsKLSAgICAgICAgICAgICAg ICBpZiAoKHkgPSBjbW9maSgiTmFtZSBvZiBjYWNoZSBmaWxlIixwLCZzLHh4c3RyaW5nKSkgPCAw KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5ID09IC0zKQotICAgICAgICAgICAgICAgICAg ICAgIHMgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuKHkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtYWtl c3RyKCZ0bXBjYWNoZSxzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBwcmludGYoIj9VbmV4cGVjdGVkIHN3aXRjaCB2YWx1 ZSAtIGludGVybmFsIGVycm9yXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTkpOyAgICAg ICAgICAgICAvKiAoaWYpIG5vdGhpbmcgbWFsbG9jJ2QgeWV0LiAqLwotICAgICAgICAgICAgfQot ICAgICAgICB9Ci0gICAgICAgIGlmIChjbXJlc3VsdC5mZGJhZGRyICE9ICZrdykgeyAgLyogQ2hl Y2tpbmcuLi4gKi8KLSAgICAgICAgICAgIHByaW50ZigiP1VuZXhwZWN0ZWQgcmVzdWx0IC0gaW50 ZXJuYWwgZXJyb3JcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsgICAgICAgICAgICAgICAg IC8qIE5vdGhpbmcgbWFsbG9jJ2QgeWV0LiAqLwotICAgICAgICB9Ci0gICAgICAgIG4gPSBjbXJl c3VsdC5ucmVzdWx0OyAgICAgICAgICAgLyogR2V0IGtleXdvcmQgdmFsdWUgKi8KLSAgICB9IGVs c2UgewotICAgICAgICBwcmludGYoIj9VbmV4cGVjdGVkIEtlcmJlcm9zIHZlcnNpb24gLSBJbnRl cm5hbCBlcnJvclxuIik7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAgfQotICAgIGRlYnVnKEYx MDEsImtlcmJlcm9zIGFjdGlvbiIsIiIsbik7Ci0gICAgc3dpdGNoIChuKSB7Ci0gICAgICBjYXNl IEtSQl9BX0lOOiAgICAgICAgICAgICAgICAgICAgLyogSU5JVElBTElaRSAqLwotICAgICAgY2Fz ZSBLUkJfQV9ERTogICAgICAgICAgICAgICAgICAgIC8qIERFU1RST1kgKi8KLSAgICAgIGNhc2Ug S1JCX0FfTEM6ICAgICAgICAgICAgICAgICAgICAvKiBMSVNULUNSRURFTlRJQUxTICovCi0gICAg ICAgIHRtcF9hY3Rpb24gPSBuOyAgICAgICAgICAgICAgICAgLyogT0ssIHNldCAqLwotICAgICAg ICBicmVhazsKLSAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3Qg T0ssIHB1bnQuICovCi0gICAgICAgIHByaW50ZigiP1VuZXhwZWN0ZWQgYWN0aW9uIC0gaW50ZXJu YWwgZXJyb3JcbiIpOwotICAgICAgICByZXR1cm4oLTkpOwotICAgIH0KLSAgICBpZiAodG1wX2Fj dGlvbiA9PSBLUkJfQV9JTikgeyAgICAgICAvKiBBY3Rpb24gaXMgSU5JVElBTElaRSAqLwotICAg ICAgICBpbnQgeDsKLSAgICAgICAgY21mZGJpKCZzdywgICAgICAgICAgICAgICAgICAgICAvKiBJ TklUSUFMSVpFIHN3aXRjaGVzICovCi0gICAgICAgICAgICAgICBfQ01LRVksICAgICAgICAgICAg ICAgICAgLyogZmNvZGUgKi8KLSAgICAgICAgICAgICAgICJQcmluY2lwYWwsXG4gb3Igb3B0aW9u YWwgSU5JVElBTElaRSBzd2l0Y2goZXMpIiwgLyogaGxwbXNnICovCi0gICAgICAgICAgICAgICAi IiwgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAobm9uZSkgKi8KLSAgICAgICAgICAg ICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAg ICAgICAgICAgICAga3YgPT0gNCA/ICBrcmI0X2lfbiA6IGtyYjVfaV9uLCAvKiBTd2l0Y2ggdGFi bGUgc2l6ZSAqLwotICAgICAgICAgICAgICAgNCwgICAgICAgICAgICAgICAgICAgICAgIC8qIGFk ZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kgKi8KLSAgICAgICAgICAgICAgIHh4c3RyaW5n LCAgICAgICAgICAgICAgICAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0gICAgICAgICAgICAg ICBrdiA9PSA0ID8gIGtyYjRfaV90YmwgOiBrcmI1X2lfdGJsLCAgICAgIC8qIFN3aXRjaCB0YWJs ZSAqLwotICAgICAgICAgICAgICAgJmZsICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIg dG8gbmV4dCBGREIgKi8KLSAgICAgICAgICAgICAgICk7Ci0gICAgICAgIGNtZmRiaSgmZmwsICAg ICAgICAgICAgICAgICAgICAgLyogM3JkIEZEQiAtIGNvbW1hbmQgdG8gc2VuZCBmcm9tICovCi0g ICAgICAgICAgICAgICBfQ01GTEQsICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KLSAgICAg ICAgICAgICAgICJQcmluY2lwYWwiLCAgICAgICAgICAgICAvKiBobHBtc2cgKi8KLSAgICAgICAg ICAgICAgIGt2ID09IDQgPyBrcmI0X2RfcHJpbmNpcGFsIDoga3JiNV9kX3ByaW5jaXBhbCwgLyog cHJpbmNpcGFsICovCi0gICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgLyog YWRkdGwgc3RyaW5nIGRhdGEgKi8KLSAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAg ICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLwotICAgICAgICAgICAgICAgMCwgICAgICAg ICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCi0gICAgICAgICAgICAg ICB4eHN0cmluZywKLSAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICBOVUxMCi0g ICAgICAgICAgICAgICApOwotICAgICAgICB3aGlsZSAoMSkgeyAgICAgICAgICAgICAgICAgICAg IC8qIFBhcnNlIElOSVQgc3dpdGNoZXMgb3IgcHJpbmNpcGFsICovCi0gICAgICAgICAgICByYyA9 IGNtZmRiKCZzdyk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJrZXJiZXJvcyBjbWZkYiAyIHJj IiwiIixyYyk7Ci0gICAgICAgICAgICBpZiAocmMgPCAwKSB7Ci0gICAgICAgICAgICAgICAgaWYg KHJjID09IC0zKQotICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/UHJpbmNpcGFsIG5hbWUgcmVx dWlyZWRcbiIpOwotICAgICAgICAgICAgICAgIGdvdG8ga2VyYng7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgICAgICBkZWJ1ZyhGMTAxLCJrZXJiZXJvcyBjbWZkYiAyIGZjb2RlIiwiIixjbXJlc3Vs dC5mY29kZSk7Ci0gICAgICAgICAgICBpZiAoY21yZXN1bHQuZmNvZGUgIT0gX0NNS0VZKSAvKiBO b3QgYSBzd2l0Y2gsIHF1aXQgc3dpdGNoIGxvb3AgKi8KLSAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICBjID0gY21nYnJrKCk7ICAgICAgICAgICAgICAgLyogU3dpdGNoIC0gZ2V0IGJy ZWFrIGNoYXJhY3RlciAqLwotICAgICAgICAgICAgZGVidWcoRjEwMSwia2VyYmVyb3MgY21mZGIg MiBjbWdicmsiLCIiLGMpOwotICAgICAgICAgICAgZ2V0dmFsID0gKGMgPT0gJzonIHx8IGMgPT0g Jz0nKTsKLSAgICAgICAgICAgIGlmIChnZXR2YWwgJiYgIShjbXJlc3VsdC5rZmxhZ3MgJiBDTV9B UkcpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFr ZSBhcmd1bWVudHNcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybigtOSk7ICAgICAgICAgICAg IC8qIE9LIGJlY2F1c2Ugbm90aGluZyBtYWxsb2MnZCB5ZXQgKi8KLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIGlmICghZ2V0dmFsICYmIChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKLSAgICAg ICAgICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7 Ci0gICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg IG4gPSBjbXJlc3VsdC5ucmVzdWx0OyAgICAgICAvKiBOdW1lcmljIHJlc3VsdCA9IHN3aXRjaCB2 YWx1ZSAqLwotICAgICAgICAgICAgc3dpdGNoIChuKSB7Ci0gICAgICAgICAgICAgIC8qIFRoZXNl IGRvbid0IHRha2UgYXJncy4uLiAqLwotICAgICAgICAgICAgICBjYXNlIEtSQl9JX1BBOiAgICAg ICAgICAgIC8qIC9QUkVBVVRIICovCi0gICAgICAgICAgICAgIGNhc2UgS1JCX0lfRlc6ICAgICAg ICAgICAgLyogL0ZPUldBUkRBQkxFICovCi0gICAgICAgICAgICAgIGNhc2UgS1JCX0lfUFI6ICAg ICAgICAgICAgLyogL1BST1hJQUJMRSAqLwotICAgICAgICAgICAgICBjYXNlIEtSQl9JX1JOOiAg ICAgICAgICAgIC8qIC9SRU5FVyAqLwotICAgICAgICAgICAgICBjYXNlIEtSQl9JX1ZBOiAgICAg ICAgICAgIC8qIC9WQUxJREFURSAqLwotICAgICAgICAgICAgICBjYXNlIEtSQl9JX05QQTogICAg ICAgICAgIC8qIC9OT1QtUFJFQVVUSCAqLwotICAgICAgICAgICAgICBjYXNlIEtSQl9JX05GVzog ICAgICAgICAgIC8qIC9OT1QtRk9SV0FSREFCTEUgKi8KLSAgICAgICAgICAgICAgY2FzZSBLUkJf SV9OUFI6ICAgICAgICAgICAvKiAvTk9ULVBST1hJQUJMRSAqLwotICAgICAgICAgICAgICBjYXNl IEtSQl9JX1ZCOiAgICAgICAgICAgIC8qIC9WRVJCT1NFICovCi0gICAgICAgICAgICAgIGNhc2Ug S1JCX0lfQlI6ICAgICAgICAgICAgLyogL0JSSUVGICovCi0gICAgICAgICAgICAgIGNhc2UgS1JC X0lfSzQ6ICAgICAgICAgICAgLyogL0tFUkJFUk9TNCAqLwotICAgICAgICAgICAgICBjYXNlIEtS Ql9JX05LNDogICAgICAgICAgIC8qIC9OTy1LRVJCRVJPUzQgKi8KLSAgICAgICAgICAgICAgY2Fz ZSBLUkJfSV9QT1A6ICAgICAgICAgICAvKiAvUE9QVVAgKi8KLSAgICAgICAgICAgICAgY2FzZSBL UkJfSV9OQUQ6ICAgICAgICAgICAvKiAvTk8tQUREUkVTU0VTICovCi0gICAgICAgICAgICAgICAg aWYgKGdldHZhbCkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCBk b2VzIG5vdCB0YWtlIGEgdmFsdWVcbiIpOwotICAgICAgICAgICAgICAgICAgICByYyA9IC05Owot ICAgICAgICAgICAgICAgICAgICBnb3RvIGtlcmJ4OwotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICBzd2l0Y2ggKG4pIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgS1JCX0lfTlBB OgotICAgICAgICAgICAgICAgICAgICBwdltLUkJfSV9QQV0uaXZhbCA9IDA7Ci0gICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBLUkJfSV9ORlc6Ci0gICAg ICAgICAgICAgICAgICAgIHB2W0tSQl9JX0ZXXS5pdmFsID0gMDsKLSAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEtSQl9JX05QUjoKLSAgICAgICAgICAg ICAgICAgICAgcHZbS1JCX0lfUFJdLml2YWwgPSAwOwotICAgICAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgICAgICAgIGNhc2UgS1JCX0lfVkI6Ci0gICAgICAgICAgICAgICAgICAg IHB2W0tSQl9JX0JSXS5pdmFsID0gMDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgICAgICBjYXNlIEtSQl9JX05LNDoKLSAgICAgICAgICAgICAgICAgICAgcHZbS1JC X0lfSzRdLml2YWwgPSAwOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHB2W25dLml2YWwgPSAxOwotICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAg IC8qIFRoZXNlIGRvIHRha2UgYXJndW1lbnRzICovCi0KLSAgICAgICAgICAgICAgY2FzZSBLUkJf SV9SQjogICAgICAgICAgICAvKiAvUkVORVdBQkxFOjxtaW51dGVzPiAqLwotICAgICAgICAgICAg ICAgIHB2W25dLml2YWwgPSAwOwotICAgICAgICAgICAgICAgIGlmICghZ2V0dmFsKSBicmVhazsK LSAgICAgICAgICAgICAgICBpZiAoKHJjID0gY21udW0oIk1pbnV0ZXMiLGNraXRvYShrcmI1X2lu aXQucmVuZXdhYmxlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAsJnksIHh4 c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgICAgZ290byBrZXJieDsKLSAgICAgICAgICAg ICAgICBwdltuXS5pdmFsID0geTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg ICAgICBjYXNlIEtSQl9JX0xGOiAgICAgICAgICAgIC8qIC9MSUZFVElNRTo8bWludXRlcz4gKi8K LSAgICAgICAgICAgICAgICBwdltuXS5pdmFsID0gMDsKLSAgICAgICAgICAgICAgICAvKiBEZWZh dWx0IGlzIHByZXZpb3VzIHZhbHVlICovCi0gICAgICAgICAgICAgICAgc3ByaW50Zih0bXBidWYs IiVkIiwgICAgLyogU0FGRSAqLwotICAgICAgICAgICAgICAgICAgICAgICAga3YgPT0gNCA/Ci0g ICAgICAgICAgICAgICAgICAgICAgICBrcmI0X2luaXQubGlmZXRpbWUgOgotICAgICAgICAgICAg ICAgICAgICAgICAga3JiNV9pbml0LmxpZmV0aW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAp OwotICAgICAgICAgICAgICAgIGlmICghZ2V0dmFsKSBicmVhazsKLSAgICAgICAgICAgICAgICBp ZiAoKHJjID0gY21udW0oIk1pbnV0ZXMiLHRtcGJ1ZiwxMCwmeSwgeHhzdHJpbmcpKSA8IDApCi0g ICAgICAgICAgICAgICAgICBnb3RvIGtlcmJ4OwotICAgICAgICAgICAgICAgIHB2W25dLml2YWwg PSB5OwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIGNhc2UgS1JCX0lf UEQ6ICAgICAgICAgICAgLyogL1BPU1REQVRFOjx0aW1lc3RhbXA+ICovCi0gICAgICAgICAgICAg ICAgaWYgKHB2W25dLnN2YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgZnJlZShwdltuXS5zdmFs KTsKLSAgICAgICAgICAgICAgICAgICAgcHZbbl0uc3ZhbCA9IE5VTEw7Ci0gICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgIGlmICghZ2V0dmFsKSBicmVhazsKLSAgICAgICAgICAgICAg ICBpZiAoKHJjID0gY21kYXRlKCJkYXRlLXRpbWUiLCIiLCZzLDAseHhzdHJpbmcpKSA8IDApCi0g ICAgICAgICAgICAgICAgICBnb3RvIGtlcmJ4OwotICAgICAgICAgICAgICAgIG1ha2VzdHIoJihw dltuXS5zdmFsKSxzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICBj YXNlIEtSQl9JX1NSOiAgICAgICAgICAgIC8qIC9TRVJWSUNFOjxuYW1lPiAqLwotICAgICAgICAg ICAgICAgIGlmIChwdltuXS5zdmFsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZyZWUocHZbbl0u c3ZhbCk7Ci0gICAgICAgICAgICAgICAgICAgIHB2W25dLnN2YWwgPSBOVUxMOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0gICAgICAgICAg ICAgICAgaWYgKChyYyA9IGNtZmxkKCJTZXJ2aWNlLW5hbWUiLCIiLCZzLHh4c3RyaW5nKSkgPCAw KQotICAgICAgICAgICAgICAgICAgZ290byBrZXJieDsKLSAgICAgICAgICAgICAgICBtYWtlc3Ry KCYocHZbbl0uc3ZhbCkscyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAg ICAgY2FzZSBLUkJfSV9STDogICAgICAgICAgICAvKiAvUkVBTE06PG5hbWU+ICovCi0gICAgICAg ICAgICAgICAgaWYgKHB2W25dLnN2YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgZnJlZShwdltu XS5zdmFsKTsKLSAgICAgICAgICAgICAgICAgICAgcHZbbl0uc3ZhbCA9IE5VTEw7Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghZ2V0dmFsKSBicmVhazsKLSAgICAgICAg ICAgICAgICBpZiAoa3YgPT0gNCkKLSAgICAgICAgICAgICAgICAgIHAgPSBrcmI0X2RfcmVhbG0g PyBrcmI0X2RfcmVhbG0gOiAiIjsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg ICAgICBwID0ga3JiNV9kX3JlYWxtID8ga3JiNV9kX3JlYWxtIDogIiI7Ci0gICAgICAgICAgICAg ICAgaWYgKChyYyA9IGNtZmxkKCJSZWFsbSIscCwmcyx4eHN0cmluZykpIDwgMCkKLSAgICAgICAg ICAgICAgICAgIGdvdG8ga2VyYng7Ci0gICAgICAgICAgICAgICAgbWFrZXN0cigmKHB2W25dLnN2 YWwpLHMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIGNhc2UgS1JC X0lfSU46ICAgICAgICAgICAgLyogL0lOU1RBTkNFOjxuYW1lPiAqLwotICAgICAgICAgICAgICAg IGlmIChwdltuXS5zdmFsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZyZWUocHZbbl0uc3ZhbCk7 Ci0gICAgICAgICAgICAgICAgICAgIHB2W25dLnN2YWwgPSBOVUxMOwotICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0gICAgICAgICAgICAgICAg aWYgKGt2ID09IDQpCi0gICAgICAgICAgICAgICAgICAgIHAgPSBrcmI0X2RfaW5zdGFuY2UgPyBr cmI0X2RfaW5zdGFuY2UgOiAiIjsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg ICAgICAgIHAgPSBrcmI1X2RfaW5zdGFuY2UgPyBrcmI1X2RfaW5zdGFuY2UgOiAiIjsKLSAgICAg ICAgICAgICAgICBpZiAoKHJjID0gY21mbGQoIkluc3RhbmNlIixwLCZzLHh4c3RyaW5nKSkgPCAw KQotICAgICAgICAgICAgICAgICAgZ290byBrZXJieDsKLSAgICAgICAgICAgICAgICBtYWtlc3Ry KCYocHZbbl0uc3ZhbCkscyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAg ICAgY2FzZSBLUkJfSV9QVzogICAgICAgICAgICAvKiAvUEFTU1dPUkQ6PHBhc3N3b3JkPiAqLwot ICAgICAgICAgICAgICAgIGRlYm9rID0gMDsKLSAgICAgICAgICAgICAgICBpZiAocHZbbl0uc3Zh bCkgewotICAgICAgICAgICAgICAgICAgICBmcmVlKHB2W25dLnN2YWwpOwotICAgICAgICAgICAg ICAgICAgICBwdltuXS5zdmFsID0gTlVMTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOwotICAgICAgICAgICAgICAgIGlmICgocmMgPSBjbWZs ZCgiUGFzc3dvcmQiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgICAgaWYg KHJjICE9IC0zKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGtlcmJ4OwotICAgICAgICAgICAg ICAgIG1ha2VzdHIoJihwdltuXS5zdmFsKSxzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQot ICAgICAgICAgICAgICBjYXNlIEtSQl9JX0FEUjogICAgICAgICAgIC8qIC9BRERSRVNTRVM6ezxh ZGRyZXNzLWxpc3Q+fSAqLwotICAgICAgICAgICAgICAgIGlmIChwdltuXS5zdmFsKSB7Ci0gICAg ICAgICAgICAgICAgICAgIGZyZWUocHZbbl0uc3ZhbCk7Ci0gICAgICAgICAgICAgICAgICAgIHB2 W25dLnN2YWwgPSBOVUxMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAo IWdldHZhbCkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYgKChyYyA9IGNtZmxkKCJMaXN0IG9m IElQIGFkZHJlc3NlcyIsIiIsJnMseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAgICAgICBn b3RvIGtlcmJ4OwotICAgICAgICAgICAgICAgIG1ha2VsaXN0KHMsdG1wYWRkcnMsS1JCNV9OVU1f T0ZfQUREUlMpOwotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBLUkI1X05VTV9PRl9B RERSUyAmJiB0bXBhZGRyc1tpXTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmV0 X2FkZHIodG1wYWRkcnNbaV0pID09IDB4ZmZmZmZmZmYpIHsKLSAgICAgICAgICAgICAgICAgICAg ICAgIHByaW50ZigiaW52YWxpZCBpcCBhZGRyZXNzOiAlc1xuIix0bXBhZGRyc1tpXSk7Ci0gICAg ICAgICAgICAgICAgICAgICAgICByYyA9IC05OwotICAgICAgICAgICAgICAgICAgICAgICAgZ290 byBrZXJieDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICBwdltLUkJfSV9OQURdLml2YWwgPSAwOwotICAgICAgICAgICAgICAgIGJyZWFr OwotCi0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/VW5l eHBlY3RlZCBzd2l0Y2ggdmFsdWUgLSBpbnRlcm5hbCBlcnJvclxuIik7Ci0gICAgICAgICAgICAg ICAgcmMgPSAtOTsKLSAgICAgICAgICAgICAgICBnb3RvIGtlcmJ4OwotICAgICAgICAgICAgfQot ICAgICAgICB9Ci0gICAgICAgIGlmIChjbXJlc3VsdC5mY29kZSAhPSBfQ01GTEQpIHsKLSAgICAg ICAgICAgIHByaW50ZigiP1VuZXhlY3RlZCByZXN1bHQgLSBpbnRlcm5hbCBlcnJvclxuIik7Ci0g ICAgICAgICAgICByYyA9IC05OwotICAgICAgICAgICAgZ290byBrZXJieDsKLSAgICAgICAgfQot ICAgICAgICAvKiBjbXJlc3VsdC5zcmVzdWx0IG1heSBiZSBvZiB0aGUgZm9ybSBQUklOQ0lQQUxA UkVBTE0gKi8KLSAgICAgICAgaSA9IGNraW5kZXgoIkAiLGNtcmVzdWx0LnNyZXN1bHQsMCwwLDAp OwotICAgICAgICBpZiAoaSAhPSAwKSB7Ci0gICAgICAgICAgICBtYWtlc3RyKCZ0bXByZWFsbSwm Y21yZXN1bHQuc3Jlc3VsdFtpXSk7Ci0gICAgICAgICAgICBjbXJlc3VsdC5zcmVzdWx0W2ktMV0g PSAnXDAnOwotICAgICAgICB9Ci0gICAgICAgIG1ha2VzdHIoJnRtcHByaW56LGNtcmVzdWx0LnNy ZXN1bHQpOyAvKiBQcmluY2lwYWwgKHVzZXIpICovCi0KLSAgICAgICAgaWYgKChyYyA9IGNtY2Zt KCkpIDwgMCkgeyAgICAgICAvKiBOb3cgZ2V0IGNvbmZpcm1hdGlvbiAqLwotICAgICAgICAgICAg aWYgKHJjID09IC0zKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI/UHJpbmNpcGFsIG5hbWUg cmVxdWlyZWRcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZ290byBrZXJieDsKLSAg ICAgICAgfQotICAgICAgICBpZiAoIXRtcHByaW56IHx8ICF0bXBwcmluelswXSkgewotICAgICAg ICAgICAgcHJpbnRmKCI/UHJpbmNpcGFsIG5hbWUgcmVxdWlyZWRcbiIpOwotICAgICAgICAgICAg Z290byBrZXJieDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXB2W0tSQl9JX1JOXS5pdmFsICYm ICFwdltLUkJfSV9WQV0uaXZhbCkgewotICAgICAgICAgICAgLyogRG9uJ3QgdXNlIGEgcGFzc3dv cmQgaWYgVmFsaWRhdGluZyBvciBSZW5ld2luZyAqLwotICAgICAgICAgICAgaWYgKHB2W0tSQl9J X1BXXS5zdmFsKSB7ICAgIC8qIElmIHRoZXkgZ2F2ZSBhIC9QQVNTV09SRCBzd2l0Y2ggKi8KLSAg ICAgICAgICAgICAgICBtYWtlc3RyKCZ0bXBwc3dkLHB2W0tSQl9JX1BXXS5zdmFsKTsgLyogdXNl IHRoaXMgdmFsdWUgKi8KLSAgICAgICAgICAgIH0KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAg ICAvKiBQYXNzd29yZCBwcm9tcHRpbmcgaGFzIGJlZW4gbW92ZWQgdG8gY2tfa3JiWzQ1XV9pbml0 VEdUKCkgKi8KLSAgICAgICAgICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAvKiBPdGhl cndpc2UgbXVzdCBwcm9tcHQgZm9yIGl0ICovCi0gICAgICAgICAgICAgICAgY2hhciBwcm1wdFs4 MF07Ci0gICAgICAgICAgICAgICAgaWYgKHB2W0tSQl9JX1JMXS5zdmFsKQotICAgICAgICAgICAg ICAgICAgc3ByaW50Zihwcm1wdCwiJXNAJXMncyBQYXNzd29yZDogIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgdG1wcHJpbnoscHZbS1JCX0lfUkxdLnN2YWwpOwotICAgICAgICAgICAgICAg IGVsc2UgaWYgKHRtcHJlYWxtKQotICAgICAgICAgICAgICAgICAgc3ByaW50Zihwcm1wdCwiJXNA JXMncyBQYXNzd29yZDogIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcHJpbnosdG1w cmVhbG0pOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHNwcmludGYo cHJtcHQsIiVzJ3MgUGFzc3dvcmQ6ICIsdG1wcHJpbnopOwotI2lmZGVmIE9TMgotICAgICAgICAg ICAgICAgIGlmIChwdltLUkJfSV9QT1BdLml2YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgY2hh ciBwYXNzd2RbODBdPSIiOwotICAgICAgICAgICAgICAgICAgICByZWFkcGFzcyhwcm1wdCxwYXNz d2QsODApOwotICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZ0bXBwc3dkLHBhc3N3ZCk7Ci0g ICAgICAgICAgICAgICAgICAgIG1lbXNldChwYXNzd2QsMCw4MCk7Ci0gICAgICAgICAgICAgICAg fSBlbHNlCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAgewotI2lmZGVmIENLX1JF Q0FMTAotICAgICAgICAgICAgICAgICAgICBvbl9yZWNhbGwgPSAwOwotI2VuZGlmIC8qIENLX1JF Q0FMTCAqLwotICAgICAgICAgICAgICAgICAgICBjbXNhdnAocHNhdmUsUFJPTVBUTCk7IC8qIFNh dmUgb2xkIHByb21wdCAqLwotICAgICAgICAgICAgICAgICAgICBjbXNldHAocHJtcHQpOyAgICAg IC8qIE1ha2UgbmV3IHByb21wdCAqLwotICAgICAgICAgICAgICAgICAgICBjb25jYigoY2hhcill c2NhcGUpOyAvKiBQdXQgY29uc29sZSBpbiBjYnJlYWsgbW9kZSAqLwotICAgICAgICAgICAgICAg ICAgICBjbWluaSgwKTsgICAgICAgICAgIC8qIGFuZCBuby1lY2hvIG1vZGUgKi8KLSAgICAgICAg ICAgICAgICAgICAgLyogSXNzdWUgcHJvbXB0IGlmIGF0IHRvcCBsZXZlbCAqLwotICAgICAgICAg ICAgICAgICAgICBpZiAocGZsYWcpIHByb21wdCh4eHN0cmluZyk7Ci0gICAgICAgICAgICAgICAg ICAgIGNtcmVzKCk7ICAgICAgICAgICAgLyogUmVzZXQgdGhlIHBhcnNlciAqLwotICAgICAgICAg ICAgICAgICAgICBmb3IgKHJjID0gLTE7IHJjIDwgMDsgKSB7IC8qIFByb21wdCB0aWxsIHRoZXkg YW5zd2VyICovCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBHZXQgYSBsaXRlcmFsIGxpbmUg b2YgdGV4dCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSBjbXR4dCgiIiwiIiwmcyxO VUxMKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNtcmVzKCk7ICAgICAgICAvKiBSZXNldCB0 aGUgcGFyc2VyIGFnYWluICovCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICAgICAgbWFrZXN0cigmdG1wcHN3ZCxzKTsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJc biIpOyAgICAgICAvKiBFY2hvIGEgQ1JMRiAqLwotICAgICAgICAgICAgICAgICAgICBjbXNldHAo cHNhdmUpOyAgICAgIC8qIFJlc3RvcmUgb3JpZ2luYWwgcHJvbXB0ICovCi0gICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgeCA9IDA7ICAgICAgICAgICAgICAgICAg ICAgIC8qIENoZWNrIGZvciBwYXNzd29yZCAqLwotICAgICAgICAgICAgaWYgKHRtcHBzd2QpCi0g ICAgICAgICAgICAgIGlmICgqdG1wcHN3ZCkKLSAgICAgICAgICAgICAgICB4ID0gMTsKLSAgICAg ICAgICAgIGlmICgheCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiP1Bhc3N3b3JkIHJlcXVp cmVkXG4iKTsKLSAgICAgICAgICAgICAgICBnb3RvIGtlcmJ4OwotICAgICAgICAgICAgfQotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoa3YgPT0gNSAmJiB0 bXBfYWN0aW9uID09IEtSQl9BX0xDKSB7IC8qIExJU1QtQ1JFREVOVElBTFMgKi8KLSAgICAgICAg dG1wX2tsYyA9IDA7Ci0gICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICBpZiAoKHggPSBj bWtleShrbGN0YWIsbmtsY3RhYiwiU3dpdGNoIiwiIix4eHN0cmluZykpIDwgMCkgewotICAgICAg ICAgICAgICAgIGlmICh4ID09IC0zKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgocmMgPSBj bWNmbSgpKSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgZ290byBrZXJieDsKLSAgICAgICAg ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJjID0geDsKLSAgICAgICAgICAg ICAgICAgICAgZ290byBrZXJieDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g ICAgICAgICAgICB0bXBfa2xjIHw9IHg7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKChyYyA9 IGNtY2ZtKCkpIDwgMCkgICAgICAvKiBERVNUUk9ZLCBqdXN0IGNvbmZpcm0gKi8KLSAgICAgICAg Z290byBrZXJieDsKLQotLyogRG9uZSAtIE1vdmUgY29uZmlybWVkIGRhdGEgdG8gZmluYWwgbG9j YXRpb25zICovCi0KLSAgICBrcmJfYWN0aW9uID0gdG1wX2FjdGlvbjsgICAgICAgICAgICAvKiBB Y3Rpb24gcmVxdWVzdGVkICovCi0gICAga3JiX29wLnZlcnNpb24gPSBrdjsgICAgICAgICAgICAg ICAgLyogS2VyYmVyb3MgdmVyc2lvbiAqLwotICAgIGtyYl9vcC5jYWNoZSA9IHRtcGNhY2hlOyAg ICAgICAgICAgIC8qIENhY2hlIGZpbGUgKi8KLSAgICB0bXBjYWNoZSA9IE5VTEw7ICAgICAgICAg ICAgICAgICAgICAvKiBTbyB3ZSBkb24ndCBmcmVlIGl0ICovCi0KLSAgICBzd2l0Y2ggKGtyYl9h Y3Rpb24pIHsKLSAgICAgIGNhc2UgS1JCX0FfSU46ICAgICAgICAgICAgICAgICAgICAvKiBJTklU SUFMSVpFICovCi0gICAgICAgIGlmIChrdiA9PSA1KSB7Ci0gICAgICAgICAgICBrcmI1X2luaXQu Zm9yd2FyZGFibGUgPSBwdltLUkJfSV9GV10uaXZhbDsKLSAgICAgICAgICAgIGtyYjVfaW5pdC5w cm94aWFibGUgICA9IHB2W0tSQl9JX1BSXS5pdmFsOwotICAgICAgICAgICAga3JiNV9pbml0Lmxp ZmV0aW1lICAgID0gcHZbS1JCX0lfTEZdLml2YWw7Ci0gICAgICAgICAgICBrcmI1X2luaXQucmVu ZXcgICAgICAgPSBwdltLUkJfSV9STl0uaXZhbDsKLSAgICAgICAgICAgIGtyYjVfaW5pdC5yZW5l d2FibGUgICA9IHB2W0tSQl9JX1JCXS5pdmFsOwotICAgICAgICAgICAga3JiNV9pbml0LnZhbGlk YXRlICAgID0gcHZbS1JCX0lfVkFdLml2YWw7Ci0KLSAgICAgICAgICAgIC8qIEhlcmUgd2UganVz dCByZWFzc2lnbiB0aGUgcG9pbnRlcnMgYW5kIHRoZW4gc2V0IHRoZW0gdG8gTlVMTCAqLwotICAg ICAgICAgICAgLyogc28gdGhleSB3b24ndCBiZSBmcmVlZCBiZWxvdy4gKi8KLQotICAgICAgICAg ICAga3JiNV9pbml0LnBvc3RkYXRlID0gcHZbS1JCX0lfUERdLnN2YWw7IHB2W0tSQl9JX1BEXS5z dmFsID0gTlVMTDsKLSAgICAgICAgICAgIGtyYjVfaW5pdC5zZXJ2aWNlICA9IHB2W0tSQl9JX1NS XS5zdmFsOyBwdltLUkJfSV9TUl0uc3ZhbCA9IE5VTEw7Ci0gICAgICAgICAgICBpZiAocHZbS1JC X0lfUkxdLnN2YWwpIHsKLSAgICAgICAgICAgICAgICBrcmI1X2luaXQucmVhbG0gID0gcHZbS1JC X0lfUkxdLnN2YWw7IHB2W0tSQl9JX1JMXS5zdmFsID0gTlVMTDsKLSAgICAgICAgICAgIH0gZWxz ZSBpZiAodG1wcmVhbG0pIHsKLSAgICAgICAgICAgICAgICBrcmI1X2luaXQucmVhbG0gPSB0bXBy ZWFsbTsgdG1wcmVhbG0gPSBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHB2 W0tSQl9JX0lOXS5zdmFsKSB7Ci0gICAgICAgICAgICAgICAga3JiNV9pbml0Lmluc3RhbmNlID0g cHZbS1JCX0lfSU5dLnN2YWw7Ci0gICAgICAgICAgICAgICAgcHZbS1JCX0lfSU5dLnN2YWwgPSBO VUxMOwotICAgICAgICAgICAgfSBlbHNlIGlmICggdG1waW5zdCApIHsKLSAgICAgICAgICAgICAg ICBrcmI1X2luaXQuaW5zdGFuY2UgPSB0bXBpbnN0OwotICAgICAgICAgICAgICAgIHRtcGluc3Qg PSBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHRtcHByaW56KSB7Ci0gICAg ICAgICAgICAgICAga3JiNV9pbml0LnByaW5jaXBhbCA9IHRtcHByaW56OwotICAgICAgICAgICAg ICAgIHRtcHByaW56ID0gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGtyYjVfaW5p dC5wYXNzd29yZCA9IHRtcHBzd2Q7Ci0gICAgICAgICAgICB0bXBwc3dkID0gTlVMTDsKLQotICAg ICAgICAgICAga3JiNV9pbml0LmdldGs0ID0gcHZbS1JCX0lfSzRdLml2YWw7Ci0gICAgICAgICAg ICBpZiAoa3JiNV9pbml0LmdldGs0KSB7Ci0gICAgICAgICAgICAgICAga3JiNF9pbml0LmxpZmV0 aW1lID0gcHZbS1JCX0lfTEZdLml2YWw7Ci0gICAgICAgICAgICAgICAgaWYgKGtyYjVfaW5pdC5y ZWFsbSkKLSAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigma3JiNF9pbml0LnJlYWxtLGtyYjVf aW5pdC5yZWFsbSk7Ci0gICAgICAgICAgICAgICAga3JiNF9pbml0LnByZWF1dGggID0ga3JiNF9k X3ByZWF1dGg7Ci0gICAgICAgICAgICAgICAga3JiNF9pbml0LnZlcmJvc2UgID0gcHZbS1JCX0lf QlJdLml2YWwgPyAwIDogMTsKLSAgICAgICAgICAgICAgICBpZiAoa3JiNV9pbml0LnByaW5jaXBh bCkKLSAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigma3JiNF9pbml0LnByaW5jaXBhbCxrcmI1 X2luaXQucHJpbmNpcGFsKTsKLSAgICAgICAgICAgICAgICBpZiAoa3JiNV9pbml0LnByaW5jaXBh bCkKLSAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigma3JiNF9pbml0LnBhc3N3b3JkLGtyYjVf aW5pdC5wYXNzd29yZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBrcmI1X2luaXQubm9f YWRkcmVzc2VzID0gcHZbS1JCX0lfTkFEXS5pdmFsOwotICAgICAgICAgICAgaWYgKHRtcGFkZHJz WzBdKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IEtSQjVfTlVNX09GX0FERFJT OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGtyYjVfaW5pdC5hZGRyc1tpXSkgewot ICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShrcmI1X2luaXQuYWRkcnNbaV0pOwotICAgICAg ICAgICAgICAgICAgICAgICAga3JiNV9pbml0LmFkZHJzW2ldID0gTlVMTDsKLSAgICAgICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBrcmI1X2luaXQuYWRkcnNbaV0gPSB0bXBh ZGRyc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgdG1wYWRkcnNbaV0gPSBOVUxMOwotICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChrdiA9PSA0KSB7 ICAgICAgICAgICAvKiBTYW1lIGRlYWwgZm9yIEtlcmJlcm9zIDQgKi8KLSAgICAgICAgICAgIGty YjRfaW5pdC5saWZldGltZSA9IHB2W0tSQl9JX0xGXS5pdmFsOwotICAgICAgICAgICAgaWYgKHB2 W0tSQl9JX1JMXS5zdmFsKSB7Ci0gICAgICAgICAgICAgICAga3JiNF9pbml0LnJlYWxtICA9IHB2 W0tSQl9JX1JMXS5zdmFsOwotICAgICAgICAgICAgICAgIHB2W0tSQl9JX1JMXS5zdmFsID0gTlVM TDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIHRtcHJlYWxtICkgewotICAgICAgICAgICAgICAg IGtyYjRfaW5pdC5yZWFsbSAgPSB0bXByZWFsbTsKLSAgICAgICAgICAgICAgICB0bXByZWFsbSA9 IE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocHZbS1JCX0lfSU5dLnN2YWwp IHsKLSAgICAgICAgICAgICAgICBrcmI0X2luaXQuaW5zdGFuY2UgPSBwdltLUkJfSV9JTl0uc3Zh bDsKLSAgICAgICAgICAgICAgICBwdltLUkJfSV9JTl0uc3ZhbCA9IE5VTEw7Ci0gICAgICAgICAg ICB9IGVsc2UgaWYgKCB0bXBpbnN0ICkgewotICAgICAgICAgICAgICAgIGtyYjRfaW5pdC5pbnN0 YW5jZSA9IHRtcGluc3Q7Ci0gICAgICAgICAgICAgICAgdG1waW5zdCA9IE5VTEw7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgICAgICBrcmI0X2luaXQucHJlYXV0aCAgPSBwdltLUkJfSV9QQV0uaXZh bDsKLSAgICAgICAgICAgIGtyYjRfaW5pdC52ZXJib3NlICA9IHB2W0tSQl9JX0JSXS5pdmFsID8g MCA6IDE7Ci0KLSAgICAgICAgICAgIGlmICh0bXBwcmlueikgewotICAgICAgICAgICAgICAgIGty YjRfaW5pdC5wcmluY2lwYWwgPSB0bXBwcmluejsKLSAgICAgICAgICAgICAgICB0bXBwcmlueiA9 IE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBrcmI0X2luaXQucGFzc3dvcmQgPSB0 bXBwc3dkOwotICAgICAgICAgICAgdG1wcHN3ZCA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAg YnJlYWs7Ci0gICAgICBjYXNlIEtSQl9BX0xDOiAgICAgICAgICAgICAgICAgICAgLyogTGlzdCBD cmVkZW50aWFscyAqLwotICAgICAgICBrcmI1X2xjLmVuY3J5cHRpb24gPSB0bXBfa2xjICYgWFlL TENFTjsKLSAgICAgICAga3JiNV9sYy5mbGFncyA9IHRtcF9rbGMgJiBYWUtMQ0ZMOwotICAgICAg ICBrcmI1X2xjLmFkZHIgID0gdG1wX2tsYyAmIFhZS0xDQUQ7Ci0gICAgICAgIGJyZWFrOwotICAg IH0KLQotLyogQ29tbW9uIGV4aXQgLSBGcmVlIHRlbXBvcmFyeSBzdG9yYWdlICovCi0KLSAga2Vy Yng6Ci0gICAgZm9yIChpID0gMDsgaSA8PSBLUkJfSV9NQVg7IGkrKykgeyAgLyogRnJlZSBtYWxs b2MnZCBzd2l0Y2ggZGF0YSAqLwotICAgICAgICBpZiAocHZbaV0uc3ZhbCkKLSAgICAgICAgICBm cmVlKHB2W2ldLnN2YWwpOwotICAgIH0KLSAgICBmb3IgKGkgPSAwOyBpIDwgS1JCNV9OVU1fT0Zf QUREUlM7IGkrKykgewotICAgICAgICBpZiAodG1wYWRkcnNbaV0pCi0gICAgICAgICAgZnJlZSh0 bXBhZGRyc1tpXSk7Ci0gICAgfQotICAgIGlmICh0bXBwcmlueikgZnJlZSh0bXBwcmlueik7ICAg ICAgIC8qIEFuZCB0aGVzZSB0b28uICovCi0gICAgaWYgKHRtcHBzd2QpICBmcmVlKHRtcHBzd2Qp OwotICAgIGlmICh0bXBjYWNoZSkgZnJlZSh0bXBjYWNoZSk7Ci0gICAgaWYgKHRtcHJlYWxtKSBm cmVlKHRtcHJlYWxtKTsKLSAgICBpZiAodG1waW5zdCkgIGZyZWUodG1waW5zdCk7Ci0KLSAgICBy ZXR1cm4ocmMpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gdGhlIHJldHVybiBj b2RlICovCi19Ci0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLQotI2lmZGVmIENLX0xPR0lOCi1p bnQKLSNpZmRlZiBDS19BTlNJQwotY2t4bG9naW4oQ0hBUiAqIHVzZXJpZCwgQ0hBUiAqIHBhc3N3 ZCwgQ0hBUiAqIGFjY3QsIGludCBwcm9tcHRvaykKLSNlbHNlIC8qIENLX0FOU0lDICovCi1ja3hs b2dpbih1c2VyaWQsIHBhc3N3ZCwgYWNjdCwgcHJvbXB0b2spCi0gIENIQVIgKiB1c2VyaWQ7IENI QVIgKiBwYXNzd2Q7IENIQVIgKiBhY2N0OyBpbnQgcHJvbXB0b2s7Ci0jZW5kaWYgLyogQ0tfQU5T SUMgKi8KLS8qIGNreGxvZ2luICovIHsKLSNpZmRlZiBDS19SRUNBTEwKLSAgICBleHRlcm4gaW50 IG9uX3JlY2FsbDsgICAgICAgICAgICAgICAvKiBhcm91bmQgUGFzc3dvcmQgcHJvbXB0aW5nICov Ci0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0jaWZkZWYgQ09NTUVOVAotICAgIGV4dGVybiBpbnQg Z3Vlc3Q7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIGludCBycHJvbXB0ID0gMDsgICAgICAg ICAgICAgICAgICAgIC8qIFJlc3RvcmUgcHJvbXB0ICovCi0jaWZkZWYgQ0tTWVNMT0cKLSAgICBp bnQgc2F2bG9nOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0KLSAgICBleHRlcm4gaW50IHdoYXQs IHNydmNkbXNnOwotCi0gICAgaW50IHggPSAwLCBvayA9IDAsIHJjID0gMDsKLSAgICBDSEFSICog X3UgPSBOVUxMLCAqIF9wID0gTlVMTCwgKiBfYSA9IE5VTEw7Ci0KLSAgICBkZWJ1ZyhGMTExLCJj a3hsb2dpbiB1c2VyaWQiLHVzZXJpZCxwcm9tcHRvayk7Ci0gICAgZGVidWcoRjExMCwiY2t4bG9n aW4gcGFzc3dkIixwYXNzd2QsMCk7Ci0KLSAgICBpc2d1ZXN0ID0gMDsgICAgICAgICAgICAgICAg ICAgICAgICAvKiBHbG9iYWwgImFub255bW91cyIgZmxhZyAqLwotCi0gICAgaWYgKCF1c2VyaWQp IHVzZXJpZCA9IChDSEFSICopIiI7Ci0gICAgaWYgKCFwYXNzd2QpIHBhc3N3ZCA9IChDSEFSICop IiI7Ci0KLSAgICBkZWJ1ZyhGMTExLCJja3hsb2dpbiB1c2VyaWQiLHVzZXJpZCx3aGF0KTsKLQot I2lmZGVmIENLX1JFQ0FMTAotICAgIG9uX3JlY2FsbCA9IDA7Ci0jZW5kaWYgLyogQ0tfUkVDQUxM ICovCi0KLSNpZmRlZiBDS1NZU0xPRwotICAgIHNhdmxvZyA9IGNreHN5c2xvZzsgICAgICAgICAg ICAgICAgIC8qIFNhdmUgYW5kIHR1cm4gb2ZmIHN5c2xvZ2dpbmcgKi8KLSNlbmRpZiAvKiBDS1NZ U0xPRyAqLwotCi0gICAgaWYgKCghKnVzZXJpZCB8fCAhKnBhc3N3ZCkgJiYgICAgICAgLyogTmVl ZCB0byBwcm9tcHQgZm9yIG1pc3NpbmcgaW5mbyAqLwotICAgICAgICBwcm9tcHRvaykgewotICAg ICAgICBjbXNhdnAocHNhdmUsUFJPTVBUTCk7ICAgICAgICAgIC8qIFNhdmUgb2xkIHByb21wdCAq LwotICAgICAgICBkZWJ1ZyhGMTEwLCJja3hsb2dpbiBzYXZlZCIscHNhdmUsMCk7Ci0gICAgICAg IHJwcm9tcHQgPSAxOwotICAgIH0KLSAgICBpZiAoISp1c2VyaWQpIHsKLSAgICAgICAgaWYgKCFw cm9tcHRvaykKLSAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIGNtc2V0cCgiVXNlcm5hbWU6 ICIpOyAgICAgICAgICAgLyogTWFrZSBuZXcgcHJvbXB0ICovCi0gICAgICAgIGNvbmNiKChjaGFy KWVzY2FwZSk7ICAgICAgICAgICAgLyogUHV0IGNvbnNvbGUgaW4gY2JyZWFrIG1vZGUgKi8KLSAg ICAgICAgY21pbmkoMSk7Ci0KLS8qIEZsdXNoIHR5cGVhaGVhZCAqLwotCi0jaWZkZWYgSUtTX09Q VElPTgotICAgICAgICBkZWJ1ZyhGMTAxLAotICAgICAgICAgICAgICAiY2t4bG9naW4gVEVMT1BU X1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCIsCi0gICAgICAgICAgICAgICIiLAot ICAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0Ci0g ICAgICAgICAgICAgICk7Ci0jZW5kaWYgLyogSUtTX09QVElPTiAqLwotCi0gICAgICAgIHdoaWxl ICh0dGNoaygpID4gMCkgewotICAgICAgICAgICAgeCA9IHR0aW5jKDApOwotICAgICAgICAgICAg ZGVidWcoRjEwMSwiY2t4bG9naW4gZmx1c2ggdXNlciB4IiwiIix4KTsKLSAgICAgICAgICAgIGlm ICh4IDwgMCkKLSAgICAgICAgICAgICAgZG9leGl0KEdPT0RfRVhJVCwwKTsgICAgICAvKiBDb25u ZWN0aW9uIGxvc3QgKi8KLSNpZmRlZiBUTkNPREUKLSAgICAgICAgICAgIGlmIChzc3RlbG5ldCkg ewotICAgICAgICAgICAgICAgIGlmICh4ID09IElBQykgewotICAgICAgICAgICAgICAgICAgICB4 ID0gdG5fZG9vcCgoQ0hBUikoeCAmIDB4ZmYpLGNreGVjaCx0dGluYyk7Ci0gICAgICAgICAgICAg ICAgICAgIGRlYnVnKEYxMDEsImNreGxvZ2luIHVzZXIgdG5fZG9vcCIsIiIseCk7Ci0jaWZkZWYg SUtTX09QVElPTgotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLAotICAgICAgICAgICAg ICAgICAgICAgICJja3hsb2dpbiB1c2VyIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQu bWVfc3RhcnQiLAotICAgICAgICAgICAgICAgICAgICAgICIiLAotICAgICAgICAgICAgICAgICAg ICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQKLSAgICAgICAgICAg ICAgICAgICAgICApOwotI2VuZGlmIC8qIElLU19PUFRJT04gKi8KLQotICAgICAgICAgICAgICAg ICAgICBpZiAoeCA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgZ290byBYQ0tYTE9HOwotICAg ICAgICAgICAgICAgICAgICBzd2l0Y2ggKHgpIHsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNl IDE6IGNreGVjaCA9IDE7IGJyZWFrOyAvKiBUdXJuIG9uIGVjaG9pbmcgKi8KLSAgICAgICAgICAg ICAgICAgICAgICBjYXNlIDI6IGNreGVjaCA9IDA7IGJyZWFrOyAvKiBUdXJuIG9mZiBlY2hvaW5n ICovCi0jaWZkZWYgSUtTX09QVElPTgotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogICAg ICAgICAgICAgICAgICAgIC8qIElLUyBldmVudCAqLwotICAgICAgICAgICAgICAgICAgICAgICAg aWYgKCFURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0KQotICAgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgIC8qIGVsc2UgZmFsbCB0aHJ1 Li4uICovCi0jZW5kaWYgLyogSUtTX09QVElPTiAqLwotICAgICAgICAgICAgICAgICAgICAgIGNh c2UgNjogICAgICAgICAgICAgICAgICAgIC8qIExvZ291dCAqLwotICAgICAgICAgICAgICAgICAg ICAgICAgZ290byBYQ0tYTE9HOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgfQotI2VuZGlmIC8qIFROQ09ERSAqLwotICAgICAgICB9Ci0gICAg ICAgIGlmIChwZmxhZykgcHJvbXB0KHh4c3RyaW5nKTsgICAgLyogSXNzdWUgcHJvbXB0IGlmIGF0 IHRvcCBsZXZlbCAqLwotICAgICAgICBjbXJlcygpOyAgICAgICAgICAgICAgICAgICAgICAgIC8q IFJlc2V0IHRoZSBwYXJzZXIgKi8KLSAgICAgICAgZm9yICh4ID0gLTE7IHggPCAwOykgeyAgICAg ICAgICAvKiBQcm9tcHQgdGlsbCB0aGV5IGFuc3dlciAqLwotICAgICAgICAgICAgLyogR2V0IGEg bGl0ZXJhbCBsaW5lIG9mIHRleHQgKi8KLSAgICAgICAgICAgIHg9Y210eHQoIllvdXIgdXNlcm5h bWUsIG9yIFwiZnRwXCIsIG9yIFwiYW5vbnltb3VzXCIiLCIiLCZzLE5VTEwpOwotICAgICAgICAg ICAgaWYgKHggPT0gLTQgfHwgeCA9PSAtMTApIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIlxy XG4lc0xvZ2luIGNhbmNlbGxlZFxuIiwKLQkJICAgICAgIHggPT0gLTEwID8gIlRpbWVkIG91dDog IiA6ICIiKTsKLSNpZmRlZiBDS1NZU0xPRwotICAgICAgICAgICAgICAgIGNreHN5c2xvZyA9IHNh dmxvZzsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotICAgICAgICAgICAgICAgIGRvZXhpdChHT09E X0VYSVQsMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3N0YXRlKSAgICAgICAg ICAgICAgICAgLyogRGlkIGEgcGFja2V0IGNvbWUgaW5zdGVhZD8gKi8KLSAgICAgICAgICAgICAg Z290byBYQ0tYTE9HOwotICAgICAgICAgICAgY21yZXMoKTsgICAgICAgICAgICAgICAgICAgIC8q IFJlc2V0IHRoZSBwYXJzZXIgYWdhaW4gKi8KLSAgICAgICAgfQotICAgICAgICBpZiAoKF91ID0g KENIQVIgKiltYWxsb2MoKGludClzdHJsZW4ocykgKyAxKSkgPT0gTlVMTCkgewotICAgICAgICAg ICAgcHJpbnRmKCI/SW50ZXJuYWwgZXJyb3I6IG1hbGxvY1xuIik7Ci0gICAgICAgICAgICBnb3Rv IFhDS1hMT0c7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdHJjcHkoKGNoYXIgKilf dSxzKTsgICAgICAgLyogc2FmZSAqLwotICAgICAgICAgICAgdXNlcmlkID0gX3U7Ci0gICAgICAg IH0KLSAgICB9Ci0gICAgb2sgPSB6dnVzZXIoKGNoYXIgKil1c2VyaWQpOyAgICAgICAgLyogVmVy aWZ5IHVzZXJuYW1lICovCi0gICAgZGVidWcoRjExMSwiY2t4bG9naW4genZ1c2VyIix1c2VyaWQs b2spOwotCi0gICAgaWYgKCEqcGFzc3dkICYmIHByb21wdG9rCi0jaWZkZWYgQ09NTUVOVAotICAg ICAgICAmJiBndWVzdAotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgKSB7Ci0gICAgICAg IGNoYXIgcHJtcHRbODBdOwotCi0jaWZkZWYgQ0tTWVNMT0cKLSAgICAgICAgc2F2bG9nID0gY2t4 c3lzbG9nOyAgICAgICAgICAgICAvKiBTYXZlIGFuZCB0dXJuIG9mZiBzeXNsb2dnaW5nICovCi0g ICAgICAgIGNreHN5c2xvZyA9IDA7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLQotLyogRmx1c2gg dHlwZWFoZWFkIGFnYWluICovCi0KLSAgICAgICAgd2hpbGUgKHR0Y2hrKCkgPiAwKSB7Ci0gICAg ICAgICAgICB4ID0gdHRpbmMoMCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJja3hsb2dpbiBm bHVzaCB1c2VyIHgiLCIiLHgpOwotI2lmZGVmIFROQ09ERQotICAgICAgICAgICAgaWYgKHNzdGVs bmV0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gSUFDKSB7Ci0gICAgICAgICAgICAgICAg ICAgIHggPSB0bl9kb29wKChDSEFSKSh4ICYgMHhmZiksY2t4ZWNoLHR0aW5jKTsKLSAgICAgICAg ICAgICAgICAgICAgZGVidWcoRjEwMSwiY2t4bG9naW4gcGFzcyB0bl9kb29wIiwiIix4KTsKLSNp ZmRlZiBJS1NfT1BUSU9OCi0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsCi0gICAgICAg ICAgICAgICAgICAgICAgImNreGxvZ2luIHBhc3MgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtl cm1pdC5tZV9zdGFydCIsCi0gICAgICAgICAgICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICAg ICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydAotICAgICAg ICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYgLyogSUtTX09QVElPTiAqLwotICAgICAgICAgICAg ICAgICAgICBpZiAoeCA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgZ290byBYQ0tYTE9HOwot ICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHgpIHsKLSAgICAgICAgICAgICAgICAgICAgICBj YXNlIDE6IGNreGVjaCA9IDE7IGJyZWFrOyAvKiBUdXJuIG9uIGVjaG9pbmcgKi8KLSAgICAgICAg ICAgICAgICAgICAgICBjYXNlIDI6IGNreGVjaCA9IDA7IGJyZWFrOyAvKiBUdXJuIG9mZiBlY2hv aW5nICovCi0gICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiAgICAgICAgICAgICAgICAgICAg LyogSUtTIGV2ZW50ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVRFTE9QVF9TQihU RUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQpCi0gICAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOyAgICAgICAgICAgICAgICAgLyogZWxzZSBmYWxsIHRocnUuLi4gKi8KLSAgICAgICAg ICAgICAgICAgICAgICBjYXNlIDY6ICAgICAgICAgICAgICAgICAgICAvKiBMb2dvdXQgKi8KLSAg ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gWENLWExPRzsKLSAgICAgICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBUTkNPREUgKi8K LSAgICAgICAgfQotICAgICAgICBpZiAoIXN0cmNtcCgoY2hhciAqKXVzZXJpZCwiYW5vbnltb3Vz IikgfHwKLSAgICAgICAgICAgICFzdHJjbXAoKGNoYXIgKil1c2VyaWQsImZ0cCIpKSB7Ci0gICAg ICAgICAgICBpZiAoIW9rKQotICAgICAgICAgICAgICBnb3RvIFhDS1hMT0c7Ci0gICAgICAgICAg ICBja3N0cm5jcHkocHJtcHQsIkVudGVyIGUtbWFpbCBhZGRyZXNzIGFzIFBhc3N3b3JkOiAiLDgw KTsKLSAgICAgICAgfSBlbHNlIGlmICgqdXNlcmlkICYmIHN0cmxlbigoY2hhciAqKXVzZXJpZCkg PCA2MCkgewotI2lmZGVmIE5UCi0gICAgICAgICAgICBleHRlcm4gQ0hBUiAqIHBSZWZlcmVuY2VE b21haW5OYW1lOwotICAgICAgICAgICAgaWYgKHBSZWZlcmVuY2VEb21haW5OYW1lKQotICAgICAg ICAgICAgICBja21ha3htc2cocHJtcHQsCi0gICAgICAgICAgICAgICAgICAgICAgIDgwLAotICAg ICAgICAgICAgICAgICAgICAgICAiRW50ZXIgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgcFJl ZmVyZW5jZURvbWFpbk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICJcXFxcIiwKLSAgICAg ICAgICAgICAgICAgICAgICAgdXNlcmlkLAotICAgICAgICAgICAgICAgICAgICAgICAiJ3MgUGFz c3dvcmQ6ICIsCi0gICAgICAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVM TCxOVUxMLE5VTEwKLSAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGVsc2UK LSNlbmRpZiAvKiBOVCAqLwotICAgICAgICAgICAgICBja21ha21zZyhwcm1wdCw4MCwiRW50ZXIg IiwoY2hhciAqKXVzZXJpZCwiJ3MgUGFzc3dvcmQ6ICIsTlVMTCk7Ci0gICAgICAgIH0gZWxzZQot ICAgICAgICAgIGNrc3RybmNweShwcm1wdCwiRW50ZXIgUGFzc3dvcmQ6ICIsODApOwotICAgICAg ICBjbXNldHAocHJtcHQpOyAgICAgICAgICAgICAgICAgIC8qIE1ha2UgbmV3IHByb21wdCAqLwot ICAgICAgICBjb25jYigoY2hhcillc2NhcGUpOyAgICAgICAgICAgIC8qIFB1dCBjb25zb2xlIGlu IGNicmVhayBtb2RlICovCi0gICAgICAgIGlmIChzdHJjbXAoKGNoYXIgKil1c2VyaWQsImFub255 bW91cyIpICYmCi0gICAgICAgICAgICBzdHJjbXAoKGNoYXIgKil1c2VyaWQsImZ0cCIpKSB7IC8q IGFuZCBpZiBub3QgYW5vbnltb3VzICovCi0gICAgICAgICAgICBkZWJvayA9IDA7Ci0gICAgICAg ICAgICBjbWluaSgwKTsgICAgICAgICAgICAgICAgICAgLyogYW5kIG5vLWVjaG8gbW9kZSAqLwot ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY21pbmkoMSk7Ci0gICAgICAgIH0KLSAgICAg ICAgaWYgKHBmbGFnKSBwcm9tcHQoeHhzdHJpbmcpOyAgICAvKiBJc3N1ZSBwcm9tcHQgaWYgYXQg dG9wIGxldmVsICovCi0gICAgICAgIGNtcmVzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyog UmVzZXQgdGhlIHBhcnNlciAqLwotICAgICAgICBmb3IgKHggPSAtMTsgeCA8IDA7KSB7ICAgICAg ICAgIC8qIFByb21wdCB0aWxsIHRoZXkgYW5zd2VyICovCi0jaWZkZWYgQ0tfUEFNCi0JICAgIGdv dGVtcHR5cGFzc3dkPTA7Ci0jZW5kaWYgLyogQ0tfUEFNICovCi0gICAgICAgICAgICB4ID0gY210 eHQoIiIsIiIsJnMsTlVMTCk7ICAgLyogR2V0IGEgbGl0ZXJhbCBsaW5lIG9mIHRleHQgKi8KLSAg ICAgICAgICAgIGlmICh4ID09IC00IHx8IHggPT0gLTEwKSB7Ci0gICAgICAgICAgICAgICAgcHJp bnRmKCJcclxuJXNMb2dpbiBjYW5jZWxsZWRcbiIsCi0JCSAgICAgICB4ID09IC0xMCA/ICJUaW1l ZCBvdXQ6ICIgOiAiIik7Ci0jaWZkZWYgQ0tTWVNMT0cKLSAgICAgICAgICAgICAgICBja3hzeXNs b2cgPSBzYXZsb2c7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICAgICAgICAgICAgICBkb2V4 aXQoR09PRF9FWElULDApOwotICAgICAgICAgICAgfQotI2lmZGVmIENLX1BBTQotCSAgICBpZiAo ISpzKQotCSAgICAgIGdvdGVtcHR5cGFzc3dkID0gMTsKLSNlbmRpZiAvKiBDS19QQU0gKi8KLSAg ICAgICAgICAgIGlmIChzc3RhdGUpICAgICAgICAgICAgICAgICAvKiBJbiBjYXNlIG9mIGEgS2Vy bWl0IHBhY2tldCAqLwotICAgICAgICAgICAgICBnb3RvIFhDS1hMT0c7Ci0gICAgICAgICAgICBj bXJlcygpOyAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgdGhlIHBhcnNlciBhZ2FpbiAqLwot ICAgICAgICB9Ci0gICAgICAgIHByaW50ZigiXHJcbiIpOyAgICAgICAgICAgICAgICAgLyogRWNo byBhIENSTEYgKi8KLSAgICAgICAgaWYgKChfcCA9IChDSEFSICopbWFsbG9jKChpbnQpc3RybGVu KHMpICsgMSkpID09IE5VTEwpIHsKLSAgICAgICAgICAgIHByaW50ZigiP0ludGVybmFsIGVycm9y OiBtYWxsb2NcbiIpOwotICAgICAgICAgICAgZ290byBYQ0tYTE9HOwotICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgc3RyY3B5KChjaGFyICopX3Ascyk7ICAgICAgIC8qIHNhZmUgKi8KLSAg ICAgICAgICAgIHBhc3N3ZCA9IF9wOwotICAgICAgICB9Ci0gICAgfQotI2lmZGVmIENLX1BBTQot ICAgIGVsc2UgewotICAgICAgICBjbXJlcygpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJl c2V0IHRoZSBwYXJzZXIgKi8KLQotICAgICAgICAvKiBXZSByZXN0b3JlIHRoZSBwcm9tcHQgbm93 IGJlY2F1c2UgdGhlIFBBTSBlbmdpbmUgd2lsbCBjYWxsICAqLwotICAgICAgICAvKiByZWFkcGFz cygpIHdoaWNoIHdpbGwgb3ZlcndyaXRlIHBzYXZlLiAqLwotICAgICAgICBpZiAocnByb21wdCkg ewotICAgICAgICAgICAgY21zZXRwKHBzYXZlKTsgICAgICAgICAgICAgIC8qIFJlc3RvcmUgb3Jp Z2luYWwgcHJvbXB0ICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja3hsb2dpbiByZXN0b3Jl ZCIscHNhdmUsMCk7Ci0gICAgICAgICAgICBycHJvbXB0ID0gMDsKLSAgICAgICAgfQotICAgIH0K LSNlbmRpZiAvKiBDS19QQU0gKi8KLQotI2lmZGVmIENLU1lTTE9HCi0gICAgY2t4c3lzbG9nID0g c2F2bG9nOwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0KLSAgICBpZiAob2spIHsKLSAgICAgICAg b2sgPSB6dnBhc3MoKGNoYXIgKilwYXNzd2QpOyAgICAvKiBDaGVjayBwYXNzd29yZCAqLwotICAg ICAgICBkZWJ1ZyhGMTAxLCJja3hsb2dpbiB6dnBhc3MiLCIiLG9rKTsKLSNpZmRlZiBDS19QQU0K LSAgICB9IGVsc2UgewotCS8qIEZha2UgcGFtIHBhc3N3b3JkIGZhaWx1cmUgZm9yIG5vbmV4aXN0 ZW50IHVzZXJzICovCi0Jc2xlZXAoMSk7Ci0JcHJpbnRmKCJBdXRoZW50aWNhdGlvbiBmYWlsdXJl XG4iKTsKLSNlbmRpZgkvKiBDS19QQU0gKi8KLSAgICB9Ci0KLSAgICBpZiAob2sgPiAwICYmIGlz Z3Vlc3QpIHsKLSNpZm5kZWYgTk9QVVNICi0gICAgICAgIG5vcHVzaCA9IDE7Ci0jZW5kaWYgLyog Tk9QVVNIICovCi0gICAgICAgIHNydmNkbXNnID0gMTsKLSAgICB9Ci0gICAgcmMgPSBvazsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IHRoZSByZXR1cm4gY29kZSAqLwotICAgIGlm ICgoY2hhciAqKXVpZGJ1ZiAhPSAoY2hhciAqKXVzZXJpZCkKLSAgICAgIGNrc3RybmNweSh1aWRi dWYsKGNoYXIgKil1c2VyaWQsVUlEQlVGTEVOKTsgLyogUmVtZW1iZXIgdXNlcm5hbWUgKi8KLQot ICBYQ0tYTE9HOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbW1vbiBleGl0ICov Ci0jaWZkZWYgQ0tTWVNMT0cKLSAgICBja3hzeXNsb2cgPSBzYXZsb2c7ICAgICAgICAgICAgICAg ICAvKiBJbiBjYXNlIG9mIEdPVE8gYWJvdmUgKi8KLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotICAg IGlmIChycHJvbXB0KSB7Ci0gICAgICAgIGNtc2V0cChwc2F2ZSk7ICAgICAgICAgICAgICAgICAg LyogUmVzdG9yZSBvcmlnaW5hbCBwcm9tcHQgKi8KLSAgICAgICAgZGVidWcoRjExMCwiY2t4bG9n aW4gcmVzdG9yZWQiLHBzYXZlLDApOwotICAgIH0KLSAgICBpZiAoX3UgfHwgX3AgfHwgX2EpIHsK LSAgICAgICAgaWYgKF91KSBmcmVlKF91KTsKLSAgICAgICAgaWYgKF9wKSBmcmVlKF9wKTsKLSAg ICAgICAgaWYgKF9hKSBmcmVlKF9hKTsKLSAgICB9Ci0gICAgcmV0dXJuKHJjKTsKLX0KLQotaW50 Ci1ja3hsb2dvdXQoKSB7Ci0gICAgZG9leGl0KEdPT0RfRVhJVCwwKTsgICAgICAgICAgICAgICAg LyogZG9leGl0IGNhbGxzIHp2bG9nb3V0ICovCi0gICAgcmV0dXJuKDApOyAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogbm90IHJlYWNoZWQgKi8KLX0KLSNlbmRpZiAvKiBDS19MT0dJTiAqLwot Ci0jZW5kaWYgLyogTk9JQ1AgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQv Y2tlcm1pdC05LjAuMzAyL2NrdXVzci5jIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQt OS4wLjMwMi9ja3V1c3IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I3N2ZlNi4u MDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVz ci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTMzNzYgKzAsMCBAQAotI2lmZGVmIFNTSFRFU1QKLSNk ZWZpbmUgU1NIQlVJTFRJTgotI2VuZGlmIC8qIFNTSFRFU1QgKi8KLQotI2luY2x1ZGUgImNrY3N5 bS5oIgotY2hhciAqdXNlcnYgPSAiVXNlciBJbnRlcmZhY2UgOS4wLjI5OSwgOSBKdW4gMjAxMSI7 Ci0KLS8qICBDIEsgVSBVIFMgUiAtLSAgIlVzZXIgSW50ZXJmYWNlIiBmb3IgQy1LZXJtaXQgKFBh cnQgMSkgICovCi0KLS8qCi0gIEF1dGhvcnM6Ci0gICAgRnJhbmsgZGEgQ3J1eiA8ZmRjQGNvbHVt YmlhLmVkdT4sCi0gICAgICBUaGUgS2VybWl0IFByb2plY3QsIENvbHVtYmlhIFVuaXZlcnNpdHks IE5ldyBZb3JrIENpdHkKLSAgICBKZWZmcmV5IEUgQWx0bWFuIDxqYWx0bWFuQHNlY3VyZS1lbmRw b2ludHMuY29tPgotICAgICAgU2VjdXJlIEVuZHBvaW50cyBJbmMuLCBOZXcgWW9yayBDaXR5Ci0K LSAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDExLAotICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVu aXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCi0gICAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBvciB0aGUKLSAgICBjb3B5cmln aHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNz aW9ucy4KLSovCi0KLS8qCi0gIE9yaWdpbmFsbHkgdGhlIGVudGlyZSB1c2VyIGludGVyZmFjZSB3 YXMgaW4gb25lIG1vZHVsZSwgY2t1dXNyLmMuICBPdmVyCi0gIHRoZSB5ZWFycyBpdCBoYXMgYmVl biBzcGxpdCBpbnRvIG1hbnkgbW9kdWxlczogY2t1dXMyLmMsIGNrdXVzMy5jLCAuLi4sCi0gIGNr dXVzNy5jLiAgY2t1dXMyLmMgY29udGFpbnMgdGhlIEhFTFAgY29tbWFuZCBwYXJzZXIgYW5kIGhl bHAtdGV4dCBzdHJpbmdzOwotICBja3V1c3kuYyBjb250YWlucyB0aGUgVU5JWC1zdHlsZSBjb21t YW5kLWxpbmUgaW50ZXJmYWNlOyBja3V1c3guYyBjb250YWlucwotICByb3V0aW5lcyBuZWVkZWQg YnkgYm90aCB0aGUgY29tbWFuZC1saW5lIGludGVyZmFjZSBhbmQgdGhlIGludGVyYWN0aXZlCi0g IGNvbW1hbmQgcGFyc2VyLgotKi8KLQotLyoKLSAgVGhlIGNrdXVzKi5jIG1vZHVsZXMgZGVwZW5k IG9uIHRoZSBleGlzdGVuY2Ugb2YgQyBsaWJyYXJ5IGZlYXR1cmVzIGxpa2UKLSAgZm9wZW4sIGZn ZXRzLCBmZW9mLCAoZilwcmludGYsIGFyZ3YvYXJnYywgZXRjLiAgT3RoZXIgZnVuY3Rpb25zIHRo YXQgYXJlCi0gIGxpa2VseSB0byB2YXJ5IGFtb25nIGRpZmZlcmVudCBwbGF0Zm9ybXMgLS0gbGlr ZSBzZXR0aW5nIHRlcm1pbmFsIG1vZGVzIG9yCi0gIGludGVycnVwdHMgLS0gYXJlIGludm9rZWQg dmlhIGNhbGxzIHRvIGZ1bmN0aW9ucyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZQotICBzeXN0ZW0t IGRlcGVuZGVudCBtb2R1bGVzLCBjaz9bZnRdaW8uYy4gIFRoZSBjb21tYW5kIGxpbmUgcGFyc2Vy IHByb2Nlc3NlcwotICBhbnkgYXJndW1lbnRzIGZvdW5kIG9uIHRoZSBjb21tYW5kIGxpbmUsIGFz IHBhc3NlZCB0byBtYWluKCkgdmlhIGFyZ3YvYXJnYy4KLSAgVGhlIGludGVyYWN0aXZlIHBhcnNl ciB1c2VzIHRoZSBmYWNpbGl0aWVzIG9mIHRoZSBjbWQgcGFja2FnZSAoZGV2ZWxvcGVkIGZvcgot ICB0aGlzIHByb2dyYW0sIGJ1dCB1c2FibGUgYnkgYW55IHByb2dyYW0pLiAgQW55IGNvbW1hbmQg cGFyc2VyIG1heSBiZQotICBzdWJzdGl0dXRlZCBmb3IgdGhpcyBvbmUuICBUaGUgb25seSByZXF1 aXJlbWVudHMgZm9yIHRoZSBLZXJtaXQgY29tbWFuZAotICBwYXJzZXIgYXJlIHRoZXNlOgotCi0g IC4gU2V0IHBhcmFtZXRlcnMgdmlhIGdsb2JhbCB2YXJpYWJsZXMgbGlrZSBkdXBsZXgsIHNwZWVk LCB0dG5hbWUsIGV0Yy4gIFNlZQotICAgIGNrY21haS5jIGZvciB0aGUgZGVjbGFyYXRpb25zIGFu ZCBkZXNjcmlwdGlvbnMgb2YgdGhlc2UgdmFyaWFibGVzLgotCi0gIC4gSWYgYSBjb21tYW5kIGNh biBiZSBleGVjdXRlZCB3aXRob3V0IHRoZSB1c2Ugb2YgS2VybWl0IHByb3RvY29sLCB0aGVuCi0g ICAgZXhlY3V0ZSB0aGUgY29tbWFuZCBkaXJlY3RseSBhbmQgc2V0IHRoZSB2YXJpYWJsZSBzc3Rh dGUgdG8gMC4gRXhhbXBsZXMKLSAgICBpbmNsdWRlICdzZXQnIGNvbW1hbmRzLCBsb2NhbCBkaXJl Y3RvcnkgbGlzdGluZ3MsIHRoZSAnY29ubmVjdCcgY29tbWFuZC4KLQotICAuIElmIGEgY29tbWFu ZCByZXF1aXJlcyB0aGUgS2VybWl0IHByb3RvY29sLCBzZXQgdGhlIGZvbGxvd2luZyB2YXJpYWJs ZXM6Ci0KLSAgICAgc3N0YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgZGF0 YQotICAgICAgICd4JyAoZW50ZXIgc2VydmVyIG1vZGUpICAgICAgICAgICAgKG5vbmUpCi0gICAg ICAgJ3InIChzZW5kIGEgJ2dldCcgY29tbWFuZCkgICAgICAgICBjbWFyZywgY21hcmcyCi0gICAg ICAgJ3YnIChlbnRlciByZWNlaXZlIG1vZGUpICAgICAgICAgICBjbWFyZzIKLSAgICAgICAnZycg KHNlbmQgYSBnZW5lcmljIGNvbW1hbmQpICAgICAgIGNtYXJnCi0gICAgICAgJ3MnIChzZW5kIGZp bGVzKSAgICAgICAgICAgICAgICAgICBuZmlscywgY21hcmcgJiBjbWFyZzIgT1IgY21saXN0Ci0g ICAgICAgJ2MnIChzZW5kIGEgcmVtb3RlIGhvc3QgY29tbWFuZCkgICBjbWFyZwotCi0gICAgIGNt bGlzdCBpcyBhbiBhcnJheSBvZiBwb2ludGVycyB0byBzdHJpbmdzLgotICAgICBjbWFyZywgY21h cmcyIGFyZSBwb2ludGVycyB0byBzdHJpbmdzLgotICAgICBuZmlscyBpcyBhbiBpbnRlZ2VyLgot Ci0gICAgIGNtYXJnIGNhbiBiZSBhIGZpbGVuYW1lIHN0cmluZyAocG9zc2libHkgd2lsZCksIG9y Ci0JYSBwb2ludGVyIHRvIGEgcHJlZmFicmljYXRlZCBnZW5lcmljIGNvbW1hbmQgc3RyaW5nLCBv cgotCWEgcG9pbnRlciB0byBhIGhvc3QgY29tbWFuZCBzdHJpbmcuCi0gICAgIGNtYXJnMiBpcyBh biAiYXMtbmFtZSIgLSB0aGUgbmFtZSB0byBzZW5kIGZpbGUocykgdW5kZXIsIG9yCi0JdGhlIG5h bWUgdW5kZXIgd2hpY2ggdG8gc3RvcmUgaW5jb21pbmcgZmlsZShzKTsgbXVzdCBub3QgYmUgd2ls ZC4KLQlBIG51bGwgb3IgZW1wdHkgdmFsdWUgbWVhbnMgdG8gdXNlIHRoZSBmaWxlJ3Mgb3duIG5h bWUuCi0gICAgIGNtbGlzdCBpcyBhIGxpc3Qgb2YgZmlsZW5hbWVzLCBzdWNoIGFzIHBhc3NlZCB2 aWEgYXJndi4KLSAgICAgbmZpbHMgaXMgYW4gaW50ZWdlciwgaW50ZXJwcmV0ZWQgYXMgZm9sbG93 czoKLSAgICAgICAtMTogZmlsZXNwZWMgKHBvc3NpYmx5IHdpbGQpIGluIGNtYXJnLCBtdXN0IGJl IGV4cGFuZGVkIGludGVybmFsbHkuCi0JMDogc2VuZCBmcm9tIHN0ZGluIChzdGFuZGFyZCBpbnB1 dCkuCi0gICAgICAgPjA6IG51bWJlciBvZiBmaWxlcyB0byBzZW5kLCBmcm9tIGNtbGlzdC4KLQot ICBUaGUgc2NyZWVuKCkgZnVuY3Rpb24gaXMgdXNlZCB0byB1cGRhdGUgdGhlIHNjcmVlbiBkdXJp bmcgZmlsZSB0cmFuc2Zlci4KLSAgVGhlIHRsb2coKSBmdW5jdGlvbiB3cml0ZXMgdG8gYSB0cmFu c2FjdGlvbiBsb2cuCi0gIFRoZSBkZWJ1ZygpIGZ1bmN0aW9uIHdyaXRlcyB0byBhIGRlYnVnZ2lu ZyBsb2cuCi0gIFRoZSBpbnRtc2coKSBhbmQgY2hraW50KCkgZnVuY3Rpb25zIHByb3ZpZGUgdGhl IHVzZXIgaS9vIGZvciBpbnRlcnJ1cHRpbmcKLSAgICBmaWxlIHRyYW5zZmVycy4KLSovCi0KLS8q IEluY2x1ZGVzICovCi0KLSNpZmRlZiBNVUxUSU5FVAotI2RlZmluZSBNVUxUSU5FVF9PTERfU1RZ TEUJCS8qIExlYXZlIHNlbGVjdCBwcm90b3R5cGUgdW5kZWZpbmVkICovCi0jZW5kaWYgLyogTVVM VElORVQgKi8KLQotI2luY2x1ZGUgImNrY2RlYi5oIgotI2luY2x1ZGUgImNrY2FzYy5oIgotI2lu Y2x1ZGUgImNrY2tlci5oIgotI2luY2x1ZGUgImNrY25ldC5oIgkJCS8qIE5ldHdvcmsgc3ltYm9s cyAqLwotI2luY2x1ZGUgImNrdXVzci5oIgotI2luY2x1ZGUgImNrY3hsYS5oIgotCi1pbnQgZ19m bmNhY3QgPSAtMTsJCQkvKiBOZWVkZWQgZm9yIE5PSUNQIGJ1aWxkcyAqLwotaW50IG5vaW5pdCA9 IDA7CQkJCS8qIEZsYWcgZm9yIHNraXBwaW5nIGluaXQgZmlsZSAqLwotaW50IG5zY2FuZmlsZSA9 IFNDQU5GSUxFQlVGOwotCi1pbnQgcmNkYWN0aXZlID0gMDsJCQkvKiBSQ0QgYWN0aXZlICovCi1p bnQga2VlcGFsbGNoYXJzID0gMDsJCQkvKiBTZWUgY21mbGQoKSAqLwotCi1pbnQgbG9jdXMgPSAx OwkJCQkvKiBDdXJyZW50IExPQ1VTIGlzIExPQ0FMICovCi0jaWZkZWYgT1MyCi1pbnQgYXV0b2xv Y3VzID0gMjsJCQkvKiBBdXRvbWF0aWMgTE9DVVMgc3dpdGNoaW5nOiBBU0sgKi8KLSNlbHNlIC8q IE9TMiAqLwotaW50IGF1dG9sb2N1cyA9IDE7CQkJLyogQXV0b21hdGljIExPQ1VTIHN3aXRjaGlu ZyBlbmFibGVkICovCi0jZW5kaWYgLyogT1MyICovCi0KLSNpZm5kZWYgTk9JQ1AKLSNpZmRlZiBD S0xFQVJOCi0jaWZkZWYgVk1TCi0jaW5jbHVkZSA8dGltZS5oPgkJCS8qIEZvciBDS0xFQVJOICov Ci0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogQ0tMRUFSTiAqLwotI2lmZGVmIE9TMgotI2lm bmRlZiBOVAotI2RlZmluZSBJTkNMX05PUE0KLSNkZWZpbmUgSU5DTF9WSU8JCQkvKiBOZWVkZWQg Zm9yIGNrb2Nvbi5oICovCi0jaW5jbHVkZSA8b3MyLmg+Ci0jdW5kZWYgQ09NTUVOVAotI2Vsc2UK LSNkZWZpbmUgQVBJUkVUIFVMT05HCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHRh cGkuaD4KLSNpbmNsdWRlICJja253aW4uaCIKLSNpbmNsdWRlICJja250YXAuaCIJCQkvKiBDS19U QVBJIGRlZmluaXRpb24gKi8KLSNlbmRpZiAvKiBOVCAqLwotI2luY2x1ZGUgImNrb3dpbi5oIgot I2luY2x1ZGUgImNrb2Nvbi5oIgotZXh0ZXJuIGludCB0Y3BfYXZhaWw7Ci1leHRlcm4gYm9vbCB2 aWV3b25seTsKLWV4dGVybiBpbnQgazk1c3Rkb3V0OwotZXh0ZXJuIGludCB0dF9zY3JvbGw7Ci0j aWZuZGVmIE5PVEVSTQotZXh0ZXJuIHR0X3N0YXR1c1tWTlVNXTsKLSNlbmRpZiAvKiBOT1RFUk0g Ki8KLWludCBkaXNwbGF5X2RlbW8gPSAxOwotI2luY2x1ZGUgImNrb3NzaC5oIgotI2lmZGVmIEtV SQotI2luY2x1ZGUgImlrdWkuaCIKLSNlbmRpZiAvKiBLVUkgKi8KLSNlbmRpZiAvKiBPUzIgKi8K LQotaW50IG9wdGxpbmVzID0gMDsKLWludCBkaWRzZXRsaW4gPSAwOwotCi0jaWZkZWYgTkVXRlRQ Ci1leHRlcm4gaW50IGZ0cGdldCwgZnRwaXNvcGVuKCksIGRvZnRwcmVzKCk7Ci1fUFJPVE9UWVAo aW50IGRvZnRwdHlwLChpbnQpKTsKLV9QUk9UT1RZUChWT0lEIGRvZnRwZ2xvYmFsdHlwZSwoaW50 KSk7Ci0jZW5kaWYgLyogTkVXRlRQICovCi0KLSNpZmRlZiBWTVMKLWV4dGVybiBpbnQgYmF0Y2g7 Ci0jZW5kaWYgLyogVk1TICovCi0KLSNpZmRlZiBkYXRhZ2VuZXJhbAotI2luY2x1ZGUgPHBhY2tl dHM6Y29tbW9uLmg+Ci0jZGVmaW5lIGZnZXRzKHN0cmluZ2J1ZixtYXgsZmQpIGRnX2ZnZXRzKHN0 cmluZ2J1ZixtYXgsZmQpCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLQotZXh0ZXJuIGludCB4 Y21kc3JjLCBoaW50cywgY21mbGdzLCB3aHljbG9zZWQ7Ci0KLWNoYXIgKiBobHB0b2sgPSBOVUxM OwotCi0jaWZkZWYgQ0tfVFRHV1NJWgkJCS8qIFdoZXRoZXIgdG8gdXNlIG1vcmUtcHJvbXB0aW5n ICovCi1pbnQgeGFza21vcmUgPSAxOwkJCS8qIE1vbWVudGFyeSBzZXR0aW5nICovCi1pbnQgc2F2 ZWFzayAgPSAxOwkJCS8qIFBlcm1hbmVudCBzZXR0aW5nICovCi0jZWxzZQotaW50IHhhc2ttb3Jl ID0gMDsKLWludCBzYXZlYXNrICA9IDA7Ci0jZW5kaWYgLyogQ0tfVFRHV1NJWiAqLwotCi0jaWZu ZGVmIE5PQ1NFVFMKLWV4dGVybiBpbnQgbmZpbGM7Ci1leHRlcm4gc3RydWN0IGtleXRhYiBmY3N0 YWJbXTsKLWV4dGVybiBpbnQgZmNoYXJzZXQ7Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi1jaGFy ICogZ19wc3dkID0gTlVMTDsKLWludCBnX3BjcHQgPSAtMTsKLWludCBnX3BmbGcgPSAtMTsKLQot ZXh0ZXJuIGludCBjbWRfcm93cywgY21kX2NvbHM7Ci0KLSNpZmRlZiBDS1JPT1QKLWV4dGVybiBp bnQgY2tyb290ZXJyOwotI2VuZGlmIC8qIENLUk9PVCAqLwotCi1leHRlcm4gaW50IGluc2VydmVy LCBmaWxlcGVlazsKLQotI2lmZGVmIENLTEVBUk4KLUZJTEUgKiBsZWFybmZwID0gTlVMTDsKLWNo YXIgKiBsZWFybmZpbGUgPSBOVUxMOwotaW50IGxlYXJuaW5nID0gMDsKLSNlbmRpZiAvKiBDS0xF QVJOICovCi0KLSNpZm5kZWYgTk9YRkVSCi1leHRlcm4gaW50IGF0Y2FwciwgYXRkaXNvLCBuZmls cywgbW92aW5nLCBwcm90b2NvbCwgc2VuZG1vZGUsIGVwa3RmbGcsIHNpemUsCi0gIHNuZHNyYywg c2VydmVyLCBkaXNwbGEsIGZuY252LCBmbnNwYXRoLCBmbnJwYXRoLCB4ZmVybW9kZSwgdXJwc2l6 LAotICBzcHNpemYsIHNwc2l6LCBzcHNpenIsIHNwbWF4LCB3c2xvdHIsIHByZWZpeGluZywgZm5j YWN0LCByZWxpYWJsZSwKLSAgc2V0cmVsaWFibGU7Ci0KLSNpZmRlZiBJS1NEQ09ORgotZXh0ZXJu IGludCBpa3NkY2Y7Ci0jZW5kaWYgLyogSUtTRENPTkYgKi8KLQotI2lmZGVmIENLX0xPR0lOCi1l eHRlcm4gaW50IGlzZ3Vlc3Q7Ci0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLQotZXh0ZXJuIENLX09G Rl9UIHNlbmRzdGFydDsKLQotZXh0ZXJuIGNoYXIgKmNtYXJnLCAqY21hcmcyLCAqKmNtbGlzdCwg KmRmdHR5OwotCi1leHRlcm4gc3RydWN0IGtleXRhYiBmbnRhYltdOyBleHRlcm4gaW50IG5mbnRh YjsKLWV4dGVybiBzdHJ1Y3QgY2tfcCBwdGFiW05QUk9UT1NdOwotCi1pbnQgc25kY21kID0gMDsJ CS8qIExhc3QgY29tbWFuZCB3YXMgYSBTRU5ELWNsYXNzIGNvbW1hbmQuICovCi0KLWludCBnX3hm ZXJtb2RlID0gLTE7Ci1pbnQgZ19wcm90byAgPSAtMTsKLWludCBnX3VycHNpeiA9IC0xOwotaW50 IGdfc3BzaXpmID0gLTE7Ci1pbnQgZ19zcHNpeiAgPSAtMTsKLWludCBnX3Nwc2l6ciA9IC0xOwot aW50IGdfc3BtYXggID0gLTE7Ci1pbnQgZ193c2xvdHIgPSAtMTsKLWludCBnX3ByZWZpeGluZyA9 IC0xOwotaW50IGdfZm5jbnYgID0gLTE7Ci1pbnQgZ19mbnNwYXRoID0gLTE7Ci1pbnQgZ19mbnJw YXRoID0gLTE7Ci1pbnQgZ19mbmFjdCAgPSAtMTsKLWludCBnX2Rpc3BsYSA9IC0xOwotaW50IGdf c3BhdGggID0gLTE7Ci1pbnQgZ19ycGF0aCAgPSAtMTsKLWNoYXIgKiBnX3NmaWx0ZXIgPSBOVUxM OwotY2hhciAqIGdfcmZpbHRlciA9IE5VTEw7Ci0KLWV4dGVybiBpbnQgcGF0dGVybnM7Ci0jaWZk ZWYgUEFUVEVSTlMKLWV4dGVybiBjaGFyICp0eHRwYXR0ZXJuc1tdLCAqYmlucGF0dGVybnNbXTsK LWludCBnX3BhdHRlcm5zID0gLTE7Ci0jZW5kaWYgLyogUEFUVEVSTlMgKi8KLWludCBnX3NraXBi dXAgPSAtMTsKLQotI2lmZGVmIFBJUEVTRU5ECi1leHRlcm4gaW50IHVzZXBpcGVzLCBwaXBlc2Vu ZDsKLWV4dGVybiBjaGFyICogc25kZmlsdGVyOwotI2VuZGlmIC8qIFBJUEVTRU5EICovCi0KLSNp Zm5kZWYgTk9TUEwKLWV4dGVybiBpbnQgc25keGxvLCBzbmR4aGksIHNuZHhpbjsKLSNlbmRpZiAv KiBOT1NQTCAqLwotCi1leHRlcm4gY2hhciBmc3BlY1tdOwkJCS8qIE1vc3QgcmVjZW50IGZpbGVz cGVjICovCi1leHRlcm4gaW50IGZzcGVjbGVuOwkJCS8qIExlbmd0aCBvZiBmc3BlY1tdIGJ1ZmZl ciAqLwotCi0jaWZuZGVmIE5PRlJJTExTCi1leHRlcm4gaW50IHJtYWlsZjsJCQkvKiBNQUlMIGNv bW1hbmQgaXRlbXMgKi8KLWV4dGVybiBjaGFyIG9wdGJ1ZltdOwotI2VuZGlmIC8qIE5PRlJJTExT ICovCi0KLWV4dGVybiBpbnQKLSAgZW5fY3B5LCBlbl9jd2QsIGVuX2RlbCwgZW5fZGlyLCBlbl9m aW4sIGVuX2dldCwgZW5fYnllLCBlbl9tYWksIGVuX3ByaSwKLSAgZW5faG9zLCBlbl9yZW4sIGVu X3NlbiwgZW5fc3BhLCBlbl9zZXQsIGVuX3R5cCwgZW5fd2hvLCBlbl9yZXQsIGVuX3hpdCwKLSAg ZW5fbWtkLCBlbl9ybWQsIGVuX2FzZzsKLQotI2lmbmRlZiBOT01TRU5ECQkJCS8qIE11bHRpcGxl IFNFTkQgKi8KLWV4dGVybiBjaGFyICptc2ZpbGVzW107Ci1pbnQgZmlsZXNpbmxpc3QgPSAwOwkJ CS8qIEFuZCBBREQgLi4uICovCi1leHRlcm4gc3RydWN0IGZpbGVsaXN0ICogZmlsZWhlYWQ7Ci1l eHRlcm4gc3RydWN0IGZpbGVsaXN0ICogZmlsZXRhaWw7Ci1leHRlcm4gc3RydWN0IGZpbGVsaXN0 ICogZmlsZW5leHQ7Ci1leHRlcm4gaW50IGFkZGxpc3Q7Ci0jZW5kaWYgLyogTk9NU0VORCAqLwot Ci1zdGF0aWMgc3RydWN0IGtleXRhYiBhZGR0YWJbXSA9IHsKLSNpZmRlZiBQQVRURVJOUwotICAg IHsgImJpbmFyeS1wYXR0ZXJucyIsIEFERF9CSU4sIDAgfSwKLSNlbmRpZiAvKiBQQVRURVJOUyAq LwotI2lmbmRlZiBOT01TRU5ECi0gICAgeyAic2VuZC1saXN0IiwgQUREX1NORCwgMCB9LAotI2Vu ZGlmIC8qIE5PTVNFTkQgKi8KLSNpZmRlZiBQQVRURVJOUwotICAgIHsgInRleHQtcGF0dGVybnMi LCBBRERfVFhULCAwIH0sCi0jZW5kaWYgLyogUEFUVEVSTlMgKi8KLSAgICB7ICIiLCAwLCAwIH0K LX07Ci1zdGF0aWMgaW50IG5hZGR0YWIgPSBzaXplb2YoYWRkdGFiKS9zaXplb2Yoc3RydWN0IGtl eXRhYikgLSAxOwotCi0jaWZuZGVmIE5PQ1NFVFMKLXN0cnVjdCBrZXl0YWIgYXNzb2N0YWJbXSA9 IHsKLSAgICB7ICJmaWxlLWNoYXJhY3Rlci1zZXQiLCAgICAgQVNTT0NfRkMsIDAgfSwKLSAgICB7 ICJ0cmFuc2Zlci1jaGFyYWN0ZXItc2V0IiwgQVNTT0NfVEMsIDAgfSwKLSAgICB7ICJ4ZmVyLWNo YXJhY3Rlci1zZXQiLCAgICAgQVNTT0NfVEMsIENNX0lOViB9Ci19Owotc3RhdGljIGludCBuYXNz b2MgPSBzaXplb2YoYXNzb2N0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKTsKLWV4dGVybiBpbnQg YWZjc2V0W01BWEZDU0VUUysxXTsJCS8qIENoYXJhY3Rlci1zZXQgYXNzb2NpYXRpb25zICovCi1l eHRlcm4gaW50IGF4Y3NldFtNQVhUQ1NFVFMrMV07Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi0j aWZuZGVmIEFERENNRAotI2lmbmRlZiBOT01TRU5ECi0jZGVmaW5lIEFERENNRAotI2VuZGlmIC8q IE5PTVNFTkQgKi8KLSNpZm5kZWYgQUREQ01ECi0jaWZkZWYgUEFUVEVSTlMKLSNkZWZpbmUgQURE Q01ECi0jZW5kaWYgLyogUEFUVEVSTlMgKi8KLSNlbmRpZiAvKiBBRERDTUQgKi8KLSNlbmRpZiAv KiBBRERDTUQgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotLyogRXh0ZXJuYWwgS2VybWl0IFZh cmlhYmxlcywgc2VlIGNrbWFpbi5jIGZvciBkZXNjcmlwdGlvbi4gKi8KLQotZXh0ZXJuIHh4X3N0 cnAgeHhzdHJpbmc7Ci1leHRlcm4gbG9uZyB4dmVybnVtOwotCi1leHRlcm4gaW50IGxvY2FsLCB4 aXRzdGEsIGJpbmFyeSwgbXNnZmxnLCBlc2NhcGUsIGR1cGxleCwgcXVpZXQsIHRsZXZlbCwKLSAg cGZsYWcsIHppbmNudCwgY2t4ZWNoLCBjYXJyaWVyLCB3aGF0LCBub3B1c2gsIGhhdmVsaW5lLCBi eWVfYWN0aXZlOwotI2lmZGVmIFROQ09ERQotZXh0ZXJuIGludCBkZWJzZXM7Ci1leHRlcm4gY2hh ciB0bl9tc2dbXTsKLSNlbmRpZiAvKiBUTkNPREUgKi8KLQotaW50IHNsZWVwY2FuID0gMTsKLWlu dCBnX2JpbmFyeSA9IC0xOwotaW50IGdfcmVjdXJzaXZlID0gLTE7Ci1pbnQgZ19tYXRjaGRvdCA9 IC0xOwotZXh0ZXJuIGludCBub2xpbmtzOwotCi1leHRlcm4gbG9uZyB2ZXJudW07Ci1leHRlcm4g Y2hhciAqdmVyc2lvLCAqY29weXJpZ2h0W107Ci1leHRlcm4gY2hhciAqY2t4c3lzOwotI2lmbmRl ZiBOT0hFTFAKLWV4dGVybiBjaGFyICppbnRyb3R4dFtdOwotZXh0ZXJuIGNoYXIgKm5ld3N0eHRb XTsKLSNlbmRpZiAvKiBOT0hFTFAgKi8KLQotI2lmbmRlZiBPUzIKLSNpZm5kZWYgVU5JWAotZXh0 ZXJuIGNoYXIgKlBXRENNRDsKLSNlbmRpZiAvKiBVTklYICovCi1leHRlcm4gY2hhciAqV0hPQ01E OwotI2VuZGlmIC8qIE9TMiAqLwotCi1leHRlcm4gY2hhciB0dG5hbWVbXTsKLQotZXh0ZXJuIENI QVIgc3N0YXRlOwotCi1leHRlcm4gaW50IG5ldHdvcms7CQkJLyogSGF2ZSBhY3RpdmUgbmV0d29y ayBjb25uZWN0aW9uICovCi1leHRlcm4gaW50IG5ldHR5cGU7CQkJLyogVHlwZSBvZiBuZXR3b3Jr ICovCi1leHRlcm4gaW50IHR0bnByb3RvOyAgICAgICAgICAgICAgICAgICAgLyogTkVUX1RDUEIg cHJvdG9jb2wgKi8KLQotI2lmbmRlZiBOT0RJQUwKLWV4dGVybiBpbnQgZGlhbHN0YSwgZGlhbGF0 bW8sIGRpYWxjb24sIGRpYWxjcTsgLyogRElBTCBzdGF0dXMsIGV0Yy4gKi8KLSNlbmRpZiAvKiBO T0RJQUwgKi8KLQotI2lmZGVmIENLX0FQQwotZXh0ZXJuIGludCBhcGNhY3RpdmUsIGFwY3N0YXR1 czsKLSNlbmRpZiAvKiBDS19BUEMgKi8KLQotI2lmbmRlZiBOT1BVU0gKLSNpZm5kZWYgTk9GUklM TFMKLWV4dGVybiBjaGFyIGVkaXRvcltdOwotZXh0ZXJuIGNoYXIgZWRpdG9wdHNbXTsKLWV4dGVy biBjaGFyIGVkaXRmaWxlW107Ci0jZW5kaWYgLyogTk9GUklMTFMgKi8KLSNlbmRpZiAvKiBOT1BV U0ggKi8KLQotI2lmZGVmIEJST1dTRVIKLWV4dGVybiBjaGFyIGJyb3dzZXJbXTsJCQkvKiBXZWIg YnJvd3NlciBhcHBsaWNhdGlvbiAqLwotZXh0ZXJuIGNoYXIgYnJvd3NvcHRzW107CQkvKiBXZWIg YnJvd3NlciBvcHRpb25zICovCi1leHRlcm4gY2hhciBicm93c3VybFtdOwkJCS8qIE1vc3QgcmVj ZW50IFVSTCAqLwotI2VuZGlmIC8qIEJST1dTRVIgKi8KLSNpZm5kZWYgTk9GVFAKLWNoYXIgZnRw YXBwW0NLTUFYUEFUSCsxXSA9IHsgTlVMLCBOVUwgfTsgLyogZnRwIGV4ZWN1dGFibGUgKi8KLWNo YXIgZnRwb3B0c1sxMjhdID0geyBOVUwsIE5VTCB9OwkvKiBmdHAgY29tbWFuZC1saW5lIG9wdGlv bnMgKi8KLSNlbmRpZiAvKiBOT0ZUUCAqLwotZXh0ZXJuIHN0cnVjdCBrZXl0YWIgb25vZmZbXTsJ CS8qIE9uL09mZiBrZXl3b3JkIHRhYmxlICovCi0KLSNpZmRlZiBDS19UTVBESVIKLWludCBmX3Rt cGRpciA9IDA7CQkJLyogRGlyZWN0b3J5IGNoYW5nZWQgdGVtcG9yYXJpbHkgKi8KLWNoYXIgc2F2 ZGlyW1RNUERJUkxFTl07CQkJLyogRm9yIHNhdmluZyBjdXJyZW50IGRpcmVjdG9yeSAqLwotI2Vu ZGlmIC8qIENLX1RNUERJUiAqLwotCi1pbnQgYWN0aXZlY21kID0gLTE7CQkJLyogS2V5d29yZCBp bmRleCBvZiBhY3RpdmUgY29tbWFuZCAqLwotaW50IGRvY29ueCA9IC0xOwkJCS8qIENPTk5FQ1Qt Y2xhc3MgY29tbWFuZCBhY3RpdmUgKi8KLWludCBvb2ZsYWcgPSAwOwkJCQkvKiBVc2VyLXNldHRh YmxlIG9uL29mZiBmbGFnICovCi0KLWludCByY2ZsYWcgPSAwOwkJCQkvKiBQb2ludGVyIHRvIGhv bWUgZGlyZWN0b3J5IHN0cmluZyAqLwotaW50IHJlcGFycywJCQkJLyogUmVwYXJzZSBuZWVkZWQg Ki8KLSAgICB0ZWNobyA9IDA7CQkJCS8qIFRha2UgZWNobyAqLwotaW50IHNlY2hvID0gMTsJCQkJ LyogU0NSSVBUIGVjaG8gKi8KLQotaW50IHhpdHdhcm4gPQkJCS8qIFdhcm4gYWJvdXQgb3BlbiBj b25uZWN0aW9uIG9uIGV4aXQgKi8KLSNpZmRlZiBOT1dBUk4KLTAKLSNlbHNlCi0xCi0jZW5kaWYg LyogTk9XQVJOICovCi07Ci0KLXN0cnVjdCBrZXl0YWIgb25vZmZzd1tdID0gewotICAgIHsgIi9v ZmYiLCAwLCAwIH0sCi0gICAgeyAiL29uIiwgIDEsIDAgfQotfTsKLQotI2lmZGVmIENLRVhFQwot c3RydWN0IGtleXRhYiByZWRpcnN3W10gPSB7Ci0gICAgeyAiL3JlZGlyZWN0IiwgMSwgMCB9Ci19 OwotI2VuZGlmIC8qIENLRVhFQyAqLwotCi0jaWZuZGVmIE5PWE1JVAotLyogVmFyaWFibGVzIGZv ciBUUkFOU01JVCBjb21tYW5kICovCi0KLWludCB4bWl0eCA9IDE7CQkJLyogV2hldGhlciB0byBl Y2hvIGR1cmluZyBUUkFOU01JVCAqLwotaW50IHhtaXRmID0gMDsJCQkvKiBDaGFyYWN0ZXIgdG8g ZmlsbCBlbXB0eSBsaW5lcyAqLwotaW50IHhtaXRsID0gMDsJCQkvKiAwID0gRG9uJ3Qgc2VuZCBs aW5lZmVlZCB0b28gKi8KLWludCB4bWl0cCA9IExGOwkJCS8qIEhvc3QgbGluZSBwcm9tcHQgKi8K LWludCB4bWl0cyA9IDA7CQkJLyogVXNlIHNoaWZ0LWluL3NoaWZ0LW91dCwgMCA9IG5vICovCi1p bnQgeG1pdHcgPSAwOwkJCS8qIE1pbGxpc2Vjb25kcyB0byBwYXVzZSBkdXJpbmcgVFJBTlNNSVQg Ki8KLWludCB4bWl0dCA9IDE7CQkJLyogU2Vjb25kcyB0byB3YWl0IGZvciBlYWNoIGNoYXIgdG8g ZWNobyAqLwotaW50IHhtaXRhID0gMTsJCQkvKiBBY3Rpb24gdXBvbiB0aW1lb3V0ICovCi0KLSNk ZWZpbmUgWE1JX0JJTiAxCi0jZGVmaW5lIFhNSV9UWFQgMgotI2RlZmluZSBYTUlfQ01EIDMKLSNk ZWZpbmUgWE1JX1RSQSA0Ci0jZGVmaW5lIFhNSV9WUkIgNQotI2RlZmluZSBYTUlfUVVJIDYKLSNk ZWZpbmUgWE1JX05PVyA3Ci0jZGVmaW5lIFhNSV9OT0UgOAotCi1zdGF0aWMgc3RydWN0IGtleXRh YiB4bWl0c3dbXSA9IHsJLyogVFJBTlNNSVQgY29tbWFuZCBvcHRpb25zICovCi0gICAgeyAiL2Jp bmFyeSIsICAgICAgICAgIFhNSV9CSU4sIDAgfSwKLSNpZmRlZiBQSVBFU0VORAotICAgIHsgIi9j b21tYW5kIiwgICAgICAgICBYTUlfQ01ELCBDTV9JTlZ8Q01fUFNIIH0sCi0jZW5kaWYgLyogUElQ RVNFTkQgKi8KLSAgICB7ICIvbm9lY2hvIiwgICAgICAgICAgWE1JX05PRSwgMCB9LAotICAgIHsg Ii9ub3dhaXQiLCAgICAgICAgICBYTUlfTk9XLCAwIH0sCi0jaWZkZWYgUElQRVNFTkQKLSAgICB7 ICIvcGlwZSIsICAgICAgICAgICAgWE1JX0NNRCwgMCB9LAotI2VuZGlmIC8qIFBJUEVTRU5EICov Ci0jaWZkZWYgQ09NTUVOVAotICAgIHsgIi9xdWlldCIsICAgICAgICAgICBYTUlfUVVJLCAwIH0s Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIHsgIi90ZXh0IiwgICAgICAgICAgICBYTUlfVFhU LCAwIH0sCi0gICAgeyAiL3RyYW5zcGFyZW50IiwgICAgIFhNSV9UUkEsIDAgfSwKLSNpZmRlZiBD T01NRU5UCi0gICAgeyAiL3ZlcmJvc2UiLCAgICAgICAgIFhNSV9WUkIsIDAgfSwKLSNlbmRpZiAv KiBDT01NRU5UICovCi0gICAgeyAiIiwgMCwgMCB9Ci19OwotI2RlZmluZSBOWE1JVFNXIHNpemVv Zih4bWl0c3cpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKSAtIDEKLXN0YXRpYyBpbnQgbnhtaXRzdyA9 IE5YTUlUU1c7Ci0KLSNlbmRpZiAvKiBOT1hNSVQgKi8KLQotLyogRGVjbGFyYXRpb25zIGZyb20g Y2s/ZmlvLmMgbW9kdWxlICovCi0KLWV4dGVybiBjaGFyICpTUEFDTUQsICpTUEFDTTI7CQkvKiBT UEFDRSBjb21tYW5kcyAqLwotCi0vKiBDb21tYW5kLW9yaWVudGVkIGl0ZW1zICovCi0KLSNpZmRl ZiBEQ01EQlVGCi1leHRlcm4gY2hhciAqY21kYnVmOwkJCS8qIENvbW1hbmQgYnVmZmVycyAqLwot ZXh0ZXJuIGNoYXIgKmF0bWJ1ZjsKLWV4dGVybiBjaGFyICpsaW5lOwkJCS8qIENoYXJhY3RlciBi dWZmZXIgZm9yIGFueXRoaW5nICovCi1leHRlcm4gY2hhciAqdG1wYnVmOwkJCS8qIFNob3J0IHRl bXBvcmFyeSBzdHJpbmcgYnVmZmVyICovCi1leHRlcm4gaW50ICppZmNtZDsKLWV4dGVybiBpbnQg KmludGltZTsKLWV4dGVybiBpbnQgKmlucGNhczsKLSNlbHNlCi1leHRlcm4gY2hhciBjbWRidWZb XTsJCQkvKiBDb21tYW5kIGJ1ZmZlcnMgKi8KLWV4dGVybiBjaGFyIGF0bWJ1ZltdOwotZXh0ZXJu IGNoYXIgbGluZVtdOwkJCS8qIENoYXJhY3RlciBidWZmZXIgZm9yIGFueXRoaW5nICovCi1leHRl cm4gY2hhciB0bXBidWZbXTsJCQkvKiBUZW1wb3JhcnkgYnVmZmVyICovCi1leHRlcm4gaW50IGlm Y21kW107Ci1leHRlcm4gaW50IGludGltZVtdOwotZXh0ZXJuIGludCBpbnBjYXNbXTsKLSNlbmRp ZiAvKiBEQ01EQlVGICovCi0KLSNpZm5kZWYgTk9TUEwKLWV4dGVybiBjaGFyICogcHJzdHJpbmdb XTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi1jaGFyICpscDsJCQkJLyogUG9pbnRlciB0byBsaW5l IGJ1ZmZlciAqLwotCi0jaWZuZGVmIE5PU1BMCi1pbnQgdmFyZXZhbCA9IDE7CQkJLyogRXZhbHVh dGlvbiBtZXRob2QgKi8KLWludCB1bmttYWNybyA9IDA7CQkJLyogRmxhZyBmb3IgaW4gT05fVU5L Tk9XTl9DT01NQU5EICovCi1pbnQgb2xkZXZhbCA9IDA7Ci1jaGFyIGV2YWxidWZbMzNdOwkJCS8q IEVWQUxVQVRFIHJlc3VsdCAqLwotZXh0ZXJuIGNoYXIgKiBpbnBidWY7CQkJLyogQnVmZmVyIGZv ciBJTlBVVCBhbmQgUkVJTlBVVCAqLwotY2hhciAqaW5wYnA7CQkJCS8qIEFuZCBwb2ludGVyIHRv IHNhbWUgKi8KLWludCBtX2ZvdW5kOwkJCQkvKiBNSU5QVVQgcmVzdWx0ICovCi1pbnQgaV9hY3Rp dmUgPSAwOwkJCS8qIElOUFVUIGNvbW1hbmQgaXMgYWN0aXZlICovCi1jaGFyICptc1tNSU5QTUFY XTsJCQkvKiBQb2ludGVycyB0byBNSU5QVVQgc3RyaW5ncyAqLwotc3RhdGljIGludCBtcGluaXRl ZCA9IDA7CQkvKiBGbGFnIHRoZXkgaGF2ZSBiZWVuIGluaXRpYWxpemVkICovCi1zdGF0aWMgaW50 IG1wW01JTlBNQVhdOwkJCS8qIGFuZCBNSU5QVVQgZmxhZ3MgKi8KLWV4dGVybiBpbnQgZm5kaWFn cywgZm5lcnJvciwgZm5zdWNjZXNzOwkvKiBGdW5jdGlvbiBkaWFnbm9zdGljcyAqLwotI2lmbmRl ZiBOT1NFWFAKLWNoYXIgKiBsYXN0c2V4cCA9IE5VTEw7CQkJLyogUy1FeHByZXNzaW9ucyAqLwot Y2hhciAqIHNleHB2YWwgPSBOVUxMOwotaW50IHNleHBlY2hvID0gU0VUX0FVVE87Ci0jZW5kaWYg LyogTk9TRVhQICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotY2hhciBwc2F2ZVtQUk9NUFRMXSA9 IHsgTlVMIH07CQkvKiBGb3Igc2F2aW5nICYgcmVzdG9yaW5nIHByb21wdCAqLwotCi1leHRlcm4g aW50IHN1Y2Nlc3M7CQkJLyogQ29tbWFuZCBzdWNjZXNzL2ZhaWx1cmUgZmxhZyAqLwotZXh0ZXJu IGludCBjbWRsdmw7CQkJLyogQ3VycmVudCBwb3NpdGlvbiBpbiBjb21tYW5kIHN0YWNrICovCi0K LSNpZm5kZWYgTk9TUEwKLWludAkJCQkJLyogU0VUIElOUFVUIHBhcmFtZXRlcnMuICovCi0vKiBO b3RlLCBJTlBVVCBUSU1FT1VULCBpbnRpbWVbXSwgaXMgb24gdGhlIGNvbW1hbmQtbGV2ZWwgc3Rh Y2suICovCi0gIGluYnVmc2l6ZSA9IDAsCQkJLyogSU5QVVQgYnVmZmVyIHNpemUgKi8KLSAgaW5k ZWYgPSAxLAkJCQkvKiBkZWZhdWx0IHRpbWVvdXQsIHNlY29uZHMgKi8KLSAgaW5lY2hvID0gMSwJ CQkJLyogMSA9IGVjaG8gb24gKi8KLSAgaW5hdXRvZGwgPSAwLAkJCQkvKiBJTlBVVCBhdXRvZG93 bmxvYWQgKi8KLSAgaW5pbnRyID0gMSwJCQkJLyogSU5QVVQgaW50ZXJydXBpb24gYWxsb3dlZCAq LwotICBpbnNpbGVuY2UgPSAwOwkJCS8qIDAgPSBubyBzaWxlbmNlIGNvbnN0cmFpbnQgKi8KLQot I2lmZGVmIENLRkxPQVQKLUNLRkxPQVQgaW5zY2FsZSA9IDEuMDsJCQkvKiBUaW1lb3V0IHNjYWxl IGZhY3RvciAqLwotI2VuZGlmCS8qIENLRkxPQVQgKi8KLQotI2lmZGVmIE9TMgotaW50IGludGVy bSA9IDE7CQkJCS8qIFRlcm1pbmFsIGVtdWxhdG9yIGRpc3BsYXlzIGlucHV0ICovCi0jZW5kaWYg LyogT1MyICovCi1pbnQgbWFjbHZsID0gLTE7CQkJLyogTWFjcm8gbmVzdGluZyBsZXZlbCAqLwot aW50IG1lY2hvID0gMDsJCQkJLyogTWFjcm8gZWNobywgMCA9IGRvbid0ICovCi1jaGFyIHZhcm5h bVs2XTsJCQkJLyogRm9yIHZhcmlhYmxlIG5hbWVzICovCi1leHRlcm4gaW50IG1hY2FyZ2NbXTsJ CQkvKiBBUkdDIGZyb20gbWFjcm8gaW52b2NhdGlvbiAqLwotCi1leHRlcm4gY2hhciAqbV9hcmdb TUFDTEVWRUxdW05BUkdTXTsJLyogU3RhY2sgb2YgbWFjcm8gYXJndW1lbnRzICovCi1leHRlcm4g Y2hhciAqbXJ2YWxbXTsKLQotZXh0ZXJuIGNoYXIgKiphX3B0cltdOwkJCS8qIEFycmF5IHBvaW50 ZXJzICovCi1leHRlcm4gaW50IGFfZGltW107CQkJLyogQXJyYXkgZGltZW5zaW9ucyAqLwotZXh0 ZXJuIGludCBhX2xpbmtbXTsKLQotI2lmZGVmIERDTURCVUYKLWV4dGVybiBzdHJ1Y3QgY21kcHRy ICpjbWRzdGs7CQkvKiBUaGUgY29tbWFuZCBzdGFjayBpdHNlbGYgKi8KLSNlbHNlCi1leHRlcm4g c3RydWN0IGNtZHB0ciBjbWRzdGtbXTsJCS8qIFRoZSBjb21tYW5kIHN0YWNrIGl0c2VsZiAqLwot I2VuZGlmIC8qIERDTURCVUYgKi8KLQotbG9uZyBja19hbGFybSA9IDA7CQkJLyogU0VUIEFMQVJN IHZhbHVlICovCi1jaGFyIGFscm1fZGF0ZVsyNF0gPSB7ICcgJywnICcsJyAnLCcgJywnICcsJyAn LCcgJywnICcsJyAnIH07Ci1jaGFyIGFscm1fdGltZVsyNF0gPSB7ICcgJywnICcsJyAnLCcgJywn ICcsJyAnLCcgJyB9OwotCi1zdHJ1Y3Qga2V5dGFiIGlucHV0c3dbXSA9IHsKLSAgICB7ICIvY2xl YXIiLCAgIElOUFNXX0NMUiwgMCB9LAotICAgIHsgIi9jb3VudCIsICAgSU5QU1dfQ09VLCBDTV9B UkcgfSwKLSAgICB7ICIvbm9tYXRjaCIsIElOUFNXX05PTSwgMCB9LAotICAgIHsgIi9ub3dyYXAi LCAgSU5QU1dfTk9XLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5pbnB1dHN3ID0gc2l6ZW9mKGlucHV0 c3cpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKTsKLQotLyogVGhlIGZvbGxvd2luZyBzaG91bGQgYmUg cmVjb25jaWxlZCB3aXRoIHRoZSBhYm92ZSAqLwotCi0jaWZkZWYgQ09NTUVOVAkJCQkvKiBJTlBV VCBzd2l0Y2hlcyBub3QgdXNlZCB5ZXQuLi4gKi8KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGluc3d0 YWJbXSA9IHsKLSNpZmRlZiBDT01NRU5UCi0gICAgeyAiL2Fzc2lnbiIsICAgICAgIElOX0FTRywg Q01fQVJHIH0sCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIHsgIi9hdXRvZG93bmxvYWQiLCBJ Tl9BREwsIENNX0FSRyB9LAotICAgIHsgIi9jYXNlIiwgICAgICAgICBJTl9DQVMsIENNX0FSRyB9 LAotICAgIHsgIi9lY2hvIiwgICAgICAgICBJTl9FQ0gsIENNX0FSRyB9LAotICAgIHsgIi9pbnRl cnJ1cHRzIiwgICBJTl9OT0ksIENNX0FSRyB9LAotICAgIHsgIi9zaWxlbmNlIiwgICAgICBJTl9T SUwsIENNX0FSRyB9LAotI2lmZGVmIENPTU1FTlQKLSAgICB7ICIvcGF0dGVybiIsICAgICAgSU5f UEFULCBDTV9BUkcgfSwKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgeyAiIiwgMCwgMCB9Ci19 Owotc3RhdGljIGludCBuaW5zd3RhYiA9IChzaXplb2YoaW5zd3RhYikgLyBzaXplb2Yoc3RydWN0 IGtleXRhYikpIC0gMTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLQotI2VuZGlmIC8qIE5PU1BM ICovCi0KLXN0YXRpYyBpbnQgeCwgeSwgeiA9IDA7CQkJLyogTG9jYWwgd29ya2VycyAqLwotc3Rh dGljIGNoYXIgKnM7Ci0KLSNpZmRlZiBDS19NSU5QVVQKLXN0YXRpYyBjaGFyIGMxY2hhcnNbXSA9 IHsJCS8qIEMxIGNvbnRyb2wgY2hhcnMgZXNjZXB0IE5VTCAqLwotICAgIDAwMSwwMDIsMDAzLDAw NCwwMDUsMDA2LDAwNywwMTAsMDExLDAxMiwwMTMsMDE0LDAxNSwwMTYsMDE3LDAyMCwKLSAgICAw MjEsMDIyLDAyMywwMjQsMDI1LDAyNiwwMjcsMDMwLDAzMSwwMzIsMDMzLDAzNCwwMzUsMDM2LDAz NwotfTsKLSNlbmRpZiAvKiBDS19NSU5QVVQgKi8KLQotI2RlZmluZSB4c3lzdGVtKHMpIHpzeXNj bWQocykKLQotLyogVG9wLUxldmVsIEludGVyYWN0aXZlIENvbW1hbmQgS2V5d29yZCBUYWJsZSAq LwotLyogS2V5d29yZHMgbXVzdCBiZSBpbiBsb3dlcmNhc2UgYW5kIGluIGFscGhhYmV0aWNhbCBv cmRlci4gKi8KLQotc3RydWN0IGtleXRhYiBjbWR0YWJbXSA9IHsKLSNpZm5kZWYgTk9QVVNICi0g ICAgeyAiISIsCSAgIFhYU0hFLCBDTV9JTlZ8Q01fUFNIIH0sIC8qIFNoZWxsIGVzY2FwZSAqLwot I2Vsc2UKLSAgICB7ICIhIiwJICAgWFhOT1RBViwgQ01fSU5WfENNX1BTSCB9LAotI2VuZGlmIC8q IE5PUFVTSCAqLwotICAgIHsgIiMiLCAgICAJICAgWFhDT00sIENNX0lOViB9LAkvKiBDb21tZW50 ICovCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAiKCIsICAgICAgICAgICBYWFNFWFAsQ01fSU5WIH0s CS8qIFMtRXhwcmVzc2lvbiAqLwotICAgIHsgIi4iLCAgICAgICAgICAgWFhERUYsIENNX0lOViB9 LAkvKiBBc3NpZ25tZW50ICovCi0gICAgeyAiOiIsICAgICAgICAgICBYWExCTCwgQ01fSU5WIH0s CS8qIExhYmVsICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZmRlZiBDS19SRURJUgotI2lmbmRl ZiBOT1BVU0gKLSAgICB7ICI8IiwgICAgICAgICAgIFhYRlVOLCBDTV9JTlZ8Q01fUFNIIH0sIC8q IFJFRElSRUNUICovCi0jZWxzZQotICAgIHsgIjwiLCAgICAgICAgICAgWFhOT1RBViwgQ01fSU5W fENNX1BTSCB9LCAvKiBSRURJUkVDVCAqLwotI2VuZGlmIC8qIE5PUFVTSCAqLwotI2VuZGlmIC8q IENLX1JFRElSICovCi0jaWZuZGVmIE5PUFVTSAotICAgIHsgIkAiLCAgICAgICAgICAgWFhTSEUs IENNX0lOVnxDTV9QU0ggfSwgLyogRENMIGVzY2FwZSAqLwotI2Vsc2UKLSAgICB7ICJAIiwgICAg ICAgICAgIFhYTk9UQVYsIENNX0lOVnxDTV9QU0ggfSwgLyogRENMIGVzY2FwZSAqLwotI2VuZGlm IC8qIE5PUFVTSCAqLwotCi0jaWZkZWYgQ0tfUkVDQUxMCi0gICAgeyAiXiIsICAgICAgICAgICBY WFJFRE8sQ01fSU5WfENNX05PUiB9LCAvKiBTeW5vbnltIGZvciBSRURPICovCi0jZW5kaWYgLyog Q0tfUkVDQUxMICovCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAiX2FzZyIsICAgICAgICBYWEFTWCwg ICBDTV9JTlYgfSwJLyogVXNlZCBpbnRlcm5hbGx5IGJ5IEZPUiwgZXRjICovCi0gICAgeyAiX2Fz c2lnbiIsICAgICBYWEFTWCwgICBDTV9JTlYgfSwJLyogVXNlZCBpbnRlcm5hbGx5IGJ5IEZPUiwg ZXRjICovCi0gICAgeyAiX2RlY3JlbWVudCIsICBYWF9ERUNSLCBDTV9JTlYgfSwKLSAgICB7ICJf ZGVmaW5lIiwgICAgIFhYREZYLCAgIENNX0lOViB9LAkvKiBVc2VkIGludGVybmFsbHkgYnkgRk9S LCBldGMgKi8KLSAgICB7ICJfZXZhbHVhdGUiLCAgIFhYX0VWQUwsIENNX0lOViB9LAotICAgIHsg Il9mb3J3YXJkIiwgICAgWFhYRldELCAgQ01fSU5WIH0sCS8qIFVzZWQgaW50ZXJuYWxseSBieSBT V0lUQ0ggICAqLwotICAgIHsgIl9nZXRhcmdzIiwgICAgWFhHVEEsICAgQ01fSU5WIH0sCS8qIFVz ZWQgaW50ZXJuYWxseSBieSBGT1IsIGV0YyAqLwotICAgIHsgIl9pbmNyZW1lbnQiLCAgWFhfSU5D UiwgQ01fSU5WIH0sCi0gICAgeyAiX3B1dGFyZ3MiLCAgICBYWFBUQSwgICBDTV9JTlYgfSwJLyog VXNlZCBpbnRlcm5hbGx5IGJ5IEZPUiwgZXRjICovCi0gICAgeyAiX3VuZGVmaW5lIiwgICBYWFVO REZYLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0gICAgeyAiYWJvdXQiLCAgICAg ICBYWFZFUiwgICBDTV9JTlYgfSwJLyogU3lub255bSBmb3IgVkVSU0lPTiAqLwotI2lmbmRlZiBO T1NQTAotI2lmZGVmIE5FV0ZUUAotICAgIHsgImFjY291bnQiLCAgICAgWFhBQ0NULCAgQ01fSU5W IH0sIC8qIChGVFApIEFjY291bnQgKi8KLSNlbmRpZiAvKiBORVdGVFAgKi8KLSNpZmRlZiBBRERD TUQKLSAgICB7ICJhZGQiLCAgICAgICAgIFhYQURELCAwIH0sCS8qIEFERCAqLwotI2VuZGlmIC8q IEFERENNRCAqLwotI2lmbmRlZiBOT0RJQUwKLSAgICB7ICJhbnN3ZXIiLCAgICAgIFhYQU5TVywg Q01fTE9DIH0sCS8qIEFOU1dFUiB0aGUgcGhvbmUgKi8KLSNlbHNlCi0gICAgeyAiYW5zd2VyIiwg ICAgICBYWE5PVEFWLCBDTV9JTlZ8Q01fTE9DIH0sIC8qIEFOU1dFUiB0aGUgcGhvbmUgKi8KLSNl bmRpZiAvKiBOT0RJQUwgKi8KLSAgICB7ICJhcGMiLCAgICAgICAgIFhYQVBDLCAwIH0sCS8qIEFw cGxpY2F0aW9uIFByb2dyYW0gQ29tbWFuZCAqLwotI2lmbmRlZiBOT1NQTAotICAgIHsgImFycmF5 IiwgICAgICAgWFhBUlJBWSwgMCB9LAkvKiBBcnJheSBvcGVyYXRpb25zICovCi0jZW5kaWYgLyog Tk9TUEwgKi8KLSAgICB7ICJhc2NpaSIsICAgICAgIFhYQVNDLCBDTV9JTlYgfSwJLyogPT0gU0VU IEZJTEUgVFlQRSBURVhUICovCi0gICAgeyAiYXNnIiwgICAgICAgICBYWEFTUywgQ01fSU5WIH0s CS8qIEludmlzaWJsZSBzeW5vbnltIGZvciBBU1NJR04gKi8KLSAgICB7ICJhc2siLCAgICAgICAg IFhYQVNLLCAwIH0sCS8qIEFTSyBmb3IgdGV4dCwgYXNzaWduIHRvIHZhcmlhYmxlICovCi0gICAg eyAiYXNrcSIsICAgICAgICBYWEFTS1EsMCB9LAkvKiBBU0sgcXVpZXRseSAobm8gZWNobykgKi8K LSNpZm5kZWYgTk9TUEwKLSAgICB7ICJhc3MiLCAgICAgICAgIFhYQVNTLCBDTV9JTlZ8Q01fQUJS IH0sIC8qIEFTU0lHTiAqLwotICAgIHsgImFzc2VydCIsICAgICAgWFhBU1NFUiwgQ01fSU5WIH0s CS8qIEFTU0VSVCAqLwotICAgIHsgImFzc2lnbiIsICAgICAgWFhBU1MsIDAgfSwJLyogQVNTSUdO ICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZm5kZWYgTk9YRkVSCi0jaWZuZGVmIE5PQ1NFVFMK LSAgICB7ICJhc3NvY2lhdGUiLCAgIFhYQVNTT0MsIDAgfSwJLyogQVNTT0NJQVRFICovCi0jZWxz ZQotICAgIHsgImFzc29jaWF0ZSIsICAgWFhOT1RBViwgQ01fSU5WIH0sCS8qIEFTU09DSUFURSAq LwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSNpZmRlZiBDS19L RVJCRVJPUwotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0gICAgeyAiYXV0aGVudGljYXRlIixY WEFVVEgsIDAgfSwJLyogQXV0aGVudGljYXRpb24gKi8KLSNlbHNlCi0gICAgeyAiYXV0aGVudGlj YXRlIixYWEFVVEgsIENNX0lOViB9LAotI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCi0j ZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotI2lmbmRlZiBOT0ZS SUxMUwotICAgIHsgImJhY2siLCAgICAgICAgWFhCQUNLLCAwIH0sCS8qIEJBQ0sgdG8gcHJldmlv dXMgZGlyZWN0b3J5ICovCi0jZWxzZQotICAgIHsgImJhY2siLCAgICAgICAgWFhOT1RBVixDTV9J TlYgfSwKLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotICAgIHsgImJlZXAiLCAgICAgICAgWFhCRUVQ LENNX0lOViB9LAkvKiBCRUVQICovCi0jaWZuZGVmIE5PWEZFUgotICAgIHsgImJpbmFyeSIsICAg ICAgWFhCSU4sIENNX0lOViB9LAkvKiA9PSBTRVQgRklMRSBUWVBFIEJJTkFSWSAqLwotI2VuZGlm IC8qIE5PWEZFUiAqLwotI2lmbmRlZiBOT0ZSSUxMUwotICAgIHsgImJ1ZyIsICAgICAgICAgWFhC VUcsIENNX0lOViB9LAkvKiBCVUcgcmVwb3J0IGluc3RydWN0aW9ucyAqLwotI2Vsc2UKLSAgICB7 ICJidWciLCAgICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAotI2VuZGlmIC8qIE5PRlJJTExTICov Ci0jaWZkZWYgQlJPV1NFUgotICAgIHsgImJyb3dzZSIsICAgICAgWFhCUk9XUywgQ01fUFNIfENN X0xPQyB9LCAvKiBCUk9XU0UgKHN0YXJ0IGJyb3dzZXIpICovCi0jZWxzZQotICAgIHsgImJyb3dz ZSIsICAgICAgWFhOT1RBViwgQ01fSU5WfENNX1BTSHxDTV9MT0MgfSwKLSNlbmRpZiAvKiBCUk9X U0VSICovCi0jaWZuZGVmIE5PWEZFUgotICAgIHsgImJ5ZSIsICAgICAgICAgWFhCWUUsIDAgfSwJ LyogQllFIHRvIHJlbW90ZSBzZXJ2ZXIgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSNpZm5kZWYg Tk9MT0NBTAotICAgIHsgImMiLCAgICAgICAgICAgWFhDT04sIENNX0lOVnxDTV9BQlJ8Q01fTE9D IH0sIC8qIChDT05ORUNUKSAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNpZm5kZWYgTk9GUklM TFMKLSAgICB7ICJjYXQiLCAgICAgICAgIFhYQ0FULCBDTV9JTlYgfSwJLyogSW52aXNpYmxlIHN5 bm9ueW0gZm9yIFRZUEUgKi8KLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotI2lmbmRlZiBOT1NQTAot Ci0jaWZuZGVmIE5PWEZFUgotICAgIHsgImNhdXRpb3VzIiwgICAgWFhDQVUsIENNX0lOViB9LAot I2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotICAgIHsgImNkIiwg ICAgICAgICAgWFhDV0QsIDAgfSwJLyogQ2hhbmdlIERpcmVjdG9yeSAqLwotICAgIHsgImNkdXAi LCAgICAgICAgWFhDRFVQLCBDTV9JTlYgfSwJLyogQ2hhbmdlIERpcmVjdG9yeSBVcCAqLwotCi0j aWZuZGVmIE5PWEZFUgotI2lmZGVmIFBJUEVTRU5ECi0gICAgeyAiY2dldCIsICAgICAgICBYWENH RVQsIENNX0lOVnxDTV9QU0ggfSwgLyogQ0dFVCAqLwotI2Vsc2UKLSAgICB7ICJjZ2V0IiwgICAg ICAgIFhYTk9UQVYsIENNX0lOVnxDTV9QU0ggfSwgLyogQ0dFVCAqLwotI2VuZGlmIC8qIFBJUEVT RU5EICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0gICAgeyAiY2giLCAgICAgICAgICBYWENISywg ICBDTV9JTlZ8Q01fQUJSIH0sCi0gICAgeyAiY2hlY2siLCAgICAgICBYWENISywgICAwIH0sCS8q IENIRUNLIGZvciBhIGZlYXR1cmUgKi8KLSNpZmRlZiBDS19QRVJNUwotI2lmZGVmIFVOSVgKLSAg ICB7ICJjaG1vZCIsICAgICAgIFhYQ0hNT0QsIDAgfSwJLyogQ0hNT0QgKi8KLSNlbHNlCi0gICAg eyAiY2htb2QiLCAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBVTklYICovCi0j ZWxzZQotICAgIHsgImNobW9kIiwgICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCi0jZW5kaWYgLyog Q0tfUEVSTVMgKi8KLSNpZmRlZiBDS1JPT1QKLSAgICB7ICJjaHJvb3QiLCAgICAgIFhYQ0hSVCwg IENNX0lOViB9LAkvKiBDSFJPT1QgKi8KLSNlbmRpZiAvKiBDS1JPT1QgKi8KLSAgICB7ICJja2Vy bWl0IiwgICAgIFhYS0VSTUksIENNX0lOViB9LAkvKiBDS0VSTUlUIChsaWtlIEtFUk1JVCkgKi8K LSAgICB7ICJjbCIsICAgICAgICAgIFhYQ0xPLCAgIENNX0FCUnxDTV9JTlYgfSwKLSNpZm5kZWYg Tk9GUklMTFMKLSAgICB7ICJjbGVhciIsICAgICAgIFhYQ0xFLCAwIH0sCS8qIENMRUFSIGlucHV0 IGFuZC9vciBkZXZpY2UgYnVmZmVyICovCi0jZWxzZQotICAgIHsgImNsZWFyIiwgICAgICAgWFhO T1RBViwgQ01fSU5WIH0sCi0jZW5kaWYgLyogTk9GUklMTFMgKi8KLSAgICB7ICJjbG9zZSIsCSAg ICAgWFhDTE8sIDAgfSwJLyogQ0xPU0UgYSBsb2cgb3Igb3RoZXIgZmlsZSAqLwotICAgIHsgImNs cyIsICAgICAgICAgWFhDTFMsIENNX0lOViB9LAkvKiBDbGVhciBTY3JlZW4gKENMUykgKi8KLSAg ICB7ICJjb21tZW50IiwgICAgIFhYQ09NLCBDTV9JTlYgfSwJLyogSW50cm9kdWNlIGEgY29tbWVu dCAqLwotI2lmbmRlZiBOT0xPQ0FMCi0gICAgeyAiY29ubmVjdCIsICAgICBYWENPTiwgQ01fTE9D IH0sCS8qIEJlZ2luIHRlcm1pbmFsIGNvbm5lY3Rpb24gKi8KLSNlbHNlCi0gICAgeyAiY29ubmVj dCIsICAgICBYWE5PVEFWLCBDTV9MT0MgfSwKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0gICAgeyAi Y29udGludWUiLCAgICBYWENPTlQsICBDTV9JTlYgfSwJLyogQ09OVElOVUUgKi8KLSNpZm5kZWYg Tk9GUklMTFMKLSNpZmRlZiBaQ09QWQotICAgIHsgImNvIiwgICAgICAgICAgWFhDUFksIENNX0lO VnxDTV9BQlIgfSwKLSAgICB7ICJjb3AiLCAgICAgICAgIFhYQ1BZLCBDTV9JTlZ8Q01fQUJSIH0s Ci0gICAgeyAiY29weSIsICAgICAgICBYWENQWSwgMCB9LAkvKiBDT1BZIGEgZmlsZSAqLwotI2Vs c2UKLSAgICB7ICJjb3B5IiwgICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAotI2VuZGlmIC8qIFpD T1BZICovCi0gICAgeyAiY29weXJpZ2h0IiwgICBYWENQUiwgQ01fSU5WIH0sCS8qIENPUFlSSUdI VCAqLwotI2lmZGVmIFpDT1BZCi0gICAgeyAiY3AiLCAgICAgICAgICBYWENQWSwgQ01fSU5WIH0s CS8qIENPUFkgYSBmaWxlICovCi0jZW5kaWYgLyogWkNPUFkgKi8KLSNpZm5kZWYgTk9MT0NBTAot I2lmbmRlZiBPUzIKLSAgICB7ICJjcSIsICAgICAgICAgIFhYQ1EsIENNX0lOVnxDTV9MT0MgfSwg LyogQ1EgKGNvbm5lY3QgcXVpZXRseSkgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBO T0xPQ0FMICovCi0jaWZuZGVmIE5PWEZFUgotI2lmZGVmIFBJUEVTRU5ECi0gICAgeyAiY3JlY2Vp dmUiLCAgICBYWENSRUMsQ01fSU5WfENNX1BTSCB9LCAvKiBSRUNFSVZFIHRvIGEgY29tbWFuZCAq LwotICAgIHsgImNzZW5kIiwgICAgICAgWFhDU0VOLENNX0lOVnxDTV9QU0ggfSwgLyogU0VORCBm cm9tIGNvbW1hbmQgKi8KLSNlbHNlCi0gICAgeyAiY3JlY2VpdmUiLCAgICBYWE5PVEFWLENNX0lO VnxDTV9QU0ggfSwKLSAgICB7ICJjc2VuZCIsICAgICAgIFhYTk9UQVYsQ01fSU5WfENNX1BTSCB9 LAotI2VuZGlmIC8qIFBJUEVTRU5EICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0jZW5kaWYgLyog Tk9GUklMTFMgKi8KLQotICAgIHsgImN3ZCIsCSAgICAgWFhDV0QsICAgQ01fSU5WIH0sCS8qIFRy YWRpdGlvbmFsIHN5bm9ueW0gZm9yIGNkICovCi0KLSNpZm5kZWYgTk9TUEwKLSAgICB7ICJkYXRl IiwgICAgICAgIFhYREFURSwgIDAgfSwJLyogREFURSAqLwotICAgIHsgImRjbCIsICAgICAgICAg WFhEQ0wsICAgQ01fSU5WIH0sCS8qIERFQ0xBUkUgYW4gYXJyYXkgKHNlZSBBUlJBWSkgKi8KLSAg ICB7ICJkZWJ1ZyIsICAgICAgIFhYREVCVUcsIDAgfSwJLyogUHJpbnQgYSBkZWJ1Z2dpbmcgbXNn IFs5LjBdICAqLwotICAgIHsgImRlY2xhcmUiLCAgICAgWFhEQ0wsICAgQ01fSU5WIH0sCS8qIERF Q0xBUkUgYW4gYXJyYXkgKHNlZSBBUlJBWSkgKi8KLSAgICB7ICJkZWNyZW1lbnQiLCAgIFhYREVD LCAgIDAgfSwJLyogREVDUkVNRU5UIGEgbnVtZXJpYyB2YXJpYWJsZSAqLwotICAgIHsgImRlZmlu ZSIsICAgICAgWFhERUYsICAgMCB9LAkvKiBERUZJTkUgYSBtYWNybyBvciB2YXJpYWJsZSAgICov Ci0jZWxzZQotICAgIHsgImRhdGUiLCAgICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCi0gICAgeyAi ZGNsIiwgICAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKLSAgICB7ICJkZWNsYXJlIiwgICAgIFhY Tk9UQVYsIENNX0lOViB9LAotICAgIHsgImRlY3JlbWVudCIsICAgWFhOT1RBViwgQ01fSU5WIH0s Ci0gICAgeyAiZGVmaW5lIiwgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBOT1NQ TCAqLwotCi0jaWZuZGVmIE5PRlJJTExTCi0gICAgeyAiZGVsZXRlIiwgICAgICBYWERFTCwgMCB9 LAkvKiBERUxFVEUgYSBmaWxlICovCi0jZWxzZQotICAgIHsgImRlbGV0ZSIsICAgICAgWFhOT1RB ViwgQ01fSU5WIH0sCi0jZW5kaWYgLyogTk9GUklMTFMgKi8KLQotI2lmbmRlZiBOT0RJQUwKLSAg ICB7ICJkaWFsIiwgICAgICAgIFhYRElBTCwgIENNX0xPQyB9LAkvKiBESUFMIGEgcGhvbmUgbnVt YmVyICovCi0jZWxzZQotICAgIHsgImRpYWwiLCAgICAgICAgWFhOT1RBViwgQ01fSU5WfENNX0xP QyB9LAotI2VuZGlmIC8qIE5PRElBTCAqLwotCi0jaWZkZWYgTlQKLSAgICB7ICJkaWFsZXIiLCAg ICAgIFhYRElBTEVSLCBDTV9JTlYgfSwgLyogSzk1IERpYWxlciAqLwotI2VuZGlmIC8qIE5UICov Ci0KLSAgICB7ICJkaXJlY3RvcnkiLCAgIFhYRElSLCAwIH0sCS8qIERJUkVDVE9SWSBvZiBmaWxl cyAqLwotCi0jaWZuZGVmIE5PRlJJTExTCi0jaWZuZGVmIE5PU0VSVkVSCi0gICAgeyAiZGlzYWJs ZSIsICAgICBYWERJUywgMCB9LAkvKiBESVNBQkxFIGEgc2VydmVyIGZ1bmN0aW9uICovCi0jZWxz ZQotICAgIHsgImRpc2FibGUiLCAgICAgWFhOT1RBViwgQ01fSU5WIH0sCi0jZW5kaWYgLyogTk9T RVJWRVIgKi8KLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAi ZG8iLCAgICAgICAgICBYWERPLCAgMCB9LAkvKiBETyAoZXhlY3V0ZSkgYSBtYWNybyAqLwotI2Vs c2UKLSAgICB7ICJkbyIsICAgICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAotI2VuZGlmIC8qIE5P U1BMICovCi0KLSAgICB7ICJlIiwgICAgICAgICAgIFhYRVhJLCBDTV9JTlZ8Q01fQUJSIH0sCi0K LSNpZm5kZWYgTk9GUklMTFMKLSNpZm5kZWYgTk9YRkVSCi0gICAgeyAiZS1wYWNrZXQiLCAgICBY WEVSUiwgQ01fSU5WIH0sCS8qIFNlbmQgYW4gRXJyb3ItUGFja2V0ICovCi0jZW5kaWYgLyogTk9Y RkVSICovCi0jZW5kaWYgLyogTk9GUklMTFMgKi8KLQotICAgIHsgImVjaG8iLCAgICAgICAgWFhF Q0gsIDAgfSwJLyogRUNITyB0ZXh0ICovCi0KLSNpZm5kZWYgTk9GUklMTFMKLSNpZm5kZWYgTk9Q VVNICi0gICAgeyAiZWRpdCIsICAgICAgICBYWEVESVQsIENNX1BTSCB9LAkvKiBFRElUICovCi0j ZWxzZQotICAgIHsgImVkaXQiLCAgICAgICAgWFhOT1RBViwgQ01fSU5WfENNX1BTSCB9LCAvKiBF RElUICovCi0jZW5kaWYgLyogTk9QVVNIICovCi0jZW5kaWYgLyogTk9GUklMTFMgKi8KLQotICAg IHsgImVpZ2h0Yml0IiwgICAgWFhFSUdIVCwgQ01fSU5WIH0sCS8qIEVJR0hUQklUICovCi0KLSNp Zm5kZWYgTk9TUEwKLSAgICB7ICJlbHNlIiwgICAgICAgIFhYRUxTLCBDTV9JTlYgfSwJLyogRUxT RSBwYXJ0IG9mIElGIHN0YXRlbWVudCAqLwotI2Vsc2UKLSAgICB7ICJlbHNlIiwgICAgICAgIFhY Tk9UQVYsIENNX0lOViB9LAkvKiBFTFNFIHBhcnQgb2YgSUYgc3RhdGVtZW50ICovCi0jZW5kaWYg LyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT1NFUlZFUgotI2lmbmRlZiBOT0ZSSUxMUwotICAgIHsg ImVuYWJsZSIsICAgICAgWFhFTkEsICAwIH0sCS8qIEVOQUJMRSBhIHNlcnZlciBmdW5jdGlvbiAq LwotI2Vsc2UKLSAgICB7ICJlbmFibGUiLCAgICAgIFhYTk9UQVYsIENNX0lOViB9LAotI2VuZGlm IC8qIE5PRlJJTExTICovCi0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLQotI2lmbmRlZiBOT1NQTAot ICAgIHsgImVuZCIsICAgICAgICAgWFhFTkQsICAwIH0sCS8qIEVORCBjb21tYW5kIGZpbGUgb3Ig bWFjcm8gKi8KLSNlbHNlCi0gICAgeyAiZW5kIiwgICAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwK LSNlbmRpZiAvKiBOT1NQTCAqLwotCi0gICAgeyAiZXJhc2UiLCAgICAgICBYWERFTCwgQ01fSU5W IH0sCS8qIFN5bm9ueW0gZm9yIERFTEVURSAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAiZXZh bHVhdGUiLCAgICBYWEVWQUwsIDAgfSwJLyogRVZBTFVBVEUgKi8KLSNlbHNlCi0gICAgeyAiZXZh bHVhdGUiLCAgICBYWE5PVEFWLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0gICAg eyAiZXgiLCAgICAgICAgICBYWEVYSSwgQ01fSU5WfENNX0FCUiB9LCAvKiBMZXQgImV4IiBzdGls bCBiZSBFWElUICovCi0KLSNpZmRlZiBDS0VYRUMKLSAgICB7ICJleGVjIiwgICAgICAgIFhYRVhF QywgQ01fSU5WfENNX0xPQyB9LCAvKiBleGVjKCkgKi8KLSNlbHNlCi0gICAgeyAiZXhlYyIsICAg ICAgICBYWE5PVEFWLCBDTV9JTlZ8Q01fTE9DIH0sCi0jZW5kaWYgLyogQ0tFWEVDICovCi0KLSAg ICB7ICJleGl0IiwJICAgWFhFWEksIDAgfSwJCS8qIEVYSVQgZnJvbSBDLUtlcm1pdCAqLwotICAg IHsgImV4dGVuZGVkLW9wdGlvbnMiLCBYWFhPUFRTLENNX0lOVnxDTV9ITFAgfSwgLyogRXh0ZW5k ZWQtT3B0aW9ucyAqLwotCi0jaWZkZWYgT1MyCi0gICAgeyAiZXh0cHJvYyIsICAgICBYWENPTSwg Q01fSU5WIH0sCS8qIER1bW15IGNvbW1hbmQgZm9yIE9TLzIgKi8KLSNlbmRpZiAvKiBPUzIgKi8K LQotI2lmbmRlZiBOT1hGRVIKLSAgICB7ICJmIiwgICAgICAgICAgIFhYRklOLCBDTV9JTlZ8Q01f QUJSIH0sIC8qIEludmlzaWJsZSBhYmJyZXYgZm9yIEZJTiAqLwotI2VuZGlmIC8qIE5PWEZFUiAq LwotCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAiZmFpbCIsICAgICAgICBYWEZBSUwsIENNX0lOViB9 LAkvKiBGQUlMICovCi0KLSNpZm5kZWYgTk9YRkVSCi0gICAgeyAiZmFzdCIsICAgICAgICBYWEZB U1QsIENNX0lOViB9LAotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZkZWYgQ0tDSEFOTkVMSU8K LSAgICB7ICJmY2xvc2UiLCAgICAgIFhYRl9DTCwgQ01fSU5WIH0sCS8qIEZDTE9TRSAqLwotICAg IHsgImZjb3VudCIsICAgICAgWFhGX0NPLCBDTV9JTlYgfSwJLyogRkNPVU5UICovCi0gICAgeyAi ZmZsdXNoIiwgICAgICBYWEZfRkwsIENNX0lOViB9LAkvKiBGRkxVU0ggKi8KLSNlbmRpZiAvKiBD S0NIQU5ORUxJTyAqLwotCi0jaWZuZGVmIE5PWEZFUgotICAgIHsgImZpIiwgICAgICAgICAgWFhG SU4sIENNX0lOVnxDTV9BQlIgfSwgLyogRklOSVNIICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0K LSNpZmRlZiBDS0NIQU5ORUxJTwotICAgIHsgImZpbGUiLCAgICAgICAgWFhGSUxFLCAwIH0sCS8q IEZJTEUgKi8KLSNlbmRpZiAvKiBDS0NIQU5ORUxJTyAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0K LSNpZm5kZWYgTk9YRkVSCi0gICAgeyAiZmluIiwgICAgICAgICBYWEZJTiwgQ01fSU5WfENNX0FC UiB9LCAvKiBGSU5JU0ggKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBVTklYT1JP U0sKLSAgICB7ICJmaW5kIiwgICAgICAgIFhYR1JFUCwgMCB9LAkvKiBGSU5EIChncmVwKSAqLwot I2Vsc2UKLSAgICB7ICJmaW5kIiwgICAgICAgIFhYR1JFUCxDTV9JTlYgfSwKLSNlbmRpZiAvKiBV TklYT1JPU0sgKi8KLQotI2lmbmRlZiBOT1hGRVIKLSAgICB7ICJmaW5pc2giLCAgICAgIFhYRklO LCAwIH0sCS8qIEZJTklTSCAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZkZWYgVENQU09D S0VUCi0gICAgeyAiZmlyZXdhbGwiLCAgICBYWEZJUkVXLCBDTV9JTlZ8Q01fSExQIH0sCi0jZW5k aWYgLyogVENQU09DS0VUICovCi0KLSNpZmRlZiBDS0NIQU5ORUxJTwotICAgIHsgImZsaXN0Iiwg ICAgICAgWFhGX0xJLCBDTV9JTlYgfSwJLyogRkxJU1QgKi8KLSAgICB7ICJmb3BlbiIsICAgICAg IFhYRl9PUCwgQ01fSU5WIH0sCS8qIEZPUEVOICovCi0jZW5kaWYgLyogQ0tDSEFOTkVMSU8gKi8K LQotI2lmbmRlZiBOT1NQTAotICAgIHsgImZvIiwgICAgICAgICAgWFhGT1IsIENNX0lOVnxDTV9B QlIgfSwgLyogSW52aXNpYmxlIGFiYnJldiBmb3IuLi4gKi8KLSAgICB7ICJmb3IiLCAgICAgICAg IFhYRk9SLCAwIH0sCS8qIEZPUiBsb29wICovCi0gICAgeyAiZm9yd2FyZCIsICAgICBYWEZXRCwg Q01fSU5WIH0sCS8qIEZPUldBUkQgKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotI2lmbmRlZiBOT0ZS SUxMUwotICAgIHsgImZvdCIsCSAgIFhYRElSLCBDTV9JTlYgfSwJLyogImZvdCIgPSAiZGlyIiAo Zm9yIENocmlzKSAqLwotI2VuZGlmIC8qIE5PRlJJTExTICovCi0KLSNpZmRlZiBDS0NIQU5ORUxJ TwotICAgIHsgImZyZWFkIiwgICAgICBYWEZfUkUsIENNX0lOViB9LAkvKiBGUkVBRCAqLwotICAg IHsgImZyZXdpbmQiLCAgICBYWEZfUlcsIENNX0lOViB9LAkvKiBGUkVXSU5EICovCi0gICAgeyAi ZnNlZWsiLCAgICAgIFhYRl9TRSwgQ01fSU5WIH0sCS8qIEZTRUVLICovCi0gICAgeyAiZnN0YXR1 cyIsICAgIFhYRl9TVCwgQ01fSU5WIH0sCS8qIEZTVEFUVVMgKi8KLSNlbmRpZiAvKiBDS0NIQU5O RUxJTyAqLwotCi0jaWZkZWYgVENQU09DS0VUCi0jaWZuZGVmIE5PRlRQCi0jaWZkZWYgU1lTRlRQ Ci0jaWZuZGVmIE5PUFVTSAotICAgIHsgImZ0cCIsCSAgIFhYRlRQLCAgIENNX0lOVnxDTV9QU0h8 Q01fTE9DIH0sIC8qIFN5c3RlbSBGVFAgKi8KLSNlbHNlCi0gICAgeyAiZnRwIiwJICAgWFhOT1RB ViwgQ01fSU5WfENNX1BTSHxDTV9MT0MgfSwKLSNlbmRpZiAvKiBOT1BVU0ggKi8KLSNlbHNlICAv KiBTWVNGVFAgKi8KLSAgICB7ICJmdHAiLAkgICBYWEZUUCwgICAwIH0sCS8qIEJ1aWx0LWluIEZU UCAqLwotI2VuZGlmIC8qIFNZU0ZUUCAqLwotI2Vsc2UgIC8qIE5PRlRQICovCi0gICAgeyAiZnRw IiwJICAgWFhOT1RBViwgQ01fSU5WIH0sCS8qIE5vIEZUUCAqLwotI2VuZGlmIC8qIE5PRlRQICov Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0KLSNpZm5kZWYgTk9TUEwKLSAgICB7ICJmdW5jdGlv biIsICAgIFhYRlVOQywgQ01fSU5WfENNX0hMUCB9LCAvKiAoZm9yIEhFTFAgRlVOQ1RJT04pICov Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmZGVmIENLQ0hBTk5FTElPCi0gICAgeyAiZndyaXRl IiwgICAgICBYWEZfV1IsIENNX0lOViB9LAkvKiBGV1JJVEUgKi8KLSNlbmRpZiAvKiBDS0NIQU5O RUxJTyAqLwotCi0jaWZuZGVmIE5PWEZFUgotICAgIHsgImciLCAgICAgICAgICAgWFhHRVQsIENN X0lOVnxDTV9BQlIgfSwgLyogSW52aXNpYmxlIGFiYnJldiBmb3IgR0VUICovCi0jaWZuZGVmIE5P U1BMCi0gICAgeyAiZ2UiLCAgICAgICAgICBYWEdFVCwgQ01fSU5WfENNX0FCUiB9LCAvKiBEaXR0 byAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgeyAiZ2V0IiwgICAgICAgICBYWEdFVCwgMCB9 LAkvKiBHRVQgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICB7ICJn ZXRjIiwgICAgICAgIFhYR0VUQywgMCB9LAkvKiBHRVRDICovCi0jaWZkZWYgT1MyCi0gICAgeyAi Z2V0a2V5Y29kZSIsICBYWEdFVEssIDAgfSwJLyogR0VUS0VZQ09ERSAqLwotI2VuZGlmIC8qIE9T MiAqLwotI2lmbmRlZiBOT0ZSSUxMUwotICAgIHsgImdldG9rIiwgICAgICAgWFhHT0ssIDAgfSwJ LyogR0VUT0sgKGFzayBmb3IgWWVzL05vL09LKSAqLwotI2VuZGlmIC8qIE5PRlJJTExTICovCi0j ZW5kaWYgLyogTk9TUEwgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICB7ICJnb3RvIiwgICAgICAgIFhY R09UTywwIH0sCS8qIEdPVE8gbGFiZWwgaW4gdGFrZSBmaWxlIG9yIG1hY3JvICovCi0jZW5kaWYg LyogTk9TUEwgKi8KLSNpZmRlZiBVTklYT1JPU0sKLSAgICB7ICJncmVwIiwgICAgICAgIFhYR1JF UCwwIH0sCS8qIEdSRVAgKGZpbmQpICovCi0jZWxzZQotICAgIHsgImdyZXAiLCAgICAgICAgWFhH UkVQLENNX0lOViB9LAkvKiBHUkVQIChmaW5kKSAqLwotI2VuZGlmIC8qIFVOSVhPUk9TSyAqLwot ICAgIHsgImgiLCAgICAgICAgICAgWFhITFAsIENNX0lOVnxDTV9BQlIgfSwgLyogSW52aXNpYmxl IHN5bm9ueW0gZm9yIEhFTFAgKi8KLSAgICB7ICJoZSIsICAgICAgICAgIFhYSExQLCBDTV9JTlZ8 Q01fQUJSIH0sIC8qIEludmlzaWJsZSBzeW5vbnltIGZvciBIRUxQICovCi0jaWZuZGVmIE5PRlJJ TExTCi0gICAgeyAiaGVhZCIsICAgICAgICBYWEhFQUQsIDAgfSwKLSNlbmRpZiAvKiBOT0ZSSUxM UyAqLwotI2lmbmRlZiBOT0xPQ0FMCi0gICAgeyAiaGFuZ3VwIiwgICAgICBYWEhBTiwgQ01fTE9D IH0sCS8qIEhBTkdVUCB0aGUgY29ubmVjdGlvbiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSAg ICB7ICJoZGlyZWN0b3J5IiwgIFhYSERJUiwgIENNX0lOViB9LAkvKiBESVIgc29ydGVkIGJ5IHNp emUgYmlnZ2VzdCBmaXJzdCAqLwotICAgIHsgIkhFTFAiLCAgICAgICAgWFhITFAsIDAgfSwJLyog RGlzcGxheSBIRUxQIHRleHQgKi8KLSNpZm5kZWYgTk9IVFRQCi0jaWZkZWYgVENQU09DS0VUCi0g ICAgeyAiaHR0cCIsICAgICAgICBYWEhUVFAsIDAgfSwJLyogSFRUUCBvcGVyYXRpb25zICovCi0j ZW5kaWYgLyogVENQU09DS0VUICovCi0jZW5kaWYgLyogTk9IVFRQICovCi0jaWZuZGVmIE5PU1BM Ci0gICAgeyAiaSIsICAgICAgICAgICBYWElOUCwgQ01fSU5WfENNX0FCUiB9LCAvKiBJbnZpc2li bGUgc3lub255bSBmb3IgSU5QVVQgKi8KLSAgICB7ICJpZiIsICAgICAgICAgIFhYSUYsICAwIH0s CSAgICAgLyogSUYgKCBjb25kaXRpb24gKSBjb21tYW5kICovCi0jaWZkZWYgVENQU09DS0VUCi0g ICAgeyAiaWtzZCIsICAgICAgICBYWElLU0QsIENNX0lOViB9LAkgICAgIC8qIE1ha2UgY29ubmVj dGlvbiB0byBJS1NEICovCi0jZWxzZQotICAgIHsgImlrc2QiLCAgICAgICAgWFhOT1RBViwgQ01f SU5WIH0sCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0gICAgeyAiaW4iLCAgICAgICAgICBYWElO UCwgQ01fSU5WfENNX0FCUiB9LCAvKiBJbnZpc2libGUgc3lub255bSBmb3IgSU5QVVQgKi8KLSAg ICB7ICJpbmNyZW1lbnQiLCAgIFhYSU5DLCAwIH0sCS8qIEluY3JlbWVudCBhIG51bWVyaWMgdmFy aWFibGUgKi8KLSAgICB7ICJpbnB1dCIsICAgICAgIFhYSU5QLCAwIH0sCS8qIElOUFVUIHRleHQg ZnJvbSBjb21tIGRldmljZSAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5kZWYgTk9IRUxQ Ci0gICAgeyAiaW50IiwgICAgICAgICBYWElOVCwgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgImlu dHIiLCAgICAgICAgWFhJTlQsIENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICJJTlRSTyIsICAgICAg IFhYSU5ULCAwIH0sCi0gICAgeyAiaW50cm9kdWN0aW9uIixYWElOVCwgQ01fSU5WIH0sCS8qIFBy aW50IGludHJvZHVjdG9yeSB0ZXh0ICovCi0jZWxzZQotICAgIHsgImludHJvIiwgICAgICAgWFhO T1RBViwgQ01fSU5WIH0sCi0gICAgeyAiaW50cm9kdWN0aW9uIixYWE5PVEFWLCBDTV9JTlYgfSwK LSNlbmRpZiAvKiBOT0hFTFAgKi8KLQotI2lmZGVmIE9TMgotICAgIHsgIms5NSIsICAgICAgICAg WFhLRVJNSSwgQ01fSU5WIH0sCS8qIEhtbW0gd2hhdCdzIHRoaXMuLi4gKi8KLSNlbmRpZiAvKiBP UzIgKi8KLQotI2lmbmRlZiBOT1NQTAotICAgIHsgImtjZCIsICAgICAgICAgWFhLQ0QsICAgMCAg ICAgIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotICAgIHsgImtlcm1pdCIsICAgICAgWFhLRVJN SSwgQ01fSU5WIH0sCi0KLSNpZmRlZiBPUzIKLSNpZm5kZWYgTk9LVkVSQlMKLSAgICB7ICJrdmVy YiIsICAgICAgIFhYS1ZSQiwgQ01fSU5WfENNX0hMUCB9LCAvKiBLZXlib2FyZCB2ZXJiICovCi0j ZW5kaWYgLyogTk9LVkVSQlMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmbmRlZiBOT0ZSSUxM UwotICAgIHsgImwiLCAgICAgICAgICAgWFhMT0csIENNX0lOVnxDTV9BQlIgfSwgLyogSW52aXNp YmxlIHN5bm9ueW0gZm9yIGxvZyAqLwotI2VuZGlmIC8qIE5PRlJJTExTICovCi0KLSAgICB7ICJs Y2QiLCAgICAgICAgIFhYTENXRCwgQ01fSU5WIH0sCi0gICAgeyAibGNkdXAiLCAgICAgICBYWExD RFUsIENNX0lOViB9LAotICAgIHsgImxjd2QiLCAgICAgICAgWFhMQ1dELCBDTV9JTlYgfSwKLSAg ICB7ICJsZGVsZXRlIiwgICAgIFhYTERFTCwgQ01fSU5WIH0sCi0gICAgeyAibGRpcmVjdG9yeSIs ICBYWExESVIsIENNX0lOViB9LAotCi0jaWZkZWYgQ0tMRUFSTgotICAgIHsgImxlYXJuIiwgICAg ICAgWFhMRUFSTiwgMCB9LAkvKiBMRUFSTiAtIGF1dG9tYXRpYyBzY3JpcHQgd3JpdGluZyAqLwot I2Vsc2UKLSAgICB7ICJsZWFybiIsICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAotI2VuZGlmIC8q IENLTEVBUk4gKi8KLQotICAgIHsgImxpIiwgICAgICAgICAgWFhMTk9VVCwgQ01fSU5WfENNX0FC UiB9LAotICAgIHsgIkxJQ0VOU0UiLCAgICAgWFhDUFIsIDAgfSwJLyogTElDRU5TRSAqLwotCi0j aWZuZGVmIE5PU1BMCi0gICAgeyAibGluZW91dCIsICAgICBYWExOT1VULCAwIH0sCS8qIExJTkVP VVQgPSBPVVRQVVQgKyBlb2wgKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZkZWYgTlQKLSAg ICB7ICJsaW5rIiwgICAgICAgIFhYTElOSywgMCB9LCAgICAgICAvKiBMSU5LIHNvdXJjZSBkZXN0 aW5hdGlvbiAqLwotI2VuZGlmIC8qIE5UICovCi0KLSAgICB7ICJsbWtkaXIiLCAgICAgIFhYTE1L RCwgQ01fSU5WIH0sCi0gICAgeyAibG12IiwgICAgICAgICBYWExSRU4sIENNX0lOViB9LAotCi0j aWZuZGVmIE5PRlJJTExTCi0gICAgeyAibG8iLCAgICAgICAgICBYWExPRywgIENNX0lOVnxDTV9B QlIgfSwgLyogSW52aXNpYmxlIHN5bm9ueW0gZm9yIGxvZyAqLwotI2VuZGlmIC8qIE5PRlJJTExT ICovCi0KLSNpZm5kZWYgTk9TUEwKLSAgICB7ICJsb2NhbCIsICAgICAgIFhYTE9DQUwsIENNX0lO ViB9LAkvKiBMT0NBTCB2YXJpYWJsZSBkZWNsYXJhdGlvbiAqLwotI2Vsc2UKLSAgICB7ICJsb2Nh bCIsICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAotI2VuZGlmIC8qIE5PU1BMICovCi0KLSAgICB7 ICJsb2N1cyIsICAgICAgIFhYTE9DVSwgQ01fSU5WfENNX0hMUCB9LCAvKiAiaGVscCBsb2N1cyIg Ki8KLQotICAgIHsgImxvZyIsICAJICAgICBYWExPRywgMCB9LAkvKiBPcGVuIGEgbG9nIGZpbGUg Ki8KLQotICAgIHsgImxvZ2luIiwgICAgICAgWFhMT0dJTiwgIDAgfSwJLyogKFJFTU9URSkgTE9H SU4gdG8gc2VydmVyIG9yIElLU0QgKi8KLSAgICB7ICJsb2dvdXQiLCAgICAgIFhYTE9HT1VULCAw IH0sCS8qIExPR09VVCBmcm9tIHNlcnZlciBvciBJS1NEICovCi0KLSNpZm5kZWYgTk9GUklMTFMK LSNpZm5kZWYgTk9ESUFMCi0gICAgeyAibG9va3VwIiwgICAgICBYWExPT0ssICAwIH0sCS8qIExP T0tVUCAqLwotI2Vsc2UKLSAgICB7ICJsb29rdXAiLCAgICAgIFhYTk9UQVYsIENNX0lOViB9LAot I2VuZGlmIC8qIE5PRElBTCAqLwotCi0gICAgeyAibHB3ZCIsICAgICAgICBYWExQV0QsIENNX0lO ViB9LAotICAgIHsgImxyZW5hbWUiLCAgICAgWFhMUkVOLCBDTV9JTlYgfSwKLSAgICB7ICJscm1k aXIiLCAgICAgIFhYTFJNRCwgQ01fSU5WIH0sCi0KLSNpZmRlZiBVTklYT1JPU0sKLSAgICB7ICJs cyIsICAgICAgICAgIFhYTFMsICBDTV9JTlZ8Q01fUFNIIH0sIC8qIFVOSVggbHMgY29tbWFuZCAq LwotI2Vsc2UKLSAgICB7ICJscyIsICAgICAgICAgIFhYRElSLCBDTV9JTlYgfSwJLyogSW52aXNp YmxlIHN5bm9ueW0gZm9yIERJUiAqLwotI2VuZGlmIC8qIFVOSVhPUk9TSyAqLwotI2lmbmRlZiBO T1hGRVIKLSAgICB7ICJtYWlsIiwgICAgICAgIFhYTUFJLCAwIH0sCS8qIFNlbmQgYSBmaWxlIGFz IGUtbWFpbCAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotI2lmbmRlZiBOT0hFTFAKLSAgICB7ICJt YW51YWwiLCAgICAgIFhYTUFOLCBDTV9QU0ggfSwJLyogTUFOKFVBTCkgKi8KLSNlbHNlCi0gICAg eyAibWFudWFsIiwgICAgICBYWE5PVEFWLCBDTV9JTlZ8Q01fUFNIIH0sCi0jZW5kaWYgLyogTk9I RUxQICovCi0jZW5kaWYgLyogTk9GUklMTFMgKi8KLSNpZmRlZiBDS19NS0RJUgotICAgIHsgIm1k IiwgICAgICAgICAgWFhNS0RJUiwgQ01fSU5WIH0sCS8qIFN5bm9ueW0gZm9yIE1LRElSICovCi0j ZW5kaWYgLyogQ0tfTUtESVIgKi8KLSAgICB7ICJtZXNzYWdlIiwgICAgIFhYTVNHLCAwIH0sCS8q IFByaW50IGRlYnVnZ2luZyBtZXNzYWdlICovCi0jaWZkZWYgQ0tfTUlOUFVUCi0gICAgeyAibWlu cHV0IiwgICAgICBYWE1JTlAsIDAgfSwJLyogTUlOUFVUICovCi0jZWxzZQotICAgIHsgIm1pbnB1 dCIsICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCi0jZW5kaWYgLyogQ0tfTUlOUFVUICovCi0jaWZu ZGVmIE5PTVNFTkQKLSAgICB7ICJtZ2V0IiwgICAgICAgIFhYTUdFVCwgMCB9LAkvKiBNR0VUICov Ci0jZWxzZQotICAgIHsgIm1nZXQiLCAgICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCi0jZW5kaWYg LyogTk9NU0VORCAqLwotI2lmZGVmIENLX01LRElSCi0gICAgeyAibWtkaXIiLCAgICAgICBYWE1L RElSLCAwIH0sCS8qIE1LRElSICovCi0jZWxzZQotICAgIHsgIm1rZGlyIiwgICAgICAgWFhOT1RB ViwgQ01fSU5WIH0sCi0jZW5kaWYgLyogQ0tfTUtESVIgKi8KLQotI2lmbmRlZiBOT1hGRVIKLSNp Zm5kZWYgTk9NU0VORAotICAgIHsgIm1tb3ZlIiwgICAgICAgWFhNTU9WRSwgMCB9LAkvKiBNTU9W RSAqLwotI2Vsc2UKLSAgICB7ICJtbW92ZSIsICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAotI2Vu ZGlmIC8qIE5PTVNFTkQgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBOT0ZSSUxM UwotICAgIHsgIm1vcmUiLCAgICAgICAgWFhNT1JFLCBDTV9JTlYgfSwJLyogTU9SRSAqLwotI2Vu ZGlmIC8qIE5PRlJJTExTICovCi0KLSNpZm5kZWYgTk9YRkVSCi0gICAgeyAibW92ZSIsICAgICAg ICBYWE1PVkUsIDAgfSwJLyogTU9WRSAgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRl ZiBOT1NQTAotICAgIHsgIm1wYXVzZSIsICAgICAgWFhNU0wsIENNX0lOViB9LAkvKiBNaWxsaXNl Y29uZCBzbGVlcCAqLwotI2Vsc2UKLSAgICB7ICJtcGF1c2UiLCAgICAgIFhYTk9UQVYsIENNX0lO ViB9LAotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5kZWYgTk9YRkVSCi0jaWZuZGVmIE5PTVNF TkQKLSAgICB7ICJtcHV0IiwgICAgICAgIFhYTVNFLCBDTV9JTlYgfSwJLyogTVBVVCA9IE1TRU5E ICovCi0gICAgeyAibXMiLCAgICAgICAgICBYWE1TRSwgQ01fSU5WfENNX0FCUiB9LAotICAgIHsg Im1zZW5kIiwgICAgICAgWFhNU0UsIDAgfSwJLyogTXVsdGlwbGUgU0VORCAqLwotI2Vsc2UKLSAg ICB7ICJtcHV0IiwgICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAotICAgIHsgIm1zZW5kIiwgICAg ICAgWFhOT1RBViwgQ01fSU5WIH0sCi0jZW5kaWYgLyogTk9NU0VORCAqLwotI2VuZGlmIC8qIE5P WEZFUiAqLwotICAgIHsgIm1zZyIsICAgICAgICAgWFhNU0csIENNX0lOViB9LAkvKiBQcmludCBk ZWJ1Z2dpbmcgbWVzc2FnZSAqLwotI2lmbmRlZiBOT1NQTAotICAgIHsgIm1zbGVlcCIsICAgICAg WFhNU0wsIDAgfSwJLyogTWlsbGlzZWNvbmQgc2xlZXAgKi8KLSNlbHNlCi0gICAgeyAibXNsZWVw IiwgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBOT1NQTCAqLwotI2lmbmRlZiBO T0ZSSUxMUwotICAgIHsgIm12IiwgICAgICAgICAgWFhSRU4sIENNX0lOViB9LAkvKiBTeW5vbnlt IGZvciByZW5hbWUgKi8KLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotI2lmbmRlZiBOT0hFTFAKLSAg ICB7ICJuZXdzIiwgICAgICAgIFhYTkVXLCBDTV9JTlYgfSwJLyogRGlzcGxheSBORVdTIG9mIG5l dyBmZWF0dXJlcyAqLwotI2Vsc2UKLSAgICB7ICJuZXdzIiwgICAgICAgIFhYTk9UQVYsIENNX0lO ViB9LAotI2VuZGlmIC8qIE5PSEVMUCAqLwotICAgIHsgIm5vbG9jYWwiLCAgICAgWFhOTENMLCBD TV9JTlYgfSwJLyogRGlzYWJsZSBTRVQgTElORSAvIFNFVCBIT1NUICovCi0gICAgeyAibm9wdXNo IiwgICAgICBYWE5QU0gsIENNX0lOViB9LAkvKiBEaXNhYmxlIFBVU0ggY29tbWFuZC9mZWF0dXJl cyAqLwotI2lmZGVmIE9TMgotICAgIHsgIm5vc2Nyb2xsIiwgICAgWFhOU0NSLCBDTV9JTlYgfSwg IC8qIERpc2FibGUgc2Nyb2xsIG9wZXJhdGlvbnMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNpZm5k ZWYgTk9TUEwKLSAgICB7ICJvIiwgICAgICAgICAgIFhYT1VULCBDTV9JTlZ8Q01fQUJSIH0sIC8q IEludmlzaWJsZSBzeW5vbnltIGZvciBPVVRQVVQgKi8KLSAgICB7ICJvcGVuIiwgICAgICAgIFhY T1BFLCAwIH0sCS8qIE9QRU4gZmlsZSBmb3IgcmVhZGluZyBvciB3cml0aW5nICovCi0jZWxzZQot ICAgIHsgIm9wZW4iLCAgICAgICAgWFhPUEUsIENNX0lOViB9LAkvKiBPUEVOICovCi0jZW5kaWYg LyogTk9TUEwgKi8KLSNpZm5kZWYgTk9IRUxQCi0gICAgeyAib3B0aW9ucyIsICAgICBYWE9QVFMs Q01fSU5WfENNX0hMUCB9LCAvKiBPcHRpb25zICovCi0jZW5kaWYgLyogTk9IRUxQICovCi0gICAg eyAib3JpZW50YXRpb24iLCBYWE9SSUUsIDAgfSwKLSNpZm5kZWYgTk9TUEwKLSAgICB7ICJvdXRw dXQiLCAgICAgIFhYT1VULCAwIH0sCS8qIE9VVFBVVCB0ZXh0IHRvIGNvbW0gZGV2aWNlICovCi0j ZWxzZQotICAgIHsgIm91dHB1dCIsICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCi0jZW5kaWYgLyog Tk9TUEwgKi8KLSNpZmRlZiBBTllYMjUKLSNpZm5kZWYgSUJNWDI1Ci0gICAgeyAicGFkIiwgICAg ICAgICBYWFBBRCwgQ01fTE9DIH0sCS8qIFguMyBQQUQgY29tbWFuZHMgKi8KLSNlbmRpZiAvKiBJ Qk1YMjUgKi8KLSNlbmRpZiAvKiBBTllYMjUgKi8KLQotI2lmZGVmIE5FV0ZUUAotICAgIHsgInBh c3NpdmUiLCAgICAgWFhQQVNWLCBDTV9JTlYgfSwJLyogKEZUUCkgUEFTU0lWRSAqLwotI2VuZGlm IC8qIE5FV0ZUUCAqLwotCi0jaWZuZGVmIE5PSEVMUAotICAgIHsgInBhdHRlcm5zIiwgICAgWFhQ QVQsQ01fSU5WfENNX0hMUCB9LCAvKiBQYXR0ZXJuIHN5bnRheCAqLwotI2VuZGlmIC8qIE5PSEVM UCAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAicGF1c2UiLCAgICAgICBYWFBBVSwgMCB9LAkv KiBTbGVlcCBmb3Igc3BlY2lmaWVkIGludGVydmFsICovCi0jZWxzZQotICAgIHsgInBhdXNlIiwg ICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZm5kZWYgTk9E SUFMCi0gICAgeyAicGRpYWwiLCAgICAgICBYWFBESUEsICBDTV9MT0MgfSwJLyogUERJQUwgKHBh cnRpYWwgZGlhbCkgKi8KLSNlbHNlCi0gICAgeyAicGRpYWwiLCAgICAgICBYWE5PVEFWLCBDTV9J TlZ8Q01fTE9DIH0sCi0jZW5kaWYgLyogTk9ESUFMICovCi0jaWZkZWYgVENQU09DS0VUCi0jaWZu ZGVmIE5PUFVTSAotICAgIHsgInBpbmciLCAgICAgICAgWFhQTkcsIENNX0lOVnxDTV9QU0h8Q01f TE9DIH0sIC8qIFBJTkcgKi8KLSNlbHNlCi0gICAgeyAicGluZyIsICAgICAgICBYWE5PVEFWLCBD TV9JTlZ8Q01fUFNIfENNX0xPQyB9LAotI2VuZGlmIC8qIE5PUFVTSCAqLwotI2VuZGlmIC8qIFRD UFNPQ0tFVCAqLwotI2lmZGVmIE5FVENNRAotI2lmbmRlZiBOT1BVU0gKLSAgICB7ICJwaXBlIiwg ICAgICAgIFhYUElQRSwgQ01fUFNIIH0sCS8qIFBJUEUgKi8KLSNlbHNlCi0gICAgeyAicGlwZSIs ICAgICAgICBYWE5PVEFWLCBDTV9JTlZ8Q01fUFNIIH0sIC8qIFBJUEUgKi8KLSNlbmRpZiAvKiBO T1BVU0ggKi8KLSNlbmRpZiAvKiBORVRDTUQgKi8KLQotI2lmbmRlZiBOT1NQTAotICAgIHsgInBv cCIsICAgICAgICAgWFhFTkQsIENNX0lOViB9LAkvKiBJbnZpc2libGUgc3lub255bSBmb3IgRU5E ICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZm5kZWYgTk9GUklMTFMKLSAgICB7ICJwcmludCIs ICAgICAgIFhYUFJJLCAwIH0sCS8qIFBSSU5UIGEgZmlsZSBsb2NhbGx5ICovCi0jZW5kaWYgLyog Tk9GUklMTFMgKi8KLQotICAgIHsgInByb21wdCIsICAgICAgWFhQUk9NUCwgQ01fSU5WIH0sCS8q IEdvIGludGVyYWN0aXZlIChmcm9tIHNjcmlwdCkgKi8KLQotI2lmbmRlZiBOT1hGRVIKLSNpZmRl ZiBDS19SRVNFTkQKLSAgICB7ICJwc2VuZCIsICAgICAgIFhYUFNFTiwgQ01fSU5WIH0sCS8qIFBT RU5EICovCi0jZWxzZQotICAgIHsgInBzZW5kIiwgICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCi0j ZW5kaWYgLyogQ0tfUkVTRU5EICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZmRlZiBORVRQ VFkKLSAgICB7ICJwdHkiLCAgICAgICAgIFhYUFRZLCBDTV9QU0ggfSwJLyogUFRZICovCi0jZWxz ZQotICAgIHsgInB0eSIsICAgICAgICAgWFhOT1RBViwgQ01fSU5WfENNX1BTSCB9LAotI2VuZGlm IC8qIE5FVFBUWSAqLwotCi0jaWZuZGVmIE5PUFVTSAotICAgIHsgInB1IiwgICAgICAgICAgWFhT SEUsIENNX0lOVnxDTV9BQlJ8Q01fUFNIIH0sIC8qIFBVID0gUFVTSCAqLwotI2VuZGlmIC8qIE5P UFVTSCAqLwotCi0jaWZkZWYgQ0tQVVJHRQotICAgIHsgInB1cmdlIiwgICAgICAgWFhQVVJHRSwg MCB9LAkvKiBQVVJHRSAocmVhbCkgKi8KLSNlbHNlCi0jaWZkZWYgVk1TCi0gICAgeyAicHVyZ2Ui LCAgICAgICBYWFBVUkdFLCAwIH0sCS8qIFBVUkdFIChmYWtlKSAqLwotI2Vsc2UKLSAgICB7ICJw dXJnZSIsICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlm IC8qIENLUFVSR0UgKi8KLQotI2lmbmRlZiBOT1BVU0gKLSAgICB7ICJwdXNoIiwgICAgICAgIFhY U0hFLCBDTV9QU0ggfSwJLyogUFVTSCBjb21tYW5kIChsaWtlIFJVTiwgISkgKi8KLSNlbHNlCi0g ICAgeyAicHVzaCIsICAgICAgICBYWE5PVEFWLCBDTV9JTlZ8Q01fUFNIIH0sCi0jZW5kaWYgLyog Tk9QVVNIICovCi0KLSNpZm5kZWYgTk9YRkVSCi0gICAgeyAicHV0IiwgICAgICAgICBYWFNFTiwg Q01fSU5WIH0sCS8qIFBVVCA9IFNFTkQgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmZGVm IFVOSVgKLSNpZm5kZWYgTk9QVVRFTlYKLSAgICB7ICJwdXRlbnYiLCAgICAgIFhYUFVURSwgQ01f SU5WIH0sCS8qIFBVVEVOViAqLwotI2VuZGlmCS8qIE5PUFVURU5WICovCi0jZW5kaWYJLyogVU5J WCAqLwotCi0gICAgeyAicHdkIiwgICAgICAgICBYWFBXRCwgMCB9LAkvKiBQcmludCBXb3JraW5n IERpcmVjdG9yeSAqLwotICAgIHsgInEiLCAgICAgICAgICAgWFhRVUksIENNX0lOVnxDTV9BQlIg fSwgLyogSW52aXNpYmxlIHN5bm9ueW0gZm9yIFFVSVQgKi8KLQotI2lmbmRlZiBOT1hGRVIKLSAg ICB7ICJxdWVyeSIsICAgICAgIFhYUlFVRSxDTV9JTlYgfSwJLyogKD0gUkVNT1RFIFFVRVJZKSAq LwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0gICAgeyAicXVpdCIsICAgICAgICBYWFFVSSwgMCB9 LAkvKiBRVUlUIGZyb20gcHJvZ3JhbSA9IEVYSVQgKi8KLQotI2lmbmRlZiBOT1hGRVIKLSAgICB7 ICJyIiwgICAgICAgICAgIFhYUkVDLCBDTV9JTlZ8Q01fQUJSIH0sIC8qIEludiBzeW5vbnltIGZv ciBSRUNFSVZFICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYgTk9YRkVSCi0gICAg eyAicmFzZyIsICAgICAgICBYWFJBU0csIENNX0lOViB9LAkvKiBSRU1PVEUgQVNTSUdOICovCi0g ICAgeyAicmFzc2lnbiIsICAgICBYWFJBU0csIENNX0lOViB9LAkvKiBkaXR0byAqLwotICAgIHsg InJjZCIsICAgICAgICAgWFhSQ1dELCBDTV9JTlYgfSwJLyogUkVNT1RFIENEICovCi0gICAgeyAi cmNkdXAiLCAgICAgICBYWFJDRFVQLENNX0lOViB9LAkvKiBSRU1PVEUgQ0QgKi8KLSAgICB7ICJy Y29weSIsICAgICAgIFhYUkNQWSwgQ01fSU5WIH0sCS8qIFJFTU9URSBDT1BZICovCi0gICAgeyAi cmN3ZCIsICAgICAgICBYWFJDV0QsIENNX0lOViB9LAkvKiBSRU1PVEUgQ1dEICovCi0gICAgeyAi cmRlbGV0ZSIsICAgICBYWFJERUwsIENNX0lOViB9LAkvKiBSRU1PVEUgREVMRVRFICovCi0gICAg eyAicmRpcmVjdG9yeSIsICBYWFJESVIsIENNX0lOViB9LAkvKiBSRU1PREUgRElSRUNUT1JZICov Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYgTk9TUEwKLSAgICB7ICJyZWFkIiwgICAg ICAgIFhYUkVBLCAwIH0sCS8qIFJFQUQgYSBsaW5lIGZyb20gYSBmaWxlICovCi0jZWxzZQotICAg IHsgInJlYWQiLCAgICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8K LQotI2lmbmRlZiBOT1hGRVIKLSAgICB7ICJyZWNlaXZlIiwgICAgIFhYUkVDLCAwIH0sCS8qIFJF Q0VJVkUgZmlsZXMgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBOT0RJQUwKLSAg ICB7ICJyZWQiLCAgICAgICAgIFhYUkVELCBDTV9JTlZ8Q01fQUJSfENNX0xPQyB9LCAvKiBJbnYg c3luIGZvciBSRURJQUwgKi8KLSAgICB7ICJyZWRpIiwgICAgICAgIFhYUkVELCBDTV9JTlZ8Q01f QUJSfENNX0xPQyB9LCAvKiBkaXR0byAqLwotICAgIHsgInJlZGlhbCIsICAgICAgWFhSRUQsIENN X0xPQyB9LAkvKiBSRURJQUwgbGFzdCBESUFMIG51bWJlciAqLwotI2Vsc2UKLSAgICB7ICJyZWQi LCAgICAgICAgIFhYTk9UQVYsIENNX0lOVnxDTV9MT0MgfSwKLSAgICB7ICJyZWRpIiwgICAgICAg IFhYTk9UQVYsIENNX0lOVnxDTV9MT0MgfSwKLSAgICB7ICJyZWRpYWwiLCAgICAgIFhYTk9UQVYs IENNX0lOVnxDTV9MT0MgfSwKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLQotI2lmZGVmIENLX1JFRElS Ci0jaWZkZWYgT1MyCi0jaWZuZGVmIE5PUFVTSAotICAgIHsgInJlZGlyZWN0IiwgICAgWFhGVU4s IENNX0lOVnxDTV9QU0ggfSwgLyogUkVESVJFQ1QgKi8KLSNlbHNlCi0gICAgeyAicmVkaXJlY3Qi LCAgICBYWE5PVEFWLCBDTV9JTlZ8Q01fUFNIIH0sCi0jZW5kaWYgLyogTk9QVVNIICovCi0jZWxz ZSAvKiBPUzIgKi8KLSNpZm5kZWYgTk9QVVNICi0gICAgeyAicmVkaXJlY3QiLCAgICBYWEZVTiwg Q01fUFNIIH0sCS8qIFJFRElSRUNUICovCi0jZWxzZQotICAgIHsgInJlZGlyZWN0IiwgICAgWFhO T1RBViwgQ01fSU5WfENNX1BTSCB9LAotI2VuZGlmIC8qIE5PUFVTSCAqLwotI2VuZGlmIC8qIE9T MiAqLwotI2VuZGlmIC8qIENLX1JFRElSICovCi0KLSNpZmRlZiBDS19SRUNBTEwKLSAgICB7ICJy ZWRvIiwgICAgICAgIFhYUkVETywgIENNX05PUiB9LAkvKiBSRURPICovCi0jZWxzZQotICAgIHsg InJlZG8iLCAgICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCi0jZW5kaWYgLyogQ0tfUkVDQUxMICov Ci0KLSNpZm5kZWYgTk9YRkVSCi0jaWZkZWYgQ0tfUkVTRU5ECi0gICAgeyAicmVnZXQiLCAgICAg ICBYWFJFR0VULCAwIH0sCS8qIFJFR0VUICovCi0jZWxzZQotICAgIHsgInJlZ2V0IiwgICAgICAg WFhOT1RBViwgQ01fSU5WIH0sCi0jZW5kaWYgLyogQ0tfUkVTRU5EICovCi0jZW5kaWYgLyogTk9Y RkVSICovCi0KLSNpZm5kZWYgTk9TUEwKLSAgICB7ICJyZWlucHV0IiwgICAgIFhYUkVJLCBDTV9J TlYgfSwJLyogUkVJTlBVVCAoZnJvbSBJTlBVVCBidWZmZXIpICovCi0jZWxzZQotICAgIHsgInJl aW5wdXQiLCAgICAgWFhOT1RBViwgQ01fSU5WIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lm bmRlZiBOT1hGRVIKLSNpZmRlZiBBRERDTUQKLSAgICB7ICJyZW0iLCAgICAgICAgIFhYUkVNLCBD TV9JTlZ8Q01fQUJSIH0sCi0gICAgeyAicmVtbyIsICAgICAgICBYWFJFTSwgQ01fSU5WfENNX0FC UiB9LAotI2VuZGlmIC8qIEFERENNRCAqLwotICAgIHsgInJlbW90ZSIsCSAgICAgWFhSRU0sIDAg fSwJLyogU2VuZCBSRU1PVEUgY29tbWFuZCB0byBzZXJ2ZXIgKi8KLSNlbmRpZiAvKiBOT1hGRVIg Ki8KLQotI2lmZGVmIEFERENNRAotICAgIHsgInJlbW92ZSIsICAgICAgWFhSRU1WLDAgfSwJLyog UkVNT1ZFIChzb21ldGhpbmcgZnJvbSBhIGxpc3QpICovCi0jZWxzZQotICAgIHsgInJlbW92ZSIs ICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCi0jZW5kaWYgLyogQUREQ01EICovCi0KLSNpZm5kZWYg Tk9GUklMTFMKLSNpZm5kZWYgTk9SRU5BTUUKLSAgICB7ICJyZW5hbWUiLCAgICAgIFhYUkVOLCAw IH0sCS8qIFJFTkFNRSBhIGxvY2FsIGZpbGUgKi8KLSNlbHNlCi0gICAgeyAicmVuYW1lIiwgICAg ICBYWE5PVEFWLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBOT1JFTkFNRSAqLwotICAgIHsgInJlcGxh eSIsICAgICAgWFhUWVAsIENNX0lOViB9LAkvKiBSRVBMQVkgKGZvciBub3csIGp1c3QgdHlwZSkg Ki8KLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotCi0jaWZuZGVmIE5PWEZFUgotI2lmZGVmIENLX1JF U0VORAotICAgIHsgInJlcCIsICAgICAgICAgWFhUWVAsIENNX0lOVnxDTV9BQlIgfSwgIC8qIFJF UExBWSBhYmJyZXZpYXRpb24gKi8KLSAgICB7ICJyZXB1dCIsICAgICAgIFhYUlNFTiwgQ01fSU5W IH0sCSAgICAgIC8qIFJFUFVUID0gUkVTRU5EICovCi0gICAgeyAicmVzIiwgICAgICAgICBYWFJT RU4sIENNX0lOVnxDTV9BQlIgfSwgLyogUkVTRU5EICovCi0gICAgeyAicmVzZSIsICAgICAgICBY WFJTRU4sIENNX0lOVnxDTV9BQlIgfSwgLyogUkVTRU5EICovCi0gICAgeyAicmVzZW5kIiwgICAg ICBYWFJTRU4sIDAgfSwJLyogUkVTRU5EICovCi0jZWxzZQotICAgIHsgInJlcHV0IiwgICAgICAg WFhOT1RBViwgQ01fSU5WIH0sCi0gICAgeyAicmVzIiwgICAgICAgICBYWE5PVEFWLCBDTV9JTlYg fSwKLSAgICB7ICJyZXNlIiwgICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAotICAgIHsgInJlc2Vu ZCIsICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCi0jZW5kaWYgLyogQ0tfUkVTRU5EICovCi0jZW5k aWYgLyogTk9YRkVSICovCi0KLSAgICB7ICJyZXNldCIsICAgICAgIFhYUkVTRVQsIENNX0lOViB9 LAkvKiBSRVNFVCAqLwotCi0jaWZkZWYgQ0tfUkVTRU5ECi0jaWZuZGVmIE5PU1BMCi0gICAgeyAi cmV0IiwgICAgICAgICBYWFJFVCwgQ01fSU5WfENNX0FCUiB9LAotI2VuZGlmIC8qIE5PU1BMICov Ci0jZW5kaWYgLyogQ0tfUkVTRU5EICovCi0KLSNpZm5kZWYgTk9YRkVSCi0gICAgeyAicmV0cmll dmUiLCAgICBYWFJFVFIsIENNX0lOViB9LAkvKiBSRVRSSUVWRSAqLwotI2VuZGlmIC8qIE5PWEZF UiAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAicmV0dXJuIiwgICAgICBYWFJFVCwgMCB9LAkv KiBSRVRVUk4gZnJvbSBhIGZ1bmN0aW9uICovCi0jZWxzZQotICAgIHsgInJldHVybiIsICAgICAg WFhOT1RBViwgQ01fSU5WIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT1hGRVIK LSAgICB7ICJyZXhpdCIsICAgICAgIFhYUlhJVCwgQ01fSU5WIH0sCS8qIFJFTU9URSBFWElUICov Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZmRlZiBDS19SRVhYCi0jaWZuZGVmIE5PUFVTSAot ICAgIHsgInJleHgiLCAgICAgICAgWFhSRVhYLCBDTV9QU0ggfSwJLyogRXhlY3V0ZSBhIFJleHgg Y29tbWFuZCAqLwotI2Vsc2UKLSAgICB7ICJyZXh4IiwgICAgICAgIFhYTk9UQVYsIENNX0lOVnxD TV9QU0ggfSwKLSNlbmRpZiAvKiBOT1BVU0ggKi8KLSNlbmRpZiAvKiBDS19SRVhYICovCi0KLSNp Zm5kZWYgTk9YRkVSCi0gICAgeyAicmhlbHAiLCAgICAgICBYWFJITFAsIENNX0lOViB9LAkvKiBS RU1PVEUgSEVMUCAqLwotICAgIHsgInJob3N0IiwgICAgICAgWFhSSE9TLCBDTV9JTlYgfSwJLyog UkVNT1RFIEhPU1QgKi8KLSAgICB7ICJya2VybWl0IiwgICAgIFhYUktFUiwgQ01fSU5WIH0sCS8q IFJFTU9URSBLRVJNSVQgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmZGVmIFRDUFNPQ0tF VAotICAgIHsgInJsb2dpbiIsICAgICAgWFhSTE9HLCBDTV9MT0MgfSwJLyogTWFrZSBhbiBSbG9n aW4gY29ubmVjdGlvbiAqLwotI2Vsc2UKLSAgICB7ICJybG9naW4iLCAgICAgIFhYTk9UQVYsIENN X0lOVnxDTV9MT0MgfSwKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLQotI2lmbmRlZiBOT0ZSSUxM UwotICAgIHsgInJtIiwgICAgICAgICAgWFhERUwsIENNX0lOViB9LAkvKiBJbnZpc2libGUgc3lu b255bSBmb3IgZGVsZXRlICovCi0jZW5kaWYgLyogTk9GUklMTFMgKi8KLQotI2lmZGVmIENLX01L RElSCi0gICAgeyAicm1kaXIiLCAgICAgICBYWFJNRElSLCAwIH0sCS8qIFJNRElSICovCi0jZWxz ZQotICAgIHsgInJtZGlyIiwgICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCi0jZW5kaWYgLyogQ0tf TUtESVIgKi8KLQotI2lmbmRlZiBOT1hGRVIKLSAgICB7ICJybWVzc2FnZSIsICAgIFhYUk1TRywg Q01fSU5WIH0sCS8qIFJFTU9URSBNRVNTQUdFICovCi0gICAgeyAicm1rZGlyIiwgICAgICBYWFJN S0QsIENNX0lOViB9LAkvKiBSRU1PVEUgTUtESVIgKi8KLSAgICB7ICJybXNnIiwgICAgICAgIFhY Uk1TRywgQ01fSU5WIH0sCS8qIFJFTU9URSBNRVNTQUdFICovCi0jaWZuZGVmIE5PU1BMCi0gICAg eyAicm9idXN0IiwgICAgICBYWFJPQiwgIENNX0lOViB9LAotI2Vsc2UKLSAgICB7ICJyb2J1c3Qi LCAgICAgIFhYTk9UQVYsIENNX0lOViB9LAotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgeyAicnBy aW50IiwgICAgICBYWFJQUkksIENNX0lOViB9LCAgLyogUkVNT1RFIFBSSU5UICovCi0gICAgeyAi cnB3ZCIsICAgICAgICBYWFJQV0QsIENNX0lOViB9LAkvKiBSRU1PVEUgUFdEICovCi0gICAgeyAi cnF1ZXJ5IiwgICAgICBYWFJRVUUsIENNX0lOViB9LAkvKiBSRU1PVEUgUVVFUlkgKi8KLSNlbmRp ZiAvKiBOT1hGRVIgKi8KLQotI2lmZGVmIENLX1JFQ0FMTAotICAgIHsgInJyIiwgICAgICAgICAg WFhSRURPLCBDTV9JTlZ8Q01fTk9SIH0sCi0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0KLSNpZm5k ZWYgTk9YRkVSCi0gICAgeyAicnJlbmFtZSIsICAgIFhYUlJFTiwgQ01fSU5WIH0sCS8qIFJFTU9U RSBSRU5BTUUgKi8KLSAgICB7ICJycm1kaXIiLCAgICAgWFhSUk1ELCBDTV9JTlYgfSwJLyogUkVN T1RFIFJFTURJUiAqLwotICAgIHsgInJzZXQiLCAgICAgICBYWFJTRVQsIENNX0lOViB9LAkvKiBS RU1PVEUgU0VUICovCi0gICAgeyAicnNwYWNlIiwgICAgIFhYUlNQQSwgQ01fSU5WIH0sCS8qIFJF TU9URSBTUEFDRSAqLwotICAgIHsgInJ0eXBlIiwgICAgICBYWFJUWVAsIENNX0lOViB9LAkvKiBS RU1PVEUgVFlQRSAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZuZGVmIE5PUFVTSAotICAg IHsgInJ1biIsICAgICAgICAgWFhTSEUsIENNX1BTSCB9LAkvKiBSVU4gYSBwcm9ncmFtIG9yIGNv bW1hbmQgKi8KLSNlbHNlCi0gICAgeyAicnVuIiwgICAgICAgICBYWE5PVEFWLCBDTV9JTlZ8Q01f UFNIIH0sCi0jZW5kaWYgLyogTk9QVVNIICovCi0KLSNpZm5kZWYgTk9YRkVSCi0gICAgeyAicndo byIsICAgICAgICBYWFJXSE8sIENNX0lOViB9LAkvKiBSRU1PVEUgV0hPICovCi0gICAgeyAicyIs ICAgICAgICAgICBYWFNFTiwgQ01fSU5WfENNX0FCUiB9LCAvKiBJbnZpc2libGUgc3lub255bSBm b3Igc2VuZCAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZuZGVmIE5PU0VUS0VZCi0jaWZk ZWYgT1MyCi0gICAgeyAic2F2ZSIsCSAgIFhYU0FWRSwgMCB9LAkJLyogU0FWRSBzb21ldGhpbmcg Ki8KLSNlbHNlCi0gICAgeyAic2F2ZSIsCSAgIFhYU0FWRSwgQ01fSU5WIH0sCi0jZW5kaWYgLyog T1MyICovCi0jZWxzZQotICAgIHsgInNhdmUiLAkgICBYWE5PVEFWLCBDTV9JTlYgfSwKLSNlbmRp ZiAvKiBOT1NFVEtFWSAqLwotCi0jaWZuZGVmIE5PU0NSSVBUCi0gICAgeyAic2MiLCAJICAgWFhM T0dJLCBDTV9JTlZ8Q01fQUJSfENNX0xPQyB9LAotICAgIHsgInNjciIsCSAgIFhYTE9HSSwgQ01f SU5WfENNX0FCUnxDTV9MT0MgfSwKLSNlbmRpZiAvKiBOT1NDUklQVCAqLwotICAgIHsgInNjcmVl biIsICAgICAgWFhTQ1JOLCAwIH0sCS8qIFNDUkVFTiBhY3Rpb25zICovCi0jaWZuZGVmIE5PU0NS SVBUCi0gICAgeyAic2NyaXB0IiwJICAgWFhMT0dJLCBDTV9MT0MgfSwJLyogRXhwZWN0LVNlbmQt c3R5bGUgc2NyaXB0IGxpbmUgKi8KLSNlbHNlCi0gICAgeyAic2NyaXB0IiwJICAgWFhOT1RBViwg Q01fSU5WfENNX0xPQyB9LAotI2VuZGlmIC8qIE5PU0NSSVBUICovCi0KLSAgICB7ICJzZWFyY2gi LCAgICBYWEdSRVAsQ01fSU5WIH0sCS8qIFN5bm9ueW0gZm9yIEdSRVAgYW5kIEZJTkQgKi8KLQot I2lmbmRlZiBOT1hGRVIKLSAgICB7ICJzZW5kIiwJICAgWFhTRU4sIDAgfSwJCS8qIFNlbmQgKGEp IGZpbGUocykgKi8KLSNpZm5kZWYgTk9TRVJWRVIKLSAgICB7ICJzZXJ2ZXIiLAkgICBYWFNFUiwg MCB9LAkJLyogQmUgYSBTRVJWRVIgKi8KLSNlbHNlCi0gICAgeyAic2VydmVyIiwJICAgWFhOT1RB ViwgQ01fSU5WIH0sCi0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8K LQotICAgIHsgInNldCIsCSAgIFhYU0VULCAwIH0sCQkvKiBTRVQgcGFyYW1ldGVycyAqLwotCi0j aWZuZGVmIE5PU1BMCi0jaWZuZGVmIE5PU0VYUAotICAgIHsgInNleHByZXNzaW9uIiwgWFhTRVhQ LCBDTV9JTlZ8Q01fSExQIH0sIC8qIFNFWFBSICovCi0jZW5kaWYgLyogTk9TRVhQICovCi0KLSNp ZmRlZiBTRlRQX0JVSUxUSU4KLSAgICB7ICJzZnRwIiwgICAgICAgIFhYU0ZUUCwgMCB9LCAgIC8q IFNGVFAgKi8KLSNlbmRpZiAvKiBTRlRQX0JVSUxUSU4gKi8KLQotI2lmbmRlZiBOT1NIT1cKLSAg ICB7ICJzaCIsICAgICAgICAgIFhYU0hPLCBDTV9JTlZ8Q01fQUJSIH0sIC8qIFNIT1cgcGFyYW1l dGVycyAqLwotI2VuZGlmIC8qIE5PU0hPVyAqLwotICAgIHsgInNoaWZ0IiwgICAgICAgWFhTSElG VCwgMCB9LAkvKiBTSElGVCBhcmdzICovCi0jZWxzZQotICAgIHsgInNoaWZ0IiwgICAgICAgWFhO T1RBViwgQ01fSU5WIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT1NIT1cKLSAg ICB7ICJzaG93IiwgCSAgIFhYU0hPLCAwIH0sCQkvKiBTSE9XIHBhcmFtZXRlcnMgKi8KLSNlbHNl Ci0gICAgeyAic2hvdyIsIAkgICBYWE5PVEFWLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBOT1NIT1cg Ki8KLQotI2lmZGVmIE5FV0ZUUAotICAgIHsgInNpdGUiLCAgICAgICAgWFhTSVRFLCBDTV9JTlYg fSwJLyogKEZUUCkgU0lURSAqLwotI2VuZGlmIC8qIE5FV0ZUUCAqLwotCi0jaWZkZWYgU1NIQlVJ TFRJTgotICAgIHsgInNrZXJtaXQiLCAgIFhYU0tSTSwgMCB9LCAgICAgLyogU0tFUk1JVCAqLwot I2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KLQotI2lmbmRlZiBOT1NQTAotI2lmbmRlZiBOT0ZSSUxM UwotICAgIHsgInNsZWVwIiwgICAgICAgWFhQQVUsIENNX0lOViB9LAkvKiBTTEVFUCBmb3Igc3Bl Y2lmaWVkIGludGVydmFsICovCi0jZW5kaWYgLyogTk9GUklMTFMgKi8KLSNlbmRpZiAvKiBOT1NQ TCAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAic29ydCIsICAgICAgICBYWFNPUlQsIENNX0lO ViB9LAkvKiAoc2VlIEFSUkFZKSAqLwotI2Vsc2UKLSAgICB7ICJzb3J0IiwgICAgICAgIFhYTk9U QVYsIENNX0lOViB9LAotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5kZWYgTUFDCi0jaWZuZGVm IE5PRlJJTExTCi0gICAgeyAic3AiLCAgICAgICAgICBYWFNQQSwgQ01fSU5WfENNX0FCUiB9LAot ICAgIHsgInNwYSIsICAgICAgICAgWFhTUEEsIENNX0lOVnxDTV9BQlIgfSwKLSNlbmRpZiAvKiBO T0ZSSUxMUyAqLwotICAgIHsgInNwYWNlIiwgICAgICAgWFhTUEEsIDAgfSwJLyogU2hvdyBhdmFp bGFibGUgZGlzayBTUEFDRSAqLwotI2VuZGlmIC8qIE1BQyAqLwotCi0jaWZuZGVmIE5PRlJJTExT Ci0jaWZuZGVmIE5PUFVTSAotICAgIHsgInNwYXduIiwgICAgICAgWFhTSEUsIENNX0lOVnxDTV9Q U0ggfSwgLyogU3lub255bSBmb3IgUFVTSCwgUlVOICovCi0jZWxzZQotICAgIHsgInNwYXduIiwg ICAgICAgWFhOT1RBViwgQ01fSU5WfENNX1BTSCB9LCAvKiBTeW5vbnltIGZvciBQVVNILCBSVU4g Ki8KLSNlbmRpZiAvKiBOT1BVU0ggKi8KLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotCi0jaWZkZWYg QU5ZU1NICi0gICAgeyAic3NoIiwgICAgICAgICBYWFNTSCwgMCB9LAotI2VuZGlmIC8qIEFOWVNT SCAqLwotCi0jaWZuZGVmIE5PWEZFUgotICAgIHsgInN0YSIsICAgICAgICAgWFhTVEEsIENNX0lO VnxDTV9BQlIgfSwKLSAgICB7ICJzdGF0IiwgICAgICAgIFhYU1RBLCBDTV9JTlZ8Q01fQUJSIH0s Ci0gICAgeyAic3RhdGlzdGljcyIsICBYWFNUQSwgMCB9LAkvKiBEaXNwbGF5IGZpbGUgdHJhbnNm ZXIgc3RhdHMgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotICAgIHsgInN0YXR1cyIsICAgICAg WFhTVEFUVVMsMCB9LAkvKiBTaG93IHN0YXR1cyBvZiBwcmV2aW91cyBjb21tYW5kICovCi0KLSNp Zm5kZWYgTk9TUEwKLSAgICB7ICJzdG9wIiwgICAgICAgIFhYU1RPLCAgIDAgfSwJLyogU1RPUCBh bGwgdGFrZSBmaWxlcyBhbmQgbWFjcm9zICovCi0gICAgeyAic3VjY2VlZCIsICAgICBYWFNVQ0Ms ICBDTV9JTlYgfSwJLyogU1VDQ0VFRCAqLwotI2Vsc2UKLSAgICB7ICJzdG9wIiwgICAgICAgIFhY Tk9UQVYsIENNX0lOViB9LAotICAgIHsgInN1Y2NlZWQiLCAgICAgWFhOT1RBViwgQ01fSU5WIH0s Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT0ZSSUxMUwotICAgIHsgIlNVUFBPUlQi LCAgICAgWFhCVUcsIDAgfSwJLyogVGVjaCBzdXBwb3J0IGluc3RydWN0aW9ucyAqLwotI2Vsc2UK LSAgICB7ICJzdXBwb3J0IiwgICAgIFhYTk9UQVYsIENNX0lOViB9LAotI2VuZGlmIC8qIE5PRlJJ TExTICovCi0KLSNpZm5kZWYgTk9KQwotICAgIHsgInN1c3BlbmQiLCAgICAgWFhTVVMsIENNX1BT SCB9LAkvKiBTVVNQRU5EIEMtS2VybWl0IChVTklYIG9ubHkpICovCi0jZWxzZQotICAgIHsgInN1 c3BlbmQiLCAgICAgWFhOT1RBViwgQ01fSU5WfENNX1BTSCB9LAotI2VuZGlmIC8qIE5PSkMgKi8K LQotI2lmbmRlZiBOT1NQTAotICAgIHsgInN3aXRjaCIsICAgICAgWFhTV0lULCAwIH0sCS8qIFNX SVRDSCAqLwotI2Vsc2UKLSAgICB7ICJzd2l0Y2giLCAgICAgIFhYTk9UQVYsIENNX0lOViB9LAot I2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZmRlZiBDS19UQVBJCi0gICAgeyAidGEiLAkgICBYWFRB SywgQ01fSU5WfENNX0FCUiB9LCAvKiAoYmVjYXVzZSBvZiBUQVBJKSAqLwotI2VuZGlmIC8qIENL X1RBUEkgKi8KLQotI2lmbmRlZiBOT0ZSSUxMUwotICAgIHsgInRhaWwiLCAgICAgICAgWFhUQUlM LCAwIH0sCS8qIERpc3BsYXkgZW5kIG9mIGEgbG9jYWwgZmlsZSAqLwotI2VuZGlmIC8qIE5PRlJJ TExTICovCi0KLSAgICB7ICJ0YWtlIiwJICAgWFhUQUssIDAgfSwJCS8qIFRBS0UgY29tbWFuZHMg ZnJvbSBhIGZpbGUgKi8KLQotI2lmZGVmIENLX1RBUEkKLSAgICB7ICJ0YXBpIiwJICAgWFhUQVBJ LCBDTV9MT0MgfSwJLyogTWljcm9zb2Z0IFRBUEkgY29tbWFuZHMgKi8KLSNlbHNlCi0gICAgeyAi dGFwaSIsCSAgIFhYTk9UQVYsIENNX0lOVnxDTV9MT0MgfSwKLSNlbmRpZiAvKiBDS19UQVBJICov Ci0KLSNpZm5kZWYgTk9GUklMTFMKLSNpZmRlZiBUQ1BTT0NLRVQKLSAgICB7ICJ0ZWwiLCAgICAg ICAgIFhYVEVMLCBDTV9JTlZ8Q01fQUJSfENNX0xPQyB9LAotICAgIHsgInRlbG5ldCIsICAgICAg WFhURUwsIENNX0xPQyB9LAkvKiBURUxORVQgKFRDUC9JUCBvbmx5KSAqLwotICAgIHsgInRlbG9w dCIsICAgICAgWFhURUxPUCwgQ01fSU5WIH0sCS8qIFRFTE9QVCAoZGl0dG8pICovCi0jZWxzZQot ICAgIHsgInRlbCIsICAgICAgICAgWFhOT1RBViwgQ01fSU5WfENNX0xPQyB9LAotICAgIHsgInRl bG5ldCIsICAgICAgWFhOT1RBViwgQ01fSU5WfENNX0xPQyB9LAotICAgIHsgInRlbG9wdCIsICAg ICAgWFhOT1RBViwgQ01fSU5WIH0sCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0jaWZkZWYgT1My Ci0gICAgeyAidGVybWluYWwiLCAgICBYWFRFUk0sIENNX0lOVnxDTV9MT0MgfSwgLyogPT0gU0VU IFRFUk1JTkFMIFRZUEUgKi8KLSNlbHNlCi0gICAgeyAidGVybWluYWwiLCAgICBYWFRFUk0sIENN X0lOViB9LAotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PRlJJTExTICovCi0jaWZuZGVm IE5PWEZFUgotICAgIHsgInRleHQiLCAgICAgICAgWFhBU0MsIENNX0lOViB9LAkvKiA9PSBTRVQg RklMRSBUWVBFIFRFWFQgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSAgICB7ICJ0b3VjaCIsICAg ICAgIFhYVE9VQywgMCB9LAkvKiBUT1VDSCAqLwotI2lmbmRlZiBOT1NQTAotICAgIHsgInRyYWNl IiwgICAgICAgWFhUUkFDRSwgMCB9LAkvKiBUUkFDRSAqLwotI2Vsc2UKLSAgICB7ICJ0cmFjZSIs ICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5kZWYg Tk9DU0VUUwotICAgIHsgInRyYW5zbGF0ZSIsICAgWFhYTEEsIDAgfSwJLyogVFJBTlNMQVRFIGxv Y2FsIGZpbGUgY2hhciBzZXRzICovCi0jZWxzZQotICAgIHsgInRyYW5zbGF0ZSIsICAgWFhOT1RB ViwgQ01fSU5WIH0sCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotCi0jaWZuZGVmIE5PWE1JVAotICAg IHsgInRyYW5zbWl0IiwgICAgWFhUUkEsIDAgfSwJLyogU2VuZCAodXBsb2FkKSBhIGZpbGUsIG5v IHByb3RvY29sICovCi0jZWxzZQotICAgIHsgInRyYW5zbWl0IiwgICAgWFhOT1RBViwgQ01fSU5W IH0sCi0jZW5kaWYgLyogTk9YTUlUICovCi0KLSNpZm5kZWYgTk9GUklMTFMKLSAgICB7ICJ0eXBl IiwgICAgICAgIFhYVFlQLCAwIH0sCS8qIERpc3BsYXkgYSBsb2NhbCBmaWxlICovCi0jZW5kaWYg LyogTk9GUklMTFMgKi8KLQotI2lmbmRlZiBOT1NQTAotICAgIHsgInVuZGNsIiwgICAgICAgWFhV TkRDTCwgQ01fSU5WIH0sCi0gICAgeyAidW5kZWNsYXJlIiwgICBYWFVORENMLCAwIH0sCS8qIFVO REVDTEFSRSBhbiBhcnJheSAqLwotICAgIHsgInVuZGVmaW5lIiwgICAgWFhVTkRFRiwgMCB9LAkv KiBVTkRFRklORSBhIHZhcmlhYmxlIG9yIG1hY3JvICovCi0jZWxzZQotICAgIHsgInVuZGNsIiwg ICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCi0gICAgeyAidW5kZWNsYXJlIiwgICBYWE5PVEFWLCBD TV9JTlYgfSwKLSAgICB7ICJ1bmRlZmluZSIsICAgIFhYTk9UQVYsIENNX0lOViB9LAotI2VuZGlm IC8qIE5PU1BMICovCi0KLSNpZmRlZiBORVdGVFAKLSAgICB7ICJ1c2VyIiwgICAgICAgIFhYVVNF UiwgIENNX0lOViB9LCAvKiAoRlRQKSBVU0VSICovCi0jZW5kaWYgLyogTkVXRlRQICovCi0KLSAg ICB7ICJ2ZXJzaW9uIiwgICAgIFhYVkVSLCAwIH0sCS8qIFZFUlNJT04tbnVtYmVyIGRpc3BsYXkg Ki8KLQotI2lmZGVmIE9TMgotICAgIHsgInZpZXdvbmx5IiwgICAgWFhWSUVXLCBDTV9MT0MgfSwJ LyogVklFV09OTFkgVGVybWluYWwgTW9kZSAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAgeyAi dm9pZCIsICAgICAgICBYWFZPSUQsIDAgfSwJLyogVk9JRCAqLwotCi0jaWZuZGVmIE5PU1BMCi0g ICAgeyAid2FpdCIsICAgICAgICBYWFdBSSwgMCB9LAkvKiBXQUlUICovCi0jZWxzZQotICAgIHsg IndhaXQiLCAgICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8KLQot ICAgIHsgIndkaXJlY3RvcnkiLCAgWFhXRElSLCAgQ01fSU5WIH0sCS8qIExpa2UgVE9QUy0yMCwg cmV2ZXJzZSBjaHJvbiBvcmRlciAqLwotICAgIHsgIndlcm1pdCIsICAgICAgWFhLRVJNSSwgQ01f SU5WIH0sCi0KLSNpZm5kZWYgTk9YRkVSCi0gICAgeyAid2hlcmUiLCAgICAgICBYWFdIRVJFLCAw IH0sCS8qIFdIRVJFIChkaWQgbXkgZmlsZSBnbz8pICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0K LSNpZm5kZWYgTk9TUEwKLSAgICB7ICJ3aGlsZSIsICAgICAgIFhYV0hJLCAwIH0sCS8qIFdISUxF IGxvb3AgKi8KLSNlbHNlCi0gICAgeyAid2hpbGUiLCAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwK LSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVmIE9TMgotI2lmbmRlZiBNQUMKLSNpZm5kZWYg Tk9GUklMTFMKLSAgICB7ICJ3aG8iLCAgICAgICAgIFhYV0hPLCBDTV9QU0ggfSwJLyogV0hPJ3Mg bG9nZ2VkIGluPyAqLwotI2VuZGlmIC8qIE5PRlJJTExTICovCi0jZW5kaWYgLyogTUFDICovCi0j ZW5kaWYgLyogT1MyICovCi0KLSNpZm5kZWYgTk9IRUxQCi0gICAgeyAid2lsZGNhcmRzIiwgICBY WFdJTEQsQ01fSU5WfENNX0hMUCB9LCAvKiBXaWxkY2FyZCBzeW50YXggKi8KLSNlbmRpZiAvKiBO T0hFTFAgKi8KLQotI2lmbmRlZiBOT1NQTAotICAgIHsgIndyIiwgICAgICAgICAgWFhXUkksIENN X0lOVnxDTV9BQlIgfSwKLSAgICB7ICJ3cmkiLCAgICAgICAgIFhYV1JJLCBDTV9JTlZ8Q01fQUJS IH0sCi0gICAgeyAid3JpdCIsICAgICAgICBYWFdSSSwgQ01fSU5WfENNX0FCUiB9LAotICAgIHsg IndyaXRlIiwgICAgICAgWFhXUkksIDAgfSwJLyogV1JJVEUgY2hhcmFjdGVycyB0byBhIGZpbGUg Ki8KLSAgICB7ICJ3cml0ZS1saW5lIiwgIFhYV1JMLCBDTV9JTlYgfSwJLyogV1JJVEUgYSBsaW5l IHRvIGEgZmlsZSAqLwotICAgIHsgIndyaXRlbG4iLCAgICAgWFhXUkwsIENNX0lOViB9LAkvKiBQ YXNjYWxpc2NoIHN5bm9ueW0gZm9yIHdyaXRlLWxpbmUgKi8KLSNlbHNlCi0gICAgeyAid3IiLCAg ICAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKLSAgICB7ICJ3cmkiLCAgICAgICAgIFhYTk9UQVYs IENNX0lOViB9LAotICAgIHsgIndyaXQiLCAgICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCi0gICAg eyAid3JpdGUiLCAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKLSAgICB7ICJ3cml0ZS1saW5lIiwg IFhYTk9UQVYsIENNX0lOViB9LAotICAgIHsgIndyaXRlbG4iLCAgICAgWFhOT1RBViwgQ01fSU5W IH0sCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT0ZSSUxMUwotICAgIHsgInhlY2hv IiwgICAgICAgWFhYRUNILDAgfSwJLyogWEVDSE8gKi8KLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwot Ci0jaWZuZGVmIE5PU1BMCi0gICAgeyAieGlmIiwgICAgICAgICBYWElGWCwgQ01fSU5WIH0sCS8q IEV4dGVuZGVkIElGIGNvbW1hbmQgKG9ic29sZXRlKSAqLwotI2Vsc2UKLSAgICB7ICJ4aWYiLCAg ICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5kZWYg Tk9DU0VUUwotICAgIHsgInhsYXRlIiwgICAgICAgWFhYTEEsIENNX0lOViB9LAkvKiBTeW5vbnlt IGZvciBUUkFOU0xBVEUgKi8KLSNlbHNlCi0gICAgeyAieGxhdGUiLCAgICAgICBYWE5PVEFWLCBD TV9JTlYgfSwKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSNpZm5kZWYgTk9YTUlUCi0gICAgeyAi eG0iLCAgICAgICAgICBYWFRSQSwgQ01fSU5WfENNX0FCUiB9LCAvKiBBdm9pZCBjb25mbGljdCB3 aXRoIFhNRVNTQUdFICovCi0jZWxzZQotICAgIHsgInhtIiwgICAgICAgICAgWFhOT1RBViwgQ01f SU5WfENNX0FCUiB9LCAvKiBTeW5vbnltIGZvciBUUkFOU01JVCAqLwotI2VuZGlmIC8qIE5PWE1J VCAqLwotCi0gICAgeyAieG1lc3NhZ2UiLCAgICBYWFhNU0csIDAgfSwJLyogUHJpbnQgZGVidWdn aW5nIG1lc3NhZ2UgKi8KLQotI2lmbmRlZiBOT1hNSVQKLSAgICB7ICJ4bWl0IiwgICAgICAgIFhY VFJBLCBDTV9JTlYgfSwJLyogU3lub255bSBmb3IgVFJBTlNNSVQgKi8KLSNlbHNlCi0gICAgeyAi eG1pdCIsICAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBOT1hNSVQgKi8KLQot I2lmbmRlZiBPUzIKLSNpZm5kZWYgTk9KQwotICAgIHsgInoiLCAgICAgICAgICAgWFhTVVMsIENN X0lOVnxDTV9QU0ggfSwgLyogU3lub255bSBmb3IgU1VTUEVORCAqLwotI2Vsc2UKLSAgICB7ICJ6 IiwgICAgICAgICAgIFhYTk9UQVYsIENNX0lOVnxDTV9QU0ggfSwKLSNlbmRpZiAvKiBOT0pDICov Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZm5kZWYgTk9TUEwKLSAgICB7ICJ7IiwgICAgICAgICAg IFhYTUFDUk8sIENNX0lOViB9LAkvKiBJbW1lZGlhdGUgbWFjcm8gKi8KLSNlbmRpZiAvKiBOT1NQ TCAqLwotICAgIHsgIiIsIDAsIDAgfQotfTsKLWludCBuY21kID0gKHNpemVvZihjbWR0YWIpIC8g c2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLS8qIE5PVEU6IFRva2VucyBtdXN0IGFsc28g YmUgZW50ZXJlZCBhYm92ZSBpbnRvIGNtZHRhYltdLiAqLwotCi1jaGFyIHRva3RhYltdID0gewot I2lmbmRlZiBOT1BVU0gKLSAgICAnIScsCQkJCS8qIFNoZWxsIGVzY2FwZSAqLwotI2VuZGlmIC8q IE5PUFVTSCAqLwotICAgICcjJywJCQkJLyogQ29tbWVudCAqLwotI2lmbmRlZiBOT1NQTAotICAg ICcoJywJCQkJLyogUy1FeHByZXNzaW9uICovCi0gICAgJy4nLAkJCQkvKiBBc3NpZ25tZW50ICov Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICAnOycsCQkJCS8qIENvbW1lbnQgKi8KLSNpZm5kZWYg Tk9TUEwKLSAgICAnOicsCQkJCS8qIExhYmVsICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZm5k ZWYgTk9QVVNICi0jaWZkZWYgQ0tfUkVESVIKLSAgICAnPCcsCQkJCS8qIFJFRElSRUNUICovCi0j ZW5kaWYgLyogQ0tfUkVESVIgKi8KLSAgICAnQCcsCQkJCS8qIERDTCBlc2NhcGUgKi8KLSNlbmRp ZiAvKiBOT1BVU0ggKi8KLSNpZmRlZiBDS19SRUNBTEwKLSAgICAnXicsCQkJCS8qIENvbW1hbmQg cmVjYWxsICovCi0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0jaWZuZGVmIE5PU1BMCi0gICAgJ3sn LAkJCQkvKiBJbW1lZGlhdGUgbWFjcm8gKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgICdcMCcJ CQkJLyogRW5kIG9mIHRoaXMgc3RyaW5nICovCi19OwotaW50IHh4ZG90ID0gMDsJCQkJLyogVXNl ZCB3aXRoICIuIiB0b2tlbiAqLwotCi1zdHJ1Y3Qga2V5dGFiIHllc25vW10gPSB7CQkvKiBZZXMv Tm8ga2V5d29yZCB0YWJsZSAqLwotICAgIHsgIm5vIiwgICAgMCwgMCB9LAotICAgIHsgIm9rIiwg ICAgMSwgMCB9LAotICAgIHsgInllcyIsICAgMSwgMCB9Ci19OwotaW50IG55ZXNubyA9IChzaXpl b2YoeWVzbm8pIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotLyogU2F2ZSBrZXl3b3JkIHRh YmxlICovCi0KLXN0cnVjdCBrZXl0YWIgc2F2dGFiW10gPSB7Ci0jaWZkZWYgT1MyCi0gICAgeyAi Y29tbWFuZCIsICBYU0NNRCwgMCB9LAotI2Vsc2UKLSNpZmRlZiBDS19SRUNBTEwKLSAgICB7ICJj b21tYW5kIiwgIFhTQ01ELCAwIH0sCi0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0jZW5kaWYgLyog T1MyICovCi0jaWZuZGVmIE5PU0VUS0VZCi0gICAgeyAia2V5bWFwIiwgICBYU0tFWSwgMCB9LAot I2VuZGlmIC8qIE5PU0VUS0VZICovCi0jaWZkZWYgT1MyCi0gICAgeyAidGVybWluYWwiLCBYU1RF Uk0sIDAgfSwKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1pbnQgbnNh diA9IChzaXplb2Yoc2F2dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwotCi0vKiBQ YXJhbWV0ZXIga2V5d29yZCB0YWJsZSAqLwotCi1zdHJ1Y3Qga2V5dGFiIHBybXRhYltdID0gewot ICAgIHsgImFsYXJtIiwgICAgICAgICAgICBYWUFMUk0sICAwIH0sCi0jaWZkZWYgQ09NTUVOVAkJ CQkvKiBTRVQgQU5TV0VSIG5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KLSNpZm5kZWYgTk9ESUFMCi0g ICAgeyAiYW5zd2VyIiwgICAgICAgICAgIFhZQU5TV0VSLDAgfSwKLSNlbmRpZiAvKiBOT0RJQUwg Ki8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgeyAiYXNrLXRpbWVyIiwgICAgICAgIFhZVElN RVIsIDAgfSwKLSNpZm5kZWYgTk9YRkVSCi0gICAgeyAiYXR0cmlidXRlcyIsICAgICAgIFhZQVRU UiwgIDAgfSwKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgot ICAgIHsgImF1dGhlbnRpY2F0aW9uIiwgICBYWUFVVEgsICAwIH0sCi0jZWxzZSAgLyogQ0tfQVVU SEVOVElDQVRJT04gKi8KLSNpZmRlZiBDS19TU0wKLSAgICB7ICJhdXRoZW50aWNhdGlvbiIsICAg WFlBVVRILCAgMCB9LAotI2VuZGlmIC8qIENLX1NTTCAqLwotI2VuZGlmIC8qIENLX0FVVEhFTlRJ Q0FUSU9OICovCi0gICAgeyAiYiIsCQkgIFhZQkFDSywgIENNX0lOVnxDTV9BQlJ8Q01fUFNIIH0s Ci0gICAgeyAiYmEiLAkJICBYWUJBQ0ssICBDTV9JTlZ8Q01fQUJSfENNX1BTSCB9LAotI2lmZGVm IFZNUwotICAgIHsgImJhY2tncm91bmQiLCAgICAgICBYWUJBQ0ssICBDTV9JTlZ8Q01fUFNIIH0s Ci0gICAgeyAiYmF0Y2giLCAgICAgICAgICAgIFhZQkFDSywgIENNX1BTSCB9LAotI2Vsc2UKLSAg ICB7ICJiYWNrZ3JvdW5kIiwgICAgICAgWFlCQUNLLCAgQ01fUFNIIH0sCi0gICAgeyAiYmF0Y2gi LCAgICAgICAgICAgIFhZQkFDSywgIENNX0lOVnxDTV9QU0ggfSwKLSNlbmRpZiAvKiBWTVMgKi8K LSNpZm5kZWYgTk9MT0NBTAotICAgIHsgImJhdWQiLAkgICAgICAgICAgWFlTUEVFLCAgQ01fSU5W fENNX0xPQyB9LAotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSAgICB7ICJiZWxsIiwgICAgICAgICAg ICAgWFlCRUxMLCAgMCB9LAotI2lmbmRlZiBOT1hGRVIKLSAgICB7ICJibG9jay1jaGVjayIsICAJ ICBYWUNIS1QsICAwIH0sCi0jZW5kaWYgLyogTk9YRkVSICovCi0jaWZkZWYgT1MyCi0jaWZkZWYg QlBSSU5UCi0gICAgeyAiYnByaW50ZXIiLCAgICAgICAgIFhZQkRDUCwgIENNX0lOViB9LAotI2Vu ZGlmIC8qIEJQUklOVCAqLwotI2VuZGlmIC8qICBPUzIgKi8KLSNpZmRlZiBCUk9XU0VSCi0gICAg eyAiYnJvd3NlciIsICAgICAgICAgIFhZQlJPV1NFLENNX1BTSHxDTV9MT0MgfSwKLSNlbmRpZiAv KiBCUk9XU0VSICovCi0jaWZuZGVmIE5PWEZFUgotI2lmZGVmIERZTkFNSUMKLSAgICB7ICJidWZm ZXJzIiwgICAgICAgICAgWFlCVUYsICAgMCB9LAotI2VuZGlmIC8qIERZTkFNSUMgKi8KLSNlbmRp ZiAvKiBOT1hGRVIgKi8KLSNpZm5kZWYgTk9MT0NBTAotI2lmbmRlZiBNQUMKLSAgICB7ICJjYXJy aWVyLXdhdGNoIiwgICAgWFlDQVJSLCAgQ01fTE9DIH0sCi0jZW5kaWYgLyogTUFDICovCi0jZW5k aWYgLyogTk9MT0NBTCAqLwotI2lmbmRlZiBOT1NQTAotICAgIHsgImNhc2UiLCAgICAgICAgICAg ICBYWUNBU0UsICAwIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICB7ICJjZCIsICAgICAgICAg ICAgICAgWFlDRCwgICAgMCB9LAotI2lmbmRlZiBOT1hGRVIKLSAgICB7ICJjbCIsICAgICAgICAg ICAgICAgWFlDTEVBUiwgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgImNsZSIsICAgICAgICAgICAg ICBYWUNMRUFSLCBDTV9JTlZ8Q01fQUJSIH0sCi0gICAgeyAiY2xlYSIsICAgICAgICAgICAgIFhZ Q0xFQVIsIENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICJjbGVhciIsICAgICAgICAgICAgWFlDTEVB UiwgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgImNsZWFyLWNoYW5uZWwiLCAgICBYWUNMRUFSLCAw IH0sCi0gICAgeyAiY2xlYXJjaGFubmVsIiwgICAgIFhZQ0xFQVIsIENNX0lOViB9LAotI2VuZGlm IC8qIE5PWEZFUiAqLwotI2lmbmRlZiBOT0xPQ0FMCi0gICAgeyAiY2xvc2Utb24tZGlzY29ubmVj dCIsIFhZRElTQywgQ01fSU5WfENNX0xPQyB9LAotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSAgICB7 ICJjbWQiLCAgICAgICAgICAgICAgWFlDTUQsICAgQ01fSU5WIH0sCi0gICAgeyAiY29tbWFuZCIs ICAgICAgICAgIFhZQ01ELCAgIDAgfSwKLSNpZmRlZiBDS19TUEVFRAotICAgIHsgImNvbiIsICAg ICAgICAgICAgICBYWVFDVEwsICBDTV9JTlZ8Q01fQUJSIH0sCi0jZW5kaWYgLyogQ0tfU1BFRUQg Ki8KLSAgICB7ICJjb25zb2xlIiwgICAgICAgICAgWFlDTUQsICAgQ01fSU5WIH0sCi0jaWZkZWYg Q0tfU1BFRUQKLSAgICB7ICJjb250cm9sLWNoYXJhY3RlciIsWFlRQ1RMLCAgMCB9LAotI2VuZGlm IC8qIENLX1NQRUVEICovCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAiY291bnQiLCAgICAgICAgICAg IFhZQ09VTiwgIDAgfSwKLSNlbmRpZiAvKiBOT1NQTCAqLwotI2lmbmRlZiBOT1hGRVIKLSAgICB7 ICJkIiwJCSAgWFlERUxBLCAgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgImRlIiwJCSAgWFlERUxB LCAgQ01fSU5WfENNX0FCUiB9LAotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgIHsgImRlYnVnIiwg ICAgICAgICAgICBYWURFQlUsICAwIH0sCi0jaWZkZWYgVk1TCi0gICAgeyAiZGVmYXVsdCIsICAg ICAgICAgIFhZREZMVCwgIDAgfSwKLSNlbHNlCi0jaWZuZGVmIE1BQwotICAgIHsgImRlZmF1bHQi LCAgICAgICAgICBYWURGTFQsICBDTV9JTlYgfSwKLSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAv KiBWTVMgKi8KLSNpZm5kZWYgTk9YRkVSCi0gICAgeyAiZGVsYXkiLAkgICAgCSAgWFlERUxBLCAg MCB9LAotICAgIHsgImRlc3RpbmF0aW9uIiwJICBYWURFU1QsICAwIH0sCi0jZW5kaWYgLyogTk9Y RkVSICovCi0jaWZuZGVmIE5PRElBTAotICAgIHsgImRpIiwJCSAgWFlESUFMLCAgQ01fSU5WfENN X0FCUnxDTV9MT0MgfSwKLSAgICB7ICJkaWEiLAkJICBYWURJQUwsICBDTV9JTlZ8Q01fQUJSfENN X0xPQyB9LAotICAgIHsgImRpYWwiLCAgICAgICAgICAgICBYWURJQUwsICBDTV9MT0MgfSwKLSNl bmRpZiAvKiBOT0RJQUwgKi8KLSNpZmRlZiBPUzIKLSAgICB7ICJkaWFsZXIiLAkJICBYWURMUiwg ICBDTV9JTlYgfSwKLSNlbmRpZiAvKiBPUzIgKi8KLSNpZm5kZWYgTk9MT0NBTAotICAgIHsgImRp c2Nvbm5lY3QiLCAgICAgICBYWURJU0MsICBDTV9MT0MgfSwKLSAgICB7ICJkdXBsZXgiLAkgICAg CSAgWFlEVVBMLCAgQ01fTE9DIH0sCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2lmbmRlZiBOT1BV U0gKLSNpZm5kZWYgTk9GUklMTFMKLSAgICB7ICJlZGl0b3IiLCAgICAgICAgICAgWFlFRElULCAg Q01fUFNIIH0sCi0jZW5kaWYgLyogIE5PRlJJTExTICovCi0jZW5kaWYgLyogTk9QVVNIICovCi0j aWZkZWYgQ0tfQ1RSTFoKLSAgICB7ICJlb2YiLCAgICAgICAgICAgICAgWFlFT0YsICAgQ01fSU5W IH0sCi0jZW5kaWYgLyogQ0tfQ1RSTFogKi8KLSNpZm5kZWYgTk9MT0NBTAotICAgIHsgImVzY2Fw ZS1jaGFyYWN0ZXIiLCBYWUVTQywgICBDTV9MT0MgfSwKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0j aWZuZGVmIE5PU1BMCi0gICAgeyAiZXZhbHVhdGUiLCAgICAgICAgIFhZRVZBTCwgIENNX0lOViB9 LAotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgeyAiZXhpdCIsCQkgIFhZRVhJVCwgIDAgfSwKLSNp Zm5kZWYgTk9YRkVSCi0jaWZkZWYgQ0tfWFlaCi0jaWZuZGVmIE5PUFVTSAotI2lmbmRlZiBYWVpf SU5URVJOQUwKLSAgICB7ICJleHRlcm5hbC1wcm90b2NvbCIsWFlFWFRSTiwgMCB9LAotI2VuZGlm CS8qIFhZWl9JTlRFUk5BTCAqLwotI2VuZGlmCS8qIE5PUFVTSCAqLwotI2VuZGlmCS8qIENLX1hZ WiAqLwotICAgIHsgImYtYWNrLWJ1ZyIsICAgICAgICBYWUZBQ0tCLCBDTV9JTlYgfSwKLSAgICB7 ICJmLWFjay1wYXRoIiwgICAgICAgWFlGQUNLUCwgQ01fSU5WIH0sCi0jZW5kaWYgLyogTk9YRkVS ICovCi0gICAgeyAiZmlsZSIsIAkgIAkgIFhZRklMRSwgIDAgfSwKLSAgICB7ICJmbCIsICAgICAg ICAgICAJICBYWUZMT1csICBDTV9JTlZ8Q01fQUJSIH0sCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAi ZmxhZyIsICAgICAgICAgICAgIFhZRkxBRywgIDAgfSwKLSNlbmRpZiAvKiBOT1NQTCAqLwotI2lm ZGVmIFRDUFNPQ0tFVAotI2lmbmRlZiBTWVNGVFAKLSNpZm5kZWYgTk9GVFAKLSAgICB7ICJmdCIs ICAgCSAgICAgICAgICBYWUZUUFgsICBDTV9JTlZ8Q01fQUJSIH0sCi0gICAgeyAiZnRwIiwgIAkg ICAgICAgICAgWFlGVFBYLCAgMCB9LAotI2VuZGlmIC8qIE5PRlRQICovCi0jZW5kaWYgLyogU1lT RlRQICovCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0jaWZkZWYgQlJPV1NFUgotICAgIHsgImZ0 cC1jbGllbnQiLCAgICAgICBYWUZUUCwgICBDTV9QU0ggfSwKLSNlbmRpZiAvKiBCUk9XU0VSICov Ci0gICAgeyAiZmxvdy1jb250cm9sIiwgCSAgWFlGTE9XLCAgMCB9LAotI2lmbmRlZiBOT1NQTAot ICAgIHsgImZ1bmN0aW9uIiwgICAgICAgICBYWUZVTkMsICAwIH0sCi0jZW5kaWYgLyogTk9TUEwg Ki8KLSNpZmRlZiBORVdGVFAKLSAgICB7ICJnZXQtcHV0LXJlbW90ZSIsICAgWFlHUFIsICAgMCB9 LAotI2VuZGlmIC8qIE5FV0ZUUCAqLwotI2lmZGVmIEtVSQotICAgIHsgImd1aSIsICAgICAgICAg ICAgICBYWUdVSSwgICAwIH0sCi0jZW5kaWYgLyogS1VJICovCi0gICAgeyAiaGFuZHNoYWtlIiwg ICAgCSAgWFlIQU5ELCAgMCB9LAotICAgIHsgImhpbnRzIiwgICAgICAgICAgICBYWUhJTlRTLCAw IH0sCi0jaWZkZWYgTkVUQ09OTgotICAgIHsgImhvc3QiLCAgICAgICAgICAgICBYWUhPU1QsICBD TV9MT0MgfSwKLSNlbmRpZiAvKiBORVRDT05OICovCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAiaSIs CQkgIFhZSU5QVSwgIENNX0lOVnxDTV9BQlIgfSwKLSNlbmRpZiAvKiBOT1NQTCAqLwotI2lmZGVm IElLU0QKLSAgICB7ICJpa3MiLCAgICAgICAgICAgICAgWFlJS1MsICAgMCB9LAotI2Vsc2UKLSAg ICB7ICJpa3MiLCAgICAgICAgICAgICAgWFlJS1MsICAgQ01fSU5WIH0sCi0jZW5kaWYgLyogSUtT RCAqLwotI2lmbmRlZiBOT1NQTAotICAgIHsgImluIiwJCSAgWFlJTlBVLCAgQ01fSU5WfENNX0FC UiB9LAotI2VuZGlmIC8qIE5PU1BMICovCi0jaWZuZGVmIE5PWEZFUgotICAgIHsgImluY29tcGxl dGUiLCAgIAkgIFhZSUZELCAgIENNX0lOViB9LAotI2VuZGlmIC8qIE5PWEZFUiAqLwotI2lmbmRl ZiBOT1NQTAotICAgIHsgImlucHV0IiwgICAgICAgICAgICBYWUlOUFUsICAwIH0sCi0jZW5kaWYg LyogTk9TUEwgKi8KLSNpZm5kZWYgTk9TRVRLRVkKLSAgICB7ICJrZXkiLAkJICBYWUtFWSwgICAw IH0sCi0jZW5kaWYgLyogTk9TRVRLRVkgKi8KLSAgICB7ICJsIiwgICAgICAgICAgICAgICAgWFlM SU5FLCAgQ01fSU5WfENNX0FCUiB9LAotI2lmbmRlZiBOT0NTRVRTCi0gICAgeyAibGFuZ3VhZ2Ui LCAgICAgICAgIFhZTEFORywgIDAgfSwKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0jaWZuZGVmIE5P TE9DQUwKLSAgICB7ICJsaW5lIiwgICAgICAgICAgICAgWFlMSU5FLCAgQ01fTE9DIH0sCi0gICAg eyAibG9jYWwtZWNobyIsCSAgWFlMQ0xFLCAgQ01fSU5WfENNX0xPQyB9LAotI2VuZGlmIC8qIE5P TE9DQUwgKi8KLSNpZmRlZiBMT0NVUwotICAgIHsgImxvY3VzIiwgICAgICAgICAgICBYWUxPQ1VT LCAwIH0sCi0jZW5kaWYgLyogTE9DVVMgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICB7ICJsb2dpbiIs CQkgIFhZTE9HSU4sIENNX0xPQyB9LAotI2VuZGlmIC8qIE5PU1BMICovCi0jaWZuZGVmIE5PU1BM Ci0gICAgeyAibWFjcm8iLCAgICAgICAgICAgIFhZTUFDUiwgIDAgfSwKLSNlbmRpZiAvKiBOT1NQ TCAqLwotICAgIHsgIm1hdGNoIiwgICAgICAgICAgICBYWU1BVENILCAwIH0sCi0jaWZkZWYgQ09N TUVOVAotI2lmZGVmIFZNUwotICAgIHsgIm1lc3NhZ2VzIiwgICAgICAgICBYWU1TR1MsICAwIH0s Ci0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2lmbmRlZiBOT0RJQUwK LSAgICB7ICJtb2RlbSIsCQkgIFhZTU9ETSwgIENNX0xPQyB9LAotI2VuZGlmIC8qIE5PRElBTCAq LwotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyTU9VU0UKLSAgICB7ICJtb3VzZSIsCQkgIFhZ TU9VU0UsIDAgfSwKLSNlbmRpZiAvKiBPUzJNT1VTRSAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8K LSNpZmRlZiBPUzIKLSAgICB7ICJtc2tlcm1pdCIsICAgICAgICAgWFlNU0ssICAgMCB9LAotI2Vu ZGlmIC8qIE9TMiAqLwotI2lmZGVmIE5FVENPTk4KLSAgICB7ICJuZXR3b3JrIiwgICAgICAgICAg WFlORVQsICAgQ01fTE9DIH0sCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotI2lmbmRlZiBOT1NQTAot ICAgIHsgIm91dHB1dCIsICAgICAgICAgICBYWU9VVFAsICAwIH0sCi0jZW5kaWYgLyogTk9TUEwg Ki8KLSAgICB7ICJvcHRpb25zIiwgICAgICAgICAgWFlPUFRTLCAgMCB9LAotICAgIHsgInBhdXNl IiwgICAgICAgICAgICBYWVNMRUVQLCBDTV9JTlYgfSwKLSNpZmRlZiBBTllYMjUKLSNpZm5kZWYg SUJNWDI1Ci0gICAgeyAicGFkIiwgICAgICAgICAgICAgIFhZUEFELCAgIENNX0xPQyB9LAotI2Vu ZGlmIC8qIElCTVgyNSAqLwotI2VuZGlmIC8qIEFOWVgyNSAqLwotICAgIHsgInBhcml0eSIsCSAg ICAJICBYWVBBUkksICAwIH0sCi0jaWZuZGVmIE5PTE9DQUwKLSNpZmRlZiBPUzIKLSAgICB7ICJw b3J0IiwgICAgICAgICAgICAgWFlMSU5FLCAgQ01fTE9DIH0sCi0jZWxzZQotICAgIHsgInBvcnQi LCAgICAgICAgICAgICBYWUxJTkUsICBDTV9JTlZ8Q01fTE9DIH0sCi0jZW5kaWYgLyogT1MyICov Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotI2lmbmRlZiBOT0ZSSUxMUwotICAgIHsgInByIiwgICAJ ICAgIAkgIFhZUFJPTSwgIENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICJwcmludGVyIiwgICAgICAg ICAgWFlQUlRSLCAgMCB9LAotI2VuZGlmIC8qIE5PRlJJTExTICovCi0jaWZkZWYgT1MyCi0gICAg eyAicHJpb3JpdHkiLCAgICAgICAgIFhZUFJUWSwgIDAgfSwKLSNlbmRpZiAvKiBPUzIgKi8KLSNp ZmRlZiBDS19TUEVFRAotICAgIHsgInByZWZpeGluZyIsICAgICAgICBYWVBSRUZJWCwgMCB9LAot I2VuZGlmIC8qIENLX1NQRUVEICovCi0jaWZuZGVmIE5PRlJJTExTCi0gICAgeyAicHJvbXB0IiwJ ICAgIAkgIFhZUFJPTSwgIDAgfSwKLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotI2lmbmRlZiBOT1hG RVIKLSAgICB7ICJwcm90b2NvbCIsCSAgWFlQUk9UTywgMCB9LAotI2VuZGlmIC8qIE5PWEZFUiAq LwotICAgIHsgInEiLAkJICBYWVFVSUUsICBDTV9JTlZ8Q01fQUJSIH0sCi0jaWZuZGVmIE5PWEZF UgotICAgIHsgInE4ZmxhZyIsICAgICAgICAgICBYWVE4RkxHLCBDTV9JTlYgfSwKLSNlbmRpZiAv KiBOT1hGRVIgKi8KLSNpZmRlZiBRTlgKLSAgICB7ICJxbngtcG9ydC1sb2NrIiwgICAgWFlRTlhQ TCwgMCB9LAotI2Vsc2UKLSAgICB7ICJxbngtcG9ydC1sb2NrIiwgICAgWFlRTlhQTCwgQ01fSU5W IH0sCi0jZW5kaWYgLyogUU5YICovCi0gICAgeyAicXVpZXQiLAkJICBYWVFVSUUsICAwIH0sCi0j aWZuZGVmIE5PWEZFUgotICAgIHsgInJlYyIsICAgICAgICAgICAgICBYWVJFQ1YsICBDTV9JTlZ8 Q01fQUJSIH0sCi0gICAgeyAicmVjZWl2ZSIsICAgICAgICAgIFhZUkVDViwgIDAgfSwKLSAgICB7 ICJyZWN2IiwgICAgICAgICAgICAgWFlSRUNWLCAgQ01fSU5WIH0sCi0jZW5kaWYgLyogTk9YRkVS ICovCi0gICAgeyAicmVsaWFibGUiLCAgICAgICAgIFhZUkVMWSwgIDAgfSwKLSAgICB7ICJyZW5h bWUiLCAgICAgICAgICAgWFlfUkVOLCAgMCB9LAotI2lmbmRlZiBOT1hGRVIKLSAgICB7ICJyZXBl YXQiLCAgICAgICAgICAgWFlSRVBULCAgMCB9LAotICAgIHsgInJldHJ5LWxpbWl0IiwgICAgICBY WVJFVFIsICAwIH0sCi0jZW5kaWYgLyogTk9YRkVSICovCi0jaWZkZWYgQ0tST09UCi0gICAgeyAi cm9vdCIsICAgICAgICAgICAgIFhZUk9PVCwgIDAgfSwKLSNlbmRpZiAvKiBDS1JPT1QgKi8KLSNp Zm5kZWYgTk9TQ1JJUFQKLSAgICB7ICJzY3JpcHQiLAkJICBYWVNDUkksICBDTV9MT0MgfSwKLSNl bmRpZiAvKiBOT1NDUklQVCAqLwotI2lmbmRlZiBOT1hGRVIKLSAgICB7ICJzZW5kIiwgICAgICAg ICAgICAgWFlTRU5ELCAgMCB9LAotI2lmbmRlZiBOT0xPQ0FMCi0jaWZuZGVmIE5PU0VSVkVSCi0g ICAgeyAic2VyIiwgICAgICAgICAgICAgIFhZU0VSViwgIENNX0lOVnxDTV9BQlIgfSwKLSNlbmRp ZiAvKiBOT1NFUlZFUiAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgIHsgInNlcmlhbCIsICAg ICAgICAgICBYWVNFUklBTCxDTV9MT0MgfSwKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jaWZuZGVm IE5PU0VSVkVSCi0gICAgeyAic2VydmVyIiwgICAgICAgICAgIFhZU0VSViwgIDAgfSwKLSNlbmRp ZiAvKiBOT1NFUlZFUiAqLwotI2lmZGVmIFNFU0xJTUlUCi0jaWZuZGVmIE5PTE9DQUwKLSAgICB7 ICJzZXNzaW9uLWwiLCAgICAgICAgWFlTRVNTLCAgQ01fSU5WfENNX0FCUiB9LAotI2VuZGlmIC8q IE5PTE9DQUwgKi8KLSAgICB7ICJzZXNzaW9uLWxpbWl0IiwgICAgWFlMSU1JVCwgQ01fSU5WfENN X0xPQyB9LCAvKiBTZXNzaW9uIExpbWl0ICovCi0jZW5kaWYgLyogU0VTTElNSVQgKi8KLQotI2lm bmRlZiBOT0xPQ0FMCi0gICAgeyAic2Vzc2lvbi1sb2ciLCAgICAgIFhZU0VTUywgIENNX0xPQyB9 LAotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmbmRlZiBOT1NQTAotI2lmbmRlZiBOT1NFWFAK LSAgICB7ICJzZXhwcmVzc2lvbiIsICAgICAgWFlTRVhQLCAgQ01fSU5WIH0sCi0jZW5kaWYgLyog Tk9TRVhQICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLQotICAgIHsgInNsZWVwIiwgICAgICAgICAg ICBYWVNMRUVQLCAwIH0sCi0KLSNpZm5kZWYgTk9MT0NBTAotICAgIHsgInNwZWVkIiwJICAgICAg ICAgIFhZU1BFRSwgIENNX0xPQyB9LAotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmZGVmIEFO WVNTSAotICAgIHsgInNzaCIsCSAgICAgICAgICBYWVNTSCwgICAwIH0sCi0jZW5kaWYgLyogQU5Z U1NIICovCi0KLSNpZm5kZWYgTk9TUEwKLSAgICB7ICJzdGFydHVwLWZpbGUiLCAgICAgWFlTVEFS VFVQLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVmIE5PTE9DQUwKLSNp ZmRlZiBIV1BBUklUWQotICAgIHsgInN0b3AtYml0cyIsICAgICAgICBYWVNUT1AsIENNX0xPQyB9 LAotI2Vsc2UKLSNpZmRlZiBUTl9DT01QT1JUCi0gICAgeyAic3RvcC1iaXRzIiwgICAgICAgIFhZ U1RPUCwgQ01fTE9DIH0sCi0jZW5kaWYgLyogVE5fQ09NUE9SVCAqLwotI2VuZGlmIC8qIEhXUEFS SVRZICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0jaWZuZGVmIE5PWEZFUgotI2lmZGVmIFNU UkVBTUlORwotICAgIHsgInN0cmVhbWluZyIsICAgICAgICBYWVNUUkVBTSwgMCB9LAotI2VuZGlm IC8qIFNUUkVBTUlORyAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZuZGVmIE5PSkMKLSAg ICB7ICJzdXNwZW5kIiwgICAgICAgICAgWFlTVVNQLCAgQ01fUFNIIH0sCi0jZW5kaWYgLyogTk9K QyAqLwotI2lmZGVmIENLU1lTTE9HCi0gICAgeyAic3lzbG9nIiwgICAgICAgICAgIFhZU1lTTCwg IENNX0lOViB9LAotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgeyAidGFrZSIsICAgICAgICAg ICAgIFhZVEFLRSwgIDAgfSwKLQotI2lmZGVmIENLX1RBUEkKLSAgICB7ICJ0YXBpIiwgICAgICAg ICAgICAgWFlUQVBJLCAgQ01fTE9DIH0sCi0jZW5kaWYgLyogQ0tfVEFQSSAqLwotCi0jaWZuZGVm IE5PVENQT1BUUwotI2lmZGVmIFRDUFNPQ0tFVAotICAgIHsgInRjcCIsICAgICAgICAgICAgICBY WVRDUCwgICBDTV9MT0MgfSwKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNlbmRpZiAvKiBOT1RD UE9QVFMgKi8KLQotI2lmZGVmIFROQ09ERQotICAgIHsgInRlbCIsICAgICAgICAgICAgICBYWVRF TCwgICBDTV9JTlZ8Q01fQUJSIH0sCi0gICAgeyAidGVsbmV0IiwgICAgICAgICAgIFhZVEVMLCAg IDAgfSwKLSAgICB7ICJ0ZWxvcHQiLCAgICAgICAgICAgWFlURUxPUCwgMCB9LAotI2VuZGlmIC8q IFROQ09ERSAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAidGVtcC1kaXJlY3RvcnkiLCAgIFhZ VE1QRElSLDAgfSwKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVmIE5PTE9DQUwKLSAgICB7 ICJ0ZXJtaW5hbCIsICAgICAgICAgWFlURVJNLCAgQ01fTE9DIH0sCi0jZW5kaWYgLyogTk9MT0NB TCAqLwotCi0jaWZkZWYgT1MyCi0gICAgeyAidGl0bGUiLAkJICBYWVRJVExFLCBDTV9MT0MgfSwK LSNlbmRpZiAvKiBPUzIgKi8KLSNpZmRlZiBUTE9HCi0gICAgeyAidHJhbnNhY3Rpb24tbG9nIiwg IFhZVExPRywgIDAgfSwKLSNlbmRpZiAvKiBUTE9HICovCi0jaWZuZGVmIE5PWEZFUgotICAgIHsg InRyYW5zZmVyIiwgICAgICAgICBYWVhGRVIsICAwIH0sCi0jZW5kaWYgLyogTk9YRkVSICovCi0j aWZuZGVmIE5PWE1JVAotICAgIHsgInRyYW5zbWl0IiwgICAgICAgICBYWVhNSVQsICAwIH0sCi0j ZW5kaWYgLyogTk9YTUlUICovCi0jaWZuZGVmIE5PWEZFUgotI2lmbmRlZiBOT0NTRVRTCi0gICAg eyAidW5rbm93bi1jaGFyLXNldCIsIFhZVU5DUywgIDAgfSwKLSNlbmRpZiAvKiBOT0NTRVRTICov Ci0jaWZuZGVmIE5PU1BMCi0gICAgeyAidmFyaWFibGUtZXZhbHVhdGlvbiIsIFhZVkFSRVYsIENN X0lOViB9LAotI2VuZGlmCS8qIE5PU1BMICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0gICAgeyAi d2FpdCIsICAgICAgICAgICAgIFhZU0xFRVAsIENNX0lOViB9LAotI2lmbmRlZiBOT1BVU0gKLSNp ZmRlZiBVTklYCi0gICAgeyAid2lsZGNhcmQtZXhwYW5zaW9uIiwgWFlXSUxELCAwIH0sCi0jZW5k aWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIE5PUFVTSCAqLwotI2lmZGVmIE5UCi0gICAgeyAidyIs ICAgICAgICAgICAgICAgIFhZV0lORCwgIENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICJ3aSIsICAg ICAgICAgICAgICAgWFlXSU5ELCAgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgIndpbiIsICAgICAg ICAgICAgICBYWVdJTkQsICBDTV9JTlZ8Q01fQUJSIH0sCi0jZW5kaWYgLyogTlQgKi8KLSAgICB7 ICJ3aW5kb3ctc2l6ZSIsICAgICAgWFlXSU5ELCAgMCB9LAotI2lmZGVmIE5UCi0gICAgeyAid2lu OTUiLCAgICAgICAgICAgIFhZV0lOOTUsIDAgfSwKLSNlbmRpZiAvKiBOVCAqLwotI2lmZGVmIEFO WVgyNQotICAgIHsgInguMjUiLCAgICAgICAgICAgICBYWVgyNSwgICBDTV9MT0MgfSwKLSAgICB7 ICJ4MjUiLCAgICAgICAgICAgICAgWFlYMjUsICAgQ01fSU5WfENNX0xPQyB9LAotI2VuZGlmIC8q IEFOWVgyNSAqLwotICAgIHsgInhmZXIiLCAgICAgICAgICAgICBYWVhGRVIsICBDTV9JTlYgfSwK LSNpZm5kZWYgTk9YTUlUCi0gICAgeyAieG1pdCIsICAgICAgICAgICAgIFhZWE1JVCwgIENNX0lO ViB9LAotI2VuZGlmIC8qIE5PWE1JVCAqLwotICAgIHsgIiIsIDAsIDAgfQotfTsKLWludCBucHJt ID0gKHNpemVvZihwcm10YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7IC8qIEhvdyBt YW55ICovCi0KLXN0cnVjdCBrZXl0YWIgc2NudGFiW10gPSB7CQkvKiBTY3JlZW4gY29tbWFuZHMg Ki8KLSAgICB7ICJjbGVhciIsICAgU0NOX0NMUiwgMCB9LAotICAgIHsgImNsZW9sIiwgICBTQ05f Q0xFLCAwIH0sCi0gICAgeyAibW92ZS10byIsIFNDTl9NT1YsIDAgfQotfTsKLWludCBuc2NudGFi ID0gKHNpemVvZihzY250YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsgLyogSG93IG1hbnkg Ki8KLQotI2lmZGVmIEFOWVNTSAkJCQkvKiBTU0ggY29tbWFuZCB0YWJsZSAqLwotI2lmZGVmIFNT SEJVSUxUSU4KLWludCAgICBzc2hfcGZfbGNsX24gPSAwLAotICAgICAgIHNzaF9wZl9ybXRfbiA9 IDA7Ci1zdHJ1Y3Qgc3NoX3BmIHNzaF9wZl9sY2xbMzJdID0geyAwLCBOVUxMLCAwIH07IC8qIFNT SCBQb3J0IEZvcndhcmRpbmcgKi8KLXN0cnVjdCBzc2hfcGYgc3NoX3BmX3JtdFszMl0gPSB7IDAs IE5VTEwsIDAgfTsgLyogc3RydWN0cy4uLiAqLwotZXh0ZXJuIGNoYXIgKiBzc2hfaHN0LCAqIHNz aF9jbWQsICogc3NoX3BydDsKLWV4dGVybiBpbnQgICAgc3NoX3ZlciwgICBzc2hfeGZ3OwotY2hh ciAqIHNzaF90bXB1aWQgPSBOVUxMLCAqc3NoX3RtcGNtZCA9IE5VTEwsICpzc2hfdG1wcG9ydCA9 IE5VTEwsCi0gICAgICogc3NoX3RtcHN0ciA9IE5VTEw7Ci0KLWludAotIHNzaGtfdHlwZSA9IFNT SEtUXzJELAkJCS8qIFNTSCBLRVkgQ1JFQVRFIC9UWVBFOnggKi8KLSBzc2hrX2JpdHMgPSAxMDI0 LAkJCS8qIFNTSCBLRVkgQ1JFQVRFIC9CSVRTOm4gKi8KLSBzc2hrX2RpbiAgPSBTS0RGX09TU0gs CQkJLyogU1NIIEtFWSBESVNQTEFZIC9JTi1GT1JNQVQ6ICovCi0gc3Noa19kb3V0ID0gU0tERl9P U1NIOwkJCS8qIFNTSCBLRVkgRElTUExBWSAvT1VULUZPUk1BVDogKi8KLQotY2hhcgotICogc3No azFfY29tbWVudCA9IE5VTEwsCQkvKiBTU0ggVjEgQ09NTUVOVCAqLwotICogc3Noa3Bfb2xkID0g TlVMTCwJCQkvKiBPbGQga2V5IHBhc3NwaHJhc2UgKi8KLSAqIHNzaGtwX25ldyA9IE5VTEwsCQkJ LyogTmV3IGtleSBwYXNzcGhyYXNlICovCi0gKiBzc2hrY19wYXNzID0gTlVMTCwJCQkvKiBLRVkg Q1JFQVRFIC9QQVNTOnh4eCAqLwotICogc3Noa2NfY29tbSA9IE5VTEwsCQkJLyogS0VZIENSRUFU RSAvVjEtUlNBLUNPTU1FTlQ6eHh4ICovCi0gKiBzc2hkX2ZpbGUgPSBOVUxMLAkJCS8qIERJU1BM QVkgZmlsZSAqLwotICogc3Noa19maWxlID0gTlVMTDsJCQkvKiBTU0ggQ1JFQVRFIEtFWSBmaWxl ICovCi0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNzaGNscltdID0gewotICAgIHsgImxvY2FsLXBv cnQtZm9yd2FyZCIsICBTU0hDX0xQRiwgMCB9LAotICAgIHsgInJlbW90ZS1wb3J0LWZvcndhcmQi LCBTU0hDX1JQRiwgMCB9LAotICAgIHsgIiIsIDAsIDAgfQotfTsKLXN0YXRpYyBpbnQgbnNzaGNs ciA9IChzaXplb2Yoc3NoY2xyKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwotCi1zdHJ1 Y3Qga2V5dGFiIHNzaG9wbnN3W10gPSB7Ci0gICAgeyAiL2NvbW1hbmQiLCAgICAgICAgU1NIU1df Q01ELCBDTV9BUkcgfSwKLSAgICB7ICIvcGFzc3dvcmQiLCAgICAgICBTU0hTV19QV0QsIENNX0FS RyB9LAotICAgIHsgIi9zdWJzeXN0ZW0iLCAgICAgIFNTSFNXX1NVQiwgQ01fQVJHIH0sCi0gICAg eyAiL3VzZXIiLCAgICAgICAgICAgU1NIU1dfVVNSLCBDTV9BUkcgfSwKLSAgICB7ICIvdmVyc2lv biIsICAgICAgICBTU0hTV19WRVIsIENNX0FSRyB9LAotICAgIHsgIi94MTEtZm9yd2FyZGluZyIs IFNTSFNXX1gxMSwgQ01fQVJHIH0sCi0gICAgeyAiIiwgMCwgMCB9Ci19OwotaW50IG5zc2hvcG5z dyA9IChzaXplb2Yoc3Nob3Buc3cpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLXN0 YXRpYyBzdHJ1Y3Qga2V5dGFiIHNzaGt3dGFiW10gPSB7Ci0gICAgeyAiYWRkIiwgICAgICAgICAg ICAgICAgIFhTU0hfQURELCAwIH0sCi0gICAgeyAiYWdlbnQiLCAgICAgICAgICAgICAgIFhTU0hf QUdULCAwIH0sCi0gICAgeyAiY2xlYXIiLCAgICAgICAgICAgICAgIFhTU0hfQ0xSLCAwIH0sCi0g ICAgeyAiZm9yd2FyZC1sb2NhbC1wb3J0IiwgIFhTU0hfRkxQLCBDTV9JTlYgfSwKLSAgICB7ICJm b3J3YXJkLXJlbW90ZS1wb3J0IiwgWFNTSF9GUlAsIENNX0lOViB9LAotICAgIHsgImtleSIsICAg ICAgICAgICAgICAgICBYU1NIX0tFWSwgMCB9LAotICAgIHsgIm9wZW4iLCAgICAgICAgICAgICAg ICBYU1NIX09QTiwgMCB9LAotICAgIHsgInYyIiwgICAgICAgICAgICAgICAgICBYU1NIX1YyLCAg MCB9LAotICAgIHsgIiIsIDAsIDAgfQotfTsKLXN0YXRpYyBpbnQgbnNzaGNtZCA9IChzaXplb2Yo c3Noa3d0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLXN0YXRpYyBzdHJ1Y3Qg a2V5dGFiIHNzaDJ0YWJbXSA9IHsKLSAgICB7ICJyZWtleSIsIFhTU0gyX1JLRSwgMCB9LAotICAg IHsgIiIsIDAsIDAgfQotfTsKLXN0YXRpYyBpbnQgbnNzaDJ0YWIgPSAoc2l6ZW9mKHNzaDJ0YWIp IC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgYWRkZndk W10gPSB7CS8qIFNFVCBTU0ggQUREIGNvbW1hbmQgdGFibGUgKi8KLSAgICB7ICJsb2NhbC1wb3J0 LWZvcndhcmQiLCAgU1NIRl9MQ0wsIDAgfSwKLSAgICB7ICJyZW1vdGUtcG9ydC1mb3J3YXJkIiwg U1NIRl9STVQsIDAgfSwKLSAgICB7ICIiLCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5hZGRmd2Qg PSAoc2l6ZW9mKGFkZGZ3ZCkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLQotc3RhdGlj IHN0cnVjdCBrZXl0YWIgc3NoYWdlbnRbXSA9IHsJLyogU0VUIFNTSCBBR0VOVCBjb21tYW5kIHRh YmxlICovCi0gICAgeyAiYWRkIiwgICAgU1NIQV9BREQsIDAgfSwKLSAgICB7ICJkZWxldGUiLCBT U0hBX0RFTCwgMCB9LAotICAgIHsgImxpc3QiLCAgIFNTSEFfTFNULCAwIH0sCi0gICAgeyAiIiwg MCwgMCB9Ci19Owotc3RhdGljIGludCBuc3NoYWdlbnQgPSAoc2l6ZW9mKHNzaGFnZW50KSAvIHNp emVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBzc2hhZ3Rz d1tdID0gewkvKiBTRVQgU1NIIEFHRU5UIExJU1Qgc3dpdGNoIHRhYmxlICovCi0gICAgeyAiL2Zp bmdlcnByaW50IiwgU1NIQVNXX0ZQLCAwIH0sCi0gICAgeyAiIiwgMCwgMCB9Ci19Owotc3RhdGlj IGludCBuc3NoYWd0c3cgPSAoc2l6ZW9mKHNzaGFndHN3KSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFi KSkgLSAxOwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBzc2hrZXlbXSA9IHsJLyogU0VUIFNTSCBL RVkgY29tbWFuZCB0YWJsZSAqLwotICAgIHsgImNoYW5nZS1wYXNzcGhyYXNlIiwgIFNTSEtfUEFT UywgMCB9LAotICAgIHsgImNyZWF0ZSIsICAgICAgICAgICAgIFNTSEtfQ1JFQSwgMCB9LAotICAg IHsgImRpc3BsYXkiLCAgICAgICAgICAgIFNTSEtfRElTUCwgMCB9LAotICAgIHsgInYxIiwgICAg ICAgICAgICAgICAgIFNTSEtfVjEsICAgMCB9LAotICAgIHsgIiIsIDAsIDAgfQotfTsKLXN0YXRp YyBpbnQgbnNzaGtleSA9IChzaXplb2Yoc3Noa2V5KSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkg LSAxOwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBzc2hrdjFbXSA9IHsJLyogU0VUIFNTSCBLRVkg VjEgY29tbWFuZCB0YWJsZSAqLwotICAgIHsgInNldC1jb21tZW50IiwgIDEsIDAgfQotfTsKLQot c3RhdGljIHN0cnVjdCBrZXl0YWIgc3Noa3Bzd1tdID0gewkvKiBTRVQgU1NIIEtFWSBQQVNTUEhS QVNFIHRhYmxlICovCi0gICAgeyAiL25ldy1wYXNzcGhyYXNlIiwgIDIsIENNX0FSRyB9LAotICAg IHsgIi9vbGQtcGFzc3BocmFzZSIsICAxLCBDTV9BUkcgfQotfTsKLQotc3RhdGljIHN0cnVjdCBr ZXl0YWIgc3Noa2NyZWFbXSA9IHsJLyogU1NIIEtFWSBDUkVBVEUgdGFibGUgKi8KLSAgICB7ICIv Yml0cyIsICAgICAgICAgICBTU0hLQ19CSSwgQ01fQVJHIH0sCi0gICAgeyAiL3Bhc3NwaHJhc2Ui LCAgICAgU1NIS0NfUFAsIENNX0FSRyB9LAotICAgIHsgIi90eXBlIiwgICAgICAgICAgIFNTSEtD X1RZLCBDTV9BUkcgfSwKLSAgICB7ICIvdjEtcnNhLWNvbW1lbnQiLCBTU0hLQ18xUiwgQ01fQVJH IH0KLX07Ci1zdGF0aWMgaW50IG5zc2hrY3JlYSA9IChzaXplb2Yoc3Noa2NyZWEpIC8gc2l6ZW9m KHN0cnVjdCBrZXl0YWIpKTsKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgc3Noa2N0eVtdID0gewkv KiBTU0ggS0VZIENSRUFURSAvVFlQRTp4eHggKi8KLSAgICB7ICJzcnAiLCAgICBTU0hLVF9TUlAs IDAgfSwKLSAgICB7ICJ2MS1yc2EiLCBTU0hLVF8xUiwgMCB9LAotICAgIHsgInYyLWRzYSIsIFNT SEtUXzJELCAwIH0sCi0gICAgeyAidjItcnNhIiwgU1NIS1RfMlIsIDAgfQotfTsKLXN0YXRpYyBp bnQgbnNzaGtjdHkgPSAoc2l6ZW9mKHNzaGtjdHkpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsK LQotc3RhdGljIHN0cnVjdCBrZXl0YWIgc3NoZHN3aVtdID0gewkvKiBTRVQgU1NIIEtFWSBESVNQ TEFZIC9zd2l0Y2hlcyAqLwotICAgIHsgIi9mb3JtYXQiLCBTU0hLRF9PVVQsIENNX0FSRyB9Ci19 Owotc3RhdGljIGludCBuc3NoZHN3aSA9IChzaXplb2Yoc3NoZHN3aSkgLyBzaXplb2Yoc3RydWN0 IGtleXRhYikpOwotCi0jaWZkZWYgQ09NTUVOVAotc3RhdGljIHN0cnVjdCBrZXl0YWIgc3NoZGlm bXRbXSA9IHsJLyogU1NIIEtFWSBESVNQTEFZIC9JTi1GT1JNQVQ6ICovCi0gICAgeyAib3BlbnNz aCIsIFNLREZfT1NTSCwgMCB9LAotICAgIHsgInNzaC5jb20iLCBTS0RGX1NTSEMsIDAgfQotfTsK LXN0YXRpYyBpbnQgbnNzaGRpZm10ID0gKHNpemVvZihzc2hkaWZtdCkgLyBzaXplb2Yoc3RydWN0 IGtleXRhYikpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotc3RhdGljIHN0cnVjdCBrZXl0YWIg c3NoZG9mbXRbXSA9IHsJLyogU1NIIEtFWSBESVNQTEFZIC9JTi1GT1JNQVQ6ICovCi0gICAgeyAi ZmluZ2VycHJpbnQiLCBTS0RGX0ZJTkcsIDAgfSwKLSAgICB7ICJpZXRmIiwgICAgICAgIFNLREZf SUVURiwgMCB9LAotICAgIHsgIm9wZW5zc2giLCAgICAgU0tERl9PU1NILCAwIH0sCi0gICAgeyAi c3NoLmNvbSIsICAgICBTS0RGX1NTSEMsIDAgfQotfTsKLXN0YXRpYyBpbnQgbnNzaGRvZm10ID0g KHNpemVvZihzc2hkb2ZtdCkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi1zdGF0aWMgc3Ry dWN0IGtleXRhYiBzc2hrZXJtaXRbXSA9IHsgLyogU0tFUk1JVCAqLwotICAgIHsgIm9wZW4iLCAg ICAgICBTS1JNX09QTiwgMCB9Ci19Owotc3RhdGljIGludCBuc3Noa2VybWl0ID0gKHNpemVvZihz c2hrZXJtaXQpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKLQotc3RydWN0IGtleXRhYiBzc2hr cm1vcG5zd1tdID0gewotICAgIHsgIi9wYXNzd29yZCIsICAgICAgIFNTSFNXX1BXRCwgQ01fQVJH IH0sCi0gICAgeyAiL3VzZXIiLCAgICAgICAgICAgU1NIU1dfVVNSLCBDTV9BUkcgfSwKLSAgICB7 ICIvdmVyc2lvbiIsICAgICAgICBTU0hTV19WRVIsIENNX0FSRyB9LAotICAgIHsgIiIsIDAsIDAg fQotfTsKLWludCBuc3Noa3Jtb3Buc3cgPSAoc2l6ZW9mKHNzaGtybW9wbnN3KSAvIHNpemVvZihz dHJ1Y3Qga2V5dGFiKSkgLSAxOwotI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KLQotI2lmZGVmIFNG VFBfQlVJTFRJTgotc3RhdGljIHN0cnVjdCBrZXl0YWIgc2Z0cGt3dGFiW10gPSB7ICAgIC8qIFNG VFAgKi8KLSAgICB7ICAiY2QiLCAgICAgICAgU0ZUUF9DRCwgICAgMCB9LAotICAgIHsgICJjaGdy cCIsICAgICBTRlRQX0NIR1JQLCAwIH0sCi0gICAgeyAgImNobW9kIiwgICAgIFNGVFBfQ0hNT0Qs IDAgfSwKLSAgICB7ICAiY2hvd24iLCAgICAgU0ZUUF9DSE9XTiwgMCB9LAotICAgIHsgICJkZWxl dGUiLCAgICBTRlRQX1JNLCAgICAwIH0sCi0gICAgeyAgImRpciIsICAgICAgIFNGVFBfRElSLCAg IDAgfSwKLSAgICB7ICAiZ2V0IiwgICAgICAgU0ZUUF9HRVQsICAgMCB9LAotICAgIHsgICJta2Rp ciIsICAgICBTRlRQX01LRElSLCAwIH0sCi0gICAgeyAgIm9wZW4iLCAgICAgIFNGVFBfT1BOLCAg IDAgfSwKLSAgICB7ICAicHV0IiwgICAgICAgU0ZUUF9QVVQsICAgMCB9LAotICAgIHsgICJwd2Qi LCAgICAgICBTRlRQX1BXRCwgICAwIH0sCi0gICAgeyAgInJlbmFtZSIsICAgIFNGVFBfUkVOLCAg IDAgfSwKLSAgICB7ICAicm0iLCAgICAgICAgU0ZUUF9STSwgICAgQ01fSU5WIH0sCi0gICAgeyAg InJtZGlyIiwgICAgIFNGVFBfUk1ESVIsIDAgfSwKLSAgICB7ICAic3ltbGluayIsICAgU0ZUUF9M SU5LLCAgMCB9LAotICAgIHsgICJ2ZXJzaW9uIiwgICBTRlRQX1ZFUiwgICAwIH0KLX07Ci1zdGF0 aWMgaW50IG5zZnRwa3d0YWIgPSAoc2l6ZW9mKHNmdHBrd3RhYikgLyBzaXplb2Yoc3RydWN0IGtl eXRhYikpOwotI2VuZGlmIC8qIFNGVFBfQlVJTFRJTiAqLwotI2VuZGlmIC8qIEFOWVNTSCAqLwot Ci0jaWZkZWYgTkVUQ09OTgotc3RydWN0IGtleXRhYiBuZXRrZXlbXSA9IHsJCS8qIFNFVCBORVRX T1JLIHRhYmxlICovCi0gICAgeyAiZGlyZWN0b3J5IiwgWFlORVRfRCwgIDAgfSwKLSAgICB7ICJ0 eXBlIiwgICAgICBYWU5FVF9ULCAgMCB9Ci19OwotaW50IG5uZXRrZXkgPSAoc2l6ZW9mKG5ldGtl eSkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwotCi1zdHJ1Y3Qga2V5dGFiIG5ldGNtZFtdID0g ewotLyoKLSAgVGhlc2UgYXJlIHRoZSBuZXR3b3JrIHR5cGVzLgotKi8KLSNpZmRlZiBORVRDTUQK LSAgICB7ICJjb21tYW5kIiwgICAgICAgTkVUX0NNRCwgIENNX0lOViB9LCAvKiBDb21tYW5kICov Ci0jZW5kaWYgLyogTkVUQ01EICovCi0KLSNpZmRlZiBERUNORVQJCQkJLyogREVDbmV0IC8gUEFU SFdPUktTICovCi0gICAgeyAiZGVjbmV0IiwgICAgICAgIE5FVF9ERUMsICAwIH0sCi0jZW5kaWYg LyogREVDTkVUICovCi0KLSNpZmRlZiBORVRETEwKLSAgICB7ICJkbGwiLCAgICAgICAgICAgTkVU X0RMTCwgIENNX0lOViB9LCAvKiBETEwgdG8gYmUgbG9hZGVkICovCi0jZW5kaWYgLyogTkVURExM ICovCi0KLSNpZmRlZiBORVRGSUxFCi0gICAgeyAiZmlsZSIsICAgICAgICAgICBORVRfRklMRSwg Q01fSU5WIH0sIC8qIEZJTEUgKHJlYWwgY3J1ZGUpICovCi0jZW5kaWYgLyogTkVURklMRSAqLwot Ci0jaWZkZWYgTlBJUEUJCQkJLyogTmFtZWQgUGlwZXMgKi8KLSAgICB7ICJuYW1lZC1waXBlIiwg ICAgIE5FVF9QSVBFLCAgMCB9LAotI2VuZGlmIC8qIE5QSVBFICovCi0KLSNpZmRlZiBDS19ORVRC SU9TCi0gICAgeyAibmV0YmlvcyIsICAgICAgICBORVRfQklPUywgIDAgfSwJLyogTkVUQklPUyAq LwotI2VuZGlmIC8qIENLX05FVEJJT1MgKi8KLQotI2lmZGVmIERFQ05FVAkJCQkvKiBERUNuZXQg LyBQQVRIV09SS1MgKGFsaWFzKSAqLwotICAgIHsgInBhdGh3b3JrcyIsICAgICBORVRfREVDLCAg Q01fSU5WIH0sCi0jZW5kaWYgLyogREVDTkVUICovCi0KLSNpZmRlZiBORVRDTUQKLSAgICB7ICJw aXBlIiwgICAgICAgICAgTkVUX0NNRCwgIDAgfSwJLyogUGlwZSAqLwotI2VuZGlmIC8qIE5FVENN RCAqLwotCi0jaWZkZWYgTkVUUFRZCi0gICAgeyAicHNldWRvdGVybWluYWwiLE5FVF9QVFksIDAg fSwJLyogUHNldWRvdGVybWluYWwgKi8KLSNlbmRpZiAvKiBORVRQVFkgKi8KLQotI2lmZGVmIE5F VFBUWQotICAgIHsgInB0eSIsICAgICAgICAgIE5FVF9QVFksICBDTV9JTlYgfSwgLyogSW52IHN5 biBmb3IgcHNldWRvdGVybSAqLwotI2VuZGlmIC8qIE5FVFBUWSAqLwotCi0jaWZkZWYgU1NIQlVJ TFRJTgotICAgIHsgInNzaCIsICAgICAgICAgIE5FVF9TU0gsICAwIH0sCi0jZW5kaWYgLyogU1NI QlVJTFRJTiAqLwotCi0jaWZkZWYgU1VQRVJMQVQKLSAgICB7ICJzdXBlcmxhdCIsICAgICBORVRf U0xBVCwgMCB9LAkvKiBNZXJpZGlhbiBUZWNobm9sb2dpZXMnIFN1cGVyTEFUICovCi0jZW5kaWYg LyogU1VQRVJMQVQgKi8KLQotI2lmZGVmIFRDUFNPQ0tFVAkJCS8qIFRDUC9JUCBzb2NrZXRzIGxp YnJhcnkgKi8KLSAgICB7ICJ0Y3AvaXAiLCAgICAgICBORVRfVENQQiwgMCB9LAotI2VuZGlmIC8q IFRDUFNPQ0tFVCAqLwotI2lmZGVmIFNVUEVSTEFUCi0gICAgeyAidGVzMzIiLCAgICAgICAgTkVU X1NMQVQsIDAgfSwJLyogRW11bHV4IFRFUzMyICovCi0jZW5kaWYgLyogU1VQRVJMQVQgKi8KLSNp ZmRlZiBBTllYMjUJCQkJLyogWC4yNSAqLwotI2lmZGVmIFNVTlgyNQotICAgIHsgIngiLCAgICAg ICAgICAgIE5FVF9TWDI1LCBDTV9JTlZ8Q01fQUJSIH0sCi0gICAgeyAieC4yNSIsICAgICAgICAg TkVUX1NYMjUsIDAgfSwKLSAgICB7ICJ4MjUiLCAgICAgICAgICBORVRfU1gyNSwgQ01fSU5WIH0s Ci0jZWxzZQotI2lmZGVmIFNUUkFUVVNYMjUKLSAgICB7ICJ4IiwgICAgICAgICAgICBORVRfVlgy NSwgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgInguMjUiLCAgICAgICAgIE5FVF9WWDI1LCAwIH0s Ci0gICAgeyAieDI1IiwgICAgICAgICAgTkVUX1ZYMjUsIENNX0lOViB9LAotI2VuZGlmIC8qIFNU UkFUVVNYMjUgKi8KLSNlbmRpZiAvKiBTVU5YMjUgKi8KLSNpZmRlZiBJQk1YMjUKLSAgICB7ICJ4 IiwgICAgICAgICAgICBORVRfSVgyNSwgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgInguMjUiLCAg ICAgICAgIE5FVF9JWDI1LCBDTV9JTlYgfSwKLSAgICB7ICJ4MjUiLCAgICAgICAgICBORVRfSVgy NSwgQ01fSU5WIH0sCi0jZW5kaWYgLyogSUJNWDI1ICovCi0jaWZkZWYgSFBYMjUKLSAgICB7ICJ4 IiwgICAgICAgICAgICBORVRfSVgyNSwgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgInguMjUiLCAg ICAgICAgIE5FVF9JWDI1LCAwIH0sCi0gICAgeyAieDI1IiwgICAgICAgICAgTkVUX0lYMjUsIENN X0lOViB9LAotI2VuZGlmIC8qIEhQWDI1ICovCi0jZW5kaWYgLyogQU5ZWDI1ICovCi0gICAgeyAi IiwgMCwgMCB9Ci19OwotaW50IG5uZXRzID0gKHNpemVvZihuZXRjbWQpIC8gc2l6ZW9mKHN0cnVj dCBrZXl0YWIpKTsKLQotI2lmbmRlZiBOT1RDUE9QVFMKLSNpZmRlZiBUQ1BTT0NLRVQKLQotLyog VENQIG9wdGlvbnMgKi8KLQotc3RydWN0IGtleXRhYiB0Y3BvcHRbXSA9IHsKLSAgICB7ICJhZGRy ZXNzIiwgICBYWVRDUF9BRERSRVNTLCAwIH0sCi0jaWZkZWYgQ0tfRE5TX1NSVgotICAgIHsgImRu cy1zZXJ2aWNlLXJlY29yZHMiLCBYWVRDUF9ETlNfU1JWLCAwIH0sCi0jZW5kaWYgLyogQ0tfRE5T X1NSViAqLwotI2lmZGVmIFNPX0RPTlRST1VURQotICAgIHsgImRvbnRyb3V0ZSIsICAgWFlUQ1Bf RE9OVFJPVVRFLCAwIH0sCi0jZW5kaWYgLyogU09fRE9OVFJPVVRFICovCi0jaWZuZGVmIE5PSFRU UAotICAgIHsgImh0dHAtcHJveHkiLCBYWVRDUF9IVFRQX1BST1hZLCAwIH0sCi0jZW5kaWYgLyog Tk9IVFRQICovCi0jaWZkZWYgU09fS0VFUEFMSVZFCi0gICAgeyAia2VlcGFsaXZlIiwgWFlUQ1Bf S0VFUEFMSVZFLCAwIH0sCi0jZW5kaWYgLyogU09fS0VFUEFMSVZFICovCi0jaWZkZWYgU09fTElO R0VSCi0gICAgeyAibGluZ2VyIiwgWFlUQ1BfTElOR0VSLCAwIH0sCi0jZW5kaWYgLyogU09fTElO R0VSICovCi0jaWZkZWYgVENQX05PREVMQVkKLSAgICB7ICJuYWdsZSIsICBYWVRDUF9OQUdMRSwg ICAgQ01fSU5WIH0sCi0gICAgeyAibm9kZWxheSIsIFhZVENQX05PREVMQVksIDAgfSwKLSNlbmRp ZiAvKiBUQ1BfTk9ERUxBWSAqLwotICAgIHsgInJldmVyc2UtZG5zLWxvb2t1cCIsIFhZVENQX1JE TlMsIDAgfSwKLSNpZmRlZiBTT19SQ1ZCVUYKLSAgICB7ICJyZWN2YnVmIiwgWFlUQ1BfUkVDVkJV RiwgMCB9LAotI2VuZGlmIC8qIFNPX1JDVkJVRiAqLwotI2lmZGVmIFNPX1NOREJVRgotICAgIHsg InNlbmRidWYiLCBYWVRDUF9TRU5EQlVGLCAwIH0sCi0jZW5kaWYgLyogU09fU05EQlVGICovCi0j aWZkZWYgTlQKLSNpZmRlZiBDS19TT0NLUwotICAgIHsgInNvY2tzLXNlcnZlciIsIFhZVENQX1NP Q0tTX1NWUiwgMCB9LAotI2VuZGlmIC8qIENLX1NPQ0tTICovCi0jZW5kaWYgLyogTlQgKi8KLSNp ZmRlZiBWTVMKLSNpZmRlZiBERUNfVENQSVAKLSAgICB7ICJ1Y3gtcG9ydC1idWciLCBYWVRDUF9V Q1gsIDAgfSwKLSNlbmRpZiAvKiBERUNfVENQSVAgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSAgICB7 ICIiLDAsMCB9Ci19OwotaW50IG50Y3BvcHQgPSAoc2l6ZW9mKHRjcG9wdCkgLyBzaXplb2Yoc3Ry dWN0IGtleXRhYikpOwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2VuZGlmIC8qIE5PVENQT1BU UyAqLwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQotI2lmZGVmIE9TMgotLyogSzk1IE1hbnVhbCBD aGFwdGVyIFRhYmxlIC0tIEtlZXAgdGhlc2UgdHdvIHRhYmxlcyBpbiBzeW5jISAqLwotCi1zdGF0 aWMgY2hhciAqIGxpbmt0YmxbXSA9IHsJCS8qIEludGVybmFsIGxpbmtzIGluIGs5NS5odG0gKi8K LSAgICAiI3RvcCIsCQkJCS8qIDAwICovCi0gICAgIiN3aGF0IiwJCQkJLyogMDEgKi8KLSAgICAi I2luc3RhbGwiLAkJCQkvKiAwMiAqLwotICAgICIjc3RhcnQiLAkJCQkvKiAwMyAqLwotICAgICIj ZGlhbGVyIiwJCQkJLyogMDQgKi8KLSAgICAiI2VudHJpZXMiLAkJCQkvKiAwNSAqLwotICAgICIj Y29tbWFuZCIsCQkJCS8qIDA2ICovCi0gICAgIiN0ZXJtaW5hbCIsCQkJLyogMDcgKi8KLSAgICAi I3RyYW5zZmVyIiwJCQkvKiAwOCAqLwotICAgICIjaG9zdG1vZGUiCQkJCS8qIDA5ICovCi19Owot Ci1zdGF0aWMgc3RydWN0IGtleXRhYiBjaGFwdGJsW10gPSB7Ci0gICAgeyAiQ29tbWFuZC1TY3Jl ZW4iLCAgICAgNiwgMCB9LAotICAgIHsgIkNvbnRlbnRzIiwgICAgICAgICAgIDAsIDAgfSwKLSAg ICB7ICJEaWFsZXItRW50cmllcyIsICAgICA1LCAwIH0sCi0gICAgeyAiRmlsZS1UcmFuc2ZlciIs ICAgICAgOCwgMCB9LAotICAgIHsgIkdldHRpbmctU3RhcnRlZCIsICAgIDMsIDAgfSwKLSAgICB7 ICJIb3N0LU1vZGUiLCAgICAgICAgICA5LCAwIH0sCi0gICAgeyAiSW5zdGFsbGF0aW9uIiwgICAg ICAgMiwgMCB9LAotICAgIHsgIlRlcm1pbmFsLUVtdWxhdGlvbiIsIDcsIDAgfSwKLSAgICB7ICJV c2luZy1UaGUtRGlhbGVyIiwgICA0LCAwIH0sCi0gICAgeyAiV2hhdC1Jcy1LOTUiLCAgICAgICAg MSwgMCB9LAotICAgIHsgIiIsICAgICAgICAgICAgICAgICAgIDAsIDAgfQotfTsKLXN0YXRpYyBp bnQgbmNoYXB0YmwgPSAoc2l6ZW9mKGNoYXB0YmwpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpIC0g MSk7Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZm5kZWYgTk9YRkVSCi0vKiBSZW1vdGUgQ29tbWFu ZCBUYWJsZSAqLwotCi1zdHJ1Y3Qga2V5dGFiIHJlbWNtZFtdID0gewotI2lmbmRlZiBOT1NQTAot ICAgIHsgImFzIiwgICAgICAgIFhaQVNHLCBDTV9JTlZ8Q01fQUJSIH0sCi0gICAgeyAiYXNnIiwg ICAgICAgWFpBU0csIENNX0lOViB9LAotICAgIHsgImFzc2lnbiIsICAgIFhaQVNHLCAwIH0sCi0j ZW5kaWYgLyogTk9TUEwgKi8KLSAgICB7ICJjZCIsICAgICAgICBYWkNXRCwgMCB9LAotICAgIHsg ImNkdXAiLCAgICAgIFhaQ0RVLCBDTV9JTlYgfSwKLSAgICB7ICJjb3B5IiwgICAgICBYWkNQWSwg MCB9LAotICAgIHsgImN3ZCIsICAgICAgIFhaQ1dELCBDTV9JTlYgfSwKLSAgICB7ICJkZWxldGUi LCAgICBYWkRFTCwgMCB9LAotICAgIHsgImRpcmVjdG9yeSIsIFhaRElSLCAwIH0sCi0gICAgeyAi ZSIsICAgICAgICAgWFpYSVQsIENNX0FCUnxDTV9JTlYgfSwKLSAgICB7ICJlcmFzZSIsICAgICBY WkRFTCwgQ01fSU5WIH0sCi0gICAgeyAiZXhpdCIsICAgICAgWFpYSVQsIDAgfSwKLSAgICB7ICJo ZWxwIiwgICAgICBYWkhMUCwgMCB9LAotI2lmbmRlZiBOT1BVU0gKLSAgICB7ICJob3N0IiwgICAg ICBYWkhPUywgMCB9LAotI2VuZGlmIC8qIE5PUFVTSCAqLwotI2lmbmRlZiBOT0ZSSUxMUwotICAg IHsgImtlcm1pdCIsICAgIFhaS0VSLCAwIH0sCi0gICAgeyAibCIsICAgICAgICAgWFpMR0ksIENN X0FCUnxDTV9JTlYgfSwKLSAgICB7ICJsbyIsICAgICAgICBYWkxHSSwgQ01fQUJSfENNX0lOViB9 LAotICAgIHsgImxvZyIsICAgICAgIFhaTEdJLCBDTV9BQlJ8Q01fSU5WIH0sCi0gICAgeyAibG9n aW4iLCAgICAgWFpMR0ksIDAgfSwKLSAgICB7ICJsb2dvdXQiLCAgICBYWkxHTywgMCB9LAotICAg IHsgIm1lc3NhZ2UiLCAgIFhaTVNHLCAwIH0sCi0gICAgeyAibWtkaXIiLCAgICAgWFpNS0QsIDAg fSwKLSAgICB7ICJwcmludCIsICAgICBYWlBSSSwgMCB9LAotI2VuZGlmIC8qIE5PRlJJTExTICov Ci0gICAgeyAicHdkIiwgICAgICAgWFpQV0QsIDAgfSwKLSNpZm5kZWYgTk9TUEwKLSAgICB7ICJx dWVyeSIsCSAgIFhaUVVFLCAwIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICB7ICJyZW5hbWUi LCAgICBYWlJFTiwgMCB9LAotICAgIHsgInJtZGlyIiwgICAgIFhaUk1ELCAwIH0sCi0gICAgeyAi c2V0IiwgICAgICAgWFpTRVQsIDAgfSwKLSAgICB7ICJzcGFjZSIsCSAgIFhaU1BBLCAwIH0sCi0j aWZuZGVmIE5PRlJJTExTCi0gICAgeyAidHlwZSIsICAgICAgWFpUWVAsIDAgfSwKLSAgICB7ICJ3 aG8iLCAgICAgICBYWldITywgMCB9LAotI2VuZGlmIC8qIE5PRlJJTExTICovCi0gICAgeyAiIiwg MCwgMH0KLX07Ci1pbnQgbnJtdCA9IChzaXplb2YocmVtY21kKSAvIHNpemVvZihzdHJ1Y3Qga2V5 dGFiKSkgLSAxOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi1zdHJ1Y3Qga2V5dGFiIGxvZ3RhYltd ID0gewotI2lmZGVmIENLTE9HRElBTAotICAgIHsgImNvbm5lY3Rpb25zIiwgIExPR00sIENNX0lO ViB9LAotICAgIHsgImN4IiwgICAgICAgICAgIExPR00sIDAgfSwKLSNlbmRpZiAvKiBDS0xPR0RJ QUwgKi8KLSNpZmRlZiBERUJVRwotICAgIHsgImRlYnVnZ2luZyIsICAgIExPR0QsIDAgfSwKLSNl bmRpZiAvKiBERUJVRyAqLwotICAgIHsgInBhY2tldHMiLCAgICAgIExPR1AsIDAgfSwKLSNpZm5k ZWYgTk9MT0NBTAotICAgIHsgInNlc3Npb24iLCAgICAgIExPR1MsIDAgfSwKLSNlbmRpZiAvKiBO T0xPQ0FMICovCi0jaWZkZWYgVExPRwotICAgIHsgInRyYW5zYWN0aW9ucyIsIExPR1QsIDAgfSwK LSNlbmRpZiAvKiBUTE9HICovCi0gICAgeyAiIiwgMCwgMCB9Ci19OwotaW50IG5sb2cgPSAoc2l6 ZW9mKGxvZ3RhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLQotc3RydWN0IGtleXRh YiB3cml0YWJbXSA9IHsKLSNpZm5kZWYgTk9TUEwKLSAgICB7ICJhcHBlbmQtZmlsZSIsICAgICBM T0dXLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgIHsgImRlYnVnLWxvZyIsICAg ICAgIExPR0QsIDAgfSwKLSAgICB7ICJlcnJvciIsICAgICAgICAgICBMT0dFLCAwIH0sCi0jaWZu ZGVmIE5PU1BMCi0gICAgeyAiZmlsZSIsICAgICAgICAgICAgTE9HVywgMCB9LAotI2VuZGlmIC8q IE5PU1BMICovCi0gICAgeyAicGFja2V0LWxvZyIsICAgICAgTE9HUCwgMCB9LAotICAgIHsgInNj cmVlbiIsICAgICAgICAgIExPR1gsIDAgfSwKLSNpZm5kZWYgTk9MT0NBTAotICAgIHsgInNlc3Np b24tbG9nIiwgICAgIExPR1MsIDAgfSwKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0gICAgeyAic3lz JG91dHB1dCIsICAgICAgTE9HWCwgQ01fSU5WIH0sCi0gICAgeyAidCIsICAgICAgICAgICAgICAg TE9HVCwgQ01fQUJSfENNX0lOViB9LCAvKiBCZWNhdXNlIG9mIGEgdHlwbyBpbiAqLwotICAgIHsg InRyIiwgICAgICAgICAgICAgIExPR1QsIENNX0FCUnxDTV9JTlYgfSwgLyogdGhlIGJvb2suLi4g Ki8KLSAgICB7ICJ0cmEiLCAgICAgICAgICAgICBMT0dULCBDTV9BQlJ8Q01fSU5WIH0sCi0gICAg eyAidHJhbiIsICAgICAgICAgICAgTE9HVCwgQ01fQUJSfENNX0lOViB9LAotICAgIHsgInRyYW5z IiwgICAgICAgICAgIExPR1QsIENNX0FCUnxDTV9JTlYgfSwKLSAgICB7ICJ0cmFuc2EiLCAgICAg ICAgICBMT0dULCBDTV9BQlJ8Q01fSU5WIH0sCi0gICAgeyAidHJhbnNhYyIsICAgICAgICAgTE9H VCwgQ01fQUJSfENNX0lOViB9LAotICAgIHsgInRyYW5zYWN0IiwgICAgICAgIExPR1QsIENNX0FC UnxDTV9JTlYgfSwKLSAgICB7ICJ0cmFuc2FjdGkiLCAgICAgICBMT0dULCBDTV9BQlJ8Q01fSU5W IH0sCi0gICAgeyAidHJhbnNhY3RpbyIsICAgICAgTE9HVCwgQ01fQUJSfENNX0lOViB9LAotICAg IHsgInRyYW5zYWN0aW9uIiwgICAgIExPR1QsIENNX0FCUnxDTV9JTlYgfSwKLSAgICB7ICJ0cmFu c2FjdGlvbi1sb2ciLCBMT0dULCAwIH0sCi0gICAgeyAidHJhbnNhY3Rpb25zIiwgICAgTE9HVCwg Q01fSU5WIH0KLX07Ci1pbnQgbndyaSA9IChzaXplb2Yod3JpdGFiKSAvIHNpemVvZihzdHJ1Y3Qg a2V5dGFiKSk7Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGNscnRhYltdID0gewkvKiBLZXl3b3Jk cyBmb3IgQ0xFQVIgY29tbWFuZCAqLwotI2lmbmRlZiBOT1NQTAotICAgIHsgImFsYXJtIiwgICAg ICAgICAgICBDTFJfQUxSLCAgICAgICAgIDAgfSwKLSNpZmRlZiBDS19BUEMKLSAgICB7ICJhcGMi LCAgICAgICAgICAgICAgQ0xSX0FQQywgICAgICAgICAwIH0sCi0jZW5kaWYgLyogQ0tfQVBDICov Ci0jaWZkZWYgUEFUVEVSTlMKLSAgICB7ICJiaW5hcnktcGF0dGVybnMiLCAgQ0xSX0JJTiwgICAg ICAgICAwIH0sCi0jZW5kaWYgLyogUEFUVEVSTlMgKi8KLSAgICB7ICJib3RoIiwgICAgICAgICAg ICAgQ0xSX0RFVnxDTFJfSU5QLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBOT1NQTCAqLwotI2lmZGVm IE9TMgotICAgIHsgImNvbW1hbmQtc2NyZWVuIiwgICBDTFJfQ01ELCAgICAgICAgIDAgfSwKLSNl bmRpZiAvKiBPUzIgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICB7ICJkZXZpY2UiLCAgICAgICAgICAg Q0xSX0RFViwgICAgICAgICBDTV9JTlZ8Q01fQUJSIH0sCi0gICAgeyAiZGV2aWNlLWFuZC1pbnB1 dCIsIENMUl9ERVZ8Q0xSX0lOUCwgMCB9LAotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgeyAiZGV2 aWNlLWJ1ZmZlciIsICAgIENMUl9ERVYsICAgICAgICAgMCB9LAotI2lmbmRlZiBOT0RJQUwKLSAg ICB7ICJkaWFsLXN0YXR1cyIsICAgICAgQ0xSX0RJQSwJIDAgfSwKLSNlbmRpZiAvKiBOT0RJQUwg Ki8KLSNpZm5kZWYgTk9TUEwKLSAgICB7ICJpbnB1dC1idWZmZXIiLCAgICAgQ0xSX0lOUCwgICAg ICAgICAwIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICB7ICJrZXlib2FyZC1idWZmZXIiLCAg Q0xSX0tCRCwgICAgICAgICAwIH0sCi0gICAgeyAic2VuZC1saXN0IiwgICAgICAgIENMUl9TRkws ICAgICAgICAgMCB9LAotI2lmZGVmIE9TMgotICAgIHsgInNjciIsICAgICAgICAgICAgICBDTFJf U0NMLCAgICAgICAgIENNX0lOVnxDTV9BQlIgfSwKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB7ICJz Y3JlZW4iLCAgICAgICAgICAgQ0xSX1NDUiwgICAgICAgICAwIH0sCi0jaWZkZWYgT1MyCi0gICAg eyAic2Nyb2xsYmFjayIsICAgICAgIENMUl9TQ0wsICAgICAgICAgQ01fSU5WIH0sCi0gICAgeyAi dGVybWluYWwtc2NyZWVuIiwgIENMUl9UUk0sICAgICAgICAgMCB9LAotI2VuZGlmIC8qIE9TMiAq LwotI2lmZGVmIFBBVFRFUk5TCi0gICAgeyAidGV4dC1wYXR0ZXJucyIsICAgIENMUl9UWFQsICAg ICAgICAgMCB9LAotI2VuZGlmIC8qIFBBVFRFUk5TICovCi0gICAgeyAiIiwgMCwgMCB9Ci19Owot aW50IG5jbGVhciA9IChzaXplb2YoY2xydGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAx OwotCi1zdHJ1Y3Qga2V5dGFiIGNsc3RhYltdID0gewkJLyogS2V5d29yZHMgZm9yIENMT1NFIGNv bW1hbmQgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICB7ICIhcmVhZCIsICAgICAgICAgICBMT0dSLCBD TV9JTlYgfSwKLSAgICB7ICIhd3JpdGUiLCAgICAgICAgICBMT0dXLCBDTV9JTlYgfSwKLSNpZm5k ZWYgTk9QVVNICi0jZW5kaWYgLyogTk9QVVNIICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZm5k ZWYgTk9TUEwKLSAgICB7ICJhcHBlbmQtZmlsZSIsICAgICBMT0dXLCBDTV9JTlYgfSwKLSNlbmRp ZiAvKiBOT1NQTCAqLwotI2lmbmRlZiBOT0xPQ0FMCi0gICAgeyAiY29ubmVjdGlvbiIsICAgICAg OTk5OSwgMCB9LAotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNpZmRlZiBDS0xPR0RJQUwKLSAgICB7 ICJjeC1sb2ciLCAgICAgICAgICBMT0dNLCAwIH0sCi0jZW5kaWYgLyogQ0tMT0dESUFMICovCi0j aWZkZWYgREVCVUcKLSAgICB7ICJkZWJ1Zy1sb2ciLCAgICAgICBMT0dELCAwIH0sCi0jZW5kaWYg LyogREVCVUcgKi8KLSAgICB7ICJob3N0IiwgICAgICAgICAgICA5OTk5LCBDTV9JTlYgfSwgLyog U3lub255bSBmb3IgQ0xPU0UgQ09OTkVDVElPTiAqLwotICAgIHsgImxpbmUiLCAgICAgICAgICAg IDk5OTksIENNX0lOViB9LCAvKiBTeW5vbnltIGZvciBDTE9TRSBDT05ORUNUSU9OICovCi0gICAg eyAicCIsICAgICAgICAgICAgICAgTE9HUCwgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgInBhY2tl dC1sb2ciLCAgICAgIExPR1AsIDAgfSwKLSAgICB7ICJwb3J0IiwgICAgICAgICAgICA5OTk5LCBD TV9JTlYgfSwgLyogU3lub255bSBmb3IgQ0xPU0UgQ09OTkVDVElPTiAqLwotI2lmbmRlZiBOT1NQ TAotICAgIHsgInJlYWQtZmlsZSIsICAgICAgIExPR1IsIDAgfSwKLSNlbmRpZiAvKiBOT1NQTCAq LwotI2lmbmRlZiBOT0xPQ0FMCi0gICAgeyAic2Vzc2lvbi1sb2ciLCAgICAgTE9HUywgMCB9LAot I2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNpZmRlZiBUTE9HCi0gICAgeyAidCIsICAgICAgICAgICAg ICAgTE9HVCwgQ01fQUJSfENNX0lOViB9LCAvKiBCZWNhdXNlIG9mIGEgdHlwbyBpbiAqLwotICAg IHsgInRyIiwgICAgICAgICAgICAgIExPR1QsIENNX0FCUnxDTV9JTlYgfSwgLyogdGhlIGJvb2su Li4gKi8KLSAgICB7ICJ0cmEiLCAgICAgICAgICAgICBMT0dULCBDTV9BQlJ8Q01fSU5WIH0sCi0g ICAgeyAidHJhbiIsICAgICAgICAgICAgTE9HVCwgQ01fQUJSfENNX0lOViB9LAotICAgIHsgInRy YW5zIiwgICAgICAgICAgIExPR1QsIENNX0FCUnxDTV9JTlYgfSwKLSAgICB7ICJ0cmFuc2EiLCAg ICAgICAgICBMT0dULCBDTV9BQlJ8Q01fSU5WIH0sCi0gICAgeyAidHJhbnNhYyIsICAgICAgICAg TE9HVCwgQ01fQUJSfENNX0lOViB9LAotICAgIHsgInRyYW5zYWN0IiwgICAgICAgIExPR1QsIENN X0FCUnxDTV9JTlYgfSwKLSAgICB7ICJ0cmFuc2FjdGkiLCAgICAgICBMT0dULCBDTV9BQlJ8Q01f SU5WIH0sCi0gICAgeyAidHJhbnNhY3RpbyIsICAgICAgTE9HVCwgQ01fQUJSfENNX0lOViB9LAot ICAgIHsgInRyYW5zYWN0aW9uIiwgICAgIExPR1QsIENNX0FCUnxDTV9JTlYgfSwKLSAgICB7ICJ0 cmFuc2FjdGlvbi1sb2ciLCBMT0dULCAwIH0sCi0gICAgeyAidHJhbnNhY3Rpb25zIiwgICAgTE9H VCwgQ01fSU5WIH0sCi0jZW5kaWYgLyogVExPRyAqLwotI2lmbmRlZiBOT1NQTAotICAgIHsgIndy aXRlLWZpbGUiLCAgICAgIExPR1csIDAgfSwKLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgIHsgIiIs IDAsIDAgfQotfTsKLWludCBuY2xzID0gKHNpemVvZihjbHN0YWIpIC8gc2l6ZW9mKHN0cnVjdCBr ZXl0YWIpKSAtIDE7Ci0KLS8qIFNIT1cgY29tbWFuZCBhcmd1bWVudHMgKi8KLQotI2lmbmRlZiBO T1NIT1cKLXN0cnVjdCBrZXl0YWIgc2hvdGFiW10gPSB7Ci0jaWZuZGVmIE5PU1BMCi0gICAgeyAi YWxhcm0iLCAgICAgICAgU0hBTFJNLCAwIH0sCi0gICAgeyAiYXJnIiwgICAgICAgICAgU0hBUkcs IENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICJhcmd1bWVudHMiLCAgICBTSEFSRywgMCB9LAotICAg IHsgImFyZ3MiLCAgICAgICAgIFNIQVJHLCBDTV9JTlYgfSwKLSAgICB7ICJhcnJheXMiLCAgICAg ICBTSEFSUiwgMCB9LAotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZm5kZWYgTk9DU0VUUwotICAg IHsgImFzc29jaWF0aW9ucyIsIFNIQVNTT0MsIDAgfSwKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0K LSNpZm5kZWYgTk9YRkVSCi0gICAgeyAiYXR0cmlidXRlcyIsICAgU0hBVFQsIDAgfSwKLSNlbmRp ZiAvKiBOT1hGRVIgKi8KLQotI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCi0gICAgeyAiYXV0aGVu dGljYXRpb24iLCBTSE9BVVRILCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElP TiAqLwotCi0jaWZuZGVmIE5PUFVTSAotI2lmZGVmIEJST1dTRVIKLSAgICB7ICJicm93c2VyIiwg ICAgICBTSEJST1dTRSwgQ01fUFNIfENNX0xPQyB9LAotI2VuZGlmIC8qICBCUk9XU0VSICovCi0j ZW5kaWYgLyogTk9QVVNIICovCi0gICAgeyAiY2QiLCAgICAgICAgICAgU0hDRCwgMCB9LAotICAg IHsgImNoYXJhY3Rlci1zZXRzIiwgU0hDU0UsIDAgfSwKLSAgICB7ICJjbWQiLCAgICAgICAgICBT SENNRCwgQ01fSU5WIH0sCi0jaWZuZGVmIE5PTE9DQUwKLSAgICB7ICJjb20iLCAgICAgICAgICBT SENPTSwgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgImNvbW0iLCAgICAgICAgIFNIQ09NLCBDTV9J TlZ8Q01fQUJSIH0sCi0gICAgeyAiY29tbXVuaWNhdGlvbnMiLCBTSENPTSwgMCB9LAotI2VuZGlm IC8qIE5PTE9DQUwgKi8KLSAgICB7ICJjb21tYW5kIiwgICAgICBTSENNRCwgMCB9LAotICAgIHsg ImNvbm5lY3Rpb24iLCAgIFNIQ09OTlgsIDAgfSwKLSNpZmRlZiBDS19TUEVFRAotICAgIHsgImNv bnRyb2wtcHJlZml4aW5nIiwgU0hDVEwsIDAgfSwKLSNlbmRpZiAvKiBDS19TUEVFRCAqLwotI2lm ZGVmIENLTE9HRElBTAotICAgIHsgImN4IiwgICAgICAgICAgIFNIQ09OTlgsIENNX0lOViB9LAot I2VuZGlmIC8qIENLTE9HRElBTCAqLwotI2lmbmRlZiBOT1NQTAotICAgIHsgImNvdW50IiwgICAg ICAgIFNIQ09VLCAwIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICB7ICJkIiwgICAgICAgICAg ICBTSERJQSwgQ01fSU5WfENNX0FCUiB9LAotI2lmZGVmIFZNUwotICAgIHsgImRlZmF1bHQiLCAg ICAgIFNIREZMVCwgMCB9LAotI2Vsc2UKLSAgICB7ICJkZWZhdWx0IiwgICAgICBTSERGTFQsIENN X0lOViB9LAotI2VuZGlmIC8qIFZNUyAqLwotI2lmbmRlZiBOT0RJQUwKLSAgICB7ICJkaWFsIiwg ICAgICAgICBTSERJQSwgQ01fTE9DIH0sCi0jZW5kaWYgLyogTk9ESUFMICovCi0gICAgeyAiZG91 YmxlL2lnbm9yZSIsU0hEQkwsIDAgfSwKLSNpZm5kZWYgTk9QVVNICi0jaWZuZGVmIE5PRlJJTExT Ci0gICAgeyAiZWRpdG9yIiwgICAgICAgU0hFRElULCBDTV9QU0ggfSwKLSNlbmRpZiAvKiAgTk9G UklMTFMgKi8KLSNlbmRpZiAvKiBOT1BVU0ggKi8KLSNpZm5kZWYgTk9MT0NBTAotICAgIHsgImVz Y2FwZSIsICAgICAgIFNIRVNDLCBDTV9MT0MgfSwKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0gICAg eyAiZXhpdCIsICAgICAgICAgU0hFWEksIDAgfSwKLSAgICB7ICJleHRlbmRlZC1vcHRpb25zIiwg U0hYT1BULCBDTV9JTlYgfSwKLSAgICB7ICJmZWF0dXJlcyIsICAgICBTSEZFQSwgMCB9LAotICAg IHsgImZpbGUiLCAgICAgICAgIFNIRklMLCAwIH0sCi0jaWZuZGVmIE5PTE9DQUwKLSAgICB7ICJm bG93LWNvbnRyb2wiLCBTSE9GTE8sIDAgfSwKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jaWZkZWYg QlJPV1NFUgotICAgIHsgImZ0cCIsICAgICAgICAgIFNIT0ZUUCwgQ01fUFNIfENNX0xPQyB9LAot I2Vsc2UKLSNpZm5kZWYgTk9GVFAKLSNpZm5kZWYgU1lTRlRQCi0jaWZkZWYgVENQU09DS0VUCi0g ICAgeyAiZnRwIiwgICAgICAgICAgU0hPRlRQLCAwIH0sCS8qIChidWlsdC1pbiBmdHApICovCi0j ZW5kaWYgLyogVENQU09DS0VUICovCi0jZW5kaWYgLyogU1lTRlRQICovCi0jZW5kaWYgLyogTk9G VFAgKi8KLSNlbmRpZiAvKiBCUk9XU0VSICovCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAiZnVuY3Rp b25zIiwgICAgU0hGVU4sIDAgfSwKLSAgICB7ICJnbG9iYWxzIiwgICAgICBTSFZBUiwgMCB9LAot I2VuZGlmIC8qIE5PU1BMICovCi0jaWZkZWYgS1VJCi0gICAgeyAiZ3VpIiwgICAgICAgICAgU0hP R1VJLCAwIH0sCi0jZW5kaWYgLyogS1VJICovCi0jaWZkZWYgQ0tfUkVDQUxMCi0gICAgeyAiaGlz dG9yeSIsICAgICAgU0hISVNUT1JZLCAwIH0sCi0jZW5kaWYgLyogQ0tfUkVDQUxMICovCi0gICAg eyAiaWdub3JlL2RvdWJsZSIsU0hEQkwsIENNX0lOViB9LAotICAgIHsgImlrc2QiLCAgICAgICAg IFNIT0lLUywgQ01fSU5WIH0sCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAiaW5wdXQiLCAgICAgICAg U0hJTlAsIDAgfSwKLSNlbmRpZiAvKiBOT1NQTCAqLwotI2lmbmRlZiBOT1NFVEtFWQotICAgIHsg ImsiLCAgICAgICAgICAgIFNIS0VZLCBDTV9JTlZ8Q01fQUJSIH0sCi0gICAgeyAia2V5IiwgICAg ICAgICAgU0hLRVksIDAgfSwKLSNpZm5kZWYgTk9LVkVSQlMKLSAgICB7ICJrdmVyYnMiLCAgICAg ICBTSEtWQiwgMCB9LAotI2VuZGlmIC8qIE5PS1ZFUkJTICovCi0jZW5kaWYgLyogTk9TRVRLRVkg Ki8KLSNpZmRlZiBDS19MQUJFTEVECi0gICAgeyAibGFiZWxlZC1maWxlLWluZm8iLCBTSExCTCwg MCB9LAotI2VuZGlmIC8qIENLX0xBQkVMRUQgKi8KLSNpZm5kZWYgTk9DU0VUUwotICAgIHsgImxh bmd1YWdlcyIsICAgIFNITE5HLCAwIH0sCi0jZW5kaWYgLyogTk9DU0VUUyAqLwotICAgIHsgImxv Z3MiLCAgICAgICAgIFNITE9HLCAwIH0sCi0jaWZuZGVmIE5PU1BMCi0gICAgeyAibWFjcm9zIiwg ICAgICAgU0hNQUMsIDAgfSwKLSNlbmRpZiAvKiBOT1NQTCAqLwotI2lmbmRlZiBOT0RJQUwKLSAg ICB7ICJtb2RlbSIsICAgICAgICBTSE1PRCwgQ01fTE9DIH0sCi0jZWxzZQotICAgIHsgIm1vZGVt LXNpZ25hbHMiLFNIQ09NLCBDTV9JTlZ8Q01fTE9DIH0sCi0jZW5kaWYgLyogTk9ESUFMICovCi0j aWZuZGVmIE5PTE9DQUwKLSNpZmRlZiBPUzJNT1VTRQotICAgIHsgIm1vdXNlIiwgICAgICAgIFNI TU9VLCBDTV9MT0MgfSwKLSNlbmRpZiAvKiBPUzJNT1VTRSAqLwotI2VuZGlmIC8qIE5PTE9DQUwg Ki8KLSNpZmRlZiBORVRDT05OCi0gICAgeyAibmV0d29yayIsICAgICAgU0hORVQsIENNX0xPQyB9 LAotI2Vsc2UKLSAgICB7ICJuZXR3b3JrIiwgICAgICBTSE5FVCwgQ01fSU5WfENNX0xPQyB9LAot I2VuZGlmIC8qIE5FVENPTk4gKi8KLSAgICB7ICJvcHRpb25zIiwgICAgICBTSE9QVFMsIDAgfSwK LSNpZm5kZWYgTk9TUEwKLSAgICB7ICJvdXRwdXQiLCAgICAgICBTSE9VVFAsIENNX0lOViB9LAot I2VuZGlmIC8qIE5PU1BMICovCi0jaWZkZWYgQU5ZWDI1Ci0jaWZuZGVmIElCTVgyNQotICAgIHsg InBhZCIsICAgICAgICAgIFNIUEFELCAgQ01fTE9DIH0sCi0jZW5kaWYgLyogSUJNWDI1ICovCi0j ZW5kaWYgLyogQU5ZWDI1ICovCi0gICAgeyAicGFyYW1ldGVycyIsICAgU0hQQVIsICBDTV9JTlYg fSwKLSNpZmRlZiBQQVRURVJOUwotICAgIHsgInBhdHRlcm5zIiwgICAgIFNIT1BBVCwgMCB9LAot I2VuZGlmIC8qIFBBVFRFUk5TICovCi0gICAgeyAicHJpbnRlciIsICAgICAgU0hQUlQsICAwIH0s Ci0jaWZkZWYgQ0tfU1BFRUQKLSAgICB7ICJwcmVmaXhpbmciLCAgICBTSENUTCwgIENNX0lOViB9 LAotI2VuZGlmIC8qIENLX1NQRUVEICovCi0jaWZuZGVmIE5PWEZFUgotICAgIHsgInByb3RvY29s IiwgICAgIFNIUFJPLCAgMCB9LAotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgIHsgInJlbmFtZSIs ICAgICAgIFNIT1JFTiwgMCB9LAotI2lmbmRlZiBOT1NQTAotICAgIHsgInNjcmlwdHMiLCAgICAg IFNIU0NSLCAgQ01fTE9DIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICB7ICJzZW5kLWxpc3Qi LCAgICBTSFNGTCwgIDAgfSwKLSNpZm5kZWYgTk9TRVJWRVIKLSAgICB7ICJzZXJ2ZXIiLCAgICAg ICBTSFNFUiwgIDAgfSwKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotI2lmbmRlZiBOT1NFWFAKLSAg ICB7ICJzZXhwcmVzc2lvbiIsICBTSFNFWFAsIDAgfSwKLSNlbmRpZiAvKiBOT1NFWFAgKi8KLSNp ZmRlZiBBTllTU0gKLSAgICB7ICJzc2giLCAgICAgICAgICBTSE9TU0gsIDAgfSwKLSNlbmRpZiAv KiBBTllTU0ggKi8KLSAgICB7ICJzdGFjayIsICAgICAgICBTSFNUSywgIDAgfSwKLSAgICB7ICJz dGF0dXMiLCAgICAgICBTSFNUQSwgIDAgfSwKLSNpZmRlZiBTVFJFQU1JTkcKLSAgICB7ICJzdHJl YW1pbmciLCAgICBTSE9TVFIsIDAgfSwKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLSNpZm5kZWYg Tk9MT0NBTAotI2lmZGVmIE9TMgotICAgIHsgInRhYnMiLCAgICAgICAgICBTSFRBQiwgQ01fSU5W fENNX0xPQyB9LAotI2VuZGlmIC8qIE9TMiAqLwotI2lmZGVmIENLX1RBUEkKLSAgICB7ICJ0YXBp IiwgICAgICAgICAgU0hUQVBJLCBDTV9MT0MgfSwKLSAgICB7ICJ0YXBpLWNvbW0iLCAgICAgU0hU QVBJX0MsIENNX0lOVnxDTV9MT0MgfSwKLSAgICB7ICJ0YXBpLWxvY2F0aW9uIiwgU0hUQVBJX0ws IENNX0lOVnxDTV9MT0MgfSwKLSAgICB7ICJ0YXBpLW1vZGVtIiwgICAgU0hUQVBJX00sIENNX0lO VnxDTV9MT0MgfSwKLSNlbmRpZiAvKiBDS19UQVBJICovCi0gICAgeyAidGNwIiwgICAgICAgICAg IFNIVENQLCAgQ01fTE9DIH0sCi0jaWZkZWYgVE5DT0RFCi0gICAgeyAidGVsIiwgICAgICAgICAg IFNIVEVMLCAgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgInRlbG5ldCIsICAgICAgICBTSFRFTCwg IDAgfSwKLSAgICB7ICJ0ZWxvcHQiLCAgICAgICAgU0hUT1BULCAwIH0sCi0jZW5kaWYgLyogVE5D T0RFICovCi0gICAgeyAidGVybWluYWwiLCAgICAgIFNIVEVSLCAgQ01fTE9DIH0sCi0jZW5kaWYg LyogTk9MT0NBTCAqLwotI2lmbmRlZiBOT1hNSVQKLSAgICB7ICJ0ciIsICAgICAgICAgICAgU0hY TUksIENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICJ0cmEiLCAgICAgICAgICAgU0hYTUksIENNX0lO VnxDTV9BQlIgfSwKLSAgICB7ICJ0cmFuIiwgICAgICAgICAgU0hYTUksIENNX0lOVnxDTV9BQlIg fSwKLSAgICB7ICJ0cmFucyIsICAgICAgICAgU0hYTUksIENNX0lOVnxDTV9BQlIgfSwKLSNlbmRp ZiAvKiBOT1hNSVQgKi8KLSNpZm5kZWYgTk9YRkVSCi0gICAgeyAidHJhbnNmZXIiLCAgICAgIFNI T1hGRVIsIDAgfSwKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSNpZm5kZWYgTk9YTUlUCi0gICAgeyAi dHJhbnNtaXQiLCAgICAgIFNIWE1JLCAwIH0sCi0jZW5kaWYgLyogTk9YTUlUICovCi0jaWZkZWYg Q0tfVFJJR0dFUgotICAgIHsgInRyaWdnZXIiLCAgICAgICBTSFRSSUcsIENNX0xPQyB9LAotI2Vu ZGlmIC8qIENLX1RSSUdHRVIgKi8KLSNpZm5kZWYgTk9TRVRLRVkKLSNpZm5kZWYgTk9LVkVSQlMK LSNpZmRlZiBPUzIKLSAgICB7ICJ1ZGsiLCAgICAgICAgICAgU0hVREssIENNX0xPQyB9LAotI2Vu ZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PS1ZFUkJTICovCi0jZW5kaWYgLyogTk9TRVRLRVkg Ki8KLSNpZm5kZWYgTk9TUEwKLSAgICB7ICJ2YXJpYWJsZXMiLCAgICAgU0hCVUksIDAgfSwKLSNl bmRpZiAvKiBOT1NQTCAqLwotI2lmbmRlZiBOT0ZSSUxMUwotICAgIHsgInZlcnNpb25zIiwgICAg ICBTSFZFUiwgMCB9LAotI2VuZGlmIC8qIE5PRlJJTExTICovCi0jaWZkZWYgT1MyCi0gICAgeyAi dnNjcm4iLCAgICAgICAgIFNIVlNDUk4sIENNX0lOVnxDTV9MT0MgfSwKLSNlbmRpZiAvKiBPUzIg Ki8KLSAgICB7ICJ4ZmVyIiwgICAgICAgICAgU0hPWEZFUiwgIENNX0lOViB9LAotI2lmbmRlZiBO T1hNSVQKLSAgICB7ICJ4bWl0IiwgICAgICAgICAgU0hYTUksICAgIENNX0lOViB9LAotI2VuZGlm IC8qIE5PWE1JVCAqLwotICAgIHsgIiIsIDAsIDAgfQotfTsKLWludCBuc2hvID0gKHNpemVvZihz aG90YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0jZW5kaWYgLyogTk9TSE9XICov Ci0KLSNpZmRlZiBBTllYMjUKLSNpZm5kZWYgSUJNWDI1Ci1zdHJ1Y3Qga2V5dGFiIHBhZHRhYltd ID0geyAgICAgICAgICAgICAgLyogUEFEIGNvbW1hbmRzICovCi0gICAgeyAiY2xlYXIiLCAgICAg IFhZUEFETCwgMCB9LAotICAgIHsgImludGVycnVwdCIsICBYWVBBREksIDAgfSwKLSAgICB7ICJy ZXNldCIsICAgICAgWFlQQURSLCAwIH0sCi0gICAgeyAic3RhdHVzIiwgICAgIFhZUEFEUywgMCB9 Ci19OwotaW50IG5wYWRjID0gKHNpemVvZihwYWR0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIp KTsKLSNlbmRpZiAvKiBJQk1YMjUgKi8KLSNlbmRpZiAvKiBBTllYMjUgKi8KLQotI2lmbmRlZiBO T1NFUlZFUgotc3RhdGljIHN0cnVjdCBrZXl0YWIga21zdGFiW10gPSB7Ci0gICAgeyAiYm90aCIs ICAgIDMsIDAgfSwKLSAgICB7ICJsb2NhbCIsICAgMSwgMCB9LAotICAgIHsgInJlbW90ZSIsICAy LCAwIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIGVuYXRhYltdID0gewkvKiBFTkFCTEUg Y29tbWFuZHMgKi8KLSAgICB7ICJhbGwiLCAgICAgICAgRU5fQUxMLCAgMCB9LAotI2lmbmRlZiBO T1NQTAotICAgIHsgImFzIiwgICAgICAgICBFTl9BU0csICBDTV9JTlZ8Q01fQUJSIH0sCi0gICAg eyAiYXNnIiwgICAgICAgIEVOX0FTRywgIENNX0lOViB9LAotICAgIHsgImFzc2lnbiIsICAgICBF Tl9BU0csICAwIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZm5kZWYgZGF0YWdlbmVyYWwKLSAg ICB7ICJieWUiLCAgICAgICAgRU5fQllFLCAgMCB9LAotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICov Ci0gICAgeyAiY2QiLCAgICAgICAgIEVOX0NXRCwgIDAgfSwKLSNpZmRlZiBaQ09QWQotICAgIHsg ImNvcHkiLCAgICAgICBFTl9DUFksICAwIH0sCi0jZW5kaWYgLyogWkNPUFkgKi8KLSAgICB7ICJj d2QiLCAgICAgICAgRU5fQ1dELCAgQ01fSU5WIH0sCi0gICAgeyAiZGVsZXRlIiwgICAgIEVOX0RF TCwgIDAgfSwKLSAgICB7ICJkaXJlY3RvcnkiLCAgRU5fRElSLCAgMCB9LAotICAgIHsgImVuYWJs ZSIsICAgICBFTl9FTkEsICBDTV9JTlYgfSwKLSAgICB7ICJleGl0IiwgICAgICAgRU5fWElULCAg MCB9LAotICAgIHsgImZpbmlzaCIsICAgICBFTl9GSU4sICAwIH0sCi0gICAgeyAiZ2V0IiwgICAg ICAgIEVOX0dFVCwgIDAgfSwKLSAgICB7ICJob3N0IiwgICAgICAgRU5fSE9TLCAgMCB9LAotICAg IHsgIm1haWwiLCAgICAgICBFTl9NQUksICAwIH0sCi0gICAgeyAibWtkaXIiLCAgICAgIEVOX01L RCwgIDAgfSwKLSAgICB7ICJwcmludCIsICAgICAgRU5fUFJJLCAgMCB9LAotI2lmbmRlZiBOT1NQ TAotICAgIHsgInF1ZXJ5IiwgICAgICBFTl9RVUUsICAwIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8K LSAgICB7ICJyZW5hbWUiLCAgICAgRU5fUkVOLCAgMCB9LAotICAgIHsgInJldHJpZXZlIiwgICBF Tl9SRVQsICBDTV9JTlYgfSwKLSAgICB7ICJybWRpciIsICAgICAgRU5fUk1ELCAgMCB9LAotICAg IHsgInNlbmQiLCAgICAgICBFTl9TRU4sICAwIH0sCi0gICAgeyAic2V0IiwgICAgICAgIEVOX1NF VCwgIDAgfSwKLSAgICB7ICJzcGFjZSIsICAgICAgRU5fU1BBLCAgMCB9LAotICAgIHsgInR5cGUi LCAgICAgICBFTl9UWVAsICAwIH0sCi0gICAgeyAid2hvIiwgICAgICAgIEVOX1dITywgIDAgfQot fTsKLXN0YXRpYyBpbnQgbmVuYSA9IChzaXplb2YoZW5hdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5 dGFiKSk7Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLQotc3RydWN0IGtleXRhYiB0eHRiaW5bXSA9 IHsKLSAgICB7ICJhbGwiLCAgICAgICAgMiwgMCB9LAotICAgIHsgImJpbmFyeSIsICAgICAxLCAw IH0sCi0gICAgeyAidGV4dCIsICAgICAgIDAsIDAgfQotfTsKLQotI2lmbmRlZiBOT1hGRVIKLXN0 YXRpYyBzdHJ1Y3Qga2V5dGFiIHNuZHRhYltdID0gewkvKiBTRU5EIGNvbW1hbmQgb3B0aW9ucyAq LwotICAgIHsgIi9hZnRlciIsICAgICAgICAgICBTTkRfQUZULCBDTV9BUkcgfSwKLSNpZm5kZWYg Tk9TUEwKLSAgICB7ICIvYXJyYXkiLCAgICAgICAgICAgU05EX0FSUiwgQ01fQVJHIH0sCi0jZW5k aWYgLyogTk9TUEwgKi8KLSAgICB7ICIvYXMtbmFtZSIsICAgICAgICAgU05EX0FTTiwgQ01fQVJH IH0sCi0gICAgeyAiL2IiLCAgICAgICAgICAgICAgIFNORF9CSU4sIENNX0lOVnxDTV9BQlIgfSwK LSAgICB7ICIvYmVmb3JlIiwgICAgICAgICAgU05EX0JFRiwgQ01fQVJHIH0sCi0gICAgeyAiL2Jp bmFyeSIsICAgICAgICAgIFNORF9CSU4sIDAgfSwKLSNpZmRlZiBDQUxJQlJBVEUKLSAgICB7ICIv YyIsICAgICAgICAgICAgICAgU05EX0NNRCwgQ01fSU5WfENNX0FCUiB9LAotICAgIHsgIi9jYWxp YnJhdGUiLCAgICAgICBTTkRfQ0FMLCBDTV9JTlZ8Q01fQVJHIH0sCi0jZW5kaWYgLyogQ0FMSUJS QVRFICovCi0gICAgeyAiL2NvbW1hbmQiLCAgICAgICAgIFNORF9DTUQsIENNX1BTSCB9LAotICAg IHsgIi9kZWxldGUiLCAgICAgICAgICBTTkRfREVMLCAwIH0sCi0jaWZkZWYgVU5JWE9ST1NLCi0g ICAgeyAiL2RvdGZpbGVzIiwgICAgICAgIFNORF9ET1QsIDAgfSwKLSNlbmRpZiAvKiBVTklYT1JP U0sgKi8KLSAgICB7ICIvZXhjZXB0IiwgICAgICAgICAgU05EX0VYQywgQ01fQVJHIH0sCi0jaWZk ZWYgUElQRVNFTkQKLSAgICB7ICIvZmlsdGVyIiwgICAgICAgICAgU05EX0ZMVCwgQ01fQVJHfENN X1BTSCB9LAotI2VuZGlmIC8qIFBJUEVTRU5EICovCi0gICAgeyAiL2ZpbGVuYW1lcyIsICAgICAg IFNORF9OQU0sIENNX0FSRyB9LAotI2lmZGVmIENLU1lNTElOSwotICAgIHsgIi9mb2xsb3dsaW5r cyIsCSAgU05EX0xOSywgMCB9LAotI2VuZGlmIC8qIENLU1lNTElOSyAqLwotI2lmZGVmIFZNUwot ICAgIHsgIi9pbWFnZSIsICAgICAgICAgICBTTkRfSU1HLCAwIH0sCi0jZWxzZQotICAgIHsgIi9p bWFnZSIsICAgICAgICAgICBTTkRfQklOLCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBWTVMgKi8KLSNp ZmRlZiBDS19MQUJFTEVECi0gICAgeyAiL2xhYmVsZWQiLCAgICAgICAgIFNORF9MQkwsIDAgfSwK LSNlbmRpZiAvKiBDS19MQUJFTEVEICovCi0gICAgeyAiL2xhcmdlci10aGFuIiwgICAgIFNORF9M QVIsIENNX0FSRyB9LAotICAgIHsgIi9saXN0ZmlsZSIsICAgICAgICBTTkRfRklMLCBDTV9BUkcg fSwKLSNpZm5kZWYgTk9GUklMTFMKLSAgICB7ICIvbWFpbCIsICAgICAgICAgICAgU05EX01BSSwg Q01fQVJHIH0sCi0jZW5kaWYgLyogTk9GUklMTFMgKi8KLSNpZmRlZiBDS19UTVBESVIKLSAgICB7 ICIvbW92ZS10byIsICAgICAgICAgU05EX01PViwgQ01fQVJHIH0sCi0jZW5kaWYgLyogQ0tfVE1Q RElSICovCi0gICAgeyAiL25vYmFja3VwZmlsZXMiLCAgIFNORF9OT0IsIDAgfSwKLSNpZmRlZiBV TklYT1JPU0sKLSAgICB7ICIvbm9kb3RmaWxlcyIsICAgICAgU05EX05PRCwgMCB9LAotI2VuZGlm IC8qIFVOSVhPUk9TSyAqLwotI2lmZGVmIENLU1lNTElOSwotICAgIHsgIi9ub2ZvbGxvd2xpbmtz IiwJICBTTkRfTkxLLCAwIH0sCi0jZW5kaWYgLyogQ0tTWU1MSU5LICovCi0gICAgeyAiL25vdC1h ZnRlciIsICAgICAgIFNORF9OQUYsIENNX0FSRyB9LAotICAgIHsgIi9ub3QtYmVmb3JlIiwgICAg ICBTTkRfTkJFLCBDTV9BUkcgfSwKLSAgICB7ICIvcGF0aG5hbWVzIiwgICAgICAgU05EX1BUSCwg Q01fQVJHIH0sCi0gICAgeyAiL3ByaW50IiwgICAgICAgICAgIFNORF9QUkksIENNX0FSRyB9LAot I2lmZGVmIENLX1hZWgotICAgIHsgIi9wcm90b2NvbCIsICAgICAgICBTTkRfUFJPLCBDTV9BUkcg fSwKLSNlbHNlCi0gICAgeyAiL3Byb3RvY29sIiwgICAgICAgIFNORF9QUk8sIENNX0FSR3xDTV9J TlYgfSwKLSNlbmRpZiAvKiBDS19YWVogKi8KLSAgICB7ICIvcXVpZXQiLCAgICAgICAgICAgU05E X1NISCwgMCB9LAotICAgIHsgIi9yZWNvdmVyIiwgICAgICAgICBTTkRfUkVTLCAwIH0sCi0jaWZk ZWYgUkVDVVJTSVZFCi0vKiBTeXN0ZW1zIHdoZXJlIHdlIGRvIHJlY3Vyc2lvbiAqLwotICAgIHsg Ii9yZWN1cnNpdmUiLCAgICAgICBTTkRfUkVDLCAwIH0sCi0jZWxzZQotI2lmZGVmIFZNUwotLyog U3lzdGVtcyB0aGF0IGRvIHJlY3Vyc2lvbiB0aGVtc2VsdmVzIHdpdGhvdXQgb3VyIGFzc2lzdGFu Y2UgKi8KLS8qIGlmIHdlIGdpdmUgdGhlbSB0aGUgcmlnaHQga2luZCBvZiB3aWxkY2FyZCAqLwot ICAgIHsgIi9yZWN1cnNpdmUiLCAgICAgICBTTkRfUkVDLCAwIH0sCi0jZWxzZQotI2lmZGVmIGRh dGFnZW5lcmFsCi0gICAgeyAiL3JlY3Vyc2l2ZSIsICAgICAgIFNORF9SRUMsIDAgfSwKLSNlbHNl Ci0gICAgeyAiL3JlY3Vyc2l2ZSIsICAgICAgIFNORF9SRUMsIENNX0lOViB9LAotI2VuZGlmIC8q IGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogUkVDVVJTSVZFICov Ci0gICAgeyAiL3JlbmFtZS10byIsICAgICAgIFNORF9SRU4sIENNX0FSRyB9LAotICAgIHsgIi9z aW5jZSIsICAgICAgICAgICBTTkRfQUZULCBDTV9JTlZ8Q01fQVJHIH0sCi0gICAgeyAiL3NtYWxs ZXItdGhhbiIsICAgIFNORF9TTUEsIENNX0FSRyB9LAotICAgIHsgIi9zdGFydGluZy1hdCIsICAg ICBTTkRfU1RBLCBDTV9BUkcgfSwKLSNpZm5kZWYgTk9GUklMTFMKLSAgICB7ICIvc3UiLCAgICAg ICAgICAgICAgU05EX0FTTiwgQ01fQVJHfENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICIvc3ViIiwg ICAgICAgICAgICAgU05EX0FTTiwgQ01fQVJHfENNX0lOVnxDTV9BQlIgfSwKLSAgICB7ICIvc3Vi amVjdCIsICAgICAgICAgU05EX0FTTiwgQ01fQVJHIH0sCi0jZW5kaWYgLyogTk9GUklMTFMgKi8K LSNpZmRlZiBSRUNVUlNJVkUKLSAgICB7ICIvc3ViZGlyZWN0b3JpZXMiLCAgU05EX1JFQywgQ01f SU5WIH0sCi0jZW5kaWYgLyogUkVDVVJTSVZFICovCi0gICAgeyAiL3RleHQiLCAgICAgICAgICAg IFNORF9UWFQsIDAgfSwKLSAgICB7ICIvdHJhbnNwYXJlbnQiLCAgICAgU05EX1hQQSwgMCB9LAot ICAgIHsgIi90eXBlIiwgICAgICAgICAgICBTTkRfVFlQLCBDTV9BUkcgfQotfTsKLSNkZWZpbmUg TlNORFRBQiBzaXplb2Yoc25kdGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYikKLXN0YXRpYyBpbnQg bnNuZHRhYiA9IE5TTkRUQUI7Ci0KLSNpZm5kZWYgTk9NU0VORAotc3RhdGljIHN0cnVjdCBrZXl0 YWIgbXNuZHRhYltdID0gewkvKiBNU0VORCBvcHRpb25zICovCi0gICAgeyAiL2FmdGVyIiwgICAg ICAgICAgIFNORF9BRlQsIENNX0FSRyB9LAotICAgIHsgIi9iZWZvcmUiLCAgICAgICAgICBTTkRf QkVGLCBDTV9BUkcgfSwKLSAgICB7ICIvYmluYXJ5IiwgICAgICAgICAgU05EX0JJTiwgMCB9LAot ICAgIHsgIi9kZWxldGUiLCAgICAgICAgICBTTkRfREVMLCAwIH0sCi0gICAgeyAiL2V4Y2VwdCIs ICAgICAgICAgIFNORF9FWEMsIENNX0FSRyB9LAotICAgIHsgIi9maWxlbmFtZXMiLCAgICAgICBT TkRfTkFNLCBDTV9BUkcgfSwKLSNpZmRlZiBDS1NZTUxJTksKLSAgICB7ICIvZm9sbG93bGlua3Mi LAkgIFNORF9MTkssIDAgfSwKLSNlbmRpZiAvKiBDS1NZTUxJTksgKi8KLSNpZmRlZiBWTVMKLSAg ICB7ICIvaW1hZ2UiLCAgICAgICAgICAgU05EX0lNRywgMCB9LAotI2Vsc2UKLSAgICB7ICIvaW1h Z2UiLCAgICAgICAgICAgU05EX0JJTiwgQ01fSU5WIH0sCi0jZW5kaWYgLyogVk1TICovCi0jaWZk ZWYgQ0tfTEFCRUxFRAotICAgIHsgIi9sYWJlbGVkIiwgICAgICAgICBTTkRfTEJMLCAwIH0sCi0j ZW5kaWYgLyogQ0tfTEFCRUxFRCAqLwotICAgIHsgIi9sYXJnZXItdGhhbiIsICAgICBTTkRfTEFS LCBDTV9BUkcgfSwKLSAgICB7ICIvbGlzdCIsICAgICAgICAgICAgU05EX0ZJTCwgQ01fQVJHIH0s Ci0jaWZuZGVmIE5PRlJJTExTCi0gICAgeyAiL21haWwiLCAgICAgICAgICAgIFNORF9NQUksIENN X0FSRyB9LAotI2VuZGlmIC8qIE5PRlJJTExTICovCi0jaWZkZWYgQ0tfVE1QRElSCi0gICAgeyAi L21vdmUtdG8iLCAgICAgICAgIFNORF9NT1YsIENNX0FSRyB9LAotI2VuZGlmIC8qIENLX1RNUERJ UiAqLwotI2lmZGVmIENLU1lNTElOSwotICAgIHsgIi9ub2ZvbGxvd2xpbmtzIiwJU05EX05MSywg MCB9LAotI2VuZGlmIC8qIENLU1lNTElOSyAqLwotICAgIHsgIi9ub3QtYWZ0ZXIiLCAgICAgICBT TkRfTkFGLCBDTV9BUkcgfSwKLSAgICB7ICIvbm90LWJlZm9yZSIsICAgICAgU05EX05CRSwgQ01f QVJHIH0sCi0gICAgeyAiL3BhdGhuYW1lcyIsICAgICAgIFNORF9QVEgsIENNX0FSRyB9LAotICAg IHsgIi9wcmludCIsICAgICAgICAgICBTTkRfUFJJLCBDTV9BUkcgfSwKLSNpZmRlZiBDS19YWVoK LSAgICB7ICIvcHJvdG9jb2wiLCAgICAgICAgU05EX1BSTywgQ01fQVJHIH0sCi0jZW5kaWYgLyog Q0tfWFlaICovCi0gICAgeyAiL3F1aWV0IiwgICAgICAgICAgIFNORF9TSEgsIDAgfSwKLSAgICB7 ICIvcmVjb3ZlciIsICAgICAgICAgU05EX1JFUywgMCB9LAotICAgIHsgIi9yZW5hbWUtdG8iLCAg ICAgICBTTkRfUkVOLCBDTV9BUkcgfSwKLSAgICB7ICIvc2luY2UiLCAgICAgICAgICAgU05EX0FG VCwgQ01fSU5WfENNX0FSRyB9LAotICAgIHsgIi9zbWFsbGVyLXRoYW4iLCAgICBTTkRfU01BLCBD TV9BUkcgfSwKLSAgICB7ICIvc3RhcnRpbmctYXQiLCAgICAgU05EX1NUQSwgQ01fQVJHIH0sCi0j aWZuZGVmIE5PRlJJTExTCi0gICAgeyAiL3N1YmplY3QiLCAgICAgICAgIFNORF9BU04sIENNX0FS RyB9LAotI2VuZGlmIC8qIE5PRlJJTExTICovCi0gICAgeyAiL3RleHQiLCAgICAgICAgICAgIFNO RF9UWFQsIDAgfSwKLSAgICB7ICIvdHJhbnNwYXJlbnQiLCAgICAgU05EX1hQQSwgMCB9LAotICAg IHsgIi90eXBlIiwgICAgICAgICAgICBTTkRfVFlQLCBDTV9BUkcgfQotfTsKLSNkZWZpbmUgTk1T TkRUQUIgc2l6ZW9mKG1zbmR0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKQotc3RhdGljIGludCBu bXNuZHRhYiA9IE5NU05EVEFCOwotI2VuZGlmIC8qIE5PTVNFTkQgKi8KLSNlbmRpZiAvKiBOT1hG RVIgKi8KLQotLyogQ09OTkVDVCBjb21tYW5kIHN3aXRjaGVzICovCi0KLSNkZWZpbmUgQ09OTl9J SSAgMAkvKiBJZGxlIGludGVydmFsICovCi0jZGVmaW5lIENPTk5fSVMgIDEJLyogSWRsZSBzdHJp bmcgKi8KLSNkZWZpbmUgQ09OTl9JTCAgMgkvKiBJZGxlIGxpbWl0ICovCi0jZGVmaW5lIENPTk5f TlYgIDMJLyogTm9uLVZlcmJvc2UgKi8KLSNkZWZpbmUgQ09OTl9UTCAgNAkvKiBUaW1lIGxpbWl0 ICovCi0jZGVmaW5lIENPTk5fVFMgIDUJLyogVHJpZ2dlciBzdHJpbmcgKi8KLSNkZWZpbmUgQ09O Tl9BUyAgNgkvKiBBc3luY2hyb25vdXMgKi8KLSNkZWZpbmUgQ09OTl9TWSAgNwkvKiBTeW5jaHJv bm91cyAqLwotI2RlZmluZSBDT05OX01BWCA3CS8qIE51bWJlciBvZiBDT05ORUNUIHN3aXRjaGVz ICovCi0KLSNpZm5kZWYgTk9MT0NBTAotc3RhdGljIHN0cnVjdCBrZXl0YWIgY29ubnRhYltdID0g ewotI2lmZGVmIE9TMgotICAgIHsgIi9hc3luY2hyb25vdXMiLCAgICBDT05OX0FTLCBDTV9JTlYg fSwKLSNlbmRpZiAvKiBPUzIgKi8KLSNpZmRlZiBYTElNSVRTCi0gICAgeyAiL2lkbGUtaW50ZXJ2 YWwiLCAgIENPTk5fSUksIENNX0FSRyB9LAotICAgIHsgIi9pZGxlLWxpbWl0IiwgICAgICBDT05O X0lMLCBDTV9BUkcgfSwKLSAgICB7ICIvaWRsZS1zdHJpbmciLCAgICAgQ09OTl9JUywgQ01fQVJH IH0sCi0gICAgeyAiL3F1aWV0bHkiLCAgICAgICAgIENPTk5fTlYsIENNX0lOViB9LAotI2Vsc2UK LSAgICB7ICIvcXVpZXRseSIsICAgICAgICAgQ09OTl9OViwgMCB9LAotI2VuZGlmIC8qIFhMSU1J VFMgKi8KLSNpZmRlZiBPUzIKLSAgICB7ICIvc3luY2hyb25vdXMiLCAgICAgQ09OTl9TWSwgQ01f SU5WIH0sCi0jZW5kaWYgLyogT1MyICovCi0jaWZkZWYgWExJTUlUUwotICAgIHsgIi90aW1lLWxp bWl0IiwgICAgICBDT05OX1RMLCBDTV9BUkcgfSwKLSNlbmRpZiAvKiBYTElNSVRTICovCi0jaWZk ZWYgQ0tfVFJJR0dFUgotICAgIHsgIi90cmlnZ2VyIiwgICAgICAgICBDT05OX1RTLCBDTV9BUkcg fSwKLSNlbmRpZiAvKiBDS19UUklHR0VSICovCi0gICAgeyAiIiwwLDAgfQotfTsKLSNkZWZpbmUg TkNPTk5UQUIgc2l6ZW9mKGNvbm50YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKQotc3RhdGljIGlu dCBuY29ubnRhYiA9IE5DT05OVEFCOwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmbmRlZiBO T1hGRVIKLXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHN0YXR0YWJbXSA9IHsJLyogU1RBVElTVElDUyBj b21tYW5kIHN3aXRjaGVzICovCi0gICAgeyAiL2JyaWVmIiwgICAxLCAwIH0sCi0gICAgeyAiL3Zl cmJvc2UiLCAwLCAwIH0KLX07Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYgTk9TUEwK LSNpZmRlZiBDT01NRU5UCi1zdHJ1Y3QgbXRhYiBtYWN0YWJbTUFDX01BWF0gPSB7CQkvKiBQcmVp bml0aWFsaXplZCBtYWNybyB0YWJsZSAqLwotICAgIHsgTlVMTCwgTlVMTCwgMCB9Ci19OwotI2Vs c2UKLXN0cnVjdCBtdGFiICptYWN0YWI7CQkJLyogRHluYW1pY2FsbHkgYWxsb2NhdGVkIG1hY3Jv IHRhYmxlICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotaW50IG5tYWMgPSAwOwotCi1zdHJ1Y3Qg a2V5dGFiIG1hY2tleVtNQUNfTUFYXTsJCS8qIE1hY3JvIG5hbWVzIGFzIGNvbW1hbmQga2V5d29y ZHMgKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVmIE5PU1BMCi0jaWZkZWYgIE9TMgot c3RydWN0IGtleXRhYiBiZWVwdGFiW10gPSB7CQkvKiBCZWVwIG9wdGlvbnMgKi8KLSAgICB7ICJl cnJvciIsIEJQX0ZBSUwsIDAgfSwKLSAgICB7ICJpbmZvcm1hdGlvbiIsIEJQX05PVEUsIDAgfSwK LSAgICB7ICJ3YXJuaW5nIiwgQlBfV0FSTiwgMCB9Ci19OwotaW50IG5iZWVwdGFiID0gc2l6ZW9m KGJlZXB0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKTsKLQotLyogQ0xFQVIgQ09NTU1BTkQtU0NS RUVOIG9wdGlvbnMgKi8KLQotI2RlZmluZSBDTFJfQ19BTEwgMAotI2RlZmluZSBDTFJfQ19CT0wg MQotI2RlZmluZSBDTFJfQ19CT1MgMgotI2RlZmluZSBDTFJfQ19FT0wgMwotI2RlZmluZSBDTFJf Q19FT1MgNAotI2RlZmluZSBDTFJfQ19MSU4gNQotI2RlZmluZSBDTFJfQ19TQ1IgNgotCi1zdHJ1 Y3Qga2V5dGFiIGNscmNtZHRhYltdID0gewotICAgIHsgImFsbCIsICAgICAgICBDTFJfQ19BTEws IDAgfSwKLSAgICB7ICJib2wiLCAgICAgICAgQ0xSX0NfQk9MLCAwIH0sCi0gICAgeyAiYm9zIiwg ICAgICAgIENMUl9DX0JPUywgMCB9LAotICAgIHsgImVvbCIsICAgICAgICBDTFJfQ19FT0wsIDAg fSwKLSAgICB7ICJlb3MiLCAgICAgICAgQ0xSX0NfRU9TLCAwIH0sCi0gICAgeyAibGluZSIsICAg ICAgIENMUl9DX0xJTiwgMCB9LAotICAgIHsgInNjcm9sbGJhY2siLCBDTFJfQ19TQ1IsIDAgfQot fTsKLWludCBuY2xyY21kID0gc2l6ZW9mKGNscmNtZHRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIp OwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZmRlZiBDT01NRU5U Ci0vKiBOb3QgdXNlZCBhdCBwcmVzZW50ICovCi1zdGF0aWMgc3RydWN0IGtleXRhYiBwYWdldGFi W10gPSB7Ci0gICAgeyAiL21vcmUiLCAgIDEsIENNX0lOViB9LAotICAgIHsgIi9ub3BhZ2UiLCAw LCAwIH0sCi0gICAgeyAiL3BhZ2UiLCAgIDEsIDAgfQotfTsKLWludCBucGFnZXRhYiA9IHNpemVv ZihwYWdldGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwot Ci0jZGVmaW5lIFRZUF9OT1AgIDAJCQkvKiAvTk9QQUdFICovCi0jZGVmaW5lIFRZUF9QQUcgIDEJ CQkvKiAvUEFHRSAqLwotI2RlZmluZSBUWVBfSEVBICAyCQkJLyogL0hFQUQ6biAqLwotI2RlZmlu ZSBUWVBfVEFJICAzCQkJLyogL1RBSUw6biAqLwotI2RlZmluZSBUWVBfUEFUICA0CQkJLyogL01B VENIOnBhdHRlcm4gKi8KLSNkZWZpbmUgVFlQX1dJRCAgNQkJCS8qIC9XSURUSDpjb2xzICovCi0j ZGVmaW5lIFRZUF9DT1UgIDYJCQkvKiAvQ09VTlQgKi8KLSNkZWZpbmUgVFlQX09VVCAgNwkJCS8q IC9PVVRQVVQ6ZmlsZSAqLwotI2RlZmluZSBUWVBfUEZYICA4CQkJLyogL1BSRUZJWDpzdHJpbmcg Ki8KLSNpZmRlZiBVTklDT0RFCi0jZGVmaW5lIFRZUF9YSU4gIDkJCQkvKiAvVFJBTlNMQVRFLUZS T006Y2hhcnNldCAqLwotI2RlZmluZSBUWVBfWFVUIDEwCQkJLyogL1RSQU5TTEFURS1UTzpjaGFy c2V0ICovCi0jZGVmaW5lIFRZUF9YUEEgMTEJCQkvKiAvVFJBTlNQQVJFTlQgKi8KLSNlbmRpZiAv KiBVTklDT0RFICovCi0jaWZkZWYgS1VJCi0jZGVmaW5lIFRZUF9HVUkgMTIJCQkvKiAvR1VJOnRp dGxlICovCi0jZGVmaW5lIFRZUF9ISUcgMTMJCQkvKiAvSEVJR0hUOnJvd3MgKi8KLSNlbmRpZiAv KiBLVUkgKi8KLSNkZWZpbmUgVFlQX05VTSAxNAkJCS8qIC9OVU1CRVIgKi8KLQotc3RhdGljIHN0 cnVjdCBrZXl0YWIgdHlwZXRhYltdID0gewkvKiBUWVBFIGNvbW1hbmQgc3dpdGNoZXMgKi8KLSAg ICB7ICIvY291bnQiLCAgICAgICAgICBUWVBfQ09VLCAwIH0sCi0jaWZkZWYgVU5JQ09ERQotICAg IHsgIi9jaGFyYWN0ZXItc2V0IiwgIFRZUF9YSU4sIENNX0FSRyB9LAotI2VuZGlmIC8qIFVOSUNP REUgKi8KLSNpZmRlZiBLVUkKLSAgICB7ICIvZ3VpIiwgICAgICAgICAgICBUWVBfR1VJLCBDTV9B UkcgfSwKLSNlbmRpZiAvKiBLVUkgKi8KLSAgICB7ICIvaGVhZCIsICAgICAgICAgICBUWVBfSEVB LCBDTV9BUkcgfSwKLSNpZmRlZiBLVUkKLSAgICB7ICIvaGVpZ2h0IiwgICAgICAgICBUWVBfSElH LCBDTV9BUkcgfSwKLSNlbmRpZiAvKiBLVUkgKi8KLSAgICB7ICIvbWF0Y2giLCAgICAgICAgICBU WVBfUEFULCBDTV9BUkcgfSwKLSNpZmRlZiBDS19UVEdXU0laCi0gICAgeyAiL21vcmUiLCAgICAg ICAgICAgVFlQX1BBRywgQ01fSU5WIH0sCi0gICAgeyAiL25vcGFnZSIsICAgICAgICAgVFlQX05P UCwgMCB9LAotICAgIHsgIi9udW1iZXIiLCAgICAgICAgIFRZUF9OVU0sIDAgfSwKLSAgICB7ICIv b3V0cHV0IiwgICAgICAgICBUWVBfT1VULCBDTV9BUkcgfSwKLSAgICB7ICIvcGFnZSIsICAgICAg ICAgICBUWVBfUEFHLCAwIH0sCi0jZW5kaWYgLyogQ0tfVFRHV1NJWiAqLwotICAgIHsgIi9wcmVm aXgiLCAgICAgICAgIFRZUF9QRlgsIENNX0FSRyB9LAotICAgIHsgIi90YWlsIiwgICAgICAgICAg IFRZUF9UQUksIENNX0FSRyB9LAotI2lmZGVmIFVOSUNPREUKLSAgICB7ICIvdHJhbnNsYXRlLXRv IiwgICBUWVBfWFVULCBDTV9BUkcgfSwKLSAgICB7ICIvdHJhbnNwYXJlbnQiLCAgICBUWVBfWFBB LCAwIH0sCi0jZW5kaWYgLyogVU5JQ09ERSAqLwotICAgIHsgIi93aWR0aCIsICAgICAgICAgIFRZ UF9XSUQsIENNX0FSRyB9LAotI2lmZGVmIFVOSUNPREUKLSAgICB7ICIveGxhdGUtdG8iLCAgICAg ICBUWVBfWFVULCBDTV9JTlZ8Q01fQVJHIH0sCi0jZW5kaWYgLyogVU5JQ09ERSAqLwotICAgIHsg IiIsIDAsIDAgfQotfTsKLWludCBudHlwZXRhYiA9IHNpemVvZih0eXBldGFiKS9zaXplb2Yoc3Ry dWN0IGtleXRhYikgLSAxOwotCi1pbnQgdHlwX3BhZ2UgPSAtMTsJCQkvKiBUWVBFIC9bTk9dUEFH RSBkZWZhdWx0ICovCi1pbnQgdHlwX3dpZCAgPSAtMTsKLQotI2lmbmRlZiBOT1NQTAotI2RlZmlu ZSBUUkFfQUxMIDk5OQkJCS8qIFRSQUNFIGNvbW1hbmQgKi8KLSNkZWZpbmUgVFJBX0FTRyAwCi0j ZGVmaW5lIFRSQV9DTUQgMQotCi1pbnQgdHJhX2FzZyA9IDA7Ci1pbnQgdHJhX2NtZCA9IDA7Ci0K LXN0YXRpYyBzdHJ1Y3Qga2V5dGFiIHRyYWNldGFiW10gPSB7CS8qIFRSQUNFIG9wdGlvbnMgKi8K LSAgICB7ICJhbGwiLCAgICAgICAgICAgIFRSQV9BTEwsIDAgfSwKLSAgICB7ICJhc3NpZ25tZW50 cyIsICAgIFRSQV9BU0csIDAgfSwKLSAgICB7ICJjb21tYW5kLWxldmVsIiwgIFRSQV9DTUQsIDAg fQotfTsKLXN0YXRpYyBpbnQgbnRyYWNldGFiID0gc2l6ZW9mKHRyYWNldGFiKS9zaXplb2Yoc3Ry dWN0IGtleXRhYik7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT1NIT1cKLVZPSUQK LXNob3d0eXBvcHRzKCkgewotICAgIHByaW50ZigiIFRZUEUgIik7Ci0gICAgaWYgKHR5cF9wYWdl ID4gLTEpIHsKLQlwcnRvcHQoJm9wdGxpbmVzLHR5cF9wYWdlID8gIi9QQUdFIiA6ICIvTk9QQUdF Iik7Ci0gICAgfSBlbHNlCi0gICAgICBwcnRvcHQoJm9wdGxpbmVzLCIobm8gb3B0aW9ucyBzZXQp Iik7Ci0gICAgaWYgKHR5cF93aWQgPiAtMSkgewotCWNrbWFrbXNnKHRtcGJ1ZixUTVBCVUZTSVos Ii9XSURUSDoiLGNraXRvYSh0eXBfd2lkKSxOVUxMLE5VTEwpOwotCXBydG9wdCgmb3B0bGluZXMs dG1wYnVmKTsKLSAgICB9Ci0gICAgcHJ0b3B0KCZvcHRsaW5lcywiIik7Ci19Ci0jZW5kaWYgLyog Tk9TSE9XICovCi0KLSNpZmRlZiBMT0NVUwotLyogaXNhdXRvID09IDEgaWYgbG9jdXMgaXMgYmVp bmcgc3dpdGNoZWQgYXV0b21hdGljYWxseSAqLwotCi1WT0lECi1zZXRsb2N1cyh4LCBpc2F1dG8p IGludCB4LCBpc2F1dG87IHsKLSAgICBleHRlcm4gaW50IHF1aXR0aW5nOwotICAgIGlmICh4KSB4 ID0gMTsKLSAgICBpZiAoeCAmJiBsb2N1cykgcmV0dXJuOwotICAgIGlmICgheCAmJiAhbG9jdXMp IHJldHVybjsKLSAgICAvKiBHZXQgaGVyZSBpZiBpdCBhY3R1YWxseSBuZWVkcyB0byBiZSBjaGFu Z2VkICovCi0jaWZkZWYgT1MyCi0gICAgaWYgKGlzYXV0byAmJgkJCS8qIEF1dG9tYXRpY2FsbHkg c3dpdGNoaW5nICovCi0JIXF1aXR0aW5nICYmCQkJLyogbm90IGV4aXRpbmcgKi8KLQlhdXRvbG9j dXMgPT0gMikgewkJLyogYW5kIEFVVE9MT0NVUyBpcyBzZXQgdG8gQVNLICovCi0JY2hhciBsb2Nt c2dbMzAwXTsKLQlja21ha21zZyhsb2Ntc2csMzAwLAotCQkgIlN3aXRjaGluZyBMb2N1cyB0byAi LAotCQkgeCA/ICJMT0NBTCIgOiAiUkVNT1RFIiwKLQkJICIgZm9yIGZpbGUgbWFuYWdlbWVudCBj b21tYW5kc1xuIgotICAgICAgICAgICAgICAgICAic3VjaCBhcyBDRCwgRElSRUNUT1JZLCBERUxF VEUsIFJFTkFNRS4gIFR5cGUgSEVMUCBTRVRcbiIKLSAgICAgICAgICAgICAgICAgIkxPQ1VTIGF0 IHRoZSBLLTk1PiBwcm9tcHQgZm9yIGZ1cnRoZXIgaW5mby4gIFVzZSB0aGVcbiIKLSNpZmRlZiBL VUkKLSAgICAgICAgICAgICAgICAgICJBY3Rpb25zIG1lbnUgb3IgU0VUIExPQ1VTIGNvbW1hbmQg dG8gZGlzYWJsZSBhdXRvbWF0aWNcbiIKLSAgICAgICAgICAgICAgICAgICJMb2N1cyBzd2l0Y2hp bmcgb3IgdG8gZGlzYWJsZSB0aGVzZSBxdWVyaWVzLiIsCi0jZWxzZSAvKiBLVUkgKi8KLSAgICAg ICAgICAgICAgICAgICJTRVQgTE9DVVMgY29tbWFuZCB0byBkaXNhYmxlIGF1dG9tYXRpYyBsb2N1 cyBzd2l0Y2hpbmdcbiIKLSAgICAgICAgICAgICAgICAgICJvciB0byBkaXNhYmxlIHRoZXNlIHF1 ZXJpZXMuIiwKLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgICAgICAgIE5VTEwpOwotCWlm ICh1cV9vayhsb2Ntc2csIk9LIHRvIHN3aXRjaCBMb2N1cz8iLDMsTlVMTCwxKSkgewotCSAgICBs b2N1cyA9IHg7Ci0jaWZkZWYgS1VJCi0JICAgIEt1aVNldFByb3BlcnR5KEtVSV9MT0NVUyx4LDAp OwotI2VuZGlmIC8qIEtVSSAqLwotCSAgICByZXR1cm47Ci0JfQotICAgIH0gZWxzZSB7Ci0jZW5k aWYgLyogT1MyICovCi0gICAgICAgIGlmIChpc2F1dG8gJiYgbXNnZmxnICYmICFxdWl0dGluZykK LSAgICAgICAgICBwcmludGYoIlN3aXRjaGluZyBMT0NVUyBmb3IgZmlsZS1tYW5hZ2VtZW50IGNv bW1hbmRzIHRvICVzICVzLlxuIiwKLQkJIHggPyAiTE9DQUwiIDogIlJFTU9URSIsCi0JCSAiKEhF TFAgTE9DVVMgZm9yIGluZm8pIgotCQkgKTsKLQlsb2N1cyA9IHg7Ci0jaWZkZWYgT1MyCi0jaWZk ZWYgS1VJCi0JS3VpU2V0UHJvcGVydHkoS1VJX0xPQ1VTLHgsMCk7Ci0jZW5kaWYgLyogS1VJICov Ci0gICAgfQotI2VuZGlmIC8qIE9TMiAqLwotfQotCi1WT0lECi1zZXRhdXRvbG9jdXMoeCkgaW50 IHg7IHsKLSAgICBhdXRvbG9jdXMgPSB4OwotI2lmZGVmIEtVSQotICAgIEt1aVNldFByb3BlcnR5 KEtVSV9BVVRPX0xPQ1VTLHgsMCk7Ci0jZW5kaWYgLyogS1VJICovCi19Ci0jZW5kaWYgLyogTE9D VVMgKi8KLQotaW50Ci1zZXR0eXBvcHRzKCkgewkJCQkvKiBTZXQgVFlQRSBvcHRpb24gZGVmYXVs dHMgKi8KLSAgICBpbnQgeHAgPSAtMTsKLSAgICBpbnQgYywgZ2V0dmFsOwotICAgIHdoaWxlICgx KSB7Ci0JaWYgKCh5ID0gY21zd2kodHlwZXRhYixudHlwZXRhYiwiU3dpdGNoIiwiIix4eHN0cmlu ZykpIDwgMCkgewotCSAgICBpZiAoeSA9PSAtMykKLQkgICAgICBicmVhazsKLQkgICAgZWxzZQot CSAgICAgIHJldHVybih5KTsKLQl9Ci0JYyA9IGNtZ2JyaygpOwotCWlmICgoZ2V0dmFsID0gKGMg PT0gJzonIHx8IGMgPT0gJz0nKSkgJiYgIShjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKLQkgICAg cHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBhbiBhcmd1bWVudFxuIik7Ci0JICAg IHJldHVybigtOSk7Ci0JfQotCXN3aXRjaCAoeSkgewotCSAgY2FzZSBUWVBfTk9QOiB4cCA9IDA7 IGJyZWFrOwotCSAgY2FzZSBUWVBfUEFHOiB4cCA9IDE7IGJyZWFrOwotCSAgY2FzZSBUWVBfV0lE OgotCSAgICBpZiAoZ2V0dmFsKQotCSAgICAgIGlmICgoeCA9IGNtbnVtKCJDb2x1bW4gYXQgd2hp Y2ggdG8gdHJ1bmNhdGUiLAotCQkJICAgICBja2l0b2EoY21kX2NvbHMpLDEwLCZ5LHh4c3RyaW5n KSkgPCAwKQotCQlyZXR1cm4oeCk7Ci0JICAgIHR5cF93aWQgPSB5OwotCSAgICBicmVhazsKLQot ICAgICAgICAgIGRlZmF1bHQ6Ci0JICAgIHByaW50ZigiP1NvcnJ5LCB0aGlzIG9wdGlvbiBjYW4g bm90IGJlIHNldFxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotICAgIH0KLSAgICBpZiAoKHgg PSBjbWNmbSgpKSA8IDApCQkvKiBHZXQgY29uZmlybWF0aW9uICovCi0gICAgICByZXR1cm4oeCk7 Ci0gICAgaWYgKHhwID4gLTEpIHR5cF9wYWdlID0geHA7CQkvKiBDb25maXJtZWQsIHNhdmUgZGVm YXVsdHMgKi8KLSAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotfQotCi0vKiBGb3J3YXJkIGRlY2xh cmF0aW9ucyBvZiBmdW5jdGlvbnMgbG9jYWwgdG8gdGhpcyBtb2R1bGUgKi8KLQotI2lmZGVmIFVO SVgKLV9QUk9UT1RZUCAoaW50IGRvdWNobW9kLCAoIHZvaWQgKSApOwotI2VuZGlmIC8qIFVOSVgg Ki8KLSNpZmRlZiBDS1BVUkdFCi1fUFJPVE9UWVAgKGludCBkb3B1cmdlLCAgKCB2b2lkICkgKTsK LSNlbmRpZiAvKiBDS1BVUkdFICovCi0jaWZuZGVmIE5PU1BMCi1fUFJPVE9UWVAgKGludCBkb3Vu ZGVmLCAgKCBpbnQgICkgKTsKLV9QUk9UT1RZUCAoaW50IGRvYXNrLCAgICAoIGludCAgKSApOwot X1BST1RPVFlQIChpbnQgZG9kZWYsICAgICggaW50ICApICk7Ci1fUFJPVE9UWVAgKGludCBkb2Vs c2UsICAgKCB2b2lkICkgKTsKLV9QUk9UT1RZUCAoaW50IGRvZm9yLCAgICAoIHZvaWQgKSApOwot I2VuZGlmIC8qIE5PU1BMICAqLwotI2lmbmRlZiBOT0RJQUwKLV9QUk9UT1RZUCAoaW50IGRvZGlh bCwgICAoIGludCAgKSApOwotI2VuZGlmIC8qIE5PRElBTCAqLwotX1BST1RPVFlQIChpbnQgZG9k ZWwsICAgICggdm9pZCApICk7Ci1fUFJPVE9UWVAgKGludCBkb3BhdXMsICAgKCBpbnQgICkgKTsK LSNpZm5kZWYgTk9QVVNICi0jaWZkZWYgVENQU09DS0VUCi1fUFJPVE9UWVAgKGludCBkb3Bpbmcs ICAgKCB2b2lkICkgKTsKLV9QUk9UT1RZUCAoaW50IGRvZnRwLCAgICAoIHZvaWQgKSApOwotI2Vu ZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2VuZGlmIC8qIE5PUFVTSCAqLwotI2lmbmRlZiBOT1JFTkFN RQotI2lmbmRlZiBOT0ZSSUxMUwotX1BST1RPVFlQIChpbnQgZG9yZW5hbSwgICggdm9pZCApICk7 Ci0jZW5kaWYgLyogTk9GUklMTFMgKi8KLSNlbmRpZiAvKiBOT1JFTkFNRSAqLwotI2lmZGVmIFpD T1BZCi1fUFJPVE9UWVAgKGludCBkb2NvcHksICAgKCB2b2lkICkgKTsKLSNlbmRpZiAvKiBaQ09Q WSAqLwotI2lmZGVmIE5UCi1fUFJPVE9UWVAgKGludCBkb2xpbmssICAgKCB2b2lkICkpOwotI2Vu ZGlmIC8qIE5UICovCi0jaWZkZWYgQ0tfUkVYWAotX1BST1RPVFlQIChpbnQgZG9yZXh4LCAgICgg dm9pZCApICk7Ci0jZW5kaWYgLyogQ0tfUkVYWCAqLwotCi0jaWZkZWYgVE5DT0RFCi1zdGF0aWMg c3RydWN0IGtleXRhYiB0ZWxjbWRbXSA9IHsKLSAgICB7ICJhYm9ydCIsIFROX0FCT1JULCBDTV9J TlYgfSwJLyogRW1vdGlvbmFsbHkgdG9uZWQgLSBkb24ndCBzaG93ICovCi0gICAgeyAiYW8iLCAg ICBUTl9BTywgICAgMCB9LAotICAgIHsgImF5dCIsICAgVE5fQVlULCAgIDAgfSwKLSAgICB7ICJi cmVhayIsIEJSRUFLLCAgICAwIH0sCi0gICAgeyAiY2FuY2VsIixUTl9BQk9SVCwgMCB9LAotICAg IHsgImRtYXJrIiwgVE5fRE0sICAgIDAgfSwKLSAgICB7ICJkbyIsICAgIERPLCAgICAgICAwIH0s Ci0gICAgeyAiZG9udCIsICBET05ULCAgICAgMCB9LAotICAgIHsgImVjIiwgICAgVE5fRUMsICAg IDAgfSwKLSAgICB7ICJlbCIsICAgIFROX0VMLCAgICAwIH0sCi0gICAgeyAiZW9mIiwgICBUTl9F T0YsICAgMCB9LAotICAgIHsgImVvciIsICAgVE5fRU9SLCAgIDAgfSwKLSNpZmRlZiBDS19LRVJC RVJPUwotI2lmZGVmIEtSQjUKLSNkZWZpbmUgVE5fRldEIDEKLSAgICB7ICJmb3J3YXJkIiwgVE5f RldELCBDTV9JTlYgfSwKLSNlbmRpZiAvKiBLUkI1ICovCi0jZW5kaWYgLyogQ0tfS0VSQkVST1Mg Ki8KLSAgICB7ICJnYSIsICAgIFROX0dBLCAgICAwIH0sCi0gICAgeyAiaXAiLCAgICBUTl9JUCwg ICAgMCB9LAotICAgIHsgIm5vcCIsICAgVE5fTk9QLCAgIDAgfSwKLSAgICB7ICJzYWsiLCAgIFRO X1NBSywgICBDTV9JTlYgfSwKLSAgICB7ICJzYiIsICAgIFNCLCAgICAgICAwIH0sCi0gICAgeyAi c2UiLCAgICBTRSwgICAgICAgMCB9LAotICAgIHsgInN1c3AiLCAgVE5fU1VTUCwgIDAgfSwKLSAg ICB7ICJ3aWxsIiwgIFdJTEwsICAgICAwIH0sCi0gICAgeyAid29udCIsICBXT05ULCAgICAgMCB9 Ci19Owotc3RhdGljIGludCBudGVsY21kID0gKHNpemVvZih0ZWxjbWQpIC8gc2l6ZW9mKHN0cnVj dCBrZXl0YWIpKTsKLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgdG5vcHRzW10gPSB7Ci0jaWZkZWYg Q0tfQVVUSEVOVElDQVRJT04KLSAgICB7ICJhdXRoIiwgICBURUxPUFRfQVVUSEVOVElDQVRJT04s ICAgMCB9LAotI2Vsc2UKLSAgICB7ICJhdXRoIiwgICBURUxPUFRfQVVUSEVOVElDQVRJT04sICAg Q01fSU5WIH0sCi0jZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KLSAgICB7ICJiaW5hcnki LCBURUxPUFRfQklOQVJZLCAwIH0sCi0jaWZkZWYgVE5fQ09NUE9SVAotICAgIHsgImMiLCAgICAg IFRFTE9QVF9DT01QT1JULCBDTV9JTlZ8Q01fQUJSfSwKLSAgICB7ICJjbyIsICAgICBURUxPUFRf Q09NUE9SVCwgQ01fSU5WfENNX0FCUn0sCi0gICAgeyAiY29tIiwgICAgVEVMT1BUX0NPTVBPUlQs IENNX0lOVnxDTV9BQlJ9LAotICAgIHsgImNvbS1wb3J0LWNvbnRyb2wiLCBURUxPUFRfQ09NUE9S VCwgMCB9LAotICAgIHsgImNvbXBvcnQtY29udHJvbCIsIFRFTE9QVF9DT01QT1JULCBDTV9JTlZ9 LAotI2Vsc2UgIC8qIFROX0NPTVBPUlQgKi8KLSAgICB7ICJjb20tcG9ydC1jb250cm9sIiwgVEVM T1BUX0NPTVBPUlQsIENNX0lOViB9LAotICAgIHsgImNvbXBvcnQtY29udHJvbCIsIFRFTE9QVF9D T01QT1JULCBDTV9JTlZ9LAotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLSAgICB7ICJlY2hvIiwg VEVMT1BUX0VDSE8sIDAgfSwKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgeyAiZW5jcnlwdCIs IFRFTE9QVF9FTkNSWVBUSU9OLCAwIH0sCi0jZWxzZQotICAgIHsgImVuY3J5cHQiLCBURUxPUFRf RU5DUllQVElPTiwgQ01fSU5WIH0sCi0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotI2lmZGVm IENLX0ZPUldBUkRfWAotICAgIHsgImZvcndhcmQteCIsIFRFTE9QVF9GT1JXQVJEX1gsIDAgfSwK LSNlbHNlCi0gICAgeyAiZm9yd2FyZC14IiwgVEVMT1BUX0ZPUldBUkRfWCwgQ01fSU5WIH0sCi0j ZW5kaWYgLyogQ0tfRk9SV0FSRF9YICovCi0jaWZkZWYgSUtTX09QVElPTgotICAgIHsgImtlcm1p dCIsIFRFTE9QVF9LRVJNSVQsIDAgfSwKLSNlbHNlCi0gICAgeyAia2VybWl0IiwgVEVMT1BUX0tF Uk1JVCwgQ01fSU5WIH0sCi0jZW5kaWYgLyogSUtTX09QVElPTiAqLwotICAgIHsgImxmbG93Iiwg IFRFTE9QVF9MRkxPVywgQ01fSU5WIH0sCi0gICAgeyAibG9nb3V0IiwgVEVMT1BUX0xPR09VVCwg Q01fSU5WIH0sCi0jaWZkZWYgQ0tfTkFXUwotICAgIHsgIm5hd3MiLCBURUxPUFRfTkFXUywgMCB9 LAotI2Vsc2UKLSAgICB7ICJuYXdzIiwgVEVMT1BUX05BV1MsIENNX0lOViB9LAotI2VuZGlmIC8q IENLX05BV1MgKi8KLSNpZmRlZiBDS19FTlZJUk9OTUVOVAotICAgIHsgIm5ldy1lbnZpcm9ubWVu dCIsIFRFTE9QVF9ORVdFTlZJUk9OLCAgMCB9LAotI2Vsc2UKLSAgICB7ICJuZXctZW52aXJvbm1l bnQiLCBURUxPUFRfTkVXRU5WSVJPTiwgIENNX0lOViB9LAotI2VuZGlmIC8qIENLX0VOVklST05N RU5UICovCi0gICAgeyAicHJhZ21hLWhlYXJ0YmVhdCIsVEVMT1BUX1BSQUdNQV9IRUFSVEJFQVQs ICBDTV9JTlYgfSwKLSAgICB7ICJwcmFnbWEtbG9nb24iLCAgICBURUxPUFRfUFJBR01BX0xPR09O LCAgQ01fSU5WIH0sCi0gICAgeyAicHJhZ21hLXNzcGkiLCAgICAgVEVMT1BUX1NTUElfTE9HT04s ICBDTV9JTlYgfSwKLSAgICB7ICJzYWsiLCAgIFRFTE9QVF9JQk1fU0FLLCBDTV9JTlYgfSwKLSNp ZmRlZiBDS19TTkRMT0MKLSAgICB7ICJzZW5kLWxvY2F0aW9uIiwgICBURUxPUFRfU05ETE9DLCAg MCB9LAotI2Vsc2UKLSAgICB7ICJzZW5kLWxvY2F0aW9uIiwgICBURUxPUFRfU05ETE9DLCAgQ01f SU5WIH0sCi0jZW5kaWYgLyogQ0tfU05ETE9DICovCi0gICAgeyAic2dhIiwgVEVMT1BUX1NHQSwg MCB9LAotI2lmZGVmIENLX1NTTAotICAgIHsgInN0YXJ0LXRscyIsICAgICAgIFRFTE9QVF9TVEFS VF9UTFMsICAwIH0sCi0jZWxzZQotICAgIHsgInN0YXJ0LXRscyIsICAgICAgIFRFTE9QVF9TVEFS VF9UTFMsICBDTV9JTlYgfSwKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICB7ICJ0dHlwZSIsIFRF TE9QVF9UVFlQRSwgMCB9LAotI2lmZGVmIENLX0VOVklST05NRU5UCi0gICAgeyAieGRpc3BsYXkt bG9jYXRpb24iLCBURUxPUFRfWERJU1BMT0MsIDAgfSwKLSNlbHNlCi0gICAgeyAieGRpc3BsYXkt bG9jYXRpb24iLCBURUxPUFRfWERJU1BMT0MsIENNX0lOViB9LAotI2VuZGlmIC8qIENLX0VOVklS T05NRU5UICovCi0gICAgeyAiIiwgMCwgMCB9Ci19Owotc3RhdGljIGludCBudG5vcHRzID0gKHNp emVvZih0bm9wdHMpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLXN0YXRpYyBzdHJ1 Y3Qga2V5dGFiIHRuc2JvcHRzW10gPSB7Ci0jaWZkZWYgQ0tfTkFXUwotICAgIHsgIm5hd3MiLCBU RUxPUFRfTkFXUywgMCB9LAotI2VuZGlmIC8qIENLX05BV1MgKi8KLSAgICB7ICIiLCAwLCAwIH0K LX07Ci1zdGF0aWMgaW50IG50bnNib3B0cyA9IChzaXplb2YodG5zYm9wdHMpIC8gc2l6ZW9mKHN0 cnVjdCBrZXl0YWIpKSAtIDE7Ci0jZW5kaWYgLyogVE5DT0RFICovCi0KLSNpZmRlZiBUQ1BTT0NL RVQKLSNpZm5kZWYgTk9QVVNICi0jaWZkZWYgU1lTRlRQCi1pbnQKLWRvZnRwKCkgewkJCQkvKiAo RXh0ZXJuYWwpIEZUUCBjb21tYW5kICovCi0gICAgY2hhciAqcCwgKmY7CQkJLyogKFNlZSBkb3hm dHAoKSBmb3IgaW50ZXJuYWwgb25lKSAqLwotICAgIGludCB4OwotCi0gICAgaWYgKG5ldHdvcmsp CQkJLyogSWYgd2UgaGF2ZSBhIGN1cnJlbnQgY29ubmVjdGlvbiAqLwotICAgICAgY2tzdHJuY3B5 KGxpbmUsdHRuYW1lLExJTkJVRlNJWik7CS8qIGdldCB0aGUgaG9zdCBuYW1lICovCi0gICAgZWxz ZSAqbGluZSA9ICdcMCc7CQkJLyogYXMgZGVmYXVsdCBob3N0ICovCi0gICAgZm9yIChwID0gbGlu ZTsgKnA7IHArKykJCS8qIFJlbW92ZSAiOnNlcnZpY2UiIGZyb20gZW5kLiAqLwotICAgICAgaWYg KCpwID09ICc6JykgeyAqcCA9ICdcMCc7IGJyZWFrOyB9Ci0gICAgaWYgKCh4ID0gY210eHQoIklQ IGhvc3QgbmFtZSBvciBudW1iZXIiLCBsaW5lLCAmcywgeHhzdHJpbmcpKSA8IDApCi0gICAgICBy ZXR1cm4oeCk7Ci0gICAgaWYgKG5vcHVzaCkgewotICAgICAgICBwcmludGYoIj9Tb3JyeSwgRlRQ IGNvbW1hbmQgZGlzYWJsZWRcbiIpOwotICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAg IH0KLS8qIENvbnN0cnVjdCBGVFAgY29tbWFuZCAqLwotI2lmZGVmIFZNUwotI2lmZGVmIE1VTFRJ TkVUCQkJCS8qIFRHViBNdWx0aU5ldCAqLwotICAgIGNrbWFrbXNnKGxpbmUsTElOQlVGU0laLCJt dWx0aW5ldCBmdHAgIixzLE5VTEwsTlVMTCk7Ci0jZWxzZQotICAgIGNrbWFrbXNnKGxpbmUsTElO QlVGU0laLCJmdHAgIixzLE5VTEwsTlVMTCk7Ci0jZW5kaWYgLyogTVVMVElORVQgKi8KLSNlbHNl CQkJCQkvKiBOb3QgVk1TICovCi0jaWZkZWYgT1MyT1JVTklYCi0jaWZuZGVmIE5PRlRQCi0gICAg ZiA9IGZ0cGFwcDsKLSAgICBpZiAoIWYpIGYgPSAiIjsKLSAgICBpZiAoIWZbMF0pIGYgPSAiZnRw IjsKLSAgICBja21ha21zZyhsaW5lLExJTkJVRlNJWixmLCIgIixzLE5VTEwpOwotI2lmZGVmIE9T MgotICAgIHAgPSBsaW5lICsgc3RybGVuKGZ0cGFwcCk7Ci0gICAgd2hpbGUgKHAgIT0gbGluZSkg ewotICAgICAgICBpZiAoKnAgPT0gJy8nKSAqcCA9ICdcXCc7Ci0gICAgICAgIHAtLTsKLSAgICB9 Ci0jZW5kaWYgLyogT1MyICovCi0jZWxzZSAvKiBOT0ZUUCAqLwotICAgIGNrbWFrbXNnKGxpbmUs TElOQlVGU0laLCJmdHAgIixzLE5VTEwsTlVMTCk7Ci0jZW5kaWYgLyogTk9GVFAgKi8KLSNlbHNl IC8qIE9TMk9SVU5JWCAqLwotICAgIGNrbWFrbXNnKGxpbmUsTElOQlVGU0laLCJmdHAgIixzLE5V TEwsTlVMTCk7Ci0jZW5kaWYgLyogT1MyT1JVTklYICovCi0jZW5kaWYgLyogVk1TICovCi0gICAg Y29ucmVzKCk7CQkJCS8qIE1ha2UgY29uc29sZSBub3JtYWwgICovCi0jaWZkZWYgREVDX1RDUElQ Ci0gICAgcHJpbnRmKCJcbiIpOwkJCS8qIFByZXZlbnQgcHJvbXB0LXN0b21waW5nICovCi0jZW5k aWYgLyogREVDX1RDUElQICovCi0gICAgeCA9IHpzaGNtZChsaW5lKTsKLSAgICBjb25jYigoY2hh cillc2NhcGUpOwotICAgIHJldHVybihzdWNjZXNzID0geCk7Ci19Ci0jZW5kaWYgLyogU1lTRlRQ ICovCi0KLWludAotZG9waW5nKCkgewkJCQkvKiBQSU5HIGNvbW1hbmQgKi8KLSAgICBjaGFyICpw OwkJCQkvKiBqdXN0IHJ1bnMgcGluZyBwcm9ncmFtICovCi0gICAgaW50IHg7Ci0KLSAgICBpZiAo bmV0d29yaykJCQkvKiBJZiB3ZSBoYXZlIGEgY3VycmVudCBjb25uZWN0aW9uICovCi0gICAgICBj a3N0cm5jcHkobGluZSx0dG5hbWUsTElOQlVGU0laKTsJLyogZ2V0IHRoZSBob3N0IG5hbWUgKi8K LSAgICBlbHNlICpsaW5lID0gJ1wwJzsJCQkvKiBhcyBkZWZhdWx0IGhvc3QgdG8gYmUgcGluZ2Vk LiAqLwotICAgIGZvciAocCA9IGxpbmU7ICpwOyBwKyspCQkvKiBSZW1vdmUgIjpzZXJ2aWNlIiBm cm9tIGVuZC4gKi8KLSAgICAgIGlmICgqcCA9PSAnOicpIHsgKnAgPSAnXDAnOyBicmVhazsgfQot ICAgIGlmICgoeCA9IGNtdHh0KCJJUCBob3N0IG5hbWUgb3IgbnVtYmVyIiwgbGluZSwgJnMsIHh4 c3RyaW5nKSkgPCAwKQotICAgICAgcmV0dXJuKHgpOwotICAgIGlmIChub3B1c2gpIHsKLSAgICAg ICAgcHJpbnRmKCI/U29ycnksIFBJTkcgY29tbWFuZCBkaXNhYmxlZFxuIik7Ci0gICAgICAgIHJl dHVybihzdWNjZXNzID0gMCk7Ci0gICAgfQotCi0gICAgLyogQ29uc3RydWN0IFBJTkcgY29tbWFu ZCAqLwotI2lmZGVmIFZNUwotI2lmZGVmIE1VTFRJTkVUCQkJCS8qIFRHViBNdWx0aU5ldCAqLwot ICAgIGNrbWFrbXNnKGxpbmUsTElOQlVGU0laLCJtdWx0aW5ldCBwaW5nICIscywiIC9udW09MSIs TlVMTCk7Ci0jZWxzZQotICAgIGNrbWFrbXNnKGxpbmUsTElOQlVGU0laLCJwaW5nICIscywiIDU2 IDEiLE5VTEwpOyAvKiBPdGhlciBWTVMgVENQL0lQJ3MgKi8KLSNlbmRpZiAvKiBNVUxUSU5FVCAq LwotI2Vsc2UJCQkJCS8qIE5vdCBWTVMgKi8KLSAgICBja21ha21zZyhsaW5lLExJTkJVRlNJWiwi cGluZyAiLHMsTlVMTCxOVUxMKTsKLSNlbmRpZiAvKiBWTVMgKi8KLSAgICBjb25yZXMoKTsJCQkJ LyogTWFrZSBjb25zb2xlIG5vcm1hbCAgKi8KLSNpZmRlZiBERUNfVENQSVAKLSAgICBwcmludGYo IlxuIik7CQkJLyogUHJldmVudCBwcm9tcHQtc3RvbXBpbmcgKi8KLSNlbmRpZiAvKiBERUNfVENQ SVAgKi8KLSAgICB4ID0genNoY21kKGxpbmUpOwotICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7Ci0g ICAgcmV0dXJuKHN1Y2Nlc3MgPSB4KTsKLX0KLSNlbmRpZiAvKiBOT1BVU0ggKi8KLSNlbmRpZiAv KiBUQ1BTT0NLRVQgKi8KLQotc3RhdGljIFZPSUQKLWRvZW5kKHgpIGludCB4OyB7Ci0jaWZuZGVm IE5PU1BMCi0gICAgLyogUG9wIGZyb20gYWxsIEZPUi9XSElMRS9YSUYvU1dJVENIJ3MgKi8KLSAg ICBkZWJ1ZyhGMTAxLCJkb2VuZCBtYWNsdmwgMSIsIiIsbWFjbHZsKTsKLSAgICB3aGlsZSAoKG1h Y2x2bCA+IDApICYmCi0JICAgKG1fYXJnW21hY2x2bC0xXVswXSkgJiYKLQkgICAoY21kc3RrW2Nt ZGx2bF0uc3JjID09IENNRF9NRCkgJiYKLQkgICAoIXN0cm5jbXAobV9hcmdbbWFjbHZsLTFdWzBd LCJfeGlmIiw0KSB8fAotCSAgICAhc3RybmNtcChtX2FyZ1ttYWNsdmwtMV1bMF0sIl9mb3IiLDQp IHx8Ci0JICAgICFzdHJuY21wKG1fYXJnW21hY2x2bC0xXVswXSwiX3doaSIsNCkgfHwKLQkgICAg IXN0cm5jbXAobV9hcmdbbWFjbHZsLTFdWzBdLCJfc3dpIiw0KSkpIHsKLQlkZWJ1ZyhGMTEwLCJF TkQgcG9wcGluZyIsbV9hcmdbbWFjbHZsLTFdWzBdLDApOwotCWRvZ3RhKFhYUFRBKTsJCQkvKiBQ dXQgYXJncyBiYWNrICovCi0JcG9wY2x2bCgpOwkJCS8qIFBvcCB1cCB0d28gbGV2ZWxzICovCi0J cG9wY2x2bCgpOwotCWRlYnVnKEYxMDEsImRvZW5kIG1hY2x2bCAyIiwiIixtYWNsdmwpOwotICAg IH0KLSAgICBpZiAobWFjbHZsID4gLTEpIHsKLQlpZiAobXJ2YWxbbWFjbHZsXSkJCS8qIEZyZWUg cHJldmlvdXMgcmV0dmFsIGlmIGFueSAqLwotCSAgZnJlZShtcnZhbFttYWNsdmxdKTsKLQltcnZh bFttYWNsdmxdID0gbWFsbG9jKDE2KTsJLyogUm9vbSBmb3IgdXAgdG8gMTUgZGlnaXRzICovCi0J aWYgKG1ydmFsW21hY2x2bF0pCQkvKiBSZWNvcmQgY3VycmVudCByZXR2YWwgKi8KLQkgIGNrbWFr bXNnKG1ydmFsW21hY2x2bF0sMTYsY2tpdG9hKHgpLE5VTEwsTlVMTCxOVUxMKTsKLSAgICB9Ci0j ZW5kaWYgLyogTk9TUEwgKi8KLSAgICBwb3BjbHZsKCk7CQkJCS8qIE5vdyBwb3Agb3V0IG9mIG1h Y3JvIG9yIFRBS0UgZmlsZSAqLwotI2lmbmRlZiBOT1NQTAotI2lmZGVmIERFQlVHCi0gICAgaWYg KGRlYmxvZykgewotCWRlYnVnKEYxMDEsIkVORCBtYWNsdmwgMyIsIiIsbWFjbHZsKTsKLQlkZWJ1 ZyhGMTExLCJFTkQgbXJ2YWxbbWFjbHZsXSIsbXJ2YWxbbWFjbHZsXSxtYWNsdmwpOwotCWRlYnVn KEYxMTEsIkVORCBtcnZhbFttYWNsdmwrMV0iLG1ydmFsW21hY2x2bCsxXSxtYWNsdmwrMSk7Ci0g ICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLX0KLQotI2lmZGVm IENLUk9PVAotaW50Ci1kb2Nocm9vdCgpIHsKLSAgICBpZiAoKHggPSBjbWRpcigiTmFtZSBvZiBu ZXcgcm9vdCBkaXJlY3RvcnkiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7Ci0JaWYgKHggPT0gLTMp IHsKLQkgICAgcHJpbnRmKCI/RGlyZWN0b3J5IG5hbWUgcmVxdWlyZWRcbiIpOwotCSAgICByZXR1 cm4oLTkpOwotCX0KLQlyZXR1cm4oeCk7Ci0gICAgfQotICAgIGNrc3RybmNweShsaW5lLHMsTElO QlVGU0laKTsKLSAgICBzID0gbGluZTsKLSAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVy bih4KTsKLSAgICBzID0gYnJzdHJpcChzKTsKLSAgICB4ID0genNldHJvb3Qocyk7Ci0gICAgaWYg KHggPCAwKSB7Ci0JY2hhciAqIG0gPSBOVUxMOwotCXN3aXRjaCAoeCkgewotCSAgY2FzZSAtMToK LQkgIGNhc2UgLTI6IG0gPSAiTm90IGEgZGlyZWN0b3J5IjsgYnJlYWs7Ci0JICBjYXNlIC0zOiBt ID0gIkludGVybmFsIGVycm9yIjsgYnJlYWs7Ci0JICBjYXNlIC00OiBtID0gIkFjY2VzcyBkZW5p ZWQiOyBicmVhazsKLQkgIGNhc2UgLTU6IG0gPSAiT2ZmIGxpbWl0cyI7IGJyZWFrOwotCX0KLQlp ZiAobSkgcHJpbnRmKCIlczogXCIlc1wiXG4iLCBtLCBzKTsKLQlyZXR1cm4obSA/IC05IDogLTIp OwotICAgIH0gZWxzZSB7Ci0Jbm9wdXNoID0gMTsKLQlyZXR1cm4oc3VjY2VzcyA9IDEpOwotICAg IH0KLX0KLSNlbmRpZiAvKiBDS1JPT1QgKi8KLQotI2lmbmRlZiBOT1hGRVIKLXN0YXRpYyBjaGFy ICogYXNuYnVmID0gTlVMTDsJCS8qIEFzLW5hbWUgYnVmZmVyIHBvaW50ZXIgKi8KLQotY2hhciBz bmR4bmFtW10gPSB7ICJfYXJyYXlfeF8iIH07CS8qICh3aXRoIHJlcGxhY2VhYmxlIHghKSAqLwot Ci0vKgotICBUaGUgbmV3IFNFTkQgY29tbWFuZCwgcmVwbGFjaW5nIEJTRU5ELCBDU0VORCwgUFNF TkQsIGV0YyBldGMuCi0gIENhbGwgd2l0aCBjeCA9IHRvcC1sZXZlbCBrZXl3b3JkIHZhbHVlLiAg UmV0dXJuczoKLSAgICA8IDAgIE9uIHBhcnNlIGVycm9yLgotICAgIDAgICAgT24gb3RoZXIgdHlw ZSBvZiBmYWlsdXJlIChlLmcuIHJlcXVlc3RlZCBvcGVyYXRpb24gbm90IGFsbG93ZWQpLgotICAg IDEgICAgT24gc3VjY2VzcyB3aXRoIHNzdGF0ZSBzZXQgdG8gJ3MnIHNvIHByb3RvY29sIHdpbGwg YmVnaW4uCi0qLwotCi0vKiAgRCBPIFggUyBFIE4gRCAgLS0gIFBhcnNlIFNFTkQgYW5kIHJlbGF0 ZWQgY29tbWFuZHMgd2l0aCBzd2l0Y2hlcyAgKi8KLQotaW50Ci1kb3hzZW5kKGN4KSBpbnQgY3g7 IHsKLSAgICBpbnQgYywgaSwgbiwgd2lsZCwgY29uZmlybWVkID0gMDsJLyogV29ya2VycyAqLwot ICAgIGludCB4LCB5OwkJCQkvKiBvZiB0aGUgd29ybGQuLi4gKi8KLSAgICBpbnQgZ2V0dmFsID0g MDsJCQkvKiBXaGV0aGVyIHRvIGdldCBzd2l0Y2ggdmFsdWUgKi8KLSAgICBleHRlcm4gY2hhciAq IHNuZF9tb3ZlOwkJLyogRGlyZWN0b3J5IHRvIG1vdmUgc2VudCBmaWxlcyB0byAqLwotICAgIGV4 dGVybiBjaGFyICogc25kX3JlbmFtZTsJCS8qIFdoYXQgdG8gcmVuYW1lIHNlbnQgZmlsZXMgdG8g Ki8KLSAgICBleHRlcm4gY2hhciAqIGZpbGVmaWxlOwkJLyogRmlsZSBjb250YWluaW5nIGZpbGVu YW1lcyB0byBzZW5kICovCi0gICAgZXh0ZXJuIGludCB4ZmlsZXR5cGU7CQkvKiBTZW5kIG9ubHkg dGV4dCAob3IgYmluYXJ5KSBmaWxlcyAqLwotICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiIHBhdGh0 YWJbXTsJLyogUEFUSE5BTUVTIG9wdGlvbiBrZXl3b3JkcyAqLwotICAgIGV4dGVybiBpbnQgbnBh dGh0YWI7CQkvKiBIb3cgbWFueSBvZiB0aGVtICovCi0gICAgZXh0ZXJuIGludCByZWN1cnNpdmU7 CQkvKiBSZWN1cnNpdmUgZGlyZWN0b3J5IHRyYXZlcnNhbCAqLwotICAgIGV4dGVybiBpbnQgcnBy aW50ZjsJCQkvKiBSRU1PVEUgUFJJTlQgZmxhZyAqLwotICAgIGV4dGVybiBpbnQgZmRpc3BsYTsJ CQkvKiBUUkFOU0ZFUiBESVNQTEFZIHNldHRpbmcgKi8KLSAgICBleHRlcm4gaW50IHNraXBidXA7 CQkJLyogU2tpcCBiYWNrdXAgZmlsZXMgd2hlbiBzZW5kaW5nICovCi0gICAgc3RydWN0IHN0cmlu Z2ludCBwdltTTkRfTUFYKzFdOwkvKiBUZW1wb3JhcnkgYXJyYXkgZm9yIHN3aXRjaCB2YWx1ZXMg Ki8KLSAgICBzdHJ1Y3QgRkRCIHNmLCBzdywgZmwsIGNtOwkJLyogRkRCcyBmb3IgZWFjaCBwYXJz ZSBmdW5jdGlvbiAqLwotICAgIGludCBtbGlzdCA9IDA7CQkJLyogRmxhZyBmb3IgTVNFTkQgb3Ig TU1PVkUgKi8KLSAgICBjaGFyICogbTsJCQkJLyogRm9yIG1ha2luZyBoZWxwIG1lc3NhZ2VzICov Ci0gICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgcHJvdG9zW107CS8qIEZpbGUgdHJhbnNmZXIgcHJv dG9jb2xzICovCi0gICAgZXh0ZXJuIGludCB4ZnJ4bGEsIGdfeGZyeGxhLCBucHJvdG9zOwotICAg IGV4dGVybiBjaGFyIHNuZGJlZm9yZVtdLCBzbmRhZnRlcltdLCAqc25kZXhjZXB0W107IC8qIFNl bGVjdGlvbiBjcml0ZXJpYSAqLwotICAgIGV4dGVybiBjaGFyIHNuZG5iZWZvcmVbXSwgc25kbmFm dGVyW107Ci0gICAgZXh0ZXJuIENLX09GRl9UIHNuZHNtYWxsZXIsIHNuZGxhcmdlciwgY2FsaWJy YXRlOwotI2lmbmRlZiBOT1NQTAotICAgIGludCByYW5nZVsyXTsJCQkvKiBBcnJheSByYW5nZSAq LwotICAgIGNoYXIgKiogYXAgPSBOVUxMOwkJCS8qIEFycmF5IHBvaW50ZXIgKi8KLSAgICBpbnQg YXJyYXl4ID0gLTE7CQkJLyogQXJyYXkgaW5kZXggKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0j aWZkZWYgTkVXRlRQCi0gICAgaWYgKChmdHBnZXQgPT0gMSkgfHwgKChmdHBnZXQgPT0gMikgJiYg ZnRwaXNvcGVuKCkpKSB7Ci0JaWYgKGN4ID09IFhYTUFJKSB7Ci0JICAgIHByaW50ZigiP1NvcnJ5 LCBObyBNQUlMIHdpdGggRlRQXG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0JcmV0dXJuKGRv ZnRwcHV0KGN4LDApKTsKLSAgICB9Ci0jZW5kaWYgLyogTkVXRlRQICovCi0KLSAgICBmb3IgKGkg PSAwOyBpIDw9IFNORF9NQVg7IGkrKykgewkvKiBJbml0aWFsaXplIHN3aXRjaCB2YWx1ZXMgKi8K LQlwdltpXS5zdmFsID0gTlVMTDsJCS8qIHRvIG51bGwgcG9pbnRlcnMgKi8KLQlwdltpXS5pdmFs ID0gLTE7CQkvKiBhbmQgLTEgaW50IHZhbHVlcyAqLwotCXB2W2ldLnd2YWwgPSAoQ0tfT0ZGX1Qp LTE7CS8qIGFuZCAtMSB3aWRlIHZhbHVlcyAqLwotICAgIH0KLSNpZm5kZWYgTk9TUEwKLSAgICBy YW5nZVswXSA9IC0xOwotICAgIHJhbmdlWzFdID0gLTE7Ci0gICAgc25keGluID0gLTE7CQkJLyog QXJyYXkgaW5kZXggKi8KLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgIHNuZGFycmF5ID0gTlVMTDsJ CQkvKiBBcnJheSBwb2ludGVyICovCi0KLSNpZmRlZiBVTklYT1JPU0sKLSAgICBnX21hdGNoZG90 ID0gbWF0Y2hkb3Q7CQkvKiBNYXRjaCBkb3QgZmlsZXMgKi8KLSNlbmRpZiAvKiBVTklYT1JPU0sg Ki8KLSAgICBnX3JlY3Vyc2l2ZSA9IHJlY3Vyc2l2ZTsJCS8qIFJlY3Vyc2l2ZSBzZW5kaW5nICov Ci0gICAgcmVjdXJzaXZlID0gMDsJCQkvKiBTYXZlIGdsb2JhbCB2YWx1ZSwgc2V0IGxvY2FsICov Ci0gICAgZGVidWcoRjEwMSwieHNlbmQgZW50cnkgZm5jbnYiLCIiLGZuY252KTsKLQotICAgIC8q IFByZXNldCBzd2l0Y2ggdmFsdWVzIGJhc2VkIG9uIHRvcC1sZXZlbCBjb21tYW5kIHRoYXQgY2Fs bGVkIHVzICovCi0KLSAgICBzd2l0Y2ggKGN4KSB7Ci0gICAgICBjYXNlIFhYTVNFOgkJCS8qIE1T RU5EICovCi0JbWxpc3QgPSAxOyBicmVhazsKLSAgICAgIGNhc2UgWFhDU0VOOgkJCS8qIENTRU5E ICovCi0JcHZbU05EX0NNRF0uaXZhbCA9IDE7IGJyZWFrOwotICAgICAgY2FzZSBYWE1NT1ZFOgkJ CS8qIE1NT1ZFICovCi0JbWxpc3QgPSAxOwotICAgICAgY2FzZSBYWE1PVkU6CQkJLyogTU9WRSAq LwotCXB2W1NORF9ERUxdLml2YWwgPSAxOyBicmVhazsKLSAgICAgIGNhc2UgWFhSU0VOOgkJCS8q IFJFU0VORCAqLwotCXB2W1NORF9CSU5dLml2YWwgPSAxOwkJLyogSW1wbGllcyAvQklOQVJZICov Ci0JcHZbU05EX1JFU10uaXZhbCA9IDE7IGJyZWFrOwotICAgICAgY2FzZSBYWE1BSToJCQkvKiBN QUlMICovCi0JcHZbU05EX01BSV0uaXZhbCA9IDE7IGJyZWFrOwotICAgIH0KLQotICAgIC8qIFNl dCB1cCBjaGFpbmVkIHBhcnNlIGZ1bmN0aW9ucy4uLiAqLwotCi0gICAgY21mZGJpKCZzdywJCQkJ LyogRmlyc3QgRkRCIC0gY29tbWFuZCBzd2l0Y2hlcyAqLwotCSAgIF9DTUtFWSwJCQkvKiBmY29k ZSAqLwotCSAgICJGaWxlbmFtZSwgb3Igc3dpdGNoIiwJLyogaGxwbXNnICovCi0JICAgIiIsCQkJ CS8qIGRlZmF1bHQgKi8KLQkgICAiIiwJCQkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLSNpZmRl ZiBOT01TRU5ECi0JICAgbnNuZHRhYiwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNp emUgKi8KLSNlbHNlCi0JICAgbWxpc3QgPyBubXNuZHRhYiA6IG5zbmR0YWIsCS8qIGFkZHRsIG51 bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLwotI2VuZGlmIC8qIE5PTVNFTkQgKi8KLQkgICA0LAkJ CQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICovCi0JICAgeHhzdHJpbmcsCQkJ LyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotI2lmZGVmIE5PTVNFTkQKLQkgICBzbmR0YWIsCQkJ LyogS2V5d29yZCB0YWJsZSAqLwotI2Vsc2UKLQkgICBtbGlzdCA/IG1zbmR0YWIgOiBzbmR0YWIs Ci0jZW5kaWYgLyogTk9NU0VORCAqLwotCSAgICZzZgkJCQkvKiBQb2ludGVyIHRvIG5leHQgRkRC ICovCi0JICAgKTsKLSAgICBjbWZkYmkoJnNmLAkJCQkvKiAybmQgRkRCIC0gZmlsZSB0byBzZW5k ICovCi0JICAgX0NNSUZJLAkJCS8qIGZjb2RlICovCi0JICAgIkZpbGUocykgdG8gc2VuZCIsCQkv KiBobHBtc2cgKi8KLQkgICAiIiwJCQkJLyogZGVmYXVsdCAqLwotCSAgICIiLAkJCQkvKiBhZGR0 bCBzdHJpbmcgZGF0YSAqLwotCSAgIG5vbGlua3MsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEg Ki8KLQkgICAwLAkJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLwotCSAgIHh4c3RyaW5nLAot CSAgIE5VTEwsCi0JICAgbWxpc3QgPyAmY20gOiAmZmwKLQkgICApOwotICAgIGNtZmRiaSgmZmws CQkJCS8qIDNyZCBGREIgLSBjb21tYW5kIHRvIHNlbmQgZnJvbSAqLwotCSAgIF9DTUZMRCwJCQkv KiBmY29kZSAqLwotCSAgICJDb21tYW5kIiwJCQkvKiBobHBtc2cgKi8KLQkgICAiIiwJCQkJLyog ZGVmYXVsdCAqLwotCSAgICIiLAkJCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotCSAgIDAsCQkJ CS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCi0JICAgMCwJCQkJLyogYWRkdGwgbnVtZXJpYyBk YXRhIDIgKi8KLQkgICB4eHN0cmluZywKLQkgICBOVUxMLAotCSAgICZjbQotCSAgICk7Ci0gICAg Y21mZGJpKCZjbSwJCQkJLyogNHRoIEZEQiAtIENvbmZpcm1hdGlvbiAqLwotCSAgIF9DTUNGTSwJ CQkvKiBmY29kZSAqLwotCSAgICIiLAkJCQkvKiBobHBtc2cgKi8KLQkgICAiIiwJCQkJLyogZGVm YXVsdCAqLwotCSAgICIiLAkJCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotCSAgIDAsCQkJCS8q IGFkZHRsIG51bWVyaWMgZGF0YSAxICovCi0JICAgMCwJCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRh IDIgKi8KLQkgICBOVUxMLAotCSAgIE5VTEwsCi0JICAgTlVMTAotCSAgICk7Ci0KLSAgICB3aGls ZSAoMSkgewkJCQkvKiBQYXJzZSAwIG9yIG1vcmUgc3dpdGNoZXMgKi8KLQl4ID0gY21mZGIoJnN3 KTsJCQkvKiBQYXJzZSBzb21ldGhpbmcgKi8KLQlkZWJ1ZyhGMTAxLCJ4c2VuZCBjbWZkYiIsIiIs eCk7Ci0JaWYgKHggPCAwKQkJCS8qIEVycm9yICovCi0JICBnb3RvIHhzZW5keDsJCQkvKiBvciBy ZXBhcnNlIG5lZWRlZCAqLwotCWlmIChjbXJlc3VsdC5mY29kZSAhPSBfQ01LRVkpCS8qIEJyZWFr IG91dCBpZiBub3QgYSBzd2l0Y2ggKi8KLQkgIGJyZWFrOwotLyoKLSAgVGhleSBnYXZlIGEgc3dp dGNoLCBidXQgbGV0J3Mgc2VlIGhvdyB0aGV5IHRlcm1pbmF0ZWQgaXQuCi0gIElmIHRoZXkgZW5k ZWQgaXQgd2l0aCA6IG9yID0sIHRoZW4gd2UgbXVzdCBwYXJzZSBhIHZhbHVlLgotICBJZiB0aGV5 IGVuZGVkIGl0IHdpdGggYW55dGhpbmcgZWxzZSwgdGhlbiB3ZSBtdXN0IE5PVCBwYXJzZSBhIHZh bHVlLgotKi8KLQljID0gY21nYnJrKCk7CQkJLyogR2V0IGJyZWFrIGNoYXJhY3RlciAqLwotCWdl dHZhbCA9IChjID09ICc6JyB8fCBjID09ICc9Jyk7IC8qIHRvIHNlZSBob3cgdGhleSBlbmRlZCB0 aGUgc3dpdGNoICovCi0JaWYgKGdldHZhbCAmJiAhKGNtcmVzdWx0LmtmbGFncyAmIENNX0FSRykp IHsKLQkgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBhcmd1bWVudHNcbiIp OwotCSAgICB4ID0gLTk7Ci0JICAgIGdvdG8geHNlbmR4OwotCX0KLQlpZiAoIWdldHZhbCAmJiAo Y21na3dmbGdzKCkgJiBDTV9BUkcpKSB7Ci0JICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIHJlcXVp cmVzIGFuIGFyZ3VtZW50XG4iKTsKLQkgICAgeCA9IC05OwotCSAgICBnb3RvIHhzZW5keDsKLQl9 Ci0JbiA9IGNtcmVzdWx0Lm5yZXN1bHQ7CQkvKiBOdW1lcmljIHJlc3VsdCA9IHN3aXRjaCB2YWx1 ZSAqLwotCWRlYnVnKEYxMDEsInhzZW5kIHN3aXRjaCIsIiIsbik7Ci0KLQlzd2l0Y2ggKG4pIHsJ CQkvKiBQcm9jZXNzIHRoZSBzd2l0Y2ggKi8KLQkgIGNhc2UgU05EX0NNRDoJCQkvKiBUaGVzZSB0 YWtlIG5vIGFyZ3MgKi8KLQkgICAgaWYgKG5vcHVzaCkgewotCQlwcmludGYoIj9Tb3JyeSwgc3lz dGVtIGNvbW1hbmQgYWNjZXNzIGlzIGRpc2FibGVkXG4iKTsKLQkJeCA9IC05OwotCQlnb3RvIHhz ZW5keDsKLQkgICAgfQotI2lmZGVmIFBJUEVTRU5ECi0JICAgIGVsc2UgaWYgKHNuZGZpbHRlcikg ewotCQlwcmludGYoCi0iP1NvcnJ5LCBubyBTRU5EIC9DT01NQU5EIG9yIENTRU5EIHdoZW4gU0VO RCBGSUxURVIgc2VsZWN0ZWRcbiIpOwotCQl4ID0gLTk7Ci0JCWdvdG8geHNlbmR4OwotCSAgICB9 Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLQkgICAgc3cuaGxwbXNnID0gIkNvbW1hbmQsIG9yIHN3 aXRjaCI7IC8qIENoYW5nZSBoZWxwIG1lc3NhZ2UgKi8KLQkgICAgcHZbbl0uaXZhbCA9IDE7CQkv KiBKdXN0IHNldCB0aGUgZmxhZyAqLwotCSAgICBwdltTTkRfQVJSXS5pdmFsID0gMDsKLQkgICAg YnJlYWs7Ci0KLQkgIGNhc2UgU05EX1JFQzoJCQkvKiAvUkVDVVJTSVZFICovCi0JICAgIHJlY3Vy c2l2ZSA9IDI7CQkvKiBTZXQgdGhlIHJlYWwgdmFyaWFibGUgKi8KLQkgICAgcHZbU05EX1BUSF0u aXZhbCA9IFBBVEhfUkVMOyAvKiBHaXZlIHRoZW0gcmVsYXRpdmUgcGF0aG5hbWVzICovCi0JICAg IHB2W25dLml2YWwgPSAxOwkJLyogSnVzdCBzZXQgdGhlIGZsYWcgKi8KLQkgICAgYnJlYWs7Ci0K LQkgIGNhc2UgU05EX1JFUzoJCQkvKiAvUkVDT1ZFUiAocmVzZW5kKSAqLwotCSAgICBwdltTTkRf QVJSXS5pdmFsID0gMDsKLQkgICAgcHZbU05EX0JJTl0uaXZhbCA9IDE7CS8qIEltcGxpZXMgL0JJ TkFSWSAqLwotCSAgY2FzZSBTTkRfTk9COgkJCS8qIC9OT0JBQ0tVUCAqLwotCSAgY2FzZSBTTkRf REVMOgkJCS8qIC9ERUxFVEUgKi8KLQkgIGNhc2UgU05EX1NISDoJCQkvKiAvUVVJRVQgKi8KLQkg ICAgcHZbbl0uaXZhbCA9IDE7CQkvKiBKdXN0IHNldCB0aGUgZmxhZyAqLwotCSAgICBicmVhazsK LQotI2lmZGVmIFVOSVhPUk9TSwotLyogTGlrZSByZWN1cnNpdmUsIHRoZXNlIGFyZSBzZXQgaW1t ZWRpYXRlbHkgYmVjYXVzZSB0aGV5IGFmZmVjdCBjbWlmaSgpICovCi0JICBjYXNlIFNORF9ET1Q6 CQkJLyogL0RPVEZJTEVTICovCi0JICAgIG1hdGNoZG90ID0gMTsKLQkgICAgYnJlYWs7Ci0JICBj YXNlIFNORF9OT0Q6CQkJLyogL05PRE9URklMRVMgKi8KLQkgICAgbWF0Y2hkb3QgPSAwOwotCSAg ICBicmVhazsKLSNlbmRpZiAvKiBVTklYT1JPU0sgKi8KLQotCSAgLyogRmlsZSB0cmFuc2ZlciBt b2RlcyAtIGVhY2ggdW5kb2VzIHRoZSBvdGhlcnMgKi8KLQotCSAgY2FzZSBTTkRfQklOOgkJCS8q IEJpbmFyeSAqLwotCSAgY2FzZSBTTkRfVFhUOgkJCS8qIFRleHQgKi8KLQkgIGNhc2UgU05EX0lN RzoJCQkvKiBJbWFnZSAqLwotCSAgY2FzZSBTTkRfTEJMOgkJCS8qIExhYmVsZWQgKi8KLQkgICAg cHZbU05EX0JJTl0uaXZhbCA9IDA7Ci0JICAgIHB2W1NORF9UWFRdLml2YWwgPSAwOwotCSAgICBw dltTTkRfSU1HXS5pdmFsID0gMDsKLQkgICAgcHZbU05EX0xCTF0uaXZhbCA9IDA7Ci0JICAgIHB2 W25dLml2YWwgPSAxOwotCSAgICBicmVhazsKLQotI2lmZGVmIENLU1lNTElOSwotCSAgY2FzZSBT TkRfTE5LOgotCSAgY2FzZSBTTkRfTkxLOgotCSAgICBub2xpbmtzID0gKG4gPT0gU05EX05MSykg PyAyIDogMDsKLQkgICAgY21mZGJpKCZzZiwJCQkvKiBSZWRvIGNtaWZpKCkgKi8KLQkJICAgX0NN SUZJLAkJLyogZmNvZGUgKi8KLQkJICAgIkZpbGUocykgdG8gc2VuZCIsCS8qIGhscG1zZyAqLwot CQkgICAiIiwJCQkvKiBkZWZhdWx0ICovCi0JCSAgICIiLAkJCS8qIGFkZHRsIHN0cmluZyBkYXRh ICovCi0JCSAgIG5vbGlua3MsCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLwotCQkgICAwLAkJ CS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCi0JCSAgIHh4c3RyaW5nLAotCQkgICBOVUxMLAot CQkgICBtbGlzdCA/ICZjbSA6ICZmbAotCQkgICApOwotCSAgICBicmVhazsKLSNlbmRpZiAvKiBD S1NZTUxJTksgKi8KLQotCSAgY2FzZSBTTkRfRVhDOgkJCS8qIEV4Y2x1ZGVzICovCi0JICAgIGlm ICghZ2V0dmFsKSBicmVhazsKLQkgICAgaWYgKCh4ID0gY21mbGQoIlBhdHRlcm4iLCIiLCZzLHh4 c3RyaW5nKSkgPCAwKSB7Ci0JCWlmICh4ID09IC0zKSB7Ci0JCSAgICBwcmludGYoIj9QYXR0ZXJu IHJlcXVpcmVkXG4iKTsKLQkJICAgIHggPSAtOTsKLQkJfQotCQlnb3RvIHhzZW5keDsKLQkgICAg fQotCSAgICBpZiAocHZbbl0uc3ZhbCkgZnJlZShwdltuXS5zdmFsKTsKLQkgICAgeSA9IHN0cmxl bihzKTsKLQkgICAgaWYgKHkgPiAyNTYpIHsKLQkJcHJpbnRmKCI/UGF0dGVybiB0b28gbG9uZyAt IDI1NiBtYXhcbiIpOwotCQl4ID0gLTk7Ci0JCWdvdG8geHNlbmR4OwotCSAgICB9Ci0JICAgIHB2 W25dLnN2YWwgPSBtYWxsb2MoeSsxKTsKLQkgICAgaWYgKHB2W25dLnN2YWwpIHsKLQkJc3RyY3B5 KHB2W25dLnN2YWwscyk7CS8qIHNhZmUgKi8KLQkJcHZbbl0uaXZhbCA9IDE7Ci0JICAgIH0KLQkg ICAgYnJlYWs7Ci0KLQkgIGNhc2UgU05EX01PVjoJCQkvKiBNT1ZFIGFmdGVyICovCi0JICBjYXNl IFNORF9SRU46CQkJLyogUkVOQU1FIGFmdGVyICovCi0JICAgIGlmICghZ2V0dmFsKSBicmVhazsK LQkgICAgaWYgKCh4ID0gY21mbGQobiA9PSBTTkRfTU9WID8KLQkgICAiZGV2aWNlIGFuZC9vciBk aXJlY3RvcnkgZm9yIHNvdXJjZSBmaWxlIGFmdGVyIHNlbmRpbmciIDoKLQkgICAibmV3IG5hbWUg Zm9yIHNvdXJjZSBmaWxlIGFmdGVyIHNlbmRpbmciLAotCQkJICAgIiIsCi0JCQkgICAmcywKLQkJ CSAgIG4gPT0gU05EX01PViA/IHh4c3RyaW5nIDogTlVMTAotCQkJICAgKSkgPCAwKSB7Ci0JCWlm ICh4ID09IC0zKSB7Ci0JCSAgICBwcmludGYoIiVzXG4iLCBuID09IFNORF9NT1YgPwotCQkJICAg Ij9EZXN0aW5hdGlvbiByZXF1aXJlZCIgOgotCQkJICAgIj9OZXcgbmFtZSByZXF1aXJlZCIKLQkJ CSAgICk7Ci0JCSAgICB4ID0gLTk7Ci0JCX0KLQkJZ290byB4c2VuZHg7Ci0JICAgIH0KLQkgICAg aWYgKHB2W25dLnN2YWwpIGZyZWUocHZbbl0uc3ZhbCk7Ci0JICAgIHMgPSBicnN0cmlwKHMpOwot CSAgICB5ID0gc3RybGVuKHMpOwotCSAgICBpZiAoeSA+IDApIHsKLQkJcHZbbl0uc3ZhbCA9IG1h bGxvYyh5KzEpOwotCQlpZiAocHZbbl0uc3ZhbCkgewotCQkgICAgc3RyY3B5KHB2W25dLnN2YWws cyk7IC8qIHNhZmUgKi8KLQkJICAgIHB2W25dLml2YWwgPSAxOwotCQl9Ci0JICAgIH0KLQkgICAg YnJlYWs7Ci0KLQkgIGNhc2UgU05EX1NNQToJCQkvKiBTbWFsbGVyIC8gbGFyZ2VyIHRoYW4gKi8K LQkgIGNhc2UgU05EX0xBUjogewotCSAgICAgIENLX09GRl9UIHc7Ci0JICAgICAgaWYgKCFnZXR2 YWwpIGJyZWFrOwotCSAgICAgIGlmICgoeCA9IGNtbnVtdygiU2l6ZSBpbiBieXRlcyIsIjAiLDEw LCZ3LHh4c3RyaW5nKSkgPCAwKQotCQlnb3RvIHhzZW5keDsKLQkgICAgICBwdltuXS53dmFsID0g dzsKLQkgICAgICBicmVhazsKLQkgIH0KLQkgIGNhc2UgU05EX0FGVDoJCQkvKiBTZW5kIC9BRlRF UjpkYXRlLXRpbWUgKi8KLQkgIGNhc2UgU05EX0JFRjoJCQkvKiBTZW5kIC9CRUZPUkU6ZGF0ZS10 aW1lICovCi0JICBjYXNlIFNORF9OQUY6CQkJLyogU2VuZCAvTk9ULUFGVEVSOmRhdGUtdGltZSAq LwotCSAgY2FzZSBTTkRfTkJFOgkJCS8qIFNlbmQgL05PVC1CRUZPUkU6ZGF0ZS10aW1lICovCi0J ICAgIGlmICghZ2V0dmFsKSBicmVhazsKLQkgICAgaWYgKCh4ID0gY21kYXRlKCJGaWxlIGRhdGUt dGltZSIsIiIsJnMsMCx4eHN0cmluZykpIDwgMCkgewotCQlpZiAoeCA9PSAtMykgewotCQkgICAg cHJpbnRmKCI/RGF0ZS10aW1lIHJlcXVpcmVkXG4iKTsKLQkJICAgIHggPSAtOTsKLQkJfQotCQln b3RvIHhzZW5keDsKLQkgICAgfQotCSAgICBpZiAocHZbbl0uc3ZhbCkgZnJlZShwdltuXS5zdmFs KTsKLQkgICAgcHZbbl0uc3ZhbCA9IG1hbGxvYygoaW50KXN0cmxlbihzKSsxKTsKLQkgICAgaWYg KHB2W25dLnN2YWwpIHsKLQkJc3RyY3B5KHB2W25dLnN2YWwscyk7CS8qIHNhZmUgKi8KLQkJcHZb bl0uaXZhbCA9IDE7Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0KLQkgIGNhc2UgU05EX01BSToJCQkv KiBTZW5kIGFzIG1haWwgKD0gTUFJTCkgKi8KLSNpZmRlZiBJS1NECi0JICAgIGlmIChpbnNlcnZl ciAmJiAhRU5BQkxFRChlbl9tYWkpKSB7Ci0JCXByaW50ZigiP1NvcnJ5LCBzZW5kaW5nIGZpbGVz IGFzIG1haWwgaXMgZGlzYWJsZWRcbiIpOwotCQlyZXR1cm4oLTkpOwotCSAgICB9Ci0jZW5kaWYg LyogSUtTRCAqLwotCSAgICBwdltuXS5pdmFsID0gMTsKLQkgICAgaWYgKCFnZXR2YWwpIGJyZWFr OwotCSAgICBpZiAoKHggPSBjbWZsZCgiZS1tYWlsIGFkZHJlc3MiLCIiLCZzLHh4c3RyaW5nKSkg PCAwKSB7Ci0JCWlmICh4ID09IC0zKSB7Ci0JCSAgICBwcmludGYoIj9hZGRyZXNzIHJlcXVpcmVk XG4iKTsKLQkJICAgIHggPSAtOTsKLQkJfQotCQlnb3RvIHhzZW5keDsKLQkgICAgfQotCSAgICBz ID0gYnJzdHJpcChzKTsKLQkgICAgaWYgKHB2W25dLnN2YWwpIGZyZWUocHZbbl0uc3ZhbCk7Ci0J ICAgIHB2W25dLnN2YWwgPSBtYWxsb2MoKGludClzdHJsZW4ocykrMSk7Ci0JICAgIGlmIChwdltu XS5zdmFsKQotCSAgICAgIHN0cmNweShwdltuXS5zdmFsLHMpOwkvKiBzYWZlICovCi0JICAgIGJy ZWFrOwotCi0JICBjYXNlIFNORF9QUkk6CQkJLyogU2VuZCB0byBiZSBwcmludGVkIChSRU1PVEUg UFJJTlQpICovCi0jaWZkZWYgSUtTRAotCSAgICBpZiAoaW5zZXJ2ZXIgJiYgIUVOQUJMRUQoZW5f bWFpKSkgewotCQlwcmludGYoIj9Tb3JyeSwgc2VuZGluZyBmaWxlcyBmb3IgcHJpbnRpbmcgaXMg ZGlzYWJsZWRcbiIpOwotCQlyZXR1cm4oLTkpOwotCSAgICB9Ci0jZW5kaWYgLyogSUtTRCAqLwot CSAgICBwdltuXS5pdmFsID0gMTsKLQkgICAgaWYgKCFnZXR2YWwpIGJyZWFrOwotCSAgICBpZiAo KHggPSBjbWZsZCgiUHJpbnQgb3B0aW9ucyIsIiIsJnMseHhzdHJpbmcpKSA8IDApCi0JICAgICAg aWYgKHggIT0gLTMpIGdvdG8geHNlbmR4OwotCSAgICBzID0gYnJzdHJpcChzKTsKLQkgICAgaWYg KHB2W25dLnN2YWwpIGZyZWUocHZbbl0uc3ZhbCk7Ci0JICAgIHB2W25dLnN2YWwgPSBtYWxsb2Mo KGludClzdHJsZW4ocykrMSk7Ci0JICAgIGlmIChwdltuXS5zdmFsKQotCSAgICAgIHN0cmNweShw dltuXS5zdmFsLHMpOwkvKiBzYWZlICovCi0JICAgIGJyZWFrOwotCi0JICBjYXNlIFNORF9BU046 CQkJLyogQXMtbmFtZSAqLwotCSAgICBkZWJ1ZyhGMTAxLCJ4c2VuZCAvYXMtbmFtZSBnZXR2YWwi LCIiLGdldHZhbCk7Ci0JICAgIGlmICghZ2V0dmFsKSBicmVhazsKLQkgICAgaWYgKCh4ID0gY21m bGQoIk5hbWUgdG8gc2VuZCB1bmRlciIsIiIsJnMsTlVMTCkpIDwgMCkgewotCQlpZiAoeCA9PSAt MykgewotCQkgICAgcHJpbnRmKCI/bmFtZSByZXF1aXJlZFxuIik7Ci0JCSAgICB4ID0gLTk7Ci0J CX0KLQkJZ290byB4c2VuZHg7Ci0JICAgIH0KLQkgICAgcyA9IGJyc3RyaXAocyk7Ci0JICAgIGlm ICgoeSA9IHN0cmxlbihzKSkgPiAwKSB7Ci0JCWlmIChwdltuXS5zdmFsKSBmcmVlKHB2W25dLnN2 YWwpOwotCQlwdltuXS5zdmFsID0gbWFsbG9jKHkrMSk7Ci0JCWlmIChwdltuXS5zdmFsKSB7Ci0J CSAgICBzdHJjcHkocHZbbl0uc3ZhbCxzKTsgLyogc2FmZSAqLwotCQkgICAgcHZbbl0uaXZhbCA9 IDE7Ci0JCX0KLQkgICAgfQotCSAgICBicmVhazsKLQotCSAgY2FzZSBTTkRfU1RBOiB7CQkvKiBT dGFydGluZyBwb3NpdGlvbiAoPSBQU0VORCkgKi8KLQkgICAgICBDS19PRkZfVCB3OwotCSAgICAg IGlmICghZ2V0dmFsKSBicmVhazsKLQkgICAgICBpZiAoKHggPSBjbW51bXcoIjAtYmFzZWQgcG9z aXRpb24iLCIwIiwxMCwmdyx4eHN0cmluZykpIDwgMCkKLQkJZ290byB4c2VuZHg7Ci0JICAgICAg cHZbbl0ud3ZhbCA9IHc7Ci0JICAgICAgYnJlYWs7Ci0JICB9Ci0JICBjYXNlIFNORF9QUk86CQkJ LyogUHJvdG9jb2wgdG8gdXNlICovCi0JICAgIGlmICghZ2V0dmFsKSBicmVhazsKLQkgICAgaWYg KCh4ID0gY21rZXkocHJvdG9zLG5wcm90b3MsIkZpbGUtdHJhbnNmZXIgcHJvdG9jb2wiLCIiLAot CQkJICAgeHhzdHJpbmcpKSA8IDApIHsKLQkJaWYgKHggPT0gLTMpIHsKLQkJICAgIHByaW50Zigi P25hbWUgb2YgcHJvdG9jb2wgcmVxdWlyZWRcbiIpOwotCQkgICAgeCA9IC05OwotCQl9Ci0JCWdv dG8geHNlbmR4OwotCSAgICB9Ci0JICAgIHB2W25dLml2YWwgPSB4OwotCSAgICBicmVhazsKLQot I2lmZGVmIFBJUEVTRU5ECi0JICBjYXNlIFNORF9GTFQ6CQkJLyogRmlsdGVyICovCi0JICAgIGRl YnVnKEYxMDEsInhzZW5kIC9maWx0ZXIgZ2V0dmFsIiwiIixnZXR2YWwpOwotCSAgICBpZiAoIWdl dHZhbCkgYnJlYWs7Ci0JICAgIGlmICgoeCA9IGNtZmxkKCJGaWx0ZXIgcHJvZ3JhbSB0byBzZW5k IHRocm91Z2giLCIiLCZzLE5VTEwpKSA8IDApIHsKLQkJaWYgKHggPT0gLTMpCi0JCSAgcyA9ICIi OwotCQllbHNlCi0JCSAgZ290byB4c2VuZHg7Ci0JICAgIH0KLQkgICAgaWYgKCpzKSBzID0gYnJz dHJpcChzKTsKLQkgICAgeSA9IHN0cmxlbihzKTsKLQkgICAgZm9yICh4ID0gMDsgeCA8IHk7IHgr KykgewkvKiBNYWtlIHN1cmUgdGhleSBpbmNsdWRlZCAiXHYoLi4uKSIgKi8KLQkJaWYgKHNbeF0g IT0gJ1xcJykgY29udGludWU7Ci0JCWlmIChzW3grMV0gPT0gJ3YnKSBicmVhazsKLQkgICAgfQot CSAgICBpZiAoeCA9PSB5KSB7Ci0JCXByaW50ZigKLQkJIj9GaWx0ZXIgbXVzdCBjb250YWluIGEg cmVwbGFjZW1lbnQgdmFyaWFibGUgZm9yIGZpbGVuYW1lLlxuIgotCQkgICAgICAgKTsKLQkJeCA9 IC05OwotCQlnb3RvIHhzZW5keDsKLQkgICAgfQotCSAgICBwdltuXS5pdmFsID0gMTsKLQkgICAg aWYgKHB2W25dLnN2YWwpIHsKLQkJZnJlZShwdltuXS5zdmFsKTsKLQkJcHZbbl0uc3ZhbCA9IE5V TEw7Ci0JICAgIH0KLQkgICAgaWYgKCh5ID0gc3RybGVuKHMpKSA+IDApIHsKLQkJaWYgKChwdltu XS5zdmFsID0gbWFsbG9jKHkrMSkpKQotCQkgIHN0cmNweShwdltuXS5zdmFsLHMpOwkvKiBzYWZl ICovCi0JICAgIH0KLQkgICAgYnJlYWs7Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLQotCSAgY2Fz ZSBTTkRfUFRIOgkJCS8qIFBhdGhuYW1lcyAqLwotCSAgICBpZiAoIWdldHZhbCkgewotCQlwdltu XS5pdmFsID0gUEFUSF9SRUw7Ci0JCWJyZWFrOwotCSAgICB9Ci0JICAgIGlmICgoeCA9IGNta2V5 KHBhdGh0YWIsbnBhdGh0YWIsIiIsImFic29sdXRlIix4eHN0cmluZykpIDwgMCkKLQkgICAgICBn b3RvIHhzZW5keDsKLQkgICAgcHZbbl0uaXZhbCA9IHg7Ci0JICAgIGJyZWFrOwotCi0JICBjYXNl IFNORF9OQU06CQkJLyogRmlsZW5hbWVzICovCi0JICAgIGlmICghZ2V0dmFsKSBicmVhazsKLQkg ICAgaWYgKCh4ID0gY21rZXkoZm50YWIsbmZudGFiLCIiLCJjb252ZXJ0ZWQiLHh4c3RyaW5nKSkg PCAwKQotCSAgICAgIGdvdG8geHNlbmR4OwotCSAgICBkZWJ1ZyhGMTAxLCJ4c2VuZCAvZmlsZW5h bWVzIiwiIix4KTsKLQkgICAgcHZbbl0uaXZhbCA9IHg7Ci0JICAgIGJyZWFrOwotCi0jaWZkZWYg Q0FMSUJSQVRFCi0gICAgICAgICAgY2FzZSBTTkRfQ0FMOiB7CQkvKiAvQ0FMSUJSQVRFICovCi0J ICAgICAgQ0tfT0ZGX1QgdzsKLQkgICAgICBpZiAoZ2V0dmFsKSB7Ci0JCSAgaWYgKCh4ID0gY21u dW13KCJudW1iZXIgb2YgS2J5dGVzIHRvIHNlbmQiLAotCQkJCSAgIjEwMjQiLDEwLCZ3LHh4c3Ry aW5nKSkgPCAwKQotCQkgICAgZ290byB4c2VuZHg7Ci0JICAgICAgfSBlbHNlCi0JCXcgPSAoQ0tf T0ZGX1QpMTAyNDsKLQkgICAgICBwdltuXS53dmFsID0gdzsKLQkgICAgICBwdltTTkRfQVJSXS5p dmFsID0gMDsKLQkgICAgICBicmVhazsKLQkgIH0KLSNlbmRpZiAvKiBDQUxJQlJBVEUgKi8KLQot CSAgY2FzZSBTTkRfRklMOgkJCS8qIE5hbWUgb2YgZmlsZSBjb250YWluaW5nIGZpbG5hbWVzICov Ci0JICAgIGlmICghZ2V0dmFsKSBicmVhazsKLQkgICAgaWYgKCh4ID0gY21pZmkoIk5hbWUgb2Yg ZmlsZSBjb250YWluaW5nIGxpc3Qgb2YgZmlsZW5hbWVzIiwKLQkJCSAgICAgICAiIiwmcywmeSx4 eHN0cmluZykpIDwgMCkgewotCQlpZiAoeCA9PSAtMykgewotCQkgICAgcHJpbnRmKCI/RmlsZW5h bWUgcmVxdWlyZWRcbiIpOwotCQkgICAgeCA9IC05OwotCQl9Ci0JCWdvdG8geHNlbmR4OwotCSAg ICB9IGVsc2UgaWYgKHkpIHsKLQkJcHJpbnRmKCI/V2lsZGNhcmRzIG5vdCBhbGxvd2VkXG4iKTsK LQkJeCA9IC05OwotCQlnb3RvIHhzZW5keDsKLQkgICAgfQotCSAgICBpZiAocHZbbl0uc3ZhbCkK LQkgICAgICBmcmVlKHB2W25dLnN2YWwpOwotCSAgICBpZiAocykgaWYgKCpzKSB7Ci0JCWlmICgo cHZbbl0uc3ZhbCA9IG1hbGxvYygoaW50KXN0cmxlbihzKSsxKSkpIHsKLQkJICAgIHN0cmNweShw dltuXS5zdmFsLHMpOwotCQkgICAgcHZbbl0uaXZhbCA9IDE7Ci0JCSAgICBwdltTTkRfQVJSXS5p dmFsID0gMDsKLQkJfQotCSAgICB9Ci0JICAgIGJyZWFrOwotCi0jaWZuZGVmIE5PU1BMCi0JICBj YXNlIFNORF9BUlI6CQkJLyogU0VORCAvQVJSQVk6ICovCi0JICAgIGlmICghZ2V0dmFsKSBicmVh azsKLQkgICAgYXAgPSBOVUxMOwotCSAgICBpZiAoKHggPSBjbWZsZCgiQXJyYXkgbmFtZSAoYSBz aW5nbGUgbGV0dGVyIHdpbGwgZG8pIiwKLQkJCSAgICIiLAotCQkJICAgJnMsCi0JCQkgICBOVUxM Ci0JCQkgICApKSA8IDApIHsKLQkJaWYgKHggPT0gLTMpCi0JCSAgYnJlYWs7Ci0JCWVsc2UKLQkJ ICByZXR1cm4oeCk7Ci0JICAgIH0KLQkgICAgaWYgKCh4ID0gYXJyYXlib3VuZHMocywmKHJhbmdl WzBdKSwmKHJhbmdlWzFdKSkpIDwgMCkgewotCQlwcmludGYoIj9CYWQgYXJyYXk6ICVzXG4iLHMp OwotCQlyZXR1cm4oLTkpOwotCSAgICB9Ci0JICAgIGlmICghKGFwID0gYV9wdHJbeF0pKSB7Ci0J CXByaW50ZigiP05vIHN1Y2ggYXJyYXk6ICVzXG4iLHMpOwotCQlyZXR1cm4oLTkpOwotCSAgICB9 Ci0JICAgIHB2W25dLml2YWwgPSAxOwotCSAgICBwdltTTkRfQ01EXS5pdmFsID0gMDsJLyogVW5k byBhbnkgY29uZmxpY3Rpbmcgb25lcy4uLiAqLwotCSAgICBwdltTTkRfUkVTXS5pdmFsID0gMDsK LQkgICAgcHZbU05EX0NBTF0uaXZhbCA9IDA7Ci0JICAgIHB2W1NORF9GSUxdLml2YWwgPSAwOwot CSAgICBhcnJheXggPSB4OwotCSAgICBicmVhazsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0JICBj YXNlIFNORF9YUEE6CQkJLyogL1RSQU5TUEFSRU5UICovCi0JICAgIHB2W25dLml2YWwgPSAxOwot CSAgICBicmVhazsKLQotCSAgY2FzZSBTTkRfVFlQOgkJCS8qIE9ubHkgZmlsZXMgb2YgZ2l2ZW4g dHlwZSAqLwotCSAgICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0JICAgIGlmICgoeCA9IGNta2V5KHR4 dGJpbiwzLCIiLCJhbGwiLHh4c3RyaW5nKSkgPCAwKQotCSAgICAgIGdvdG8geHNlbmR4OwotCSAg ICBwdltuXS5pdmFsID0gKHggPT0gMikgPyAtMSA6IHg7Ci0JICAgIGJyZWFrOwotCi0JICBkZWZh dWx0OgotCSAgICBwcmludGYoIj9VbmV4cGVjdGVkIHN3aXRjaCB2YWx1ZSAtICVkXG4iLGNtcmVz dWx0Lm5yZXN1bHQpOwotCSAgICB4ID0gLTk7Ci0JICAgIGdvdG8geHNlbmR4OwotCX0KLSAgICB9 Ci0gICAgZGVidWcoRjEwMSwieHNlbmQgY21yZXN1bHQgZmNvZGUiLCIiLGNtcmVzdWx0LmZjb2Rl KTsKLQotI2lmZGVmIENPTU1FTlQKLSAgICAvKiBMaXN0IHN3aXRjaCBwYXJzaW5nIHJlc3VsdHMg aW4gZGVidWcgbG9nICovCi0gICAgZm9yIChpID0gMDsgaSA8PSBTTkRfTUFYOyBpKyspIHsKLQlj a21ha21zZyhsaW5lLExJTkJVRlNJWiwieHNlbmQgc3dpdGNoICIsY2tpdG9hKGkpLE5VTEwsTlVM TCk7Ci0JZGVidWcoRjExMSxsaW5lLCBwdltpXS5zdmFsLCBwdltpXS5pdmFsKTsKLSAgICB9Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotCi0vKiBOb3cgd2UgaGF2ZSBhbGwgc3dpdGNoZXMsIHBsdXMg bWF5YmUgYSBmaWxlbmFtZSBvciBjb21tYW5kLCBvciBub3RoaW5nICovCi0KLSNpZmRlZiBQSVBF U0VORAotICAgIGlmIChwcm90b2NvbCAhPSBQUk9UT19LICYmIHB2W1NORF9DTURdLml2YWwgPiAw KSB7Ci0JcHJpbnRmKCI/U29ycnksICVzIHdvcmtzIG9ubHkgd2l0aCBLZXJtaXQgcHJvdG9jb2xc biIsCi0JICAgICAgIChjeCA9PSBYWENTRU4pID8gIkNTRU5EIiA6ICJTRU5EIC9DT01NQU5EIik7 Ci0JeCA9IC05OwotCWdvdG8geHNlbmR4OwotICAgIH0KLSAgICBpZiAocHZbU05EX1JFU10uaXZh bCA+IDAgfHwJLyogL1JFQ09WRVIgKi8KLQlwdltTTkRfU1RBXS53dmFsID4gMCkgewkvKiBvciAv U1RBUlRJTkcgKi8KLQlpZiAoc25kZmlsdGVyIHx8IHB2W1NORF9GTFRdLml2YWwgPiAwKSB7Ci0J ICAgIHByaW50ZigiP1NvcnJ5LCBubyAvUkVDT1ZFUiBvciAvU1RBUlQgaWYgU0VORCBGSUxURVIg c2VsZWN0ZWRcbiIpOwotCSAgICB4ID0gLTk7Ci0JICAgIGdvdG8geHNlbmR4OwotCX0KLSAgICB9 Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLQotICAgIGNtYXJnID0gIiI7Ci0gICAgY21hcmcyID0g IiI7Ci0gICAgbGluZVswXSA9IE5VTDsKLSAgICBzID0gbGluZTsKLSAgICB3aWxkID0gMDsKLQot ICAgIHN3aXRjaCAoY21yZXN1bHQuZmNvZGUpIHsJCS8qIEhvdyBkaWQgd2UgZ2V0IG91dCBvZiBz d2l0Y2ggbG9vcCAqLwotICAgICAgY2FzZSBfQ01JRkk6CQkJLyogSW5wdXQgZmlsZW5hbWUgKi8K LQlja3N0cm5jcHkobGluZSxjbXJlc3VsdC5zcmVzdWx0LExJTkJVRlNJWik7IC8qIE5hbWUgKi8K LQlpZiAocHZbU05EX0FSUl0uaXZhbCA+IDApCi0JICBjbWFyZzIgPSBsaW5lOwotCWVsc2UKLQkg IHdpbGQgPSBjbXJlc3VsdC5ucmVzdWx0OwkvKiBXaWxkIGZsYWcgKi8KLQlpZiAoIXJlY3Vyc2l2 ZSAmJiAhd2lsZCkKLQkgIG5vbGlua3MgPSAwOwotCWJyZWFrOwotICAgICAgY2FzZSBfQ01GTEQ6 CQkJLyogRmllbGQgKi8KLQkvKiBPbmx5IGFsbG93ZWQgd2l0aCAvQ09NTUFORCBhbmQgL0FSUkFZ ICovCi0JaWYgKHB2W1NORF9DTURdLml2YWwgPCAxICYmIHB2W1NORF9BUlJdLml2YWwgPCAxKSB7 Ci0jaWZkZWYgQ0tST09UCi0JICAgIGlmIChja3Jvb3RlcnIpCi0JICAgICAgcHJpbnRmKCI/T2Zm IGxpbWl0czogJXNcbiIsY21yZXN1bHQuc3Jlc3VsdCk7Ci0JICAgIGVsc2UKLSNlbmRpZiAvKiBD S1JPT1QgKi8KLQkgICAgICBwcmludGYoIj8lcyAtIFwiJXNcIlxuIiwKLQkJICAgaXN3aWxkKGNt cmVzdWx0LnNyZXN1bHQpID8KLQkJICAgIk5vIGZpbGVzIG1hdGNoIiA6ICJGaWxlIG5vdCBmb3Vu ZCIsCi0JCSAgIGNtcmVzdWx0LnNyZXN1bHQKLQkJICAgKTsKLQkgICAgeCA9IC05OwotCSAgICBn b3RvIHhzZW5keDsKLQl9Ci0JY2tzdHJuY3B5KGxpbmUsY21yZXN1bHQuc3Jlc3VsdCxMSU5CVUZT SVopOwotCWlmIChwdltTTkRfQVJSXS5pdmFsID4gMCkKLQkgIGNtYXJnMiA9IGxpbmU7Ci0JYnJl YWs7Ci0gICAgICBjYXNlIF9DTUNGTToJCQkvKiBDb25maXJtYXRpb24gKi8KLQkvKiBzID0gIiI7 ICovCi0JY29uZmlybWVkID0gMTsKLQlicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0JcHJpbnRmKCI/ VW5leHBlY3RlZCBmdW5jdGlvbiBjb2RlOiAlZFxuIixjbXJlc3VsdC5mY29kZSk7Ci0JeCA9IC05 OwotCWdvdG8geHNlbmR4OwotICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJ4c2VuZCBzdHJpbmciLHMs MCk7Ci0gICAgZGVidWcoRjEwMSwieHNlbmQgY29uZmlybWVkIiwiIixjb25maXJtZWQpOwotCi0g ICAgLyogU2F2ZSBhbmQgY2hhbmdlIHByb3RvY29sIGFuZCB0cmFuc2ZlciBtb2RlICovCi0gICAg LyogR2xvYmFsIHZhbHVlcyBhcmUgcmVzdG9yZWQgaW4gbWFpbiBwYXJzZSBsb29wICovCi0KLSAg ICBnX3Byb3RvID0gcHJvdG9jb2w7CQkJLyogU2F2ZSBjdXJyZW50IGdsb2JhbCBwcm90b2NvbCAq LwotICAgIGdfdXJwc2l6ID0gdXJwc2l6OwotICAgIGdfc3BzaXpmID0gc3BzaXpmOwotICAgIGdf c3BzaXogPSBzcHNpejsKLSAgICBnX3Nwc2l6ciA9IHNwc2l6cjsKLSAgICBnX3NwbWF4ID0gc3Bt YXg7Ci0gICAgZ193c2xvdHIgPSB3c2xvdHI7Ci0gICAgZ19wcmVmaXhpbmcgPSBwcmVmaXhpbmc7 Ci0gICAgZ19mbmNhY3QgPSBmbmNhY3Q7Ci0gICAgZ19mbmNudiA9IGZuY252OwotICAgIGdfZm5z cGF0aCA9IGZuc3BhdGg7Ci0gICAgZ19mbnJwYXRoID0gZm5ycGF0aDsKLSAgICBnX3hmcnhsYSA9 IHhmcnhsYTsKLQotICAgIGlmIChwdltTTkRfUFJPXS5pdmFsID4gLTEpIHsJLyogQ2hhbmdlIGFj Y29yZGluZyB0byBzd2l0Y2ggKi8KLQlwcm90b2NvbCA9IHB2W1NORF9QUk9dLml2YWw7Ci0gICAg ICAgIGlmIChwdGFiW3Byb3RvY29sXS5ycGt0bGVuID4gLTEpIC8qIGNvcGllZCBmcm9tIGluaXRw cm90bygpICovCi0gICAgICAgICAgICB1cnBzaXogPSBwdGFiW3Byb3RvY29sXS5ycGt0bGVuOwot ICAgICAgICBpZiAocHRhYltwcm90b2NvbF0uc3BrdGZsZyA+IC0xKQotICAgICAgICAgICAgc3Bz aXpmID0gcHRhYltwcm90b2NvbF0uc3BrdGZsZzsKLSAgICAgICAgaWYgKHB0YWJbcHJvdG9jb2xd LnNwa3RsZW4gPiAtMSkgewotICAgICAgICAgICAgc3BzaXogPSBwdGFiW3Byb3RvY29sXS5zcGt0 bGVuOwotICAgICAgICAgICAgaWYgKHNwc2l6ZikKLQkgICAgICBzcHNpenIgPSBzcG1heCA9IHNw c2l6OwotICAgICAgICB9Ci0gICAgICAgIGlmIChwdGFiW3Byb3RvY29sXS53aW5zaXplID4gLTEp Ci0gICAgICAgICAgICB3c2xvdHIgPSBwdGFiW3Byb3RvY29sXS53aW5zaXplOwotICAgICAgICBp ZiAocHRhYltwcm90b2NvbF0ucHJlZml4ID4gLTEpCi0gICAgICAgICAgICBwcmVmaXhpbmcgPSBw dGFiW3Byb3RvY29sXS5wcmVmaXg7Ci0gICAgICAgIGlmIChwdGFiW3Byb3RvY29sXS5mbmNhID4g LTEpCi0gICAgICAgICAgICBmbmNhY3QgID0gcHRhYltwcm90b2NvbF0uZm5jYTsKLSAgICAgICAg aWYgKHB0YWJbcHJvdG9jb2xdLmZuY24gPiAtMSkKLSAgICAgICAgICAgIGZuY252ICAgPSBwdGFi W3Byb3RvY29sXS5mbmNuOwotICAgICAgICBpZiAocHRhYltwcm90b2NvbF0uZm5zcCA+IC0xKQot ICAgICAgICAgICAgZm5zcGF0aCA9IHB0YWJbcHJvdG9jb2xdLmZuc3A7Ci0gICAgICAgIGlmIChw dGFiW3Byb3RvY29sXS5mbnJwID4gLTEpCi0gICAgICAgICAgICBmbnJwYXRoID0gcHRhYltwcm90 b2NvbF0uZm5ycDsKLSAgICB9Ci0gICAgZGVidWcoRjEwMSwieHNlbmQgcHJvdG9jb2wiLCIiLHBy b3RvY29sKTsKLQotICAgIGlmIChwdltTTkRfTk9CXS5pdmFsID4gLTEpIHsJLyogL05PQkFDS1VQ IChza2lwIGJhY2t1cCBmaWxlKSAqLwotCWdfc2tpcGJ1cCA9IHNraXBidXA7Ci0Jc2tpcGJ1cCA9 IDE7Ci0gICAgfQotICAgIGlmIChwdltTTkRfUkVDXS5pdmFsID4gMCkJCS8qIC9SRUNVUlNJVkUg Ki8KLSAgICAgIHJlY3Vyc2l2ZSA9IDI7Ci0KLSAgICBpZiAocHZbU05EX1RZUF0uaXZhbCA+IC0x KSB7CS8qIC9UWVBFICovCi0JeGZpbGV0eXBlID0gcHZbU05EX1RZUF0uaXZhbDsKLQlpZiAoeGZp bGV0eXBlID09IDIpCi0JICB4ZmlsZXR5cGUgPSAtMTsKLSAgICB9Ci0gICAgZ19iaW5hcnkgPSBi aW5hcnk7CQkJLyogU2F2ZSBnbG9iYWwgdHJhbnNmZXIgbW9kZSAqLwotI2lmZGVmIFBBVFRFUk5T Ci0gICAgZ19wYXR0ZXJucyA9IHBhdHRlcm5zOwkJLyogU2F2ZSBGSUxFIFBBVFRFUk5TIHNldHRp bmcgKi8KLSNlbmRpZiAvKiBQQVRURVJOUyAqLwotICAgIGlmIChwdltTTkRfQklOXS5pdmFsID4g MCkgewkJLyogQ2hhbmdlIGFjY29yZGluZyB0byBzd2l0Y2ggKi8KLQkvKiBJZiB0aGV5IHNhaWQg L0JJTkFSWSB0aGV5IG1lYW4gL0JJTkFSWSAqLwotCXBhdHRlcm5zID0gMDsJCQkvKiBTbyBubyBw YXR0ZXJuLWJhc2VkIHN3aXRjaGluZyAqLwotCWdfeGZlcm1vZGUgPSB4ZmVybW9kZTsJCS8qIG9y IGF1dG9tYXRpYyB0cmFuc2ZlciBtb2RlICovCi0JeGZlcm1vZGUgPSBYTU9ERV9NOwotCWJpbmFy eSA9IFhZRlRfQjsKLQlkZWJ1ZyhGMTAxLCJkb3hzZW5kIC9CSU5BUlkgeGZlcm1vZGUiLCIiLHhm ZXJtb2RlKTsKLSAgICB9IGVsc2UgaWYgKHB2W1NORF9UWFRdLml2YWwgPiAwKSB7CS8qIERpdHRv IGZvciAvVEVYVCAqLwotCXBhdHRlcm5zID0gMDsKLQlnX3hmZXJtb2RlID0geGZlcm1vZGU7Ci0J eGZlcm1vZGUgPSBYTU9ERV9NOwotCWJpbmFyeSA9IFhZRlRfVDsKLQlkZWJ1ZyhGMTAxLCJkb3hz ZW5kIC9URVhUIHhmZXJtb2RlIiwiIix4ZmVybW9kZSk7Ci0gICAgfSBlbHNlIGlmIChwdltTTkRf SU1HXS5pdmFsID4gMCkgewotI2lmZGVmIFZNUwotCWJpbmFyeSA9IFhZRlRfSTsKLSNlbHNlCi0J YmluYXJ5ID0gWFlGVF9COwotI2VuZGlmIC8qIFZNUyAqLwotICAgIH0KLSNpZmRlZiBDS19MQUJF TEVECi0gICAgZWxzZSBpZiAocHZbU05EX0xCTF0uaXZhbCA+IDApIHsKLQliaW5hcnkgPSBYWUZU X0w7Ci0gICAgfQotI2VuZGlmIC8qIENLX0xBQkVMRUQgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ4c2Vu ZCBiaW5hcnkiLCIiLGJpbmFyeSk7Ci0KLSAgICBpZiAocHZbU05EX1hQQV0uaXZhbCA+IDApCQkv KiAvVFJBTlNQQVJFTlQgKi8KLSAgICAgIHhmcnhsYSA9IDA7CQkJLyogRG9uJ3QgdHJhbnNsYXRl IGNoYXJhY3RlciBzZXRzICovCi0KLSAgICAvKiBDaGVjayBmb3IgbGVnYWwgY29tYmluYXRpb25z IG9mIHN3aXRjaGVzLCBmaWxlbmFtZXMsIGV0YyAqLwotCi0jaWZkZWYgUElQRVNFTkQKLSAgICBp ZiAocHZbU05EX0NNRF0uaXZhbCA+IDApIHsJLyogQ09NTUFORCAtIHN0cmlwIGFueSBicmFjZXMg Ki8KLQlkZWJ1ZyhGMTEwLCJTRU5EIC9DT01NQU5EIGJlZm9yZSBzdHJpcHBpbmciLHMsMCk7Ci0J cyA9IGJyc3RyaXAocyk7Ci0JZGVidWcoRjExMCwiU0VORCAvQ09NTUFORCBhZnRlciBzdHJpcHBp bmciLHMsMCk7Ci0JaWYgKCEqcykgewotCSAgICBwcmludGYoIj9Tb3JyeSwgYSBjb21tYW5kIHRv IHNlbmQgZnJvbSBpcyByZXF1aXJlZFxuIik7Ci0JICAgIHggPSAtOTsKLQkgICAgZ290byB4c2Vu ZHg7Ci0JfQotCWNtYXJnID0gczsKLSAgICB9Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLQotLyog U2V0IHVwIC9NT1ZFIGFuZCAvUkVOQU1FICovCi0KLSAgICBpZiAocHZbU05EX0RFTF0uaXZhbCA+ IDAgJiYKLQkocHZbU05EX01PVl0uaXZhbCA+IDAgfHwgcHZbU05EX1JFTl0uaXZhbCA+IDApKSB7 Ci0JcHJpbnRmKCI/U29ycnksIC9ERUxFVEUgY29uZmxpY3RzIHdpdGggL01PVkUgb3IgL1JFTkFN RVxuIik7Ci0JeCA9IC05OwotCWdvdG8geHNlbmR4OwotICAgIH0KLSNpZmRlZiBDS19UTVBESVIK LSAgICBpZiAocHZbU05EX01PVl0uaXZhbCA+IDApIHsKLQlpbnQgbGVuOwotCWNoYXIgKiBwID0g cHZbU05EX01PVl0uc3ZhbDsKLSNpZmRlZiBDS19MT0dJTgotCWlmIChpc2d1ZXN0KSB7Ci0JICAg IHByaW50ZigiP1NvcnJ5LCAvTU9WRS1UTyBub3QgYXZhaWxhYmxlIHRvIGd1ZXN0c1xuIik7Ci0J ICAgIHggPSAtOTsKLQkgICAgZ290byB4c2VuZHg7Ci0JfQotI2VuZGlmIC8qIENLX0xPR0lOICov Ci0JbGVuID0gc3RybGVuKHApOwotCWlmICghaXNkaXIocCkpIHsJCS8qIENoZWNrIGRpcmVjdG9y eSAqLwotI2lmZGVmIENLX01LRElSCi0JICAgIGNoYXIgKiBzID0gTlVMTDsKLQkgICAgcyA9IChj aGFyICopbWFsbG9jKGxlbiArIDQpOwotCSAgICBpZiAocykgewotCQlzdHJjcHkocyxwKTsJCS8q IHNhZmUgKi8KLSNpZmRlZiBkYXRhZ2VuZXJhbAotCQlpZiAoc1tsZW4tMV0gIT0gJzonKSB7IHNb bGVuKytdID0gJzonOyBzW2xlbl0gPSBOVUw7IH0KLSNlbHNlCi0JCWlmIChzW2xlbi0xXSAhPSAn LycpIHsgc1tsZW4rK10gPSAnLyc7IHNbbGVuXSA9IE5VTDsgfQotI2VuZGlmIC8qIGRhdGFnZW5l cmFsICovCi0JCXNbbGVuKytdID0gJ1gnOwotCQlzW2xlbl0gPSBOVUw7Ci0JCXggPSB6bWtkaXIo cyk7Ci0JCWZyZWUocyk7Ci0JCWlmICh4IDwgMCkgewotCQkgICAgcHJpbnRmKCI/Q2FuJ3QgY3Jl YXRlIFwiJXNcIlxuIixwKTsKLQkJICAgIHggPSAtOTsKLQkJICAgIGdvdG8geHNlbmR4OwotCQl9 Ci0JICAgIH0KLSNlbHNlCi0JICAgIHByaW50ZigiP0RpcmVjdG9yeSBcIiVzXCIgbm90IGZvdW5k XG4iLHApOwotCSAgICB4ID0gLTk7Ci0JICAgIGdvdG8geHNlbmR4OwotI2VuZGlmIC8qIENLX01L RElSICovCi0JfQotICAgICAgICB6Zm5xZnAocCxMSU5CVUZTSVosdG1wYnVmKTsKLQltYWtlc3Ry KCZzbmRfbW92ZSx0bXBidWYpOwotICAgIH0KLSNlbmRpZiAvKiBDS19UTVBESVIgKi8KLQotICAg IGlmIChwdltTTkRfUkVOXS5pdmFsID4gMCkgewkJLyogL1JFTkFNRSAqLwotCWNoYXIgKiBwID0g cHZbU05EX1JFTl0uc3ZhbDsKLSNpZmRlZiBDS19MT0dJTgotCWlmIChpc2d1ZXN0KSB7Ci0JICAg IHByaW50ZigiP1NvcnJ5LCAvUkVOQU1FLVRPIG5vdCBhdmFpbGFibGUgdG8gZ3Vlc3RzXG4iKTsK LQkgICAgeCA9IC05OwotCSAgICBnb3RvIHhzZW5keDsKLQl9Ci0jZW5kaWYgLyogQ0tfTE9HSU4g Ki8KLQlpZiAoIXApIHAgPSAiIjsKLQlpZiAoISpwKSB7Ci0JICAgIHByaW50ZigiP05ldyBuYW1l IHJlcXVpcmVkIGZvciAvUkVOQU1FXG4iKTsKLQkgICAgeCA9IC05OwotCSAgICBnb3RvIHhzZW5k eDsKLQl9Ci0JcCA9IGJyc3RyaXAocCk7Ci0jaWZuZGVmIE5PU1BMCi0gICAgLyogSWYgbmFtZSBn aXZlbiBpcyB3aWxkLCByZW5hbWUgc3RyaW5nIG11c3QgY29udGFpbiB2YXJpYWJsZXMgKi8KLQlp ZiAod2lsZCkgewotCSAgICBjaGFyICogcyA9IHRtcGJ1ZjsKLQkgICAgeCA9IFRNUEJVRlNJWjsK LQkgICAgenpzdHJpbmcocCwmcywmeCk7Ci0JICAgIGlmICghc3RyY21wKHRtcGJ1ZixwKSkgewot CQlwcmludGYoCi0gICAgIj8vUkVOQU1FIGZvciBmaWxlIGdyb3VwIG11c3QgY29udGFpbiB2YXJp YWJsZXMgc3VjaCBhcyBcXHYoZmlsZW5hbWUpXG4iCi0JCSAgICAgICApOwotCQl4ID0gLTk7Ci0J CWdvdG8geHNlbmR4OwotCSAgICB9Ci0JfQotI2VuZGlmIC8qIE5PU1BMICovCi0JbWFrZXN0cigm c25kX3JlbmFtZSxwKTsKLSAgICB9Ci0KLS8qIEhhbmRsZSAvUkVDT1ZFUiBhbmQgL1NUQVJUICov Ci0KLSNpZmRlZiBDS19SRVNFTkQKLSAgICBpZiAocHZbU05EX1JFU10uaXZhbCA+IDAgJiYgYmlu YXJ5ICE9IFhZRlRfQiAmJiAhZmlsZXBlZWsKLSNpZmRlZiBQQVRURVJOUwotCSYmICFwYXR0ZXJu cwotI2Vsc2UKLSNpZmRlZiBWTVMKLS8qIFZNUyBzZXRzIHRleHQvYmluYXJ5IGF1dG9tYXRpY2Fs bHkgbGF0ZXIgd2hlbiBpdCBvcGVucyB0aGUgZmlsZSAqLwotCSYmIDAKLSNlbmRpZiAvKiBWTVMg Ki8KLSNlbmRpZiAvKiBQQVRURVJOUyAqLwotCSkgewotCXByaW50ZigiP1NvcnJ5LCAvQklOQVJZ IHJlcXVpcmVkXG4iKTsKLQl4ID0gLTk7Ci0JZ290byB4c2VuZHg7Ci0gICAgfQotICAgIGlmIChw dltTTkRfU1RBXS53dmFsID4gMCkgewkJLyogL1NUQVJUICovCi0JaWYgKHdpbGQpIHsKLQkgICAg cHJpbnRmKCI/U29ycnksIHdpbGRjYXJkcyBub3QgcGVybWl0dGVkIHdpdGggL1NUQVJUXG4iKTsK LQkgICAgeCA9IC05OwotCSAgICBnb3RvIHhzZW5keDsKLQl9Ci0JaWYgKHNpemVvZihpbnQpIDwg NCkgewotCSAgICBwcmludGYoIj9Tb3JyeSwgdGhpcyBjb21tYW5kIG5lZWRzIGF0IGxlYXN0IDMy LWJpdCBpbnRlZ2Vyc1xuIik7Ci0JICAgIHggPSAtOTsKLQkgICAgZ290byB4c2VuZHg7Ci0JfQot I2lmZGVmIENLX1hZWgotCWlmIChwcm90b2NvbCAhPSBQUk9UT19LKSB7Ci0JICAgIHByaW50Zigi P1NvcnJ5LCBTRU5EIC9TVEFSVCB3b3JrcyBvbmx5IHdpdGggS2VybWl0IHByb3RvY29sXG4iKTsK LQkgICAgeCA9IC05OwotCSAgICBnb3RvIHhzZW5keDsKLQl9Ci0jZW5kaWYgLyogQ0tfWFlaICov Ci0gICAgfQotI2lmZGVmIENLX1hZWgotICAgIGlmIChwdltTTkRfUkVTXS5pdmFsID4gMCkgewot CWlmIChwcm90b2NvbCAhPSBQUk9UT19LICYmIHByb3RvY29sICE9IFBST1RPX1opIHsKLQkgICAg cHJpbnRmKAotICAgICJTb3JyeSwgL1JFQ09WRVIgaXMgcG9zc2libGUgb25seSB3aXRoIEtlcm1p dCBvciBaTU9ERU0gcHJvdG9jb2xcbiIKLQkJICAgKTsKLQkgICAgeCA9IC05OwotCSAgICBnb3Rv IHhzZW5keDsKLQl9Ci0gICAgfQotI2VuZGlmIC8qIENLX1hZWiAqLwotI2VuZGlmIC8qIENLX1JF U0VORCAqLwotCi0gICAgaWYgKHByb3RvY29sID09IFBST1RPX0spIHsKLQlpZiAoKHB2W1NORF9N QUldLml2YWwgPiAwIHx8CS8qIE1BSUwgKi8KLQkgICAgIHB2W1NORF9QUkldLml2YWwgPiAwIHx8 CS8qIFBSSU5UICovCi0JICAgICBwdltTTkRfUkVTXS5pdmFsID4gMAkvKiBSRVNFTkQgKi8KLQkg ICAgICkgJiYKLQkgICAgKCFhdGRpc28gfHwgIWF0Y2FwcikpIHsJLyogRGlzcG9zaXRpb24gYXR0 cmlidXRlIG9mZj8gKi8KLQkgICAgcHJpbnRmKCI/U29ycnksIEFUVFJJQlVURSBESVNQT1NJVElP TiBtdXN0IGJlIE9OXG4iKTsKLQkgICAgeCA9IC05OwotCSAgICBnb3RvIHhzZW5keDsKLQl9Ci0g ICAgfQotCi0jaWZkZWYgQ0tfWFlaCi0gICAgaWYgKHdpbGQgJiYgKHByb3RvY29sID09IFBST1RP X1ggfHwgcHJvdG9jb2wgPT0gUFJPVE9fWEMpKSB7Ci0JcHJpbnRmKAotIlNvcnJ5LCB5b3UgY2Fu IG9ubHkgc2VuZCBvbmUgZmlsZSBhdCBhIHRpbWUgd2l0aCBYTU9ERU0gcHJvdG9jb2xcbiIKLQkg ICAgICAgKTsKLQl4ID0gLTk7Ci0JZ290byB4c2VuZHg7Ci0gICAgfQotI2VuZGlmIC8qIENLX1hZ WiAqLwotCi0gICAgaWYgKCFjb25maXJtZWQpIHsJCQkvKiBDUiBub3QgdHlwZWQgeWV0LCBnZXQg bW9yZSBmaWVsZHMgKi8KLQljaGFyICptOwotCWlmIChtbGlzdCkgewkJCS8qIE1TRU5EIG9yIE1N T1ZFICovCi0JICAgIG5maWxzID0gMDsJCQkvKiBXZSBhbHJlYWR5IGhhdmUgdGhlIGZpcnN0IG9u ZSAqLwotI2lmbmRlZiBOT01TRU5ECi0JICAgIG1zZmlsZXNbbmZpbHMrK10gPSBsaW5lOwkvKiBT dG9yZSBwb2ludGVyICovCi0JICAgIGxwID0gbGluZSArIChpbnQpc3RybGVuKGxpbmUpICsgMTsg LyogUG9pbnQgcGFzdCBpdCAqLwotCSAgICBkZWJ1ZyhGMTExLCJ4c2VuZCBtc2VuZCIsbXNmaWxl c1tuZmlscy0xXSxuZmlscy0xKTsKLQkgICAgd2hpbGUgKDEpIHsJCQkvKiBHZXQgbW9yZSBmaWxl bmFtZXMgKi8KLQkJY2hhciAqcDsKLQkJaWYgKCh4ID0gY21pZmkoIk5hbWVzIG9mIGZpbGVzIHRv IHNlbmQsIHNlcGFyYXRlZCBieSBzcGFjZXMiLAotCQkJICAgICAgICIiLCAmcywmeSx4eHN0cmlu ZykpIDwgMCkgewotCQkgICAgaWYgKHggIT0gLTMpCi0JCSAgICAgIGdvdG8geHNlbmR4OwotCQkg ICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotCQkgICAgICBnb3RvIHhzZW5keDsKLQkJICAgIGJy ZWFrOwotCQl9Ci0JCW1zZmlsZXNbbmZpbHMrK10gPSBscDsJLyogR290IG9uZSwgY291bnQgaXQs IHBvaW50IHRvIGl0LCAqLwotCQlwID0gbHA7CQkJLyogcmVtZW1iZXIgcG9pbnRlciwgKi8KLQkJ d2hpbGUgKCgqbHArKyA9ICpzKyspKQkvKiBhbmQgY29weSBpdCBpbnRvIGJ1ZmZlciAqLwotCQkg IGlmIChscCA+IChsaW5lICsgTElOQlVGU0laKSkgeyAvKiBBdm9pZCBtZW1vcnkgbGVhayAqLwot CQkgICAgICBwcmludGYoIj9NU0VORCBsaXN0IHRvbyBsb25nXG4iKTsKLQkJICAgICAgbGluZVsw XSA9IE5VTDsKLQkJICAgICAgeCA9IC05OwotCQkgICAgICBnb3RvIHhzZW5keDsKLQkJICB9Ci0J CWRlYnVnKEYxMTEsInhzZW5kIG1zZW5kIixtc2ZpbGVzW25maWxzLTFdLG5maWxzLTEpOwotCQlp ZiAobmZpbHMgPT0gMSkgZnNwZWNbMF0gPSBOVUw7IC8qIFRha2UgY2FyZSBvZiBcdihmaWxlc3Bl YykgKi8KLSNpZmRlZiBaRk5RRlAKLQkJemZucWZwKHAsVE1QQlVGU0laLHRtcGJ1Zik7Ci0JCXAg PSB0bXBidWY7Ci0jZW5kaWYgLyogWkZOUUZQICovCi0JCWlmICgoKGludClzdHJsZW4oZnNwZWMp ICsgKGludClzdHJsZW4ocCkgKyAxKSA8IGZzcGVjbGVuKSB7Ci0JCSAgICBzdHJjYXQoZnNwZWMs cCk7CS8qIHNhZmUgKi8KLQkJICAgIHN0cmNhdChmc3BlYywiICIpOwkvKiBzYWZlICovCi0JCX0g ZWxzZQotI2lmZGVmIENPTU1FTlQKLQkJICBwcmludGYoIldBUk5JTkcgLSBcXHYoZmlsZXNwZWMp IGJ1ZmZlciBvdmVyZmxvd1xuIik7Ci0jZWxzZQotCQkgIGRlYnVnKEYxMDEsImRveHNlbmQgZmls ZXNwZWMgYnVmZmVyIG92ZXJmbG93IiwiIiwwKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0JICAg IH0KLSNlbmRpZiAvKiBOT01TRU5EICovCi0JfSBlbHNlIHsJCQkvKiBSZWd1bGFyIFNFTkQgKi8K LQkgICAgY2hhciAqcDsgaW50IHk7Ci0JICAgIG5maWxzID0gLTE7Ci0JICAgIGlmIChwdltTTkRf TUFJXS5pdmFsID4gMCkKLQkgICAgICBtID0gKHB2W1NORF9NQUldLnN2YWwpID8KLQkJImUtbWFp bCBhZGRyZXNzIChvcHRpb25hbCkiIDoKLQkJICAiZS1tYWlsIGFkZHJlc3MgKHJlcXVpcmVkKSI7 Ci0JICAgIGVsc2UgaWYgKHB2W1NORF9QUkldLml2YWwgPiAwKQotCSAgICAgIG0gPSAicHJpbnRl ciBvcHRpb25zIChvcHRpb25hbCkiOwotCSAgICBlbHNlIGlmICh3aWxkKQotCSAgICAgIG0gPQot IlxuT3B0aW9uYWwgYXMtbmFtZSB0ZW1wbGF0ZSBjb250YWluaW5nIHJlcGxhY2VtZW50IHZhcmlh YmxlcyBcCi1saWtlIFxcdihmaWxlbmFtZSkiOwotCSAgICBlbHNlCi0JICAgICAgbSA9ICJPcHRp b25hbCBuYW1lIHRvIHNlbmQgaXQgd2l0aCI7Ci0JICAgIGlmICgoeCA9IGNtdHh0KG0sIiIsJnAs TlVMTCkpIDwgMCkKLQkgICAgICBnb3RvIHhzZW5keDsKLQkgICAgaWYgKCFwKSBwID0gIiI7Ci0J ICAgIGlmICgqcCkgewkJCS8qIElmIHNvbWUgdGV4dCB3YXMgZ2l2ZW4uLi4gKi8KLQkJcCA9IGJy c3RyaXAocCk7CQkvKiBSZXBsYWNlIC9BUy1OQU1FOiB2YWx1ZSBpZiBhbnkgKi8KLQkJaWYgKCh5 ID0gc3RybGVuKHApKSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHB2W1NORF9NQUld Lml2YWwgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZwdltTTkRfTUFJ XS5zdmFsLCBwKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLQkJCWlmIChwdltTTkRf QVNOXS5zdmFsKSBmcmVlKHB2W1NORF9BU05dLnN2YWwpOwotCQkJcHZbU05EX0FTTl0uc3ZhbCA9 IG1hbGxvYyh5KzEpOwotCQkJaWYgKHB2W1NORF9BU05dLnN2YWwpIHsKLQkJCSAgICBzdHJjcHko cHZbU05EX0FTTl0uc3ZhbCxwKTsJLyogc2FmZSAqLwotCQkJICAgIHB2W1NORF9BU05dLml2YWwg PSAxOwotCQkJfQotCQkgICAgfQotCQl9Ci0JICAgIH0KLQl9Ci0gICAgfQotICAgIC8qIFNldCBj bWFyZzIgZnJvbSBhcy1uYW1lLCBob3dldmVyIHdlIGdvdCBpdC4gKi8KLQotICAgIGlmIChwdltT TkRfQVNOXS5pdmFsID4gMCAmJiBwdltTTkRfQVNOXS5zdmFsICYmICEqY21hcmcyKSB7Ci0JaW50 IHg7Ci0JeCA9IHN0cmxlbihsaW5lKTsKLQlja3N0cm5jcHkobGluZSt4KzIscHZbU05EX0FTTl0u c3ZhbCxMSU5CVUZTSVoteC0xKTsKLQljbWFyZzIgPSBsaW5lK3grMjsKLQlkZWJ1ZyhGMTEwLCJk b3hzZW5kIGNtYXJnMiIsY21hcmcyLDApOwotICAgIH0KLQotI2lmbmRlZiBOT0ZSSUxMUwotICAg IGlmICgocHZbU05EX01BSV0uaXZhbCA+IDApICYmIChwdltTTkRfUFJJXS5pdmFsID4gMCkpIHsK LQlwcmludGYoIlNvcnJ5LCAvTUFJTCBhbmQgL1BSSU5UIGFyZSBjb25mbGljdGluZyBvcHRpb25z XG4iKTsKLQl4ID0gLTk7Ci0JZ290byB4c2VuZHg7Ci0gICAgfQotICAgIG4gPSAwOwkJCQkvKiAv TUFJTCBvciAvUFJJTlQ/ICovCi0gICAgaWYgKHB2W1NORF9NQUldLml2YWwgPiAwKQotICAgICAg biA9IFNORF9NQUk7Ci0gICAgZWxzZSBpZiAocHZbU05EX1BSSV0uaXZhbCA+IDApCi0gICAgICBu ID0gU05EX1BSSTsKLSAgICBpZiAobikgewkJCQkvKiBZZXMuLi4gKi8KLSNpZmRlZiBERUJVRwot CWNoYXIgKiBwOwotCWlmIChuID09IFNORF9NQUkpCi0JICBwID0gIi9NQUlMIjsKLQllbHNlCi0J ICBwID0gIi9QUklOVCI7Ci0JZGVidWcoRjExMSwieHNlbmQiLHAsbik7Ci0jZW5kaWYgLyogREVC VUcgKi8KLSNpZmRlZiBDS19YWVoKLQlpZiAocHJvdG9jb2wgIT0gUFJPVE9fSykgewotCSAgICBw cmludGYoIlNvcnJ5LCAlcyBhdmFpbGFibGUgb25seSB3aXRoIEtlcm1pdCBwcm90b2NvbFxuIiwK LQkJICAgKG4gPT0gU05EX01BSSkgPyAiL01BSUwiIDogIi9QUklOVCIKLQkJICAgKTsKLQkgICAg eCA9IC05OwotCSAgICBnb3RvIHhzZW5keDsKLQl9Ci0jZW5kaWYgLyogQ0tfWFlaICovCi0JZGVi dWcoRjEwMSwieHNlbmQgcHJpbnQvbWFpbCB3aWxkIiwiIix3aWxkKTsKLQkqb3B0YnVmID0gTlVM OwkJCS8qIFdpcGUgb3V0IGFueSBvbGQgb3B0aW9ucyAqLwotCXMgPSBwdltuXS5zdmFsOwkJCS8q IG1haWwgYWRkcmVzcyBvciBwcmludCBzd2l0Y2ggdmFsICovCi0JaWYgKCFzKSBzID0gIiI7Ci0J ZGVidWcoRjExMCwiZG94c2VuZCBtYWlsIGFkZHJlc3Mgb3IgcHJpbnRlciBvcHRpb25zIixzLDAp OwotCWlmIChuID09IFNORF9NQUkgJiYgISpzKSB7Ci0JICAgIHByaW50ZigiP0UtbWFpbCBhZGRy ZXNzIHJlcXVpcmVkXG4iKTsKLQkgICAgeCA9IC05OwotCSAgICBnb3RvIHhzZW5keDsKLQl9IGVs c2UgaWYgKChpbnQpc3RybGVuKHMpID4gOTQpIHsgLyogRW5zdXJlIGxlZ2FsIHNpemUgKi8KLQkg ICAgcHJpbnRmKCI/JXMgdG9vIGxvbmdcbiIsCi0JCSAgIChuID09IFNORF9NQUkpID8KLQkJICAg IkUtbWFpbCBhZGRyZXNzIiA6Ci0JCSAgICJQcmludCBvcHRpb24gc3RyaW5nIgotCQkgICApOwot CSAgICB4ID0gLTk7Ci0JICAgIGdvdG8geHNlbmR4OwotCX0KLQlja3N0cm5jcHkob3B0YnVmLHMs T1BUQlVGTEVOKTsJLyogT0ssIGNvcHkgdG8gb3B0aW9uIGJ1ZmZlciAqLwotCWNtYXJnID0gbGlu ZTsJCQkvKiBGaWxlIHRvIHNlbmQgKi8KLQlpZiAobiA9PSBTTkRfTUFJKSB7Ci0JICAgIGRlYnVn KEYxMTAsInhzZW5kIG1haWxpbmciLGNtYXJnLDApOwotCSAgICBkZWJ1ZyhGMTEwLCJ4c2VuZCBh ZGRyZXNzOiIsb3B0YnVmLDApOwotCSAgICBybWFpbGYgPSAxOwotCX0gZWxzZSB7Ci0JICAgIGRl YnVnKEYxMTAsInhzZW5kIHByaW50aW5nIixjbWFyZywwKTsKLQkgICAgZGVidWcoRjExMCwieHNl bmQgb3B0aW9ucyIsb3B0YnVmLDApOwotCSAgICBycHJpbnRmID0gMTsKLQl9Ci0gICAgfQotI2Vu ZGlmIC8qIE5PRlJJTExTICovCi0KLSNpZmRlZiBDQUxJQlJBVEUKLSAgICBpZiAocHZbU05EX0NB TF0ud3ZhbCA+IDApIHsJCS8qIEhhbmRsZSAvQ0FMSUJSQVRFICovCi0JaWYgKGNvbmZpcm1lZCkg ewotCSAgICBjYWxpYnJhdGUgPSBwdltTTkRfQ0FMXS53dmFsICogKENLX09GRl9UKTEwMjQ7Ci0J ICAgIHNuZHNyYyA9IC05OwotCSAgICBuZmlscyA9IDE7Ci0JICAgIHdpbGQgPSAwOwotI2lmbmRl ZiBOT01TRU5ECi0JICAgIGFkZGxpc3QgPSAwOwotI2VuZGlmIC8qIE5PTVNFTkQgKi8KLQkgICAg Y2tzdHJuY3B5KGxpbmUsIkNBTElCUkFUSU9OIixMSU5CVUZTSVopOwotCSAgICBzID0gY21hcmcg PSBsaW5lOwotCSAgICBpZiAoIWNtYXJnMikgY21hcmcyID0gIiI7Ci0JICAgIGRlYnVnKEYxMTAs ImRveHNlbmQgY21hcmcyIGNhbGlicmF0ZSIsY21hcmcyLDApOwotCX0gZWxzZSBpZiAobGluZVsw XSkgewotCSAgICBjYWxpYnJhdGUgPSAwOwotCSAgICBwdltTTkRfQ0FMXS5pdmFsID0gMDsKLQkg ICAgcHZbU05EX0NBTF0ud3ZhbCA9IDA7Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBDQUxJQlJBVEUg Ki8KLQotICAgIGlmIChwdltTTkRfRklMXS5pdmFsID4gMCkgewotCWlmIChjb25maXJtZWQgJiYg IWNhbGlicmF0ZSkgewotCSAgICBpZiAoem9wZW5pKFpNRklMRSxwdltTTkRfRklMXS5zdmFsKSA8 IDEpIHsKLQkJZGVidWcoRjExMCwieHNlbmQgY2FuJ3Qgb3BlbiIscHZbU05EX0ZJTF0uc3ZhbCww KTsKLQkJcHJpbnRmKCI/RmFpbHVyZSB0byBvcGVuICVzXG4iLGZpbGVmaWxlKTsKLQkJeCA9IC05 OwotCQlnb3RvIHhzZW5keDsKLQkgICAgfQotCSAgICBtYWtlc3RyKCZmaWxlZmlsZSxwdltTTkRf RklMXS5zdmFsKTsgLyogT3BlbiwgcmVtZW1iZXIgbmFtZSAqLwotCSAgICBkZWJ1ZyhGMTEwLCJ4 c2VuZCBvcGVuZWQiLGZpbGVmaWxlLDApOwotCSAgICB3aWxkID0gMTsKLQl9Ci0gICAgfQotCi0g ICAgLyogU0VORCBhbG9uZS4uLiAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgaWYgKGNvbmZpcm1l ZCAmJiBwdltTTkRfQVJSXS5pdmFsID4gMCkgewotCWlmICghKmNtYXJnMikgewotCSAgICBzbmR4 bmFtWzddID0gKGNoYXIpKChhcnJheXggPT0gMSkgPyA2NCA6IGFycmF5eCArIEFSUkFZQkFTRSk7 Ci0JICAgIGNtYXJnMiA9IHNuZHhuYW07Ci0JfQotCWNtYXJnID0gIiI7Ci0JZ290byBzZW5kZW5k OwotICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0gICAgaWYgKGNvbmZpcm1lZCAmJiAhbGlu ZVswXSAmJiAhZmlsZWZpbGUgJiYgIWNhbGlicmF0ZSkgewotI2lmbmRlZiBOT01TRU5ECi0JaWYg KGZpbGVoZWFkKSB7CQkJLyogT0sgaWYgd2UgaGF2ZSBhIFNFTkQtTElTVCAqLwotCSAgICBuZmls cyA9IGZpbGVzaW5saXN0OwotCSAgICBzbmRzcmMgPSBuZmlsczsJCS8qIExpa2UgTVNFTkQgKi8K LQkgICAgYWRkbGlzdCA9IDE7CQkvKiBCdXQgdXNpbmcgYSBkaWZmZXJlbnQgbGlzdC4uLiAqLwot CSAgICBmaWxlbmV4dCA9IGZpbGVoZWFkOwotCSAgICBnb3RvIHNlbmRlbmQ7Ci0JfQotI2VuZGlm IC8qIE5PTVNFTkQgKi8KLQlwcmludGYoIj9GaWxlbmFtZSByZXF1aXJlZCBidXQgbm90IGdpdmVu XG4iKTsKLQl4ID0gLTk7Ci0JZ290byB4c2VuZHg7Ci0gICAgfQotCi0gICAgLyogTm90IHNlbmQt bGlzdCBvciBhcnJheSAqLwotCi0jaWZuZGVmIE5PTVNFTkQKLSAgICBhZGRsaXN0ID0gMDsJCQkv KiBEb24ndCB1c2UgU0VORC1MSVNULiAqLwotICAgIGZpbGVuZXh0ID0gTlVMTDsKLSNlbmRpZiAv KiBOT01TRU5EICovCi0KLSAgICBpZiAobWxpc3QpIHsJCQkvKiBNU0VORCBvciBNTU9WRSAqLwot I2lmbmRlZiBOT01TRU5ECi0JY21saXN0ID0gbXNmaWxlczsJCS8qIExpc3Qgb2YgZmlsZXMgdG8g c2VuZCAqLwotCXNuZHNyYyA9IG5maWxzOwotCWNtYXJnMiA9ICIiOwotCXNlbmRzdGFydCA9IChD S19PRkZfVCkwOwotI2VuZGlmIC8qIE5PTVNFTkQgKi8KLSNpZmRlZiBQSVBFU0VORAotCXBpcGVz ZW5kID0gMDsKLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotICAgIH0gZWxzZSBpZiAoZmlsZWZpbGUp IHsJCS8qIEZpbGUgY29udGFpbnMgbGlzdCBvZiBmaWxlbmFtZXMgKi8KLQlzID0gIiI7Ci0JY21h cmcgPSAiIjsKLQljbWFyZzIgPSAiIjsKLQlsaW5lWzBdID0gTlVMOwotCW5maWxzID0gMTsKLQlz bmRzcmMgPSAxOwotCi0gICAgfSBlbHNlIGlmICghY2FsaWJyYXRlICYmIHB2W1NORF9BUlJdLml2 YWwgPCAxICYmIHB2W1NORF9DTURdLml2YWwgPCAxKSB7Ci0KLQluZmlscyA9IHNuZHNyYyA9IC0x OwkvKiBOb3QgTVNFTkQsIE1NT1ZFLCAvTElTVCwgb3IgL0FSUkFZICovCi0JaWYgKAkJCQkvKiBv ciAvQ09NTUFORCAqLwotCi0jaWZuZGVmIE5PRlJJTExTCi0JICAgICFybWFpbGYgJiYgIXJwcmlu dGYJCS8qIE5vdCBNQUlMIG9yIFBSSU5UICovCi0jZWxzZQotCSAgICAxCi0jZW5kaWYgLyogTk9G UklMTFMgKi8KLQkgICAgKSB7Ci0JICAgIENLX09GRl9UIHkgPSAoQ0tfT0ZGX1QpMTsKLQkgICAg aWYgKCF3aWxkKQotCSAgICAgIHkgPSB6Y2hraShzKTsKLQkgICAgaWYgKHkgPCAoQ0tfT0ZGX1Qp MCkgewotCQlwcmludGYoIj9SZWFkIGFjY2VzcyBkZW5pZWQgLSBcIiVzXCJcbiIsIHMpOwotCQl4 ID0gLTk7Ci0JCWdvdG8geHNlbmR4OwotCSAgICB9Ci0JICAgIGlmIChzICE9IGxpbmUpCQkvKiBX ZSBtaWdodCBhbHJlYWR5IGhhdmUgZG9uZSB0aGlzLiAqLwotCSAgICAgIGNrc3RybmNweShsaW5l LHMsTElOQlVGU0laKTsgLyogQ29weSBvZiBzdHJpbmcganVzdCBwYXJzZWQuICovCi0JICAgIGVs c2UKLQkgICAgICBkZWJ1ZyhGMTEwLCJkb3hzZW5kIGxpbmU9cyIsbGluZSwwKTsKLQkgICAgY21h cmcgPSBsaW5lOwkJLyogRmlsZSB0byBzZW5kICovCi0JfQotCXpmbnFmcChjbWFyZyxmc3BlY2xl bixmc3BlYyk7Ci0gICAgfQotICAgIGlmICghbWxpc3QpIHsJCQkvKiBGb3IgYWxsIGJ1dCBNU0VO RC4uLiAqLwotI2lmZGVmIFBJUEVTRU5ECi0JaWYgKHB2W1NORF9DTURdLml2YWwgPiAwKQkvKiAv Q09NTUFORCBzZXRzIHBpcGVzZW5kIGZsYWcgKi8KLQkgIHBpcGVzZW5kID0gMTsKLQlkZWJ1ZyhG MTAxLCJ4c2VuZCAvQ09NTUFORCBwaXBlc2VuZCIsIiIscGlwZXNlbmQpOwotCWlmIChwaXBlc2Vu ZCAmJiBmaWxlZmlsZSkgewotCSAgICBwcmludGYoIj9JbnZhbGlkIHN3aXRjaCBjb21iaW5hdGlv blxuIik7Ci0JICAgIHggPSAtOTsKLQkgICAgZ290byB4c2VuZHg7Ci0JfQotI2VuZGlmIC8qIFBJ UEVTRU5EICovCi0KLSNpZm5kZWYgTk9TUEwKLSAgICAvKiBJZiBhcy1uYW1lIGdpdmVuIGFuZCBm aWxlc3BlYyBpcyB3aWxkLCBhcy1uYW1lIG11c3QgY29udGFpbiB2YXJpYWJsZXMgKi8KLQlkZWJ1 ZyhGMTExLCJkb3hzZW5kIGNtYXJnMiB3aWxkIixjbWFyZzIsd2lsZCk7Ci0JaWYgKHdpbGQgJiYg KmNtYXJnMikgewotCSAgICBjaGFyICogcyA9IHRtcGJ1ZjsKLQkgICAgeCA9IFRNUEJVRlNJWjsK LQkgICAgenpzdHJpbmcoY21hcmcyLCZzLCZ4KTsKLQkgICAgaWYgKCFzdHJjbXAodG1wYnVmLGNt YXJnMikpIHsKLQkJcHJpbnRmKAotICAgICI/QXMtbmFtZSBmb3IgZmlsZSBncm91cCBtdXN0IGNv bnRhaW4gdmFyaWFibGVzIHN1Y2ggYXMgXFx2KGZpbGVuYW1lKVxuIgotCQkgICAgICAgKTsKLQkJ eCA9IC05OwotCQlnb3RvIHhzZW5keDsKLQkgICAgfQotCX0KLSNlbmRpZiAvKiBOT1NQTCAqLwot Ci0gICAgLyogU3RyaXAgYnJhY2VzIGZyb20gYXMtbmFtZSAqLwotCWRlYnVnKEYxMTAsInhzZW5k IGNtYXJnMiBiZWZvcmUgc3RyaXBwaW5nIixjbWFyZzIsMCk7Ci0JY21hcmcyID0gYnJzdHJpcChj bWFyZzIpOwotCWRlYnVnKEYxMTAsInhzZW5kIGZpbGVuYW1lIixjbWFyZywwKTsKLQlkZWJ1ZyhG MTEwLCJ4c2VuZCBhcy1uYW1lIixjbWFyZzIsMCk7Ci0KLSAgICAvKiBDb3B5IGFzLW5hbWUgdG8g YSBzYWZlIHBsYWNlICovCi0KLQlpZiAoYXNuYnVmKSB7Ci0JICAgIGZyZWUoYXNuYnVmKTsKLQkg ICAgYXNuYnVmID0gTlVMTDsKLQl9Ci0JaWYgKCh5ID0gc3RybGVuKGNtYXJnMikpID4gMCkgewot CSAgICBhc25idWYgPSAoY2hhciAqKSBtYWxsb2MoeSArIDEpOwotCSAgICBpZiAoYXNuYnVmKSB7 Ci0JCXN0cmNweShhc25idWYsY21hcmcyKTsJLyogc2FmZSAqLwotCQljbWFyZzIgPSBhc25idWY7 Ci0JICAgIH0gZWxzZSBjbWFyZzIgPSAiIjsKLQl9Ci0KLSNpZmRlZiBDS19SRVNFTkQKLQlkZWJ1 ZyhGMTExLCJ4c2VuZCBwdltTTkRfU1RBXS5pdmFsIiwiIixwdltTTkRfU1RBXS5pdmFsKTsKLQlp ZiAocHZbU05EX1NUQV0ud3ZhbCA+IChDS19PRkZfVCktMSkgeyAvKiAvU1RBUlQgcG9zaXRpb24g Ki8KLQkgICAgaWYgKHdpbGQpIHsKLQkJcHJpbnRmKCI/L1NUQVJUSU5HLUFUIG1heSBub3QgYmUg dXNlZCB3aXRoIG11bHRpcGxlIGZpbGVzLlxuIik7Ci0JCXggPSAtOTsKLQkJZ290byB4c2VuZHg7 Ci0JICAgIH0gZWxzZQotCSAgICAgIHNlbmRzdGFydCA9IHB2W1NORF9TVEFdLnd2YWw7Ci0JfSBl bHNlCi0JICBzZW5kc3RhcnQgPSAoQ0tfT0ZGX1QpMDsKLQlkZWJ1ZyhGMTAxLCJ4c2VuZCAvU1RB UlRJTkciLCIiLHNlbmRzdGFydCk7Ci0jZW5kaWYgLyogQ0tfUkVTRU5EICovCi0gICAgfQotCi1z ZW5kZW5kOgkJCQkvKiBDb21tb24gc3VjY2Vzc2Z1bCBleGl0ICovCi0gICAgbW92aW5nID0gMDsK LSAgICBpZiAocHZbU05EX1NISF0uaXZhbCA+IDApIHsJCS8qIFNFTkQgL1FVSUVULi4uICovCi0J Z19kaXNwbGEgPSBmZGlzcGxhOwotCWZkaXNwbGEgPSAwOwotCWRlYnVnKEYxMDEsInhzZW5kIGRp c3BsYXkiLCIiLGZkaXNwbGEpOwotICAgIH0KLQotI2lmbmRlZiBOT1NQTAkJCQkvKiBTRU5EIC9B UlJBWS4uLiAqLwotICAgIGlmIChwdltTTkRfQVJSXS5pdmFsID4gMCkgewotCWlmICghYXApIHsg eCA9IC0yOyBnb3RvIHhzZW5keDsgfSAvKiAoc2hvdWxkbid0IGhhcHBlbikgKi8KLQlpZiAocmFu Z2VbMF0gPT0gLTEpCQkvKiBJZiBsb3cgZW5kIG9mIHJhbmdlIG5vdCBzcGVjaWZpZWQgKi8KLQkg IHJhbmdlWzBdID0gMTsJCQkvKiBkZWZhdWx0IHRvIDEgKi8KLQlpZiAocmFuZ2VbMV0gPT0gLTEp CQkvKiBJZiBoaWdoIG5vdCBzcGVjaWZpZWQgKi8KLQkgIHJhbmdlWzFdID0gYV9kaW1bYXJyYXl4 XTsJLyogZGVmYXVsdCB0byBzaXplIG9mIGFycmF5ICovCi0JaWYgKChyYW5nZVswXSA8IDApIHx8 CQkvKiBDaGVjayByYW5nZSAqLwotCSAgICAocmFuZ2VbMF0gPiBhX2RpbVthcnJheXhdKSB8fAot CSAgICAocmFuZ2VbMV0gPCByYW5nZVswXSkgfHwKLQkgICAgKHJhbmdlWzFdID4gYV9kaW1bYXJy YXl4XSkpIHsKLQkgICAgcHJpbnRmKCI/QmFkIGFycmF5IHJhbmdlIC0gWyVkOiVkXVxuIixyYW5n ZVswXSxyYW5nZVsxXSk7Ci0JICAgIHggPSAtOTsKLQkgICAgZ290byB4c2VuZHg7Ci0JfQotCXNu ZGFycmF5ID0gYXA7CQkJLyogQXJyYXkgcG9pbnRlciAqLwotCXNuZHhpbiA9IGFycmF5eDsJCS8q IEFycmF5IGluZGV4ICovCi0Jc25keGxvID0gcmFuZ2VbMF07CQkvKiBBcnJheSByYW5nZSAqLwot CXNuZHhoaSA9IHJhbmdlWzFdOwotCXNuZHhuYW1bN10gPSAoY2hhcikoKHNuZHhpbiA9PSAxKSA/ IDY0IDogc25keGluICsgQVJSQVlCQVNFKTsKLQotI2lmZGVmIENPTU1FTlQKLQlwcmludGYoIlNF TkRJTkcgRlJPTSBBUlJBWTogJiVjW10uLi5cbiIsIC8qIGRlYnVnZ2luZyAqLwotCSAgICAgICAo c25keGluID09IDEpID8gNjQgOiBzbmR4aW4gKyBBUlJBWUJBU0UpOwotCXByaW50ZigiTG89JWRc bkhpPSVkXG4iLCBzbmR4bG8sIHNuZHhoaSk7Ci0JcHJpbnRmKCJjbWFyZz1bJXNdXG5jbWFyZzI9 WyVzXVxuIiwgY21hcmcsIGNtYXJnMik7Ci0Jd2hpbGUgKCh4ID0gYWduYnl0ZSgpKSA+IC0xKSB7 Ci0JICAgIHB1dGNoYXIoKGNoYXIpeCk7Ci0JfQotCXJldHVybigxKTsKLSNlbmRpZiAvKiBDT01N RU5UICovCi0gICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0KLSAgICBpZiAocHZbU05EX0FSUl0u aXZhbCA8IDEpIHsJCS8qIEZpbGUgc2VsZWN0aW9uICYgZGlzcG9zaXRpb24uLi4gKi8KLQotCWlm IChwdltTTkRfREVMXS5pdmFsID4gMCkJLyogL0RFTEVURSB3YXMgc3BlY2lmaWVkICovCi0JICBt b3ZpbmcgPSAxOwotCWRlYnVnKEYxMDEsInhzZW5kIC9ERUxFVEUiLCIiLG1vdmluZyk7Ci0JaWYg KHB2W1NORF9BRlRdLml2YWwgPiAwKQkvKiBDb3B5IFNFTkQgY3JpdGVyaWEgKi8KLQkgIGNrc3Ry bmNweShzbmRhZnRlcixwdltTTkRfQUZUXS5zdmFsLDE5KTsKLQlpZiAocHZbU05EX0JFRl0uaXZh bCA+IDApCi0JICBja3N0cm5jcHkoc25kYmVmb3JlLHB2W1NORF9CRUZdLnN2YWwsMTkpOwotCWlm IChwdltTTkRfTkFGXS5pdmFsID4gMCkKLQkgIGNrc3RybmNweShzbmRuYWZ0ZXIscHZbU05EX05B Rl0uc3ZhbCwxOSk7Ci0JaWYgKHB2W1NORF9OQkVdLml2YWwgPiAwKQotCSAgY2tzdHJuY3B5KHNu ZG5iZWZvcmUscHZbU05EX05CRV0uc3ZhbCwxOSk7Ci0JaWYgKHB2W1NORF9FWENdLml2YWwgPiAw KQotCSAgbWFrZWxpc3QocHZbU05EX0VYQ10uc3ZhbCxzbmRleGNlcHQsTlNOREVYQ0VQVCk7Ci0J aWYgKHB2W1NORF9TTUFdLnd2YWwgPiAoQ0tfT0ZGX1QpLTEpCi0JICBzbmRzbWFsbGVyID0gcHZb U05EX1NNQV0ud3ZhbDsKLQlpZiAocHZbU05EX0xBUl0ud3ZhbCA+IChDS19PRkZfVCktMSkKLQkg IHNuZGxhcmdlciA9IHB2W1NORF9MQVJdLnd2YWw7Ci0JaWYgKHB2W1NORF9OQU1dLml2YWwgPiAt MSkgewotCSAgICBnX2ZuY252ID0gZm5jbnY7CQkvKiBTYXZlIGdsb2JhbCB2YWx1ZSAqLwotCSAg ICBmbmNudiA9IHB2W1NORF9OQU1dLml2YWw7Ci0JICAgIGRlYnVnKEYxMDEsInhzZW5kIGZuY252 IiwiIixmbmNudik7Ci0JfQotCWlmIChwdltTTkRfUFRIXS5pdmFsID4gLTEpIHsKLQkgICAgZ19z cGF0aCA9IGZuc3BhdGg7CQkvKiBTYXZlIGdsb2JhbCB2YWx1ZXMgKi8KLQkgICAgZm5zcGF0aCA9 IHB2W1NORF9QVEhdLml2YWw7Ci0jaWZuZGVmIE5aTFRPUgotCSAgICBpZiAoZm5zcGF0aCAhPSBQ QVRIX09GRikgewotCQlnX2ZuY252ID0gZm5jbnY7CS8qIEJhZCBiYWQuLi4gKi8KLQkJZm5jbnYg PSBYWUZOX0M7Ci0JICAgIH0KLSNlbmRpZiAvKiBOWkxUT1IgKi8KLQkgICAgZGVidWcoRjEwMSwi eHNlbmQgZm5zcGF0aCIsIiIsZm5zcGF0aCk7Ci0JICAgIGRlYnVnKEYxMDEsInhzZW5kIGZuY252 IiwiIixmbmNudik7Ci0JfQotICAgIH0KLQotI2lmZGVmIFBJUEVTRU5ECi0gICAgaWYgKHB2W1NO RF9GTFRdLml2YWwgPiAwKSB7Ci0JbWFrZXN0cigmc25kZmlsdGVyLHB2W1NORF9GTFRdLnN2YWwp OwotCWRlYnVnKEYxMTAsInhzZW5kIC9GSUxURVIiLCBzbmRmaWx0ZXIsIDApOwotICAgIH0KLSNl bmRpZiAvKiBQSVBFU0VORCAqLwotCi0jaWZkZWYgQ0tfQVBDCi0vKiBNT1ZFIG5vdCBhbGxvd2Vk IGluIEFQQ3MgKi8KLSAgICBpZiAobW92aW5nICYmCi0JKGFwY2FjdGl2ZSA9PSBBUENfTE9DQUwg fHwgYXBjYWN0aXZlID09IEFQQ19SRU1PVEUpCi0JJiYgIShhcGNzdGF0dXMgJiBBUENfVU5DSCkp Ci0gICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotI2VuZGlmIC8qIENLX0FQQyAqLwotI2lmZGVm IElLU19PUFRJT04KLSAgICBpZiAoCi0jaWZkZWYgQ0tfWFlaCi0gICAgICAgIHByb3RvY29sID09 IFBST1RPX0sgJiYKLSNlbmRpZiAvKiBDS19YWVogKi8KLSAgICAgICAgIWlrc193YWl0KEtFUk1J VF9SRVFfU1RBUlQsMSkpIHsKLSAgICAgICAgcHJpbnRmKCI/QSBLZXJtaXQgU2VydmVyIGlzIG5v dCBhdmFpbGFibGUgdG8gcHJvY2VzcyB0aGlzIGNvbW1hbmQuXG4iKTsKLSAgICAgICAgcHJpbnRm KCI/U3RhcnQgYSBSRUNFSVZFIGNvbW1hbmQgdG8gY29tcGxlbWVudCB0aGlzIGNvbW1hbmQuXG4i KTsKLSAgICB9Ci0jZW5kaWYgLyogSUtTX09QVElPTiAqLwotCi0jaWZkZWYgSUtTRAotI2lmZGVm IENLX0xPR0lOCi0gICAgaWYgKG1vdmluZyAmJiBpbnNlcnZlciAmJiBpc2d1ZXN0KSB7Ci0gICAg ICAgIHByaW50ZigiP0ZpbGUgZGVsZXRpb24gbm90IGFsbG93ZWQgZm9yIGd1ZXN0cy5cbiIpOwot CXJldHVybigtOSk7Ci0gICAgfQotI2VuZGlmIC8qIENLX0xPR0lOICovCi0jZW5kaWYgLyogSUtT RCAqLwotCi0gICAgc3N0YXRlID0gJ3MnOwkJCS8qIFNldCBzdGFydCBzdGF0ZSB0byBTRU5EICov Ci0gICAgc25kY21kID0gMTsKLSNpZmRlZiBDS19SRVNFTkQKLSAgICBpZiAocHZbU05EX1JFU10u aXZhbCA+IDApCQkvKiBTZW5kIHNlbmRtb2RlIGFwcHJvcHJpYXRlbHkgKi8KLSAgICAgIHNlbmRt b2RlID0gU01fUkVTRU5EOwotICAgIGVsc2UgaWYgKHB2W1NORF9TVEFdLml2YWwgPiAwKQotICAg ICAgc2VuZG1vZGUgPSBTTV9QU0VORDsKLSAgICBlbHNlCi0jZW5kaWYgLyogQ0tfUkVTRU5EICov Ci0gICAgaWYgKG1saXN0KQotICAgICAgc2VuZG1vZGUgPSBTTV9NU0VORDsKLSAgICBlbHNlCi0g ICAgICBzZW5kbW9kZSA9IFNNX1NFTkQ7Ci0jaWZkZWYgTUFDCi0gICAgd2hhdCA9IFdfU0VORDsK LSAgICBzY3JjcmVhdGUoKTsKLSNlbmRpZiAvKiBNQUMgKi8KLSAgICBpZiAobG9jYWwgJiYgcHZb U05EX1NISF0uaXZhbCAhPSAwKSB7IC8qIElmIGluIGxvY2FsIG1vZGUsICovCi0JZGlzcGxhID0g MTsJCQkvKiB0dXJuIG9uIGZpbGUgdHJhbnNmZXIgZGlzcGxheSAqLwotICAgIH0KLSAgICB4ID0g MDsKLQotICB4c2VuZHg6CQkJCS8qIENvbW1vbiBleGl0LCBpbmNsdWRpbmcgZmFpbHVyZSAqLwot ICAgIGRlYnVnKEYxMDEsImRveHNlbmQgc25kc3JjIiwiIixzbmRzcmMpOwotICAgIGZvciAoaSA9 IDA7IGkgPD0gU05EX01BWDsgaSsrKSB7CS8qIEZyZWUgbWFsbG9jJ2QgbWVtb3J5ICovCi0JaWYg KHB2W2ldLnN2YWwpCi0JICBmcmVlKHB2W2ldLnN2YWwpOwotICAgIH0KLSAgICByZXR1cm4oeCk7 Ci19Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYgTk9MT0NBTAotLyogIEQgTyBYIEMg TyBOIE4gIC0tICBDT05ORUNUIGNvbW1hbmQgcGFyc2luZyB3aXRoIHN3aXRjaGVzICovCi0KLSNp ZmRlZiBYTElNSVRTCi0jZGVmaW5lIFhMSU1PUlRSSUdHRVIKLSNlbHNlCi0jaWZkZWYgQ0tfVFJJ R0dFUgotI2RlZmluZSBYTElNT1JUUklHR0VSCi0jZW5kaWYgLyogQ0tfVFJJR0dFUiAqLwotI2Vu ZGlmIC8qICBYTElNSVRTICovCi0KLSNpZmRlZiBDS1RJRExFCi1pbnQgdHRfaWRsZWxpbWl0ID0g MDsJCQkvKiBUZXJtaW5hbCBpZGxlIGxpbWl0ICovCi1pbnQgdHRfaWRsZWFjdCA9IElETEVfUkVU OwkJLyogVGVybWluYWwgaWRsZSBhY3Rpb24gKi8KLSNlbmRpZiAvKiBDS1RJRExFICovCi0KLSNp ZmRlZiBPUzIJCQkJLyogSzk1IG9ubHk6ICovCi1leHRlcm4gaW50Ci0gIHR0X2lkbGVzbmRfdG1v OwkJCS8qICAgSWRsZSBpbnRlcnZhbCAqLwotaW50IHR0X3RpbWVsaW1pdCA9IDA7CQkJLyogICBU aW1lIGxpbWl0LCAwID0gbm9uZSAqLwotZXh0ZXJuIGNoYXIgKgkJCQkvKiBQYXJzZSByZXN1bHRz IC0gc3RyaW5nczogKi8KLSAgdHRfaWRsZXNuZF9zdHI7CQkJLyogICBJZGxlIHN0cmluZyAqLwot I2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgQ0tfVFJJR0dFUgotZXh0ZXJuIGNoYXIgKnR0X3Ry aWdnZXJbXTsKLWV4dGVybiBDSEFSICp0dF90cm1hdGNoW107Ci1leHRlcm4gY2hhciAqdHJpZ2dl cnZhbDsKLXN0YXRpYyBjaGFyICpnX3R0X3RyaWdnZXJbVFJJR0dFUlNdOwotI2VuZGlmIC8qIENL X1RSSUdHRVIgKi8KLQotI2lmZGVmIE9TMgotc3RhdGljIGludCBnX3R0X2lkbGVzbmRfdG1vLCBn X3R0X3RpbWVsaW1pdDsgLyogRm9yIHNhdmluZyBhbmQgcmVzdG9yaW5nICovCi1zdGF0aWMgaW50 IGdfdHRfaWRsZWxpbWl0LCBnX3R0X3NhdmVkID0gMDsKLXN0YXRpYyBjaGFyICogZ190dF9pZGxl c25kX3N0cjsJCS8qIGdsb2JhbCBzZXR0aW5ncyAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi1zdGF0 aWMgc3RydWN0IHN0cmluZ2ludCBwdltDT05OX01BWCsxXTsKLQotVk9JRAotcmVzY29ubigpIHsK LSAgICBpbnQgaTsKLQotI2lmZGVmIE9TMgotICAgIGlmICggZ190dF9zYXZlZCApIHsKLSAgICAg ICAgdHRfaWRsZWxpbWl0ICAgPSBnX3R0X2lkbGVsaW1pdDsKLSAgICAgICAgdHRfaWRsZXNuZF90 bW8gPSBnX3R0X2lkbGVzbmRfdG1vOwotICAgICAgICB0dF90aW1lbGltaXQgICA9IGdfdHRfdGlt ZWxpbWl0OwotICAgICAgICB0dF9pZGxlc25kX3N0ciA9IGdfdHRfaWRsZXNuZF9zdHI7Ci0gICAg ICAgIGdfdHRfc2F2ZWQgPSAwOwotICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIENL X1RSSUdHRVIKLSAgICBmb3IgKGkgPSAwOyBpIDwgVFJJR0dFUlM7IGkrKykKLSAgICAgIHR0X3Ry aWdnZXJbaV0gPSBnX3R0X3RyaWdnZXJbaV07Ci0jZW5kaWYgLyogQ0tfVFJJR0dFUiAqLwotCi0g ICAgZm9yIChpID0gMDsgaSA8PSBDT05OX01BWDsgaSsrKSB7CS8qIEZyZWUgbWFsbG9jJ2QgbWVt b3J5ICovCi0JaWYgKHB2W2ldLnN2YWwpCi0JICBmcmVlKHB2W2ldLnN2YWwpOwotICAgICAgICBw dltpXS5zdmFsID0gTlVMTDsKLSAgICB9Ci19Ci0KLWludAotZG94Y29ubihjeCkgaW50IGN4OyB7 Ci0gICAgaW50IGMsIGksIG47CQkJLyogV29ya2VycyAqLwotICAgIGludCB4LCB5OwotICAgIGlu dCBnZXR2YWwgPSAwOwkJCS8qIFdoZXRoZXIgdG8gZ2V0IHN3aXRjaCB2YWx1ZSAqLwotICAgIGlu dCBhc3luYyA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIE1ha2UgYW4gYXN5bmMgY29ubmVj dCAqLwotICAgIHN0cnVjdCBGREIgc3csIGNtOwkJCS8qIEZEQnMgZm9yIGVhY2ggcGFyc2UgZnVu Y3Rpb24gKi8KLSAgICBleHRlcm4gRklMRSAqIHRmaWxlW107Ci0gICAgZXh0ZXJuIGNoYXIgKiBt YWNwW107Ci0KLSNpZmRlZiBPUzIKLSAgICBnX3R0X2lkbGVzbmRfdG1vID0gdHRfaWRsZXNuZF90 bW87CS8qIFNhdmUgZ2xvYmFsIHNldHRpbmdzICovCi0gICAgZ190dF90aW1lbGltaXQgICA9IHR0 X3RpbWVsaW1pdDsKLSAgICBnX3R0X2lkbGVsaW1pdCAgID0gdHRfaWRsZWxpbWl0OwotICAgIGdf dHRfaWRsZXNuZF9zdHIgPSB0dF9pZGxlc25kX3N0cjsKLSAgICBnX3R0X3NhdmVkID0gMTsKLSNl bmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIENLX1RSSUdHRVIKLSAgICBpZiAoIXR0X3RyaWdnZXJb MF0pIHsJCS8qIEZpcnN0IGluaXRpYWxpemF0aW9uICovCi0JZm9yIChpID0gMTsgaSA8IFRSSUdH RVJTOyBpKyspCi0JICB0dF90cmlnZ2VyW2ldID0gTlVMTDsKLSAgICB9Ci0gICAgZm9yIChpID0g MDsgaSA8IFRSSUdHRVJTOyBpKyspCi0gICAgICBnX3R0X3RyaWdnZXJbaV0gPSB0dF90cmlnZ2Vy W2ldOwotICAgIGlmICh0cmlnZ2VydmFsKSB7Ci0JZnJlZSh0cmlnZ2VydmFsKTsKLQl0cmlnZ2Vy dmFsID0gTlVMTDsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfVFJJR0dFUiAqLwotCi0gICAgZm9yIChp ID0gMDsgaSA8PSBDT05OX01BWDsgaSsrKSB7CS8qIEluaXRpYWxpemUgc3dpdGNoIHZhbHVlcyAq LwotCXB2W2ldLnN2YWwgPSBOVUxMOwkJLyogdG8gbnVsbCBwb2ludGVycyAqLwotCXB2W2ldLml2 YWwgPSAtMTsJCS8qIGFuZCAtMSBpbnQgdmFsdWVzICovCi0JcHZbaV0ud3ZhbCA9IChDS19PRkZf VCktMTsKLSAgICB9Ci0gICAgaWYgKGN4ID09IFhYQ1EpCQkJLyogQ1EgPT0gQ09OTkVDVCAvUVVJ RVRMWSAqLwotICAgICAgcHZbQ09OTl9OVl0uaXZhbCA9IDE7Ci0KLSAgICAvKiBTZXQgdXAgY2hh aW5lZCBwYXJzZSBmdW5jdGlvbnMuLi4gKi8KLQotICAgIGNtZmRiaSgmc3csCQkJCS8qIEZpcnN0 IEZEQiAtIGNvbW1hbmQgc3dpdGNoZXMgKi8KLQkgICBfQ01LRVksCQkJLyogZmNvZGUgKi8KLQkg ICAiU3dpdGNoIiwJCQkvKiBobHBtc2cgKi8KLQkgICAiIiwJCQkJLyogZGVmYXVsdCAqLwotCSAg ICIiLAkJCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotCSAgIG5jb25udGFiLAkJCS8qIGFkZHRs IG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLwotCSAgIDQsCQkJCS8qIGFkZHRsIG51bWVyaWMg ZGF0YSAyOiA0ID0gY21zd2kgKi8KLQkgICB4eHN0cmluZywJCQkvKiBQcm9jZXNzaW5nIGZ1bmN0 aW9uICovCi0JICAgY29ubnRhYiwJCQkvKiBLZXl3b3JkIHRhYmxlICovCi0JICAgJmNtCQkJCS8q IFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KLQkgICApOwotICAgIGNtZmRiaSgmY20sCQkJCS8qIDJu ZCBGREIgLSBDb25maXJtYXRpb24gKi8KLQkgICBfQ01DRk0sCQkJLyogZmNvZGUgKi8KLQkgICAi IiwJCQkJLyogaGxwbXNnICovCi0JICAgIiIsCQkJCS8qIGRlZmF1bHQgKi8KLQkgICAiIiwJCQkJ LyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLQkgICAwLAkJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEg MSAqLwotCSAgIDAsCQkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCi0JICAgTlVMTCwKLQkg ICBOVUxMLAotCSAgIE5VTEwKLQkgICApOwotCi0gICAgd2hpbGUgKDEpIHsJCQkJLyogUGFyc2Ug MCBvciBtb3JlIHN3aXRjaGVzICovCi0JeCA9IGNtZmRiKCZzdyk7CQkJLyogUGFyc2Ugc3dpdGNo IG9yIGNvbmZpcm1hdGlvbiAqLwotCWRlYnVnKEYxMDEsImRveGNvbm4gY21mZGIiLCIiLHgpOwot CWlmICh4IDwgMCkgewkJCS8qIEVycm9yICovCi0JICAgIGlmICh4ID09IC05IHx8IHggPT0gLTIp Ci0JICAgICAgcHJpbnRmKCI/Tm8gc3dpdGNoZXMgbWF0Y2ggLSBcIiVzXCJcbiIsYXRtYnVmKTsK LQkgICAgZ290byB4Y29ubng7CQkvKiBvciByZXBhcnNlIG5lZWRlZCAqLwotCX0KLQlpZiAoY21y ZXN1bHQuZmNvZGUgIT0gX0NNS0VZKQkvKiBCcmVhayBvdXQgaWYgbm90IGEgc3dpdGNoICovCi0J ICBicmVhazsKLQljID0gY21nYnJrKCk7CQkJLyogR2V0IGJyZWFrIGNoYXJhY3RlciAqLwotCWdl dHZhbCA9IChjID09ICc6JyB8fCBjID09ICc9Jyk7IC8qIHRvIHNlZSBob3cgdGhleSBlbmRlZCB0 aGUgc3dpdGNoICovCi0JaWYgKGdldHZhbCAmJiAhKGNtcmVzdWx0LmtmbGFncyAmIENNX0FSRykp IHsKLQkgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBhcmd1bWVudHNcbiIp OwotCSAgICB4ID0gLTk7Ci0JICAgIGdvdG8geGNvbm54OwotCX0KLQlpZiAoIWdldHZhbCAmJiAo Y21na3dmbGdzKCkgJiBDTV9BUkcpKSB7Ci0JICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIHJlcXVp cmVzIGFuIGFyZ3VtZW50XG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0JbiA9IGNtcmVzdWx0 Lm5yZXN1bHQ7CQkvKiBOdW1lcmljIHJlc3VsdCA9IHN3aXRjaCB2YWx1ZSAqLwotCWRlYnVnKEYx MDEsImRveGNvbm4gc3dpdGNoIiwiIixuKTsKLQotCXN3aXRjaCAobikgewkJCS8qIFByb2Nlc3Mg dGhlIHN3aXRjaCAqLwotI2lmZGVmIE9TMgotCSAgY2FzZSBDT05OX0FTOgkJCS8qIEFzeW5jaHJv bm91cyAqLwotICAgICAgICAgICAgcHZbQ09OTl9BU10uaXZhbCA9IDE7Ci0gICAgICAgICAgICBw dltDT05OX1NZXS5pdmFsID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug Q09OTl9TWTogICAgICAgICAgICAgICAgIC8qIFN5bmNocm9ub3VzICovCi0gICAgICAgICAgICBw dltDT05OX1NZXS5pdmFsID0gMTsKLSAgICAgICAgICAgIHB2W0NPTk5fQVNdLml2YWwgPSAwOwot ICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogT1MyICovCi0JICBjYXNlIENPTk5fTlY6CQkJ LyogTm9uLXZlcmJhbCAqLwotCSAgICBwdltuXS5pdmFsID0gMTsKLQkgICAgYnJlYWs7Ci0jaWZk ZWYgWExJTUlUUwotCSAgY2FzZSBDT05OX0lJOgkJCS8qIElkbGUtaW50ZXJ2YWwgKi8KLQkgIGNh c2UgQ09OTl9JTDoJCQkvKiBJZGxlLWxpbWl0ICovCi0JICBjYXNlIENPTk5fVEw6CQkJLyogVGlt ZS1saW1pdCAqLwotCSAgICBpZiAoIWdldHZhbCkgYnJlYWs7Ci0JICAgIGlmICgoeCA9IGNtbnVt KCJTZWNvbmRzIiwiMCIsMTAsJnkseHhzdHJpbmcpKSA8IDApCi0JICAgICAgZ290byB4Y29ubng7 Ci0JICAgIHB2W25dLml2YWwgPSB5OwotCSAgICBicmVhazsKLQkgIGNhc2UgQ09OTl9JUzoJCQkv KiBJZGxlLXN0cmluZyAqLwotI2VuZGlmIC8qIFhMSU1JVFMgKi8KLSNpZmRlZiBDS19UUklHR0VS Ci0JICBjYXNlIENPTk5fVFM6CQkJLyogVHJpZ2dlci1zdHJpbmcgKi8KLSNlbmRpZiAvKiBDS19U UklHR0VSICovCi0jaWZkZWYgWExJTU9SVFJJR0dFUgotCSAgICBpZiAoIWdldHZhbCkgYnJlYWs7 Ci0JICAgIGlmICgoeCA9IGNtZmxkKCJTdHJpbmcgKGVuY2xvc2UgaW4gYnJhY2VzIGlmIGl0IGNv bnRhaW5zIHNwYWNlcykiLAotCQkJICAgIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKLQkJaWYgKHgg PT0gLTMpIHsKLQkJICAgIHByaW50ZigiP1N0cmluZyByZXF1aXJlZFxuIik7Ci0JCSAgICB4ID0g LTk7Ci0JCX0KLQkJZ290byB4Y29ubng7Ci0JICAgIH0KLQkgICAgaWYgKG4gIT0gQ09OTl9UUykK LQkgICAgICBzID0gYnJzdHJpcChzKTsKLQkgICAgaWYgKCh5ID0gc3RybGVuKHMpKSA+IDApIHsK LQkJaWYgKHB2W25dLnN2YWwpIGZyZWUocHZbbl0uc3ZhbCk7Ci0JCXB2W25dLnN2YWwgPSBtYWxs b2MoeSsxKTsKLQkJaWYgKHB2W25dLnN2YWwpIHsKLQkJICAgIHN0cmNweShwdltuXS5zdmFsLHMp OyAvKiBzYWZlICovCi0JCSAgICBwdltuXS5pdmFsID0gMTsKLQkJfQotCSAgICB9Ci0JICAgIGJy ZWFrOwotI2VuZGlmIC8qIFhMSU1PUlRSSUdHRVIgKi8KLQkgIGRlZmF1bHQ6Ci0JICAgIHByaW50 ZigiP1VuZXhwZWN0ZWQgc3dpdGNoIHZhbHVlIC0gJWRcbiIsY21yZXN1bHQubnJlc3VsdCk7Ci0J ICAgIHggPSAtOTsKLQkgICAgZ290byB4Y29ubng7Ci0JfQotICAgIH0KLSAgICBkZWJ1ZyhGMTAx LCJkb3hjb25uIGNtcmVzdWx0LmZjb2RlIiwiIixjbXJlc3VsdC5mY29kZSk7Ci0gICAgaWYgKGNt cmVzdWx0LmZjb2RlICE9IF9DTUNGTSkgewotCXByaW50ZigiP1VuZXhwZWN0ZWQgZnVuY3Rpb24g Y29kZTogJWRcbiIsY21yZXN1bHQuZmNvZGUpOwotCXggPSAtOTsKLQlnb3RvIHhjb25ueDsKLSAg ICB9Ci0KLSAgICAvKiBDb21tYW5kIHdhcyBjb25maXJtZWQgc28gd2UgY2FuIHByZS1wb3AgY29t bWFuZCBsZXZlbC4gKi8KLSAgICAvKiBUaGlzIGlzIHNvIENPTk5FQ1QgbW9kdWxlIHdvbid0IHRo aW5rIHdlJ3JlIGV4ZWN1dGluZyBhIHNjcmlwdCAqLwotICAgIC8qIGlmIENPTk5FQ1Qgd2FzIHRo ZSBmaW5hbCBjb21tYW5kIGluIHRoZSBzY3JpcHQuICovCi0KLSAgICBpZiAoY21kbHZsID4gMCkK LSAgICAgIHByZXBvcCgpOwotCi0jaWZkZWYgT1MyCQkJCS8qIE1ha2UgcmVzdWx0cyBhdmFpbGFi bGUgZ2xvYmFsbHkgKi8KLSAgICBpZiAocHZbQ09OTl9JTF0uaXZhbCA+IC0xKQkJLyogSWRsZSBs aW1pdCAqLwotICAgICAgdHRfaWRsZWxpbWl0ID0gcHZbQ09OTl9JTF0uaXZhbDsKLSAgICBpZiAo cHZbQ09OTl9JSV0uaXZhbCA+IC0xKQkJLyogSWRsZSBsaW1pdCAqLwotICAgICAgdHRfaWRsZXNu ZF90bW8gPSBwdltDT05OX0lJXS5pdmFsOwotICAgIGlmIChwdltDT05OX0lTXS5zdmFsKQkJLyog SWRsZSBzdHJpbmcgKi8KLSAgICAgIGlmICh0dF9pZGxlc25kX3N0ciA9IChjaGFyICopbWFsbG9j KChpbnQpc3RybGVuKHB2W0NPTk5fSVNdLnN2YWwpKzEpKQotCXN0cmNweSh0dF9pZGxlc25kX3N0 cixwdltDT05OX0lTXS5zdmFsKTsgLyogc2FmZSAqLwotICAgIGlmIChwdltDT05OX1RMXS5pdmFs ID4gLTEpCQkvKiBTZXNzaW9uIGxpbWl0ICovCi0gICAgICB0dF90aW1lbGltaXQgPSBwdltDT05O X1RMXS5pdmFsOwotICAgIGFzeW5jID0gKHB2W0NPTk5fQVNdLml2YWwgPiAwIHx8Ci0gICAgICAg ICAgICAgcHZbQ09OTl9TWV0uaXZhbCA8PSAwICYmIGNtZGx2bCA9PSAwKSA/IDEgOiAwOwotI2Vu ZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgQ0tfVFJJR0dFUgotICAgIGlmIChwdltDT05OX1RTXS5z dmFsKQkJLyogVHJpZ2dlciBzdHJpbmdzICovCi0gICAgICBtYWtlbGlzdChwdltDT05OX1RTXS5z dmFsLHR0X3RyaWdnZXIsVFJJR0dFUlMpOwotICAgIGZvciAoaSA9IDA7IGkgPCBUUklHR0VSUzsg aSsrKQkvKiBUcmlnZ2VyIG1hdGNoIHBvaW50ZXJzICovCi0gICAgICB0dF90cm1hdGNoW2ldID0g TlVMTDsKLSAgICBpZiAodHJpZ2dlcnZhbCkgewkJCS8qIFJlc2V0IHRyaWdnZXIgdmFsdWUgKi8K LQlmcmVlKHRyaWdnZXJ2YWwpOwotCXRyaWdnZXJ2YWwgPSBOVUxMOwotICAgIH0KLSNlbmRpZiAv KiBDS19UUklHR0VSICovCi0KLSNpZmRlZiBTU0hDTUQKLS8qCi0gIDIwMTAvMDMvMDEuLi4KLSAg VGhlIHByZXZpb3VzIGNvbm5lY3Rpb24gd2FzIHRocm91Z2ggdGhlIGV4dGVybmFsIHNzaCBjbGll bnQgYW5kIG5vdywgd2l0aAotICB0aGF0IGNvbm5lY3Rpb24gY2xvc2VkLCB0aGUgdXNlciBzYXlz ICJjb25uZWN0IiBhbmQgZXhwZWN0cyBhIG5ldyBjb25uZWN0aW9uCi0gIHRvIGJlIG1hZGUgdG8g dGhlIHNhbWUgaG9zdCwgYmVjYXVzZSB0aGF0J3MgaG93IGFsbCB0aGUgb3RoZXIgY29ubmVjdGlv bgotICBtZXRob2RzIHdvcmssIHNvIChhbmQgdGhpcyBpcyBxdWl0ZSBhIGhhY2spLi4uCi0qLwot ICAgIGlmICghY2tzdHJjbXAoInNzaCAiLHR0bmFtZSw0LDApKSB7CS8qIFByZXZpb3VzICJob3N0 IiB3YXMgInNzaCBibGFoIiAqLwotCV9QUk9UT1RZUCAoaW50IHJlZG9zc2gsICggdm9pZCApICk7 Ci0JZXh0ZXJuIGludCB0dHlmZDsKLQlpZiAodHR5ZmQgPCAwKSB7CQkvKiBBbmQgY29ubmVjdGlv biBpcyBubyBsb25nZXIgb3BlbiAqLwotCSAgICBpbnQgeHg7Ci0JICAgIHh4ID0gcmVkb3NzaCgp OwkJLyogU28gcmVkbyB0aGUgU1NIIGNvbm5lY3Rpb24gKi8KLQkgICAgaWYgKHh4IDwgMCkgcmV0 dXJuKHh4KTsKLQkgICAgZ290byB4Y29ubng7Ci0JfQotICAgIH0KLSNlbmRpZgkvKiBTU0hDTUQg Ki8KLSAgICB4ID0gZG9jb25lY3QoKHB2W0NPTk5fTlZdLml2YWwgPiAwKSA/IDEgOiAwLCBhc3lu Yyk7Ci0gICAgewotCWludCB4eDsKLQlkZWJ1ZyhGMTAxLCJkb3hjb25uIGRvY29uZWN0IHJldHVy bnMiLCIiLHgpOwotCWlmICgoeHggPSB0dGNoaygpKSA8IDApIGRvbG9nZW5kKCk7Ci0JZGVidWco RjEwMSwiZG94Y29ubiB0dGNoayByZXR1cm5zIiwiIix4eCk7Ci0gICAgfQotCi0jaWZkZWYgQ0tf VFJJR0dFUgotICAgIGRlYnVnKEYxMTEsImRveGNvbm4gZG9jb25lY3QgdHJpZ2dlcnZhbCIsdHJp Z2dlcnZhbCx4KTsKLSNlbmRpZiAvKiBDS19UUklHR0VSICovCi0KLSAgeGNvbm54OgotICAgIC8q IEJhY2sgZnJvbSBDT05ORUNUIC0tIFJlc3RvcmUgZ2xvYmFsIHNldHRpbmdzICovCi0KLSAgICBp ZiAoIWFzeW5jKQotICAgICAgcmVzY29ubigpOwotCi0gICAgc3VjY2VzcyA9ICh4ID4gMCkgPyAx IDogMDsKLSAgICByZXR1cm4oeCk7Ci19Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0jaWZkZWYg QUREQ01ECi0vKiBjeCA9PSBYWEFERCBvciBYWFJFTVYgKi8KLS8qIGZjID09IEFERF9CSU4gb3Ig QUREX1RYVCAqLwotc3RhdGljIGludAotZG9hZGQoY3gsZmMpIGludCBjeCwgZmM7IHsKLSNpZmRl ZiBQQVRURVJOUwotICAgIGNoYXIgKiB0bXBbRlRQQVRURVJOU107Ci0gICAgY2hhciAqKnAgPSBO VUxMOwotICAgIGludCBpLCBqLCBrLCBuID0gMCwgeCA9IDAsIGxhc3Q7Ci0KLSNlbmRpZiAvKiBQ QVRURVJOUyAqLwotICAgIGlmIChjeCAhPSBYWEFERCAmJiBjeCAhPSBYWFJFTVYpIHsKLQlwcmlu dGYoIj9VbmV4cGVjdGVkIGZ1bmN0aW9uIGNvZGU6ICVkXG4iLGN4KTsKLQlyZXR1cm4oLTkpOwot ICAgIH0KLSNpZmRlZiBQQVRURVJOUwotICAgIHdoaWxlIChuIDwgRlRQQVRURVJOUykgewkJLyog Q29sbGVjdCBuZXcgcGF0dGVybnMgKi8KLQl0bXBbbl0gPSBOVUxMOwotCWlmICgoeCA9IGNtZmxk KCJQYXR0ZXJuIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKLQkgIGJyZWFrOwotCWNrc3RybmNweShs aW5lLHMsTElOQlVGU0laKTsKLQlzID0gYnJzdHJpcChsaW5lKTsKLQltYWtlc3RyKCYodG1wW24r K10pLHMpOwotICAgIH0KLSAgICBpZiAoeCA9PSAtMykKLSAgICAgIHggPSBjbWNmbSgpOwotICAg IGlmICh4IDwgMCkKLSAgICAgIGdvdG8geGRvYWRkOwotICAgIHAgPSAoZmMgPT0gQUREX0JJTikg PyBiaW5wYXR0ZXJucyA6IHR4dHBhdHRlcm5zOyAvKiBXaGljaCBsaXN0ICovCi0gICAgbGFzdCA9 IDA7Ci0gICAgZm9yIChpID0gMDsgaSA8IEZUUEFUVEVSTlM7IGkrKykgeyAvKiBGaW5kIGxhc3Qg b25lIGluIGxpc3QgKi8KLQlpZiAoIXBbaV0pIHsKLQkgICAgbGFzdCA9IGk7Ci0JICAgIGJyZWFr OwotCX0KLSAgICB9Ci0gICAgaWYgKGN4ID09IFhYQUREKSB7CQkJLyogQWRkaW5nICovCi0JaWYg KGxhc3QgKyBuID4gRlRQQVRURVJOUykgewkvKiBDaGVjayBpZiB0b28gbWFueSAqLwotCSAgICBw cmludGYoIj9Ub28gbWFueSBwYXR0ZXJucyAtICVkIGlzIHRoZSBtYXhpbXVtXG4iLCBGVFBBVFRF Uk5TKTsKLQkgICAgZ290byB4ZG9hZGQ7Ci0JfQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsg aSsrKSB7ICAgICAgICAvKiBDb3B5IGluIHRoZSBuZXcgb25lcy4gKi8KLSAgICAgICAgICBmb3Ig KGogPSAwLCB4ID0gMDsgeCA9PSAwICYmIGogPCBsYXN0IDsgaisrICkKLSAgICAgICAgICAgIHgg PSAhY2tzdHJjbXAodG1wW2ldLHBbal0sLTEsZmlsZWNhc2UpOyAvKiBtYXRjaCAqLwotICAgICAg ICAgIGlmICh4ID09IDApCi0gICAgICAgICAgICBtYWtlc3RyKCYocFtsYXN0KytdKSx0bXBbaV0p OwotICAgICAgICB9Ci0gICAgICAgIG1ha2VzdHIoJihwW2xhc3RdKSxOVUxMKTsJLyogTnVsbC10 ZXJtaW5hdGUgdGhlIGxpc3QgKi8KLSAgICAgICAgeCA9IDE7Ci0gICAgICAgIGdvdG8geGRvYWRk OyAgICAgICAgICAgICAgICAgICAgLyogRG9uZSAqLwotICAgIH0gZWxzZSBpZiAoY3ggPT0gWFhS RU1WKSB7CQkvKiBSZW1vdmUgc29tZXRoaW5nKHMpICovCi0JaW50IGosIGs7Ci0JaWYgKGxhc3Qg PT0gMCkJCQkgICAgICAgIC8qIExpc3QgaXMgZW1wdHkgKi8KLQkgIGdvdG8geGRvYWRkOwkJCSAg ICAgICAgLyogTm90aGluZyB0byByZW1vdmUgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7 CSAgICAgICAgLyogaSA9IFBhdHRlcm5zIHRoZXkgdHlwZWQgKi8KLQkgICAgZm9yIChqID0gMDsg aiA8IGxhc3Q7IGorKykgeyAgICAgICAgLyogaiA9IFBhdHRlcm5zIGluIGxpc3QgKi8KLQkJLyog Q2hhbmdlIHRoaXMgdG8gY2tzdHJjbXAoKS4uLiAqLwotCQlpZiAoZmlsZWNhc2UpCi0gICAgICAg ICAgICAgICAgICB4ID0gIWNrc3RyY21wKHRtcFtpXSxwW2pdLC0xLGZpbGVjYXNlKTsgLyogbWF0 Y2ggKi8KLQkJZWxzZQotCQkgIHggPSBja3N0cmNtcCh0bXBbaV0scFtqXSwtMSwwKTsgLyogQ2Fz ZS1pbmRlcGVuZGVudCBtYXRjaCAqLwotCQlpZiAoeCkgewkgICAgCSAgICAgICAgLyogVGhpcyBv bmUgbWF0Y2hlcyAqLwotCQkgICAgbWFrZXN0cigmKHBbal0pLE5VTEwpOyAgICAgIC8qIEZyZWUg aXQgKi8KLQkJICAgIGZvciAoayA9IGo7IGsgPCBsYXN0OyBrKyspICAvKiBNb3ZlIHRoZSByZXN0 IHVwICovCi0JCSAgICAgIHBba10gPSBwW2srMV07Ci0JCSAgICBwW2tdID0gTlVMTDsJICAgICAg ICAvKiBFcmFzZSBsYXN0IG9uZSAqLwotCQkgICAgaWYgKCFwW2tdKQotCQkgICAgICBicmVhazsK LQkJfQotCSAgICB9Ci0JfQotICAgIH0KLSAgeGRvYWRkOgkJCQkvKiBDb21tb24gZXhpdCAqLwot ICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCi0gICAgICBpZiAodG1wW2ldKQotCWZyZWUodG1w W2ldKTsKLSAgICByZXR1cm4oeCk7Ci0jZW5kaWYgLyogUEFUVEVSTlMgKi8KLX0KLQotLyogQURE IFNFTkQtTElTVCAqLwotCi1zdGF0aWMgaW50Ci1hZGRzZW5kKGN4KSBpbnQgY3g7IHsKLSNpZm5k ZWYgTk9NU0VORAotICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiIGZ0dGFiW107Ci0gICAgZXh0ZXJu IGludCBuZnR0eXA7Ci0gICAgc3RydWN0IGZpbGVsaXN0ICogZmxwOwotICAgIGNoYXIgKiBmbW9k ZSA9ICIiOwotICAgIGludCB4bW9kZSA9IDA7Ci0gICAgaW50IHhiaW5hcnkgPSAwOwotI2VuZGlm IC8qIE5PTVNFTkQgKi8KLQotI2lmZGVmIE5PTVNFTkQKLSAgICBwcmludGYoIj9Tb3JyeSwgQURE L1JFTU9WRSBTRU5ELUxJU1Qgbm90IGF2YWlsYWJsZS5cbiIpOwotICAgIHJldHVybigtOSk7Ci0j ZW5kaWYgLyogTk9NU0VORCAqLwotICAgIGlmIChjeCA9PSBYWFJFTVYpIHsKLQlwcmludGYoIj9T b3JyeSwgUkVNT1ZFIFNFTkQtTElTVCBub3QgaW1wbGVtZW50ZWQgeWV0LlxuIik7Ci0JcmV0dXJu KC05KTsKLSAgICB9Ci0jaWZuZGVmIE5PTVNFTkQKLSNpZm5kZWYgWFlaX0lOVEVSTkFMCi0gICAg aWYgKHByb3RvY29sICE9IFBST1RPX0spIHsKLSAgICAgICBwcmludGYoIj9Tb3JyeSwgQUREIFNF TkQtTElTVCBkb2VzIG5vdCB3b3JrIHdpdGggZXh0ZXJuYWwgcHJvdG9jb2xzXG4iKTsKLSAgICAg ICByZXR1cm4oLTkpOwotICAgIH0KLSNlbmRpZiAvKiBYWVpfSU5URVJOQUwgKi8KLQotICAgIHgg PSBjbWlmaSgiRmlsZSBzcGVjaWZpY2F0aW9uIHRvIGFkZCIsIiIsICZzLCZ5LHh4c3RyaW5nKTsK LSAgICBpZiAoeCA8IDApIHsKLQlpZiAoeCA9PSAtMykgewotCSAgICBwcmludGYoIj9BIGZpbGUg c3BlY2lmaWNhdGlvbiBpcyByZXF1aXJlZFxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfSBlbHNl Ci0JICByZXR1cm4oeCk7Ci0gICAgfQotICAgIGNrc3RybmNweSh0bXBidWYscyxUTVBCVUZTSVop OwotICAgIHMgPSB0bXBidWY7Ci0gICAgaWYgKGZpbGVzaW5saXN0ID09IDApCQkvKiBUYWtlIGNh cmUgb2YgXHYoZmlsZXNwZWMpICovCi0gICAgICBmc3BlY1swXSA9IE5VTDsKLSAgICB6Zm5xZnAo cyxMSU5CVUZTSVosbGluZSk7Ci0gICAgcyA9IGxpbmU7Ci0gICAgaWYgKCgoaW50KXN0cmxlbihm c3BlYykgKyAoaW50KXN0cmxlbihzKSArIDEpIDwgZnNwZWNsZW4pIHsKLQlzdHJjYXQoZnNwZWMs cyk7CQkvKiBzYWZlICovCi0Jc3RyY2F0KGZzcGVjLCIgIik7CQkvKiBzYWZlICovCi0gICAgfSBl bHNlCi0gICAgICBwcmludGYoIldBUk5JTkcgLSBcXHYoZmlsZXNwZWMpIGJ1ZmZlciBvdmVyZmxv d1xuIik7Ci0KLQotICAgIHhiaW5hcnkgPSBiaW5hcnk7Ci0gICAgaWYgKChwYXR0ZXJucyB8fCBm aWxlcGVlaykJCS8qIEZJTEUgUEFUVEVSTlMgb3IgU0NBTiBpcyBPTiAqLwotI2lmZGVmIENLX0xB QkVMRUQKLQkmJiBiaW5hcnkgIT0gWFlGVF9MCQkvKiBBbmQgbm90IGlmIEZJTEUgVFlQRSBMQUJF TEVEICovCi0jZW5kaWYgLyogQ0tfTEFCRUxFRCAqLwotI2lmZGVmIFZNUwotCSYmIGJpbmFyeSAh PSBYWUZUX0kJCS8qIG9yIEZJTEUgVFlQRSBJTUFHRSAqLwotI2VuZGlmIC8qIFZNUyAqLwotCSkg ewotCWludCBrLCB4OwotCXggPSAtMTsKLQlrID0gc2NhbmZpbGUobGluZSwmeCxuc2NhbmZpbGUp OwotCWlmIChrID4gMCkgeGJpbmFyeSA9IChrID09IEZUX0JJTikgPyBYWUZUX0IgOiBYWUZUX1Q7 Ci0gICAgfQotICAgIGZtb2RlID0gZ2Ztb2RlKHhiaW5hcnksMCk7Ci0gICAgaWYgKCh4ID0gY21r ZXkoZnR0YWIsbmZ0dHlwLAotCQkgICAidHlwZSBvZiBmaWxlIHRyYW5zZmVyIiwgZm1vZGUsIHh4 c3RyaW5nKSkgPCAwKQotICAgICAgcmV0dXJuKHgpOwotICAgIHhtb2RlID0geDsKLQotICAgIGNt YXJnMiA9ICIiOwotICAgIGlmICgoeCA9IGNtZmxkKHkgPwotICAiXG5Bcy1uYW1lIHRlbXBsYXRl IGNvbnRhaW5pbmcgcmVwbGFjZW1lbnQgdmFyaWFibGVzIHN1Y2ggYXMgXFx2KGZpbGVuYW1lKSIg OgotICAiTmFtZSB0byBzZW5kIGl0IHdpdGgiLCAiIiwmcyxOVUxMKSkgPCAwKQotICAgICAgaWYg KHggIT0gLTMpCi0JcmV0dXJuKHgpOwotI2lmbmRlZiBOT1NQTAotICAgIGlmICh5ICYmICpzKSB7 Ci0JY2hhciAqIHAgPSB0bXBidWY7Ci0JeCA9IFRNUEJVRlNJWjsKLQl6enN0cmluZyhzLCZwLCZ4 KTsKLQlpZiAoIXN0cmNtcCh0bXBidWYscykpIHsKLQkgICAgcHJpbnRmKAotICAiP0FzLW5hbWUg Zm9yIGZpbGUgZ3JvdXAgbXVzdCBjb250YWluIHZhcmlhYmxlcyBzdWNoIGFzIFxcdihmaWxlbmFt ZSlcbiIKLQkJICAgKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0gICAgfQotI2VuZGlmIC8qIE5P U1BMICovCi0gICAgY2tzdHJuY3B5KHRtcGJ1ZixzLFRNUEJVRlNJWik7Ci0gICAgY21hcmcyID0g dG1wYnVmOwotCi0gICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAgcmV0dXJuKHgpOwot ICAgIGZscCA9IChzdHJ1Y3QgZmlsZWxpc3QgKikgbWFsbG9jKHNpemVvZihzdHJ1Y3QgZmlsZWxp c3QpKTsKLSAgICBpZiAoZmxwKSB7Ci0JaWYgKGZpbGV0YWlsKQotCSAgZmlsZXRhaWwtPmZsX25l eHQgPSBmbHA7Ci0JZmlsZXRhaWwgPSBmbHA7Ci0JaWYgKCFmaWxlaGVhZCkKLQkgIGZpbGVoZWFk ID0gZmxwOwotCXggPSAoaW50KSBzdHJsZW4obGluZSk7CS8qIExlbmd0aCBvZiBmaWxlbmFtZSAq LwotCXMgPSAoY2hhciAqKSBtYWxsb2MoeCArIDEpOwotCWlmIChzKSB7Ci0JICAgIHN0cmNweShz LGxpbmUpOwkJLyogc2FmZSAqLwotCSAgICBmbHAtPmZsX25hbWUgPSBzOwotCSAgICBmbHAtPmZs X21vZGUgPSB4bW9kZTsKLQkgICAgeCA9IChpbnQpIHN0cmxlbihjbWFyZzIpOwkvKiBMZW5ndGgg b2YgYXMtbmFtZSAqLwotCSAgICBpZiAoeCA8IDEpIHsKLQkJZmxwLT5mbF9hbGlhcyA9IE5VTEw7 Ci0JICAgIH0gZWxzZSB7Ci0JCXMgPSAoY2hhciAqKSBtYWxsb2MoeCArIDEpOwotCQlpZiAocykg ewotCQkgICAgc3RyY3B5KHMsY21hcmcyKTsJLyogc2FmZSAqLwotCQkgICAgZmxwLT5mbF9hbGlh cyA9IHM7Ci0JCX0gZWxzZSB7Ci0JCSAgICBwcmludGYoIlNvcnJ5LCBjYW4ndCBhbGxvY2F0ZSBz cGFjZSBmb3IgYXMtbmFtZSIpOwotCQkgICAgcmV0dXJuKC05KTsKLQkJfQotCSAgICB9Ci0JICAg IGZscC0+ZmxfbmV4dCA9IE5VTEw7Ci0JICAgIGZpbGVzaW5saXN0Kys7CQkvKiBDb3VudCB0aGlz IG5vZGUgKi8KLQkgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsJLyogRmluaXNoZWQgYWRkaW5nIHRo aXMgbm9kZSAqLwotCX0gZWxzZSB7Ci0JICAgIHByaW50ZigiU29ycnksIGNhbid0IGFsbG9jYXRl IHNwYWNlIGZvciBuYW1lIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotICAgIH0gZWxzZSB7Ci0J cHJpbnRmKCJTb3JyeSwgY2FuJ3QgYWxsb2NhdGUgZmlsZSBsaXN0IG5vZGUiKTsKLQlyZXR1cm4o LTkpOwotICAgIH0KLSNlbmRpZiAvKiBOT01TRU5EICovCi19Ci0jZW5kaWYgLyogQUREQ01EICov Ci0KLSNpZm5kZWYgTk9IVFRQCQkJCS8qIEhUVFAgb3BzLi4uICovCi0jaWZkZWYgVENQU09DS0VU Ci0jZGVmaW5lIEhUVFBfR0VUIDAJCQkvKiBHRVQgKi8KLSNkZWZpbmUgSFRUUF9QVVQgMQkJCS8q IFBVVCAqLwotI2RlZmluZSBIVFRQX1BPUyAyCQkJLyogUE9TVCAqLwotI2RlZmluZSBIVFRQX0lE WCAzCQkJLyogSU5ERVggKi8KLSNkZWZpbmUgSFRUUF9IRUQgNCAgICAgICAgICAgICAgICAgICAg ICAvKiBIRUFEICovCi0jZGVmaW5lIEhUVFBfREVMIDUgICAgICAgICAgICAgICAgICAgICAgLyog REVMRVRFICovCi0jZGVmaW5lIEhUVFBfQ09OIDYgICAgICAgICAgICAgICAgICAgICAgLyogQ09O TkVDVCAqLwotI2RlZmluZSBIVFRQX09QTiA3ICAgICAgICAgICAgICAgICAgICAgIC8qIE9QRU4g Ki8KLSNkZWZpbmUgSFRUUF9DTFMgOCAgICAgICAgICAgICAgICAgICAgICAvKiBDTE9TRSAqLwot Ci1zdGF0aWMgc3RydWN0IGtleXRhYiBodHRwdGFiW10gPSB7Ci0gICAgeyAiY2xvc2UiLCAgIEhU VFBfQ0xTLCAwIH0sCi0gICAgeyAiY29ubmVjdCIsIEhUVFBfQ09OLCAwIH0sCi0gICAgeyAiZGVs ZXRlIiwgIEhUVFBfREVMLCAwIH0sCi0gICAgeyAiZ2V0IiwgICAgIEhUVFBfR0VULCAwIH0sCi0g ICAgeyAiaGVhZCIsICAgIEhUVFBfSEVELCAwIH0sCi0gICAgeyAiaW5kZXgiLCAgIEhUVFBfSURY LCAwIH0sCi0gICAgeyAib3BlbiIsICAgIEhUVFBfT1BOLCAwIH0sCi0gICAgeyAicHV0IiwgICAg IEhUVFBfUFVULCAwIH0sCi0gICAgeyAicG9zdCIsICAgIEhUVFBfUE9TLCAwIH0KLX07Ci1zdGF0 aWMgaW50IG5odHRwdGFiID0gc2l6ZW9mKGh0dHB0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKTsK LQotLyogSFRUUCBzd2l0Y2hlcyAqLwotI2RlZmluZSBIVF9TV19BRyAwCQkJLyogL0FHRU5UICov Ci0jZGVmaW5lIEhUX1NXX0hEIDEJCQkvKiAvSEVBREVSICovCi0jZGVmaW5lIEhUX1NXX1VTIDIJ CQkvKiAvVVNFUiAqLwotI2RlZmluZSBIVF9TV19QVyAzCQkJLyogL1BBU1NXT1JEICovCi0jZGVm aW5lIEhUX1NXX0FSIDQgICAgICAgICAgICAgICAgICAgICAgLyogL0FSUkFZICovCi0jZGVmaW5l IEhUX1NXX1RQIDUgICAgICAgICAgICAgICAgICAgICAgLyogL1RPU0NSRUVOICovCi0KLXN0YXRp YyBzdHJ1Y3Qga2V5dGFiIGh0dHBzd3RhYltdID0gewotICAgIHsgIi9hZ2VudCIsICAgIEhUX1NX X0FHLCBDTV9BUkcgfSwKLSNpZm5kZWYgTk9TUEwKLSAgICB7ICIvYXJyYXkiLCAgICBIVF9TV19B UiwgQ01fQVJHIH0sCi0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICB7ICIvaGVhZGVyIiwgICBIVF9T V19IRCwgQ01fQVJHIH0sCi0gICAgeyAiL3Bhc3N3b3JkIiwgSFRfU1dfUFcsIENNX0FSRyB9LAot ICAgIHsgIi90b3NjcmVlbiIsIEhUX1NXX1RQLCAwIH0sCi0gICAgeyAiL3VzZXIiLCAgICAgSFRf U1dfVVMsIENNX0FSRyB9LAotICAgIHsgIiIsIDAsIDAgfQotfTsKLXN0YXRpYyBpbnQgbmh0dHBz d3RhYiA9IHNpemVvZihodHRwc3d0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKSAtIDE7Ci0KLS8q IEhUVFAgUFVUL1BPU1Qgc3dpdGNoZXMgKi8KLSNkZWZpbmUgSFRfUFBfTVQgMAkJCS8qIC9NSU1F LVRZUEUgKi8KLQotc3RhdGljIHN0cnVjdCBrZXl0YWIgaHR0cHB0YWJbXSA9IHsKLSAgICB7ICIv bWltZS10eXBlIiwgSFRfUFBfTVQsIENNX0FSRyB9LAotICAgIHsgIiIsIDAsIDAgfQotfTsKLXN0 YXRpYyBpbnQgbmh0dHBwdGFiID0gc2l6ZW9mKGh0dHBwdGFiKS9zaXplb2Yoc3RydWN0IGtleXRh YikgLSAxOwotCi0jZGVmaW5lIEhUVFBfTUFYSERSIDgKLQotc3RhdGljIGludAoteGRvaHR0cChh Y3Rpb24sIGxmaWxlLCByZiwgZGZpbGUsIGFnZW50LCBoZHIsIHVzZXIsIHBhc3MsIG1pbWUsIGFy cmF5LCB0eXBlKQotICAgIGludCBhY3Rpb247Ci0gICAgY2hhciAqbGZpbGUsICpyZiwgKmRmaWxl LCAqYWdlbnQsICpoZHIsICp1c2VyLCAqcGFzcywgKm1pbWUsIGFycmF5OwotICAgIGludCB0eXBl OwotLyogeGRvaHR0cCAqLyB7Ci0gICAgaW50IGksIHJjID0gMDsKLSAgICBjaGFyICogaGRybGlz dFtIVFRQX01BWEhEUl07Ci0gICAgY2hhciByZmlsZVtDS01BWFBBVEgrMV07Ci0gICAgZXh0ZXJu IGludCBodHRwZmQ7Ci0KLSAgICAvKiBDaGVjayBmb3IgYSB2YWxpZCBzdGF0ZSB0byBleGVjdXRl IHRoZSBjb21tYW5kICovCi0gICAgaWYgKGluc2VydmVyKSB7Ci0gICAgICAgIHByaW50ZigiP1Ro ZSBIVFRQIGNvbW1hbmQgbWF5IG5vdCBiZSB1c2VkIGZyb20gdGhlIElLU1xyXG4iKTsKLSAgICB9 IGVsc2UgaWYgKGh0dHBmZCA9PSAtMSkgewotICAgICAgICBpZiAoaHR0cF9yZW9wZW4oKSA8IDAp Ci0JICBwcmludGYoIj9ObyBjb25uZWN0aW9uXG4iKTsKLSAgICAgICAgZWxzZQotCSAgcmMgPSAx OwotICAgIH0gZWxzZSB7Ci0JcmMgPSAxOwotICAgIH0KLQotICAgIC8qIElmIHRoZSBjb21tYW5k IGlzIG5vdCB2YWxpZCwgZXhpdCB3aXRoIGZhaWx1cmUgKi8KLSAgICBpZiAocmMgPT0gMCkKLSAg ICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLQotICAgIGlmIChhY3Rpb24gIT0gSFRUUF9DT04g JiYgcmZbMF0gIT0gJy8nKSB7Ci0gICAgICAgIHJmaWxlWzBdID0gJy8nOwotICAgICAgICBja3N0 cm5jcHkoJnJmaWxlWzFdLHJmLENLTUFYUEFUSCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2tz dHJuY3B5KHJmaWxlLHJmLENLTUFYUEFUSCk7Ci0gICAgfQotICAgIGZvciAoaSA9IDA7IGkgPCBI VFRQX01BWEhEUjsgaSsrKQkvKiBJbml0aWFsaXplIGhlYWRlciBsaXN0ICovCi0gICAgICBoZHJs aXN0W2ldID0gTlVMTDsKLSAgICBtYWtlbGlzdChoZHIsaGRybGlzdCxIVFRQX01BWEhEUik7CS8q IE1ha2UgaGVhZGVyIGxpc3QgKi8KLQotI2lmZGVmIEJFVEFERUJVRwotICAgIGZvciAoaSA9IDA7 IGkgPCBuaHR0cHRhYjsgaSsrKQkvKiBGaW5kIGFjdGlvbiBrZXl3b3JkICovCi0gICAgICBpZiAo aHR0cHRhYltpXS5rd3ZhbCA9PSBhY3Rpb24pCi0JYnJlYWs7Ci0gICAgaWYgKGkgPT0gbmh0dHB0 YWIpIHsJCS8qIFNob3VsZG4ndCBoYXBwZW4uLi4gKi8KLQlwcmludGYoIj9JbnZhbGlkIGFjdGlv biAtICVkXG4iLGFjdGlvbik7Ci0JcmV0dXJuKDApOwkJCS8qIEZhaWx1cmUgKi8KLSAgICB9Ci0K LSAgICBwcmludGYoIkhUVFAgYWN0aW9uOiAgJXNcbiIsaHR0cHRhYltpXS5rd2QpOwotICAgIHBy aW50ZigiIEFnZW50OiAgICAgICAlc1xuIixhZ2VudCA/IGFnZW50IDogIihudWxsKSIpOwotCi0g ICAgaWYgKGhkcmxpc3RbMV0pIHsKLQlwcmludGYoIiBIZWFkZXIgbGlzdDogMS4gJXNcbiIsaGRy bGlzdFswXSk7Ci0JZm9yIChpID0gMTsgaSA8IEhUVFBfTUFYSERSICYmIGhkcmxpc3RbaV07IGkr KykKLQkgIHByaW50ZigiJTE1ZC4gJXNcbiIsaSsxLGhkcmxpc3RbaV0pOwotICAgIH0gZWxzZQot ICAgICAgcHJpbnRmKCIgSGVhZGVyOiAgICAgICVzXG4iLGhkcmxpc3RbMF0gPyBoZHJsaXN0WzBd IDogIihudWxsKSIpOwotCi0gICAgcHJpbnRmKCIgVXNlcjogICAgICAgICVzXG4iLHVzZXIgPyB1 c2VyIDogIihudWxsKSIpOwotI2lmZGVmIENPTU1FTlQKLSAgICBwcmludGYoIiBQYXNzd29yZDog ICAgJXNcbiIscGFzcyA/IHBhc3MgOiAiKG51bGwpIik7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwot Ci0jaWZuZGVmIE5PU1BMCi0gICAgaWYgKGFycmF5KQotICAgICAgcHJpbnRmKCIgQXJyYXk6ICAg ICAgIFxcJSUlY1tdXG4iLCBhcnJheSk7Ci0gICAgZWxzZQotICAgICAgcHJpbnRmKCIgQXJyYXk6 ICAgICAgIChub25lKVxuIik7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotICAgIGlmIChhY3Rpb24g PT0gSFRUUF9QVVQgfHwgYWN0aW9uID09IEhUVFBfUE9TKQotICAgICAgcHJpbnRmKCIgTWltZS10 eXBlOiAgICVzXG4iLG1pbWUgPyBtaW1lIDogIihudWxsKSIpOwotCi0gICAgcHJpbnRmKCIgTG9j YWwgZmlsZTogICVzXG4iLGxmaWxlID8gbGZpbGUgOiAiKG51bGwpIik7Ci0gICAgcHJpbnRmKCIg UmVtb3RlIGZpbGU6ICVzXG4iLHJmaWxlID8gcmZpbGUgOiAiKG51bGwpIik7Ci0gICAgcHJpbnRm KCIgRGVzdGluYXRpb24gZmlsZTogJXNcbiIsZGZpbGUgPyBkZmlsZSA6ICIobnVsbCkiKTsKLSNl bmRpZiAvKiBCRVRBREVCVUcgKi8KLQotICAgIC8qIFRoZSBodHRwX3h4eHgoKSBmdW5jdGlvbnMg cmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZSAqLwotICAgIHN3aXRjaCAoYWN0aW9u KSB7Ci0gICAgICBjYXNlIEhUVFBfQ09OOiB7Ci0JICBleHRlcm4gaW50IHR0eWZkOwotCSAgcmMg PSBodHRwX2Nvbm5lY3QoaHR0cGZkLGFnZW50LGhkcmxpc3QsdXNlcixwYXNzLGFycmF5LHJmaWxl KTsKLQkgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBIVFRQX0RFTDoKLSAgICAgICAgcmMg PSBodHRwX2RlbGV0ZShhZ2VudCxoZHJsaXN0LHVzZXIscGFzcyxhcnJheSxyZmlsZSk7Ci0gICAg ICAgIGJyZWFrOwotICAgICAgY2FzZSBIVFRQX0dFVDoKLSAgICAgICAgcmMgPSBodHRwX2dldChh Z2VudCxoZHJsaXN0LHVzZXIscGFzcyxhcnJheSxsZmlsZSxyZmlsZSx0eXBlKTsKLSAgICAgICAg YnJlYWs7Ci0gICAgICBjYXNlIEhUVFBfSEVEOgotICAgICAgICByYyA9IGh0dHBfaGVhZChhZ2Vu dCxoZHJsaXN0LHVzZXIscGFzcyxhcnJheSxsZmlsZSxyZmlsZSx0eXBlKTsKLSAgICAgICAgYnJl YWs7Ci0gICAgICBjYXNlIEhUVFBfUFVUOgotICAgICAgICByYyA9IGh0dHBfcHV0KGFnZW50LGhk cmxpc3QsbWltZSx1c2VyLHBhc3MsYXJyYXksbGZpbGUscmZpbGUsZGZpbGUsCi0JCSAgICAgIHR5 cGUpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgSFRUUF9QT1M6Ci0gICAgICAgIHJjID0g aHR0cF9wb3N0KGFnZW50LGhkcmxpc3QsbWltZSx1c2VyLHBhc3MsYXJyYXksbGZpbGUscmZpbGUs ZGZpbGUsCi0JCSAgICAgICB0eXBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEhUVFBf SURYOgotICAgICAgICByYyA9IGh0dHBfaW5kZXgoYWdlbnQsaGRybGlzdCx1c2VyLHBhc3MsYXJy YXksbGZpbGUscmZpbGUsdHlwZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAg ICAgICAgcmMgPSAtMTsKLSAgICB9Ci0gICAgcmV0dXJuKHJjID09IDAgPyAxIDogMCk7CSAgICAg ICAgLyogU3VjY2VzcyBpcyBzZXQgYnkgY2FsbGVyICovCi19Ci0jZW5kaWYgLyogVENQU09DS0VU ICovCi0jZW5kaWYgLyogTk9IVFRQICovCi0KLSNpZm5kZWYgTk9TUEwJCQkJLyogQVJSQVkgb3Bz Li4uICovCi1zdGF0aWMgc3RydWN0IGtleXRhYiBhcnJheXRhYltdID0gewotICAgIHsgImNsZWFy IiwgICAgIEFSUl9DTFIsIDAgfSwKLSAgICB7ICJjb3B5IiwgICAgICBBUlJfQ1BZLCAwIH0sCi0g ICAgeyAiZGNsIiwgICAgICAgQVJSX0RDTCwgQ01fSU5WIH0sCi0gICAgeyAiZGVjbGFyZSIsICAg QVJSX0RDTCwgMCB9LAotICAgIHsgImRlc3Ryb3kiLCAgIEFSUl9EU1QsIENNX0lOViB9LAotICAg IHsgImVxdWF0ZSIsICAgIEFSUl9FUVUsIENNX0lOViB9LAotICAgIHsgImxpbmsiLCAgICAgIEFS Ul9FUVUsIDAgfSwKLSAgICB7ICJyZXNpemUiLCAgICBBUlJfUlNaLCAwIH0sCi0gICAgeyAic2V0 IiwgICAgICAgQVJSX1NFVCwgMCB9LAotI2lmbmRlZiBOT1NIT1cKLSAgICB7ICJzaG93IiwgICAg ICBBUlJfU0hPLCAwIH0sCi0jZW5kaWYgLyogTk9TSE9XICovCi0gICAgeyAic29ydCIsICAgICAg QVJSX1NSVCwgMCB9LAotICAgIHsgInVuZGVjbGFyZSIsIEFSUl9EU1QsIDAgfSwKLSAgICB7ICIi LCAwLCAwIH0KLX07Ci1zdGF0aWMgaW50IG5hcnJheXRhYiA9IHNpemVvZihhcnJheXRhYikvc2l6 ZW9mKHN0cnVjdCBrZXl0YWIpIC0gMTsKLQotI2lmZGVmIENLTEVBUk4KLXN0YXRpYyBzdHJ1Y3Qg a2V5dGFiIGxlYXJuc3dpW10gPSB7Ci0gICAgeyAiL2Nsb3NlIiwgICAgMiwgMCB9LAotICAgIHsg Ii9vZmYiLCAgICAgIDAsIDAgfSwKLSAgICB7ICIvb24iLCAgICAgICAxLCAwIH0KLX07Ci0jZW5k aWYgLyogQ0tMRUFSTiAqLwotCi1pbnQKLWFycmF5aXRvYSh4KSBpbnQgeDsgewkJCS8qIEFycmF5 IGluZGV4IHRvIGFycmF5IGxldHRlciAqLwotICAgIGlmICh4ID09IDEpCi0gICAgICByZXR1cm4o NjQpOwotICAgIGVsc2UgaWYgKHggPCAwIHx8IHggPiAoMTIyIC0gQVJSQVlCQVNFKSkKLSAgICAg IHJldHVybigtMSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHggKyBBUlJBWUJBU0UpOwotfQot Ci1pbnQKLWFycmF5YXRvaShjKSBpbnQgYzsgewkJCS8qIEFycmF5IGxldHRlciB0byBhcnJheSBp bmRleCAqLwotICAgIGlmIChjID09IDY0KQotICAgICAgYyA9IDk2OwotICAgIGlmIChjID4gNjMg JiYgYyA8IDkxKQotICAgICAgYyArPSAzMjsKLSAgICBpZiAoYyA8IEFSUkFZQkFTRSB8fCBjID4g MTIyKQotICAgICAgcmV0dXJuKC0xKTsKLSAgICByZXR1cm4oYyAtIEFSUkFZQkFTRSk7Ci19Ci0K LXN0YXRpYyBpbnQJCQkJLyogRGVjbGFyZSBhbiBhcnJheSAqLwotZG9kY2woY3gpIGludCBjeDsg ewotICAgIGludCBpLCBuLCB2LCBsbywgaGksIHJjID0gMDsKLSAgICBpbnQgaXNkeW5hbWljID0g MDsKLSAgICBjaGFyIHRtcGJ1Zls2NF07Ci0gICAgY2hhciAqKiBwID0gTlVMTDsKLSAgICBjaGFy IHRtcFs2NF07CQkJLyogTG9jYWwgdGVtcG9yYXJ5IHN0cmluZyBidWZmZXIgKi8KLSAgICBpZiAo KHkgPSBjbWZsZCgiQXJyYXkgbmFtZSIsIiIsJnMsTlVMTCkpIDwgMCkgeyAvKiBQYXJzZSBhcnJh eSBuYW1lICovCi0JaWYgKHkgPT0gLTMpIHsKLQkgICAgcHJpbnRmKCI/QXJyYXkgbmFtZSByZXF1 aXJlZFxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfSBlbHNlIHJldHVybih5KTsKLSAgICB9Ci0g ICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOwotICAgIHMgPSBsaW5lOwotICAgIHggPSBh cnJheWJvdW5kcyhzLCZsbywmaGkpOwkJLyogQ2hlY2sgc3ludGF4IGFuZCBnZXQgYm91bmRzICov Ci0gICAgZGVidWcoRjExMSwiZG9kY2wgYXJyYXlib3VuZHMiLHMseCk7Ci0gICAgaWYgKHggPCAw KSB7CQkJLyogRXJyb3IgLSBNYXliZSBpdCdzIGEgdmFyaWFibGUgKi8KLQljaGFyICogcDsJCQkv KiB3aG9zZSB2YWx1ZSBpcyBhbiBhcnJheSBuYW1lICovCi0JaW50IG47Ci0JcCA9IHRtcGJ1ZjsK LQluID0gNjM7Ci0JcFswXSA9IE5VTDsKLQlpZiAoc1swXSA9PSBDTURRICYmIHNbMV0gPT0gJyYn KQotCSAgcysrOwotCWlmICh6enN0cmluZyhzLCZwLCZuKSA+IC0xKSB7Ci0JICAgIHMgPSB0bXBi dWY7Ci0JICAgIHggPSBhcnJheWJvdW5kcyhzLCZsbywmaGkpOwotCSAgICBkZWJ1ZyhGMTExLCJk b2RjbCBhcnJheWJvdW5kcyAyIixzLHgpOwotCX0KLQlpZiAoeCA8IDApIHsKLQkgICAgcHJpbnRm KCI/QmFkIGFycmF5IG5hbWUgLSBcIiVzXCJcbiIscyk7Ci0JICAgIHJldHVybigtOSk7Ci0JfQot ICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJkb2RjbCBoaSIsIiIsaGkpOwotICAgIGRlYnVnKEYxMDEs ImRvZGNsIGxvIiwiIixsbyk7Ci0gICAgZGVidWcoRjEwMSwiZG9kY2wgbG8rMSIsIiIsbG8rMSk7 Ci0KLSAgICBpZiAobG8gPT0gLTEgJiYgaGkgPT0gLTEpIHsJCS8qIEhhdmUgZ29vZCBhcnJheSBu YW1lIGFuZCBib3VuZHMgKi8KLQlpc2R5bmFtaWMgPSAxOwotCW4gPSBDTURCTCAvIDU7Ci0gICAg fSBlbHNlIGlmIChoaSA+IC0xKSB7Ci0JcHJpbnRmKCI/U2VnbWVudCBub3RhdGlvbiBub3QgYWxs b3dlZCBpbiBhcnJheSBkZWNsYXJhdGlvbnNcbiIpOwotCXJldHVybigtOSk7Ci0gICAgfSBlbHNl IGlmICgobG8rMSkgPCAwKSB7Ci0JZGVidWcoRjEwMSwiZG9kY2wgdW5kZXJmbG93IiwiIixsbysx KTsKLSAgICAgICAgcHJpbnRmKCI/RGltZW5zaW9uIHVuZGVyZmxvd1xuIik7Ci0gICAgICAgIHJl dHVybigtOSk7Ci0gICAgfSBlbHNlCi0gICAgICBuID0gbG87Ci0gICAgeCA9IGFycmF5aXRvYSh4 KTsKLSAgICBpZiAoY3ggPT0gWFhVTkRDTCkgewotCW4gPSAwOwotCXYgPSAwOwotCWlmICgoeSA9 IGNtY2ZtKCkpIDwgMCkKLQkgIHJldHVybih5KTsKLSAgICB9IGVsc2UgewotCXAgPSAoY2hhciAq KiltYWxsb2Moc2l6ZW9mKGNoYXIgKiopKihuKzEpKTsKLQlpZiAoIXApIHsKLQkgICAgcHJpbnRm KCI/TWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLQl2 ID0gMDsJCQkJLyogSGlnaGVzdCBpbml0aWFsaXplZCBtZW1iZXIgKi8KLQlwWzBdID0gTlVMTDsJ CQkvKiBFbGVtZW50IDAgKi8KLQlrZWVwYWxsY2hhcnMgPSAxOwotCXdoaWxlIChuID4gMCAmJiB2 IDwgbikgewkvKiBQYXJzZSBpbml0aWFsaXplcnMgKi8KLQkgICAgcFt2KzFdID0gTlVMTDsKLQkg ICAgY2ttYWt4bXNnKHRtcCwKLQkJICAgICAgNjQsCi0JCSAgICAgICJJbml0aWFsIHZhbHVlIGZv ciBcXCYiLAotCQkgICAgICBja2N0b2EoKGNoYXIpeCksCi0JCSAgICAgICJbIiwKLQkJICAgICAg Y2tpdG9hKHYrMSksCi0JCSAgICAgICJdIiwKLQkJICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwsTlVMTAotCQkgICAgICApOwotCSAgICAKLQkgICAgcmMgPSBjbWZsZCgoY2hhciAq KXRtcCwiIiwmcyx4eHN0cmluZyk7IC8qIEdldCBmaWVsZCAqLwotCSAgICBpZiAocmMgPCAwKSB7 CQkvKiBFcnJvci4uLiAqLwotCQlpZiAocmMgPT0gLTMpIHsJCS8qIEVtcHR5IGVsZW1lbnQgKi8K LQkJICAgIGlmIChjbWZsZ3MgPT0gMSkJLyogYmVjYXVzZSBlbmQgb2YgbGluZT8gKi8KLQkJICAg ICAgYnJlYWs7CQkvKiBZZXMsIGRvbmUgaW5pdGlhbGl6aW5nICovCi0JCSAgICBlbHNlCQkvKiBO bywgaXQncyBqdXN0IGVtcHR5ICovCi0JCSAgICAgIGNvbnRpbnVlOwkJLyogR28gb24gdG8gbmV4 dCBvbmUuICovCi0JCX0gZWxzZSB7CQkvKiBPdGhlciBwYXJzZSBlcnJvciAqLwotCQkgICAgZ290 byBkY2x4OwkJLyogR28gZnJlZSB0ZW1wIHBvaW50ZXJzICovCi0JCX0KLQkgICAgfQotCSAgICBy YyA9IDE7Ci0JICAgIGlmICh2ID09IDAgJiYgIXN0cmNtcChzLCI9IikpIC8qIFNraXAgdGhlID0g c2lnbi4gKi8KLQkgICAgICBjb250aW51ZTsKLQkgICAgcyA9IGJyc3RyaXAocyk7CQkvKiBTdHJp cCBhbnkgYnJhY2VzICovCi0JICAgIG1ha2VzdHIoJihwWysrdl0pLHMpOwotCX0KLQlrZWVwYWxs Y2hhcnMgPSAwOwotCWlmICgoeSA9IGNtdHh0KCJDYXJyaWFnZSByZXR1cm4gdG8gY29uZmlybSIs IiIsJnMsTlVMTCkpIDwgMCkKLQkgIHJldHVybih5KTsKLQlpZiAoaXNkeW5hbWljKQotCSAgbiA9 IHY7Ci0gICAgfQotICAgIGlmIChkY2xhcnJheSgoY2hhcil4LG4pIDwgMCkgewkvKiBEZWNsYXJl IHRoZSBhcnJheSAqLwotCXByaW50ZigiP0RlY2xhcmUgZmFpbGVkXG4iKTsKLQlnb3RvIGRjbHg7 Ci0gICAgfQotICAgIGZvciAoaSA9IDE7IGkgPD0gdjsgaSsrKSB7CQkvKiBBZGQgYW55IGluaXRp YWwgdmFsdWVzICovCi0JdG1wWzBdID0gJyYnOwotCWNrbWFrbXNnKCZ0bXBbMV0sNjMsY2tjdG9h KChjaGFyKXgpLCJbIixja2l0b2EoaSksIl0iKTsKLQlpZiAoYWRkbWFjKHRtcCxwW2ldKSA8IDAp IHsKLQkgICAgcHJpbnRmKCJBcnJheSBpbml0aWFsaXphdGlvbiBlcnJvcjogJXMgJXNcbiIsdG1w LHBbaV0pOwotCSAgICByYyA9IC05OwotCSAgICBnb3RvIGRjbHg7Ci0JfQotICAgIH0KLSAgZGNs eDoKLSAgICBpZiAocCkgewotCWZvciAoaSA9IDE7IGkgPD0gdjsgaSsrKQotCSAgaWYgKHBbaV0p IGZyZWUocFtpXSk7Ci0JZnJlZSgoY2hhciAqKXApOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJE Q0wgcmMiLCIiLHJjKTsKLSAgICByZXR1cm4oc3VjY2VzcyA9IHJjKTsKLX0KLQotc3RhdGljIGlu dAotcnN6YXJyYXkoKSB7Ci0gICAgaW50IGksIHgsIHksIG4sIGxvLCBoaSwgaXNsaW5rID0gLTE7 Ci0gICAgY2hhciBjLCAqIHMsICoqIGFwID0gTlVMTDsKLSAgICBpZiAoKHggPSBjbWZsZCgiQXJy YXkgbmFtZSIsIiIsJnMsTlVMTCkpIDwgMCkgeyAvKiBQYXJzZSBhcnJheSBuYW1lICovCi0JaWYg KHggPT0gLTMpIHsKLQkgICAgcHJpbnRmKCI/QXJyYXkgbmFtZSByZXF1aXJlZFxuIik7Ci0JICAg IHJldHVybigtOSk7Ci0JfSBlbHNlIHJldHVybih4KTsKLSAgICB9Ci0gICAgY2tzdHJuY3B5KGxp bmUscyxMSU5CVUZTSVopOwkvKiBNYWtlIHNhZmUgY29weSBvZiBuYW1lICovCi0gICAgcyA9IGxp bmU7Ci0gICAgeCA9IGFycmF5Ym91bmRzKHMsJmxvLCZoaSk7Ci0gICAgaWYgKHggPCAwKSB7CQkJ LyogUGFyc2UgdGhlIG5hbWUsIGdldCBpbmRleCAqLwotCXByaW50ZigiP0JhZCBhcnJheSByZWZl cmVuY2UgLSBcIiVzXCJcbiIsIHMpOwotCXJldHVybigtOSk7Ci0gICAgfQotICAgIGlmIChsbyA8 IDAgJiYgaGkgPCAwKSB7Ci0JeSA9IGNtbnVtKCJOZXcgc2l6ZSIsIiIsMTAsJmxvLHh4c3RyaW5n KTsKLQlpZiAoeSA8IDApIHsKLQkgICAgaWYgKHkgPT0gLTMpCi0JICAgICAgcHJpbnRmKCI/TmV3 IHNpemUgcmVxdWlyZWRcbiIpOwotCSAgICByZXR1cm4oeSk7Ci0JfQotICAgIH0KLSAgICBpZiAo KHkgPSBjbWNmbSgpKSA8IDApCi0gICAgICByZXR1cm4oeSk7Ci0gICAgaWYgKGFfbGlua1t4XSA+ IC0xKSB7CQkvKiBMaW5rPyAqLwotCWlzbGluayA9IHg7CQkJLyogWWVzIGZvbGxvdyBpdCAqLwot CXggPSBhX2xpbmtbeF07CQkJLyogYW5kIHJlbWVtYmVyICovCi0gICAgfQotICAgIGlmICghYV9w dHJbeF0pIHsKLQlwcmludGYoIj9BcnJheSBub3QgZGVjbGFyZWQgLSBcIiVzXCJcbiIsIHMpOwot CXJldHVybigtOSk7Ci0gICAgfQotICAgIGlmIChsbyA8IDApIHsKLQlwcmludGYoIj9OZXcgc2l6 ZSByZXF1aXJlZFxuIik7Ci0JcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgaWYgKGhpID4gLTEpIHsK LQlwcmludGYoIj9BcnJheSBzZWdtZW50cyBub3QgYWxsb3dlZCBmb3IgdGhpcyBvcGVyYXRpb25c biIpOwotCXJldHVybigtOSk7Ci0gICAgfQotICAgIGMgPSBhcnJheWl0b2EoeCk7CQkJLyogR2V0 IGFycmF5IGxldHRlciAqLwotICAgIGlmIChjID09ICdAJykgewkJCS8qIEFyZ3VtZW50IHZlY3Rv ciBhcnJheSBvZmYgbGltaXRzICovCi0JcHJpbnRmKCI/U29ycnksIFxcJkBbXSBpcyByZWFkLW9u bHlcbiIpOwotCXJldHVybigtOSk7Ci0gICAgfQotICAgIGlmIChsbyA9PSAwKSB7CQkJLyogSWYg bmV3IHNpemUgaXMgMC4uLiAqLwotCWRjbGFycmF5KGMsMCk7CQkJLyogVW5kZWNsYXJlIHRoZSBh cnJheSAqLwotCXJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgfQotICAgIG4gPSBhX2RpbVt4XTsJ CQkvKiBDdXJyZW50IHNpemUgKi8KLSAgICBhcCA9IChjaGFyICoqKSBtYWxsb2MoKGxvKzEpICog c2l6ZW9mKGNoYXIgKikpOyAvKiBOZXcgYXJyYXkgKi8KLSAgICB5ID0gKG4gPCBsbykgPyBuIDog bG87Ci0gICAgZm9yIChpID0gMDsgaSA8PSB5OyBpKyspCQkvKiBDb3B5IHRoZSBwYXJ0IHRoYXQg Zml0cyAqLwotICAgICAgYXBbaV0gPSBhX3B0clt4XVtpXTsKLSAgICBpZiAobiA8IGxvKSB7CQkJ LyogSWYgb3JpZ2luYWwgYXJyYXkgc21hbGxlciAqLwotCWZvciAoOyBpIDw9IGxvOyBpKyspCQkv KiBpbml0aWFsaXplIGV4dHJhIGVsZW1lbnRzIGluICovCi0JICBhcFtpXSA9IE5VTEw7CQkJLyog bmV3IGFycmF5IHRvIE5VTEwuICovCi0gICAgfSBlbHNlIGlmIChuID4gbG8pIHsJCS8qIElmIG5l dyBhcnJheSBzbWFsbGVyICovCi0JZm9yICg7IGkgPD0gbG87IGkrKykJCS8qIGRlYWxsb2NhdGUg bGVmdG92ZXIgZWxlbWVudHMgKi8KLQkgIG1ha2VzdHIoJihhX3B0clt4XVtpXSksTlVMTCk7CS8q IGZyb20gb3JpZ2luYWwgYXJyYXkuICovCi0gICAgfQotICAgIGZyZWUoKGNoYXIgKilhX3B0clt4 XSk7CQkvKiBGcmVlIG9yaWdpbmFsIGFycmF5IGxpc3QgKi8KLSAgICBhX3B0clt4XSA9IGFwOwkJ CS8qIFJlcGxhY2Ugd2l0aCBuZXcgb25lICovCi0gICAgYV9kaW1beF0gPSBsbzsJCQkvKiBSZWNv cmQgdGhlIG5ldyBkaW1lbnNpb24gKi8KLSAgICBpZiAoaXNsaW5rID4gLTEpIHsJCQkvKiBXYXMg dGhpcyBhIGxpbms/ICovCi0JYV9wdHJbaXNsaW5rXSA9IGFwOwkJLyogSWYgc28gcG9pbnQgdG8g dGhlIHJlc2l6ZWQgYXJyYXkgKi8KLQlhX2RpbVtpc2xpbmtdID0gbG87Ci0gICAgfSBlbHNlIHsJ CQkJLyogSWYgbm90IGFyZSB0aGVyZSBsaW5rcyB0byBoZXJlPyAqLwotCWZvciAoaSA9IDA7IGkg PCAoaW50KSAneicgLSBBUlJBWUJBU0U7IGkrKykgeyAvKiBBbnkgbGlua2VkIGFycmF5cz8gKi8K LQkgICAgaWYgKGkgIT0geCAmJiBhX2xpbmtbaV0gPT0geCkgeyAgICAgLyogRmluZCBhbmQgdXBk YXRlIHRoZW0gKi8KLQkJYV9wdHJbaV0gPSBhcDsKLQkJYV9kaW1baV0gPSBsbzsKLQkgICAgfQot CX0KLSAgICB9Ci0gICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLX0KLQotc3RhdGljIGludAotY29w eWFycmF5KCkgewotICAgIGludCBpLCBqLCB4MSwgbG8xLCBoaTEsIHgyLCBsbzIsIGhpMiwgd2hv bGUgPSAwOwotICAgIGNoYXIgYzEsIGMyLCAqIGExLCAqIGEyOwotICAgIGlmICgoeSA9IGNtZmxk KCJOYW1lIG9mIHNvdXJjZSBhcnJheSIsIiIsJnMsTlVMTCkpIDwgMCkKLSAgICAgIHJldHVybih5 KTsKLSAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7Ci0gICAgYTEgPSBsaW5lOwotICAg IGlmICgoeDEgPSBhcnJheWJvdW5kcyhhMSwmbG8xLCZoaTEpKSA8IDApIHsKLQlwcmludGYoIj9C YWQgYXJyYXkgcmVmZXJlbmNlIC0gXCIlc1wiXG4iLCBhMSk7Ci0JcmV0dXJuKC05KTsKLSAgICB9 IGVsc2UgaWYgKCFhX3B0clt4MV0pIHsKLQlwcmludGYoIj9BcnJheSBub3QgZGVjbGFyZWQgLSBc IiVzXCJcbiIsIGExKTsKLQlyZXR1cm4oLTkpOwotICAgIH0KLSAgICBjMSA9IGFycmF5aXRvYSh4 MSk7Ci0KLSAgICBpZiAoKHkgPSBjbWZsZCgiTmFtZSBvZiBkZXN0aW5hdGlvbiBhcnJheSIsIiIs JnMsTlVMTCkpIDwgMCkKLSAgICAgIHJldHVybih5KTsKLSAgICBja3N0cm5jcHkodG1wYnVmLHMs VE1QQlVGU0laKTsKLSAgICBhMiA9IHRtcGJ1ZjsKLSAgICBpZiAoKHgyID0gYXJyYXlib3VuZHMo YTIsJmxvMiwmaGkyKSkgPCAwKSB7Ci0JcHJpbnRmKCI/QmFkIGFycmF5IHJlZmVyZW5jZSAtIFwi JXNcIlxuIiwgYTIpOwotCXJldHVybigtOSk7Ci0gICAgfQotICAgIGMyID0gYXJyYXlpdG9hKHgy KTsKLQotICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgIHJldHVybih4KTsKLQotICAg IGlmIChjMiA9PSAnQCcpIHsJCQkvKiBBcmd1bWVudCB2ZWN0b3IgYXJyYXkgb2ZmIGxpbWl0cyAq LwotCXByaW50ZigiP1NvcnJ5LCBcXCZAW10gaXMgcmVhZC1vbmx5XG4iKTsKLQlyZXR1cm4oLTkp OwotICAgIH0KLSAgICBpZiAobG8xIDwgMCAmJiBsbzIgPCAwICYmIGhpMSA8IDAgJiYgaGkyIDwg MCkgLyogU3BlY2lhbCBjYXNlIGZvciAqLwotICAgICAgd2hvbGUgPSAxOwkJCSAgICAgICAgICAv KiB3aG9sZSBhcnJheS4uLiAqLwotCi0gICAgaWYgKGxvMSA8IDApIGxvMSA9IHdob2xlID8gMCA6 IDE7CS8qIFN1cHBseSBsb3dlciBib3VuZCBvZiBzb3VyY2UgKi8KLSAgICBpZiAoaGkxIDwgMCkg aGkxID0gYV9kaW1beDFdOwkvKiBTdXBwbHkgdXBwZXIgYm91bmQgb2Ygc291cmNlICovCi0gICAg aWYgKGxvMiA8IDApIGxvMiA9IHdob2xlID8gMCA6IDE7CS8qIExvd2VyIGJvdW5kIG9mIHRhcmdl dCAqLwotICAgIGlmIChoaTIgPCAwKSBoaTIgPSBsbzIgKyBoaTEgLSBsbzE7CS8qIFVwcGVyIGJv dW5kIG9mIHRhcmdldCAqLwotICAgIGlmIChhX3B0clt4Ml0pIHsJCQkvKiBUYXJnZXQgYXJyYXkg aXMgYWxyZWFkeSBkZWNsYXJlZD8gKi8KLQlpZiAoaGkyID4gYV9kaW1beDJdKQkJLyogSWYgdXBw ZXIgYm91bmQgb3V0IG9mIHJhbmdlICovCi0JICBoaTIgPSBhX2RpbVt4Ml07CQkvKiBzaHJpbmsg dG8gZml0ICovCi0gICAgfSBlbHNlIHsJCQkJLyogT3RoZXJ3aXNlLi4uICovCi0JeDIgPSBkY2xh cnJheShjMiwgaGkyKTsJCS8qIGRlY2xhcmUgdGhlIHRhcmdldCBhcnJheSAqLwotICAgIH0KLSAg ICBmb3IgKGkgPSBsbzEsIGogPSBsbzI7IGkgPD0gaGkxICYmIGogPD0gaGkyOyBpKyssaisrKSB7 IC8qIENvcHkgKi8KLQltYWtlc3RyKCYoYV9wdHJbeDJdW2pdKSxhX3B0clt4MV1baV0pOwotICAg IH0KLSAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotfQotCi1zdGF0aWMgaW50CQkJCS8qIFVuZGVj bGFyZSBhbiBhcnJheSAqLwotdW5hcnJheSgpIHsKLSAgICBpbnQgeCwgeSwgbiwgcmMgPSAwOwot ICAgIGNoYXIgYywgKiBzOwotCi0gICAgaWYgKCh5ID0gY21mbGQoIkFycmF5IG5hbWUiLCIiLCZz LE5VTEwpKSA8IDApIHsgLyogUGFyc2UgYXJyYXkgbmFtZSAqLwotCWlmICh5ID09IC0zKSB7Ci0J ICAgIHByaW50ZigiP0FycmF5IG5hbWUgcmVxdWlyZWRcbiIpOwotCSAgICByZXR1cm4oLTkpOwot CX0gZWxzZSByZXR1cm4oeSk7Ci0gICAgfQotICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0la KTsJLyogTWFrZSBzYWZlIGNvcHkgb2YgbmFtZSAqLwotICAgIHMgPSBsaW5lOwotICAgIGlmICgo eSA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgIHJldHVybih5KTsKLSAgICBpZiAoKHggPSBhcnJheWJv dW5kcyhzLCZ5LCZuKSkgPCAwKSB7IC8qIFBhcnNlIHRoZSBuYW1lLCBnZXQgaW5kZXggKi8KLQlw cmludGYoIj9CYWQgYXJyYXkgcmVmZXJlbmNlIC0gXCIlc1wiXG4iLCBzKTsKLQlyZXR1cm4oLTkp OwotICAgIH0KLSAgICBpZiAoeSA+IDAgfHwgbiA+IDApIHsKLQlwcmludGYoIj9QYXJ0aWFsIGFy cmF5cyBjYW4gbm90IGJlIGRlc3Ryb3llZFxuIik7Ci0JcmV0dXJuKC05KTsKLSAgICB9Ci0gICAg YyA9IGFycmF5aXRvYSh4KTsJCQkvKiBHZXQgYXJyYXkgbGV0dGVyICovCi0gICAgaWYgKGFfcHRy W3hdKSB7CQkJLyogSWYgYXJyYXkgaXMgZGVjbGFyZWQgKi8KLQlpZiAoYyA9PSAnQCcpIHsJCQkv KiBBcmd1bWVudCB2ZWN0b3IgYXJyYXkgb2ZmIGxpbWl0cyAqLwotCSAgICBwcmludGYoIj9Tb3Jy eSwgXFwmQFtdIGlzIHJlYWQtb25seVxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotCXJjID0g ZGNsYXJyYXkoYywtMSk7CQkvKiBVbmRlY2xhcmUgdGhlIGFycmF5ICovCi0gICAgfSBlbHNlCQkJ CS8qIEl0IHdhc24ndCBkZWNsYXJlZCAqLwotICAgICAgcmMgPSAxOwotICAgIGlmIChyYyA+IC0x KSB7CQkJLyogU2V0IHJldHVybiBjb2RlIGFuZCBzdWNjZXNzICovCi0Jc3VjY2VzcyA9IDE7Ci0J cmMgPSAxOwotICAgIH0gZWxzZSB7Ci0Jc3VjY2VzcyA9IDA7Ci0JcHJpbnRmKCI/RmFpbGVkIC0g ZGVzdHJveSBcIlxcJiVjW11cIlxuIiwgYyk7Ci0JcmMgPSAtOTsKLSAgICB9Ci0gICAgcmV0dXJu KHJjKTsKLX0KLQotc3RhdGljIGludAotY2xyYXJyYXkoY3gpIGludCBjeDsgewotICAgIGludCBp LCB4LCBsbywgaGk7Ci0gICAgY2hhciBjLCAqIHMsICogdmFsID0gTlVMTDsKLQotICAgIGlmICgo eCA9IGNtZmxkKCJBcnJheSBuYW1lIiwiIiwmcyxOVUxMKSkgPCAwKSB7IC8qIFBhcnNlIGFycmF5 IG5hbWUgKi8KLQlpZiAoeCA9PSAtMykgewotCSAgICBwcmludGYoIj9BcnJheSBuYW1lIHJlcXVp cmVkXG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9IGVsc2UgcmV0dXJuKHgpOwotICAgIH0KLSAg ICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7CS8qIE1ha2Ugc2FmZSBjb3B5IG9mIG5hbWUg Ki8KLSAgICBzID0gbGluZTsKLSAgICBpZiAoY3ggPT0gQVJSX1NFVCkgewkJLyogU0VUICovCi0J aWYgKCh4ID0gY210eHQoIlZhbHVlIiwiIiwmdmFsLHh4c3RyaW5nKSkgPCAwKQotCSAgcmV0dXJu KHgpOwotCWNrc3RybmNweSh0bXBidWYsdmFsLFRNUEJVRlNJWik7IC8qIFZhbHVlIHRvIHNldCAq LwotCXZhbCA9IHRtcGJ1ZjsKLQlpZiAoISp2YWwpIHZhbCA9IE5VTEw7Ci0gICAgfSBlbHNlIGlm ICgoeCA9IGNtY2ZtKCkpIDwgMCkJLyogQ0xFQVIgKi8KLSAgICAgIHJldHVybih4KTsKLQotICAg IGlmICgoeCA9IGFycmF5Ym91bmRzKHMsJmxvLCZoaSkpIDwgMCkgeyAvKiBQYXJzZSB0aGUgbmFt ZSAqLwotCXByaW50ZigiP0JhZCBhcnJheSByZWZlcmVuY2UgLSBcIiVzXCJcbiIsIHMpOwotCXJl dHVybigtOSk7Ci0gICAgfQotICAgIGMgPSBhcnJheWl0b2EoeCk7CQkJLyogR2V0IGFycmF5IGxl dHRlciAqLwotICAgIGlmICghYV9wdHJbeF0pIHsJCQkvKiBJZiBhcnJheSBpcyBkZWNsYXJlZCAq LwotCXByaW50ZigiP0FycmF5ICVzIGlzIG5vdCBkZWNsYXJlZFxuIiwgcyk7Ci0JcmV0dXJuKC05 KTsKLSAgICB9IGVsc2UgaWYgKGMgPT0gJ0AnKSB7CQkvKiBBcmd1bWVudCB2ZWN0b3IgYXJyYXkg b2ZmIGxpbWl0cyAqLwotCXByaW50ZigiP1NvcnJ5LCBcXCZAW10gaXMgcmVhZC1vbmx5XG4iKTsK LQlyZXR1cm4oLTkpOwotICAgIH0KLSAgICBpZiAobG8gPCAwKSBsbyA9IDA7Ci0gICAgaWYgKGhp IDwgMCkgaGkgPSBhX2RpbVt4XTsKLSAgICBmb3IgKGkgPSBsbzsgaSA8PSBoaTsgaSsrKQkJLyog Q2xlYXIvU2V0IHNlbGVjdGVkIHJhbmdlICovCi0gICAgICBtYWtlc3RyKCYoYV9wdHJbeF1baV0p LHZhbCk7Ci0KLSAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotfQotCi1leHRlcm4gY2hhciAqKmFh X3B0cltDTURTVEtMXVsyOF07Ci1leHRlcm4gaW50IGFhX2RpbVtDTURTVEtMXVsyOF07Ci0KLXN0 YXRpYyBpbnQJCQkJLyogQ3JlYXRlIHN5bWJvbGljIGxpbmsgdG8gYW4gYXJyYXkgKi8KLWxpbmth cnJheSgpIHsKLSAgICBpbnQgaSA9IDAsIHgsIHksIGxvLCBoaSwgZmxhZyA9IDA7Ci0gICAgY2hh ciBjLCAqIHMsICogcDsKLQotICAgIGlmICgoeCA9IGNtZmxkKCJBcnJheSBuYW1lIG5vdCBjdXJy ZW50bHkgaW4gdXNlIiwiIiwmcyxOVUxMKSkgPCAwKSB7Ci0JaWYgKHggPT0gLTMpIHsKLQkgICAg cHJpbnRmKCI/QXJyYXkgbmFtZSByZXF1aXJlZFxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfSBl bHNlIHJldHVybih4KTsKLSAgICB9Ci0gICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOwkv KiBNYWtlIHNhZmUgY29weSBvZiBsaW5rIG5hbWUgKi8KLSAgICBzID0gbGluZTsKLSAgICBpZiAo KHggPSBjbWZsZCgiTmFtZSBvZiBleGlzdGluZyBhcnJheSIsIiIsJnAseHhzdHJpbmcpKSA8IDAp IHsKLQlpZiAoeCA9PSAtMykgewotCSAgICBwcmludGYoIj9BcnJheSBuYW1lIHJlcXVpcmVkXG4i KTsKLQkgICAgcmV0dXJuKC05KTsKLQl9IGVsc2UgcmV0dXJuKHgpOwotICAgIH0KLSAgICBja3N0 cm5jcHkodG1wYnVmLHAsVE1QQlVGU0laKTsJLyogTWFrZSBzYWZlIGNvcHkgb2YgYXJyYXkgbmFt ZSAqLwotICAgIHAgPSB0bXBidWY7Ci0gICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAg cmV0dXJuKHgpOwotCi0gICAgaWYgKCh4ID0gYXJyYXlib3VuZHMocywmbG8sJmhpKSkgPCAwKSB7 IC8qIFBhcnNlIHRoZSBsaW5rIG5hbWUgKi8KLQlwcmludGYoIj9CYWQgYXJyYXkgcmVmZXJlbmNl IC0gXCIlc1wiXG4iLCBzKTsKLQlyZXR1cm4oLTkpOwotICAgIH0KLSAgICBpZiAoYV9wdHJbeF0p IHsJCQkvKiBNdXN0IG5vdCBhbHJlYWR5IGV4aXN0ICovCi0JYyA9IGFycmF5aXRvYSh4KTsKLQlw cmludGYoIj9BcnJheSBhbHJlYWR5IGV4aXN0czogXFwmJWNbXVxuIiwgYyk7Ci0JcmV0dXJuKC05 KTsKLSAgICB9Ci0gICAgaWYgKGxvID4gLTEgfHwgaGkgPiAtMSkgewotCXByaW50ZigiP1NvcnJ5 LCB3aG9sZSBhcnJheXMgb25seTogJXNcbiIscyk7Ci0JcmV0dXJuKC05KTsKLSAgICB9Ci0gICAg aWYgKCh5ID0gYXJyYXlib3VuZHMocCwmbG8sJmhpKSkgPCAwKSB7IC8qIFBhcnNlIHRoZSBhcnJh eSBuYW1lICovCi0JcHJpbnRmKCI/QmFkIGFycmF5IHJlZmVyZW5jZSAtIFwiJXNcIlxuIiwgcyk7 Ci0JcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgaWYgKGxvID4gLTEgfHwgaGkgPiAtMSkgewotCXBy aW50ZigiP1NvcnJ5LCB3aG9sZSBhcnJheXMgb25seTogJXNcbiIscCk7Ci0JcmV0dXJuKC05KTsK LSAgICB9Ci0gICAgaWYgKHggPT0geSkgewotCWZvciAoaSA9IGNtZGx2bDsgaSA+PSAwOyBpLS0p Ci0JICBpZiAoYWFfcHRyW2ldW3hdKSB7Ci0JICAgICAgZmxhZysrOwotCSAgICAgIGJyZWFrOwot CSAgfQotICAgIH0KLSAgICBpZiAoZmxhZykgewotCWFfcHRyW3hdID0gYWFfcHRyW2ldW3ldOwkv KiBMaW5rIHRvIHNhdmVkIGNvcHkgKi8KLQlhX2RpbVt4XSA9IGFhX2RpbVtpXVt5XTsKLSAgICB9 IGVsc2UgewkJCQkvKiBPdGhlcndpc2UuLi4gKi8KLQljID0gYXJyYXlpdG9hKHkpOwkJLyogQ2hl Y2sgaWYgaXQncyBkZWNsYXJlZCAqLwotCWlmICghYV9wdHJbeV0pIHsKLQkgICAgcHJpbnRmKCI/ QXJyYXkgaXMgbm90IGRlY2xhcmVkOiBcXCYlY1tdXG4iLCBjKTsKLQkgICAgcmV0dXJuKC05KTsK LQl9Ci0JaWYgKGFfbGlua1t5XSA+IC0xKSB7CQkvKiBBbmQgaWYgaXQncyBhIGxpbmsgaXRzZWxm ICovCi0JICAgIHByaW50ZigiP0xpbmtzIHRvIGxpbmtzIG5vdCBhbGxvd2VkOiBcXCYlY1tdXG4i LCBjKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0JYV9wdHJbeF0gPSBhX3B0clt5XTsJCS8qIEFs bCBPSywgbWFrZSB0aGUgbGluayAqLwotCWFfZGltW3hdID0gYV9kaW1beV07Ci0gICAgfQotICAg IGFfbGlua1t4XSA9IHk7Ci0gICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLX0KLSNlbmRpZiAvKiBO T1NQTCAqLwotCi0jaWZuZGVmIE5PQ1NFVFMKLXN0YXRpYyBjaGFyICogZGNzZXRuYW1lID0gTlVM TDsKLQotLyogR2V0IERpc3BsYXkgQ2hhcmFjdGVyLVNldCBOYW1lICovCi0KLWNoYXIgKgotZ2V0 ZGNzZXQoKSB7Ci0gICAgY2hhciAqIHM7Ci0gICAgaW50IHk7Ci0jaWZkZWYgUENGT05UUwotICAg IGV4dGVybiBpbnQgdHRfZm9udCwgbnRlcm1mb250OwotICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFi IHRlcm1fZm9udFtdOwotI2VuZGlmIC8qIFBDRk9OVFMgKi8KLQotICAgIHMgPSAiIjsKLSNpZmRl ZiBPUzIKLSAgICB5ID0gb3MyZ2V0Y3AoKTsJCQkvKiBEZWZhdWx0IGlzIGN1cnJlbnQgY29kZSBw YWdlICovCi0gICAgc3dpdGNoICh5KSB7Ci0gICAgICBjYXNlIDQzNzogcyA9ICJjcDQzNyI7IGJy ZWFrOwotICAgICAgY2FzZSA4NTA6IHMgPSAiY3A4NTAiOyBicmVhazsKLSAgICAgIGNhc2UgODUy OiBzID0gImNwODUyIjsgYnJlYWs7Ci0gICAgICBjYXNlIDg1NzogcyA9ICJjcDg1NyI7IGJyZWFr OwotICAgICAgY2FzZSA4NTg6IHMgPSAiY3A4NTgiOyBicmVhazsKLSAgICAgIGNhc2UgODYyOiBz ID0gImNwODYyIjsgYnJlYWs7Ci0gICAgICBjYXNlIDg2NjogcyA9ICJjcDg2NiI7IGJyZWFrOwot ICAgICAgY2FzZSA4Njk6IHMgPSAiY3A4NjkiOyBicmVhazsKLSAgICAgIGNhc2UgMTI1MDogcyA9 ICJjcDEyNTAiOyBicmVhazsKLSAgICAgIGNhc2UgMTI1MTogcyA9ICJjcDEyNTEiOyBicmVhazsK LSAgICAgIGNhc2UgMTI1MjogcyA9ICJjcDEyNTIiOyBicmVhazsKLSAgICAgIGNhc2UgMTI1Mzog cyA9ICJjcDEyNTMiOyBicmVhazsKLSAgICAgIGNhc2UgMTI1NDogcyA9ICJjcDEyNTQiOyBicmVh azsKLSAgICAgIGNhc2UgMTI1NTogcyA9ICJjcDEyNTUiOyBicmVhazsKLSAgICAgIGNhc2UgMTI1 NjogcyA9ICJjcDEyNTYiOyBicmVhazsKLSAgICAgIGNhc2UgMTI1NzogcyA9ICJjcDEyNTciOyBi cmVhazsKLSAgICAgIGNhc2UgMTI1ODogcyA9ICJjcDEyNTgiOyBicmVhazsKLSAgICB9Ci0jaWZk ZWYgUENGT05UUwotLyoKLSAgIElmIHRoZSB1c2VyIGhhcyBsb2FkZWQgYSBmb250IHdpdGggU0VU IFRFUk1JTkFMIEZPTlQgdGhlbiB3ZSB3YW50Ci0gICB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgY29k ZSBwYWdlIHRvIHRoZSBmb250IHRoYXQgd2FzIGxvYWRlZC4KLSovCi0gICAgaWYgKHR0X2ZvbnQg IT0gVFRGX1JPTSkgewotCWZvciAoeSA9IDA7IHkgPCBudGVybWZvbnQ7IHkrKyApIHsKLQkgICAg aWYgKHRlcm1fZm9udFt5XS5rd3ZhbCA9PSB0dF9mb250KSB7Ci0JCXMgPSB0ZXJtX2ZvbnRbeV0u a3dkOwotCQlicmVhazsKLQkgICAgfQotCX0KLSAgICB9Ci0jZW5kaWYgLyogUENGT05UUyAqLwot I2Vsc2UgLyogT1MyICovCi0jaWZkZWYgQ09NTUVOVAotICAgIC8qIEhhY2sgbm90IG5lZWRlZCBh cyBvZiBDLUtlcm1pdCA3LjEgKi8KLSAgICBpZiAoZmNoYXJzZXQgPT0gRkNfMUxBVElOKSB7Ci0J cyA9ICJsYXRpbjEtaXNvIjsJCS8qIEhhY2sgdG8gYXZvaWQgcmVwb3J0aW5nICJjcDEyNTIiICov Ci0gICAgfSBlbHNlIHsJCQkJLyogUmVwb3J0IGN1cnJlbnQgZmlsZSBjaGFyYWN0ZXIgc2V0ICov Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCWZvciAoeSA9IDA7IHkgPD0gbmZpbGM7IHkrKykKLQkg IGlmIChmY3N0YWJbeV0ua3d2YWwgPT0gZmNoYXJzZXQpIHsKLQkgICAgICBzID0gZmNzdGFiW3ld Lmt3ZDsKLQkgICAgICBicmVhazsKLQkgIH0KLSNpZmRlZiBDT01NRU5UCi0gICAgfQotI2VuZGlm IC8qIENPTU1FTlQgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICBtYWtlc3RyKCZkY3NldG5hbWUs cyk7CQkvKiBSZXR1cm4gc3RhYmxlIHBvaW50ZXIgKi8KLSAgICByZXR1cm4oKGNoYXIgKilkY3Nl dG5hbWUpOwotfQotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQotI2lmbmRlZiBOT0ZSSUxMUwotc3Rh dGljIGludAotZG9jbGVhcigpIHsKLSAgICBpZiAoKHggPSBjbWtleShjbHJ0YWIsbmNsZWFyLCJp dGVtIHRvIGNsZWFyIiwKLSNpZmRlZiBOT1NQTAotCQkgICAiZGV2aWNlLWJ1ZmZlciIKLSNlbHNl Ci0JCSAgICJkZXZpY2UtYW5kLWlucHV0IgotI2VuZGlmIC8qIE5PU1BMICovCi0JCSAgICx4eHN0 cmluZykpIDwgMCkgcmV0dXJuKHgpOwotI2lmbmRlZiBOT1NQTAotI2lmZGVmIE9TMgotICAgIGlm ICh4ID09IENMUl9DTUQgfHwgeCA9PSBDTFJfVFJNKSB7Ci0JaWYgKCh6ID0gY21rZXkoY2xyY21k dGFiLG5jbHJjbWQsImhvdyBtdWNoIHNjcmVlbiB0byBjbGVhclxuIiwKLQkJICAgICAgICJhbGwi LHh4c3RyaW5nKSkgPCAwKQotCSAgcmV0dXJuKHopOwotICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8K LSNlbmRpZiAvKiBOT1NQTCAqLwotICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgIHJl dHVybih5KTsKLQotICAgIC8qIENsZWFyIGRldmljZSBpbnB1dCBidWZmZXIgaWYgcmVxdWVzdGVk ICovCi0gICAgeSA9ICh4ICYgQ0xSX0RFVikgPyB0dGZsdWkoKSA6IDA7Ci0KLSAgICBpZiAoeCAm IENMUl9TQ1IpCQkJLyogQ0xFQVIgU0NSRUVOICovCi0gICAgICB5ID0gY2tfY2xzKCk7CQkJLyog KD0gU0NSRUVOIENMRUFSID0gQ0xTKSAqLwotCi0gICAgaWYgKHggJiBDTFJfS0JEKSB7CQkJLyog Q0xFQVIgS0VZQk9BUkQgKi8KLQlpbnQgbjsKLQluID0gY29uY2hrKCk7Ci0JeSA9IDA7Ci0Jd2hp bGUgKG4tLSA+IDAgJiYgKHkgPSBjb25pbmMoMCkgPiAtMSkpCi0JICA7Ci0JeSA9ICh5ID4gLTEp ID8gMCA6IC0xOwotICAgIH0KLQotI2lmbmRlZiBOT1NQTAotICAgIC8qIENsZWFyIElOUFVUIGNv bW1hbmQgYnVmZmVyIGlmIHJlcXVlc3RlZCAqLwotICAgIGlmICh4ICYgQ0xSX0lOUCkgewotCWZv ciAoeiA9IDA7IHogPCBpbmJ1ZnNpemU7IHorKykKLQkgIGlucGJ1Zlt6XSA9IE5VTDsKLQlpbnBi cCA9IGlucGJ1ZjsKLQl5ID0gMDsKLSAgICB9Ci0jaWZkZWYgQ0tfQVBDCi0gICAgaWYgKHggJiBD TFJfQVBDKSB7Ci0JZGVidWcoRjEwMSwiRXhlY3V0aW5nIENMRUFSIEFQQyIsIiIsYXBjYWN0aXZl KTsKLQlhcGNhY3RpdmUgPSAwOwotCXkgPSAwOwotICAgIH0KLSNlbmRpZiAvKiBDS19BUEMgKi8K LSAgICBpZiAoeCAmIENMUl9BTFIpIHsKLQlzZXRhbGFybSgwTCk7Ci0JeSA9IDA7Ci0gICAgfQot I2VuZGlmIC8qIE5PU1BMICovCi0KLSNpZmRlZiBQQVRURVJOUwotICAgIGlmICh4ICYgKENMUl9U WFR8Q0xSX0JJTikpIHsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgRlRQQVRURVJOUzsgaSsr KSB7Ci0JICAgIGlmICh4ICYgQ0xSX1RYVCkKLQkgICAgICBtYWtlc3RyKCZ0eHRwYXR0ZXJuc1tp XSxOVUxMKTsKLQkgICAgaWYgKHggJiBDTFJfQklOKQotCSAgICAgIG1ha2VzdHIoJmJpbnBhdHRl cm5zW2ldLE5VTEwpOwotCX0KLQl5ID0gMDsKLSAgICB9Ci0jZW5kaWYgLyogUEFUVEVSTlMgKi8K LQotI2lmbmRlZiBOT0RJQUwKLSAgICBpZiAoeCAmIENMUl9ESUEpIHsKLQlkaWFsc3RhID0gRElB X1VOSzsKLQl5ID0gMDsKLSAgICB9Ci0jZW5kaWYgLyogTk9ESUFMICovCi0KLSNpZm5kZWYgTk9N U0VORAotICAgIGlmICh4ICYgQ0xSX1NGTCkgewkJCS8qIENMRUFSIFNFTkQtTElTVCAqLwotCWlm IChmaWxlaGVhZCkgewotCSAgICBzdHJ1Y3QgZmlsZWxpc3QgKiBmbHAsICogbmV4dDsKLQkgICAg ZmxwID0gZmlsZWhlYWQ7Ci0JICAgIHdoaWxlIChmbHApIHsKLQkJaWYgKGZscC0+ZmxfbmFtZSkK LQkJICBmcmVlKGZscC0+ZmxfbmFtZSk7Ci0JCWlmIChmbHAtPmZsX2FsaWFzKQotCQkgIGZyZWUo ZmxwLT5mbF9hbGlhcyk7Ci0JCW5leHQgPSBmbHAtPmZsX25leHQ7Ci0JCWZyZWUoKGNoYXIgKilm bHApOwotCQlmbHAgPSBuZXh0OwotCSAgICB9Ci0JfQotCWZpbGVzaW5saXN0ID0gMDsKLQlmaWxl aGVhZCA9IE5VTEw7Ci0JZmlsZXRhaWwgPSBOVUxMOwotCWFkZGxpc3QgPSAwOwotCXkgPSAwOwot ICAgIH0KLSNlbmRpZiAvKiBOT01TRU5EICovCi0KLSNpZmRlZiBPUzIKLSNpZm5kZWYgTk9MT0NB TAotICAgIHN3aXRjaCAoeCkgewotICAgICAgY2FzZSBDTFJfU0NMOgotCWNsZWFyc2Nyb2xsYmFj ayhWVEVSTSk7Ci0JYnJlYWs7Ci0gICAgICBjYXNlIENMUl9DTUQ6Ci0Jc3dpdGNoICggeiApIHsK LQkgIGNhc2UgQ0xSX0NfQUxMOgotCSAgICBjbGVhcigpOwotCSAgICBicmVhazsKLQkgIGNhc2Ug Q0xSX0NfQk9TOgotCSAgICBjbHJib3Njcl9lc2NhcGUoVkNNRCxTUCk7Ci0JICAgIGJyZWFrOwot CSAgY2FzZSBDTFJfQ19CT0w6Ci0JICAgIGNscmJvbF9lc2NhcGUoVkNNRCxTUCk7Ci0JICAgIGJy ZWFrOwotCSAgY2FzZSBDTFJfQ19FT0w6Ci0JICAgIGNscnRvZW9sbihWQ01ELFNQKTsKLQkgICAg YnJlYWs7Ci0JICBjYXNlIENMUl9DX0VPUzoKLQkgICAgY2xyZW9zY3JfZXNjYXBlKFZDTUQsU1Ap OwotCSAgICBicmVhazsKLQkgIGNhc2UgQ0xSX0NfTElOOgotCSAgICBjbHJsaW5lX2VzY2FwZShW Q01ELFNQKTsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIENMUl9DX1NDUjoKLQkgICAgY2xlYXJzY3Jv bGxiYWNrKFZDTUQpOwotCSAgICBicmVhazsKLQlkZWZhdWx0OgotCSAgICBwcmludGYoIk5vdCBp bXBsZW1lbnRlZCB5ZXQsIHNvcnJ5LlxuIik7Ci0JICAgIGJyZWFrOwotCX0KLQlicmVhazsKLQot I2lmbmRlZiBOT1RFUk0KLSAgICAgIGNhc2UgQ0xSX1RSTToKLQkgc3dpdGNoICggeiApIHsKLQkg IGNhc2UgQ0xSX0NfQUxMOgotCSAgICAgaWYgKFZzY3JuR2V0QnVmZmVyU2l6ZShWVEVSTSkgPiAw ICkgewotCQkgVnNjcm5TY3JvbGwoVlRFUk0sIFVQV0FSRCwgMCwKLQkJCSAgICAgVnNjcm5HZXRI ZWlnaHQoVlRFUk0pLSh0dF9zdGF0dXNbVlRFUk1dPzI6MSksCi0JCQkgICAgIFZzY3JuR2V0SGVp Z2h0KFZURVJNKSAtCi0JCQkgICAgICh0dF9zdGF0dXNbVlRFUk1dPzE6MCksIFRSVUUsIFNQCi0J CQkgICAgICk7Ci0JCSBjbGVhcnRlcm1zY3JlZW4oVlRFUk0pOwotCSAgICAgfQotCSAgICAgYnJl YWs7Ci0JICBjYXNlIENMUl9DX0JPUzoKLQkgICAgY2xyYm9zY3JfZXNjYXBlKFZURVJNLFNQKTsK LQkgICAgYnJlYWs7Ci0JICBjYXNlIENMUl9DX0JPTDoKLQkgICAgY2xyYm9sX2VzY2FwZShWVEVS TSxTUCk7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBDTFJfQ19FT0w6Ci0JICAgIGNscnRvZW9sbihW VEVSTSxTUCk7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBDTFJfQ19FT1M6Ci0JICAgIGNscmVvc2Ny X2VzY2FwZShWVEVSTSxTUCk7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBDTFJfQ19MSU46Ci0JICAg IGNscmxpbmVfZXNjYXBlKFZURVJNLFNQKTsKLQkgICAgYnJlYWs7Ci0JIGNhc2UgQ0xSX0NfU0NS OgotCSAgICAgY2xlYXJzY3JvbGxiYWNrKFZURVJNKTsKLQkgICAgIGJyZWFrOwotCSBkZWZhdWx0 OgotCSAgICAgcHJpbnRmKCJOb3QgaW1wbGVtZW50ZWQgeWV0LCBzb3JyeS5cbiIpOwotCSAgICAg YnJlYWs7Ci0JfQotCWJyZWFrOwotI2VuZGlmIC8qIE5PVEVSTSAqLwotICAgIH0KLSAgICB5ID0g MDsKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgcmV0dXJuKHN1 Y2Nlc3MgPSAoeSA9PSAwKSk7Ci19Ci0jZW5kaWYgLyogTk9GUklMTFMgKi8KLQotI2lmbmRlZiBO T1NQTAotc3RhdGljIGludAotZG9ldmFsKGN4KSBpbnQgY3g7IHsKLSAgICBjaGFyICpwOwotICAg IGNoYXIgdm5hbWJ1ZltWTkFNTF0sICogdm5wID0gTlVMTDsJLyogVGhlc2UgbXVzdCBiZSBvbiB0 aGUgc3RhY2sgKi8KLSAgICBpZiAoIW9sZGV2YWwpIHsKLQlpZiAoKHkgPSBjbWZsZCgiVmFyaWFi bGUgbmFtZSIsIiIsJnMsCi0JCSAgICAgICAoKGN4ID09IFhYX0VWQUwpID8geHhzdHJpbmcgOiBO VUxMKSkpIDwgMCkgewotCSAgICBpZiAoeSA9PSAtMykgewotCQlwcmludGYoIj9WYXJpYWJsZSBu YW1lIHJlcXVpcmVkXG4iKTsKLQkJcmV0dXJuKC05KTsKLQkgICAgfSBlbHNlIHJldHVybih5KTsK LQl9Ci0JY2tzdHJuY3B5KHZuYW1idWYscyxWTkFNTCk7CS8qIE1ha2UgYSBjb3B5LiAqLwotCXZu cCA9IHZuYW1idWY7Ci0JaWYgKHZuYW1idWZbMF0gPT0gQ01EUSAmJgotCSAgICAodm5hbWJ1Zlsx XSA9PSAnJScgfHwgdm5hbWJ1ZlsxXSA9PSAnJicpKQotCSAgdm5wKys7Ci0JeSA9IDA7Ci0JaWYg KCp2bnAgPT0gJyUnIHx8ICp2bnAgPT0gJyYnKSB7Ci0JICAgIGlmICgoeSA9IHBhcnNldmFyKHZu cCwmeCwmeikpIDwgMCkKLQkgICAgICByZXR1cm4oeSk7Ci0JfQotICAgIH0KLSAgICBpZiAoKHgg PSBjbXR4dCgiSW50ZWdlciBhcml0aG1ldGljIGV4cHJlc3Npb24iLCIiLCZzLHh4c3RyaW5nKSkg PCAwKQotICAgICAgcmV0dXJuKHgpOwotICAgIHAgPSBldmFsYShzKTsKLSAgICBpZiAoIXApIHAg PSAiIjsKLSAgICBpZiAob2xkZXZhbCAmJiAqcCkKLSAgICAgIHByaW50ZigiJXNcbiIsIHApOwot ICAgIGNrc3RybmNweShldmFsYnVmLHAsMzIpOwotICAgIGlmICghb2xkZXZhbCkKLSAgICAgIHJl dHVybihzdWNjZXNzID0gYWRkbWFjKHZuYW1idWYscCkpOwotICAgIGVsc2UKLSAgICAgIHJldHVy bihzdWNjZXNzID0gKnAgPyAxIDogMCk7Ci19Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmZGVm IFROQ09ERQotc3RhdGljIGludAotZG90ZWxvcHQoKSB7Ci0gICAgaWYgKCh4ID0gY21rZXkodGVs Y21kLCBudGVsY21kLCAiVEVMTkVUIGNvbW1hbmQiLCAiIiwgeHhzdHJpbmcpKSA8IDAgKQotICAg ICAgcmV0dXJuKHgpOwotICAgIHN3aXRjaCAoeCkgewotICAgICAgY2FzZSBXSUxMOgotICAgICAg Y2FzZSBXT05UOgotICAgICAgY2FzZSBETzoKLSAgICAgIGNhc2UgRE9OVDoKLQlpZiAoKHkgPSBj bWtleSh0bm9wdHMsbnRub3B0cywiVEVMTkVUIG9wdGlvbiIsIiIseHhzdHJpbmcpKSA8IDApCi0J ICByZXR1cm4oeSk7Ci0JaWYgKCh6ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeik7Ci0KLQlzd2l0 Y2ggKHgpIHsKLQkgIGNhc2UgV0lMTDoKLQkgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwo eSkpCi0JICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIFdP TlQ6Ci0JICAgIGlmIChURUxPUFRfVU5BTlNXRVJFRF9XT05UKHkpKQotCSAgICAgIHJldHVybihz dWNjZXNzID0gMCk7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBETzoKLQkgICAgaWYgKFRFTE9QVF9V TkFOU1dFUkVEX0RPKHkpKQotCSAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0JICAgIGJyZWFr OwotCSAgY2FzZSBET05UOgotCSAgICBpZiAoVEVMT1BUX1VOQU5TV0VSRURfRE9OVCh5KSkKLQkg ICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotCSAgICBicmVhazsKLQl9Ci0JaWYgKGxvY2FsKSB7 Ci0JICAgIHN1Y2Nlc3MgPSAoKHRuX3NvcHQoeCx5KSA+IC0xKSA/IDEgOiAwKTsKLQl9IGVsc2Ug ewotCSAgICBwcmludGYoImZmJTAyeCUwMnhcbiIseCx5KTsKLQkgICAgc3VjY2VzcyA9IDE7Ci0J fQotCWlmIChzdWNjZXNzKSB7Ci0JICAgIHN3aXRjaCAoeCkgewotCSAgICAgIGNhc2UgV0lMTDoK LQkJVEVMT1BUX1VOQU5TV0VSRURfV0lMTCh5KSA9IDE7Ci0JCWJyZWFrOwotCSAgICAgIGNhc2Ug V09OVDoKLQkJaWYgKCBURUxPUFRfTUUoeSkgKQotCQkgIFRFTE9QVF9VTkFOU1dFUkVEX1dPTlQo eSkgPSAxOwotCQlicmVhazsKLQkgICAgICBjYXNlIERPOgotCQlURUxPUFRfVU5BTlNXRVJFRF9E Tyh5KSA9IDE7Ci0JCWJyZWFrOwotCSAgICAgIGNhc2UgRE9OVDoKLQkJaWYgKCBURUxPUFRfTUUo eSkgKQotCQkgIFRFTE9QVF9VTkFOU1dFUkVEX0RPTlQoeSkgPSAxOwotCQlicmVhazsKLQkgICAg fQotCSAgICBpZiAodG5fd2FpdCgiWFhURUxPUCIpIDwgMCkgewotCQl0bl9wdXNoKCk7Ci0JCXN1 Y2Nlc3MgPSAwOwotCSAgICB9Ci0JfQotCXJldHVybihzdWNjZXNzKTsKLSAgICAgIGNhc2UgU0I6 Ci0JaWYgKCh5PWNta2V5KHRuc2JvcHRzLG50bnNib3B0cywiVEVMTkVUIG9wdGlvbiIsIiIseHhz dHJpbmcpKSA8IDApCi0JICByZXR1cm4oeSk7Ci0Jc3dpdGNoICh5KSB7Ci0JICBjYXNlIFRFTE9Q VF9OQVdTOgotCSAgICAvKiBTb21lIGNvbXBpbGVycyByZXF1aXJlIHN3aXRjaCgpIHRvIGhhdmUg YXQgbGVhc3QgMSBjYXNlICovCi0jaWZkZWYgQ0tfTkFXUwotCSAgICBURUxPUFRfU0IoVEVMT1BU X05BV1MpLm5hd3MueCA9IDA7Ci0JICAgIFRFTE9QVF9TQihURUxPUFRfTkFXUykubmF3cy55ID0g MDsKLQkgICAgaWYgKGxvY2FsKQotCSAgICAgIHJldHVybihzdWNjZXNzID0gKCh0bl9zbmF3cygp ID4gLTEpID8gMSA6IDApKTsKLQkgICAgZWxzZQotCSAgICAgIHJldHVybihzdWNjZXNzID0gMCk7 Ci0jZWxzZQotCSAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotI2VuZGlmIC8qIENLX05BV1MgKi8K LQl9Ci0gICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0KLSNpZmRlZiBDS19LRVJCRVJPUwot I2lmZGVmIEtSQjUKLSAgICAgIGNhc2UgVE5fRldEOgotICAgICAgICBzdWNjZXNzID0gKGtlcmJl cm9zNV9mb3J3YXJkKCkgPT0gQVVUSF9TVUNDRVNTKTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3Mp OwotI2VuZGlmIC8qIEtSQjUgKi8KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotCi0gICAgICBk ZWZhdWx0OgotCWlmICgoeiA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHopOwotI2lmbmRlZiBOT0xP Q0FMCi0JaWYgKGxvY2FsKSB7Ci0JICAgIENIQVIgdGVtcFszXTsKLQkgICAgaWYgKG5ldHdvcmsg JiYgSVNfVEVMTkVUKCkpIHsgLyogVEVMTkVUICovCi0JCXRlbXBbMF0gPSAoQ0hBUikgSUFDOwot CQl0ZW1wWzFdID0geDsKLQkJdGVtcFsyXSA9IE5VTDsKLQkJc3VjY2VzcyA9ICh0dG9sKChDSEFS ICopdGVtcCwyKSA+IC0xID8gMSA6IDApOwotCQlpZiAodG5fZGViIHx8IGRlYnNlcyB8fCBkZWJs b2cpIHsKLQkJICAgIC8qIFROX01TR19MRU4gaXMgaW4gY2tjdGVsLmggKi8KLQkJICAgIGNrbWFr bXNnKHRuX21zZywyNTYsIlRFTE5FVCBTRU5UICIsVEVMQ01EKHgpLE5VTEwsTlVMTCk7Ci0JCSAg ICBkZWJ1ZyhGMTAxLHRuX21zZywiIix4KTsKLQkJICAgIGlmIChkZWJzZXMgfHwgdG5fZGViKSB0 bl9kZWJ1Zyh0bl9tc2cpOwotCQl9Ci0JCXJldHVybihzdWNjZXNzKTsKLQkgICAgfQotICAgICAg ICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLQl9IGVsc2UgewotI2VuZGlmIC8qIE5PTE9DQUwg Ki8KLQkgICAgcHJpbnRmKCJmZiUwMnhcbiIseCk7Ci0JICAgIHJldHVybihzdWNjZXNzID0gMSk7 Ci0jaWZuZGVmIE5PTE9DQUwKLQl9Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwotICAgIH0KLX0KLSNl bmRpZiAvKiBUTkNPREUgKi8KLQotCi0jaWZuZGVmIE5PUFVTSAotI2lmbmRlZiBOT0ZSSUxMUwot c3RhdGljIGludAotZG9lZGl0KCkgewotI2lmZGVmIE9TMgotICAgIGNoYXIgKiBwID0gTlVMTDsK LSNlbmRpZiAvKiBPUzIgKi8KLSAgICBpZiAoIWVkaXRvclswXSkgewotCXMgPSBnZXRlbnYoIkVE SVRPUiIpOwotCWlmIChzKSBja3N0cm5jcHkoZWRpdG9yLHMsQ0tNQVhQQVRIKTsKLQllZGl0b3Jb Q0tNQVhQQVRIXSA9IE5VTDsKLQlpZiAoIWVkaXRvclswXSkgewotCSAgICBwcmludGYoIj9FZGl0 b3Igbm90IGRlZmluZWQgLSB1c2UgU0VUIEVESVRPUiB0byBkZWZpbmVcbiIpOwotCSAgICByZXR1 cm4oLTkpOwotCX0KLSAgICB9Ci0gICAgY2tzdHJuY3B5KHRtcGJ1ZixlZGl0ZmlsZSxUTVBCVUZT SVopOwotLyoKLSAgY21pb2ZpKCkgbGV0cyB1cyBwYXJzZSB0aGUgbmFtZSBvZiBhbiBleGlzdGlu ZyBmaWxlLCBvciB0aGUgbmFtZSBvZgotICBhIG5vbmV4aXN0ZW50IGZpbGUgdG8gYmUgY3JlYXRl ZC4KLSovCi0gICAgeCA9IGNtaW9maSgiRmlsZSB0byBlZGl0IiwgKGNoYXIgKil0bXBidWYsICZz LCAmeSwgeHhzdHJpbmcpOwotICAgIGRlYnVnKEYxMTEsImVkaXQiLHMseCk7Ci0gICAgaWYgKHgg PCAwICYmIHggIT0gLTMpCi0gICAgICByZXR1cm4oeCk7Ci0gICAgaWYgKHggPT0gLTMpIHsKLQl0 bXBidWZbMF0gPSBOVUw7Ci0gICAgfSBlbHNlIHsKLQlja3N0cm5jcHkodG1wYnVmLHMsVE1QQlVG U0laKTsKLSAgICB9Ci0gICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeik7Ci0gICAg aWYgKHkpIHsKLQlwcmludGYoIj9BIHNpbmdsZSBmaWxlIHBsZWFzZVxuIik7Ci0JcmV0dXJuKC05 KTsKLSAgICB9Ci0gICAgaWYgKG5vcHVzaCkgewotCXByaW50ZigiP1NvcnJ5LCBlZGl0aW5nIG5v dCBhbGxvd2VkXG4iKTsKLQlyZXR1cm4oc3VjY2VzcyA9IDApOwotICAgIH0KLSAgICBpZiAodG1w YnVmWzBdKSB7Ci0gICAgLyogR2V0IGZ1bGwgcGF0aCBpbiBjYXNlIHdlIGNoYW5nZSBkaXJlY3Rv cmllcyBiZXR3ZWVuIEVESVQgY29tbWFuZHMgKi8KLQl6Zm5xZnAodG1wYnVmLCBDS01BWFBBVEgs IGVkaXRmaWxlKTsKLQllZGl0ZmlsZVtDS01BWFBBVEhdID0gTlVMOwotI2lmZGVmIE9TMgotCXAg PSBlZGl0ZmlsZTsJCQkvKiBGbGlwIHRoZSBzdHVwaWQgc2xhc2hlcyAqLwotCXdoaWxlICgqcCkg ewotCSAgICBpZiAoKnAgPT0gJy8nKSAqcCA9ICdcXCc7Ci0JICAgIHArKzsKLQl9Ci0jZW5kaWYg LyogT1MyICovCi0gICAgfSBlbHNlCi0gICAgICBlZGl0ZmlsZVswXSA9IE5VTDsKLSAgICBpZiAo ZWRpdGZpbGVbMF0pIHsKLQlpZiAoemNoa2koZWRpdGZpbGUpIDwgKENLX09GRl9UKTAgJiYgemNo a28oZWRpdGZpbGUpIDwgMCkgewotCSAgICBwcmludGYoIj9BY2Nlc3MgZGVuaWVkOiAlc1xuIixl ZGl0ZmlsZSk7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotICAgIH0KLSAgICB4ID0gMDsKLSAgICBp ZiAoZWRpdG9wdHNbMF0pIHsKLSNpZmRlZiBPUzIKLQl4ID0gY2tpbmRleCgiJTEiLChjaGFyICop ZWRpdG9wdHMsMCwwLDEpOwotCWlmICh4ID4gMCkKLQkgIGVkaXRvcHRzW3hdID0gJ3MnOwotCWVs c2UKLSNlbmRpZiAvKiBPUzIgKi8KLQkgIHggPSBja2luZGV4KCIlcyIsKGNoYXIgKillZGl0b3B0 cywwLDAsMSk7Ci0gICAgfQotICAgIGlmICgoKGludClzdHJsZW4oZWRpdG9wdHMpICsgKGludClz dHJsZW4oZWRpdGZpbGUpICsgMSkgPCBUTVBCVUZTSVopIHsKLQlpZiAoeCkKLQkgIHNwcmludGYo dG1wYnVmLGVkaXRvcHRzLGVkaXRmaWxlKTsKLQllbHNlCi0JICBzcHJpbnRmKHRtcGJ1ZiwiJXMg JXMiLGVkaXRvcHRzLGVkaXRmaWxlKTsKLSAgICB9Ci0gICAgcyA9IGxpbmU7Ci0gICAgY2ttYWtt c2cocyxMSU5CVUZTSVosZWRpdG9yLCIgIix0bXBidWYsTlVMTCk7Ci0jaWZkZWYgT1MyCi0gICAg cCA9IHMgKyBzdHJsZW4oZWRpdG9yKTsJCS8qIEFuZCBhZ2FpbiB3aXRoIHRoZSBzbGFzaGVzICov Ci0gICAgd2hpbGUgKHAgIT0gcykgewotCWlmICgqcCA9PSAnLycpICpwID0gJ1xcJzsKLQlwLS07 Ci0gICAgfQotI2VuZGlmIC8qIE9TMiAqLwotICAgIGNvbnJlcygpOwotICAgIHggPSB6c2hjbWQo cyk7Ci0gICAgY29uY2IoKGNoYXIpZXNjYXBlKTsKLSAgICByZXR1cm4oeCk7Ci19Ci0jZW5kaWYg LyogTk9GUklMTFMgKi8KLSNlbmRpZiAvKiBOT1BVU0ggKi8KLQotI2lmZGVmIEJST1dTRVIKLXN0 YXRpYyBpbnQKLWRvYnJvd3NlKCkgewotI2lmZGVmIE9TMgotICAgIGNoYXIgKiBwID0gTlVMTDsK LSNlbmRpZiAvKiBPUzIgKi8KLSAgICBpZiAobm9wdXNoKSB7Ci0JcHJpbnRmKCI/U29ycnksIGJy b3dzaW5nIG5vdCBhbGxvd2VkXG4iKTsKLQlyZXR1cm4oc3VjY2VzcyA9IDApOwotICAgIH0KLSNp Zm5kZWYgTlQKLSAgICAvKiBXaW5kb3dzIGxldHMgdGhlIFNoZWxsIEV4ZWN1dGUgdGhlIFVSTCBp ZiBubyBCcm93c2VyIGlzIGRlZmluZWQgKi8KLSAgICBpZiAoIWJyb3dzZXJbMF0pIHsKLQlzID0g Z2V0ZW52KCJCUk9XU0VSIik7Ci0JaWYgKHMpIGNrc3RybmNweShicm93c2VyLHMsQ0tNQVhQQVRI KTsKLQlicm93c2VyW0NLTUFYUEFUSF0gPSBOVUw7Ci0JaWYgKCFicm93c2VyWzBdKSB7Ci0JICAg IHByaW50ZigiP0Jyb3dzZXIgbm90IGRlZmluZWQgLSB1c2UgU0VUIEJST1dTRVIgdG8gZGVmaW5l XG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0gICAgfQotI2VuZGlmIC8qIE5UICovCi0gICAg Y2tzdHJuY3B5KHRtcGJ1Zixicm93c3VybCxUTVBCVUZTSVopOwotICAgIGlmICgoeCA9IGNtdHh0 KCJVUkwiLChjaGFyICopYnJvd3N1cmwsJnMseHhzdHJpbmcpKSA8IDApCi0gICAgICByZXR1cm4o eCk7Ci0gICAgY2tzdHJuY3B5KGJyb3dzdXJsLHMsNDA5Nik7Ci0gICAgeCA9IDA7Ci0gICAgaWYg KGJyb3dzb3B0c1swXSkgewotI2lmZGVmIE9TMgotCXggPSBja2luZGV4KCIlMSIsKGNoYXIgKili cm93c29wdHMsMCwwLDEpOwotCWlmICh4ID4gMCkKLQkgIGJyb3dzb3B0c1t4XSA9ICdzJzsKLQll bHNlCi0jZW5kaWYgLyogT1MyICovCi0JICB4ID0gY2tpbmRleCgiJXMiLChjaGFyICopYnJvd3Nv cHRzLDAsMCwxKTsKLSAgICB9Ci0gICAgaWYgKCgoaW50KXN0cmxlbihicm93c29wdHMpICsgKGlu dClzdHJsZW4oYnJvd3N1cmwpICsgMSkgPCBUTVBCVUZTSVopIHsKLQlpZiAoeCkKLQkgIHNwcmlu dGYodG1wYnVmLGJyb3dzb3B0cyxicm93c3VybCk7Ci0JZWxzZQotCSAgc3ByaW50Zih0bXBidWYs IiVzICVzIixicm93c29wdHMsYnJvd3N1cmwpOwotICAgIH0KLSNpZmRlZiBOVAotICAgIGlmICgh YnJvd3NlclswXSkKLSAgICAgIHJldHVybihzdWNjZXNzID0gV2luMzJTaGVsbEV4ZWN1dGUoYnJv d3N1cmwpKTsKLSNlbmRpZiAvKiBOVCAqLwotICAgIHMgPSBsaW5lOwotICAgIGNrbWFrbXNnKHMs TElOQlVGU0laLGJyb3dzZXIsIiAiLHRtcGJ1ZixOVUxMKTsKLSNpZmRlZiBPUzIKLSAgICBwID0g bGluZSArIHN0cmxlbihicm93c2VyKTsJCS8qIEZsaXAgc2xhc2hlcyAqLwotICAgIHdoaWxlIChw ICE9IGxpbmUpIHsKLQlpZiAoKnAgPT0gJy8nKSAqcCA9ICdcXCc7Ci0JcC0tOwotICAgIH0KLSNl bmRpZiAvKiBPUzIgKi8KLSAgICBjb25yZXMoKTsKLSAgICB4ID0genNoY21kKHMpOwotICAgIGNv bmNiKChjaGFyKWVzY2FwZSk7Ci0gICAgcmV0dXJuKHgpOwotfQotI2VuZGlmIC8qIEJST1dTRVIg Ki8KLQotI2lmZGVmIENLX1JFQ0FMTAotc3RhdGljIGludAotZG9yZWRvKCkgewkJCS8qIEZpbmQg YSBwcmV2aW91cyBjbWQgYW5kIHJlZG8gaXQgKi8KLSAgICBleHRlcm4gaW50IG9uX3JlY2FsbCwg aW5fcmVjYWxsOwotICAgIGludCB4OwotICAgIGNoYXIgKiBwOwotCi0gICAgaWYgKCh4ID0gY210 eHQoCi0icGF0dGVybiwgb3IgZmlyc3QgZmV3IGNoYXJhY3RlcnMgb2YgYSBwcmV2aW91cyBjb21t YW5kIiwKLQkJICAgIioiLCZzLHh4c3RyaW5nKSkgPCAwKQotICAgICAgcmV0dXJuKHgpOwotICAg IGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKLSAgICB4ID0gc3RybGVuKHMpOwotICAgIHMg PSBsaW5lOwotICAgIGlmICgqcyA9PSAneycpIHsJCQkvKiBCcmFjZXMgZGlzYWJsZSBhZGRpbmcg KiB0byBlbmQgKi8KLQlpZiAoc1t4LTFdID09ICd9JykgewotCSAgICBzW3gtMV0gPSBOVUw7Ci0J ICAgIHMrKzsKLQkgICAgeC0tOwotCX0KLSAgICB9IGVsc2UgewkJCQkvKiBObyBicmFjZXMsIGFk ZCAqIHRvIGVuZC4gKi8KLQlzW3hdID0gJyonOwotCXNbeCsxXSA9IE5VTDsKLSAgICB9Ci0KLSAg ICB3aGlsZSAoeCA+IDAgJiYgc1t4XSA9PSAnKicgJiYgc1t4LTFdID09ICcqJykgc1t4LS1dID0g TlVMOwotCi0gICAgaWYgKCFvbl9yZWNhbGwgfHwgIWluX3JlY2FsbCkgewotCXByaW50ZigiP1Nv cnJ5LCBjb21tYW5kIHJlY2FsbCBjYW4ndCBiZSB1c2VkIG5vdy5cbiIpOwotCXJldHVybigtOSk7 Ci0gICAgfQotICAgIGlmICgocCA9IGNtZ2V0Y21kKHMpKSkgewkJLyogTG9vayBmb3IgaXQgaGlz dG9yeSBidWZmZXIgKi8KLQlja21ha21zZyhjbWRidWYsQ01EQkwscCwiXHIiLE5VTEwsTlVMTCk7 IC8qIENvcHkgdG8gY29tbWFuZCBidWZmZXIgKi8KLQlpZiAoIXF1aWV0KQkJCS8qIEVjaG8gaXQg Ki8KLQkgIHByaW50ZigiJXNcbiIsY21kYnVmKTsKLQljbWFkZG5leHQoKTsJCQkvKiBGb3JjZSBy ZS1hZGQgdG8gaGlzdG9yeSBidWZmZXIgKi8KLQlyZXR1cm4oY21mbGdzID0gLTEpOwkJLyogRm9y Y2UgcmVwYXJzZSAqLwotICAgIH0gZWxzZSB7Ci0JcHJpbnRmKCI/U29ycnkgLSBcIiVzXCIgbm90 IGZvdW5kXG4iLCBzKTsKLQlyZXR1cm4oLTkpOwotICAgIH0KLX0KLSNlbmRpZiAvKiBDS19SRUNB TEwgKi8KLQotI2lmbmRlZiBOT1hGRVIKLSNpZm5kZWYgTk9DU0VUUwotc3RhdGljIGludAotZG9h c3NvYygpICB7CQkJCS8qIEFTU09DSUFURSAqLwotICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiIHRj c3RhYltdOwotICAgIGV4dGVybiBpbnQgbnRjczsKLSAgICBpZiAoKHggPSBjbWtleShhc3NvY3Rh YiwgbmFzc29jLCAiIiwgIiIsIHh4c3RyaW5nKSkgPCAwICkKLSAgICAgIHJldHVybih4KTsKLQot ICAgIHN3aXRjaCAoeCkgewkJCS8qIEFzc29jaWF0ZSB3aGF0PyAqLwotCi0gICAgICBjYXNlIEFT U09DX1RDOgkJCS8qIFRyYW5zZmVyIGNoYXJhY3Rlci1zZXQuLi4gKi8KLQlpZiAoKHggPSBjbWtl eSh0Y3N0YWIsIG50Y3MsCi0JCSAgICAgICAidHJhbnNmZXIgY2hhcmFjdGVyLXNldCBuYW1lIiwi Iix4eHN0cmluZykpIDwgMCkKLQkgIHJldHVybih4KTsKLQlpZiAoKHkgPSBjbWtleShmY3N0YWIs IG5maWxjLAotCQkgICAgICAgIndpdGggZmlsZSBjaGFyYWN0ZXItc2V0IiwiIiwgeHhzdHJpbmcp KSA8IDApCi0JICBpZiAoeSAhPSAtMykKLQkgICAgcmV0dXJuKHkpOwotCWlmICgoeiA9IGNtY2Zt KCkpIDwgMCkKLQkgIHJldHVybih6KTsKLQlheGNzZXRbeF0gPSB5OwotCXJldHVybihzdWNjZXNz ID0gMSk7Ci0KLSAgICAgIGNhc2UgQVNTT0NfRkM6CQkJLyogRmlsZSBjaGFyYWN0ZXItc2V0Li4u ICovCi0JaWYgKCh4ID0gY21rZXkoZmNzdGFiLCBuZmlsYywKLQkJICAgICAgICJmaWxlIGNoYXJh Y3Rlci1zZXQgbmFtZSIsIiIseHhzdHJpbmcpKSA8IDApCi0JICByZXR1cm4oeCk7Ci0JaWYgKCh5 ID0gY21rZXkodGNzdGFiLCBudGNzLAotCQkgICAgICAgIndpdGggdHJhbnNmZXIgY2hhcmFjdGVy LXNldCIsIiIsIHh4c3RyaW5nKSkgPCAwKQotCSAgaWYgKHkgIT0gLTMpCi0JICAgIHJldHVybih5 KTsKLQlpZiAoKHogPSBjbWNmbSgpKSA8IDApCi0JICByZXR1cm4oeik7Ci0JYWZjc2V0W3hdID0g eTsKLQlyZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0gICAgICBkZWZhdWx0OgotCXJldHVybigtMik7 Ci0gICAgfQotfQotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQot I2lmbmRlZiBOT0hFTFAKLXN0YXRpYyBpbnQKLWRvbWFudWFsKCkgewotI2lmZGVmIE9TMgotICAg IGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgIHJldHVybih4KTsKLSAgICBpZiAobm9wdXNo KSB7Ci0JcHJpbnRmKCI/U29ycnksIGFjY2VzcyB0byBzeXN0ZW0gY29tbWFuZHMgaXMgZGlzYWJs ZWQuXG4iKTsKLQlyZXR1cm4oLTkpOwotICAgIH0KLSAgICB5ID0gbXhsb29rKG1hY3RhYiwibWFu dWFsIixubWFjKTsKLSAgICBpZiAoeSA+IC0xKSB7Ci0JeiA9IG1hY2x2bDsJCQkvKiBTYXZlIHRo ZSBjdXJyZW50IG1hY2x2bCAqLwotCWRvZG8oeSxOVUxMLGNtZHN0a1tjbWRsdmxdLmNjZmxncyk7 IC8qIFJ1biB0aGUgbWFjcm8gKi8KLQl3aGlsZSAobWFjbHZsID4geikgewotCSAgICBkZWJ1ZyhG MTAxLCJYWE1BTiBsb29wIG1hY2x2bCAxIiwiIixtYWNsdmwpOwotCSAgICBzc3RhdGUgPSAoQ0hB UikgcGFyc2VyKDEpOwotCSAgICBkZWJ1ZyhGMTAxLCJYWE1BTiBsb29wIG1hY2x2bCAyIiwiIixt YWNsdmwpOwotCSAgICBpZiAoc3N0YXRlKSBwcm90bygpOwotCX0KLQlkZWJ1ZyhGMTAxLCJYWE1B TiBsb29wIGV4aXQgbWFjbHZsIiwiIixtYWNsdmwpOwotCXJldHVybihzdWNjZXNzKTsKLSAgICB9 Ci0gICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSNlbHNlCi0gICAgaWYgKCh4ID0gY210eHQoCi0j aWZkZWYgVU5JWAotCQkgICAiQ2FycmlhZ2UgcmV0dXJuIHRvIGNvbmZpcm0gdGhlIGNvbW1hbmQs IG9yIG1hbnVhbCB0b3BpYyIsCi0jZWxzZQotCQkgICAiQ2FycmlhZ2UgcmV0dXJuIHRvIGNvbmZp cm0gdGhlIGNvbW1hbmQsIG9yIGhlbHAgdG9waWMiLAotI2VuZGlmIC8qIFVOSVggKi8KLQkJICAg Imtlcm1pdCIsCi0JCSAgICZzLAotCQkgICB4eHN0cmluZwotCQkgICApCi0JICkgPCAwKQotICAg ICAgcmV0dXJuKHgpOwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgVU5JWAotICAgIGNrbWFr bXNnKHRtcGJ1ZixUTVBCVUZTSVosIm1hbiAiLHMsTlVMTCxOVUxMKTsKLSNlbHNlCi0gICAgY2tt YWttc2codG1wYnVmLFRNUEJVRlNJWiwiaGVscCAiLHMsTlVMTCxOVUxMKTsKLSNlbmRpZiAvKiBV TklYICovCi0gICAgZGVidWcoRjExMCwiTUFOVUFMIix0bXBidWYsMCk7Ci0gICAgaWYgKG5vcHVz aCkgewotCXByaW50ZigiP1NvcnJ5LCBhY2Nlc3MgdG8gc3lzdGVtIGNvbW1hbmRzIGlzIGRpc2Fi bGVkLlxuIik7Ci0JcmV0dXJuKC05KTsKLSAgICB9IGVsc2UgewotCWNvbnJlcygpOwkJCS8qIFJl c3RvcmUgdGhlIGNvbnNvbGUgKi8KLQlzdWNjZXNzID0genNoY21kKHRtcGJ1Zik7Ci0JY29uY2Io KGNoYXIpZXNjYXBlKTsJCS8qIFJlc3RvcmUgQ0JSRUFLIG1vZGUgKi8KLQlyZXR1cm4oc3VjY2Vz cyk7Ci0gICAgfQotfQotI2VuZGlmIC8qIE5PSEVMUCAqLwotCi0jaWZuZGVmIE5PSFRUUAotI2lm ZGVmIFRDUFNPQ0tFVAotc3RhdGljIHN0cnVjdCBrZXl0YWIgc3Nsc3d0YWJbXSA9IHsKLSAgICB7 ICIvc3NsIiwgMSwgMCB9LAotICAgIHsgIi90bHMiLCAxLCAwIH0KLX07Ci0KLSNpZm5kZWYgTk9V UkwKLXN0cnVjdCB1cmxkYXRhIGh0dHBfdXJsID0ge05VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEx9OwotI2VuZGlmIC8qIE5PVVJMICovCi0KLXN0YXRpYyBpbnQKLWRvaHR0cCgpIHsJ CQkJLyogSFRUUCAqLwotICAgIHN0cnVjdCBGREIgc3csIGt3LCBmaTsKLSAgICBpbnQgbiwgZ2V0 dmFsLCBhbGxpbm9uZSA9IDA7Ci0gICAgY2hhciBjLCAqIHA7Ci0gICAgY2hhciByZG5zWzEyOF07 Ci0KLSAgICBjaGFyICogaHR0cF9hZ2VudCA9IE5VTEw7CQkvKiBQYXJzZSByZXN1bHRzICovCi0g ICAgY2hhciAqIGh0dHBfaGRyICAgPSBOVUxMOwotICAgIGNoYXIgKiBodHRwX3VzZXIgID0gTlVM TDsKLSAgICBjaGFyICogaHR0cF9wYXNzICA9IE5VTEw7Ci0gICAgY2hhciAqIGh0dHBfbWltZSAg PSBOVUxMOwotICAgIGNoYXIgKiBodHRwX2xmaWxlID0gTlVMTDsKLSAgICBjaGFyICogaHR0cF9y ZmlsZSA9IE5VTEw7Ci0gICAgY2hhciAqIGh0dHBfZGZpbGUgPSBOVUxMOwotICAgIGNoYXIgICBo dHRwX2FycmF5ID0gTlVMOwotICAgIGludCAgICBodHRwX2FjdGlvbiA9IC0xOwotCi0gICAgY2hh ciAqIGh0dHBfaG9zdCA9IE5VTEw7Ci0gICAgY2hhciAqIGh0dHBfc3J2ICA9IE5VTEw7Ci0gICAg aW50ICAgIGh0dHBfc3NsICA9IDA7Ci0KLSAgICBzdGF0aWMgY2hhciAqIGh0dHBfZF9hZ2VudCA9 IE5VTEw7Ci0gICAgc3RhdGljIGNoYXIgKiBodHRwX2RfdXNlciA9IE5VTEw7Ci0gICAgc3RhdGlj IGNoYXIgKiBodHRwX2RfcGFzcyA9IE5VTEw7Ci0KLSAgICBzdGF0aWMgaW50ICAgIGh0dHBfZF90 eXBlID0gMDsKLSAgICBpbnQgICAgICAgICAgIGh0dHBfdHlwZSA9IGh0dHBfZF90eXBlOwotCi0j aWZkZWYgT1MyCi0gICAgcCA9ICJLZXJtaXQgOTUiOwkJCS8qIERlZmF1bHQgdXNlciBhZ2VudCAq LwotI2Vsc2UKLSAgICBwID0gIkMtS2VybWl0IjsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICBtYWtl c3RyKCZodHRwX2FnZW50LHApOwotICAgIG1ha2VzdHIoJmh0dHBfbWltZSwidGV4dC9IVE1MIik7 CS8qIE1JTUUgdHlwZSBkZWZhdWx0ICovCi0gICAgcmRuc1swXSA9ICdcMCc7Ci0KLSAgICBjbWZk YmkoJnN3LAkJCQkvKiAxc3QgRkRCIC0gZ2VuZXJhbCBzd2l0Y2hlcyAqLwotICAgICAgIF9DTUtF WSwJCQkJLyogZmNvZGUgKi8KLSAgICAgICAiT1BFTiwgQ0xPU0UsIEdFVCwgSEVBRCwgUFVULCBJ TkRFWCwgb3IgUE9TVCxcbiBvciBzd2l0Y2giLCAvKiBobHBtc2cgKi8KLSAgICAgICAiIiwJCQkJ LyogZGVmYXVsdCAqLwotICAgICAgICIiLAkJCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotICAg ICAgIG5odHRwc3d0YWIsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCi0g ICAgICAgNCwJCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLwotICAgICAg IHh4c3RyaW5nLAkJCS8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KLSAgICAgICBodHRwc3d0YWIs CQkJLyogS2V5d29yZCB0YWJsZSAqLwotICAgICAgICZrdwkJCQkvKiBQb2ludGVyIHRvIG5leHQg RkRCICovCi0gICAgICAgKTsKLSAgICBjbWZkYmkoJmt3LAkJCQkvKiAybmQgRkRCIC0gY29tbWFu ZHMgKi8KLSAgICAgICBfQ01LRVksCQkJCS8qIGZjb2RlICovCi0gICAgICAgIkNvbW1hbmQiLAkJ CS8qIGhscG1zZyAqLwotICAgICAgICIiLAkJCQkvKiBkZWZhdWx0ICovCi0gICAgICAgIiIsCQkJ CS8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0gICAgICAgbmh0dHB0YWIsCQkJLyogYWRkdGwgbnVt ZXJpYyBkYXRhIDE6IHRibCBzaXplICovCi0gICAgICAgMCwJCQkJLyogYWRkdGwgbnVtZXJpYyBk YXRhIDI6IDAgPSBrZXl3b3JkICovCi0gICAgICAgeHhzdHJpbmcsCQkJLyogUHJvY2Vzc2luZyBm dW5jdGlvbiAqLwotICAgICAgIGh0dHB0YWIsCQkJCS8qIEtleXdvcmQgdGFibGUgKi8KLSAgICAg ICBOVUxMCQkJCS8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KLSAgICAgICApOwotCi0gICAgd2hp bGUgKDEpIHsKLQl4ID0gY21mZGIoJnN3KTsJCQkvKiBQYXJzZSBzb21ldGhpbmcgKi8KLQlpZiAo eCA8IDApCQkJLyogRXJyb3IgKi8KLQkgIGdvdG8geGh0dHA7Ci0JbiA9IGNtcmVzdWx0Lm5yZXN1 bHQ7Ci0JaWYgKGNtcmVzdWx0LmZkYmFkZHIgPT0gJmt3KQkvKiBDb21tYW5kIC0gZXhpdCB0aGlz IGxvb3AgKi8KLQkgIGJyZWFrOwotCWMgPSBjbWdicmsoKTsJCQkvKiBTd2l0Y2guLi4gKi8KLQln ZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAnPScpOwotCXggPSAtOTsKLQlpZiAoZ2V0dmFsICYm ICEoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7Ci0JICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIGRv ZXMgbm90IHRha2UgYW4gYXJndW1lbnRcbiIpOwotCSAgICBnb3RvIHhodHRwOwotCX0KLQlzd2l0 Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsJLyogSGFuZGxlIGVhY2ggc3dpdGNoICovCi0gICAgICAg ICAgY2FzZSBIVF9TV19UUDogICAgICAgICAgICAgICAgLyogL1RPU0NSRUVOICovCi0gICAgICAg ICAgICBodHRwX3R5cGUgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0JICBjYXNlIEhUX1NXX0FH OgkJLyogL0FHRU5UICovCi0JICAgIGlmIChnZXR2YWwpIHsKLQkJaWYgKCh4ID0gY21mbGQoIlVz ZXIgYWdlbnQiLHAsJnMseHhzdHJpbmcpKSA8IDApCi0JCSAgZ290byB4aHR0cDsKLQkgICAgfSBl bHNlIHsKLQkJcyA9IHA7Ci0JICAgIH0KLQkgICAgbWFrZXN0cigmaHR0cF9hZ2VudCxzKTsKLQkg ICAgYnJlYWs7Ci0JICBjYXNlIEhUX1NXX0hEOgkJLyogL0hFQURFUiAqLwotCSAgICBzID0gTlVM TDsKLQkgICAgaWYgKGdldHZhbCkgewotCQlpZiAoKHggPSBjbWZsZCgiSGVhZGVyIGxpbmUiLCIi LCZzLHh4c3RyaW5nKSkgPCAwKSB7Ci0JCSAgICBpZiAoeCA9PSAtMykKLQkJICAgICAgcyA9IE5V TEw7Ci0JCSAgICBlbHNlCi0JCSAgICAgIGdvdG8geGh0dHA7Ci0JCX0KLQkgICAgfQotCSAgICBt YWtlc3RyKCZodHRwX2hkcixzKTsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIEhUX1NXX1VTOgkJLyog L1VTRVIgKi8KLQkgICAgcyA9IE5VTEw7Ci0JICAgIGlmIChnZXR2YWwpIHsKLQkJaWYgKCh4ID0g Y21mbGQoIlVzZXIgSUQiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAg ICBpZiAoeCA9PSAtMykKLSAgICAgICAgICAgICAgICAgICAgcyA9ICIiOwotICAgICAgICAgICAg ICAgICAgZWxzZQotCQkgICAgZ290byB4aHR0cDsKLSAgICAgICAgICAgICAgICB9Ci0JICAgIH0K LQkgICAgbWFrZXN0cigmaHR0cF91c2VyLHMpOwotCSAgICBicmVhazsKLQkgIGNhc2UgSFRfU1df UFc6CQkvKiAvUEFTU1dPUkQgKi8KLQkgICAgZGVib2sgPSAwOwotCSAgICBzID0gTlVMTDsKLQkg ICAgaWYgKGdldHZhbCkgewotCQlpZiAoKHggPSBjbWZsZCgiUGFzc3dvcmQiLCIiLCZzLHh4c3Ry aW5nKSkgPCAwKQotCQkgIGdvdG8geGh0dHA7Ci0JICAgIH0KLQkgICAgbWFrZXN0cigmaHR0cF9w YXNzLHMpOwotCSAgICBicmVhazsKLSNpZm5kZWYgTk9TUEwKLQkgIGNhc2UgSFRfU1dfQVI6IHsJ CS8qIC9BUlJBWTogKi8KLQkgICAgICBjaGFyICogczIsIGFycmF5ID0gTlVMOwotCSAgICAgIGlm ICghZ2V0dmFsKSB7Ci0JCSAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1l bnRcbiIpOwotCQkgIHggPSAtOTsKLQkJICBnb3RvIHhodHRwOwotCSAgICAgIH0KLQkgICAgICBp ZiAoKHggPSBjbWZsZCgiQXJyYXkgbmFtZSAoYSBzaW5nbGUgbGV0dGVyIHdpbGwgZG8pIiwKLQkJ CSAgICAgIiIsCi0JCQkgICAgICZzLAotCQkJICAgICBOVUxMCi0JCQkgICAgICkpIDwgMCkgewot CQkgIGlmICh4ID09IC0zKSB7Ci0JCSAgICAgIHByaW50ZigiP0FycmF5IG5hbWUgcmVxdWlyZWRc biIpOwotCQkgICAgICB4ID0gLTk7Ci0JCSAgICAgIGdvdG8geGh0dHA7Ci0JCSAgfSBlbHNlCi0J CSAgICBnb3RvIHhodHRwOwotCSAgICAgIH0KLQkgICAgICBpZiAoISpzKSB7Ci0JCSAgcHJpbnRm KCI/QXJyYXkgbmFtZSByZXF1aXJlZFxuIik7Ci0JCSAgeCA9IC05OwotCQkgIGdvdG8geGh0dHA7 Ci0JICAgICAgfQotCSAgICAgIHMyID0gczsKLQkgICAgICBpZiAoKnMgPT0gQ01EUSkgcysrOwot CSAgICAgIGlmICgqcyA9PSAnJicpIHMrKzsKLQkgICAgICBpZiAoIWlzYWxwaGEoKnMpKSB7Ci0J CSAgcHJpbnRmKCI/QmFkIGFycmF5IG5hbWUgLSBcIiVzXCJcbiIsczIpOwotCQkgIHggPSAtOTsK LQkJICBnb3RvIHhodHRwOwotCSAgICAgIH0KLQkgICAgICBhcnJheSA9ICpzKys7Ci0JICAgICAg aWYgKGlzdXBwZXIoYXJyYXkpKQotCQlhcnJheSA9IHRvbG93ZXIoYXJyYXkpOwotCSAgICAgIGlm ICgqcyAmJiAoKnMgIT0gJ1snIHx8ICoocysxKSAhPSAnXScpKSB7Ci0JCSAgcHJpbnRmKCI/QmFk IGFycmF5IG5hbWUgLSBcIiVzXCJcbiIsczIpOwotCQkgIGh0dHBfYXJyYXkgPSBOVUw7Ci0JCSAg eCA9IC05OwotCQkgIGdvdG8geGh0dHA7Ci0JICAgICAgfQotCSAgICAgIGh0dHBfYXJyYXkgPSBh cnJheTsKLQkgICAgICBicmVhazsKLQkgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCSAgZGVmYXVs dDoKLQkgICAgeCA9IC0yOwotCSAgICBnb3RvIHhodHRwOwotCX0KLSAgICB9Ci0gICAgaHR0cF9h Y3Rpb24gPSBuOwkJCS8qIFNhdmUgdGhlIGFjdGlvbiAqLwotICAgIGlmIChodHRwX2FjdGlvbiA9 PSBIVFRQX1BVVCB8fCBodHRwX2FjdGlvbiA9PSBIVFRQX1BPUykgewotCWNtZmRiaSgmc3csCQkJ LyogMXN0IEZEQiAtIHN3aXRjaCAqLwotCSAgICAgICBfQ01LRVksCQkJLyogZmNvZGUgKi8KLQkg ICAgICAgIkxvY2FsIGZpbGVuYW1lXG4gT3Igc3dpdGNoIiwgLyogaGVscCAqLwotCSAgICAgICAi IiwJCQkvKiBkZWZhdWx0ICovCi0JICAgICAgICIiLAkJCS8qIGFkZHRsIHN0cmluZyBkYXRhICov Ci0JICAgICAgIG5odHRwcHRhYiwJCS8qIGtleXdvcmQgdGFibGUgc2l6ZSAqLwotCSAgICAgICA0 LAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kgKi8KLQkgICAgICAgeHhzdHJp bmcsCQkvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0JICAgICAgIGh0dHBwdGFiLAkJLyogS2V5 d29yZCB0YWJsZSAqLwotCSAgICAgICAmZmkJCQkvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCi0J ICAgICAgICk7Ci0JY21mZGJpKCZmaSwJCQkvKiAybmQgRkRCIC0gZmlsZW5hbWUgKi8KLQkgICAg ICAgX0NNSUZJLAkJCS8qIGZjb2RlICovCi0JICAgICAgICJMb2NhbCBmaWxlbmFtZSIsCS8qIGhs cG1zZyAqLwotCSAgICAgICAiIiwJCQkvKiBkZWZhdWx0ICovCi0JICAgICAgICIiLAkJCS8qIGFk ZHRsIHN0cmluZyBkYXRhICovCi0JICAgICAgIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEg Ki8KLQkgICAgICAgMCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLwotCSAgICAgICB4eHN0 cmluZywKLQkgICAgICAgTlVMTCwKLQkgICAgICAgTlVMTAotCSAgICAgICApOwotCXdoaWxlICgx KSB7Ci0JICAgIHggPSBjbWZkYigmc3cpOwotCSAgICBpZiAoeCA8IDApCi0JICAgICAgZ290byB4 aHR0cDsJCS8qIEZyZWUgYW55IG1hbGxvYydkIHRlbXAgc3RyaW5ncyAqLwotCSAgICBuID0gY21y ZXN1bHQubnJlc3VsdDsKLQkgICAgaWYgKGNtcmVzdWx0LmZjb2RlICE9IF9DTUtFWSkKLQkgICAg ICBicmVhazsKLQkgICAgYyA9IGNtZ2JyaygpOwkJLyogU3dpdGNoLi4uICovCi0JICAgIGdldHZh bCA9IChjID09ICc6JyB8fCBjID09ICc9Jyk7Ci0JICAgIGlmIChnZXR2YWwgJiYgIShjbWdrd2Zs Z3MoKSAmIENNX0FSRykpIHsKLQkJcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBh biBhcmd1bWVudFxuIik7Ci0JCXggPSAtOTsKLQkJZ290byB4aHR0cDsKLQkgICAgfQotCSAgICBz d2l0Y2ggKG4pIHsKLQkgICAgICBjYXNlIEhUX1BQX01UOgotCQlzID0gInRleHQvSFRNTCI7Ci0J CWlmIChnZXR2YWwpIHsKLQkJICAgIGlmICgoeCA9IGNtZmxkKCJNSU1FIHR5cGUiLAotCQkJCSAg ICJ0ZXh0L0hUTUwiLCZzLHh4c3RyaW5nKSkgPCAwKQotCQkgICAgICBnb3RvIHhodHRwOwotCQl9 Ci0JCW1ha2VzdHIoJmh0dHBfbWltZSxzKTsKLQkJYnJlYWs7Ci0JICAgICAgZGVmYXVsdDoKLQkJ eCA9IC0yOwotCQlnb3RvIHhodHRwOwotCSAgICB9Ci0JfQotCW1ha2VzdHIoJmh0dHBfbGZpbGUs Y21yZXN1bHQuc3Jlc3VsdCk7Ci0JbiA9IGNraW5kZXgoIi8iLGh0dHBfbGZpbGUsLTEsMSwwKTsK LQlpZiAobikKLQkgIHAgPSAmaHR0cF9sZmlsZVtuXTsKLQllbHNlCi0JICBwID0gaHR0cF9sZmls ZTsKLQlpZiAoKHggPSBjbWZsZCgiVVJMIG9yIHJlbW90ZSBmaWxlbmFtZSIscCwmcyx4eHN0cmlu ZykpIDwgMCkgewotICAgICAgICAgIGlmICh4ID09IC0zKSB7Ci0gICAgICAgICAgICBwcmludGYo Ij8lcyB3aGF0P1xuIiwoaHR0cF9hY3Rpb24gPT0gSFRUUF9QVVQpID8gIlB1dCIgOiAiUG9zdCIp OwotICAgICAgICAgICAgeCA9IC05OwotICAgICAgICAgIH0KLSAgICAgICAgICBnb3RvIHhodHRw OwotICAgICAgICB9Ci0JaWYgKCEqcykgcyA9IE5VTEw7Ci0JbWFrZXN0cigmaHR0cF9yZmlsZSxz KTsKLQotCWlmICgoeCA9IGNtdHh0KCJSZXNwb25zZSBmaWxlbmFtZSIsIiIsJnMseHhzdHJpbmcp KSA8IDApIHsKLSAgICAgICAgICBpZiAoeCAhPSAtMykKLSAgICAgICAgICAgIGdvdG8geGh0dHA7 Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCpzKQotICAgICAgICAgIG1ha2VzdHIoJmh0dHBfZGZp bGUscyk7Ci0gICAgfQotICAgIHN3aXRjaCAoaHR0cF9hY3Rpb24pIHsKLSAgICAgIGNhc2UgSFRU UF9ERUw6CQkJLyogREVMRVRFICovCi0JaWYgKCh4ID0gY21mbGQoIlVSTCBvciByZW1vdGUgc291 cmNlIGZpbGUiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgaWYgKHggPT0gLTMp IHsKLSAgICAgICAgICAgIHByaW50ZigiP0RlbGV0ZSB3aGF0P1xuIik7Ci0gICAgICAgICAgICB4 ID0gLTk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGdvdG8geGh0dHA7Ci0gICAgICAgIH0KLQlt YWtlc3RyKCZodHRwX3JmaWxlLHMpOwotCWJyZWFrOwotICAgICAgY2FzZSBIVFRQX0NPTjoJCQkv KiBDT05ORUNUICovCi0gICAgICAgIGlmICgoeCA9IGNtZmxkKCJSZW1vdGUgaG9zdFs6cG9ydF0i LCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7Ci0gICAgICAgICAgaWYgKHggPT0gLTMpIHsKLSAgICAg ICAgICAgIHByaW50ZigiP1JlbW90ZSBob3N0Wzpwb3J0XSBpcyByZXF1aXJlZFxuIik7Ci0gICAg ICAgICAgICB4ID0gLTk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGdvdG8geGh0dHA7Ci0gICAg ICAgIH0KLQltYWtlc3RyKCZodHRwX3JmaWxlLHMpOwotCWJyZWFrOwotICAgICAgY2FzZSBIVFRQ X0hFRDogewkJCS8qIEhFQUQgKi8KLQkgIGNoYXIgYnVmW0NLTUFYUEFUSCsxXTsKLQkgIGlmICgo eCA9IGNtZmxkKCJVUkwgb3IgcmVtb3RlIHNvdXJjZSBmaWxlIiwiIiwmcyx4eHN0cmluZykpIDwg MCkgewotCSAgICAgIGlmICh4ID09IC0zKSB7Ci0JCSAgcHJpbnRmKCI/SGVhZCBvZiB3aGF0P1xu Iik7Ci0JCSAgeCA9IC05OwotCSAgICAgIH0KLQkgICAgICBnb3RvIHhodHRwOwotCSAgfQotCSAg bWFrZXN0cigmaHR0cF9yZmlsZSxzKTsKLQotCSAgaWYgKGh0dHBfYXJyYXkgfHwgaHR0cF90eXBl KSB7IC8qIERlZmF1bHQgcmVzdWx0IGZpbGVuYW1lICovCi0JICAgICAgcCA9ICIiOwkJCSAvKiBO b25lIGlmIC9BUlJBWSBvciAvVE9TQ1JFRU4gKi8KLQkgIH0gZWxzZSB7Ci0JICAgICAgbiA9IGNr aW5kZXgoIi8iLGh0dHBfcmZpbGUsLTEsMSwwKTsgLyogT3RoZXJ3aXNlIHN0cmlwIHBhdGggKi8K LQkgICAgICBpZiAobikJCSAgICAgICAgICAgICAgICAgIC8qIGFuZCBhZGQgIi5oZWFkIiAqLwot CQlwID0gJmh0dHBfcmZpbGVbbl07Ci0JICAgICAgZWxzZQotCQlwID0gaHR0cF9yZmlsZTsKLQkg ICAgICBja21ha21zZyhidWYsQ0tNQVhQQVRILHAsIi5oZWFkIixOVUxMLE5VTEwpOwotCSAgICAg IHAgPSBidWY7Ci0JICB9Ci0JICBpZiAoKHggPSBjbW9maSgiTG9jYWwgZmlsZW5hbWUiLHAsJnMs eHhzdHJpbmcpKSA8IDApIHsKLQkgICAgICBpZiAoeCAhPSAtMykKLQkJZ290byB4aHR0cDsKLQkg IH0KLQkgIG1ha2VzdHIoJmh0dHBfbGZpbGUscyk7Ci0JICBicmVhazsKLSAgICAgIH0KLSAgICAg IGNhc2UgSFRUUF9HRVQ6CQkJLyogR0VUICovCi0gICAgICBjYXNlIEhUVFBfSURYOiB7CQkJLyog SU5ERVggKi8KLQkgIGV4dGVybiBpbnQgd2lsZGVuYTsKLQkgIGludCB0bXA7Ci0JICBjaGFyICog bGZpbGUgPSAiIjsKLQkgIGlmICgoeCA9IGNtZmxkKCJVUkwgb3IgcmVtb3RlIHNvdXJjZSBmaWxl IiwiIiwmcyx4eHN0cmluZykpIDwgMCkgewotCSAgICAgIGlmICh4ID09IC0zKSB7Ci0JCSAgcHJp bnRmKCI/R2V0IHdoYXQ/XG4iKTsKLQkJICB4ID0gLTk7Ci0JICAgICAgfQotCSAgICAgIGdvdG8g eGh0dHA7Ci0JICB9Ci0JICBtYWtlc3RyKCZodHRwX3JmaWxlLHMpOwotCSAgaWYgKGh0dHBfYWN0 aW9uID09IEhUVFBfR0VUICYmICFodHRwX3R5cGUpCi0JICAgIHpzdHJpcChodHRwX3JmaWxlLCZs ZmlsZSk7Ci0JICAvKiBVUkxzIG9mdGVuIGNvbnRhaW4gcXVlc3Rpb24gbWFya3Mgb3Igb3RoZXIg bWV0YWNoYXJhY3RlcnMgKi8KLQkgIC8qIGNtb2ZpKCkgZG9lc24ndCBsaWtlIHRoZW0gKi8KLQkg IHRtcCA9IHdpbGRlbmE7Ci0JICB3aWxkZW5hID0gMDsKLQkgIGlmICgoeCA9IGNtb2ZpKCJMb2Nh bCBmaWxlbmFtZSIsbGZpbGUsJnMseHhzdHJpbmcpKSA8IDApIHsKLQkgICAgICB3aWxkZW5hID0g dG1wOwotCSAgICAgIGlmICh4ICE9IC0zKQotCQlnb3RvIHhodHRwOwotCSAgfQotCSAgd2lsZGVu YSA9IHRtcDsKLQkgIG1ha2VzdHIoJmh0dHBfbGZpbGUscyk7Ci0JICBicmVhazsKLSAgICAgIH0K LSAgICAgIGNhc2UgSFRUUF9PUE46IHsKLQkgIGludCBzc2xzd2l0Y2ggPSAwOwotI2lmZGVmIENL X1NTTAotCSAgc3RydWN0IEZEQiBzdywgZmw7Ci0JICBjbWZkYmkoJnN3LAotCQkgX0NNS0VZLAkJ LyogZmNvZGUgKi8KLQkJICJJUCBob3N0IG5hbWUgb3IgYWRkcmVzcywgb3Igc3dpdGNoIiwgLyog aGxwbXNnICovCi0JCSAiIiwJCQkvKiBkZWZhdWx0ICovCi0JCSAiIiwJCQkvKiBhZGR0bCBzdHJp bmcgZGF0YSAqLwotCQkgMiwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8K LQkJIDQsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLwotCQkgeHhzdHJp bmcsCQkvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0JCSBzc2xzd3RhYiwJCS8qIEtleXdvcmQg dGFibGUgKi8KLQkJICZmbAkJCS8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KLQkJICk7Ci0JICBj bWZkYmkoJmZsLAkJCS8qIDJuZCBGREIgLSBob3N0ICovCi0JCSBfQ01GTEQsCQkvKiBmY29kZSAq LwotCQkgIiIsCQkJLyogaGxwbXNnICovCi0JCSAiIiwJCQkvKiBkZWZhdWx0ICovCi0JCSAiIiwJ CQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotCQkgMCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEg MSAqLwotCQkgMCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLwotCQkgeHhzdHJpbmcsCi0J CSBOVUxMLAotCQkgTlVMTAotCQkgKTsKLQkgIHggPSBjbWZkYigmc3cpOwkJLyogUGFyc2Ugc3dp dGNoIG9yIGhvc3QgKi8KLQkgIGlmICh4IDwgMCkJCQkvKiBFcnJvciAqLwotCSAgICBnb3RvIHho dHRwOwotCSAgaWYgKGNtcmVzdWx0LmZjb2RlID09IF9DTUZMRCkgeyAvKiBIb3N0ICovCi0JICAg ICAgcyA9IGNtcmVzdWx0LnNyZXN1bHQ7CSAgLyogU2V0IHVwIGV4cGVjdGVkIHBvaW50ZXIgKi8K LQkgICAgICBnb3RvIGhhdmVob3N0OyAgICAgICAgICAgICAgLyogR28gcGFyc2UgcmVzdCBvZiBj b21tYW5kICovCi0JICB9Ci0JICBzc2xzd2l0Y2ggPSAxOwkJLyogL1NTTCBvciAvVExTIHN3aXRj aCAtIHNldCBmbGFnICovCi0jZW5kaWYgLyogQ0tfU1NMICovCi0KLQkgIC8qIFBhcnNlIGhvc3Qg Ki8KLQotCSAgaWYgKCh4ID0gY21mbGQoIlVSTCwgaG9zdG5hbWUsIG9yIGlwLWFkZHJlc3MiLCIi LCZzLHh4c3RyaW5nKSkgPCAwKSB7Ci0JICAgICAgaWYgKHggPT0gLTMpIHsKLQkJICBwcmludGYo Ij9PcGVuIHdoYXQ/XG4iKTsKLQkJICB4ID0gLTk7Ci0JICAgICAgfQotCSAgICAgIGdvdG8geGh0 dHA7Ci0JICB9Ci0KLQloYXZlaG9zdDoJCQkvKiBDb21lIGhlcmUgd2l0aCBzIC0+IGhvc3QgKi8K LSNpZmRlZiBDS19VUkwKLQkgIHggPSB1cmxwYXJzZShzLCZodHRwX3VybCk7CS8qIFdhcyBhIFVS TCBnaXZlbj8gKi8KLQkgIGlmICh4IDwgMSkgewkJCS8qIE5vdCBhIFVSTCAqLwotI2VuZGlmIC8q IENLX1VSTCAqLwotCSAgICAgIG1ha2VzdHIoJmh0dHBfaG9zdCxzKTsKLQkgICAgICBpZiAoKHgg PQotCQkgICBjbWZsZCgiU2VydmljZSBuYW1lIG9yIHBvcnQgbnVtYmVyIiwKLQkJCSBzc2xzd2l0 Y2ggPyAiaHR0cHMiIDogImh0dHAiLCZzLHh4c3RyaW5nKSkgPCAwKQotCQlnb3RvIHhodHRwOwot CSAgICAgIGVsc2UKLQkJbWFrZXN0cigmaHR0cF9zcnYscyk7Ci0jaWZkZWYgQ0tfVVJMCi0JICB9 IGVsc2UgaWYgKGNrc3RyY21wKGh0dHBfdXJsLnN2YywiaHR0cCIsLTEsMCkgJiYgLyogTm9uLUhU VFAgVVJMICovCi0JCSAgICAgY2tzdHJjbXAoaHR0cF91cmwuc3ZjLCJodHRwcyIsLTEsMCkpIHsK LQkgICAgICBwcmludGYoIj9Ob24tSFRUUCBVUkxcbiIpOwotCSAgICAgIHggPSAtOTsKLQkgICAg ICBnb3RvIHhodHRwOwotCSAgfSBlbHNlIHsJCQkvKiBIYXZlIEhUVFAgVVJMICovCi0JICAgICAg bWFrZXN0cigmaHR0cF9zcnYsIGh0dHBfdXJsLnN2Yyk7Ci0JICAgICAgbWFrZXN0cigmaHR0cF91 c2VyLGh0dHBfdXJsLnVzcik7Ci0JICAgICAgbWFrZXN0cigmaHR0cF9wYXNzLGh0dHBfdXJsLnBz dyk7Ci0JICAgICAgbWFrZXN0cigmaHR0cF9ob3N0LGh0dHBfdXJsLmhvcyk7Ci0JICAgICAgaWYg KGh0dHBfdXJsLnBvcikKLQkJbWFrZXN0cigmaHR0cF9zcnYsaHR0cF91cmwucG9yKTsKLQkgICAg ICBtYWtlc3RyKCZodHRwX3JmaWxlLGh0dHBfdXJsLnB0aCk7Ci0JICB9Ci0JICBpZiAoaHR0cF9y ZmlsZSkgewkJLyogT3BlbiwgR0VULCBhbmQgQ2xvc2UgKi8KLQkgICAgICBwcmludGYoIj9EaXJl Y3RvcnkvZmlsZSBwYXRoIG5vdCBhbGxvd2VkIGluIEhUVFAgT1BFTiBVUkxcbiIpOwotCSAgICAg IHggPSAtOTsKLQkgICAgICBnb3RvIHhodHRwOwotCSAgfQotCSAgaWYgKCFja3N0cmNtcCgiaHR0 cHMiLGh0dHBfc3J2LC0xLDApIHx8IHNzbHN3aXRjaCB8fAotCSAgICAgICFja3N0cmNtcCgiNDQz IixodHRwX3NydiwtMSwwKSkKLQkgICAgaHR0cF9zc2wgPSAxOwotI2VuZGlmIC8qIENLX1VSTCAq LwotCSAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEhUVFBfQ0xTOgotICAgICAgICBicmVh azsKLSAgICB9Ci0gICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotICAgICAgZ290byB4aHR0cDsK LQotICAgIGlmIChodHRwX2FjdGlvbiA9PSBIVFRQX09QTikgewotICAgICAgICB4ID0gKGh0dHBf b3BlbihodHRwX2hvc3QsaHR0cF9zcnYsaHR0cF9zc2wscmRucywxMjgsaHR0cF9hZ2VudCkgPT0g MCk7Ci0gICAgICAgIGlmICh4KSB7Ci0gICAgICAgICAgICBpZiAoIXF1aWV0KSB7Ci0gICAgICAg ICAgICAgIGlmIChyZG5zWzBdKQotICAgICAgICAgICAgICAgIHByaW50ZigiQ29ubmVjdGVkIHRv ICVzIFslc11cclxuIixodHRwX2hvc3QscmRucyk7Ci0gICAgICAgICAgICAgIGVsc2UKLSAgICAg ICAgICAgICAgICBwcmludGYoIkNvbm5lY3RlZCB0byAlc1xyXG4iLGh0dHBfaG9zdCk7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaHR0cF9hZ2VudCkgewotICAgICAgICAgICAgICAg IGlmIChodHRwX2RfYWdlbnQpCi0JCSAgZnJlZShodHRwX2RfYWdlbnQpOwotICAgICAgICAgICAg ICAgIGh0dHBfZF9hZ2VudCA9IGh0dHBfYWdlbnQ7Ci0gICAgICAgICAgICAgICAgaHR0cF9hZ2Vu dCA9IE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaHR0cF91c2VyKSB7Ci0g ICAgICAgICAgICAgICAgaWYgKGh0dHBfZF91c2VyKQotCQkgIGZyZWUoaHR0cF9kX3VzZXIpOwot ICAgICAgICAgICAgICAgIGh0dHBfZF91c2VyID0gaHR0cF91c2VyOwotICAgICAgICAgICAgICAg IGh0dHBfdXNlciA9IE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaHR0cF9w YXNzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGh0dHBfZF9wYXNzKSB7Ci0gICAgICAgICAgICAg ICAgICAgIG1lbXNldChodHRwX2RfcGFzcywwLHN0cmxlbihodHRwX2RfcGFzcykpOwotICAgICAg ICAgICAgICAgICAgICBmcmVlKGh0dHBfZF9wYXNzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgaHR0cF9kX3Bhc3MgPSBodHRwX3Bhc3M7Ci0gICAgICAgICAgICAgICAgaHR0 cF9wYXNzID0gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGh0dHBfZF90eXBlID0g aHR0cF90eXBlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFxdWlldCkKLQkg ICAgICBwcmludGYoIj9IVFRQIENvbm5lY3Rpb24gZmFpbGVkLlxyXG4iKTsKLSAgICAgICAgfQot ICAgIH0gZWxzZSBpZiAoaHR0cF9hY3Rpb24gPT0gSFRUUF9DTFMpIHsKLSAgICAgICAgaWYgKGh0 dHBfZF9hZ2VudCkgewotICAgICAgICAgICAgZnJlZShodHRwX2RfYWdlbnQpOwotICAgICAgICAg ICAgaHR0cF9kX2FnZW50ID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBpZiAoaHR0cF9kX3Vz ZXIpIHsKLSAgICAgICAgICAgIGZyZWUoaHR0cF9kX3VzZXIpOwotICAgICAgICAgICAgaHR0cF9k X3VzZXIgPSBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIGlmIChodHRwX2RfcGFzcykgewotICAg ICAgICAgICAgbWVtc2V0KGh0dHBfZF9wYXNzLDAsc3RybGVuKGh0dHBfZF9wYXNzKSk7Ci0gICAg ICAgICAgICBmcmVlKGh0dHBfZF9wYXNzKTsKLSAgICAgICAgICAgIGh0dHBfZF9wYXNzID0gTlVM TDsKLSAgICAgICAgfQotICAgICAgICBodHRwX2RfdHlwZSA9IDA7Ci0gICAgICAgIHggPSAoaHR0 cF9jbG9zZSgpID09IDApOwotICAgIH0KLSAgICBpZiAoKGh0dHBfYWN0aW9uICE9IEhUVFBfQ0xT KSAmJgotCShodHRwX2FjdGlvbiAhPSBIVFRQX0NPTikgJiYgaHR0cF9yZmlsZSkgeyAvKiBSZW1v dGUgZmlsZSBpcyBVUkw/ICovCi0KLQkvKiBBbGwtaW4tb25lIGFjdGlvbnMgd2hlbiBhIFVSTCBp cyBnaXZlbi4uLiAqLwotCi0jaWZkZWYgQ0tfVVJMCi0JaWYgKHVybHBhcnNlKGh0dHBfcmZpbGUs Jmh0dHBfdXJsKSA+IDApIHsgLyogSGF2ZSBVUkw/ICovCi0JICAgIGlmIChja3N0cmNtcChodHRw X3VybC5zdmMsImh0dHAiLC0xLDApICYmIC8qIEl0J3MgYW4gSFRUUCBVUkw/ICovCi0JCWNrc3Ry Y21wKGh0dHBfdXJsLnN2YywiaHR0cHMiLC0xLDApKSB7Ci0JCXByaW50ZigiP05vbi1IVFRQIFVS TFxuIik7Ci0JCXggPSAtOTsKLQkJZ290byB4aHR0cDsKLQkgICAgfSBlbHNlIHsJCQkvKiBZZXMs IGNvbGxlY3QgdGhlIHBpZWNlcyAqLwotCQltYWtlc3RyKCZodHRwX3NydiwgaHR0cF91cmwuc3Zj KTsKLQkJbWFrZXN0cigmaHR0cF91c2VyLGh0dHBfdXJsLnVzcik7Ci0JCW1ha2VzdHIoJmh0dHBf cGFzcyxodHRwX3VybC5wc3cpOwotCQltYWtlc3RyKCZodHRwX2hvc3QsaHR0cF91cmwuaG9zKTsK LQkJaWYgKGh0dHBfdXJsLnBvcikKLQkJICBtYWtlc3RyKCZodHRwX3NydixodHRwX3VybC5wb3Ip OwotCQltYWtlc3RyKCZodHRwX3JmaWxlLGh0dHBfdXJsLnB0aCk7Ci0JICAgIH0KLQkgICAgaWYg KCFodHRwX3JmaWxlKSB7CQkvKiBTdGlsbCBoYXZlIGEgcGF0aD8gKi8KLSAgICAgICAgICAgICAg ICBtYWtlc3RyKCZodHRwX3JmaWxlLCIvIik7Ci0JICAgIH0KLQkgICAgaWYgKCFja3N0cmNtcCgi aHR0cHMiLGh0dHBfc3J2LC0xLDApIHx8IC8qIENoZWNrIGZvciBTU0wvVExTICovCi0JCSFja3N0 cmNtcCgiNDQzIixodHRwX3NydiwtMSwwKSkKLQkgICAgICBodHRwX3NzbCA9IDE7Ci0JICAgIGlm IChodHRwX2lzY29ubmVjdGVkKCkpCS8qIENsb3NlIGFueSBvcGVuIEhUVFAgY29ubmVjdGlvbiAq LwotCSAgICAgIGh0dHBfY2xvc2UoKTsKLQkgICAgaWYgKGh0dHBfcGFzcyA9PSBOVUxMICYmIGh0 dHBfZF9wYXNzICE9IE5VTEwpCi0JICAgICAgbWFrZXN0cigmaHR0cF9wYXNzLGh0dHBfZF9wYXNz KTsKLQkgICAgeCA9IChodHRwX29wZW4oaHR0cF9ob3N0LAotCQkJICAgaHR0cF9zcnYsaHR0cF9z c2wscmRucywxMjgsaHR0cF9kX2FnZW50KSA9PSAwKTsKLQkgICAgaWYgKHggPCAwKSB7Ci0JCXgg PSAwOwotCQlnb3RvIHhodHRwOwotCSAgICB9Ci0JICAgIGFsbGlub25lID0gMTsKLQl9Ci0jZW5k aWYgLyogQ0tfVVJMICovCi0gICAgICAgIGlmIChodHRwX3Bhc3MgPT0gTlVMTCAmJiBodHRwX2Rf cGFzcyAhPSBOVUxMKQotCSAgbWFrZXN0cigmaHR0cF9wYXNzLGh0dHBfZF9wYXNzKTsKLQotCWlm IChodHRwX2FjdGlvbiA9PSBIVFRQX09QTiAmJiBhbGxpbm9uZSkgewotCSAgICBodHRwX2FjdGlv biA9IEhUVFBfR0VUOwotCX0KLSAgICAgICAgeCA9IHhkb2h0dHAoaHR0cF9hY3Rpb24sCi0gICAg ICAgICAgICAgICAgICAgIGh0dHBfbGZpbGUsCi0JCSAgICBodHRwX3JmaWxlLAotICAgICAgICAg ICAgICAgICAgICBodHRwX2RmaWxlLAotCQkgICAgaHR0cF9hZ2VudCA/IGh0dHBfYWdlbnQgOiBo dHRwX2RfYWdlbnQsCi0JCSAgICBodHRwX2hkciwKLQkJICAgIGh0dHBfdXNlciAgPyBodHRwX3Vz ZXIgIDogaHR0cF9kX3VzZXIsCi0JCSAgICBodHRwX3Bhc3MgID8gaHR0cF9wYXNzICA6IGh0dHBf ZF9wYXNzLAotCQkgICAgaHR0cF9taW1lLAotCQkgICAgaHR0cF9hcnJheSwKLQkJICAgIGh0dHBf dHlwZQotCQkgICAgKTsKLQlpZiAoYWxsaW5vbmUpCi0JICB4ID0gKGh0dHBfY2xvc2UoKSA9PSAw KTsKLSAgICB9Ci0KLSAgeGh0dHA6Ci0gICAgaWYgKGh0dHBfYWdlbnQpIGZyZWUoaHR0cF9hZ2Vu dCk7Ci0gICAgaWYgKGh0dHBfaGRyKSAgIGZyZWUoaHR0cF9oZHIpOwotICAgIGlmIChodHRwX3Vz ZXIpICBmcmVlKGh0dHBfdXNlcik7Ci0gICAgaWYgKGh0dHBfcGFzcykgewotICAgICAgICBtZW1z ZXQoaHR0cF9wYXNzLDAsc3RybGVuKGh0dHBfcGFzcykpOwotICAgICAgICBmcmVlKGh0dHBfcGFz cyk7Ci0gICAgfQotICAgIGlmIChodHRwX21pbWUpICBmcmVlKGh0dHBfbWltZSk7Ci0gICAgaWYg KGh0dHBfbGZpbGUpIGZyZWUoaHR0cF9sZmlsZSk7Ci0gICAgaWYgKGh0dHBfcmZpbGUpIGZyZWUo aHR0cF9yZmlsZSk7Ci0gICAgaWYgKGh0dHBfZGZpbGUpIGZyZWUoaHR0cF9kZmlsZSk7Ci0gICAg aWYgKGh0dHBfaG9zdCkgIGZyZWUoaHR0cF9ob3N0KTsKLSAgICBpZiAoaHR0cF9zcnYpICAgZnJl ZShodHRwX3Nydik7Ci0KLSAgICBpZiAoeCA+IC0xKQotICAgICAgc3VjY2VzcyA9IHg7Ci0gICAg cmV0dXJuKHgpOwotfQotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2VuZGlmIC8qIE5PSFRUUCAq LwotCi0KLSNpZm5kZWYgTk9TUEwKLXN0YXRpYyBpbnQKLWRvdHJhY2UoKSB7Ci0gICAgaW50IG9u ID0gMTsKLSAgICBzdHJ1Y3QgRkRCIHN3LCBrdzsKLSAgICBjbWZkYmkoJnN3LAkJCQkvKiAxc3Qg RkRCIC0gc3dpdGNoICovCi0JICAgX0NNS0VZLAkJCS8qIGZjb2RlICovCi0JICAgIlRyYWNlIG9i amVjdDtcbiBPciBzd2l0Y2giLCAvKiBoZWxwICovCi0JICAgIiIsCQkJCS8qIGRlZmF1bHQgKi8K LQkgICAiIiwJCQkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLQkgICAyLAkJCQkvKiBrZXl3b3Jk IHRhYmxlIHNpemUgKi8KLQkgICA0LAkJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNt c3dpICovCi0JICAgeHhzdHJpbmcsCQkJLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotCSAgIG9u b2Zmc3csCQkJLyogS2V5d29yZCB0YWJsZSAqLwotCSAgICZrdwkJCQkvKiBQb2ludGVyIHRvIG5l eHQgRkRCICovCi0JICAgKTsKLSAgICBjbWZkYmkoJmt3LAkJCQkvKiAybmQgRkRCIC0gVHJhY2Ug b2JqZWN0ICovCi0JICAgX0NNS0VZLAkJCS8qIGZjb2RlICovCi0JICAgIlRyYWNlIG9iamVjdCIs CQkvKiBoZWxwICovCi0JICAgImFsbCIsCQkJLyogZGVmYXVsdCAqLwotCSAgICIiLAkJCQkvKiBh ZGR0bCBzdHJpbmcgZGF0YSAqLwotCSAgIG50cmFjZXRhYiwJCQkvKiBrZXl3b3JkIHRhYmxlIHNp emUgKi8KLQkgICAwLAkJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogMCA9IGtleXdvcmQgKi8K LQkgICB4eHN0cmluZywJCQkvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0JICAgdHJhY2V0YWIs CQkJLyogS2V5d29yZCB0YWJsZSAqLwotCSAgIE5VTEwJCQkJLyogUG9pbnRlciB0byBuZXh0IEZE QiAqLwotCSAgICk7Ci0gICAgaWYgKCh4ID0gY21mZGIoJnN3KSkgPCAwKQotICAgICAgcmV0dXJu KHgpOwotICAgIGlmIChjbXJlc3VsdC5mZGJhZGRyID09ICZzdykgewotCW9uID0gY21yZXN1bHQu bnJlc3VsdDsKLQlpZiAoKHggPSBjbWtleSh0cmFjZXRhYiwgbnRyYWNldGFiLCIiLCJhbGwiLHh4 c3RyaW5nKSkgPCAwKQotCSAgcmV0dXJuKHgpOwotICAgIH0gZWxzZSB7Ci0JeCA9IGNtcmVzdWx0 Lm5yZXN1bHQ7Ci0gICAgfQotICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKLSAgICAgIHJldHVy bih5KTsKLQotICAgIHN3aXRjaCAoeCkgewotICAgICAgY2FzZSBUUkFfQVNHOgotCXRyYV9hc2cg PSBvbjsKLQlicmVhazsKLSAgICAgIGNhc2UgVFJBX0NNRDoKLQl0cmFfY21kID0gb247Ci0JYnJl YWs7Ci0gICAgICBjYXNlIFRSQV9BTEw6Ci0JdHJhX2FzZyA9IG9uOwotCXRyYV9jbWQgPSBvbjsK LQlicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0JcmV0dXJuKC0yKTsKLSAgICB9Ci0gICAgcHJpbnRm KCJUUkFDRSAlc1xuIiwgb24gPyAiT04iIDogIk9GRiIpOwotICAgIHJldHVybihzdWNjZXNzID0g MSk7Ci19Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotCi1zdGF0aWMgaW50Ci1kb3Byb21wdCgpIHsK LSAgICBleHRlcm4gaW50IHhjbWRzcmM7Ci0gICAgaWYgKCh4ID0gY210eHQoIk9wdGlvbmFsIG1l c3NhZ2UiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQotICAgICAgcmV0dXJuKHgpOwotI2lmZGVmIE5P U1BMCi0gICAgcHJpbnRmKCI/U29ycnksIFBST01QVCByZXF1aXJlcyBzY3JpcHQgcHJvZ3JhbW1p bmcgbGFuZ3VhZ2VcbiIpOwotICAgIHJldHVybigtOSk7Ci0jZWxzZQotICAgIGRlYnVnKEYxMDEs IlByb21wdCBjbWRsdmwiLCIiLGNtZGx2bCk7Ci0gICAgY21kbHZsKys7Ci0gICAgaWYgKGNtZGx2 bCA+IENNRFNUS0wpIHsKLQlwcmludGYoIj9Db21tYW5kIHN0YWNrIG92ZXJmbG93OiAlZFxuIixj bWRsdmwpOwotCWNtZGx2bC0tOwotCXJldHVybigtOSk7Ci0gICAgfQotICAgIHhjbWRzcmMgPSBD TURfS0I7Ci0gICAgY21kc3RrW2NtZGx2bF0uc3JjID0gQ01EX0tCOwkvKiBTYXkgd2UncmUgYXQg dGhlIHByb21wdCAqLwotICAgIGNtZHN0a1tjbWRsdmxdLmx2bCA9IDA7Ci0gICAgY21kc3RrW2Nt ZGx2bF0uY2NmbGdzID0gY21kc3RrW2NtZGx2bC0xXS5jY2ZsZ3M7Ci0gICAgaWYgKHRyYV9jbWQp Ci0gICAgICBwcmludGYoIlslZF0gK1A6IFwiKHByb21wdClcIlxuIixjbWRsdmwpOwotICAgIGNv bmNiKChjaGFyKWVzY2FwZSk7Ci0gICAgaWYgKCFxdWlldCkKLSAgICAgIHByaW50ZigKLSIoUmVj dXJzaXZlIGNvbW1hbmQgcHJvbXB0OiBSZXN1bWUgc2NyaXB0IHdpdGggQ09OVElOVUUsIFNUT1Ag dG8gc3RvcC4uLilcbiIKLSAgICAgICAgICAgICk7Ci0gICAgaWYgKCpzKSB7CQkJCS8qIElmIHBy b21wdCBnaXZlbiAqLwotCW1ha2VzdHIoJihwcnN0cmluZ1tjbWRsdmwtMV0pLGNtZ2V0cCgpKTsg LyogU2F2ZSBjdXJyZW50IHByb21wdCAqLwotCWNtc2V0cChzKTsJCQkvKiBTZXQgbmV3IG9uZSAq LwotICAgIH0KLSAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotI2VuZGlmIC8qIE5PU1BMICovCi19 Ci0KLSNpZmRlZiBDS0xFQVJOCi1WT0lECi1sZWFybmNtZChzKSBjaGFyICpzOyB7CQkJLyogUmVj b3JkIGNvbW1hbmRzIGluIGxlYXJuZWQgc2NyaXB0ICovCi0gICAgY2hhciBidWZbNjRdOwotICAg IGludCBpLCBrOwotICAgIGlmIChsZWFybmZwICYmIGxlYXJuaW5nKSB7CQkvKiBPbmx5IGlmIG9w ZW4gYW5kIG9uICovCi0JayA9IGNrc3RybmNweShidWYscyw2NCk7Ci0JZm9yIChpID0gMDsgaSA8 IGs7IGkrKykgewkvKiBHZXQgdG9wLWxldmVsIGNvbW1hbmQga2V5d29yZCAqLwotCSAgICBpZiAo YnVmW2ldIDw9IFNQKSB7Ci0JCWJ1ZltpXSA9IE5VTDsKLQkJYnJlYWs7Ci0JICAgIH0KLQl9Ci0J ayA9IGxvb2t1cChjbWR0YWIsYnVmLG5jbWQsTlVMTCk7IC8qIExvb2sgaXQgdXAgKi8KLQlpZiAo ayA9PSBYWENPTiB8fCBrID09IFhYTEVBUk4pCSAgLyogRG9uJ3QgcmVjb3JkIENPTk5FQ1Qgb3Ig TEVBUk4gKi8KLQkgIHJldHVybjsKLQlpZiAoayA9PSBYWFRFTCkgewotCSAgICBmcHV0cygiU0VU IEhPU1QgL05FVFdPUks6VENQIixsZWFybmZwKTsKLQkgICAgZnB1dHMoJnNbaV0sbGVhcm5mcCk7 Ci0JICAgIGZwdXRzKCIgVEVMTkVUIC9URUxORVQiLGxlYXJuZnApOwotCSAgICBmcHV0cygiXG5J RiBGQUlMIFNUT1AgMSBDb25uZWN0aW9uIGZhaWxlZFxuIixsZWFybmZwKTsKLQl9IGVsc2Ugewot CSAgICBmcHV0cyhzLGxlYXJuZnApOwotCSAgICBmcHV0cygiXG4iLGxlYXJuZnApOwotCX0KLSAg ICB9Ci19Ci0jZW5kaWYgLyogQ0tMRUFSTiAqLwotCi0KLSNpZmRlZiBTU0hDTUQKLS8qCi0gIDIw MTAvMDMvMDEuLi4KLSAgUmVvcGVuIGEgY29ubmVjdGlvbiB0aGF0IHdhcyBtYWRlIHdpdGggYW4g ZXh0ZXJuYWwgc3NoIGNsaWVudAotICBhZnRlciBpdCBoYXMgYmVlbiBjbG9zZWQuCi0gKi8KLWlu dAotcmVkb3NzaCgpIHsKLSAgICBpbnQgeCwgbmV0c2F2ZTsKLSAgICB4ID0gbmV0dHlwZTsKLSAg ICBkZWJ1ZyhGMTExLCJyZWRvc3NoIG5ldHR5cGUiLHR0bmFtZSxuZXR0eXBlKTsKLSAgICBpZiAo KHkgPSBzZXRsaW4oWFhTU0gsMCwxKSkgPCAwKSB7Ci0JaWYgKGVycm5vKQotCSAgcHJpbnRmKCI/ JXNcbiIsY2tfZXJyc3RyKCkpOwotCWVsc2UKLQkgIHJldHVybih5KTsKLQluZXR0eXBlID0geDsJ CQkvKiBGYWlsZWQsIHJlc3RvcmUgbmV0IHR5cGUuICovCi0Jc3VjY2VzcyA9IDA7Ci0JcmV0dXJu KHkpOwotICAgIH0KLSAgICBuZXRzYXZlID0geDsKLSAgICByZXR1cm4oeSk7Ci19Ci0jZW5kaWYJ LyogU1NIQ01EICovCi0KLS8qCi0gIExpa2UgaG1zZ2EoKSBpbiBja3V1czIuYyBidXQgdGFrZXMg YSBzaW5nbGUgc3Vic3RpdHV0aW9uIHBhcmFtZXRlciwgczIsCi0gIHdoaWNoIHJlcGxhY2VzIGV2 ZXJ5IG9jY3VycmVuY2Ugb2YgIiVzIiBpbiB0aGUgZmlyc3QgYXJndW1lbnQuCi0gIEFkZGVkIHRv IHByaW50IHRleHQgY29udGFpbmluZyB0aGUgY29weXJpZ2h0IHllYXIsIHNvIHRoZSB5ZWFyIGRv ZXNuJ3QgCi0gIGhhdmUgdG8gYmUgaGFyZHdpcmVkIGludG8gbG90cyBvZiBzY2F0dGVyZWQgdGV4 dCBzdHJpbmdzLgotKi8KLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBQcmludCBhbiBhcnJheSBvZiBsaW5lcywgKi8KLSNpZmRlZiBDS19BTlNJQwotaG1zZ2FhKGNo YXIgKnNbXSwgY2hhciAqczIpCQkvKiBwYXVzaW5nIGF0IGVuZCBvZiBlYWNoIHNjcmVlbi4gKi8K LSNlbHNlCi1obXNnYWEocyxzMikgY2hhciAqc1tdOyBjaGFyICpzMjsKLSNlbmRpZgkvKiBDS19B TlNJQyAqLwotewotICAgIGV4dGVybiBpbnQgaG10b3BsaW5lOwotI2lmZGVmIE9TMgotICAgIGV4 dGVybiBpbnQgdHRfcm93c1tdLCB0dF9jb2xzW107Ci0jZWxzZSAvKiBPUzIgKi8KLSAgICBleHRl cm4gaW50IHR0X3Jvd3MsIHR0X2NvbHM7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgaW50IHgsIHks IGksIGosIGssIG47Ci0gICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0KLSNp ZmRlZiBDS19UVEdXU0laCi0jaWZkZWYgT1MyCi0gICAgdHRnY3dzeigpOwotI2Vsc2UgLyogT1My ICovCi0gICAgLyogQ2hlY2sgd2hldGhlciB3aW5kb3cgc2l6ZSBjaGFuZ2VkICovCi0gICAgaWYg KHR0Z3dzaXooKSA+IDApIHsKLSAgICAgICAgaWYgKHR0X3Jvd3MgPiAwICYmIHR0X2NvbHMgPiAw KSB7Ci0gICAgICAgICAgICBjbWRfcm93cyA9IHR0X3Jvd3M7Ci0gICAgICAgICAgICBjbWRfY29s cyA9IHR0X2NvbHM7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYg LyogQ0tfVFRHV1NJWiAqLwotCi0gICAgcHJpbnRmKCJcbiIpOyAgICAgICAgICAgICAgICAgICAg ICAgLyogU3RhcnQgb2ZmIHdpdGggYSBibGFuayBsaW5lICovCi0gICAgbiA9IChobXRvcGxpbmUg PiAwKSA/IGhtdG9wbGluZSA6IDE7IC8qIExpbmUgY291bnRlciAqLwotICAgIGZvciAoaSA9IDA7 ICpzW2ldOyBpKyspIHsKLSAgICAgICAgcHJpbnRmKChjaGFyICopc1tpXSxzMik7CS8qIFByaW50 IGEgbGluZS4gKi8KLQlwcmludGYoIlxuIik7Ci0gICAgICAgIHkgPSAoaW50KXN0cmxlbihzW2ld KTsKLSAgICAgICAgayA9IDE7Ci0gICAgICAgIGZvciAoaiA9IDA7IGogPCB5OyBqKyspICAgICAg ICAgLyogU2VlIGhvdyBtYW55IG5ld2xpbmVzIHdlcmUgKi8KLSAgICAgICAgICBpZiAoc1tpXVtq XSA9PSAnXG4nKSBrKys7ICAgICAvKiBpbiB0aGUgc3RyaW5nLi4uICovCi0gICAgICAgIG4gKz0g azsKLSAgICAgICAgaWYgKG4gPiAoY21kX3Jvd3MgLSAzKSAmJiAqc1tpKzFdKSAvKiBBZnRlciBh IHNjcmVlbmZ1bCwgZ2l2ZSB0aGVtICovCi0gICAgICAgICAgaWYgKCFhc2ttb3JlKCkpIHJldHVy bigwKTsgICAgLyogYSAibW9yZT8iIHByb21wdC4gKi8KLSAgICAgICAgICBlbHNlIG4gPSAwOwot ICAgIH0KLSAgICBwcmludGYoIlxuIik7Ci0gICAgcmV0dXJuKDApOwotfQotCi0vKiAgRCBPIEMg TSBEICAtLSAgRG8gYSBjb21tYW5kICAqLwotCi0vKgotIFJldHVybnM6Ci0gICAtMjogdXNlciB0 eXBlZCBhbiBpbGxlZ2FsIGNvbW1hbmQKLSAgIC0xOiByZXBhcnNlIG5lZWRlZAotICAgIDA6IHBh cnNlIHdhcyBzdWNjZXNzZnVsIChldmVuIHRobyBjb21tYW5kIG1heSBoYXZlIGZhaWxlZCkuCi0q LwotI2lmZGVmIERFQlVHCi1pbnQgY21kc3RhdHNbMjU2XSA9IHsgLTEsIC0xIH07Ci0jZW5kaWYg LyogREVCVUcgKi8KLQotaW50Ci1kb2NtZChjeCkgaW50IGN4OyB7Ci0gICAgZXh0ZXJuIGludCBu b2xvY2FsLCBjbWt3ZmxnczsKLQotICAgIGRlYnVnKEYxMDEsImRvY21kIGVudHJ5LCBjeCIsIiIs Y3gpOwotICAgIGFjdGl2ZWNtZCA9IGN4OwotICAgIGRvY29ueCA9ICgoYWN0aXZlY21kID09IFhY Q09OKSAgfHwgKGFjdGl2ZWNtZCA9PSBYWFRFTCkgfHwKLQkgICAgICAoYWN0aXZlY21kID09IFhY UkxPRykgfHwgKGFjdGl2ZWNtZCA9PSBYWFBJUEUpIHx8Ci0gICAgICAgICAgICAgIChhY3RpdmVj bWQgPT0gWFhJS1NEKSB8fCAoYWN0aXZlY21kID09IFhYUFRZKSk7Ci0vKgotICBPcmlnaW5hbGx5 IGFsbCBjb21tYW5kcyB3ZXJlIGhhbmRsZWQgd2l0aCBhIGJpZyBzd2l0Y2goKSBzdGF0ZW1lbnQs Ci0gIGJ1dCBldmVudHVhbGx5IHRoaXMgc3RhcnRlZCBibG93aW5nIHVwIGNvbXBpbGVycy4gIE5v dyB3ZSBoYXZlIGEgc2VyaWVzCi0gIG9mIHNlcGFyYXRlIGlmIHN0YXRlbWVudHMgYW5kIHNtYWxs IHN3aXRjaGVzLCB3aXRoIHRoZSBjb21tYW5kcyB0aGF0IGFyZQotICBtb3N0IGNvbW1vbmx5IGV4 ZWN1dGVkIGluIHNjaXB0cyBhbmQgbG9vcHMgY29taW5nIGZpcnN0LCB0byBzcGVlZCB1cAotICBj b21wdXRlLWJvdW5kIHNjcmlwdHMuCi0gICovCi0KLSNpZmRlZiBERUJVRwotICAgIGlmIChjbWRz dGF0c1swXSA9PSAtMSkgewkJLyogQ291bnQgY29tbWFuZHMgKi8KLQlpbnQgaTsJCQkJLyogZm9y IHR1bmluZy4uLiAqLwotCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKLQkgIGNtZHN0YXRzW2ld ID0gMDsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotICAgIHN3aXRjaCAoY3gpIHsKLSAg ICAgIGNhc2UgLTQ6CQkJCS8qIEVPRiAqLwotI2lmZGVmIE9TSwotCWlmIChtc2dmbGcpICBwcmlu dGYoIlxuIik7Ci0jZWxzZQotCWlmIChtc2dmbGcpICBwcmludGYoIlxyXG4iKTsKLSNlbmRpZiAv KiBPU0sgKi8KLQkgIGRvZXhpdChHT09EX0VYSVQseGl0c3RhKTsKLSAgICAgIGNhc2UgLTM6CQkJ CS8qIE51bGwgY29tbWFuZCAqLwotCXJldHVybigwKTsKLSAgICAgIGNhc2UgLTk6CQkJCS8qIExp a2UgLTIsIGJ1dCBlcnJtc2cgYWxyZWFkeSBkb25lICovCi0gICAgICBjYXNlIC0xOgkJCQkvKiBS ZXBhcnNlIG5lZWRlZCAqLwotCXJldHVybihjeCk7Ci0gICAgICBjYXNlIC02OgkJCQkvKiBTcGVj aWFsICovCi0gICAgICBjYXNlIC0yOgkJCQkvKiBFcnJvciwgbWF5YmUgKi8KLQotI2lmbmRlZiBO T1NQTAotLyoKLSAgTWF5YmUgdGhleSB0eXBlZCBhIG1hY3JvIG5hbWUuICBMZXQncyBsb29rIGl0 IHVwIGFuZCBzZWUuCi0qLwotCWlmIChjeCA9PSAtNikJCQkvKiBJZiB0aGV5IHR5cGVkIENSICov Ci0JICBja3N0cm5jYXQoY21kYnVmLCJcMDE1IixDTURCTCk7IC8qICBhZGQgaXQgYmFjayB0byBj b21tYW5kIGJ1ZmZlci4gKi8KLQlpZiAoaWZjbWRbY21kbHZsXSA9PSAyKQkJLyogV2F0Y2ggb3V0 IGZvciBJRiBjb21tYW5kcy4gKi8KLQkgIGlmY21kW2NtZGx2bF0tLTsKLQlyZXBhcnMgPSAxOwkJ CS8qIEZvcmNlIHJlcGFyc2UgKi8KLQljbXJlcygpOwotCWN4ID0gWFhETzsJCQkvKiBUcnkgRE8g Y29tbWFuZCAqLwotI2Vsc2UKLQlyZXR1cm4oY3gpOwotI2VuZGlmIC8qIE5PU1BMICovCi0gICAg ICBkZWZhdWx0OgotCWlmIChjeCA8IDApCi0JICByZXR1cm4oY3gpOwotCWJyZWFrOwotICAgIH0K LSNpZmRlZiBERUJVRwotICAgIGlmIChjeCA8IDI1NikKLSAgICAgIGNtZHN0YXRzW2N4XSsrOwot I2VuZGlmIC8qIERFQlVHICovCi0KLSAgICBpZiAoKGNta3dmbGdzICYgQ01fUFNIKQotI2lmbmRl ZiBOT1BVU0gKLQkmJiBub3B1c2gKLSNlbmRpZiAvKiBOT1BVU0ggKi8KLQkpIHsKLQlwcmludGYo Ij9BY2Nlc3MgdG8gc3lzdGVtIGRpc2FibGVkXG4iKTsKLQlyZXR1cm4oLTkpOwotICAgIH0KLSAg ICBpZiAoKGNta3dmbGdzICYgQ01fTE9DKQotI2lmbmRlZiBOT0xPQ0FMCi0JJiYgbm9sb2NhbAot I2VuZGlmIC8qIE5PTE9DQUwgKi8KLQkpIHsKLQlwcmludGYoIj9Db25uZWN0aW9ucyBkaXNhYmxl ZFxuIik7Ci0JcmV0dXJuKC05KTsKLSAgICB9Ci0KLSNpZm5kZWYgTk9TUEwKLSAgICAvKiBVc2Vk IGluIEZPUiBsb29wcyAqLwotCi0gICAgaWYgKGN4ID09IFhYX0lOQ1IgfHwgY3ggPT0gWFhJTkMg IHx8IC8qIF9JTkNSRU1FTlQsIElOQ1JFTUVOVCAqLwotCWN4ID09IFhYX0RFQ1IgfHwgY3ggPT0g WFhERUMpCSAvKiBfREVDUkVNRU5ULCBERUNSRU1FTlQgKi8KLSAgICAgIHJldHVybihkb2luY3Io Y3gpKTsKLQotICAgIC8qIERlZmluZSAob3IgY2hhbmdlIHRoZSBkZWZpbml0aW9uIG9mKSBhIG1h Y3JvIG9yIHZhcmlhYmxlICovCi0KLSAgICBpZiAoY3ggPT0gWFhVTkRFRiB8fCBjeCA9PSBYWFVO REZYKSB7Ci0jaWZkZWYgSUtTRAotCWlmIChpbnNlcnZlciAmJiAhRU5BQkxFRChlbl9hc2cpKSB7 Ci0JICAgIHByaW50ZigiP1NvcnJ5LCBERUZJTkUvQVNTSUdOIGRpc2FibGVkXG4iKTsKLQkgICAg cmV0dXJuKC05KTsKLQl9Ci0jZW5kaWYgLyogSUtTRCAqLwotCXJldHVybihkb3VuZGVmKGN4KSk7 CQkvKiBbX11VTkRFRklORSAqLwotICAgIH0KLSAgICBpZiAoY3ggPT0gWFhERUYgfHwgY3ggPT0g WFhBU1MgfHwKLQljeCA9PSBYWERGWCB8fCBjeCA9PSBYWEFTWCkgewotI2lmZGVmIElLU0QKLQlp ZiAoaW5zZXJ2ZXIgJiYgIUVOQUJMRUQoZW5fYXNnKSkgewotCSAgICBwcmludGYoIj9Tb3JyeSwg REVGSU5FL0FTU0lHTiBkaXNhYmxlZFxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotI2VuZGlm IC8qIElLU0QgKi8KLQlpZiAoYXRtYnVmWzBdID09ICcuJyAmJiAhYXRtYnVmWzFdKSAvKiAiLiIg ZW50ZXJlZCBhcyBrZXl3b3JkICovCi0JICB4eGRvdCA9IDE7CQkJLyogaS5lLiB3aXRoIHNwYWNl IGFmdGVyIGl0Li4uICovCi0JcmV0dXJuKGRvZGVmKGN4KSk7CQkvKiBERUZJTkUsIEFTU0lHTiwg ZXRjLi4uICovCi0gICAgfQotCi0gICAgLyogSUYsIFdISUxFLCBhbmQgZnJpZW5kcyAgKi8KLQot ICAgIGlmIChjeCA9PSBYWElGIHx8IGN4ID09IFhYSUZYIHx8IGN4ID09IFhYV0hJIHx8IGN4ID09 IFhYQVNTRVIpIHsKLQlyZXR1cm4oZG9pZihjeCkpOwotICAgIH0KLSAgICBpZiAoY3ggPT0gWFhT V0lUKSB7CQkJLyogU1dJVENIICovCi0JcmV0dXJuKGRvc3dpdGNoKCkpOwotICAgIH0KLQotICAg IC8qIEdPVE8sIEZPUldBUkQsIGFuZCBfRk9SV0FSRCAodXNlZCBpbnRlcm5hbGx5IGJ5IEZPUiwg V0hJTEUsIGV0YykgKi8KLQotICAgIGlmIChjeCA9PSBYWEdPVE8gfHwgY3ggPT0gWFhGV0QgfHwg Y3ggPT0gWFhYRldEKSB7IC8qIEdPVE8gb3IgRk9SV0FSRCAqLwotCS8qIE5vdGUsIGhlcmUgd2Ug ZG9uJ3Qgc2V0IFNVQ0NFU1MvRkFJTFVSRSBmbGFnICovCi0jaWZkZWYgQ09NTUVOVAotCWlmICgo eSA9IGNtZmxkKCJsYWJlbCIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKLQkgICAgaWYgKHkgPT0g LTMpIHsKLQkJaWYgKGN4ICE9IFhYWEZXRCkgewotCQkgICAgcHJpbnRmKCI/TGFiZWwgbmFtZSBy ZXF1aXJlZFxuIik7Ci0JCSAgICByZXR1cm4oLTkpOwotCQl9Ci0JICAgIH0gZWxzZQotCSAgICAg IHJldHVybih5KTsKLQl9Ci0JY2tzdHJuY3B5KHRtcGJ1ZixzLFRNUEJVRlNJWik7Ci0JaWYgKCh4 ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0jZWxzZQotCWlmICgoeSA9IGNtdHh0KCJsYWJl bCIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKLQkgICAgaWYgKHkgPT0gLTMpIHsKLQkJaWYgKGN4 ICE9IFhYWEZXRCkgewotCQkgICAgcHJpbnRmKCI/R09UTzogTGFiZWwgbmFtZSByZXF1aXJlZDog XCIlc1wiIFwiJXNcIlxuIiwKLQkJCSAgIGF0bWJ1ZiwKLQkJCSAgIGNtZGJ1Zik7Ci0JCSAgICBy ZXR1cm4oLTkpOwotCQl9Ci0JICAgIH0gZWxzZQotCSAgICAgIHJldHVybih5KTsKLQl9Ci0JY2tz dHJuY3B5KHRtcGJ1ZixicnN0cmlwKHMpLFRNUEJVRlNJWik7Ci0jZW5kaWYgLyogQ09NTUVOVCAq LwotCXMgPSB0bXBidWY7Ci0JZGVidWcoRjExMSwiR09UTyB0YXJnZXQiLHMsY3gpOwotCXJldHVy bihkb2dvdG8ocyxjeCkpOwotICAgIH0KLSAgICBpZiAoY3ggPT0gWFhETyB8fCBjeCA9PSBYWE1B Q1JPKSB7CS8qIERPIChhIG1hY3JvKSAqLwotCWNoYXIgbW5hbWVidWZbMTZdOwkJLyogKGJ1ZmZl ciBmb3IgY29udHJvbGxlZCB0ZW1wIG5hbWUpICovCi0Jc3RydWN0IEZEQiBrdywgZmw7Ci0JaW50 IG14OwkJCQkvKiBNYWNybyBpbmRleCAob24gc3RhY2shKSAqLwotCi0JZGVidWcoRjEwMSwiWFhN QUNSTyAwIixsaW5lLGN4KTsKLQlpZiAoY3ggPT0gWFhETykgewotCSAgICBpZiAobm1hYyA9PSAw KSB7Ci0JCXByaW50ZigiXG4/Tm8gbWFjcm9zIGRlZmluZWRcbiIpOwotCQlyZXR1cm4oLTkpOwot CSAgICB9Ci0JICAgIGZvciAoeSA9IDA7IHkgPCBubWFjOyB5KyspIHsgLyogY29weSB0aGUgbWFj cm8gdGFibGUgaW50byBhICovCi0JCW1hY2tleVt5XS5rd2QgPSBtYWN0YWJbeV0ua3dkOyAvKiBy ZWd1bGFyIGtleXdvcmQgdGFibGUgKi8KLQkJbWFja2V5W3ldLmt3dmFsID0geTsJLyogd2l0aCB2 YWx1ZSA9IHBvaW50ZXIgdG8gbWFjcm8gdGJsICovCi0JCW1hY2tleVt5XS5mbGdzID0gbWFjdGFi W3ldLmZsZ3M7Ci0JICAgIH0KLQkgICAgY21mZGJpKCZrdywJCQkvKiBGaXJzdCBGREIgLSBtYWNy byBuYW1lICovCi0JCSAgIF9DTUtFWSwJCS8qIGZjb2RlICovCi0JCSAgICJNYWNybyIsCQkvKiBo bHBtc2cgKi8KLQkJICAgIiIsCQkJLyogZGVmYXVsdCAqLwotCQkgICAiIiwJCQkvKiBhZGR0bCBz dHJpbmcgZGF0YSAqLwotCQkgICBubWFjLAkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBz aXplICovCi0JCSAgIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDAgPSBjbWtleSAqLwot CQkgICB4eHN0cmluZywJCS8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KLQkJICAgbWFja2V5LAkJ LyogS2V5d29yZCB0YWJsZSAqLwotCQkgICAmZmwJCQkvKiBQb2ludGVyIHRvIG5leHQgRkRCICov Ci0JCSAgICk7Ci0JICAgIGNtZmRiaSgmZmwsCQkJLyogMm5kIEZEQiAtIGZvciAieyIgKi8KLQkJ ICAgX0NNRkxELAkJLyogZmNvZGUgKi8KLQkJICAgIiIsCQkJLyogaGxwbXNnICovCi0JCSAgICIi LAotCQkgICAiIiwJCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotCQkgICAwLAkJCS8qIGFkZHRs IG51bWVyaWMgZGF0YSAxICovCi0JCSAgIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8K LQkJICAgeHhzdHJpbmcsCi0JCSAgIE5VTEwsCi0JCSAgIE5VTEwKLQkJICAgKTsKLQkgICAgeCA9 IGNtZmRiKCZrdyk7CQkvKiBQYXJzZSBzb21ldGhpbmcgKi8KLQkgICAgaWYgKHggPCAwKSB7CQkv KiBFcnJvciAqLwotCQlpZiAoeCA9PSAtMykgewotCQkgICAgcHJpbnRmKCI/TWFjcm8gbmFtZSBy ZXF1aXJlZFxuIik7Ci0JCSAgICByZXR1cm4oLTkpOwotCQl9IGVsc2UKLQkJICByZXR1cm4oeCk7 Ci0JICAgIH0KLQkgICAgaWYgKGNtcmVzdWx0LmZjb2RlID09IF9DTUtFWSkgewotCQlleHRlcm4g aW50IG10Y2hhbmdlZDsKLQkJY2hhciAqIG1hY3JvbmFtZSA9IE5VTEw7Ci0KLQkgICAgLyogSW4g Y2FzZSBhcmdzIGluY2x1ZGUgYW4gXGZleGVjKCkgdGhhdCBjaGFuZ2VzIHRoZSBtYWNybyB0YWJs ZSAqLwotCi0JCW14ID0geDsJCQkvKiBTYXZlIG1hY3JvIGluZGV4IG9uIHN0YWNrICovCi0JCW10 Y2hhbmdlZCA9IDA7CQkvKiBNYXJrIHN0YXRlIG9mIG1hY3JvIHRhYmxlICovCi0JCW1ha2VzdHIo Jm1hY3JvbmFtZSxtYWN0YWJbbXhdLmt3ZCk7IC8qIFNhdmUgbmFtZSAqLwotCi0JCWlmICgoeSA9 IGNtdHh0KCJvcHRpb25hbCBhcmd1bWVudHMiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQotCQkgIHJl dHVybih5KTsJCS8qIEdldCBtYWNybyBhcmdzICovCi0KLQkJaWYgKG10Y2hhbmdlZCkgewkvKiBN YWNybyB0YWJsZSBjaGFuZ2VkPyAqLwotCQkgICAgbXggPSBtbG9vayhtYWN0YWIsbWFjcm9uYW1l LG5tYWMpOyAvKiBMb29rIHVwIG5hbWUgYWdhaW4gKi8KLQkJfQotCQlpZiAobWFjcm9uYW1lKQot CQkgIGZyZWUobWFjcm9uYW1lKTsKLQotCQlyZXR1cm4oZG9kbyhteCxzLGNtZHN0a1tjbWRsdmxd LmNjZmxncykgPCAxID8KLQkJICAgICAgIChzdWNjZXNzID0gMCkgOiAxKTsKLQkgICAgfQotCSAg ICBja3N0cm5jcHkobGluZSxjbXJlc3VsdC5zcmVzdWx0LExJTkJVRlNJWik7CS8qIF9DTUZMRCAq LwotCSAgICBpZiAoYXRtYnVmWzBdID09ICd7JykgewotCQlpZiAoKHkgPSBjbWNmbSgpKSA8IDAp Ci0JCSAgcmV0dXJuKHkpOwotCSAgICB9Ci0JfSBlbHNlIHsJCQkvKiBYWE1BQ1JPICgiaW1tZWRp YXRlIG1hY3JvIikgKi8KLQkgICAgaW50IGsgPSAwOwotCSAgICBsaW5lW2srK10gPSAneyc7Ci0J ICAgIGxpbmVbaysrXSA9IFNQOwotCSAgICBsaW5lW2tdID0gTlVMOwotCSAgICBkZWJ1ZyhGMTEx LCJYWE1BQ1JPIEEiLGxpbmUsayk7Ci0JICAgIGlmICgoeSA9IGNtdHh0KCJCcmFjZWQgbGlzdCBv ZiBjb21tYW5kcyIsIiIsJnMseHhzdHJpbmcpKSA8IDApCi0JICAgICAgcmV0dXJuKHkpOwotCSAg ICBrID0gY2tzdHJuY3B5KGxpbmUrayxzLExJTkJVRlNJWi1rKTsKLQkgICAgZGVidWcoRjExMSwi WFhNQUNSTyBCIixsaW5lLGspOwotCX0KLQl4ID0gc3RybGVuKGxpbmUpOwotCWlmICgobGluZVsw XSA9PSAneycgJiYgbGluZVt4LTFdICE9ICd9JykgfHwgbGluZVswXSA9PSAnfScpCi0JICByZXR1 cm4oLTIpOwotCWlmIChsaW5lWzBdICE9ICd7JyAmJiBsaW5lW3gtMV0gIT0gJ30nKSB7Ci0JICAg IC8qIFVua25vd24gY29tbWFuZC4gIElmIE9OX1VOS05PV05fQ09NTUFORCBtYWNybyBpcyBkZWZp bmVkLCAqLwotCSAgICAvKiBwYXJzZSBhcmdzIGFuZCB0aGVuIGV4ZWN1dGUgaXQsIGJ1dCBvbmx5 IGlmIGl0IGlzIG5vdCAqLwotCSAgICAvKiBhbHJlYWR5IGFjdGl2ZS4gKi8KLQkgICAgaW50IGsg PSAtMTsKLQkgICAgaWYgKCF1bmttYWNybykgewotCQlrID0gbXhsb29rKG1hY3RhYiwib25fdW5r bm93bl9jb21tYW5kIixubWFjKTsKLQkgICAgfQotCSAgICBpZiAoayA+IC0xKSB7Ci0JCWNrc3Ry bmNweSh0bXBidWYsYXRtYnVmLFRNUEJVRlNJWik7Ci0JCXogPSBtYWNsdmw7CQkvKiBTYXZlIHRo ZSBjdXJyZW50IG1hY2x2bCAqLwotCQlpZiAoKHkgPSBjbXR4dCgidGV4dCIsIiIsJnMseHhzdHJp bmcpKSA8IDApCi0JCSAgcmV0dXJuKHkpOwotCQlja3N0cm5jYXQodG1wYnVmLCIgIixUTVBCVUZT SVopOwotCQlja3N0cm5jYXQodG1wYnVmLHMsVE1QQlVGU0laKTsKLQkJdW5rbWFjcm8gPSAxOwot CQlkZWJ1ZyhGMTEwLCJPTl9VTktOT1dOX0NPTU1BTkQiLHMsMCk7Ci0JCWRvZG8oayx0bXBidWYs Y21kc3RrW2NtZGx2bF0uY2NmbGdzKTsgLyogUnVuIHRoZSBtYWNybyAqLwotCQl3aGlsZSAobWFj bHZsID4geikgewotCQkgICAgc3N0YXRlID0gKENIQVIpIHBhcnNlcigxKTsKLQkJICAgIGlmIChz c3RhdGUpIHByb3RvKCk7Ci0JCX0KLQkJZGVidWcoRjEwMSwiVU5LTUFDIGxvb3AgZXhpdCBtYWNs dmwiLCIiLG1hY2x2bCk7Ci0JCXVua21hY3JvID0gMDsKLQkJcmV0dXJuKHN1Y2Nlc3MpOwotCSAg ICB9Ci0gICAgICAgICAgICBpZiAoeCA+IDApCi0JICAgICAgcHJpbnRmKCI/Tm90IGEgY29tbWFu ZCBvciBtYWNybyBuYW1lOiBcIiVzXCJcbiIsbGluZSk7Ci0gICAgICAgICAgICBlbHNlCi0JICAg ICAgcHJpbnRmKCI/Tm90IGEgY29tbWFuZCBvciBtYWNybyBuYW1lLlxuIik7Ci0JICAgIHJldHVy bigtOSk7Ci0JfQotCXMgPSBicnN0cmlwKGxpbmUpOwotCXNwcmludGYobW5hbWVidWYsIiAuLnRt cDolMDNkIixjbWRsdmwpOwkvKiBzYWZlICgxNikgKi8KLQl4ID0gYWRkbWFjKG1uYW1lYnVmLHMp OwotCXJldHVybihkb2RvKHgsTlVMTCxjbWRzdGtbY21kbHZsXS5jY2ZsZ3MpIDwgMSA/IChzdWNj ZXNzID0gMCkgOiAxKTsKLSAgICB9Ci0KLSAgICBpZiAoY3ggPT0gWFhMQkwpIHsJCQkvKiBMQUJF TCAqLwotCWlmICgoeCA9IGNtZmxkKCJsYWJlbCIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKLQkg ICAgaWYgKHggPT0gLTMpIHsKLSNpZmRlZiBDT01NRU5UCi0JCXByaW50ZigiP0xBQkVMOiBMYWJl bCBuYW1lIHJlcXVpcmVkOiBcIiVzXCJcbiIsIGNtZGJ1Zik7Ci0JCXJldHVybigtOSk7Ci0jZWxz ZQotCQlzID0gIiI7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCSAgICB9IGVsc2UgcmV0dXJuKHgp OwotCi0JfQotCWRlYnVnKEYxMTEsIkxBQkVMIixzLHgpOwotCWlmICgoeCA9IGNtY2ZtKCkpIDwg MCkgcmV0dXJuKHgpOwotCXJldHVybigwKTsKLSAgICB9Ci0KLSAgICBpZiAoY3ggPT0gWFhFVkFM IHx8IGN4ID09IFhYX0VWQUwpIC8qIF9FVkFMVUFURSwgIEVWQUxVQVRFICAqLwotICAgICAgcmV0 dXJuKGRvZXZhbChjeCkpOwotCi0jaWZuZGVmIE5PU0VYUAotICAgIGlmIChjeCA9PSBYWFNFWFAp IHsJCQkvKiBMaXNwLWxpa2UgUy1FeHByZXNzaW9uICovCi0Jc3RydWN0IHN0cmluZ2FycmF5ICog cTsKLQljaGFyIC8qICpwLCAqciwgKi8gKnRtcCwgKm07Ci0JaW50IGksIGssIG4sIHF1b3RlID0g MCwgY29udGQgPSAwLCBzaXplID0gMCwgbGVuID0gMDsKLQlleHRlcm4gaW50IHNleHByYywgc2V4 cHB2OwotCi0JdG1wID0gdG1wYnVmOwkJCS8qIEJ1ZmZlciB0byBjb2xsZWN0IFNFWFAgKi8KLQl0 bXBidWZbMF0gPSBOVUw7CQkvKiBDbGVhciBpdCAqLwotCXNpemUgPSBUTVBCVUZTSVo7CQkvKiBD YXBhY2l0eSBvZiBidWZmZXIgKi8KLQlzZXhwcmMgPSAtMTsJCQkvKiBBc3N1bWUgYmFkIGlucHV0 ICovCi0JbiA9IDA7CQkJCS8qIFBhcmVuIGJhbGFuY2UgY291bnRlciAqLwotCi0Jd2hpbGUgKDEp IHsJCQkvKiBBbGxvdyBTRVhQIG9uIG11bHRpcGxlIGxpbmVzICovCi0JICAgIG0gPSBjb250ZCA/ Ci0JICAgICAgIkNvbnRpbnVhdGlvbiBvZiBTLUV4cHJlc3Npb24iIDoKLQkJIlMtRXhwcmVzc2lv biAoXCJoZWxwIHNleHBcIiBmb3IgZGV0YWlscykiOwotCSAgICB4ID0gY210eHQobSwiIiwmcyx4 eHN0cmluZyk7Ci0JICAgIGlmICh4IDwgMCkKLQkgICAgICByZXR1cm4oeCk7Ci0JICAgIGlmICgh KnMpCQkJLyogTmVlZGVkIGZvciAoPSkgYW5kICg6KSAqLwotCSAgICAgIHMgPSBjbWRidWYrMTsJ CS8qIEkgY2FuJ3QgZXhwbGFpbiB3aHkuICovCi0JICAgIGsgPSBja21ha21zZyh0bXAsIHNpemUs IGNvbnRkID8gIiAiIDogIigiLCBzLCBOVUxMLCBOVUxMKTsKLQkgICAgaWYgKGsgPCAxKSB7Ci0J CXByaW50ZigiP1NFWFAgdG9vIGxvbmcgLSAlZCBtYXhcbiIsVE1QQlVGU0laKTsKLQkJcmV0dXJu KC05KTsKLQkgICAgfQotCSAgICBkZWJ1ZyhGMTExLGNvbnRkID8gInNleHAgY29udGQiIDogInNl eHAiLHMsayk7Ci0KLQkgICAgZm9yIChpID0gbGVuOyBpIDwgbGVuK2s7IGkrKykgeyAvKiBDaGVj ayBiYWxhbmNlICAqLwotCQlpZiAoIXF1b3RlICYmIHRtcGJ1ZltpXSA9PSBDTURRKSB7Ci0JCSAg ICBxdW90ZSA9IDE7Ci0JCSAgICBjb250aW51ZTsKLQkJfQotCQlpZiAocXVvdGUpIHsKLQkJICAg IHF1b3RlID0gMDsKLQkJICAgIGNvbnRpbnVlOwotCQl9Ci0JCWlmICh0bXBidWZbaV0gPT0gJygn KQotCQkgIG4rKzsKLQkJZWxzZSBpZiAodG1wYnVmW2ldID09ICcpJykKLQkJICBuLS07Ci0JICAg IH0KLQkgICAgaWYgKG4gPT0gMCkgewkJLyogQnJlYWsgd2hlbiBiYWxhbmNlZCAqLwotCQlicmVh azsKLQkgICAgfQotCSAgICBpZiAobiA8IDApIHsJCS8qIFRvbyBtYW55IHJpZ2h0IHBhcmVucyAq LwotCQlwcmludGYoIj9VbmJhbGFuY2VkIFMtRXhwcmVzc2lvbjogXCIlc1wiXG4iLHRtcGJ1Zik7 Ci0JCXJldHVybigtOSk7Ci0JICAgIH0KLQkgICAgY29udGQrKzsJCQkvKiBOZWVkIG1vcmUgcmln aHQgcGFyZW5zICovCi0JICAgIGNtaW5pKGNreGVjaCk7CQkvKiBzbyBrZWVwIHBhcnNpbmcgKi8K LQkgICAgdG1wICs9IGs7CQkJLyogYWRqdXN0IGJ1ZmZlciBwb2ludGVyICovCi0JICAgIHNpemUg LT0gazsJCQkvKiBhbmQgY2FwYWNpdHkgKi8KLQkgICAgbGVuICs9IGs7CQkJLyogYW5kIGxlbmd0 aCBzbyBmYXIgKi8KLQl9Ci0JcyA9IHRtcGJ1ZjsKLQltYWtlc3RyKCZsYXN0c2V4cCxzKTsKLQlx ID0gY2tzcGxpdCgxLFNFWFBNQVgscyxOVUxMLE5VTEwsOCwwLDApOyAvKiBQcmVjaGVjayBmb3Ig PiAxIFNFWFAgKi8KLQlkZWJ1ZyhGMTAxLCJzZXhwIHNwbGl0IiwiIixxLT5hX3NpemUpOwotCi0J aWYgKHEtPmFfc2l6ZSA9PSAxKSB7CQkvKiBXZSBzaG91bGQgZ2V0IGV4YWN0bHkgb25lIGJhY2sg Ki8KLQkgICAgY2hhciAqIHJlc3VsdCwgKiBkb3NleHAoKTsKLQkgICAgc2V4cHJjID0gMDsJCQkv KiBSZXNldCBvdXQtb2YtYmFuZCByZXR1cm4gY29kZSAqLwotCSAgICByZXN1bHQgPSBkb3NleHAo cyk7CQkvKiBHZXQgcmVzdWx0ICovCi0JICAgIGRlYnVnKEYxMTEsInNleHAgcmVzdWx0IixyZXN1 bHQsc2V4cHJjKTsKLQkgICAgaWYgKHNleHByYyA9PSAwKSB7CQkvKiBTdWNjZXNzICovCi0JCS8q IEVjaG8gdGhlIHJlc3VsdCBpZiBkZXNpcmVkICovCi0JCWlmICgoIXhjbWRzcmMgJiYgc2V4cGVj aG8gIT0gU0VUX09GRikgfHwgc2V4cGVjaG8gPT0gU0VUX09OKQotCQkgIHByaW50ZigiICVzXG4i LHJlc3VsdCA/IHJlc3VsdCA6ICIiKTsKLQkJbWFrZXN0cigmc2V4cHZhbCxyZXN1bHQpOwotCQlz dWNjZXNzID0gc2V4cHB2ID4gLTEgPyBzZXhwcHYgOiAxOwotCQlyZXR1cm4oc3VjY2Vzcyk7Ci0J ICAgIH0KLQl9Ci0JaWYgKHNleHByYyA8IDApCi0JICBwcmludGYoIj9JbnZhbGlkIFMtRXhwcmVz c2lvbjogXCIlc1wiXG4iLGxhc3RzZXhwKTsKLQlyZXR1cm4oLTkpOwotICAgIH0KLSNlbmRpZiAv KiBOT1NFWFAgKi8KLQotI2VuZGlmIC8qIE5PU1BMICovCi0KLSAgICBpZiAoY3ggPT0gWFhFQ0gg fHwgY3ggPT0gWFhYRUNIIHx8IGN4ID09IFhYVk9JRAotI2lmbmRlZiBOT1NQTAotCXx8IGN4ID09 IFhYQVBDCi0jZW5kaWYgLyogTk9TUEwgKi8KLQkpIHsJCQkJLyogRUNITyBvciBBUEMgKi8KLQlp ZiAoKHggPSBjbXR4dCgoY3ggPT0gWFhFQ0ggfHwgY3ggPT0gWFhYRUNIKSA/Ci0JCSAgICAgICAi VGV4dCB0byBiZSBlY2hvZWQiIDoKLQkJICAgICAgICgoY3ggPT0gWFhWT0lEKSA/ICJUZXh0IiA6 Ci0JCQkiQXBwbGljYXRpb24gUHJvZ3JhbSBDb21tYW5kIHRleHQiKSwKLQkJICAgICAgICIiLAot CQkgICAgICAgJnMsCi0JCSAgICAgICB4eHN0cmluZwotCQkgICAgICAgKQotCSAgICAgKSA8IDAp Ci0JICByZXR1cm4oeCk7Ci0JaWYgKCFzKSBzID0gIiI7Ci0jaWZkZWYgQ09NTUVOVAotLyogVGhp cyBpcyB0byBwcmVzZXJ2ZSB0aGUgcHJlLTguMCBiZWhhdmlvciBidXQgaXQncyB0b28gY29uZnVz aW5nICovCi0JeCA9IHN0cmxlbihzKTsKLQl4ID0gKHggPiAxKSA/ICgoc1swXSA9PSAnIicgJiYg c1t4LTFdID09ICciJykgPyAxIDogMCkgOiAwOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQlzID0g YnJzdHJpcChzKTsJCQkvKiBTdHJpcCBicmFjZXMgYW5kIGRvdWJsZXF1b3RlcyAqLwotCWlmIChj eCA9PSBYWEVDSCkgewkJLyogRUNITyAqLwotI2lmbmRlZiBOT1NQTAotCSAgICBpZiAoIWZuZGlh Z3MgfHwgZm5zdWNjZXNzKSB7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZmRlZiBDT01NRU5UCi0J CS8qIFRoZSAiaWYgKHgpIiBidXNpbmVzcyBwcmVzZXJ2ZXMgcHJldmlvdXMgYmVoYXZpb3IgKi8K LQkJLyogYnkgcHV0dGluZyBiYWNrIHRoZSBkb3VibGVxdW90ZXMgaWYgdGhleSB3ZXJlIGluY2x1 ZGVkLiAqLwotCQlpZiAoeCkKLQkJICBwcmludGYoIlwiJXNcIlxuIixzKTsKLQkJZWxzZQotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLQkJICBwcmludGYoIiVzXG4iLHMpOwotI2lmbmRlZiBOT1NQTAot CSAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQl9IGVsc2UgaWYgKGN4ID09IFhYWEVDSCkgewkv KiBYRUNITyAqLwotCSAgICBpZiAoeCkKLQkgICAgICBwcmludGYoIlwiJXNcIiIscyk7Ci0JICAg IGVsc2UKLQkgICAgICBwcmludGYoIiVzIixzKTsKLSNpZmRlZiBVTklYCi0JICAgIGZmbHVzaChz dGRvdXQpOwotI2VuZGlmIC8qIFVOSVggKi8KLQl9IGVsc2UgaWYgKGN4ID09IFhYQVBDKSB7CS8q IEFQQyAqLwotI2lmZGVmIENLX0FQQwotCSAgICBpZiAoYXBjYWN0aXZlID09IEFQQ19MT0NBTCB8 fAotCQkoYXBjYWN0aXZlID09IEFQQ19SRU1PVEUgJiYgIShhcGNzdGF0dXMgJiBBUENfVU5DSCkp KQotCSAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0JICAg IGlmICghbG9jYWwpIHsKLQkJcHJpbnRmKCIlY18lcyVjXFwiLEVTQyxzLEVTQyk7Ci0jaWZkZWYg VU5JWAotCQlmZmx1c2goc3Rkb3V0KTsKLSNlbmRpZiAvKiBVTklYICovCi0KLQkgICAgfSBlbHNl IHsJCQkvKiBMb2NhbCBtb2RlIC0gaGF2ZSBjb25uZWN0aW9uICovCi0jaWZuZGVmIE5PU1BMCi0J CWlmIChja21ha3htc2codG1wYnVmLAkvKiBGb3JtIEFQQyBzdHJpbmcgaW4gYnVmZmVyICovCi0J CQkgICAgICBUTVBCVUZTSVosCi0JCQkgICAgICBja2N0b2EoKGNoYXIpRVNDKSwKLQkJCSAgICAg IGNrY3RvYSgnXycpLAotCQkJICAgICAgcywKLQkJCSAgICAgIGNrY3RvYSgoY2hhcilFU0MpLAot CQkJICAgICAgY2tjdG9hKCdcXCcpLAotCQkJICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxM LE5VTEwsTlVMTAotCQkJICAgICAgKSA+IDApCi0JCSAgcmV0dXJuKHN1Y2Nlc3MgPSBkb291dHB1 dCh0bXBidWYsIFhYT1VUKSk7Ci0JCXByaW50ZigiP1RvbyBsb25nXG4iKTsKLQkJcmV0dXJuKC05 KTsKLSNlbHNlCi0JCXByaW50ZigiJWNfJXMlY1xcIixFU0MscyxFU0MpOwotI2VuZGlmIC8qIE5P U1BMICovCi0JICAgIH0KLQl9Ci0JcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICB9Ci0KLSNpZm5k ZWYgTk9TUEwKLS8qIENvcHkgbWFjcm8gYXJncyBmcm9tL3RvIHR3byBsZXZlbHMgdXAsIHVzZWQg aW50ZXJuYWxseSBieSBfZmxvb3AgZXQgYWwuICovCi0gICAgaWYgKGN4ID09IFhYR1RBIHx8IGN4 ID09IFhYUFRBKSB7CS8qIF9HRVRBUkdTLCBfUFVUQVJHUyAqLwotCWludCB4OwotCWRlYnVnKEYx MDEsImRvY21kIFhYR1RBIiwiIixYWEdUQSk7Ci0JZGVidWcoRjEwMSwiZG9jbWQgY3giLCIiLGN4 KTsKLQlkZWJ1ZyhGMTAxLCJkb2NtZCBYWEdUQSBtYWNsdmwiLCIiLG1hY2x2bCk7Ci0JeCA9IGRv Z3RhKGN4KTsKLQlkZWJ1ZyhGMTAxLCJkb2NtZCBkb2d0YSByZXR1cm5zIiwiIix4KTsKLQlkZWJ1 ZyhGMTAxLCJkb2NtZCBkb2d0YSBtYWNsdmwiLCIiLG1hY2x2bCk7Ci0JcmV0dXJuKHgpOwotICAg IH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVmIE5PU1BMCi0jaWZkZWYgQ0tDSEFOTkVM SU8KLSAgICBpZiAoY3ggPT0gWFhGSUxFKQotICAgICAgcmV0dXJuKGRvZmlsZShjeCkpOwotICAg IGVsc2UgaWYgKGN4ID09IFhYRl9SRSB8fCBjeCA9PSBYWEZfV1IgfHwgY3ggPT0gWFhGX09QIHx8 Ci0JICAgICBjeCA9PSBYWEZfQ0wgfHwgY3ggPT0gWFhGX1NFIHx8IGN4ID09IFhYRl9SVyB8fAot CSAgICAgY3ggPT0gWFhGX0ZMIHx8IGN4ID09IFhYRl9MSSB8fCBjeCA9PSBYWEZfU1QgfHwgY3gg PT0gWFhGX0NPKQotICAgICAgcmV0dXJuKGRvZmlsZShjeCkpOwotI2VuZGlmIC8qIENLQ0hBTk5F TElPICovCi0KLS8qIEFTSywgQVNLUSwgUkVBRCAqLwotICAgIGlmIChjeCA9PSBYWEFTSyAgfHwg Y3ggPT0gWFhBU0tRIHx8IGN4ID09IFhYUkVBIHx8Ci0JY3ggPT0gWFhSREJMIHx8IGN4ID09IFhY R0VUQyB8fCBjeCA9PSBYWEdFVEspIHsKLQlyZXR1cm4oZG9hc2soY3gpKTsKLSAgICB9Ci0jZW5k aWYgLyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT0ZSSUxMUwotI2lmbmRlZiBOT0hFTFAKLSAgICBp ZiAoY3ggPT0gWFhCVUcpIHsJCQkvKiBCVUcgKi8KLQlpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJl dHVybih4KTsKLQlyZXR1cm4oZG9idWcoKSk7Ci0gICAgfQotI2VuZGlmCS8qIE5PSEVMUCAqLwot I2VuZGlmCS8qIE5PRlJJTExTICovCi0KLSNpZm5kZWYgTk9YRkVSCi0gICAgaWYgKGN4ID09IFhY QllFKSB7CQkJLyogQllFICovCi0JZXh0ZXJuIGludCBmdHBfY21kbGluOwotCWlmICgoeCA9IGNt Y2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotCi0jaWZkZWYgTkVXRlRQCi0JaWYgKChmdHBnZXQgPT0g MSkgfHwgKChmdHBnZXQgPT0gMikgJiYgZnRwaXNvcGVuKCkpKSB7Ci0JICAgIGV4dGVybiBpbnQg c3RheWZsZywgZnRwX2ZhaTsKLQkgICAgc3VjY2VzcyA9IGZ0cGJ5ZSgpOwotCSAgICBpZiAoZnRw X2NtZGxpbiAmJiAhc3RheWZsZyAmJiAhbG9jYWwpCi0JICAgICAgZG9leGl0KGZ0cF9mYWkgPyBC QURfRVhJVCA6IEdPT0RfRVhJVCwtMSk7Ci0JICAgIGVsc2UKLQkgICAgICByZXR1cm4oc3VjY2Vz cyk7Ci0JfQotI2VuZGlmIC8qIE5FV0ZUUCAqLwotCi0JaWYgKCFsb2NhbCkgewotCSAgICBwcmlu dGYoIj9ObyBjb25uZWN0aW9uIC0gdXNlIEVYSVQgdG8gcXVpdC5cbiIpOwotCSAgICByZXR1cm4o LTkpOwotCX0KLQotI2lmZGVmIENLX1hZWgotCWlmIChwcm90b2NvbCAhPSBQUk9UT19LKSB7Ci0J ICAgIHByaW50ZigiP1NvcnJ5LCBCWUUgb25seSB3b3JrcyB3aXRoIEtlcm1pdCBwcm90b2NvbFxu Iik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotI2VuZGlmIC8qIENLX1hZWiAqLwotCi0jaWZkZWYg SUtTX09QVElPTgotICAgICAgICBpZiAoCi0jaWZkZWYgQ0tfWFlaCi0gICAgICAgICAgICBwcm90 b2NvbCA9PSBQUk9UT19LICYmCi0jZW5kaWYgLyogQ0tfWFlaICovCi0gICAgICAgICAgICAhaWtz X3dhaXQoS0VSTUlUX1JFUV9TVEFSVCwxKSkgewotCSAgICBwcmludGYoCi0JICAgICAiP0EgS2Vy bWl0IFNlcnZlciBpcyBub3QgYXZhaWxhYmxlIHRvIHByb2Nlc3MgdGhpcyBjb21tYW5kXG4iKTsK LQkgICAgcmV0dXJuKC05KTsJCQkvKiBDb3JyZWN0IHRoZSByZXR1cm4gY29kZSAqLwotICAgICAg ICB9Ci0jZW5kaWYgLyogSUtTX09QVElPTiAqLwotCi0JYnllX2FjdGl2ZSA9IDE7Ci0Jc3N0YXRl ID0gc2V0Z2VuKCdMJywiIiwiIiwiIik7Ci0JaWYgKGxvY2FsKSB0dGZsdWkoKTsJCS8qIElmIGxv Y2FsLCBmbHVzaCB0dHkgaW5wdXQgYnVmZmVyICovCi0JcmV0dXJuKDApOwotICAgIH0KLSNlbmRp ZiAvKiBOT1hGRVIgKi8KLQotICAgIGlmIChjeCA9PSBYWEJFRVApIHsJCQkvKiBCRUVQICovCi0g ICAgICAgIGludCB4OwotI2lmZGVmIE9TMgotCWludCB5OwotICAgICAgICBpZiAoKHkgPSBjbWtl eShiZWVwdGFiLCBuYmVlcHRhYiwgIndoaWNoIGtpbmQgb2YgYmVlcCIsICJpbmZvcm1hdGlvbiIs Ci0JCSAgICAgICB4eHN0cmluZykpIDwgMCApCi0JICByZXR1cm4gKHkpOwotICAgIAlpZiAoKHgg PSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgYmxlZXAoKHNob3J0KXkpOwkJLyog eSBpcyBvbmUgb2YgdGhlIEJQXyB2YWx1ZXMgKi8KLSNlbHNlICAvKiBPUzIgKi8KLSAgICAJaWYg KCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0jaWZuZGVmIE5PU1BMCi0gICAgICAgIGJs ZWVwKEJQX05PVEUpOwotI2Vsc2UKLQlwdXRjaGFyKCdcMDcnKTsKLSNlbmRpZiAvKiBOT1NQTCAq LwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICByZXR1cm4oMCk7Ci0gICAgfQotCi0jaWZuZGVm IE5PRlJJTExTCi0gICAgaWYgKGN4ID09IFhYQ0xFKQkJCS8qIENMRUFSICovCi0gICAgICByZXR1 cm4oc3VjY2VzcyA9IGRvY2xlYXIoKSk7Ci0jZW5kaWYgLyogTk9GUklMTFMgKi8KLQotICAgIGlm IChjeCA9PSBYWENPTSkgewkJCS8qIENPTU1FTlQgKi8KLQlpZiAoKHggPSBjbXR4dCgiVGV4dCBv ZiBjb21tZW50IGxpbmUiLCIiLCZzLE5VTEwpKSA8IDApCi0JICByZXR1cm4oeCk7Ci0JLyogRG9u J3QgY2hhbmdlIFNVQ0NFU1MgZmxhZyBmb3IgdGhpcyBvbmUgKi8KLQlyZXR1cm4oMCk7Ci0gICAg fQotCi0jaWZuZGVmIE5PTE9DQUwKLSAgICBpZiAoY3ggPT0gWFhDT04gfHwgY3ggPT0gWFhDUSkJ LyogQ09OTkVDVCBvciBDT05ORUNUIC9RVUlFVExZICovCi0gICAgICByZXR1cm4oZG94Y29ubihj eCkpOwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmbmRlZiBOT0ZSSUxMUwotI2lmZGVmIFpD T1BZCi0gICAgaWYgKGN4ID09IFhYQ1BZKSB7CQkJLyogQ09QWSBhIGZpbGUgKi8KLSNpZmRlZiBJ S1NECi0JaWYgKGluc2VydmVyICYmICFFTkFCTEVEKGVuX2NweSkpIHsKLQkgICAgcHJpbnRmKCI/ U29ycnksIENPUFkgaXMgZGlzYWJsZWRcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLSNlbmRp ZiAvKiBJS1NEICovCi0jaWZkZWYgQ0tfQVBDCi0JaWYgKGFwY2FjdGl2ZSA9PSBBUENfTE9DQUwg fHwKLQkgICAgKGFwY2FjdGl2ZSA9PSBBUENfUkVNT1RFICYmICEoYXBjc3RhdHVzICYgQVBDX1VO Q0gpKQotCSAgICApCi0JICByZXR1cm4oc3VjY2VzcyA9IDApOwotI2VuZGlmIC8qIENLX0FQQyAq LwotCXJldHVybihkb2NvcHkoKSk7Ci0gICAgfQotI2VuZGlmIC8qIFpDT1BZICovCi0jaWZkZWYg TlQKLSAgICBpZiAoIGN4ID09IFhYTElOSyApIHsKLSNpZmRlZiBJS1NECi0gICAgICAgIGlmIChp bnNlcnZlciAmJiAhRU5BQkxFRChlbl9jcHkpKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9Tb3Jy eSwgTElOSyAoQ09QWSkgaXMgZGlzYWJsZWRcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsK LSAgICAgICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLSNpZmRlZiBDS19BUEMKLSAgICAgICAgaWYg KGFwY2FjdGl2ZSA9PSBBUENfTE9DQUwgfHwKLSAgICAgICAgICAgIChhcGNhY3RpdmUgPT0gQVBD X1JFTU9URSAmJiAhKGFwY3N0YXR1cyAmIEFQQ19VTkNIKSkKLSAgICAgICAgICAgICkKLSAgICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotI2VuZGlmIC8qIENLX0FQQyAqLwotICAgICAgICBy ZXR1cm4oZG9saW5rKCkpOwotICAgIH0KLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIE5PRlJJ TExTICovCi0KLSAgICAvKiBDRCBhbmQgZnJpZW5kcyAqLwotICAgIGlmIChjeCA9PSBYWENXRCAg fHwgY3ggPT0gWFhDRFVQIHx8IGN4ID09IFhYQkFDSyB8fAotCWN4ID09IFhYTENXRCB8fCBjeCA9 PSBYWExDRFUgfHwgY3ggPT0gWFhLQ0QpIHsKLSNpZmRlZiBMT0NVUwotCWlmICghbG9jdXMpIHsK LQkgICAgaWYgKGN4ID09IFhYQ1dEKSB7Ci0jaWZkZWYgTk9YRkVSCi0gICAgICAgICAgICAgICAg cmV0dXJuKC0yKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuKGRvcm10KFhaQ1dEKSk7 Ci0jZW5kaWYgLyogTk9YRkVSICovCi0JICAgIH0gZWxzZSBpZiAoY3ggPT0gWFhDRFVQKSB7Ci0j aWZkZWYgTk9YRkVSCi0gICAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKLSNlbHNlCi0gICAgICAg ICAgICAgICAgcmV0dXJuKGRvcm10KFhaQ0RVKSk7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0gICAg ICAgICAgICB9Ci0JfQotI2VuZGlmIC8qIExPQ1VTICovCi0jaWZkZWYgSUtTRAotCWlmIChpbnNl cnZlciAmJiAhRU5BQkxFRChlbl9jd2QpKSB7Ci0JICAgIHByaW50ZigiP1NvcnJ5LCBjaGFuZ2lu ZyBkaXJlY3RvcmllcyBpcyBkaXNhYmxlZFxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotI2Vu ZGlmIC8qIElLU0QgKi8KLQlyZXR1cm4oc3VjY2VzcyA9IGRvY2QoY3gpKTsKLSAgICB9Ci0KLSAg ICBpZiAoY3ggPT0gWFhDSEspCQkJLyogQ0hFQ0sgKi8KLSAgICAgIHJldHVybihzdWNjZXNzID0g ZG9jaGsoKSk7Ci0KLSAgICBpZiAoY3ggPT0gWFhDTE8pIHsJCQkvKiBDTE9TRSAqLwotCXggPSBj bWtleShjbHN0YWIsbmNscywiXCJDT05ORUNUSU9OXCIsIG9yIGxvZyBvciBmaWxlIHRvIGNsb3Nl IiwKLQkJICAiY29ubmVjdGlvbiIseHhzdHJpbmcpOwotCWlmICh4ID09IC0zKSB7Ci0JICAgIHBy aW50ZigiP1lvdSBtdXN0IHNheSB3aGljaCBmaWxlIG9yIGxvZ1xuIik7Ci0JICAgIHJldHVybigt OSk7Ci0JfQotCWlmICh4IDwgMCkgcmV0dXJuKHgpOwotCWlmICgoeSA9IGNtY2ZtKCkpIDwgMCkg cmV0dXJuKHkpOwotI2lmbmRlZiBOT0xPQ0FMCi0JaWYgKHggPT0gOTk5OSkgewkJLyogQ0xPU0Ug Q09OTkVDVElPTiAqLwotCSAgICB4ID0gY2xzY29ubngoMCk7Ci0JICAgIHN3aXRjaCAoeCkgewot CSAgICAgIGNhc2UgMDoKLQkJaWYgKG1zZ2ZsZykgcHJpbnRmKCI/Q29ubmVjdGlvbiB3YXMgbm90 IG9wZW5cbiIpOwotCSAgICAgIGNhc2UgLTE6Ci0JCXJldHVybigwKTsKLQkgICAgICBjYXNlIDE6 Ci0JCXdoeWNsb3NlZCA9IFdDX0NMT1M7Ci0JCXJldHVybigxKTsKLQkgICAgfQotCSAgICByZXR1 cm4oMCk7Ci0JfQotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQl5ID0gZG9jbHNsb2coeCk7Ci0Jc3Vj Y2VzcyA9ICh5ID09IDEpOwotCXJldHVybihzdWNjZXNzKTsKLSAgICB9Ci0KLSNpZm5kZWYgTk9T UEwKLSAgICBpZiAoY3ggPT0gWFhEQ0wgfHwgY3ggPT0gWFhVTkRDTCkgewkvKiBERUNMQVJFIGFu IGFycmF5ICovCi0JcmV0dXJuKGRvZGNsKGN4KSk7Ci0gICAgfQotI2VuZGlmIC8qIE5PU1BMICov Ci0KLSNpZm5kZWYgTk9ESUFMCi0gICAgaWYgKGN4ID09IFhYUkVEICB8fCBjeCA9PSBYWERJQUwg fHwgY3ggPT0gWFhQRElBIHx8Ci0JY3ggPT0gWFhBTlNXIHx8IGN4ID09IFhYTE9PSykgeyAvKiBE SUFMLCBSRURJQUwgZXRjICovCi0jaWZkZWYgVk1TCi0JZXh0ZXJuIGludCBiYXRjaDsKLSNlbHNl Ci0jaWZkZWYgVU5JWE9ST1NLCi0JZXh0ZXJuIGludCBiYWNrZ3JkOwotI2VuZGlmIC8qIFVOSVhP Uk9TSyAqLwotI2VuZGlmIC8qIFZNUyAqLwotCXggPSBkb2RpYWwoY3gpOwotCWRlYnVnKEYxMDEs ImRvZGlhbCByZXR1cm5zIiwiIix4KTsKLQlpZiAoKGN4ID09IFhYRElBTCB8fCBjeCA9PSBYWFJF RCB8fCBjeCA9PSBYWEFOU1cpICYmCi0JICAgICh4ID4gMCkgJiYJCQkvKiBJZiBESUFMIG9yIFJF RElBTCBzdWNjZWVkZWQgKi8KLQkgICAgKGRpYWxzdGEgIT0gRElBX1BBUlQpICYmCS8qIGFuZCBp dCB3YXNuJ3QgcGFydGlhbCAqLwotCSAgICAoZGlhbGNvbiA+IDApKSB7Ci0JICAgIGlmICgoZGlh bGNvbiA9PSAxIHx8CS8qIEFuZCBESUFMIENPTk5FQ1QgaXMgT04sICovCi0JCSgoZGlhbGNvbiA9 PSAyKSAmJgkvKiBvciBESUFMIENPTk5FQ1QgaXMgQVVUTyAqLwotCQkgIXhjbWRzcmMJCS8qIGFu ZCB3ZSdyZSBhdCB0b3AgbGV2ZWwuLi4gKi8KLSNpZmRlZiBWTVMKLQkJICYmICFiYXRjaAkJLyog Tm90IGlmIHJ1bm5pbmcgZnJvbSBiYXRjaCAqLwotI2Vsc2UKLSNpZmRlZiBVTklYT1JPU0sKLQkJ ICYmICFiYWNrZ3JkCQkvKiBOb3QgaWYgcnVubmluZyBpbiBiYWNrZ3JvdW5kICovCi0jZW5kaWYg LyogVU5JWE9ST1NLICovCi0jZW5kaWYgLyogVk1TICovCi0JCSApKSkgLyogT3IgQVVUTyAqLwot CSAgICAgIHggPSBkb2NvbmVjdChkaWFsY3EsCS8qIFRoZW4gYWxzbyBDT05ORUNUICovCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICBjbWRsdmwgPT0gMCA/IDEgOiAwCi0JCQkgICApOwotCSAg ICBpZiAodHRjaGsoKSA8IDApCi0JICAgICAgZG9sb2dlbmQoKTsKLQl9Ci0JcmV0dXJuKHN1Y2Nl c3MgPSB4KTsKLSAgICB9Ci0jZW5kaWYgLyogTk9ESUFMICovCi0KLSNpZm5kZWYgTk9QVVNICi0j aWZkZWYgQ0tfUkVYWAotICAgIGlmIChjeCA9PSBYWFJFWFgpIHsJCQkvKiBSRVhYICovCi0gICAg ICAgIGV4dGVybiBpbnQgbm9wdXNoOwotICAgICAgICBpZiAoIG5vcHVzaCApCi0gICAgICAgICAg cmV0dXJuKHN1Y2Nlc3M9MCk7Ci0gICAgICAgIHJldHVybihkb3JleHgoKSk7Ci0gICAgfQotI2Vu ZGlmIC8qIENLX1JFWFggKi8KLSNlbmRpZiAvKiBOT1BVU0ggKi8KLQotI2lmbmRlZiBOT0ZSSUxM UwotICAgIGlmIChjeCA9PSBYWERFTCB8fCBjeCA9PSBYWExERUwpIHsJLyogREVMRVRFICovCi0j aWZkZWYgTE9DVVMKLQlpZiAoIWxvY3VzICYmIGN4ICE9IFhYTERFTCkgewotI2lmZGVmIE5PWEZF UgotCSAgICByZXR1cm4oLTIpOwotI2Vsc2UKLQkgICAgcmV0dXJuKGRvcm10KFhaREVMKSk7Ci0j ZW5kaWYgLyogTk9YRkVSICovCi0gICAgICAgIH0KLSNlbmRpZiAvKiBMT0NVUyAqLwotI2lmZGVm IElLU0QKLQlpZiAoaW5zZXJ2ZXIgJiYgKCFFTkFCTEVEKGVuX2RlbCkKLSNpZmRlZiBDS19MT0dJ TgotCQkJIHx8IGlzZ3Vlc3QKLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotCQkJICkpIHsKLQkgICAg cHJpbnRmKCI/U29ycnksIERFTEVURSBpcyBkaXNhYmxlZFxuIik7Ci0JICAgIHJldHVybigtOSk7 Ci0JfQotI2VuZGlmIC8qIElLU0QgKi8KLSNpZmRlZiBDS19BUEMKLQlpZiAoKGFwY2FjdGl2ZSA9 PSBBUENfTE9DQUwpIHx8Ci0JICAgICgoYXBjYWN0aXZlID09IEFQQ19SRU1PVEUpICYmICghKGFw Y3N0YXR1cyAmIEFQQ19VTkNIKSkpKQotCSAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSNlbmRpZiAv KiBDS19BUEMgKi8KLQlyZXR1cm4oZG9kZWwoKSk7Ci0gICAgfQotI2VuZGlmIC8qIE5PRlJJTExT ICovCi0KLSAgICBpZiAoY3ggPT0gWFhUT1VDKQkJCS8qIFRPVUNIICovCi0gICAgICByZXR1cm4o ZG9kaXIoY3gpKTsKLQotICAgIC8qIERJUkVDVE9SWSBjb21tYW5kcyAqLwotCi0gICAgaWYgKGN4 ID09IFhYRElSICB8fCBjeCA9PSBYWExTIHx8IGN4ID09IFhYTERJUiB8fAotCWN4ID09IFhYV0RJ UiB8fCBjeCA9PSBYWEhESVIpIHsKLSNpZmRlZiBMT0NVUwotCWlmICghbG9jdXMgJiYgY3ggIT0g WFhMRElSKSB7Ci0jaWZkZWYgTk9YRkVSCi0JICAgIHJldHVybigtMik7Ci0jZWxzZQotCSAgICBy ZXR1cm4oZG9ybXQoWFpESVIpKTsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSAgICAgICAgfQotI2Vu ZGlmIC8qIExPQ1VTICovCi0jaWZkZWYgSUtTRAotCWlmIChpbnNlcnZlciAmJiAhRU5BQkxFRChl bl9kaXIpKSB7Ci0JICAgIHByaW50ZigiP1NvcnJ5LCBESVJFQ1RPUlkgaXMgZGlzYWJsZWRcbiIp OwotCSAgICByZXR1cm4oLTkpOwotCX0KLSNlbmRpZiAvKiBJS1NEICovCi0JcmV0dXJuKGRvZGly KGN4KSk7Ci0gICAgfQotCi0jaWZuZGVmIE5PU1BMCi0gICAgaWYgKGN4ID09IFhYRUxTKQkJCS8q IEVMU0UgKi8KLSAgICAgIHJldHVybihkb2Vsc2UoKSk7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQot I2lmbmRlZiBOT1NFUlZFUgotI2lmbmRlZiBOT0ZSSUxMUwotICAgIGlmIChjeCA9PSBYWEVOQSB8 fCBjeCA9PSBYWERJUykgewkvKiBFTkFCTEUsIERJU0FCTEUgKi8KLQlzID0gKGN4ID09IFhYRU5B KSA/Ci0JICAiU2VydmVyIGZ1bmN0aW9uIHRvIGVuYWJsZSIgOgotCSAgICAiU2VydmVyIGZ1bmN0 aW9uIHRvIGRpc2FibGUiOwotCi0JaWYgKCh4ID0gY21rZXkoZW5hdGFiLG5lbmEscywiIix4eHN0 cmluZykpIDwgMCkgewotCSAgICBpZiAoeCA9PSAtMykgewotCQlwcmludGYoIj9OYW1lIG9mIHNl cnZlciBmdW5jdGlvbiByZXF1aXJlZFxuIik7Ci0JCXJldHVybigtOSk7Ci0JICAgIH0gZWxzZSBy ZXR1cm4oeCk7Ci0JfQotCWlmICgoeSA9IGNta2V5KGttc3RhYiwzLCJtb2RlIiwiYm90aCIseHhz dHJpbmcpKSA8IDApIHsKLQkgICAgaWYgKHkgPT0gLTMpIHsKLQkJcHJpbnRmKCI/UGxlYXNlIHNw ZWNpZnkgcmVtb3RlLCBsb2NhbCwgb3IgYm90aFxuIik7Ci0JCXJldHVybigtOSk7Ci0JICAgIH0g ZWxzZSByZXR1cm4oeSk7Ci0JfQotCWlmIChjeCA9PSBYWERJUykJCS8qIERpc2FibGluZywgbm90 IGVuYWJsaW5nICovCi0JICB5ID0gMyAtIHk7Ci0JaWYgKCh6ID0gY21jZm0oKSkgPCAwKSByZXR1 cm4oeik7Ci0jaWZkZWYgQ0tfQVBDCi0JaWYgKChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMKSB8fAot CSAgICAoKGFwY2FjdGl2ZSA9PSBBUENfUkVNT1RFKSAmJiAoIShhcGNzdGF0dXMgJiBBUENfVU5D SCkpKSkKLQkgIHJldHVybihzdWNjZXNzID0gMCk7Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0jaWZk ZWYgSUtTRAotICAgICAgICAvKiBUaGlzIG1heSBzZWVtIGxpa2UgaXQgZHVwbGljYXRlcyB0aGUg d29yayBpbiBkb2VuYWJsZSgpICAqLwotICAgICAgICAvKiBidXQgdGhpcyBjb2RlIHJldHVybnMg ZmFpbHVyZSB3aGVyZWFzIGRvZW5hYmxlKCkgcmV0dXJucyAqLwotICAgICAgICAvKiBzdWNjZXNz LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAg ICAgICBpZiAoaW5zZXJ2ZXIgJiYKLSNpZmRlZiBJS1NEQ09ORgotICAgICAgICAgICAgaWtzZGNm ICYmCi0jZW5kaWYgLyogSUtTRENPTkYgKi8KLSAgICAgICAgICAgICh4ID09IEVOX0hPUyB8fCB4 ID09IEVOX1BSSSB8fCB4ID09IEVOX01BSSB8fCB4ID09IEVOX1dITyB8fAotICAgICAgICAgICAg ICBpc2d1ZXN0KSkKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0jZW5kaWYgLyog SUtTRCAqLwotCXJldHVybihkb2VuYWJsZSh5LHgpKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9GUklM TFMgKi8KLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgaWYgKGN4 ID09IFhYUkVUKSB7CQkJLyogUkVUVVJOICovCi0JaWYgKCh4ID0gY210eHQoIk9wdGlvbmFsIHJl dHVybiB2YWx1ZSIsIiIsJnMsTlVMTCkpIDwgMCkKLQkgIHJldHVybih4KTsKLQlzID0gYnJzdHJp cChzKTsJCQkvKiBTdHJpcCBicmFjZXMgKi8KLQlpZiAoY21kbHZsID09IDApCQkvKiBBdCB0b3Ag bGV2ZWwsIG5vdGhpbmcgaGFwcGVucy4uLiAqLwotCSAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQlz d2l0Y2ggKGNtZHN0a1tjbWRsdmxdLnNyYykgewkvKiBBY3Rpb24gZGVwZW5kcyBvbiBjb21tYW5k IHNvdXJjZSAqLwotCSAgY2FzZSBDTURfVEY6CQkJLyogQ29tbWFuZCBmaWxlICovCi0JICAgIHBv cGNsdmwoKTsJCQkvKiBQb3AgY29tbWFuZCBsZXZlbCAqLwotCSAgICByZXR1cm4oc3VjY2VzcyA9 IDEpOwkvKiBhbHdheXMgc3VjY2VlZHMgKi8KLQkgIGNhc2UgQ01EX01EOgkJCS8qIE1hY3JvICov Ci0JICBjYXNlIENNRF9LQjoJCQkvKiBQcm9tcHQgKi8KLQkgICAgcmV0dXJuKGRvcmV0dXJuKHMp KTsJLyogVHJhaWxpbmcgdGV4dCBpcyByZXR1cm4gdmFsdWUuICovCi0JICBkZWZhdWx0OgkJCS8q IFNob3VsZG4ndCBoYXBwZW4gKi8KLQkgICAgcmV0dXJuKC0yKTsKLQl9Ci0gICAgfQotI2VuZGlm IC8qIE5PU1BMICovCi0KLSNpZm5kZWYgTk9TUEwKLSAgICBpZiAoY3ggPT0gWFhPUEUpCQkJLyog T1BFTiAqLwotICAgICAgcmV0dXJuKGRvb3BlbigpKTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0j aWZuZGVmIE5PU1BMCi0gICAgaWYgKGN4ID09IFhYT1VUIHx8IGN4ID09IFhYTE5PVVQpIHsJLyog T1VUUFVUIG9yIExJTkVPVVQgKi8KLQlpZiAoKHggPSBjbXR4dCgiVGV4dCB0byBiZSBvdXRwdXQi LCIiLCZzLE5VTEwpKSA8IDApCi0JICByZXR1cm4oeCk7Ci0jaWZkZWYgQ0tfQVBDCi0JaWYgKChh cGNhY3RpdmUgPT0gQVBDX0xPQ0FMKSB8fAotCSAgICAoKGFwY2FjdGl2ZSA9PSBBUENfUkVNT1RF KSAmJiAoIShhcGNzdGF0dXMgJiBBUENfVU5DSCkpKSkKLQkgIHJldHVybihzdWNjZXNzID0gMCk7 Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0JZGVidWcoRjExMCwiT1VUUFVUIDEiLHMsMCk7Ci0JcyA9 IGJyc3RyaXAocyk7CQkJLyogU3RyaXAgZW5jbG9zaW5nIGJyYWNlcywgKi8KLQlkZWJ1ZyhGMTEw LCJPVVRQVVQgMiIscywwKTsKLS8qCi0gIEkgZG9uJ3QgdGhpbmsgSSBjb3VsZCBldmVyIGZ1bGx5 IGV4cGxhaW4gdGhpcyBpbiBhIG1pbGxpb24geWVhcnMuLi4KLSAgV2UgaGF2ZSByZWFkIHRoZSB1 c2VyJ3Mgc3RyaW5nIHdpdGhvdXQgY2FsbGluZyB0aGUgdmFyaWFibGUtZXhwYW5kZXIKLSAgZnVu Y3Rpb24uICBOb3csIGJlZm9yZSB3ZSBjYWxsIGl0LCB3ZSBoYXZlIHRvIGRvdWJsZSBiYWNrc2xh c2hlcyB0aGF0Ci0gIGFwcGVhciBiZWZvcmUgXE4sIFxCLCBcTCwgYW5kIFwgaXRzZWxmLCBzbyB0 aGUgZXhwYW5kZXIgZnVuY3Rpb24gd2lsbAotICByZWR1Y2UgdGhlbSBiYWNrIHRvIHNpbmdsZSBi YWNrc2xhc2hlcywgc28gd2hlbiB3ZSBjYWxsIGRvb3V0cHV0KCkuLi4KLSAgQnV0IGl0J3MgbW9y ZSBjb21wbGljYXRlZCB0aGFuIHRoYXQuCi0qLwotCWlmIChjbWRncXVvKCkpIHsJCS8qIE9ubHkg aWYgQ09NTUFORCBRVU9USU5HIE9OIC4uLiAqLwotCSAgICBmb3IgKHggPSAwLCB5ID0gMDsgc1t4 XTsgeCsrLCB5KyspIHsKLQkJaWYgKHNbeF0gPT0gQ01EUSkgewotCQkgICAgY2hhciBjID0gc1t4 KzFdOwotCQkgICAgaWYgKGMgPT0gJ24nIHx8IGMgPT0gJ04nIHx8Ci0JCQljID09ICdiJyB8fCBj ID09ICdCJyB8fAotCQkJYyA9PSAnbCcgfHwgYyA9PSAnTCcgfHwKLQkJCWMgPT0gQ01EUSkKLQkJ ICAgICAgbGluZVt5KytdID0gQ01EUTsKLQkJfQotCQlsaW5lW3ldID0gc1t4XTsKLQkgICAgfQot CSAgICBsaW5lW3krK10gPSAnXDAnOwkJLyogTm93IGV4cGFuZCB2YXJpYWJsZXMsIGV0Yy4gKi8K LQkgICAgZGVidWcoRjExMCwiT1VUUFVUIDMiLGxpbmUsMCk7Ci0JICAgIHMgPSBsaW5lK3krMTsK LQkgICAgeCA9IExJTkJVRlNJWiAtIChpbnQpIHN0cmxlbihsaW5lKSAtIDE7Ci0JICAgIGRlYnVn KEYxMDEsIk9VVFBVVCBzaXplIiwiIix4KTsKLQkgICAgaWYgKHp6c3RyaW5nKGxpbmUsJnMsJngp IDwgMCkKLQkgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotCSAgICBzID0gbGluZSt5KzE7Ci0J ICAgIGRlYnVnKEYxMTAsIk9VVFBVVCA0IixzLDApOwotCX0KLQlzdWNjZXNzID0gZG9vdXRwdXQo cyxjeCk7Ci0JcmV0dXJuKHN1Y2Nlc3MpOwotICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0j aWZkZWYgQU5ZWDI1Ci0jaWZuZGVmIElCTVgyNQotICAgIGlmIChjeCA9PSBYWFBBRCkgewkJCS8q IFBBRCBjb21tYW5kcyAqLwotCXggPSBjbWtleShwYWR0YWIsbnBhZGMsIlBBRCBjb21tYW5kIiwi Iix4eHN0cmluZyk7Ci0JaWYgKHggPT0gLTMpIHsKLQkgICAgcHJpbnRmKCI/WW91IG11c3Qgc3Bl Y2lmeSBhIFBBRCBjb21tYW5kIHRvIGV4ZWN1dGVcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0K LQlpZiAoeCA8IDApIHJldHVybih4KTsKLQotCXN3aXRjaCAoeCkgewotCSAgY2FzZSBYWVBBREw6 Ci0JICAgIGlmICh4MjVzdGF0KCkgPCAwKQotCSAgICAgIHByaW50ZigiU29ycnksIHlvdSBtdXN0 ICdzZXQgbmV0d29yaycgJiAnc2V0IGhvc3QnIGZpcnN0XHJcbiIpOwotCSAgICBlbHNlIHsKLQkJ eDI1Y2xlYXIoKTsKLQkJaW5pdHBhZCgpOwotCSAgICB9Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBY WVBBRFM6Ci0JICAgIGlmICh4MjVzdGF0KCkgPCAwKQotCSAgICAgIHByaW50ZigiTm90IGNvbm5l Y3RlZFxyXG4iKTsKLQkgICAgZWxzZSB7Ci0JCWV4dGVybiBpbnQgbGlua2lkLCBsY247Ci0JCWNv bm9sKCJDb25uZWN0ZWQgdGhydSAiKTsKLQkJY29ub2wodHRuYW1lKTsKLQkJcHJpbnRmKCIsIExp bmsgaWQgJWQsIExvZ2ljYWwgY2hhbm5lbCBudW1iZXIgJWRcclxuIiwKLQkJICAgICAgIGxpbmtp ZCxsY24pOwotCSAgICB9Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBYWVBBRFI6Ci0JICAgIGlmICh4 MjVzdGF0KCkgPCAwKQotCSAgICAgIHByaW50ZigiU29ycnksIHlvdSBtdXN0ICdzZXQgbmV0d29y aycgJiAnc2V0IGhvc3QnIGZpcnN0XHJcbiIpOwotCSAgICBlbHNlCi0JICAgICAgeDI1cmVzZXQo MCwwKTsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIFhZUEFESToKLQkgICAgaWYgKHgyNXN0YXQoKSA8 IDApCi0JICAgICAgcHJpbnRmKCJTb3JyeSwgeW91IG11c3QgJ3NldCBuZXR3b3JrJyAmICdzZXQg aG9zdCcgZmlyc3RcclxuIik7Ci0JICAgIGVsc2UKLQkgICAgICB4MjVpbnRyKDApOwotCX0KLQly ZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIElCTVgyNSAqLwotI2VuZGlmIC8qIEFOWVgyNSAq LwotCi0jaWZuZGVmIE5PU1BMCi0gICAgaWYgKGN4ID09IFhYUEFVIHx8IGN4ID09IFhYV0FJIHx8 IGN4ID09IFhYTVNMKSAvKiBQQVVTRSwgV0FJVCwgZXRjICovCi0gICAgICByZXR1cm4oZG9wYXVz KGN4KSk7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT0ZSSUxMUwotICAgIGlmIChj eCA9PSBYWFBSSSkgewotI2lmZGVmIElLU0QKLSNpZmRlZiBDS19MT0dJTgotCWlmIChpbnNlcnZl ciAmJiAoaXNndWVzdCB8fCAhRU5BQkxFRChlbl9wcmkpKSkgewotCSAgICBwcmludGYoIj9Tb3Jy eSwgcHJpbnRpbmcgaXMgZGlzYWJsZWRcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLSNlbmRp ZiAvKiBDS19MT0dJTiAqLwotI2VuZGlmIC8qIElLU0QgKi8KLQlpZiAoKHggPSBjbWlmaSgiRmls ZSB0byBwcmludCIsIiIsJnMsJnkseHhzdHJpbmcpKSA8IDApIHsKLQkgICAgaWYgKHggPT0gLTMp IHsKLQkJcHJpbnRmKCI/QSBmaWxlIHNwZWNpZmljYXRpb24gaXMgcmVxdWlyZWRcbiIpOwotCQly ZXR1cm4oLTkpOwotCSAgICB9IGVsc2UgcmV0dXJuKHgpOwotCX0KLQlpZiAoeSAhPSAwKSB7Ci0J ICAgIHByaW50ZigiP1dpbGRjYXJkcyBub3QgYWxsb3dlZFxuIik7Ci0JICAgIHJldHVybigtOSk7 Ci0JfQotCWNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKLQlzID0gIiI7Ci0jaWZuZGVmIE5U Ci0JaWYgKCh4ID0gY210eHQoIkxvY2FsIHByaW50IGNvbW1hbmQgb3B0aW9ucywgb3IgY2Fycmlh Z2UgcmV0dXJuIiwiIiwmcywKLQkJICAgICAgIHh4c3RyaW5nKSkgPCAwKQotCSAgcmV0dXJuKHgp OwotI2VuZGlmIC8qIE5UICovCi0JaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotCSAgcmV0dXJuKHgp OwotCXJldHVybihzdWNjZXNzID0gKHpwcmludChzLGxpbmUpID09IDApID8gMSA6IDApOwotICAg IH0KLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotCi0jaWZkZWYgVENQU09DS0VUCi0jaWZuZGVmIE5P UFVTSAotICAgIGlmIChjeCA9PSBYWFBORykgCQkJLyogUElORyBhbiBJUCBob3N0ICovCi0gICAg ICByZXR1cm4oZG9waW5nKCkpOwotI2VuZGlmIC8qIE5PUFVTSCAqLwotCi0jaWZuZGVmIE5PRlRQ Ci0gICAgaWYgKGN4ID09IFhYRlRQKQkJCS8qIEZUUCAqLwotI2lmZGVmIFNZU0ZUUAotI2lmbmRl ZiBOT1BVU0gKLSAgICAgIHJldHVybihkb2Z0cCgpKTsJCQkvKiBKdXN0IHJ1bnMgc3lzdGVtJ3Mg ZnRwIHByb2dyYW0gKi8KLSNlbHNlCi0gICAgICByZXR1cm4oLTIpOwotI2VuZGlmIC8qIE5PUFVT SCAqLwotI2Vsc2UKLSAgICByZXR1cm4oZG94ZnRwKCkpOwotI2VuZGlmIC8qIFNZU0ZUUCAqLwot I2VuZGlmIC8qIE5PRlRQICovCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0KLSAgICBpZiAoY3gg PT0gWFhQV0QgfHwgY3ggPT0gWFhMUFdEKSB7CS8qIFBXRCAqLwotI2lmZGVmIE9TMgotCWNoYXIg KnB3cDsKLSNlbmRpZiAvKiBPUzIgKi8KLQlpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0JICByZXR1 cm4oeCk7Ci0jaWZkZWYgTE9DVVMKLQlpZiAoIWxvY3VzICYmIGN4ICE9IFhYTFBXRCkgewotI2lm ZGVmIE5PWEZFUgotCSAgICByZXR1cm4oLTIpOwotI2Vsc2UKLQkgICAgcmV0dXJuKGRvcm10KFha UFdEKSk7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0gICAgICAgIH0KLSNlbmRpZiAvKiBMT0NVUyAq LwotCi0jaWZuZGVmIE1BQwotI2lmbmRlZiBPUzIKLSNpZmRlZiBVTklYCi0JcHJpbnRmKCIlc1xu Iix6Z3RkaXIoKSk7Ci0jZWxzZQotCXhzeXN0ZW0oUFdEQ01EKTsKLSNlbmRpZiAvKiBVTklYICov Ci0JcmV0dXJuKHN1Y2Nlc3MgPSAxKTsJCS8qIEJsaW5kIGZhaXRoICovCi0jZWxzZSAgLyogT1My ICovCi0JaWYgKHB3cCA9IHpndGRpcigpKSB7Ci0JICAgIGlmICgqcHdwKSB7Ci0jaWZkZWYgTlQK LQkJbGluZVswXSA9IE5VTDsKLQkJY2tHZXRMb25nUGF0aE5hbWUocHdwLGxpbmUsTElOQlVGU0la KTsKLQkJbGluZVtMSU5CVUZTSVotMV0gPSBOVUw7Ci0JCXRtcGJ1ZlswXSA9IE5VTDsKLQkJR2V0 U2hvcnRQYXRoTmFtZShwd3AsdG1wYnVmLFRNUEJVRlNJWik7Ci0JCXRtcGJ1ZltUTVBCVUZTSVot MV0gPSBOVUw7Ci0JCXB3cCA9IGxpbmU7Ci0JCWlmICghc3RyY21wKGxpbmUsdG1wYnVmKSkgewot I2VuZGlmIC8qIE5UICovCi0JCSAgICBwcmludGYoIiVzXG4iLHB3cCk7Ci0jaWZkZWYgTlQKLQkJ fSBlbHNlIHsKLQkJICAgIHByaW50ZigiICBMb25nIG5hbWU6ICAlc1xuIixsaW5lKTsKLQkJICAg IHByaW50ZigiICBTaG9ydCBuYW1lOiAlc1xuIix0bXBidWYpOwotCQl9ICAgICAgICAgICAgCi0j ZW5kaWYgLyogTlQgKi8KLQkgICAgfQotCSAgICByZXR1cm4oc3VjY2VzcyA9ICgoaW50KXN0cmxl bihwd3ApID4gMCkpOwotCX0gZWxzZSByZXR1cm4oc3VjY2VzcyA9IDApOwotI2VuZGlmIC8qIE9T MiAqLwotI2Vsc2UgIC8qIE1BQyAqLwotCWlmIChwd3AgPSB6Z3RkaXIoKSkgewotCSAgICBwcmlu dGYoIiVzXG4iLHB3cCk7Ci0JICAgIHJldHVybihzdWNjZXNzID0gKChpbnQpc3RybGVuKHB3cCkg PiAwKSk7Ci0JfSBlbHNlIHJldHVybihzdWNjZXNzID0gMCk7Ci0jZW5kaWYgLyogTUFDICovCi0g ICAgfQotCi0gICAgaWYgKGN4ID09IFhYUVVJIHx8IGN4ID09IFhYRVhJKSB7CS8qIEVYSVQsIFFV SVQgKi8KLQlleHRlcm4gaW50IHF1aXR0aW5nOwotCi0JaWYgKCh5ID0gY21udW0oImV4aXQgc3Rh dHVzIGNvZGUiLGNraXRvYSh4aXRzdGEpLDEwLCZ4LHh4c3RyaW5nKSkgPCAwKQotCSAgcmV0dXJu KHkpOwotCWlmICgoeSA9IGNtdHh0KCJPcHRpb25hbCBFWElUIG1lc3NhZ2UiLCIiLCZzLHh4c3Ry aW5nKSkgPCAwKQotCSAgcmV0dXJuKHkpOwotCXMgPSBicnN0cmlwKHMpOwotCWNrc3RybmNweShs aW5lLHMsTElOQlVGU0laKTsKLQotCWlmICghaHVwb2soMCkpCQkJLyogQ2hlY2sgaWYgY29ubmVj dGlvbiBzdGlsbCBvcGVuICovCi0JICByZXR1cm4oc3VjY2VzcyA9IDApOwotCi0JaWYgKGxpbmVb MF0pCQkJLyogUHJpbnQgRVhJVCBtZXNzYWdlIGlmIGdpdmVuICovCi0JICBwcmludGYoIiVzXG4i LChjaGFyICopbGluZSk7Ci0KLQlxdWl0dGluZyA9IDE7CQkJLyogRmxhZyB0aGF0IHdlIGFyZSBx dWl0dGluZy4gKi8KLQotI2lmZGVmIFZNUwotCWRvZXhpdChHT09EX0VYSVQseCk7Ci0jZWxzZQot I2lmZGVmIE9TSwotLyogUmV0dXJuaW5nIGFueSBjb2RlcyBoZXJlIG1ha2VzIHRoZSBPUy05IHNo ZWxsIHByaW50IGFuIGVycm9yIG1lc3NhZ2UuICovCi0JZG9leGl0KEdPT0RfRVhJVCwtMSk7Ci0j ZWxzZQotI2lmZGVmIGRhdGFnZW5lcmFsCi0gICAgICAgIGRvZXhpdChHT09EX0VYSVQseCk7Ci0j ZWxzZQotCWRvZXhpdCh4LC0xKTsKLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8q IE9TSyAqLwotI2VuZGlmIC8qIFZNUyAqLwotICAgIH0KLQotI2lmbmRlZiBOT1hGRVIKLSNpZm5k ZWYgTk9GUklMTFMKLSAgICBpZiAoY3ggPT0gWFhFUlIpIHsJCQkvKiBFUlJPUiAqLwotI2lmZGVm IENLX1hZWgotCWlmIChwcm90b2NvbCAhPSBQUk9UT19LKSB7Ci0JICAgIHByaW50ZigiU29ycnks IEUtUEFDS0VUIG9ubHkgd29ya3Mgd2l0aCBLZXJtaXQgcHJvdG9jb2xcbiIpOwotCSAgICByZXR1 cm4oLTkpOwotCX0KLSNlbmRpZiAvKiBDS19YWVogKi8KLQlpZiAoKHggPSBjbWNmbSgpKSA8IDAp IHJldHVybih4KTsKLQl0dGZsdWkoKTsKLQllcGt0ZmxnID0gMTsKLQlzc3RhdGUgPSAnYSc7Ci0J cmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotCi0gICAgaWYgKGN4ID09 IFhYRklOKSB7CQkJLyogRklOSVNIICovCi0jaWZkZWYgTkVXRlRQCi0JaWYgKChmdHBnZXQgPT0g MSkgfHwgKChmdHBnZXQgPT0gMikgJiYgZnRwaXNvcGVuKCkpKQotCSAgcmV0dXJuKGZ0cGJ5ZSgp KTsKLSNlbmRpZiAvKiBORVdGVFAgKi8KLSNpZmRlZiBDS19YWVoKLQlpZiAocHJvdG9jb2wgIT0g UFJPVE9fSykgewotCSAgICBwcmludGYoIlNvcnJ5LCBGSU5JU0ggb25seSB3b3JrcyB3aXRoIEtl cm1pdCBwcm90b2NvbFxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotI2VuZGlmIC8qIENLX1hZ WiAqLwotCWlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotCi0jaWZkZWYgSUtTX09Q VElPTgotICAgICAgICBpZiAoCi0jaWZkZWYgQ0tfWFlaCi0gICAgICAgICAgICBwcm90b2NvbCA9 PSBQUk9UT19LICYmCi0jZW5kaWYgLyogQ0tfWFlaICovCi0gICAgICAgICAgICAhaWtzX3dhaXQo S0VSTUlUX1JFUV9TVEFSVCwxKSkgewotCSAgICBwcmludGYoCi0gICAgICAgICAgICAgICI/QSBL ZXJtaXQgU2VydmVyIGlzIG5vdCBhdmFpbGFibGUgdG8gcHJvY2VzcyB0aGlzIGNvbW1hbmRcbiIp OwotCSAgICByZXR1cm4oLTkpOwkJCS8qIENvcnJlY3QgdGhlIHJldHVybiBjb2RlICovCi0gICAg ICAgIH0KLSNlbmRpZiAvKiBJS1NfT1BUSU9OICovCi0KLQlzc3RhdGUgPSBzZXRnZW4oJ0YnLCIi LCIiLCIiKTsKLQlpZiAobG9jYWwpIHR0Zmx1aSgpOwkJLyogSWYgbG9jYWwsIGZsdXNoIHR0eSBp bnB1dCBidWZmZXIgKi8KLQlyZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIE5PWEZFUiAqLwot Ci0jaWZuZGVmIE5PU1BMCi0gICAgaWYgKGN4ID09IFhYRk9SKQkJCS8qIEZPUiBsb29wICovCi0g ICAgICByZXR1cm4oZG9mb3IoKSk7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT1hG RVIKLSAgICAvKiBHRVQgTUdFVCBSRUdFVCBSRVRSSUVWRSBldGMgKi8KLSAgICBpZiAoY3ggPT0g WFhHRVQgfHwgY3ggPT0gWFhNR0VUIHx8IGN4ID09IFhYUkVHRVQgfHwgY3ggPT0gWFhSRVRSKSB7 Ci0jaWZkZWYgSUtTRAotCWlmIChpbnNlcnZlciAmJiAhRU5BQkxFRChlbl9zZW4pKSB7Ci0JICAg IHByaW50ZigiP1NvcnJ5LCByZWNlcHRpb24gb2YgZmlsZXMgaXMgZGlzYWJsZWRcbiIpOwotCSAg ICByZXR1cm4oLTkpOwotCX0KLSNlbmRpZiAvKiBJS1NEICovCi0JcmV0dXJuKGRveGdldChjeCkp OwotICAgIH0KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBOT1NQTAotI2lmbmRlZiBO T0ZSSUxMUwotICAgIGlmIChjeCA9PSBYWEdPSykgewkJCS8qIEdFVE9LICovCi0JcmV0dXJuKHN1 Y2Nlc3MgPSBkb2FzayhjeCkpOwotICAgIH0KLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotI2VuZGlm IC8qIE5PU1BMICovCi0KLSAgICBpZiAoY3ggPT0gWFhITFApIHsJCQkvKiBIRUxQICovCi0jaWZk ZWYgTk9IRUxQCi0JcmV0dXJuKGRvaGxwKFhYSExQKSk7Ci0jZWxzZQotCXggPSBjbWtleTIoY21k dGFiLAotCQkgICBuY21kLCJcbkNvbW1hbmQgb3IgdG9waWMiLCJoZWxwIix0b2t0YWIseHhzdHJp bmcsMSsyKzgpOwotCWRlYnVnKEYxMTEsIkhFTFAgY29tbWFuZCB4IixjbWRidWYseCk7Ci0JaWYg KHggPT0gLTUpIHsKLQkgICAgeSA9IGNoa3Rvayh0b2t0YWIpOwotCSAgICBkZWJ1ZyhGMTAxLCJI RUxQIGNta2V5IHRva2VuIiwiIix5KTsKLQkgICAgLyogdW5nd29yZCgpOyAqLwotCSAgICBzd2l0 Y2ggKHkpIHsKLSNpZm5kZWYgTk9QVVNICi0JICAgICAgY2FzZSAnISc6Ci0JICAgICAgY2FzZSAn QCc6IHggPSBYWFNIRTsgYnJlYWs7Ci0JICAgICAgY2FzZSAnPCc6IHggPSBYWEZVTjsgYnJlYWs7 Ci0jZW5kaWYgLyogTk9QVVNIICovCi0JICAgICAgY2FzZSAnIyc6IHggPSBYWENPTTsgYnJlYWs7 Ci0JICAgICAgY2FzZSAnOyc6IHggPSBYWENPTTsgYnJlYWs7Ci0jaWZuZGVmIE5PU1BMCi0gICAg ICAgICAgICAgIGNhc2UgJy4nOiB4ID0gWFhERUY7IGJyZWFrOwotCSAgICAgIGNhc2UgJzonOiB4 ID0gWFhMQkw7IGJyZWFrOwotI2lmbmRlZiBOT1NFWFAKLQkgICAgICBjYXNlICcoJzogeCA9IFhY U0VYUDsgYnJlYWs7Ci0jZW5kaWYgLyogTk9TRVhQICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLSNp ZmRlZiBDS19SRUNBTEwKLQkgICAgICBjYXNlICdeJzogeCA9IFhYUkVETzsgYnJlYWs7Ci0jZW5k aWYJLyogQ0tfUkVDQUxMICovCi0JICAgICAgY2FzZSAnJic6IHggPSBYWEVDSDsgYnJlYWs7IC8q ICh3aGF0IGlzIHRoaXM/KSAqLwotCSAgICAgIGRlZmF1bHQ6Ci0JCXByaW50ZigiXG4/SW52YWxp ZCAtICVzXG4iLGNtZGJ1Zik7Ci0JCXggPSAtMjsKLQkgICAgfQotCX0KLQltYWtlc3RyKCZobHB0 b2ssYXRtYnVmKTsKLQlkZWJ1ZyhGMTExLCJIRUxQIHRva2VuIixobHB0b2sseCk7Ci0JcmV0dXJu KGRvaGxwKHgpKTsKLSNlbmRpZiAvKiBOT0hFTFAgKi8KLSAgICB9Ci0KLSNpZm5kZWYgTk9IRUxQ Ci0gICAgaWYgKGN4ID09IFhYSU5UKQkJCS8qIElOVFJPICovCi0gICAgICByZXR1cm4oaG1zZ2Eo aW50cm90eHQpKTsKLSAgICBpZiAoY3ggPT0gWFhORVcpIHsJCQkvKiBORVdTICovCi0JaW50IHg7 Ci0JZXh0ZXJuIGNoYXIgKiBrX2luZm9fZGlyOwotCXggPSBobXNnYShuZXdzdHh0KTsKLQlyZXR1 cm4oeCk7Ci0gICAgfQotCi0jaWZkZWYgT1MyT05MWQotICAgIGlmIChjeCA9PSBYWFVQRCkgewkJ CS8qIFZpZXcgVVBEQVRFIGZpbGUgKi8KLSAgICAgICAgZXh0ZXJuIGNoYXIgZXhlZGlyW107Ci0g ICAgICAgIGNoYXIgKiBwVG9waWM7Ci0gICAgICAgIGNoYXIgdXBkc3RyWzIwNDhdOwotICAgICAg ICBpZiAoKHggPSBjbXR4dCgidG9waWMgbmFtZSIsIiIsJnBUb3BpYyx4eHN0cmluZykpIDwgMCkK LSAgICAgICAgICAgIHJldHVybiB4OwotI2lmZGVmIENPTU1FTlQKLQlzcHJpbnRmKHVwZHN0ciwK LQkJInN0YXJ0IHZpZXcgJXNcXGRvY3NcXGsyLmluZislc1xcZG9jc1xcdXNpbmdfY2suaW5mK1wK LSVzXFxkb2NzXFxkaWFsaW5nLmluZislc1xcZG9jc1xcbW9kZW1zLmluZiAlcyIsCi0JCWV4ZWRp cixleGVkaXIsZXhlZGlyLGV4ZWRpcixwVG9waWMKLQkJKTsKLSNlbHNlCi0JaWYgKGNrbWFreG1z Zyh1cGRzdHIsCi0JCSAgICAgMjA0OCwKLQkJICAgICAic3RhcnQgdmlldyAiLAotCQkgICAgIGV4 ZWRpciwKLQkJICAgICAiXFxkb2NzXFxrMi5pbmYrIiwKLQkJICAgICBleGVkaXIsCi0JCSAgICAg IlxcZG9jc1xcdXNpbmdfY2suaW5mKyIsCi0JCSAgICAgZXhlZGlyLAotCQkgICAgICJcXGRvY3Nc XGRpYWxpbmcuaW5mKyIsCi0JCSAgICAgZXhlZGlyLAotCQkgICAgICJcXGRvY3NcXG1vZGVtcy5p bmYgIiwKLQkJICAgICBwVG9waWMsCi0JCSAgICAgTlVMTCwKLQkJICAgICBOVUxMCi0JCSAgICAg KSA+IDApCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCSAgc3lzdGVtKHVwZHN0cik7Ci0gICAgICAg IHJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgfQotI2VuZGlmIC8qIE9TMk9OTFkgKi8KLSNlbmRp ZiAvKiBOT0hFTFAgKi8KLQotI2lmbmRlZiBOT0xPQ0FMCi0gICAgaWYgKGN4ID09IFhYSEFOKSB7 CQkJLyogSEFOR1VQICovCi0JaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0jaWZk ZWYgTkVXRlRQCi0JaWYgKChmdHBnZXQgPT0gMSkgfHwgKChmdHBnZXQgPT0gMikgJiYgIWxvY2Fs ICYmIGZ0cGlzb3BlbigpKSkKLQkgIHJldHVybihzdWNjZXNzID0gZnRwYnllKCkpOwotI2VuZGlm IC8qIE5FV0ZUUCAqLwotI2lmbmRlZiBOT0RJQUwKLQlpZiAoKHggPSBtZG1odXAoKSkgPCAxKSB7 Ci0JICAgIGRlYnVnKEYxMDEsIkhBTkdVUCBtZG11cCIsIiIseCk7Ci0jZW5kaWYgLyogTk9ESUFM ICovCi0JICAgIHggPSB0dGhhbmcoKTsKLQkgICAgZGVidWcoRjEwMSwiSEFOR1VQIHR0aGFuZyIs IiIseCk7Ci0JICAgIHggPSAoeCA+IC0xKTsKLSNpZm5kZWYgTk9ESUFMCi0JfQotCWRpYWxzdGEg PSBESUFfVU5LOwotI2VuZGlmIC8qIE5PRElBTCAqLwotCXdoeWNsb3NlZCA9IFdDX0NMT1M7Ci0J dHRjaGsoKTsJCQkvKiBJbiBjYXNlIG9mIENMT1NFLU9OLURJU0NPTk5FQ1QgKi8KLQlkb2xvZ2Vu ZCgpOwotI2lmZGVmIE9TMgotCWlmICh4KQotCSAgRGlhbGVyU2VuZChPUFRfS0VSTUlUX0hBTkdV UCwgMCk7Ci0jZW5kaWYgLyogT1MyICovCi0JaWYgKHgpIGhhdmVsaW5lID0gMDsKLQlyZXR1cm4o c3VjY2VzcyA9IHgpOwotICAgIH0KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSNpZm5kZWYgTk9T UEwKLSAgICAvKiBJTlBVVCwgUkVJTlBVVCwgYW5kIE1JTlBVVCAqLwotCi0gICAgaWYgKGN4ID09 IFhYSU5QIHx8IGN4ID09IFhYUkVJIHx8IGN4ID09IFhYTUlOUCkgewotCWxvbmcgeno7Ci0JaW50 IGZsYWdzID0gMCwgaW5jb3VudCA9IDA7Ci0JZXh0ZXJuIGludCBpdHNhcGF0dGVybiwgaXNqb2lu LCBpc2luYnVmbGVuOwotCWludCBjLCBnZXR2YWw7Ci0KLQlzdHJ1Y3QgRkRCIHN3LCBudSwgZmw7 Ci0JaW50IGZjLCBoYXZldGltZSA9IDA7Ci0JY2hhciAqIG07Ci0KLQlpZiAoY3ggPT0gWFhSRUkp IHsKLQkgICAgbSA9ICJUaW1lb3V0IGluIHNlY29uZHMgKGlnbm9yZWQpIjsKLQl9IGVsc2Ugewot CSAgICBtID0gIlNlY29uZHMgdG8gd2FpdCBmb3IgaW5wdXQsXG4gb3IgdGltZSBvZiBkYXkgaGg6 bW06c3MsXAotIG9yIHN3aXRjaCI7Ci0JfQotCWNtZmRiaSgmc3csCQkJLyogRmlyc3QgRkRCIC0g Y29tbWFuZCBzd2l0Y2hlcyAqLwotCSAgICAgICBfQ01LRVksCQkJLyogZmNvZGUgKi8KLQkgICAg ICAgbSwJCQkvKiBoZWxwbXNnICovCi0JICAgICAgIGNraXRvYShpbmRlZiksCQkvKiBkZWZhdWx0 ICovCi0JICAgICAgICIiLAkJCS8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0JICAgICAgIG5pbnB1 dHN3LAkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCi0JICAgICAgIDQsCQkJ LyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLwotCSAgICAgICB4eHN0cmluZywJ CS8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KLQkgICAgICAgaW5wdXRzdywJCQkvKiBLZXl3b3Jk IHRhYmxlICovCi0JICAgICAgICZudQkJCS8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KLQkgICAg ICAgKTsKLQljbWZkYmkoJm51LAotCSAgICAgICBfQ01OVU0sCQkJLyogTnVtYmVyICovCi0JICAg ICAgIG0sCQkJLyogSGVscCBtZXNzYWdlICovCi0JICAgICAgIGNraXRvYShpbmRlZiksCQkvKiBk ZWZhdWx0ICovCi0JICAgICAgICIiLAkJCS8qIE4vQSAqLwotCSAgICAgICAxMCwJCQkvKiBSYWRp eCA9IDEwICovCi0JICAgICAgIDAsCQkJLyogTi9BICovCi0JICAgICAgIHh4c3RyaW5nLAkJLyog UHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotCSAgICAgICBOVUxMLAkJCS8qIE4vQSAqLwotCSAgICAg ICAmZmwJCQkvKiBOZXh0ICovCi0JICAgICAgICk7Ci0JY21mZGJpKCZmbCwJCQkvKiBUaW1lIG9m IGRheSBoaDptbTpzcyAqLwotCSAgICAgICBfQ01GTEQsCQkJLyogZmNvZGUgKi8KLQkgICAgICAg IiIsCQkJLyogaGxwbXNnICovCi0JICAgICAgICIiLAotCSAgICAgICAiIiwJCQkvKiBhZGR0bCBz dHJpbmcgZGF0YSAqLwotCSAgICAgICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCi0J ICAgICAgIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KLQkgICAgICAgeHhzdHJpbmcs Ci0JICAgICAgIE5VTEwsCi0JICAgICAgIE5VTEwKLQkgICAgICAgKTsKLQlmYyA9IChjeCA9PSBY WFJFSSkgPyBjbWZkYigmbnUpIDogY21mZGIoJnN3KTsgLyogUGFyc2Ugc29tZXRoaW5nICovCi0K LQlmb3IgKHkgPSAwOyB5IDwgTUlOUE1BWDsgeSsrKSB7CS8qIEluaXRpYWxpemUgc2VhcmNoIHN0 cmluZ3MgKi8KLQkgICAgbXBbeV0gPSAwOwkJCS8qIEFzc3VtZSBpdCdzIG5vdCBhIHBhdHRlcm4g Ki8KLQkgICAgaWYgKCFtcGluaXRlZCkgewotCQltc1t5XSA9IE5VTEw7Ci0JICAgIH0KLQkgICAg aWYgKG1zW3ldKSB7Ci0JCWZyZWUobXNbeV0pOwkJLyogRnJlZSBvbGQgc3RyaW5ncywgaWYgYW55 ICovCi0JCW1zW3ldID0gTlVMTDsKLQkgICAgfQotCX0KLQltcGluaXRlZCA9IDE7Ci0Jd2hpbGUg KCFoYXZldGltZSkgewotCSAgICBpZiAoZmMgPCAwKSB7CQkvKiBFcnJvciAqLwotCQlpZiAoZmMg PT0gLTMpIHsKLQkJICAgIHByaW50ZigiP1N5bnRheCBlcnJvciBpbiBJTlBVVC1jbGFzcyBjb21t YW5kXG4iKTsKLQkJICAgIHJldHVybigtOSk7Ci0JCX0gZWxzZQotCQkgIHJldHVybihmYyk7Ci0J ICAgIH0KLQkgICAgc3dpdGNoIChjbXJlc3VsdC5mY29kZSkgewotCSAgICAgIGNhc2UgX0NNS0VZ OgkJLyogU3dpdGNoICovCi0JCWMgPSBjbWdicmsoKTsKLQkJaWYgKChnZXR2YWwgPSAoYyA9PSAn OicgfHwgYyA9PSAnPScpKSAmJgotCQkgICAgIShjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKLQkJ ICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIGRvZXMgbm90IHRha2UgYW4gYXJndW1lbnRcbiIpOwot CQkgICAgcmV0dXJuKC05KTsKLQkJfQotCQlpZiAoZ2V0dmFsICYmIGNtcmVzdWx0Lm5yZXN1bHQg PT0gSU5QU1dfQ09VKSB7Ci0JCSAgICBpZiAoKHkgPSBjbW51bSgiTnVtYmVyIG9mIGJ5dGVzIHRv IHJlYWQiLAotCQkJCSAgICIiLDEwLCZ4LHh4c3RyaW5nKSkgPCAwKQotCQkgICAgICByZXR1cm4o eSk7Ci0JCSAgICBpbmNvdW50ID0geDsKLQkJfQotCQlmbGFncyB8PSBjbXJlc3VsdC5ucmVzdWx0 OwotCQlmYyA9IGNtZmRiKCZzdyk7CS8qIE1heWJlIHBhcnNlIG1vcmUgc3dpdGNoZXMgKi8KLQkJ Y29udGludWU7Ci0KLQkgICAgICBjYXNlIF9DTU5VTToJCS8qIFNlY29uZHMgdG8gdGltZSBvdXQg Ki8KLQkJeCA9IGNtcmVzdWx0Lm5yZXN1bHQ7Ci0jaWZkZWYgQ0tGTE9BVAotCQlpZiAoaW5zY2Fs ZSAhPSAxLjApCS8qIFNjYWxlICovCi0JCSAgeCAqPSBpbnNjYWxlOwkJCi0jZW5kaWYJLyogQ0tG TE9BVCAqLwotCQloYXZldGltZSsrOwotCQlicmVhazsKLQotCSAgICAgIGNhc2UgX0NNRkxEOgot CQl6eiA9IHRvZDJzZWMoYXRtYnVmKTsJLyogQ29udmVydCB0byBzZWNzIHNpbmNlIG1pZG5pZ2h0 ICovCi0JCWlmICh6eiA8IDBMKSB7Ci0JCSAgICBwcmludGYoIj9OdW1iZXIsIGV4cHJlc3Npb24s IG9yIHRpbWUgb2YgZGF5IHJlcXVpcmVkXG4iKTsKLQkJICAgIHJldHVybigtOSk7Ci0JCX0gZWxz ZSB7Ci0JCSAgICBjaGFyIG5vd1szMl07CS8qIEN1cnJlbnQgdGltZSAqLwotCQkgICAgY2hhciAq cDsKLQkJICAgIGxvbmcgdG5vdzsKLQkJICAgIHAgPSBub3c7Ci0JCSAgICB6dGltZSgmcCk7Ci0J CSAgICB0bm93ID0gYXRvbChwKzExKSAqIDM2MDBMICsgYXRvbChwKzE0KSAqIDYwTCArIGF0b2wo cCsxNyk7Ci0JCSAgICBpZiAoenogPCB0bm93KQkvKiBVc2VyJ3MgdGltZSBiZWZvcmUgbm93ICov Ci0JCSAgICAgIHp6ICs9IDg2NDAwTDsJLyogU28gbWFrZSBpdCB0b21vcnJvdyAqLwotCQkgICAg enogLT0gdG5vdzsJCS8qIFNlY29uZHMgZnJvbSBub3cuICovCi0JCSAgICBpZiAoenogPiAtMUwp IHsKLQkJCXggPSB6ejsKLQkJCWlmICh6eiAhPSAobG9uZykgeCkgewotCQkJICAgIHByaW50ZigK LSJTb3JyeSwgYXJpdGhtZXRpYyBvdmVyZmxvdyAtIGhoOm1tOnNzIG5vdCB1c2FibGUgb24gdGhp cyBwbGF0Zm9ybS5cbiIKLSk7Ci0JCQkgICAgcmV0dXJuKC05KTsKLQkJCX0KLQkJICAgIH0KLQkJ ICAgIGhhdmV0aW1lKys7Ci0JCX0KLQkJYnJlYWs7Ci0JICAgICAgZGVmYXVsdDoJCQotCQlwcmlu dGYoIj9JbnRlcm5hbCBlcnJvclxuIik7Ci0JCXJldHVybigtOSk7Ci0JICAgIH0KLQl9Ci0JLyog Tm93IHBhcnNlIHRoZSBzZWFyY2ggdGV4dCAqLwotCi0jaWZkZWYgQ0tfTUlOUFVUCi0JaWYgKGN4 ID09IFhYTUlOUCkgewkJLyogTUlOUFVUICovCi0JICAgIGludCBpLCBrID0gMCwgbiA9IDA7Ci0J ICAgIHN0cnVjdCBzdHJpbmdhcnJheSAqIHE7Ci0JICAgIGtlZXBhbGxjaGFycyA9IDE7Ci0JICAg IHdoaWxlIChrIDwgTUlOUE1BWCkgewotCQlpZiAoKHkgPSBjbWZsZCgiU3RyaW5nIG9yIHBhdHRl cm4iLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7Ci0JCSAgICBpZiAoeSA9PSAtMykgewotCQkJaWYg KCh5ID0gY21jZm0oKSkgPCAwKQotCQkJICByZXR1cm4oeSk7Ci0JCQlicmVhazsKLQkJICAgIH0g ZWxzZSB7Ci0JCQlyZXR1cm4oeSk7Ci0JCSAgICB9Ci0JCX0KLQkJZGVidWcoRjExMSwiTUlOUFVU IGZpZWxkIixzLGspOwotCQlpZiAoaXNqb2luKSB7Ci0JCSAgICBpZiAoKHEgPSBja3NwbGl0KDEs MCxzLCIgIiwoY2hhciAqKWMxY2hhcnMsMywwLDApKSkgewotCQkJY2hhciAqKiBhcCA9IHEtPmFf aGVhZDsKLQkJCW4gPSBxLT5hX3NpemU7Ci0JCQlkZWJ1ZyhGMTAxLCJtaW5wdXQgY2tzcGxpdCBz aXplIiwiIixuKTsKLQkJCWZvciAoaSA9IDE7IGkgPD0gbiAmJiBrIDwgTUlOUE1BWDsgaSsrKSB7 Ci0JCQkgICAgaWYgKCFhcFtpXSkgLyogQWRkIG5vbi1lbXB0eSBlbGVtZW50cyAqLwotCQkJICAg ICAgY29udGludWU7Ci0JCQkgICAgaWYgKCEqKGFwW2ldKSkKLQkJCSAgICAgIGNvbnRpbnVlOwot CQkJICAgIG1ha2VzdHIoJihtc1trXSksYXBbaV0pOwotCQkJICAgIGRlYnVnKEYxMTEsIk1JTlBV VCBKT0lOIixtc1trXSxrKTsKLQkJCSAgICBrKys7Ci0JCQl9Ci0JCSAgICB9Ci0JCX0gZWxzZSB7 Ci0JCSAgICBpZiAocykgaWYgKCpzKSB7Ci0JCQltYWtlc3RyKCYobXNba10pLGJyc3RyaXAocykp OwotCQkJaWYgKGl0c2FwYXR0ZXJuKSBtcFtrXSA9IDE7Ci0JCQlkZWJ1ZyhGMTExLCJNSU5QVVQi LG1zW2tdLGl0c2FwYXR0ZXJuKTsKLQkJCWsrKzsKLQkJICAgIH0KLQkJfQotCSAgICB9Ci0JICAg IGtlZXBhbGxjaGFycyA9IDA7Ci0JfSBlbHNlIHsKLSNlbmRpZiAvKiBDS19NSU5QVVQgKi8KLQot CSAgICAvKiBJTlBVVCBvciBSRUlOUFVUICovCi0KLQkgICAgaWYgKGZsYWdzICYgSU5QU1dfQ09V KSB7Ci0JCWlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKLQkJICByZXR1cm4oeSk7Ci0JICAgIH0gZWxz ZSB7Ci0JCWlmICgoeSA9IGNtdHh0KCJNYXRlcmlhbCB0byBiZSBpbnB1dCIsIiIsJnMseHhzdHJp bmcpKSA8IDApCi0JCSAgcmV0dXJuKHkpOwotCSAgICB9Ci0JICAgIG1wWzBdID0gaXRzYXBhdHRl cm4gPyAxIDogMDsKLQkgICAgbWFrZXN0cigmKG1zWzBdKSxicnN0cmlwKHMpKTsKLQkgICAgbXNb MV0gPSBOVUxMOwotCi0jaWZkZWYgQ0tfTUlOUFVUCi0JfQotI2VuZGlmIC8qIENLX01JTlBVVCAq LwotCi0JaWYgKGluY291bnQgPiAwKQkJLyogTm8gc2VhcmNoaW5nIGlmIC9DT1VOVDogZ2l2ZW4g Ki8KLQkgIG1ha2VzdHIoJihtc1swXSksTlVMTCk7Ci0KLQlpZiAoY3ggPT0gWFhJTlAgfHwgY3gg PT0gWFhNSU5QKSB7IC8qIE5vdCBSRUlOUFVULi4uICovCi0JICAgIGlfYWN0aXZlID0gMTsKLQkg ICAgLyogR28gdHJ5IHRvIGlucHV0IHRoZSBzZWFyY2ggc3RyaW5nICovCi0JICAgIHN1Y2Nlc3Mg PSBkb2lucHV0KHgsbXMsbXAsZmxhZ3MsaW5jb3VudCk7Ci0JICAgIGlfYWN0aXZlID0gMDsKLQl9 IGVsc2UgewkJCS8qIFJFSU5QVVQgKi8KLQkgICAgc3VjY2VzcyA9IGRvcmVpbnAoeCxtc1swXSxp dHNhcGF0dGVybik7Ci0JfQotCWlmIChpbnRpbWVbY21kbHZsXSAmJiAhc3VjY2VzcykgeyAvKiBU SU1FT1VULUFDVElPTiA9IFFVSVQ/ICovCi0JICAgIHBvcGNsdmwoKTsJCQkvKiBJZiBzbywgcG9w IGNvbW1hbmQgbGV2ZWwuICovCi0JICAgIGlmIChwZmxhZyAmJiBjbWRsdmwgPT0gMCkgewotCQlp ZiAoY3ggPT0gWFhJTlApICBwcmludGYoIj9JTlBVVCB0aW1lZCBvdXRcbiIpOwotCQlpZiAoY3gg PT0gWFhNSU5QKSBwcmludGYoIj9NSU5QVVQgdGltZWQgb3V0XG4iKTsKLQkJaWYgKGN4ID09IFhY UkVJKSAgcHJpbnRmKCI/UkVJTlBVVCBmYWlsZWRcbiIpOwotCSAgICB9Ci0JfQotCXJldHVybihz dWNjZXNzKTsJCS8qIFJldHVybiBkbyhyZSlpbnB1dCdzIHJldHVybiBjb2RlICovCi0gICAgfQot Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotICAgIGlmIChjeCA9PSBYWExPRykgewkJCS8qIExPRyAq LwotCXggPSBjbWtleShsb2d0YWIsbmxvZywiV2hhdCB0byBsb2ciLCIiLHh4c3RyaW5nKTsKLQlp ZiAoeCA9PSAtMykgewotCSAgICBwcmludGYoIj9UeXBlIG9mIGxvZyByZXF1aXJlZFxuIik7Ci0J ICAgIHJldHVybigtOSk7Ci0JfQotCWlmICh4IDwgMCkgcmV0dXJuKHgpOwotCXggPSBkb2xvZyh4 KTsKLQlpZiAoeCA8IDApCi0JICByZXR1cm4oeCk7Ci0JZWxzZQotCSAgcmV0dXJuKHN1Y2Nlc3Mg PSB4KTsKLSAgICB9Ci0KLSAgICBpZiAoY3ggPT0gWFhMT0dJTikgewkJLyogKFJFTU9URSkgTE9H SU4gKi8KLSNpZmRlZiBORVdGVFAKLQlpZiAoKGZ0cGdldCA9PSAxKSB8fCAoKGZ0cGdldCA9PSAy KSAmJiBmdHBpc29wZW4oKSkpCi0JICByZXR1cm4oc3VjY2VzcyA9IGRvZnRwdXNyKCkpOwotI2Vu ZGlmIC8qIE5FV0ZUUCAqLwotI2lmZGVmIElLU0QKLQlpZiAoaW5zZXJ2ZXIpIHsKLQkgICAgcHJp bnRmKCI/QWxyZWFkeSBsb2dnZWQgaW5cbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0gZWxzZQot I2VuZGlmIC8qIElLU0QgKi8KLQl7Ci0jaWZkZWYgTk9YRkVSCi0JICAgIHJldHVybigtMik7Ci0j ZWxzZQotCSAgICByZXR1cm4oZG9ybXQoWFpMR0kpKTsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQl9 Ci0gICAgfQotICAgIGlmIChjeCA9PSBYWExPR09VVCkgewkJLyogKFJFTU9URSkgTE9HT1VUICov Ci0jaWZkZWYgTkVXRlRQCi0JaWYgKChmdHBnZXQgPT0gMSkgfHwgKChmdHBnZXQgPT0gMikgJiYg ZnRwaXNvcGVuKCkpKQotCSAgcmV0dXJuKHN1Y2Nlc3MgPSBkb2Z0cHJlcygpKTsKLSNlbmRpZiAv KiBORVdGVFAgKi8KLQotI2lmZGVmIElLU0QKLSAgICAgICAgaWYgKGluc2VydmVyKSB7Ci0JICAg IGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLQkgICAgICByZXR1cm4oeCk7Ci0JICAgIGRvZXhpdChH T09EX0VYSVQseGl0c3RhKTsKLQl9IGVsc2UKLSNlbmRpZiAvKiBJS1NEICovCi0JaWYgKCFsb2Nh bCB8fCAobmV0d29yayAmJiB0dGNoaygpIDwgMCkpIHsKLQkgICAgcHJpbnRmKCI/Tm8gY29ubmVj dGlvbi5cbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0gZWxzZSB7Ci0jaWZkZWYgTk9YRkVSCi0J ICAgIHJldHVybigtMik7Ci0jZWxzZQotCSAgICByZXR1cm4oZG9ybXQoWFpMR08pKTsKLSNlbmRp ZiAvKiBOT1hGRVIgKi8KLQl9Ci0gICAgfQotCi0jaWZuZGVmIE5PU0NSSVBUCi0gICAgaWYgKGN4 ID09IFhYTE9HSSkgewkJCS8qIFVVQ1Atc3R5bGUgc2NyaXB0ICovCi0JaWYgKCh4ID0gY210eHQo ImV4cGVjdC1zZW5kIGV4cGVjdC1zZW5kIC4uLiIsIiIsJnMseHhzdHJpbmcpKSA8IDApCi0JICBy ZXR1cm4oeCk7Ci0jaWZkZWYgQ0tfQVBDCi0JaWYgKChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMKSB8 fAotCSAgICAoKGFwY2FjdGl2ZSA9PSBBUENfUkVNT1RFKSAmJiAoIShhcGNzdGF0dXMgJiBBUENf VU5DSCkpKSkKLQkgIHJldHVybihzdWNjZXNzID0gMCk7Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0j aWZkZWYgVk1TCi0JY29ucmVzKCk7CQkJLyogRm9yIEN0cmwtQyB0byB3b3JrLi4uICovCi0jZW5k aWYgLyogVk1TICovCi0JcmV0dXJuKHN1Y2Nlc3MgPSBkb2xvZ2luKHMpKTsJLyogUmV0dXJuIDE9 Y29tcGxldGVkLCAwPWZhaWxlZCAqLwotICAgIH0KLSNlbmRpZiAvKiBOT1NDUklQVCAqLwotCi0j aWZuZGVmIE5PWEZFUgotI2lmZGVmIFBJUEVTRU5ECi0gICAgaWYgKGN4ID09IFhYQ1JFQykgewkJ CS8qIENSRUNFSVZFICovCi0JaWYgKHByb3RvY29sICE9IFBST1RPX0spIHsKLQkgICAgcHJpbnRm KCI/U29ycnksIENSRUNFSVZFIHdvcmtzIG9ubHkgd2l0aCBLZXJtaXQgcHJvdG9jb2xcbiIpOwot CSAgICByZXR1cm4oLTkpOwotCX0gZWxzZQotCSAgcmV0dXJuKGRveGdldChjeCkpOwotICAgIH0K LSAgICBpZiAoY3ggPT0gWFhDR0VUKSB7CQkJLyogQ0dFVCAqLwotCXJldHVybihkb3hnZXQoY3gp KTsKLSAgICB9Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLQotICAgIGlmIChjeCA9PSBYWFJFQykJ CQkvKiBSRUNFSVZFICovCi0gICAgICByZXR1cm4oZG94Z2V0KGN4KSk7Ci0jZW5kaWYgLyogTk9Y RkVSICovCi0KLSNpZm5kZWYgTk9YRkVSCi0gICAgaWYgKGN4ID09IFhYUkVNKSB7CQkJLyogUkVN T1RFICovCi0jaWZkZWYgTkVXRlRQCi0JaWYgKChmdHBnZXQgPT0gMSkgfHwgKChmdHBnZXQgPT0g MikgJiYgZnRwaXNvcGVuKCkpKQotCSAgcmV0dXJuKGRvZnRwcm10KDAsMCkpOwotI2VuZGlmIC8q IE5FV0ZUUCAqLwotI2lmZGVmIENLX1hZWgotCWlmIChwcm90b2NvbCAhPSBQUk9UT19LKSB7Ci0J ICAgIHByaW50ZigiU29ycnksIFJFTU9URSBjb21tYW5kcyBvbmx5IHdvcmsgd2l0aCBLZXJtaXQg cHJvdG9jb2xcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLSNlbmRpZiAvKiBDS19YWVogKi8K LQl4ID0gY21rZXkocmVtY21kLG5ybXQsIlJlbW90ZSBLZXJtaXQgc2VydmVyIGNvbW1hbmQiLCIi LHh4c3RyaW5nKTsKLQlpZiAoeCA9PSAtMykgewotCSAgICBwcmludGYoIj9Zb3UgbXVzdCBzcGVj aWZ5IGEgY29tbWFuZCBmb3IgdGhlIHJlbW90ZSBzZXJ2ZXJcbiIpOwotCSAgICByZXR1cm4oLTkp OwotCX0KLQlyZXR1cm4oZG9ybXQoeCkpOwotICAgIH0KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQot I2lmbmRlZiBOT1JFTkFNRQotI2lmbmRlZiBOT0ZSSUxMUwotICAgIGlmIChjeCA9PSBYWFJFTiB8 fCBjeCA9PSBYWExSRU4pIHsJLyogUkVOQU1FICovCi0jaWZkZWYgTE9DVVMKLQlpZiAoIWxvY3Vz ICYmIGN4ICE9IFhYTFJFTikgewotI2lmZGVmIE5PWEZFUgotCSAgICByZXR1cm4oLTIpOwotI2Vs c2UKLQkgICAgcmV0dXJuKGRvcm10KFhaUkVOKSk7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0gICAg ICAgIH0KLSNlbmRpZiAvKiBMT0NVUyAqLwotI2lmZGVmIElLU0QKLQlpZiAoaW5zZXJ2ZXIgJiYg KCFFTkFCTEVEKGVuX3JlbikKLSNpZmRlZiBDS19MT0dJTgotCQkJIHx8IGlzZ3Vlc3QKLSNlbmRp ZiAvKiBDS19MT0dJTiAqLwotCQkJICkpIHsKLQkgICAgcHJpbnRmKCI/U29ycnksIHJlbmFtaW5n IG9mIGZpbGVzIGlzIGRpc2FibGVkXG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0jZW5kaWYg LyogSUtTRCAqLwotI2lmZGVmIENLX0FQQwotCWlmICgoYXBjYWN0aXZlID09IEFQQ19MT0NBTCkg fHwKLQkgICAgKChhcGNhY3RpdmUgPT0gQVBDX1JFTU9URSkgJiYgKCEoYXBjc3RhdHVzICYgQVBD X1VOQ0gpKSkpCi0JICByZXR1cm4oc3VjY2VzcyA9IDApOwotI2VuZGlmIC8qIENLX0FQQyAqLwot CXJldHVybihkb3JlbmFtKCkpOwotICAgIH0KLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotI2VuZGlm IC8qIE5PUkVOQU1FICovCi0KLSAgICBpZiAoY3ggPT0gWFhFSUdIVCkgewkJLyogRUlHSFRCSVQg Ki8KLQlleHRlcm4gaW50IHBhcml0eSwgY21hc2ssIGNtZG1zazsKLQlpZiAoKHggPSBjbWNmbSgp KSA8IDApCi0JICByZXR1cm4oeCk7Ci0JcGFyaXR5ID0gMDsKLQljbWFzayA9IDB4ZmY7Ci0JY21k bXNrID0gMHhmZjsKLQlyZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgIH0KLQotI2lmbmRlZiBOT1hG RVIKLS8qIFNFTkQsIENTRU5ELCBNT1ZFLCBNQUlMLCBhbmQgUkVTRU5EIHVzZSB0aGUgbmV3IGNv bW1vbiBjb2RlICovCi0KLSAgICBpZiAoY3ggPT0gWFhTRU4JCQkvKiBTRU5EICovCi0jaWZkZWYg UElQRVNFTkQKLQl8fCBjeCA9PSBYWENTRU4JCQkvKiBDU0VORCAqLwotI2VuZGlmIC8qIFBJUEVT RU5EICovCi0JfHwgY3ggPT0gWFhNT1ZFCQkJLyogTU9WRSAqLwotCXx8IGN4ID09IFhYTUFJCQkJ LyogTUFJTCAqLwotI2lmZGVmIENLX1JFU0VORAotCXx8IGN4ID09IFhYUlNFTgkJCS8qIFJFU0VO RCAqLwotI2VuZGlmIC8qIENLX1JFU0VORCAqLwotCSkgewotI2lmZGVmIElLU0QKLQlpZiAoaW5z ZXJ2ZXIgJiYgIUVOQUJMRUQoZW5fZ2V0KSkgewotCSAgICBwcmludGYoIj9Tb3JyeSwgc2VuZGlu ZyBmaWxlcyBpcyBkaXNhYmxlZFxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotI2VuZGlmIC8q IElLU0QgKi8KLQlyZXR1cm4oZG94c2VuZChjeCkpOwotICAgIH0KLQotLyogUFNFTkQsIEFERCwg YW5kIFJFTU9WRSB1c2Ugc3BlY2lhbCBwYXJzaW5nICovCi0KLSNpZmRlZiBBRERDTUQKLSAgICAv KiBBREQgYW5kIFJFTU9WRSAqLwotICAgIGlmIChjeCA9PSBYWEFERCB8fCBjeCA9PSBYWFJFTVYp IHsKLQljaGFyICogbTsKLQltID0gKGN4ID09IFhYQUREKSA/ICJBZGQgdG8gd2hpY2ggbGlzdD8i IDogIlJlbW92ZSBmcm9tIHdoaWNoIGxpc3Q/IjsKLQl4ID0gY21rZXkoYWRkdGFiLG5hZGR0YWIs bSwiIix4eHN0cmluZyk7Ci0JaWYgKHggPCAwKQotCSAgcmV0dXJuKHgpOwotI2lmbmRlZiBOT01T RU5ECi0JaWYgKHggPT0gQUREX1NORCkKLQkgIHJldHVybihhZGRzZW5kKGN4KSk7Ci0JZWxzZQot I2VuZGlmIC8qIE5PTVNFTkQgKi8KLQkgIHJldHVybihkb2FkZChjeCx4KSk7Ci0gICAgfQotI2Vu ZGlmIC8qIEFERENNRCAqLwotCi0jaWZkZWYgQ0tfUkVTRU5ECi0gICAgaWYgKGN4ID09IFhYUFNF TikgewkJCS8qIFBTRU5EICovCi0JaW50IHNlZWt0byA9IDA7CQkJLyogRklYIFRISVMgKi8KLQot CWNtYXJnID0gY21hcmcyID0gIiI7Ci0JeCA9IGNtaWZpKCJGaWxlIHRvIHBhcnRpYWxseSBzZW5k IiwgIiIsICZzLCAmeSwgeHhzdHJpbmcpOwotCWlmICh4IDwgMCkgewotCSAgICBpZiAoeCA9PSAt MykgewotCQlwcmludGYoIj9BIGZpbGUgc3BlY2lmaWNhdGlvbiBpcyByZXF1aXJlZFxuIik7Ci0J CXJldHVybigtOSk7Ci0JICAgIH0gZWxzZSByZXR1cm4oeCk7Ci0JfQotCW5maWxzID0gLTE7CQkJ LyogRmlsZXMgY29tZSBmcm9tIGludGVybmFsIGxpc3QuICovCi0jaWZuZGVmIE5PTVNFTkQKLSAg ICAgICAgYWRkbGlzdCA9IDA7CQkJLyogRG9uJ3QgdXNlIFNFTkQtTElTVC4gKi8KLSAgICAgICAg ZmlsZW5leHQgPSBOVUxMOwotI2VuZGlmIC8qIE5PTVNFTkQgKi8KLQlja3N0cm5jcHkobGluZSxz LExJTkJVRlNJWik7CS8qIFNhdmUgY29weSBvZiBzdHJpbmcganVzdCBwYXJzZWQuICovCi0JZGVi dWcoRjExMCwiUFNFTkQgbGluZSIsbGluZSwwKTsKLQlpZiAoeSAhPSAwKSB7Ci0JICAgIHByaW50 ZigiP1NvcnJ5LCB3aWxkY2FyZHMgbm90IHBlcm1pdHRlZCBpbiB0aGlzIGNvbW1hbmRcbiIpOwot CSAgICByZXR1cm4oLTkpOwotCX0KLQlpZiAoc2l6ZW9mKGludCkgPCA0KSB7Ci0JICAgIHByaW50 ZigiP1NvcnJ5LCB0aGlzIGNvbW1hbmQgbmVlZHMgMzItYml0IGludGVnZXJzXG4iKTsKLQkgICAg cmV0dXJuKC05KTsKLQl9Ci0JeCA9IGNtbnVtKCJzdGFydGluZyBwb3NpdGlvbiAoYnl0ZSBudW1i ZXIpIiwKLQkJICAiIiwxMCwmc2Vla3RvLHh4c3RyaW5nKTsKLQlpZiAoeCA8IDApCi0JICByZXR1 cm4oeCk7Ci0JemZucWZwKHMsZnNwZWNsZW4sZnNwZWMpOwkvKiBHZXQgZnVsbCBwYXRoICovCi0J aWYgKCh4ID0gY210eHQoIk5hbWUgdG8gc2VuZCBpdCB3aXRoIiwiIiwmcyxOVUxMKSkgPCAwKQot CSAgcmV0dXJuKHgpOwotCWNrc3RybmNweSh0bXBidWYscyxUTVBCVUZTSVopOwotCi0jaWZkZWYg SUtTRAotCWlmIChpbnNlcnZlciAmJiAhRU5BQkxFRChlbl9nZXQpKSB7Ci0JICAgIHByaW50Zigi P1NvcnJ5LCBzZW5kaW5nIGZpbGVzIGlzIGRpc2FibGVkXG4iKTsKLQkgICAgcmV0dXJuKC05KTsK LQl9Ci0jZW5kaWYgLyogSUtTRCAqLwotI2lmZGVmIFBJUEVTRU5ECi0JaWYgKHNuZGZpbHRlcikg ewotCSAgICBwcmludGYoIj9Tb3JyeSwgbm8gUFNFTkQgd2hpbGUgU0VORCBGSUxURVIgc2VsZWN0 ZWRcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotI2lm ZGVmIENLX1hZWgotCWlmICgocHJvdG9jb2wgPT0gUFJPVE9fWCB8fCBwcm90b2NvbCA9PSBQUk9U T19YQykpIHsKLQkgICAgcHJpbnRmKCJTb3JyeSwgUFNFTkQgd29ya3Mgb25seSB3aXRoIEtlcm1p dCBwcm90b2NvbFxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotI2VuZGlmIC8qIENLX1hZWiAq LwotCi0JY21hcmcyID0gYnJzdHJpcCh0bXBidWYpOwkvKiBTdHJpcCBicmFjZXMgKi8KLQljbWFy ZyA9IGxpbmU7CQkJLyogRmlsZSB0byBzZW5kICovCi0JZGVidWcoRjExMCwiUFNFTkQgZmlsZW5h bWUiLGNtYXJnLDApOwotCWRlYnVnKEYxMTAsIlBTRU5EIGFzLW5hbWUiLGNtYXJnMiwwKTsKLQlz ZW5kc3RhcnQgPSBzZWVrdG87Ci0Jc3N0YXRlID0gJ3MnOwkJCS8qIFNldCBzdGFydCBzdGF0ZSB0 byBTRU5EICovCi0jaWZuZGVmIE5PTVNFTkQKLQlhZGRsaXN0ID0gMDsKLQlmaWxlbmV4dCA9IE5V TEw7Ci0jZW5kaWYgLyogTk9NU0VORCAqLwotCXNlbmRtb2RlID0gU01fUFNFTkQ7Ci0jaWZkZWYg TUFDCi0Jd2hhdCA9IFdfU0VORDsKLQlzY3JjcmVhdGUoKTsKLSNlbmRpZiAvKiBNQUMgKi8KLQlp ZiAobG9jYWwpIHsJCQkvKiBJZiBpbiBsb2NhbCBtb2RlLCAqLwotCSAgICBkaXNwbGEgPSAxOwkJ CS8qIGVuYWJsZSBmaWxlIHRyYW5zZmVyIGRpc3BsYXkgKi8KLQl9Ci0JcmV0dXJuKDApOwotICAg IH0KLSNlbmRpZiAvKiBDS19SRVNFTkQgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRl ZiBOT1hGRVIKLSNpZm5kZWYgTk9NU0VORAotICAgIGlmIChjeCA9PSBYWE1TRSB8fCBjeCA9PSBY WE1NT1ZFKSB7Ci0jaWZkZWYgTkVXRlRQCi0JaWYgKChmdHBnZXQgPT0gMSkgfHwgKChmdHBnZXQg PT0gMikgJiYgZnRwaXNvcGVuKCkpKQotCSAgcmV0dXJuKGRvZnRwcHV0KGN4LDApKTsKLSNlbmRp ZiAvKiBORVdGVFAgKi8KLSNpZmRlZiBDS19YWVoKLQlpZiAocHJvdG9jb2wgPT0gUFJPVE9fWCB8 fCBwcm90b2NvbCA9PSBQUk9UT19YQykgewotCSAgICBwcmludGYoCi0iU29ycnksIHlvdSBjYW4g b25seSBzZW5kIG9uZSBmaWxlIGF0IGEgdGltZSB3aXRoIFhNT0RFTSBwcm90b2NvbFxuIgotCQkg ICApOwotCSAgICByZXR1cm4oLTkpOwotCX0KLSNlbmRpZiAvKiBDS19YWVogKi8KLSAgICAgICAg cmV0dXJuKGRveHNlbmQoY3gpKTsKLSAgICB9Ci0KLSNpZmRlZiBDT01NRU5UCQkJCS8qIChtb3Zl ZCB0byBkb3hzZW5kKSAqLwotICAgIGlmIChjeCA9PSBYWE1TRSB8fCBjeCA9PSBYWE1NT1ZFKSB7 CS8qIE1TRU5EIGFuZCBNTU9WRSBjb21tYW5kcyAqLwotCW5maWxzID0gMDsJCQkvKiBMaWtlIGdl dHRpbmcgYSBsaXN0IG9mICovCi0JbHAgPSBsaW5lOwkJCS8qIGZpbGVzIG9uIHRoZSBjb21tYW5k IGxpbmUgKi8KLQlhZGRsaXN0ID0gMDsJCQkvKiBEbyBub3QgdXNlIFNFTkQtTElTVCAqLwotCWZp bGVuZXh0ID0gTlVMTDsJCS8qIERpdHRvICEgKi8KLQotCXdoaWxlICgxKSB7Ci0JICAgIGNoYXIg KnA7Ci0JICAgIGlmICgoeCA9IGNtaWZpKCJOYW1lcyBvZiBmaWxlcyB0byBzZW5kLCBzZXBhcmF0 ZWQgYnkgc3BhY2VzIiwiIiwKLQkJCSAgICZzLCZ5LHh4c3RyaW5nKSkgPCAwKSB7Ci0JCWlmICh4 ID09IC0zKSB7Ci0JCSAgICBpZiAobmZpbHMgPD0gMCkgewotCQkJcHJpbnRmKCI/QSBmaWxlIHNw ZWNpZmljYXRpb24gaXMgcmVxdWlyZWRcbiIpOwotCQkJcmV0dXJuKC05KTsKLQkJICAgIH0gZWxz ZSBicmVhazsKLQkJfQotCQlyZXR1cm4oeCk7Ci0JICAgIH0KLQkgICAgbXNmaWxlc1tuZmlscysr XSA9IGxwOwkvKiBHb3Qgb25lLCBjb3VudCBpdCwgcG9pbnQgdG8gaXQsICovCi0JICAgIHAgPSBs cDsJCQkvKiByZW1lbWJlciBwb2ludGVyLCAqLwotCSAgICB3aGlsZSAoKmxwKysgPSAqcysrKQkv KiBhbmQgY29weSBpdCBpbnRvIGJ1ZmZlciAqLwotCSAgICAgIGlmIChscCA+IChsaW5lICsgTElO QlVGU0laKSkgeyAvKiBBdm9pZCBtZW1vcnkgbGVhayAqLwotCQkgIHByaW50ZigiP01TRU5EIGxp c3QgdG9vIGxvbmdcbiIpOwotCQkgIGxpbmVbMF0gPSBOVUw7Ci0JCSAgcmV0dXJuKC05KTsKLQkg ICAgICB9Ci0JICAgIGRlYnVnKEYxMTEsIm1zZmlsZXMiLG1zZmlsZXNbbmZpbHMtMV0sbmZpbHMt MSk7Ci0JICAgIGlmIChuZmlscyA9PSAxKSAqZnNwZWMgPSBOVUw7IC8qIFRha2UgY2FyZSBvZiBc dihmaWxlc3BlYykgKi8KLSNpZmRlZiBaRk5RRlAKLQkgICAgemZucWZwKHAsVE1QQlVGU0laLHRt cGJ1Zik7Ci0JICAgIHAgPSB0bXBidWY7Ci0jZW5kaWYgLyogWkZOUUZQICovCi0JICAgIGlmICgo KGludClzdHJsZW4oZnNwZWMpICsgKGludClzdHJsZW4ocCkgKyAxKSA8IGZzcGVjbGVuKSB7Ci0J CXN0cmNhdChmc3BlYyxwKTsJLyogc2FmZSAqLwotCQlzdHJjYXQoZnNwZWMsIiAiKTsJLyogc2Fm ZSAqLwotCSAgICB9IGVsc2UgcHJpbnRmKCJXQVJOSU5HIC0gXFx2KGZpbGVzcGVjKSBidWZmZXIg b3ZlcmZsb3dcbiIpOwotCX0KLQljbWxpc3QgPSBtc2ZpbGVzOwkJLyogUG9pbnQgY21saXN0IHRv IHBvaW50ZXIgYXJyYXkgKi8KLQljbWFyZzIgPSAiIjsJCQkvKiBObyBpbnRlcm5hbCBleHBhbnNp b24gbGlzdCAoeWV0KSAqLwotCXNuZHNyYyA9IG5maWxzOwkJCS8qIEZpbGVuYW1lcyBjb21lIGZy b20gY21saXN0ICovCi0Jc2VuZG1vZGUgPSBTTV9NU0VORDsJCS8qIFJlbWVtYmVyIHRoaXMga2lu ZCBvZiBTRU5EaW5nICovCi0Jc3N0YXRlID0gJ3MnOwkJCS8qIFNldCBzdGFydCBzdGF0ZSBmb3Ig U0VORCAqLwotCWlmIChjeCA9PSBYWE1NT1ZFKQkJLyogSWYgTU1PVkUnaW5nLCAqLwotCSAgbW92 aW5nID0gMTsJCQkvKiAgc2V0IHRoaXMgZmxhZy4gKi8KLSNpZmRlZiBNQUMKLQl3aGF0ID0gV19T RU5EOwotCXNjcmNyZWF0ZSgpOwotI2VuZGlmIC8qIE1BQyAqLwotCWlmIChsb2NhbCkgewkJCS8q IElmIGluIGxvY2FsIG1vZGUsICovCi0JICAgIGRpc3BsYSA9IDE7CQkJLyogdHVybiBvbiBmaWxl IHRyYW5zZmVyIGRpc3BsYXkgKi8KLQkgICAgdHRmbHVpKCk7CQkJLyogYW5kIGZsdXNoIHR0eSBp bnB1dCBidWZmZXIuICovCi0JfQotCXJldHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogQ09NTUVO VCAqLwotI2VuZGlmIC8qIE5PTVNFTkQgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRl ZiBOT1NFUlZFUgotICAgIGlmIChjeCA9PSBYWFNFUikgewkJCS8qIFNFUlZFUiAqLwotI2lmZGVm IENLX1hZWgotCWlmIChwcm90b2NvbCAhPSBQUk9UT19LKSB7Ci0JICAgIHByaW50ZigiU29ycnks IFNFUlZFUiBvbmx5IHdvcmtzIHdpdGggS2VybWl0IHByb3RvY29sXG4iKTsKLQkgICAgcmV0dXJu KC05KTsKLQl9Ci0jZW5kaWYgLyogQ0tfWFlaICovCi0jaWZkZWYgQ09NTUVOVAotLyoKLSAgUGFy c2UgZm9yIHRpbWUgbGltaXQsIGJ1dCBzaW5jZSB3ZSBkb24ndCB1c2UgaXQgeWV0LAotICB0aGUg cGFyc2luZyBpcyBjb21tZW50ZWQgb3V0LgotKi8KLQl4X2lmbnVtID0gMTsJCQkvKiBUdXJuIG9m ZiBpbnRlcm5hbCBjb21wbGFpbnRzICovCi0JeSA9IGNtbnVtKCJvcHRpb25hbCB0aW1lIGxpbWl0 LCBzZWNvbmRzLCBvciB0aW1lIG9mIGRheSBhcyBoaDptbTpzcyIsCi0JCSAgIjAiLCAxMCwgJngs IHh4c3RyaW5nCi0JCSAgKTsKLQl4X2lmbnVtID0gMDsKLQlpZiAoeSA8IDApIHsKLQkgICAgaWYg KHkgPT0gLTIpIHsJCS8qIEludmFsaWQgbnVtYmVyIG9yIGV4cHJlc3Npb24gKi8KLQkJenogPSB0 b2Qyc2VjKGF0bWJ1Zik7CS8qIENvbnZlcnQgdG8gc2VjcyBzaW5jZSBtaWRuaWdodCAqLwotCQlp ZiAoenogPCAwTCkgewotCQkgICAgcHJpbnRmKCI/TnVtYmVyLCBleHByZXNzaW9uLCBvciB0aW1l IG9mIGRheSByZXF1aXJlZFxuIik7Ci0JCSAgICByZXR1cm4oLTkpOwotCQl9IGVsc2UgewotCQkg ICAgY2hhciBub3dbMzJdOwkvKiBDdXJyZW50IHRpbWUgKi8KLQkJICAgIGNoYXIgKnA7Ci0JCSAg ICBsb25nIHRub3c7Ci0JCSAgICBwID0gbm93OwotCQkgICAgenRpbWUoJnApOwotCQkgICAgdG5v dyA9IGF0b2wocCsxMSkgKiAzNjAwTCArIGF0b2wocCsxNCkgKiA2MEwgKyBhdG9sKHArMTcpOwot CQkgICAgaWYgKHp6IDwgdG5vdykJLyogVXNlcidzIHRpbWUgYmVmb3JlIG5vdyAqLwotCQkgICAg ICB6eiArPSA4NjQwMEw7CS8qIFNvIG1ha2UgaXQgdG9tb3Jyb3cgKi8KLQkJICAgIHp6IC09IHRu b3c7CQkvKiBTZWNvbmRzIGZyb20gbm93LiAqLwotCQl9Ci0JICAgIH0gZWxzZQotCSAgICAgIHJl dHVybih5KTsKLQl9Ci0JaWYgKHp6ID4gLTFMKSB7Ci0JICAgIHggPSB6ejsKLQkgICAgaWYgKHp6 ICE9IChsb25nKSB4KSB7Ci0JCXByaW50ZigKLSJTb3JyeSwgYXJpdGhtZXRpYyBvdmVyZmxvdyAt IGhoOm1tOnNzIG5vdCB1c2FibGUgb24gdGhpcyBwbGF0Zm9ybS5cbiIKLQkJICAgICAgICk7Ci0J CXJldHVybigtOSk7Ci0JICAgIH0KLQl9Ci0JaWYgKHggPCAwKQotCSAgeCA9IDA7Ci0jZW5kaWYg LyogQ09NTUVOVCAqLwotCi0JaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0Jc3N0 YXRlID0gJ3gnOwotI2lmZGVmIE1BQwotCXdoYXQgPSBXX1JFQ1Y7Ci0Jc2NyY3JlYXRlKCk7Ci0j ZW5kaWYgLyogTUFDICovCi0JaWYgKGxvY2FsKSBkaXNwbGEgPSAxOwotI2lmZGVmIEFNSUdBCi0J cmVxb2ZmKCk7CQkJLyogTm8gRE9TIHJlcXVlc3RvcnMgd2hpbGUgc2VydmVyICovCi0jZW5kaWYg LyogQU1JR0EgKi8KLQlyZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlmIC8qIE5PU0VSVkVSICovCi0K LSAgICBpZiAoY3ggPT0gWFhTQVZFKSB7CQkJLyogU0FWRSBjb21tYW5kICovCi0JeCA9IGNta2V5 KHNhdnRhYixuc2F2LCJvcHRpb24iLCJrZXltYXAiLHh4c3RyaW5nKTsKLQlpZiAoeCA9PSAtMykg ewotCSAgICBwcmludGYoIj9Zb3UgbXVzdCBzcGVjaWZ5IGFuIG9wdGlvbiB0byBzYXZlXG4iKTsK LQkgICAgcmV0dXJuKC05KTsKLQl9Ci0JaWYgKHggPCAwKSByZXR1cm4oeCk7Ci0JLyogaGF2ZSB0 byBzZXQgc3VjY2VzcyBzZXBhcmF0ZWx5IGZvciBlYWNoIGl0ZW0gaW4gZG9wcm0oKS4uLiAqLwot CS8qIGFjdHVhbGx5IG5vdCByZWFsbHksIGNvdWxkIGhhdmUganVzdCBoYWQgZG9wcm0gcmV0dXJu IDAgb3IgMSAqLwotCS8qIGFuZCBzZXQgc3VjY2VzcyBoZXJlLi4uICovCi0JeSA9IGRvc2F2ZSh4 KTsKLQlpZiAoeSA9PSAtMykgewotCSAgICBwcmludGYoIj9Nb3JlIGZpZWxkcyByZXF1aXJlZFxu Iik7Ci0JICAgIHJldHVybigtOSk7Ci0JfSBlbHNlIHJldHVybih5KTsKLSAgICB9Ci0KLSAgICBp ZiAoY3ggPT0gWFhTRVQpIHsJCQkvKiBTRVQgY29tbWFuZCAqLwotCXggPSBjbWtleShwcm10YWIs bnBybSwiUGFyYW1ldGVyIiwiIix4eHN0cmluZyk7Ci0JaWYgKHggPT0gLTMpIHsKLQkgICAgcHJp bnRmKCI/WW91IG11c3Qgc3BlY2lmeSBhIHBhcmFtZXRlciB0byBzZXRcbiIpOwotCSAgICByZXR1 cm4oLTkpOwotCX0KLQlpZiAoeCA8IDApIHJldHVybih4KTsKLQkvKiBoYXZlIHRvIHNldCBzdWNj ZXNzIHNlcGFyYXRlbHkgZm9yIGVhY2ggaXRlbSBpbiBkb3BybSgpLi4uICovCi0JLyogYWN0dWFs bHkgbm90IHJlYWxseSwgY291bGQgaGF2ZSBqdXN0IGhhZCBkb3BybSByZXR1cm4gMCBvciAxICov Ci0JLyogYW5kIHNldCBzdWNjZXNzIGhlcmUuLi4gKi8KLQl5ID0gZG9wcm0oeCwwKTsKLQlpZiAo eSA9PSAtMykgewotCSAgICBwcmludGYoIj9Nb3JlIGZpZWxkcyByZXF1aXJlZFxuIik7Ci0JICAg IHJldHVybigtOSk7Ci0JfSBlbHNlIHJldHVybih5KTsKLSAgICB9Ci0KLSNpZm5kZWYgTk9QVVNI Ci0gICAgaWYgKGN4ID09IFhYU0hFCQkJLyogU0hFTEwgKHN5c3RlbSkgY29tbWFuZCAqLwotCXx8 IGN4ID09IFhYRVhFQwkJCS8qIGV4ZWMoKSAqLwotCSkgewotCWludCByeCA9IDA7Ci0JY2hhciAq IHAgPSBOVUxMOwotCWludCBpIC8qICxuICovIDsKLSNpZmRlZiBVTklYT1JPU0sKLQljaGFyICog YXJnc1syNTZdOwotI2VuZGlmIC8qIFVOSVhPUk9TSyAqLwotCi0jaWZkZWYgSUtTRAotCWlmIChp bnNlcnZlciAmJiAobm9wdXNoIHx8ICFFTkFCTEVEKGVuX2hvcykpKSB7Ci0JICAgIHByaW50Zigi P1NvcnJ5LCBob3N0IGNvbW1hbmQgYWNjZXNzIGlzIGRpc2FibGVkXG4iKTsKLQkgICAgcmV0dXJu KC05KTsKLQl9Ci0jZW5kaWYgLyogSUtTRCAqLwotCi0jaWZkZWYgQ0tFWEVDCi0JaWYgKGN4ID09 IFhYRVhFQykgewkJLyogRVhFQyAob3ZlcmxheSBvdXJzZWx2ZXMpICovCi0JICAgIHN0cnVjdCBG REIgc3csIGZsOwotCSAgICBjbWZkYmkoJnN3LAkJCS8qIEZpcnN0IEZEQiAtIGNvbW1hbmQgc3dp dGNoZXMgKi8KLQkJICAgX0NNS0VZLAkJLyogZmNvZGUgKi8KLQkJICAgIkNvbW1hbmQgdG8gb3Zl cmxheSBDLUtlcm1pdFxuIG9yIHN3aXRjaCIsIC8qIGhscG1zZyAqLwotCQkgICAiIiwJCQkvKiBk ZWZhdWx0ICovCi0JCSAgICIiLAkJCS8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0JCSAgIDEsCQkJ LyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCi0JCSAgIDQsCQkJLyogYWRkdGwg bnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLwotCQkgICB4eHN0cmluZywJCS8qIFByb2Nlc3Np bmcgZnVuY3Rpb24gKi8KLQkJICAgcmVkaXJzdywJCS8qIEtleXdvcmQgdGFibGUgKi8KLQkJICAg JmZsCQkJLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLwotCQkgICApOwotCSAgICBjbWZkYmkoJmZs LAkJCS8qIDJuZCBGREIgLSBjb21tYW5kIHRvIGV4ZWMgKi8KLQkJICAgX0NNRkxELAkJLyogZmNv ZGUgKi8KLQkJICAgIkNvbW1hbmQgdG8gb3ZlcmxheSBDLUtlcm1pdCIsIC8qIGhscG1zZyAqLwot CQkgICAiIiwJCQkvKiBkZWZhdWx0ICovCi0JCSAgICIiLAkJCS8qIGFkZHRsIHN0cmluZyBkYXRh ICovCi0JCSAgIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KLQkJICAgMCwJCQkvKiBh ZGR0bCBudW1lcmljIGRhdGEgMiAqLwotCQkgICB4eHN0cmluZywKLQkJICAgTlVMTCwKLQkJICAg TlVMTAkJCS8qIE5vIG1vcmUgYWZ0ZXIgdGhpcyAqLwotCQkgICApOwotCSAgICB3aGlsZSAoMSkg ewotCQl4ID0gY21mZGIoJnN3KTsJCS8qIFBhcnNlIHNvbWV0aGluZyAqLwotCQlkZWJ1ZyhGMTAx LCJleGVjIGNtZmRiIiwiIix4KTsKLQkJaWYgKHggPCAwKQotCQkgIHJldHVybih4KTsKLQkJLyog R2VuZXJhbGl6ZSB0aGlzIGlmIHdlIGFkZCBtb3JlIHN3aXRjaGVzICovCi0JCWlmIChjbXJlc3Vs dC5mY29kZSA9PSBfQ01LRVkpIHsKLQkJICAgIHJ4ID0gMTsKLQkJICAgIGNvbnRpbnVlOwotCQl9 Ci0JCWlmIChjbXJlc3VsdC5mY29kZSA9PSBfQ01GTEQpCi0JCSAgYnJlYWs7Ci0JCXJldHVybigt Mik7Ci0JICAgIH0KLQkgICAgY2tzdHJuY3B5KHRtcGJ1ZixjbXJlc3VsdC5zcmVzdWx0LFRNUEJV RlNJWik7Ci0JICAgIGlmICghdG1wYnVmWzBdKSB7Ci0JCXByaW50ZigiP0NvbW1hbmQgcmVxdWly ZWRcbiIpOwotCQlyZXR1cm4oLTkpOwotCSAgICB9Ci0JICAgIHAgPSBicnN0cmlwKHRtcGJ1Zik7 Ci0JICAgIGFyZ3NbMF0gPSBOVUxMOwkJLyogU2V0IGFyZ3ZbMF0gdG8gaXQgKi8KLQkgICAgbWFr ZXN0cigmYXJnc1swXSxwKTsKLQkgICAgZm9yIChpID0gMTsgaSA8IDI1NTsgaSsrKSB7CS8qIEdl dCBhcmd1bWVudHMgZm9yIGNvbW1hbmQgKi8KLQkJaWYgKCh4ID0gY21mbGQoIkFyZ3VtZW50Iiwi Iiwmcyx4eHN0cmluZykpIDwgMCkgewotCQkgICAgaWYgKHggPT0gLTMpIHsKLQkJCWlmICgoeCA9 IGNtY2ZtKCkpIDwgMCkKLQkJCSAgcmV0dXJuKHgpOwotCQkJYnJlYWs7Ci0JCSAgICB9IGVsc2UK LQkJICAgICAgcmV0dXJuKHgpOwotCQl9Ci0JCWFyZ3NbaV0gPSBOVUxMOwotCQlzID0gYnJzdHJp cChzKTsKLQkJbWFrZXN0cigmYXJnc1tpXSxzKTsKLQkgICAgfQotCSAgICBhcmdzW2ldID0gTlVM TDsKLQl9IGVsc2UgewotI2VuZGlmIC8qIENLRVhFQyAqLwotCSAgICBpZiAoKHggPSBjbXR4dCgi U3lzdGVtIGNvbW1hbmQgdG8gZXhlY3V0ZSIsIiIsJnMseHhzdHJpbmcpKSA8IDApCi0JICAgICAg cmV0dXJuKHgpOwotI2lmZGVmIENLRVhFQwotCX0KLSNlbmRpZiAvKiBDS0VYRUMgKi8KLSAgICAg ICAgaWYgKG5vcHVzaCkKLSAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotI2lmZGVmIENL X0FQQwotCWlmIChhcGNhY3RpdmUgPT0gQVBDX1JFTU9URSAmJiAhKGFwY3N0YXR1cyAmIEFQQ19V TkNIKSkKLQkgIHJldHVybihzdWNjZXNzID0gMCk7Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0JY29u cmVzKCk7CQkJLyogTWFrZSBjb25zb2xlIG5vcm1hbCAgKi8KLSNpZmRlZiBPUzIKLQlpZiAoIShz ICYmICpzKSkgewotCSAgICBvczJwdXNoKCk7Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDEpOwotCX0gZWxzZQotI2VuZGlmIC8qIE9TMiAqLwotCSAgaWYgKGN4ID09IFhYU0hFKSB7Ci0J ICAgICAgeCA9IHpzaGNtZChzKTsKLQkgICAgICBkZWJ1ZyhGMTAxLCJSVU4genNoY21kIGNvZGUi LCIiLHgpOwotCSAgICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7Ci0JICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSB4KTsKLSNpZmRlZiBDS0VYRUMKLQkgIH0gZWxzZSB7Ci0jaWZkZWYgREVCVUcKLQkgICAg ICBpZiAoZGVibG9nKSB7Ci0JCSAgZGVidWcoRjExMSwiRVhFQyBjbWQiLHAsMCk7Ci0JCSAgZm9y IChpID0gMDsgaSA8IDI1NiAmJiBhcmdzW2ldOyBpKyspCi0JCSAgICBkZWJ1ZyhGMTExLCJFWEVD IGFyZyIsYXJnc1tpXSxpKTsKLQkgICAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQkgICAgICBp ZiAocCkgewotCQkgIHpfZXhlYyhwLGFyZ3MscngpOwkvKiBPdmVybGF5IG91cnNlbGYgKi8KLQkJ ICBkZWJ1ZyhGMTAwLCJFWEVDIGZhaWxzIiwiIiwwKTsKLQkJICBjb25jYigoY2hhcillc2NhcGUp OwkvKiBJbiBjYXNlIGl0IHJldHVybnMgKi8KLQkgICAgICB9Ci0JICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSAwKTsKLSNlbmRpZiAvKiBDS0VYRUMgKi8KLQkgIH0KLSAgICB9Ci0KLSNpZmRlZiBDS19S RURJUgotICAgIGlmIChjeCA9PSBYWEZVTikgewkJCS8qIFJFRElSRUNUICovCi0jaWZkZWYgQ0tf QVBDCi0JaWYgKChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMKSB8fAotCSAgICAoKGFwY2FjdGl2ZSA9 PSBBUENfUkVNT1RFKSAmJiAoIShhcGNzdGF0dXMgJiBBUENfVU5DSCkpKSkKLQkgIHJldHVybihz dWNjZXNzID0gMCk7Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0JY2ttYWttc2codG1wYnVmLAotCQkg VE1QQlVGU0laLAotCQkgIkxvY2FsIGNvbW1hbmQgdG8gcnVuLFxuIiwKLQkJICJ3aXRoIGl0cyBz dGFuZGFyZCBpbnB1dC9vdXRwdXQgcmVkaXJlY3RlZCB0byAiLAotCQkgbG9jYWwgPyB0dG5hbWUg OiAidGhlIGNvbW11bmljYXRpb25zIGNvbm5lY3Rpb24iLAotCQkgIlxuIgotCQkgKTsKLQlpZiAo KHggPSBjbXR4dCh0bXBidWYsIiIsJnMseHhzdHJpbmcpKSA8IDApCi0JICByZXR1cm4oeCk7Ci0g ICAgICAgIGlmIChub3B1c2gpIHsKLSAgICAgICAgICAgIHByaW50ZigiP1JFRElSRUNUIGRpc2Fi bGVkXG4iKTsKLSAgICAgICAgICAgIHJldHVybihzdWNjZXNzPTApOwotICAgICAgICB9Ci0JaWYg KCFsb2NhbCkgewotCSAgICBwcmludGYoIj9TRVQgTElORSBvciBTRVQgSE9TVCByZXF1aXJlZCBm aXJzdFxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotCWlmICghKnMpIHsKLQkgICAgcHJpbnRm KCI/UkVESVJFQ1QgcmVxdWlyZXMgYSBjb21tYW5kIHRvIHJlZGlyZWN0XG4iKTsKLQkgICAgcmV0 dXJuKC05KTsKLQl9Ci0JcmV0dXJuKHN1Y2Nlc3MgPSB0dHJ1bmNtZChzKSk7Ci0gICAgfQotI2Vu ZGlmIC8qIENLX1JFRElSICovCi0jZW5kaWYgLyogTk9QVVNIICovCi0KLSNpZm5kZWYgTk9TSE9X Ci0gICAgaWYgKGN4ID09IFhYU0hPKSB7CQkJLyogU0hPVyAqLwotCXggPSBjbWtleShzaG90YWIs bnNobywiIiwicGFyYW1ldGVycyIseHhzdHJpbmcpOwotCWlmICh4IDwgMCkgcmV0dXJuKHgpOwot CXJldHVybihkb3Nob3coeCkpOwotICAgIH0KLSNlbmRpZiAvKiBOT1NIT1cgKi8KLQotI2lmbmRl ZiBNQUMKLSAgICBpZiAoY3ggPT0gWFhTUEEpIHsJCQkvKiBTUEFDRSAqLwotI2lmZGVmIElLU0QK LQlpZiAoaW5zZXJ2ZXIgJiYgIUVOQUJMRUQoZW5fc3BhKSkgewotCSAgICBwcmludGYoIj9Tb3Jy eSwgU1BBQ0UgY29tbWFuZCBkaXNhYmxlZFxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotI2Vu ZGlmIC8qIElLU0QgKi8KLSNpZmRlZiBkYXRhZ2VuZXJhbAotCS8qIEFPUy9WUyBjYW4gdGFrZSBh biBhcmd1bWVudCBhZnRlciBpdHMgInNwYWNlIiBjb21tYW5kLiAqLwotCWlmICgoeCA9IGNtdHh0 KCJDb25maXJtLCBvciBsb2NhbCBkaXJlY3RvcnkgbmFtZSIsIiIsJnMseHhzdHJpbmcpKSA8IDAp Ci0JICByZXR1cm4oeCk7Ci0JaWYgKG5vcHVzaCkgewotCSAgICBwcmludGYoIj9Tb3JyeSwgU1BB Q0UgY29tbWFuZCBkaXNhYmxlZFxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfSBlbHNlIGlmICgq cyA9PSBOVUwpIHsKLQkgICAgeHN5c3RlbShTUEFDTUQpOwotCX0gZWxzZSB7Ci0JICAgIGNrbWFr bXNnKGxpbmUsTElOQlVGU0laLCJzcGFjZSAiLHMsTlVMTCxOVUxMKTsKLQkgICAgeHN5c3RlbShs aW5lKTsKLQl9Ci0jZWxzZQotI2lmZGVmIE9TMgotCWlmICgoeCA9IGNtdHh0KCJQcmVzcyBFbnRl ciBmb3IgY3VycmVudCBkaXNrLFxuXAotIG9yIHNwZWNpZnkgYSBkaXNrIGxldHRlciBsaWtlIEE6 IiwiIiwmcyx4eHN0cmluZykpIDwgMCkKLQkgIHJldHVybih4KTsKLQlpZiAoKnMgPT0gTlVMKSB7 CQkvKiBDdXJyZW50IGRpc2sgKi8KLSAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3BhY2UgPSB6 ZHNrc3BhY2UoMCk7Ci0gICAgICAgICAgICBpZiAoc3BhY2UgPiAwICYmIHNwYWNlIDwgMTAyNCkK LSAgICAgICAgICAgICAgcHJpbnRmKCIgRnJlZSBzcGFjZTogdW5rbm93blxuIik7Ci0gICAgICAg ICAgICBlbHNlCi0JICAgICAgcHJpbnRmKCIgRnJlZSBzcGFjZTogJWxkS1xuIiwgc3BhY2UvMTAy NEwpOwotCX0gZWxzZSB7Ci0JICAgIGludCBkcml2ZSA9IHRvdXBwZXIoKnMpOwotICAgICAgICAg ICAgdW5zaWduZWQgbG9uZyBzcGFjZSA9IHpkc2tzcGFjZShkcml2ZSAtICdBJyArIDEpOwotICAg ICAgICAgICAgaWYgKHNwYWNlID4gMCAmJiBzcGFjZSA8IDEwMjQpCi0gICAgICAgICAgICAgIHBy aW50ZigiIERyaXZlICVjOiB1bmtub3duIGZyZWVcbiIpOwotICAgICAgICAgICAgZWxzZQotICAg ICAgICAgICAgICBwcmludGYoIiBEcml2ZSAlYzogJWxkSyBmcmVlXG4iLCBkcml2ZSxzcGFjZSAv IDEwMjRMKTsKLQl9Ci0jZWxzZQotI2lmZGVmIFVOSVhPUk9TSwotCXggPSBjbWRpcigiQ29uZmly bSBmb3IgY3VycmVudCBkaXNrLFxuXAotIG9yIHNwZWNpZnkgYSBkaXNrIGRldmljZSBvciBkaXJl Y3RvcnkiLCIiLCZzLHh4c3RyaW5nKTsKLQlpZiAoeCA9PSAtMykKLQkgIHMgPSAiIjsKLQllbHNl IGlmICh4IDwgMCkKLQkgIHJldHVybih4KTsKLSAgICAgICAgY2tzdHJuY3B5KHRtcGJ1ZixzLFRN UEJVRlNJWik7Ci0gICAgICAgIHMgPSB0bXBidWY7Ci0JaWYgKCh4ID0gY21jZm0oKSkgPCAwKSBy ZXR1cm4oeCk7Ci0JaWYgKG5vcHVzaCkgewotCSAgICBwcmludGYoIj9Tb3JyeSwgU1BBQ0UgY29t bWFuZCBkaXNhYmxlZFxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotCWlmICghKnMpIHsJCQkv KiBDdXJyZW50IGRpc2sgKi8KLQkgICAgeHN5c3RlbShTUEFDTUQpOwotCX0gZWxzZSB7CQkJLyog U3BlY2lmaWVkIGRpc2sgKi8KLQkgICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVosU1BBQ00yLCIg IixzLE5VTEwpOwotCSAgICB4c3lzdGVtKGxpbmUpOwotCX0KLSNlbHNlCi0JaWYgKCh4ID0gY21j Zm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0JaWYgKG5vcHVzaCkgewotCSAgICBwcmludGYoIj9Tb3Jy eSwgU1BBQ0UgY29tbWFuZCBkaXNhYmxlZFxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotCXhz eXN0ZW0oU1BBQ01EKTsKLSNlbmRpZiAvKiBVTklYT1JPU0sgKi8KLSNlbmRpZiAvKiBPUzIgKi8K LSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotCXJldHVybihzdWNjZXNzID0gMSk7CQkvKiBQcmV0 ZW5kIGl0IHdvcmtlZCAqLwotICAgIH0KLSNlbmRpZiAvKiBNQUMgKi8KLQotI2lmbmRlZiBOT1hG RVIKLSAgICBpZiAoY3ggPT0gWFhTVEEpIHsJCQkvKiBTVEFUSVNUSUNTICovCi0JaWYgKCh4ID0g Y21rZXkoc3RhdHRhYiwyLCJDYXJyaWFnZSByZXR1cm4sIG9yIG9wdGlvbiIsCi0JCSAgICAgICAi L2JyaWVmIix4eHN0cmluZykpIDwgMCkKLQkgIHJldHVybih4KTsKLQlpZiAoKHkgPSBjbWNmbSgp KSA8IDApIHJldHVybih5KTsKLQlyZXR1cm4oc3VjY2VzcyA9IGRvc3RhdCh4KSk7Ci0gICAgfQot I2VuZGlmIC8qIE5PWEZFUiAqLwotCi0gICAgaWYgKGN4ID09IFhYU1RPIHx8IGN4ID09IFhYRU5E KSB7CS8qIFNUT1AsIEVORCwgb3IgUE9QICovCi0JaWYgKCh5ID0gY21udW0oImV4aXQgc3RhdHVz IGNvZGUiLCIwIiwxMCwmeCx4eHN0cmluZykpIDwgMCkKLQkgIHJldHVybih5KTsKLQlpZiAoKHkg PSBjbXR4dCgiTWVzc2FnZSB0byBwcmludCIsIiIsJnMseHhzdHJpbmcpKSA8IDApCi0JICByZXR1 cm4oeSk7Ci0JcyA9IGJyc3RyaXAocyk7Ci0JaWYgKCpzKSBwcmludGYoIiVzXG4iLHMpOwotCWlm IChjeCA9PSBYWFNUTykgewotCSAgICBkb3N0b3AoKTsKLQl9IGVsc2UgewotCSAgICBkb2VuZCh4 KTsKLQl9Ci0JcmV0dXJuKHN1Y2Nlc3MgPSAoeCA9PSAwKSk7Ci0gICAgfQotICAgIGlmIChjeCA9 PSBYWFNVUykgewkJCS8qIFNVU1BFTkQgKi8KLQlpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVy bih5KTsKLSNpZmRlZiBOT0pDCi0JcHJpbnRmKCJTb3JyeSwgdGhpcyB2ZXJzaW9uIG9mIEtlcm1p dCBjYW5ub3QgYmUgc3VzcGVuZGVkXG4iKTsKLSNlbHNlCi0jaWZkZWYgSUtTRAotCWlmIChpbnNl cnZlcikgewotCSAgICBwcmludGYoIj9Tb3JyeSwgSUtTRCBjYW4gbm90IGJlIHN1c3BlbmRlZFxu Iik7Ci0JICAgIHJldHVybigtOSk7Ci0JfSBlbHNlCi0jZW5kaWYgLyogSUtTRCAqLwotCSAgaWYg KG5vcHVzaCkgewotCSAgICBwcmludGYoIj9Tb3JyeSwgYWNjZXNzIHRvIHN5c3RlbSBpcyBkaXNh YmxlZFxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotCXN0cHRyYXAoMCk7Ci0jZW5kaWYgLyog Tk9KQyAqLwotCXJldHVybigwKTsKLSAgICB9Ci0KLSAgICBpZiAoY3ggPT0gWFhUQUspIHsJCQkv KiBUQUtFICovCi0JY2hhciAqIHNjcmlwdGVudiA9IE5VTEw7CQotI2lmZGVmIE9TMgotICAgICAg ICBjaGFyICogR2V0QXBwRGF0YShpbnQpOwotCWV4dGVybiBjaGFyIHN0YXJ0dXBkaXJbXSxleGVk aXJbXSxpbmlkaXJbXTsKLQljaGFyICoga2V5bWFwZW52ID0gTlVMTDsKLSAgICAgICAgY2hhciAq IGFwcGRhdGEwID0gTlVMTCwgKmFwcGRhdGExID0gTlVMTDsKLQlpbnQgeHg7Ci0jZGVmaW5lIFRB S0VQQVRITEVOIDQwOTYKLSNlbHNlIC8qIE9TMiAqLwotI2RlZmluZSBUQUtFUEFUSExFTiAxMDI0 Ci0jZW5kaWYgLyogT1MyICovCi0JY2hhciB0YWtlcGF0aFtUQUtFUEFUSExFTl07Ci0KLQlpZiAo dGxldmVsID49IE1BWFRBS0UtMSkgewotCSAgICBwcmludGYoIj9UYWtlIGZpbGVzIG5lc3RlZCB0 b28gZGVlcGx5XG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0jaWZkZWYgT1MyCi0jaWZkZWYg TlQKLQlzY3JpcHRlbnYgPSBnZXRlbnYoIks5NVNDUklQVFMiKTsKLQlrZXltYXBlbnYgPSBnZXRl bnYoIks5NUtFWU1BUFMiKTsKLSAgICAgICAgbWFrZXN0cigmYXBwZGF0YTAsKGNoYXIgKilHZXRB cHBEYXRhKDApKTsKLSAgICAgICAgbWFrZXN0cigmYXBwZGF0YTEsKGNoYXIgKilHZXRBcHBEYXRh KDEpKTsKLSNlbHNlIC8qIE5UICovCi0Jc2NyaXB0ZW52ID0gZ2V0ZW52KCJLMlNDUklQVFMiKTsK LQlrZXltYXBlbnYgPSBnZXRlbnYoIksyS0VZTUFQUyIpOwotI2VuZGlmIC8qIE5UICovCi0jZW5k aWYgLyogT1MyICovCi0KLQlpZiAoIXNjcmlwdGVudikJCQkvKiBMZXQgdGhpcyB3b3JrIGZvciBV bml4IGV0YyB0b28gKi8KLQkgIHNjcmlwdGVudiA9IGdldGVudigiQ0tfU0NSSVBUUyIpOyAvKiBV c2UgdGhpcyBpZiBkZWZpbmVkICovCi0jaWZuZGVmIE9TMgotCWlmICghc2NyaXB0ZW52KQkJCS8q IE90aGVyd2lzZSB1c2UgaG9tZSBkaXJlY3RvcnkgKi8KLQkgIHNjcmlwdGVudiA9IGhvbWVwYXRo KCk7Ci0jZW5kaWYgLyogT1MyICovCi0JaWYgKCFzY3JpcHRlbnYpCi0JICBzY3JpcHRlbnYgPSAi IjsKLQlja3N0cm5jcHkodGFrZXBhdGgsc2NyaXB0ZW52LFRBS0VQQVRITEVOKTsKLQlkZWJ1ZyhG MTEwLCJUQUtFIGluaXRpYWwgdGFrZXBhdGgiLHRha2VwYXRoLDApOwotCi0jaWZkZWYgT1MyCi0J aWYgKCFrZXltYXBlbnYpCi0JICBrZXltYXBlbnYgPSBnZXRlbnYoIkNLX0tFWU1BUFMiKTsKLQlp ZiAoIWtleW1hcGVudikKLQkgIGtleW1hcGVudiA9ICIiOwotCi0JY2tzdHJuY2F0KHRha2VwYXRo LAotCQkgIChzY3JpcHRlbnYgJiYgc2NyaXB0ZW52W3N0cmxlbihzY3JpcHRlbnYpLTFdPT0nOycp PyIiOiI7IiwKLQkJICBUQUtFUEFUSExFTgotCQkgICk7Ci0JY2tzdHJuY2F0KHRha2VwYXRoLGtl eW1hcGVudj9rZXltYXBlbnY6IiIsVEFLRVBBVEhMRU4pOwotCWNrc3RybmNhdCh0YWtlcGF0aCwK LQkJICAoa2V5bWFwZW52ICYmIGtleW1hcGVudltzdHJsZW4oa2V5bWFwZW52KS0xXT09JzsnKT8i IjoiOyIsCi0JCSAgVEFLRVBBVEhMRU4KLQkJICApOwotCWNrc3RybmNhdCh0YWtlcGF0aCxzdGFy dHVwZGlyLFRBS0VQQVRITEVOKTsKLQlja3N0cm5jYXQodGFrZXBhdGgsIjsiLFRBS0VQQVRITEVO KTsKLQlja3N0cm5jYXQodGFrZXBhdGgsc3RhcnR1cGRpcixUQUtFUEFUSExFTik7Ci0JY2tzdHJu Y2F0KHRha2VwYXRoLCJTQ1JJUFRTLzsiLFRBS0VQQVRITEVOKTsKLQlja3N0cm5jYXQodGFrZXBh dGgsc3RhcnR1cGRpcixUQUtFUEFUSExFTik7Ci0JY2tzdHJuY2F0KHRha2VwYXRoLCJLRVlNQVBT LzsiLFRBS0VQQVRITEVOKTsKLQotCWNrc3RybmNhdCh0YWtlcGF0aCxhcHBkYXRhMSxUQUtFUEFU SExFTik7Ci0JY2tzdHJuY2F0KHRha2VwYXRoLCJLZXJtaXQgOTUvOyIsVEFLRVBBVEhMRU4pOwot CWNrc3RybmNhdCh0YWtlcGF0aCxhcHBkYXRhMSxUQUtFUEFUSExFTik7Ci0JY2tzdHJuY2F0KHRh a2VwYXRoLCJLZXJtaXQgOTUvU0NSSVBUUy87IixUQUtFUEFUSExFTik7Ci0JY2tzdHJuY2F0KHRh a2VwYXRoLGFwcGRhdGExLFRBS0VQQVRITEVOKTsKLQlja3N0cm5jYXQodGFrZXBhdGgsIktlcm1p dCA5NS9LRVlNQVBTLzsiLFRBS0VQQVRITEVOKTsKLQotCWNrc3RybmNhdCh0YWtlcGF0aCxhcHBk YXRhMCxUQUtFUEFUSExFTik7Ci0JY2tzdHJuY2F0KHRha2VwYXRoLCJLZXJtaXQgOTUvOyIsVEFL RVBBVEhMRU4pOwotCWNrc3RybmNhdCh0YWtlcGF0aCxhcHBkYXRhMCxUQUtFUEFUSExFTik7Ci0J Y2tzdHJuY2F0KHRha2VwYXRoLCJLZXJtaXQgOTUvU0NSSVBUUy87IixUQUtFUEFUSExFTik7Ci0J Y2tzdHJuY2F0KHRha2VwYXRoLGFwcGRhdGEwLFRBS0VQQVRITEVOKTsKLQlja3N0cm5jYXQodGFr ZXBhdGgsIktlcm1pdCA5NS9LRVlNQVBTLzsiLFRBS0VQQVRITEVOKTsKLQotCWNrc3RybmNhdCh0 YWtlcGF0aCxpbmlkaXIsVEFLRVBBVEhMRU4pOwotCWNrc3RybmNhdCh0YWtlcGF0aCwiOyIsVEFL RVBBVEhMRU4pOwotCWNrc3RybmNhdCh0YWtlcGF0aCxpbmlkaXIsVEFLRVBBVEhMRU4pOwotCWNr c3RybmNhdCh0YWtlcGF0aCwiU0NSSVBUUy87IixUQUtFUEFUSExFTik7Ci0JY2tzdHJuY2F0KHRh a2VwYXRoLGluaWRpcixUQUtFUEFUSExFTik7Ci0JY2tzdHJuY2F0KHRha2VwYXRoLCJLRVlNQVBT LzsiLFRBS0VQQVRITEVOKTsKLQotCWNrc3RybmNhdCh0YWtlcGF0aCx6aG9tZSgpLFRBS0VQQVRI TEVOKTsKLQlja3N0cm5jYXQodGFrZXBhdGgsIjsiLFRBS0VQQVRITEVOKTsKLQlja3N0cm5jYXQo dGFrZXBhdGgsemhvbWUoKSxUQUtFUEFUSExFTik7Ci0JY2tzdHJuY2F0KHRha2VwYXRoLCJTQ1JJ UFRTLzsiLFRBS0VQQVRITEVOKTsKLQlja3N0cm5jYXQodGFrZXBhdGgsemhvbWUoKSxUQUtFUEFU SExFTik7Ci0JY2tzdHJuY2F0KHRha2VwYXRoLCJLRVlNQVBTLzsiLFRBS0VQQVRITEVOKTsKLQot CWNrc3RybmNhdCh0YWtlcGF0aCxleGVkaXIsVEFLRVBBVEhMRU4pOwotCWNrc3RybmNhdCh0YWtl cGF0aCwiOyIsVEFLRVBBVEhMRU4pOwotCWNrc3RybmNhdCh0YWtlcGF0aCxleGVkaXIsVEFLRVBB VEhMRU4pOwotCWNrc3RybmNhdCh0YWtlcGF0aCwiU0NSSVBUUy87IixUQUtFUEFUSExFTik7Ci0J Y2tzdHJuY2F0KHRha2VwYXRoLGV4ZWRpcixUQUtFUEFUSExFTik7Ci0JY2tzdHJuY2F0KHRha2Vw YXRoLCJLRVlNQVBTLzsiLFRBS0VQQVRITEVOKTsKLSNlbmRpZiAvKiBPUzIgKi8KLQlkZWJ1ZyhG MTEwLCJUQUtFIGZpbmFsIHRha2VwYXRoIix0YWtlcGF0aCwwKTsKLQotCWlmICgoeSA9IGNtaWZp cCgiQ29tbWFuZHMgZnJvbSBmaWxlIiwKLQkJCSIiLCZzLCZ4LDAsdGFrZXBhdGgseHhzdHJpbmcp KSA8IDApIHsKLQkgICAgaWYgKHkgPT0gLTMpIHsKLQkJcHJpbnRmKCI/QSBmaWxlIG5hbWUgaXMg cmVxdWlyZWRcbiIpOwotCQlyZXR1cm4oLTkpOwotCSAgICB9IGVsc2UKLQkgICAgICByZXR1cm4o eSk7Ci0JfQotCWlmICh4ICE9IDApIHsKLQkgICAgcHJpbnRmKCI/V2lsZGNhcmRzIG5vdCBhbGxv d2VkIGluIGNvbW1hbmQgZmlsZSBuYW1lXG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0JY2tz dHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOwotCWRlYnVnKEYxMTAsIlRBS0UgZmlsZSIscywwKTsK LQlpZiAoaXNkaXIocykpIHsKLQkgICAgcHJpbnRmKCI/Q2FuJ3QgZXhlY3V0ZSBhIGRpcmVjdG9y eSAtIFwiJXNcIlxuIiwgcyk7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotI2lmbmRlZiBOT1RBS0VB UkdTCi0JewotCSAgICBjaGFyICogcDsKLQkgICAgeCA9IHN0cmxlbihsaW5lKTsKLQkgICAgZGVi dWcoRjExMSwiVEFLRSBhcmdzIixsaW5lLHgpOwotCSAgICBwID0gbGluZSArIHggKyAxOwotCSAg ICBpZiAoKHkgPSBjbXR4dCgiT3B0aW9uYWwgYXJndW1lbnRzIiwiIiwmcyx4eHN0cmluZykpIDwg MCkKLQkgICAgICByZXR1cm4oeSk7Ci0JICAgIGlmICgqcykgewkJCS8qIEFyZ3MgZ2l2ZW4/ICov Ci0JCWNrc3RybmNweShwLHMsTElOQlVGU0laLXgtMSk7Ci0jaWZkZWYgWkZOUUZQCi0JCXpmbnFm cChsaW5lLFRNUEJVRlNJWix0bXBidWYpOwotCQlzID0gdG1wYnVmOwotI2Vsc2UKLQkJcyA9IGxp bmU7Ci0jZW5kaWYgLyogWkZOUUZQICovCi0JCWRlYnVnKEYxMTAsIlRBS0UgZmlsZW5hbWUiLHMs MCk7Ci0JCXggPSBzdHJsZW4ocyk7Ci0JCWRlYnVnKEYxMDEsIlRBS0UgbmV3IGxlbiIscyx4KTsK LQotI2lmZGVmIENPTU1FTlQKLS8qCi0gIFRoaXMgd2FzIGFkZGVkIGluIEMtS2VybWl0IDcuMCB0 byBhbGxvdyBhcmdzIHRvIGJlIHBhc3NlZCBmcm9tIHRoZSBUQUtFCi0gIGNvbW1hbmQgdG8gdGhl IGNvbW1hbmQgZmlsZS4gIEJ1dCBpdCBvdmVyd3JpdGVzIHRoZSBjdXJyZW50IGFyZ3VtZW50IHZl Y3RvciwKLSAgd2hpY2ggaXMgYXQgYmVzdCBzdXJwcmlzaW5nLCBhbmQgYXQgd29yc3QgdW5zYWZl LgotKi8KLQkJYWRkbWFjKCIlMCIscyk7CQkvKiBEZWZpbmUgJTAgPSBuYW1lIG9mIGZpbGUgKi8K LQkJdmFybmFtWzBdID0gJyUnOwotCQl2YXJuYW1bMl0gPSAnXDAnOwotCQlkZWJ1ZyhGMTEwLCJ0 YWtlIGFyZyAwIixzLDApOwotCQlkZWJ1ZyhGMTEwLCJ0YWtlIGFyZ3MiLHAsMCk7Ci0JCWZvciAo eSA9IDE7IHkgPCAxMDsgeSsrKSB7IC8qIENsZWFyIGN1cnJlbnQgYXJncyAlMS4uJTkgKi8KLQkJ ICAgIHZhcm5hbVsxXSA9IChjaGFyKSAoeSArICcwJyk7Ci0JCSAgICBkZWxtYWModmFybmFtLDAp OwotCQl9Ci0JCXh3b3JkcyhwLE1BWEFSR0xJU1QsTlVMTCwwKTsgLyogQXNzaWduIG5ldyBhcmdz ICovCi0JCWRlYnVnKEYxMTAsInRha2UgYXJncyIscCwwKTsKLSNlbHNlCi0vKgotICBUaGlzIG1l dGhvZCBpcyB1c2VkIGluIDguMC4gIElmIHRoZSBUQUtFIGNvbW1hbmQgaW5jbHVkZXMgYXJndW1l bnRzLCB3ZQotICBpbnNlcnQgYW4gaW50ZXJtZWRpYXRlIHRlbXBvcmFyeSBtYWNybyBiZXR3ZWVu IHRoZSBjdXJyZW50IGxldmVsOyB3ZSBwYXNzCi0gIHRoZSBhcmd1bWVudHMgdG8gdGhlIG1hY3Jv IGFuZCB0aGVuIHRoZSBtYWNybyBUQUtFcyB0aGUgY29tbWFuZCBmaWxlLgotICBJZiB0aGUgdXNl ciBDdHJsLUMncyBvdXQgb2YgdGhlIFRBS0UgZmlsZSwgc29tZSB0ZW1wb3JhcnkgbWFjcm8gZGVm aW5pdGlvbnMKLSAgYW5kIG90aGVyIHNtYWxsIG1hbGxvYydkIGJpdHMgbWlnaHQgYmUgbGVmdCBi ZWhpbmQuCi0qLwotCQl7Ci0JCSAgICBjaGFyICogcSA9IE5VTEw7Ci0JCSAgICBjaGFyICogciA9 IE5VTEw7Ci0JCSAgICBpbnQgaywgbTsKLQkJICAgIG0gPSBtYWNsdmw7Ci0JCSAgICBxID0gKGNo YXIgKiltYWxsb2MoeCsyNCk7Ci0JCSAgICBpZiAocSkgewotCQkJciA9IChjaGFyICopbWFsbG9j KHgrMjQpOwotCQkJaWYgKHIpIHsKLQkJCSAgICBzcHJpbnRmKHEsIl9maWxlWyVzXSglZCkiLHMs Y21kbHZsKTsgLyogc2FmZSAqLwotCQkJICAgIHNwcmludGYociwidGFrZSAlcyIscyk7IC8qIHNh ZmUgKi8KLQkJCSAgICBrID0gYWRkbWFjKHEscik7Ci0JCQkgICAgaWYgKGsgPiAtMSkgewotCQkJ CWRvZG8oayxwLDApOwotCQkJCXdoaWxlIChtYWNsdmwgPiBtKSB7Ci0JCQkJICAgIHNzdGF0ZSA9 IChDSEFSKSBwYXJzZXIoMSk7Ci0JCQkJICAgIGlmIChzc3RhdGUpIHByb3RvKCk7Ci0JCQkJfQot CQkJICAgIH0KLQkJCSAgICBrID0gZGVsbWFjKHEsMCk7Ci0JCQkgICAgZnJlZShxKTsKLQkJCSAg ICBmcmVlKHIpOwotCQkJICAgIHJldHVybihzdWNjZXNzKTsKLQkJCX0KLQkJICAgIH0KLQkJfQot CQlyZXR1cm4oc3VjY2VzcyA9IDApOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkgICAgfQotCX0K LSNlbHNlCi0JaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Ci0jZW5kaWYgLyogTk9U QUtFQVJHUyAqLwotCXJldHVybihzdWNjZXNzID0gZG90YWtlKGxpbmUpKTsKLSAgICB9Ci0KLSNp Zm5kZWYgTk9MT0NBTAotI2lmZGVmIE9TMgotICAgIGlmIChjeCA9PSBYWFZJRVcpIHsJCQkvKiBW SUVXIE9ubHkgVGVybWluYWwgbW9kZSAqLwotCXZpZXdvbmx5ID0gVFJVRTsKLQlzdWNjZXNzID0g ZG9jb25lY3QoMCwgMCk7Ci0Jdmlld29ubHkgPSBGQUxTRTsKLQlyZXR1cm4gc3VjY2VzczsKLSAg ICB9Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBORVRDT05OCi0gICAgaWYgKGN4ID09IFhY VEVMIHx8IGN4ID09IFhYSUtTRCkgewkvKiBURUxORVQgKi8KLQlpbnQgeCx6OwotI2lmZGVmIE9T MgotICAgIGlmICghdGNwX2F2YWlsKSB7Ci0gICAgICAgIHByaW50ZigiP1NvcnJ5LCBlaXRoZXIg VENQL0lQIGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBzeXN0ZW0gb3JcblwKLW5lY2Vzc2FyeSBE TExzIGRpZCBub3QgbG9hZC4gIFVzZSBTSE9XIE5FVFdPUksgdG8gY2hlY2sgbmV0d29yayBzdGF0 dXMuXG4iKTsKLSAgICAgICAgc3VjY2VzcyA9IDA7Ci0gICAgICAgIHJldHVybigtOSk7Ci0gICAg fSBlbHNlCi0jZW5kaWYgLyogT1MyICovCi0gICAgICB7Ci0JICB4ID0gbmV0dHlwZTsJCQkvKiBT YXZlIG5ldCB0eXBlIGluIGNhc2Ugb2YgZmFpbHVyZSAqLwotCSAgeiA9IHR0bnByb3RvOwkJCS8q IFNhdmUgcHJvdG9jb2wgaW4gY2FzZSBvZiBmYWlsdXJlICovCi0JICBuZXR0eXBlID0gTkVUX1RD UEI7Ci0JICB0dG5wcm90byA9IChjeCA9PSBYWFRFTCkgPyBOUF9URUxORVQgOiBOUF9LRVJNSVQ7 Ci0JICBpZiAoKHkgPSBzZXRsaW4oWFlIT1NULDAsMSkpIDw9IDApIHsKLSAgICAgICAgICAgICAg bmV0dHlwZSA9IHg7CQkvKiBGYWlsZWQsIHJlc3RvcmUgbmV0IHR5cGUuICovCi0gICAgICAgICAg ICAgIHR0bnByb3RvID0gejsJCS8qIGFuZCBwcm90b2NvbCAqLwotICAgICAgICAgICAgICBzdWNj ZXNzID0gMDsKLQkgIH0KLQkgIGRpZHNldGxpbisrOwotICAgICAgICB9Ci0JcmV0dXJuKHkpOwot ICAgIH0KLQotI2lmbmRlZiBQVFlPUlBJUEUKLSNpZmRlZiBORVRDTUQKLSNkZWZpbmUgUFRZT1JQ SVBFCi0jZWxzZQotI2lmZGVmIE5FVFBUWQotI2RlZmluZSBQVFlPUlBJUEUKLSNlbmRpZiAvKiBO RVRQVFkgKi8KLSNlbmRpZiAvKiBORVRDTUQgKi8KLSNlbmRpZiAvKiBQVFlPUlBJUEUgKi8KLQot I2lmZGVmIFBUWU9SUElQRQotICAgIGlmIChjeCA9PSBYWFBJUEUgfHwgY3ggPT0gWFhQVFkpIHsJ LyogUElQRSBvciBQVFkgKi8KLQlpbnQgeDsKLQlleHRlcm4gaW50IG5ldHNhdmU7Ci0JeCA9IG5l dHR5cGU7CQkJLyogU2F2ZSBuZXQgdHlwZSBpbiBjYXNlIG9mIGZhaWx1cmUgKi8KLQluZXR0eXBl ID0gKGN4ID09IFhYUElQRSkgPyBORVRfQ01EIDogTkVUX1BUWTsKLQlpZiAoKHkgPSBzZXRsaW4o WFlIT1NULDAsMSkpIDwgMCkgewotCSAgICBuZXR0eXBlID0geDsJCS8qIEZhaWxlZCwgcmVzdG9y ZSBuZXQgdHlwZS4gKi8KLQkgICAgdHRucHJvdG8gPSB6OwkJLyogYW5kIHByb3RvY29sICovCi0J ICAgIHN1Y2Nlc3MgPSAwOwotCX0KLQlkaWRzZXRsaW4rKzsKLQluZXRzYXZlID0geDsKLQlyZXR1 cm4oeSk7Ci0gICAgfQotI2VuZGlmIC8qIFBUWU9SUElQRSAqLwotCi0jaWZkZWYgQU5ZU1NICi0g ICAgaWYgKGN4ID09IFhYU1NIKSB7CQkJLyogU1NIIChTZWN1cmUgU2hlbGwpICovCi0JZXh0ZXJu IGludCBuZXRzYXZlOwotI2lmZGVmIFNTSEJVSUxUSU4KLQlpbnQgaywgeCwgaGF2ZWhvc3QgPSAw LCB0cmlwcyA9IDA7Ci0gICAgICAgIGludCAgICB0bXB2ZXIgPSAtMSwgdG1weGZ3ID0gLTE7Ci0j aWZuZGVmIFNTSFRFU1QKLSAgICAgICAgZXh0ZXJuIGludCBzbF9zc2hfeGZ3LCBzbF9zc2hfeGZ3 X3NhdmVkOwotICAgICAgICBleHRlcm4gaW50IHNsX3NzaF92ZXIsIHNsX3NzaF92ZXJfc2F2ZWQ7 Ci0jZW5kaWYgLyogU1NIVEVTVCAqLwotICAgICAgICBleHRlcm4gaW50IG1kbXR5cCwgbWRtc2F2 LCBjeHR5cGUsIHNsX3VpZF9zYXZlZDsKLSAgICAgICAgZXh0ZXJuIGNoYXIgKiBzbG1zZzsKLQll eHRlcm4gY2hhciB1aWRidWZbXSwgc2xfdWlkYnVmW107Ci0gICAgICAgIGV4dGVybiBjaGFyIHB3 YnVmW10sICogZ19wc3dkOwotICAgICAgICBleHRlcm4gaW50IHB3ZmxnLCBwd2NyeXB0LCBnX3Bm bGcsIGdfcGNwdCwgbm9sb2NhbDsKLQlzdHJ1Y3QgRkRCIHN3LCBrdywgZmw7Ci0KLSAgICAgICAg aWYgKHNzaF90bXBzdHIpCi0JICBtZW1zZXQoc3NoX3RtcHN0ciwwLHN0cmxlbihzc2hfdG1wc3Ry KSk7Ci0gICAgICAgIG1ha2VzdHIoJnNzaF90bXBzdHIsTlVMTCk7Ci0gICAgICAgIG1ha2VzdHIo JnNzaF90bXB1aWQsTlVMTCk7Ci0gICAgICAgIG1ha2VzdHIoJnNzaF90bXBjbWQsTlVMTCk7Ci0g ICAgICAgIG1ha2VzdHIoJnNzaF90bXBwb3J0LE5VTEwpOwotCi0JY21mZGJpKCZrdywJCQkvKiAx c3QgRkRCIC0gY29tbWFuZHMgKi8KLQkgICAgICAgX0NNS0VZLAkJCS8qIGZjb2RlICovCi0JICAg ICAgICJob3N0IFsgcG9ydCBdLFxuIG9yIGFjdGlvbiIsCS8qIGhscG1zZyAqLwotCSAgICAgICAi IiwJCQkvKiBkZWZhdWx0ICovCi0JICAgICAgICIiLAkJCS8qIGFkZHRsIHN0cmluZyBkYXRhICov Ci0JICAgICAgIG5zc2hjbWQsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICov Ci0JICAgICAgIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDAgPSBrZXl3b3JkICovCi0J ICAgICAgIHh4c3RyaW5nLAkJLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotCSAgICAgICBzc2hr d3RhYiwJCS8qIEtleXdvcmQgdGFibGUgKi8KLQkgICAgICAgJmZsCQkJLyogUG9pbnRlciB0byBu ZXh0IEZEQiAqLwotCSAgICAgICApOwotCWNtZmRiaSgmZmwsCQkJLyogSG9zdCAqLwotCSAgICAg ICBfQ01GTEQsCQkJLyogZmNvZGUgKi8KLQkgICAgICAgIiIsCQkJLyogaGxwbXNnICovCi0JICAg ICAgICIiLAkJCS8qIGRlZmF1bHQgKi8KLQkgICAgICAgIiIsCQkJLyogYWRkdGwgc3RyaW5nIGRh dGEgKi8KLQkgICAgICAgMCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLwotCSAgICAgICAw LAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCi0JICAgICAgIHh4c3RyaW5nLAotCSAgICAg ICBOVUxMLAotCSAgICAgICBOVUxMCi0JICAgICAgICk7Ci0KLQl4ID0gY21mZGIoJmt3KTsKLQlp ZiAoeCA9PSAtMykgewotCSAgICBwcmludGYoIj9zc2ggd2hhdD9cbiIpOwotCSAgICByZXR1cm4o LTkpOwotCX0KLQlpZiAoeCA8IDApCi0JICByZXR1cm4oeCk7Ci0JaGF2ZWhvc3QgPSAwOwotCWlm IChjbXJlc3VsdC5mY29kZSA9PSBfQ01GTEQpIHsKLQkgICAgaGF2ZWhvc3QgPSAxOwotCSAgICBj a3N0cm5jcHkobGluZSxjbXJlc3VsdC5zcmVzdWx0LExJTkJVRlNJWik7IC8qIEhvc3RuYW1lICov Ci0JICAgIGNtcmVzdWx0Lm5yZXN1bHQgPSBYU1NIX09QTjsKLQl9Ci0Jc3dpdGNoIChjbXJlc3Vs dC5ucmVzdWx0KSB7CS8qIFNTSCBrZXl3b3JkICovCi0JICBjYXNlIFhTU0hfT1BOOgkJLyogU1NI IE9QRU4gKi8KLQkgICAgaWYgKCFoYXZlaG9zdCkgewotCQlpZiAoKHggPSBjbWZsZCgiSG9zdCIs IiIsJnMseHhzdHJpbmcpKSA8IDApCi0JCSAgcmV0dXJuKHgpOwotCQlja3N0cm5jcHkobGluZSxz LExJTkJVRlNJWik7Ci0JICAgIH0KLQkgICAgLyogUGFyc2UgWyBwb3J0IF0gWyBzd2l0Y2hlcyBd ICovCi0JICAgIGNtZmRiaSgma3csCQkJLyogU3dpdGNoZXMgKi8KLQkJICAgX0NNS0VZLAotCQkg ICAiUG9ydCBudW1iZXIgb3Igc2VydmljZSBuYW1lLFxub3Igc3dpdGNoIiwKLQkJICAgIiIsCi0J CSAgICIiLAotCQkgICBuc3Nob3Buc3csCi0JCSAgIDQsCi0JCSAgIHh4c3RyaW5nLAotCQkgICBz c2hvcG5zdywKLQkJICAgJmZsCi0JCSAgICk7Ci0JICAgIGNtZmRiaSgmZmwsCQkJLyogUG9ydCBu dW1iZXIgb3Igc2VydmljZSBuYW1lICovCi0JCSAgIF9DTUZMRCwKLQkJICAgIiIsCi0JCSAgICIi LAotCQkgICAiIiwKLQkJICAgMCwKLQkJICAgMCwKLQkJICAgeHhzdHJpbmcsCi0JCSAgIE5VTEws Ci0JCSAgIE5VTEwKLQkJICAgKTsKLQkgICAgdHJpcHMgPSAwOwkJCS8qIEV4cGxhaW5lZCBiZWxv dyAqLwotCSAgICB3aGlsZSAoMSkgewkJCS8qIFBhcnNlIHBvcnQgYW5kIHN3aXRjaGVzICovCi0J CXggPSBjbWZkYigma3cpOwkJLyogR2V0IGEgZmllbGQgKi8KLQkJaWYgKHggPT0gLTMpCQkvKiBV c2VyIHR5cGVkIENSIHNvIHF1aXQgZnJvbSBsb29wICovCi0JCSAgYnJlYWs7Ci0JCWlmICh4IDwg MCkJCS8qIE90aGVyIHBhcnNlIGVycm9yLCBwYXNzIGl0IGJhY2sgKi8KLQkJICByZXR1cm4oeCk7 Ci0JCXN3aXRjaCAoY21yZXN1bHQuZmNvZGUpIHsgLyogRmllbGQgb3IgS2V5d29yZD8gKi8KLSAg ICAgICAgICAgICAgICAgIGNhc2UgX0NNRkxEOgkJICAvKiBGaWVsZCAqLwotICAgICAgICAgICAg ICAgICAgICBtYWtlc3RyKCZzc2hfdG1wcG9ydCxjbXJlc3VsdC5zcmVzdWx0KTsKLQkJICAgIGJy ZWFrOwotCQkgIGNhc2UgX0NNS0VZOgkJLyogS2V5d29yZCAqLwotCQkgICAgc3dpdGNoIChjbXJl c3VsdC5ucmVzdWx0KSB7CS8qIFdoaWNoIG9uZT8gKi8KLQkJICAgICAgY2FzZSBTU0hTV19VU1I6 CSAgICAgICAgLyogL1VTRVI6ICovCi0JCQlpZiAoIWNtZ2JyaygpKSB7Ci0JCQkgICAgcHJpbnRm KCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOwotCQkJICAgIHJldHVybigt OSk7Ci0JCQl9Ci0JCQlpZiAoKHkgPSBjbWZsZCgiVXNlcm5hbWUiLCIiLCZzLHh4c3RyaW5nKSkg PCAwKQotCQkJICByZXR1cm4oeSk7Ci0JCQlzID0gYnJzdHJpcChzKTsKLQkJCW1ha2VzdHIoJnNz aF90bXB1aWQscyk7Ci0JCQlicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNTSFNX X1BXRDoKLQkJCWlmICghY21nYnJrKCkpIHsKLQkJCSAgICBwcmludGYoIj9UaGlzIHN3aXRjaCBy ZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7Ci0JCQkgICAgcmV0dXJuKC05KTsKLQkJCX0KLQkJCWRl Ym9rID0gMDsKLQkJCWlmICgoeCA9IGNtZmxkKCJQYXNzd29yZCIsIiIsJnMseHhzdHJpbmcpKSA8 IDApIHsKLQkJCSAgICBpZiAoeCA9PSAtMykgewotCQkJCW1ha2VzdHIoJnNzaF90bXBzdHIsIiIp OwotCQkJICAgIH0gZWxzZSB7Ci0JCQkJcmV0dXJuKHgpOwotCQkJICAgIH0KLQkJCX0gZWxzZSB7 Ci0JCQkgICAgcyA9IGJyc3RyaXAocyk7Ci0JCQkgICAgaWYgKCh4ID0gKGludClzdHJsZW4ocykp ID4gUFdCVUZMKSB7Ci0JCQkJbWFrZXN0cigmc2xtc2csIkludGVybmFsIGVycm9yIik7Ci0JCQkJ cHJpbnRmKCI/U29ycnksIHRvbyBsb25nIC0gbWF4ID0gJWRcbiIsUFdCVUZMKTsKLQkJCQlyZXR1 cm4oLTkpOwotCQkJICAgIH0KLQkJCSAgICBtYWtlc3RyKCZzc2hfdG1wc3RyLHMpOwotCQkJfQot CQkJYnJlYWs7Ci0KLQkJICAgICAgY2FzZSBTU0hTV19WRVI6Ci0JCQlpZiAoKHggPSBjbW51bSgi TnVtYmVyIiwiIiwxMCwmeix4eHN0cmluZykpIDwgMCkKLQkJCSAgcmV0dXJuKHgpOwotCQkJaWYg KHogPCAxIHx8IHogPiAyKSB7Ci0JCQkgICAgcHJpbnRmKCI/T3V0IG9mIHJhbmdlOiAlZFxuIix6 KTsKLQkJCSAgICByZXR1cm4oLTkpOwotCQkJfQotICAgICAgICAgICAgICAgICAgICAgICAgdG1w dmVyID0gejsKLQkJCWJyZWFrOwotCQkgICAgICBjYXNlIFNTSFNXX0NNRDoKLQkJICAgICAgY2Fz ZSBTU0hTV19TVUI6Ci0JCQlpZiAoKHggPSBjbWZsZCgiVGV4dCIsIiIsJnMseHhzdHJpbmcpKSA8 IDApCi0JCQkgIHJldHVybih4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNz aF90bXBjbWQscyk7Ci0JCQlzc2hfY2FzID0gKGNtcmVzdWx0Lm5yZXN1bHQgPT0gU1NIU1dfU1VC KTsKLQkJCWJyZWFrOwotCQkgICAgICBjYXNlIFNTSFNXX1gxMToKLQkJCWlmICgoeCA9IGNta2V5 KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykpIDwgMCkKLQkJCSAgcmV0dXJuKHgpOwotICAgICAg ICAgICAgICAgICAgICAgICAgdG1weGZ3ID0geDsKLQkJCWJyZWFrOwotCQkgICAgICBkZWZhdWx0 OgotCQkgICAgICAgIHJldHVybigtMik7Ci0JCSAgICB9Ci0JCX0KLQkJaWYgKHRyaXBzKysgPT0g MCkgewkvKiBBZnRlciBmaXJzdCB0aW1lIHRocm91Z2ggKi8KLQkJICAgIGNtZmRiaSgma3csCQkv KiBvbmx5IHBhcnNlIHN3aXRjaGVzLCBub3QgcG9ydC4gKi8KLQkJCSAgIF9DTUtFWSwKLQkJCSAg ICJTd2l0Y2giLAotCQkJICAgIiIsCi0JCQkgICAiIiwKLQkJCSAgIG5zc2hvcG5zdywKLQkJCSAg IDQsCi0JCQkgICB4eHN0cmluZywKLQkJCSAgIHNzaG9wbnN3LAotCQkJICAgTlVMTAotCQkJICAg KTsKLQkJfQotCSAgICB9Ci0JICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkJLyogR2V0IGNvbmZp cm1hdGlvbiAqLwotCSAgICAgIHJldHVybih4KTsKLSAgICAgICAgICAgIGlmIChjbHNrY29ubngo MSkgPCAwKSB7CS8qIENsb3NlIGN1cnJlbnQgS2VybWl0IGNvbm5lY3Rpb24gKi8KLSAgICAgICAg ICAgICAgaWYgKCBzc2hfdG1wc3RyICkgewotICAgICAgICAgICAgICAgICAgbWVtc2V0KHNzaF90 bXBzdHIsMCxzdHJsZW4oc3NoX3RtcHN0cikpOwotICAgICAgICAgICAgICAgICAgbWFrZXN0cigm c3NoX3RtcHN0cixOVUxMKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDApOwotICAgICAgICAgICAgfQotCSAgICBtYWtlc3RyKCZzc2hfaHN0LGxpbmUp OwkvKiBTdGFzaCBldmVyeXRoaW5nICovCi0JICAgIGlmIChzc2hfdG1wdWlkKSB7Ci0gICAgICAg ICAgICAgICAgaWYgKCFzbF91aWRfc2F2ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgY2tzdHJu Y3B5KHNsX3VpZGJ1Zix1aWRidWYsVUlEQlVGTEVOKTsKLSAgICAgICAgICAgICAgICAgICAgc2xf dWlkX3NhdmVkID0gMTsKLSAgICAgICAgICAgICAgICB9Ci0JCWNrc3RybmNweSh1aWRidWYsc3No X3RtcHVpZCxVSURCVUZMRU4pOwotCQltYWtlc3RyKCZzc2hfdG1wdWlkLE5VTEwpOwotCSAgICB9 Ci0gICAgICAgICAgICBpZiAoc3NoX3RtcHBvcnQpIHsKLSAgICAgICAgICAgICAgICBtYWtlc3Ry KCZzc2hfcHJ0LHNzaF90bXBwb3J0KTsKLSAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2hfdG1w cG9ydCxOVUxMKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG1ha2VzdHIo JnNzaF9wcnQsTlVMTCk7Ci0KLSAgICAgICAgICAgIGlmIChzc2hfdG1wY21kKSB7Ci0gICAgICAg ICAgICAgICAgbWFrZXN0cigmc3NoX2NtZCxicnN0cmlwKHNzaF90bXBjbWQpKTsKLSAgICAgICAg ICAgICAgICBtYWtlc3RyKCZzc2hfdG1wY21kLE5VTEwpOwotICAgICAgICAgICAgfSBlbHNlCi0g ICAgICAgICAgICAgICAgbWFrZXN0cigmc3NoX2NtZCxOVUxMKTsKLQotICAgICAgICAgICAgaWYg KHRtcHZlciA+IC0xKSB7Ci0jaWZuZGVmIFNTSFRFU1QKLSAgICAgICAgICAgICAgICBpZiAoIXNs X3NzaF92ZXJfc2F2ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xfc3NoX3ZlciA9IHNzaF92 ZXI7Ci0gICAgICAgICAgICAgICAgICAgIHNsX3NzaF92ZXJfc2F2ZWQgPSAxOwotICAgICAgICAg ICAgICAgIH0KLSNlbmRpZiAvKiBTU0hURVNUICovCi0gICAgICAgICAgICAgICAgc3NoX3ZlciA9 IHRtcHZlcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0bXB4ZncgPiAtMSkgewot I2lmbmRlZiBTU0hURVNUCi0gICAgICAgICAgICAgICAgaWYgKCFzbF9zc2hfeGZ3X3NhdmVkKSB7 Ci0gICAgICAgICAgICAgICAgICAgIHNsX3NzaF94ZncgPSBzc2hfeGZ3OwotICAgICAgICAgICAg ICAgICAgICBzbF9zc2hfeGZ3X3NhdmVkID0gMTsKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYg LyogU1NIVEVTVCAqLwotICAgICAgICAgICAgICAgIHNzaF94ZncgPSB0bXB4Znc7Ci0gICAgICAg ICAgICB9Ci0JICAgIGlmIChzc2hfdG1wc3RyKSB7Ci0JCWlmIChzc2hfdG1wc3RyWzBdKSB7Ci0J CSAgICBja3N0cm5jcHkocHdidWYsc3NoX3RtcHN0cixQV0JVRkwrMSk7Ci0JCSAgICBwd2ZsZyA9 IDE7Ci0JCSAgICBwd2NyeXB0ID0gMDsKLQkJfSBlbHNlCi0JCSAgcHdmbGcgPSAwOwotCQltYWtl c3RyKCZzc2hfdG1wc3RyLE5VTEwpOwotCSAgICB9Ci0JICAgIG5ldHR5cGUgPSBORVRfU1NIOwot CSAgICBpZiAobWRtc2F2IDwgMCkKLQkgICAgICBtZG1zYXYgPSBtZG10eXA7Ci0JICAgIG1kbXR5 cCA9IC1uZXR0eXBlOwotCSAgICB4ID0gMTsKLQotI2lmbmRlZiBOT1NQTAotICAgICAgICAgICAg bWFrZXN0cigmZ19wc3dkLHB3YnVmKTsgICAgICAgICAgICAgLyogU2F2ZSBnbG9iYWwgcHdidWYg Ki8KLSAgICAgICAgICAgIGdfcGZsZyA9IHB3ZmxnOyAgICAgICAgICAgICAgICAgICAgIC8qIGFu ZCBmbGFnICovCi0gICAgICAgICAgICBnX3BjcHQgPSBwd2NyeXB0OwotI2VuZGlmIC8qIE5PU1BM ICovCi0KLQkgICAgLyogTGluZSBwYXJhbWV0ZXIgdG8gdHRvcGVuKCkgaXMgaWdub3JlZCAqLwot CSAgICBkZWJ1ZyhGMTEwLCJTU0ggbGluZSIsbGluZSwwKTsKLQkgICAgayA9IHR0b3BlbihsaW5l LCZ4LG1kbXR5cCwgMCk7Ci0JICAgIGlmIChrIDwgMCkgewotCQlwcmludGYoIj9VbmFibGUgdG8g Y29ubmVjdCB0byAlc1xuIixzc2hfaHN0KTsKLQkJbWRtdHlwID0gbWRtc2F2OwotICAgICAgICAg ICAgICAgIHNscmVzdG9yKCk7Ci0JCXJldHVybihzdWNjZXNzID0gMCk7Ci0JICAgIH0KLQkgICAg ZHVwbGV4ID0gMDsgICAgICAgICAgICAgLyogUmVtb3RlIGVjaG8gKi8KLQkgICAgY2tzdHJuY3B5 KHR0bmFtZSxsaW5lLFRUTkFNTEVOKTsgLyogUmVjb3JkIHRoZSBjb21tYW5kICovCi0JICAgIGRl YnVnKEYxMTAsInNzaCB0dG5hbWUiLHR0bmFtZSwwKTsKLQkgICAgbWFrZXN0cigmc2xtc2csTlVM TCk7CS8qIE5vIFNFVCBMSU5FIGVycm9yIG1lc3NhZ2UgKi8KLQkgICAgY3h0eXBlID0gQ1hUX1NT SDsKLSNpZm5kZWYgTk9ESUFMCi0JICAgIGRpYWxzdGEgPSBESUFfVU5LOwotI2VuZGlmIC8qIE5P RElBTCAqLwotCSAgICBzdWNjZXNzID0gMTsJCS8qIFNFVCBMSU5FIHN1Y2NlZWRlZCAqLwotCSAg ICBuZXR3b3JrID0gMTsJCS8qIE5ldHdvcmsgY29ubmVjdGlvbiAobm90IHNlcmlhbCkgKi8KLQkg ICAgbG9jYWwgPSAxOwkJCS8qIExvY2FsIG1vZGUgKG5vdCByZW1vdGUpICovCi0JICAgIGlmICgo cmVsaWFibGUgIT0gU0VUX09GRiB8fCAhc2V0cmVsaWFibGUpKQotCSAgICAgIHJlbGlhYmxlID0g U0VUX09OOwkvKiBUcmFuc3BvcnQgaXMgcmVsaWFibGUgZW5kIHRvIGVuZCAqLwotI2lmZGVmIE9T MgotICAgICAgICAgICAgRGlhbGVyU2VuZChPUFRfS0VSTUlUX0NPTk5FQ1QsIDApOwotI2VuZGlm IC8qIE9TMiAqLwotCSAgICBzZXRmbG93KCk7CQkJLyogU2V0IGFwcHJvcHJpYXRlIGZsb3cgY29u dHJvbCAqLwotCi0JICAgIGhhdmVsaW5lID0gMTsKLSNpZmRlZiBDS0xPR0RJQUwKLSNpZmRlZiBO RVRDT05OCi0JICAgIGRvbG9nbmV0KCk7Ci0jZW5kaWYgLyogTkVUQ09OTiAqLwotI2VuZGlmIC8q IENLTE9HRElBTCAqLwotCi0jaWZuZGVmIE5PU1BMCi0JICAgIGlmIChsb2NhbCkgewotCQlpZiAo bm1hYykgewkJLyogQW55IG1hY3JvcyBkZWZpbmVkPyAqLwotCQkgICAgaW50IGs7CQkvKiBZZXMg Ki8KLQkJICAgIGsgPSBtbG9vayhtYWN0YWIsIm9uX29wZW4iLG5tYWMpOyAvKiBMb29rIHRoaXMg dXAgKi8KLQkJICAgIGlmIChrID49IDApIHsJICAgICAgICAgICAgICAvKiBJZiBmb3VuZCwgKi8K LQkJCWlmIChkb2RvKGssc3NoX2hzdCwwKSA+IC0xKSAgIC8qIHNldCBpdCB1cCwgKi8KLQkJCSAg cGFyc2VyKDEpOwkJICAgICAgLyogYW5kIGV4ZWN1dGUgaXQgKi8KLQkJICAgIH0KLQkJfQotCSAg ICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZmRlZiBMT0NVUwkJCi0JICAgIGlmIChhdXRvbG9j dXMpCi0JCXNldGxvY3VzKDEsMSk7Ci0jZW5kaWYgLyogTE9DVVMgKi8KLQotCS8qIENvbW1hbmQg d2FzIGNvbmZpcm1lZCBzbyB3ZSBjYW4gcHJlLXBvcCBjb21tYW5kIGxldmVsLiAqLwotCS8qIFRo aXMgaXMgc28gQ09OTkVDVCBtb2R1bGUgd29uJ3QgdGhpbmsgd2UncmUgZXhlY3V0aW5nIGEgKi8K LQkvKiBzY3JpcHQgaWYgQ09OTkVDVCB3YXMgdGhlIGZpbmFsIGNvbW1hbmQgaW4gdGhlIHNjcmlw dC4gKi8KLQkgICAgaWYgKGNtZGx2bCA+IDApCi0JICAgICAgcHJlcG9wKCk7Ci0JICAgIHN1Y2Nl c3MgPSBkb2NvbmVjdCgwLGNtZGx2bCA9PSAwID8gMSA6IDApOwotCSAgICBpZiAodHRjaGsoKSA8 IDApCi0JICAgICAgZG9sb2dlbmQoKTsKLQkgICAgcmV0dXJuKHN1Y2Nlc3MpOwotCi0JICBjYXNl IFhTU0hfQ0xSOgotCSAgICBpZiAoKHkgPSBjbWtleShzc2hjbHIsbnNzaGNsciwiIiwiIiwgeHhz dHJpbmcpKSA8IDApIHsKLQkgICAgICAgIGlmICh5ID09IC0zKSB7Ci0JCSAgICBwcmludGYoIj9j bGVhciB3aGF0P1xuIik7Ci0JCSAgICByZXR1cm4oLTkpOwotCQl9Ci0JICAgICAgICByZXR1cm4o eSk7Ci0JICAgIH0KLQkgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotCSAgICAgIHJldHVybih4 KTsKLQkgICAgc3dpdGNoICh5KSB7Ci0JICAgICAgY2FzZSBTU0hDX0xQRjoKLSAgICAgICAgICAg ICAgICBzc2hfcGZfbGNsX24gPSAwOwotCQlicmVhazsKLQkgICAgICBjYXNlIFNTSENfUlBGOgot CQlzc2hfcGZfcm10X24gPSAwOwotCQlicmVhazsKLQkgICAgICBkZWZhdWx0OgotCQlyZXR1cm4o LTIpOwotCSAgICB9Ci0gICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwkvKiBvciB3aGF0 ZXZlciAqLwotCi0JICBjYXNlIFhTU0hfQUdUOiB7CQkvKiBTU0ggQUdFTlQgKi8KLQkgICAgICBp bnQgZG9lYWNoID0gMDsKLQkgICAgICBpZiAoKHkgPSBjbWtleShzc2hhZ2VudCxuc3NoYWdlbnQs IiIsIiIseHhzdHJpbmcpKSA8IDApCi0JCXJldHVybih5KTsKLQkgICAgICBzd2l0Y2ggKHkpIHsK LQkJY2FzZSBTU0hBX0FERDoJCS8qIFNTSCBBR0VOVCBBREQgLi4uICovCi0JCSAgaWYgKCh4ID0g Y21pZmkoIklkZW50aXR5IGZpbGUiLCIiLCZzLCZ5LHh4c3RyaW5nKSkgPCAwKSB7Ci0jaWZuZGVm IFNTSFRFU1QKLQkJICAgICAgaWYgKHggPT0gLTMpCS8qIE5vIG5hbWUgZ2l2ZW4gKi8KLQkJCWRv ZWFjaCA9IDE7CS8qIHNvIGRvIHRoZW0gYWxsICovCi0JCSAgICAgIGVsc2UKLSNlbmRpZiAvKiBT U0hURVNUICovCi0JCQlyZXR1cm4oeCk7Ci0JCSAgfQotCQkgIGNrc3RybmNweShsaW5lLHMsTElO QlVGU0laKTsKLQkJICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCi0JCSAgICByZXR1cm4oeCk7Ci0j aWZkZWYgU1NIVEVTVAotCQkgIHggPSAwOwotI2Vsc2UKLQkJICBpZiAoZG9lYWNoKSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgaW50IGk7Ci0gICAgICAgICAgICAgICAgICAgICAgeCA9IDA7Ci0g ICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNzaF9pZGZfbjsgaSsrKQotCQkJ eCArPSBzc2hfYWdlbnRfYWRkX2ZpbGUoc3NoX2lkZltpXSk7Ci0JCSAgfSBlbHNlCi0JCSAgICB4 ID0gc3NoX2FnZW50X2FkZF9maWxlKGxpbmUpOwotI2VuZGlmIC8qIFNTSFRFU1QgKi8KLQkJICBy ZXR1cm4oc3VjY2VzcyA9ICh4ID09IDApKTsKLQotCQljYXNlIFNTSEFfREVMOiB7CS8qIFNTSCBB R0VOVCBERUxFVEUgLi4uICovCi0JCSAgICBpbnQgZG9hbGwgPSAwOwotCQkgICAgaWYgKCh4ID0g Y21pZmkoIklkZW50aXR5IGZpbGUiLCIiLCZzLCZ5LHh4c3RyaW5nKSkgPCAwKSB7Ci0jaWZuZGVm IFNTSFRFU1QKLQkJCWlmICh4ID09IC0zKQkvKiBObyBuYW1lIGdpdmVuICovCi0JCQkgIGRvYWxs ID0gMTsJLyogc28gZG8gdGhlbSBhbGwgKi8KLQkJCWVsc2UKLSNlbmRpZiAvKiBTU0hURVNUICov Ci0JCQkgIHJldHVybih4KTsKLQkJICAgIH0KLQkJICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVG U0laKTsKLQkJICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLQkJICAgICAgcmV0dXJuKHgpOwot I2lmZGVmIFNTSFRFU1QKLQkJICAgIHggPSAwOwotI2Vsc2UKLQkJICAgIGlmIChkb2FsbCkKLQkJ ICAgICAgeCA9IHNzaF9hZ2VudF9kZWxldGVfYWxsKCk7Ci0JCSAgICBlbHNlCi0JCSAgICAgIHgg PSBzc2hfYWdlbnRfZGVsZXRlX2ZpbGUobGluZSk7Ci0jZW5kaWYgLyogU1NIVEVTVCAqLwotCQkg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAoeCA9PSAwKSk7Ci0JCX0KLQkJY2FzZSBTU0hBX0xTVDogewot CQkgICAgaW50IGZpbmdlcnByaW50ID0gMDsKLQkJICAgIGlmICgoeSA9IGNtc3dpKHNzaGFndHN3 LG5zc2hhZ3RzdywiIiwiIix4eHN0cmluZykpIDwgMCkgewotCQkJaWYgKHkgIT0gLTMpCi0JCQkg IHJldHVybih5KTsKLQkJICAgIH0gZWxzZSBpZiAoY21nYnJrKCkgPiBTUCkgewotCQkJcHJpbnRm KCI/VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBhbiBhcmd1bWVudFxuIik7Ci0JCQlyZXR1cm4o LTkpOwotCQkgICAgfSBlbHNlIGlmICh5ID09IFNTSEFTV19GUCkgewotCQkJZmluZ2VycHJpbnQg PSAxOwotCQkgICAgfQotCQkgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotCQkgICAgICByZXR1 cm4oeCk7Ci0jaWZkZWYgU1NIVEVTVAotCQkgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSNlbHNl Ci0JCSAgICByZXR1cm4oc3VjY2VzcyA9Ci0JCQkgICAoc3NoX2FnZW50X2xpc3RfaWRlbnRpdGll cyhmaW5nZXJwcmludCkgPT0gMCkpOwotI2VuZGlmIC8qIFNTSFRFU1QgKi8KLQkJfQotCQlkZWZh dWx0OgotCQkgIHJldHVybigtMik7Ci0JICAgICAgfQotCSAgfQotCSAgY2FzZSBYU1NIX0FERDog ewkJLyogU1NIIEFERCAqLwotCSAgICAgIC8qIHNzaCBhZGQgeyBsb2NhbCwgcmVtb3RlIH0gcG9y dCBob3N0IHBvcnQgKi8KLQkgICAgICBpbnQgY3gsIGksIGosIGs7Ci0JICAgICAgY2hhciAqIGg7 Ci0JICAgICAgaWYgKChjeCA9IGNta2V5KGFkZGZ3ZCxuYWRkZndkLCIiLCIiLCB4eHN0cmluZykp IDwgMCkKLQkJcmV0dXJuKGN4KTsKLQkgICAgICBpZiAoKHggPSBjbW51bSgoY3ggPT0gU1NIRl9M Q0wpID8KLQkJCSAgICAgIkxvY2FsIHBvcnQgbnVtYmVyIiA6ICJSZW1vdGUgcG9ydCBudW1iZXIi LAotCQkJICAgICAiIiwxMCwmaix4eHN0cmluZykpIDwgMCkKLQkJcmV0dXJuKHgpOwotCSAgICAg IGlmICgoeCA9IGNtZmxkKCJIb3N0IiwiIiwmcyx4eHN0cmluZykpIDwgMCkKLQkJcmV0dXJuKHgp OwotCSAgICAgIG1ha2VzdHIoJmgscyk7Ci0JICAgICAgaWYgKCh4ID0gY21udW0oIlBvcnQiLCIi LDEwLCZrLHh4c3RyaW5nKSkgPCAwKQotCQlyZXR1cm4oeCk7Ci0JICAgICAgaWYgKCh4ID0gY21j Zm0oKSkgPCAwKQotCQlyZXR1cm4oeCk7Ci0KLQkgICAgICBzd2l0Y2goY3gpIHsKLQkJY2FzZSBT U0hGX0xDTDoKLQkJICAgaWYgKHNzaF9wZl9sY2xfbiA9PSAzMikgewotCQkgICAgICAgcHJpbnRm KAotIj9NYXhpbXVtIG51bWJlciBvZiBsb2NhbCBwb3J0IGZvcndhcmRpbmdzIGFscmVhZHkgc3Bl Y2lmaWVkXG4iCi0JCQkgICAgICk7Ci0JCSAgICAgICBmcmVlKGgpOwotCQkgICAgICAgcmV0dXJu KHN1Y2Nlc3MgPSAwKTsKLQkJICB9Ci0JCSAgc3NoX3BmX2xjbFtzc2hfcGZfbGNsX25dLnAxID0g ajsKLQkJICBtYWtlc3RyKCYoc3NoX3BmX2xjbFtzc2hfcGZfbGNsX25dLmhvc3QpLGgpOwotCQkg IG1ha2VzdHIoJmgsTlVMTCk7Ci0JCSAgc3NoX3BmX2xjbFtzc2hfcGZfbGNsX25dLnAyID0gazsK LQkJICBzc2hfcGZfbGNsX24rKzsKLQkJICBicmVhazsKLQkJY2FzZSBTU0hGX1JNVDoKLQkJICBp ZiAoc3NoX3BmX3JtdF9uID09IDMyKSB7Ci0JCSAgICAgIHByaW50ZigKLSI/TWF4aW11bSBudW1i ZXIgb2YgcmVtb3RlIHBvcnQgZm9yd2FyZGluZ3MgYWxyZWFkeSBzcGVjaWZpZWRcbiIKLQkJCSAg ICApOwotCQkgICAgICBmcmVlKGgpOwotCQkgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotCQkg IH0KLQkJICBzc2hfcGZfcm10W3NzaF9wZl9ybXRfbl0ucDEgPSBqOwotCQkgIG1ha2VzdHIoJihz c2hfcGZfcm10W3NzaF9wZl9ybXRfbl0uaG9zdCksaCk7Ci0JCSAgbWFrZXN0cigmaCxOVUxMKTsK LQkJICBzc2hfcGZfcm10W3NzaF9wZl9ybXRfbl0ucDIgPSBrOwotCQkgIHNzaF9wZl9ybXRfbisr OwotCSAgICAgIH0KLQkgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCSAgfQotCSAgLyogTm90 IHN1cHBvcnRpbmcgYXJiaXRyYXJ5IGZvcndhcmRpbmcgeWV0ICovCi0JICBjYXNlIFhTU0hfRkxQ OgkJLyogU1NIIEZPUldBUkQtTE9DQUwtUE9SVCAqLwotCSAgY2FzZSBYU1NIX0ZSUDogewkJLyog U1NIIEZPUldBUkQtUkVNT1RFLVBPUlQgKi8KLQkgICAgICBpbnQgbGlfcG9ydCA9IDA7Ci0JICAg ICAgaW50IHRvX3BvcnQgPSAwOwotCSAgICAgIGNoYXIgKiBmd19ob3N0ID0gTlVMTDsKLQkgICAg ICBpbnQgbjsKLSAgICAgICAgICAgICAgaWYgKCh4ID0gY21udW0oY21yZXN1bHQubnJlc3VsdCA9 PSBYU1NIX0ZMUCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9jYWwtcG9ydCI6 InJlbW90ZS1wb3J0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLDEwLCZsaV9w b3J0LHh4c3RyaW5nKSkgPCAwKQotICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOwotICAgICAg ICAgICAgICBpZiAobGlfcG9ydCA8IDEgfHwgbGlfcG9ydCA+IDY1NTM1KSB7Ci0gICAgICAgICAg ICAgICAgICBwcmludGYoIj9PdXQgcmFuZ2UgLSBtaW46IDEsIG1heDogNjU1MzVcbiIpOwotICAg ICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgICAgICAgfQotCSAgICAgIGlmICgo eCA9IGNtZmxkKCJob3N0Iixzc2hfaHN0P3NzaF9oc3Q6IiIsJnMseHhzdHJpbmcpKSA8IDApCi0J CXJldHVybih4KTsKLSAgICAgICAgICAgICAgbiA9IGNrc3RybmNweSh0bXBidWYscyxUTVBCVUZT SVopOwotICAgICAgICAgICAgICBmd19ob3N0ID0gdG1wYnVmOwotICAgICAgICAgICAgICBpZiAo KHggPSBjbW51bSgiaG9zdC1wb3J0Iixja3VpdG9hKGxpX3BvcnQpLDEwLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJnRvX3BvcnQseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgICAg ICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICAgIGlmICh0b19wb3J0IDwgMSB8fCB0b19wb3J0 ID4gNjU1MzUpIHsKLSAgICAgICAgICAgICAgICAgIHByaW50ZigiP091dCByYW5nZSAtIG1pbjog MSwgbWF4OiA2NTUzNVxuIik7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAg ICAgICAgICB9Ci0JICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQotCQlyZXR1cm4oeCk7Ci0J ICAgICAgc3dpdGNoIChjbXJlc3VsdC5ucmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBY U1NIX0ZMUDoJLyogU1NIIEZPUldBUkQtTE9DQUwtUE9SVCAqLwotI2lmbmRlZiBTU0hURVNUCi0g ICAgICAgICAgICAgICAgICBzc2hfZndkX2xvY2FsX3BvcnQobGlfcG9ydCxmd19ob3N0LHRvX3Bv cnQpOwotI2VuZGlmIC8qIFNTSFRFU1QgKi8KLQkJICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCQlj YXNlIFhTU0hfRlJQOgkvKiBTU0ggRk9SV0FSRC1SRU1PVEUtUE9SVCAqLwotI2lmbmRlZiBTU0hU RVNUCi0gICAgICAgICAgICAgICAgICBzc2hfZndkX3JlbW90ZV9wb3J0KGxpX3BvcnQsZndfaG9z dCx0b19wb3J0KTsKLSNlbmRpZiAvKiBTU0hURVNUICovCi0JCSAgcmV0dXJuKHN1Y2Nlc3MgPSAx KTsKLQkgICAgICB9Ci0JICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQkgIH0KLQljYXNlIFhT U0hfVjI6CQkvKiBTU0ggVjIgKi8KLQkgIGlmICgoY3ggPSBjbWtleShzc2gydGFiLG5zc2gydGFi LCIiLCIiLCB4eHN0cmluZykpIDwgMCkKLQkgICAgcmV0dXJuKGN4KTsKLQkgIHN3aXRjaCAoY3gp IHsKLQkgICAgY2FzZSBYU1NIMl9SS0U6Ci0JICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQot CQlyZXR1cm4oeCk7Ci0jaWZuZGVmIFNTSFRFU1QKLQkgICAgICBzc2hfdjJfcmVrZXkoKTsKLSNl bmRpZiAvKiBTU0hURVNUICovCi0JICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQkgICAgZGVm YXVsdDoKLQkgICAgICByZXR1cm4oLTIpOwotCSAgfQotCWNhc2UgWFNTSF9LRVk6Ci0JICBpZiAo KGN4ID0gY21rZXkoc3Noa2V5LG5zc2hrZXksIiIsIiIsIHh4c3RyaW5nKSkgPCAwKQotCSAgICBy ZXR1cm4oY3gpOwotCSAgc3dpdGNoIChjeCkgewotCSAgICBjYXNlIFNTSEtfUEFTUzogewkvKiBD aGFuZ2UgcGFzc3BocmFzZSAqLwotCSAgICAgIGNoYXIgKiBvbGRwID0gTlVMTCwgKiBuZXdwID0g TlVMTDsKLQkgICAgICBzdHJ1Y3QgRkRCIGRmLCBzdzsKLQkgICAgICBjbWZkYmkoJnN3LAotCQkg ICAgIF9DTUtFWSwJCS8qIGZjb2RlICovCi0JCSAgICAgIkZpbGVuYW1lLCBvciBzd2l0Y2giLCAv KiBobHBtc2cgKi8KLQkJICAgICAiIiwJCS8qIGRlZmF1bHQgKi8KLQkJICAgICAiIiwJCS8qIGFk ZHRsIHN0cmluZyBkYXRhICovCi0JCSAgICAgMiwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMTog dGJsIHNpemUgKi8KLQkJICAgICA0LAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21z d2kgKi8KLQkJICAgICB4eHN0cmluZywJCS8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KLQkJICAg ICBzc2hrcHN3LAkJLyogS2V5d29yZCB0YWJsZSAqLwotCQkgICAgICZkZgkJLyogUG9pbnRlciB0 byBuZXh0IEZEQiAqLwotCQkgICAgICk7Ci0JICAgICAgY21mZGJpKCZkZiwJCS8qIDJuZCBGREIg LSBmaWxlIGZvciBkaXNwbGF5ICovCi0JCSAgICAgX0NNSUZJLAkJLyogb3V0cHV0IGZpbGUgKi8K LQkJICAgICAiIiwJCS8qIGhscG1zZyAqLwotCQkgICAgICIiLAkJLyogZGVmYXVsdCAqLwotCQkg ICAgICIiLAkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLQkJICAgICAwLAkJCS8qIGFkZHRsIG51 bWVyaWMgZGF0YSAxICovCi0JCSAgICAgMCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLwot CQkgICAgIHh4c3RyaW5nLAotCQkgICAgIE5VTEwsCi0JCSAgICAgTlVMTAotCQkgICAgICk7Ci0J ICAgICAgbGluZVswXSA9IE5VTDsKLQotCSAgICAgIHdoaWxlICgxKSB7Ci0JCSAgeCA9IGNtZmRi KCZzdyk7Ci0JCSAgaWYgKHggPT0gLTMpIGJyZWFrOwotCQkgIGlmICh4IDwgMCkKLQkJICAgIHJl dHVybih4KTsKLQkJICBpZiAoY21yZXN1bHQuZmNvZGUgIT0gX0NNS0VZKQotCQkgICAgYnJlYWs7 Ci0JCSAgaWYgKCFjbWdicmsoKSkgewotCQkgICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1 aXJlcyBhbiBhcmd1bWVudFxuIik7Ci0JCSAgICAgIHJldHVybigtOSk7Ci0JCSAgfQotCQkgIGlm ICgoeSA9IGNtZmxkKCJQYXNzcGhyYXNlIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKLQkJICAgIHJl dHVybih5KTsKLQkJICBzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsKLQkJICAgIGNhc2UgMToJ CS8qIE9sZCAqLwotCQkgICAgICBtYWtlc3RyKCZvbGRwLHMpOwotCQkgICAgICBicmVhazsKLQkJ ICAgIGNhc2UgMjoJCS8qIE5ldyAqLwotCQkgICAgICBtYWtlc3RyKCZuZXdwLHMpOwotCQkgIH0K LQkgICAgICB9Ci0JICAgICAgaWYgKGNtcmVzdWx0LmZjb2RlID09IF9DTUlGSSkgeyAvKiBGaWxl bmFtZSAqLwotCQkgIGNrc3RybmNweShsaW5lLGNtcmVzdWx0LnNyZXN1bHQsTElOQlVGU0laKTsK LQkJICBpZiAoemZucWZwKGxpbmUsVE1QQlVGU0laLHRtcGJ1ZikpCi0JCSAgICBja3N0cm5jcHko bGluZSx0bXBidWYsTElOQlVGU0laKTsKLQkgICAgICB9Ci0JICAgICAgaWYgKCh4ID0gY21jZm0o KSkgPCAwKSByZXR1cm4oeCk7Ci0KLSNpZm5kZWYgU1NIVEVTVAotCSAgICAgIHggPSBzc2hrZXlf Y2hhbmdlX3Bhc3NwaHJhc2UobGluZVswXSA/IGxpbmUgOiBOVUxMLAotCQkJCQkgICAgIG9sZHAs IG5ld3ApOwotI2VuZGlmIC8qIFNTSFRFU1QgKi8KLQkgICAgICBtYWtlc3RyKCZvbGRwLE5VTEwp OwotCSAgICAgIG1ha2VzdHIoJm5ld3AsTlVMTCk7Ci0JICAgICAgc3VjY2VzcyA9ICh4ID09IDAp OwotCSAgICAgIHJldHVybihzdWNjZXNzKTsKLQkgICAgfQotCSAgICBjYXNlIFNTSEtfQ1JFQTog ewkvKiBTU0ggS0VZIENSRUFURSAvc3dpdGNoZXMuLi4gKi8KLQkgICAgICBpbnQgYml0cyA9IDEw MjQsIGtleXR5cGUgPSBTU0hLVF8yUjsKLQkgICAgICBjaGFyICogcGFzcyA9IE5VTEwsICogY29t bWVudCA9IE5VTEw7Ci0JICAgICAgc3RydWN0IEZEQiBkZiwgc3c7Ci0KLSAgICAgICAgICAgICAg LyoKLSAgICAgICAgICAgICAgICogY2hhciAqIHNzaGtleV9kZWZhdWx0X2ZpbGUoaW50IGtleXR5 cGUpIAotICAgICAgICAgICAgICAgKiB3aWxsIHByb3ZpZGUgdGhlIGRlZmF1bHQgZmlsZW5hbWUg Zm9yIGEgZ2l2ZW4ga2V5dHlwZQotICAgICAgICAgICAgICAgKiBpcyBpdCBwb3NzaWJsZSB0byBo YXZlIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgMm5kCi0gICAgICAgICAgICAgICAqIEZEQiBz ZXQgYW5kIGNoYW5nZWQgd2hlbiBhIC9UWVBFIHN3aXRjaCBpcyBwcm92aWRlZD8KLSAgICAgICAg ICAgICAgICogV291bGQgdGhpcyBhbGxvdyBmb3IgdGFiIGNvbXBsZXRpb24gb2YgdGhlIGZpbGVu YW1lPwotICAgICAgICAgICAgICAgKi8KLQkgICAgICBjbWZkYmkoJnN3LAotCQkgICAgIF9DTUtF WSwJCS8qIGZjb2RlICovCi0JCSAgICAgIkZpbGVuYW1lLCBvciBzd2l0Y2giLCAvKiBobHBtc2cg Ki8KLQkJICAgICAiIiwJCS8qIGRlZmF1bHQgKi8KLQkJICAgICAiIiwJCS8qIGFkZHRsIHN0cmlu ZyBkYXRhICovCi0JCSAgICAgbnNzaGtjcmVhLAkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRi bCBzaXplICovCi0JCSAgICAgNCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dp ICovCi0JCSAgICAgeHhzdHJpbmcsCQkvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0JCSAgICAg c3Noa2NyZWEsCQkvKiBLZXl3b3JkIHRhYmxlICovCi0JCSAgICAgJmRmCQkvKiBQb2ludGVyIHRv IG5leHQgRkRCICovCi0JCSAgICAgKTsKLQkgICAgICBjbWZkYmkoJmRmLAkJLyogMm5kIEZEQiAt IGZpbGUgZm9yIGRpc3BsYXkgKi8KLQkJICAgICBfQ01PRkksCQkvKiBvdXRwdXQgZmlsZSAqLwot CQkgICAgICIiLAkJLyogaGxwbXNnICovCi0JCSAgICAgIiIsCQkvKiBkZWZhdWx0ICovCi0JCSAg ICAgIiIsCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotCQkgICAgIDAsCQkJLyogYWRkdGwgbnVt ZXJpYyBkYXRhIDEgKi8KLQkJICAgICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCi0J CSAgICAgeHhzdHJpbmcsCi0JCSAgICAgTlVMTCwKLQkJICAgICBOVUxMCi0JCSAgICAgKTsKLQkg ICAgICBsaW5lWzBdID0gTlVMOwotCi0JICAgICAgd2hpbGUgKDEpIHsKLQkJICB4ID0gY21mZGIo JnN3KTsKLQkJICBpZiAoeCA9PSAtMykgYnJlYWs7Ci0JCSAgaWYgKHggPCAwKQotCQkgICAgcmV0 dXJuKHgpOwotCQkgIGlmIChjbXJlc3VsdC5mY29kZSAhPSBfQ01LRVkpCi0JCSAgICBicmVhazsK LQkJICBpZiAoIWNtZ2JyaygpKSB7Ci0JCSAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIHJlcXVp cmVzIGFuIGFyZ3VtZW50XG4iKTsKLQkJICAgICAgcmV0dXJuKC05KTsKLQkJICB9Ci0JCSAgc3dp dGNoIChjbXJlc3VsdC5ucmVzdWx0KSB7Ci0JCSAgICBjYXNlIFNTSEtDX0JJOgkvKiAvQklUUzpu ICovCi0JCSAgICAgIGlmICgoeSA9IGNtbnVtKCIiLCIxMDI0IiwxMCwmeix4eHN0cmluZykpIDwg MCkKLQkJCXJldHVybih5KTsKLQkJICAgICAgaWYgKHogPCA1MTIgfHwgeiA+IDQwOTYpIHsKLQkJ CSAgcHJpbnRmKCI/T3V0IHJhbmdlIC0gbWluOiA1MTIsIG1heDogNDA5NlxuIik7Ci0JCQkgIHJl dHVybigtOSk7Ci0JCSAgICAgIH0KLQkJICAgICAgYml0cyA9IHo7Ci0JCSAgICAgIGJyZWFrOwot CQkgICAgY2FzZSBTU0hLQ19QUDoJLyogL1BBU1NQSFJBU0U6YmxhaCAqLwotCQkgICAgICBpZiAo KHkgPSBjbWZsZCgiUGFzc3BocmFzZSIsIiIsJnMseHhzdHJpbmcpKSA8IDApCi0JCQlyZXR1cm4o eSk7Ci0JCSAgICAgIG1ha2VzdHIoJnBhc3Mscyk7Ci0JCSAgICAgIGJyZWFrOwotCQkgICAgY2Fz ZSBTU0hLQ19UWToJLyogL1RZUEU6a2V5d29yZCAqLwotCQkgICAgICBpZiAoKHkgPSBjbWtleShz c2hrY3R5LG5zc2hrY3R5LCIiLAotCQkJCSAgICAgInYyLXJzYSIseHhzdHJpbmcpKSA8IDApCi0J CQlyZXR1cm4oeSk7Ci0JCSAgICAgIGtleXR5cGUgPSB5OwotCQkgICAgICBicmVhazsKLQkJICAg IGNhc2UgU1NIS0NfMVI6CS8qIC9DT01NRU5UICovCi0JCSAgICAgIGlmICgoeSA9IGNtZmxkKCJU ZXh0IiwiIiwmcyx4eHN0cmluZykpIDwgMCkKLQkJCXJldHVybih5KTsKLQkJICAgICAgbWFrZXN0 cigmY29tbWVudCxzKTsKLQkJICAgICAgYnJlYWs7Ci0JCSAgfQotCSAgICAgIH0KLQkgICAgICBp ZiAoY21yZXN1bHQuZmNvZGUgPT0gX0NNT0ZJKSB7IC8qIEZpbGVuYW1lICovCi0gICAgICAgICAg ICAgICAgICBpZiAoY21yZXN1bHQuc3Jlc3VsdCkgewotICAgICAgICAgICAgICAgICAgICAgIGNr c3RybmNweShsaW5lLGNtcmVzdWx0LnNyZXN1bHQsTElOQlVGU0laKTsKLSAgICAgICAgICAgICAg ICAgICAgICBpZiAoemZucWZwKGxpbmUsVE1QQlVGU0laLHRtcGJ1ZikpCi0gICAgICAgICAgICAg ICAgICAgICAgICAgIGNrc3RybmNweShsaW5lLHRtcGJ1ZixMSU5CVUZTSVopOwotCQkgIH0KLQkg ICAgICB9Ci0JICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSAvKiBDb25maXJtICovCi0JCXJl dHVybih5KTsKLSNpZm5kZWYgU1NIVEVTVAotCSAgICAgIHggPSBzc2hrZXlfY3JlYXRlKGxpbmVb MF0gPyBsaW5lIDogTlVMTCwKLQkJCQliaXRzLCBwYXNzLCBrZXl0eXBlLCBjb21tZW50KTsKLQkg ICAgICBpZiAocGFzcykKLQkJbWVtc2V0KHBhc3MsMCxzdHJsZW4ocGFzcykpOwotI2VuZGlmIC8q IFNTSFRFU1QgKi8KLQkgICAgICBtYWtlc3RyKCZwYXNzLE5VTEwpOwotCSAgICAgIG1ha2VzdHIo JmNvbW1lbnQsTlVMTCk7Ci0JICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAoeCA9PSAwKSk7Ci0JICAg IH0KLQkgICAgY2FzZSBTU0hLX0RJU1A6IHsJLyogU1NIIEtFWSBESVNQTEFZIC9zd2l0Y2hlcy4u LiAqLwotCSAgICAgIGNoYXIgYzsKLQkgICAgICBpbnQgaW5mbXQgPSAwLCBvdXRmbXQgPSAwOwot CSAgICAgIHN0cnVjdCBGREIgZGYsIHN3OwotCSAgICAgIGNtZmRiaSgmc3csCi0JCSAgICAgX0NN S0VZLAkJLyogZmNvZGUgKi8KLQkJICAgICAiRmlsZW5hbWUsIG9yIHN3aXRjaCIsIC8qIGhscG1z ZyAqLwotCQkgICAgICIiLAkJLyogZGVmYXVsdCAqLwotCQkgICAgICIiLAkJLyogYWRkdGwgc3Ry aW5nIGRhdGEgKi8KLQkJICAgICBuc3NoZHN3aSwJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0 Ymwgc2l6ZSAqLwotCQkgICAgIDQsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3 aSAqLwotCQkgICAgIHh4c3RyaW5nLAkJLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotCQkgICAg IHNzaGRzd2ksCQkvKiBLZXl3b3JkIHRhYmxlICovCi0JCSAgICAgJmRmCQkvKiBQb2ludGVyIHRv IG5leHQgRkRCICovCi0JCSAgICAgKTsKLQkgICAgICBjbWZkYmkoJmRmLAkJLyogMm5kIEZEQiAt IGZpbGUgZm9yIGRpc3BsYXkgKi8KLQkJICAgICBfQ01JRkksCQkvKiBmY29kZSAqLwotCQkgICAg ICIiLAkJLyogaGxwbXNnICovCi0JCSAgICAgIiIsCQkvKiBkZWZhdWx0ICovCi0JCSAgICAgIiIs CQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotCQkgICAgIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBk YXRhIDEgKi8KLQkJICAgICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCi0JCSAgICAg eHhzdHJpbmcsCi0JCSAgICAgTlVMTCwKLQkJICAgICBOVUxMCi0JCSAgICAgKTsKLQkgICAgICBs aW5lWzBdID0gTlVMOwotCi0JICAgICAgd2hpbGUgKDEpIHsKLQkJICB4ID0gY21mZGIoJnN3KTsK LQkJICBpZiAoeCA9PSAtMykgYnJlYWs7Ci0JCSAgaWYgKHggPCAwKQotCQkgICAgcmV0dXJuKHgp OwotCQkgIGlmIChjbXJlc3VsdC5mY29kZSAhPSBfQ01LRVkpCi0JCSAgICBicmVhazsKLQkJICBp ZiAoIWNtZ2JyaygpKSB7Ci0JCSAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFu IGFyZ3VtZW50XG4iKTsKLQkJICAgICAgcmV0dXJuKC05KTsKLQkJICB9Ci0JCSAgc3dpdGNoIChj bXJlc3VsdC5ucmVzdWx0KSB7Ci0jaWZkZWYgQ09NTUVOVAotCQkgICAgY2FzZSBTU0hLRF9JTjoJ LyogL0lOLUZPUk1BVDogKi8KLQkJICAgICAgaWYgKCh5ID0gY21rZXkoc3NoZGlmbXQsbnNzaGRp Zm10LAotCQkJCSAgICAgIiIsIiIseHhzdHJpbmcpKSA8IDApCi0JCQlyZXR1cm4oeSk7Ci0JCSAg ICAgIGluZm10ID0geTsKLQkJICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCQkg ICAgY2FzZSBTU0hLRF9PVVQ6CS8qIC9GT1JNQVQ6ICovCi0JCSAgICAgIGlmICgoeSA9IGNta2V5 KHNzaGRvZm10LG5zc2hkb2ZtdCwKLQkJCQkgICAgICIiLCIiLHh4c3RyaW5nKSkgPCAwKQotCQkJ cmV0dXJuKHkpOwotCQkgICAgICBvdXRmbXQgPSB5OwotCQkgICAgICBicmVhazsKLQkJICB9Ci0J ICAgICAgfQotCSAgICAgIGlmIChjbXJlc3VsdC5mY29kZSA9PSBfQ01JRkkpIHsgLyogRmlsZW5h bWUgKi8KLQkJICBja3N0cm5jcHkobGluZSxjbXJlc3VsdC5zcmVzdWx0LExJTkJVRlNJWik7Ci0J CSAgaWYgKHpmbnFmcChsaW5lLFRNUEJVRlNJWix0bXBidWYpKQotCQkgICAgY2tzdHJuY3B5KGxp bmUsdG1wYnVmLExJTkJVRlNJWik7Ci0JICAgICAgfQotI2lmZGVmIENPTU1FTlQKLQkgICAgICBp ZiAoIWxpbmVbMF0pIHsKLQkJICBwcmludGYoIj9LZXkgZmlsZW5hbWUgcmVxdWlyZWRcbiIpOwot CQkgIHJldHVybigtOSk7Ci0JICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQkgICAgICBp ZiAoKHkgPSBjbWNmbSgpKSA8IDApIC8qIENvbmZpcm0gKi8KLQkJcmV0dXJuKHkpOwotI2lmbmRl ZiBTU0hURVNUCi0JICAgICAgc3dpdGNoIChvdXRmbXQpIHsKLQkJY2FzZSBTS0RGX09TU0g6Ci0g ICAgICAgICAgICAgICAgICAvKiAybmQgcGFyYW0gaXMgb3B0aW9uYWwgcGFzc3BocmFzZSAqLwot CQkgIHggPSBzc2hrZXlfZGlzcGxheV9wdWJsaWMobGluZVswXSA/IGxpbmUgOiBOVUxMLCBOVUxM KTsKLQkJICBicmVhazsKLQkJY2FzZSBTS0RGX1NTSEM6Ci0gICAgICAgICAgICAgICAgICAvKiAy bmQgcGFyYW0gaXMgb3B0aW9uYWwgcGFzc3BocmFzZSAqLwotCQkgIHggPSBzc2hrZXlfZGlzcGxh eV9wdWJsaWNfYXNfc3NoMihsaW5lWzBdID8gbGluZSA6IE5VTEwsCi0JCQkJCQkgICAgTlVMTCk7 Ci0JCSAgYnJlYWs7Ci0JCWNhc2UgU0tERl9JRVRGOgotCQkgIHggPSBzc2hrZXlfZGlzcGxheV9m aW5nZXJwcmludChsaW5lWzBdID8gbGluZSA6IE5VTEwsIDEpOwotCQkgIGJyZWFrOwotCQljYXNl IFNLREZfRklORzoKLQkJICB4ID0gc3Noa2V5X2Rpc3BsYXlfZmluZ2VycHJpbnQobGluZVswXSA/ IGxpbmUgOiBOVUxMLCAwKTsKLQkJICBicmVhazsKLQkgICAgICB9Ci0jZW5kaWYgLyogU1NIVEVT VCAqLwotCSAgICAgIHJldHVybihzdWNjZXNzID0gKHggPT0gMCkpOwotCSAgICB9Ci0JICAgIGNh c2UgU1NIS19WMToJCS8qIFNTSCBLRVkgVjEgU0VULUNPTU1FTlQgKi8KLQkgICAgICBpZiAoKHgg PSBjbWtleShzc2hrdjEsMSwiIiwic2V0LWNvbW1lbnQiLCB4eHN0cmluZykpIDwgMCkKLQkJcmV0 dXJuKHgpOwotCSAgICAgIGlmICh4ICE9IDEpIHJldHVybigtMik7Ci0JICAgICAgaWYgKCh4ID0g Y21pZmkoIktleSBmaWxlIG5hbWUiLCIiLCZzLCZ5LHh4c3RyaW5nKSkgPCAwKSB7Ci0JCSAgaWYg KHggPT0gLTMpIHsKLQkJICAgICAgcHJpbnRmKCI/TmFtZSBvZiBrZXkgZmlsZSByZXF1aXJlZFxu Iik7Ci0JCSAgICAgIHJldHVybigtOSk7Ci0JCSAgfQotCSAgICAgIH0KLQkgICAgICBja3N0cm5j cHkobGluZSxzLExJTkJVRlNJWik7Ci0JICAgICAgaWYgKCh4ID0gY210eHQoIkNvbW1lbnQgdGV4 dCIsIiIsJnMseHhzdHJpbmcpKSA8IDApCi0JCXJldHVybih4KTsKLSNpZm5kZWYgU1NIVEVTVAot CSAgICAgIHggPSBzc2hrZXlfdjFfY2hhbmdlX2NvbW1lbnQobGluZSwgIC8qIGZpbGVuYW1lICov Ci0JCQkJCSAgIHMsICAgICAvKiBuZXcgY29tbWVudCAqLwotCQkJCQkgICBOVUxMICAgLyogcGFz c3BocmFzZSAqLwotCQkJCQkgICApOwotI2VuZGlmIC8qIFNTSFRFU1QgKi8KLQkgICAgICBzdWNj ZXNzID0gKHggPT0gMCk7Ci0JICAgICAgcmV0dXJuKHN1Y2Nlc3MpOwotCSAgfQotCSAgZGVmYXVs dDoKLQkgICAgcmV0dXJuKC0yKTsKLQl9Ci0jZWxzZSAgLyogU1NIQlVJTFRJTiAqLwotI2lmZGVm IFNTSENNRAotCXggPSBuZXR0eXBlOwotCWlmICgoeSA9IHNldGxpbihYWFNTSCwwLDEpKSA8IDAp IHsKLQkgICAgaWYgKGVycm5vKQotCSAgICAgIHByaW50ZigiPyVzXG4iLGNrX2VycnN0cigpKTsK LSAgICAgICAgICAgIGVsc2UKLSNpZmRlZiBDT01NRU5UCi0JICAgIC8qIFRoaXMgaXNuJ3Qgcmln aHQgZWl0aGVyIGJlY2F1c2UgaXQgY2F0Y2hlcyBjb21tYW5kIGVkaXRpbmcgKi8KLQkgICAgICBw cmludGYoIj9Tb3JyeSwgcHNldWRvdGVybWluYWwgb3BlbiBmYWlsZWRcbiIpOwotICAgICAgICAg ICAgaWYgKGhpbnRzKQotCSAgICAgIHByaW50ZigiSGludDogVHJ5IFwic3NoIC10ICVzXCJcbiIs bGluZSk7Ci0jZWxzZQotCSAgICAgIHJldHVybih5KTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0J ICAgIG5ldHR5cGUgPSB4OwkJLyogRmFpbGVkLCByZXN0b3JlIG5ldCB0eXBlLiAqLwotCSAgICB0 dG5wcm90byA9IHo7CQkvKiBhbmQgcHJvdG9jb2wgKi8KLQkgICAgc3VjY2VzcyA9IDA7Ci0JfQot CWRpZHNldGxpbisrOwotCW5ldHNhdmUgPSB4OwotCXJldHVybih5KTsKLSNlbmRpZiAvKiBTU0hD TUQgKi8KLSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0gICAgfQotI2VuZGlmIC8qIEFOWVNTSCAq LwotCi0jaWZkZWYgU1NIQlVJTFRJTgotICAgIGlmIChjeCA9PSBYWFNLUk0pIHsJCQkvKiBTS0VS TUlUIChTZWN1cmUgU2hlbGwgS2VybWl0KSAqLwotCWV4dGVybiBpbnQgbmV0c2F2ZTsKLQlpbnQg aywgeCwgaGF2ZWhvc3QgPSAwLCB0cmlwcyA9IDA7Ci0gICAgICAgIGludCAgICB0bXB2ZXIgPSAt MSwgdG1weGZ3ID0gLTE7Ci0jaWZuZGVmIFNTSFRFU1QKLSAgICAgICAgZXh0ZXJuIGludCBzbF9z c2hfeGZ3LCBzbF9zc2hfeGZ3X3NhdmVkOwotICAgICAgICBleHRlcm4gaW50IHNsX3NzaF92ZXIs IHNsX3NzaF92ZXJfc2F2ZWQ7Ci0jZW5kaWYgLyogU1NIVEVTVCAqLwotICAgICAgICBleHRlcm4g aW50IG1kbXR5cCwgbWRtc2F2LCBjeHR5cGUsIHNsX3VpZF9zYXZlZDsKLSAgICAgICAgZXh0ZXJu IGNoYXIgKiBzbG1zZzsKLQlleHRlcm4gY2hhciB1aWRidWZbXSwgc2xfdWlkYnVmW107Ci0gICAg ICAgIGV4dGVybiBjaGFyIHB3YnVmW10sICogZ19wc3dkOwotICAgICAgICBleHRlcm4gaW50IHB3 ZmxnLCBwd2NyeXB0LCBnX3BmbGcsIGdfcGNwdCwgbm9sb2NhbDsKLQlzdHJ1Y3QgRkRCIHN3LCBr dywgZmw7Ci0KLSAgICAgICAgaWYgKHNzaF90bXBzdHIpCi0JICBtZW1zZXQoc3NoX3RtcHN0ciww LHN0cmxlbihzc2hfdG1wc3RyKSk7Ci0gICAgICAgIG1ha2VzdHIoJnNzaF90bXBzdHIsTlVMTCk7 Ci0gICAgICAgIG1ha2VzdHIoJnNzaF90bXB1aWQsTlVMTCk7Ci0gICAgICAgIG1ha2VzdHIoJnNz aF90bXBjbWQsTlVMTCk7Ci0gICAgICAgIG1ha2VzdHIoJnNzaF90bXBwb3J0LE5VTEwpOwotCi0J Y21mZGJpKCZrdywJCQkvKiAxc3QgRkRCIC0gY29tbWFuZHMgKi8KLQkgICAgICAgX0NNS0VZLAkJ CS8qIGZjb2RlICovCi0JICAgICAgICJob3N0IFsgcG9ydCBdLFxuIG9yIGFjdGlvbiIsIC8qIGhs cG1zZyAqLwotCSAgICAgICAiIiwJCQkvKiBkZWZhdWx0ICovCi0JICAgICAgICIiLAkJCS8qIGFk ZHRsIHN0cmluZyBkYXRhICovCi0JICAgICAgIG5zc2hrZXJtaXQsCQkvKiBhZGR0bCBudW1lcmlj IGRhdGEgMTogdGJsIHNpemUgKi8KLQkgICAgICAgMCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEg MjogMCA9IGtleXdvcmQgKi8KLQkgICAgICAgeHhzdHJpbmcsCQkvKiBQcm9jZXNzaW5nIGZ1bmN0 aW9uICovCi0JICAgICAgIHNzaGtlcm1pdCwJCS8qIEtleXdvcmQgdGFibGUgKi8KLQkgICAgICAg JmZsCQkJLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLwotCSAgICAgICApOwotCWNtZmRiaSgmZmws CQkJLyogSG9zdCAqLwotCSAgICAgICBfQ01GTEQsCQkJLyogZmNvZGUgKi8KLQkgICAgICAgIiIs CQkJLyogaGxwbXNnICovCi0JICAgICAgICIiLAkJCS8qIGRlZmF1bHQgKi8KLQkgICAgICAgIiIs CQkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLQkgICAgICAgMCwJCQkvKiBhZGR0bCBudW1lcmlj IGRhdGEgMSAqLwotCSAgICAgICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCi0JICAg ICAgIHh4c3RyaW5nLAotCSAgICAgICBOVUxMLAotCSAgICAgICBOVUxMCi0JICAgICAgICk7Ci0K LQl4ID0gY21mZGIoJmt3KTsKLQlpZiAoeCA9PSAtMykgewotCSAgICBwcmludGYoIj9za2VybWl0 IHdoYXQ/XG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0JaWYgKHggPCAwKQotCSAgcmV0dXJu KHgpOwotCWhhdmVob3N0ID0gMDsKLQlpZiAoY21yZXN1bHQuZmNvZGUgPT0gX0NNRkxEKSB7Ci0J ICAgIGhhdmVob3N0ID0gMTsKLQkgICAgY2tzdHJuY3B5KGxpbmUsY21yZXN1bHQuc3Jlc3VsdCxM SU5CVUZTSVopOyAvKiBIb3N0bmFtZSAqLwotCSAgICBjbXJlc3VsdC5ucmVzdWx0ID0gU0tSTV9P UE47Ci0JfQotCXN3aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgewkvKiBTU0gga2V5d29yZCAqLwot CSAgY2FzZSBTS1JNX09QTjoJCS8qIFNTSCBPUEVOICovCi0JICAgIGlmICghaGF2ZWhvc3QpIHsK LQkJaWYgKCh4ID0gY21mbGQoIkhvc3QiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQotCQkgIHJldHVy bih4KTsKLQkJY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOwotCSAgICB9Ci0JICAgIC8qIFBh cnNlIFsgcG9ydCBdIFsgc3dpdGNoZXMgXSAqLwotCSAgICBjbWZkYmkoJmt3LAkJCS8qIFN3aXRj aGVzICovCi0JCSAgIF9DTUtFWSwKLQkJICAgIlBvcnQgbnVtYmVyIG9yIHNlcnZpY2UgbmFtZSxc bm9yIHN3aXRjaCIsCi0JCSAgICIiLAotCQkgICAiIiwKLQkJICAgbnNzaGtybW9wbnN3LAotCQkg ICA0LAotCQkgICB4eHN0cmluZywKLQkJICAgc3Noa3Jtb3Buc3csCi0JCSAgICZmbAotCQkgICAp OwotCSAgICBjbWZkYmkoJmZsLAkJCS8qIFBvcnQgbnVtYmVyIG9yIHNlcnZpY2UgbmFtZSAqLwot CQkgICBfQ01GTEQsCi0JCSAgICIiLAotCQkgICAiIiwKLQkJICAgIiIsCi0JCSAgIDAsCi0JCSAg IDAsCi0JCSAgIHh4c3RyaW5nLAotCQkgICBOVUxMLAotCQkgICBOVUxMCi0JCSAgICk7Ci0JICAg IHRyaXBzID0gMDsJCQkvKiBFeHBsYWluZWQgYmVsb3cgKi8KLQkgICAgd2hpbGUgKDEpIHsJCQkv KiBQYXJzZSBwb3J0IGFuZCBzd2l0Y2hlcyAqLwotCQl4ID0gY21mZGIoJmt3KTsJCS8qIEdldCBh IGZpZWxkICovCi0JCWlmICh4ID09IC0zKQkJLyogVXNlciB0eXBlZCBDUiBzbyBxdWl0IGZyb20g bG9vcCAqLwotCQkgIGJyZWFrOwotCQlpZiAoeCA8IDApCQkvKiBPdGhlciBwYXJzZSBlcnJvciwg cGFzcyBpdCBiYWNrICovCi0JCSAgcmV0dXJuKHgpOwotCQlzd2l0Y2ggKGNtcmVzdWx0LmZjb2Rl KSB7IC8qIEZpZWxkIG9yIEtleXdvcmQ/ICovCi0gICAgICAgICAgICAgICAgICBjYXNlIF9DTUZM RDoJCSAgLyogRmllbGQgKi8KLSAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NoX3RtcHBv cnQsY21yZXN1bHQuc3Jlc3VsdCk7Ci0JCSAgICBicmVhazsKLQkJICBjYXNlIF9DTUtFWToJCS8q IEtleXdvcmQgKi8KLQkJICAgIHN3aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgewkvKiBXaGljaCBv bmU/ICovCi0JCSAgICAgIGNhc2UgU1NIU1dfVVNSOgkgICAgICAgIC8qIC9VU0VSOiAqLwotCQkJ aWYgKCFjbWdicmsoKSkgewotCQkJICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFu IGFyZ3VtZW50XG4iKTsKLQkJCSAgICByZXR1cm4oLTkpOwotCQkJfQotCQkJaWYgKCh5ID0gY21m bGQoIlVzZXJuYW1lIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKLQkJCSAgcmV0dXJuKHkpOwotCQkJ cyA9IGJyc3RyaXAocyk7Ci0JCQltYWtlc3RyKCZzc2hfdG1wdWlkLHMpOwotCQkJYnJlYWs7Ci0g ICAgICAgICAgICAgICAgICAgICAgY2FzZSBTU0hTV19QV0Q6Ci0JCQlpZiAoIWNtZ2JyaygpKSB7 Ci0JCQkgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOwot CQkJICAgIHJldHVybigtOSk7Ci0JCQl9Ci0JCQlkZWJvayA9IDA7Ci0JCQlpZiAoKHggPSBjbWZs ZCgiUGFzc3dvcmQiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7Ci0JCQkgICAgaWYgKHggPT0gLTMp IHsKLQkJCQltYWtlc3RyKCZzc2hfdG1wc3RyLCIiKTsKLQkJCSAgICB9IGVsc2UgewotCQkJCXJl dHVybih4KTsKLQkJCSAgICB9Ci0JCQl9IGVsc2UgewotCQkJICAgIHMgPSBicnN0cmlwKHMpOwot CQkJICAgIGlmICgoeCA9IChpbnQpc3RybGVuKHMpKSA+IFBXQlVGTCkgewotCQkJCW1ha2VzdHIo JnNsbXNnLCJJbnRlcm5hbCBlcnJvciIpOwotCQkJCXByaW50ZigiP1NvcnJ5LCB0b28gbG9uZyAt IG1heCA9ICVkXG4iLFBXQlVGTCk7Ci0JCQkJcmV0dXJuKC05KTsKLQkJCSAgICB9Ci0JCQkgICAg bWFrZXN0cigmc3NoX3RtcHN0cixzKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0gICAgICAgICAgICAg ICAgICAgIGNhc2UgU1NIU1dfVkVSOgotCQkJaWYgKCh4ID0gY21udW0oIk51bWJlciIsIiIsMTAs JnoseHhzdHJpbmcpKSA8IDApCi0JCQkgIHJldHVybih4KTsKLQkJCWlmICh6IDwgMSB8fCB6ID4g MikgewotCQkJICAgIHByaW50ZigiP091dCBvZiByYW5nZTogJWRcbiIseik7Ci0JCQkgICAgcmV0 dXJuKC05KTsKLQkJCX0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRtcHZlciA9IHo7Ci0JCQli cmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybigtMik7Ci0JCSAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0JCWlmICh0cmlw cysrID09IDApIHsJLyogQWZ0ZXIgZmlyc3QgdGltZSB0aHJvdWdoICovCi0JCSAgICBjbWZkYmko Jmt3LAkJLyogb25seSBwYXJzZSBzd2l0Y2hlcywgbm90IHBvcnQuICovCi0JCQkgICBfQ01LRVks Ci0JCQkgICAiU3dpdGNoIiwKLQkJCSAgICIiLAotCQkJICAgIiIsCi0JCQkgICBuc3Noa3Jtb3Bu c3csCi0JCQkgICA0LAotCQkJICAgeHhzdHJpbmcsCi0JCQkgICBzc2hrcm1vcG5zdywKLQkJCSAg IE5VTEwKLQkJCSAgICk7Ci0JCX0KLQkgICAgfQotCSAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDAp CS8qIEdldCBjb25maXJtYXRpb24gKi8KLQkgICAgICByZXR1cm4oeCk7Ci0gICAgICAgICAgICAg IGlmIChjbHNrY29ubngoMSkgPCAwKSB7CS8qIENsb3NlIGN1cnJlbnQgS2VybWl0IGNvbm5lY3Rp b24gKi8KLSAgICAgICAgICAgICAgICAgIGlmICggc3NoX3RtcHN0ciApIHsKLSAgICAgICAgICAg ICAgICAgICAgICBtZW1zZXQoc3NoX3RtcHN0ciwwLHN0cmxlbihzc2hfdG1wc3RyKSk7Ci0gICAg ICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NoX3RtcHN0cixOVUxMKTsKLSAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgbWFrZXN0cigmc3NoX2hzdCxsaW5lKTsJLyogU3Rhc2gg ZXZlcnl0aGluZyAqLwotICAgICAgICAgICAgICBpZiAoc3NoX3RtcHVpZCkgewotICAgICAgICAg ICAgICAgICAgaWYgKCFzbF91aWRfc2F2ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICBja3N0 cm5jcHkoc2xfdWlkYnVmLHVpZGJ1ZixVSURCVUZMRU4pOwotICAgICAgICAgICAgICAgICAgICAg IHNsX3VpZF9zYXZlZCA9IDE7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg ICBja3N0cm5jcHkodWlkYnVmLHNzaF90bXB1aWQsVUlEQlVGTEVOKTsKLSAgICAgICAgICAgICAg ICAgIG1ha2VzdHIoJnNzaF90bXB1aWQsTlVMTCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgaWYgKHNzaF90bXBwb3J0KSB7Ci0gICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2hf cHJ0LHNzaF90bXBwb3J0KTsKLSAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF90bXBwb3J0 LE5VTEwpOwotICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgIG1ha2VzdHIo JnNzaF9wcnQsTlVMTCk7Ci0KLSAgICAgICAgICAgICAgLyogU2V0IHRoZSBTdWJzeXN0ZW0gdG8g S2VybWl0ICovCi0gICAgICAgICAgICAgIHNzaF9jYXMgPSAxOwotICAgICAgICAgICAgICBtYWtl c3RyKCZzc2hfY21kLCJrZXJtaXQiKTsKLQotICAgICAgICAgICAgICBpZiAodG1wdmVyID4gLTEp IHsKLSNpZm5kZWYgU1NIVEVTVAotICAgICAgICAgICAgICAgICAgaWYgKCFzbF9zc2hfdmVyX3Nh dmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgc2xfc3NoX3ZlciA9IHNzaF92ZXI7Ci0gICAg ICAgICAgICAgICAgICAgICAgc2xfc3NoX3Zlcl9zYXZlZCA9IDE7Ci0gICAgICAgICAgICAgICAg ICB9Ci0jZW5kaWYgLyogU1NIVEVTVCAqLwotICAgICAgICAgICAgICAgICAgc3NoX3ZlciA9IHRt cHZlcjsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAvKiBEaXNhYmxlIFgxMSBGb3J3 YXJkaW5nICovCi0jaWZuZGVmIFNTSFRFU1QKLSAgICAgICAgICAgICAgaWYgKCFzbF9zc2hfeGZ3 X3NhdmVkKSB7Ci0gICAgICAgICAgICAgICAgICBzbF9zc2hfeGZ3ID0gc3NoX3hmdzsKLSAgICAg ICAgICAgICAgICAgIHNsX3NzaF94Zndfc2F2ZWQgPSAxOwotICAgICAgICAgICAgICB9Ci0jZW5k aWYgLyogU1NIVEVTVCAqLwotICAgICAgICAgICAgICBzc2hfeGZ3ID0gMDsKLQotICAgICAgICAg ICAgICBpZiAoc3NoX3RtcHN0cikgewotICAgICAgICAgICAgICAgICAgaWYgKHNzaF90bXBzdHJb MF0pIHsKLSAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkocHdidWYsc3NoX3RtcHN0cixQ V0JVRkwrMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgcHdmbGcgPSAxOwotICAgICAgICAgICAg ICAgICAgICAgIHB3Y3J5cHQgPSAwOwotICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg ICAgICAgICAgICAgICAgcHdmbGcgPSAwOwotICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3No X3RtcHN0cixOVUxMKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBuZXR0eXBlID0g TkVUX1NTSDsKLSAgICAgICAgICAgICAgaWYgKG1kbXNhdiA8IDApCi0gICAgICAgICAgICAgICAg ICBtZG1zYXYgPSBtZG10eXA7Ci0gICAgICAgICAgICAgIG1kbXR5cCA9IC1uZXR0eXBlOwotICAg ICAgICAgICAgICB4ID0gMTsKLQotI2lmbmRlZiBOT1NQTAotICAgICAgICAgICAgbWFrZXN0cigm Z19wc3dkLHB3YnVmKTsJLyogU2F2ZSBnbG9iYWwgcHdidWYgKi8KLSAgICAgICAgICAgIGdfcGZs ZyA9IHB3ZmxnOwkJLyogYW5kIGZsYWcgKi8KLSAgICAgICAgICAgIGdfcGNwdCA9IHB3Y3J5cHQ7 Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotCSAgICAvKiBMaW5lIHBhcmFtZXRlciB0byB0dG9wZW4o KSBpcyBpZ25vcmVkICovCi0JICAgIGsgPSB0dG9wZW4obGluZSwmeCxtZG10eXAsIDApOwotCSAg ICBpZiAoayA8IDApIHsKLQkJcHJpbnRmKCI/VW5hYmxlIHRvIGNvbm5lY3QgdG8gJXNcbiIsc3No X2hzdCk7Ci0JCW1kbXR5cCA9IG1kbXNhdjsKLSAgICAgICAgICAgICAgICBzbHJlc3RvcigpOwot CQlyZXR1cm4oc3VjY2VzcyA9IDApOwotCSAgICB9Ci0JICAgIGR1cGxleCA9IDA7ICAgICAgICAg ICAgIC8qIFJlbW90ZSBlY2hvICovCi0JICAgIGNrc3RybmNweSh0dG5hbWUsbGluZSxUVE5BTUxF Tik7IC8qIFJlY29yZCB0aGUgY29tbWFuZCAqLwotCSAgICBkZWJ1ZyhGMTEwLCJzc2ggdHRuYW1l Iix0dG5hbWUsMCk7Ci0JICAgIG1ha2VzdHIoJnNsbXNnLE5VTEwpOwkvKiBObyBTRVQgTElORSBl cnJvciBtZXNzYWdlICovCi0JICAgIGN4dHlwZSA9IENYVF9TU0g7Ci0jaWZuZGVmIE5PRElBTAot CSAgICBkaWFsc3RhID0gRElBX1VOSzsKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLQkgICAgc3VjY2Vz cyA9IDE7CQkvKiBTRVQgTElORSBzdWNjZWVkZWQgKi8KLQkgICAgbmV0d29yayA9IDE7CQkvKiBO ZXR3b3JrIGNvbm5lY3Rpb24gKG5vdCBzZXJpYWwpICovCi0JICAgIGxvY2FsID0gMTsJCQkvKiBM b2NhbCBtb2RlIChub3QgcmVtb3RlKSAqLwotCSAgICBpZiAoKHJlbGlhYmxlICE9IFNFVF9PRkYg fHwgIXNldHJlbGlhYmxlKSkKLQkgICAgICByZWxpYWJsZSA9IFNFVF9PTjsJLyogVHJhbnNwb3J0 IGlzIHJlbGlhYmxlIGVuZCB0byBlbmQgKi8KLSNpZmRlZiBPUzIKLSAgICAgICAgICAgIERpYWxl clNlbmQoT1BUX0tFUk1JVF9DT05ORUNULCAwKTsKLSNlbmRpZiAvKiBPUzIgKi8KLQkgICAgc2V0 ZmxvdygpOwkJCS8qIFNldCBhcHByb3ByaWF0ZSBmbG93IGNvbnRyb2wgKi8KLQotCSAgICBoYXZl bGluZSA9IDE7Ci0jaWZkZWYgQ0tMT0dESUFMCi0jaWZkZWYgTkVUQ09OTgotCSAgICBkb2xvZ25l dCgpOwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSNlbmRpZiAvKiBDS0xPR0RJQUwgKi8KLQotI2lm bmRlZiBOT1NQTAotCSAgICBpZiAobG9jYWwpIHsKLQkJaWYgKG5tYWMpIHsJCS8qIEFueSBtYWNy b3MgZGVmaW5lZD8gKi8KLQkJICAgIGludCBrOwkJLyogWWVzICovCi0JCSAgICBrID0gbWxvb2so bWFjdGFiLCJvbl9vcGVuIixubWFjKTsgLyogTG9vayB0aGlzIHVwICovCi0JCSAgICBpZiAoayA+ PSAwKSB7CSAgICAgICAgICAgICAgLyogSWYgZm91bmQsICovCi0JCQlpZiAoZG9kbyhrLHNzaF9o c3QsMCkgPiAtMSkgICAvKiBzZXQgaXQgdXAsICovCi0JCQkgIHBhcnNlcigxKTsJCSAgICAgIC8q IGFuZCBleGVjdXRlIGl0ICovCi0JCSAgICB9Ci0JCX0KLQkgICAgfQotI2VuZGlmIC8qIE5PU1BM ICovCi0jaWZkZWYgTE9DVVMJCQotCSAgICBpZiAoYXV0b2xvY3VzKQotCQlzZXRsb2N1cygxLDEp OwotI2VuZGlmIC8qIExPQ1VTICovCi0KLQkvKiBDb21tYW5kIHdhcyBjb25maXJtZWQgc28gd2Ug Y2FuIHByZS1wb3AgY29tbWFuZCBsZXZlbC4gKi8KLQkvKiBUaGlzIGlzIHNvIENPTk5FQ1QgbW9k dWxlIHdvbid0IHRoaW5rIHdlJ3JlIGV4ZWN1dGluZyBhICovCi0JLyogc2NyaXB0IGlmIENPTk5F Q1Qgd2FzIHRoZSBmaW5hbCBjb21tYW5kIGluIHRoZSBzY3JpcHQuICovCi0JICAgIGlmIChjbWRs dmwgPiAwKQotCSAgICAgIHByZXBvcCgpOwotCSAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwotCi0J ICBkZWZhdWx0OgotCSAgICByZXR1cm4oLTIpOwotCX0KLSAgICB9Ci0jZW5kaWYgLyogU1NIQlVJ TFRJTiAqLwotCi0jaWZkZWYgU0ZUUF9CVUlMVElOCi0gICAgaWYgKGN4ID09IFhYU0ZUUCkgewkJ CS8qIFNGVFAgKFNlY3VyZSBTaGVsbCBGaWxlIFRyYW5zZmVyKSAqLwotCWV4dGVybiBpbnQgbmV0 c2F2ZTsKLQlpbnQgaywgeCwgaGF2ZWhvc3QgPSAwLCB0cmlwcyA9IDA7Ci0gICAgICAgIGludCAg ICB0bXB2ZXIgPSAtMSwgdG1weGZ3ID0gLTE7Ci0jaWZuZGVmIFNTSFRFU1QKLSAgICAgICAgZXh0 ZXJuIGludCBzbF9zc2hfeGZ3LCBzbF9zc2hfeGZ3X3NhdmVkOwotICAgICAgICBleHRlcm4gaW50 IHNsX3NzaF92ZXIsIHNsX3NzaF92ZXJfc2F2ZWQ7Ci0jZW5kaWYgLyogU1NIVEVTVCAqLwotICAg ICAgICBleHRlcm4gaW50IG1kbXR5cCwgbWRtc2F2LCBjeHR5cGUsIHNsX3VpZF9zYXZlZDsKLSAg ICAgICAgZXh0ZXJuIGNoYXIgKiBzbG1zZzsKLQlleHRlcm4gY2hhciB1aWRidWZbXSwgc2xfdWlk YnVmW107Ci0gICAgICAgIGV4dGVybiBjaGFyIHB3YnVmW10sICogZ19wc3dkOwotICAgICAgICBl eHRlcm4gaW50IHB3ZmxnLCBwd2NyeXB0LCBnX3BmbGcsIGdfcGNwdCwgbm9sb2NhbDsKLQlzdHJ1 Y3QgRkRCIHN3LCBrdywgZmw7Ci0KLSAgICAgICAgaWYgKHNzaF90bXBzdHIpCi0JICBtZW1zZXQo c3NoX3RtcHN0ciwwLHN0cmxlbihzc2hfdG1wc3RyKSk7Ci0gICAgICAgIG1ha2VzdHIoJnNzaF90 bXBzdHIsTlVMTCk7Ci0gICAgICAgIG1ha2VzdHIoJnNzaF90bXB1aWQsTlVMTCk7Ci0gICAgICAg IG1ha2VzdHIoJnNzaF90bXBjbWQsTlVMTCk7Ci0gICAgICAgIG1ha2VzdHIoJnNzaF90bXBwb3J0 LE5VTEwpOwotCi0JY21mZGJpKCZrdywJCQkvKiAxc3QgRkRCIC0gY29tbWFuZHMgKi8KLQkgICAg ICAgX0NNS0VZLAkJCS8qIGZjb2RlICovCi0JICAgICAgICJob3N0IFsgcG9ydCBdLFxuIG9yIGFj dGlvbiIsIC8qIGhscG1zZyAqLwotCSAgICAgICAiIiwJCQkvKiBkZWZhdWx0ICovCi0JICAgICAg ICIiLAkJCS8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0JICAgICAgIG5zZnRwa3d0YWIsCQkvKiBh ZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KLQkgICAgICAgMCwJCQkvKiBhZGR0bCBu dW1lcmljIGRhdGEgMjogMCA9IGtleXdvcmQgKi8KLQkgICAgICAgeHhzdHJpbmcsCQkvKiBQcm9j ZXNzaW5nIGZ1bmN0aW9uICovCi0JICAgICAgIHNmdHBrd3RhYiwJCS8qIEtleXdvcmQgdGFibGUg Ki8KLQkgICAgICAgJmZsCQkJLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLwotCSAgICAgICApOwot CWNtZmRiaSgmZmwsCQkJLyogSG9zdCAqLwotCSAgICAgICBfQ01GTEQsCQkJLyogZmNvZGUgKi8K LQkgICAgICAgIiIsCQkJLyogaGxwbXNnICovCi0JICAgICAgICIiLAkJCS8qIGRlZmF1bHQgKi8K LQkgICAgICAgIiIsCQkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLQkgICAgICAgMCwJCQkvKiBh ZGR0bCBudW1lcmljIGRhdGEgMSAqLwotCSAgICAgICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0 YSAyICovCi0JICAgICAgIHh4c3RyaW5nLAotCSAgICAgICBOVUxMLAotCSAgICAgICBOVUxMCi0J ICAgICAgICk7Ci0KLQl4ID0gY21mZGIoJmt3KTsKLQlpZiAoeCA9PSAtMykgewotCSAgICBwcmlu dGYoIj9zZnRwIHdoYXQ/XG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0JaWYgKHggPCAwKQot CSAgcmV0dXJuKHgpOwotCWhhdmVob3N0ID0gMDsKLQlpZiAoY21yZXN1bHQuZmNvZGUgPT0gX0NN RkxEKSB7Ci0JICAgIGhhdmVob3N0ID0gMTsKLQkgICAgY2tzdHJuY3B5KGxpbmUsY21yZXN1bHQu c3Jlc3VsdCxMSU5CVUZTSVopOyAvKiBIb3N0bmFtZSAqLwotCSAgICBjbXJlc3VsdC5ucmVzdWx0 ID0gU0ZUUF9PUE47Ci0JfQotCXN3aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgewkvKiBTRlRQIGtl eXdvcmQgKi8KLQkgIGNhc2UgU0ZUUF9PUE46CQkvKiBTRlRQIE9QRU4gKi8KLQkgICAgaWYgKCFo YXZlaG9zdCkgewotCQlpZiAoKHggPSBjbWZsZCgiSG9zdCIsIiIsJnMseHhzdHJpbmcpKSA8IDAp Ci0JCSAgcmV0dXJuKHgpOwotCQlja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7Ci0JICAgIH0K LQkgICAgLyogUGFyc2UgWyBwb3J0IF0gWyBzd2l0Y2hlcyBdICovCi0JICAgIGNtZmRiaSgma3cs CQkJLyogU3dpdGNoZXMgKi8KLQkJICAgX0NNS0VZLAotCQkgICAiUG9ydCBudW1iZXIgb3Igc2Vy dmljZSBuYW1lLFxub3Igc3dpdGNoIiwKLQkJICAgIiIsCi0JCSAgICIiLAotCQkgICBuc3Noa3Jt b3Buc3csCi0JCSAgIDQsCi0JCSAgIHh4c3RyaW5nLAotCQkgICBzc2hrcm1vcG5zdywKLQkJICAg JmZsCi0JCSAgICk7Ci0JICAgIGNtZmRiaSgmZmwsCQkJLyogUG9ydCBudW1iZXIgb3Igc2Vydmlj ZSBuYW1lICovCi0JCSAgIF9DTUZMRCwKLQkJICAgIiIsCi0JCSAgICIiLAotCQkgICAiIiwKLQkJ ICAgMCwKLQkJICAgMCwKLQkJICAgeHhzdHJpbmcsCi0JCSAgIE5VTEwsCi0JCSAgIE5VTEwKLQkJ ICAgKTsKLQkgICAgdHJpcHMgPSAwOwkJCS8qIEV4cGxhaW5lZCBiZWxvdyAqLwotCSAgICB3aGls ZSAoMSkgewkJCS8qIFBhcnNlIHBvcnQgYW5kIHN3aXRjaGVzICovCi0JCXggPSBjbWZkYigma3cp OwkJLyogR2V0IGEgZmllbGQgKi8KLQkJaWYgKHggPT0gLTMpCQkvKiBVc2VyIHR5cGVkIENSIHNv IHF1aXQgZnJvbSBsb29wICovCi0JCSAgYnJlYWs7Ci0JCWlmICh4IDwgMCkJCS8qIE90aGVyIHBh cnNlIGVycm9yLCBwYXNzIGl0IGJhY2sgKi8KLQkJICByZXR1cm4oeCk7Ci0JCXN3aXRjaCAoY21y ZXN1bHQuZmNvZGUpIHsgLyogRmllbGQgb3IgS2V5d29yZD8gKi8KLSAgICAgICAgICAgICAgICAg IGNhc2UgX0NNRkxEOgkJICAvKiBGaWVsZCAqLwotICAgICAgICAgICAgICAgICAgICBtYWtlc3Ry KCZzc2hfdG1wcG9ydCxjbXJlc3VsdC5zcmVzdWx0KTsKLQkJICAgIGJyZWFrOwotCQkgIGNhc2Ug X0NNS0VZOgkJLyogS2V5d29yZCAqLwotCQkgICAgc3dpdGNoIChjbXJlc3VsdC5ucmVzdWx0KSB7 CS8qIFdoaWNoIG9uZT8gKi8KLQkJICAgICAgY2FzZSBTU0hTV19VU1I6CSAgICAgICAgLyogL1VT RVI6ICovCi0JCQlpZiAoIWNtZ2JyaygpKSB7Ci0JCQkgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2gg cmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOwotCQkJICAgIHJldHVybigtOSk7Ci0JCQl9Ci0JCQlp ZiAoKHkgPSBjbWZsZCgiVXNlcm5hbWUiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQotCQkJICByZXR1 cm4oeSk7Ci0JCQlzID0gYnJzdHJpcChzKTsKLQkJCW1ha2VzdHIoJnNzaF90bXB1aWQscyk7Ci0J CQlicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNTSFNXX1BXRDoKLQkJCWlmICgh Y21nYnJrKCkpIHsKLQkJCSAgICBwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1 bWVudFxuIik7Ci0JCQkgICAgcmV0dXJuKC05KTsKLQkJCX0KLQkJCWRlYm9rID0gMDsKLQkJCWlm ICgoeCA9IGNtZmxkKCJQYXNzd29yZCIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKLQkJCSAgICBp ZiAoeCA9PSAtMykgewotCQkJCW1ha2VzdHIoJnNzaF90bXBzdHIsIiIpOwotCQkJICAgIH0gZWxz ZSB7Ci0JCQkJcmV0dXJuKHgpOwotCQkJICAgIH0KLQkJCX0gZWxzZSB7Ci0JCQkgICAgcyA9IGJy c3RyaXAocyk7Ci0JCQkgICAgaWYgKCh4ID0gKGludClzdHJsZW4ocykpID4gUFdCVUZMKSB7Ci0J CQkJbWFrZXN0cigmc2xtc2csIkludGVybmFsIGVycm9yIik7Ci0JCQkJcHJpbnRmKCI/U29ycnks IHRvbyBsb25nIC0gbWF4ID0gJWRcbiIsUFdCVUZMKTsKLQkJCQlyZXR1cm4oLTkpOwotCQkJICAg IH0KLQkJCSAgICBtYWtlc3RyKCZzc2hfdG1wc3RyLHMpOwotCQkJfQotCQkJYnJlYWs7Ci0KLSAg ICAgICAgICAgICAgICAgICAgY2FzZSBTU0hTV19WRVI6Ci0JCQlpZiAoKHggPSBjbW51bSgiTnVt YmVyIiwiIiwxMCwmeix4eHN0cmluZykpIDwgMCkKLQkJCSAgcmV0dXJuKHgpOwotCQkJaWYgKHog PCAxIHx8IHogPiAyKSB7Ci0JCQkgICAgcHJpbnRmKCI/T3V0IG9mIHJhbmdlOiAlZFxuIix6KTsK LQkJCSAgICByZXR1cm4oLTkpOwotCQkJfQotICAgICAgICAgICAgICAgICAgICAgICAgdG1wdmVy ID0gejsKLQkJCWJyZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKLQkJICAgIH0KLQkJfQotCQlpZiAodHJpcHMrKyA9 PSAwKSB7CS8qIEFmdGVyIGZpcnN0IHRpbWUgdGhyb3VnaCAqLwotCQkgICAgY21mZGJpKCZrdywJ CS8qIG9ubHkgcGFyc2Ugc3dpdGNoZXMsIG5vdCBwb3J0LiAqLwotCQkJICAgX0NNS0VZLAotCQkJ ICAgIlN3aXRjaCIsCi0JCQkgICAiIiwKLQkJCSAgICIiLAotCQkJICAgbnNzaGtybW9wbnN3LAot CQkJICAgNCwKLQkJCSAgIHh4c3RyaW5nLAotCQkJICAgc3Noa3Jtb3Buc3csCi0JCQkgICBOVUxM Ci0JCQkgICApOwotCQl9Ci0JICAgIH0KLQkgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQkvKiBH ZXQgY29uZmlybWF0aW9uICovCi0JICAgICAgcmV0dXJuKHgpOwotICAgICAgICAgICAgICBpZiAo Y2xza2Nvbm54KDEpIDwgMCkgewkvKiBDbG9zZSBjdXJyZW50IEtlcm1pdCBjb25uZWN0aW9uICov Ci0gICAgICAgICAgICAgICAgICBpZiAoIHNzaF90bXBzdHIgKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgbWVtc2V0KHNzaF90bXBzdHIsMCxzdHJsZW4oc3NoX3RtcHN0cikpOwotICAgICAgICAg ICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF90bXBzdHIsTlVMTCk7Ci0gICAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF9oc3QsbGluZSk7CS8qIFN0YXNoIGV2ZXJ5 dGhpbmcgKi8KLSAgICAgICAgICAgICAgaWYgKHNzaF90bXB1aWQpIHsKLSAgICAgICAgICAgICAg ICAgIGlmICghc2xfdWlkX3NhdmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5 KHNsX3VpZGJ1Zix1aWRidWYsVUlEQlVGTEVOKTsKLSAgICAgICAgICAgICAgICAgICAgICBzbF91 aWRfc2F2ZWQgPSAxOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgY2tz dHJuY3B5KHVpZGJ1Zixzc2hfdG1wdWlkLFVJREJVRkxFTik7Ci0gICAgICAgICAgICAgICAgICBt YWtlc3RyKCZzc2hfdG1wdWlkLE5VTEwpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg IGlmIChzc2hfdG1wcG9ydCkgewotICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NoX3BydCxz c2hfdG1wcG9ydCk7Ci0gICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2hfdG1wcG9ydCxOVUxM KTsKLSAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2hf cHJ0LE5VTEwpOwotCi0gICAgICAgICAgICAgIC8qIFNldCB0aGUgU3Vic3lzdGVtIHRvIEtlcm1p dCAqLwotICAgICAgICAgICAgICBzc2hfY2FzID0gMTsKLSAgICAgICAgICAgICAgbWFrZXN0cigm c3NoX2NtZCwic2Z0cCIpOwotCi0gICAgICAgICAgICAgIGlmICh0bXB2ZXIgPiAtMSkgewotI2lm bmRlZiBTU0hURVNUCi0gICAgICAgICAgICAgICAgICBpZiAoIXNsX3NzaF92ZXJfc2F2ZWQpIHsK LSAgICAgICAgICAgICAgICAgICAgICBzbF9zc2hfdmVyID0gc3NoX3ZlcjsKLSAgICAgICAgICAg ICAgICAgICAgICBzbF9zc2hfdmVyX3NhdmVkID0gMTsKLSAgICAgICAgICAgICAgICAgIH0KLSNl bmRpZiAvKiBTU0hURVNUICovCi0gICAgICAgICAgICAgICAgICBzc2hfdmVyID0gdG1wdmVyOwot ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIC8qIERpc2FibGUgWDExIEZvcndhcmRpbmcg Ki8KLSNpZm5kZWYgU1NIVEVTVAotICAgICAgICAgICAgICBpZiAoIXNsX3NzaF94Zndfc2F2ZWQp IHsKLSAgICAgICAgICAgICAgICAgIHNsX3NzaF94ZncgPSBzc2hfeGZ3OwotICAgICAgICAgICAg ICAgICAgc2xfc3NoX3hmd19zYXZlZCA9IDE7Ci0gICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBT U0hURVNUICovCi0gICAgICAgICAgICAgIHNzaF94ZncgPSAwOwotCi0gICAgICAgICAgICAgIGlm IChzc2hfdG1wc3RyKSB7Ci0gICAgICAgICAgICAgICAgICBpZiAoc3NoX3RtcHN0clswXSkgewot ICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShwd2J1Zixzc2hfdG1wc3RyLFBXQlVGTCsx KTsKLSAgICAgICAgICAgICAgICAgICAgICBwd2ZsZyA9IDE7Ci0gICAgICAgICAgICAgICAgICAg ICAgcHdjcnlwdCA9IDA7Ci0gICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg ICAgICAgICBwd2ZsZyA9IDA7Ci0gICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2hfdG1wc3Ry LE5VTEwpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIG5ldHR5cGUgPSBORVRfU1NI OwotICAgICAgICAgICAgICBpZiAobWRtc2F2IDwgMCkKLSAgICAgICAgICAgICAgICAgIG1kbXNh diA9IG1kbXR5cDsKLSAgICAgICAgICAgICAgbWRtdHlwID0gLW5ldHR5cGU7Ci0gICAgICAgICAg ICAgIHggPSAxOwotCi0jaWZuZGVmIE5PU1BMCi0gICAgICAgICAgICBtYWtlc3RyKCZnX3Bzd2Qs cHdidWYpOyAgICAgICAgICAgICAvKiBTYXZlIGdsb2JhbCBwd2J1ZiAqLwotICAgICAgICAgICAg Z19wZmxnID0gcHdmbGc7ICAgICAgICAgICAgICAgICAgICAgLyogYW5kIGZsYWcgKi8KLSAgICAg ICAgICAgIGdfcGNwdCA9IHB3Y3J5cHQ7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotCSAgICAvKiBM aW5lIHBhcmFtZXRlciB0byB0dG9wZW4oKSBpcyBpZ25vcmVkICovCi0JICAgIGsgPSB0dG9wZW4o bGluZSwmeCxtZG10eXAsIDApOwotCSAgICBpZiAoayA8IDApIHsKLQkJcHJpbnRmKCI/VW5hYmxl IHRvIGNvbm5lY3QgdG8gJXNcbiIsc3NoX2hzdCk7Ci0JCW1kbXR5cCA9IG1kbXNhdjsKLSAgICAg ICAgICAgICAgICBzbHJlc3RvcigpOwotCQlyZXR1cm4oc3VjY2VzcyA9IDApOwotCSAgICB9Ci0J ICAgIGR1cGxleCA9IDA7ICAgICAgICAgICAgIC8qIFJlbW90ZSBlY2hvICovCi0JICAgIGNrc3Ry bmNweSh0dG5hbWUsbGluZSxUVE5BTUxFTik7IC8qIFJlY29yZCB0aGUgY29tbWFuZCAqLwotCSAg ICBkZWJ1ZyhGMTEwLCJzc2ggdHRuYW1lIix0dG5hbWUsMCk7Ci0JICAgIG1ha2VzdHIoJnNsbXNn LE5VTEwpOwkvKiBObyBTRVQgTElORSBlcnJvciBtZXNzYWdlICovCi0JICAgIGN4dHlwZSA9IENY VF9TU0g7Ci0jaWZuZGVmIE5PRElBTAotCSAgICBkaWFsc3RhID0gRElBX1VOSzsKLSNlbmRpZiAv KiBOT0RJQUwgKi8KLQkgICAgc3VjY2VzcyA9IDE7CQkvKiBTRVQgTElORSBzdWNjZWVkZWQgKi8K LQkgICAgbmV0d29yayA9IDE7CQkvKiBOZXR3b3JrIGNvbm5lY3Rpb24gKG5vdCBzZXJpYWwpICov Ci0JICAgIGxvY2FsID0gMTsJCQkvKiBMb2NhbCBtb2RlIChub3QgcmVtb3RlKSAqLwotCSAgICBp ZiAoKHJlbGlhYmxlICE9IFNFVF9PRkYgfHwgIXNldHJlbGlhYmxlKSkKLQkgICAgICByZWxpYWJs ZSA9IFNFVF9PTjsJLyogVHJhbnNwb3J0IGlzIHJlbGlhYmxlIGVuZCB0byBlbmQgKi8KLSNpZmRl ZiBPUzIKLSAgICAgICAgICAgIERpYWxlclNlbmQoT1BUX0tFUk1JVF9DT05ORUNULCAwKTsKLSNl bmRpZiAvKiBPUzIgKi8KLQkgICAgc2V0ZmxvdygpOwkJCS8qIFNldCBhcHByb3ByaWF0ZSBmbG93 IGNvbnRyb2wgKi8KLQotCSAgICBoYXZlbGluZSA9IDE7Ci0jaWZkZWYgQ0tMT0dESUFMCi0jaWZk ZWYgTkVUQ09OTgotCSAgICBkb2xvZ25ldCgpOwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSNlbmRp ZiAvKiBDS0xPR0RJQUwgKi8KLQotI2lmbmRlZiBOT1NQTAotCSAgICBpZiAobG9jYWwpIHsKLQkJ aWYgKG5tYWMpIHsJCS8qIEFueSBtYWNyb3MgZGVmaW5lZD8gKi8KLQkJICAgIGludCBrOwkJLyog WWVzICovCi0JCSAgICBrID0gbWxvb2sobWFjdGFiLCJvbl9vcGVuIixubWFjKTsgLyogTG9vayB0 aGlzIHVwICovCi0JCSAgICBpZiAoayA+PSAwKSB7CSAgICAgICAgICAgICAgLyogSWYgZm91bmQs ICovCi0JCQlpZiAoZG9kbyhrLHNzaF9oc3QsMCkgPiAtMSkgICAvKiBzZXQgaXQgdXAsICovCi0J CQkgIHBhcnNlcigxKTsJCSAgICAgIC8qIGFuZCBleGVjdXRlIGl0ICovCi0JCSAgICB9Ci0JCX0K LQkgICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0jaWZkZWYgTE9DVVMJCQotCSAgICBpZiAoYXV0 b2xvY3VzKQotCQlzZXRsb2N1cygxLDEpOwotI2VuZGlmIC8qIExPQ1VTICovCi0KLQkvKiBDb21t YW5kIHdhcyBjb25maXJtZWQgc28gd2UgY2FuIHByZS1wb3AgY29tbWFuZCBsZXZlbC4gKi8KLQkv KiBUaGlzIGlzIHNvIENPTk5FQ1QgbW9kdWxlIHdvbid0IHRoaW5rIHdlJ3JlIGV4ZWN1dGluZyBh ICovCi0JLyogc2NyaXB0IGlmIENPTk5FQ1Qgd2FzIHRoZSBmaW5hbCBjb21tYW5kIGluIHRoZSBz Y3JpcHQuICovCi0JICAgIGlmIChjbWRsdmwgPiAwKQotCSAgICAgIHByZXBvcCgpOwotCi0gICAg ICAgICAgICBzdWNjZXNzID0gc2Z0cF9kb19pbml0KCk7Ci0JICAgIHJldHVybihzdWNjZXNzID0g MSk7Ci0KLQkgIGNhc2UgU0ZUUF9DRDoKLQkgIGNhc2UgU0ZUUF9DSEdSUDoKLQkgIGNhc2UgU0ZU UF9DSE1PRDoKLQkgIGNhc2UgU0ZUUF9DSE9XTjoKLQkgIGNhc2UgU0ZUUF9STToKLQkgIGNhc2Ug U0ZUUF9ESVI6Ci0JICBjYXNlIFNGVFBfR0VUOgotCSAgY2FzZSBTRlRQX01LRElSOgotCSAgY2Fz ZSBTRlRQX1BVVDoKLQkgIGNhc2UgU0ZUUF9QV0Q6Ci0JICBjYXNlIFNGVFBfUkVOOgotCSAgY2Fz ZSBTRlRQX1JNRElSOgotCSAgY2FzZSBTRlRQX0xJTks6Ci0JICBjYXNlIFNGVFBfVkVSOgotCSAg ICBpZiAoKHkgPSBjbXR4dCgiY29tbWFuZCBwYXJhbWV0ZXJzIiwiIiwmcyx4eHN0cmluZykpIDwg MCkgCi0JICAgICAgcmV0dXJuKHkpOwotCSAgICBpZiAoc3NoX3RjaGsoKSA8IDAgfHwgIXNzaF9j YXMgfHwgc3RyY21wKHNzaF9jbWQsInNmdHAiKSkgewotCQlwcmludGYoIj9Ob3QgY29ubmVjdGVk IHRvIFNGVFAgU2VydmljZVxuIik7Ci0JCXJldHVybihzdWNjZXNzID0gMCk7Ci0JICAgIH0KLQkg ICAgc3VjY2VzcyA9IHNmdHBfZG9fY21kKGNtcmVzdWx0Lm5yZXN1bHQscyk7Ci0JICAgIHJldHVy bihzdWNjZXNzKTsKLQkgIGRlZmF1bHQ6Ci0JICAgIHJldHVybigtMik7Ci0JfQotICAgIH0KLSNl bmRpZiAvKiBTRlRQX0JVSUxUSU4gKi8KLQotICAgIGlmIChjeCA9PSBYWFJMT0cpIHsJCQkvKiBS TE9HSU4gKi8KLSNpZmRlZiBSTE9HQ09ERQotCWludCB4LHo7Ci0jaWZkZWYgT1MyCi0JaWYgKCF0 Y3BfYXZhaWwpIHsKLQkgICAgcHJpbnRmKCI/U29ycnksIGVpdGhlciBUQ1AvSVAgaXMgbm90IGF2 YWlsYWJsZSBvbiB0aGlzIHN5c3RlbSBvclxuXAotbmVjZXNzYXJ5IERMTHMgZGlkIG5vdCBsb2Fk LiAgVXNlIFNIT1cgTkVUV09SSyB0byBjaGVjayBuZXR3b3JrIHN0YXR1cy5cbiIKLQkJICAgKTsK LQkgICAgc3VjY2VzcyA9IDA7Ci0JICAgIHJldHVybigtOSk7Ci0JfSBlbHNlIHsKLSNlbmRpZiAv KiBPUzIgKi8KLQkgICAgeCA9IG5ldHR5cGU7CQkvKiBTYXZlIG5ldCB0eXBlIGluIGNhc2Ugb2Yg ZmFpbHVyZSAqLwotCSAgICB6ID0gdHRucHJvdG87CQkvKiBTYXZlIHByb3RvY29sIGluIGNhc2Ug b2YgZmFpbHVyZSAqLwotCSAgICBuZXR0eXBlID0gTkVUX1RDUEI7Ci0JICAgIHR0bnByb3RvID0g TlBfUkxPR0lOOwotCSAgICBpZiAoKHkgPSBzZXRsaW4oWFlIT1NULDAsMSkpIDw9IDApIHsKLQkJ bmV0dHlwZSA9IHg7CQkvKiBGYWlsZWQsIHJlc3RvcmUgbmV0IHR5cGUuICovCi0JCXR0bnByb3Rv ID0gejsJCS8qIGFuZCBwcm90b2NvbCAqLwotCQlzdWNjZXNzID0gMDsKLQkgICAgfQotCSAgICBk aWRzZXRsaW4rKzsKLSNpZmRlZiBPUzIKLQl9Ci0jZW5kaWYgLyogT1MyICovCi0JcmV0dXJuKHkp OwotI2Vsc2UKLQlwcmludGYoIj9Tb3JyeSwgUkxPR0lOIGlzIG5vdCBjb25maWd1cmVkIGluIHRo aXMgY29weSBvZiBDLUtlcm1pdC5cbiIpOwotCXJldHVybigtOSk7Ci0jZW5kaWYgLyogUkxPR0NP REUgKi8KLSAgICB9Ci0jZW5kaWYgLyogTkVUQ09OTiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8K LQotI2lmbmRlZiBOT1hNSVQKLSAgICBpZiAoY3ggPT0gWFhUUkEpIHsJCQkvKiBUUkFOU01JVCAq LwotCWV4dGVybiBpbnQgeGZyeGxhOwotCWludCBpLCBuLCB4cGlwZSA9IDAsIHhiaW5hcnkgPSAw LCB4eGxhdGUgPSAxLCB4eG5vd2FpdCA9IDAsIGdldHZhbDsKLQlpbnQgeHhlY2hvID0gMDsKLQlp bnQgc2NhbiA9IDE7Ci0JY2hhciBjOwotCXN0cnVjdCBGREIgc2YsIHN3LCB0eDsJCS8qIEZEQnMg Zm9yIHBhcnNlIGZ1bmN0aW9ucyAqLwotI2lmbmRlZiBOT0NTRVRTCi0JZXh0ZXJuIGludCB0Y3Nf dHJhbnNwOwkJLyogVGVybSBjaGFyc2V0IGlzIHRyYW5zcGFyZW50ICovCi0jZWxzZQotCWludCB0 Y3NfdHJhbnNwID0gMTsKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSNpZmRlZiBDT01NRU5UCi0J eGJpbmFyeSA9IGJpbmFyeTsJCS8qIERlZmF1bHQgdGV4dC9iaW5hcnkgbW9kZSAqLwotI2Vsc2UK LQl4YmluYXJ5ID0gMDsJCQkvKiBEZWZhdWx0IGlzIHRleHQgKi8KLSNlbmRpZiAvKiBDT01NRU5U ICovCi0JeHhlY2hvID0geG1pdHg7Ci0KLQljbWZkYmkoJnN3LAkJCS8qIEZpcnN0IEZEQiAtIGNv bW1hbmQgc3dpdGNoZXMgKi8KLQkgICAgICAgX0NNS0VZLAkJCS8qIGZjb2RlICovCi0JICAgICAg ICJGaWxlbmFtZSwgb3Igc3dpdGNoIiwJLyogaGxwbXNnICovCi0JICAgICAgICIiLAkJCS8qIGRl ZmF1bHQgKi8KLQkgICAgICAgIiIsCQkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KLQkgICAgICAg bnhtaXRzdywJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KLQkgICAgICAg NCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICovCi0JICAgICAgIHh4c3Ry aW5nLAkJLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwotCSAgICAgICB4bWl0c3csCQkJLyogS2V5 d29yZCB0YWJsZSAqLwotCSAgICAgICAmc2YJCQkvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCi0J ICAgICAgICk7Ci0JY21mZGJpKCZzZiwJCQkvKiAybmQgRkRCIC0gZmlsZSB0byBzZW5kICovCi0J ICAgICAgIF9DTUlGSSwJCQkvKiBmY29kZSAqLwotCSAgICAgICAiRmlsZSB0byB0cmFuc21pdCIs CS8qIGhscG1zZyAqLwotCSAgICAgICAiIiwJCQkvKiBkZWZhdWx0ICovCi0JICAgICAgICIiLAkJ CS8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0JICAgICAgIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBk YXRhIDEgKi8KLQkgICAgICAgMCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLwotCSAgICAg ICB4eHN0cmluZywKLQkgICAgICAgTlVMTCwKLSNpZmRlZiBQSVBFU0VORAotCSAgICAgICAmdHgK LSNlbHNlCi0JICAgICAgIE5VTEwKLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotCSAgICAgICApOwot I2lmZGVmIFBJUEVTRU5ECi0gICAgICAgIGNtZmRiaSgmdHgsCi0JICAgICAgIF9DTVRYVCwJCQkv KiBmY29kZSAqLwotCSAgICAgICAiQ29tbWFuZCIsCQkvKiBobHBtc2cgKi8KLQkgICAgICAgIiIs CQkJLyogZGVmYXVsdCAqLwotCSAgICAgICAiIiwJCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwot CSAgICAgICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCi0JICAgICAgIDAsCQkJLyog YWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KLQkgICAgICAgeHhzdHJpbmcsCi0JICAgICAgIE5VTEws Ci0JICAgICAgIE5VTEwKLQkgICAgICAgKTsKLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotCi0Jd2hp bGUgKDEpIHsKLQkgICAgeCA9IGNtZmRiKCZzdyk7Ci0JICAgIGlmICh4IDwgMCkKLQkgICAgICBy ZXR1cm4oeCk7Ci0JICAgIGlmIChjbXJlc3VsdC5mY29kZSAhPSBfQ01LRVkpCi0JICAgICAgYnJl YWs7Ci0JICAgIGMgPSBjbWdicmsoKTsJCS8qIEhhdmUgc3dpdGNoLCBnZXQgYnJlYWsgY2hhcmFj dGVyICovCi0JICAgIGlmICgoZ2V0dmFsID0gKGMgPT0gJzonIHx8IGMgPT0gJz0nKSkgJiYgIShj bWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKLQkJcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3Qg dGFrZSBhbiBhcmd1bWVudFxuIik7Ci0JCXJldHVybigtOSk7Ci0JICAgIH0KLQkgICAgaWYgKCFn ZXR2YWwgJiYgKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgewotCQlwcmludGYoIj9UaGlzIHN3aXRj aCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7Ci0JCXJldHVybigtOSk7Ci0JICAgIH0KLQkgICAg biA9IGNtcmVzdWx0Lm5yZXN1bHQ7CS8qIE51bWVyaWMgcmVzdWx0ID0gc3dpdGNoIElEICovCi0J ICAgIHN3aXRjaCAobikgewkJLyogUHJvY2VzcyB0aGUgc3dpdGNoICovCi0jaWZkZWYgUElQRVNF TkQKLQkgICAgICBjYXNlIFhNSV9DTUQ6CQkvKiBUcmFuc21pdCBmcm9tIGEgY29tbWFuZCAqLwot CQlpZiAobm9wdXNoKSB7Ci0JCSAgICBwcmludGYoIj9Tb3JyeSwgc3lzdGVtIGNvbW1hbmQgYWNj ZXNzIGlzIGRpc2FibGVkXG4iKTsKLQkJICAgIHJldHVybigtOSk7Ci0JCX0KLQkJc3cuaGxwbXNn ID0gIkNvbW1hbmQsIG9yIHN3aXRjaCI7IC8qIENoYW5nZSBoZWxwIG1lc3NhZ2UgKi8KLQkJeHBp cGUgPSAxOwkJLyogKE5vIHdheSB0byB1bmRvIHRoaXMgb25lKSAqLwotCQlicmVhazsKLSNlbmRp ZiAvKiBQSVBFU0VORCAqLwotCi0JICAgICAgY2FzZSBYTUlfQklOOgkJLyogQmluYXJ5ICovCi0J CXhiaW5hcnkgPSAxOwotCQl4eGxhdGUgPSAwOwkJLyogRG9uJ3QgdHJhbnNsYXRlIGNoYXJzZXRz ICovCi0JCXNjYW4gPSAwOwotCQlicmVhazsKLQotCSAgICAgIGNhc2UgWE1JX1RYVDoJCS8qIFRl eHQgKi8KLQkJeGJpbmFyeSA9IDA7Ci0JCXh4bGF0ZSA9ICF0Y3NfdHJhbnNwOwkvKiBUcmFuc2xh dGUgaWYgVEVSTSBDSEFSIG5vdCBUUkFOU1AgKi8KLQkJc2NhbiA9IDA7Ci0JCWJyZWFrOwotCi0J ICAgICAgY2FzZSBYTUlfVFJBOgkJLyogVHJhbnNwYXJlbnQgdGV4dCAqLwotCQl4YmluYXJ5ID0g MDsKLQkJeHhsYXRlID0gMDsJCS8qIEJ1dCBkb24ndCB0cmFuc2xhdGUgY2hhcnNldHMgKi8KLQkJ c2NhbiA9IDA7Ci0JCWJyZWFrOwotCi0jaWZkZWYgQ09NTUVOVAotCSAgICAgIGNhc2UgWE1JX1ZS QjoJCS8qIC9WRVJCT1NFICovCi0JICAgICAgY2FzZSBYTUlfUVVJOgkJLyogL1FVSUVUICovCi0J CWJyZWFrOwkJCS8qIChub3QgaW1wbGVtZW50ZWQgeWV0KSAqLwotI2VuZGlmIC8qIENPTU1FTlQg Ki8KLQotCSAgICAgIGNhc2UgWE1JX05PVzoJCS8qIC9OT1dBSVQgKi8KLQkJeHhub3dhaXQgPSAx OwotCQlicmVhazsKLQotCSAgICAgIGNhc2UgWE1JX05PRToJCS8qIC9OT1dBSVQgKi8KLQkJeHhl Y2hvID0gMDsKLQkJYnJlYWs7Ci0KLQkgICAgICBkZWZhdWx0OgotCQlyZXR1cm4oLTIpOwotCSAg ICB9Ci0KLQl9Ci0JaWYgKGNtcmVzdWx0LmZjb2RlICE9IF9DTUlGSSAmJiBjbXJlc3VsdC5mY29k ZSAhPSBfQ01UWFQpCi0JICByZXR1cm4oLTIpOwotCWNrc3RybmNweShsaW5lLGNtcmVzdWx0LnNy ZXN1bHQsTElOQlVGU0laKTsgLyogRmlsZW5hbWUgKi8KLQlpZiAoemZucWZwKGxpbmUsVE1QQlVG U0laLHRtcGJ1ZikpCi0JICBja3N0cm5jcHkobGluZSx0bXBidWYsTElOQlVGU0laKTsKLQlzID0g bGluZTsKLQlpZiAoKHkgPSBjbWNmbSgpKSA8IDApCQkvKiBDb25maXJtICovCi0JICByZXR1cm4o eSk7Ci0jaWZkZWYgQ0tfQVBDCi0JaWYgKChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMKSB8fAotCSAg ICAoKGFwY2FjdGl2ZSA9PSBBUENfUkVNT1RFKSAmJiAoIShhcGNzdGF0dXMgJiBBUENfVU5DSCkp KSkKLQkgIHJldHVybihzdWNjZXNzID0gMCk7Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0JaWYgKGNt cmVzdWx0Lm5yZXN1bHQgIT0gMCkgewotCSAgICBwcmludGYoIj9Pbmx5IGEgc2luZ2xlIGZpbGUg bWF5IGJlIHRyYW5zbWl0dGVkXG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0jaWZkZWYgUElQ RVNFTkQKLQlpZiAoeHBpcGUpIHsKLQkgICAgcyA9IGJyc3RyaXAocyk7Ci0JICAgIGlmICghKnMp IHsKLQkJcHJpbnRmKCI/U29ycnksIGEgY29tbWFuZCB0byBzZW5kIGZyb20gaXMgcmVxdWlyZWRc biIpOwotCQlyZXR1cm4oLTkpOwotCSAgICB9Ci0JICAgIHBpcGVzZW5kID0gMTsKLQl9Ci0jZW5k aWYgLyogUElQRVNFTkQgKi8KLQotCWlmIChzY2FuICYmIChmaWxlcGVlawotI2lmbmRlZiBOT1hG RVIKLQkJICAgICB8fCBwYXR0ZXJucwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCQkgICAgICkpIHsJ CS8qIElmIHVzZXIgZGlkbid0IHNwZWNpZnkgdHlwZSAqLwotCSAgICBpbnQgaywgeDsJCQkgICAg ICAvKiBzY2FuIHRoZSBmaWxlIHRvIHNlZSAqLwotCSAgICB4ID0gLTE7Ci0JICAgIGsgPSBzY2Fu ZmlsZShzLCZ4LG5zY2FuZmlsZSk7Ci0JICAgIGlmIChrID4gMCkgeGJpbmFyeSA9IChrID09IEZU X0JJTikgPyBYWUZUX0IgOiBYWUZUX1Q7Ci0JfQotCWlmICgheGZyeGxhKSB4eGxhdGUgPSAwOwot CXN1Y2Nlc3MgPSB0cmFuc21pdChzLAotCQkJICAgKGNoYXIpICh4eG5vd2FpdCA/ICdcMCcgOiAo Y2hhcil4bWl0cCksCi0JCQkgICB4eGxhdGUsCi0JCQkgICB4YmluYXJ5LAotCQkJICAgeHhlY2hv Ci0JCQkgICApOwotCXJldHVybihzdWNjZXNzKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9YTUlUICov Ci0KLSNpZm5kZWYgTk9GUklMTFMKLSAgICBpZiAoY3ggPT0gWFhUWVAgIHx8IGN4ID09IFhYQ0FU IHx8IGN4ID09IFhYTU9SRSB8fAotCWN4ID09IFhYSEVBRCB8fCBjeCA9PSBYWFRBSUwpIHsKLQlp bnQgcGFnaW5nID0gMCwgaGF2ZW5hbWUgPSAwLCBoZWFkID0gMCwgd2lkdGggPSAwOwotCWludCBo ZWlnaHQgPSAwLCBjb3VudCA9IDA7Ci0JY2hhciBwZnhidWZbNjRdLCAqIHByZWZpeCA9IE5VTEw7 Ci0JY2hhciBvdXRmaWxlW0NLTUFYUEFUSCsxXTsKLQlzdHJ1Y3QgRkRCIHNmLCBzdzsKLQljaGFy ICogcGF0ID0gTlVMTDsKLQlpbnQgaW5jcyA9IDAsIG91dGNzID0gMCwgY3NldCA9IC0xLCBudW1i ZXIgPSAwOwotI2lmZGVmIFVOSUNPREUKLSAgICAgICAgY2hhciAqIHRvY3MgPSAiIjsKLQlleHRl cm4gaW50IGZpbGVvcmRlcjsKLSNpZmRlZiBPUzIKLSNpZmRlZiBOVAotCWNoYXIgZ3VpYnVmWzEy OF0sICogZ3VpX3RpdGxlID0gTlVMTDsKLQlpbnQgIGd1aSA9IDA7Ci0jZW5kaWYgLyogTlQgKi8K LSNpZm5kZWYgTk9DU0VUUwotCWV4dGVybiBpbnQgdGNzciwgdGNzbDsKLSNlbmRpZiAvKiBOT0NT RVRTICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogVU5JQ09ERSAqLwotCi0Jb3V0Zmls ZVswXSA9IE5VTDsKLQotCWlmIChjeCA9PSBYWE1PUkUpCi0JICBwYWdpbmcgPSAxOwotCWVsc2Ug aWYgKGN4ID09IFhYQ0FUKQotCSAgcGFnaW5nID0gMDsKLQllbHNlCi0JICBwYWdpbmcgPSAodHlw X3BhZ2UgPCAwKSA/IHhhc2ttb3JlIDogdHlwX3BhZ2U7Ci0JaWYgKHBhZ2luZyA8IDApCi0JICBw YWdpbmcgPSBzYXZlYXNrOwotCi0JaWYgKGN4ID09IFhYSEVBRCkgewotCSAgICBoZWFkID0gMTA7 Ci0JICAgIGN4ID0gWFhUWVA7Ci0JfSBlbHNlIGlmIChjeCA9PSBYWFRBSUwpIHsKLQkgICAgaGVh ZCA9IC0xMDsKLQkgICAgY3ggPSBYWFRZUDsKLQl9Ci0KLSNpZmRlZiBJS1NECi0JaWYgKGluc2Vy dmVyICYmICFFTkFCTEVEKGVuX3R5cCkpIHsKLQkgICAgcHJpbnRmKCI/U29ycnksIFRZUEUgY29t bWFuZCBkaXNhYmxlZFxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotI2VuZGlmIC8qIElLU0Qg Ki8KLQotCWNtZmRiaSgmc3csCQkJLyogMm5kIEZEQiAtIG9wdGlvbmFsIC9QQUdFIHN3aXRjaCAq LwotCSAgICAgICBfQ01LRVksCQkJLyogZmNvZGUgKi8KLQkgICAgICAgIkZpbGVuYW1lIG9yIHN3 aXRjaCIsCS8qIGhscG1zZyAqLwotCSAgICAgICAiIiwJCQkvKiBkZWZhdWx0ICovCi0JICAgICAg ICIiLAkJCS8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0JICAgICAgIG50eXBldGFiLAkJLyogYWRk dGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCi0JICAgICAgIDQsCQkJLyogYWRkdGwgbnVt ZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLwotCSAgICAgICB4eHN0cmluZywJCS8qIFByb2Nlc3Np bmcgZnVuY3Rpb24gKi8KLQkgICAgICAgdHlwZXRhYiwJCQkvKiBLZXl3b3JkIHRhYmxlICovCi0J ICAgICAgICZzZgkJCS8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KLQkgICAgICAgKTsKLQljbWZk YmkoJnNmLAkJCS8qIDFzdCBGREIgLSBmaWxlIHRvIHR5cGUgKi8KLQkgICAgICAgX0NNSUZJLAkJ CS8qIGZjb2RlICovCi0JICAgICAgICIiLAkJCS8qIGhscG1zZyAqLwotCSAgICAgICAiIiwJCQkv KiBkZWZhdWx0ICovCi0JICAgICAgICIiLAkJCS8qIGFkZHRsIHN0cmluZyBkYXRhICovCi0JICAg ICAgIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KLQkgICAgICAgMCwJCQkvKiBhZGR0 bCBudW1lcmljIGRhdGEgMiAqLwotCSAgICAgICB4eHN0cmluZywKLQkgICAgICAgTlVMTCwKLQkg ICAgICAgTlVMTAotCSAgICAgICApOwotCi0Jd2hpbGUgKCFoYXZlbmFtZSkgewotCSAgICB4ID0g Y21mZGIoJnN3KTsJCS8qIFBhcnNlIHNvbWV0aGluZyAqLwotCSAgICBkZWJ1ZyhGMTAxLCJ0eXBl IGNtZmRiIiwiIix4KTsKLQkgICAgZGVidWcoRjEwMSwidHlwZSBjbXJlc3VsdC5mY29kZSIsIiIs Y21yZXN1bHQuZmNvZGUpOwotCSAgICBkZWJ1ZyhGMTAxLCJ0eXBlIGNtcmVzdWx0Lm5yZXN1bHQi LCIiLGNtcmVzdWx0Lm5yZXN1bHQpOwotCSAgICBpZiAoeCA8IDApIHsJCQkvKiBFcnJvciAqLwot CQlpZiAoeCA9PSAtMykgewotCQkgICAgeCA9IC05OwotCQkgICAgcHJpbnRmKCI/RmlsZW5hbWUg cmVxdWlyZWRcbiIpOwotCQl9Ci0JCXJldHVybih4KTsKLQkgICAgfSBlbHNlIGlmIChjbXJlc3Vs dC5mY29kZSA9PSBfQ01LRVkpIHsKLQkJY2hhciBjOyBpbnQgZ2V0dmFsOwotCQljID0gY21nYnJr KCk7Ci0JCWdldHZhbCA9IChjID09ICc6JyB8fCBjID09ICc9Jyk7Ci0JCWlmIChnZXR2YWwgJiYg IShjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKLQkJICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIGRv ZXMgbm90IHRha2UgYW4gYXJndW1lbnRcbiIpOwotCQkgICAgcmV0dXJuKC05KTsKLQkJfQotI2lm ZGVmIENPTU1FTlQKLQkJaWYgKCFnZXR2YWwgJiYgKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgewot CQkgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOwotCQkg ICAgLyogTm90IGlmIGl0IGhhcyBhIGRlZmF1bHQhICovCi0JCSAgICByZXR1cm4oLTkpOwotCQl9 Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCQlzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsKLSNp ZmRlZiBDS19UVEdXU0laCi0JCSAgY2FzZSBUWVBfUEFHOgotCQkgICAgcGFnaW5nID0gMTsKLQkJ ICAgIGJyZWFrOwotCi0JCSAgY2FzZSBUWVBfTk9QOgotCQkgICAgcGFnaW5nID0gMDsKLQkJICAg IGJyZWFrOwotI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KLQotCQkgIGNhc2UgVFlQX0NPVToKLQkJ ICAgIHBhZ2luZyA9IDA7Ci0JCSAgICBjb3VudCA9IDE7Ci0JCSAgICBicmVhazsKLQotCQkgIGNh c2UgVFlQX0hFQToKLQkJICBjYXNlIFRZUF9UQUk6Ci0JCSAgICB5ID0gMTA7Ci0JCSAgICBpZiAo Z2V0dmFsKQotCQkgICAgICBpZiAoKHggPSBjbW51bSgiTnVtYmVyIG9mIGxpbmVzIiwKLQkJCQkg ICAgICIxMCIsMTAsJnkseHhzdHJpbmcpKSA8IDApCi0JCQlyZXR1cm4oeCk7Ci0JCSAgICBoZWFk ID0gKGNtcmVzdWx0Lm5yZXN1bHQgPT0gVFlQX1RBSSkgPyAteSA6IHk7Ci0JCSAgICBicmVhazsK LQotCQkgIGNhc2UgVFlQX1dJRDoKLQkJICAgIHkgPSB0eXBfd2lkID4gLTEgPyB0eXBfd2lkIDog Y21kX2NvbHM7Ci0JCSAgICBpZiAoZ2V0dmFsKQotCQkgICAgICBpZiAoKHggPSBjbW51bSgiQ29s dW1uIGF0IHdoaWNoIHRvIHRydW5jYXRlIiwKLQkJCQkgICAgIGNraXRvYSh5KSwxMCwmeSx4eHN0 cmluZykpIDwgMCkKLQkJCXJldHVybih4KTsKLQkJICAgIHdpZHRoID0geTsKLQkJICAgIGJyZWFr OwotCi0jaWZkZWYgS1VJCi0JCSAgY2FzZSBUWVBfSElHOgotCQkgICAgaWYgKGdldHZhbCkKLQkJ ICAgICAgaWYgKCh4ID0gY21udW0oIkhlaWdodCBvZiBHVUkgZGlhbG9nIiwKLQkJCQkgICAgIGNr aXRvYSh5KSwxMCwmeSx4eHN0cmluZykpIDwgMCkKLQkJCXJldHVybih4KTsKLQkJICAgIGhlaWdo dCA9IHk7Ci0JCSAgICBicmVhazsKLSNlbmRpZiAvKiBLVUkgKi8KLQotCQkgIGNhc2UgVFlQX1BB VDoKLQkJICAgIGlmICghZ2V0dmFsICYmIChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKLQkJCXBy aW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKLQkJCXJldHVybigt OSk7Ci0JCSAgICB9Ci0JCSAgICBpZiAoKHggPSBjbWZsZCgicGF0dGVybiIsIiIsJnMseHhzdHJp bmcpKSA8IDApCi0JCSAgICAgIHJldHVybih4KTsKLQkJICAgIGNrc3RybmNweSh0bXBidWYscyxU TVBCVUZTSVopOwotCQkgICAgcGF0ID0gdG1wYnVmOwotCQkgICAgYnJlYWs7Ci0KLQkJICBjYXNl IFRZUF9QRlg6Ci0JCSAgICBpZiAoIWdldHZhbCAmJiAoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7 Ci0JCQlwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7Ci0JCQly ZXR1cm4oLTkpOwotCQkgICAgfQotCQkgICAgaWYgKCh4ID0gY21mbGQoInByZWZpeCBmb3IgZWFj aCBsaW5lIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKLQkJICAgICAgcmV0dXJuKHgpOwotCQkgICAg aWYgKChpbnQpc3RybGVuKHMpID4gNjMpIHsKLQkJCXByaW50ZigiP1RvbyBsb25nIC0gNjMgbWF4 XG4iKTsKLQkJCXJldHVybigtOSk7Ci0JCSAgICB9Ci0JCSAgICBja3N0cm5jcHkocGZ4YnVmLHMs NjQpOwotCQkgICAgcHJlZml4ID0gYnJzdHJpcChwZnhidWYpOwotCQkgICAgbnVtYmVyID0gMDsK LQkJICAgIGJyZWFrOwotCi0jaWZkZWYgS1VJCi0JCSAgY2FzZSBUWVBfR1VJOgotCQkgICAgaWYg KCFnZXR2YWwgJiYgKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgewotCQkJcHJpbnRmKCI/VGhpcyBz d2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOwotCQkJcmV0dXJuKC05KTsKLQkJICAgIH0K LQkJICAgIGlmICgoeCA9IGNtZmxkKCJEaWFsb2cgYm94IHRpdGxlIiwiIiwmcyx4eHN0cmluZykp IDwgMCkgewotCQkJaWYgKHggIT0gLTMpCi0JCQkgIHJldHVybih4KTsKLQkJICAgIH0gZWxzZSB7 Ci0JCQlpZiAoKGludClzdHJsZW4ocykgPiAxMjcpIHsKLQkJCSAgICBwcmludGYoIj9Ub28gbG9u ZyAtIDEyNyBtYXhcbiIpOwotCQkJICAgIHJldHVybigtOSk7Ci0JCQl9Ci0JCQlja3N0cm5jcHko Z3VpYnVmLHMsMTI4KTsKLQkJCWd1aV90aXRsZSA9IGJyc3RyaXAoZ3VpYnVmKTsKLQkJICAgIH0K LQkJICAgIGd1aSA9IDE7Ci0JCSAgICBicmVhazsKLSNlbmRpZiAvKiBLVUkgKi8KLQotCQkgIGNh c2UgVFlQX05VTToJCS8qIC9OVU1CRVIgKi8KLQkJICAgIG51bWJlciA9IDE7Ci0JCSAgICBwcmVm aXggPSBOVUxMOwotCQkgICAgYnJlYWs7Ci0KLSNpZmRlZiBVTklDT0RFCi0JCSAgY2FzZSBUWVBf WFBBOgkJLyogL1RSQU5TUEFSRU5UICovCi0JCSAgICBpbmNzID0gMDsKLQkJICAgIGNzZXQgPSAw OwotCQkgICAgb3V0Y3MgPSAtMTsKLQkJICAgIGJyZWFrOwotCi0JCSAgY2FzZSBUWVBfWElOOgkJ LyogL0NIQVJBQ1RFUi1TRVQ6ICovCi0JCSAgICBpZiAoIWdldHZhbCAmJiAoY21na3dmbGdzKCkg JiBDTV9BUkcpKSB7Ci0JCQlwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1bWVu dFxuIik7Ci0JCQlyZXR1cm4oLTkpOwotCQkgICAgfQotCQkgICAgaWYgKChpbmNzID0gY21rZXko ZmNzdGFiLG5maWxjLAotCQkJCSAgICAgICJjaGFyYWN0ZXItc2V0IG5hbWUiLCIiLHh4c3RyaW5n KSkgPCAwKSB7Ci0JCQlpZiAoaW5jcyA9PSAtMykJLyogTm90ZTogTm8gZGVmYXVsdCAqLwotCQkJ ICBpbmNzID0gLTI7Ci0JCQlyZXR1cm4oaW5jcyk7Ci0JCSAgICB9Ci0JCSAgICBjc2V0ID0gaW5j czsKLQkJICAgIGJyZWFrOwotCi0JCSAgY2FzZSBUWVBfWFVUOgkJLyogL1RSQU5TTEFURS1UTzog Ki8KLQkJICAgIGlmICghZ2V0dmFsICYmIChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKLQkJCXBy aW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKLQkJCXJldHVybigt OSk7Ci0JCSAgICB9Ci0jaWZkZWYgT1MyCi0JCSAgICBpZiAoIWluc2VydmVyICYmICFrOTVzdGRv dXQpIHsKLQkJCXRvY3MgPSAidWNzMiI7Ci0JCSAgICB9IGVsc2UgewotI2lmZGVmIENLT1VOSQot CQkJdG9jcyA9IHJsb29rdXAodHhydGFiLG50eHJ0YWIsdGNzbCk7Ci0jZWxzZSAvKiBDS09VTkkg Ki8KLQkJCWV4dGVybiBzdHJ1Y3Qga2V5dGFiIHR0Y3N0YWJbXTsKLQkJCWV4dGVybiBpbnQgbnR4 cnRhYjsKLQkJCXRvY3MgPSBybG9va3VwKHR0Y3N0YWIsbnRlcm1jLHRvY3MpOwotCQkJaWYgKCF0 b2NzKQotCQkJICB0b2NzID0gZ2V0ZGNzZXQoKTsKLSNlbmRpZiAvKiBDS09VTkkgKi8KLSAgICAg ICAgICAgICAgICAgICAgfQotI2Vsc2UgLyogT1MyICovCi0JCSAgICB0b2NzID0gZ2V0ZGNzZXQo KTsKLSNlbmRpZiAvKiBPUzIgKi8KLQkJICAgIGlmICgob3V0Y3MgPSBjbWtleShmY3N0YWIsbmZp bGMsCi0JCQkJICAgICAgICJjaGFyYWN0ZXItc2V0Iix0b2NzLHh4c3RyaW5nKSkgPCAwKQotCQkg ICAgICByZXR1cm4ob3V0Y3MpOwotCQkgICAgYnJlYWs7Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwot CQkgIGNhc2UgVFlQX09VVDoKLQkJICAgIGlmICgoeCA9IGNtb2ZpKCJGaWxlIGZvciByZXN1bHQg bGluZXMiLCIiLAotCQkJCSAgICZzLHh4c3RyaW5nKSkgPCAwKQotCQkgICAgICByZXR1cm4oeCk7 Ci0JCSAgICBja3N0cm5jcHkob3V0ZmlsZSxzLENLTUFYUEFUSCk7Ci0JCSAgICBicmVhazsKLQkJ fQotCSAgICB9IGVsc2UgaWYgKGNtcmVzdWx0LmZjb2RlID09IF9DTUlGSSkKLQkgICAgICBoYXZl bmFtZSA9IDE7Ci0JICAgIGVsc2UKLQkgICAgICByZXR1cm4oLTIpOwotCX0KLQlpZiAoaGF2ZW5h bWUpIHsKLQkgICAgY2tzdHJuY3B5KGxpbmUsY21yZXN1bHQuc3Jlc3VsdCxMSU5CVUZTSVopOwot CSAgICB5ID0gY21yZXN1bHQubnJlc3VsdDsKLQl9IGVsc2UgewotCSAgICBpZiAoKHggPSBjbWlm aSgiRmlsZW5hbWUiLCIiLCZzLCZ5LHh4c3RyaW5nKSkgPCAwKSB7Ci0JCWlmICh4ID09IC0zKSB7 Ci0JCSAgICBwcmludGYoIj9OYW1lIG9mIGFuIGV4aXN0aW5nIGZpbGUgcmVxdWlyZWRcbiIpOwot CQkgICAgcmV0dXJuKC05KTsKLQkJfSBlbHNlIHJldHVybih4KTsKLQkgICAgfQotCSAgICBja3N0 cm5jcHkobGluZSxzLExJTkJVRlNJWik7Ci0JfQotCWlmICh5ICE9IDApIHsKLQkgICAgcHJpbnRm KCI/QSBzaW5nbGUgZmlsZSBwbGVhc2VcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLSNpZmRl ZiBLVUkKLQlpZiAoIG91dGZpbGVbMF0gJiYgZ3VpICkgewotCSAgICBwcmludGYoIj8vR1VJIGFu ZCAvT1VUUFVUIGFyZSBpbmNvbXBhdGlibGVcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLSNl bmRpZiAvKiBLVUkgKi8KLQotCWlmICgoeSA9IGNtY2ZtKCkpIDwgMCkJCS8qIENvbmZpcm0gdGhl IGNvbW1hbmQgKi8KLQkgIHJldHVybih5KTsKLQotI2lmZGVmIFVOSUNPREUKLQlmaWxlb3JkZXIg PSAtMTsKLQlpZiAoY3NldCA8IDAgJiYgZmlsZXBlZWspIHsJLyogSWYgbm8gY2hhcnNldCBzd2l0 Y2hlcyBnaXZlbiAqLwotCSAgICBpbnQgaywgeCA9IC0xOwotCSAgICBrID0gc2NhbmZpbGUobGlu ZSwmeCxuc2NhbmZpbGUpOyAvKiBDYWxsIGZpbGUgYW5hbHl6ZXIgKi8KLQkgICAgZGVidWcoRjEx MSwidHlwZSBzY2FuZmlsZSIsbGluZSxrKTsKLQkgICAgZGVidWcoRjEwMSwidHlwZSBzY2FuZmls ZSBmbGFnIiwiIix4KTsKLQkgICAgc3dpdGNoKGspIHsKLQkgICAgICBjYXNlIEZUX1VURjg6CQkv KiB3aGljaCBjYW4gZGV0ZWN0IFVURi04Li4uICovCi0JCWNzZXQgPSAwOwotCQlpbmNzID0gRkNf VVRGODsKLQkJYnJlYWs7Ci0JICAgICAgY2FzZSBGVF9VQ1MyOgkJLyogYW5kIFVDUy0yLi4uICov Ci0JCWNzZXQgPSAwOwotCQlpbmNzID0gRkNfVUNTMjsKLQkJZmlsZW9yZGVyID0geDsJCS8qIGV2 ZW4gaWYgdGhlcmUgaXMgbm8gQk9NLiAqLwotCQlkZWJ1ZyhGMTAxLCJ0eXBlIGZpbGVvcmRlciIs IiIsZmlsZW9yZGVyKTsKLQkJYnJlYWs7Ci0JICAgIH0KLQl9Ci0jaWZkZWYgT1MyCi0gICAgICAg IGlmIChjc2V0IDwgMCkgewkJCS8qIElmIGlucHV0IGNoYXJzZXQgc3RpbGwgbm90IGtub3duICov Ci0jaWZkZWYgQ0tPVU5JCi0gICAgICAgICAgICB0b2NzID0gcmxvb2t1cCh0eHJ0YWIsbnR4cnRh Yix0Y3NsKTsKLSNlbHNlIC8qIENLT1VOSSAqLwotICAgICAgICAgICAgZXh0ZXJuIHN0cnVjdCBr ZXl0YWIgdHRjc3RhYltdOwotICAgICAgICAgICAgZXh0ZXJuIGludCBudHhydGFiOwotICAgICAg ICAgICAgdG9jcyA9IHJsb29rdXAodHRjc3RhYixudGVybWMsaW5jcyk7Ci0gICAgICAgICAgICBp ZiAoIXRvY3MpCi0JICAgICAgdG9jcyA9IGdldGRjc2V0KCk7Ci0jZW5kaWYgLyogQ0tPVU5JICov Ci0gICAgICAgICAgICBpbmNzID0gbG9va3VwKGZjc3RhYix0b2NzLG5maWxjLCZ4KTsKLSAgICAg ICAgfQotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAgICAgIGlmIChvdXRjcyA9PSAwICYmIGluY3Mg IT0gMCkgewkvKiBTdXBwbHkgZGVmYXVsdCB0YXJnZXQgY2hhcnNldCAqLwotCSAgICBpbnQgeCA9 IDA7CQkJLyogaWYgc3dpdGNoIG5vdCBnaXZlbi4gKi8KLQkgICAgdG9jcyA9IGdldGRjc2V0KCk7 Ci0JICAgIG91dGNzID0gbG9va3VwKGZjc3RhYix0b2NzLG5maWxjLCZ4KTsKLQl9Ci0jZWxzZSAg LyogIVVOSUNPREUgKi8KLQlpZiAoY3NldCA8IDApIGluY3MgPSBvdXRjcyA9IDA7Ci0jZW5kaWYg LyogVU5JQ09ERSAqLwotCi0JaWYgKG91dGZpbGVbMF0gJiYgcGFnaW5nKQkvKiBUaGlzIGNvbWJp bmF0aW9uIG1ha2VzIG5vIHNlbnNlICovCi0JICBwYWdpbmcgPSAwOwkJCS8qIHNvIHR1cm4gb2Zm IHBhZ2luZyAqLwotCi0jaWZkZWYgS1VJCi0JLyogTm8gcGFnaW5nIHdoZW4gZGlhbG9nIGlzIHVz ZWQgKi8KLQlpZiAoIGd1aSAmJiBwYWdpbmcgKQotCSAgcGFnaW5nID0gMDsKLQotCWlmICggIWd1 aSAmJiBoZWlnaHQgKSB7Ci0JICAgIHByaW50ZigiP1RoZSAvSEVJR0hUIHN3aXRjaCBpcyBub3Qg c3VwcG9ydGVkIHdpdGhvdXQgL0dVSVxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotI2VuZGlm IC8qIEtVSSAqLwotCi0JaWYgKGNvdW50KSBwYWdpbmcgPSAtMTsKLQlkZWJ1ZyhGMTExLCJ0eXBl IixsaW5lLHBhZ2luZyk7Ci0jaWZkZWYgS1VJCi0JaWYgKCBndWkgKSB7Ci0JICAgIHMgPSAoY2hh ciAqKTE7ICAgIC8qIG9rLCBpdHMgYW4gdWdseSBoYWNrICovCi0JICAgIGlmIChndWlfdGV4dF9w b3B1cF9jcmVhdGUoZ3VpX3RpdGxlID8KLQkJCQkgICAgICBndWlfdGl0bGUgOiBsaW5lLCBoZWln aHQsd2lkdGgpIDwgMCkgewotCQlwcmludGYoIj8vR1VJIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBz eXN0ZW1cbiIpOwotCQlndWkgPSAwOwotCQlyZXR1cm4oLTkpOwotCSAgICB9Ci0JICAgIHdpZHRo ID0gMDsKLQl9IGVsc2UKLSNlbmRpZiAvKiBLVUkgKi8KLQkgIHMgPSBvdXRmaWxlOwotCXN1Y2Nl c3MgPQotCSAgZG90eXBlKGxpbmUscGFnaW5nLDAsaGVhZCxwYXQsd2lkdGgscHJlZml4LGluY3Ms b3V0Y3MscyxudW1iZXIpOwotCXJldHVybihzdWNjZXNzKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9G UklMTFMgKi8KLQotI2lmbmRlZiBOT0NTRVRTCi0gICAgaWYgKGN4ID09IFhYWExBKSB7CQkJLyog VFJBTlNMQVRFIGZpbGUncyBjaGFyc2V0ICovCi0JX1BST1RPVFlQIChpbnQgZG94bGF0ZSwgKCB2 b2lkICkgKTsKLQlyZXR1cm4oZG94bGF0ZSgpKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9DU0VUUyAq LwotCi0gICAgaWYgKGN4ID09IFhYVkVSKSB7CQkJLyogVkVSU0lPTiAqLwotCWludCBuID0gMDsK LQlleHRlcm4gY2hhciAqIGNrX3BhdGNoLCAqIGNrX3NfdGVzdDsKLSNpZmRlZiBDT01NRU5UCi0J ZXh0ZXJuIGludCBobXRvcGxpbmU7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCWlmICgoeSA9IGNt Y2ZtKCkpIDwgMCkKLSAgICAgICAgICByZXR1cm4oeSk7Ci0KLSNpZmRlZiBDS182NEJJVAotCXBy aW50ZigiXG4lcywgZm9yJXMgKDY0LWJpdClcbiBOdW1lcmljOiAlbGQiLHZlcnNpbyxja3hzeXMs dmVybnVtKTsKLSNlbHNlCi0JcHJpbnRmKCJcbiVzLCBmb3Ilc1xuIE51bWVyaWM6ICVsZCIsdmVy c2lvLGNreHN5cyx2ZXJudW0pOwotI2VuZGlmCS8qIENLXzY0QklUICovCi0JcHJpbnRmKCJcblxu Iik7Ci0gICAgICAgIHByaW50ZigiQXV0aG9yczpcbiIpOwotCXByaW50ZigiIEZyYW5rIGRhIENy dXosIENvbHVtYmlhIFVuaXZlcnNpdHlcbiIpOwotICAgICAgICBwcmludGYoIiBKZWZmcmV5IEVy aWMgQWx0bWFuLCBTZWN1cmUgRW5kcG9pbnRzLCBJbmMuICVzXG4iLAotCSAgICAgICAiPGphbHRt YW5Ac2VjdXJlLWVuZHBvaW50cy5jb20+IgotCSAgICAgICApOwotCXByaW50ZigiIENvbnRyaWJ1 dGlvbnMgZnJvbSBtYW55IG90aGVycy5cbiIpOwotCW4gPSA3OwotCWlmICgqY2tfc190ZXN0KSB7 Ci0JICAgIHByaW50ZigiXG5USElTIElTIEEgVEVTVCBWRVJTSU9OLCBOT1QgRk9SIFBST0RVQ1RJ T04gVVNFLlxuIik7Ci0JICAgIG4gKz0gMjsKLQl9Ci0JaWYgKCpja19wYXRjaCkgewotCSAgICBw cmludGYoIiBQYXRjaGVzOiAlc1xuIiwgY2tfcGF0Y2gpOwotCSAgICBuKys7Ci0JfQotCXByaW50 ZigiIFR5cGUgQ09QWVJJR0hUIGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UuXG5cbiIpOwotI2lm ZGVmIE9TMgotCXNob3JlZygpOwotI2Vsc2UKLSNpZmRlZiBDT01NRU5UCi0JaG10b3BsaW5lID0g bisxOwotCWhtc2dhKGNvcHlyaWdodCk7Ci0JaG10b3BsaW5lID0gMDsKLSNlbmRpZiAvKiBDT01N RU5UICovCi0jZW5kaWYgLyogT1MyICovCi0JcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICB9Ci0K LSAgICBpZiAoY3ggPT0gWFhDUFIpIHsJCQkvKiBDT1BZUklHSFQgb3IgTElDRU5TRSAqLwotICAg ICAgICBfUFJPVE9UWVAoIGludCBobXNnYWEsIChjaGFyICogW10sIGNoYXIgKikgKTsKLSAgICAg ICAgZXh0ZXJuIGNoYXIgKiBja19jcnllYXI7Ci0JaWYgKCh5ID0gY21jZm0oKSkgPCAwKQotICAg ICAgICAgIHJldHVybih5KTsKLQlobXNnYWEoY29weXJpZ2h0LGNrX2NyeWVhcik7Ci0JcmV0dXJu KHN1Y2Nlc3MgPSAxKTsKLSAgICB9Ci0KLSNpZm5kZWYgTUFDCQkJCS8qIE9ubHkgZm9yIG11bHRp dXNlciBzeXN0ZW1zICovCi0jaWZuZGVmIE9TMgotI2lmbmRlZiBOT0ZSSUxMUwotICAgIGlmIChj eCA9PSBYWFdITykgewkJCS8qIFdITyAqLwotCWNoYXIgKndjOwotI2lmZGVmIElLU0QKLQlpZiAo aW5zZXJ2ZXIgJiYgIUVOQUJMRUQoZW5fd2hvKSkgewotCSAgICBwcmludGYoIj9Tb3JyeSwgV0hP IGNvbW1hbmQgZGlzYWJsZWRcbiIpOwotCSAgICByZXR1cm4oLTkpOwotCX0KLSNlbmRpZiAvKiBJ S1NEICovCi0jaWZkZWYgZGF0YWdlbmVyYWwKLQlpZiAoKHogPSBjbWNmbSgpKSA8IDApIHJldHVy bih6KTsKLQlpZiAobm9wdXNoKSB7Ci0JICAgIHByaW50ZigiP1NvcnJ5LCB3aG8gbm90IGFsbG93 ZWRcbiIpOwotCSAgICByZXR1cm4oc3VjY2VzcyA9IDApOwotCX0KLSAgICAgICAgeHN5c3RlbShX SE9DTUQpOwotI2Vsc2UKLQlpZiAoKHkgPSBjbXR4dCgidXNlciBuYW1lIiwiIiwmcyx4eHN0cmlu ZykpIDwgMCkgcmV0dXJuKHkpOwotICAgICAgICBpZiAobm9wdXNoKSB7Ci0JICAgIHByaW50Zigi P1NvcnJ5LCBXSE8gY29tbWFuZCBkaXNhYmxlZFxuIik7Ci0JICAgIHJldHVybihzdWNjZXNzID0g MCk7Ci0JfQotCWlmICghKHdjID0gZ2V0ZW52KCJDS19XSE8iKSkpIHdjID0gV0hPQ01EOwotCWlm ICh3YykKLQkgIGlmICgoaW50KSBzdHJsZW4od2MpID4gMCkgewotCSAgICAgIGNrbWFrbXNnKGxp bmUsTElOQlVGU0laLHdjLCIgIixzLE5VTEwpOwotCSAgICAgIHhzeXN0ZW0obGluZSk7Ci0JICB9 Ci0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLQlyZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgIH0K LSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE1BQyAq LwotCi0jaWZuZGVmIE5PRlJJTExTCi0gICAgaWYgKGN4ID09IFhYV1JJIHx8IGN4ID09IFhYV1JM IHx8IGN4ID09IFhYV1JCTCkgeyAvKiBXUklURSAqLwotCWludCB4LHk7CQkJLyogT24gc3RhY2sg aW4gY2FzZSBvZiBcZmV4ZWMoKSAqLwotCWlmICgoeCA9IGNta2V5KHdyaXRhYixud3JpLCJ0byBm aWxlIG9yIGxvZyIsIiIseHhzdHJpbmcpKSA8IDApIHsKLQkgICAgaWYgKHggPT0gLTMpIHByaW50 ZigiP1dyaXRlIHRvIHdoYXQ/XG4iKTsKLQkgICAgcmV0dXJuKHgpOwotCX0KLQlpZiAoKHkgPSBj bXR4dCgidGV4dCIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKLQlzID0gYnJzdHJp cChzKTsKLQlzd2l0Y2ggKHgpIHsKLQkgIGNhc2UgTE9HRDogeSA9IFpERklMRTsgYnJlYWs7Ci0J ICBjYXNlIExPR1A6IHkgPSBaUEZJTEU7IGJyZWFrOwotI2lmbmRlZiBOT0xPQ0FMCi0JICBjYXNl IExPR1M6IHkgPSBaU0ZJTEU7IGJyZWFrOwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQkgIGNhc2Ug TE9HVDogeSA9IFpURklMRTsgYnJlYWs7Ci0jaWZuZGVmIE5PU1BMCi0JICBjYXNlIExPR1c6IHkg PSBaV0ZJTEU7IGJyZWFrOwotI2VuZGlmIC8qIE5PU1BMICovCi0JICBjYXNlIExPR1g6CQkJLyog U0NSRUVOIChzdGRvdXQpICovCi0JICBjYXNlIExPR0U6CQkJLyogRVJST1IgIChzdGRlcnIpICov Ci0JICAgIGlmICh4ID09IExPR0UpIHsKLQkJZGVidWcoRjExMCwKLQkJICAgICAgKGN4ID09IFhY V1JMKSA/ICJXUklURUxOIEVSUk9SIiA6ICJXUklURSBFUlJPUiIsIHMsMCk7Ci0JCWZwcmludGYo c3RkZXJyLCIlcyVzIixzLChjeCA9PSBYWFdSTCkgPyAiXG4iIDogIiIpOwotCSAgICB9IGVsc2Ug ewotCQlkZWJ1ZyhGMTEwLAotCQkgICAgICAoY3ggPT0gWFhXUkwpID8gIldSSVRFTE4gU0NSRUVO IiA6ICJXUklURSBTQ1JFRU4iLCBzLDApOwotCQlwcmludGYoIiVzJXMiLHMsKGN4ID09IFhYV1JM KSA/ICJcbiIgOiAiIik7Ci0JICAgIH0KLQkgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLQkgIGRl ZmF1bHQ6IHJldHVybigtMik7Ci0JfQotCWlmIChjaGtmbih5KSA+IDApIHsKLQkgICAgeCA9IChj eCA9PSBYWFdSSSkgPyB6c291dCh5LHMpIDogenNvdXRsKHkscyk7Ci0JICAgIGRlYnVnKEYxMTEs IldSSVRFIiwKLQkJICAoY3ggPT0gWFhXUkkpID8gInpzb3V0IiA6ICJ6c291dGwiLAotCQkgIHgp OwotCSAgICBpZiAoeCA8IDApIHByaW50ZigiP1dyaXRlIGVycm9yXG4iKTsKLQl9IGVsc2Ugewot CSAgICB4ID0gLTE7Ci0JICAgIHByaW50ZigiP0ZpbGUgb3IgbG9nIG5vdCBvcGVuXG4iKTsKLQl9 Ci0JZGVidWcoRjEwMSwiV1JJVEUgeCIsIiIseCk7Ci0JcmV0dXJuKHN1Y2Nlc3MgPSAoeCA9PSAw KSA/IDEgOiAwKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9GUklMTFMgKi8KLQotI2lmbmRlZiBOT1hG RVIKLSAgICBpZiAoY3ggPT0gWFhBU0MgfHwgY3ggPT0gWFhCSU4pIHsKLQlpZiAoKHggPSBjbWNm bSgpKSA8IDApIHJldHVybih4KTsKLSNpZmRlZiBORVdGVFAKLS8qCi0gIE1ha2UgQy1LZXJtaXQg d29yayBsaWtlIG90aGVyIGZ0cCBjbGllbnRzLCB3aGVyZQotICB0aGUgQVNDSUkgKFRFWFQpIGFu ZCBCSU5BUlkgY29tbWFuZHMgYXJlIGdsb2JhbCBzZXR0aW5ncy4KLSovCi0JaWYgKGZ0cGlzb3Bl bigpKSB7Ci0JICAgIGRvZnRwZ2xvYmFsdHlwZSgoY3ggPT0gWFhBU0MpID8gWFlGVF9UIDogWFlG VF9CKTsKLQkgICAgLyogRmFsbCB0aHJ1LS10aGUgY29tbWFuZCBpdCBzaG91bGQgYXBwbHkgdG8g Ym90aCBGVFAgYW5kIEtlcm1pdCAqLwotCSAgICAvKiByZXR1cm4oc3VjY2VzcyA9IDEpOyAqLwot CX0KLSNlbmRpZiAvKiBORVdGVFAgKi8KLQotCXhmZXJtb2RlID0gWE1PREVfTTsJCS8qIFNldCBt YW51YWwgS2VybWl0IHRyYW5zZmVyIG1vZGUgKi8KLQliaW5hcnkgPSAoY3ggPT0gWFhBU0MpID8g WFlGVF9UIDogWFlGVF9COwotCXJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgfQotI2VuZGlmIC8q IE5PWEZFUiAqLwotCi0gICAgaWYgKGN4ID09IFhYQ0xTKSB7Ci0JaWYgKCh4ID0gY21jZm0oKSkg PCAwKSByZXR1cm4oeCk7Ci0JeSA9IGNrX2NscygpOwotCXJldHVybihzdWNjZXNzID0gKHkgPiAt MSkgPyAxIDogMCk7Ci0gICAgfQotCi0jaWZkZWYgQ0tfTUtESVIKLSAgICBpZiAoY3ggPT0gWFhN S0RJUiB8fCBjeCA9PSBYWExNS0QpIHsKLQljaGFyICpwOwotI2lmZGVmIExPQ1VTCi0JaWYgKCFs b2N1cyAmJiBjeCAhPSBYWExNS0QpIHsKLSNpZmRlZiBOT1hGRVIKLQkgICAgcmV0dXJuKC0yKTsK LSNlbHNlCi0JICAgIHJldHVybihkb3JtdChYWk1LRCkpOwotI2VuZGlmIC8qIE5PWEZFUiAqLwot ICAgICAgICB9Ci0jZW5kaWYgLyogTE9DVVMgKi8KLSNpZmRlZiBJS1NECi0JaWYgKGluc2VydmVy ICYmICFFTkFCTEVEKGVuX21rZCkpIHsKLQkgICAgcHJpbnRmKCI/U29ycnksIGRpcmVjdG9yeSBj cmVhdGlvbiBpcyBkaXNhYmxlZFxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0JfQotI2VuZGlmIC8q IElLU0QgKi8KLQlpZiAoKHggPSBjbWZsZCgiTmFtZSBmb3IgbmV3IGRpcmVjdG9yeSIsIiIsJnMs eHhzdHJpbmcpKSA8IDApIHsKLQkgICAgaWYgKHggIT0gLTMpIHsKLQkJcmV0dXJuKHgpOwotCSAg ICB9IGVsc2UgewotCQlwcmludGYoIj9EaXJlY3RvcnkgbmFtZSByZXF1aXJlZFxuIik7Ci0JCXJl dHVybigtOSk7Ci0JICAgIH0KLQl9Ci0JY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOwotCXMg PSBsaW5lOwotCWlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotCXMgPSBicnN0cmlw KHMpOwotCWJnY2hrKCk7CQkJLyogU2V0IG1zZ2ZsZyAqLwotCXggPSBja21rZGlyKDAscywmcCxt c2dmbGcsMCk7Ci0jaWZkZWYgQ09NTUVOVAotCWlmIChtc2dmbGcgJiYgeCA9PSAwKQotCSAgcHJp bnRmKCI/RGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzXG4iKTsKLSNlbmRpZiAvKiBDT01NRU5UICov Ci0JcmV0dXJuKHN1Y2Nlc3MgPSAoeCA8IDApID8gMCA6IDEpOwotICAgIH0KLSAgICBpZiAoY3gg PT0gWFhSTURJUiB8fCBjeCA9PSBYWExSTUQpIHsgLyogUk1ESVIgKi8KLQljaGFyICpwOwotI2lm ZGVmIExPQ1VTCi0JaWYgKCFsb2N1cyAmJiBjeCAhPSBYWExSTUQpIHsKLSNpZmRlZiBOT1hGRVIK LQkgICAgcmV0dXJuKC0yKTsKLSNlbHNlCi0JICAgIHJldHVybihkb3JtdChYWlJNRCkpOwotI2Vu ZGlmIC8qIE5PWEZFUiAqLwotICAgICAgICB9Ci0jZW5kaWYgLyogTE9DVVMgKi8KLSNpZmRlZiBJ S1NECi0JaWYgKGluc2VydmVyICYmICFFTkFCTEVEKGVuX3JtZCkpIHsKLQkgICAgcHJpbnRmKCI/ U29ycnksIGRpcmVjdG9yeSByZW1vdmFsIGlzIGRpc2FibGVkXG4iKTsKLQkgICAgcmV0dXJuKC05 KTsKLQl9Ci0jZW5kaWYgLyogSUtTRCAqLwotCWlmICgoeCA9IGNtZGlyKCJOYW1lIG9mIGRpcmVj dG9yeSB0byBiZSByZW1vdmVkIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKLQkgIHJldHVybih4KTsK LQlja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7Ci0JcyA9IGxpbmU7Ci0JaWYgKCh4ID0gY21j Zm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0JcyA9IGJyc3RyaXAocyk7Ci0JeCA9IGNrbWtkaXIoMSxz LCZwLG1zZ2ZsZywwKTsKLQlyZXR1cm4oc3VjY2VzcyA9ICh4IDwgMCkgPyAwIDogMSk7Ci0gICAg fQotI2VuZGlmIC8qIENLX01LRElSICovCi0KLSNpZmRlZiBUTkNPREUKLSAgICBpZiAoY3ggPT0g WFhURUxPUCkKLSAgICAgIHJldHVybihkb3RlbG9wdCgpKTsKLSNlbmRpZiAvKiBUTkNPREUgKi8K LQotI2lmbmRlZiBOT1BVU0gKLSAgICBpZiAoY3ggPT0gWFhOUFNIKSB7Ci0JaWYgKCh6ID0gY21j Zm0oKSkgPCAwKSByZXR1cm4oeik7Ci0gICAgICAgIG5vcHVzaCA9IDE7Ci0jaWZuZGVmIE5PU0VS VkVSCi0gICAgICAgIGVuX2hvcyA9IDA7Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLSNpZmRlZiBQ SVBFU0VORAotCXVzZXBpcGVzID0gMDsKLSNlbmRpZiAvKiBQSVBFU0VORCAqLwotICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgIH0KLSNlbmRpZiAvKiBOT1BVU0ggKi8KLQotI2lmZGVm IE9TMgotICAgIGlmIChjeCA9PSBYWE5TQ1IpIHsKLQlpZiAoKHogPSBjbWNmbSgpKSA8IDApIHJl dHVybih6KTsKLSAgICAgICAgdHRfc2Nyb2xsID0gMDsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3Mg PSAxKTsKLSAgICB9Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZm5kZWYgTk9TUEwKLSAgICBpZiAo Y3ggPT0gWFhMT0NBTCkJCQkvKiBMT0NBTCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgKi8KLSAgICAg IHJldHVybihzdWNjZXNzID0gZG9sb2NhbCgpKTsKLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0gICAg aWYgKGN4ID09IFhYS0VSTUkpIHsJCS8qIFRoZSBLRVJNSVQgY29tbWFuZCAqLwotCWNoYXIgKiBs aXN0WzY1XTsKLQlleHRlcm4gY2hhciAqKnhhcmd2OwotCWV4dGVybiBpbnQgeGFyZ2M7Ci0JaW50 IGk7Ci0JaWYgKCh5ID0gY210eHQoImtlcm1pdCBjb21tYW5kLWxpbmUgYXJndW1lbnRzLCAtaCBm b3IgaGVscCIsCi0JCSAgICAgICAiIiwmcyx4eHN0cmluZykpIDwgMCkKLQkgIHJldHVybih5KTsK LQlja3N0cm5jcHkobGluZSwia2VybWl0ICIsTElOQlVGU0laKTsKLQlja3N0cm5jYXQobGluZSxz LExJTkJVRlNJWi04KTsKLQl4d29yZHMobGluZSw2NCxsaXN0LDApOwotCWZvciAoaSA9IDE7IGkg PCA2NDsgaSsrKSB7Ci0JICAgIGlmICghbGlzdFtpXSkKLQkgICAgICBicmVhazsKLQl9Ci0JaS0t OwotCXhhcmdjID0gaTsKLQl4YXJndiA9IGxpc3Q7Ci0JeGFyZ3YrKzsKLQlzc3RhdGUgPSBjbWRs aW4oKTsKLQlpZiAoc3N0YXRlKSB7Ci0JICAgIGV4dGVybiBpbnQganVzdG9uZTsKLQkgICAgZGVi dWcoRjAwMCwiS0VSTUlUIHNzdGF0ZSIsIiIsc3N0YXRlKTsKLQkgICAganVzdG9uZSA9IDE7CQkv KiBGb3JjZSByZXR1cm4gdG8gY29tbWFuZCBtb2RlICovCi0JICAgIHByb3RvKCk7CQkJLyogYWZ0 ZXIgcHJvdG9jb2wgKi8KLQkgICAgcmV0dXJuKHN1Y2Nlc3MpOwotCX0gZWxzZSB7Ci0JICAgIGRl YnVnKEYxMDEsIktFUk1JVCBzc3RhdGUiLCIiLHNzdGF0ZSk7Ci0JICAgIHJldHVybihzdWNjZXNz ID0gMSk7CS8qIE5vdCBleGFjdGx5IHJpZ2h0LCBidXQuLi4gKi8KLQl9Ci0gICAgfQotICAgIGlm IChjeCA9PSBYWERBVEUpIHsJCQkvKiBEQVRFIGNvbW1hbmQgKi8KLQlleHRlcm4gY2hhciBjbWRh dGVidWZbXSwgKiBjbWRhdGVtc2c7Ci0KLSNpZm5kZWYgQ09NTUVOVAotCWNoYXIgKiBkcDsKLQlp ZiAoKHkgPSBjbXR4dCgiZGF0ZSBhbmQvb3IgdGltZSwgb3IgY2FycmlhZ2UgcmV0dXJuIGZvciBj dXJyZW50IiwKLQkJICAgICAgICIiLCZzLHh4c3RyaW5nKSkgPCAwKQotCSAgcmV0dXJuKHkpOwot CXMgPSBicnN0cmlwKHMpOwotCWRwID0gY21jdnRkYXRlKHMsMSk7Ci0JaWYgKCFkcCkgewotCSAg ICBwcmludGYoIj8lc1xuIixjbWRhdGVtc2cgPyBjbWRhdGVtc2cgOiAiRGF0ZSBjb252ZXJzaW9u IGVycm9yIik7Ci0JICAgIHN1Y2Nlc3MgPSAwOwotCX0gZWxzZSB7Ci0JICAgIHByaW50ZigiJXNc biIsZHApOwotCSAgICBzdWNjZXNzID0gMTsKLQl9Ci0jZWxzZQotCS8qIFRoaXMgd29ya3MgZmlu ZSBidXQgbWVzc2VzIHVwIG15ICJkYXRlcyIgdG9ydHVyZS10ZXN0IHNjcmlwdCAqLwotCi0JaWYg KCh4ID0gY21kYXRlKCJEYXRlIGFuZC9vciB0aW1lLCBvciBjYXJyaWFnZSByZXR1cm4gZm9yIGN1 cnJlbnQiLAotCQkJIiIsJnMsMCx4eHN0cmluZykpIDwgMCkgewotCSAgICByZXR1cm4oeCk7Ci0J fSBlbHNlIHsKLQkgICAgcHJpbnRmKCIlc1xuIixjbWRhdGVidWYpOwotCSAgICBzdWNjZXNzID0g MTsKLQl9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCXJldHVybihzdWNjZXNzKTsKLSAgICB9Ci0j aWZuZGVmIE5PUFVTSAotI2lmbmRlZiBOT0ZSSUxMUwotICAgIGlmIChjeCA9PSBYWEVESVQpCi0g ICAgICByZXR1cm4oZG9lZGl0KCkpOwotI2VuZGlmIC8qIE5PRlJJTExTICovCi0jZW5kaWYgLyog Tk9QVVNIICovCi0KLSNpZmRlZiBCUk9XU0VSCQkJCS8qIERlZmluZWQgb25seSBpZm5kZWYgTk9Q VVNIICovCi0gICAgaWYgKGN4ID09IFhYQlJPV1MpCi0gICAgICByZXR1cm4oZG9icm93c2UoKSk7 Ci0jZW5kaWYgLyogQlJPV1NFUiAqLwotCi0jaWZkZWYgQ0tfVEFQSQotICAgIGlmIChjeCA9PSBY WFRBUEkpIHsJCQkvKiBNaWNyb3NvZnQgVEFQSSAqLwotCXJldHVybiAoc3VjY2VzcyA9IGRvdGFw aSgpKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfVEFQSSAqLwotCi0jaWZuZGVmIE5PWEZFUgotICAg IGlmIChjeCA9PSBYWFdIRVJFKSB7Ci0JZXh0ZXJuIGNoYXIgKiByZnNwZWMsICogc2ZzcGVjLCAq IHNyZnNwZWMsICogcnJmc3BlYzsKLQlpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsK LQlwcmludGYoIlxuRmlsZSBtb3N0IHJlY2VudGx5Li4uXG5cbiIpOwotCXByaW50ZigiICBTZW50 OiAgICAgICAlc1xuIiwgICBzZnNwZWMgPyBzZnNwZWMgOiAiKG5vbmUpIik7Ci0JaWYgKHNmc3Bl YyAmJiBzcmZzcGVjKSB7Ci0JICAgIHByaW50ZigiICBTdG9yZWQgYXM6ICAlc1xuIiwgICBzcmZz cGVjKTsKLQkgICAgcHJpbnRmKCJcbiIpOwotCX0KLQlwcmludGYoIiAgUmVjZWl2ZWQ6ICAgJXNc biIsICAgcnJmc3BlYyA/IHJyZnNwZWMgOiAiKG5vbmUpIik7Ci0JaWYgKHJmc3BlYyAmJiBycmZz cGVjKQotCXByaW50ZigiICBTdG9yZWQgYXM6ICAlc1xuIiwgICByZnNwZWMpOwotCXByaW50ZigK LSJcbklmIHRoZSBmdWxsIHBhdGggaXMgbm90IHNob3duLCB0aGVuIHRoZSBmaWxlIGlzIHByb2Jh Ymx5IGluIHlvdXIgY3VycmVudFxuIgotCSAgICAgICApOwotCXByaW50ZigKLSJkaXJlY3Rvcnkg b3IgeW91ciBkb3dubG9hZCBkaXJlY3RvcnkgKGlmIGFueSAtIFNIT1cgRklMRSB0byBmaW5kIG91 dCkuXG5cbiIKLQkgICAgICAgKTsKLQlyZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgIH0KLSNlbmRp ZiAvKiBOT1hGRVIgKi8KLQotI2lmZGVmIENLX1JFQ0FMTAotICAgIGlmIChjeCA9PSBYWFJFRE8p Ci0gICAgICByZXR1cm4oZG9yZWRvKCkpOwotI2VuZGlmIC8qIENLX1JFQ0FMTCAqLwotCi0jaWZk ZWYgQ0tST09UCi0gICAgaWYgKGN4ID09IFhYQ0hSVCkJCQkvKiBDaGFuZ2UgS2VybWl0J3Mgcm9v dCBkaXJlY3RvcnkgKi8KLSAgICAgIHJldHVybihkb2Nocm9vdCgpKTsKLSNlbmRpZiAvKiBDS1JP T1QgKi8KLQotI2lmZGVmIENLX0tFUkJFUk9TCi0gICAgaWYgKGN4ID09IFhYQVVUSCkgewkJCS8q IEtFUkJFUk9TICovCi0JeCA9IGNwX2F1dGgoKTsJCQkvKiBQYXJzZSBpdCAqLwotI2lmZGVmIElL U0QKLSAgICAgICAgaWYgKGluc2VydmVyKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9Db21tYW5k IGRpc2FibGVkIGluIElLU0QuXHJcbiIpOwotICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAw KTsKLSAgICAgICAgfQotI2VuZGlmIC8qIElLU0QgKi8KLQlpZiAoeCA8IDApCQkJLyogUGFzcyBw YXJzZSBlcnJvcnMgYmFjayAqLwotCSAgcmV0dXJuKHgpOwotCXJldHVybihzdWNjZXNzID0gZG9h dXRoKGN4KSk7Ci0gICAgfQotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0KLSNpZm5kZWYgTk9M T0NBTAotICAgIGlmIChjeCA9PSBYWFRFUk0pIHsKLQlyZXR1cm4oc2V0dHJtdHlwKCkpOwotICAg IH0KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSAgICBpZiAoY3ggPT0gWFhTVEFUVVMpIHsKLQlp ZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLQlwcmludGYoICIgJXNcbiIsIHN1Y2Nl c3MgPyAiU1VDQ0VTUyIgOiAiRkFJTFVSRSIgKTsKLQlyZXR1cm4oMCk7CQkJLyogRG9uJ3QgY2hh bmdlIGl0ICovCi0gICAgfQotCi0gICAgaWYgKGN4ID09IFhYRkFJTCkgewotCWlmICgoeCA9IGNt Y2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotCXJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgfQotCi0g ICAgaWYgKGN4ID09IFhYU1VDQykgewotCWlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgp OwotCXJldHVybihzdWNjZXNzID0gMSk7Ci0gICAgfQotCi0gICAgaWYgKGN4ID09IFhYTkxDTCkg ewotCWV4dGVybiBpbnQgbm9sb2NhbDsKLQlpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4 KTsKLQlub2xvY2FsID0gMTsKLQlyZXR1cm4oc3VjY2VzcyA9IDEpOwotICAgIH0KLQotI2lmbmRl ZiBOT1hGRVIKLSAgICBpZiAoY3ggPT0gWFhSQVNHKQkJCS8qIFNob3J0Y3V0cyBmb3IgUkVNT1RF IGNvbW1hbmRzICovCi0gICAgICByZXR1cm4oZG9ybXQoWFpBU0cpKTsKLSAgICBpZiAoY3ggPT0g WFhSQ1dEKQotICAgICAgcmV0dXJuKGRvcm10KFhaQ1dEKSk7Ci0gICAgaWYgKGN4ID09IFhYUkNQ WSkKLSAgICAgIHJldHVybihkb3JtdChYWkNQWSkpOwotICAgIGlmIChjeCA9PSBYWFJERUwpCi0g ICAgICByZXR1cm4oZG9ybXQoWFpERUwpKTsKLSAgICBpZiAoY3ggPT0gWFhSRElSKQotICAgICAg cmV0dXJuKGRvcm10KFhaRElSKSk7Ci0gICAgaWYgKGN4ID09IFhYUlhJVCkKLSAgICAgIHJldHVy bihkb3JtdChYWlhJVCkpOwotICAgIGlmIChjeCA9PSBYWFJITFApCi0gICAgICByZXR1cm4oZG9y bXQoWFpITFApKTsKLSAgICBpZiAoY3ggPT0gWFhSSE9TKQotICAgICAgcmV0dXJuKGRvcm10KFha SE9TKSk7Ci0gICAgaWYgKGN4ID09IFhYUktFUikKLSAgICAgIHJldHVybihkb3JtdChYWktFUikp OwotICAgIGlmIChjeCA9PSBYWFJQV0QpCi0gICAgICByZXR1cm4oZG9ybXQoWFpQV0QpKTsKLSAg ICBpZiAoY3ggPT0gWFhSUVVFKQotICAgICAgcmV0dXJuKGRvcm10KFhaUVVFKSk7Ci0gICAgaWYg KGN4ID09IFhYUlJFTikKLSAgICAgIHJldHVybihkb3JtdChYWlJFTikpOwotICAgIGlmIChjeCA9 PSBYWFJNS0QpCi0gICAgICByZXR1cm4oZG9ybXQoWFpNS0QpKTsKLSAgICBpZiAoY3ggPT0gWFhS TVNHKQotICAgICAgcmV0dXJuKGRvcm10KFhaTVNHKSk7Ci0gICAgaWYgKGN4ID09IFhYUlJNRCkK LSAgICAgIHJldHVybihkb3JtdChYWlJNRCkpOwotICAgIGlmIChjeCA9PSBYWFJTRVQpCi0gICAg ICByZXR1cm4oZG9ybXQoWFpTRVQpKTsKLSAgICBpZiAoY3ggPT0gWFhSU1BBKQotICAgICAgcmV0 dXJuKGRvcm10KFhaU1BBKSk7Ci0gICAgaWYgKGN4ID09IFhYUlRZUCkKLSAgICAgIHJldHVybihk b3JtdChYWlRZUCkpOwotICAgIGlmIChjeCA9PSBYWFJXSE8pCi0gICAgICByZXR1cm4oZG9ybXQo WFpXSE8pKTsKLSAgICBpZiAoY3ggPT0gWFhSQ0RVUCkKLSAgICAgIHJldHVybihkb3JtdChYWkNE VSkpOwotICAgIGlmIChjeCA9PSBYWFJQUkkpCi0gICAgICByZXR1cm4oZG9ybXQoWFpQUkkpKTsK LSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotICAgIGlmIChjeCA9PSBYWFJFU0VUKSB7CQkvKiBSRVNF VCAqLwotCWlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLQkgIHJldHVybih4KTsKLQljb25jYigoY2hh cillc2NhcGUpOwkJLyogTWFrZSBjb21tYW5kIGVjaG9pbmcgdG8gbm9ybWFsICovCi0JZG9jbGVh bigwKTsJCQkvKiBDbG9zZSBhbGwgZmlsZXMgKi8KLQlyZXR1cm4oc3VjY2VzcyA9IDEpOwotICAg IH0KLQotI2lmbmRlZiBOT1hGRVIKLSNpZm5kZWYgTk9DU0VUUwotICAgIGlmIChjeCA9PSBYWEFT U09DKQkJCS8qIEFTU09DSUFURSAqLwotICAgICAgcmV0dXJuKGRvYXNzb2MoKSk7Ci0jZW5kaWYg LyogTk9DU0VUUyAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAg aWYgKGN4ID09IFhYU0hJRlQpIHsJCS8qIFNISUZUICovCi0JaWYgKCh5ID0gY21udW0oIk51bWJl ciBvZiBhcmd1bWVudHMgdG8gc2hpZnQiLCIxIiwxMCwmeCx4eHN0cmluZykpIDwgMCkKLQkgIHJl dHVybih5KTsKLQlpZiAoKHogPSBjbWNmbSgpKSA8IDApCi0JICByZXR1cm4oeik7Ci0JcmV0dXJu KHN1Y2Nlc3MgPSBkb3NoaWZ0KHgpKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lm bmRlZiBOT0hFTFAKLSAgICBpZiAoY3ggPT0gWFhNQU4pCi0gICAgICByZXR1cm4oZG9tYW51YWwo KSk7Ci0jZW5kaWYgLyogTk9IRUxQICovCi0KLSNpZm5kZWYgTk9TUEwKLSAgICBpZiAoY3ggPT0g WFhTT1JUKQkJCS8qIFNPUlQgYW4gYXJyYXkgKi8KLSAgICAgIHJldHVybihkb3NvcnQoKSk7Ci0j ZW5kaWYgLyogTk9TUEwgKi8KLQotICAgIGlmIChjeCA9PSBYWFBVUkdFKSB7Ci0jaWZkZWYgSUtT RAotCWlmIChpbnNlcnZlciAmJiAoIUVOQUJMRUQoZW5fZGVsKQotI2lmZGVmIENLX0xPR0lOCi0g ICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGlzZ3Vlc3QKLSNlbmRpZiAvKiBDS19MT0dJTiAq LwotCQkJICkpIHsKLQkgICAgcHJpbnRmKCI/U29ycnksIERFTEVURSBpcyBkaXNhYmxlZFxuIik7 Ci0JICAgIHJldHVybigtOSk7Ci0JfQotI2VuZGlmIC8qIElLU0QgKi8KLSNpZmRlZiBDS19BUEMK LQlpZiAoKGFwY2FjdGl2ZSA9PSBBUENfTE9DQUwpIHx8Ci0JICAgICgoYXBjYWN0aXZlID09IEFQ Q19SRU1PVEUpICYmICghKGFwY3N0YXR1cyAmIEFQQ19VTkNIKSkpKQotCSAgcmV0dXJuKHN1Y2Nl c3MgPSAwKTsKLSNlbmRpZiAvKiBDS19BUEMgKi8KLSNpZmRlZiBDS1BVUkdFCi0gICAgICAgIHJl dHVybihkb3B1cmdlKCkpOwotI2Vsc2UKLSNpZmRlZiBWTVMKLQlpZiAoKHggPSBjbXR4dCgib3B0 aW9uYWwgc3dpdGNoZXMgZm9sbG93ZWQgYnkgZmlsZXNwZWMiLAotCQkgICAgICAgIiIsJnMseHhz dHJpbmcpKSA8IDApCi0JICByZXR1cm4oeCk7Ci0JaWYgKG5vcHVzaCkgewotCSAgICBwcmludGYo Ij9Tb3JyeSwgRENMIGFjY2VzcyBpcyBkaXNhYmxlZFxuIik7Ci0JICAgIHJldHVybigtOSk7Ci0J fQotCWNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKLQlzID0gbGluZTsKLQl4ID0gbWxvb2so bWFjdGFiLCJwdXJnZSIsbm1hYyk7Ci0JcmV0dXJuKHN1Y2Nlc3MgPSBkb2RvKHgscyxjbWRzdGtb Y21kbHZsXS5jY2ZsZ3MpKTsKLSNlbHNlCi0JcmV0dXJuKC0yKTsKLSNlbmRpZiAvKiBWTVMgKi8K LSNlbmRpZiAvKiBDS1BVUkdFICovCi0gICAgfQotCi0jaWZuZGVmIE5PU1BMCi0gICAgaWYgKGN4 ID09IFhYRkFTVCkgewotCWlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotCXggPSBt bG9vayhtYWN0YWIsImZhc3QiLG5tYWMpOwotCXJldHVybihzdWNjZXNzID0gZG9kbyh4LE5VTEws Y21kc3RrW2NtZGx2bF0uY2NmbGdzKSk7Ci0gICAgfQotICAgIGlmIChjeCA9PSBYWENBVSkgewot CWlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotCXggPSBtbG9vayhtYWN0YWIsImNh dXRpb3VzIixubWFjKTsKLQlyZXR1cm4oc3VjY2VzcyA9IGRvZG8oeCxOVUxMLGNtZHN0a1tjbWRs dmxdLmNjZmxncykpOwotICAgIH0KLSAgICBpZiAoY3ggPT0gWFhST0IpIHsKLQlpZiAoKHggPSBj bWNmbSgpKSA8IDApIHJldHVybih4KTsKLQl4ID0gbWxvb2sobWFjdGFiLCJyb2J1c3QiLG5tYWMp OwotCXJldHVybihzdWNjZXNzID0gZG9kbyh4LE5VTEwsY21kc3RrW2NtZGx2bF0uY2NmbGdzKSk7 Ci0gICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0KLSAgICBpZiAoY3ggPT0gWFhTQ1JOKSB7CQkJ LyogU0NSRUVOICovCi0JaW50IHJvdywgY29sOwotCWlmICgoeCA9IGNta2V5KHNjbnRhYiwgbnNj bnRhYiwic2NyZWVuIGFjdGlvbiIsIiIsIHh4c3RyaW5nKSkgPCAwKQotCSAgcmV0dXJuKHgpOwot CXN3aXRjaCAoeCkgewkJCS8qIE1PVkUtVE8gKGN1cnNvciBwb3NpdGlvbikgKi8KLQkgIGNhc2Ug U0NOX01PVjoKLQkgICAgaWYgKCh5ID0gY21udW0oIlJvdyAoMS1iYXNlZCkiLCIiLDEwLCZ6LHh4 c3RyaW5nKSkgPCAwKQotCSAgICAgIHJldHVybih5KTsKLQkgICAgcm93ID0gejsKLQkgICAgeSA9 IGNtbnVtKCJDb2x1bW4gKDEtYmFzZWQpIiwiMSIsMTAsJnoseHhzdHJpbmcpOwotCSAgICBpZiAo eSA8IDApCi0JICAgICAgcmV0dXJuKHkpOwotCSAgICBjb2wgPSB6OwotCSAgICBpZiAoKHkgPSBj bWNmbSgpKSA8IDApCi0JICAgICAgcmV0dXJuKHkpOwotCSAgICBpZiAocm93IDwgMCB8fCBjb2wg PCAwKSB7Ci0JCXByaW50ZigiP1JvdyBhbmQgQ29sdW1uIG11c3QgYmUgMSBvciBncmVhdGVyXG4i KTsKLQkJcmV0dXJuKC05KTsKLQkgICAgfQotCSAgICBpZiAoY21kX3Jvd3MgPiAwICYmIHJvdyA+ IGNtZF9yb3dzKQotCSAgICAgIHJvdyA9IGNtZF9yb3dzOwotCSAgICBpZiAoY21kX2NvbHMgPiAw ICYmIGNvbCA+IGNtZF9jb2xzKQotCSAgICAgIGNvbCA9IGNtZF9jb2xzOwotCSAgICB5ID0gY2tf Y3VycG9zKHJvdyxjb2wpOwotCSAgICByZXR1cm4oc3VjY2VzcyA9ICh5ID4gLTEpID8gMSA6IDAp OwotCi0JICBjYXNlIFNDTl9DTFI6CQkJLyogQ0xFQVIgKi8KLQkgICAgaWYgKCh5ID0gY21jZm0o KSkgPCAwKQotCSAgICAgIHJldHVybih5KTsKLQkgICAgZGVidWcoRjEwMCwic2NyZWVuIGNhbGxp bmcgY2tfY2xzKCkiLCIiLDApOwotCSAgICB5ID0gY2tfY2xzKCk7Ci0JICAgIHJldHVybihzdWNj ZXNzID0gKHkgPiAtMSkgPyAxIDogMCk7Ci0KLQkgIGNhc2UgU0NOX0NMRToJCQkvKiBDTEVPTCAq LwotCSAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCi0JICAgICAgcmV0dXJuKHkpOwotCSAgICB5 ID0gY2tfY2xlb2woKTsKLQkgICAgcmV0dXJuKHN1Y2Nlc3MgPSAoeSA+IC0xKSA/IDEgOiAwKTsK LQl9Ci0gICAgfQotCi0jaWZuZGVmIE5PSFRUUAotI2lmZGVmIFRDUFNPQ0tFVAotICAgIGlmIChj eCA9PSBYWEhUVFApCi0gICAgICByZXR1cm4oZG9odHRwKCkpOwotI2VuZGlmIC8qIFRDUFNPQ0tF VCAqLwotI2VuZGlmIC8qIE5PSFRUUCAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgaWYgKGN4ID09 IFhYQVJSQVkpIHsJCS8qIEFSUkFZICovCi0jaWZuZGVmIE5PU0hPVwotCWV4dGVybiBpbnQgc2hv d2FycmF5KCk7Ci0jZW5kaWYgLyogTk9TSE9XICovCi0JaWYgKCh4ID0gY21rZXkoYXJyYXl0YWIs IG5hcnJheXRhYiwiQXJyYXkgb3BlcmF0aW9uIiwiIix4eHN0cmluZykpIDwgMCkKLQkgIHJldHVy bih4KTsKLQlzd2l0Y2ggKHgpIHsKLQkgIGNhc2UgQVJSX0RDTDoKLQkgICAgcmV0dXJuKGRvZGNs KFhYRENMKSk7Ci0JICBjYXNlIEFSUl9TUlQ6Ci0JICAgIHJldHVybihkb3NvcnQoKSk7Ci0jaWZu ZGVmIE5PU0hPVwotCSAgY2FzZSBBUlJfU0hPOgotCSAgICByZXR1cm4oc2hvd2FycmF5KCkpOwot I2VuZGlmIC8qIE5PU0hPVyAqLwotCSAgY2FzZSBBUlJfQ1BZOgotCSAgICByZXR1cm4oY29weWFy cmF5KCkpOwotCSAgY2FzZSBBUlJfU0VUOgotCSAgY2FzZSBBUlJfQ0xSOgotCSAgICByZXR1cm4o Y2xyYXJyYXkoeCkpOwotCSAgY2FzZSBBUlJfRFNUOgotCSAgICByZXR1cm4odW5hcnJheSgpKTsK LQkgIGNhc2UgQVJSX1JTWjoKLQkgICAgcmV0dXJuKHJzemFycmF5KCkpOwotCSAgY2FzZSBBUlJf RVFVOgotCSAgICByZXR1cm4obGlua2FycmF5KCkpOwotCi0JICBkZWZhdWx0OgotCSAgICBwcmlu dGYoIj9Tb3JyeSwgbm90IGltcGxlbWVudGVkIHlldCAtIFwiJXNcIlxuIixjbWRidWYpOwotCSAg ICByZXR1cm4oLTkpOwotCX0KLSAgICB9Ci0gICAgaWYgKGN4ID09IFhYVFJBQ0UpCQkJLyogVFJB Q0UgKi8KLSAgICAgIHJldHVybihkb3RyYWNlKCkpOwotI2VuZGlmIC8qIE5PU1BMICovCi0KLSNp ZmRlZiBDS19QRVJNUwotI2lmZGVmIFVOSVgKLSAgICBpZiAoY3ggPT0gWFhDSE1PRCkKLSAgICAg IHJldHVybihkb3VjaG1vZCgpKTsJCS8qIERvIFVuaXggY2htb2QgKi8KLSNlbmRpZiAvKiBVTklY ICovCi0jZW5kaWYgLyogQ0tfUEVSTVMgKi8KLQotICAgIGlmIChjeCA9PSBYWFBST01QKQotICAg ICAgcmV0dXJuKGRvcHJvbXB0KCkpOwotCi0gICAgaWYgKGN4ID09IFhYR1JFUCkKLSAgICAgIHJl dHVybihkb2dyZXAoKSk7Ci0KLSAgICBpZiAoY3ggPT0gWFhERUJVRykgewkJLyogREVCVUcgKi8K LSNpZm5kZWYgREVCVUcKLQlpbnQgZHVtbXkgPSAwOwotCXJldHVybihzZXRvbigmZHVtbXkpKTsK LSNlbHNlCi0JcmV0dXJuKHNldG9uKCZkZWJsb2cpKTsKLSNlbmRpZiAvKiBERUJVRyAqLwotICAg IH0KLSAgICBpZiAoY3ggPT0gWFhNU0cgfHwgY3ggPT0gWFhYTVNHKSB7CS8qIE1FU1NBR0UgKi8K LQlleHRlcm4gaW50IGRlYm1zZzsJCS8qIFNjcmlwdCBkZWJ1Z2dpbmcgbWVzc2FnZXMgKi8KLQlp ZiAoKHggPSBjbXR4dCgiTWVzc2FnZSB0byBwcmludCBpZiBTRVQgREVCVUcgTUVTU0FHRSBpcyBP TiBvciBTVERFUlIiLAotCQkgIiIsJnMseHhzdHJpbmcpKSA8IDApCi0JICByZXR1cm4oeCk7Ci0J aWYgKCFzKQkJCQkvKiBXYXRjaCBvdXQgZm9yIG51bGwgcmVzdWx0ICovCi0JICBzID0gIiI7CQkJ LyogTWFrZSBpdCBhbiBlbXB0eSBzdHJpbmcgKi8KLQllbHNlIAkJCQkvKiBOb3QgbnVsbCAqLwot CSAgcyA9IGJyc3RyaXAocyk7CQkvKiBTdHJpcCBicmFjZXMgYW5kIGRvdWJsZXF1b3RlcyAqLwot CXN3aXRjaCAoZGVibXNnKSB7CQkvKiBOb3QgZGVidWdnaW5nIC0gZG9uJ3QgcHJpbnQgKi8KLQkg IGNhc2UgMDoKLQkgICAgYnJlYWs7Ci0JICBjYXNlIDE6Ci0JICAgIHByaW50ZigiJXMiLHMpOwkJ LyogUHJpbnQgdG8gc3Rkb3V0ICovCi0JICAgIGlmIChjeCA9PSBYWE1TRykgcHJpbnRmKCJcbiIp OwotCSAgICBicmVhazsKLQkgIGNhc2UgMjoKLQkgICAgZnByaW50ZihzdGRlcnIsIiVzIixzKTsJ LyogRGl0dG8gYnV0IHByaW50IHRvIHN0ZGVyciAqLwotCSAgICBpZiAoY3ggPT0gWFhNU0cpIGZw cmludGYoc3RkZXJyLCJcbiIpOwotCSAgICBicmVhazsKLQl9Ci0JcmV0dXJuKDApOwkJCS8qIFJl dHVybiB3aXRob3V0IGFmZmVjdGluZyBTVUNDRVNTICovCi0gICAgfQotCi0jaWZkZWYgQ0tMRUFS TgotICAgIGlmIChjeCA9PSBYWExFQVJOKSB7CQkvKiBMRUFSTiAqLwotCXN0cnVjdCBGREIgb2Ys IHN3LCBjbTsKLQlpbnQgY2xvc2luZyA9IDAsIG9mZiA9IDAsIG9uID0gMCwgY29uZmlybWVkID0g MDsKLQljaGFyIGM7Ci0KLQljbWZkYmkoJnN3LAkJCS8qIDJuZCBGREIgLSBvcHRpb25hbCAvUEFH RSBzd2l0Y2ggKi8KLQkgICAgICAgX0NNS0VZLAkJCS8qIGZjb2RlICovCi0JICAgICAgICJTY3Jp cHQgZmlsZSBuYW1lLCBvciBzd2l0Y2giLCAvKiBobHBtc2cgKi8KLQkgICAgICAgIiIsCQkJLyog ZGVmYXVsdCAqLwotCSAgICAgICAiIiwJCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwotCSAgICAg ICAzLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLwotCSAgICAgICA0LAkJ CS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kgKi8KLQkgICAgICAgeHhzdHJpbmcs CQkvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0JICAgICAgIGxlYXJuc3dpLAkJLyogS2V5d29y ZCB0YWJsZSAqLwotCSAgICAgICAmb2YJCQkvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCi0JICAg ICAgICk7Ci0JY21mZGJpKCZvZixfQ01PRkksIiIsIiIsIiIsMCwwLHh4c3RyaW5nLE5VTEwsJmNt KTsKLQljbWZkYmkoJmNtLF9DTUNGTSwiIiwiIiwiIiwwLDAsTlVMTCxOVUxMLE5VTEwpOwotCWxp bmVbMF0gPSBOVUw7Ci0KLQl3aGlsZSAoIWNvbmZpcm1lZCkgewotCSAgICB4ID0gY21mZGIoJnN3 KTsJCS8qIFBhcnNlIHNvbWV0aGluZyAqLwotCSAgICBpZiAoeCA8IDApCi0JICAgICAgcmV0dXJu KHgpOwotCSAgICBzd2l0Y2ggKGNtcmVzdWx0LmZjb2RlKSB7CS8qIFdoYXQgd2FzIGl0PyAqLwot CSAgICAgIGNhc2UgX0NNT0ZJOgkJLyogT3V0cHV0IGZpbGUgbmFtZSAqLwotCQlja3N0cm5jcHko bGluZSxjbXJlc3VsdC5zcmVzdWx0LExJTkJVRlNJWik7Ci0JCWJyZWFrOwotCSAgICAgIGNhc2Ug X0NNS0VZOgkJLyogU3dpdGNoICovCi0JCWMgPSBjbWdicmsoKTsKLQkJaWYgKChjID09ICc6JyB8 fCBjID09ICc9JykgJiYgIShjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKLQkJICAgIHByaW50Zigi P1RoaXMgc3dpdGNoIGRvZXMgbm90IHRha2UgYW4gYXJndW1lbnRcbiIpOwotCQkgICAgcmV0dXJu KC05KTsKLQkJfQotCQlzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsKLQkJICBjYXNlIDI6CQkv KiAvQ0xPU0UgKi8KLQkJICAgIGNsb3NpbmcgPSAxOwkvKiBGYWxsIHRocnUgb24gcHVycG9zZSAq LwotCQkgIGNhc2UgMDoJCS8qIC9PRkYgKi8KLQkJICAgIG9mZiA9IDE7Ci0JCSAgICBvbiA9IDA7 Ci0JCSAgICBicmVhazsKLQkJICBjYXNlIDE6CQkvKiAvT04gKi8KLQkJICAgIG9uID0gMTsKLQkJ ICAgIG9mZiA9IDA7Ci0JCSAgICBicmVhazsKLQkJfQotCQlicmVhazsKLQkgICAgICBjYXNlIF9D TUNGTToJCS8qIENvbmZpcm1hdGlvbiAqLwotCQljb25maXJtZWQrKzsKLQkJYnJlYWs7Ci0JICAg IH0KLQl9Ci0JaWYgKGNsb3NpbmcpIHsKLQkgICAgaWYgKGxlYXJuZnApIHsKLQkJZmNsb3NlKGxl YXJuZnApOwotCQlsZWFybmZwID0gTlVMTDsKLQkgICAgfQotCSAgICBtYWtlc3RyKCZsZWFybmZp bGUsTlVMTCk7Ci0JfQotCWlmIChsaW5lWzBdKSB7Ci0JICAgIGlmICghb24gJiYgIW9mZikKLQkg ICAgICBvbiA9IDE7Ci0JICAgIGlmIChsZWFybmZwKSB7Ci0JCWZjbG9zZShsZWFybmZwKTsKLQkJ bGVhcm5mcCA9IE5VTEw7Ci0JICAgIH0KLQkgICAgbWFrZXN0cigmbGVhcm5maWxlLGxpbmUpOwot CSAgICBpZiAobGVhcm5maWxlKSB7Ci0JCWNoYXIgKiBtb2RlcyA9ICJ3IjsKLQkJbGVhcm5mcCA9 IGZvcGVuKGxlYXJuZmlsZSxtb2Rlcyk7Ci0JCWlmICghbGVhcm5mcCkgewotCQkgICAgZGVidWco RjExMCwiTEVBUk4gZmlsZSBvcGVuIGVycm9yIixsZWFybmZpbGUsMCk7Ci0JCSAgICBwZXJyb3Io bGVhcm5maWxlKTsKLQkJICAgIHJldHVybigtOSk7Ci0JCX0gZWxzZSB7Ci0jaWZkZWYgWkZOUUZQ Ci0JCSAgICBpZiAoemZucWZwKGxlYXJuZmlsZSxUTVBCVUZTSVosdG1wYnVmKSkKLQkJICAgICAg bWFrZXN0cigmbGVhcm5maWxlLHRtcGJ1Zik7Ci0jZW5kaWYgLyogWkZOUUZQICovCi0JCSAgICBk ZWJ1ZyhGMTEwLCJMRUFSTiBmaWxlIG9wZW4gb2siLGxlYXJuZmlsZSwwKTsKLQkJICAgIGlmICgh cXVpZXQpIHsKLQkJCXByaW50ZigiUmVjb3JkaW5nIHRvICVzLi4uXG5cbiIsbGVhcm5maWxlKTsK LQkJCXByaW50ZigKLSIgV0FSTklORzogSWYgeW91IHR5cGUgeW91ciBwYXNzd29yZCBkdXJpbmcg c2NyaXB0IHJlY29yZGluZywgaXQgd2lsbCBhcHBlYXJcblwKLSBpbiB0aGUgZmlsZS4gIEJlIHN1 cmUgdG8gZWRpdCBpdCBvciB0YWtlIG90aGVyIGFwcHJvcHJpYXRlIHByZWNhdXRpb25zLlxuXG4i Ci0JCQkgICAgICAgKTsKLQkJICAgIH0KLQkJICAgIGZwdXRzKCAgIjsgU2NyaXB0ZmlsZTogIixs ZWFybmZwKTsKLQkJICAgIGZwdXRzKGxlYXJuZmlsZSxsZWFybmZwKTsKLQkJICAgIGZwdXRzKCJc bjsgRGlyZWN0b3J5OiAgIixsZWFybmZwKTsKLQkJICAgIGZwdXRzKHpndGRpcigpLGxlYXJuZnAp OwotCQkgICAgZnB1dHMoIlxuOyBSZWNvcmRlZDogICAiLGxlYXJuZnApOwotCQkgICAgZnB1dHMo Y2tkYXRlKCksbGVhcm5mcCk7Ci0JCSAgICBmcHV0cygiXG4iLGxlYXJuZnApOwotCQl9Ci0JICAg IH0KLQl9Ci0JaWYgKG9uKSB7Ci0JICAgIGxlYXJuaW5nID0gMTsKLQl9IGVsc2UgaWYgKG9mZikg ewotCSAgICBsZWFybmluZyA9IDA7Ci0JfQotCWRlYnVnKEYxMDEsIkxFQVJOIGxlYXJuaW5nIiwi IixsZWFybmluZyk7Ci0JcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tM RUFSTiAqLwotCi0jaWZkZWYgTkVXRlRQCi0gICAgaWYgKGN4ID09IFhYVVNFUiB8fCBjeCA9PSBY WEFDQ1QpIHsKLQlpZiAoIWZ0cGlzb3BlbigpKSB7Ci0JICAgIHByaW50ZigiP0ZUUCBjb25uZWN0 aW9uIGlzIG5vdCBvcGVuXG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0JcmV0dXJuKHN1Y2Nl c3MgPSAoY3ggPT0gWFhVU0VSKSA/IGRvZnRwdXNyKCkgOiBkb2Z0cGFjY3QoKSk7Ci0gICAgfQot ICAgIGlmIChjeCA9PSBYWFNJVEUgfHwgY3ggPT0gWFhQQVNWKSB7Ci0JaWYgKCFmdHBpc29wZW4o KSkgewotCSAgICBwcmludGYoIj9GVFAgY29ubmVjdGlvbiBpcyBub3Qgb3BlblxuIik7Ci0JICAg IHJldHVybigtOSk7Ci0JfQotCXJldHVybihzdWNjZXNzID0gKGN4ID09IFhYU0lURSkgPyBkb2Z0 cHNpdGUoKSA6IGRvc2V0ZnRwcHN2KCkpOwotICAgIH0KLSNlbmRpZiAvKiBORVdGVFAgKi8KLQot ICAgIGlmIChjeCA9PSBYWE9SSUUpIHsJCQkvKiBPUklFTlRBVElPTiAqLwotCWV4dGVybiBjaGFy ICogbXluYW1lOwotCWludCBpLCB5LCBuID0gMDsKLSAgICAgICAgY2hhciAqIHMsICpwLCB2YnVm WzMyXTsKLQljaGFyICogdmFyc1sxNl07ICAgICAgIGNoYXIgKiBsZWdlbmRbMTZdOwotCi0JaWYg KCh5ID0gY21jZm0oKSkgPCAwKQotCSAgcmV0dXJuKHkpOwotCi0JcHJpbnRmKCJcblByb2dyYW0g bmFtZTpcbiAgJXNcblxuIixteW5hbWUpOwotCW4gKz0gNDsKLQotI2lmZGVmIE5UCi0JdmFyc1sw XSA9ICJob21lIjsgICAgICBsZWdlbmRbMF0gPSAiWW91ciBob21lIGRpcmVjdG9yeSI7Ci0JdmFy c1sxXSA9ICJkaXJlY3RvcnkiOyBsZWdlbmRbMV0gPSAiSzk1J3MgY3VycmVudCBkaXJlY3Rvcnki OwotCXZhcnNbMl0gPSAiZXhlZGlyIjsgICAgbGVnZW5kWzJdID0gIks5NSBQcm9ncmFtIGRpcmVj dG9yeSI7Ci0JdmFyc1szXSA9ICJpbmlkaXIiOyAgICBsZWdlbmRbM10gPSAiSzk1IEluaXRpYWxp emF0aW9uIGZpbGUgZGlyZWN0b3J5IjsKLQl2YXJzWzRdID0gInN0YXJ0dXAiOyAgIGxlZ2VuZFs0 XSA9ICJDdXJyZW50IGRpcmVjdG9yeSB3aGVuIHN0YXJ0ZWQiOwotCQotICAgICAgICB2YXJzWzVd ID0gImNvbW1vbiI7Ci0gICAgICAgIGxlZ2VuZFs1XSA9ICJLOTUgZGF0YSBmb3IgYWxsIHVzZXJz IGFuZCBLOTVTSVRFLklOSSBmaWxlIjsKLQkKLSAgICAgICAgdmFyc1s2XSA9ICJwZXJzb25hbCI7 ICBsZWdlbmRbNl0gPSAiWW91ciBwZXJzb25hbCBkYXRhIGRpcmVjdG9yeSB0cmVlIjsKLSAgICAg ICAgdmFyc1s3XSA9ICJkZXNrdG9wIjsgICBsZWdlbmRbN10gPSAiWW91ciBkZXNrb3AgZGlyZWN0 b3J5IHRyZWUiOwotCQotICAgICAgICB2YXJzWzhdID0gImFwcGRhdGEiOwotICAgICAgICBsZWdl bmRbOF0gPSAiWW91ciBwZXJzb25hbCBLOTUgZGF0YSB0cmVlIGFuZCBLOTVDVVNUT00uSU5JIGZp bGUiOwotCQotICAgICAgICB2YXJzWzldID0gImRvd25sb2FkIjsgIGxlZ2VuZFs5XSA9ICJZb3Vy IEs5NSBkb3dubG9hZCBkaXJlY3RvcnkiOwotICAgICAgICB2YXJzWzEwXSA9ICJ0bXBkaXIiOyAg IGxlZ2VuZFsxMF0gPSAiWW91ciBURU1QIGRpcmVjdG9yeSI7Ci0JdmFyc1sxMV0gPSBOVUxMOyAg ICAgICBsZWdlbmRbMTFdID0gTlVMTDsKLQotCWZvciAoaSA9IDA7IGkgPCAxNiAmJiB2YXJzW2ld OyBpKyspIHsKLQkgICAgcHJpbnRmKCIlczpcbiIsbGVnZW5kW2ldKTsKLQkgICAgaWYgKCsrbiA+ IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLQkg ICAgY2ttYWttc2codmJ1ZiwzMiwiXFx2KCIsdmFyc1tpXSwiKSIsTlVMTCk7Ci0JICAgIHByaW50 ZigiICBWYXJpYWJsZTogICAlc1xuIix2YnVmKTsKLQkgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0g MykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLQkgICAgeSA9IFRNUEJV RlNJWjsKLQkgICAgcyA9IHRtcGJ1ZjsKLQkgICAgenpzdHJpbmcodmJ1ZiwmcywmeSk7Ci0JICAg IGxpbmVbMF0gPSBOVUw7Ci0JICAgIGNrR2V0TG9uZ1BhdGhOYW1lKHRtcGJ1ZixsaW5lLExJTkJV RlNJWik7Ci0JICAgIHByaW50ZigiICBMb25nIG5hbWU6ICAlc1xuIixsaW5lKTsKLQkgICAgaWYg KCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0g MDsKLQkgICAgbGluZVswXSA9IE5VTDsKLQkgICAgR2V0U2hvcnRQYXRoTmFtZSh0bXBidWYsbGlu ZSxMSU5CVUZTSVopOwotCSAgICBwcmludGYoIiAgU2hvcnQgbmFtZTogJXNcbiIsbGluZSk7Ci0J ICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVs c2UgbiA9IDA7Ci0gICAgICAgICAgICBwcmludGYoIlxuIik7Ci0JICAgIGlmICgrK24gPiBjbWRf cm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Ci0JfQotI2Vs c2UgIC8qIE5UICovCi0KLQl2YXJzWzBdID0gImhvbWUiOyAgICAgIGxlZ2VuZFswXSA9ICJZb3Vy IGhvbWUgZGlyZWN0b3J5IjsKLQl2YXJzWzFdID0gImRpcmVjdG9yeSI7IGxlZ2VuZFsxXSA9ICJL ZXJtaXQncyBjdXJyZW50IGRpcmVjdG9yeSI7Ci0JdmFyc1syXSA9ICJleGVkaXIiOyAgICBsZWdl bmRbMl0gPSAiS2VybWl0J3MgcHJvZ3JhbSBkaXJlY3RvcnkiOwotCXZhcnNbM10gPSAiaW5pZGly IjsgICAgbGVnZW5kWzNdID0gIkluaXRpYWxpemF0aW9uIGZpbGUgZGlyZWN0b3J5IjsKLQl2YXJz WzRdID0gInN0YXJ0dXAiOyAgIGxlZ2VuZFs0XSA9ICJDdXJyZW50IGRpcmVjdG9yeSB3aGVuIHN0 YXJ0ZWQiOwotCXZhcnNbNV0gPSAiZG93bmxvYWQiOyAgbGVnZW5kWzVdID0gIktlcm1pdCBkb3du bG9hZCBkaXJlY3RvcnkiOwotCXZhcnNbNl0gPSBOVUxMOwkgICAgICAgbGVnZW5kWzZdID0gTlVM TDsKLQotCWZvciAoaSA9IDA7IGkgPCAxNiAmJiB2YXJzW2ldOyBpKyspIHsKLQkgICAgcHJpbnRm KCIlczpcbiIsbGVnZW5kW2ldKTsKLQkgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFh c2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKLQkgICAgY2ttYWttc2codmJ1ZiwzMiwi XFx2KCIsdmFyc1tpXSwiKSIsTlVMTCk7Ci0JICAgIHByaW50ZigiICBWYXJpYWJsZTogJXNcbiIs dmJ1Zik7Ci0JICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1 cm4oMCk7IGVsc2UgbiA9IDA7Ci0JICAgIHkgPSBUTVBCVUZTSVo7Ci0JICAgIHMgPSB0bXBidWY7 Ci0JICAgIHp6c3RyaW5nKHZidWYsJnMsJnkpOwotICAgICAgICAgICAgcHJpbnRmKCIgIFZhbHVl OiAgICAlc1xuIix0bXBidWYpOwotCSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFz a21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwotICAgICAgICAgICAgcHJpbnRmKCJcbiIp OwotCSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDAp OyBlbHNlIG4gPSAwOwotCX0KLSNlbmRpZiAvKiBOVCAqLwotCXJldHVybihzdWNjZXNzID0gMSk7 Ci0gICAgfQotCi0jaWZkZWYgTlQKLSAgICBpZiAoY3ggPT0gWFhESUFMRVIpIHsKLSAgICAgICAg U3RhcnREaWFsZXIoKTsKLSAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKLSAgICB9Ci0jZW5k aWYgLyogTlQgKi8KLQotICAgIGlmIChjeCA9PSBYWENPTlQpIHsJCQkvKiBDT05USU5VRSAqLwot CWlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKLQkgIHJldHVybih4KTsKLQlpZiAoIXhjbWRzcmMpIHsJ CQkvKiBBdCBwcm9tcHQ6IGNvbnRpbnVlIHNjcmlwdCAqLwotCSAgICBpZiAoY21kbHZsID4gMCkK LQkgICAgICBwb3BjbHZsKCk7CQkvKiBQb3AgY29tbWFuZCBsZXZlbCAqLwotCSAgICByZXR1cm4o c3VjY2VzcyA9IDEpOwkvKiBhbHdheXMgc3VjY2VlZHMgKi8KLSNpZm5kZWYgTk9TUEwKLQl9IGVs c2UgewkJCS8qIEluIHNjcmlwdDogd2hhdGV2ZXIuLi4gKi8KLQkgICAgeCA9IG1sb29rKG1hY3Rh YiwiY29udGludWUiLG5tYWMpOwotCSAgICAvKiBEb24ndCBzZXQgc3VjY2VzcyAqLwotCSAgICBy ZXR1cm4oZG9kbyh4LE5VTEwsY21kc3RrW2NtZGx2bF0uY2NmbGdzKSk7Ci0jZW5kaWYgLyogTk9T UEwgKi8KLQl9Ci0gICAgfQotI2lmZGVmIFVOSVgKLSNpZm5kZWYgTk9QVVRFTlYKLS8qCi0gIE5P VEU6IFN5bnRheCBpcyBQVVRFTlYgbmFtZSB2YWx1ZSwgbm90IFBVVEVOViBuYW1lPXZhbHVlLgot ICBJIGNvdWxkIGNoZWNrIGZvciB0aGlzIGJ1dCBpdCB3b3VsZCBiZSB0b28gbXVjaCBtYWdpYy4K LSovCi0gICAgaWYgKGN4ID09IFhYUFVURSkgewkJCS8qIFBVVEVOViAqLwotICAgICAgICBjaGFy ICogdCA9IHRtcGJ1ZjsJCS8qIENyZWF0ZSBvciBhbHRlciBlbnZpcm9ubWVudCB2YXIgKi8KLQlj aGFyICogczEgPSBOVUxMLCAqIHMyID0gTlVMTDsKLQlpZiAoKHggPSBjbWZsZCgiVmFyaWFibGUg bmFtZSIsIiIsJnMseHhzdHJpbmcpKSA8IDApCi0gICAgICAgICAgcmV0dXJuKHgpOwotCWlmIChz KSBpZiAocyA9PSAiIikgcyA9IE5VTEw7Ci0JKFZPSUQpIG1ha2VzdHIoJnMxLHMpOwotCWlmIChz ICYmICFzMSkgewotCSAgICBwcmludGYoIj9QVVRFTlYgLSBtZW1vcnkgYWxsb2NhdGlvbiBmYWls dXJlXG4iKTsKLQkgICAgcmV0dXJuKC05KTsKLQl9Ci0JaWYgKCh4ID0gY210eHQoIlZhbHVlIiwi Iiwmcyx4eHN0cmluZykpIDwgMCkKLQkgIHJldHVybih4KTsKLQlpZiAocykgaWYgKHMgPT0gIiIp IHMgPSBOVUxMOwotCShWT0lEKSBtYWtlc3RyKCZzMixzKTsKLQlzdWNjZXNzID0gZG9wdXRlbnYo czEsczIpOwotCShWT0lEKSBtYWtlc3RyKCZzMSxOVUxMKTsKLQkoVk9JRCkgbWFrZXN0cigmczIs TlVMTCk7Ci0JcmV0dXJuKHN1Y2Nlc3MpOwotICAgIH0KLSNlbmRpZgkvKiBOT1BVVEVOViAqLwot I2VuZGlmCS8qIFVOSVggKi8KLQotICAgIGlmIChjeCA9PSBYWE5PVEFWKSB7CQkvKiBDb21tYW5k IGluIHRhYmxlIG5vdCBhdmFpbGFibGUgKi8KLQlja3N0cm5jcHkodG1wYnVmLGF0bWJ1ZixUTVBC VUZTSVopOwotCWlmICgoeCA9IGNtdHh0KCJSZXN0IG9mIGNvbW1hbmQiLCIiLCZzLE5VTEwpKSA8 IDApCi0JICByZXR1cm4oeCk7Ci0JcHJpbnRmKCJTb3JyeSwgXCIlc1wiIG5vdCBjb25maWd1cmVk IGluIHRoaXMgdmVyc2lvbiBvZiBLZXJtaXQuXG4iLAotCSAgICAgICB0bXBidWYKLQkgICAgICAg KTsKLQlyZXR1cm4oc3VjY2VzcyA9IDApOwotICAgIH0KLSAgICByZXR1cm4oLTIpOwkJCQkvKiBO b25lIG9mIHRoZSBhYm92ZSAqLwotCi19IC8qIGVuZCBvZiBkb2NtZCgpICovCi0KLSNlbmRpZiAv KiBOT0lDUCAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTku MC4zMDIvY2t1dXNyLmggYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2Nr dXVzci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Mzg5MWZiLi4wMDAwMDAwCi0t LSBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXNyLmgKKysrIC9k ZXYvbnVsbApAQCAtMSwzMDQ5ICswLDAgQEAKLS8qICBDIEsgVSBVIFMgUiAuIEggIC0tICBTeW1i b2wgZGVmaW5pdGlvbnMgZm9yIEMtS2VybWl0IGNrdXVzKi5jIG1vZHVsZXMgICovCi0KLS8qCi0g IEF1dGhvcjogRnJhbmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4sCi0gIENvbHVtYmlhIFVu aXZlcnNpdHkgQWNhZGVtaWMgSW5mb3JtYXRpb24gU3lzdGVtcywgTmV3IFlvcmsgQ2l0eS4KLQot ICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMTAsCi0gICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5p dmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KLSAgICBBbGwgcmlnaHRzIHJlc2VydmVk LiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQotICAgIGNvcHlyaWdo dCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Np b25zLgotKi8KLSNpZm5kZWYgQ0tVVVNSX0gKLSNkZWZpbmUgQ0tVVVNSX0gKLQotI2luY2x1ZGUg ImNrdWNtZC5oIgkJCS8qIEdldCBzeW1ib2xzIGZyb20gY29tbWFuZCBwYWNrYWdlICovCi0KLSNp Zm5kZWYgTk9MVUNBQ0hFCQkJLyogVXNlIGxvb2t1cCgpIGNhY2hlICovCi0jaWZuZGVmIE5PU1BM CQkJCS8qIFRvIHNwZWVkIHVwIHNjcmlwdCBwcm9ncmFtcyAqLwotI2lmbmRlZiBVU0VfTFVDQUNI RQotI2RlZmluZSBVU0VfTFVDQUNIRQotI2VuZGlmIC8qIFVTRV9MVUNBQ0hFICovCi0jZW5kaWYg LyogTk9TUEwgKi8KLSNlbmRpZiAvKiBOT0xVQ0FDSEUgKi8KLQotI2lmbmRlZiBOT0RPVUJMRVFV T1RJTkcJCQkvKiBOZXcgdG8gOC4wICovCi0jZGVmaW5lIERPVUJMRVFVT1RJTkcJCQkvKiBBbGxv dyBmaWVsZHMgdG8gYmUgZW5jbG9zZWQgaW4gKi8KLSNlbmRpZiAvKiBOT0RPVUJMRVFVT1RJTkcg Ki8JCS8qIGRvdWJsZXF1b3Rlcy4gKi8KLQotI2lmbmRlZiBOT0xPQ1VTCQkJCS8qIFNFVCBMT0NV UyAqLwotI2RlZmluZSBMT0NVUwotI2VuZGlmIC8qIE5PTE9DVVMgKi8KLQotLyogU2l6ZXMgb2Yg dGhpbmdzIC0gRk5WQUxMIGFuZCBNQVhBUkdMRU4gaW5jcmVhc2VkIGZyb20gOEsgMjAwNTA5MTIg Ki8KLQotI2lmZGVmIEJJR0JVRk9LCi0jZGVmaW5lIEZOVkFMTCBDTURCTAkJCS8qIEZ1bmN0aW9u IHJldHVybiB2YWx1ZSBsZW5ndGggKi8KLSNkZWZpbmUgTUFYQVJHTEVOIENNREJMCQkJLyogTWF4 IGZ1bmMgYXJnIGxlbmd0aCBhZnRlciBldmFsICovCi0jZGVmaW5lIE1BWEFSR0xJU1QgMTAyNAkJ CS8qIE1heCBudW1iZXIgb2YgYXJncyBmb3IgYSBtYWNybyAqLwotI2RlZmluZSBGU1BFQ0wgQ01E QkwJCQkvKiBNYXggbGVuZ3RoIGZvciBNU0VORC9HRVQgc3RyaW5nICovCi0jZGVmaW5lIE1TRU5E TUFYIDEwMjQJCQkvKiBOdW1iZXIgb2YgZmlsZXNwZWNzIGZvciBNU0VORCAqLwotI2RlZmluZSBN QUNfTUFYIDE2Mzg0CQkJLyogTWF4aW11bSBudW1iZXIgb2YgbWFjcm9zICovCi0KLSNlbHNlICAv KiBTYW1lIGFzIGFib3ZlIGJ1dCBmb3Igc21hbGxlciBidWlsZHMuLi4gKi8KLQotI2RlZmluZSBG TlZBTEwgMTAyMgotI2RlZmluZSBNQVhBUkdMRU4gMTAyMwotI2RlZmluZSBNQVhBUkdMSVNUIDY0 Ci0jZGVmaW5lIEZTUEVDTCAzMDAKLSNkZWZpbmUgTVNFTkRNQVggMTI4Ci0jZGVmaW5lIE1BQ19N QVggMTAyNAotI2VuZGlmIC8qIEJJR0JVRk9LICovCi0KLSNkZWZpbmUgR1ZBUlMgMTI3CQkJLyog SGlnaGVzdCBnbG9iYWwgdmFyIGFsbG93ZWQgKi8KLSNpZmRlZiBCSUdCVUZPSwotI2RlZmluZSBW TkFNTCA0MDk2CQkJLyogTWF4IGxlbmd0aCBmb3IgdmFyaWFibGUgbmFtZSAqLwotI2RlZmluZSBB UlJBWVJFRkxFTiAxMDI0CQkvKiBNYXggbGVuZ3RoIGZvciBhcnJheSByZWZlcmVuY2UgKi8KLSNk ZWZpbmUgRk9SREVQVEggMzIJCQkvKiBNYXhpbXVtIGRlcHRoIG9mIG5lc3RlZCBGT1IgbG9vcHMg Ki8KLSNkZWZpbmUgTUFYVEFLRSA1NAkJCS8qIE1heGltdW0gbmVzdGluZyBvZiBUQUtFIGZpbGVz ICovCi0jZGVmaW5lIE1BQ0xFVkVMIDEyOAkJCS8qIE1heGltdW0gbmVzdGluZyBmb3IgbWFjcm9z ICovCi0jZGVmaW5lIElOUEJVRlNJWiA0MDk2CQkJLyogU2l6ZSBvZiBJTlBVVCBidWZmZXIgKi8K LSNkZWZpbmUgUFJPTVBUTCAxMDI0CQkJLyogTWF4IGxlbmd0aCBmb3IgcHJvbXB0ICovCi0jZGVm aW5lIExCTFNJWiA4MTkyCQkJLyogTWF4aW11bSBsZW5ndGggZm9yIGEgR09UTyBsYWJlbCAqLwot I2Vsc2UKLSNkZWZpbmUgVk5BTUwgMjU2CQkJLyogTWF4IGxlbmd0aCBmb3IgdmFyaWFibGUgbmFt ZSAqLwotI2RlZmluZSBBUlJBWVJFRkxFTiAxMjgJCQkvKiBNYXggbGVuZ3RoIGZvciBhcnJheSBy ZWZlcmVuY2UgKi8KLSNkZWZpbmUgRk9SREVQVEggMTAJCQkvKiBNYXhpbXVtIGRlcHRoIG9mIG5l c3RlZCBGT1IgbG9vcHMgKi8KLSNkZWZpbmUgTUFYVEFLRSAzMgkJCS8qIE1heGltdW0gbmVzdGlu ZyBvZiBUQUtFIGZpbGVzICovCi0jZGVmaW5lIE1BQ0xFVkVMIDY0CQkJLyogTWF4aW11bSBuZXN0 aW5nIGZvciBtYWNyb3MgKi8KLSNkZWZpbmUgSU5QQlVGU0laIDI1NgotI2RlZmluZSBQUk9NUFRM IDI1NgkJCS8qIE1heCBsZW5ndGggZm9yIHByb21wdCAqLwotI2RlZmluZSBMQkxTSVogMTI4CQkJ LyogTWF4aW11bSBsZW5ndGggZm9yIGEgR09UTyBsYWJlbCAqLwotI2VuZGlmIC8qIEJJR0JVRk9L ICovCi0jZGVmaW5lIE5BUkdTIDEwCQkJLyogTWF4IG51bWJlciBvZiBtYWNybyBhcmd1bWVudHMg Ki8KLSNkZWZpbmUgTElOQlVGU0laIChDTURCTCArIDEwKQkJLyogU2l6ZSBvZiBsaW5lW10gYnVm ZmVyICovCi0jZGVmaW5lIFRNUEJVRlNJWiAoQ01EQkwgKyAxMCkJCS8qIFNpemUgb2YgdGVtcG9y YXJ5IGJ1ZmZlciAqLwotCi0jZGVmaW5lIENNRFNUS0wgKCBNQUNMRVZFTCArIE1BWFRBS0UgKyAy KSAvKiBDb21tYW5kIHN0YWNrIGRlcHRoICovCi0KLSNpZm5kZWYgTk9QVVJHRQkJCQkvKiBQVVJH RSBjb21tYW5kICovCi0jaWZkZWYgVU5JWAotI2RlZmluZSBDS1BVUkdFCi0jZW5kaWYgLyogVU5J WCAqLwotI2VuZGlmIC8qIE5PUFVSR0UgKi8KLQotI2lmbmRlZiBOT01JTlBVVAkJCS8qIE1JTlBV VCBjb21tYW5kICovCi0jaWZuZGVmIE5PU1BMCi0jZGVmaW5lIENLX01JTlBVVAotI2lmbmRlZiBN SU5QTUFYCi0jaWZkZWYgQklHQlVGT0sKLSNkZWZpbmUgTUlOUE1BWCA5NgkJCS8qIE1heCBudW1i ZXIgb2YgTUlOUFVUIHN0cmluZ3MgKi8KLSNlbHNlCi0jZGVmaW5lIE1JTlBNQVggMTYKLSNlbmRp ZiAvKiBCSUdCVUZPSyAqLwotI2VuZGlmIC8qIE1JTlBNQVggKi8KLSNkZWZpbmUgTUlOUEJVRkwg MjU2CQkJLyogU2l6ZSBvZiBNSU5QVVQgdGVtcCBidWZmZXIgKi8KLSNlbmRpZiAvKiBOT1NQTCAq LwotI2VuZGlmIC8qIE5PTUlOUFVUICovCi0KLSNkZWZpbmUgQVJSQVlCQVNFIDk1CQkJLyogTG93 ZXN0IGFycmF5LW5hbWUgY2hhcmFjdGVyICovCi0KLSNpZm5kZWYgTk9LRVJCQU5HCi0jaWZuZGVm IEtFUkJBTkcKLSNkZWZpbmUgS0VSQkFORwotI2VuZGlmIC8qIEtFUkJBTkcgKi8KLSNlbmRpZiAv KiBOT0tFUkJBTkcgKi8KLQotLyogQml0IHZhbHVlcyAoMSwgMiwgNCwgOCwgLi4uKSBmb3IgdGhl IGNjZmxncyBmaWVsZCAqLwotCi0jZGVmaW5lIENGX0FQQyAgMQkJCS8qIEV4ZWN1dGluZyBhbiBB UEMgY29tbWFuZCAqLwotI2RlZmluZSBDRl9LTUFDIDIJCQkvKiBFeGVjdXRpbmcgYSBcS21hY3Jv ICovCi0jZGVmaW5lIENGX0NNREwgNAkJCS8qIE1hY3JvIGZyb20gLUMgImJsYWgiIGNvbW1hbmQg bGluZSAqLwotI2RlZmluZSBDRl9SRVhYIDgJCQkvKiBNYWNybyBmcm9tIFJFWFggaW50ZXJwcmV0 ZXIgKi8KLSNkZWZpbmUgQ0ZfSU1BQyAxNgkJCS8qIEludGVybmFsIG1hY3JvIGxpa2UgRk9SLCBX SElMRS4uLiAqLwotCi1zdHJ1Y3QgY21kcHRyIHsJCQkJLyogQ29tbWFuZCBzdGFjayBzdHJ1Y3R1 cmUgKi8KLSAgICBpbnQgc3JjOwkJCQkvKiBDb21tYW5kIFNvdXJjZSAqLwotICAgIGludCBsdmw7 CQkJCS8qIEN1cnJlbnQgVEFLRSBvciBETyBsZXZlbCAqLwotICAgIGludCBjY2ZsZ3M7CQkJCS8q IEZsYWdzICovCi19OwotCi1zdHJ1Y3QgbXRhYiB7CQkJCS8qIE1hY3JvIHRhYmxlLCBsaWtlIGtl eXdvcmQgdGFibGUgKi8KLSAgICBjaGFyICprd2Q7CQkJCS8qIEJ1dCB3aXRoIHBvaW50ZXJzIGZv ciB2YWxzICovCi0gICAgY2hhciAqbXZhbDsJCQkJLyogaW5zdGVhZCBvZiBpbnRzLiAqLwotICAg IHNob3J0IGZsZ3M7Ci19OwotCi1zdHJ1Y3QgbG9jYWx2YXIgewkJCS8qIExvY2FsIHZhcmlhYmxl IHN0cnVjdHVyZS4gKi8KLSAgICBjaGFyICogbHZfbmFtZTsKLSAgICBjaGFyICogbHZfdmFsdWU7 Ci0gICAgc3RydWN0IGxvY2FsdmFyICogbHZfbmV4dDsKLX07Ci0KLXN0cnVjdCBzdHJpbmdsaXN0 IHsJCQkvKiBHZW5lcmFsIHB1cnBvc2Ugc3RyaW5nIGxpc3QgKi8KLSAgICBjaGFyICogc2xfbmFt ZTsKLSAgICBzdHJ1Y3Qgc3RyaW5nbGlzdCAqIHNsX25leHQ7Ci19OwotCi1zdHJ1Y3Qgc3RyaW5n aW50IHsJCQkvKiBTdHJpbmcgYW5kICh3aWRlKSBpbnRlZ2VyICovCi0gICAgY2hhciAqIHN2YWw7 CQkJLyogdXNlZCBtYWlubHkgd2l0aCBjb21tYW5kIHN3aXRjaGVzICovCi0gICAgaW50IGl2YWw7 Ci0gICAgQ0tfT0ZGX1Qgd3ZhbDsKLX07Ci0KLSNpZm5kZWYgTk9JQ1AKLS8qCi0gIEMtS2VybWl0 IEluaXRpYWxpemF0aW9uIGZpbGUuLi4KLQotICBTeXN0ZW0tZGVwZW5kZW50IGRlZmF1bHRzIGFy ZSBidWlsdCBpbnRvIHRoZSBwcm9ncmFtLCBzZWUgYmVsb3cuCi0gIFRoZXNlIGNhbiBiZSBvdmVy cmlkZGVuIGluIGVpdGhlciBvZiB0d28gd2F5czoKLSAgMS4gQ0tfRFNZU0lOSSBpcyBkZWZpbmVk IGF0IGNvbXBpbGUgdGltZSwgaW4gd2hpY2ggY2FzZSBhIGRlZmF1bHQKLSAgICAgc3lzdGVtLXdp ZGUgaW5pdGlhbGl6YXRpb24gZmlsZSBuYW1lIGlzIGNob3NlbiBmcm9tIGJlbG93LCBvcjoKLSAg MjogQ0tfU1lTSU5JIGlzIGRlZmluZWQgdG8gYmUgYSBzdHJpbmcsIHdoaWNoIGxldHMgdGhlIHBy b2dyYW0KLSAgICAgYnVpbGRlciBjaG9vc2UgdGhlIGluaXRpYWxpemF0aW9uIGZpbGVzcGVjIGF0 IGNvbXBpbGUgdGltZS4KLSAgVGhlc2UgY2FuIGJlIGdpdmVuIG9uIHRoZSBDQyBjb21tYW5kIGxp bmUsIHNvIHRoZSBzb3VyY2UgY29kZSBuZWVkIG5vdCBiZQotICBjaGFuZ2VkLgotKi8KLQotI2lm bmRlZiBDS19TWVNJTkkJCQkvKiBJZiBubyBpbml0aWFsaXphdGlvbiBmaWxlIGdpdmVuLCAqLwot I2lmZGVmIENLX0RTWVNJTkkJCQkvKiBidXQgQ0tfRFNZU0lOSSBpcyBkZWZpbmVkLi4uICovCi0K LS8qIFN1cHBseSBzeXN0ZW0tZGVwZW5kZW50ICJkZWZhdWx0IGRlZmF1bHQiIGluaXRpYWxpemF0 aW9uIGZpbGUgKi8KLQotI2lmZGVmIFVOSVgJCQkJLyogRm9yIFVOSVgsIHN5c3RlbS13aWRlICov Ci0vKiBUaGlzIGFsbG93cyBvbmUgY29weSBvZiB0aGUgc3RhbmRhcmQgaW5pdCBmaWxlIG9uIHRo ZSB3aG9sZSBzeXN0ZW0sICovCi0vKiByYXRoZXIgdGhhbiBhIHNlcGFyYXRlIGNvcHkgaW4gZWFj aCB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkuICovCi0jaWZkZWYgSFBVWDEwCi0jZGVmaW5lIENLX1NZ U0lOSSAiL3Vzci9zaGFyZS9saWIva2VybWl0L2NrZXJtaXQuaW5pIgotI2Vsc2UKLSNpZmRlZiBD VV9BQ0lTCi0jZGVmaW5lIENLX1NZU0lOSSAiL3Vzci9zaGFyZS9saWIva2VybWl0L2NrZXJtaXQu aW5pIgotI2Vsc2UKLSNpZmRlZiBfX2xpbnV4X18KLSNkZWZpbmUgQ0tfU1lTSU5JICIvdXNyL3No YXJlL2tlcm1pdC9ja2VybWl0LmluaSIKLSNlbHNlCi0jZGVmaW5lIENLX1NZU0lOSSAiL3Vzci9s b2NhbC9iaW4vY2tlcm1pdC5pbmkiCi0jZW5kaWYgLyogbGludXggKi8KLSNlbmRpZiAvKiBDVV9B Q0lTICovCi0jZW5kaWYgLyogSFBVWDEwICovCi0vKiBGaWxsIGluICNlbHNlLi4jaWZkZWYncyBo ZXJlIGZvciBWTVMsIE9TLzIsIGV0Yy4gKi8KLS8qIEZpbGwgaW4gbWF0Y2hpbmcgI2VuZGlmJ3Mg aGVyZS4gKi8KLSNlbmRpZiAvKiBVTklYICovCi0KLSNlbmRpZiAvKiBDS19EU1lTSU5JICovCi0j ZW5kaWYgLyogQ0tfU1lTSU5JICovCi0KLSNpZmRlZiBDS19TWVNJTkkJCQkvKiBJbml0LWZpbGUg cHJlY2VkZW5jZSAqLwotI2lmbmRlZiBDS19JTklfQQkJCS8qIEEgbWVhbnMgc3lzdGVtLXdpZGUg ZmlsZSBmaXJzdCAqLwotI2lmbmRlZiBDS19JTklfQgkJCS8qIEIgbWVhbnMgdXNlcidzIGZpcnN0 ICovCi0jZGVmaW5lIENLX0lOSV9BCQkJLyogQSBpcyBkZWZhdWx0ICovCi0jZW5kaWYgLyogQ0tf SU5JX0IgKi8KLSNlbmRpZiAvKiBDS19JTklfQSAqLwotI2Vsc2UKLSNpZmRlZiBDS19JTklfQQkJ CQkvKiBPdGhlcndpc2UgKi8KLSN1bmRlZiBDS19JTklfQQkJCQkvKiBtYWtlIHN1cmUgdGhlc2Ug YXJlbid0IGRlZmluZWQgKi8KLSNlbmRpZiAvKiBDS19JTklfQSAqLwotI2lmZGVmIENLX0lOSV9C Ci0jdW5kZWYgQ0tfSU5JX0IKLSNlbmRpZiAvKiBDS19JTklfQiAqLwotI2VuZGlmIC8qIENLX1NZ U0lOSSAqLwotCi0jaWZkZWYgQ0tfU1lTSU5JCQkJLyogT25lIG1vcmUgY2hlY2suLi4gKi8KLSNp ZmRlZiBDS19JTklfQQkJCQkvKiBNYWtlIHN1cmUgdGhleSdyZSBub3QgYm90aCAqLwotI2lmZGVm IENLX0lOSV9CCQkJCS8qIGRlZmluZWQuICovCi0jdW5kZWYgQ0tfSU5JX0IKLSNlbmRpZiAvKiBD S19JTklfQiAqLwotI2VuZGlmIC8qIENLX0lOSV9BICovCi0jZW5kaWYgLyogQ0tfU1lTSU5JICov Ci0vKgotICBJZiBuZWl0aGVyIENLX0RTWVNJTkkgbm9yIENLX1NZU0lOSSBhcmUgZGVmaW5lZCwg dGhlc2UgYXJlIHRoZQotICBidWlsdC1pbiBkZWZhdWx0cyBmb3IgZWFjaCBwbGF0Zm9ybS4gIFVT RV9DVVNUT00gbWVhbnMgdG8gZXhlY3V0ZSB0aGUKLSAgY3VzdG9taXphdGlvbiBmaWxlIGF1dG9t YXRpY2FsbHkgaWYgdGhlIGluaXRpYWxpemF0aW9uIGZpbGUgaXMgbm90IGZvdW5kLgotKi8KLSNp Zm5kZWYgTk9DVVNUT00KLSNpZm5kZWYgVVNFX0NVU1RPTQotI2RlZmluZSBVU0VfQ1VTVE9NCi0j ZW5kaWYgLyogVVNFX0NVU1RPTSAqLwotI2VuZGlmIC8qIE5PQ1VTVE9NICovCi0KLSNpZm5kZWYg IEtFUk1SQ0wJCQkvKiBQYXRoIGxlbmd0aCBmb3IgaW5pdCBmaWxlICovCi0jZGVmaW5lIEtFUk1S Q0wgQ0tNQVhQQVRICi0jZW5kaWYgLyogIEtFUk1SQ0wgKi8KLQotI2lmZGVmIHZtcwotI2RlZmlu ZSBLRVJNUkMgIkNLRVJNSVQuSU5JIgkJLyogSW5pdCBmaWxlIG5hbWUgKi8KLSNkZWZpbmUgTVlD VVNUT00gIkNLRVJNT0QuSU5JIgkJLyogQ3VzdG9taXphdGlvbiBmaWxlIG5hbWUgKi8KLSNlbHNl Ci0jaWZkZWYgT1MyCi0jaWZkZWYgTlQKLSNkZWZpbmUgS0VSTVJDICJrOTUuaW5pIgotI2RlZmlu ZSBNWUNVU1RPTSAiazk1Y3VzdG9tLmluaSIKLSNlbHNlCi0jZGVmaW5lIEtFUk1SQyAiazIuaW5p IgotI2RlZmluZSBNWUNVU1RPTSAiazJjdXN0b20uaW5pIgotI2VuZGlmIC8qIE5UICovCi0jZWxz ZQotI2lmZGVmIFVOSVhPUk9TSwotI2RlZmluZSBLRVJNUkMgIi5rZXJtcmMiCi0jZGVmaW5lIE1Z Q1VTVE9NICIubXlrZXJtcmMiCi0jZWxzZQotI2lmZGVmIFNUUkFUVVMKLSNkZWZpbmUgS0VSTVJD ICJja2VybWl0LmluaSIKLSNkZWZpbmUgTVlDVVNUT00gImNrZXJtb2QuaW5pIgotI2Vsc2UKLSNk ZWZpbmUgS0VSTVJDICJDS0VSTUlULklOSSIKLSNkZWZpbmUgTVlDVVNUT00gImNrZXJtb2QuaW5p IgotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSNlbmRpZiAvKiBVTklYT1JPU0sgKi8KLSNlbmRpZiAv KiBPUzIgKi8KLSNlbmRpZiAvKiB2bXMgKi8KLQotI2lmbmRlZiBLRVJNUkNMCi0jZGVmaW5lIEtF Uk1SQ0wgMjU2Ci0jZW5kaWYgLyogS0VSTVJDTCAqLwotI2VuZGlmIC8qIE5PSUNQICovCi0KLS8q IFVzZXIgaW50ZXJmYWNlIGZlYXR1cmVzICovCi0KLSNpZmRlZiBDS19DVVJTRVMJCQkvKiBUaGVy bW9tZXRlciAqLwotI2lmbmRlZiBOT19QQ1RfQkFSCi0jaWZuZGVmIENLX1BDVF9CQVIKLSNkZWZp bmUgQ0tfUENUX0JBUgotI2VuZGlmIC8qIE5PX1BDVF9CQVIgKi8KLSNlbmRpZiAvKiBDS19QQ1Rf QkFSICovCi0jZW5kaWYgLyogQ0tfQ1VSU0VTICovCi0KLSNpZmRlZiBLVUkJCQkJLyogS1VJIHJl cXVpcmVzIHRoZSBUaGVybW9tZXRlciBjb2RlICovCi0jaWZuZGVmIE5PX1BDVF9CQVIKLSNpZm5k ZWYgQ0tfUENUX0JBUgotI2RlZmluZSBDS19QQ1RfQkFSCi0jZW5kaWYgLyogTk9fUENUX0JBUiAq LwotI2VuZGlmIC8qIENLX1BDVF9CQVIgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLQotLyogSW5jbHVk ZXMgKi8KLQotI2lmZGVmIE1JTklYCi0vKiB3aHk/ICovCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+ Ci0jZW5kaWYgLyogTUlOSVggKi8KLQotLyogU3ltYm9scyBmb3IgY29tbWFuZCBzb3VyY2UgKi8K LQotI2RlZmluZSBDTURfS0IgMAkJCS8qIEtleUJvYXJkIG9yIHN0YW5kYXJkIGlucHV0ICovCi0j ZGVmaW5lIENNRF9URiAxCQkJLyogVEFLRSBjb21tYW5kIEZpbGUgKi8KLSNkZWZpbmUgQ01EX01E IDIJCQkvKiBNYWNybyBEZWZpbml0aW9uICovCi0KLS8qCi0gIFNFVCBUUkFOU0ZFUiBDQU5DRUxM QVRJT04gY29tbWFuZCBzaG91bGQgYmUgYXZhaWxhYmxlIGluIGFsbCB2ZXJzaW9ucy4KLSAgQnV0 IGZvciBub3cuLi4KLSovCi0jaWZkZWYgVU5JWAkJCQkvKiBVTklYIGhhcyBpdCAqLwotI2lmbmRl ZiBYRlJDQU4KLSNkZWZpbmUgWEZSQ0FOCi0jZW5kaWYgLyogWEZSQ0FOICovCi0jZW5kaWYgLyog VU5JWCAqLwotI2lmZGVmIFZNUwkJCQkvKiBWTVMgaGFzIGl0ICovCi0jaWZuZGVmIFhGUkNBTgot I2RlZmluZSBYRlJDQU4KLSNlbmRpZiAvKiBYRlJDQU4gKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNp ZmRlZiBkYXRhZ2VuZXJhbAkJCS8qIERHIEFPUy9WUyBoYXMgaXQgKi8KLSNpZm5kZWYgWEZSQ0FO Ci0jZGVmaW5lIFhGUkNBTgotI2VuZGlmIC8qIFhGUkNBTiAqLwotI2VuZGlmIC8qIGRhdGFnZW5l cmFsICovCi0jaWZkZWYgU1RSQVRVUwkJCQkvKiBTdHJhdHVzIFZPUyBoYXMgaXQgKi8KLSNpZm5k ZWYgWEZSQ0FOCi0jZGVmaW5lIFhGUkNBTgotI2VuZGlmIC8qIFhGUkNBTiAqLwotI2VuZGlmIC8q IFNUUkFUVVMgKi8KLSNpZmRlZiBPU0sJCQkJLyogT1MtOSAqLwotI2lmbmRlZiBYRlJDQU4KLSNk ZWZpbmUgWEZSQ0FOCi0jZW5kaWYgLyogWEZSQ0FOICovCi0jZW5kaWYgLyogT1NLICovCi0KLSNp Zm5kZWYgTk9DTURMCi0vKiBFeHRlbmRlZCBDb21tYW5kLUxpbmUgT3B0aW9uIENvZGVzIChrZWVw IGFscGhhYmV0aWNhbCBieSBrZXl3b3JkKSAqLwotCi0jZGVmaW5lIFhBX0FOT04gMAkJCS8qIC0t YW5vbnltb3VzICovCi0jZGVmaW5lIFhBX0JBRkkgMQkJCS8qIC0tYmFubmVyZmlsZSAqLwotI2Rl ZmluZSBYQV9DREZJIDIJCQkvKiAtLWNkZmlsZSAqLwotI2RlZmluZSBYQV9DRE1TIDMJCQkvKiAt LWNkbWVzc2FnZSAqLwotI2RlZmluZSBYQV9IRUxQIDQJCQkvKiAtLWhlbHAgKi8KLSNkZWZpbmUg WEFfSEVGSSA1CQkJLyogLS1oZWxwZmlsZSAqLwotI2RlZmluZSBYQV9JS0ZJIDYJCQkvKiAtLXhm ZXJmaWxlICovCi0jZGVmaW5lIFhBX0lLTEcgNwkJCS8qIC0teGZlcmxvZyAqLwotI2RlZmluZSBY QV9BTkZJIDgJCQkvKiAtLWluaXRmaWxlICovCi0jZGVmaW5lIFhBX1BFUk0gOQkJCS8qIC0tcGVy bWlzc2lvbnMgKi8KLSNkZWZpbmUgWEFfUk9PVCAxMAkJCS8qIC0tcm9vdCAqLwotI2RlZmluZSBY QV9TWVNMIDExCQkJLyogLS1zeXNsb2cgKi8KLSNkZWZpbmUgWEFfVVNGSSAxMgkJCS8qIC0tdXNl cmZpbGUgKi8KLSNkZWZpbmUgWEFfV1RGSSAxMwkJCS8qIC0td3RtcGZpbGUgKi8KLSNkZWZpbmUg WEFfV1RNUCAxNAkJCS8qIC0td3RtcGxvZyAqLwotI2RlZmluZSBYQV9USU1PIDE1CQkJLyogLS10 aW1lb3V0ICovCi0jZGVmaW5lIFhBX05PSU4gMTYJCQkvKiAtLW5vaW50ZXJydXB0cyAqLwotI2Rl ZmluZSBYQV9EQkFTIDE3CQkJLyogLS1kYXRhYmFzZSAqLwotI2RlZmluZSBYQV9EQkZJIDE4CQkJ LyogLS1kYmZpbGUgKi8KLSNkZWZpbmUgWEFfUFJJViAxOQkJCS8qIC0tcHJpdmlkICovCi0jZGVm aW5lIFhBX1ZFUlMgMjAJCQkvKiAtLXZlcnNpb24gKi8KLSNkZWZpbmUgWEFfTlBSTSAyMQkJCS8q IC0tbm9wZXJtcyAqLwotI2RlZmluZSBYQV9YUE9TIDIyCQkJLyogV2luZG93IHBvc2l0aW9uIFgg Y29vcmRpbmF0ZSAqLwotI2RlZmluZSBYQV9ZUE9TIDIzCQkJLyogV2luZG93IHBvc2l0aW9uIFkg Y29vcmRpbmF0ZSAqLwotI2RlZmluZSBYQV9GTkFNIDI0CQkJLyogRm9udCBGYWNlbmFtZSAqLwot I2RlZmluZSBYQV9GU0laIDI1CQkJLyogRm9udCBTaXplICovCi0jZGVmaW5lIFhBX1RFUk0gMjYJ CQkvKiBUZXJtaW5hbCB0eXBlICovCi0jZGVmaW5lIFhBX0NTRVQgMjcJCQkvKiBSZW1vdGUgQ2hh cmFjdGVyIFNldCAqLwotI2RlZmluZSBYQV9ST1dTIDI4CQkJLyogU2NyZWVuIHJvd3MgKGhlaWdo dCkgKi8KLSNkZWZpbmUgWEFfQ09MUyAyOQkJCS8qIFNjcmVlbiBjb2x1bW5zICh3aWR0aCkgKi8K LSNkZWZpbmUgWEFfVEVMICAzMAkJCS8qIE1ha2UgYSBUZWxuZXQgY29ubmVjdGlvbiAqLwotI2Rl ZmluZSBYQV9GVFAgIDMxCQkJLyogTWFrZSBhbiBGVFAgY29ubmVjdGlvbiAqLwotI2RlZmluZSBY QV9TU0ggIDMyCQkJLyogTWFrZSBhbiBTU0ggY29ubmVjdGlvbiAqLwotI2RlZmluZSBYQV9VU0VS IDMzCQkJLyogVXNlcm5hbWUgZm9yIGxvZ2luICovCi0jZGVmaW5lIFhBX1BBU1MgMzQJCQkvKiBQ YXNzd29yZCBmb3IgbG9naW4gKi8KLSNkZWZpbmUgWEFfVElUTCAzNSAgICAgICAgICAgICAgICAg ICAgICAvKiBXaW5kb3cgVGl0bGUgKi8KLSNkZWZpbmUgWEFfTk9NTiAzNgkJCS8qIE5vIEdVSSBN ZW51IEJhciAqLwotI2RlZmluZSBYQV9OT1RCIDM3CQkJLyogTm8gR1VJIFRvb2wgQmFyICovCi0j ZGVmaW5lIFhBX05PU0IgMzggICAgICAgICAgICAgICAgICAgICAgLyogTm8gR1VJIFN0YXR1cyBC YXIgKi8KLSNkZWZpbmUgWEFfTk9QVVNIIDM5ICAgICAgICAgICAgICAgICAgICAvKiBEaXNhYmxl IGV4dGVybmFsIGNvbW1hbmRzICovCi0jZGVmaW5lIFhBX05PU0NST0xMIDQwICAgICAgICAgICAg ICAgICAgLyogRGlzYWJsZSBzY3JvbGxiYWNrIG9wZXJhdGlvbnMgKi8KLSNkZWZpbmUgWEFfTk9F U0NBUEUgNDEgICAgICAgICAgICAgICAgICAvKiBEaXNhYmxlIGVzY2FwZSBmcm9tIGNvbm5lY3Qg bW9kZSAqLwotI2RlZmluZSBYQV9MT0NLIDQyICAgICAgICAgICAgICAgICAgICAgIC8qIEFsbCBs b2NrZG93biBvcHRpb25zICovCi0jZGVmaW5lIFhBX05PQkFSIDQzICAgICAgICAgICAgICAgICAg ICAgLyogTm8gR1VJIEJhcnMgKi8KLSNkZWZpbmUgWEFfV01BWCAgNDQKLSNkZWZpbmUgWEFfV01J TiAgNDUKLSNkZWZpbmUgWEFfU0NBTEUgNDYgICAgICAgICAgICAgICAgICAgICAvKiBHVUkgU2Nh bGUgRm9udCAqLwotI2RlZmluZSBYQV9DSEdEICA0NyAgICAgICAgICAgICAgICAgICAgIC8qIEdV SSBDaGFuZ2UgRGltZW5zaW9ucyAqLwotI2RlZmluZSBYQV9OT0NMT1NFIDQ4ICAgICAgICAgICAg ICAgICAgIC8qIEdVSSBEaXNhYmxlIENsb3NlIFdpbmRvdyAqLwotI2RlZmluZSBYQV9VTkJVRiA0 OQkJCS8qIFVOSVggdW5idWZmZXJlZCBjb25zb2xlICovCi0jZGVmaW5lIFhBX01BWCAgNDkJCQkv KiBIaWdoZXN0IGV4dGVuZGVkIG9wdGlvbiBudW1iZXIgKi8KLSNlbmRpZiAvKiBOT0NNREwgKi8K LQotI2lmbmRlZiBOT0lDUAotLyogVG9wIExldmVsIENvbW1hbmRzICovCi0vKiBWYWx1ZXMgYXNz b2NpYXRlZCB3aXRoIHRvcC1sZXZlbCBjb21tYW5kcyBtdXN0IGJlIDAgb3IgZ3JlYXRlci4gKi8K LQotI2RlZmluZSBYWEJZRSAgIDAJLyogQllFICovCi0jZGVmaW5lIFhYQ0xFICAgMQkvKiBDTEVB UiAqLwotI2RlZmluZSBYWENMTyAgIDIJLyogQ0xPU0UgKi8KLSNkZWZpbmUgWFhDT04gICAzCS8q IENPTk5FQ1QgKi8KLSNkZWZpbmUgWFhDUFkgICA0CS8qIENPUFkgKi8KLSNkZWZpbmUgWFhDV0Qg ICA1CS8qIENXRCAoQ2hhbmdlIFdvcmtpbmcgRGlyZWN0b3J5KSAqLwotI2RlZmluZSBYWERFRgk2 CS8qIERFRklORSAoYSBtYWNybyBvciB2YXJpYWJsZSkgKi8KLSNkZWZpbmUgWFhERUwgICA3CS8q IChMb2NhbCkgREVMRVRFICovCi0jZGVmaW5lIFhYRElSICAgOAkvKiAoTG9jYWwpIERJUkVDVE9S WSAqLwotCi0vKiBESVJFQ1RPUlkgQ29tbWFuZCBvcHRpb25zLi4uICovCi0jZGVmaW5lIERJUl9C UkYgMQkvKiBCUklFRiAqLwotI2RlZmluZSBESVJfVlJCIDIJLyogVkVSQk9TRSAqLwotI2RlZmlu ZSBESVJfUEFHIDMJLyogUEFHRSAqLwotI2RlZmluZSBESVJfTk9QIDQJLyogTk9QQUdFICovCi0j ZGVmaW5lIERJUl9JU08gNQkvKiBJU09EQVRFICovCi0jZGVmaW5lIERJUl9EQVQgNgkvKiBFTkdM SVNIREFURSAqLwotI2RlZmluZSBESVJfSERHIDcJLyogSEVBRElOR1MgKi8KLSNkZWZpbmUgRElS X05PSCA4CS8qIE5PSEVBRElOR1MgKi8KLSNkZWZpbmUgRElSX1NSVCA5CS8qIFNPUlQgKi8KLSNk ZWZpbmUgRElSX05PUyAxMCAgICAgIC8qIE5PU09SVCAqLwotI2RlZmluZSBESVJfQVNDIDExCS8q IEFTQ0VORElORyAqLwotI2RlZmluZSBESVJfRFNDIDEyICAgICAgLyogREVTQ0VORElORyAqLwot I2RlZmluZSBESVJfUkVDIDEzICAgICAgLyogUkVDVVJTSVZFICovCi0jZGVmaW5lIERJUl9OT1Ig MTQJLyogTk9SRUNVUklWRSAqLwotI2RlZmluZSBESVJfRE9UIDE1CS8qIERPVEZJTEVTICovCi0j ZGVmaW5lIERJUl9OT0QgMTYJLyogTk9ET1RGSUxFUyAqLwotI2RlZmluZSBESVJfRElSIDE3CS8q IERJUkVDVE9SSUVTICovCi0jZGVmaW5lIERJUl9GSUwgMTgJLyogRklMRVMgKi8KLSNkZWZpbmUg RElSX0FMTCAxOQkvKiBBTEwgKi8KLSNkZWZpbmUgRElSX05BTSAyMAkvKiBOQU1FUzogKi8KLSNk ZWZpbmUgRElSX1RZUCAyMQkvKiBGSUxFVFlQRVMgKi8KLSNkZWZpbmUgRElSX05PVCAyMgkvKiBO T0ZJTEVUWVBFUyAqLwotI2RlZmluZSBESVJfQlVQIDIzCS8qIEJBQ0tVUCAqLwotI2RlZmluZSBE SVJfTk9CIDI0CS8qIE5PQkFDS1VQICovCi0jZGVmaW5lIERJUl9NU0cgMjUgICAgICAvKiBNRVNT QUdFICovCi0jZGVmaW5lIERJUl9OT00gMjYgICAgICAvKiBOT01FU1NBR0UgKi8KLSNkZWZpbmUg RElSX0FSUiAyNyAgICAgIC8qIEFSUkFZOiAqLwotI2RlZmluZSBESVJfTkFSIDI4ICAgICAgLyog Tk9BUlJBWSAqLwotI2RlZmluZSBESVJfRVhDIDI5CS8qIEVYQ0VQVDogKi8KLSNkZWZpbmUgRElS X0xBUiAzMAkvKiBMQVJHRVItVEhBTjogKi8KLSNkZWZpbmUgRElSX1NNQSAzMQkvKiBTTUFMTEVS LVRIQU46ICovCi0jZGVmaW5lIERJUl9BRlQgMzIJLyogQUZURVI6ICovCi0jZGVmaW5lIERJUl9O QUYgMzMJLyogTk9ULUFGVEVSOiAqLwotI2RlZmluZSBESVJfQkVGIDM0CS8qIEJFRk9SRTogKi8K LSNkZWZpbmUgRElSX05CRiAzNQkvKiBOT1QtQkVGT1JFOiAqLwotI2RlZmluZSBESVJfU1VNIDM2 CS8qIFNVTU1BUlkgKi8KLSNkZWZpbmUgRElSX0JJTiAzNwkvKiBUWVBFIChvbmx5IHNob3cgYmlu YXJ5IG9yIHRleHQpICovCi0jZGVmaW5lIERJUl9MTksgMzgJLyogZm9sbG93IHN5bWxpbmtzICov Ci0jZGVmaW5lIERJUl9OTEsgMzkJLyogZG9uJ3QgZm9sbG93IHN5bWxpbmtzICovCi0jZGVmaW5l IERJUl9PVVQgNDAJLyogT3V0cHV0IGZpbGUgZm9yIGxpc3RpbmcgKi8KLSNkZWZpbmUgRElSX1RP UCA0MQkvKiBUb3AgbiBsaW5lcyAqLwotI2RlZmluZSBESVJfQ09VIDQyCS8qIENPVU5UOnZhciAq LwotI2RlZmluZSBESVJfTk9MIDQzCS8qIE5PTElOS1MgKGRvbid0IHNob3cgc3ltbGlua3MgYXQg YXQgYWxsKSAqLwotCi0jZGVmaW5lIERJUlNfTk0gMCAgICAgICAvKiBTb3J0IGRpcmVjdG9yeSBi eSBOQU1FICovCi0jZGVmaW5lIERJUlNfRFQgMSAgICAgICAvKiBTb3J0IGRpcmVjdG9yeSBieSBE QVRFICovCi0jZGVmaW5lIERJUlNfU1ogMiAgICAgICAvKiBTb3J0IGRpcmVjdG9yeSBieSBTSVpF ICovCi0KLSNkZWZpbmUgWFhESVMgICA5CS8qIERJU0FCTEUgKi8KLSNkZWZpbmUgWFhFQ0ggIDEw CS8qIEVDSE8gKi8KLSNkZWZpbmUgWFhFWEkgIDExCS8qIEVYSVQgKi8KLSNkZWZpbmUgWFhGSU4g IDEyCS8qIEZJTklTSCAqLwotI2RlZmluZSBYWEdFVCAgMTMJLyogR0VUICovCi0jZGVmaW5lIFhY SExQICAxNAkvKiBIRUxQICovCi0jZGVmaW5lIFhYSU5QICAxNQkvKiBJTlBVVCAqLwotI2RlZmlu ZSBYWExPQyAgMTYJLyogTE9DQUwgKi8KLSNkZWZpbmUgWFhMT0cgIDE3CS8qIExPRyAqLwotI2Rl ZmluZSBYWE1BSSAgMTgJLyogTUFJTCAqLwotI2RlZmluZSBYWE1PVSAgMTkJLyogKExvY2FsKSBN T1VOVCAqLwotI2RlZmluZSBYWE1TRyAgMjAJLyogKExvY2FsKSBNRVNTQUdFICovCi0jZGVmaW5l IFhYT1VUICAyMQkvKiBPVVRQVVQgKi8KLSNkZWZpbmUgWFhQQVUgIDIyCS8qIFBBVVNFICovCi0j ZGVmaW5lIFhYUFJJICAyMwkvKiAoTG9jYWwpIFBSSU5UICovCi0jZGVmaW5lIFhYUVVJICAyNAkv KiBRVUlUICovCi0jZGVmaW5lIFhYUkVDICAyNQkvKiBSRUNFSVZFICovCi0jZGVmaW5lIFhYUkVN ICAyNgkvKiBSRU1PVEUgKi8KLSNkZWZpbmUgWFhSRU4gIDI3CS8qIChMb2NhbCkgUkVOQU1FICov Ci0jZGVmaW5lIFhYU0VOICAyOAkvKiBTRU5EICovCi0KLS8qIFNFTkQgc3dpdGNoZXMgKi8KLQot I2RlZmluZSBTTkRfQklOICAwCS8qIEJpbmFyeSBtb2RlICovCi0jZGVmaW5lIFNORF9ERUwgIDEJ LyogRGVsZXRlIGFmdGVyICovCi0jZGVmaW5lIFNORF9FWEMgIDIJLyogRXhjZXB0ICovCi0jZGVm aW5lIFNORF9MQVIgIDMJLyogTGFyZ2VyIHRoYW4gKi8KLSNkZWZpbmUgU05EX01BSSAgNAkvKiBN YWlsICovCi0jZGVmaW5lIFNORF9CRUYgIDUJLyogQmVmb3JlICovCi0jZGVmaW5lIFNORF9BRlQg IDYJLyogQWZ0ZXIgKi8KLSNkZWZpbmUgU05EX1BSSSAgNwkvKiBQcmludCAqLwotI2RlZmluZSBT TkRfU0hIICA4CS8qIFF1aWV0ICovCi0jZGVmaW5lIFNORF9SRUMgIDkJLyogUmVjdXJzaXZlICov Ci0jZGVmaW5lIFNORF9TTUEgMTAJLyogU21hbGxlciB0aGFuICovCi0jZGVmaW5lIFNORF9TVEEg MTEJLyogU3RhcnRpbmctZnJvbSAqLwotI2RlZmluZSBTTkRfVFhUIDEyCS8qIFRleHQgbW9kZSAq LwotI2RlZmluZSBTTkRfQ01EIDEzCS8qIEZyb20gY29tbWFuZCAocGlwZSkgICovCi0jZGVmaW5l IFNORF9SRVMgMTQJLyogUmVzZW5kL1JlY292ZXIgKi8KLSNkZWZpbmUgU05EX1BSTyAxNQkvKiBQ cm90b2NvbCAqLwotI2RlZmluZSBTTkRfQVNOIDE2CS8qIEFzLW5hbWUgKi8KLSNkZWZpbmUgU05E X0lNRyAxNwkvKiBJbWFnZSAqLwotI2RlZmluZSBTTkRfTEJMIDE4CS8qIExhYmVsZWQgKi8KLSNk ZWZpbmUgU05EX05BRiAxOQkvKiBOb3QtQWZ0ZXIgKi8KLSNkZWZpbmUgU05EX05CRSAyMAkvKiBO b3QtQmVmb3JlICovCi0jZGVmaW5lIFNORF9GTFQgMjEJLyogRmlsdGVyICovCi0jZGVmaW5lIFNO RF9QVEggMjIJLyogUGF0aG5hbWVzICovCi0jZGVmaW5lIFNORF9OQU0gMjMJLyogRmlsZW5hbWVz ICovCi0jZGVmaW5lIFNORF9NT1YgMjQgICAgICAvKiBNT1ZFIHRvIGFub3RoZXIgZGlyZWN0b3J5 ICovCi0jZGVmaW5lIFNORF9SRU4gMjUgICAgICAvKiBSRU5BTUUgYWZ0ZXIgc2VuZGluZyAqLwot I2RlZmluZSBTTkRfQ0FMIDI2CS8qIENhbGlicmF0ZSAqLwotI2RlZmluZSBTTkRfRklMIDI3CS8q IEZpbGUgY29udGFpbmluZyBsaXN0IG9mIGZpbGVzIHRvIHNlbmQgKi8KLSNkZWZpbmUgU05EX05P QiAyOAkvKiBTa2lwIGJhY2t1cCBmaWxlcyAgKi8KLSNkZWZpbmUgU05EX0RPVCAyOQkvKiBJbmNs dWRlIGRvdC1maWxlcyAqLwotI2RlZmluZSBTTkRfTk9EIDMwCS8qIEV4Y2x1ZGUgZG90LWZpbGVz ICovCi0jZGVmaW5lIFNORF9BUlIgMzEJLyogU2VuZCBmcm9tIGFycmF5ICovCi0jZGVmaW5lIFNO RF9UWVAgMzIJLyogVFlQRSAob25seSBzZW5kIHRleHQgKG9yIGJpbmFyeSkpICovCi0jZGVmaW5l IFNORF9YUEEgMzMJLyogVFJBTlNQQVJFTlQgKi8KLSNkZWZpbmUgU05EX1BJUCAzNAkvKiBQSVBF UyAqLwotI2RlZmluZSBTTkRfRVJSIDM1CS8qIEVSUk9SICovCi0jZGVmaW5lIFNORF9DU0wgMzYJ LyogTG9jYWwgY2hhcmFjdGVyIHNldCAqLwotI2RlZmluZSBTTkRfQ1NSIDM3CS8qIFJlbW90ZSBj aGFyYWN0ZXIgc2V0ICovCi0jZGVmaW5lIFNORF9VUEQgMzgJLyogVXBkYXRlICovCi0jZGVmaW5l IFNORF9DT0wgMzkJLyogQ29sbGlzaW9uICovCi0jZGVmaW5lIFNORF9OTUwgNDAJLyogTmFtZWxp c3QgKi8KLSNkZWZpbmUgU05EX1NSTiA0MQkvKiBTZXJ2ZXItUmVuYW1lICovCi0jZGVmaW5lIFNO RF9MTksgNDIJLyogRm9sbG93IGxpbmtzICovCi0jZGVmaW5lIFNORF9OTEsgNDMJLyogRG9uJ3Qg Zm9sbG93IGxpbmtzICovCi0jZGVmaW5lIFNORF9TSU0gNDQJLyogU2ltdWxhdGUgKi8KLSNkZWZp bmUgU05EX0RJRiA0NQkvKiBJZiBkYXRlcyBEaWZmZXIgKi8KLSNkZWZpbmUgU05EX1BBVCA0Ngkv KiBQYXR0ZXJuIHRvIHVzZSBsb2NhbGx5IHdoZW4gR0VUJ2luZyAqLwotI2RlZmluZSBTTkRfTkxT IDQ3CS8qIChGVFAgb25seSkgTUdFVCBmb3JjZXMgTkxTVCAqLwotI2RlZmluZSBTTkRfTUxTIDQ4 CS8qIChGVFAgb25seSkgTUdFVCBmb3JjZXMgTUxTRCAqLwotCi0jZGVmaW5lIFNORF9NQVggNDgJ LyogSGlnaGVzdCBTRU5EIHN3aXRjaCAqLwotCi0jZGVmaW5lIFhYU0VSICAyOSAgIAkvKiBTRVJW RVIgKi8KLSNkZWZpbmUgWFhTRVQgIDMwCS8qIFNFVCAqLwotI2RlZmluZSBYWFNIRSAgMzEJLyog Q29tbWFuZCBmb3IgU0hFTEwgKi8KLSNkZWZpbmUgWFhTSE8gIDMyCS8qIFNIT1cgKi8KLSNkZWZp bmUgWFhTUEEgIDMzCS8qIChMb2NhbCkgU1BBQ0UgKi8KLSNkZWZpbmUgWFhTVEEgIDM0CS8qIFNU QVRJU1RJQ1MgKi8KLSNkZWZpbmUgWFhTVUIgIDM1CS8qIChMb2NhbCkgU1VCTUlUICovCi0jZGVm aW5lIFhYVEFLICAzNgkvKiBUQUtFICovCi0jZGVmaW5lIFhYVFJBICAzNwkvKiBUUkFOU01JVCAq LwotI2RlZmluZSBYWFRZUCAgMzgJLyogKExvY2FsKSBUWVBFICovCi0jZGVmaW5lIFhYV0hPICAz OQkvKiAoTG9jYWwpIFdITyAqLwotI2RlZmluZSBYWERJQUwgNDAJLyogKExvY2FsKSBESUFMICov Ci0jZGVmaW5lIFhYTE9HSSA0MQkvKiAoTG9jYWwpIFNDUklQVCAqLwotI2RlZmluZSBYWENPTSAg NDIJLyogQ29tbWVudCAqLwotI2RlZmluZSBYWEhBTiAgNDMgICAgICAgLyogSEFOR1VQICovCi0j ZGVmaW5lIFhYWExBICA0NAkvKiBUUkFOU0xBVEUgKi8KLSNkZWZpbmUgWFhJRiAgIDQ1CS8qIElG ICovCi0jZGVmaW5lIFhYTEJMICA0NiAgICAgICAvKiBsYWJlbCAqLwotI2RlZmluZSBYWEdPVE8g NDcJLyogR09UTyAqLwotI2RlZmluZSBYWEVORCAgNDggICAgICAgLyogRU5EICovCi0jZGVmaW5l IFhYU1RPICA0OSAgICAgICAvKiBTVE9QICovCi0jZGVmaW5lIFhYRE8gICA1MCAgICAgICAvKiBE TyAqLwotI2RlZmluZSBYWFBXRCAgNTEgICAgICAgLyogUFdEICovCi0jZGVmaW5lIFhYVEVTICA1 MiAgICAgICAvKiBURVNUICovCi0jZGVmaW5lIFhYQVNLICA1MyAgICAgICAvKiBBU0sgKi8KLSNk ZWZpbmUgWFhBU0tRIDU0ICAgICAgIC8qIEFTS1EgKi8KLSNkZWZpbmUgWFhBU1MgIDU1ICAgICAg IC8qIEFTU0lHTiAqLwotI2RlZmluZSBYWFJFSSAgNTYgICAgICAgLyogUkVJTlBVVCAqLwotI2Rl ZmluZSBYWElOQyAgNTcgICAgICAgLyogSU5DUkVNRU5UICovCi0jZGVmaW5lIFhYREVDICA1OSAg ICAgICAvKiBERUNSRU1FTlQgKi8KLSNkZWZpbmUgWFhFTFMgIDYwICAgICAgIC8qIEVMU0UgKi8K LSNkZWZpbmUgWFhFWEUgIDYxCS8qIEVYRUNVVEUgKi8KLSNkZWZpbmUgWFhXQUkgIDYyCS8qIFdB SVQgKi8KLSNkZWZpbmUgWFhWRVIgIDYzICAgICAgIC8qIFZFUlNJT04gKi8KLSNkZWZpbmUgWFhF TkEgIDY0ICAgICAgIC8qIEVOQUJMRSAqLwotI2RlZmluZSBYWFdSSSAgNjUgICAgICAgLyogV1JJ VEUgKi8KLSNkZWZpbmUgWFhDTFMgIDY2ICAgICAgIC8qIENMUyAoY2xlYXIgc2NyZWVuKSAqLwot I2RlZmluZSBYWFJFVCAgNjcJLyogUkVUVVJOICovCi0jZGVmaW5lIFhYT1BFICA2OCAgICAgICAv KiBPUEVOICovCi0jZGVmaW5lIFhYUkVBICA2OQkvKiBSRUFEICovCi0jZGVmaW5lIFhYT04gICA3 MCAgICAgICAvKiBPTiAqLwotI2RlZmluZSBYWERDTCAgNzEgICAgICAgLyogREVDTEFSRSAqLwot I2RlZmluZSBYWEJFRyAgNzIgICAgICAgLyogQkVHSU4gKG5vdCB1c2VkKSAqLwotI2RlZmluZSBY WEZPUiAgNzIgICAgICAgLyogRk9SICovCi0jZGVmaW5lIFhYV0hJICA3MyAgICAgICAvKiBXSElM RSAqLwotI2RlZmluZSBYWElGWCAgNzQgICAgICAgLyogRXh0ZW5kZWQgSUYgKi8KLSNkZWZpbmUg WFhDTVMgIDc1ICAgICAgIC8qIFNFTkQgZnJvbSBjb21tYW5kIG91dHB1dCAobm90IHlldCkgKi8K LSNkZWZpbmUgWFhDTVIgIDc2ICAgICAgIC8qIFJFQ0VJVkUgdG8gYSBjb21tYW5kJ3MgaW5wdXQg KG5vdCB5ZXQpICovCi0jZGVmaW5lIFhYQ01HICA3NyAgICAgICAvKiBHRVQgdG8gYSBjb21tYW5k J3MgaW5wdXQgKG5vdCB5ZXQpICovCi0jZGVmaW5lIFhYU1VTICA3OCAgICAgICAvKiBTVVNQRU5E ICovCi0jZGVmaW5lIFhYRVJSICA3OSAgICAgICAvKiBFUlJPUiAqLwotI2RlZmluZSBYWE1TRSAg ODAgICAgICAgLyogTVNFTkQgKi8KLSNkZWZpbmUgWFhCVUcgIDgxICAgICAgIC8qIEJVRyAqLwot I2RlZmluZSBYWFBBRCAgODIgICAgICAgLyogUEFEIChhcyBpbiBYLjI1IFBBRCkgQU5ZWDI1ICov Ci0jZGVmaW5lIFhYUkVEICA4MyAgICAgICAvKiBSRURJQUwgKi8KLSNkZWZpbmUgWFhHVEEgIDg0 CS8qIF9nZXRhcmdzIChpbnZpc2libGUgaW50ZXJuYWwpICovCi0jZGVmaW5lIFhYUFRBICA4NQkv KiBfcHV0YXJncyAoaW52aXNpYmxlIGludGVybmFsKSAqLwotI2RlZmluZSBYWEdPSyAgODYgICAg ICAgLyogR0VUT0sgLSBBc2sgZm9yIFlFUy9OTyAqLwotI2RlZmluZSBYWFRFTCAgODcJLyogVEVM TkVUICovCi0jZGVmaW5lIFhYQVNYICA4OAkvKiBfQVNTSUdOIChldmFsdWF0ZXMgdmFyIG5hbWUp ICovCi0jZGVmaW5lIFhYREZYICA4OQkvKiBfREVGSU5FIChldmFsdWF0ZXMgdmFyIG5hbWUpICov Ci0jZGVmaW5lIFhYUE5HICA5MAkvKiBQSU5HIChmb3IgVENQL0lQKSAqLwotI2RlZmluZSBYWElO VCAgOTEgICAgICAgLyogSU5UUk9EVUNUSU9OICovCi0jZGVmaW5lIFhYQ0hLICA5MgkvKiBDSEVD SyAoYSBmZWF0dXJlKSAqLwotI2RlZmluZSBYWE1TTCAgOTMgICAgICAgLyogTVNMRUVQLCBNUEFV U0UgKG1pbGxpc2Vjb25kIHNsZWVwKSAqLwotI2RlZmluZSBYWE5FVyAgOTQgICAgICAgLyogTkVX UyAqLwotI2RlZmluZSBYWEFQQyAgOTUgICAgICAgLyogQVBDICovCi0jZGVmaW5lIFhYRlVOICA5 NiAgICAgICAvKiBSRURJUkVDVCAqLwotI2RlZmluZSBYWFdSTCAgOTcJLyogV1JJVEUtTElORSAq LwotI2RlZmluZSBYWFJFWFggOTgJLyogUmV4eCAqLwotI2RlZmluZSBYWE1JTlAgMTAwCS8qIE1J TlBVVCAqLwotI2RlZmluZSBYWFJTRU4gMTAxCS8qIFJFU0VORCAqLwotI2RlZmluZSBYWFBTRU4g MTAyCS8qIFBTRU5EICovCi0jZGVmaW5lIFhYR0VUQyAxMDMJLyogR0VUQyAqLwotI2RlZmluZSBY WEVWQUwgMTA0CS8qIEVWQUxVQVRFICovCi0jZGVmaW5lIFhYRldEICAxMDUJLyogRk9SV0FSRCAq LwotI2RlZmluZSBYWFVQRCAgMTA2ICAgICAgLyogVVBEQVRFUyAqLwotI2RlZmluZSBYWEJFRVAg MTA3ICAgICAgLyogQkVFUCAqLwotI2RlZmluZSBYWE1PVkUgMTA4ICAgICAgLyogTU9WRSAqLwot I2RlZmluZSBYWE1NT1ZFIDEwOSAgICAgLyogTU1PVkUgKi8KLSNkZWZpbmUgWFhSRUdFVCAxMTAg ICAgIC8qIFJFR0VUICovCi0jZGVmaW5lIFhYTE9PSyAgMTExCS8qIExPT0tVUCAqLwotI2RlZmlu ZSBYWFZJRVcgIDExMiAgICAgLyogVklFVyAodGVybWluYWwgYnVmZmVyKSAqLwotI2RlZmluZSBY WEFOU1cgIDExMwkvKiBBTlNXRVIgKHRoZSBwaG9uZSkgKi8KLSNkZWZpbmUgWFhQRElBICAxMTQJ LyogUERJQUwgKHBhcnRpYWwgZGlhbCkgKi8KLSNkZWZpbmUgWFhBU0MgICAxMTUJLyogQVNDSUkg LyBURVhUICovCi0jZGVmaW5lIFhYQklOICAgMTE2CS8qIEJJTkFSWSAqLwotI2RlZmluZSBYWEZU UCAgIDExNwkvKiBGVFAgKi8KLSNkZWZpbmUgWFhNS0RJUiAxMTgJLyogTUtESVIgKi8KLSNkZWZp bmUgWFhSTURJUiAxMTkJLyogUk1ESVIgKi8KLSNkZWZpbmUgWFhURUxPUCAxMjAJLyogVEVMT1BU ICovCi0jZGVmaW5lIFhYUkxPRyAgMTIxCS8qIFJMT0dJTiAqLwotI2RlZmluZSBYWFVOREVGIDEy MgkvKiBVTkRFRklORSAqLwotI2RlZmluZSBYWE5QU0ggIDEyMwkvKiBOT1BVU0ggKi8KLSNkZWZp bmUgWFhBREQgICAxMjQJLyogQUREICovCi0jZGVmaW5lIEFERF9TTkQgICAwICAgICAvKiBBREQg U0VORC1MSVNUICovCi0jZGVmaW5lIEFERF9CSU4gICAxICAgICAvKiBBREQgQklOQVJZLVBBVFRF Uk5TICovCi0jZGVmaW5lIEFERF9UWFQgICAyICAgICAvKiBBREQgVEVYVC1QQVRURVJOUyAqLwot I2RlZmluZSBYWExPQ0FMIDEyNQkvKiBMT0NBTCAqLwotI2RlZmluZSBYWEtFUk1JIDEyNgkvKiBL RVJNSVQgKi8KLSNkZWZpbmUgWFhEQVRFICAxMjcJLyogREFURSAqLwotI2RlZmluZSBYWFNXSVQg IDEyOCAgICAgLyogU1dJVENIICovCi0jZGVmaW5lIFhYWEZXRCAgMTI5CS8qIF9GT1JXQVJEICov Ci0jZGVmaW5lIFhYU0FWRSAgMTMwICAgICAvKiBTQVZFICovCi0jZGVmaW5lIFhYWEVDSCAgMTMx ICAgICAvKiBYRUNITyAqLwotI2RlZmluZSBYWFJEQkwgIDEzMiAgICAgLyogUkVBREJMT0NLICov Ci0jZGVmaW5lIFhYV1JCTCAgMTMzICAgICAvKiBXUklURUJMT0NLICovCi0jZGVmaW5lIFhYUkVU UiAgMTM0ICAgICAvKiBSRVRSSUVWRSAqLwotI2RlZmluZSBYWEVJR0hUIDEzNSAgICAgLyogRUlH SFRCSVQgKi8KLSNkZWZpbmUgWFhFRElUICAxMzYJLyogRURJVCAqLwotI2RlZmluZSBYWENTRU4g IDEzNwkvKiBDU0VORCAqLwotI2RlZmluZSBYWENSRUMgIDEzOAkvKiBDUkVDRUlWRSAqLwotI2Rl ZmluZSBYWENRICAgIDEzOQkvKiBDUSAqLwotI2RlZmluZSBYWFRBUEkgIDE0MCAgICAgLyogVEFQ SSBhY3Rpb25zIHN1Y2ggYXMgZGlhbG9ncyAqLwotI2RlZmluZSBYWFJFUyAgIDE0MSAgICAgLyog UkVTRVQgKi8KLSNkZWZpbmUgWFhDR0VUICAxNDIgICAgIC8qIENHRVQgKi8KLSNkZWZpbmUgWFhG VU5DICAxNDMgICAgIC8qIEZ1bmN0aW9uIChoZWxwLW9ubHkpICovCi0jZGVmaW5lIFhYS1ZSQiAg MTQ0ICAgICAvKiBLdmVyYiAoaGVscC1vbmx5KSAqLwotI2RlZmluZSBYWEJST1dTIDE0NQkvKiBC Uk9XU0UgKi8KLSNkZWZpbmUgWFhNR0VUICAxNDYJLyogTUdFVCAqLwotI2RlZmluZSBYWEJBQ0sg IDE0NwkvKiBCQUNLICovCi0jZGVmaW5lIFhYV0hFUkUgMTQ4CS8qIFdIRVJFICovCi0jZGVmaW5l IFhYUkVETyAgMTQ5ICAgICAvKiBSRURPICovCi0jZGVmaW5lIFhYRVhDSCAgMTUwICAgICAvKiBF WENIQU5HRSAqLwotI2RlZmluZSBYWFJFTVYgIDE1MSAgICAgLyogUkVNT1ZFICovCi0jZGVmaW5l IFhYQ0hSVCAgMTUyCS8qIENIUk9PVCAqLwotI2RlZmluZSBYWE9QVFMgIDE1MwkvKiBPcHRpb25z IChoZWxwLW9ubHkpICovCi0jZGVmaW5lIFhYQVVUSCAgMTU0CS8qIEFVVEhPUklaRSAqLwotI2Rl ZmluZSBYWFBJUEUgIDE1NQkvKiBQSVBFICovCi0jZGVmaW5lIFhYU1NIICAgMTU2CS8qIFNTSCAq LwotI2RlZmluZSBYWFRFUk0gIDE1NyAgICAgLyogVEVSTUlOQUwgKi8KLSNkZWZpbmUgWFhTVEFU VVMgMTU4ICAgIC8qIFNUQVRVUyAqLwotI2RlZmluZSBYWENQUiAgIDE1OQkvKiBDT1BZUklHSFQg Ki8KLSNkZWZpbmUgWFhBU1NFUiAxNjAJLyogQVNTRVJUICovCi0jZGVmaW5lIFhYU1VDQyAgMTYx ICAgICAvKiBTVUNDRUVEICovCi0jZGVmaW5lIFhYRkFJTCAgMTYyICAgICAvKiBGQUlMICovCi0j ZGVmaW5lIFhYTE9HSU4gMTYzICAgICAvKiBMT0dJTiAqLwotI2RlZmluZSBYWExPR09VVCAxNjQg ICAgLyogTE9HT1VUICovCi0jZGVmaW5lIFhYTkxDTCAgMTY1ICAgICAvKiBOT0xPQ0FMICovCi0j ZGVmaW5lIFhYV0lMRCAgMTY2ICAgICAvKiBXSUxEQ0FSRFMgKGhlbHAtb25seSkgKi8KLQotLyog T25lLXdvcmQgc3lub255bXMgZm9yIFJFTU9URSBjb21tYW5kcyAqLwotCi0jZGVmaW5lIFhYUkNQ WSAgMTY3CS8qIFJFTU9URSBDT1BZICovCi0jZGVmaW5lIFhYUkNXRCAgMTY4CS8qIENoYW5nZSBX b3JraW5nIERpcmVjdG9yeSAqLwotI2RlZmluZSBYWFJERUwgIDE2OQkvKiBEZWxldGUgKi8KLSNk ZWZpbmUgWFhSRElSICAxNzAJLyogRGlyZWN0b3J5ICovCi0jZGVmaW5lIFhYUkhMUCAgMTcxCS8q IEhlbHAgKi8KLSNkZWZpbmUgWFhSSE9TICAxNzIJLyogSG9zdCAqLwotI2RlZmluZSBYWFJLRVIg IDE3MwkvKiBLZXJtaXQgKi8KLSNkZWZpbmUgWFhSTVNHICAxNzQJLyogTWVzc2FnZSAqLwotI2Rl ZmluZSBYWFJQUkkgIDE3NQkvKiBQcmludCAqLwotI2RlZmluZSBYWFJSRU4gIDE3NgkvKiBSZW5h bWUgKi8KLSNkZWZpbmUgWFhSU0VUICAxNzcJLyogU2V0ICovCi0jZGVmaW5lIFhYUlNQQSAgMTc4 CS8qIFNwYWNlICovCi0jZGVmaW5lIFhYUlNVQiAgMTc5CS8qIFN1Ym1pdCAqLwotI2RlZmluZSBY WFJUWVAgIDE4MAkvKiBUeXBlICovCi0jZGVmaW5lIFhYUldITyAgMTgxCS8qIFdobyAqLwotI2Rl ZmluZSBYWFJQV0QgIDE4MgkvKiBQcmludCBXb3JraW5nIERpcmVjdG9yeSAqLwotI2RlZmluZSBY WFJRVUUgIDE4MwkvKiBRdWVyeSAqLwotI2RlZmluZSBYWFJBU0cgIDE4NAkvKiBBc3NpZ24gKi8K LSNkZWZpbmUgWFhSTUtEICAxODUJLyogbWtkaXIgKi8KLSNkZWZpbmUgWFhSUk1EICAxODYJLyog cm1kaXIgKi8KLSNkZWZpbmUgWFhSWElUICAxODcJLyogRXhpdCAqLwotCi0vKiBUb3AtTGV2ZWwg Y29tbWFuZHMsIGNvbnQnZC4uLiAqLwotCi0jZGVmaW5lIFhYR0VUSyAgMTg4CS8qIEdFVEtFWUNP REUgKi8KLSNkZWZpbmUgWFhNT1JFICAxODkJLyogTU9SRSAqLwotI2RlZmluZSBYWFhPUFRTIDE5 MAkvKiBFeHRlbmRlZC1PcHRpb25zIChoZWxwLW9ubHkpICovCi0jZGVmaW5lIFhYSUtTRCAgMTkx CS8qIElLU0QgKi8KLSNkZWZpbmUgWFhSRVNFVCAxOTIJLyogUkVTRVQgKi8KLSNkZWZpbmUgWFhB U1NPQyAxOTMgICAgIC8qIEFTU09DSUFURSAqLwotCi0jZGVmaW5lIEFTU09DX0ZDICAwICAgICAv KiBBU1NPQ0lBVEUgRklMRS1DSEFSQUNURVItU0VUICovCi0jZGVmaW5lIEFTU09DX1RDICAxICAg ICAvKiBBU1NPQ0lBVEUgVFJBTlNGRVItQ0hBUkFDVEVSLVNFVCAqLwotCi0jZGVmaW5lIFhYU0hJ RlQgMTk0CS8qIFNISUZUICovCi0jZGVmaW5lIFhYTUFOICAgMTk1ICAgICAvKiBNQU5VQUwgKi8K LSNkZWZpbmUgWFhMUyAgICAxOTYgICAgIC8qIExTICovCi0jZGVmaW5lIFhYU09SVCAgMTk3CS8q IFNPUlQgKi8KLSNkZWZpbmUgWFhQVVJHRSAxOTgJLyogUFVSR0UgKi8KLSNkZWZpbmUgWFhGQVNU ICAxOTkJLyogRkFTVCAqLwotI2RlZmluZSBYWENBVSAgIDIwMAkvKiBDQVVUSU9VUyAqLwotI2Rl ZmluZSBYWFJPQiAgIDIwMQkvKiBST0JVU1QgKi8KLSNkZWZpbmUgWFhNQUNSTyAyMDIgICAgIC8q IEltbWVkaWF0ZSBtYWNybyAqLwotI2RlZmluZSBYWFNDUk4gIDIwMwkvKiBTQ1JFRU4gKi8KLSNk ZWZpbmUgWFhMTk9VVCAyMDQgICAgIC8qIExJTkVPVVQgKi8KLSNkZWZpbmUgWFhfSU5DUiAyMDUJ LyogX0lOQ1JFTUVOVCAqLwotI2RlZmluZSBYWF9ERUNSIDIwNgkvKiBfREVDUkVNRU5UICovCi0j ZGVmaW5lIFhYX0VWQUwgMjA3CS8qIF9FVkFMVUFURSAqLwotI2RlZmluZSBYWEFSUkFZIDIwOAkv KiBBUlJBWSAqLwotI2RlZmluZSBYWFBBUlNFIDIwOQkvKiBQQVJTRSAqLwotI2RlZmluZSBYWEhU VFAgIDIxMCAgICAgLyogSFRUUCAqLwotCi0jaWZkZWYgQ0tDSEFOTkVMSU8KLSNkZWZpbmUgWFhG SUxFICAyMTEJLyogRklMRSAqLwotI2RlZmluZSBYWEZfQ0wgIDIxMgkvKiBGQ0xPU0UgKi8KLSNk ZWZpbmUgWFhGX0ZMICAyMTMJLyogRkZMVVNIICovCi0jZGVmaW5lIFhYRl9MSSAgMjE0CS8qIEZM SVNUICovCi0jZGVmaW5lIFhYRl9PUCAgMjE1CS8qIEZPUEVOICovCi0jZGVmaW5lIFhYRl9SRSAg MjE2CS8qIEZSRUFEICovCi0jZGVmaW5lIFhYRl9TRSAgMjE3CS8qIEZTRUVLICovCi0jZGVmaW5l IFhYRl9TVCAgMjE4CS8qIEZTVEFUVVMgKi8KLSNkZWZpbmUgWFhGX1dSICAyMTkJLyogRldSSVRF ICovCi0jZGVmaW5lIFhYRl9SVyAgMjIwCS8qIEZSRVdJTkQgKi8KLSNkZWZpbmUgWFhGX0NPICAy MjEJLyogRkNPVU5UICovCi0jZW5kaWYgLyogQ0tDSEFOTkVMSU8gKi8KLQotI2RlZmluZSBYWEVY RUMgIDIyMgkvKiBleGVjKCkgKi8KLSNkZWZpbmUgWFhUUkFDRSAyMjMJLyogVFJBQ0UgKi8KLSNk ZWZpbmUgWFhOT1RBViAyMjQJLyogVGhlICJub3QgYXZhaWxhYmxlIiBjb21tYW5kICovCi0jZGVm aW5lIFhYUFRZICAgMjI1ICAgICAvKiBQVFkgKGxpa2UgUElQRSkgKi8KLSNkZWZpbmUgWFhDSE1P RCAyMjYgICAgIC8qIENITU9EICovCi0jZGVmaW5lIFhYUFJPTVAgMjI3CS8qIFBST01QVCAqLwot I2RlZmluZSBYWEZFQUNIIDIyOAkvKiBGT1JFQUNIICovCi0jZGVmaW5lIFhYR1JFUCAgMjI5ICAg ICAvKiBHUkVQICovCi0jZGVmaW5lIFhYU0VYUCAgMjMwCS8qIFMtRXhwcmVzc2lvbiAqLwotI2Rl ZmluZSBYWFVORENMIDIzMQkvKiBVTkRFQ0xBUkUgKi8KLSNkZWZpbmUgWFhWT0lEICAyMzIgICAg IC8qIFZPSUQgKi8KLSNkZWZpbmUgWFhQVVQgICAyMzMJLyogUFVUICovCi0jZGVmaW5lIFhYVU5E RlggMjM0CS8qIF9VTkRFRklORSAqLwotI2RlZmluZSBYWEhFQUQgIDIzNSAgICAgLyogSEVBRCAq LwotI2RlZmluZSBYWFRBSUwgIDIzNiAgICAgLyogVEFJTCAqLwotI2RlZmluZSBYWERFQlVHIDIz NyAgICAgLyogREVCVUcgKi8KLSNkZWZpbmUgWFhMRUFSTiAyMzggICAgIC8qIExFQVJOICovCi0j ZGVmaW5lIFhYUEFUICAgMjM5ICAgICAvKiBQQVRURVJOUyAoaGVscCBvbmx5KSAqLwotCi0jZGVm aW5lIFhYQ0RVUCAgMjQwICAgICAvKiBDRFVQIChDaGFuZ2Ugd29ya2luZyBkaXJlY3RvcnkgdXB3 YXJkcykgKi8KLSNkZWZpbmUgWFhSQ0RVUCAyNDEgICAgIC8qIFJFTU9URSBDRFVQICovCi0jZGVm aW5lIFhYQ0FUICAgMjQyCS8qIENBVCAoPSBUWVBFIC9OT1BBR0UpICovCi0jZGVmaW5lIFhYRklS RVcgMjQzICAgICAvKiBGSVJFV0FMTCAoaGVscCBvbmx5KSAqLwotCi0jZGVmaW5lIFhYTENXRCAg MjQ0CS8qIExvY2FsIEMoVylEICovCi0jZGVmaW5lIFhYTENEVSAgMjQ1CS8qIExvY2FsIENEVVAg Ki8KLSNkZWZpbmUgWFhMUFdEICAyNDYJLyogTG9jYWwgUFdEICovCi0jZGVmaW5lIFhYTERFTCAg MjQ3CS8qIExvY2FsIERFTEVURSAqLwotI2RlZmluZSBYWExESVIgIDI0OAkvKiBMb2NhbCBESVJF Q1RPUlkgKi8KLSNkZWZpbmUgWFhMUkVOICAyNDkJLyogTG9jYWwgUkVOQU1FICovCi0jZGVmaW5l IFhYTE1LRCAgMjUwCS8qIExvY2FsIE1LRElSICovCi0jZGVmaW5lIFhYTFJNRCAgMjUxCS8qIExv Y2FsIFJNRElSICovCi0jZGVmaW5lIFhYVVNFUiAgMjUyCS8qIChGVFApIFVTRVIgKi8KLSNkZWZp bmUgWFhBQ0NUICAyNTMJLyogKEZUUCkgQUNDT1VOVCAqLwotI2RlZmluZSBYWExJTksgIDI1NCAg ICAgLyogTElOSyBzb3VyY2UgZGVzdGluYXRpb24gKi8KLSNkZWZpbmUgWFhPUklFICAyNTUJLyog T1JJRU5UKEFUSU9OKSAqLwotI2RlZmluZSBYWERJQUxFUiAyNTYgICAgLyogRElBTEVSICovCi0j ZGVmaW5lIFhYS0NEICAgMjU3ICAgICAvKiBLQ0QgKi8KLSNkZWZpbmUgWFhTSVRFICAyNTggICAg IC8qIChGVFApIFNJVEUgKi8KLSNkZWZpbmUgWFhQQVNWICAyNTkgICAgIC8qIChGVFApIFBBU1NJ VkUgKi8KLSNkZWZpbmUgWFhDT05UICAyNjAJLyogQ09OVElOVUUgKi8KLSNkZWZpbmUgWFhOU0NS ICAyNjEJLyogTk9TQ1JPTEwgKi8KLSNkZWZpbmUgWFhTRlRQICAyNjIJLyogU0ZUUCAqLwotI2Rl ZmluZSBYWFNLUk0gIDI2MwkvKiBTS0VSTUlUICovCi0jZGVmaW5lIFhYV0RJUiAgMjY0CS8qIFdE SVJFQ1RPUlkgKi8KLSNkZWZpbmUgWFhIRElSICAyNjUJLyogSERJUkVDVE9SWSAqLwotI2RlZmlu ZSBYWFRPVUMgIDI2NgkvKiBUT1VDSCAqLwotI2RlZmluZSBYWExPQ1UgIDI2NwkvKiBMT0NVUyAo Zm9yIEhFTFApICovCi0jZGVmaW5lIFhYUFVURSAgMjY4ICAgICAvKiBQVVRFTlYgKi8KLSNkZWZp bmUgWFhYTVNHICAyNjkgICAgIC8qIFhNRVNTQUdFICovCi0KLS8qIEVuZCBvZiBUb3AtTGV2ZWwg Q29tbWFuZHMgKi8KLQotI2RlZmluZSBTQ05fQ0xSICAgMAkJCS8qIFNDUkVFTiBDTEVBUiAqLwot I2RlZmluZSBTQ05fQ0xFICAgMQkJCS8qIFNDUkVFTiBDTEVPTCAqLwotI2RlZmluZSBTQ05fTU9W ICAgMgkJCS8qIFNDUkVFTiBNT1ZFICovCi0KLS8qIEFSUkFZIG9wZXJhdGlvbnMgKi8KLQotI2Rl ZmluZSBBUlJfRENMICAgMAkJCS8qIERlY2xhcmUgKi8KLSNkZWZpbmUgQVJSX0NQWSAgIDEJCQkv KiBDb3B5ICovCi0jZGVmaW5lIEFSUl9SU1ogICAyCQkJLyogUmVzaXplICovCi0jZGVmaW5lIEFS Ul9TUlQgICAzCQkJLyogU29ydCAqLwotI2RlZmluZSBBUlJfQ0xSICAgNAkJCS8qIENsZWFyICov Ci0jZGVmaW5lIEFSUl9TRUEgICA1CQkJLyogU2VhcmNoICovCi0jZGVmaW5lIEFSUl9EU1QgICA2 CQkJLyogRGVzdHJveSAqLwotI2RlZmluZSBBUlJfU0hPICAgNwkJCS8qIFNob3cgKi8KLSNkZWZp bmUgQVJSX1NFVCAgIDgJCQkvKiBTZXQgKi8KLSNkZWZpbmUgQVJSX0VRVSAgIDkJCQkvKiBFcXVh dGUgKi8KLQotLyogU09SVCBvcHRpb25zICovCi0KLSNkZWZpbmUgU1JUX0NBUyAgIDAJCQkvKiAv Q0FTRSAqLwotI2RlZmluZSBTUlRfS0VZICAgMQkJCS8qIC9LRVk6biAqLwotI2RlZmluZSBTUlRf UkVWICAgMgkJCS8qIC9SRVZFUlNFICovCi0jZGVmaW5lIFNSVF9STkcgICAzCQkJLyogL1JBTkdF Om46bSAqLwotI2RlZmluZSBTUlRfTlVNICAgNAkJCS8qIC9OVU1FUklDICovCi0KLS8qIFBVUkdF IGNvbW1hbmQgb3B0aW9ucyAqLwotCi0jZGVmaW5lIFBVX0tFRVAgMAkJCS8qIC9LRUVQOiAqLwot I2RlZmluZSBQVV9MSVNUIDEJCQkvKiAvTElTVCAqLwotI2RlZmluZSBQVV9QQUdFIDIJCQkvKiAv UEFHRSAqLwotI2RlZmluZSBQVV9OT1BBIDMJCQkvKiAvTk9QQUdFICovCi0jZGVmaW5lIFBVX05P REUgNAkJCS8qIC9TSU1VTEFURSAqLwotI2RlZmluZSBQVV9ERUxFIDUJCQkvKiAvREVMRVRFICov Ci0jZGVmaW5lIFBVX05PTEkgNgkJCS8qIC9OT0xJU1QgKi8KLSNkZWZpbmUgUFVfUVVJRSA3CQkJ LyogL1FVSUVUICg9IE5PTElTVCkgKi8KLSNkZWZpbmUgUFVfVkVSQiA4CQkJLyogL1ZFUkJPU0Ug KD0gTElTVCkgKi8KLSNkZWZpbmUgUFVfQVNLICA5CQkJLyogL0FTSyAqLwotI2RlZmluZSBQVV9O QVNLIDEwCQkJLyogL05PQVNLICovCi0jZGVmaW5lIFBVX0xBUiAgMTEJCQkvKiAvTEFSR0VSLVRI QU46ICovCi0jZGVmaW5lIFBVX1NNQSAgMTIJCQkvKiAvU01BTExFUi1USEFOOiAqLwotI2RlZmlu ZSBQVV9BRlQgIDEzCQkJLyogL0FGVEVSOiAqLwotI2RlZmluZSBQVV9OQUYgIDE0CQkJLyogL05P VC1BRlRFUjogKi8KLSNkZWZpbmUgUFVfQkVGICAxNQkJCS8qIC9CRUZPUkU6ICovCi0jZGVmaW5l IFBVX05CRiAgMTYJCQkvKiAvTk9ULUJFRk9SRTogKi8KLSNkZWZpbmUgUFVfRVhDICAxNwkJCS8q IC9FWENFUFQ6ICovCi0jZGVmaW5lIFBVX1JFQ1UgMTgJCQkvKiAvUkVDVVJTSVZFICovCi0jZGVm aW5lIFBVX0RPVCAgMTkJCQkvKiAvRE9URklMRVMgKi8KLSNkZWZpbmUgUFVfTk9ET1QgMjAJCQkv KiAvTk9ET1RGSUxFUyAqLwotI2RlZmluZSBQVV9IREcgIDIxCQkJLyogL0hFQURJTkcgKi8KLSNk ZWZpbmUgUFVfTk9IICAyMgkJCS8qIC9OT0hFQURJTkcgKi8KLQotLyogREVMRVRFIGNvbW1hbmQg b3B0aW9ucyAqLwotCi0jZGVmaW5lIERFTF9OT0wgMAkJCS8qIC9OT0xJU1QgKi8KLSNkZWZpbmUg REVMX0xJUyAxCQkJLyogL0xJU1QgKi8KLSNkZWZpbmUgREVMX0hERyAyCQkJLyogL0hFQURJTkdT ICovCi0jZGVmaW5lIERFTF9OT0ggMgkJCS8qIC9OT0hFQURJTkdTICovCi0jZGVmaW5lIERFTF9C RUYgMwkJCS8qIC9CRUZPUkU6ICovCi0jZGVmaW5lIERFTF9OQkYgNAkJCS8qIC9OT1QtQkVGT1JF OiAqLwotI2RlZmluZSBERUxfQUZUIDUJCQkvKiAvQUZURVI6ICovCi0jZGVmaW5lIERFTF9OQUYg NgkJCS8qIC9OT1QtQUZURVI6ICovCi0jZGVmaW5lIERFTF9ET1QgNwkJCS8qIC9ET1RGSUxFUyAq LwotI2RlZmluZSBERUxfTk9EIDgJCQkvKiAvTk9ET1RGSUxFUyAqLwotI2RlZmluZSBERUxfRVhD IDkJCQkvKiAvRVhDRVBUOiovCi0jZGVmaW5lIERFTF9QQUcgMTAJCQkvKiAvUEFHRSAqLwotI2Rl ZmluZSBERUxfTk9QIDExCQkJLyogL05PUEFHRSAqLwotI2RlZmluZSBERUxfUkVDIDEyCQkJLyog L1JFQ1VSU0lWRSAqLwotI2RlZmluZSBERUxfTk9SIDEzCQkJLyogL05PUkVDVVJTSVZFICovCi0j ZGVmaW5lIERFTF9WUkIgMTQJCQkvKiAvVkVSQk9TRSAqLwotI2RlZmluZSBERUxfUVVJIDE1CQkJ LyogL1FVSUVUICovCi0jZGVmaW5lIERFTF9TTUEgMTYJCQkvKiAvU01BTExFUi1USEFOOiAqLwot I2RlZmluZSBERUxfTEFSIDE3CQkJLyogL0xBUkdFUi1USEFOOiAqLwotI2RlZmluZSBERUxfU0lN IDE4CQkJLyogL1NJTVVMQVRFICovCi0jZGVmaW5lIERFTF9BU0sgMTkJCQkvKiAvQVNLICovCi0j ZGVmaW5lIERFTF9OQVMgMjAJCQkvKiAvTk9BU0sgKi8KLSNkZWZpbmUgREVMX1NVTSAyMQkJCS8q IC9TVU1NQVJZICovCi0jZGVmaW5lIERFTF9ESVIgMjIJCQkvKiAvRElSRUNUT1JZICovCi0jZGVm aW5lIERFTF9BTEwgMjMJCQkvKiAvQUxMICovCi0jZGVmaW5lIERFTF9UWVAgMjQJCQkvKiAvVFlQ RTogKi8KLSNkZWZpbmUgREVMX0xOSyAyNQkJCS8qIC9GT0xMT1dMSU5LUyAqLwotI2RlZmluZSBE RUxfTkxLIDI2CQkJLyogL05PRk9MTE9XTElOS1MgKi8KLQotLyogUkVOQU1FIHN3aXRjaGVzIHRo YXQgY2FuIGJlIHVzZWQgaW4gdGhlIHNhbWUgdGFibGUgYXMgdGhlIERFTCBzd2l0Y2hlcyAqLwot Ci0jZGVmaW5lIFJFTl9MT1cgMTAwCQkJLyogQ29udmVydCB0byBsb3dlcmNhc2UgKi8KLSNkZWZp bmUgUkVOX1VQUCAxMDEJCQkvKiBDb252ZXJ0byB0byB1cHBlcmNhc2UgKi8KLSNkZWZpbmUgUkVO X1JQTCAxMDIJCQkvKiBTdHJpbmcgcmVwbGFjZW1lbnQgKi8KLSNkZWZpbmUgUkVOX09WVyAxMDMJ CQkvKiBPdmVyd3JpdGUgZmlsZSB3aXRoIHNhbWUgbmFtZSAqLwotI2RlZmluZSBSRU5fWExBIDEw NAkJCS8qIFRyYW5zbGF0ZSBjaGFyYWN0ZXIgc2V0cyAqLwotI2RlZmluZSBSRU5fU1BBIDEwNQkJ CS8qIEZpeCBzcGFjZXMgKi8KLQotLyogRklMRSBvcGVyYXRpb25zICovCi0KLSNkZWZpbmUgRklM X09QTiAgMAkJCS8qIE9QRU4gKi8KLSNkZWZpbmUgRklMX0NMUyAgMQkJCS8qIENMT1NFICovCi0j ZGVmaW5lIEZJTF9SRUEgIDIJCQkvKiBSRUFEICovCi0jZGVmaW5lIEZJTF9HRVQgIDMJCQkvKiBH RVQgKi8KLSNkZWZpbmUgRklMX1dSSSAgNAkJCS8qIFdSSVRFICovCi0jZGVmaW5lIEZJTF9SRVcg IDUJCQkvKiBSRVdJTkQgKi8KLSNkZWZpbmUgRklMX0xJUyAgNgkJCS8qIExJU1QgKi8KLSNkZWZp bmUgRklMX0ZMVSAgNwkJCS8qIEZMVVNIICovCi0jZGVmaW5lIEZJTF9TRUUgIDgJCQkvKiBTRUVL ICovCi0jZGVmaW5lIEZJTF9TVEEgIDkJCQkvKiBTVEFUVVMgKi8KLSNkZWZpbmUgRklMX0NPVSAx MAkJCS8qIENPVU5UICovCi0KLS8qIE9QRU4gLyBDTE9TRSBpdGVtcyAqLwotCi0jZGVmaW5lIE9Q Tl9GSV9SIDEJCQkvKiBGSUxFIFJFQUQgKi8KLSNkZWZpbmUgT1BOX0ZJX1cgMgkJCS8qIEZJTEUg V1JJVEUgKi8KLSNkZWZpbmUgT1BOX0ZJX0EgMwkJCS8qIEZJTEUgQVBQRU5EICovCi0jZGVmaW5l IE9QTl9QSV9SIDQJCQkvKiBQSVBFIFJFQUQgKi8KLSNkZWZpbmUgT1BOX1BJX1cgNQkJCS8qIFBJ UEUgV1JJVEUgKi8KLSNkZWZpbmUgT1BOX1BUX1IgNgkJCS8qIFBUWSBSRUFEICovCi0jZGVmaW5l IE9QTl9QVF9XIDcJCQkvKiBQVFkgV1JJVEUgKi8KLSNkZWZpbmUgT1BOX1NFUgkgOAkJCS8qIFBP UlQgb3IgTElORSAqLwotI2RlZmluZSBPUE5fTkVUCSA5CQkJLyogSE9TVCAqLwotCi0vKiBLRVJC RVJPUyBjb21tYW5kIHN3aXRjaGVzICovCi0KLSNkZWZpbmUgS1JCX1NfVkUgIDAJLyogL1ZFUlNJ T04gKi8KLSNkZWZpbmUgS1JCX1NfQ0EgIDEJLyogL0NBQ0hFOiAqLwotI2RlZmluZSBLUkJfU19N QVggMQkvKiBIaWdoZXN0IEtFUkJFUk9TIHN3aXRjaCBudW1iZXIgKi8KLQotI2lmZGVmIENLX0tF UkJFUk9TCi0KLS8qIEtFUkJFUk9TIGFjdGlvbnMgKi8KLQotI2RlZmluZSBLUkJfQV9JTiAgMAkv KiBJTklUSUFMSVpFICovCi0jZGVmaW5lIEtSQl9BX0RFICAxCS8qIERFU1RST1kgKi8KLSNkZWZp bmUgS1JCX0FfTEMgIDIJLyogTElTVC1DUkVERU5USUFMUyAqLwotCi0vKiBLRVJCRVJPUyBJTklU IHN3aXRjaGVzICovCi0KLSNkZWZpbmUgS1JCX0lfRlcgIDAJLyogL0ZPUldBUkRBQkxFICovCi0j ZGVmaW5lIEtSQl9JX0xGICAxCS8qIC9MSUZFVElNRTogKi8KLSNkZWZpbmUgS1JCX0lfUEQgIDIJ LyogL1BPU1REQVRFOiAqLwotI2RlZmluZSBLUkJfSV9QUiAgMwkvKiAvUFJPWElBQkxFICovCi0j ZGVmaW5lIEtSQl9JX1JCICA0CS8qIC9SRU5FV0FCTEU6ICovCi0jZGVmaW5lIEtSQl9JX1JOICA1 CS8qIC9SRU5FVyAqLwotI2RlZmluZSBLUkJfSV9TUiAgNgkvKiAvU0VSVklDRTogKi8KLSNkZWZp bmUgS1JCX0lfVkEgIDcJLyogL1ZBTElEQVRFICovCi0jZGVmaW5lIEtSQl9JX1JMICA4ICAgICAv KiAvUkVBTE06ICovCi0jZGVmaW5lIEtSQl9JX0lOICA5ICAgICAvKiAvSU5TVEFOQ0U6ICovCi0j ZGVmaW5lIEtSQl9JX1BXICAxMCAgICAvKiAvUEFTU1dPUkQ6ICovCi0jZGVmaW5lIEtSQl9JX1BB ICAxMSAgICAvKiAvUFJFQVVUSCAqLwotI2RlZmluZSBLUkJfSV9WQiAgMTIgICAgLyogL1ZFUkJP U0UgKi8KLSNkZWZpbmUgS1JCX0lfQlIgIDEzICAgIC8qIC9CUklFRiAqLwotI2RlZmluZSBLUkJf SV9ORlcgMTQJLyogL05PVC1GT1JXQVJEQUJMRSAqLwotI2RlZmluZSBLUkJfSV9OUFIgMTUJLyog L05PVC1QUk9YSUFCTEUgKi8KLSNkZWZpbmUgS1JCX0lfTlBBIDE2ICAgIC8qIC9OT1QtUFJFQVVU SCAqLwotI2RlZmluZSBLUkJfSV9LNCAgMTcgICAgLyogL0tFUkJFUk9TNCAgICAoc2hvdWxkIGs1 IGdldCBrNCBhcyB3ZWxsKSAqLwotI2RlZmluZSBLUkJfSV9OSzQgMTggICAgLyogL05PLUtFUkJF Uk9TNCAqLwotI2RlZmluZSBLUkJfSV9QT1AgMTkgICAgLyogL1BPUFVQICovCi0jZGVmaW5lIEtS Ql9JX0FEUiAyMCAgICAvKiAvQUREUkVTU0VTOiAqLwotI2RlZmluZSBLUkJfSV9OQUQgMjEgICAg LyogL05PLUFERFJFU1NFUyAqLwotI2RlZmluZSBLUkJfSV9NQVggMjEgICAgLyogSGlnaGVzdCBL RVJCRVJPUyBJTklUIHN3aXRjaCBudW1iZXIgKi8KLQotI2VuZGlmIC8qIENLX0tFUkJFUk9TICov Ci0KLS8qIFNFVCBwYXJhbWV0ZXJzICovCi0KLSNkZWZpbmUgWFlCUkVBICAwCS8qIEJSRUFLIHNp bXVsYXRpb24gKi8KLSNkZWZpbmUgWFlDSEtUICAxCS8qIEJsb2NrIGNoZWNrIHR5cGUgKi8KLSNk ZWZpbmUgWFlERUJVICAyCS8qIERlYnVnZ2luZyAqLwotI2RlZmluZSBYWURFTEEgIDMJLyogRGVs YXkgKi8KLSNkZWZpbmUgWFlEVVBMICA0CS8qIER1cGxleCAqLwotI2RlZmluZSBYWUVPTCAgIDUJ LyogRW5kLU9mLUxpbmUgKHBhY2tldCB0ZXJtaW5hdG9yKSAqLwotI2RlZmluZSBYWUVTQyAgIDYJ LyogRXNjYXBlIGNoYXJhY3RlciAqLwotI2RlZmluZSBYWUZJTEUgIDcJLyogRmlsZSBQYXJhbWV0 ZXJzIChzZWUgY2tja2VyLmggZm9yIHZhbHVlcykgKi8KLQkJCS8qICh0aGlzIHNwYWNlIGF2YWls YWJsZSkgKi8KLSNkZWZpbmUgWFlGTE9XICA5CS8qIEZsb3cgQ29udHJvbCAqLwotI2RlZmluZSBY WUhBTkQgMTAJLyogSGFuZHNoYWtlICovCi0jZGVmaW5lIFhZSUZEICAxMQkvKiBJbmNvbXBsZXRl IEZpbGUgRGlzcG9zaXRpb24gKi8KLSNkZWZpbmUgWFlJTUFHIDEyCS8qICJJbWFnZSBNb2RlIiAq LwotI2RlZmluZSBYWUlOUFUgMTMJLyogSU5QVVQgY29tbWFuZCBwYXJhbWV0ZXJzICovCi0jZGVm aW5lIFhZTEVOICAxNAkvKiBNYXhpbXVtIHBhY2tldCBsZW5ndGggdG8gc2VuZCAqLwotI2RlZmlu ZSBYWUxJTkUgMTUJLyogQ29tbXVuaWNhdGlvbiBsaW5lIHRvIHVzZSAqLwotCi0vKiBTRVQgTElO RSAvIFNFVCBIT1NUIGNvbW1hbmQgc3dpdGNoZXMgKi8KLQotI2RlZmluZSBTTF9DTlggICAwCS8q IC9DT05ORUNUICovCi0jZGVmaW5lIFNMX1NSViAgIDEJLyogL1NFUlZFUiAqLwotI2RlZmluZSBT TF9TSFIgICAyCS8qIC9TSEFSRSAqLwotI2RlZmluZSBTTF9OU0ggICAzCS8qIC9OT1NIQVJFICov Ci0jZGVmaW5lIFNMX0JFRSAgIDQJLyogL0JFRVAgKi8KLSNkZWZpbmUgU0xfQU5TICAgNQkvKiAv QU5TV0VSICovCi0jZGVmaW5lIFNMX0RJQSAgIDYJLyogL0RJQUw6eHh4ICovCi0jZGVmaW5lIFNM X1NQRCAgIDcJLyogL1NQRUVEOnh4eCAqLwotI2RlZmluZSBTTF9GTE8gICA4CS8qIC9GTE9XOnh4 eCAqLwotI2RlZmluZSBTTF9UTU8gICA5CS8qIC9USU1FT1VUOnh4eCAqLwotI2RlZmluZSBTTF9D TUQgIDEwCS8qIC9DT01NQU5EICovCi0jZGVmaW5lIFNMX1BTVyAgMTEJLyogL1BBU1NXT1JEOnh4 eCAqLwotI2RlZmluZSBTTF9JS1MgIDEyICAgICAgLyogL0tFUk1JVC1TRVJWSUNFICovCi0jZGVm aW5lIFNMX05FVCAgMTMgICAgICAvKiAvTkVUV09SSy1UWVBFOnh4eCAqLwotI2RlZmluZSBTTF9F TkMgIDE0ICAgICAgLyogL0VOQ1JZUFQ6dHlwZSAodGVsbmV0KSAvRU5DUllQVCAocmxvZ2luKSAq LwotI2RlZmluZSBTTF9LUkI0IDE1ICAgICAgLyogL0tFUkJFUk9TIDQgKHJsb2dpbi90ZWxuZXQp ICovCi0jZGVmaW5lIFNMX0tSQjUgMTYgICAgICAvKiAvS0VSQkVST1MgNSAocmxvZ2luL3RlbG5l dCkgKi8KLSNkZWZpbmUgU0xfU1JQICAxNyAgICAgIC8qIC9TUlAgKHRlbG5ldCkgKi8KLSNkZWZp bmUgU0xfTlRMTSAxOCAgICAgIC8qIC9OVExNICh0ZWxuZXQpICovCi0jZGVmaW5lIFNMX1NTTCAg MTkgICAgICAvKiAvU1NMICh0ZWxuZXQpICovCi0jZGVmaW5lIFNMX1VJRCAgMjAgICAgICAvKiAv VVNFUklEOnh4eHggKi8KLSNkZWZpbmUgU0xfQVVUSCAyMSAgICAgIC8qIC9BVVRIOnR5cGUgKi8K LSNkZWZpbmUgU0xfV0FJVCAyMgkvKiAvV0FJVCAqLwotI2RlZmluZSBTTF9OT1dBSVQgMjMJLyog L05PV0FJVCAqLwotI2RlZmluZSBTTF9QVFkgIDI0ICAgICAgLyogL1BUWSAqLwotCi0jZGVmaW5l IFhZTE9HICAxNgkvKiBMb2cgZmlsZSAqLwotI2RlZmluZSBYWU1BUksgMTcJLyogU3RhcnQgb2Yg UGFja2V0IG1hcmsgKi8KLSNkZWZpbmUgWFlOUEFEIDE4CS8qIEFtb3VudCBvZiBwYWRkaW5nICov Ci0jZGVmaW5lIFhZUEFEQyAxOQkvKiBQYWQgY2hhcmFjdGVyICovCi0jZGVmaW5lIFhZUEFSSSAy MAkvKiBQYXJpdHkgKi8KLSNkZWZpbmUgWFlQQVVTIDIxCS8qIEludGVycGFja2V0IHBhdXNlICov Ci0jZGVmaW5lIFhZUFJPTSAyMgkvKiBQcm9ncmFtIHByb21wdCBzdHJpbmcgKi8KLSNkZWZpbmUg WFlRQklOIDIzCS8qIDh0aC1iaXQgcHJlZml4ICovCi0jZGVmaW5lIFhZUUNUTCAyNAkvKiBDb250 cm9sIGNoYXJhY3RlciBwcmVmaXggKi8KLSNkZWZpbmUgWFlSRVBUIDI1CS8qIFJlcGVhdCBjb3Vu dCBwcmVmaXggKi8KLSNkZWZpbmUgWFlSRVRSIDI2CS8qIFJldHJ5IGxpbWl0ICovCi0jZGVmaW5l IFhZU1BFRSAyNwkvKiBMaW5lIHNwZWVkIChiYXVkIHJhdGUpICovCi0jZGVmaW5lIFhZVEFDSCAy OAkvKiBDaGFyYWN0ZXIgdG8gYmUgZG91YmxlZCAqLwotI2RlZmluZSBYWVRJTU8gMjkJLyogVGlt ZW91dCBpbnRlcnZhbCAqLwotI2RlZmluZSBYWU1PRE0gMzAJLyogTW9kZW0gLSBhbHNvIHNlZSBY WURJQUwgKi8KLQotI2RlZmluZSBYWVNFTkQgMzEJLyogU0VUIFNFTkQgcGFyYW1ldGVycyAqLwot I2RlZmluZSBYWVJFQ1YgMzIgICAJLyogU0VUIFJFQ0VJVkUgcGFyYW1ldGVycyAqLwotI2RlZmlu ZSBYWVRFUk0gMzMJLyogU0VUIFRFUk1JTkFMIHBhcmFtZXRlcnMgKi8KLSNkZWZpbmUgICBYWVRC WVQgMCAgICAgIC8qICBUZXJtaW5hbCBCeXRlc2l6ZSAoNyBvciA4KSAqLwotI2RlZmluZSAgIFhZ VFRZUCAxICAgICAgLyogIFRlcm1pbmFsIGVtdWxhdGlvbiBUeXBlICovCi0jZGVmaW5lICAgICBU VF9OT05FICAwCS8qICAgIE5PTkUsIG5vIGVtdWxhdGlvbiAqLwotI2lmZGVmIE9TMgotLyoKLSAg Tm90ZSwgdGhlIHN5bWJvbHMgZm9yIFZUIGFuZCBWVC1saWtlIHRlcm1pbmFscyBzaG91bGQgYmUg aW4gYXNjZW5kaW5nCi0gIG51bWVyaWNhbCBvcmRlciwgc28gdGhhdCBoaWdoZXIgb25lcyBjYW4g YmUgdHJlYXRlZCBhcyBzdXBlcnNldHMgb2YKLSAgbG93ZXIgb25lcyB3aXRoIHJlc3BlY3QgdG8g Y2FwYWJpbGl0aWVzLgotCi0gIFRoaXMgaXMgbm8gbG9uZ2VyIHRoZSBjYXNlIHdpdGggdGhlIGlu Zmx1eCBvZiBuZXcgdGVybWluYWwgdHlwZXMuCi0gIEp1c3QgbWFrZSBzdXJlIHRoYXQgdGhlIElT WFhYWFgoKSBtYWNyb3MgaW5jbHVkZSB0aGUgcHJvcGVyIGZhbWlseQotICBncm91cHMuCi0qLwot I2RlZmluZSAgICAgVFRfREcyMDAgICAgMSAJLyogICAgRGF0YSBHZW5lcmFsIDIwMCAqLwotI2Rl ZmluZSAgICAgVFRfREcyMTAgICAgMiAgCS8qICAgIERhdGEgR2VuZXJhbCAyMTAgKi8KLSNkZWZp bmUgICAgIFRUX0RHMjE3ICAgIDMgICAJLyogICAgRGF0YSBHZW5lcmFsIDIxNyAqLwotI2RlZmlu ZSAgICAgVFRfSFAyNjIxICAgNCAJLyogICAgSGV3bGV0dC1QYWNrYXJkIDI2MjFBICovCi0jZGVm aW5lICAgICBUVF9IUFRFUk0gICA1CS8qICAgIEhld2xldHQtUGFja2FyZCBDb25zb2xlICovCi0j ZGVmaW5lICAgICBUVF9IWkwxNTAwICA2IAkvKiAgICBIYXplbHRpbmUgMTUwMCAqLwotI2RlZmlu ZSAgICAgVFRfVkM0NDA0ICAgNyAJLyogICAgVm9sa2VyIENyYWlnIFZDNDQwNC80MDQgKi8KLSNk ZWZpbmUgICAgIFRUX1dZMzAgICAgIDgJLyogICAgV1lTRS0zMC8zMCsgKi8KLSNkZWZpbmUgICAg IFRUX1dZNTAgICAgIDkgCS8qICAgIFdZU0UtNTAvNTArICovCi0jZGVmaW5lICAgICBUVF9XWTYw ICAgIDEwICAgICAgIC8qICAgIFdZU0UtNjAJICovCi0jZGVmaW5lICAgICBUVF9XWTE2MCAgIDEx ICAgICAgIC8qICAgIFdZU0UtMTYwICAgKi8KLSNkZWZpbmUgICAgIFRUX1FOWCAgICAgMTIgICAg ICAgLyogICAgUU5YICovCi0jZGVmaW5lICAgICBUVF9RQU5TSSAgIDEzICAgICAgIC8qICAgIFFO WCBBbnNpIGVtdWxhdGlvbiAqLwotI2RlZmluZSAgICAgVFRfVlQ1MiAgICAxNAkvKiAgICBERUMg VlQtNTIgICovCi0jZGVmaW5lICAgICBUVF9IMTkgICAgIDE1CS8qICAgIEhlYXRoLTE5ICovCi0j ZGVmaW5lICAgICBUVF9JQk0zMSAgIDE2ICAgICAgIC8qICAgIElCTSAzMXh4ICovCi0jZGVmaW5l ICAgICBUVF9TQ09BTlNJIDE3CS8qICAgIFNDT0FOU0kgKFVuaXggbW9kZSkgKi8KLSNkZWZpbmUg ICAgIFRUX0FUMzg2ICAgMTggCS8qICAgIFVuaXh3YXJlIEFUMzg2IChVbml4IG1vZGUpICovCi0j ZGVmaW5lICAgICBUVF9BTlNJICAgIDE5CS8qICAgIElCTSBBTlNJLlNZUyAoQkJTKSAqLwotI2Rl ZmluZSAgICAgVFRfVklQNzgwOSAyMAkvKiAgICBIb25leXdlbGwgVklQNzgwOSAqLwotI2RlZmlu ZSAgICAgVFRfTElOVVggICAyMSAgICAgICAvKiAgICBMaW51eCBDb25zb2xlICovCi0jZGVmaW5l ICAgICBUVF9IRlQgICAgIDIyICAgICAgIC8qICAgIElCTSBIaWdoIEZ1bmN0aW9uIFRlcm1pbmFs ICovCi0jZGVmaW5lICAgICBUVF9BSVhURVJNIDIzICAgICAgIC8qICAgIElCTSBBSVh0ZXJtICov Ci0jZGVmaW5lICAgICBUVF9TVU4gICAgIDI0ICAgICAgIC8qICAgIFNVTiBDb25zb2xlICovCi0j ZGVmaW5lICAgICBUVF9CQTgwICAgIDI1ICAgICAgIC8qICAgIE5peGRvcmYgQkE4MCAqLwotI2Rl ZmluZSAgICAgVFRfQkVPUyAgICAyNiAgICAgICAvKiAgICBCZU9TIEFuc2kgKi8KLSNkZWZpbmUg ICAgIFRUX1ZUMTAwICAgMjcJLyogICAgREVDIFZULTEwMCAqLwotI2RlZmluZSAgICAgVFRfVlQx MDIgICAyOAkvKiAgICBERUMgVlQtMTAyICovCi0jZGVmaW5lICAgICBUVF9WVDIyMCAgIDI5CS8q ICAgIERFQyBWVC0yMjAgKi8KLSNkZWZpbmUgICAgIFRUX1ZUMjIwUEMgMzAgICAgICAgLyogICAg REVDIFZULTIyMCB3aXRoIFBDIGtleWJvYXJkICovCi0jZGVmaW5lICAgICBUVF9WVDMyMCAgIDMx CS8qICAgIERFQyBWVC0zMjAgKi8KLSNkZWZpbmUgICAgIFRUX1ZUMzIwUEMgMzIJLyogICAgREVD IFZULTMyMCB3aXRoIFBDIGtleWJvYXJkICovCi0jZGVmaW5lICAgICBUVF9XWTM3MCAgIDMzCS8q ICAgIFdZU0UgMzcwIEFOU0kgVGVybWluYWwgKi8KLSNkZWZpbmUgICAgIFRUXzk3ODAxICAgMzQg ICAgICAgLyogICAgU2luaXggOTc4MDEtNXh4IHRlcm1pbmFsICovCi0jZGVmaW5lICAgICBUVF9B QUEgICAgIDM1ICAgICAgIC8qICAgIEFubiBBcmJvciBBbWJhc3NhZG9yICovCi0jZGVmaW5lICAg ICBUVF9UVkk5MTAgIDM2CS8qICAgIFRWSSA5MTArICovCi0jZGVmaW5lICAgICBUVF9UVkk5MjUg IDM3ICAgICAgIC8qICAgIFRWSSA5MjUgICovCi0jZGVmaW5lICAgICBUVF9UVkk5NTAgIDM4ICAg ICAgIC8qICAgIFRWSTk1MCAgICovCi0jZGVmaW5lICAgICBUVF9BRE0zQSAgIDM5ICAgICAgIC8q ICAgIExTSSBBRE0gM0EgKi8KLSNkZWZpbmUgICAgIFRUX0FETTUgICAgNDAJCS8qICAgIExTSSBB RE0gNSAqLwotI2RlZmluZSAgICAgVFRfVlROVCAgICA0MSAgICAgICAvKiAgICBNaWNyb3NvZnQg TlQgVmlydHVhbCBUZXJtaW5hbCAqLwotI2RlZmluZSAgICAgVFRfTUFYICAgVFRfVlROVAotI2Rl ZmluZSAgICAgVFRfVlQ0MjAgICA5NgkvKiAgICBERUMgVlQtNDIwICovCi0jZGVmaW5lICAgICBU VF9WVDUyMCAgIDk3CS8qICAgIERFQyBWVC01MjAvNTI1ICovCi0jZGVmaW5lICAgICBUVF9URUs0 MCA5OQkvKiAgICBUZWt0cm9uaXggNDAxeCAqLwotI2RlZmluZSAgICAgVFRfS0JNX0VNQUNTICAg VFRfTUFYKzEKLSNkZWZpbmUgICAgIFRUX0tCTV9IRUJSRVcgIFRUX01BWCsyCi0jZGVmaW5lICAg ICBUVF9LQk1fUlVTU0lBTiBUVF9NQVgrMwotI2RlZmluZSAgICAgVFRfS0JNX1dQICAgICAgVFRf TUFYKzQKLQotI2RlZmluZSBJU0FBQSh4KSAgICh4ID09IFRUX0FBQSkKLSNkZWZpbmUgSVNBTlNJ KHgpICAoeCA+PSBUVF9TQ09BTlNJICYmIHggPD0gVFRfQU5TSSkKLSNkZWZpbmUgSVNCQTgwKHgp ICAoeCA9PSBUVF9CQTgwKQotI2RlZmluZSBJU0JFT1MoeCkgICh4ID09IFRUX0JFT1MpCi0jZGVm aW5lIElTUU5YKHgpICAgKHggPT0gVFRfUU5YKQotI2RlZmluZSBJU1FBTlNJKHgpICAgKHggPT0g VFRfUUFOU0kpCi0jZGVmaW5lIElTTElOVVgoeCkgKHggPT0gVFRfTElOVVgpCi0jZGVmaW5lIElT U0NPKHgpICAgKHggPT0gVFRfU0NPQU5TSSkKLSNkZWZpbmUgSVNBVDM4Nih4KSAoeCA9PSBUVF9B VDM4NikKLSNkZWZpbmUgSVNBVkFUQVIoeCkgKHggPT0gVFRfQU5TSSkKLSNkZWZpbmUgSVNTVU4o eCkgICAgKHggPT0gVFRfU1VOKQotI2RlZmluZSBJU1VOSVhDT04oeCkgKHggPT0gVFRfU0NPQU5T SSB8fCB4ID09IFRUX0FUMzg2IHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICB4ID09IFRUX0xJ TlVYICAgfHwgeCA9PSBUVF9TVU4pCi0jZGVmaW5lIElTREcyMDAoeCkgKHggPj0gVFRfREcyMDAg JiYgeCA8PSBUVF9ERzIxNykKLSNkZWZpbmUgSVNIWkwoeCkgICAoeCA9PSBUVF9IWkwxNTAwKQot I2RlZmluZSBJU0gxOSh4KSAgICh4ID09IFRUX0gxOSkKLSNkZWZpbmUgSVNJQk0zMSh4KSAoeCA9 PSBUVF9JQk0zMSkKLSNkZWZpbmUgSVNUVkkoeCkgICAoeCA+PSBUVF9UVkk5MTAgJiYgeCA8PSBU VF9UVkk5NTApCi0jZGVmaW5lIElTVFZJOTEwKHgpICh4ID09IFRUX1RWSTkxMCkKLSNkZWZpbmUg SVNUVkk5MjUoeCkgKHggPT0gVFRfVFZJOTI1KQotI2RlZmluZSBJU1RWSTk1MCh4KSAoeCA9PSBU VF9UVkk5NTApCi0jZGVmaW5lIElTVlQ1Mih4KSAgKHggPT0gVFRfVlQ1MiB8fCB4ID09IFRUX0gx OSkKLSNpZmRlZiBDT01NRU5UCi0jZGVmaW5lIElTVlQ1MjAoeCkgKHggPT0gVFRfVlQ1MjApCi0j ZGVmaW5lIElTVlQ0MjAoeCkgKHggPj0gVFRfVlQ0MjAgJiYgeCA8PSBUVF9WVDUyMCkKLSNlbHNl IC8qIENPTU1FTlQgKi8KLS8qIFNpbmNlIHdlIGRvIG5vdCB5ZXQgc3VwcG9ydCA0MjAvNTIwIGV4 dGVuZCAzMjAgKi8KLSNkZWZpbmUgSVNWVDUyMCh4KSAoSVNWVDMyMCh4KSkKLSNkZWZpbmUgSVNW VDQyMCh4KSAoSVNWVDMyMCh4KSkKLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZGVmaW5lIElTVlQz MjAoeCkgKHggPj0gVFRfVlQzMjAgJiYgeCA8PSBUVF9BQUEpCi0jZGVmaW5lIElTVlQyMjAoeCkg KHggPj0gVFRfVlQyMjAgJiYgeCA8PSBUVF9BQUEgfHwgXAotICAgICAgICAgICAgICAgICAgICBJ U0JFT1MoeCkgfHwgSVNRQU5TSSh4KSB8fCBcCi0gICAgICAgICAgICAgICAgICAgIElTTElOVVgo eCkgfHwgSVNTVU4oeCkpCi0jZGVmaW5lIElTVlQxMDIoeCkgKHggPj0gVFRfVklQNzgwOSAmJiB4 IDw9IFRUX0JBODAgfHwgXAotCQkgICAgeCA9PSBUVF9WVDEwMiB8fCBJU1ZUMjIwKHgpKQotI2Rl ZmluZSBJU1ZUMTAwKHgpICh4ID09IFRUX1ZUMTAwIHx8IElTVlQxMDIoeCkpCi0jZGVmaW5lIElT V1kzMCh4KSAgKHggPT0gVFRfV1kzMCkKLSNkZWZpbmUgSVNXWVNFKHgpICAoeCA+PSBUVF9XWTMw ICYmIHggPD0gVFRfV1kxNjApCi0jZGVmaW5lIElTV1k1MCh4KSAgKHggPT0gVFRfV1k1MCkKLSNk ZWZpbmUgSVNXWTYwKHgpICAoeCA9PSBUVF9XWTYwIHx8IHggPT0gVFRfV1kxNjApCi0jZGVmaW5l IElTV1kxNjAoeCkgKHggPT0gVFRfV1kxNjApCi0jZGVmaW5lIElTV1kzNzAoeCkgKHggPT0gVFRf V1kzNzApCi0jZGVmaW5lIElTVkMoeCkgICAgKHggPT0gVFRfVkM0NDA0KQotI2RlZmluZSBJU0hQ KHgpICAgICh4ID09IFRUX0hQVEVSTSB8fCB4ID09IFRUX0hQMjYyMSkKLSNkZWZpbmUgSVNIUFRF Uk0oeCkgKHggPT0gVFRfSFBURVJNKQotI2RlZmluZSBJU1ZJUCh4KSAgICh4ID09IFRUX1ZJUDc4 MDkpCi0jZGVmaW5lIElTOTc4MDEoeCkgKHggPT0gVFRfOTc4MDEpCi0jZGVmaW5lIElTSEZUKHgp ICAgKHggPT0gVFRfSEZUIHx8IHggPT0gVFRfQUlYVEVSTSkKLSNkZWZpbmUgSVNBSVhURVJNKHgp ICh4ID09IFRUX0FJWFRFUk0pCi0jZGVmaW5lIElTVEVLKHgpICAgKHggPT0gVFRfVEVLNDApCi0j ZGVmaW5lIElTVlROVCh4KSAgKHggPT0gVFRfVlROVCkKLSNkZWZpbmUgSVNBRE0zQSh4KSAoeCA9 PSBUVF9BRE0zQSkKLSNkZWZpbmUgSVNBRE01KHgpICAoeCA9PSBUVF9BRE01KQotI2VuZGlmIC8q IE9TMiAqLwotCi0jZGVmaW5lICAgWFlUQ1MgIDIgICAgICAvKiAgVGVybWluYWwgQ2hhcmFjdGVy IFNldCAqLwotI2RlZmluZSAgIFhZVFNPICAzCS8qICBUZXJtaW5hbCBTaGlmdC1Jbi9TaGlmdC1P dXQgKi8KLSNkZWZpbmUgICBYWVROTCAgNCAgICAgIC8qICBUZXJtaW5hbCBuZXdsaW5lIG1vZGUg Ki8KLSNpZmRlZiBPUzIKLSNkZWZpbmUgICBYWVRDT0wgNSAgICAgIC8qICBUZXJtaW5hbCBjb2xv cnMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNkZWZpbmUgICBYWVRFQyAgNgkvKiAgVGVybWluYWwg ZWNobyA9IGR1cGxleCA9IGxvY2FsLWVjaG8gKi8KLSNpZmRlZiBPUzIKLSNkZWZpbmUgICBYWVRD VVIgNwkvKiAgVGVybWluYWwgY3Vyc29yICovCi0jZGVmaW5lICAgICBUVENfVUxJTkUgMAotI2Rl ZmluZSAgICAgVFRDX0hBTEYgIDEKLSNkZWZpbmUgICAgIFRUQ19CTE9DSyAyCi0jZGVmaW5lICAg WFlUQVJSIDgJLyogIFRlcm1pbmFsIGFycm93LWtleSBtb2RlICovCi0jZGVmaW5lICAgWFlUS1BE IDkgICAgICAvKiAgVGVybWluYWwga2V5cGFkIG1vZGUgKi8KLSNkZWZpbmUgICAgVFRLX05PUk0g MCAgIC8qICAgIE5vcm1hbCBtb2RlIGZvciBhcnJvdyAvIGtleWFkIGtleXMgKi8KLSNkZWZpbmUg ICAgVFRLX0FQUEwgMSAgIC8qICAgIEFwcGxpY2F0aW9uIG1vZGUgZm9yIGFycm93IC8ga2V5YWQg a2V5cyAqLwotI2RlZmluZSAgIFhZVFdSUCAxMCAgICAgLyogIFRlcm1pbmFsIHdyYXAgKi8KLSNl bmRpZiAvKiBPUzIgKi8KLSNkZWZpbmUgICBYWVRDUkQgMTEJLyogIFRlcm1pbmFsIENSLWRpc3Bs YXkgKi8KLSNkZWZpbmUgICBYWVRBTlMgMTIJLyogIFRlcm1pbmFsIGFuc3dlcmJhY2sgKi8KLSNp ZmRlZiBPUzIKLSNkZWZpbmUgICBYWVNDUlMgMTMgICAgIC8qICBUZXJtaW5hbCBzY3JvbGxiYWNr IGJ1ZmZlciBzaXplICovCi0jZW5kaWYgLyogT1MyICovCi0jZGVmaW5lICAgWFlUQVBDIDE0CS8q ICBUZXJtaW5hbCBBUEMgKi8KLSNpZmRlZiBPUzIKLSNkZWZpbmUgICBYWVRCRUwgMTUgICAgIC8q ICBUZXJtaW5hbCBCZWxsICovCi0jZW5kaWYgLyogT1MyICovCi0jZGVmaW5lICAgWFlUREVCIDE2 CS8qICBUZXJtaW5hbCBEZWJ1ZyAqLwotI2lmZGVmIE9TMgotI2RlZmluZSAgIFhZVFJPTCAxNyAg ICAgLyogIFRlcm1pbmFsIFJvbGxiYWNrICovCi0jZGVmaW5lICAgICBUVFJfT1ZFUiAgIDAgIC8q ICBSb2xsYmFjayBPdmVyd3JpdGUgKi8KLSNkZWZpbmUgICAgIFRUUl9JTlNFUlQgMSAgLyogIFJv bGxiYWNrIEluc2VydCAqLwotI2RlZmluZSAgICAgVFRSX0tFWVMgICAyICAvKiAgS2V5c3Ryb2tl cyAqLwotI2RlZmluZSAgICAgICBUVFJLX0lHTiAwICAvKiAgICBJZ25vcmUgKi8KLSNkZWZpbmUg ICAgICAgVFRSS19SU1QgMiAgLyogICAgUmVzdG9yZSBhbmQgU2VuZCAqLwotI2RlZmluZSAgICAg ICBUVFJLX1NORCAxICAvKiAgICBTZW5kICovCi0jZGVmaW5lICAgWFlUQ1RTIDE4ICAgICAvKiAg VGVybWluYWwgVHJhbnNtaXQtVGltZW91dCAqLwotI2RlZmluZSAgIFhZVENQRyAxOSAgICAgLyog IFRlcm1pbmFsIENvZGUgUGFnZSAqLwotI2lmZGVmIENPTU1FTlQKLSNkZWZpbmUgICBYWVRIQ1Ug MjAgICAgIC8qICBUZXJtaW5hbCBIaWRlLUN1cnNvciAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8K LSNkZWZpbmUgICBYWVRQQUMgMjEJICAgIC8qICBUZXJtaW5hbCBPdXRwdXQtUGFjaW5nICovCi0j ZGVmaW5lICAgWFlUTU9VIDIyCSAgICAvKiAgVGVybWluYWwgTW91c2UgKi8KLSNlbmRpZiAvKiBP UzIgKi8KLSNkZWZpbmUgICBYWVRISUcgMjMgICAgIC8qICBUZXJtaW5hbCBXaWR0aCAqLwotI2Rl ZmluZSAgIFhZVFdJRCAyNCAgICAgLyogIFRlcm1pbmFsIEhlaWdodCAqLwotI2lmZGVmIE9TMgot I2RlZmluZSAgIFhZVFVQRCAyNSAgICAgLyogIFRlcm1pbmFsIFNjcmVlbi11cGRhdGUgKi8KLSNk ZWZpbmUgICAgVFRVX0ZBU1QgMCAgIC8qICAgICBGQVNUIGJ1dCBqZXJreSAqLwotI2RlZmluZSAg ICBUVFVfU01PT1RIIDEgLyogICAgIFNNT09USCBidXQgc2xvdyAqLwotI2RlZmluZSAgIFhZVEZP TiAyNiAgICAgLyogIFRlcm1pbmFsIEZ1bGwgc2NyZWVuIEZvbnQgKi8KLSNkZWZpbmUgICAgVFRG X1JPTSAgICAwIC8qICAgICBST00gZm9udCAqLwotI2RlZmluZSAgICBUVEZfQ1kxICAgIDEgLyog ICAgIENZUklMTDEgZm9udCAqLwotI2RlZmluZSAgICBUVEZfQ1kyICAgIDIgLyogICAgIENZUklM TDIgZm9udCAqLwotI2RlZmluZSAgICBUVEZfQ1kzICAgIDMgLyogICAgIENZUklMTDMgZm9udCAq LwotI2RlZmluZSAgICBUVEZfMTExICAxMTEgLyogICAgIENQMTExIGZvbnQgKi8KLSNkZWZpbmUg ICAgVFRGXzExMiAgMTEyIC8qICAgICBDUDExMiBmb250ICovCi0jZGVmaW5lICAgIFRURl8xMTMg IDExMyAvKiAgICAgQ1AxMTMgZm9udCAqLwotI2RlZmluZSAgICBUVEZfNDM3ICA0MzcgLyogICAg IENQNDM3IGZvbnQgKi8KLSNkZWZpbmUgICAgVFRGXzg1MCAgODUwIC8qICAgICBDUDg1MCBmb250 ICovCi0jZGVmaW5lICAgIFRURl84NTEgIDg1MSAvKiAgICAgQ1A4NTEgZm9udCAqLwotI2RlZmlu ZSAgICBUVEZfODUyICA4NTIgLyogICAgIENQODUyIGZvbnQgKi8KLSNkZWZpbmUgICAgVFRGXzg1 MyAgODUzIC8qICAgICBDUDg1MyBmb250ICovCi0jZGVmaW5lICAgIFRURl84NjAgIDg2MCAvKiAg ICAgQ1A4NjAgZm9udCAqLwotI2RlZmluZSAgICBUVEZfODYxICA4NjEgLyogICAgIENQODYxIGZv bnQgKi8KLSNkZWZpbmUgICAgVFRGXzg2MiAgODYyIC8qICAgICBDUDg2MiBmb250ICovCi0jZGVm aW5lICAgIFRURl84NjMgIDg2MyAvKiAgICAgQ1A4NjMgZm9udCAqLwotI2RlZmluZSAgICBUVEZf ODY0ICA4NjQgLyogICAgIENQODY0IGZvbnQgKi8KLSNkZWZpbmUgICAgVFRGXzg2NSAgODY1IC8q ICAgICBDUDg2NSBmb250ICovCi0jZGVmaW5lICAgIFRURl84NjYgIDg2NiAvKiAgICAgQ1A4NjYg Zm9udCAqLwotI2RlZmluZSAgICBUVEZfODgwICA4ODAgLyogICAgIENQODgwIGZvbnQgKi8KLSNk ZWZpbmUgICAgVFRGXzg4MSAgODgxIC8qICAgICBDUDg4MSBmb250ICovCi0jZGVmaW5lICAgIFRU Rl84ODIgIDg4MiAvKiAgICAgQ1A4ODIgZm9udCAqLwotI2RlZmluZSAgICBUVEZfODgzICA4ODMg LyogICAgIENQODgzIGZvbnQgKi8KLSNkZWZpbmUgICAgVFRGXzg4NCAgODg0IC8qICAgICBDUDg4 NCBmb250ICovCi0jZGVmaW5lICAgIFRURl84ODUgIDg4NSAvKiAgICAgQ1A4ODUgZm9udCAqLwot I2RlZmluZSAgIFhZVFZDSCAyNyAgICAgLyogU0VUIFRFUk1JTkFMIFZJREVPLUNIQU5HRSAqLwot I2RlZmluZSAgICBUVkNfRElTICAgMCAgLyogICAgIERJU0FCTEVEICovCi0jZGVmaW5lICAgIFRW Q19FTkEgICAxICAvKiAgICAgRU5BQkxFRCAgKi8KLSNkZWZpbmUgICAgVFZDX1c5NSAgIDIgIC8q ICAgICBXSU45NS1TQUZFICovCi0jZW5kaWYgLyogT1MyICovCi0jZGVmaW5lICAgWFlUQVVUT0RM IDI4ICAvKiBTRVQgVEVSTUlOQUwgQVVUT0RPV05MT0FEICovCi0jZGVmaW5lICAgIFRBRF9PRkYg ICAgIDAgLyogICAgT0ZGICovCi0jZGVmaW5lICAgIFRBRF9PTiAgICAgIDEgLyogICAgT04gICov Ci0jZGVmaW5lICAgIFRBRF9LICAgICAgIDIgLyogICAgS0VSTUlUICovCi0jZGVmaW5lICAgIFRB RF9aICAgICAgIDMgLyogICAgWk1PREVNICovCi0jZGVmaW5lICAgIFRBRF9YX1NUUiAgICAgMCAv KiAgICBTVFJJTkcgKi8KLSNkZWZpbmUgICAgVEFEX1hfREVURUNUICAxIC8qICAgIERFVEVDVElP TiAoIFBBQ0tFVCwgU1RSSU5HICkgKi8KLSNkZWZpbmUgICAgVEFEX1hfQzAgICAgICAyIC8qICAg IEMwIENPTkZMSUNUUyAqLwotI2RlZmluZSAgICBUQURfRVJSICAgICA0IC8qICAgIEVSUk9SIHsg U1RPUCwgQ09OVElOVUUgfSAqLwotI2RlZmluZSAgICBUQURfQVNLICAgICA1IC8qICAgIEFTSyAo ZGlhbG9nKSAqLwotI2RlZmluZSAgIFhZVEFVVE9VTCAyOSAgLyogU0VUIFRFUk1JTkFMIEFVVE9V UExPQUQgICAqLwotI2lmZGVmIE9TMgotI2RlZmluZSAgIFhZVEFUVEJVRyAzMCAgLyogU0VUIFRF Uk0gQVRUUi1CVUcgKi8KLSNkZWZpbmUgICBYWVRTVEFUICAgMzEgIC8qIFNFVCBURVJNIFNUQVRV U0xJTkUgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNkZWZpbmUgICBYWVRFU0MgICAgMzIgIC8qIFNF VCBURVJNIEVTQ0FQRS1DSEFSQUNURVIgKi8KLSNkZWZpbmUgICBYWVRDVFJMICAgMzMgIC8qIFNF VCBURVJNIENPTlRST0xTICovCi0jaWZkZWYgT1MyCi0jZGVmaW5lICAgWFlUQVRUUiAgIDM0ICAv KiBTRVQgVEVSTSBBVFRSSUJVVEUgcmVwcmVzZW50YXRpb24gKi8KLSNkZWZpbmUgICBYWVRTR1JD ICAgMzUgIC8qIFNFVCBURVJNIFNHUkNPTE9SUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2RlZmlu ZSAgIFhZVExDUyAgICAzNiAgLyogU0VUIFRFUk0gTE9DQUwtQ0hBUkFDVEVSLVNFVCAqLwotI2Rl ZmluZSAgIFhZVFJDUyAgICAzNyAgLyogU0VUIFRFUk0gUkVNT1RFLUNIQVJBQ1RFUi1TRVQgKi8K LSNkZWZpbmUgICBYWVRVTkkgICAgMzggIC8qIFNFVCBURVJNIFVOSUNPREUgKi8KLSNkZWZpbmUg ICBYWVRLRVkgICAgMzkgIC8qIFNFVCBURVJNIEtFWSAqLwotI2lmZGVmIE9TMgotI2RlZmluZSAg IFhZVFNFTkQgICA0MCAgLyogU0VUIFRFUk0gU0VORC1EQVRBICovCi0jZGVmaW5lICAgWFlUU0VP QiAgIDQxICAvKiBTRVQgVEVSTSBTRU5ELUVORC1PRi1CTE9DSyAqLwotI2RlZmluZSAgIFhZVE1C RUwgICA0MiAgLyogU0VUIFRFUk0gTUFSR0lOLUJFTEwgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNk ZWZpbmUgICBYWVRJRExFICAgNDMgIC8qIFNFVCBURVJNIElETEUtU0VORCAqLwotI2lmZGVmIE9T MgotI2RlZmluZSAgIFhZVEtCTU9EICA0NCAgLyogU0VUIFRFUk0gS0VZQk9BUkQtTU9ERSAqLwot I2RlZmluZSAgIFhZVFVOWCAgICA0NSAgLyogU0VUIFRFUk0gVU5JWC1NT0RFIChERykgKi8KLSNk ZWZpbmUgICBYWVRBU0NSTCAgNDYgIC8qIFNFVCBURVJNIEFVVE9TQ1JPTEwgKi8KLSNkZWZpbmUg ICBYWVRBUEFHRSAgNDcgIC8qIFNFVCBURVJNIEFVVE9QQUdFICovCi0jZW5kaWYgLyogT1MyICov Ci0jZGVmaW5lICAgWFlUUklHR0VSIDQ4ICAvKiBTRVQgVEVSTSBUUklHR0VSICovCi0jaWZkZWYg T1MyCi0jZGVmaW5lICAgWFlUUENURVJNIDQ5ICAvKiBTRVQgVEVSTSBQQ1RFUk0gKi8KLSNkZWZp bmUgICBYWVRPUFRJICAgNTAgIC8qIFNFVCBURVJNIFNDUkVFTi1PUFRJTUlaRSAqLwotI2RlZmlu ZSAgIFhZVFNDTk0gICA1MSAgLyogU0VUIFRFUk0gU0NSRUVOLU1PREUgKERFQ1NDTk0pICovCi0j ZW5kaWYgLyogT1MyICovCi0jZGVmaW5lICAgWFlUUFJOICAgIDUyICAvKiBTRVQgVEVSTSBQUklO VCB7QVVUTywgQ09QWSwgT0ZGfSAqLwotI2lmZGVmIE9TMgotI2RlZmluZSAgIFhZVFNBQyAgICA1 MyAgLyogU0VUIFRFUk0gU1BBQ0lORy1BVFRSSUJVVEUtQ0hBUkFDVEVSIChpbnYpICovCi0jZGVm aW5lICAgWFlUU05JUE0gIDU0ICAvKiBTRVQgVEVSTSBTTkktQVVUT1JPTEwgKi8KLSNkZWZpbmUg ICBYWVRTTklTTSAgNTUgIC8qIFNFVCBURVJNIFNOSS1TQ1JPTExNT0RFICovCi0jZGVmaW5lICAg WFlUS0JER0wgIDU2ICAvKiBTRVQgVEVSTSBLQkQtRk9MTE9XUy1HTC9HUiAqLwotI2RlZmluZSAg IFhZVFZUTE5HICA1NyAgLyogU0VUIFRFUk0gVlQtTEFOR1VBR0UgKi8KLSNkZWZpbmUgICAgIFZU TF9OT1JUSF9BTSAgMQotI2RlZmluZSAgICAgVlRMX0JSSVRJU0ggICAyCi0jZGVmaW5lICAgICBW VExfQkVMR0lBTiAgIDMKLSNkZWZpbmUgICAgIFZUTF9GUl9DQU4gICAgNAotI2RlZmluZSAgICAg VlRMX0RBTklTSCAgICA1Ci0jZGVmaW5lICAgICBWVExfRklOTklTSCAgIDYKLSNkZWZpbmUgICAg IFZUTF9HRVJNQU4gICAgNwotI2RlZmluZSAgICAgVlRMX0RVVENIICAgICA4Ci0jZGVmaW5lICAg ICBWVExfSVRBTElBTiAgIDkKLSNkZWZpbmUgICAgIFZUTF9TV19GUiAgICAxMAotI2RlZmluZSAg ICAgVlRMX1NXX0dSICAgIDExCi0jZGVmaW5lICAgICBWVExfU1dFRElTSCAgMTIKLSNkZWZpbmUg ICAgIFZUTF9OT1JXRUdJQSAxMwotI2RlZmluZSAgICAgVlRMX0ZSRU5DSCAgIDE0Ci0jZGVmaW5l ICAgICBWVExfU1BBTklTSCAgMTUKLSNkZWZpbmUgICAgIFZUTF9QT1JUVUdFUyAxNgotI2RlZmlu ZSAgICAgVlRMX0hFQlJFVyAgIDE5Ci0jZGVmaW5lICAgICBWVExfR1JFRUsgICAgMjIKLSNkZWZp bmUgICAgIFZUTF9DQU5BRElBTiAyOAotI2RlZmluZSAgICAgVlRMX1RVUktfUSAgIDI5Ci0jZGVm aW5lICAgICBWVExfVFVSS19GICAgMzAKLSNkZWZpbmUgICAgIFZUTF9IVU5HQVJJQSAzMQotI2Rl ZmluZSAgICAgVlRMX1NMT1ZBSyAgIDMzCi0jZGVmaW5lICAgICBWVExfQ1pFQ0ggICAgMzQKLSNk ZWZpbmUgICAgIFZUTF9QT0xJU0ggICAzNQotI2RlZmluZSAgICAgVlRMX1JPTUFOSUFOIDM2Ci0j ZGVmaW5lICAgICBWVExfU0NTICAgICAgMzgKLSNkZWZpbmUgICAgIFZUTF9SVVNTSUFOICAzOQot I2RlZmluZSAgICAgVlRMX0xBVElOX0FNIDQwCi0jZGVmaW5lICAgWFlUVlROUkMgIDU4ICAvKiBT RVQgVEVSTSBWVC1OUkMtTU9ERSAqLwotI2RlZmluZSAgIFhZVFNOSUNDICA1OSAgLyogU0VUIFRF Uk0gU05JLUNILkNPREUgKi8KLSNkZWZpbmUgICBYWVRTTklGViAgNjAgIC8qIFNFVCBURVJNIFNO SS1GSVJNV0FSRS1WRVJTSU9OUyAqLwotI2RlZmluZSAgIFhZVFVSTEhJICA2MSAgLyogU0VUIFRF Uk0gVVJMLUhJR0hMSUdIVCAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2RlZmluZSAgIFhZVElUTU8g ICA2MiAgLyogU0VUIFRFUk0gSURMRS1USU1FT1VUICovCi0jZGVmaW5lICAgWFlUSUFDVCAgIDYz ICAvKiBTRVQgVEVSTSBJRExFLUFDVElPTiAgKi8KLSNkZWZpbmUgICBYWVRMU1AgICAgNjQgIC8q IFNFVCBURVJNIExJTkUtU1BBQ0lORyAqLwotI2RlZmluZSAgIFhZVExGRCAgICA2NQkvKiBTRVQg VEVSTSBMRi1ESVNQTEFZICAgKi8KLQotI2RlZmluZSBYWUFUVFIgMzQgICAgICAgLyogQXR0cmli dXRlIHBhY2tldHMgICovCi0jZGVmaW5lIFhZU0VSViAzNQkvKiBTZXJ2ZXIgcGFyYW1ldGVycyAg Ki8KLSNkZWZpbmUgICBYWVNFUlQgMCAgICAgIC8qICBTZXJ2ZXIgdGltZW91dCAgICAqLwotI2Rl ZmluZSAgIFhZU0VSRCAxCS8qICBTZXJ2ZXIgZGlzcGxheSAgICAqLwotI2RlZmluZSAgIFhZU0VS SSAyICAgICAgLyogIFNlcnZlciBpZGxlICAgICAgICovCi0jZGVmaW5lICAgWFlTRVJQIDMJLyog IFNlcnZlciBnZXQtcGF0aCAgICovCi0jZGVmaW5lICAgWFlTRVJMIDQJLyogIFNlcnZlciBsb2dp biAgICAgICovCi0jZGVmaW5lICAgWFlTRVJDIDUJLyogIFNlcnZlciBDRC1NZXNzYWdlICovCi0j ZGVmaW5lICAgWFlTRVJLIDYJLyogIFNlcnZlciBrZWVwYWxpdmUgICovCi0jZGVmaW5lIFhZV0lO RCAzNiAgICAgICAvKiBXaW5kb3cgc2l6ZSAqLwotI2RlZmluZSBYWVhGRVIgMzcgICAgICAgLyog VHJhbnNmZXIgKi8KLSNkZWZpbmUgICBYWVhfQ0FOIDAJLyogICBDYW5jZWxsYXRpb24gICovCi0j ZGVmaW5lICAgWFlYX0NTRSAxCS8qICAgQ2hhcmFjdGVyLVNldCAqLwotI2RlZmluZSAgIFhZWF9M U0ggMgkvKiAgIExvY2tpbmctU2hpZnQgKi8KLSNkZWZpbmUgICBYWVhfUFJPIDMJLyogICBQcm90 b2NvbCAgICAgICovCi0jZGVmaW5lICAgWFlYX01PRCA0CS8qICAgTW9kZSAgICAgICAgICAqLwot I2RlZmluZSAgIFhZWF9ESVMgNQkvKiAgIERpc3BsYXkgICAgICAgKi8KLSNkZWZpbmUgICBYWVhf U0xPIDYJLyogICBTbG93LXN0YXJ0ICAgICovCi0jZGVmaW5lICAgWFlYX0NSQyA3CS8qICAgQ1JD IGNhbGN1bGF0aW9uICovCi0jZGVmaW5lICAgWFlYX0JFTCA4CS8qICAgQmVsbCAqLwotI2RlZmlu ZSAgIFhZWF9QSVAgOQkvKiAgIFBpcGVzICovCi0jZGVmaW5lICAgWFlYX0lOVCAxMCAgICAvKiAg IEludGVycnVwdGlvbiAqLwotI2RlZmluZSAgIFhZWF9YTEEgMTEgICAgLyogICAoY2hhcmFjdGVy LXNldCkgVHJhbnNsYXRpb24gT24vT2ZmICovCi0jZGVmaW5lICAgWFlYX01TRyAxMgkvKiAgIE1l c3NhZ2UgKi8KLSNkZWZpbmUgICBYWVhfUlBUIDEzCS8qICAgUmVwb3J0ICovCi0jZGVmaW5lIFhZ TEFORyAzOCAgICAgICAvKiBMYW5ndWFnZSAqLwotI2RlZmluZSBYWUNPVU4gMzkgICAgICAgLyog Q291bnQgKi8KLSNkZWZpbmUgWFlUQUtFIDQwICAgICAgIC8qIFRha2UgKi8KLSNkZWZpbmUgWFlV TkNTIDQxICAgICAgIC8qIFVua25vd24tY2hhcmFjdGVyLXNldCAqLwotI2RlZmluZSBYWUtFWSAg NDIgICAgICAgLyogS2V5ICovCi0jZGVmaW5lIFhZTUFDUiA0MyAgICAgICAvKiBNYWNybyAqLwot I2RlZmluZSBYWUhPU1QgNDQgICAgICAgLyogSG9zdG5hbWUgb24gbmV0d29yayAqLwotI2RlZmlu ZSBYWU5FVCAgNDUgICAgICAgLyogU0VUIE5FVFdPUksgdGhpbmdzICovCi0KLSNkZWZpbmUgWFlO RVRfRCA5OQkvKiBORVRXT1JLIERJUkVDVE9SWSAqLwotI2RlZmluZSBYWU5FVF9UIDEwMAkvKiBO RVRXT1JLIFRZUEUgKi8KLQotI2RlZmluZSBYWUNBUlIgNDYJLyogQ2FycmllciAqLwotI2RlZmlu ZSBYWVhNSVQgNDcgICAgICAgLyogVHJhbnNtaXQgKi8KLQotI2RlZmluZSBYWURJQUwgNDggICAg ICAgLyogRGlhbCBvcHRpb25zICovCi0KLS8qIEFuZCBub3cgd2UgaW50ZXJydXB0IHRoZSBmbG93 IHRvIGJyaW5nIHlvdSBsb3RzIG9mIHN0dWZmIGFib3V0IGRpYWxpbmcgKi8KLQotI2lmbmRlZiBN QVhUT0xMRlJFRQkvKiBNYXhpbXVtIG51bWJlciBvZiB0b2xsLWZyZWUgYXJlYSBjb2RlcyAqLwot I2RlZmluZSBNQVhUT0xMRlJFRSA4Ci0jZW5kaWYgLyogTUFYVE9MTEZSRUUgKi8KLQotI2lmbmRl ZiBNQVhUUENDCQkvKiBNYXhpbXVtIFRvbmUgb3IgUHVsc2UgZGlhbGluZyBjb3VudHJpZXMgKi8K LSNkZWZpbmUgTUFYVFBDQyAxNjAKLSNlbmRpZiAvKiBNQVhUUENDICovCi0KLSNpZm5kZWYgTUFY UEJYRVhDSAkvKiBNYXhpbXVtIG51bWJlciBvZiBQQlggZXhjaGFuZ2VzICovCi0jZGVmaW5lIE1B WFBCWEVYQ0ggOAotI2VuZGlmIC8qIE1BWFBCWEVYQ0ggKi8KLQotI2lmbmRlZiBNQVhMT0NBTEFD Ci0jZGVmaW5lIE1BWExPQ0FMQUMgMzIKLSNlbmRpZiAvKiBNQVhMT0NBTEFDICovCi0KLSNpZm5k ZWYgTUFYRE5VTVMKLSNpZmRlZiBCSUdCVUZPSwotI2RlZmluZSBNQVhERElSIDMyCS8qIE1heGlt dW0gbnVtYmVyIG9mIGRpYWxpbmcgZGlyZWN0b3JpZXMgKi8KLSNkZWZpbmUgTUFYRE5VTVMgNDA5 NQkvKiBNYXggbnVtYmVycyB0byBmZXRjaCBmcm9tIGRpYWxpbmcgZGlyZWN0b3JpZXMgKi8KLSNl bHNlCi0jZGVmaW5lIE1BWERESVIgMTIKLSNkZWZpbmUgTUFYRE5VTVMgMTAyNAotI2VuZGlmIC8q IEJJR0JVRk9LICovCi0jZW5kaWYgLyogTUFYRE5VTVMgKi8KLS8qCi0gIElNUE9SVEFOVDogSW4g NUEoMTkyKSwgdGhlIG9sZCBTRVQgRElBTCBjb21tYW5kIHdhcyBzcGxpdCBpbnRvIHR3byBjb21t YW5kczoKLSAgU0VUIE1PREVNIChmb3IgbW9kZW0tcmVsYXRlZCBwYXJhbWV0ZXJzKSBhbmQgU0VU IERJQUwgKGZvciBkaWFsaW5nIGl0ZW1zKS4KLSAgVG8gcHJlc2VydmUgdGhlIG9sZCBmb3JtYXRz LCBldGMsIGludmlzaWJseSB3ZSBrZWVwIG9uZSBzeW1ib2wgc3BhY2UgZm9yCi0gIGJvdGggY29t bWFuZHMuCi0qLwotI2RlZmluZSAgWFlESFVQICAwCS8qICAgRGlhbCBIYW5ndXAgKi8KLSNkZWZp bmUgIFhZRElOSSAgMSAgICAgIC8qICAgTU9ERU0gKGRpYWwpIEluaXRpYWxpemF0aW9uIHN0cmlu ZyAqLwotI2RlZmluZSAgWFlES1NQICAyICAgICAgLyogICBNT0RFTSAoZGlhbCkgS2VybWl0LVNw b29mICovCi0jZGVmaW5lICBYWURUTU8gIDMgICAgICAvKiAgIERpYWwgVGltZW91dCAqLwotI2Rl ZmluZSAgWFlERFBZICA0ICAgICAgLyogICBEaWFsIERpc3BsYXkgKi8KLSNkZWZpbmUgIFhZRFNQ RCAgNSAgICAgIC8qICAgRGlhbCBTcGVlZCBtYXRjaGluZyAqLwotI2RlZmluZSAgWFlETU5QICA2 CS8qICAgTU9ERU0gKGRpYWwpIE1OUCBuZWdvdGlhdGlvbiBlbmFibGVkIChvYnNvbGV0ZSkgKi8K LSNkZWZpbmUgIFhZREVDICAgNwkvKiAgIE1PREVNIChkaWFsKSBlcnJvciBjb3JyZWN0aW9uIGVu YWJsZWQgKi8KLSNkZWZpbmUgIFhZRERDICAgOCAgICAgIC8qICAgTU9ERU0gKGRpYWwpIGNvbXBy ZXNzaW9uIGVuYWJsZWQgKi8KLSNkZWZpbmUgIFhZREhDTSAgOSAgICAgIC8qICAgTU9ERU0gKGRp YWwpIGhhbmd1cC1zdHJpbmcgKG1vdmVkIGVsc2V3aGVyZSkgKi8KLSNkZWZpbmUgIFhZRERJUiAx MAkvKiAgIERpYWwgZGlyZWN0b3J5ICovCi0jZGVmaW5lICBYWURESUEgMTEJLyogICBNT0RFTSAo ZGlhbCkgZGlhbC1jb21tYW5kICovCi0jZGVmaW5lICBYWURNSFUgMTIJLyogICBNT0RFTSBIQU5H VVAgKGRpYWwgbW9kZW0taGFuZ3VwKSAqLwotCi0jaWZuZGVmIERFRk1ESFVQCS8qIERlZmF1bHQg TU9ERU0gSEFOR1VQLU1FVEhPRCAqLwotI2RlZmluZSBERUZNRE1IVVAgMQkvKiAwID0gUlMyMzIs IDEgPSBtb2RlbSBjb21tYW5kICovCi0jZW5kaWYgLyogREVGTURNSFVQICovCi0KLSNkZWZpbmUg IFhZRE5QUiAxMyAgICAgIC8qICAgRGlhbCBQUkVGSVggKi8KLSNkZWZpbmUgIFhZRFNUUiAxNAkv KiAgIE1PREVNIENPTU1BTkQgKGRpYWwgc3RyaW5nKSAuLi4gKi8KLQotI2RlZmluZSAgIFhZRFNf REMgMAkvKiAgICBEYXRhIGNvbXByZXNzaW9uICovCi0jZGVmaW5lICAgWFlEU19FQyAxCS8qICAg IEVycm9yIGNvcnJlY3Rpb24gKi8KLSNkZWZpbmUgICBYWURTX0hVIDIgICAgIC8qICAgIEhhbmd1 cCBjb21tYW5kICovCi0jZGVmaW5lICAgWFlEU19IVyAzICAgICAvKiAgICBIYXJkd2FyZSBmbG93 IGNvbnRyb2wgKi8KLSNkZWZpbmUgICBYWURTX0lOIDQgICAgIC8qICAgIEluaXQtc3RyaW5nICov Ci0jZGVmaW5lICAgWFlEU19ORiA1ICAgICAvKiAgICBObyBmbG93IGNvbnRyb2wgKi8KLSNkZWZp bmUgICBYWURTX1BYIDYgICAgIC8qICAgIFByZWZpeCAobm8sIHRoaXMgZ29lcyBpbiBTRVQgRElB TCkgKi8KLSNkZWZpbmUgICBYWURTX1NXIDcgICAgIC8qICAgIFNvZnR3YXJlIGZsb3cgY29udHJv bCAqLwotI2RlZmluZSAgIFhZRFNfRFQgOCAgICAgLyogICAgVG9uZSBkaWFsaW5nIGNvbW1hbmQg Ki8KLSNkZWZpbmUgICBYWURTX0RQIDkgICAgIC8qICAgIFB1bHNlIGRpYWxpbmcgY29tbWFuZCAq LwotI2RlZmluZSAgIFhZRFNfQU4gMTAgICAgLyogICAgQXV0b2Fuc3dlciAqLwotI2RlZmluZSAg IFhZRFNfUlMgMTEgICAgLyogICAgUmVzZXQgKi8KLSNkZWZpbmUgICBYWURTX01TIDEyICAgIC8q ICAgIERpYWwgbW9kZSBzdHJpbmcgKi8KLSNkZWZpbmUgICBYWURTX01QIDEzICAgIC8qICAgIERp YWwgbW9kZSBwcm9tcHQgKi8KLSNkZWZpbmUgICBYWURTX1NQIDE0CS8qICAgIE1vZGVtIHNwZWFr ZXIgKi8KLSNkZWZpbmUgICBYWURTX1ZPIDE1CS8qICAgIE1vZGVtIHNwZWFrZXIgdm9sdW1lICov Ci0jZGVmaW5lICAgWFlEU19JRCAxNgkvKiAgICBJZ25vcmUgZGlhbHRvbmUgKi8KLSNkZWZpbmUg ICBYWURTX0kyIDE3CS8qICAgIEluaXQgc3RyaW5nICMyICovCi0KLSNkZWZpbmUgICBYWURNX0Eg IDkgICAgIC8qICAgIE1ldGhvZDogQXV0byAqLwotI2RlZmluZSAgIFhZRE1fRCAgMCAgICAgLyog ICAgICBEZWZhdWx0ICovCi0jZGVmaW5lICAgWFlETV9UICAyICAgICAvKiAgICAgIFRvbmUgKi8K LSNkZWZpbmUgICBYWURNX1AgIDMgICAgIC8qICAgICAgUHVsc2UgKi8KLQotI2RlZmluZSAgWFlE RkMgICAxNQkvKiAgIE1PREVNIChkaWFsKSBmbG93LWNvbnRyb2wgKi8KLSNkZWZpbmUgIFhZRE1U SCAgMTYJLyogICBEaWFsIG1ldGhvZCAqLwotI2RlZmluZSAgWFlERVNDICAxNyAgICAgLyogICBN T0RFTSAoZGlhbCkgZXNjYXBlLWNoYXJhY3RlciAqLwotI2RlZmluZSAgWFlETUFYICAxOAkvKiAg IE1PREVNIChkaWFsKSBtYXhpbXVtIGludGVyZmFjZSBzcGVlZCAqLwotI2RlZmluZSAgWFlEQ0FQ ICAxOSAgICAgLyogICBNT0RFTSAoZGlhbCkgY2FwYWJpbGl0aWVzICovCi0jZGVmaW5lICBYWURU WVAgIDIwCS8qICAgTU9ERU0gVFlQRSAqLwotI2RlZmluZSAgWFlESU5UICAyMQkvKiAgIERJQUwg cmV0cmllcyAqLwotI2RlZmluZSAgWFlEUlRNICAyMgkvKiAgIERJQUwgdGltZSBiZXR3ZWVuIHJl dHJpZXMgKi8KLSNkZWZpbmUgIFhZRE5BTSAgMjMJLyogICBNT0RFTSBOQU1FICovCi0jZGVmaW5l ICBYWURMQUMgIDI0CS8qICAgRElBTCAoTE9DQUwtKUFSRUEtQ09ERSAqLwotI2RlZmluZSAgWFlE TUNEICAyNQkvKiAgIE1PREVNIENBUlJJRVIgKi8KLQotI2RlZmluZSAgWFlEQ05GICAyNgkvKiAg IERJQUwgQ09ORklSTUFUSU9OICovCi0jZGVmaW5lICBYWURDVlQgIDI3CS8qICAgRElBTCBDT05W RVJULURJUkVDVE9SWSAqLwotI2RlZmluZSAgWFlESVhQICAyOAkvKiAgIERJQUwgSU5URVJOQVRJ T05BTC1QUkVGSVggKi8KLSNkZWZpbmUgIFhZRElYUyAgMjkJLyogICBESUFMIElOVEVSTkFUSU9O QUwtU1VGRklYICovCi0jZGVmaW5lICBYWURMQ0MgIDMwCS8qICAgRElBTCBMT0NBTC1DT1VOVFJZ LUNPREUgKi8KLSNkZWZpbmUgIFhZRExEUCAgMzEJLyogICBESUFMIExPTkctRElTVEFOQ0UtUFJF RklYICovCi0jZGVmaW5lICBYWURMRFMgIDMyCS8qICAgRElBTCBMT05HLURJU1RBTkNFLVNVRkZJ WCAqLwotI2RlZmluZSAgWFlEUFhYICAzMwkvKiAgIERJQUwgUEJYLUVYQ0hBTkdFICovCi0jZGVm aW5lICBYWURQWEkgIDM0CS8qICAgRElBTCBQQlgtSU5URVJOQUwtUFJFRklYICovCi0jZGVmaW5l ICBYWURQWE8gIDM1CS8qICAgRElBTCBQQlgtT1VUU0lERS1QUkVGSVggKi8KLSNkZWZpbmUgIFhZ RFNGWCAgMzYJLyogICBESUFMIFNVRkZJWCAqLwotI2RlZmluZSAgWFlEU1JUICAzNwkvKiAgIERJ QUwgU09SVCAqLwotI2RlZmluZSAgWFlEVEZDICAzOAkvKiAgIERJQUwgVE9MTC1GUkVFLUFSRUEt Q09ERSAqLwotI2RlZmluZSAgWFlEVEZQICAzOQkvKiAgIERJQUwgVE9MTC1GUkVFLVBSRUZJWCAq LwotI2RlZmluZSAgWFlEVEZTICA0MAkvKiAgIERJQUwgVE9MTC1GUkVFLVNVRkZJWCAqLwotI2Rl ZmluZSAgWFlEQ09OICA0MSAgICAgLyogICBESUFMIENPTk5FQ1QgKi8KLSNkZWZpbmUgIFhZRFJT VFIgNDIgICAgIC8qICAgRElBTCBSRVNUUklDVCAqLwotI2RlZmluZSAgWFlEUlNFVCA0MyAgICAg LyogICBNT0RFTSBSRVNFVCAqLwotI2RlZmluZSAgWFlETENQICA0NAkvKiAgIERJQUwgTE9DQUwt UFJFRklYICovCi0jZGVmaW5lICBYWURMQ1MgIDQ1CS8qICAgRElBTCBMT0NBTC1TVUZGSVggKi8K LSNkZWZpbmUgIFhZRExMQUMgNDYgICAgIC8qICAgRElBTCBMQy1BUkVBLUNPREVTICovCi0jZGVm aW5lICBYWURGTEQgIDQ3CS8qICAgRElBTCBGT1JDRSBMT05HLURJU1RBTkNFICovCi0jZGVmaW5l ICBYWURTUEsgIDQ4CS8qICAgTU9ERU0gU1BFQUtFUiAqLwotI2RlZmluZSAgWFlEVk9MICA0OQkv KiAgIE1PREVNIFZPTFVNRSAqLwotI2RlZmluZSAgWFlESURUICA1MAkvKiAgIElHTk9SRSBESUFM VE9ORSAqLwotI2RlZmluZSAgWFlEUEFDICA1MQkvKiAgIFBBQ0lORyAqLwotI2RlZmluZSAgWFlE TUFDICA1MiAgICAgLyogICBNQUNSTyAqLwotI2RlZmluZSAgWFlEUFVDQyA1MwkvKiAgIFBVTFNF LUNPVU5UUklFUyAqLwotI2RlZmluZSAgWFlEVE9DQyA1NAkvKiAgIFRPTkUtQ09VTlRSSUVTICov Ci0jZGVmaW5lICBYWURURVNUIDU1CS8qICAgVEVTVCAqLwotCi0jZGVmaW5lIFhZQV9DSUQgICAx CS8qIFNFVCBBTlNXRVIgQ0FMTEVSLUlEICovCi0jZGVmaW5lIFhZQV9STkcgICAyCS8qIFNFVCBB TlNXRVIgUklOR1MgKi8KLQotI2RlZmluZSBYWVNFU1MgNDkgICAgICAgLyogU0VUIFNFU1NJT04g b3B0aW9ucyAqLwotI2RlZmluZSBYWUJVRiAgNTAgICAgICAgLyogQnVmZmVyIGxlbmd0aCAqLwot I2RlZmluZSBYWUJBQ0sgNTEJLyogQmFja2dyb3VuZCAqLwotI2RlZmluZSBYWURGTFQgNTIgICAg ICAgLyogRGVmYXVsdCAqLwotI2RlZmluZSBYWURCTCAgNTMJLyogRG91YmxlICovCi0jZGVmaW5l IFhZQ01EICA1NCAgICAgICAvKiBDT01NQU5EICovCi0jZGVmaW5lIFhZQ0FTRSA1NSAgICAgICAv KiBDYXNlICovCi0jZGVmaW5lIFhZQ09NUCA1NiAgICAgICAvKiBDb21wcmVzc2lvbiAqLwotI2Rl ZmluZSBYWVgyNSAgNTcgICAgICAgLyogWC4yNSBwYXJhbWV0ZXIgKEFOWVgyNSkgKi8KLSNkZWZp bmUgWFlQQUQgIDU4ICAgICAgIC8qIFguMyBQQUQgcGFyYW1ldGVyIChBTllYMjUpICovCi0jZGVm aW5lIFhZV0lMRCA1OSAgICAgICAvKiBXaWxkY2FyZCBleHBhbnNpb24gbWV0aG9kICovCi0KLSNk ZWZpbmUgV0lMRF9PRkYgIDAJLyogV2lsZGNhcmQgZXhwYW5zaW9uIG9mZiAqLwotI2RlZmluZSBX SUxEX09OICAgMQkvKiBXaWxkY2FyZCBleHBhbnNpb24gb24gICovCi0jZGVmaW5lIFdJTERfS0VS ICAyCS8qIFdpbGRjYXJkIGV4cGFuc2lvbiBieSBLZXJtaXQgKi8KLSNkZWZpbmUgV0lMRF9TSEUg IDMJLyogV2lsZGNhcmQgZXhwYW5zaW9uIGJ5IFNoZWxsICovCi0KLSNkZWZpbmUgWFlTVVNQIDYw ICAgICAgIC8qIFN1c3BlbmQgKi8KLSNkZWZpbmUgWFlNQUlMIDYxCS8qIE1haWwtQ29tbWFuZCAq LwotI2RlZmluZSBYWVBSSU4gNjIJLyogUHJpbnQtQ29tbWFuZCAqLwotI2RlZmluZSBYWVFVSUUg NjMJLyogUXVpZXQgKi8KLSNkZWZpbmUgWFlMQ0xFIDY0CS8qIExvY2FsLWVjaG8gKi8KLSNkZWZp bmUgWFlTQ1JJIDY1CS8qIFNDUklQVCBjb21tYW5kIHBhcmFtZXRlcnMgKi8KLSNkZWZpbmUgWFlN U0dTIDY2ICAgICAgIC8qIE1FU1NBR0VzIE9OL09GRiAqLwotI2lmZGVmIFROQ09ERQotI2RlZmlu ZSBYWVRFTCAgNjcJLyogU0VUIFRFTE5FVCBwYXJhbWV0ZXJzICovCi0jZGVmaW5lICBDS19UTl9F QyAwCS8qICBURUxORVQgRUNITyAqLwotI2RlZmluZSAgQ0tfVE5fVFQgMQkvKiAgVEVMTkVUIFRF Uk1JTkFMLVRZUEUgKi8KLSNkZWZpbmUgIENLX1ROX05MIDIgICAgIC8qICBURUxORVQgTkVXTElO RS1NT0RFICovCi0jZGVmaW5lICBDS19UTl9CTSAzICAgICAvKiAgVEVMTkVUIEJJTkFSWS1NT0RF ICovCi0jZGVmaW5lICBDS19UTl9CVUcgNCAgICAvKiAgVEVMTkVUIEJVRyAqLwotI2RlZmluZSAg Q0tfVE5fRU5WIDUgICAgLyogIFRFTE5FVCBFTlZJUk9OTUVOVCAqLwotI2RlZmluZSAgICBUTl9F TlZfVVNSICAwIC8qICAgIFZBUiBVU0VSICovCi0jZGVmaW5lICAgIFROX0VOVl9KT0IgIDEgLyog ICAgVkFSIEpPQiAqLwotI2RlZmluZSAgICBUTl9FTlZfQUNDVCAyIC8qICAgIFZBUiBBQ0NUICov Ci0jZGVmaW5lICAgIFROX0VOVl9QUk5UIDMgLyogICAgVkFSIFBSSU5URVIgKi8KLSNkZWZpbmUg ICAgVE5fRU5WX1NZUyAgNCAvKiAgICBWQVIgU1lTVEVNVFlQRSAqLwotI2RlZmluZSAgICBUTl9F TlZfRElTUCA1IC8qICAgIFZBUiBESVNQTEFZICovCi0jZGVmaW5lICAgIFROX0VOVl9VVkFSIDYg LyogICAgVVNFUlZBUiAqLwotI2RlZmluZSAgICBUTl9FTlZfTE9DICA3IC8qICAgIFVTRVJWQVIg TE9DQVRJT04gKi8KLSNkZWZpbmUgICAgVE5fRU5WX09OICA5OCAvKiAgICBPTiAoZW5hYmxlZCkg Ki8KLSNkZWZpbmUgICAgVE5fRU5WX09GRiA5OSAvKiAgICBPRkYgKGRpc2FibGVkKSAqLwotI2Rl ZmluZSAgQ0tfVE5fTE9DIDYgICAgLyogIFRFTE5FVCBMT0NBVElPTiAqLwotI2RlZmluZSAgQ0tf VE5fQVUgIDcgICAgLyogIFRFTE5FVCBBVVRIRU5USUNBVElPTiAqLwotI2RlZmluZSAgICBUTl9B VV9GV0QgICA0IC8qICAgIEFVVEggRk9SV0FSRCAqLwotI2RlZmluZSAgICBUTl9BVV9UWVAgICA1 IC8qICAgIEFVVEggVFlQRSAqLwotI2RlZmluZSAgICAgIEFVVEhfTk9ORSAwIC8qICAgICAgQVVU SCBOT05FICovCi0jZGVmaW5lICAgICAgQVVUSF9LUkI0IDEgLyogICAgICBBVVRIIEtlcmJlcm9z IElWICovCi0jZGVmaW5lICAgICAgQVVUSF9LUkI1IDIgLyogICAgICBBVVRIIEtlcmJlcm9zIFYg Ki8KLSNkZWZpbmUgICAgICBBVVRIX1NTTCAgNyAvKiAgICAgIEFVVEggU2VjdXJlIFNvY2tldHMg TGF5ZXIgKi8KLSNkZWZpbmUgICAgICBBVVRIX1RMUyA5OCAvKiAgICAgIEFVVEggVHJhbnNwb3J0 IExheWVyIFNlY3VyaXR5ICovCi0jZGVmaW5lICAgICAgQVVUSF9TUlAgIDUgLyogICAgICBBVVRI IFNlY3VyZSBSZW1vdGUgUGFzc3dvcmQgKi8KLSNkZWZpbmUgICAgICBBVVRIX05UTE0gMTUgLyog ICAgICBBVVRIIE5UIExhbiBNYW5hZ2VyICovCi0jZGVmaW5lICAgICAgQVVUSF9BVVRPIDk5IC8q ICAgICBBVVRIIEFVVE9NQVRJQyAqLwotI2RlZmluZSAgICBUTl9BVV9IT1cgIDggIC8qICAgIEFV VEggSE9XIEZMQUcgKi8KLSNkZWZpbmUgICAgVE5fQVVfRU5DICA5ICAvKiAgICBBVVRIIEVOQ1JZ UFQgRkxBRyAqLwotI2RlZmluZSAgQ0tfVE5fRU5DIDggICAgLyogIFRFTE5FVCBFTkNSWVBUSU9O ICovCi0jZGVmaW5lICAgIFROX0VOX1RZUCAgIDQgLyogICAgICBFTkNSWVBUIFRZUEUgKi8KLSNk ZWZpbmUgICAgVE5fRU5fU1RBUlQgNSAvKiAgICAgIEVOQ1JZUFQgU1RBUlQgKi8KLSNkZWZpbmUg ICAgVE5fRU5fU1RPUCAgNiAvKiAgICAgIEVOQ1JZUFQgU1RPUCAgKi8KLSNkZWZpbmUgIENLX1RO X0lLUyA5ICAgIC8qICBURUxORVQgS0VSTUlULVNFUlZFUiAqLwotI2RlZmluZSAgQ0tfVE5fUkUg IDEwICAgLyogIFRFTE5FVCBSRU1PVEUtRUNITyAqLwotI2RlZmluZSAgQ0tfVE5fVExTIDExICAg LyogIFRFTE5FVCBTVEFSVF9UTFMgKi8KLSNkZWZpbmUgIENLX1ROX1hEICAxMiAgIC8qICBURUxO RVQgWERJU1BMT0MgKi8KLSNkZWZpbmUgIENLX1ROX05BV1MgMTMgIC8qICBURUxORVQgTkFXUyAq LwotI2RlZmluZSAgQ0tfVE5fV0FJVCAxNCAgLyogIFRFTE5FVCBXQUlULUZPUi1ORUdPVElBVElP TlMgKi8KLSNkZWZpbmUgIENLX1ROX1NHQSAgMTUgIC8qICBURUxORVQgU0dBICovCi0jZGVmaW5l ICBDS19UTl9DTElFTlQgMTYgIC8qIFRFTE5FVCBDTElFTlQgKi8KLSNkZWZpbmUgIENLX1ROX1NF UlZFUiAxNyAgLyogVEVMTkVUIFNFUlZFUiAqLwotI2RlZmluZSAgQ0tfVE5fUEhSICAgIDE4ICAv KiBURUxORVQgUFJBR01BLUhFQVJUQkVBVCAqLwotI2RlZmluZSAgQ0tfVE5fUExHICAgIDE5ICAv KiBURUxORVQgUFJBR01BLUxPR09OICovCi0jZGVmaW5lICBDS19UTl9QU1AgICAgMjAgIC8qIFRF TE5FVCBQUkFHTUEtU1NQSSAqLwotI2RlZmluZSAgQ0tfVE5fU0FLICAgIDIxICAvKiBURUxORVQg SUJNIFNBSyAqLwotI2RlZmluZSAgQ0tfVE5fRkxXICAgIDIyICAvKiBURUxORVQgTEZMT1cgKi8K LSNkZWZpbmUgIENLX1ROX1hGICAgICAyMyAgLyogVEVMTkVUIFRSQU5TRkVSLU1PREUgKi8KLSNk ZWZpbmUgIENLX1ROX1BVSUQgICAyNCAgLyogVEVMTkVUIFBST01QVC1GT1ItVVNFUklEICovCi0j ZGVmaW5lICBDS19UTl9ORSAgICAgMjUgIC8qIFRFTE5FVCBOTy1FTkNSWVBULURVUklORy1YRkVS ICovCi0jZGVmaW5lICBDS19UTl9DUEMgICAgMjYgIC8qIFRFTE5FVCBDT00tUE9SVC1DT05UUk9M ICovCi0jZGVmaW5lICBDS19UTl9EQiAgICAgMjcgIC8qIFRFTE5FVCBERUJVRyAqLwotI2RlZmlu ZSAgQ0tfVE5fRlggICAgIDI4ICAvKiBURUxORVQgRk9SV0FSRF9YICovCi0jZGVmaW5lICBDS19U Tl9ETCAgICAgMjkgIC8qIFRFTE5FVCBERUxBWS1TQiAqLwotI2RlZmluZSAgQ0tfVE5fU0ZVICAg IDMwICAvKiBURUxORVQgU0ZVLUNPTVBBVElCSUxJVFkgKi8KLSNkZWZpbmUgIENLX1ROX0xPRyAg ICAzMSAgLyogVEVMTkVUIExPR09VVCAqLwotI2VuZGlmIC8qIFROQ09ERSAqLwotI2RlZmluZSBY WU9VVFAgNjgJLyogT1VUUFVUIGNvbW1hbmQgcGFyYW1ldGVycyAqLwotI2RlZmluZSAgIE9VVF9Q QUMgMAkvKiAgIE9VVFBVVCBQQUNJTkcgKi8KLSNkZWZpbmUgICBPVVRfRVNDIDEJLyogICBPVVRQ VVQgU1BFQ0lBTC1FU0NBUEVTICovCi0jZGVmaW5lIFhZRVhJVCAgNjkJLyogU0VUIEVYSVQgKi8K LSNkZWZpbmUgWFlQUlRSICA3MAkvKiBTRVQgUFJJTlRFUiAqLwotI2RlZmluZSBYWUZQQVRIIDcx CS8qIFBBVEhOQU1FICovCi0KLSNpZmRlZiBPUzIKLSNkZWZpbmUgWFlNT1VTRSA3MgkvKiBNT1VT RSBTVVBQT1JUICovCi0jZGVmaW5lICBYWU1fT04gICAgIDAgICAvKiBNb3VzZSBPTi9PRkYgICAg ICAgICovCi0jZGVmaW5lICBYWU1fQlVUVE9OIDEgICAvKiBEZWZpbmUgTW91c2UgRXZlbnRzICov Ci0jZGVmaW5lICBYWU1fQ0xFQVIgIDIgICAvKiBDbGVhciBNb3VzZSBFdmVudHMgICovCi0jZGVm aW5lICBYWU1fREVCVUcgIDMgICAvKiBEZWJ1ZyBNb2RlIE9OL09GRiAqLwotLyogVGhlc2UgbXVz dCBtYXRjaCBzaW1pbGFyIGRlZmluaXRpb25zIGluIGNrb2tleS5oICovCi0jZGVmaW5lICAgWFlN X0IxIDAgICAgICAvKiBNb3VzZSBCdXR0b24gT25lICovCi0jZGVmaW5lICAgWFlNX0IyIDEgICAg ICAvKiBNb3VzZSBCdXR0b24gVHdvICovCi0jZGVmaW5lICAgWFlNX0IzIDIgICAgICAvKiBNb3Vz ZSBCdXR0b24gVGhyZWUgKi8KLSNkZWZpbmUgICBYWU1fQUxUICAgMSAgICAgLyogQWx0ICovCi0j ZGVmaW5lICAgWFlNX0NUUkwgIDIgICAgIC8qIEN0cmwgKi8KLSNkZWZpbmUgICBYWU1fU0hJRlQg NCAgICAgLyogU2hpZnQgKi8KLSNkZWZpbmUgICBYWU1fQzEgICAgMCAgICAgLyogU2luZ2xlIENs aWNrICovCi0jZGVmaW5lICAgWFlNX0MyICAgIDggICAgIC8qIERvdWJsZSBDbGljayAqLwotI2Rl ZmluZSAgIFhZTV9EUkFHICAxNiAgICAvKiBEcmFnIEV2ZW50ICovCi0jZW5kaWYgLyogT1MyICov Ci0KLSNkZWZpbmUgWFlCRUxMIDczICAgLyogQkVMTCAqLwotCi0jaWZkZWYgT1MyCi0jZGVmaW5l IFhZUFJUWSAgICAgNzQgICAvKiBUaHJlYWQgUHJpb3JpdHkgTGV2ZWwgKi8KLSNkZWZpbmUgICBY WVBfSURMRSAgMQotI2RlZmluZSAgIFhZUF9SRUcgICAyCi0jZGVmaW5lICAgWFlQX1NSViAgIDQK LSNkZWZpbmUgICBYWVBfUlRQICAgMwotI2VuZGlmIC8qIE9TMiAqLwotCi0jZGVmaW5lIFhZQUxS TSAgICAgNzUJLyogU0VUIEFMQVJNICovCi0jZGVmaW5lIFhZUFJPVE8gICAgNzYJLyogU0VUIFBS T1RPQ09MICovCi0jZGVmaW5lIFhZUFJFRklYICAgNzcgICAvKiBTRVQgUFJFRklYSU5HICovCi0j ZGVmaW5lIFhZTE9HSU4gICAgNzggICAvKiBMb2dpbiBpbmZvIGZvciBzY3JpcHQgcHJvZ3JhbXMu Li4gKi8KLQotI2RlZmluZSAgTE9HSV9VSUQgICAwCS8qIFVzZXIgSUQgICovCi0jZGVmaW5lICBM T0dJX1BTVyAgIDEJLyogUGFzc3dvcmQgKi8KLSNkZWZpbmUgIExPR0lfUFJNICAgMgkvKiBQcm9t cHQgICAqLwotCi0jZGVmaW5lIFhZU1RBUlRVUCAgNzkgICAgLyogU3RhcnR1cCBmaWxlICovCi0j ZGVmaW5lIFhZVE1QRElSICAgODAgICAgLyogVGVtcG9yYXJ5IGRpcmVjdG9yeSAqLwotCi0jaWZk ZWYgT1MyCi0jZGVmaW5lIFhZVEFQSSAgICAgODEgICAgLyogTWljcm9zb2Z0IFRlbGVwaG9uZSBB UEkgb3B0aW9ucyAqLwotI2RlZmluZSAgIFhZVEFQSV9DRkcgICAgIDEgIC8qIFRBUEkgQ29uZmln dXJlLUxpbmUgRGlhbG9nICovCi0jZGVmaW5lICAgWFlUQVBJX0RJQUwgICAgMiAgLyogVEFQSSBE aWFsaW5nLVByb3BlcnRpZXMgRGlhbG9nICovCi0jZGVmaW5lICAgWFlUQVBJX0xJTiAgICAgMyAg LyogVEFQSSBMaW5lICovCi0jZGVmaW5lICAgWFlUQVBJX0xPQyAgICAgNCAgLyogVEFQSSBMb2Nh dGlvbiAqLwotI2RlZmluZSAgIFhZVEFQSV9QQVNTICAgIDUgIC8qIFRBUEkgUGFzc3Rocm91Z2gg Ki8KLSNkZWZpbmUgICBYWVRBUElfQ09OICAgICA2ICAvKiBUQVBJIENvbnZlcnNpb25zICovCi0j ZGVmaW5lICAgWFlUQVBJX0xHSFQgICAgNyAgLyogVEFQSSBNb2RlbSBMaWdodHMgKi8KLSNkZWZp bmUgICBYWVRBUElfUFJFICAgICA4ICAvKiBUQVBJIFByZS1kaWFsaW5nIFRlcm1pbmFsICovCi0j ZGVmaW5lICAgWFlUQVBJX1BTVCAgICAgOSAgLyogVEFQSSBQb3N0LWRpYWxpbmcgVGVybWluYWwg Ki8KLSNkZWZpbmUgICBYWVRBUElfSU5BICAgIDEwICAvKiBUQVBJIEluYWN0aXZpdHkgVGltZW91 dCAqLwotI2RlZmluZSAgIFhZVEFQSV9CTkcgICAgMTEgIC8qIFRBUEkgV2FpdCBmb3IgQ3JlZGl0 IENhcmQgVG9uZSAqLwotI2RlZmluZSAgIFhZVEFQSV9NQU4gICAgMTIgIC8qIFRBUEkgTWFudWFs IERpYWxpbmcgKi8KLSNkZWZpbmUgICBYWVRBUElfVVNFICAgIDEzICAvKiBUQVBJIFVzZSBMaW5l IENvbmZpZyBzZXR0aW5ncyAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgVENQU09DS0VU Ci0jZGVmaW5lIFhZVENQICA4MiAgICAgICAvKiBUQ1Agb3B0aW9ucyAqLwotI2RlZmluZSAgWFlU Q1BfTk9ERUxBWSAgIDEgIC8qIE5vIERlbGF5ICovCi0jZGVmaW5lICBYWVRDUF9TRU5EQlVGICAg MiAgLyogU2VuZCBCdWZmZXIgU2l6ZSAqLwotI2RlZmluZSAgWFlUQ1BfTElOR0VSICAgIDMgIC8q IExpbmdlciAqLwotI2RlZmluZSAgWFlUQ1BfUkVDVkJVRiAgIDQgIC8qIFJlY2VpdmUgQnVmZmVy IFNpemUgKi8KLSNkZWZpbmUgIFhZVENQX0tFRVBBTElWRSA1ICAvKiBLZWVwIEFsaXZlIHBhY2tl dHMgKi8KLSNkZWZpbmUgIFhZVENQX1VDWCAgICAgICA2ICAvKiBVQ1ggMi4wIHBvcnQgc3dhYmJp bmcgYnVnICovCi0jZGVmaW5lICBYWVRDUF9OQUdMRSAgICAgNyAgLyogRGVsYXkgLSBpbnZlcnNl IG9mIDEgKi8KLSNkZWZpbmUgIFhZVENQX1JETlMgICAgICA4ICAvKiBSZXZlcnNlIEROUyBsb29r dXAgKi8KLSNkZWZpbmUgIFhZVENQX0FERFJFU1MgICA5ICAvKiBTZXQgcHJlZmVycmVkIElQIEFk ZHJlc3MgKi8KLSNkZWZpbmUgIFhZVENQX0ROU19TUlYgIDEwICAvKiBVc2UgRE5TIFNlcnZpY2Ug UmVjb3JkcyAqLwotI2RlZmluZSAgWFlUQ1BfRE9OVFJPVVRFIDExIC8qIERvbnQgUm91dGUgKi8K LSNkZWZpbmUgIFhZVENQX1NPQ0tTX1NWUiAxMiAvKiBOYW1lIG9mIFNvY2tzIFNlcnZlciAqLwot I2RlZmluZSAgWFlUQ1BfSFRUUF9QUk9YWSAxMyAvKiBOYW1lL1BvcnQgb2YgSFRUUCBQcm94eSBT ZXJ2ZXIgKi8KLSNkZWZpbmUgIFhZVENQX1NPQ0tTX05TICAxNCAvKiBOYW1lIG9mIFNvY2tzIE5h bWUgU2VydmVyICovCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0KLSNpZmRlZiBPUzIKLSNkZWZp bmUgWFlNU0sgIDgzICAgICAgIC8qIE1TLURPUyBLZXJtaXQgY29tcGF0aWJpbGl0eSBvcHRpb25z ICovCi0jZGVmaW5lICBNU0tfQ09MT1IgMCAgICAvKiAgVGVybWluYWwgY29sb3IgaGFuZGxpbmcg ICAqLwotI2RlZmluZSAgTVNLX0tFWVMgIDEgICAgLyogIFNFVCBLRVkgdXNlcyBNU0sga2V5Y29k ZXMgKi8KLSNkZWZpbmUgIE1TS19SRU4gICAyICAgIC8qICBGaWxlIHJlbmFtaW5nIHVzZXMgOC4z IG5vdGF0aW9uIGFsd2F5cyAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0jZGVmaW5lIFhZREVTVCAg ODQJLyogU0VUIERFU1RJTkFUSU9OIGFzIGluIE1TLURPUyBLZXJtaXQgKi8KLQotI2lmZGVmIE9T MgotI2RlZmluZSBYWVdJTjk1IDg1CS8qIFNFVCBXSU45NSB3b3JrIGFyb3VuZHMgICovCi0jZGVm aW5lICAgWFlXS0VZIDAJLyogICAgS2V5Ym9hcmQgdHJhbnNsYXRpb24gKi8KLSNkZWZpbmUgICBY WVdBR1IgMSAgICAgIC8qICAgIEFsdC1HciAgICAgICAgICAgICAgICovCi0jZGVmaW5lICAgWFlX T0lPIDIgICAgICAvKiAgICBPdmVybGFwcGVkIEkvTyAgICAgICAqLwotI2RlZmluZSAgIFhZV0xV QyAzCS8qICAgIEx1Y2lkYSBDb25zb2xlIHN1YnN0aXR1dGlvbnMgKi8KLSNkZWZpbmUgICBYWVdT RUxFQ1QgNCAgIC8qICAgIFNlbGVjdCBvbiBXcml0ZSBCdWcgKi8KLSNkZWZpbmUgICBYWVc4XzMg NSAgICAgIC8qICAgIFVzZSA4LjMgZmlsZW5hbWVzPyAqLwotI2RlZmluZSAgIFhZV1BPUFVQIDYg ICAgLyogICAgVXNlIFBvcHVwcz8gICovCi0jZGVmaW5lICAgWFlXSFNMIDcgICAgICAvKiAgICBI b3J6IFNjYW4gTGluZSBzdWJzdGl0dXRpb25zICovCi0jZGVmaW5lIFhZRExSICAgODYgCS8qIFNF VCBLOTUgRElBTEVSIHdvcmsgYXJvdW5kcyAqLwotI2RlZmluZSBYWVRJVExFIDg3CS8qIFNFVCBU SVRMRSBvZiB3aW5kb3cgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2RlZmluZSBYWUlHTiAgIDg4 CS8qIFNFVCBJR05PUkUtQ0hBUkFDVEVSICovCi0jZGVmaW5lIFhZRURJVCAgODkgICAgICAvKiBT RVQgRURJVE9SICovCi0jZGVmaW5lIFhZRkxUUiAgOTAgICAgICAvKiBTRVQgeyBTRU5ELCBSRUNF SVZFIH0gRklMVEVSICovCi0jZGVmaW5lIFhZQlJPV1NFIDkxICAgICAvKiBTRVQgQlJPV1NFUiAq LwotI2RlZmluZSBYWUVPRiAgICA5MiAgICAgLyogRU9GICg9IEZJTEUgRU9GKSAqLwotI2lmZGVm IE9TMgotI2RlZmluZSBYWUJEQ1AgICA5MyAgICAgLyogQlBSSU5URVIgKi8KLSNlbmRpZiAvKiBP UzIgKi8KLSNkZWZpbmUgWFlGTEFHICAgOTQJLyogRkxBRyAqLwotI2RlZmluZSBYWUxJTUlUICA5 NSAgICAgLyogU0VTU0lPTi1MSU1JVCAqLwotI2RlZmluZSBYWUlOSUwgICA5NiAgICAgLyogUHJv dG9jb2wgbmVnb3RpYXRpb24gc3RyaW5nIG1heCBsZW5ndGggKi8KLSNkZWZpbmUgWFlSRUxZICAg OTcgICAgIC8qIFJFTElBQkxFICovCi0jZGVmaW5lIFhZU1RSRUFNIDk4ICAgICAvKiBTVFJFQU1J TkcgKi8KLSNkZWZpbmUgWFlUTE9HICAgOTkgICAgIC8qIFRSQU5TQUNUSU9OLUxPRyAqLwotI2Rl ZmluZSBYWUNMRUFSIDEwMCAgICAgLyogQ0xFQVJDSEFOTkVMICovCi0jZGVmaW5lIFhZQVVUSCAg MTAxCS8qIEFVVEhFTlRJQ0FUSU9OICovCi0KLSNpZmRlZiBUTkNPREUKLSNkZWZpbmUgWFlLUkJQ UiAgIDAJLyogS2VyYmVyb3MgUHJpbmNpcGFsICovCi0jZGVmaW5lIFhZS1JCUkwgICAxCS8qIEtl cmJlcm9zIFJlYWxtICovCi0jZGVmaW5lIFhZS1JCQ0MgICAyCS8qIEtlcmJlcm9zIDUgQ3JlZGVu dGlhbHMtQ2FjaGUgKi8KLSNkZWZpbmUgWFlLUkJTUlYgIDMgICAgIC8qIEtlcmJlcm9zIFNlcnZp Y2UgTmFtZSAqLwotI2RlZmluZSBYWUtSQkRCRyAgNCAgICAgLyogS2VyYmVyb3MgRGVidWdnaW5n ICovCi0jZGVmaW5lIFhZS1JCTElGICA1ICAgICAvKiBLZXJiZXJvcyBMaWZldGltZSAqLwotI2Rl ZmluZSBYWUtSQlBSRSAgNiAgICAgLyogS2VyYmVyb3MgNCBQcmVhdXRoICovCi0jZGVmaW5lIFhZ S1JCSU5TICA3ICAgICAvKiBLZXJiZXJvcyA0IEluc3RhbmNlICovCi0jZGVmaW5lIFhZS1JCRldE ICA4ICAgICAvKiBLZXJiZXJvcyA1IEZvcndhcmRhYmxlICovCi0jZGVmaW5lIFhZS1JCUFJYICA5 ICAgICAvKiBLZXJiZXJvcyA1IFByb3hpYWJsZSAqLwotI2RlZmluZSBYWUtSQlJOVyAgMTAgICAg LyogS2VyYmVyb3MgNSBSZW5ld2FibGUgbGlmZXRpbWUgKi8KLSNkZWZpbmUgWFlLUkJHRVQgIDEx ICAgIC8qIEtlcmJlcm9zIEF1dG8tR2V0LVRHVHMgKi8KLSNkZWZpbmUgWFlLUkJERUwgIDEyICAg IC8qIEtlcmJlcm9zIEF1dG8tRGVzdHJveS1UR1RzICovCi0jZGVmaW5lICAgS1JCX0RFTF9OTyAg MCAvKiAgIEtlcmJlcm9zIE5vIEF1dG8gRGVzdHJveSAqLwotI2RlZmluZSAgIEtSQl9ERUxfQ0wg IDEgLyogICBLZXJiZXJvcyBBdXRvIERlc3Rvcnkgb24gQ2xvc2UgKi8KLSNkZWZpbmUgICBLUkJf REVMX0VYICAyIC8qICAgS2VyYmVyb3MgQXV0byBEZXN0cm95IG9uIEV4aXQgICovCi0jZGVmaW5l IFhZS1JCSzVLNCAxMyAgICAvKiBLZXJiZXJvcyA1IEdldCBLNCBUaWNrZXRzICovCi0jZGVmaW5l IFhZS1JCUFJNICAxNCAgICAvKiBLZXJiZXJvcyA0LzUgUHJvbXB0ICovCi0jZGVmaW5lIFhZS1JC QURSICAxNSAgICAvKiBLZXJiZXJvcyA0LzUgQ2hlY2tBZGRycyAqLwotI2RlZmluZSBYWUtSQk5B RCAgMTYgICAgLyogS2VyYmVyb3MgNSBObyBBZGRyZXNzZXMgKi8KLSNkZWZpbmUgWFlLUkJBREQg IDE3ICAgIC8qIEtlcmJlcm9zIDUgQWRkcmVzcyBMaXN0ICovCi0jZGVmaW5lIFhZS1JCS1RCICAx OCAgICAvKiBLZXJiZXJvcyA0LzUgS2V5IFRhYmxlICovCi0jZGVmaW5lIFhZU1JQUFJNICAgMCAg ICAvKiBTUlAgUHJvbXB0ICovCi0jZGVmaW5lIFhZU1NMUkNGTCAgMCAgICAvKiBTU0wvVExTIFJT QSBDZXJ0cyBmaWxlICovCi0jZGVmaW5lIFhZU1NMQ09LICAgMSAgICAvKiBTU0wvVExTIENlcnRz LU9rIGZsYWcgKi8KLSNkZWZpbmUgWFlTU0xDUlEgICAyICAgIC8qIFNTTC9UTFMgQ2VydHMtUmVx dWlyZWQgZmxhZyAqLwotI2RlZmluZSBYWVNTTENMICAgIDMgICAgLyogU1NML1RMUyBDaXBoZXIg TGlzdCAqLwotI2RlZmluZSBYWVNTTERCRyAgIDQgICAgLyogU1NML1RMUyBEZWJ1ZyBmbGFnICov Ci0jZGVmaW5lIFhZU1NMUktGTCAgNSAgICAvKiBTU0wvVExTIFJTQSBLZXkgRmlsZSAqLwotI2Rl ZmluZSBYWVNTTExGTCAgIDYgICAgLyogU1NML1RMUyBMb2cgRmlsZSAqLwotI2RlZmluZSBYWVNT TE9OICAgIDcgICAgLyogU1NML1RMUyBPbmx5IGZsYWcgKi8KLSNkZWZpbmUgWFlTU0xTRUMgICA4 ICAgIC8qIFNTTC9UTFMgU2VjdXJlIGZsYWcgKi8KLSNkZWZpbmUgWFlTU0xWUkIgICA5ICAgIC8q IFNTTC9UTFMgVmVyYm9zZSBmbGFnICovCi0jZGVmaW5lIFhZU1NMVlJGICAxMCAgICAvKiBTU0wv VExTIFZlcmlmeSBmbGFnICovCi0jZGVmaW5lIFhZU1NMRFVNICAxMSAgICAvKiBTU0wvVExTIER1 bW15IGZsYWcgKi8KLSNkZWZpbmUgWFlTU0xEQ0ZMIDEyICAgIC8qIFNTTC9UTFMgRFNBIENlcnRz IGZpbGUgKi8KLSNkZWZpbmUgWFlTU0xES0ZMIDEzICAgIC8qIFNTTC9UTFMgREggQ2VydHMgZmls ZSAqLwotI2RlZmluZSBYWVNTTERQRkwgMTQgICAgLyogU1NML1RMUyBESCBQYXJhbSBmaWxlICov Ci0jZGVmaW5lIFhZU1NMQ1JMICAxNSAgICAvKiBTU0wvVExTIENSTCBmaWxlICovCi0jZGVmaW5l IFhZU1NMQ1JMRCAxNiAgICAvKiBTU0wvVExTIENSTCBkaXIgKi8KLSNkZWZpbmUgWFlTU0xWUkZG IDE3ICAgIC8qIFNTTC9UTFMgVmVyaWZ5IGZpbGUgKi8KLSNkZWZpbmUgWFlTU0xWUkZEIDE4ICAg IC8qIFNTTC9UTFMgVmVyaWZ5IGRpciAqLwotI2RlZmluZSBYWVNTTFJORCAgMTkgICAgLyogU1NM L1RMUyBSYW5kb20gZmlsZSAqLwotI2RlZmluZSBYWVNTTERDQ0YgMjAgICAgLyogU1NML1RMUyBE U0EgQ2VydHMgQ2hhaW4gRmlsZSAqLwotI2RlZmluZSBYWVNTTFJDQ0YgMjEgICAgLyogU1NML1RM UyBSU0EgQ2VydHMgQ2hhaW4gRmlsZSAqLwotCi0vKiBUaGUgZm9sbG93aW5nIG11c3QgYmUgcG93 ZXJzIG9mIDIgZm9yIGEgYml0IG1hc2sgKi8KLQotI2RlZmluZSAgWFlLTENFTiAgMQkvKiBLZXJi ZXJvcyBMaXN0IENyZWRlbnRpYWxzOiBFbmNyeXB0aW9uICovCi0jZGVmaW5lICBYWUtMQ0ZMICAy CS8qIEtlcmJlcm9zIExpc3QgQ3JlZGVudGlhbHM6IEZsYWdzICovCi0jZGVmaW5lICBYWUtMQ0FE ICA0ICAgICAvKiBLZXJiZXJvcyBMaXN0IENyZWRlbnRpYWxzOiBBZGRyZXNzZXMgKi8KLSNlbmRp ZiAvKiBUTkNPREUgKi8KLQotI2RlZmluZSBYWUZVTkMgICAxMDIJLyogU0VUIEZVTkNUSU9OICov Ci0KLSNkZWZpbmUgIEZVTkNfREkgICAwCS8qIEZVTkNUSU9OIERJQUdOT1NUSUNTICovCi0jZGVm aW5lICBGVU5DX0VSICAgMSAgICAvKiBGVU5DVElPTiBFUlJPUiAqLwotCi0jZGVmaW5lIFhZRlRQ ICAgIDEwMwkvKiBGVFAgYXBwbGljYXRpb24gKi8KLSNkZWZpbmUgWFlTTEVFUCAgMTA0CS8qIFNM RUVQIC8gUEFVU0Ugb3B0aW9ucyAqLwotI2RlZmluZSBYWVNTSCAgICAxMDUJLyogU1NIIG9wdGlv bnMgKi8KLSNkZWZpbmUgWFlURUxPUCAgMTA2ICAgIC8qIFRFTE5FVCBPUFRJT05TIChURUxPUFQp ICovCi0jZGVmaW5lIFhZQ0QgICAgIDEwNyAgICAvKiBTRVQgQ0QgKi8KLSNkZWZpbmUgWFlDU0VU ICAgMTA4CS8qIENIQVJBQ1RFUi1TRVQgKi8KLSNkZWZpbmUgWFlTVE9QICAgMTA5ICAgIC8qIFNU T1AtQklUUyAqLwotI2RlZmluZSBYWVNFUklBTCAxMTAJLyogU0VSSUFMICovCi0jZGVmaW5lIFhZ RElTQyAgIDExMSAgICAvKiBDTE9TRS1PTi1ESVNDT05ORUNUICovCi0jZGVmaW5lIFhZT1BUUyAg IDExMiAgICAvKiBPUFRJT05TICovCi0jZGVmaW5lIFhZUThGTEcgIDExMyAgICAvKiBROEZMQUcg KGludmlzaWJsZSkgKi8KLSNkZWZpbmUgWFlUSU1FUiAgMTE0ICAgIC8qIFRJTUVSICovCi0jZGVm aW5lIFhZRkFDS0IgIDExNSAgICAvKiBGLUFDSy1CVUcgKi8KLSNkZWZpbmUgWFlCVVAgICAgMTE2 ICAgIC8qIFNFVCBTRU5EL1JFQ0VJVkUgQkFDS1VQICovCi0jZGVmaW5lIFhZTU9WRSAgIDExNwkv KiBTRVQgU0VORC9SRUNFSVZFIE1PVkUtVE8gKi8KLSNkZWZpbmUgWFlSRU5BTUUgMTE4CS8qIFNF VCBTRU5EL1JFQ0VJVkUgUkVOQU1FLVRPICovCi0jZGVmaW5lIFhZSElOVFMgIDExOSAgICAvKiBT RVQgSElOVFMgKi8KLSNkZWZpbmUgWFlFVkFMICAgMTIwICAgIC8qIFNFVCBFVkFMVUFURSAqLwot I2RlZmluZSBYWUZBQ0tQICAxMjEgICAgLyogRi1BQ0stUEFUSCAqLwotI2RlZmluZSBYWVNZU0wg ICAxMjIgICAgLyogU3lzTG9nICovCi0jZGVmaW5lIFhZUU5YUEwgIDEyMwkvKiBRTlggUG9ydCBM b2NrICovCi0jZGVmaW5lIFhZSUtTICAgIDEyNCAgICAvKiBTRVQgSUtTIC4uLiAqLwotI2RlZmlu ZSBYWVJPT1QgICAxMjUgICAgLyogU0VUIFJPT1QgKi8KLSNkZWZpbmUgWFlGVFBYICAgMTI2ICAg IC8qIFNFVCBGVFAgKi8KLSNkZWZpbmUgWFlTRVhQICAgMTI3CS8qIFNFVCBTRVhQICovCi0jZGVm aW5lIFhZR1BSICAgIDEyOCAgICAvKiBTRVQgR0VULVBVVC1SRU1PVEUgKi8KLSNkZWZpbmUgWFlM T0NVUyAgMTI5CS8qIFNFVCBMT0NVUyAqLwotI2RlZmluZSBYWUdVSSAgICAxMzAJLyogU0VUIEdV SSAqLwotI2RlZmluZSBYWUFOU1dFUiAxMzEgICAgLyogU0VUIEFOU1dFUiAqLwotI2RlZmluZSBY WU1BVENIICAxMzIgICAgLyogU0VUIE1BVENIRE9UICovCi0jZGVmaW5lIFhZU0ZUUCAgIDEzMyAg ICAvKiBTRVQgU0ZUUCAqLwotI2RlZmluZSBYWV9SRU4gICAxMzQgICAgLyogU0VUIFJFTkFNRSAq LwotI2RlZmluZSBYWUVYVFJOICAxMzUgICAgLyogU0VUIEVYVEVSTkFMLVBST1RPQ09MICovCi0j ZGVmaW5lIFhZVkFSRVYgIDEzNiAgICAvKiBTRVQgVkFSSUFCTEUtRVZBTFVBVElPTiAqLwotCi0v KiBFbmQgb2YgU0VUIGNvbW1hbmRzICovCi0KLS8qIFMtRXhwcmVzc2lvbnMgLS0gZmxvYXRpbmct cG9pbnQgc3VwcG9ydCByZXF1aXJlZCAqLwotCi0jaWZuZGVmIENLRkxPQVQKLSNpZm5kZWYgTk9T RVhQCi0jZGVmaW5lIE5PU0VYUAotI2VuZGlmIC8qIE5PU0VYUCAqLwotI2VuZGlmIC8qIENLRkxP QVQgKi8KLQotLyogTWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYW4gUy1FeHByZXNzaW9u ICovCi0KLSNpZm5kZWYgTk9TRVhQCi0jaWZuZGVmIFNFWFBNQVgKLSNpZmRlZiBCSUdCVUZPSwot I2RlZmluZSBTRVhQTUFYIDEwMjQKLSNlbHNlCi0jZGVmaW5lIFNFWFBNQVggMzIKLSNlbmRpZiAv KiBCSUdCVUZPSyAqLwotI2VuZGlmIC8qIFNFWFBNQVggKi8KLSNlbmRpZiAvKiBOT1NFWFAgKi8K LQotI2lmZGVmIEFOWVgyNQotLyogUEFEIGNvbW1hbmQgcGFyYW1ldGVycyAqLwotCi0jZGVmaW5l IFhZUEFETCAwICAgICAgICAvKiBjbGVhciB2aXJ0dWFsIGNhbGwgKi8KLSNkZWZpbmUgWFlQQURT IDEgICAgICAgIC8qIHN0YXR1cyBvZiB2aXJ0dWFsIGNhbGwgKi8KLSNkZWZpbmUgWFlQQURSIDIg ICAgICAgIC8qIHJlc2V0IG9mIHZpcnR1YWwgY2FsbCAqLwotI2RlZmluZSBYWVBBREkgMyAgICAg ICAgLyogc2VuZCBhbiBpbnRlcnJ1cHQgcGFja2V0ICovCi0KLS8qIFVzZWQgd2l0aCBYWVgyNS4u LiAqLwotI2RlZmluZSBYWVVEQVQgMCAgICAgICAvKiBYLjI1IGNhbGwgdXNlciBkYXRhICovCi0j ZGVmaW5lIFhZQ0xPUyAxICAgICAgIC8qIFguMjUgY2xvc2VkIHVzZXIgZ3JvdXAgY2FsbCAqLwot I2RlZmluZSBYWVJFVkMgMiAgICAgICAvKiBYLjI1IHJldmVyc2UgY2hhcmdlIGNhbGwgKi8KLSNl bmRpZiAvKiBBTllYMjUgKi8KLQotI2lmZGVmIE9TMgotLyogU0VUIFBSSU5URVIgc3dpdGNoZXMg Ki8KLQotI2RlZmluZSBQUk5fT1VUIDAJCQkvKiBPdXRwdXQgb25seSAqLwotI2RlZmluZSBQUk5f QklEIDEJCQkvKiBCaWRpcmVjdGlvbmFsICovCi0jZGVmaW5lIFBSTl9ET1MgMgkJCS8qIERPUyBk ZXZpY2UgKi8KLSNkZWZpbmUgUFJOX1dJTiAzCQkJLyogV2luZG93cyBxdWV1ZSAqLwotI2RlZmlu ZSBQUk5fVE1PIDQJCQkvKiBUaW1lb3V0ICovCi0jZGVmaW5lIFBSTl9UUk0gNQkJCS8qIFRlcm1p bmF0b3IgKi8KLSNkZWZpbmUgUFJOX1NFUCA2CQkJLyogU2VwYXJhdG9yICovCi0jZGVmaW5lIFBS Tl9TUEQgNwkJCS8qIENPTS1wb3J0IHNwZWVkICovCi0jZGVmaW5lIFBSTl9GTE8gOAkJCS8qIENP TS1wb3J0IGZsb3cgY29udHJvbCAqLwotI2RlZmluZSBQUk5fUEFSIDkJCQkvKiBDT00tcG9ydCBw YXJpdHkgKi8KLSNkZWZpbmUgUFJOX05PTiAxMAkJCS8qIE5vIHByaW50ZXIgKi8KLSNkZWZpbmUg UFJOX0ZJTCAxMQkJCS8qIEZpbGVuYW1lICovCi0jZGVmaW5lIFBSTl9QSVAgMTIJCQkvKiBQaXBl bmFtZSAqLwotI2RlZmluZSBQUk5fUFMgIDEzICAgICAgICAgICAgICAgICAgICAgIC8qIFRleHQg dG8gUFMgKi8KLSNkZWZpbmUgUFJOX1dJRCAxNCAgICAgICAgICAgICAgICAgICAgICAvKiBQUyBX aWR0aCAqLwotI2RlZmluZSBQUk5fTEVOIDE1ICAgICAgICAgICAgICAgICAgICAgIC8qIFBTIExl bmd0aCAqLwotI2RlZmluZSBQUk5fUkFXIDE2ICAgICAgICAgICAgICAgICAgICAgIC8qIE5vbi1Q UyAqLwotI2RlZmluZSBQUk5fQ1MgIDE3ICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJhY3Rl ciBTZXQgKi8KLSNkZWZpbmUgUFJOX01BWCAxNwkJCS8qIE51bWJlciBvZiBzd2l0Y2hlcyBkZWZp bmVkICovCi0KLS8qIFByaW50ZXIgdHlwZXMgKi8KLQotI2RlZmluZSBQUlRfRE9TIDAJCQkvKiBE T1MgKi8KLSNkZWZpbmUgUFJUX1dJTiAxCQkJLyogV2luZG93cyBRdWV1ZSAqLwotI2RlZmluZSBQ UlRfRklMIDIJCQkvKiBGaWxlICovCi0jZGVmaW5lIFBSVF9QSVAgMwkJCS8qIFBpcGUgKi8KLSNk ZWZpbmUgUFJUX05PTiA0CQkJLyogTm9uZSAqLwotCi0jZGVmaW5lIFBSSU5UU1dJCi0jZW5kaWYg LyogT1MyICovCi0jZW5kaWYgLyogTk9JQ1AgKi8KLQotI2lmbmRlZiBOT0RJQUwKLS8qCi0gIFN5 bWJvbHMgZm9yIG1vZGVtIHR5cGVzLCBtb3ZlZCBoZXJlIGZyb20gY2t1ZGlhLmMsIE1heSAxOTk3 LCBiZWNhdXNlIG5vdwotICB0aGV5IGFyZSBhbHNvIHVzZWQgaW4gc29tZSBvdGhlciBtb2R1bGVz LiAgVGhlIG51bWJlcnMgTVVTVCBjb3JyZXNwb25kIHRvCi0gIHRoZSBvcmRlcmluZyBvZiBlbnRy aWVzIHdpdGhpbiB0aGUgbW9kZW1wW10gYXJyYXkuCi0qLwotI2lmZGVmIE1JTklESUFMCQkJCS8q IE1pbmltdW0gZGlhbGVyIHN1cHBvcnQgKi8KLQotI2RlZmluZSAgICAgICAgIG5fRElSRUNUICAg ICAgICAgMAkvKiBEaXJlY3QgY29ubmVjdGlvbiAtLSBubyBtb2RlbSAqLwotI2RlZmluZQkJbl9D Q0lUVAkJIDEJLyogQ0NJVFQvSVRVLVQgVi4yNWJpcyAqLwotI2RlZmluZQkJbl9IQVlFUwkJIDIJ LyogSGF5ZXMgMjQwMCAqLwotI2RlZmluZQkJbl9VTktOT1dOCSAzCS8qIFVua25vd24gKi8KLSNk ZWZpbmUgICAgICAgICBuX1VERUYgICAgICAgICAgIDQJLyogVXNlci1EZWZpbmVkICovCi0jZGVm aW5lICAgICAgICAgbl9HRU5FUklDICAgICAgICA1CS8qIEdlbmVyaWMgSGlnaCBTcGVlZCAqLwot I2RlZmluZSAgICAgICAgIG5fSVRVVFYyNTAgICAgICAgNgkvKiBJVFUtVCBWLjI1MCAqLwotI2Rl ZmluZQkJTUFYX01ETQkJIDYJLyogTnVtYmVyIG9mIG1vZGVtIHR5cGVzICovCi0KLSNlbHNlCQkJ CQkvKiBGdWxsLWJsb3duIGRpYWxlciBzdXBwb3J0ICovCi0KLSNkZWZpbmUgICAgICAgICBuX0RJ UkVDVCAgICAgICAgIDAJLyogRGlyZWN0IGNvbm5lY3Rpb24gLS0gbm8gbW9kZW0gKi8KLSNkZWZp bmUJCW5fQVRURFRETQkgMQotI2RlZmluZSAgICAgICAgIG5fQVRUSVNOICAgICAgICAgMgotI2Rl ZmluZQkJbl9BVFRNT0RFTQkgMwotI2RlZmluZQkJbl9DQ0lUVAkJIDQKLSNkZWZpbmUJCW5fQ0VS TUVURUsJIDUKLSNkZWZpbmUJCW5fREYwMwkJIDYKLSNkZWZpbmUJCW5fREYxMDAJCSA3Ci0jZGVm aW5lCQluX0RGMjAwCQkgOAotI2RlZmluZQkJbl9HREMJCSA5Ci0jZGVmaW5lCQluX0hBWUVTCQkx MAotI2RlZmluZQkJbl9QRU5SSUwJMTEKLSNkZWZpbmUJCW5fUkFDQUwJCTEyCi0jZGVmaW5lCQlu X1VOS05PV04gICAgICAgMTMKLSNkZWZpbmUJCW5fVkVOVEVMCTE0Ci0jZGVmaW5lCQluX0NPTkNP UkQJMTUKLSNkZWZpbmUJCW5fQVRUVVBDCTE2CS8qIGFrYSBVTklYIFBDIGFuZCBBVFQ3MzAwICov Ci0jZGVmaW5lCQluX1JPTE0gICAgICAgICAgMTcgICAgICAvKiBSb2xtIENCWCBEQ00gKi8KLSNk ZWZpbmUJCW5fTUlDUk9DT00JMTgJLyogTWljcm9jb21zIGluIFNYIGNvbW1hbmQgbW9kZSAqLwot I2RlZmluZSAgICAgICAgIG5fVVNSICAgICAgICAgICAxOQkvKiBNb2Rlcm4gVVNScyAqLwotI2Rl ZmluZSAgICAgICAgIG5fVEVMRUJJVCAgICAgICAyMCAgICAgIC8qIFRlbGViaXRzIG9mIGFsbCBr aW5kcyAqLwotI2RlZmluZSAgICAgICAgIG5fRElHSVRFTCAgICAgICAyMQkvKiBEaWdpdGVsIERU LTIyIChDQ0lUVCB2YXJpYW50KSAqLwotI2RlZmluZSAgICAgICAgIG5fSF8xMjAwICAgICAgICAy MgkvKiBIYXllcyAxMjAwICovCi0jZGVmaW5lCQluX0hfVUxUUkEgICAgICAgMjMJLyogSGF5ZXMg VWx0cmEgYW5kIG1heWJlIE9wdGltYSAqLwotI2RlZmluZQkJbl9IX0FDQ1VSQSAgICAgIDI0CS8q IEhheWVzIEFjY3VyYSBhbmQgbWF5YmUgT3B0aW1hICovCi0jZGVmaW5lICAgICAgICAgbl9QUEkg ICAgICAgICAgIDI1CS8qIFByYWN0aWNhbCBQZXJpcGhlcmFscyAqLwotI2RlZmluZSAgICAgICAg IG5fREFUQVBPUlQgICAgICAyNgkvKiBBVCZUIERhdGFwb3J0ICovCi0jZGVmaW5lICAgICAgICAg bl9CT0NBICAgICAgICAgIDI3CS8qIEJvY2EgKi8KLSNkZWZpbmUJCW5fTU9UT1JPTEEgICAgICAy OAkvKiBNb3Rvcm9sYSBGYXN0YWxrIG9yIExpZmVzdHlsZSAqLwotI2RlZmluZQkJbl9ESUdJQ09N TQkyOQkvKiBEaWdpY29tbSBDb25uZWN0aW9uICovCi0jZGVmaW5lCQluX0RZTkFMSU5LICAgICAg MzAJLyogRHluYWxpbmsgMTQxNFZFICovCi0jZGVmaW5lCQluX0lOVEVMCQkzMQkvKiBJbnRlbCAx NDQwMCBGYXhtb2RlbSAqLwotI2RlZmluZQkJbl9VQ09NX0FUCTMyCS8qIE1pY3JvY29tcyBpbiBB VCBtb2RlICovCi0jZGVmaW5lCQluX01VTFRJCQkzMwkvKiBNdWx0aXRlY2ggTVQxNDMyICovCi0j ZGVmaW5lCQluX1NVUFJBCQkzNAkvKiBTdXByYUZBWG1vZGVtICovCi0jZGVmaW5lCSAgICAgICAg bl9aT0xUUklYCTM1CS8qIFpvbHRyaXggKi8KLSNkZWZpbmUJCW5fWk9PTQkJMzYJLyogWm9vbSAq LwotI2RlZmluZQkJbl9aWVhFTAkJMzcJLyogWnlYRUwgKi8KLSNkZWZpbmUgICAgICAgICBuX1RB UEkgICAgICAgICAgMzgJLyogVEFQSSBMaW5lIG1vZGVtIC0gd2hhdGV2ZXIgaXQgaXMgKi8KLSNk ZWZpbmUgICAgICAgICBuX1RCTkVXICAgICAgICAgMzkJLyogTmV3ZXIgVGVsZWJpdCBtb2RlbHMg Ki8KLSNkZWZpbmUJCW5fTUFYVEVDSCAgICAgICA0MAkvKiBNYXhUZWNoIFhNMjg4RUEgKi8KLSNk ZWZpbmUgICAgICAgICBuX1VERUYgICAgICAgICAgNDEJLyogVXNlci1EZWZpbmVkICovCi0jZGVm aW5lICAgICAgICAgbl9SV1YzMiAgICAgICAgIDQyCS8qIEdlbmVyaWMgUm9ja3dlbGwgVi4zMiAq LwotI2RlZmluZSAgICAgICAgIG5fUldWMzJCICAgICAgICA0MwkvKiBHZW5lcmljIFJvY2t3ZWxs IFYuMzJiaXMgKi8KLSNkZWZpbmUgICAgICAgICBuX1JXVjM0ICAgICAgICAgNDQJLyogR2VuZXJp YyBSb2Nrd2VsbCBWLjM0ICovCi0jZGVmaW5lCQluX01XQVZFCQk0NQkvKiBJQk0gTXdhdmUgQWRh cHRlciAqLwotI2RlZmluZSAgICAgICAgIG5fVEVMRVBBVEggICAgICA0NgkvKiBHYXRld2F5IFRl bGVwYXRoICovCi0jZGVmaW5lICAgICAgICAgbl9NSUNST0xJTksgICAgIDQ3CS8qIE1pY3JvTGlu ayBtb2RlbXMgKi8KLSNkZWZpbmUgICAgICAgICBuX0NBUkRJTkFMICAgICAgNDgJLyogQ2FyZGlu YWwgbW9kZW1zICovCi0jZGVmaW5lICAgICAgICAgbl9HRU5FUklDICAgICAgIDQ5ICAgICAgLyog R2VuZXJpYyBoaWdoLXNwZWVkICovCi0jZGVmaW5lICAgICAgICAgbl9YSkFDSyAgICAgICAgIDUw CS8qIE1lZ2FoZXJ0eiBYLUphY2sgKi8KLSNkZWZpbmUgICAgICAgICBuX1NQSVJJVElJICAgICAg NTEJLyogUXVpY2tjb21tIFNwaXJpdCBJSSAqLwotI2RlZmluZSAgICAgICAgIG5fTU9OVEFOQSAg ICAgICA1MgkvKiBNb3Rvcm9sYSBNb250YW5hICovCi0jZGVmaW5lICAgICAgICAgbl9DT01QQVEg ICAgICAgIDUzCS8qIENvbXBhcSBEYXRhK0ZheCBNb2RlbSAqLwotI2RlZmluZSAgICAgICAgIG5f RlVKSVRTVSAgICAgICA1NAkvKiBGdWppdHN1IEZheC9Nb2RlbSBBZHBhdGVyICovCi0jZGVmaW5l ICAgICAgICAgbl9NSFpBVFQgICAgICAgIDU1CS8qIE1lZ2FoZXJ0eiBBVCZUIFYuMzQgKi8KLSNk ZWZpbmUgICAgICAgICBuX1NVUFJBU09OICAgICAgNTYJLyogU3VwcmFTb25pYyAqLwotI2RlZmlu ZSAgICAgICAgIG5fQkVTVERBVEEgICAgICA1NwkvKiBCZXN0IERhdGEgKi8KLSNkZWZpbmUgICAg ICAgICBuX0FUVDE5MDAgICAgICAgNTggICAgICAvKiBBVCZUIFNUVSBJSUkgTW9kZWwgMTkwMCAq LwotI2RlZmluZSAgICAgICAgIG5fQVRUMTkxMCAgICAgICA1OSAgICAgIC8qIEFUJlQgU1RVIElJ SSBNb2RlbCAxOTEwICovCi0jZGVmaW5lICAgICAgICAgbl9LRUVQSU5UT1VDSCAgIDYwCS8qIEFU JlQgS2VlcGluVG91Y2ggKi8KLSNkZWZpbmUgICAgICAgICBuX1VTUlgyICAgICAgICAgNjEJLyog VVNSIFhKLTE1NjAgWDIgNTZLICovCi0jZGVmaW5lICAgICAgICAgbl9ST0xNQVQgICAgICAgIDYy CS8qIFJvbG0gd2l0aCBBVCBjb21tYW5kIHNldCAqLwotI2RlZmluZQkJbl9BVExBUyAgICAgICAg IDYzICAgICAgLyogQXRsYXMgLyBOZXdjb20gaXhmQyAzMy42ICovCi0jZGVmaW5lICAgICAgICAg bl9DT0RFWCAgICAgICAgIDY0CS8qIE1vdG9yb2xhIENvZGV4IDMyNlggU2VyaWVzICovCi0jZGVm aW5lICAgICAgICAgbl9NVDU2MzRaUFggICAgIDY1CS8qIE11bHRpdGVjaCBNVDU2MzRaUFggKi8K LSNkZWZpbmUgICAgICAgICBuX1VMSU5LVjI1MCAgICAgNjYJLyogTWljcm9saW5rIElUVS1UIFYu MjUwIDU2SyAqLwotI2RlZmluZSAgICAgICAgIG5fSVRVVFYyNTAgICAgICA2NwkvKiBHZW5lcmlj IElUVS1UIFYuMjUwICovCi0jZGVmaW5lICAgICAgICAgbl9SV1Y5MCAgICAgICAgIDY4CS8qIEdl bmVyaWMgUm9ja3dlbGwgVi45MCAqLwotI2RlZmluZSAgICAgICAgIG5fU1VQUkFYICAgICAgICA2 OSAgICAgIC8qIERpYW1vbmQgU3VwcmEgRXhwcmVzcyBWLjkwICovCi0jZGVmaW5lICAgICAgICAg bl9MVUNFTlQgICAgICAgIDcwICAgICAgLyogTHVjZW50IFZlbnVzIGNoaXBzZXQgKi8KLSNkZWZp bmUgICAgICAgICBuX1BDVEVMICAgICAgICAgNzEgICAgICAvKiBQQ1RlbCBjaGlwc2V0ICovCi0j ZGVmaW5lICAgICAgICAgbl9DT05FWEFOVCAgICAgIDcyICAgICAgLyogQ29uZXhhbnQgbW9kZW0g ZmFtaWx5ICovCi0jZGVmaW5lCQluX1pPT01WMzQJNzMJLyogWm9vbSAqLwotI2RlZmluZQkJbl9a T09NVjkwCTc0CS8qIFpvb20gKi8KLSNkZWZpbmUgICAgICAgICBuX1pPT01WOTIgICAgICAgNzUg ICAgICAvKiBaT09NIFYuOTIgKi8KLSNkZWZpbmUgICAgICAgICBuX01PVFNNNTYgICAgICAgNzYJ LyogTW90b3JvbGEgU001NiBjaGlwc2V0ICovCi0jZGVmaW5lCQlNQVhfTURNCQk3NgkvKiBOdW1i ZXIgb2YgbW9kZW0gdHlwZXMgKi8KLQotI2VuZGlmIC8qIE1JTklESUFMICovCi0jZW5kaWYgLyog Tk9ESUFMICovCi0KLSNpZm5kZWYgTk9JQ1AKLS8qIFNIT1cgY29tbWFuZCBzeW1ib2xzICovCi0K LSNkZWZpbmUgU0hQQVIgMAkJCQkvKiBQYXJhbWV0ZXJzICovCi0jZGVmaW5lIFNIVkVSIDEJCQkJ LyogVmVyc2lvbnMgKi8KLSNkZWZpbmUgU0hDT00gMgkJCQkvKiBDb21tdW5pY2F0aW9ucyAqLwot I2RlZmluZSBTSFBSTyAzCQkJCS8qIFByb3RvY29sICovCi0jZGVmaW5lIFNIRklMIDQJCQkJLyog RmlsZSAqLwotI2RlZmluZSBTSExORyA1CQkJCS8qIExhbmd1YWdlICovCi0jZGVmaW5lIFNIQ09V IDYJCQkJLyogQ291bnQgKi8KLSNkZWZpbmUgU0hNQUMgNwkJCQkvKiBNYWNyb3MgKi8KLSNkZWZp bmUgU0hLRVkgOAkJCQkvKiBLZXkgKi8KLSNkZWZpbmUgU0hTQ1IgOQkJCQkvKiBTY3JpcHRzICov Ci0jZGVmaW5lIFNIU1BEIDEwCQkJLyogU3BlZWQgKi8KLSNkZWZpbmUgU0hTVEEgMTEJCQkvKiBT dGF0dXMgKi8KLSNkZWZpbmUgU0hTRVIgMTIJCQkvKiBTZXJ2ZXIgKi8KLSNkZWZpbmUgU0hYTUkg MTMJCQkvKiBUcmFuc21pdCAqLwotI2RlZmluZSBTSEFUVCAxNAkJCS8qIEF0dHJpYnV0ZXMgKi8K LSNkZWZpbmUgU0hNT0QgMTUJCQkvKiBNb2RlbSAqLwotI2RlZmluZSBTSERGTFQgMTYJCQkvKiBE ZWZhdWx0IChhcyBpbiBWTVMpICovCi0jZGVmaW5lIFNIVkFSIDE3CQkJLyogU2hvdyBnbG9iYWwg dmFyaWFibGVzICovCi0jZGVmaW5lIFNIQVJHIDE4CQkJLyogU2hvdyBtYWNybyBhcmd1bWVudHMg Ki8KLSNkZWZpbmUgU0hBUlIgMTkJCQkvKiBTaG93IGFycmF5cyAqLwotI2RlZmluZSBTSEJVSSAy MAkJCS8qIFNob3cgYnVpbHRpbiB2YXJpYWJsZXMgKi8KLSNkZWZpbmUgU0hGVU4gMjEJCQkvKiBT aG93IGZ1bmN0aW9ucyAqLwotI2RlZmluZSBTSFBBRCAyMgkJCS8qIFNob3cgKFguMjUpIFBBRCAq LwotI2RlZmluZSBTSFRFUiAyMwkJCS8qIFNob3cgdGVybWluYWwgc2V0dGluZ3MgKi8KLSNkZWZp bmUgU0hFU0MgMjQJCQkvKiBTaG93IGVzY2FwZSBjaGFyYWN0ZXIgKi8KLSNkZWZpbmUgU0hESUEg MjUJCQkvKiBTaG93IERJQUwgcGFyYW1ldGVycyAqLwotI2RlZmluZSBTSE5FVCAyNgkJCS8qIFNo b3cgbmV0d29yayBwYXJhbWV0ZXJzICovCi0jZGVmaW5lIFNITEJMIDI3CQkJLyogU2hvdyBWTVMg bGFiZWxlZCBmaWxlIHBhcmFtZXRlcnMgKi8KLSNkZWZpbmUgU0hTVEsgMjgJCQkvKiBTaG93IHN0 YWNrLCBNQUMgZGVidWdnaW5nICovCi0jZGVmaW5lIFNIQ1NFIDI5CQkJLyogU2hvdyBjaGFyYWN0 ZXIgc2V0cyAqLwotI2RlZmluZSBTSEZFQSAzMAkJCS8qIFNob3cgZmVhdHVyZXMgKi8KLSNkZWZp bmUgU0hDVEwgMzEJCQkvKiBTaG93IGNvbnRyb2wtcHJlZml4IHRhYmxlICovCi0jZGVmaW5lIFNI RVhJIDMyCQkJLyogU2hvdyBFWElUIGl0ZW1zICovCi0jZGVmaW5lIFNIUFJUIDMzCQkJLyogU2hv dyBwcmludGVyICovCi0jZGVmaW5lIFNIQ01EIDM0CQkJLyogU2hvdyBjb21tYW5kIHBhcmFtZXRl cnMgKi8KLSNkZWZpbmUgU0hLVkIgMzUJCQkvKiBTaG93IFxLdmVyYnMgKi8KLSNkZWZpbmUgU0hN T1UgMzYJCQkvKiBTaG93IE1vdXNlIChsaWtlIFNob3cgS2V5KSAqLwotI2RlZmluZSBTSFRBQiAz NwkJCS8qIFNob3cgVGFicyAoT1MvMikgKi8KLSNkZWZpbmUgU0hWU0NSTiAzOAkJCS8qIFNob3cg VmlydHVhbCBTY3JlZW4gKE9TLzIpICovCi0jZGVmaW5lIFNIQUxSTSAgMzkJCQkvKiBBTEFSTSAq LwotI2RlZmluZSBTSFNGTCAgIDQwCQkJLyogU0VORC1MSVNUICovCi0jZGVmaW5lIFNIVURLICAg NDEgICAgICAgICAgICAgICAgICAgICAgLyogREVDIFZUIFVES3MgKE9TLzIpICovCi0jZGVmaW5l IFNIREJMICAgNDIJCQkvKiBET1VCTEUvSUdOT1JFIGNoYXJhY3RlcnMgKi8KLSNkZWZpbmUgU0hF RElUICAgIDQzCQkJLyogRURJVE9SICovCi0jZGVmaW5lIFNIQlJPV1NFICA0NAkJCS8qIEJST1dT RVIgKi8KLSNkZWZpbmUgU0hUQVBJICAgIDQ1CQkJLyogVEFQSSAqLwotI2RlZmluZSBTSFRBUElf TCAgNDYJCQkvKiBUQVBJIExvY2F0aW9uICovCi0jZGVmaW5lIFNIVEFQSV9NICA0NwkJCS8qIFRB UEkgTW9kZW0gUHJvcGVydGllcyAqLwotI2RlZmluZSBTSFRBUElfQyAgNDgJCQkvKiBUQVBJIENv bW0gUHJvcGVydGllcyAgKi8KLSNkZWZpbmUgU0hURUwgICAgIDQ5CQkJLyogU0hPVyBURUxORVQg Ki8KLSNkZWZpbmUgU0hJTlAgICAgIDUwCQkJLyogU0hPVyBJTlBVVCAqLwotI2RlZmluZSBTSFRS SUcgICAgNTEJCQkvKiBTSE9XIFRSSUdHRVIgKi8KLSNkZWZpbmUgU0hMT0cgICAgIDUyCQkJLyog U0hPVyBMT0dTICovCi0jZGVmaW5lIFNIT1VUUCAgICA1MwkJCS8qIFNIT1cgT1VUUFVUICovCi0j ZGVmaW5lIFNIT1BBVCAgICA1NAkJCS8qIFNIT1cgUEFUVEVSTlMgKi8KLSNkZWZpbmUgU0hPU1RS ICAgIDU1CQkJLyogU0hPVyBTVFJFQU1JTkcgKi8KLSNkZWZpbmUgU0hPQVVUSCAgIDU2CQkJLyog U0hPVyBBVVRIRU5USUNBVElPTiAqLwotI2RlZmluZSBTSE9GVFAgICAgNTcJCQkvKiBTSE9XIEZU UCAqLwotI2RlZmluZSBTSFRPUFQgICAgNTggICAgICAgICAgICAgICAgICAgIC8qIFNIT1cgVEVM T1BUICovCi0jZGVmaW5lIFNIWE9QVCAgICA1OQkJCS8qIFNIT1cgRVhURU5ERUQtT1BUSU9OUyAq LwotI2RlZmluZSBTSENEICAgICAgNjAJCQkvKiBTSE9XIENEICovCi0jZGVmaW5lIFNIQVNTT0Mg ICA2MQkJCS8qIFNIT1cgQVNTT0NJQVRJT05TICovCi0jZGVmaW5lIFNIQ09OTlggICA2MgkJCS8q IFNIT1cgQ09OTkVDVElPTiAqLwotI2RlZmluZSBTSE9QVFMgICAgNjMJCQkvKiBTSE9XIE9QVElP TlMgKi8KLSNkZWZpbmUgU0hPRkxPICAgIDY0CQkJLyogU0hPVyBGTE9XLUNPTlRST0wgKi8KLSNk ZWZpbmUgU0hPWEZFUiAgIDY1CQkJLyogU0hPVyBUUkFOU0ZFUiAqLwotI2RlZmluZSBTSFRDUCAg ICAgNjYgICAgICAgICAgICAgICAgICAgIC8qIFNIT1cgVENQICovCi0jZGVmaW5lIFNISElTVE9S WSA2NwkJCS8qIFNIT1cgKGNvbW1hbmQpIEhJU1RPUlkgKi8KLSNkZWZpbmUgU0hTRVhQICAgIDY4 CQkJLyogU0hPVyBTRVhQUkVTU0lPTlMgKi8KLSNkZWZpbmUgU0hPU1NIICAgIDY5CQkJLyogU0hP VyBTU0ggKi8KLSNkZWZpbmUgU0hPSUtTICAgIDcwICAgICAgICAgICAgICAgICAgICAvKiBTSE9X IElLUyAqLwotI2RlZmluZSBTSE9HVUkgICAgNzEJCQkvKiBTSE9XIEdVSSAoSzk1KSAqLwotI2Rl ZmluZSBTSE9SRU4gICAgNzIJCQkvKiBTSE9XIFJFTkFNRSAqLwotCi0vKiBSRU1PVEUgY29tbWFu ZCBzeW1ib2xzICovCi0KLSNkZWZpbmUgWFpDUFkgIDAJLyogQ29weSAqLwotI2RlZmluZSBYWkNX RCAgMQkvKiBDaGFuZ2UgV29ya2luZyBEaXJlY3RvcnkgKi8KLSNkZWZpbmUgWFpERUwgIDIJLyog RGVsZXRlICovCi0jZGVmaW5lIFhaRElSICAzCS8qIERpcmVjdG9yeSAqLwotI2RlZmluZSBYWkhM UCAgNAkvKiBIZWxwICovCi0jZGVmaW5lIFhaSE9TICA1CS8qIEhvc3QgKi8KLSNkZWZpbmUgWFpL RVIgIDYJLyogS2VybWl0ICovCi0jZGVmaW5lIFhaTEdJICA3CS8qIExvZ2luICovCi0jZGVmaW5l IFhaTEdPICA4CS8qIExvZ291dCAqLwotI2RlZmluZSBYWk1BSSAgOQkvKiBNYWlsIDwtLSB3cm9u ZywgdGhpcyBzaG91bGQgYmUgdG9wLWxldmVsICovCi0jZGVmaW5lIFhaTU9VIDEwCS8qIE1vdW50 ICovCi0jZGVmaW5lIFhaTVNHIDExCS8qIE1lc3NhZ2UgKi8KLSNkZWZpbmUgWFpQUkkgMTIJLyog UHJpbnQgKi8KLSNkZWZpbmUgWFpSRU4gMTMJLyogUmVuYW1lICovCi0jZGVmaW5lIFhaU0VUIDE0 CS8qIFNldCAqLwotI2RlZmluZSBYWlNQQSAxNQkvKiBTcGFjZSAqLwotI2RlZmluZSBYWlNVQiAx NgkvKiBTdWJtaXQgKi8KLSNkZWZpbmUgWFpUWVAgMTcJLyogVHlwZSAqLwotI2RlZmluZSBYWldI TyAxOAkvKiBXaG8gKi8KLSNkZWZpbmUgWFpQV0QgMTkJLyogUHJpbnQgV29ya2luZyBEaXJlY3Rv cnkgKi8KLSNkZWZpbmUgWFpRVUUgMjAJLyogUXVlcnkgKi8KLSNkZWZpbmUgWFpBU0cgMjEJLyog QXNzaWduICovCi0jZGVmaW5lIFhaTUtEIDIyCS8qIG1rZGlyICovCi0jZGVmaW5lIFhaUk1EIDIz CS8qIHJtZGlyICovCi0jZGVmaW5lIFhaWElUIDI0CS8qIEV4aXQgKi8KLSNkZWZpbmUgWFpDRFUg MjUgICAgICAgIC8qIENEVVAgKi8KLQotLyogU0VUIElOUFVUIGNvbW1hbmQgcGFyYW1ldGVycyAq LwotCi0jZGVmaW5lIElOX0RFRiAgMAkJCS8qIERlZmF1bHQgdGltZW91dCAqLwotI2RlZmluZSBJ Tl9USU0gIDEJCQkvKiBUaW1lb3V0IGFjdGlvbiAqLwotI2RlZmluZSBJTl9DQVMgIDIJCQkvKiBD YXNlIChtYXRjaGluZykgKi8KLSNkZWZpbmUgSU5fRUNIICAzCQkJLyogRWNobyAqLwotI2RlZmlu ZSBJTl9TSUwgIDQJCQkvKiBTaWxlbmNlICovCi0jZGVmaW5lIElOX0JVRiAgNQkJCS8qIEJ1ZmZl ciBzaXplICovCi0jZGVmaW5lIElOX1BBQyAgNiAgICAgICAgICAgICAgICAgICAgICAgLyogSW5w dXQgUGFjaW5nIChkZWJ1ZykgKi8KLSNkZWZpbmUgSU5fVFJNICA3CQkJLyogSW5wdXQgVGVybWlu YWwgRGlzcGxheSAqLwotI2RlZmluZSBJTl9BREwgIDgJCQkvKiBJbnB1dCBhdXRvZG93bmxvYWQg Ki8KLSNkZWZpbmUgSU5fUEFUICA5CQkJLyogUGF0dGVybiB0byBtYXRjaCAqLwotI2RlZmluZSBJ Tl9BU0cgMTAgCQkJLyogQXNzaWduIG1hdGNoaW5nIHRleHQgdG8gdmFyaWFibGUgKi8KLSNkZWZp bmUgSU5fQ0FOIDExCQkJLyogS2V5Ym9hcmQgY2FuY2VsbGF0aW9uIG9mIElOUFVUICovCi0jZGVm aW5lIElOX1NDQSAxMgkJCS8qIFRpbWVvdXQgc2NhbGluZyAqLwotCi0vKiBFTkFCTEUvRElTQUJM RSBjb21tYW5kIHBhcmFtZXRlcnMgKi8KLQotI2RlZmluZSBFTl9BTEwgIDAJCQkvKiBBTEwgKi8K LSNkZWZpbmUgRU5fQ1dEICAxCQkJLyogQ0QvQ1dEICovCi0jZGVmaW5lIEVOX0RJUiAgMgkJCS8q IERJUkVDVE9SWSAqLwotI2RlZmluZSBFTl9GSU4gIDMJCQkvKiBGSU5JU0ggKi8KLSNkZWZpbmUg RU5fR0VUICA0CQkJLyogR0VUICovCi0jZGVmaW5lIEVOX0hPUyAgNQkJCS8qIEhPU1QgY29tbWFu ZCAqLwotI2RlZmluZSBFTl9LRVIgIDYJCQkvKiBLRVJNSVQgY29tbWFuZCAqLwotI2RlZmluZSBF Tl9MT0cgIDcJCQkvKiBMT0dJTiAqLwotI2RlZmluZSBFTl9TRU4gIDgJCQkvKiBTRU5EICovCi0j ZGVmaW5lIEVOX1NFVCAgOQkJCS8qIFNFVCAqLwotI2RlZmluZSBFTl9TUEEgMTAJCQkvKiBTUEFD RSAqLwotI2RlZmluZSBFTl9UWVAgMTEJCQkvKiBUWVBFICovCi0jZGVmaW5lIEVOX1dITyAxMgkJ CS8qIFdITywgZmluZ2VyICovCi0jZGVmaW5lIEVOX0RFTCAxMwkJCS8qIERlbGV0ZSAqLwotI2Rl ZmluZSBFTl9CWUUgMTQJCQkvKiBCWUUgKGFzIG9wcG9zZWQgdG8gRklOSVNIKSAqLwotI2RlZmlu ZSBFTl9RVUUgMTUJCQkvKiBRVUVSWSAqLwotI2RlZmluZSBFTl9BU0cgMTYJCQkvKiBBU1NJR04g Ki8KLSNkZWZpbmUgRU5fQ1BZIDE3CQkJLyogQ09QWSAqLwotI2RlZmluZSBFTl9SRU4gMTgJCQkv KiBSRU5BTUUgKi8KLSNkZWZpbmUgRU5fUkVUIDE5CQkJLyogUkVUUklFVkUgKi8KLSNkZWZpbmUg RU5fTUFJIDIwCQkJLyogTUFJTCAqLwotI2RlZmluZSBFTl9QUkkgMjEJCQkvKiBQUklOVCAqLwot I2RlZmluZSBFTl9NS0QgMjIJCQkvKiBNS0RJUiAqLwotI2RlZmluZSBFTl9STUQgMjMJCQkvKiBS TURJUiAqLwotI2RlZmluZSBFTl9YSVQgMjQJCQkvKiBFWElUICovCi0jZGVmaW5lIEVOX0VOQSAy NQkJCS8qIEVOQUJMRSAqLwotI2VuZGlmIC8qIE5PSUNQICovCi0KLSNpZm5kZWYgTk9JQ1AKLS8q IENMRUFSIGNvbW1hbmQgc3ltYm9scyAqLwotI2RlZmluZSBDTFJfREVWICAgIDEJCQkvKiBDbGVh ciBEZXZpY2UgQnVmZmVycyAqLwotI2RlZmluZSBDTFJfSU5QICAgIDIJCQkvKiBDbGVhciBJbnB1 dCBCdWZmZXJzICovCi0jZGVmaW5lIENMUl9CVEggICAgQ0xSX0RFVnxDTFJfSU5QCS8qIENsZWFy IERldmljZSBhbmQgSW5wdXQgKi8KLSNkZWZpbmUgQ0xSX1NDTCAgICA0CQkJLyogQ2xlYXIgU2Ny b2xsYmFjayBidWZmZXIgKi8KLSNkZWZpbmUgQ0xSX0NNRCAgICA4CQkJLyogQ2xlYXIgQ29tbWFu ZCBTY3JlZW4gKi8KLSNkZWZpbmUgQ0xSX1RSTSAgIDE2CQkJLyogQ2xlYXIgVGVybWluYWwgU2Ny ZWVuICovCi0jZGVmaW5lIENMUl9ESUEgICAzMgkJCS8qIENsZWFyIERpYWwgU3RhdHVzICovCi0j ZGVmaW5lIENMUl9TRkwgICA2NAkJCS8qIENsZWFyIFNlbmQtRmlsZS1MaXN0ICovCi0jZGVmaW5l IENMUl9BUEMgIDEyOAkJCS8qIENsZWFyIEFQQyAqLwotI2RlZmluZSBDTFJfQUxSICAyNTYJCQkv KiBDbGVhciBBbGFybSAqLwotI2RlZmluZSBDTFJfVFhUICA1MTIJCQkvKiBDbGVhciB0ZXh0LXBh dHRlcm5zICovCi0jZGVmaW5lIENMUl9CSU4gMTAyNAkJCS8qIENsZWFyIGJpbmFyeS1wYXR0ZXJu cyAqLwotI2RlZmluZSBDTFJfU0NSIDIwNDgJCQkvKiBDbGVhciBzY3JlZW4gKi8KLSNkZWZpbmUg Q0xSX0tCRCA0MDk2CQkJLyogQ2xlYXIga2V5Ym9hcmQgYnVmZmVyICovCi0jZW5kaWYgLyogTk9J Q1AgKi8KLQotLyogU3ltYm9scyBmb3IgbG9ncyAqLwotCi0jZGVmaW5lIExPR0QgMAkJCQkvKiBE ZWJ1Z2dpbmcgKi8KLSNkZWZpbmUgTE9HUCAxCQkJCS8qIFBhY2tldHMgKi8KLSNkZWZpbmUgTE9H UyAyCQkJCS8qIFNlc3Npb24gKi8KLSNkZWZpbmUgTE9HVCAzCQkJCS8qIFRyYW5zYWN0aW9uICov Ci0jZGVmaW5lIExPR1ggNAkJCQkvKiBTY3JlZW4gKi8KLSNkZWZpbmUgTE9HUiA1CQkJCS8qIFRo ZSAib3BlbiByZWFkIiBmaWxlICovCi0jZGVmaW5lIExPR1cgNgkJCQkvKiBUaGUgIm9wZW4gd3Jp dGUvYXBwZW5kIiBmaWxlICovCi0jZGVmaW5lIExPR0UgNwkJCQkvKiBFcnJvciAoZS5nLiBzdGRl cnIpICovCi0jZGVmaW5lIExPR00gOAkJCQkvKiBUaGUgZGlhbGluZyBsb2cgKi8KLQotI2lmbmRl ZiBOT1NQTAotLyogU3ltYm9scyBmb3IgYnVpbHRpbiB2YXJpYWJsZXMgKi8KLQotI2RlZmluZSBW Tl9BUkdDIDAJCQkvKiBBUkdDICovCi0jZGVmaW5lIFZOX0NPVU4gMQkJCS8qIENPVU5UICovCi0j ZGVmaW5lIFZOX0RBVEUgMgkJCS8qIERBVEUgKi8KLSNkZWZpbmUgVk5fRElSRSAzCQkJLyogRElS RUNUT1JZICovCi0jZGVmaW5lIFZOX0VSUk8gNAkJCS8qIEVSUk9STEVWRUwgKi8KLSNkZWZpbmUg Vk5fVElNRSA1CQkJLyogVElNRSAqLwotI2RlZmluZSBWTl9WRVJTIDYJCQkvKiBWRVJTSU9OICov Ci0jZGVmaW5lIFZOX0lCVUYgNwkJCS8qIElOUFVUIGJ1ZmZlciAqLwotI2RlZmluZSBWTl9TVUND IDgJCQkvKiBTVUNDRVNTIGZsYWcgKi8KLSNkZWZpbmUgVk5fTElORSA5CQkJLyogTElORSAqLwot I2RlZmluZSBWTl9BUkdTIDEwCQkJLyogUHJvZ3JhbSBjb21tYW5kLWxpbmUgYXJnIGNvdW50ICov Ci0jZGVmaW5lIFZOX1NZU1QgMTEJCQkvKiBTeXN0ZW0gdHlwZSAqLwotI2RlZmluZSBWTl9TWVNW IDEyCQkJLyogU3lzdGVtIHZlcnNpb24gKi8KLSNkZWZpbmUgVk5fUkVUICAxMwkJCS8qIFJFVFVS TiB2YWx1ZSAqLwotI2RlZmluZSBWTl9GSUxFIDE0CQkJLyogTW9zdCByZWNlbnQgZmlsZXNwZWMg Ki8KLSNkZWZpbmUgVk5fTkRBVCAxNQkJCS8qIE51bWVyaWMgZGF0ZSB5eXl5L21tL2RkICovCi0j ZGVmaW5lIFZOX0hPTUUgMTYJCQkvKiBIb21lIGRpcmVjdG9yeSAqLwotI2RlZmluZSBWTl9TUEVF IDE3CQkJLyogVHJhbnNtaXNzaW9uIHNwZWVkICovCi0jZGVmaW5lIFZOX0hPU1QgMTgJCQkvKiBI b3N0IG5hbWUgKi8KLSNkZWZpbmUgVk5fVFRZRiAxOQkJCS8qIFRUWSBmaWxlIGRlc2NyaXB0b3Ig KFVOSVggb25seSkgKi8KLSNkZWZpbmUgVk5fUFJPRyAyMAkJCS8qIFByb2dyYW0gbmFtZSAqLwot I2RlZmluZSBWTl9OVElNIDIxCQkJLyogTlRJTUUgKi8KLSNkZWZpbmUgVk5fRkZDICAyMgkJCS8q IENoYXJhY3RlcnMgaW4gbGFzdCBmaWxlIHhmZXJyZWQgKi8KLSNkZWZpbmUgVk5fVEZDICAyMwkJ CS8qIENoYXJzIGluIGxhc3QgZmlsZSBncm91cCB4ZmVycmVkICovCi0jZGVmaW5lIFZOX0NQVSAg MjQJCQkvKiBDUFUgdHlwZSAqLwotI2RlZmluZSBWTl9DTURMIDI1CQkJLyogQ29tbWFuZCBsZXZl bCAqLwotI2RlZmluZSBWTl9EQVkgIDI2ICAgICAgICAgICAgICAgICAgICAgIC8qIERheSBvZiB3 ZWVrLCBzdHJpbmcgKi8KLSNkZWZpbmUgVk5fTkRBWSAyNyAgICAgICAgICAgICAgICAgICAgICAv KiBEYXkgb2Ygd2VlaywgbnVtZXJpYyAqLwotI2RlZmluZSBWTl9MQ0wgIDI4CQkJLyogTG9jYWwg KHZzKSByZW1vdGUgbW9kZSAqLwotI2RlZmluZSBWTl9DTURTIDI5CQkJLyogQ29tbWFuZCBzb3Vy Y2UgKi8KLSNkZWZpbmUgVk5fQ01ERiAzMAkJCS8qIENvbW1hbmQgZmlsZSBuYW1lICovCi0jZGVm aW5lIFZOX01BQyAgMzEJCQkvKiBNYWNybyBuYW1lICovCi0jZGVmaW5lIFZOX0VYSVQgMzIJCQkv KiBFeGl0IHN0YXR1cyAqLwotI2RlZmluZSBWTl9JQ0hSIDMzCQkJLyogSU5QVVQgY2hhcmFjdGVy ICovCi0jZGVmaW5lIFZOX0lDTlQgMzQJCQkvKiBJTlBVVCBjb3VudCAqLwotI2RlZmluZSBWTl9Q UlRZIDM1CQkJLyogQ3VycmVudCBwYXJpdHkgKi8KLSNkZWZpbmUgVk5fRElBTCAzNgkJCS8qIERJ QUwgc3RhdHVzICovCi0jZGVmaW5lIFZOX0tFWUIgMzcJCQkvKiBLZXlib2FyZCB0eXBlICovCi0j ZGVmaW5lIFZOX0NQUyAgMzgJCQkvKiBDaGFycyBwZXIgc2Vjb25kLCBsYXN0IHRyYW5zZmVyICov Ci0jZGVmaW5lIFZOX1JQTCAgMzkJCQkvKiBSZWNlaXZlIHBhY2tldCBsZW5ndGggKi8KLSNkZWZp bmUgVk5fU1BMICA0MAkJCS8qIFNlbmQgcGFja2V0IGxlbmd0aCAqLwotI2RlZmluZSBWTl9NT0RF IDQxCQkJLyogVHJhbnNmZXIgbW9kZSAodGV4dCwgYmluYXJ5KSAqLwotI2RlZmluZSBWTl9SRVhY IDQyCQkJLyogUmV4eCByZXR1cm4gdmFsdWUgKi8KLSNkZWZpbmUgVk5fTkVXTCA0MwkJCS8qIE5l d2xpbmUgY2hhcmFjdGVyIG9yIHNlcXVlbmNlICovCi0jZGVmaW5lIFZOX0NPTFMgNDQJCQkvKiBD b2x1bW5zIG9uIGNvbnNvbGUgc2NyZWVuICovCi0jZGVmaW5lIFZOX1JPV1MgNDUJCQkvKiBSb3dz IG9uIGNvbnNvbGUgc2NyZWVuICovCi0jZGVmaW5lIFZOX1RUWVAgNDYJCQkvKiBUZXJtaW5hbCB0 eXBlICovCi0jZGVmaW5lIFZOX01JTlAgNDcJCQkvKiBNSU5QVVQgcmVzdWx0ICovCi0jZGVmaW5l IFZOX0NPTk4gNDgJCQkvKiBDb25uZWN0aW9uIHR5cGUgKi8KLSNkZWZpbmUgVk5fU1lTSSA0OQkJ CS8qIFN5c3RlbSBJRCAqLwotI2RlZmluZSBWTl9UWiAgIDUwCQkJLyogVGltZXpvbmUgKi8KLSNk ZWZpbmUgVk5fU1BBICA1MQkJCS8qIFNwYWNlICovCi0jZGVmaW5lIFZOX1FVRSAgNTIJCQkvKiBR dWVyeSAqLwotI2RlZmluZSBWTl9TVEFSIDUzCQkJLyogU3RhcnR1cCBkaXJlY3RvcnkgKi8KLSNk ZWZpbmUgVk5fQ1NFVCA1NAkJCS8qIExvY2FsIGNoYXJhY3RlciBzZXQgKi8KLSNkZWZpbmUgVk5f TURNICA1NQkJCS8qIE1vZGVtIHR5cGUgKi8KLSNkZWZpbmUgVk5fRVZBTCA1NgkJCS8qIE1vc3Qg cmVjZW50IEVWQUxVQVRFIHJlc3VsdCAqLwotCi0jZGVmaW5lIFZOX0RfQ0MgNTcJCQkvKiBESUFM IENPVU5UUlktQ09ERSAqLwotI2RlZmluZSBWTl9EX0FDIDU4CQkJLyogRElBTCBBUkVBLUNPREUg Ki8KLSNkZWZpbmUgVk5fRF9JUCA1OQkJCS8qIERJQUwgSU5URVJOQVRJT05BTC1QUkVGSVggKi8K LSNkZWZpbmUgVk5fRF9MUCA2MAkJCS8qIERJQUwgTEQtUFJFRklYICovCi0KLSNkZWZpbmUgVk5f VUlEICA2MQotI2RlZmluZSBWTl9QV0QgIDYyCi0jZGVmaW5lIFZOX1BSTSAgNjMKLQotI2RlZmlu ZSBWTl9QUk9UTyA2NAkJCS8qIFByb3RvY29sICovCi0jZGVmaW5lIFZOX0RMRElSIDY1CQkJLyog RG93bmxvYWQgZGlyZWN0b3J5ICovCi0KLSNkZWZpbmUgVk5fTV9BQUEgNjYJCQkvKiBGaXJzdCBN T0RFTSBvbmUgKi8KLSNkZWZpbmUgVk5fTV9JTkkgNjYJCQkvKiBNb2RlbSBpbml0IHN0cmluZyAq LwotI2RlZmluZSBWTl9NX0RDTSA2NwkJCS8qIE1vZGVtIGRpYWwgY29tbWFuZCAqLwotI2RlZmlu ZSBWTl9NX0RDTyA2OAkJCS8qIE1vZGVtIGRhdGEgY29tcHJlc3Npb24gb24gKi8KLSNkZWZpbmUg Vk5fTV9EQ1ggNjkJCQkvKiBNb2RlbSBkYXRhIGNvbXByZXNzaW9uIG9mZiAqLwotI2RlZmluZSBW Tl9NX0VDTyA3MAkJCS8qIE1vZGVtIGVycm9yIGNvcnJlY3Rpb24gb24gKi8KLSNkZWZpbmUgVk5f TV9FQ1ggNzEJCQkvKiBNb2RlbSBlcnJvciBjb3JyZWN0aW9uIG9mZiAqLwotI2RlZmluZSBWTl9N X0FBTyA3MgkJCS8qIE1vZGVtIGF1dG9hbnN3ZXIgb24gKi8KLSNkZWZpbmUgVk5fTV9BQVggNzMJ CQkvKiBNb2RlbSBhdXRvYW5zd2VyIG9mZiAqLwotI2RlZmluZSBWTl9NX0hVUCA3NAkJCS8qIE1v ZGVtIGhhbmd1cCBjb21tYW5kICovCi0jZGVmaW5lIFZOX01fSFdGIDc1CQkJLyogTW9kZW0gaGFy ZHdhcmUgZmxvdyBjb21tYW5kICovCi0jZGVmaW5lIFZOX01fU1dGIDc2CQkJLyogTW9kZW0gc29m dHdhcmUgZmxvdyBjb21tYW5kICovCi0jZGVmaW5lIFZOX01fTkZDIDc3CQkJLyogTW9kZW0gbm8g Zmxvdy1jb250cm9sIGNvbW1hbmQgKi8KLSNkZWZpbmUgVk5fTV9QRE0gNzgJCQkvKiBNb2RlbSBw dWxzZSBkaWFsaW5nIG1vZGUgKi8KLSNkZWZpbmUgVk5fTV9URE0gNzkJCQkvKiBNb2RlbSB0b25l IGRpYWxpbmcgbW9kZSAqLwotI2RlZmluZSBWTl9NX1paWiA3OQkJCS8qIExhc3QgTU9ERU0gb25l ICovCi0KLSNkZWZpbmUgVk5fU0VMQ1QgODAJCQkvKiBTZWxlY3RlZCBUZXh0IGZyb20gTWFyayBN b2RlICovCi0jZGVmaW5lIFZOX1RFTVAgIDgxCQkJLyogVGVtcG9yYXJ5IGRpcmVjdG9yeSAqLwot I2RlZmluZSBWTl9JU1RBVCA4MgkJCS8qIElOUFVUIGNvbW1hbmQgc3RhdHVzICovCi0jZGVmaW5l IFZOX0lOSSAgIDgzCQkJLyogSU5JIChrZXJtcmMpIGRpcmVjdG9yeSAqLwotI2RlZmluZSBWTl9F WEVESVIgODQJCQkvKiBFWEUgZGlyZWN0b3J5ICovCi0jZGVmaW5lIFZOX0VSUk5PICA4NQkJCS8q IFZhbHVlIG9mIGVycm5vICovCi0jZGVmaW5lIFZOX0VSU1RSICA4NgkJCS8qIENvcnJlc3BvbmRp bmcgZXJyb3IgbWVzc2FnZSAqLwotI2RlZmluZSBWTl9URkxOICAgODcJCQkvKiBUQUtFIGZpbGUg bGluZSBudW1iZXIgKi8KLSNkZWZpbmUgVk5fWFZOVU0gIDg4CQkJLyogUHJvZHVjdC1zcGVjaWZp YyB2ZXJzaW9uIG51bWJlciAqLwotI2RlZmluZSBWTl9SUFNJWiAgODkJCQkvKiBSZWNlaXZlIHBh Y2tldCBsZW5ndGggKi8KLSNkZWZpbmUgVk5fV0lORE8gIDkwCQkJLyogV2luZG93IHNpemUgKi8K LSNkZWZpbmUgVk5fTURNU0cgIDkxCQkJLyogTW9kZW0gbWVzc2FnZSAqLwotI2RlZmluZSBWTl9E TlVNICAgOTIJCQkvKiBEaWFsIG51bWJlciAqLwotI2RlZmluZSBWTl9BUEMgICAgOTMJCQkvKiBB UEMgYWN0aXZlICovCi0jZGVmaW5lIFZOX0lQQUREUiA5NAkJCS8qIE15IElQIGFkZHJlc3MgKi8K LSNkZWZpbmUgVk5fQ1JDMTYgIDk1CQkJLyogQ1JDLTE2IG9mIG1vc3QgcmVjZW50IGZpbGUgZ3Jv dXAgKi8KLSNkZWZpbmUgVk5fVFJNSyAgIDk2ICAgICAgICAgICAgICAgICAgICAvKiBNYWNybyBl eGVjdXRlZCBmcm9tIFRlcm1pbmFsIE1vZGUgKi8KLSNkZWZpbmUgVk5fUElEICAgIDk3CQkJLyog UHJvY2VzcyBJRCAqLwotI2RlZmluZSBWTl9GTkFNICAgOTgJCQkvKiBOYW1lIG9mIGZpbGUgYmVp bmcgdHJhbnNmZXJyZWQgKi8KLSNkZWZpbmUgVk5fRk5VTSAgIDk5CQkJLyogTnVtYmVyIG9mIGZp bGUgYmVpbmcgdHJhbnNmZXJyZWQgKi8KLSNkZWZpbmUgVk5fUEVYSVQgIDEwMAkJCS8qIFByb2Nl c3MgZXhpdCBzdGF0dXMgKi8KLSNkZWZpbmUgVk5fUF9DVEwgIDEwMSAJCQkvKiBDb250cm9sIFBy ZWZpeCAqLwotI2RlZmluZSBWTl9QXzhCSVQgMTAyCQkJLyogOC1iaXQgcHJlZml4ICovCi0jZGVm aW5lIFZOX1BfUlBUICAxMDMJCQkvKiBSZXBlYXQgY291bnQgcHJlZml4ICovCi0jZGVmaW5lIFZO X0RfTENQICAxMDQJCQkvKiBESUFMIExPQ0FMLVBSRUZJWCAqLwotI2RlZmluZSBWTl9VUkwgICAg MTA1CQkJLyogTGFzdCBVUkwgc2VsZWN0ZWQgKi8KLSNkZWZpbmUgVk5fUkVHTiAgIDEwNgkJCS8q IFJlZ2lzdHJhdGlvbiBOYW1lICovCi0jZGVmaW5lIFZOX1JFR08gICAxMDcJCQkvKiBSZWdpc3Ry YXRpb24gT3JnYW5pemF0aW9uICovCi0jZGVmaW5lIFZOX1JFR1MgICAxMDgJCQkvKiBSZWdpc3Ry YXRpb24gU2VyaWFsIG51bWJlciAqLwotI2RlZmluZSBWTl9YUFJPRyAgMTA5CQkJLyogeHByb2dy YW0gKGxpa2UgeHZlcnNpb24pICovCi0jZGVmaW5lIFZOX0VESVRPUiAxMTAJCQkvKiBFZGl0b3Ig Ki8KLSNkZWZpbmUgVk5fRURPUFQgIDExMQkJCS8qIEVkaXRvciBvcHRpb25zICovCi0jZGVmaW5l IFZOX0VERklMRSAxMTIJCQkvKiBFZGl0b3IgZmlsZSAqLwotI2RlZmluZSBWTl9CUk9XU1IgMTEz CQkJLyogQnJvd3NlciAqLwotI2RlZmluZSBWTl9CUk9QVCAgMTE0CQkJLyogQnJvd3NlciBvcHRp b25zICovCi0jZGVmaW5lIFZOX0hFUkFMRCAxMTUJCQkvKiBQcm9ncmFtIGhlcmFsZCAqLwotI2Rl ZmluZSBWTl9URVNUICAgMTE2CQkJLyogUHJvZ3JhbSB0ZXN0IGxldmVsIG9yICIwIiAqLwotI2Rl ZmluZSBWTl9YRlNUQVQgMTE3CQkJLyogRmlsZS1UcmFuc2ZlciBzdGF0dXMgKi8KLSNkZWZpbmUg Vk5fWEZNU0cgIDExOQkJCS8qIEZpbGUtVHJhbnNmZXIgbWVzc2FnZSAqLwotI2RlZmluZSBWTl9T TkRMICAgMTIwCQkJLyogU2VuZC1saXN0IHN0YXR1cyAqLwotI2RlZmluZSBWTl9UUklHICAgMTIx CQkJLyogVHJpZ2dlciB2YWx1ZSAqLwotI2RlZmluZSBWTl9NT1VfWCAgMTIyICAgICAgICAgICAg ICAgICAgIC8qIE9TLzIgTW91c2UgQ3Vyc29yIFggKi8KLSNkZWZpbmUgVk5fTU9VX1kgIDEyMyAg ICAgICAgICAgICAgICAgICAvKiBPUy8yIE1vdXNlIEN1cnNvciBZICovCi0jZGVmaW5lIFZOX1BS SU5UICAxMjQJCQkvKiBQcmludGVyICovCi0jZGVmaW5lIFZOX0VTQyAgICAxMjUJCQkvKiBFc2Nh cGUgY2hhcmFjdGVyICovCi0jZGVmaW5lIFZOX0lOVElNRSAxMjYJCQkvKiBJTlBVVCBlbGFwc2Vk IHRpbWUgKi8KLSNkZWZpbmUgVk5fSzRSTE0gIDEyNwkJCS8qIEtlcmJlcm9zIDQgUmVhbG0gKi8K LSNkZWZpbmUgVk5fSzVSTE0gIDEyOAkJCS8qIEtlcmJlcm9zIDUgUmVhbG0gKi8KLSNkZWZpbmUg Vk5fSzRQUk4gIDEyOQkJCS8qIEtlcmJlcm9zIDQgUHJpbmNpcGFsICovCi0jZGVmaW5lIFZOX0s1 UFJOICAxMzAJCQkvKiBLZXJiZXJvcyA1IFByaW5jaXBhbCAqLwotI2RlZmluZSBWTl9LNENDICAg MTMxCQkJLyogS2VyYmVyb3MgNCBDcmVkZW50aWFscyBDYWNoZSAqLwotI2RlZmluZSBWTl9LNUND ICAgMTMyCQkJLyogS2VyYmVyb3MgNSBDcmVkZW50aWFscyBDYWNoZSAqLwotI2RlZmluZSBWTl9P U05BTSAgMTMzCQkJLyogT1MgbmFtZSAqLwotI2RlZmluZSBWTl9PU1ZFUiAgMTM0CQkJLyogT1Mg dmVyc2lvbiAqLwotI2RlZmluZSBWTl9PU1JFTCAgMTM1CQkJLyogT1MgcmVsZWFzZSAqLwotI2Rl ZmluZSBWTl9OQU1FICAgMTM2CQkJLyogTmFtZSBJIHdhcyBjYWxsZWQgYnkgKi8KLSNkZWZpbmUg Vk5fTU9ETCAgIDEzNwkJCS8qIENQVSBtb2RlbCAqLwotI2RlZmluZSBWTl9YMjVMQSAgMTM4CQkJ LyogWC4yNSBsb2NhbCBhZGRyZXNzICovCi0jZGVmaW5lIFZOX1gyNVJBICAxMzkJCQkvKiBYLjI1 IHJlbW90ZSBhZGRyZXNzICovCi0jZGVmaW5lIFZOX0s0U1JWICAxNDAgICAgICAgICAgICAgICAg ICAgLyogS2VyYmVyb3MgNCBTZXJ2aWNlIE5hbWUgKi8KLSNkZWZpbmUgVk5fSzVTUlYgIDE0MSAg ICAgICAgICAgICAgICAgICAvKiBLZXJiZXJvcyA1IFNlcnZpY2UgTmFtZSAqLwotI2RlZmluZSBW Tl9QRFNGWCAgMTQyCQkJLyogUERJQUwgc3VmZml4ICovCi0jZGVmaW5lIFZOX0RUWVBFICAxNDMJ CQkvKiBESUFMIHR5cGUgKi8KLSNkZWZpbmUgVk5fTENLUElEIDE0NAkJCS8qIExvY2tmaWxlIFBJ RCAoVU5JWCkgKi8KLSNkZWZpbmUgVk5fQkxLICAgIDE0NQkJCS8qIEJsb2NrIGNoZWNrICovCi0j ZGVmaW5lIFZOX1RGVElNICAxNDYJCQkvKiBGaWxlIHRyYW5zZmVyIGVsYXBzZWQgdGltZSAqLwot I2RlZmluZSBWTl9EX1BYWCAgMTQ3IAkJCS8qIERJQUwgUEJYLUVYQ0hBTkdFICovCi0jZGVmaW5l IFZOX0hXUEFSICAxNDggCQkJLyogSGFyZHdhcmUgUGFyaXR5ICovCi0jZGVmaW5lIFZOX1NFUklB TCAxNDkgCQkJLyogU0VUIFNFUklBTCB2YWx1ZSAqLwotI2RlZmluZSBWTl9MQ0tESVIgMTUwCQkJ LyogTG9ja2ZpbGUgZGlyZWN0b3J5IChVTklYKSAqLwotCi0jZGVmaW5lIFZOX0s0RU5PICAxNTEg ICAgICAgICAgICAgICAgICAgLyogS2VyYmVyb3MgNCBMYXN0IEVycm5vICovCi0jZGVmaW5lIFZO X0s0RU1TRyAxNTIgICAgICAgICAgICAgICAgICAgLyogS2VyYmVyb3MgNCBMYXN0IEVyciBNc2cg Ki8KLSNkZWZpbmUgVk5fSzVFTk8gIDE1MyAgICAgICAgICAgICAgICAgICAvKiBLZXJiZXJvcyA1 IExhc3QgRXJybm8gKi8KLSNkZWZpbmUgVk5fSzVFTVNHIDE1NCAgICAgICAgICAgICAgICAgICAv KiBLZXJiZXJvcyA1IExhc3QgRXJyIE1zZyAqLwotCi0jZGVmaW5lIFZOX0lOVE1PICAxNTUJCQkv KiBJbnB1dCB0aW1lb3V0ICovCi0jZGVmaW5lIFZOX0FVVEhTICAxNTYgICAgICAgICAgICAgICAg ICAgLyogQXV0aGVudGljYXRpb24gU3RhdGUgKi8KLQotI2RlZmluZSBWTl9ETV9MUCAgMTU3CQkJ LyogRGlhbCBNb2RpZmllcjogTG9uZyBQYXVzZSAqLwotI2RlZmluZSBWTl9ETV9TUCAgMTU4CQkJ LyogRGlhbCBNb2RpZmllcjogU2hvcnQgUGF1c2UgKi8KLSNkZWZpbmUgVk5fRE1fUEQgIDE1OQkJ CS8qIERpYWwgTW9kaWZpZXI6IFB1bHNlIERpYWwgKi8KLSNkZWZpbmUgVk5fRE1fVEQgIDE2MAkJ CS8qIERpYWwgTW9kaWZpZXI6IFRvbmUgRGlhbCAqLwotI2RlZmluZSBWTl9ETV9XQSAgMTYxCQkJ LyogRGlhbCBNb2RpZmllcjogV2FpdCBmb3IgQW5zd2VyICovCi0jZGVmaW5lIFZOX0RNX1dEICAx NjIJCQkvKiBEaWFsIE1vZGlmaWVyOiBXYWl0IGZvciBEaWFsdG9uZSAqLwotI2RlZmluZSBWTl9E TV9SQyAgMTYzCQkJLyogRGlhbCBNb2RpZmllcjogUmV0dXJuIHRvIENvbW1hbmQgKi8KLQotLyog KG1vcmUgYmVsb3cuLi4pICovCi0KLSNkZWZpbmUgVk5fVFlfTE4gIDE2NAkJCS8qIFRZUEUgY29t bWFuZCBsaW5lIG51bWJlciAqLwotI2RlZmluZSBWTl9UWV9MQyAgMTY1CQkJLyogVFlQRSBjb21t YW5kIGxpbmUgY291bnQgKi8KLSNkZWZpbmUgVk5fVFlfTE0gIDE2NgkJCS8qIFRZUEUgY29tbWFu ZCBtYXRjaCBjb3VudCAqLwotCi0jZGVmaW5lIFZOX01BQ0xWTCAxNjcJCQkvKiBcdihtYWNsZXZl bCkgKi8KLQotI2RlZmluZSBWTl9YRl9CQyAgMTY4CQkJLyogVHJhbnNmZXIgYmxvY2tjaGVjayBl cnJvcnMgKi8KLSNkZWZpbmUgVk5fWEZfVE0gIDE2OQkJCS8qIFRyYW5zZmVyIHRpbWVvdXRzICov Ci0jZGVmaW5lIFZOX1hGX1JYICAxNzAJCQkvKiBUcmFuc2ZlciByZXRyYW5zbWlzc2lvbnMgKi8K LQotI2RlZmluZSBWTl9NX05BTSAgMTcxCQkJLyogTW9kZW0gZnVsbCBuYW1lICAqLwotI2RlZmlu ZSBWTl9NU19DRCAgMTcyCQkJLyogTW9kZW0gc2lnbmFsIENEICAqLwotI2RlZmluZSBWTl9NU19D VFMgMTczCQkJLyogTW9kZW0gc2lnbmFsIENUUyAqLwotI2RlZmluZSBWTl9NU19EU1IgMTc0CQkJ LyogTW9kZW0gc2lnbmFsIERTUiAqLwotI2RlZmluZSBWTl9NU19EVFIgMTc1CQkJLyogTW9kZW0g c2lnbmFsIERUUiAqLwotI2RlZmluZSBWTl9NU19SSSAgMTc2CQkJLyogTW9kZW0gc2lnbmFsIFJJ ICAqLwotI2RlZmluZSBWTl9NU19SVFMgMTc3CQkJLyogTW9kZW0gc2lnbmFsIFJUUyAqLwotCi0j ZGVmaW5lIFZOX01BVENIICAxNzgJCQkvKiBNb3N0IHJlY2VudCBwYXR0ZXJuIG1hdGNoICovCi0j ZGVmaW5lIFZOX1NMTVNHICAxNzkJCQkvKiBTRVQgTElORSAoZXJyb3IpIG1lc3NhZ2UgKi8KLSNk ZWZpbmUgVk5fVFhURElSIDE4MAkJCS8qIEtlcm1pdCB0ZXh0LWZpbGUgZGlyZWN0b3J5ICovCi0j ZGVmaW5lIFZOX01BX1BJICAxODEJCQkvKiBNYXRoIGNvbnN0YW50IFBpICovCi0jZGVmaW5lIFZO X01BX0UgICAxODIJCQkvKiBNYXRoIGNvbnN0YW50IGUgKi8KLSNkZWZpbmUgVk5fTUFfUFIgIDE4 MwkJCS8qIE1hdGggcHJlY2lzaW9uIChkaWdpdHMpICovCi0jZGVmaW5lIFZOX0NNREJMICAxODQJ CQkvKiBDb21tYW5kIGJ1ZmZlciBsZW5ndGggKi8KLQotI2RlZmluZSBWTl9BVVRIVCAgMTg1ICAg ICAgICAgICAgICAgICAgIC8qIEF1dGhlbnRpY2F0aW9uIFR5cGUgKi8KLQotI2lmZGVmIENLQ0hB Tk5FTElPCi0jZGVmaW5lIFZOX0ZFUlIgICAxODYJCQkvKiBGSUxFIGVycm9yICovCi0jZGVmaW5l IFZOX0ZNQVggICAxODcJCQkvKiBGSUxFIG1heCAqLwotI2RlZmluZSBWTl9GQ09VICAgMTg4CQkJ LyogUmVzdWx0IG9mIGxhc3QgRklMRSBDT1VOVCAqLwotI2VuZGlmIC8qIENLQ0hBTk5FTElPICov Ci0KLSNkZWZpbmUgVk5fRFJUUiAgIDE4OQkJCS8qIERJQUwgcmV0cnkgY291bnRlciAqLwotI2Rl ZmluZSBWTl9DWFRJTUUgMTkwCQkJLyogRWxhcHNlZCB0aW1lIGluIHNlc3Npb24gKi8KLSNkZWZp bmUgVk5fQllURSAgIDE5MQkJCS8qIEJ5dGUgb3JkZXIgKi8KLSNkZWZpbmUgVk5fQVVUSE4gIDE5 MiAgICAgICAgICAgICAgICAgICAvKiBBdXRoZW50aWNhdGlvbiBOYW1lICovCi0jZGVmaW5lIFZO X0tCQ0hBUiAxOTMJCQkvKiBrYmNoYXIgKi8KLSNkZWZpbmUgVk5fVFRZTkFNIDE5NAkJCS8qIE5h bWUgb2YgY29udHJvbGxpbmcgdGVybWluYWwgKi8KLQotI2RlZmluZSBWTl9YNTA5X1MgMTk1ICAg ICAgICAgICAgICAgICAgIC8qIFguNTA5IENlcnRpZmljYXRlIFN1YmplY3QgKi8KLSNkZWZpbmUg Vk5fWDUwOV9JIDE5NiAgICAgICAgICAgICAgICAgICAvKiBYLjUwOSBDZXJ0aWZpY2F0ZSBJc3N1 ZXIgICovCi0KLSNkZWZpbmUgVk5fUFJPTVBUIDE5NwkJCS8qIEMtS2VybWl0J3MgcHJvbXB0ICov Ci0jZGVmaW5lIFZOX0JVSUxEICAxOTgJCQkvKiBCdWlsZCBJRCBzdHJpbmcgKi8KLQotI2RlZmlu ZSBWTl9TRVhQICAgMTk5CQkJLyogTGFzdCBTLUV4cHJlc3Npb24gKi8KLSNkZWZpbmUgVk5fVlNF WFAgIDIwMAkJCS8qIFZhbHVlIG9mIGxhc3QgUy1FeHByZXNzaW9uICovCi0jZGVmaW5lIFZOX0xT RVhQICAyMDEJCQkvKiBTRVhQIGRlcHRoICovCi0KLSNkZWZpbmUgVk5fRlRJTUUgIDIwMgkJCS8q IFRpbWUgYXMgZmxvYXRpbmctcG9pbmcgbnVtYmVyICovCi0KLSNkZWZpbmUgVk5fRlRQX0MgIDIw MyAgICAgICAgICAgICAgICAgICAvKiBGVFAgUmVwbHkgQ29kZSAqLwotI2RlZmluZSBWTl9GVFBf TSAgMjA0ICAgICAgICAgICAgICAgICAgIC8qIEZUUCBSZXBseSBNZXNzYWdlICovCi0jZGVmaW5l IFZOX0ZUUF9TICAyMDUJCQkvKiBGVFAgU2VydmVyIHR5cGUgKi8KLSNkZWZpbmUgVk5fRlRQX0gg IDIwNgkJCS8qIEZUUCBIb3N0ICovCi0jZGVmaW5lIFZOX0ZUUF9YICAyMDcJCQkvKiBGVFAgQ29u bmVjdGVkICovCi0jZGVmaW5lIFZOX0ZUUF9MICAyMDgJCQkvKiBGVFAgTG9nZ2VkIGluICovCi0j ZGVmaW5lIFZOX0ZUUF9HICAyMDkJCQkvKiBGVFAgR0VULVBVVC1SRU1PVEUgc2V0dGluZyAqLwot Ci0jZGVmaW5lIFZOX1NFQ1VSRSAyMTAgICAgICAgICAgICAgICAgICAgLyogRW5jcnlwdGVkIGNv bm5lY3Rpb24gMCBvciAxICovCi0KLSNkZWZpbmUgVk5fRE1fSEYgIDIxMQkJCS8qIERpYWwgTW9k aWZpZXI6IEhvb2sgRmxhc2ggKi8KLSNkZWZpbmUgVk5fRE1fV0IgIDIxMgkJCS8qIERpYWwgTW9k aWZpZXI6IFdhaXQgZm9yIEJvbmcgKi8KLSNkZWZpbmUgVk5fQ1hfU1RBIDIxMwkJCS8qIENYX1NU QVRVUyAqLwotCi0jZGVmaW5lIFZOX0ZUUF9CICAyMTQgICAgICAgICAgICAgICAgICAgLyogRlRQ IENQTCAqLwotI2RlZmluZSBWTl9GVFBfRCAgMjE1ICAgICAgICAgICAgICAgICAgIC8qIEZUUCBE UEwgKi8KLSNkZWZpbmUgVk5fRlRQX1ogIDIxNiAgICAgICAgICAgICAgICAgICAvKiBGVFAgU0VD VVJJVFkgKi8KLSNkZWZpbmUgVk5fSFRUUF9DIDIxNyAgICAgICAgICAgICAgICAgICAvKiBIVFRQ IENvZGUgKi8KLSNkZWZpbmUgVk5fSFRUUF9OIDIxOCAgICAgICAgICAgICAgICAgICAvKiBIVFRQ IENvbm5lY3RlZCAqLwotI2RlZmluZSBWTl9IVFRQX0ggMjE5ICAgICAgICAgICAgICAgICAgIC8q IEhUVFAgSG9zdCAqLwotI2RlZmluZSBWTl9IVFRQX00gMjIwICAgICAgICAgICAgICAgICAgIC8q IEhUVFAgTWVzc2FnZSAqLwotI2RlZmluZSBWTl9IVFRQX1MgMjIxICAgICAgICAgICAgICAgICAg IC8qIEhUVFAgU2VjdXJpdHkgKi8KLQotI2RlZmluZSBWTl9OT1cgICAgMjIyCQkJLyogVGltZXN0 YW1wIHl5eXltbWRkIGhoOm1tOnNzICovCi0jZGVmaW5lIFZOX0hPVVIgICAyMjMJCQkvKiBDdXJy ZW50IGhvdXIgb2YgdGhlIGRheSAwLTIzICovCi0KLSNkZWZpbmUgVk5fQ0lfREEgIDIyNAkJCS8q IENhbGxlciBJRCBkYXRlICovCi0jZGVmaW5lIFZOX0NJX1RJICAyMjUJCQkvKiBDYWxsZXIgSUQg dGltZSAqLwotI2RlZmluZSBWTl9DSV9OQSAgMjI2CQkJLyogQ2FsbGVyIElEIG5hbWUgKi8KLSNk ZWZpbmUgVk5fQ0lfTlUgIDIyNwkJCS8qIENhbGxlciBJRCBudW1iZXIgKi8KLSNkZWZpbmUgVk5f Q0lfTUUgIDIyOAkJCS8qIENhbGxlciBJRCBtZXNzYWdlICovCi0jZGVmaW5lIFZOX1BFUlNPTkFM IDIyOSAgICAgICAgICAgICAgICAgLyogUGVyc29uYWwgRGlyZWN0b3J5IG9uIFdpbmRvd3MgKi8K LSNkZWZpbmUgVk5fQVBQREFUQSAgMjMwICAgICAgICAgICAgICAgICAvKiBVc2VyIEFwcERhdGEg ZGlyZWN0b3J5ICovCi0jZGVmaW5lIFZOX0NPTU1PTiAgIDIzMSAgICAgICAgICAgICAgICAgLyog Q29tbW9uIEFwcERhdGEgZGlyZWN0b3J5ICovCi0jZGVmaW5lIFZOX0RFU0tUT1AgIDIzMiAgICAg ICAgICAgICAgICAgLyogVXNlciBEZXNrdG9wIGRpcmVjdG9yeSAqLwotI2RlZmluZSBWTl9UTkNf U0lHICAyMzMgICAgICAgICAgICAgICAgIC8qIFJGQyAyNzE3IFNpZ25hdHVyZSAqLwotCi0jaWZk ZWYgS1VJCi0jZGVmaW5lIFZOX0dVSV9YUCAgIDIzNCAgICAgICAgICAgICAgICAgLyogR1VJIFdp bmRvdyBYIHBvc2l0aW9uICovCi0jZGVmaW5lIFZOX0dVSV9ZUCAgIDIzNSAgICAgICAgICAgICAg ICAgLyogR1VJIFdpbmRvdyBZIHBvc2l0aW9uICovCi0jZGVmaW5lIFZOX0dVSV9YUiAgIDIzNiAg ICAgICAgICAgICAgICAgLyogR1VJIFdpbmRvdyBYIHJlc29sdXRpb24gKi8KLSNkZWZpbmUgVk5f R1VJX1lSICAgMjM3ICAgICAgICAgICAgICAgICAvKiBHVUkgV2luZG93IFkgcmVzb2x1dGlvbiAq LwotI2RlZmluZSBWTl9HVUlfUlVOICAyMzggICAgICAgICAgICAgICAgIC8qIEdVSSBXaW5kb3cg UnVuIG1vZGUgKi8KLSNkZWZpbmUgVk5fR1VJX0ZOTSAgMjM5ICAgICAgICAgICAgICAgICAvKiBH VUkgV2luZG93IEZvbnQgTmFtZSAqLwotI2RlZmluZSBWTl9HVUlfRlNaICAyNDAgICAgICAgICAg ICAgICAgIC8qIEdVSSBXaW5kb3cgRm9udCBTaXplICovCi0jZW5kaWYgLyogS1VJICovCi0KLSNk ZWZpbmUgVk5fTE9HX1BLVCAgMjQxICAgICAgICAgICAgICAgICAvKiBQYWNrZXQgTG9nIEZpbGVu YW1lICovCi0jZGVmaW5lIFZOX0xPR19UUkEgIDI0MiAgICAgICAgICAgICAgICAgLyogVHJhbnNh Y3Rpb24gTG9nIEZpbGVuYW1lICovCi0jZGVmaW5lIFZOX0xPR19TRVMgIDI0MyAgICAgICAgICAg ICAgICAgLyogU2Vzc2lvbiBMb2cgRmlsZW5hbWUgKi8KLSNkZWZpbmUgVk5fTE9HX0RFQiAgMjQ0 ICAgICAgICAgICAgICAgICAvKiBEZWJ1ZyBMb2cgRmlsZW5hbWUgKi8KLSNkZWZpbmUgVk5fTE9H X0NPTiAgMjQ1ICAgICAgICAgICAgICAgICAvKiBDb25uZWN0aW9uIExvZyBGaWxlbmFtZSAqLwot Ci0jZGVmaW5lIFZOX0lTQ0FMRSAgIDI0NgkJCS8qIElOUFVUIHNjYWxlIGZhY3RvciAqLwotI2Rl ZmluZSBWTl9CSVRTICAgICAyNDcJCQkvKiBCaXRzIG9mIHRoaXMgYnVpbGQgKDE2LCAzMiwgNjQp ICovCi0jZGVmaW5lIFZOX0xBU1RGSUwgIDI0OAkJCS8qIExhc3QgaW5wdXQgZmlsZXNwZWMgKi8K LSNkZWZpbmUgVk5fTEFTVEtXViAgMjQ5CQkJLyogTGFzdCBcZmtleXdvcmR2YWx1ZSgpIGtleXdv cmQgKi8KLSNkZWZpbmUgVk5fRE1TRyAgICAgMjUwCQkJLyogTXNnIGNvcnJlc3BvbmRpbmcgdG8g ZGlhbHN0YXR1cyAqLwotI2RlZmluZSBWTl9IT1NUSVAgICAyNTEJCQkvKiBJUCBhZGRyZXNzIG9m IHJlbW90ZSBob3N0ICovCi0jZGVmaW5lIFZOX0lOUE1TRyAgIDI1MgkJCS8qIE1zZyBjb3JyZXNw b25kaW5nIHRvIGluc3RhdHVzICovCi0jZGVmaW5lIFZOX1ZBUkVWQUwgIDI1MwkJCS8qIFNFVCBW QVJJQUJMRS1FVkFMVUFUSU9OIHNldHRpbmcgKi8KLSNkZWZpbmUgVk5fUFJFVkNNRCAgMjU0CQkJ LyogUHJldmlvdXMgY29tbWFuZCAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0KLS8qIElOUFVUIHN0 YXR1cyB2YWx1ZXMgKi8KLQotI2RlZmluZSBJTlBfT0sgIDAJCQkvKiBTdWNjZWVkZWQgKi8KLSNk ZWZpbmUgSU5QX1RPICAxCQkJLyogVGltZWQgb3V0ICovCi0jZGVmaW5lIElOUF9VSSAgMgkJCS8q IFVzZXIgaW50ZXJydXB0ZWQgKi8KLSNkZWZpbmUgSU5QX0lFICAzCQkJLyogSW50ZXJuYWwgZXJy b3IgKi8KLSNkZWZpbmUgSU5QX0lPICA0CQkJLyogSS9PIGVycm9yIG9yIGNvbm5lY3Rpb24gbG9z dCAqLwotI2RlZmluZSBJTlBfSUtTIDUgICAgICAgICAgICAgICAgICAgICAgIC8qIEtlcm1pdCBT ZXJ2ZXIgQWN0aXZlICovCi0jZGVmaW5lIElOUF9CRiAgNgkJCS8qIEJ1ZmZlciBmdWxsICovCi0K LS8qIElOUFVUIHN3aXRjaCB2YWx1ZXMgKi8KLQotI2RlZmluZSBJTlBTV19OT00gMQkJCS8qIC9O T01BVENIICovCi0jZGVmaW5lIElOUFNXX0NMUiAyCQkJLyogL0NMRUFSICovCi0jZGVmaW5lIElO UFNXX05PVyA0CQkJLyogL05PV1JBUCAqLwotI2RlZmluZSBJTlBTV19DT1UgOAkJCS8qIC9DT1VO VCAqLwotCi0jaWZuZGVmIE5PU1BMCi0vKiBTeW1ib2xzIGZvciBidWlsdGluIGZ1bmN0aW9ucyAq LwotCi0jZGVmaW5lIEZOQVJHUyA2CQkJLyogTWF4aW11bSBudW1iZXIgb2YgZnVuY3Rpb24gYXJn cyAqLwotCi0jZGVmaW5lIEZOX0lORCAgICAgIDAJCQkvKiBJbmRleCAob2Ygc3RyaW5nIDEgaW4g c3RyaW5nIDIpICovCi0jZGVmaW5lIEZOX0xFTiAgICAgIDEJCQkvKiBMZW5ndGggKG9mIHN0cmlu ZykgKi8KLSNkZWZpbmUgRk5fTElUICAgICAgMgkJCS8qIExpdGVyYWwgKGRvbid0IGV4cGFuZCB0 aGUgc3RyaW5nKSAqLwotI2RlZmluZSBGTl9MT1cgICAgICAzCQkJLyogTG93ZXIgKGNvbnZlcnQg dG8gbG93ZXJjYXNlKSAqLwotI2RlZmluZSBGTl9NQVggICAgICA0CQkJLyogTWF4IChtYXhpbXVt KSAqLwotI2RlZmluZSBGTl9NSU4gICAgICA1CQkJLyogTWluIChtaW5pbXVtKSAqLwotI2RlZmlu ZSBGTl9NT0QgICAgICA2CQkJLyogTW9kIChtb2R1bHVzKSAqLwotI2RlZmluZSBGTl9FVkEgICAg ICA3CQkJLyogRXZhbCAoZXZhbHVhdGUgYXJpdGggZXhwcmVzc2lvbikgKi8KLSNkZWZpbmUgRk5f U1VCICAgICAgOAkJCS8qIFN1YnN0ciAoc3Vic3RyaW5nKSAqLwotI2RlZmluZSBGTl9VUFAgICAg ICA5CQkJLyogVXBwZXIgKGNvbnZlcnQgdG8gdXBwZXJjYXNlKSAqLwotI2RlZmluZSBGTl9SRVYg ICAgICAxMAkJCS8qIFJldmVyc2UgKGEgc3RyaW5nKSAqLwotI2RlZmluZSBGTl9SRVAgICAgICAx MQkJCS8qIFJlcGVhdCAoYSBzdHJpbmcpICovCi0jZGVmaW5lIEZOX0VYRSAgICAgIDEyCQkJLyog RXhlY3V0ZSAoYSBtYWNybykgKi8KLSNkZWZpbmUgRk5fVkFMICAgICAgMTMJCQkvKiBSZXR1cm4g dmFsdWUgKG9mIGEgbWFjcm8pICovCi0jZGVmaW5lIEZOX0xQQSAgICAgIDE0CQkJLyogTFBBRCAo bGVmdCBwYWQpICovCi0jZGVmaW5lIEZOX1JQQSAgICAgIDE1CQkJLyogUlBBRCAocmlnaHQgcGFk KSAqLwotI2RlZmluZSBGTl9ERUYgICAgICAxNgkJCS8qIERlZmluaXRpb24gb2YgYSBtYWNybywg dW5leHBhbmRlZCAqLwotI2RlZmluZSBGTl9DT04gICAgICAxNwkJCS8qIENvbnRlbnRzIG9mIGEg dmFyaWFibGUsIGRpdHRvICovCi0jZGVmaW5lIEZOX0ZJTCAgICAgIDE4CQkJLyogRmlsZSBsaXN0 ICovCi0jZGVmaW5lIEZOX0ZDICAgICAgIDE5CQkJLyogRmlsZSBjb3VudCAqLwotI2RlZmluZSBG Tl9DSFIgICAgICAyMAkJCS8qIENoYXJhY3RlciAobGlrZSBCQVNJQyBDSFIkKCkpICovCi0jZGVm aW5lIEZOX1JJRyAgICAgIDIxCQkJLyogUmlnaHQgKGxpa2UgQkFTSUMgUklHSFQkKCkpICovCi0j ZGVmaW5lIEZOX0NPRCAgICAgIDIyCQkJLyogQ29kZSB2YWx1ZSBvZiBjaGFyYWN0ZXIgKi8KLSNk ZWZpbmUgRk5fUlBMICAgICAgMjMJCQkvKiBSZXBsYWNlICovCi0jZGVmaW5lIEZOX0ZEICAgICAg IDI0CQkJLyogRmlsZSBkYXRlICovCi0jZGVmaW5lIEZOX0ZTICAgICAgIDI1CQkJLyogRmlsZSBz aXplICovCi0jZGVmaW5lIEZOX1JJWCAgICAgIDI2CQkJLyogUmluZGV4IChpbmRleCBmcm9tIHJp Z2h0KSAqLwotI2RlZmluZSBGTl9WRVIgICAgICAyNwkJCS8qIFZlcmlmeSAqLwotI2RlZmluZSBG Tl9JUEEgICAgICAyOAkJCS8qIEZpbmQgYW5kIHJldHVybiBJUCBhZGRyZXNzICovCi0jZGVmaW5l IEZOX0NSWSAgICAgIDM5CQkJLyogLi4uICovCi0jZGVmaW5lIEZOX09PWCAgICAgIDQwCQkJLyog Li4uICovCi0jZGVmaW5lIEZOX0hFWCAgICAgIDQxCQkJLyogSGV4aWZ5ICovCi0jZGVmaW5lIEZO X1VOSCAgICAgIDQyCQkJLyogVW5oZXhpZnkgKi8KLSNkZWZpbmUgRk5fQlJLICAgICAgNDMJCQkv KiBCcmVhayAqLwotI2RlZmluZSBGTl9TUE4gICAgICA0NAkJCS8qIFNwYW4gKi8KLSNkZWZpbmUg Rk5fVFJNICAgICAgNDUJCQkvKiBUcmltICovCi0jZGVmaW5lIEZOX0xUUiAgICAgIDQ2CQkJLyog TGVmdC1UcmltICovCi0jZGVmaW5lIEZOX0NBUCAgICAgIDQ3CQkJLyogQ2FwaXRhbGl6ZSAqLwot I2RlZmluZSBGTl9UT0QgICAgICA0OAkJCS8qIFRpbWUtb2YtZGF5LXRvLXNlY3Mtc2luY2UtbWlk bml0ZSAqLwotI2RlZmluZSBGTl9TRUMgICAgICA0OQkJCS8qIFNlY3Mtc2luY2UtbWlkbml0ZS10 by10aW1lLW9mLWRheSAqLwotI2RlZmluZSBGTl9GRk4gICAgICA1MAkJCS8qIEZ1bGwgZmlsZSBu YW1lICovCi0jZGVmaW5lIEZOX0NISyAgICAgIDUxCQkJLyogQ2hlY2tzdW0gb2YgdGV4dCAqLwot I2RlZmluZSBGTl9DUkMgICAgICA1MgkJCS8qIENSQy0xNiBvZiB0ZXh0ICovCi0jZGVmaW5lIEZO X0JTTiAgICAgIDUzCQkJLyogQmFzZW5hbWUgb2YgZmlsZSAqLwotI2RlZmluZSBGTl9DTUQgICAg ICA1NAkJCS8qIE91dHB1dCBvZiBhIGNvbW1hbmQgKGNvb2tlZCkgKi8KLSNkZWZpbmUgRk5fUkFX ICAgICAgNTUJCQkvKiBPdXRwdXQgb2YgYSBjb21tYW5kIChyYXcpICovCi0jZGVmaW5lIEZOX1NU WCAgICAgIDU2CQkJLyogU3RyaXAgZnJvbSByaWdodCAqLwotI2RlZmluZSBGTl9TVEwgICAgICA1 NwkJCS8qIFN0cmlwIGZyb20gbGVmdCAqLwotI2RlZmluZSBGTl9TVE4gICAgICA1OAkJCS8qIFN0 cmlwIG4gY2hhcnMgKi8KLSNkZWZpbmUgRk5fU0NSTl9DWCAgNTkJCQkvKiBTY3JlZW4gQ3Vyc29y IFggUG9zICovCi0jZGVmaW5lIEZOX1NDUk5fQ1kgIDYwCQkJLyogU2NyZWVuIEN1cnNvciBZIFBv cyAqLwotI2RlZmluZSBGTl9TQ1JOX1NUUiA2MQkJCS8qIFNjcmVlbiBTdHJpbmcgKi8KLSNkZWZp bmUgRk5fMkhFWCAgICAgNjIJCQkvKiBOdW1iZXIgKG5vdCBzdHJpbmcpIHRvIGhleCAqLwotI2Rl ZmluZSBGTl8yT0NUICAgICA2MwkJCS8qIE51bWJlciAobm90IHN0cmluZykgdG8gb2N0YWwgKi8K LSNkZWZpbmUgRk5fUkZJTCAgICAgNjQJCQkvKiBSZWN1cnNpdmUgZmlsZSBsaXN0ICovCi0jZGVm aW5lIEZOX0RJUiAgICAgIDY1CQkJLyogRGlyZWN0b3J5IGxpc3QgKi8KLSNkZWZpbmUgRk5fUkRJ UiAgICAgNjYJCQkvKiBSZWN1cnNpdmUgZGlyZWN0b3J5IGxpc3QgKi8KLSNkZWZpbmUgRk5fRE5B TSAgICAgNjcJCQkvKiBEaXJlY3RvcnkgcGFydCBvZiBmaWxlbmFtZSAqLwotI2RlZmluZSBGTl9S QU5EICAgICA2OAkJCS8qIFJhbmRvbSBudW1iZXIgKi8KLSNkZWZpbmUgRk5fV09SRCAgICAgNjkJ CQkvKiBXb3JkIGV4dHJhY3Rpb24gKi8KLSNkZWZpbmUgRk5fU1BMSVQgICAgNzAJCQkvKiBTcGxp dCBzdHJpbmcgaW50byB3b3JkcyAqLwotI2RlZmluZSBGTl9LUkJfVEsgICA3MQkJCS8qIEtlcmJl cm9zIHRpY2tldHMgKi8KLSNkZWZpbmUgRk5fS1JCX05YICAgNzIJCQkvKiBLZXJiZXJvcyBuZXh0 IHRpY2tldCAqLwotI2RlZmluZSBGTl9LUkJfSVYgICA3MwkJCS8qIEtlcmJlcm9zIHRpY2tldCBp cyB2YWxpZCAqLwotI2RlZmluZSBGTl9LUkJfVFQgICA3NAkJCS8qIEtlcmJlcm9zIHRpY2tldCB0 aW1lICovCi0jZGVmaW5lIEZOX0VSUk1TRyAgIDc1CQkJLyogRXJyb3IgY29kZSB0byBtZXNzYWdl ICovCi0KLSNpZm5kZWYgVU5JWAotI2lmbmRlZiBWTVMKLSN1bmRlZiBGTl9FUlJNU0cKLSNlbmRp ZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBVTklYICovCi0KLSNkZWZpbmUgRk5fRElNICAgICAgNzYJ CQkvKiBEaW1lbnNpb24gb2YgYXJyYXkgKi8KLSNkZWZpbmUgRk5fRFRJTSAgICAgNzcJCQkvKiBD b252ZXJ0IHRvIHN0YW5kYXJkIGRhdGUvdGltZSAqLwotI2RlZmluZSBGTl9KREFURSAgICA3OAkJ CS8qIFJlZ3VsYXIgZGF0ZSB0byBkYXkgb2YgeWVhciAqLwotI2RlZmluZSBGTl9QTkNWVCAgICA3 OQkJCS8qIENvbnZlcnQgcGhvbmUgbnVtYmVyIGZvciBkaWFsaW5nICovCi0jZGVmaW5lIEZOX0RB VEVKICAgIDgwCQkJLyogRGF5IG9mIHllYXIgdG8gZGF0ZSAqLwotI2RlZmluZSBGTl9NSkQgICAg ICA4MQkJCS8qIERhdGUgdG8gbW9kaWZpZWQgSnVsaWFuIGRhdGUgKi8KLSNkZWZpbmUgRk5fTUpE MiAgICAgODIJCQkvKiBNb2RpZmllZCBKdWxpYW4gZGF0ZSB0byBkYXRlICovCi0jZGVmaW5lIEZO X0RBWSAgICAgIDgzCQkJLyogRGF5IG9mIHdlZWsgb2YgZ2l2ZW4gZGF0ZSAqLwotI2RlZmluZSBG Tl9OREFZICAgICA4NAkJCS8qIE51bWVyaWMgZGF5IG9mIHdlZWsgb2YgZ2l2ZW4gZGF0ZSAqLwot I2RlZmluZSBGTl9USU1FICAgICA4NQkJCS8qIENvbnZlcnQgdG8gaGg6bW06c3MgKi8KLSNkZWZp bmUgRk5fTlRJTSAgICAgODYJCQkvKiBDb252ZXJ0IHRvIHNlY29uZHMgc2luY2UgbWlkbml0ZSAq LwotI2RlZmluZSBGTl9OMlRJTSAgICA4NwkJCS8qIFNlYyBzaW5jZSBtaWRuaXRlIHRvIGhoOm1t OnNzICovCi0jZGVmaW5lIEZOX1BFUk0gICAgIDg4CQkJLyogUGVybWlzc2lvbnMgb2YgZmlsZSAq LwotI2RlZmluZSBGTl9LUkJfRkcgICA4OQkJCS8qIEtlcmJlcm9zIFRpY2tldCBGbGFncyAqLwot I2RlZmluZSBGTl9TRUFSQ0ggICA5MAkJCS8qIFNlYXJjaCBmb3IgcGF0dGVybiBpbiBzdHJpbmcg Ki8KLSNkZWZpbmUgRk5fUlNFQVJDSCAgOTEJCQkvKiBEaXR0bywgYnV0IHJpZ2h0IHRvIGxlZnQg Ki8KLSNkZWZpbmUgRk5fWExBVEUgICAgOTIJCQkvKiBUcmFuc2xhdGUgc3RyaW5nIGNoYXJzZXQg Ki8KLSNkZWZpbmUgRk5fQUxPT0sgICAgOTMJCQkvKiBBcnJheSBsb29rdXAgKi8KLSNkZWZpbmUg Rk5fVExPT0sgICAgOTQJCQkvKiBUYWJsZSBsb29rdXAgKi8KLSNkZWZpbmUgRk5fVE9CNjQgICAg OTUJCQkvKiBFbmNvZGUgaW50byBCYXNlNjQgKi8KLSNkZWZpbmUgRk5fRk1CNjQgICAgOTYJCQkv KiBEZWNvZGUgZnJvbSBCYXNlNjQgKi8KLQotI2RlZmluZSBGTl9BQlMgICAgICA5NwkJCS8qIEFi c29sdXRlIHZhbHVlICovCi0KLSNpZmRlZiBDS0ZMT0FUCi0jZGVmaW5lIEZOX0ZQQUREICAgIDk4 CQkJLyogRmxvYXRpbmctcG9pbnQgYWRkICovCi0jZGVmaW5lIEZOX0ZQU1VCICAgIDk5CQkJLyog RmxvYXRpbmctcG9pbnQgc3Vic3RyYWN0ICovCi0jZGVmaW5lIEZOX0ZQTVVMICAgMTAwCQkJLyog RmxvYXRpbmctcG9pbnQgbXVsdGlwbHkgKi8KLSNkZWZpbmUgRk5fRlBESVYgICAxMDEJCQkvKiBG bG9hdGluZy1wb2ludCBkaXZpZGUgKi8KLSNkZWZpbmUgRk5fRlBFWFAgICAxMDIJCQkvKiBGbG9h dGluZy1wb2ludCBlIHRvIHRoZSB4ICovCi0jZGVmaW5lIEZOX0ZQTE4gICAgMTAzCQkJLyogRmxv YXRpbmctcG9pbnQgbmF0dXJhbCBsb2cgKi8KLSNkZWZpbmUgRk5fRlBMT0cgICAxMDQJCQkvKiBG bG9hdGluZy1wb2ludCBiYXNlLTEwIGxvZyAqLwotI2RlZmluZSBGTl9GUFBPVyAgIDEwNQkJCS8q IEZsb2F0aW5nLXBvaW50IHJhaXNlIHRvIHBvd2VyICovCi0jZGVmaW5lIEZOX0ZQU1FSICAgMTA2 CQkJLyogRmxvYXRpbmctcG9pbnQgc3F1YXJlIHJvb3QgKi8KLSNkZWZpbmUgRk5fRlBBQlMgICAx MDcJCQkvKiBGbG9hdGluZy1wb2ludCBhYnNvbHV0ZSB2YWx1ZSAqLwotI2RlZmluZSBGTl9GUE1P RCAgIDEwOAkJCS8qIEZsb2F0aW5nLXBvaW50IG1vZHVsdXMgKi8KLSNkZWZpbmUgRk5fRlBNQVgg ICAxMDkJCQkvKiBGbG9hdGluZy1wb2ludCBtYXhpbXVtICovCi0jZGVmaW5lIEZOX0ZQTUlOICAg MTEwCQkJLyogRmxvYXRpbmctcG9pbnQgbWluaW11bSovCi0jZGVmaW5lIEZOX0ZQSU5UICAgMTEx CQkJLyogRmxvYXRpbmctcG9pbnQgdG8gaW50ZWdlciAqLwotI2RlZmluZSBGTl9GUFJPVSAgIDEx MgkJCS8qIEZsb2F0aW5nLXBvaW50IHJvdW5kICovCi0jZGVmaW5lIEZOX0ZQU0lOICAgMTEzCQkJ LyogRlAgc2luZSAqLwotI2RlZmluZSBGTl9GUENPUyAgIDExNAkJCS8qIEZQIGNvc2luZSAqLwot I2RlZmluZSBGTl9GUFRBTiAgIDExNQkJCS8qIEZQIHRhbmdlbnQgKi8KLSNlbmRpZiAvKiBDS0ZM T0FUICovCi0KLSNpZmRlZiBDS0NIQU5ORUxJTwotI2RlZmluZSBGTl9GU1RBVCAgIDExNgkJCS8q IEZpbGUgc3RhdHVzICovCi0jZGVmaW5lIEZOX0ZQT1MgICAgMTE3CQkJLyogRmlsZSBwb3NpdGlv biAqLwotI2RlZmluZSBGTl9GRU9GICAgIDExOAkJCS8qIEZpbGUgZW9mICovCi0jZGVmaW5lIEZO X0ZJTE5PICAgMTE5CQkJLyogRmlsZSBudW1iZXIgLyBoYW5kbGUgKi8KLSNkZWZpbmUgRk5fRkdD SEFSICAxMjAJCQkvKiBGaWxlIGdldGNoYXIgKi8KLSNkZWZpbmUgRk5fRkdMSU5FICAxMjEJCQkv KiBGaWxlIGdldGxpbmUgKi8KLSNkZWZpbmUgRk5fRkdCTEsgICAxMjIJCQkvKiBGaWxlIGdldGJs b2NrICovCi0jZGVmaW5lIEZOX0ZQQ0hBUiAgMTIzCQkJLyogRmlsZSBwdXRjaGFyICovCi0jZGVm aW5lIEZOX0ZQTElORSAgMTI0CQkJLyogRmlsZSBwdXRsaW5lICovCi0jZGVmaW5lIEZOX0ZQQkxL ICAgMTI1CQkJLyogRmlsZSBwdXRibG9jayAqLwotI2RlZmluZSBGTl9OTElORSAgIDEyNgkJCS8q IEZpbGUgZ2V0IGN1cnJlbnQgbGluZSBudW1iZXIgKi8KLSNkZWZpbmUgRk5fRkVSTVNHICAxMjcJ CQkvKiBGaWxlIGVycm9yIG1lc3NhZ2UgKi8KLSNlbmRpZiAvKiBDS0NIQU5ORUxJTyAqLwotCi0j ZGVmaW5lIEZOX0xFRiAgICAgMTI4CQkJLyogTGVmdCAoPSBzdWJzdHIgc3RhcnRpbmcgb24gbGVm dCkgKi8KLSNkZWZpbmUgRk5fQUFEVU1QICAxMjkJCQkvKiBBc3NvY2lhdGl2ZSBBcnJheSBEdW1w ICovCi0jZGVmaW5lIEZOX1NUQiAgICAgMTMwCQkJLyogXGZzdHJpcGIoKSAgKi8KLSNkZWZpbmUg Rk5fUEFUVEVSTiAxMzEJCQkvKiBcZnBhdHRlcm4oKSAqLwotI2RlZmluZSBGTl9IRVgyTiAgIDEz MgkJCS8qIFxmaGV4dG9uKCkgICovCi0jZGVmaW5lIEZOX09DVDJOICAgMTMzCQkJLyogXGZvY3R0 b24oKSAgKi8KLSNkZWZpbmUgRk5fSEVYMklQICAxMzQJCQkvKiBcZmhleHRvaXAoKSAqLwotI2Rl ZmluZSBGTl9JUDJIRVggIDEzNQkJCS8qIFxmaXB0b2hleCgpICovCi0jZGVmaW5lIEZOX1JBRElY ICAgMTM2CQkJLyogXGZyYWRpeCgpICAgKi8KLSNkZWZpbmUgRk5fSk9JTiAgICAxMzcJCQkvKiBc ZmpvaW4oKSAgICAqLwotI2RlZmluZSBGTl9TVUJTVCAgIDEzOAkJCS8qIFxmc3Vic3RpdHV0ZSgp ICovCi0jZGVmaW5lIEZOX1NFWFAgICAgMTM5CQkJLyogXGZzZXhwcmVzc2lvbigpICovCi0jZGVm aW5lIEZOX0NNRFNUSyAgMTQwCQkJLyogXGZjbWRzdGFjaygpICovCi0jZGVmaW5lIEZOX1RPR01U ICAgMTQxCQkJLyogXGZ0b2dtdCgpICovCi0jZGVmaW5lIEZOX0NNUERBVEUgMTQyCQkJLyogXGZj bXBkYXRlcygpICovCi0jZGVmaW5lIEZOX0RJRkRBVEUgMTQzCQkJLyogXGZkaWZmZGF0ZXMoKSAq LwotI2lmZGVmIFRDUFNPQ0tFVAotI2RlZmluZSBGTl9IU1RBREQgIDE0NAkJCS8qIFxmYWRkcjJu YW1lKCkgKi8KLSNkZWZpbmUgRk5fSFNUTkFNICAxNDUJCQkvKiBcZm5hbWUyYWRkcigpICovCi0j ZW5kaWYgLyogVENQU09DS0VUICovCi0jZGVmaW5lIEZOX0RFTFNFQyAgMTQ2CQkJLyogXGZkZWx0 YTJzZWMoKSAqLwotI2RlZmluZSBGTl9QQ19EVSAgIDE0NwkJCS8qIFBhdGggY29udmVyc2lvbiBE T1MgdG8gVW5peCAqLwotI2RlZmluZSBGTl9QQ19WVSAgIDE0OAkJCS8qIFBhdGggY29udmVyc2lv biBWTVMgdG8gVW5peCAqLwotI2RlZmluZSBGTl9QQ19VRCAgIDE0OQkJCS8qIFBhdGggY29udmVy c2lvbiBVbml4IHRvIERPUyAqLwotI2RlZmluZSBGTl9QQ19VViAgIDE1MAkJCS8qIFBhdGggY29u dmVyc2lvbiBVbml4IHRvIFZNUyAqLwotI2RlZmluZSBGTl9LV1ZBTCAgIDE1MQkJCS8qIFxma2V5 d29yZHZhbHVlKCkgKi8KLSNkZWZpbmUgRk5fU0xFRVAgICAxNTIJCQkvKiBcZnNsZWVwKCkgKi8K LSNkZWZpbmUgRk5fTVNMRUVQICAxNTMJCQkvKiBcZm1zbGVlcCgpICovCi0jZGVmaW5lIEZOX0xO QU1FICAgMTU0CQkJLyogXGZMb25nUGF0aE5hbWUoKSAoV2luZG93cykgKi8KLSNkZWZpbmUgRk5f U05BTUUgICAxNTUJCQkvKiBcZlNob3J0UGF0aE5hbWUoKSAoV2luZG93cykgKi8KLSNkZWZpbmUg Rk5fVU5UQUIgICAxNTYJCQkvKiBcZnVudGFiaWZ5KCkgKi8KLSNkZWZpbmUgRk5fTE9QWCAgICAx NTcJCQkvKiBcZmxvcHgoKSAqLwotI2RlZmluZSBGTl9FTUFJTCAgIDE1OAkJCS8qIFxmZW1haWxh ZGRyZXNzKCkgKi8KLSNkZWZpbmUgRk5fUElDVFVSRSAxNTkJCQkvKiBcZnBpY3R1cmVpbmZvKCkg Ki8KLSNkZWZpbmUgRk5fUElEICAgICAxNjAJCQkvKiBcZnBpZGluZm8oKSAqLwotI2RlZmluZSBG Tl9DT1VOVCAgIDE2MQkJCS8qIFxmY291bnQoKSAqLwotI2RlZmluZSBGTl9GVU5DICAgIDE2MgkJ CS8qIFxmZnVuY3Rpb24oKSAqLwotI2RlZmluZSBGTl9SRUNVUlNFIDE2MwkJCS8qIFxmcmVjdXJz ZSgpICovCi0jZGVmaW5lIEZOX1NRVUVFWkUgMTY0CQkJLyogXGZzcXVlZXplKCkgKi8KLSNkZWZp bmUgRk5fVU5QQ1QgICAxNjUJCQkvKiBcZmRlY29kZWhleCgpICovCi0jZGVmaW5lIEZOX1NUUklO R1QgMTY2CQkJLyogXGZzdHJpbmd0eXBlKCkgKi8KLSNkZWZpbmUgRk5fU1RSQ01QICAxNjcJCQkv KiBcZnN0cmNtcCgpICovCi0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0vKiBUaW1lIFVuaXRzICov Ci0KLSNkZWZpbmUgVFVfREFZUyAgIDAKLSNkZWZpbmUgVFVfV0VFS1MgIDEKLSNkZWZpbmUgVFVf TU9OVEhTIDIKLSNkZWZpbmUgVFVfWUVBUlMgIDMKLQotI2lmZGVmIENLX0NVUlNFUwotLyogU2Ny ZWVuIGxpbmUgbnVtYmVycyBmb3IgZnVsbHNjcmVlbiBmaWxlLXRyYW5zZmVyIGRpc3BsYXkgKi8K LQotI2RlZmluZSBDV19CQU4gIDAJCQkvKiBDdXJzZXMgV2luZG93IEJhbm5lciAqLwotI2RlZmlu ZSBDV19ESVIgIDIJCQkvKiBDdXJyZW50IGRpcmVjdG9yeSAqLwotI2RlZmluZSBDV19MSU4gIDMJ CQkvKiBDb21tdW5pY2F0aW9uIGRldmljZSAqLwotI2RlZmluZSBDV19TUEQgIDQJCQkvKiBDb21t dW5pY2F0aW9uIHNwZWVkICovCi0jZGVmaW5lIENXX1BBUiAgNQkJCS8qIFBhcml0eSAqLwotI2Rl ZmluZSBDV19UTU8gIDYKLSNkZWZpbmUgQ1dfTkFNICA3CQkJLyogRmlsZW5hbWUgKi8KLSNkZWZp bmUgQ1dfVFlQICA4CQkJLyogRmlsZSB0eXBlICovCi0jZGVmaW5lIENXX1NJWiAgOQkJCS8qIEZp bGUgc2l6ZSAqLwotI2RlZmluZSBDV19QQ0QgMTAJCQkvKiBQZXJjZW50IGRvbmUgKi8KLQotI2lm bmRlZiBDS19QQ1RfQkFSCi0jZGVmaW5lIENXX1RSICAxMQkJCS8qIFRpbWUgcmVtYWluaW5nICov Ci0jZGVmaW5lIENXX0NQICAxMgkJCS8qIENoYXJhY3RlcnMgcGVyIHNlY29uZCAqLwotI2RlZmlu ZSBDV19XUyAgMTMJCQkvKiBXaW5kb3cgc2xvdHMgKi8KLSNkZWZpbmUgQ1dfUFQgIDE0CQkJLyog UGFja2V0IHR5cGUgKi8KLSNkZWZpbmUgQ1dfUEMgIDE1CQkJLyogUGFja2V0IGNvdW50ICovCi0j ZGVmaW5lIENXX1BMICAxNgkJCS8qIFBhY2tldCBsZW5ndGggKi8KLSNkZWZpbmUgQ1dfUFIgIDE3 CQkJLyogUGFja2V0IHJldHJ5ICovCi0jaWZkZWYgQ09NTUVOVAotI2RlZmluZSBDV19QQiAgMTcJ CQkvKiBQYWNrZXQgYmxvY2sgY2hlY2sgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZWxzZSAv KiBDS19QQ1RfQkFSICovCi0jZGVmaW5lIENXX0JBUiAxMQkJCS8qIFBlcmNlbnQgQmFyIFNjYWxl ICovCi0jZGVmaW5lIENXX1RSICAxMgkJCS8qIFRpbWUgcmVtYWluaW5nICovCi0jZGVmaW5lIENX X0NQICAxMwkJCS8qIENoYXJzIHBlciBzZWMgKi8KLSNkZWZpbmUgQ1dfV1MgIDE0CQkJLyogV2lu ZG93IHNsb3RzICovCi0jZGVmaW5lIENXX1BUICAxNQkJCS8qIFBhY2tldCB0eXBlICovCi0jZGVm aW5lIENXX1BDICAxNgkJCS8qIFBhY2tldCBjb3VudCAqLwotI2RlZmluZSBDV19QTCAgMTcJCQkv KiBQYWNrZXQgbGVuZ3RoICovCi0jZGVmaW5lIENXX1BSICAxOAkJCS8qIFBhY2tldCByZXRyeSAq LwotI2lmZGVmIENPTU1FTlQKLSNkZWZpbmUgQ1dfUEIgIDE4CQkJLyogUGFja2V0IGJsb2NrIGNo ZWNrICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2VuZGlmIC8qIENLX1BDVF9CQVIgKi8KLQot I2RlZmluZSBDV19FUlIgMTkJCQkvKiBFcnJvciBtZXNzYWdlICovCi0jZGVmaW5lIENXX01TRyAy MAkJCS8qIEluZm8gbWVzc2FnZSAqLwotI2RlZmluZSBDV19JTlQgMjIJCQkvKiBJbnN0cnVjdGlv bnMgKi8KLSNkZWZpbmUgQ1dfRkZDIDk5ICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIENo YXJhY3RlcnMgU2VudC9SZWNlaXZlZCAqLwotI2VuZGlmIC8qIENLX0NVUlNFUyAqLwotCi0jaWZu ZGVmIE5PSUNQCi0vKiBTYXZlIENvbW1hbmRzICovCi0jZGVmaW5lIFhTS0VZICAgMAkJCS8qIEtl eSBtYXAgZmlsZSAqLwotI2RlZmluZSBYU0NNRCAgIDEgICAgICAgICAgICAgICAgICAgICAgIC8q IENvbW1hbmQgbW9kZSAqLwotI2RlZmluZSBYU1RFUk0gIDIgICAgICAgICAgICAgICAgICAgICAg IC8qIFRlcm1pbmFsIG1vZGUgKi8KLSNlbmRpZiAvKiBOT0lDUCAqLwotCi0jaWZuZGVmIE5PRElB TAotLyogRGlhbCByb3V0aW5lIHNvcnQgcHJpb3JpdGllcyAqLwotI2RlZmluZSBETl9JTlRFUk4g MAotI2RlZmluZSBETl9GUkVFICAgMQotI2RlZmluZSBETl9MT0NBTCAgMgotI2RlZmluZSBETl9V TksgICAgMwotI2RlZmluZSBETl9MT05HICAgNAotI2RlZmluZSBETl9JTlRMICAgNQotI2VuZGlm IC8qIE5PRElBTCAqLwotCi0jaWZkZWYgU1NIQlVJTFRJTgotI2RlZmluZSBYU1NIX09QTiAxCi0j ZGVmaW5lIFhTU0hfVjIgIDIKLSNkZWZpbmUgWFNTSF9GTFAgMwotI2RlZmluZSBYU1NIX0ZSUCA0 Ci0jZGVmaW5lIFhTU0hfQUREIDUKLSNkZWZpbmUgWFNTSF9LRVkgNgotI2RlZmluZSBYU1NIX0NM UiA3Ci0jZGVmaW5lIFhTU0hfQUdUIDgKLQotI2RlZmluZSBTU0hLVF8xUiAgIDAJCQkvKiBTU0gg S0VZIFRZUEUgc3ltYm9scyAqLwotI2RlZmluZSBTU0hLVF8yUiAgIDEgICAgICAgICAgICAgICAg ICAgIC8qIG11c3QgbWF0Y2ggc3NoL2tleS5oIHZhbHVlcyAqLwotI2RlZmluZSBTU0hLVF8yRCAg IDIKLSNkZWZpbmUgU1NIS1RfU1JQICAzCi0KLSNkZWZpbmUgU1NIS0RfSU4gICAxCQkJLyogU1NI IEtFWSBESVNQTEFZIC9JTi1GT1JNQVQgKi8KLSNkZWZpbmUgU1NIS0RfT1VUICAyCQkJLyogU1NI IEtFWSBESVNQTEFZIC9PVVQtRk9STUFUICovCi0KLSNkZWZpbmUgU0tERl9PU1NIICAxCQkJLyog S2V5IGRpc3BsYXkgZm9ybWF0IE9wZW5TU0ggKi8KLSNkZWZpbmUgU0tERl9TU0hDICAyCQkJLyog S2V5IGRpc3BsYXkgZm9ybWF0IFNTSC5DT00gKi8KLSNkZWZpbmUgU0tERl9JRVRGICAzCQkJLyog S2V5IGRpc3BsYXkgZm9ybWF0IElFVEYgKi8KLSNkZWZpbmUgU0tERl9GSU5HICA0CQkJLyogS2V5 IGRpc3BsYXkgZm9ybWF0IEZJTkdFUlBSSU5UICovCi0KLSNkZWZpbmUgU1NIU1dfVVNSIDEKLSNk ZWZpbmUgU1NIU1dfVkVSIDIKLSNkZWZpbmUgU1NIU1dfQ01EIDMKLSNkZWZpbmUgU1NIU1dfWDEx IDQKLSNkZWZpbmUgU1NIU1dfUFdEIDUKLSNkZWZpbmUgU1NIU1dfU1VCIDYKLQotI2RlZmluZSBT U0hDX0xQRiAxCi0jZGVmaW5lIFNTSENfUlBGIDIKLQotI2RlZmluZSBYU1NIMl9SS0UgMQotCi0j ZGVmaW5lIFNTSEZfTENMICAgMQotI2RlZmluZSBTU0hGX1JNVCAgIDIKLQotI2RlZmluZSBTU0hB X0FERCAgIDEKLSNkZWZpbmUgU1NIQV9ERUwgICAyCi0jZGVmaW5lIFNTSEFfTFNUICAgMwotCi0j ZGVmaW5lIFNTSEFTV19GUCAxCi0KLSNkZWZpbmUgU1NIS19QQVNTICAxCi0jZGVmaW5lIFNTSEtf Q1JFQSAgMgotI2RlZmluZSBTU0hLX0RJU1AgIDMKLSNkZWZpbmUgU1NIS19WMSAgICA0Ci0KLSNk ZWZpbmUgU1NIS0NfQkkgIDEKLSNkZWZpbmUgU1NIS0NfUFAgIDIKLSNkZWZpbmUgU1NIS0NfVFkg IDMKLSNkZWZpbmUgU1NIS0NfMVIgIDQKLQotI2RlZmluZSBTS1JNX09QTiAgMQotI2VuZGlmIC8q IFNTSEJVSUxUSU4gKi8KLQotI2lmZGVmIFNGVFBfQlVJTFRJTgotI2RlZmluZSBTRlRQX09QTiAg ICAxCi0jZGVmaW5lIFNGVFBfQ0QgICAgIDIKLSNkZWZpbmUgU0ZUUF9DSEdSUCAgMwotI2RlZmlu ZSBTRlRQX0NITU9EICA0Ci0jZGVmaW5lIFNGVFBfQ0hPV04gIDUKLSNkZWZpbmUgU0ZUUF9ESVIg ICAgNgotI2RlZmluZSBTRlRQX0dFVCAgICA3Ci0jZGVmaW5lIFNGVFBfTUtESVIgIDgKLSNkZWZp bmUgU0ZUUF9QV0QgICAgOQotI2RlZmluZSBTRlRQX1BVVCAgICAxMAotI2RlZmluZSBTRlRQX1JF TiAgICAxMQotI2RlZmluZSBTRlRQX1JNICAgICAxMgotI2RlZmluZSBTRlRQX1JNRElSICAxMwot I2RlZmluZSBTRlRQX0xJTksgICAxNAotI2RlZmluZSBTRlRQX1ZFUiAgICAxNQotCi0jZGVmaW5l IFhZX1NGVFBfUkNTIDEKLSNkZWZpbmUgWFlfU0ZUUF9FT0wgMgotI2VuZGlmIC8qIFNGVFBfQlVJ TFRJTiAqLwotCi0vKiBBTlNJLUMgcHJvdG90eXBlcyBmb3IgdXNlciBpbnRlcmZhY2UgZnVuY3Rp b25zICovCi0KLSNpZmRlZiBVTklYCi1fUFJPVE9UWVAoIGludCBkb3B1dGVudiwgKCBjaGFyICos IGNoYXIgKiApICk7Ci0jZW5kaWYJLyogVU5JWCAqLwotCi1fUFJPVE9UWVAoIGludCBjaGthZXMs ICggY2hhciwgaW50ICkgKTsKLQotI2lmbmRlZiBOT0lDUAotX1BST1RPVFlQKCBpbnQgbWF0Y2hu YW1lLCAoIGNoYXIgKiwgaW50LCBpbnQgKSApOwotX1BST1RPVFlQKCBpbnQgY2tfY2xzLCAoIHZv aWQgKSApOwotX1BST1RPVFlQKCBpbnQgY2tfY2xlb2wsICggdm9pZCApICk7Ci1fUFJPVE9UWVAo IGludCBja19jdXJwb3MsICggaW50LCBpbnQgKSApOwotX1BST1RPVFlQKCBpbnQgY21kc3JjLCAo IHZvaWQgKSApOwotX1BST1RPVFlQKCBpbnQgcGFyc2VyLCAoIGludCApICk7Ci1fUFJPVE9UWVAo IGludCBjaGt2YXIsIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIGludCB6enN0cmluZywgKGNoYXIg KiwgY2hhciAqKiwgaW50ICopICk7Ci0jaWZuZGVmIE5PRlJJTExTCi1fUFJPVE9UWVAoIGludCB5 eXN0cmluZywgKGNoYXIgKiwgY2hhciAqKikgKTsKLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotX1BS T1RPVFlQKCBpbnQgZ2V0bmNtLCAoY2hhciAqLCBpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBnZXRu Y3QsIChjaGFyICosIGludCwgRklMRSAqLCBpbnQpICk7Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLV9Q Uk9UT1RZUCggVk9JRCBiZ2NoaywgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiBudmxvb2ss IChjaGFyICopICk7Ci1fUFJPVE9UWVAoIGludCB4YXJyYXksIChjaGFyICopICk7Ci1fUFJPVE9U WVAoIGludCBhcnJheW5hbSwgKGNoYXIgKiwgaW50ICosIGludCAqKSApOwotX1BST1RPVFlQKCBp bnQgYXJyYXlib3VuZHMsIChjaGFyICosIGludCAqLCBpbnQgKikgKTsKLV9QUk9UT1RZUCggaW50 IGJvdW5kc3BhaXIsIChjaGFyICosIGNoYXIgKiwgaW50ICosIGludCAqLCBjaGFyICopICk7Ci1f UFJPVE9UWVAoIGludCBhcnJheWl0b2EsIChpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBhcnJheWF0 b2ksIChpbnQpICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiBibGRsZW4sIChjaGFyICosIGNoYXIgKikg KTsKLV9QUk9UT1RZUCggaW50IGNoa2FycmF5LCAoaW50LCBpbnQpICk7Ci1fUFJPVE9UWVAoIGlu dCBkY2xhcnJheSwgKGNoYXIsIGludCkgKTsKLV9QUk9UT1RZUCggaW50IHB1c2hhcnJheSwgKGlu dCwgaW50KSApOwotX1BST1RPVFlQKCBpbnQgcGFyc2V2YXIsIChjaGFyICosIGludCAqLCBpbnQg KikgKTsKLV9QUk9UT1RZUCggaW50IG1hY2luaSwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIFZPSUQg aW5pdG1hYywgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBkZWxtYWMsIChjaGFyICosIGludCkg KTsKLV9QUk9UT1RZUCggaW50IGFkZG1hYywgKGNoYXIgKiwgY2hhciAqKSApOwotX1BST1RPVFlQ KCBpbnQgZG9tYWMsIChjaGFyICosIGNoYXIgKiwgaW50KSApOwotX1BST1RPVFlQKCBpbnQgYWRk bW1hYywgKGNoYXIgKiwgY2hhciAqW10pICk7Ci1fUFJPVE9UWVAoIGludCBkb2J1ZywgKHZvaWQp ICk7Ci1fUFJPVE9UWVAoIGludCBkb2NkLCAoaW50KSApOwotX1BST1RPVFlQKCBpbnQgZG9jbHNs b2csIChpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBkb2NtZCwgKGludCkgKTsKLV9QUk9UT1RZUCgg aW50IGRvZGlyLCAoaW50KSApOwotX1BST1RPVFlQKCBpbnQgZG9kbywgKGludCwgY2hhciAqLCBp bnQpICk7Ci1fUFJPVE9UWVAoIGludCBkb2VuYWJsZSwgKGludCwgaW50KSApOwotX1BST1RPVFlQ KCBpbnQgZG9nb3RvLCAoY2hhciAqLCBpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBkb2d0YSwgKGlu dCkgKTsKLV9QUk9UT1RZUCggaW50IGRvaGxwLCAoaW50KSApOwotX1BST1RPVFlQIChpbnQgZG9p bmNyLCAoaW50KSApOwotX1BST1RPVFlQKCBpbnQgZG9ocm10LCAoaW50KSApOwotX1BST1RPVFlQ KCBpbnQgZG9pZiwgKGludCkgKTsKLV9QUk9UT1RZUCggaW50IGRvaW5wdXQsIChpbnQsIGNoYXIg KltdLCBpbnRbXSwgaW50LCBpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBkb3JlaW5wLCAoaW50LCBj aGFyICosIGludCkgKTsKLV9QUk9UT1RZUCggaW50IGRvbG9nLCAoaW50KSApOwotX1BST1RPVFlQ KCBpbnQgZG9sb2dpbiwgKGNoYXIgKikgKTsKLV9QUk9UT1RZUCggaW50IGRvb3BlbiwgKHZvaWQp ICk7Ci1fUFJPVE9UWVAoIGludCBkb3BybSwgKGludCwgaW50KSApOwotX1BST1RPVFlQKCBpbnQg ZG9yZXR1cm4sIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIGludCBkb3JtdCwgKGludCkgKTsKLV9Q Uk9UT1RZUCggaW50IGRvc29ydCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBkb3N0YXQsIChp bnQpICk7Ci1fUFJPVE9UWVAoIGludCBkb3N0b3AsICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQg ZG90eXBlLCAoY2hhciAqLCBpbnQsIGludCwgaW50LCBjaGFyICosIGludCwgY2hhciAqLCBpbnQs IGludCwKLQkJCWNoYXIgKiwgaW50KSk7Ci1fUFJPVE9UWVAoIGludCB0cmFuc21pdCwgKGNoYXIg KiwgY2hhciwgaW50LCBpbnQsIGludCkgKTsKLV9QUk9UT1RZUCggaW50IHhsYXRlLCAoY2hhciAq LCBjaGFyICosIGludCwgaW50KSApOwotX1BST1RPVFlQKCBpbnQgbGl0Y21kLCAoY2hhciAqKiwg Y2hhciAqKiwgaW50KSApOwotX1BST1RPVFlQKCBpbnQgaW5jdmFyLCAoY2hhciAqLCBDS19PRkZf VCwgaW50KSApOwotX1BST1RPVFlQKCBpbnQgY2tkaWFsLCAoY2hhciAqLCBpbnQsIGludCwgaW50 LCBpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBobXNnLCAoY2hhciAqKSApOwotX1BST1RPVFlQKCBp bnQgaG1zZ2EsIChjaGFyICogW10pICk7Ci1fUFJPVE9UWVAoIGludCBtbG9vaywgKHN0cnVjdCBt dGFiIFtdLCBjaGFyICosIGludCkgKTsKLV9QUk9UT1RZUCggaW50IG14bG9vaywgKHN0cnVjdCBt dGFiIFtdLCBjaGFyICosIGludCkgKTsKLV9QUk9UT1RZUCggaW50IG14eGxvb2ssIChzdHJ1Y3Qg bXRhYiBbXSwgY2hhciAqLCBpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBwcnRvcHQsIChpbnQgKiwg Y2hhciAqKSApOwotX1BST1RPVFlQKCBDSEFSIHJmaWxvcCwgKGNoYXIgKiwgY2hhcikgKTsKLV9Q Uk9UT1RZUCggaW50IHNldGNjLCAoY2hhciAqLCBpbnQgKikgKTsKLV9QUk9UT1RZUCggaW50IHNl dG51bSwgKGludCAqLCBpbnQsIGludCwgaW50KSApOwotX1BST1RPVFlQKCBpbnQgc2V0b24sIChp bnQgKikgKTsKLV9QUk9UT1RZUCggaW50IHNldG9uYXV0LCAoaW50ICopICk7Ci1fUFJPVE9UWVAo IFZPSUQgc2htZG1saW4sICh2b2lkKSApOwotX1BST1RPVFlQKCBWT0lEIGluaXRtZG0sIChpbnQp ICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiBzaG93b2ZmLCAoaW50KSApOwotX1BST1RPVFlQKCBjaGFy ICogc2hvd29vYSwgKGludCkgKTsKLV9QUk9UT1RZUCggY2hhciAqIHNob3dzdHJpbmcsIChjaGFy ICopICk7Ci1fUFJPVE9UWVAoIGludCBwa3RvcG4sIChjaGFyICosaW50KSApOwotX1BST1RPVFlQ KCBpbnQgdHJhb3BuLCAoY2hhciAqLGludCkgKTsKLV9QUk9UT1RZUCggaW50IHNlc29wbiwgKGNo YXIgKixpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBkZWJvcG4sIChjaGFyICosaW50KSApOwotX1BS T1RPVFlQKCBpbnQgZGlhb3BuLCAoY2hhciAqLGludCxpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBw cmVwb3AsICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgcG9wY2x2bCwgKHZvaWQpICk7Ci1fUFJP VE9UWVAoIGludCB2YXJ2YWwsIChjaGFyICosIENLX09GRl9UICopICk7Ci1fUFJPVE9UWVAoIGNo YXIgKiBldmFsYSwgKGNoYXIgKikgKTsKLV9QUk9UT1RZUCggY2hhciAqIGV2YWx4LCAoY2hhciAq KSApOwotX1BST1RPVFlQKCBpbnQgc2V0YWxhcm0sIChsb25nKSApOwotX1BST1RPVFlQKCBpbnQg c2V0YXQsIChpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBzZXRpbnAsICh2b2lkKSApOwotX1BST1RP VFlQKCBWT0lEIGRvbG9nbmV0LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggVk9JRCBkb2xvZ2xpbmUs ICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgc2V0bGluLCAoaW50LCBpbnQsIGludCkgKTsKLV9Q Uk9UT1RZUCggaW50IHNldG1vZGVtLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IHNldGZpbCwg KGludCkgKTsKLV9QUk9UT1RZUCggY2hhciAqIGhvbWVwYXRoLCAodm9pZCkgKTsKLSNpZmRlZiBP UzIKLV9QUk9UT1RZUCggaW50IHNldHRhcGksICh2b2lkKSApIDsKLSNpZmRlZiBPUzJNT1VTRQot X1BST1RPVFlQKCBpbnQgc2V0bW91LCAodm9pZCkgKTsKLSNlbmRpZiAvKiBPUzJNT1VTRSAqLwot I2VuZGlmIC8qIE9TMiAqLwotI2lmZGVmIExPQ1VTCi1fUFJPVE9UWVAoIFZPSUQgc2V0bG9jdXMs IChpbnQsaW50KSApOwotX1BST1RPVFlQKCBWT0lEIHNldGF1dG9sb2N1cywgKGludCkgKTsKLSNl bmRpZiAvKiBMT0NVUyAqLwotX1BST1RPVFlQKCBpbnQgc2V0YmVsbCwgKHZvaWQpICk7Ci1fUFJP VE9UWVAoIFZPSUQgc2V0Y21hc2ssIChpbnQpKTsKLV9QUk9UT1RZUCggVk9JRCBzZXRhdXRvZGws IChpbnQsaW50KSk7Ci1fUFJPVE9UWVAoIFZPSUQgc2V0ZGVic2VzLCAoaW50KSk7Ci1fUFJPVE9U WVAoIFZPSUQgc2V0c2VzbG9nLCAoaW50KSk7Ci1fUFJPVE9UWVAoIFZPSUQgc2V0YXByaW50LCAo aW50KSk7Ci1fUFJPVE9UWVAoIGludCBzZXR0cm0sICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQg c2V0dHJtdHlwLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IHNldHNyLCAoaW50LCBpbnQpICk7 Ci1fUFJPVE9UWVAoIGludCBzZXR4bWl0LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IGRvc2V0 a2V5LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IGRvY2hrLCAodm9pZCkgKTsKLV9QUk9UT1RZ UCggaW50IGx1ZGlhbCwgKGNoYXIgKiwgaW50KSApOwotX1BST1RPVFlQKCBjaGFyICogZ2V0ZG51 bSwgKGludCkgKTsKLV9QUk9UT1RZUCggVk9JRCBnZXRuZXRlbnYsICh2b2lkKSApOwotX1BST1RP VFlQKCBpbnQgZ2V0eWVzbm8sIChjaGFyICosIGludCkgKTsKLV9QUk9UT1RZUCggVk9JRCB4d29y ZHMsIChjaGFyICosIGludCwgY2hhciAqW10sIGludCkgKTsKLSNpZmRlZiBPUzIKLV9QUk9UT1RZ UCggVk9JRCBrZXluYW1pbml0LCAodm9pZCkgKTsKLSNlbmRpZiAvKiBPUzIgKi8KLV9QUk9UT1RZ UCggaW50IHhsb29rdXAsIChzdHJ1Y3Qga2V5dGFiW10sIGNoYXIgKiwgaW50LCBpbnQgKikgKTsK LV9QUk9UT1RZUCggY2hhciAqIHJsb29rdXAsIChzdHJ1Y3Qga2V5dGFiW10sIGludCwgaW50KSAp OwotX1BST1RPVFlQKCBpbnQgaHVwb2ssIChpbnQpICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiB6em5k YXRlLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggY2hhciAqIHpqZGF0ZSwgKGNoYXIgKikgKTsKLV9Q Uk9UT1RZUCggY2hhciAqIGp6ZGF0ZSwgKGNoYXIgKikgKTsKLV9QUk9UT1RZUCggY2hhciAqIGNr ZGF0ZSwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiBjaGtfYWMsIChpbnQsIGNoYXJbXSkg KTsKLV9QUk9UT1RZUCggY2hhciAqIGdtZG10eXAsICh2b2lkKSApOwotX1BST1RPVFlQKCBjaGFy ICogZ2Ztb2RlLCAoaW50LCBpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBzZXRkZXN0LCAodm9pZCkg KTsKLV9QUk9UT1RZUCggVk9JRCBuZGluaXQsICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgZG9z d2l0Y2gsICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgZG9sb2NhbCwgKHZvaWQpICk7Ci1fUFJP VE9UWVAoIGxvbmcgdG9kMnNlYywgKGNoYXIgKikgKTsKLV9QUk9UT1RZUCggaW50IGx1bmV0LCAo Y2hhciAqKSApOwotX1BST1RPVFlQKCBpbnQgZG94ZGlzLCAoaW50KSApOwotX1BST1RPVFlQKCBp bnQgZG9zYXZlLCAoaW50KSApOwotX1BST1RPVFlQKCBpbnQgZG94c2VuZCwgKGludCkgKTsKLV9Q Uk9UT1RZUCggaW50IGRveGdldCwgKGludCkgKTsKLV9QUk9UT1RZUCggaW50IGRveGNvbm4sIChp bnQpICk7Ci1fUFJPVE9UWVAoIGludCBjbHNjb25ueCwgKGludCkgKTsKLV9QUk9UT1RZUCggVk9J RCBmdHJlc2V0LCAodm9pZCkgKTsKLSNpZmRlZiBDS19LRVJCRVJPUwotX1BST1RPVFlQIChpbnQg Y3BfYXV0aCwgKCB2b2lkICkgKTsKLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotX1BST1RPVFlQ KCBsb25nIG1qZCwgKGNoYXIgKikgKTsKLV9QUk9UT1RZUCggY2hhciAqIG1qZDJkYXRlLCAobG9u ZykgKTsKLV9QUk9UT1RZUCggY2hhciAqIGNrZ2V0cGlkLCAodm9pZCkgKTsKLQotX1BST1RPVFlQ KCBpbnQgZG9ncmVwLCAodm9pZCkgKTsKLQotI2lmbmRlZiBOT0ZUUAotI2lmbmRlZiBTWVNGVFAK LV9QUk9UT1RZUCggaW50IGRveGZ0cCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBkb2Z0cGhs cCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBkb3NldGZ0cCwgKHZvaWQpICk7Ci1fUFJPVE9U WVAoIGludCBkb3NldGZ0cGhscCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBzaG9mdHAsIChp bnQpICk7Ci0jZW5kaWYgLyogU1lTRlRQICovCi0jZW5kaWYgLyogTk9GVFAgKi8KLQotX1BST1RP VFlQKCBWT0lEIGNtaGlzdG9yeSwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiBnZXRkY3Nl dCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiB0dGd0cG4sICh2b2lkKSApOwotCi0jaWZu ZGVmIE5PU0hPVwotX1BST1RPVFlQKCBpbnQgZG9zaG93LCAoaW50KSApOwotX1BST1RPVFlQKCBp bnQgc2hvdGNwLCAoaW50KSApOwotX1BST1RPVFlQKCBWT0lEIHNob3BhciwgKHZvaWQpICk7Ci1f UFJPVE9UWVAoIFZPSUQgc2hvZmlsLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggVk9JRCBzaG9wYXJw LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IHNob2F0dCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAo IFZPSUQgc2hvdmVyLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggVk9JRCBzaG9jdGwsICh2b2lkKSAp OwotX1BST1RPVFlQKCBWT0lEIHNob2RibCwgKHZvaWQpICk7Ci0jaWZuZGVmIE5PU1BMCi1fUFJP VE9UWVAoIGludCBzaG9tYWMsIChjaGFyICosIGNoYXIgKikgKTsKLV9QUk9UT1RZUCggaW50IGRv c2hpZnQsIChpbnQpICk7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSNpZm5kZWYgTk9DU0VUUwotX1BS T1RPVFlQKCBWT0lEIHNob2NoYXJzZXQsICh2b2lkKSApOwotX1BST1RPVFlQKCBWT0lEIHNob3Bh cmwsICh2b2lkKSApOwotX1BST1RPVFlQKCBWT0lEIHNob3RjcywgKGludCwgaW50KSApOwotI2Vu ZGlmIC8qIE5PQ1NFVFMgKi8KLSNpZm5kZWYgTk9MT0NBTAotX1BST1RPVFlQKCBWT0lEIHNob3Bh cmMsICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgc2hvbW9kZW0sICh2b2lkKSApOwotI2lmbmRl ZiBOT0RJQUwKLV9QUk9UT1RZUCggVk9JRCBzaG9kcywgKGNoYXIgKikgKTsKLV9QUk9UT1RZUCgg Vk9JRCBzaG9kaWFsLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IGRvc2hvZGlhbCwgKHZvaWQp ICk7Ci0jZW5kaWYgLyogTk9ESUFMICovCi0jaWZuZGVmIE5PTkVUCi1fUFJPVE9UWVAoIGludCBz aG9uZXQsICh2b2lkKSApOwotX1BST1RPVFlQKCBpbnQgc2hvdG9wdCwgKGludCkgKTsKLV9QUk9U T1RZUCggaW50IHNob3RlbCwgKGludCkgKTsKLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgotX1BS T1RPVFlQIChpbnQgc2hvX2F1dGgsKCBpbnQgICkgKTsKLSNlbmRpZiAvKiBDS19BVVRIRU5USUNB VElPTiAqLwotI2VuZGlmIC8qIE5PTkVUICovCi1fUFJPVE9UWVAoIFZPSUQgc2hvbWRtLCAodm9p ZCkgKTsKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jaWZkZWYgT1MyCi1fUFJPVE9UWVAoIFZPSUQg c2hva2V5Y29kZSwgKGludCxpbnQpICk7Ci0jZWxzZQotX1BST1RPVFlQKCBWT0lEIHNob2tleWNv ZGUsIChpbnQpICk7Ci0jZW5kaWYgLyogT1MyICovCi1fUFJPVE9UWVAoIFZPSUQgc2hvd2Fzc29j LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggVk9JRCBzaG93ZGlyb3B0cywgKHZvaWQpICk7Ci1fUFJP VE9UWVAoIFZPSUQgc2hvd2RlbG9wdHMsICh2b2lkKSApOwotX1BST1RPVFlQKCBWT0lEIHNob3d0 eXBvcHRzLCAodm9pZCkgKTsKLV9QUk9UT1RZUCggVk9JRCBzaG93cHVyZ29wdHMsICh2b2lkKSAp OwotX1BST1RPVFlQKCBWT0lEIHNob2Zsb3csICh2b2lkKSApOwotX1BST1RPVFlQKCBWT0lEIHNo b3hmZXIsICh2b2lkKSApOwotI2lmZGVmIEFOWVNTSAotX1BST1RPVFlQKCBWT0lEIHNob3NzaCwg KHZvaWQpICk7Ci0jZW5kaWYJLyogQU5ZU1NIICovCi0jZW5kaWYgLyogTk9TSE9XICovCi0KLV9Q Uk9UT1RZUCggVk9JRCBzaG9zdHJkZWYsIChDSEFSICopICk7Ci0KLSNpZm5kZWYgTk9TUEwKLV9Q Uk9UT1RZUCggaW50IGFkZGxvY2FsLCAoY2hhciAqKSApOwotI2VuZGlmIC8qIE5PU1BMICovCi0K LV9QUk9UT1RZUCggaW50IHNldGRlbG9wdHMsICh2b2lkKSApOwotCi0jaWZkZWYgVk1TCi1fUFJP VE9UWVAoIGludCBjdnRkaXIsIChjaGFyICosIGNoYXIgKiwgaW50KSApOwotI2VuZGlmIC8qIFZN UyAqLwotCi0jaWZkZWYgRk5GTE9BVAotX1BST1RPVFlQKCBWT0lEIGluaXRmbG9hdCwgKHZvaWQp ICk7Ci0jZW5kaWYgLyogRk5GTE9BVCAqLwotCi0jaWZkZWYgQ0tDSEFOTkVMSU8KLV9QUk9UT1RZ UCggaW50IGRvZmlsZSwgKGludCkgKTsKLSNlbmRpZiAvKiBDS0NIQU5ORUxJTyAqLwotCi0jaWZk ZWYgQ0tST09UCi1fUFJPVE9UWVAoIGludCBkb2Nocm9vdCwgKHZvaWQpICk7Ci0jZW5kaWYgLyog Q0tST09UICovCi0KLSNpZmRlZiBORVdGVFAKLV9QUk9UT1RZUCggaW50IGRvZnRwdXNyLCAgICAo dm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IGRvZnRwcHV0LCAgICAoaW50LGludCkgKTsKLV9QUk9U T1RZUCggaW50IGRvZnRwZ2V0LCAgICAoaW50LGludCkgKTsKLV9QUk9UT1RZUCggaW50IGRvZnRw cm10LCAgICAoaW50LGludCkgKTsKLV9QUk9UT1RZUCggaW50IGZ0cG9wZW4sICAgICAoY2hhciAq LCBjaGFyICosIGludCkgKTsKLV9QUk9UT1RZUCggaW50IGNtZGxpbmdldCwgICAoaW50KSApOwot X1BST1RPVFlQKCBpbnQgY21kbGlucHV0LCAgIChpbnQpICk7Ci1fUFJPVE9UWVAoIGludCBkb2Z0 cGFyZywgICAgKGNoYXIpICk7Ci1fUFJPVE9UWVAoIGludCBkb2Z0cGFjY3QsICAgKHZvaWQpICk7 Ci1fUFJPVE9UWVAoIGludCBkb2Z0cHNpdGUsICAgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBk b3NldGZ0cHBzdiwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIGludCBmdHBieWUsICAgICAgKHZvaWQp ICk7Ci0jZW5kaWYgLyogTkVXRlRQICovCi0KLSNpZmRlZiBDT01NRU5UCi0vKiBUaGVzZSBwcm90 b3R5cGVzIGFyZSBubyBsb25nZXIgdXNlZCAqLwotX1BST1RPVFlQKCBjaGFyICogZ2V0ZHdzLCAo aW50KSApOwotX1BST1RPVFlQKCBjaGFyICogZ2V0ZGNzLCAoaW50KSApOwotX1BST1RPVFlQKCBp bnQgZG9nZXQsIChpbnQpICk7Ci1fUFJPVE9UWVAoIGNoYXIgKiBhcnJheXZhbCwgKGludCwgaW50 KSApOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2lmZGVmIEtVSQotX1BST1RPVFlQKGludCBC dWlsZEZvbnRUYWJsZSwKLSAgICAgICAgICAoc3RydWN0IGtleXRhYiAqKiBwVGFibGUsIHN0cnVj dCBrZXl0YWIgKiogcFRhYmxlMiwgaW50ICogcE4pKTsKLSNlbmRpZiAvKiBLVUkgKi8KLQotX1BS T1RPVFlQKGludCBjeF9uZXQsIChpbnQgbmV0LCBpbnQgcHJvdG9jb2wsIGNoYXIgKiB4aG9zdCwg Y2hhciAqIHN2YywgCi0gICAgICAgIGNoYXIgKiB1c2VybmFtZSwgY2hhciAqIHBhc3N3b3JkLCBj aGFyICogY29tbWFuZCwKLSAgICAgICAgaW50IHBhcmFtMSwgaW50IHBhcmFtMiwgaW50IHBhcmFt MywgCi0gICAgICAgIGludCBjeCwgaW50IHN4LCBpbnQgZmxhZywgaW50IGd1aSkpOwotX1BST1RP VFlQKGludCBjeF9zZXJpYWwsIChjaGFyICpkZXZpY2UsIAotICAgICAgICBpbnQgY3gsIGludCBz eCwgaW50IHNociwgaW50IGZsYWcsIGludCBndWksIGludCBzcGVjaWFsKSk7Ci0KLSNlbmRpZiAv KiBDS1VVU1JfSCAqLwotCi0vKiBFbmQgb2YgY2t1dXNyLmggKi8KCmRpZmYgLS1naXQgYS9ja2Vy bWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzeC5jIGIvY2tlcm1pdC05LjAu MzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1c3guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggNGM0NjRmNy4uMDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tl cm1pdC05LjAuMzAyL2NrdXVzeC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTcyMSArMCwwIEBACi0j aW5jbHVkZSAiY2tjc3ltLmgiCi0KLS8qICBDIEsgVSBVIFMgWCAtLSAgIlVzZXIgSW50ZXJmYWNl IiBjb21tb24gZnVuY3Rpb25zLiAqLwotCi0vKgotICBBdXRob3JzOgotICAgIEZyYW5rIGRhIENy dXogPGZkY0Bjb2x1bWJpYS5lZHU+LAotICAgICAgVGhlIEtlcm1pdCBQcm9qZWN0LCBDb2x1bWJp YSBVbml2ZXJzaXR5LCBOZXcgWW9yayBDaXR5Ci0gICAgSmVmZnJleSBFIEFsdG1hbiA8amFsdG1h bkBzZWN1cmUtZW5kcG9pbnRzLmNvbT4KLSAgICAgIFNlY3VyZSBFbmRwb2ludHMgSW5jLiwgTmV3 IFlvcmsgQ2l0eQotCi0gIENvcHlyaWdodCAoQykgMTk4NSwgMjAxMSwKLSAgICBUcnVzdGVlcyBv ZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgotICAgIEFsbCBy aWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhl Ci0gICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1l ciBhbmQgcGVybWlzc2lvbnMuCi0qLwotCi0vKgotICBUaGlzIG1vZHVsZSBjb250YWlucyB1c2Vy IGludGVyZmFjZSBmdW5jdGlvbnMgbmVlZGVkIGJ5IGJvdGggdGhlIGludGVyYWN0aXZlCi0gIHVz ZXIgaW50ZXJmYWNlIGFuZCB0aGUgY29tbWFuZC1saW5lLW9ubHkgdXNlciBpbnRlcmZhY2UsIGFz IHdlbGwgYXMgdGhlCi0gIHNjcmVlbi1jb250cm9sIHJvdXRpbmVzIChjdXJzZXMgYW5kIGVxdWl2 YWxlbnQpLgotKi8KLQotLyogSW5jbHVkZXMgKi8KLQotI2luY2x1ZGUgImNrY2RlYi5oIgotI2lu Y2x1ZGUgImNrY2FzYy5oIgotI2luY2x1ZGUgImNrY2tlci5oIgotI2luY2x1ZGUgImNrdXVzci5o IgotI2luY2x1ZGUgImNrY3hsYS5oIgotCi0jaWZuZGVmIE5PSFRFUk1DQVAKLSNpZmRlZiBOT1RF Uk1DQVAKLSNkZWZpbmUgTk9IVEVSTUNBUAotI2Vsc2UKLSNpZm5kZWYgQlNENDQKLSNkZWZpbmUg Tk9IVEVSTUNBUAotI2Vsc2UKLSNpZmRlZiBfX2JzZGlfXwotI2RlZmluZSBOT0hURVJNQ0FQCi0j ZWxzZQotI2lmZGVmIE9QRU5CU0QKLSNkZWZpbmUgTk9IVEVSTUNBUAotI2Vsc2UKLSNpZmRlZiBN QUNPU1gKLSNkZWZpbmUgTk9IVEVSTUNBUAotI2VuZGlmIC8qIE1BQ09TWCAqLwotI2VuZGlmIC8q IE9QRU5CU0QgKi8KLSNlbmRpZiAvKiBfX2JzZGlfXyAqLwotI2VuZGlmIC8qIEJTRDQ0ICovCi0j ZW5kaWYgLyogTk9URVJNQ0FQICovCi0jZW5kaWYgLyogTk9IVEVSTUNBUCAqLwotCi0jaWZuZGVm IE5PVEVSTUNBUAotI2lmZGVmIEJTRDQ0Ci0jaWZuZGVmIE5PSFRFUk1DQVAKLSNpbmNsdWRlIDx0 ZXJtY2FwLmg+Ci0jZW5kaWYgLyogTk9IVEVSTUNBUCAqLwotI2VuZGlmIC8qIEJTRDQ0ICovCi0j ZWxzZSAgLyogIUJTRDQ0ICovCi0jaWZkZWYgbGludXgKLSNpbmNsdWRlIDx0ZXJtLmg+Ci0jZW5k aWYgLyogbGludXggKi8KLSNlbmRpZiAvKiBOT1RFUk1DQVAgKi8KLQotI2lmZGVmIE9TMgotI2lu Y2x1ZGUgPHN0cmluZy5oPgotX1BST1RPVFlQKGNoYXIgKiBvczJfZ2V0aG9zdG5hbWUsICh2b2lk KSk7Ci0jZGVmaW5lIGdldHBpZCBfZ2V0cGlkCi0jZW5kaWYgLyogT1MyICovCi0jaWZkZWYgQlNE NDQKLSNpbmNsdWRlIDxlcnJuby5oPgotI2VuZGlmIC8qIEJTRDQ0ICovCi0KLWV4dGVybiB4eF9z dHJwIHh4c3RyaW5nOwotCi0jaWZkZWYgT1MyCi0jaW5jbHVkZSAiY2tjbmV0LmgiCi0jZWxzZSAv KiBPUzIgKi8KLV9QUk9UT1RZUCggY2hhciAqIGNrZ2V0cGVlciwgKFZPSUQpKTsKLV9QUk9UT1RZ UChpbnQgZ2V0bG9jYWxpcGFkZHIsICh2b2lkKSk7Ci1fUFJPVE9UWVAoaW50IGlzdG5jb21wb3J0 LCAodm9pZCkpOwotI2lmbmRlZiBOT0NLR0VURlFIT1NUCi1fUFJPVE9UWVAoIGNoYXIgKiBja2dl dGZxaG9zdG5hbWUsKGNoYXIgKikpOwotI2VuZGlmCS8qIE5PQ0tHRVRGUUhPU1QgKi8KLSNpZm5k ZWYgTkVUQ09OTgotLyoKLSAgV2Ugc2hvdWxkIGp1c3QgcHVsbCBpbiBja2NuZXQuaCBoZXJlLCBi dXQgaXQgY2F1c2VzIGEgY29uZmxpY3Qgd2l0aCBjdXJzZXMuaC4KLSovCi0jaWZkZWYgVENQU09D S0VUCi0jZGVmaW5lIE5FVENPTk4KLSNlbHNlCi0jaWZkZWYgU1VOWDI1Ci0jZGVmaW5lIE5FVENP Tk4KLSNlbHNlCi0jaWZkZWYgU1RSQVRVU1gyNQotI2RlZmluZSBORVRDT05OCi0jZWxzZQotI2lm ZGVmIElCTVgyNQotI2RlZmluZSBORVRDT05OCi0jZWxzZQotI2lmZGVmIEhQWDI1Ci0jZGVmaW5l IE5FVENPTk4KLSNlbHNlCi0jaWZkZWYgREVDTkVUCi0jZGVmaW5lIE5FVENPTk4KLSNlbHNlCi0j aWZkZWYgTlBJUEUKLSNkZWZpbmUgTkVUQ09OTgotI2Vsc2UKLSNpZmRlZiBDS19ORVRCSU9TCi0j ZGVmaW5lIE5FVENPTk4KLSNpZmRlZiBTVVBFUkxBVAotI2RlZmluZSBORVRDT05OCi0jZWxzZQot I2VuZGlmIC8qIFNVUEVSTEFUICovCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0jZW5kaWYgLyog U1VOWDI1ICovCi0jZW5kaWYgLyogU1RSQVRVU1gyNSAqLwotI2VuZGlmIC8qIElCTVgyNSAqLwot I2VuZGlmIC8qIEhQWDI1ICovCi0jZW5kaWYgLyogREVDTkVUICovCi0jZW5kaWYgLyogTlBJUEUg Ki8KLSNlbmRpZiAvKiBDS19ORVRCSU9TICovCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotI2VuZGlm IC8qIE9TMiAqLwotCi0jaWZuZGVmIFRDUFNPQ0tFVAotI2lmZGVmIE1VTFRJTkVUCi0jZGVmaW5l IFRDUFNPQ0tFVAotI2VuZGlmIC8qIE1VTFRJTkVUICovCi0jaWZkZWYgREVDX1RDUElQCi0jZGVm aW5lIFRDUFNPQ0tFVAotI2VuZGlmIC8qIERFQ19UQ1BJUCAqLwotI2lmZGVmIFdJTlRDUAotI2Rl ZmluZSBUQ1BTT0NLRVQKLSNlbmRpZiAvKiBXSU5UQ1AgKi8KLSNpZmRlZiBUQ1BXQVJFCi0jZGVm aW5lIFRDUFNPQ0tFVAotI2VuZGlmIC8qIFRDUFdBUkUgKi8KLSNlbmRpZiAvKiBUQ1BTT0NLRVQg Ki8KLQotI2lmZGVmIE9TMgotI2lmZGVmIE5UCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1 ZGUgPHRhcGkuaD4KLSNpbmNsdWRlICJja250YXAuaCIKLSNlbHNlIC8qIE5UICovCi0jZGVmaW5l IElOQ0xfVklPCi0jaW5jbHVkZSA8b3MyLmg+Ci0jZW5kaWYgLyogTlQgKi8KLSNpZmRlZiBDT01N RU5UICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXb3VsZCB5b3UgYmVsaWV2ZSAqLwotI3Vu ZGVmIENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDxvczIuaD4gZGVmaW5lcyB0 aGlzID8gKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0jaWZkZWYgQ0tfTkVUQklPUwotI2luY2x1 ZGUgImNrb25iaS5oIgotI2VuZGlmIC8qIENLX05FVEJJT1MgKi8KLQotI2luY2x1ZGUgImNrb2Nv bi5oIgotZXh0ZXJuIGFzY3JlZW4gY29tbWFuZHNjcmVlbjsKLSNpZmRlZiBLVUkKLSNpbmNsdWRl ICJpa3VpLmgiCi0jZW5kaWYgLyogS1VJICovCi0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBO VAotI2luY2x1ZGUgImNrbndpbi5oIgotI2VuZGlmIC8qIE5UICovCi0jaWZkZWYgT1MyCi0jaW5j bHVkZSAiY2tvd2luLmgiCi0jaW5jbHVkZSAiY2tvc3luLmgiCi0jZW5kaWYgLyogT1MyICovCi0K LSNpZmRlZiBDS19UQVBJCi1leHRlcm4gaW50IHR0dGFwaTsKLWV4dGVybiBpbnQgdGFwaXBhc3M7 Ci0jZW5kaWYgLyogQ0tfVEFQSSAqLwotCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSNpbmNsdWRlICJj a3VhdGguaCIKLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotCi0jaWZuZGVmIFdJTlRDUAotI2lu Y2x1ZGUgPHNpZ25hbC5oPgotI2VuZGlmIC8qIFdJTlRDUCAqLwotCi0jaWZkZWYgVk1TCi0jaW5j bHVkZSA8ZGVzY3JpcC5oPgotI2luY2x1ZGUgPHNzZGVmLmg+Ci0jaW5jbHVkZSA8c3RzZGVmLmg+ Ci0jaWZuZGVmIE9MRF9WTVMKLSNpbmNsdWRlIDxsaWIkcm91dGluZXMuaD4gIC8qIE5vdCBmb3Ig VkFYIEMgMi4zICovCi0jZWxzZQotI2luY2x1ZGUgPGxpYmRlZi5oPgotI2VuZGlmIC8qIE9MRF9W TVMgKi8KLSNpZmRlZiBXSU5UQ1AKLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNlbmRpZiAvKiBXSU5U Q1AgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQotI2lmZGVmIERDTEZET1BFTgotLyogZmRvcGVuKCkg bmVlZHMgZGVjbGFyaW5nIGJlY2F1c2UgaXQncyBub3QgZGVjbGFyZWQgaW4gPHN0ZGlvLmg+ICov Ci1fUFJPVE9UWVAoIEZJTEUgKiBmZG9wZW4sIChpbnQsIGNoYXIgKikgKTsKLSNlbmRpZiAvKiBE Q0xGRE9QRU4gKi8KLQotI2lmZGVmIERDTFBPUEVOCi0vKiBwb3BlbigpIG5lZWRzIGRlY2xhcmlu ZyBiZWNhdXNlIGl0J3Mgbm90IGRlY2xhcmVkIGluIDxzdGRpby5oPiAqLwotX1BST1RPVFlQKCBG SUxFICogcG9wZW4sIChjaGFyICosIGNoYXIgKikgKTsKLSNlbmRpZiAvKiBEQ0xQT1BFTiAqLwot Ci1pbnQgdHRfY3JkID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2FycmlhZ2UgcmV0 dXJuIGRpc3BsYXkgKi8KLWludCB0dF9sZmQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBMaW5lZmVlZCBkaXNwbGF5ICovCi1pbnQgaW50ZXJydXB0ZWQgPSAwOyAgICAgICAgICAgICAg ICAgICAgLyogSW50ZXJydXB0ZWQgZnJvbSBrZXlib2FyZCBmbGFnICovCi1pbnQgZnhkX2luaXRl ZCA9IDA7CQkJLyogRnVsbHNjcmVlbiBzdHVmZiBpbml0aWFsaXplZCAqLwotCi0jaWZkZWYgREVC VUcKLWNoYXIgZGViZmlsW0NLTUFYUEFUSCsxXTsgICAgICAgICAgICAgICAvKiBEZWJ1Z2dpbmcg bG9nIGZpbGUgbmFtZSAqLwotI2VuZGlmIC8qIERFQlVHICovCi0KLSNpZmRlZiBUTE9HCi1jaGFy IHRyYWZpbFtDS01BWFBBVEgrMV07ICAgICAgICAgICAgICAgLyogVHJhbnNhY3Rpb24gbG9nIGZp bGUgbmFtZSAqLwotI2VuZGlmIC8qIFRMT0cgKi8KLQotY2hhciBzZXNmaWxbQ0tNQVhQQVRIKzFd OyAgICAgICAgICAgICAgIC8qIFNlc3Npb24gbG9nIGZpbGUgbmFtZSAqLwotCi0jaWZkZWYgQ0tM T0dESUFMCi1jaGFyIGRpYWZpbFtDS01BWFBBVEgrMV07ICAgICAgICAgICAgICAgLyogQ29ubmVj dGlvbiBsb2cgZmlsZSBuYW1lICovCi1jaGFyIGN4bG9nYnVmW0NYTE9HQlVGTCsxXTsgICAgICAg ICAgICAgLyogQ29ubmVjdGlvbiBsb2cgcmVjb3JkIGJ1ZmZlciAqLwotaW50IGN4X2FjdGl2ZSA9 IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIENvbm5lY3Rpb24gaXMgYWN0aXZlICovCi1leHRl cm4gaW50IGRpYWxvZzsKLSNlbmRpZiAvKiBDS0xPR0RJQUwgKi8KLQotI2lmZGVmIERZTkFNSUMK LXN0YXRpYyBjaGFyICpjbWRzdHIgPSBOVUxMOyAgICAgICAgICAgICAvKiBQbGFjZSB0byBidWls ZCBnZW5lcmljIGNvbW1hbmQgKi8KLSNlbHNlCi0jaWZkZWYgcGRwMTEKLXN0YXRpYyBjaGFyIGNt ZHN0clsyNTZdOwotI2Vsc2UKLXN0YXRpYyBjaGFyIGNtZHN0cls0MDk2XTsKLSNlbmRpZiAvKiBw ZHAxMSAqLwotI2VuZGlmIC8qIERZTkFNSUMgKi8KLQotI2lmbmRlZiBOT01TRU5ECi1jaGFyIGZz cGVjW0NNREJMKzRdOyAgICAgICAgICAgICAgICAgICAgLyogRmlsZW5hbWUgc3RyaW5nIGZvciBc dihmaWxlc3BlYykgKi8KLWludCBmc3BlY2xlbiA9IENNREJMOwotI2Vsc2UKLWNoYXIgZnNwZWNb Q0tNQVhQQVRIKzRdOwotaW50IGZzcGVjbGVuID0gQ0tNQVhQQVRIOwotI2VuZGlmIC8qIE5PTVNF TkQgKi8KLQotY2hhciAqIHJmc3BlYyA9IE5VTEw7CQkJLyogUmVjZWl2ZWQgZmlsZXNwZWM6IGxv Y2FsICovCi1jaGFyICogcHJmc3BlYyA9IE5VTEw7CQkJLyogUHJlbGltaW5hcnkgcmZzcGVjICov Ci1jaGFyICogc2ZzcGVjID0gTlVMTDsJCQkvKiBTZW50IGZpbGVzcGVjOiBsb2NhbCAqLwotY2hh ciAqIHBzZnNwZWMgPSBOVUxMOwkJCS8qIFByZWxpbWluYXJ5IHNmc3BlYyAqLwotY2hhciAqIHNy ZnNwZWMgPSBOVUxMOwkJCS8qIFJlY2VpdmVkIGZpbGVzcGVjOiByZW1vdGUgKi8KLWNoYXIgKiBw c3Jmc3BlYyA9IE5VTEw7CQkJLyogUHJlbGltaW5hcnkgc3Jmc3BlYyAqLwotY2hhciAqIHJyZnNw ZWMgPSBOVUxMOwkJCS8qIFNlbnQgZmlsZXNwZWM6IHJlbW90ZSAqLwotY2hhciAqIHBycmZzcGVj ID0gTlVMTDsJCQkvKiBQcmVsaW1pbmFyeSBycmZzcGVjICovCi0KLWludCBzdWNjZXNzID0gMSwg ICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIHN1Y2Nlc3MvZmFpbHVyZSBmbGFnICov Ci0gICAgY21kbHZsID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBsZXZl bCAqLwotICAgIGFjdGlvbiA9IDAsCQkJCS8qIEFjdGlvbiBzZWxlY3RlZCBvbiBjb21tYW5kIGxp bmUgKi8KLSAgICBzbG9ndHMgPSAwLAkJCQkvKiBTZXNzaW9uLWxvZyB0aW1lc3RhbXBzIG9uL29m ZiAqLwotICAgIHNsb2dudWwgPSAwLAkJCS8qIFNlc3Npb24tbG9nIG51bGwtdGVybWluYXRlZCBs aW5lcyAqLwotI2lmZGVmIFVOSVgKLSAgICBzZXNzZnQgPSBYWUZUX1QsICAgICAgICAgICAgICAg ICAgICAvKiBTZXNzaW9uIGxvZyBmaWxlIHR5cGUgKi8KLSNlbHNlCi0gICAgc2Vzc2Z0ID0gWFlG VF9CLAkJCS8qICh0ZXh0IGZvciBVTklYIGJpbmFyeSBmb3Igb3RoZXJzKSAqLwotI2VuZGlmIC8q IFVOSVggKi8KLSAgICBwZmxhZyA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcmlu dCBwcm9tcHQgKi8KLSAgICBtc2dmbGcgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQ cmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzICovCi0KLWV4dGVybiBpbnQgeGFza21vcmUsIHNh dmVhc2s7CQkvKiBNb3JlLXByb21wdGluZyAqLwotCi0jaWZkZWYgQ0tfQVBDCi1leHRlcm4gaW50 IGFwY2FjdGl2ZTsKLSNlbmRpZiAvKiBDS19BUEMgKi8KLS8qIEV4dGVybmFsIHZhcmlhYmxlcyAq LwotCi1leHRlcm4gaW50IGxvY2FsLCBxdWlldCwgYmluYXJ5LCBuZXR3b3JrLCB3aGF0LCBwYXJp dHksIHhpdHN0YSwgZXNjYXBlLAotICB0bGV2ZWwsIGJnc2V0LCBiYWNrZ3JkLCB4c3VzcGVuZCwg Y21kaW50LCBuZXR0eXBlLCBzZXNsb2csIGRmbG9jOwotCi1leHRlcm4gaW50IGNtZF9yb3dzLCBj bWRfY29scywgeGNtZHNyYzsKLQotZXh0ZXJuIGNoYXIgY21kZmlsW107Ci0KLSNpZmRlZiBWTVMK LWV4dGVybiBpbnQgYmF0Y2g7Ci0jZW5kaWYgLyogVk1TICovCi0KLSNpZmRlZiBkYXRhZ2VuZXJh bCAgICAgICAgICAgICAgICAgICAgICAvKiAyLzEyLzkyIEVOSCAqLwotI2luY2x1ZGUgPHN5c2lk Lmg+Ci1leHRlcm4gaW50IGNvbl9yZWFkc19tdCwgY29uaW50X2NoLCBjb25pbnRfYXZsOwotI2Vu ZGlmIC8qIGRhdGFnZW5lcmFsICovCi0KLWV4dGVybiBsb25nIHNwZWVkOwotCi1leHRlcm4gY2hh ciB0dG5hbWVbXSwgKmRmdHR5LCAqY21hcmcsICoqY21saXN0LCAqdmVyc2lvLCBteWhvc3RbXTsK LQotI2lmbmRlZiBOT0NTRVRTCi1leHRlcm4gaW50IGZjaGFyc2V0LCB0Y2hhcnNldCwgeGZyeGxh OwotZXh0ZXJuIHN0cnVjdCBjc2luZm8gZmNzaW5mb1tdLCB0Y3NpbmZvW107Ci0jZW5kaWYgLyog Tk9DU0VUUyAqLwotCi0jaWZkZWYgT1MyCi1leHRlcm4gdW5zaWduZWQgY2hhciBjb2xvcmNtZDsK LSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIE5PWEZFUgotCi1pbnQgZmRpc3BsYSA9IFhZRkRf TjsKLQotI2Vsc2UgIC8qIE5PWEZFUiBpcyBub3QgZGVmaW5lZCAqLwotCi0jaWZkZWYgT1MyICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSB0cmFuc2ZlciBkaXNwbGF5IHR5cGUg Ki8KLWludCBmZGlzcGxhID0gWFlGRF9DOyAgICAgICAgICAgICAgICAgICAvKiBDdXJzZXMgKGZ1 bGxzY3JlZW4pIGlmIHdlIGhhdmUgaXQgKi8KLSNlbHNlCi0jaWZkZWYgQ0tfQ1VSU0VTCi1pbnQg ZmRpc3BsYSA9IFhZRkRfQzsKLSNlbHNlCi1pbnQgZmRpc3BsYSA9IFhZRkRfUzsgICAgICAgICAg ICAgICAgICAgLyogT3RoZXJ3aXNlIENSVCAqLwotI2VuZGlmIC8qIENLX0NVUlNFUyAqLwotI2Vu ZGlmIC8qIE9TMiAqLwotCi1leHRlcm4gc3RydWN0IGNrX3AgcHRhYltdOwotZXh0ZXJuIGludCBw cm90b2NvbCwgeGZyYmVsLCB4ZnJpbnQ7Ci0KLSNpZmRlZiBTVFJFQU1JTkcKLWV4dGVybiBpbnQg c3RyZWFtaW5nLCBzdHJlYW1vazsKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLQotLyogVXNlZCBp bnRlcm5hbGx5ICovCi0KLSNpZmRlZiBLVUkKLV9QUk9UT1RZUCggVk9JRCBzY3JlZW5nLCAoaW50 LCBjaGFyLCBsb25nLCBjaGFyICopICk7Ci0jZW5kaWYJLyogS1VJICovCi1fUFJPVE9UWVAoIFZP SUQgc2NyZWVuYywgKGludCwgY2hhciwgQ0tfT0ZGX1QsIGNoYXIgKikgKTsKLQotCi0jaWZkZWYg Q0tfQ1VSU0VTCi0jaWZuZGVmIERZTkFNSUMKLXN0YXRpYyBjaGFyIHh0cm1idWZbVFJNQlVGTF07 ICAgICAgICAgICAvKiB0Z2V0ZW50KCkgYnVmZmVyICovCi1jaGFyICogdHJtYnVmID0geHRybWJ1 ZjsKLSNlbHNlCi1jaGFyICogdHJtYnVmID0gTlVMTDsKLSNlbmRpZiAvKiBEWU5BTUlDICovCi1f UFJPVE9UWVAoIHN0YXRpYyBWT0lEIGRweWluaXQsICh2b2lkKSApOwotX1BST1RPVFlQKCBzdGF0 aWMgbG9uZyBzaG9jcHMsIChpbnQsIENLX09GRl9ULCBDS19PRkZfVCkgKTsKLV9QUk9UT1RZUCgg c3RhdGljIENLX09GRl9UIHNob2V0bCwgKENLX09GRl9ULCBsb25nLCBDS19PRkZfVCwgQ0tfT0ZG X1QpICk7Ci0jZW5kaWYgLyogQ0tfQ1VSU0VTICovCi0KLXN0YXRpYyBpbnQgZnRfd2luID0gMDsg IC8qIEZ1bGxzY3JlZW4gZmlsZSB0cmFuc2ZlciBkaXNwbGF5IHdpbmRvdyBpcyBhY3RpdmUgKi8K LQotLyogVmFyaWFibGVzIGRlY2xhcmVkIGhlcmUgKi8KLQotc3RhdGljIGNoYXIgKiBza3JlYXNv bltdID0gewotICAgICIiLAkJCQkJLyogMCAqLwotICAgICJSZW1vdGUgZmlsZSBub3Qgb2xkZXIi LAkJLyogU0tQX0RBVCAqLwotICAgICJJZGVudGljYWwgbW9kaWZpY2F0aW9uIHRpbWVzIiwJLyog U0tQX0VRVSAqLwotICAgICJUeXBlIiwJCQkJLyogU0tQX1RZUCAqLwotICAgICJTaXplIiwJCQkJ LyogU0tQX1NJWiAqLwotICAgICJOYW1lIGNvbGxpc2lvbiIsCQkJLyogU0tQX05BTSAqLwotICAg ICJFeGNlcHRpb24gTGlzdCIsCQkJLyogU0tQX0VYTCAqLwotICAgICJEb3QgZmlsZSIsCQkJCS8q IFNLUF9ET1QgKi8KLSAgICAiQmFja3VwIGZpbGUiLAkJCS8qIFNLUF9CS1UgKi8KLSAgICAiUmVj b3Zlcnkgbm90IG5lZWRlZCIsCQkvKiBTS1BfUkVTICovCi0gICAgIkFjY2VzcyBkZW5pZWQiLAkJ CS8qIFNLUF9BQ0MgKi8KLSAgICAiTm90IGEgcmVndWxhciBmaWxlIiwJCS8qIFNLUF9OUkYgKi8K LSAgICAiU2ltdWxhdGVkIiwJCQkvKiBTS1BfU0lNICovCi0gICAgIlNpbXVsYXRlZCAtIFJlbW90 ZSBmaWxlIG9sZGVyIiwJLyogU0tQX1hVUCAqLwotICAgICJTaW11bGF0ZWQgLSBObyByZW1vdGUg ZmlsZSIsCS8qIFNLUF9YTlggKi8KLX07Ci1zdGF0aWMgaW50IG5za3JlYXNvbiA9IChzaXplb2Yo c2tyZWFzb24pIC8gc2l6ZW9mKGNoYXIgKikpOwotCi1jaGFyICoKLWdza3JlYXNvbihuKSBpbnQg bjsgewotICAgIHJldHVybigobiA+IDAgJiYgbiA8IG5za3JlYXNvbikgPyBza3JlYXNvbltuXSA6 ICIiKTsKLX0KLQotY2hhciBwa3RmaWxbQ0tNQVhQQVRIKzFdOyAgICAgICAgICAgICAgIC8qIFBh Y2tldCBsb2cgZmlsZSBuYW1lICovCi0KLSNpZm5kZWYgTk9NU0VORCAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBNdWx0aXBsZSBTRU5EICovCi1jaGFyICptc2ZpbGVzW01TRU5ETUFYXTsKLSNl bmRpZiAvKiBOT01TRU5EICovCi0KLSNpZmRlZiBDS19USU1FUlMKLWV4dGVybiBsb25nIHJ0dGRl bGF5OwotZXh0ZXJuIGludCAgcnR0ZmxnOwotI2VuZGlmIC8qIENLX1RJTUVSUyAqLwotZXh0ZXJu IGludCByY3Z0aW1vOwotCi0jaWZkZWYgQ0tfUkVTRU5ECi1leHRlcm4gaW50IHNlbmRtb2RlOwot ZXh0ZXJuIENLX09GRl9UIHNlbmRzdGFydCwgcnNfbGVuOwotI2VuZGlmIC8qIENLX1JFU0VORCAq LwotCi0jaWZkZWYgQ0tfUENUX0JBUiAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSB0cmFu c2ZlciB0aGVybW9tZXRlciAqLwotaW50IHRoZXJtb21ldGVyID0gMTsgICAgICAgICAgICAgICAg ICAgIC8qIE9OIGJ5IGRlZmF1bHQgKi8KLSNlbmRpZiAvKiBDS19QQ1RfQkFSICovCi0KLSNpZmRl ZiBHRlRJTUVSCi1DS0ZMT0FUIGd0diA9IC0xLjAsIG9sZGd0diA9IC0xLjA7Ci0jZWxzZQotI2lm bmRlZiBPUzIKLXN0YXRpYwotI2VuZGlmIC8qIE9TMiAqLwotICBsb25nIGd0diA9IC0xTCwgb2xk Z3R2ID0gLTFMOwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLQotZXh0ZXJuIGludCBzZXJ2ZXIsIGJj dHUsIHJwdGZsZywgZWJxZmxnLCBzcHNpeiwgdXJwc2l6LCB3bWF4LCBjenNlZW4sIGN4c2VlbiwK LSAgd2lubG8sIGRpc3BsYSwgdGltaW50LCBucGFkLCBlYnEsIGJjdHIsIHJwdHEsIGF0Y2FwdSwg bHBjYXB1LAotICBzd2NhcHUsIHdzbG90biwgd3Nsb3RyLCBydGltbywgbXlwYWRuLCBzcSwgY2Fw YXMsIHJwc2l6LCB0c2VjcywKLSAgcGt0bG9nLCBsc2NhcHUsIGRlc3QsIHNydmRpcywgd3Nsb3Rz LCBzcGFja2V0cywgc3BrdGwsIHJwa3RsLAotICByZXRyYW5zLCB3Y3VyLCBudW1lcnJzLCBmc2Vj cywgd2hhdHJ1LCBjcnVuY2hlZCwgdGltZW91dHMsCi0gIHJwYWNrZXRzLCBmbmNudiwgYnllX2Fj dGl2ZSwgZGlzY2FyZCwgaW5zZXJ2ZXIsIGRpcmFjdGl2ZSwgY2RhY3RpdmU7Ci0KLWV4dGVybiBs b25nIGZpbGNudCwgZmlscmVqLCBycHRuLCBmaWxjcHMsIHRmY3BzLCBjcHMsIHBlYWtjcHM7Ci1l eHRlcm4gQ0tfT0ZGX1QgZmZjLCB0ZmMsIGZzaXplOyAKLQotbG9uZyBvbGRjcHMgPSAwTDsKLQot ZXh0ZXJuIENIQVIgKnJkYXRhcCwgcGFkY2gsIHNlb2wsIGN0bHEsIG15cGFkYywgZW9sLCAqZXBr dG1zZzsKLWV4dGVybiBjaGFyICp4ZnJtc2c7Ci0KLSNpZmRlZiBJS1NEQgotRklMRSAqIGRiZnAg PSBOVUxMOyAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgcG9pbnRlciB0byBkYXRhYmFzZSBm aWxlICovCi0KLWludCBkYmVuYWJsZWQgPSAxOyAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFn IGZvciBkYXRhYmFzZSBpcyBlbmFibGVkICovCi1leHRlcm4gaW50IGlrZGJvcGVuOyAgICAgICAg ICAgICAgICAgICAgLyogRmxhZyBmb3IgZGF0YWJhc2UgaXMgb3BlbiAqLwotCi11bnNpZ25lZCBs b25nIG15ZGJzZWVrID0gMEw7ICAgICAgICAgICAgLyogU2VlayBwb2ludGVyIHRvIG15IHJlY29y ZCAqLwotaW50IG15ZGJzbG90ID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIE15IHNsb3Qg bnVtYmVyICovCi11bnNpZ25lZCBsb25nIG15ZmxhZ3MgPSAwTDsgICAgICAgICAgICAgLyogTXkg ZmxhZ3MgKi8KLXVuc2lnbmVkIGxvbmcgbXlhdHlwZSA9IDBMOyAgICAgICAgICAgICAvKiBNeSBh dXRob3JpemF0aW9uIHR5cGUgKi8KLXVuc2lnbmVkIGxvbmcgbXlhbW9kZSA9IDBMOyAgICAgICAg ICAgICAvKiBNeSBhdXRob3JpemF0aW9uIG1vZGUgKi8KLXVuc2lnbmVkIGxvbmcgbXlzdGF0ZSA9 IDBMOyAgICAgICAgICAgICAvKiBNeSBzdGF0ZSAoU0VORCwgUkVDRUlWRSwgZXRjKSAqLwotdW5z aWduZWQgbG9uZyBteXBpZCA9IDBMOyAgICAgICAgICAgICAgIC8qIE15IFBJRCAqLwotdW5zaWdu ZWQgbG9uZyBteWlwID0gMEw7ICAgICAgICAgICAgICAgIC8qIE15IElQIGFkZHJlc3MgKi8KLXVu c2lnbmVkIGxvbmcgcGVlcmlwID0gMEw7ICAgICAgICAgICAgICAvKiBNeSBwZWVyJ3MgSVAgYWRk cmVzcyAqLwotCi11bnNpZ25lZCBsb25nIGRiaXAgPSAwTDsgICAgICAgICAgICAgICAgLyogSVAg YWRkcmVzcyBpbiBkYiByZWNvcmQgKi8KLXVuc2lnbmVkIGxvbmcgZGJwaWQgPSAwTDsgICAgICAg ICAgICAgICAvKiBQSUQgaW4gZGIgcmVjb3JkICovCi11bnNpZ25lZCBsb25nIGRiZmxhZ3MgPSAw TDsgICAgICAgICAgICAgLyogRmxhZ3MgZmllbGQgaW4gZGIgcmVjb3JkICovCi11bnNpZ25lZCBs b25nIGRibGFzdHVzZWQgPSAwTDsgICAgICAgICAgLyogTGFzdCBpbi11c2UgcmVjb3JkIGluIGRi ICovCi1jaGFyIGRicmVjW0RCX1JFQ0xdOyAgICAgICAgICAgICAgICAgICAgLyogRGF0YWJhc2Ug cmVjb3JkIGJ1ZmZlciAqLwotCi1jaGFyICogZGJkaXIgICA9IE5VTEw7ICAgICAgICAgICAgICAg ICAgLyogRGF0YWJhc2UgZGlyZWN0b3J5ICovCi1jaGFyICogZGJmaWxlICA9IE5VTEw7ICAgICAg ICAgICAgICAgICAgLyogRGF0YWJhc2UgZmlsZSBmdWxsIHBhdGhuYW1lICovCi1jaGFyIG15aGV4 aXBbMzNdID0geyBOVUwsIE5VTCB9OyAgICAgICAgLyogTXkgSVAgYWRkcmVzcyBpbiBoZXggKi8K LWNoYXIgcGVlcmhleGlwWzMzXSA9IHsgTlVMLCBOVUwgfTsgICAgICAvKiBDbGllbnQncyBJUCBh ZGRyZXNzIGluIGhleCAqLwotI2VuZGlmIC8qIElLU0RCICovCi0KLSNpZmRlZiBHRlRJTUVSCi1l eHRlcm4gQ0tGTE9BVCBmcGZzZWNzLCBmcHRzZWNzLCBmcHhmc2VjczsKLSNlbHNlCi1leHRlcm4g bG9uZyB4ZnNlY3M7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwot Ci0jaWZkZWYgVENQU09DS0VUCi0jaWZkZWYgTkVXRlRQCi1leHRlcm4gY2hhciAqIGZ0cF9ob3N0 LCBmdHBfc3J2dHlwW107Ci1leHRlcm4gaW50IGZ0cF9jc3gsIGZ0cF9jc2wsIGZ0cF9kZWI7Ci0j ZW5kaWYgLyogTkVXRlRQICovCi1leHRlcm4gY2hhciBteWlwYWRkcltdOwotI2VuZGlmIC8qIFRD UFNPQ0tFVCAqLwotCi0jaWZuZGVmIE5PSUNQCi0jaWZuZGVmIE5PU1BMCi0gICAgZXh0ZXJuIHN0 cnVjdCBtdGFiICptYWN0YWI7ICAgICAgICAgLyogRm9yIE9OX0VYSVQgbWFjcm8uICovCi0gICAg ZXh0ZXJuIGludCBubWFjOwotI2VuZGlmIC8qIE5PU1BMICovCi0jaWZkZWYgRENNREJVRgotZXh0 ZXJuIGNoYXIgKmNtZGJ1ZjsgICAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgYnVmZmVyICov Ci0jZWxzZQotZXh0ZXJuIGNoYXIgY21kYnVmW107ICAgICAgICAgICAgICAgICAgIC8qIENvbW1h bmQgYnVmZmVyICovCi0jZW5kaWYgLyogRENNREJVRiAqLwotZXh0ZXJuIGludCBjbWRfcXVvdGlu ZzsKLSNlbmRpZiAvKiBOT0lDUCAqLwotCi0jaWZuZGVmIE5PQ0NUUkFQCi0jaWZkZWYgTlQKLSNp bmNsdWRlIDxzZXRqbXBleC5oPgotI2Vsc2UgLyogTlQgKi8KLSNpbmNsdWRlIDxzZXRqbXAuaD4K LSNlbmRpZiAvKiBOVCAqLwotI2luY2x1ZGUgImNrY3NpZy5oIgotZXh0ZXJuIGNram1wYnVmIGNt amJ1ZjsKLSNlbmRpZiAvKiBOT0NDVFJBUCAqLwotCi1leHRlcm4gaW50IHhmaWxldHlwZSwgbnNj YW5maWxlOwotCi1pbnQKLXNob2VzYyhlc2NhcGUpIGludCBlc2NhcGU7IHsKLSAgICBleHRlcm4g Y2hhciAqIGNjbnRhYltdOwkJLyogQzAgY29udHJvbCBjaGFyYWN0ZXIgbmFtZSB0YWJsZSAqLwot ICAgIGV4dGVybiBpbnQgdHRfZXNjYXBlOwotICAgIGlmICgoZXNjYXBlID4gMCAmJiBlc2NhcGUg PCAzMikgfHwgKGVzY2FwZSA9PSAxMjcpKSB7Ci0JcHJpbnRmKCIgRXNjYXBlIGNoYXJhY3Rlcjog Q3RybC0lYyAoQVNDSUkgJWQsICVzKTogJXNcclxuIiwKLQkgICAgICAgY3RsKGVzY2FwZSksCi0J ICAgICAgIGVzY2FwZSwKLQkgICAgICAgKGVzY2FwZSA9PSAxMjcgPyAiREVMIiA6IGNjbnRhYltl c2NhcGVdKSwKLQkgICAgICAgdHRfZXNjYXBlID8gImVuYWJsZWQiIDogImRpc2FibGVkIgotCSAg ICAgICApOwotICAgIH0gZWxzZSB7Ci0JcHJpbnRmKCIgRXNjYXBlIGNoYXJhY3RlcjogQ29kZSAl ZCIsZXNjYXBlKTsKLQlpZiAoZXNjYXBlID4gMTYwICYmIGVzY2FwZSA8IDI1NikKLQkgIHByaW50 ZigiICglYykiLGVzY2FwZSk7Ci0JcHJpbnRmKCI6ICVzXHJcbiIsIHR0X2VzY2FwZSA/ICJlbmFi bGVkIiA6ICJkaXNhYmxlZCIpOwkKLSAgICB9Ci0gICAgcmV0dXJuKDApOwotfQotCi0jaWZuZGVm IE5PWEZFUgotLyogIFAgUiBFIFMgRSBUICAtLSAgUmVzZXQgZ2xvYmFsIHByb3RvY29sIHZhcmlh YmxlcyAgKi8KLQotZXh0ZXJuIGludCByZWN1cnNpdmU7Ci0KLSNpZmRlZiBQQVRURVJOUwotaW50 IHBhdHRlcm5zID0gU0VUX0FVVE87ICAgICAgICAgICAgICAgIC8qIFdoZXRoZXIgdG8gdXNlIGZp bGVuYW1lIHBhdHRlcm5zICovCi1leHRlcm4gaW50IGdfcGF0dGVybnM7CQkJLyogRm9yIHNhdmlu ZyBhbmQgcmVzdG9yaW5nICovCi0jZWxzZQotaW50IHBhdHRlcm5zID0gU0VUX09GRjsKLSNlbmRp ZiAvKiBQQVRURVJOUyAqLwotCi0jaWZuZGVmIE5PSUNQCi0jaWZkZWYgQ0tfTEFCRUxFRAotZXh0 ZXJuIGludCBnX2xmX29wdHMsIGxmX29wdHM7Ci0jZW5kaWYgLyogQ0tfTEFCRUxFRCAqLwotZXh0 ZXJuIGludCBnX21hdGNoZG90LCBnX3VzZXBpcGVzLCB1c2VwaXBlczsKLWV4dGVybiBpbnQgZ19i aW5hcnksIGdfcHJvdG8sIGdfZGlzcGxhLCBnX3NwYXRoLCBnX3JwYXRoLCBnX2ZuY252OwotZXh0 ZXJuIGludCBnX3JlY3Vyc2l2ZTsKLWV4dGVybiBpbnQgZ194ZmVybW9kZSwgeGZlcm1vZGU7Ci1l eHRlcm4gaW50IGdfdXJwc2l6LCBnX3Nwc2l6ZiwgZ19zcHNpejsKLWV4dGVybiBpbnQgZ19zcHNp enIsIGdfc3BtYXgsIGdfd3Nsb3RyLCBnX3ByZWZpeGluZywgZ19mbmNhY3Q7Ci1leHRlcm4gaW50 IGdfZm5zcGF0aCwgZ19mbnJwYXRoLCBnX3NraXBidXA7Ci1leHRlcm4gaW50IG5vbGlua3M7Ci0j aWZkZWYgQ0tTWU1MSU5LCi1leHRlcm4gaW50IHpnZnNfbGluazsKLSNlbmRpZiAvKiBDS1NZTUxJ TksgKi8KLSNpZm5kZWYgTk9TUEwKLWV4dGVybiBpbnQgZ19wZmxnLCBwd2ZsZywgZ19wY3B0LCBw d2NyeXB0OwotZXh0ZXJuIGNoYXIgKiBnX3Bzd2QsIHB3YnVmW107Ci0jZW5kaWYgLyogTk9TUEwg Ki8KLSNlbmRpZiAvKiBOT0lDUCAqLwotCi1leHRlcm4gaW50IHNwc2l6Ziwgc3BzaXpyLCBzcG1h eCwgcHJlZml4aW5nLCBmbmNhY3QsIGZuc3BhdGgsIGZucnBhdGg7Ci1leHRlcm4gaW50IG1vdmlu ZzsgICAgICAgICAgICAgICAgICAgICAgLyogU0VORCBjcml0ZXJpYSAqLwotZXh0ZXJuIGNoYXIg c25kYWZ0ZXJbXSwgc25kYmVmb3JlW10sICpzbmRleGNlcHRbXSwgKnJjdmV4Y2VwdFtdOwotZXh0 ZXJuIENLX09GRl9UIHNuZGxhcmdlciwgc25kc21hbGxlciwgY2FsaWJyYXRlOwotZXh0ZXJuIGlu dCBybWFpbGYsIHJwcmludGYsIHNraXBidXA7Ci1leHRlcm4gY2hhciBvcHRidWZbXTsKLQotI2lm ZGVmIFBJUEVTRU5ECi1leHRlcm4gY2hhciAqIGdfc2ZpbHRlciwgKiBnX3JmaWx0ZXI7Ci1leHRl cm4gY2hhciAqIHNuZGZpbHRlciwgKiByY3ZmaWx0ZXI7Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8K LWV4dGVybiBjaGFyICoqIHNuZGFycmF5OwotCi1WT0lECi1mdHJlc2V0KCkgewotI2lmbmRlZiBO T0lDUAotICAgIGludCBpOwotICAgIGV4dGVybiBjaGFyICogZmlsZWZpbGU7Ci0gICAgZXh0ZXJu IGludCByZWxpYWJsZSwgeHJlbGlhYmxlLCBjX3NhdmUsIHNzX3NhdmUsIHNsb3N0YXJ0LCB1cmNs ZWFyOwotICAgIGV4dGVybiBpbnQgb29wdHMsIG9tb2RlLCBvbmFtZSwgb3BhdGgsIGthY3RpdmUs IGF1dG9wYXRoOwotICAgIGV4dGVybiBjaGFyICogc25kX21vdmU7ICAgICAgICAgICAgIC8qIERp cmVjdG9yeSB0byBtb3ZlIHNlbnQgZmlsZXMgdG8gKi8KLSAgICBleHRlcm4gY2hhciAqIHNuZF9y ZW5hbWU7ICAgICAgICAgICAvKiBXaGF0IHRvIHJlbmFtZSBzZW50IGZpbGVzIHRvICovCi0gICAg ZXh0ZXJuIGNoYXIgKiByY3ZfbW92ZTsKLSAgICBleHRlcm4gY2hhciAqIHJjdl9yZW5hbWU7Ci0g ICAgZXh0ZXJuIGNoYXIgKiBnX3NuZF9tb3ZlOwotICAgIGV4dGVybiBjaGFyICogZ19zbmRfcmVu YW1lOwotICAgIGV4dGVybiBjaGFyICogZ19yY3ZfbW92ZTsKLSAgICBleHRlcm4gY2hhciAqIGdf cmN2X3JlbmFtZTsKLQotI2lmZGVmIENLX1RNUERJUgotICAgIGV4dGVybiBpbnQgZl90bXBkaXI7 Ci0gICAgZXh0ZXJuIGNoYXIgc2F2ZGlyW107Ci0jZW5kaWYgLyogQ0tfVE1QRElSICovCi0KLSNp ZmRlZiBDS19TUEVFRAotI2lmZGVmIENPTU1FTlQKLSAgICBleHRlcm4gaW50IGZfY3RscDsKLSAg ICBleHRlcm4gc2hvcnQgc19jdGxwW10sIGN0bHBbXTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0j ZW5kaWYgLyogQ0tfU1BFRUQgKi8KLQotI2lmbmRlZiBOT0NTRVRTCi0gICAgZXh0ZXJuIGludCBm Y3Nfc2F2ZSwgdGNzX3NhdmU7Ci0gICAgZXh0ZXJuIGludCBnX3hmcnhsYSwgeGZyeGxhOwotI2Vu ZGlmIC8qIE5PQ1NFVFMgKi8KLQotLyogUmVzdG9yZSAvIHJlc2V0IHBlci1jb21tYW5kIGZpbGUt dHJhbnNmZXIgc3dpdGNoZXMgKi8KLQotICAgIG1ha2VzdHIoJnNuZF9tb3ZlLGdfc25kX21vdmUp OwotICAgIG1ha2VzdHIoJnJjdl9tb3ZlLGdfcmN2X21vdmUpOwotICAgIG1ha2VzdHIoJnNuZF9y ZW5hbWUsZ19zbmRfcmVuYW1lKTsKLSAgICBtYWtlc3RyKCZyY3ZfcmVuYW1lLGdfcmN2X3JlbmFt ZSk7Ci0KLSAgICBrYWN0aXZlID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBLZXJtaXQg cHJvdG9jb2wgbm8gbG9uZ2VyIGFjdGl2ZSAqLwotICAgIG9vcHRzID0gLTE7ICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIE8tUGFja2V0IE9wdGlvbnMgKi8KLSAgICBvbW9kZSA9IC0xOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBPLVBhY2tldCBUcmFuc2ZlciBNb2RlICovCi0gICAgb25h bWUgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTy1QYWNrZXQgRmlsZW5hbWUgT3B0 aW9ucyAqLwotICAgIG9wYXRoID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE8tUGFj a2V0IFBhdGhuYW1lIE9wdGlvbnMgKi8KLQotI2lmZGVmIENLX1JFU0VORAotICAgIHJzX2xlbiA9 IDBMOwkJCS8qIFJFR0VUIHBvc2l0aW9uICovCi0jZW5kaWYgLyogQ0tfUkVTRU5EICovCi0KLSNp ZmRlZiBDT01NRU5UCi0jaWZkZWYgQ0tfU1BFRUQKLSAgICBpZiAoZl9jdGxwKSB7Ci0gICAgICAg IGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKLSAgICAgICAgICBjdGxwW2ldID0gc19jdGxwW2ld OwotICAgICAgICBmX2N0bHAgPSAwOwotICAgIH0KLSNlbmRpZiAvKiBDS19TUEVFRCAqLwotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLQotI2lmZGVmIENLX1RNUERJUgotICAgIGlmIChmX3RtcGRpcikg ewkJCS8qIElmIHdlIGNoYW5nZWQgdG8gZG93bmxvYWQgZGlyICovCi0JemNoZGlyKChjaGFyICop IHNhdmRpcik7CS8qIEdvIGJhY2sgd2hlcmUgd2UgY2FtZSBmcm9tICovCi0JZl90bXBkaXIgPSAw OwotICAgIH0KLSNlbmRpZiAvKiBDS19UTVBESVIgKi8KLQotICAgIGNhbGlicmF0ZSA9IDBMOyAg ICAgICAgICAgICAgICAgICAgIC8qIENhbGlicmF0aW9uIHJ1biAqLwotICAgIGlmICh4cmVsaWFi bGUgPiAtMSkgewotCXJlbGlhYmxlID0geHJlbGlhYmxlOwotCWRlYnVnKEYxMDEsImZ0cmVzZXQg cmVsaWFibGUiLCIiLHJlbGlhYmxlKTsKLSAgICB9Ci0gICAgdXJjbGVhciA9IDA7Ci0KLSAgICBp ZiAoYXV0b3BhdGgpIHsgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgUkVDRUlWRSBQQVRITkFN RVMgQVVUTyAqLwotICAgICAgICBmbnJwYXRoID0gUEFUSF9BVVRPOwotICAgICAgICBhdXRvcGF0 aCA9IDA7Ci0gICAgfQotICAgIGlmIChmaWxlZmlsZSkgeyAgICAgICAgICAgICAgICAgICAgIC8q IEZpbGUgbGlzdCAqLwotICAgICAgICB6Y2xvc2UoWk1GSUxFKTsKLSAgICAgICAgbWFrZXN0cigm ZmlsZWZpbGUsTlVMTCk7Ci0gICAgfQotICAgIGlmIChjX3NhdmUgPiAtMSkgeyAgICAgICAgICAg ICAgICAgIC8qIEJsb2NrIENoZWNrIFR5cGUgKi8KLSAgICAgICAgYmN0ciA9IGNfc2F2ZTsKLSAg ICAgICAgY19zYXZlID0gLTE7Ci0gICAgfQotICAgIGlmIChzc19zYXZlID4gLTEpIHsgICAgICAg ICAgICAgICAgIC8qIFNsb3cgU3RhcnQgKi8KLSAgICAgICAgc2xvc3RhcnQgPSBzc19zYXZlOwot ICAgICAgICBzc19zYXZlID0gLTE7Ci0gICAgfQotI2lmZGVmIENLX0xBQkVMRUQKLSAgICBpZiAo Z19sZl9vcHRzID4gLTEpIHsKLSAgICAgICAgbGZfb3B0cyA9IGdfbGZfb3B0czsgICAgICAgICAg ICAvKiBSZXN0b3JlIGxhYmVsZWQgdHJhbnNmZXIgb3B0aW9ucyAqLwotICAgICAgICBnX2xmX29w dHMgPSAtMTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfTEFCRUxFRCAqLwotCi0jaWZuZGVmIE5PQ1NF VFMKLSAgICBpZiAodGNzX3NhdmUgPiAtMSkgeyAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIg c2V0cyAqLwotICAgICAgICB0Y2hhcnNldCA9IHRjc19zYXZlOwotICAgICAgICB0Y3Nfc2F2ZSA9 IC0xOwotICAgIH0KLSAgICBpZiAoZmNzX3NhdmUgPiAtMSkgewotICAgICAgICBmY2hhcnNldCA9 IGZjc19zYXZlOwotICAgICAgICBmY3Nfc2F2ZSA9IC0xOwotICAgIH0KLSAgICBpZiAoZ194ZnJ4 bGEgPiAtMSkgewotCXhmcnhsYSA9IGdfeGZyeGxhOwotCWdfeGZyeGxhID0gLTE7Ci0gICAgfQot ICAgIHNldHhsYXR5cGUodGNoYXJzZXQsZmNoYXJzZXQpOyAgICAgIC8qIFRyYW5zbGF0aW9uIHR5 cGUgKi8KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSNpZmRlZiBORVRDT05OCi0jaWZuZGVmIE5P U1BMCi0gICAgaWYgKGdfcHN3ZCkgewotICAgICAgICBja3N0cm5jcHkocHdidWYsZ19wc3dkLFBX QlVGTCk7Ci0gICAgICAgIG1ha2VzdHIoJmdfcHN3ZCxOVUxMKTsKLSAgICB9Ci0gICAgaWYgKGdf cGZsZyA+IC0xKSB7Ci0gICAgICAgIHB3ZmxnID0gZ19wZmxnOwotICAgICAgICBnX3BmbGcgPSAt MTsKLSAgICB9Ci0gICAgaWYgKGdfcGNwdCA+IC0xKSB7Ci0gICAgICAgIHB3Y3J5cHQgPSBnX3Bj cHQ7Ci0gICAgICAgIGdfcGNwdCA9IC0xOwotICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotI2Vu ZGlmIC8qIE5FVENPTk4gKi8KLQotICAgIGlmIChnX2JpbmFyeSA+IC0xKSB7ICAgICAgICAgICAg ICAgIC8qIEZpbGUgdHlwZSAqLwotICAgICAgICBiaW5hcnkgPSBnX2JpbmFyeTsKLSAgICAgICAg Z19iaW5hcnkgPSAtMTsKLSAgICB9Ci0gICAgaWYgKGdfeGZlcm1vZGUgPiAtMSkgeyAgICAgICAg ICAgICAgLyogVHJhbnNmZXIgbW9kZSAqLwotICAgICAgICB4ZmVybW9kZSA9IGdfeGZlcm1vZGU7 Ci0gICAgICAgIGdfeGZlcm1vZGUgPSAtMTsKLSAgICB9Ci0jaWZkZWYgUEFUVEVSTlMKLSAgICBp ZiAoZ19wYXR0ZXJucyA+IC0xKSB7ICAgICAgICAgICAgICAvKiBGaWxlbmFtZSBwYXR0ZXJucyAq LwotICAgICAgICBwYXR0ZXJucyA9IGdfcGF0dGVybnM7Ci0gICAgICAgIGdfcGF0dGVybnMgPSAt MTsKLSAgICB9Ci0jZW5kaWYgLyogUEFUVEVSTlMgKi8KLQotICAgIGlmIChnX3VzZXBpcGVzID4g LTEpIHsKLSAgICAgICAgdXNlcGlwZXMgPSBnX3VzZXBpcGVzOwotICAgICAgICBnX3VzZXBpcGVz ID0gLTE7Ci0gICAgfQotICAgIGlmIChnX21hdGNoZG90ID4gLTEpIHsKLSAgICAgICAgbWF0Y2hk b3QgPSBnX21hdGNoZG90OwotICAgICAgICBnX21hdGNoZG90ID0gLTE7Ci0gICAgfQotICAgIGlm IChnX3Byb3RvID4gLTEpIHsgICAgICAgICAgICAgICAgIC8qIFByb3RvY29sICovCi0gICAgICAg IHByb3RvY29sID0gZ19wcm90bzsKLSAgICAgICAgZ19wcm90byA9IC0xOwotICAgIH0KLSAgICBp ZiAoZ191cnBzaXogPiAtMSkgewotICAgICAgICB1cnBzaXogPSBnX3VycHNpejsKLSAgICAgICAg ZGVidWcoRjEwMSwiZnRyZXNldCByZXN0b3JpbmcgdXJwc2l6IiwiIix1cnBzaXopOwotICAgICAg ICBnX3VycHNpeiA9IC0xOwotICAgIH0KLSAgICBpZiAoZ19zcHNpemYgPiAtMSkgewotICAgICAg ICBzcHNpemYgPSBnX3Nwc2l6ZjsKLSAgICAgICAgZGVidWcoRjEwMSwiZnRyZXNldCByZXN0b3Jp bmcgc3BzaXpmIiwiIixzcHNpemYpOwotICAgICAgICBnX3Nwc2l6ZiA9IC0xOwotICAgIH0KLSAg ICBpZiAoZ19zcHNpeiA+IC0xKSB7Ci0gICAgICAgIHNwc2l6ID0gZ19zcHNpejsKLSAgICAgICAg ZGVidWcoRjEwMSwiZnRyZXNldCByZXN0b3Jpbmcgc3BzaXoiLCIiLHNwc2l6KTsKLSAgICAgICAg Z19zcHNpeiA9IC0xOwotICAgIH0KLSAgICBpZiAoZ19zcHNpenIgPiAtMSkgewotICAgICAgICBz cHNpenIgPSBnX3Nwc2l6cjsKLSAgICAgICAgZGVidWcoRjEwMSwiZnRyZXNldCByZXN0b3Jpbmcg c3BzaXpyIiwiIixzcHNpenIpOwotICAgICAgICBnX3Nwc2l6ciA9IC0xOwotICAgIH0KLSAgICBp ZiAoZ19zcG1heCA+IC0xKSB7Ci0gICAgICAgIHNwbWF4ID0gZ19zcG1heDsKLSAgICAgICAgZ19z cG1heCA9IC0xOwotICAgIH0KLSAgICBpZiAoZ193c2xvdHIgPiAtMSkgewotICAgICAgICB3c2xv dHIgPSBnX3dzbG90cjsKLSAgICAgICAgZ193c2xvdHIgPSAtMTsKLSAgICB9Ci0gICAgaWYgKGdf cHJlZml4aW5nID4gLTEpIHsKLSAgICAgICAgcHJlZml4aW5nID0gZ19wcmVmaXhpbmc7Ci0gICAg ICAgIGdfcHJlZml4aW5nID0gLTE7Ci0gICAgfQotICAgIGlmIChnX2ZuY2FjdCA+IC0xKSB7Ci0g ICAgICAgIGZuY2FjdCA9IGdfZm5jYWN0OwotICAgICAgICBnX2ZuY2FjdCA9IC0xOwotICAgIH0K LSAgICBpZiAoZ19mbmNudiA+IC0xKSB7Ci0gICAgICAgIGZuY252ID0gZ19mbmNudjsKLSAgICAg ICAgZ19mbmNudiA9IC0xOwotICAgIH0KLSAgICBpZiAoZ19mbnNwYXRoID4gLTEpIHsKLSAgICAg ICAgZm5zcGF0aCA9IGdfZm5zcGF0aDsKLSAgICAgICAgZ19mbnNwYXRoID0gLTE7Ci0gICAgfQot ICAgIGlmIChnX2ZucnBhdGggPiAtMSkgewotICAgICAgICBmbnJwYXRoID0gZ19mbnJwYXRoOwot ICAgICAgICBnX2ZucnBhdGggPSAtMTsKLSAgICB9Ci0gICAgaWYgKGdfc2tpcGJ1cCA+IC0xKSB7 Ci0gICAgICAgIHNraXBidXAgPSBnX3NraXBidXA7Ci0gICAgICAgIGdfc2tpcGJ1cCA9IC0xOwot ICAgIH0KLSAgICBub2xpbmtzID0gMjsJCQkvKiAvRk9MTE9XTElOS1MgaXMgbmV2ZXIgZ2xvYmFs ICovCi0gICAgcmVjdXJzaXZlID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogL1JFQ1VSU0lW RSBjYW4gbmV2ZXIgYmUgZ2xvYmFsICovCi0gICAgeGZpbGV0eXBlID0gLTE7Ci0KLSAgICBpZiAo Z19kaXNwbGEgPiAtMSkgeyAgICAgICAgICAgICAgICAvKiBGaWxlIHRyYW5zZmVyIGRpc3BsYXkg Ki8KLSAgICAgICAgZmRpc3BsYSA9IGdfZGlzcGxhOwotICAgICAgICBnX2Rpc3BsYSA9IC0xOwot ICAgIH0KLSAgICBpZiAoZ19zcGF0aCA+IC0xKSB7ICAgICAgICAgICAgICAgICAvKiBTZW5kIHBh dGhuYW1lcyAqLwotICAgICAgICBmbnNwYXRoID0gZ19zcGF0aDsKLSAgICAgICAgZ19zcGF0aCA9 IC0xOwotICAgIH0KLSAgICBpZiAoZ19ycGF0aCA+IC0xKSB7ICAgICAgICAgICAgICAgICAvKiBS ZWNlaXZlIHBhdGhuYW1lcyAqLwotICAgICAgICBmbnJwYXRoID0gZ19ycGF0aDsKLSAgICAgICAg Z19ycGF0aCA9IC0xOwotICAgIH0KLSAgICBpZiAoZ19mbmNudiA+IC0xKSB7ICAgICAgICAgICAg ICAgICAvKiBGaWxlbmFtZSBjb252ZXJzaW9uICovCi0gICAgICAgIGZuY252ID0gZ19mbmNudjsK LSAgICAgICAgZ19mbmNudiA9IC0xOwotICAgIH0KLSNpZmRlZiBQSVBFU0VORAotICAgIG1ha2Vz dHIoJnNuZGZpbHRlcixnX3NmaWx0ZXIpOyAgICAgIC8qIFNlbmQgZmlsdGVyICovCi0gICAgbWFr ZXN0cigmcmN2ZmlsdGVyLGdfcmZpbHRlcik7ICAgICAgLyogUmVjZWl2ZSBmaWx0ZXIgKi8KLSNl bmRpZiAvKiBQSVBFU0VORCAqLwotCi0jaWZuZGVmIE5PRlJJTExTCi0gICAgcm1haWxmID0gcnBy aW50ZiA9IDA7ICAgICAgICAgICAgICAgLyogTUFJTCBhbmQgUFJJTlQgbW9kaWZpZXJzIGZvciBT RU5EICovCi0gICAgb3B0YnVmWzBdID0gTlVMOyAgICAgICAgICAgICAgICAgICAgLyogTUFJTCBh bmQgUFJJTlQgb3B0aW9ucyAqLwotI2VuZGlmIC8qIE5PRlJJTExTICovCi0KLSAgICBtb3Zpbmcg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBkZWxldGUtYWZ0ZXItc2VuZCBp bmRpY2F0b3IgKi8KLSAgICBzbmRhZnRlclswXSAgPSBOVUw7ICAgICAgICAgICAgICAgICAvKiBS ZXNldCBTRU5EIHNlbGVjdGlvbiBzd2l0Y2hlcyAqLwotICAgIHNuZGJlZm9yZVswXSA9IE5VTDsK LQotICAgIGZvciAoaSA9IDA7IGkgPCBOU05ERVhDRVBUOyBpKyspIHsKLSAgICAgICAgaWYgKHNu ZGV4Y2VwdFtpXSkKLSAgICAgICAgICBmcmVlKHNuZGV4Y2VwdFtpXSk7Ci0gICAgICAgIHNuZGV4 Y2VwdFtpXSA9IE5VTEw7Ci0gICAgICAgIGlmIChyY3ZleGNlcHRbaV0pCi0gICAgICAgICAgZnJl ZShyY3ZleGNlcHRbaV0pOwotICAgICAgICByY3ZleGNlcHRbaV0gPSBOVUxMOwotICAgIH0KLSAg ICBzbmRsYXJnZXIgPSAgKENLX09GRl9UKS0xOwotICAgIHNuZHNtYWxsZXIgPSAoQ0tfT0ZGX1Qp LTE7Ci0gICAgZGVidWcoRjEwMSwicHJlc2VudCBzbmRzbWFsbGVyIiwiIixzbmRzbWFsbGVyKTsK LSNpZmRlZiBHRlRJTUVSCi0gICAgZ3R2ID0gLTEuMDsKLSAgICBvbGRndHYgPSAtMS4wOwotI2Vs c2UKLSAgICBndHYgPSAtMUw7Ci0gICAgb2xkZ3R2ID0gLTFMOwotI2VuZGlmIC8qIEdGVElNRVIg Ki8KLSNlbmRpZiAvKiBOT0lDUCAqLwotfQotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi1jaGFyICoK LXR0Z3RwbigpIHsJCQkJLyogR2V0IHR5cGljYWwgcG9ydCBuYW1lICovCi0vKgotICBJZGVhbGx5 IHRoaXMgcm91dGluZSB3b3VsZCBiZSBpbXBsZW1lbnRlZCBpbiBlYWNoIG9mIHRoZSBja3U/aW8u KiBtb2R1bGVzLAotICBidXQgdGhhdCByZXF1aXJlcyBjaGFuZ2luZyB0aGUgQVBJIGRlZmluaXRp b24uCi0qLwotICAgIHJldHVybigKLSNpZmRlZiBPUzIKLSNpZmRlZiBPUzJPTkxZCi0iQ09NMSIK LSNlbHNlICAvKiBPUzJPTkxZICovCi0iVEFQSSBbIG5hbWUgXSBvciBDT00xIgotI2VuZGlmIC8q IE9TMk9OTFkgKi8KLSNlbHNlICAvKiBPUzIgKi8KLSNpZmRlZiBWTVMKLSJUWEEwOiwgVFRBMDos IG9yIExUQTA6IgotI2Vsc2UgIC8qIFZNUyAqLwotI2lmZGVmIFNPTEFSSVMKLSIvZGV2L2N1YS9h IgotI2Vsc2UgIC8qIFNPTEFSSVMgKi8KLSNpZmRlZiBIUFVYMTAKLSIvZGV2L2N1YTBwMCIKLSNl bHNlICAvKiBIUFVYMTAgKi8KLSNpZmRlZiBIUFVYCi0iL2Rldi9jdWEwMCIKLSNlbHNlICAvKiBI UFVYICovCi0jaWZkZWYgX19GcmVlQlNEX18KLSIvZGV2L2N1YWEwIgotI2Vsc2UgIC8qIF9fRnJl ZUJTRF9fICovCi0jaWZkZWYgX19saW51eF9fCi0iL2Rldi90dHlTMCIKLSNlbHNlICAvKiBfX2xp bnV4X18gKi8KLSNpZmRlZiBCU0Q0NAotIi9kZXYvdHR5MDAiCi0jZWxzZSAgLyogQlNENDQgKi8K LSNpZmRlZiBPU0sKLSIvdDEiCi0jZWxzZSAgLyogT1NLICovCi0jaWZkZWYgUU5YCi0iL2Rldi9z ZXIxIgotI2Vsc2UgIC8qIFFOWCAqLwotI2lmZGVmIFFOWDYKLSIvZGV2L3NlcjEiCi0jZWxzZSAg LyogUU5YNiAqLwotI2lmZGVmIFVOSVhXQVJFCi0iL2Rldi90ZXJtLzAwIG9yIC9kZXYvdHR5MDAi Ci0jZWxzZSAgLyogVU5JWFdBUkUgKi8KLSNpZmRlZiBDS19TQ09WNQotIi9kZXYvdHR5MUEiCi0j ZWxzZSAgLyogQ0tfU0NPVjUgKi8KLSNpZmRlZiBDS19TQ08zMlY0Ci0iL2Rldi90dHkxQSIKLSNl bHNlICAvKiBDS19TQ08zMlY0ICovCi0jaWZkZWYgTV9YRU5JWAotIi9kZXYvdHR5MUEiCi0jZWxz ZSAgLyogTV9YRU5JWCAqLwotI2lmZGVmIEFJWFJTCi0iL2Rldi90dHkwIgotI2Vsc2UgIC8qIEFJ WFJTICovCi0jaWZkZWYgREdVWAotIi9kZXYvdHR5MDAiCi0jZWxzZSAgLyogREdVWCAqLwotI2lm ZGVmIGRhdGFnZW5lcmFsCi0iQGNvbjEiCi0jZWxzZSAgLyogZGF0YWdlbmVyYWwgKi8KLSNpZmRl ZiBJUklYCi0iL2Rldi90dHltMCIKLSNlbHNlICAvKiBJUklYICovCi0jaWZkZWYgU1VOT1M0Ci0i L2Rldi90dHloMCIKLSNlbHNlICAvKiBTVU5PUzQgKi8KLSNpZmRlZiBTVjY4UjNWNgotIi9kZXYv c2NjMCIKLSNlbHNlICAvKiBTVjY4UjNWNiAqLwotI2lmZGVmIE1PVFNWODhSNAotIi9kZXYvY29u dHR5MDAiCi0jZWxzZSAgLyogTU9UU1Y4OFI0ICovCi0jaWZkZWYgTkVYVAotIi9kZXYvY3VmYSIK LSNlbHNlCi0jaWZkZWYgT1NGCi0iL2Rldi90dHlkMSIKLSNlbHNlCi0jaWZkZWYgU0lOSVgKLSIv ZGV2L3R0eWMxIgotI2Vsc2UKLSNpZmRlZiBVTklYCi0iL2Rldi9jdWEsIC9kZXYvYWN1LCAvZGV2 L3R0eTAsIGV0YyIKLSNlbHNlICAvKiBVTklYICovCi0iKHNvcnJ5IG5vIGV4YW1wbGUgYXZhaWxh YmxlKSIKLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogU0lOSVggKi8KLSNlbmRpZiAvKiBP U0YgKi8KLSNlbmRpZiAvKiBORVhUICovCi0jZW5kaWYgLyogTU9UU1Y4OFI0ICovCi0jZW5kaWYg LyogU1Y2OFIzVjYgKi8KLSNlbmRpZiAvKiBTVU5PUzQgKi8KLSNlbmRpZiAvKiBJUklYICovCi0j ZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBER1VYICovCi0jZW5kaWYgLyogQUlY ICovCi0jZW5kaWYgLyogTV9YRU5JWCAqLwotI2VuZGlmIC8qIENLX1NDTzMyVjQgKi8KLSNlbmRp ZiAvKiBDS19TQ09WNSAqLwotI2VuZGlmIC8qIFVOSVhXQVJFICovCi0jZW5kaWYgLyogUU5YNiAq LwotI2VuZGlmIC8qIFFOWCAqLwotI2VuZGlmIC8qIE9TSyAqLwotI2VuZGlmIC8qIEJTRDQ0ICov Ci0jZW5kaWYgLyogX19saW51eF9fICovCi0jZW5kaWYgLyogX19GcmVlQlNEX18gKi8KLSNlbmRp ZiAvKiBIUFVYICovCi0jZW5kaWYgLyogSFBVWDEwICovCi0jZW5kaWYgLyogU09MQVJJUyAqLwot I2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotCSAgICk7Ci19Ci0KLS8qICBDIEsg XyBFIFIgUiBTIFQgUiAgLS0gIFJldHVybiBtZXNzYWdlIGZyb20gbW9zdCByZWNlbnQgc3lzdGVt IGVycm9yICovCi0KLSNpZmRlZiBDS1JPT1QKLWV4dGVybiBpbnQgY2tyb290ZXJyOwotI2VuZGlm IC8qIENLUk9PVCAqLwotCi1jaGFyICoKLWNrX2VycnN0cigpIHsKLSNpZmRlZiBVU0VfU1RSRVJS T1IKLSNpZm5kZWYgQ0tfQU5TSUxJQlMKLSAgICAvKiBTaG91bGQgaGF2ZSBiZWVuIGRlY2xhcmVk IGluIDxzdHJpbmcuaD4gKi8KLV9QUk9UT1RZUCggY2hhciAqIHN0cmVycm9yLCAoaW50KSApOwot I2VuZGlmIC8qIENLX0FOU0lMSUJTICovCi0jaWZkZWYgQ0tST09UCi0gICAgaWYgKGNrcm9vdGVy cikKLSAgICAgIHJldHVybigiT2ZmIGxpbWl0cyIpOwotI2VuZGlmIC8qIENLUk9PVCAqLwotICAg IHJldHVybihzdHJlcnJvcihlcnJubykpOwotI2Vsc2UgIC8qICFVU0VfU1RSRVJST1IgKi8KLSNp ZmRlZiBWTVMKLSAgICBleHRlcm4gY2hhciAqIGNrdm1zZXJyc3RyKHVuc2lnbmVkIGxvbmcpOwot I2lmZGVmIENLUk9PVAotICAgIGlmIChja3Jvb3RlcnIpCi0gICAgICByZXR1cm4oIk9mZiBsaW1p dHMiKTsKLSNlbmRpZiAvKiBDS1JPT1QgKi8KLSAgICByZXR1cm4oY2t2bXNlcnJzdHIoMEwpKTsK LSNlbHNlICAvKiAhVk1TICovCi0jaWZkZWYgQlNENDQKLSNpZmRlZiBfXzM4NkJTRF9fCi0jaWZu ZGVmIE5EU1lTRVJSTElTVAotICAgIGV4dGVybiBpbnQgc3lzX25lcnI7Ci0gICAgZXh0ZXJuIGNo YXIgKnN5c19lcnJsaXN0W107Ci0jZW5kaWYgLyogTkRTWVNFUlJMSVNUICovCi0jZWxzZSAgLyog IV9fMzg2QlNEX18gKi8KLSNpZm5kZWYgX19ic2RpX18KLSNpZm5kZWYgTkRTWVNFUlJMSVNUCi0g ICAgZXh0ZXJuIGludCBzeXNfbmVycjsKLSAgICBleHRlcm4gY29uc3QgY2hhciAqY29uc3Qgc3lz X2Vycmxpc3RbXTsKLSNlbmRpZiAvKiBORFNZU0VSUkxJU1QgKi8KLSNlbmRpZiAvKiBfX2JzZGlf XyAqLwotI2VuZGlmIC8qIF9fMzg2QlNEX18gKi8KLSNpZmRlZiBDS1JPT1QKLSAgICBpZiAoY2ty b290ZXJyKQotICAgICAgcmV0dXJuKCJPZmYgbGltaXRzIik7Ci0gICAgZWxzZQotI2VuZGlmIC8q IENLUk9PVCAqLwotICAgIGlmIChlcnJubyA+PSBzeXNfbmVycikKLSAgICAgIHJldHVybigiRXJy b3IgbnVtYmVyIG91dCBvZiByYW5nZSIpOwotICAgIGVsc2UKLSAgICAgIHJldHVybigoY2hhciAq KSBzeXNfZXJybGlzdFtlcnJub10pOwotI2Vsc2UgLyogIUJTRDQ0ICovCi0jaWZkZWYgQVRUU1YK LSNpZm5kZWYgTkRTWVNFUlJMSVNUCi0gICAgZXh0ZXJuIGludCBzeXNfbmVycjsKLSAgICBleHRl cm4gY2hhciAqc3lzX2Vycmxpc3RbXTsKLSNlbmRpZiAvKiBORFNZU0VSUkxJU1QgKi8KLSNpZmRl ZiBDS1JPT1QKLSAgICBpZiAoY2tyb290ZXJyKQotICAgICAgcmV0dXJuKCJPZmYgbGltaXRzIik7 Ci0gICAgZWxzZQotI2VuZGlmIC8qIENLUk9PVCAqLwotICAgIGlmIChlcnJubyA+PSBzeXNfbmVy cikKLSAgICAgIHJldHVybigiRXJyb3IgbnVtYmVyIG91dCBvZiByYW5nZSIpOwotICAgIGVsc2UK LSAgICAgIHJldHVybigoY2hhciAqKSBzeXNfZXJybGlzdFtlcnJub10pOwotI2Vsc2UgLyogIUFU VFNWICovCi0jaWZkZWYgQlNENAotI2lmbmRlZiBORFNZU0VSUkxJU1QKLSAgICBleHRlcm4gaW50 IHN5c19uZXJyOwotICAgIGV4dGVybiBjaGFyICpzeXNfZXJybGlzdFtdOwotI2VuZGlmIC8qIE5E U1lTRVJSTElTVCAqLwotI2lmZGVmIENLUk9PVAotICAgIGlmIChja3Jvb3RlcnIpCi0gICAgICBy ZXR1cm4oIk9mZiBsaW1pdHMiKTsKLSAgICBlbHNlCi0jZW5kaWYgLyogQ0tST09UICovCi0gICAg aWYgKGVycm5vID49IHN5c19uZXJyKQotICAgICAgcmV0dXJuKCJFcnJvciBudW1iZXIgb3V0IG9m IHJhbmdlIik7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKChjaGFyICopIHN5c19lcnJsaXN0W2Vy cm5vXSk7Ci0jZWxzZQotI2lmZGVmIE9TMgotI2lmbmRlZiBORFNZU0VSUkxJU1QKLSAgICBleHRl cm4gY2hhciAqc3lzX2Vycmxpc3RbXTsKLSNlbmRpZiAvKiBORFNZU0VSUkxJU1QgKi8KLSNpZmRl ZiBOVAotICAgIGV4dGVybiBpbnRfc3lzX25lcnI7Ci0jZW5kaWYgLyogTlQgKi8KLSAgICBjaGFy ICplOwotI2lmZGVmIENLUk9PVAotICAgIGlmIChja3Jvb3RlcnIpCi0gICAgICByZXR1cm4oIk9m ZiBsaW1pdHMiKTsKLSNlbmRpZiAvKiBDS1JPT1QgKi8KLSAgICBlID0gKGVycm5vID4gLTEKLSNp ZmRlZiBOVAotICAgICAgICAgJiYgZXJybm8gPD0gX3N5c19uZXJyCi0jZW5kaWYgLyogTlQgKi8K LSAgICAgICAgICkgPwotI2lmZGVmIE5UCi0gICAgICAgICAoY2hhciAqKSBzeXNfZXJybGlzdFtl cnJub10KLSNlbHNlIC8qIE5UICovCi0gICAgICAgICAvKiBJIGRvbid0IGtub3cgaG93IHRvIGdl dCBhIENMSUIgZXJyb3Igc3RyaW5nIGluIE9TLzIgKi8KLSAgICAgICAgIHN0cmVycm9yKGVycm5v KQotI2VuZGlmIC8qIE5UICovCi0gICAgICAgICAgICAgOiAiIjsKLSAgICByZXR1cm4oZSA/IGUg OiAiIik7Ci0jZWxzZSAvKiBPUzIgKi8KLSAgICByZXR1cm4oIiIpOwotI2VuZGlmIC8qIE9TMiAq LwotI2VuZGlmIC8qIEJTRDQgKi8KLSNlbmRpZiAvKiBBVFRTViAqLwotI2VuZGlmIC8qIEJTRDQ0 ICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogVVNFX1NUUkVSUk9SICovCi19Ci0KLSNp ZmRlZiBQQVRURVJOUwotLyoKLSAgRmlsZW5hbWUgcGF0dGVybiByZWNvZ25pdGlvbiBsaXN0cyBm b3IgYXV0b21hdGljIHRleHQvYmluYXJ5IHN3aXRjaGluZy4KLSAgVGhlc2UgYXJlIHNvbWV3aGF0 IHBhc3NlIGFmdGVyIHRoZSBhZGRpdGlvbiBvZiBzY2FuZmlsZSgpICAoNy4wKS4KLSAgQnV0IHdp dGggdGhlIGFkZGl0aW9uIG9mIEZUUCBbTV1HRVQsIHRoZXkncmUgYmFjayBpbiBzdHlsZSAoOC4w KS4KLQotICBBbHRob3VnaCwgd2l0aCBGVFAgdGhlIGxpc3RzIG5lZWQgdG8gYmUgdXNlZCBpbiB0 aGUgcmV2ZXJzZS4gIFdpdGgKLSAgS2VybWl0IHRoZSBsaXN0IGlzIHVzZWQgdG8gaW1wbHkgdGhl IHR5cGVzIG9mIHRoZSBsb2NhbCBzeXN0ZW0uICBXaGVyZWFzCi0gIHdpdGggRlRQLCB0aGUgbGlz dCBtdXN0IGJlIHVzZWQgdG8gaW1wbHkgdGhlIHR5cGUgb2YgdGhlIHJlbW90ZSBzeXN0ZW0uCi0g IFRoZXJlZm9yZSwgYWxsIHBsYXRmb3JtcyBtdXN0IG5vdyBzdXBwb3J0IGFsbCBvZiB0aGUgbGlz dHMuCi0qLwotY2hhciAqdHh0cGF0dGVybnNbRlRQQVRURVJOUysxXSA9IHsgTlVMTCwgTlVMTCB9 OwotY2hhciAqYmlucGF0dGVybnNbRlRQQVRURVJOUysxXSA9IHsgTlVMTCwgTlVMTCB9OwotLyoK LSAgRGVmYXVsdCBwYXR0ZXJuIGxpc3RzIGZvciBlYWNoIHBsYXRmb3JtLi4uCi0KLSAgTk9URTog SW4gbW9zdCBjYXNlcyB3ZSBsZWF2ZSAiLmhscCIsICIuaW5pIiwgYW5kICIuc2NyIiBhbG9uZTsg YWx0aG91Z2ggdGhleQotICBhcmUgdHJhZGl0aW9uYWxseSB0ZXh0IHR5cGVzLCB0aGV5IGFyZSBi aW5hcnkgaW4gV2luZG93cy4gIFNvIHRoZXkgYXJlCi0gIGhhbmRsZWQgYnkgdGhlIHByZXZhaWxp bmcgU0VUIEZJTEUgVFlQRSwgcmF0aGVyIHRoYW4gYXV0b21hdGljYWxseS4KLSAgU2ltaWxhcmx5 IGZvciAiLmRhdCIsICIuaW5mIiwgYW5kIHNvIG9uLiAgQWxzbyAiLnBzIiBzaW5jZSBQb3N0U2Ny aXB0IGZpbGVzCi0gIGFyZSBub3QgYWx3YXlzIHRleHQuICAiLmxvZyIgaXMgb21pdHRlZCBzaW5j ZSBsb2dzIGNhbiBiZSB0ZXh0IG9yIGJpbmFyeSwKLSAgZXhjZXB0IGluIFZNUyB0aGV5IGFyZSB1 c3VhbGx5IHRleHQsIGV0YyBldGMuCi0KLSAgTGF0ZXIgKFNlcCAyMDAzKTogQWRkIFBvc3RTY3Jp cHQgdG8gYmluYXJ5IHBhdHRlcm5zLgotKi8KLXN0YXRpYyBjaGFyICp0eHRwW1NZU19NQVhdW0ZU UEFUVEVSTlNdID0gewotICAgIC8qIFVOS05PV04gKi8gewotCU5VTEwsIE5VTEwKLSAgICB9LAot ICAgIHsJCQkJCS8qIFVOSVggKi8KLSAgICAiKi50eHQiLCIqLmMiLCIqLmgiLCIqLnIiLCIqLnci LCIqLmNwcCIsIiouY2MiLCIqLmtzYyIsIiouYndyIiwiKi51cGQiLAotICAgICIqLmh0bWwiLCIq Lmh0bSIsIioubXNzIiwiKi50ZXgiLCIqLm5yIiwiW01tXWFrZWZpbGUiLCAiKi5oZXgiLCAiKi5o cXgiLAotICAgICIqLmZvciIsIiouZjc3IiwiKi5mIiwiKi5GIiwiKi5zIiwiKi5wYXMiLCIqLmph dmEiLCIqLmVsIiwiKi5saXNwIiwiKi5zaCIsCi0gICAgIioubTQiLCIqLnBlcmwiLCIqLnBsIiwi Ki5wb2QiLCIqLnBtIiwiKi5hd2siLCIqLnNubyIsIiouc3B0IiwiKi5zZWQiLAotICAgICIqLmtz YyIsIiouVFhUIiwgIipyZWFkLm1lIiwgIipSRUFELk1FIiwgIi4qIiwgIiovLioiLCAiKi5tZW0i LCIqLm1hYyIsCi0gICAgTlVMTAotICAgIH0sCi0gICAgewkJCQkJLyogV0lOMzIgKi8KLSAgICAi Ki50eHQiLCIqLmtzYyIsIiouaHRtIiwiKi5odG1sIiwiKi5iYXQiLCIqLmNtZCIsIiouamF2Iiwi Ki5hc20iLCAiKi5oZXgiLAotICAgICIqLmhxeCIsICIqLmMiLCAiKi5oIiwgIiouY3BwIiwgIiou aHBwIiwgIiouY3h4IiwgIiouY3h4IiwgIioudyIsCi0gICAgIiouamF2YSIsICIqLmJ3ciIsICIq LnVwZCIsICIqLm1hayIsICJyZWFkLm1lIiwgIioubWFwIiwgIm1ha2VmaWxlIiwKLSAgICAiKi5t ZW0iLCIqLm1hYyIsIiouY2MiLCIqLnBsIiwiKi5wb2QiLCIqLnBtIiwiKi5tNCIsTlVMTAotICAg IH0sCi0gICAgewkJCQkJLyogVk1TICovCi0gICAgIiouY29tIiwiKi50eHQiLCIqLmMiLCAgIiou Zm9yIiwiKi5wYXMiLCIqLnJubyIsIioucm5oIiwiKi5tYXIiLCIqLmJsaSIsCi0gICAgIiouaGxw IiwiKi5tc3MiLCIqLmRvYyIsIiouYndyIiwiKi5jbGQiLCIqLmhleCIsIiouYmFzIiwiKi5pbmki LCIqLmxvZyIsCi0gICAgIioubW1zIiwiKi5vcHQiLCIqLmtzYyIsIioucGVybCIsIioucGwiLCIq LnBvZCIsIioucG0iLCIqLnNubyIsIiouc3B0IiwKLSAgICAiKi5tZW0iLE5VTEwKLSAgICB9LAot ICAgIHsJCQkJCS8qIE9TMiAqLwotICAgICIqLnR4dCIsIioua3NjIiwiKi5odG0iLCIqLmh0bWwi LCIqLmJhdCIsIiouY21kIiwiKi5qYXYiLCIqLmFzbSIsICIqLmhleCIsCi0gICAgIiouaHF4Iiwg IiouYyIsICIqLmgiLCAiKi5jcHAiLCAiKi5ocHAiLCAiKi5jeHgiLCAiKi5jeHgiLCAiKi53IiwK LSAgICAiKi5qYXZhIiwgIiouYndyIiwgIioudXBkIiwgIioubWFrIiwgInJlYWQubWUiLCAiKi5t YXAiLCAibWFrZWZpbGUiLAotICAgIE5VTEwKLSAgICB9LAotICAgIHsJCQkJCS8qIERPUyAqLwot ICAgICIqLnR4dCIsIioua3NjIiwiKi5odG0iLCIqLmJhdCIsIiouY21kIiwiKi5qYXYiLCIqLmFz bSIsICIqLmhleCIsCi0gICAgIiouaHF4IiwgIiouYyIsICIqLmgiLCAiKi5jcHAiLCAiKi5ocHAi LCAiKi5jeHgiLCAiKi5jeHgiLCAiKi53IiwKLSAgICAiKi5id3IiLCAiKi51cGQiLCAiKi5tYWsi LCAicmVhZC5tZSIsICIqLm1hcCIsICJtYWtlZmlsZSIsIE5VTEwKLSAgICB9LAotICAgIHsJCQkJ CS8qIFRPUFMtMTAgKi8KLSAgICAiKi5jbWQiLCIqLmhscCIsIiouZG9jIiwiKi5pbmkiLCIqLnR4 dCIsIioubWFjIiwiKi5mb3IiLCIqLnNhaSIsIiouYmxpIiwKLSAgICAiKi5wYXMiLCIqLnNubyIs Iiouc3B0IiwiKi5wY2wiLCIqLm1zcyIsIioucm5vIiwiKi5iMzYiLCIqLnRleCIsIioucHViIiwK LSAgICAiKi5yZXEiLCIqLnIzNiIsIioubWVtIiwiKi5id3IiLCIqLmNjbCIsIiouY3RsIiwiKi5y bmgiLCIqLmtzYyIsTlVMTAotICAgIH0sCi0gICAgewkJCQkJLyogVE9QUy0yMCAqLwotICAgICIq LmNtZCIsIiouaGxwIiwiKi5kb2MiLCIqLmluaSIsIioudHh0IiwiKi5tYWMiLCIqLmZvciIsIiou c2FpIiwiKi5ibGkiLAotICAgICIqLnBhcyIsIiouc25vIiwiKi5zcHQiLCIqLnBjbCIsIioubXNz IiwiKi5ybm8iLCIqLmIzNiIsIioudGV4IiwiKi5wdWIiLAotICAgICIqLnJlcSIsIioucjM2Iiwi Ki5tZW0iLCIqLmJ3ciIsIiouY2NsIiwiKi5jdGwiLCIqLnJuaCIsIioua3NjIixOVUxMCi0gICAg fSwKLSAgICB7CQkJCQkvKiBTVFJBVFVTIFZPUyAqLwotICAgICIqLnR4dCIsIioua3NjIiwiKi5o dG0iLCIqLmh0bWwiLCIqLmJhdCIsICIqLmNtZCIsIiouamF2IiwiKi5hc20iLCIqLmhleCIsCi0g ICAgIiouaHF4IiwiKi5jIiwgICIqLmgiLCAgIioudyIsICAgIiouamF2YSIsIiouYndyIiwiKi51 cGQiLCIqLnR0cCIsIiouY20iLAotICAgICIqLnBsMSIsIiouZW1hY3MiLCAicmVhZC5tZSIsICIq LnBsIiwgIm1ha2VmaWxlIiwgTlVMTAotICAgIH0sCi0gICAgewkJCQkJLyogREcgQU9TL1ZTICov Ci0gICAgIioudHh0IiwgIiouYyIsICIqLmgiLCAiKi53IiwgIiouZXIiLCAiKi5id3IiLCAiKi51 cGQiLCAicmVhZC5tZSIsCi0gICAgIiouY2xpIiwgIioua3NjIiwgTlVMTAotICAgIH0sCi0gICAg ewkJCQkJLyogT1NLICovCi0gICAgIiouYyIsIiouY3BwIiwiKi5oIiwiKi5hIiwiKmFrZWZpbGUi LCAvKiBwcm9ncmFtIHNvdXJjZXMgKi8KLSAgICAiKi5mb3IiLCIqLmY3NyIsIiouZiIsIiouRiIs IioucyIsIioucGFzIiwiKi5qYXZhIiwiKi5lbCIsIioubGlzcCIsCi0gICAgIiouc2giLCIqLnBl cmwiLCIqLmF3ayIsIiouc25vIiwiKi5zcHQiLCIqLnNlZCIsCi0gICAgIioudHh0IiwiKi53IiwJ CQkvKiBnZW5lcmFsIHRleHQgKi8KLSAgICAiKi5rc2MiLCIqLmJ3ciIsIioudXBkIiwKLSAgICAi Ki5odG1sIiwiKi5odG0iLCIqLm1zcyIsIioudGV4IiwiKi5uciIsIiouaGV4IiwgIiouaHF4IiwK LSAgICAiKi5UWFQiLCAiKnJlYWQubWUiLCAiKlJFQUQuTUUiLCAiLioiLCAiKi8uKiIsCi0gICAg TlVMTAotICAgIH0KLX07Ci0KLS8qIE5vdGU6IC5ET0MgYWRkZWQgdG8gKHNvbWUpIGJpbmFyeSBw YXR0ZXJucyBKdW5lIDE5OTguLi4gTWljcm9zb2Z0IHdpbnMuICovCi0KLXN0YXRpYyBjaGFyICpi aW5wW1NZU19NQVhdW0ZUUEFUVEVSTlNdID0gewotICAgIHsJCQkJCS8qIFVOS05PV04gKi8KLSAg ICBOVUxMLCBOVUxMCi0gICAgfSwKLSAgICB7CQkJCQkvKiBVTklYICovCi0gICAgIiouZ3oiLCIq LloiLCIqLnRneiIsIiouZ2lmIiwgIioudGFyIiwiKi56aXAiLCIqLm8iLCIqLnNvIiwiKi5hIiwi Ki5vdXQiLAotICAgICIqLmV4ZSIsICIqLmpwZyIsICIqLmpwZWciLCAiKi50aWYiLCIqLnRpZmYi LCAiKi5wZGYiLCAiKi5zby4qIiwgIiouY2xhc3MiLAotICAgICIqLnJwbSIsICIqLmJtcCIsICIq LmJ6MiIsICIqLkJNUCIsICIqLmRsbCIsICIqLmRvYyIsICIqLnZ4ZCIsICIqLmRjeCIsCi0gICAg IioueGwqIiwgIioubHpoIiwgIioubGh6IiwgIiouYXUiLCAiKi52b2MiLCAiKi5tcGciLCAiKi5t cGVnIiwiW3drXWVybWl0IiwKLSAgICAiKi5wcyIsIE5VTEwKLSAgICB9LAotICAgIHsJCQkJCS8q IFdJTjMyICovCi0gICAgIiouZXhlIiwgIiouemlwIiwgIioub2JqIiwgIiouY29tIiwgIiouZ2lm IiwgIiouanBnIiwgIioud2F2IiwgIioucmFtIiwKLSAgICAiKi5jbGFzcyIsIiouY2xhIiwiKi5k bGwiLCAiKi5kcnYiLCAiKi5vY3giLCAiKi52YngiLCAiKi5saWIiLCAiKi5pY28iLAotICAgICIq LmJtcCIsICIqLnRpZiIsICIqLnRhciIsICIqLmd6IiwgICIqLnRneiIsICIqLnhsKiIsICIqLmRv YyIsICIqLnZ4ZCIsCi0gICAgIioucGRmIiwgIioubHpoIiwgIioudnhkIiwgIiouc25kIiwgIiou YXUiLCAiKiAudm9jIiwgIioubXBnIiwgIioubXBlZyIsCi0gICAgIioucHMiLCBOVUxMCi0gICAg fSwKLSAgICB7CQkJCQkvKiBWTVMgKi8KLSAgICAiKi5leGUiLCIqLm9iaiIsIiouYmFrIiwiKi5i aW4iLCIqLmFkZiIsIiouc3RiIiwiKi5tYWkiLCIqLnN5cyIsIiouZG1wIiwKLSAgICAiKi5wcyIs ICIqLmRhdCIsIioucGFyIiwgTlVMTAotICAgIH0sCi0gICAgewkJCQkJLyogT1MyICovCi0gICAg IiouZXhlIiwgIiouemlwIiwgIioub2JqIiwgIiouY29tIiwgIiouZ2lmIiwgIiouanBnIiwgIiou d2F2IiwgIioucmFtIiwKLSAgICAiKi5jbGFzcyIsICIqLmNsYSIsICIqLmRsbCIsICIqLmRydiIs ICIqLm9jeCIsICIqLnZieCIsICIqLmxpYiIsICIqLmljbyIsCi0gICAgIiouYm1wIiwgIioudGlm IiwgIioudGFyIiwgIiouZ3oiLCAiKi50Z3oiLCAiKi54bCoiLCAiKi5kb2MiLCAiKi52eGQiLAot ICAgICIqLnBkZiIsICIqLnBzIiwgIioubHpoIiwgTlVMTAotICAgIH0sCi0gICAgewkJCQkJLyog RE9TICovCi0gICAgIiouZXhlIiwgIiouemlwIiwgIioub2JqIiwgIiouY29tIiwgIiouZ2lmIiwg IiouanBnIiwgIioud2F2IiwgIioucmFtIiwKLSAgICAiKi5jbGEiLCAiKi5kbGwiLCAiKi5kcnYi LCAiKi5vY3giLCAiKi52YngiLCAiKi5saWIiLCAiKi5pY28iLAotICAgICIqLmJtcCIsICIqLnRp ZiIsICIqLnRhciIsICIqLmd6IiwgIioudGd6IiwgIioueGwqIiwgIiouZG9jIiwgIioudnhkIiwK LSAgICAiKi5wZGYiLCAiKi5wcyIsICIqLmx6aCIsIE5VTEwKLSAgICB9LAotICAgIHsJCQkJCS8q IFRPUFMxMCAqLwotICAgICIqLmV4ZSIsIiouc2F2IiwiKi5iaW4iLCIqLnJpbSIsIioucmVsIiwi Ki51bnYiLCIqLmxpYiIsIioudGFwIiwiKi5kdmkiLAotICAgICIqLnBzIiwgTlVMTAotICAgIH0s Ci0gICAgewkJCQkJLyogVE9QUzIwICovCi0gICAgIiouZXhlIiwiKi5zYXYiLCIqLmJpbiIsIiou cmltIiwiKi5yZWwiLCIqLnVudiIsIioubGliIiwiKi50YXAiLCIqLmR2aSIsCi0gICAgIioucHMi LCBOVUxMCi0gICAgfSwKLSAgICB7CQkJCQkvKiBTVFJBVFVTIFZPUyAqLwotICAgICIqLmV4ZSIs ICIqLnppcCIsICIqLm9iaiIsICIqLmNvbSIsICIqLmdpZiIsICIqLmpwZyIsICIqLndhdiIsICIq LnJhbSIsCi0gICAgIiouY2xhc3MiLCAiKi5jbGEiLCAiKi5kbGwiLCAiKi5kcnYiLCAiKi5vY3gi LCAiKi52YngiLCAiKi5saWIiLCAiKi5pY28iLAotICAgICIqLmJtcCIsICIqLnRpZiIsICIqLnRh ciIsICIqLmd6IiwgIioudGd6IiwgIioueGwqIiwgIiouZG9jIiwgIioudnhkIiwKLSAgICAiKi5w ZGYiLCAiKi5wcyIsICIqLmx6aCIsICIqLnBtIiwgTlVMTAotICAgIH0sCi0gICAgewkJCQkJLyog REcgKi8KLSAgICAiKi5vYiIsICIqLnByIiwgIiouZG1wIiwgIioucHMiLCBOVUxMCi0gICAgfSwK LSAgICB7IC8qIE9TSyAqLwotICAgICIqLmd6IiwiKi5aIiwiKi56IiwiKi50Z3oiLCIqLmxoeiIs IioudGFyIiwJLyogYXJjaGl2ZXJzICovCi0gICAgIiouemlwIiwiKi5hciIsIiouem9vIiwiKi5y cG0iLCIqLmx6aCIsCi0gICAgLyogb2JqZWN0IGZpbGVzLCBsaWJyYXJpZXMsIGV4ZWN1dGFibGVz ICovCi0gICAgIiouciIsIioubCIsIiouZXhlIiwgIiouZGxsIiwgIiouc28uKiIsICIqLmNsYXNz IiwKLSAgICAvKiBpbWFnZXMgKi8KLSAgICAiKi5naWYiLCAiKi5qcGciLCAiKi5qcGVnIiwgIiou dGlmIiwiKi50aWZmIiwgIioucGRmIiwgIioucHMiLAotICAgICIqLmJtcCIsICIqLmJ6MiIsICIq LkJNUCIsIioucGN4IiwKLSAgICBOVUxMCi0gICAgfQotfTsKLQotLyoKLSAgU2V0IHVwIGRlZmF1 bHQgcGF0dGVybiBsaXN0cyBzbyB0aGV5IGNhbiBiZSBmcmVlZCBhbmQgcmUtbWFsbG9jJ2QuCi0g IEVhY2ggcGF0dGVybiBsaXN0IG11c3QgdGVybWluYXRlZCBieSBhIG51bGwgZWxlbWVudC4KLSov Ci1WT0lECi1pbml0cGF0KCkgewotICAgIGludCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBGVFBB VFRFUk5TOyBpKyspIHsKLSAgICAgICAgdHh0cGF0dGVybnNbaV0gPSBOVUxMOwotICAgICAgICBi aW5wYXR0ZXJuc1tpXSA9IE5VTEw7Ci0gICAgfQotICAgIGZvciAoaSA9IDA7IGkgPCBGVFBBVFRF Uk5TOyBpKyspIHsKLSNpZmRlZiBVTklYCi0gICAgICAgIG1ha2VzdHIoJih0eHRwYXR0ZXJuc1tp XSksdHh0cFtTWVNfVU5JWF1baV0pOwotI2Vsc2UgLyogVU5JWCAqLwotI2lmZGVmIE9TMgotI2lm ZGVmIE5UCi0gICAgICAgIG1ha2VzdHIoJih0eHRwYXR0ZXJuc1tpXSksdHh0cFtTWVNfV0lOMzJd W2ldKTsKLSNlbHNlIC8qIE5UICovCi0gICAgICAgIG1ha2VzdHIoJih0eHRwYXR0ZXJuc1tpXSks dHh0cFtTWVNfT1MyXVtpXSk7Ci0jZW5kaWYgLyogTlQgKi8KLSNlbHNlIC8qIE9TMiAqLwotI2lm ZGVmIFZNUwotICAgICAgICBtYWtlc3RyKCYodHh0cGF0dGVybnNbaV0pLHR4dHBbU1lTX1ZNU11b aV0pOwotI2Vsc2UgLyogVk1TICovCi0jaWZkZWYgU1RSQVRVUwotICAgICAgICBtYWtlc3RyKCYo dHh0cGF0dGVybnNbaV0pLHR4dHBbU1lTX1ZPU11baV0pOwotI2Vsc2UgLyogU1RSQVRVUyAqLwot I2lmZGVmIGRhdGFnZW5lcmFsCi0gICAgICAgIG1ha2VzdHIoJih0eHRwYXR0ZXJuc1tpXSksdHh0 cFtTWVNfREddW2ldKTsKLSNlbHNlIC8qIGRhdGFnZW5lcmFsICovCi0jaWZkZWYgT1NLCi0gICAg ICAgIG1ha2VzdHIoJih0eHRwYXR0ZXJuc1tpXSksdHh0cFtTWVNfT1NLXVtpXSk7Ci0jZWxzZSAv KiBPU0sgKi8KLSAgICAgICAgbWFrZXN0cigmKHR4dHBhdHRlcm5zW2ldKSx0eHRwW1NZU19VTktd W2ldKTsKLSNlbmRpZiAvKiBPU0sgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlm IC8qIFNUUkFUVVMgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRp ZiAvKiBVTklYICovCi0gICAgICAgIGlmICghdHh0cFtpXSkKLSAgICAgICAgICBicmVhazsKLSAg ICB9Ci0gICAgZm9yIChpID0gMDsgaSA8IEZUUEFUVEVSTlM7IGkrKykgewotI2lmZGVmIFVOSVgK LSAgICAgICAgbWFrZXN0cigmKGJpbnBhdHRlcm5zW2ldKSxiaW5wW1NZU19VTklYXVtpXSk7Ci0j ZWxzZSAvKiBVTklYICovCi0jaWZkZWYgT1MyCi0jaWZkZWYgTlQKLSAgICAgICAgbWFrZXN0cigm KGJpbnBhdHRlcm5zW2ldKSxiaW5wW1NZU19XSU4zMl1baV0pOwotI2Vsc2UgLyogTlQgKi8KLSAg ICAgICAgbWFrZXN0cigmKGJpbnBhdHRlcm5zW2ldKSxiaW5wW1NZU19PUzJdW2ldKTsKLSNlbmRp ZiAvKiBOVCAqLwotI2Vsc2UgLyogT1MyICovCi0jaWZkZWYgVk1TCi0gICAgICAgIG1ha2VzdHIo JihiaW5wYXR0ZXJuc1tpXSksYmlucFtTWVNfVk1TXVtpXSk7Ci0jZWxzZSAvKiBWTVMgKi8KLSNp ZmRlZiBTVFJBVFVTCi0gICAgICAgIG1ha2VzdHIoJihiaW5wYXR0ZXJuc1tpXSksYmlucFtTWVNf Vk9TXVtpXSk7Ci0jZWxzZSAvKiBTVFJBVFVTICovCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICAg ICAgbWFrZXN0cigmKGJpbnBhdHRlcm5zW2ldKSxiaW5wW1NZU19ER11baV0pOwotI2Vsc2UgLyog ZGF0YWdlbmVyYWwgKi8KLSNpZmRlZiBPU0sKLSAgICAgICAgbWFrZXN0cigmKGJpbnBhdHRlcm5z W2ldKSxiaW5wW1NZU19PU0tdW2ldKTsKLSNlbHNlIC8qIE9TSyAqLwotICAgICAgICBtYWtlc3Ry KCYoYmlucGF0dGVybnNbaV0pLGJpbnBbU1lTX1VOS11baV0pOwotI2VuZGlmIC8qIE9TSyAqLwot I2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotI2VuZGlmIC8q IFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSAgICAgICAgaWYg KCFiaW5wW2ldKQotICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotLyoKLSAgbSBhIHQgYyBo IG4gYSBtIGUgIC0tICBDb21wYXJlIGZpbGVuYW1lIHdpdGggdGV4dCAmIGJpbmFyeSBuYW1lIHBh dHRlcm5zLgotCi0gIFJldHVybnM6Ci0gICAgMCBpZiBuYW1lIG1hdGNoZXMgYSB0ZXh0IHBhdHRl cm4gYnV0IG5vdCBhIGJpbmFyeSBwYXR0ZXJuLgotICAgIDEgaWYgbmFtZSBtYXRjaGVzIGEgYmlu YXJ5IHBhdHRlcm4gYnV0IG5vdCBhIHRleHQgcGF0dGVybi4KLSAgIC0xIGlmIG5hbWUgbWF0Y2hl cyBubyBwYXR0ZXJucy4KLSAgIC0yIGlmIG5hbWUgbWF0Y2hlcyBhIGJpbmFyeSBwYXR0ZXJuIGFu ZCBhIHRleHQgcGF0dGVybi4KLSovCi1pbnQKLW1hdGNobmFtZShmaWxlbmFtZSwgbG9jYWwsIG9z KSBjaGFyICogZmlsZW5hbWU7IGludCBsb2NhbDsgaW50IG9zOyB7Ci0gICAgaW50IHJjID0gLTE7 CQkJLyogUmV0dXJuIGNvZGUgKi8KLSAgICBjaGFyICogbmFtZSwgKiBwOwotI2lmZGVmIE9TMk9S VU5JWAotICAgIGNoYXIgdG1wYnVmW0NLTUFYUEFUSCsxXTsKLSNlbmRpZiAvKiBPUzJPUlVOSVgg Ki8KLQotICAgIG5hbWUgPSBmaWxlbmFtZSA/IGZpbGVuYW1lIDogIiI7CS8qIENvcHkgb2Ygb3Jp Z2luYWwgYXJnICovCi0gICAgaWYgKHBhdHRlcm5zICYmICpuYW1lKSB7CQkvKiBJZiBQQVRURVJO UyBPTi4uLiAqLwotCWludCBpOwotCi0jaWZkZWYgT1MyT1JVTklYCi0JaWYgKGNrbWF0Y2goIiou flsxLTldKn4iLG5hbWUsMSwxKSkgeyAvKiBOYW1lIGhhcyBiYWNrdXAgc3VmZml4PyAqLwotCSAg ICBpbnQgazsKLQkgICAgayA9IGNrc3RybmNweSh0bXBidWYsbmFtZSxDS01BWFBBVEgrMSk7IC8q IFllcywgY29weSBhbmQgc3RyaXAgKi8KLQkgICAgZm9yIChpID0gayAtIDM7IGkgPiA0OyBpLS0p IHsKLQkJaWYgKHRtcGJ1ZltpXSA9PSAnficgJiYgdG1wYnVmW2ktMV0gPT0gJy4nKSB7Ci0JCSAg ICB0bXBidWZbaS0xXSA9IE5VTDsKLQkJICAgIGJyZWFrOwotCQl9Ci0JICAgIH0KLQkgICAgbmFt ZSA9IHRtcGJ1ZjsJCS8qIEFuZCBwb2ludCB0byBzdHJpcHBlZCBjb3B5ICovCi0JfQotI2VuZGlm IC8qIE9TMk9SVU5JWCAqLwotCXpzdHJpcChuYW1lLCZwKTsJCS8qIFN0cmlwIHBhdGhuYW1lIHRv byAqLwotCW5hbWUgPSBwOwotCi0gICAgICAgIGlmIChsb2NhbCkgewotICAgICAgICAgICAgaWYg KHR4dHBhdHRlcm5zWzBdKSB7CS8qIFNlYXJjaCB0ZXh0IHBhdHRlcm5zICovCi0gICAgICAgICAg ICAgICAgZm9yIChpID0gMDsgaSA8IEZUUEFUVEVSTlMgJiYgdHh0cGF0dGVybnNbaV07IGkrKykg ewotICAgICAgICAgICAgICAgICAgICBpZiAoY2ttYXRjaCh0eHRwYXR0ZXJuc1tpXSxuYW1lLGZp bGVjYXNlLDEpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByYyA9IDA7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChiaW5wYXR0ZXJuc1swXSkgewkv KiBBbmQgc2VhcmNoIGJpbmFyeSBwYXR0ZXJucyAqLwotICAgICAgICAgICAgICAgIGZvciAoaSA9 IDA7IGkgPCBGVFBBVFRFUk5TICYmIGJpbnBhdHRlcm5zW2ldOyBpKyspIHsKLSAgICAgICAgICAg ICAgICAgICAgaWYgKGNrbWF0Y2goYmlucGF0dGVybnNbaV0sbmFtZSxmaWxlY2FzZSwxKSkgewot ICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAocmMgPiAtMSkgPyAtMiA6IDE7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIH0KLQl9IGVsc2UgewotICAgICAgICAgICAgaWYgKG9zID49 IDAgJiYgb3MgPCBTWVNfTUFYKSB7Ci0JCWlmICh0eHRwW29zXVswXSkgewotCQkgICAgZm9yIChp ID0gMDsgaSA8IEZUUEFUVEVSTlMgJiYgdHh0cFtvc11baV07IGkrKykgewotCQkJaWYgKGNrbWF0 Y2godHh0cFtvc11baV0sbmFtZSxmaWxlY2FzZSwxKSkgewotCQkJICAgIHJjID0gMDsKLQkJCSAg ICBicmVhazsKLQkJCX0KLQkJICAgIH0KLQkJfQotCQlpZiAoYmlucFtvc11bMF0pIHsKLQkJICAg IGZvciAoaSA9IDA7IGkgPCBGVFBBVFRFUk5TICYmIGJpbnBbb3NdW2ldOyBpKyspIHsKLQkJCWlm IChja21hdGNoKGJpbnBbb3NdW2ldLG5hbWUsZmlsZWNhc2UsMSkpIHsKLQkJCSAgICByYyA9IChy YyA+IC0xKSA/IC0yIDogMTsKLQkJCSAgICBicmVhazsKLQkJCX0KLQkJICAgIH0KLQkJfQotCSAg ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZGVidWcoRjExMSwibWF0Y2huYW1lIixuYW1lLHJj KTsKLSAgICByZXR1cm4ocmMpOwotfQotI2VuZGlmIC8qIFBBVFRFUk5TICovCi0KLSNpZmRlZiBV TklDT0RFCi0jaWZuZGVmIE5PRVZFTk1BWAotI2RlZmluZSBFVkVOTUFYCi0jZW5kaWYgLyogTk9F VkVOTUFYICovCi0jZW5kaWYgLyogVU5JQ09ERSAqLwotCi0vKiAgUyBDIEEgTiBGIEkgTCBFICAt LSAgQW5hbHl6ZSBhIGZpbGUncyBjb250ZW50cyAgKi8KLQotLyoKLSAgQ2FsbCB3aXRoOgotICAg IG5hbWU6ICAgIFBvaW50ZXIgdG8gbmFtZSBvZiBleGlzdGluZyBmaWxlLgotICAgIGZsYWc6ICAg IFBvaW50ZXIgdG8gaW50IGluIHdoaWNoIHRvIHJldHVybiBhZGRpdGlvbmFsIG51bWVyaWMgZGF0 YS4KLQotICBSZXR1cm5zOgotICAgIC0xIG9uIGZhaWx1cmUgKHRvIG9wZW4gZmlsZSBvciB0byBy ZWFkIGZyb20gaXQpLgotICAgIEludGVnZXIsIDAuLjQsIG9uIHN1Y2Nlc3MgaW5kaWNhdGluZyBm aWxlIHR5cGU6Ci0gICAgIDAgPSA3LWJpdCB0ZXh0IChmbGFnID0gLTEpCi0gICAgIDEgPSBVVEYt OCB0ZXh0IChmbGFnID0gLTEpCi0gICAgIDIgPSBVQ1MtMiB0ZXh0IChmbGFnID0gIDA6IGJpZy1l bmRpYW47IGZsYWcgPSAxOiBsaXR0bGUtZW5kaWFuKQotICAgICAzID0gOC1iaXQgdGV4dCAoZmxh ZyA9ICAwOiBubyBDMSBieXRlczsgZmxhZyA9IDE6IGluY2x1ZGVzIEMxIGJ5dGVzKQotICAgICA0 ID0gVGV4dCAgICAgICAodHlwZSB1bmtub3duKQotICAgICA1ID0gYmluYXJ5ICAgICAoZmxhZyA9 IC0xKQotCi0gIElmIFVOSUNPREUgaXMgZGVmaW5lZDoKLQotICAgMS4gSWYgZmlsZSBiZWdpbnMg d2l0aCBhIHZhbGlkIEJPTSwgaXQgaXMgYmVsaWV2ZWQuICBPdGhlcndpc2Ugd2UKLSAgICAgIHJl YWQgdGhlIGZpcnN0IDRLIG9mIHRoZSBmaWxlIChzaW5jZSBpdCBtaWdodCBiZSBlbWFpbCB3aXRo IHZlcmJvc2UKLSAgICAgIGhlYWRlcnMpIGFuZCBhbmFseXplIGl0OgotCi0gICAyLiBJZiBmaWxl IGNvbnRhaW5zIG9ubHkgdmFsaWQgVVRGLTggc2VxdWVuY2VzLCB3ZSBjYWxsIGl0IFVURi04Owot ICAgICAgb3RoZXJ3aXNlOgotCi0gICAzLiBJZiB0aGUgZmlsZSBjb250YWlucyBsb3RzIG9mIGFs dGVybmF0ZSAwIGJ5dGVzLCB3ZSBjYWxsIGl0IFVDUy0yLCBhbmQKLSAgICAgIHNldCB0aGUgcG9s YXJpdHkgYWNjb3JkaW5nIHRvIHdoZXRoZXIgdGhlIHByZXBvbmRlcmFuY2Ugb2YgdGhlbSBhcmUg aW4KLSAgICAgIGV2ZW4gb3Igb2RkIHBvc2l0aW9uczsgb3RoZXJ3aXNlOgotCi0gICA0LiBJZiBF VkVOTUFYIGlzIGRlZmluZWQgYW5kIHRoZSBmaWxlIGNvbnRhaW5zIGxvdHMgb2YgYWx0ZXJuYXRl IGJ5dGVzIHRoYXQKLSAgICAgIGFyZSBpZGVudGljYWwsIGV2ZW4gaWYgdGhleSBhcmVuJ3QgemVy bywgYW5kIHRoZSBudW1iZXIgb2Ygc3VjaCBieXRlcwotICAgICAgaXMgYXQgbGVhc3QgZm91ciB0 aW1lcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXhpbXVtIHJ1biBvZiBhbHRlcm5hdGluZwotICAgICAg aWRlbnRpY2FsIGJ5dGVzIG9mIHRoZSBvcHBvc2l0ZSBwb2xhcml0eSwgd2UgY2FsbCBpdCBVQ1Mt Mjsgb3RoZXJ3aXNlOgotCi0gICA1LiBJZiB0aGUgZmlsZSBjb250YWluZWQgbm8gYnl0ZXMgd2l0 aCB0aGVpciA4dGggYml0cyBvbiBhbmQgbm8gY29udHJvbHMKLSAgICAgIG90aGVyIHRoYW4gQ1Is IExGLCBIVCwgYW5kIEZGLCB3ZSBjYWxsIGl0IEFTQ0lJOyBvdGhlcndpc2U6Ci0KLSAgIDYuIElm IGl0IGNvbnRhaW5zIEMwIGNvbnRyb2wgY2hhcmFjdGVycyBvdGhlciB0aGFuIENSLCBMRiwgSFQs IGFuZCBGRiwgd2UKLSAgICAgIGNhbGwgaXQgYmluYXJ5OyBvdGhlcndpc2U6Ci0KLSAgIDcuIFdl IGNhbGwgaXQgOC1iaXQgdGV4dCwgY2hhcmFjdGVyIHNldCB1bmtub3duIChjb3VsZCBiZSBMYXRp bi0xIG9yCi0gICAgICBhbnl0aGluZyBlbHNlKS4KLQotICAgTm90ZSB0aGF0IG1hbGZvcm1lZCBV VEYtOCBpcyBub3QgZGlhZ25vc2VkIGFzIFVURi04LgotCi0gICBJZiBVTklDT0RFIGlzIG5vdCBk ZWZpbmVkOgotCi0gICAxLiBJZiB0aGUgZmlsZSBjb250YWlucyBDMCBjb250cm9sIGNoYXJhY3Rl cnMgb3RoZXIgdGhhbiBDUiwgTEYsIEhULCBhbmQKLSAgICAgIEZGLCB3ZSBjYWxsIGl0IGJpbmFy eTsgb3RoZXJ3aXNlOgotCi0gICAyLiBJZiB0aGUgZmlsZSBjb250YWlucyBhbnkgOC1iaXQgYnl0 ZXMsIHdlIGNhbGwgaXQgOC1iaXQgdGV4dDsgb3RoZXJ3aXNlOgotCi0gICAzLiBXZSBjYWxsIGl0 IDctYml0IHRleHQuCi0KLSAgIEluIHRoZSBub24tVW5pY29kZSBjYXNlLCBVQ1MtMiBpcyBkaWFn bm9zZWQgYXMgYmluYXJ5LCBidXQgVVRGLTggYXMKLSAgIDgtYml0IHRleHQuCi0KLSAgIFRoZXJl IGlzIG5vIHNpZ25pZmljYW50IHNwZWVkIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgVW5pY29kZSBh bmQKLSAgIG5vbi1Vbmljb2RlIGNhc2VzLgotKi8KLWludAotc2NhbmZpbGUobmFtZSxmbGFnLG5z Y2FuZmlsZSkgY2hhciAqIG5hbWU7IGludCAqIGZsYWcsIG5zY2FuZmlsZTsgewotICAgIEZJTEUg KiBmcDsJCQkJLyogRmlsZSBwb2ludGVyICovCi0gICAgdW5zaWduZWQgY2hhciBidWZbU0NBTkZJ TEVCVUZdOwkvKiBGaWxlIGRhdGEgYnVmZmVyIGZvciBhbmFseXNpcyAqLwotICAgIGludCB4LCB2 YWwgPSAtMSwgY291bnQgPSAwOwkJLyogV29ya2VycyAqLwotICAgIGludCByYyA9IC0xOwkJCS8q IFJldHVybiBjb2RlICovCi0gICAgaW50IHB2ID0gLTE7CQkJLyogUGF0dGVybi1tYXRjaCB2YWx1 ZSAqLwotICAgIGludCBlb2YgPSAwOwkJCS8qIEZsYWcgZm9yIGZpbGUgRU9GIGVuY291bnRlcmVk ICovCi0gICAgaW50IGJ5dGVzID0gMDsJCQkvKiBUb3RhbCBieXRlIGNvdW50ICovCi0jaWZkZWYg VU5JQ09ERQotICAgIHVuc2lnbmVkIGludCBjMCwgYzE7CQkvKiBGaXJzdCAyIGZpbGUgYnl0ZXMg KGZvciBCT00pICovCi0jZW5kaWYgLyogVU5JQ09ERSAqLwotICAgIGV4dGVybiBpbnQgcGlwZXNl bmQsIGZpbGVwZWVrOwotCi0gICAgcmVnaXN0ZXIgaW50IGk7CQkJLyogTG9vcCBjb250cm9sICov Ci0gICAgaW50IHJlYWRzaXplID0gMDsJCQkvKiBIb3cgbXVjaCB0byByZWFkICovCi0gICAgaW50 IGVpZ2h0Yml0ID0gMDsJCQkvKiBOdW1iZXIgb2YgYnl0ZXMgd2l0aCA4dGggYml0IG9uICovCi0g ICAgaW50IGMwY29udHJvbHMgPSAwOwkJCS8qIEMwIG5vbi10ZXh0IGNvbnRyb2wtY2hhciBjb3Vu dGVyICovCi0gICAgaW50IGMwbm9uaXNvID0gMDsJCQkvKiBDMCBub24tSVNPIGNvbnRyb2wtY2hh ciBjb3VudGVyICovCi0gICAgaW50IGMxY29udHJvbHMgPSAwOwkJCS8qIEMxIGNvbnRyb2wtY2hh cmFjdGVyIGNvdW50ZXIgKi8KLSAgICB1bnNpZ25lZCBpbnQgYzsJCQkvKiBDdXJyZW50IGNoYXJh Y3RlciAqLwotICAgIGludCBydW5tYXggPSAwOwkJCS8qIExvbmdlc3QgcnVuIG9mIDAgYnl0ZXMg Ki8KLSAgICBpbnQgcnVuemVybyA9IDA7CQkJLyogUnVuIG9mIDAgYnl0ZXMgKi8KLSAgICBpbnQg cGN0emVybyA9IDA7CQkJLyogUGVyY2VudGFnZSBvZiAwIGJ5dGVzICovCi0gICAgaW50IHR4dGN6 ID0gMDsKLSNpZmRlZiBDS19DVFJMWgotICAgIGV4dGVybiBpbnQgZW9mbWV0aG9kOwotI2VuZGlm IC8qIENLX0NUUkxaICovCi0KLSNpZmRlZiBVTklDT0RFCi0gICAgaW50IG5vdHV0ZjggPSAwOwkJ CS8qIE5vbnplcm8gaWYgZGVmaW5pdGVseSBub3QgVVRGLTggKi8KLSAgICBpbnQgdXRmOHN0YXRl ID0gMDsJCQkvKiBVVEYtOCByZWNvZ25pemVyIHN0YXRlICovCi0gICAgaW50IG9kZHplcm8gPSAw OwkJCS8qIE51bWJlciBvZiAwIGJ5dGVzIGluIG9kZCBwb3N0aW9ucyAqLwotICAgIGludCBldmVu emVybyA9IDA7CQkJLyogYW5kIGluIGV2ZW4gcG9zaXRpb25zICovCi0gICAgaW50IGxmbnVsID0g MDsJCQkvKiBOdW1iZXIgb2YgPExGPjxOVUw+IHNlcXVlbmNlcyAqLwotICAgIGludCBjcmxmID0g MDsJCQkvKiBOdW1iZXIgb2YgPENSTEY+IHNlcXVlbmNlcyAqLwotI2Vsc2UKLSAgICBpbnQgbm90 dXRmOCA9IDE7Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotCi0jaWZkZWYgQ09NTUVOVAotI2lmZGVm IEVWRU5NQVgKLSAgICBpbnQgb2RkcnVuID0gMCwgb2RkbWF4ID0gMCwgb2RkYnl0ZSA9IDAsIG9k ZG1heGJ5dGUgPSAwOwotICAgIGludCBldmVucnVuID0gMCwgZXZlbm1heCA9IDAsIGV2ZW5ieXRl ID0gMCwgZXZlbm1heGJ5dGUgPSAwOwotI2VuZGlmIC8qIEVWRU5NQVggKi8KLSNlbmRpZiAvKiBD T01NRU5UICovCi0KLSNpZm5kZWYgTk9YRkVSCi0gICAgaWYgKHBpcGVzZW5kIHx8IGNhbGlicmF0 ZSB8fCBzbmRhcnJheSkgLyogT25seSBmb3IgcmVhbCBmaWxlcyAqLwotICAgICAgcmV0dXJuKC0x KTsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSAgICBkZWJ1ZyhGMTExLCJzY2FuZmlsZSIsbmFtZSxu c2NhbmZpbGUpOwotI2lmZGVmIFBBVFRFUk5TCi0gICAgaWYgKCFmaWxlcGVlaykgewotCXB2ID0g bWF0Y2huYW1lKG5hbWUsMSwtMSk7Ci0JaWYgKHB2IDwgMCkKLQkgIHJjID0gLTE7Ci0JZWxzZQot CSAgcmMgPSAocHYgPT0gMSkgPyBGVF9CSU4gOiBGVF9URVhUOwotCWRlYnVnKEYxMTEsInNjYW5m aWxlICFmaWxlcGVlayByZXN1bHQiLG5hbWUscmMpOwotCXJldHVybihyYyk7Ci0gICAgfQotI2Vu ZGlmIC8qIFBBVFRFUk5TICovCi0KLSNpZmRlZiBWTVMKLS8qIFdlIGRvbid0IHNjYW4gaW4gVk1T IHdoZXJlIHRleHQgZmlsZXMgaGF2ZSB2YXJpb3VzIHJlY29yZCBmb3JtYXRzIGluICAqLwotLyog d2hpY2ggcmVjb3JkIGhlYWRlcnMgY29udGFpbiBzZWVtaW5nbHkgbm9uLXRleHQgYnl0ZXMuICBT byB0aGUgYmVzdCAgICovCi0vKiB3ZSBjYW4gZG8gaW4gVk1TIGlzIHRlbGwgd2hldGhlciB0aGUg ZmlsZSBpcyB0ZXh0IG9yIGJpbmFyeSwgcGVyaW9kLiAgKi8KLSAgICB7Ci0JaW50IGIsIHg7Ci0J YiA9IGJpbmFyeTsJCQkvKiBTYXZlIGN1cnJlbnQgYmluYXJ5IHNldHRpbmcgKi8KLQlpZiAoem9w ZW5pKFpJRklMRSxuYW1lKSA+IDApIHsJLyogSW4gVk1TIHRoaXMgc2V0cyBiaW5hcnkgKi8KLQkg ICAgeCA9IGJpbmFyeTsJCQkvKiBHZXQgcmVzdWx0ICovCi0JICAgIHpjbG9zZShaSUZJTEUpOwkJ LyogQ2xvc2UgdGhlIGZpbGUgKi8KLQkgICAgYmluYXJ5ID0gYjsJCQkvKiBSZXN0b3JlIHByZXZp b3VzIGJpbmFyeSBzZXR0aW5nICovCi0JICAgIHJjID0geCA/IEZUX0JJTiA6IEZUX1RFWFQ7Ci0J ICAgIHZhbCA9IDA7Ci0JICAgIGdvdG8geHNjYW5maWxlOwotCX0KLSAgICB9Ci0jZW5kaWYgLyog Vk1TICovCi0KLSAgICBlb2YgPSAwOwkJCQkvKiBFbmQtb2YtZmlsZSByZWFjaGVkIGluZGljYXRv ciAqLwotI2lmZGVmIE9TMgotICAgIGZwID0gZm9wZW4obmFtZSwgInJiIik7CQkvKiBPcGVuIHRo ZSBmaWxlIGluIGJpbmFyeSBtb2RlICovCi0jZWxzZQotICAgIGZwID0gZm9wZW4obmFtZSwgInIi KTsKLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgIGlmICghZnApCQkJCS8qIEZhaWxlZD8gKi8KLSAg ICAgIHJldHVybigtMSk7Ci0KLSAgICB3aGlsZSAoMSkgewkJCQkvKiBPbmUgb3IgbW9yZSBndWxw cyBmcm9tIGZpbGUgKi8KLQlpZiAoZW9mKSB7CQkJLyogRU9GIGZyb20gbGFzdCB0aW1lPyAqLwot CSAgICBkZWJ1ZyhGMTExLCJzY2FuZmlsZSBhdCBFT0YiLG5hbWUsYnl0ZXMpOwotCSAgICBpZiAo cnVuemVybyA+IHJ1bm1heCkKLQkgICAgICBydW5tYXggPSBydW56ZXJvOwotCSAgICBicmVhazsK LQl9Ci0JaWYgKG5zY2FuZmlsZSA8IDApIHsJCS8qIFJlYWRpbmcgd2hvbGUgZmlsZSAqLwotCSAg ICByZWFkc2l6ZSA9IFNDQU5GSUxFQlVGOwotCX0gZWxzZSB7CQkJLyogUmVhZGluZyBmaXJzdCBu c2NhbmZpbGVlIGJ5dGVzICovCi0JICAgIHJlYWRzaXplID0gbnNjYW5maWxlIC0gYnl0ZXM7Ci0J ICAgIGlmIChyZWFkc2l6ZSA8IDEpCi0JICAgICAgYnJlYWs7Ci0JICAgIGlmIChyZWFkc2l6ZSA+ IFNDQU5GSUxFQlVGKQotCSAgICAgIHJlYWRzaXplID0gU0NBTkZJTEVCVUY7Ci0JfQotCWRlYnVn KEYxMDEsInNjYW5maWxlIHJlYWRzaXplIiwiIixyZWFkc2l6ZSk7Ci0JY291bnQgPSBmcmVhZChi dWYsMSxyZWFkc2l6ZSxmcCk7IC8qIFJlYWQgYSBidWZmZXIgKi8KLQlpZiAoY291bnQgPT0gRU9G IHx8IGNvdW50ID09IDApIHsKLQkgICAgZGVidWcoRjExMSwic2NhbmZpbGUgRU9GIixuYW1lLGNv dW50KTsKLQkgICAgYnJlYWs7Ci0JfQotCWRlYnVnKEYxMTEsInNjYW5maWxlIGJ1ZmZlciBvayIs bmFtZSxjb3VudCk7Ci0KLQlpZiAoYnl0ZXMgPT0gMCAmJiBjb3VudCA+IDgpIHsKLQkgICAgLyog UERGIGZpbGVzIGNhbiBsb29rIGxpa2UgdGV4dCBpbiB0aGUgYmVnaW5uaW5nLiAqLwotCSAgICBp ZiAoIWNrc3RyY21wKChjaGFyICopYnVmLCIlUERGLTEuIiw3LDEpKSB7Ci0JCWlmIChpc2RpZ2l0 KGJ1Zls3XSkpIHsKLQkJICAgIGlmIChidWZbOF0gPT0gJ1wwMTUnIHx8Ci0JCQljb3VudCA+IDkg JiYgYnVmWzhdID09IFNQICYmIGJ1Zls5XSA9PSAnXDAxNScpIHsKLSNpZmRlZiBERUJVRwotCQkJ YnVmWzhdID0gTlVMOwotCQkJZGVidWcoRjExMCwic2NhbmZpbGUgUERGIixidWYsMCk7Ci0jZW5k aWYgLyogREVCVUcgKi8KLQkJCWJpbmFyeSA9IDE7CS8qIEJ1dCB0aGV5IGFyZSBiaW5hcnkuICov Ci0JCQlicmVhazsKLQkJICAgIH0KLQkJfQotCSAgICB9IGVsc2UgaWYgKCFja3N0cmNtcCgoY2hh ciAqKWJ1ZiwiJSFQUy1BZG8iLDgsMSkpIHsKLQkJLyogRGl0dG8gZm9yIFBvc3RTY3JpcHQgKi8K LSNpZmRlZiBERUJVRwotCQlpbnQgaTsKLQkJZm9yIChpID0gODsgaSA8IGNvdW50OyBpKyspIHsK LQkJICAgIGlmIChidWZbaV0gPCAnIScpIHsKLQkJCWJ1ZltpXSA9IE5VTDsKLQkJCWJyZWFrOwot CQkgICAgfQotCQl9Ci0JCWRlYnVnKEYxMTAsInNjYW5maWxlIFBvc3RTY3JpcHQiLGJ1ZiwwKTsK LSNlbmRpZiAvKiBERUJVRyAqLwotCQliaW5hcnkgPSAxOwotCQlicmVhazsKLSNpZm5kZWYgTk9Q Q0xTQ0FOCi0JICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKChjaGFyICopYnVmLCIpIEhQLVBDTCIs OCwxKSkgewotCQkvKiBIUCBQQ0wgcHJpbnRlciBsYW5ndWFnZSAqLwotI2lmZGVmIERFQlVHCi0J CWludCBpOwotCQlmb3IgKGkgPSA4OyBpIDwgY291bnQ7IGkrKykgewotCQkgICAgaWYgKGJ1Zltp XSA8ICchJykgewotCQkJYnVmW2ldID0gTlVMOwotCQkJYnJlYWs7Ci0JCSAgICB9Ci0JCX0KLQkJ ZGVidWcoRjExMCwic2NhbmZpbGUgUENMIixidWYsMCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLQkJ YmluYXJ5ID0gMTsKLQkJYnJlYWs7Ci0JICAgIH0gCi0jZW5kaWYgLyogTk9QQ0xTQ0FOICovCi0j aWZuZGVmIE5PUEpMU0NBTgotCSAgICAgIGVsc2UgaWYgKGJ1ZlswXSA9PSAnXDAzMycgJiYgKGJ1 ZlsxXSA9PSAnRScgfHwgYnVmWzFdID09ICclJykpIHsKLQkJLyogRGl0dG8gZm9yIFBKTCBKb2Ig cHJpbnRlciBoZWFkZXIgKi8KLSNpZmRlZiBERUJVRwotCQlpbnQgaTsKLQkJZm9yIChpID0gMjsg aSA8IGNvdW50OyBpKyspIHsKLQkJICAgIGlmIChidWZbaV0gPCAnIScpIHsKLQkJCWJ1ZltpXSA9 IE5VTDsKLQkJCWJyZWFrOwotCQkgICAgfQotCQl9Ci0JCWRlYnVnKEYxMTAsInNjYW5maWxlIFBK TCBKb2IgcHJpbnRlciBoZWFkZXIiLGJ1ZiwwKTsKLSNlbmRpZiAvKiBERUJVRyAqLwotCQliaW5h cnkgPSAxOwotCQlicmVhazsKLSNlbmRpZiAvKiBOT1BKTFNDQU4gKi8KLQkgICAgfQotCX0KLQot I2lmZGVmIFVOSUNPREUKLQlpZiAoYnl0ZXMgPT0gMCAmJiBjb3VudCA+IDEpIHsKLQkgICAgaW50 IGluY2xfY250ID0gMDsKLQotCSAgICAvKiBGaXJzdCBsb29rIGZvciBCT00gKi8KLQotCSAgICBj MCA9ICh1bnNpZ25lZCkoKHVuc2lnbmVkKWJ1ZlswXSYweEZGKTsgLyogRmlyc3QgZmlsZSBieXRl ICovCi0JICAgIGMxID0gKHVuc2lnbmVkKSgodW5zaWduZWQpYnVmWzFdJjB4RkYpOyAvKiBTZWNv bmQgYnl0ZSAqLwotCi0JICAgIGlmIChjMCA9PSAweEZFICYmIGMxID09IDB4RkYpIHsJLyogVUNT LTIgQkUgKi8KLQkJcmMgPSBGVF9VQ1MyOwotCQl2YWwgPSAwOwotCQlkZWJ1ZyhGMTExLCJzY2Fu ZmlsZSBVQ1MyIEJPTSBCRSIsY2tpdG9hKHZhbCkscmMpOwotCQlpbmNsX2NudCsrOwotCSAgICB9 IGVsc2UgaWYgKGMwID09IDB4RkYgJiYgYzEgPT0gMHhGRSkgeyAvKiBVQ1MtMiBMRSAqLwotCQly YyA9IEZUX1VDUzI7Ci0JCXZhbCA9IDE7Ci0JCWRlYnVnKEYxMTEsInNjYW5maWxlIFVDUzIgQk9N IExFIixja2l0b2EodmFsKSxyYyk7Ci0JCWluY2xfY250Kys7Ci0JICAgIH0gZWxzZSBpZiAoY291 bnQgPiAyKSBpZiAoYzAgPT0gMHhFRiAmJiBjMSA9PSAweEJCICYmCi0JCSAgICAgICAodW5zaWdu ZWQpKCh1bnNpZ25lZClidWZbMl0mMHhGRikgPT0gMHhCRikgewotCQlyYyA9IEZUX1VURjg7Ci0J CWRlYnVnKEYxMTEsInNjYW5maWxlIFVURjggQk9NIixja2l0b2EodmFsKSxyYyk7Ci0JCWluY2xf Y250Kys7Ci0JICAgIH0KLQkgICAgaWYgKGluY2xfY250KSB7CQkvKiBIYXZlIEJPTSAqLwotCQli eXRlcyArPSBjb3VudDsKLQkJZ290byB4c2NhbmZpbGU7Ci0JICAgIH0KLQl9Ci0jZW5kaWYgLyog VU5JQ09ERSAqLwotCi0JYnl0ZXMgKz0gY291bnQ7CQkJLyogQ291bnQgYnl0ZXMgcmVhZCAqLwot CWVvZiA9IGZlb2YoZnApOwkJCS8qIEZsYWcgZm9yIGF0IEVPRiAgKi8KLQotCWZvciAoaSA9IDA7 IGkgPCBjb3VudDsgaSsrKSB7CS8qIEZvciBlYWNoIGJ5dGUuLi4gKi8KLQkgICAgYyA9ICh1bnNp Z25lZClidWZbaV07CS8qIEZvciBlYXNlIG9mIHJlZmVyZW5jZSAqLwotCSAgICBpZiAoIWMpIHsJ CQkvKiBaZXJvIGJ5dGU/ICovCi0jaWZkZWYgRVZFTk1BWAotCQlpZiAoaSYxKQkJLyogSW4gb2Rk IHBvc2l0aW9uICovCi0JCSAgb2RkemVybysrOwotCQllbHNlCi0JCSAgZXZlbnplcm8rKzsJCS8q IEluIGV2ZW4gcG9zaXRpb24gKi8KLSNlbmRpZiAvKiBFVkVOTUFYICovCi0JCXJ1bnplcm8rKzsK LQkgICAgfSBlbHNlIHsJCQkvKiBOb3QgYSB6ZXJvIGJ5dGUgKi8KLQkJaWYgKHJ1bnplcm8gPiBy dW5tYXgpCi0JCSAgcnVubWF4ID0gcnVuemVybzsKLQkJaWYgKHJ1bm1heCA+IDIpCQkvKiBUaGF0 J3MgYWxsIHdlIG5lZWQgdG8gYmUgY2VydGFpbiAqLwotCQkgIGJyZWFrOwkJLyogaXQncyBhIGJp bmFyeSBmaWxlLiAqLwotCQlydW56ZXJvID0gMDsKLQkgICAgfQotCi0jaWZkZWYgQ09NTUVOVAot I2lmZGVmIEVWRU5NQVgKLQotLyogVGhpcyBpcyB0byBjYXRjaCBVQ1MtMiB3aXRoIGEgbm9uLUFT Q0lJLCBub24tTGF0aW4tMSByZXBlcnRvaXJlICAqLwotCi0JICAgIGlmIChpID4gMSkgewkgICAg ICAvKiBMb29rIGZvciBydW5zIG9mIGFsdGVybmF0aW5nIGNoYXJzICovCi0JCWlmIChpJjEpIHsK LQkJICAgIGlmIChjID09IGJ1ZltpLTJdKSB7IC8qIEluIG9kZCBwb3NpdGlvbnMgKi8KLQkJCW9k ZHJ1bisrOwotCQkJb2RkYnl0ZSA9IGM7Ci0JCSAgICB9IGVsc2UgewotCQkJb2RkbWF4ID0gb2Rk cnVuOwotCQkJb2RkbWF4Ynl0ZSA9IG9kZGJ5dGU7Ci0JCSAgICB9Ci0JCX0gZWxzZSB7CQkvKiBh bmQgZXZlbiBwb3NpdGlvbnMgKi8KLQkJICAgIGlmIChjID09IGJ1ZltpLTJdKSB7Ci0JCQlldmVu cnVuKys7Ci0JCQlldmVuYnl0ZSA9IGM7Ci0JCSAgICB9IGVsc2UgewotCQkJZXZlbm1heCA9IGV2 ZW5ydW47Ci0JCQlldmVubWF4Ynl0ZSA9IGV2ZW5ieXRlOwotCQkgICAgfQotCQl9Ci0JICAgIH0K LSNlbmRpZiAvKiBFVkVOTUFYICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0JICAgIGlmICgo YyAmIDB4ODApID09IDApIHsJLyogV2UgaGF2ZSBhIDctYml0IGJ5dGUgKi8KLSNpZmRlZiBVTklD T0RFCi0JCWlmIChpID4gMCAmJiBjID09IDEwKSB7IC8qIExpbmVmZWVkICovCi0JCSAgICBpZiAo YnVmW2ktMV0gPT0gMCkgbGZudWwrKzsgLyogUHJlY2VkZWQgYnkgTlVMICovCi0JCSAgICBlbHNl IGlmIChidWZbaS0xXSA9PSAxMykgY3JsZisrOyAvKiBvciBieSBDUi4uLiAqLwotCQl9Ci0jZW5k aWYgLyogVU5JQ09ERSAqLwotCQlpZiAoYyA8ICcgJykgewkJLyogQ2hlY2sgZm9yIENPIGNvbnRy b2xzICovCi0JCSAgICBpZiAoYyAhPSBMRiAmJiBjICE9IENSICYmIGMgIT0gSFQgJiYgYyAhPSBG RikgewotCQkJYzBjb250cm9scysrOwotCQkJaWYgKGMgIT0gRVNDICYmIGMgIT0gU08gJiYgYyAh PSBTSSkKLQkJCSAgYzBub25pc28rKzsKLQkJICAgIH0KLQkJICAgIGlmICgoYyA9PSAnXDAzMicp CS8qIEN0cmwtWiAqLwotI2lmZGVmIENPTU1FTlQKLQkJCSYmIGVvZiAmJiAoaSA+PSBjb3VudCAt IDIpCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCQkJKSB7Ci0JCQljMGNvbnRyb2xzLS07Ci0JCQlj MG5vbmlzby0tOwotI2lmZGVmIENLX0NUUkxaCi0JCQlpZiAoZW9mbWV0aG9kID09IFhZRU9GX1og JiYgdHh0Y3ogPT0gMCkgewotCQkJICAgIGlmIChjMGNvbnRyb2xzID09IDApIC8qIEFsbCB0ZXh0 IHByaW9yIHRvIEN0cmwtWiAqLwotCQkJICAgICAgdHh0Y3ogPSAxOwotCQkJfQotI2VuZGlmIC8q IENLX0NUUkxaICovCi0JCSAgICB9Ci0JCX0KLSNpZmRlZiBVTklDT0RFCi0JCWlmICghbm90dXRm OCAmJiB1dGY4c3RhdGUpIHsgLyogSW4gVVRGLTggc2VxdWVuY2U/ICovCi0JCSAgICB1dGY4c3Rh dGUgPSAwOwotCQkgICAgZGVidWcoRjAwMCwic2NhbmZpbGUiLCI3LWJpdCBieXRlIGluIFVURjgg c2VxdWVuY2UiLGMpOwotCQkgICAgbm90dXRmOCsrOwkJLyogVGhlbiBpdCdzIG5vdCBVVEYtOCAq LwotCQkgICAgY29udGludWU7Ci0JCX0KLSNlbmRpZiAvKiBVTklDT0RFICovCi0JICAgIH0gZWxz ZSB7CQkJLyogV2UgaGF2ZSBhbiA4LWJpdCBieXRlICovCi0JCWVpZ2h0Yml0Kys7CQkvKiBDb3Vu dCBpdCAqLwotCQlpZiAoYyA+PSAweDgwICYmIGMgPCAweEEwKSAvKiBDaGVjayBmb3IgQzEgY29u dHJvbHMgKi8KLQkJICBjMWNvbnRyb2xzKys7Ci0jaWZkZWYgVU5JQ09ERQotCQlpZiAoIW5vdHV0 ZjgpIHsJCS8qIElmIGl0IG1pZ2h0IHN0aWxsIGJlIFVURjguLi4gKi8KLQkJICAgIHN3aXRjaCAo dXRmOHN0YXRlKSB7IC8qIEVudGVyIHRoZSBVVEYtOCBzdGF0ZSBtYWNoaW5lICovCi0JCSAgICAg IGNhc2UgMDoJCSAvKiBGaXJzdCBieXRlLi4uICovCi0JCQlpZiAoKGMgJiAweEUwKSA9PSAweEMw KSB7IC8qIFRlbGxzIG51bWJlciBvZiAqLwotCQkJICAgIHV0ZjhzdGF0ZSA9IDE7ICAgICAgICAv KiBzdWJzZXF1ZW50IGJ5dGVzICovCi0JCQl9IGVsc2UgaWYgKChjICYgMHhGMCkgPT0gMHhFMCkg ewotCQkJICAgIHV0ZjhzdGF0ZSA9IDI7Ci0JCQl9IGVsc2UgaWYgKChjICYgMHhGOCkgPT0gMHhG MCkgewotCQkJICAgIHV0ZjhzdGF0ZSA9IDM7Ci0JCQl9IGVsc2UgewotCQkJICAgIG5vdHV0Zjgr KzsKLQkJCX0KLQkJCWJyZWFrOwotCQkgICAgICBjYXNlIDE6CQkvKiBTdWJzZXF1ZW50IGJ5dGUg Ki8KLQkJICAgICAgY2FzZSAyOgotCQkgICAgICBjYXNlIDM6Ci0JCQlpZiAoKGMgJiAweEMwKSAh PSAweDgwKSB7IC8qIE11c3Qgc3RhcnQgd2l0aCAxMCAqLwotCQkJICAgIGRlYnVnKEYwMDAsInNj YW5maWxlIiwKLQkJCQkgICJiYWQgYnl0ZSBpbiBVVEY4IHNlcXVlbmNlIixjKTsKLQkJCSAgICBu b3R1dGY4Kys7Ci0JCQkgICAgYnJlYWs7Ci0JCQl9Ci0JCQl1dGY4c3RhdGUtLTsJLyogR29vZCwg b25lIGxlc3MgaW4gdGhpcyBzZXF1ZW5jZSAqLwotCQkJYnJlYWs7Ci0JCSAgICAgIGRlZmF1bHQ6 CQkvKiBTaG91bGRuJ3QgaGFwcGVuICovCi0JCQlkZWJ1ZyhGMTExLCJzY2FuZmlsZSIsImJhZCBV VEY4IHN0YXRlIix1dGY4c3RhdGUpOwotCQkJbm90dXRmOCsrOwotCQkgICAgfQotCQl9Ci0jZW5k aWYgLyogVU5JQ09ERSAqLwotCSAgICB9Ci0JfQotICAgIH0KLSAgICBmY2xvc2UoZnApOwkJCQkv KiBDbG9zZSB0aGUgZmlsZSAqLwotICAgIGRlYnVnKEYxMDEsInNjYW5maWxlIGJ5dGVzIiwiIixi eXRlcyk7Ci0KLSAgICBpZiAoYnl0ZXMgPT0gMCkJCQkvKiBJZiBub3RoaW5nIHdhcyByZWFkICov Ci0gICAgICByZXR1cm4oLTEpOwkJCS8qIHdlJ3JlIGRvbmUuICovCi0KLSNpZmRlZiBFVkVOTUFY Ci0gICAgLyogSW4gY2FzZSB3ZSBoYWQgYSBydW4gdGhhdCBuZXZlciBicm9rZS4uLiAqLwotI2lm ZGVmIENPTU1FTlQKLSAgICBpZiAob2RkbWF4ID09IDApIHsKLQlvZGRtYXggPSBvZGRydW47Ci0J b2RkbWF4Ynl0ZSA9IG9kZGJ5dGU7Ci0gICAgfQotICAgIGlmIChldmVubWF4ID09IDApIHsKLQll dmVubWF4ID0gZXZlbnJ1bjsKLQlldmVubWF4Ynl0ZSA9IGV2ZW5ieXRlOwotICAgIH0KLSNlbmRp ZiAvKiBDT01NRU5UICovCi0gICAgaWYgKHJ1bm1heCA9PSAwKSB7Ci0JcnVubWF4ID0gcnVuemVy bzsKLSAgICB9Ci0jZW5kaWYgLyogRVZFTk1BWCAqLwotCi0jaWZkZWYgVU5JQ09ERQotICAgIGlm IChieXRlcyA+IDEwMCkJCQkvKiBCeXRlcyBpcyBub3QgMCAqLwotICAgICAgcGN0emVybyA9IChl dmVuemVybyArIG9kZHplcm8pIC8gKGJ5dGVzIC8gMTAwKTsKLSAgICBlbHNlCi0gICAgICBwY3R6 ZXJvID0gKChldmVuemVybyArIG9kZHplcm8pICogMTAwKSAvIGJ5dGVzOwotI2VuZGlmIC8qIFVO SUNPREUgKi8KLQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewkJCS8qIElmIGRlYnVn Z2luZywgZHVtcCBzdGF0aXN0aWNzICovCi0JZGVidWcoRjEwMSwic2NhbmZpbGUgYzBjb250cm9s cyAiLCIiLGMwY29udHJvbHMpOwotCWRlYnVnKEYxMDEsInNjYW5maWxlIGMwbm9uaXNvICAgIiwi IixjMG5vbmlzbyk7Ci0JZGVidWcoRjEwMSwic2NhbmZpbGUgYzFjb250cm9scyAiLCIiLGMxY29u dHJvbHMpOwotCWRlYnVnKEYxMDEsInNjYW5maWxlIGVpZ2h0Yml0ICAgIiwiIixlaWdodGJpdCk7 Ci0jaWZkZWYgVU5JQ09ERQotCWRlYnVnKEYxMDEsInNjYW5maWxlIGNybGYgICAgICAgIiwiIixj cmxmKTsKLQlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBsZm51bCAgICAgICIsIiIsbGZudWwpOwotCWRl YnVnKEYxMDEsInNjYW5maWxlIG5vdHV0ZjggICAgIiwiIixub3R1dGY4KTsKLQlkZWJ1ZyhGMTAx LCJzY2FuZmlsZSBldmVuemVybyAgICIsIiIsZXZlbnplcm8pOwotCWRlYnVnKEYxMDEsInNjYW5m aWxlIG9kZHplcm8gICAgIiwiIixvZGR6ZXJvKTsKLQlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBldmVu L29kZCAgICIsIiIsKGV2ZW56ZXJvIC8gKG9kZHplcm8gKyAxKSkpOwotCWRlYnVnKEYxMDEsInNj YW5maWxlIG9kZC9ldmVuICAgIiwiIiwob2RkemVybyAvIChldmVuemVybyArIDEpKSk7Ci0JZGVi dWcoRjEwMSwic2NhbmZpbGUgcGN0emVybyAgICAiLCIiLHBjdHplcm8pOwotI2VuZGlmIC8qIFVO SUNPREUgKi8KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgRVZFTk1BWAotCWRlYnVnKEYxMDEsInNj YW5maWxlIG9kZG1heCAgICAgIiwiIixvZGRtYXgpOwotCWRlYnVnKEYxMDEsInNjYW5maWxlIG9k ZG1heGJ5dGUgIiwiIixvZGRtYXhieXRlKTsKLQlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBldmVubWF4 ICAgICIsIiIsZXZlbm1heCk7Ci0JZGVidWcoRjEwMSwic2NhbmZpbGUgZXZlbm1heGJ5dGUiLCIi LGV2ZW5tYXhieXRlKTsKLSNlbmRpZiAvKiBFVkVOTUFYICovCi0jZW5kaWYgLyogQ09NTUVOVCAq LwotCWRlYnVnKEYxMDEsInNjYW5maWxlIHJ1bm1heCAgICAgIiwiIixydW5tYXgpOwotICAgIH0K LSNlbmRpZiAvKiBERUJVRyAqLwotCi0jaWZkZWYgVU5JQ09ERQotICAgIHggPSBlaWdodGJpdCA/ IGJ5dGVzIC8gMjAgOiBieXRlcyAvIDQ7IC8qIEZvciBVQ1MtMi4uLiAqLwotCi0gICAgaWYgKHJ1 bm1heCA+IDIpIHsJCQkvKiBGaWxlIGhhcyBydW4gb2YgbW9yZSB0aGFuIDIgTlVMcyAqLwotCWRl YnVnKEYxMDAsInNjYW5maWxlIEJJTiBydW5tYXgiLCIiLDApOwotCXJjID0gRlRfQklOOwkJCS8q IHNvIGl0IGNhbid0IGJlIGFueSBraW5kIG9mIHRleHQuICovCi0JZ290byB4c2NhbmZpbGU7Ci0K LSAgICB9IGVsc2UgaWYgKHJjID09IEZUX1VDUzIgfHwgKHJjID09IEZUX1VURjggJiYgcnVubWF4 ID09IDApKSB7Ci0JZ290byB4c2NhbmZpbGU7CQkJLyogRmlsZSBzdGFydHMgd2l0aCBhIEJPTSAq LwotCi0gICAgfSBlbHNlIGlmIChlaWdodGJpdCA+IDAgJiYgIW5vdHV0ZjgpIHsgLyogRmlsZSBo YXMgOC1iaXQgZGF0YSAqLwotCWlmIChydW5tYXggPiAwKSB7CQkgICAvKiBhbmQgcnVucyBvZiBO VUxzICovCi0JICAgIGRlYnVnKEYxMDAsInNjYW5maWxlIEJJTiAobm5VVEY4KSBydW5tYXgiLCIi LDApOwotCSAgICByYyA9IEZUX0JJTjsJCSAgIC8qIFVURi04IGRvZXNuJ3QgaGF2ZSBOVUxzICov Ci0JfSBlbHNlIHsJCQkgICAvKiBObyBOVUxzICovCi0JICAgIGRlYnVnKEYxMDAsInNjYW5maWxl IFVURjggKG5uVVRGOCArIHJ1bm1heCA9PSAwKSIsIiIsMCk7Ci0JICAgIHJjID0gRlRfVVRGODsJ CSAgIC8qIGFuZCBub3Qgbm90IFVURi04LCBzbyBpcyBVVEYtOCAqLwotCX0KLQlnb3RvIHhzY2Fu ZmlsZTsKLSAgICB9Ci0vKgotICBGb3IgVUNTLTIgZGV0ZWN0aW9uLCBzZWUgaWYgdGhlIHRleHQg Y29udGFpbnMgbGluZXMgZGVsaW1pdGVkIGJ5Ci0gIEFTQ0lJIGNvbnRyb2xzIGFuZCBjb250YWlu aW5nIHNwYWNlcywgQVNDSUkgZGlnaXRzLCBvciBvdGhlciBBU0NJSQotICBjaGFyYWN0ZXJzLCB0 aHVzIGZvcmNpbmcgdGhlIHByZXNlbmNlIG9mIGEgY2VydGFpbiBwZXJjZW50YWdlIG9mIHplcm8g Ynl0ZXMuCi0gIEZvciB0aGlzIHB1cnBvc2UgcmVxdWlyZSAyMCUgemVybyBieXRlcywgd2l0aCBh dCBsZWFzdCBzaXggdGltZXMgYXMgbWFueQotICBpbiBldmVuIChvZGQpIHBvc2l0aW9ucyBhcyBp biBvZGQgKGV2ZW4pIHBvc2l0aW9ucy4KLSovCi0gICAgaWYgKChldmVuemVybyA+PSB4ICYmIG9k ZHplcm8gPT0gMCkgfHwKLQkoKCgoZXZlbnplcm8gLyAob2RkemVybyArIDEpKSA+IDYpICYmIChw Y3R6ZXJvID4gMjApKSAmJgotCShjcmxmID09IDApICYmCi0JKGxmbnVsID4gMSkpCi0JKSB7Ci0J ICAgIGRlYnVnKEYxMDAsInNjYW5maWxlIFVDUzIgbm9CT00gQkUgKGV2ZW4vb2RkemVybykiLCIi LDApOwotCXJjID0gRlRfVUNTMjsKLQl2YWwgPSAwOwotICAgIH0gZWxzZSBpZiAoKGV2ZW56ZXJv ID09IDAgJiYgb2RkemVybyA+PSB4KSB8fAotCSAgICAgICAoKCgob2RkemVybyAvIChldmVuemVy byArIDEpKSA+IDYpICYmIChwY3R6ZXJvID4gMjApKSAmJgotCSAgICAgICAoY3JsZiA9PSAwKSAm JgotCSAgICAgICAobGZudWwgPiAxKSkKLQkgICAgICAgKSB7Ci0JZGVidWcoRjEwMCwic2NhbmZp bGUgVUNTMiBub0JPTSBMRSAoZXZlbi9vZGR6ZXJvKSIsIiIsMCk7Ci0JcmMgPSBGVF9VQ1MyOwot CXZhbCA9IDE7Ci0KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgRVZFTk1BWAotLyoKLSAgSWYgdGhl IHRlc3RzIGFib3ZlIGZhaWwsIHdlIHN0aWxsIG1pZ2h0IGhhdmUgVUNTLTIgaWYgdGhlcmUgYXJl IHNpZ25pZmljYW50Ci0gIHJ1bnMgb2YgaWRlbnRpY2FsIGJ5dGVzIGluIGFsdGVybmF0aW5nIHBv c2l0aW9ucywgYnV0IG9ubHkgaWYgaXQgYWxzbyBoYXMKLSAgdW51c3VhbCBDMCBjb250cm9scyAo b3RoZXJ3aXNlIHdlJ2QgcGljayB1cCBoZXggZmlsZXMgaGVyZSkuICBOT1RFOiBXZQotICBkb24n dCBhY3R1YWxseSBkbyB0aGlzIC0tIEVWRU5NQVggaXMgbm90IGRlZmluZWQgKHNlZSBjb21tZW50 cyBhYm92ZSBhdAotICBmaXJzdCBvY2N1cnJlbmNlIG9mIEVWRU5NQVgpLgotKi8KLSAgICB9IGVs c2UgaWYgKGMwbm9uaXNvICYmIGV2ZW5tYXggPiBieXRlcyAvIDQpIHsKLQlkZWJ1ZyhGMTAwLCJz Y2FuZmlsZSBVQ1MyIEJFIChldmVubWF4KSIsIiIsMCk7Ci0JcmMgPSBGVF9VQ1MyOwotCXZhbCA9 IDA7Ci0gICAgfSBlbHNlIGlmIChjMG5vbmlzbyAmJiBvZGRtYXggPiBieXRlcyAvIDQpIHsKLQlk ZWJ1ZyhGMTAwLCJzY2FuZmlsZSBVQ1MyIExFIChldmVubWF4KSIsIiIsMCk7Ci0JcmMgPSBGVF9V Q1MyOwotCXZhbCA9IDE7Ci0jZW5kaWYgLyogRVZFTk1BWCAqLwotI2VuZGlmIC8qIENPTU1FTlQg Ki8KLQotICAgIH0KLS8qCi0gIEl0IHNlZW1zIHRvIGJlIFVDUy0yIGJ1dCBsZXQncyBiZSBtb3Jl IGNlcnRhaW4gc2luY2UgdGhlcmUgaXMgbm8gQk9NLi4uCi0gIElmIHRoZSBudW1iZXIgb2YgNy0g YW5kIDgtYml0IGNoYXJhY3RlcnMgaXMgYXBwcm94aW1hdGVseSBlcXVhbCwgaXQgbWlnaHQKLSAg YmUgYSBjb21wcmVzc2VkIGZpbGUuICBJbiB0aGlzIGNhc2Ugd2UgZGVjaWRlIGJhc2VkIG9uIHRo ZSBuYW1lLgotKi8KLSAgICBpZiAocmMgPT0gRlRfVUNTMikgewotCWlmIChlaWdodGJpdCA+IDAp IHsKLQkgICAgaW50IGosIGs7Ci0JICAgIGogPSAoYzFjb250cm9scyAqIDEwMCkgLyAoYzBjb250 cm9scyArIDEpOwotCSAgICBkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBjMS9jMCAgICAgICIsIiIsaik7 Ci0JICAgIGsgPSAoYnl0ZXMgKiAxMDApIC8gZWlnaHRiaXQ7Ci0JICAgIGRlYnVnKEYxMDEsInNj YW5maWxlIHBjdCA4Yml0ICAgIiwiIixrKTsKLQkgICAgaWYgKGsgPiA0MCAmJiBrIDwgNjAgJiYg aiA+IDYwKSB7Ci0JCWlmIChja21hdGNoKCJ7Ki5aLCouZ3osKi56aXAsKi5aSVB9IixuYW1lLDEs MSkpIHsKLQkJICAgIGRlYnVnKEYxMTAsInNjYW5maWxlIDgtYml0IEJJTiBjb21wcmVzc2VkIixu YW1lLDApOwotCQkgICAgcmMgPSBGVF9CSU47Ci0JCSAgICBnb3RvIHhzY2FuZmlsZTsKLQkJfQot CSAgICB9Ci0JfQotCS8qIFNtYWxsIGZpbGUgLSBub3QgZW5vdWdoIGV2aWRlbmNlIHVubGVzcyAu Li4gKi8KLQotCWlmIChieXRlcyA8IDEwMCkgewotCSAgICBpZiAob2RkemVybyAhPSAwICYmIGV2 ZW56ZXJvICE9IDApIHsKLQkJZGVidWcoRjEwMCwic2NhbmZpbGUgc21hbGwgVUNTMiBkb3VidGZ1 bCIsIiIsMCk7Ci0JCXJjID0gRlRfQklOOwotCQlnb3RvIHhzY2FuZmlsZTsKLQkgICAgfSBlbHNl IGlmIChvZGR6ZXJvID09IDAgJiYgZXZlbnplcm8gPT0gMCkgewotCQlyYyA9IGVpZ2h0Yml0ID8g RlRfOEJJVCA6IEZUXzdCSVQ7Ci0JICAgIH0KLQl9Ci0JZ290byB4c2NhbmZpbGU7CQkJLyogU2Vl bXMgdG8gYmUgVUNTLTIgKi8KLSAgICB9Ci0KLS8qIElmIG5vbmUgb2YgdGhlIGFib3ZlLCBpdCdz IHByb2JhYmx5IG5vdCBVbmljb2RlLiAgKi8KLQotICAgIGlmICghZWlnaHRiaXQpIHsJCQkvKiBJ dCdzIDctYml0ICovCi0JaWYgKGMwY29udHJvbHMpIHsJCS8qIFRoaXMgd291bGQgYmUgc3RyYW5n ZSAqLwotCSAgICBpZiAoKGMwbm9uaXNvID4gMCkgJiYgKHR4dGN6ID09IDApKSB7Ci0JCWRlYnVn KEYxMDAsInNjYW5maWxlIDctYml0IEJJTiAoYzBjb25pc28pIiwiIiwwKTsKLQkJcmMgPSBGVF9C SU47Ci0JICAgIH0gZWxzZSB7Ci0JCWRlYnVnKEYxMDAsInNjYW5maWxlIDctYml0IElTTzIwMjIg VEVYVCAobm8gYzBub25pc28pIiwiIiwwKTsKLQkJcmMgPSBGVF83QklUOwotCSAgICB9Ci0JfSBl bHNlIHsJCQkvKiA3LWJpdCB0ZXh0ICovCi0JICAgIGRlYnVnKEYxMDAsInNjYW5maWxlIDctYml0 IFRFWFQgKG5vIGMwY29udHJvbHMpIiwiIiwwKTsKLQkgICAgcmMgPSBGVF83QklUOwotCX0KLSAg ICB9IGVsc2UgaWYgKCFjMG5vbmlzbyB8fCB0eHRjeikgewkvKiA4LWJpdCB0ZXh0ICovCi0JZGVi dWcoRjEwMCwic2NhbmZpbGUgOC1iaXQgVEVYVCAobm8gYzBub25pc28pIiwiIiwwKTsKLQlyYyA9 IEZUXzhCSVQ7Ci0JdmFsID0gYzFjb250cm9scyA/IDEgOiAwOwotICAgIH0gZWxzZSB7CQkJCS8q IDgtYml0IGJpbmFyeSAqLwotCWRlYnVnKEYxMDAsInNjYW5maWxlIDgtYml0IEJJTiAoYzBub25p c28pIiwiIiwwKTsKLQlyYyA9IEZUX0JJTjsKLSAgICB9Ci0KLSNlbHNlICAvKiAhVU5JQ09ERSAq LwotCi0gICAgaWYgKGMwbm9uaXNvKSB7Ci0JZGVidWcoRjEwMCwic2NhbmZpbGUgOC1iaXQgQklO IChjMG5vbmlzbykiLCIiLDApOwotCXJjID0gRlRfQklOOwotICAgIH0gZWxzZSBpZiAoZWlnaHRi aXQpIHsKLQlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSA4LWJpdCBURVhUIChubyBjMG5vbmlzbykiLCIi LDApOwotCXJjID0gRlRfOEJJVDsKLQl2YWwgPSBjMWNvbnRyb2xzID8gMSA6IDA7Ci0gICAgfSBl bHNlIHsKLQlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSA3LWJpdCBURVhUIChubyBjMG5vbmlzbykiLCIi LDApOwotCXJjID0gRlRfN0JJVDsKLSAgICB9Ci0KLSNlbmRpZiAvKiBVTklDT0RFICovCi0KLSAg eHNjYW5maWxlOgotICAgIGlmIChmbGFnKSAqZmxhZyA9IHZhbDsKLSAgICBkZWJ1ZyhGMTAxLCJz Y2FuZmlsZSByZXN1bHQgICAgICIsIiIscmMpOwotICAgIHJldHVybihyYyk7Ci19Ci0KLS8qCi0g IHNjYW5zdHJpbmcgLSBsaWtlIHNjYW4gZmlsZSBidXQgZm9yIGEgc3RyaW5nLgotICBUaGlzIGlz IGp1c3QgYSBxdWljayBidXRjaGVyeSBvZiBzY2FuZmlsZSB3aXRob3V0IHRoaW5raW5nIHRvbyBt dWNoLgotKi8KLWludAotc2NhbnN0cmluZyhzKSBjaGFyICogczsgewotICAgIGludCB4LCB2YWwg PSAtMSwgY291bnQgPSAwOwkJLyogV29ya2VycyAqLwotICAgIGludCByYyA9IC0xOwkJCS8qIFJl dHVybiBjb2RlICovCi0gICAgaW50IHB2ID0gLTE7CQkJLyogUGF0dGVybi1tYXRjaCB2YWx1ZSAq LwotICAgIGludCBieXRlcyA9IDA7CQkJLyogVG90YWwgYnl0ZSBjb3VudCAqLwotI2lmZGVmIFVO SUNPREUKLSAgICB1bnNpZ25lZCBpbnQgYzAsIGMxOwkJLyogRmlyc3QgMiBmaWxlIGJ5dGVzIChm b3IgQk9NKSAqLwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSAgICBleHRlcm4gaW50IHBpcGVzZW5k LCBmaWxlcGVlazsKLQotICAgIHJlZ2lzdGVyIGludCBpOwkJCS8qIExvb3AgY29udHJvbCAqLwot ICAgIGludCByZWFkc2l6ZSA9IDA7CQkJLyogSG93IG11Y2ggdG8gcmVhZCAqLwotICAgIGludCBl aWdodGJpdCA9IDA7CQkJLyogTnVtYmVyIG9mIGJ5dGVzIHdpdGggOHRoIGJpdCBvbiAqLwotICAg IGludCBjMGNvbnRyb2xzID0gMDsJCQkvKiBDMCBub24tdGV4dCBjb250cm9sLWNoYXIgY291bnRl ciAqLwotICAgIGludCBjMG5vbmlzbyA9IDA7CQkJLyogQzAgbm9uLUlTTyBjb250cm9sLWNoYXIg Y291bnRlciAqLwotICAgIGludCBjMWNvbnRyb2xzID0gMDsJCQkvKiBDMSBjb250cm9sLWNoYXJh Y3RlciBjb3VudGVyICovCi0gICAgdW5zaWduZWQgaW50IGM7CQkJLyogQ3VycmVudCBjaGFyYWN0 ZXIgKi8KLSAgICBpbnQgcnVubWF4ID0gMDsJCQkvKiBMb25nZXN0IHJ1biBvZiAwIGJ5dGVzICov Ci0gICAgaW50IHJ1bnplcm8gPSAwOwkJCS8qIFJ1biBvZiAwIGJ5dGVzICovCi0gICAgaW50IHBj dHplcm8gPSAwOwkJCS8qIFBlcmNlbnRhZ2Ugb2YgMCBieXRlcyAqLwotICAgIGludCB0eHRjeiA9 IDA7Ci0KLSNpZmRlZiBVTklDT0RFCi0gICAgaW50IG5vdHV0ZjggPSAwOwkJCS8qIE5vbnplcm8g aWYgZGVmaW5pdGVseSBub3QgVVRGLTggKi8KLSAgICBpbnQgdXRmOHN0YXRlID0gMDsJCQkvKiBV VEYtOCByZWNvZ25pemVyIHN0YXRlICovCi0gICAgaW50IG9kZHplcm8gPSAwOwkJCS8qIE51bWJl ciBvZiAwIGJ5dGVzIGluIG9kZCBwb3N0aW9ucyAqLwotICAgIGludCBldmVuemVybyA9IDA7CQkJ LyogYW5kIGluIGV2ZW4gcG9zaXRpb25zICovCi0gICAgaW50IGxmbnVsID0gMDsJCQkvKiBOdW1i ZXIgb2YgPExGPjxOVUw+IHNlcXVlbmNlcyAqLwotICAgIGludCBjcmxmID0gMDsJCQkvKiBOdW1i ZXIgb2YgPENSTEY+IHNlcXVlbmNlcyAqLwotI2Vsc2UKLSAgICBpbnQgbm90dXRmOCA9IDE7Ci0j ZW5kaWYgLyogVU5JQ09ERSAqLwotCi0gICAgY2hhciAqIGJ1ZiA9IHM7Ci0gICAgaWYgKCFzKSBz ID0gIiI7Ci0gICAgY291bnQgPSBzdHJsZW4ocyk7Ci0KLSNpZmRlZiBVTklDT0RFCi0gICAgaWYg KGJ5dGVzID09IDAgJiYgY291bnQgPiAxKSB7Ci0JaW50IGluY2xfY250ID0gMDsKLQotCS8qIEZp cnN0IGxvb2sgZm9yIEJPTSAqLwotCi0JYzAgPSAodW5zaWduZWQpKCh1bnNpZ25lZClidWZbMF0m MHhGRik7IC8qIEZpcnN0IGZpbGUgYnl0ZSAqLwotCWMxID0gKHVuc2lnbmVkKSgodW5zaWduZWQp YnVmWzFdJjB4RkYpOyAvKiBTZWNvbmQgYnl0ZSAqLwotCi0JaWYgKGMwID09IDB4RkUgJiYgYzEg PT0gMHhGRikgewkvKiBVQ1MtMiBCRSAqLwotCSAgICByYyA9IEZUX1VDUzI7Ci0JICAgIHZhbCA9 IDA7Ci0JICAgIGRlYnVnKEYxMTEsInNjYW5zdHJpbmcgVUNTMiBCT00gQkUiLGNraXRvYSh2YWwp LHJjKTsKLQkgICAgaW5jbF9jbnQrKzsKLQl9IGVsc2UgaWYgKGMwID09IDB4RkYgJiYgYzEgPT0g MHhGRSkgeyAvKiBVQ1MtMiBMRSAqLwotCSAgICByYyA9IEZUX1VDUzI7Ci0JICAgIHZhbCA9IDE7 Ci0JICAgIGRlYnVnKEYxMTEsInNjYW5zdHJpbmcgVUNTMiBCT00gTEUiLGNraXRvYSh2YWwpLHJj KTsKLQkgICAgaW5jbF9jbnQrKzsKLQl9IGVsc2UgaWYgKGNvdW50ID4gMikgaWYgKGMwID09IDB4 RUYgJiYgYzEgPT0gMHhCQiAmJgotCQkgICAodW5zaWduZWQpKCh1bnNpZ25lZClidWZbMl0mMHhG RikgPT0gMHhCRikgewotCSAgICByYyA9IEZUX1VURjg7Ci0JICAgIGRlYnVnKEYxMTEsInNjYW5z dHJpbmcgVVRGOCBCT00iLGNraXRvYSh2YWwpLHJjKTsKLQkgICAgaW5jbF9jbnQrKzsKLQl9Ci0J aWYgKGluY2xfY250KSB7CQkvKiBIYXZlIEJPTSAqLwotCSAgICBieXRlcyArPSBjb3VudDsKLQkg ICAgZ290byB4c2NhbnN0cmluZzsKLQl9Ci0gICAgfQotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQot ICAgIGJ5dGVzICs9IGNvdW50OwkJCS8qIENvdW50IGJ5dGVzIHJlYWQgKi8KLQotICAgIGZvciAo aSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CS8qIEZvciBlYWNoIGJ5dGUuLi4gKi8KLQljID0gKHVu c2lnbmVkKWJ1ZltpXTsJLyogRm9yIGVhc2Ugb2YgcmVmZXJlbmNlICovCi0JaWYgKCFjKSB7CQkJ LyogWmVybyBieXRlPyAqLwotCSAgICBnb3RvIHhzY2Fuc3RyaW5nOwkvKiBOdWxsIHRlcm1pbmF0 ZWQgc3RyaW5nICovCi0JfQotCWlmICgoYyAmIDB4ODApID09IDApIHsJLyogV2UgaGF2ZSBhIDct Yml0IGJ5dGUgKi8KLSNpZmRlZiBVTklDT0RFCi0JICAgIGlmIChpID4gMCAmJiBjID09IDEwKSB7 IC8qIExpbmVmZWVkICovCi0JCWlmIChidWZbaS0xXSA9PSAwKSBsZm51bCsrOyAvKiBQcmVjZWRl ZCBieSBOVUwgKi8KLQkJZWxzZSBpZiAoYnVmW2ktMV0gPT0gMTMpIGNybGYrKzsgLyogb3IgYnkg Q1IuLi4gKi8KLQkgICAgfQotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQkgICAgaWYgKGMgPCAnICcp IHsJCS8qIENoZWNrIGZvciBDTyBjb250cm9scyAqLwotCQlpZiAoYyAhPSBMRiAmJiBjICE9IENS ICYmIGMgIT0gSFQgJiYgYyAhPSBGRikgewotCQkgICAgYzBjb250cm9scysrOwotCQkgICAgaWYg KGMgIT0gRVNDICYmIGMgIT0gU08gJiYgYyAhPSBTSSkKLQkJICAgICAgYzBub25pc28rKzsKLQkJ fQotCQlpZiAoKGMgPT0gJ1wwMzInKQkvKiBDdHJsLVogKi8KLQkJICAgICkgewotCQkgICAgYzBj b250cm9scy0tOwotCQkgICAgYzBub25pc28tLTsKLQkJfQotCSAgICB9Ci0jaWZkZWYgVU5JQ09E RQotCSAgICBpZiAoIW5vdHV0ZjggJiYgdXRmOHN0YXRlKSB7IC8qIEluIFVURi04IHNlcXVlbmNl PyAqLwotCQl1dGY4c3RhdGUgPSAwOwotCQlkZWJ1ZyhGMDAwLCJzY2Fuc3RyaW5nIiwiNy1iaXQg Ynl0ZSBpbiBVVEY4IHNlcXVlbmNlIixjKTsKLQkJbm90dXRmOCsrOwkJLyogVGhlbiBpdCdzIG5v dCBVVEYtOCAqLwotCQljb250aW51ZTsKLQkgICAgfQotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQl9 IGVsc2UgewkJCS8qIFdlIGhhdmUgYW4gOC1iaXQgYnl0ZSAqLwotCSAgICBlaWdodGJpdCsrOwkJ LyogQ291bnQgaXQgKi8KLQkgICAgaWYgKGMgPj0gMHg4MCAmJiBjIDwgMHhBMCkgLyogQ2hlY2sg Zm9yIEMxIGNvbnRyb2xzICovCi0JICAgICAgYzFjb250cm9scysrOwotI2lmZGVmIFVOSUNPREUK LQkgICAgaWYgKCFub3R1dGY4KSB7CQkvKiBJZiBpdCBtaWdodCBzdGlsbCBiZSBVVEY4Li4uICov Ci0JCXN3aXRjaCAodXRmOHN0YXRlKSB7IC8qIEVudGVyIHRoZSBVVEYtOCBzdGF0ZSBtYWNoaW5l ICovCi0JCSAgY2FzZSAwOgkJIC8qIEZpcnN0IGJ5dGUuLi4gKi8KLQkJICAgIGlmICgoYyAmIDB4 RTApID09IDB4QzApIHsgLyogVGVsbHMgbnVtYmVyIG9mICovCi0JCQl1dGY4c3RhdGUgPSAxOyAg ICAgICAgLyogc3Vic2VxdWVudCBieXRlcyAqLwotCQkgICAgfSBlbHNlIGlmICgoYyAmIDB4RjAp ID09IDB4RTApIHsKLQkJCXV0ZjhzdGF0ZSA9IDI7Ci0JCSAgICB9IGVsc2UgaWYgKChjICYgMHhG OCkgPT0gMHhGMCkgewotCQkJdXRmOHN0YXRlID0gMzsKLQkJICAgIH0gZWxzZSB7Ci0JCQlub3R1 dGY4Kys7Ci0JCSAgICB9Ci0JCSAgICBicmVhazsKLQkJICBjYXNlIDE6CQkvKiBTdWJzZXF1ZW50 IGJ5dGUgKi8KLQkJICBjYXNlIDI6Ci0JCSAgY2FzZSAzOgotCQkgICAgaWYgKChjICYgMHhDMCkg IT0gMHg4MCkgeyAvKiBNdXN0IHN0YXJ0IHdpdGggMTAgKi8KLQkJCWRlYnVnKEYwMDAsInNjYW5z dHJpbmciLAotCQkJICAgICAgImJhZCBieXRlIGluIFVURjggc2VxdWVuY2UiLGMpOwotCQkJbm90 dXRmOCsrOwotCQkJYnJlYWs7Ci0JCSAgICB9Ci0JCSAgICB1dGY4c3RhdGUtLTsJLyogR29vZCwg b25lIGxlc3MgaW4gdGhpcyBzZXF1ZW5jZSAqLwotCQkgICAgYnJlYWs7Ci0JCSAgZGVmYXVsdDoJ CS8qIFNob3VsZG4ndCBoYXBwZW4gKi8KLQkJICAgIGRlYnVnKEYxMTEsInNjYW5zdHJpbmciLCJi YWQgVVRGOCBzdGF0ZSIsdXRmOHN0YXRlKTsKLQkJICAgIG5vdHV0ZjgrKzsKLQkJfQotCSAgICB9 Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotCX0KLSAgICB9Ci0gICAgaWYgKGJ5dGVzID09IDApCQkJ LyogSWYgbm90aGluZyB3YXMgcmVhZCAqLwotICAgICAgcmV0dXJuKC0xKTsJCQkvKiB3ZSdyZSBk b25lLiAqLwotCi0jaWZkZWYgVU5JQ09ERQotICAgIGlmIChieXRlcyA+IDEwMCkJCQkvKiBCeXRl cyBpcyBub3QgMCAqLwotICAgICAgcGN0emVybyA9IChldmVuemVybyArIG9kZHplcm8pIC8gKGJ5 dGVzIC8gMTAwKTsKLSAgICBlbHNlCi0gICAgICBwY3R6ZXJvID0gKChldmVuemVybyArIG9kZHpl cm8pICogMTAwKSAvIGJ5dGVzOwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQotI2lmZGVmIFVOSUNP REUKLSAgICB4ID0gZWlnaHRiaXQgPyBieXRlcyAvIDIwIDogYnl0ZXMgLyA0OyAvKiBGb3IgVUNT LTIuLi4gKi8KLQotICAgIGlmIChydW5tYXggPiAyKSB7CQkJLyogRmlsZSBoYXMgcnVuIG9mIG1v cmUgdGhhbiAyIE5VTHMgKi8KLQlkZWJ1ZyhGMTAwLCJzY2Fuc3RyaW5nIEJJTiBydW5tYXgiLCIi LDApOwotCXJjID0gRlRfQklOOwkJCS8qIHNvIGl0IGNhbid0IGJlIGFueSBraW5kIG9mIHRleHQu ICovCi0JZ290byB4c2NhbnN0cmluZzsKLQotICAgIH0gZWxzZSBpZiAocmMgPT0gRlRfVUNTMiB8 fCAocmMgPT0gRlRfVVRGOCAmJiBydW5tYXggPT0gMCkpIHsKLQlnb3RvIHhzY2Fuc3RyaW5nOwkJ CS8qIEZpbGUgc3RhcnRzIHdpdGggYSBCT00gKi8KLQotICAgIH0gZWxzZSBpZiAoZWlnaHRiaXQg PiAwICYmICFub3R1dGY4KSB7IC8qIEZpbGUgaGFzIDgtYml0IGRhdGEgKi8KLQlpZiAocnVubWF4 ID4gMCkgewkJICAgLyogYW5kIHJ1bnMgb2YgTlVMcyAqLwotCSAgICBkZWJ1ZyhGMTAwLCJzY2Fu c3RyaW5nIEJJTiAobm5VVEY4KSBydW5tYXgiLCIiLDApOwotCSAgICByYyA9IEZUX0JJTjsJCSAg IC8qIFVURi04IGRvZXNuJ3QgaGF2ZSBOVUxzICovCi0JfSBlbHNlIHsJCQkgICAvKiBObyBOVUxz ICovCi0JICAgIGRlYnVnKEYxMDAsInNjYW5zdHJpbmcgVVRGOCAobm5VVEY4ICsgcnVubWF4ID09 IDApIiwiIiwwKTsKLQkgICAgcmMgPSBGVF9VVEY4OwkJICAgLyogYW5kIG5vdCBub3QgVVRGLTgs IHNvIGlzIFVURi04ICovCi0JfQotCWdvdG8geHNjYW5zdHJpbmc7Ci0gICAgfQotLyoKLSAgSXQg c2VlbXMgdG8gYmUgVUNTLTIgYnV0IGxldCdzIGJlIG1vcmUgY2VydGFpbiBzaW5jZSB0aGVyZSBp cyBubyBCT00uLi4KLSAgSWYgdGhlIG51bWJlciBvZiA3LSBhbmQgOC1iaXQgY2hhcmFjdGVycyBp cyBhcHByb3hpbWF0ZWx5IGVxdWFsLCBpdCBtaWdodAotICBiZSBhIGNvbXByZXNzZWQgZmlsZS4g IEluIHRoaXMgY2FzZSB3ZSBkZWNpZGUgYmFzZWQgb24gdGhlIG5hbWUuCi0qLwotICAgIGlmIChy YyA9PSBGVF9VQ1MyKSB7Ci0JaWYgKGJ5dGVzIDwgMTAwKSB7Ci0JICAgIGlmIChvZGR6ZXJvICE9 IDAgJiYgZXZlbnplcm8gIT0gMCkgewotCQlkZWJ1ZyhGMTAwLCJzY2Fuc3RyaW5nIHNtYWxsIFVD UzIgZG91YnRmdWwiLCIiLDApOwotCQlyYyA9IEZUX0JJTjsKLQkJZ290byB4c2NhbnN0cmluZzsK LQkgICAgfSBlbHNlIGlmIChvZGR6ZXJvID09IDAgJiYgZXZlbnplcm8gPT0gMCkgewotCQlyYyA9 IGVpZ2h0Yml0ID8gRlRfOEJJVCA6IEZUXzdCSVQ7Ci0JICAgIH0KLQl9Ci0JZ290byB4c2NhbnN0 cmluZzsJCQkvKiBTZWVtcyB0byBiZSBVQ1MtMiAqLwotICAgIH0KLQotLyogSWYgbm9uZSBvZiB0 aGUgYWJvdmUsIGl0J3MgcHJvYmFibHkgbm90IFVuaWNvZGUuICAqLwotCi0gICAgaWYgKCFlaWdo dGJpdCkgewkJCS8qIEl0J3MgNy1iaXQgKi8KLQlpZiAoYzBjb250cm9scykgewkJLyogVGhpcyB3 b3VsZCBiZSBzdHJhbmdlICovCi0JICAgIGlmICgoYzBub25pc28gPiAwKSAmJiAodHh0Y3ogPT0g MCkpIHsKLQkJZGVidWcoRjEwMCwic2NhbnN0cmluZyA3LWJpdCBCSU4gKGMwY29uaXNvKSIsIiIs MCk7Ci0JCXJjID0gRlRfQklOOwotCSAgICB9IGVsc2UgewotCQlkZWJ1ZyhGMTAwLCJzY2Fuc3Ry aW5nIDctYml0IElTTzIwMjIgVEVYVCAobm8gYzBub25pc28pIiwiIiwwKTsKLQkJcmMgPSBGVF83 QklUOwotCSAgICB9Ci0JfSBlbHNlIHsJCQkvKiA3LWJpdCB0ZXh0ICovCi0JICAgIGRlYnVnKEYx MDAsInNjYW5zdHJpbmcgNy1iaXQgVEVYVCAobm8gYzBjb250cm9scykiLCIiLDApOwotCSAgICBy YyA9IEZUXzdCSVQ7Ci0JfQotICAgIH0gZWxzZSBpZiAoIWMwbm9uaXNvIHx8IHR4dGN6KSB7CS8q IDgtYml0IHRleHQgKi8KLQlkZWJ1ZyhGMTAwLCJzY2Fuc3RyaW5nIDgtYml0IFRFWFQgKG5vIGMw bm9uaXNvKSIsIiIsMCk7Ci0JcmMgPSBGVF84QklUOwotCXZhbCA9IGMxY29udHJvbHMgPyAxIDog MDsKLSAgICB9IGVsc2UgewkJCQkvKiA4LWJpdCBiaW5hcnkgKi8KLQlkZWJ1ZyhGMTAwLCJzY2Fu c3RyaW5nIDgtYml0IEJJTiAoYzBub25pc28pIiwiIiwwKTsKLQlyYyA9IEZUX0JJTjsKLSAgICB9 Ci0KLSNlbHNlICAvKiAhVU5JQ09ERSAqLwotCi0gICAgaWYgKGMwbm9uaXNvKSB7Ci0JZGVidWco RjEwMCwic2NhbnN0cmluZyA4LWJpdCBCSU4gKGMwbm9uaXNvKSIsIiIsMCk7Ci0JcmMgPSBGVF9C SU47Ci0gICAgfSBlbHNlIGlmIChlaWdodGJpdCkgewotCWRlYnVnKEYxMDAsInNjYW5zdHJpbmcg OC1iaXQgVEVYVCAobm8gYzBub25pc28pIiwiIiwwKTsKLQlyYyA9IEZUXzhCSVQ7Ci0JdmFsID0g YzFjb250cm9scyA/IDEgOiAwOwotICAgIH0gZWxzZSB7Ci0JZGVidWcoRjEwMCwic2NhbnN0cmlu ZyA3LWJpdCBURVhUIChubyBjMG5vbmlzbykiLCIiLDApOwotCXJjID0gRlRfN0JJVDsKLSAgICB9 Ci0KLSNlbmRpZiAvKiBVTklDT0RFICovCi0KLSAgeHNjYW5zdHJpbmc6Ci0gICAgZGVidWcoRjEw MSwic2NhbnN0cmluZyByZXN1bHQgICAgICIsIiIscmMpOwotICAgIHJldHVybihyYyk7Ci19Ci0K LQotCi0vKiAgRiBJIEwgRSBTIEUgTCBFIEMgVCAgLS0gIFNlbGVjdCB0aGlzIGZpbGUgZm9yIHNl bmRpbmcgICovCi0KLWludAotI2lmZGVmIENLX0FOU0lDCi1maWxlc2VsZWN0KAotICAgIGNoYXIg KmYsIGNoYXIgKnNhLCBjaGFyICpzYiwgY2hhciAqc25hLCBjaGFyICpzbmIsCi0gICAgQ0tfT0ZG X1QgbWluc2l6LCBDS19PRkZfVCBtYXhzaXosCi0gICAgaW50IG5idSwgaW50IG54bGlzdCwKLSAg ICBjaGFyICoqIHhsaXN0Ci0pCi0jZWxzZQotZmlsZXNlbGVjdChmLHNhLHNiLHNuYSxzbmIsbWlu c2l6LG1heHNpeixuYnUsbnhsaXN0LHhsaXN0KQotIGNoYXIgKmYsKnNhLCpzYiwqc25hLCpzbmI7 IENLX09GRl9UIG1pbnNpeixtYXhzaXo7Ci0gaW50IG5idSxueGxpc3Q7IGNoYXIgKiogeGxpc3Q7 Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGZpbGVzZWxlY3QgKi8gewotICAgIGNoYXIgKmZk YXRlOwotICAgIGludCBuOwotICAgIENLX09GRl9UIHo7Ci0KLSAgICBkZWJ1ZyhGMTExLCJmaWxl c2VsZWN0IG1pbnNpeiIsY2tmc3RvYShtaW5zaXopLG1pbnNpeik7Ci0gICAgZGVidWcoRjExMSwi ZmlsZXNlbGVjdCBtYXhzaXoiLGNrZnN0b2EobWF4c2l6KSxtYXhzaXopOwotICAgIGRlYnVnKEYx MTEsImZpbGVzZWxlY3QgKENLX09GRl9UKS0xIixja2ZzdG9hKChDS19PRkZfVCktMSksKENLX09G Rl9UKS0xKTsKLQotICAgIGlmICghc2EpIHNhID0gIiI7Ci0gICAgaWYgKCFzYikgc2IgPSAiIjsK LSAgICBpZiAoIXNuYSkgc25hID0gIiI7Ci0gICAgaWYgKCFzbmIpIHNuYiA9ICIiOwotCi0jaWZk ZWYgQ0tTWU1MSU5LCi0jaWZuZGVmIE5PSUNQCi0jaWZuZGVmIE5PWEZFUgotICAgIGlmIChub2xp bmtzKSB7Ci0JQ0tfT0ZGX1Qgeno7Ci0JenogPSB6Z2V0ZnMoZik7Ci0JZGVidWcoRjExMSwiZmls ZXNlbGVjdCBOT0xJTktTIHpnZXRmcyIsZix6eik7Ci0JaWYgKHp6IDwgKENLX09GRl9UKTApCi0J ICByZXR1cm4oMCk7Ci0JZGVidWcoRjExMSwiZmlsZXNlbGVjdCBOT0xJTktTIHpnZnNfbGluayIs Zix6Z2ZzX2xpbmspOwotCWlmICh6Z2ZzX2xpbmspCi0JICByZXR1cm4oMCk7Ci0gICAgfQotI2Vu ZGlmIC8qIE5PWEZFUiAqLwotI2VuZGlmIC8qIE5PSUNQICovCi0jZW5kaWYgLyogQ0tTWU1MSU5L ICovCi0KLSAgICBkZWJ1ZyhGMTEwLCJmaWxlc2VsZWN0IixmLDApOwotICAgIGlmICgqc2EgfHwg KnNiIHx8ICpzbmEgfHwgKnNuYikgewotCWZkYXRlID0gemZjZGF0KGYpOwkJLyogRGF0ZS90aW1l IG9mIHRoaXMgZmlsZSAqLwotCWlmICghZmRhdGUpIGZkYXRlID0gIiI7Ci0JbiA9IHN0cmxlbihm ZGF0ZSk7Ci0JZGVidWcoRjExMSwiZmlsZXNlbGVjdCBmZGF0ZSIsZmRhdGUsbik7Ci0JaWYgKG4g IT0gMTcpCQkJLyogRmFpbGVkIHRvIGdldCBpdCAqLwotCSAgcmV0dXJuKDEpOwotCS8qIC9BRlRF UjogKi8KLQlpZiAoc2FbMF0gJiYgKHN0cmNtcChmZGF0ZSwoY2hhciAqKXNhKSA8PSAwKSkgewot CSAgICBkZWJ1ZyhGMTEwLCJmaWxlc2VsZWN0IHNhIixzYSwwKTsKLQkgICAgLyogdGxvZyhGMTEw LCJTa2lwcGluZyAodG9vIG9sZCkiLGYsMCk7ICovCi0JICAgIHJldHVybigwKTsKLQl9Ci0JLyog L0JFRk9SRTogKi8KLQlpZiAoc2JbMF0gJiYgKHN0cmNtcChmZGF0ZSwoY2hhciAqKXNiKSA+PSAw KSkgewotCSAgICBkZWJ1ZyhGMTEwLCJmaWxlc2VsZWN0IHNiIixzYiwwKTsKLQkgICAgLyogdGxv ZyhGMTEwLCJTa2lwcGluZyAodG9vIG5ldykiLGYsMCk7ICovCi0JICAgIHJldHVybigwKTsKLQl9 Ci0JLyogL05PVC1BRlRFUjogKi8KLQlpZiAoc25hWzBdICYmIChzdHJjbXAoZmRhdGUsKGNoYXIg KilzbmEpID4gMCkpIHsKLQkgICAgZGVidWcoRjExMCwiZmlsZXNlbGVjdCBzbmEiLHNuYSwwKTsK LQkgICAgLyogdGxvZyhGMTEwLCJTa2lwcGluZyAodG9vIG5ldykiLGYsMCk7ICovCi0JICAgIHJl dHVybigwKTsKLQl9Ci0JLyogL05PVC1CRUZPUkU6ICovCi0JaWYgKHNuYlswXSAmJiAoc3RyY21w KGZkYXRlLChjaGFyICopc25iKSA8IDApKSB7Ci0JICAgIGRlYnVnKEYxMTAsImZpbGVzZWxlY3Qg c25iIixzbmIsMCk7Ci0JICAgIC8qIHRsb2coRjExMCwiU2tpcHBpbmcgKHRvbyBvbGQpIixmLDAp OyAqLwotCSAgICByZXR1cm4oMCk7Ci0JfQotICAgIH0KLSAgICAvKiBTbWFsbGVyIG9yIGxhcmdl ciAqLwotICAgIGlmIChtaW5zaXogPiAoQ0tfT0ZGX1QpLTEgfHwgbWF4c2l6ID4gKENLX09GRl9U KS0xKSB7Ci0JeiA9IHpjaGtpKGYpOwkJCS8qIEdldCBzaXplICovCi0JZGVidWcoRjEwMSwiZmls ZXNlbGVjdCBmaWxlc2l6ZSIsIiIseik7Ci0JaWYgKHogPCAoQ0tfT0ZGX1QpMCkKLQkgIHJldHVy bigxKTsKLQlpZiAoKG1pbnNpeiA+IChDS19PRkZfVCktMSkgJiYgKHogPj0gbWluc2l6KSkgewot CSAgICBkZWJ1ZyhGMTExLCJmaWxlc2VsZWN0IG1pbnNpeiBza2lwcGluZyIsZixtaW5zaXopOwot CSAgICAvKiB0bG9nKEYxMTEsIlNraXBwaW5nICh0b28gYmlnKSIsZix6KTsgKi8KLQkgICAgcmV0 dXJuKDApOwotCX0KLQlpZiAoKG1heHNpeiA+IChDS19PRkZfVCktMSkgJiYgKHogPD0gbWF4c2l6 KSkgewotCSAgICBkZWJ1ZyhGMTExLCJmaWxlc2VsZWN0IG1heHNpeiBza2lwcGluZyIsZixtYXhz aXopOwotCSAgICAvKiB0bG9nKEYxMTAsIlNraXBwaW5nICh0b28gc21hbGwpIixmLDApOyAqLwot CSAgICByZXR1cm4oMCk7Ci0JfQotICAgIH0KLSAgICBpZiAobmJ1KSB7CQkJCS8qIFNraXBwaW5n IGJhY2t1cCBmaWxlcz8gKi8KLQlpZiAoY2ttYXRjaCgKLSNpZmRlZiBDS1JFR0VYCi0JCSAgICAi Ki5+WzAtOV0qfiIJLyogTm90IHBlcmZlY3QgYnV0IGNsb3NlIGVub3VnaC4gKi8KLSNlbHNlCi0J CSAgICAiKi5+Kn4iCQkvKiBMZXNzIGNsb3NlLiAqLwotI2VuZGlmIC8qIENLUkVHRVggKi8KLQkJ ICAgICxmLGZpbGVjYXNlLDEpKSB7Ci0JICAgIGRlYnVnKEYxMTAsImZpbGVzZWxlY3Qgc2tpcHBp bmcgYmFja3VwIixmLDApOwotCSAgICByZXR1cm4oMCk7Ci0JfQotICAgIH0KLSAgICBmb3IgKG4g PSAwOyB4bGlzdCAmJiBuIDwgbnhsaXN0OyBuKyspIHsKLQlpZiAoIXhsaXN0W25dKSB7Ci0JICAg IGRlYnVnKEYxMDEsImZpbGVzZWxlY3QgeGxpc3QgZW1wdHkiLDAsbik7Ci0JICAgIGJyZWFrOwot CX0KLQlpZiAoY2ttYXRjaCh4bGlzdFtuXSxmLGZpbGVjYXNlLDEpKSB7Ci0JICAgIGRlYnVnKEYx MTEsImZpbGVzZWxlY3QgeGxpc3QiLHhsaXN0W25dLG4pOwotCSAgICBkZWJ1ZyhGMTEwLCJmaWxl c2VsZWN0IHNraXBwaW5nIixmLDApOwotCSAgICByZXR1cm4oMCk7Ci0JfQotICAgIH0KLSAgICBp ZiAoeGZpbGV0eXBlID4gLTEpIHsKLQluID0gc2NhbmZpbGUoZixOVUxMLG5zY2FuZmlsZSk7Ci0J aWYgKG4gPCAwKSB7Ci0JICAgIG4gPSBiaW5hcnkgPyAxIDogMDsKLQl9IGVsc2UgewotCSAgICBu ID0gKG4gPT0gRlRfQklOKSA/IDEgOiAwOwotCX0KLQlpZiAobiAhPSB4ZmlsZXR5cGUpCi0JICBy ZXR1cm4oMCk7Ci0gICAgfQotICAgIGRlYnVnKEYxMTAsImZpbGVzZWxlY3Qgc2VsZWN0aW5nIixm LDApOwotICAgIHJldHVybigxKTsKLX0KLQotCi0jaWZkZWYgVENQU09DS0VUCi0jaWZkZWYgTlQK LWV4dGVybiBpbnQgV1NBU2FmZVRvQ2FuY2VsOwotI2VuZGlmIC8qIE5UICovCi0jZW5kaWYgLyog VENQU09DS0VUICovCi0KLVZPSUQKLXNldGZsb3coKSB7Ci0gICAgZXh0ZXJuIGludCBmbG93LCBh dXRvZmxvdywgbWRtdHlwLCBjeHR5cGUsIGN4Zmxvd1tdOwotI2lmbmRlZiBOT0RJQUwKLSAgICBl eHRlcm4gaW50IGRpYWxjYXBhcywgZGlhbGZjOwotICAgIGV4dGVybiBNRE1JTkYgKiBtb2RlbXBb XTsKLSAgICBNRE1JTkYgKiBwID0gTlVMTDsKLSAgICBsb25nIGJpdHMgPSAwOwotI2VuZGlmIC8q IE5PRElBTCAqLwotCi0gICAgZGVidWcoRjEwMSwic2V0ZmxvdyBhdXRvZmxvdyIsIiIsYXV0b2Zs b3cpOwotCi0vKiAjaWZkZWYgQ09NTUVOVCAqLwotLyogV0hZIFdBUyBUSElTIENPTU1FTlRFRCBP VVQ/ICovCi0gICAgaWYgKCFhdXRvZmxvdykgICAgICAgICAgICAgICAgICAgICAgLyogT25seSBp ZiBGTE9XIGlzIEFVVE8gKi8KLSAgICAgIHJldHVybjsKLS8qICNlbmRpZiAqLyAvKiBDT01NRU5U ICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJzZXRmbG93IGxvY2FsIiwiIixsb2NhbCk7Ci0gICAgZGVi dWcoRjEwMSwic2V0ZmxvdyBuZXR3b3JrIiwiIixuZXR3b3JrKTsKLSAgICBkZWJ1ZyhGMTAxLCJz ZXRmbG93IGN4dHlwZSIsIiIsY3h0eXBlKTsKLQotI2lmZGVmIFROX0NPTVBPUlQKLSAgICBpZiAo bmV0d29yayAmJiBpc3RuY29tcG9ydCgpKSB7Ci0JZmxvdyA9IGN4Zmxvd1tDWFRfTU9ERU1dOwot ICAgICAgICBkZWJ1ZyhGMTAxLCJzZXRmbG93IFROX0NPTVBPUlQgZmxvdyIsIiIsZmxvdyk7Ci0g ICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYgLyogVE5fQ09NUE9SVCAqLwotCi0gICAgaWYg KG5ldHdvcmsgfHwgIWxvY2FsIHx8IGN4dHlwZSA9PSBDWFRfRElSRUNUKSB7Ci0gICAgICAgIGZs b3cgPSBjeGZsb3dbY3h0eXBlXTsgICAgICAgICAgLyogU2V0IGFwcHJvcHJpYXRlIGZsb3cgY29u dHJvbCAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJzZXRmbG93IGZsb3ciLCIiLGZsb3cpOwotICAg ICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChjeHR5cGUgIT0gQ1hUX01PREVNKSAgICAgICAg ICAgIC8qIENvbm5lY3Rpb24gdHlwZSBzaG91bGQgYmUgbW9kZW0gKi8KLSAgICAgIHJldHVybjsK LQotI2lmbmRlZiBOT0RJQUwKLSAgICBiaXRzID0gZGlhbGNhcGFzOyAgICAgICAgICAgICAgICAg ICAvKiBDYXBhYmlsaXR5IGJpdHMgKi8KLSAgICBpZiAoIWJpdHMpIHsgICAgICAgICAgICAgICAg ICAgICAgICAvKiBObyBiaXRzPyAqLwotICAgICAgICBwID0gbW9kZW1wW21kbXR5cF07ICAgICAg ICAgICAgIC8qIExvb2sgaW4gbW9kZW0gaW5mbyBzdHJ1Y3R1cmUgKi8KLSAgICAgICAgaWYgKHAp Ci0gICAgICAgICAgYml0cyA9IHAtPmNhcGFzOwotICAgIH0KLSAgICBpZiAoZGlhbGZjID09IEZM T19BVVRPKSB7ICAgICAgICAgICAvKiBJZiBESUFMIGZsb3cgaXMgQVVUTyAqLwotI2lmZGVmIENL X1JUU0NUUyAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHdlIGNhbiBkbyBSVFMvQ1RTIGZs b3cgY29udHJvbCAqLwotICAgICAgICBpZiAoYml0cyAmIENLRF9IVykgICAgICAgICAgICAgIC8q IGFuZCBtb2RlbSBjYW4gZG8gaXQgdG9vICovCi0gICAgICAgICAgZmxvdyA9IEZMT19SVFNDOyAg ICAgICAgICAgICAgLyogdGhlbiBzd2l0Y2ggdG8gUlRTL0NUUyAqLwotICAgICAgICBlbHNlICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG90aGVyd2lzZSAqLwotICAgICAgICAgIGZsb3cg PSBGTE9fWE9OWDsgICAgICAgICAgICAgIC8qIHVzZSBYb24vWG9mZi4gKi8KLSNlbHNlCi0jaWZu ZGVmIE5FWFQKLSNpZm5kZWYgSVJJWAotICAgICAgICBmbG93ID0gRkxPX1hPTlg7ICAgICAgICAg ICAgICAgIC8qIFVzZSBYb24vWG9mZi4gKi8KLSNlbmRpZiAvKiBJUklYICovCi0jZW5kaWYgLyog TkVYVCAqLwotI2VuZGlmIC8qIENLX1JUU0NUUyAqLwotICAgIH0KLSNlbmRpZiAvKiBOT0RJQUwg Ki8KLSAgICBkZWJ1ZyhGMTAxLCJzZXRmbG93IG1vZGVtIGZsb3ciLCIiLGZsb3cpOwotICAgIHJl dHVybjsKLX0KLQotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgQ0tfVFJJR0dFUgotCi0vKiAgQSBV IFQgTyBFIFggSSBUIEMgSCBLICAtLSAgQ2hlY2sgZm9yIENPTk5FQ1QtbW9kZSB0cmlnZ2VyIHN0 cmluZyAgKi8KLS8qCi0gIFJldHVybnMgLTEgaWYgdHJpZ2dlciBub3QgZm91bmQsIG9yIGVsc2Ug dGhlIHRyaWdnZXIgaW5kZXgsIDAgb3IgZ3JlYXRlci4KLSAgKFJlcGxhY2Ugd2l0aCBmYW5jaWVy IGFuZCBtb3JlIGVmZmljaWVudCBtYXRjaGVyIGxhdGVyLi4uKQotICBOT1RFOiB0byBwcmV2ZW50 IHVubmVjZXNzYXJ5IGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQsIGNhbGwgdGhpcyB3YXk6Ci0KLSAg ICB4ID0gdHRfdHJpZ2dlclswXSA/IGF1dG9leGl0Y2hrKGMpIDogLTE7Ci0KLSovCi1pbnQKLSNp ZmRlZiBDS19BTlNJQwotYXV0b2V4aXRjaGsoQ0hBUiBjKQotI2Vsc2UKLWF1dG9leGl0Y2hrKGMp IENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogYXV0b2V4aXRjaGsgKi8gewotICAg IGV4dGVybiBDSEFSICogdHRfdHJtYXRjaFtdOwotICAgIGV4dGVybiBjaGFyICogdHRfdHJpZ2dl cltdOwotICAgIGludCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBUUklHR0VSUzsgaSsrKSB7Ci0g ICAgICAgIGlmICghdHRfdHJpZ2dlcltpXSkgeyAgICAgICAgICAgLyogTm8gbW9yZSB0cmlnZ2Vy cyBpbiBsaXN0ICovCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSBlbHNlIGlmICgqdHRf dHJpZ2dlcltpXSkgewotICAgICAgICAgICAgaWYgKCF0dF90cm1hdGNoW2ldKSAgICAgICAgIC8q IEp1c3Qgc3RhcnRpbmc/ICovCi0gICAgICAgICAgICAgIHR0X3RybWF0Y2hbaV0gPSAoQ0hBUiAq KXR0X3RyaWdnZXJbaV07IC8qIFNldCBtYXRjaCBwb2ludGVyICovCi0gICAgICAgICAgICBpZiAo YyA9PSAqdHRfdHJtYXRjaFtpXSkgeyAgLyogQ29tcGFyZSB0aGlzIGNoYXJhY3RlciAqLwotICAg ICAgICAgICAgICAgIHR0X3RybWF0Y2hbaV0rKzsgICAgICAgIC8qIEl0IG1hdGNoZXMgKi8KLSAg ICAgICAgICAgICAgICBpZiAoISp0dF90cm1hdGNoW2ldKSB7ICAvKiBFbmQgb2YgbWF0Y2ggc3Ry aW5nPyAqLwotICAgICAgICAgICAgICAgICAgICB0dF90cm1hdGNoW2ldID0gKENIQVIgKikgdHRf dHJpZ2dlcltpXTsgLyogWWVzLCByZXdpbmQsICovCi0gICAgICAgICAgICAgICAgICAgIGRlYnVn KEYxMDEsImF1dG9leGl0Y2hrIix0dF90cmlnZ2VyW2ldLGkpOyAvKiBsb2csICovCi0gICAgICAg ICAgICAgICAgICAgIHJldHVybihpKTsgICAgICAgICAgLyogYW5kIHJldHVybiBzdWNjZXNzICov Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlICAgICAgICAgICAgICAgICAg ICAgIC8qIE5vIG1hdGNoICovCi0gICAgICAgICAgICAgIHR0X3RybWF0Y2hbaV0gPSAoQ0hBUiAq KSB0dF90cmlnZ2VyW2ldOyAvKiBSZXdpbmQgbWF0Y2ggc3RyaW5nICovCi0gICAgICAgIH0gLyog YW5kIGdvIG9uIHRoZSBuZXh0IG1hdGNoIHN0cmluZyAqLwotICAgIH0KLSAgICByZXR1cm4oLTEp OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBtYXRjaCBmb3VuZCAqLwotfQotI2VuZGlm IC8qIENLX1RSSUdHRVIgKi8KLQotI2lmbmRlZiBOT1NIT1cKLS8qICBTIEggTyBNIEQgTSAgLS0g IFNob3cgbW9kZW0gc2lnbmFscyAgKi8KLQotVk9JRAotc2hvbWRtKCkgewotLyoKLSAgTm90ZSB1 c2Ugb2YgIlxyXG4iIHRvIG1ha2Ugc3VyZSB0aGlzIHJlcG9ydCBwcmludHMgcmlnaHQsIGV2ZW4g d2hlbgotICBjYWxsZWQgZHVyaW5nIENPTk5FQ1QgbW9kZS4KLSovCi0gICAgaW50IHk7Ci0gICAg eSA9IHR0Z21kbSgpOwotICAgIHN3aXRjaCAoeSkgewotICAgICAgY2FzZSAtMzogcHJpbnRmKAot ICAgICAgICAgICAgICAgICAiTW9kZW0gc2lnbmFscyB1bmF2YWlsYWJsZSBpbiB0aGlzIHZlcnNp b24gb2YgS2VybWl0XHJcbiIpOwotICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIC0y OiBwcmludGYoIk5vIG1vZGVtIGNvbnRyb2wgZm9yIHRoaXMgZGV2aWNlXHJcbiIpOyBicmVhazsK LSAgICAgIGNhc2UgLTE6IHByaW50ZigiTW9kZW0gc2lnbmFscyB1bmF2YWlsYWJsZVxyXG4iKTsg YnJlYWs7Ci0gICAgICBkZWZhdWx0OgotI2lmbmRlZiBNQUMKLSAgICAgICAgcHJpbnRmKAotICAg ICAgICAgICIgQ2FycmllciBEZXRlY3QgICAgICAoQ0QpOiAgJXNcclxuIiwoeSAmIEJNX0RDRCkg PyAiT24iOiAiT2ZmIik7Ci0gICAgICAgIHByaW50ZigKLSAgICAgICAgICAiIERhdGFzZXQgUmVh ZHkgICAgICAgKERTUik6ICVzXHJcbiIsKHkgJiBCTV9EU1IpID8gIk9uIjogIk9mZiIpOwotI2Vu ZGlmIC8qIE1BQyAqLwotICAgICAgICBwcmludGYoCi0gICAgICAgICAgIiBDbGVhciBUbyBTZW5k ICAgICAgIChDVFMpOiAlc1xyXG4iLCh5ICYgQk1fQ1RTKSA/ICJPbiI6ICJPZmYiKTsKLSNpZm5k ZWYgU1RSQVRVUwotI2lmbmRlZiBNQUMKLSAgICAgICAgcHJpbnRmKAotICAgICAgICAgICIgUmlu ZyBJbmRpY2F0b3IgICAgICAoUkkpOiAgJXNcclxuIiwoeSAmIEJNX1JORykgPyAiT24iOiAiT2Zm Iik7Ci0jZW5kaWYgLyogTUFDICovCi0gICAgICAgIHByaW50ZigKLSAgICAgICAgICAiIERhdGEg VGVybWluYWwgUmVhZHkgKERUUik6ICVzXHJcbiIsCi0jaWZkZWYgTlQKLSAgICAgICAgICAiKHVu a25vd24pIgotI2Vsc2UgLyogTlQgKi8KLSAgICAgICAgICAoeSAmIEJNX0RUUikgPyAiT24iOiAi T2ZmIgotI2VuZGlmIC8qIE5UICovCi0gICAgICAgICAgKTsKLSNpZm5kZWYgTUFDCi0gICAgICAg IHByaW50ZigKLSAgICAgICAgICAiIFJlcXVlc3QgVG8gU2VuZCAgICAgKFJUUyk6ICVzXHJcbiIs Ci0jaWZkZWYgTlQKLSAgICAgICAgICAiKHVua25vd24pIgotI2Vsc2UgLyogTlQgKi8KLSAgICAg ICAgICAoeSAmIEJNX1JUUykgPyAiT24iOiAiT2ZmIgotI2VuZGlmIC8qIE5UICovCi0gICAgICAg ICAgKTsKLSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBTVFJBVFVTICovCi0gICAgfQotI2lm ZGVmIEJFVEFERUJVRwotI2lmZGVmIENLX1RBUEkKLSAgICBpZiAodHR0YXBpICYmICF0YXBpcGFz cykgewotICAgICAgICBMUERFVkNGRyAgICAgICAgbHBEZXZDZmcgPSBOVUxMOwotICAgICAgICBM UENPTU1DT05GSUcgICAgbHBDb21tQ29uZmlnID0gTlVMTDsKLSAgICAgICAgTFBNT0RFTVNFVFRJ TkdTIGxwTW9kZW1TZXR0aW5ncyA9IE5VTEw7Ci0gICAgICAgIERDQiAqICAgICAgICAgICBscERD QiA9IE5VTEw7Ci0KLSAgICAgICAgaWYgKGNrdGFwaUdldE1vZGVtU2V0dGluZ3MoJmxwRGV2Q2Zn LCZscE1vZGVtU2V0dGluZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm bHBDb21tQ29uZmlnLCZscERDQikpIHsKLSAgICAgICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAg ICAgICAgIGNrdGFwaURpc3BsYXlNb2RlbVNldHRpbmdzKGxwRGV2Q2ZnLGxwTW9kZW1TZXR0aW5n cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwQ29tbUNvbmZpZyxs cERDQik7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogQ0tfVEFQSSAqLwotI2VuZGlmIC8q IEJFVEFERUJVRyAqLwotfQotI2VuZGlmIC8qIE5PU0hPVyAqLwotI2VuZGlmIC8qIE5PTE9DQUwg Ki8KLQotI2lmbmRlZiBOT1hGRVIKLS8qICBTIEQgRSBCIFUgIC0tIFJlY29yZCBzcGFyIHJlc3Vs dHMgaW4gZGVidWdnaW5nIGxvZyAgKi8KLQotVk9JRAotc2RlYnUobGVuKSBpbnQgbGVuOyB7Ci0g ICAgZGVidWcoRjExMSwic3BhcjogZGF0YSIsKGNoYXIgKikgcmRhdGFwLGxlbik7Ci0gICAgZGVi dWcoRjEwMSwiIHNwc2l6ICIsIiIsIHNwc2l6KTsKLSAgICBkZWJ1ZyhGMTAxLCIgdGltaW50Iiwi Iix0aW1pbnQpOwotICAgIGRlYnVnKEYxMDEsIiBucGFkICAiLCIiLCAgbnBhZCk7Ci0gICAgZGVi dWcoRjEwMSwiIHBhZGNoICIsIiIsIHBhZGNoKTsKLSAgICBkZWJ1ZyhGMTAxLCIgc2VvbCAgIiwi IiwgIHNlb2wpOwotICAgIGRlYnVnKEYxMDEsIiBjdGxxICAiLCIiLCAgY3RscSk7Ci0gICAgZGVi dWcoRjEwMSwiIGVicSAgICIsIiIsICAgZWJxKTsKLSAgICBkZWJ1ZyhGMTAxLCIgZWJxZmxnIiwi IixlYnFmbGcpOwotICAgIGRlYnVnKEYxMDEsIiBiY3RyICAiLCIiLCAgYmN0cik7Ci0gICAgZGVi dWcoRjEwMSwiIHJwdHEgICIsIiIsICBycHRxKTsKLSAgICBkZWJ1ZyhGMTAxLCIgcnB0ZmxnIiwi IixycHRmbGcpOwotICAgIGRlYnVnKEYxMDEsIiBsc2NhcHUiLCIiLGxzY2FwdSk7Ci0gICAgZGVi dWcoRjEwMSwiIGF0Y2FwdSIsIiIsYXRjYXB1KTsKLSAgICBkZWJ1ZyhGMTAxLCIgbHBjYXB1Iiwi IixscGNhcHUpOwotICAgIGRlYnVnKEYxMDEsIiBzd2NhcHUiLCIiLHN3Y2FwdSk7Ci0gICAgZGVi dWcoRjEwMSwiIHdzbG90biIsIiIsIHdzbG90bik7Ci0gICAgZGVidWcoRjEwMSwiIHdoYXRydSIs IiIsIHdoYXRydSk7Ci19Ci0vKiAgUiBEIEUgQiBVIC0tIERlYnVnZ2luZyBkaXNwbGF5IG9mIHJw YXIoKSB2YWx1ZXMgICovCi0KLVZPSUQKLXJkZWJ1KGQsbGVuKSBDSEFSICpkOyBpbnQgbGVuOyB7 Ci0gICAgZGVidWcoRjExMSwicnBhcjogZGF0YSIsZCxsZW4pOwotICAgIGRlYnVnKEYxMDEsIiBy cHNpeiAiLCIiLCB4dW5jaGFyKGRbMF0pKTsKLSAgICBkZWJ1ZyhGMTAxLCIgcnRpbW8gIiwiIiwg cnRpbW8pOwotICAgIGRlYnVnKEYxMDEsIiBteXBhZG4iLCIiLG15cGFkbik7Ci0gICAgZGVidWco RjEwMSwiIG15cGFkYyIsIiIsbXlwYWRjKTsKLSAgICBkZWJ1ZyhGMTAxLCIgZW9sICAgIiwiIiwg ICBlb2wpOwotICAgIGRlYnVnKEYxMDEsIiBjdGxxICAiLCIiLCAgY3RscSk7Ci0gICAgZGVidWco RjEwMSwiIHNxICAgICIsIiIsICAgIHNxKTsKLSAgICBkZWJ1ZyhGMTAxLCIgZWJxICAgIiwiIiwg ICBlYnEpOwotICAgIGRlYnVnKEYxMDEsIiBlYnFmbGciLCIiLGVicWZsZyk7Ci0gICAgZGVidWco RjEwMSwiIGJjdHIgICIsIiIsICBiY3RyKTsKLSAgICBkZWJ1ZyhGMTAxLCIgcnB0cSAgIiwiIiwg IGRbOF0pOwotICAgIGRlYnVnKEYxMDEsIiBycHRmbGciLCIiLHJwdGZsZyk7Ci0gICAgZGVidWco RjEwMSwiIGNhcGFzICIsIiIsIGNhcGFzKTsKLSAgICBkZWJ1ZyhGMTAxLCIgYml0cyAgIiwiIixk W2NhcGFzXSk7Ci0gICAgZGVidWcoRjEwMSwiIGxzY2FwdSIsIiIsbHNjYXB1KTsKLSAgICBkZWJ1 ZyhGMTAxLCIgYXRjYXB1IiwiIixhdGNhcHUpOwotICAgIGRlYnVnKEYxMDEsIiBscGNhcHUiLCIi LGxwY2FwdSk7Ci0gICAgZGVidWcoRjEwMSwiIHN3Y2FwdSIsIiIsc3djYXB1KTsKLSAgICBkZWJ1 ZyhGMTAxLCIgd3Nsb3RyIiwiIiwgd3Nsb3RyKTsKLSAgICBkZWJ1ZyhGMTAxLCIgcnBzaXooZXh0 ZW5kZWQpIiwiIixycHNpeik7Ci19Ci0KLSNpZmRlZiBDT01NRU5UCi0vKiAgQyBIIEsgRSBSIFIg IC0tICBEZWNpZGUgd2hldGhlciB0byBleGl0IHVwb24gYSBwcm90b2NvbCBlcnJvciAgKi8KLQot Vk9JRAotY2hrZXJyKCkgewotICAgIGlmIChiYWNrZ3JkICYmICFzZXJ2ZXIpIGZhdGFsKCJQcm90 b2NvbCBlcnJvciIpOwotfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNlbmRpZiAvKiBOT1hGRVIg Ki8KLQotLyogIEYgQSBUIEEgTCAgLS0gIEZhdGFsIGVycm9yIG1lc3NhZ2UgKi8KLQotVk9JRAot ZmF0YWwobXNnKSBjaGFyICptc2c7IHsKLSAgICBleHRlcm4gaW50IGluaXRmbGc7Ci0gICAgc3Rh dGljIGludCBpbml0aW5nID0gMDsKLSAgICBpZiAoIW1zZykgbXNnID0gIiI7Ci0gICAgZGVidWco RjExMSwiZmF0YWwiLG1zZyxpbml0ZmxnKTsKLQotICAgIGlmICghaW5pdGZsZykgewkJCS8qIElm IGNhbGxlZCBmcm9tIHByZXNjYW4gKi8KLQlpZiAoaW5pdGluZykJCQkvKiBvciBjYWxsZWQgZnJv bSBzeXNpbml0KCkgKi8KLSAgICAgICAgICBleGl0KDI1Myk7Ci0JaW5pdGluZyA9IDE7Ci0Jc3lz aW5pdCgpOwotICAgIH0KLQotICAgIGRlYnVnKEYxMTEsImZhdGFsIixtc2cseGl0c3RhKTsKLSAg ICB0bG9nKEYxMTAsIkZhdGFsOiIsbXNnLDBMKTsKLSNpZmRlZiBWTVMKLSAgICBpZiAoc3RybmNt cChtc2csIiVDS0VSTUlUIiw4KSkKLSAgICAgIGNvbm9sKCIlQ0tFUk1JVC1FLUZBVEFMLCAiKTsK LSAgICBjb25vbGwobXNnKTsKLSNlbHNlIC8qICFWTVMgKi8KLSAgICBjb25vbGwobXNnKTsKLSNl bmRpZiAvKiBWTVMgKi8KLSNpZmRlZiBPUzIKLSNpZm5kZWYgTk9YRkVSCi0gICAgaWYgKHhmcmJl bCkgewotICAgICAgICBibGVlcChCUF9GQUlMKTsKLSAgICAgICAgc2xlZXAoMSk7Ci0gICAgICAg IGJsZWVwKEJQX0ZBSUwpOwotICAgIH0KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2VuZGlmIC8q IE9TMiAqLwotICAgIGRvZXhpdChCQURfRVhJVCx4aXRzdGEgfCAxKTsgICAgICAgIC8qIEV4aXQg aW5kaWNhdGluZyBmYWlsdXJlICovCi19Ci0KLSNpZm5kZWYgTk9YRkVSCi0vKiAgQiBMIEQgTCBF IE4gIC0tICBNYWtlIGxlbmd0aC1lbmNvZGVkIGNvcHkgb2Ygc3RyaW5nICAqLwotCi1jaGFyICoK LWJsZGxlbihzdHIsZGVzdCkgY2hhciAqc3RyLCAqZGVzdDsgewotICAgIGludCBsZW47Ci0gICAg bGVuID0gKGludClzdHJsZW4oc3RyKTsKLSAgICBpZiAobGVuID4gOTQpCi0gICAgICAqZGVzdCA9 IFNQOwotICAgIGVsc2UKLSAgICAgICpkZXN0ID0gKGNoYXIpIHRvY2hhcihsZW4pOwotICAgIHN0 cmNweShkZXN0KzEsc3RyKTsJCQkvKiBDaGVja2VkIGJlbG93IGluIHNldGdlbigpICovCi0gICAg cmV0dXJuKGRlc3QrbGVuKzEpOwotfQotCi0KLS8qICBTIEUgVCBHIEUgTiAgLS0gIENvbnN0cnVj dCBhIGdlbmVyaWMgY29tbWFuZCAgKi8KLS8qCi0gIENhbGwgd2l0aCBHZW5lcmljIGNvbW1hbmQg Y2hhcmFjdGVyIGZvbGxvd2VkIGJ5IHRocmVlIHN0cmluZyBhcmd1bWVudHMuCi0gIFRyYWlsaW5n IHN0cmluZ3MgYXJlIGFsbG93ZWQgdG8gYmUgZW1wdHkgKCIiKS4gIEVhY2ggc3RyaW5nIGV4Y2Vw dCB0aGUgbGFzdAotICBub24tZW1wdHkgc3RyaW5nIG11c3QgYmUgbGVzcyB0aGFuIDk1IGNoYXJh Y3RlcnMgbG9uZy4gIFRoZSBmaW5hbCBub25lbXB0eQotICBzdHJpbmcgaXMgYWxsb3dlZCB0byBi ZSBsb25nZXIuCi0qLwotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi1zZXRnZW4oY2hhciB0eXBlLCBj aGFyICogYXJnMSwgY2hhciAqIGFyZzIsIGNoYXIgKiBhcmczKQotI2Vsc2UKLXNldGdlbih0eXBl LGFyZzEsYXJnMixhcmczKSBjaGFyIHR5cGUsICphcmcxLCAqYXJnMiwgKmFyZzM7Ci0jZW5kaWYg LyogQ0tfQU5TSUMgKi8KLS8qIHNldGdlbiAqLyB7Ci0gICAgY2hhciAqdXBzdHIsICpjcDsKLSNp ZmRlZiBEWU5BTUlDCi0gICAgaWYgKCFjbWRzdHIpCi0gICAgICBpZiAoIShjbWRzdHIgPSBtYWxs b2MoTUFYU1AgKyAxKSkpCi0gICAgICAgIGZhdGFsKCJzZXRnZW46IGNhbid0IGFsbG9jYXRlIG1l bW9yeSIpOwotI2VuZGlmIC8qIERZTkFNSUMgKi8KLQotICAgIGNwID0gY21kc3RyOwotICAgICpj cCsrID0gdHlwZTsKLSAgICAqY3AgPSBOVUw7Ci0gICAgaWYgKCFhcmcxKSBhcmcxID0gIiI7Ci0g ICAgaWYgKCFhcmcyKSBhcmcyID0gIiI7Ci0gICAgaWYgKCFhcmczKSBhcmczID0gIiI7Ci0gICAg aWYgKCgoaW50KXN0cmxlbihhcmcxKSsoaW50KXN0cmxlbihhcmcyKSsoaW50KXN0cmxlbihhcmcz KSs0KSA8IE1BWFNQKSB7Ci0JaWYgKCphcmcxICE9IE5VTCkgewotCSAgICB1cHN0ciA9IGJsZGxl bihhcmcxLGNwKTsKLQkgICAgaWYgKCphcmcyICE9IE5VTCkgewotCQl1cHN0ciA9IGJsZGxlbihh cmcyLHVwc3RyKTsKLQkJaWYgKCphcmczICE9IE5VTCkgYmxkbGVuKGFyZzMsdXBzdHIpOwotCSAg ICB9Ci0JfQotCWNtYXJnID0gY21kc3RyOwotCWRlYnVnKEYxMTAsInNldGdlbiIsY21hcmcsMCk7 Ci0JcmV0dXJuKCdnJyk7Ci0gICAgfQotICAgIHJldHVybignRScpOwotfQotI2VuZGlmIC8qIE5P WEZFUiAqLwotCi0jaWZuZGVmIE5PTVNFTkQKLXN0YXRpYyBjaGFyICptZ2J1ZnAgPSBOVUxMOwot Ci0vKiAgRiBOIFAgQSBSIFMgRSAgLS0gICovCi0KLS8qCi0gIEFyZ3VtZW50IGlzIGEgY2hhcmFj dGVyIHN0cmluZyBjb250YWluaW5nIG9uZSBvciBtb3JlIGZpbGVzcGVjcy4KLSAgVGhpcyBmdW5j dGlvbiBicmVha3MgdGhlIHN0cmluZyBhcGFydCBpbnRvIGFuIGFycmF5IG9mIHBvaW50ZXJzLCBv bmUKLSAgdG8gZWFjaCBmaWxlc3BlYywgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBmaWxlc3Bl Y3MuICBVc2VkIGJ5IHNlcnZlcgotICB3aGVuIGl0IHJlY2VpdmVzIGEgR0VUIGNvbW1hbmQgdG8g YWxsb3cgaXQgdG8gcHJvY2VzcyBtdWx0aXBsZSBmaWxlCi0gIHNwZWNpZmljYXRpb25zIGluIG9u ZSB0cmFuc2FjdGlvbi4gIFNldHMgY21saXN0IHRvIHBvaW50IHRvIGEgbGlzdCBvZgotICBmaWxl IHBvaW50ZXJzLCBleGFjdGx5IGFzIGlmIHRoZXkgd2VyZSBjb21tYW5kIGxpbmUgYXJndW1lbnRz LgotCi0gIFRoaXMgdmVyc2lvbiBvZiBmbnBhcnNlIHRyZWF0cyBzcGFjZXMgYXMgZmlsZW5hbWUg c2VwYXJhdG9ycy4gIElmIHlvdXIKLSAgb3BlcmF0aW5nIHN5c3RlbSBhbGxvd3Mgc3BhY2VzIGlu IGZpbGVuYW1lcywgeW91J2xsIG5lZWQgYSBkaWZmZXJlbnQKLSAgc2VwYXJhdG9yLgotCi0gIFRo aXMgdmVyc2lvbiBvZiBmbnBhcnNlIG1hbGxvY3MgYSBzdHJpbmcgYnVmZmVyIHRvIGNvbnRhaW4g dGhlIG5hbWVzLiAgSXQKLSAgY2Fubm90IGFzc3VtZSB0aGF0IHRoZSBzdHJpbmcgdGhhdCBpcyBw b2ludGVkIHRvIGJ5IHRoZSBhcmd1bWVudCBpcyBzYWZlLgotKi8KLWludAotZm5wYXJzZShzdHJp bmcpIGNoYXIgKnN0cmluZzsgewotICAgIGNoYXIgKnAsICpzLCAqcTsKLSAgICBpbnQgciA9IDAs IHg7ICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gY29kZSAqLwotI2lmZGVmIFJFQ1VS U0lWRQotICAgIGRlYnVnKEYxMTEsImZucGFyc2UiLHN0cmluZyxyZWN1cnNpdmUpOwotI2VuZGlm IC8qIFJFQ1VSU0lWRSAqLwotCi0gICAgaWYgKG1nYnVmcCkgZnJlZShtZ2J1ZnApOyAgICAgICAg ICAgLyogRnJlZSB0aGlzIGZyb20gbGFzdCB0aW1lLiAqLwotICAgIG1nYnVmcCA9IG1hbGxvYygo aW50KXN0cmxlbihzdHJpbmcpKzIpOwotICAgIGlmICghbWdidWZwKSB7Ci0gICAgICAgIGRlYnVn KEYxMDAsImZucGFyc2UgbWFsbG9jIGVycm9yIiwiIiwwKTsKLSAgICAgICAgcmV0dXJuKDApOwot ICAgIH0KLSNpZm5kZWYgTk9JQ1AKLSNpZm5kZWYgTk9TUEwKLSAgICBja3N0cm5jcHkoZnNwZWMs c3RyaW5nLGZzcGVjbGVuKTsgICAvKiBNYWtlIGNvcHkgZm9yIFx2KGZpbGVzcGVjKSAqLwotI2Vu ZGlmIC8qIE5PU1BMICovCi0jZW5kaWYgLyogTk9JQ1AgKi8KLSAgICBzID0gc3RyaW5nOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBJbnB1dCBzdHJpbmcgKi8KLSAgICBwID0gcSA9IG1nYnVm cDsgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byB0aGUgY29weSAqLwotICAgIHIgPSAw OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgb3VyIHJldHVybiBj b2RlICovCi0gICAgd2hpbGUgKCpzID09IFNQIHx8ICpzID09IEhUKSAgICAgICAgLyogU2tpcCBs ZWFkaW5nIHNwYWNlcyBhbmQgdGFicyAqLwotICAgICAgcysrOwotICAgIGZvciAoeCA9IHN0cmxl bihzKTsgICAgICAgICAgICAgICAgIC8qIFN0cmlwIHRyYWlsaW5nIHNwYWNlcyAqLwotICAgICAg ICAgKHggPiAxKSAmJiAoc1t4LTFdID09IFNQIHx8IHNbeC0xXSA9PSBIVCk7Ci0gICAgICAgICB4 LS0pCi0gICAgICBzW3gtMV0gPSBOVUw7Ci0gICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAgICAg ICAgICAgICAgLyogTG9vcCB0aHJvdWdoIHJlc3Qgb2Ygc3RyaW5nICovCi0gICAgICAgIGlmICgq cyA9PSBDTURRKSB7ICAgICAgICAgICAgICAgLyogQmFja3NsYXNoIChxdW90ZSBjaGFyYWN0ZXIp PyAqLwotICAgICAgICAgICAgaWYgKCh4ID0geHhlc2MoJnMpKSA+IC0xKSB7IC8qIEdvIGludGVy cHJldCBpdC4gKi8KLSAgICAgICAgICAgICAgICAqcSsrID0gKGNoYXIpIHg7ICAgICAgICAvKiBO dW1lcmljIGJhY2tzbGFzaCBjb2RlLCBvayAqLwotICAgICAgICAgICAgfSBlbHNlIHsgICAgICAg ICAgICAgICAgICAgIC8qIEp1c3QgbGV0IGl0IHF1b3RlIG5leHQgY2hhciAqLwotICAgICAgICAg ICAgICAgIHMrKzsgICAgICAgICAgICAgICAgICAgIC8qIGdldCBwYXN0IHRoZSBiYWNrc2xhc2gg Ki8KLSAgICAgICAgICAgICAgICAqcSsrID0gKnMrKzsgICAgICAgICAgICAvKiBkZXBvc2l0IG5l eHQgY2hhciAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg IH0gZWxzZSBpZiAoKnMgPT0gU1AgfHwgKnMgPT0gTlVMKSB7IC8qIFVucXVvdGVkIHNwYWNlIG9y IE5VTD8gKi8KLSAgICAgICAgICAgICpxKysgPSBOVUw7ICAgICAgICAgICAgICAgICAvKiBFbmQg b2Ygb3V0cHV0IGZpbGVuYW1lLiAqLwotICAgICAgICAgICAgbXNmaWxlc1tyXSA9IHA7ICAgICAg ICAgICAgIC8qIEFkZCB0aGlzIGZpbGVuYW1lIHRvIHRoZSBsaXN0ICovCi0gICAgICAgICAgICBk ZWJ1ZyhGMTExLCJmbnBhcnNlIixtc2ZpbGVzW3JdLHIpOwotICAgICAgICAgICAgcisrOyAgICAg ICAgICAgICAgICAgICAgICAgIC8qIENvdW50IGl0ICovCi0gICAgICAgICAgICBpZiAoKnMgPT0g TlVMKSBicmVhazsgICAgICAgLyogRW5kIG9mIHN0cmluZz8gKi8KLSAgICAgICAgICAgIHdoaWxl ICgqcyA9PSBTUCkgcysrOyAgICAgICAvKiBTa2lwIHJlcGVhdGVkIHNwYWNlcyAqLwotICAgICAg ICAgICAgcCA9IHE7ICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IG9mIG5leHQgbmFtZSAq LwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0gZWxzZSAqcSsrID0gKnM7ICAgICAg ICAgICAgICAgLyogT3RoZXJ3aXNlIGNvcHkgdGhlIGNoYXJhY3RlciAqLwotICAgICAgICBzKys7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5leHQgaW5wdXQgY2hhcmFjdGVyICovCi0g ICAgfQotICAgIGRlYnVnKEYxMDEsImZucGFyc2UgciIsIiIscik7Ci0gICAgbXNmaWxlc1tyXSA9 ICIiOyAgICAgICAgICAgICAgICAgICAgLyogUHV0IGVtcHR5IHN0cmluZyBhdCBlbmQgb2YgbGlz dCAqLwotICAgIGNtbGlzdCA9IG1zZmlsZXM7Ci0gICAgcmV0dXJuKHIpOwotfQotI2VuZGlmIC8q IE5PTVNFTkQgKi8KLQotY2hhciAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IGRiY2hyKCkgZm9yIERFQlVHIFNFU1NJT04gKi8KLWRiY2hyKGMpIGludCBjOyB7Ci0gICAgc3Rh dGljIGNoYXIgc1s4XTsKLSAgICBjaGFyICpjcCA9IHM7Ci0KLSAgICBjICY9IDB4ZmY7Ci0gICAg aWYgKGMgJiAweDgwKSB7ICAgICAgICAgICAgICAgICAgICAgLyogOHRoIGJpdCBvbiAqLwotICAg ICAgICAqY3ArKyA9ICd+JzsKLSAgICAgICAgYyAmPSAweDdmOwotICAgIH0KLSAgICBpZiAoYyA8 IFNQKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sIGNoYXJhY3RlciAqLwotICAg ICAgICAqY3ArKyA9ICdeJzsKLSAgICAgICAgKmNwKysgPSAoY2hhcikgY3RsKGMpOwotICAgIH0g ZWxzZSBpZiAoYyA9PSBERUwpIHsKLSAgICAgICAgKmNwKysgPSAnXic7Ci0gICAgICAgICpjcCsr ID0gJz8nOwotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByaW50 aW5nIGNoYXJhY3RlciAqLwotICAgICAgICAqY3ArKyA9IChjaGFyKSBjOwotICAgIH0KLSAgICAq Y3AgPSAnXDAnOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGUgc3RyaW5nICov Ci0gICAgY3AgPSBzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIHBvaW50 ZXIgdG8gaXQgKi8KLSAgICByZXR1cm4oY3ApOwotfQotCi0vKiAgQyBLIEggTyBTIFQgIC0tICBH ZXQgbmFtZSBvZiBsb2NhbCBob3N0ICh3aGVyZSBDLUtlcm1pdCBpcyBydW5uaW5nKSAgKi8KLQot LyoKLSAgQ2FsbCB3aXRoIHBvaW50ZXIgdG8gYnVmZmVyIHRvIHB1dCBob3N0bmFtZSBpbiwgYW5k IGxlbmd0aCBvZiBidWZmZXIuCi0gIENvcGllcyBob3N0bmFtZSBpbnRvIGJ1ZmZlciBvbiBzdWNj ZXNzLCBwdXRzIG51bGwgc3RyaW5nIGluIGJ1ZmZlciBvbgotICBmYWlsdXJlLgotKi8KLSNpZmRl ZiBCU0Q0NAotI2RlZmluZSBCU0Q0Ci0jdW5kZWYgQVRUU1YKLSNlbmRpZiAvKiBCU0Q0NCAqLwot Ci0jaWZkZWYgU1ZPUlBPU0lYCi0jaWZuZGVmIEJTRDQ0Ci0jaWZuZGVmIGFwb2xsbwotI2luY2x1 ZGUgPHN5cy91dHNuYW1lLmg+Ci0jZW5kaWYgLyogYXBvbGxvICovCi0jZW5kaWYgLyogQlNENDQg Ki8KLSNlbHNlCi0jaWZkZWYgQkVMTFYxMAotI2luY2x1ZGUgPHV0c25hbWUuaD4KLSNlbmRpZiAv KiBCRUxMVjEwICovCi0jZW5kaWYgLyogU1ZPUlBPU0lYKi8KLQotI2lmZGVmIENLU1lTTE9HCi1l eHRlcm4gY2hhciB1aWRidWZbXSwgKiBjbGllbnRob3N0OwotI2VuZGlmIC8qIENLU1lTTE9HICov Ci0KLVZPSUQKLWNraG9zdCh2dmJ1Zix2dmxlbikgY2hhciAqIHZ2YnVmOyBpbnQgdnZsZW47IHsK LQotI2lmbmRlZiBOT1BVU0gKLSAgICBleHRlcm4gaW50IG5vcHVzaDsKLSNpZm5kZWYgTk9TRVJW RVIKLSAgICBleHRlcm4gaW50IGVuX2hvczsKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotI2VuZGlm IC8qIE5PUFVTSCAqLwotCi0jaWZkZWYgcGRwMTEKLSAgICAqdnZidWYgPSBOVUw7Ci0jZWxzZSAg LyogRXZlcnl0aGluZyBlbHNlIC0gcmVzdCBvZiB0aGlzIHJvdXRpbmUgKi8KLQotICAgIGNoYXIg Kmc7Ci0gICAgaW50IGhhdmVmdWxsID0gMDsKLSNpZmRlZiBWTVMKLSAgICBpbnQgeDsKLSNlbmRp ZiAvKiBWTVMgKi8KLQotI2lmZGVmIFNWT1JQT1NJWAotI2lmbmRlZiBCU0Q0NAotI2lmbmRlZiBf Mzg2QlNECi0jaWZuZGVmIEFQT0xMT1NSMTAKLSAgICBzdHJ1Y3QgdXRzbmFtZSBobmFtZTsKLSNl bmRpZiAvKiBBUE9MTE9TUjEwICovCi0jZW5kaWYgLyogXzM4NkJTRCAqLwotI2VuZGlmIC8qIEJT RDQ0ICovCi0jZW5kaWYgLyogU1ZPUlBPU0lYICovCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICBp bnQgYWMwID0gKGNoYXIgKikgdnZidWYsIGFjMSA9IC0xLCBhYzIgPSAwOwotI2VuZGlmIC8qIGRh dGFnZW5lcmFsICovCi0KLSNpZm5kZWYgTk9QVVNICi0gICAgaWYgKGdldGVudigiQ0tfTk9QVVNI IikpIHsgICAgICAgICAgLyogTm8gc2hlbGwgYWNjZXNzIGFsbG93ZWQgKi8KLSAgICAgICAgbm9w dXNoID0gMTsgICAgICAgICAgICAgICAgICAgICAvKiBvbiB0aGlzIGhvc3QuLi4gKi8KLSNpZm5k ZWYgTk9TRVJWRVIKLSAgICAgICAgZW5faG9zID0gMDsKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwot ICAgIH0KLSNlbmRpZiAvKiBOT1BVU0ggKi8KLQotICAgICp2dmJ1ZiA9IE5VTDsgICAgICAgICAg ICAgICAgICAgICAgIC8qIEhvdyBsZXQncyBnZXQgb3VyIGhvc3QgbmFtZSAuLi4gKi8KLQotI2lm bmRlZiBCRUxMVjEwICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvZXMgbm90IGhhdmUgZ2V0 aG9zdG5hbWUoKSAqLwotI2lmbmRlZiBPWE9TCi0jaWZkZWYgU1ZPUlBPU0lYCi0jaWZkZWYgQVBP TExPU1IxMAotICAgIGNrc3RybmNweSh2dmJ1ZiwiQXBvbGxvIix2dmxlbik7Ci0jZWxzZQotI2lm ZGVmIEJTRDQ0Ci0gICAgaWYgKGdldGhvc3RuYW1lKHZ2YnVmLHZ2bGVuKSA8IDApCi0gICAgICAq dnZidWYgPSBOVUw7Ci0jZWxzZQotI2lmZGVmIF8zODZCU0QKLSAgICBpZiAoZ2V0aG9zdG5hbWUo dnZidWYsdnZsZW4pIDwgMCkgKnZ2YnVmID0gTlVMOwotI2Vsc2UKLSNpZmRlZiBRTlgKLSNpZmRl ZiBUQ1BTT0NLRVQKLSAgICBpZiAoZ2V0aG9zdG5hbWUodnZidWYsdnZsZW4pIDwgMCkgKnZ2YnVm ID0gTlVMOwotI2Vsc2UKLSAgICBpZiAodW5hbWUoJmhuYW1lKSA+IC0xKSBja3N0cm5jcHkodnZi dWYsaG5hbWUubm9kZW5hbWUsdnZsZW4pOwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2Vsc2Ug LyogU1ZPUlBPU0lYIGJ1dCBub3QgXzM4NkJTRCBvciBCU0Q0NCAqLwotI2lmZGVmIF9faWE2NF9f Ci0gICAgaWYgKHVuYW1lKCZobmFtZSkgPiAtMSkgY2tzdHJuY3B5KHZ2YnVmLGhuYW1lLm5vZGVu YW1lLHZ2bGVuKTsKLSNlbHNlCi0gICAgaWYgKHVuYW1lKCZobmFtZSkgPiAtMSkgewotCWNoYXIg KiBwOwotCXAgPSBobmFtZS5ub2RlbmFtZTsKLSNpZmRlZiBUQ1BTT0NLRVQKLSNpZm5kZWYgTk9D S0dFVEZRSE9TVAotCWlmICghY2tzdHJjaHIocCwnLicpKQotCSAgcCA9IChjaGFyICopY2tnZXRm cWhvc3RuYW1lKHApOwotI2VuZGlmIC8qIE5PQ0tHRVRGUUhPU1QgKi8KLSNlbmRpZiAvKiBUQ1BT T0NLRVQgKi8KLQlpZiAoIXApIHAgPSAiIjsKLQlpZiAoISpwKSBwID0gIih1bmtub3duKSI7Ci0J Y2tzdHJuY3B5KHZ2YnVmLHAsdnZsZW4pOwotICAgIH0KLSNlbmRpZiAvKiBfX2lhNjRfXyAqLwot I2VuZGlmIC8qIFFOWCAqLwotI2VuZGlmIC8qIF8zODZCU0QgKi8KLSNlbmRpZiAvKiBCU0Q0NCAq LwotI2VuZGlmIC8qIEFQT0xMT1NSMTAgKi8KLSNlbHNlIC8qICFTVk9SUE9TSVggKi8KLSNpZmRl ZiBCU0Q0Ci0gICAgaWYgKGdldGhvc3RuYW1lKHZ2YnVmLHZ2bGVuKSA8IDApICp2dmJ1ZiA9IE5V TDsKLSNlbHNlIC8qICFCU0Q0ICovCi0jaWZkZWYgVk1TCi0gICAgZyA9IGdldGVudigiU1lTJE5P REUiKTsKLSAgICBpZiAoZykgY2tzdHJuY3B5KHZ2YnVmLGcsdnZsZW4pOwotICAgIHggPSAoaW50 KXN0cmxlbih2dmJ1Zik7Ci0gICAgaWYgKHggPiAxICYmIHZ2YnVmW3gtMV0gPT0gJzonICYmIHZ2 YnVmW3gtMl0gPT0gJzonKSB2dmJ1Zlt4LTJdID0gTlVMOwotI2Vsc2UKLSNpZmRlZiBkYXRhZ2Vu ZXJhbAotICAgIGlmIChzeXMoJEhOQU1FLCZhYzAsJmFjMSwmYWMyKSA9PSAwKSAvKiBzdWNjZXNz ZnVsICovCi0gICAgICAgIHZ2bGVuID0gYWMyICsgMTsgICAgICAgICAgICAgICAgLyogZW5oIC0g aGF2ZSB0byBhZGQgb25lICovCi0jZWxzZQotI2lmZGVmIE9TMiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIE9TLzIgKi8KLSAgICBnID0gb3MyX2dldGhvc3RuYW1lKCk7Ci0gICAgaWYg KGcpIGNrc3RybmNweSh2dmJ1ZixnLHZ2bGVuKTsKLSNlbHNlIC8qIE9TMiAqLwotI2lmZGVmIE9T SwotI2lmZGVmIFRDUFNPQ0tFVAotICAgICAgICBpZiAoZ2V0aG9zdG5hbWUodnZidWYsIHZ2bGVu KSA8IDApICp2dmJ1ZiA9IE5VTDsKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNlbmRpZiAvKiBP U0sgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlm IC8qIFZNUyAqLwotI2VuZGlmIC8qIEJTRDQgKi8KLSNlbmRpZiAvKiBTVk9SUE9TSVggKi8KLSNl bHNlIC8qIE9YT1MgKi8KLSAgICAvKiBJZiBUQ1AvSVAgaXMgbm90IGluc3RhbGxlZCwgZ2V0aG9z dG5hbWUoKSBmYWlscywgdXNlIHVuYW1lKCkgKi8KLSAgICBpZiAoZ2V0aG9zdG5hbWUodnZidWYs dnZsZW4pIDwgMCkgewotICAgICAgICBpZiAodW5hbWUoJmhuYW1lKSA+IC0xKQotICAgICAgICAg ICAgY2tzdHJuY3B5KHZ2YnVmLGhuYW1lLm5vZGVuYW1lLHZ2bGVuKTsKLSAgICAgICAgZWxzZQot ICAgICAgICAgICAgKnZ2YnVmID0gTlVMOwotICAgIH0KLSNlbmRpZiAvKiBPWE9TICovCi0jZW5k aWYgLyogQkVMTFYxMCAqLwotICAgIGlmICgqdnZidWYgPT0gTlVMKSB7ICAgICAgICAgICAgICAg IC8qIElmIGl0J3Mgc3RpbGwgZW1wdHkgKi8KLSAgICAgICAgZyA9IGdldGVudigiSE9TVCIpOyAg ICAgICAgICAgICAvKiB0cnkgdGhpcyAqLwotICAgICAgICBpZiAoZykgY2tzdHJuY3B5KHZ2YnVm LGcsdnZsZW4pOwotICAgIH0KLSAgICB2dmJ1Zlt2dmxlbi0xXSA9IE5VTDsgICAgICAgICAgICAg ICAvKiBNYWtlIHN1cmUgcmVzdWx0IGlzIHRlcm1pbmF0ZWQuICovCi0jZW5kaWYgLyogcGRwMTEg Ki8KLX0KLSNpZmRlZiBCU0Q0NAotI3VuZGVmIEJTRDQKLSNkZWZpbmUgQVRUU1YKLSNlbmRpZiAv KiBCU0Q0NCAqLwotCi0vKgotICBBIFMgSyBNIE8gUiBFICAtLSAgUG9vciBwZXJzb24ncyAibW9y ZSIuCi0gIFJldHVybnMgMCBpZiBubyBtb3JlLCAxIGlmIG1vcmUgd2FudGVkLgotKi8KLWludAot YXNrbW9yZSgpIHsKLSAgICBjaGFyIGM7Ci0gICAgaW50IHJ2LCBjeDsKLSNpZmRlZiBJS1NECi0g ICAgZXh0ZXJuIGludCB0aW1lbGltaXQ7Ci0jZW5kaWYgLyogSUtTRCAqLwotI2lmZGVmIElLU0RD T05GCi0gICAgZXh0ZXJuIGludCBpa3NkY2Y7Ci0jZW5kaWYgLyogSUtTRENPTkYgKi8KLSNpZmRl ZiBDS19BUEMKLSAgICBleHRlcm4gaW50IGFwY3N0YXR1cywgYXBjYWN0aXZlOwotI2VuZGlmIC8q IENLX0FQQyAqLwotCi0jaWZkZWYgTk9JQ1AKLSAgICByZXR1cm4oMSk7Ci0jZWxzZQotICAgIGlm ICgheGFza21vcmUpCi0gICAgICByZXR1cm4oMSk7Ci0jaWZkZWYgSUtTRENPTkYKLSAgICBpZiAo aW5zZXJ2ZXIgJiYgIWlrc2RjZikKLSAgICAgIHJldHVybigxKTsKLSNlbmRpZiAvKiBJS1NEQ09O RiAqLwotI2lmZGVmIENLX0FQQwotICAgIGlmIChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMIHx8Ci0g ICAgICAgIChhcGNhY3RpdmUgPT0gQVBDX1JFTU9URSAmJiAoYXBjc3RhdHVzICYgQVBDX05PSU5Q KSkpCi0gICAgICAgIHJldHVybigxKTsKLSNlbmRpZiAvKiBDS19BUEMgKi8KLSNpZmRlZiBWTVMK LSAgICBpZiAoYmF0Y2gpCi0gICAgICByZXR1cm4oMSk7Ci0jZWxzZQotI2lmZGVmIFVOSVgKLSAg ICBpZiAoYmFja2dyZCkKLSAgICAgIHJldHVybigxKTsKLSNlbmRpZiAvKiBVTklYICovCi0jZW5k aWYgLyogVk1TICovCi0KLSNpZm5kZWYgVk1TCi0gICAgY29uY2IoKGNoYXIpZXNjYXBlKTsgICAg ICAgICAgICAgICAgLyogRm9yY2UgQ0JSRUFLIG1vZGUuICovCi0jZW5kaWYgLyogVk1TICovCi0K LSAgICBydiA9IC0xOwotICAgIHdoaWxlIChydiA8IDApIHsKLSNpZm5kZWYgT1MyCi0gICAgICAg IHByaW50ZigibW9yZT8gIik7Ci0jaWZkZWYgVU5JWAotI2lmZGVmIE5PU0VUQlVGCi0gICAgICAg IGZmbHVzaChzdGRvdXQpOwotI2VuZGlmIC8qIE5PU0VUQlVGICovCi0jZW5kaWYgLyogVU5JWCAq LwotI2Vsc2UKLSAgICAgICAgcHJpbnRmKCJtb3JlPyAiKTsKLSAgICAgICAgZmZsdXNoKHN0ZG91 dCk7Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBJS1NECi0gICAgICAgIGlmIChpbnNlcnZl cikgewotICAgICAgICAgICAgY3ggPSBjbWRnZXRjKHRpbWVsaW1pdCk7Ci0gICAgICAgICAgICBp ZiAoY3ggPCAtMSAmJiB0aW1lbGltaXQpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIlxuP0lL UyBpZGxlIHRpbWVvdXQgLSBHb29kYnllLlxuIik7Ci0gICAgICAgICAgICAgICAgZG9leGl0KEdP T0RfRVhJVCwwKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY3ggPT0gLTEpIHsJLyogQ29ubmVj dGlvbiBsb3N0ICovCi0gICAgICAgICAgICAgICAgZG9leGl0KEJBRF9FWElULDApOwotICAgICAg ICAgICAgfQotICAgICAgICAgICAgYyA9IChjaGFyKSBjeDsKLSAgICAgICAgfSBlbHNlIHsKLSNl bmRpZiAvKiBJS1NEICovCi0jaWZkZWYgVk1TCi0JICAgIGNvbmJpbigoY2hhcillc2NhcGUpOwkv KiBQcm90ZWN0IGFnYWluc3QgQ3RybC1aICovCi0JICAgIGN4ID0gY29uaW5jKDApOwotCSAgICBj b25jYigoY2hhcillc2NhcGUpOwotI2Vsc2UKLQkgICAgY3ggPSBjbWRnZXRjKDApOwotI2VuZGlm IC8qIFZNUyAqLwotCSAgICBkZWJ1ZyhGMTAxLCJhc2ttb3JlIGNtZGdldGMiLCIiLGN4KTsKLQkg ICAgaWYgKGN4ID09IEVPRikgewotCQlkZWJ1ZyhGMTAwLCJhc2ttb3JlIEVPRiIsIiIsMCk7Ci0j aWZkZWYgVk1TCi0JCWMgPSAnXDAzMic7Ci0jZWxzZQotCQljID0gJ24nOwotI2VuZGlmIC8qIFZN UyAqLwotCSAgICB9IGVsc2UgewotCQljID0gKGNoYXIpY3g7Ci0JICAgIH0KLQkgICAgZGVidWco RjEwMSwiYXNrbW9yZSBjIiwiIixjKTsKLQotI2lmZGVmIElLU0QKLQl9Ci0jZW5kaWYgLyogSUtT RCAqLwotICAgICAgICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgICAvKiBZZXMgKi8KLQkgIGNhc2Ug J3AnOiBjYXNlICdQJzogY2FzZSAnZyc6IGNhc2UgJ0cnOiAvKiBQcm9jZWVkIG9yIEdvICovCi0J ICAgIHhhc2ttb3JlID0gMDsKLQkgICAgLyogZmFsbCB0aHJ1IG9uIHB1cnBvc2UgKi8KLQotICAg ICAgICAgIGNhc2UgU1A6IGNhc2UgJ3knOiBjYXNlICdZJzogY2FzZSAwMTI6ICBjYXNlIDAxNToK LSNpZmRlZiBPU0sKLSAgICAgICAgICAgIHdyaXRlKDEsICJcMDE1ICAgICAgXDAxNSIsIHNpemVv ZiAiXDAxNSAgICAgIFwwMTUiIC0gMSk7Ci0jZWxzZQotICAgICAgICAgICAgcHJpbnRmKCJcMDE1 ICAgICAgXDAxNSIpOwotI2VuZGlmIC8qIE9TSyAqLwotICAgICAgICAgICAgcnYgPSAxOwotICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgLyogTm8gKi8KLSAgICAgICAgICBjYXNlICduJzog Y2FzZSAnTic6IGNhc2UgJ3EnOiBjYXNlICdRJzoKLSNpZmRlZiBPU0sKLSAgICAgICAgICAgIHBy aW50ZigiXG4iKTsKLSNlbHNlCi0gICAgICAgICAgICBwcmludGYoIlwwMTVcMDEyIik7Ci0jZW5k aWYgLyogT1NLICovCi0gICAgICAgICAgICBydiA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLQkg IGNhc2UgJ1wwMDMnOgotCSAgY2FzZSAnXDAwNCc6Ci0JICBjYXNlICdcMDMyJzoKLSNpZmRlZiBP U0sKLQkgICAgcHJpbnRmKCJeJWMuLi5cbiIsIChjICsgMDEwMCkpOwotI2Vsc2UKLQkgICAgcHJp bnRmKCJeJWMuLi5cMDE1XDAxMiIsIChjICsgMDEwMCkpOwotI2VuZGlmIC8qIE9TSyAqLwotCSAg ICBydiA9IDA7Ci0JICAgIGJyZWFrOwotICAgICAgICAgIC8qIEludmFsaWQgYW5zd2VyICovCi0g ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImFza21vcmUiLCJpbnZh bGlkIGFuc3dlciIsYyk7Ci0gICAgICAgICAgICBwcmludGYoIlkgb3Igc3BhY2UtYmFyIGZvciB5 ZXMsIE4gZm9yIG5vLCBHIHRvIHNob3cgdGhlIHJlc3RcbiIpOwotICAgICAgICAgICAgY29udGlu dWU7Ci0gICAgICAgIH0KLSNpZmRlZiBPUzIKLSAgICAgICAgcHJpbnRmKCJcciAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyIik7Ci0gICAgICAgIGZm bHVzaChzdGRvdXQpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgIH0KLSAgICByZXR1cm4ocnYpOwot I2VuZGlmIC8qIE5PSUNQICovCi19Ci0KLS8qICBUIFIgQSBQICAtLSAgVGVybWluYWwgaW50ZXJy dXB0IGhhbmRsZXIgKi8KLQotU0lHVFlQCi0jaWZkZWYgQ0tfQU5TSUMKLXRyYXAoaW50IHNpZykK LSNlbHNlCi10cmFwKHNpZykgaW50IHNpZzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogdHJh cCAqLyB7Ci0gICAgZXh0ZXJuIGludCBiX3NhdmUsIGZfc2F2ZTsKLSNpZm5kZWYgTk9JQ1AKLSAg ICBleHRlcm4gaW50IHRpbWVsaW1pdDsKLSNlbmRpZiAvKiBOT0lDUCAqLwotI2lmZGVmIE9TMgot ICAgIGV4dGVybiB1bnNpZ25lZCBsb25nIHN0YXJ0ZmxhZ3M7Ci0jaWZuZGVmIE5PU0VUS0VZCi0g ICAgZXh0ZXJuIGludCBvczJna3M7Ci0jZW5kaWYgLyogTk9TRVRLRVkgKi8KLSAgICBpbnQgaTsK LSNlbmRpZiAvKiBPUzIgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICBleHRlcm4gaW50IGlfYWN0aXZl LCBpbnN0YXR1czsKLSNlbmRpZiAvKiBOT1NQTCAqLwotI2lmZGVmIFZNUwotICAgIGludCBpOyBG SUxFICpmOwotI2VuZGlmIC8qIFZNUyAqLwotICAgIGV4dGVybiBpbnQgemNoa29kLCB6Y2hraWQ7 Ci0jaWZuZGVmIE5PU1BMCi0gICAgZXh0ZXJuIGludCB1bmttYWNybzsKLSNlbmRpZiAvKiBOT1NQ TCAqLwotCi0gICAgZGVib2sgPSAxOwotI2lmZGVmIE5UU0lHCi0gICAgY29ubm9pKCk7Ci0jZW5k aWYgLyogTlRTSUcgKi8KLSNpZmRlZiBfX0VNWF9fCi0gICAgc2lnbmFsKFNJR0lOVCwgU0lHX0FD Syk7Ci0jZW5kaWYKLSNpZmRlZiBHRU1ET1MKLS8qIEdFTSBpcyBub3QgcmVlbnRyYW50LCBubyBp L28gZnJvbSBpbnRlcnJ1cHQgbGV2ZWwgKi8KLSAgICBja2xvbmdqbXAoY21qYnVmLDEpOyAgICAg ICAgICAgICAgICAvKiBKdW1wIGJhY2sgdG8gcGFyc2VyIG5vdyEgKi8KLSNlbmRpZiAvKiBHRU1E T1MgKi8KLQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewotCWRlYnVnKEYxMDAsIioq KioqKioqKioqKioqKioqKioqKiIsIiIsMCk7Ci0JaWYgKHNpZyA9PSBTSUdJTlQpCi0JICBkZWJ1 ZyhGMTAxLCJ0cmFwIGNhdWdodCBTSUdJTlQiLCIiLHNpZyk7Ci0JZWxzZSAKLQkgIGRlYnVnKEYx MDEsInRyYXAgY2F1Z2h0IHNpZ25hbCIsIiIsc2lnKTsKLQlkZWJ1ZyhGMTAwLCIqKioqKioqKioq KioqKioqKioqKioiLCIiLDApOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0jaWZkZWYg T1MyCi0gICAgaWYgKCBzaWcgPT0gU0lHQlJFQUsgJiYgKHN0YXJ0ZmxhZ3MgJiAxMjgpICkgewot ICAgICAgICBkZWJ1ZyhGMTAxLCJ0cmFwIGlnbm9yaW5nIFNJR0JSRUFLIiwiIixzaWcpOwotICAg ICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZuZGVmIE5PSUNQCi0g ICAgdGltZWxpbWl0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogSW4gY2FzZSB0aW1lZCBB U0sgaW50ZXJydXB0ZWQgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICB1bmttYWNybyA9IDA7CQkJLyog T3IgT05fVU5LTk9XTl9NQUNSTyBpbnRlcnJ1cHRlZC4uICovCi0jZW5kaWYgLyogTk9TUEwgKi8K LSNlbmRpZiAvKiBOT0lDUCAqLwotICAgIHpjaGtvZCA9IDA7ICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIE9yIGZpbGUgZXhwYW5zaW9uIGludGVycnVwdGVkLi4uICovCi0gICAgemNoa2lkID0g MDsKLSAgICBpbnRlcnJ1cHRlZCA9IDE7Ci0KLSAgICBpZiAod2hhdCAmIFdfQ09OTkVDVCkgewkJ LyogQXJlIHdlIGluIENPTk5FQ1QgbW9kZT8gKi8KLS8qCi0gIFRoZSBIUCB3b3Jrc3RhdGlvbiBS ZXNldCBrZXkgc2VuZHMgc29tZSBraW5kIG9mIHVlYmVyLVNJR0lOVCB0aGF0IGNhbiBub3QKLSAg YmUgU0lHX0lHTm9yZWQsIHNvIHdlIHdpbmQgdXAgaGVyZSBzb21laG93IChldmVuIHRob3VnaCB0 aGlzIGlzICpub3QqIHRoZQotICBjdXJyZW50IFNJR0lOVCBoYW5kbGVyKS4gIEp1c3QgcmV0dXJu LgotKi8KLSAgICAgICAgZGVidWcoRjEwMSwidHJhcDogU0lHSU5UIGNhdWdodCBkdXJpbmcgQ09O TkVDVCIsIiIsc2lnKTsKLSAgICAgICAgU0lHUkVUVVJOOwotICAgIH0KLSNpZm5kZWYgTk9TUEwK LSAgICBpZiAoaV9hY3RpdmUpIHsgICAgICAgICAgICAgICAgICAgICAvKiBJTlBVVCBjb21tYW5k IHdhcyBhY3RpdmU/ICovCi0gICAgICAgIGlfYWN0aXZlID0gMDsgICAgICAgICAgICAgICAgICAg LyogTm90IGFueSBtb3JlLi4uICovCi0gICAgICAgIGluc3RhdHVzID0gSU5QX1VJOyAgICAgICAg ICAgICAgLyogSU5QVVQgc3RhdHVzID0gVXNlciBJbnRlcnJ1cHRlZCAqLwotICAgIH0KLSNlbmRp ZiAvKiBOT1NQTCAqLwotCi0jaWZuZGVmIE5PWEZFUgotICAgIGZ0cmVzZXQoKTsgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgZ2xvYmFsIHByb3RvY29sIHNldHRpbmdzICovCi0g ICAgYmluYXJ5ID0gYl9zYXZlOyAgICAgICAgICAgICAgICAgICAgLyogVGhlbiByZXN0b3JlIHRo ZXNlICovCi0gICAgZm5jbnYgID0gZl9zYXZlOwotICAgIGJ5ZV9hY3RpdmUgPSAwOwotICAgIGRp cmFjdGl2ZSA9IDA7Ci0gICAgY2RhY3RpdmUgPSAwOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAg IHpjbG9zZShaSUZJTEUpOyAgICAgICAgICAgICAgICAgICAgIC8qIElmIHdlIHdlcmUgdHJhbnNm ZXJyaW5nIGEgZmlsZSwgKi8KLSAgICB6Y2xvc2UoWk9GSUxFKTsgICAgICAgICAgICAgICAgICAg ICAvKiBjbG9zZSBpdC4gKi8KLSNpZm5kZWYgTk9JQ1AKLSAgICBjbWRzcXVvKGNtZF9xdW90aW5n KTsgICAgICAgICAgICAgICAvKiBJZiBjb21tYW5kIHF1b3Rpbmcgd2FzIHR1cm5lZCBvZmYgKi8K LSNpZmRlZiBDS0xFQVJOCi0gICAgewotCWV4dGVybiBGSUxFICogbGVhcm5mcDsKLQlleHRlcm4g aW50IGxlYXJuaW5nOwotCWlmIChsZWFybmZwKSB7Ci0JICAgIGZjbG9zZShsZWFybmZwKTsKLQkg ICAgbGVhcm5mcCA9IE5VTEw7Ci0JICAgIGxlYXJuaW5nID0gMDsKLQl9Ci0gICAgfQotI2VuZGlm IC8qIENLTEVBUk4gKi8KLSNlbmRpZiAvKiBOT0lDUCAqLwotI2lmZGVmIENLX0FQQwotICAgIGRl bG1hYygiX2FwY19jb21tYW5kcyIsMSk7Ci0gICAgYXBjYWN0aXZlID0gQVBDX0lOQUNUSVZFOwot I2VuZGlmIC8qIENLX0FQQyAqLwotCi0jaWZkZWYgVk1TCi0vKgotICBGaXggdGVybWluYWwuCi0q LwotICAgIGlmIChmdF93aW4pIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIGN1cnNlcyB3 aW5kb3cgb3BlbiAqLwotICAgICAgICBkZWJ1ZyhGMTAwLCJeQyB0cmFwKCkgY3Vyc2VzIiwiIiww KTsKLSAgICAgICAgeHhzY3JlZW4oU0NSX0NXLDAsMEwsIiIpOyAgICAgICAvKiBDbG9zZSBpdCAq LwotICAgICAgICBjb25yZXMoKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgdGVy bWluYWwgKi8KLSAgICAgICAgaSA9IHByaW50ZigiXkMuLi4iKTsgICAgICAgICAgICAvKiBFY2hv IF5DIHRvIHN0YW5kYXJkIG91dHB1dCAqLwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbnJlcygp OwotICAgICAgICBpID0gcHJpbnRmKCJeQy4uLlxuIik7ICAgICAgICAgIC8qIEVjaG8gXkMgdG8g c3RhbmRhcmQgb3V0cHV0ICovCi0gICAgfQotICAgIGlmIChpIDwgMSAmJiBmZXJyb3Ioc3Rkb3V0 KSkgeyAgICAgIC8qIElmIHRoZXJlIHdhcyBhbiBlcnJvciAqLwotICAgICAgICBkZWJ1ZyhGMTAw LCJeQyB0cmFwKCkgZXJyb3IiLCIiLDApOwotICAgICAgICBmY2xvc2Uoc3Rkb3V0KTsgICAgICAg ICAgICAgICAgIC8qIGNsb3NlIHN0YW5kYXJkIG91dHB1dCAqLwotICAgICAgICBmID0gZm9wZW4o ZGZ0dHksICJ3Iik7ICAgICAgICAgIC8qIG9wZW4gdGhlIGNvbnRyb2xsaW5nIHRlcm1pbmFsICov Ci0gICAgICAgIGlmIChmKSBzdGRvdXQgPSBmOyAgICAgICAgICAgICAgLyogYW5kIG1ha2UgaXQg c3RhbmRhcmQgb3V0cHV0ICovCi0gICAgICAgIHByaW50ZigiXkMuLi5cbiIpOyAgICAgICAgICAg ICAgLyogYW5kIGVjaG8gdGhlIF5DIGFnYWluLiAqLwotICAgIH0KLSNlbHNlICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgVk1TICovCi0jaWZkZWYgU1RSQVRVUwotICAg IGNvbnJlcygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBjb25zb2xlIGJhY2sg dG8gbm9ybWFsIG1vZGUgKi8KLSNlbmRpZiAvKiBTVFJBVFVTICovCi0jaWZuZGVmIE5PWEZFUgot ICAgIGlmIChmdF93aW4pIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIGN1cnNlcyB3aW5k b3cgb3BlbiwgKi8KLSAgICAgICAgZGVidWcoRjEwMCwiXkMgdHJhcCgpIGN1cnNlcyIsIiIsMCk7 Ci0gICAgICAgIHh4c2NyZWVuKFNDUl9DVywwLDBMLCIiKTsJLyogY2xvc2UgaXQuICovCi0gICAg ICAgIHByaW50ZigiXkMuLi4iKTsgICAgICAgICAgICAgICAgLyogRWNobyBeQyB0byBzdGFuZGFy ZCBvdXRwdXQgKi8KLSAgICB9IGVsc2UgewotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgICAgICBw cmludGYoIl5DLi4uXG4iKTsKLSNpZm5kZWYgTk9YRkVSCi0gICAgfQotI2VuZGlmIC8qIE5PWEZF UiAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2lmZGVmIGRhdGFnZW5lcmFsCi0gICAgY29ubm9pX210 KCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogS2lsbCBhc3luY2ggdGFzayB0aGF0IGxpc3Rl bnMgdG8gKi8KLSAgICB0dGltb2ZmKCk7Ci0gICAgY29ucmVzKCk7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogdGhlIGtleWJvYXJkICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLQot I2lmbmRlZiBOT0NDVFJBUAotLyogIFRoaXMgaXMgc3R1cGlkIC0tIGV2ZXJ5IHZlcnNpb24gc2hv dWxkIGhhdmUgdHRpbW9mZigpLi4uICAqLwotI2lmZGVmIFVOSVgKLSAgICB0dGltb2ZmKCk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBUdXJuIG9mZiBhbnkgdGltZXIgaW50ZXJydXB0cyAq LwotI2Vsc2UKLSNpZmRlZiBPU0sKLSAgICB0dGltb2ZmKCk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBUdXJuIG9mZiBhbnkgdGltZXIgaW50ZXJydXB0cyAqLwotI2Vsc2UKLSNpZmRlZiBT VFJBVFVTCi0gICAgdHRpbW9mZigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVHVybiBv ZmYgYW55IHRpbWVyIGludGVycnVwdHMgKi8KLSNlbHNlCi0jaWZkZWYgT1MyCi0jaWZuZGVmIE5P U0VUS0VZCi0gICAgb3MyZ2tzID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogVHVybiBi YWNrIG9uIGtleWNvZGUgbWFwcGluZyAgKi8KLSNlbmRpZiAvKiBOT1NFVEtFWSAqLwotI2lmbmRl ZiBOT0xPQ0FMCi0gICAgZm9yIChpID0gMDsgaSA8IFZOVU07IGkrKykKLSAgICAgIFZzY3JuUmVz ZXRQb3B1cChpKTsKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jaWZkZWYgVENQU09DS0VUCi0jaWZk ZWYgTlQKLSAgICAvKiBXU0FJc0Jsb2NraW5nKCkgcmV0dXJucyBGQUxTRSBpbiBXaW45NSBkdXJp bmcgYSBibG9ja2luZyBhY2NlcHQgY2FsbCAqLwotICAgIGlmICggV1NBU2FmZVRvQ2FuY2VsIC8q ICYmIFdTQUlzQmxvY2tpbmcoKSAqLyApIHsKLSAgICAgICAgV1NBQ2FuY2VsQmxvY2tpbmdDYWxs KCk7Ci0gICAgfQotI2VuZGlmIC8qIE5UICovCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0jaWZk ZWYgQ0tfTkVUQklPUwotICAgIE5DQkNhbmNlbE91dHN0YW5kaW5nKCk7Ci0jZW5kaWYgLyogQ0tf TkVUQklPUyAqLwotICAgIHR0aW1vZmYoKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR1 cm4gb2ZmIGFueSB0aW1lciBpbnRlcnJ1cHRzICovCi0jZWxzZQotI2lmZGVmIFZNUwotICAgIHR0 aW1vZmYoKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIGFueSB0aW1lciBp bnRlcnJ1cHRzICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYg LyogU1RSQVRVUyAqLwotI2VuZGlmIC8qIE9TSyAqLwotI2VuZGlmIC8qIFVOSVggKi8KLQotI2lm ZGVmIE5FVFBUWQotICAgIC8qIENsZWFuIHVwIEN0cmwtQyBvdXQgb2YgUkVESVJFQ1Qgb3IgZXh0 ZXJuYWwgcHJvdG9jb2wgKi8KLSAgICB7Ci0JZXh0ZXJuIFBJRF9UIHB0eV9mb3JrX3BpZDsKLQll eHRlcm4gaW50IHB0eV9tYXN0ZXJfZmQsIHB0eV9zbGF2ZV9mZDsKLQlpbnQgeDsKLQotCXNpZ25h bChTSUdDSExELFNJR19JR04pOwkvKiBXZSBkb24ndCB3YW50IHRoaXMgYW55IG1vcmUgKi8KLQot CWRlYnVnKEYxMDEsInRyYXAgcHR5X21hc3Rlcl9mZCIsIiIscHR5X21hc3Rlcl9mZCk7Ci0JaWYg KHB0eV9tYXN0ZXJfZmQgPiAyKSB7Ci0JICAgIHggPSBjbG9zZShwdHlfbWFzdGVyX2ZkKTsKLQkg ICAgZGVidWcoRjEwMSwidHJhcCBwdHlfbWFzdGVyX2ZkIGNsb3NlIiwiIix4KTsKLQl9Ci0JcHR5 X21hc3Rlcl9mZCA9IC0xOwotCWRlYnVnKEYxMDEsInRyYXAgcHR5X3NsYXZlX2ZkIiwiIixwdHlf c2xhdmVfZmQpOwotCWlmIChwdHlfc2xhdmVfZmQgPiAyKSB7Ci0JICAgIHggPSBjbG9zZShwdHlf c2xhdmVfZmQpOwotCSAgICBkZWJ1ZyhGMTAxLCJ0cmFwIHB0eV9zbGF2ZV9mZCBjbG9zZSIsIiIs eCk7Ci0JfQotCXB0eV9zbGF2ZV9mZCA9IC0xOwotCWRlYnVnKEYxMDEsInRyYXAgcHR5X2Zvcmtf cGlkIiwiIixwdHlfZm9ya19waWQpOwotCWlmIChwdHlfZm9ya19waWQgPiAwKSB7Ci0JICAgIHgg PSBraWxsKHB0eV9mb3JrX3BpZCwwKTsJLyogU2VlIGlmIHRoZSBmb3JrIGlzIHJlYWxseSB0aGVy ZSAqLwotCSAgICBkZWJ1ZyhGMTExLCJ0cmFwIHB0eV9mb3JrX3BpZCBraWxsIDAgZXJybm8iLGNr aXRvYSh4KSxlcnJubyk7Ci0JICAgIGlmICh4ID09IDApIHsJCS8qIFNlZW1zIHRvIGJlIGFjdGl2 ZSAqLwotCQl4ID0ga2lsbChwdHlfZm9ya19waWQsU0lHSFVQKTsgLyogQXNrIGl0IHRvIGNsZWFu IHVwICYgZXhpdCAqLwotCQlkZWJ1ZyhGMTAxLCJ0cmFwIHB0eV9mb3JrX3BpZCBraWxsIFNJR0hV UCIsIiIseCk7Ci0JCW1zbGVlcCgxMDApOwotCQllcnJubyA9IDA7Ci0JCXggPSBraWxsKHB0eV9m b3JrX3BpZCwwKTsgLyogSXMgaXQgc3RpbGwgdGhlcmU/ICovCi0JCWlmICh4ID09IDAKLSNpZmRl ZiBFU1JDSAotCQkgICAgLyogVGhpcyBtb2R1bGUgaXMgbm90IGFsd2F5cyBleHBvc2VkIHRvIDxl cnJuby5oPiAqLwotCQkgICAgfHwgZXJybm8gIT0gRVNSQ0gKLSNlbmRpZgkvKiBFU1JDSCAqLwot CQkgICAgKSB7Ci0JCSAgICB4ID0ga2lsbChwdHlfZm9ya19waWQsU0lHS0lMTCk7Ci0JCSAgICBk ZWJ1ZyhGMTAxLCJ0cmFwIHB0eV9mb3JrX3BpZCBraWxsIFNJR0tJTEwiLCIiLHgpOwotCQl9Ci0J ICAgIH0KLQkgICAgcHR5X2ZvcmtfcGlkID0gLTE7Ci0JfQotICAgIH0KLSNlbmRpZgkvKiBORVRQ VFkgKi8KLQotI2lmZGVmIE9TSwotICAgIHNpZ21hc2soLTEpOwotLyoKLSAgV2UgYXJlIGluIGFu IGludGVyY2VwdCByb3V0aW5lIGJ1dCBkbyBub3QgcGVyZm9ybSBhIEYkUlRFIChkb25lIGltcGxp Y2l0bHkKLSAgYnkgcnRzKS4gIFdlIGhhdmUgdG8gZGVjcmVtZW50IHRoZSBzaWdtYXNrIGFzIEYk UlRFIGRvZXMuICBXYXJuaW5nOiBsb25nanVtcAotICBvbmx5IHJlc3RvcmVzIHRoZSBjcHUgcmVn aXN0ZXJzLCBOT1QgdGhlIGZwdSByZWdpc3RlcnMuICBTbyBkb24ndCB1c2UgZnB1IGF0Ci0gIGFs bCBvciBhdCBsZWFzdCBkb24ndCB1c2UgY29tbW9uIGZwdSAoZG91YmxlIG9yIGZsb2F0KSByZWdp c3RlciB2YXJpYWJsZXMuCi0qLwotI2VuZGlmIC8qIE9TSyAqLwotCi0jaWZkZWYgTlRTSUcKLSAg ICBQb3N0Q3RybENTZW0oKTsKLSNlbHNlIC8qIE5UU0lHICovCi0gICAgZGVidWcoRjEwMCwidHJh cCBhYm91dCB0byBsb25nam1wIiwiIiwwKTsKLSNpZmRlZiBOVAotICAgIGNrbG9uZ2ptcChja2ph ZGRyKGNtamJ1ZiksMSk7Ci0jZWxzZSAvKiBOVCAqLwotICAgIGNrbG9uZ2ptcChjbWpidWYsMSk7 Ci0jZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBOVFNJRyAqLwotI2Vsc2UgLyogTk9DQ1RSQVAg Ki8KLS8qIE5vIEN0cmwtQyB0cmFwLCBqdXN0IGV4aXQuICovCi0jaWZkZWYgQ0tfQ1VSU0VTICAg ICAgICAgICAgICAgICAgICAgICAgLyogQ3Vyc2VzIHN1cHBvcnQ/ICovCi0gICAgeHhzY3JlZW4o U0NSX0NXLDAsMEwsIiIpOyAgICAgICAgICAgLyogQ2xvc2UgY3Vyc2VzIHdpbmRvdyAqLwotI2Vu ZGlmIC8qIENLX0NVUlNFUyAqLwotICAgIGRvZXhpdChCQURfRVhJVCx3aGF0KTsgICAgICAgICAg ICAgIC8qIEV4aXQgcG9vcmx5ICovCi0jZW5kaWYgLyogTk9DQ1RSQVAgKi8KLSAgICBTSUdSRVRV Uk47Ci19Ci0KLQotLyogIEMgSyBfIFQgSSBNIEUgIC0tIFJldHVybnMgcG9pbnRlciB0byBjdXJy ZW50IHRpbWUuICovCi0KLWNoYXIgKgotY2tfdGltZSgpIHsKLSAgICBzdGF0aWMgY2hhciB0YnVm WzEwXTsKLSAgICBjaGFyICpwOwotICAgIGludCB4OwotCi0gICAgenRpbWUoJnApOyAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogIlRodSBGZWIgIDggMTI6MDA6MDAgMTk5MCIgKi8KLSAgICBp ZiAoIXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaWtlIGFzY3RpbWUoKSEgKi8K LSAgICAgIHJldHVybigiIik7Ci0gICAgaWYgKCpwKSB7Ci0gICAgICAgIGZvciAoeCA9IDExOyB4 IDwgMTk7IHgrKykgICAgICAgLyogY29weSBoaDptbTpzcyAqLwotICAgICAgICAgIHRidWZbeCAt IDExXSA9IHBbeF07ICAgICAgICAgIC8qIHRvIHRidWYgKi8KLSAgICAgICAgdGJ1Zls4XSA9IE5V TDsgICAgICAgICAgICAgICAgICAvKiB0ZXJtaW5hdGUgKi8KLSAgICB9Ci0gICAgcmV0dXJuKHRi dWYpOyAgICAgICAgICAgICAgICAgICAgICAgLyogYW5kIHJldHVybiBpdCAqLwotfQotCi0vKiAg QyBDIF8gQyBMIEUgQSBOICAtLSAgQ2xlYW51cCBhZnRlciB0ZXJtaW5hbCBpbnRlcnJ1cHQgaGFu ZGxlciAqLwotCi0jaWZkZWYgR0VNRE9TCi1pbnQKLWNjX2NsZWFuKCkgewotICAgIHpjbG9zZSha SUZJTEUpOyAgICAgICAgICAgICAgICAgICAgIC8qIElmIHdlIHdlcmUgdHJhbnNmZXJyaW5nIGEg ZmlsZSwgKi8KLSAgICB6Y2xvc2UoWk9GSUxFKTsgICAgICAgICAgICAgICAgICAgICAvKiBjbG9z ZSBpdC4gKi8KLSAgICBwcmludGYoIl5DLi4uXG4iKTsgICAgICAgICAgICAgICAgICAvKiBOb3Qg Vk1TLCBubyBwcm9ibGVtLi4uICovCi19Ci0jZW5kaWYgLyogR0VNRE9TICovCi0KLQotLyogIFMg VCBQIFQgUiBBIFAgLS0gSGFuZGxlIFNJR1RTVFAgKHN1c3BlbmQpIHNpZ25hbHMgKi8KLQotU0lH VFlQCi0jaWZkZWYgQ0tfQU5TSUMKLXN0cHRyYXAoaW50IHNpZykKLSNlbHNlCi1zdHB0cmFwKHNp ZykgaW50IHNpZzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogc3RwdHJhcCAqLyB7Ci0KLSNp Zm5kZWYgTk9KQwotICAgIGludCB4OyBleHRlcm4gaW50IGNtZmxnczsKLSAgICBkZWJ1ZyhGMTAx LCJzdHB0cmFwKCkgY2F1Z2h0IHNpZ25hbCIsIiIsc2lnKTsKLSAgICBpZiAoIXhzdXNwZW5kKSB7 Ci0gICAgICAgIHByaW50ZigiXHJcbnN1c3BlbmQgZGlzYWJsZWRcclxuIik7Ci0jaWZuZGVmIE5P SUNQCi0gICAgICAgIGlmICh3aGF0ICYgV19DT01NQU5EKSB7CQkvKiBJZiB3ZSB3ZXJlIHBhcnNp bmcgY29tbWFuZHMgKi8KLSAgICAgICAgICAgIHByb21wdCh4eHN0cmluZyk7ICAgICAgICAgICAv KiByZWlzc3VlIHRoZSBwcm9tcHQgYW5kIHBhcnRpYWwgKi8KLSAgICAgICAgICAgIGlmICghY21m bGdzKSAgICAgICAgICAgICAgICAvKiBjb21tYW5kIChpZiBhbnkpICovCi0gICAgICAgICAgICAg IHByaW50ZigiJXMiLGNtZGJ1Zik7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT0lDUCAqLwotICAg IH0gZWxzZSB7Ci0gICAgICAgIGNvbnJlcygpOyAgICAgICAgICAgICAgICAgICAgICAgLyogUmVz ZXQgdGhlIGNvbnNvbGUgKi8KLSNpZm5kZWYgT1MyCi0gICAgICAgIC8qIEZsdXNoIHBlbmRpbmcg b3V0cHV0IGZpcnN0LCBpbiBjYXNlIHdlIGFyZSBjb250aW51ZWQgKi8KLSAgICAgICAgLyogaW4g dGhlIGJhY2tncm91bmQsIHdoaWNoIGNvdWxkIG1ha2UgdXMgYmxvY2sgKi8KLSAgICAgICAgZmZs dXNoKHN0ZG91dCk7Ci0KLSAgICAgICAgeCA9IHBzdXNwZW5kKHhzdXNwZW5kKTsJCS8qIFRyeSB0 byBzdXNwZW5kLiAqLwotICAgICAgICBpZiAoeCA8IDApCi0jZW5kaWYgLyogT1MyICovCi0gICAg ICAgICAgcHJpbnRmKCJKb2IgY29udHJvbCBub3Qgc3VwcG9ydGVkXHJcbiIpOwotICAgICAgICBj b25pbnQodHJhcCxzdHB0cmFwKTsgICAgICAgICAgIC8qIFJlYXJtIHRoZSB0cmFwLiAqLwotICAg ICAgICBkZWJ1ZyhGMTAwLCJzdHB0cmFwIGJhY2sgZnJvbSBzdXNwZW5kIiwiIiwwKTsKLSAgICAg ICAgc3dpdGNoICh3aGF0KSB7Ci0gICAgICAgICAgY2FzZSBXX0NPTk5FQ1Q6ICAgICAgICAgICAg ICAgLyogSWYgc3VzcGVuZGVkIGR1cmluZyBDT05ORUNUPyAqLwotICAgICAgICAgICAgY29uYmlu KChjaGFyKWVzY2FwZSk7ICAgICAgIC8qIHB1dCBjb25zb2xlIGJhY2sgaW4gYmluYXJ5IG1vZGUg Ki8KLSAgICAgICAgICAgIGRlYnVnKEYxMDAsInN0cHRyYXAgV19DT05ORUNUIiwiIiwwKTsKLSAg ICAgICAgICAgIGJyZWFrOwotI2lmbmRlZiBOT0lDUAotICAgICAgICAgIGNhc2UgV19DT01NQU5E OiAgICAgICAgICAgICAgIC8qIFN1c3BlbmRlZCBpbiBjb21tYW5kIG1vZGUgKi8KLSAgICAgICAg ICAgIGRlYnVnKEYxMDEsInN0cHRyYXAgV19DT01NQU5EIHBmbGFnIiwiIixwZmxhZyk7Ci0gICAg ICAgICAgICBjb25jYigoY2hhcillc2NhcGUpOyAgICAgICAgLyogUHV0IGJhY2sgQ0JSRUFLIHR0 eSBtb2RlICovCi0gICAgICAgICAgICBpZiAocGZsYWcpIHsgICAgICAgICAgICAgICAgLyogSWYg Y29tbWFuZCBwYXJzaW5nIHdhcyAqLwotICAgICAgICAgICAgICAgIHByb21wdCh4eHN0cmluZyk7 ICAgICAgIC8qIHJlaXNzdWUgdGhlIHByb21wdCBhbmQgcGFydGlhbCAqLwotICAgICAgICAgICAg ICAgIGlmICghY21mbGdzKSAgICAgICAgICAgIC8qIGNvbW1hbmQgKGlmIGFueSkgKi8KLSAgICAg ICAgICAgICAgICAgIHByaW50ZigiJXMiLGNtZGJ1Zik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICBicmVhazsKLSNlbmRpZiAvKiBOT0lDUCAqLwotICAgICAgICAgIGRlZmF1bHQ6ICAgICAg ICAgICAgICAgICAgICAgIC8qIEFsbCBvdGhlciBjYXNlcy4uLiAqLwotICAgICAgICAgICAgZGVi dWcoRjEwMCwic3RwdHJhcCBkZWZhdWx0IiwiIiwwKTsKLSAgICAgICAgICAgIGNvbmNiKChjaGFy KWVzY2FwZSk7ICAgICAgICAvKiBQdXQgaXQgYmFjayBpbiBDQlJFQUsgbW9kZSAqLwotICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogTk9KQyAqLwotICAgIFNJ R1JFVFVSTjsKLX0KLQotI2lmZGVmIFRMT0cKLSNkZWZpbmUgVEJVRkwgMzAwCi0KLS8qICBUIEwg TyBHICAtLSAgTG9nIGEgcmVjb3JkIGluIHRoZSB0cmFuc2FjdGlvbiBmaWxlICAqLwotLyoKLSBD YWxsIHdpdGggYSBmb3JtYXQgYW5kIDMgYXJndW1lbnRzOiB0d28gc3RyaW5ncyBhbmQgYSBudW1i ZXI6Ci0gICBmICAgICAtIEZvcm1hdCwgYSBiaXQgc3RyaW5nIGluIHJhbmdlIDAtNywgYml0IHgg aXMgb24sIGFyZyAjeCBpcyBwcmludGVkLgotICAgczEsczIgLSBTdHJpbmcgYXJndW1lbnRzIDAg YW5kIDEuCi0gICBuICAgICAtIExvbmcsIGFyZ3VtZW50IDIuCi0qLwotVk9JRAotI2lmZGVmIENL X0FOU0lDCi1kb3Rsb2coaW50IGYsIGNoYXIgKnMxLCBjaGFyICpzMiwgQ0tfT0ZGX1QgbikKLSNl bHNlCi1kb3Rsb2coZixzMSxzMixuKSBpbnQgZjsgQ0tfT0ZGX1QgbjsgY2hhciAqczEsICpzMjsK LSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogZG90bG9nICovIHsKLSAgICBzdGF0aWMgY2hhciBz W1RCVUZMXTsKLSAgICBleHRlcm4gaW50IHRsb2dmbXQ7Ci0gICAgY2hhciAqc3AgPSBzOyBpbnQg eDsKLSAgICBpZiAoIXMxKSBzMSA9ICIiOwotICAgIGlmICghczIpIHMyID0gIiI7Ci0KLSAgICBp ZiAoIXRyYWxvZykgcmV0dXJuOyAgICAgICAgICAgICAgICAvKiBJZiBubyB0cmFuc2FjdGlvbiBs b2csIGRvbid0ICovCi0gICAgaWYgKHRsb2dmbXQgIT0gMSkgcmV0dXJuOwotICAgIHN3aXRjaCAo ZikgewotICAgICAgY2FzZSBGMDAwOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAgKHNwZWNp YWwpICJzMSBuIHMyIiAgKi8KLSAgICAgICAgaWYgKChpbnQpc3RybGVuKHMxKSArIChpbnQpc3Ry bGVuKHMyKSArIDE1ID4gVEJVRkwpCi0gICAgICAgICAgc3ByaW50ZihzcCwiP1QtTG9nIHN0cmlu ZyB0b28gbG9uZyIpOwotICAgICAgICBlbHNlCi0JICBzcHJpbnRmKHNwLCIlcyAlcyAlcyIsczEs Y2tmc3RvYShuKSxzMik7Ci0gICAgICAgIGlmICh6c291dGwoWlRGSUxFLHMpIDwgMCkgdHJhbG9n ID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEYwMDE6ICAgICAgICAgICAgICAgICAg ICAgICAgLyogMSwgIiBuIiAqLwotICAgICAgICBzcHJpbnRmKHNwLCIgJXMiLGNrZnN0b2Eobikp OwotICAgICAgICBpZiAoenNvdXRsKFpURklMRSxzKSA8IDApIHRyYWxvZyA9IDA7Ci0gICAgICAg IGJyZWFrOwotICAgICAgY2FzZSBGMDEwOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDIsICJb czJdIiAqLwotICAgICAgICB4ID0gKGludClzdHJsZW4oczIpOwotICAgICAgICBpZiAoczJbeF0g PT0gJ1xuJykgczJbeF0gPSAnXDAnOwotICAgICAgICBpZiAoeCArIDYgPiBUQlVGTCkKLSAgICAg ICAgICBzcHJpbnRmKHNwLCI/U3RyaW5nIHRvbyBsb25nIik7Ci0gICAgICAgIGVsc2Ugc3ByaW50 ZihzcCwiWyVzXSIsczIpOwotICAgICAgICBpZiAoenNvdXRsKFpURklMRSwiIikgPCAwKSB0cmFs b2cgPSAwOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRjAxMTogICAgICAgICAgICAgICAg ICAgICAgICAvKiAzLCAiW3MyXSBuIiAqLwotICAgICAgICB4ID0gKGludClzdHJsZW4oczIpOwot ICAgICAgICBpZiAoczJbeF0gPT0gJ1xuJykgczJbeF0gPSAnXDAnOwotICAgICAgICBpZiAoeCAr IDYgPiBUQlVGTCkKLSAgICAgICAgICBzcHJpbnRmKHNwLCI/U3RyaW5nIHRvbyBsb25nIik7Ci0g ICAgICAgIGVsc2Ugc3ByaW50ZihzcCwiWyVzXSAlcyIsczIsY2tmc3RvYShuKSk7Ci0gICAgICAg IGlmICh6c291dGwoWlRGSUxFLHMpIDwgMCkgdHJhbG9nID0gMDsKLSAgICAgICAgYnJlYWs7Ci0g ICAgICBjYXNlIEYxMDA6ICAgICAgICAgICAgICAgICAgICAgICAgLyogNCwgInMxIiAqLwotICAg ICAgICBpZiAoenNvdXRsKFpURklMRSxzMSkgPCAwKSB0cmFsb2cgPSAwOwotICAgICAgICBicmVh azsKLSAgICAgIGNhc2UgRjEwMTogICAgICAgICAgICAgICAgICAgICAgICAvKiA1LCAiczE6IG4i ICovCi0gICAgICAgIGlmICgoaW50KXN0cmxlbihzMSkgKyAxNSA+IFRCVUZMKQotICAgICAgICAg IHNwcmludGYoc3AsIj9TdHJpbmcgdG9vIGxvbmciKTsKLSAgICAgICAgZWxzZSBzcHJpbnRmKHNw LCIlczogJXMiLHMxLGNrZnN0b2EobikpOwotICAgICAgICBpZiAoenNvdXRsKFpURklMRSxzKSA8 IDApIHRyYWxvZyA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGMTEwOiAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDYsICJzMSBzMiIgKi8KLSAgICAgICAgeCA9IChpbnQpc3RybGVu KHMyKTsKLSAgICAgICAgaWYgKHMyW3hdID09ICdcbicpIHMyW3hdID0gJ1wwJzsKLSAgICAgICAg aWYgKChpbnQpc3RybGVuKHMxKSArIHggKyA0ID4gVEJVRkwpCi0gICAgICAgICAgc3ByaW50Zihz cCwiP1N0cmluZyB0b28gbG9uZyIpOwotICAgICAgICBlbHNlCi0JICBzcHJpbnRmKHNwLCIlcyVz JXMiLHMxLCgoKnMyID09ICc6JykgPyAiIiA6ICIgIiksczIpOwotICAgICAgICBpZiAoenNvdXRs KFpURklMRSxzKSA8IDApIHRyYWxvZyA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBG MTExOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDcsICJzMSBzMjogbiIgKi8KLSAgICAgICAg eCA9IChpbnQpc3RybGVuKHMyKTsKLSAgICAgICAgaWYgKHMyW3hdID09ICdcbicpIHMyW3hdID0g J1wwJzsKLSAgICAgICAgaWYgKChpbnQpc3RybGVuKHMxKSArIHggKyAxNSA+IFRCVUZMKQotICAg ICAgICAgIHNwcmludGYoc3AsIj9TdHJpbmcgdG9vIGxvbmciKTsKLSAgICAgICAgZWxzZQotCSAg c3ByaW50ZihzcCwiJXMlcyVzOiAlcyIsczEsKCgqczIgPT0gJzonKSA/ICIiIDogIiAiKSxzMixj a2ZzdG9hKG4pKTsKLSAgICAgICAgaWYgKHpzb3V0bChaVEZJTEUscykgPCAwKSB0cmFsb2cgPSAw OwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHNwcmludGYoc3AsIj9J bnZhbGlkIGZvcm1hdCBmb3IgdGxvZygpIC0gJWQiLGYpOwotICAgICAgICBpZiAoenNvdXRsKFpU RklMRSxzKSA8IDApIHRyYWxvZyA9IDA7Ci0gICAgfQotfQotCi0vKgotICBEIE8gWCBMIE8gRwot Ci0gIFRoaXMgaXMgdGhlIHRyYW5zYWN0aW9uLWxvZyB3cml0ZXIgZm9yIEJSSUVGIGZvcm1hdC4K LSAgVGhlIGlkZWEgaXMgcHJvZHVjZSBvbmUgcmVjb3JkIChsaW5lKSBwZXIgZmlsZS4gIEVhY2gg cmVjb3JkCi0gIGhhcyB0aGUgZm9sbG93aW5nIGRlbGltaXRlZCBmaWVsZHM6Ci0gICAgRGF0ZSAo eXl5eW1tZGQpCi0gICAgVGltZSAoaGg6bW06c3MpCi0gICAgQWN0aW9uOiBTRU5EIG9yIFJFQ1YK LSAgICBGaWxlIG5hbWUKLSAgICBGaWxlIHNpemUKLSAgICBUcmFuc2ZlciBtb2RlICh0ZXh0LCBi aW5hcnksIGltYWdlLCBsYWJlbGVkLCBldGMpLgotICAgIFN0YXR1czogT0sgb3IgRkFJTEVECi0g ICAgRnJlZS1mb3JtIGNvbW1lbnRzIGluIGRvdWJsZXF1b3RlcwotICBUaGUgZGVmYXVsdCBzZXBh cmF0b3IgaXMgY29tbWEuCi0gIElmIGEgZmllbGQgY29udGFpbnMgdGhlIHNlcGFyYXRvciwgaXQg aXMgZW5jbG9zZWQgaW4gZG91YmxlcXVvdGVzLgotKi8KLVZPSUQKLSNpZmRlZiBDS19BTlNJQwot ZG94bG9nKGludCB4LCBjaGFyICogZm4sIENLX09GRl9UIGZzLCBpbnQgZm0sIGludCBzdGF0dXMs IGNoYXIgKiBtc2cpCi0jZWxzZQotZG94bG9nKHgsIGZuLCBmcywgZm0sIHN0YXR1cywgbXNnKQot ICAgIGludCB4OyBjaGFyICogZm47IENLX09GRl9UIGZzOyBpbnQgZm07IGludCBzdGF0dXM7IGNo YXIgKiBtc2c7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGRveGxvZyAqLyB7Ci0gICAgZXh0 ZXJuIGludCB0bG9nc2VwOwotICAgIGNoYXIgc2VwWzJdOwotICAgIGNoYXIgYnVmW0NLTUFYUEFU SCsyNTZdLCAqIGJ1ZnA7Ci0gICAgY2hhciB0bXBidWZbMzJdOwotICAgIGNoYXIgKiBzLCAqIHA7 Ci0gICAgaW50IGxlbiwgbGVmdCwgZnRwID0gMCwgazsKLQotICAgIGlmICghdHJhbG9nKSByZXR1 cm47ICAgICAgICAgICAgICAgIC8qIElmIG5vIHRyYW5zYWN0aW9uIGxvZywgZG9uJ3QgKi8KLQot ICAgIGlmICghZm4pIGZuID0gIiI7ICAgICAgICAgICAgICAgICAgIC8qIFByb3RlY3QgYWdhaW5z dCBudWxsIHBvaW50ZXJzICovCi0gICAgaWYgKCFtc2cpIG1zZyA9ICIiOwotICAgIGlmICh4ICYg V19GVFApCi0gICAgICBmdHArKzsKLQotICAgIHNlcFswXSA9IChjaGFyKSB0bG9nc2VwOwotICAg IHNlcFsxXSA9IE5VTDsKLSAgICBpZiAoIXNlcFswXSkgc2VwWzBdID0gJywnOwotCi0gICAgYnVm cCA9IGJ1ZjsKLSAgICBsZWZ0ID0gc2l6ZW9mKGJ1Zik7Ci0gICAgZGVidWcoRjEwMSwiWFhYIGRv eGxvZyBsZWZ0IDEiLCIiLGxlZnQpOwotCi0gICAgcCA9IHp6bmRhdGUoKTsgICAgICAgICAgICAg ICAgICAgICAgLyogRGF0ZSAqLwotICAgIGNrbWFrbXNnKGJ1ZiwgbGVmdCwgcCA/IHAgOiAiMDAw MDAwMDAiLCBzZXAsIE5VTEwsIE5VTEwpOwotICAgIGJ1ZnAgKz0gOTsKLSAgICBsZWZ0IC09IDk7 Ci0gICAgZGVidWcoRjExMSwiWFhYIGRveGxvZyBsZWZ0IDIiLGJ1ZixsZWZ0KTsKLQotICAgIHp0 aW1lKCZwKTsKLSAgICBja3N0cm5jcHkoYnVmcCxwKzExLGxlZnQpOwotICAgIGJ1ZnAgKz0gODsK LSAgICBsZWZ0IC09IDg7Ci0gICAgZGVidWcoRjExMSwiWFhYIGRveGxvZyBsZWZ0IDMiLGJ1Zixs ZWZ0KTsKLQotICAgIGlmIChmdHApIHsKLQlpZiAoISh4ICYgKFdfU0VORHxXX1JFQ1YpKSkKLQkg IHJldHVybjsKLQlzID0gICh4ICYgV19TRU5EKSA/ICJQVVQiIDogIkdFVCI7Ci0JayA9IDM7Ci0g ICAgfSBlbHNlIHsKLQlzID0gICh4ICYgV19TRU5EKSA/ICJTRU5EIiA6ICJSRUNWIjsKLQlrID0g NDsKLSAgICB9Ci0gICAgY2ttYWttc2coYnVmcCxsZWZ0LHNlcCxzLHNlcCxOVUxMKTsKLSAgICBi dWZwICs9IGsgKyAyOwotICAgIGxlZnQgLT0gKGsgKyAyKTsKLSAgICBkZWJ1ZyhGMTExLCJYWFgg ZG94bG9nIGxlZnQgNCIsYnVmLGxlZnQpOwotCi0gICAgcyA9ICIiOwotICAgIGlmIChja3N0cmNo cihmbixzZXBbMF0pKQkJLyogRmlsZW5hbWUgKi8KLSAgICAgIHMgPSAiXCIiOwotICAgIGNrbWFr bXNnKGJ1ZnAsbGVmdCxzLGZuLHMsc2VwKTsKLSAgICBzcHJpbnRmKHRtcGJ1ZiwiJXMiLGNrZnN0 b2EoZnMpKTsJLyogU2l6ZSAqLwotICAgIGNrc3RybmNhdChidWYsdG1wYnVmLENLTUFYUEFUSCk7 Ci0gICAgY2tzdHJuY2F0KGJ1ZixzZXAsQ0tNQVhQQVRIKTsKLSAgICBkZWJ1ZyhGMTEwLCJkb3hs b2cgNCIsYnVmLDApOwotCi0jaWZkZWYgTk9JQ1AKLSAgICAvKiBUcmFuc2ZlciBtb2RlICovCi0g ICAgY2tzdHJuY3B5KHRtcGJ1ZiwgKGJpbmFyeSA/ICJiaW5hcnkiIDogInRleHQiKSwgVE1QQlVG U0laKTsKLSNlbHNlCi0gICAgY2tzdHJuY3B5KHRtcGJ1ZixnZm1vZGUoZm0sMCksVE1QQlVGU0la KTsKLSNlbmRpZiAvKiBOT0lDUCAqLwotICAgIGlmIChja3N0cmNocih0bXBidWYsc2VwWzBdKSkg eyAgICAgIC8qIE1pZ2h0IGNvbnRhaW4gc3BhY2VzICovCi0gICAgICAgIGNrc3RybmNhdChidWYs IlwiIixDS01BWFBBVEgpOwotICAgICAgICBja3N0cm5jYXQoYnVmLHRtcGJ1ZixDS01BWFBBVEgp OwotICAgICAgICBja3N0cm5jYXQoYnVmLCJcIiIsQ0tNQVhQQVRIKTsKLSAgICB9IGVsc2UKLSAg ICAgIGNrc3RybmNhdChidWYsdG1wYnVmLENLTUFYUEFUSCk7Ci0gICAgY2tzdHJuY2F0KGJ1Zixz ZXAsQ0tNQVhQQVRIKTsKLSAgICBkZWJ1ZyhGMTEwLCJkb3hsb2cgNSIsYnVmLDApOwotCi0gICAg Y2tzdHJuY2F0KGJ1Ziwgc3RhdHVzID8gIkZBSUxFRCIgOiAiT0siLENLTUFYUEFUSCk7Ci0gICAg bGVuID0gc3RybGVuKGJ1Zik7Ci0gICAgbGVmdCA9IENLTUFYUEFUSCsyNTYgLSBsZW47Ci0gICAg aWYgKGxlZnQgPCAyKSBmYXRhbCgiZG94bG9nIGJ1ZmZlciBvdmVybG93Iik7Ci0KLSAgICBkZWJ1 ZyhGMTExLCJYWFggZG94bG9nIGxlZnQgNSIsYnVmLGxlZnQpOwotCi0gICAgZGVidWcoRjExMCwi ZG94bG9nIGJ1ZiAxIiwgYnVmLCBsZW4pOwotICAgIHMgPSBidWYgKyBsZW47Ci0gICAgaWYgKHN0 YXR1cyA9PSAwICYmIGxlZnQgPiAzMikgewotICAgICAgICBsb25nIGNwcyA9IDBMOwotI2lmZGVm IEdGVElNRVIKLQlkZWJ1ZyhGMTAxLCJET1hMT0cgZnB4ZnNlY3MiLCIiLChsb25nKShmcHhmc2Vj cyAqIDEwMDApKTsKLSAgICAgICAgaWYgKGZweGZzZWNzKSBjcHMgPSAobG9uZykoKENLRkxPQVQp IGZzIC8gZnB4ZnNlY3MpOwotICAgICAgICBzcHJpbnRmKHMsIiVzXCIlMC4zZnNlYyAlbGRjcHNc IiIsc2VwLGZweGZzZWNzLGNwcyk7Ci0jZWxzZQotICAgICAgICBpZiAoeGZzZWNzKSBjcHMgPSBm cyAvIHhmc2VjczsKLSAgICAgICAgc3ByaW50ZihzLCIlc1wiJWxkc2VjICVsZGNwc1wiIixzZXAs eGZzZWNzLGNwcyk7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotICAgIH0gZWxzZSBpZiAoKGludClz dHJsZW4obXNnKSArIDQgPCBsZWZ0KSB7Ci0gICAgICAgIHNwcmludGYocywiJXNcIiVzXCIiLHNl cCxtc2cpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJYWFggZG94bG9nIGxlZnQgNSIsYnVmLGxl ZnQpOwotCi0gICAgZGVidWcoRjExMCwiZG94bG9nIDUiLGJ1ZiwwKTsKLSAgICB4ID0genNvdXRs KFpURklMRSxidWYpOwotICAgIGRlYnVnKEYxMDEsImRveGxvZyB6c291dGwiLCIiLHgpOwotICAg IGlmICh4IDwgMCkgdHJhbG9nID0gMDsKLX0KLSNlbmRpZiAvKiBUTE9HICovCi0KLSNpZm5kZWYg TUFDCi0vKgotICBUaGUgcmVzdCBvZiB0aGlzIGZpbGUgaXMgZm9yIGFsbCBpbXBsZW1lbnRhdGlv bnMgYnV0IHRoZSBNYWNpbnRvc2guCi0qLwotCi0jaWZkZWYgQ0tfQ1VSU0VTCi1zdGF0aWMgaW50 IHJlcGFpbnQgPSAwOyAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXIgZGlzcGxheSBuZWVkcyBy ZXBhaW50aW5nICovCi0jZW5kaWYgLyogQ0tfQ1VSU0VTICovCi0KLSNpZm5kZWYgTk9YRkVSCi0v KiAgQyBIIEsgSSBOIFQgIC0tICBDaGVjayBmb3IgY29uc29sZSBpbnRlcnJ1cHRzICAqLwotCi0v KgotICBVc2VkIGR1cmluZyBmaWxlIHRyYW5zZmVyIGluIGxvY2FsIG1vZGUgb25seToKLSAgLiBJ ZiB1c2VyIGhhcyBub3QgdG91Y2hlZCB0aGUga2V5Ym9hcmQsIHJldHVybnMgMCB3aXRoIG5vIHNp ZGUgZWZmZWN0cy4KLSAgLiBJZiB1c2VyIHR5cGVkIFMgb3IgQSAoZXRjLCBzZWUgYmVsb3cpIHBy aW50cyBzdGF0dXMgbWVzc2FnZSBhbmQgcmV0dXJucyAwLgotICAuIElmIHVzZXIgdHlwZWQgWCBv ciBGIChldGMsIHNlZSBiZWxvdykgcmV0dXJucyAwIHdpdGggY3hzZWVuIHNldCB0byAxLgotICAu IElmIHVzZXIgdHlwZWQgWiBvciBCIChldGMsIHNlZSBiZWxvdykgcmV0dXJucyAwIHdpdGggY3pz ZWVuIHNldCB0byAxLgotICAuIElmIHVzZXIgdHlwZWQgRSBvciBDIChldGMsIHNlZSBiZWxvdykg cmV0dXJucyAtMS4KLSovCi1pbnQKLWNoa2ludCgpIHsKLSAgICBpbnQgY2gsIGNuLCBvZmQ7IGxv bmcgeno7Ci0gICAgaWYgKCF4ZnJpbnQpCi0gICAgICByZXR1cm4oMCk7Ci0gICAgaWYgKCghbG9j YWwpIHx8IChxdWlldCkpIHJldHVybigwKTsgLyogT25seSBkbyB0aGlzIGlmIGxvY2FsICYgbm90 IHF1aWV0ICovCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICBpZiAoY29uX3JlYWRzX210KSAgICAg ICAgICAgICAgICAgICAvKiBpZiBjb25pbnRfbXQgdGFzayBpcyBhY3RpdmUgKi8KLSAgICAgIGlm IChjb25pbnRfYXZsKSB7ICAgICAgICAgICAgICAgICAvKiBhbmQgdGhlcmUncyBhbiBpbnRlcnJ1 cHQgcGVuZGluZyAqLwotICAgICAgICAgIGNuID0gMTsgICAgICAgICAgICAgICAgICAgICAgIC8q IHByb2Nlc3MgaXQgKi8KLSAgICAgICAgICBjaCA9IGNvbmludF9jaDsKLSAgICAgICAgICBjb25p bnRfYXZsID0gMDsgICAgICAgICAgICAgICAvKiB0dXJuIG9mZiBmbGFnIHNvIGNvbmludF9tdCBj YW4gKi8KLSAgICAgIH0gZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm9jZWVk ICovCi0gICAgICAgIHJldHVybigwKTsKLSAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBpZiBjb25pbnRfbXQgbm90IGFjdGl2ZSAqLwotICAgICAgaWYgKChjaCA9IGNv bmluYygyKSkgPCAwKSAgICAgICAgIC8qIHRyeSB0byBnZXQgY2hhciBtYW51YWxseSAqLwotICAg ICAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIEkvTyBlcnJvciwgb3Igbm8g ZGF0YSAqLwotICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlmIHN1 Y2Nlc3NmdWwsIHNldCBjbiBzbyB3ZSAqLwotICAgICAgICBjbiA9IDE7ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIGtub3cgd2UgZ290IG9uZSAqLwotICAgIGRlYnVnKEYxMDEsImNoa2ludCBn b3Qga2V5Ym9hcmQgY2hhcmFjdGVyIixjaCxjbik7Ci0jZWxzZSAvKiAhZGF0YWdlbmVyYWwgKi8K LSNpZmRlZiBOVFNJRwotICAgIHsKLSAgICAgICAgZXh0ZXJuIGludCBUbHNJbmRleDsKLSAgICAg ICAgc3RydWN0IF90aHJlYWRpbmZvICogdGhyZWFkaW5mbzsKLSAgICAgICAgdGhyZWFkaW5mbyA9 IChzdHJ1Y3QgX3RocmVhZGluZm8gKikgVGxzR2V0VmFsdWUoVGxzSW5kZXgpOwotICAgICAgICBp ZiAodGhyZWFkaW5mbykgewotICAgICAgICAgICAgaWYgKCFXYWl0U2VtKHRocmVhZGluZm8tPkRp ZVNlbSwwKSkKLSAgICAgICAgICAgICAgcmV0dXJuIC0xOyAgICAgICAgICAgICAgICAvKiBDYW5j ZWwgSW1tZWRpYXRlbHkgKi8KLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBOVFNJRyAqLwot ICAgIGNuID0gY29uY2hrKCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIEFueSBpbnB1dCB3YWl0 aW5nPyAqLwotICAgIGRlYnVnKEYxMDEsImNvbmNoayIsIiIsY24pOwotICAgIGlmIChjbiA8IDEp IHJldHVybigwKTsKLSAgICBjaCA9IGNvbmluYyg1KSA7Ci0gICAgZGVidWcoRjEwMSwiY29uaW5j IiwiIixjaCk7Ci0gICAgaWYgKGNoIDwgMCkgcmV0dXJuKDApOwotI2VuZGlmIC8qIGRhdGFnZW5l cmFsICovCi0KLSAgICBjaCAmPSAwMTc3OwotICAgIHN3aXRjaCAoY2gpIHsKLSAgICAgIGNhc2Ug J0EnOiBjYXNlICdhJzogY2FzZSAwMDAxOiAgICAvKiBTdGF0dXMgcmVwb3J0ICovCi0gICAgICBj YXNlICdTJzogY2FzZSAncyc6Ci0gICAgICAgIGlmIChmZGlzcGxhICE9IFhZRkRfUiAmJiBmZGlz cGxhICE9IFhZRkRfUyAmJiBmZGlzcGxhICE9IFhZRkRfTikKLSAgICAgICAgICByZXR1cm4oMCk7 ICAgICAgICAgICAgICAgICAgICAvKiBPbmx5IGZvciBzZXJpYWwsIHNpbXBsZSBvciBub25lICov Ci0gICAgICAgIG9mZCA9IGZkaXNwbGE7ICAgICAgICAgICAgICAgICAgLyogW01GXSBTYXZlIGZp bGUgZGlzcGxheSB0eXBlICovCi0gICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfTikKLSAgICAg ICAgICBmZGlzcGxhID0gWFlGRF9SOyAgICAgICAgICAgICAvKiBbTUZdIFByZXRlbmQgc2VyaWFs IGlmIG5vIGRpc3BsYXkgKi8KLSAgICAgICAgeHhzY3JlZW4oU0NSX1ROLDAsMGwsIlN0YXR1cyBy ZXBvcnQ6Iik7Ci0gICAgICAgIHh4c2NyZWVuKFNDUl9UTiwwLDBsLCIgZmlsZSB0eXBlOiAiKTsK LSAgICAgICAgaWYgKGJpbmFyeSkgewotICAgICAgICAgICAgc3dpdGNoKGJpbmFyeSkgewotICAg ICAgICAgICAgICBjYXNlIFhZRlRfTDogeHhzY3JlZW4oU0NSX1RaLDAsMGwsImxhYmVsZWQiKTsg YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgWFlGVF9JOiB4eHNjcmVlbihTQ1JfVFosMCwwbCwi aW1hZ2UiKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgWFlGVF9VOiB4eHNjcmVlbihTQ1Jf VFosMCwwbCwiYmluYXJ5IHVuZGVmaW5lZCIpOyBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVs dDoKLSAgICAgICAgICAgICAgY2FzZSBYWUZUX0I6IHh4c2NyZWVuKFNDUl9UWiwwLDBsLCJiaW5h cnkiKTsgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0jaWZkZWYgTk9D U0VUUwotICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1RaLDAsMGwsInRleHQiKTsKLSNlbHNlCi0g ICAgICAgICAgICB4eHNjcmVlbihTQ1JfVFUsMCwwbCwidGV4dCwgIik7Ci0gICAgICAgICAgICBp ZiAodGNoYXJzZXQgPT0gVENfVFJBTlNQIHx8IHhmcnhsYSA9PSAwKSB7Ci0gICAgICAgICAgICAg ICAgeHhzY3JlZW4oU0NSX1RaLDAsMGwsInRyYW5zcGFyZW50Iik7Ci0gICAgICAgICAgICB9IGVs c2UgewotICAgICAgICAgICAgICAgIGlmICh3aGF0ICYgV19TRU5EKSB7Ci0gICAgICAgICAgICAg ICAgICAgIHh4c2NyZWVuKFNDUl9UWiwwLDBsLHRjc2luZm9bdGNoYXJzZXRdLmtleXdvcmQpOwot ICAgICAgICAgICAgICAgICAgICB4eHNjcmVlbihTQ1JfVFUsMCwwbCwiID0+ICIpOwotICAgICAg ICAgICAgICAgICAgICB4eHNjcmVlbihTQ1JfVFosMCwwbCxmY3NpbmZvW2ZjaGFyc2V0XS5rZXl3 b3JkKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB4eHNj cmVlbihTQ1JfVFosMCwwbCxmY3NpbmZvW2ZjaGFyc2V0XS5rZXl3b3JkKTsKLSAgICAgICAgICAg ICAgICAgICAgeHhzY3JlZW4oU0NSX1RVLDAsMGwsIiA9PiAiKTsKLSAgICAgICAgICAgICAgICAg ICAgeHhzY3JlZW4oU0NSX1RaLDAsMGwsdGNzaW5mb1t0Y2hhcnNldF0ua2V5d29yZCk7Ci0gICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSAgICAg ICAgfQotICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCxmaWxjbnQsIiBmaWxlIG51bWJlciIpOwot ICAgICAgICBpZiAoZnNpemUpIHh4c2NyZWVuKFNDUl9RRSwwLGZzaXplLCIgc2l6ZSIpOwotICAg ICAgICB4eHNjcmVlbihTQ1JfUUUsMCxmZmMsIiBjaGFyYWN0ZXJzIHNvIGZhciIpOwotICAgICAg ICBpZiAoZnNpemUgPiAwTCkgewotI2lmZGVmIENLX1JFU0VORAotICAgICAgICAgICAgenogPSB3 aGF0ICYgV19TRU5EID8gc2VuZHN0YXJ0IDogd2hhdCAmIFdfUkVDViA/IHJzX2xlbiA6IDA7Ci0g ICAgICAgICAgICB6eiA9ICggKGZmYyArIHp6KSAqIDEwMEwgKSAvIGZzaXplOwotI2Vsc2UKLSAg ICAgICAgICAgIHp6ID0gKCBmZmMgKiAxMDBMICkgLyBmc2l6ZTsKLSNlbmRpZiAvKiBDS19SRVNF TkQgKi8KLSAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9RRSwwLHp6LCAgICAgICIgcGVyY2VudCBk b25lIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGJjdHUgPT0gNCkgeyAgICAgICAgICAgICAg ICAvKiBCbG9jayBjaGVjayAqLwotICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1RVLDAsMEwsIiBi bG9jayBjaGVjazogIik7Ci0gICAgICAgICAgICB4eHNjcmVlbihTQ1JfVFosMCwwTCwiYmxhbmst ZnJlZS0yIik7Ci0gICAgICAgIH0gZWxzZSB4eHNjcmVlbihTQ1JfUUUsMCwobG9uZyliY3R1LCAg IiBibG9jayBjaGVjayIpOwotICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCwobG9uZylycHRmbGcs IiBjb21wcmVzc2lvbiIpOwotICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCwobG9uZyllYnFmbGcs IiA4dGgtYml0IHByZWZpeGluZyIpOwotICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCwobG9uZyls c2NhcHUsIiBsb2NraW5nIHNoaWZ0cyIpOwotICAgICAgICBpZiAoIW5ldHdvcmspCi0gICAgICAg ICAgeHhzY3JlZW4oU0NSX1FFLDAsIHNwZWVkLCAiIHNwZWVkIik7Ci0gICAgICAgIGlmICh3aGF0 ICYgV19TRU5EKQotCi0gICAgICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsc3BzaXosICIgcGFja2V0 IGxlbmd0aCIpOwotICAgICAgICBlbHNlIGlmICh3aGF0ICYgV19SRUNWIHx8IHdoYXQgJiBXX1JF TU8pCi0gICAgICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsdXJwc2l6LCIgcGFja2V0IGxlbmd0aCIp OwotICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCx3c2xvdHMsICAiIHdpbmRvdyBzbG90cyIpOwot ICAgICAgICBmZGlzcGxhID0gb2ZkOyAvKiBbTUZdIFJlc3RvcmUgZmlsZSBkaXNwbGF5IHR5cGUg Ki8KLSAgICAgICAgcmV0dXJuKDApOwotCi0gICAgICBjYXNlICdCJzogY2FzZSAnYic6IGNhc2Ug MDAwMjogICAgLyogQ2FuY2VsIGJhdGNoICovCi0gICAgICBjYXNlICdaJzogY2FzZSAneic6IGNh c2UgMDAzMjoKLSAgICAgICAgY3pzZWVuID0gMTsKLSAgICAgICAgaW50ZXJydXB0ZWQgPSAxOwot ICAgICAgICB4eHNjcmVlbihTQ1JfU1QsU1RfTVNHLDBsLAotICAgICAgICAgICAgICAgICAoKCh3 aGF0ICYgV19SRUNWKSAmJiAod3Nsb3RzID4gMSkpID8KLSAgICAgICAgICAgICAgICAgICJDYW5j ZWxpbmcgYmF0Y2gsIHdhaXQuLi4gIiA6Ci0gICAgICAgICAgICAgICAgICAiQ2FuY2VsaW5nIGJh dGNoLi4uICIpCi0gICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIHJldHVybigwKTsKLQotICAg ICAgY2FzZSAnRic6IGNhc2UgJ2YnOiBjYXNlIDAwMDY6ICAgIC8qIENhbmNlbCBmaWxlICovCi0g ICAgICBjYXNlICdYJzogY2FzZSAneCc6IGNhc2UgMDAzMDoKLSAgICAgICAgY3hzZWVuID0gMTsK LSAgICAgICAgaW50ZXJydXB0ZWQgPSAxOwotICAgICAgICB4eHNjcmVlbihTQ1JfU1QsU1RfTVNH LDBsLAotICAgICAgICAgICAgICAgICAoKCh3aGF0ICYgV19SRUNWKSAmJiAod3Nsb3RzID4gMSkp ID8KLSAgICAgICAgICAgICAgICAgICJDYW5jZWxpbmcgZmlsZSwgd2FpdC4uLiAiIDoKLSAgICAg ICAgICAgICAgICAgICJDYW5jZWxpbmcgZmlsZS4uLiAiKQotICAgICAgICAgICAgICAgICApOwot ICAgICAgICByZXR1cm4oMCk7Ci0KLSAgICAgIGNhc2UgJ1InOiBjYXNlICdyJzogY2FzZSAwMDIy OiAgICAvKiBSZXNlbmQgcGFja2V0ICovCi0gICAgICBjYXNlIDAwMTU6IGNhc2UgMDAxMjoKLSNp ZmRlZiBTVFJFQU1JTkcKLSAgICAgICAgaWYgKHN0cmVhbWluZykKLSAgICAgICAgICByZXR1cm4o MCk7Ci0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0gICAgICAgIHh4c2NyZWVuKFNDUl9TVCxTVF9N U0csMGwsIlJlc2VuZGluZyBwYWNrZXQuLi4gIik7Ci0gICAgICAgIG51bWVycnMrKzsKLSAgICAg ICAgcmVzZW5kKHdpbmxvKTsKLSAgICAgICAgcmV0dXJuKDApOwotCi0jaWZkZWYgZGF0YWdlbmVy YWwKLSAgICAgIGNhc2UgJ1wwMyc6ICAgICAgICAgICAgICAgICAgICAgICAvKiBXZSdyZSBub3Qg dHJhcHBpbmcgXkMncyB3aXRoICovCi0gICAgICAgIHRyYXAoMCk7ICAgICAgICAgICAgICAgICAg ICAgICAgLyogc2lnbmFscywgc28gd2UgY2hlY2sgaGVyZSAgICAqLwotI2VuZGlmIC8qIGRhdGFn ZW5lcmFsICovCi0KLSAgICAgIGNhc2UgJ0MnOiBjYXNlICdjJzogICAgICAgICAgICAgICAvKiBD dHJsLUMgKi8KLSNpZm5kZWYgZGF0YWdlbmVyYWwKLSAgICAgIGNhc2UgJ1wwMyc6Ci0jZW5kaWYg LyogZGF0YWdlbmVyYWwgKi8KLQotICAgICAgY2FzZSAnRSc6IGNhc2UgJ2UnOiAgICAgICAgICAg ICAgIC8qIFNlbmQgZXJyb3IgcGFja2V0ICovCi0gICAgICBjYXNlIDAwMDU6Ci0gICAgICAgIGlu dGVycnVwdGVkID0gMTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLQotI2lmZGVmIENLX0NVUlNFUwot ICAgICAgY2FzZSAwMDE0OiAgICAgICAgICAgICAgICAgICAgICAgIC8qIEN0cmwtTCB0byByZWZy ZXNoIHNjcmVlbiAqLwotICAgICAgY2FzZSAnTCc6IGNhc2UgJ2wnOiAgICAgICAgICAgICAgIC8q IEFsc28gYWNjZXB0IEwgKHVwcGVyLCBsb3dlcikgKi8KLSAgICAgIGNhc2UgMDAyNzogICAgICAg ICAgICAgICAgICAgICAgICAvKiBDdHJsLVcgc3lub255bSBmb3IgVk1TICYgSW5ncmVzICovCi0g ICAgICAgIHJlcGFpbnQgPSAxOwotICAgICAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogQ0tfQ1VS U0VTICovCi0KLSAgICAgIGNhc2UgJ1QnOgotICAgICAgY2FzZSAndCc6CQkJCS8qIFR1cm4gb24g ZGVidWctbG9nIHRpbWVzdGFtcHMgKi8KLSNpZmRlZiBERUJVRwotCXsKLQkgICAgZXh0ZXJuIGlu dCBkZWJ0aW07Ci0JICAgIGlmIChjaCA9PSAnVCcpIHsKLQkJZGVidGltID0gMTsKLQkJeHhzY3Jl ZW4oU0NSX1NULFNUX01TRywwbCwKLQkJCSAiRGVidWcgdGltZXN0YW1wcyBPbi4uLiAiKTsKLQkg ICAgfSBlbHNlIHsKLQkJZGVidGltID0gMTsKLQkJeHhzY3JlZW4oU0NSX1NULFNUX01TRywwbCwK LQkJCSAiRGVidWcgdGltZXN0YW1wcyBPZmYuLi4gIik7Ci0JICAgIH0KLQl9Ci0jZW5kaWYgLyog REVCVUcgKi8KLQlyZXR1cm4oMCk7Ci0KLSAgICAgIGNhc2UgJ0QnOgotI2lmZGVmIERFQlVHCi0J aWYgKCFkZWJsb2cpIHsKLQkgICAgZGVib3BuKCJkZWJ1Zy5sb2ciLDApOwotCSAgICBpZiAoZGVi bG9nKSB7Ci0JCXh4c2NyZWVuKFNDUl9TVCxTVF9NU0csMGwsImRlYnVnLmxvZyBvcGVuLi4uICIp OwotCSAgICB9IGVsc2UgewotCQl4eHNjcmVlbihTQ1JfU1QsU1RfTVNHLDBsLCJkZWJ1Zy5sb2cg b3BlbiBGQUlMRUQuLi4gIik7Ci0JICAgIH0KLQl9IGVsc2UgewotCSAgICB4eHNjcmVlbihTQ1Jf U1QsU1RfTVNHLDBsLCJEZWJ1ZyBsb2cgT24uLi4gIik7Ci0JfQotCWlmIChkZWJsb2cpCi0JICBk ZWJvayA9IDE7Ci0jZW5kaWYgLyogREVCVUcgKi8KLQlyZXR1cm4oMCk7Ci0KLSAgICAgIGNhc2Ug J2QnOgkJCQkvKiBUdXJuIG9mZiBkZWJ1Z2dpbmcgKi8KLSNpZmRlZiBERUJVRwotCWlmIChkZWJs b2cpCi0JICB4eHNjcmVlbihTQ1JfU1QsU1RfTVNHLDBsLCJEZWJ1ZyBsb2cgT2ZmLi4uICIpOwot CWRlYm9rID0gMDsKLSNlbmRpZiAvKiBERUJVRyAqLwotCXJldHVybigwKTsKLQotICAgICAgZGVm YXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFueXRoaW5nIGVsc2UsIHByaW50IG1l c3NhZ2UgKi8KLSAgICAgICAgaW50bXNnKDFMKTsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0K LX0KLQotLyogIEkgTiBUIE0gUyBHICAtLSAgSXNzdWUgbWVzc2FnZSBhYm91dCB0ZXJtaW5hbCBp bnRlcnJ1cHRzICAqLwotCi1WT0lECi0jaWZkZWYgQ0tfQU5TSUMKLWludG1zZyhsb25nIG4pCi0j ZWxzZQotaW50bXNnKG4pIGxvbmcgbjsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogaW50bXNn ICovIHsKLSNpZmRlZiBDS19ORUVEX1NJRwotICAgIGNoYXIgYnVmWzgwXTsKLSNlbmRpZiAvKiBD S19ORUVEX1NJRyAqLwotCi0gICAgaWYgKCFkaXNwbGEgfHwgcXVpZXQpICAgICAgICAgICAgICAg LyogTm90IGlmIHdlJ3JlIGJlaW5nIHF1aWV0ICovCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHNl cnZlciAmJiAoIXNydmRpcyB8fCBuID4gLTFMKSkgLyogU3BlY2lhbCBmb3Igc2VydmVyICovCi0g ICAgICByZXR1cm47Ci0jaWZkZWYgQ0tfTkVFRF9TSUcKLSAgICBidWZbMF0gPSBOVUw7ICAgICAg ICAgICAgICAgICAgICAgICAvKiBLZWVwIGNvbXBpbGVycyBoYXBweSAqLwotI2VuZGlmIC8qIENL X05FRURfU0lHICovCi0jaWZuZGVmIE9YT1MKLSNpZmRlZiBTVk9SUE9TSVgKLSAgICBjb25jaGso KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBvdXQgcGVuZGluZyBlc2NhcGUt c2lnbmFscyAqLwotI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwotI2VuZGlmIC8qICEgT1hPUyAqLwot I2lmZGVmIFZNUwotICAgIGNvbnJlcygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNv IEN0cmwtQyB3aWxsIHdvcmsgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSAgICBpZiAoKCFzZXJ2ZXIg JiYgbiA9PSAxTCkgfHwgKHNlcnZlciAmJiBuIDwgMEwpKSB7Ci0KLSNpZmRlZiBDS19ORUVEX1NJ RwotICAgICAgICBpZiAoeGZyaW50KSB7Ci0JICAgIGNrbWFrbXNnKGJ1ZiwKLQkJICAgICA4MCwK LQkJICAgICAiVHlwZSBlc2NhcGUgY2hhcmFjdGVyICgiLAotCQkgICAgIGRiY2hyKGVzY2FwZSks Ci0JCSAgICAgIikgZm9sbG93ZWQgYnk6IiwKLQkJICAgICBOVUxMCi0JCSAgICAgKTsKLSAgICAg ICAgICAgIHh4c2NyZWVuKFNDUl9UTiwwLDBsLGJ1Zik7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBD S19ORUVEX1NJRyAqLwotCi0gICAgICAgIGlmICh4ZnJpbnQpIHsKLSAgICAgICAgICAgIGlmIChw cm90b2NvbCA9PSBQUk9UT19LKSB7Ci0geHhzY3JlZW4oU0NSX1ROLDAsMGwsIlggdG8gY2FuY2Vs IGZpbGUsICBDUiB0byByZXNlbmQgY3VycmVudCBwYWNrZXQiKTsKLSB4eHNjcmVlbihTQ1JfVE4s MCwwbCwiWiB0byBjYW5jZWwgZ3JvdXAsIEEgZm9yIHN0YXR1cyByZXBvcnQiKTsKLSB4eHNjcmVl bihTQ1JfVE4sMCwwbCwiRSB0byBzZW5kIEVycm9yIHBhY2tldCwgQ3RybC1DIHRvIHF1aXQgaW1t ZWRpYXRlbHk6ICIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB4eHNj cmVlbihTQ1JfVE4sMCwwbCwiQ3RybC1DIHRvIGNhbmNlbCBmaWxlIHRyYW5zZmVyOiAiKTsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9U TiwwLDBsLCJUcmFuc2ZlciBpbnRlcnJ1cHRpb24gZGlzYWJsZWQuICIpOwotICAgICAgICB9Ci0g ICAgfQotICAgIGVsc2UgeHhzY3JlZW4oU0NSX1RVLDAsMGwsIiAiKTsKLX0KLQotI2lmbmRlZiBO T0RJU1BMQVkKLXN0YXRpYyBpbnQgbmV3ZHB5ID0gMDsgICAgICAgICAgICAgICAgICAvKiBOZXcg ZGlzcGxheSBmbGFnICovCi1zdGF0aWMgY2hhciBmYnVmWzgwXTsgICAgICAgICAgICAgICAgICAg LyogRmlsZW5hbWUgYnVmZmVyICovCi1zdGF0aWMgY2hhciBhYnVmWzgwXTsgICAgICAgICAgICAg ICAgICAgLyogQXMtbmFtZSBidWZmZXIgKi8KLXN0YXRpYyBjaGFyIGEyYnVmWzgwXTsgICAgICAg ICAgICAgICAgICAvKiBTZWNvbmQgQXMtbmFtZSBidWZmZXIgKi8KLXN0YXRpYyBDS19PRkZfVCBv bGRmZmMgPSAwTDsKLXN0YXRpYyBDS19PRkZfVCBkb3RzID0gMEw7Ci1zdGF0aWMgaW50IGhwb3Mg PSAwOwotCi1zdGF0aWMgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlh bGl6ZSBTZXJpYWwgb3IgQ1JUIGRpc3BsYXkgKi8KLWRweWluaXQoKSB7Ci0gICAgaW50IG0gPSAw LCBuID0gMDsKLSAgICBjaGFyICogcyA9ICIiOwotCi0gICAgbmV3ZHB5ID0gMDsgICAgICAgICAg ICAgICAgICAgICAgICAgLyogIERvbid0IGRvIHRoaXMgYWdhaW4gKi8KLSAgICBvbGRmZmMgPSAo Q0tfT0ZGX1QpMDsJCS8qICBSZXNldCB0aGlzICovCi0gICAgZG90cyA9IChDS19PRkZfVCkwOwkJ CS8qICBhbmQgdGhpcy4uICovCi0gICAgb2xkY3BzID0gY3BzID0gMEw7Ci0KLSAgICBjb25vbGwo IiIpOwkJCQkvKiBOZXcgbGluZSAqLwotICAgIGlmICh3aGF0ICYgV19TRU5EKSBzID0gIlNlbmRp bmc6ICI7CS8qIEFjdGlvbiAqLwotICAgIGVsc2UgaWYgKHdoYXQgJiBXX1JFQ1YpIHMgPSAiUmVj ZWl2aW5nOiAiOwotICAgIG4gPSAoaW50KXN0cmxlbihzKSArIChpbnQpc3RybGVuKGZidWYpOwot ICAgIGNvbm9sKGZidWYpOwotICAgIG0gPSAoaW50KXN0cmxlbihhYnVmKSArIDQ7Ci0gICAgaWYg KG4gKyBtID4gY21kX2NvbHMpIHsKLSAgICAgICAgY29ub2xsKCIiKTsKLSAgICAgICAgbiA9IDA7 Ci0gICAgfSBlbHNlCi0gICAgICBuICs9IG07Ci0gICAgaWYgKCphYnVmKSB7Ci0gICAgICAgIGNv bm9sKCIgPT4gIik7Ci0gICAgICAgIGNvbm9sKGFidWYpOwotICAgIH0KLSAgICBtID0gKGludClz dHJsZW4oYTJidWYpICsgNDsKLSAgICBpZiAobiArIG0gPiBjbWRfY29scykgewotICAgICAgICBj b25vbGwoIiIpOwotICAgICAgICBuID0gMDsKLSAgICB9IGVsc2UKLSAgICAgIG4gKz0gbTsKLSAg ICBpZiAoKmEyYnVmKSB7Ci0gICAgICAgIGNvbm9sKCIgPT4gIik7Ci0gICAgICAgIGNvbm9sKGEy YnVmKTsKLSAgICB9Ci0gICAgKmZidWYgPSBOVUw7ICphYnVmID0gTlVMOyAqYTJidWYgPSBOVUw7 Ci0gICAgY29ub2xsKCIiKTsKLSAgICBpZiAoZnNpemUgPiAoQ0tfT0ZGX1QpLTEpIHsJCS8qIFNp emUgKi8KLSAgICAgICAgc3ByaW50ZihmYnVmLCJTaXplOiAlcywgVHlwZTogIixja2ZzdG9hKGZz aXplKSk7IC8qIFNBRkUgKDgwKSAqLwotICAgICAgICBjb25vbChmYnVmKTsgKmZidWYgPSBOVUw7 Ci0gICAgfSBlbHNlIGNvbm9sKCJTaXplOiB1bmtub3duLCBUeXBlOiAiKTsKLSAgICBpZiAoYmlu YXJ5KSB7CQkJLyogVHlwZSAqLwotICAgICAgICBzd2l0Y2goYmluYXJ5KSB7Ci0gICAgICAgICAg ICAgIGNhc2UgWFlGVF9MOiBjb25vbCgibGFiZWxlZCIpOyBicmVhazsKLSAgICAgICAgICAgICAg Y2FzZSBYWUZUX0k6IGNvbm9sKCJpbWFnZSIpOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBY WUZUX1U6IGNvbm9sKCJiaW5hcnkgdW5kZWZpbmVkIik7IGJyZWFrOwotICAgICAgICAgICAgICBk ZWZhdWx0OgotICAgICAgICAgICAgICBjYXNlIFhZRlRfQjogY29ub2woImJpbmFyeSIpOyBicmVh azsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0jaWZkZWYgTk9DU0VUUwotICAgICAgICBjb25v bCgidGV4dCIpOwotI2Vsc2UKLSAgICAgICAgY29ub2woInRleHQsICIpOwotICAgICAgICBpZiAo dGNoYXJzZXQgPT0gVENfVFJBTlNQIHx8IHhmcnhsYSA9PSAwKSB7Ci0gICAgICAgICAgICBjb25v bCgidHJhbnNwYXJlbnQiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICh3aGF0 ICYgV19TRU5EKSB7Ci0gICAgICAgICAgICAgICAgY29ub2woZmNzaW5mb1tmY2hhcnNldF0ua2V5 d29yZCk7Ci0gICAgICAgICAgICAgICAgY29ub2woIiA9PiAiKTsKLSAgICAgICAgICAgICAgICBj b25vbCh0Y3NpbmZvW3RjaGFyc2V0XS5rZXl3b3JkKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g ICAgICAgICAgICAgICAgY29ub2wodGNzaW5mb1t0Y2hhcnNldF0ua2V5d29yZCk7Ci0gICAgICAg ICAgICAgICAgY29ub2woIiA9PiAiKTsKLSAgICAgICAgICAgICAgICBjb25vbChmY3NpbmZvW2Zj aGFyc2V0XS5rZXl3b3JkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIE5P Q1NFVFMgKi8KLSAgICB9Ci0jaWZkZWYgU1RSRUFNSU5HCi0gICAgaWYgKHN0cmVhbWluZykKLSAg ICAgIGNvbm9sKCIsIFNUUkVBTUlORyIpOwotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotICAgIGNv bm9sbCgiIik7Ci0KLSAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX1MpIHsgICAgICAgICAgICAvKiBD UlQgZmllbGQgaGVhZGluZ3MgKi8KLS8qCi0gIERlZmluZSBDS19DUFMgdG8gc2hvdyBjdXJyZW50 IHRyYW5zZmVyIHJhdGUuCi0gIExlYXZlIGl0IHVuZGVmaW5lZCB0byBzaG93IGVzdGltYXRlZCB0 aW1lIHJlbWFpbmluZy4KLSAgRXN0aW1hdGVkLXRpbWUtcmVtYWluaW5nIGNvZGUgZnJvbSBBbmR5 IEZ5ZmUsIG5vdCB0ZXN0ZWQgb24KLSAgcGF0aG9sb2dpY2FsIGNhc2VzLgotKi8KLSNkZWZpbmUg Q0tfQ1BTCi0KLSNpZmRlZiBDS19DUFMKLSAgICAgICAgY29ub2xsKCIgICAgRmlsZSAgIFBlcmNl bnQgICAgICAgUGFja2V0Iik7Ci0gICAgICAgIGNvbm9sbCgiICAgIEJ5dGVzICBEb25lICAgICBD UFMgIExlbmd0aCIpOwotI2Vsc2UKLSAgICAgICAgY29ub2xsKCIgICAgRmlsZSAgIFBlcmNlbnQg IFNlY3MgUGFja2V0Iik7Ci0gICAgICAgIGNvbm9sbCgiICAgIEJ5dGVzICBEb25lICAgICBMZWZ0 IExlbmd0aCIpOwotI2VuZGlmIC8qIENLX0NQUyAqLwotICAgICAgICBuZXdkcHkgPSAwOwotICAg IH0KLSAgICBocG9zID0gMDsKLX0KLQotLyoKLSAgc2hvd3BrdChjKQotICBjID0gY29tcGxldGlv biBjb2RlOiAwIG1lYW5zIHRyYW5zZmVyIGluIHByb2dyZXNzLCBub256ZXJvIG1lYW5zIGl0J3Mg ZG9uZS4KLSAgU2hvdyB0aGUgZmlsZSB0cmFuc2ZlciBwcm9ncmVzcyBjb3VudGVyIGFuZCBwZXJo YXBzIHZlcmJvc2UgcGFja2V0IHR5cGUuCi0qLwotVk9JRAotI2lmZGVmIENLX0FOU0lDCi1zaG93 cGt0KGNoYXIgYykKLSNlbHNlCi1zaG93cGt0KGMpIGNoYXIgYzsKLSNlbmRpZiAvKiBDS19BTlNJ QyAqLwotLyogc2hvd3BrdCAqLyB7Ci0KLSNpZm5kZWYgR0ZUSU1FUgotICAgIGxvbmcgZXQ7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVsYXBzZWQgdGltZSwgZW50aXJlIGJhdGNoICAq LwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLSAgICBDS19PRkZfVCBob3dmYXI7CQkJLyogSG93IGZh ciBpbnRvIGZpbGUgKi8KLSAgICBsb25nIHBkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBQZXJjZW50IGRvbmUsIHRoaXMgZmlsZSAgICAgKi8KLSAgICBsb25nIHRwOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBUcmFuc2ZlciByYXRlLCBlbnRpcmUgYmF0Y2ggKi8KLSAgICBs b25nIHBzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQYWNrZXQgc2l6ZSwgY3VycmVu dCBwYWNrZXQgKi8KLSAgICBDS19PRkZfVCBteXRmYzsJCQkvKiBMb2NhbCBjb3B5IG9mIGJ5dGUg Y291bnRlciAgKi8KLQotI2lmZGVmIEdGVElNRVIKLSAgICBDS0ZMT0FUIHRub3c7Ci0jZW5kaWYg LyogR0ZUSU1FUiAqLwotCi0gICAgaWYgKG5ld2RweSkgICAgICAgICAgICAgICAgICAgICAgICAg LyogUHV0IHVwIGZpbGVuYW1lcywgZXRjLCAqLwotICAgICAgZHB5aW5pdCgpOyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIGlmIHRoZXkncmUgbm90IHRoZXJlIGFscmVhZHkuICovCi0KLSAgICBo b3dmYXIgPSBmZmM7ICAgICAgICAgICAgICAgICAgICAgICAvKiBIb3cgZmFyICovCi0vKgotICBD YWxjdWxhdGUgQ1BTIHJhdGUgZXZlbiBpZiBub3QgZGlzcGxheWluZyBvbiBzY3JlZW4gZm9yIHVz ZSBpbiBmaWxlCi0gIHRyYW5zZmVyIHN0YXRpc3RpY3MuCi0qLwotI2lmZGVmIEdGVElNRVIKLSAg ICB0bm93ID0gZ2Z0aW1lcigpOyAgICAgICAgICAgICAgICAgICAvKiBUaW1lIHNpbmNlIHdlIHN0 YXJ0ZWQgKi8KLSAgICBwcyA9ICh3aGF0ICYgV19SRUNWKSA/IHJwa3RsIDogc3BrdGw7IC8qIFBh Y2tldCBzaXplICovCi0jaWZkZWYgQ0tfUkVTRU5ECi0gICAgaWYgKHdoYXQgJiBXX1NFTkQpCQkJ LyogSW4gY2FzZSB3ZSBkaWRuJ3Qgc3RhcnQgYXQgKi8KLSAgICAgIGhvd2ZhciArPSBzZW5kc3Rh cnQ7ICAgICAgICAgICAgICAvKiAgdGhlIGJlZ2lubmluZy4uLiAqLwotICAgIGVsc2UgaWYgKHdo YXQgJiBXX1JFQ1YpCi0gICAgICBob3dmYXIgKz0gcnNfbGVuOwotI2VuZGlmIC8qIENLX1JFU0VO RCAqLwotICAgIHBkID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBlcmNlbnQg ZG9uZS4gKi8KLSAgICBpZiAoYyA9PSBOVUwpIHsgICAgICAgICAgICAgICAgICAgICAvKiBTdGls bCBnb2luZywgZmlndXJlICUgZG9uZSAqLwotICAgICAgICBpZiAoIWZzaXplKSByZXR1cm47CQkv KiBFbXB0eSBmaWxlLCBkb24ndCBib3RoZXIgKi8KLSAgICAgICAgcGQgPSAoZnNpemUgPiA5OSkg PyAoaG93ZmFyIC8gKGZzaXplIC8gKENLX09GRl9UKTEwMCkpIDogMDsKLSAgICAgICAgaWYgKHBk ID4gMTAwKSBwZCA9IDEwMDsgICAgICAgICAvKiBFeHBhbnNpb24gKi8KLSAgICB9Ci0gICAgaWYg KGMgIT0gTlVMKQotICAgICAgaWYgKCFjeHNlZW4gJiYgIWRpc2NhcmQgJiYgIWN6c2VlbikKLSAg ICAgICAgcGQgPSAxMDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIGNvbXBsZXRlLCBz byAxMDAlLiAqLwotCi0gICAgbXl0ZmMgPSAocGQgPCAxMDApID8gdGZjICsgZmZjIDogdGZjOyAg ICAvKiBDUFMgKi8KLSAgICB0cCA9IChsb25nKSgodG5vdyA+IDAuMCkgPyAoQ0tGTE9BVCkgbXl0 ZmMgLyB0bm93IDogMCk7Ci0gICAgaWYgKGMgJiYgKHRwID09IDApKQotICAgICAgdHAgPSBmZmM7 Ci0KLSAgICBjcHMgPSB0cDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgZ2xvYmFs IHZhcmlhYmxlICovCi0gICAgaWYgKGNwcyA+IHBlYWtjcHMgJiYgICAgICAgICAgICAgICAgLyog UGVhayB0cmFuc2ZlciByYXRlICovCi0gICAgICAgICAoKHdoYXQgJiBXX1NFTkQgJiYgc3BhY2tl dHMgPiB3c2xvdHMgKyA0KSB8fAotCSAgKCEod2hhdCAmIFdfU0VORCkgJiYgc3BhY2tldHMgPiAx MCkpKSB7Ci0gICAgICAgIHBlYWtjcHMgPSBjcHM7Ci0gICAgfQotCi0jZWxzZSAgLyogTm90IEdG VElNRVIgKi8KLQotICAgIGV0ID0gZ3RpbWVyKCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIEVs YXBzZWQgdGltZSAgKi8KLSAgICBwcyA9ICh3aGF0ICYgV19SRUNWKSA/IHJwa3RsIDogc3BrdGw7 IC8qIFBhY2tldCBsZW5ndGggKi8KLSNpZmRlZiBDS19SRVNFTkQKLSAgICBpZiAod2hhdCAmIFdf U0VORCkJCQkvKiBBbmQgaWYgd2UgZGlkbid0IHN0YXJ0IGF0ICovCi0gICAgICBob3dmYXIgKz0g c2VuZHN0YXJ0OyAgICAgICAgICAgICAgLyogIHRoZSBiZWdpbm5pbmcuLi4gKi8KLSAgICBlbHNl IGlmICh3aGF0ICYgV19SRUNWKQotICAgICAgaG93ZmFyICs9IHJzX2xlbjsKLSNlbmRpZiAvKiBD S19SRVNFTkQgKi8KLSAgICBwZCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQ ZXJjZW50IGRvbmUuICovCi0gICAgaWYgKGMgPT0gTlVMKSB7ICAgICAgICAgICAgICAgICAgICAg LyogU3RpbGwgZ29pbmcsIGZpZ3VyZSAlIGRvbmUgKi8KLSAgICAgICAgaWYgKGZzaXplID09IDBM KSByZXR1cm47ICAgICAgICAvKiBFbXB0eSBmaWxlLCBkb24ndCBib3RoZXIgKi8KLSAgICAgICAg cGQgPSAoZnNpemUgPiA5OSkgPyAoaG93ZmFyIC8gKGZzaXplIC8gKENLX09GRl9UKTEwMCkpIDog MDsKLSAgICAgICAgaWYgKHBkID4gMTAwKSBwZCA9IDEwMDsgICAgICAgICAvKiBFeHBhbnNpb24g Ki8KLSAgICB9Ci0gICAgaWYgKGMgIT0gTlVMKQotICAgICAgaWYgKCFjeHNlZW4gJiYgIWRpc2Nh cmQgJiYgIWN6c2VlbikKLSAgICAgICAgcGQgPSAxMDA7ICAgICAgICAgICAgICAgICAgICAgICAv KiBGaWxlIGNvbXBsZXRlLCBzbyAxMDAlLiAqLwotCi0KLSNpZm5kZWYgQ0tfQ1BTCi0vKgotICBm c2VjcyA9IHRpbWUgKGZyb20gZ3RpbWVyKSB0aGF0IHRoaXMgZmlsZSBzdGFydGVkIChzZXQgaW4g c2ZpbGUoKSkuCi0gIFJhdGUgc28gZmFyIGlzIGZmYyAvIChldCAtIGZzZWNzKSwgIGVzdGltYXRl ZCB0aW1lIGZvciByZW1haW5pbmcgYnl0ZXMKLSAgaXMgKGZzaXplIC0gZmZjKSAvIChmZmMgLyAo ZXQgLSBmc2VjcykpLgotKi8KLSAgICB0cCA9IChob3dmYXIgPiAwKSA/IChmc2l6ZSAtIGhvd2Zh cikgKiAoZXQgLSBmc2VjcykgLyBob3dmYXIgOiAwOwotI2VuZGlmIC8qIENLX0NQUyAqLwotCi0j aWZkZWYgQ0tfQ1BTCi0gICAgbXl0ZmMgPSAocGQgPCAxMDApID8gdGZjICsgZmZjIDogdGZjOwot ICAgIHRwID0gKGV0ID4gMCkgPyBteXRmYyAvIGV0IDogMDsJLyogVHJhbnNmZXIgcmF0ZSAqLwot ICAgIGlmIChjICYmICh0cCA9PSAwKSkJCQkvKiBXYXRjaCBvdXQgZm9yIHN1YnNlY29uZCB0aW1l cyAqLwotICAgICAgICB0cCA9IGZmYzsKLQotICAgIGNwcyA9IHRwOwkJCQkvKiBTZXQgZ2xvYmFs IHZhcmlhYmxlICovCi0gICAgaWYgKGNwcyA+IHBlYWtjcHMgJiYgICAgICAgICAgICAgICAgLyog UGVhayB0cmFuc2ZlciByYXRlICovCi0gICAgICAgICAoKHdoYXQgJiBXX1NFTkQgJiYgc3BhY2tl dHMgPiB3c2xvdHMgKyA0KSB8fAotCSAgKCEod2hhdCAmIFdfU0VORCkgJiYgc3BhY2tldHMgPiAx MCkpKSB7Ci0gICAgICAgIHBlYWtjcHMgPSBjcHM7Ci0gICAgfQotI2VuZGlmIC8qIENLX0NQUyAq LwotCi0jZW5kaWYgLyogR0ZUSU1FUiAqLwotCi0gICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9TKSB7 ICAgICAgICAgICAgLyogQ1JUIGRpc3BsYXkgKi8KLSAgICAgICAgY2hhciBidWZmZXJbMTI4XTsK LQkvKiBUaGVzZSBzcHJpbnRmcyBzaG91bGQgYmUgc2FmZSB1bnRpbCB3ZSBoYXZlIDMyLWRpZ2l0 IG51bWJlcnMgKi8KLQotICAgICAgICBpZiAocGQgPiAtMUwpCi0gICAgICAgICAgc3ByaW50Zihi dWZmZXIsICIlYyU5cyU1bGQlJSU4bGQlOGxkICIsIENSLGNrZnN0b2EoaG93ZmFyKSxwZCx0cCxw cyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBzcHJpbnRmKGJ1ZmZlciwgIiVjJTlzICAgICAg JThsZCU4bGQgIiwgQ1IsY2tmc3RvYShob3dmYXIpLHRwLHBzKTsKLSAgICAgICAgY29ub2woYnVm ZmVyKTsKLSAgICAgICAgaHBvcyA9IDMxOwotICAgIH0gZWxzZSBpZiAoZmRpc3BsYSA9PSBYWUZE X1IpIHsgICAgIC8qIFNFUklBTCAqLwotICAgICAgICBsb25nIGksIGs7Ci0gICAgICAgIGlmICho b3dmYXIgLSBvbGRmZmMgPCAxMDI0KSAgICAgLyogVXBkYXRlIGRpc3BsYXkgZXZlcnkgMUsgKi8K LSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG9sZGZmYyA9IGhvd2ZhcjsgICAgICAgICAgICAg ICAgLyogVGltZSBmb3IgbmV3IGRpc3BsYXkgKi8KLSAgICAgICAgayA9IChob3dmYXIgLyAxMDI0 TCkgLSBkb3RzOyAgICAvKiBIb3cgbWFueSBLIHNvIGZhciAqLwotICAgICAgICBmb3IgKGkgPSAw TDsgaSA8IGs7IGkrKykgewotICAgICAgICAgICAgaWYgKGhwb3MrKyA+IChjbWRfY29scyAtIDMp KSB7IC8qIFRpbWUgdG8gd3JhcD8gKi8KLSAgICAgICAgICAgICAgICBjb25vbGwoIiIpOwotICAg ICAgICAgICAgICAgIGhwb3MgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29ub2Mo Jy4nKTsgICAgICAgICAgICAgICAgIC8qIFByaW50IGEgZG90IGZvciB0aGlzIEsgKi8KLSAgICAg ICAgICAgIGRvdHMrKzsgICAgICAgICAgICAgICAgICAgICAvKiBDb3VudCBpdCAqLwotICAgICAg ICB9Ci0gICAgfQotfQotCi0KLS8qICBDIEsgUyBDIFIgRSBFIE4gIC0tICBTY3JlZW4gZGlzcGxh eSBmdW5jdGlvbiAgKi8KLQotLyoKLSAgY2tzY3JlZW4oZixjLG4scykKLSAgICBmIC0gYXJndW1l bnQgZGVzY3JpcHRvcgotICAgIGMgLSBhIGNoYXJhY3RlciBvciBzbWFsbCBpbnRlZ2VyCi0gICAg biAtIGEgbG9uZyBpbnRlZ2VyCi0gICAgcyAtIGEgc3RyaW5nLgotCi0gIGFuZCBnbG9iYWwgZmRp c3BsYSA9IFNFVCBGSUxFIERJU1BMQVkgdmFsdWU6Ci0KLSAgICBYWUZEX04gPSBOT05FCi0gICAg WFlGRF9SID0gU0VSSUFMOiAgICAgRG90cywgZXRjLCB3b3JrcyBvbiBhbnkgdGVybWluYWwsIGV2 ZW4gaGFyZGNvcHkuCi0gICAgWFlGRF9TID0gQ1JUOiAgICAgICAgV29ya3Mgb24gYW55IENSVCwg d3JpdGVzIG92ZXIgY3VycmVudCBsaW5lLgotICAgIFhZRkRfQyA9IEZVTExTQ1JFRU46IFJlcXVp cmVzIHRlcm1pbmFsLWRlcGVuZGVudCBzY3JlZW4gY29udHJvbC4KLSAgICBYWUZEX0IgPSBCUklF RjogICAgICBMaWtlIFNFUklBTCBidXQgb25seSBmaWxlbmFtZSAmIGNvbXBsZXRpb24gc3RhdHVz LgotICAgIFhZRkRfRyA9IEdVSTsgICAgICAgIFdpbmRvd3MgR1VJLCBzYW1lIGJlaGF2aW9yIGFz IEZVTExTQ1JFRU4KLSovCi1WT0lECi0jaWZkZWYgQ0tfQU5TSUMKLWNrc2NyZWVuKGludCBmLCBj aGFyIGMsQ0tfT0ZGX1QgbixjaGFyICpzKQotI2Vsc2UKLWNrc2NyZWVuKGYsYyxuLHMpIGludCBm OyBjaGFyIGM7IENLX09GRl9UIG47IGNoYXIgKnM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8q IHNjcmVlbiAqLyB7Ci0gICAgY2hhciBidWZbODBdOwotICAgIGludCBsZW47ICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBzdHJpbmcgKi8KLSNpZmRlZiBVTklYCi0jaWZu ZGVmIE5PSkMKLSAgICBpbnQgb2JnOwotX1BST1RPVFlQKCBWT0lEIGNvbmJndCwgKGludCkgKTsK LSNlbmRpZiAvKiBOT0pDICovCi0jZW5kaWYgLyogVU5JWCAqLwotICAgIGludCBmdHAgPSAwOwot Ci0gICAgZnRwID0gKHdoYXQgJiBXX0ZUUCkgPyAxIDogMDsJLyogRlRQIG9yIEtlcm1pdD8gKi8K LQotICAgIGlmICghbG9jYWwgJiYgIWZ0cCkJCQkvKiBJbiByZW1vdGUgbW9kZSAtIGRvbid0IGRv IHRoaXMgKi8KLSAgICAgIHJldHVybjsKLQotICAgIGlmICghcykgcyA9ICIiOwotCi0gICAgaWYg KCFmeGRfaW5pdGVkKSAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBpZiBuZWNlc3Nh cnkgKi8KLSAgICAgIGZ4ZGluaXQoZmRpc3BsYSk7Ci0KLSNpZmRlZiBVTklYCi0jaWZuZGVmIE5P SkMKLSAgICBvYmcgPSBiYWNrZ3JkOyAgICAgICAgICAgICAgICAgICAgICAvKiBQcmV2aW91cyBi YWNrZ3JvdW5kIHN0YXR1cyAqLwotICAgIGNvbmJndCgxKTsgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFNlZSBpZiBydW5uaW5nIGluIGJhY2tncm91bmQgKi8KLSAgICBpZiAoIWJhY2tncmQg JiYgb2JnKSB7ICAgICAgICAgICAgICAvKiBKdXN0IGNhbWUgaW50byBmb3JlZ3JvdW5kPyAqLwot ICAgICAgICBjb25jYigoY2hhcillc2NhcGUpOyAgICAgICAgICAgIC8qIFB1dCBjb25zb2xlIGJh Y2sgaW4gQ0JSRUFLIG1vZGUgKi8KLSAgICAgICAgc2V0aW50KCk7ICAgICAgICAgICAgICAgICAg ICAgICAvKiBSZXN0b3JlIGludGVycnVwdHMgKi8KLSAgICB9Ci0jZW5kaWYgLyogTk9KQyAqLwot I2VuZGlmIC8qIFVOSVggKi8KLQotICAgIGlmICgoZiAhPSBTQ1JfV00pICYmIChmICE9IFNDUl9F TSkpIC8qIEFsd2F5cyB1cGRhdGUgd2FybmluZ3MgJiBlcnJvcnMgKi8KLSAgICAgIGlmICghZGlz cGxhIHx8Ci0gICAgICAgICAgKGJhY2tncmQgJiYgYmdzZXQpIHx8Ci0gICAgICAgICAgZmRpc3Bs YSA9PSBYWUZEX04gfHwKLSAgICAgICAgICAoc2VydmVyICYmICFzcnZkaXMpCi0gICAgICAgICAg KQotICAgICAgICByZXR1cm47Ci0KLSNpZmRlZiBWTVMKLSAgICBpZiAoZiA9PSBTQ1JfRk4pICAg ICAgICAgICAgICAgICAgICAvKiBWTVMgLSBzaG9ydGVuIHRoZSBuYW1lICovCi0gICAgICBzID0g enJlbG5hbWUocyx6Z3RkaXIoKSk7Ci0jZW5kaWYgLyogVk1TICovCi0KLSAgICBpZiAoZGVzdCA9 PSBERVNUX1MpICAgICAgICAgICAgICAgICAvKiBTRVQgREVTVElOQVRJT04gU0NSRUVOICovCi0g ICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIHdvdWxkIGludGVyZmVy ZS4uLiAqLwotCi0jaWZkZWYgS1VJCi0gICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9HKSB7ICAgICAg ICAgICAgLyogSWYgZ3VpIGRpc3BsYXkgc2VsZWN0ZWQgKi8KLSAgICAgICAgc2NyZWVuZyhmLGMs bixzKTsgICAgICAgICAgICAgICAvKiBjYWxsIHRoZSBndWkgdmVyc2lvbiAqLwotICAgICAgICBy ZXR1cm47Ci0gICAgfQotI2VuZGlmIC8qIEtVSSAqLwotI2lmZGVmIENLX0NVUlNFUwotICAgIGlm IChmZGlzcGxhID09IFhZRkRfQykgeyAgICAgICAgICAgIC8qIElmIGZ1bGxzY3JlZW4gZGlzcGxh eSBzZWxlY3RlZCAqLwotICAgICAgICBzY3JlZW5jKGYsYyxuLHMpOyAgICAgICAgICAgICAgIC8q IGNhbGwgdGhlIGZ1bGxzY3JlZW4gdmVyc2lvbiAqLwotICAgICAgICByZXR1cm47Ci0gICAgfQot I2VuZGlmIC8qIENLX0NVUlNFUyAqLwotCi0gICAgbGVuID0gKGludClzdHJsZW4ocyk7ICAgICAg ICAgICAgICAgLyogTGVuZ3RoIG9mIHN0cmluZyAqLwotCi0gICAgc3dpdGNoIChmKSB7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogSGFuZGxlIG91ciBmdW5jdGlvbiBjb2RlICovCi0gICAgICBj YXNlIFNDUl9GTjogICAgICAgICAgICAgICAgICAgICAgLyogRmlsZW5hbWUgKi8KLSAgICAgICAg aWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7Ci0jaWZkZWYgTkVXRlRQCi0JICAgIGlmIChmdHApCi0J ICAgICAgcHJpbnRmKCIgJXMgJXMiLCB3aGF0ICYgV19TRU5EID8gIlBVVCIgOiAiR0VUIiwgcyk7 Ci0JICAgIGVsc2UKLSNlbmRpZiAvKiBORVdGVFAgKi8KLQkgICAgICBwcmludGYoIiAlcyAlcyIs IHdoYXQgJiBXX1NFTkQgPyAiU0VORCIgOiAiUkVDViIsIHMpOwotI2lmZGVmIFVOSVgKLSAgICAg ICAgICAgIGZmbHVzaChzdGRvdXQpOwotI2VuZGlmIC8qIFVOSVggKi8KLSAgICAgICAgICAgIHJl dHVybjsKLSAgICAgICAgfQotI2lmZGVmIE1BQwotICAgICAgICBjb25vbGwoIiIpOyBjb25vbChz KTsgY29ub2MoU1ApOyBocG9zID0gbGVuICsgMTsKLSNlbHNlCi0gICAgICAgIGNrc3RybmNweShm YnVmLHMsODApOwotICAgICAgICBhYnVmWzBdID0gYTJidWZbMF0gPSBOVUw7Ci0gICAgICAgIG5l d2RweSA9IDE7ICAgICAgICAgICAgICAgICAgICAgLyogTmV3IGZpbGUgc28gcmVmcmVzaCBkaXNw bGF5ICovCi0jZW5kaWYgLyogTUFDICovCi0gICAgICAgIHJldHVybjsKLQotICAgICAgY2FzZSBT Q1JfQU46ICAgICAgICAgICAgICAgICAgICAgIC8qIEFzLW5hbWUgKi8KLSAgICAgICAgaWYgKGZk aXNwbGEgPT0gWFlGRF9CKSB7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgcHJpbnRmKCIo YXMgJXMpICIscyk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgcmV0dXJuOwot ICAgICAgICB9Ci0jaWZkZWYgTUFDCi0gICAgICAgIGlmIChocG9zICsgbGVuID4gNzUpIHsgY29u b2xsKCIiKTsgaHBvcyA9IDA7IH0KLSAgICAgICAgY29ub2woIj0+ICIpOyBjb25vbChzKTsKLSAg ICAgICAgaWYgKChocG9zICs9IChsZW4gKyAzKSkgPiA3OCkgeyBjb25vbGwoIiIpOyBocG9zID0g MDsgfQotI2Vsc2UKLSAgICAgICAgaWYgKGFidWZbMF0pIHsKLSAgICAgICAgICAgIGNrc3RybmNw eShhMmJ1ZixzLDgwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNrc3RybmNweShh YnVmLHMsODApOwotICAgICAgICB9Ci0jZW5kaWYgLyogTUFDICovCi0gICAgICAgIHJldHVybjsK LQotICAgICAgY2FzZSBTQ1JfRlM6ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUtc2l6ZSAq LwotICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKLSAgICAgICAgICAgIHByaW50Zigi ICglcykgKCVzIGJ5dGUlcykiLAotI2lmZGVmIE5PSUNQCi0gICAgICAgICAgICAgICAgICAgKGJp bmFyeSA/ICJiaW5hcnkiIDogInRleHQiKQotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICBnZm1v ZGUoYmluYXJ5LDApCi0jZW5kaWYgLyogTk9JQ1AgKi8KLSAgICAgICAgICAgICAgICAgICAsIGNr ZnN0b2EobiksIG4gPT0gMSA/ICIiIDogInMiKTsKLSNpZmRlZiBVTklYCi0gICAgICAgICAgICBm Zmx1c2goc3Rkb3V0KTsKLSNlbmRpZiAvKiBVTklYICovCi0gICAgICAgICAgICByZXR1cm47Ci0g ICAgICAgIH0KLSNpZmRlZiBNQUMKLSAgICAgICAgc3ByaW50ZihidWYsIiwgU2l6ZTogJXMiLGNr ZnN0b2EobikpOyAgY29ub2xsKGJ1Zik7ICBocG9zID0gMDsKLSNlbmRpZiAvKiBNQUMgKi8KLSAg ICAgICAgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9YRDogICAgICAgICAgICAgICAgICAgICAg LyogWC1wYWNrZXQgZGF0YSAqLwotICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpCi0gICAg ICAgICAgcmV0dXJuOwotI2lmZGVmIE1BQwotICAgICAgICBjb25vbGwoIiIpOyBjb25vbGwocyk7 IGhwb3MgPSAwOwotI2Vsc2UKLSAgICAgICAgY2tzdHJuY3B5KGZidWYscyw4MCk7Ci0gICAgICAg IGFidWZbMF0gPSBhMmJ1ZlswXSA9IE5VTDsKLSNlbmRpZiAvKiBNQUMgKi8KLSAgICAgICAgcmV0 dXJuOwotCi0gICAgICBjYXNlIFNDUl9TVDogICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBz dGF0dXMgKi8KLSAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgY2FzZSBTVF9PSzogICAg ICAgICAgICAgICAgICAgLyogVHJhbnNmZXJyZWQgT0sgKi8KLSAgICAgICAgICAgIHNob3dwa3Qo J1onKTsgICAgICAgICAgICAgICAvKiBVcGRhdGUgbnVtYmVycyBvbmUgbGFzdCB0aW1lICovCi0g ICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKLSNpZmRlZiBHRlRJTUVSCi0JCWlm IChmcHhmc2VjcykKLQkJICBwcmludGYoIjogT0sgKCUwLjNmIHNlYywgJWxkIGNwcykiLGZweGZz ZWNzLAotCQkJIChsb25nKSgoQ0tGTE9BVClmZmMgLyBmcHhmc2VjcykpOwotI2Vsc2UKLQkJaWYg KHhmc2VjcykKLQkJICBwcmludGYoIjogT0sgKCVkIHNlYywgJWxkIGNwcykiLHhmc2VjcyxmZmMv eGZzZWNzKTsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0JCXByaW50ZigiXG4iKTsKLSAgICAgICAg ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKGhwb3MgKz0g NSkgPiA3OCkgY29ub2xsKCIiKTsgLyogV3JhcCBzY3JlZW4gbGluZS4gKi8KLSAgICAgICAgICAg IGNvbm9sbCgiIFtPS10iKTsgaHBvcyA9IDA7ICAvKiBQcmludCBPSyBtZXNzYWdlLiAqLwotICAg ICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9TKSB7ICAgIC8qIFdlIGRpZG4ndCBzaG93IFog cGFja2V0IHdoZW4gKi8KLSAgICAgICAgICAgICAgICBjb25vYygnWicpOyAgICAgICAgICAgICAv KiBpdCBjYW1lLCBzbyBzaG93IGl0IG5vdy4gKi8KLSAgICAgICAgICAgICAgICBocG9zID0gMTsK LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGNhc2UgU1Rf RElTQzogICAgICAgICAgICAgICAgIC8qICBEaXNjYXJkZWQgKi8KLSAgICAgICAgICAgIGlmIChm ZGlzcGxhID09IFhZRkRfQikgewotICAgICAgICAgICAgICAgIHByaW50ZigiOiBESVNDQVJERURc biIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg IGlmICgoaHBvcyArPSAxMikgPiA3OCkgY29ub2xsKCIiKTsKLSAgICAgICAgICAgIGNvbm9sbCgi IFtkaXNjYXJkZWRdIik7IGhwb3MgPSAwOwotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg ICAgY2FzZSBTVF9JTlQ6ICAgICAgICAgICAgICAgICAgLyogIEludGVycnVwdGVkICovCi0gICAg ICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKLSAgICAgICAgICAgICAgICBwcmludGYo IjogSU5URVJSVVBURURcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIGlmICgoaHBvcyArPSAxNCkgPiA3OCkgY29ub2xsKCIiKTsKLSAgICAg ICAgICAgIGNvbm9sbCgiIFtpbnRlcnJ1cHRlZF0iKTsgaHBvcyA9IDA7Ci0gICAgICAgICAgICBy ZXR1cm47Ci0KLQkgIGNhc2UgU1RfU0lNOgotICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlG RF9CKSB7Ci0JCWlmIChuID09IFNLUF9YTlgpCi0JCSAgcHJpbnRmKCI6IFdPVUxEIEJFIFRSQU5T RkVSUkVEIChOZXcgZmlsZSlcbiIpOwotCQllbHNlIGlmIChuID09IFNLUF9YVVApCi0JCSAgcHJp bnRmKCI6IFdPVUxEIEJFIFRSQU5TRkVSUkVEIChSZW1vdGUgZmlsZSBvbGRlcilcbiIpOwotCQll bHNlIGlmIChuID09IFNLUF9TSU0pCi0JCSAgcHJpbnRmKCI6IFdPVUxEIEJFIFRSQU5TRkVSUkVE XG4iKTsKLQkJZWxzZSBpZiAobiA+IDAgJiYgbiA8IG5za3JlYXNvbikKLQkJICBwcmludGYoIjog U0tJUFBFRCAoJXMpXG4iLHNrcmVhc29uW25dKTsKLQkJZWxzZQotCQkgIHByaW50ZigiOiBTS0lQ UEVEXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9IGVsc2UgaWYg KGZkaXNwbGEgPT0gWFlGRF9TKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlG RF9TICYmIGZidWZbMF0pIHsgLyogQ1JUIGRpc3BsYXkgKi8KLSAgICAgICAgICAgICAgICAgICAg Y29ub2xsKCIiKTsgICAgICAgICAvKiBOZXcgbGluZSAqLwotICAgICAgICAgICAgICAgICAgICBp ZiAod2hhdCAmIFdfU0VORCkgY29ub2woIldvdWxkIFNlbmQ6ICIpOyAvKiBBY3Rpb24gKi8KLSAg ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAod2hhdCAmIFdfUkVDVikgY29ub2woIldvdWxkIFJl Y2VpdmU6ICIpOwotICAgICAgICAgICAgICAgICAgICBjb25vbChmYnVmKTsKLSAgICAgICAgICAg ICAgICAgICAgaWYgKCphYnVmKSBjb25vbCgiID0+ICIpOyBjb25vbChhYnVmKTsgLyogTmFtZXMg Ki8KLSAgICAgICAgICAgICAgICAgICAgaWYgKCphMmJ1ZikgY29ub2woIiA9PiAiKTsgY29ub2wo YTJidWYpOyAvKiBOYW1lcyAqLwotICAgICAgICAgICAgICAgICAgICAqZmJ1ZiA9IE5VTDsgKmFi dWYgPSBOVUw7ICphMmJ1ZiA9IE5VTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgY29ub2xsKCIgW3NpbXVsYXRlZF0iKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKGhwb3MgKz0gMTApID4gNzgpIGNvbm9sbCgiIik7 Ci0gICAgICAgICAgICBjb25vbCgiIFtzaW11bGF0ZWRdIik7IGhwb3MgPSAwOwotICAgICAgICAg ICAgcmV0dXJuOwotCi0gICAgICAgICAgY2FzZSBTVF9TS0lQOiAgICAgICAgICAgICAgICAgLyog IFNraXBwZWQgKi8KLSAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikgewotCQlpZiAo biA9PSBTS1BfWE5YKQotCQkgIHByaW50ZigiOiBXT1VMRCBCRSBUUkFOU0ZFUlJFRCAoTmV3IGZp bGUpXG4iKTsKLQkJZWxzZSBpZiAobiA9PSBTS1BfWFVQKQotCQkgIHByaW50ZigiOiBXT1VMRCBC RSBUUkFOU0ZFUlJFRCAoUmVtb3RlIGZpbGUgb2xkZXIpXG4iKTsKLQkJZWxzZSBpZiAobiA9PSBT S1BfU0lNKQotCQkgIHByaW50ZigiOiBXT1VMRCBCRSBUUkFOU0ZFUlJFRFxuIik7Ci0JCWVsc2Ug aWYgKG4gPiAwICYmIG4gPCBuc2tyZWFzb24pCi0JCSAgcHJpbnRmKCI6IFNLSVBQRUQgKCVzKVxu Iixza3JlYXNvbltuXSk7Ci0JCWVsc2UKLQkJICBwcmludGYoIjogU0tJUFBFRFxuIik7Ci0gICAg ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfSBlbHNlIGlmIChmZGlzcGxhID09IFhZ RkRfUykgewotICAgICAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfUyAmJiBmYnVmWzBd KSB7IC8qIENSVCBkaXNwbGF5ICovCi0gICAgICAgICAgICAgICAgICAgIGNvbm9sbCgiIik7ICAg ICAgICAgLyogTmV3IGxpbmUgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHdoYXQgJiBXX1NF TkQpIGNvbm9sKCJTZW5kaW5nOiAiKTsgLyogQWN0aW9uICovCi0gICAgICAgICAgICAgICAgICAg IGVsc2UgaWYgKHdoYXQgJiBXX1JFQ1YpIGNvbm9sKCJSZWNlaXZpbmc6ICIpOwotICAgICAgICAg ICAgICAgICAgICBjb25vbChmYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCphYnVmKSBj b25vbCgiID0+ICIpOyBjb25vbChhYnVmKTsgLyogTmFtZXMgKi8KLSAgICAgICAgICAgICAgICAg ICAgaWYgKCphMmJ1ZikgY29ub2woIiA9PiAiKTsgY29ub2woYTJidWYpOyAvKiBOYW1lcyAqLwot ICAgICAgICAgICAgICAgICAgICAqZmJ1ZiA9IE5VTDsgKmFidWYgPSBOVUw7ICphMmJ1ZiA9IE5V TDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29ub2xsKCIgW3NraXBwZWRd Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg aWYgKChocG9zICs9IDEwKSA+IDc4KSBjb25vbGwoIiIpOwotCSAgICBjb25vbCgiICIpOyBjb25v bChmYnVmKTsKLSAgICAgICAgICAgIGNvbm9sbCgiIFtza2lwcGVkXSIpOyBocG9zID0gMDsKLSAg ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGNhc2UgU1RfRVJSOiAgICAgICAgICAgICAg ICAgIC8qIEVycm9yICovCi0gICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKLSAg ICAgICAgICAgICAgICBwcmludGYoIjogRVJST1I6ICVzXG4iLHMpOwotICAgICAgICAgICAgICAg IHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbm9sbCgiIik7Ci0gICAgICAg ICAgICBjb25vbCgiRXJyb3I6ICIpOyBjb25vbGwocyk7IGhwb3MgPSAwOwotICAgICAgICAgICAg cmV0dXJuOwotCi0gICAgICAgICAgY2FzZSBTVF9NU0c6ICAgICAgICAgICAgICAgICAgLyogTWVz c2FnZSAqLwotI2lmZGVmIE5FV0ZUUAotICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9C KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZ0cCAmJiBmdHBfZGViKQotCQkgIHByaW50ZigiOiBN RVNTQUdFOiAlc1xuIixzKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9 Ci0jZW5kaWYgLyogTkVXRlRQICovCi0gICAgICAgICAgICBjb25vbGwoIiIpOwotICAgICAgICAg ICAgY29ub2woIk1lc3NhZ2U6ICIpOwotICAgICAgICAgICAgY29ub2xsKHMpOwotICAgICAgICAg ICAgaHBvcyA9IDA7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICBjYXNlIFNUX1JF RlU6ICAgICAgICAgICAgICAgICAvKiBSZWZ1c2VkICovCi0gICAgICAgICAgICBpZiAoZmRpc3Bs YSA9PSBYWUZEX0IpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIjogUkVGVVNFRFxuIik7Ci0g ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfSBlbHNlIGlmIChmZGlzcGxhID09 IFhZRkRfUykgewotICAgICAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfUyAmJiBmYnVm WzBdKSB7IC8qIENSVCBkaXNwbGF5ICovCi0gICAgICAgICAgICAgICAgICAgIGNvbm9sbCgiIik7 ICAgICAgICAgLyogTmV3IGxpbmUgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHdoYXQgJiBX X1NFTkQpIGNvbm9sKCJTZW5kaW5nOiAiKTsgLyogQWN0aW9uICovCi0gICAgICAgICAgICAgICAg ICAgIGVsc2UgaWYgKHdoYXQgJiBXX1JFQ1YpIGNvbm9sKCJSZWNlaXZpbmc6ICIpOwotICAgICAg ICAgICAgICAgICAgICBjb25vbChmYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCphYnVm KSBjb25vbCgiID0+ICIpOyBjb25vbChhYnVmKTsgICAgICAvKiBOYW1lcyAqLwotICAgICAgICAg ICAgICAgICAgICBpZiAoKmEyYnVmKSBjb25vbCgiID0+ICIpOyBjb25vbChhMmJ1Zik7ICAgIC8q IE5hbWVzICovCi0gICAgICAgICAgICAgICAgICAgICpmYnVmID0gTlVMOyAqYWJ1ZiA9IE5VTDsg KmEyYnVmID0gTlVMOwotICAgICAgICAgICAgICAgICAgICBjb25vbGwoIiIpOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb25vbCgiUmVmdXNlZDogIik7IGNvbm9sbChzKTsK LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb25v bGwoIiIpOwotICAgICAgICAgICAgY29ub2woIlJlZnVzZWQ6ICIpOyBjb25vbGwocyk7IGhwb3Mg PSAwOwotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgY2FzZSBTVF9JTkM6ICAgICAg ICAgICAgICAgICAgLyogSW5jb21wbGV0ZSAqLwotICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0g WFlGRF9CKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI6IElOQ09NUExFVEVcbiIpOwotICAg ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoaHBv cyArPSAxMikgPiA3OCkgY29ub2xsKCIiKTsKLSAgICAgICAgICAgIGNvbm9sbCgiIFtpbmNvbXBs ZXRlXSIpOyBocG9zID0gMDsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGRlZmF1 bHQ6Ci0gICAgICAgICAgICBjb25vbGwoIioqKiBzY3JlZW4oKSBjYWxsZWQgd2l0aCBiYWQgc3Rh dHVzICoqKiIpOwotICAgICAgICAgICAgaHBvcyA9IDA7Ci0gICAgICAgICAgICByZXR1cm47Ci0g ICAgICAgIH0KLQotI2lmZGVmIE1BQwotICAgICAgY2FzZSBTQ1JfUE46ICAgICAgICAgICAgICAg ICAgICAgIC8qIFBhY2tldCBudW1iZXIgKi8KLSAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9C KSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQlja21ha21zZyhidWYsODAscywi OiAiLGNrbHRvYShuKSxOVUxMKTsKLSAgICAgICAgY29ub2woYnVmKTsgaHBvcyArPSAoaW50KXN0 cmxlbihidWYpOyByZXR1cm47Ci0jZW5kaWYgLyogTUFDICovCi0KLSAgICAgIGNhc2UgU0NSX1BU OiAgICAgICAgICAgICAgICAgICAgICAvKiBQYWNrZXQgdHlwZSBvciBwc2V1ZG90eXBlICovCi0g ICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAg IGlmIChjID09ICdZJykgcmV0dXJuOyAgICAgICAgICAgLyogRG9uJ3QgYm90aGVyIHdpdGggQUNL cyAqLwotICAgICAgICBpZiAoYyA9PSAnRCcpIHsgICAgICAgICAgICAgICAgIC8qIEluIGRhdGEg dHJhbnNmZXIgcGhhc2UsICovCi0gICAgICAgICAgICBzaG93cGt0KE5VTCk7ICAgICAgICAgICAg ICAgLyogc2hvdyBwcm9ncmVzcy4gKi8KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot I2lmbmRlZiBBTUlHQQotICAgICAgICBpZiAoaHBvcysrID4gNzcpIHsgICAgICAgICAgICAgIC8q IElmIG5lYXIgcmlnaHQgbWFyZ2luLCAqLwotICAgICAgICAgICAgY29ub2xsKCIiKTsgICAgICAg ICAgICAgICAgIC8qIFN0YXJ0IG5ldyBsaW5lICovCi0gICAgICAgICAgICBocG9zID0gMDsgICAg ICAgICAgICAgICAgICAgLyogYW5kIHJlc2V0IGNvdW50ZXIuICovCi0gICAgICAgIH0KLSNlbmRp ZiAvKiBBTUlHQSAqLwotICAgICAgICBpZiAoYyA9PSAnWicgJiYgZmRpc3BsYSA9PSBYWUZEX1Mp Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICBlbHNlCi0gICAgICAgICAgY29ub2MoYyk7ICAg ICAgICAgICAgICAgICAgICAgLyogRGlzcGxheSB0aGUgcGFja2V0IHR5cGUuICovCi0jaWZkZWYg QU1JR0EKLSAgICAgICAgaWYgKGMgPT0gJ0cnKSBjb25vbGwoIiIpOyAgICAgICAvKiBOZXcgbGlu ZSBhZnRlciBHIHBhY2tldHMgKi8KLSNlbmRpZiAvKiBBTUlHQSAqLwotICAgICAgICByZXR1cm47 Ci0KLSAgICAgIGNhc2UgU0NSX1RDOiAgICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2FjdGlv biBjb21wbGV0ZSAqLwotICAgICAgICBpZiAoeGZyYmVsKSBibGVlcChCUF9OT1RFKTsKLSAgICAg ICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7ICAgICAgICAvKiBCcmllZiBkaXNwbGF5Li4uICov Ci0gICAgICAgICAgICBpZiAoZmlsY250ID4gMSkgewotICAgICAgICAgICAgICAgIGxvbmcgZng7 Ci0gICAgICAgICAgICAgICAgZnggPSBmaWxjbnQgLSBmaWxyZWo7Ci0gICAgICAgICAgICAgICAg cHJpbnRmKCIgU1VNTUFSWTogJWxkIGZpbGUlcyIsIGZ4LCAoKGZ4ID09IDEpID8gIiIgOiAicyIp KTsKLSAgICAgICAgICAgICAgICBwcmludGYoIiwgJXMgYnl0ZSVzIiwgY2tmc3RvYSh0ZmMpLCAo KHRmYyA9PSAxKSA/ICIiIDogInMiKSk7Ci0jaWZkZWYgR0ZUSU1FUgotICAgICAgICAgICAgICAg IHByaW50ZigiLCAlMC4zZiBzZWMsICVsZCBjcHMiLCBmcHRzZWNzLCB0ZmNwcyk7Ci0jZWxzZQot ICAgICAgICAgICAgICAgIHByaW50ZigiLCAlbGQgc2VjLCAlbGQgY3BzIiwgdHNlY3MsIHRmY3Bz KTsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0gICAgICAgICAgICAgICAgcHJpbnRmKCIuXG4iKTsK LSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbm9sbCgiIik7 Ci0gICAgICAgIH0KLSNpZmRlZiBVTklYCi0gICAgICAgIGZmbHVzaChzdGRvdXQpOwotI2VuZGlm IC8qIFVOSVggKi8KLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9FTTogICAgICAg ICAgICAgICAgICAgICAgLyogRXJyb3IgbWVzc2FnZSAqLwotICAgICAgICBpZiAoZmRpc3BsYSA9 PSBYWUZEX0IpIHsKLSAgICAgICAgICAgIHByaW50ZigiIEVSUk9SOiAlc1xuIixzKTsKLSAgICAg ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBjb25vbGwoIiIpOyBjb25vYygnPycp OyBjb25vbGwocyk7IGhwb3MgPSAwOyByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NSX1dNOiAgICAg ICAgICAgICAgICAgICAgICAvKiBXYXJuaW5nIG1lc3NhZ2UgKi8KLSAgICAgICAgaWYgKGZkaXNw bGEgPT0gWFlGRF9CKSB7Ci0gICAgICAgICAgICBwcmludGYoIiBXQVJOSU5HOiAlc1xuIixzKTsK LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBjb25vbGwoIiIpOyBjb25v bGwocyk7IGhwb3MgPSAwOyByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NSX01TOiAgICAgICAgICAg ICAgICAgICAgICAvKiBNZXNzYWdlIGZyb20gb3RoZXIgS2VybWl0ICovCi0gICAgICAgIGlmIChm ZGlzcGxhID09IFhZRkRfQikgewotICAgICAgICAgICAgcHJpbnRmKCIgTUVTU0FHRTogJXNcbiIs cyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgY29ub2xsKCIiKTsg Y29ub2xsKHMpOyBocG9zID0gMDsgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9UVTogICAgICAg ICAgICAgICAgICAgICAgLyogVW5kZWxpbWl0ZWQgdGV4dCAqLwotICAgICAgICBpZiAoZmRpc3Bs YSA9PSBYWUZEX0IpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoKGhwb3MgKz0gbGVu KSA+IDc3KSB7IGNvbm9sbCgiIik7IGhwb3MgPSBsZW47IH0KLSAgICAgICAgY29ub2wocyk7IHJl dHVybjsKLQotICAgICAgY2FzZSBTQ1JfVE46ICAgICAgICAgICAgICAgICAgICAgIC8qIFRleHQg ZGVsaW1pdGVkIGF0IGJlZ2lubmluZyAqLwotICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0Ip Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICBjb25vbGwoIiIpOyBjb25vbChzKTsgaHBvcyA9 IGxlbjsgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9UWjogICAgICAgICAgICAgICAgICAgICAg LyogVGV4dCBkZWxpbWl0ZWQgYXQgZW5kICovCi0gICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRf QikKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICgoaHBvcyArPSBsZW4pID4gNzcpIHsg Y29ub2xsKCIiKTsgaHBvcyA9IGxlbjsgfQotICAgICAgICBjb25vbGwocyk7IHJldHVybjsKLQot ICAgICAgY2FzZSBTQ1JfUUU6ICAgICAgICAgICAgICAgICAgICAgIC8qIFF1YW50aXR5IGVxdWFs cyAqLwotICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpCi0gICAgICAgICAgcmV0dXJuOwot CWNrbWFrbXNnKGJ1Ziw4MCxzLCI6ICIsY2tsdG9hKG4pLE5VTEwpOwotICAgICAgICBjb25vbGwo YnVmKTsgaHBvcyA9IDA7IHJldHVybjsKLQotICAgICAgY2FzZSBTQ1JfQ1c6ICAgICAgICAgICAg ICAgICAgICAgIC8qIENsb3NlIGZ1bGxzY3JlZW4gd2luZG93ICovCi0gICAgICAgIHJldHVybjsg ICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gd2luZG93IHRvIGNsb3NlICovCi0KLSAgICAg IGNhc2UgU0NSX0NEOgotICAgICAgICByZXR1cm47Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAg IGNvbm9sbCgiKioqIHNjcmVlbigpIGNhbGxlZCB3aXRoIGJhZCBvYmplY3QgKioqIik7Ci0gICAg ICAgIGhwb3MgPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotI2VuZGlmIC8qIE5PRElT UExBWSAqLwotCi0vKiAgRSBSIE0gUyBHICAtLSAgTm9uZmF0YWwgZXJyb3IgbWVzc2FnZSAgKi8K LQotLyogU2hvdWxkIGJlIHVzZWQgb25seSBmb3IgcHJpbnRpbmcgdGhlIG1lc3NhZ2UgdGV4dCBm cm9tIGFuIEVycm9yIHBhY2tldC4gKi8KLQotVk9JRAotZXJtc2cobXNnKSBjaGFyICptc2c7IHsg ICAgICAgICAgICAgICAgIC8qIFByaW50IGVycm9yIG1lc3NhZ2UgKi8KLSAgICBkZWJ1ZyhGMTEw LCJlcm1zZyIsbXNnLDApOwotICAgIGlmIChsb2NhbCkKLSAgICAgIHh4c2NyZWVuKFNDUl9FTSww LDBMLG1zZyk7Ci0gICAgdGxvZyhGMTEwLCJQcm90b2NvbCBFcnJvcjoiLG1zZywwTCk7Ci19Ci0j ZW5kaWYgLyogTk9YRkVSICovCi0KLVZPSUQKLXNldHNlc2xvZyh4KSBpbnQgeDsgewotICAgIHNl c2xvZyA9IHg7Ci0jaWZkZWYgS1VJCi0gICAgS3VpU2V0UHJvcGVydHkoS1VJX1RFUk1fQ0FQVFVS RSx4LDApOwotI2VuZGlmIC8qIEtVSSAqLwotfQotCi1WT0lECi1kb2NsZWFuKGZjKSBpbnQgZmM7 IHsgICAgICAgICAgICAgICAgICAgLyogR2VuZXJhbCBjbGVhbnVwICovCi0jaWZkZWYgT1MyT1JV TklYCi0gICAgZXh0ZXJuIGludCB0dHlmZDsKLSNlbmRpZiAvKiBPUzJPUlVOSVggKi8KLSAgICBl eHRlcm4gaW50ICBrZWVwOwotICAgIGV4dGVybiBpbnQgZXhpdGhhbmd1cDsKLSNpZm5kZWYgTk9Y RkVSCi0gICAgZXh0ZXJuIGNoYXIgZmlsbmFtW107Ci0jZW5kaWYgLyogTk9YRkVSICovCi0jaWZu ZGVmIE5PSUNQCi0gICAgaW50IHg7Ci0KLSAgICBpZiAoZmMgPiAwKQotICAgICAgZG9zdG9wKCk7 ICAgICAgICAgICAgICAgICAvKiBTdG9wIGFsbCBjb21tYW5kIGZpbGVzIGFuZCBlbmQgbWFjcm9z ICovCi0jZW5kaWYgLyogTk9JQ1AgKi8KLQotI2lmbmRlZiBOT1hGRVIKLSAgICBpZiAocGt0bG9n KSB7Ci0gICAgICAgICpwa3RmaWwgPSAnXDAnOwotICAgICAgICBwa3Rsb2cgPSAwOwotICAgICAg ICB6Y2xvc2UoWlBGSUxFKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9YRkVSICovCi0gICAgaWYgKHNl c2xvZykgewotICAgICAgICAqc2VzZmlsID0gJ1wwJzsKLSAgICAgICAgc2V0c2VzbG9nKDApOwot ICAgICAgICB6Y2xvc2UoWlNGSUxFKTsKLSAgICB9Ci0jaWZkZWYgVExPRwotICAgIGlmICh0cmFs b2cpIHsKLSAgICAgICAgdGxvZyhGMTAwLCJUcmFuc2FjdGlvbiBMb2cgQ2xvc2VkIiwiIiwwTCk7 Ci0gICAgICAgICp0cmFmaWwgPSAnXDAnOwotICAgICAgICB0cmFsb2cgPSAwOwotICAgICAgICB6 Y2xvc2UoWlRGSUxFKTsKLSAgICB9Ci0jZW5kaWYgLyogVExPRyAqLwotCi0gICAgZGVidWcoRjEw MCwiZG9jbGVhbiBjYWxsaW5nIGRvbG9nZW5kIiwiIiwwKTsKLSAgICBkb2xvZ2VuZCgpOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBFbmQgY3VycmVudCBsb2cgcmVjb3JkIGlmIGFueSAqLwot I2lmZGVmIENPTU1FTlQKLSAgICBpZiAoZGlhbG9nKSB7ICAgICAgICAgICAgICAgICAgICAgICAv KiBJZiBjb25uZWN0aW9uIGxvZyBvcGVuICovCi0JZGlhbG9nID0gMDsKLSAgICAgICAgKmRpYWZp bCA9ICdcMCc7ICAgICAgICAgICAgICAgICAvKiBjbG9zZSBpdC4gKi8KLSAgICAgICAgemNsb3Nl KFpESUZJTCk7Ci0gICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2lmbmRlZiBOT0lDUAot I2lmbmRlZiBOT1NQTAotICAgIHpjbG9zZShaUkZJTEUpOyAgICAgICAgICAgICAgICAgICAgIC8q IFJFQUQgYW5kIFdSSVRFIGZpbGVzLCBpZiBhbnkuICovCi0gICAgemNsb3NlKFpXRklMRSk7Ci0j aWZuZGVmIE5PWEZFUgotICAgIHpjbG9zZShaSUZJTEUpOyAgICAgICAgICAgICAgICAgICAgIC8q IEFuZCBvdGhlciBmaWxlcyB0b28gKi8KLSAgICB4ID0gY2hrZm4oWk9GSUxFKTsJCQkvKiBEb3du bG9hZCBpbiBwcm9ncmVzcz8gKi8KLSAgICBkZWJ1ZyhGMTExLCJkb2NsZWFuIGNoa2ZuIFpPRklM RSIsZmlsbmFtLHgpOwotICAgIGRlYnVnKEYxMTEsImRvY2xlYW4ga2VlcCIsIiIsa2VlcCk7Ci0g ICAgemNsb3NlKFpPRklMRSk7CQkJLyogQ2xvc2Ugb3V0cHV0IGZpbGUgKi8KLSAgICBpZiAoeCA+ IDAgJiYgIWtlZXApIHsJCS8qIElmIGl0IHdhcyBiZWluZyBkb3dubG9hZGVkICovCi0JaWYgKGZp bG5hbVswXSkKLQkgIHggPSB6ZGVsZXQoZmlsbmFtKTsJCS8qIERlbGV0ZSBpZiBJTkNPTVBMRVRF ID0gRElTQ0FSRCAqLwotCWRlYnVnKEYxMTEsImRvY2xlYW4gZG93bmxvYWQgZmlsZW5hbWUiLGZp bG5hbSx4KTsKLSAgICB9Ci0jZW5kaWYgLyogTk9YRkVSICovCi0gICAgemNsb3NlKFpTWVNGTik7 Ci0gICAgemNsb3NlKFpNRklMRSk7Ci0KLSAgICBpZiAoZmMgPCAxKSB7ICAgICAgICAgICAgICAg ICAgICAgICAvKiBSRVNFVGluZywgbm90IEVYSVRpbmcgKi8KLSNpZmRlZiBERUJVRwotICAgICAg ICBpZiAoZGVibG9nKSB7ICAgICAgICAgICAgICAgICAgIC8qIENsb3NlIHRoZSBkZWJ1ZyBsb2cu ICovCi0gICAgICAgICAgICAqZGViZmlsID0gJ1wwJzsKLSAgICAgICAgICAgIGRlYmxvZyA9IDA7 Ci0gICAgICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIERFQlVH ICovCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSNlbmRpZiAv KiBOT0lDUCAqLwotCi0jaWZuZGVmIE5PTE9DQUwKLSAgICBkZWJ1ZyhGMTAxLCJkb2NsZWFuIGV4 aXRoYW5ndXAiLCIiLGV4aXRoYW5ndXApOwotICAgIGlmIChsb2NhbCAmJiBleGl0aGFuZ3VwKSB7 CQkvKiBDbG9zZSBjb21tdW5pY2F0aW9uIGNvbm5lY3Rpb24gKi8KLSAgICAgICAgZXh0ZXJuIGlu dCBoYXNsb2NrOwotCWludCB4OwotCQotCXggPSB0dGNoaygpOwotCWRlYnVnKEYxMDEsImRvY2xl YW4gdHRjaGsoKSIsIiIseCk7Ci0jaWZkZWYgT1MyT1JVTklYCi0JZGVidWcoRjEwMSwiZG9jbGVh biB0dHlmZCIsIiIsdHR5ZmQpOwotI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwotICAgICAgICBpZiAo eCA+PSAwCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICB8fCB0dHlmZCAhPSAtMQotI2Vsc2UKLSNp ZmRlZiBVTklYCi0gICAgICAgICAgICB8fCBoYXNsb2NrICAgICAgICAgICAgICAgICAgLyogTWFr ZSBzdXJlIHdlIGdldCBsb2NrZmlsZSEgKi8KLSAgICAgICAgICAgIHx8ICghbmV0d29yayAmJiB0 dHlmZCA+IC0xKQotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAg ICAgICkgewotICAgICAgICAgICAgZXh0ZXJuIGludCB3YXNjbG9zZWQsIHdoeWNsb3NlZDsKLQkg ICAgZGVidWcoRjEwMCwiZG9jbGVhbiBoYW5naW5nIHVwIGFuZCBjbG9zaW5nIiwiIiwwKTsKLSAg ICAgICAgICAgIGlmIChtc2dmbGcpIHsKLSNpZmRlZiBVTklYCi0gICAgICAgICAgICAgICAgZmZs dXNoKHN0ZG91dCk7Ci0jZW5kaWYgLyogVU5JWCAqLwotICAgICAgICAgICAgICAgIHByaW50Zigi Q2xvc2luZyAlcy4uLiIsdHRuYW1lKTsKLSAgICAgICAgICAgIH0KLSNpZm5kZWYgTk9ESUFMCi0g ICAgICAgICAgICBtZG1odXAoKTsgICAgICAgICAgICAgICAgICAgLyogSGFuZ3VwIHRoZSBtb2Rl bT8/PyAqLwotI2VuZGlmIC8qIE5PRElBTCAqLwotICAgICAgICAgICAgdHRjbG9zKDApOyAgICAg ICAgICAgICAgICAgIC8qIENsb3NlIGV4dGVybmFsIGxpbmUsIGlmIGFueSAqLwotICAgICAgICAg ICAgaWYgKG1zZ2ZsZykgewotICAgICAgICAgICAgICAgIHByaW50ZigiT0tcbiIpOwotI2lmZGVm IFVOSVgKLSAgICAgICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKLSNlbmRpZiAvKiBVTklYICov Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAod2FzY2xvc2VkKSB7Ci0gICAgICAgICAg ICAgICAgd2h5Y2xvc2VkID0gV0NfQ0xPUzsKLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgICAgICAg ICBpZiAobm1hYykgeyAgICAgICAgICAgICAvKiBBbnkgbWFjcm9zIGRlZmluZWQ/ICovCi0gICAg ICAgICAgICAgICAgICAgIGludCBrOyAgICAgICAgICAgICAgLyogWWVzICovCi0gICAgICAgICAg ICAgICAgICAgIGsgPSBtbG9vayhtYWN0YWIsIm9uX2Nsb3NlIixubWFjKTsgIC8qIExvb2sgdGhp cyB1cCAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoayA+PSAwKSB7ICAgICAgICAgICAgICAg ICAgICAgICAvKiBJZiBmb3VuZCwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHdhc2Nsb3Nl ZCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBwcmludGYoIk9OX0NMT1NFIERPQ0xF QU5cbiIpOyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgKihtYWN0YWJba10ua3dkKSA9IE5V TDsgICAgICAgICAvKiBTZWUgY29tbWVudCBiZWxvdyAqLwotICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKGRvZG8oayxja2l0b2Eod2h5Y2xvc2VkKSwwKSA+IC0xKSAvKiBzZXQgaXQgdXAsICov Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcigxKTsgICAgICAgICAgICAgICAgICAg IC8qIGFuZCBleGVjdXRlIGl0ICovCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICAgICAgICAgICAgICB3YXNjbG9zZWQgPSAw OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNrc3RybmNweSh0dG5hbWUsZGZ0 dHksVFROQU1MRU4pOyAvKiBSZXN0b3JlIGRlZmF1bHQgdHR5ICovCi0gICAgICAgIGxvY2FsID0g ZGZsb2M7ICAgICAgICAgICAgICAgICAgLyogQW5kIGRlZmF1bHQgcmVtb3RlL2xvY2FsIHN0YXR1 cyAqLwotICAgIH0KLSNpZmRlZiBERUJVRwotICAgIGVsc2UgaWYgKGxvY2FsKSBkZWJ1ZyhGMTAw LCJkb2NsZWFuIGhhbmd1cC9jbG9zZSBza2lwcGVkIiwiIiwwKTsKLSNlbmRpZiAvKiBERUJVRyAq LwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmZGVmIE5FV0ZUUAotICAgIGZ0cGJ5ZSgpOwkJ CQkvKiBJZiBGVFAgY29ubmVjdGlvbiBvcGVuLCBjbG9zZSBpdCAqLwotI2VuZGlmIC8qIE5FV0ZU UCAqLwotCi0jaWZkZWYgSUtTRAotICAgIGlmIChpbnNlcnZlcikKLSAgICAgIHR0Y2xvcygwKTsJ CQkvKiBJZiBJS1NELCBjbG9zZSBzb2NrZXQgKi8KLSNlbmRpZiAvKiBJS1NEICovCi0KLSNpZm5k ZWYgTk9TUEwKLS8qCi0gIElmIGEgbWFjcm8gbmFtZWQgIm9uX2V4aXQiIGlzIGRlZmluZWQsIGV4 ZWN1dGUgaXQuICBBbHNvIHJlbW92ZSBpdCBmcm9tIHRoZQotICBtYWNybyB0YWJsZSwgaW4gY2Fz ZSBpdHMgZGVmaW5pdGlvbiBpbmNsdWRlcyBhbiBFWElUIG9yIFFVSVQgY29tbWFuZCwgd2hpY2gK LSAgd291bGQgY2F1c2UgbXVjaCByZWN1cnNpb24gYW5kIHdvdWxkIHByZXZlbnQgdGhlIHByb2dy YW0gZnJvbSBldmVyIGFjdHVhbGx5Ci0gIEVYSVRpbmcuCi0qLwotICAgIGlmIChubWFjKSB7ICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEFueSBtYWNyb3MgZGVmaW5lZD8gKi8KLSAgICAgICAg aW50IGs7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBZZXMgKi8KLSAgICAgICAgY2hhciAq IGNtZCA9ICJvbl9leGl0IjsgICAgICAgICAvKiBNU1ZDIDIueCBjb21waWxlciBlcnJvciAqLwot ICAgICAgICBrID0gbWxvb2sobWFjdGFiLGNtZCxubWFjKTsgICAgIC8qIExvb2sgdXAgIm9uX2V4 aXQiICovCi0gICAgICAgIGlmIChrID49IDApIHsgICAgICAgICAgICAgICAgICAgLyogSWYgZm91 bmQsICovCi0jaWZkZWYgQ09NTUVOVAotCSAgICAvKiBUaGlzIG1ha2VzIGEgbWVzcyBpZiBPTl9F WElUIGl0c2VsZiBleGVjdXRlcyBtYWNyb3MgKi8KLSAgICAgICAgICAgICoobWFjdGFiW2tdLmt3 ZCkgPSBOVUw7ICAgICAvKiBwb2tlIGl0cyBuYW1lIGZyb20gdGhlIHRhYmxlLCAqLwotI2Vsc2UK LQkgICAgLyogUmVwbGFjZSB0aGUga2V5d29yZCB3aXRoIHNvbWV0aGluZyB0aGF0IGRvZXNuJ3Qg d3JlY2sgdGhlICovCi0JICAgIC8qIG9yZGVyIG9mIHRoZSBrZXl3b3JkIHRhYmxlICovCi0JICAg IGNrc3RybmNweShtYWN0YWJba10ua3dkLCJvbl9leHh4Iiw4KTsKLSNlbmRpZiAvKiBDT01NRU5U ICovCi0gICAgICAgICAgICBpZiAoZG9kbyhrLCIiLDApID4gLTEpICAgICAgLyogc2V0IGl0IHVw LCAqLwotICAgICAgICAgICAgICBwYXJzZXIoMSk7ICAgICAgICAgICAgICAgIC8qIGFuZCBleGVj dXRlIGl0ICovCi0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLS8qCi0gIFB1 dCBjb25zb2xlIHRlcm1pbmFsIGJhY2sgdG8gbm9ybWFsLiAgVGhpcyBpcyBkb25lIGhlcmUgYmVj YXVzZSB0aGUKLSAgT05fRVhJVCBtYWNybyBjYWxscyB0aGUgcGFyc2VyLCB3aGljaCBtZWRkbGVz IHdpdGggY29uc29sZSB0ZXJtaW5hbCBtb2Rlcy4KLSovCi0gICAgY29ucmVzKCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSBjb25zb2xlIHRlcm1pbmFsLiAqLwotCi0jaWZk ZWYgQ09NTUVOVAotLyogU2hvdWxkIGJlIG5vIG5lZWQgZm9yIHRoaXMsIGFuZCBtYXliZSBpdCdz IHNjcmV3aW5nIHRoaW5ncyB1cD8gKi8KLSAgICBjb25ub2koKTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBUdXJuIG9mZiBjb25zb2xlIGludGVycnVwdCB0cmFwcyAqLwotI2VuZGlmIC8q IENPTU1FTlQgKi8KLQotICAgIC8qIERlbGV0ZSB0aGUgU3RhcnR1cCBGaWxlIGlmIHdlIGFyZSBz dXBwb3NlZCB0by4gKi8KLSNpZm5kZWYgTk9JQ1AKLSAgICB7Ci0gICAgICAgIGV4dGVybiBpbnQg RGVsZXRlU3RhcnR1cEZpbGU7Ci0gICAgICAgIGRlYnVnKEYxMTEsImRvY2xlYW4gRGVsZXRlU3Rh cnR1cEZpbGUiLGNtZGZpbCxEZWxldGVTdGFydHVwRmlsZSk7Ci0gICAgICAgIGlmIChEZWxldGVT dGFydHVwRmlsZSkgewotICAgICAgICAgICAgaW50IHJjID0gemRlbGV0KGNtZGZpbCk7Ci0gICAg ICAgICAgICBkZWJ1ZyhGMTExLCJkb2NsZWFuIHpkZWxldCIsY21kZmlsLHJjKTsKLSAgICAgICAg fQotICAgIH0KLSNlbmRpZiAvKiBOT0lDUCAqLwotICAgIHN5c2NsZWFudXAoKTsgICAgICAgICAg ICAgICAgICAgICAgIC8qIFN5c3RlbS1kZXBlbmRlbnQgY2xlYW51cCwgbGFzdCAqLwotfQotCi0v KiAgRCBPIEUgWCBJIFQgIC0tICBFeGl0IGZyb20gdGhlIHByb2dyYW0uICAqLwotCi0vKgotICBG aXJzdCBhcmcgaXMgZ2VuZXJhbCwgc3lzdGVtLWluZGVwZW5kZW50IHN5bWJvbDogR09PRF9FWElU IG9yIEJBRF9FWElULgotICBJZiBzZWNvbmQgYXJnIGlzIC0xLCB0YWtlIDFzdCBhcmcgbGl0ZXJh bGx5LgotICBJZiBzZWNvbmQgYXJnIGlzIG5vdCAtMSwgd29yayBpdCBpbnRvIHRoZSBleGl0IGNv ZGUuCi0qLwotVk9JRAotZG9leGl0KGV4aXRzdGF0LGNvZGUpIGludCBleGl0c3RhdCwgY29kZTsg ewotICAgIGV4dGVybiBpbnQgeF9sb2dnZWQsIHF1aXR0aW5nOwotI2lmZGVmIE9TMgotICAgIGV4 dGVybiBpbnQgZGlzcGxheV9kZW1vOwotICAgIGV4dGVybiBpbnQgU3lzSW5pdGVkOwotI2VuZGlm IC8qIE9TMiAqLwotI2lmZGVmIENLX0tFUkJFUk9TCi0jaWZkZWYgS1JCNAotICAgIGV4dGVybiBp bnQga3JiNF9hdXRvZGVsOwotI2VuZGlmIC8qIEtSQjQgKi8KLSNpZmRlZiBLUkI1Ci0gICAgZXh0 ZXJuIGludCBrcmI1X2F1dG9kZWw7Ci0jZW5kaWYgLyogS1JCNSAqLwotI2VuZGlmIC8qIENLX0tF UkJFUk9TICovCi0KLSNpZmRlZiBWTVMKLSAgICBjaGFyIGVudnN0cls2NF07Ci0gICAgc3RhdGlj ICRERVNDUklQVE9SKHN5bW5hbSwiQ0tFUk1JVF9TVEFUVVMiKTsKLSAgICBzdGF0aWMgc3RydWN0 IGRzYyRkZXNjcmlwdG9yX3Mgc3ltdmFsOwotI2VuZGlmIC8qIFZNUyAqLwotICAgIGludCBpOwot Ci0jaWZkZWYgREVCVUcKLSNpZmRlZiBVU0VfTFVDQUNIRQotICAgIGV4dGVybiBsb25nIGx1Y2Fs bHMsIGx1aGl0cywgeHhoaXRzLCBsdWxvb3A7Ci0gICAgZXh0ZXJuIGludCBsdXNpemU7Ci0jZW5k aWYgLyogVVNFX0xVQ0FDSEUgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICBleHRlcm4gaW50IGNtZHN0 YXRzW107Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotICAgIHF1aXR0aW5nKys7Ci0KLSNpZmRlZiBP UzIKLSAgICBpZiAoICFTeXNJbml0ZWQgKSB7Ci0gICAgICAgIHN0YXRpYyBpbnQgaW5pdGluZyA9 IDA7Ci0gICAgICAgIGlmICggaW5pdGluZyApCi0JICBleGl0KDI1Myk7Ci0gICAgICAgIGluaXRp bmcgPSAxOwotICAgICAgICBzeXNpbml0KCk7Ci0gICAgfQotI2VuZGlmIC8qIE9TMiAqLwotCi0g ICAgaWYgKGRlYmxvZykgewotI2lmZGVmIFVTRV9MVUNBQ0hFCi0JZGVidWcoRjEwMSwibG9va3Vw IGNhY2hlIHNpemUiLCIiLGx1c2l6ZSk7Ci0JZGVidWcoRjEwMSwibG9va3VwIGNhbGxzIC4uLi4i LCIiLGx1Y2FsbHMpOwotCWRlYnVnKEYxMDEsImxvb2t1cCBjYWNoZSBoaXRzIiwiIixsdWhpdHMp OwotCWRlYnVnKEYxMDEsImxvb2t1cCBzdGFydCBoaXRzIiwiIix4eGhpdHMpOwotCWRlYnVnKEYx MDEsImxvb2t1cCBsb29wIGl0ZXJhdGlvbnMiLCIiLGx1bG9vcCk7Ci0jZW5kaWYgLyogVVNFX0xV Q0FDSEUgKi8KLSNpZm5kZWYgTk9TUEwKLQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLQkg ICAgaWYgKGNtZHN0YXRzW2ldKQotCSAgICAgIGRlYnVnKEYxMTEsIkNNU1RBVFMiLGNraXRvYShp KSxjbWRzdGF0c1tpXSk7Ci0JfQotI2VuZGlmIC8qIE5PU1BMICovCi0JZGVidWcoRjEwMSwiZG9l eGl0IGV4aXRzdGF0IiwiIixleGl0c3RhdCk7Ci0JZGVidWcoRjEwMSwiZG9leGl0IGNvZGUiLCIi LGNvZGUpOwotCWRlYnVnKEYxMDEsImRvZXhpdCB4aXRzdGEiLCIiLHhpdHN0YSk7Ci0gICAgfQot I2VuZGlmIC8qIERFQlVHICovCi0KLSNpZmRlZiBDS19LRVJCRVJPUwotICAgIC8qIElmIHdlIGFy ZSBhdXRvbWF0aWNhbGx5IGRlc3Ryb3lpbmcgS2VyYmVyb3MgY3JlZGVudGlhbHMgb24gRXhpdCAq LwotICAgIC8qIGRvIGl0IG5vdy4gKi8KLSNpZmRlZiBLUkI0Ci0gICAgaWYgKGtyYjRfYXV0b2Rl bCA9PSBLUkJfREVMX0VYKSB7Ci0gICAgICAgIGV4dGVybiBzdHJ1Y3Qga3JiX29wX2RhdGEga3Ji X29wOwotICAgICAgICBrcmJfb3AudmVyc2lvbiA9IDQ7Ci0gICAgICAgIGtyYl9vcC5jYWNoZSA9 IE5VTEw7Ci0gICAgICAgIGNrX2tyYjRfZGVzdHJveSgma3JiX29wKTsKLSAgICB9Ci0jZW5kaWYg LyogS1JCNCAqLwotI2lmZGVmIEtSQjUKLSAgICBpZiAoa3JiNV9hdXRvZGVsID09IEtSQl9ERUxf RVgpIHsKLSAgICAgICAgZXh0ZXJuIHN0cnVjdCBrcmJfb3BfZGF0YSBrcmJfb3A7Ci0gICAgICAg IGV4dGVybiBjaGFyICoga3JiNV9kX2NjOwotICAgICAgICBrcmJfb3AudmVyc2lvbiA9IDU7Ci0g ICAgICAgIGtyYl9vcC5jYWNoZSA9IGtyYjVfZF9jYzsKLSAgICAgICAgY2tfa3JiNV9kZXN0cm95 KCZrcmJfb3ApOwotICAgIH0KLSNlbmRpZiAvKiBLUkI1ICovCi0jZW5kaWYgLyogQ0tfS0VSQkVS T1MgKi8KLQotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0gICAgaWYgKFN5c0luaXRlZCkK LSAgICB7Ci0jaWZkZWYgRENNREJVRgotICAgICAgICBleHRlcm4gc3RydWN0IGNtZHB0ciAqY21k c3RrOwotI2Vsc2UKLSAgICAgICAgZXh0ZXJuIHN0cnVjdCBjbWRwdHIgY21kc3RrW107Ci0jZW5k aWYgLyogRENNREJVRiAqLwotICAgICAgICBleHRlcm4gaW50IHR0X3N0YXR1c1tdOwotICAgICAg ICBleHRlcm4gaW50IHZtb2RlOwotCi0gICAgICAgIC8qIElmIHRoZXJlIGlzIGEgZGVtbyBzY3Jl ZW4gdG8gYmUgZGlzcGxheWVkLCBkaXNwbGF5IGl0ICovCi0gICAgICAgIGlmIChkaXNwbGF5X2Rl bW8pIHsKLSAgICAgICAgICAgIGRlbW9zY3JuKFZDTUQpOwotICAgICAgICAgICAgZGlzcGxheV9k ZW1vID0gMDsKLSAgICAgICAgfQotI2lmbmRlZiBLVUkKLSAgICAgICAgLyogVGhpcyBpcyBnb2lu ZyB0byBiZSBoaWRlb3VzLiAgSWYgd2UgaGF2ZSBhIHN0YXR1cyBsaW5lICovCi0gICAgICAgIC8q IGluIHRoZSBjb21tYW5kIHdpbmRvdyB0dXJuIGl0IG9mZiBiZWZvcmUgd2UgZXhpdC4gICAgICAq LwotCi0gICAgICAgIGlmICggdHRfc3RhdHVzW1ZDTURdICYmIHZtb2RlID09IFZDTUQgKSB7Ci0g ICAgICAgICAgICBkb21hYygiX2NsZWFyX3N0YXR1c2xpbmUiLCJzZXQgY29tbWFuZCBzdGF0dXNs aW5lIG9mZiIsCi0gICAgICAgICAgICAgICAgICAgY21kc3RrW2NtZGx2bF0uY2NmbGdzKTsKLSAg ICAgICAgICAgIGRlbG1hYygiX2NsZWFyX3N0YXR1c2xpbmUiLDEpOwotICAgICAgICAgICAgUmVx dWVzdFNjcmVlbk11dGV4KC0xKTsKLSAgICAgICAgICAgIFZzY3JuSXNEaXJ0eSh2bW9kZSk7Ci0g ICAgICAgICAgICBSZWxlYXNlU2NyZWVuTXV0ZXgoKTsKLSAgICAgICAgICAgIHdoaWxlICggSXNW c2NybkRpcnR5KHZtb2RlKSApCi0gICAgICAgICAgICAgICAgbXNsZWVwKDIwMCk7Ci0gICAgICAg ICAgICBSZXF1ZXN0U2NyZWVuTXV0ZXgoLTEpOwotICAgICAgICAgICAgUmVsZWFzZVNjcmVlbk11 dGV4KCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgRGlhbGVyU2VuZChP UFRfS0VSTUlUX0VYSVQsZXhpdHN0YXQpOwotI2lmbmRlZiBLVUkKLSAgICAgICAgZGVidWcoRjEw MCwiZG9leGl0IGFib3V0IHRvIG1zbGVlcCIsIiIsMCk7Ci0KLSAgICAgICAgaWYgKCBpc1dpbjk1 KCkgKQotICAgICAgICAgICAgbXNsZWVwKDI1MCk7Ci0jZW5kaWYgLyogS1VJICovCi0gICAgfQot I2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmZGVmIElLU0QKLSNp ZmRlZiBDS19MT0dJTgotICAgIGlmIChpbnNlcnZlciAmJiB4X2xvZ2dlZCkgewotI2lmbmRlZiBO T1NQTAotLyoKLSAgSWYgYSBtYWNybyBuYW1lZCAib25fbG9nb3V0IiBpcyBkZWZpbmVkLCBleGVj dXRlIGl0LiAgQWxzbyByZW1vdmUgaXQgZnJvbSB0aGUKLSAgbWFjcm8gdGFibGUsIGluIGNhc2Ug aXRzIGRlZmluaXRpb24gaW5jbHVkZXMgYW4gRVhJVCBvciBRVUlUIGNvbW1hbmQsIHdoaWNoCi0g IHdvdWxkIGNhdXNlIG11Y2ggcmVjdXJzaW9uIGFuZCB3b3VsZCBwcmV2ZW50IHRoZSBwcm9ncmFt IGZyb20gZXZlciBhY3R1YWxseQotICBFWElUaW5nLgotKi8KLQlpZiAobm1hYykgewkJCS8qIEFu eSBtYWNyb3MgZGVmaW5lZD8gKi8KLQkgICAgaW50IGs7CQkJLyogWWVzICovCi0JICAgIGNoYXIg KiBjbWQgPSAib25fbG9nb3V0IjsJLyogTVNWQyAyLnggY29tcGlsZXIgZXJyb3IgKi8KLQkgICAg ayA9IG1sb29rKG1hY3RhYixjbWQsbm1hYyk7CS8qIExvb2sgdXAgIm9uX2xvZ291dCIgKi8KLQkg ICAgaWYgKGsgPj0gMCkgewkJLyogSWYgZm91bmQsICovCi0JCSoobWFjdGFiW2tdLmt3ZCkgPSBO VUw7CS8qIHBva2UgaXRzIG5hbWUgZnJvbSB0aGUgdGFibGUsICovCi0JCWlmIChkb2RvKGssIiIs MCkgPiAtMSkJLyogc2V0IGl0IHVwLCAqLwotCQkgIHBhcnNlcigxKTsJCS8qIGFuZCBleGVjdXRl IGl0ICovCi0JICAgIH0KLQl9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQl6dmxvZ291dCgpOwotICAg IH0KLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotI2VuZGlmIC8qIElLU0QgKi8KLQotICAgIGRlYnVn KEYxMDAsImRvZXhpdCBhYm91dCB0byBkb2NsZWFuIiwiIiwwKTsKLSAgICBkb2NsZWFuKDEpOyAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhbiB1cCBtb3N0IHRoaW5ncyAqLwotCi0jaWZk ZWYgVk1TCi0gICAgaWYgKGNvZGUgPT0gLTEpCi0gICAgICBjb2RlID0gMDsgICAgICAgICAgICAg ICAgICAgICAgICAgLyogU2luY2Ugd2Ugc2V0IHR3byBkaWZmZXJlbnQgaXRlbXMgKi8KLSAgICBz cHJpbnRmKGVudnN0ciwiJWQiLCBleGl0c3RhdCB8IGNvZGUpOyAvKiBTQUZFICovCi0gICAgc3lt dmFsLmRzYyR3X2xlbmd0aCA9IChpbnQpc3RybGVuKGVudnN0cik7Ci0gICAgc3ltdmFsLmRzYyRh X3BvaW50ZXIgPSBlbnZzdHI7Ci0gICAgc3ltdmFsLmRzYyRiX2NsYXNzID0gRFNDJEtfQ0xBU1Nf UzsKLSAgICBzeW12YWwuZHNjJGJfZHR5cGUgPSBEU0MkS19EVFlQRV9UOwotICAgIGkgPSAyOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0b3JlIGluIGdsb2JhbCB0YWJsZSAqLwot I2lmZGVmIENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hcnRpbiBaaW5zZXIg Ki8KLSAgICBMSUIkU0VUX1NZTUJPTCgmc3ltbmFtLCAmc3ltdmFsLCAmaSk7Ci0jZWxzZQotICAg IGxpYiRzZXRfc3ltYm9sKCZzeW1uYW0sICZzeW12YWwsICZpKTsKLSNlbmRpZiAvKiBDT01NRU5U ICovCi0gICAgaWYgKGV4aXRzdGF0ID09IEJBRF9FWElUKQotICAgICAgZXhpdHN0YXQgPSBTUyRf QUJPUlQgfCBTVFMkTV9JTkhJQl9NU0c7Ci0gICAgaWYgKGV4aXRzdGF0ID09IEdPT0RfRVhJVCkK LSAgICAgIGV4aXRzdGF0ID0gU1MkX05PUk1BTCB8IFNUUyRNX0lOSElCX01TRzsKLSNlbHNlIC8q IE5vdCBWTVMgKi8KLSAgICBpZiAoY29kZSAhPSAtMSkgICAgICAgICAgICAgICAgICAgICAvKiBU YWtlIDFzdCBhcmcgbGl0ZXJhbGx5ICovCi0gICAgICBleGl0c3RhdCB8PSBjb2RlOwotI2VuZGlm IC8qIFZNUyAqLwotCi0jaWZkZWYgSUtTRAotI2lmZGVmIElLU0RCCi0gICAgZGVidWcoRjEwMSwi ZG9leGl0IGlrZGJvcGVuIiwiIixpa2Rib3Blbik7Ci0gICAgaWYgKGlrZGJvcGVuICYmIGRiZnAp IHsgICAgICAgICAgICAgLyogSWYgSUtTRCBkYXRhYmFzZSBvcGVuICovCi0gICAgICAgIGludCB4 OwotICAgICAgICB4ID0gZnJlZXNsb3QobXlkYnNsb3QpOyAgICAgICAgIC8qIEZyZWUgb3VyIHNs b3QuLi4gKi8KLSAgICAgICAgZGVidWcoRjEwMSwiZG9leGl0IGZyZWVzbG90IiwiIix4KTsKLSAg ICAgICAgZmNsb3NlKGRiZnApOyAgICAgICAgICAgICAgICAgICAvKiBhbmQgY2xvc2UgaXQuICov Ci0gICAgfQotI2VuZGlmIC8qIElLU0RCICovCi0jZW5kaWYgLyogSUtTRCAqLwotCi0vKiBXZSBo YXZlIHB1dCB0aGlzIG9mZiB0aWxsIHRoZSB2ZXJ5IGxhc3QgbW9tZW50Li4uICovCi0KLSNpZmRl ZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIENsb3Nl IHRoZSBkZWJ1ZyBsb2cuICovCi0gICAgICAgIGRlYnVnKEYxMDEsIkMtS2VybWl0IEVYSVQgc3Rh dHVzIiwiIixleGl0c3RhdCk7Ci0gICAgICAgICpkZWJmaWwgPSAnXDAnOwotICAgICAgICBkZWJs b2cgPSAwOwotICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcg Ki8KLQotI2lmZGVmIE9TMgotICAgIF9leGl0KGV4aXRzdGF0KTsgICAgICAgICAgICAvKiBFeGl0 IGZyb20gQy1LZXJtaXQgKG5vIG1hdHRlciB3aGF0KSAqLwotI2Vsc2UgLyogT1MyICovCi0gICAg ZXhpdChleGl0c3RhdCk7ICAgICAgICAgICAgICAgICAgICAgLyogRXhpdCBmcm9tIEMtS2VybWl0 ICovCi0jZW5kaWYgLyogT1MyICovCi19Ci0KLVZPSUQKLWJnY2hrKCkgeyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBDaGVjayBiYWNrZ3JvdW5kIHN0YXR1cyAqLwotICAgIGlmIChi Z3NldCA8IDApIHsgICAgICAgICAgICAgICAgICAgIC8qIFRoZXkgZGlkbid0IHR5cGUgU0VUIEJB Q0tHUk9VTkQgKi8KLSNpZmRlZiBWTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBT ZXQgcHJvbXB0IGZsYWcgYmFzZWQgb24gKi8KLSAgICAgICAgcGZsYWcgPSAhYmF0Y2g7ICAgICAg ICAgICAgICAgICAvKiB3aGF0IHdlIGRldGVjdGVkIGF0IHN0YXJ0dXAuICovCi0jZWxzZQotICAg ICAgICBwZmxhZyA9ICFiYWNrZ3JkOwotI2VuZGlmIC8qIFZNUyAqLwotICAgIH0gZWxzZSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSBTRVQgQkFDS0dST1VORCB2YWx1 ZSAqLwotICAgICAgICBwZmxhZyA9IChiZ3NldCA9PSAwID8gMSA6IDApOwotICAgIH0KLQotI2lm bmRlZiBOT0lDUAotICAgIC8qIE1lc3NhZ2UgZmxhZyBvbiBvbmx5IGlmIGF0IHRvcCBsZXZlbCwg cGZsYWcgaXMgb24sIGFuZCBRVUlFVCBpcyBPRkYgKi8KLSAgICBpZiAoIXhjbWRzcmMpCi0gICAg ICBtc2dmbGcgPSAocGZsYWcgPT0gMCkgPyAwIDogIXF1aWV0OwotICAgIGVsc2UgbXNnZmxnID0g MDsKLSNlbHNlCi0gICAgbXNnZmxnID0gMDsKLSNlbmRpZiAvKiBOT0lDUCAqLwotfQotCi0vKiBT ZXQgY29uc29sZSBpbnRlcnJ1cHRzICovCi0KLVZPSUQKLXNldGludCgpIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBBY2NvcmRpbmcgdG8gU0VUIENPTU1BTkQgSU5URVJSVVAgKi8K LSAgICBpbnQgeCA9IDA7Ci0gICAgaWYgKGNtZGludCkgIHggfD0gMTsKLSAgICBpZiAoeHN1c3Bl bmQpIHggfD0gMjsKLSAgICBkZWJ1ZyhGMTAxLCJzZXRpbnQiLCIiLHgpOwotCi0gICAgc3dpdGNo ICh4KSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IHRoZSBkZXNpcmVkIGNvbWJpbmF0 aW9uICovCi0gICAgICBjYXNlIDA6IGNvbm5vaSgpOyBicmVhazsgICAgICAgICAgLyogTm8gaW50 ZXJydXB0cyAqLwotICAgICAgY2FzZSAxOiBjb25pbnQodHJhcCxTSUdfSUdOKTsgYnJlYWs7Ci0g ICAgICBjYXNlIDI6IGNvbmludChTSUdfSUdOLHN0cHRyYXApOyBicmVhazsKLSAgICAgIGNhc2Ug MzogY29uaW50KHRyYXAsc3RwdHJhcCk7IGJyZWFrOwotICAgIH0KLSAgICBiZ2NoaygpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBiYWNrZ3JvdW5kIHN0YXR1cyAqLwotfQot Ci0jaWZkZWYgREVCVUcKLS8qICBEIEUgQiBVIEcgIC0tICBFbnRlciBhIHJlY29yZCBpbiB0aGUg ZGVidWdnaW5nIGxvZyAgKi8KLQotLyoKLSBDYWxsIHdpdGggYSBmb3JtYXQsIHR3byBzdHJpbmdz LCBhbmQgYSBudW1iZXI6Ci0gICBmICAtIEZvcm1hdCwgYSBiaXQgc3RyaW5nIGluIHJhbmdlIDAt Ny4KLSAgICAgICAgSWYgYml0IHggaXMgb24sIHRoZW4gYXJndW1lbnQgbnVtYmVyIHggaXMgcHJp bnRlZC4KLSAgIHMxIC0gU3RyaW5nLCBhcmd1bWVudCBudW1iZXIgMS4gIElmIHNlbGVjdGVkLCBw cmludGVkIGFzIGlzLgotICAgczIgLSBTdHJpbmcsIGFyZ3VtZW50IG51bWJlciAyLiAgSWYgc2Vs ZWN0ZWQsIHByaW50ZWQgaW4gYnJhY2tldHMuCi0gICBuICAtIExvbmcgaW50LCBhcmd1bWVudCAz LiAgSWYgc2VsZWN0ZWQsIHByaW50ZWQgcHJlY2VkZWQgYnkgZXF1YWxzIHNpZ24uCi0KLSAgIGY9 MCBpcyBzcGVjaWFsOiBwcmludCBzMSxzMiwgYW5kIGludGVycHJldCBuIGFzIGEgY2hhci4KLQot ICAgZj1GMDExICgzKSBpcyBhbHNvIHNwZWNpYWw7IGluIHRoaXMgY2FzZSBzMiBpcyBpbnRlcnBl dGVkIGFzIGEgY291bnRlZAotICAgc3RyaW5nIHRoYXQgbWlnaHQgY29udGFpbiBOVUxzLiAgbiBp cyB0aGUgbGVuZ3RoLiAgSWYgbiBpcyBuZWdhdGl2ZSwgdGhpcwotICAgbWVhbnMgdGhlIHN0cmlu ZyBoYXMgYmVlbiB0cnVuY2F0ZWQgYW5kICIuLiIgc2hvdWxkIGJlIHByaW50ZWQgYWZ0ZXIgdGhl Ci0gICBmaXJzdCBuIGJ5dGVzLiAgTlVMIGFuZCBMRiBieXRlcyBhcmUgcHJpbnRlZCBhcyAiPE5V TD4iIGFuZCAiPExGPiIuCi0KLSAgIEdsb2JhbHM6Ci0gICAgIGRlYmxvZzogbm9uemVybyBpZiBk ZWJ1ZyBsb2cgb3Blbi4KLSAgICAgZGVib2s6ICBub256ZXJvIGlmIG9rIHRvIHdyaXRlIGVudHJp ZXMuCi0qLwotLyoKLSAgV0FSTklORzogRG9uJ3QgY2hhbmdlIERFQlVGTCB3aXRob3V0IGNoYW5n aW5nIHNwcmludGYoKSBmb3JtYXRzIGJlbG93LAotICBhY2NvcmRpbmdseS4KLSovCi0jZGVmaW5l IERCVUZMIDQwMDAKLS8qCi0gIFdBUk5JTkc6IFRoaXMgcm91dGluZSBpcyBub3QgdGhyZWFkLXNh ZmUsIGVzcGVjaWFsbHkgd2hlbiBLZXJtaXQgaXMKLSAgZXhlY3V0aW5nIG9uIG11bHRpcGxlIENQ VXMgLS0gYXMgZGlmZmVyZW50IHRocmVhZHMgd3JpdGUgdG8gdGhlIHNhbWUKLSAgc3RhdGljIGJ1 ZmZlciwgdGhlIGRlYnVnIHN0YXRlbWVudHMgYXJlIGFsbCBpbnRlcmxlYXZlZC4gIFRvIGJlIGZp eGVkCi0gIGxhdGVyLi4uCi0qLwotc3RhdGljIGNoYXIgKmRicHRyID0gKGNoYXIgKikwOwotCi1p bnQKLSNpZmRlZiBDS19BTlNJQwotZG9kZWJ1ZyhpbnQgZiwgY2hhciAqczEsIGNoYXIgKnMyLCBD S19PRkZfVCBuKQotI2Vsc2UKLWRvZGVidWcoZixzMSxzMixuKSBpbnQgZjsgY2hhciAqczEsICpz MjsgQ0tfT0ZGX1QgbjsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogZG9kZWJ1ZyAqLyB7Ci0g ICAgY2hhciAqc3A7Ci0gICAgaW50IGxlbjEsIGxlbjI7Ci0gICAgZXh0ZXJuIGludCBkZWJ0aW07 Ci0jaWZkZWYgT1MyCi0gICAgZXh0ZXJuIGludCBTeXNJbml0ZWQ7Ci0jZW5kaWYgLyogT1MyICov Ci0KLSAgICBpZiAoIWRlYmxvZyB8fCAhZGVib2spCi0gICAgICByZXR1cm4oMCk7Ci0KLSNpZmRl ZiBDT01NRU5UCi0gICAgLyogZXhwZW5zaXZlLi4uICovCi0gICAgaWYgKCFjaGtmbihaREZJTEUp KQkJCS8qIERlYnVnIGxvZyBub3Qgb3BlbiwgZG9uJ3QuICovCi0gICAgICByZXR1cm4oMCk7Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIGlmICghZGJwdHIpIHsgICAgICAgICAgICAgICAgICAg ICAgIC8qIEFsbG9jYXRlIG1lbW9yeSBidWZmZXIgKi8KLSAgICAgICAgZGJwdHIgPSBtYWxsb2Mo REJVRkwrNCk7ICAgICAgICAvKiBUaGlzIG9ubHkgaGFwcGVucyBvbmNlICovCi0gICAgICAgIGlm ICghZGJwdHIpIHsKLSAgICAgICAgICAgIHpjbG9zZShaREZJTEUpOwotICAgICAgICAgICAgcmV0 dXJuKDApOwotICAgICAgICB9Ci0gICAgfQotLyoKLSAgVGhpcyBwcmV2ZW50cyBpbmZpbml0ZSBy ZWN1cnNpb24gaW4gY2FzZSB3ZSBhY2NpZGVudGFsbHkgcHV0IGEgZGVidWcoKQotICBjYWxsIGlu IHRoaXMgcm91dGluZSwgb3IgY2FsbCBhbm90aGVyIHJvdXRpbmUgdGhhdCBjb250YWlucyBkZWJ1 ZygpIGNhbGxzLgotICBGcm9tIHRoaXMgcG9pbnQgb24sIGFsbCByZXR1cm5zIGZyb20gdGhpcyBy ZXR1cm4gbXVzdCBiZSB2aWEgZ290byB4ZGVidWcsCi0gIHdoaWNoIHNldHMgZGVibG9nIGJhY2sg dG8gMS4KLSovCi0jaWZkZWYgT1MyCi0gICAgaWYgKFN5c0luaXRlZCkgewotCWlmIChSZXF1ZXN0 RGVidWdNdXRleCgzMDAwMCkpCi0JICAgIGdvdG8geGRlYnVnOwotICAgIH0KLSNlbHNlIC8qIE9T MiAqLwotICAgIGRlYmxvZyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByZXZlbnQg aW5maW5pdGUgcmVjdXJzaW9uICovCi0jZW5kaWYgLyogT1MyICovCi0KLSAgICBpZiAoZGVidGlt KSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBUaW1lc3RhbXAgKi8KLSAgICAgICAgY2hhciAq dGIsIHRzYnVmWzQ4XTsKLSAgICAgICAgenRpbWUoJnRiKTsKLSAgICAgICAgY2tzdHJuY3B5KHRz YnVmLHRiLDMyKTsKLSAgICAgICAgaWYgKHp0bXNlYyA+IC0xTCkgewotCSAgICBzcHJpbnRmKHRz YnVmKzE5LCIuJTAzbGQgIix6dG1zZWMpOyAvKiBTQUZFICovCi0JfSBlbHNlIHsKLQkgICAgdHNi dWZbMTldID0gJzonOwotCSAgICB0c2J1ZlsyMF0gPSBTUDsKLQkgICAgdHNidWZbMjFdID0gTlVM OwotCX0KLSAgICAgICAgenNvdXQoWkRGSUxFLHRzYnVmKzExKTsKLSAgICB9Ci0gICAgaWYgKCFz MSkgczE9IihOVUxMKSI7Ci0gICAgaWYgKCFzMikgczI9IihOVUxMKSI7Ci0KLSAgICBsZW4xID0g c3RybGVuKHMxKTsKLSAgICBsZW4yID0gc3RybGVuKHMyKTsKLQotI2lmZGVmIENPTU1FTlQKLS8q Ci0gIFRoaXMgc2hvdWxkIHdvcmssIGJ1dCBpdCBkb2Vzbid0LgotICBTbyBpbnN0ZWFkIHdlJ2xs IGNvcGUgd2l0aCBvdmVyZmxvdyB2aWEgc3ByaW50ZiBmb3JtYXRzLgotICBOLkIuOiBVTkZPUlRV TkFURUxZLCB0aGlzIG1lYW5zIHdlIGhhdmUgdG8gcHV0IGNvbnN0YW50cyBpbiB0aGUKLSAgc3By aW50ZiBmb3JtYXRzLgotKi8KLSAgICBpZiAoZiAhPSBGMDExICYmICghZiB8fCAoZiAmIDYpKSkg eyAvKiBTdHJpbmcgYXJndW1lbnQocykgaW5jbHVkZWQ/ICovCi0gICAgICAgIHggPSAoaW50KSBz dHJsZW4oczEpICsgKGludCkgc3RybGVuKHMyKSArIDE4OwotICAgICAgICBpZiAoeCA+IGRidWZs KSB7ICAgICAgICAgICAgICAgIC8qIExvbmdlciB0aGFuIGJ1ZmZlcj8gKi8KLSAgICAgICAgICAg IGlmIChkYnB0cikgICAgICAgICAgICAgICAgICAvKiBZZXMsIGZyZWUgcHJldmlvdXMgYnVmZmVy ICovCi0gICAgICAgICAgICAgIGZyZWUoZGJwdHIpOwotICAgICAgICAgICAgZGJwdHIgPSAoY2hh ciAqKSBtYWxsb2MoeCArIDIpOyAvKiBBbGxvY2F0ZSBhIG5ldyBvbmUgKi8KLSAgICAgICAgICAg IGlmICghZGJwdHIpIHsKLSAgICAgICAgICAgICAgICB6c291dGwoWkRGSUxFLCJERUJVRzogTWVt b3J5IGFsbG9jYXRpb24gZmFpbHVyZSIpOwotICAgICAgICAgICAgICAgIGRlYmxvZyA9IDA7Ci0g ICAgICAgICAgICAgICAgemNsb3NlKFpERklMRSk7Ci0gICAgICAgICAgICAgICAgZ290byB4ZGVi dWc7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRidWZsID0geDsKLSAg ICAgICAgICAgICAgICBzcHJpbnRmKGRicHRyLCJERUJVRzogQnVmZmVyIGV4cGFuZGVkIHRvICVk XG4iLCB4ICsgMTgpOwotICAgICAgICAgICAgICAgIHpzb3V0bChaREZJTEUsZGJwdHIpOwotICAg ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2lm ZGVmIENPTU1FTlQKLS8qIFRoZSBhZm9yZW1lbnRpb25lZCBzcHJpbnRmKCkgZm9ybWF0cyB3ZXJl IGxpa2UgdGhpczogKi8KLSAgICAgICAgaWYgKG4gPiAzMSAmJiBuIDwgMTI3KQotICAgICAgICAg IHNwcmludGYoc3AsIiUuMTAwcyUuMjAwMHM6JWNcbiIsczEsczIsKENIQVIpIG4pOwotICAgICAg ICBlbHNlIGlmIChuIDwgMzIgfHwgbiA9PSAxMjcpCi0gICAgICAgICAgc3ByaW50ZihzcCwiJS4x MDBzJS4yMDAwczpeJWNcbiIsczEsczIsKENIQVIpICgobis2NCkgJiAweDdGKSk7Ci0gICAgICAg IGVsc2UgaWYgKG4gPiAxMjcgJiYgbiA8IDE2MCkKLSAgICAgICAgICBzcHJpbnRmKHNwLCIlLjEw MHMlLjIwMDBzOn5eJWNcbiIsczEsczIsKENIQVIpKChuLTY0KSAmIDB4N0YpKTsKLSAgICAgICAg ZWxzZSBpZiAobiA+IDE1OSAmJiBuIDwgMjU2KQotICAgICAgICAgIHNwcmludGYoc3AsIiUuMTAw cyUuMjAwMHM6fiVjXG4iLHMxLHMyLChDSEFSKSAobiAmIDB4N0YpKTsKLSAgICAgICAgZWxzZSBz cHJpbnRmKHNwLCIlLjEwMHMlLjIwMDBzOiVsZFxuIixzMSxzMixuKTsKLS8qCi0gIEJ1dCwgbmF0 dXJhbGx5LCBpdCB0dXJucyBvdXQgdGhlc2UgYXJlIG5vdCBwb3J0YWJsZSBlaXRoZXIsIHNvIG5v dwotICB3ZSBkbyB0aGUgc3R1cGlkZXN0IHBvc3NpYmxlIHRoaW5nLgotKi8KLSNlbmRpZiAvKiBD T01NRU5UICovCi0KLSNpZmRlZiBCSUdCVUZPSwotLyogTmVlZCB0byBhY2NlcHQgbG9uZ2VyIHN0 cmluZ3Mgd2hlbiBkZWJ1Z2dpbmcgYXV0aGVudGljYXRlZCBjb25uZWN0aW9ucyAqLwotICAgIGlm IChmID09IEYwMTApIHsKLSAgICAgICAgaWYgKGxlbjIgKyAyID49IERCVUZMKSBzMiA9ICIoc3Ry aW5nIHRvbyBsb25nKSI7Ci0gICAgfSBlbHNlIGlmIChmICE9IEYwMTEgJiYgZiAhPSBGMTAwKSB7 Ci0gICAgICAgIGlmIChsZW4xID4gMTAwKSBzMSA9ICIoc3RyaW5nIHRvbyBsb25nKSI7Ci0gICAg ICAgIGlmIChsZW4yICsgMTAxID49IERCVUZMKSBzMiA9ICIoc3RyaW5nIHRvbyBsb25nKSI7Ci0g ICAgfQotI2Vsc2UKLSAgICBpZiAoZiAhPSBGMDExKSB7Ci0gICAgICAgIGlmIChsZW4xID4gMTAw KSBzMSA9ICIoc3RyaW5nIHRvbyBsb25nKSI7Ci0gICAgICAgIGlmIChsZW4yICsgMTAxID49IERC VUZMKSBzMiA9ICIoc3RyaW5nIHRvbyBsb25nKSI7Ci0gICAgfQotI2VuZGlmIC8qIEJJR0JVRk9L ICovCi0KLSAgICBzcCA9IGRicHRyOwotCi0gICAgc3dpdGNoIChmKSB7ICAgICAgICAgICAgICAg IC8qIFdyaXRlIGxvZyByZWNvcmQgYWNjb3JkaW5nIHRvIGZvcm1hdC4gKi8KLSAgICAgIGNhc2Ug RjAwMDogICAgICAgICAgICAgICAgLyogMCA9IHByaW50IGJvdGggc3RyaW5ncywgYW5kIG4gYXMg YSBjaGFyLiAqLwotICAgICAgICBpZiAobGVuMiA+IDApIHsKLSAgICAgICAgICAgIGlmICgobiA+ IDMxICYmIG4gPCAxMjcpIHx8IChuID4gMTU5ICYmIG4gPCAyNTYpKQotICAgICAgICAgICAgICBz cHJpbnRmKHNwLCIlc1slc109JWNcbiIsczEsczIsKENIQVIpIG4pOwotICAgICAgICAgICAgZWxz ZSBpZiAobiA8IDMyIHx8IG4gPT0gMTI3KQotICAgICAgICAgICAgICBzcHJpbnRmKHNwLCIlc1sl c109XiVjXG4iLHMxLHMyLChDSEFSKSAoKG4rNjQpICYgMHg3RikpOwotICAgICAgICAgICAgZWxz ZSBpZiAobiA+IDEyNyAmJiBuIDwgMTYwKQotICAgICAgICAgICAgICBzcHJpbnRmKHNwLCIlc1sl c109fl4lY1xuIixzMSxzMiwoQ0hBUikoKG4tNjQpICYgMHg3RikpOwotICAgICAgICAgICAgZWxz ZSBzcHJpbnRmKHNwLCIlc1slc109MHglbFhcbiIsczEsczIsKGxvbmcpbik7Ci0gICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgICBpZiAoKG4gPiAzMSAmJiBuIDwgMTI3KSB8fCAobiA+IDE1OSAm JiBuIDwgMjU2KSkKLSAgICAgICAgICAgICAgc3ByaW50ZihzcCwiJXM9JWNcbiIsczEsKENIQVIp IG4pOwotICAgICAgICAgICAgZWxzZSBpZiAobiA8IDMyIHx8IG4gPT0gMTI3KQotICAgICAgICAg ICAgICBzcHJpbnRmKHNwLCIlcz1eJWNcbiIsczEsKENIQVIpICgobis2NCkgJiAweDdGKSk7Ci0g ICAgICAgICAgICBlbHNlIGlmIChuID4gMTI3ICYmIG4gPCAxNjApCi0gICAgICAgICAgICAgIHNw cmludGYoc3AsIiVzPX5eJWNcbiIsczEsKENIQVIpKChuLTY0KSAmIDB4N0YpKTsKLSAgICAgICAg ICAgIGVsc2Ugc3ByaW50ZihzcCwiJXM9MHglbFhcbiIsczEsKGxvbmcpbik7Ci0gICAgICAgIH0K LSAgICAgICAgaWYgKHpzb3V0KFpERklMRSxkYnB0cikgPCAwKSB7Ci0gICAgICAgICAgICBkZWJs b2cgPSAwOwotICAgICAgICAgICAgemNsb3NlKFpERklMRSk7Ci0gICAgICAgIH0KLSNpZmRlZiBD S1NZU0xPRwotICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX0RCICYmIGNreGxvZ2dpbmcp IHsKLSAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0RCLDEsImRlYnVnIixkYnB0cixOVUxMKTsK LSAgICAgICAgfQotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgICAgIGJyZWFrOwotCi0gICAg ICBjYXNlIEYwMDE6ICAgICAgICAgICAgICAgICAgICAgICAgLyogMSwgIj1uIiAqLwotI2lmZGVm IENPTU1FTlQKLSAgICAgICAgLyogVGhpcyB3YXMgbmV2ZXIgdXNlZCAqLwotICAgICAgICBzcHJp bnRmKHNwLCI9JXNcbiIsY2tmc3RvYShuKSk7Ci0jZWxzZQotICAgICAgICAvKiBMaWtlIEYxMTEs IGJ1dCBzaG93cyBudW1iZXIgbiBpbiBoZXggKi8KLQlja21ha3htc2coc3AsREJVRkwsCi0JCSAg czEsCi0JCSAgKCpzMSA/ICI6IiA6ICIiKSwKLQkJICBzMiwKLQkJICAoKnMyID8gIjoiIDogIiIp LAotCQkgIGNrbHRveChuKSwKLQkJICAiXG4iLAotCQkgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVM TCxOVUxMCi0JCSAgKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIGlmICh6c291dCha REZJTEUsZGJwdHIpIDwgMCkgewotICAgICAgICAgICAgZGVibG9nID0gMDsKLSAgICAgICAgICAg IHpjbG9zZShaREZJTEUpOwotICAgICAgICB9Ci0jaWZkZWYgQ0tTWVNMT0cKLSAgICAgICAgaWYg KGNreHN5c2xvZyA+PSBTWVNMR19EQiAmJiBja3hsb2dnaW5nKSB7Ci0gICAgICAgICAgICBja3N5 c2xvZyhTWVNMR19EQiwxLCJkZWJ1ZyIsZGJwdHIsTlVMTCk7Ci0gICAgICAgIH0KLSNlbmRpZiAv KiBDS1NZU0xPRyAqLwotICAgICAgICBicmVhazsKLQotLyoKLSAgVGhpcyBvbmUgd2FzIG5ldmVy IHVzZWQgc28gKE9jdG9iZXIgMjAwMCkgd2Ugbm93IHVzZSBpdCBsaWtlIEYwMTEsCi0gIGV4Y2Vw dCBpbiB0aGlzIGNhc2Ugd2UgdHJlYXQgczIgYXMgTlVMIHRlcm1pbmF0ZWQuCi0qLwotICAgICAg Y2FzZSBGMDEwOgotCW4gPSAtZGVieGxlbjsKLS8qCi0gIFRoaXMgb25lIHRyZWF0cyBuIGFzIHRo ZSBsZW5ndGggb2YgdGhlIHN0cmluZyBzMiwgd2hpY2ggbWF5IGNvbnRhaW4gTlVMcy4KLSAgSXQn cyBnb29kIGZvciBsb2dnaW5nIE5VTC1iZWFyaW5nIGRhdGEgaW4gdGhlIGRlYnVnIGxvZy4KLSov Ci0gICAgICBjYXNlIEYwMTE6IHsKLQkgIGludCBpLCBqLCBjb250ZCA9IDA7Ci0JICBjaGFyICog cCA9IHMyLCAqcGJ1ZiA9IE5VTEw7CS8qIHAgPSBzb3VyY2UgcG9pbnRlciAqLwotCSAgaW50IG07 CQkJLyogcGJ1ZiA9IGRlc3RpbmF0aW9uIHBvaW50ZXIgKi8KLQotCSAgaWYgKGYgPT0gRjAxMSkg ewotCSAgICAgIGlmIChuIDwgMCkgewkJLyogbiA9IHNpemUgb2Ygc291cmNlICovCi0JCSAgbiA9 IDAgLSBuOwkJLyogTmVnYXRpdmUgbWVhbnMgdG8gYWRkICIuLi4iICovCi0JCSAgY29udGQgPSAx OwotCSAgICAgIH0KLQkgIH0gZWxzZSB7Ci0JICAgICAgaW50IHgsIGZsYWcgPSAwOwotCSAgICAg IHggPSBzdHJsZW4oczIpOwotCSAgICAgIGlmIChuIDwgMCkgewotCQkgIGZsYWcgPSAxOwotCQkg IG4gPSAwIC0gbjsKLQkgICAgICB9Ci0JICAgICAgaWYgKHggPCBuKQotCQluID0geDsKLQkgIH0K LQkgIGlmIChuID09IDApCQkJLyogMCBtZWFucyBkbyBub3RoaW5nICovCi0JICAgIGdvdG8geGRl YnVnOwotCSAgbSA9IERCVUZMIC0gODsJCS8qIEdldCBzaXplIGZvciBpbnRlcnByZXRlZCBwYXJ0 ICovCi0JICBpZiAobiA+IG0pCQkJLyogRW5zdXJlIHJlcXVlc3RlZCBzaXplIG5vdCB0b28gYmln ICovCi0JICAgIG4gPSBtOwotCSAgcGJ1ZiA9IGRicHRyOwkJCS8qIENvbnN0cnVjdGlvbiBwb2lu dGVyICovCi0JICBpID0gMDsKLQkgIHBidWZbaSsrXSA9ICdbJzsJCS8qIEludGVycHJldCB0aGUg c3RyaW5nIGludG8gaXQgKi8KLQkgIGZvciAoaiA9IDA7IGogPCBuICYmIGkgPCBtLTQ7IHArKyxq KyspIHsgLyogY2hhciBieSBjaGFyLi4uICovCi0JICAgICAgaWYgKCpwID09IExGKSB7Ci0JCSAg aWYgKGkgPj0gbS00KQotCQkgICAgYnJlYWs7Ci0JCSAgcGJ1ZltpKytdID0gJzwnOwotCQkgIHBi dWZbaSsrXSA9ICdMJzsKLQkJICBwYnVmW2krK10gPSAnRic7Ci0JCSAgcGJ1ZltpKytdID0gJz4n OwotCQkgIGNvbnRpbnVlOwotCSAgICAgIH0gZWxzZSBpZiAoKnAgPT0gQ1IpIHsKLQkJICBpZiAo aSA+PSBtLTQpCi0JCSAgICBicmVhazsKLQkJICBwYnVmW2krK10gPSAnPCc7Ci0JCSAgcGJ1Zltp KytdID0gJ0MnOwotCQkgIHBidWZbaSsrXSA9ICdSJzsKLQkJICBwYnVmW2krK10gPSAnPic7Ci0J CSAgY29udGludWU7Ci0JICAgICAgfSBlbHNlIGlmICgqcCA9PSBIVCkgewotCQkgIGlmIChpID49 IG0tNSkKLQkJICAgIGJyZWFrOwotCQkgIHBidWZbaSsrXSA9ICc8JzsKLQkJICBwYnVmW2krK10g PSAnVCc7Ci0JCSAgcGJ1ZltpKytdID0gJ0EnOwotCQkgIHBidWZbaSsrXSA9ICdCJzsKLQkJICBw YnVmW2krK10gPSAnPic7Ci0JCSAgY29udGludWU7Ci0JICAgICAgfSBlbHNlIGlmICgqcCkgewot CQkgIHBidWZbaSsrXSA9ICpwOwotCQkgIGNvbnRpbnVlOwotCSAgICAgIH0gZWxzZSB7Ci0JCSAg aWYgKGkgPj0gbS01KQotCQkgICAgYnJlYWs7Ci0JCSAgcGJ1ZltpKytdID0gJzwnOwotCQkgIHBi dWZbaSsrXSA9ICdOJzsKLQkJICBwYnVmW2krK10gPSAnVSc7Ci0JCSAgcGJ1ZltpKytdID0gJ0wn OwotCQkgIHBidWZbaSsrXSA9ICc+JzsKLQkJICBjb250aW51ZTsKLQkgICAgICB9Ci0JICB9Ci0J ICBpZiAoaSA8IG0tMiAmJiAoKnAgfHwgY29udGQpKSB7Ci0JICAgICAgcGJ1ZltpKytdID0gJy4n OwotCSAgICAgIHBidWZbaSsrXSA9ICcuJzsKLQkgIH0KLQkgIHBidWZbaSsrXSA9ICddJzsKLQkg IHBidWZbaV0gPSBOVUw7Ci0JICBpZiAoenNvdXQoWkRGSUxFLHMxKSA8IDApIHsKLQkgICAgICBk ZWJsb2cgPSAwOwotCSAgICAgIHpjbG9zZShaREZJTEUpOwotCSAgfQotCSAgaWYgKHpzb3V0bCha REZJTEUscGJ1ZikgPCAwKSB7Ci0JICAgICAgZGVibG9nID0gMDsKLQkgICAgICB6Y2xvc2UoWkRG SUxFKTsKLQkgIH0KLSNpZmRlZiBDS1NZU0xPRwotCSAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19E QiAmJiBja3hsb2dnaW5nKSB7Ci0JICAgICAgY2tzeXNsb2coU1lTTEdfREIsMSwiZGVidWciLHMx LHBidWYpOwotCSAgfQotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgICAgIH0KLSAgICAgICAg YnJlYWs7Ci0KLSAgICAgIGNhc2UgRjEwMDogICAgICAgICAgICAgICAgICAgICAgICAvKiA0LCAi czEiICovCi0gICAgICAgIGlmICh6c291dGwoWkRGSUxFLHMxKSA8IDApIHsKLSAgICAgICAgICAg IGRlYmxvZyA9IDA7Ci0gICAgICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKLSAgICAgICAgfQotI2lm ZGVmIENLU1lTTE9HCi0gICAgICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfREIgJiYgY2t4bG9n Z2luZykgewotICAgICAgICAgICAgY2tzeXNsb2coU1lTTEdfREIsMSwiZGVidWciLHMxLE5VTEwp OwotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAg ICBjYXNlIEYxMDE6ICAgICAgICAgICAgICAgICAgICAgICAgLyogNSwgInMxPW4iICovCi0gICAg ICAgIHNwcmludGYoc3AsIiVzPSVzXG4iLHMxLGNrZnN0b2EobikpOwotICAgICAgICBpZiAoenNv dXQoWkRGSUxFLGRicHRyKSA8IDApIHsKLSAgICAgICAgICAgIGRlYmxvZyA9IDA7Ci0gICAgICAg ICAgICB6Y2xvc2UoWkRGSUxFKTsKLSAgICAgICAgfQotI2lmZGVmIENLU1lTTE9HCi0gICAgICAg IGlmIChja3hzeXNsb2cgPj0gU1lTTEdfREIgJiYgY2t4bG9nZ2luZykgewotICAgICAgICAgICAg Y2tzeXNsb2coU1lTTEdfREIsMSwiZGVidWciLGRicHRyLE5VTEwpOwotICAgICAgICB9Ci0jZW5k aWYgLyogQ0tTWVNMT0cgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEYxMTA6ICAgICAg ICAgICAgICAgICAgICAgICAgLyogNiwgInMxW3MyXSIgKi8KLSAgICAgICAgc3ByaW50ZihzcCwi JXNbJXNdXG4iLHMxLHMyKTsKLSAgICAgICAgaWYgKHpzb3V0KFpERklMRSxkYnB0cikgPCAwKSB7 Ci0gICAgICAgICAgICBkZWJsb2cgPSAwOwotICAgICAgICAgICAgemNsb3NlKFpERklMRSk7Ci0g ICAgICAgIH0KLSNpZmRlZiBDS1NZU0xPRwotICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xH X0RCICYmIGNreGxvZ2dpbmcpIHsKLSAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0RCLDEsImRl YnVnIixkYnB0cixOVUxMKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAg ICAgIGJyZWFrOwotICAgICAgY2FzZSBGMTExOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDcs ICJzMVtzMl09biIgKi8KLSAgICAgICAgc3ByaW50ZihzcCwiJXNbJXNdPSVzXG4iLHMxLHMyLGNr ZnN0b2EobikpOwotICAgICAgICBpZiAoenNvdXQoWkRGSUxFLGRicHRyKSA8IDApIHsKLSAgICAg ICAgICAgIGRlYmxvZyA9IDA7Ci0gICAgICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKLSAgICAgICAg fQotI2lmZGVmIENLU1lTTE9HCi0gICAgICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfREIgJiYg Y2t4bG9nZ2luZykgewotICAgICAgICAgICAgY2tzeXNsb2coU1lTTEdfREIsMSwiZGVidWciLGRi cHRyLE5VTEwpOwotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICAgICAgYnJl YWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBzcHJpbnRmKHNwLCJcbj9JbnZhbGlkIGZvcm1h dCBmb3IgZGVidWcoKSAtICVkXG4iLGYpOwotICAgICAgICBpZiAoenNvdXQoWkRGSUxFLGRicHRy KSA8IDApIHsKLSAgICAgICAgICAgIGRlYmxvZyA9IDA7Ci0gICAgICAgICAgICB6Y2xvc2UoWkRG SUxFKTsKLSAgICAgICAgfQotI2lmZGVmIENLU1lTTE9HCi0gICAgICAgIGlmIChja3hzeXNsb2cg Pj0gU1lTTEdfREIgJiYgY2t4bG9nZ2luZykgewotICAgICAgICAgICAgY2tzeXNsb2coU1lTTEdf REIsMSwiZGVidWciLGRicHRyLE5VTEwpOwotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tTWVNMT0cg Ki8KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB4ZGVidWc6ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIENvbW1vbiBleGl0IHBvaW50ICovCi0jaWZkZWYgT1MyCi0gICAgaWYgKFN5 c0luaXRlZCkKLQlSZWxlYXNlRGVidWdNdXRleCgpOwotI2Vsc2UgLyogT1MyICovCi0gICAgZGVi bG9nID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSB0aGlzICovCi0jZW5k aWYgLyogT1MyICovCi0gICAgcmV0dXJuKDApOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwot ZG9oZXhkdW1wKENIQVIgKm1zZywgQ0hBUiAqc3QsIGludCBjbnQpCi0jZWxzZQotZG9oZXhkdW1w KG1zZyxzdCxjbnQpIENIQVIgKm1zZzsgQ0hBUiAqc3Q7IGludCBjbnQ7Ci0jZW5kaWYgLyogQ0tf QU5TSUMgKi8KLS8qIGRvaGV4ZHVtcCAqLyB7Ci0gICAgaW50IGkgPSAwLCBqID0gMCwgayA9IDA7 Ci0gICAgY2hhciB0bXBbOF07Ci0jaWZkZWYgT1MyCi0gICAgZXh0ZXJuIGludCBTeXNJbml0ZWQ7 Ci0jZW5kaWYgLyogT1MyICovCi0KLSAgICBpZiAoIWRlYmxvZykgcmV0dXJuKDApOwkJLyogSWYg bm8gZGVidWcgbG9nLCBkb24ndC4gKi8KLSAgICBpZiAoIWRicHRyKSB7ICAgICAgICAgICAgICAg ICAgICAgICAvKiBBbGxvY2F0ZSBtZW1vcnkgYnVmZmVyICovCi0gICAgICAgIGRicHRyID0gbWFs bG9jKERCVUZMKzEpOyAgICAgICAgLyogVGhpcyBvbmx5IGhhcHBlbnMgb25jZSAqLwotICAgICAg ICBpZiAoIWRicHRyKSB7Ci0gICAgICAgICAgICBkZWJsb2cgPSAwOwotICAgICAgICAgICAgemNs b3NlKFpERklMRSk7Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0K LSNpZmRlZiBPUzIKLSAgICBpZiAoU3lzSW5pdGVkKSB7Ci0JaWYgKFJlcXVlc3REZWJ1Z011dGV4 KDMwMDAwKSkKLQkgICAgZ290byB4ZGVidWc7Ci0gICAgfQotI2Vsc2UgLyogT1MyICovCi0gICAg ZGVibG9nID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJldmVudCBpbmZpbml0ZSBy ZWN1cnNpb24gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgIGlmIChtc2cgIT0gTlVMTCkgewot CWNrbWFreG1zZyhkYnB0ciwKLQkJICBEQlVGTCwKLQkJICAiSEVYRFVNUDogIiwKLQkJICAoY2hh ciAqKW1zZywKLQkJICAiICgiLAotCQkgIGNraXRvYShjbnQpLAotCQkgICIgYnl0ZXMpXG4iLAot CQkgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwKLQkJICk7Ci0gICAgICAgIGlm ICh6c291dChaREZJTEUsZGJwdHIpIDwgMCkgewotICAgICAgICAgICAgZGVibG9nID0gMDsKLSAg ICAgICAgICAgIHpjbG9zZShaREZJTEUpOwotCSAgICBnb3RvIHhkZWJ1ZzsKLSAgICAgICAgfQot ICAgIH0gZWxzZSB7Ci0JY2ttYWttc2coZGJwdHIsCi0JCSBEQlVGTCwKLQkJICJIRVhEVU1QOiAo IiwKLQkJIGNraXRvYShjbnQpLAotCQkgIiBieXRlcylcbiIsCi0JCSBOVUxMCi0JCSApOwotICAg ICAgICB6c291dChaREZJTEUsZGJwdHIpOwotICAgICAgICBpZiAoenNvdXQoWkRGSUxFLGRicHRy KSA8IDApIHsKLSAgICAgICAgICAgIGRlYmxvZyA9IDA7Ci0gICAgICAgICAgICB6Y2xvc2UoWkRG SUxFKTsKLQkgICAgZ290byB4ZGVidWc7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZm9yIChpID0g MDsgaSA8IGNudDsgaSsrKSB7Ci0gICAgICAgIGRicHRyWzBdID0gJ1wwJzsKLSAgICAgICAgZm9y IChqID0gMCA7IChqIDwgMTYpOyBqKyspIHsKLSAgICAgICAgICAgIGlmICgoaSArIGopIDwgY250 KQotCSAgICAgIHNwcmludGYodG1wLAotCQkgICAgICAiJXMlMDJ4ICIsCi0JCSAgICAgIChqID09 IDggPyAifCAiIDogIiIpLAotCQkgICAgICAoQ0hBUikgc3RbaSArIGpdCi0JCSAgICAgICk7Ci0g ICAgICAgICAgICBlbHNlCi0JICAgICAgc3ByaW50Zih0bXAsCi0JCSAgICAgICIlcyAgICIsCi0J CSAgICAgIChqID09IDggPyAifCAiIDogIiIpCi0JCSAgICAgICk7Ci0gICAgICAgICAgICBja3N0 cm5jYXQoZGJwdHIsdG1wLERCVUZMKzEpOwotICAgICAgICB9Ci0gICAgICAgIGNrc3RybmNhdChk YnB0ciwiICIsREJVRkwrMSk7Ci0gICAgICAgIGZvciAoayA9IDA7IChrIDwgMTYpICYmICgoaSAr IGspIDwgY250KTsgaysrKSB7Ci0gICAgICAgICAgICBzcHJpbnRmKHRtcCwKLSAgICAgICAgICAg ICAgICAgICAgIiVzJWMiLAotICAgICAgICAgICAgICAgICAgICAoayA9PSA4ID8gIiAiIDogIiIp LAotICAgICAgICAgICAgICAgICAgICBpc3ByaW50KHN0W2kgKyBrXSkgPyBzdFtpICsga10gOiAn LicKLSAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGNrc3RybmNhdChkYnB0cix0 bXAsREJVRkwrMSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2tzdHJuY2F0KGRicHRyLCJcbiIsREJV RkwrMSk7Ci0gICAgICAgIGkgKz0gaiAtIDE7Ci0gICAgICAgIGlmICh6c291dChaREZJTEUsZGJw dHIpIDwgMCkgewotICAgICAgICAgICAgZGVibG9nID0gMDsKLSAgICAgICAgICAgIHpjbG9zZSha REZJTEUpOwotCSAgICBnb3RvIHhkZWJ1ZzsKLSAgICAgICAgfQotICAgIH0gLyogZW5kIGZvciAq LwotCi0KLSAgeGRlYnVnOgotI2lmZGVmIE9TMgotICAgIGlmIChTeXNJbml0ZWQpCi0gICAgICBS ZWxlYXNlRGVidWdNdXRleCgpOwotI2Vsc2UgLyogT1MyICovCi0gICAgZGVibG9nID0gMTsKLSNl bmRpZiAvKiBPUzIgKi8KLSAgICByZXR1cm4oMCk7Ci19Ci0jZW5kaWYgLyogREVCVUcgKi8KLQot LyogIFNlc3Npb24gTG9nLi4uICovCi0KLWludCB0c3N0YXRlID0gMDsKLQotVk9JRAotI2lmZGVm IE9TMgotbG9nY2hhcih1bnNpZ25lZCBzaG9ydCBjKQotI2Vsc2UgLyogT1MyICovCi0jaWZkZWYg Q0tfQU5TSUMKLWxvZ2NoYXIoY2hhciBjKQotI2Vsc2UKLWxvZ2NoYXIoYykgY2hhciBjOwotI2Vu ZGlmIC8qIENLX0FOU0lDICovCi0jZW5kaWYgLyogT1MyICovCi0vKiBsb2djaGFyICovIHsgICAg ICAgICAgICAgICAgICAgICAgICAgLyogTG9nIGNoYXJhY3RlciBjIHRvIHNlc3Npb24gbG9nICov Ci0gICAgZXh0ZXJuIGludCBzbG9nbnVsOwotICAgIGludCBva3RvbG9nID0gMDsKLSNpZm5kZWYg Tk9MT0NBTAotICAgIGlmICghc2VzbG9nKQotICAgICAgcmV0dXJuOwotCi0gICAgaWYgKChzZXNz ZnQgIT0gWFlGVF9UKSB8fCAoCi0jaWZkZWYgVU5JWAotCSBjICE9ICdccicgJiYKLSNlbHNlCi0j aWZkZWYgZGF0YWdlbmVyYWwKLQkgYyAhPSAnXHInICYmCi0jZWxzZQotI2lmZGVmIFNUUkFUVVMK LQkgYyAhPSAnXHInICYmCi0jZWxzZQotI2lmZGVmIEFNSUdBCi0JIGMgIT0gJ1xyJyAmJgotI2Vs c2UKLSNpZmRlZiBHRU1ET1MKLQkgYyAhPSAnXHInICYmCi0jZW5kaWYgLyogR0VNRE9TICovCi0j ZW5kaWYgLyogQU1JR0EgKi8KLSNlbmRpZiAvKiBTVFJBVFVTICovCi0jZW5kaWYgLyogZGF0YWdl bmVyYWwgKi8KLSNlbmRpZiAvKiBVTklYICovCi0jaWZkZWYgT1NLCi0JIGMgIT0gJ1xuJyAmJgot I2Vsc2UKLSNpZmRlZiBNQUMKLQkgYyAhPSAnXG4nICYmCi0jZW5kaWYgLyogTUFDICovCi0jZW5k aWYgLyogT1NLICovCi0JIGMgIT0gWE9OICYmCi0JIGMgIT0gWE9GRikpCi0gICAgICBva3RvbG9n ID0gMTsKLSAgICBpZiAoYyA9PSAnXDAnICYmICFzZXNzZnQpCQkvKiBOVUwgaW4gdGV4dCBtb2Rl ICovCi0gICAgICBpZiAoc2xvZ251bCkgb2t0b2xvZyA9IDE7CQkvKiBvbmx5IGlmIHBhZGRpbmcg KDIwMDkvMTAvMjIpICovCi0gICAgaWYgKCFva3RvbG9nKQotICAgICAgcmV0dXJuOwotICAgIGlm IChzbG9ndHMpIHsJCQkvKiBMb2cgaXMgdGltZXN0YW1wZWQgKi8KLQlpZiAodHNzdGF0ZSA9PSAw KSB7CQkvKiBTdGF0ZSA9IGJldHdlZW4tbGluZXMgKi8KLQkgICAgY2hhciAqIHA7CQkJLyogenN0 aW1lKCkgcG9pbnRlciAqLwotCSAgICBjaGFyIHRzWzQ4XTsJCS8qIHRpbWVzdGFtcCBidWZmZXIg Ki8KLQkgICAgenRpbWUoJnApOwkJCS8qIEdldCBhc2N0aW1lKCkgc3RyaW5nICovCi0JICAgIGNr c3RybmNweSh0cyxwLDMyKTsJCS8qIE1ha2Ugc2FmZSBjb3B5ICovCi0JICAgIGlmICh6dG1zZWMg PiAtMUwpIHsJCS8qIEFkZCBtc2VjcyBpZiB3ZSBoYXZlIHRoZW0gKi8KLQkJc3ByaW50ZigmdHNb MTldLCIuJTAzbGQ6ICIsenRtc2VjKTsgLyogU0FGRSAqLwotCSAgICB9IGVsc2UgewotCQl0c1sx OV0gPSAnOic7Ci0JCXRzWzIwXSA9IFNQOwotCQl0c1syMV0gPSBOVUw7Ci0JICAgIH0KLQkgICAg aWYgKHpzb3V0KFpTRklMRSwmdHNbMTFdKSA8IDApCi0JICAgICAgZ290byB4bG9nY2hhcjsKLQl9 Ci0gICAgfQotICAgIGlmIChjID09ICdcbicpCQkJLyogQXQgZW5kIG9mIGxpbmU/ICovCi0gICAg ICB0c3N0YXRlID0gMDsJCQkvKiB5ZXMgKi8KLSAgICBlbHNlCi0gICAgICB0c3N0YXRlID0gMTsJ CQkvKiBubyAqLwotICAgIGlmICh6Y2hvdXQoWlNGSUxFLChDSEFSKShjICYgMHhGRikpIDwgMCkg LyogTG9nIHRoZSBjaGFyYWN0ZXIgKi8KLSAgICAgIGdvdG8geGxvZ2NoYXI7Ci0gICAgaWYgKHRz c3RhdGUgPT0gMCAmJiBzbG9nbnVsICE9IDApIHsJLyogTnVsbC10ZXJtaW5hdGluZyBsaW5lcz8g Ki8KLQlpZiAoemNob3V0KFpTRklMRSwoQ0hBUikwKSA8IDApCS8qIEFkZCBhIE5VTCAqLwotCSAg Z290byB4bG9nY2hhcjsKLSAgICB9Ci0gICAgcmV0dXJuOwotCi0gIHhsb2djaGFyOgotICAgIGNv bm9sbCgiIik7Ci0gICAgY29ub2xsKCJFUlJPUiBXUklUSU5HIFNFU1NJT04gTE9HLCBMT0cgQ0xP U0VEISIpOwotICAgIHNldHNlc2xvZygwKTsKLSAgICB6Y2xvc2UoWlNGSUxFKTsKLSNlbmRpZiAv KiBOT0xPQ0FMICovCi19Ci0KLVZPSUQKLWxvZ3N0cihzLCBsZW4pIGNoYXIgKiBzOyBpbnQgbGVu OyB7ICAgICAvKiBMb2cgc3RyaW5nIHRvIHNlc3Npb24gbG9nICovCi0jaWZuZGVmIE5PTE9DQUwK LSAgICBpbnQgbiA9IDA7Ci0gICAgaWYgKCFzKQotICAgICAgcmV0dXJuOwotICAgIHdoaWxlIChz ZXNsb2cgJiYgKG4gPCBsZW4pKQotICAgICAgbG9nY2hhcihzW24rK10pOwotI2VuZGlmIC8qIE5P TE9DQUwgKi8KLX0KLQotI2lmZGVmIENLX0NVUlNFUwotaW50Ci1ja19yZXBhaW50KCkgewotICAg IHJlcGFpbnQgPSAxOwotICAgIHJldHVybigwKTsKLX0KLQotI2lmZGVmIFNUUkFUVVMKLS8qIFZP UyBoYXMgY3Vyc2VzIGJ1dCBubyB0Z2V0ZW50KCkgKi8KLWludAotdGdldGVudChzMSwgczIpIGNo YXIgKiBzMSwgKiBzMjsgewotICAgIHJldHVybigxKTsKLX0KLSNlbmRpZiAvKiBTVFJBVFVTICov Ci0KLSNpZmRlZiBWTVMKLSNpZmRlZiBfX0RFQ0MKLV9QUk9UT1RZUChpbnQgdGdldGVudCwoY2hh ciAqLCBjaGFyICopKTsKLSNlbmRpZiAvKiBfX0RFQ0MgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQot LyoKLSAgVGhlcmUgYXJlIHRocmVlIGRpZmZlcmVudCB3YXlzIHRvIGRvIGZ1bGxzY3JlZW4gb24g Vk1TLgotICAxLiBVc2UgdGhlIHJlYWwgY3Vyc2VzIGxpYnJhcnksIFZBWENDVVJTRS4KLSAgMi4g VXNlIGRvLWl0LXlvdXJzZWxmIGNvZGUuCi0gIDMuIFVzZSB0aGUgU2NyZWVuIE1hbmFnZXIsIFNN RyQuCi0KLSAgTWV0aG9kIDEgZG9lc24ndCB3b3JrIHF1aXRlIHJpZ2h0OyB5b3UgY2FuJ3QgY2Fs bCBlbmR3aW4oKSwgc28gb25jZSB5b3UndmUKLSAgc3RhcnRlZCBjdXJzZXMgbW9kZSwgeW91IGNh biBuZXZlciBsZWF2ZS4KLQotICBNZXRob2QgMiBkb2Vzbid0IG9wdGltaXplIHRoZSBzY3JlZW4s IGFuZCBzbyBtdWNoIG1vcmUgdGltZSBpcyBzcGVudCBpbgotICBzY3JlZW4gd3JpdGVzLiAgVGhp cyBhY3R1YWxseSBjYXVzZXMgZmlsZSB0cmFuc2ZlcnMgdG8gZmFpbCBiZWNhdXNlIHRoZQotICB0 dHkgZGV2aWNlIGlucHV0IGJ1ZmZlciBjYW4gYmUgb3ZlcnJ1biB3aGlsZSB0aGUgc2NyZWVuIGlz IGJlaW5nIHVwZGF0ZWQsCi0gIGVzcGVjaWFsbHkgb24gYSBzbG93IE1pY3JvVkFYIHRoYXQgaGFz IHNtYWxsIHR5cGVhaGVhZCBidWZmZXJzLgotCi0gIEluIHRoZSBmb2xsb3dpbmcgI2lmZGVmIGJs b2NrLCAjZGVmaW5lIG9uZSBvZiB0aGVtIGFuZCAjdW5kZWYgdGhlIG90aGVyIDIuCi0KLSAgU28g bm93IGxldCdzIHRyeSBtZXRob2QgMy4uLgotKi8KLSNpZmRlZiBWTVMKLSNkZWZpbmUgQ0tfU01H ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTY3JlZW4gTWFuYWdlciAqLwotI3VuZGVmIE1Z Q1VSU0VTICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvLWl0LXlvdXJzZWxmICovCi0jdW5k ZWYgVk1TQ1VSU0UgICAgICAgICAgICAgICAgICAgICAgICAgLyogVkFYQ0NVUlNFIGxpYnJhcnkg Ki8KLSNlbmRpZiAvKiBWTVMgKi8KLS8qCi0gIEJ1dCBqdXN0IGJlZm9yZSBOZXcgWWVhcnMsIDIw MDAsIHRoZSBTTUcgbGlicmFyeSBzZWVtZWQgdG8gYnJlYWsgb24KLSAgYm90aCBWTVMgc3lzdGVt cyB3ZSBoYXZlIGhlcmUgKGFuIEFscGhhIHdpdGggVk1TIDcuMSBhbmQgYSBWQVggd2l0aCA1LjUp LgotICBTbyBiYWNrIHRvIE1ZQ1VSU0VTLCB3aGljaCB3b3JrcyBmaW5lLgotKi8KLSNpZmRlZiBW TVMKLSN1bmRlZiBDS19TTUcKLSNkZWZpbmUgTVlDVVJTRVMKLSNlbmRpZiAvKiBWTVMgKi8KLQot I2lmZGVmIE1ZQ1VSU0VTCi0jZGVmaW5lIHN0ZHNjciAwCi0jaWZkZWYgQ0tfV1JFRlJFU0gKLSN1 bmRlZiBDS19XUkVGUkVTSAotI2VuZGlmIC8qIENLX1dSRUZSRVNIICovCi0jZW5kaWYgLyogTVlD VVJTRVMgKi8KLQotLyogIFMgQyBSIEUgRSBOIEMgIC0tICBTY3JlZW4gZGlzcGxheSBmdW5jdGlv biwgdXNlcyBjdXJzZXMgICovCi0KLS8qIElkZWEgZm9yIGN1cnNlcyBkaXNwbGF5IGNvbnRyaWJ1 dGVkIGJ5IENocmlzIFByYXR0IG9mIEFQViBCYWtlciwgVUsgKi8KLQotLyogQXZvaWQgY29uZmlj dHMgd2l0aCBjdXJzZXMuaCAqLwotCi0jaWZkZWYgUU5YCi0vKiBTYW1lIGFzIGNrY2FzYy5oLCBi dXQgaW4gYSBkaWZmZXJlbnQgcmFkaXguLi4gKi8KLSNpZmRlZiBFU0MKLSN1bmRlZiBFU0MKLSNl bmRpZiAvKiBFU0MgKi8KLSNlbmRpZiAvKiBRTlggKi8KLQotI2lmbmRlZiBNWUNVUlNFUwotI3Vu ZGVmIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgd2FzIGRlZmluZWQg aW4gY2tjZGViLmggKi8KLSNlbmRpZiAvKiBNWUNVUlNFUyAqLwotCi0jdW5kZWYgQlMgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlc2Ugd2VyZSBkZWZpbmVkIGluIGNrY2FzYy5o ICovCi0jdW5kZWYgQ1IKLSN1bmRlZiBOTAotI3VuZGVmIFNPCi0jaWZkZWYgVVMKLSN1bmRlZiBV UwotI2VuZGlmCS8qIFVTICovCi0jdW5kZWYgU1AgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogVXNlZCBpbiBuY3Vyc2VzICovCi0jZGVmaW5lIENIUl9TUCAzMiAgICAgICAgICAgICAg ICAgICAgICAgLyogVXNlIHRoaXMgaW5zdGVhZCAqLwotCi0jaWZkZWYgVk1TICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogVk1TIGZ1bGxzY3JlZW4gZGlzcGxheSAqLwotI2lmZGVmIE1Z Q1VSU0VTICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvLWl0LXlvdXJzZWxmIG1ldGhvZCAq LwotZXh0ZXJuIGludCBpc3Z0NTI7ICAgICAgICAgICAgICAgICAgICAgIC8qIEZyb20gQ0tWVElP LkMgKi8KLSNkZWZpbmUgcHJpbnR3IHByaW50ZgotI2Vsc2UKLSNpZmRlZiBWTVNDVVJTRSAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBWTVMgY3Vyc2VzIGxpYnJhcnkgVkFYQ0NVUlNFICovCi0j aW5jbHVkZSA8Y3Vyc2VzLmg+Ci0vKiBOb3RlOiBTY3JlZW4gbWFuYWdlciBkb2Vzbid0IG5lZWQg YSBoZWFkZXIgZmlsZSAqLwotI2VuZGlmIC8qIFZNU0NVUlNFICovCi0jZW5kaWYgLyogTVlDVVJT RVMgKi8KLSNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgVk1T ICovCi0jaWZkZWYgTVlDVVJTRVMgICAgICAgICAgICAgICAgICAgICAgICAgLyogRG8taXQteW91 cnNlbGYgbWV0aG9kICovCi0jZGVmaW5lIGlzdnQ1MiAwICAgICAgICAgICAgICAgICAgICAgICAg LyogVXNlZCBieSBPUy8yLCBWVC0xMDAvQU5TSSBhbHdheXMgKi8KLSNpZmRlZiBDS1hQUklOVEYK LSNkZWZpbmUgcHJpbnR3IGNreHByaW50ZgotI2Vsc2UgLyogQ0tYUFJJTlRGICovCi0jaWZkZWYg S1VJCi0jZGVmaW5lIHByaW50dyBWc2NybnByaW50dwotI2Vsc2UgLyogS1VJICovCi0jZGVmaW5l IHByaW50dyBwcmludGYKLSNlbmRpZiAvKiBLVUkgKi8KLSNlbmRpZiAvKiBDS1hQUklOVEYgKi8K LSNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVc2UgcmVhbCBjdXJz ZXMgKi8KLSNpZmRlZiBDS19OQ1VSU0VTICAgICAgICAgICAgICAgICAgICAgICAvKiBvciBuY3Vy c2VzLi4uICovCi0jaWZkZWYgQ0tYUFJJTlRGICAgICAgICAgICAgICAgICAgICAgICAgLyogT3Vy IHByaW50ZiBtYWNybyBjb25mbGljdHMgd2l0aCAqLwotI3VuZGVmIHByaW50ZiAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHVzZSBvZiAicHJpbnRmIiBpbiBuY3Vyc2VzLmggKi8KLSNlbmRp ZiAvKiBDS1hQUklOVEYgKi8KLSNpbmNsdWRlIDxuY3Vyc2VzLmg+Ci0jaWZkZWYgQ0tYUFJJTlRG Ci0jZGVmaW5lIHByaW50ZiBja3hwcmludGYKLSNlbmRpZiAvKiBDS1hQUklOVEYgKi8KLSNlbHNl ICAvKiBOb3QgbmN1cnNlcyAqLwotI2lmZGVmIENLWFBSSU5URiAgICAgICAgICAgICAgICAgICAg ICAgIC8qIE91ciBwcmludGYgbWFjcm8gY29uZmxpY3RzIHdpdGggKi8KLSN1bmRlZiBwcmludGYg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1c2Ugb2YgInByaW50ZiIgaW4gY3Vyc2VzLmgg Ki8KLSNlbmRpZiAvKiBDS1hQUklOVEYgKi8KLSNpZmRlZiBNX1hFTklYCQkJCS8qIFNDTyBYRU5J WC4uLiAqLwotI2lmZGVmIE1fVEVSTUNBUAotI3VuZGVmIE1fVEVSTUNBUAotI2VuZGlmIC8qIE1f VEVSTUNBUCAqLwotI2lmbmRlZiBNX1RFUk1JTkZPCi0jZGVmaW5lIE1fVEVSTUlORk8KLSNlbmRp ZiAvKiBNX1RFUk1JTkZPICovCi0jZW5kaWYgLyogTV9YRU5JWCAqLwotI2lmZGVmIFJUQUlYCi0j dW5kZWYgTkxTCQkJCS8qIEF2b2lkICdyZWRlY2xhcmF0aW9uIG9mIGZyZWUnLiAqLwotI2VuZGlm IC8qIFJUQUlYICovCi0jaW5jbHVkZSA8Y3Vyc2VzLmg+Ci0jaWZkZWYgQ0tYUFJJTlRGCi0jZGVm aW5lIHByaW50ZiBja3hwcmludGYKLSNlbmRpZiAvKiBDS1hQUklOVEYgKi8KLSNlbmRpZiAvKiBD S19OQ1VSU0VTICovCi0jZW5kaWYgLyogTVlDVVJTRVMgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQot I2lmZGVmIEJVRzk5OQotX1BST1RPVFlQKGludCB0Z2V0ZW50LChjaGFyICosIGNoYXIgKikpOwot X1BST1RPVFlQKGNoYXIgKnRnZXRzdHIsKGNoYXIgKiwgY2hhciAqKikpOwotX1BST1RPVFlQKGlu dCB0cHV0cywoY2hhciAqLCBpbnQsIGludCAoKikoKSkpOwotX1BST1RPVFlQKGNoYXIgKnRnb3Rv LChjb25zdCBjaGFyICosIGludCwgaW50KSk7Ci0jZW5kaWYJLyogQlVHOTk5ICovCi0jaWZkZWYg bGludXgKLSNpbmNsdWRlIDx0ZXJtLmg+Ci0jZW5kaWYKLQotI2VuZGlmIC8qIENLX0NVUlNFUyAq LwotCi0vKiAgRiBYIEQgSSBOIEkgVCAgLS0gIEZpbGUgWGZlciBEaXNwbGF5IEluaXRpYWxpemF0 aW9uICAqLwotCi0jaWZkZWYgQ0tfQ1VSU0VTCi0jaWZuZGVmIE1ZQ1VSU0VTCi0jaWZuZGVmIENL X1NNRwotc3RhdGljCi0jaWZkZWYgQ0tfQU5TSUMKLS8qIENhbid0IHVzZSBWT0lEIGJlY2F1c2Ug b2YgY3Vyc2VzLmggKi8KLXZvaWQKLWNrX3Rlcm1zZXQoaW50KTsKLSNlbHNlCi1ja190ZXJtc2V0 KCk7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSNlbmRpZiAvKiBDS19TTUcgKi8KLSNlbmRpZiAv KiBNWUNVUlNFUyAqLwotI2VuZGlmIC8qIENLX0NVUlNFUyAqLwotCi0jaWZkZWYgTk9URVJNQ0FQ Ci1zdGF0aWMgaW50IG5vdGVybWNhcCA9IDE7Ci0jZWxzZQotc3RhdGljIGludCBub3Rlcm1jYXAg PSAwOwotI2VuZGlmIC8qIE5PVEVSTUNBUCAqLwotCi0jaWZuZGVmIE5PRElTUExBWQotQ0tWT0lE Ci1meGRpbml0KHhkaXNwbGEpIGludCB4ZGlzcGxhOyB7Ci0jaWZuZGVmIENPSEVSRU5UCi0jaWZu ZGVmIE9TMgotI2lmbmRlZiBTVFJBVFVTCi0gICAgY2hhciAqczsKLSAgICBpbnQgeCwgZHVtbXk7 Ci0KLSAgICBkZWJ1ZyhGMTAxLCJmeGRpbml0IHhkaXNwbGEiLCIiLHhkaXNwbGEpOwotICAgIGRl YnVnKEYxMDEsImZ4ZGluaXQgZnhkX2luaXRlZCIsIiIsZnhkX2luaXRlZCk7Ci0KLSNpZmRlZiBJ S1NECi0jaWZuZGVmIE5PWEZFUgotICAgIC8qIE5vIGN1cnNlcyBmb3IgSUtTRCAqLwotICAgIGlm IChpbnNlcnZlcikgewotICAgICAgICBmZGlzcGxhID0gWFlGRF9OOwotICAgICAgICByZXR1cm47 Ci0gICAgfQotICAgIGlmIChmeGRfaW5pdGVkKSAgICAgICAgICAgICAgICAgICAgIC8qIE9ubHkg ZG8gdGhpcyBvbmNlICovCi0gICAgICByZXR1cm47Ci0jZW5kaWYgLyogTk9YRkVSICovCi0jZW5k aWYgLyogSUtTRCAqLwotCi0gICAgaWYgKHhkaXNwbGEgPT0gWFlGRF9SIHx8IHhkaXNwbGEgPT0g WFlGRF9TIHx8IHhkaXNwbGEgPT0gWFlGRF9CKSB7Ci0JaWYgKHhmcm1zZykgewotCSAgICBwcmlu dGYoIiVzXG4iLHhmcm1zZyk7Ci0JICAgIG1ha2VzdHIoJnhmcm1zZyxOVUxMKTsKLQl9Ci0gICAg fQotCi0jaWZkZWYgQ0tfQ1VSU0VTCi0jaWZkZWYgVk1TCi0gICAgLyogRm9yY2UgQlJJRUYgaW4g QmF0Y2ggbG9ncyAqLwotICAgIGlmIChiYXRjaCAmJiAoeGRpc3BsYSA9PSBYWUZEX0MgfHwgeGRp c3BsYSA9PSBYWUZEX1MpKQotICAgICAgeGRpc3BsYSA9IFhZRkRfQjsKLSNlbHNlCi0gICAgaWYg KHhkaXNwbGEgPT0gWFlGRF9DIHx8IHhkaXNwbGEgPT0gOTk5OSkgewotCi0jaWZkZWYgRFlOQU1J QwotICAgICAgICBpZiAoIXRybWJ1ZikgewotLyoKLSAgQWxsb2NhdGUgdGdldGVudCgpIGJ1ZmZl ci4gIE1ha2UgaXQgYmlnIC0tIHNvbWUgdGVybWNhcHMgY2FuIGJlIGh1Z2U7Ci0gIHRnZXRlbnQo KSBtZXJyaWx5IHdyaXRlcyBwYXN0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciwgY2F1c2luZyBjb3Jl IGR1bXBzCi0gIG9yIHdvcnNlLgotKi8KLSAgICAgICAgICAgIHRybWJ1ZiA9IChjaGFyICopbWFs bG9jKFRSTUJVRkwpOwotICAgICAgICAgICAgaWYgKCF0cm1idWYpIHsKLSAgICAgICAgICAgICAg ICBub3Rlcm1jYXAgPSAxOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImZ4ZGluaXQgbWFs bG9jIHRybWJ1ZiIsIkZBSUxFRCIsVFJNQlVGTCk7Ci0gICAgICAgICAgICAgICAgZmRpc3BsYSA9 IFhZRkRfUzsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0jaWZkZWYg Q09NTUVOVAotICAgICAgICAgICAgZGVidWcoRjExMSwiZnhkaW5pdCBtYWxsb2MgdHJtYnVmIiwi T0siLFRSTUJVRkwpOwotICAgICAgICAgICAgZGVidWcoRjAwMSwiZnhkaW5pdCB0cm1idWYiLCIi LHRybWJ1Zik7Ci0gICAgICAgICAgICBtZW1zZXQodHJtYnVmLCdcMCcsKHNpemVfdClUUk1CVUZM KTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsImZ4ZGluaXQgbWVtc2V0IE9LIiwiIiwwKTsKLSNl bmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIH0KLSNlbmRpZiAvKiBEWU5BTUlDICovCi0KLSAg ICAgICAgZGVidWcoRjEwMCwiZnhkaW5pdCBiZWZvcmUgZ2V0ZW52KFRFUk0pIiwiIiwwKTsKLSAg ICAgICAgcyA9IGdldGVudigiVEVSTSIpOwotICAgICAgICBkZWJ1ZyhGMTEwLCJmeGRpbml0IGFm dGVyIGdldGVudihURVJNKSIscywwKTsKLSAgICAgICAgaWYgKCFzKSBzID0gIiI7Ci0gICAgICAg IGlmICgqcykgewotICAgICAgICAgICAgZGVidWcoRjExMCwiZnhkaW5pdCBiZWZvcmUgdGdldGVu dCgpIixzLDApOwotICAgICAgICAgICAgeCA9IHRnZXRlbnQodHJtYnVmLHMpOwotICAgICAgICAg ICAgZGVidWcoRjExMSwiZnhkaW5pdCB0Z2V0ZW50IixzLHgpOwotICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgeCA9IDA7Ci0gICAgICAgICAgICBub3Rlcm1jYXAgPSAxOwotICAgICAgICAg ICAgZGVidWcoRjExMCwiZnhkaW5pdCBURVJNIG51bGwgLSBubyB0Z2V0ZW50IixzLDApOwotICAg ICAgICB9Ci0gICAgICAgIGlmICh4IDwgMSAmJiAhcXVpZXQgJiYgIWJhY2tncmQKLSNpZmRlZiBW TVMKLSAgICAgICAgICAgICYmICFiYXRjaAotI2VuZGlmIC8qIFZNUyAqLwotICAgICAgICAgICAg KSB7Ci0gICAgICAgICAgICBwcmludGYoIldhcm5pbmc6IHRlcm1pbmFsIHR5cGUgdW5rbm93bjog XCIlc1wiXG4iLHMpOwotI2lmZGVmIENPTU1FTlQKLQkgICAgLyogQ29uZnVzaW5nIC0gbm9ib2R5 IGtub3dzIHdoYXQgdGhpcyBtZWFucyAqLwotICAgICAgICAgICAgcHJpbnRmKCJTQ1JFRU4gY29t bWFuZCB3aWxsIHVzZSBBTlNJIHNlcXVlbmNlcy5cbiIpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8K LSAgICAgICAgICAgIGlmIChsb2NhbCkKLSAgICAgICAgICAgICAgcHJpbnRmKCJGdWxsc2NyZWVu IGZpbGUgdHJhbnNmZXIgZGlzcGxheSBkaXNhYmxlZC5cbiIpOwotICAgICAgICAgICAgZmRpc3Bs YSA9IFhZRkRfUzsKLSAgICAgICAgfQotI2lmbmRlZiBNWUNVUlNFUwotI2lmbmRlZiBDS19TTUcK LSAgICAgICAgY2tfdGVybXNldCh4KTsKLSNlbmRpZiAvKiBDS19TTUcgKi8KLSNlbmRpZiAvKiBN WUNVUlNFUyAqLwotICAgICAgICBmeGRfaW5pdGVkID0gMTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tf Q1VSU0VTICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotI2VuZGlm IC8qIE9TMiAqLwotI2VuZGlmIC8qIENPSEVSRU5UICovCi19Ci0jZW5kaWYgLyogTk9ESVNQTEFZ ICovCi0KLSNpZmRlZiBDS19DVVJTRVMKLSNpZmRlZiBDS19TTUcKLS8qCi0gIExvbmcgc2VjdGlv biBmb3IgU2NyZWVuIE1hbmFnZXIgc3RhcnRzIGhlcmUuLi4KLSAgQnkgV2lsbGlhbSBCYWRlci4K LSovCi0jaW5jbHVkZSAiY2t2dm1zLmgiCi0jaWZkZWYgT0xEX1ZNUwotI2luY2x1ZGUgPHNtZ2Rl Zi5oPiAgICAgICAgICAgICAgICAgICAgIC8qIHVzZSB0aGlzIG9uIFZBWCBDIDIuNCAqLwotLyog I2luY2x1ZGUgPHNtZ21zZy5oPiAqLwotI2Vsc2UKLSNpbmNsdWRlIDxzbWckcm91dGluZXMuaD4g ICAgICAgICAgICAgICAvKiBNYXJ0aW4gWmluc2VyICovCi0jZW5kaWYgLyogT0xEX1ZNUyAqLwot Ci1leHRlcm4gdW5zaWduZWQgaW50IHZtc19zdGF0dXM7ICAgICAvKiBVc2VkIGZvciBzeXN0ZW0g c2VydmljZSByZXR1cm4gc3RhdHVzICovCi0KLXN0YXRpYyBsb25nIHNtZ19wYXN0ZWJvYXJkX2lk ID0gLTE7ICAgICAvKiBwYXN0ZWJvYXJkIGlkZW50aWZpZXIgKi8KLXN0YXRpYyBsb25nIHNtZ19k aXNwbGF5X2lkID0gLTE7ICAgICAgICAvKiBkaXNwbGF5IGlkZW50aWZpZXIgKi8KLXN0YXRpYyBp bnQgc21nX29wZW4gPSAwOyAgICAgICAgICAgICAgICAvKiBmbGFnIGlmIHNtZyBjdXJyZW50IG9w ZW4gKi8KLXN0YXRpYyBpbnQgc21nX2luaXRlZCA9IDA7ICAgICAgICAgICAgICAvKiBmbGFnIGlm IHNtZyBpbml0aWFsaXplZCAqLwotCi0jaWZkZWYgQ09NTUVOVAotI2RlZmluZSBjbHJ0b2VvbCgp ICAgICAgU01HJEVSQVNFX0xJTkUoJnNtZ19kaXNwbGF5X2lkLCAwLCAwKQotCi0jZGVmaW5lIGNs ZWFyKCkgICAgICAgICBTTUckRVJBU0VfRElTUExBWSgmc21nX2Rpc3BsYXlfaWQsIDAsIDAsIDAs IDApCi0KLSNkZWZpbmUgdG91Y2h3aW4oc2NyKSAgIFNNRyRSRVBBSU5UX1NDUkVFTigmc21nX3Bh c3RlYm9hcmRfaWQpCi0KLSNlbHNlICAvKiBOb3QgQ09NTUVOVCAqLwotCi0jZGVmaW5lIGNscnRv ZW9sKCkgICAgICBzbWckZXJhc2VfbGluZSgmc21nX2Rpc3BsYXlfaWQsIDAsIDApCi0KLSNkZWZp bmUgY2xlYXIoKSAgICAgICAgIHNtZyRlcmFzZV9kaXNwbGF5KCZzbWdfZGlzcGxheV9pZCwgMCwg MCwgMCwgMCkKLQotI2RlZmluZSB0b3VjaHdpbihzY3IpICAgc21nJHJlcGFpbnRfc2NyZWVuKCZz bWdfcGFzdGVib2FyZF9pZCkKLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSNkZWZpbmUgY2xlYXJv ayhjdXJzY3Isb2spICAgICAgICAgICAgICAvKiBMZXQgd3JlZnJlc2goKSBkbyB0aGUgd29yayAq LwotCi0jZGVmaW5lIHdyZWZyZXNoKGN1cnNyYykgdG91Y2h3aW4oc2NyKQotCi1zdGF0aWMgdm9p ZAotbW92ZShyb3csIGNvbCkgaW50IHJvdywgY29sOyB7Ci0gICAgLyogQ2hhbmdlIGZyb20gMC1i YXNlZCBmb3IgY3Vyc2VzIHRvIDEtYmFzZWQgZm9yIFNNRyAqLwotICAgIGlmICghc21nX29wZW4p Ci0gICAgICByZXR1cm47Ci0gICAgKytyb3c7ICsrY29sOwotICAgIGRlYnVnKEYxMTEsIlZNUyBz bWcgbW92ZSIsY2tpdG9hKHJvdyksY29sKTsKLSNpZmRlZiBDT01NRU5UICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBNYXJ0aW4gWmluc2VyICovCi0gICAgQ0hFQ0tfRVJSKCJtb3ZlOiBzbWck c2V0X2N1cnNvcl9hYnMiLAotICAgICAgICAgICAgICBTTUckU0VUX0NVUlNPUl9BQlMoJnNtZ19k aXNwbGF5X2lkLCAmcm93LCAmY29sKSk7Ci0jZWxzZQotICAgIENIRUNLX0VSUigibW92ZTogc21n JHNldF9jdXJzb3JfYWJzIiwKLSAgICAgICAgICAgICAgc21nJHNldF9jdXJzb3JfYWJzKCZzbWdf ZGlzcGxheV9pZCwgJnJvdywgJmNvbCkpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICBkZWJ1 ZyhGMTAxLCJWTVMgc21nIG1vdmUgdm1zX3N0YXR1cyIsIiIsdm1zX3N0YXR1cyk7Ci19Ci0KLSNp ZmRlZiBWTVNfVjQwCi0jZGVmaW5lIE9MRF9WTVMKLSNlbmRpZiAvKiBWTVNfVjQwICovCi0jaWZk ZWYgVk1TX1Y0MgotI2RlZmluZSBPTERfVk1TCi0jZW5kaWYgLyogVk1TX1Y0MiAqLwotI2lmZGVm IFZNU19WNDQKLSNkZWZpbmUgT0xEX1ZNUwotI2VuZGlmIC8qIFZNU19WNDQgKi8KLQotc3RhdGlj IGludAotaW5pdHNjcigpIHsKLSAgICBpbnQgcm93cyA9IDI0LCBjb2xzID0gODA7Ci0gICAgaW50 IHJvdyA9IDEsIGNvbCA9IDE7Ci0KLSAgICBkZWJ1ZyhGMTAxLCJWTVMgaW5pdHNjciBzbWdfcGFz dGVib2FyZF9pZCBBIiwiIixzbWdfcGFzdGVib2FyZF9pZCk7Ci0KLSAgICBpZiAoc21nX3Bhc3Rl Ym9hcmRfaWQgPT0gLTEpIHsgLyogT3BlbiB0aGUgc2NyZWVuICovCi0jaWZkZWYgT0xEX1ZNUyAg ICAgICAgICAgICAgICAgICAgIC8qIE5vdGU6IFJvdXRpbmUgY2FsbHMgbG93ZXJjYXNlZCA5Lzk2 ICovCi0gICAgICAgIENIRUNLX0VSUigiaW5pdHNjcjogc21nJGNyZWF0ZV9wYXN0ZWJvYXJkIiwK LSAgICAgICAgICAgICAgICAgIHNtZyRjcmVhdGVfcGFzdGVib2FyZCgmc21nX3Bhc3RlYm9hcmRf aWQsIDAsIDAsIDAsIDApKTsKLSNlbHNlCi0gICAgICAgIC8qIEZvciBWTVMgVjUsIG5vdCB0ZXN0 ZWQgKi8KLSAgICAgICAgQ0hFQ0tfRVJSKCJpbml0c2NyOiBzbWckY3JlYXRlX3Bhc3RlYm9hcmQi LAotICAgICAgICAgICAgICAgICAgc21nJGNyZWF0ZV9wYXN0ZWJvYXJkKCZzbWdfcGFzdGVib2Fy ZF9pZCwgMCwgMCwgMCwgMCwgMCkpOwotI2VuZGlmIC8qIE9MRF9WTVMgKi8KLSAgICB9Ci0gICAg ZGVidWcoRjEwMSwiVk1TIGluaXRzY3Igc21nX3Bhc3RlYm9hcmRfaWQgQiIsIiIsc21nX3Bhc3Rl Ym9hcmRfaWQpOwotICAgIGlmIChzbWdfcGFzdGVib2FyZF9pZCA9PSAtMSkgewotCXByaW50Zigi P0Vycm9yIGluaXRpYWxpemluZyBmdWxsc2NyZWVuIGRpc3BsYXlcbiIpOwotCWZkaXNwbGEgPSBY WUZEX1M7Ci0JZHB5aW5pdCgpOwotCXJldHVybigwKTsKLSAgICB9Ci0gICAgZGVidWcoRjEwMSwi Vk1TIGluaXRzY3Igc21nX2Rpc3BsYXlfaWQiLCIiLHNtZ19kaXNwbGF5X2lkKTsKLSAgICBpZiAo c21nX2Rpc3BsYXlfaWQgPT0gLTEpIHsgICAgICAgICAvKiBDcmVhdGUgYSBkaXNwbGF5IHdpbmRv dyAqLwotCi0jaWZkZWYgQ09NTUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFydGlu IFppbnNlciAqLwotICAgICAgICBDSEVDS19FUlIoImluaXRzY3I6IHNtZyRjcmVhdGVfdmlydHVh bF9kaXNwbGF5IiwKLSAgICAgICAgICAgICAgICAgIFNNRyRDUkVBVEVfVklSVFVBTF9ESVNQTEFZ KCZyb3dzLCAmY29scywgJnNtZ19kaXNwbGF5X2lkLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCkpOwotCi0gICAgICAgIC8qIENvbm5lY3QgdGhl IGRpc3BsYXkgd2luZG93IHRvIHRoZSBzY3JlZW4gKi8KLSAgICAgICAgQ0hFQ0tfRVJSKCJpbml0 c2NyOiBzbWckcGFzdGVfdmlydHVhbF9kaXNwbGF5IiwKLSAgICAgICAgICAgICAgICAgIFNNRyRQ QVNURV9WSVJUVUFMX0RJU1BMQVkoJnNtZ19kaXNwbGF5X2lkLCZzbWdfcGFzdGVib2FyZF9pZCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJvdywmY29sKSk7 Ci0jZWxzZQotICAgICAgICBDSEVDS19FUlIoImluaXRzY3I6IHNtZyRjcmVhdGVfdmlydHVhbF9k aXNwbGF5IiwKLSAgICAgICAgICAgICAgICAgIHNtZyRjcmVhdGVfdmlydHVhbF9kaXNwbGF5KCZy b3dzLCAmY29scywgJnNtZ19kaXNwbGF5X2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMCwgMCwgMCkpOwotCi0gICAgICAgIC8qIENvbm5lY3QgdGhlIGRp c3BsYXkgd2luZG93IHRvIHRoZSBzY3JlZW4gKi8KLSAgICAgICAgQ0hFQ0tfRVJSKCJpbml0c2Ny OiBzbWckcGFzdGVfdmlydHVhbF9kaXNwbGF5IiwKLSAgICAgICAgICAgICAgICAgIHNtZyRwYXN0 ZV92aXJ0dWFsX2Rpc3BsYXkoJnNtZ19kaXNwbGF5X2lkLCZzbWdfcGFzdGVib2FyZF9pZCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJvdywmY29sKSk7Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJWTVMgaW5pdHNjciBz bWdfb3BlbiBBIiwiIixzbWdfb3Blbik7Ci0gICAgaWYgKCFzbWdfb3BlbikgeyAgICAgICAgICAg ICAgICAgICAgLyogU3RhcnQgYSBiYXRjaCB1cGRhdGUgKi8KLSAgICAgICAgc21nX29wZW4gPSAx OwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgQ0hFQ0tfRVJSKCJpbml0c2NyOiBzbWckYmVnaW5f cGFzdGVib2FyZF91cGRhdGUiLAotICAgICAgICAgICAgICAgICAgU01HJEJFR0lOX1BBU1RFQk9B UkRfVVBEQVRFKCZzbWdfcGFzdGVib2FyZF9pZCkpOwotI2Vsc2UKLSAgICAgICAgQ0hFQ0tfRVJS KCJpbml0c2NyOiBzbWckYmVnaW5fcGFzdGVib2FyZF91cGRhdGUiLAotICAgICAgICAgICAgICAg ICAgc21nJGJlZ2luX3Bhc3RlYm9hcmRfdXBkYXRlKCZzbWdfcGFzdGVib2FyZF9pZCkpOwotI2Vu ZGlmIC8qIENPTU1FTlQgKi8KLQlkZWJ1ZyhGMTAxLCJWTVMgaW5pdHNjciBzbWckYmVnaW5fcGFz dGVib2FyZF91cGRhdGUiLCIiLHZtc19zdGF0dXMpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJW TVMgaW5pdHNjciBzbWdfb3BlbiBCIiwiIixzbWdfb3Blbik7Ci0gICAgc21nX2luaXRlZCA9IDE7 Ci0gICAgcmV0dXJuKDEpOwotfQotCi1zdGF0aWMgdm9pZAotcmVmcmVzaCgpIHsKLSAgICBkZWJ1 ZyhGMTAxLCJyZWZyZXNoIHNtZ19wYXN0ZWJvYXJkX2lkIiwiIixzbWdfcGFzdGVib2FyZF9pZCk7 Ci0KLSAgICBpZiAoc21nX29wZW4gPT0gMCB8fCBzbWdfcGFzdGVib2FyZF9pZCA9PSAtMSkKLSAg ICAgIHJldHVybjsKLQotI2lmZGVmIENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IE1hcnRpbiBaaW5zZXIgKi8KLSAgICBDSEVDS19FUlIoInJlZnJlc2g6IHNtZyRlbmRfcGFzdGVi b2FyZF91cGRhdGUiLAotICAgICAgICAgICAgICBTTUckRU5EX1BBU1RFQk9BUkRfVVBEQVRFKCZz bWdfcGFzdGVib2FyZF9pZCkpOwotICAgIENIRUNLX0VSUigicmVmcmVzaDogc21nJGJlZ2luX3Bh c3RlYm9hcmRfdXBkYXRlIiwKLSAgICAgICAgICAgICAgU01HJEJFR0lOX1BBU1RFQk9BUkRfVVBE QVRFKCZzbWdfcGFzdGVib2FyZF9pZCkpOwotI2Vsc2UKLSAgICBDSEVDS19FUlIoInJlZnJlc2g6 IHNtZyRlbmRfcGFzdGVib2FyZF91cGRhdGUiLAotICAgICAgICAgICAgICBzbWckZW5kX3Bhc3Rl Ym9hcmRfdXBkYXRlKCZzbWdfcGFzdGVib2FyZF9pZCkpOwotICAgIENIRUNLX0VSUigicmVmcmVz aDogc21nJGJlZ2luX3Bhc3RlYm9hcmRfdXBkYXRlIiwKLSAgICAgICAgICAgICAgc21nJGJlZ2lu X3Bhc3RlYm9hcmRfdXBkYXRlKCZzbWdfcGFzdGVib2FyZF9pZCkpOwotI2VuZGlmIC8qIENPTU1F TlQgKi8KLX0KLQotc3RhdGljIHZvaWQKLWVuZHdpbigpIHsKLSAgICBpZiAoIXNtZ19vcGVuKQot ICAgICAgcmV0dXJuOwotCi0gICAgc21nX29wZW4gPSAwOwotCi0jaWZkZWYgQ09NTUVOVAotICAg IENIRUNLX0VSUigiZW5kd2luOiBzbWckZW5kX3Bhc3RlYm9hcmRfdXBkYXRlIiwKLSAgICAgICAg ICAgICAgU01HJEVORF9QQVNURUJPQVJEX1VQREFURSgmc21nX3Bhc3RlYm9hcmRfaWQpKTsKLSNl bHNlCi0gICAgQ0hFQ0tfRVJSKCJlbmR3aW46IHNtZyRlbmRfcGFzdGVib2FyZF91cGRhdGUiLAot ICAgICAgICAgICAgICBzbWckZW5kX3Bhc3RlYm9hcmRfdXBkYXRlKCZzbWdfcGFzdGVib2FyZF9p ZCkpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgIG1vdmUoMjIsIDApOwotCi0jaWZkZWYg Q09NTUVOVAotLyoKLSAgVGhlc2UgY2FsbHMgY2xlYXIgdGhlIHNjcmVlbi4KLSAgKGNvbnZlcnQg cm91dGluZSBjYWxscyB0byBsb3dlcmNhc2UgLSBNYXJ0aW4gWmluc2VyKQotKi8KLSAgICBDSEVD S19FUlIoImVuZHdpbjogc21nJGRlbGV0ZV92aXJ0dWFsX2Rpc3BsYXkiLAotICAgICAgICAgICAg ICBTTUckREVMRVRFX1ZJUlRVQUxfRElTUExBWSgmc21nX2Rpc3BsYXlfaWQpKTsKLSAgICBzbWdf ZGlzcGxheV9pZCA9IC0xOwotCi0gICAgQ0hFQ0tfRVJSKCJlbmR3aW46IHNtZyRkZWxldGVfcGFz dGVib2FyZCIsCi0gICAgICAgICAgICAgIFNNRyRERUxFVEVfUEFTVEVCT0FSRCgmc21nX3Bhc3Rl Ym9hcmRfaWQsIDApKTsKLSAgICBzbWdfcGFzdGVib2FyZF9pZCA9IC0xOwotI2VuZGlmIC8qIENP TU1FTlQgKi8KLX0KLQotI2lmZGVmIENPTU1FTlQKLS8qIERFQ0MgNi4yIHNjcmVhbXMgYmxvb2R5 IG11cmRlciBhYm91dCBwcmludHcgKCJub3QgZW5vdWdoIGFyZ3MiKSAqLwotLyogYnV0IGFkZGlu ZyB0aGUgZm9sbG93aW5nIHByb3RvdHlwZSBvbmx5IG1ha2VzIGl0IGhvbGxlciBsb3VkZXIuICov Ci0jaWZkZWYgX19ERUNDCi0vKiAidmFyYXJncyIgcHJvdG90eXBlIGZvciBwcmludHcgKi8KLV9Q Uk9UT1RZUChzdGF0aWMgaW50IHByaW50dywoY2hhciAqLCAuLi4pKTsKLSNlbmRpZiAvKiBfX0RF Q0MgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSNpZmRlZiBfX0RFQ0MKLSNpbmNsdWRlIDxz dGRhcmcuaD4KLV9QUk9UT1RZUChzdGF0aWMgdm9pZCBwcmludHcsKGNoYXIgKiwgLi4uKSk7Ci1z dGF0aWMgdm9pZAotcHJpbnR3KGNoYXIgKnN0ciwuLi4pIHsKLSAgICBjaGFyIGJ1ZlsyNTVdOwot ICAgIHZhX2xpc3QgYXA7Ci0gICAgJERFU0NSSVBUT1IodGV4dF9kc2MsIDApOwotICAgIHRleHRf ZHNjLmRzYyRhX3BvaW50ZXI9YnVmOwotICAgIGlmICghc21nX29wZW4pCi0gICAgICByZXR1cm47 Ci0gICAgdmFfc3RhcnQoYXAsc3RyKTsKLSAgICB0ZXh0X2RzYy5kc2Mkd19sZW5ndGggPSB2c3By aW50ZihidWYsIHN0ciwgYXApOwotICAgIHZhX2VuZChhcCk7Ci0gICAgQ0hFQ0tfRVJSKCJwcmlu dHc6IHNtZyRwdXRfY2hhcnMiLAotICAgICAgICAgICAgICBzbWckcHV0X2NoYXJzKCZzbWdfZGlz cGxheV9pZCwgJnRleHRfZHNjLCAwLCAwLCAwLCAwLCAwKSk7Ci19Ci0jZWxzZQotc3RhdGljIHZv aWQKLXByaW50dyhzdHIsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCkKLSAgICBjaGFy ICpzdHI7Ci0gICAgbG9uZyBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTg7Ci0vKiBwcmlu dHcgKi8gewotICAgIGNoYXIgYnVmWzI1NV07Ci0gICAgJERFU0NSSVBUT1IodGV4dF9kc2MsIDAp OwotICAgIGlmICghc21nX29wZW4pCi0gICAgICByZXR1cm47Ci0gICAgdGV4dF9kc2MuZHNjJGFf cG9pbnRlcj1idWY7Ci0gICAgdGV4dF9kc2MuZHNjJHdfbGVuZ3RoID0gc3ByaW50ZihidWYsIHN0 ciwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4KTsKLSAgICBDSEVDS19FUlIoInByaW50 dzogc21nJHB1dF9jaGFycyIsCi0gICAgICAgICAgICAgIHNtZyRwdXRfY2hhcnMoJnNtZ19kaXNw bGF5X2lkLCAmdGV4dF9kc2MsIDAsIDAsIDAsIDAsIDApKTsKLX0KLSNlbmRpZiAvKiBfX0RFQ0Mg Ki8KLQotI2RlZmluZSBDS19DVVJQT1MKLWludAotY2tfY3VycG9zKHJvdywgY29sKSB7Ci0gICAg ZGVidWcoRjExMSwiVk1TIHNtZyBja19jdXJwb3MiLGNraXRvYShyb3cpLGNvbCk7Ci0gICAgaWYg KCFzbWdfaW5pdGVkIHx8ICFzbWdfb3BlbikgewotICAgICAgICBpbml0c2NyKCk7Ci0gICAgfQot ICAgIGRlYnVnKEYxMDEsIlZNUyBzbWcgY3VycG9zIHNtZ19vcGVuIiwiIixzbWdfb3Blbik7Ci0g ICAgaWYgKCFzbWdfb3BlbikKLSAgICAgIHJldHVybigwKTsKLSAgICBkZWJ1ZyhGMTExLCJWTVMg c21nIGNrX2N1cnBvcyIsY2tpdG9hKHJvdy0xKSxjb2wtMSk7Ci0gICAgbW92ZShyb3cgLSAxLCBj b2wgLSAxKTsgICAgICAgICAgICAgLyogU01HIGlzIDAtYmFzZWQgKi8KLSAgICByZWZyZXNoKCk7 Ci0gICAgLyogZW5kd2luKCk7ICovCi0gICAgcmV0dXJuKDApOwotfQotCi1pbnQKLWNrX2Nscygp IHsKLSAgICBkZWJ1ZyhGMTAxLCJWTVMgc21nIGNrX2NscyBzbWdfaW5pdGVkIiwiIixzbWdfaW5p dGVkKTsKLSAgICBpZiAoIXNtZ19pbml0ZWQgfHwgIXNtZ19vcGVuKSB7Ci0gICAgICAgIGluaXRz Y3IoKTsKLSAgICB9Ci0gICAgZGVidWcoRjEwMSwiVk1TIHNtZyBja19jbHMgc21nX29wZW4iLCIi LHNtZ19vcGVuKTsKLSAgICBpZiAoIXNtZ19vcGVuKQotICAgICAgcmV0dXJuKDApOwotICAgIGNs ZWFyKCk7Ci0gICAgcmVmcmVzaCgpOwotICAgIC8qIGVuZHdpbigpOyAqLwotICAgIHJldHVybigw KTsKLX0KLQotaW50Ci1ja19jbGVvbCgpIHsKLSAgICBkZWJ1ZyhGMTAxLCJWTVMgc21nIGNrX2Ns ZW9sIHNtZ19pbml0ZWQiLCIiLHNtZ19pbml0ZWQpOwotICAgIGlmICghc21nX2luaXRlZCB8fCAh c21nX29wZW4pIHsKLSAgICAgICAgaW5pdHNjcigpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJW TVMgc21nIGNrX2NsZW9sIHNtZ19vcGVuIiwiIixzbWdfb3Blbik7Ci0gICAgaWYgKCFzbWdfb3Bl bikKLSAgICAgIHJldHVybigwKTsKLSAgICBjbHJ0b2VvbCgpOwotICAgIHJlZnJlc2goKTsKLSAg ICAvKiBlbmR3aW4oKTsgKi8KLSAgICByZXR1cm4oMCk7Ci19Ci0jZW5kaWYgLyogQ0tfU01HICov Ci0KLSNpZmRlZiBNWUNVUlNFUwotLyoKLSAgRG8taXQteW91cnNlbGYgY3Vyc2VzIGltcGxlbWVu dGF0aW9uIGZvciBWTVMsIE9TLzIgYW5kIG90aGVyIEFOU0kvVlQtMTAwJ3MuCi0gIFN1cHBvcnRz IG9ubHkgdGhlIFZUNTIgYW5kIFZUMXh4IChhbmQgbGF0ZXIgVlQyeHgvM3h4LzR4eCkgdGVybWlu YWxzLgotICBCeSBUZXJyeSBLZW5uZWR5LCBTdCBQZXRlcnMgQ29sbGVnZS4KLQotICBGaXJzdCwg c29tZSBzdHVmZiB3ZSBjYW4ganVzdCBpZ25vcmU6Ci0qLwotCi1zdGF0aWMgaW50Ci10b3VjaHdp bih4KSBpbnQgeDsgewotICAgIHJldHVybigwKTsKLX0KLXN0YXRpYyBpbnQKLWluaXRzY3IoKSB7 Ci0gICAgcmV0dXJuKDApOwotfQotc3RhdGljIGludAotcmVmcmVzaCgpIHsKLSAgICByZXR1cm4o MCk7Ci19Ci1zdGF0aWMgaW50Ci1lbmR3aW4oKSB7Ci0gICAgcmV0dXJuKDApOwotfQotCi0vKgot ICogTm93LCBzb21lIHN0dWZmIHdlIG5lZWQgdG8gZG86Ci0gKi8KLQotX1BST1RPVFlQKCBpbnQg bW92ZSwgKGludCwgaW50KSApOwotI2lmbmRlZiBPUzIKLWludAotbW92ZShyb3csIGNvbCkgaW50 IHJvdywgY29sOyB7Ci0gICAgaWYgKGlzdnQ1MikKLSAgICAgIHByaW50ZigiXDAzM1klYyVjIiwg cm93ICsgMDM3LCBjb2wgKyAwMzcpOwotICAgIGVsc2UKLSAgICAgIHByaW50ZigiXDAzM1slZDsl ZEgiLCByb3cgKyAxLCBjb2wgKyAxKTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLWludAotY2xlYXIo KSB7Ci0gICAgbW92ZSgwLDApOwotICAgIGlmIChpc3Z0NTIpCi0gICAgICBwcmludGYoIlwwMzNK Iik7Ci0gICAgZWxzZQotICAgICAgcHJpbnRmKCJcMDMzW0oiKTsKLSAgICByZXR1cm4oMCk7Ci19 Ci0KLWludAotY2xydG9lb2woKSB7Ci0gICAgaWYgKGlzdnQ1MikKLSAgICAgIHByaW50ZigiXDAz M0siKTsKLSAgICBlbHNlCi0gICAgICBwcmludGYoIlwwMzNbSyIpOwotICAgIHJldHVybigwKTsK LX0KLQotI2RlZmluZSBDS19DVVJQT1MKLWludAotY2tfY2xzKCkgewotICAgIHJldHVybihjbGVh cigpKTsKLX0KLQotaW50Ci1ja19jbGVvbCgpIHsKLSAgICByZXR1cm4oY2xydG9lb2woKSk7Ci19 Ci0KLWludAotY2tfY3VycG9zKHJvdywgY29sKSBpbnQgcm93LCBjb2w7IHsKLSAgICBtb3ZlKHJv dywgY29sKTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLSNlbHNlIC8qIE9TMiAqLwotLyogV2luZG93 cyBOVCBhbmQgV2luZG93cyA5NSBkbyBub3QgcHJvdmlkZSBBTlNJIGVtdWxhdGlvbiAqLwotLyog VGhlcmVmb3JlIHdlIG1pZ2h0IGFzIHdlbGwgbm90IHVzZSBpdCBmb3IgT1MvMiBlaXRoZXIgICAq LwotCi1pbnQKLW1vdmUocm93LCBjb2wpIGludCByb3csIGNvbDsgewotI2lmbmRlZiBPTkVURVJN VVBECi0gICAgU2V0Q3VyUG9zKHJvdywgY29sKTsKLSNlbmRpZiAvKiBPTkVURVJNVVBEICovCi0g ICAgbGdvdG94eSggVkNNRCwgY29sKzEsIHJvdysxKTsKLSAgICBWc2NybklzRGlydHkoVkNNRCk7 Ci0gICAgcmV0dXJuKDApOwotfQotCi1pbnQKLWNsZWFyKCkgewotICAgIHZpb2NlbGwgY2VsbDsK LSAgICBtb3ZlKDAsMCk7Ci0jaWZkZWYgT05FVEVSTVVQRAotICAgIGlmIChWc2NybkdldEJ1ZmZl clNpemUoVkNNRCkgPiAwKSB7Ci0gICAgICAgIFZzY3JuU2Nyb2xsKFZDTUQsIFVQV0FSRCwgMCwK LSAgICAgICAgICAgICAgICAgICAgVnNjcm5HZXRIZWlnaHQoVkNNRCktKDEpLAotICAgICAgICAg ICAgICAgICAgICBWc2NybkdldEhlaWdodChWQ01EKS0oMCksIFRSVUUsIENIUl9TUCk7Ci0gICAg ICAgIGNsZWFydGVybXNjcmVlbihWQ01EKTsKLSAgICB9Ci0jZWxzZQotICAgIGNlbGwuYyA9ICcg JzsKLSAgICBjZWxsLmEgPSBjb2xvcmNtZDsKLSAgICBXcnROQ2VsbChjZWxsLCBjbWRfcm93cyAq IGNtZF9jb2xzLCAwLCAwKTsKLSNlbmRpZiAvKiBPTkVURVJNVVBEICovCi0gICAgcmV0dXJuKDAp OwotfQotCi1pbnQKLWNscnRvZW9sKCkgewotICAgIFVTSE9SVCByb3csIGNvbDsKLSAgICB2aW9j ZWxsIGNlbGw7Ci0KLSAgICBjZWxsLmMgPSAnICc7Ci0gICAgY2VsbC5hID0gY29sb3JjbWQ7Ci0j aWZuZGVmIE9ORVRFUk1VUEQKLSAgICBHZXRDdXJQb3MoJnJvdywgJmNvbCApOwotICAgIFdydE5D ZWxsKGNlbGwsIGNtZF9jb2xzIC0gY29sIC0xLCByb3csIGNvbCk7Ci0jZW5kaWYgLyogT05FVEVS TVVQRCAqLwotICAgIGNscnRvZW9sbihWQ01ELENIUl9TUCk7Ci0gICAgcmV0dXJuKDApOwotfQot Ci0jZGVmaW5lIENLX0NVUlBPUwotaW50Ci1ja19jdXJwb3Mocm93LCBjb2wpIGludCByb3csIGNv bDsgewotICAgIG1vdmUocm93LCBjb2wpOwotICAgIHJldHVybigwKTsKLX0KLQotaW50Ci1ja19j bHMoKSB7Ci0gICAgcmV0dXJuKGNsZWFyKCkpOwotfQotCi1pbnQKLWNrX2NsZW9sKCkgewotICAg IHJldHVybihjbHJ0b2VvbCgpKTsKLX0KLQotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE1Z Q1VSU0VTICovCi0KLSNpZm5kZWYgTk9URVJNQ0FQCi0jaWZuZGVmIENLX0NVUlBPUwotI2RlZmlu ZSBDS19DVVJQT1MKLQotLyogVGVybWNhcC9UZXJtaW5mbyBzZWN0aW9uICovCi0KLXN0YXRpYyBj aGFyIGN1cl9jbHNbMzJdID0geyBOVUwsIE5VTCB9Owotc3RhdGljIGNoYXIgY3VyX2NsZW9sWzMy XSA9IHsgTlVMLCBOVUwgfTsKLXN0YXRpYyBjaGFyIGN1cl9jbVs2NF0gPSB7IE5VTCwgTlVMIH07 Ci1zdGF0aWMgY2hhciB0Z3NidWZbMTI4XSA9IHsgTlVMLCBOVUwgfTsKLQotc3RhdGljCi0jaWZk ZWYgQ0tfQU5TSUMKLXZvaWQKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotY2tfdGVybXNldCh4KSBp bnQgeDsgewotICAgIGN1cl9jbHNbMF0gPSBOVUw7Ci0gICAgY3VyX2NsZW9sWzBdID0gTlVMOwot ICAgIGN1cl9jbVswXSA9IE5VTDsKLSNpZmRlZiB0Z2V0ZW50Ci0gICAgZGVidWcoRjEwMCwidGdl dGVudCBpcyBhIG1hY3JvIiwiIiwwKTsKLSNlbmRpZiAvKiB0Z2V0ZW50ICovCi0jaWZkZWYgdGdl dHN0cgotICAgIGRlYnVnKEYxMDAsInRnZXRzdHIgaXMgYSBtYWNybyIsIiIsMCk7Ci0jZW5kaWYg LyogdGdldHN0ciAqLwotI2lmZGVmIHRwdXRzCi0gICAgZGVidWcoRjEwMCwidHB1dHMgaXMgYSBt YWNybyIsIiIsMCk7Ci0jZW5kaWYgLyogdHB1dHMgKi8KLSNpZmRlZiB0Z290bwotICAgIGRlYnVn KEYxMDAsInRnb3RvIGlzIGEgbWFjcm8iLCIiLDApOwotI2VuZGlmIC8qIHRnb3RvICovCi0jaWZk ZWYgTk9URVJNQ0FQCi0gICAgLyogdGdldHN0cigpIGdldHMgYSBzZWdtZW50YXRpb24gZmF1bHQg b24gT1NGLzEgKi8KLSAgICBkZWJ1ZyhGMTAwLCJja190ZXJtc2V0IE5PVEVSTUNBUCIsIiIsMCk7 Ci0jZWxzZQotICAgIGlmIChub3Rlcm1jYXApIHsKLSAgICAgICAgZGVidWcoRjEwMCwiY2tfdGVy bXNldCBub3Rlcm1jYXAiLCIiLDApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGRlYnVn KEYxMDEsImNrX3Rlcm1zZXQgeCIsIiIseCk7Ci0gICAgaWYgKHggPiAwKSB7Ci0gICAgICAgIGNo YXIgKiBicDsKLSAgICAgICAgYnAgPSB0Z3NidWY7Ci0gICAgICAgICpicCA9IE5VTDsKLSAgICAg ICAgZGVidWcoRjExMCwiY2tfdGVybXNldCBjYWxsaW5nIHRnZXRzdHIiLCJjbCIsMCk7Ci0gICAg ICAgIGlmICh0Z2V0c3RyKCJjbCIsICZicCkpIHsgICAgICAgLyogR2V0IGNsZWFyLXNjcmVlbiBj b2RlICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja190ZXJtc2V0IHRnZXRzdHIgY2wiLHRn c2J1ZiwiIik7Ci0gICAgICAgICAgICBpZiAoKGludClzdHJsZW4odGdzYnVmKSA8IDMyKQotICAg ICAgICAgICAgICBja3N0cm5jcHkoY3VyX2Nscyx0Z3NidWYsMzIpOwotICAgICAgICB9IGVsc2UK LSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJwID0gdGdzYnVmOwotICAgICAgICBpZiAodGdl dHN0cigiY2UiLCAmYnApKSB7ICAgICAgIC8qIEdldCBjbGVhci10by1lbmQtb2YtbGluZSBjb2Rl ICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja190ZXJtc2V0IHRnZXRzdHIgY2UiLHRnc2J1 ZiwiIik7Ci0gICAgICAgICAgICBpZiAoKGludClzdHJsZW4odGdzYnVmKSA8IDMyKQotICAgICAg ICAgICAgICBja3N0cm5jcHkoY3VyX2NsZW9sLHRnc2J1ZiwzMik7Ci0gICAgICAgIH0gZWxzZQot ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYnAgPSB0Z3NidWY7Ci0gICAgICAgIGlmICh0Z2V0 c3RyKCJjbSIsICZicCkpIHsgICAgICAgLyogR2V0IGN1cnNvci1tb3ZlbWVudCBjb2RlICovCi0g ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja190ZXJtc2V0IHRnZXRzdHIgY20iLHRnc2J1ZiwiIik7 Ci0gICAgICAgICAgICBpZiAoKGludClzdHJsZW4odGdzYnVmKSA8IDY0KQotICAgICAgICAgICAg ICBja3N0cm5jcHkoY3VyX2NtLHRnc2J1Ziw2NCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg IHJldHVybjsKLSAgICB9Ci0jZW5kaWYgLyogTk9URVJNQ0FQICovCi19Ci0KLSNpZm5kZWYgVFBV VFNGTlRZUEUKLSNpZmRlZiBUUFVUU0lTVk9JRAotI2RlZmluZSBUUFVUU0ZOVFlQRSB2b2lkCi0j ZWxzZQotI2RlZmluZSBUUFVUU0ZOVFlQRSBpbnQKLSNlbmRpZiAvKiBUUFVUU0lTVk9JRCAqLwot I2VuZGlmIC8qIFRQVVRTRk5UWVBFICovCi0KLSNpZm5kZWYgVFBVVFNBUkdUWVBFCi0jaWZkZWYg SFBVWDkKLSNkZWZpbmUgVFBVVFNBUkdUWVBFIGNoYXIKLSNlbHNlCi0jaWZkZWYgSFBVWDEwCi0j ZGVmaW5lIFRQVVRTQVJHVFlQRSBjaGFyCi0jZWxzZQotI2RlZmluZSBUUFVUU0FSR1RZUEUgaW50 Ci0jZW5kaWYgLyogSFBVWDEwICovCi0jZW5kaWYgLyogSFBVWDkgKi8KLSNlbmRpZiAvKiBUUFVU U0FSR1RZUEUgKi8KLQotc3RhdGljIFRQVVRTRk5UWVBFCi0jaWZkZWYgQ0tfQU5TSUMKLWNrX291 dGMoVFBVVFNBUkdUWVBFIHgpCi0jZWxzZQotY2tfb3V0Yyh4KSBUUFVUU0FSR1RZUEUgeDsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFRvIHNhdGlzZnkgdHB1dHMoKSBhcmczIHByb3RvdHlwZSAqLwotICAgIGludCByYzsK LSAgICBjaGFyIGM7Ci0gICAgYyA9IChjaGFyKSB4OwotICAgIHJjID0gKGluc2VydmVyKSA/IHR0 b2MoYykgOiBjb25vYyhjKTsKLSNpZm5kZWYgVFBVVFNJU1ZPSUQKLSAgICByZXR1cm4ocmMpOwot I2VuZGlmIC8qIFRQVVRTSVNWT0lEICovCi19Ci0KLWludAotY2tfY3VycG9zKHJvdywgY29sKSBp bnQgcm93LCBjb2w7IHsKLSNpZmRlZiBDS19BTlNJQwotICAgIFRQVVRTRk5UWVBFICgqZm4pKFRQ VVRTQVJHVFlQRSk7Ci0jZWxzZQotICAgIFRQVVRTRk5UWVBFICgqZm4pKCk7Ci0jZW5kaWYgLyog Q0tfQU5TSUMgKi8KLSAgICBpZiAoIWZ4ZF9pbml0ZWQpCi0gICAgICBmeGRpbml0KDk5OTkpOwot ICAgIGlmICghY3VyX2NtWzBdKSB7ICAgICAgICAgICAgICAgICAgIC8qIFdlIGRvbid0IGhhdmUg ZXNjYXBlIHNlcXVlbmNlcyAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgcmV0dXJuKC0xKTsg ICAgICAgICAgICAgICAgICAgICAvKiBEbyBub3RoaW5nICovCi0jZWxzZQotICAgICAgICAvKiBC b3RoIEMtS2VybWl0J3MgU0NSRUVOIGNvbW1hbmQgYW5kIEFOU0kvVlQxMDAgYXJlIDEtYmFzZWQg Ki8KLSAgICAgICAgcHJpbnRmKCJcMDMzWyVkOyVkSCIsIHJvdywgY29sKTsgLyogT3IgZGVmYXVs dCB0byBBTlNJICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIH0gZWxzZSB7Ci0gICAgICAg IGZuID0gY2tfb3V0YzsKLSAgICAgICAgLyogdGVybWNhcC90ZXJtaW5mbyBpcyAwLWJhc2VkICov Ci0gICAgICAgIHRwdXRzKAotI2lmZGVmIFRQVVRTQVJHMUNPTlNUCi0gICAgICAgICAgICAgIChj b25zdCBjaGFyICopCi0jZW5kaWYgLyogVFBVVFNBUkcxQ09OU1QgKi8KLSAgICAgICAgICAgICAg dGdvdG8oY3VyX2NtLGNvbC0xLHJvdy0xKSwxLGZuKTsKLSAgICB9Ci0gICAgcmV0dXJuKDApOwot fQotCi1pbnQKLWNrX2NscygpIHsKLSNpZmRlZiBDS19BTlNJQwotICAgIFRQVVRTRk5UWVBFICgq Zm4pKFRQVVRTQVJHVFlQRSk7Ci0jZWxzZQotICAgIFRQVVRTRk5UWVBFICgqZm4pKCk7Ci0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLSAgICBpZiAoIWZ4ZF9pbml0ZWQpCi0gICAgICBmeGRpbml0KDk5 OTkpOwotICAgIGlmICghY3VyX2Nsc1swXSkgeyAgICAgICAgICAgICAgICAgIC8qIElmIHdlIGRv bid0IGhhdmUgZXNjYXBlIHNlcXVlbmNlcyAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgcmV0 dXJuKC0xKTsgICAgICAgICAgICAgICAgICAgICAvKiBEbyBub3RoaW5nICovCi0jZWxzZQotICAg ICAgICBwcmludGYoIlwwMzNbO0hcMDMzWzJKIik7ICAgICAgIC8qIE9yIGRlZmF1bHQgdG8gQU5T SSAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB9IGVsc2UgewotICAgICAgICBmbiA9IGNr X291dGM7Ci0gICAgICAgIGRlYnVnKEYxMTEsImNrX2NscyAyIixjdXJfY2xzLGZ4ZF9pbml0ZWQp OwotICAgICAgICB0cHV0cyhjdXJfY2xzLGNtZF9yb3dzLGZuKTsKLSAgICB9Ci0gICAgcmV0dXJu KDApOwotfQotCi1pbnQKLWNrX2NsZW9sKCkgewotI2lmZGVmIENLX0FOU0lDCi0gICAgVFBVVFNG TlRZUEUgKCpmbikoVFBVVFNBUkdUWVBFKTsKLSNlbHNlCi0gICAgVFBVVFNGTlRZUEUgKCpmbiko KTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotICAgIGlmICghZnhkX2luaXRlZCkKLSAgICAgIGZ4 ZGluaXQoOTk5OSk7Ci0gICAgaWYgKCFjdXJfY2xlb2xbMF0pIHsgICAgICAgICAgICAgICAgLyog SWYgd2UgZG9uJ3QgaGF2ZSBlc2NhcGUgc2VxdWVuY2VzICovCi0jaWZkZWYgQ09NTUVOVAotICAg ICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAgICAgICAgIC8qIERvIG5vdGhpbmcgKi8KLSNl bHNlCi0gICAgICAgIHByaW50ZigiXDAzM1tLIik7ICAgICAgICAgICAgICAgLyogT3IgdXNlIEFO U0kgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgfSBlbHNlIHsKLSAgICAgICAgZm4gPSBj a19vdXRjOwotICAgICAgICB0cHV0cyhjdXJfY2xlb2wsMSxmbik7Ci0gICAgfQotICAgIHJldHVy bigwKTsKLX0KLSNlbmRpZiAvKiBDS19DVVJQT1MgKi8KLSNlbHNlCi1zdGF0aWMgdm9pZAotY2tf dGVybXNldCh4KSBpbnQgeDsgewotICAgIGlmICh4KSByZXR1cm47Ci19Ci0jZW5kaWYgLyogTk9U RVJNQ0FQICovCi0KLSNpZm5kZWYgQ0tfQ1VSUE9TCi0jZGVmaW5lIENLX0NVUlBPUwotaW50Ci1j a19jbHMoKSB7Ci0gICAgcHJpbnRmKCJcMDMzWztIXDAzM1sySiIpOwotICAgIHJldHVybigwKTsK LX0KLQotaW50Ci1ja19jbGVvbCgpIHsKLSAgICBwcmludGYoIlwwMzNbSyIpOwotICAgIHJldHVy bigwKTsKLX0KLQotaW50Ci1ja19jdXJwb3Mocm93LCBjb2wpIGludCByb3csIGNvbDsgewotICAg IHByaW50ZigiXDAzM1slZDslZEgiLCByb3csIGNvbCk7Ci0gICAgcmV0dXJuKDApOwotfQotI2Vu ZGlmIC8qIENLX0NVUlBPUyAqLwotCi0KLSNpZm5kZWYgTk9YRkVSCi1zdGF0aWMgaW50IGNpbml0 ID0gMDsgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgY3Vyc2VzIGluaXQnZCAqLwotc3Rh dGljIGludCBjZW5kdyA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIGVuZHdpbigpIHdhcyBjYWxs ZWQgKi8KLQotc3RhdGljCi0jaWZkZWYgQ0tfQU5TSUMgICAgICAgICAgICAgICAgICAgICAgICAg LyogQmVjYXVzZSBWT0lEIHVzZWQgYnkgY3Vyc2VzLmggKi8KLXZvaWQKLSNlbHNlCi0jaWZkZWYg TVlDVVJTRVMKLVZPSUQKLSNlbHNlCi1pbnQKLSNlbmRpZiAvKiBNWUNVUlNFUyAqLwotI2VuZGlm IC8qIENLX0FOU0lDICovCi0jaWZkZWYgQ0tfQU5TSUMgICAgICAgICAgICAgICAgICAgICAgICAg LyogVXBkYXRlICUgdHJhbnNmZXJlZCBhbmQgJSBiYXIgKi8KLXVwZHBjdChsb25nIG9sZCwgbG9u ZyBuZXcpCi0jZWxzZSAvKiBDS19BTlNJQyAqLwotdXBkcGN0KG9sZCwgbmV3KSBsb25nIG9sZCwg bmV3OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiB1cGRwY3QgKi8gewotI2lmZGVmIENPTU1F TlQKLSAgICBpbnQgbSwgbjsKLSAgICBtb3ZlKENXX1BDRCwyMik7Ci0gICAgcHJpbnR3KCIlbGQi LCBuZXcpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgS3VpU2V0UHJvcGVydHkoS1VJ X0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19QQ0QsIChsb25nKSBuZXcpOwotI2VuZGlmIC8qIEs5 NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSNpZmRlZiBDS19QQ1RfQkFSCi0gICAgaWYgKHRoZXJt b21ldGVyKSB7Ci0gICAgICAgIGlmIChvbGQgPiBuZXcpIHsKLSAgICAgICAgICAgIG9sZCA9IDA7 Ci0gICAgICAgICAgICBtb3ZlKENXX1BDRCwgMjYpOwotICAgICAgICAgICAgY2xydG9lb2woKTsK LSAgICAgICAgfQotICAgICAgICBtID0gb2xkLzI7Ci0gICAgICAgIG1vdmUoQ1dfUENELCAyNiAr IG0pOwotICAgICAgICBuID0gbmV3IC8gMiAtIG07Ci0jaWZuZGVmIE9TMgotICAgICAgICB3aGls ZSAobiA+IDApIHsKLSAgICAgICAgICAgIGlmICgobSArIDEpICUgNSA9PSAwKQotICAgICAgICAg ICAgICBwcmludHcoIioiKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcHJpbnR3 KCI9Iik7Ci0gICAgICAgICAgICBtKys7Ci0gICAgICAgICAgICBuLS07Ci0gICAgICAgIH0KLSAg ICAgICAgaWYgKG5ldyAlIDIgIT0gMCkgcHJpbnR3KCItIik7Ci0gICAgICAgIC8qIG1vdmUoQ1df UENELCAyMis1Myk7ICovCi0jZWxzZSAvKiBPUzIgKi8KLSAgICAgICAgd2hpbGUgKG4gPiAwKSB7 Ci0gICAgICAgICAgICBwcmludHcoIiVjIiwgJ1wzMzMnKTsKLSAgICAgICAgICAgIG0rKzsgbi0t OwotICAgICAgICB9Ci0gICAgICAgIGlmIChuZXcgJSAyICE9IDApCi0gICAgICAgICAgcHJpbnR3 KCIlYyIsICdcMjYxJyk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgfQotI2VuZGlmIC8qIENLX1BD VF9CQVIgKi8KLSAgICAvKiBjbHJ0b2VvbCgpOyAqLwotI2Vsc2UgIC8qICFDT01NRU5UICovCi0j aWZkZWYgT1MyCi0jZGVmaW5lIENIQVIxICAgJ1wzMzMnICAgICAgICAgIC8qIE9TMiAtIENQNDM3 ICovCi0jZGVmaW5lIENIQVIyICAgJ1wyNjEnCi0jZWxzZQotI2RlZmluZSBDSEFSMSAgICcvJyAg ICAgICAgICAgICAvKiBEZWZhdWx0ICovCi0jZGVmaW5lIENIQVIyICAgJy0nCi0jZW5kaWYgLyog T1MyICovCi0gICAgZGVidWcoRjEwMSwidXBkcGN0IG9sZCIsIiIsb2xkKTsKLSAgICBkZWJ1ZyhG MTAxLCJ1cGRwY3QgbmV3IiwiIixuZXcpOwotICAgIG1vdmUoQ1dfUENELDIyKTsKLSAgICBwcmlu dHcoIiUtM2xkIiwgbmV3KTsgLyogICh3YXMpICAgcHJpbnR3KCIlbGQiLCBuZXcpOyAgKi8KLSNp ZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFO U0ZFUiwgKGxvbmcpIENXX1BDRCwgKGxvbmcpIG5ldyApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNl bmRpZiAvKiBLVUkgKi8KLSNpZmRlZiBDS19QQ1RfQkFSCi0gICAgaWYgKHRoZXJtb21ldGVyKSB7 Ci0gICAgICAgIGludCBtLCBuOwotCi0gICAgICAgIGlmIChvbGQgPiBuZXcpIHsKLSAgICAgICAg ICAgIG9sZCA9IDAgOwotICAgICAgICAgICAgbW92ZShDV19QQ0QsIDI2KTsKLSAgICAgICAgICAg IGNscnRvZW9sKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG5ldyA8PSAxMDBMKSB7Ci0gICAg ICAgICAgICBtID0gb2xkIC8gMjsKLSAgICAgICAgICAgIG4gPSBuZXcgLyAyIC0gbTsKLSAgICAg ICAgICAgIG1vdmUoQ1dfUENELCAyNittKTsKLSAgICAgICAgICAgIHdoaWxlIChuLS0gPiAwKQot ICAgICAgICAgICAgICBwcmludHcoIiVjIiwgQ0hBUjEpOwotICAgICAgICAgICAgaWYgKG5ldyAl IDIgIT0gMCkKLSAgICAgICAgICAgICAgcHJpbnR3KCIlYyIsIENIQVIyKTsKLSAgICAgICAgfQot ICAgIH0KLSNlbmRpZiAvKiBDS19QQ1RfQkFSICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotfQot Ci1zdGF0aWMgQ0tfT0ZGX1Qgb2xkX3RyID0gKENLX09GRl9UKS0xOwkvKiBUaW1lIHJlbWFpbmlu ZyBwcmV2aW91c2x5ICovCi0KLXN0YXRpYyBDS19PRkZfVAotI2lmZGVmIENLX0FOU0lDCi1zaG9l dGwoQ0tfT0ZGX1Qgb2xkX3RyLCBsb25nIGNwcywgQ0tfT0ZGX1QgZnNpeiwgQ0tfT0ZGX1QgaG93 ZmFyKQotI2Vsc2UKLSAgICBzaG9ldGwob2xkX3RyLCBjcHMsIGZzaXosIGhvd2ZhcikgbG9uZyBj cHM7IENLX09GRl9UIG9sZF90ciwgZnNpeiwgaG93ZmFyOwotI2VuZGlmIC8qIENLX0FOU0lDICov Ci0vKiBzaG9ldGwgKi8geyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRXN0aW1hdGVkIHRp bWUgbGVmdCBpbiB0cmFuc2ZlciAqLwotICAgIENLX09GRl9UIHRyOwkJCS8qIFRpbWUgcmVtYWlu aW5nLCBzZWNvbmRzICovCi0KLSNpZmRlZiBHRlRJTUVSCi0gICAgaWYgKGZzaXogPiAwTCAmJiBj cHMgPiAwTCkKLSAgICAgIHRyID0gKENLX09GRl9UKSgoQ0tGTE9BVCkoZnNpeiAtIGhvd2Zhcikg LyAoQ0tGTE9BVCljcHMpOwotICAgIGVsc2UKLSAgICAgIHRyID0gKENLX09GRl9UKS0xOwotI2Vs c2UKLSAgICB0ciA9IChmc2l6ID4gMEwgJiYgY3BzID4gMEwpID8KLSAgICAgICgoZnNpeiAtIGhv d2ZhcikgLyBjcHMpIDoKLSAgICAgICAgKENLX09GRl9UKS0xOwotI2VuZGlmIC8qIEdGVElNRVIg Ki8KLSAgICBtb3ZlKENXX1RSLDIyKTsKLSAgICBpZiAodHIgPiAoQ0tfT0ZGX1QpLTEpIHsKLSAg ICAgICAgaWYgKHRyICE9IG9sZF90cikgewotICAgICAgICAgICAgcHJpbnR3KCIlcyIsaGhtbXNz KHRyKSk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgIEt1aVNldFByb3Bl cnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZylDV19UUiwgKGxvbmcpaGhtbXNzKHRyKSk7Ci0j ZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgY2xydG9lb2wo KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHByaW50dygiKHVua25vd24pIik7 Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9G SUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfVFIsIChsb25nKSAiKHVua25vd24pIiApOwotI2VuZGlm IC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgY2xydG9lb2woKTsKLSAgICB9 Ci0gICAgcmV0dXJuKHRyKTsKLX0KLQotc3RhdGljIGxvbmcKLSNpZmRlZiBDS19BTlNJQwotc2hv Y3BzKGludCBwY3QsIENLX09GRl9UIGZzaXosIENLX09GRl9UIGhvd2ZhcikKLSNlbHNlCi1zaG9j cHMocGN0LCBmc2l6LCBob3dmYXIpIGludCBwY3Q7IENLX09GRl9UIGZzaXosIGhvd2ZhcjsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwotLyogc2hvY3BzICovIHsKLSNpZmRlZiBDUFNfV0VJR0hURUQK LSAgICBzdGF0aWMgQ0tfT0ZGX1Qgb2xkZmZjID0gMEw7Ci0jZW5kaWYgLyogQ1BTX1dFSUdIVEVE ICovCi0jaWZkZWYgR0ZUSU1FUgotICAgIENLRkxPQVQgc2VjcywgeHg7Ci0jZWxzZQotICAgIENL X09GRl9UIHNlY3MsIHh4OwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLQotI2lmZGVmIEdGVElNRVIK LSAgICB4eCA9IChndHYgPj0gMC4wKSA/IGd0diA6IDAuMDsgICAgICAvKiBGbG9hdGluZy1wb2lu dCB2ZXJzaW9uICovCi0gICAgZ3R2ID0gZ2Z0aW1lcigpOwotICAgIGlmICgoZ3R2IC0gb2xkZ3R2 KSA8IChDS0ZMT0FUKSAxLjApIC8qIE9ubHkgZG8gdGhpcyBvbmNlIHBlciBzZWNvbmQgKi8KLSAg ICAgIHJldHVybihvbGRjcHMpOwotICAgIG9sZGd0diA9IHh4OwotI2Vsc2UKLSAgICB4eCA9IChn dHYgPj0gMCkgPyBndHYgOiAwOyAgICAgICAgICAvKiBXaG9sZS1udW1iZXIgdmVyc2lvbiAqLwot ICAgIGd0diA9IGd0aW1lcigpOwotICAgIGlmICgoZ3R2IC0gb2xkZ3R2KSA8IDEpCi0gICAgICBy ZXR1cm4ob2xkY3BzKTsKLSAgICBvbGRndHYgPSB4eDsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0K LSNpZmRlZiBDUFNfV0VJR0hURUQKLSAgICAvKiBkZWJ1ZyhGMTAwLCJTSE9DUFM6IFdFSUdIVEVE IiwiIiwwKTsgKi8KLSAgICBpZiAoZ3R2ICE9IG9sZGd0dikgeyAgICAgICAgICAgICAgICAvKiBU aGUgZmlyc3QgcGFja2V0IGlzIGlnbm9yZWQgKi8KLSAgICAgICAgaWYgKGZmYyA8IG9sZGZmYykK LSAgICAgICAgICBvbGRmZmMgPSBmZmM7Ci0gICAgICAgIG9sZGNwcyA9IGNwczsKLSAgICAgICAg aWYgKG9sZGNwcyAmJiBvbGRndHYgPgotI2lmZGVmIEdGVElNRVIKLSAgICAgICAgICAgIDEuMAot I2Vsc2UKLSAgICAgICAgICAgIDEKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0gICAgICAgICAgICAp IHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIGZpcnN0IHNlY29uZCBpcyBpZ25vcmVk ICovCi0vKgotICBUaGlzIHZlcnNpb24gb2Ygc2hvY3BzKCkgcHJvZHVjZXMgYSB3ZWlnaHRlZCBh dmVyYWdlIHRoYXQgc29tZQotICBwZW9wbGUgbGlrZSwgYnV0IG1vc3QgcGVvcGxlIGZpbmQgaXQg ZGlzY29uY2VydGluZyBhbmQgYm9tYmFyZCB1cwotICB3aXRoIHF1ZXN0aW9ucyBhbmQgY29tcGxh aW50cyBhYm91dCB3aHkgdGhlIENQUyBmaWd1cmUgZmx1Y3R1YXRlcyBzbwotICB3aWxkbHkuICBT byBub3cgeW91IG9ubHkgZ2V0IHRoZSB3ZWlnaHRlZCBhdmVyYWdlIGlmIHlvdSBidWlsZCB0aGUK LSAgcHJvZ3JhbSB5b3Vyc2VsZiB3aXRoIENQU19XRUlHSFRFRCBkZWZpbmVkLgotKi8KLSNpZm5k ZWYgQ1BTX1ZJTkNFCi0jaWZkZWYgR0ZUSU1FUgotICAgICAgICAgICAgY3BzID0gKGxvbmcpKCgo KENLRkxPQVQpb2xkY3BzICogMy4wKSArCi0gICAgICAgICAgICAgICAgICAgKENLRkxPQVQpKGZm YyAtIG9sZGZmYykgLyAoZ3R2LW9sZGd0dikgKSAvIDQuMCk7Ci0jZWxzZQotICAgICAgICAgICAg Y3BzID0gKCAob2xkY3BzICogMykgKyAoZmZjIC0gb2xkZmZjKSAvIChndHYtb2xkZ3R2KSApIC8g NDsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0jZWxzZQotLyogQW5kIGFuIGFsdGVybmF0ZSB3ZWln aHRpbmcgc2NoZW1lIGZyb20gVmluY2VudCBGYXRpY2EuLi4gKi8KLSAgICAgICAgICAgIGNwcyA9 ICgzICoKLSAgICAgICAgICAgICAoKDErcGN0LzMwMCkqb2xkZmZjL29sZGd0disoMS1wY3QvMTAw KSooZmZjLW9sZGZmYykvKGd0di1vbGRndHYpKSkKLSAgICAgICAgICAgICAgLyA0OwotI2VuZGlm IC8qIENQU19WSU5DRSAqLwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogTm8gd2Vp Z2h0ZWQgYXZlcmFnZSBzaW5jZSB0aGVyZSBpcyBub3RoaW5nIHRvIHdlaWdoICovCi0jaWZkZWYg R0ZUSU1FUgotICAgICAgICAgICAgY3BzID0gKGxvbmcpKGd0diAhPSAwLjAgPwotICAgICAgICAg ICAgICAoQ0tGTE9BVCkoZmZjIC0gb2xkZmZjKSAvIChndHYgLSBvbGRndHYpIDoKLSAgICAgICAg ICAgICAgICAoZmZjIC0gb2xkZmZjKSkgOwotI2Vsc2UKLSAgICAgICAgICAgIGNwcyA9IGd0diA/ IChmZmMgLSBvbGRmZmMpIC8gKGd0diAtIG9sZGd0dikgOiAoZmZjIC0gb2xkZmZjKSA7Ci0jZW5k aWYgLyogR0ZUSU1FUiAqLwotICAgICAgICB9Ci0jaWZkZWYgQ09NTUVOVAotI2lmZGVmIERFQlVH Ci0gICAgICAgIGlmIChkZWJsb2cpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzog cGN0ICAgIiwiIixwY3QpOwotICAgICAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBndHYgICAi LCIiLGd0dik7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IG9sZGd0diIsIiIsb2xk Z3R2KTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogZGd0diAgIiwiIiwobG9uZyko Z3R2LW9sZGd0dikpOwotICAgICAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBmZmMgICAiLCIi LGZmYyk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IG9sZGZmYyIsIiIsb2xkZmZj KTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogZGZmYyAgIiwiIixmZmMtb2xkZmZj KTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogY3BzICAgIiwiIixjcHMpOwotICAg ICAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAg IG1vdmUoQ1dfQ1AsMjIpOwotICAgICAgICBwcmludHcoIiVsZCIsIGNwcyk7Ci0jaWZkZWYgS1VJ Ci0jaWZuZGVmIEs5NUcKLSAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVS LCAobG9uZykgQ1dfQ1AsIChsb25nKSBjcHMgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYg LyogS1VJICovCi0gICAgICAgIGNscnRvZW9sKCk7Ci0gICAgICAgIG9sZGZmYyA9IGZmYzsKLSAg ICB9Ci0jZWxzZSAvKiAhQ1BTX1dFSUdIVEVEICovCi0jaWZkZWYgQ09NTUVOVAotI2lmZGVmIERF QlVHCi0gICAgaWYgKGRlYmxvZykgewotCWRlYnVnKEYxMDAsIlNIT0NQUzogTk9UIFdFSUdIVEVE IiwiIiwwKTsKLSAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBwY3QgICAgIiwiIixwY3QpOwot ICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IGd0diAgICAiLCIiLGd0dik7Ci0gICAgICAgIGRl YnVnKEYxMDEsIlNIT0NQUzogb2xkZ3R2ICIsIiIsb2xkZ3R2KTsKLSAgICAgICAgZGVidWcoRjEw MSwiU0hPQ1BTOiBkZ3R2ICAgIiwiIiwobG9uZylndHYgLSAobG9uZylvbGRndHYpOwotICAgICAg ICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IGZmYyAgICAiLCIiLGZmYyk7Ci0gICAgICAgIGRlYnVnKEYx MDEsIlNIT0NQUzogb2xkZmZjICIsIiIsb2xkZmZjKTsKLSAgICAgICAgZGVidWcoRjEwMSwiU0hP Q1BTOiBkZmZjICAgIiwiIixmZmMtb2xkZmZjKTsKLSAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BT OiBjcHMgICAgIiwiIixjcHMpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IGZpbGNudCAi LCIiLGZpbGNudCk7Ci0jaWZkZWYgR0ZUSU1FUgotICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6 IGZwZnNlY3MiLCIiLGZwZnNlY3MpOwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLSAgICB9Ci0gICAg ZGVidWcoRjEwMSwic2hvY3BzIGd0diIsIiIsZ3R2KTsKLSNlbmRpZiAvKiBERUJVRyAqLwotI2lm ZGVmIEdGVElNRVIKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgLyogZGVidWcoRjEwMSwic2hv Y3BzIGZwZnNlY3MiLCIiLGZwZnNlY3MpOyAqLwotICAgIHNlY3MgPSBndHYgLSBmcGZzZWNzOwot ICAgIC8qIGRlYnVnKEYxMDEsInNob2NwcyBzZWNzIiwiIiwobG9uZylzZWNzKTsgKi8KLSAgICBp ZiAoc2VjcyA+IDAuMCkgewotICAgICAgICBjcHMgPSAobG9uZykoKENLRkxPQVQpIGZmYyAvIHNl Y3MpOwotICAgICAgICAvKiBkZWJ1ZyhGMTAxLCJzaG9jcHMgY3BzIiwiIixjcHMpOyAqLwotICAg ICAgICBtb3ZlKENXX0NQLDIyKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICBL dWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19DUCwgKGxvbmcpIGNw cyApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgcHJpbnR3 KCIlbGQiLCBjcHMpOwotICAgICAgICBjbHJ0b2VvbCgpOwotICAgIH0KLSNlbHNlICAvKiBOb3Qg R0ZUSU1FUiAqLwotICAgIGlmICgoc2VjcyA9IGd0diAtIGZzZWNzKSA+IDApIHsKLSAgICAgICAg Y3BzID0gKHNlY3MgPCAxTCkgPyBmZmMgOiBmZmMgLyBzZWNzOwotICAgICAgICBtb3ZlKENXX0NQ LDIyKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICBLdWlTZXRQcm9wZXJ0eSgg S1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19DUCwgKGxvbmcpIGNwcyApOwotI2VuZGlmIC8q IEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgcHJpbnR3KCIlbGQiLCBjcHMpOwot ICAgICAgICBjbHJ0b2VvbCgpOwotICAgIH0KLSNlbmRpZiAvKiBHRlRJTUVSICovCi0jZW5kaWYg LyogQ1BTX1dFSUdIVEVEICovCi0KLSAgICBpZiAoY3BzID4gcGVha2NwcyAmJiAgICAgICAgICAg ICAgICAvKiBQZWFrIHRyYW5zZmVyIHJhdGUgKi8KLSAgICAgICAgKCh3aGF0ICYgV19TRU5EICYm IHNwYWNrZXRzID4gd3Nsb3RzICsgNCkgfHwKLQkgKCEod2hhdCAmIFdfU0VORCkgJiYgc3BhY2tl dHMgPiAxMCkpKSB7Ci0gICAgICAgIHBlYWtjcHMgPSBjcHM7Ci0gICAgfQotICAgIG9sZF90ciA9 IHNob2V0bChvbGRfdHIsIGNwcywgZnNpeiwgaG93ZmFyKTsKLSAgICByZXR1cm4oY3BzKTsKLX0K LQotc3RhdGljCi0jaWZkZWYgQ0tfQU5TSUMgICAgICAgICAgICAgICAgICAgICAgICAgLyogQmVj YXVzZSBWT0lEIHVzZWQgYnkgY3Vyc2VzLmggKi8KLXZvaWQKLSNlbHNlCi0jaWZkZWYgTVlDVVJT RVMKLVZPSUQKLSNlbHNlCi1pbnQKLSNlbmRpZiAvKiBNWUNVUlNFUyAqLwotI2VuZGlmIC8qIENL X0FOU0lDICovCi1zY3JmdCgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGlz cGxheSBmaWxlIHR5cGUgKi8KLSAgICBjaGFyIHhmZXJzdHJbMjU2XTsKLSAgICB4ZmVyc3RyWzBd ID0gTlVMOwotICAgIGRlYnVnKEYxMDEsInNjcmZ0IGJpbmFyeSIsIiIsYmluYXJ5KTsKLSAgICBp ZiAoYmluYXJ5KSB7Ci0gICAgICAgIHN3aXRjaChiaW5hcnkpIHsKLSAgICAgICAgICBjYXNlIFhZ RlRfTDoKLSAgICAgICAgICAgIGNrc3RybmNweSh4ZmVyc3RyLCJMQUJFTEVEIiwyNTYpOwotICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBYWUZUX0k6Ci0gICAgICAgICAgICBja3N0 cm5jcHkoeGZlcnN0ciwiSU1BR0UiLDI1Nik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICBjYXNlIFhZRlRfVToKLSAgICAgICAgICAgIGNrc3RybmNweSh4ZmVyc3RyLCJCSU5BUlkgVU5E RUZJTkVEIiwyNTYpOwotICAgICAgICAgICAgYnJlYWs7Ci0JICBjYXNlIFhZRlRfTToKLSAgICAg ICAgICAgIGNrc3RybmNweSh4ZmVyc3RyLCJNQUNCSU5BUlkiLDI1Nik7Ci0gICAgICAgICAgICBi cmVhazsKLQkgIGNhc2UgWFlGVF9YOgotICAgICAgICAgICAgY2tzdHJuY3B5KHhmZXJzdHIsIlRF TkVYIiwyNTYpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAg ICAgICBjYXNlIFhZRlRfQjoKLSAgICAgICAgICAgIGNrc3RybmNweSh4ZmVyc3RyLCJCSU5BUlki LDI1Nik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotI2lmZGVmIENLX1JFU0VORAot ICAgICAgICBpZiAod2hhdCAmIFdfU0VORCAmJiBzZW5kc3RhcnQgPiAwTCkgewotICAgICAgICAg ICAgaWYgKHNlbmRtb2RlID09IFNNX1BTRU5EKSB7Ci0gICAgICAgICAgICAgICAgY2tzdHJuY2F0 KHhmZXJzdHIsICIgLyBwYXJ0aWFsIiwgMjU2KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Vu ZG1vZGUgPT0gU01fUkVTRU5EKSB7Ci0gICAgICAgICAgICAgICAgY2tzdHJuY2F0KHhmZXJzdHIs ICIgLyByZXNlbmQiLCAyNTYpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHdo YXQgJiBXX1JFQ1YgJiYgcnNfbGVuID4gMEwpIHsKLSAgICAgICAgICAgIGNrc3RybmNhdCh4ZmVy c3RyLCAiIC8gcmVzZW5kIiwgMjU2KTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENLX1JFU0VORCAq LwotICAgIH0gZWxzZSB7Ci0KLSNpZm5kZWYgTk9DU0VUUwotICAgICAgICBja3N0cm5jcHkoeGZl cnN0ciwiVEVYVCIsMjU2KTsKLSNpZmRlZiBORVdGVFAKLSNpZm5kZWYgTk9VTklDT0RFCi0JaWYg KHdoYXQgJiBXX0ZUUCkgewotCSAgICBpZiAoZnRwX2NzeCA8IDApCi0JICAgICAgY2tzdHJuY2F0 KHhmZXJzdHIsIiAobm8gdHJhbnNsYXRpb24pIiwgMjU2KTsKLQkgICAgZWxzZQotCSAgICAgIGNr bWFreG1zZygmeGZlcnN0cls0XSwyNTIsCi0JCSAgICAgICAiICgiLAotCQkgICAgICAgZmNzaW5m b1sod2hhdCAmIFdfU0VORCkgPyBmdHBfY3NsIDogZnRwX2NzeF0ua2V5d29yZCwKLQkJICAgICAg ICIgPT4gIiwKLQkJICAgICAgIGZjc2luZm9bKHdoYXQgJiBXX1NFTkQpID8gZnRwX2NzeCA6IGZ0 cF9jc2xdLmtleXdvcmQsCi0JCSAgICAgICAiKSIsCi0JCSAgICAgICBOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwsTlVMTCxOVUxMCi0JCSAgICAgICApOwotCX0gZWxzZQotI2VuZGlmIC8qIE5PVU5J Q09ERSAqLwotI2VuZGlmIC8qIE5FV0ZUUCAqLwotCSAgaWYgKHRjaGFyc2V0ID09IFRDX1RSQU5T UCkgewotICAgICAgICAgICAgY2tzdHJuY2F0KHhmZXJzdHIsICIgKG5vIHRyYW5zbGF0aW9uKSIs IDI1Nik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAod2hhdCAmIFdfU0VORCkg ewotICAgICAgICAgICAgICAgIHNwcmludGYoICZ4ZmVyc3RyW3N0cmxlbih4ZmVyc3RyKV0sIC8q IHNhZmUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICIgKCVzID0+ICVzKSIsCi0gICAgICAg ICAgICAgICAgICAgICAgICBmY3NpbmZvW2ZjaGFyc2V0XS5rZXl3b3JkLCAvKiBidWlsdC1pbiBr ZXl3b3JkcyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgdGNzaW5mb1t0Y2hhcnNldF0ua2V5 d29yZCAgLyogbGVuZ3RocyBhcmUgY29udHJvbGxlZCAqLwotCQkJKTsKLSAgICAgICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3ByaW50ZiggJnhmZXJzdHJbc3RybGVuKHhmZXJzdHIp XSwgLyogc2FmZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgIiAoJXMgPT4gJXMpIiwKLSAg ICAgICAgICAgICAgICAgICAgICAgIHRjc2luZm9bdGNoYXJzZXRdLmtleXdvcmQsIC8qIGJ1aWx0 LWluIGtleXdvcmRzICovCi0gICAgICAgICAgICAgICAgICAgICAgICBmY3NpbmZvW2ZjaGFyc2V0 XS5rZXl3b3JkKTsgLyogbGVuZ3RocyBjb250cm9sbGVkICovCi0gICAgICAgICAgICB9Ci0gICAg ICAgIH0KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0gICAgfQotICAgIG1vdmUoQ1dfVFlQLDIyKTsK LSAgICBwcmludHcoIiVzIiwgeGZlcnN0cik7Ci0gICAgY2xydG9lb2woKTsKLSNpZmRlZiBLVUkK LSNpZm5kZWYgSzk1RwotICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxv bmcpIENXX1RZUCwgKGxvbmcpIHhmZXJzdHIgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYg LyogS1VJICovCi0gICAgcmV0dXJuOwotfQotCi0jaWZkZWYgQ0tfTkVXVEVSTQotc3RhdGljIEZJ TEUgKmNrX3N0ZG91dCA9IE5VTEw7Ci1zdGF0aWMgaW50IGNrX2ZkID0gLTE7Ci0jZW5kaWYgLyog Q0tfTkVXVEVSTSAqLwotCi1zdGF0aWMgbG9uZyBwY3QgPSAwTCwgb2xkcGN0ID0gMEwsIG9sZHJ0 dCA9IC0xTDsKLXN0YXRpYyBpbnQgb2xkdHlwID0gMCwgb2xkd2luID0gLTEsIG9sZHRyeSA9IC0x LCBvbGRsZW4gPSAtMSwgb2xkdGltID0gLTE7Ci0KLSNpZmRlZiBORVRDT05OCi1zdGF0aWMgY2hh ciAqbmV0bmFtZVtdID0gewotICAgICJub25lIiwJCQkJLyogMDAgKi8KLSAgICAiVENQL0lQIiwJ CQkJLyogMDEgVENQIChTb2NrZXRzKSAqLwotICAgICJUQ1AvSVAiLAkJCQkvKiAwMiBUQ1AgKFN0 cmVhbXMpICovCi0gICAgIlguMjUiLAkJCQkvKiAwMyBTdW5MaW5rIFguMjQgICovCi0gICAgIkRF Q25ldCIsCQkJCS8qIDA0IERFQ25ldCAgKi8KLSAgICAiVkFYIFBTSSIsCQkJCS8qIDA1IFZBWCBQ U0kgKi8KLSAgICAiTmFtZWQgUGlwZXMiLAkJCS8qIDA2IExBTiBNYW5hZ2VyIE5hbWVkIFBpcGUg Ki8KLSAgICAiWC4yNSIsCQkJCS8qIDA3IFN0cmF0dXMgVk9TIFguMjUgKi8KLSAgICAiTmV0QklP UyIsCQkJCS8qIDA4IElCTSBORVRCSU9TICovCi0gICAgIlN1cGVyTEFUIiwJCQkJLyogMDcgTWVy aWRpYW4gU3VwZXJMQVQgKi8KLSAgICAiRmlsZSIsCQkJCS8qIDEwIEZpbGUgKi8KLSAgICAiQ29t bWFuZCIsCQkJCS8qIDExIFN1YnByb2Nlc3MgKHBpcGUpICovCi0gICAgIkRMTCIsCQkJCS8qIDEy IERMTCBkb2VzIGkvbyAqLwotICAgICJYLjI1IiwJCQkJLyogMTMgSUJNIEFJWExpbmsgWC4yNSAq LwotICAgICJYLjI1IiwJCQkJLyogMTQgSFAtVVggWC4yNSAqLwotICAgICJQVFkiLAkJCQkvKiAx NSBQc2V1ZG90ZXJtaW5hbCAqLwotICAgICJTU0giLAkJCQkvKiAxNiBTU0ggKi8KLSAgICAiPEVS Uk9SPiIsCQkJCS8qIDE3IEluIGNhc2UgbmV3IHR5cGVzIGFyZSBhZGRlZCAqLwotICAgICI8RVJS T1I+IiwJCQkJLyogMTggYnV0IG5vYm9keSByZW1lbWJlcnMgdG8gdXBkYXRlICovCi0gICAgIjxF UlJPUj4iLAkJCQkvKiAxOSB0aGlzIHRhYmxlIC4uLiAqLwotICAgIE5VTEwJCQkJLyogMjAgKi8K LX07Ci1zdGF0aWMgaW50IG5uZXRuYW1lID0gKHNpemVvZihuZXRuYW1lKSAvIHNpemVvZihjaGFy ICopKTsKLQotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQotI2lmZGVmIENLX0FOU0lDCi12b2lkCi1z Y3JlZW5jKGludCBmLCBjaGFyIGMsQ0tfT0ZGX1QgbixjaGFyICpzKQotI2Vsc2UKLUNLVk9JRAot c2NyZWVuYyhmLGMsbixzKQotaW50IGY7ICAgICAgICAgIC8qIGFyZ3VtZW50IGRlc2NyaXB0b3Ig Ki8KLWNoYXIgYzsgICAgICAgICAvKiBhIGNoYXJhY3RlciBvciBzbWFsbCBpbnRlZ2VyICovCi1D S19PRkZfVCBuOyAgICAgLyogYSBsb25nIGludGVnZXIgKi8KLWNoYXIgKnM7ICAgICAgICAvKiBh IHN0cmluZyAqLwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBzY3JlZW5jKCkgKi8gewotI2lm ZGVmIENLX1NTTAotICAgIGV4dGVybiBpbnQgdGxzX2FjdGl2ZV9mbGFnLCBzc2xfYWN0aXZlX2Zs YWc7Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0jaWZkZWYgUkxPR0NPREUKLSAgICBleHRlcm4gaW50 IHR0bnByb3RvOwotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0gICAgc3RhdGljIGludCBxID0gMDsK LSAgICBzdGF0aWMgbG9uZyBmY250ID0gMEw7CQkvKiBOdW1iZXIgb2YgZmlsZXMgdHJhbnNmZXJy ZWQgKi8KLSAgICBzdGF0aWMgQ0tfT0ZGX1QgZnNpeiA9IChDS19PRkZfVCktMTsgLyogQ29weSBv ZiBmaWxlIHNpemUgKi8KLSAgICBzdGF0aWMgQ0tfT0ZGX1QgZmJ5dCA9IDBMOyAvKiBUb3RhbCBm aWxlIGJ5dGVzIG9mIGFsbCBmaWxlcyB0cmFuc2ZlcnJlZCAqLwotICAgIHN0YXRpYyBDS19PRkZf VCBob3dmYXIgPSAwTDsgLyogSG93IG11Y2ggb2YgY3VycmVudCBmaWxlIGhhcyBiZWVuIHhmZXIn ZCAqLwotICAgIHN0YXRpYyBpbnQgIHBjdGxibCA9IDBMOyAgLyogUGVyY2VudCBkb25lIHZzIEJ5 dGVzIHNvIGZhciAqLwotICAgIGxvbmcgY3BzID0gMEw7Ci0KLSAgICBpbnQgbmV0ID0gMDsKLSAg ICBpbnQgeG5ldCA9IDA7Ci0gICAgaW50IGZ0cCA9IDA7Ci0gICAgaW50IGxlbjsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIHN0cmluZyAqLwotICAgIGludCBlcnJvcnMg PSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIEVycm9yIGNvdW50ZXIgKi8KLSAgICBpbnQgeDsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXb3JrZXIgKi8KLQotICAgIGRlYnVnKEYx MDEsInNjcmVlbmMgY2luaXQiLCIiLGNpbml0KTsKLSAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5jIGNl bmR3IiwiIixjZW5kdyk7Ci0KLSAgICBpZiAoIXMpIHMgPSAiIjsgICAgICAgICAgICAgICAgICAg ICAvKiBBbHdheXMgZG8gdGhpcy4gKi8KLQotICAgIGZ0cCA9ICh3aGF0ICYgV19GVFApID8gMSA6 IDA7CS8qIEZUUCBvciBLZXJtaXQgKi8KLSAgICBuZXQgPSBuZXR3b3JrIHx8IGZ0cDsKLSAgICB4 bmV0ID0gZnRwID8gMSA6IG5ldHR5cGU7CQkvKiBORVRfVENQQiA9PSAxICovCi0KLSAgICBpZiAo Y2luaXQgPT0gMCB8fCBjZW5kdyA+IDApIHsgICAgICAvKiBIYW5kbGUgYm9yZGVybGluZSBjYXNl cy4uLiAqLwotICAgICAgICBpZiAoZiA9PSBTQ1JfQ1cpIHsgICAgICAgICAgICAgIC8qIENsb3Nl IHdpbmRvdywgYnV0IGl0J3Mgbm90IG9wZW4gKi8KLSAgICAgICAgICAgIGZ0X3dpbiA9IDA7Ci0g ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZGVidWcoRjExMSwic2NyZWVu YyBBIixzLGYpOwotICAgICAgICBpZiAoZiA9PSBTQ1JfRU0gfHwKLSAgICAgICAgICAgKGYgPT0g U0NSX1BUICYmIGMgPT0gJ0UnKSkgeyAvKiBGYXRhbCBlcnJvciBiZWZvcmUgd2luZG93IG9wZW4g Ki8KLSAgICAgICAgICAgIGNvbm9sbCgiIik7IGNvbm9jKCc/Jyk7IGNvbm9sbChzKTsgcmV0dXJu OyAvKiBSZWd1bGFyIGRpc3BsYXkgKi8KLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoY2luaXQg PT0gMCkgeyAgICAgICAgICAgICAgICAgICAvKiBPbmx5IGNhbGwgaW5pdHNjcigpIG9uY2UgKi8K LQljaGFyICogczsKLQkvKiBDaGVjayB0aGVzZSBub3cgLS0gaWYgdGhleSBhcmUgZGVmaW5lZCBi dXQgbm90IG51bWVyaWMgKi8KLQkvKiB0aGV5IGNhbiBjcmFzaCBjdXJzZXMgKi8KLQlzID0gZ2V0 ZW52KCJMSU5FUyIpOwotCWlmIChzKSBpZiAoIXJkaWdpdHMocykpIHsKLQkgICAgcHJpbnRmKCI/ TElORVMgdmFyaWFibGUgbm90IG51bWVyaWM6IFwiJXNcIi5cbiIscyk7Ci0JICAgIHByaW50Zigi KEZ1bGxzY3JlZW4gZGlzcGxheSBkaXNhYmxlZClcbiIpOwotCSAgICBmZGlzcGxhID0gWFlGRF9T OwotCSAgICByZXR1cm47Ci0JfQotCXMgPSBnZXRlbnYoIkNPTFVNTlMiKTsKLQlpZiAocykgaWYg KCFyZGlnaXRzKHMpKSB7Ci0JICAgIHByaW50ZigiP0NPTFVNTlMgdmFyaWFibGUgbm90IG51bWVy aWM6IFwiJXNcIi5cbiIscyk7Ci0JICAgIHByaW50ZigiKEZ1bGxzY3JlZW4gZGlzcGxheSBkaXNh YmxlZClcbiIpOwotCSAgICBmZGlzcGxhID0gWFlGRF9TOwotCSAgICByZXR1cm47Ci0JfQotICAg ICAgICBjZW5kdyA9IDE7ICAgICAgICAgICAgICAgICAgICAgIC8qIE5ldyB3aW5kb3cgbmVlZHMg cmVwYWludGluZyAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgaWYgKCFpbml0c2NyKCkpIHsg ICAgICAgICAgICAgICAvKiBPb3BzLCBjYW4ndCBpbml0aWFsaXplIHdpbmRvdz8gKi8KLS8qCi0g IEluIGZhY3QsIHRoaXMgZG9lc24ndCBoYXBwZW4uICAibWFuIGN1cnNlcyIgc2F5cyBpbml0c2Ny KCkgaGFsdHMgdGhlCi0gIGVudGlyZSBwcm9ncmFtIGlmIGl0IGZhaWxzLCB3aGljaCBpcyB0cnVl IG9uIHRoZSBzeXN0ZW1zIHdoZXJlIEkndmUKLSAgdGVzdGVkIGl0LiAgSXQgd2lsbCBmYWlsIGlm IHlvdXIgdGVybWluYWwgdHlwZSBpcyBub3Qga25vd24gdG8gaXQuCi0gIFRoYXQncyB3aHkgU0VU IEZJTEUgRElTUExBWSBGVUxMU0NSRUVOIGNhbGxzIHRnZXRlbnQoKSB0byBtYWtlIHN1cmUgdGhl Ci0gIHRlcm1pbmFsIHR5cGUgaXMga25vd24gYmVmb3JlIGFsbG93aW5nIGEgY3Vyc2VzIGRpc3Bs YXkuCi0qLwotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIkNVUlNFUyBJTklUU0NSIEVSUk9S XHJcbiIpOwotICAgICAgICAgICAgZmRpc3BsYSA9IFhZRkRfUzsgICAgICAgICAgIC8qIEZhbGwg YmFjayB0byBDUlQgZGlzcGxheSAqLwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVs c2UgewotICAgICAgICAgICAgY2luaXQrKzsgICAgICAgICAgICAgICAgICAgIC8qIFdpbmRvdyBp bml0aWFsaXplZCBvayAqLwotICAgICAgICAgICAgZGVidWcoRjEwMCwiQ1VSU0VTIElOSVRTQ1Ig T0siLCIiLDApOwotICAgICAgICB9Ci0jZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogU2F2ZSBzb21lIG1lbW9yeS4gKi8KLSNpZmRlZiBDS19ORVdURVJNCi0gICAgICAg IC8qIChGcm9tIEFuZHkgRnlmZSA8YW5keUB2bHNpLmNzLmNhbHRlY2guZWR1PikKLSAgICAgICAg ICAgU3lzdGVtIFYgY3Vyc2VzIHNlZW1zIHRvIHJlc2VydmUgdGhlIHJpZ2h0IHRvIGFsdGVyIHRo ZSBidWZmZXJpbmcKLSAgICAgICAgICAgb24gdGhlIG91dHB1dCBGSUxFKiB3aXRob3V0IHJlc3Rv cmluZyBpdC4gIEZvcnR1bmF0ZWx5IFN5c3RlbSBWCi0gICAgICAgICAgIGN1cnNlcyBwcm92aWRl cyBuZXd0ZXJtKCksIGFuIGFsdGVybmF0aXZlIHRvIGluaXRzY3IoKSwgdGhhdAotICAgICAgICAg ICBhbGxvd3MgdXMgdG8gc3BlY2lmeSBleHBsaWNpdGx5IHRoZSB0ZXJtaW5hbCB0eXBlIGFuZCBp bnB1dCBhbmQKLSAgICAgICAgICAgb3V0cHV0IEZJTEUgcG9pbnRlcnMuICBUaHVzIHdlIGR1cGxp Y2F0ZSBzdGRvdXQsIGFuZCBsZXQgY3Vyc2VzCi0gICAgICAgICAgIGhhdmUgdGhlIGNvcHkuICBU aGUgb3JpZ2luYWwgcmVtYWlucyB1bmFsdGVyZWQuICBVbmZvcnR1bmF0ZWx5LAotICAgICAgICAg ICBuZXd0ZXJtKCkgc2VlbXMgdG8gYmUgcGFydGljdWxhciB0byBTeXN0ZW0gVi4KLSAgICAgICAg Ki8KLSAgICAgICAgcyA9IGdldGVudigiVEVSTSIpOwotICAgICAgICBpZiAoY2tfZmQgPCAwKSB7 Ci0gICAgICAgICAgICBja19mZCA9IGR1cChmaWxlbm8oc3Rkb3V0KSk7Ci0gICAgICAgICAgICBj a19zdGRvdXQgPSAoY2tfZmQgPj0gMCkgPyAoRklMRSAqKWZkb3Blbihja19mZCwgInciKSA6IE5V TEw7Ci0gICAgICAgIH0KLSAgICAgICAgZGVidWcoRjEwMCwic2NyZWVuYyBuZXd0ZXJtLi4uIiwi IiwwKTsKLQotLyogTk9URTogSXQgbWlnaHQgYmUgbmVjZXNzYXJ5IHRvIGRvIHRoaXMgd2l0aCBz dGRpbiB0b28hICovCi0vKiBUaGlzIHdvdWxkIGhhdmUgYmVlbiB0aGUgY2FzZSBpbiBGcmVlQlNE IDQuMSBidXQgdGhleSBmaXhlZCB0aGUgKi8KLS8qIHByb2JsZW0gYnkgcmVzdG9yaW5nIHRoZSBi dWZmZXJpbmcgb2Ygc3RkaW4gYmVmb3JlIHRoZSBmaW5hbCByZWxlYXNlLiAqLwotLyogKEJ1dCBU LkUuIERpY2tleSBzYXlzIHN0ZGluIGlzIG5vdCBidWZmZXJlZD8pICovCi0KLSAgICAgICAgaWYg KGNrX3N0ZG91dCA9PSBOVUxMIHx8IG5ld3Rlcm0ocywgY2tfc3Rkb3V0LCBzdGRpbikgPT0gMCkg ewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICJGdWxsc2NyZWVu IGRpc3BsYXkgbm90IHN1cHBvcnRlZCBmb3IgdGVybWluYWwgdHlwZTogJXNcclxuIixzKTsKLSAg ICAgICAgICAgIGZkaXNwbGEgPSBYWUZEX1M7ICAgICAgICAgICAvKiBVc2UgQ1JUIGluc3RlYWQg Ki8KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBkZWJ1ZyhGMTAwLCJz Y3JlZW5jIG5ld3Rlcm0gb2siLCIiLDApOwotI2Vsc2UKLSAgICAgICAgZGVidWcoRjEwMCwic2Ny ZWVuIGNhbGxpbmcgaW5pdHNjciIsIiIsMCk7Ci0gICAgICAgIGluaXRzY3IoKTsgICAgICAgICAg ICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBjdXJzZXMuICovCi0gICAgICAgIGRlYnVnKEYxMDAs InNjcmVlbiBpbml0c2NyIG9rIiwiIiwwKTsKLSNlbmRpZiAvKiBDS19ORVdURVJNICovCi0gICAg ICAgIGNpbml0Kys7ICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgY3Vyc2VzIHdh cyBpbml0aWFsaXplZC4gKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgfQotICAgIGZ0X3dp biA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdpbmRvdyBpcyBvcGVuICovCi0gICAg aWYgKHJlcGFpbnQpIHsKLSNpZmRlZiBDS19XUkVGUkVTSAotLyoKLSAgVGhpcyB0b3RhbGx5IHJl cGFpbnRzIHRoZSBzY3JlZW4sIGp1c3Qgd2hhdCB3ZSB3YW50LCBidXQgd2UgY2FuIG9ubHkKLSAg ZG8gdGhpcyB3aXRoIHJlYWwgY3Vyc2VzLCBhbmQgdGhlbiBvbmx5IGlmIGNsZWFyb2soKSBhbmQg d3JlZnJlc2goKSBhcmUKLSAgcHJvdmlkZWQgaW4gdGhlIGN1cnNlcyBsaWJyYXJ5LgotKi8KLSNp ZmRlZiBPUzIKLSAgICAgICAgUmVzdG9yZUNtZE1vZGUoKTsKLSNlbHNlCi0jaWZkZWYgUU5YCi0j aWZuZGVmIFFOWDE2Ci0gICAgICAgIGNsZWFyb2soc3Rkc2NyLCAxKTsgICAgICAgICAgICAgLyog UU5YIGRvZXNuJ3QgaGF2ZSBjdXJzY3IgKi8KLSNlbmRpZiAvKiBRTlgxNiAqLwotICAgICAgICB3 cmVmcmVzaChzdGRzY3IpOwotI2Vsc2UKLSAgICAgICAgd3JlZnJlc2goY3Vyc2NyKTsKLSNlbmRp ZiAvKiBRTlggKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbHNlICAvKiBObyBDS19XUkVGUkVTSCAq LwotLyoKLSAgS2VybWl0J3MgZG8taXQteW91cnNlbGYgbWV0aG9kLCB3b3JrcyB3aXRoIGFsbCB0 eXBlcyBvZiBmdWxsc2NyZWVuCi0gIHN1cHBvcnQsIGJ1dCBkb2VzIG5vdCByZXBhaW50IGFsbCB0 aGUgZmllbGRzLiAgRm9yIGV4YW1wbGUsIHRoZSBmaWxlbmFtZQotICBpcyBsb3N0LCBiZWNhdXNl IGl0IGFycml2ZXMgYXQgYSBjZXJ0YWluIHRpbWUgYW5kIG5ldmVyIGNvbWVzIGFnYWluLCBhbmQK LSAgS2VybWl0IHByZXNlbnRseSBkb2VzIG5vdCBzYXZlIGl0IGFueXdoZXJlLiAgTWFraW5nIHRo aXMgbWV0aG9kIHdvcmsgZm9yCi0gIGFsbCBmaWVsZHMgd291bGQgYmUgYSByYXRoZXIgbWFqb3Ig cmVjb2RpbmcgdGFzaywgZHVwbGljYXRpbmcgd2hhdCBjdXJzZXMKLSAgYWxyZWFkeSBkb2VzLCBh bmQgd291bGQgYWRkIGEgbG90IG9mIGNvbXBsZXhpdHkgYW5kIHN0b3JhZ2Ugc3BhY2UuCi0qLwot ICAgICAgICBjZW5kdyA9IDE7Ci0jZW5kaWYgLyogQ0tfV1JFRlJFU0ggKi8KLSAgICAgICAgcmVw YWludCA9IDA7Ci0gICAgfQotICAgIGlmIChjZW5kdykgeyAgICAgICAgICAgICAgICAgICAgICAg IC8qIGVuZHdpbigpIHdhcyBjYWxsZWQgcHJldmlvdXNseSAqLwotI2lmZGVmIFZNUwotICAgICAg ICBpbml0c2NyKCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIChvciBzaG91bGQgaGF2ZSBiZWVu ISkgKi8KLSAgICAgICAgY2xlYXIoKTsKLSAgICAgICAgdG91Y2h3aW4oc3Rkc2NyKTsKLSAgICAg ICAgcmVmcmVzaCgpOwotI2Vsc2UKLSNpZmRlZiBRTlgKLS8qCi0gIEluIFFOWCwgaWYgd2UgZG9u J3QgY2FsbCBpbml0c2NyKCkgaGVyZSB3ZSBjb3JlIGR1bXAuCi0gIEkgZG9uJ3QgaGF2ZSBhbnkg UU5YIGN1cnNlcyBkb2N1bWVudGF0aW9uLCBidXQgb3RoZXIgY3Vyc2VzIG1hbnVhbHMKLSAgc2F5 IHRoYXQgaW5pdHNjcigpIHNob3VsZCBiZSBjYWxsZWQgb25seSBvbmNlIHBlciBhcHBsaWNhdGlv biwgYW5kCi0gIGV4cGVyaWVuY2Ugc2hvd3MgdGhhdCBvbiBvdGhlciBzeXN0ZW1zLCBjYWxsaW5n IGluaXRzY3IoKSBoZXJlIGdlbmVyYWxseQotICByZXN1bHRzIGluIGEgY29yZSBkdW1wLgotKi8K LSAgICAgICAgZGVidWcoRjEwMCwic2NyZWVuYyByZS1jYWxsaW5nIGluaXRzY3IgUU5YIiwiIiww KTsKLSAgICAgICAgaW5pdHNjcigpOwotICAgICAgICBjbGVhcigpOwotICAgICAgICByZWZyZXNo KCk7Ci0jaWZkZWYgQ09NTUVOVAotLyoKLSAgQnV0IGV2ZW4gc28sIHNlY29uZCBhbmQgc3Vic2Vx dWVudCBjdXJzZXMgZGlzcGxheXMgYXJlIG1lc3NlZCB1cC4KLSAgQ2FsbGluZyB0b3VjaHdpbiwg cmVmcmVzaCwgZXRjLCBkb2Vzbid0IG1ha2UgYW55IGRpZmZlcmVuY2UuCi0qLwotICAgICAgICBk ZWJ1ZyhGMTAwLCJzY3JlZW5jIGNhbGxpbmcgdG91Y2h3aW4gUU5YIiwiIiwwKTsKLSAgICAgICAg dG91Y2h3aW4oc3Rkc2NyKTsKLSAgICAgICAgZGVidWcoRjEwMCwic2NyZWVuYyBjYWxsaW5nIHJl ZnJlc2ggUU5YIiwiIiwwKTsKLSAgICAgICAgcmVmcmVzaCgpOwotI2VuZGlmIC8qIENPTU1FTlQg Ki8KLQotI2Vsc2UgLyogQWxsIG90aGVycy4uLiAqLwotICAgICAgICBkZWJ1ZyhGMTAwLCJzY3Jl ZW5jIGNhbGxpbmcgY2xlYXIiLCIiLDApOwotICAgICAgICBjbGVhcigpOwotICAgICAgICBkZWJ1 ZyhGMTAwLCJzY3JlZW5jIGNsZWFyIG9rIiwiIiwwKTsKLSNlbmRpZiAvKiBRTlggKi8KLSNlbmRp ZiAvKiBWTVMgKi8KLSAgICAgICAgZGVidWcoRjEwMCwic2NyZWVuYyBzZXR1cCBvayIsIiIsMCk7 Ci0gICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmMgZG9pbmcgZmlyc3QgbW92ZSIsIiIsMCk7Ci0g ICAgICAgIG1vdmUoQ1dfQkFOLDApOyAgICAgICAgICAgICAgICAgLyogRGlzcGxheSB0aGUgYmFu bmVyICovCi0gICAgICAgIGRlYnVnKEYxMTAsInNjcmVlbmMgbXlob3N0IixteWhvc3QsMCk7Ci0j aWZkZWYgVENQU09DS0VUCi0gICAgICAgIGRlYnVnKEYxMTAsInNjcmVlbmMgbXlpcGFkZHIiLG15 aXBhZGRyLDApOwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2lmZGVmIEhQVVgxMDEwCi0gICAg ICAgIGRlYnVnKEYxMDAsInNjcmVlbmMgY2FsbGluZyBmaXJzdCBwcmludHcuLi4iLCIiLDApOwot LyogUmlnaHQgaGVyZSBpcyB3aGVyZSBIUC1VWCAxMC4xMCBsaWJ4Y3Vyc2UuMSBSZXYgNzYuMjAg aGFuZ3MuLi4gKi8KLSNlbmRpZiAvKiBIUFVYMTAxMCAqLwotICAgICAgICBpZiAobXlob3N0WzBd KSB7Ci0jaWZkZWYgVENQU09DS0VUCi0gICAgICAgICAgICBpZiAoIW15aXBhZGRyWzBdCi0jaWZk ZWYgT1MyCi0gICAgICAgICAgICAgICAgIC8qIFdlIG5lZWQgdG8gcGVyZm9ybSB0aGlzIHRlc3Qg YmVjYXVzZSBvbiBub24tVENQL0lQICovCi0gICAgICAgICAgICAgICAgIC8qIHN5c3RlbXMgdGhl IGNhbGwgdG8gZ2V0bG9jYWxpcGFkZHIoKSByZXN1bHRzIGluIGEgICovCi0gICAgICAgICAgICAg ICAgIC8qIEROUyBMb29rdXAgd2hpY2ggdGFrZXMgc2V2ZXJhbCBtaW51dGVzIHRvIHRpbWUgb3V0 ICovCi0gICAgICAgICAgICAgICAgICYmIG5ldCAmJgotICAgICAgICAgICAgICAgICAoeG5ldCA9 PSBORVRfVENQQSB8fCB4bmV0ID09IE5FVF9UQ1BCCi0jaWZkZWYgU1NIQlVJTFRJTgotICAgICAg ICAgICAgICAgICAgfHwgeG5ldCA9PSBORVRfU1NICi0jZW5kaWYgLyogU1NIQlVJTFRJTiAqLwot ICAgICAgICAgICAgICAgICAgKQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgICAgICAgICAp Ci0gICAgICAgICAgICAgIGdldGxvY2FsaXBhZGRyKCk7Ci0gICAgICAgICAgICBpZiAobXlpcGFk ZHJbMF0gJiYgc3RyY21wKChjaGFyICopbXlob3N0LChjaGFyICopbXlpcGFkZHIpKQotICAgICAg ICAgICAgICBwcmludHcoIiVzLCAlcyBbJXNdIix2ZXJzaW8sKGNoYXIgKilteWhvc3QsKGNoYXIg KilteWlwYWRkcik7Ci0gICAgICAgICAgICBlbHNlCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0g ICAgICAgICAgICAgIHByaW50dygiJXMsICVzIix2ZXJzaW8sKGNoYXIgKilteWhvc3QpOwotICAg ICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHJpbnR3KCIlcyIsdmVyc2lvKTsKLSAgICAgICAg fQotI2lmZGVmIEhQVVgxMDEwCi0gICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmMgZmlyc3QgcHJp bnR3IHJldHVybnMiLCIiLDApOwotI2VuZGlmIC8qIEhQVVgxMDEwICovCi0gICAgICAgIG1vdmUo Q1dfRElSLDMpOwotICAgICAgICBwcmludHcoIkN1cnJlbnQgRGlyZWN0b3J5OiAlcyIsemd0ZGly KCkpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgIEt1aVNldFByb3BlcnR5KCBL VUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0RJUiwgKGxvbmcpIHpndGRpcigpICk7Ci0jZW5k aWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICBpZiAobmV0KSB7Ci0gICAg ICAgICAgICBtb3ZlKENXX0xJTiw4KTsKLSAgICAgICAgICAgIHByaW50dygiTmV0d29yayBIb3N0 OiAlcyIsCi0jaWZkZWYgTkVXRlRQCi0JCSAgIGZ0cCA/IChmdHBfaG9zdCA/IGZ0cF9ob3N0IDog Iih1bmtub3duKSIpIDoKLSNlbmRpZiAvKiBORVdGVFAgKi8KLQkJICAgdHRuYW1lCi0JCSAgICk7 Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtb3ZlKENXX0xJTiwwKTsKLSAgICAgICAg ICAgIHByaW50dygiQ29tbXVuaWNhdGlvbiBEZXZpY2U6ICVzIix0dG5hbWUpOwotICAgICAgICB9 Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9G SUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfTElOLCAobG9uZykgdHRuYW1lICk7Ci0jZW5kaWYgLyog Szk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotCi0gICAgICAgIGlmIChuZXQpIHsKLSAgICAgICAg ICAgIG1vdmUoQ1dfU1BELDgpOwotICAgICAgICAgICAgcHJpbnR3KCJOZXR3b3JrIFR5cGU6ICIp OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbW92ZShDV19TUEQsMSk7Ci0gICAgICAg ICAgICBwcmludHcoIkNvbW11bmljYXRpb24gU3BlZWQ6ICIpOwotICAgICAgICB9Ci0gICAgICAg IG1vdmUoQ1dfU1BELDIyKTsgICAgICAgICAgICAgICAgLyogU2VyaWFsIHNwZWVkIG9yIG5ldHdv cmsgdHlwZSAqLwotICAgICAgICBpZiAobmV0KSB7Ci0jaWZkZWYgTkVUQ09OTgotCSAgICBpbnQg c2VjdXJlID0gMDsKLQkgICAgY2hhciAqIHhuYW1lOwotCSAgICBpZiAoeG5ldCA+IG5uZXRuYW1l KQotCSAgICAgIHhuYW1lID0gIltFUlJPUl0iOwotCSAgICBlbHNlCi0JICAgICAgeG5hbWUgPSBu ZXRuYW1lW3huZXRdOwotI2lmZGVmIE5FV0ZUUAotICAgICAgICAgICAgaWYgKGZ0cCkgewotCQlp ZiAoZnRwaXNzZWN1cmUoKSkKLQkJICBzZWN1cmUgPSAxOwotCSAgICB9IGVsc2UKLSNlbmRpZiAv KiBORVdGVFAgKi8KLQkgICAgICBpZiAoMAotI2lmZGVmIFNTSEJVSUxUSU4KLSAgICAgICAgICAg ICAgICB8fCBJU19TU0goKQotI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KLSNpZmRlZiBDS19FTkNS WVBUSU9OCi0gICAgICAgICAgICAgICAgfHwgY2tfdG5fZW5jcnlwdGluZygpICYmIGNrX3RuX2Rl Y3J5cHRpbmcoKQotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNpZmRlZiBDS19TU0wKLSAg ICAgICAgICAgICAgICB8fCB0bHNfYWN0aXZlX2ZsYWcgfHwgc3NsX2FjdGl2ZV9mbGFnCi0jZW5k aWYgLyogQ0tfU1NMICovCi0jaWZkZWYgUkxPR0NPREUKLSNpZmRlZiBDS19LRVJCRVJPUwotI2lm ZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgICAgICAgICB8fCB0dG5wcm90byA9PSBOUF9FSzRM T0dJTiB8fCB0dG5wcm90byA9PSBOUF9FSzVMT0dJTgotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04g Ki8KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0gICAg ICAgICAgICAgICAgICkgewotCQlzZWN1cmUgPSAxOwotCSAgICB9Ci0JICAgIGlmIChzZWN1cmUp IHsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgICAgIGNoYXIgYnVmWzMw XTsKLSAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwiJXMgKFNFQ1VSRSkiLHhuYW1lKTsKLSAg ICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfU1BELAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChsb25nKSBidWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgICAgICBw cmludHcoIiVzIChTRUNVUkUpIix4bmFtZSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg ICAgICAgICAgIHByaW50dygiJXMiLHhuYW1lKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1Rwot ICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19TUEQsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGxvbmcpIHhuYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICB9 Ci0jZWxzZQotICAgICAgICAgICAgcHJpbnR3KCIobmV0d29yaykiKTsKLSNpZmRlZiBLVUkKLSNp Zm5kZWYgSzk1RwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfU1BELAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGxvbmcpICIobmV0d29yaykiCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSNlbmRpZiAvKiBO RVRDT05OICovCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoc3BlZWQgPCAwTCkK LSAgICAgICAgICAgICAgc3BlZWQgPSB0dGdzcGQoKTsKLSAgICAgICAgICAgIGlmIChzcGVlZCA+ IDBMKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNwZWVkID09IDg4ODApIHsKLSAgICAgICAgICAg ICAgICAgICAgcHJpbnR3KCI3NS8xMjAwIik7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAg ICAgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19TUEQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiNzUvMTIwMCIKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJ ICovCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhciBz cGVlZGJ1Zls2NF0gOwotICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHNwZWVkYnVmLCAiJWxk Iiwgc3BlZWQpOwotICAgICAgICAgICAgICAgICAgICBwcmludHcoIiVzIixzcGVlZGJ1Zik7Ci0j aWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVy dHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChsb25nKSBDV19TUEQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25n KSBzcGVlZGJ1ZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2VuZGlm IC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByaW50dygidW5rbm93biIpOwotI2lmZGVm IEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJ TEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1NQ RCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIih1bmtub3duKSIKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRp ZiAvKiBLVUkgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBtb3ZlKENXX1BB UiwxNCk7Ci0gICAgICAgIHByaW50dygiUGFyaXR5OiAlcyIsZnRwID8gIm5vbmUiIDogcGFybmFt KChjaGFyKXBhcml0eSkpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgIEt1aVNl dFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAobG9u ZykgQ1dfUEFSLAotICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgcGFybmFtKChjaGFyKXBh cml0eSkKLSAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5k aWYgLyogS1VJICovCi0jaWZkZWYgQ0tfVElNRVJTCi0gICAgICAgIGlmICgvKiBydHRmbGcgJiYg Ki8gcHJvdG9jb2wgPT0gUFJPVE9fSykgewotICAgICAgICAgICAgbW92ZShDV19UTU8sIDkpOyBw cmludHcoIlJUVC9UaW1lb3V0OiIpOyB9Ci0jZW5kaWYgLyogQ0tfVElNRVJTICovCi0gICAgICAg IG1vdmUoQ1dfVFlQLDExKTsgcHJpbnR3KCJGaWxlIFR5cGU6Iik7Ci0gICAgICAgIG1vdmUoQ1df U0laLDExKTsgcHJpbnR3KCJGaWxlIFNpemU6Iik7Ci0gICAgICAgIG1vdmUoQ1dfUENELCA4KTsK LSAgICAgICAgY2xydG9lb2woKTsKLSAgICAgICAgcGN0bGJsID0gKHdoYXQgJiBXX1NFTkQpOwot ICAgICAgICBwcmludHcoIiVzOiIsIHBjdGxibCA/ICJQZXJjZW50IERvbmUiIDogIkJ5dGVzIFNv IEZhciIpOwotCi0jaWZkZWYgWFlaX0lOVEVSTkFMCi0gICAgICAgIG1vdmUoQ1dfQkFSLCAxKTsK LSAgICAgICAgcHJpbnR3KCIlMTBzIFByb3RvY29sOiIsIGZ0cCA/ICJGVFAiIDogcHRhYltwcm90 b2NvbF0ucF9uYW1lKTsKLSNlbmRpZiAvKiBYWVpfSU5URVJOQUwgKi8KLSNpZmRlZiBDS19QQ1Rf QkFSCi0gICAgICAgIGlmICh0aGVybW9tZXRlcikgewotICAgICAgICAgICAgb2xkcGN0ID0gcGN0 ID0gMDsKLSAgICAgICAgICAgIG1vdmUoQ1dfQkFSLDIyKTsKLSAgICAgICAgICAgIHByaW50dygi ICAgIC4uLjEwLi4uMjAuLi4zMC4uLjQwLi4uNTAuLi42MC4uLjcwLi4uODAuLi45MC4uMTAwIik7 Ci0gICAgICAgICAgICBtb3ZlKENXX0JBUiwyMis1Nik7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBD S19QQ1RfQkFSICovCi0gICAgICAgIG1vdmUoQ1dfVFIsICAxKTsgcHJpbnR3KCJFc3RpbWF0ZWQg VGltZSBMZWZ0OiIpOwotICAgICAgICBtb3ZlKENXX0NQLCAgMik7IHByaW50dygiVHJhbnNmZXIg UmF0ZSwgQ1BTOiIpOwotICAgICAgICBtb3ZlKENXX1dTLCAgOCk7IHByaW50dygiV2luZG93IFNs b3RzOiVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwcm90b2NvbCA9PSBQ Uk9UT19LKSAmJiAhZnRwKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiIDog IiBOL0EiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIG1vdmUo Q1dfUFQsICA5KTsgcHJpbnR3KCJQYWNrZXQgVHlwZToiKTsKLSAgICAgICAgaWYgKGZ0cCB8fCBw cm90b2NvbCAhPSBQUk9UT19LKSB7Ci0JICAgIG1vdmUoQ1dfUFQsMjIpOwotICAgICAgICAgICAg cHJpbnR3KCIlcyIsICJOL0EiKTsKLSAgICAgICAgICAgIG1vdmUoQ1dfUEMsICAxMSk7IHByaW50 dygiSS9PIENvdW50OiIpOwotICAgICAgICAgICAgbW92ZShDV19QTCwgIDEwKTsgcHJpbnR3KCJJ L08gTGVuZ3RoOiIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbW92ZShDV19QQywg IDgpOyBwcmludHcoIlBhY2tldCBDb3VudDoiKTsKLSAgICAgICAgICAgIG1vdmUoQ1dfUEwsICA3 KTsgcHJpbnR3KCJQYWNrZXQgTGVuZ3RoOiIpOwotICAgICAgICB9Ci0jaWZuZGVmIENPTU1FTlQK LSAgICAgICAgbW92ZShDV19QUiwgIDkpOyBwcmludHcoIkVycm9yIENvdW50OiIpOwotI2Vsc2UK LSAgICAgICAgbW92ZShDV19QUiwgIDIpOyBwcmludHcoIlBhY2tldCBSZXRyeSBDb3VudDoiKTsK LSNlbmRpZgotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgbW92ZShDV19QQiwgIDIpOyBwcmludHco IlBhY2tldCBCbG9jayBDaGVjazoiKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIG1v dmUoQ1dfRVJSLDEwKTsgcHJpbnR3KCJMYXN0IEVycm9yOiIpOwotICAgICAgICBtb3ZlKENXX01T RywgOCk7IHByaW50dygiTGFzdCBNZXNzYWdlOiIpOwotCWlmICh4ZnJtc2cpIHsKLQkgICAgbW92 ZShDV19NU0csIDIyKTsgcHJpbnR3KCIlcyIseGZybXNnKTsKLQkgICAgbWFrZXN0cigmeGZybXNn LE5VTEwpOwotCX0KLSAgICAgICAgbW92ZShDV19JTlQsIDApOwotICAgICAgICBpZiAoIXhmcmlu dCkgewotICAgICAgICAgICAgcHJpbnR3KCIoVHJhbnNmZXIgaW50ZXJydXB0aW9uIGlzIGRpc2Fi bGVkKSIpOwotICAgICAgICB9IGVsc2UgewotI2lmZGVmIENLX05FRURfU0lHCi0gICAgICAgICAg ICBwcmludHcoCi0iPCVzPlggdG8gY2FuY2VsIGZpbGUsIDwlcz5aIHRvIGNhbmNlbCBncm91cCwg PCVzPjxDUj4gdG8gcmVzZW5kIGxhc3QgcGFja2V0IiwKLSAgICAgICAgICAgICAgICAgICBkYmNo cihlc2NhcGUpLCBkYmNocihlc2NhcGUpLCBkYmNocihlc2NhcGUpCi0gICAgICAgICAgICAgICAg ICAgKTsKLSAgICAgICAgICAgIG1vdmUoQ1dfSU5UICsgMSwgMCk7Ci0gICAgICAgICAgICBwcmlu dHcoCi0iPCVzPkUgdG8gc2VuZCBFcnJvciBwYWNrZXQsIF5DIHRvIHF1aXQgaW1tZWRpYXRlbHks IDwlcz5MIHRvIHJlZnJlc2ggc2NyZWVuLiIsCi0gICAgICAgICAgICAgICAgICAgZGJjaHIoZXNj YXBlKSwgZGJjaHIoZXNjYXBlKQotICAgICAgICAgICAgICAgICAgICk7Ci0jZWxzZSAvKiAhQ0tf TkVFRF9TSUcgKi8KLSAgICAgICAgICAgIG1vdmUoQ1dfSU5ULCAwKTsKLSNpZmRlZiBPUzIKLSAg ICAgICAgICAgIGlmIChwcm90b2NvbCA9PSBQUk9UT19LKSB7Ci0gICAgICAgICAgICAgICAgcHJp bnR3KAotIlggdG8gY2FuY2VsIGZpbGUsIFogdG8gY2FuY2VsIGdyb3VwLCA8RW50ZXI+IHRvIHJl c2VuZCBsYXN0IHBhY2tldCwiCi0gICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAg ICB9Ci0jZWxzZSAvKiAhT1MyICovCi0jaWZkZWYgVk1TICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogSW4gVk1TIGF2b2lkIGJvdHRvbSBsaW5lICovCi0gICAgICAgICAgICBwcmludHco Ci0iWDogQ2FuY2VsIHRoaXMgZmlsZTsgRTogQ2FuY2VsIHRyYW5zZmVyOyBeQzogUXVpdCBub3c7 IF5XOiBSZWZyZXNoIHNjcmVlbi4iCi0gICAgICAgICAgICAgICAgICAgKTsKLSNlbHNlCi0gICAg ICAgICAgICBwcmludHcoCi0iWCB0byBjYW5jZWwgZmlsZSwgWiB0byBjYW5jZWwgZ3JvdXAsIDxD Uj4gdG8gcmVzZW5kIGxhc3QgcGFja2V0LCIKLSAgICAgICAgICAgICAgICAgICApOwotI2VuZGlm IC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZuZGVmIFZNUwotICAgICAgICAgICAg bW92ZShDV19JTlQgKyAxLCAwKTsKLSAgICAgICAgICAgIGlmIChwcm90b2NvbCA9PSBQUk9UT19L KSB7Ci0gICAgICAgICAgICAgICAgcHJpbnR3KAotIkUgdG8gc2VuZCBFcnJvciBwYWNrZXQsIF5D IHRvIHF1aXQgaW1tZWRpYXRlbHksIF5MIHRvIHJlZnJlc2ggc2NyZWVuLiIKLSAgICAgICAgICAg ICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJp bnR3KCJeQyB0byBjYW5jZWwgZmlsZSB0cmFuc2Zlci4iKTsKLSAgICAgICAgICAgIH0KLSNlbmRp ZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBDS19ORUVEX1NJRyAqLwotICAgICAgICB9Ci0gICAgICAg IHJlZnJlc2goKTsKLSAgICAgICAgY2VuZHcgPSAwOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJT Q1JFRU5DIHN3aXRjaCIsIiIsZik7Ci0gICAgZGVidWcoRjAwMCwiU0NSRUVOQyBjIiwiIixjKTsK LSAgICBkZWJ1ZyhGMTAxLCJTQ1JFRU5DIG4iLCIiLG4pOwotCi0gICAgbGVuID0gc3RybGVuKHMp OyAgICAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIGFyZ3VtZW50IHN0cmluZyAqLwotICAg IHN3aXRjaCAoZikgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhhbmRsZSBvdXIgZnVuY3Rp b24gY29kZSAqLwotICAgICAgY2FzZSBTQ1JfRk46ICAgICAgICAgICAgICAgICAgICAgIC8qIEZp bGVuYW1lICovCi0gICAgICAgIG9sZHBjdCA9IHBjdCA9IDBMOyAgICAgICAgICAgICAgLyogUmVz ZXQgcGVyY2VudHMgKi8KLSNpZmRlZiBHRlRJTUVSCi0gICAgICAgIGd0diA9IChDS0ZMT0FUKSAt MS4wOwotICAgICAgICAvKiBvbGRndHYgPSAoQ0tGTE9BVCkgLTEuMDsgKi8KLSNlbHNlCi0gICAg ICAgIGd0diA9IC0xTDsKLSAgICAgICAgLyogb2xkZ3R2ID0gLTFMOyAqLwotI2VuZGlmIC8qIEdG VElNRVIgKi8KLSAgICAgICAgb2xkd2luID0gLTE7Ci0gICAgICAgIGZzaXogPSAoQ0tfT0ZGX1Qp LTE7CQkvKiBJbnZhbGlkYXRlIHByZXZpb3VzIGZpbGUgc2l6ZSAqLwotICAgICAgICBtb3ZlKENX X1BDRCwyMik7ICAgICAgICAgICAgICAgIC8qIEVyYXNlIHBlcmNlbnQgZG9uZSBmcm9tIGxhc3Qg dGltZSAqLwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgIEt1aVNldFByb3BlcnR5 KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BDRCwgKGxvbmcpIDAgKTsKLSAgICAgICAg S3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRkZDLCAobG9uZykg MCApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgY2xydG9l b2woKTsKLSAgICAgICAgbW92ZShDV19TSVosMjIpOyAgICAgICAgICAgICAgICAvKiBFcmFzZSBm aWxlIHNpemUgZnJvbSBsYXN0IHRpbWUgKi8KLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAg ICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19TSVosIChs b25nKSAwICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICBj bHJ0b2VvbCgpOwotICAgICAgICBtb3ZlKENXX0VSUiwyMik7ICAgICAgICAgICAgICAgIC8qIEFu ZCBsYXN0IGVycm9yIG1lc3NhZ2UgKi8KLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAg ICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19FUlIsIChsb25n KSAiIiApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgY2xy dG9lb2woKTsKLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgU1RSRUFNSU5HCi0gICAgICAgIGlmIChw cm90b2NvbCA9PSBQUk9UT19LICYmIHN0cmVhbW9rKSB7Ci0gICAgICAgICAgICBtb3ZlKENXX0JB UiwgMSk7Ci0jaWZkZWYgWFlaX0lOVEVSTkFMCi0gICAgICAgICAgICBwcmludHcoIiAgIEtlcm1p dCBTVFJFQU1JTkc6Iik7Ci0jZWxzZQotICAgICAgICAgICAgcHJpbnR3KCIgICAgICAgICAgU1RS RUFNSU5HOiIpOwotI2VuZGlmIC8qIFhZWl9JTlRFUk5BTCAqLwotICAgICAgICB9Ci0jZW5kaWYg LyogU1RSRUFNSU5HICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgICAgIGlmICh3aGF0 ICYgV19TRU5EKSB7CQkvKiBJZiB3ZSdyZSBzZW5kaW5nLi4uICovCi0jaWZkZWYgTkVXRlRQCi0J ICAgIGlmICh3aGF0ICYgV19GVFApIHsJCS8qIEZUUCAqLwotICAgICAgICAgICAgICAgIG1vdmUo Q1dfTkFNLDEwKTsKLSAgICAgICAgICAgICAgICBwcmludHcoIiAgIEZUUCBQVVQ6Iik7Ci0JICAg IH0gZWxzZQotI2VuZGlmIC8qIE5FV0ZUUCAqLwotI2lmZGVmIENLX1JFU0VORAotICAgICAgICAg ICAgc3dpdGNoIChzZW5kbW9kZSkgewkJLyogS2VybWl0ICovCi0gICAgICAgICAgICAgIGNhc2Ug U01fUkVTRU5EOgotICAgICAgICAgICAgICAgIG1vdmUoQ1dfTkFNLDEwKTsKLSAgICAgICAgICAg ICAgICBwcmludHcoIiBSRVNFTkRJTkc6Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgbW92ZShDV19OQU0sMTApOwotICAg ICAgICAgICAgICAgIHByaW50dygiICAgU0VORElORzoiKTsKLSAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICBtb3ZlKENXX05BTSwxMCk7Ci0g ICAgICAgICAgICBwcmludHcoIiAgIFNFTkRJTkc6Iik7Ci0jZW5kaWYgLyogQ0tfUkVTRU5EICov Ci0KLSAgICAgICAgfSBlbHNlIGlmICh3aGF0ICYgV19SRUNWKSB7CS8qIElmIHdlJ3JlIHJlY2Vp dmluZy4uLiAqLwotI2lmZGVmIE5FV0ZUUAotCSAgICBpZiAod2hhdCAmIFdfRlRQKSB7CQkvKiBG VFAgKi8KLSAgICAgICAgICAgICAgICBtb3ZlKENXX05BTSwxMCk7Ci0gICAgICAgICAgICAgICAg cHJpbnR3KCIgICBGVFAgR0VUOiIpOwotCSAgICB9IGVsc2UgewotI2VuZGlmIC8qIE5FV0ZUUCAq LwotCQltb3ZlKENXX05BTSwxMCk7Ci0JCXByaW50dygiIFJFQ0VJVklORzoiKTsKLSNpZmRlZiBO RVdGVFAKLQkgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHdoYXQgPT0gKFdfRlRQfFdfRlRfREVM RSkpIHsKLQkJbW92ZShDV19OQU0sMTApOwotCQlwcmludHcoIkZUUCBERUxFVEU6Iik7Ci0jZW5k aWYgLyogTkVXRlRQICovCi0gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAg LyogSWYgd2UgZG9uJ3Qga25vdy4uLiAqLwotICAgICAgICAgICAgbW92ZShDV19OQU0sMTApOyAg ICAgICAgICAgIC8qIChzaG91bGQgbmV2ZXIgc2VlIHRoaXMpICovCi0gICAgICAgICAgICBwcmlu dHcoIiBGaWxlIE5hbWU6Iik7Ci0gICAgICAgIH0KLSAgICAgICAgbW92ZShDV19OQU0sMjIpOyAg ICAgICAgICAgICAgICAvKiBEaXNwbGF5IHRoZSBmaWxlbmFtZSAqLwotICAgICAgICBpZiAobGVu ID4gNTcpIHsKLSAgICAgICAgICAgIHByaW50dygiJS41NXMuLiIscyk7Ci0gICAgICAgICAgICBs ZW4gPSA1NzsKLSAgICAgICAgfSBlbHNlIHByaW50dygiJXMiLHMpOwotI2lmZGVmIEtVSQotI2lm bmRlZiBLOTVHCi0gICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxv bmcpIENXX05BTSwgKGxvbmcpIHMgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJ ICovCi0gICAgICAgIHEgPSBsZW47ICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVtZW1iZXIg bmFtZSBsZW5ndGggZm9yIGxhdGVyICovCi0gICAgICAgIGNscnRvZW9sKCk7Ci0gICAgICAgIHNj cmZ0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRGlzcGxheSBmaWxlIHR5cGUgKGNhbiBj aGFuZ2UpICovCi0gICAgICAgIHJlZnJlc2goKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgU2F2ZUNt ZE1vZGUoMCwgMCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgIHJldHVybjsKLQotICAgICAg Y2FzZSBTQ1JfQU46ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgYXMtbmFtZSAqLwotICAg ICAgICBpZiAocSArIGxlbiArIDQgPCA1OCkgeyAgICAgICAgIC8qIFdpbGwgZml0ICovCi0gICAg ICAgICAgICBtb3ZlKENXX05BTSwgMjIgKyBxKTsKLSAgICAgICAgICAgIHByaW50dygiID0+ICVz IixzKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgS3VpU2V0UHJvcGVy dHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfTkFNLCAobG9uZykgcyApOwotI2VuZGlm IC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBUb28gbG9uZyAqLwotICAgICAgICAgICAgbW92ZShDV19OQU0sIDIy KTsgICAgICAgICAgIC8qIE92ZXJ3cml0ZSBwcmV2aW91cyBuYW1lICovCi0gICAgICAgICAgICBx ID0gMDsKLSAgICAgICAgICAgIGlmIChsZW4gKyA0ID4gNTcpIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiB3ZzE1ICovCi0gICAgICAgICAgICAgICAgcHJpbnR3KCIgPT4gJS41 MXMuLiIscyk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogd2cxNSAqLwotICAgICAgICAgICAg ICAgIGxlbiA9IDUzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdn MTUgKi8KLSAgICAgICAgICAgIH0gZWxzZSBwcmludHcoIiA9PiAlcyIscyk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiB3ZzE1ICovCi0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAg ICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX05BTSwg KGxvbmcpIHMgICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAg ICB9Ci0gICAgICAgIHEgKz0gbGVuICsgNDsgICAgICAgICAgICAgICAgICAgLyogUmVtZW1iZXIg aG9yaXpvbnRhbCBwb3NpdGlvbiAqLwotICAgICAgICBjbHJ0b2VvbCgpOwotICAgICAgICByZWZy ZXNoKCk7Ci0jaWZkZWYgT1MyCi0gICAgICAgIFNhdmVDbWRNb2RlKDAsIDApOwotI2VuZGlmIC8q IE9TMiAqLwotICAgICAgICByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NSX0ZTOiAgICAgICAgICAg ICAgICAgICAgICAvKiBGaWxlIHNpemUgKi8KLSAgICAgICAgZnNpeiA9IG47Ci0gICAgICAgIG1v dmUoQ1dfU0laLDIyKTsKLSAgICAgICAgaWYgKGZzaXogPiAoQ0tfT0ZGX1QpLTEpIHsKLSNpZmRl ZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxF X1RSQU5TRkVSLCAobG9uZykgQ1dfU0laLCAobG9uZykgbiApOwotI2VuZGlmIC8qIEs5NUcgKi8K LSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgIHByaW50dygiJXMiLGNrZnN0b2EobikpOwot ICAgICAgICB9Ci0JaWYgKGZzaXogPT0gLTJMKSB7Ci0JICAgIHByaW50dygiUE9TU0lCTFkgRVhD RUVEUyBMT0NBTCBGSUxFIFNJWkUgTElNSVQiKTsKLQl9Ci0gICAgICAgIGNscnRvZW9sKCk7Ci0j aWZkZWYgQ09NTUVOVAotICAgICAgICBtb3ZlKENXX1BDRCwgOCk7Ci0gICAgICAgIGlmIChmc2l6 ID4gKENLX09GRl9UKS0xKSB7CS8qIFB1dCB1cCBwZXJjZW50IGxhYmVsICovCi0gICAgICAgICAg ICBwY3RsYmwgPSAxOwotCSAgICBjbHJ0b2VvbCgpOwotICAgICAgICAgICAgcHJpbnR3KCJQZXJj ZW50IERvbmU6Iik7Ci0gICAgICAgIH0KLSNlbHNlCi0JbW92ZShDV19QQ0QsIDgpOwotCWNscnRv ZW9sKCk7Ci0gICAgICAgIGlmIChmc2l6ID4gKENLX09GRl9UKS0xKSB7CS8qIFB1dCB1cCBwZXJj ZW50IGxhYmVsICovCi0gICAgICAgICAgICBwY3RsYmwgPSAxOwotICAgICAgICAgICAgcHJpbnR3 KCJQZXJjZW50IERvbmU6Iik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwY3RsYmwg PSAwOwotICAgICAgICAgICAgcHJpbnR3KCJCeXRlcyBTbyBGYXI6Iik7Ci0JfQotI2VuZGlmIC8q IENPTU1FTlQgKi8KLSAgICAgICAgY2xydG9lb2woKTsKLSAgICAgICAgc2NyZnQoKTsgICAgICAg ICAgICAgICAgICAgICAgICAvKiBGaWxlIHR5cGUgKi8KLSAgICAgICAgcmVmcmVzaCgpOwotI2lm ZGVmIE9TMgotICAgICAgICBTYXZlQ21kTW9kZSgwLCAwKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAg ICAgICAgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9QVDogICAgICAgICAgICAgICAgICAgICAg LyogUGFja2V0IHR5cGUgb3IgcHNldWRvdHlwZSAqLwotICAgICAgICBpZiAoc3BhY2tldHMgPCA1 KSB7Ci0gICAgICAgICAgICBleHRlcm4gaW50IHN5c2luZGV4OwotICAgICAgICAgICAgZXh0ZXJu IHN0cnVjdCBzeXNkYXRhIHN5c2lkbGlzdFtdOwotICAgICAgICAgICAgLyogVGhpbmdzIHRoYXQg d29uJ3QgY2hhbmdlIGFmdGVyIHRoZSA0dGggcGFja2V0ICovCi0gICAgICAgICAgICBtb3ZlKENX X1BBUiwyMik7Ci0gICAgICAgICAgICBwcmludHcoIiVzIixwYXJuYW0oKGNoYXIpcGFyaXR5KSk7 Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBL VUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19Q QVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgcGFybmFtKChjaGFyKXBhcml0 eSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2Vu ZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgY2xydG9lb2woKTsKLSNpZmRlZiBDT01NRU5UCi0g ICAgICAgICAgICBtb3ZlKENXX1BCLCAyMik7ICAgICAgICAgICAgLyogQmxvY2sgY2hlY2sgb24g dGhpcyBwYWNrZXQgKi8KLSAgICAgICAgICAgIGlmIChiY3R1ID09IDQpCi0gICAgICAgICAgICAg IHByaW50dygiQiIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBwcmludHcoIiVk IixiY3R1KTsKLSAgICAgICAgICAgIGNscnRvZW9sKCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwot ICAgICAgICAgICAgaWYgKAotI2lmZGVmIE5FV0ZUUAotCQkoZnRwICYmIChzcGFja2V0cyA9PSAx IHx8IHJwYWNrZXRzID09IDEpKSB8fAotI2VuZGlmIC8qIE5FV0ZUUCAqLwotCQlzcGFja2V0cyA9 PSA0Ci0JCSkgewotICAgICAgICAgICAgICAgIG1vdmUoQ1dfTElOLDgpOwotICAgICAgICAgICAg ICAgIGlmICgKLSNpZmRlZiBORVdGVFAKLQkJICAgIGZ0cCB8fAotI2VuZGlmIC8qIE5FV0ZUUCAq LwotCQkgICAgKChwcm90b2NvbCA9PSBQUk9UT19LKSAmJiAoc3lzaW5kZXggPiAtMSkpCi0JCSAg ICApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5ldCkgewotICAgICAgICAgICAgICAgICAg ICAgICAgbW92ZShDV19MSU4sOCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludHcoIk5l dHdvcmsgSG9zdDogJXMgKCVzKSIsCi0jaWZkZWYgTkVXRlRQCi0JCQkgICAgICAgZnRwID8gKGZ0 cF9ob3N0ID8gZnRwX2hvc3QgOiAiIikgOgotI2VuZGlmIC8qIE5FV0ZUUCAqLwotCQkJICAgICAg IHR0bmFtZSwKLSNpZmRlZiBORVdGVFAKLQkJCSAgICAgICBmdHAgPyBmdHBfc3J2dHlwIDoKLSNl bmRpZiAvKiBORVdGVFAgKi8KLQkJCSAgICAgICBzeXNpZGxpc3Rbc3lzaW5kZXhdLnNpZF9uYW1l Ci0JCQkgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgIG1vdmUoQ1dfTElOLDApOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJp bnR3KCJDb21tdW5pY2F0aW9uIERldmljZTogJXMgKHJlbW90ZSBob3N0IGlzICVzKSIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHR0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3lzaWRsaXN0W3N5c2luZGV4XS5zaWRfbmFtZQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNs cnRvZW9sKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0j aWZkZWYgQ0tfVElNRVJTCi0gICAgICAgIGlmICgvKiBydHRmbGcgJiYgKi8gcHJvdG9jb2wgPT0g UFJPVE9fSykgewotICAgICAgICAgICAgbG9uZyB4eDsKLSAgICAgICAgICAgIGlmICgKLSNpZmRl ZiBTVFJFQU1JTkcKLSAgICAgICAgICAgICAgICBzdHJlYW1pbmcgJiYgb2xkd2luICE9IC0yCi0j ZWxzZQotICAgICAgICAgICAgICAgIDAKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLSAgICAgICAg ICAgICAgICApIHsKLSAgICAgICAgICAgICAgICBtb3ZlKENXX1RNTywgMjIpOwotICAgICAgICAg ICAgICAgIHByaW50dygiMDAgLyAwMCIpOwotICAgICAgICAgICAgICAgIGNscnRvZW9sKCk7Ci0g ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHh4ID0gKHJ0dGRlbGF5ICsgNTAw KSAvIDEwMDA7Ci0gICAgICAgICAgICAgICAgaWYgKHh4ICE9IG9sZHJ0dCB8fCByY3Z0aW1vICE9 IG9sZHRpbSkgewotICAgICAgICAgICAgICAgICAgICBtb3ZlKENXX1RNTywgMjIpOwotICAgICAg ICAgICAgICAgICAgICBwcmludHcoIiUwMmxkIC8gJTAyZCIsIHh4LCByY3Z0aW1vKTsKLSAgICAg ICAgICAgICAgICAgICAgb2xkcnR0ID0geHg7Ci0gICAgICAgICAgICAgICAgICAgIG9sZHRpbSA9 IHJjdnRpbW87Ci0gICAgICAgICAgICAgICAgICAgIGNscnRvZW9sKCk7Ci0gICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfVElNRVJTICovCi0K LSAgICAgICAgeCA9ICh3aGF0ICYgV19SRUNWKSA/ICAgICAgICAgIC8qIFBhY2tldCBsZW5ndGgg Ki8KLSAgICAgICAgICBycGt0bCsocHJvdG9jb2w9PVBST1RPX0s/MTowKSA6Ci0gICAgICAgICAg ICBzcGt0bDsKLSAgICAgICAgaWYgKHggIT0gb2xkbGVuKSB7ICAgICAgICAgICAgICAvKiBCdXQg b25seSBpZiBpdCBjaGFuZ2VkLiAqLwotICAgICAgICAgICAgbW92ZShDV19QTCwgMjIpOwotICAg ICAgICAgICAgcHJpbnR3KCIlZCIseCk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAg ICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BMLCAo bG9uZykgeCApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAg ICAgIGNscnRvZW9sKCk7Ci0gICAgICAgICAgICBvbGRsZW4gPSB4OwotICAgICAgICB9Ci0gICAg ICAgIG1vdmUoQ1dfUEMsIDIyKTsgICAgICAgICAgICAgICAgLyogUGFja2V0IGNvdW50IChhbHdh eXMpLiAqLwotCi0gICAgICAgIHByaW50dygiJWQiLCAod2hhdCAmIFdfUkVDVikgPyBycGFja2V0 cyA6IHNwYWNrZXRzKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICBLdWlTZXRQ cm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19QQywgKGxvbmcpIHNwYWNrZXRz ICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICBjbHJ0b2Vv bCgpOwotCi0gICAgICAgIGlmIChwcm90b2NvbCA9PSBQUk9UT19LICYmICFmdHApIHsgLyogV2lu ZG93IHNsb3RzICovCi0gICAgICAgICAgICBjaGFyIHdzWzE2XTsKLSAgICAgICAgICAgIGludCBm bGFnOwotICAgICAgICAgICAgZmxhZyA9IDA7Ci0jaWZkZWYgU1RSRUFNSU5HCi0gICAgICAgICAg ICBpZiAoc3RyZWFtaW5nKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG9sZHdpbiAhPSAtMikgewot ICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHdzLCJTVFJFQU1JTkciKTsKLSAgICAgICAgICAg ICAgICAgICAgZmxhZyA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIG9sZHdpbiA9IC0yOwotICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIFNUUkVBTUlORyAq LwotICAgICAgICAgICAgICBpZiAod2N1ciAhPSBvbGR3aW4pIHsKLSAgICAgICAgICAgICAgICAg IHNwcmludGYod3MsICIlZCBvZiAlZCIsIHdjdXIgPCAxID8gMSA6IHdjdXIsIHdzbG90bik7Ci0g ICAgICAgICAgICAgICAgICBmbGFnID0gMTsKLSAgICAgICAgICAgICAgICAgIG9sZHdpbiA9IHdj dXI7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmbGFnKSB7Ci0gICAgICAgICAg ICAgICAgbW92ZShDV19XUywgMjIpOwotICAgICAgICAgICAgICAgIHByaW50dygiJXMiLCB3cyk7 Ci0gICAgICAgICAgICAgICAgY2xydG9lb2woKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1Rwot ICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcp IENXX1dTLCAobG9uZykgd3MgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICov Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZXJyb3JzID0gcmV0cmFucyArIGNy dW5jaGVkICsgdGltZW91dHM7Ci0gICAgICAgIGlmIChlcnJvcnMgIT0gb2xkdHJ5KSB7ICAgICAg ICAgLyogUmV0cnkgY291bnQsIGlmIGNoYW5nZWQgKi8KLSAgICAgICAgICAgIG1vdmUoQ1dfUFIs IDIyKTsKLSAgICAgICAgICAgIHByaW50dygiJWQiLGVycm9ycyk7Ci0jaWZkZWYgS1VJCi0jaWZu ZGVmIEs5NUcKLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwg KGxvbmcpIENXX1BSLCAobG9uZykgZXJyb3JzICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlm IC8qIEtVSSAqLwotICAgICAgICAgICAgY2xydG9lb2woKTsKLSAgICAgICAgICAgIG9sZHRyeSA9 IGVycm9yczsKLSAgICAgICAgfQotCS8qIFNlbmRlcidzIHBhY2tldCB0eXBlICovCi0gICAgICAg IGlmICghZnRwICYmIChjICE9IG9sZHR5cCAmJiBjICE9ICdZJyAmJiBjICE9ICdOJykpIHsKLSAg ICAgICAgICAgIGNoYXIgdHlwZVsyXTsKLSAgICAgICAgICAgIHNwcmludGYodHlwZSwgIiVjIixj KTsKLSAgICAgICAgICAgIG1vdmUoQ1dfUFQsMjIpOwotICAgICAgICAgICAgcHJpbnR3KCIlcyIs IHR5cGUpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICBLdWlTZXRQcm9w ZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19QVCwgKGxvbmcpIHR5cGUgKTsKLSNl bmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICBjbHJ0b2VvbCgp OwotICAgICAgICAgICAgb2xkdHlwID0gYzsKLSAgICAgICAgfQotICAgICAgICBzd2l0Y2ggKGMp IHsgICAgICAgICAgICAgICAgICAgIC8qIE5vdyBoYW5kbGUgc3BlY2lmaWMgcGFja2V0IHR5cGVz ICovCi0gICAgICAgICAgY2FzZSAnUyc6ICAgICAgICAgICAgICAgICAgICAgLyogQmVnaW5uaW5n IG9mIHRyYW5zZmVyICovCi0gICAgICAgICAgICBmY250ID0gZmJ5dCA9IDBMOyAgICAgICAgICAg LyogQ2xlYXIgY291bnRlcnMgKi8KLSNpZmRlZiBHRlRJTUVSCi0gICAgICAgICAgICBndHYgPSAt MS4wOwotI2Vsc2UgLyogR0ZUSU1FUiAqLwotICAgICAgICAgICAgZ3R2ID0gLTFMOyAgICAgICAg ICAgICAgICAgIC8qIEFuZCBvbGQvbmV3IHRoaW5ncy4uLiAqLwotI2VuZGlmIC8qIEdGVElNRVIg Ki8KLSAgICAgICAgICAgIG9sZHBjdCA9IHBjdCA9IDBMOwotICAgICAgICAgICAgYnJlYWs7Ci0K LSAgICAgICAgICBjYXNlICdaJzogICAgICAgICAgICAgICAgICAgICAvKiBvciBFT0YgKi8KLSAg ICAgICAgICAgIGRlYnVnKEYxMDEsInNjcmVlbmMgU0NSX1BUIFogcGt0bnVtIiwiIixuKTsKLSAg ICAgICAgICAgIGRlYnVnKEYxMDEsInNjcmVlbmMgU0NSX1BUIFogb2xkcGN0IiwiIixvbGRwY3Qp OwotICAgICAgICAgICAgZGVidWcoRjEwMSwic2NyZWVuYyBTQ1JfUFQgWiBwY3QiLCIiLHBjdCk7 Ci0gICAgICAgICAgY2FzZSAnRCc6ICAgICAgICAgICAgICAgICAgICAgLyogRGF0YSBwYWNrZXQg Ki8KLSAgICAgICAgICAgIGlmIChmc2l6ID4gMEwpIHsgICAgICAgICAgICAvKiBTaG93IHBlcmNl bnQgZG9uZSBpZiBrbm93biAqLwotICAgICAgICAgICAgICAgIG9sZHBjdCA9IHBjdDsgICAgICAg ICAgIC8qIFJlbWVtYmVyIHByZXZpb3VzIHBlcmNlbnQgKi8KLSAgICAgICAgICAgICAgICBob3dm YXIgPSBmZmM7Ci0jaWZkZWYgQ0tfUkVTRU5ECi0gICAgICAgICAgICAgICAgaWYgKHdoYXQgJiBX X1NFTkQpCS8qIEFjY291bnQgZm9yIFBTRU5EIG9yIFJFU0VORCAqLwotICAgICAgICAgICAgICAg ICAgaG93ZmFyICs9IHNlbmRzdGFydDsKLSAgICAgICAgICAgICAgICBlbHNlIGlmICh3aGF0ICYg V19SRUNWKQotICAgICAgICAgICAgICAgICAgaG93ZmFyICs9IHJzX2xlbjsKLSNlbmRpZiAvKiBD S19SRVNFTkQgKi8KLSAgICAgICAgICAgICAgICAvKiBQZXJjZW50IGRvbmUsIHRvIGJlIGRpc3Bs YXllZC4uLiAqLwotICAgICAgICAgICAgICAgIGlmIChjID09ICdaJykgewotICAgICAgICAgICAg ICAgICAgICBpZiAoIWRpc2NhcmQgJiYgIWN4c2VlbiAmJiAhY3pzZWVuKSBwY3QgPSAxMDBMOwot ICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgcGN0ID0gKGZzaXogPiA5 OUwpID8gKGhvd2ZhciAvIChmc2l6IC8gMTAwTCkpIDogMEw7Ci0gICAgICAgICAgICAgICAgaWYg KHBjdCA+IDEwMEwgfHwgICAgICAgLyogQWxsb3cgZm9yIGV4cGFuc2lvbiBhbmQgKi8KLSAgICAg ICAgICAgICAgICAgICAob2xkcGN0ID09IDk5TCAmJiBwY3QgPCAwTCkpIC8qIG90aGVyIGJvdW5k YXJ5IGNvbmRpdGlvbnMgKi8KLSAgICAgICAgICAgICAgICAgIHBjdCA9IDEwMEw7Ci0gICAgICAg ICAgICAgICAgaWYgKHBjdCAhPSBvbGRwY3QpICAgICAgLyogT25seSBkbyB0aGlzIDEwMCB0aW1l cyBwZXIgZmlsZSAqLwotICAgICAgICAgICAgICAgICAgdXBkcGN0KG9sZHBjdCwgcGN0KTsKLSAg ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbW92ZShDV19QQ0QsMjIpOwotICAg ICAgICAgICAgICAgIHByaW50dygiJXMiLCBja2ZzdG9hKGZmYykpOwotICAgICAgICAgICAgfQot I2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlf RklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0ZGQywgKGxvbmcpIGhvd2Zhcik7Ci0jZW5kaWYgLyog Szk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgY3BzID0gc2hvY3BzKChpbnQp IHBjdCwgZnNpeiwgaG93ZmFyKTsKLSAgICAgICAgICAgIC8qIG9sZF90ciA9IHNob2V0bChvbGRf dHIsIGNwcywgZnNpeiwgaG93ZmFyKTsgKi8KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg ICAgY2FzZSAnJSc6ICAgICAgICAgICAgICAgICAgICAgLyogVGltZW91dHMsIHJldHJhbnNtaXNz aW9ucyAqLwotICAgICAgICAgICAgY3BzID0gc2hvY3BzKChpbnQpIHBjdCwgZnNpeiwgaG93ZmFy KTsKLSAgICAgICAgICAgIC8qIG9sZF90ciA9IHNob2V0bChvbGRfdHIsIGNwcywgZnNpeiwgaG93 ZmFyKTsgKi8KLQotICAgICAgICAgICAgZXJyb3JzID0gcmV0cmFucyArIGNydW5jaGVkICsgdGlt ZW91dHM7Ci0gICAgICAgICAgICBpZiAoZXJyb3JzICE9IG9sZHRyeSkgeyAgICAgLyogRXJyb3Ig Y291bnQsIGlmIGNoYW5nZWQgKi8KLSAgICAgICAgICAgICAgICBtb3ZlKENXX1BSLCAyMik7Ci0g ICAgICAgICAgICAgICAgcHJpbnR3KCIlZCIsZXJyb3JzKTsKLSAgICAgICAgICAgICAgICBjbHJ0 b2VvbCgpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICAgICAgS3VpU2V0 UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGxvbmcpIENXX1BSLCAobG9uZykgZXJyb3JzCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgIG9sZHRyeSA9IGVycm9yczsKLSAgICAgICAgICAgICAg ICBpZiAocykgaWYgKCpzKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1vdmUoQ1dfRVJSLDIyKTsK LSAgICAgICAgICAgICAgICAgICAgcHJpbnR3KCIlcyIscyk7Ci0gICAgICAgICAgICAgICAgICAg IGNscnRvZW9sKCk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgICAgICAg ICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19FUlIsIChsb25n KSBzKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICB9 Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgJ0UnOiAgICAgICAgICAgICAg ICAgICAgIC8qIEVycm9yIHBhY2tldCAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgIG1v dmUoQ1dfRVJSLDIyKTsgICAgICAgICAgICAvKiBQcmludCBpdHMgZGF0YSBmaWVsZCAqLwotICAg ICAgICAgICAgaWYgKCpzKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnR3KCIlcyIscyk7Ci0jaWZk ZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJ X0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19FUlIsIChsb25nKSBzICk7Ci0jZW5kaWYgLyogSzk1 RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2xydG9l b2woKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICBmY250ID0gZmJ5dCA9IDBM OyAgICAgICAgICAgLyogU28gbm8gYnl0ZXMgZm9yIHRoaXMgZmlsZSAqLwotICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgY2FzZSAnUSc6ICAgICAgICAgICAgICAgICAgICAgLyogQ3J1bmNo ZWQgcGFja2V0ICovCi0gICAgICAgICAgICBjcHMgPSBzaG9jcHMoKGludCkgcGN0LCBmc2l6LCBo b3dmYXIpOwotICAgICAgICAgICAgLyogb2xkX3RyID0gc2hvZXRsKG9sZF90ciwgY3BzLCBmc2l6 LCBob3dmYXIpOyAqLwotICAgICAgICAgICAgbW92ZShDV19FUlIsMjIpOwotICAgICAgICAgICAg cHJpbnR3KCJEYW1hZ2VkIFBhY2tldCIpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAg ICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgIChsb25nKSBDV19FUlIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAo bG9uZykgIkRhbWFnZWQgUGFja2V0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNl bmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICBjbHJ0b2VvbCgp OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAncSc6ICAgICAgICAgICAgICAg ICAgICAgLyogQ3RybC1DIG9yIGNvbm5lY3Rpb24gbG9zdCAqLwotICAgICAgICAgICAgbW92ZShD V19NU0csMjIpOwotCSAgICBjbHJ0b2VvbCgpOwotICAgICAgICAgICAgaWYgKCFzKSBzID0gIiI7 Ci0gICAgICAgICAgICBwcmludHcoIiVzIiwgKnMgPyBzIDogIlVzZXIgaW50ZXJydXB0aW9uIG9y IGNvbm5lY3Rpb24gbG9zdCIpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAg ICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIChsb25nKSBDV19NU0csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykg cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5k aWYgLyogS1VJICovCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICdUJzogICAg ICAgICAgICAgICAgICAgICAvKiBUaW1lb3V0ICovCi0gICAgICAgICAgICBjcHMgPSBzaG9jcHMo KGludCkgcGN0LCBmc2l6LCBob3dmYXIpOwotICAgICAgICAgICAgLyogb2xkX3RyID0gc2hvZXRs KG9sZF90ciwgY3BzLCBmc2l6LCBob3dmYXIpOyAqLwotICAgICAgICAgICAgbW92ZShDV19FUlIs MjIpOwotICAgICAgICAgICAgcHJpbnR3KCJUaW1lb3V0ICVkIHNlYyIscmN2dGltbyk7Ci0jaWZk ZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxF X1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX0VSUiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiVGltZW91dCIKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAg ICAgICAgICAgY2xydG9lb2woKTsKLSAgICAgICAgICAgIGVycm9ycyA9IHJldHJhbnMgKyBjcnVu Y2hlZCArIHRpbWVvdXRzOwotICAgICAgICAgICAgaWYgKGVycm9ycyAhPSBvbGR0cnkpIHsgICAg IC8qIEVycm9yIGNvdW50LCBpZiBjaGFuZ2VkICovCi0gICAgICAgICAgICAgICAgbW92ZShDV19Q UiwgMjIpOwotICAgICAgICAgICAgICAgIHByaW50dygiJWQiLGVycm9ycyk7Ci0jaWZkZWYgS1VJ Ci0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9U UkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfUFIsIChs b25nKSBlcnJvcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2VuZGlmIC8q IEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgICAgICBjbHJ0b2VvbCgpOwot ICAgICAgICAgICAgICAgIG9sZHRyeSA9IGVycm9yczsKLSAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIE90 aGVycywgZG8gbm90aGluZyAqLwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg ICAgcmVmcmVzaCgpOwotI2lmZGVmIE9TMgotICAgICAgICBTYXZlQ21kTW9kZSgwLCAwKTsKLSNl bmRpZiAvKiBPUzIgKi8KLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9TVDogICAg ICAgICAgICAgICAgICAgICAgLyogRmlsZSB0cmFuc2ZlciBzdGF0dXMgKi8KLSAgICAgICAgZGVi dWcoRjEwMSwic2NyZWVuYyBTQ1JfU1QgYyIsIiIsYyk7Ci0gICAgICAgIGRlYnVnKEYxMDEsInNj cmVlbmMgU0NSX1NUIHN1Y2Nlc3MiLCIiLHN1Y2Nlc3MpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJz Y3JlZW5jIFNDUl9TVCBjeHNlZW4iLCIiLGN4c2Vlbik7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAg ICBtb3ZlKENXX1BDRCwyMik7ICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSBwZXJjZW50IGRvbmUg Ki8KLSAgICAgICAgaWYgKGMgPT0gU1RfT0spIHsgICAgICAgICAgICAgICAvKiBPSywgcHJpbnQg MTAwICUgKi8KLSAgICAgICAgICAgIGlmIChwY3RsYmwpCi0gICAgICAgICAgICAgIHVwZHBjdChv bGRwY3QsMTAwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcHJpbnR3KCIlcyIs IGNrZnN0b2EoZmZjKSk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgIEt1 aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRkZDLCAobG9uZykgZmZj KTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICBwY3Qg PSAxMDA7Ci0gICAgICAgICAgICBvbGRwY3QgPSAwOwotICAgICAgICB9IGVsc2UgaWYgKGZzaXog PiAwTCkgICAgICAgICAgIC8qIE5vdCBPSywgdXBkYXRlIGZpbmFsIHBlcmNlbnQgKi8KLS8qCi0g IFRoZSBlbHNlIHBhcnQgd3JpdGVzIGFsbCBvdmVyIHRoZSBzY3JlZW4gLS0gaG93ZmFyIGFuZC9v ciBmc2l6IGhhdmUKLSAgYmVlbiByZXNldCBhcyBhIGNvbnNlcXVlbmNlIG9mIHRoZSBub3QtT0tu ZXNzIG9mIHRoZSB0cmFuc2Zlci4KLSovCi0gICAgICAgICAgaWYgKHBjdGxibCkKLSAgICAgICAg ICAgIHVwZHBjdChvbGRwY3QsIChob3dmYXIgKiAxMDBMKSAvIGZzaXopOwotICAgICAgICBjbHJ0 b2VvbCgpOwotI2Vsc2UKLSAgICAgICAgaWYgKGMgPT0gU1RfT0spIHsgICAgICAgICAgICAgICAv KiBPSywgcHJpbnQgMTAwICUgKi8KLSAgICAgICAgICAgIG1vdmUoQ1dfUENELDIyKTsgICAgICAg ICAgICAvKiBVcGRhdGUgcGVyY2VudCBkb25lICovCi0gICAgICAgICAgICBpZiAocGN0bGJsKSB7 Ci0JCWlmIChvbGRwY3QgPT0gMCkJLyogU3dpdGNoaW5nIGZyb20gImJ5dGVzIHNvIGZhciIgKi8K LQkJICBjbHJ0b2VvbCgpOwkJLyogdG8gInBlcmNlbnQgZG9uZSIuLi4gKi8KLQkJdXBkcGN0KG9s ZHBjdCwxMDApOwotCSAgICB9IGVsc2UKLSAgICAgICAgICAgICAgcHJpbnR3KCIlcyIsIGNrZnN0 b2EoZmZjKSk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgIEt1aVNldFBy b3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRkZDLCAobG9uZykgZmZjKTsKLSNl bmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAg ICAgICAgcGN0ID0gMTAwOwotICAgICAgICAgICAgb2xkcGN0ID0gMDsKLSNlbmRpZiAvKiBDT01N RU5UICovCi0gICAgICAgICAgICBjbHJ0b2VvbCgpOwotICAgICAgICB9Ci0jZW5kaWYgLyogQ09N TUVOVCAqLwotCi0jaWZkZWYgQ09NTUVOVAotLyogTm8sIGxlYXZlIGl0IHRoZXJlIHNvIHRoZXkg Y2FuIHJlYWQgaXQgKi8KLSAgICAgICAgbW92ZShDV19NU0csMjIpOyAgICAgICAgICAgICAgICAv KiBSZW1vdmUgYW55IHByZXZpb3VzIG1lc3NhZ2UgKi8KLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1 RwotICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19N U0csIChsb25nKSAiIiApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAg ICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAg ICAgICBtb3ZlKENXX1RSLCAyMik7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAg S3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfVFIsIChsb25nKSAi IiApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgY2xydG9l b2woKTsgcmVmcmVzaCgpOwotCi0gICAgICAgIHN3aXRjaCAoYykgeyAgICAgICAgICAgICAgICAg ICAgLyogUHJpbnQgbmV3IHN0YXR1cyBtZXNzYWdlICovCi0gICAgICAgICAgY2FzZSBTVF9PSzog ICAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXIgT0sgKi8KLSAgICAgICAgICAgIGZjbnQrKzsg ICAgICAgICAgICAgICAgICAgICAvKiBDb3VudCB0aGlzIGZpbGUgKi8KLQkgICAgaWYgKHdoYXQg PT0gKFdfRlRQfFdfRlRfREVMRSkpIHsKLQkJbW92ZShDV19NU0csMjIpOwotCQljbHJ0b2VvbCgp OwotCQlwcmludHcoIkRlbGV0ZSBPSyIpOwotCSAgICB9IGVsc2UgewotCQlmYnl0ICs9IGZmYzsK LQkJbW92ZShDV19NU0csMjIpOwotCQljbHJ0b2VvbCgpOwotCQlwcmludHcoIlRyYW5zZmVyIE9L Iik7Ci0JICAgIH0KLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgS3VpU2V0 UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAo bG9uZykgQ1dfTVNHLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICJUcmFuc2Zl ciBPSyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYgLyogSzk1RyAqLwot I2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOwotICAg ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgY2FzZSBTVF9ESVNDOiAgICAgICAgICAgICAg ICAgLyogRGlzY2FyZGVkICovCi0gICAgICAgICAgICBtb3ZlKENXX0VSUiwyMik7Ci0gICAgICAg ICAgICBwcmludHcoIkZpbGUgZGlzY2FyZGVkIik7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcK LSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX0VSUiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgIChsb25nKSAiRmlsZSBkaXNjYXJkZWQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAp OwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSNpZmRlZiBDT01NRU5UCi0g ICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAg ICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg ICAgICAgIGNhc2UgU1RfSU5UOiAgICAgICAgICAgICAgICAgIC8qIEludGVycnVwdGVkICovCi0g ICAgICAgICAgICBtb3ZlKENXX0VSUiwyMik7Ci0gICAgICAgICAgICBwcmludHcoIlRyYW5zZmVy IGludGVycnVwdGVkIik7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgIEt1 aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGxvbmcpIENXX0VSUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiVHJh bnNmZXIgaW50ZXJydXB0ZWQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2VuZGlm IC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAg ICBwY3QgPSBvbGRwY3QgPSAwOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgIGNs cnRvZW9sKCk7IHJlZnJlc2goKTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGNh c2UgU1RfU0tJUDogICAgICAgICAgICAgICAgIC8qIFNraXBwZWQgKi8KLSAgICAgICAgICAgIG1v dmUoQ1dfRVJSLDIyKTsKLQkgICAgaWYgKG4gPiAwICYmIG4gPCBuc2tyZWFzb24pCi0JICAgICAg cHJpbnR3KCJGaWxlIHNraXBwZWQgKCVzKSIsc2tyZWFzb25bbl0pOwotCSAgICBlbHNlCi0JICAg ICAgcHJpbnR3KCJGaWxlIHNraXBwZWQiKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAg ICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAobG9uZykgQ1dfRVJSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg KGxvbmcpICJGaWxlIHNraXBwZWQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2Vu ZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAg ICAgICBwY3QgPSBvbGRwY3QgPSAwOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAg IGNscnRvZW9sKCk7IHJlZnJlc2goKTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAg IGNhc2UgU1RfRVJSOiAgICAgICAgICAgICAgICAgIC8qIEVycm9yIG1lc3NhZ2UgKi8KLSAgICAg ICAgICAgIG1vdmUoQ1dfRVJSLDIyKTsKLSAgICAgICAgICAgIGlmICghcykgcyA9IChjaGFyICop ZXBrdG1zZzsKLSAgICAgICAgICAgIHByaW50dygiJXMiLHMpOwotI2lmZGVmIEtVSQotI2lmbmRl ZiBLOTVHCi0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChs b25nKSBDV19FUlIsIChsb25nKSBzICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtV SSAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7Ci0jZW5k aWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOwotICAg ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgY2FzZSBTVF9SRUZVOiAgICAgICAgICAgICAg ICAgLyogUmVmdXNlZCAqLwotICAgICAgICAgICAgbW92ZShDV19FUlIsMjIpOwotICAgICAgICAg ICAgaWYgKCpzKSB7Ci0gICAgICAgICAgICAgICAgY2hhciBlcnJidWZbNjRdIDsKLSAgICAgICAg ICAgICAgICBzcHJpbnRmKCBlcnJidWYsICJSZWZ1c2VkLCAlcyIsIHMgKSA7Ci0gICAgICAgICAg ICAgICAgcHJpbnR3KCIlcyIsIGVycmJ1Zik7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAg ICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwobG9uZykgQ1df RVJSLChsb25nKSBlcnJidWYpOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8K LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJpbnR3KCJSZWZ1c2VkIik7 Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0 eShLVUlfRklMRV9UUkFOU0ZFUiwobG9uZylDV19FUlIsKGxvbmcpIlJlZnVzZWQiKTsKLSNlbmRp ZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICB9Ci0jaWZkZWYgQ09N TUVOVAotICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKLSNlbmRpZiAvKiBDT01NRU5UICov Ci0gICAgICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7Ci0gICAgICAgICAgICByZXR1cm47 Ci0KLSAgICAgICAgICBjYXNlIFNUX0lOQzoKLSAgICAgICAgICAgIG1vdmUoQ1dfRVJSLDIyKTsK LSAgICAgICAgICAgIHByaW50dygiSW5jb21wbGV0ZSIpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBL OTVHCi0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwobG9uZylD V19FUlIsKGxvbmcpIkluY29tcGxldGUiKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyog S1VJICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKLSNl bmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7Ci0g ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICBjYXNlIFNUX01TRzoKLSAgICAgICAgICAg IG1vdmUoQ1dfTVNHLDIyKTsKLSAgICAgICAgICAgIHByaW50dygiJXMiLHMpOwotI2lmZGVmIEtV SQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFO U0ZFUiwobG9uZylDV19NU0csKGxvbmcpcyk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8q IEtVSSAqLwotICAgICAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOwotICAgICAgICAgICAg cmV0dXJuOwotCi0gICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgLyogQmFk IGNhbGwgKi8KLSAgICAgICAgICAgIG1vdmUoQ1dfRVJSLDIyKTsKLSAgICAgICAgICAgIHByaW50 dygiKioqIHNjcmVlbigpIGNhbGxlZCB3aXRoIGJhZCBzdGF0dXMgKioqIik7Ci0jaWZkZWYgS1VJ Ci0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFO U0ZFUiwgKGxvbmcpIENXX0VSUiwKLSAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICIqKiog c2NyZWVuKCkgY2FsbGVkIHdpdGggYmFkIHN0YXR1cyAqKioiICk7Ci0jZW5kaWYgLyogSzk1RyAq LwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOyBy ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgY2FzZSBTQ1JfVEM6IHsgICAgICAgICAgICAgICAg ICAgIC8qIFRyYW5zYWN0aW9uIGNvbXBsZXRlICovCi0gICAgICAgICAgY2hhciBtc2didWZbMTI4 XTsKLSAgICAgICAgICBtb3ZlKENXX0NQLDIyKTsgICAgICAgICAgICAgICAvKiBPdmVyYWxsIHRy YW5zZmVyIHJhdGUgKi8KLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgIEt1aVNl dFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0NQLCB0ZmNwcyk7Ci0jZW5k aWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgIHByaW50dygiJXMiLCBj a2ZzdG9hKHRmY3BzKSk7Ci0gICAgICAgICAgY2xydG9lb2woKTsKLSAgICAgICAgICBpZiAoc3Vj Y2VzcykgewotICAgICAgICAgICAgICBtb3ZlKENXX01TRywyMik7ICAgICAgICAgIC8qIFByaW50 IHN0YXRpc3RpY3MgaW4gbWVzc2FnZSBsaW5lICovCi0gICAgICAgICAgICAgIGNscnRvZW9sKCk7 Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChzdWNjZXNzKSB7Ci0gICAgICAgICAgICAgIHNw cmludGYobXNnYnVmLAotICAgICAgICAgICAgICAgICAgICAgICJTVUNDRVNTLiAgRmlsZXM6ICVs ZCwgQnl0ZXM6ICVzLCAlbGQgQ1BTIiwKLSAgICAgICAgICAgICAgICAgICAgICBmaWxjbnQgLSBm aWxyZWosCi0gICAgICAgICAgICAgICAgICAgICAgY2tmc3RvYShmYnl0KSwKLSAgICAgICAgICAg ICAgICAgICAgICB0ZmNwcwotICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAg IHByaW50dygiJXMiLCBtc2didWYpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAg ICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAobG9uZykgQ1dfTVNHLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAobG9uZykgbXNnYnVmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYg LyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgICBjbHJ0b2VvbCgpOwot Ci0gICAgICAgICAgfQotICAgICAgICAgIG1vdmUoQ1dfVFIsIDEpOwotICAgICAgICAgIHByaW50 dygiICAgICAgIEVsYXBzZWQgVGltZTogJXMiLGhobW1zcygobG9uZykKLSNpZmRlZiBHRlRJTUVS Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcHRz ZWNzICsgMC41KQotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdHNlY3MKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKLSNpZmRlZiBLVUkKLSNpZm5k ZWYgSzk1RwotICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAg ICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19UUiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAobG9uZykgaGhtbXNzKChsb25nKQotI2lmZGVmIEdGVElNRVIKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChmcHRzZWNzICsgMC41KQotI2Vsc2UKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzZWNzCi0jZW5kaWYgLyogR0ZUSU1FUiAq LwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7Ci0jZW5kaWYgLyog Szk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgIGNscnRvZW9sKCk7Ci0gICAgICAg ICAgbW92ZSgyMywwKTsgY2xydG9lb2woKTsgICAgICAgLyogQ2xlYXIgaW5zdHJ1Y3Rpb25zIGxp bmVzICovCi0gICAgICAgICAgbW92ZSgyMiwwKTsgY2xydG9lb2woKTsgICAgICAgLyogdG8gbWFr ZSByb29tIGZvciBwcm9tcHQuICovCi0gICAgICAgICAgcmVmcmVzaCgpOwotCi0jaWZkZWYgR0ZU SU1FUgotICAgICAgICAgIG9sZGd0diA9IChDS0ZMT0FUKSAtMS4wOwotI2Vsc2UKLSAgICAgICAg ICBvbGRndHYgPSAtMUw7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotCi0jaWZuZGVmIFZNU0NVUlNF Ci0JICBkZWJ1ZyhGMTAwLCJzY3JlZW5jIGVuZHdpbiBBIiwiIiwwKTsKLSAgICAgICAgICBlbmR3 aW4oKTsKLSNpZmRlZiBDT01NRU5UCi0vKgotICBXaHkgYW5kIHdoZW4gd2FzIHRoaXMgY2FsbCB0 byBjb25yZXMoKSBhZGRlZD8gIEl0IG1ha2VzIG5vIHNlbnNlLAotICBhbmQgaXQgYnJlYWtzIGVj aG9pbmcgb24gU29sYXJpcyA4LgotKi8KLSNpZmRlZiBTT0xBUklTCi0gICAgICAgICAgY29ucmVz KCk7Ci0jZW5kaWYgLyogU09MQVJJUyAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNlbmRpZiAv KiBWTVNDVVJTRSAqLwotCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgIHBjdCA9IDEwMDsgb2xk cGN0ID0gMDsgICAgICAgIC8qIFJlc2V0IHRoZXNlIGZvciBuZXh0IHRpbWUuICovCi0jZW5kaWYg LyogQ09NTUVOVCAqLwotICAgICAgICAgIG9sZHR5cCA9IDA7IG9sZHJ0dCA9IC0xTDsgb2xkdHJ5 ID0gLTE7IG9sZGxlbiA9IC0xOwotICAgICAgICAgIG9sZHRpbSA9IC0xOwotICAgICAgICAgIGNl bmR3ID0gMTsKLSAgICAgICAgICBpZiAoeGZyYmVsKSBibGVlcChCUF9OT1RFKTsgICAvKiBDbG9z ZSB3aW5kb3csIHRoZW4gYmVlcC4gKi8KLSNpZmRlZiBVTklYCi0gICAgICAgICAgZmZsdXNoKHN0 ZG91dCk7Ci0jZW5kaWYgLyogVU5JWCAqLwotICAgICAgICAgIGZ0X3dpbiA9IDA7ICAgICAgICAg ICAgICAgICAgIC8qIFdpbmRvdyBjbG9zZWQuICovCi0gICAgICAgICAgcmV0dXJuOwotICAgICAg fQotICAgICAgY2FzZSBTQ1JfRU06ICAgICAgICAgICAgICAgICAgICAgIC8qIEVycm9yIHBhY2tl dCAoZmF0YWwpICovCi0gICAgICAgIG1vdmUgKENXX0VSUiwyMik7Ci0gICAgICAgIHByaW50dygi RkFJTFVSRTogJXMiLHMpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgIEt1aVNl dFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0VSUiwgKGxvbmcpIHMgKTsK LSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgIGlmICh4ZnJiZWwp IGJsZWVwKEJQX0ZBSUwpOwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgcGN0ID0gb2xkcGN0ID0g MDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsg cmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9RRTogICAgICAgICAgICAgICAgICAgICAgLyogUXVh bnRpdHkgZXF1YWxzICovCi0gICAgICBjYXNlIFNDUl9UVTogICAgICAgICAgICAgICAgICAgICAg LyogVW5kZWxpbWl0ZWQgdGV4dCAqLwotICAgICAgY2FzZSBTQ1JfVE46ICAgICAgICAgICAgICAg ICAgICAgIC8qIFRleHQgZGVsaW1pdGVkIGF0IHN0YXJ0ICovCi0gICAgICBjYXNlIFNDUl9UWjog ICAgICAgICAgICAgICAgICAgICAgLyogVGV4dCBkZWxpbWl0ZWQgYXQgZW5kICovCi0gICAgICAg IHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogKGlnbm9yZWQgaW4gZnVsbHNjcmVl biBkaXNwbGF5KSAqLwotCi0gICAgICBjYXNlIFNDUl9NUzoJCQkvKiBNZXNzYWdlIGZyb20gS2Vy bWl0IHBhcnRuZXIgKi8KLSAgICAgICAgbW92ZShDV19NU0csMjIpOwotCXByaW50dygiJXMiLHMp OwotICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7IHJldHVybjsKLQotICAgICAgY2FzZSBT Q1JfWEQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIFgtcGFja2V0IGRhdGEgKi8KLSAgICAgICAg cGN0ID0gb2xkcGN0ID0gMDsKLSAgICAgICAgbW92ZShDV19OQU0sMjIpOwotICAgICAgICBwcmlu dHcoIiVzIixzKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICBLdWlTZXRQcm9w ZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19OQU0sIChsb25nKSBzICk7Ci0jZW5k aWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICBjbHJ0b2VvbCgpOyByZWZy ZXNoKCk7IHJldHVybjsKLQotICAgICAgY2FzZSBTQ1JfQ1c6ICAgICAgICAgICAgICAgICAgICAg IC8qIENsb3NlIFdpbmRvdyAqLwotICAgICAgICBjbHJ0b2VvbCgpOyBtb3ZlKDIzLDApOyBjbHJ0 b2VvbCgpOyBtb3ZlKDIyLDApOyBjbHJ0b2VvbCgpOwotICAgICAgICByZWZyZXNoKCk7Ci0jaWZk ZWYgQ09NTUVOVAotICAgICAgICBwY3QgPSAxMDA7IG9sZHBjdCA9IDA7ICAgICAgICAgIC8qIFJl c2V0IHRoZXNlIGZvciBuZXh0IHRpbWUuICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAg ICBvbGR0eXAgPSAwOyBvbGRydHQgPSAtMUw7IG9sZHRyeSA9IC0xOyBvbGRsZW4gPSAtMTsKLSAg ICAgICAgb2xkdGltID0gLTE7Ci0KLSNpZm5kZWYgVk1TQ1VSU0UKLQlkZWJ1ZyhGMTAwLCJzY3Jl ZW5jIGVuZHdpbiBCIiwiIiwwKTsKLSAgICAgICAgZW5kd2luKCk7Ci0jZW5kaWYgLyogVk1TQ1VS U0UgKi8KLSAgICAgICAgZnRfd2luID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIHRo YXQgd2luZG93IGlzIGNsb3NlZC4gKi8KLSAgICAgICAgY2VuZHcgPSAxOyByZXR1cm47Ci0KLSAg ICAgIGNhc2UgU0NSX0NEOiAgICAgICAgICAgICAgICAgICAgICAvKiBEaXNwbGF5IGN1cnJlbnQg ZGlyZWN0b3J5ICovCi0gICAgICAgIG1vdmUoQ1dfRElSLDIyKTsKLSAgICAgICAgIHByaW50dygi JXMiLCBzKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICBLdWlTZXRQcm9wZXJ0 eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19ESVIsIChsb25nKSBzICk7Ci0jZW5kaWYg LyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICBjbHJ0b2VvbCgpOwotICAgICAg ICByZWZyZXNoKCk7Ci0jaWZkZWYgT1MyCi0gICAgICAgIFNhdmVDbWRNb2RlKDAsIDApOwotI2Vu ZGlmIC8qIE9TMiAqLwotICAgICAgICByZXR1cm47Ci0KLSAgICAgIGRlZmF1bHQ6ICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBCYWQgY2FsbCAqLwotICAgICAgICBtb3ZlIChDV19FUlIsMjIp OwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9G SUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfRVJSLAotICAg ICAgICAgICAgICAgICAgICAgICAobG9uZykgIioqKiBzY3JlZW4oKSBjYWxsZWQgd2l0aCBiYWQg ZnVuY3Rpb24gY29kZSAqKioiCi0gICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYgLyog Szk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICBwcmludHcoIioqKiBzY3JlZW4oKSBj YWxsZWQgd2l0aCBiYWQgZnVuY3Rpb24gY29kZSAqKioiKTsKLSAgICAgICAgY2xydG9lb2woKTsg cmVmcmVzaCgpOyByZXR1cm47Ci0gICAgfQotfQotI2VuZGlmIC8qIENLX0NVUlNFUyAqLwotCi0j aWZkZWYgS1VJCi0jaWZkZWYgQ0tfQU5TSUMKLXZvaWQKLXNjcmVlbmcoaW50IGYsIGNoYXIgYyxs b25nIG4sY2hhciAqcykKLSNlbHNlCi1DS1ZPSUQKLXNjcmVlbmcoZixjLG4scykKLWludCBmOyAg ICAgICAgICAvKiBhcmd1bWVudCBkZXNjcmlwdG9yICovCi1jaGFyIGM7ICAgICAgICAgLyogYSBj aGFyYWN0ZXIgb3Igc21hbGwgaW50ZWdlciAqLwotbG9uZyBuOyAgICAgICAgIC8qIGEgbG9uZyBp bnRlZ2VyICovCi1jaGFyICpzOyAgICAgICAgLyogYSBzdHJpbmcgKi8KLSNlbmRpZiAvKiBDS19B TlNJQyAqLwotLyogc2NyZWVuZygpICovIHsKLSNpZmRlZiBDS19TU0wKLSAgICBleHRlcm4gaW50 IHRsc19hY3RpdmVfZmxhZywgc3NsX2FjdGl2ZV9mbGFnOwotI2VuZGlmIC8qIENLX1NTTCAqLwot I2lmZGVmIFJMT0dDT0RFCi0gICAgZXh0ZXJuIGludCB0dG5wcm90bzsKLSNlbmRpZiAvKiBSTE9H Q09ERSAqLwotICAgIHN0YXRpYyBpbnQgcSA9IDA7Ci0gICAgc3RhdGljIENLX09GRl9UIGZzaXog PSAoQ0tfT0ZGX1QpLTE7IC8qIENvcHkgb2YgZmlsZSBzaXplICovCi0gICAgc3RhdGljIGxvbmcg ZmNudCA9IDBMOyAgICAvKiBOdW1iZXIgb2YgZmlsZXMgdHJhbnNmZXJyZWQgKi8KLSAgICBzdGF0 aWMgbG9uZyBmYnl0ID0gMEw7ICAgIC8qIFRvdGFsIGZpbGUgYnl0ZXMgb2YgYWxsIGZpbGVzIHRy YW5zZmVycmVkICovCi0gICAgc3RhdGljIENLX09GRl9UIGhvd2ZhciA9IChDS19PRkZfVCkwOyAv KiBIb3cgbXVjaCBvZiBmaWxlIHhmZXInZCBzbyBmYXIgKi8KLSAgICBzdGF0aWMgaW50ICBwY3Rs YmwgPSAwTDsgIC8qIFBlcmNlbnQgZG9uZSB2cyBCeXRlcyBzbyBmYXIgKi8KLSAgICBsb25nIGNw cyA9IDBMOwotCi0gICAgaW50IG5ldCA9IDA7Ci0gICAgaW50IHhuZXQgPSAwOwotICAgIGludCBm dHAgPSAwOwotICAgIGludCBsZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExlbmd0 aCBvZiBzdHJpbmcgKi8KLSAgICBpbnQgZXJyb3JzID0gMDsgICAgICAgICAgICAgICAgICAgICAv KiBFcnJvciBjb3VudGVyICovCi0gICAgaW50IHg7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogV29ya2VyICovCi0KLSAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5nIGNpbml0IiwiIixjaW5p dCk7Ci0gICAgZGVidWcoRjEwMSwic2NyZWVuZyBjZW5kdyIsIiIsY2VuZHcpOwotCi0gICAgaWYg KCFzKSBzID0gIiI7ICAgICAgICAgICAgICAgICAgICAgLyogQWx3YXlzIGRvIHRoaXMuICovCi0K LSAgICBmdHAgPSAod2hhdCAmIFdfRlRQKSA/IDEgOiAwOwkvKiBGVFAgb3IgS2VybWl0ICovCi0g ICAgbmV0ID0gbmV0d29yayB8fCBmdHA7Ci0gICAgeG5ldCA9IGZ0cCA/IDEgOiBuZXR0eXBlOwkJ LyogTkVUX1RDUEIgPT0gMSAqLwotCi0gICAgaWYgKGNpbml0ID09IDAgfHwgY2VuZHcgPiAwKSB7 ICAgICAgLyogSGFuZGxlIGJvcmRlcmxpbmUgY2FzZXMuLi4gKi8KLSAgICAgICAgaWYgKGYgPT0g U0NSX0NXKSB7ICAgICAgICAgICAgICAvKiBDbG9zZSB3aW5kb3csIGJ1dCBpdCdzIG5vdCBvcGVu ICovCi0gICAgICAgICAgICBmdF93aW4gPSAwOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg ICB9Ci0gICAgICAgIGRlYnVnKEYxMTEsInNjcmVlbmcgQSIscyxmKTsKLSAgICAgICAgaWYgKGYg PT0gU0NSX0VNIHx8Ci0gICAgICAgICAgIChmID09IFNDUl9QVCAmJiBjID09ICdFJykpIHsgLyog RmF0YWwgZXJyb3IgYmVmb3JlIHdpbmRvdyBvcGVuICovCi0gICAgICAgICAgICBjb25vbGwoIiIp OyBjb25vYygnPycpOyBjb25vbGwocyk7IHJldHVybjsgLyogUmVndWxhciBkaXNwbGF5ICovCi0g ICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGNpbml0ID09IDApIHsgICAgICAgICAgICAgICAgICAg LyogT25seSBjYWxsIGluaXRzY3IoKSBvbmNlICovCi0JLyogQ2hlY2sgdGhlc2Ugbm93IC0tIGlm IHRoZXkgYXJlIGRlZmluZWQgYnV0IG5vdCBudW1lcmljICovCi0JLyogdGhleSBjYW4gY3Jhc2gg Y3Vyc2VzICovCi0gICAgICAgIGNlbmR3ID0gMTsgICAgICAgICAgICAgICAgICAgICAgLyogTmV3 IHdpbmRvdyBuZWVkcyByZXBhaW50aW5nICovCi0gICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmcg Y2FsbGluZyBpbml0c2NyIiwiIiwwKTsKLSAgICAgICAgaW5pdHNjcigpOyAgICAgICAgICAgICAg ICAgICAgICAvKiBJbml0aWFsaXplIGN1cnNlcy4gKi8KLSAgICAgICAgZGVidWcoRjEwMCwic2Ny ZWVuZyBpbml0c2NyIG9rIiwiIiwwKTsKLSAgICAgICAgY2luaXQrKzsgICAgICAgICAgICAgICAg ICAgICAgICAvKiBSZW1lbWJlciBjdXJzZXMgd2FzIGluaXRpYWxpemVkLiAqLwotICAgIH0KLSAg ICBmdF93aW4gPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXaW5kb3cgaXMgb3BlbiAq LwotICAgIGlmIChyZXBhaW50KSB7Ci0jaWZkZWYgQ0tfV1JFRlJFU0gKLS8qCi0gIFRoaXMgdG90 YWxseSByZXBhaW50cyB0aGUgc2NyZWVuLCBqdXN0IHdoYXQgd2Ugd2FudCwgYnV0IHdlIGNhbiBv bmx5Ci0gIGRvIHRoaXMgd2l0aCByZWFsIGN1cnNlcywgYW5kIHRoZW4gb25seSBpZiBjbGVhcm9r KCkgYW5kIHdyZWZyZXNoKCkgYXJlCi0gIHByb3ZpZGVkIGluIHRoZSBjdXJzZXMgbGlicmFyeS4K LSovCi0gICAgICAgIFJlc3RvcmVDbWRNb2RlKCk7Ci0jZWxzZSAgLyogTm8gQ0tfV1JFRlJFU0gg Ki8KLS8qCi0gIEtlcm1pdCdzIGRvLWl0LXlvdXJzZWxmIG1ldGhvZCwgd29ya3Mgd2l0aCBhbGwg dHlwZXMgb2YgZnVsbHNjcmVlbgotICBzdXBwb3J0LCBidXQgZG9lcyBub3QgcmVwYWludCBhbGwg dGhlIGZpZWxkcy4gIEZvciBleGFtcGxlLCB0aGUgZmlsZW5hbWUKLSAgaXMgbG9zdCwgYmVjYXVz ZSBpdCBhcnJpdmVzIGF0IGEgY2VydGFpbiB0aW1lIGFuZCBuZXZlciBjb21lcyBhZ2FpbiwgYW5k Ci0gIEtlcm1pdCBwcmVzZW50bHkgZG9lcyBub3Qgc2F2ZSBpdCBhbnl3aGVyZS4gIE1ha2luZyB0 aGlzIG1ldGhvZCB3b3JrIGZvcgotICBhbGwgZmllbGRzIHdvdWxkIGJlIGEgcmF0aGVyIG1ham9y IHJlY29kaW5nIHRhc2ssIGR1cGxpY2F0aW5nIHdoYXQgY3Vyc2VzCi0gIGFscmVhZHkgZG9lcywg YW5kIHdvdWxkIGFkZCBhIGxvdCBvZiBjb21wbGV4aXR5IGFuZCBzdG9yYWdlIHNwYWNlLgotKi8K LSAgICAgICAgY2VuZHcgPSAxOwotI2VuZGlmIC8qIENLX1dSRUZSRVNIICovCi0gICAgICAgIHJl cGFpbnQgPSAwOwotICAgIH0KLSAgICBpZiAoY2VuZHcpIHsgICAgICAgICAgICAgICAgICAgICAg ICAvKiBlbmR3aW4oKSB3YXMgY2FsbGVkIHByZXZpb3VzbHkgKi8KLSAgICAgICAgZGVidWcoRjEw MCwic2NyZWVuZyBzZXR1cCBvayIsIiIsMCk7Ci0gICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlf RklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0RJUiwgKGxvbmcpIHpndGRpcigpICk7Ci0gICAgICAg IEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0xJTiwKLSAgICAg ICAgICAgICAgICAgICAgICAgIChsb25nKSAoCi0jaWZkZWYgTkVXRlRQCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZ0cCA/IChmdHBfaG9zdCA/IGZ0cF9ob3N0IDogIih1bmtub3du KSIpIDoKLSNlbmRpZiAvKiBORVdGVFAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdHRuYW1lKSApOwotCi0gICAgICAgIGlmIChuZXQpIHsKLSNpZmRlZiBORVRDT05OCi0JICAg IGludCBzZWN1cmUgPSAwOwotCSAgICBjaGFyICogeG5hbWU7Ci0JICAgIGlmICh4bmV0ID4gbm5l dG5hbWUpCi0JICAgICAgeG5hbWUgPSAiW0VSUk9SXSI7Ci0JICAgIGVsc2UKLQkgICAgICB4bmFt ZSA9IG5ldG5hbWVbeG5ldF07Ci0jaWZkZWYgTkVXRlRQCi0gICAgICAgICAgICBpZiAoZnRwKSB7 Ci0JCWlmIChmdHBpc3NlY3VyZSgpKQotCQkgIHNlY3VyZSA9IDE7Ci0JICAgIH0gZWxzZQotI2Vu ZGlmIC8qIE5FV0ZUUCAqLwotCSAgICAgIGlmICgwCi0jaWZkZWYgU1NIQlVJTFRJTgotICAgICAg ICAgICAgICAgIHx8IElTX1NTSCgpCi0jZW5kaWYgLyogU1NIQlVJTFRJTiAqLwotI2lmZGVmIENL X0VOQ1JZUFRJT04KLSAgICAgICAgICAgICAgICB8fCBja190bl9lbmNyeXB0aW5nKCkgJiYgY2tf dG5fZGVjcnlwdGluZygpCi0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotI2lmZGVmIENLX1NT TAotICAgICAgICAgICAgICAgIHx8IHRsc19hY3RpdmVfZmxhZyB8fCBzc2xfYWN0aXZlX2ZsYWcK LSNlbmRpZiAvKiBDS19TU0wgKi8KLSNpZmRlZiBSTE9HQ09ERQotI2lmZGVmIENLX0tFUkJFUk9T Ci0jaWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICAgICAgICAgIHx8IHR0bnByb3RvID09IE5Q X0VLNExPR0lOIHx8IHR0bnByb3RvID09IE5QX0VLNUxPR0lOCi0jZW5kaWYgLyogQ0tfRU5DUllQ VElPTiAqLwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0jZW5kaWYgLyogUkxPR0NPREUgKi8K LSAgICAgICAgICAgICAgICAgKSB7Ci0JCXNlY3VyZSA9IDE7Ci0JICAgIH0KLQkgICAgaWYgKHNl Y3VyZSkgewotICAgICAgICAgICAgICAgIGNoYXIgYnVmWzMwXTsKLSAgICAgICAgICAgICAgICBz cHJpbnRmKGJ1ZiwiJXMgKFNFQ1VSRSkiLHhuYW1lKTsKLSAgICAgICAgICAgICAgICBLdWlTZXRQ cm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAobG9uZykgQ1dfU1BELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBi dWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgfSBlbHNl IHsKLSAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfU1BELAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChsb25nKSB4bmFtZQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7Ci0gICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgS3VpU2V0UHJvcGVy dHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykg Q1dfU1BELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICIobmV0d29yaykiCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChzcGVlZCA8IDBMKQotICAgICAgICAgICAgICBz cGVlZCA9IHR0Z3NwZCgpOwotICAgICAgICAgICAgaWYgKHNwZWVkID4gMEwpIHsKLSAgICAgICAg ICAgICAgICBpZiAoc3BlZWQgPT0gODg4MCkgewotICAgICAgICAgICAgICAgICAgICBLdWlTZXRQ cm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGxvbmcpIENXX1NQRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGxvbmcpICI3NS8xMjAwIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwot ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIgc3BlZWRi dWZbNjRdIDsKLSAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihzcGVlZGJ1ZiwgIiVsZCIsIHNw ZWVkKTsKLSAgICAgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNG RVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19TUEQsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBzcGVlZGJ1ZgotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVf VFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1NQRCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIih1bmtub3duKSIKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g ICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAg ICAgICAgICAobG9uZykgQ1dfUEFSLAotICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgcGFy bmFtKChjaGFyKXBhcml0eSkKLSAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgcGN0 bGJsID0gKHdoYXQgJiBXX1NFTkQpOwotICAgICAgICBjZW5kdyA9IDA7Ci0gICAgfQotICAgIGRl YnVnKEYxMDEsIlNDUkVFTkMgc3dpdGNoIiwiIixmKTsKLSAgICBkZWJ1ZyhGMDAwLCJTQ1JFRU5D IGMiLCIiLGMpOwotICAgIGRlYnVnKEYxMDEsIlNDUkVFTkMgbiIsIiIsbik7Ci0KLSAgICBsZW4g PSBzdHJsZW4ocyk7ICAgICAgICAgICAgICAgICAgICAvKiBMZW5ndGggb2YgYXJndW1lbnQgc3Ry aW5nICovCi0gICAgc3dpdGNoIChmKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogSGFuZGxl IG91ciBmdW5jdGlvbiBjb2RlICovCi0gICAgICBjYXNlIFNDUl9GTjogICAgICAgICAgICAgICAg ICAgICAgLyogRmlsZW5hbWUgKi8KLSAgICAgICAgb2xkcGN0ID0gcGN0ID0gMEw7ICAgICAgICAg ICAgICAvKiBSZXNldCBwZXJjZW50cyAqLwotI2lmZGVmIEdGVElNRVIKLSAgICAgICAgZ3R2ID0g KENLRkxPQVQpIC0xLjA7Ci0gICAgICAgIC8qIG9sZGd0diA9IChDS0ZMT0FUKSAtMS4wOyAqLwot I2Vsc2UKLSAgICAgICAgZ3R2ID0gLTFMOwotICAgICAgICAvKiBvbGRndHYgPSAtMUw7ICovCi0j ZW5kaWYgLyogR0ZUSU1FUiAqLwotICAgICAgICBvbGR3aW4gPSAtMTsKLSAgICAgICAgZnNpeiA9 IChDS19PRkZfVCktMUw7CQkvKiBJbnZhbGlkYXRlIHByZXZpb3VzIGZpbGUgc2l6ZSAqLwotICAg ICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19QQ0QsIChs b25nKSAwICk7Ci0gICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxv bmcpIENXX0ZGQywgKGxvbmcpIDAgKTsKLSAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxF X1RSQU5TRkVSLCAobG9uZykgQ1dfU0laLCAobG9uZykgMCApOwotICAgICAgICBLdWlTZXRQcm9w ZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19FUlIsIChsb25nKSAiIiApOwotCi0g ICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX05BTSwg KGxvbmcpIHMgKTsKLSAgICAgICAgcSA9IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAvKiBS ZW1lbWJlciBuYW1lIGxlbmd0aCBmb3IgbGF0ZXIgKi8KLSAgICAgICAgc2NyZnQoKTsgICAgICAg ICAgICAgICAgICAgICAgICAvKiBEaXNwbGF5IGZpbGUgdHlwZSAoY2FuIGNoYW5nZSkgKi8KLSNp ZmRlZiBPUzIKLSAgICAgICAgU2F2ZUNtZE1vZGUoMCwgMCk7Ci0jZW5kaWYgLyogT1MyICovCi0g ICAgICAgIHJldHVybjsKLQotICAgICAgY2FzZSBTQ1JfQU46ICAgICAgICAgICAgICAgICAgICAg IC8qIEZpbGUgYXMtbmFtZSAqLwotICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJB TlNGRVIsIChsb25nKSBDV19OQU0sIChsb25nKSBzICk7Ci0jaWZkZWYgT1MyCi0gICAgICAgIFNh dmVDbWRNb2RlKDAsIDApOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICByZXR1cm47Ci0KLSAg ICAgIGNhc2UgU0NSX0ZTOiAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIHNpemUgKi8KLSAg ICAgICAgZnNpeiA9IG47Ci0gICAgICAgIGlmIChmc2l6ID4gKENLX09GRl9UKS0xKSB7Ci0gICAg ICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19TSVos IChsb25nKSBuICk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGZzaXogPiAoQ0tfT0ZGX1QpLTEp IHsJLyogUHV0IHVwIHBlcmNlbnQgbGFiZWwgKi8KLSAgICAgICAgICAgIHBjdGxibCA9IDE7Ci0g ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwY3RsYmwgPSAwOwotCX0KLSAgICAgICAgc2Ny ZnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIHR5cGUgKi8KLSNpZmRlZiBPUzIK LSAgICAgICAgU2F2ZUNtZE1vZGUoMCwgMCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgIHJl dHVybjsKLQotICAgICAgY2FzZSBTQ1JfUFQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIFBhY2tl dCB0eXBlIG9yIHBzZXVkb3R5cGUgKi8KLSAgICAgICAgaWYgKHNwYWNrZXRzIDwgNSkgewotICAg ICAgICAgICAgZXh0ZXJuIGludCBzeXNpbmRleDsKLSAgICAgICAgICAgIGV4dGVybiBzdHJ1Y3Qg c3lzZGF0YSBzeXNpZGxpc3RbXTsKLSAgICAgICAgICAgIC8qIFRoaW5ncyB0aGF0IHdvbid0IGNo YW5nZSBhZnRlciB0aGUgNHRoIHBhY2tldCAqLwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHko IEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENX X1BBUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBwYXJuYW0oKGNoYXIpcGFy aXR5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGlmICgKLSNp ZmRlZiBORVdGVFAKLQkJKGZ0cCAmJiAoc3BhY2tldHMgPT0gMSB8fCBycGFja2V0cyA9PSAxKSkg fHwKLSNlbmRpZiAvKiBORVdGVFAgKi8KLQkJc3BhY2tldHMgPT0gNAotCQkpIHsKLSAgICAgICAg ICAgICAgICBpZiAoCi0jaWZkZWYgTkVXRlRQCi0JCSAgICBmdHAgfHwKLSNlbmRpZiAvKiBORVdG VFAgKi8KLQkJICAgICgocHJvdG9jb2wgPT0gUFJPVE9fSykgJiYgKHN5c2luZGV4ID4gLTEpKQot CQkgICAgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIgbXNnYnVmWzEyOF07Ci0gICAgICAg ICAgICAgICAgICAgIGlmIChuZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYo bXNnYnVmLCJOZXR3b3JrIEhvc3Q6ICVzICglcykiLAotI2lmZGVmIE5FV0ZUUAotCQkJICAgICAg IGZ0cCA/IChmdHBfaG9zdCA/IGZ0cF9ob3N0IDogIiIpIDoKLSNlbmRpZiAvKiBORVdGVFAgKi8K LQkJCSAgICAgICB0dG5hbWUsCi0jaWZkZWYgTkVXRlRQCi0JCQkgICAgICAgZnRwID8gZnRwX3Ny dnR5cCA6Ci0jZW5kaWYgLyogTkVXRlRQICovCi0JCQkgICAgICAgc3lzaWRsaXN0W3N5c2luZGV4 XS5zaWRfbmFtZQotCQkJICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKG1zZ2J1ZiwKLQkJCQkiQ29tbXVuaWNhdGlv biBEZXZpY2U6ICVzIChyZW1vdGUgaG9zdCBpcyAlcykiLAotCQkJCXR0bmFtZSwKLQkJCQlzeXNp ZGxpc3Rbc3lzaW5kZXhdLnNpZF9uYW1lCi0JCQkJKTsKLSAgICAgICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsCi0J CQkJICAgIChsb25nKSBDV19MSU4sCi0JCQkJICAgIChsb25nKSBtc2didWYKLQkJCQkgICAgKTsK LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNpZmRlZiBDS19U SU1FUlMKLSAgICAgICAgaWYgKC8qIHJ0dGZsZyAmJiAqLyBwcm90b2NvbCA9PSBQUk9UT19LKSB7 Ci0gICAgICAgICAgICBsb25nIHh4OwotICAgICAgICAgICAgaWYgKAotI2lmZGVmIFNUUkVBTUlO RwotICAgICAgICAgICAgICAgIHN0cmVhbWluZyAmJiBvbGR3aW4gIT0gLTIKLSNlbHNlCi0gICAg ICAgICAgICAgICAgMAotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotICAgICAgICAgICAgICAgICkg ewotICAgICAgICAgICAgICAgIGNoYXIgbXNnYnVmWzY0XTsKLSAgICAgICAgICAgICAgICBzcHJp bnRmKG1zZ2J1ZiwiMDAgLyAwMCIpOwotICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBL VUlfRklMRV9UUkFOU0ZFUiwKLQkJCQkobG9uZykgQ1dfVE1PLAotCQkJCShsb25nKSBtc2didWYK LQkJCQkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB4eCA9IChydHRk ZWxheSArIDUwMCkgLyAxMDAwOwotICAgICAgICAgICAgICAgIGlmICh4eCAhPSBvbGRydHQgfHwg cmN2dGltbyAhPSBvbGR0aW0pIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhciBtc2didWZbNjRd OwotICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKG1zZ2J1ZiwiJTAybGQgLyAlMDJkIiwgeHgs IHJjdnRpbW8pOwotICAgICAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVf VFJBTlNGRVIsCi0JCQkJICAgIChsb25nKSBDV19UTU8sCi0JCQkJICAgIChsb25nKSBtc2didWYK LQkJCQkgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgb2xkcnR0ID0geHg7Ci0gICAgICAgICAg ICAgICAgICAgIG9sZHRpbSA9IHJjdnRpbW87Ci0gICAgICAgICAgICAgICAgICAgIGNscnRvZW9s KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYg LyogQ0tfVElNRVJTICovCi0KLSAgICAgICAgeCA9ICh3aGF0ICYgV19SRUNWKSA/ICAgICAgICAg IC8qIFBhY2tldCBsZW5ndGggKi8KLSAgICAgICAgICBycGt0bCsocHJvdG9jb2w9PVBST1RPX0s/ MTowKSA6Ci0gICAgICAgICAgICBzcGt0bDsKLSAgICAgICAgaWYgKHggIT0gb2xkbGVuKSB7ICAg ICAgICAgICAgICAvKiBCdXQgb25seSBpZiBpdCBjaGFuZ2VkLiAqLwotICAgICAgICAgICAgS3Vp U2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfUEwsIChsb25nKSB4ICk7 Ci0gICAgICAgICAgICBvbGRsZW4gPSB4OwotICAgICAgICB9Ci0gICAgICAgIEt1aVNldFByb3Bl cnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BDLCAobG9uZykgc3BhY2tldHMgKTsK LQotICAgICAgICBpZiAocHJvdG9jb2wgPT0gUFJPVE9fSyAmJiAhZnRwKSB7IC8qIFdpbmRvdyBz bG90cyAqLwotICAgICAgICAgICAgY2hhciB3c1sxNl07Ci0gICAgICAgICAgICBpbnQgZmxhZzsK LSAgICAgICAgICAgIGZsYWcgPSAwOwotI2lmZGVmIFNUUkVBTUlORwotICAgICAgICAgICAgaWYg KHN0cmVhbWluZykgewotICAgICAgICAgICAgICAgIGlmIChvbGR3aW4gIT0gLTIpIHsKLSAgICAg ICAgICAgICAgICAgICAgc3ByaW50Zih3cywiU1RSRUFNSU5HIik7Ci0gICAgICAgICAgICAgICAg ICAgIGZsYWcgPSAxOwotICAgICAgICAgICAgICAgICAgICBvbGR3aW4gPSAtMjsKLSAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLSAg ICAgICAgICAgICAgaWYgKHdjdXIgIT0gb2xkd2luKSB7Ci0gICAgICAgICAgICAgICAgICBzcHJp bnRmKHdzLCAiJWQgb2YgJWQiLCB3Y3VyIDwgMSA/IDEgOiB3Y3VyLCB3c2xvdG4pOwotICAgICAg ICAgICAgICAgICAgZmxhZyA9IDE7Ci0gICAgICAgICAgICAgICAgICBvbGR3aW4gPSB3Y3VyOwot ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZmxhZykgewotICAgICAgICAgICAgICAg IEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1dTLCAobG9uZykg d3MgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlcnJvcnMgPSByZXRyYW5z ICsgY3J1bmNoZWQgKyB0aW1lb3V0czsKLSAgICAgICAgaWYgKGVycm9ycyAhPSBvbGR0cnkpIHsg ICAgICAgICAvKiBSZXRyeSBjb3VudCwgaWYgY2hhbmdlZCAqLwotICAgICAgICAgICAgS3VpU2V0 UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfUFIsIChsb25nKSBlcnJvcnMg KTsKLSAgICAgICAgICAgIG9sZHRyeSA9IGVycm9yczsKLSAgICAgICAgfQotCS8qIFNlbmRlcidz IHBhY2tldCB0eXBlICovCi0gICAgICAgIGlmICghZnRwICYmIChjICE9IG9sZHR5cCAmJiBjICE9 ICdZJyAmJiBjICE9ICdOJykpIHsKLSAgICAgICAgICAgIGNoYXIgdHlwZVsyXTsKLSAgICAgICAg ICAgIHNwcmludGYodHlwZSwgIiVjIixjKTsKLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBL VUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BULCAobG9uZykgdHlwZSApOwotICAgICAgICAg ICAgb2xkdHlwID0gYzsKLSAgICAgICAgfQotICAgICAgICBzd2l0Y2ggKGMpIHsgICAgICAgICAg ICAgICAgICAgIC8qIE5vdyBoYW5kbGUgc3BlY2lmaWMgcGFja2V0IHR5cGVzICovCi0gICAgICAg ICAgY2FzZSAnUyc6ICAgICAgICAgICAgICAgICAgICAgLyogQmVnaW5uaW5nIG9mIHRyYW5zZmVy ICovCi0gICAgICAgICAgICBmY250ID0gZmJ5dCA9IDBMOyAgICAgICAgICAgLyogQ2xlYXIgY291 bnRlcnMgKi8KLSNpZmRlZiBHRlRJTUVSCi0gICAgICAgICAgICBndHYgPSAtMS4wOwotI2Vsc2Ug LyogR0ZUSU1FUiAqLwotICAgICAgICAgICAgZ3R2ID0gLTFMOyAgICAgICAgICAgICAgICAgIC8q IEFuZCBvbGQvbmV3IHRoaW5ncy4uLiAqLwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLSAgICAgICAg ICAgIG9sZHBjdCA9IHBjdCA9IDBMOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBj YXNlICdaJzogICAgICAgICAgICAgICAgICAgICAvKiBvciBFT0YgKi8KLSAgICAgICAgICAgIGRl YnVnKEYxMDEsInNjcmVlbmcgU0NSX1BUIFogcGt0bnVtIiwiIixuKTsKLSAgICAgICAgICAgIGRl YnVnKEYxMDEsInNjcmVlbmcgU0NSX1BUIFogb2xkcGN0IiwiIixvbGRwY3QpOwotICAgICAgICAg ICAgZGVidWcoRjEwMSwic2NyZWVuZyBTQ1JfUFQgWiBwY3QiLCIiLHBjdCk7Ci0gICAgICAgICAg Y2FzZSAnRCc6ICAgICAgICAgICAgICAgICAgICAgLyogRGF0YSBwYWNrZXQgKi8KLSAgICAgICAg ICAgIGlmIChmc2l6ID4gMEwpIHsgICAgICAgICAgICAvKiBTaG93IHBlcmNlbnQgZG9uZSBpZiBr bm93biAqLwotICAgICAgICAgICAgICAgIG9sZHBjdCA9IHBjdDsgICAgICAgICAgIC8qIFJlbWVt YmVyIHByZXZpb3VzIHBlcmNlbnQgKi8KLSAgICAgICAgICAgICAgICBob3dmYXIgPSBmZmM7Ci0j aWZkZWYgQ0tfUkVTRU5ECi0gICAgICAgICAgICAgICAgaWYgKHdoYXQgJiBXX1NFTkQpCS8qIEFj Y291bnQgZm9yIFBTRU5EIG9yIFJFU0VORCAqLwotICAgICAgICAgICAgICAgICAgaG93ZmFyICs9 IHNlbmRzdGFydDsKLSAgICAgICAgICAgICAgICBlbHNlIGlmICh3aGF0ICYgV19SRUNWKQotICAg ICAgICAgICAgICAgICAgaG93ZmFyICs9IHJzX2xlbjsKLSNlbmRpZiAvKiBDS19SRVNFTkQgKi8K LSAgICAgICAgICAgICAgICAvKiBQZXJjZW50IGRvbmUsIHRvIGJlIGRpc3BsYXllZC4uLiAqLwot ICAgICAgICAgICAgICAgIGlmIChjID09ICdaJykgewotICAgICAgICAgICAgICAgICAgICBpZiAo IWRpc2NhcmQgJiYgIWN4c2VlbiAmJiAhY3pzZWVuKSBwY3QgPSAxMDBMOwotICAgICAgICAgICAg ICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgcGN0ID0gKGZzaXogPiA5OUwpID8gKGhvd2Zh ciAvIChmc2l6IC8gMTAwTCkpIDogMEw7Ci0gICAgICAgICAgICAgICAgaWYgKHBjdCA+IDEwMEwg fHwgICAgICAgLyogQWxsb3cgZm9yIGV4cGFuc2lvbiBhbmQgKi8KLSAgICAgICAgICAgICAgICAg ICAob2xkcGN0ID09IDk5TCAmJiBwY3QgPCAwTCkpIC8qIG90aGVyIGJvdW5kYXJ5IGNvbmRpdGlv bnMgKi8KLSAgICAgICAgICAgICAgICAgIHBjdCA9IDEwMEw7Ci0gICAgICAgICAgICAgICAgaWYg KHBjdCAhPSBvbGRwY3QpICAgICAgLyogT25seSBkbyB0aGlzIDEwMCB0aW1lcyBwZXIgZmlsZSAq LwotICAgICAgICAgICAgICAgICAgdXBkcGN0KG9sZHBjdCwgcGN0KTsKLSAgICAgICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIs IChsb25nKSBDV19GRkMsIChsb25nKSBmZmMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg S3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19GRkMsIChsb25nKSBo b3dmYXIpOwotICAgICAgICAgICAgY3BzID0gc2hvY3BzKChpbnQpIHBjdCwgZnNpeiwgaG93ZmFy KTsKLSAgICAgICAgICAgIC8qIG9sZF90ciA9IHNob2V0bChvbGRfdHIsIGNwcywgZnNpeiwgaG93 ZmFyKTsgKi8KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSAnJSc6ICAgICAg ICAgICAgICAgICAgICAgLyogVGltZW91dHMsIHJldHJhbnNtaXNzaW9ucyAqLwotICAgICAgICAg ICAgY3BzID0gc2hvY3BzKChpbnQpIHBjdCwgZnNpeiwgaG93ZmFyKTsKLSAgICAgICAgICAgIC8q IG9sZF90ciA9IHNob2V0bChvbGRfdHIsIGNwcywgZnNpeiwgaG93ZmFyKTsgKi8KLQotICAgICAg ICAgICAgZXJyb3JzID0gcmV0cmFucyArIGNydW5jaGVkICsgdGltZW91dHM7Ci0gICAgICAgICAg ICBpZiAoZXJyb3JzICE9IG9sZHRyeSkgeyAgICAgLyogRXJyb3IgY291bnQsIGlmIGNoYW5nZWQg Ki8KLSAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfUFIsCi0JCQkgICAgICAgKGxv bmcpIGVycm9ycwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgIG9sZHRyeSA9IGVycm9yczsKLSAgICAgICAgICAgICAg ICBpZiAocykgaWYgKCpzKSB7Ci0gICAgICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtV SV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRVJSLCAobG9uZykgcyk7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgJ0UnOiAgICAgICAgICAgICAg ICAgICAgIC8qIEVycm9yIHBhY2tldCAqLwotICAgICAgICAgICAgaWYgKCpzKSB7Ci0gICAgICAg ICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRVJS LCAobG9uZykgcyApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmNudCA9IGZieXQgPSAw TDsgICAgICAgICAgIC8qIFNvIG5vIGJ5dGVzIGZvciB0aGlzIGZpbGUgKi8KLSAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgIGNhc2UgJ1EnOiAgICAgICAgICAgICAgICAgICAgIC8qIENydW5j aGVkIHBhY2tldCAqLwotICAgICAgICAgICAgY3BzID0gc2hvY3BzKChpbnQpIHBjdCwgZnNpeiwg aG93ZmFyKTsKLSAgICAgICAgICAgIC8qIG9sZF90ciA9IHNob2V0bChvbGRfdHIsIGNwcywgZnNp eiwgaG93ZmFyKTsgKi8KLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5T RkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX0VSUiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgIChsb25nKSAiRGFtYWdlZCBQYWNrZXQiCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAncSc6 ICAgICAgICAgICAgICAgICAgICAgLyogQ3RybC1DIG9yIGNvbm5lY3Rpb24gbG9zdCAqLwotICAg ICAgICAgICAgaWYgKCFzKSBzID0gIiI7Ci0gICAgICAgICAgICBpZiAoISpzKSBzID0gIlVzZXIg aW50ZXJydXB0aW9uIG9yIGNvbm5lY3Rpb24gbG9zdCI7Ci0gICAgICAgICAgICBLdWlTZXRQcm9w ZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25n KSBDV19NU0csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgcwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug J1QnOiAgICAgICAgICAgICAgICAgICAgIC8qIFRpbWVvdXQgKi8KLSAgICAgICAgICAgIGNwcyA9 IHNob2NwcygoaW50KSBwY3QsIGZzaXosIGhvd2Zhcik7Ci0gICAgICAgICAgICAvKiBvbGRfdHIg PSBzaG9ldGwob2xkX3RyLCBjcHMsIGZzaXosIGhvd2Zhcik7ICovCi0gICAgICAgICAgICBLdWlT ZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg IChsb25nKSBDV19FUlIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIlRpbWVv dXQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgZXJyb3JzID0g cmV0cmFucyArIGNydW5jaGVkICsgdGltZW91dHM7Ci0gICAgICAgICAgICBpZiAoZXJyb3JzICE9 IG9sZHRyeSkgeyAgICAgLyogRXJyb3IgY291bnQsIGlmIGNoYW5nZWQgKi8KLSAgICAgICAgICAg ICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAobG9uZykgQ1dfUFIsIChsb25nKSBlcnJvcnMKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgIG9sZHRyeSA9IGVycm9yczsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6ICAgICAg ICAgICAgICAgICAgICAgIC8qIE90aGVycywgZG8gbm90aGluZyAqLwotICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgIH0KLSNpZmRlZiBPUzIKLSAgICAgICAgU2F2ZUNtZE1vZGUoMCwgMCk7Ci0j ZW5kaWYgLyogT1MyICovCi0gICAgICAgIHJldHVybjsKLQotICAgICAgY2FzZSBTQ1JfU1Q6ICAg ICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgdHJhbnNmZXIgc3RhdHVzICovCi0gICAgICAgIGRl YnVnKEYxMDEsInNjcmVlbmcgU0NSX1NUIGMiLCIiLGMpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJz Y3JlZW5nIFNDUl9TVCBzdWNjZXNzIiwiIixzdWNjZXNzKTsKLSAgICAgICAgZGVidWcoRjEwMSwi c2NyZWVuZyBTQ1JfU1QgY3hzZWVuIiwiIixjeHNlZW4pOwotI2lmZGVmIENPTU1FTlQKLSAgICAg ICAgaWYgKGMgPT0gU1RfT0spIHsgICAgICAgICAgICAgICAvKiBPSywgcHJpbnQgMTAwICUgKi8K LSAgICAgICAgICAgIGlmIChwY3RsYmwpCi0gICAgICAgICAgICAgIHVwZHBjdChvbGRwY3QsMTAw KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlf RklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0ZGQywgKGxvbmcpIGZmYyk7Ci0gICAgICAgICAgICBw Y3QgPSAxMDA7Ci0gICAgICAgICAgICBvbGRwY3QgPSAwOwotICAgICAgICB9IGVsc2UgaWYgKGZz aXogPiAwTCkgICAgICAgICAgIC8qIE5vdCBPSywgdXBkYXRlIGZpbmFsIHBlcmNlbnQgKi8KLS8q Ci0gIFRoZSBlbHNlIHBhcnQgd3JpdGVzIGFsbCBvdmVyIHRoZSBzY3JlZW4gLS0gaG93ZmFyIGFu ZC9vciBmc2l6IGhhdmUKLSAgYmVlbiByZXNldCBhcyBhIGNvbnNlcXVlbmNlIG9mIHRoZSBub3Qt T0tuZXNzIG9mIHRoZSB0cmFuc2Zlci4KLSovCi0gICAgICAgICAgaWYgKHBjdGxibCkKLSAgICAg ICAgICAgIHVwZHBjdChvbGRwY3QsIChob3dmYXIgKiAxMDBMKSAvIGZzaXopOwotI2Vsc2UKLSAg ICAgICAgaWYgKGMgPT0gU1RfT0spIHsgICAgICAgICAgICAgICAvKiBPSywgcHJpbnQgMTAwICUg Ki8KLSAgICAgICAgICAgIGlmIChwY3RsYmwpIHsKLQkJdXBkcGN0KG9sZHBjdCwxMDApOwotCSAg ICB9IGVsc2UKLSAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZF UiwgKGxvbmcpIENXX0ZGQywgKGxvbmcpIGZmYyk7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAg ICAgcGN0ID0gMTAwOwotICAgICAgICAgICAgb2xkcGN0ID0gMDsKLSNlbmRpZiAvKiBDT01NRU5U ICovCi0gICAgICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICAgICAgS3VpU2V0UHJv cGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfVFIsIChsb25nKSAiIiApOwotCi0g ICAgICAgIHN3aXRjaCAoYykgeyAgICAgICAgICAgICAgICAgICAgLyogUHJpbnQgbmV3IHN0YXR1 cyBtZXNzYWdlICovCi0gICAgICAgICAgY2FzZSBTVF9PSzogICAgICAgICAgICAgICAgICAgLyog VHJhbnNmZXIgT0sgKi8KLSAgICAgICAgICAgIGZjbnQrKzsgICAgICAgICAgICAgICAgICAgICAv KiBDb3VudCB0aGlzIGZpbGUgKi8KLQkgICAgaWYgKHdoYXQgPT0gKFdfRlRQfFdfRlRfREVMRSkp IHsKLSAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX01TRywKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICJEZWxldGUgT0siCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7Ci0JICAgIH0gZWxzZSB7Ci0JCWZieXQgKz0gZmZjOwotICAgICAg ICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfTVNHLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAobG9uZykgIlRyYW5zZmVyIE9LIgotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwotCSAgICB9Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICBjYXNl IFNUX0RJU0M6ICAgICAgICAgICAgICAgICAvKiBEaXNjYXJkZWQgKi8KLSAgICAgICAgICAgIEt1 aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGxvbmcpIENXX0VSUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiRmls ZSBkaXNjYXJkZWQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2lmZGVmIENPTU1F TlQKLSAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwot ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgY2FzZSBTVF9JTlQ6ICAgICAgICAgICAg ICAgICAgLyogSW50ZXJydXB0ZWQgKi8KLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9G SUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX0VSUiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiVHJhbnNmZXIgaW50ZXJydXB0ZWQi Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAg ICAgIHBjdCA9IG9sZHBjdCA9IDA7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAg cmV0dXJuOwotCi0gICAgICAgIGNhc2UgU1RfU0tJUDogeyAgICAgICAgICAgICAgICAvKiBTa2lw cGVkICovCi0gICAgICAgICAgICBjaGFyIGVycmJ1Zls2NF0gOwotCSAgICBpZiAobiA+IDAgJiYg biA8IG5za3JlYXNvbikKLSAgICAgICAgICAgICAgICBzcHJpbnRmKCBlcnJidWYsICJGaWxlIHNr aXBwZWQsICglcykiLCBza3JlYXNvbltuXSApIDsKLQkgICAgZWxzZQotICAgICAgICAgICAgICAg IHNwcmludGYoIGVycmJ1ZiwgIkZpbGUgc2tpcHBlZCIgKSA7Ci0gICAgICAgICAgICBLdWlTZXRQ cm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChs b25nKSBDV19FUlIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgZXJyYnVmCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAg IHBjdCA9IG9sZHBjdCA9IDA7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgcmV0 dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgY2FzZSBTVF9FUlI6ICAgICAgICAgICAgICAgICAg LyogRXJyb3IgbWVzc2FnZSAqLwotICAgICAgICAgICAgaWYgKCFzKSBzID0gKGNoYXIgKillcGt0 bXNnOwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9u ZykgQ1dfRVJSLCAobG9uZykgcyApOwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgIHBjdCA9 IG9sZHBjdCA9IDA7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgcmV0dXJuOwot Ci0gICAgICAgICAgY2FzZSBTVF9SRUZVOiAgICAgICAgICAgICAgICAgLyogUmVmdXNlZCAqLwot ICAgICAgICAgICAgaWYgKCpzKSB7Ci0gICAgICAgICAgICAgICAgY2hhciBlcnJidWZbNjRdIDsK LSAgICAgICAgICAgICAgICBzcHJpbnRmKCBlcnJidWYsICJSZWZ1c2VkLCAlcyIsIHMgKSA7Ci0g ICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsKGxvbmcpIENX X0VSUiwobG9uZykgZXJyYnVmKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg ICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsKGxvbmcpQ1dfRVJSLChsb25nKSJS ZWZ1c2VkIik7Ci0gICAgICAgICAgICB9Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgcGN0 ID0gb2xkcGN0ID0gMDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICByZXR1cm47 Ci0KLSAgICAgICAgICBjYXNlIFNUX0lOQzoKLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtV SV9GSUxFX1RSQU5TRkVSLChsb25nKUNXX0VSUiwobG9uZykiSW5jb21wbGV0ZSIpOwotI2lmZGVm IENPTU1FTlQKLSAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7Ci0jZW5kaWYgLyogQ09NTUVO VCAqLwotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgY2FzZSBTVF9NU0c6Ci0gICAg ICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwobG9uZylDV19NU0csKGxv bmcpcyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICBkZWZhdWx0OiAgICAgICAg ICAgICAgICAgICAgICAvKiBCYWQgY2FsbCAqLwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHko IEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRVJSLAotICAgICAgICAgICAgICAgICAgICAg ICAobG9uZykgIioqKiBzY3JlZW4oKSBjYWxsZWQgd2l0aCBiYWQgc3RhdHVzICoqKiIgKTsKLSAg ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIFNDUl9UQzogeyAgICAg ICAgICAgICAgICAgICAgLyogVHJhbnNhY3Rpb24gY29tcGxldGUgKi8KLSAgICAgICAgICBjaGFy IG1zZ2J1ZlsxMjhdOwotICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZF UiwgKGxvbmcpIENXX0NQLCB0ZmNwcyk7Ci0gICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKLSAgICAg ICAgICAgICAgc3ByaW50Zihtc2didWYsCi0gICAgICAgICAgICAgICAgICAgICAgIlNVQ0NFU1Mu ICBGaWxlczogJXMsIEJ5dGVzOiAlbGQsICVsZCBDUFMiLAotICAgICAgICAgICAgICAgICAgICAg IGZpbGNudCAtIGZpbHJlaiwKLSAgICAgICAgICAgICAgICAgICAgICBja2ZzdG9hKGZieXQpLAot ICAgICAgICAgICAgICAgICAgICAgIHRmY3BzCi0gICAgICAgICAgICAgICAgICAgICAgKTsKLSAg ICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19NU0csCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChsb25nKSBtc2didWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAg ICAgICAgICB9Ci0gICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1RSLAotICAgICAgICAgICAgICAgICAg ICAgICAgIChsb25nKSBoaG1tc3MoKGxvbmcpCi0jaWZkZWYgR0ZUSU1FUgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZwdHNlY3MgKyAwLjUpCi0jZWxzZQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNlY3MKLSNlbmRpZiAvKiBHRlRJTUVS ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKLQotI2lmZGVm IEdGVElNRVIKLSAgICAgICAgICBvbGRndHYgPSAoQ0tGTE9BVCkgLTEuMDsKLSNlbHNlCi0gICAg ICAgICAgb2xkZ3R2ID0gLTFMOwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLQotI2lmZGVmIENPTU1F TlQKLSAgICAgICAgICBwY3QgPSAxMDA7IG9sZHBjdCA9IDA7ICAgICAgICAvKiBSZXNldCB0aGVz ZSBmb3IgbmV4dCB0aW1lLiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICBvbGR0 eXAgPSAwOyBvbGRydHQgPSAtMUw7IG9sZHRyeSA9IC0xOyBvbGRsZW4gPSAtMTsKLSAgICAgICAg ICBvbGR0aW0gPSAtMTsKLSAgICAgICAgICBjZW5kdyA9IDE7Ci0gICAgICAgICAgaWYgKHhmcmJl bCkgYmxlZXAoQlBfTk9URSk7ICAgLyogQ2xvc2Ugd2luZG93LCB0aGVuIGJlZXAuICovCi0gICAg ICAgICAgZnRfd2luID0gMDsgICAgICAgICAgICAgICAgICAgLyogV2luZG93IGNsb3NlZC4gKi8K LSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBjYXNlIFNDUl9FTTogICAgICAgICAg ICAgICAgICAgICAgLyogRXJyb3IgcGFja2V0IChmYXRhbCkgKi8KLSAgICAgICAgS3VpU2V0UHJv cGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRVJSLCAobG9uZykgcyApOwotICAg ICAgICBpZiAoeGZyYmVsKSBibGVlcChCUF9GQUlMKTsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAg IHBjdCA9IG9sZHBjdCA9IDA7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICByZXR1cm47 Ci0KLSAgICAgIGNhc2UgU0NSX1FFOiAgICAgICAgICAgICAgICAgICAgICAvKiBRdWFudGl0eSBl cXVhbHMgKi8KLSAgICAgIGNhc2UgU0NSX1RVOiAgICAgICAgICAgICAgICAgICAgICAvKiBVbmRl bGltaXRlZCB0ZXh0ICovCi0gICAgICBjYXNlIFNDUl9UTjogICAgICAgICAgICAgICAgICAgICAg LyogVGV4dCBkZWxpbWl0ZWQgYXQgc3RhcnQgKi8KLSAgICAgIGNhc2UgU0NSX1RaOiAgICAgICAg ICAgICAgICAgICAgICAvKiBUZXh0IGRlbGltaXRlZCBhdCBlbmQgKi8KLSAgICAgICAgcmV0dXJu OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAoaWdub3JlZCBpbiBmdWxsc2NyZWVuIGRpc3Bs YXkpICovCi0KLSAgICAgIGNhc2UgU0NSX1hEOiAgICAgICAgICAgICAgICAgICAgICAvKiBYLXBh Y2tldCBkYXRhICovCi0gICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7Ci0gICAgICAgIEt1aVNldFBy b3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX05BTSwgKGxvbmcpIHMgKTsKLSAg ICAgICAgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9DVzogICAgICAgICAgICAgICAgICAgICAg LyogQ2xvc2UgV2luZG93ICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICBwY3QgPSAxMDA7IG9s ZHBjdCA9IDA7ICAgICAgICAgIC8qIFJlc2V0IHRoZXNlIGZvciBuZXh0IHRpbWUuICovCi0jZW5k aWYgLyogQ09NTUVOVCAqLwotICAgICAgICBvbGR0eXAgPSAwOyBvbGRydHQgPSAtMUw7IG9sZHRy eSA9IC0xOyBvbGRsZW4gPSAtMTsKLSAgICAgICAgb2xkdGltID0gLTE7Ci0KLSAgICAgICAgZnRf d2luID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIHRoYXQgd2luZG93IGlzIGNsb3Nl ZC4gKi8KLSAgICAgICAgY2VuZHcgPSAxOyByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NSX0NEOiAg ICAgICAgICAgICAgICAgICAgICAvKiBEaXNwbGF5IGN1cnJlbnQgZGlyZWN0b3J5ICovCi0gICAg ICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0RJUiwgKGxv bmcpIHMgKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgU2F2ZUNtZE1vZGUoMCwgMCk7Ci0jZW5kaWYg LyogT1MyICovCi0gICAgICAgIHJldHVybjsKLQotICAgICAgZGVmYXVsdDogICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEJhZCBjYWxsICovCi0gICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9G SUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfRVJSLAotICAg ICAgICAgICAgICAgICAgICAgICAobG9uZykgIioqKiBzY3JlZW4oKSBjYWxsZWQgd2l0aCBiYWQg ZnVuY3Rpb24gY29kZSAqKioiCi0gICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIHJl dHVybjsKLSAgICB9Ci19Ci0jZW5kaWYgLyogS1VJICovCi0jZW5kaWYgLyogTUFDICovCi0KLSNl bmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBDS19DVVJQT1MKLS8qIER1bW1pZXMgZm9yIHdo ZW4gY3Vyc29yIGNvbnRyb2wgaXMgbm90IHN1cHBvcnRlZCAqLwotaW50Ci1ja19jdXJwb3Mocm93 LCBjb2wpIHsKLSAgICByZXR1cm4oLTEpOwotfQotCi1pbnQKLWNrX2NscygpIHsKLSAgICByZXR1 cm4oLTEpOwotfQotCi1pbnQKLWNrX2NsZW9sKCkgewotICAgIHJldHVybigtMSk7Ci19Ci0jZW5k aWYgLyogQ0tfQ1VSUE9TICovCi0KLSNpZm5kZWYgTk9JS1NECi0jaWZkZWYgSUtTREIKLQotc3Ry dWN0IGlrc2RiZmxkIGRiZmxkW10gPSB7Ci0gICAvKiBPZmZzZXQgICAgTGVuZ3RoICAgIFR5cGUg ICAqLwotICAgIHsgREJfRkxBR1MsIGRCX0ZMQUdTLCBEQlRfSEVYIH0sICAgIC8qICAwIGRiX0ZM QUdTIEZsYWdzICovCi0gICAgeyBEQl9BVFlQRSwgZEJfQVRZUEUsIERCVF9IRVggfSwgICAgLyog IDEgZGJfQVRZUEUgQXV0aCB0eXBlICovCi0gICAgeyBEQl9BTU9ERSwgZEJfQU1PREUsIERCVF9I RVggfSwgICAgLyogIDMgZGJfQU1PREUgQXV0aCBtb2RlICovCi0gICAgeyBEQl9TVEFURSwgZEJf U1RBVEUsIERCVF9IRVggfSwgICAgLyogIDIgZGJfU1RBVEUgU3RhdGUgKi8KLSAgICB7IERCX01Z UElELCBkQl9NWVBJRCwgREJUX0hFWCB9LCAgICAvKiAgNSBkYl9NWVBJRCBQSUQgKi8KLSAgICB7 IERCX1NBRERSLCBkQl9TQUREUiwgREJUX0hFWCB9LCAgICAvKiAgNCBkYl9TQUREUiBTZXJ2ZXIg YWRkcmVzcyAqLwotICAgIHsgREJfQ0FERFIsIGRCX0NBRERSLCBEQlRfSEVYIH0sICAgIC8qICA2 IGRiX0NBRERSIENsaWVudCBhZGRyZXNzICovCi0gICAgeyBEQl9TVEFSVCwgZEJfU1RBUlQsIERC VF9EQVQgfSwgICAgLyogIDcgZGJfU1RBUlQgU2Vzc2lvbiBzdGFydCAqLwotICAgIHsgREJfTEFT VFUsIGRCX0xBU1RVLCBEQlRfREFUIH0sICAgIC8qICA4IGRiX0xBU1RVIExhc3QgdXBkYXRlICov Ci0gICAgeyBEQl9VTEVOLCAgZEJfVUxFTiwgIERCVF9IRVggfSwgICAgLyogIDkgZGJfVUxFTiAg VXNlcm5hbWUgbGVuZ3RoICovCi0gICAgeyBEQl9ETEVOLCAgZEJfRExFTiwgIERCVF9IRVggfSwg ICAgLyogMTAgZGJfRExFTiAgRGlyZWN0b3J5IG5hbWUgbGVuZ3RoICovCi0gICAgeyBEQl9JTEVO LCAgZEJfSUxFTiwgIERCVF9IRVggfSwgICAgLyogMTEgZGJfSUxFTiAgSW5mbyBsZW5ndGggKi8K LSAgICB7IERCX1BBRDEsICBkQl9QQUQxLCAgREJUX1VORCB9LCAgICAvKiAxMiBkYl9QQUQxICAo UmVzZXJ2ZWQpICovCi0gICAgeyBEQl9VU0VSLCAgZEJfVVNFUiwgIERCVF9TVFIgfSwgICAgLyog MTMgZGJfVVNFUiAgVXNlcm5hbWUgKi8KLSAgICB7IERCX0RJUiwgICBkQl9ESVIsICAgREJUX1NU UiB9LCAgICAvKiAxNCBkYl9ESVIgICBDdXJyZW50IERpcmVjdG9yeSAqLwotICAgIHsgREJfSU5G TywgIGRCX0lORk8sICBEQlRfU1RSIH0gICAgIC8qIDE1IGRiX0lORk8gIFN0YXRlLXNwZWNpZmlj IGluZm8gKi8KLX07Ci0KLXN0YXRpYyBjaGFyIGxja25hbVtDS01BWFBBVEgrMV07ICAgICAgICAv KiBMb2NrZmlsZSBwYXRobmFtZSAqLwotc3RhdGljIGNoYXIgdG1wbGNrW0NLTUFYUEFUSCsxXTsg ICAgICAgIC8qIFRlbXBvcmFyeSBsb2NrZmlsZSBuYW1lICovCi0KLXN0YXRpYyBjaGFyICogdXBk bW9kZSA9ICAgICAgICAgICAgICAgICAvKiBVcGRhdGUgbW9kZSBmb3IgZm9wZW4oKSAqLwotI2lm ZGVmIE9TMgotICAicitiIgotI2Vsc2UKLSNpZmRlZiBWTVMKLSAgInIrYiIKLSNlbHNlCi0gICJy KyIKLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgOwotCi0vKiAgRCBCIEkg TiBJIFQgIC0tICBJbml0aWFsaXplIHRoZSBJS1NEIGRhdGFiYXNlLi4uICAqLwotCi1pbnQKLWRi aW5pdCgpIHsKLSAgICBleHRlcm4gaW50IGRiaW5pdGVkOwotICAgIGludCB4ID0gMDsKLSAgICBk ZWJ1ZyhGMTEwLCJkYmluaXQgZGJkaXIgMSIsZGJkaXIsMCk7Ci0gICAgZGVidWcoRjExMCwiZGJp bml0IGRiZmlsZSAxIixkYmZpbGUsMCk7Ci0gICAgaWYgKGRiaW5pdGVkKQotICAgICAgcmV0dXJu KDApOwotI2lmZGVmIE9TMgotICAgIGlmICghZGJkaXIpIHsKLSNpZmRlZiBOVAotICAgICAgICBj aGFyICogcCA9IE5VTEw7Ci0gICAgICAgIGlmICghaXNXaW45NSgpKSB7Ci0gICAgICAgICAgICBw ID0gZ2V0ZW52KCJTeXN0ZW1Sb290Iik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBw ID0gZ2V0ZW52KCJ3aW5ib290ZGlyIik7Ci0gICAgICAgICAgICBpZiAoIXApICBwID0gZ2V0ZW52 KCJ3aW5kaXIiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXApIHAgPSAiQzovIjsKLSAgICAg ICAgZGJkaXIgPSBtYWxsb2Moc3RybGVuKHApKzIpOwotICAgICAgICBzdHJjcHkoZGJkaXIscCk7 CQkvKiBzYWZlICovCi0gICAgICAgIHAgPSBkYmRpcjsKLSAgICAgICAgd2hpbGUgKCpwKSB7Ci0g ICAgICAgICAgICBpZiAoKnAgPT0gJ1xcJykKLSAgICAgICAgICAgICAgKnAgPSAnLyc7Ci0gICAg ICAgICAgICBwKys7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCoocC0xKSAhPSAnLycgKSB7Ci0g ICAgICAgICAgICAqcCsrID0gJy8nOwotICAgICAgICAgICAgKnAgPSAnXDAnOwotICAgICAgICB9 Ci0jZWxzZSAvKiBOVCAqLwotICAgICAgICBtYWtlc3RyKCZkYmRpciwiQzovIik7Ci0jZW5kaWYg LyogTlQgKi8KLSAgICB9Ci0jZWxzZSAvKiBPUzIgKi8KLSAgICBpZiAoIWRiZGlyKQotICAgICAg bWFrZXN0cigmZGJkaXIsSUtfREJBU0VESVIpOwotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAgaWYg KCFkYmZpbGUpIHsKLSAgICAgICAgY2hhciAqIHMgPSAiIjsKLSAgICAgICAgeCA9IHN0cmxlbihk YmRpcik7Ci0gICAgICAgIGlmIChkYmRpclt4LTFdICE9ICcvJykgewotICAgICAgICAgICAgcyA9 ICIvIjsKLSAgICAgICAgICAgIHgrKzsKLSAgICAgICAgfQotICAgICAgICB4ICs9IChpbnQpc3Ry bGVuKElLX0RCQVNFRklMKTsKLSAgICAgICAgZGJmaWxlID0gKGNoYXIgKiltYWxsb2MoeCsxKTsK LSAgICAgICAgc3ByaW50ZihkYmZpbGUsIiVzJXMlcyIsZGJkaXIscyxJS19EQkFTRUZJTCk7Ci0g ICAgfQotICAgIGRlYnVnKEYxMTAsImRiaW5pdCBkYmRpciAyIixkYmRpciwwKTsKLSAgICBkZWJ1 ZyhGMTEwLCJkYmluaXQgZGJmaWxlIDIiLGRiZmlsZSwwKTsKLSAgICBteXBpZCA9IGdldHBpZCgp OyAgICAgICAgICAgICAgICAgICAvKiBHZXQgbXkgcGlkICovCi0gICAgZGVidWcoRjEwMSwiZGJp bml0IG15cGlkIiwiIixteXBpZCk7Ci0KLSAgICBpZiAoIW15aGV4aXBbMF0pIHsgICAgICAgICAg ICAgICAgICAvKiBTZXQgbXkgaGV4IElQIGFkZHJlc3MgKi8KLSNpZmRlZiBUQ1BTT0NLRVQKLSAg ICAgICAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbXl4aXBhZGRyOwotICAgICAgICBpZiAoZ2V0bG9j YWxpcGFkZHIoKSA+IC0xKSB7Ci0gICAgICAgICAgICBteWlwID0gbXl4aXBhZGRyOwotICAgICAg ICAgICAgc3ByaW50ZihteWhleGlwLCIlMDhseCIsbXlpcCk7IC8qIChOZWVkcyBmaXhpbmcgZm9y IElQdjYpICovCi0gICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotICAgICAg ICAgIGNrc3RybmNweShteWhleGlwLCIwMDAwMDAwMCIsOSk7Ci0gICAgfQotICAgIGRlYnVnKEYx MTEsImRiaW5pdCBteWlwIixteWhleGlwLG15aXApOwotICAgIGlmICghcGVlcmhleGlwWzBdKSB7 ICAgICAgICAgICAgICAgIC8qIEdldCBwZWVyJ3MgIGhleCBJUCBhZGRyZXNzICovCi0jaWZkZWYg VENQU09DS0VUCi0gICAgICAgIGV4dGVybiB1bnNpZ25lZCBsb25nIHBlZXJ4aXBhZGRyOwotICAg ICAgICBpZiAoY2tnZXRwZWVyKCkpIHsKLSAgICAgICAgICAgIHBlZXJpcCA9IHBlZXJ4aXBhZGRy OwotICAgICAgICAgICAgc3ByaW50ZihwZWVyaGV4aXAsIiUwOGx4IixwZWVyaXApOyAvKiAoTmVl ZHMgZml4aW5nIGZvciBJUHY2KSAqLwotICAgICAgICAgICAgZGVidWcoRjExMSwiZGJpbml0IHBl ZXJpcCIscGVlcmhleGlwLHBlZXJpcCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBk ZWJ1ZyhGMTAxLCJkYmluaXQgY2tnZXRwZWVyIGZhaWx1cmUiLCIiLGVycm5vKTsKLSAgICAgICAg ICAgIGNrc3RybmNweShwZWVyaGV4aXAsIjAwMDAwMDAwIiw5KTsKLSAgICAgICAgfQotI2Vsc2UK LSAgICAgICAgY2tzdHJuY3B5KHBlZXJoZXhpcCwiMDAwMDAwMDAiLDkpOwotI2VuZGlmIC8qIFRD UFNPQ0tFVCAqLwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJkYmluaXQgcGVlcmlwIixwZWVyaGV4 aXAscGVlcmlwKTsKLSAgICBkZWJ1ZyhGMTAxLCJkYmluaXQgZGJlbmFibGVkIiwiIixkYmVuYWJs ZWQpOwotICAgIGlmIChkYmVuYWJsZWQgJiYgaW5zZXJ2ZXIpIHsKLSAgICAgICAgbXlkYnNsb3Qg PSBnZXRzbG90KCk7Ci0gICAgICAgIGRlYnVnKEYxMTEsImRiaW5pdCBnZXRzbG90Iixja2l0b2Eo aWtkYm9wZW4pLHgpOwotICAgICAgICBpZiAoaWtkYm9wZW4pIGRiaW5pdGVkID0gMTsKLSAgICB9 Ci0gICAgcmV0dXJuKDApOwotfQotCi0vKiAgVSBQIEQgUyBMIE8gVCAgLS0gIFVwZGF0ZSBzbG90 IG4gICovCi0KLS8qCi0gIE9wZW5zIHRoZSBkYXRhYmFzZSBpZiBuZWNlc3NhcnksIHNlZWtzIHRv IHNsb3Qgbiwgd3JpdGVzIGN1cnJlbnQgcmVjb3JkCi0gIGFuZCBhZGRzIGN1cnJlbnQgdGltZSB0 byBsYXN0LXVwZGF0ZSBmaWVsZC4gIG4gaXMgdGhlIHJlY29yZCBzZXF1ZW5jZSBudW1iZXIKLSAg KDAsIDEsIDIsIC4uLiksIG5vdCB0aGUgc2VlayBwb2ludGVyLiAgIFJldHVybnMgLTEgb24gZmFp bHVyZSwgMCBvbiBzdWNjZXNzLgotKi8KLWludAotdXBkc2xvdChuKSBpbnQgbjsgeyAgICAgICAg ICAgICAgICAgICAgIC8qIFVwZGF0ZSBvdXIgc2xvdCAqLwotICAgIGludCByYyA9IDA7Ci0gICAg Q0tfT0ZGX1QgcG9zaXRpb247Ci0KLSAgICBkZWJ1ZyhGMTExLCJ1cGRzbG90IiwiaWtkYm9wZW4i LGlrZGJvcGVuKTsKLSAgICBpZiAoIWlrZGJvcGVuKSAgICAgICAgICAgICAgICAgICAgICAvKiBO b3QgaWYgbm90IG9rICovCi0gICAgICByZXR1cm4oMCk7Ci0gICAgaWYgKCFkYmZwKSB7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogT3BlbiBkYXRhYmFzZSBpZiBub3Qgb3BlbiAqLwotICAgICAg ICBkYmZwID0gZm9wZW4oZGJmaWxlLHVwZG1vZGUpOyAgIC8qIEluIHVwZGF0ZSBuby10cnVuY2F0 ZSBtb2RlICovCi0gICAgICAgIGlmICghZGJmcCkgewotICAgICAgICAgICAgZGVidWcoRjExMCwi dXBkc2xvdCBmb3BlbiBmYWlsZWQiLGRiZmlsZSwwKTsKLSAgICAgICAgICAgIGlrZGJvcGVuID0g MDsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLyogZGVi dWcoRjExMSwidXBkc2xvdCBkYmZpbGUiLGRiZmlsZSxkYmZwKTsgKi8KLSAgICBwb3NpdGlvbiA9 IG4gKiBEQl9SRUNMOwotICAgIGlmIChDS0ZTRUVLKGRiZnAscG9zaXRpb24sMCkgPCAwKSB7CS8q IFNlZWsgdG8gZGVzaXJlZCBzbG90ICovCi0gICAgICAgIGRlYnVnKEYxMTEsInVwZHNsb3QgZnNl ZWsgZmFpbGVkIixkYmZpbGUsbXlkYnNlZWspOwotICAgICAgICBpa2Rib3BlbiA9IDA7Ci0gICAg ICAgIHJjID0gLTE7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLyogVXBkYXRlIHRoZSB1cGRhdGUg dGltZSAqLwotICAgICAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9MQVNUVV0ub2ZmXSwKLSAg ICAgICAgICAgICAgICBja2RhdGUoKSwKLSAgICAgICAgICAgICAgICBkYmZsZFtkYl9MQVNUVV0u bGVuCi0gICAgICAgICAgICAgICAgKTsKLSAgICAgICAgaWYgKGZ3cml0ZShkYnJlYywxLERCX1JF Q0wsZGJmcCkgPCBEQl9SRUNMKSB7IC8qIFdyaXRlIHRoZSByZWNvcmQgKi8KLSAgICAgICAgICAg IGRlYnVnKEYxMTAsInVwZHNsb3QgZndyaXRlIGZhaWxlZCIsZGJmaWxlLDApOwotICAgICAgICAg ICAgaWtkYm9wZW4gPSAwOwotICAgICAgICAgICAgcmMgPSAtMTsKLSAgICAgICAgfSBlbHNlIHsg ICAgICAgICAgICAgICAgICAgICAgICAvKiBGbHVzaCB0aGUgd3JpdGUgKi8KLSAgICAgICAgICAg IGZmbHVzaChkYmZwKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4ocmMpOwotfQotCi0v KiAgSSBOIEkgVCBTIEwgTyBUIC0tICBJbml0aWFsaXplIHNsb3QgbiB3aXRoIG15IGluZm8gICov Ci0KLWludAotaW5pdHNsb3QobikgaW50IG47IHsgICAgICAgICAgICAgICAgICAgIC8qIEluaXRp YWxpemUgc2xvdCAqLwotICAgIGludCBrOwotI2lmZGVmIFRDUFNPQ0tFVAotICAgIGV4dGVybiB1 bnNpZ25lZCBsb25nIHBlZXJ4aXBhZGRyOwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotCi0gICAg ZGVidWcoRjEwMSwiaW5pdHNsb3QiLCIiLG4pOwotCi0jaWZkZWYgVVNFX01FTUNQWQotICAgIG1l bXNldChkYnJlYywzMixEQl9SRUNMKTsKLSNlbHNlCi0gICAgZm9yIChrID0gMDsgayA8IERCX1JF Q0w7IGsrKykKLSAgICAgIGRicmVjW2tdID0gJ1wwNDAnOwotI2VuZGlmIC8qIFVTRV9NRU1DUFkg Ki8KLQotICAgIG15ZmxhZ3MgPSBEQkZfSU5VU0U7ICAgICAgICAgICAgICAgIC8qIFNldCBpbi11 c2UgZmxhZyAqLwotICAgIG15c3RhdGUgPSBXX05PVEhJTkc7Ci0gICAgbXlhdHlwZSA9IDBMOwot ICAgIG15YW1vZGUgPSAwTDsKLQotICAgIGsgPSBkYmZsZFtkYl9GTEFHU10ubGVuOyAgICAgICAg ICAgIC8qIExlbmd0aCBvZiBmbGFncyBmaWVsZCAqLwotICAgIHN0cm5jcHkoJmRicmVjW2RiZmxk W2RiX0ZMQUdTXS5vZmZdLHVsb25ndG9oZXgobXlmbGFncyxrKSxrKTsKLQotICAgIGsgPSBkYmZs ZFtkYl9BVFlQRV0ubGVuOwotICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX0FUWVBFXS5vZmZd LHVsb25ndG9oZXgobXlhdHlwZSxrKSxrKTsKLQotICAgIGsgPSBkYmZsZFtkYl9BTU9ERV0ubGVu OwotICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX0FNT0RFXS5vZmZdLHVsb25ndG9oZXgobXlh bW9kZSxrKSxrKTsKLQotICAgIGsgPSBkYmZsZFtkYl9TVEFURV0ubGVuOwotICAgIHN0cm5jcHko JmRicmVjW2RiZmxkW2RiX1NUQVRFXS5vZmZdLHVsb25ndG9oZXgobXlzdGF0ZSxrKSxrKTsKLQot ICAgIGsgPSBkYmZsZFtkYl9TQUREUl0ubGVuOwotICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2Ri X1NBRERSXS5vZmZdLHVsb25ndG9oZXgobXlpcCxrKSxrKTsKLQotI2lmZGVmIFRDUFNPQ0tFVAot ICAgIGNrZ2V0cGVlcigpOwotICAgIGsgPSBkYmZsZFtkYl9DQUREUl0ubGVuOwotICAgIHN0cm5j cHkoJmRicmVjW2RiZmxkW2RiX0NBRERSXS5vZmZdLHVsb25ndG9oZXgocGVlcnhpcGFkZHIsayks ayk7Ci0jZWxzZQotICAgIGsgPSBkYmZsZFtkYl9DQUREUl0ubGVuOwotICAgIHN0cm5jcHkoJmRi cmVjW2RiZmxkW2RiX0NBRERSXS5vZmZdLHVsb25ndG9oZXgoMEwsayksayk7Ci0jZW5kaWYgLyog VENQU09DS0VUICovCi0KLSAgICBrID0gZGJmbGRbZGJfTVlQSURdLmxlbjsKLSAgICBzdHJuY3B5 KCZkYnJlY1tkYmZsZFtkYl9NWVBJRF0ub2ZmXSx1bG9uZ3RvaGV4KG15cGlkLGspLGspOwotCi0g ICAgayA9IGRiZmxkW2RiX1NUQVJUXS5sZW47Ci0gICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJf U1RBUlRdLm9mZl0sY2tkYXRlKCksayk7Ci0KLSAgICBrID0gZGJmbGRbZGJfVUxFTl0ubGVuOwot ICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX1VMRU5dLm9mZl0sIjAwMDAiLDQpOwotCi0gICAg ayA9IGRiZmxkW2RiX0RMRU5dLmxlbjsKLSAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9ETEVO XS5vZmZdLCIwMDAwIiw0KTsKLQotICAgIGsgPSBkYmZsZFtkYl9JTEVOXS5sZW47Ci0gICAgc3Ry bmNweSgmZGJyZWNbZGJmbGRbZGJfSUxFTl0ub2ZmXSwiMDAwMCIsNCk7Ci0KLSAgICBzdHJuY3B5 KCZkYnJlY1tkYmZsZFtkYl9JTkZPXS5vZmZdLCJJTklUIiw0KTsKLSAgICByZXR1cm4odXBkc2xv dChuKSk7Ci19Ci0KLWludAotc2xvdHN0YXRlKHgsczEsczIsczMpIGludCB4OyBjaGFyICpzMSwg KnMyLCAqczM7IHsKLSAgICBpbnQgaywgbDEsIGwyLCBsMywgejsKLSAgICBteXN0YXRlID0geDsK LSAgICBkZWJ1ZyhGMTAxLCJzbG90c3RhdGUgaWtkYm9wZW4iLCIiLGlrZGJvcGVuKTsKLSAgICBp ZiAoIWlrZGJvcGVuKQotICAgICAgcmV0dXJuKC0xKTsKLSAgICBpZiAoIXMxKSBzMSA9ICIiOwot ICAgIGwxID0gc3RybGVuKHMxKTsKLSAgICBpZiAoIXMyKSBzMiA9ICIiOwotICAgIGwyID0gc3Ry bGVuKHMyKTsKLSAgICBpZiAoIXMzKSBzMyA9ICIiOwotICAgIGwzID0gc3RybGVuKHMzKTsKLSAg ICBzdHJuY3B5KCZkYnJlY1tEQl9TVEFURV0sdWxvbmd0b2hleChteXN0YXRlLDQpLDQpOwotICAg IGsgPSBkYmZsZFtkYl9JTEVOXS5sZW47Ci0gICAgeiA9IGwxICsgbDIgKyBsMyArIDI7Ci0gICAg aWYgKHogPiBkQl9JTkZPKQotICAgICAgeiA9IGRCX0lORk87Ci0gICAgc3RybmNweSgmZGJyZWNb REJfSUxFTl0sdWxvbmd0b2hleCgodW5zaWduZWQgbG9uZyl6LGspLGspOwotICAgIGsgPSBkYmZs ZFtkYl9JTkZPXS5sZW47Ci0gICAgeiA9IGRiZmxkW2RiX0lORk9dLm9mZjsKLSAgICBpZiAobDEg PD0gaykgewotICAgICAgICBsc2V0KCZkYnJlY1t6XSxzMSxsMSsxLDMyKTsKLSAgICAgICAgeiAr PSBsMSsxOwotICAgICAgICBrIC09IGwxKzE7Ci0gICAgICAgIGlmIChsMiA8PSBrKSB7Ci0gICAg ICAgICAgICBsc2V0KCZkYnJlY1t6XSxzMixsMisxLDMyKTsKLSAgICAgICAgICAgIHogKz0gbDIr MTsKLSAgICAgICAgICAgIGsgLT0gbDIrMTsKLSAgICAgICAgICAgIGlmIChsMyA8PSBrKQotICAg ICAgICAgICAgICBsc2V0KCZkYnJlY1t6XSxzMyxrLDMyKTsKLSAgICAgICAgfQotICAgIH0KLSNp ZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsKLSAgICAgICAgY2hhciBidWZbMTI4XTsKLSAg ICAgICAgaW50IGk7Ci0gICAgICAgIHN0cm5jcHkoYnVmLCZkYnJlY1tEQl9JTkZPXSwxMjcpOwot ICAgICAgICBidWZbMTI3XSA9IE5VTDsKLSAgICAgICAgZm9yIChpID0gMTI2OyBpID4gMCAmJiBi dWZbaV0gPT0gMzI7IGktLSkgYnVmW2ldID0gMDsKLSAgICAgICAgZGVidWcoRjExMSwic2xvdHN0 YXRlIixidWYsbXlzdGF0ZSk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0gICAgeiA9IHVw ZHNsb3QobXlkYnNsb3QpOwotICAgIGRlYnVnKEYxMDEsInNsb3RzdGF0ZSB1cGRzbG90IiwiIix6 KTsKLSAgICByZXR1cm4oeik7Ci19Ci0KLWludAotc2xvdGRpcihzMSxzMikgY2hhciAqIHMxLCAq IHMyOyB7ICAgICAgIC8qIFVwZGF0ZSBjdXJyZW50IGRpcmVjdG9yeSAqLwotICAgIGludCBrLCBs ZW4xLCBsZW4yOwotICAgIGlmICghaWtkYm9wZW4pCi0gICAgICByZXR1cm4oLTEpOwotICAgIGlm ICghczEpIHMxID0gIiI7Ci0gICAgaWYgKCFzMikgczIgPSAiIjsKLSAgICBsZW4xID0gc3RybGVu KHMxKTsKLSAgICBsZW4yID0gc3RybGVuKHMyKTsKLSAgICBrID0gZGJmbGRbZGJfRExFTl0ubGVu OwotICAgIHN0cm5jcHkoJmRicmVjW0RCX0RMRU5dLHVsb25ndG9oZXgoKHVuc2lnbmVkIGxvbmcp KGxlbjErbGVuMiksayksayk7Ci0gICAgayA9IGRiZmxkW2RiX0RJUl0ubGVuOwotICAgIGlmIChs ZW4xID4gMCkgewotICAgICAgICBsc2V0KCZkYnJlY1tkYmZsZFtkYl9ESVJdLm9mZl0sczEsbGVu MSwzMik7Ci0gICAgICAgIGxzZXQoJmRicmVjW2RiZmxkW2RiX0RJUl0ub2ZmK2xlbjFdLHMyLGst bGVuMSwzMik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbHNldCgmZGJyZWNbZGJmbGRbZGJfRElS XS5vZmZdLHMyLGssMzIpOwotICAgIH0KLSAgICByZXR1cm4odXBkc2xvdChteWRic2xvdCkpOwot fQotCi0vKiAgRiBSIEUgRSBTIEwgTyBUICAtLSAgRnJlZSBzbG90IG4gICovCi0KLWludAotZnJl ZXNsb3QobikgaW50IG47IHsKLSAgICBpbnQgazsKLSAgICBpZiAoIWlrZGJvcGVuKQotICAgICAg cmV0dXJuKDApOwotICAgIGRiZmxhZ3MgPSAwTDsKLSAgICBpZiAobiA9PSBteWRic2xvdCkgewot ICAgICAgICBkYmZsYWdzID0gbXlmbGFncyAmIH5EQkZfSU5VU0U7Ci0gICAgICAgIGRiZmxhZ3Mg Jj0gfkRCRl9MT0dHRUQ7Ci0gICAgfQotICAgIGsgPSBkYmZsZFtkYl9GTEFHU10ubGVuOwotICAg IHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX0ZMQUdTXS5vZmZdLHVsb25ndG9oZXgoZGJmbGFncyxr KSxrKTsKLSAgICByZXR1cm4odXBkc2xvdChuKSk7Ci19Ci0KLS8qICBHIEUgVCBTIEwgTyBUICAt LSAgRmluZCBhIGZyZWUgZGF0YWJhc2Ugc2xvdDsgcmV0dXJucyBzbG90IG51bWJlciAgKi8KLQot I2lmZGVmIFVOSVgKLSNpbmNsdWRlIDxmY250bC5oPgkJCS8qIEZvciBjcmVhdCgpICovCi0jZW5k aWYJLyogVU5JWCAqLwotCi1pbnQKLWdldHNsb3QoKSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBGaW5kIGEgZnJlZSBzbG90IGZvciB1cyAqLwotICAgIEZJTEUgKiByZnAgPSBOVUxM OyAgICAgICAgICAgICAgICAgIC8qIFJldHVybnMgc2xvdCBudW1iZXIgKDAsIDEsIC4uLikgKi8K LSAgICBjaGFyIGlkc3RyaW5nWzY0XTsgICAgICAgICAgICAgICAgICAvKiBQSUQgc3RyaW5nIGJ1 ZmZlciAoZGVjaW1hbCkgKi8KLSAgICBjaGFyIHBpZGJ1Zls2NF0sICogczsKLSAgICBpbnQgaiwg aywgbiwgeCwgcmMgPSAtMTsKLSAgICBpbnQgbG9ja2ZkLCB0cmllcywgaGF2ZXNsb3QgPSAwOwot ICAgIGxvbmcgbG9ja3BpZDsKLSAgICBDS19PRkZfVCBpOwotICAgIC8qIGNoYXIgaXBidWZbMTdd OyAqLwotCi0gICAgaWYgKCFteWhleGlwWzBdKSAgICAgICAgICAgICAgICAgICAgLyogU2V0IG15 IGhleCBJUCBhZGRyZXNzIGlmIG5vdCBzZXQgKi8KLSAgICAgIGNrc3RybmNweSgoY2hhciAqKW15 aGV4aXAsIjdGMDAwMDAxIiwzMyk7Ci0gICAgc3ByaW50ZihpZHN0cmluZywiJTA4bHg6JTAxMGxk XG4iLG15aXAsbXlwaWQpOwotICAgIGRlYnVnKEYxMTAsImdldHNsb3QgaWRzdHJpbmciLCBpZHN0 cmluZywgMCk7Ci0KLSAgICAvKiBNYWtlIHRlbXBvcmFyeSBsb2NrZmlsZSBuYW1lIElQLlBJRCAo aGV4LmhleCkgKi8KLSAgICAvKiBUaGlzIHNob3VsZCBmaXQgaW4gMTQgY2hhcnMgLS0gaHVnZSBQ SURzIGFyZSB1c3VhbGx5IG5vdCBwb3NzaWJsZSAqLwotICAgIC8qIG9uIDE0LWNoYXIgZmlsZW5h bWUgc3lzdGVtcy4gKi8KLQotICAgIHNwcmludGYodG1wbGNrLCIlcyUwOGx4LiVseCIsZGJkaXIs bXlpcCxteXBpZCk7Ci0gICAgZGVidWcoRjExMCwiZ2V0c2xvdCB0ZW1wZmlsZSIsdG1wbGNrLDAp OwotCi0gICAgLyogTWFrZSBhIHRlbXBvcmFyeSBmaWxlICovCi0KLSAgICBsb2NrZmQgPSBjcmVh dCh0bXBsY2ssIDA2MDApOwkvKiBCVVQgVEhJUyBJU04nVCBQT1JUQUJMRSAqLwotICAgIGlmIChs b2NrZmQgPCAwKSB7Ci0gICAgICAgIGRlYnVnKEYxMTEsImdldHNsb2NrIHRlbXAgbG9ja2ZpbGUg Y3JlYXRlIGZhaWx1cmUiLCB0bXBsY2ssIGVycm5vKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAg ICB9Ci0gICAgLyogV3JpdGUgbXkgKGRlY2ltYWwpIFBJRCBpbnRvIHRoZSB0ZW1wIGZpbGUgKi8K LQotICAgIHdyaXRlKGxvY2tmZCxpZHN0cmluZywoaW50KXN0cmxlbihpZHN0cmluZykpOwotICAg IGlmIChjbG9zZShsb2NrZmQpIDwgMCkgeyAgICAgICAgICAgIC8qIENsb3NlIGxvY2tmaWxlICov Ci0gICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgZXJyb3IgY2xvc2luZyB0ZW1wIGxvY2tmaWxl IiwgIiIsIGVycm5vKTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLSAgICB9Ci0gICAgc3ByaW50Zihs Y2tuYW0sIiVzJXMiLGRiZGlyLElLX0xPQ0tGSUxFKTsgLyogQnVpbGQgbG9ja2ZpbGUgbmFtZSAq LwotICAgIGRlYnVnKEYxMTAsImdldHNsb3QgbG9ja2ZpbGUiLGxja25hbSwwKTsKLQotICAgIHJm cCA9IGZvcGVuKGxja25hbSwiciIpOyAgICAgICAgICAgIC8qIFNlZSBpZiBsb2NrZmlsZSBleGlz dHMgKi8KLSAgICBpZiAocmZwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBzby4u LiAqLwotICAgICAgICByc2V0KHBpZGJ1ZiwiIiw2NCwwKTsKLSAgICAgICAgeCA9IGZyZWFkKHBp ZGJ1ZiwxLDYzLHJmcCk7ICAgICAvKiBSZWFkIElEIHN0cmluZyBmcm9tIGl0ICovCi0gICAgICAg IGZjbG9zZShyZnApOyAgICAgICAgICAgICAgICAgICAgLyogYW5kIGNsb3NlIGl0IHF1aWNrbHkg Ki8KLSAgICAgICAgZGVidWcoRjExMCwiZ2V0c2xvdCBsb2NrIGV4aXN0cyIscGlkYnVmLDApOwot ICAgICAgICBpZiAoeCA+IDApIHsgICAgICAgICAgICAgICAgICAgIC8qIElmIHdlIGhhdmUgYSBQ SUQsIGNoZWNrIGl0ICovCi0gICAgICAgICAgICBjaGFyICogcyA9IHBpZGJ1ZjsKLSAgICAgICAg ICAgIHdoaWxlICgqcykgewotICAgICAgICAgICAgICAgIGlmIChpc2xvd2VyKCpzKSkgKnMgPSB0 b3VwcGVyKCpzKTsKLSAgICAgICAgICAgICAgICBpZiAoKnMgPT0gJzonKSB7Ci0gICAgICAgICAg ICAgICAgICAgICpzID0gTlVMOwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJnZXRz bG90IGxvY2sgSVAiLHBpZGJ1ZiwwKTsKLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwi Z3Rlc2xvdCBteSAgIElQIixteWhleGlwLDApOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXN0 cmNtcChwaWRidWYsbXloZXhpcCkpIHsgLyogU2FtZSBJUCBhZGRyZXNzPyAqLwotICAgICAgICAg ICAgICAgICAgICAgICAgbG9ja3BpZCA9IGF0b2wocysxKTsgLyogWWVzLCBub3cgZ2V0IFBJRCAq LwotICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBsb2NrcGlkIiwi Iixsb2NrcGlkKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgaWYgUElEIGxv Y2twaWQgb24gdGhpcyBjb21wdXRlciBpcyBhbGl2ZSAqLwotICAgICAgICAgICAgICAgICAgICAg ICAgeCA9IHpjaGtwaWQobG9ja3BpZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXgp IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJnZXRzbG90IFBJRCBz dGFsZSxyZW1vdmluZyBsb2NrIiwiIiwwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bmxpbmsobGNrbmFtKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgIHMrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgIGRlYnVnKEYxMTEsImdldHNsb3QgbG9ja2ZpbGUgb3BlbiBmYWlsdXJlIixs Y2tuYW0sZXJybm8pOwotICAgICAgICB9Ci0gICAgfQotICAgIC8qIFRyeSBJS19MQ0tUUklFUyAo MTYpIHRpbWVzIHRvIHJlbmFtZSB0ZW1wIGZpbGUgdG8gbG9ja2ZpbGUgKi8KLQotICAgIGZvciAo dHJpZXMgPSBJS19MQ0tUUklFUzsgdHJpZXMgPiAwOyB0cmllcy0tKSB7Ci0gICAgICAgIGlmICh6 cmVuYW1lKHRtcGxjayxsY2tuYW0pID09IDApCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRl YnVnKEYxMDEsImdldHNsb3QgZGF0YWJhc2UgbG9ja2VkIGJ5IHBpZCIsICIiLCBkYnBpZCk7Ci0g ICAgICAgIHNsZWVwKElLX0xDS1NMRUVQKTsKLSAgICB9Ci0gICAgaWYgKHRyaWVzIDwgMSkgeyAg ICAgICAgICAgICAgICAgICAgLyogQ291bGRuJ3QgKi8KLSAgICAgICAgZGVidWcoRjExMCwiZ2V0 c2xvdCBjcmVhdGUgbG9jayBmYWlsdXJlIixsY2tuYW0sMCk7Ci0gICAgICAgIHJldHVybigtMSk7 Ci0gICAgfQotICAgIC8qIEhhdmUgbG9jaywgb3BlbiBkYXRhYmFzZSAqLwotCi0gICAgZGVidWco RjExMCwiZ2V0c2xvdCBoYXMgbG9jayIsbGNrbmFtLDApOyAvKiBIYXZlIGxvY2sgKi8KLQotICAg IGlmICghZGJmaWxlKQotICAgICAgcmV0dXJuKC0xKTsKLQotICAgIC8qIElmIGRhdGFiYXNlIGRv ZXNuJ3QgZXhpc3QsIGNyZWF0ZSBpdC4gKi8KLQotICAgIGRlYnVnKEYxMTAsImdldHNsb3QgZGJm aWxlIixkYmZpbGUsMCk7Ci0gICAgaWYgKHpjaGtpKGRiZmlsZSkgPCAwKSB7Ci0gICAgICAgIGRl YnVnKEYxMTAsImdldHNsb3QgY3JlYXRpbmcgbmV3IGRhdGFiYXNlIixkYmZpbGUsMCk7Ci0gICAg ICAgIHggPSBjcmVhdChkYmZpbGUsMDY2MCk7Ci0gICAgICAgIGlmICh4IDwgMCkgewotICAgICAg ICAgICAgZGVidWcoRjExMSwiZ2V0c2xvdCBjcmVhdCgpIGZhaWxlZCIsIGRiZmlsZSwgZXJybm8p OwotICAgICAgICAgICAgZ290byB4c2xvdDsKLSAgICAgICAgfQotICAgICAgICBjbG9zZSh4KTsK LSAgICB9Ci0gICAgZGJmcCA9IGZvcGVuKGRiZmlsZSx1cGRtb2RlKTsgICAgICAgLyogT3BlbiBp dCBpbiB1cGRhdGUgbW9kZSAqLwotICAgIGlmICghZGJmcCkgewotICAgICAgICBkZWJ1ZyhGMTEx LCJnZXRzbG90IGZvcGVuIGZhaWxlZCIsZGJmaWxlLGVycm5vKTsKLSAgICAgICAgZ290byB4c2xv dDsKLSAgICB9Ci0gICAgLyogTm93IGZpbmQgYSBmcmVlIChvciBuZXcpIHNsb3QuLi4gKi8KLQot ICAgIGRibGFzdHVzZWQgPSAwTDsgICAgICAgICAgICAgICAgICAgIC8qIFNlZWsgcG9pbnRlciB0 byBsYXN0IHJlY29yZCBpbnVzZSAqLwotICAgIG15ZGJzZWVrID0gMEw7ICAgICAgICAgICAgICAg ICAgICAgIC8qIFNlZWsgcG9pbnRlciBmb3IgbXkgcmVjb3JkICovCi0KLSAgICAvKiBRdWlja2x5 IHJlYWQgdGhlIHdob2xlIGRhdGFiYXNlOyBuID0gcmVjb3JkIGNvdW50ZXIsIGkgPSBzZWVrIHBv aW50ZXIgKi8KLQotICAgIGZvciAobiA9IDAsIGkgPSAwOyAhZmVvZihkYmZwKTsgaSArPSBEQl9S RUNMLCBuKyspIHsKLSAgICAgICAgeCA9IGZyZWFkKGRicmVjLDEsREJfUkVDTCxkYmZwKTsgLyog UmVhZCBhIHJlY29yZCAqLwotICAgICAgICBpZiAoeCA8IDEpICAgICAgICAgICAgICAgICAgICAg IC8qIEVPRiBub3QgY2F1Z2h0IGJ5IGZlb2YoKSAqLwotICAgICAgICAgIGJyZWFrOwotI2lmbmRl ZiBOT0ZUUlVOQ0FURQotICAgICAgICBpZiAoeCAhPSBEQl9SRUNMKSB7ICAgICAgICAgICAgIC8q IFdhdGNoIG91dCBmb3IgdHJhaWxpbmcganVuayAqLwotICAgICAgICAgICAgZGVidWcoRjEwMSwi Z2V0c2xvdCBiYWQgc2l6ZSIsIiIseCk7ICAvKiAoU2hvdWxkbid0IGhhcHBlbi4uLikgKi8KLSNp ZmRlZiBDT0hFUkVOVAotICAgICAgICAgICAgY2hzaXplKGZpbGVubyhkYmZwKSxpKTsKLSNlbHNl Ci0gICAgICAgICAgICBmdHJ1bmNhdGUoZmlsZW5vKGRiZnApLChDS19PRkZfVClpKTsKLSNlbmRp ZiAvKiBDT0hFUkVOVCAqLwotICAgICAgICAgICAgeCA9IDA7Ci0gICAgICAgICAgICBDS0ZTRUVL KGRiZnAsaSwwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0jZW5kaWYgLyogTk9G VFJVTkNBVEUgKi8KLSAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCByZWNvcmQiLCIiLG4pOwot ICAgICAgICBrID0gZGJmbGRbZGJfRkxBR1NdLm9mZjsKLSAgICAgICAgaiA9IGRiZmxkW2RiX0ZM QUdTXS5sZW47Ci0gICAgICAgIGRiZmxhZ3MgPSBoZXh0b3Vsb25nKCZkYnJlY1trXSxqKTsKLSAg ICAgICAgZGVidWcoRjAwMSwiZ2V0c2xvdCBkYmZsYWdzIiwiIixkYmZsYWdzKTsKLSAgICAgICAg ayA9IGRiZmxkW2RiX01ZUElEXS5vZmY7Ci0gICAgICAgIGogPSBkYmZsZFtkYl9NWVBJRF0ubGVu OwotICAgICAgICBkYnBpZCAgPSBoZXh0b3Vsb25nKCZkYnJlY1trXSxqKTsKLSAgICAgICAgZGVi dWcoRjAwMSwiZ2V0c2xvdCBkYnBpZCIsIiIsZGJwaWQpOwotICAgICAgICBrID0gZGJmbGRbZGJf U0FERFJdLm9mZjsKLSAgICAgICAgaiA9IGRiZmxkW2RiX1NBRERSXS5sZW47Ci0gICAgICAgIGRi aXAgPSBoZXh0b3Vsb25nKCZkYnJlY1trXSxqKTsKLSAgICAgICAgZGVidWcoRjAwMSwiZ2V0c2xv dCBkYmlwIiwiIixkYmlwKTsKLQotICAgICAgICBpZiAoZGJmbGFncyAmIERCRl9JTlVTRSkgeyAg ICAgIC8qIFJlbWVtYmVyIGxhc3Qgc2xvdCBpbiB1c2UgKi8KLSAgICAgICAgICAgIHggPSAwOyAg ICAgICAgICAgICAgICAgICAgICAvKiBNYWtlIHN1cmUgaXQncyBSRUFMTFkgaW4gdXNlICovCi0g ICAgICAgICAgICBpZiAoZGJwaWQgPT0gbXlwaWQgJiYgZGJpcCA9PSBteWlwKSB7IC8qIENoZWNr IGZvciBQSUQgPT0gbXkgUElEICovCi0gICAgICAgICAgICAgICAgeCA9IDE7Ci0gICAgICAgICAg ICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCByZWNvcmQgcGlkIiwiIixkYnBpZCk7Ci0gICAgICAg ICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgLyogT3IgZm9yIHN0YWxlIFBJRCAqLwot ICAgICAgICAgICAgICAgIHggPSB6Y2hrcGlkKGRicGlkKTsKLSAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTAxLCJnZXRzbG90IHpjaGtwaWQoKSIsIiIseCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICBpZiAoIXgpIHsgICAgICAgICAgICAgICAgICAgLyogQm9ndXMgcmVjb3JkICovCi0gICAg ICAgICAgICAgICAgeCA9IGZyZWVzbG90KG4pOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEs ImdldHNsb3Qgc3RhbGUgcmVjb3JkIHBpZDogZnJlZXNsb3QoKSIsIiIseCk7Ci0gICAgICAgICAg ICAgICAgaWYgKHggPiAtMSAmJiAhaGF2ZXNsb3QpCi0gICAgICAgICAgICAgICAgICBkYmZsYWdz ID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiBJdCdzIHJl YWxseSBpbiB1c2UgKi8KLSAgICAgICAgICAgICAgICBkYmxhc3R1c2VkID0gaTsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIWhhdmVzbG90KSB7ICAgICAgICAgICAgICAg IC8qIElmIEkgZG9uJ3QgaGF2ZSBhIHNsb3QgeWV0ICovCi0gICAgICAgICAgICBpZiAoIShkYmZs YWdzICYgREJGX0lOVVNFKSkgeyAgICAgICAvKiBDbGFpbSB0aGlzIG9uZSAqLwotICAgICAgICAg ICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgZnJlZSBzbG90IiwgIiIsIG4pOwotICAgICAgICAg ICAgICAgIGhhdmVzbG90ID0gMTsKLSAgICAgICAgICAgICAgICBteWRic2VlayA9IGk7Ci0gICAg ICAgICAgICAgICAgbXlkYnNsb3QgPSBuOyAgICAgICAgICAgLyogQnV0IGtlZXAgZ29pbmcuLi4g Ki8KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAvKiBDb21lIGhlcmUgd2l0 aCBpID09IHNlZWsgcG9pbnRlciB0byBmaXJzdCByZWNvcmQgYWZ0ZXIgZW9mICovCi0KLSAgICBp ZiAoIWhhdmVzbG90KSB7ICAgICAgICAgICAgICAgICAgICAvKiBGb3VuZCBubyBmcmVlIHNsb3Qg c28gYWRkIHRvIGVuZCAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IG5ldyBzbG90Iiwi IixuKTsKLSAgICAgICAgaGF2ZXNsb3QgPSAxOwotICAgICAgICBteWRic2VlayA9IGk7Ci0gICAg ICAgIG15ZGJzbG90ID0gbjsKLSAgICB9Ci0gICAgaWtkYm9wZW4gPSAxOyAgICAgICAgICAgICAg ICAgICAgICAgLyogT0sgdG8gbWFrZSBkYXRhYmFzZSBlbnRyaWVzICovCi0gICAgZGVidWcoRjEw MSwiZ2V0c2xvdCByZWNvcmRzIiwiIixuKTsKLSAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IGRibGFz dHVzZWQiLCIiLGRibGFzdHVzZWQpOwotICAgIGRlYnVnKEYxMDEsImdldHNsb3QgaSIsIiIsaSk7 Ci0KLSAgICAvKiBUcmltIHN0YWxlIHJlY29yZHMgZnJvbSBlbmQgKi8KLQotI2lmbmRlZiBOT0ZU UlVOQ0FURQotICAgIGlmIChpID4gZGJsYXN0dXNlZCtEQl9SRUNMKSB7Ci0gICAgICAgIGRlYnVn KEYxMDEsImdldHNsb3QgdHJ1bmNhdGluZyBhdCIsIiIsZGJsYXN0dXNlZCtEQl9SRUNMKTsKLSNp ZmRlZiBDT0hFUkVOVAotICAgICAgICB4ID0gY2hzaXplKGZpbGVubyhkYmZwKSxkYmxhc3R1c2Vk K0RCX1JFQ0wpOwotI2Vsc2UKLSAgICAgICAgeCA9IGZ0cnVuY2F0ZShmaWxlbm8oZGJmcCksKENL X09GRl9UKShkYmxhc3R1c2VkK0RCX1JFQ0wpKTsKLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotICAg ICAgICBpZiAoeCA8IDApICAgICAgICAgICAgICAgICAgICAgIC8qIChOb3QgZmF0YWwpICovCi0g ICAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBmdHJ1bmNhdGUgZmFpbGVkIiwgIiIsIGVycm5v KTsKLSAgICB9Ci0jZW5kaWYgLyogTk9GVFJVTkNBVEUgKi8KLQotICAgIC8qIEluaXRpYWxpemUg bXkgcmVjb3JkICovCi0KLSAgICBpZiAoaW5pdHNsb3QobXlkYnNsb3QpIDwgMCkgewotICAgICAg ICBkZWJ1ZyhGMTAxLCJnZXRzbG90IGluaXRzbG90KCkgZXJyb3IiLCIiLG4pOwotICAgICAgICBp a2Rib3BlbiA9IDA7Ci0gICAgICAgIGdvdG8geHNsb3Q7Ci0gICAgfQotICAgIGRlYnVnKEYxMDEs ImdldHNsb3QgT0siLCIiLG15ZGJzbG90KTsKLSAgICByYyA9IG15ZGJzbG90OyAgICAgICAgICAg ICAgICAgICAgICAvKiBPSyByZXR1cm4gY29kZSAqLwotCi0gIHhzbG90OiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogVW5sb2NrIHRoZSBkYXRhYmFzZSBhbmQgcmV0dXJuICovCi0g ICAgaWYgKHVubGluayhsY2tuYW0pIDwgMCkgewotICAgICAgICBkZWJ1ZyhGMTExLCJnZXRzbG90 IGxvY2tmaWxlIHJlbW92YWwgZmFpbGVkIixsY2tuYW0sZXJybm8pOwotICAgICAgICByYyA9IC0x OwotICAgIH0KLSAgICByZXR1cm4ocmMpOwotfQotI2VuZGlmIC8qIElLU0RCICovCi0jZW5kaWYg LyogTk9JS1NEICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQt OS4wLjMwMi9ja3V1c3guYy5jOTkgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAu MzAyL2NrdXVzeC5jLmM5OQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThhODU3Yi4u MDAwMDAwMAotLS0gYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVz eC5jLmM5OQorKysgL2Rldi9udWxsCkBAIC0xLDk3MTggKzAsMCBAQAotI2luY2x1ZGUgImNrY3N5 bS5oIgotCi0vKiAgQyBLIFUgVSBTIFggLS0gICJVc2VyIEludGVyZmFjZSIgY29tbW9uIGZ1bmN0 aW9ucy4gKi8KLQotLyoKLSAgQXV0aG9yczoKLSAgICBGcmFuayBkYSBDcnV6IDxmZGNAY29sdW1i aWEuZWR1PiwKLSAgICAgIFRoZSBLZXJtaXQgUHJvamVjdCwgQ29sdW1iaWEgVW5pdmVyc2l0eSwg TmV3IFlvcmsgQ2l0eQotICAgIEplZmZyZXkgRSBBbHRtYW4gPGphbHRtYW5Ac2VjdXJlLWVuZHBv aW50cy5jb20+Ci0gICAgICBTZWN1cmUgRW5kcG9pbnRzIEluYy4sIE5ldyBZb3JrIENpdHkKLQot ICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMTEsCi0gICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5p dmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KLSAgICBBbGwgcmlnaHRzIHJlc2VydmVk LiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQotICAgIGNvcHlyaWdo dCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Np b25zLgotKi8KLQotLyoKLSAgVGhpcyBtb2R1bGUgY29udGFpbnMgdXNlciBpbnRlcmZhY2UgZnVu Y3Rpb25zIG5lZWRlZCBieSBib3RoIHRoZSBpbnRlcmFjdGl2ZQotICB1c2VyIGludGVyZmFjZSBh bmQgdGhlIGNvbW1hbmQtbGluZS1vbmx5IHVzZXIgaW50ZXJmYWNlLCBhcyB3ZWxsIGFzIHRoZQot ICBzY3JlZW4tY29udHJvbCByb3V0aW5lcyAoY3Vyc2VzIGFuZCBlcXVpdmFsZW50KS4KLSovCi0K LS8qIEluY2x1ZGVzICovCi0KLSNpbmNsdWRlICJja2NkZWIuaCIKLSNpbmNsdWRlICJja2Nhc2Mu aCIKLSNpbmNsdWRlICJja2NrZXIuaCIKLSNpbmNsdWRlICJja3V1c3IuaCIKLSNpbmNsdWRlICJj a2N4bGEuaCIKLQotI2lmbmRlZiBOT0hURVJNQ0FQCi0jaWZkZWYgTk9URVJNQ0FQCi0jZGVmaW5l IE5PSFRFUk1DQVAKLSNlbHNlCi0jaWZuZGVmIEJTRDQ0Ci0jZGVmaW5lIE5PSFRFUk1DQVAKLSNl bHNlCi0jaWZkZWYgX19ic2RpX18KLSNkZWZpbmUgTk9IVEVSTUNBUAotI2Vsc2UKLSNpZmRlZiBP UEVOQlNECi0jZGVmaW5lIE5PSFRFUk1DQVAKLSNlbHNlCi0jaWZkZWYgTUFDT1NYCi0jZGVmaW5l IE5PSFRFUk1DQVAKLSNlbmRpZiAvKiBNQUNPU1ggKi8KLSNlbmRpZiAvKiBPUEVOQlNEICovCi0j ZW5kaWYgLyogX19ic2RpX18gKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2VuZGlmIC8qIE5PVEVS TUNBUCAqLwotI2VuZGlmIC8qIE5PSFRFUk1DQVAgKi8KLQotI2lmbmRlZiBOT1RFUk1DQVAKLSNp ZmRlZiBCU0Q0NAotI2lmbmRlZiBOT0hURVJNQ0FQCi0jaW5jbHVkZSA8dGVybWNhcC5oPgotI2Vu ZGlmIC8qIE5PSFRFUk1DQVAgKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2Vsc2UgIC8qICFCU0Q0 NCAqLwotI2lmZGVmIGxpbnV4Ci0jaW5jbHVkZSA8dGVybS5oPgotI2VuZGlmIC8qIGxpbnV4ICov Ci0jZW5kaWYgLyogTk9URVJNQ0FQICovCi0KLSNpZmRlZiBPUzIKLSNpbmNsdWRlIDxzdHJpbmcu aD4KLV9QUk9UT1RZUChjaGFyICogb3MyX2dldGhvc3RuYW1lLCAodm9pZCkpOwotI2RlZmluZSBn ZXRwaWQgX2dldHBpZAotI2VuZGlmIC8qIE9TMiAqLwotI2lmZGVmIEJTRDQ0Ci0jaW5jbHVkZSA8 ZXJybm8uaD4KLSNlbmRpZiAvKiBCU0Q0NCAqLwotCi1leHRlcm4geHhfc3RycCB4eHN0cmluZzsK LQotI2lmZGVmIE9TMgotI2luY2x1ZGUgImNrY25ldC5oIgotI2Vsc2UgLyogT1MyICovCi1fUFJP VE9UWVAoIGNoYXIgKiBja2dldHBlZXIsIChWT0lEKSk7Ci1fUFJPVE9UWVAoaW50IGdldGxvY2Fs aXBhZGRyLCAodm9pZCkpOwotX1BST1RPVFlQKGludCBpc3RuY29tcG9ydCwgKHZvaWQpKTsKLSNp Zm5kZWYgTk9DS0dFVEZRSE9TVAotX1BST1RPVFlQKCBjaGFyICogY2tnZXRmcWhvc3RuYW1lLChj aGFyICopKTsKLSNlbmRpZgkvKiBOT0NLR0VURlFIT1NUICovCi0jaWZuZGVmIE5FVENPTk4KLS8q Ci0gIFdlIHNob3VsZCBqdXN0IHB1bGwgaW4gY2tjbmV0LmggaGVyZSwgYnV0IGl0IGNhdXNlcyBh IGNvbmZsaWN0IHdpdGggY3Vyc2VzLmguCi0qLwotI2lmZGVmIFRDUFNPQ0tFVAotI2RlZmluZSBO RVRDT05OCi0jZWxzZQotI2lmZGVmIFNVTlgyNQotI2RlZmluZSBORVRDT05OCi0jZWxzZQotI2lm ZGVmIFNUUkFUVVNYMjUKLSNkZWZpbmUgTkVUQ09OTgotI2Vsc2UKLSNpZmRlZiBJQk1YMjUKLSNk ZWZpbmUgTkVUQ09OTgotI2Vsc2UKLSNpZmRlZiBIUFgyNQotI2RlZmluZSBORVRDT05OCi0jZWxz ZQotI2lmZGVmIERFQ05FVAotI2RlZmluZSBORVRDT05OCi0jZWxzZQotI2lmZGVmIE5QSVBFCi0j ZGVmaW5lIE5FVENPTk4KLSNlbHNlCi0jaWZkZWYgQ0tfTkVUQklPUwotI2RlZmluZSBORVRDT05O Ci0jaWZkZWYgU1VQRVJMQVQKLSNkZWZpbmUgTkVUQ09OTgotI2Vsc2UKLSNlbmRpZiAvKiBTVVBF UkxBVCAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2VuZGlmIC8qIFNVTlgyNSAqLwotI2Vu ZGlmIC8qIFNUUkFUVVNYMjUgKi8KLSNlbmRpZiAvKiBJQk1YMjUgKi8KLSNlbmRpZiAvKiBIUFgy NSAqLwotI2VuZGlmIC8qIERFQ05FVCAqLwotI2VuZGlmIC8qIE5QSVBFICovCi0jZW5kaWYgLyog Q0tfTkVUQklPUyAqLwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQot I2lmbmRlZiBUQ1BTT0NLRVQKLSNpZmRlZiBNVUxUSU5FVAotI2RlZmluZSBUQ1BTT0NLRVQKLSNl bmRpZiAvKiBNVUxUSU5FVCAqLwotI2lmZGVmIERFQ19UQ1BJUAotI2RlZmluZSBUQ1BTT0NLRVQK LSNlbmRpZiAvKiBERUNfVENQSVAgKi8KLSNpZmRlZiBXSU5UQ1AKLSNkZWZpbmUgVENQU09DS0VU Ci0jZW5kaWYgLyogV0lOVENQICovCi0jaWZkZWYgVENQV0FSRQotI2RlZmluZSBUQ1BTT0NLRVQK LSNlbmRpZiAvKiBUQ1BXQVJFICovCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0KLSNpZmRlZiBP UzIKLSNpZmRlZiBOVAotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDx0YXBpLmg+Ci0j aW5jbHVkZSAiY2tudGFwLmgiCi0jZWxzZSAvKiBOVCAqLwotI2RlZmluZSBJTkNMX1ZJTwotI2lu Y2x1ZGUgPG9zMi5oPgotI2VuZGlmIC8qIE5UICovCi0jaWZkZWYgQ09NTUVOVCAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogV291bGQgeW91IGJlbGlldmUgKi8KLSN1bmRlZiBDT01NRU5UICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiA8b3MyLmg+IGRlZmluZXMgdGhpcyA/ICovCi0jZW5k aWYgLyogQ09NTUVOVCAqLwotI2lmZGVmIENLX05FVEJJT1MKLSNpbmNsdWRlICJja29uYmkuaCIK LSNlbmRpZiAvKiBDS19ORVRCSU9TICovCi0KLSNpbmNsdWRlICJja29jb24uaCIKLWV4dGVybiBh c2NyZWVuIGNvbW1hbmRzY3JlZW47Ci0jaWZkZWYgS1VJCi0jaW5jbHVkZSAiaWt1aS5oIgotI2Vu ZGlmIC8qIEtVSSAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgTlQKLSNpbmNsdWRlICJj a253aW4uaCIKLSNlbmRpZiAvKiBOVCAqLwotI2lmZGVmIE9TMgotI2luY2x1ZGUgImNrb3dpbi5o IgotI2luY2x1ZGUgImNrb3N5bi5oIgotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZkZWYgQ0tfVEFQ SQotZXh0ZXJuIGludCB0dHRhcGk7Ci1leHRlcm4gaW50IHRhcGlwYXNzOwotI2VuZGlmIC8qIENL X1RBUEkgKi8KLQotI2lmZGVmIENLX0tFUkJFUk9TCi0jaW5jbHVkZSAiY2t1YXRoLmgiCi0jZW5k aWYgLyogQ0tfS0VSQkVST1MgKi8KLQotI2lmbmRlZiBXSU5UQ1AKLSNpbmNsdWRlIDxzaWduYWwu aD4KLSNlbmRpZiAvKiBXSU5UQ1AgKi8KLQotI2lmZGVmIFZNUwotI2luY2x1ZGUgPGRlc2NyaXAu aD4KLSNpbmNsdWRlIDxzc2RlZi5oPgotI2luY2x1ZGUgPHN0c2RlZi5oPgotI2lmbmRlZiBPTERf Vk1TCi0jaW5jbHVkZSA8bGliJHJvdXRpbmVzLmg+ICAvKiBOb3QgZm9yIFZBWCBDIDIuMyAqLwot I2Vsc2UKLSNpbmNsdWRlIDxsaWJkZWYuaD4KLSNlbmRpZiAvKiBPTERfVk1TICovCi0jaWZkZWYg V0lOVENQCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jZW5kaWYgLyogV0lOVENQICovCi0jZW5kaWYg LyogVk1TICovCi0KLSNpZmRlZiBEQ0xGRE9QRU4KLS8qIGZkb3BlbigpIG5lZWRzIGRlY2xhcmlu ZyBiZWNhdXNlIGl0J3Mgbm90IGRlY2xhcmVkIGluIDxzdGRpby5oPiAqLwotX1BST1RPVFlQKCBG SUxFICogZmRvcGVuLCAoaW50LCBjaGFyICopICk7Ci0jZW5kaWYgLyogRENMRkRPUEVOICovCi0K LSNpZmRlZiBEQ0xQT1BFTgotLyogcG9wZW4oKSBuZWVkcyBkZWNsYXJpbmcgYmVjYXVzZSBpdCdz IG5vdCBkZWNsYXJlZCBpbiA8c3RkaW8uaD4gKi8KLV9QUk9UT1RZUCggRklMRSAqIHBvcGVuLCAo Y2hhciAqLCBjaGFyICopICk7Ci0jZW5kaWYgLyogRENMUE9QRU4gKi8KLQotaW50IHR0X2NyZCA9 IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENhcnJpYWdlIHJldHVybiBkaXNwbGF5ICov Ci1pbnQgdHRfbGZkID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGluZWZlZWQgZGlz cGxheSAqLwotaW50IGludGVycnVwdGVkID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIEludGVy cnVwdGVkIGZyb20ga2V5Ym9hcmQgZmxhZyAqLwotaW50IGZ4ZF9pbml0ZWQgPSAwOwkJCS8qIEZ1 bGxzY3JlZW4gc3R1ZmYgaW5pdGlhbGl6ZWQgKi8KLQotI2lmZGVmIERFQlVHCi1jaGFyIGRlYmZp bFtDS01BWFBBVEgrMV07ICAgICAgICAgICAgICAgLyogRGVidWdnaW5nIGxvZyBmaWxlIG5hbWUg Ki8KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0jaWZkZWYgVExPRwotY2hhciB0cmFmaWxbQ0tNQVhQ QVRIKzFdOyAgICAgICAgICAgICAgIC8qIFRyYW5zYWN0aW9uIGxvZyBmaWxlIG5hbWUgKi8KLSNl bmRpZiAvKiBUTE9HICovCi0KLWNoYXIgc2VzZmlsW0NLTUFYUEFUSCsxXTsgICAgICAgICAgICAg ICAvKiBTZXNzaW9uIGxvZyBmaWxlIG5hbWUgKi8KLQotI2lmZGVmIENLTE9HRElBTAotY2hhciBk aWFmaWxbQ0tNQVhQQVRIKzFdOyAgICAgICAgICAgICAgIC8qIENvbm5lY3Rpb24gbG9nIGZpbGUg bmFtZSAqLwotY2hhciBjeGxvZ2J1ZltDWExPR0JVRkwrMV07ICAgICAgICAgICAgIC8qIENvbm5l Y3Rpb24gbG9nIHJlY29yZCBidWZmZXIgKi8KLWludCBjeF9hY3RpdmUgPSAwOyAgICAgICAgICAg ICAgICAgICAgICAvKiBDb25uZWN0aW9uIGlzIGFjdGl2ZSAqLwotZXh0ZXJuIGludCBkaWFsb2c7 Ci0jZW5kaWYgLyogQ0tMT0dESUFMICovCi0KLSNpZmRlZiBEWU5BTUlDCi1zdGF0aWMgY2hhciAq Y21kc3RyID0gTlVMTDsgICAgICAgICAgICAgLyogUGxhY2UgdG8gYnVpbGQgZ2VuZXJpYyBjb21t YW5kICovCi0jZWxzZQotI2lmZGVmIHBkcDExCi1zdGF0aWMgY2hhciBjbWRzdHJbMjU2XTsKLSNl bHNlCi1zdGF0aWMgY2hhciBjbWRzdHJbNDA5Nl07Ci0jZW5kaWYgLyogcGRwMTEgKi8KLSNlbmRp ZiAvKiBEWU5BTUlDICovCi0KLSNpZm5kZWYgTk9NU0VORAotY2hhciBmc3BlY1tDTURCTCs0XTsg ICAgICAgICAgICAgICAgICAgIC8qIEZpbGVuYW1lIHN0cmluZyBmb3IgXHYoZmlsZXNwZWMpICov Ci1pbnQgZnNwZWNsZW4gPSBDTURCTDsKLSNlbHNlCi1jaGFyIGZzcGVjW0NLTUFYUEFUSCs0XTsK LWludCBmc3BlY2xlbiA9IENLTUFYUEFUSDsKLSNlbmRpZiAvKiBOT01TRU5EICovCi0KLWNoYXIg KiByZnNwZWMgPSBOVUxMOwkJCS8qIFJlY2VpdmVkIGZpbGVzcGVjOiBsb2NhbCAqLwotY2hhciAq IHByZnNwZWMgPSBOVUxMOwkJCS8qIFByZWxpbWluYXJ5IHJmc3BlYyAqLwotY2hhciAqIHNmc3Bl YyA9IE5VTEw7CQkJLyogU2VudCBmaWxlc3BlYzogbG9jYWwgKi8KLWNoYXIgKiBwc2ZzcGVjID0g TlVMTDsJCQkvKiBQcmVsaW1pbmFyeSBzZnNwZWMgKi8KLWNoYXIgKiBzcmZzcGVjID0gTlVMTDsJ CQkvKiBSZWNlaXZlZCBmaWxlc3BlYzogcmVtb3RlICovCi1jaGFyICogcHNyZnNwZWMgPSBOVUxM OwkJCS8qIFByZWxpbWluYXJ5IHNyZnNwZWMgKi8KLWNoYXIgKiBycmZzcGVjID0gTlVMTDsJCQkv KiBTZW50IGZpbGVzcGVjOiByZW1vdGUgKi8KLWNoYXIgKiBwcnJmc3BlYyA9IE5VTEw7CQkJLyog UHJlbGltaW5hcnkgcnJmc3BlYyAqLwotCi1pbnQgc3VjY2VzcyA9IDEsICAgICAgICAgICAgICAg ICAgICAgICAgLyogQ29tbWFuZCBzdWNjZXNzL2ZhaWx1cmUgZmxhZyAqLwotICAgIGNtZGx2bCA9 IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgbGV2ZWwgKi8KLSAgICBhY3Rp b24gPSAwLAkJCQkvKiBBY3Rpb24gc2VsZWN0ZWQgb24gY29tbWFuZCBsaW5lICovCi0gICAgc2xv Z3RzID0gMCwJCQkJLyogU2Vzc2lvbi1sb2cgdGltZXN0YW1wcyBvbi9vZmYgKi8KLSAgICBzbG9n bnVsID0gMCwJCQkvKiBTZXNzaW9uLWxvZyBudWxsLXRlcm1pbmF0ZWQgbGluZXMgKi8KLSNpZmRl ZiBVTklYCi0gICAgc2Vzc2Z0ID0gWFlGVF9ULCAgICAgICAgICAgICAgICAgICAgLyogU2Vzc2lv biBsb2cgZmlsZSB0eXBlICovCi0jZWxzZQotICAgIHNlc3NmdCA9IFhZRlRfQiwJCQkvKiAodGV4 dCBmb3IgVU5JWCBiaW5hcnkgZm9yIG90aGVycykgKi8KLSNlbmRpZiAvKiBVTklYICovCi0gICAg cGZsYWcgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJpbnQgcHJvbXB0ICovCi0g ICAgbXNnZmxnID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJpbnQgaW5mb3JtYXRp b25hbCBtZXNzYWdlcyAqLwotCi1leHRlcm4gaW50IHhhc2ttb3JlLCBzYXZlYXNrOwkJLyogTW9y ZS1wcm9tcHRpbmcgKi8KLQotI2lmZGVmIENLX0FQQwotZXh0ZXJuIGludCBhcGNhY3RpdmU7Ci0j ZW5kaWYgLyogQ0tfQVBDICovCi0vKiBFeHRlcm5hbCB2YXJpYWJsZXMgKi8KLQotZXh0ZXJuIGlu dCBsb2NhbCwgcXVpZXQsIGJpbmFyeSwgbmV0d29yaywgd2hhdCwgcGFyaXR5LCB4aXRzdGEsIGVz Y2FwZSwKLSAgdGxldmVsLCBiZ3NldCwgYmFja2dyZCwgeHN1c3BlbmQsIGNtZGludCwgbmV0dHlw ZSwgc2VzbG9nLCBkZmxvYzsKLQotZXh0ZXJuIGludCBjbWRfcm93cywgY21kX2NvbHMsIHhjbWRz cmM7Ci0KLWV4dGVybiBjaGFyIGNtZGZpbFtdOwotCi0jaWZkZWYgVk1TCi1leHRlcm4gaW50IGJh dGNoOwotI2VuZGlmIC8qIFZNUyAqLwotCi0jaWZkZWYgZGF0YWdlbmVyYWwgICAgICAgICAgICAg ICAgICAgICAgLyogMi8xMi85MiBFTkggKi8KLSNpbmNsdWRlIDxzeXNpZC5oPgotZXh0ZXJuIGlu dCBjb25fcmVhZHNfbXQsIGNvbmludF9jaCwgY29uaW50X2F2bDsKLSNlbmRpZiAvKiBkYXRhZ2Vu ZXJhbCAqLwotCi1leHRlcm4gbG9uZyBzcGVlZDsKLQotZXh0ZXJuIGNoYXIgdHRuYW1lW10sICpk ZnR0eSwgKmNtYXJnLCAqKmNtbGlzdCwgKnZlcnNpbywgbXlob3N0W107Ci0KLSNpZm5kZWYgTk9D U0VUUwotZXh0ZXJuIGludCBmY2hhcnNldCwgdGNoYXJzZXQsIHhmcnhsYTsKLWV4dGVybiBzdHJ1 Y3QgY3NpbmZvIGZjc2luZm9bXSwgdGNzaW5mb1tdOwotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLQot I2lmZGVmIE9TMgotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgY29sb3JjbWQ7Ci0jZW5kaWYgLyogT1My ICovCi0KLSNpZmRlZiBOT1hGRVIKLQotaW50IGZkaXNwbGEgPSBYWUZEX047Ci0KLSNlbHNlICAv KiBOT1hGRVIgaXMgbm90IGRlZmluZWQgKi8KLQotI2lmZGVmIE9TMiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEZpbGUgdHJhbnNmZXIgZGlzcGxheSB0eXBlICovCi1pbnQgZmRpc3Bs YSA9IFhZRkRfQzsgICAgICAgICAgICAgICAgICAgLyogQ3Vyc2VzIChmdWxsc2NyZWVuKSBpZiB3 ZSBoYXZlIGl0ICovCi0jZWxzZQotI2lmZGVmIENLX0NVUlNFUwotaW50IGZkaXNwbGEgPSBYWUZE X0M7Ci0jZWxzZQotaW50IGZkaXNwbGEgPSBYWUZEX1M7ICAgICAgICAgICAgICAgICAgIC8qIE90 aGVyd2lzZSBDUlQgKi8KLSNlbmRpZiAvKiBDS19DVVJTRVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8K LQotZXh0ZXJuIHN0cnVjdCBja19wIHB0YWJbXTsKLWV4dGVybiBpbnQgcHJvdG9jb2wsIHhmcmJl bCwgeGZyaW50OwotCi0jaWZkZWYgU1RSRUFNSU5HCi1leHRlcm4gaW50IHN0cmVhbWluZywgc3Ry ZWFtb2s7Ci0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0KLS8qIFVzZWQgaW50ZXJuYWxseSAqLwot Ci0jaWZkZWYgS1VJCi1fUFJPVE9UWVAoIFZPSUQgc2NyZWVuZywgKGludCwgY2hhciwgbG9uZywg Y2hhciAqKSApOwotI2VuZGlmCS8qIEtVSSAqLwotX1BST1RPVFlQKCBWT0lEIHNjcmVlbmMsIChp bnQsIGNoYXIsIENLX09GRl9ULCBjaGFyICopICk7Ci0KLQotI2lmZGVmIENLX0NVUlNFUwotI2lm bmRlZiBEWU5BTUlDCi1zdGF0aWMgY2hhciB4dHJtYnVmW1RSTUJVRkxdOyAgICAgICAgICAgLyog dGdldGVudCgpIGJ1ZmZlciAqLwotY2hhciAqIHRybWJ1ZiA9IHh0cm1idWY7Ci0jZWxzZQotY2hh ciAqIHRybWJ1ZiA9IE5VTEw7Ci0jZW5kaWYgLyogRFlOQU1JQyAqLwotX1BST1RPVFlQKCBzdGF0 aWMgVk9JRCBkcHlpbml0LCAodm9pZCkgKTsKLV9QUk9UT1RZUCggc3RhdGljIGxvbmcgc2hvY3Bz LCAoaW50LCBDS19PRkZfVCwgQ0tfT0ZGX1QpICk7Ci1fUFJPVE9UWVAoIHN0YXRpYyBDS19PRkZf VCBzaG9ldGwsIChDS19PRkZfVCwgbG9uZywgQ0tfT0ZGX1QsIENLX09GRl9UKSApOwotI2VuZGlm IC8qIENLX0NVUlNFUyAqLwotCi1zdGF0aWMgaW50IGZ0X3dpbiA9IDA7ICAvKiBGdWxsc2NyZWVu IGZpbGUgdHJhbnNmZXIgZGlzcGxheSB3aW5kb3cgaXMgYWN0aXZlICovCi0KLS8qIFZhcmlhYmxl cyBkZWNsYXJlZCBoZXJlICovCi0KLXN0YXRpYyBjaGFyICogc2tyZWFzb25bXSA9IHsKLSAgICAi IiwJCQkJCS8qIDAgKi8KLSAgICAiUmVtb3RlIGZpbGUgbm90IG9sZGVyIiwJCS8qIFNLUF9EQVQg Ki8KLSAgICAiSWRlbnRpY2FsIG1vZGlmaWNhdGlvbiB0aW1lcyIsCS8qIFNLUF9FUVUgKi8KLSAg ICAiVHlwZSIsCQkJCS8qIFNLUF9UWVAgKi8KLSAgICAiU2l6ZSIsCQkJCS8qIFNLUF9TSVogKi8K LSAgICAiTmFtZSBjb2xsaXNpb24iLAkJCS8qIFNLUF9OQU0gKi8KLSAgICAiRXhjZXB0aW9uIExp c3QiLAkJCS8qIFNLUF9FWEwgKi8KLSAgICAiRG90IGZpbGUiLAkJCQkvKiBTS1BfRE9UICovCi0g ICAgIkJhY2t1cCBmaWxlIiwJCQkvKiBTS1BfQktVICovCi0gICAgIlJlY292ZXJ5IG5vdCBuZWVk ZWQiLAkJLyogU0tQX1JFUyAqLwotICAgICJBY2Nlc3MgZGVuaWVkIiwJCQkvKiBTS1BfQUNDICov Ci0gICAgIk5vdCBhIHJlZ3VsYXIgZmlsZSIsCQkvKiBTS1BfTlJGICovCi0gICAgIlNpbXVsYXRl ZCIsCQkJLyogU0tQX1NJTSAqLwotICAgICJTaW11bGF0ZWQgLSBSZW1vdGUgZmlsZSBvbGRlciIs CS8qIFNLUF9YVVAgKi8KLSAgICAiU2ltdWxhdGVkIC0gTm8gcmVtb3RlIGZpbGUiLAkvKiBTS1Bf WE5YICovCi19Owotc3RhdGljIGludCBuc2tyZWFzb24gPSAoc2l6ZW9mKHNrcmVhc29uKSAvIHNp emVvZihjaGFyICopKTsKLQotY2hhciAqCi1nc2tyZWFzb24obikgaW50IG47IHsKLSAgICByZXR1 cm4oKG4gPiAwICYmIG4gPCBuc2tyZWFzb24pID8gc2tyZWFzb25bbl0gOiAiIik7Ci19Ci0KLWNo YXIgcGt0ZmlsW0NLTUFYUEFUSCsxXTsgICAgICAgICAgICAgICAvKiBQYWNrZXQgbG9nIGZpbGUg bmFtZSAqLwotCi0jaWZuZGVmIE5PTVNFTkQgICAgICAgICAgICAgICAgICAgICAgICAgLyogTXVs dGlwbGUgU0VORCAqLwotY2hhciAqbXNmaWxlc1tNU0VORE1BWF07Ci0jZW5kaWYgLyogTk9NU0VO RCAqLwotCi0jaWZkZWYgQ0tfVElNRVJTCi1leHRlcm4gbG9uZyBydHRkZWxheTsKLWV4dGVybiBp bnQgIHJ0dGZsZzsKLSNlbmRpZiAvKiBDS19USU1FUlMgKi8KLWV4dGVybiBpbnQgcmN2dGltbzsK LQotI2lmZGVmIENLX1JFU0VORAotZXh0ZXJuIGludCBzZW5kbW9kZTsKLWV4dGVybiBDS19PRkZf VCBzZW5kc3RhcnQsIHJzX2xlbjsKLSNlbmRpZiAvKiBDS19SRVNFTkQgKi8KLQotI2lmZGVmIENL X1BDVF9CQVIgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgdHJhbnNmZXIgdGhlcm1vbWV0 ZXIgKi8KLWludCB0aGVybW9tZXRlciA9IDE7ICAgICAgICAgICAgICAgICAgICAvKiBPTiBieSBk ZWZhdWx0ICovCi0jZW5kaWYgLyogQ0tfUENUX0JBUiAqLwotCi0jaWZkZWYgR0ZUSU1FUgotQ0tG TE9BVCBndHYgPSAtMS4wLCBvbGRndHYgPSAtMS4wOwotI2Vsc2UKLSNpZm5kZWYgT1MyCi1zdGF0 aWMKLSNlbmRpZiAvKiBPUzIgKi8KLSAgbG9uZyBndHYgPSAtMUwsIG9sZGd0diA9IC0xTDsKLSNl bmRpZiAvKiBHRlRJTUVSICovCi0KLWV4dGVybiBpbnQgc2VydmVyLCBiY3R1LCBycHRmbGcsIGVi cWZsZywgc3BzaXosIHVycHNpeiwgd21heCwgY3pzZWVuLCBjeHNlZW4sCi0gIHdpbmxvLCBkaXNw bGEsIHRpbWludCwgbnBhZCwgZWJxLCBiY3RyLCBycHRxLCBhdGNhcHUsIGxwY2FwdSwKLSAgc3dj YXB1LCB3c2xvdG4sIHdzbG90ciwgcnRpbW8sIG15cGFkbiwgc3EsIGNhcGFzLCBycHNpeiwgdHNl Y3MsCi0gIHBrdGxvZywgbHNjYXB1LCBkZXN0LCBzcnZkaXMsIHdzbG90cywgc3BhY2tldHMsIHNw a3RsLCBycGt0bCwKLSAgcmV0cmFucywgd2N1ciwgbnVtZXJycywgZnNlY3MsIHdoYXRydSwgY3J1 bmNoZWQsIHRpbWVvdXRzLAotICBycGFja2V0cywgZm5jbnYsIGJ5ZV9hY3RpdmUsIGRpc2NhcmQs IGluc2VydmVyLCBkaXJhY3RpdmUsIGNkYWN0aXZlOwotCi1leHRlcm4gbG9uZyBmaWxjbnQsIGZp bHJlaiwgcnB0biwgZmlsY3BzLCB0ZmNwcywgY3BzLCBwZWFrY3BzOwotZXh0ZXJuIENLX09GRl9U IGZmYywgdGZjLCBmc2l6ZTsgCi0KLWxvbmcgb2xkY3BzID0gMEw7Ci0KLWV4dGVybiBDSEFSICpy ZGF0YXAsIHBhZGNoLCBzZW9sLCBjdGxxLCBteXBhZGMsIGVvbCwgKmVwa3Rtc2c7Ci1leHRlcm4g Y2hhciAqeGZybXNnOwotCi0jaWZkZWYgSUtTREIKLUZJTEUgKiBkYmZwID0gTlVMTDsgICAgICAg ICAgICAgICAgICAgICAvKiBGaWxlIHBvaW50ZXIgdG8gZGF0YWJhc2UgZmlsZSAqLwotCi1pbnQg ZGJlbmFibGVkID0gMTsgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgZGF0YWJhc2Ug aXMgZW5hYmxlZCAqLwotZXh0ZXJuIGludCBpa2Rib3BlbjsgICAgICAgICAgICAgICAgICAgIC8q IEZsYWcgZm9yIGRhdGFiYXNlIGlzIG9wZW4gKi8KLQotdW5zaWduZWQgbG9uZyBteWRic2VlayA9 IDBMOyAgICAgICAgICAgIC8qIFNlZWsgcG9pbnRlciB0byBteSByZWNvcmQgKi8KLWludCBteWRi c2xvdCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBNeSBzbG90IG51bWJlciAqLwotdW5z aWduZWQgbG9uZyBteWZsYWdzID0gMEw7ICAgICAgICAgICAgIC8qIE15IGZsYWdzICovCi11bnNp Z25lZCBsb25nIG15YXR5cGUgPSAwTDsgICAgICAgICAgICAgLyogTXkgYXV0aG9yaXphdGlvbiB0 eXBlICovCi11bnNpZ25lZCBsb25nIG15YW1vZGUgPSAwTDsgICAgICAgICAgICAgLyogTXkgYXV0 aG9yaXphdGlvbiBtb2RlICovCi11bnNpZ25lZCBsb25nIG15c3RhdGUgPSAwTDsgICAgICAgICAg ICAgLyogTXkgc3RhdGUgKFNFTkQsIFJFQ0VJVkUsIGV0YykgKi8KLXVuc2lnbmVkIGxvbmcgbXlw aWQgPSAwTDsgICAgICAgICAgICAgICAvKiBNeSBQSUQgKi8KLXVuc2lnbmVkIGxvbmcgbXlpcCA9 IDBMOyAgICAgICAgICAgICAgICAvKiBNeSBJUCBhZGRyZXNzICovCi11bnNpZ25lZCBsb25nIHBl ZXJpcCA9IDBMOyAgICAgICAgICAgICAgLyogTXkgcGVlcidzIElQIGFkZHJlc3MgKi8KLQotdW5z aWduZWQgbG9uZyBkYmlwID0gMEw7ICAgICAgICAgICAgICAgIC8qIElQIGFkZHJlc3MgaW4gZGIg cmVjb3JkICovCi11bnNpZ25lZCBsb25nIGRicGlkID0gMEw7ICAgICAgICAgICAgICAgLyogUElE IGluIGRiIHJlY29yZCAqLwotdW5zaWduZWQgbG9uZyBkYmZsYWdzID0gMEw7ICAgICAgICAgICAg IC8qIEZsYWdzIGZpZWxkIGluIGRiIHJlY29yZCAqLwotdW5zaWduZWQgbG9uZyBkYmxhc3R1c2Vk ID0gMEw7ICAgICAgICAgIC8qIExhc3QgaW4tdXNlIHJlY29yZCBpbiBkYiAqLwotY2hhciBkYnJl Y1tEQl9SRUNMXTsgICAgICAgICAgICAgICAgICAgIC8qIERhdGFiYXNlIHJlY29yZCBidWZmZXIg Ki8KLQotY2hhciAqIGRiZGlyICAgPSBOVUxMOyAgICAgICAgICAgICAgICAgIC8qIERhdGFiYXNl IGRpcmVjdG9yeSAqLwotY2hhciAqIGRiZmlsZSAgPSBOVUxMOyAgICAgICAgICAgICAgICAgIC8q IERhdGFiYXNlIGZpbGUgZnVsbCBwYXRobmFtZSAqLwotY2hhciBteWhleGlwWzMzXSA9IHsgTlVM LCBOVUwgfTsgICAgICAgIC8qIE15IElQIGFkZHJlc3MgaW4gaGV4ICovCi1jaGFyIHBlZXJoZXhp cFszM10gPSB7IE5VTCwgTlVMIH07ICAgICAgLyogQ2xpZW50J3MgSVAgYWRkcmVzcyBpbiBoZXgg Ki8KLSNlbmRpZiAvKiBJS1NEQiAqLwotCi0jaWZkZWYgR0ZUSU1FUgotZXh0ZXJuIENLRkxPQVQg ZnBmc2VjcywgZnB0c2VjcywgZnB4ZnNlY3M7Ci0jZWxzZQotZXh0ZXJuIGxvbmcgeGZzZWNzOwot I2VuZGlmIC8qIEdGVElNRVIgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmZGVmIFRDUFNP Q0tFVAotI2lmZGVmIE5FV0ZUUAotZXh0ZXJuIGNoYXIgKiBmdHBfaG9zdCwgZnRwX3NydnR5cFtd OwotZXh0ZXJuIGludCBmdHBfY3N4LCBmdHBfY3NsLCBmdHBfZGViOwotI2VuZGlmIC8qIE5FV0ZU UCAqLwotZXh0ZXJuIGNoYXIgbXlpcGFkZHJbXTsKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLQot I2lmbmRlZiBOT0lDUAotI2lmbmRlZiBOT1NQTAotICAgIGV4dGVybiBzdHJ1Y3QgbXRhYiAqbWFj dGFiOyAgICAgICAgIC8qIEZvciBPTl9FWElUIG1hY3JvLiAqLwotICAgIGV4dGVybiBpbnQgbm1h YzsKLSNlbmRpZiAvKiBOT1NQTCAqLwotI2lmZGVmIERDTURCVUYKLWV4dGVybiBjaGFyICpjbWRi dWY7ICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIGJ1ZmZlciAqLwotI2Vsc2UKLWV4dGVy biBjaGFyIGNtZGJ1ZltdOyAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIGJ1ZmZlciAqLwot I2VuZGlmIC8qIERDTURCVUYgKi8KLWV4dGVybiBpbnQgY21kX3F1b3Rpbmc7Ci0jZW5kaWYgLyog Tk9JQ1AgKi8KLQotI2lmbmRlZiBOT0NDVFJBUAotI2lmZGVmIE5UCi0jaW5jbHVkZSA8c2V0am1w ZXguaD4KLSNlbHNlIC8qIE5UICovCi0jaW5jbHVkZSA8c2V0am1wLmg+Ci0jZW5kaWYgLyogTlQg Ki8KLSNpbmNsdWRlICJja2NzaWcuaCIKLWV4dGVybiBja2ptcGJ1ZiBjbWpidWY7Ci0jZW5kaWYg LyogTk9DQ1RSQVAgKi8KLQotZXh0ZXJuIGludCB4ZmlsZXR5cGUsIG5zY2FuZmlsZTsKLQotaW50 Ci1zaG9lc2MoZXNjYXBlKSBpbnQgZXNjYXBlOyB7Ci0gICAgZXh0ZXJuIGNoYXIgKiBjY250YWJb XTsJCS8qIEMwIGNvbnRyb2wgY2hhcmFjdGVyIG5hbWUgdGFibGUgKi8KLSAgICBleHRlcm4gaW50 IHR0X2VzY2FwZTsKLSAgICBpZiAoKGVzY2FwZSA+IDAgJiYgZXNjYXBlIDwgMzIpIHx8IChlc2Nh cGUgPT0gMTI3KSkgewotCXByaW50ZigiIEVzY2FwZSBjaGFyYWN0ZXI6IEN0cmwtJWMgKEFTQ0lJ ICVkLCAlcyk6ICVzXHJcbiIsCi0JICAgICAgIGN0bChlc2NhcGUpLAotCSAgICAgICBlc2NhcGUs Ci0JICAgICAgIChlc2NhcGUgPT0gMTI3ID8gIkRFTCIgOiBjY250YWJbZXNjYXBlXSksCi0JICAg ICAgIHR0X2VzY2FwZSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIKLQkgICAgICAgKTsKLSAgICB9 IGVsc2UgewotCXByaW50ZigiIEVzY2FwZSBjaGFyYWN0ZXI6IENvZGUgJWQiLGVzY2FwZSk7Ci0J aWYgKGVzY2FwZSA+IDE2MCAmJiBlc2NhcGUgPCAyNTYpCi0JICBwcmludGYoIiAoJWMpIixlc2Nh cGUpOwotCXByaW50ZigiOiAlc1xyXG4iLCB0dF9lc2NhcGUgPyAiZW5hYmxlZCIgOiAiZGlzYWJs ZWQiKTsJCi0gICAgfQotICAgIHJldHVybigwKTsKLX0KLQotI2lmbmRlZiBOT1hGRVIKLS8qICBQ IFIgRSBTIEUgVCAgLS0gIFJlc2V0IGdsb2JhbCBwcm90b2NvbCB2YXJpYWJsZXMgICovCi0KLWV4 dGVybiBpbnQgcmVjdXJzaXZlOwotCi0jaWZkZWYgUEFUVEVSTlMKLWludCBwYXR0ZXJucyA9IFNF VF9BVVRPOyAgICAgICAgICAgICAgICAvKiBXaGV0aGVyIHRvIHVzZSBmaWxlbmFtZSBwYXR0ZXJu cyAqLwotZXh0ZXJuIGludCBnX3BhdHRlcm5zOwkJCS8qIEZvciBzYXZpbmcgYW5kIHJlc3Rvcmlu ZyAqLwotI2Vsc2UKLWludCBwYXR0ZXJucyA9IFNFVF9PRkY7Ci0jZW5kaWYgLyogUEFUVEVSTlMg Ki8KLQotI2lmbmRlZiBOT0lDUAotI2lmZGVmIENLX0xBQkVMRUQKLWV4dGVybiBpbnQgZ19sZl9v cHRzLCBsZl9vcHRzOwotI2VuZGlmIC8qIENLX0xBQkVMRUQgKi8KLWV4dGVybiBpbnQgZ19tYXRj aGRvdCwgZ191c2VwaXBlcywgdXNlcGlwZXM7Ci1leHRlcm4gaW50IGdfYmluYXJ5LCBnX3Byb3Rv LCBnX2Rpc3BsYSwgZ19zcGF0aCwgZ19ycGF0aCwgZ19mbmNudjsKLWV4dGVybiBpbnQgZ19yZWN1 cnNpdmU7Ci1leHRlcm4gaW50IGdfeGZlcm1vZGUsIHhmZXJtb2RlOwotZXh0ZXJuIGludCBnX3Vy cHNpeiwgZ19zcHNpemYsIGdfc3BzaXo7Ci1leHRlcm4gaW50IGdfc3BzaXpyLCBnX3NwbWF4LCBn X3dzbG90ciwgZ19wcmVmaXhpbmcsIGdfZm5jYWN0OwotZXh0ZXJuIGludCBnX2Zuc3BhdGgsIGdf Zm5ycGF0aCwgZ19za2lwYnVwOwotZXh0ZXJuIGludCBub2xpbmtzOwotI2lmZGVmIENLU1lNTElO SwotZXh0ZXJuIGludCB6Z2ZzX2xpbms7Ci0jZW5kaWYgLyogQ0tTWU1MSU5LICovCi0jaWZuZGVm IE5PU1BMCi1leHRlcm4gaW50IGdfcGZsZywgcHdmbGcsIGdfcGNwdCwgcHdjcnlwdDsKLWV4dGVy biBjaGFyICogZ19wc3dkLCBwd2J1ZltdOwotI2VuZGlmIC8qIE5PU1BMICovCi0jZW5kaWYgLyog Tk9JQ1AgKi8KLQotZXh0ZXJuIGludCBzcHNpemYsIHNwc2l6ciwgc3BtYXgsIHByZWZpeGluZywg Zm5jYWN0LCBmbnNwYXRoLCBmbnJwYXRoOwotZXh0ZXJuIGludCBtb3Zpbmc7ICAgICAgICAgICAg ICAgICAgICAgIC8qIFNFTkQgY3JpdGVyaWEgKi8KLWV4dGVybiBjaGFyIHNuZGFmdGVyW10sIHNu ZGJlZm9yZVtdLCAqc25kZXhjZXB0W10sICpyY3ZleGNlcHRbXTsKLWV4dGVybiBDS19PRkZfVCBz bmRsYXJnZXIsIHNuZHNtYWxsZXIsIGNhbGlicmF0ZTsKLWV4dGVybiBpbnQgcm1haWxmLCBycHJp bnRmLCBza2lwYnVwOwotZXh0ZXJuIGNoYXIgb3B0YnVmW107Ci0KLSNpZmRlZiBQSVBFU0VORAot ZXh0ZXJuIGNoYXIgKiBnX3NmaWx0ZXIsICogZ19yZmlsdGVyOwotZXh0ZXJuIGNoYXIgKiBzbmRm aWx0ZXIsICogcmN2ZmlsdGVyOwotI2VuZGlmIC8qIFBJUEVTRU5EICovCi1leHRlcm4gY2hhciAq KiBzbmRhcnJheTsKLQotVk9JRAotZnRyZXNldCgpIHsKLSNpZm5kZWYgTk9JQ1AKLSAgICBpbnQg aTsKLSAgICBleHRlcm4gY2hhciAqIGZpbGVmaWxlOwotICAgIGV4dGVybiBpbnQgcmVsaWFibGUs IHhyZWxpYWJsZSwgY19zYXZlLCBzc19zYXZlLCBzbG9zdGFydCwgdXJjbGVhcjsKLSAgICBleHRl cm4gaW50IG9vcHRzLCBvbW9kZSwgb25hbWUsIG9wYXRoLCBrYWN0aXZlLCBhdXRvcGF0aDsKLSAg ICBleHRlcm4gY2hhciAqIHNuZF9tb3ZlOyAgICAgICAgICAgICAvKiBEaXJlY3RvcnkgdG8gbW92 ZSBzZW50IGZpbGVzIHRvICovCi0gICAgZXh0ZXJuIGNoYXIgKiBzbmRfcmVuYW1lOyAgICAgICAg ICAgLyogV2hhdCB0byByZW5hbWUgc2VudCBmaWxlcyB0byAqLwotICAgIGV4dGVybiBjaGFyICog cmN2X21vdmU7Ci0gICAgZXh0ZXJuIGNoYXIgKiByY3ZfcmVuYW1lOwotICAgIGV4dGVybiBjaGFy ICogZ19zbmRfbW92ZTsKLSAgICBleHRlcm4gY2hhciAqIGdfc25kX3JlbmFtZTsKLSAgICBleHRl cm4gY2hhciAqIGdfcmN2X21vdmU7Ci0gICAgZXh0ZXJuIGNoYXIgKiBnX3Jjdl9yZW5hbWU7Ci0K LSNpZmRlZiBDS19UTVBESVIKLSAgICBleHRlcm4gaW50IGZfdG1wZGlyOwotICAgIGV4dGVybiBj aGFyIHNhdmRpcltdOwotI2VuZGlmIC8qIENLX1RNUERJUiAqLwotCi0jaWZkZWYgQ0tfU1BFRUQK LSNpZmRlZiBDT01NRU5UCi0gICAgZXh0ZXJuIGludCBmX2N0bHA7Ci0gICAgZXh0ZXJuIHNob3J0 IHNfY3RscFtdLCBjdGxwW107Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2VuZGlmIC8qIENLX1NQ RUVEICovCi0KLSNpZm5kZWYgTk9DU0VUUwotICAgIGV4dGVybiBpbnQgZmNzX3NhdmUsIHRjc19z YXZlOwotICAgIGV4dGVybiBpbnQgZ194ZnJ4bGEsIHhmcnhsYTsKLSNlbmRpZiAvKiBOT0NTRVRT ICovCi0KLS8qIFJlc3RvcmUgLyByZXNldCBwZXItY29tbWFuZCBmaWxlLXRyYW5zZmVyIHN3aXRj aGVzICovCi0KLSAgICBtYWtlc3RyKCZzbmRfbW92ZSxnX3NuZF9tb3ZlKTsKLSAgICBtYWtlc3Ry KCZyY3ZfbW92ZSxnX3Jjdl9tb3ZlKTsKLSAgICBtYWtlc3RyKCZzbmRfcmVuYW1lLGdfc25kX3Jl bmFtZSk7Ci0gICAgbWFrZXN0cigmcmN2X3JlbmFtZSxnX3Jjdl9yZW5hbWUpOwotCi0gICAga2Fj dGl2ZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogS2VybWl0IHByb3RvY29sIG5vIGxv bmdlciBhY3RpdmUgKi8KLSAgICBvb3B0cyA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBPLVBhY2tldCBPcHRpb25zICovCi0gICAgb21vZGUgPSAtMTsgICAgICAgICAgICAgICAgICAg ICAgICAgLyogTy1QYWNrZXQgVHJhbnNmZXIgTW9kZSAqLwotICAgIG9uYW1lID0gLTE7ICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIE8tUGFja2V0IEZpbGVuYW1lIE9wdGlvbnMgKi8KLSAgICBv cGF0aCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPLVBhY2tldCBQYXRobmFtZSBP cHRpb25zICovCi0KLSNpZmRlZiBDS19SRVNFTkQKLSAgICByc19sZW4gPSAwTDsJCQkvKiBSRUdF VCBwb3NpdGlvbiAqLwotI2VuZGlmIC8qIENLX1JFU0VORCAqLwotCi0jaWZkZWYgQ09NTUVOVAot I2lmZGVmIENLX1NQRUVECi0gICAgaWYgKGZfY3RscCkgewotICAgICAgICBmb3IgKGkgPSAwOyBp IDwgMjU2OyBpKyspCi0gICAgICAgICAgY3RscFtpXSA9IHNfY3RscFtpXTsKLSAgICAgICAgZl9j dGxwID0gMDsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfU1BFRUQgKi8KLSNlbmRpZiAvKiBDT01NRU5U ICovCi0KLSNpZmRlZiBDS19UTVBESVIKLSAgICBpZiAoZl90bXBkaXIpIHsJCQkvKiBJZiB3ZSBj aGFuZ2VkIHRvIGRvd25sb2FkIGRpciAqLwotCXpjaGRpcigoY2hhciAqKSBzYXZkaXIpOwkvKiBH byBiYWNrIHdoZXJlIHdlIGNhbWUgZnJvbSAqLwotCWZfdG1wZGlyID0gMDsKLSAgICB9Ci0jZW5k aWYgLyogQ0tfVE1QRElSICovCi0KLSAgICBjYWxpYnJhdGUgPSAwTDsgICAgICAgICAgICAgICAg ICAgICAvKiBDYWxpYnJhdGlvbiBydW4gKi8KLSAgICBpZiAoeHJlbGlhYmxlID4gLTEpIHsKLQly ZWxpYWJsZSA9IHhyZWxpYWJsZTsKLQlkZWJ1ZyhGMTAxLCJmdHJlc2V0IHJlbGlhYmxlIiwiIixy ZWxpYWJsZSk7Ci0gICAgfQotICAgIHVyY2xlYXIgPSAwOwotCi0gICAgaWYgKGF1dG9wYXRoKSB7 ICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFJFQ0VJVkUgUEFUSE5BTUVTIEFVVE8gKi8KLSAg ICAgICAgZm5ycGF0aCA9IFBBVEhfQVVUTzsKLSAgICAgICAgYXV0b3BhdGggPSAwOwotICAgIH0K LSAgICBpZiAoZmlsZWZpbGUpIHsgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIGxpc3QgKi8K LSAgICAgICAgemNsb3NlKFpNRklMRSk7Ci0gICAgICAgIG1ha2VzdHIoJmZpbGVmaWxlLE5VTEwp OwotICAgIH0KLSAgICBpZiAoY19zYXZlID4gLTEpIHsgICAgICAgICAgICAgICAgICAvKiBCbG9j ayBDaGVjayBUeXBlICovCi0gICAgICAgIGJjdHIgPSBjX3NhdmU7Ci0gICAgICAgIGNfc2F2ZSA9 IC0xOwotICAgIH0KLSAgICBpZiAoc3Nfc2F2ZSA+IC0xKSB7ICAgICAgICAgICAgICAgICAvKiBT bG93IFN0YXJ0ICovCi0gICAgICAgIHNsb3N0YXJ0ID0gc3Nfc2F2ZTsKLSAgICAgICAgc3Nfc2F2 ZSA9IC0xOwotICAgIH0KLSNpZmRlZiBDS19MQUJFTEVECi0gICAgaWYgKGdfbGZfb3B0cyA+IC0x KSB7Ci0gICAgICAgIGxmX29wdHMgPSBnX2xmX29wdHM7ICAgICAgICAgICAgLyogUmVzdG9yZSBs YWJlbGVkIHRyYW5zZmVyIG9wdGlvbnMgKi8KLSAgICAgICAgZ19sZl9vcHRzID0gLTE7Ci0gICAg fQotI2VuZGlmIC8qIENLX0xBQkVMRUQgKi8KLQotI2lmbmRlZiBOT0NTRVRTCi0gICAgaWYgKHRj c19zYXZlID4gLTEpIHsgICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVyIHNldHMgKi8KLSAgICAg ICAgdGNoYXJzZXQgPSB0Y3Nfc2F2ZTsKLSAgICAgICAgdGNzX3NhdmUgPSAtMTsKLSAgICB9Ci0g ICAgaWYgKGZjc19zYXZlID4gLTEpIHsKLSAgICAgICAgZmNoYXJzZXQgPSBmY3Nfc2F2ZTsKLSAg ICAgICAgZmNzX3NhdmUgPSAtMTsKLSAgICB9Ci0gICAgaWYgKGdfeGZyeGxhID4gLTEpIHsKLQl4 ZnJ4bGEgPSBnX3hmcnhsYTsKLQlnX3hmcnhsYSA9IC0xOwotICAgIH0KLSAgICBzZXR4bGF0eXBl KHRjaGFyc2V0LGZjaGFyc2V0KTsgICAgICAvKiBUcmFuc2xhdGlvbiB0eXBlICovCi0jZW5kaWYg LyogTk9DU0VUUyAqLwotCi0jaWZkZWYgTkVUQ09OTgotI2lmbmRlZiBOT1NQTAotICAgIGlmIChn X3Bzd2QpIHsKLSAgICAgICAgY2tzdHJuY3B5KHB3YnVmLGdfcHN3ZCxQV0JVRkwpOwotICAgICAg ICBtYWtlc3RyKCZnX3Bzd2QsTlVMTCk7Ci0gICAgfQotICAgIGlmIChnX3BmbGcgPiAtMSkgewot ICAgICAgICBwd2ZsZyA9IGdfcGZsZzsKLSAgICAgICAgZ19wZmxnID0gLTE7Ci0gICAgfQotICAg IGlmIChnX3BjcHQgPiAtMSkgewotICAgICAgICBwd2NyeXB0ID0gZ19wY3B0OwotICAgICAgICBn X3BjcHQgPSAtMTsKLSAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSNlbmRpZiAvKiBORVRDT05O ICovCi0KLSAgICBpZiAoZ19iaW5hcnkgPiAtMSkgeyAgICAgICAgICAgICAgICAvKiBGaWxlIHR5 cGUgKi8KLSAgICAgICAgYmluYXJ5ID0gZ19iaW5hcnk7Ci0gICAgICAgIGdfYmluYXJ5ID0gLTE7 Ci0gICAgfQotICAgIGlmIChnX3hmZXJtb2RlID4gLTEpIHsgICAgICAgICAgICAgIC8qIFRyYW5z ZmVyIG1vZGUgKi8KLSAgICAgICAgeGZlcm1vZGUgPSBnX3hmZXJtb2RlOwotICAgICAgICBnX3hm ZXJtb2RlID0gLTE7Ci0gICAgfQotI2lmZGVmIFBBVFRFUk5TCi0gICAgaWYgKGdfcGF0dGVybnMg PiAtMSkgeyAgICAgICAgICAgICAgLyogRmlsZW5hbWUgcGF0dGVybnMgKi8KLSAgICAgICAgcGF0 dGVybnMgPSBnX3BhdHRlcm5zOwotICAgICAgICBnX3BhdHRlcm5zID0gLTE7Ci0gICAgfQotI2Vu ZGlmIC8qIFBBVFRFUk5TICovCi0KLSAgICBpZiAoZ191c2VwaXBlcyA+IC0xKSB7Ci0gICAgICAg IHVzZXBpcGVzID0gZ191c2VwaXBlczsKLSAgICAgICAgZ191c2VwaXBlcyA9IC0xOwotICAgIH0K LSAgICBpZiAoZ19tYXRjaGRvdCA+IC0xKSB7Ci0gICAgICAgIG1hdGNoZG90ID0gZ19tYXRjaGRv dDsKLSAgICAgICAgZ19tYXRjaGRvdCA9IC0xOwotICAgIH0KLSAgICBpZiAoZ19wcm90byA+IC0x KSB7ICAgICAgICAgICAgICAgICAvKiBQcm90b2NvbCAqLwotICAgICAgICBwcm90b2NvbCA9IGdf cHJvdG87Ci0gICAgICAgIGdfcHJvdG8gPSAtMTsKLSAgICB9Ci0gICAgaWYgKGdfdXJwc2l6ID4g LTEpIHsKLSAgICAgICAgdXJwc2l6ID0gZ191cnBzaXo7Ci0gICAgICAgIGRlYnVnKEYxMDEsImZ0 cmVzZXQgcmVzdG9yaW5nIHVycHNpeiIsIiIsdXJwc2l6KTsKLSAgICAgICAgZ191cnBzaXogPSAt MTsKLSAgICB9Ci0gICAgaWYgKGdfc3BzaXpmID4gLTEpIHsKLSAgICAgICAgc3BzaXpmID0gZ19z cHNpemY7Ci0gICAgICAgIGRlYnVnKEYxMDEsImZ0cmVzZXQgcmVzdG9yaW5nIHNwc2l6ZiIsIiIs c3BzaXpmKTsKLSAgICAgICAgZ19zcHNpemYgPSAtMTsKLSAgICB9Ci0gICAgaWYgKGdfc3BzaXog PiAtMSkgewotICAgICAgICBzcHNpeiA9IGdfc3BzaXo7Ci0gICAgICAgIGRlYnVnKEYxMDEsImZ0 cmVzZXQgcmVzdG9yaW5nIHNwc2l6IiwiIixzcHNpeik7Ci0gICAgICAgIGdfc3BzaXogPSAtMTsK LSAgICB9Ci0gICAgaWYgKGdfc3BzaXpyID4gLTEpIHsKLSAgICAgICAgc3BzaXpyID0gZ19zcHNp enI7Ci0gICAgICAgIGRlYnVnKEYxMDEsImZ0cmVzZXQgcmVzdG9yaW5nIHNwc2l6ciIsIiIsc3Bz aXpyKTsKLSAgICAgICAgZ19zcHNpenIgPSAtMTsKLSAgICB9Ci0gICAgaWYgKGdfc3BtYXggPiAt MSkgewotICAgICAgICBzcG1heCA9IGdfc3BtYXg7Ci0gICAgICAgIGdfc3BtYXggPSAtMTsKLSAg ICB9Ci0gICAgaWYgKGdfd3Nsb3RyID4gLTEpIHsKLSAgICAgICAgd3Nsb3RyID0gZ193c2xvdHI7 Ci0gICAgICAgIGdfd3Nsb3RyID0gLTE7Ci0gICAgfQotICAgIGlmIChnX3ByZWZpeGluZyA+IC0x KSB7Ci0gICAgICAgIHByZWZpeGluZyA9IGdfcHJlZml4aW5nOwotICAgICAgICBnX3ByZWZpeGlu ZyA9IC0xOwotICAgIH0KLSAgICBpZiAoZ19mbmNhY3QgPiAtMSkgewotICAgICAgICBmbmNhY3Qg PSBnX2ZuY2FjdDsKLSAgICAgICAgZ19mbmNhY3QgPSAtMTsKLSAgICB9Ci0gICAgaWYgKGdfZm5j bnYgPiAtMSkgewotICAgICAgICBmbmNudiA9IGdfZm5jbnY7Ci0gICAgICAgIGdfZm5jbnYgPSAt MTsKLSAgICB9Ci0gICAgaWYgKGdfZm5zcGF0aCA+IC0xKSB7Ci0gICAgICAgIGZuc3BhdGggPSBn X2Zuc3BhdGg7Ci0gICAgICAgIGdfZm5zcGF0aCA9IC0xOwotICAgIH0KLSAgICBpZiAoZ19mbnJw YXRoID4gLTEpIHsKLSAgICAgICAgZm5ycGF0aCA9IGdfZm5ycGF0aDsKLSAgICAgICAgZ19mbnJw YXRoID0gLTE7Ci0gICAgfQotICAgIGlmIChnX3NraXBidXAgPiAtMSkgewotICAgICAgICBza2lw YnVwID0gZ19za2lwYnVwOwotICAgICAgICBnX3NraXBidXAgPSAtMTsKLSAgICB9Ci0gICAgbm9s aW5rcyA9IDI7CQkJLyogL0ZPTExPV0xJTktTIGlzIG5ldmVyIGdsb2JhbCAqLwotICAgIHJlY3Vy c2l2ZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIC9SRUNVUlNJVkUgY2FuIG5ldmVyIGJl IGdsb2JhbCAqLwotICAgIHhmaWxldHlwZSA9IC0xOwotCi0gICAgaWYgKGdfZGlzcGxhID4gLTEp IHsgICAgICAgICAgICAgICAgLyogRmlsZSB0cmFuc2ZlciBkaXNwbGF5ICovCi0gICAgICAgIGZk aXNwbGEgPSBnX2Rpc3BsYTsKLSAgICAgICAgZ19kaXNwbGEgPSAtMTsKLSAgICB9Ci0gICAgaWYg KGdfc3BhdGggPiAtMSkgeyAgICAgICAgICAgICAgICAgLyogU2VuZCBwYXRobmFtZXMgKi8KLSAg ICAgICAgZm5zcGF0aCA9IGdfc3BhdGg7Ci0gICAgICAgIGdfc3BhdGggPSAtMTsKLSAgICB9Ci0g ICAgaWYgKGdfcnBhdGggPiAtMSkgeyAgICAgICAgICAgICAgICAgLyogUmVjZWl2ZSBwYXRobmFt ZXMgKi8KLSAgICAgICAgZm5ycGF0aCA9IGdfcnBhdGg7Ci0gICAgICAgIGdfcnBhdGggPSAtMTsK LSAgICB9Ci0gICAgaWYgKGdfZm5jbnYgPiAtMSkgeyAgICAgICAgICAgICAgICAgLyogRmlsZW5h bWUgY29udmVyc2lvbiAqLwotICAgICAgICBmbmNudiA9IGdfZm5jbnY7Ci0gICAgICAgIGdfZm5j bnYgPSAtMTsKLSAgICB9Ci0jaWZkZWYgUElQRVNFTkQKLSAgICBtYWtlc3RyKCZzbmRmaWx0ZXIs Z19zZmlsdGVyKTsgICAgICAvKiBTZW5kIGZpbHRlciAqLwotICAgIG1ha2VzdHIoJnJjdmZpbHRl cixnX3JmaWx0ZXIpOyAgICAgIC8qIFJlY2VpdmUgZmlsdGVyICovCi0jZW5kaWYgLyogUElQRVNF TkQgKi8KLQotI2lmbmRlZiBOT0ZSSUxMUwotICAgIHJtYWlsZiA9IHJwcmludGYgPSAwOyAgICAg ICAgICAgICAgIC8qIE1BSUwgYW5kIFBSSU5UIG1vZGlmaWVycyBmb3IgU0VORCAqLwotICAgIG9w dGJ1ZlswXSA9IE5VTDsgICAgICAgICAgICAgICAgICAgIC8qIE1BSUwgYW5kIFBSSU5UIG9wdGlv bnMgKi8KLSNlbmRpZiAvKiBOT0ZSSUxMUyAqLwotCi0gICAgbW92aW5nID0gMDsgICAgICAgICAg ICAgICAgICAgICAgICAgLyogUmVzZXQgZGVsZXRlLWFmdGVyLXNlbmQgaW5kaWNhdG9yICovCi0g ICAgc25kYWZ0ZXJbMF0gID0gTlVMOyAgICAgICAgICAgICAgICAgLyogUmVzZXQgU0VORCBzZWxl Y3Rpb24gc3dpdGNoZXMgKi8KLSAgICBzbmRiZWZvcmVbMF0gPSBOVUw7Ci0KLSAgICBmb3IgKGkg PSAwOyBpIDwgTlNOREVYQ0VQVDsgaSsrKSB7Ci0gICAgICAgIGlmIChzbmRleGNlcHRbaV0pCi0g ICAgICAgICAgZnJlZShzbmRleGNlcHRbaV0pOwotICAgICAgICBzbmRleGNlcHRbaV0gPSBOVUxM OwotICAgICAgICBpZiAocmN2ZXhjZXB0W2ldKQotICAgICAgICAgIGZyZWUocmN2ZXhjZXB0W2ld KTsKLSAgICAgICAgcmN2ZXhjZXB0W2ldID0gTlVMTDsKLSAgICB9Ci0gICAgc25kbGFyZ2VyID0g IChDS19PRkZfVCktMTsKLSAgICBzbmRzbWFsbGVyID0gKENLX09GRl9UKS0xOwotICAgIGRlYnVn KEYxMDEsInByZXNlbnQgc25kc21hbGxlciIsIiIsc25kc21hbGxlcik7Ci0jaWZkZWYgR0ZUSU1F UgotICAgIGd0diA9IC0xLjA7Ci0gICAgb2xkZ3R2ID0gLTEuMDsKLSNlbHNlCi0gICAgZ3R2ID0g LTFMOwotICAgIG9sZGd0diA9IC0xTDsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0jZW5kaWYgLyog Tk9JQ1AgKi8KLX0KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotY2hhciAqCi10dGd0cG4oKSB7CQkJ CS8qIEdldCB0eXBpY2FsIHBvcnQgbmFtZSAqLwotLyoKLSAgSWRlYWxseSB0aGlzIHJvdXRpbmUg d291bGQgYmUgaW1wbGVtZW50ZWQgaW4gZWFjaCBvZiB0aGUgY2t1P2lvLiogbW9kdWxlcywKLSAg YnV0IHRoYXQgcmVxdWlyZXMgY2hhbmdpbmcgdGhlIEFQSSBkZWZpbml0aW9uLgotKi8KLSAgICBy ZXR1cm4oCi0jaWZkZWYgT1MyCi0jaWZkZWYgT1MyT05MWQotIkNPTTEiCi0jZWxzZSAgLyogT1My T05MWSAqLwotIlRBUEkgWyBuYW1lIF0gb3IgQ09NMSIKLSNlbmRpZiAvKiBPUzJPTkxZICovCi0j ZWxzZSAgLyogT1MyICovCi0jaWZkZWYgVk1TCi0iVFhBMDosIFRUQTA6LCBvciBMVEEwOiIKLSNl bHNlICAvKiBWTVMgKi8KLSNpZmRlZiBTT0xBUklTCi0iL2Rldi9jdWEvYSIKLSNlbHNlICAvKiBT T0xBUklTICovCi0jaWZkZWYgSFBVWDEwCi0iL2Rldi9jdWEwcDAiCi0jZWxzZSAgLyogSFBVWDEw ICovCi0jaWZkZWYgSFBVWAotIi9kZXYvY3VhMDAiCi0jZWxzZSAgLyogSFBVWCAqLwotI2lmZGVm IF9fRnJlZUJTRF9fCi0iL2Rldi9jdWFhMCIKLSNlbHNlICAvKiBfX0ZyZWVCU0RfXyAqLwotI2lm ZGVmIF9fbGludXhfXwotIi9kZXYvdHR5UzAiCi0jZWxzZSAgLyogX19saW51eF9fICovCi0jaWZk ZWYgQlNENDQKLSIvZGV2L3R0eTAwIgotI2Vsc2UgIC8qIEJTRDQ0ICovCi0jaWZkZWYgT1NLCi0i L3QxIgotI2Vsc2UgIC8qIE9TSyAqLwotI2lmZGVmIFFOWAotIi9kZXYvc2VyMSIKLSNlbHNlICAv KiBRTlggKi8KLSNpZmRlZiBRTlg2Ci0iL2Rldi9zZXIxIgotI2Vsc2UgIC8qIFFOWDYgKi8KLSNp ZmRlZiBVTklYV0FSRQotIi9kZXYvdGVybS8wMCBvciAvZGV2L3R0eTAwIgotI2Vsc2UgIC8qIFVO SVhXQVJFICovCi0jaWZkZWYgQ0tfU0NPVjUKLSIvZGV2L3R0eTFBIgotI2Vsc2UgIC8qIENLX1ND T1Y1ICovCi0jaWZkZWYgQ0tfU0NPMzJWNAotIi9kZXYvdHR5MUEiCi0jZWxzZSAgLyogQ0tfU0NP MzJWNCAqLwotI2lmZGVmIE1fWEVOSVgKLSIvZGV2L3R0eTFBIgotI2Vsc2UgIC8qIE1fWEVOSVgg Ki8KLSNpZmRlZiBBSVhSUwotIi9kZXYvdHR5MCIKLSNlbHNlICAvKiBBSVhSUyAqLwotI2lmZGVm IERHVVgKLSIvZGV2L3R0eTAwIgotI2Vsc2UgIC8qIERHVVggKi8KLSNpZmRlZiBkYXRhZ2VuZXJh bAotIkBjb24xIgotI2Vsc2UgIC8qIGRhdGFnZW5lcmFsICovCi0jaWZkZWYgSVJJWAotIi9kZXYv dHR5bTAiCi0jZWxzZSAgLyogSVJJWCAqLwotI2lmZGVmIFNVTk9TNAotIi9kZXYvdHR5aDAiCi0j ZWxzZSAgLyogU1VOT1M0ICovCi0jaWZkZWYgU1Y2OFIzVjYKLSIvZGV2L3NjYzAiCi0jZWxzZSAg LyogU1Y2OFIzVjYgKi8KLSNpZmRlZiBNT1RTVjg4UjQKLSIvZGV2L2NvbnR0eTAwIgotI2Vsc2Ug IC8qIE1PVFNWODhSNCAqLwotI2lmZGVmIE5FWFQKLSIvZGV2L2N1ZmEiCi0jZWxzZQotI2lmZGVm IE9TRgotIi9kZXYvdHR5ZDEiCi0jZWxzZQotI2lmZGVmIFNJTklYCi0iL2Rldi90dHljMSIKLSNl bHNlCi0jaWZkZWYgVU5JWAotIi9kZXYvY3VhLCAvZGV2L2FjdSwgL2Rldi90dHkwLCBldGMiCi0j ZWxzZSAgLyogVU5JWCAqLwotIihzb3JyeSBubyBleGFtcGxlIGF2YWlsYWJsZSkiCi0jZW5kaWYg LyogVU5JWCAqLwotI2VuZGlmIC8qIFNJTklYICovCi0jZW5kaWYgLyogT1NGICovCi0jZW5kaWYg LyogTkVYVCAqLwotI2VuZGlmIC8qIE1PVFNWODhSNCAqLwotI2VuZGlmIC8qIFNWNjhSM1Y2ICov Ci0jZW5kaWYgLyogU1VOT1M0ICovCi0jZW5kaWYgLyogSVJJWCAqLwotI2VuZGlmIC8qIGRhdGFn ZW5lcmFsICovCi0jZW5kaWYgLyogREdVWCAqLwotI2VuZGlmIC8qIEFJWCAqLwotI2VuZGlmIC8q IE1fWEVOSVggKi8KLSNlbmRpZiAvKiBDS19TQ08zMlY0ICovCi0jZW5kaWYgLyogQ0tfU0NPVjUg Ki8KLSNlbmRpZiAvKiBVTklYV0FSRSAqLwotI2VuZGlmIC8qIFFOWDYgKi8KLSNlbmRpZiAvKiBR TlggKi8KLSNlbmRpZiAvKiBPU0sgKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2VuZGlmIC8qIF9f bGludXhfXyAqLwotI2VuZGlmIC8qIF9fRnJlZUJTRF9fICovCi0jZW5kaWYgLyogSFBVWCAqLwot I2VuZGlmIC8qIEhQVVgxMCAqLwotI2VuZGlmIC8qIFNPTEFSSVMgKi8KLSNlbmRpZiAvKiBWTVMg Ki8KLSNlbmRpZiAvKiBPUzIgKi8KLQkgICApOwotfQotCi0vKiAgQyBLIF8gRSBSIFIgUyBUIFIg IC0tICBSZXR1cm4gbWVzc2FnZSBmcm9tIG1vc3QgcmVjZW50IHN5c3RlbSBlcnJvciAqLwotCi0j aWZkZWYgQ0tST09UCi1leHRlcm4gaW50IGNrcm9vdGVycjsKLSNlbmRpZiAvKiBDS1JPT1QgKi8K LQotY2hhciAqCi1ja19lcnJzdHIoKSB7Ci0jaWZkZWYgVVNFX1NUUkVSUk9SCi0jaWZuZGVmIENL X0FOU0lMSUJTCi0gICAgLyogU2hvdWxkIGhhdmUgYmVlbiBkZWNsYXJlZCBpbiA8c3RyaW5nLmg+ ICovCi1fUFJPVE9UWVAoIGNoYXIgKiBzdHJlcnJvciwgKGludCkgKTsKLSNlbmRpZiAvKiBDS19B TlNJTElCUyAqLwotI2lmZGVmIENLUk9PVAotICAgIGlmIChja3Jvb3RlcnIpCi0gICAgICByZXR1 cm4oIk9mZiBsaW1pdHMiKTsKLSNlbmRpZiAvKiBDS1JPT1QgKi8KLSAgICByZXR1cm4oc3RyZXJy b3IoZXJybm8pKTsKLSNlbHNlICAvKiAhVVNFX1NUUkVSUk9SICovCi0jaWZkZWYgVk1TCi0gICAg ZXh0ZXJuIGNoYXIgKiBja3Ztc2VycnN0cih1bnNpZ25lZCBsb25nKTsKLSNpZmRlZiBDS1JPT1QK LSAgICBpZiAoY2tyb290ZXJyKQotICAgICAgcmV0dXJuKCJPZmYgbGltaXRzIik7Ci0jZW5kaWYg LyogQ0tST09UICovCi0gICAgcmV0dXJuKGNrdm1zZXJyc3RyKDBMKSk7Ci0jZWxzZSAgLyogIVZN UyAqLwotI2lmZGVmIEJTRDQ0Ci0jaWZkZWYgX18zODZCU0RfXwotI2lmbmRlZiBORFNZU0VSUkxJ U1QKLSAgICBleHRlcm4gaW50IHN5c19uZXJyOwotICAgIGV4dGVybiBjaGFyICpzeXNfZXJybGlz dFtdOwotI2VuZGlmIC8qIE5EU1lTRVJSTElTVCAqLwotI2Vsc2UgIC8qICFfXzM4NkJTRF9fICov Ci0jaWZuZGVmIF9fYnNkaV9fCi0jaWZuZGVmIE5EU1lTRVJSTElTVAotICAgIGV4dGVybiBpbnQg c3lzX25lcnI7Ci0gICAgZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IHN5c19lcnJsaXN0W107Ci0j ZW5kaWYgLyogTkRTWVNFUlJMSVNUICovCi0jZW5kaWYgLyogX19ic2RpX18gKi8KLSNlbmRpZiAv KiBfXzM4NkJTRF9fICovCi0jaWZkZWYgQ0tST09UCi0gICAgaWYgKGNrcm9vdGVycikKLSAgICAg IHJldHVybigiT2ZmIGxpbWl0cyIpOwotICAgIGVsc2UKLSNlbmRpZiAvKiBDS1JPT1QgKi8KLSAg ICBpZiAoZXJybm8gPj0gc3lzX25lcnIpCi0gICAgICByZXR1cm4oIkVycm9yIG51bWJlciBvdXQg b2YgcmFuZ2UiKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4oKGNoYXIgKikgc3lzX2Vycmxpc3Rb ZXJybm9dKTsKLSNlbHNlIC8qICFCU0Q0NCAqLwotI2lmZGVmIEFUVFNWCi0jaWZuZGVmIE5EU1lT RVJSTElTVAotICAgIGV4dGVybiBpbnQgc3lzX25lcnI7Ci0gICAgZXh0ZXJuIGNoYXIgKnN5c19l cnJsaXN0W107Ci0jZW5kaWYgLyogTkRTWVNFUlJMSVNUICovCi0jaWZkZWYgQ0tST09UCi0gICAg aWYgKGNrcm9vdGVycikKLSAgICAgIHJldHVybigiT2ZmIGxpbWl0cyIpOwotICAgIGVsc2UKLSNl bmRpZiAvKiBDS1JPT1QgKi8KLSAgICBpZiAoZXJybm8gPj0gc3lzX25lcnIpCi0gICAgICByZXR1 cm4oIkVycm9yIG51bWJlciBvdXQgb2YgcmFuZ2UiKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4o KGNoYXIgKikgc3lzX2Vycmxpc3RbZXJybm9dKTsKLSNlbHNlIC8qICFBVFRTViAqLwotI2lmZGVm IEJTRDQKLSNpZm5kZWYgTkRTWVNFUlJMSVNUCi0gICAgZXh0ZXJuIGludCBzeXNfbmVycjsKLSAg ICBleHRlcm4gY2hhciAqc3lzX2Vycmxpc3RbXTsKLSNlbmRpZiAvKiBORFNZU0VSUkxJU1QgKi8K LSNpZmRlZiBDS1JPT1QKLSAgICBpZiAoY2tyb290ZXJyKQotICAgICAgcmV0dXJuKCJPZmYgbGlt aXRzIik7Ci0gICAgZWxzZQotI2VuZGlmIC8qIENLUk9PVCAqLwotICAgIGlmIChlcnJubyA+PSBz eXNfbmVycikKLSAgICAgIHJldHVybigiRXJyb3IgbnVtYmVyIG91dCBvZiByYW5nZSIpOwotICAg IGVsc2UKLSAgICAgIHJldHVybigoY2hhciAqKSBzeXNfZXJybGlzdFtlcnJub10pOwotI2Vsc2UK LSNpZmRlZiBPUzIKLSNpZm5kZWYgTkRTWVNFUlJMSVNUCi0gICAgZXh0ZXJuIGNoYXIgKnN5c19l cnJsaXN0W107Ci0jZW5kaWYgLyogTkRTWVNFUlJMSVNUICovCi0jaWZkZWYgTlQKLSAgICBleHRl cm4gaW50X3N5c19uZXJyOwotI2VuZGlmIC8qIE5UICovCi0gICAgY2hhciAqZTsKLSNpZmRlZiBD S1JPT1QKLSAgICBpZiAoY2tyb290ZXJyKQotICAgICAgcmV0dXJuKCJPZmYgbGltaXRzIik7Ci0j ZW5kaWYgLyogQ0tST09UICovCi0gICAgZSA9IChlcnJubyA+IC0xCi0jaWZkZWYgTlQKLSAgICAg ICAgICYmIGVycm5vIDw9IF9zeXNfbmVycgotI2VuZGlmIC8qIE5UICovCi0gICAgICAgICApID8K LSNpZmRlZiBOVAotICAgICAgICAgKGNoYXIgKikgc3lzX2Vycmxpc3RbZXJybm9dCi0jZWxzZSAv KiBOVCAqLwotICAgICAgICAgLyogSSBkb24ndCBrbm93IGhvdyB0byBnZXQgYSBDTElCIGVycm9y IHN0cmluZyBpbiBPUy8yICovCi0gICAgICAgICBzdHJlcnJvcihlcnJubykKLSNlbmRpZiAvKiBO VCAqLwotICAgICAgICAgICAgIDogIiI7Ci0gICAgcmV0dXJuKGUgPyBlIDogIiIpOwotI2Vsc2Ug LyogT1MyICovCi0gICAgcmV0dXJuKCIiKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBC U0Q0ICovCi0jZW5kaWYgLyogQVRUU1YgKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2VuZGlmIC8q IFZNUyAqLwotI2VuZGlmIC8qIFVTRV9TVFJFUlJPUiAqLwotfQotCi0jaWZkZWYgUEFUVEVSTlMK LS8qCi0gIEZpbGVuYW1lIHBhdHRlcm4gcmVjb2duaXRpb24gbGlzdHMgZm9yIGF1dG9tYXRpYyB0 ZXh0L2JpbmFyeSBzd2l0Y2hpbmcuCi0gIFRoZXNlIGFyZSBzb21ld2hhdCBwYXNzZSBhZnRlciB0 aGUgYWRkaXRpb24gb2Ygc2NhbmZpbGUoKSAgKDcuMCkuCi0gIEJ1dCB3aXRoIHRoZSBhZGRpdGlv biBvZiBGVFAgW01dR0VULCB0aGV5J3JlIGJhY2sgaW4gc3R5bGUgKDguMCkuCi0KLSAgQWx0aG91 Z2gsIHdpdGggRlRQIHRoZSBsaXN0cyBuZWVkIHRvIGJlIHVzZWQgaW4gdGhlIHJldmVyc2UuICBX aXRoCi0gIEtlcm1pdCB0aGUgbGlzdCBpcyB1c2VkIHRvIGltcGx5IHRoZSB0eXBlcyBvZiB0aGUg bG9jYWwgc3lzdGVtLiAgV2hlcmVhcwotICB3aXRoIEZUUCwgdGhlIGxpc3QgbXVzdCBiZSB1c2Vk IHRvIGltcGx5IHRoZSB0eXBlIG9mIHRoZSByZW1vdGUgc3lzdGVtLgotICBUaGVyZWZvcmUsIGFs bCBwbGF0Zm9ybXMgbXVzdCBub3cgc3VwcG9ydCBhbGwgb2YgdGhlIGxpc3RzLgotKi8KLWNoYXIg KnR4dHBhdHRlcm5zW0ZUUEFUVEVSTlMrMV0gPSB7IE5VTEwsIE5VTEwgfTsKLWNoYXIgKmJpbnBh dHRlcm5zW0ZUUEFUVEVSTlMrMV0gPSB7IE5VTEwsIE5VTEwgfTsKLS8qCi0gIERlZmF1bHQgcGF0 dGVybiBsaXN0cyBmb3IgZWFjaCBwbGF0Zm9ybS4uLgotCi0gIE5PVEU6IEluIG1vc3QgY2FzZXMg d2UgbGVhdmUgIi5obHAiLCAiLmluaSIsIGFuZCAiLnNjciIgYWxvbmU7IGFsdGhvdWdoIHRoZXkK LSAgYXJlIHRyYWRpdGlvbmFsbHkgdGV4dCB0eXBlcywgdGhleSBhcmUgYmluYXJ5IGluIFdpbmRv d3MuICBTbyB0aGV5IGFyZQotICBoYW5kbGVkIGJ5IHRoZSBwcmV2YWlsaW5nIFNFVCBGSUxFIFRZ UEUsIHJhdGhlciB0aGFuIGF1dG9tYXRpY2FsbHkuCi0gIFNpbWlsYXJseSBmb3IgIi5kYXQiLCAi LmluZiIsIGFuZCBzbyBvbi4gIEFsc28gIi5wcyIgc2luY2UgUG9zdFNjcmlwdCBmaWxlcwotICBh cmUgbm90IGFsd2F5cyB0ZXh0LiAgIi5sb2ciIGlzIG9taXR0ZWQgc2luY2UgbG9ncyBjYW4gYmUg dGV4dCBvciBiaW5hcnksCi0gIGV4Y2VwdCBpbiBWTVMgdGhleSBhcmUgdXN1YWxseSB0ZXh0LCBl dGMgZXRjLgotCi0gIExhdGVyIChTZXAgMjAwMyk6IEFkZCBQb3N0U2NyaXB0IHRvIGJpbmFyeSBw YXR0ZXJucy4KLSovCi1zdGF0aWMgY2hhciAqdHh0cFtTWVNfTUFYXVtGVFBBVFRFUk5TXSA9IHsK LSAgICAvKiBVTktOT1dOICovIHsKLQlOVUxMLCBOVUxMCi0gICAgfSwKLSAgICB7CQkJCQkvKiBV TklYICovCi0gICAgIioudHh0IiwiKi5jIiwiKi5oIiwiKi5yIiwiKi53IiwiKi5jcHAiLCIqLmNj IiwiKi5rc2MiLCIqLmJ3ciIsIioudXBkIiwKLSAgICAiKi5odG1sIiwiKi5odG0iLCIqLm1zcyIs IioudGV4IiwiKi5uciIsIltNbV1ha2VmaWxlIiwgIiouaGV4IiwgIiouaHF4IiwKLSAgICAiKi5m b3IiLCIqLmY3NyIsIiouZiIsIiouRiIsIioucyIsIioucGFzIiwiKi5qYXZhIiwiKi5lbCIsIiou bGlzcCIsIiouc2giLAotICAgICIqLm00IiwiKi5wZXJsIiwiKi5wbCIsIioucG9kIiwiKi5wbSIs IiouYXdrIiwiKi5zbm8iLCIqLnNwdCIsIiouc2VkIiwKLSAgICAiKi5rc2MiLCIqLlRYVCIsICIq cmVhZC5tZSIsICIqUkVBRC5NRSIsICIuKiIsICIqLy4qIiwgIioubWVtIiwiKi5tYWMiLAotICAg IE5VTEwKLSAgICB9LAotICAgIHsJCQkJCS8qIFdJTjMyICovCi0gICAgIioudHh0IiwiKi5rc2Mi LCIqLmh0bSIsIiouaHRtbCIsIiouYmF0IiwiKi5jbWQiLCIqLmphdiIsIiouYXNtIiwgIiouaGV4 IiwKLSAgICAiKi5ocXgiLCAiKi5jIiwgIiouaCIsICIqLmNwcCIsICIqLmhwcCIsICIqLmN4eCIs ICIqLmN4eCIsICIqLnciLAotICAgICIqLmphdmEiLCAiKi5id3IiLCAiKi51cGQiLCAiKi5tYWsi LCAicmVhZC5tZSIsICIqLm1hcCIsICJtYWtlZmlsZSIsCi0gICAgIioubWVtIiwiKi5tYWMiLCIq LmNjIiwiKi5wbCIsIioucG9kIiwiKi5wbSIsIioubTQiLE5VTEwKLSAgICB9LAotICAgIHsJCQkJ CS8qIFZNUyAqLwotICAgICIqLmNvbSIsIioudHh0IiwiKi5jIiwgICIqLmZvciIsIioucGFzIiwi Ki5ybm8iLCIqLnJuaCIsIioubWFyIiwiKi5ibGkiLAotICAgICIqLmhscCIsIioubXNzIiwiKi5k b2MiLCIqLmJ3ciIsIiouY2xkIiwiKi5oZXgiLCIqLmJhcyIsIiouaW5pIiwiKi5sb2ciLAotICAg ICIqLm1tcyIsIioub3B0IiwiKi5rc2MiLCIqLnBlcmwiLCIqLnBsIiwiKi5wb2QiLCIqLnBtIiwi Ki5zbm8iLCIqLnNwdCIsCi0gICAgIioubWVtIixOVUxMCi0gICAgfSwKLSAgICB7CQkJCQkvKiBP UzIgKi8KLSAgICAiKi50eHQiLCIqLmtzYyIsIiouaHRtIiwiKi5odG1sIiwiKi5iYXQiLCIqLmNt ZCIsIiouamF2IiwiKi5hc20iLCAiKi5oZXgiLAotICAgICIqLmhxeCIsICIqLmMiLCAiKi5oIiwg IiouY3BwIiwgIiouaHBwIiwgIiouY3h4IiwgIiouY3h4IiwgIioudyIsCi0gICAgIiouamF2YSIs ICIqLmJ3ciIsICIqLnVwZCIsICIqLm1hayIsICJyZWFkLm1lIiwgIioubWFwIiwgIm1ha2VmaWxl IiwKLSAgICBOVUxMCi0gICAgfSwKLSAgICB7CQkJCQkvKiBET1MgKi8KLSAgICAiKi50eHQiLCIq LmtzYyIsIiouaHRtIiwiKi5iYXQiLCIqLmNtZCIsIiouamF2IiwiKi5hc20iLCAiKi5oZXgiLAot ICAgICIqLmhxeCIsICIqLmMiLCAiKi5oIiwgIiouY3BwIiwgIiouaHBwIiwgIiouY3h4IiwgIiou Y3h4IiwgIioudyIsCi0gICAgIiouYndyIiwgIioudXBkIiwgIioubWFrIiwgInJlYWQubWUiLCAi Ki5tYXAiLCAibWFrZWZpbGUiLCBOVUxMCi0gICAgfSwKLSAgICB7CQkJCQkvKiBUT1BTLTEwICov Ci0gICAgIiouY21kIiwiKi5obHAiLCIqLmRvYyIsIiouaW5pIiwiKi50eHQiLCIqLm1hYyIsIiou Zm9yIiwiKi5zYWkiLCIqLmJsaSIsCi0gICAgIioucGFzIiwiKi5zbm8iLCIqLnNwdCIsIioucGNs IiwiKi5tc3MiLCIqLnJubyIsIiouYjM2IiwiKi50ZXgiLCIqLnB1YiIsCi0gICAgIioucmVxIiwi Ki5yMzYiLCIqLm1lbSIsIiouYndyIiwiKi5jY2wiLCIqLmN0bCIsIioucm5oIiwiKi5rc2MiLE5V TEwKLSAgICB9LAotICAgIHsJCQkJCS8qIFRPUFMtMjAgKi8KLSAgICAiKi5jbWQiLCIqLmhscCIs IiouZG9jIiwiKi5pbmkiLCIqLnR4dCIsIioubWFjIiwiKi5mb3IiLCIqLnNhaSIsIiouYmxpIiwK LSAgICAiKi5wYXMiLCIqLnNubyIsIiouc3B0IiwiKi5wY2wiLCIqLm1zcyIsIioucm5vIiwiKi5i MzYiLCIqLnRleCIsIioucHViIiwKLSAgICAiKi5yZXEiLCIqLnIzNiIsIioubWVtIiwiKi5id3Ii LCIqLmNjbCIsIiouY3RsIiwiKi5ybmgiLCIqLmtzYyIsTlVMTAotICAgIH0sCi0gICAgewkJCQkJ LyogU1RSQVRVUyBWT1MgKi8KLSAgICAiKi50eHQiLCIqLmtzYyIsIiouaHRtIiwiKi5odG1sIiwi Ki5iYXQiLCAiKi5jbWQiLCIqLmphdiIsIiouYXNtIiwiKi5oZXgiLAotICAgICIqLmhxeCIsIiou YyIsICAiKi5oIiwgICIqLnciLCAgICIqLmphdmEiLCIqLmJ3ciIsIioudXBkIiwiKi50dHAiLCIq LmNtIiwKLSAgICAiKi5wbDEiLCIqLmVtYWNzIiwgInJlYWQubWUiLCAiKi5wbCIsICJtYWtlZmls ZSIsIE5VTEwKLSAgICB9LAotICAgIHsJCQkJCS8qIERHIEFPUy9WUyAqLwotICAgICIqLnR4dCIs ICIqLmMiLCAiKi5oIiwgIioudyIsICIqLmVyIiwgIiouYndyIiwgIioudXBkIiwgInJlYWQubWUi LAotICAgICIqLmNsaSIsICIqLmtzYyIsIE5VTEwKLSAgICB9LAotICAgIHsJCQkJCS8qIE9TSyAq LwotICAgICIqLmMiLCIqLmNwcCIsIiouaCIsIiouYSIsIipha2VmaWxlIiwgLyogcHJvZ3JhbSBz b3VyY2VzICovCi0gICAgIiouZm9yIiwiKi5mNzciLCIqLmYiLCIqLkYiLCIqLnMiLCIqLnBhcyIs IiouamF2YSIsIiouZWwiLCIqLmxpc3AiLAotICAgICIqLnNoIiwiKi5wZXJsIiwiKi5hd2siLCIq LnNubyIsIiouc3B0IiwiKi5zZWQiLAotICAgICIqLnR4dCIsIioudyIsCQkJLyogZ2VuZXJhbCB0 ZXh0ICovCi0gICAgIioua3NjIiwiKi5id3IiLCIqLnVwZCIsCi0gICAgIiouaHRtbCIsIiouaHRt IiwiKi5tc3MiLCIqLnRleCIsIioubnIiLCIqLmhleCIsICIqLmhxeCIsCi0gICAgIiouVFhUIiwg IipyZWFkLm1lIiwgIipSRUFELk1FIiwgIi4qIiwgIiovLioiLAotICAgIE5VTEwKLSAgICB9Ci19 OwotCi0vKiBOb3RlOiAuRE9DIGFkZGVkIHRvIChzb21lKSBiaW5hcnkgcGF0dGVybnMgSnVuZSAx OTk4Li4uIE1pY3Jvc29mdCB3aW5zLiAqLwotCi1zdGF0aWMgY2hhciAqYmlucFtTWVNfTUFYXVtG VFBBVFRFUk5TXSA9IHsKLSAgICB7CQkJCQkvKiBVTktOT1dOICovCi0gICAgTlVMTCwgTlVMTAot ICAgIH0sCi0gICAgewkJCQkJLyogVU5JWCAqLwotICAgICIqLmd6IiwiKi5aIiwiKi50Z3oiLCIq LmdpZiIsICIqLnRhciIsIiouemlwIiwiKi5vIiwiKi5zbyIsIiouYSIsIioub3V0IiwKLSAgICAi Ki5leGUiLCAiKi5qcGciLCAiKi5qcGVnIiwgIioudGlmIiwiKi50aWZmIiwgIioucGRmIiwgIiou c28uKiIsICIqLmNsYXNzIiwKLSAgICAiKi5ycG0iLCAiKi5ibXAiLCAiKi5iejIiLCAiKi5CTVAi LCAiKi5kbGwiLCAiKi5kb2MiLCAiKi52eGQiLCAiKi5kY3giLAotICAgICIqLnhsKiIsICIqLmx6 aCIsICIqLmxoeiIsICIqLmF1IiwgIioudm9jIiwgIioubXBnIiwgIioubXBlZyIsIlt3a11lcm1p dCIsCi0gICAgIioucHMiLCBOVUxMCi0gICAgfSwKLSAgICB7CQkJCQkvKiBXSU4zMiAqLwotICAg ICIqLmV4ZSIsICIqLnppcCIsICIqLm9iaiIsICIqLmNvbSIsICIqLmdpZiIsICIqLmpwZyIsICIq LndhdiIsICIqLnJhbSIsCi0gICAgIiouY2xhc3MiLCIqLmNsYSIsIiouZGxsIiwgIiouZHJ2Iiwg Iioub2N4IiwgIioudmJ4IiwgIioubGliIiwgIiouaWNvIiwKLSAgICAiKi5ibXAiLCAiKi50aWYi LCAiKi50YXIiLCAiKi5neiIsICAiKi50Z3oiLCAiKi54bCoiLCAiKi5kb2MiLCAiKi52eGQiLAot ICAgICIqLnBkZiIsICIqLmx6aCIsICIqLnZ4ZCIsICIqLnNuZCIsICIqLmF1IiwgIiogLnZvYyIs ICIqLm1wZyIsICIqLm1wZWciLAotICAgICIqLnBzIiwgTlVMTAotICAgIH0sCi0gICAgewkJCQkJ LyogVk1TICovCi0gICAgIiouZXhlIiwiKi5vYmoiLCIqLmJhayIsIiouYmluIiwiKi5hZGYiLCIq LnN0YiIsIioubWFpIiwiKi5zeXMiLCIqLmRtcCIsCi0gICAgIioucHMiLCAiKi5kYXQiLCIqLnBh ciIsIE5VTEwKLSAgICB9LAotICAgIHsJCQkJCS8qIE9TMiAqLwotICAgICIqLmV4ZSIsICIqLnpp cCIsICIqLm9iaiIsICIqLmNvbSIsICIqLmdpZiIsICIqLmpwZyIsICIqLndhdiIsICIqLnJhbSIs Ci0gICAgIiouY2xhc3MiLCAiKi5jbGEiLCAiKi5kbGwiLCAiKi5kcnYiLCAiKi5vY3giLCAiKi52 YngiLCAiKi5saWIiLCAiKi5pY28iLAotICAgICIqLmJtcCIsICIqLnRpZiIsICIqLnRhciIsICIq Lmd6IiwgIioudGd6IiwgIioueGwqIiwgIiouZG9jIiwgIioudnhkIiwKLSAgICAiKi5wZGYiLCAi Ki5wcyIsICIqLmx6aCIsIE5VTEwKLSAgICB9LAotICAgIHsJCQkJCS8qIERPUyAqLwotICAgICIq LmV4ZSIsICIqLnppcCIsICIqLm9iaiIsICIqLmNvbSIsICIqLmdpZiIsICIqLmpwZyIsICIqLndh diIsICIqLnJhbSIsCi0gICAgIiouY2xhIiwgIiouZGxsIiwgIiouZHJ2IiwgIioub2N4IiwgIiou dmJ4IiwgIioubGliIiwgIiouaWNvIiwKLSAgICAiKi5ibXAiLCAiKi50aWYiLCAiKi50YXIiLCAi Ki5neiIsICIqLnRneiIsICIqLnhsKiIsICIqLmRvYyIsICIqLnZ4ZCIsCi0gICAgIioucGRmIiwg IioucHMiLCAiKi5semgiLCBOVUxMCi0gICAgfSwKLSAgICB7CQkJCQkvKiBUT1BTMTAgKi8KLSAg ICAiKi5leGUiLCIqLnNhdiIsIiouYmluIiwiKi5yaW0iLCIqLnJlbCIsIioudW52IiwiKi5saWIi LCIqLnRhcCIsIiouZHZpIiwKLSAgICAiKi5wcyIsIE5VTEwKLSAgICB9LAotICAgIHsJCQkJCS8q IFRPUFMyMCAqLwotICAgICIqLmV4ZSIsIiouc2F2IiwiKi5iaW4iLCIqLnJpbSIsIioucmVsIiwi Ki51bnYiLCIqLmxpYiIsIioudGFwIiwiKi5kdmkiLAotICAgICIqLnBzIiwgTlVMTAotICAgIH0s Ci0gICAgewkJCQkJLyogU1RSQVRVUyBWT1MgKi8KLSAgICAiKi5leGUiLCAiKi56aXAiLCAiKi5v YmoiLCAiKi5jb20iLCAiKi5naWYiLCAiKi5qcGciLCAiKi53YXYiLCAiKi5yYW0iLAotICAgICIq LmNsYXNzIiwgIiouY2xhIiwgIiouZGxsIiwgIiouZHJ2IiwgIioub2N4IiwgIioudmJ4IiwgIiou bGliIiwgIiouaWNvIiwKLSAgICAiKi5ibXAiLCAiKi50aWYiLCAiKi50YXIiLCAiKi5neiIsICIq LnRneiIsICIqLnhsKiIsICIqLmRvYyIsICIqLnZ4ZCIsCi0gICAgIioucGRmIiwgIioucHMiLCAi Ki5semgiLCAiKi5wbSIsIE5VTEwKLSAgICB9LAotICAgIHsJCQkJCS8qIERHICovCi0gICAgIiou b2IiLCAiKi5wciIsICIqLmRtcCIsICIqLnBzIiwgTlVMTAotICAgIH0sCi0gICAgeyAvKiBPU0sg Ki8KLSAgICAiKi5neiIsIiouWiIsIioueiIsIioudGd6IiwiKi5saHoiLCIqLnRhciIsCS8qIGFy Y2hpdmVycyAqLwotICAgICIqLnppcCIsIiouYXIiLCIqLnpvbyIsIioucnBtIiwiKi5semgiLAot ICAgIC8qIG9iamVjdCBmaWxlcywgbGlicmFyaWVzLCBleGVjdXRhYmxlcyAqLwotICAgICIqLnIi LCIqLmwiLCIqLmV4ZSIsICIqLmRsbCIsICIqLnNvLioiLCAiKi5jbGFzcyIsCi0gICAgLyogaW1h Z2VzICovCi0gICAgIiouZ2lmIiwgIiouanBnIiwgIiouanBlZyIsICIqLnRpZiIsIioudGlmZiIs ICIqLnBkZiIsICIqLnBzIiwKLSAgICAiKi5ibXAiLCAiKi5iejIiLCAiKi5CTVAiLCIqLnBjeCIs Ci0gICAgTlVMTAotICAgIH0KLX07Ci0KLS8qCi0gIFNldCB1cCBkZWZhdWx0IHBhdHRlcm4gbGlz dHMgc28gdGhleSBjYW4gYmUgZnJlZWQgYW5kIHJlLW1hbGxvYydkLgotICBFYWNoIHBhdHRlcm4g bGlzdCBtdXN0IHRlcm1pbmF0ZWQgYnkgYSBudWxsIGVsZW1lbnQuCi0qLwotVk9JRAotaW5pdHBh dCgpIHsKLSAgICBpbnQgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgRlRQQVRURVJOUzsgaSsrKSB7 Ci0gICAgICAgIHR4dHBhdHRlcm5zW2ldID0gTlVMTDsKLSAgICAgICAgYmlucGF0dGVybnNbaV0g PSBOVUxMOwotICAgIH0KLSAgICBmb3IgKGkgPSAwOyBpIDwgRlRQQVRURVJOUzsgaSsrKSB7Ci0j aWZkZWYgVU5JWAotICAgICAgICBtYWtlc3RyKCYodHh0cGF0dGVybnNbaV0pLHR4dHBbU1lTX1VO SVhdW2ldKTsKLSNlbHNlIC8qIFVOSVggKi8KLSNpZmRlZiBPUzIKLSNpZmRlZiBOVAotICAgICAg ICBtYWtlc3RyKCYodHh0cGF0dGVybnNbaV0pLHR4dHBbU1lTX1dJTjMyXVtpXSk7Ci0jZWxzZSAv KiBOVCAqLwotICAgICAgICBtYWtlc3RyKCYodHh0cGF0dGVybnNbaV0pLHR4dHBbU1lTX09TMl1b aV0pOwotI2VuZGlmIC8qIE5UICovCi0jZWxzZSAvKiBPUzIgKi8KLSNpZmRlZiBWTVMKLSAgICAg ICAgbWFrZXN0cigmKHR4dHBhdHRlcm5zW2ldKSx0eHRwW1NZU19WTVNdW2ldKTsKLSNlbHNlIC8q IFZNUyAqLwotI2lmZGVmIFNUUkFUVVMKLSAgICAgICAgbWFrZXN0cigmKHR4dHBhdHRlcm5zW2ld KSx0eHRwW1NZU19WT1NdW2ldKTsKLSNlbHNlIC8qIFNUUkFUVVMgKi8KLSNpZmRlZiBkYXRhZ2Vu ZXJhbAotICAgICAgICBtYWtlc3RyKCYodHh0cGF0dGVybnNbaV0pLHR4dHBbU1lTX0RHXVtpXSk7 Ci0jZWxzZSAvKiBkYXRhZ2VuZXJhbCAqLwotI2lmZGVmIE9TSwotICAgICAgICBtYWtlc3RyKCYo dHh0cGF0dGVybnNbaV0pLHR4dHBbU1lTX09TS11baV0pOwotI2Vsc2UgLyogT1NLICovCi0gICAg ICAgIG1ha2VzdHIoJih0eHRwYXR0ZXJuc1tpXSksdHh0cFtTWVNfVU5LXVtpXSk7Ci0jZW5kaWYg LyogT1NLICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBTVFJBVFVTICov Ci0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyogVU5JWCAqLwot ICAgICAgICBpZiAoIXR4dHBbaV0pCi0gICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGZvciAo aSA9IDA7IGkgPCBGVFBBVFRFUk5TOyBpKyspIHsKLSNpZmRlZiBVTklYCi0gICAgICAgIG1ha2Vz dHIoJihiaW5wYXR0ZXJuc1tpXSksYmlucFtTWVNfVU5JWF1baV0pOwotI2Vsc2UgLyogVU5JWCAq LwotI2lmZGVmIE9TMgotI2lmZGVmIE5UCi0gICAgICAgIG1ha2VzdHIoJihiaW5wYXR0ZXJuc1tp XSksYmlucFtTWVNfV0lOMzJdW2ldKTsKLSNlbHNlIC8qIE5UICovCi0gICAgICAgIG1ha2VzdHIo JihiaW5wYXR0ZXJuc1tpXSksYmlucFtTWVNfT1MyXVtpXSk7Ci0jZW5kaWYgLyogTlQgKi8KLSNl bHNlIC8qIE9TMiAqLwotI2lmZGVmIFZNUwotICAgICAgICBtYWtlc3RyKCYoYmlucGF0dGVybnNb aV0pLGJpbnBbU1lTX1ZNU11baV0pOwotI2Vsc2UgLyogVk1TICovCi0jaWZkZWYgU1RSQVRVUwot ICAgICAgICBtYWtlc3RyKCYoYmlucGF0dGVybnNbaV0pLGJpbnBbU1lTX1ZPU11baV0pOwotI2Vs c2UgLyogU1RSQVRVUyAqLwotI2lmZGVmIGRhdGFnZW5lcmFsCi0gICAgICAgIG1ha2VzdHIoJihi aW5wYXR0ZXJuc1tpXSksYmlucFtTWVNfREddW2ldKTsKLSNlbHNlIC8qIGRhdGFnZW5lcmFsICov Ci0jaWZkZWYgT1NLCi0gICAgICAgIG1ha2VzdHIoJihiaW5wYXR0ZXJuc1tpXSksYmlucFtTWVNf T1NLXVtpXSk7Ci0jZWxzZSAvKiBPU0sgKi8KLSAgICAgICAgbWFrZXN0cigmKGJpbnBhdHRlcm5z W2ldKSxiaW5wW1NZU19VTktdW2ldKTsKLSNlbmRpZiAvKiBPU0sgKi8KLSNlbmRpZiAvKiBkYXRh Z2VuZXJhbCAqLwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRp ZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBVTklYICovCi0gICAgICAgIGlmICghYmlucFtpXSkKLSAg ICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLS8qCi0gIG0gYSB0IGMgaCBuIGEgbSBlICAtLSAg Q29tcGFyZSBmaWxlbmFtZSB3aXRoIHRleHQgJiBiaW5hcnkgbmFtZSBwYXR0ZXJucy4KLQotICBS ZXR1cm5zOgotICAgIDAgaWYgbmFtZSBtYXRjaGVzIGEgdGV4dCBwYXR0ZXJuIGJ1dCBub3QgYSBi aW5hcnkgcGF0dGVybi4KLSAgICAxIGlmIG5hbWUgbWF0Y2hlcyBhIGJpbmFyeSBwYXR0ZXJuIGJ1 dCBub3QgYSB0ZXh0IHBhdHRlcm4uCi0gICAtMSBpZiBuYW1lIG1hdGNoZXMgbm8gcGF0dGVybnMu Ci0gICAtMiBpZiBuYW1lIG1hdGNoZXMgYSBiaW5hcnkgcGF0dGVybiBhbmQgYSB0ZXh0IHBhdHRl cm4uCi0qLwotaW50Ci1tYXRjaG5hbWUoZmlsZW5hbWUsIGxvY2FsLCBvcykgY2hhciAqIGZpbGVu YW1lOyBpbnQgbG9jYWw7IGludCBvczsgewotICAgIGludCByYyA9IC0xOwkJCS8qIFJldHVybiBj b2RlICovCi0gICAgY2hhciAqIG5hbWUsICogcDsKLSNpZmRlZiBPUzJPUlVOSVgKLSAgICBjaGFy IHRtcGJ1ZltDS01BWFBBVEgrMV07Ci0jZW5kaWYgLyogT1MyT1JVTklYICovCi0KLSAgICBuYW1l ID0gZmlsZW5hbWUgPyBmaWxlbmFtZSA6ICIiOwkvKiBDb3B5IG9mIG9yaWdpbmFsIGFyZyAqLwot ICAgIGlmIChwYXR0ZXJucyAmJiAqbmFtZSkgewkJLyogSWYgUEFUVEVSTlMgT04uLi4gKi8KLQlp bnQgaTsKLQotI2lmZGVmIE9TMk9SVU5JWAotCWlmIChja21hdGNoKCIqLn5bMS05XSp+IixuYW1l LDEsMSkpIHsgLyogTmFtZSBoYXMgYmFja3VwIHN1ZmZpeD8gKi8KLQkgICAgaW50IGs7Ci0JICAg IGsgPSBja3N0cm5jcHkodG1wYnVmLG5hbWUsQ0tNQVhQQVRIKzEpOyAvKiBZZXMsIGNvcHkgYW5k IHN0cmlwICovCi0JICAgIGZvciAoaSA9IGsgLSAzOyBpID4gNDsgaS0tKSB7Ci0JCWlmICh0bXBi dWZbaV0gPT0gJ34nICYmIHRtcGJ1ZltpLTFdID09ICcuJykgewotCQkgICAgdG1wYnVmW2ktMV0g PSBOVUw7Ci0JCSAgICBicmVhazsKLQkJfQotCSAgICB9Ci0JICAgIG5hbWUgPSB0bXBidWY7CQkv KiBBbmQgcG9pbnQgdG8gc3RyaXBwZWQgY29weSAqLwotCX0KLSNlbmRpZiAvKiBPUzJPUlVOSVgg Ki8KLQl6c3RyaXAobmFtZSwmcCk7CQkvKiBTdHJpcCBwYXRobmFtZSB0b28gKi8KLQluYW1lID0g cDsKLQotICAgICAgICBpZiAobG9jYWwpIHsKLSAgICAgICAgICAgIGlmICh0eHRwYXR0ZXJuc1sw XSkgewkvKiBTZWFyY2ggdGV4dCBwYXR0ZXJucyAqLwotICAgICAgICAgICAgICAgIGZvciAoaSA9 IDA7IGkgPCBGVFBBVFRFUk5TICYmIHR4dHBhdHRlcm5zW2ldOyBpKyspIHsKLSAgICAgICAgICAg ICAgICAgICAgaWYgKGNrbWF0Y2godHh0cGF0dGVybnNbaV0sbmFtZSxmaWxlY2FzZSwxKSkgewot ICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICB9Ci0gICAgICAgICAgICBpZiAoYmlucGF0dGVybnNbMF0pIHsJLyogQW5kIHNlYXJjaCBi aW5hcnkgcGF0dGVybnMgKi8KLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRlRQQVRU RVJOUyAmJiBiaW5wYXR0ZXJuc1tpXTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChj a21hdGNoKGJpbnBhdHRlcm5zW2ldLG5hbWUsZmlsZWNhc2UsMSkpIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgIHJjID0gKHJjID4gLTEpID8gLTIgOiAxOwotICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICB9Ci0JfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChvcyA+PSAwICYmIG9zIDwgU1lT X01BWCkgewotCQlpZiAodHh0cFtvc11bMF0pIHsKLQkJICAgIGZvciAoaSA9IDA7IGkgPCBGVFBB VFRFUk5TICYmIHR4dHBbb3NdW2ldOyBpKyspIHsKLQkJCWlmIChja21hdGNoKHR4dHBbb3NdW2ld LG5hbWUsZmlsZWNhc2UsMSkpIHsKLQkJCSAgICByYyA9IDA7Ci0JCQkgICAgYnJlYWs7Ci0JCQl9 Ci0JCSAgICB9Ci0JCX0KLQkJaWYgKGJpbnBbb3NdWzBdKSB7Ci0JCSAgICBmb3IgKGkgPSAwOyBp IDwgRlRQQVRURVJOUyAmJiBiaW5wW29zXVtpXTsgaSsrKSB7Ci0JCQlpZiAoY2ttYXRjaChiaW5w W29zXVtpXSxuYW1lLGZpbGVjYXNlLDEpKSB7Ci0JCQkgICAgcmMgPSAocmMgPiAtMSkgPyAtMiA6 IDE7Ci0JCQkgICAgYnJlYWs7Ci0JCQl9Ci0JCSAgICB9Ci0JCX0KLQkgICAgfQotICAgICAgICB9 Ci0gICAgfQotICAgIGRlYnVnKEYxMTEsIm1hdGNobmFtZSIsbmFtZSxyYyk7Ci0gICAgcmV0dXJu KHJjKTsKLX0KLSNlbmRpZiAvKiBQQVRURVJOUyAqLwotCi0jaWZkZWYgVU5JQ09ERQotI2lmbmRl ZiBOT0VWRU5NQVgKLSNkZWZpbmUgRVZFTk1BWAotI2VuZGlmIC8qIE5PRVZFTk1BWCAqLwotI2Vu ZGlmIC8qIFVOSUNPREUgKi8KLQotLyogIFMgQyBBIE4gRiBJIEwgRSAgLS0gIEFuYWx5emUgYSBm aWxlJ3MgY29udGVudHMgICovCi0KLS8qCi0gIENhbGwgd2l0aDoKLSAgICBuYW1lOiAgICBQb2lu dGVyIHRvIG5hbWUgb2YgZXhpc3RpbmcgZmlsZS4KLSAgICBmbGFnOiAgICBQb2ludGVyIHRvIGlu dCBpbiB3aGljaCB0byByZXR1cm4gYWRkaXRpb25hbCBudW1lcmljIGRhdGEuCi0KLSAgUmV0dXJu czoKLSAgICAtMSBvbiBmYWlsdXJlICh0byBvcGVuIGZpbGUgb3IgdG8gcmVhZCBmcm9tIGl0KS4K LSAgICBJbnRlZ2VyLCAwLi40LCBvbiBzdWNjZXNzIGluZGljYXRpbmcgZmlsZSB0eXBlOgotICAg ICAwID0gNy1iaXQgdGV4dCAoZmxhZyA9IC0xKQotICAgICAxID0gVVRGLTggdGV4dCAoZmxhZyA9 IC0xKQotICAgICAyID0gVUNTLTIgdGV4dCAoZmxhZyA9ICAwOiBiaWctZW5kaWFuOyBmbGFnID0g MTogbGl0dGxlLWVuZGlhbikKLSAgICAgMyA9IDgtYml0IHRleHQgKGZsYWcgPSAgMDogbm8gQzEg Ynl0ZXM7IGZsYWcgPSAxOiBpbmNsdWRlcyBDMSBieXRlcykKLSAgICAgNCA9IFRleHQgICAgICAg KHR5cGUgdW5rbm93bikKLSAgICAgNSA9IGJpbmFyeSAgICAgKGZsYWcgPSAtMSkKLQotICBJZiBV TklDT0RFIGlzIGRlZmluZWQ6Ci0KLSAgIDEuIElmIGZpbGUgYmVnaW5zIHdpdGggYSB2YWxpZCBC T00sIGl0IGlzIGJlbGlldmVkLiAgT3RoZXJ3aXNlIHdlCi0gICAgICByZWFkIHRoZSBmaXJzdCA0 SyBvZiB0aGUgZmlsZSAoc2luY2UgaXQgbWlnaHQgYmUgZW1haWwgd2l0aCB2ZXJib3NlCi0gICAg ICBoZWFkZXJzKSBhbmQgYW5hbHl6ZSBpdDoKLQotICAgMi4gSWYgZmlsZSBjb250YWlucyBvbmx5 IHZhbGlkIFVURi04IHNlcXVlbmNlcywgd2UgY2FsbCBpdCBVVEYtODsKLSAgICAgIG90aGVyd2lz ZToKLQotICAgMy4gSWYgdGhlIGZpbGUgY29udGFpbnMgbG90cyBvZiBhbHRlcm5hdGUgMCBieXRl cywgd2UgY2FsbCBpdCBVQ1MtMiwgYW5kCi0gICAgICBzZXQgdGhlIHBvbGFyaXR5IGFjY29yZGlu ZyB0byB3aGV0aGVyIHRoZSBwcmVwb25kZXJhbmNlIG9mIHRoZW0gYXJlIGluCi0gICAgICBldmVu IG9yIG9kZCBwb3NpdGlvbnM7IG90aGVyd2lzZToKLQotICAgNC4gSWYgRVZFTk1BWCBpcyBkZWZp bmVkIGFuZCB0aGUgZmlsZSBjb250YWlucyBsb3RzIG9mIGFsdGVybmF0ZSBieXRlcyB0aGF0Ci0g ICAgICBhcmUgaWRlbnRpY2FsLCBldmVuIGlmIHRoZXkgYXJlbid0IHplcm8sIGFuZCB0aGUgbnVt YmVyIG9mIHN1Y2ggYnl0ZXMKLSAgICAgIGlzIGF0IGxlYXN0IGZvdXIgdGltZXMgdGhlIGxlbmd0 aCBvZiB0aGUgbWF4aW11bSBydW4gb2YgYWx0ZXJuYXRpbmcKLSAgICAgIGlkZW50aWNhbCBieXRl cyBvZiB0aGUgb3Bwb3NpdGUgcG9sYXJpdHksIHdlIGNhbGwgaXQgVUNTLTI7IG90aGVyd2lzZToK LQotICAgNS4gSWYgdGhlIGZpbGUgY29udGFpbmVkIG5vIGJ5dGVzIHdpdGggdGhlaXIgOHRoIGJp dHMgb24gYW5kIG5vIGNvbnRyb2xzCi0gICAgICBvdGhlciB0aGFuIENSLCBMRiwgSFQsIGFuZCBG Riwgd2UgY2FsbCBpdCBBU0NJSTsgb3RoZXJ3aXNlOgotCi0gICA2LiBJZiBpdCBjb250YWlucyBD MCBjb250cm9sIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBDUiwgTEYsIEhULCBhbmQgRkYsIHdlCi0g ICAgICBjYWxsIGl0IGJpbmFyeTsgb3RoZXJ3aXNlOgotCi0gICA3LiBXZSBjYWxsIGl0IDgtYml0 IHRleHQsIGNoYXJhY3RlciBzZXQgdW5rbm93biAoY291bGQgYmUgTGF0aW4tMSBvcgotICAgICAg YW55dGhpbmcgZWxzZSkuCi0KLSAgIE5vdGUgdGhhdCBtYWxmb3JtZWQgVVRGLTggaXMgbm90IGRp YWdub3NlZCBhcyBVVEYtOC4KLQotICAgSWYgVU5JQ09ERSBpcyBub3QgZGVmaW5lZDoKLQotICAg MS4gSWYgdGhlIGZpbGUgY29udGFpbnMgQzAgY29udHJvbCBjaGFyYWN0ZXJzIG90aGVyIHRoYW4g Q1IsIExGLCBIVCwgYW5kCi0gICAgICBGRiwgd2UgY2FsbCBpdCBiaW5hcnk7IG90aGVyd2lzZToK LQotICAgMi4gSWYgdGhlIGZpbGUgY29udGFpbnMgYW55IDgtYml0IGJ5dGVzLCB3ZSBjYWxsIGl0 IDgtYml0IHRleHQ7IG90aGVyd2lzZToKLQotICAgMy4gV2UgY2FsbCBpdCA3LWJpdCB0ZXh0Lgot Ci0gICBJbiB0aGUgbm9uLVVuaWNvZGUgY2FzZSwgVUNTLTIgaXMgZGlhZ25vc2VkIGFzIGJpbmFy eSwgYnV0IFVURi04IGFzCi0gICA4LWJpdCB0ZXh0LgotCi0gICBUaGVyZSBpcyBubyBzaWduaWZp Y2FudCBzcGVlZCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIFVuaWNvZGUgYW5kCi0gICBub24tVW5p Y29kZSBjYXNlcy4KLSovCi1pbnQKLXNjYW5maWxlKG5hbWUsZmxhZyxuc2NhbmZpbGUpIGNoYXIg KiBuYW1lOyBpbnQgKiBmbGFnLCBuc2NhbmZpbGU7IHsKLSAgICBGSUxFICogZnA7CQkJCS8qIEZp bGUgcG9pbnRlciAqLwotICAgIHVuc2lnbmVkIGNoYXIgYnVmW1NDQU5GSUxFQlVGXTsJLyogRmls ZSBkYXRhIGJ1ZmZlciBmb3IgYW5hbHlzaXMgKi8KLSAgICBpbnQgeCwgdmFsID0gLTEsIGNvdW50 ID0gMDsJCS8qIFdvcmtlcnMgKi8KLSAgICBpbnQgcmMgPSAtMTsJCQkvKiBSZXR1cm4gY29kZSAq LwotICAgIGludCBwdiA9IC0xOwkJCS8qIFBhdHRlcm4tbWF0Y2ggdmFsdWUgKi8KLSAgICBpbnQg ZW9mID0gMDsJCQkvKiBGbGFnIGZvciBmaWxlIEVPRiBlbmNvdW50ZXJlZCAqLwotICAgIGludCBi eXRlcyA9IDA7CQkJLyogVG90YWwgYnl0ZSBjb3VudCAqLwotI2lmZGVmIFVOSUNPREUKLSAgICB1 bnNpZ25lZCBpbnQgYzAsIGMxOwkJLyogRmlyc3QgMiBmaWxlIGJ5dGVzIChmb3IgQk9NKSAqLwot I2VuZGlmIC8qIFVOSUNPREUgKi8KLSAgICBleHRlcm4gaW50IHBpcGVzZW5kLCBmaWxlcGVlazsK LQotICAgIHJlZ2lzdGVyIGludCBpOwkJCS8qIExvb3AgY29udHJvbCAqLwotICAgIGludCByZWFk c2l6ZSA9IDA7CQkJLyogSG93IG11Y2ggdG8gcmVhZCAqLwotICAgIGludCBlaWdodGJpdCA9IDA7 CQkJLyogTnVtYmVyIG9mIGJ5dGVzIHdpdGggOHRoIGJpdCBvbiAqLwotICAgIGludCBjMGNvbnRy b2xzID0gMDsJCQkvKiBDMCBub24tdGV4dCBjb250cm9sLWNoYXIgY291bnRlciAqLwotICAgIGlu dCBjMG5vbmlzbyA9IDA7CQkJLyogQzAgbm9uLUlTTyBjb250cm9sLWNoYXIgY291bnRlciAqLwot ICAgIGludCBjMWNvbnRyb2xzID0gMDsJCQkvKiBDMSBjb250cm9sLWNoYXJhY3RlciBjb3VudGVy ICovCi0gICAgdW5zaWduZWQgaW50IGM7CQkJLyogQ3VycmVudCBjaGFyYWN0ZXIgKi8KLSAgICBp bnQgcnVubWF4ID0gMDsJCQkvKiBMb25nZXN0IHJ1biBvZiAwIGJ5dGVzICovCi0gICAgaW50IHJ1 bnplcm8gPSAwOwkJCS8qIFJ1biBvZiAwIGJ5dGVzICovCi0gICAgaW50IHBjdHplcm8gPSAwOwkJ CS8qIFBlcmNlbnRhZ2Ugb2YgMCBieXRlcyAqLwotICAgIGludCB0eHRjeiA9IDA7Ci0jaWZkZWYg Q0tfQ1RSTFoKLSAgICBleHRlcm4gaW50IGVvZm1ldGhvZDsKLSNlbmRpZiAvKiBDS19DVFJMWiAq LwotCi0jaWZkZWYgVU5JQ09ERQotICAgIGludCBub3R1dGY4ID0gMDsJCQkvKiBOb256ZXJvIGlm IGRlZmluaXRlbHkgbm90IFVURi04ICovCi0gICAgaW50IHV0ZjhzdGF0ZSA9IDA7CQkJLyogVVRG LTggcmVjb2duaXplciBzdGF0ZSAqLwotICAgIGludCBvZGR6ZXJvID0gMDsJCQkvKiBOdW1iZXIg b2YgMCBieXRlcyBpbiBvZGQgcG9zdGlvbnMgKi8KLSAgICBpbnQgZXZlbnplcm8gPSAwOwkJCS8q IGFuZCBpbiBldmVuIHBvc2l0aW9ucyAqLwotICAgIGludCBsZm51bCA9IDA7CQkJLyogTnVtYmVy IG9mIDxMRj48TlVMPiBzZXF1ZW5jZXMgKi8KLSAgICBpbnQgY3JsZiA9IDA7CQkJLyogTnVtYmVy IG9mIDxDUkxGPiBzZXF1ZW5jZXMgKi8KLSNlbHNlCi0gICAgaW50IG5vdHV0ZjggPSAxOwotI2Vu ZGlmIC8qIFVOSUNPREUgKi8KLQotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBFVkVOTUFYCi0gICAg aW50IG9kZHJ1biA9IDAsIG9kZG1heCA9IDAsIG9kZGJ5dGUgPSAwLCBvZGRtYXhieXRlID0gMDsK LSAgICBpbnQgZXZlbnJ1biA9IDAsIGV2ZW5tYXggPSAwLCBldmVuYnl0ZSA9IDAsIGV2ZW5tYXhi eXRlID0gMDsKLSNlbmRpZiAvKiBFVkVOTUFYICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0j aWZuZGVmIE5PWEZFUgotICAgIGlmIChwaXBlc2VuZCB8fCBjYWxpYnJhdGUgfHwgc25kYXJyYXkp IC8qIE9ubHkgZm9yIHJlYWwgZmlsZXMgKi8KLSAgICAgIHJldHVybigtMSk7Ci0jZW5kaWYgLyog Tk9YRkVSICovCi0gICAgZGVidWcoRjExMSwic2NhbmZpbGUiLG5hbWUsbnNjYW5maWxlKTsKLSNp ZmRlZiBQQVRURVJOUwotICAgIGlmICghZmlsZXBlZWspIHsKLQlwdiA9IG1hdGNobmFtZShuYW1l LDEsLTEpOwotCWlmIChwdiA8IDApCi0JICByYyA9IC0xOwotCWVsc2UKLQkgIHJjID0gKHB2ID09 IDEpID8gRlRfQklOIDogRlRfVEVYVDsKLQlkZWJ1ZyhGMTExLCJzY2FuZmlsZSAhZmlsZXBlZWsg cmVzdWx0IixuYW1lLHJjKTsKLQlyZXR1cm4ocmMpOwotICAgIH0KLSNlbmRpZiAvKiBQQVRURVJO UyAqLwotCi0jaWZkZWYgVk1TCi0vKiBXZSBkb24ndCBzY2FuIGluIFZNUyB3aGVyZSB0ZXh0IGZp bGVzIGhhdmUgdmFyaW91cyByZWNvcmQgZm9ybWF0cyBpbiAgKi8KLS8qIHdoaWNoIHJlY29yZCBo ZWFkZXJzIGNvbnRhaW4gc2VlbWluZ2x5IG5vbi10ZXh0IGJ5dGVzLiAgU28gdGhlIGJlc3QgICAq LwotLyogd2UgY2FuIGRvIGluIFZNUyBpcyB0ZWxsIHdoZXRoZXIgdGhlIGZpbGUgaXMgdGV4dCBv ciBiaW5hcnksIHBlcmlvZC4gICovCi0gICAgewotCWludCBiLCB4OwotCWIgPSBiaW5hcnk7CQkJ LyogU2F2ZSBjdXJyZW50IGJpbmFyeSBzZXR0aW5nICovCi0JaWYgKHpvcGVuaShaSUZJTEUsbmFt ZSkgPiAwKSB7CS8qIEluIFZNUyB0aGlzIHNldHMgYmluYXJ5ICovCi0JICAgIHggPSBiaW5hcnk7 CQkJLyogR2V0IHJlc3VsdCAqLwotCSAgICB6Y2xvc2UoWklGSUxFKTsJCS8qIENsb3NlIHRoZSBm aWxlICovCi0JICAgIGJpbmFyeSA9IGI7CQkJLyogUmVzdG9yZSBwcmV2aW91cyBiaW5hcnkgc2V0 dGluZyAqLwotCSAgICByYyA9IHggPyBGVF9CSU4gOiBGVF9URVhUOwotCSAgICB2YWwgPSAwOwot CSAgICBnb3RvIHhzY2FuZmlsZTsKLQl9Ci0gICAgfQotI2VuZGlmIC8qIFZNUyAqLwotCi0gICAg ZW9mID0gMDsJCQkJLyogRW5kLW9mLWZpbGUgcmVhY2hlZCBpbmRpY2F0b3IgKi8KLSNpZmRlZiBP UzIKLSAgICBmcCA9IGZvcGVuKG5hbWUsICJyYiIpOwkJLyogT3BlbiB0aGUgZmlsZSBpbiBiaW5h cnkgbW9kZSAqLwotI2Vsc2UKLSAgICBmcCA9IGZvcGVuKG5hbWUsICJyIik7Ci0jZW5kaWYgLyog T1MyICovCi0KLSAgICBpZiAoIWZwKQkJCQkvKiBGYWlsZWQ/ICovCi0gICAgICByZXR1cm4oLTEp OwotCi0gICAgd2hpbGUgKDEpIHsJCQkJLyogT25lIG9yIG1vcmUgZ3VscHMgZnJvbSBmaWxlICov Ci0JaWYgKGVvZikgewkJCS8qIEVPRiBmcm9tIGxhc3QgdGltZT8gKi8KLQkgICAgZGVidWcoRjEx MSwic2NhbmZpbGUgYXQgRU9GIixuYW1lLGJ5dGVzKTsKLQkgICAgaWYgKHJ1bnplcm8gPiBydW5t YXgpCi0JICAgICAgcnVubWF4ID0gcnVuemVybzsKLQkgICAgYnJlYWs7Ci0JfQotCWlmIChuc2Nh bmZpbGUgPCAwKSB7CQkvKiBSZWFkaW5nIHdob2xlIGZpbGUgKi8KLQkgICAgcmVhZHNpemUgPSBT Q0FORklMRUJVRjsKLQl9IGVsc2UgewkJCS8qIFJlYWRpbmcgZmlyc3QgbnNjYW5maWxlZSBieXRl cyAqLwotCSAgICByZWFkc2l6ZSA9IG5zY2FuZmlsZSAtIGJ5dGVzOwotCSAgICBpZiAocmVhZHNp emUgPCAxKQotCSAgICAgIGJyZWFrOwotCSAgICBpZiAocmVhZHNpemUgPiBTQ0FORklMRUJVRikK LQkgICAgICByZWFkc2l6ZSA9IFNDQU5GSUxFQlVGOwotCX0KLQlkZWJ1ZyhGMTAxLCJzY2FuZmls ZSByZWFkc2l6ZSIsIiIscmVhZHNpemUpOwotCWNvdW50ID0gZnJlYWQoYnVmLDEscmVhZHNpemUs ZnApOyAvKiBSZWFkIGEgYnVmZmVyICovCi0JaWYgKGNvdW50ID09IEVPRiB8fCBjb3VudCA9PSAw KSB7Ci0JICAgIGRlYnVnKEYxMTEsInNjYW5maWxlIEVPRiIsbmFtZSxjb3VudCk7Ci0JICAgIGJy ZWFrOwotCX0KLQlkZWJ1ZyhGMTExLCJzY2FuZmlsZSBidWZmZXIgb2siLG5hbWUsY291bnQpOwot Ci0JaWYgKGJ5dGVzID09IDAgJiYgY291bnQgPiA4KSB7Ci0JICAgIC8qIFBERiBmaWxlcyBjYW4g bG9vayBsaWtlIHRleHQgaW4gdGhlIGJlZ2lubmluZy4gKi8KLQkgICAgaWYgKCFja3N0cmNtcCgo Y2hhciAqKWJ1ZiwiJVBERi0xLiIsNywxKSkgewotCQlpZiAoaXNkaWdpdChidWZbN10pKSB7Ci0J CSAgICBpZiAoYnVmWzhdID09ICdcMDE1JyB8fAotCQkJY291bnQgPiA5ICYmIGJ1Zls4XSA9PSBT UCAmJiBidWZbOV0gPT0gJ1wwMTUnKSB7Ci0jaWZkZWYgREVCVUcKLQkJCWJ1Zls4XSA9IE5VTDsK LQkJCWRlYnVnKEYxMTAsInNjYW5maWxlIFBERiIsYnVmLDApOwotI2VuZGlmIC8qIERFQlVHICov Ci0JCQliaW5hcnkgPSAxOwkvKiBCdXQgdGhleSBhcmUgYmluYXJ5LiAqLwotCQkJYnJlYWs7Ci0J CSAgICB9Ci0JCX0KLQkgICAgfSBlbHNlIGlmICghY2tzdHJjbXAoKGNoYXIgKilidWYsIiUhUFMt QWRvIiw4LDEpKSB7Ci0JCS8qIERpdHRvIGZvciBQb3N0U2NyaXB0ICovCi0jaWZkZWYgREVCVUcK LQkJaW50IGk7Ci0JCWZvciAoaSA9IDg7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCSAgICBpZiAoYnVm W2ldIDwgJyEnKSB7Ci0JCQlidWZbaV0gPSBOVUw7Ci0JCQlicmVhazsKLQkJICAgIH0KLQkJfQot CQlkZWJ1ZyhGMTEwLCJzY2FuZmlsZSBQb3N0U2NyaXB0IixidWYsMCk7Ci0jZW5kaWYgLyogREVC VUcgKi8KLQkJYmluYXJ5ID0gMTsKLQkJYnJlYWs7Ci0jaWZuZGVmIE5PUENMU0NBTgotCSAgICB9 IGVsc2UgaWYgKCFja3N0cmNtcCgoY2hhciAqKWJ1ZiwiKSBIUC1QQ0wiLDgsMSkpIHsKLQkJLyog SFAgUENMIHByaW50ZXIgbGFuZ3VhZ2UgKi8KLSNpZmRlZiBERUJVRwotCQlpbnQgaTsKLQkJZm9y IChpID0gODsgaSA8IGNvdW50OyBpKyspIHsKLQkJICAgIGlmIChidWZbaV0gPCAnIScpIHsKLQkJ CWJ1ZltpXSA9IE5VTDsKLQkJCWJyZWFrOwotCQkgICAgfQotCQl9Ci0JCWRlYnVnKEYxMTAsInNj YW5maWxlIFBDTCIsYnVmLDApOwotI2VuZGlmIC8qIERFQlVHICovCi0JCWJpbmFyeSA9IDE7Ci0J CWJyZWFrOwotCSAgICB9IAotI2VuZGlmIC8qIE5PUENMU0NBTiAqLwotI2lmbmRlZiBOT1BKTFND QU4KLQkgICAgICBlbHNlIGlmIChidWZbMF0gPT0gJ1wwMzMnICYmIChidWZbMV0gPT0gJ0UnIHx8 IGJ1ZlsxXSA9PSAnJScpKSB7Ci0JCS8qIERpdHRvIGZvciBQSkwgSm9iIHByaW50ZXIgaGVhZGVy ICovCi0jaWZkZWYgREVCVUcKLQkJaW50IGk7Ci0JCWZvciAoaSA9IDI7IGkgPCBjb3VudDsgaSsr KSB7Ci0JCSAgICBpZiAoYnVmW2ldIDwgJyEnKSB7Ci0JCQlidWZbaV0gPSBOVUw7Ci0JCQlicmVh azsKLQkJICAgIH0KLQkJfQotCQlkZWJ1ZyhGMTEwLCJzY2FuZmlsZSBQSkwgSm9iIHByaW50ZXIg aGVhZGVyIixidWYsMCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLQkJYmluYXJ5ID0gMTsKLQkJYnJl YWs7Ci0jZW5kaWYgLyogTk9QSkxTQ0FOICovCi0JICAgIH0KLQl9Ci0KLSNpZmRlZiBVTklDT0RF Ci0JaWYgKGJ5dGVzID09IDAgJiYgY291bnQgPiAxKSB7Ci0JICAgIGludCBpbmNsX2NudCA9IDA7 Ci0KLQkgICAgLyogRmlyc3QgbG9vayBmb3IgQk9NICovCi0KLQkgICAgYzAgPSAodW5zaWduZWQp KCh1bnNpZ25lZClidWZbMF0mMHhGRik7IC8qIEZpcnN0IGZpbGUgYnl0ZSAqLwotCSAgICBjMSA9 ICh1bnNpZ25lZCkoKHVuc2lnbmVkKWJ1ZlsxXSYweEZGKTsgLyogU2Vjb25kIGJ5dGUgKi8KLQot CSAgICBpZiAoYzAgPT0gMHhGRSAmJiBjMSA9PSAweEZGKSB7CS8qIFVDUy0yIEJFICovCi0JCXJj ID0gRlRfVUNTMjsKLQkJdmFsID0gMDsKLQkJZGVidWcoRjExMSwic2NhbmZpbGUgVUNTMiBCT00g QkUiLGNraXRvYSh2YWwpLHJjKTsKLQkJaW5jbF9jbnQrKzsKLQkgICAgfSBlbHNlIGlmIChjMCA9 PSAweEZGICYmIGMxID09IDB4RkUpIHsgLyogVUNTLTIgTEUgKi8KLQkJcmMgPSBGVF9VQ1MyOwot CQl2YWwgPSAxOwotCQlkZWJ1ZyhGMTExLCJzY2FuZmlsZSBVQ1MyIEJPTSBMRSIsY2tpdG9hKHZh bCkscmMpOwotCQlpbmNsX2NudCsrOwotCSAgICB9IGVsc2UgaWYgKGNvdW50ID4gMikgaWYgKGMw ID09IDB4RUYgJiYgYzEgPT0gMHhCQiAmJgotCQkgICAgICAgKHVuc2lnbmVkKSgodW5zaWduZWQp YnVmWzJdJjB4RkYpID09IDB4QkYpIHsKLQkJcmMgPSBGVF9VVEY4OwotCQlkZWJ1ZyhGMTExLCJz Y2FuZmlsZSBVVEY4IEJPTSIsY2tpdG9hKHZhbCkscmMpOwotCQlpbmNsX2NudCsrOwotCSAgICB9 Ci0JICAgIGlmIChpbmNsX2NudCkgewkJLyogSGF2ZSBCT00gKi8KLQkJYnl0ZXMgKz0gY291bnQ7 Ci0JCWdvdG8geHNjYW5maWxlOwotCSAgICB9Ci0JfQotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQot CWJ5dGVzICs9IGNvdW50OwkJCS8qIENvdW50IGJ5dGVzIHJlYWQgKi8KLQllb2YgPSBmZW9mKGZw KTsJCQkvKiBGbGFnIGZvciBhdCBFT0YgICovCi0KLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkr KykgewkvKiBGb3IgZWFjaCBieXRlLi4uICovCi0JICAgIGMgPSAodW5zaWduZWQpYnVmW2ldOwkv KiBGb3IgZWFzZSBvZiByZWZlcmVuY2UgKi8KLQkgICAgaWYgKCFjKSB7CQkJLyogWmVybyBieXRl PyAqLwotI2lmZGVmIEVWRU5NQVgKLQkJaWYgKGkmMSkJCS8qIEluIG9kZCBwb3NpdGlvbiAqLwot CQkgIG9kZHplcm8rKzsKLQkJZWxzZQotCQkgIGV2ZW56ZXJvKys7CQkvKiBJbiBldmVuIHBvc2l0 aW9uICovCi0jZW5kaWYgLyogRVZFTk1BWCAqLwotCQlydW56ZXJvKys7Ci0JICAgIH0gZWxzZSB7 CQkJLyogTm90IGEgemVybyBieXRlICovCi0JCWlmIChydW56ZXJvID4gcnVubWF4KQotCQkgIHJ1 bm1heCA9IHJ1bnplcm87Ci0JCWlmIChydW5tYXggPiAyKQkJLyogVGhhdCdzIGFsbCB3ZSBuZWVk IHRvIGJlIGNlcnRhaW4gKi8KLQkJICBicmVhazsJCS8qIGl0J3MgYSBiaW5hcnkgZmlsZS4gKi8K LQkJcnVuemVybyA9IDA7Ci0JICAgIH0KLQotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBFVkVOTUFY Ci0KLS8qIFRoaXMgaXMgdG8gY2F0Y2ggVUNTLTIgd2l0aCBhIG5vbi1BU0NJSSwgbm9uLUxhdGlu LTEgcmVwZXJ0b2lyZSAgKi8KLQotCSAgICBpZiAoaSA+IDEpIHsJICAgICAgLyogTG9vayBmb3Ig cnVucyBvZiBhbHRlcm5hdGluZyBjaGFycyAqLwotCQlpZiAoaSYxKSB7Ci0JCSAgICBpZiAoYyA9 PSBidWZbaS0yXSkgeyAvKiBJbiBvZGQgcG9zaXRpb25zICovCi0JCQlvZGRydW4rKzsKLQkJCW9k ZGJ5dGUgPSBjOwotCQkgICAgfSBlbHNlIHsKLQkJCW9kZG1heCA9IG9kZHJ1bjsKLQkJCW9kZG1h eGJ5dGUgPSBvZGRieXRlOwotCQkgICAgfQotCQl9IGVsc2UgewkJLyogYW5kIGV2ZW4gcG9zaXRp b25zICovCi0JCSAgICBpZiAoYyA9PSBidWZbaS0yXSkgewotCQkJZXZlbnJ1bisrOwotCQkJZXZl bmJ5dGUgPSBjOwotCQkgICAgfSBlbHNlIHsKLQkJCWV2ZW5tYXggPSBldmVucnVuOwotCQkJZXZl bm1heGJ5dGUgPSBldmVuYnl0ZTsKLQkJICAgIH0KLQkJfQotCSAgICB9Ci0jZW5kaWYgLyogRVZF Tk1BWCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotCSAgICBpZiAoKGMgJiAweDgwKSA9PSAw KSB7CS8qIFdlIGhhdmUgYSA3LWJpdCBieXRlICovCi0jaWZkZWYgVU5JQ09ERQotCQlpZiAoaSA+ IDAgJiYgYyA9PSAxMCkgeyAvKiBMaW5lZmVlZCAqLwotCQkgICAgaWYgKGJ1ZltpLTFdID09IDAp IGxmbnVsKys7IC8qIFByZWNlZGVkIGJ5IE5VTCAqLwotCQkgICAgZWxzZSBpZiAoYnVmW2ktMV0g PT0gMTMpIGNybGYrKzsgLyogb3IgYnkgQ1IuLi4gKi8KLQkJfQotI2VuZGlmIC8qIFVOSUNPREUg Ki8KLQkJaWYgKGMgPCAnICcpIHsJCS8qIENoZWNrIGZvciBDTyBjb250cm9scyAqLwotCQkgICAg aWYgKGMgIT0gTEYgJiYgYyAhPSBDUiAmJiBjICE9IEhUICYmIGMgIT0gRkYpIHsKLQkJCWMwY29u dHJvbHMrKzsKLQkJCWlmIChjICE9IEVTQyAmJiBjICE9IFNPICYmIGMgIT0gU0kpCi0JCQkgIGMw bm9uaXNvKys7Ci0JCSAgICB9Ci0JCSAgICBpZiAoKGMgPT0gJ1wwMzInKQkvKiBDdHJsLVogKi8K LSNpZmRlZiBDT01NRU5UCi0JCQkmJiBlb2YgJiYgKGkgPj0gY291bnQgLSAyKQotI2VuZGlmIC8q IENPTU1FTlQgKi8KLQkJCSkgewotCQkJYzBjb250cm9scy0tOwotCQkJYzBub25pc28tLTsKLSNp ZmRlZiBDS19DVFJMWgotCQkJaWYgKGVvZm1ldGhvZCA9PSBYWUVPRl9aICYmIHR4dGN6ID09IDAp IHsKLQkJCSAgICBpZiAoYzBjb250cm9scyA9PSAwKSAvKiBBbGwgdGV4dCBwcmlvciB0byBDdHJs LVogKi8KLQkJCSAgICAgIHR4dGN6ID0gMTsKLQkJCX0KLSNlbmRpZiAvKiBDS19DVFJMWiAqLwot CQkgICAgfQotCQl9Ci0jaWZkZWYgVU5JQ09ERQotCQlpZiAoIW5vdHV0ZjggJiYgdXRmOHN0YXRl KSB7IC8qIEluIFVURi04IHNlcXVlbmNlPyAqLwotCQkgICAgdXRmOHN0YXRlID0gMDsKLQkJICAg IGRlYnVnKEYwMDAsInNjYW5maWxlIiwiNy1iaXQgYnl0ZSBpbiBVVEY4IHNlcXVlbmNlIixjKTsK LQkJICAgIG5vdHV0ZjgrKzsJCS8qIFRoZW4gaXQncyBub3QgVVRGLTggKi8KLQkJICAgIGNvbnRp bnVlOwotCQl9Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotCSAgICB9IGVsc2UgewkJCS8qIFdlIGhh dmUgYW4gOC1iaXQgYnl0ZSAqLwotCQllaWdodGJpdCsrOwkJLyogQ291bnQgaXQgKi8KLQkJaWYg KGMgPj0gMHg4MCAmJiBjIDwgMHhBMCkgLyogQ2hlY2sgZm9yIEMxIGNvbnRyb2xzICovCi0JCSAg YzFjb250cm9scysrOwotI2lmZGVmIFVOSUNPREUKLQkJaWYgKCFub3R1dGY4KSB7CQkvKiBJZiBp dCBtaWdodCBzdGlsbCBiZSBVVEY4Li4uICovCi0JCSAgICBzd2l0Y2ggKHV0ZjhzdGF0ZSkgeyAv KiBFbnRlciB0aGUgVVRGLTggc3RhdGUgbWFjaGluZSAqLwotCQkgICAgICBjYXNlIDA6CQkgLyog Rmlyc3QgYnl0ZS4uLiAqLwotCQkJaWYgKChjICYgMHhFMCkgPT0gMHhDMCkgeyAvKiBUZWxscyBu dW1iZXIgb2YgKi8KLQkJCSAgICB1dGY4c3RhdGUgPSAxOyAgICAgICAgLyogc3Vic2VxdWVudCBi eXRlcyAqLwotCQkJfSBlbHNlIGlmICgoYyAmIDB4RjApID09IDB4RTApIHsKLQkJCSAgICB1dGY4 c3RhdGUgPSAyOwotCQkJfSBlbHNlIGlmICgoYyAmIDB4RjgpID09IDB4RjApIHsKLQkJCSAgICB1 dGY4c3RhdGUgPSAzOwotCQkJfSBlbHNlIHsKLQkJCSAgICBub3R1dGY4Kys7Ci0JCQl9Ci0JCQli cmVhazsKLQkJICAgICAgY2FzZSAxOgkJLyogU3Vic2VxdWVudCBieXRlICovCi0JCSAgICAgIGNh c2UgMjoKLQkJICAgICAgY2FzZSAzOgotCQkJaWYgKChjICYgMHhDMCkgIT0gMHg4MCkgeyAvKiBN dXN0IHN0YXJ0IHdpdGggMTAgKi8KLQkJCSAgICBkZWJ1ZyhGMDAwLCJzY2FuZmlsZSIsCi0JCQkJ ICAiYmFkIGJ5dGUgaW4gVVRGOCBzZXF1ZW5jZSIsYyk7Ci0JCQkgICAgbm90dXRmOCsrOwotCQkJ ICAgIGJyZWFrOwotCQkJfQotCQkJdXRmOHN0YXRlLS07CS8qIEdvb2QsIG9uZSBsZXNzIGluIHRo aXMgc2VxdWVuY2UgKi8KLQkJCWJyZWFrOwotCQkgICAgICBkZWZhdWx0OgkJLyogU2hvdWxkbid0 IGhhcHBlbiAqLwotCQkJZGVidWcoRjExMSwic2NhbmZpbGUiLCJiYWQgVVRGOCBzdGF0ZSIsdXRm OHN0YXRlKTsKLQkJCW5vdHV0ZjgrKzsKLQkJICAgIH0KLQkJfQotI2VuZGlmIC8qIFVOSUNPREUg Ki8KLQkgICAgfQotCX0KLSAgICB9Ci0gICAgZmNsb3NlKGZwKTsJCQkJLyogQ2xvc2UgdGhlIGZp bGUgKi8KLSAgICBkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBieXRlcyIsIiIsYnl0ZXMpOwotCi0gICAg aWYgKGJ5dGVzID09IDApCQkJLyogSWYgbm90aGluZyB3YXMgcmVhZCAqLwotICAgICAgcmV0dXJu KC0xKTsJCQkvKiB3ZSdyZSBkb25lLiAqLwotCi0jaWZkZWYgRVZFTk1BWAotICAgIC8qIEluIGNh c2Ugd2UgaGFkIGEgcnVuIHRoYXQgbmV2ZXIgYnJva2UuLi4gKi8KLSNpZmRlZiBDT01NRU5UCi0g ICAgaWYgKG9kZG1heCA9PSAwKSB7Ci0Jb2RkbWF4ID0gb2RkcnVuOwotCW9kZG1heGJ5dGUgPSBv ZGRieXRlOwotICAgIH0KLSAgICBpZiAoZXZlbm1heCA9PSAwKSB7Ci0JZXZlbm1heCA9IGV2ZW5y dW47Ci0JZXZlbm1heGJ5dGUgPSBldmVuYnl0ZTsKLSAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAq LwotICAgIGlmIChydW5tYXggPT0gMCkgewotCXJ1bm1heCA9IHJ1bnplcm87Ci0gICAgfQotI2Vu ZGlmIC8qIEVWRU5NQVggKi8KLQotI2lmZGVmIFVOSUNPREUKLSAgICBpZiAoYnl0ZXMgPiAxMDAp CQkJLyogQnl0ZXMgaXMgbm90IDAgKi8KLSAgICAgIHBjdHplcm8gPSAoZXZlbnplcm8gKyBvZGR6 ZXJvKSAvIChieXRlcyAvIDEwMCk7Ci0gICAgZWxzZQotICAgICAgcGN0emVybyA9ICgoZXZlbnpl cm8gKyBvZGR6ZXJvKSAqIDEwMCkgLyBieXRlczsKLSNlbmRpZiAvKiBVTklDT0RFICovCi0KLSNp ZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsJCQkvKiBJZiBkZWJ1Z2dpbmcsIGR1bXAgc3Rh dGlzdGljcyAqLwotCWRlYnVnKEYxMDEsInNjYW5maWxlIGMwY29udHJvbHMgIiwiIixjMGNvbnRy b2xzKTsKLQlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBjMG5vbmlzbyAgICIsIiIsYzBub25pc28pOwot CWRlYnVnKEYxMDEsInNjYW5maWxlIGMxY29udHJvbHMgIiwiIixjMWNvbnRyb2xzKTsKLQlkZWJ1 ZyhGMTAxLCJzY2FuZmlsZSBlaWdodGJpdCAgICIsIiIsZWlnaHRiaXQpOwotI2lmZGVmIFVOSUNP REUKLQlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBjcmxmICAgICAgICIsIiIsY3JsZik7Ci0JZGVidWco RjEwMSwic2NhbmZpbGUgbGZudWwgICAgICAiLCIiLGxmbnVsKTsKLQlkZWJ1ZyhGMTAxLCJzY2Fu ZmlsZSBub3R1dGY4ICAgICIsIiIsbm90dXRmOCk7Ci0JZGVidWcoRjEwMSwic2NhbmZpbGUgZXZl bnplcm8gICAiLCIiLGV2ZW56ZXJvKTsKLQlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBvZGR6ZXJvICAg ICIsIiIsb2RkemVybyk7Ci0JZGVidWcoRjEwMSwic2NhbmZpbGUgZXZlbi9vZGQgICAiLCIiLChl dmVuemVybyAvIChvZGR6ZXJvICsgMSkpKTsKLQlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBvZGQvZXZl biAgICIsIiIsKG9kZHplcm8gLyAoZXZlbnplcm8gKyAxKSkpOwotCWRlYnVnKEYxMDEsInNjYW5m aWxlIHBjdHplcm8gICAgIiwiIixwY3R6ZXJvKTsKLSNlbmRpZiAvKiBVTklDT0RFICovCi0jaWZk ZWYgQ09NTUVOVAotI2lmZGVmIEVWRU5NQVgKLQlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBvZGRtYXgg ICAgICIsIiIsb2RkbWF4KTsKLQlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBvZGRtYXhieXRlICIsIiIs b2RkbWF4Ynl0ZSk7Ci0JZGVidWcoRjEwMSwic2NhbmZpbGUgZXZlbm1heCAgICAiLCIiLGV2ZW5t YXgpOwotCWRlYnVnKEYxMDEsInNjYW5maWxlIGV2ZW5tYXhieXRlIiwiIixldmVubWF4Ynl0ZSk7 Ci0jZW5kaWYgLyogRVZFTk1BWCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQlkZWJ1ZyhGMTAx LCJzY2FuZmlsZSBydW5tYXggICAgICIsIiIscnVubWF4KTsKLSAgICB9Ci0jZW5kaWYgLyogREVC VUcgKi8KLQotI2lmZGVmIFVOSUNPREUKLSAgICB4ID0gZWlnaHRiaXQgPyBieXRlcyAvIDIwIDog Ynl0ZXMgLyA0OyAvKiBGb3IgVUNTLTIuLi4gKi8KLQotICAgIGlmIChydW5tYXggPiAyKSB7CQkJ LyogRmlsZSBoYXMgcnVuIG9mIG1vcmUgdGhhbiAyIE5VTHMgKi8KLQlkZWJ1ZyhGMTAwLCJzY2Fu ZmlsZSBCSU4gcnVubWF4IiwiIiwwKTsKLQlyYyA9IEZUX0JJTjsJCQkvKiBzbyBpdCBjYW4ndCBi ZSBhbnkga2luZCBvZiB0ZXh0LiAqLwotCWdvdG8geHNjYW5maWxlOwotCi0gICAgfSBlbHNlIGlm IChyYyA9PSBGVF9VQ1MyIHx8IChyYyA9PSBGVF9VVEY4ICYmIHJ1bm1heCA9PSAwKSkgewotCWdv dG8geHNjYW5maWxlOwkJCS8qIEZpbGUgc3RhcnRzIHdpdGggYSBCT00gKi8KLQotICAgIH0gZWxz ZSBpZiAoZWlnaHRiaXQgPiAwICYmICFub3R1dGY4KSB7IC8qIEZpbGUgaGFzIDgtYml0IGRhdGEg Ki8KLQlpZiAocnVubWF4ID4gMCkgewkJICAgLyogYW5kIHJ1bnMgb2YgTlVMcyAqLwotCSAgICBk ZWJ1ZyhGMTAwLCJzY2FuZmlsZSBCSU4gKG5uVVRGOCkgcnVubWF4IiwiIiwwKTsKLQkgICAgcmMg PSBGVF9CSU47CQkgICAvKiBVVEYtOCBkb2Vzbid0IGhhdmUgTlVMcyAqLwotCX0gZWxzZSB7CQkJ ICAgLyogTm8gTlVMcyAqLwotCSAgICBkZWJ1ZyhGMTAwLCJzY2FuZmlsZSBVVEY4IChublVURjgg KyBydW5tYXggPT0gMCkiLCIiLDApOwotCSAgICByYyA9IEZUX1VURjg7CQkgICAvKiBhbmQgbm90 IG5vdCBVVEYtOCwgc28gaXMgVVRGLTggKi8KLQl9Ci0JZ290byB4c2NhbmZpbGU7Ci0gICAgfQot LyoKLSAgRm9yIFVDUy0yIGRldGVjdGlvbiwgc2VlIGlmIHRoZSB0ZXh0IGNvbnRhaW5zIGxpbmVz IGRlbGltaXRlZCBieQotICBBU0NJSSBjb250cm9scyBhbmQgY29udGFpbmluZyBzcGFjZXMsIEFT Q0lJIGRpZ2l0cywgb3Igb3RoZXIgQVNDSUkKLSAgY2hhcmFjdGVycywgdGh1cyBmb3JjaW5nIHRo ZSBwcmVzZW5jZSBvZiBhIGNlcnRhaW4gcGVyY2VudGFnZSBvZiB6ZXJvIGJ5dGVzLgotICBGb3Ig dGhpcyBwdXJwb3NlIHJlcXVpcmUgMjAlIHplcm8gYnl0ZXMsIHdpdGggYXQgbGVhc3Qgc2l4IHRp bWVzIGFzIG1hbnkKLSAgaW4gZXZlbiAob2RkKSBwb3NpdGlvbnMgYXMgaW4gb2RkIChldmVuKSBw b3NpdGlvbnMuCi0qLwotICAgIGlmICgoZXZlbnplcm8gPj0geCAmJiBvZGR6ZXJvID09IDApIHx8 Ci0JKCgoKGV2ZW56ZXJvIC8gKG9kZHplcm8gKyAxKSkgPiA2KSAmJiAocGN0emVybyA+IDIwKSkg JiYKLQkoY3JsZiA9PSAwKSAmJgotCShsZm51bCA+IDEpKQotCSkgewotCSAgICBkZWJ1ZyhGMTAw LCJzY2FuZmlsZSBVQ1MyIG5vQk9NIEJFIChldmVuL29kZHplcm8pIiwiIiwwKTsKLQlyYyA9IEZU X1VDUzI7Ci0JdmFsID0gMDsKLSAgICB9IGVsc2UgaWYgKChldmVuemVybyA9PSAwICYmIG9kZHpl cm8gPj0geCkgfHwKLQkgICAgICAgKCgoKG9kZHplcm8gLyAoZXZlbnplcm8gKyAxKSkgPiA2KSAm JiAocGN0emVybyA+IDIwKSkgJiYKLQkgICAgICAgKGNybGYgPT0gMCkgJiYKLQkgICAgICAgKGxm bnVsID4gMSkpCi0JICAgICAgICkgewotCWRlYnVnKEYxMDAsInNjYW5maWxlIFVDUzIgbm9CT00g TEUgKGV2ZW4vb2RkemVybykiLCIiLDApOwotCXJjID0gRlRfVUNTMjsKLQl2YWwgPSAxOwotCi0j aWZkZWYgQ09NTUVOVAotI2lmZGVmIEVWRU5NQVgKLS8qCi0gIElmIHRoZSB0ZXN0cyBhYm92ZSBm YWlsLCB3ZSBzdGlsbCBtaWdodCBoYXZlIFVDUy0yIGlmIHRoZXJlIGFyZSBzaWduaWZpY2FudAot ICBydW5zIG9mIGlkZW50aWNhbCBieXRlcyBpbiBhbHRlcm5hdGluZyBwb3NpdGlvbnMsIGJ1dCBv bmx5IGlmIGl0IGFsc28gaGFzCi0gIHVudXN1YWwgQzAgY29udHJvbHMgKG90aGVyd2lzZSB3ZSdk IHBpY2sgdXAgaGV4IGZpbGVzIGhlcmUpLiAgTk9URTogV2UKLSAgZG9uJ3QgYWN0dWFsbHkgZG8g dGhpcyAtLSBFVkVOTUFYIGlzIG5vdCBkZWZpbmVkIChzZWUgY29tbWVudHMgYWJvdmUgYXQKLSAg Zmlyc3Qgb2NjdXJyZW5jZSBvZiBFVkVOTUFYKS4KLSovCi0gICAgfSBlbHNlIGlmIChjMG5vbmlz byAmJiBldmVubWF4ID4gYnl0ZXMgLyA0KSB7Ci0JZGVidWcoRjEwMCwic2NhbmZpbGUgVUNTMiBC RSAoZXZlbm1heCkiLCIiLDApOwotCXJjID0gRlRfVUNTMjsKLQl2YWwgPSAwOwotICAgIH0gZWxz ZSBpZiAoYzBub25pc28gJiYgb2RkbWF4ID4gYnl0ZXMgLyA0KSB7Ci0JZGVidWcoRjEwMCwic2Nh bmZpbGUgVUNTMiBMRSAoZXZlbm1heCkiLCIiLDApOwotCXJjID0gRlRfVUNTMjsKLQl2YWwgPSAx OwotI2VuZGlmIC8qIEVWRU5NQVggKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICB9Ci0v KgotICBJdCBzZWVtcyB0byBiZSBVQ1MtMiBidXQgbGV0J3MgYmUgbW9yZSBjZXJ0YWluIHNpbmNl IHRoZXJlIGlzIG5vIEJPTS4uLgotICBJZiB0aGUgbnVtYmVyIG9mIDctIGFuZCA4LWJpdCBjaGFy YWN0ZXJzIGlzIGFwcHJveGltYXRlbHkgZXF1YWwsIGl0IG1pZ2h0Ci0gIGJlIGEgY29tcHJlc3Nl ZCBmaWxlLiAgSW4gdGhpcyBjYXNlIHdlIGRlY2lkZSBiYXNlZCBvbiB0aGUgbmFtZS4KLSovCi0g ICAgaWYgKHJjID09IEZUX1VDUzIpIHsKLQlpZiAoZWlnaHRiaXQgPiAwKSB7Ci0JICAgIGludCBq LCBrOwotCSAgICBqID0gKGMxY29udHJvbHMgKiAxMDApIC8gKGMwY29udHJvbHMgKyAxKTsKLQkg ICAgZGVidWcoRjEwMSwic2NhbmZpbGUgYzEvYzAgICAgICAiLCIiLGopOwotCSAgICBrID0gKGJ5 dGVzICogMTAwKSAvIGVpZ2h0Yml0OwotCSAgICBkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBwY3QgOGJp dCAgICIsIiIsayk7Ci0JICAgIGlmIChrID4gNDAgJiYgayA8IDYwICYmIGogPiA2MCkgewotCQlp ZiAoY2ttYXRjaCgieyouWiwqLmd6LCouemlwLCouWklQfSIsbmFtZSwxLDEpKSB7Ci0JCSAgICBk ZWJ1ZyhGMTEwLCJzY2FuZmlsZSA4LWJpdCBCSU4gY29tcHJlc3NlZCIsbmFtZSwwKTsKLQkJICAg IHJjID0gRlRfQklOOwotCQkgICAgZ290byB4c2NhbmZpbGU7Ci0JCX0KLQkgICAgfQotCX0KLQkv KiBTbWFsbCBmaWxlIC0gbm90IGVub3VnaCBldmlkZW5jZSB1bmxlc3MgLi4uICovCi0KLQlpZiAo Ynl0ZXMgPCAxMDApIHsKLQkgICAgaWYgKG9kZHplcm8gIT0gMCAmJiBldmVuemVybyAhPSAwKSB7 Ci0JCWRlYnVnKEYxMDAsInNjYW5maWxlIHNtYWxsIFVDUzIgZG91YnRmdWwiLCIiLDApOwotCQly YyA9IEZUX0JJTjsKLQkJZ290byB4c2NhbmZpbGU7Ci0JICAgIH0gZWxzZSBpZiAob2RkemVybyA9 PSAwICYmIGV2ZW56ZXJvID09IDApIHsKLQkJcmMgPSBlaWdodGJpdCA/IEZUXzhCSVQgOiBGVF83 QklUOwotCSAgICB9Ci0JfQotCWdvdG8geHNjYW5maWxlOwkJCS8qIFNlZW1zIHRvIGJlIFVDUy0y ICovCi0gICAgfQotCi0vKiBJZiBub25lIG9mIHRoZSBhYm92ZSwgaXQncyBwcm9iYWJseSBub3Qg VW5pY29kZS4gICovCi0KLSAgICBpZiAoIWVpZ2h0Yml0KSB7CQkJLyogSXQncyA3LWJpdCAqLwot CWlmIChjMGNvbnRyb2xzKSB7CQkvKiBUaGlzIHdvdWxkIGJlIHN0cmFuZ2UgKi8KLQkgICAgaWYg KChjMG5vbmlzbyA+IDApICYmICh0eHRjeiA9PSAwKSkgewotCQlkZWJ1ZyhGMTAwLCJzY2FuZmls ZSA3LWJpdCBCSU4gKGMwY29uaXNvKSIsIiIsMCk7Ci0JCXJjID0gRlRfQklOOwotCSAgICB9IGVs c2UgewotCQlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSA3LWJpdCBJU08yMDIyIFRFWFQgKG5vIGMwbm9u aXNvKSIsIiIsMCk7Ci0JCXJjID0gRlRfN0JJVDsKLQkgICAgfQotCX0gZWxzZSB7CQkJLyogNy1i aXQgdGV4dCAqLwotCSAgICBkZWJ1ZyhGMTAwLCJzY2FuZmlsZSA3LWJpdCBURVhUIChubyBjMGNv bnRyb2xzKSIsIiIsMCk7Ci0JICAgIHJjID0gRlRfN0JJVDsKLQl9Ci0gICAgfSBlbHNlIGlmICgh YzBub25pc28gfHwgdHh0Y3opIHsJLyogOC1iaXQgdGV4dCAqLwotCWRlYnVnKEYxMDAsInNjYW5m aWxlIDgtYml0IFRFWFQgKG5vIGMwbm9uaXNvKSIsIiIsMCk7Ci0JcmMgPSBGVF84QklUOwotCXZh bCA9IGMxY29udHJvbHMgPyAxIDogMDsKLSAgICB9IGVsc2UgewkJCQkvKiA4LWJpdCBiaW5hcnkg Ki8KLQlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSA4LWJpdCBCSU4gKGMwbm9uaXNvKSIsIiIsMCk7Ci0J cmMgPSBGVF9CSU47Ci0gICAgfQotCi0jZWxzZSAgLyogIVVOSUNPREUgKi8KLQotICAgIGlmIChj MG5vbmlzbykgewotCWRlYnVnKEYxMDAsInNjYW5maWxlIDgtYml0IEJJTiAoYzBub25pc28pIiwi IiwwKTsKLQlyYyA9IEZUX0JJTjsKLSAgICB9IGVsc2UgaWYgKGVpZ2h0Yml0KSB7Ci0JZGVidWco RjEwMCwic2NhbmZpbGUgOC1iaXQgVEVYVCAobm8gYzBub25pc28pIiwiIiwwKTsKLQlyYyA9IEZU XzhCSVQ7Ci0JdmFsID0gYzFjb250cm9scyA/IDEgOiAwOwotICAgIH0gZWxzZSB7Ci0JZGVidWco RjEwMCwic2NhbmZpbGUgNy1iaXQgVEVYVCAobm8gYzBub25pc28pIiwiIiwwKTsKLQlyYyA9IEZU XzdCSVQ7Ci0gICAgfQotCi0jZW5kaWYgLyogVU5JQ09ERSAqLwotCi0gIHhzY2FuZmlsZToKLSAg ICBpZiAoZmxhZykgKmZsYWcgPSB2YWw7Ci0gICAgZGVidWcoRjEwMSwic2NhbmZpbGUgcmVzdWx0 ICAgICAiLCIiLHJjKTsKLSAgICByZXR1cm4ocmMpOwotfQotCi0vKgotICBzY2Fuc3RyaW5nIC0g bGlrZSBzY2FuIGZpbGUgYnV0IGZvciBhIHN0cmluZy4KLSAgVGhpcyBpcyBqdXN0IGEgcXVpY2sg YnV0Y2hlcnkgb2Ygc2NhbmZpbGUgd2l0aG91dCB0aGlua2luZyB0b28gbXVjaC4KLSovCi1pbnQK LXNjYW5zdHJpbmcocykgY2hhciAqIHM7IHsKLSAgICBpbnQgeCwgdmFsID0gLTEsIGNvdW50ID0g MDsJCS8qIFdvcmtlcnMgKi8KLSAgICBpbnQgcmMgPSAtMTsJCQkvKiBSZXR1cm4gY29kZSAqLwot ICAgIGludCBwdiA9IC0xOwkJCS8qIFBhdHRlcm4tbWF0Y2ggdmFsdWUgKi8KLSAgICBpbnQgYnl0 ZXMgPSAwOwkJCS8qIFRvdGFsIGJ5dGUgY291bnQgKi8KLSNpZmRlZiBVTklDT0RFCi0gICAgdW5z aWduZWQgaW50IGMwLCBjMTsJCS8qIEZpcnN0IDIgZmlsZSBieXRlcyAoZm9yIEJPTSkgKi8KLSNl bmRpZiAvKiBVTklDT0RFICovCi0gICAgZXh0ZXJuIGludCBwaXBlc2VuZCwgZmlsZXBlZWs7Ci0K LSAgICByZWdpc3RlciBpbnQgaTsJCQkvKiBMb29wIGNvbnRyb2wgKi8KLSAgICBpbnQgcmVhZHNp emUgPSAwOwkJCS8qIEhvdyBtdWNoIHRvIHJlYWQgKi8KLSAgICBpbnQgZWlnaHRiaXQgPSAwOwkJ CS8qIE51bWJlciBvZiBieXRlcyB3aXRoIDh0aCBiaXQgb24gKi8KLSAgICBpbnQgYzBjb250cm9s cyA9IDA7CQkJLyogQzAgbm9uLXRleHQgY29udHJvbC1jaGFyIGNvdW50ZXIgKi8KLSAgICBpbnQg YzBub25pc28gPSAwOwkJCS8qIEMwIG5vbi1JU08gY29udHJvbC1jaGFyIGNvdW50ZXIgKi8KLSAg ICBpbnQgYzFjb250cm9scyA9IDA7CQkJLyogQzEgY29udHJvbC1jaGFyYWN0ZXIgY291bnRlciAq LwotICAgIHVuc2lnbmVkIGludCBjOwkJCS8qIEN1cnJlbnQgY2hhcmFjdGVyICovCi0gICAgaW50 IHJ1bm1heCA9IDA7CQkJLyogTG9uZ2VzdCBydW4gb2YgMCBieXRlcyAqLwotICAgIGludCBydW56 ZXJvID0gMDsJCQkvKiBSdW4gb2YgMCBieXRlcyAqLwotICAgIGludCBwY3R6ZXJvID0gMDsJCQkv KiBQZXJjZW50YWdlIG9mIDAgYnl0ZXMgKi8KLSAgICBpbnQgdHh0Y3ogPSAwOwotCi0jaWZkZWYg VU5JQ09ERQotICAgIGludCBub3R1dGY4ID0gMDsJCQkvKiBOb256ZXJvIGlmIGRlZmluaXRlbHkg bm90IFVURi04ICovCi0gICAgaW50IHV0ZjhzdGF0ZSA9IDA7CQkJLyogVVRGLTggcmVjb2duaXpl ciBzdGF0ZSAqLwotICAgIGludCBvZGR6ZXJvID0gMDsJCQkvKiBOdW1iZXIgb2YgMCBieXRlcyBp biBvZGQgcG9zdGlvbnMgKi8KLSAgICBpbnQgZXZlbnplcm8gPSAwOwkJCS8qIGFuZCBpbiBldmVu IHBvc2l0aW9ucyAqLwotICAgIGludCBsZm51bCA9IDA7CQkJLyogTnVtYmVyIG9mIDxMRj48TlVM PiBzZXF1ZW5jZXMgKi8KLSAgICBpbnQgY3JsZiA9IDA7CQkJLyogTnVtYmVyIG9mIDxDUkxGPiBz ZXF1ZW5jZXMgKi8KLSNlbHNlCi0gICAgaW50IG5vdHV0ZjggPSAxOwotI2VuZGlmIC8qIFVOSUNP REUgKi8KLQotICAgIGNoYXIgKiBidWYgPSBzOwotICAgIGlmICghcykgcyA9ICIiOwotICAgIGNv dW50ID0gc3RybGVuKHMpOwotCi0jaWZkZWYgVU5JQ09ERQotICAgIGlmIChieXRlcyA9PSAwICYm IGNvdW50ID4gMSkgewotCWludCBpbmNsX2NudCA9IDA7Ci0KLQkvKiBGaXJzdCBsb29rIGZvciBC T00gKi8KLQotCWMwID0gKHVuc2lnbmVkKSgodW5zaWduZWQpYnVmWzBdJjB4RkYpOyAvKiBGaXJz dCBmaWxlIGJ5dGUgKi8KLQljMSA9ICh1bnNpZ25lZCkoKHVuc2lnbmVkKWJ1ZlsxXSYweEZGKTsg LyogU2Vjb25kIGJ5dGUgKi8KLQotCWlmIChjMCA9PSAweEZFICYmIGMxID09IDB4RkYpIHsJLyog VUNTLTIgQkUgKi8KLQkgICAgcmMgPSBGVF9VQ1MyOwotCSAgICB2YWwgPSAwOwotCSAgICBkZWJ1 ZyhGMTExLCJzY2Fuc3RyaW5nIFVDUzIgQk9NIEJFIixja2l0b2EodmFsKSxyYyk7Ci0JICAgIGlu Y2xfY250Kys7Ci0JfSBlbHNlIGlmIChjMCA9PSAweEZGICYmIGMxID09IDB4RkUpIHsgLyogVUNT LTIgTEUgKi8KLQkgICAgcmMgPSBGVF9VQ1MyOwotCSAgICB2YWwgPSAxOwotCSAgICBkZWJ1ZyhG MTExLCJzY2Fuc3RyaW5nIFVDUzIgQk9NIExFIixja2l0b2EodmFsKSxyYyk7Ci0JICAgIGluY2xf Y250Kys7Ci0JfSBlbHNlIGlmIChjb3VudCA+IDIpIGlmIChjMCA9PSAweEVGICYmIGMxID09IDB4 QkIgJiYKLQkJICAgKHVuc2lnbmVkKSgodW5zaWduZWQpYnVmWzJdJjB4RkYpID09IDB4QkYpIHsK LQkgICAgcmMgPSBGVF9VVEY4OwotCSAgICBkZWJ1ZyhGMTExLCJzY2Fuc3RyaW5nIFVURjggQk9N Iixja2l0b2EodmFsKSxyYyk7Ci0JICAgIGluY2xfY250Kys7Ci0JfQotCWlmIChpbmNsX2NudCkg ewkJLyogSGF2ZSBCT00gKi8KLQkgICAgYnl0ZXMgKz0gY291bnQ7Ci0JICAgIGdvdG8geHNjYW5z dHJpbmc7Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBVTklDT0RFICovCi0KLSAgICBieXRlcyArPSBj b3VudDsJCQkvKiBDb3VudCBieXRlcyByZWFkICovCi0KLSAgICBmb3IgKGkgPSAwOyBpIDwgY291 bnQ7IGkrKykgewkvKiBGb3IgZWFjaCBieXRlLi4uICovCi0JYyA9ICh1bnNpZ25lZClidWZbaV07 CS8qIEZvciBlYXNlIG9mIHJlZmVyZW5jZSAqLwotCWlmICghYykgewkJCS8qIFplcm8gYnl0ZT8g Ki8KLQkgICAgZ290byB4c2NhbnN0cmluZzsJLyogTnVsbCB0ZXJtaW5hdGVkIHN0cmluZyAqLwot CX0KLQlpZiAoKGMgJiAweDgwKSA9PSAwKSB7CS8qIFdlIGhhdmUgYSA3LWJpdCBieXRlICovCi0j aWZkZWYgVU5JQ09ERQotCSAgICBpZiAoaSA+IDAgJiYgYyA9PSAxMCkgeyAvKiBMaW5lZmVlZCAq LwotCQlpZiAoYnVmW2ktMV0gPT0gMCkgbGZudWwrKzsgLyogUHJlY2VkZWQgYnkgTlVMICovCi0J CWVsc2UgaWYgKGJ1ZltpLTFdID09IDEzKSBjcmxmKys7IC8qIG9yIGJ5IENSLi4uICovCi0JICAg IH0KLSNlbmRpZiAvKiBVTklDT0RFICovCi0JICAgIGlmIChjIDwgJyAnKSB7CQkvKiBDaGVjayBm b3IgQ08gY29udHJvbHMgKi8KLQkJaWYgKGMgIT0gTEYgJiYgYyAhPSBDUiAmJiBjICE9IEhUICYm IGMgIT0gRkYpIHsKLQkJICAgIGMwY29udHJvbHMrKzsKLQkJICAgIGlmIChjICE9IEVTQyAmJiBj ICE9IFNPICYmIGMgIT0gU0kpCi0JCSAgICAgIGMwbm9uaXNvKys7Ci0JCX0KLQkJaWYgKChjID09 ICdcMDMyJykJLyogQ3RybC1aICovCi0JCSAgICApIHsKLQkJICAgIGMwY29udHJvbHMtLTsKLQkJ ICAgIGMwbm9uaXNvLS07Ci0JCX0KLQkgICAgfQotI2lmZGVmIFVOSUNPREUKLQkgICAgaWYgKCFu b3R1dGY4ICYmIHV0ZjhzdGF0ZSkgeyAvKiBJbiBVVEYtOCBzZXF1ZW5jZT8gKi8KLQkJdXRmOHN0 YXRlID0gMDsKLQkJZGVidWcoRjAwMCwic2NhbnN0cmluZyIsIjctYml0IGJ5dGUgaW4gVVRGOCBz ZXF1ZW5jZSIsYyk7Ci0JCW5vdHV0ZjgrKzsJCS8qIFRoZW4gaXQncyBub3QgVVRGLTggKi8KLQkJ Y29udGludWU7Ci0JICAgIH0KLSNlbmRpZiAvKiBVTklDT0RFICovCi0JfSBlbHNlIHsJCQkvKiBX ZSBoYXZlIGFuIDgtYml0IGJ5dGUgKi8KLQkgICAgZWlnaHRiaXQrKzsJCS8qIENvdW50IGl0ICov Ci0JICAgIGlmIChjID49IDB4ODAgJiYgYyA8IDB4QTApIC8qIENoZWNrIGZvciBDMSBjb250cm9s cyAqLwotCSAgICAgIGMxY29udHJvbHMrKzsKLSNpZmRlZiBVTklDT0RFCi0JICAgIGlmICghbm90 dXRmOCkgewkJLyogSWYgaXQgbWlnaHQgc3RpbGwgYmUgVVRGOC4uLiAqLwotCQlzd2l0Y2ggKHV0 ZjhzdGF0ZSkgeyAvKiBFbnRlciB0aGUgVVRGLTggc3RhdGUgbWFjaGluZSAqLwotCQkgIGNhc2Ug MDoJCSAvKiBGaXJzdCBieXRlLi4uICovCi0JCSAgICBpZiAoKGMgJiAweEUwKSA9PSAweEMwKSB7 IC8qIFRlbGxzIG51bWJlciBvZiAqLwotCQkJdXRmOHN0YXRlID0gMTsgICAgICAgIC8qIHN1YnNl cXVlbnQgYnl0ZXMgKi8KLQkJICAgIH0gZWxzZSBpZiAoKGMgJiAweEYwKSA9PSAweEUwKSB7Ci0J CQl1dGY4c3RhdGUgPSAyOwotCQkgICAgfSBlbHNlIGlmICgoYyAmIDB4RjgpID09IDB4RjApIHsK LQkJCXV0ZjhzdGF0ZSA9IDM7Ci0JCSAgICB9IGVsc2UgewotCQkJbm90dXRmOCsrOwotCQkgICAg fQotCQkgICAgYnJlYWs7Ci0JCSAgY2FzZSAxOgkJLyogU3Vic2VxdWVudCBieXRlICovCi0JCSAg Y2FzZSAyOgotCQkgIGNhc2UgMzoKLQkJICAgIGlmICgoYyAmIDB4QzApICE9IDB4ODApIHsgLyog TXVzdCBzdGFydCB3aXRoIDEwICovCi0JCQlkZWJ1ZyhGMDAwLCJzY2Fuc3RyaW5nIiwKLQkJCSAg ICAgICJiYWQgYnl0ZSBpbiBVVEY4IHNlcXVlbmNlIixjKTsKLQkJCW5vdHV0ZjgrKzsKLQkJCWJy ZWFrOwotCQkgICAgfQotCQkgICAgdXRmOHN0YXRlLS07CS8qIEdvb2QsIG9uZSBsZXNzIGluIHRo aXMgc2VxdWVuY2UgKi8KLQkJICAgIGJyZWFrOwotCQkgIGRlZmF1bHQ6CQkvKiBTaG91bGRuJ3Qg aGFwcGVuICovCi0JCSAgICBkZWJ1ZyhGMTExLCJzY2Fuc3RyaW5nIiwiYmFkIFVURjggc3RhdGUi LHV0ZjhzdGF0ZSk7Ci0JCSAgICBub3R1dGY4Kys7Ci0JCX0KLQkgICAgfQotI2VuZGlmIC8qIFVO SUNPREUgKi8KLQl9Ci0gICAgfQotICAgIGlmIChieXRlcyA9PSAwKQkJCS8qIElmIG5vdGhpbmcg d2FzIHJlYWQgKi8KLSAgICAgIHJldHVybigtMSk7CQkJLyogd2UncmUgZG9uZS4gKi8KLQotI2lm ZGVmIFVOSUNPREUKLSAgICBpZiAoYnl0ZXMgPiAxMDApCQkJLyogQnl0ZXMgaXMgbm90IDAgKi8K LSAgICAgIHBjdHplcm8gPSAoZXZlbnplcm8gKyBvZGR6ZXJvKSAvIChieXRlcyAvIDEwMCk7Ci0g ICAgZWxzZQotICAgICAgcGN0emVybyA9ICgoZXZlbnplcm8gKyBvZGR6ZXJvKSAqIDEwMCkgLyBi eXRlczsKLSNlbmRpZiAvKiBVTklDT0RFICovCi0KLSNpZmRlZiBVTklDT0RFCi0gICAgeCA9IGVp Z2h0Yml0ID8gYnl0ZXMgLyAyMCA6IGJ5dGVzIC8gNDsgLyogRm9yIFVDUy0yLi4uICovCi0KLSAg ICBpZiAocnVubWF4ID4gMikgewkJCS8qIEZpbGUgaGFzIHJ1biBvZiBtb3JlIHRoYW4gMiBOVUxz ICovCi0JZGVidWcoRjEwMCwic2NhbnN0cmluZyBCSU4gcnVubWF4IiwiIiwwKTsKLQlyYyA9IEZU X0JJTjsJCQkvKiBzbyBpdCBjYW4ndCBiZSBhbnkga2luZCBvZiB0ZXh0LiAqLwotCWdvdG8geHNj YW5zdHJpbmc7Ci0KLSAgICB9IGVsc2UgaWYgKHJjID09IEZUX1VDUzIgfHwgKHJjID09IEZUX1VU RjggJiYgcnVubWF4ID09IDApKSB7Ci0JZ290byB4c2NhbnN0cmluZzsJCQkvKiBGaWxlIHN0YXJ0 cyB3aXRoIGEgQk9NICovCi0KLSAgICB9IGVsc2UgaWYgKGVpZ2h0Yml0ID4gMCAmJiAhbm90dXRm OCkgeyAvKiBGaWxlIGhhcyA4LWJpdCBkYXRhICovCi0JaWYgKHJ1bm1heCA+IDApIHsJCSAgIC8q IGFuZCBydW5zIG9mIE5VTHMgKi8KLQkgICAgZGVidWcoRjEwMCwic2NhbnN0cmluZyBCSU4gKG5u VVRGOCkgcnVubWF4IiwiIiwwKTsKLQkgICAgcmMgPSBGVF9CSU47CQkgICAvKiBVVEYtOCBkb2Vz bid0IGhhdmUgTlVMcyAqLwotCX0gZWxzZSB7CQkJICAgLyogTm8gTlVMcyAqLwotCSAgICBkZWJ1 ZyhGMTAwLCJzY2Fuc3RyaW5nIFVURjggKG5uVVRGOCArIHJ1bm1heCA9PSAwKSIsIiIsMCk7Ci0J ICAgIHJjID0gRlRfVVRGODsJCSAgIC8qIGFuZCBub3Qgbm90IFVURi04LCBzbyBpcyBVVEYtOCAq LwotCX0KLQlnb3RvIHhzY2Fuc3RyaW5nOwotICAgIH0KLS8qCi0gIEl0IHNlZW1zIHRvIGJlIFVD Uy0yIGJ1dCBsZXQncyBiZSBtb3JlIGNlcnRhaW4gc2luY2UgdGhlcmUgaXMgbm8gQk9NLi4uCi0g IElmIHRoZSBudW1iZXIgb2YgNy0gYW5kIDgtYml0IGNoYXJhY3RlcnMgaXMgYXBwcm94aW1hdGVs eSBlcXVhbCwgaXQgbWlnaHQKLSAgYmUgYSBjb21wcmVzc2VkIGZpbGUuICBJbiB0aGlzIGNhc2Ug d2UgZGVjaWRlIGJhc2VkIG9uIHRoZSBuYW1lLgotKi8KLSAgICBpZiAocmMgPT0gRlRfVUNTMikg ewotCWlmIChieXRlcyA8IDEwMCkgewotCSAgICBpZiAob2RkemVybyAhPSAwICYmIGV2ZW56ZXJv ICE9IDApIHsKLQkJZGVidWcoRjEwMCwic2NhbnN0cmluZyBzbWFsbCBVQ1MyIGRvdWJ0ZnVsIiwi IiwwKTsKLQkJcmMgPSBGVF9CSU47Ci0JCWdvdG8geHNjYW5zdHJpbmc7Ci0JICAgIH0gZWxzZSBp ZiAob2RkemVybyA9PSAwICYmIGV2ZW56ZXJvID09IDApIHsKLQkJcmMgPSBlaWdodGJpdCA/IEZU XzhCSVQgOiBGVF83QklUOwotCSAgICB9Ci0JfQotCWdvdG8geHNjYW5zdHJpbmc7CQkJLyogU2Vl bXMgdG8gYmUgVUNTLTIgKi8KLSAgICB9Ci0KLS8qIElmIG5vbmUgb2YgdGhlIGFib3ZlLCBpdCdz IHByb2JhYmx5IG5vdCBVbmljb2RlLiAgKi8KLQotICAgIGlmICghZWlnaHRiaXQpIHsJCQkvKiBJ dCdzIDctYml0ICovCi0JaWYgKGMwY29udHJvbHMpIHsJCS8qIFRoaXMgd291bGQgYmUgc3RyYW5n ZSAqLwotCSAgICBpZiAoKGMwbm9uaXNvID4gMCkgJiYgKHR4dGN6ID09IDApKSB7Ci0JCWRlYnVn KEYxMDAsInNjYW5zdHJpbmcgNy1iaXQgQklOIChjMGNvbmlzbykiLCIiLDApOwotCQlyYyA9IEZU X0JJTjsKLQkgICAgfSBlbHNlIHsKLQkJZGVidWcoRjEwMCwic2NhbnN0cmluZyA3LWJpdCBJU08y MDIyIFRFWFQgKG5vIGMwbm9uaXNvKSIsIiIsMCk7Ci0JCXJjID0gRlRfN0JJVDsKLQkgICAgfQot CX0gZWxzZSB7CQkJLyogNy1iaXQgdGV4dCAqLwotCSAgICBkZWJ1ZyhGMTAwLCJzY2Fuc3RyaW5n IDctYml0IFRFWFQgKG5vIGMwY29udHJvbHMpIiwiIiwwKTsKLQkgICAgcmMgPSBGVF83QklUOwot CX0KLSAgICB9IGVsc2UgaWYgKCFjMG5vbmlzbyB8fCB0eHRjeikgewkvKiA4LWJpdCB0ZXh0ICov Ci0JZGVidWcoRjEwMCwic2NhbnN0cmluZyA4LWJpdCBURVhUIChubyBjMG5vbmlzbykiLCIiLDAp OwotCXJjID0gRlRfOEJJVDsKLQl2YWwgPSBjMWNvbnRyb2xzID8gMSA6IDA7Ci0gICAgfSBlbHNl IHsJCQkJLyogOC1iaXQgYmluYXJ5ICovCi0JZGVidWcoRjEwMCwic2NhbnN0cmluZyA4LWJpdCBC SU4gKGMwbm9uaXNvKSIsIiIsMCk7Ci0JcmMgPSBGVF9CSU47Ci0gICAgfQotCi0jZWxzZSAgLyog IVVOSUNPREUgKi8KLQotICAgIGlmIChjMG5vbmlzbykgewotCWRlYnVnKEYxMDAsInNjYW5zdHJp bmcgOC1iaXQgQklOIChjMG5vbmlzbykiLCIiLDApOwotCXJjID0gRlRfQklOOwotICAgIH0gZWxz ZSBpZiAoZWlnaHRiaXQpIHsKLQlkZWJ1ZyhGMTAwLCJzY2Fuc3RyaW5nIDgtYml0IFRFWFQgKG5v IGMwbm9uaXNvKSIsIiIsMCk7Ci0JcmMgPSBGVF84QklUOwotCXZhbCA9IGMxY29udHJvbHMgPyAx IDogMDsKLSAgICB9IGVsc2UgewotCWRlYnVnKEYxMDAsInNjYW5zdHJpbmcgNy1iaXQgVEVYVCAo bm8gYzBub25pc28pIiwiIiwwKTsKLQlyYyA9IEZUXzdCSVQ7Ci0gICAgfQotCi0jZW5kaWYgLyog VU5JQ09ERSAqLwotCi0gIHhzY2Fuc3RyaW5nOgotICAgIGRlYnVnKEYxMDEsInNjYW5zdHJpbmcg cmVzdWx0ICAgICAiLCIiLHJjKTsKLSAgICByZXR1cm4ocmMpOwotfQotCi0KLQotLyogIEYgSSBM IEUgUyBFIEwgRSBDIFQgIC0tICBTZWxlY3QgdGhpcyBmaWxlIGZvciBzZW5kaW5nICAqLwotCi1p bnQKLSNpZmRlZiBDS19BTlNJQwotZmlsZXNlbGVjdCgKLSAgICBjaGFyICpmLCBjaGFyICpzYSwg Y2hhciAqc2IsIGNoYXIgKnNuYSwgY2hhciAqc25iLAotICAgIENLX09GRl9UIG1pbnNpeiwgQ0tf T0ZGX1QgbWF4c2l6LAotICAgIGludCBuYnUsIGludCBueGxpc3QsCi0gICAgY2hhciAqKiB4bGlz dAotKQotI2Vsc2UKLWZpbGVzZWxlY3QoZixzYSxzYixzbmEsc25iLG1pbnNpeixtYXhzaXosbmJ1 LG54bGlzdCx4bGlzdCkKLSBjaGFyICpmLCpzYSwqc2IsKnNuYSwqc25iOyBDS19PRkZfVCBtaW5z aXosbWF4c2l6OwotIGludCBuYnUsbnhsaXN0OyBjaGFyICoqIHhsaXN0OwotI2VuZGlmIC8qIENL X0FOU0lDICovCi0vKiBmaWxlc2VsZWN0ICovIHsKLSAgICBjaGFyICpmZGF0ZTsKLSAgICBpbnQg bjsKLSAgICBDS19PRkZfVCB6OwotCi0gICAgZGVidWcoRjExMSwiZmlsZXNlbGVjdCBtaW5zaXoi LGNrZnN0b2EobWluc2l6KSxtaW5zaXopOwotICAgIGRlYnVnKEYxMTEsImZpbGVzZWxlY3QgbWF4 c2l6Iixja2ZzdG9hKG1heHNpeiksbWF4c2l6KTsKLSAgICBkZWJ1ZyhGMTExLCJmaWxlc2VsZWN0 IChDS19PRkZfVCktMSIsY2tmc3RvYSgoQ0tfT0ZGX1QpLTEpLChDS19PRkZfVCktMSk7Ci0KLSAg ICBpZiAoIXNhKSBzYSA9ICIiOwotICAgIGlmICghc2IpIHNiID0gIiI7Ci0gICAgaWYgKCFzbmEp IHNuYSA9ICIiOwotICAgIGlmICghc25iKSBzbmIgPSAiIjsKLQotI2lmZGVmIENLU1lNTElOSwot I2lmbmRlZiBOT0lDUAotI2lmbmRlZiBOT1hGRVIKLSAgICBpZiAobm9saW5rcykgewotCUNLX09G Rl9UIHp6OwotCXp6ID0gemdldGZzKGYpOwotCWRlYnVnKEYxMTEsImZpbGVzZWxlY3QgTk9MSU5L UyB6Z2V0ZnMiLGYsenopOwotCWlmICh6eiA8IChDS19PRkZfVCkwKQotCSAgcmV0dXJuKDApOwot CWRlYnVnKEYxMTEsImZpbGVzZWxlY3QgTk9MSU5LUyB6Z2ZzX2xpbmsiLGYsemdmc19saW5rKTsK LQlpZiAoemdmc19saW5rKQotCSAgcmV0dXJuKDApOwotICAgIH0KLSNlbmRpZiAvKiBOT1hGRVIg Ki8KLSNlbmRpZiAvKiBOT0lDUCAqLwotI2VuZGlmIC8qIENLU1lNTElOSyAqLwotCi0gICAgZGVi dWcoRjExMCwiZmlsZXNlbGVjdCIsZiwwKTsKLSAgICBpZiAoKnNhIHx8ICpzYiB8fCAqc25hIHx8 ICpzbmIpIHsKLQlmZGF0ZSA9IHpmY2RhdChmKTsJCS8qIERhdGUvdGltZSBvZiB0aGlzIGZpbGUg Ki8KLQlpZiAoIWZkYXRlKSBmZGF0ZSA9ICIiOwotCW4gPSBzdHJsZW4oZmRhdGUpOwotCWRlYnVn KEYxMTEsImZpbGVzZWxlY3QgZmRhdGUiLGZkYXRlLG4pOwotCWlmIChuICE9IDE3KQkJCS8qIEZh aWxlZCB0byBnZXQgaXQgKi8KLQkgIHJldHVybigxKTsKLQkvKiAvQUZURVI6ICovCi0JaWYgKHNh WzBdICYmIChzdHJjbXAoZmRhdGUsKGNoYXIgKilzYSkgPD0gMCkpIHsKLQkgICAgZGVidWcoRjEx MCwiZmlsZXNlbGVjdCBzYSIsc2EsMCk7Ci0JICAgIC8qIHRsb2coRjExMCwiU2tpcHBpbmcgKHRv byBvbGQpIixmLDApOyAqLwotCSAgICByZXR1cm4oMCk7Ci0JfQotCS8qIC9CRUZPUkU6ICovCi0J aWYgKHNiWzBdICYmIChzdHJjbXAoZmRhdGUsKGNoYXIgKilzYikgPj0gMCkpIHsKLQkgICAgZGVi dWcoRjExMCwiZmlsZXNlbGVjdCBzYiIsc2IsMCk7Ci0JICAgIC8qIHRsb2coRjExMCwiU2tpcHBp bmcgKHRvbyBuZXcpIixmLDApOyAqLwotCSAgICByZXR1cm4oMCk7Ci0JfQotCS8qIC9OT1QtQUZU RVI6ICovCi0JaWYgKHNuYVswXSAmJiAoc3RyY21wKGZkYXRlLChjaGFyICopc25hKSA+IDApKSB7 Ci0JICAgIGRlYnVnKEYxMTAsImZpbGVzZWxlY3Qgc25hIixzbmEsMCk7Ci0JICAgIC8qIHRsb2co RjExMCwiU2tpcHBpbmcgKHRvbyBuZXcpIixmLDApOyAqLwotCSAgICByZXR1cm4oMCk7Ci0JfQot CS8qIC9OT1QtQkVGT1JFOiAqLwotCWlmIChzbmJbMF0gJiYgKHN0cmNtcChmZGF0ZSwoY2hhciAq KXNuYikgPCAwKSkgewotCSAgICBkZWJ1ZyhGMTEwLCJmaWxlc2VsZWN0IHNuYiIsc25iLDApOwot CSAgICAvKiB0bG9nKEYxMTAsIlNraXBwaW5nICh0b28gb2xkKSIsZiwwKTsgKi8KLQkgICAgcmV0 dXJuKDApOwotCX0KLSAgICB9Ci0gICAgLyogU21hbGxlciBvciBsYXJnZXIgKi8KLSAgICBpZiAo bWluc2l6ID4gKENLX09GRl9UKS0xIHx8IG1heHNpeiA+IChDS19PRkZfVCktMSkgewotCXogPSB6 Y2hraShmKTsJCQkvKiBHZXQgc2l6ZSAqLwotCWRlYnVnKEYxMDEsImZpbGVzZWxlY3QgZmlsZXNp emUiLCIiLHopOwotCWlmICh6IDwgKENLX09GRl9UKTApCi0JICByZXR1cm4oMSk7Ci0JaWYgKCht aW5zaXogPiAoQ0tfT0ZGX1QpLTEpICYmICh6ID49IG1pbnNpeikpIHsKLQkgICAgZGVidWcoRjEx MSwiZmlsZXNlbGVjdCBtaW5zaXogc2tpcHBpbmciLGYsbWluc2l6KTsKLQkgICAgLyogdGxvZyhG MTExLCJTa2lwcGluZyAodG9vIGJpZykiLGYseik7ICovCi0JICAgIHJldHVybigwKTsKLQl9Ci0J aWYgKChtYXhzaXogPiAoQ0tfT0ZGX1QpLTEpICYmICh6IDw9IG1heHNpeikpIHsKLQkgICAgZGVi dWcoRjExMSwiZmlsZXNlbGVjdCBtYXhzaXogc2tpcHBpbmciLGYsbWF4c2l6KTsKLQkgICAgLyog dGxvZyhGMTEwLCJTa2lwcGluZyAodG9vIHNtYWxsKSIsZiwwKTsgKi8KLQkgICAgcmV0dXJuKDAp OwotCX0KLSAgICB9Ci0gICAgaWYgKG5idSkgewkJCQkvKiBTa2lwcGluZyBiYWNrdXAgZmlsZXM/ ICovCi0JaWYgKGNrbWF0Y2goCi0jaWZkZWYgQ0tSRUdFWAotCQkgICAgIiouflswLTldKn4iCS8q IE5vdCBwZXJmZWN0IGJ1dCBjbG9zZSBlbm91Z2guICovCi0jZWxzZQotCQkgICAgIioufip+IgkJ LyogTGVzcyBjbG9zZS4gKi8KLSNlbmRpZiAvKiBDS1JFR0VYICovCi0JCSAgICAsZixmaWxlY2Fz ZSwxKSkgewotCSAgICBkZWJ1ZyhGMTEwLCJmaWxlc2VsZWN0IHNraXBwaW5nIGJhY2t1cCIsZiww KTsKLQkgICAgcmV0dXJuKDApOwotCX0KLSAgICB9Ci0gICAgZm9yIChuID0gMDsgeGxpc3QgJiYg biA8IG54bGlzdDsgbisrKSB7Ci0JaWYgKCF4bGlzdFtuXSkgewotCSAgICBkZWJ1ZyhGMTAxLCJm aWxlc2VsZWN0IHhsaXN0IGVtcHR5IiwwLG4pOwotCSAgICBicmVhazsKLQl9Ci0JaWYgKGNrbWF0 Y2goeGxpc3Rbbl0sZixmaWxlY2FzZSwxKSkgewotCSAgICBkZWJ1ZyhGMTExLCJmaWxlc2VsZWN0 IHhsaXN0Iix4bGlzdFtuXSxuKTsKLQkgICAgZGVidWcoRjExMCwiZmlsZXNlbGVjdCBza2lwcGlu ZyIsZiwwKTsKLQkgICAgcmV0dXJuKDApOwotCX0KLSAgICB9Ci0gICAgaWYgKHhmaWxldHlwZSA+ IC0xKSB7Ci0JbiA9IHNjYW5maWxlKGYsTlVMTCxuc2NhbmZpbGUpOwotCWlmIChuIDwgMCkgewot CSAgICBuID0gYmluYXJ5ID8gMSA6IDA7Ci0JfSBlbHNlIHsKLQkgICAgbiA9IChuID09IEZUX0JJ TikgPyAxIDogMDsKLQl9Ci0JaWYgKG4gIT0geGZpbGV0eXBlKQotCSAgcmV0dXJuKDApOwotICAg IH0KLSAgICBkZWJ1ZyhGMTEwLCJmaWxlc2VsZWN0IHNlbGVjdGluZyIsZiwwKTsKLSAgICByZXR1 cm4oMSk7Ci19Ci0KLQotI2lmZGVmIFRDUFNPQ0tFVAotI2lmZGVmIE5UCi1leHRlcm4gaW50IFdT QVNhZmVUb0NhbmNlbDsKLSNlbmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwot Ci1WT0lECi1zZXRmbG93KCkgewotICAgIGV4dGVybiBpbnQgZmxvdywgYXV0b2Zsb3csIG1kbXR5 cCwgY3h0eXBlLCBjeGZsb3dbXTsKLSNpZm5kZWYgTk9ESUFMCi0gICAgZXh0ZXJuIGludCBkaWFs Y2FwYXMsIGRpYWxmYzsKLSAgICBleHRlcm4gTURNSU5GICogbW9kZW1wW107Ci0gICAgTURNSU5G ICogcCA9IE5VTEw7Ci0gICAgbG9uZyBiaXRzID0gMDsKLSNlbmRpZiAvKiBOT0RJQUwgKi8KLQot ICAgIGRlYnVnKEYxMDEsInNldGZsb3cgYXV0b2Zsb3ciLCIiLGF1dG9mbG93KTsKLQotLyogI2lm ZGVmIENPTU1FTlQgKi8KLS8qIFdIWSBXQVMgVEhJUyBDT01NRU5URUQgT1VUPyAqLwotICAgIGlm ICghYXV0b2Zsb3cpICAgICAgICAgICAgICAgICAgICAgIC8qIE9ubHkgaWYgRkxPVyBpcyBBVVRP ICovCi0gICAgICByZXR1cm47Ci0vKiAjZW5kaWYgKi8gLyogQ09NTUVOVCAqLwotCi0gICAgZGVi dWcoRjEwMSwic2V0ZmxvdyBsb2NhbCIsIiIsbG9jYWwpOwotICAgIGRlYnVnKEYxMDEsInNldGZs b3cgbmV0d29yayIsIiIsbmV0d29yayk7Ci0gICAgZGVidWcoRjEwMSwic2V0ZmxvdyBjeHR5cGUi LCIiLGN4dHlwZSk7Ci0KLSNpZmRlZiBUTl9DT01QT1JUCi0gICAgaWYgKG5ldHdvcmsgJiYgaXN0 bmNvbXBvcnQoKSkgewotCWZsb3cgPSBjeGZsb3dbQ1hUX01PREVNXTsKLSAgICAgICAgZGVidWco RjEwMSwic2V0ZmxvdyBUTl9DT01QT1JUIGZsb3ciLCIiLGZsb3cpOwotICAgICAgICByZXR1cm47 Ci0gICAgfQotI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KLQotICAgIGlmIChuZXR3b3JrIHx8ICFs b2NhbCB8fCBjeHR5cGUgPT0gQ1hUX0RJUkVDVCkgewotICAgICAgICBmbG93ID0gY3hmbG93W2N4 dHlwZV07ICAgICAgICAgIC8qIFNldCBhcHByb3ByaWF0ZSBmbG93IGNvbnRyb2wgKi8KLSAgICAg ICAgZGVidWcoRjEwMSwic2V0ZmxvdyBmbG93IiwiIixmbG93KTsKLSAgICAgICAgcmV0dXJuOwot ICAgIH0KLSAgICBpZiAoY3h0eXBlICE9IENYVF9NT0RFTSkgICAgICAgICAgICAvKiBDb25uZWN0 aW9uIHR5cGUgc2hvdWxkIGJlIG1vZGVtICovCi0gICAgICByZXR1cm47Ci0KLSNpZm5kZWYgTk9E SUFMCi0gICAgYml0cyA9IGRpYWxjYXBhczsgICAgICAgICAgICAgICAgICAgLyogQ2FwYWJpbGl0 eSBiaXRzICovCi0gICAgaWYgKCFiaXRzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8g Yml0cz8gKi8KLSAgICAgICAgcCA9IG1vZGVtcFttZG10eXBdOyAgICAgICAgICAgICAvKiBMb29r IGluIG1vZGVtIGluZm8gc3RydWN0dXJlICovCi0gICAgICAgIGlmIChwKQotICAgICAgICAgIGJp dHMgPSBwLT5jYXBhczsKLSAgICB9Ci0gICAgaWYgKGRpYWxmYyA9PSBGTE9fQVVUTykgeyAgICAg ICAgICAgLyogSWYgRElBTCBmbG93IGlzIEFVVE8gKi8KLSNpZmRlZiBDS19SVFNDVFMgICAgICAg ICAgICAgICAgICAgICAgICAvKiBJZiB3ZSBjYW4gZG8gUlRTL0NUUyBmbG93IGNvbnRyb2wgKi8K LSAgICAgICAgaWYgKGJpdHMgJiBDS0RfSFcpICAgICAgICAgICAgICAvKiBhbmQgbW9kZW0gY2Fu IGRvIGl0IHRvbyAqLwotICAgICAgICAgIGZsb3cgPSBGTE9fUlRTQzsgICAgICAgICAgICAgIC8q IHRoZW4gc3dpdGNoIHRvIFJUUy9DVFMgKi8KLSAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBvdGhlcndpc2UgKi8KLSAgICAgICAgICBmbG93ID0gRkxPX1hPTlg7ICAg ICAgICAgICAgICAvKiB1c2UgWG9uL1hvZmYuICovCi0jZWxzZQotI2lmbmRlZiBORVhUCi0jaWZu ZGVmIElSSVgKLSAgICAgICAgZmxvdyA9IEZMT19YT05YOyAgICAgICAgICAgICAgICAvKiBVc2Ug WG9uL1hvZmYuICovCi0jZW5kaWYgLyogSVJJWCAqLwotI2VuZGlmIC8qIE5FWFQgKi8KLSNlbmRp ZiAvKiBDS19SVFNDVFMgKi8KLSAgICB9Ci0jZW5kaWYgLyogTk9ESUFMICovCi0gICAgZGVidWco RjEwMSwic2V0ZmxvdyBtb2RlbSBmbG93IiwiIixmbG93KTsKLSAgICByZXR1cm47Ci19Ci0KLSNp Zm5kZWYgTk9MT0NBTAotI2lmZGVmIENLX1RSSUdHRVIKLQotLyogIEEgVSBUIE8gRSBYIEkgVCBD IEggSyAgLS0gIENoZWNrIGZvciBDT05ORUNULW1vZGUgdHJpZ2dlciBzdHJpbmcgICovCi0vKgot ICBSZXR1cm5zIC0xIGlmIHRyaWdnZXIgbm90IGZvdW5kLCBvciBlbHNlIHRoZSB0cmlnZ2VyIGlu ZGV4LCAwIG9yIGdyZWF0ZXIuCi0gIChSZXBsYWNlIHdpdGggZmFuY2llciBhbmQgbW9yZSBlZmZp Y2llbnQgbWF0Y2hlciBsYXRlci4uLikKLSAgTk9URTogdG8gcHJldmVudCB1bm5lY2Vzc2FyeSBm dW5jdGlvbiBjYWxsIG92ZXJoZWFkLCBjYWxsIHRoaXMgd2F5OgotCi0gICAgeCA9IHR0X3RyaWdn ZXJbMF0gPyBhdXRvZXhpdGNoayhjKSA6IC0xOwotCi0qLwotaW50Ci0jaWZkZWYgQ0tfQU5TSUMK LWF1dG9leGl0Y2hrKENIQVIgYykKLSNlbHNlCi1hdXRvZXhpdGNoayhjKSBDSEFSIGM7Ci0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLS8qIGF1dG9leGl0Y2hrICovIHsKLSAgICBleHRlcm4gQ0hBUiAq IHR0X3RybWF0Y2hbXTsKLSAgICBleHRlcm4gY2hhciAqIHR0X3RyaWdnZXJbXTsKLSAgICBpbnQg aTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgVFJJR0dFUlM7IGkrKykgewotICAgICAgICBpZiAoIXR0 X3RyaWdnZXJbaV0pIHsgICAgICAgICAgIC8qIE5vIG1vcmUgdHJpZ2dlcnMgaW4gbGlzdCAqLwot ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gZWxzZSBpZiAoKnR0X3RyaWdnZXJbaV0pIHsK LSAgICAgICAgICAgIGlmICghdHRfdHJtYXRjaFtpXSkgICAgICAgICAvKiBKdXN0IHN0YXJ0aW5n PyAqLwotICAgICAgICAgICAgICB0dF90cm1hdGNoW2ldID0gKENIQVIgKil0dF90cmlnZ2VyW2ld OyAvKiBTZXQgbWF0Y2ggcG9pbnRlciAqLwotICAgICAgICAgICAgaWYgKGMgPT0gKnR0X3RybWF0 Y2hbaV0pIHsgIC8qIENvbXBhcmUgdGhpcyBjaGFyYWN0ZXIgKi8KLSAgICAgICAgICAgICAgICB0 dF90cm1hdGNoW2ldKys7ICAgICAgICAvKiBJdCBtYXRjaGVzICovCi0gICAgICAgICAgICAgICAg aWYgKCEqdHRfdHJtYXRjaFtpXSkgeyAgLyogRW5kIG9mIG1hdGNoIHN0cmluZz8gKi8KLSAgICAg ICAgICAgICAgICAgICAgdHRfdHJtYXRjaFtpXSA9IChDSEFSICopIHR0X3RyaWdnZXJbaV07IC8q IFllcywgcmV3aW5kLCAqLwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJhdXRvZXhp dGNoayIsdHRfdHJpZ2dlcltpXSxpKTsgLyogbG9nLCAqLwotICAgICAgICAgICAgICAgICAgICBy ZXR1cm4oaSk7ICAgICAgICAgIC8qIGFuZCByZXR1cm4gc3VjY2VzcyAqLwotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSAgICAgICAgICAgICAgICAgICAgICAvKiBObyBtYXRj aCAqLwotICAgICAgICAgICAgICB0dF90cm1hdGNoW2ldID0gKENIQVIgKikgdHRfdHJpZ2dlcltp XTsgLyogUmV3aW5kIG1hdGNoIHN0cmluZyAqLwotICAgICAgICB9IC8qIGFuZCBnbyBvbiB0aGUg bmV4dCBtYXRjaCBzdHJpbmcgKi8KLSAgICB9Ci0gICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAg ICAgICAgICAgICAgLyogTm8gbWF0Y2ggZm91bmQgKi8KLX0KLSNlbmRpZiAvKiBDS19UUklHR0VS ICovCi0KLSNpZm5kZWYgTk9TSE9XCi0vKiAgUyBIIE8gTSBEIE0gIC0tICBTaG93IG1vZGVtIHNp Z25hbHMgICovCi0KLVZPSUQKLXNob21kbSgpIHsKLS8qCi0gIE5vdGUgdXNlIG9mICJcclxuIiB0 byBtYWtlIHN1cmUgdGhpcyByZXBvcnQgcHJpbnRzIHJpZ2h0LCBldmVuIHdoZW4KLSAgY2FsbGVk IGR1cmluZyBDT05ORUNUIG1vZGUuCi0qLwotICAgIGludCB5OwotICAgIHkgPSB0dGdtZG0oKTsK LSAgICBzd2l0Y2ggKHkpIHsKLSAgICAgIGNhc2UgLTM6IHByaW50ZigKLSAgICAgICAgICAgICAg ICAgIk1vZGVtIHNpZ25hbHMgdW5hdmFpbGFibGUgaW4gdGhpcyB2ZXJzaW9uIG9mIEtlcm1pdFxy XG4iKTsKLSAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAtMjogcHJpbnRmKCJObyBt b2RlbSBjb250cm9sIGZvciB0aGlzIGRldmljZVxyXG4iKTsgYnJlYWs7Ci0gICAgICBjYXNlIC0x OiBwcmludGYoIk1vZGVtIHNpZ25hbHMgdW5hdmFpbGFibGVcclxuIik7IGJyZWFrOwotICAgICAg ZGVmYXVsdDoKLSNpZm5kZWYgTUFDCi0gICAgICAgIHByaW50ZigKLSAgICAgICAgICAiIENhcnJp ZXIgRGV0ZWN0ICAgICAgKENEKTogICVzXHJcbiIsKHkgJiBCTV9EQ0QpID8gIk9uIjogIk9mZiIp OwotICAgICAgICBwcmludGYoCi0gICAgICAgICAgIiBEYXRhc2V0IFJlYWR5ICAgICAgIChEU1Ip OiAlc1xyXG4iLCh5ICYgQk1fRFNSKSA/ICJPbiI6ICJPZmYiKTsKLSNlbmRpZiAvKiBNQUMgKi8K LSAgICAgICAgcHJpbnRmKAotICAgICAgICAgICIgQ2xlYXIgVG8gU2VuZCAgICAgICAoQ1RTKTog JXNcclxuIiwoeSAmIEJNX0NUUykgPyAiT24iOiAiT2ZmIik7Ci0jaWZuZGVmIFNUUkFUVVMKLSNp Zm5kZWYgTUFDCi0gICAgICAgIHByaW50ZigKLSAgICAgICAgICAiIFJpbmcgSW5kaWNhdG9yICAg ICAgKFJJKTogICVzXHJcbiIsKHkgJiBCTV9STkcpID8gIk9uIjogIk9mZiIpOwotI2VuZGlmIC8q IE1BQyAqLwotICAgICAgICBwcmludGYoCi0gICAgICAgICAgIiBEYXRhIFRlcm1pbmFsIFJlYWR5 IChEVFIpOiAlc1xyXG4iLAotI2lmZGVmIE5UCi0gICAgICAgICAgIih1bmtub3duKSIKLSNlbHNl IC8qIE5UICovCi0gICAgICAgICAgKHkgJiBCTV9EVFIpID8gIk9uIjogIk9mZiIKLSNlbmRpZiAv KiBOVCAqLwotICAgICAgICAgICk7Ci0jaWZuZGVmIE1BQwotICAgICAgICBwcmludGYoCi0gICAg ICAgICAgIiBSZXF1ZXN0IFRvIFNlbmQgICAgIChSVFMpOiAlc1xyXG4iLAotI2lmZGVmIE5UCi0g ICAgICAgICAgIih1bmtub3duKSIKLSNlbHNlIC8qIE5UICovCi0gICAgICAgICAgKHkgJiBCTV9S VFMpID8gIk9uIjogIk9mZiIKLSNlbmRpZiAvKiBOVCAqLwotICAgICAgICAgICk7Ci0jZW5kaWYg LyogTUFDICovCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotICAgIH0KLSNpZmRlZiBCRVRBREVCVUcK LSNpZmRlZiBDS19UQVBJCi0gICAgaWYgKHR0dGFwaSAmJiAhdGFwaXBhc3MpIHsKLSAgICAgICAg TFBERVZDRkcgICAgICAgIGxwRGV2Q2ZnID0gTlVMTDsKLSAgICAgICAgTFBDT01NQ09ORklHICAg IGxwQ29tbUNvbmZpZyA9IE5VTEw7Ci0gICAgICAgIExQTU9ERU1TRVRUSU5HUyBscE1vZGVtU2V0 dGluZ3MgPSBOVUxMOwotICAgICAgICBEQ0IgKiAgICAgICAgICAgbHBEQ0IgPSBOVUxMOwotCi0g ICAgICAgIGlmIChja3RhcGlHZXRNb2RlbVNldHRpbmdzKCZscERldkNmZywmbHBNb2RlbVNldHRp bmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxwQ29tbUNvbmZpZywm bHBEQ0IpKSB7Ci0gICAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgICAgICBja3RhcGlE aXNwbGF5TW9kZW1TZXR0aW5ncyhscERldkNmZyxscE1vZGVtU2V0dGluZ3MsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscENvbW1Db25maWcsbHBEQ0IpOwotICAgICAg ICB9Ci0gICAgfQotI2VuZGlmIC8qIENLX1RBUEkgKi8KLSNlbmRpZiAvKiBCRVRBREVCVUcgKi8K LX0KLSNlbmRpZiAvKiBOT1NIT1cgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSNpZm5kZWYg Tk9YRkVSCi0vKiAgUyBEIEUgQiBVICAtLSBSZWNvcmQgc3BhciByZXN1bHRzIGluIGRlYnVnZ2lu ZyBsb2cgICovCi0KLVZPSUQKLXNkZWJ1KGxlbikgaW50IGxlbjsgewotICAgIGRlYnVnKEYxMTEs InNwYXI6IGRhdGEiLChjaGFyICopIHJkYXRhcCxsZW4pOwotICAgIGRlYnVnKEYxMDEsIiBzcHNp eiAiLCIiLCBzcHNpeik7Ci0gICAgZGVidWcoRjEwMSwiIHRpbWludCIsIiIsdGltaW50KTsKLSAg ICBkZWJ1ZyhGMTAxLCIgbnBhZCAgIiwiIiwgIG5wYWQpOwotICAgIGRlYnVnKEYxMDEsIiBwYWRj aCAiLCIiLCBwYWRjaCk7Ci0gICAgZGVidWcoRjEwMSwiIHNlb2wgICIsIiIsICBzZW9sKTsKLSAg ICBkZWJ1ZyhGMTAxLCIgY3RscSAgIiwiIiwgIGN0bHEpOwotICAgIGRlYnVnKEYxMDEsIiBlYnEg ICAiLCIiLCAgIGVicSk7Ci0gICAgZGVidWcoRjEwMSwiIGVicWZsZyIsIiIsZWJxZmxnKTsKLSAg ICBkZWJ1ZyhGMTAxLCIgYmN0ciAgIiwiIiwgIGJjdHIpOwotICAgIGRlYnVnKEYxMDEsIiBycHRx ICAiLCIiLCAgcnB0cSk7Ci0gICAgZGVidWcoRjEwMSwiIHJwdGZsZyIsIiIscnB0ZmxnKTsKLSAg ICBkZWJ1ZyhGMTAxLCIgbHNjYXB1IiwiIixsc2NhcHUpOwotICAgIGRlYnVnKEYxMDEsIiBhdGNh cHUiLCIiLGF0Y2FwdSk7Ci0gICAgZGVidWcoRjEwMSwiIGxwY2FwdSIsIiIsbHBjYXB1KTsKLSAg ICBkZWJ1ZyhGMTAxLCIgc3djYXB1IiwiIixzd2NhcHUpOwotICAgIGRlYnVnKEYxMDEsIiB3c2xv dG4iLCIiLCB3c2xvdG4pOwotICAgIGRlYnVnKEYxMDEsIiB3aGF0cnUiLCIiLCB3aGF0cnUpOwot fQotLyogIFIgRCBFIEIgVSAtLSBEZWJ1Z2dpbmcgZGlzcGxheSBvZiBycGFyKCkgdmFsdWVzICAq LwotCi1WT0lECi1yZGVidShkLGxlbikgQ0hBUiAqZDsgaW50IGxlbjsgewotICAgIGRlYnVnKEYx MTEsInJwYXI6IGRhdGEiLGQsbGVuKTsKLSAgICBkZWJ1ZyhGMTAxLCIgcnBzaXogIiwiIiwgeHVu Y2hhcihkWzBdKSk7Ci0gICAgZGVidWcoRjEwMSwiIHJ0aW1vICIsIiIsIHJ0aW1vKTsKLSAgICBk ZWJ1ZyhGMTAxLCIgbXlwYWRuIiwiIixteXBhZG4pOwotICAgIGRlYnVnKEYxMDEsIiBteXBhZGMi LCIiLG15cGFkYyk7Ci0gICAgZGVidWcoRjEwMSwiIGVvbCAgICIsIiIsICAgZW9sKTsKLSAgICBk ZWJ1ZyhGMTAxLCIgY3RscSAgIiwiIiwgIGN0bHEpOwotICAgIGRlYnVnKEYxMDEsIiBzcSAgICAi LCIiLCAgICBzcSk7Ci0gICAgZGVidWcoRjEwMSwiIGVicSAgICIsIiIsICAgZWJxKTsKLSAgICBk ZWJ1ZyhGMTAxLCIgZWJxZmxnIiwiIixlYnFmbGcpOwotICAgIGRlYnVnKEYxMDEsIiBiY3RyICAi LCIiLCAgYmN0cik7Ci0gICAgZGVidWcoRjEwMSwiIHJwdHEgICIsIiIsICBkWzhdKTsKLSAgICBk ZWJ1ZyhGMTAxLCIgcnB0ZmxnIiwiIixycHRmbGcpOwotICAgIGRlYnVnKEYxMDEsIiBjYXBhcyAi LCIiLCBjYXBhcyk7Ci0gICAgZGVidWcoRjEwMSwiIGJpdHMgICIsIiIsZFtjYXBhc10pOwotICAg IGRlYnVnKEYxMDEsIiBsc2NhcHUiLCIiLGxzY2FwdSk7Ci0gICAgZGVidWcoRjEwMSwiIGF0Y2Fw dSIsIiIsYXRjYXB1KTsKLSAgICBkZWJ1ZyhGMTAxLCIgbHBjYXB1IiwiIixscGNhcHUpOwotICAg IGRlYnVnKEYxMDEsIiBzd2NhcHUiLCIiLHN3Y2FwdSk7Ci0gICAgZGVidWcoRjEwMSwiIHdzbG90 ciIsIiIsIHdzbG90cik7Ci0gICAgZGVidWcoRjEwMSwiIHJwc2l6KGV4dGVuZGVkKSIsIiIscnBz aXopOwotfQotCi0jaWZkZWYgQ09NTUVOVAotLyogIEMgSCBLIEUgUiBSICAtLSAgRGVjaWRlIHdo ZXRoZXIgdG8gZXhpdCB1cG9uIGEgcHJvdG9jb2wgZXJyb3IgICovCi0KLVZPSUQKLWNoa2Vycigp IHsKLSAgICBpZiAoYmFja2dyZCAmJiAhc2VydmVyKSBmYXRhbCgiUHJvdG9jb2wgZXJyb3IiKTsK LX0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLS8qICBGIEEg VCBBIEwgIC0tICBGYXRhbCBlcnJvciBtZXNzYWdlICovCi0KLVZPSUQKLWZhdGFsKG1zZykgY2hh ciAqbXNnOyB7Ci0gICAgZXh0ZXJuIGludCBpbml0ZmxnOwotICAgIHN0YXRpYyBpbnQgaW5pdGlu ZyA9IDA7Ci0gICAgaWYgKCFtc2cpIG1zZyA9ICIiOwotICAgIGRlYnVnKEYxMTEsImZhdGFsIixt c2csaW5pdGZsZyk7Ci0KLSAgICBpZiAoIWluaXRmbGcpIHsJCQkvKiBJZiBjYWxsZWQgZnJvbSBw cmVzY2FuICovCi0JaWYgKGluaXRpbmcpCQkJLyogb3IgY2FsbGVkIGZyb20gc3lzaW5pdCgpICov Ci0gICAgICAgICAgZXhpdCgyNTMpOwotCWluaXRpbmcgPSAxOwotCXN5c2luaXQoKTsKLSAgICB9 Ci0KLSAgICBkZWJ1ZyhGMTExLCJmYXRhbCIsbXNnLHhpdHN0YSk7Ci0gICAgdGxvZyhGMTEwLCJG YXRhbDoiLG1zZywwTCk7Ci0jaWZkZWYgVk1TCi0gICAgaWYgKHN0cm5jbXAobXNnLCIlQ0tFUk1J VCIsOCkpCi0gICAgICBjb25vbCgiJUNLRVJNSVQtRS1GQVRBTCwgIik7Ci0gICAgY29ub2xsKG1z Zyk7Ci0jZWxzZSAvKiAhVk1TICovCi0gICAgY29ub2xsKG1zZyk7Ci0jZW5kaWYgLyogVk1TICov Ci0jaWZkZWYgT1MyCi0jaWZuZGVmIE5PWEZFUgotICAgIGlmICh4ZnJiZWwpIHsKLSAgICAgICAg YmxlZXAoQlBfRkFJTCk7Ci0gICAgICAgIHNsZWVwKDEpOwotICAgICAgICBibGVlcChCUF9GQUlM KTsKLSAgICB9Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICBk b2V4aXQoQkFEX0VYSVQseGl0c3RhIHwgMSk7ICAgICAgICAvKiBFeGl0IGluZGljYXRpbmcgZmFp bHVyZSAqLwotfQotCi0jaWZuZGVmIE5PWEZFUgotLyogIEIgTCBEIEwgRSBOICAtLSAgTWFrZSBs ZW5ndGgtZW5jb2RlZCBjb3B5IG9mIHN0cmluZyAgKi8KLQotY2hhciAqCi1ibGRsZW4oc3RyLGRl c3QpIGNoYXIgKnN0ciwgKmRlc3Q7IHsKLSAgICBpbnQgbGVuOwotICAgIGxlbiA9IChpbnQpc3Ry bGVuKHN0cik7Ci0gICAgaWYgKGxlbiA+IDk0KQotICAgICAgKmRlc3QgPSBTUDsKLSAgICBlbHNl Ci0gICAgICAqZGVzdCA9IChjaGFyKSB0b2NoYXIobGVuKTsKLSAgICBzdHJjcHkoZGVzdCsxLHN0 cik7CQkJLyogQ2hlY2tlZCBiZWxvdyBpbiBzZXRnZW4oKSAqLwotICAgIHJldHVybihkZXN0K2xl bisxKTsKLX0KLQotCi0vKiAgUyBFIFQgRyBFIE4gIC0tICBDb25zdHJ1Y3QgYSBnZW5lcmljIGNv bW1hbmQgICovCi0vKgotICBDYWxsIHdpdGggR2VuZXJpYyBjb21tYW5kIGNoYXJhY3RlciBmb2xs b3dlZCBieSB0aHJlZSBzdHJpbmcgYXJndW1lbnRzLgotICBUcmFpbGluZyBzdHJpbmdzIGFyZSBh bGxvd2VkIHRvIGJlIGVtcHR5ICgiIikuICBFYWNoIHN0cmluZyBleGNlcHQgdGhlIGxhc3QKLSAg bm9uLWVtcHR5IHN0cmluZyBtdXN0IGJlIGxlc3MgdGhhbiA5NSBjaGFyYWN0ZXJzIGxvbmcuICBU aGUgZmluYWwgbm9uZW1wdHkKLSAgc3RyaW5nIGlzIGFsbG93ZWQgdG8gYmUgbG9uZ2VyLgotKi8K LUNIQVIKLSNpZmRlZiBDS19BTlNJQwotc2V0Z2VuKGNoYXIgdHlwZSwgY2hhciAqIGFyZzEsIGNo YXIgKiBhcmcyLCBjaGFyICogYXJnMykKLSNlbHNlCi1zZXRnZW4odHlwZSxhcmcxLGFyZzIsYXJn MykgY2hhciB0eXBlLCAqYXJnMSwgKmFyZzIsICphcmczOwotI2VuZGlmIC8qIENLX0FOU0lDICov Ci0vKiBzZXRnZW4gKi8gewotICAgIGNoYXIgKnVwc3RyLCAqY3A7Ci0jaWZkZWYgRFlOQU1JQwot ICAgIGlmICghY21kc3RyKQotICAgICAgaWYgKCEoY21kc3RyID0gbWFsbG9jKE1BWFNQICsgMSkp KQotICAgICAgICBmYXRhbCgic2V0Z2VuOiBjYW4ndCBhbGxvY2F0ZSBtZW1vcnkiKTsKLSNlbmRp ZiAvKiBEWU5BTUlDICovCi0KLSAgICBjcCA9IGNtZHN0cjsKLSAgICAqY3ArKyA9IHR5cGU7Ci0g ICAgKmNwID0gTlVMOwotICAgIGlmICghYXJnMSkgYXJnMSA9ICIiOwotICAgIGlmICghYXJnMikg YXJnMiA9ICIiOwotICAgIGlmICghYXJnMykgYXJnMyA9ICIiOwotICAgIGlmICgoKGludClzdHJs ZW4oYXJnMSkrKGludClzdHJsZW4oYXJnMikrKGludClzdHJsZW4oYXJnMykrNCkgPCBNQVhTUCkg ewotCWlmICgqYXJnMSAhPSBOVUwpIHsKLQkgICAgdXBzdHIgPSBibGRsZW4oYXJnMSxjcCk7Ci0J ICAgIGlmICgqYXJnMiAhPSBOVUwpIHsKLQkJdXBzdHIgPSBibGRsZW4oYXJnMix1cHN0cik7Ci0J CWlmICgqYXJnMyAhPSBOVUwpIGJsZGxlbihhcmczLHVwc3RyKTsKLQkgICAgfQotCX0KLQljbWFy ZyA9IGNtZHN0cjsKLQlkZWJ1ZyhGMTEwLCJzZXRnZW4iLGNtYXJnLDApOwotCXJldHVybignZycp OwotICAgIH0KLSAgICByZXR1cm4oJ0UnKTsKLX0KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lm bmRlZiBOT01TRU5ECi1zdGF0aWMgY2hhciAqbWdidWZwID0gTlVMTDsKLQotLyogIEYgTiBQIEEg UiBTIEUgIC0tICAqLwotCi0vKgotICBBcmd1bWVudCBpcyBhIGNoYXJhY3RlciBzdHJpbmcgY29u dGFpbmluZyBvbmUgb3IgbW9yZSBmaWxlc3BlY3MuCi0gIFRoaXMgZnVuY3Rpb24gYnJlYWtzIHRo ZSBzdHJpbmcgYXBhcnQgaW50byBhbiBhcnJheSBvZiBwb2ludGVycywgb25lCi0gIHRvIGVhY2gg ZmlsZXNwZWMsIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgZmlsZXNwZWNzLiAgVXNlZCBieSBz ZXJ2ZXIKLSAgd2hlbiBpdCByZWNlaXZlcyBhIEdFVCBjb21tYW5kIHRvIGFsbG93IGl0IHRvIHBy b2Nlc3MgbXVsdGlwbGUgZmlsZQotICBzcGVjaWZpY2F0aW9ucyBpbiBvbmUgdHJhbnNhY3Rpb24u ICBTZXRzIGNtbGlzdCB0byBwb2ludCB0byBhIGxpc3Qgb2YKLSAgZmlsZSBwb2ludGVycywgZXhh Y3RseSBhcyBpZiB0aGV5IHdlcmUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KLQotICBUaGlzIHZl cnNpb24gb2YgZm5wYXJzZSB0cmVhdHMgc3BhY2VzIGFzIGZpbGVuYW1lIHNlcGFyYXRvcnMuICBJ ZiB5b3VyCi0gIG9wZXJhdGluZyBzeXN0ZW0gYWxsb3dzIHNwYWNlcyBpbiBmaWxlbmFtZXMsIHlv dSdsbCBuZWVkIGEgZGlmZmVyZW50Ci0gIHNlcGFyYXRvci4KLQotICBUaGlzIHZlcnNpb24gb2Yg Zm5wYXJzZSBtYWxsb2NzIGEgc3RyaW5nIGJ1ZmZlciB0byBjb250YWluIHRoZSBuYW1lcy4gIEl0 Ci0gIGNhbm5vdCBhc3N1bWUgdGhhdCB0aGUgc3RyaW5nIHRoYXQgaXMgcG9pbnRlZCB0byBieSB0 aGUgYXJndW1lbnQgaXMgc2FmZS4KLSovCi1pbnQKLWZucGFyc2Uoc3RyaW5nKSBjaGFyICpzdHJp bmc7IHsKLSAgICBjaGFyICpwLCAqcywgKnE7Ci0gICAgaW50IHIgPSAwLCB4OyAgICAgICAgICAg ICAgICAgICAgICAgLyogUmV0dXJuIGNvZGUgKi8KLSNpZmRlZiBSRUNVUlNJVkUKLSAgICBkZWJ1 ZyhGMTExLCJmbnBhcnNlIixzdHJpbmcscmVjdXJzaXZlKTsKLSNlbmRpZiAvKiBSRUNVUlNJVkUg Ki8KLQotICAgIGlmIChtZ2J1ZnApIGZyZWUobWdidWZwKTsgICAgICAgICAgIC8qIEZyZWUgdGhp cyBmcm9tIGxhc3QgdGltZS4gKi8KLSAgICBtZ2J1ZnAgPSBtYWxsb2MoKGludClzdHJsZW4oc3Ry aW5nKSsyKTsKLSAgICBpZiAoIW1nYnVmcCkgewotICAgICAgICBkZWJ1ZyhGMTAwLCJmbnBhcnNl IG1hbGxvYyBlcnJvciIsIiIsMCk7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci0jaWZuZGVm IE5PSUNQCi0jaWZuZGVmIE5PU1BMCi0gICAgY2tzdHJuY3B5KGZzcGVjLHN0cmluZyxmc3BlY2xl bik7ICAgLyogTWFrZSBjb3B5IGZvciBcdihmaWxlc3BlYykgKi8KLSNlbmRpZiAvKiBOT1NQTCAq LwotI2VuZGlmIC8qIE5PSUNQICovCi0gICAgcyA9IHN0cmluZzsgICAgICAgICAgICAgICAgICAg ICAgICAgLyogSW5wdXQgc3RyaW5nICovCi0gICAgcCA9IHEgPSBtZ2J1ZnA7ICAgICAgICAgICAg ICAgICAgICAgLyogUG9pbnQgdG8gdGhlIGNvcHkgKi8KLSAgICByID0gMDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIG91ciByZXR1cm4gY29kZSAqLwotICAgIHdo aWxlICgqcyA9PSBTUCB8fCAqcyA9PSBIVCkgICAgICAgIC8qIFNraXAgbGVhZGluZyBzcGFjZXMg YW5kIHRhYnMgKi8KLSAgICAgIHMrKzsKLSAgICBmb3IgKHggPSBzdHJsZW4ocyk7ICAgICAgICAg ICAgICAgICAvKiBTdHJpcCB0cmFpbGluZyBzcGFjZXMgKi8KLSAgICAgICAgICh4ID4gMSkgJiYg KHNbeC0xXSA9PSBTUCB8fCBzW3gtMV0gPT0gSFQpOwotICAgICAgICAgeC0tKQotICAgICAgc1t4 LTFdID0gTlVMOwotICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExv b3AgdGhyb3VnaCByZXN0IG9mIHN0cmluZyAqLwotICAgICAgICBpZiAoKnMgPT0gQ01EUSkgeyAg ICAgICAgICAgICAgIC8qIEJhY2tzbGFzaCAocXVvdGUgY2hhcmFjdGVyKT8gKi8KLSAgICAgICAg ICAgIGlmICgoeCA9IHh4ZXNjKCZzKSkgPiAtMSkgeyAvKiBHbyBpbnRlcnByZXQgaXQuICovCi0g ICAgICAgICAgICAgICAgKnErKyA9IChjaGFyKSB4OyAgICAgICAgLyogTnVtZXJpYyBiYWNrc2xh c2ggY29kZSwgb2sgKi8KLSAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAv KiBKdXN0IGxldCBpdCBxdW90ZSBuZXh0IGNoYXIgKi8KLSAgICAgICAgICAgICAgICBzKys7ICAg ICAgICAgICAgICAgICAgICAvKiBnZXQgcGFzdCB0aGUgYmFja3NsYXNoICovCi0gICAgICAgICAg ICAgICAgKnErKyA9ICpzKys7ICAgICAgICAgICAgLyogZGVwb3NpdCBuZXh0IGNoYXIgKi8KLSAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9IGVsc2UgaWYgKCpz ID09IFNQIHx8ICpzID09IE5VTCkgeyAvKiBVbnF1b3RlZCBzcGFjZSBvciBOVUw/ICovCi0gICAg ICAgICAgICAqcSsrID0gTlVMOyAgICAgICAgICAgICAgICAgLyogRW5kIG9mIG91dHB1dCBmaWxl bmFtZS4gKi8KLSAgICAgICAgICAgIG1zZmlsZXNbcl0gPSBwOyAgICAgICAgICAgICAvKiBBZGQg dGhpcyBmaWxlbmFtZSB0byB0aGUgbGlzdCAqLwotICAgICAgICAgICAgZGVidWcoRjExMSwiZm5w YXJzZSIsbXNmaWxlc1tyXSxyKTsKLSAgICAgICAgICAgIHIrKzsgICAgICAgICAgICAgICAgICAg ICAgICAvKiBDb3VudCBpdCAqLwotICAgICAgICAgICAgaWYgKCpzID09IE5VTCkgYnJlYWs7ICAg ICAgIC8qIEVuZCBvZiBzdHJpbmc/ICovCi0gICAgICAgICAgICB3aGlsZSAoKnMgPT0gU1ApIHMr KzsgICAgICAgLyogU2tpcCByZXBlYXRlZCBzcGFjZXMgKi8KLSAgICAgICAgICAgIHAgPSBxOyAg ICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCBvZiBuZXh0IG5hbWUgKi8KLSAgICAgICAgICAg IGNvbnRpbnVlOwotICAgICAgICB9IGVsc2UgKnErKyA9ICpzOyAgICAgICAgICAgICAgIC8qIE90 aGVyd2lzZSBjb3B5IHRoZSBjaGFyYWN0ZXIgKi8KLSAgICAgICAgcysrOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBOZXh0IGlucHV0IGNoYXJhY3RlciAqLwotICAgIH0KLSAgICBkZWJ1 ZyhGMTAxLCJmbnBhcnNlIHIiLCIiLHIpOwotICAgIG1zZmlsZXNbcl0gPSAiIjsgICAgICAgICAg ICAgICAgICAgIC8qIFB1dCBlbXB0eSBzdHJpbmcgYXQgZW5kIG9mIGxpc3QgKi8KLSAgICBjbWxp c3QgPSBtc2ZpbGVzOwotICAgIHJldHVybihyKTsKLX0KLSNlbmRpZiAvKiBOT01TRU5EICovCi0K LWNoYXIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkYmNocigpIGZvciBE RUJVRyBTRVNTSU9OICovCi1kYmNocihjKSBpbnQgYzsgewotICAgIHN0YXRpYyBjaGFyIHNbOF07 Ci0gICAgY2hhciAqY3AgPSBzOwotCi0gICAgYyAmPSAweGZmOwotICAgIGlmIChjICYgMHg4MCkg eyAgICAgICAgICAgICAgICAgICAgIC8qIDh0aCBiaXQgb24gKi8KLSAgICAgICAgKmNwKysgPSAn fic7Ci0gICAgICAgIGMgJj0gMHg3ZjsKLSAgICB9Ci0gICAgaWYgKGMgPCBTUCkgeyAgICAgICAg ICAgICAgICAgICAgICAgLyogQ29udHJvbCBjaGFyYWN0ZXIgKi8KLSAgICAgICAgKmNwKysgPSAn Xic7Ci0gICAgICAgICpjcCsrID0gKGNoYXIpIGN0bChjKTsKLSAgICB9IGVsc2UgaWYgKGMgPT0g REVMKSB7Ci0gICAgICAgICpjcCsrID0gJ14nOwotICAgICAgICAqY3ArKyA9ICc/JzsKLSAgICB9 IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcmludGluZyBjaGFyYWN0ZXIg Ki8KLSAgICAgICAgKmNwKysgPSAoY2hhcikgYzsKLSAgICB9Ci0gICAgKmNwID0gJ1wwJzsgICAg ICAgICAgICAgICAgICAgICAgICAgLyogVGVybWluYXRlIHN0cmluZyAqLwotICAgIGNwID0gczsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBwb2ludGVyIHRvIGl0ICovCi0g ICAgcmV0dXJuKGNwKTsKLX0KLQotLyogIEMgSyBIIE8gUyBUICAtLSAgR2V0IG5hbWUgb2YgbG9j YWwgaG9zdCAod2hlcmUgQy1LZXJtaXQgaXMgcnVubmluZykgICovCi0KLS8qCi0gIENhbGwgd2l0 aCBwb2ludGVyIHRvIGJ1ZmZlciB0byBwdXQgaG9zdG5hbWUgaW4sIGFuZCBsZW5ndGggb2YgYnVm ZmVyLgotICBDb3BpZXMgaG9zdG5hbWUgaW50byBidWZmZXIgb24gc3VjY2VzcywgcHV0cyBudWxs IHN0cmluZyBpbiBidWZmZXIgb24KLSAgZmFpbHVyZS4KLSovCi0jaWZkZWYgQlNENDQKLSNkZWZp bmUgQlNENAotI3VuZGVmIEFUVFNWCi0jZW5kaWYgLyogQlNENDQgKi8KLQotI2lmZGVmIFNWT1JQ T1NJWAotI2lmbmRlZiBCU0Q0NAotI2lmbmRlZiBhcG9sbG8KLSNpbmNsdWRlIDxzeXMvdXRzbmFt ZS5oPgotI2VuZGlmIC8qIGFwb2xsbyAqLwotI2VuZGlmIC8qIEJTRDQ0ICovCi0jZWxzZQotI2lm ZGVmIEJFTExWMTAKLSNpbmNsdWRlIDx1dHNuYW1lLmg+Ci0jZW5kaWYgLyogQkVMTFYxMCAqLwot I2VuZGlmIC8qIFNWT1JQT1NJWCovCi0KLSNpZmRlZiBDS1NZU0xPRwotZXh0ZXJuIGNoYXIgdWlk YnVmW10sICogY2xpZW50aG9zdDsKLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotCi1WT0lECi1ja2hv c3QodnZidWYsdnZsZW4pIGNoYXIgKiB2dmJ1ZjsgaW50IHZ2bGVuOyB7Ci0KLSNpZm5kZWYgTk9Q VVNICi0gICAgZXh0ZXJuIGludCBub3B1c2g7Ci0jaWZuZGVmIE5PU0VSVkVSCi0gICAgZXh0ZXJu IGludCBlbl9ob3M7Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLSNlbmRpZiAvKiBOT1BVU0ggKi8K LQotI2lmZGVmIHBkcDExCi0gICAgKnZ2YnVmID0gTlVMOwotI2Vsc2UgIC8qIEV2ZXJ5dGhpbmcg ZWxzZSAtIHJlc3Qgb2YgdGhpcyByb3V0aW5lICovCi0KLSAgICBjaGFyICpnOwotICAgIGludCBo YXZlZnVsbCA9IDA7Ci0jaWZkZWYgVk1TCi0gICAgaW50IHg7Ci0jZW5kaWYgLyogVk1TICovCi0K LSNpZmRlZiBTVk9SUE9TSVgKLSNpZm5kZWYgQlNENDQKLSNpZm5kZWYgXzM4NkJTRAotI2lmbmRl ZiBBUE9MTE9TUjEwCi0gICAgc3RydWN0IHV0c25hbWUgaG5hbWU7Ci0jZW5kaWYgLyogQVBPTExP U1IxMCAqLwotI2VuZGlmIC8qIF8zODZCU0QgKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwotI2VuZGlm IC8qIFNWT1JQT1NJWCAqLwotI2lmZGVmIGRhdGFnZW5lcmFsCi0gICAgaW50IGFjMCA9IChjaGFy ICopIHZ2YnVmLCBhYzEgPSAtMSwgYWMyID0gMDsKLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwot Ci0jaWZuZGVmIE5PUFVTSAotICAgIGlmIChnZXRlbnYoIkNLX05PUFVTSCIpKSB7ICAgICAgICAg IC8qIE5vIHNoZWxsIGFjY2VzcyBhbGxvd2VkICovCi0gICAgICAgIG5vcHVzaCA9IDE7ICAgICAg ICAgICAgICAgICAgICAgLyogb24gdGhpcyBob3N0Li4uICovCi0jaWZuZGVmIE5PU0VSVkVSCi0g ICAgICAgIGVuX2hvcyA9IDA7Ci0jZW5kaWYgLyogTk9TRVJWRVIgKi8KLSAgICB9Ci0jZW5kaWYg LyogTk9QVVNIICovCi0KLSAgICAqdnZidWYgPSBOVUw7ICAgICAgICAgICAgICAgICAgICAgICAv KiBIb3cgbGV0J3MgZ2V0IG91ciBob3N0IG5hbWUgLi4uICovCi0KLSNpZm5kZWYgQkVMTFYxMCAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBEb2VzIG5vdCBoYXZlIGdldGhvc3RuYW1lKCkgKi8K LSNpZm5kZWYgT1hPUwotI2lmZGVmIFNWT1JQT1NJWAotI2lmZGVmIEFQT0xMT1NSMTAKLSAgICBj a3N0cm5jcHkodnZidWYsIkFwb2xsbyIsdnZsZW4pOwotI2Vsc2UKLSNpZmRlZiBCU0Q0NAotICAg IGlmIChnZXRob3N0bmFtZSh2dmJ1Zix2dmxlbikgPCAwKQotICAgICAgKnZ2YnVmID0gTlVMOwot I2Vsc2UKLSNpZmRlZiBfMzg2QlNECi0gICAgaWYgKGdldGhvc3RuYW1lKHZ2YnVmLHZ2bGVuKSA8 IDApICp2dmJ1ZiA9IE5VTDsKLSNlbHNlCi0jaWZkZWYgUU5YCi0jaWZkZWYgVENQU09DS0VUCi0g ICAgaWYgKGdldGhvc3RuYW1lKHZ2YnVmLHZ2bGVuKSA8IDApICp2dmJ1ZiA9IE5VTDsKLSNlbHNl Ci0gICAgaWYgKHVuYW1lKCZobmFtZSkgPiAtMSkgY2tzdHJuY3B5KHZ2YnVmLGhuYW1lLm5vZGVu YW1lLHZ2bGVuKTsKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNlbHNlIC8qIFNWT1JQT1NJWCBi dXQgbm90IF8zODZCU0Qgb3IgQlNENDQgKi8KLSNpZmRlZiBfX2lhNjRfXwotICAgIGlmICh1bmFt ZSgmaG5hbWUpID4gLTEpIGNrc3RybmNweSh2dmJ1ZixobmFtZS5ub2RlbmFtZSx2dmxlbik7Ci0j ZWxzZQotICAgIGlmICh1bmFtZSgmaG5hbWUpID4gLTEpIHsKLQljaGFyICogcDsKLQlwID0gaG5h bWUubm9kZW5hbWU7Ci0jaWZkZWYgVENQU09DS0VUCi0jaWZuZGVmIE5PQ0tHRVRGUUhPU1QKLQlp ZiAoIWNrc3RyY2hyKHAsJy4nKSkKLQkgIHAgPSAoY2hhciAqKWNrZ2V0ZnFob3N0bmFtZShwKTsK LSNlbmRpZiAvKiBOT0NLR0VURlFIT1NUICovCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0JaWYg KCFwKSBwID0gIiI7Ci0JaWYgKCEqcCkgcCA9ICIodW5rbm93bikiOwotCWNrc3RybmNweSh2dmJ1 ZixwLHZ2bGVuKTsKLSAgICB9Ci0jZW5kaWYgLyogX19pYTY0X18gKi8KLSNlbmRpZiAvKiBRTlgg Ki8KLSNlbmRpZiAvKiBfMzg2QlNEICovCi0jZW5kaWYgLyogQlNENDQgKi8KLSNlbmRpZiAvKiBB UE9MTE9TUjEwICovCi0jZWxzZSAvKiAhU1ZPUlBPU0lYICovCi0jaWZkZWYgQlNENAotICAgIGlm IChnZXRob3N0bmFtZSh2dmJ1Zix2dmxlbikgPCAwKSAqdnZidWYgPSBOVUw7Ci0jZWxzZSAvKiAh QlNENCAqLwotI2lmZGVmIFZNUwotICAgIGcgPSBnZXRlbnYoIlNZUyROT0RFIik7Ci0gICAgaWYg KGcpIGNrc3RybmNweSh2dmJ1ZixnLHZ2bGVuKTsKLSAgICB4ID0gKGludClzdHJsZW4odnZidWYp OwotICAgIGlmICh4ID4gMSAmJiB2dmJ1Zlt4LTFdID09ICc6JyAmJiB2dmJ1Zlt4LTJdID09ICc6 JykgdnZidWZbeC0yXSA9IE5VTDsKLSNlbHNlCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICBpZiAo c3lzKCRITkFNRSwmYWMwLCZhYzEsJmFjMikgPT0gMCkgLyogc3VjY2Vzc2Z1bCAqLwotICAgICAg ICB2dmxlbiA9IGFjMiArIDE7ICAgICAgICAgICAgICAgIC8qIGVuaCAtIGhhdmUgdG8gYWRkIG9u ZSAqLwotI2Vsc2UKLSNpZmRlZiBPUzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBP Uy8yICovCi0gICAgZyA9IG9zMl9nZXRob3N0bmFtZSgpOwotICAgIGlmIChnKSBja3N0cm5jcHko dnZidWYsZyx2dmxlbik7Ci0jZWxzZSAvKiBPUzIgKi8KLSNpZmRlZiBPU0sKLSNpZmRlZiBUQ1BT T0NLRVQKLSAgICAgICAgaWYgKGdldGhvc3RuYW1lKHZ2YnVmLCB2dmxlbikgPCAwKSAqdnZidWYg PSBOVUw7Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0jZW5kaWYgLyogT1NLICovCi0jZW5kaWYg LyogT1MyICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNl bmRpZiAvKiBCU0Q0ICovCi0jZW5kaWYgLyogU1ZPUlBPU0lYICovCi0jZWxzZSAvKiBPWE9TICov Ci0gICAgLyogSWYgVENQL0lQIGlzIG5vdCBpbnN0YWxsZWQsIGdldGhvc3RuYW1lKCkgZmFpbHMs IHVzZSB1bmFtZSgpICovCi0gICAgaWYgKGdldGhvc3RuYW1lKHZ2YnVmLHZ2bGVuKSA8IDApIHsK LSAgICAgICAgaWYgKHVuYW1lKCZobmFtZSkgPiAtMSkKLSAgICAgICAgICAgIGNrc3RybmNweSh2 dmJ1ZixobmFtZS5ub2RlbmFtZSx2dmxlbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICp2 dmJ1ZiA9IE5VTDsKLSAgICB9Ci0jZW5kaWYgLyogT1hPUyAqLwotI2VuZGlmIC8qIEJFTExWMTAg Ki8KLSAgICBpZiAoKnZ2YnVmID09IE5VTCkgeyAgICAgICAgICAgICAgICAvKiBJZiBpdCdzIHN0 aWxsIGVtcHR5ICovCi0gICAgICAgIGcgPSBnZXRlbnYoIkhPU1QiKTsgICAgICAgICAgICAgLyog dHJ5IHRoaXMgKi8KLSAgICAgICAgaWYgKGcpIGNrc3RybmNweSh2dmJ1ZixnLHZ2bGVuKTsKLSAg ICB9Ci0gICAgdnZidWZbdnZsZW4tMV0gPSBOVUw7ICAgICAgICAgICAgICAgLyogTWFrZSBzdXJl IHJlc3VsdCBpcyB0ZXJtaW5hdGVkLiAqLwotI2VuZGlmIC8qIHBkcDExICovCi19Ci0jaWZkZWYg QlNENDQKLSN1bmRlZiBCU0Q0Ci0jZGVmaW5lIEFUVFNWCi0jZW5kaWYgLyogQlNENDQgKi8KLQot LyoKLSAgQSBTIEsgTSBPIFIgRSAgLS0gIFBvb3IgcGVyc29uJ3MgIm1vcmUiLgotICBSZXR1cm5z IDAgaWYgbm8gbW9yZSwgMSBpZiBtb3JlIHdhbnRlZC4KLSovCi1pbnQKLWFza21vcmUoKSB7Ci0g ICAgY2hhciBjOwotICAgIGludCBydiwgY3g7Ci0jaWZkZWYgSUtTRAotICAgIGV4dGVybiBpbnQg dGltZWxpbWl0OwotI2VuZGlmIC8qIElLU0QgKi8KLSNpZmRlZiBJS1NEQ09ORgotICAgIGV4dGVy biBpbnQgaWtzZGNmOwotI2VuZGlmIC8qIElLU0RDT05GICovCi0jaWZkZWYgQ0tfQVBDCi0gICAg ZXh0ZXJuIGludCBhcGNzdGF0dXMsIGFwY2FjdGl2ZTsKLSNlbmRpZiAvKiBDS19BUEMgKi8KLQot I2lmZGVmIE5PSUNQCi0gICAgcmV0dXJuKDEpOwotI2Vsc2UKLSAgICBpZiAoIXhhc2ttb3JlKQot ICAgICAgcmV0dXJuKDEpOwotI2lmZGVmIElLU0RDT05GCi0gICAgaWYgKGluc2VydmVyICYmICFp a3NkY2YpCi0gICAgICByZXR1cm4oMSk7Ci0jZW5kaWYgLyogSUtTRENPTkYgKi8KLSNpZmRlZiBD S19BUEMKLSAgICBpZiAoYXBjYWN0aXZlID09IEFQQ19MT0NBTCB8fAotICAgICAgICAoYXBjYWN0 aXZlID09IEFQQ19SRU1PVEUgJiYgKGFwY3N0YXR1cyAmIEFQQ19OT0lOUCkpKQotICAgICAgICBy ZXR1cm4oMSk7Ci0jZW5kaWYgLyogQ0tfQVBDICovCi0jaWZkZWYgVk1TCi0gICAgaWYgKGJhdGNo KQotICAgICAgcmV0dXJuKDEpOwotI2Vsc2UKLSNpZmRlZiBVTklYCi0gICAgaWYgKGJhY2tncmQp Ci0gICAgICByZXR1cm4oMSk7Ci0jZW5kaWYgLyogVU5JWCAqLwotI2VuZGlmIC8qIFZNUyAqLwot Ci0jaWZuZGVmIFZNUwotICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7ICAgICAgICAgICAgICAgIC8q IEZvcmNlIENCUkVBSyBtb2RlLiAqLwotI2VuZGlmIC8qIFZNUyAqLwotCi0gICAgcnYgPSAtMTsK LSAgICB3aGlsZSAocnYgPCAwKSB7Ci0jaWZuZGVmIE9TMgotICAgICAgICBwcmludGYoIm1vcmU/ ICIpOwotI2lmZGVmIFVOSVgKLSNpZmRlZiBOT1NFVEJVRgotICAgICAgICBmZmx1c2goc3Rkb3V0 KTsKLSNlbmRpZiAvKiBOT1NFVEJVRiAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSNlbHNlCi0gICAg ICAgIHByaW50ZigibW9yZT8gIik7Ci0gICAgICAgIGZmbHVzaChzdGRvdXQpOwotI2VuZGlmIC8q IE9TMiAqLwotCi0jaWZkZWYgSUtTRAotICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsKLSAgICAgICAg ICAgIGN4ID0gY21kZ2V0Yyh0aW1lbGltaXQpOwotICAgICAgICAgICAgaWYgKGN4IDwgLTEgJiYg dGltZWxpbWl0KSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJcbj9JS1MgaWRsZSB0aW1lb3V0 IC0gR29vZGJ5ZS5cbiIpOwotICAgICAgICAgICAgICAgIGRvZXhpdChHT09EX0VYSVQsMCk7Ci0g ICAgICAgICAgICB9IGVsc2UgaWYgKGN4ID09IC0xKSB7CS8qIENvbm5lY3Rpb24gbG9zdCAqLwot ICAgICAgICAgICAgICAgIGRvZXhpdChCQURfRVhJVCwwKTsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIGMgPSAoY2hhcikgY3g7Ci0gICAgICAgIH0gZWxzZSB7Ci0jZW5kaWYgLyogSUtTRCAq LwotI2lmZGVmIFZNUwotCSAgICBjb25iaW4oKGNoYXIpZXNjYXBlKTsJLyogUHJvdGVjdCBhZ2Fp bnN0IEN0cmwtWiAqLwotCSAgICBjeCA9IGNvbmluYygwKTsKLQkgICAgY29uY2IoKGNoYXIpZXNj YXBlKTsKLSNlbHNlCi0JICAgIGN4ID0gY21kZ2V0YygwKTsKLSNlbmRpZiAvKiBWTVMgKi8KLQkg ICAgZGVidWcoRjEwMSwiYXNrbW9yZSBjbWRnZXRjIiwiIixjeCk7Ci0JICAgIGlmIChjeCA9PSBF T0YpIHsKLQkJZGVidWcoRjEwMCwiYXNrbW9yZSBFT0YiLCIiLDApOwotI2lmZGVmIFZNUwotCQlj ID0gJ1wwMzInOwotI2Vsc2UKLQkJYyA9ICduJzsKLSNlbmRpZiAvKiBWTVMgKi8KLQkgICAgfSBl bHNlIHsKLQkJYyA9IChjaGFyKWN4OwotCSAgICB9Ci0JICAgIGRlYnVnKEYxMDEsImFza21vcmUg YyIsIiIsYyk7Ci0KLSNpZmRlZiBJS1NECi0JfQotI2VuZGlmIC8qIElLU0QgKi8KLSAgICAgICAg c3dpdGNoIChjKSB7Ci0gICAgICAgICAgLyogWWVzICovCi0JICBjYXNlICdwJzogY2FzZSAnUCc6 IGNhc2UgJ2cnOiBjYXNlICdHJzogLyogUHJvY2VlZCBvciBHbyAqLwotCSAgICB4YXNrbW9yZSA9 IDA7Ci0JICAgIC8qIGZhbGwgdGhydSBvbiBwdXJwb3NlICovCi0KLSAgICAgICAgICBjYXNlIFNQ OiBjYXNlICd5JzogY2FzZSAnWSc6IGNhc2UgMDEyOiAgY2FzZSAwMTU6Ci0jaWZkZWYgT1NLCi0g ICAgICAgICAgICB3cml0ZSgxLCAiXDAxNSAgICAgIFwwMTUiLCBzaXplb2YgIlwwMTUgICAgICBc MDE1IiAtIDEpOwotI2Vsc2UKLSAgICAgICAgICAgIHByaW50ZigiXDAxNSAgICAgIFwwMTUiKTsK LSNlbmRpZiAvKiBPU0sgKi8KLSAgICAgICAgICAgIHJ2ID0gMTsKLSAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgIC8qIE5vICovCi0gICAgICAgICAgY2FzZSAnbic6IGNhc2UgJ04nOiBjYXNl ICdxJzogY2FzZSAnUSc6Ci0jaWZkZWYgT1NLCi0gICAgICAgICAgICBwcmludGYoIlxuIik7Ci0j ZWxzZQotICAgICAgICAgICAgcHJpbnRmKCJcMDE1XDAxMiIpOwotI2VuZGlmIC8qIE9TSyAqLwot ICAgICAgICAgICAgcnYgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0JICBjYXNlICdcMDAzJzoK LQkgIGNhc2UgJ1wwMDQnOgotCSAgY2FzZSAnXDAzMic6Ci0jaWZkZWYgT1NLCi0JICAgIHByaW50 ZigiXiVjLi4uXG4iLCAoYyArIDAxMDApKTsKLSNlbHNlCi0JICAgIHByaW50ZigiXiVjLi4uXDAx NVwwMTIiLCAoYyArIDAxMDApKTsKLSNlbmRpZiAvKiBPU0sgKi8KLQkgICAgcnYgPSAwOwotCSAg ICBicmVhazsKLSAgICAgICAgICAvKiBJbnZhbGlkIGFuc3dlciAqLwotICAgICAgICAgIGRlZmF1 bHQ6Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJhc2ttb3JlIiwiaW52YWxpZCBhbnN3ZXIiLGMp OwotICAgICAgICAgICAgcHJpbnRmKCJZIG9yIHNwYWNlLWJhciBmb3IgeWVzLCBOIGZvciBubywg RyB0byBzaG93IHRoZSByZXN0XG4iKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9 Ci0jaWZkZWYgT1MyCi0gICAgICAgIHByaW50ZigiXHIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcciIpOwotICAgICAgICBmZmx1c2goc3Rkb3V0KTsK LSNlbmRpZiAvKiBPUzIgKi8KLSAgICB9Ci0gICAgcmV0dXJuKHJ2KTsKLSNlbmRpZiAvKiBOT0lD UCAqLwotfQotCi0vKiAgVCBSIEEgUCAgLS0gIFRlcm1pbmFsIGludGVycnVwdCBoYW5kbGVyICov Ci0KLVNJR1RZUAotI2lmZGVmIENLX0FOU0lDCi10cmFwKGludCBzaWcpCi0jZWxzZQotdHJhcChz aWcpIGludCBzaWc7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHRyYXAgKi8gewotICAgIGV4 dGVybiBpbnQgYl9zYXZlLCBmX3NhdmU7Ci0jaWZuZGVmIE5PSUNQCi0gICAgZXh0ZXJuIGludCB0 aW1lbGltaXQ7Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLSNpZmRlZiBPUzIKLSAgICBleHRlcm4gdW5z aWduZWQgbG9uZyBzdGFydGZsYWdzOwotI2lmbmRlZiBOT1NFVEtFWQotICAgIGV4dGVybiBpbnQg b3MyZ2tzOwotI2VuZGlmIC8qIE5PU0VUS0VZICovCi0gICAgaW50IGk7Ci0jZW5kaWYgLyogT1My ICovCi0jaWZuZGVmIE5PU1BMCi0gICAgZXh0ZXJuIGludCBpX2FjdGl2ZSwgaW5zdGF0dXM7Ci0j ZW5kaWYgLyogTk9TUEwgKi8KLSNpZmRlZiBWTVMKLSAgICBpbnQgaTsgRklMRSAqZjsKLSNlbmRp ZiAvKiBWTVMgKi8KLSAgICBleHRlcm4gaW50IHpjaGtvZCwgemNoa2lkOwotI2lmbmRlZiBOT1NQ TAotICAgIGV4dGVybiBpbnQgdW5rbWFjcm87Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotICAgIGRl Ym9rID0gMTsKLSNpZmRlZiBOVFNJRwotICAgIGNvbm5vaSgpOwotI2VuZGlmIC8qIE5UU0lHICov Ci0jaWZkZWYgX19FTVhfXwotICAgIHNpZ25hbChTSUdJTlQsIFNJR19BQ0spOwotI2VuZGlmCi0j aWZkZWYgR0VNRE9TCi0vKiBHRU0gaXMgbm90IHJlZW50cmFudCwgbm8gaS9vIGZyb20gaW50ZXJy dXB0IGxldmVsICovCi0gICAgY2tsb25nam1wKGNtamJ1ZiwxKTsgICAgICAgICAgICAgICAgLyog SnVtcCBiYWNrIHRvIHBhcnNlciBub3chICovCi0jZW5kaWYgLyogR0VNRE9TICovCi0KLSNpZmRl ZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsKLQlkZWJ1ZyhGMTAwLCIqKioqKioqKioqKioqKioq KioqKioiLCIiLDApOwotCWlmIChzaWcgPT0gU0lHSU5UKQotCSAgZGVidWcoRjEwMSwidHJhcCBj YXVnaHQgU0lHSU5UIiwiIixzaWcpOwotCWVsc2UgCi0JICBkZWJ1ZyhGMTAxLCJ0cmFwIGNhdWdo dCBzaWduYWwiLCIiLHNpZyk7Ci0JZGVidWcoRjEwMCwiKioqKioqKioqKioqKioqKioqKioqIiwi IiwwKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotI2lmZGVmIE9TMgotICAgIGlmICgg c2lnID09IFNJR0JSRUFLICYmIChzdGFydGZsYWdzICYgMTI4KSApIHsKLSAgICAgICAgZGVidWco RjEwMSwidHJhcCBpZ25vcmluZyBTSUdCUkVBSyIsIiIsc2lnKTsKLSAgICAgICAgcmV0dXJuOwot ICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmbmRlZiBOT0lDUAotICAgIHRpbWVsaW1pdCA9 IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIEluIGNhc2UgdGltZWQgQVNLIGludGVycnVwdGVk ICovCi0jaWZuZGVmIE5PU1BMCi0gICAgdW5rbWFjcm8gPSAwOwkJCS8qIE9yIE9OX1VOS05PV05f TUFDUk8gaW50ZXJydXB0ZWQuLiAqLwotI2VuZGlmIC8qIE5PU1BMICovCi0jZW5kaWYgLyogTk9J Q1AgKi8KLSAgICB6Y2hrb2QgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPciBmaWxl IGV4cGFuc2lvbiBpbnRlcnJ1cHRlZC4uLiAqLwotICAgIHpjaGtpZCA9IDA7Ci0gICAgaW50ZXJy dXB0ZWQgPSAxOwotCi0gICAgaWYgKHdoYXQgJiBXX0NPTk5FQ1QpIHsJCS8qIEFyZSB3ZSBpbiBD T05ORUNUIG1vZGU/ICovCi0vKgotICBUaGUgSFAgd29ya3N0YXRpb24gUmVzZXQga2V5IHNlbmRz IHNvbWUga2luZCBvZiB1ZWJlci1TSUdJTlQgdGhhdCBjYW4gbm90Ci0gIGJlIFNJR19JR05vcmVk LCBzbyB3ZSB3aW5kIHVwIGhlcmUgc29tZWhvdyAoZXZlbiB0aG91Z2ggdGhpcyBpcyAqbm90KiB0 aGUKLSAgY3VycmVudCBTSUdJTlQgaGFuZGxlcikuICBKdXN0IHJldHVybi4KLSovCi0gICAgICAg IGRlYnVnKEYxMDEsInRyYXA6IFNJR0lOVCBjYXVnaHQgZHVyaW5nIENPTk5FQ1QiLCIiLHNpZyk7 Ci0gICAgICAgIFNJR1JFVFVSTjsKLSAgICB9Ci0jaWZuZGVmIE5PU1BMCi0gICAgaWYgKGlfYWN0 aXZlKSB7ICAgICAgICAgICAgICAgICAgICAgLyogSU5QVVQgY29tbWFuZCB3YXMgYWN0aXZlPyAq LwotICAgICAgICBpX2FjdGl2ZSA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIE5vdCBhbnkgbW9y ZS4uLiAqLwotICAgICAgICBpbnN0YXR1cyA9IElOUF9VSTsgICAgICAgICAgICAgIC8qIElOUFVU IHN0YXR1cyA9IFVzZXIgSW50ZXJydXB0ZWQgKi8KLSAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8K LQotI2lmbmRlZiBOT1hGRVIKLSAgICBmdHJlc2V0KCk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBSZXN0b3JlIGdsb2JhbCBwcm90b2NvbCBzZXR0aW5ncyAqLwotICAgIGJpbmFyeSA9IGJf c2F2ZTsgICAgICAgICAgICAgICAgICAgIC8qIFRoZW4gcmVzdG9yZSB0aGVzZSAqLwotICAgIGZu Y252ICA9IGZfc2F2ZTsKLSAgICBieWVfYWN0aXZlID0gMDsKLSAgICBkaXJhY3RpdmUgPSAwOwot ICAgIGNkYWN0aXZlID0gMDsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSAgICB6Y2xvc2UoWklGSUxF KTsgICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSB3ZXJlIHRyYW5zZmVycmluZyBhIGZpbGUs ICovCi0gICAgemNsb3NlKFpPRklMRSk7ICAgICAgICAgICAgICAgICAgICAgLyogY2xvc2UgaXQu ICovCi0jaWZuZGVmIE5PSUNQCi0gICAgY21kc3F1byhjbWRfcXVvdGluZyk7ICAgICAgICAgICAg ICAgLyogSWYgY29tbWFuZCBxdW90aW5nIHdhcyB0dXJuZWQgb2ZmICovCi0jaWZkZWYgQ0tMRUFS TgotICAgIHsKLQlleHRlcm4gRklMRSAqIGxlYXJuZnA7Ci0JZXh0ZXJuIGludCBsZWFybmluZzsK LQlpZiAobGVhcm5mcCkgewotCSAgICBmY2xvc2UobGVhcm5mcCk7Ci0JICAgIGxlYXJuZnAgPSBO VUxMOwotCSAgICBsZWFybmluZyA9IDA7Ci0JfQotICAgIH0KLSNlbmRpZiAvKiBDS0xFQVJOICov Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLSNpZmRlZiBDS19BUEMKLSAgICBkZWxtYWMoIl9hcGNfY29t bWFuZHMiLDEpOwotICAgIGFwY2FjdGl2ZSA9IEFQQ19JTkFDVElWRTsKLSNlbmRpZiAvKiBDS19B UEMgKi8KLQotI2lmZGVmIFZNUwotLyoKLSAgRml4IHRlcm1pbmFsLgotKi8KLSAgICBpZiAoZnRf d2luKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBjdXJzZXMgd2luZG93IG9wZW4gKi8K LSAgICAgICAgZGVidWcoRjEwMCwiXkMgdHJhcCgpIGN1cnNlcyIsIiIsMCk7Ci0gICAgICAgIHh4 c2NyZWVuKFNDUl9DVywwLDBMLCIiKTsgICAgICAgLyogQ2xvc2UgaXQgKi8KLSAgICAgICAgY29u cmVzKCk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIHRlcm1pbmFsICovCi0gICAg ICAgIGkgPSBwcmludGYoIl5DLi4uIik7ICAgICAgICAgICAgLyogRWNobyBeQyB0byBzdGFuZGFy ZCBvdXRwdXQgKi8KLSAgICB9IGVsc2UgewotICAgICAgICBjb25yZXMoKTsKLSAgICAgICAgaSA9 IHByaW50ZigiXkMuLi5cbiIpOyAgICAgICAgICAvKiBFY2hvIF5DIHRvIHN0YW5kYXJkIG91dHB1 dCAqLwotICAgIH0KLSAgICBpZiAoaSA8IDEgJiYgZmVycm9yKHN0ZG91dCkpIHsgICAgICAvKiBJ ZiB0aGVyZSB3YXMgYW4gZXJyb3IgKi8KLSAgICAgICAgZGVidWcoRjEwMCwiXkMgdHJhcCgpIGVy cm9yIiwiIiwwKTsKLSAgICAgICAgZmNsb3NlKHN0ZG91dCk7ICAgICAgICAgICAgICAgICAvKiBj bG9zZSBzdGFuZGFyZCBvdXRwdXQgKi8KLSAgICAgICAgZiA9IGZvcGVuKGRmdHR5LCAidyIpOyAg ICAgICAgICAvKiBvcGVuIHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbCAqLwotICAgICAgICBpZiAo Zikgc3Rkb3V0ID0gZjsgICAgICAgICAgICAgIC8qIGFuZCBtYWtlIGl0IHN0YW5kYXJkIG91dHB1 dCAqLwotICAgICAgICBwcmludGYoIl5DLi4uXG4iKTsgICAgICAgICAgICAgIC8qIGFuZCBlY2hv IHRoZSBeQyBhZ2Fpbi4gKi8KLSAgICB9Ci0jZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogTm90IFZNUyAqLwotI2lmZGVmIFNUUkFUVVMKLSAgICBjb25yZXMoKTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgY29uc29sZSBiYWNrIHRvIG5vcm1hbCBtb2Rl ICovCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotI2lmbmRlZiBOT1hGRVIKLSAgICBpZiAoZnRfd2lu KSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBjdXJzZXMgd2luZG93IG9wZW4sICovCi0g ICAgICAgIGRlYnVnKEYxMDAsIl5DIHRyYXAoKSBjdXJzZXMiLCIiLDApOwotICAgICAgICB4eHNj cmVlbihTQ1JfQ1csMCwwTCwiIik7CS8qIGNsb3NlIGl0LiAqLwotICAgICAgICBwcmludGYoIl5D Li4uIik7ICAgICAgICAgICAgICAgIC8qIEVjaG8gXkMgdG8gc3RhbmRhcmQgb3V0cHV0ICovCi0g ICAgfSBlbHNlIHsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSAgICAgICAgcHJpbnRmKCJeQy4uLlxu Iik7Ci0jaWZuZGVmIE5PWEZFUgotICAgIH0KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSNlbmRpZiAv KiBWTVMgKi8KLSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgIGNvbm5vaV9tdCgpOyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEtpbGwgYXN5bmNoIHRhc2sgdGhhdCBsaXN0ZW5zIHRvICovCi0gICAg dHRpbW9mZigpOwotICAgIGNvbnJlcygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRo ZSBrZXlib2FyZCAqLwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0KLSNpZm5kZWYgTk9DQ1RS QVAKLS8qICBUaGlzIGlzIHN0dXBpZCAtLSBldmVyeSB2ZXJzaW9uIHNob3VsZCBoYXZlIHR0aW1v ZmYoKS4uLiAgKi8KLSNpZmRlZiBVTklYCi0gICAgdHRpbW9mZigpOyAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogVHVybiBvZmYgYW55IHRpbWVyIGludGVycnVwdHMgKi8KLSNlbHNlCi0jaWZk ZWYgT1NLCi0gICAgdHRpbW9mZigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVHVybiBv ZmYgYW55IHRpbWVyIGludGVycnVwdHMgKi8KLSNlbHNlCi0jaWZkZWYgU1RSQVRVUwotICAgIHR0 aW1vZmYoKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIGFueSB0aW1lciBp bnRlcnJ1cHRzICovCi0jZWxzZQotI2lmZGVmIE9TMgotI2lmbmRlZiBOT1NFVEtFWQotICAgIG9z MmdrcyA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR1cm4gYmFjayBvbiBrZXljb2Rl IG1hcHBpbmcgICovCi0jZW5kaWYgLyogTk9TRVRLRVkgKi8KLSNpZm5kZWYgTk9MT0NBTAotICAg IGZvciAoaSA9IDA7IGkgPCBWTlVNOyBpKyspCi0gICAgICBWc2NyblJlc2V0UG9wdXAoaSk7Ci0j ZW5kaWYgLyogTk9MT0NBTCAqLwotI2lmZGVmIFRDUFNPQ0tFVAotI2lmZGVmIE5UCi0gICAgLyog V1NBSXNCbG9ja2luZygpIHJldHVybnMgRkFMU0UgaW4gV2luOTUgZHVyaW5nIGEgYmxvY2tpbmcg YWNjZXB0IGNhbGwgKi8KLSAgICBpZiAoIFdTQVNhZmVUb0NhbmNlbCAvKiAmJiBXU0FJc0Jsb2Nr aW5nKCkgKi8gKSB7Ci0gICAgICAgIFdTQUNhbmNlbEJsb2NraW5nQ2FsbCgpOwotICAgIH0KLSNl bmRpZiAvKiBOVCAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2lmZGVmIENLX05FVEJJT1MK LSAgICBOQ0JDYW5jZWxPdXRzdGFuZGluZygpOwotI2VuZGlmIC8qIENLX05FVEJJT1MgKi8KLSAg ICB0dGltb2ZmKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUdXJuIG9mZiBhbnkgdGlt ZXIgaW50ZXJydXB0cyAqLwotI2Vsc2UKLSNpZmRlZiBWTVMKLSAgICB0dGltb2ZmKCk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBUdXJuIG9mZiBhbnkgdGltZXIgaW50ZXJydXB0cyAqLwot I2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFNUUkFUVVMgKi8K LSNlbmRpZiAvKiBPU0sgKi8KLSNlbmRpZiAvKiBVTklYICovCi0KLSNpZmRlZiBORVRQVFkKLSAg ICAvKiBDbGVhbiB1cCBDdHJsLUMgb3V0IG9mIFJFRElSRUNUIG9yIGV4dGVybmFsIHByb3RvY29s ICovCi0gICAgewotCWV4dGVybiBQSURfVCBwdHlfZm9ya19waWQ7Ci0JZXh0ZXJuIGludCBwdHlf bWFzdGVyX2ZkLCBwdHlfc2xhdmVfZmQ7Ci0JaW50IHg7Ci0KLQlzaWduYWwoU0lHQ0hMRCxTSUdf SUdOKTsJLyogV2UgZG9uJ3Qgd2FudCB0aGlzIGFueSBtb3JlICovCi0KLQlkZWJ1ZyhGMTAxLCJ0 cmFwIHB0eV9tYXN0ZXJfZmQiLCIiLHB0eV9tYXN0ZXJfZmQpOwotCWlmIChwdHlfbWFzdGVyX2Zk ID4gMikgewotCSAgICB4ID0gY2xvc2UocHR5X21hc3Rlcl9mZCk7Ci0JICAgIGRlYnVnKEYxMDEs InRyYXAgcHR5X21hc3Rlcl9mZCBjbG9zZSIsIiIseCk7Ci0JfQotCXB0eV9tYXN0ZXJfZmQgPSAt MTsKLQlkZWJ1ZyhGMTAxLCJ0cmFwIHB0eV9zbGF2ZV9mZCIsIiIscHR5X3NsYXZlX2ZkKTsKLQlp ZiAocHR5X3NsYXZlX2ZkID4gMikgewotCSAgICB4ID0gY2xvc2UocHR5X3NsYXZlX2ZkKTsKLQkg ICAgZGVidWcoRjEwMSwidHJhcCBwdHlfc2xhdmVfZmQgY2xvc2UiLCIiLHgpOwotCX0KLQlwdHlf c2xhdmVfZmQgPSAtMTsKLQlkZWJ1ZyhGMTAxLCJ0cmFwIHB0eV9mb3JrX3BpZCIsIiIscHR5X2Zv cmtfcGlkKTsKLQlpZiAocHR5X2ZvcmtfcGlkID4gMCkgewotCSAgICB4ID0ga2lsbChwdHlfZm9y a19waWQsMCk7CS8qIFNlZSBpZiB0aGUgZm9yayBpcyByZWFsbHkgdGhlcmUgKi8KLQkgICAgZGVi dWcoRjExMSwidHJhcCBwdHlfZm9ya19waWQga2lsbCAwIGVycm5vIixja2l0b2EoeCksZXJybm8p OwotCSAgICBpZiAoeCA9PSAwKSB7CQkvKiBTZWVtcyB0byBiZSBhY3RpdmUgKi8KLQkJeCA9IGtp bGwocHR5X2ZvcmtfcGlkLFNJR0hVUCk7IC8qIEFzayBpdCB0byBjbGVhbiB1cCAmIGV4aXQgKi8K LQkJZGVidWcoRjEwMSwidHJhcCBwdHlfZm9ya19waWQga2lsbCBTSUdIVVAiLCIiLHgpOwotCQlt c2xlZXAoMTAwKTsKLQkJZXJybm8gPSAwOwotCQl4ID0ga2lsbChwdHlfZm9ya19waWQsMCk7IC8q IElzIGl0IHN0aWxsIHRoZXJlPyAqLwotCQlpZiAoeCA9PSAwCi0jaWZkZWYgRVNSQ0gKLQkJICAg IC8qIFRoaXMgbW9kdWxlIGlzIG5vdCBhbHdheXMgZXhwb3NlZCB0byA8ZXJybm8uaD4gKi8KLQkJ ICAgIHx8IGVycm5vICE9IEVTUkNICi0jZW5kaWYJLyogRVNSQ0ggKi8KLQkJICAgICkgewotCQkg ICAgeCA9IGtpbGwocHR5X2ZvcmtfcGlkLFNJR0tJTEwpOwotCQkgICAgZGVidWcoRjEwMSwidHJh cCBwdHlfZm9ya19waWQga2lsbCBTSUdLSUxMIiwiIix4KTsKLQkJfQotCSAgICB9Ci0JICAgIHB0 eV9mb3JrX3BpZCA9IC0xOwotCX0KLSAgICB9Ci0jZW5kaWYJLyogTkVUUFRZICovCi0KLSNpZmRl ZiBPU0sKLSAgICBzaWdtYXNrKC0xKTsKLS8qCi0gIFdlIGFyZSBpbiBhbiBpbnRlcmNlcHQgcm91 dGluZSBidXQgZG8gbm90IHBlcmZvcm0gYSBGJFJURSAoZG9uZSBpbXBsaWNpdGx5Ci0gIGJ5IHJ0 cykuICBXZSBoYXZlIHRvIGRlY3JlbWVudCB0aGUgc2lnbWFzayBhcyBGJFJURSBkb2VzLiAgV2Fy bmluZzogbG9uZ2p1bXAKLSAgb25seSByZXN0b3JlcyB0aGUgY3B1IHJlZ2lzdGVycywgTk9UIHRo ZSBmcHUgcmVnaXN0ZXJzLiAgU28gZG9uJ3QgdXNlIGZwdSBhdAotICBhbGwgb3IgYXQgbGVhc3Qg ZG9uJ3QgdXNlIGNvbW1vbiBmcHUgKGRvdWJsZSBvciBmbG9hdCkgcmVnaXN0ZXIgdmFyaWFibGVz LgotKi8KLSNlbmRpZiAvKiBPU0sgKi8KLQotI2lmZGVmIE5UU0lHCi0gICAgUG9zdEN0cmxDU2Vt KCk7Ci0jZWxzZSAvKiBOVFNJRyAqLwotICAgIGRlYnVnKEYxMDAsInRyYXAgYWJvdXQgdG8gbG9u Z2ptcCIsIiIsMCk7Ci0jaWZkZWYgTlQKLSAgICBja2xvbmdqbXAoY2tqYWRkcihjbWpidWYpLDEp OwotI2Vsc2UgLyogTlQgKi8KLSAgICBja2xvbmdqbXAoY21qYnVmLDEpOwotI2VuZGlmIC8qIE5U ICovCi0jZW5kaWYgLyogTlRTSUcgKi8KLSNlbHNlIC8qIE5PQ0NUUkFQICovCi0vKiBObyBDdHJs LUMgdHJhcCwganVzdCBleGl0LiAqLwotI2lmZGVmIENLX0NVUlNFUyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEN1cnNlcyBzdXBwb3J0PyAqLwotICAgIHh4c2NyZWVuKFNDUl9DVywwLDBMLCIi KTsgICAgICAgICAgIC8qIENsb3NlIGN1cnNlcyB3aW5kb3cgKi8KLSNlbmRpZiAvKiBDS19DVVJT RVMgKi8KLSAgICBkb2V4aXQoQkFEX0VYSVQsd2hhdCk7ICAgICAgICAgICAgICAvKiBFeGl0IHBv b3JseSAqLwotI2VuZGlmIC8qIE5PQ0NUUkFQICovCi0gICAgU0lHUkVUVVJOOwotfQotCi0KLS8q ICBDIEsgXyBUIEkgTSBFICAtLSBSZXR1cm5zIHBvaW50ZXIgdG8gY3VycmVudCB0aW1lLiAqLwot Ci1jaGFyICoKLWNrX3RpbWUoKSB7Ci0gICAgc3RhdGljIGNoYXIgdGJ1ZlsxMF07Ci0gICAgY2hh ciAqcDsKLSAgICBpbnQgeDsKLQotICAgIHp0aW1lKCZwKTsgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qICJUaHUgRmViICA4IDEyOjAwOjAwIDE5OTAiICovCi0gICAgaWYgKCFwKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogbGlrZSBhc2N0aW1lKCkhICovCi0gICAgICByZXR1cm4o IiIpOwotICAgIGlmICgqcCkgewotICAgICAgICBmb3IgKHggPSAxMTsgeCA8IDE5OyB4KyspICAg ICAgIC8qIGNvcHkgaGg6bW06c3MgKi8KLSAgICAgICAgICB0YnVmW3ggLSAxMV0gPSBwW3hdOyAg ICAgICAgICAvKiB0byB0YnVmICovCi0gICAgICAgIHRidWZbOF0gPSBOVUw7ICAgICAgICAgICAg ICAgICAgLyogdGVybWluYXRlICovCi0gICAgfQotICAgIHJldHVybih0YnVmKTsgICAgICAgICAg ICAgICAgICAgICAgIC8qIGFuZCByZXR1cm4gaXQgKi8KLX0KLQotLyogIEMgQyBfIEMgTCBFIEEg TiAgLS0gIENsZWFudXAgYWZ0ZXIgdGVybWluYWwgaW50ZXJydXB0IGhhbmRsZXIgKi8KLQotI2lm ZGVmIEdFTURPUwotaW50Ci1jY19jbGVhbigpIHsKLSAgICB6Y2xvc2UoWklGSUxFKTsgICAgICAg ICAgICAgICAgICAgICAvKiBJZiB3ZSB3ZXJlIHRyYW5zZmVycmluZyBhIGZpbGUsICovCi0gICAg emNsb3NlKFpPRklMRSk7ICAgICAgICAgICAgICAgICAgICAgLyogY2xvc2UgaXQuICovCi0gICAg cHJpbnRmKCJeQy4uLlxuIik7ICAgICAgICAgICAgICAgICAgLyogTm90IFZNUywgbm8gcHJvYmxl bS4uLiAqLwotfQotI2VuZGlmIC8qIEdFTURPUyAqLwotCi0KLS8qICBTIFQgUCBUIFIgQSBQIC0t IEhhbmRsZSBTSUdUU1RQIChzdXNwZW5kKSBzaWduYWxzICovCi0KLVNJR1RZUAotI2lmZGVmIENL X0FOU0lDCi1zdHB0cmFwKGludCBzaWcpCi0jZWxzZQotc3RwdHJhcChzaWcpIGludCBzaWc7Ci0j ZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHN0cHRyYXAgKi8gewotCi0jaWZuZGVmIE5PSkMKLSAg ICBpbnQgeDsgZXh0ZXJuIGludCBjbWZsZ3M7Ci0gICAgZGVidWcoRjEwMSwic3RwdHJhcCgpIGNh dWdodCBzaWduYWwiLCIiLHNpZyk7Ci0gICAgaWYgKCF4c3VzcGVuZCkgewotICAgICAgICBwcmlu dGYoIlxyXG5zdXNwZW5kIGRpc2FibGVkXHJcbiIpOwotI2lmbmRlZiBOT0lDUAotICAgICAgICBp ZiAod2hhdCAmIFdfQ09NTUFORCkgewkJLyogSWYgd2Ugd2VyZSBwYXJzaW5nIGNvbW1hbmRzICov Ci0gICAgICAgICAgICBwcm9tcHQoeHhzdHJpbmcpOyAgICAgICAgICAgLyogcmVpc3N1ZSB0aGUg cHJvbXB0IGFuZCBwYXJ0aWFsICovCi0gICAgICAgICAgICBpZiAoIWNtZmxncykgICAgICAgICAg ICAgICAgLyogY29tbWFuZCAoaWYgYW55KSAqLwotICAgICAgICAgICAgICBwcmludGYoIiVzIixj bWRidWYpOwotICAgICAgICB9Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLSAgICB9IGVsc2UgewotICAg ICAgICBjb25yZXMoKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IHRoZSBjb25zb2xl ICovCi0jaWZuZGVmIE9TMgotICAgICAgICAvKiBGbHVzaCBwZW5kaW5nIG91dHB1dCBmaXJzdCwg aW4gY2FzZSB3ZSBhcmUgY29udGludWVkICovCi0gICAgICAgIC8qIGluIHRoZSBiYWNrZ3JvdW5k LCB3aGljaCBjb3VsZCBtYWtlIHVzIGJsb2NrICovCi0gICAgICAgIGZmbHVzaChzdGRvdXQpOwot Ci0gICAgICAgIHggPSBwc3VzcGVuZCh4c3VzcGVuZCk7CQkvKiBUcnkgdG8gc3VzcGVuZC4gKi8K LSAgICAgICAgaWYgKHggPCAwKQotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAgIHByaW50Zigi Sm9iIGNvbnRyb2wgbm90IHN1cHBvcnRlZFxyXG4iKTsKLSAgICAgICAgY29uaW50KHRyYXAsc3Rw dHJhcCk7ICAgICAgICAgICAvKiBSZWFybSB0aGUgdHJhcC4gKi8KLSAgICAgICAgZGVidWcoRjEw MCwic3RwdHJhcCBiYWNrIGZyb20gc3VzcGVuZCIsIiIsMCk7Ci0gICAgICAgIHN3aXRjaCAod2hh dCkgewotICAgICAgICAgIGNhc2UgV19DT05ORUNUOiAgICAgICAgICAgICAgIC8qIElmIHN1c3Bl bmRlZCBkdXJpbmcgQ09OTkVDVD8gKi8KLSAgICAgICAgICAgIGNvbmJpbigoY2hhcillc2NhcGUp OyAgICAgICAvKiBwdXQgY29uc29sZSBiYWNrIGluIGJpbmFyeSBtb2RlICovCi0gICAgICAgICAg ICBkZWJ1ZyhGMTAwLCJzdHB0cmFwIFdfQ09OTkVDVCIsIiIsMCk7Ci0gICAgICAgICAgICBicmVh azsKLSNpZm5kZWYgTk9JQ1AKLSAgICAgICAgICBjYXNlIFdfQ09NTUFORDogICAgICAgICAgICAg ICAvKiBTdXNwZW5kZWQgaW4gY29tbWFuZCBtb2RlICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTAx LCJzdHB0cmFwIFdfQ09NTUFORCBwZmxhZyIsIiIscGZsYWcpOwotICAgICAgICAgICAgY29uY2Io KGNoYXIpZXNjYXBlKTsgICAgICAgIC8qIFB1dCBiYWNrIENCUkVBSyB0dHkgbW9kZSAqLwotICAg ICAgICAgICAgaWYgKHBmbGFnKSB7ICAgICAgICAgICAgICAgIC8qIElmIGNvbW1hbmQgcGFyc2lu ZyB3YXMgKi8KLSAgICAgICAgICAgICAgICBwcm9tcHQoeHhzdHJpbmcpOyAgICAgICAvKiByZWlz c3VlIHRoZSBwcm9tcHQgYW5kIHBhcnRpYWwgKi8KLSAgICAgICAgICAgICAgICBpZiAoIWNtZmxn cykgICAgICAgICAgICAvKiBjb21tYW5kIChpZiBhbnkpICovCi0gICAgICAgICAgICAgICAgICBw cmludGYoIiVzIixjbWRidWYpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0j ZW5kaWYgLyogTk9JQ1AgKi8KLSAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAg ICAvKiBBbGwgb3RoZXIgY2FzZXMuLi4gKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMDAsInN0cHRy YXAgZGVmYXVsdCIsIiIsMCk7Ci0gICAgICAgICAgICBjb25jYigoY2hhcillc2NhcGUpOyAgICAg ICAgLyogUHV0IGl0IGJhY2sgaW4gQ0JSRUFLIG1vZGUgKi8KLSAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIE5PSkMgKi8KLSAgICBTSUdSRVRVUk47Ci19Ci0K LSNpZmRlZiBUTE9HCi0jZGVmaW5lIFRCVUZMIDMwMAotCi0vKiAgVCBMIE8gRyAgLS0gIExvZyBh IHJlY29yZCBpbiB0aGUgdHJhbnNhY3Rpb24gZmlsZSAgKi8KLS8qCi0gQ2FsbCB3aXRoIGEgZm9y bWF0IGFuZCAzIGFyZ3VtZW50czogdHdvIHN0cmluZ3MgYW5kIGEgbnVtYmVyOgotICAgZiAgICAg LSBGb3JtYXQsIGEgYml0IHN0cmluZyBpbiByYW5nZSAwLTcsIGJpdCB4IGlzIG9uLCBhcmcgI3gg aXMgcHJpbnRlZC4KLSAgIHMxLHMyIC0gU3RyaW5nIGFyZ3VtZW50cyAwIGFuZCAxLgotICAgbiAg ICAgLSBMb25nLCBhcmd1bWVudCAyLgotKi8KLVZPSUQKLSNpZmRlZiBDS19BTlNJQwotZG90bG9n KGludCBmLCBjaGFyICpzMSwgY2hhciAqczIsIENLX09GRl9UIG4pCi0jZWxzZQotZG90bG9nKGYs czEsczIsbikgaW50IGY7IENLX09GRl9UIG47IGNoYXIgKnMxLCAqczI7Ci0jZW5kaWYgLyogQ0tf QU5TSUMgKi8KLS8qIGRvdGxvZyAqLyB7Ci0gICAgc3RhdGljIGNoYXIgc1tUQlVGTF07Ci0gICAg ZXh0ZXJuIGludCB0bG9nZm10OwotICAgIGNoYXIgKnNwID0gczsgaW50IHg7Ci0gICAgaWYgKCFz MSkgczEgPSAiIjsKLSAgICBpZiAoIXMyKSBzMiA9ICIiOwotCi0gICAgaWYgKCF0cmFsb2cpIHJl dHVybjsgICAgICAgICAgICAgICAgLyogSWYgbm8gdHJhbnNhY3Rpb24gbG9nLCBkb24ndCAqLwot ICAgIGlmICh0bG9nZm10ICE9IDEpIHJldHVybjsKLSAgICBzd2l0Y2ggKGYpIHsKLSAgICAgIGNh c2UgRjAwMDogICAgICAgICAgICAgICAgICAgICAgICAvKiAwIChzcGVjaWFsKSAiczEgbiBzMiIg ICovCi0gICAgICAgIGlmICgoaW50KXN0cmxlbihzMSkgKyAoaW50KXN0cmxlbihzMikgKyAxNSA+ IFRCVUZMKQotICAgICAgICAgIHNwcmludGYoc3AsIj9ULUxvZyBzdHJpbmcgdG9vIGxvbmciKTsK LSAgICAgICAgZWxzZQotCSAgc3ByaW50ZihzcCwiJXMgJXMgJXMiLHMxLGNrZnN0b2EobiksczIp OwotICAgICAgICBpZiAoenNvdXRsKFpURklMRSxzKSA8IDApIHRyYWxvZyA9IDA7Ci0gICAgICAg IGJyZWFrOwotICAgICAgY2FzZSBGMDAxOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEsICIg biIgKi8KLSAgICAgICAgc3ByaW50ZihzcCwiICVzIixja2ZzdG9hKG4pKTsKLSAgICAgICAgaWYg KHpzb3V0bChaVEZJTEUscykgPCAwKSB0cmFsb2cgPSAwOwotICAgICAgICBicmVhazsKLSAgICAg IGNhc2UgRjAxMDogICAgICAgICAgICAgICAgICAgICAgICAvKiAyLCAiW3MyXSIgKi8KLSAgICAg ICAgeCA9IChpbnQpc3RybGVuKHMyKTsKLSAgICAgICAgaWYgKHMyW3hdID09ICdcbicpIHMyW3hd ID0gJ1wwJzsKLSAgICAgICAgaWYgKHggKyA2ID4gVEJVRkwpCi0gICAgICAgICAgc3ByaW50Zihz cCwiP1N0cmluZyB0b28gbG9uZyIpOwotICAgICAgICBlbHNlIHNwcmludGYoc3AsIlslc10iLHMy KTsKLSAgICAgICAgaWYgKHpzb3V0bChaVEZJTEUsIiIpIDwgMCkgdHJhbG9nID0gMDsKLSAgICAg ICAgYnJlYWs7Ci0gICAgICBjYXNlIEYwMTE6ICAgICAgICAgICAgICAgICAgICAgICAgLyogMywg IltzMl0gbiIgKi8KLSAgICAgICAgeCA9IChpbnQpc3RybGVuKHMyKTsKLSAgICAgICAgaWYgKHMy W3hdID09ICdcbicpIHMyW3hdID0gJ1wwJzsKLSAgICAgICAgaWYgKHggKyA2ID4gVEJVRkwpCi0g ICAgICAgICAgc3ByaW50ZihzcCwiP1N0cmluZyB0b28gbG9uZyIpOwotICAgICAgICBlbHNlIHNw cmludGYoc3AsIlslc10gJXMiLHMyLGNrZnN0b2EobikpOwotICAgICAgICBpZiAoenNvdXRsKFpU RklMRSxzKSA8IDApIHRyYWxvZyA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGMTAw OiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQsICJzMSIgKi8KLSAgICAgICAgaWYgKHpzb3V0 bChaVEZJTEUsczEpIDwgMCkgdHJhbG9nID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl IEYxMDE6ICAgICAgICAgICAgICAgICAgICAgICAgLyogNSwgInMxOiBuIiAqLwotICAgICAgICBp ZiAoKGludClzdHJsZW4oczEpICsgMTUgPiBUQlVGTCkKLSAgICAgICAgICBzcHJpbnRmKHNwLCI/ U3RyaW5nIHRvbyBsb25nIik7Ci0gICAgICAgIGVsc2Ugc3ByaW50ZihzcCwiJXM6ICVzIixzMSxj a2ZzdG9hKG4pKTsKLSAgICAgICAgaWYgKHpzb3V0bChaVEZJTEUscykgPCAwKSB0cmFsb2cgPSAw OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRjExMDogICAgICAgICAgICAgICAgICAgICAg ICAvKiA2LCAiczEgczIiICovCi0gICAgICAgIHggPSAoaW50KXN0cmxlbihzMik7Ci0gICAgICAg IGlmIChzMlt4XSA9PSAnXG4nKSBzMlt4XSA9ICdcMCc7Ci0gICAgICAgIGlmICgoaW50KXN0cmxl bihzMSkgKyB4ICsgNCA+IFRCVUZMKQotICAgICAgICAgIHNwcmludGYoc3AsIj9TdHJpbmcgdG9v IGxvbmciKTsKLSAgICAgICAgZWxzZQotCSAgc3ByaW50ZihzcCwiJXMlcyVzIixzMSwoKCpzMiA9 PSAnOicpID8gIiIgOiAiICIpLHMyKTsKLSAgICAgICAgaWYgKHpzb3V0bChaVEZJTEUscykgPCAw KSB0cmFsb2cgPSAwOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRjExMTogICAgICAgICAg ICAgICAgICAgICAgICAvKiA3LCAiczEgczI6IG4iICovCi0gICAgICAgIHggPSAoaW50KXN0cmxl bihzMik7Ci0gICAgICAgIGlmIChzMlt4XSA9PSAnXG4nKSBzMlt4XSA9ICdcMCc7Ci0gICAgICAg IGlmICgoaW50KXN0cmxlbihzMSkgKyB4ICsgMTUgPiBUQlVGTCkKLSAgICAgICAgICBzcHJpbnRm KHNwLCI/U3RyaW5nIHRvbyBsb25nIik7Ci0gICAgICAgIGVsc2UKLQkgIHNwcmludGYoc3AsIiVz JXMlczogJXMiLHMxLCgoKnMyID09ICc6JykgPyAiIiA6ICIgIiksczIsY2tmc3RvYShuKSk7Ci0g ICAgICAgIGlmICh6c291dGwoWlRGSUxFLHMpIDwgMCkgdHJhbG9nID0gMDsKLSAgICAgICAgYnJl YWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBzcHJpbnRmKHNwLCI/SW52YWxpZCBmb3JtYXQg Zm9yIHRsb2coKSAtICVkIixmKTsKLSAgICAgICAgaWYgKHpzb3V0bChaVEZJTEUscykgPCAwKSB0 cmFsb2cgPSAwOwotICAgIH0KLX0KLQotLyoKLSAgRCBPIFggTCBPIEcKLQotICBUaGlzIGlzIHRo ZSB0cmFuc2FjdGlvbi1sb2cgd3JpdGVyIGZvciBCUklFRiBmb3JtYXQuCi0gIFRoZSBpZGVhIGlz IHByb2R1Y2Ugb25lIHJlY29yZCAobGluZSkgcGVyIGZpbGUuICBFYWNoIHJlY29yZAotICBoYXMg dGhlIGZvbGxvd2luZyBkZWxpbWl0ZWQgZmllbGRzOgotICAgIERhdGUgKHl5eXltbWRkKQotICAg IFRpbWUgKGhoOm1tOnNzKQotICAgIEFjdGlvbjogU0VORCBvciBSRUNWCi0gICAgRmlsZSBuYW1l Ci0gICAgRmlsZSBzaXplCi0gICAgVHJhbnNmZXIgbW9kZSAodGV4dCwgYmluYXJ5LCBpbWFnZSwg bGFiZWxlZCwgZXRjKS4KLSAgICBTdGF0dXM6IE9LIG9yIEZBSUxFRAotICAgIEZyZWUtZm9ybSBj b21tZW50cyBpbiBkb3VibGVxdW90ZXMKLSAgVGhlIGRlZmF1bHQgc2VwYXJhdG9yIGlzIGNvbW1h LgotICBJZiBhIGZpZWxkIGNvbnRhaW5zIHRoZSBzZXBhcmF0b3IsIGl0IGlzIGVuY2xvc2VkIGlu IGRvdWJsZXF1b3Rlcy4KLSovCi1WT0lECi0jaWZkZWYgQ0tfQU5TSUMKLWRveGxvZyhpbnQgeCwg Y2hhciAqIGZuLCBDS19PRkZfVCBmcywgaW50IGZtLCBpbnQgc3RhdHVzLCBjaGFyICogbXNnKQot I2Vsc2UKLWRveGxvZyh4LCBmbiwgZnMsIGZtLCBzdGF0dXMsIG1zZykKLSAgICBpbnQgeDsgY2hh ciAqIGZuOyBDS19PRkZfVCBmczsgaW50IGZtOyBpbnQgc3RhdHVzOyBjaGFyICogbXNnOwotI2Vu ZGlmIC8qIENLX0FOU0lDICovCi0vKiBkb3hsb2cgKi8gewotICAgIGV4dGVybiBpbnQgdGxvZ3Nl cDsKLSAgICBjaGFyIHNlcFsyXTsKLSAgICBjaGFyIGJ1ZltDS01BWFBBVEgrMjU2XSwgKiBidWZw OwotICAgIGNoYXIgdG1wYnVmWzMyXTsKLSAgICBjaGFyICogcywgKiBwOwotICAgIGludCBsZW4s IGxlZnQsIGZ0cCA9IDAsIGs7Ci0KLSAgICBpZiAoIXRyYWxvZykgcmV0dXJuOyAgICAgICAgICAg ICAgICAvKiBJZiBubyB0cmFuc2FjdGlvbiBsb2csIGRvbid0ICovCi0KLSAgICBpZiAoIWZuKSBm biA9ICIiOyAgICAgICAgICAgICAgICAgICAvKiBQcm90ZWN0IGFnYWluc3QgbnVsbCBwb2ludGVy cyAqLwotICAgIGlmICghbXNnKSBtc2cgPSAiIjsKLSAgICBpZiAoeCAmIFdfRlRQKQotICAgICAg ZnRwKys7Ci0KLSAgICBzZXBbMF0gPSAoY2hhcikgdGxvZ3NlcDsKLSAgICBzZXBbMV0gPSBOVUw7 Ci0gICAgaWYgKCFzZXBbMF0pIHNlcFswXSA9ICcsJzsKLQotICAgIGJ1ZnAgPSBidWY7Ci0gICAg bGVmdCA9IHNpemVvZihidWYpOwotICAgIGRlYnVnKEYxMDEsIlhYWCBkb3hsb2cgbGVmdCAxIiwi IixsZWZ0KTsKLQotICAgIHAgPSB6em5kYXRlKCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIERh dGUgKi8KLSAgICBja21ha21zZyhidWYsIGxlZnQsIHAgPyBwIDogIjAwMDAwMDAwIiwgc2VwLCBO VUxMLCBOVUxMKTsKLSAgICBidWZwICs9IDk7Ci0gICAgbGVmdCAtPSA5OwotICAgIGRlYnVnKEYx MTEsIlhYWCBkb3hsb2cgbGVmdCAyIixidWYsbGVmdCk7Ci0KLSAgICB6dGltZSgmcCk7Ci0gICAg Y2tzdHJuY3B5KGJ1ZnAscCsxMSxsZWZ0KTsKLSAgICBidWZwICs9IDg7Ci0gICAgbGVmdCAtPSA4 OwotICAgIGRlYnVnKEYxMTEsIlhYWCBkb3hsb2cgbGVmdCAzIixidWYsbGVmdCk7Ci0KLSAgICBp ZiAoZnRwKSB7Ci0JaWYgKCEoeCAmIChXX1NFTkR8V19SRUNWKSkpCi0JICByZXR1cm47Ci0JcyA9 ICAoeCAmIFdfU0VORCkgPyAiUFVUIiA6ICJHRVQiOwotCWsgPSAzOwotICAgIH0gZWxzZSB7Ci0J cyA9ICAoeCAmIFdfU0VORCkgPyAiU0VORCIgOiAiUkVDViI7Ci0JayA9IDQ7Ci0gICAgfQotICAg IGNrbWFrbXNnKGJ1ZnAsbGVmdCxzZXAscyxzZXAsTlVMTCk7Ci0gICAgYnVmcCArPSBrICsgMjsK LSAgICBsZWZ0IC09IChrICsgMik7Ci0gICAgZGVidWcoRjExMSwiWFhYIGRveGxvZyBsZWZ0IDQi LGJ1ZixsZWZ0KTsKLQotICAgIHMgPSAiIjsKLSAgICBpZiAoY2tzdHJjaHIoZm4sc2VwWzBdKSkJ CS8qIEZpbGVuYW1lICovCi0gICAgICBzID0gIlwiIjsKLSAgICBja21ha21zZyhidWZwLGxlZnQs cyxmbixzLHNlcCk7Ci0gICAgc3ByaW50Zih0bXBidWYsIiVzIixja2ZzdG9hKGZzKSk7CS8qIFNp emUgKi8KLSAgICBja3N0cm5jYXQoYnVmLHRtcGJ1ZixDS01BWFBBVEgpOwotICAgIGNrc3RybmNh dChidWYsc2VwLENLTUFYUEFUSCk7Ci0gICAgZGVidWcoRjExMCwiZG94bG9nIDQiLGJ1ZiwwKTsK LQotI2lmZGVmIE5PSUNQCi0gICAgLyogVHJhbnNmZXIgbW9kZSAqLwotICAgIGNrc3RybmNweSh0 bXBidWYsIChiaW5hcnkgPyAiYmluYXJ5IiA6ICJ0ZXh0IiksIFRNUEJVRlNJWik7Ci0jZWxzZQot ICAgIGNrc3RybmNweSh0bXBidWYsZ2Ztb2RlKGZtLDApLFRNUEJVRlNJWik7Ci0jZW5kaWYgLyog Tk9JQ1AgKi8KLSAgICBpZiAoY2tzdHJjaHIodG1wYnVmLHNlcFswXSkpIHsgICAgICAvKiBNaWdo dCBjb250YWluIHNwYWNlcyAqLwotICAgICAgICBja3N0cm5jYXQoYnVmLCJcIiIsQ0tNQVhQQVRI KTsKLSAgICAgICAgY2tzdHJuY2F0KGJ1Zix0bXBidWYsQ0tNQVhQQVRIKTsKLSAgICAgICAgY2tz dHJuY2F0KGJ1ZiwiXCIiLENLTUFYUEFUSCk7Ci0gICAgfSBlbHNlCi0gICAgICBja3N0cm5jYXQo YnVmLHRtcGJ1ZixDS01BWFBBVEgpOwotICAgIGNrc3RybmNhdChidWYsc2VwLENLTUFYUEFUSCk7 Ci0gICAgZGVidWcoRjExMCwiZG94bG9nIDUiLGJ1ZiwwKTsKLQotICAgIGNrc3RybmNhdChidWYs IHN0YXR1cyA/ICJGQUlMRUQiIDogIk9LIixDS01BWFBBVEgpOwotICAgIGxlbiA9IHN0cmxlbihi dWYpOwotICAgIGxlZnQgPSBDS01BWFBBVEgrMjU2IC0gbGVuOwotICAgIGlmIChsZWZ0IDwgMikg ZmF0YWwoImRveGxvZyBidWZmZXIgb3ZlcmxvdyIpOwotCi0gICAgZGVidWcoRjExMSwiWFhYIGRv eGxvZyBsZWZ0IDUiLGJ1ZixsZWZ0KTsKLQotICAgIGRlYnVnKEYxMTAsImRveGxvZyBidWYgMSIs IGJ1ZiwgbGVuKTsKLSAgICBzID0gYnVmICsgbGVuOwotICAgIGlmIChzdGF0dXMgPT0gMCAmJiBs ZWZ0ID4gMzIpIHsKLSAgICAgICAgbG9uZyBjcHMgPSAwTDsKLSNpZmRlZiBHRlRJTUVSCi0JZGVi dWcoRjEwMSwiRE9YTE9HIGZweGZzZWNzIiwiIiwobG9uZykoZnB4ZnNlY3MgKiAxMDAwKSk7Ci0g ICAgICAgIGlmIChmcHhmc2VjcykgY3BzID0gKGxvbmcpKChDS0ZMT0FUKSBmcyAvIGZweGZzZWNz KTsKLSAgICAgICAgc3ByaW50ZihzLCIlc1wiJTAuM2ZzZWMgJWxkY3BzXCIiLHNlcCxmcHhmc2Vj cyxjcHMpOwotI2Vsc2UKLSAgICAgICAgaWYgKHhmc2VjcykgY3BzID0gZnMgLyB4ZnNlY3M7Ci0g ICAgICAgIHNwcmludGYocywiJXNcIiVsZHNlYyAlbGRjcHNcIiIsc2VwLHhmc2VjcyxjcHMpOwot I2VuZGlmIC8qIEdGVElNRVIgKi8KLSAgICB9IGVsc2UgaWYgKChpbnQpc3RybGVuKG1zZykgKyA0 IDwgbGVmdCkgewotICAgICAgICBzcHJpbnRmKHMsIiVzXCIlc1wiIixzZXAsbXNnKTsKLSAgICB9 Ci0gICAgZGVidWcoRjExMSwiWFhYIGRveGxvZyBsZWZ0IDUiLGJ1ZixsZWZ0KTsKLQotICAgIGRl YnVnKEYxMTAsImRveGxvZyA1IixidWYsMCk7Ci0gICAgeCA9IHpzb3V0bChaVEZJTEUsYnVmKTsK LSAgICBkZWJ1ZyhGMTAxLCJkb3hsb2cgenNvdXRsIiwiIix4KTsKLSAgICBpZiAoeCA8IDApIHRy YWxvZyA9IDA7Ci19Ci0jZW5kaWYgLyogVExPRyAqLwotCi0jaWZuZGVmIE1BQwotLyoKLSAgVGhl IHJlc3Qgb2YgdGhpcyBmaWxlIGlzIGZvciBhbGwgaW1wbGVtZW50YXRpb25zIGJ1dCB0aGUgTWFj aW50b3NoLgotKi8KLQotI2lmZGVmIENLX0NVUlNFUwotc3RhdGljIGludCByZXBhaW50ID0gMDsg ICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIGRpc3BsYXkgbmVlZHMgcmVwYWludGluZyAqLwot I2VuZGlmIC8qIENLX0NVUlNFUyAqLwotCi0jaWZuZGVmIE5PWEZFUgotLyogIEMgSCBLIEkgTiBU ICAtLSAgQ2hlY2sgZm9yIGNvbnNvbGUgaW50ZXJydXB0cyAgKi8KLQotLyoKLSAgVXNlZCBkdXJp bmcgZmlsZSB0cmFuc2ZlciBpbiBsb2NhbCBtb2RlIG9ubHk6Ci0gIC4gSWYgdXNlciBoYXMgbm90 IHRvdWNoZWQgdGhlIGtleWJvYXJkLCByZXR1cm5zIDAgd2l0aCBubyBzaWRlIGVmZmVjdHMuCi0g IC4gSWYgdXNlciB0eXBlZCBTIG9yIEEgKGV0Yywgc2VlIGJlbG93KSBwcmludHMgc3RhdHVzIG1l c3NhZ2UgYW5kIHJldHVybnMgMC4KLSAgLiBJZiB1c2VyIHR5cGVkIFggb3IgRiAoZXRjLCBzZWUg YmVsb3cpIHJldHVybnMgMCB3aXRoIGN4c2VlbiBzZXQgdG8gMS4KLSAgLiBJZiB1c2VyIHR5cGVk IFogb3IgQiAoZXRjLCBzZWUgYmVsb3cpIHJldHVybnMgMCB3aXRoIGN6c2VlbiBzZXQgdG8gMS4K LSAgLiBJZiB1c2VyIHR5cGVkIEUgb3IgQyAoZXRjLCBzZWUgYmVsb3cpIHJldHVybnMgLTEuCi0q LwotaW50Ci1jaGtpbnQoKSB7Ci0gICAgaW50IGNoLCBjbiwgb2ZkOyBsb25nIHp6OwotICAgIGlm ICgheGZyaW50KQotICAgICAgcmV0dXJuKDApOwotICAgIGlmICgoIWxvY2FsKSB8fCAocXVpZXQp KSByZXR1cm4oMCk7IC8qIE9ubHkgZG8gdGhpcyBpZiBsb2NhbCAmIG5vdCBxdWlldCAqLwotI2lm ZGVmIGRhdGFnZW5lcmFsCi0gICAgaWYgKGNvbl9yZWFkc19tdCkgICAgICAgICAgICAgICAgICAg LyogaWYgY29uaW50X210IHRhc2sgaXMgYWN0aXZlICovCi0gICAgICBpZiAoY29uaW50X2F2bCkg eyAgICAgICAgICAgICAgICAgLyogYW5kIHRoZXJlJ3MgYW4gaW50ZXJydXB0IHBlbmRpbmcgKi8K LSAgICAgICAgICBjbiA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm9jZXNzIGl0ICov Ci0gICAgICAgICAgY2ggPSBjb25pbnRfY2g7Ci0gICAgICAgICAgY29uaW50X2F2bCA9IDA7ICAg ICAgICAgICAgICAgLyogdHVybiBvZmYgZmxhZyBzbyBjb25pbnRfbXQgY2FuICovCi0gICAgICB9 IGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvY2VlZCAqLwotICAgICAgICBy ZXR1cm4oMCk7Ci0gICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaWYg Y29uaW50X210IG5vdCBhY3RpdmUgKi8KLSAgICAgIGlmICgoY2ggPSBjb25pbmMoMikpIDwgMCkg ICAgICAgICAvKiB0cnkgdG8gZ2V0IGNoYXIgbWFudWFsbHkgKi8KLSAgICAgICAgcmV0dXJuKDAp OyAgICAgICAgICAgICAgICAgICAgICAvKiBJL08gZXJyb3IsIG9yIG5vIGRhdGEgKi8KLSAgICAg IGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZiBzdWNjZXNzZnVsLCBzZXQg Y24gc28gd2UgKi8KLSAgICAgICAgY24gPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBr bm93IHdlIGdvdCBvbmUgKi8KLSAgICBkZWJ1ZyhGMTAxLCJjaGtpbnQgZ290IGtleWJvYXJkIGNo YXJhY3RlciIsY2gsY24pOwotI2Vsc2UgLyogIWRhdGFnZW5lcmFsICovCi0jaWZkZWYgTlRTSUcK LSAgICB7Ci0gICAgICAgIGV4dGVybiBpbnQgVGxzSW5kZXg7Ci0gICAgICAgIHN0cnVjdCBfdGhy ZWFkaW5mbyAqIHRocmVhZGluZm87Ci0gICAgICAgIHRocmVhZGluZm8gPSAoc3RydWN0IF90aHJl YWRpbmZvICopIFRsc0dldFZhbHVlKFRsc0luZGV4KTsKLSAgICAgICAgaWYgKHRocmVhZGluZm8p IHsKLSAgICAgICAgICAgIGlmICghV2FpdFNlbSh0aHJlYWRpbmZvLT5EaWVTZW0sMCkpCi0gICAg ICAgICAgICAgIHJldHVybiAtMTsgICAgICAgICAgICAgICAgLyogQ2FuY2VsIEltbWVkaWF0ZWx5 ICovCi0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogTlRTSUcgKi8KLSAgICBjbiA9IGNvbmNo aygpOyAgICAgICAgICAgICAgICAgICAgICAvKiBBbnkgaW5wdXQgd2FpdGluZz8gKi8KLSAgICBk ZWJ1ZyhGMTAxLCJjb25jaGsiLCIiLGNuKTsKLSAgICBpZiAoY24gPCAxKSByZXR1cm4oMCk7Ci0g ICAgY2ggPSBjb25pbmMoNSkgOwotICAgIGRlYnVnKEYxMDEsImNvbmluYyIsIiIsY2gpOwotICAg IGlmIChjaCA8IDApIHJldHVybigwKTsKLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotCi0gICAg Y2ggJj0gMDE3NzsKLSAgICBzd2l0Y2ggKGNoKSB7Ci0gICAgICBjYXNlICdBJzogY2FzZSAnYSc6 IGNhc2UgMDAwMTogICAgLyogU3RhdHVzIHJlcG9ydCAqLwotICAgICAgY2FzZSAnUyc6IGNhc2Ug J3MnOgotICAgICAgICBpZiAoZmRpc3BsYSAhPSBYWUZEX1IgJiYgZmRpc3BsYSAhPSBYWUZEX1Mg JiYgZmRpc3BsYSAhPSBYWUZEX04pCi0gICAgICAgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAg ICAgICAgLyogT25seSBmb3Igc2VyaWFsLCBzaW1wbGUgb3Igbm9uZSAqLwotICAgICAgICBvZmQg PSBmZGlzcGxhOyAgICAgICAgICAgICAgICAgIC8qIFtNRl0gU2F2ZSBmaWxlIGRpc3BsYXkgdHlw ZSAqLwotICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX04pCi0gICAgICAgICAgZmRpc3BsYSA9 IFhZRkRfUjsgICAgICAgICAgICAgLyogW01GXSBQcmV0ZW5kIHNlcmlhbCBpZiBubyBkaXNwbGF5 ICovCi0gICAgICAgIHh4c2NyZWVuKFNDUl9UTiwwLDBsLCJTdGF0dXMgcmVwb3J0OiIpOwotICAg ICAgICB4eHNjcmVlbihTQ1JfVE4sMCwwbCwiIGZpbGUgdHlwZTogIik7Ci0gICAgICAgIGlmIChi aW5hcnkpIHsKLSAgICAgICAgICAgIHN3aXRjaChiaW5hcnkpIHsKLSAgICAgICAgICAgICAgY2Fz ZSBYWUZUX0w6IHh4c2NyZWVuKFNDUl9UWiwwLDBsLCJsYWJlbGVkIik7IGJyZWFrOwotICAgICAg ICAgICAgICBjYXNlIFhZRlRfSTogeHhzY3JlZW4oU0NSX1RaLDAsMGwsImltYWdlIik7IGJyZWFr OwotICAgICAgICAgICAgICBjYXNlIFhZRlRfVTogeHhzY3JlZW4oU0NSX1RaLDAsMGwsImJpbmFy eSB1bmRlZmluZWQiKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg ICAgIGNhc2UgWFlGVF9COiB4eHNjcmVlbihTQ1JfVFosMCwwbCwiYmluYXJ5Iik7IGJyZWFrOwot ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotI2lmZGVmIE5PQ1NFVFMKLSAgICAgICAg ICAgIHh4c2NyZWVuKFNDUl9UWiwwLDBsLCJ0ZXh0Iik7Ci0jZWxzZQotICAgICAgICAgICAgeHhz Y3JlZW4oU0NSX1RVLDAsMGwsInRleHQsICIpOwotICAgICAgICAgICAgaWYgKHRjaGFyc2V0ID09 IFRDX1RSQU5TUCB8fCB4ZnJ4bGEgPT0gMCkgewotICAgICAgICAgICAgICAgIHh4c2NyZWVuKFND Ul9UWiwwLDBsLCJ0cmFuc3BhcmVudCIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgICAgICBpZiAod2hhdCAmIFdfU0VORCkgewotICAgICAgICAgICAgICAgICAgICB4eHNjcmVl bihTQ1JfVFosMCwwbCx0Y3NpbmZvW3RjaGFyc2V0XS5rZXl3b3JkKTsKLSAgICAgICAgICAgICAg ICAgICAgeHhzY3JlZW4oU0NSX1RVLDAsMGwsIiA9PiAiKTsKLSAgICAgICAgICAgICAgICAgICAg eHhzY3JlZW4oU0NSX1RaLDAsMGwsZmNzaW5mb1tmY2hhcnNldF0ua2V5d29yZCk7Ci0gICAgICAg ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1RaLDAs MGwsZmNzaW5mb1tmY2hhcnNldF0ua2V5d29yZCk7Ci0gICAgICAgICAgICAgICAgICAgIHh4c2Ny ZWVuKFNDUl9UVSwwLDBsLCIgPT4gIik7Ci0gICAgICAgICAgICAgICAgICAgIHh4c2NyZWVuKFND Ul9UWiwwLDBsLHRjc2luZm9bdGNoYXJzZXRdLmtleXdvcmQpOwotICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0gICAgICAgIH0KLSAgICAgICAg eHhzY3JlZW4oU0NSX1FFLDAsZmlsY250LCIgZmlsZSBudW1iZXIiKTsKLSAgICAgICAgaWYgKGZz aXplKSB4eHNjcmVlbihTQ1JfUUUsMCxmc2l6ZSwiIHNpemUiKTsKLSAgICAgICAgeHhzY3JlZW4o U0NSX1FFLDAsZmZjLCIgY2hhcmFjdGVycyBzbyBmYXIiKTsKLSAgICAgICAgaWYgKGZzaXplID4g MEwpIHsKLSNpZmRlZiBDS19SRVNFTkQKLSAgICAgICAgICAgIHp6ID0gd2hhdCAmIFdfU0VORCA/ IHNlbmRzdGFydCA6IHdoYXQgJiBXX1JFQ1YgPyByc19sZW4gOiAwOwotICAgICAgICAgICAgenog PSAoIChmZmMgKyB6eikgKiAxMDBMICkgLyBmc2l6ZTsKLSNlbHNlCi0gICAgICAgICAgICB6eiA9 ICggZmZjICogMTAwTCApIC8gZnNpemU7Ci0jZW5kaWYgLyogQ0tfUkVTRU5EICovCi0gICAgICAg ICAgICB4eHNjcmVlbihTQ1JfUUUsMCx6eiwgICAgICAiIHBlcmNlbnQgZG9uZSIpOwotICAgICAg ICB9Ci0gICAgICAgIGlmIChiY3R1ID09IDQpIHsgICAgICAgICAgICAgICAgLyogQmxvY2sgY2hl Y2sgKi8KLSAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9UVSwwLDBMLCIgYmxvY2sgY2hlY2s6ICIp OwotICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1RaLDAsMEwsImJsYW5rLWZyZWUtMiIpOwotICAg ICAgICB9IGVsc2UgeHhzY3JlZW4oU0NSX1FFLDAsKGxvbmcpYmN0dSwgICIgYmxvY2sgY2hlY2si KTsKLSAgICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsKGxvbmcpcnB0ZmxnLCIgY29tcHJlc3Npb24i KTsKLSAgICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsKGxvbmcpZWJxZmxnLCIgOHRoLWJpdCBwcmVm aXhpbmciKTsKLSAgICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsKGxvbmcpbHNjYXB1LCIgbG9ja2lu ZyBzaGlmdHMiKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrKQotICAgICAgICAgIHh4c2NyZWVuKFND Ul9RRSwwLCBzcGVlZCwgIiBzcGVlZCIpOwotICAgICAgICBpZiAod2hhdCAmIFdfU0VORCkKLQot ICAgICAgICAgIHh4c2NyZWVuKFNDUl9RRSwwLHNwc2l6LCAiIHBhY2tldCBsZW5ndGgiKTsKLSAg ICAgICAgZWxzZSBpZiAod2hhdCAmIFdfUkVDViB8fCB3aGF0ICYgV19SRU1PKQotICAgICAgICAg IHh4c2NyZWVuKFNDUl9RRSwwLHVycHNpeiwiIHBhY2tldCBsZW5ndGgiKTsKLSAgICAgICAgeHhz Y3JlZW4oU0NSX1FFLDAsd3Nsb3RzLCAgIiB3aW5kb3cgc2xvdHMiKTsKLSAgICAgICAgZmRpc3Bs YSA9IG9mZDsgLyogW01GXSBSZXN0b3JlIGZpbGUgZGlzcGxheSB0eXBlICovCi0gICAgICAgIHJl dHVybigwKTsKLQotICAgICAgY2FzZSAnQic6IGNhc2UgJ2InOiBjYXNlIDAwMDI6ICAgIC8qIENh bmNlbCBiYXRjaCAqLwotICAgICAgY2FzZSAnWic6IGNhc2UgJ3onOiBjYXNlIDAwMzI6Ci0gICAg ICAgIGN6c2VlbiA9IDE7Ci0gICAgICAgIGludGVycnVwdGVkID0gMTsKLSAgICAgICAgeHhzY3Jl ZW4oU0NSX1NULFNUX01TRywwbCwKLSAgICAgICAgICAgICAgICAgKCgod2hhdCAmIFdfUkVDVikg JiYgKHdzbG90cyA+IDEpKSA/Ci0gICAgICAgICAgICAgICAgICAiQ2FuY2VsaW5nIGJhdGNoLCB3 YWl0Li4uICIgOgotICAgICAgICAgICAgICAgICAgIkNhbmNlbGluZyBiYXRjaC4uLiAiKQotICAg ICAgICAgICAgICAgICApOwotICAgICAgICByZXR1cm4oMCk7Ci0KLSAgICAgIGNhc2UgJ0YnOiBj YXNlICdmJzogY2FzZSAwMDA2OiAgICAvKiBDYW5jZWwgZmlsZSAqLwotICAgICAgY2FzZSAnWCc6 IGNhc2UgJ3gnOiBjYXNlIDAwMzA6Ci0gICAgICAgIGN4c2VlbiA9IDE7Ci0gICAgICAgIGludGVy cnVwdGVkID0gMTsKLSAgICAgICAgeHhzY3JlZW4oU0NSX1NULFNUX01TRywwbCwKLSAgICAgICAg ICAgICAgICAgKCgod2hhdCAmIFdfUkVDVikgJiYgKHdzbG90cyA+IDEpKSA/Ci0gICAgICAgICAg ICAgICAgICAiQ2FuY2VsaW5nIGZpbGUsIHdhaXQuLi4gIiA6Ci0gICAgICAgICAgICAgICAgICAi Q2FuY2VsaW5nIGZpbGUuLi4gIikKLSAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgcmV0dXJu KDApOwotCi0gICAgICBjYXNlICdSJzogY2FzZSAncic6IGNhc2UgMDAyMjogICAgLyogUmVzZW5k IHBhY2tldCAqLwotICAgICAgY2FzZSAwMDE1OiBjYXNlIDAwMTI6Ci0jaWZkZWYgU1RSRUFNSU5H Ci0gICAgICAgIGlmIChzdHJlYW1pbmcpCi0gICAgICAgICAgcmV0dXJuKDApOwotI2VuZGlmIC8q IFNUUkVBTUlORyAqLwotICAgICAgICB4eHNjcmVlbihTQ1JfU1QsU1RfTVNHLDBsLCJSZXNlbmRp bmcgcGFja2V0Li4uICIpOwotICAgICAgICBudW1lcnJzKys7Ci0gICAgICAgIHJlc2VuZCh3aW5s byk7Ci0gICAgICAgIHJldHVybigwKTsKLQotI2lmZGVmIGRhdGFnZW5lcmFsCi0gICAgICBjYXNl ICdcMDMnOiAgICAgICAgICAgICAgICAgICAgICAgLyogV2UncmUgbm90IHRyYXBwaW5nIF5DJ3Mg d2l0aCAqLwotICAgICAgICB0cmFwKDApOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNpZ25h bHMsIHNvIHdlIGNoZWNrIGhlcmUgICAgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotCi0g ICAgICBjYXNlICdDJzogY2FzZSAnYyc6ICAgICAgICAgICAgICAgLyogQ3RybC1DICovCi0jaWZu ZGVmIGRhdGFnZW5lcmFsCi0gICAgICBjYXNlICdcMDMnOgotI2VuZGlmIC8qIGRhdGFnZW5lcmFs ICovCi0KLSAgICAgIGNhc2UgJ0UnOiBjYXNlICdlJzogICAgICAgICAgICAgICAvKiBTZW5kIGVy cm9yIHBhY2tldCAqLwotICAgICAgY2FzZSAwMDA1OgotICAgICAgICBpbnRlcnJ1cHRlZCA9IDE7 Ci0gICAgICAgIHJldHVybigtMSk7Ci0KLSNpZmRlZiBDS19DVVJTRVMKLSAgICAgIGNhc2UgMDAx NDogICAgICAgICAgICAgICAgICAgICAgICAvKiBDdHJsLUwgdG8gcmVmcmVzaCBzY3JlZW4gKi8K LSAgICAgIGNhc2UgJ0wnOiBjYXNlICdsJzogICAgICAgICAgICAgICAvKiBBbHNvIGFjY2VwdCBM ICh1cHBlciwgbG93ZXIpICovCi0gICAgICBjYXNlIDAwMjc6ICAgICAgICAgICAgICAgICAgICAg ICAgLyogQ3RybC1XIHN5bm9ueW0gZm9yIFZNUyAmIEluZ3JlcyAqLwotICAgICAgICByZXBhaW50 ID0gMTsKLSAgICAgICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIENLX0NVUlNFUyAqLwotCi0gICAg ICBjYXNlICdUJzoKLSAgICAgIGNhc2UgJ3QnOgkJCQkvKiBUdXJuIG9uIGRlYnVnLWxvZyB0aW1l c3RhbXBzICovCi0jaWZkZWYgREVCVUcKLQl7Ci0JICAgIGV4dGVybiBpbnQgZGVidGltOwotCSAg ICBpZiAoY2ggPT0gJ1QnKSB7Ci0JCWRlYnRpbSA9IDE7Ci0JCXh4c2NyZWVuKFNDUl9TVCxTVF9N U0csMGwsCi0JCQkgIkRlYnVnIHRpbWVzdGFtcHMgT24uLi4gIik7Ci0JICAgIH0gZWxzZSB7Ci0J CWRlYnRpbSA9IDE7Ci0JCXh4c2NyZWVuKFNDUl9TVCxTVF9NU0csMGwsCi0JCQkgIkRlYnVnIHRp bWVzdGFtcHMgT2ZmLi4uICIpOwotCSAgICB9Ci0JfQotI2VuZGlmIC8qIERFQlVHICovCi0JcmV0 dXJuKDApOwotCi0gICAgICBjYXNlICdEJzoKLSNpZmRlZiBERUJVRwotCWlmICghZGVibG9nKSB7 Ci0JICAgIGRlYm9wbigiZGVidWcubG9nIiwwKTsKLQkgICAgaWYgKGRlYmxvZykgewotCQl4eHNj cmVlbihTQ1JfU1QsU1RfTVNHLDBsLCJkZWJ1Zy5sb2cgb3Blbi4uLiAiKTsKLQkgICAgfSBlbHNl IHsKLQkJeHhzY3JlZW4oU0NSX1NULFNUX01TRywwbCwiZGVidWcubG9nIG9wZW4gRkFJTEVELi4u ICIpOwotCSAgICB9Ci0JfSBlbHNlIHsKLQkgICAgeHhzY3JlZW4oU0NSX1NULFNUX01TRywwbCwi RGVidWcgbG9nIE9uLi4uICIpOwotCX0KLQlpZiAoZGVibG9nKQotCSAgZGVib2sgPSAxOwotI2Vu ZGlmIC8qIERFQlVHICovCi0JcmV0dXJuKDApOwotCi0gICAgICBjYXNlICdkJzoJCQkJLyogVHVy biBvZmYgZGVidWdnaW5nICovCi0jaWZkZWYgREVCVUcKLQlpZiAoZGVibG9nKQotCSAgeHhzY3Jl ZW4oU0NSX1NULFNUX01TRywwbCwiRGVidWcgbG9nIE9mZi4uLiAiKTsKLQlkZWJvayA9IDA7Ci0j ZW5kaWYgLyogREVCVUcgKi8KLQlyZXR1cm4oMCk7Ci0KLSAgICAgIGRlZmF1bHQ6ICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBBbnl0aGluZyBlbHNlLCBwcmludCBtZXNzYWdlICovCi0gICAg ICAgIGludG1zZygxTCk7Ci0gICAgICAgIHJldHVybigwKTsKLSAgICB9Ci19Ci0KLS8qICBJIE4g VCBNIFMgRyAgLS0gIElzc3VlIG1lc3NhZ2UgYWJvdXQgdGVybWluYWwgaW50ZXJydXB0cyAgKi8K LQotVk9JRAotI2lmZGVmIENLX0FOU0lDCi1pbnRtc2cobG9uZyBuKQotI2Vsc2UKLWludG1zZyhu KSBsb25nIG47Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGludG1zZyAqLyB7Ci0jaWZkZWYg Q0tfTkVFRF9TSUcKLSAgICBjaGFyIGJ1Zls4MF07Ci0jZW5kaWYgLyogQ0tfTkVFRF9TSUcgKi8K LQotICAgIGlmICghZGlzcGxhIHx8IHF1aWV0KSAgICAgICAgICAgICAgIC8qIE5vdCBpZiB3ZSdy ZSBiZWluZyBxdWlldCAqLwotICAgICAgcmV0dXJuOwotICAgIGlmIChzZXJ2ZXIgJiYgKCFzcnZk aXMgfHwgbiA+IC0xTCkpIC8qIFNwZWNpYWwgZm9yIHNlcnZlciAqLwotICAgICAgcmV0dXJuOwot I2lmZGVmIENLX05FRURfU0lHCi0gICAgYnVmWzBdID0gTlVMOyAgICAgICAgICAgICAgICAgICAg ICAgLyogS2VlcCBjb21waWxlcnMgaGFwcHkgKi8KLSNlbmRpZiAvKiBDS19ORUVEX1NJRyAqLwot I2lmbmRlZiBPWE9TCi0jaWZkZWYgU1ZPUlBPU0lYCi0gICAgY29uY2hrKCk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQ2xlYXIgb3V0IHBlbmRpbmcgZXNjYXBlLXNpZ25hbHMgKi8KLSNl bmRpZiAvKiBTVk9SUE9TSVggKi8KLSNlbmRpZiAvKiAhIE9YT1MgKi8KLSNpZmRlZiBWTVMKLSAg ICBjb25yZXMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTbyBDdHJsLUMgd2lsbCB3 b3JrICovCi0jZW5kaWYgLyogVk1TICovCi0gICAgaWYgKCghc2VydmVyICYmIG4gPT0gMUwpIHx8 IChzZXJ2ZXIgJiYgbiA8IDBMKSkgewotCi0jaWZkZWYgQ0tfTkVFRF9TSUcKLSAgICAgICAgaWYg KHhmcmludCkgewotCSAgICBja21ha21zZyhidWYsCi0JCSAgICAgODAsCi0JCSAgICAgIlR5cGUg ZXNjYXBlIGNoYXJhY3RlciAoIiwKLQkJICAgICBkYmNocihlc2NhcGUpLAotCQkgICAgICIpIGZv bGxvd2VkIGJ5OiIsCi0JCSAgICAgTlVMTAotCQkgICAgICk7Ci0gICAgICAgICAgICB4eHNjcmVl bihTQ1JfVE4sMCwwbCxidWYpOwotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfTkVFRF9TSUcgKi8K LQotICAgICAgICBpZiAoeGZyaW50KSB7Ci0gICAgICAgICAgICBpZiAocHJvdG9jb2wgPT0gUFJP VE9fSykgewotIHh4c2NyZWVuKFNDUl9UTiwwLDBsLCJYIHRvIGNhbmNlbCBmaWxlLCAgQ1IgdG8g cmVzZW5kIGN1cnJlbnQgcGFja2V0Iik7Ci0geHhzY3JlZW4oU0NSX1ROLDAsMGwsIlogdG8gY2Fu Y2VsIGdyb3VwLCBBIGZvciBzdGF0dXMgcmVwb3J0Iik7Ci0geHhzY3JlZW4oU0NSX1ROLDAsMGws IkUgdG8gc2VuZCBFcnJvciBwYWNrZXQsIEN0cmwtQyB0byBxdWl0IGltbWVkaWF0ZWx5OiAiKTsK LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1ROLDAs MGwsIkN0cmwtQyB0byBjYW5jZWwgZmlsZSB0cmFuc2ZlcjogIik7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB4eHNjcmVlbihTQ1JfVE4sMCwwbCwiVHJhbnNm ZXIgaW50ZXJydXB0aW9uIGRpc2FibGVkLiAiKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNl IHh4c2NyZWVuKFNDUl9UVSwwLDBsLCIgIik7Ci19Ci0KLSNpZm5kZWYgTk9ESVNQTEFZCi1zdGF0 aWMgaW50IG5ld2RweSA9IDA7ICAgICAgICAgICAgICAgICAgLyogTmV3IGRpc3BsYXkgZmxhZyAq Lwotc3RhdGljIGNoYXIgZmJ1Zls4MF07ICAgICAgICAgICAgICAgICAgIC8qIEZpbGVuYW1lIGJ1 ZmZlciAqLwotc3RhdGljIGNoYXIgYWJ1Zls4MF07ICAgICAgICAgICAgICAgICAgIC8qIEFzLW5h bWUgYnVmZmVyICovCi1zdGF0aWMgY2hhciBhMmJ1Zls4MF07ICAgICAgICAgICAgICAgICAgLyog U2Vjb25kIEFzLW5hbWUgYnVmZmVyICovCi1zdGF0aWMgQ0tfT0ZGX1Qgb2xkZmZjID0gMEw7Ci1z dGF0aWMgQ0tfT0ZGX1QgZG90cyA9IDBMOwotc3RhdGljIGludCBocG9zID0gMDsKLQotc3RhdGlj IFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgU2VyaWFsIG9y IENSVCBkaXNwbGF5ICovCi1kcHlpbml0KCkgewotICAgIGludCBtID0gMCwgbiA9IDA7Ci0gICAg Y2hhciAqIHMgPSAiIjsKLQotICAgIG5ld2RweSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAg IC8qICBEb24ndCBkbyB0aGlzIGFnYWluICovCi0gICAgb2xkZmZjID0gKENLX09GRl9UKTA7CQkv KiAgUmVzZXQgdGhpcyAqLwotICAgIGRvdHMgPSAoQ0tfT0ZGX1QpMDsJCQkvKiAgYW5kIHRoaXMu LiAqLwotICAgIG9sZGNwcyA9IGNwcyA9IDBMOwotCi0gICAgY29ub2xsKCIiKTsJCQkJLyogTmV3 IGxpbmUgKi8KLSAgICBpZiAod2hhdCAmIFdfU0VORCkgcyA9ICJTZW5kaW5nOiAiOwkvKiBBY3Rp b24gKi8KLSAgICBlbHNlIGlmICh3aGF0ICYgV19SRUNWKSBzID0gIlJlY2VpdmluZzogIjsKLSAg ICBuID0gKGludClzdHJsZW4ocykgKyAoaW50KXN0cmxlbihmYnVmKTsKLSAgICBjb25vbChmYnVm KTsKLSAgICBtID0gKGludClzdHJsZW4oYWJ1ZikgKyA0OwotICAgIGlmIChuICsgbSA+IGNtZF9j b2xzKSB7Ci0gICAgICAgIGNvbm9sbCgiIik7Ci0gICAgICAgIG4gPSAwOwotICAgIH0gZWxzZQot ICAgICAgbiArPSBtOwotICAgIGlmICgqYWJ1ZikgewotICAgICAgICBjb25vbCgiID0+ICIpOwot ICAgICAgICBjb25vbChhYnVmKTsKLSAgICB9Ci0gICAgbSA9IChpbnQpc3RybGVuKGEyYnVmKSAr IDQ7Ci0gICAgaWYgKG4gKyBtID4gY21kX2NvbHMpIHsKLSAgICAgICAgY29ub2xsKCIiKTsKLSAg ICAgICAgbiA9IDA7Ci0gICAgfSBlbHNlCi0gICAgICBuICs9IG07Ci0gICAgaWYgKCphMmJ1Zikg ewotICAgICAgICBjb25vbCgiID0+ICIpOwotICAgICAgICBjb25vbChhMmJ1Zik7Ci0gICAgfQot ICAgICpmYnVmID0gTlVMOyAqYWJ1ZiA9IE5VTDsgKmEyYnVmID0gTlVMOwotICAgIGNvbm9sbCgi Iik7Ci0gICAgaWYgKGZzaXplID4gKENLX09GRl9UKS0xKSB7CQkvKiBTaXplICovCi0gICAgICAg IHNwcmludGYoZmJ1ZiwiU2l6ZTogJXMsIFR5cGU6ICIsY2tmc3RvYShmc2l6ZSkpOyAvKiBTQUZF ICg4MCkgKi8KLSAgICAgICAgY29ub2woZmJ1Zik7ICpmYnVmID0gTlVMOwotICAgIH0gZWxzZSBj b25vbCgiU2l6ZTogdW5rbm93biwgVHlwZTogIik7Ci0gICAgaWYgKGJpbmFyeSkgewkJCS8qIFR5 cGUgKi8KLSAgICAgICAgc3dpdGNoKGJpbmFyeSkgewotICAgICAgICAgICAgICBjYXNlIFhZRlRf TDogY29ub2woImxhYmVsZWQiKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgWFlGVF9JOiBj b25vbCgiaW1hZ2UiKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgWFlGVF9VOiBjb25vbCgi YmluYXJ5IHVuZGVmaW5lZCIpOyBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg ICAgICAgICAgY2FzZSBYWUZUX0I6IGNvbm9sKCJiaW5hcnkiKTsgYnJlYWs7Ci0gICAgICAgIH0K LSAgICB9IGVsc2UgewotI2lmZGVmIE5PQ1NFVFMKLSAgICAgICAgY29ub2woInRleHQiKTsKLSNl bHNlCi0gICAgICAgIGNvbm9sKCJ0ZXh0LCAiKTsKLSAgICAgICAgaWYgKHRjaGFyc2V0ID09IFRD X1RSQU5TUCB8fCB4ZnJ4bGEgPT0gMCkgewotICAgICAgICAgICAgY29ub2woInRyYW5zcGFyZW50 Iik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAod2hhdCAmIFdfU0VORCkgewot ICAgICAgICAgICAgICAgIGNvbm9sKGZjc2luZm9bZmNoYXJzZXRdLmtleXdvcmQpOwotICAgICAg ICAgICAgICAgIGNvbm9sKCIgPT4gIik7Ci0gICAgICAgICAgICAgICAgY29ub2wodGNzaW5mb1t0 Y2hhcnNldF0ua2V5d29yZCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg IGNvbm9sKHRjc2luZm9bdGNoYXJzZXRdLmtleXdvcmQpOwotICAgICAgICAgICAgICAgIGNvbm9s KCIgPT4gIik7Ci0gICAgICAgICAgICAgICAgY29ub2woZmNzaW5mb1tmY2hhcnNldF0ua2V5d29y ZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0gICAg fQotI2lmZGVmIFNUUkVBTUlORwotICAgIGlmIChzdHJlYW1pbmcpCi0gICAgICBjb25vbCgiLCBT VFJFQU1JTkciKTsKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLSAgICBjb25vbGwoIiIpOwotCi0g ICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9TKSB7ICAgICAgICAgICAgLyogQ1JUIGZpZWxkIGhlYWRp bmdzICovCi0vKgotICBEZWZpbmUgQ0tfQ1BTIHRvIHNob3cgY3VycmVudCB0cmFuc2ZlciByYXRl LgotICBMZWF2ZSBpdCB1bmRlZmluZWQgdG8gc2hvdyBlc3RpbWF0ZWQgdGltZSByZW1haW5pbmcu Ci0gIEVzdGltYXRlZC10aW1lLXJlbWFpbmluZyBjb2RlIGZyb20gQW5keSBGeWZlLCBub3QgdGVz dGVkIG9uCi0gIHBhdGhvbG9naWNhbCBjYXNlcy4KLSovCi0jZGVmaW5lIENLX0NQUwotCi0jaWZk ZWYgQ0tfQ1BTCi0gICAgICAgIGNvbm9sbCgiICAgIEZpbGUgICBQZXJjZW50ICAgICAgIFBhY2tl dCIpOwotICAgICAgICBjb25vbGwoIiAgICBCeXRlcyAgRG9uZSAgICAgQ1BTICBMZW5ndGgiKTsK LSNlbHNlCi0gICAgICAgIGNvbm9sbCgiICAgIEZpbGUgICBQZXJjZW50ICBTZWNzIFBhY2tldCIp OwotICAgICAgICBjb25vbGwoIiAgICBCeXRlcyAgRG9uZSAgICAgTGVmdCBMZW5ndGgiKTsKLSNl bmRpZiAvKiBDS19DUFMgKi8KLSAgICAgICAgbmV3ZHB5ID0gMDsKLSAgICB9Ci0gICAgaHBvcyA9 IDA7Ci19Ci0KLS8qCi0gIHNob3dwa3QoYykKLSAgYyA9IGNvbXBsZXRpb24gY29kZTogMCBtZWFu cyB0cmFuc2ZlciBpbiBwcm9ncmVzcywgbm9uemVybyBtZWFucyBpdCdzIGRvbmUuCi0gIFNob3cg dGhlIGZpbGUgdHJhbnNmZXIgcHJvZ3Jlc3MgY291bnRlciBhbmQgcGVyaGFwcyB2ZXJib3NlIHBh Y2tldCB0eXBlLgotKi8KLVZPSUQKLSNpZmRlZiBDS19BTlNJQwotc2hvd3BrdChjaGFyIGMpCi0j ZWxzZQotc2hvd3BrdChjKSBjaGFyIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHNob3dw a3QgKi8gewotCi0jaWZuZGVmIEdGVElNRVIKLSAgICBsb25nIGV0OyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBFbGFwc2VkIHRpbWUsIGVudGlyZSBiYXRjaCAgKi8KLSNlbmRpZiAvKiBH RlRJTUVSICovCi0gICAgQ0tfT0ZGX1QgaG93ZmFyOwkJCS8qIEhvdyBmYXIgaW50byBmaWxlICov Ci0gICAgbG9uZyBwZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGVyY2VudCBkb25l LCB0aGlzIGZpbGUgICAgICovCi0gICAgbG9uZyB0cDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogVHJhbnNmZXIgcmF0ZSwgZW50aXJlIGJhdGNoICovCi0gICAgbG9uZyBwczsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogUGFja2V0IHNpemUsIGN1cnJlbnQgcGFja2V0ICovCi0g ICAgQ0tfT0ZGX1QgbXl0ZmM7CQkJLyogTG9jYWwgY29weSBvZiBieXRlIGNvdW50ZXIgICovCi0K LSNpZmRlZiBHRlRJTUVSCi0gICAgQ0tGTE9BVCB0bm93OwotI2VuZGlmIC8qIEdGVElNRVIgKi8K LQotICAgIGlmIChuZXdkcHkpICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFB1dCB1cCBmaWxl bmFtZXMsIGV0YywgKi8KLSAgICAgIGRweWluaXQoKTsgICAgICAgICAgICAgICAgICAgICAgICAv KiBpZiB0aGV5J3JlIG5vdCB0aGVyZSBhbHJlYWR5LiAqLwotCi0gICAgaG93ZmFyID0gZmZjOyAg ICAgICAgICAgICAgICAgICAgICAgLyogSG93IGZhciAqLwotLyoKLSAgQ2FsY3VsYXRlIENQUyBy YXRlIGV2ZW4gaWYgbm90IGRpc3BsYXlpbmcgb24gc2NyZWVuIGZvciB1c2UgaW4gZmlsZQotICB0 cmFuc2ZlciBzdGF0aXN0aWNzLgotKi8KLSNpZmRlZiBHRlRJTUVSCi0gICAgdG5vdyA9IGdmdGlt ZXIoKTsgICAgICAgICAgICAgICAgICAgLyogVGltZSBzaW5jZSB3ZSBzdGFydGVkICovCi0gICAg cHMgPSAod2hhdCAmIFdfUkVDVikgPyBycGt0bCA6IHNwa3RsOyAvKiBQYWNrZXQgc2l6ZSAqLwot I2lmZGVmIENLX1JFU0VORAotICAgIGlmICh3aGF0ICYgV19TRU5EKQkJCS8qIEluIGNhc2Ugd2Ug ZGlkbid0IHN0YXJ0IGF0ICovCi0gICAgICBob3dmYXIgKz0gc2VuZHN0YXJ0OyAgICAgICAgICAg ICAgLyogIHRoZSBiZWdpbm5pbmcuLi4gKi8KLSAgICBlbHNlIGlmICh3aGF0ICYgV19SRUNWKQot ICAgICAgaG93ZmFyICs9IHJzX2xlbjsKLSNlbmRpZiAvKiBDS19SRVNFTkQgKi8KLSAgICBwZCA9 IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQZXJjZW50IGRvbmUuICovCi0gICAg aWYgKGMgPT0gTlVMKSB7ICAgICAgICAgICAgICAgICAgICAgLyogU3RpbGwgZ29pbmcsIGZpZ3Vy ZSAlIGRvbmUgKi8KLSAgICAgICAgaWYgKCFmc2l6ZSkgcmV0dXJuOwkJLyogRW1wdHkgZmlsZSwg ZG9uJ3QgYm90aGVyICovCi0gICAgICAgIHBkID0gKGZzaXplID4gOTkpID8gKGhvd2ZhciAvIChm c2l6ZSAvIChDS19PRkZfVCkxMDApKSA6IDA7Ci0gICAgICAgIGlmIChwZCA+IDEwMCkgcGQgPSAx MDA7ICAgICAgICAgLyogRXhwYW5zaW9uICovCi0gICAgfQotICAgIGlmIChjICE9IE5VTCkKLSAg ICAgIGlmICghY3hzZWVuICYmICFkaXNjYXJkICYmICFjenNlZW4pCi0gICAgICAgIHBkID0gMTAw OyAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBjb21wbGV0ZSwgc28gMTAwJS4gKi8KLQot ICAgIG15dGZjID0gKHBkIDwgMTAwKSA/IHRmYyArIGZmYyA6IHRmYzsgICAgLyogQ1BTICovCi0g ICAgdHAgPSAobG9uZykoKHRub3cgPiAwLjApID8gKENLRkxPQVQpIG15dGZjIC8gdG5vdyA6IDAp OwotICAgIGlmIChjICYmICh0cCA9PSAwKSkKLSAgICAgIHRwID0gZmZjOwotCi0gICAgY3BzID0g dHA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IGdsb2JhbCB2YXJpYWJsZSAqLwot ICAgIGlmIChjcHMgPiBwZWFrY3BzICYmICAgICAgICAgICAgICAgIC8qIFBlYWsgdHJhbnNmZXIg cmF0ZSAqLwotICAgICAgICAgKCh3aGF0ICYgV19TRU5EICYmIHNwYWNrZXRzID4gd3Nsb3RzICsg NCkgfHwKLQkgICghKHdoYXQgJiBXX1NFTkQpICYmIHNwYWNrZXRzID4gMTApKSkgewotICAgICAg ICBwZWFrY3BzID0gY3BzOwotICAgIH0KLQotI2Vsc2UgIC8qIE5vdCBHRlRJTUVSICovCi0KLSAg ICBldCA9IGd0aW1lcigpOyAgICAgICAgICAgICAgICAgICAgICAvKiBFbGFwc2VkIHRpbWUgICov Ci0gICAgcHMgPSAod2hhdCAmIFdfUkVDVikgPyBycGt0bCA6IHNwa3RsOyAvKiBQYWNrZXQgbGVu Z3RoICovCi0jaWZkZWYgQ0tfUkVTRU5ECi0gICAgaWYgKHdoYXQgJiBXX1NFTkQpCQkJLyogQW5k IGlmIHdlIGRpZG4ndCBzdGFydCBhdCAqLwotICAgICAgaG93ZmFyICs9IHNlbmRzdGFydDsgICAg ICAgICAgICAgIC8qICB0aGUgYmVnaW5uaW5nLi4uICovCi0gICAgZWxzZSBpZiAod2hhdCAmIFdf UkVDVikKLSAgICAgIGhvd2ZhciArPSByc19sZW47Ci0jZW5kaWYgLyogQ0tfUkVTRU5EICovCi0g ICAgcGQgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGVyY2VudCBkb25lLiAq LwotICAgIGlmIChjID09IE5VTCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIFN0aWxsIGdvaW5n LCBmaWd1cmUgJSBkb25lICovCi0gICAgICAgIGlmIChmc2l6ZSA9PSAwTCkgcmV0dXJuOyAgICAg ICAgLyogRW1wdHkgZmlsZSwgZG9uJ3QgYm90aGVyICovCi0gICAgICAgIHBkID0gKGZzaXplID4g OTkpID8gKGhvd2ZhciAvIChmc2l6ZSAvIChDS19PRkZfVCkxMDApKSA6IDA7Ci0gICAgICAgIGlm IChwZCA+IDEwMCkgcGQgPSAxMDA7ICAgICAgICAgLyogRXhwYW5zaW9uICovCi0gICAgfQotICAg IGlmIChjICE9IE5VTCkKLSAgICAgIGlmICghY3hzZWVuICYmICFkaXNjYXJkICYmICFjenNlZW4p Ci0gICAgICAgIHBkID0gMTAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBjb21wbGV0 ZSwgc28gMTAwJS4gKi8KLQotCi0jaWZuZGVmIENLX0NQUwotLyoKLSAgZnNlY3MgPSB0aW1lIChm cm9tIGd0aW1lcikgdGhhdCB0aGlzIGZpbGUgc3RhcnRlZCAoc2V0IGluIHNmaWxlKCkpLgotICBS YXRlIHNvIGZhciBpcyBmZmMgLyAoZXQgLSBmc2VjcyksICBlc3RpbWF0ZWQgdGltZSBmb3IgcmVt YWluaW5nIGJ5dGVzCi0gIGlzIChmc2l6ZSAtIGZmYykgLyAoZmZjIC8gKGV0IC0gZnNlY3MpKS4K LSovCi0gICAgdHAgPSAoaG93ZmFyID4gMCkgPyAoZnNpemUgLSBob3dmYXIpICogKGV0IC0gZnNl Y3MpIC8gaG93ZmFyIDogMDsKLSNlbmRpZiAvKiBDS19DUFMgKi8KLQotI2lmZGVmIENLX0NQUwot ICAgIG15dGZjID0gKHBkIDwgMTAwKSA/IHRmYyArIGZmYyA6IHRmYzsKLSAgICB0cCA9IChldCA+ IDApID8gbXl0ZmMgLyBldCA6IDA7CS8qIFRyYW5zZmVyIHJhdGUgKi8KLSAgICBpZiAoYyAmJiAo dHAgPT0gMCkpCQkJLyogV2F0Y2ggb3V0IGZvciBzdWJzZWNvbmQgdGltZXMgKi8KLSAgICAgICAg dHAgPSBmZmM7Ci0KLSAgICBjcHMgPSB0cDsJCQkJLyogU2V0IGdsb2JhbCB2YXJpYWJsZSAqLwot ICAgIGlmIChjcHMgPiBwZWFrY3BzICYmICAgICAgICAgICAgICAgIC8qIFBlYWsgdHJhbnNmZXIg cmF0ZSAqLwotICAgICAgICAgKCh3aGF0ICYgV19TRU5EICYmIHNwYWNrZXRzID4gd3Nsb3RzICsg NCkgfHwKLQkgICghKHdoYXQgJiBXX1NFTkQpICYmIHNwYWNrZXRzID4gMTApKSkgewotICAgICAg ICBwZWFrY3BzID0gY3BzOwotICAgIH0KLSNlbmRpZiAvKiBDS19DUFMgKi8KLQotI2VuZGlmIC8q IEdGVElNRVIgKi8KLQotICAgIGlmIChmZGlzcGxhID09IFhZRkRfUykgeyAgICAgICAgICAgIC8q IENSVCBkaXNwbGF5ICovCi0gICAgICAgIGNoYXIgYnVmZmVyWzEyOF07Ci0JLyogVGhlc2Ugc3By aW50ZnMgc2hvdWxkIGJlIHNhZmUgdW50aWwgd2UgaGF2ZSAzMi1kaWdpdCBudW1iZXJzICovCi0K LSAgICAgICAgaWYgKHBkID4gLTFMKQotICAgICAgICAgIHNwcmludGYoYnVmZmVyLCAiJWMlOXMl NWxkJSUlOGxkJThsZCAiLCBDUixja2ZzdG9hKGhvd2ZhcikscGQsdHAscHMpOwotICAgICAgICBl bHNlCi0gICAgICAgICAgc3ByaW50ZihidWZmZXIsICIlYyU5cyAgICAgICU4bGQlOGxkICIsIENS LGNrZnN0b2EoaG93ZmFyKSx0cCxwcyk7Ci0gICAgICAgIGNvbm9sKGJ1ZmZlcik7Ci0gICAgICAg IGhwb3MgPSAzMTsKLSAgICB9IGVsc2UgaWYgKGZkaXNwbGEgPT0gWFlGRF9SKSB7ICAgICAvKiBT RVJJQUwgKi8KLSAgICAgICAgbG9uZyBpLCBrOwotICAgICAgICBpZiAoaG93ZmFyIC0gb2xkZmZj IDwgMTAyNCkgICAgIC8qIFVwZGF0ZSBkaXNwbGF5IGV2ZXJ5IDFLICovCi0gICAgICAgICAgcmV0 dXJuOwotICAgICAgICBvbGRmZmMgPSBob3dmYXI7ICAgICAgICAgICAgICAgIC8qIFRpbWUgZm9y IG5ldyBkaXNwbGF5ICovCi0gICAgICAgIGsgPSAoaG93ZmFyIC8gMTAyNEwpIC0gZG90czsgICAg LyogSG93IG1hbnkgSyBzbyBmYXIgKi8KLSAgICAgICAgZm9yIChpID0gMEw7IGkgPCBrOyBpKysp IHsKLSAgICAgICAgICAgIGlmIChocG9zKysgPiAoY21kX2NvbHMgLSAzKSkgeyAvKiBUaW1lIHRv IHdyYXA/ICovCi0gICAgICAgICAgICAgICAgY29ub2xsKCIiKTsKLSAgICAgICAgICAgICAgICBo cG9zID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbm9jKCcuJyk7ICAgICAgICAg ICAgICAgICAvKiBQcmludCBhIGRvdCBmb3IgdGhpcyBLICovCi0gICAgICAgICAgICBkb3RzKys7 ICAgICAgICAgICAgICAgICAgICAgLyogQ291bnQgaXQgKi8KLSAgICAgICAgfQotICAgIH0KLX0K LQotCi0vKiAgQyBLIFMgQyBSIEUgRSBOICAtLSAgU2NyZWVuIGRpc3BsYXkgZnVuY3Rpb24gICov Ci0KLS8qCi0gIGNrc2NyZWVuKGYsYyxuLHMpCi0gICAgZiAtIGFyZ3VtZW50IGRlc2NyaXB0b3IK LSAgICBjIC0gYSBjaGFyYWN0ZXIgb3Igc21hbGwgaW50ZWdlcgotICAgIG4gLSBhIGxvbmcgaW50 ZWdlcgotICAgIHMgLSBhIHN0cmluZy4KLQotICBhbmQgZ2xvYmFsIGZkaXNwbGEgPSBTRVQgRklM RSBESVNQTEFZIHZhbHVlOgotCi0gICAgWFlGRF9OID0gTk9ORQotICAgIFhZRkRfUiA9IFNFUklB TDogICAgIERvdHMsIGV0Yywgd29ya3Mgb24gYW55IHRlcm1pbmFsLCBldmVuIGhhcmRjb3B5Lgot ICAgIFhZRkRfUyA9IENSVDogICAgICAgIFdvcmtzIG9uIGFueSBDUlQsIHdyaXRlcyBvdmVyIGN1 cnJlbnQgbGluZS4KLSAgICBYWUZEX0MgPSBGVUxMU0NSRUVOOiBSZXF1aXJlcyB0ZXJtaW5hbC1k ZXBlbmRlbnQgc2NyZWVuIGNvbnRyb2wuCi0gICAgWFlGRF9CID0gQlJJRUY6ICAgICAgTGlrZSBT RVJJQUwgYnV0IG9ubHkgZmlsZW5hbWUgJiBjb21wbGV0aW9uIHN0YXR1cy4KLSAgICBYWUZEX0cg PSBHVUk7ICAgICAgICBXaW5kb3dzIEdVSSwgc2FtZSBiZWhhdmlvciBhcyBGVUxMU0NSRUVOCi0q LwotVk9JRAotI2lmZGVmIENLX0FOU0lDCi1ja3NjcmVlbihpbnQgZiwgY2hhciBjLENLX09GRl9U IG4sY2hhciAqcykKLSNlbHNlCi1ja3NjcmVlbihmLGMsbixzKSBpbnQgZjsgY2hhciBjOyBDS19P RkZfVCBuOyBjaGFyICpzOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBzY3JlZW4gKi8gewot ICAgIGNoYXIgYnVmWzgwXTsKLSAgICBpbnQgbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBMZW5ndGggb2Ygc3RyaW5nICovCi0jaWZkZWYgVU5JWAotI2lmbmRlZiBOT0pDCi0gICAg aW50IG9iZzsKLV9QUk9UT1RZUCggVk9JRCBjb25iZ3QsIChpbnQpICk7Ci0jZW5kaWYgLyogTk9K QyAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSAgICBpbnQgZnRwID0gMDsKLQotICAgIGZ0cCA9ICh3 aGF0ICYgV19GVFApID8gMSA6IDA7CS8qIEZUUCBvciBLZXJtaXQ/ICovCi0KLSAgICBpZiAoIWxv Y2FsICYmICFmdHApCQkJLyogSW4gcmVtb3RlIG1vZGUgLSBkb24ndCBkbyB0aGlzICovCi0gICAg ICByZXR1cm47Ci0KLSAgICBpZiAoIXMpIHMgPSAiIjsKLQotICAgIGlmICghZnhkX2luaXRlZCkg ICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgaWYgbmVjZXNzYXJ5ICovCi0gICAgICBm eGRpbml0KGZkaXNwbGEpOwotCi0jaWZkZWYgVU5JWAotI2lmbmRlZiBOT0pDCi0gICAgb2JnID0g YmFja2dyZDsgICAgICAgICAgICAgICAgICAgICAgLyogUHJldmlvdXMgYmFja2dyb3VuZCBzdGF0 dXMgKi8KLSAgICBjb25iZ3QoMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZWUgaWYg cnVubmluZyBpbiBiYWNrZ3JvdW5kICovCi0gICAgaWYgKCFiYWNrZ3JkICYmIG9iZykgeyAgICAg ICAgICAgICAgLyogSnVzdCBjYW1lIGludG8gZm9yZWdyb3VuZD8gKi8KLSAgICAgICAgY29uY2Io KGNoYXIpZXNjYXBlKTsgICAgICAgICAgICAvKiBQdXQgY29uc29sZSBiYWNrIGluIENCUkVBSyBt b2RlICovCi0gICAgICAgIHNldGludCgpOyAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzdG9y ZSBpbnRlcnJ1cHRzICovCi0gICAgfQotI2VuZGlmIC8qIE5PSkMgKi8KLSNlbmRpZiAvKiBVTklY ICovCi0KLSAgICBpZiAoKGYgIT0gU0NSX1dNKSAmJiAoZiAhPSBTQ1JfRU0pKSAvKiBBbHdheXMg dXBkYXRlIHdhcm5pbmdzICYgZXJyb3JzICovCi0gICAgICBpZiAoIWRpc3BsYSB8fAotICAgICAg ICAgIChiYWNrZ3JkICYmIGJnc2V0KSB8fAotICAgICAgICAgIGZkaXNwbGEgPT0gWFlGRF9OIHx8 Ci0gICAgICAgICAgKHNlcnZlciAmJiAhc3J2ZGlzKQotICAgICAgICAgICkKLSAgICAgICAgcmV0 dXJuOwotCi0jaWZkZWYgVk1TCi0gICAgaWYgKGYgPT0gU0NSX0ZOKSAgICAgICAgICAgICAgICAg ICAgLyogVk1TIC0gc2hvcnRlbiB0aGUgbmFtZSAqLwotICAgICAgcyA9IHpyZWxuYW1lKHMsemd0 ZGlyKCkpOwotI2VuZGlmIC8qIFZNUyAqLwotCi0gICAgaWYgKGRlc3QgPT0gREVTVF9TKSAgICAg ICAgICAgICAgICAgLyogU0VUIERFU1RJTkFUSU9OIFNDUkVFTiAqLwotICAgICAgcmV0dXJuOyAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qICB3b3VsZCBpbnRlcmZlcmUuLi4gKi8KLQotI2lm ZGVmIEtVSQotICAgIGlmIChmZGlzcGxhID09IFhZRkRfRykgeyAgICAgICAgICAgIC8qIElmIGd1 aSBkaXNwbGF5IHNlbGVjdGVkICovCi0gICAgICAgIHNjcmVlbmcoZixjLG4scyk7ICAgICAgICAg ICAgICAgLyogY2FsbCB0aGUgZ3VpIHZlcnNpb24gKi8KLSAgICAgICAgcmV0dXJuOwotICAgIH0K LSNlbmRpZiAvKiBLVUkgKi8KLSNpZmRlZiBDS19DVVJTRVMKLSAgICBpZiAoZmRpc3BsYSA9PSBY WUZEX0MpIHsgICAgICAgICAgICAvKiBJZiBmdWxsc2NyZWVuIGRpc3BsYXkgc2VsZWN0ZWQgKi8K LSAgICAgICAgc2NyZWVuYyhmLGMsbixzKTsgICAgICAgICAgICAgICAvKiBjYWxsIHRoZSBmdWxs c2NyZWVuIHZlcnNpb24gKi8KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZiAvKiBDS19D VVJTRVMgKi8KLQotICAgIGxlbiA9IChpbnQpc3RybGVuKHMpOyAgICAgICAgICAgICAgIC8qIExl bmd0aCBvZiBzdHJpbmcgKi8KLQotICAgIHN3aXRjaCAoZikgeyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEhhbmRsZSBvdXIgZnVuY3Rpb24gY29kZSAqLwotICAgICAgY2FzZSBTQ1JfRk46ICAg ICAgICAgICAgICAgICAgICAgIC8qIEZpbGVuYW1lICovCi0gICAgICAgIGlmIChmZGlzcGxhID09 IFhZRkRfQikgewotI2lmZGVmIE5FV0ZUUAotCSAgICBpZiAoZnRwKQotCSAgICAgIHByaW50Zigi ICVzICVzIiwgd2hhdCAmIFdfU0VORCA/ICJQVVQiIDogIkdFVCIsIHMpOwotCSAgICBlbHNlCi0j ZW5kaWYgLyogTkVXRlRQICovCi0JICAgICAgcHJpbnRmKCIgJXMgJXMiLCB3aGF0ICYgV19TRU5E ID8gIlNFTkQiIDogIlJFQ1YiLCBzKTsKLSNpZmRlZiBVTklYCi0gICAgICAgICAgICBmZmx1c2go c3Rkb3V0KTsKLSNlbmRpZiAvKiBVTklYICovCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg IH0KLSNpZmRlZiBNQUMKLSAgICAgICAgY29ub2xsKCIiKTsgY29ub2wocyk7IGNvbm9jKFNQKTsg aHBvcyA9IGxlbiArIDE7Ci0jZWxzZQotICAgICAgICBja3N0cm5jcHkoZmJ1ZixzLDgwKTsKLSAg ICAgICAgYWJ1ZlswXSA9IGEyYnVmWzBdID0gTlVMOwotICAgICAgICBuZXdkcHkgPSAxOyAgICAg ICAgICAgICAgICAgICAgIC8qIE5ldyBmaWxlIHNvIHJlZnJlc2ggZGlzcGxheSAqLwotI2VuZGlm IC8qIE1BQyAqLwotICAgICAgICByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NSX0FOOiAgICAgICAg ICAgICAgICAgICAgICAvKiBBcy1uYW1lICovCi0gICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRf QikgewotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgIHByaW50ZigiKGFzICVzKSAiLHMpOwot I2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotI2lm ZGVmIE1BQwotICAgICAgICBpZiAoaHBvcyArIGxlbiA+IDc1KSB7IGNvbm9sbCgiIik7IGhwb3Mg PSAwOyB9Ci0gICAgICAgIGNvbm9sKCI9PiAiKTsgY29ub2wocyk7Ci0gICAgICAgIGlmICgoaHBv cyArPSAobGVuICsgMykpID4gNzgpIHsgY29ub2xsKCIiKTsgaHBvcyA9IDA7IH0KLSNlbHNlCi0g ICAgICAgIGlmIChhYnVmWzBdKSB7Ci0gICAgICAgICAgICBja3N0cm5jcHkoYTJidWYscyw4MCk7 Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBja3N0cm5jcHkoYWJ1ZixzLDgwKTsKLSAg ICAgICAgfQotI2VuZGlmIC8qIE1BQyAqLwotICAgICAgICByZXR1cm47Ci0KLSAgICAgIGNhc2Ug U0NSX0ZTOiAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlLXNpemUgKi8KLSAgICAgICAgaWYg KGZkaXNwbGEgPT0gWFlGRF9CKSB7Ci0gICAgICAgICAgICBwcmludGYoIiAoJXMpICglcyBieXRl JXMpIiwKLSNpZmRlZiBOT0lDUAotICAgICAgICAgICAgICAgICAgIChiaW5hcnkgPyAiYmluYXJ5 IiA6ICJ0ZXh0IikKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgZ2Ztb2RlKGJpbmFyeSwwKQot I2VuZGlmIC8qIE5PSUNQICovCi0gICAgICAgICAgICAgICAgICAgLCBja2ZzdG9hKG4pLCBuID09 IDEgPyAiIiA6ICJzIik7Ci0jaWZkZWYgVU5JWAotICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7 Ci0jZW5kaWYgLyogVU5JWCAqLwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0jaWZk ZWYgTUFDCi0gICAgICAgIHNwcmludGYoYnVmLCIsIFNpemU6ICVzIixja2ZzdG9hKG4pKTsgIGNv bm9sbChidWYpOyAgaHBvcyA9IDA7Ci0jZW5kaWYgLyogTUFDICovCi0gICAgICAgIHJldHVybjsK LQotICAgICAgY2FzZSBTQ1JfWEQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIFgtcGFja2V0IGRh dGEgKi8KLSAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKQotICAgICAgICAgIHJldHVybjsK LSNpZmRlZiBNQUMKLSAgICAgICAgY29ub2xsKCIiKTsgY29ub2xsKHMpOyBocG9zID0gMDsKLSNl bHNlCi0gICAgICAgIGNrc3RybmNweShmYnVmLHMsODApOwotICAgICAgICBhYnVmWzBdID0gYTJi dWZbMF0gPSBOVUw7Ci0jZW5kaWYgLyogTUFDICovCi0gICAgICAgIHJldHVybjsKLQotICAgICAg Y2FzZSBTQ1JfU1Q6ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgc3RhdHVzICovCi0gICAg ICAgIHN3aXRjaCAoYykgewotICAgICAgICAgIGNhc2UgU1RfT0s6ICAgICAgICAgICAgICAgICAg IC8qIFRyYW5zZmVycmVkIE9LICovCi0gICAgICAgICAgICBzaG93cGt0KCdaJyk7ICAgICAgICAg ICAgICAgLyogVXBkYXRlIG51bWJlcnMgb25lIGxhc3QgdGltZSAqLwotICAgICAgICAgICAgaWYg KGZkaXNwbGEgPT0gWFlGRF9CKSB7Ci0jaWZkZWYgR0ZUSU1FUgotCQlpZiAoZnB4ZnNlY3MpCi0J CSAgcHJpbnRmKCI6IE9LICglMC4zZiBzZWMsICVsZCBjcHMpIixmcHhmc2VjcywKLQkJCSAobG9u ZykoKENLRkxPQVQpZmZjIC8gZnB4ZnNlY3MpKTsKLSNlbHNlCi0JCWlmICh4ZnNlY3MpCi0JCSAg cHJpbnRmKCI6IE9LICglZCBzZWMsICVsZCBjcHMpIix4ZnNlY3MsZmZjL3hmc2Vjcyk7Ci0jZW5k aWYgLyogR0ZUSU1FUiAqLwotCQlwcmludGYoIlxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJu OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChocG9zICs9IDUpID4gNzgpIGNvbm9s bCgiIik7IC8qIFdyYXAgc2NyZWVuIGxpbmUuICovCi0gICAgICAgICAgICBjb25vbGwoIiBbT0td Iik7IGhwb3MgPSAwOyAgLyogUHJpbnQgT0sgbWVzc2FnZS4gKi8KLSAgICAgICAgICAgIGlmIChm ZGlzcGxhID09IFhZRkRfUykgeyAgICAvKiBXZSBkaWRuJ3Qgc2hvdyBaIHBhY2tldCB3aGVuICov Ci0gICAgICAgICAgICAgICAgY29ub2MoJ1onKTsgICAgICAgICAgICAgLyogaXQgY2FtZSwgc28g c2hvdyBpdCBub3cuICovCi0gICAgICAgICAgICAgICAgaHBvcyA9IDE7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICBjYXNlIFNUX0RJU0M6ICAgICAgICAg ICAgICAgICAvKiAgRGlzY2FyZGVkICovCi0gICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZE X0IpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIjogRElTQ0FSREVEXG4iKTsKLSAgICAgICAg ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKGhwb3MgKz0g MTIpID4gNzgpIGNvbm9sbCgiIik7Ci0gICAgICAgICAgICBjb25vbGwoIiBbZGlzY2FyZGVkXSIp OyBocG9zID0gMDsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGNhc2UgU1RfSU5U OiAgICAgICAgICAgICAgICAgIC8qICBJbnRlcnJ1cHRlZCAqLwotICAgICAgICAgICAgaWYgKGZk aXNwbGEgPT0gWFlGRF9CKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI6IElOVEVSUlVQVEVE XG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg ICBpZiAoKGhwb3MgKz0gMTQpID4gNzgpIGNvbm9sbCgiIik7Ci0gICAgICAgICAgICBjb25vbGwo IiBbaW50ZXJydXB0ZWRdIik7IGhwb3MgPSAwOwotICAgICAgICAgICAgcmV0dXJuOwotCi0JICBj YXNlIFNUX1NJTToKLSAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikgewotCQlpZiAo biA9PSBTS1BfWE5YKQotCQkgIHByaW50ZigiOiBXT1VMRCBCRSBUUkFOU0ZFUlJFRCAoTmV3IGZp bGUpXG4iKTsKLQkJZWxzZSBpZiAobiA9PSBTS1BfWFVQKQotCQkgIHByaW50ZigiOiBXT1VMRCBC RSBUUkFOU0ZFUlJFRCAoUmVtb3RlIGZpbGUgb2xkZXIpXG4iKTsKLQkJZWxzZSBpZiAobiA9PSBT S1BfU0lNKQotCQkgIHByaW50ZigiOiBXT1VMRCBCRSBUUkFOU0ZFUlJFRFxuIik7Ci0JCWVsc2Ug aWYgKG4gPiAwICYmIG4gPCBuc2tyZWFzb24pCi0JCSAgcHJpbnRmKCI6IFNLSVBQRUQgKCVzKVxu Iixza3JlYXNvbltuXSk7Ci0JCWVsc2UKLQkJICBwcmludGYoIjogU0tJUFBFRFxuIik7Ci0gICAg ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfSBlbHNlIGlmIChmZGlzcGxhID09IFhZ RkRfUykgewotICAgICAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfUyAmJiBmYnVmWzBd KSB7IC8qIENSVCBkaXNwbGF5ICovCi0gICAgICAgICAgICAgICAgICAgIGNvbm9sbCgiIik7ICAg ICAgICAgLyogTmV3IGxpbmUgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHdoYXQgJiBXX1NF TkQpIGNvbm9sKCJXb3VsZCBTZW5kOiAiKTsgLyogQWN0aW9uICovCi0gICAgICAgICAgICAgICAg ICAgIGVsc2UgaWYgKHdoYXQgJiBXX1JFQ1YpIGNvbm9sKCJXb3VsZCBSZWNlaXZlOiAiKTsKLSAg ICAgICAgICAgICAgICAgICAgY29ub2woZmJ1Zik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgq YWJ1ZikgY29ub2woIiA9PiAiKTsgY29ub2woYWJ1Zik7IC8qIE5hbWVzICovCi0gICAgICAgICAg ICAgICAgICAgIGlmICgqYTJidWYpIGNvbm9sKCIgPT4gIik7IGNvbm9sKGEyYnVmKTsgLyogTmFt ZXMgKi8KLSAgICAgICAgICAgICAgICAgICAgKmZidWYgPSBOVUw7ICphYnVmID0gTlVMOyAqYTJi dWYgPSBOVUw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbm9sbCgiIFtz aW11bGF0ZWRdIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAg ICAgICAgICAgaWYgKChocG9zICs9IDEwKSA+IDc4KSBjb25vbGwoIiIpOwotICAgICAgICAgICAg Y29ub2woIiBbc2ltdWxhdGVkXSIpOyBocG9zID0gMDsKLSAgICAgICAgICAgIHJldHVybjsKLQot ICAgICAgICAgIGNhc2UgU1RfU0tJUDogICAgICAgICAgICAgICAgIC8qICBTa2lwcGVkICovCi0g ICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKLQkJaWYgKG4gPT0gU0tQX1hOWCkK LQkJICBwcmludGYoIjogV09VTEQgQkUgVFJBTlNGRVJSRUQgKE5ldyBmaWxlKVxuIik7Ci0JCWVs c2UgaWYgKG4gPT0gU0tQX1hVUCkKLQkJICBwcmludGYoIjogV09VTEQgQkUgVFJBTlNGRVJSRUQg KFJlbW90ZSBmaWxlIG9sZGVyKVxuIik7Ci0JCWVsc2UgaWYgKG4gPT0gU0tQX1NJTSkKLQkJICBw cmludGYoIjogV09VTEQgQkUgVFJBTlNGRVJSRURcbiIpOwotCQllbHNlIGlmIChuID4gMCAmJiBu IDwgbnNrcmVhc29uKQotCQkgIHByaW50ZigiOiBTS0lQUEVEICglcylcbiIsc2tyZWFzb25bbl0p OwotCQllbHNlCi0JCSAgcHJpbnRmKCI6IFNLSVBQRURcbiIpOwotICAgICAgICAgICAgICAgIHJl dHVybjsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZmRpc3BsYSA9PSBYWUZEX1MpIHsKLSAgICAg ICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX1MgJiYgZmJ1ZlswXSkgeyAvKiBDUlQgZGlz cGxheSAqLwotICAgICAgICAgICAgICAgICAgICBjb25vbGwoIiIpOyAgICAgICAgIC8qIE5ldyBs aW5lICovCi0gICAgICAgICAgICAgICAgICAgIGlmICh3aGF0ICYgV19TRU5EKSBjb25vbCgiU2Vu ZGluZzogIik7IC8qIEFjdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh3aGF0 ICYgV19SRUNWKSBjb25vbCgiUmVjZWl2aW5nOiAiKTsKLSAgICAgICAgICAgICAgICAgICAgY29u b2woZmJ1Zik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgqYWJ1ZikgY29ub2woIiA9PiAiKTsg Y29ub2woYWJ1Zik7IC8qIE5hbWVzICovCi0gICAgICAgICAgICAgICAgICAgIGlmICgqYTJidWYp IGNvbm9sKCIgPT4gIik7IGNvbm9sKGEyYnVmKTsgLyogTmFtZXMgKi8KLSAgICAgICAgICAgICAg ICAgICAgKmZidWYgPSBOVUw7ICphYnVmID0gTlVMOyAqYTJidWYgPSBOVUw7Ci0gICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgIGNvbm9sbCgiIFtza2lwcGVkXSIpOwotICAgICAgICAg ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoaHBvcyArPSAx MCkgPiA3OCkgY29ub2xsKCIiKTsKLQkgICAgY29ub2woIiAiKTsgY29ub2woZmJ1Zik7Ci0gICAg ICAgICAgICBjb25vbGwoIiBbc2tpcHBlZF0iKTsgaHBvcyA9IDA7Ci0gICAgICAgICAgICByZXR1 cm47Ci0KLSAgICAgICAgICBjYXNlIFNUX0VSUjogICAgICAgICAgICAgICAgICAvKiBFcnJvciAq LwotICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7Ci0gICAgICAgICAgICAgICAg cHJpbnRmKCI6IEVSUk9SOiAlc1xuIixzKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBjb25vbGwoIiIpOwotICAgICAgICAgICAgY29ub2woIkVy cm9yOiAiKTsgY29ub2xsKHMpOyBocG9zID0gMDsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg ICAgICAgIGNhc2UgU1RfTVNHOiAgICAgICAgICAgICAgICAgIC8qIE1lc3NhZ2UgKi8KLSNpZmRl ZiBORVdGVFAKLSAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikgewotICAgICAgICAg ICAgICAgIGlmIChmdHAgJiYgZnRwX2RlYikKLQkJICBwcmludGYoIjogTUVTU0FHRTogJXNcbiIs cyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotI2VuZGlmIC8qIE5F V0ZUUCAqLwotICAgICAgICAgICAgY29ub2xsKCIiKTsKLSAgICAgICAgICAgIGNvbm9sKCJNZXNz YWdlOiAiKTsKLSAgICAgICAgICAgIGNvbm9sbChzKTsKLSAgICAgICAgICAgIGhwb3MgPSAwOwot ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgY2FzZSBTVF9SRUZVOiAgICAgICAgICAg ICAgICAgLyogUmVmdXNlZCAqLwotICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7 Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI6IFJFRlVTRURcbiIpOwotICAgICAgICAgICAgICAg IHJldHVybjsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZmRpc3BsYSA9PSBYWUZEX1MpIHsKLSAg ICAgICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX1MgJiYgZmJ1ZlswXSkgeyAvKiBDUlQg ZGlzcGxheSAqLwotICAgICAgICAgICAgICAgICAgICBjb25vbGwoIiIpOyAgICAgICAgIC8qIE5l dyBsaW5lICovCi0gICAgICAgICAgICAgICAgICAgIGlmICh3aGF0ICYgV19TRU5EKSBjb25vbCgi U2VuZGluZzogIik7IC8qIEFjdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh3 aGF0ICYgV19SRUNWKSBjb25vbCgiUmVjZWl2aW5nOiAiKTsKLSAgICAgICAgICAgICAgICAgICAg Y29ub2woZmJ1Zik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgqYWJ1ZikgY29ub2woIiA9PiAi KTsgY29ub2woYWJ1Zik7ICAgICAgLyogTmFtZXMgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYg KCphMmJ1ZikgY29ub2woIiA9PiAiKTsgY29ub2woYTJidWYpOyAgICAvKiBOYW1lcyAqLwotICAg ICAgICAgICAgICAgICAgICAqZmJ1ZiA9IE5VTDsgKmFidWYgPSBOVUw7ICphMmJ1ZiA9IE5VTDsK LSAgICAgICAgICAgICAgICAgICAgY29ub2xsKCIiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgY29ub2woIlJlZnVzZWQ6ICIpOyBjb25vbGwocyk7Ci0gICAgICAgICAgICAg ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29ub2xsKCIiKTsKLSAgICAg ICAgICAgIGNvbm9sKCJSZWZ1c2VkOiAiKTsgY29ub2xsKHMpOyBocG9zID0gMDsKLSAgICAgICAg ICAgIHJldHVybjsKLQotICAgICAgICAgIGNhc2UgU1RfSU5DOiAgICAgICAgICAgICAgICAgIC8q IEluY29tcGxldGUgKi8KLSAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikgewotICAg ICAgICAgICAgICAgIHByaW50ZigiOiBJTkNPTVBMRVRFXG4iKTsKLSAgICAgICAgICAgICAgICBy ZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKGhwb3MgKz0gMTIpID4gNzgp IGNvbm9sbCgiIik7Ci0gICAgICAgICAgICBjb25vbGwoIiBbaW5jb21wbGV0ZV0iKTsgaHBvcyA9 IDA7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg ICAgY29ub2xsKCIqKiogc2NyZWVuKCkgY2FsbGVkIHdpdGggYmFkIHN0YXR1cyAqKioiKTsKLSAg ICAgICAgICAgIGhwb3MgPSAwOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSNp ZmRlZiBNQUMKLSAgICAgIGNhc2UgU0NSX1BOOiAgICAgICAgICAgICAgICAgICAgICAvKiBQYWNr ZXQgbnVtYmVyICovCi0gICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikgewotICAgICAgICAg ICAgcmV0dXJuOwotICAgICAgICB9Ci0JY2ttYWttc2coYnVmLDgwLHMsIjogIixja2x0b2Eobiks TlVMTCk7Ci0gICAgICAgIGNvbm9sKGJ1Zik7IGhwb3MgKz0gKGludClzdHJsZW4oYnVmKTsgcmV0 dXJuOwotI2VuZGlmIC8qIE1BQyAqLwotCi0gICAgICBjYXNlIFNDUl9QVDogICAgICAgICAgICAg ICAgICAgICAgLyogUGFja2V0IHR5cGUgb3IgcHNldWRvdHlwZSAqLwotICAgICAgICBpZiAoZmRp c3BsYSA9PSBYWUZEX0IpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoYyA9PSAnWScp IHJldHVybjsgICAgICAgICAgIC8qIERvbid0IGJvdGhlciB3aXRoIEFDS3MgKi8KLSAgICAgICAg aWYgKGMgPT0gJ0QnKSB7ICAgICAgICAgICAgICAgICAvKiBJbiBkYXRhIHRyYW5zZmVyIHBoYXNl LCAqLwotICAgICAgICAgICAgc2hvd3BrdChOVUwpOyAgICAgICAgICAgICAgIC8qIHNob3cgcHJv Z3Jlc3MuICovCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSNpZm5kZWYgQU1JR0EK LSAgICAgICAgaWYgKGhwb3MrKyA+IDc3KSB7ICAgICAgICAgICAgICAvKiBJZiBuZWFyIHJpZ2h0 IG1hcmdpbiwgKi8KLSAgICAgICAgICAgIGNvbm9sbCgiIik7ICAgICAgICAgICAgICAgICAvKiBT dGFydCBuZXcgbGluZSAqLwotICAgICAgICAgICAgaHBvcyA9IDA7ICAgICAgICAgICAgICAgICAg IC8qIGFuZCByZXNldCBjb3VudGVyLiAqLwotICAgICAgICB9Ci0jZW5kaWYgLyogQU1JR0EgKi8K LSAgICAgICAgaWYgKGMgPT0gJ1onICYmIGZkaXNwbGEgPT0gWFlGRF9TKQotICAgICAgICAgIHJl dHVybjsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGNvbm9jKGMpOyAgICAgICAgICAgICAgICAg ICAgIC8qIERpc3BsYXkgdGhlIHBhY2tldCB0eXBlLiAqLwotI2lmZGVmIEFNSUdBCi0gICAgICAg IGlmIChjID09ICdHJykgY29ub2xsKCIiKTsgICAgICAgLyogTmV3IGxpbmUgYWZ0ZXIgRyBwYWNr ZXRzICovCi0jZW5kaWYgLyogQU1JR0EgKi8KLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBjYXNl IFNDUl9UQzogICAgICAgICAgICAgICAgICAgICAgLyogVHJhbnNhY3Rpb24gY29tcGxldGUgKi8K LSAgICAgICAgaWYgKHhmcmJlbCkgYmxlZXAoQlBfTk9URSk7Ci0gICAgICAgIGlmIChmZGlzcGxh ID09IFhZRkRfQikgeyAgICAgICAgLyogQnJpZWYgZGlzcGxheS4uLiAqLwotICAgICAgICAgICAg aWYgKGZpbGNudCA+IDEpIHsKLSAgICAgICAgICAgICAgICBsb25nIGZ4OwotICAgICAgICAgICAg ICAgIGZ4ID0gZmlsY250IC0gZmlscmVqOwotICAgICAgICAgICAgICAgIHByaW50ZigiIFNVTU1B Ulk6ICVsZCBmaWxlJXMiLCBmeCwgKChmeCA9PSAxKSA/ICIiIDogInMiKSk7Ci0gICAgICAgICAg ICAgICAgcHJpbnRmKCIsICVzIGJ5dGUlcyIsIGNrZnN0b2EodGZjKSwgKCh0ZmMgPT0gMSkgPyAi IiA6ICJzIikpOwotI2lmZGVmIEdGVElNRVIKLSAgICAgICAgICAgICAgICBwcmludGYoIiwgJTAu M2Ygc2VjLCAlbGQgY3BzIiwgZnB0c2VjcywgdGZjcHMpOwotI2Vsc2UKLSAgICAgICAgICAgICAg ICBwcmludGYoIiwgJWxkIHNlYywgJWxkIGNwcyIsIHRzZWNzLCB0ZmNwcyk7Ci0jZW5kaWYgLyog R0ZUSU1FUiAqLwotICAgICAgICAgICAgICAgIHByaW50ZigiLlxuIik7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb25vbGwoIiIpOwotICAgICAgICB9Ci0j aWZkZWYgVU5JWAotICAgICAgICBmZmx1c2goc3Rkb3V0KTsKLSNlbmRpZiAvKiBVTklYICovCi0g ICAgICAgIHJldHVybjsKLQotICAgICAgY2FzZSBTQ1JfRU06ICAgICAgICAgICAgICAgICAgICAg IC8qIEVycm9yIG1lc3NhZ2UgKi8KLSAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7Ci0g ICAgICAgICAgICBwcmludGYoIiBFUlJPUjogJXNcbiIscyk7Ci0gICAgICAgICAgICByZXR1cm47 Ci0gICAgICAgIH0KLSAgICAgICAgY29ub2xsKCIiKTsgY29ub2MoJz8nKTsgY29ub2xsKHMpOyBo cG9zID0gMDsgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9XTTogICAgICAgICAgICAgICAgICAg ICAgLyogV2FybmluZyBtZXNzYWdlICovCi0gICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikg ewotICAgICAgICAgICAgcHJpbnRmKCIgV0FSTklORzogJXNcbiIscyk7Ci0gICAgICAgICAgICBy ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgY29ub2xsKCIiKTsgY29ub2xsKHMpOyBocG9zID0g MDsgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9NUzogICAgICAgICAgICAgICAgICAgICAgLyog TWVzc2FnZSBmcm9tIG90aGVyIEtlcm1pdCAqLwotICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZE X0IpIHsKLSAgICAgICAgICAgIHByaW50ZigiIE1FU1NBR0U6ICVzXG4iLHMpOwotICAgICAgICAg ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGNvbm9sbCgiIik7IGNvbm9sbChzKTsgaHBv cyA9IDA7IHJldHVybjsKLQotICAgICAgY2FzZSBTQ1JfVFU6ICAgICAgICAgICAgICAgICAgICAg IC8qIFVuZGVsaW1pdGVkIHRleHQgKi8KLSAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKQot ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKChocG9zICs9IGxlbikgPiA3NykgeyBjb25v bGwoIiIpOyBocG9zID0gbGVuOyB9Ci0gICAgICAgIGNvbm9sKHMpOyByZXR1cm47Ci0KLSAgICAg IGNhc2UgU0NSX1ROOiAgICAgICAgICAgICAgICAgICAgICAvKiBUZXh0IGRlbGltaXRlZCBhdCBi ZWdpbm5pbmcgKi8KLSAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKQotICAgICAgICAgIHJl dHVybjsKLSAgICAgICAgY29ub2xsKCIiKTsgY29ub2wocyk7IGhwb3MgPSBsZW47IHJldHVybjsK LQotICAgICAgY2FzZSBTQ1JfVFo6ICAgICAgICAgICAgICAgICAgICAgIC8qIFRleHQgZGVsaW1p dGVkIGF0IGVuZCAqLwotICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpCi0gICAgICAgICAg cmV0dXJuOwotICAgICAgICBpZiAoKGhwb3MgKz0gbGVuKSA+IDc3KSB7IGNvbm9sbCgiIik7IGhw b3MgPSBsZW47IH0KLSAgICAgICAgY29ub2xsKHMpOyByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NS X1FFOiAgICAgICAgICAgICAgICAgICAgICAvKiBRdWFudGl0eSBlcXVhbHMgKi8KLSAgICAgICAg aWYgKGZkaXNwbGEgPT0gWFlGRF9CKQotICAgICAgICAgIHJldHVybjsKLQlja21ha21zZyhidWYs ODAscywiOiAiLGNrbHRvYShuKSxOVUxMKTsKLSAgICAgICAgY29ub2xsKGJ1Zik7IGhwb3MgPSAw OyByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NSX0NXOiAgICAgICAgICAgICAgICAgICAgICAvKiBD bG9zZSBmdWxsc2NyZWVuIHdpbmRvdyAqLwotICAgICAgICByZXR1cm47ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIE5vIHdpbmRvdyB0byBjbG9zZSAqLwotCi0gICAgICBjYXNlIFNDUl9DRDoK LSAgICAgICAgcmV0dXJuOwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBjb25vbGwoIioqKiBz Y3JlZW4oKSBjYWxsZWQgd2l0aCBiYWQgb2JqZWN0ICoqKiIpOwotICAgICAgICBocG9zID0gMDsK LSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLSNlbmRpZiAvKiBOT0RJU1BMQVkgKi8KLQotLyog IEUgUiBNIFMgRyAgLS0gIE5vbmZhdGFsIGVycm9yIG1lc3NhZ2UgICovCi0KLS8qIFNob3VsZCBi ZSB1c2VkIG9ubHkgZm9yIHByaW50aW5nIHRoZSBtZXNzYWdlIHRleHQgZnJvbSBhbiBFcnJvciBw YWNrZXQuICovCi0KLVZPSUQKLWVybXNnKG1zZykgY2hhciAqbXNnOyB7ICAgICAgICAgICAgICAg ICAvKiBQcmludCBlcnJvciBtZXNzYWdlICovCi0gICAgZGVidWcoRjExMCwiZXJtc2ciLG1zZyww KTsKLSAgICBpZiAobG9jYWwpCi0gICAgICB4eHNjcmVlbihTQ1JfRU0sMCwwTCxtc2cpOwotICAg IHRsb2coRjExMCwiUHJvdG9jb2wgRXJyb3I6Iixtc2csMEwpOwotfQotI2VuZGlmIC8qIE5PWEZF UiAqLwotCi1WT0lECi1zZXRzZXNsb2coeCkgaW50IHg7IHsKLSAgICBzZXNsb2cgPSB4OwotI2lm ZGVmIEtVSQotICAgIEt1aVNldFByb3BlcnR5KEtVSV9URVJNX0NBUFRVUkUseCwwKTsKLSNlbmRp ZiAvKiBLVUkgKi8KLX0KLQotVk9JRAotZG9jbGVhbihmYykgaW50IGZjOyB7ICAgICAgICAgICAg ICAgICAgIC8qIEdlbmVyYWwgY2xlYW51cCAqLwotI2lmZGVmIE9TMk9SVU5JWAotICAgIGV4dGVy biBpbnQgdHR5ZmQ7Ci0jZW5kaWYgLyogT1MyT1JVTklYICovCi0gICAgZXh0ZXJuIGludCAga2Vl cDsKLSAgICBleHRlcm4gaW50IGV4aXRoYW5ndXA7Ci0jaWZuZGVmIE5PWEZFUgotICAgIGV4dGVy biBjaGFyIGZpbG5hbVtdOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotI2lmbmRlZiBOT0lDUAotICAg IGludCB4OwotCi0gICAgaWYgKGZjID4gMCkKLSAgICAgIGRvc3RvcCgpOyAgICAgICAgICAgICAg ICAgLyogU3RvcCBhbGwgY29tbWFuZCBmaWxlcyBhbmQgZW5kIG1hY3JvcyAqLwotI2VuZGlmIC8q IE5PSUNQICovCi0KLSNpZm5kZWYgTk9YRkVSCi0gICAgaWYgKHBrdGxvZykgewotICAgICAgICAq cGt0ZmlsID0gJ1wwJzsKLSAgICAgICAgcGt0bG9nID0gMDsKLSAgICAgICAgemNsb3NlKFpQRklM RSk7Ci0gICAgfQotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgIGlmIChzZXNsb2cpIHsKLSAgICAg ICAgKnNlc2ZpbCA9ICdcMCc7Ci0gICAgICAgIHNldHNlc2xvZygwKTsKLSAgICAgICAgemNsb3Nl KFpTRklMRSk7Ci0gICAgfQotI2lmZGVmIFRMT0cKLSAgICBpZiAodHJhbG9nKSB7Ci0gICAgICAg IHRsb2coRjEwMCwiVHJhbnNhY3Rpb24gTG9nIENsb3NlZCIsIiIsMEwpOwotICAgICAgICAqdHJh ZmlsID0gJ1wwJzsKLSAgICAgICAgdHJhbG9nID0gMDsKLSAgICAgICAgemNsb3NlKFpURklMRSk7 Ci0gICAgfQotI2VuZGlmIC8qIFRMT0cgKi8KLQotICAgIGRlYnVnKEYxMDAsImRvY2xlYW4gY2Fs bGluZyBkb2xvZ2VuZCIsIiIsMCk7Ci0gICAgZG9sb2dlbmQoKTsgICAgICAgICAgICAgICAgICAg ICAgICAgLyogRW5kIGN1cnJlbnQgbG9nIHJlY29yZCBpZiBhbnkgKi8KLSNpZmRlZiBDT01NRU5U Ci0gICAgaWYgKGRpYWxvZykgeyAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgY29ubmVjdGlv biBsb2cgb3BlbiAqLwotCWRpYWxvZyA9IDA7Ci0gICAgICAgICpkaWFmaWwgPSAnXDAnOyAgICAg ICAgICAgICAgICAgLyogY2xvc2UgaXQuICovCi0gICAgICAgIHpjbG9zZShaRElGSUwpOwotICAg IH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSNpZm5kZWYgTk9JQ1AKLSNpZm5kZWYgTk9TUEwK LSAgICB6Y2xvc2UoWlJGSUxFKTsgICAgICAgICAgICAgICAgICAgICAvKiBSRUFEIGFuZCBXUklU RSBmaWxlcywgaWYgYW55LiAqLwotICAgIHpjbG9zZShaV0ZJTEUpOwotI2lmbmRlZiBOT1hGRVIK LSAgICB6Y2xvc2UoWklGSUxFKTsgICAgICAgICAgICAgICAgICAgICAvKiBBbmQgb3RoZXIgZmls ZXMgdG9vICovCi0gICAgeCA9IGNoa2ZuKFpPRklMRSk7CQkJLyogRG93bmxvYWQgaW4gcHJvZ3Jl c3M/ICovCi0gICAgZGVidWcoRjExMSwiZG9jbGVhbiBjaGtmbiBaT0ZJTEUiLGZpbG5hbSx4KTsK LSAgICBkZWJ1ZyhGMTExLCJkb2NsZWFuIGtlZXAiLCIiLGtlZXApOwotICAgIHpjbG9zZShaT0ZJ TEUpOwkJCS8qIENsb3NlIG91dHB1dCBmaWxlICovCi0gICAgaWYgKHggPiAwICYmICFrZWVwKSB7 CQkvKiBJZiBpdCB3YXMgYmVpbmcgZG93bmxvYWRlZCAqLwotCWlmIChmaWxuYW1bMF0pCi0JICB4 ID0gemRlbGV0KGZpbG5hbSk7CQkvKiBEZWxldGUgaWYgSU5DT01QTEVURSA9IERJU0NBUkQgKi8K LQlkZWJ1ZyhGMTExLCJkb2NsZWFuIGRvd25sb2FkIGZpbGVuYW1lIixmaWxuYW0seCk7Ci0gICAg fQotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgIHpjbG9zZShaU1lTRk4pOwotICAgIHpjbG9zZSha TUZJTEUpOwotCi0gICAgaWYgKGZjIDwgMSkgeyAgICAgICAgICAgICAgICAgICAgICAgLyogUkVT RVRpbmcsIG5vdCBFWElUaW5nICovCi0jaWZkZWYgREVCVUcKLSAgICAgICAgaWYgKGRlYmxvZykg eyAgICAgICAgICAgICAgICAgICAvKiBDbG9zZSB0aGUgZGVidWcgbG9nLiAqLwotICAgICAgICAg ICAgKmRlYmZpbCA9ICdcMCc7Ci0gICAgICAgICAgICBkZWJsb2cgPSAwOwotICAgICAgICAgICAg emNsb3NlKFpERklMRSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotICAgICAgICBy ZXR1cm47Ci0gICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0jZW5kaWYgLyogTk9JQ1AgKi8KLQot I2lmbmRlZiBOT0xPQ0FMCi0gICAgZGVidWcoRjEwMSwiZG9jbGVhbiBleGl0aGFuZ3VwIiwiIixl eGl0aGFuZ3VwKTsKLSAgICBpZiAobG9jYWwgJiYgZXhpdGhhbmd1cCkgewkJLyogQ2xvc2UgY29t bXVuaWNhdGlvbiBjb25uZWN0aW9uICovCi0gICAgICAgIGV4dGVybiBpbnQgaGFzbG9jazsKLQlp bnQgeDsKLQkKLQl4ID0gdHRjaGsoKTsKLQlkZWJ1ZyhGMTAxLCJkb2NsZWFuIHR0Y2hrKCkiLCIi LHgpOwotI2lmZGVmIE9TMk9SVU5JWAotCWRlYnVnKEYxMDEsImRvY2xlYW4gdHR5ZmQiLCIiLHR0 eWZkKTsKLSNlbmRpZiAvKiBPUzJPUlVOSVggKi8KLSAgICAgICAgaWYgKHggPj0gMAotI2lmZGVm IE9TMgotICAgICAgICAgICAgfHwgdHR5ZmQgIT0gLTEKLSNlbHNlCi0jaWZkZWYgVU5JWAotICAg ICAgICAgICAgfHwgaGFzbG9jayAgICAgICAgICAgICAgICAgIC8qIE1ha2Ugc3VyZSB3ZSBnZXQg bG9ja2ZpbGUhICovCi0gICAgICAgICAgICB8fCAoIW5ldHdvcmsgJiYgdHR5ZmQgPiAtMSkKLSNl bmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICApIHsKLSAgICAg ICAgICAgIGV4dGVybiBpbnQgd2FzY2xvc2VkLCB3aHljbG9zZWQ7Ci0JICAgIGRlYnVnKEYxMDAs ImRvY2xlYW4gaGFuZ2luZyB1cCBhbmQgY2xvc2luZyIsIiIsMCk7Ci0gICAgICAgICAgICBpZiAo bXNnZmxnKSB7Ci0jaWZkZWYgVU5JWAotICAgICAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOwot I2VuZGlmIC8qIFVOSVggKi8KLSAgICAgICAgICAgICAgICBwcmludGYoIkNsb3NpbmcgJXMuLi4i LHR0bmFtZSk7Ci0gICAgICAgICAgICB9Ci0jaWZuZGVmIE5PRElBTAotICAgICAgICAgICAgbWRt aHVwKCk7ICAgICAgICAgICAgICAgICAgIC8qIEhhbmd1cCB0aGUgbW9kZW0/Pz8gKi8KLSNlbmRp ZiAvKiBOT0RJQUwgKi8KLSAgICAgICAgICAgIHR0Y2xvcygwKTsgICAgICAgICAgICAgICAgICAv KiBDbG9zZSBleHRlcm5hbCBsaW5lLCBpZiBhbnkgKi8KLSAgICAgICAgICAgIGlmIChtc2dmbGcp IHsKLSAgICAgICAgICAgICAgICBwcmludGYoIk9LXG4iKTsKLSNpZmRlZiBVTklYCi0gICAgICAg ICAgICAgICAgZmZsdXNoKHN0ZG91dCk7Ci0jZW5kaWYgLyogVU5JWCAqLwotICAgICAgICAgICAg fQotICAgICAgICAgICAgaWYgKHdhc2Nsb3NlZCkgewotICAgICAgICAgICAgICAgIHdoeWNsb3Nl ZCA9IFdDX0NMT1M7Ci0jaWZuZGVmIE5PU1BMCi0gICAgICAgICAgICAgICAgaWYgKG5tYWMpIHsg ICAgICAgICAgICAgLyogQW55IG1hY3JvcyBkZWZpbmVkPyAqLwotICAgICAgICAgICAgICAgICAg ICBpbnQgazsgICAgICAgICAgICAgIC8qIFllcyAqLwotICAgICAgICAgICAgICAgICAgICBrID0g bWxvb2sobWFjdGFiLCJvbl9jbG9zZSIsbm1hYyk7ICAvKiBMb29rIHRoaXMgdXAgKi8KLSAgICAg ICAgICAgICAgICAgICAgaWYgKGsgPj0gMCkgeyAgICAgICAgICAgICAgICAgICAgICAgLyogSWYg Zm91bmQsICovCi0gICAgICAgICAgICAgICAgICAgICAgICB3YXNjbG9zZWQgPSAwOwotICAgICAg ICAgICAgICAgICAgICAgICAgLyogcHJpbnRmKCJPTl9DTE9TRSBET0NMRUFOXG4iKTsgKi8KLSAg ICAgICAgICAgICAgICAgICAgICAgICoobWFjdGFiW2tdLmt3ZCkgPSBOVUw7ICAgICAgICAgLyog U2VlIGNvbW1lbnQgYmVsb3cgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb2RvKGss Y2tpdG9hKHdoeWNsb3NlZCksMCkgPiAtMSkgLyogc2V0IGl0IHVwLCAqLwotICAgICAgICAgICAg ICAgICAgICAgICAgICBwYXJzZXIoMSk7ICAgICAgICAgICAgICAgICAgICAvKiBhbmQgZXhlY3V0 ZSBpdCAqLwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlm IC8qIE5PU1BMICovCi0gICAgICAgICAgICAgICAgd2FzY2xvc2VkID0gMDsKLSAgICAgICAgICAg IH0KLSAgICAgICAgfQotICAgICAgICBja3N0cm5jcHkodHRuYW1lLGRmdHR5LFRUTkFNTEVOKTsg LyogUmVzdG9yZSBkZWZhdWx0IHR0eSAqLwotICAgICAgICBsb2NhbCA9IGRmbG9jOyAgICAgICAg ICAgICAgICAgIC8qIEFuZCBkZWZhdWx0IHJlbW90ZS9sb2NhbCBzdGF0dXMgKi8KLSAgICB9Ci0j aWZkZWYgREVCVUcKLSAgICBlbHNlIGlmIChsb2NhbCkgZGVidWcoRjEwMCwiZG9jbGVhbiBoYW5n dXAvY2xvc2Ugc2tpcHBlZCIsIiIsMCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLSNlbmRpZiAvKiBO T0xPQ0FMICovCi0KLSNpZmRlZiBORVdGVFAKLSAgICBmdHBieWUoKTsJCQkJLyogSWYgRlRQIGNv bm5lY3Rpb24gb3BlbiwgY2xvc2UgaXQgKi8KLSNlbmRpZiAvKiBORVdGVFAgKi8KLQotI2lmZGVm IElLU0QKLSAgICBpZiAoaW5zZXJ2ZXIpCi0gICAgICB0dGNsb3MoMCk7CQkJLyogSWYgSUtTRCwg Y2xvc2Ugc29ja2V0ICovCi0jZW5kaWYgLyogSUtTRCAqLwotCi0jaWZuZGVmIE5PU1BMCi0vKgot ICBJZiBhIG1hY3JvIG5hbWVkICJvbl9leGl0IiBpcyBkZWZpbmVkLCBleGVjdXRlIGl0LiAgQWxz byByZW1vdmUgaXQgZnJvbSB0aGUKLSAgbWFjcm8gdGFibGUsIGluIGNhc2UgaXRzIGRlZmluaXRp b24gaW5jbHVkZXMgYW4gRVhJVCBvciBRVUlUIGNvbW1hbmQsIHdoaWNoCi0gIHdvdWxkIGNhdXNl IG11Y2ggcmVjdXJzaW9uIGFuZCB3b3VsZCBwcmV2ZW50IHRoZSBwcm9ncmFtIGZyb20gZXZlciBh Y3R1YWxseQotICBFWElUaW5nLgotKi8KLSAgICBpZiAobm1hYykgeyAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBBbnkgbWFjcm9zIGRlZmluZWQ/ICovCi0gICAgICAgIGludCBrOyAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogWWVzICovCi0gICAgICAgIGNoYXIgKiBjbWQgPSAib25fZXhp dCI7ICAgICAgICAgLyogTVNWQyAyLnggY29tcGlsZXIgZXJyb3IgKi8KLSAgICAgICAgayA9IG1s b29rKG1hY3RhYixjbWQsbm1hYyk7ICAgICAvKiBMb29rIHVwICJvbl9leGl0IiAqLwotICAgICAg ICBpZiAoayA+PSAwKSB7ICAgICAgICAgICAgICAgICAgIC8qIElmIGZvdW5kLCAqLwotI2lmZGVm IENPTU1FTlQKLQkgICAgLyogVGhpcyBtYWtlcyBhIG1lc3MgaWYgT05fRVhJVCBpdHNlbGYgZXhl Y3V0ZXMgbWFjcm9zICovCi0gICAgICAgICAgICAqKG1hY3RhYltrXS5rd2QpID0gTlVMOyAgICAg LyogcG9rZSBpdHMgbmFtZSBmcm9tIHRoZSB0YWJsZSwgKi8KLSNlbHNlCi0JICAgIC8qIFJlcGxh Y2UgdGhlIGtleXdvcmQgd2l0aCBzb21ldGhpbmcgdGhhdCBkb2Vzbid0IHdyZWNrIHRoZSAqLwot CSAgICAvKiBvcmRlciBvZiB0aGUga2V5d29yZCB0YWJsZSAqLwotCSAgICBja3N0cm5jcHkobWFj dGFiW2tdLmt3ZCwib25fZXh4eCIsOCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAg ICAgaWYgKGRvZG8oaywiIiwwKSA+IC0xKSAgICAgIC8qIHNldCBpdCB1cCwgKi8KLSAgICAgICAg ICAgICAgcGFyc2VyKDEpOyAgICAgICAgICAgICAgICAvKiBhbmQgZXhlY3V0ZSBpdCAqLwotICAg ICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIE5PU1BMICovCi0vKgotICBQdXQgY29uc29sZSB0ZXJt aW5hbCBiYWNrIHRvIG5vcm1hbC4gIFRoaXMgaXMgZG9uZSBoZXJlIGJlY2F1c2UgdGhlCi0gIE9O X0VYSVQgbWFjcm8gY2FsbHMgdGhlIHBhcnNlciwgd2hpY2ggbWVkZGxlcyB3aXRoIGNvbnNvbGUg dGVybWluYWwgbW9kZXMuCi0qLwotICAgIGNvbnJlcygpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFJlc3RvcmUgY29uc29sZSB0ZXJtaW5hbC4gKi8KLQotI2lmZGVmIENPTU1FTlQKLS8q IFNob3VsZCBiZSBubyBuZWVkIGZvciB0aGlzLCBhbmQgbWF5YmUgaXQncyBzY3Jld2luZyB0aGlu Z3MgdXA/ICovCi0gICAgY29ubm9pKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVHVy biBvZmYgY29uc29sZSBpbnRlcnJ1cHQgdHJhcHMgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0K LSAgICAvKiBEZWxldGUgdGhlIFN0YXJ0dXAgRmlsZSBpZiB3ZSBhcmUgc3VwcG9zZWQgdG8uICov Ci0jaWZuZGVmIE5PSUNQCi0gICAgewotICAgICAgICBleHRlcm4gaW50IERlbGV0ZVN0YXJ0dXBG aWxlOwotICAgICAgICBkZWJ1ZyhGMTExLCJkb2NsZWFuIERlbGV0ZVN0YXJ0dXBGaWxlIixjbWRm aWwsRGVsZXRlU3RhcnR1cEZpbGUpOwotICAgICAgICBpZiAoRGVsZXRlU3RhcnR1cEZpbGUpIHsK LSAgICAgICAgICAgIGludCByYyA9IHpkZWxldChjbWRmaWwpOwotICAgICAgICAgICAgZGVidWco RjExMSwiZG9jbGVhbiB6ZGVsZXQiLGNtZGZpbCxyYyk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5k aWYgLyogTk9JQ1AgKi8KLSAgICBzeXNjbGVhbnVwKCk7ICAgICAgICAgICAgICAgICAgICAgICAv KiBTeXN0ZW0tZGVwZW5kZW50IGNsZWFudXAsIGxhc3QgKi8KLX0KLQotLyogIEQgTyBFIFggSSBU ICAtLSAgRXhpdCBmcm9tIHRoZSBwcm9ncmFtLiAgKi8KLQotLyoKLSAgRmlyc3QgYXJnIGlzIGdl bmVyYWwsIHN5c3RlbS1pbmRlcGVuZGVudCBzeW1ib2w6IEdPT0RfRVhJVCBvciBCQURfRVhJVC4K LSAgSWYgc2Vjb25kIGFyZyBpcyAtMSwgdGFrZSAxc3QgYXJnIGxpdGVyYWxseS4KLSAgSWYgc2Vj b25kIGFyZyBpcyBub3QgLTEsIHdvcmsgaXQgaW50byB0aGUgZXhpdCBjb2RlLgotKi8KLVZPSUQK LWRvZXhpdChleGl0c3RhdCxjb2RlKSBpbnQgZXhpdHN0YXQsIGNvZGU7IHsKLSAgICBleHRlcm4g aW50IHhfbG9nZ2VkLCBxdWl0dGluZzsKLSNpZmRlZiBPUzIKLSAgICBleHRlcm4gaW50IGRpc3Bs YXlfZGVtbzsKLSAgICBleHRlcm4gaW50IFN5c0luaXRlZDsKLSNlbmRpZiAvKiBPUzIgKi8KLSNp ZmRlZiBDS19LRVJCRVJPUwotI2lmZGVmIEtSQjQKLSAgICBleHRlcm4gaW50IGtyYjRfYXV0b2Rl bDsKLSNlbmRpZiAvKiBLUkI0ICovCi0jaWZkZWYgS1JCNQotICAgIGV4dGVybiBpbnQga3JiNV9h dXRvZGVsOwotI2VuZGlmIC8qIEtSQjUgKi8KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotCi0j aWZkZWYgVk1TCi0gICAgY2hhciBlbnZzdHJbNjRdOwotICAgIHN0YXRpYyAkREVTQ1JJUFRPUihz eW1uYW0sIkNLRVJNSVRfU1RBVFVTIik7Ci0gICAgc3RhdGljIHN0cnVjdCBkc2MkZGVzY3JpcHRv cl9zIHN5bXZhbDsKLSNlbmRpZiAvKiBWTVMgKi8KLSAgICBpbnQgaTsKLQotI2lmZGVmIERFQlVH Ci0jaWZkZWYgVVNFX0xVQ0FDSEUKLSAgICBleHRlcm4gbG9uZyBsdWNhbGxzLCBsdWhpdHMsIHh4 aGl0cywgbHVsb29wOwotICAgIGV4dGVybiBpbnQgbHVzaXplOwotI2VuZGlmIC8qIFVTRV9MVUNB Q0hFICovCi0jaWZuZGVmIE5PU1BMCi0gICAgZXh0ZXJuIGludCBjbWRzdGF0c1tdOwotI2VuZGlm IC8qIE5PU1BMICovCi0KLSAgICBxdWl0dGluZysrOwotCi0jaWZkZWYgT1MyCi0gICAgaWYgKCAh U3lzSW5pdGVkICkgewotICAgICAgICBzdGF0aWMgaW50IGluaXRpbmcgPSAwOwotICAgICAgICBp ZiAoIGluaXRpbmcgKQotCSAgZXhpdCgyNTMpOwotICAgICAgICBpbml0aW5nID0gMTsKLSAgICAg ICAgc3lzaW5pdCgpOwotICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgIGlmIChkZWJsb2cp IHsKLSNpZmRlZiBVU0VfTFVDQUNIRQotCWRlYnVnKEYxMDEsImxvb2t1cCBjYWNoZSBzaXplIiwi IixsdXNpemUpOwotCWRlYnVnKEYxMDEsImxvb2t1cCBjYWxscyAuLi4uIiwiIixsdWNhbGxzKTsK LQlkZWJ1ZyhGMTAxLCJsb29rdXAgY2FjaGUgaGl0cyIsIiIsbHVoaXRzKTsKLQlkZWJ1ZyhGMTAx LCJsb29rdXAgc3RhcnQgaGl0cyIsIiIseHhoaXRzKTsKLQlkZWJ1ZyhGMTAxLCJsb29rdXAgbG9v cCBpdGVyYXRpb25zIiwiIixsdWxvb3ApOwotI2VuZGlmIC8qIFVTRV9MVUNBQ0hFICovCi0jaWZu ZGVmIE5PU1BMCi0JZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0JICAgIGlmIChjbWRzdGF0 c1tpXSkKLQkgICAgICBkZWJ1ZyhGMTExLCJDTVNUQVRTIixja2l0b2EoaSksY21kc3RhdHNbaV0p OwotCX0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCWRlYnVnKEYxMDEsImRvZXhpdCBleGl0c3RhdCIs IiIsZXhpdHN0YXQpOwotCWRlYnVnKEYxMDEsImRvZXhpdCBjb2RlIiwiIixjb2RlKTsKLQlkZWJ1 ZyhGMTAxLCJkb2V4aXQgeGl0c3RhIiwiIix4aXRzdGEpOwotICAgIH0KLSNlbmRpZiAvKiBERUJV RyAqLwotCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSAgICAvKiBJZiB3ZSBhcmUgYXV0b21hdGljYWxs eSBkZXN0cm95aW5nIEtlcmJlcm9zIGNyZWRlbnRpYWxzIG9uIEV4aXQgKi8KLSAgICAvKiBkbyBp dCBub3cuICovCi0jaWZkZWYgS1JCNAotICAgIGlmIChrcmI0X2F1dG9kZWwgPT0gS1JCX0RFTF9F WCkgewotICAgICAgICBleHRlcm4gc3RydWN0IGtyYl9vcF9kYXRhIGtyYl9vcDsKLSAgICAgICAg a3JiX29wLnZlcnNpb24gPSA0OwotICAgICAgICBrcmJfb3AuY2FjaGUgPSBOVUxMOwotICAgICAg ICBja19rcmI0X2Rlc3Ryb3koJmtyYl9vcCk7Ci0gICAgfQotI2VuZGlmIC8qIEtSQjQgKi8KLSNp ZmRlZiBLUkI1Ci0gICAgaWYgKGtyYjVfYXV0b2RlbCA9PSBLUkJfREVMX0VYKSB7Ci0gICAgICAg IGV4dGVybiBzdHJ1Y3Qga3JiX29wX2RhdGEga3JiX29wOwotICAgICAgICBleHRlcm4gY2hhciAq IGtyYjVfZF9jYzsKLSAgICAgICAga3JiX29wLnZlcnNpb24gPSA1OwotICAgICAgICBrcmJfb3Au Y2FjaGUgPSBrcmI1X2RfY2M7Ci0gICAgICAgIGNrX2tyYjVfZGVzdHJveSgma3JiX29wKTsKLSAg ICB9Ci0jZW5kaWYgLyogS1JCNSAqLwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0KLSNpZm5k ZWYgTk9MT0NBTAotI2lmZGVmIE9TMgotICAgIGlmIChTeXNJbml0ZWQpCi0gICAgewotI2lmZGVm IERDTURCVUYKLSAgICAgICAgZXh0ZXJuIHN0cnVjdCBjbWRwdHIgKmNtZHN0azsKLSNlbHNlCi0g ICAgICAgIGV4dGVybiBzdHJ1Y3QgY21kcHRyIGNtZHN0a1tdOwotI2VuZGlmIC8qIERDTURCVUYg Ki8KLSAgICAgICAgZXh0ZXJuIGludCB0dF9zdGF0dXNbXTsKLSAgICAgICAgZXh0ZXJuIGludCB2 bW9kZTsKLQotICAgICAgICAvKiBJZiB0aGVyZSBpcyBhIGRlbW8gc2NyZWVuIHRvIGJlIGRpc3Bs YXllZCwgZGlzcGxheSBpdCAqLwotICAgICAgICBpZiAoZGlzcGxheV9kZW1vKSB7Ci0gICAgICAg ICAgICBkZW1vc2NybihWQ01EKTsKLSAgICAgICAgICAgIGRpc3BsYXlfZGVtbyA9IDA7Ci0gICAg ICAgIH0KLSNpZm5kZWYgS1VJCi0gICAgICAgIC8qIFRoaXMgaXMgZ29pbmcgdG8gYmUgaGlkZW91 cy4gIElmIHdlIGhhdmUgYSBzdGF0dXMgbGluZSAqLwotICAgICAgICAvKiBpbiB0aGUgY29tbWFu ZCB3aW5kb3cgdHVybiBpdCBvZmYgYmVmb3JlIHdlIGV4aXQuICAgICAgKi8KLQotICAgICAgICBp ZiAoIHR0X3N0YXR1c1tWQ01EXSAmJiB2bW9kZSA9PSBWQ01EICkgewotICAgICAgICAgICAgZG9t YWMoIl9jbGVhcl9zdGF0dXNsaW5lIiwic2V0IGNvbW1hbmQgc3RhdHVzbGluZSBvZmYiLAotICAg ICAgICAgICAgICAgICAgIGNtZHN0a1tjbWRsdmxdLmNjZmxncyk7Ci0gICAgICAgICAgICBkZWxt YWMoIl9jbGVhcl9zdGF0dXNsaW5lIiwxKTsKLSAgICAgICAgICAgIFJlcXVlc3RTY3JlZW5NdXRl eCgtMSk7Ci0gICAgICAgICAgICBWc2NybklzRGlydHkodm1vZGUpOwotICAgICAgICAgICAgUmVs ZWFzZVNjcmVlbk11dGV4KCk7Ci0gICAgICAgICAgICB3aGlsZSAoIElzVnNjcm5EaXJ0eSh2bW9k ZSkgKQotICAgICAgICAgICAgICAgIG1zbGVlcCgyMDApOwotICAgICAgICAgICAgUmVxdWVzdFNj cmVlbk11dGV4KC0xKTsKLSAgICAgICAgICAgIFJlbGVhc2VTY3JlZW5NdXRleCgpOwotICAgICAg ICB9Ci0jZW5kaWYgLyogS1VJICovCi0gICAgICAgIERpYWxlclNlbmQoT1BUX0tFUk1JVF9FWElU LGV4aXRzdGF0KTsKLSNpZm5kZWYgS1VJCi0gICAgICAgIGRlYnVnKEYxMDAsImRvZXhpdCBhYm91 dCB0byBtc2xlZXAiLCIiLDApOwotCi0gICAgICAgIGlmICggaXNXaW45NSgpICkKLSAgICAgICAg ICAgIG1zbGVlcCgyNTApOwotI2VuZGlmIC8qIEtVSSAqLwotICAgIH0KLSNlbmRpZiAvKiBPUzIg Ki8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLSNpZmRlZiBJS1NECi0jaWZkZWYgQ0tfTE9HSU4K LSAgICBpZiAoaW5zZXJ2ZXIgJiYgeF9sb2dnZWQpIHsKLSNpZm5kZWYgTk9TUEwKLS8qCi0gIElm IGEgbWFjcm8gbmFtZWQgIm9uX2xvZ291dCIgaXMgZGVmaW5lZCwgZXhlY3V0ZSBpdC4gIEFsc28g cmVtb3ZlIGl0IGZyb20gdGhlCi0gIG1hY3JvIHRhYmxlLCBpbiBjYXNlIGl0cyBkZWZpbml0aW9u IGluY2x1ZGVzIGFuIEVYSVQgb3IgUVVJVCBjb21tYW5kLCB3aGljaAotICB3b3VsZCBjYXVzZSBt dWNoIHJlY3Vyc2lvbiBhbmQgd291bGQgcHJldmVudCB0aGUgcHJvZ3JhbSBmcm9tIGV2ZXIgYWN0 dWFsbHkKLSAgRVhJVGluZy4KLSovCi0JaWYgKG5tYWMpIHsJCQkvKiBBbnkgbWFjcm9zIGRlZmlu ZWQ/ICovCi0JICAgIGludCBrOwkJCS8qIFllcyAqLwotCSAgICBjaGFyICogY21kID0gIm9uX2xv Z291dCI7CS8qIE1TVkMgMi54IGNvbXBpbGVyIGVycm9yICovCi0JICAgIGsgPSBtbG9vayhtYWN0 YWIsY21kLG5tYWMpOwkvKiBMb29rIHVwICJvbl9sb2dvdXQiICovCi0JICAgIGlmIChrID49IDAp IHsJCS8qIElmIGZvdW5kLCAqLwotCQkqKG1hY3RhYltrXS5rd2QpID0gTlVMOwkvKiBwb2tlIGl0 cyBuYW1lIGZyb20gdGhlIHRhYmxlLCAqLwotCQlpZiAoZG9kbyhrLCIiLDApID4gLTEpCS8qIHNl dCBpdCB1cCwgKi8KLQkJICBwYXJzZXIoMSk7CQkvKiBhbmQgZXhlY3V0ZSBpdCAqLwotCSAgICB9 Ci0JfQotI2VuZGlmIC8qIE5PU1BMICovCi0JenZsb2dvdXQoKTsKLSAgICB9Ci0jZW5kaWYgLyog Q0tfTE9HSU4gKi8KLSNlbmRpZiAvKiBJS1NEICovCi0KLSAgICBkZWJ1ZyhGMTAwLCJkb2V4aXQg YWJvdXQgdG8gZG9jbGVhbiIsIiIsMCk7Ci0gICAgZG9jbGVhbigxKTsgICAgICAgICAgICAgICAg ICAgICAgICAgLyogQ2xlYW4gdXAgbW9zdCB0aGluZ3MgKi8KLQotI2lmZGVmIFZNUwotICAgIGlm IChjb2RlID09IC0xKQotICAgICAgY29kZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFNpbmNlIHdlIHNldCB0d28gZGlmZmVyZW50IGl0ZW1zICovCi0gICAgc3ByaW50ZihlbnZzdHIs IiVkIiwgZXhpdHN0YXQgfCBjb2RlKTsgLyogU0FGRSAqLwotICAgIHN5bXZhbC5kc2Mkd19sZW5n dGggPSAoaW50KXN0cmxlbihlbnZzdHIpOwotICAgIHN5bXZhbC5kc2MkYV9wb2ludGVyID0gZW52 c3RyOwotICAgIHN5bXZhbC5kc2MkYl9jbGFzcyA9IERTQyRLX0NMQVNTX1M7Ci0gICAgc3ltdmFs LmRzYyRiX2R0eXBlID0gRFNDJEtfRFRZUEVfVDsKLSAgICBpID0gMjsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBTdG9yZSBpbiBnbG9iYWwgdGFibGUgKi8KLSNpZmRlZiBDT01NRU5U ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXJ0aW4gWmluc2VyICovCi0gICAgTElCJFNF VF9TWU1CT0woJnN5bW5hbSwgJnN5bXZhbCwgJmkpOwotI2Vsc2UKLSAgICBsaWIkc2V0X3N5bWJv bCgmc3ltbmFtLCAmc3ltdmFsLCAmaSk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIGlmIChl eGl0c3RhdCA9PSBCQURfRVhJVCkKLSAgICAgIGV4aXRzdGF0ID0gU1MkX0FCT1JUIHwgU1RTJE1f SU5ISUJfTVNHOwotICAgIGlmIChleGl0c3RhdCA9PSBHT09EX0VYSVQpCi0gICAgICBleGl0c3Rh dCA9IFNTJF9OT1JNQUwgfCBTVFMkTV9JTkhJQl9NU0c7Ci0jZWxzZSAvKiBOb3QgVk1TICovCi0g ICAgaWYgKGNvZGUgIT0gLTEpICAgICAgICAgICAgICAgICAgICAgLyogVGFrZSAxc3QgYXJnIGxp dGVyYWxseSAqLwotICAgICAgZXhpdHN0YXQgfD0gY29kZTsKLSNlbmRpZiAvKiBWTVMgKi8KLQot I2lmZGVmIElLU0QKLSNpZmRlZiBJS1NEQgotICAgIGRlYnVnKEYxMDEsImRvZXhpdCBpa2Rib3Bl biIsIiIsaWtkYm9wZW4pOwotICAgIGlmIChpa2Rib3BlbiAmJiBkYmZwKSB7ICAgICAgICAgICAg IC8qIElmIElLU0QgZGF0YWJhc2Ugb3BlbiAqLwotICAgICAgICBpbnQgeDsKLSAgICAgICAgeCA9 IGZyZWVzbG90KG15ZGJzbG90KTsgICAgICAgICAvKiBGcmVlIG91ciBzbG90Li4uICovCi0gICAg ICAgIGRlYnVnKEYxMDEsImRvZXhpdCBmcmVlc2xvdCIsIiIseCk7Ci0gICAgICAgIGZjbG9zZShk YmZwKTsgICAgICAgICAgICAgICAgICAgLyogYW5kIGNsb3NlIGl0LiAqLwotICAgIH0KLSNlbmRp ZiAvKiBJS1NEQiAqLwotI2VuZGlmIC8qIElLU0QgKi8KLQotLyogV2UgaGF2ZSBwdXQgdGhpcyBv ZmYgdGlsbCB0aGUgdmVyeSBsYXN0IG1vbWVudC4uLiAqLwotCi0jaWZkZWYgREVCVUcKLSAgICBp ZiAoZGVibG9nKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDbG9zZSB0aGUgZGVidWcgbG9n LiAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJDLUtlcm1pdCBFWElUIHN0YXR1cyIsIiIsZXhpdHN0 YXQpOwotICAgICAgICAqZGViZmlsID0gJ1wwJzsKLSAgICAgICAgZGVibG9nID0gMDsKLSAgICAg ICAgemNsb3NlKFpERklMRSk7Ci0gICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0KLSNpZmRlZiBP UzIKLSAgICBfZXhpdChleGl0c3RhdCk7ICAgICAgICAgICAgLyogRXhpdCBmcm9tIEMtS2VybWl0 IChubyBtYXR0ZXIgd2hhdCkgKi8KLSNlbHNlIC8qIE9TMiAqLwotICAgIGV4aXQoZXhpdHN0YXQp OyAgICAgICAgICAgICAgICAgICAgIC8qIEV4aXQgZnJvbSBDLUtlcm1pdCAqLwotI2VuZGlmIC8q IE9TMiAqLwotfQotCi1WT0lECi1iZ2NoaygpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogQ2hlY2sgYmFja2dyb3VuZCBzdGF0dXMgKi8KLSAgICBpZiAoYmdzZXQgPCAwKSB7ICAg ICAgICAgICAgICAgICAgICAvKiBUaGV5IGRpZG4ndCB0eXBlIFNFVCBCQUNLR1JPVU5EICovCi0j aWZkZWYgVk1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IHByb21wdCBmbGFn IGJhc2VkIG9uICovCi0gICAgICAgIHBmbGFnID0gIWJhdGNoOyAgICAgICAgICAgICAgICAgLyog d2hhdCB3ZSBkZXRlY3RlZCBhdCBzdGFydHVwLiAqLwotI2Vsc2UKLSAgICAgICAgcGZsYWcgPSAh YmFja2dyZDsKLSNlbmRpZiAvKiBWTVMgKi8KLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBPdGhlcndpc2UgU0VUIEJBQ0tHUk9VTkQgdmFsdWUgKi8KLSAgICAgICAg cGZsYWcgPSAoYmdzZXQgPT0gMCA/IDEgOiAwKTsKLSAgICB9Ci0KLSNpZm5kZWYgTk9JQ1AKLSAg ICAvKiBNZXNzYWdlIGZsYWcgb24gb25seSBpZiBhdCB0b3AgbGV2ZWwsIHBmbGFnIGlzIG9uLCBh bmQgUVVJRVQgaXMgT0ZGICovCi0gICAgaWYgKCF4Y21kc3JjKQotICAgICAgbXNnZmxnID0gKHBm bGFnID09IDApID8gMCA6ICFxdWlldDsKLSAgICBlbHNlIG1zZ2ZsZyA9IDA7Ci0jZWxzZQotICAg IG1zZ2ZsZyA9IDA7Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLX0KLQotLyogU2V0IGNvbnNvbGUgaW50 ZXJydXB0cyAqLwotCi1WT0lECi1zZXRpbnQoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogQWNjb3JkaW5nIHRvIFNFVCBDT01NQU5EIElOVEVSUlVQICovCi0gICAgaW50IHggPSAw OwotICAgIGlmIChjbWRpbnQpICB4IHw9IDE7Ci0gICAgaWYgKHhzdXNwZW5kKSB4IHw9IDI7Ci0g ICAgZGVidWcoRjEwMSwic2V0aW50IiwiIix4KTsKLQotICAgIHN3aXRjaCAoeCkgeyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFNldCB0aGUgZGVzaXJlZCBjb21iaW5hdGlvbiAqLwotICAgICAg Y2FzZSAwOiBjb25ub2koKTsgYnJlYWs7ICAgICAgICAgIC8qIE5vIGludGVycnVwdHMgKi8KLSAg ICAgIGNhc2UgMTogY29uaW50KHRyYXAsU0lHX0lHTik7IGJyZWFrOwotICAgICAgY2FzZSAyOiBj b25pbnQoU0lHX0lHTixzdHB0cmFwKTsgYnJlYWs7Ci0gICAgICBjYXNlIDM6IGNvbmludCh0cmFw LHN0cHRyYXApOyBicmVhazsKLSAgICB9Ci0gICAgYmdjaGsoKTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogQ2hlY2sgYmFja2dyb3VuZCBzdGF0dXMgKi8KLX0KLQotI2lmZGVmIERFQlVH Ci0vKiAgRCBFIEIgVSBHICAtLSAgRW50ZXIgYSByZWNvcmQgaW4gdGhlIGRlYnVnZ2luZyBsb2cg ICovCi0KLS8qCi0gQ2FsbCB3aXRoIGEgZm9ybWF0LCB0d28gc3RyaW5ncywgYW5kIGEgbnVtYmVy OgotICAgZiAgLSBGb3JtYXQsIGEgYml0IHN0cmluZyBpbiByYW5nZSAwLTcuCi0gICAgICAgIElm IGJpdCB4IGlzIG9uLCB0aGVuIGFyZ3VtZW50IG51bWJlciB4IGlzIHByaW50ZWQuCi0gICBzMSAt IFN0cmluZywgYXJndW1lbnQgbnVtYmVyIDEuICBJZiBzZWxlY3RlZCwgcHJpbnRlZCBhcyBpcy4K LSAgIHMyIC0gU3RyaW5nLCBhcmd1bWVudCBudW1iZXIgMi4gIElmIHNlbGVjdGVkLCBwcmludGVk IGluIGJyYWNrZXRzLgotICAgbiAgLSBMb25nIGludCwgYXJndW1lbnQgMy4gIElmIHNlbGVjdGVk LCBwcmludGVkIHByZWNlZGVkIGJ5IGVxdWFscyBzaWduLgotCi0gICBmPTAgaXMgc3BlY2lhbDog cHJpbnQgczEsczIsIGFuZCBpbnRlcnByZXQgbiBhcyBhIGNoYXIuCi0KLSAgIGY9RjAxMSAoMykg aXMgYWxzbyBzcGVjaWFsOyBpbiB0aGlzIGNhc2UgczIgaXMgaW50ZXJwZXRlZCBhcyBhIGNvdW50 ZWQKLSAgIHN0cmluZyB0aGF0IG1pZ2h0IGNvbnRhaW4gTlVMcy4gIG4gaXMgdGhlIGxlbmd0aC4g IElmIG4gaXMgbmVnYXRpdmUsIHRoaXMKLSAgIG1lYW5zIHRoZSBzdHJpbmcgaGFzIGJlZW4gdHJ1 bmNhdGVkIGFuZCAiLi4iIHNob3VsZCBiZSBwcmludGVkIGFmdGVyIHRoZQotICAgZmlyc3QgbiBi eXRlcy4gIE5VTCBhbmQgTEYgYnl0ZXMgYXJlIHByaW50ZWQgYXMgIjxOVUw+IiBhbmQgIjxMRj4i LgotCi0gICBHbG9iYWxzOgotICAgICBkZWJsb2c6IG5vbnplcm8gaWYgZGVidWcgbG9nIG9wZW4u Ci0gICAgIGRlYm9rOiAgbm9uemVybyBpZiBvayB0byB3cml0ZSBlbnRyaWVzLgotKi8KLS8qCi0g IFdBUk5JTkc6IERvbid0IGNoYW5nZSBERUJVRkwgd2l0aG91dCBjaGFuZ2luZyBzcHJpbnRmKCkg Zm9ybWF0cyBiZWxvdywKLSAgYWNjb3JkaW5nbHkuCi0qLwotI2RlZmluZSBEQlVGTCA0MDAwCi0v KgotICBXQVJOSU5HOiBUaGlzIHJvdXRpbmUgaXMgbm90IHRocmVhZC1zYWZlLCBlc3BlY2lhbGx5 IHdoZW4gS2VybWl0IGlzCi0gIGV4ZWN1dGluZyBvbiBtdWx0aXBsZSBDUFVzIC0tIGFzIGRpZmZl cmVudCB0aHJlYWRzIHdyaXRlIHRvIHRoZSBzYW1lCi0gIHN0YXRpYyBidWZmZXIsIHRoZSBkZWJ1 ZyBzdGF0ZW1lbnRzIGFyZSBhbGwgaW50ZXJsZWF2ZWQuICBUbyBiZSBmaXhlZAotICBsYXRlci4u LgotKi8KLXN0YXRpYyBjaGFyICpkYnB0ciA9IChjaGFyICopMDsKLQotaW50Ci0jaWZkZWYgQ0tf QU5TSUMKLWRvZGVidWcoaW50IGYsIGNoYXIgKnMxLCBjaGFyICpzMiwgQ0tfT0ZGX1QgbikKLSNl bHNlCi1kb2RlYnVnKGYsczEsczIsbikgaW50IGY7IGNoYXIgKnMxLCAqczI7IENLX09GRl9UIG47 Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGRvZGVidWcgKi8gewotICAgIGNoYXIgKnNwOwot ICAgIGludCBsZW4xLCBsZW4yOwotICAgIGV4dGVybiBpbnQgZGVidGltOwotI2lmZGVmIE9TMgot ICAgIGV4dGVybiBpbnQgU3lzSW5pdGVkOwotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAgaWYgKCFk ZWJsb2cgfHwgIWRlYm9rKQotICAgICAgcmV0dXJuKDApOwotCi0jaWZkZWYgQ09NTUVOVAotICAg IC8qIGV4cGVuc2l2ZS4uLiAqLwotICAgIGlmICghY2hrZm4oWkRGSUxFKSkJCQkvKiBEZWJ1ZyBs b2cgbm90IG9wZW4sIGRvbid0LiAqLwotICAgICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIENPTU1F TlQgKi8KLSAgICBpZiAoIWRicHRyKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBBbGxvY2F0 ZSBtZW1vcnkgYnVmZmVyICovCi0gICAgICAgIGRicHRyID0gbWFsbG9jKERCVUZMKzQpOyAgICAg ICAgLyogVGhpcyBvbmx5IGhhcHBlbnMgb25jZSAqLwotICAgICAgICBpZiAoIWRicHRyKSB7Ci0g ICAgICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKLSAgICAgICAgICAgIHJldHVybigwKTsKLSAgICAg ICAgfQotICAgIH0KLS8qCi0gIFRoaXMgcHJldmVudHMgaW5maW5pdGUgcmVjdXJzaW9uIGluIGNh c2Ugd2UgYWNjaWRlbnRhbGx5IHB1dCBhIGRlYnVnKCkKLSAgY2FsbCBpbiB0aGlzIHJvdXRpbmUs IG9yIGNhbGwgYW5vdGhlciByb3V0aW5lIHRoYXQgY29udGFpbnMgZGVidWcoKSBjYWxscy4KLSAg RnJvbSB0aGlzIHBvaW50IG9uLCBhbGwgcmV0dXJucyBmcm9tIHRoaXMgcmV0dXJuIG11c3QgYmUg dmlhIGdvdG8geGRlYnVnLAotICB3aGljaCBzZXRzIGRlYmxvZyBiYWNrIHRvIDEuCi0qLwotI2lm ZGVmIE9TMgotICAgIGlmIChTeXNJbml0ZWQpIHsKLQlpZiAoUmVxdWVzdERlYnVnTXV0ZXgoMzAw MDApKQotCSAgICBnb3RvIHhkZWJ1ZzsKLSAgICB9Ci0jZWxzZSAvKiBPUzIgKi8KLSAgICBkZWJs b2cgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcmV2ZW50IGluZmluaXRlIHJlY3Vy c2lvbiAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAgaWYgKGRlYnRpbSkgeyAgICAgICAgICAg ICAgICAgICAgICAgLyogVGltZXN0YW1wICovCi0gICAgICAgIGNoYXIgKnRiLCB0c2J1Zls0OF07 Ci0gICAgICAgIHp0aW1lKCZ0Yik7Ci0gICAgICAgIGNrc3RybmNweSh0c2J1Zix0YiwzMik7Ci0g ICAgICAgIGlmICh6dG1zZWMgPiAtMUwpIHsKLQkgICAgc3ByaW50Zih0c2J1ZisxOSwiLiUwM2xk ICIsenRtc2VjKTsgLyogU0FGRSAqLwotCX0gZWxzZSB7Ci0JICAgIHRzYnVmWzE5XSA9ICc6JzsK LQkgICAgdHNidWZbMjBdID0gU1A7Ci0JICAgIHRzYnVmWzIxXSA9IE5VTDsKLQl9Ci0gICAgICAg IHpzb3V0KFpERklMRSx0c2J1ZisxMSk7Ci0gICAgfQotICAgIGlmICghczEpIHMxPSIoTlVMTCki OwotICAgIGlmICghczIpIHMyPSIoTlVMTCkiOwotCi0gICAgbGVuMSA9IHN0cmxlbihzMSk7Ci0g ICAgbGVuMiA9IHN0cmxlbihzMik7Ci0KLSNpZmRlZiBDT01NRU5UCi0vKgotICBUaGlzIHNob3Vs ZCB3b3JrLCBidXQgaXQgZG9lc24ndC4KLSAgU28gaW5zdGVhZCB3ZSdsbCBjb3BlIHdpdGggb3Zl cmZsb3cgdmlhIHNwcmludGYgZm9ybWF0cy4KLSAgTi5CLjogVU5GT1JUVU5BVEVMWSwgdGhpcyBt ZWFucyB3ZSBoYXZlIHRvIHB1dCBjb25zdGFudHMgaW4gdGhlCi0gIHNwcmludGYgZm9ybWF0cy4K LSovCi0gICAgaWYgKGYgIT0gRjAxMSAmJiAoIWYgfHwgKGYgJiA2KSkpIHsgLyogU3RyaW5nIGFy Z3VtZW50KHMpIGluY2x1ZGVkPyAqLwotICAgICAgICB4ID0gKGludCkgc3RybGVuKHMxKSArIChp bnQpIHN0cmxlbihzMikgKyAxODsKLSAgICAgICAgaWYgKHggPiBkYnVmbCkgeyAgICAgICAgICAg ICAgICAvKiBMb25nZXIgdGhhbiBidWZmZXI/ICovCi0gICAgICAgICAgICBpZiAoZGJwdHIpICAg ICAgICAgICAgICAgICAgLyogWWVzLCBmcmVlIHByZXZpb3VzIGJ1ZmZlciAqLwotICAgICAgICAg ICAgICBmcmVlKGRicHRyKTsKLSAgICAgICAgICAgIGRicHRyID0gKGNoYXIgKikgbWFsbG9jKHgg KyAyKTsgLyogQWxsb2NhdGUgYSBuZXcgb25lICovCi0gICAgICAgICAgICBpZiAoIWRicHRyKSB7 Ci0gICAgICAgICAgICAgICAgenNvdXRsKFpERklMRSwiREVCVUc6IE1lbW9yeSBhbGxvY2F0aW9u IGZhaWx1cmUiKTsKLSAgICAgICAgICAgICAgICBkZWJsb2cgPSAwOwotICAgICAgICAgICAgICAg IHpjbG9zZShaREZJTEUpOwotICAgICAgICAgICAgICAgIGdvdG8geGRlYnVnOwotICAgICAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkYnVmbCA9IHg7Ci0gICAgICAgICAgICAgICAg c3ByaW50ZihkYnB0ciwiREVCVUc6IEJ1ZmZlciBleHBhbmRlZCB0byAlZFxuIiwgeCArIDE4KTsK LSAgICAgICAgICAgICAgICB6c291dGwoWkRGSUxFLGRicHRyKTsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSNpZmRlZiBDT01NRU5UCi0v KiBUaGUgYWZvcmVtZW50aW9uZWQgc3ByaW50ZigpIGZvcm1hdHMgd2VyZSBsaWtlIHRoaXM6ICov Ci0gICAgICAgIGlmIChuID4gMzEgJiYgbiA8IDEyNykKLSAgICAgICAgICBzcHJpbnRmKHNwLCIl LjEwMHMlLjIwMDBzOiVjXG4iLHMxLHMyLChDSEFSKSBuKTsKLSAgICAgICAgZWxzZSBpZiAobiA8 IDMyIHx8IG4gPT0gMTI3KQotICAgICAgICAgIHNwcmludGYoc3AsIiUuMTAwcyUuMjAwMHM6XiVj XG4iLHMxLHMyLChDSEFSKSAoKG4rNjQpICYgMHg3RikpOwotICAgICAgICBlbHNlIGlmIChuID4g MTI3ICYmIG4gPCAxNjApCi0gICAgICAgICAgc3ByaW50ZihzcCwiJS4xMDBzJS4yMDAwczp+XiVj XG4iLHMxLHMyLChDSEFSKSgobi02NCkgJiAweDdGKSk7Ci0gICAgICAgIGVsc2UgaWYgKG4gPiAx NTkgJiYgbiA8IDI1NikKLSAgICAgICAgICBzcHJpbnRmKHNwLCIlLjEwMHMlLjIwMDBzOn4lY1xu IixzMSxzMiwoQ0hBUikgKG4gJiAweDdGKSk7Ci0gICAgICAgIGVsc2Ugc3ByaW50ZihzcCwiJS4x MDBzJS4yMDAwczolbGRcbiIsczEsczIsbik7Ci0vKgotICBCdXQsIG5hdHVyYWxseSwgaXQgdHVy bnMgb3V0IHRoZXNlIGFyZSBub3QgcG9ydGFibGUgZWl0aGVyLCBzbyBub3cKLSAgd2UgZG8gdGhl IHN0dXBpZGVzdCBwb3NzaWJsZSB0aGluZy4KLSovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0j aWZkZWYgQklHQlVGT0sKLS8qIE5lZWQgdG8gYWNjZXB0IGxvbmdlciBzdHJpbmdzIHdoZW4gZGVi dWdnaW5nIGF1dGhlbnRpY2F0ZWQgY29ubmVjdGlvbnMgKi8KLSAgICBpZiAoZiA9PSBGMDEwKSB7 Ci0gICAgICAgIGlmIChsZW4yICsgMiA+PSBEQlVGTCkgczIgPSAiKHN0cmluZyB0b28gbG9uZyki OwotICAgIH0gZWxzZSBpZiAoZiAhPSBGMDExICYmIGYgIT0gRjEwMCkgewotICAgICAgICBpZiAo bGVuMSA+IDEwMCkgczEgPSAiKHN0cmluZyB0b28gbG9uZykiOwotICAgICAgICBpZiAobGVuMiAr IDEwMSA+PSBEQlVGTCkgczIgPSAiKHN0cmluZyB0b28gbG9uZykiOwotICAgIH0KLSNlbHNlCi0g ICAgaWYgKGYgIT0gRjAxMSkgewotICAgICAgICBpZiAobGVuMSA+IDEwMCkgczEgPSAiKHN0cmlu ZyB0b28gbG9uZykiOwotICAgICAgICBpZiAobGVuMiArIDEwMSA+PSBEQlVGTCkgczIgPSAiKHN0 cmluZyB0b28gbG9uZykiOwotICAgIH0KLSNlbmRpZiAvKiBCSUdCVUZPSyAqLwotCi0gICAgc3Ag PSBkYnB0cjsKLQotICAgIHN3aXRjaCAoZikgeyAgICAgICAgICAgICAgICAvKiBXcml0ZSBsb2cg cmVjb3JkIGFjY29yZGluZyB0byBmb3JtYXQuICovCi0gICAgICBjYXNlIEYwMDA6ICAgICAgICAg ICAgICAgIC8qIDAgPSBwcmludCBib3RoIHN0cmluZ3MsIGFuZCBuIGFzIGEgY2hhci4gKi8KLSAg ICAgICAgaWYgKGxlbjIgPiAwKSB7Ci0gICAgICAgICAgICBpZiAoKG4gPiAzMSAmJiBuIDwgMTI3 KSB8fCAobiA+IDE1OSAmJiBuIDwgMjU2KSkKLSAgICAgICAgICAgICAgc3ByaW50ZihzcCwiJXNb JXNdPSVjXG4iLHMxLHMyLChDSEFSKSBuKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG4gPCAzMiB8 fCBuID09IDEyNykKLSAgICAgICAgICAgICAgc3ByaW50ZihzcCwiJXNbJXNdPV4lY1xuIixzMSxz MiwoQ0hBUikgKChuKzY0KSAmIDB4N0YpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG4gPiAxMjcg JiYgbiA8IDE2MCkKLSAgICAgICAgICAgICAgc3ByaW50ZihzcCwiJXNbJXNdPX5eJWNcbiIsczEs czIsKENIQVIpKChuLTY0KSAmIDB4N0YpKTsKLSAgICAgICAgICAgIGVsc2Ugc3ByaW50ZihzcCwi JXNbJXNdPTB4JWxYXG4iLHMxLHMyLChsb25nKW4pOwotICAgICAgICB9IGVsc2UgewotICAgICAg ICAgICAgaWYgKChuID4gMzEgJiYgbiA8IDEyNykgfHwgKG4gPiAxNTkgJiYgbiA8IDI1NikpCi0g ICAgICAgICAgICAgIHNwcmludGYoc3AsIiVzPSVjXG4iLHMxLChDSEFSKSBuKTsKLSAgICAgICAg ICAgIGVsc2UgaWYgKG4gPCAzMiB8fCBuID09IDEyNykKLSAgICAgICAgICAgICAgc3ByaW50Zihz cCwiJXM9XiVjXG4iLHMxLChDSEFSKSAoKG4rNjQpICYgMHg3RikpOwotICAgICAgICAgICAgZWxz ZSBpZiAobiA+IDEyNyAmJiBuIDwgMTYwKQotICAgICAgICAgICAgICBzcHJpbnRmKHNwLCIlcz1+ XiVjXG4iLHMxLChDSEFSKSgobi02NCkgJiAweDdGKSk7Ci0gICAgICAgICAgICBlbHNlIHNwcmlu dGYoc3AsIiVzPTB4JWxYXG4iLHMxLChsb25nKW4pOwotICAgICAgICB9Ci0gICAgICAgIGlmICh6 c291dChaREZJTEUsZGJwdHIpIDwgMCkgewotICAgICAgICAgICAgZGVibG9nID0gMDsKLSAgICAg ICAgICAgIHpjbG9zZShaREZJTEUpOwotICAgICAgICB9Ci0jaWZkZWYgQ0tTWVNMT0cKLSAgICAg ICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19EQiAmJiBja3hsb2dnaW5nKSB7Ci0gICAgICAgICAg ICBja3N5c2xvZyhTWVNMR19EQiwxLCJkZWJ1ZyIsZGJwdHIsTlVMTCk7Ci0gICAgICAgIH0KLSNl bmRpZiAvKiBDS1NZU0xPRyAqLwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBGMDAxOiAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDEsICI9biIgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAg ICAgIC8qIFRoaXMgd2FzIG5ldmVyIHVzZWQgKi8KLSAgICAgICAgc3ByaW50ZihzcCwiPSVzXG4i LGNrZnN0b2EobikpOwotI2Vsc2UKLSAgICAgICAgLyogTGlrZSBGMTExLCBidXQgc2hvd3MgbnVt YmVyIG4gaW4gaGV4ICovCi0JY2ttYWt4bXNnKHNwLERCVUZMLAotCQkgIHMxLAotCQkgICgqczEg PyAiOiIgOiAiIiksCi0JCSAgczIsCi0JCSAgKCpzMiA/ICI6IiA6ICIiKSwKLQkJICBja2x0b3go biksCi0JCSAgIlxuIiwKLQkJICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTAotCQkgICk7 Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICBpZiAoenNvdXQoWkRGSUxFLGRicHRyKSA8 IDApIHsKLSAgICAgICAgICAgIGRlYmxvZyA9IDA7Ci0gICAgICAgICAgICB6Y2xvc2UoWkRGSUxF KTsKLSAgICAgICAgfQotI2lmZGVmIENLU1lTTE9HCi0gICAgICAgIGlmIChja3hzeXNsb2cgPj0g U1lTTEdfREIgJiYgY2t4bG9nZ2luZykgewotICAgICAgICAgICAgY2tzeXNsb2coU1lTTEdfREIs MSwiZGVidWciLGRicHRyLE5VTEwpOwotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8K LSAgICAgICAgYnJlYWs7Ci0KLS8qCi0gIFRoaXMgb25lIHdhcyBuZXZlciB1c2VkIHNvIChPY3Rv YmVyIDIwMDApIHdlIG5vdyB1c2UgaXQgbGlrZSBGMDExLAotICBleGNlcHQgaW4gdGhpcyBjYXNl IHdlIHRyZWF0IHMyIGFzIE5VTCB0ZXJtaW5hdGVkLgotKi8KLSAgICAgIGNhc2UgRjAxMDoKLQlu ID0gLWRlYnhsZW47Ci0vKgotICBUaGlzIG9uZSB0cmVhdHMgbiBhcyB0aGUgbGVuZ3RoIG9mIHRo ZSBzdHJpbmcgczIsIHdoaWNoIG1heSBjb250YWluIE5VTHMuCi0gIEl0J3MgZ29vZCBmb3IgbG9n Z2luZyBOVUwtYmVhcmluZyBkYXRhIGluIHRoZSBkZWJ1ZyBsb2cuCi0qLwotICAgICAgY2FzZSBG MDExOiB7Ci0JICBpbnQgaSwgaiwgY29udGQgPSAwOwotCSAgY2hhciAqIHAgPSBzMiwgKnBidWYg PSBOVUxMOwkvKiBwID0gc291cmNlIHBvaW50ZXIgKi8KLQkgIGludCBtOwkJCS8qIHBidWYgPSBk ZXN0aW5hdGlvbiBwb2ludGVyICovCi0KLQkgIGlmIChmID09IEYwMTEpIHsKLQkgICAgICBpZiAo biA8IDApIHsJCS8qIG4gPSBzaXplIG9mIHNvdXJjZSAqLwotCQkgIG4gPSAwIC0gbjsJCS8qIE5l Z2F0aXZlIG1lYW5zIHRvIGFkZCAiLi4uIiAqLwotCQkgIGNvbnRkID0gMTsKLQkgICAgICB9Ci0J ICB9IGVsc2UgewotCSAgICAgIGludCB4LCBmbGFnID0gMDsKLQkgICAgICB4ID0gc3RybGVuKHMy KTsKLQkgICAgICBpZiAobiA8IDApIHsKLQkJICBmbGFnID0gMTsKLQkJICBuID0gMCAtIG47Ci0J ICAgICAgfQotCSAgICAgIGlmICh4IDwgbikKLQkJbiA9IHg7Ci0JICB9Ci0JICBpZiAobiA9PSAw KQkJCS8qIDAgbWVhbnMgZG8gbm90aGluZyAqLwotCSAgICBnb3RvIHhkZWJ1ZzsKLQkgIG0gPSBE QlVGTCAtIDg7CQkvKiBHZXQgc2l6ZSBmb3IgaW50ZXJwcmV0ZWQgcGFydCAqLwotCSAgaWYgKG4g PiBtKQkJCS8qIEVuc3VyZSByZXF1ZXN0ZWQgc2l6ZSBub3QgdG9vIGJpZyAqLwotCSAgICBuID0g bTsKLQkgIHBidWYgPSBkYnB0cjsJCQkvKiBDb25zdHJ1Y3Rpb24gcG9pbnRlciAqLwotCSAgaSA9 IDA7Ci0JICBwYnVmW2krK10gPSAnWyc7CQkvKiBJbnRlcnByZXQgdGhlIHN0cmluZyBpbnRvIGl0 ICovCi0JICBmb3IgKGogPSAwOyBqIDwgbiAmJiBpIDwgbS00OyBwKyssaisrKSB7IC8qIGNoYXIg YnkgY2hhci4uLiAqLwotCSAgICAgIGlmICgqcCA9PSBMRikgewotCQkgIGlmIChpID49IG0tNCkK LQkJICAgIGJyZWFrOwotCQkgIHBidWZbaSsrXSA9ICc8JzsKLQkJICBwYnVmW2krK10gPSAnTCc7 Ci0JCSAgcGJ1ZltpKytdID0gJ0YnOwotCQkgIHBidWZbaSsrXSA9ICc+JzsKLQkJICBjb250aW51 ZTsKLQkgICAgICB9IGVsc2UgaWYgKCpwID09IENSKSB7Ci0JCSAgaWYgKGkgPj0gbS00KQotCQkg ICAgYnJlYWs7Ci0JCSAgcGJ1ZltpKytdID0gJzwnOwotCQkgIHBidWZbaSsrXSA9ICdDJzsKLQkJ ICBwYnVmW2krK10gPSAnUic7Ci0JCSAgcGJ1ZltpKytdID0gJz4nOwotCQkgIGNvbnRpbnVlOwot CSAgICAgIH0gZWxzZSBpZiAoKnAgPT0gSFQpIHsKLQkJICBpZiAoaSA+PSBtLTUpCi0JCSAgICBi cmVhazsKLQkJICBwYnVmW2krK10gPSAnPCc7Ci0JCSAgcGJ1ZltpKytdID0gJ1QnOwotCQkgIHBi dWZbaSsrXSA9ICdBJzsKLQkJICBwYnVmW2krK10gPSAnQic7Ci0JCSAgcGJ1ZltpKytdID0gJz4n OwotCQkgIGNvbnRpbnVlOwotCSAgICAgIH0gZWxzZSBpZiAoKnApIHsKLQkJICBwYnVmW2krK10g PSAqcDsKLQkJICBjb250aW51ZTsKLQkgICAgICB9IGVsc2UgewotCQkgIGlmIChpID49IG0tNSkK LQkJICAgIGJyZWFrOwotCQkgIHBidWZbaSsrXSA9ICc8JzsKLQkJICBwYnVmW2krK10gPSAnTic7 Ci0JCSAgcGJ1ZltpKytdID0gJ1UnOwotCQkgIHBidWZbaSsrXSA9ICdMJzsKLQkJICBwYnVmW2kr K10gPSAnPic7Ci0JCSAgY29udGludWU7Ci0JICAgICAgfQotCSAgfQotCSAgaWYgKGkgPCBtLTIg JiYgKCpwIHx8IGNvbnRkKSkgewotCSAgICAgIHBidWZbaSsrXSA9ICcuJzsKLQkgICAgICBwYnVm W2krK10gPSAnLic7Ci0JICB9Ci0JICBwYnVmW2krK10gPSAnXSc7Ci0JICBwYnVmW2ldID0gTlVM OwotCSAgaWYgKHpzb3V0KFpERklMRSxzMSkgPCAwKSB7Ci0JICAgICAgZGVibG9nID0gMDsKLQkg ICAgICB6Y2xvc2UoWkRGSUxFKTsKLQkgIH0KLQkgIGlmICh6c291dGwoWkRGSUxFLHBidWYpIDwg MCkgewotCSAgICAgIGRlYmxvZyA9IDA7Ci0JICAgICAgemNsb3NlKFpERklMRSk7Ci0JICB9Ci0j aWZkZWYgQ0tTWVNMT0cKLQkgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfREIgJiYgY2t4bG9nZ2lu ZykgewotCSAgICAgIGNrc3lzbG9nKFNZU0xHX0RCLDEsImRlYnVnIixzMSxwYnVmKTsKLQkgIH0K LSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAg ICBjYXNlIEYxMDA6ICAgICAgICAgICAgICAgICAgICAgICAgLyogNCwgInMxIiAqLwotICAgICAg ICBpZiAoenNvdXRsKFpERklMRSxzMSkgPCAwKSB7Ci0gICAgICAgICAgICBkZWJsb2cgPSAwOwot ICAgICAgICAgICAgemNsb3NlKFpERklMRSk7Ci0gICAgICAgIH0KLSNpZmRlZiBDS1NZU0xPRwot ICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX0RCICYmIGNreGxvZ2dpbmcpIHsKLSAgICAg ICAgICAgIGNrc3lzbG9nKFNZU0xHX0RCLDEsImRlYnVnIixzMSxOVUxMKTsKLSAgICAgICAgfQot I2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGMTAxOiAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDUsICJzMT1uIiAqLwotICAgICAgICBzcHJpbnRmKHNw LCIlcz0lc1xuIixzMSxja2ZzdG9hKG4pKTsKLSAgICAgICAgaWYgKHpzb3V0KFpERklMRSxkYnB0 cikgPCAwKSB7Ci0gICAgICAgICAgICBkZWJsb2cgPSAwOwotICAgICAgICAgICAgemNsb3NlKFpE RklMRSk7Ci0gICAgICAgIH0KLSNpZmRlZiBDS1NZU0xPRwotICAgICAgICBpZiAoY2t4c3lzbG9n ID49IFNZU0xHX0RCICYmIGNreGxvZ2dpbmcpIHsKLSAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xH X0RCLDEsImRlYnVnIixkYnB0cixOVUxMKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENLU1lTTE9H ICovCi0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGMTEwOiAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDYsICJzMVtzMl0iICovCi0gICAgICAgIHNwcmludGYoc3AsIiVzWyVzXVxuIixzMSxz Mik7Ci0gICAgICAgIGlmICh6c291dChaREZJTEUsZGJwdHIpIDwgMCkgewotICAgICAgICAgICAg ZGVibG9nID0gMDsKLSAgICAgICAgICAgIHpjbG9zZShaREZJTEUpOwotICAgICAgICB9Ci0jaWZk ZWYgQ0tTWVNMT0cKLSAgICAgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19EQiAmJiBja3hsb2dn aW5nKSB7Ci0gICAgICAgICAgICBja3N5c2xvZyhTWVNMR19EQiwxLCJkZWJ1ZyIsZGJwdHIsTlVM TCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS1NZU0xPRyAqLwotICAgICAgICBicmVhazsKLSAg ICAgIGNhc2UgRjExMTogICAgICAgICAgICAgICAgICAgICAgICAvKiA3LCAiczFbczJdPW4iICov Ci0gICAgICAgIHNwcmludGYoc3AsIiVzWyVzXT0lc1xuIixzMSxzMixja2ZzdG9hKG4pKTsKLSAg ICAgICAgaWYgKHpzb3V0KFpERklMRSxkYnB0cikgPCAwKSB7Ci0gICAgICAgICAgICBkZWJsb2cg PSAwOwotICAgICAgICAgICAgemNsb3NlKFpERklMRSk7Ci0gICAgICAgIH0KLSNpZmRlZiBDS1NZ U0xPRwotICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX0RCICYmIGNreGxvZ2dpbmcpIHsK LSAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0RCLDEsImRlYnVnIixkYnB0cixOVUxMKTsKLSAg ICAgICAgfQotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgICAgIGJyZWFrOwotICAgICAgZGVm YXVsdDoKLSAgICAgICAgc3ByaW50ZihzcCwiXG4/SW52YWxpZCBmb3JtYXQgZm9yIGRlYnVnKCkg LSAlZFxuIixmKTsKLSAgICAgICAgaWYgKHpzb3V0KFpERklMRSxkYnB0cikgPCAwKSB7Ci0gICAg ICAgICAgICBkZWJsb2cgPSAwOwotICAgICAgICAgICAgemNsb3NlKFpERklMRSk7Ci0gICAgICAg IH0KLSNpZmRlZiBDS1NZU0xPRwotICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX0RCICYm IGNreGxvZ2dpbmcpIHsKLSAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0RCLDEsImRlYnVnIixk YnB0cixOVUxMKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgICAgIGJy ZWFrOwotICAgIH0KLSAgeGRlYnVnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBD b21tb24gZXhpdCBwb2ludCAqLwotI2lmZGVmIE9TMgotICAgIGlmIChTeXNJbml0ZWQpCi0JUmVs ZWFzZURlYnVnTXV0ZXgoKTsKLSNlbHNlIC8qIE9TMiAqLwotICAgIGRlYmxvZyA9IDE7ICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgdGhpcyAqLwotI2VuZGlmIC8qIE9TMiAqLwot ICAgIHJldHVybigwKTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLWRvaGV4ZHVtcChDSEFS ICptc2csIENIQVIgKnN0LCBpbnQgY250KQotI2Vsc2UKLWRvaGV4ZHVtcChtc2csc3QsY250KSBD SEFSICptc2c7IENIQVIgKnN0OyBpbnQgY250OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBk b2hleGR1bXAgKi8gewotICAgIGludCBpID0gMCwgaiA9IDAsIGsgPSAwOwotICAgIGNoYXIgdG1w WzhdOwotI2lmZGVmIE9TMgotICAgIGV4dGVybiBpbnQgU3lzSW5pdGVkOwotI2VuZGlmIC8qIE9T MiAqLwotCi0gICAgaWYgKCFkZWJsb2cpIHJldHVybigwKTsJCS8qIElmIG5vIGRlYnVnIGxvZywg ZG9uJ3QuICovCi0gICAgaWYgKCFkYnB0cikgeyAgICAgICAgICAgICAgICAgICAgICAgLyogQWxs b2NhdGUgbWVtb3J5IGJ1ZmZlciAqLwotICAgICAgICBkYnB0ciA9IG1hbGxvYyhEQlVGTCsxKTsg ICAgICAgIC8qIFRoaXMgb25seSBoYXBwZW5zIG9uY2UgKi8KLSAgICAgICAgaWYgKCFkYnB0cikg ewotICAgICAgICAgICAgZGVibG9nID0gMDsKLSAgICAgICAgICAgIHpjbG9zZShaREZJTEUpOwot ICAgICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICB9Ci0gICAgfQotCi0jaWZkZWYgT1MyCi0g ICAgaWYgKFN5c0luaXRlZCkgewotCWlmIChSZXF1ZXN0RGVidWdNdXRleCgzMDAwMCkpCi0JICAg IGdvdG8geGRlYnVnOwotICAgIH0KLSNlbHNlIC8qIE9TMiAqLwotICAgIGRlYmxvZyA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFByZXZlbnQgaW5maW5pdGUgcmVjdXJzaW9uICovCi0j ZW5kaWYgLyogT1MyICovCi0KLSAgICBpZiAobXNnICE9IE5VTEwpIHsKLQlja21ha3htc2coZGJw dHIsCi0JCSAgREJVRkwsCi0JCSAgIkhFWERVTVA6ICIsCi0JCSAgKGNoYXIgKiltc2csCi0JCSAg IiAoIiwKLQkJICBja2l0b2EoY250KSwKLQkJICAiIGJ5dGVzKVxuIiwKLQkJICBOVUxMLE5VTEws TlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMCi0JCSApOwotICAgICAgICBpZiAoenNvdXQoWkRGSUxF LGRicHRyKSA8IDApIHsKLSAgICAgICAgICAgIGRlYmxvZyA9IDA7Ci0gICAgICAgICAgICB6Y2xv c2UoWkRGSUxFKTsKLQkgICAgZ290byB4ZGVidWc7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ugewot CWNrbWFrbXNnKGRicHRyLAotCQkgREJVRkwsCi0JCSAiSEVYRFVNUDogKCIsCi0JCSBja2l0b2Eo Y250KSwKLQkJICIgYnl0ZXMpXG4iLAotCQkgTlVMTAotCQkgKTsKLSAgICAgICAgenNvdXQoWkRG SUxFLGRicHRyKTsKLSAgICAgICAgaWYgKHpzb3V0KFpERklMRSxkYnB0cikgPCAwKSB7Ci0gICAg ICAgICAgICBkZWJsb2cgPSAwOwotICAgICAgICAgICAgemNsb3NlKFpERklMRSk7Ci0JICAgIGdv dG8geGRlYnVnOwotICAgICAgICB9Ci0gICAgfQotICAgIGZvciAoaSA9IDA7IGkgPCBjbnQ7IGkr KykgewotICAgICAgICBkYnB0clswXSA9ICdcMCc7Ci0gICAgICAgIGZvciAoaiA9IDAgOyAoaiA8 IDE2KTsgaisrKSB7Ci0gICAgICAgICAgICBpZiAoKGkgKyBqKSA8IGNudCkKLQkgICAgICBzcHJp bnRmKHRtcCwKLQkJICAgICAgIiVzJTAyeCAiLAotCQkgICAgICAoaiA9PSA4ID8gInwgIiA6ICIi KSwKLQkJICAgICAgKENIQVIpIHN0W2kgKyBqXQotCQkgICAgICApOwotICAgICAgICAgICAgZWxz ZQotCSAgICAgIHNwcmludGYodG1wLAotCQkgICAgICAiJXMgICAiLAotCQkgICAgICAoaiA9PSA4 ID8gInwgIiA6ICIiKQotCQkgICAgICApOwotICAgICAgICAgICAgY2tzdHJuY2F0KGRicHRyLHRt cCxEQlVGTCsxKTsKLSAgICAgICAgfQotICAgICAgICBja3N0cm5jYXQoZGJwdHIsIiAiLERCVUZM KzEpOwotICAgICAgICBmb3IgKGsgPSAwOyAoayA8IDE2KSAmJiAoKGkgKyBrKSA8IGNudCk7IGsr KykgewotICAgICAgICAgICAgc3ByaW50Zih0bXAsCi0gICAgICAgICAgICAgICAgICAgICIlcyVj IiwKLSAgICAgICAgICAgICAgICAgICAgKGsgPT0gOCA/ICIgIiA6ICIiKSwKLSAgICAgICAgICAg ICAgICAgICAgaXNwcmludChzdFtpICsga10pID8gc3RbaSArIGtdIDogJy4nCi0gICAgICAgICAg ICAgICAgICAgICk7Ci0gICAgICAgICAgICBja3N0cm5jYXQoZGJwdHIsdG1wLERCVUZMKzEpOwot ICAgICAgICB9Ci0gICAgICAgIGNrc3RybmNhdChkYnB0ciwiXG4iLERCVUZMKzEpOwotICAgICAg ICBpICs9IGogLSAxOwotICAgICAgICBpZiAoenNvdXQoWkRGSUxFLGRicHRyKSA8IDApIHsKLSAg ICAgICAgICAgIGRlYmxvZyA9IDA7Ci0gICAgICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKLQkgICAg Z290byB4ZGVidWc7Ci0gICAgICAgIH0KLSAgICB9IC8qIGVuZCBmb3IgKi8KLQotCi0gIHhkZWJ1 ZzoKLSNpZmRlZiBPUzIKLSAgICBpZiAoU3lzSW5pdGVkKQotICAgICAgUmVsZWFzZURlYnVnTXV0 ZXgoKTsKLSNlbHNlIC8qIE9TMiAqLwotICAgIGRlYmxvZyA9IDE7Ci0jZW5kaWYgLyogT1MyICov Ci0gICAgcmV0dXJuKDApOwotfQotI2VuZGlmIC8qIERFQlVHICovCi0KLS8qICBTZXNzaW9uIExv Zy4uLiAqLwotCi1pbnQgdHNzdGF0ZSA9IDA7Ci0KLVZPSUQKLSNpZmRlZiBPUzIKLWxvZ2NoYXIo dW5zaWduZWQgc2hvcnQgYykKLSNlbHNlIC8qIE9TMiAqLwotI2lmZGVmIENLX0FOU0lDCi1sb2dj aGFyKGNoYXIgYykKLSNlbHNlCi1sb2djaGFyKGMpIGNoYXIgYzsKLSNlbmRpZiAvKiBDS19BTlNJ QyAqLwotI2VuZGlmIC8qIE9TMiAqLwotLyogbG9nY2hhciAqLyB7ICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIExvZyBjaGFyYWN0ZXIgYyB0byBzZXNzaW9uIGxvZyAqLwotICAgIGV4dGVybiBp bnQgc2xvZ251bDsKLSAgICBpbnQgb2t0b2xvZyA9IDA7Ci0jaWZuZGVmIE5PTE9DQUwKLSAgICBp ZiAoIXNlc2xvZykKLSAgICAgIHJldHVybjsKLQotICAgIGlmICgoc2Vzc2Z0ICE9IFhZRlRfVCkg fHwgKAotI2lmZGVmIFVOSVgKLQkgYyAhPSAnXHInICYmCi0jZWxzZQotI2lmZGVmIGRhdGFnZW5l cmFsCi0JIGMgIT0gJ1xyJyAmJgotI2Vsc2UKLSNpZmRlZiBTVFJBVFVTCi0JIGMgIT0gJ1xyJyAm JgotI2Vsc2UKLSNpZmRlZiBBTUlHQQotCSBjICE9ICdccicgJiYKLSNlbHNlCi0jaWZkZWYgR0VN RE9TCi0JIGMgIT0gJ1xyJyAmJgotI2VuZGlmIC8qIEdFTURPUyAqLwotI2VuZGlmIC8qIEFNSUdB ICovCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5k aWYgLyogVU5JWCAqLwotI2lmZGVmIE9TSwotCSBjICE9ICdcbicgJiYKLSNlbHNlCi0jaWZkZWYg TUFDCi0JIGMgIT0gJ1xuJyAmJgotI2VuZGlmIC8qIE1BQyAqLwotI2VuZGlmIC8qIE9TSyAqLwot CSBjICE9IFhPTiAmJgotCSBjICE9IFhPRkYpKQotICAgICAgb2t0b2xvZyA9IDE7Ci0gICAgaWYg KGMgPT0gJ1wwJyAmJiAhc2Vzc2Z0KQkJLyogTlVMIGluIHRleHQgbW9kZSAqLwotICAgICAgaWYg KHNsb2dudWwpIG9rdG9sb2cgPSAxOwkJLyogb25seSBpZiBwYWRkaW5nICgyMDA5LzEwLzIyKSAq LwotICAgIGlmICghb2t0b2xvZykKLSAgICAgIHJldHVybjsKLSAgICBpZiAoc2xvZ3RzKSB7CQkJ LyogTG9nIGlzIHRpbWVzdGFtcGVkICovCi0JaWYgKHRzc3RhdGUgPT0gMCkgewkJLyogU3RhdGUg PSBiZXR3ZWVuLWxpbmVzICovCi0JICAgIGNoYXIgKiBwOwkJCS8qIHpzdGltZSgpIHBvaW50ZXIg Ki8KLQkgICAgY2hhciB0c1s0OF07CQkvKiB0aW1lc3RhbXAgYnVmZmVyICovCi0JICAgIHp0aW1l KCZwKTsJCQkvKiBHZXQgYXNjdGltZSgpIHN0cmluZyAqLwotCSAgICBja3N0cm5jcHkodHMscCwz Mik7CQkvKiBNYWtlIHNhZmUgY29weSAqLwotCSAgICBpZiAoenRtc2VjID4gLTFMKSB7CQkvKiBB ZGQgbXNlY3MgaWYgd2UgaGF2ZSB0aGVtICovCi0JCXNwcmludGYoJnRzWzE5XSwiLiUwM2xkOiAi LHp0bXNlYyk7IC8qIFNBRkUgKi8KLQkgICAgfSBlbHNlIHsKLQkJdHNbMTldID0gJzonOwotCQl0 c1syMF0gPSBTUDsKLQkJdHNbMjFdID0gTlVMOwotCSAgICB9Ci0JICAgIGlmICh6c291dChaU0ZJ TEUsJnRzWzExXSkgPCAwKQotCSAgICAgIGdvdG8geGxvZ2NoYXI7Ci0JfQotICAgIH0KLSAgICBp ZiAoYyA9PSAnXG4nKQkJCS8qIEF0IGVuZCBvZiBsaW5lPyAqLwotICAgICAgdHNzdGF0ZSA9IDA7 CQkJLyogeWVzICovCi0gICAgZWxzZQotICAgICAgdHNzdGF0ZSA9IDE7CQkJLyogbm8gKi8KLSAg ICBpZiAoemNob3V0KFpTRklMRSwoQ0hBUikoYyAmIDB4RkYpKSA8IDApIC8qIExvZyB0aGUgY2hh cmFjdGVyICovCi0gICAgICBnb3RvIHhsb2djaGFyOwotICAgIGlmICh0c3N0YXRlID09IDAgJiYg c2xvZ251bCAhPSAwKSB7CS8qIE51bGwtdGVybWluYXRpbmcgbGluZXM/ICovCi0JaWYgKHpjaG91 dChaU0ZJTEUsKENIQVIpMCkgPCAwKQkvKiBBZGQgYSBOVUwgKi8KLQkgIGdvdG8geGxvZ2NoYXI7 Ci0gICAgfQotICAgIHJldHVybjsKLQotICB4bG9nY2hhcjoKLSAgICBjb25vbGwoIiIpOwotICAg IGNvbm9sbCgiRVJST1IgV1JJVElORyBTRVNTSU9OIExPRywgTE9HIENMT1NFRCEiKTsKLSAgICBz ZXRzZXNsb2coMCk7Ci0gICAgemNsb3NlKFpTRklMRSk7Ci0jZW5kaWYgLyogTk9MT0NBTCAqLwot fQotCi1WT0lECi1sb2dzdHIocywgbGVuKSBjaGFyICogczsgaW50IGxlbjsgeyAgICAgLyogTG9n IHN0cmluZyB0byBzZXNzaW9uIGxvZyAqLwotI2lmbmRlZiBOT0xPQ0FMCi0gICAgaW50IG4gPSAw OwotICAgIGlmICghcykKLSAgICAgIHJldHVybjsKLSAgICB3aGlsZSAoc2VzbG9nICYmIChuIDwg bGVuKSkKLSAgICAgIGxvZ2NoYXIoc1tuKytdKTsKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi19Ci0K LSNpZmRlZiBDS19DVVJTRVMKLWludAotY2tfcmVwYWludCgpIHsKLSAgICByZXBhaW50ID0gMTsK LSAgICByZXR1cm4oMCk7Ci19Ci0KLSNpZmRlZiBTVFJBVFVTCi0vKiBWT1MgaGFzIGN1cnNlcyBi dXQgbm8gdGdldGVudCgpICovCi1pbnQKLXRnZXRlbnQoczEsIHMyKSBjaGFyICogczEsICogczI7 IHsKLSAgICByZXR1cm4oMSk7Ci19Ci0jZW5kaWYgLyogU1RSQVRVUyAqLwotCi0jaWZkZWYgVk1T Ci0jaWZkZWYgX19ERUNDCi1fUFJPVE9UWVAoaW50IHRnZXRlbnQsKGNoYXIgKiwgY2hhciAqKSk7 Ci0jZW5kaWYgLyogX19ERUNDICovCi0jZW5kaWYgLyogVk1TICovCi0KLS8qCi0gIFRoZXJlIGFy ZSB0aHJlZSBkaWZmZXJlbnQgd2F5cyB0byBkbyBmdWxsc2NyZWVuIG9uIFZNUy4KLSAgMS4gVXNl IHRoZSByZWFsIGN1cnNlcyBsaWJyYXJ5LCBWQVhDQ1VSU0UuCi0gIDIuIFVzZSBkby1pdC15b3Vy c2VsZiBjb2RlLgotICAzLiBVc2UgdGhlIFNjcmVlbiBNYW5hZ2VyLCBTTUckLgotCi0gIE1ldGhv ZCAxIGRvZXNuJ3Qgd29yayBxdWl0ZSByaWdodDsgeW91IGNhbid0IGNhbGwgZW5kd2luKCksIHNv IG9uY2UgeW91J3ZlCi0gIHN0YXJ0ZWQgY3Vyc2VzIG1vZGUsIHlvdSBjYW4gbmV2ZXIgbGVhdmUu Ci0KLSAgTWV0aG9kIDIgZG9lc24ndCBvcHRpbWl6ZSB0aGUgc2NyZWVuLCBhbmQgc28gbXVjaCBt b3JlIHRpbWUgaXMgc3BlbnQgaW4KLSAgc2NyZWVuIHdyaXRlcy4gIFRoaXMgYWN0dWFsbHkgY2F1 c2VzIGZpbGUgdHJhbnNmZXJzIHRvIGZhaWwgYmVjYXVzZSB0aGUKLSAgdHR5IGRldmljZSBpbnB1 dCBidWZmZXIgY2FuIGJlIG92ZXJydW4gd2hpbGUgdGhlIHNjcmVlbiBpcyBiZWluZyB1cGRhdGVk LAotICBlc3BlY2lhbGx5IG9uIGEgc2xvdyBNaWNyb1ZBWCB0aGF0IGhhcyBzbWFsbCB0eXBlYWhl YWQgYnVmZmVycy4KLQotICBJbiB0aGUgZm9sbG93aW5nICNpZmRlZiBibG9jaywgI2RlZmluZSBv bmUgb2YgdGhlbSBhbmQgI3VuZGVmIHRoZSBvdGhlciAyLgotCi0gIFNvIG5vdyBsZXQncyB0cnkg bWV0aG9kIDMuLi4KLSovCi0jaWZkZWYgVk1TCi0jZGVmaW5lIENLX1NNRyAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogU2NyZWVuIE1hbmFnZXIgKi8KLSN1bmRlZiBNWUNVUlNFUyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBEby1pdC15b3Vyc2VsZiAqLwotI3VuZGVmIFZNU0NVUlNFICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFZBWENDVVJTRSBsaWJyYXJ5ICovCi0jZW5kaWYgLyog Vk1TICovCi0vKgotICBCdXQganVzdCBiZWZvcmUgTmV3IFllYXJzLCAyMDAwLCB0aGUgU01HIGxp YnJhcnkgc2VlbWVkIHRvIGJyZWFrIG9uCi0gIGJvdGggVk1TIHN5c3RlbXMgd2UgaGF2ZSBoZXJl IChhbiBBbHBoYSB3aXRoIFZNUyA3LjEgYW5kIGEgVkFYIHdpdGggNS41KS4KLSAgU28gYmFjayB0 byBNWUNVUlNFUywgd2hpY2ggd29ya3MgZmluZS4KLSovCi0jaWZkZWYgVk1TCi0jdW5kZWYgQ0tf U01HCi0jZGVmaW5lIE1ZQ1VSU0VTCi0jZW5kaWYgLyogVk1TICovCi0KLSNpZmRlZiBNWUNVUlNF UwotI2RlZmluZSBzdGRzY3IgMAotI2lmZGVmIENLX1dSRUZSRVNICi0jdW5kZWYgQ0tfV1JFRlJF U0gKLSNlbmRpZiAvKiBDS19XUkVGUkVTSCAqLwotI2VuZGlmIC8qIE1ZQ1VSU0VTICovCi0KLS8q ICBTIEMgUiBFIEUgTiBDICAtLSAgU2NyZWVuIGRpc3BsYXkgZnVuY3Rpb24sIHVzZXMgY3Vyc2Vz ICAqLwotCi0vKiBJZGVhIGZvciBjdXJzZXMgZGlzcGxheSBjb250cmlidXRlZCBieSBDaHJpcyBQ cmF0dCBvZiBBUFYgQmFrZXIsIFVLICovCi0KLS8qIEF2b2lkIGNvbmZpY3RzIHdpdGggY3Vyc2Vz LmggKi8KLQotI2lmZGVmIFFOWAotLyogU2FtZSBhcyBja2Nhc2MuaCwgYnV0IGluIGEgZGlmZmVy ZW50IHJhZGl4Li4uICovCi0jaWZkZWYgRVNDCi0jdW5kZWYgRVNDCi0jZW5kaWYgLyogRVNDICov Ci0jZW5kaWYgLyogUU5YICovCi0KLSNpZm5kZWYgTVlDVVJTRVMKLSN1bmRlZiBWT0lEICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIHdhcyBkZWZpbmVkIGluIGNrY2RlYi5oICov Ci0jZW5kaWYgLyogTVlDVVJTRVMgKi8KLQotI3VuZGVmIEJTICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFRoZXNlIHdlcmUgZGVmaW5lZCBpbiBja2Nhc2MuaCAqLwotI3VuZGVmIENS Ci0jdW5kZWYgTkwKLSN1bmRlZiBTTwotI2lmZGVmIFVTCi0jdW5kZWYgVVMKLSNlbmRpZgkvKiBV UyAqLwotI3VuZGVmIFNQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVzZWQgaW4g bmN1cnNlcyAqLwotI2RlZmluZSBDSFJfU1AgMzIgICAgICAgICAgICAgICAgICAgICAgIC8qIFVz ZSB0aGlzIGluc3RlYWQgKi8KLQotI2lmZGVmIFZNUyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFZNUyBmdWxsc2NyZWVuIGRpc3BsYXkgKi8KLSNpZmRlZiBNWUNVUlNFUyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBEby1pdC15b3Vyc2VsZiBtZXRob2QgKi8KLWV4dGVybiBpbnQg aXN2dDUyOyAgICAgICAgICAgICAgICAgICAgICAvKiBGcm9tIENLVlRJTy5DICovCi0jZGVmaW5l IHByaW50dyBwcmludGYKLSNlbHNlCi0jaWZkZWYgVk1TQ1VSU0UgICAgICAgICAgICAgICAgICAg ICAgICAgLyogVk1TIGN1cnNlcyBsaWJyYXJ5IFZBWENDVVJTRSAqLwotI2luY2x1ZGUgPGN1cnNl cy5oPgotLyogTm90ZTogU2NyZWVuIG1hbmFnZXIgZG9lc24ndCBuZWVkIGEgaGVhZGVyIGZpbGUg Ki8KLSNlbmRpZiAvKiBWTVNDVVJTRSAqLwotI2VuZGlmIC8qIE1ZQ1VSU0VTICovCi0jZWxzZSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IFZNUyAqLwotI2lmZGVmIE1Z Q1VSU0VTICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvLWl0LXlvdXJzZWxmIG1ldGhvZCAq LwotI2RlZmluZSBpc3Z0NTIgMCAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVzZWQgYnkgT1Mv MiwgVlQtMTAwL0FOU0kgYWx3YXlzICovCi0jaWZkZWYgQ0tYUFJJTlRGCi0jZGVmaW5lIHByaW50 dyBja3hwcmludGYKLSNlbHNlIC8qIENLWFBSSU5URiAqLwotI2lmZGVmIEtVSQotI2RlZmluZSBw cmludHcgVnNjcm5wcmludHcKLSNlbHNlIC8qIEtVSSAqLwotI2RlZmluZSBwcmludHcgcHJpbnRm Ci0jZW5kaWYgLyogS1VJICovCi0jZW5kaWYgLyogQ0tYUFJJTlRGICovCi0jZWxzZSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVXNlIHJlYWwgY3Vyc2VzICovCi0jaWZkZWYg Q0tfTkNVUlNFUyAgICAgICAgICAgICAgICAgICAgICAgLyogb3IgbmN1cnNlcy4uLiAqLwotI2lm ZGVmIENLWFBSSU5URiAgICAgICAgICAgICAgICAgICAgICAgIC8qIE91ciBwcmludGYgbWFjcm8g Y29uZmxpY3RzIHdpdGggKi8KLSN1bmRlZiBwcmludGYgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiB1c2Ugb2YgInByaW50ZiIgaW4gbmN1cnNlcy5oICovCi0jZW5kaWYgLyogQ0tYUFJJTlRG ICovCi0jaW5jbHVkZSA8bmN1cnNlcy5oPgotI2lmZGVmIENLWFBSSU5URgotI2RlZmluZSBwcmlu dGYgY2t4cHJpbnRmCi0jZW5kaWYgLyogQ0tYUFJJTlRGICovCi0jZWxzZSAgLyogTm90IG5jdXJz ZXMgKi8KLSNpZmRlZiBDS1hQUklOVEYgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdXIgcHJp bnRmIG1hY3JvIGNvbmZsaWN0cyB3aXRoICovCi0jdW5kZWYgcHJpbnRmICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogdXNlIG9mICJwcmludGYiIGluIGN1cnNlcy5oICovCi0jZW5kaWYgLyog Q0tYUFJJTlRGICovCi0jaWZkZWYgTV9YRU5JWAkJCQkvKiBTQ08gWEVOSVguLi4gKi8KLSNpZmRl ZiBNX1RFUk1DQVAKLSN1bmRlZiBNX1RFUk1DQVAKLSNlbmRpZiAvKiBNX1RFUk1DQVAgKi8KLSNp Zm5kZWYgTV9URVJNSU5GTwotI2RlZmluZSBNX1RFUk1JTkZPCi0jZW5kaWYgLyogTV9URVJNSU5G TyAqLwotI2VuZGlmIC8qIE1fWEVOSVggKi8KLSNpZmRlZiBSVEFJWAotI3VuZGVmIE5MUwkJCQkv KiBBdm9pZCAncmVkZWNsYXJhdGlvbiBvZiBmcmVlJy4gKi8KLSNlbmRpZiAvKiBSVEFJWCAqLwot I2luY2x1ZGUgPGN1cnNlcy5oPgotI2lmZGVmIENLWFBSSU5URgotI2RlZmluZSBwcmludGYgY2t4 cHJpbnRmCi0jZW5kaWYgLyogQ0tYUFJJTlRGICovCi0jZW5kaWYgLyogQ0tfTkNVUlNFUyAqLwot I2VuZGlmIC8qIE1ZQ1VSU0VTICovCi0jZW5kaWYgLyogVk1TICovCi0KLSNpZmRlZiBCVUc5OTkK LV9QUk9UT1RZUChpbnQgdGdldGVudCwoY2hhciAqLCBjaGFyICopKTsKLV9QUk9UT1RZUChjaGFy ICp0Z2V0c3RyLChjaGFyICosIGNoYXIgKiopKTsKLV9QUk9UT1RZUChpbnQgdHB1dHMsKGNoYXIg KiwgaW50LCBpbnQgKCopKCkpKTsKLV9QUk9UT1RZUChjaGFyICp0Z290bywoY29uc3QgY2hhciAq LCBpbnQsIGludCkpOwotI2VuZGlmCS8qIEJVRzk5OSAqLwotCi0jZW5kaWYgLyogQ0tfQ1VSU0VT ICovCi0KLS8qICBGIFggRCBJIE4gSSBUICAtLSAgRmlsZSBYZmVyIERpc3BsYXkgSW5pdGlhbGl6 YXRpb24gICovCi0KLSNpZmRlZiBDS19DVVJTRVMKLSNpZm5kZWYgTVlDVVJTRVMKLSNpZm5kZWYg Q0tfU01HCi1zdGF0aWMKLSNpZmRlZiBDS19BTlNJQwotLyogQ2FuJ3QgdXNlIFZPSUQgYmVjYXVz ZSBvZiBjdXJzZXMuaCAqLwotdm9pZAotY2tfdGVybXNldChpbnQpOwotI2Vsc2UKLWNrX3Rlcm1z ZXQoKTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotI2VuZGlmIC8qIENLX1NNRyAqLwotI2VuZGlm IC8qIE1ZQ1VSU0VTICovCi0jZW5kaWYgLyogQ0tfQ1VSU0VTICovCi0KLSNpZmRlZiBOT1RFUk1D QVAKLXN0YXRpYyBpbnQgbm90ZXJtY2FwID0gMTsKLSNlbHNlCi1zdGF0aWMgaW50IG5vdGVybWNh cCA9IDA7Ci0jZW5kaWYgLyogTk9URVJNQ0FQICovCi0KLSNpZm5kZWYgTk9ESVNQTEFZCi1DS1ZP SUQKLWZ4ZGluaXQoeGRpc3BsYSkgaW50IHhkaXNwbGE7IHsKLSNpZm5kZWYgQ09IRVJFTlQKLSNp Zm5kZWYgT1MyCi0jaWZuZGVmIFNUUkFUVVMKLSAgICBjaGFyICpzOwotICAgIGludCB4LCBkdW1t eTsKLQotICAgIGRlYnVnKEYxMDEsImZ4ZGluaXQgeGRpc3BsYSIsIiIseGRpc3BsYSk7Ci0gICAg ZGVidWcoRjEwMSwiZnhkaW5pdCBmeGRfaW5pdGVkIiwiIixmeGRfaW5pdGVkKTsKLQotI2lmZGVm IElLU0QKLSNpZm5kZWYgTk9YRkVSCi0gICAgLyogTm8gY3Vyc2VzIGZvciBJS1NEICovCi0gICAg aWYgKGluc2VydmVyKSB7Ci0gICAgICAgIGZkaXNwbGEgPSBYWUZEX047Ci0gICAgICAgIHJldHVy bjsKLSAgICB9Ci0gICAgaWYgKGZ4ZF9pbml0ZWQpICAgICAgICAgICAgICAgICAgICAgLyogT25s eSBkbyB0aGlzIG9uY2UgKi8KLSAgICAgIHJldHVybjsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSNl bmRpZiAvKiBJS1NEICovCi0KLSAgICBpZiAoeGRpc3BsYSA9PSBYWUZEX1IgfHwgeGRpc3BsYSA9 PSBYWUZEX1MgfHwgeGRpc3BsYSA9PSBYWUZEX0IpIHsKLQlpZiAoeGZybXNnKSB7Ci0JICAgIHBy aW50ZigiJXNcbiIseGZybXNnKTsKLQkgICAgbWFrZXN0cigmeGZybXNnLE5VTEwpOwotCX0KLSAg ICB9Ci0KLSNpZmRlZiBDS19DVVJTRVMKLSNpZmRlZiBWTVMKLSAgICAvKiBGb3JjZSBCUklFRiBp biBCYXRjaCBsb2dzICovCi0gICAgaWYgKGJhdGNoICYmICh4ZGlzcGxhID09IFhZRkRfQyB8fCB4 ZGlzcGxhID09IFhZRkRfUykpCi0gICAgICB4ZGlzcGxhID0gWFlGRF9COwotI2Vsc2UKLSAgICBp ZiAoeGRpc3BsYSA9PSBYWUZEX0MgfHwgeGRpc3BsYSA9PSA5OTk5KSB7Ci0KLSNpZmRlZiBEWU5B TUlDCi0gICAgICAgIGlmICghdHJtYnVmKSB7Ci0vKgotICBBbGxvY2F0ZSB0Z2V0ZW50KCkgYnVm ZmVyLiAgTWFrZSBpdCBiaWcgLS0gc29tZSB0ZXJtY2FwcyBjYW4gYmUgaHVnZTsKLSAgdGdldGVu dCgpIG1lcnJpbHkgd3JpdGVzIHBhc3QgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCBjYXVzaW5nIGNv cmUgZHVtcHMKLSAgb3Igd29yc2UuCi0qLwotICAgICAgICAgICAgdHJtYnVmID0gKGNoYXIgKilt YWxsb2MoVFJNQlVGTCk7Ci0gICAgICAgICAgICBpZiAoIXRybWJ1ZikgewotICAgICAgICAgICAg ICAgIG5vdGVybWNhcCA9IDE7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiZnhkaW5pdCBt YWxsb2MgdHJtYnVmIiwiRkFJTEVEIixUUk1CVUZMKTsKLSAgICAgICAgICAgICAgICBmZGlzcGxh ID0gWFlGRF9TOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSNpZmRl ZiBDT01NRU5UCi0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJmeGRpbml0IG1hbGxvYyB0cm1idWYi LCJPSyIsVFJNQlVGTCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMDAxLCJmeGRpbml0IHRybWJ1ZiIs IiIsdHJtYnVmKTsKLSAgICAgICAgICAgIG1lbXNldCh0cm1idWYsJ1wwJywoc2l6ZV90KVRSTUJV RkwpOwotICAgICAgICAgICAgZGVidWcoRjEwMCwiZnhkaW5pdCBtZW1zZXQgT0siLCIiLDApOwot I2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgfQotI2VuZGlmIC8qIERZTkFNSUMgKi8KLQot ICAgICAgICBkZWJ1ZyhGMTAwLCJmeGRpbml0IGJlZm9yZSBnZXRlbnYoVEVSTSkiLCIiLDApOwot ICAgICAgICBzID0gZ2V0ZW52KCJURVJNIik7Ci0gICAgICAgIGRlYnVnKEYxMTAsImZ4ZGluaXQg YWZ0ZXIgZ2V0ZW52KFRFUk0pIixzLDApOwotICAgICAgICBpZiAoIXMpIHMgPSAiIjsKLSAgICAg ICAgaWYgKCpzKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmeGRpbml0IGJlZm9yZSB0Z2V0 ZW50KCkiLHMsMCk7Ci0gICAgICAgICAgICB4ID0gdGdldGVudCh0cm1idWYscyk7Ci0gICAgICAg ICAgICBkZWJ1ZyhGMTExLCJmeGRpbml0IHRnZXRlbnQiLHMseCk7Ci0gICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICB4ID0gMDsKLSAgICAgICAgICAgIG5vdGVybWNhcCA9IDE7Ci0gICAgICAg ICAgICBkZWJ1ZyhGMTEwLCJmeGRpbml0IFRFUk0gbnVsbCAtIG5vIHRnZXRlbnQiLHMsMCk7Ci0g ICAgICAgIH0KLSAgICAgICAgaWYgKHggPCAxICYmICFxdWlldCAmJiAhYmFja2dyZAotI2lmZGVm IFZNUwotICAgICAgICAgICAgJiYgIWJhdGNoCi0jZW5kaWYgLyogVk1TICovCi0gICAgICAgICAg ICApIHsKLSAgICAgICAgICAgIHByaW50ZigiV2FybmluZzogdGVybWluYWwgdHlwZSB1bmtub3du OiBcIiVzXCJcbiIscyk7Ci0jaWZkZWYgQ09NTUVOVAotCSAgICAvKiBDb25mdXNpbmcgLSBub2Jv ZHkga25vd3Mgd2hhdCB0aGlzIG1lYW5zICovCi0gICAgICAgICAgICBwcmludGYoIlNDUkVFTiBj b21tYW5kIHdpbGwgdXNlIEFOU0kgc2VxdWVuY2VzLlxuIik7Ci0jZW5kaWYgLyogQ09NTUVOVCAq LwotICAgICAgICAgICAgaWYgKGxvY2FsKQotICAgICAgICAgICAgICBwcmludGYoIkZ1bGxzY3Jl ZW4gZmlsZSB0cmFuc2ZlciBkaXNwbGF5IGRpc2FibGVkLlxuIik7Ci0gICAgICAgICAgICBmZGlz cGxhID0gWFlGRF9TOwotICAgICAgICB9Ci0jaWZuZGVmIE1ZQ1VSU0VTCi0jaWZuZGVmIENLX1NN RwotICAgICAgICBja190ZXJtc2V0KHgpOwotI2VuZGlmIC8qIENLX1NNRyAqLwotI2VuZGlmIC8q IE1ZQ1VSU0VTICovCi0gICAgICAgIGZ4ZF9pbml0ZWQgPSAxOwotICAgIH0KLSNlbmRpZiAvKiBD S19DVVJTRVMgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBTVFJBVFVTICovCi0jZW5k aWYgLyogT1MyICovCi0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLX0KLSNlbmRpZiAvKiBOT0RJU1BM QVkgKi8KLQotI2lmZGVmIENLX0NVUlNFUwotI2lmZGVmIENLX1NNRwotLyoKLSAgTG9uZyBzZWN0 aW9uIGZvciBTY3JlZW4gTWFuYWdlciBzdGFydHMgaGVyZS4uLgotICBCeSBXaWxsaWFtIEJhZGVy LgotKi8KLSNpbmNsdWRlICJja3Z2bXMuaCIKLSNpZmRlZiBPTERfVk1TCi0jaW5jbHVkZSA8c21n ZGVmLmg+ICAgICAgICAgICAgICAgICAgICAgLyogdXNlIHRoaXMgb24gVkFYIEMgMi40ICovCi0v KiAjaW5jbHVkZSA8c21nbXNnLmg+ICovCi0jZWxzZQotI2luY2x1ZGUgPHNtZyRyb3V0aW5lcy5o PiAgICAgICAgICAgICAgIC8qIE1hcnRpbiBaaW5zZXIgKi8KLSNlbmRpZiAvKiBPTERfVk1TICov Ci0KLWV4dGVybiB1bnNpZ25lZCBpbnQgdm1zX3N0YXR1czsgICAgIC8qIFVzZWQgZm9yIHN5c3Rl bSBzZXJ2aWNlIHJldHVybiBzdGF0dXMgKi8KLQotc3RhdGljIGxvbmcgc21nX3Bhc3RlYm9hcmRf aWQgPSAtMTsgICAgIC8qIHBhc3RlYm9hcmQgaWRlbnRpZmllciAqLwotc3RhdGljIGxvbmcgc21n X2Rpc3BsYXlfaWQgPSAtMTsgICAgICAgIC8qIGRpc3BsYXkgaWRlbnRpZmllciAqLwotc3RhdGlj IGludCBzbWdfb3BlbiA9IDA7ICAgICAgICAgICAgICAgIC8qIGZsYWcgaWYgc21nIGN1cnJlbnQg b3BlbiAqLwotc3RhdGljIGludCBzbWdfaW5pdGVkID0gMDsgICAgICAgICAgICAgIC8qIGZsYWcg aWYgc21nIGluaXRpYWxpemVkICovCi0KLSNpZmRlZiBDT01NRU5UCi0jZGVmaW5lIGNscnRvZW9s KCkgICAgICBTTUckRVJBU0VfTElORSgmc21nX2Rpc3BsYXlfaWQsIDAsIDApCi0KLSNkZWZpbmUg Y2xlYXIoKSAgICAgICAgIFNNRyRFUkFTRV9ESVNQTEFZKCZzbWdfZGlzcGxheV9pZCwgMCwgMCwg MCwgMCkKLQotI2RlZmluZSB0b3VjaHdpbihzY3IpICAgU01HJFJFUEFJTlRfU0NSRUVOKCZzbWdf cGFzdGVib2FyZF9pZCkKLQotI2Vsc2UgIC8qIE5vdCBDT01NRU5UICovCi0KLSNkZWZpbmUgY2xy dG9lb2woKSAgICAgIHNtZyRlcmFzZV9saW5lKCZzbWdfZGlzcGxheV9pZCwgMCwgMCkKLQotI2Rl ZmluZSBjbGVhcigpICAgICAgICAgc21nJGVyYXNlX2Rpc3BsYXkoJnNtZ19kaXNwbGF5X2lkLCAw LCAwLCAwLCAwKQotCi0jZGVmaW5lIHRvdWNod2luKHNjcikgICBzbWckcmVwYWludF9zY3JlZW4o JnNtZ19wYXN0ZWJvYXJkX2lkKQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2RlZmluZSBjbGVh cm9rKGN1cnNjcixvaykgICAgICAgICAgICAgIC8qIExldCB3cmVmcmVzaCgpIGRvIHRoZSB3b3Jr ICovCi0KLSNkZWZpbmUgd3JlZnJlc2goY3Vyc3JjKSB0b3VjaHdpbihzY3IpCi0KLXN0YXRpYyB2 b2lkCi1tb3ZlKHJvdywgY29sKSBpbnQgcm93LCBjb2w7IHsKLSAgICAvKiBDaGFuZ2UgZnJvbSAw LWJhc2VkIGZvciBjdXJzZXMgdG8gMS1iYXNlZCBmb3IgU01HICovCi0gICAgaWYgKCFzbWdfb3Bl bikKLSAgICAgIHJldHVybjsKLSAgICArK3JvdzsgKytjb2w7Ci0gICAgZGVidWcoRjExMSwiVk1T IHNtZyBtb3ZlIixja2l0b2Eocm93KSxjb2wpOwotI2lmZGVmIENPTU1FTlQgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIE1hcnRpbiBaaW5zZXIgKi8KLSAgICBDSEVDS19FUlIoIm1vdmU6IHNt ZyRzZXRfY3Vyc29yX2FicyIsCi0gICAgICAgICAgICAgIFNNRyRTRVRfQ1VSU09SX0FCUygmc21n X2Rpc3BsYXlfaWQsICZyb3csICZjb2wpKTsKLSNlbHNlCi0gICAgQ0hFQ0tfRVJSKCJtb3ZlOiBz bWckc2V0X2N1cnNvcl9hYnMiLAotICAgICAgICAgICAgICBzbWckc2V0X2N1cnNvcl9hYnMoJnNt Z19kaXNwbGF5X2lkLCAmcm93LCAmY29sKSk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIGRl YnVnKEYxMDEsIlZNUyBzbWcgbW92ZSB2bXNfc3RhdHVzIiwiIix2bXNfc3RhdHVzKTsKLX0KLQot I2lmZGVmIFZNU19WNDAKLSNkZWZpbmUgT0xEX1ZNUwotI2VuZGlmIC8qIFZNU19WNDAgKi8KLSNp ZmRlZiBWTVNfVjQyCi0jZGVmaW5lIE9MRF9WTVMKLSNlbmRpZiAvKiBWTVNfVjQyICovCi0jaWZk ZWYgVk1TX1Y0NAotI2RlZmluZSBPTERfVk1TCi0jZW5kaWYgLyogVk1TX1Y0NCAqLwotCi1zdGF0 aWMgaW50Ci1pbml0c2NyKCkgewotICAgIGludCByb3dzID0gMjQsIGNvbHMgPSA4MDsKLSAgICBp bnQgcm93ID0gMSwgY29sID0gMTsKLQotICAgIGRlYnVnKEYxMDEsIlZNUyBpbml0c2NyIHNtZ19w YXN0ZWJvYXJkX2lkIEEiLCIiLHNtZ19wYXN0ZWJvYXJkX2lkKTsKLQotICAgIGlmIChzbWdfcGFz dGVib2FyZF9pZCA9PSAtMSkgeyAvKiBPcGVuIHRoZSBzY3JlZW4gKi8KLSNpZmRlZiBPTERfVk1T ICAgICAgICAgICAgICAgICAgICAgLyogTm90ZTogUm91dGluZSBjYWxscyBsb3dlcmNhc2VkIDkv OTYgKi8KLSAgICAgICAgQ0hFQ0tfRVJSKCJpbml0c2NyOiBzbWckY3JlYXRlX3Bhc3RlYm9hcmQi LAotICAgICAgICAgICAgICAgICAgc21nJGNyZWF0ZV9wYXN0ZWJvYXJkKCZzbWdfcGFzdGVib2Fy ZF9pZCwgMCwgMCwgMCwgMCkpOwotI2Vsc2UKLSAgICAgICAgLyogRm9yIFZNUyBWNSwgbm90IHRl c3RlZCAqLwotICAgICAgICBDSEVDS19FUlIoImluaXRzY3I6IHNtZyRjcmVhdGVfcGFzdGVib2Fy ZCIsCi0gICAgICAgICAgICAgICAgICBzbWckY3JlYXRlX3Bhc3RlYm9hcmQoJnNtZ19wYXN0ZWJv YXJkX2lkLCAwLCAwLCAwLCAwLCAwKSk7Ci0jZW5kaWYgLyogT0xEX1ZNUyAqLwotICAgIH0KLSAg ICBkZWJ1ZyhGMTAxLCJWTVMgaW5pdHNjciBzbWdfcGFzdGVib2FyZF9pZCBCIiwiIixzbWdfcGFz dGVib2FyZF9pZCk7Ci0gICAgaWYgKHNtZ19wYXN0ZWJvYXJkX2lkID09IC0xKSB7Ci0JcHJpbnRm KCI/RXJyb3IgaW5pdGlhbGl6aW5nIGZ1bGxzY3JlZW4gZGlzcGxheVxuIik7Ci0JZmRpc3BsYSA9 IFhZRkRfUzsKLQlkcHlpbml0KCk7Ci0JcmV0dXJuKDApOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAx LCJWTVMgaW5pdHNjciBzbWdfZGlzcGxheV9pZCIsIiIsc21nX2Rpc3BsYXlfaWQpOwotICAgIGlm IChzbWdfZGlzcGxheV9pZCA9PSAtMSkgeyAgICAgICAgIC8qIENyZWF0ZSBhIGRpc3BsYXkgd2lu ZG93ICovCi0KLSNpZmRlZiBDT01NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXJ0 aW4gWmluc2VyICovCi0gICAgICAgIENIRUNLX0VSUigiaW5pdHNjcjogc21nJGNyZWF0ZV92aXJ0 dWFsX2Rpc3BsYXkiLAotICAgICAgICAgICAgICAgICAgU01HJENSRUFURV9WSVJUVUFMX0RJU1BM QVkoJnJvd3MsICZjb2xzLCAmc21nX2Rpc3BsYXlfaWQsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwKSk7Ci0KLSAgICAgICAgLyogQ29ubmVjdCB0 aGUgZGlzcGxheSB3aW5kb3cgdG8gdGhlIHNjcmVlbiAqLwotICAgICAgICBDSEVDS19FUlIoImlu aXRzY3I6IHNtZyRwYXN0ZV92aXJ0dWFsX2Rpc3BsYXkiLAotICAgICAgICAgICAgICAgICAgU01H JFBBU1RFX1ZJUlRVQUxfRElTUExBWSgmc21nX2Rpc3BsYXlfaWQsJnNtZ19wYXN0ZWJvYXJkX2lk LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcm93LCZjb2wp KTsKLSNlbHNlCi0gICAgICAgIENIRUNLX0VSUigiaW5pdHNjcjogc21nJGNyZWF0ZV92aXJ0dWFs X2Rpc3BsYXkiLAotICAgICAgICAgICAgICAgICAgc21nJGNyZWF0ZV92aXJ0dWFsX2Rpc3BsYXko JnJvd3MsICZjb2xzLCAmc21nX2Rpc3BsYXlfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAwLCAwLCAwKSk7Ci0KLSAgICAgICAgLyogQ29ubmVjdCB0aGUg ZGlzcGxheSB3aW5kb3cgdG8gdGhlIHNjcmVlbiAqLwotICAgICAgICBDSEVDS19FUlIoImluaXRz Y3I6IHNtZyRwYXN0ZV92aXJ0dWFsX2Rpc3BsYXkiLAotICAgICAgICAgICAgICAgICAgc21nJHBh c3RlX3ZpcnR1YWxfZGlzcGxheSgmc21nX2Rpc3BsYXlfaWQsJnNtZ19wYXN0ZWJvYXJkX2lkLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcm93LCZjb2wpKTsK LSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgfQotICAgIGRlYnVnKEYxMDEsIlZNUyBpbml0c2Ny IHNtZ19vcGVuIEEiLCIiLHNtZ19vcGVuKTsKLSAgICBpZiAoIXNtZ19vcGVuKSB7ICAgICAgICAg ICAgICAgICAgICAvKiBTdGFydCBhIGJhdGNoIHVwZGF0ZSAqLwotICAgICAgICBzbWdfb3BlbiA9 IDE7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICBDSEVDS19FUlIoImluaXRzY3I6IHNtZyRiZWdp bl9wYXN0ZWJvYXJkX3VwZGF0ZSIsCi0gICAgICAgICAgICAgICAgICBTTUckQkVHSU5fUEFTVEVC T0FSRF9VUERBVEUoJnNtZ19wYXN0ZWJvYXJkX2lkKSk7Ci0jZWxzZQotICAgICAgICBDSEVDS19F UlIoImluaXRzY3I6IHNtZyRiZWdpbl9wYXN0ZWJvYXJkX3VwZGF0ZSIsCi0gICAgICAgICAgICAg ICAgICBzbWckYmVnaW5fcGFzdGVib2FyZF91cGRhdGUoJnNtZ19wYXN0ZWJvYXJkX2lkKSk7Ci0j ZW5kaWYgLyogQ09NTUVOVCAqLwotCWRlYnVnKEYxMDEsIlZNUyBpbml0c2NyIHNtZyRiZWdpbl9w YXN0ZWJvYXJkX3VwZGF0ZSIsIiIsdm1zX3N0YXR1cyk7Ci0gICAgfQotICAgIGRlYnVnKEYxMDEs IlZNUyBpbml0c2NyIHNtZ19vcGVuIEIiLCIiLHNtZ19vcGVuKTsKLSAgICBzbWdfaW5pdGVkID0g MTsKLSAgICByZXR1cm4oMSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1yZWZyZXNoKCkgewotICAgIGRl YnVnKEYxMDEsInJlZnJlc2ggc21nX3Bhc3RlYm9hcmRfaWQiLCIiLHNtZ19wYXN0ZWJvYXJkX2lk KTsKLQotICAgIGlmIChzbWdfb3BlbiA9PSAwIHx8IHNtZ19wYXN0ZWJvYXJkX2lkID09IC0xKQot ICAgICAgcmV0dXJuOwotCi0jaWZkZWYgQ09NTUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogTWFydGluIFppbnNlciAqLwotICAgIENIRUNLX0VSUigicmVmcmVzaDogc21nJGVuZF9wYXN0 ZWJvYXJkX3VwZGF0ZSIsCi0gICAgICAgICAgICAgIFNNRyRFTkRfUEFTVEVCT0FSRF9VUERBVEUo JnNtZ19wYXN0ZWJvYXJkX2lkKSk7Ci0gICAgQ0hFQ0tfRVJSKCJyZWZyZXNoOiBzbWckYmVnaW5f cGFzdGVib2FyZF91cGRhdGUiLAotICAgICAgICAgICAgICBTTUckQkVHSU5fUEFTVEVCT0FSRF9V UERBVEUoJnNtZ19wYXN0ZWJvYXJkX2lkKSk7Ci0jZWxzZQotICAgIENIRUNLX0VSUigicmVmcmVz aDogc21nJGVuZF9wYXN0ZWJvYXJkX3VwZGF0ZSIsCi0gICAgICAgICAgICAgIHNtZyRlbmRfcGFz dGVib2FyZF91cGRhdGUoJnNtZ19wYXN0ZWJvYXJkX2lkKSk7Ci0gICAgQ0hFQ0tfRVJSKCJyZWZy ZXNoOiBzbWckYmVnaW5fcGFzdGVib2FyZF91cGRhdGUiLAotICAgICAgICAgICAgICBzbWckYmVn aW5fcGFzdGVib2FyZF91cGRhdGUoJnNtZ19wYXN0ZWJvYXJkX2lkKSk7Ci0jZW5kaWYgLyogQ09N TUVOVCAqLwotfQotCi1zdGF0aWMgdm9pZAotZW5kd2luKCkgewotICAgIGlmICghc21nX29wZW4p Ci0gICAgICByZXR1cm47Ci0KLSAgICBzbWdfb3BlbiA9IDA7Ci0KLSNpZmRlZiBDT01NRU5UCi0g ICAgQ0hFQ0tfRVJSKCJlbmR3aW46IHNtZyRlbmRfcGFzdGVib2FyZF91cGRhdGUiLAotICAgICAg ICAgICAgICBTTUckRU5EX1BBU1RFQk9BUkRfVVBEQVRFKCZzbWdfcGFzdGVib2FyZF9pZCkpOwot I2Vsc2UKLSAgICBDSEVDS19FUlIoImVuZHdpbjogc21nJGVuZF9wYXN0ZWJvYXJkX3VwZGF0ZSIs Ci0gICAgICAgICAgICAgIHNtZyRlbmRfcGFzdGVib2FyZF91cGRhdGUoJnNtZ19wYXN0ZWJvYXJk X2lkKSk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgbW92ZSgyMiwgMCk7Ci0KLSNpZmRl ZiBDT01NRU5UCi0vKgotICBUaGVzZSBjYWxscyBjbGVhciB0aGUgc2NyZWVuLgotICAoY29udmVy dCByb3V0aW5lIGNhbGxzIHRvIGxvd2VyY2FzZSAtIE1hcnRpbiBaaW5zZXIpCi0qLwotICAgIENI RUNLX0VSUigiZW5kd2luOiBzbWckZGVsZXRlX3ZpcnR1YWxfZGlzcGxheSIsCi0gICAgICAgICAg ICAgIFNNRyRERUxFVEVfVklSVFVBTF9ESVNQTEFZKCZzbWdfZGlzcGxheV9pZCkpOwotICAgIHNt Z19kaXNwbGF5X2lkID0gLTE7Ci0KLSAgICBDSEVDS19FUlIoImVuZHdpbjogc21nJGRlbGV0ZV9w YXN0ZWJvYXJkIiwKLSAgICAgICAgICAgICAgU01HJERFTEVURV9QQVNURUJPQVJEKCZzbWdfcGFz dGVib2FyZF9pZCwgMCkpOwotICAgIHNtZ19wYXN0ZWJvYXJkX2lkID0gLTE7Ci0jZW5kaWYgLyog Q09NTUVOVCAqLwotfQotCi0jaWZkZWYgQ09NTUVOVAotLyogREVDQyA2LjIgc2NyZWFtcyBibG9v ZHkgbXVyZGVyIGFib3V0IHByaW50dyAoIm5vdCBlbm91Z2ggYXJncyIpICovCi0vKiBidXQgYWRk aW5nIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlIG9ubHkgbWFrZXMgaXQgaG9sbGVyIGxvdWRlci4g Ki8KLSNpZmRlZiBfX0RFQ0MKLS8qICJ2YXJhcmdzIiBwcm90b3R5cGUgZm9yIHByaW50dyAqLwot X1BST1RPVFlQKHN0YXRpYyBpbnQgcHJpbnR3LChjaGFyICosIC4uLikpOwotI2VuZGlmIC8qIF9f REVDQyAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2lmZGVmIF9fREVDQwotI2luY2x1ZGUg PHN0ZGFyZy5oPgotX1BST1RPVFlQKHN0YXRpYyB2b2lkIHByaW50dywoY2hhciAqLCAuLi4pKTsK LXN0YXRpYyB2b2lkCi1wcmludHcoY2hhciAqc3RyLC4uLikgewotICAgIGNoYXIgYnVmWzI1NV07 Ci0gICAgdmFfbGlzdCBhcDsKLSAgICAkREVTQ1JJUFRPUih0ZXh0X2RzYywgMCk7Ci0gICAgdGV4 dF9kc2MuZHNjJGFfcG9pbnRlcj1idWY7Ci0gICAgaWYgKCFzbWdfb3BlbikKLSAgICAgIHJldHVy bjsKLSAgICB2YV9zdGFydChhcCxzdHIpOwotICAgIHRleHRfZHNjLmRzYyR3X2xlbmd0aCA9IHZz cHJpbnRmKGJ1Ziwgc3RyLCBhcCk7Ci0gICAgdmFfZW5kKGFwKTsKLSAgICBDSEVDS19FUlIoInBy aW50dzogc21nJHB1dF9jaGFycyIsCi0gICAgICAgICAgICAgIHNtZyRwdXRfY2hhcnMoJnNtZ19k aXNwbGF5X2lkLCAmdGV4dF9kc2MsIDAsIDAsIDAsIDAsIDApKTsKLX0KLSNlbHNlCi1zdGF0aWMg dm9pZAotcHJpbnR3KHN0ciwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4KQotICAgIGNo YXIgKnN0cjsKLSAgICBsb25nIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhODsKLS8qIHBy aW50dyAqLyB7Ci0gICAgY2hhciBidWZbMjU1XTsKLSAgICAkREVTQ1JJUFRPUih0ZXh0X2RzYywg MCk7Ci0gICAgaWYgKCFzbWdfb3BlbikKLSAgICAgIHJldHVybjsKLSAgICB0ZXh0X2RzYy5kc2Mk YV9wb2ludGVyPWJ1ZjsKLSAgICB0ZXh0X2RzYy5kc2Mkd19sZW5ndGggPSBzcHJpbnRmKGJ1Ziwg c3RyLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgpOwotICAgIENIRUNLX0VSUigicHJp bnR3OiBzbWckcHV0X2NoYXJzIiwKLSAgICAgICAgICAgICAgc21nJHB1dF9jaGFycygmc21nX2Rp c3BsYXlfaWQsICZ0ZXh0X2RzYywgMCwgMCwgMCwgMCwgMCkpOwotfQotI2VuZGlmIC8qIF9fREVD QyAqLwotCi0jZGVmaW5lIENLX0NVUlBPUwotaW50Ci1ja19jdXJwb3Mocm93LCBjb2wpIHsKLSAg ICBkZWJ1ZyhGMTExLCJWTVMgc21nIGNrX2N1cnBvcyIsY2tpdG9hKHJvdyksY29sKTsKLSAgICBp ZiAoIXNtZ19pbml0ZWQgfHwgIXNtZ19vcGVuKSB7Ci0gICAgICAgIGluaXRzY3IoKTsKLSAgICB9 Ci0gICAgZGVidWcoRjEwMSwiVk1TIHNtZyBjdXJwb3Mgc21nX29wZW4iLCIiLHNtZ19vcGVuKTsK LSAgICBpZiAoIXNtZ19vcGVuKQotICAgICAgcmV0dXJuKDApOwotICAgIGRlYnVnKEYxMTEsIlZN UyBzbWcgY2tfY3VycG9zIixja2l0b2Eocm93LTEpLGNvbC0xKTsKLSAgICBtb3ZlKHJvdyAtIDEs IGNvbCAtIDEpOyAgICAgICAgICAgICAvKiBTTUcgaXMgMC1iYXNlZCAqLwotICAgIHJlZnJlc2go KTsKLSAgICAvKiBlbmR3aW4oKTsgKi8KLSAgICByZXR1cm4oMCk7Ci19Ci0KLWludAotY2tfY2xz KCkgewotICAgIGRlYnVnKEYxMDEsIlZNUyBzbWcgY2tfY2xzIHNtZ19pbml0ZWQiLCIiLHNtZ19p bml0ZWQpOwotICAgIGlmICghc21nX2luaXRlZCB8fCAhc21nX29wZW4pIHsKLSAgICAgICAgaW5p dHNjcigpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJWTVMgc21nIGNrX2NscyBzbWdfb3BlbiIs IiIsc21nX29wZW4pOwotICAgIGlmICghc21nX29wZW4pCi0gICAgICByZXR1cm4oMCk7Ci0gICAg Y2xlYXIoKTsKLSAgICByZWZyZXNoKCk7Ci0gICAgLyogZW5kd2luKCk7ICovCi0gICAgcmV0dXJu KDApOwotfQotCi1pbnQKLWNrX2NsZW9sKCkgewotICAgIGRlYnVnKEYxMDEsIlZNUyBzbWcgY2tf Y2xlb2wgc21nX2luaXRlZCIsIiIsc21nX2luaXRlZCk7Ci0gICAgaWYgKCFzbWdfaW5pdGVkIHx8 ICFzbWdfb3BlbikgewotICAgICAgICBpbml0c2NyKCk7Ci0gICAgfQotICAgIGRlYnVnKEYxMDEs IlZNUyBzbWcgY2tfY2xlb2wgc21nX29wZW4iLCIiLHNtZ19vcGVuKTsKLSAgICBpZiAoIXNtZ19v cGVuKQotICAgICAgcmV0dXJuKDApOwotICAgIGNscnRvZW9sKCk7Ci0gICAgcmVmcmVzaCgpOwot ICAgIC8qIGVuZHdpbigpOyAqLwotICAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAvKiBDS19TTUcg Ki8KLQotI2lmZGVmIE1ZQ1VSU0VTCi0vKgotICBEby1pdC15b3Vyc2VsZiBjdXJzZXMgaW1wbGVt ZW50YXRpb24gZm9yIFZNUywgT1MvMiBhbmQgb3RoZXIgQU5TSS9WVC0xMDAncy4KLSAgU3VwcG9y dHMgb25seSB0aGUgVlQ1MiBhbmQgVlQxeHggKGFuZCBsYXRlciBWVDJ4eC8zeHgvNHh4KSB0ZXJt aW5hbHMuCi0gIEJ5IFRlcnJ5IEtlbm5lZHksIFN0IFBldGVycyBDb2xsZWdlLgotCi0gIEZpcnN0 LCBzb21lIHN0dWZmIHdlIGNhbiBqdXN0IGlnbm9yZToKLSovCi0KLXN0YXRpYyBpbnQKLXRvdWNo d2luKHgpIGludCB4OyB7Ci0gICAgcmV0dXJuKDApOwotfQotc3RhdGljIGludAotaW5pdHNjcigp IHsKLSAgICByZXR1cm4oMCk7Ci19Ci1zdGF0aWMgaW50Ci1yZWZyZXNoKCkgewotICAgIHJldHVy bigwKTsKLX0KLXN0YXRpYyBpbnQKLWVuZHdpbigpIHsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLS8q Ci0gKiBOb3csIHNvbWUgc3R1ZmYgd2UgbmVlZCB0byBkbzoKLSAqLwotCi1fUFJPVE9UWVAoIGlu dCBtb3ZlLCAoaW50LCBpbnQpICk7Ci0jaWZuZGVmIE9TMgotaW50Ci1tb3ZlKHJvdywgY29sKSBp bnQgcm93LCBjb2w7IHsKLSAgICBpZiAoaXN2dDUyKQotICAgICAgcHJpbnRmKCJcMDMzWSVjJWMi LCByb3cgKyAwMzcsIGNvbCArIDAzNyk7Ci0gICAgZWxzZQotICAgICAgcHJpbnRmKCJcMDMzWyVk OyVkSCIsIHJvdyArIDEsIGNvbCArIDEpOwotICAgIHJldHVybigwKTsKLX0KLQotaW50Ci1jbGVh cigpIHsKLSAgICBtb3ZlKDAsMCk7Ci0gICAgaWYgKGlzdnQ1MikKLSAgICAgIHByaW50ZigiXDAz M0oiKTsKLSAgICBlbHNlCi0gICAgICBwcmludGYoIlwwMzNbSiIpOwotICAgIHJldHVybigwKTsK LX0KLQotaW50Ci1jbHJ0b2VvbCgpIHsKLSAgICBpZiAoaXN2dDUyKQotICAgICAgcHJpbnRmKCJc MDMzSyIpOwotICAgIGVsc2UKLSAgICAgIHByaW50ZigiXDAzM1tLIik7Ci0gICAgcmV0dXJuKDAp OwotfQotCi0jZGVmaW5lIENLX0NVUlBPUwotaW50Ci1ja19jbHMoKSB7Ci0gICAgcmV0dXJuKGNs ZWFyKCkpOwotfQotCi1pbnQKLWNrX2NsZW9sKCkgewotICAgIHJldHVybihjbHJ0b2VvbCgpKTsK LX0KLQotaW50Ci1ja19jdXJwb3Mocm93LCBjb2wpIGludCByb3csIGNvbDsgewotICAgIG1vdmUo cm93LCBjb2wpOwotICAgIHJldHVybigwKTsKLX0KLQotI2Vsc2UgLyogT1MyICovCi0vKiBXaW5k b3dzIE5UIGFuZCBXaW5kb3dzIDk1IGRvIG5vdCBwcm92aWRlIEFOU0kgZW11bGF0aW9uICovCi0v KiBUaGVyZWZvcmUgd2UgbWlnaHQgYXMgd2VsbCBub3QgdXNlIGl0IGZvciBPUy8yIGVpdGhlciAg ICovCi0KLWludAotbW92ZShyb3csIGNvbCkgaW50IHJvdywgY29sOyB7Ci0jaWZuZGVmIE9ORVRF Uk1VUEQKLSAgICBTZXRDdXJQb3Mocm93LCBjb2wpOwotI2VuZGlmIC8qIE9ORVRFUk1VUEQgKi8K LSAgICBsZ290b3h5KCBWQ01ELCBjb2wrMSwgcm93KzEpOwotICAgIFZzY3JuSXNEaXJ0eShWQ01E KTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLWludAotY2xlYXIoKSB7Ci0gICAgdmlvY2VsbCBjZWxs OwotICAgIG1vdmUoMCwwKTsKLSNpZmRlZiBPTkVURVJNVVBECi0gICAgaWYgKFZzY3JuR2V0QnVm ZmVyU2l6ZShWQ01EKSA+IDApIHsKLSAgICAgICAgVnNjcm5TY3JvbGwoVkNNRCwgVVBXQVJELCAw LAotICAgICAgICAgICAgICAgICAgICBWc2NybkdldEhlaWdodChWQ01EKS0oMSksCi0gICAgICAg ICAgICAgICAgICAgIFZzY3JuR2V0SGVpZ2h0KFZDTUQpLSgwKSwgVFJVRSwgQ0hSX1NQKTsKLSAg ICAgICAgY2xlYXJ0ZXJtc2NyZWVuKFZDTUQpOwotICAgIH0KLSNlbHNlCi0gICAgY2VsbC5jID0g JyAnOwotICAgIGNlbGwuYSA9IGNvbG9yY21kOwotICAgIFdydE5DZWxsKGNlbGwsIGNtZF9yb3dz ICogY21kX2NvbHMsIDAsIDApOwotI2VuZGlmIC8qIE9ORVRFUk1VUEQgKi8KLSAgICByZXR1cm4o MCk7Ci19Ci0KLWludAotY2xydG9lb2woKSB7Ci0gICAgVVNIT1JUIHJvdywgY29sOwotICAgIHZp b2NlbGwgY2VsbDsKLQotICAgIGNlbGwuYyA9ICcgJzsKLSAgICBjZWxsLmEgPSBjb2xvcmNtZDsK LSNpZm5kZWYgT05FVEVSTVVQRAotICAgIEdldEN1clBvcygmcm93LCAmY29sICk7Ci0gICAgV3J0 TkNlbGwoY2VsbCwgY21kX2NvbHMgLSBjb2wgLTEsIHJvdywgY29sKTsKLSNlbmRpZiAvKiBPTkVU RVJNVVBEICovCi0gICAgY2xydG9lb2xuKFZDTUQsQ0hSX1NQKTsKLSAgICByZXR1cm4oMCk7Ci19 Ci0KLSNkZWZpbmUgQ0tfQ1VSUE9TCi1pbnQKLWNrX2N1cnBvcyhyb3csIGNvbCkgaW50IHJvdywg Y29sOyB7Ci0gICAgbW92ZShyb3csIGNvbCk7Ci0gICAgcmV0dXJuKDApOwotfQotCi1pbnQKLWNr X2NscygpIHsKLSAgICByZXR1cm4oY2xlYXIoKSk7Ci19Ci0KLWludAotY2tfY2xlb2woKSB7Ci0g ICAgcmV0dXJuKGNscnRvZW9sKCkpOwotfQotCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyog TVlDVVJTRVMgKi8KLQotI2lmbmRlZiBOT1RFUk1DQVAKLSNpZm5kZWYgQ0tfQ1VSUE9TCi0jZGVm aW5lIENLX0NVUlBPUwotCi0vKiBUZXJtY2FwL1Rlcm1pbmZvIHNlY3Rpb24gKi8KLQotc3RhdGlj IGNoYXIgY3VyX2Nsc1szMl0gPSB7IE5VTCwgTlVMIH07Ci1zdGF0aWMgY2hhciBjdXJfY2xlb2xb MzJdID0geyBOVUwsIE5VTCB9Owotc3RhdGljIGNoYXIgY3VyX2NtWzY0XSA9IHsgTlVMLCBOVUwg fTsKLXN0YXRpYyBjaGFyIHRnc2J1ZlsxMjhdID0geyBOVUwsIE5VTCB9OwotCi1zdGF0aWMKLSNp ZmRlZiBDS19BTlNJQwotdm9pZAotI2VuZGlmIC8qIENLX0FOU0lDICovCi1ja190ZXJtc2V0KHgp IGludCB4OyB7Ci0gICAgY3VyX2Nsc1swXSA9IE5VTDsKLSAgICBjdXJfY2xlb2xbMF0gPSBOVUw7 Ci0gICAgY3VyX2NtWzBdID0gTlVMOwotI2lmZGVmIHRnZXRlbnQKLSAgICBkZWJ1ZyhGMTAwLCJ0 Z2V0ZW50IGlzIGEgbWFjcm8iLCIiLDApOwotI2VuZGlmIC8qIHRnZXRlbnQgKi8KLSNpZmRlZiB0 Z2V0c3RyCi0gICAgZGVidWcoRjEwMCwidGdldHN0ciBpcyBhIG1hY3JvIiwiIiwwKTsKLSNlbmRp ZiAvKiB0Z2V0c3RyICovCi0jaWZkZWYgdHB1dHMKLSAgICBkZWJ1ZyhGMTAwLCJ0cHV0cyBpcyBh IG1hY3JvIiwiIiwwKTsKLSNlbmRpZiAvKiB0cHV0cyAqLwotI2lmZGVmIHRnb3RvCi0gICAgZGVi dWcoRjEwMCwidGdvdG8gaXMgYSBtYWNybyIsIiIsMCk7Ci0jZW5kaWYgLyogdGdvdG8gKi8KLSNp ZmRlZiBOT1RFUk1DQVAKLSAgICAvKiB0Z2V0c3RyKCkgZ2V0cyBhIHNlZ21lbnRhdGlvbiBmYXVs dCBvbiBPU0YvMSAqLwotICAgIGRlYnVnKEYxMDAsImNrX3Rlcm1zZXQgTk9URVJNQ0FQIiwiIiww KTsKLSNlbHNlCi0gICAgaWYgKG5vdGVybWNhcCkgewotICAgICAgICBkZWJ1ZyhGMTAwLCJja190 ZXJtc2V0IG5vdGVybWNhcCIsIiIsMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZGVi dWcoRjEwMSwiY2tfdGVybXNldCB4IiwiIix4KTsKLSAgICBpZiAoeCA+IDApIHsKLSAgICAgICAg Y2hhciAqIGJwOwotICAgICAgICBicCA9IHRnc2J1ZjsKLSAgICAgICAgKmJwID0gTlVMOwotICAg ICAgICBkZWJ1ZyhGMTEwLCJja190ZXJtc2V0IGNhbGxpbmcgdGdldHN0ciIsImNsIiwwKTsKLSAg ICAgICAgaWYgKHRnZXRzdHIoImNsIiwgJmJwKSkgeyAgICAgICAvKiBHZXQgY2xlYXItc2NyZWVu IGNvZGUgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX3Rlcm1zZXQgdGdldHN0ciBjbCIs dGdzYnVmLCIiKTsKLSAgICAgICAgICAgIGlmICgoaW50KXN0cmxlbih0Z3NidWYpIDwgMzIpCi0g ICAgICAgICAgICAgIGNrc3RybmNweShjdXJfY2xzLHRnc2J1ZiwzMik7Ci0gICAgICAgIH0gZWxz ZQotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYnAgPSB0Z3NidWY7Ci0gICAgICAgIGlmICh0 Z2V0c3RyKCJjZSIsICZicCkpIHsgICAgICAgLyogR2V0IGNsZWFyLXRvLWVuZC1vZi1saW5lIGNv ZGUgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX3Rlcm1zZXQgdGdldHN0ciBjZSIsdGdz YnVmLCIiKTsKLSAgICAgICAgICAgIGlmICgoaW50KXN0cmxlbih0Z3NidWYpIDwgMzIpCi0gICAg ICAgICAgICAgIGNrc3RybmNweShjdXJfY2xlb2wsdGdzYnVmLDMyKTsKLSAgICAgICAgfSBlbHNl Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICBicCA9IHRnc2J1ZjsKLSAgICAgICAgaWYgKHRn ZXRzdHIoImNtIiwgJmJwKSkgeyAgICAgICAvKiBHZXQgY3Vyc29yLW1vdmVtZW50IGNvZGUgKi8K LSAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX3Rlcm1zZXQgdGdldHN0ciBjbSIsdGdzYnVmLCIi KTsKLSAgICAgICAgICAgIGlmICgoaW50KXN0cmxlbih0Z3NidWYpIDwgNjQpCi0gICAgICAgICAg ICAgIGNrc3RybmNweShjdXJfY20sdGdzYnVmLDY0KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg ICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZiAvKiBOT1RFUk1DQVAgKi8KLX0KLQotI2lmbmRlZiBU UFVUU0ZOVFlQRQotI2lmZGVmIFRQVVRTSVNWT0lECi0jZGVmaW5lIFRQVVRTRk5UWVBFIHZvaWQK LSNlbHNlCi0jZGVmaW5lIFRQVVRTRk5UWVBFIGludAotI2VuZGlmIC8qIFRQVVRTSVNWT0lEICov Ci0jZW5kaWYgLyogVFBVVFNGTlRZUEUgKi8KLQotI2lmbmRlZiBUUFVUU0FSR1RZUEUKLSNpZmRl ZiBIUFVYOQotI2RlZmluZSBUUFVUU0FSR1RZUEUgY2hhcgotI2Vsc2UKLSNpZmRlZiBIUFVYMTAK LSNkZWZpbmUgVFBVVFNBUkdUWVBFIGNoYXIKLSNlbHNlCi0jZGVmaW5lIFRQVVRTQVJHVFlQRSBp bnQKLSNlbmRpZiAvKiBIUFVYMTAgKi8KLSNlbmRpZiAvKiBIUFVYOSAqLwotI2VuZGlmIC8qIFRQ VVRTQVJHVFlQRSAqLwotCi1zdGF0aWMgVFBVVFNGTlRZUEUKLSNpZmRlZiBDS19BTlNJQwotY2tf b3V0YyhUUFVUU0FSR1RZUEUgeCkKLSNlbHNlCi1ja19vdXRjKHgpIFRQVVRTQVJHVFlQRSB4Owot I2VuZGlmIC8qIENLX0FOU0lDICovCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogVG8gc2F0aXNmeSB0cHV0cygpIGFyZzMgcHJvdG90eXBlICovCi0gICAgaW50IHJj OwotICAgIGNoYXIgYzsKLSAgICBjID0gKGNoYXIpIHg7Ci0gICAgcmMgPSAoaW5zZXJ2ZXIpID8g dHRvYyhjKSA6IGNvbm9jKGMpOwotI2lmbmRlZiBUUFVUU0lTVk9JRAotICAgIHJldHVybihyYyk7 Ci0jZW5kaWYgLyogVFBVVFNJU1ZPSUQgKi8KLX0KLQotaW50Ci1ja19jdXJwb3Mocm93LCBjb2wp IGludCByb3csIGNvbDsgewotI2lmZGVmIENLX0FOU0lDCi0gICAgVFBVVFNGTlRZUEUgKCpmbiko VFBVVFNBUkdUWVBFKTsKLSNlbHNlCi0gICAgVFBVVFNGTlRZUEUgKCpmbikoKTsKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwotICAgIGlmICghZnhkX2luaXRlZCkKLSAgICAgIGZ4ZGluaXQoOTk5OSk7 Ci0gICAgaWYgKCFjdXJfY21bMF0pIHsgICAgICAgICAgICAgICAgICAgLyogV2UgZG9uJ3QgaGF2 ZSBlc2NhcGUgc2VxdWVuY2VzICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICByZXR1cm4oLTEp OyAgICAgICAgICAgICAgICAgICAgIC8qIERvIG5vdGhpbmcgKi8KLSNlbHNlCi0gICAgICAgIC8q IEJvdGggQy1LZXJtaXQncyBTQ1JFRU4gY29tbWFuZCBhbmQgQU5TSS9WVDEwMCBhcmUgMS1iYXNl ZCAqLwotICAgICAgICBwcmludGYoIlwwMzNbJWQ7JWRIIiwgcm93LCBjb2wpOyAvKiBPciBkZWZh dWx0IHRvIEFOU0kgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgfSBlbHNlIHsKLSAgICAg ICAgZm4gPSBja19vdXRjOwotICAgICAgICAvKiB0ZXJtY2FwL3Rlcm1pbmZvIGlzIDAtYmFzZWQg Ki8KLSAgICAgICAgdHB1dHMoCi0jaWZkZWYgVFBVVFNBUkcxQ09OU1QKLSAgICAgICAgICAgICAg KGNvbnN0IGNoYXIgKikKLSNlbmRpZiAvKiBUUFVUU0FSRzFDT05TVCAqLwotICAgICAgICAgICAg ICB0Z290byhjdXJfY20sY29sLTEscm93LTEpLDEsZm4pOwotICAgIH0KLSAgICByZXR1cm4oMCk7 Ci19Ci0KLWludAotY2tfY2xzKCkgewotI2lmZGVmIENLX0FOU0lDCi0gICAgVFBVVFNGTlRZUEUg KCpmbikoVFBVVFNBUkdUWVBFKTsKLSNlbHNlCi0gICAgVFBVVFNGTlRZUEUgKCpmbikoKTsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwotICAgIGlmICghZnhkX2luaXRlZCkKLSAgICAgIGZ4ZGluaXQo OTk5OSk7Ci0gICAgaWYgKCFjdXJfY2xzWzBdKSB7ICAgICAgICAgICAgICAgICAgLyogSWYgd2Ug ZG9uJ3QgaGF2ZSBlc2NhcGUgc2VxdWVuY2VzICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICBy ZXR1cm4oLTEpOyAgICAgICAgICAgICAgICAgICAgIC8qIERvIG5vdGhpbmcgKi8KLSNlbHNlCi0g ICAgICAgIHByaW50ZigiXDAzM1s7SFwwMzNbMkoiKTsgICAgICAgLyogT3IgZGVmYXVsdCB0byBB TlNJICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZuID0g Y2tfb3V0YzsKLSAgICAgICAgZGVidWcoRjExMSwiY2tfY2xzIDIiLGN1cl9jbHMsZnhkX2luaXRl ZCk7Ci0gICAgICAgIHRwdXRzKGN1cl9jbHMsY21kX3Jvd3MsZm4pOwotICAgIH0KLSAgICByZXR1 cm4oMCk7Ci19Ci0KLWludAotY2tfY2xlb2woKSB7Ci0jaWZkZWYgQ0tfQU5TSUMKLSAgICBUUFVU U0ZOVFlQRSAoKmZuKShUUFVUU0FSR1RZUEUpOwotI2Vsc2UKLSAgICBUUFVUU0ZOVFlQRSAoKmZu KSgpOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0gICAgaWYgKCFmeGRfaW5pdGVkKQotICAgICAg ZnhkaW5pdCg5OTk5KTsKLSAgICBpZiAoIWN1cl9jbGVvbFswXSkgeyAgICAgICAgICAgICAgICAv KiBJZiB3ZSBkb24ndCBoYXZlIGVzY2FwZSBzZXF1ZW5jZXMgKi8KLSNpZmRlZiBDT01NRU5UCi0g ICAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAgICAgICAgLyogRG8gbm90aGluZyAqLwot I2Vsc2UKLSAgICAgICAgcHJpbnRmKCJcMDMzW0siKTsgICAgICAgICAgICAgICAvKiBPciB1c2Ug QU5TSSAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB9IGVsc2UgewotICAgICAgICBmbiA9 IGNrX291dGM7Ci0gICAgICAgIHRwdXRzKGN1cl9jbGVvbCwxLGZuKTsKLSAgICB9Ci0gICAgcmV0 dXJuKDApOwotfQotI2VuZGlmIC8qIENLX0NVUlBPUyAqLwotI2Vsc2UKLXN0YXRpYyB2b2lkCi1j a190ZXJtc2V0KHgpIGludCB4OyB7Ci0gICAgaWYgKHgpIHJldHVybjsKLX0KLSNlbmRpZiAvKiBO T1RFUk1DQVAgKi8KLQotI2lmbmRlZiBDS19DVVJQT1MKLSNkZWZpbmUgQ0tfQ1VSUE9TCi1pbnQK LWNrX2NscygpIHsKLSAgICBwcmludGYoIlwwMzNbO0hcMDMzWzJKIik7Ci0gICAgcmV0dXJuKDAp OwotfQotCi1pbnQKLWNrX2NsZW9sKCkgewotICAgIHByaW50ZigiXDAzM1tLIik7Ci0gICAgcmV0 dXJuKDApOwotfQotCi1pbnQKLWNrX2N1cnBvcyhyb3csIGNvbCkgaW50IHJvdywgY29sOyB7Ci0g ICAgcHJpbnRmKCJcMDMzWyVkOyVkSCIsIHJvdywgY29sKTsKLSAgICByZXR1cm4oMCk7Ci19Ci0j ZW5kaWYgLyogQ0tfQ1VSUE9TICovCi0KLQotI2lmbmRlZiBOT1hGRVIKLXN0YXRpYyBpbnQgY2lu aXQgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBjdXJzZXMgaW5pdCdkICovCi1z dGF0aWMgaW50IGNlbmR3ID0gMDsgICAgICAgICAgICAgICAgICAgLyogZW5kd2luKCkgd2FzIGNh bGxlZCAqLwotCi1zdGF0aWMKLSNpZmRlZiBDS19BTlNJQyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBCZWNhdXNlIFZPSUQgdXNlZCBieSBjdXJzZXMuaCAqLwotdm9pZAotI2Vsc2UKLSNpZmRl ZiBNWUNVUlNFUwotVk9JRAotI2Vsc2UKLWludAotI2VuZGlmIC8qIE1ZQ1VSU0VTICovCi0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLSNpZmRlZiBDS19BTlNJQyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBVcGRhdGUgJSB0cmFuc2ZlcmVkIGFuZCAlIGJhciAqLwotdXBkcGN0KGxvbmcgb2xkLCBs b25nIG5ldykKLSNlbHNlIC8qIENLX0FOU0lDICovCi11cGRwY3Qob2xkLCBuZXcpIGxvbmcgb2xk LCBuZXc7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHVwZHBjdCAqLyB7Ci0jaWZkZWYgQ09N TUVOVAotICAgIGludCBtLCBuOwotICAgIG1vdmUoQ1dfUENELDIyKTsKLSAgICBwcmludHcoIiVs ZCIsIG5ldyk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICBLdWlTZXRQcm9wZXJ0eShL VUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BDRCwgKGxvbmcpIG5ldyk7Ci0jZW5kaWYgLyog Szk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotI2lmZGVmIENLX1BDVF9CQVIKLSAgICBpZiAodGhl cm1vbWV0ZXIpIHsKLSAgICAgICAgaWYgKG9sZCA+IG5ldykgewotICAgICAgICAgICAgb2xkID0g MDsKLSAgICAgICAgICAgIG1vdmUoQ1dfUENELCAyNik7Ci0gICAgICAgICAgICBjbHJ0b2VvbCgp OwotICAgICAgICB9Ci0gICAgICAgIG0gPSBvbGQvMjsKLSAgICAgICAgbW92ZShDV19QQ0QsIDI2 ICsgbSk7Ci0gICAgICAgIG4gPSBuZXcgLyAyIC0gbTsKLSNpZm5kZWYgT1MyCi0gICAgICAgIHdo aWxlIChuID4gMCkgewotICAgICAgICAgICAgaWYgKChtICsgMSkgJSA1ID09IDApCi0gICAgICAg ICAgICAgIHByaW50dygiKiIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBwcmlu dHcoIj0iKTsKLSAgICAgICAgICAgIG0rKzsKLSAgICAgICAgICAgIG4tLTsKLSAgICAgICAgfQot ICAgICAgICBpZiAobmV3ICUgMiAhPSAwKSBwcmludHcoIi0iKTsKLSAgICAgICAgLyogbW92ZShD V19QQ0QsIDIyKzUzKTsgKi8KLSNlbHNlIC8qIE9TMiAqLwotICAgICAgICB3aGlsZSAobiA+IDAp IHsKLSAgICAgICAgICAgIHByaW50dygiJWMiLCAnXDMzMycpOwotICAgICAgICAgICAgbSsrOyBu LS07Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG5ldyAlIDIgIT0gMCkKLSAgICAgICAgICBwcmlu dHcoIiVjIiwgJ1wyNjEnKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB9Ci0jZW5kaWYgLyogQ0tf UENUX0JBUiAqLwotICAgIC8qIGNscnRvZW9sKCk7ICovCi0jZWxzZSAgLyogIUNPTU1FTlQgKi8K LSNpZmRlZiBPUzIKLSNkZWZpbmUgQ0hBUjEgICAnXDMzMycgICAgICAgICAgLyogT1MyIC0gQ1A0 MzcgKi8KLSNkZWZpbmUgQ0hBUjIgICAnXDI2MScKLSNlbHNlCi0jZGVmaW5lIENIQVIxICAgJy8n ICAgICAgICAgICAgIC8qIERlZmF1bHQgKi8KLSNkZWZpbmUgQ0hBUjIgICAnLScKLSNlbmRpZiAv KiBPUzIgKi8KLSAgICBkZWJ1ZyhGMTAxLCJ1cGRwY3Qgb2xkIiwiIixvbGQpOwotICAgIGRlYnVn KEYxMDEsInVwZHBjdCBuZXciLCIiLG5ldyk7Ci0gICAgbW92ZShDV19QQ0QsMjIpOwotICAgIHBy aW50dygiJS0zbGQiLCBuZXcpOyAvKiAgKHdhcykgICBwcmludHcoIiVsZCIsIG5ldyk7ICAqLwot I2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RS QU5TRkVSLCAobG9uZykgQ1dfUENELCAobG9uZykgbmV3ICk7Ci0jZW5kaWYgLyogSzk1RyAqLwot I2VuZGlmIC8qIEtVSSAqLwotI2lmZGVmIENLX1BDVF9CQVIKLSAgICBpZiAodGhlcm1vbWV0ZXIp IHsKLSAgICAgICAgaW50IG0sIG47Ci0KLSAgICAgICAgaWYgKG9sZCA+IG5ldykgewotICAgICAg ICAgICAgb2xkID0gMCA7Ci0gICAgICAgICAgICBtb3ZlKENXX1BDRCwgMjYpOwotICAgICAgICAg ICAgY2xydG9lb2woKTsKLSAgICAgICAgfQotICAgICAgICBpZiAobmV3IDw9IDEwMEwpIHsKLSAg ICAgICAgICAgIG0gPSBvbGQgLyAyOwotICAgICAgICAgICAgbiA9IG5ldyAvIDIgLSBtOwotICAg ICAgICAgICAgbW92ZShDV19QQ0QsIDI2K20pOwotICAgICAgICAgICAgd2hpbGUgKG4tLSA+IDAp Ci0gICAgICAgICAgICAgIHByaW50dygiJWMiLCBDSEFSMSk7Ci0gICAgICAgICAgICBpZiAobmV3 ICUgMiAhPSAwKQotICAgICAgICAgICAgICBwcmludHcoIiVjIiwgQ0hBUjIpOwotICAgICAgICB9 Ci0gICAgfQotI2VuZGlmIC8qIENLX1BDVF9CQVIgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi19 Ci0KLXN0YXRpYyBDS19PRkZfVCBvbGRfdHIgPSAoQ0tfT0ZGX1QpLTE7CS8qIFRpbWUgcmVtYWlu aW5nIHByZXZpb3VzbHkgKi8KLQotc3RhdGljIENLX09GRl9UCi0jaWZkZWYgQ0tfQU5TSUMKLXNo b2V0bChDS19PRkZfVCBvbGRfdHIsIGxvbmcgY3BzLCBDS19PRkZfVCBmc2l6LCBDS19PRkZfVCBo b3dmYXIpCi0jZWxzZQotICAgIHNob2V0bChvbGRfdHIsIGNwcywgZnNpeiwgaG93ZmFyKSBsb25n IGNwczsgQ0tfT0ZGX1Qgb2xkX3RyLCBmc2l6LCBob3dmYXI7Ci0jZW5kaWYgLyogQ0tfQU5TSUMg Ki8KLS8qIHNob2V0bCAqLyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFc3RpbWF0ZWQg dGltZSBsZWZ0IGluIHRyYW5zZmVyICovCi0gICAgQ0tfT0ZGX1QgdHI7CQkJLyogVGltZSByZW1h aW5pbmcsIHNlY29uZHMgKi8KLQotI2lmZGVmIEdGVElNRVIKLSAgICBpZiAoZnNpeiA+IDBMICYm IGNwcyA+IDBMKQotICAgICAgdHIgPSAoQ0tfT0ZGX1QpKChDS0ZMT0FUKShmc2l6IC0gaG93ZmFy KSAvIChDS0ZMT0FUKWNwcyk7Ci0gICAgZWxzZQotICAgICAgdHIgPSAoQ0tfT0ZGX1QpLTE7Ci0j ZWxzZQotICAgIHRyID0gKGZzaXogPiAwTCAmJiBjcHMgPiAwTCkgPwotICAgICAgKChmc2l6IC0g aG93ZmFyKSAvIGNwcykgOgotICAgICAgICAoQ0tfT0ZGX1QpLTE7Ci0jZW5kaWYgLyogR0ZUSU1F UiAqLwotICAgIG1vdmUoQ1dfVFIsMjIpOwotICAgIGlmICh0ciA+IChDS19PRkZfVCktMSkgewot ICAgICAgICBpZiAodHIgIT0gb2xkX3RyKSB7Ci0gICAgICAgICAgICBwcmludHcoIiVzIixoaG1t c3ModHIpKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgS3VpU2V0UHJv cGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKUNXX1RSLCAobG9uZyloaG1tc3ModHIpKTsK LSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICBjbHJ0b2Vv bCgpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnR3KCIodW5rbm93biki KTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJ X0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19UUiwgKGxvbmcpICIodW5rbm93bikiICk7Ci0jZW5k aWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICBjbHJ0b2VvbCgpOwotICAg IH0KLSAgICByZXR1cm4odHIpOwotfQotCi1zdGF0aWMgbG9uZwotI2lmZGVmIENLX0FOU0lDCi1z aG9jcHMoaW50IHBjdCwgQ0tfT0ZGX1QgZnNpeiwgQ0tfT0ZGX1QgaG93ZmFyKQotI2Vsc2UKLXNo b2NwcyhwY3QsIGZzaXosIGhvd2ZhcikgaW50IHBjdDsgQ0tfT0ZGX1QgZnNpeiwgaG93ZmFyOwot I2VuZGlmIC8qIENLX0FOU0lDICovCi0vKiBzaG9jcHMgKi8gewotI2lmZGVmIENQU19XRUlHSFRF RAotICAgIHN0YXRpYyBDS19PRkZfVCBvbGRmZmMgPSAwTDsKLSNlbmRpZiAvKiBDUFNfV0VJR0hU RUQgKi8KLSNpZmRlZiBHRlRJTUVSCi0gICAgQ0tGTE9BVCBzZWNzLCB4eDsKLSNlbHNlCi0gICAg Q0tfT0ZGX1Qgc2VjcywgeHg7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotCi0jaWZkZWYgR0ZUSU1F UgotICAgIHh4ID0gKGd0diA+PSAwLjApID8gZ3R2IDogMC4wOyAgICAgIC8qIEZsb2F0aW5nLXBv aW50IHZlcnNpb24gKi8KLSAgICBndHYgPSBnZnRpbWVyKCk7Ci0gICAgaWYgKChndHYgLSBvbGRn dHYpIDwgKENLRkxPQVQpIDEuMCkgLyogT25seSBkbyB0aGlzIG9uY2UgcGVyIHNlY29uZCAqLwot ICAgICAgcmV0dXJuKG9sZGNwcyk7Ci0gICAgb2xkZ3R2ID0geHg7Ci0jZWxzZQotICAgIHh4ID0g KGd0diA+PSAwKSA/IGd0diA6IDA7ICAgICAgICAgIC8qIFdob2xlLW51bWJlciB2ZXJzaW9uICov Ci0gICAgZ3R2ID0gZ3RpbWVyKCk7Ci0gICAgaWYgKChndHYgLSBvbGRndHYpIDwgMSkKLSAgICAg IHJldHVybihvbGRjcHMpOwotICAgIG9sZGd0diA9IHh4OwotI2VuZGlmIC8qIEdGVElNRVIgKi8K LQotI2lmZGVmIENQU19XRUlHSFRFRAotICAgIC8qIGRlYnVnKEYxMDAsIlNIT0NQUzogV0VJR0hU RUQiLCIiLDApOyAqLwotICAgIGlmIChndHYgIT0gb2xkZ3R2KSB7ICAgICAgICAgICAgICAgIC8q IFRoZSBmaXJzdCBwYWNrZXQgaXMgaWdub3JlZCAqLwotICAgICAgICBpZiAoZmZjIDwgb2xkZmZj KQotICAgICAgICAgIG9sZGZmYyA9IGZmYzsKLSAgICAgICAgb2xkY3BzID0gY3BzOwotICAgICAg ICBpZiAob2xkY3BzICYmIG9sZGd0diA+Ci0jaWZkZWYgR0ZUSU1FUgotICAgICAgICAgICAgMS4w Ci0jZWxzZQotICAgICAgICAgICAgMQotI2VuZGlmIC8qIEdGVElNRVIgKi8KLSAgICAgICAgICAg ICkgeyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgZmlyc3Qgc2Vjb25kIGlzIGlnbm9y ZWQgKi8KLS8qCi0gIFRoaXMgdmVyc2lvbiBvZiBzaG9jcHMoKSBwcm9kdWNlcyBhIHdlaWdodGVk IGF2ZXJhZ2UgdGhhdCBzb21lCi0gIHBlb3BsZSBsaWtlLCBidXQgbW9zdCBwZW9wbGUgZmluZCBp dCBkaXNjb25jZXJ0aW5nIGFuZCBib21iYXJkIHVzCi0gIHdpdGggcXVlc3Rpb25zIGFuZCBjb21w bGFpbnRzIGFib3V0IHdoeSB0aGUgQ1BTIGZpZ3VyZSBmbHVjdHVhdGVzIHNvCi0gIHdpbGRseS4g IFNvIG5vdyB5b3Ugb25seSBnZXQgdGhlIHdlaWdodGVkIGF2ZXJhZ2UgaWYgeW91IGJ1aWxkIHRo ZQotICBwcm9ncmFtIHlvdXJzZWxmIHdpdGggQ1BTX1dFSUdIVEVEIGRlZmluZWQuCi0qLwotI2lm bmRlZiBDUFNfVklOQ0UKLSNpZmRlZiBHRlRJTUVSCi0gICAgICAgICAgICBjcHMgPSAobG9uZyko KCgoQ0tGTE9BVClvbGRjcHMgKiAzLjApICsKLSAgICAgICAgICAgICAgICAgICAoQ0tGTE9BVCko ZmZjIC0gb2xkZmZjKSAvIChndHYtb2xkZ3R2KSApIC8gNC4wKTsKLSNlbHNlCi0gICAgICAgICAg ICBjcHMgPSAoIChvbGRjcHMgKiAzKSArIChmZmMgLSBvbGRmZmMpIC8gKGd0di1vbGRndHYpICkg LyA0OwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLSNlbHNlCi0vKiBBbmQgYW4gYWx0ZXJuYXRlIHdl aWdodGluZyBzY2hlbWUgZnJvbSBWaW5jZW50IEZhdGljYS4uLiAqLwotICAgICAgICAgICAgY3Bz ID0gKDMgKgotICAgICAgICAgICAgICgoMStwY3QvMzAwKSpvbGRmZmMvb2xkZ3R2KygxLXBjdC8x MDApKihmZmMtb2xkZmZjKS8oZ3R2LW9sZGd0dikpKQotICAgICAgICAgICAgICAvIDQ7Ci0jZW5k aWYgLyogQ1BTX1ZJTkNFICovCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKiBObyB3 ZWlnaHRlZCBhdmVyYWdlIHNpbmNlIHRoZXJlIGlzIG5vdGhpbmcgdG8gd2VpZ2ggKi8KLSNpZmRl ZiBHRlRJTUVSCi0gICAgICAgICAgICBjcHMgPSAobG9uZykoZ3R2ICE9IDAuMCA/Ci0gICAgICAg ICAgICAgIChDS0ZMT0FUKShmZmMgLSBvbGRmZmMpIC8gKGd0diAtIG9sZGd0dikgOgotICAgICAg ICAgICAgICAgIChmZmMgLSBvbGRmZmMpKSA7Ci0jZWxzZQotICAgICAgICAgICAgY3BzID0gZ3R2 ID8gKGZmYyAtIG9sZGZmYykgLyAoZ3R2IC0gb2xkZ3R2KSA6IChmZmMgLSBvbGRmZmMpIDsKLSNl bmRpZiAvKiBHRlRJTUVSICovCi0gICAgICAgIH0KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgREVC VUcKLSAgICAgICAgaWYgKGRlYmxvZykgewotICAgICAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BT OiBwY3QgICAiLCIiLHBjdCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IGd0diAg ICIsIiIsZ3R2KTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogb2xkZ3R2IiwiIixv bGRndHYpOwotICAgICAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBkZ3R2ICAiLCIiLChsb25n KShndHYtb2xkZ3R2KSk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IGZmYyAgICIs IiIsZmZjKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogb2xkZmZjIiwiIixvbGRm ZmMpOwotICAgICAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBkZmZjICAiLCIiLGZmYy1vbGRm ZmMpOwotICAgICAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBjcHMgICAiLCIiLGNwcyk7Ci0g ICAgICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAg ICAgbW92ZShDV19DUCwyMik7Ci0gICAgICAgIHByaW50dygiJWxkIiwgY3BzKTsKLSNpZmRlZiBL VUkKLSNpZm5kZWYgSzk1RwotICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNG RVIsIChsb25nKSBDV19DUCwgKGxvbmcpIGNwcyApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRp ZiAvKiBLVUkgKi8KLSAgICAgICAgY2xydG9lb2woKTsKLSAgICAgICAgb2xkZmZjID0gZmZjOwot ICAgIH0KLSNlbHNlIC8qICFDUFNfV0VJR0hURUQgKi8KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYg REVCVUcKLSAgICBpZiAoZGVibG9nKSB7Ci0JZGVidWcoRjEwMCwiU0hPQ1BTOiBOT1QgV0VJR0hU RUQiLCIiLDApOwotICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IHBjdCAgICAiLCIiLHBjdCk7 Ci0gICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogZ3R2ICAgICIsIiIsZ3R2KTsKLSAgICAgICAg ZGVidWcoRjEwMSwiU0hPQ1BTOiBvbGRndHYgIiwiIixvbGRndHYpOwotICAgICAgICBkZWJ1ZyhG MTAxLCJTSE9DUFM6IGRndHYgICAiLCIiLChsb25nKWd0diAtIChsb25nKW9sZGd0dik7Ci0gICAg ICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogZmZjICAgICIsIiIsZmZjKTsKLSAgICAgICAgZGVidWco RjEwMSwiU0hPQ1BTOiBvbGRmZmMgIiwiIixvbGRmZmMpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJT SE9DUFM6IGRmZmMgICAiLCIiLGZmYy1vbGRmZmMpOwotICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9D UFM6IGNwcyAgICAiLCIiLGNwcyk7Ci0gICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogZmlsY250 ICIsIiIsZmlsY250KTsKLSNpZmRlZiBHRlRJTUVSCi0gICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQ UzogZnBmc2VjcyIsIiIsZnBmc2Vjcyk7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotICAgIH0KLSAg ICBkZWJ1ZyhGMTAxLCJzaG9jcHMgZ3R2IiwiIixndHYpOwotI2VuZGlmIC8qIERFQlVHICovCi0j aWZkZWYgR0ZUSU1FUgotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAvKiBkZWJ1ZyhGMTAxLCJz aG9jcHMgZnBmc2VjcyIsIiIsZnBmc2Vjcyk7ICovCi0gICAgc2VjcyA9IGd0diAtIGZwZnNlY3M7 Ci0gICAgLyogZGVidWcoRjEwMSwic2hvY3BzIHNlY3MiLCIiLChsb25nKXNlY3MpOyAqLwotICAg IGlmIChzZWNzID4gMC4wKSB7Ci0gICAgICAgIGNwcyA9IChsb25nKSgoQ0tGTE9BVCkgZmZjIC8g c2Vjcyk7Ci0gICAgICAgIC8qIGRlYnVnKEYxMDEsInNob2NwcyBjcHMiLCIiLGNwcyk7ICovCi0g ICAgICAgIG1vdmUoQ1dfQ1AsMjIpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAg IEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0NQLCAobG9uZykg Y3BzICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICBwcmlu dHcoIiVsZCIsIGNwcyk7Ci0gICAgICAgIGNscnRvZW9sKCk7Ci0gICAgfQotI2Vsc2UgIC8qIE5v dCBHRlRJTUVSICovCi0gICAgaWYgKChzZWNzID0gZ3R2IC0gZnNlY3MpID4gMCkgewotICAgICAg ICBjcHMgPSAoc2VjcyA8IDFMKSA/IGZmYyA6IGZmYyAvIHNlY3M7Ci0gICAgICAgIG1vdmUoQ1df Q1AsMjIpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgIEt1aVNldFByb3BlcnR5 KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0NQLCAobG9uZykgY3BzICk7Ci0jZW5kaWYg LyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICBwcmludHcoIiVsZCIsIGNwcyk7 Ci0gICAgICAgIGNscnRvZW9sKCk7Ci0gICAgfQotI2VuZGlmIC8qIEdGVElNRVIgKi8KLSNlbmRp ZiAvKiBDUFNfV0VJR0hURUQgKi8KLQotICAgIGlmIChjcHMgPiBwZWFrY3BzICYmICAgICAgICAg ICAgICAgIC8qIFBlYWsgdHJhbnNmZXIgcmF0ZSAqLwotICAgICAgICAoKHdoYXQgJiBXX1NFTkQg JiYgc3BhY2tldHMgPiB3c2xvdHMgKyA0KSB8fAotCSAoISh3aGF0ICYgV19TRU5EKSAmJiBzcGFj a2V0cyA+IDEwKSkpIHsKLSAgICAgICAgcGVha2NwcyA9IGNwczsKLSAgICB9Ci0gICAgb2xkX3Ry ID0gc2hvZXRsKG9sZF90ciwgY3BzLCBmc2l6LCBob3dmYXIpOwotICAgIHJldHVybihjcHMpOwot fQotCi1zdGF0aWMKLSNpZmRlZiBDS19BTlNJQyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBC ZWNhdXNlIFZPSUQgdXNlZCBieSBjdXJzZXMuaCAqLwotdm9pZAotI2Vsc2UKLSNpZmRlZiBNWUNV UlNFUwotVk9JRAotI2Vsc2UKLWludAotI2VuZGlmIC8qIE1ZQ1VSU0VTICovCi0jZW5kaWYgLyog Q0tfQU5TSUMgKi8KLXNjcmZ0KCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBE aXNwbGF5IGZpbGUgdHlwZSAqLwotICAgIGNoYXIgeGZlcnN0clsyNTZdOwotICAgIHhmZXJzdHJb MF0gPSBOVUw7Ci0gICAgZGVidWcoRjEwMSwic2NyZnQgYmluYXJ5IiwiIixiaW5hcnkpOwotICAg IGlmIChiaW5hcnkpIHsKLSAgICAgICAgc3dpdGNoKGJpbmFyeSkgewotICAgICAgICAgIGNhc2Ug WFlGVF9MOgotICAgICAgICAgICAgY2tzdHJuY3B5KHhmZXJzdHIsIkxBQkVMRUQiLDI1Nik7Ci0g ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFhZRlRfSToKLSAgICAgICAgICAgIGNr c3RybmNweSh4ZmVyc3RyLCJJTUFHRSIsMjU2KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgIGNhc2UgWFlGVF9VOgotICAgICAgICAgICAgY2tzdHJuY3B5KHhmZXJzdHIsIkJJTkFSWSBV TkRFRklORUQiLDI1Nik7Ci0gICAgICAgICAgICBicmVhazsKLQkgIGNhc2UgWFlGVF9NOgotICAg ICAgICAgICAgY2tzdHJuY3B5KHhmZXJzdHIsIk1BQ0JJTkFSWSIsMjU2KTsKLSAgICAgICAgICAg IGJyZWFrOwotCSAgY2FzZSBYWUZUX1g6Ci0gICAgICAgICAgICBja3N0cm5jcHkoeGZlcnN0ciwi VEVORVgiLDI1Nik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAg ICAgICAgIGNhc2UgWFlGVF9COgotICAgICAgICAgICAgY2tzdHJuY3B5KHhmZXJzdHIsIkJJTkFS WSIsMjU2KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0jaWZkZWYgQ0tfUkVTRU5E Ci0gICAgICAgIGlmICh3aGF0ICYgV19TRU5EICYmIHNlbmRzdGFydCA+IDBMKSB7Ci0gICAgICAg ICAgICBpZiAoc2VuZG1vZGUgPT0gU01fUFNFTkQpIHsKLSAgICAgICAgICAgICAgICBja3N0cm5j YXQoeGZlcnN0ciwgIiAvIHBhcnRpYWwiLCAyNTYpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChz ZW5kbW9kZSA9PSBTTV9SRVNFTkQpIHsKLSAgICAgICAgICAgICAgICBja3N0cm5jYXQoeGZlcnN0 ciwgIiAvIHJlc2VuZCIsIDI1Nik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAo d2hhdCAmIFdfUkVDViAmJiByc19sZW4gPiAwTCkgewotICAgICAgICAgICAgY2tzdHJuY2F0KHhm ZXJzdHIsICIgLyByZXNlbmQiLCAyNTYpOwotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tfUkVTRU5E ICovCi0gICAgfSBlbHNlIHsKLQotI2lmbmRlZiBOT0NTRVRTCi0gICAgICAgIGNrc3RybmNweSh4 ZmVyc3RyLCJURVhUIiwyNTYpOwotI2lmZGVmIE5FV0ZUUAotI2lmbmRlZiBOT1VOSUNPREUKLQlp ZiAod2hhdCAmIFdfRlRQKSB7Ci0JICAgIGlmIChmdHBfY3N4IDwgMCkKLQkgICAgICBja3N0cm5j YXQoeGZlcnN0ciwiIChubyB0cmFuc2xhdGlvbikiLCAyNTYpOwotCSAgICBlbHNlCi0JICAgICAg Y2ttYWt4bXNnKCZ4ZmVyc3RyWzRdLDI1MiwKLQkJICAgICAgICIgKCIsCi0JCSAgICAgICBmY3Np bmZvWyh3aGF0ICYgV19TRU5EKSA/IGZ0cF9jc2wgOiBmdHBfY3N4XS5rZXl3b3JkLAotCQkgICAg ICAgIiA9PiAiLAotCQkgICAgICAgZmNzaW5mb1sod2hhdCAmIFdfU0VORCkgPyBmdHBfY3N4IDog ZnRwX2NzbF0ua2V5d29yZCwKLQkJICAgICAgICIpIiwKLQkJICAgICAgIE5VTEwsTlVMTCxOVUxM LE5VTEwsTlVMTCxOVUxMLE5VTEwKLQkJICAgICAgICk7Ci0JfSBlbHNlCi0jZW5kaWYgLyogTk9V TklDT0RFICovCi0jZW5kaWYgLyogTkVXRlRQICovCi0JICBpZiAodGNoYXJzZXQgPT0gVENfVFJB TlNQKSB7Ci0gICAgICAgICAgICBja3N0cm5jYXQoeGZlcnN0ciwgIiAobm8gdHJhbnNsYXRpb24p IiwgMjU2KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICh3aGF0ICYgV19TRU5E KSB7Ci0gICAgICAgICAgICAgICAgc3ByaW50ZiggJnhmZXJzdHJbc3RybGVuKHhmZXJzdHIpXSwg Lyogc2FmZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgIiAoJXMgPT4gJXMpIiwKLSAgICAg ICAgICAgICAgICAgICAgICAgIGZjc2luZm9bZmNoYXJzZXRdLmtleXdvcmQsIC8qIGJ1aWx0LWlu IGtleXdvcmRzICovCi0gICAgICAgICAgICAgICAgICAgICAgICB0Y3NpbmZvW3RjaGFyc2V0XS5r ZXl3b3JkICAvKiBsZW5ndGhzIGFyZSBjb250cm9sbGVkICovCi0JCQkpOwotICAgICAgICAgICAg fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzcHJpbnRmKCAmeGZlcnN0cltzdHJsZW4oeGZlcnN0 cildLCAvKiBzYWZlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAiICglcyA9PiAlcykiLAot ICAgICAgICAgICAgICAgICAgICAgICAgdGNzaW5mb1t0Y2hhcnNldF0ua2V5d29yZCwgLyogYnVp bHQtaW4ga2V5d29yZHMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGZjc2luZm9bZmNoYXJz ZXRdLmtleXdvcmQpOyAvKiBsZW5ndGhzIGNvbnRyb2xsZWQgKi8KLSAgICAgICAgICAgIH0KLSAg ICAgICAgfQotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSAgICB9Ci0gICAgbW92ZShDV19UWVAsMjIp OwotICAgIHByaW50dygiJXMiLCB4ZmVyc3RyKTsKLSAgICBjbHJ0b2VvbCgpOwotI2lmZGVmIEtV SQotI2lmbmRlZiBLOTVHCi0gICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAo bG9uZykgQ1dfVFlQLCAobG9uZykgeGZlcnN0ciApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRp ZiAvKiBLVUkgKi8KLSAgICByZXR1cm47Ci19Ci0KLSNpZmRlZiBDS19ORVdURVJNCi1zdGF0aWMg RklMRSAqY2tfc3Rkb3V0ID0gTlVMTDsKLXN0YXRpYyBpbnQgY2tfZmQgPSAtMTsKLSNlbmRpZiAv KiBDS19ORVdURVJNICovCi0KLXN0YXRpYyBsb25nIHBjdCA9IDBMLCBvbGRwY3QgPSAwTCwgb2xk cnR0ID0gLTFMOwotc3RhdGljIGludCBvbGR0eXAgPSAwLCBvbGR3aW4gPSAtMSwgb2xkdHJ5ID0g LTEsIG9sZGxlbiA9IC0xLCBvbGR0aW0gPSAtMTsKLQotI2lmZGVmIE5FVENPTk4KLXN0YXRpYyBj aGFyICpuZXRuYW1lW10gPSB7Ci0gICAgIm5vbmUiLAkJCQkvKiAwMCAqLwotICAgICJUQ1AvSVAi LAkJCQkvKiAwMSBUQ1AgKFNvY2tldHMpICovCi0gICAgIlRDUC9JUCIsCQkJCS8qIDAyIFRDUCAo U3RyZWFtcykgKi8KLSAgICAiWC4yNSIsCQkJCS8qIDAzIFN1bkxpbmsgWC4yNCAgKi8KLSAgICAi REVDbmV0IiwJCQkJLyogMDQgREVDbmV0ICAqLwotICAgICJWQVggUFNJIiwJCQkJLyogMDUgVkFY IFBTSSAqLwotICAgICJOYW1lZCBQaXBlcyIsCQkJLyogMDYgTEFOIE1hbmFnZXIgTmFtZWQgUGlw ZSAqLwotICAgICJYLjI1IiwJCQkJLyogMDcgU3RyYXR1cyBWT1MgWC4yNSAqLwotICAgICJOZXRC SU9TIiwJCQkJLyogMDggSUJNIE5FVEJJT1MgKi8KLSAgICAiU3VwZXJMQVQiLAkJCQkvKiAwNyBN ZXJpZGlhbiBTdXBlckxBVCAqLwotICAgICJGaWxlIiwJCQkJLyogMTAgRmlsZSAqLwotICAgICJD b21tYW5kIiwJCQkJLyogMTEgU3VicHJvY2VzcyAocGlwZSkgKi8KLSAgICAiRExMIiwJCQkJLyog MTIgRExMIGRvZXMgaS9vICovCi0gICAgIlguMjUiLAkJCQkvKiAxMyBJQk0gQUlYTGluayBYLjI1 ICovCi0gICAgIlguMjUiLAkJCQkvKiAxNCBIUC1VWCBYLjI1ICovCi0gICAgIlBUWSIsCQkJCS8q IDE1IFBzZXVkb3Rlcm1pbmFsICovCi0gICAgIlNTSCIsCQkJCS8qIDE2IFNTSCAqLwotICAgICI8 RVJST1I+IiwJCQkJLyogMTcgSW4gY2FzZSBuZXcgdHlwZXMgYXJlIGFkZGVkICovCi0gICAgIjxF UlJPUj4iLAkJCQkvKiAxOCBidXQgbm9ib2R5IHJlbWVtYmVycyB0byB1cGRhdGUgKi8KLSAgICAi PEVSUk9SPiIsCQkJCS8qIDE5IHRoaXMgdGFibGUgLi4uICovCi0gICAgTlVMTAkJCQkvKiAyMCAq LwotfTsKLXN0YXRpYyBpbnQgbm5ldG5hbWUgPSAoc2l6ZW9mKG5ldG5hbWUpIC8gc2l6ZW9mKGNo YXIgKikpOwotCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotCi0jaWZkZWYgQ0tfQU5TSUMKLXZvaWQK LXNjcmVlbmMoaW50IGYsIGNoYXIgYyxDS19PRkZfVCBuLGNoYXIgKnMpCi0jZWxzZQotQ0tWT0lE Ci1zY3JlZW5jKGYsYyxuLHMpCi1pbnQgZjsgICAgICAgICAgLyogYXJndW1lbnQgZGVzY3JpcHRv ciAqLwotY2hhciBjOyAgICAgICAgIC8qIGEgY2hhcmFjdGVyIG9yIHNtYWxsIGludGVnZXIgKi8K LUNLX09GRl9UIG47ICAgICAvKiBhIGxvbmcgaW50ZWdlciAqLwotY2hhciAqczsgICAgICAgIC8q IGEgc3RyaW5nICovCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHNjcmVlbmMoKSAqLyB7Ci0j aWZkZWYgQ0tfU1NMCi0gICAgZXh0ZXJuIGludCB0bHNfYWN0aXZlX2ZsYWcsIHNzbF9hY3RpdmVf ZmxhZzsKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSNpZmRlZiBSTE9HQ09ERQotICAgIGV4dGVybiBp bnQgdHRucHJvdG87Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSAgICBzdGF0aWMgaW50IHEgPSAw OwotICAgIHN0YXRpYyBsb25nIGZjbnQgPSAwTDsJCS8qIE51bWJlciBvZiBmaWxlcyB0cmFuc2Zl cnJlZCAqLwotICAgIHN0YXRpYyBDS19PRkZfVCBmc2l6ID0gKENLX09GRl9UKS0xOyAvKiBDb3B5 IG9mIGZpbGUgc2l6ZSAqLwotICAgIHN0YXRpYyBDS19PRkZfVCBmYnl0ID0gMEw7IC8qIFRvdGFs IGZpbGUgYnl0ZXMgb2YgYWxsIGZpbGVzIHRyYW5zZmVycmVkICovCi0gICAgc3RhdGljIENLX09G Rl9UIGhvd2ZhciA9IDBMOyAvKiBIb3cgbXVjaCBvZiBjdXJyZW50IGZpbGUgaGFzIGJlZW4geGZl cidkICovCi0gICAgc3RhdGljIGludCAgcGN0bGJsID0gMEw7ICAvKiBQZXJjZW50IGRvbmUgdnMg Qnl0ZXMgc28gZmFyICovCi0gICAgbG9uZyBjcHMgPSAwTDsKLQotICAgIGludCBuZXQgPSAwOwot ICAgIGludCB4bmV0ID0gMDsKLSAgICBpbnQgZnRwID0gMDsKLSAgICBpbnQgbGVuOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBMZW5ndGggb2Ygc3RyaW5nICovCi0gICAgaW50IGVycm9y cyA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogRXJyb3IgY291bnRlciAqLwotICAgIGludCB4 OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdvcmtlciAqLwotCi0gICAgZGVidWco RjEwMSwic2NyZWVuYyBjaW5pdCIsIiIsY2luaXQpOwotICAgIGRlYnVnKEYxMDEsInNjcmVlbmMg Y2VuZHciLCIiLGNlbmR3KTsKLQotICAgIGlmICghcykgcyA9ICIiOyAgICAgICAgICAgICAgICAg ICAgIC8qIEFsd2F5cyBkbyB0aGlzLiAqLwotCi0gICAgZnRwID0gKHdoYXQgJiBXX0ZUUCkgPyAx IDogMDsJLyogRlRQIG9yIEtlcm1pdCAqLwotICAgIG5ldCA9IG5ldHdvcmsgfHwgZnRwOwotICAg IHhuZXQgPSBmdHAgPyAxIDogbmV0dHlwZTsJCS8qIE5FVF9UQ1BCID09IDEgKi8KLQotICAgIGlm IChjaW5pdCA9PSAwIHx8IGNlbmR3ID4gMCkgeyAgICAgIC8qIEhhbmRsZSBib3JkZXJsaW5lIGNh c2VzLi4uICovCi0gICAgICAgIGlmIChmID09IFNDUl9DVykgeyAgICAgICAgICAgICAgLyogQ2xv c2Ugd2luZG93LCBidXQgaXQncyBub3Qgb3BlbiAqLwotICAgICAgICAgICAgZnRfd2luID0gMDsK LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBkZWJ1ZyhGMTExLCJzY3Jl ZW5jIEEiLHMsZik7Ci0gICAgICAgIGlmIChmID09IFNDUl9FTSB8fAotICAgICAgICAgICAoZiA9 PSBTQ1JfUFQgJiYgYyA9PSAnRScpKSB7IC8qIEZhdGFsIGVycm9yIGJlZm9yZSB3aW5kb3cgb3Bl biAqLwotICAgICAgICAgICAgY29ub2xsKCIiKTsgY29ub2MoJz8nKTsgY29ub2xsKHMpOyByZXR1 cm47IC8qIFJlZ3VsYXIgZGlzcGxheSAqLwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChjaW5p dCA9PSAwKSB7ICAgICAgICAgICAgICAgICAgIC8qIE9ubHkgY2FsbCBpbml0c2NyKCkgb25jZSAq LwotCWNoYXIgKiBzOwotCS8qIENoZWNrIHRoZXNlIG5vdyAtLSBpZiB0aGV5IGFyZSBkZWZpbmVk IGJ1dCBub3QgbnVtZXJpYyAqLwotCS8qIHRoZXkgY2FuIGNyYXNoIGN1cnNlcyAqLwotCXMgPSBn ZXRlbnYoIkxJTkVTIik7Ci0JaWYgKHMpIGlmICghcmRpZ2l0cyhzKSkgewotCSAgICBwcmludGYo Ij9MSU5FUyB2YXJpYWJsZSBub3QgbnVtZXJpYzogXCIlc1wiLlxuIixzKTsKLQkgICAgcHJpbnRm KCIoRnVsbHNjcmVlbiBkaXNwbGF5IGRpc2FibGVkKVxuIik7Ci0JICAgIGZkaXNwbGEgPSBYWUZE X1M7Ci0JICAgIHJldHVybjsKLQl9Ci0JcyA9IGdldGVudigiQ09MVU1OUyIpOwotCWlmIChzKSBp ZiAoIXJkaWdpdHMocykpIHsKLQkgICAgcHJpbnRmKCI/Q09MVU1OUyB2YXJpYWJsZSBub3QgbnVt ZXJpYzogXCIlc1wiLlxuIixzKTsKLQkgICAgcHJpbnRmKCIoRnVsbHNjcmVlbiBkaXNwbGF5IGRp c2FibGVkKVxuIik7Ci0JICAgIGZkaXNwbGEgPSBYWUZEX1M7Ci0JICAgIHJldHVybjsKLQl9Ci0g ICAgICAgIGNlbmR3ID0gMTsgICAgICAgICAgICAgICAgICAgICAgLyogTmV3IHdpbmRvdyBuZWVk cyByZXBhaW50aW5nICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICBpZiAoIWluaXRzY3IoKSkg eyAgICAgICAgICAgICAgIC8qIE9vcHMsIGNhbid0IGluaXRpYWxpemUgd2luZG93PyAqLwotLyoK LSAgSW4gZmFjdCwgdGhpcyBkb2Vzbid0IGhhcHBlbi4gICJtYW4gY3Vyc2VzIiBzYXlzIGluaXRz Y3IoKSBoYWx0cyB0aGUKLSAgZW50aXJlIHByb2dyYW0gaWYgaXQgZmFpbHMsIHdoaWNoIGlzIHRy dWUgb24gdGhlIHN5c3RlbXMgd2hlcmUgSSd2ZQotICB0ZXN0ZWQgaXQuICBJdCB3aWxsIGZhaWwg aWYgeW91ciB0ZXJtaW5hbCB0eXBlIGlzIG5vdCBrbm93biB0byBpdC4KLSAgVGhhdCdzIHdoeSBT RVQgRklMRSBESVNQTEFZIEZVTExTQ1JFRU4gY2FsbHMgdGdldGVudCgpIHRvIG1ha2Ugc3VyZSB0 aGUKLSAgdGVybWluYWwgdHlwZSBpcyBrbm93biBiZWZvcmUgYWxsb3dpbmcgYSBjdXJzZXMgZGlz cGxheS4KLSovCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwiQ1VSU0VTIElOSVRTQ1IgRVJS T1JcclxuIik7Ci0gICAgICAgICAgICBmZGlzcGxhID0gWFlGRF9TOyAgICAgICAgICAgLyogRmFs bCBiYWNrIHRvIENSVCBkaXNwbGF5ICovCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgICBjaW5pdCsrOyAgICAgICAgICAgICAgICAgICAgLyogV2luZG93 IGluaXRpYWxpemVkIG9rICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJDVVJTRVMgSU5JVFND UiBPSyIsIiIsMCk7Ci0gICAgICAgIH0KLSNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBTYXZlIHNvbWUgbWVtb3J5LiAqLwotI2lmZGVmIENLX05FV1RFUk0KLSAgICAg ICAgLyogKEZyb20gQW5keSBGeWZlIDxhbmR5QHZsc2kuY3MuY2FsdGVjaC5lZHU+KQotICAgICAg ICAgICBTeXN0ZW0gViBjdXJzZXMgc2VlbXMgdG8gcmVzZXJ2ZSB0aGUgcmlnaHQgdG8gYWx0ZXIg dGhlIGJ1ZmZlcmluZwotICAgICAgICAgICBvbiB0aGUgb3V0cHV0IEZJTEUqIHdpdGhvdXQgcmVz dG9yaW5nIGl0LiAgRm9ydHVuYXRlbHkgU3lzdGVtIFYKLSAgICAgICAgICAgY3Vyc2VzIHByb3Zp ZGVzIG5ld3Rlcm0oKSwgYW4gYWx0ZXJuYXRpdmUgdG8gaW5pdHNjcigpLCB0aGF0Ci0gICAgICAg ICAgIGFsbG93cyB1cyB0byBzcGVjaWZ5IGV4cGxpY2l0bHkgdGhlIHRlcm1pbmFsIHR5cGUgYW5k IGlucHV0IGFuZAotICAgICAgICAgICBvdXRwdXQgRklMRSBwb2ludGVycy4gIFRodXMgd2UgZHVw bGljYXRlIHN0ZG91dCwgYW5kIGxldCBjdXJzZXMKLSAgICAgICAgICAgaGF2ZSB0aGUgY29weS4g IFRoZSBvcmlnaW5hbCByZW1haW5zIHVuYWx0ZXJlZC4gIFVuZm9ydHVuYXRlbHksCi0gICAgICAg ICAgIG5ld3Rlcm0oKSBzZWVtcyB0byBiZSBwYXJ0aWN1bGFyIHRvIFN5c3RlbSBWLgotICAgICAg ICAqLwotICAgICAgICBzID0gZ2V0ZW52KCJURVJNIik7Ci0gICAgICAgIGlmIChja19mZCA8IDAp IHsKLSAgICAgICAgICAgIGNrX2ZkID0gZHVwKGZpbGVubyhzdGRvdXQpKTsKLSAgICAgICAgICAg IGNrX3N0ZG91dCA9IChja19mZCA+PSAwKSA/IChGSUxFICopZmRvcGVuKGNrX2ZkLCAidyIpIDog TlVMTDsKLSAgICAgICAgfQotICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5jIG5ld3Rlcm0uLi4i LCIiLDApOwotCi0vKiBOT1RFOiBJdCBtaWdodCBiZSBuZWNlc3NhcnkgdG8gZG8gdGhpcyB3aXRo IHN0ZGluIHRvbyEgKi8KLS8qIFRoaXMgd291bGQgaGF2ZSBiZWVuIHRoZSBjYXNlIGluIEZyZWVC U0QgNC4xIGJ1dCB0aGV5IGZpeGVkIHRoZSAqLwotLyogcHJvYmxlbSBieSByZXN0b3JpbmcgdGhl IGJ1ZmZlcmluZyBvZiBzdGRpbiBiZWZvcmUgdGhlIGZpbmFsIHJlbGVhc2UuICovCi0vKiAoQnV0 IFQuRS4gRGlja2V5IHNheXMgc3RkaW4gaXMgbm90IGJ1ZmZlcmVkPykgKi8KLQotICAgICAgICBp ZiAoY2tfc3Rkb3V0ID09IE5VTEwgfHwgbmV3dGVybShzLCBja19zdGRvdXQsIHN0ZGluKSA9PSAw KSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgIkZ1bGxzY3Jl ZW4gZGlzcGxheSBub3Qgc3VwcG9ydGVkIGZvciB0ZXJtaW5hbCB0eXBlOiAlc1xyXG4iLHMpOwot ICAgICAgICAgICAgZmRpc3BsYSA9IFhZRkRfUzsgICAgICAgICAgIC8qIFVzZSBDUlQgaW5zdGVh ZCAqLwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGRlYnVnKEYxMDAs InNjcmVlbmMgbmV3dGVybSBvayIsIiIsMCk7Ci0jZWxzZQotICAgICAgICBkZWJ1ZyhGMTAwLCJz Y3JlZW4gY2FsbGluZyBpbml0c2NyIiwiIiwwKTsKLSAgICAgICAgaW5pdHNjcigpOyAgICAgICAg ICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIGN1cnNlcy4gKi8KLSAgICAgICAgZGVidWcoRjEw MCwic2NyZWVuIGluaXRzY3Igb2siLCIiLDApOwotI2VuZGlmIC8qIENLX05FV1RFUk0gKi8KLSAg ICAgICAgY2luaXQrKzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciBjdXJzZXMg d2FzIGluaXRpYWxpemVkLiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB9Ci0gICAgZnRf d2luID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2luZG93IGlzIG9wZW4gKi8KLSAg ICBpZiAocmVwYWludCkgewotI2lmZGVmIENLX1dSRUZSRVNICi0vKgotICBUaGlzIHRvdGFsbHkg cmVwYWludHMgdGhlIHNjcmVlbiwganVzdCB3aGF0IHdlIHdhbnQsIGJ1dCB3ZSBjYW4gb25seQot ICBkbyB0aGlzIHdpdGggcmVhbCBjdXJzZXMsIGFuZCB0aGVuIG9ubHkgaWYgY2xlYXJvaygpIGFu ZCB3cmVmcmVzaCgpIGFyZQotICBwcm92aWRlZCBpbiB0aGUgY3Vyc2VzIGxpYnJhcnkuCi0qLwot I2lmZGVmIE9TMgotICAgICAgICBSZXN0b3JlQ21kTW9kZSgpOwotI2Vsc2UKLSNpZmRlZiBRTlgK LSNpZm5kZWYgUU5YMTYKLSAgICAgICAgY2xlYXJvayhzdGRzY3IsIDEpOyAgICAgICAgICAgICAv KiBRTlggZG9lc24ndCBoYXZlIGN1cnNjciAqLwotI2VuZGlmIC8qIFFOWDE2ICovCi0gICAgICAg IHdyZWZyZXNoKHN0ZHNjcik7Ci0jZWxzZQotICAgICAgICB3cmVmcmVzaChjdXJzY3IpOwotI2Vu ZGlmIC8qIFFOWCAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2Vsc2UgIC8qIE5vIENLX1dSRUZSRVNI ICovCi0vKgotICBLZXJtaXQncyBkby1pdC15b3Vyc2VsZiBtZXRob2QsIHdvcmtzIHdpdGggYWxs IHR5cGVzIG9mIGZ1bGxzY3JlZW4KLSAgc3VwcG9ydCwgYnV0IGRvZXMgbm90IHJlcGFpbnQgYWxs IHRoZSBmaWVsZHMuICBGb3IgZXhhbXBsZSwgdGhlIGZpbGVuYW1lCi0gIGlzIGxvc3QsIGJlY2F1 c2UgaXQgYXJyaXZlcyBhdCBhIGNlcnRhaW4gdGltZSBhbmQgbmV2ZXIgY29tZXMgYWdhaW4sIGFu ZAotICBLZXJtaXQgcHJlc2VudGx5IGRvZXMgbm90IHNhdmUgaXQgYW55d2hlcmUuICBNYWtpbmcg dGhpcyBtZXRob2Qgd29yayBmb3IKLSAgYWxsIGZpZWxkcyB3b3VsZCBiZSBhIHJhdGhlciBtYWpv ciByZWNvZGluZyB0YXNrLCBkdXBsaWNhdGluZyB3aGF0IGN1cnNlcwotICBhbHJlYWR5IGRvZXMs IGFuZCB3b3VsZCBhZGQgYSBsb3Qgb2YgY29tcGxleGl0eSBhbmQgc3RvcmFnZSBzcGFjZS4KLSov Ci0gICAgICAgIGNlbmR3ID0gMTsKLSNlbmRpZiAvKiBDS19XUkVGUkVTSCAqLwotICAgICAgICBy ZXBhaW50ID0gMDsKLSAgICB9Ci0gICAgaWYgKGNlbmR3KSB7ICAgICAgICAgICAgICAgICAgICAg ICAgLyogZW5kd2luKCkgd2FzIGNhbGxlZCBwcmV2aW91c2x5ICovCi0jaWZkZWYgVk1TCi0gICAg ICAgIGluaXRzY3IoKTsgICAgICAgICAgICAgICAgICAgICAgLyogKG9yIHNob3VsZCBoYXZlIGJl ZW4hKSAqLwotICAgICAgICBjbGVhcigpOwotICAgICAgICB0b3VjaHdpbihzdGRzY3IpOwotICAg ICAgICByZWZyZXNoKCk7Ci0jZWxzZQotI2lmZGVmIFFOWAotLyoKLSAgSW4gUU5YLCBpZiB3ZSBk b24ndCBjYWxsIGluaXRzY3IoKSBoZXJlIHdlIGNvcmUgZHVtcC4KLSAgSSBkb24ndCBoYXZlIGFu eSBRTlggY3Vyc2VzIGRvY3VtZW50YXRpb24sIGJ1dCBvdGhlciBjdXJzZXMgbWFudWFscwotICBz YXkgdGhhdCBpbml0c2NyKCkgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IG9uY2UgcGVyIGFwcGxpY2F0 aW9uLCBhbmQKLSAgZXhwZXJpZW5jZSBzaG93cyB0aGF0IG9uIG90aGVyIHN5c3RlbXMsIGNhbGxp bmcgaW5pdHNjcigpIGhlcmUgZ2VuZXJhbGx5Ci0gIHJlc3VsdHMgaW4gYSBjb3JlIGR1bXAuCi0q LwotICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5jIHJlLWNhbGxpbmcgaW5pdHNjciBRTlgiLCIi LDApOwotICAgICAgICBpbml0c2NyKCk7Ci0gICAgICAgIGNsZWFyKCk7Ci0gICAgICAgIHJlZnJl c2goKTsKLSNpZmRlZiBDT01NRU5UCi0vKgotICBCdXQgZXZlbiBzbywgc2Vjb25kIGFuZCBzdWJz ZXF1ZW50IGN1cnNlcyBkaXNwbGF5cyBhcmUgbWVzc2VkIHVwLgotICBDYWxsaW5nIHRvdWNod2lu LCByZWZyZXNoLCBldGMsIGRvZXNuJ3QgbWFrZSBhbnkgZGlmZmVyZW5jZS4KLSovCi0gICAgICAg IGRlYnVnKEYxMDAsInNjcmVlbmMgY2FsbGluZyB0b3VjaHdpbiBRTlgiLCIiLDApOwotICAgICAg ICB0b3VjaHdpbihzdGRzY3IpOwotICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5jIGNhbGxpbmcg cmVmcmVzaCBRTlgiLCIiLDApOwotICAgICAgICByZWZyZXNoKCk7Ci0jZW5kaWYgLyogQ09NTUVO VCAqLwotCi0jZWxzZSAvKiBBbGwgb3RoZXJzLi4uICovCi0gICAgICAgIGRlYnVnKEYxMDAsInNj cmVlbmMgY2FsbGluZyBjbGVhciIsIiIsMCk7Ci0gICAgICAgIGNsZWFyKCk7Ci0gICAgICAgIGRl YnVnKEYxMDAsInNjcmVlbmMgY2xlYXIgb2siLCIiLDApOwotI2VuZGlmIC8qIFFOWCAqLwotI2Vu ZGlmIC8qIFZNUyAqLwotICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5jIHNldHVwIG9rIiwiIiww KTsKLSAgICAgICAgZGVidWcoRjEwMCwic2NyZWVuYyBkb2luZyBmaXJzdCBtb3ZlIiwiIiwwKTsK LSAgICAgICAgbW92ZShDV19CQU4sMCk7ICAgICAgICAgICAgICAgICAvKiBEaXNwbGF5IHRoZSBi YW5uZXIgKi8KLSAgICAgICAgZGVidWcoRjExMCwic2NyZWVuYyBteWhvc3QiLG15aG9zdCwwKTsK LSNpZmRlZiBUQ1BTT0NLRVQKLSAgICAgICAgZGVidWcoRjExMCwic2NyZWVuYyBteWlwYWRkciIs bXlpcGFkZHIsMCk7Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0jaWZkZWYgSFBVWDEwMTAKLSAg ICAgICAgZGVidWcoRjEwMCwic2NyZWVuYyBjYWxsaW5nIGZpcnN0IHByaW50dy4uLiIsIiIsMCk7 Ci0vKiBSaWdodCBoZXJlIGlzIHdoZXJlIEhQLVVYIDEwLjEwIGxpYnhjdXJzZS4xIFJldiA3Ni4y MCBoYW5ncy4uLiAqLwotI2VuZGlmIC8qIEhQVVgxMDEwICovCi0gICAgICAgIGlmIChteWhvc3Rb MF0pIHsKLSNpZmRlZiBUQ1BTT0NLRVQKLSAgICAgICAgICAgIGlmICghbXlpcGFkZHJbMF0KLSNp ZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAgLyogV2UgbmVlZCB0byBwZXJmb3JtIHRoaXMgdGVz dCBiZWNhdXNlIG9uIG5vbi1UQ1AvSVAgKi8KLSAgICAgICAgICAgICAgICAgLyogc3lzdGVtcyB0 aGUgY2FsbCB0byBnZXRsb2NhbGlwYWRkcigpIHJlc3VsdHMgaW4gYSAgKi8KLSAgICAgICAgICAg ICAgICAgLyogRE5TIExvb2t1cCB3aGljaCB0YWtlcyBzZXZlcmFsIG1pbnV0ZXMgdG8gdGltZSBv dXQgKi8KLSAgICAgICAgICAgICAgICAgJiYgbmV0ICYmCi0gICAgICAgICAgICAgICAgICh4bmV0 ID09IE5FVF9UQ1BBIHx8IHhuZXQgPT0gTkVUX1RDUEIKLSNpZmRlZiBTU0hCVUlMVElOCi0gICAg ICAgICAgICAgICAgICB8fCB4bmV0ID09IE5FVF9TU0gKLSNlbmRpZiAvKiBTU0hCVUlMVElOICov Ci0gICAgICAgICAgICAgICAgICApCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAg ICkKLSAgICAgICAgICAgICAgZ2V0bG9jYWxpcGFkZHIoKTsKLSAgICAgICAgICAgIGlmIChteWlw YWRkclswXSAmJiBzdHJjbXAoKGNoYXIgKilteWhvc3QsKGNoYXIgKilteWlwYWRkcikpCi0gICAg ICAgICAgICAgIHByaW50dygiJXMsICVzIFslc10iLHZlcnNpbywoY2hhciAqKW15aG9zdCwoY2hh ciAqKW15aXBhZGRyKTsKLSAgICAgICAgICAgIGVsc2UKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8K LSAgICAgICAgICAgICAgcHJpbnR3KCIlcywgJXMiLHZlcnNpbywoY2hhciAqKW15aG9zdCk7Ci0g ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwcmludHcoIiVzIix2ZXJzaW8pOwotICAgICAg ICB9Ci0jaWZkZWYgSFBVWDEwMTAKLSAgICAgICAgZGVidWcoRjEwMCwic2NyZWVuYyBmaXJzdCBw cmludHcgcmV0dXJucyIsIiIsMCk7Ci0jZW5kaWYgLyogSFBVWDEwMTAgKi8KLSAgICAgICAgbW92 ZShDV19ESVIsMyk7Ci0gICAgICAgIHByaW50dygiQ3VycmVudCBEaXJlY3Rvcnk6ICVzIix6Z3Rk aXIoKSk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgS3VpU2V0UHJvcGVydHko IEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRElSLCAobG9uZykgemd0ZGlyKCkgKTsKLSNl bmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgIGlmIChuZXQpIHsKLSAg ICAgICAgICAgIG1vdmUoQ1dfTElOLDgpOwotICAgICAgICAgICAgcHJpbnR3KCJOZXR3b3JrIEhv c3Q6ICVzIiwKLSNpZmRlZiBORVdGVFAKLQkJICAgZnRwID8gKGZ0cF9ob3N0ID8gZnRwX2hvc3Qg OiAiKHVua25vd24pIikgOgotI2VuZGlmIC8qIE5FV0ZUUCAqLwotCQkgICB0dG5hbWUKLQkJICAg KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1vdmUoQ1dfTElOLDApOwotICAgICAg ICAgICAgcHJpbnR3KCJDb21tdW5pY2F0aW9uIERldmljZTogJXMiLHR0bmFtZSk7Ci0gICAgICAg IH0KLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJ X0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19MSU4sIChsb25nKSB0dG5hbWUgKTsKLSNlbmRpZiAv KiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0KLSAgICAgICAgaWYgKG5ldCkgewotICAgICAg ICAgICAgbW92ZShDV19TUEQsOCk7Ci0gICAgICAgICAgICBwcmludHcoIk5ldHdvcmsgVHlwZTog Iik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtb3ZlKENXX1NQRCwxKTsKLSAgICAg ICAgICAgIHByaW50dygiQ29tbXVuaWNhdGlvbiBTcGVlZDogIik7Ci0gICAgICAgIH0KLSAgICAg ICAgbW92ZShDV19TUEQsMjIpOyAgICAgICAgICAgICAgICAvKiBTZXJpYWwgc3BlZWQgb3IgbmV0 d29yayB0eXBlICovCi0gICAgICAgIGlmIChuZXQpIHsKLSNpZmRlZiBORVRDT05OCi0JICAgIGlu dCBzZWN1cmUgPSAwOwotCSAgICBjaGFyICogeG5hbWU7Ci0JICAgIGlmICh4bmV0ID4gbm5ldG5h bWUpCi0JICAgICAgeG5hbWUgPSAiW0VSUk9SXSI7Ci0JICAgIGVsc2UKLQkgICAgICB4bmFtZSA9 IG5ldG5hbWVbeG5ldF07Ci0jaWZkZWYgTkVXRlRQCi0gICAgICAgICAgICBpZiAoZnRwKSB7Ci0J CWlmIChmdHBpc3NlY3VyZSgpKQotCQkgIHNlY3VyZSA9IDE7Ci0JICAgIH0gZWxzZQotI2VuZGlm IC8qIE5FV0ZUUCAqLwotCSAgICAgIGlmICgwCi0jaWZkZWYgU1NIQlVJTFRJTgotICAgICAgICAg ICAgICAgIHx8IElTX1NTSCgpCi0jZW5kaWYgLyogU1NIQlVJTFRJTiAqLwotI2lmZGVmIENLX0VO Q1JZUFRJT04KLSAgICAgICAgICAgICAgICB8fCBja190bl9lbmNyeXB0aW5nKCkgJiYgY2tfdG5f ZGVjcnlwdGluZygpCi0jZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwotI2lmZGVmIENLX1NTTAot ICAgICAgICAgICAgICAgIHx8IHRsc19hY3RpdmVfZmxhZyB8fCBzc2xfYWN0aXZlX2ZsYWcKLSNl bmRpZiAvKiBDS19TU0wgKi8KLSNpZmRlZiBSTE9HQ09ERQotI2lmZGVmIENLX0tFUkJFUk9TCi0j aWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICAgICAgICAgIHx8IHR0bnByb3RvID09IE5QX0VL NExPR0lOIHx8IHR0bnByb3RvID09IE5QX0VLNUxPR0lOCi0jZW5kaWYgLyogQ0tfRU5DUllQVElP TiAqLwotI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCi0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSAg ICAgICAgICAgICAgICAgKSB7Ci0JCXNlY3VyZSA9IDE7Ci0JICAgIH0KLQkgICAgaWYgKHNlY3Vy ZSkgewotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICAgICAgY2hhciBidWZb MzBdOwotICAgICAgICAgICAgICAgIHNwcmludGYoYnVmLCIlcyAoU0VDVVJFKSIseG5hbWUpOwot ICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19TUEQsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGxvbmcpIGJ1ZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgICAg IHByaW50dygiJXMgKFNFQ1VSRSkiLHhuYW1lKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg ICAgICAgICAgICAgcHJpbnR3KCIlcyIseG5hbWUpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVH Ci0gICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1NQRCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAobG9uZykgeG5hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAg IH0KLSNlbHNlCi0gICAgICAgICAgICBwcmludHcoIihuZXR3b3JrKSIpOwotI2lmZGVmIEtVSQot I2lmbmRlZiBLOTVHCi0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZF UiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19TUEQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAobG9uZykgIihuZXR3b3JrKSIKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotI2VuZGlmIC8q IE5FVENPTk4gKi8KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChzcGVlZCA8IDBM KQotICAgICAgICAgICAgICBzcGVlZCA9IHR0Z3NwZCgpOwotICAgICAgICAgICAgaWYgKHNwZWVk ID4gMEwpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3BlZWQgPT0gODg4MCkgewotICAgICAgICAg ICAgICAgICAgICBwcmludHcoIjc1LzEyMDAiKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1Rwot ICAgICAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1NQRCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICI3NS8xMjAwIgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBL VUkgKi8KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjaGFy IHNwZWVkYnVmWzY0XSA7Ci0gICAgICAgICAgICAgICAgICAgIHNwcmludGYoc3BlZWRidWYsICIl bGQiLCBzcGVlZCk7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50dygiJXMiLHNwZWVkYnVmKTsK LSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgICAgICAgICBLdWlTZXRQcm9w ZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGxvbmcpIENXX1NQRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxv bmcpIHNwZWVkYnVmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZW5k aWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJpbnR3KCJ1bmtub3duIik7Ci0jaWZk ZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlf RklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1df U1BELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiKHVua25vd24pIgot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2Vu ZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1vdmUoQ1df UEFSLDE0KTsKLSAgICAgICAgcHJpbnR3KCJQYXJpdHk6ICVzIixmdHAgPyAibm9uZSIgOiBwYXJu YW0oKGNoYXIpcGFyaXR5KSk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgS3Vp U2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgIChs b25nKSBDV19QQVIsCi0gICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBwYXJuYW0oKGNoYXIp cGFyaXR5KQotICAgICAgICAgICAgICAgICAgICAgICApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNl bmRpZiAvKiBLVUkgKi8KLSNpZmRlZiBDS19USU1FUlMKLSAgICAgICAgaWYgKC8qIHJ0dGZsZyAm JiAqLyBwcm90b2NvbCA9PSBQUk9UT19LKSB7Ci0gICAgICAgICAgICBtb3ZlKENXX1RNTywgOSk7 IHByaW50dygiUlRUL1RpbWVvdXQ6Iik7IH0KLSNlbmRpZiAvKiBDS19USU1FUlMgKi8KLSAgICAg ICAgbW92ZShDV19UWVAsMTEpOyBwcmludHcoIkZpbGUgVHlwZToiKTsKLSAgICAgICAgbW92ZShD V19TSVosMTEpOyBwcmludHcoIkZpbGUgU2l6ZToiKTsKLSAgICAgICAgbW92ZShDV19QQ0QsIDgp OwotICAgICAgICBjbHJ0b2VvbCgpOwotICAgICAgICBwY3RsYmwgPSAod2hhdCAmIFdfU0VORCk7 Ci0gICAgICAgIHByaW50dygiJXM6IiwgcGN0bGJsID8gIlBlcmNlbnQgRG9uZSIgOiAiQnl0ZXMg U28gRmFyIik7Ci0KLSNpZmRlZiBYWVpfSU5URVJOQUwKLSAgICAgICAgbW92ZShDV19CQVIsIDEp OwotICAgICAgICBwcmludHcoIiUxMHMgUHJvdG9jb2w6IiwgZnRwID8gIkZUUCIgOiBwdGFiW3By b3RvY29sXS5wX25hbWUpOwotI2VuZGlmIC8qIFhZWl9JTlRFUk5BTCAqLwotI2lmZGVmIENLX1BD VF9CQVIKLSAgICAgICAgaWYgKHRoZXJtb21ldGVyKSB7Ci0gICAgICAgICAgICBvbGRwY3QgPSBw Y3QgPSAwOwotICAgICAgICAgICAgbW92ZShDV19CQVIsMjIpOwotICAgICAgICAgICAgcHJpbnR3 KCIgICAgLi4uMTAuLi4yMC4uLjMwLi4uNDAuLi41MC4uLjYwLi4uNzAuLi44MC4uLjkwLi4xMDAi KTsKLSAgICAgICAgICAgIG1vdmUoQ1dfQkFSLDIyKzU2KTsKLSAgICAgICAgfQotI2VuZGlmIC8q IENLX1BDVF9CQVIgKi8KLSAgICAgICAgbW92ZShDV19UUiwgIDEpOyBwcmludHcoIkVzdGltYXRl ZCBUaW1lIExlZnQ6Iik7Ci0gICAgICAgIG1vdmUoQ1dfQ1AsICAyKTsgcHJpbnR3KCJUcmFuc2Zl ciBSYXRlLCBDUFM6Iik7Ci0gICAgICAgIG1vdmUoQ1dfV1MsICA4KTsgcHJpbnR3KCJXaW5kb3cg U2xvdHM6JXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHByb3RvY29sID09 IFBST1RPX0spICYmICFmdHApID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIg OiAiIE4vQSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgbW92 ZShDV19QVCwgIDkpOyBwcmludHcoIlBhY2tldCBUeXBlOiIpOwotICAgICAgICBpZiAoZnRwIHx8 IHByb3RvY29sICE9IFBST1RPX0spIHsKLQkgICAgbW92ZShDV19QVCwyMik7Ci0gICAgICAgICAg ICBwcmludHcoIiVzIiwgIk4vQSIpOwotICAgICAgICAgICAgbW92ZShDV19QQywgIDExKTsgcHJp bnR3KCJJL08gQ291bnQ6Iik7Ci0gICAgICAgICAgICBtb3ZlKENXX1BMLCAgMTApOyBwcmludHco IkkvTyBMZW5ndGg6Iik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtb3ZlKENXX1BD LCAgOCk7IHByaW50dygiUGFja2V0IENvdW50OiIpOwotICAgICAgICAgICAgbW92ZShDV19QTCwg IDcpOyBwcmludHcoIlBhY2tldCBMZW5ndGg6Iik7Ci0gICAgICAgIH0KLSNpZm5kZWYgQ09NTUVO VAotICAgICAgICBtb3ZlKENXX1BSLCAgOSk7IHByaW50dygiRXJyb3IgQ291bnQ6Iik7Ci0jZWxz ZQotICAgICAgICBtb3ZlKENXX1BSLCAgMik7IHByaW50dygiUGFja2V0IFJldHJ5IENvdW50OiIp OwotI2VuZGlmCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICBtb3ZlKENXX1BCLCAgMik7IHByaW50 dygiUGFja2V0IEJsb2NrIENoZWNrOiIpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAg bW92ZShDV19FUlIsMTApOyBwcmludHcoIkxhc3QgRXJyb3I6Iik7Ci0gICAgICAgIG1vdmUoQ1df TVNHLCA4KTsgcHJpbnR3KCJMYXN0IE1lc3NhZ2U6Iik7Ci0JaWYgKHhmcm1zZykgewotCSAgICBt b3ZlKENXX01TRywgMjIpOyBwcmludHcoIiVzIix4ZnJtc2cpOwotCSAgICBtYWtlc3RyKCZ4ZnJt c2csTlVMTCk7Ci0JfQotICAgICAgICBtb3ZlKENXX0lOVCwgMCk7Ci0gICAgICAgIGlmICgheGZy aW50KSB7Ci0gICAgICAgICAgICBwcmludHcoIihUcmFuc2ZlciBpbnRlcnJ1cHRpb24gaXMgZGlz YWJsZWQpIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0jaWZkZWYgQ0tfTkVFRF9TSUcKLSAgICAgICAg ICAgIHByaW50dygKLSI8JXM+WCB0byBjYW5jZWwgZmlsZSwgPCVzPlogdG8gY2FuY2VsIGdyb3Vw LCA8JXM+PENSPiB0byByZXNlbmQgbGFzdCBwYWNrZXQiLAotICAgICAgICAgICAgICAgICAgIGRi Y2hyKGVzY2FwZSksIGRiY2hyKGVzY2FwZSksIGRiY2hyKGVzY2FwZSkKLSAgICAgICAgICAgICAg ICAgICApOwotICAgICAgICAgICAgbW92ZShDV19JTlQgKyAxLCAwKTsKLSAgICAgICAgICAgIHBy aW50dygKLSI8JXM+RSB0byBzZW5kIEVycm9yIHBhY2tldCwgXkMgdG8gcXVpdCBpbW1lZGlhdGVs eSwgPCVzPkwgdG8gcmVmcmVzaCBzY3JlZW4uIiwKLSAgICAgICAgICAgICAgICAgICBkYmNocihl c2NhcGUpLCBkYmNocihlc2NhcGUpCi0gICAgICAgICAgICAgICAgICAgKTsKLSNlbHNlIC8qICFD S19ORUVEX1NJRyAqLwotICAgICAgICAgICAgbW92ZShDV19JTlQsIDApOwotI2lmZGVmIE9TMgot ICAgICAgICAgICAgaWYgKHByb3RvY29sID09IFBST1RPX0spIHsKLSAgICAgICAgICAgICAgICBw cmludHcoCi0iWCB0byBjYW5jZWwgZmlsZSwgWiB0byBjYW5jZWwgZ3JvdXAsIDxFbnRlcj4gdG8g cmVzZW5kIGxhc3QgcGFja2V0LCIKLSAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAg ICAgIH0KLSNlbHNlIC8qICFPUzIgKi8KLSNpZmRlZiBWTVMgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBJbiBWTVMgYXZvaWQgYm90dG9tIGxpbmUgKi8KLSAgICAgICAgICAgIHByaW50 dygKLSJYOiBDYW5jZWwgdGhpcyBmaWxlOyBFOiBDYW5jZWwgdHJhbnNmZXI7IF5DOiBRdWl0IG5v dzsgXlc6IFJlZnJlc2ggc2NyZWVuLiIKLSAgICAgICAgICAgICAgICAgICApOwotI2Vsc2UKLSAg ICAgICAgICAgIHByaW50dygKLSJYIHRvIGNhbmNlbCBmaWxlLCBaIHRvIGNhbmNlbCBncm91cCwg PENSPiB0byByZXNlbmQgbGFzdCBwYWNrZXQsIgotICAgICAgICAgICAgICAgICAgICk7Ci0jZW5k aWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0KLSNpZm5kZWYgVk1TCi0gICAgICAgICAg ICBtb3ZlKENXX0lOVCArIDEsIDApOwotICAgICAgICAgICAgaWYgKHByb3RvY29sID09IFBST1RP X0spIHsKLSAgICAgICAgICAgICAgICBwcmludHcoCi0iRSB0byBzZW5kIEVycm9yIHBhY2tldCwg XkMgdG8gcXVpdCBpbW1lZGlhdGVseSwgXkwgdG8gcmVmcmVzaCBzY3JlZW4uIgotICAgICAgICAg ICAgICAgICAgICAgICApOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBw cmludHcoIl5DIHRvIGNhbmNlbCBmaWxlIHRyYW5zZmVyLiIpOwotICAgICAgICAgICAgfQotI2Vu ZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIENLX05FRURfU0lHICovCi0gICAgICAgIH0KLSAgICAg ICAgcmVmcmVzaCgpOwotICAgICAgICBjZW5kdyA9IDA7Ci0gICAgfQotICAgIGRlYnVnKEYxMDEs IlNDUkVFTkMgc3dpdGNoIiwiIixmKTsKLSAgICBkZWJ1ZyhGMDAwLCJTQ1JFRU5DIGMiLCIiLGMp OwotICAgIGRlYnVnKEYxMDEsIlNDUkVFTkMgbiIsIiIsbik7Ci0KLSAgICBsZW4gPSBzdHJsZW4o cyk7ICAgICAgICAgICAgICAgICAgICAvKiBMZW5ndGggb2YgYXJndW1lbnQgc3RyaW5nICovCi0g ICAgc3dpdGNoIChmKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogSGFuZGxlIG91ciBmdW5j dGlvbiBjb2RlICovCi0gICAgICBjYXNlIFNDUl9GTjogICAgICAgICAgICAgICAgICAgICAgLyog RmlsZW5hbWUgKi8KLSAgICAgICAgb2xkcGN0ID0gcGN0ID0gMEw7ICAgICAgICAgICAgICAvKiBS ZXNldCBwZXJjZW50cyAqLwotI2lmZGVmIEdGVElNRVIKLSAgICAgICAgZ3R2ID0gKENLRkxPQVQp IC0xLjA7Ci0gICAgICAgIC8qIG9sZGd0diA9IChDS0ZMT0FUKSAtMS4wOyAqLwotI2Vsc2UKLSAg ICAgICAgZ3R2ID0gLTFMOwotICAgICAgICAvKiBvbGRndHYgPSAtMUw7ICovCi0jZW5kaWYgLyog R0ZUSU1FUiAqLwotICAgICAgICBvbGR3aW4gPSAtMTsKLSAgICAgICAgZnNpeiA9IChDS19PRkZf VCktMTsJCS8qIEludmFsaWRhdGUgcHJldmlvdXMgZmlsZSBzaXplICovCi0gICAgICAgIG1vdmUo Q1dfUENELDIyKTsgICAgICAgICAgICAgICAgLyogRXJhc2UgcGVyY2VudCBkb25lIGZyb20gbGFz dCB0aW1lICovCi0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgS3VpU2V0UHJvcGVy dHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfUENELCAobG9uZykgMCApOwotICAgICAg ICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19GRkMsIChsb25n KSAwICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICBjbHJ0 b2VvbCgpOwotICAgICAgICBtb3ZlKENXX1NJWiwyMik7ICAgICAgICAgICAgICAgIC8qIEVyYXNl IGZpbGUgc2l6ZSBmcm9tIGxhc3QgdGltZSAqLwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0g ICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1NJWiwg KGxvbmcpIDAgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAg IGNscnRvZW9sKCk7Ci0gICAgICAgIG1vdmUoQ1dfRVJSLDIyKTsgICAgICAgICAgICAgICAgLyog QW5kIGxhc3QgZXJyb3IgbWVzc2FnZSAqLwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAg ICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0VSUiwgKGxv bmcpICIiICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICBj bHJ0b2VvbCgpOwotI2lmZGVmIENPTU1FTlQKLSNpZmRlZiBTVFJFQU1JTkcKLSAgICAgICAgaWYg KHByb3RvY29sID09IFBST1RPX0sgJiYgc3RyZWFtb2spIHsKLSAgICAgICAgICAgIG1vdmUoQ1df QkFSLCAxKTsKLSNpZmRlZiBYWVpfSU5URVJOQUwKLSAgICAgICAgICAgIHByaW50dygiICAgS2Vy bWl0IFNUUkVBTUlORzoiKTsKLSNlbHNlCi0gICAgICAgICAgICBwcmludHcoIiAgICAgICAgICBT VFJFQU1JTkc6Iik7Ci0jZW5kaWYgLyogWFlaX0lOVEVSTkFMICovCi0gICAgICAgIH0KLSNlbmRp ZiAvKiBTVFJFQU1JTkcgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICAgICAgaWYgKHdo YXQgJiBXX1NFTkQpIHsJCS8qIElmIHdlJ3JlIHNlbmRpbmcuLi4gKi8KLSNpZmRlZiBORVdGVFAK LQkgICAgaWYgKHdoYXQgJiBXX0ZUUCkgewkJLyogRlRQICovCi0gICAgICAgICAgICAgICAgbW92 ZShDV19OQU0sMTApOwotICAgICAgICAgICAgICAgIHByaW50dygiICAgRlRQIFBVVDoiKTsKLQkg ICAgfSBlbHNlCi0jZW5kaWYgLyogTkVXRlRQICovCi0jaWZkZWYgQ0tfUkVTRU5ECi0gICAgICAg ICAgICBzd2l0Y2ggKHNlbmRtb2RlKSB7CQkvKiBLZXJtaXQgKi8KLSAgICAgICAgICAgICAgY2Fz ZSBTTV9SRVNFTkQ6Ci0gICAgICAgICAgICAgICAgbW92ZShDV19OQU0sMTApOwotICAgICAgICAg ICAgICAgIHByaW50dygiIFJFU0VORElORzoiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBtb3ZlKENXX05BTSwxMCk7Ci0g ICAgICAgICAgICAgICAgcHJpbnR3KCIgICBTRU5ESU5HOiIpOwotICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgIG1vdmUoQ1dfTkFNLDEwKTsK LSAgICAgICAgICAgIHByaW50dygiICAgU0VORElORzoiKTsKLSNlbmRpZiAvKiBDS19SRVNFTkQg Ki8KLQotICAgICAgICB9IGVsc2UgaWYgKHdoYXQgJiBXX1JFQ1YpIHsJLyogSWYgd2UncmUgcmVj ZWl2aW5nLi4uICovCi0jaWZkZWYgTkVXRlRQCi0JICAgIGlmICh3aGF0ICYgV19GVFApIHsJCS8q IEZUUCAqLwotICAgICAgICAgICAgICAgIG1vdmUoQ1dfTkFNLDEwKTsKLSAgICAgICAgICAgICAg ICBwcmludHcoIiAgIEZUUCBHRVQ6Iik7Ci0JICAgIH0gZWxzZSB7Ci0jZW5kaWYgLyogTkVXRlRQ ICovCi0JCW1vdmUoQ1dfTkFNLDEwKTsKLQkJcHJpbnR3KCIgUkVDRUlWSU5HOiIpOwotI2lmZGVm IE5FV0ZUUAotCSAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAod2hhdCA9PSAoV19GVFB8V19GVF9E RUxFKSkgewotCQltb3ZlKENXX05BTSwxMCk7Ci0JCXByaW50dygiRlRQIERFTEVURToiKTsKLSNl bmRpZiAvKiBORVdGVFAgKi8KLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAg ICAvKiBJZiB3ZSBkb24ndCBrbm93Li4uICovCi0gICAgICAgICAgICBtb3ZlKENXX05BTSwxMCk7 ICAgICAgICAgICAgLyogKHNob3VsZCBuZXZlciBzZWUgdGhpcykgKi8KLSAgICAgICAgICAgIHBy aW50dygiIEZpbGUgTmFtZToiKTsKLSAgICAgICAgfQotICAgICAgICBtb3ZlKENXX05BTSwyMik7 ICAgICAgICAgICAgICAgIC8qIERpc3BsYXkgdGhlIGZpbGVuYW1lICovCi0gICAgICAgIGlmIChs ZW4gPiA1NykgewotICAgICAgICAgICAgcHJpbnR3KCIlLjU1cy4uIixzKTsKLSAgICAgICAgICAg IGxlbiA9IDU3OwotICAgICAgICB9IGVsc2UgcHJpbnR3KCIlcyIscyk7Ci0jaWZkZWYgS1VJCi0j aWZuZGVmIEs5NUcKLSAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAo bG9uZykgQ1dfTkFNLCAobG9uZykgcyApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBL VUkgKi8KLSAgICAgICAgcSA9IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZW1lbWJl ciBuYW1lIGxlbmd0aCBmb3IgbGF0ZXIgKi8KLSAgICAgICAgY2xydG9lb2woKTsKLSAgICAgICAg c2NyZnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBEaXNwbGF5IGZpbGUgdHlwZSAoY2Fu IGNoYW5nZSkgKi8KLSAgICAgICAgcmVmcmVzaCgpOwotI2lmZGVmIE9TMgotICAgICAgICBTYXZl Q21kTW9kZSgwLCAwKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgcmV0dXJuOwotCi0gICAg ICBjYXNlIFNDUl9BTjogICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBhcy1uYW1lICovCi0g ICAgICAgIGlmIChxICsgbGVuICsgNCA8IDU4KSB7ICAgICAgICAgLyogV2lsbCBmaXQgKi8KLSAg ICAgICAgICAgIG1vdmUoQ1dfTkFNLCAyMiArIHEpOwotICAgICAgICAgICAgcHJpbnR3KCIgPT4g JXMiLHMpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICBLdWlTZXRQcm9w ZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19OQU0sIChsb25nKSBzICk7Ci0jZW5k aWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICB9IGVsc2UgeyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFRvbyBsb25nICovCi0gICAgICAgICAgICBtb3ZlKENXX05BTSwg MjIpOyAgICAgICAgICAgLyogT3ZlcndyaXRlIHByZXZpb3VzIG5hbWUgKi8KLSAgICAgICAgICAg IHEgPSAwOwotICAgICAgICAgICAgaWYgKGxlbiArIDQgPiA1NykgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHdnMTUgKi8KLSAgICAgICAgICAgICAgICBwcmludHcoIiA9PiAl LjUxcy4uIixzKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiB3ZzE1ICovCi0gICAgICAgICAg ICAgICAgbGVuID0gNTM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog d2cxNSAqLwotICAgICAgICAgICAgfSBlbHNlIHByaW50dygiID0+ICVzIixzKTsgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHdnMTUgKi8KLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAg ICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfTkFN LCAobG9uZykgcyAgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAg ICAgIH0KLSAgICAgICAgcSArPSBsZW4gKyA0OyAgICAgICAgICAgICAgICAgICAvKiBSZW1lbWJl ciBob3Jpem9udGFsIHBvc2l0aW9uICovCi0gICAgICAgIGNscnRvZW9sKCk7Ci0gICAgICAgIHJl ZnJlc2goKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgU2F2ZUNtZE1vZGUoMCwgMCk7Ci0jZW5kaWYg LyogT1MyICovCi0gICAgICAgIHJldHVybjsKLQotICAgICAgY2FzZSBTQ1JfRlM6ICAgICAgICAg ICAgICAgICAgICAgIC8qIEZpbGUgc2l6ZSAqLwotICAgICAgICBmc2l6ID0gbjsKLSAgICAgICAg bW92ZShDV19TSVosMjIpOwotICAgICAgICBpZiAoZnNpeiA+IChDS19PRkZfVCktMSkgewotI2lm ZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJ TEVfVFJBTlNGRVIsIChsb25nKSBDV19TSVosIChsb25nKSBuICk7Ci0jZW5kaWYgLyogSzk1RyAq LwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgcHJpbnR3KCIlcyIsY2tmc3RvYShuKSk7 Ci0gICAgICAgIH0KLQlpZiAoZnNpeiA9PSAtMkwpIHsKLQkgICAgcHJpbnR3KCJQT1NTSUJMWSBF WENFRURTIExPQ0FMIEZJTEUgU0laRSBMSU1JVCIpOwotCX0KLSAgICAgICAgY2xydG9lb2woKTsK LSNpZmRlZiBDT01NRU5UCi0gICAgICAgIG1vdmUoQ1dfUENELCA4KTsKLSAgICAgICAgaWYgKGZz aXogPiAoQ0tfT0ZGX1QpLTEpIHsJLyogUHV0IHVwIHBlcmNlbnQgbGFiZWwgKi8KLSAgICAgICAg ICAgIHBjdGxibCA9IDE7Ci0JICAgIGNscnRvZW9sKCk7Ci0gICAgICAgICAgICBwcmludHcoIlBl cmNlbnQgRG9uZToiKTsKLSAgICAgICAgfQotI2Vsc2UKLQltb3ZlKENXX1BDRCwgOCk7Ci0JY2xy dG9lb2woKTsKLSAgICAgICAgaWYgKGZzaXogPiAoQ0tfT0ZGX1QpLTEpIHsJLyogUHV0IHVwIHBl cmNlbnQgbGFiZWwgKi8KLSAgICAgICAgICAgIHBjdGxibCA9IDE7Ci0gICAgICAgICAgICBwcmlu dHcoIlBlcmNlbnQgRG9uZToiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBjdGxi bCA9IDA7Ci0gICAgICAgICAgICBwcmludHcoIkJ5dGVzIFNvIEZhcjoiKTsKLQl9Ci0jZW5kaWYg LyogQ09NTUVOVCAqLwotICAgICAgICBjbHJ0b2VvbCgpOwotICAgICAgICBzY3JmdCgpOyAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgdHlwZSAqLwotICAgICAgICByZWZyZXNoKCk7Ci0j aWZkZWYgT1MyCi0gICAgICAgIFNhdmVDbWRNb2RlKDAsIDApOwotI2VuZGlmIC8qIE9TMiAqLwot ICAgICAgICByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NSX1BUOiAgICAgICAgICAgICAgICAgICAg ICAvKiBQYWNrZXQgdHlwZSBvciBwc2V1ZG90eXBlICovCi0gICAgICAgIGlmIChzcGFja2V0cyA8 IDUpIHsKLSAgICAgICAgICAgIGV4dGVybiBpbnQgc3lzaW5kZXg7Ci0gICAgICAgICAgICBleHRl cm4gc3RydWN0IHN5c2RhdGEgc3lzaWRsaXN0W107Ci0gICAgICAgICAgICAvKiBUaGluZ3MgdGhh dCB3b24ndCBjaGFuZ2UgYWZ0ZXIgdGhlIDR0aCBwYWNrZXQgKi8KLSAgICAgICAgICAgIG1vdmUo Q1dfUEFSLDIyKTsKLSAgICAgICAgICAgIHByaW50dygiJXMiLHBhcm5hbSgoY2hhcilwYXJpdHkp KTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHko IEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENX X1BBUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBwYXJuYW0oKGNoYXIpcGFy aXR5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0j ZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICBjbHJ0b2VvbCgpOwotI2lmZGVmIENPTU1FTlQK LSAgICAgICAgICAgIG1vdmUoQ1dfUEIsIDIyKTsgICAgICAgICAgICAvKiBCbG9jayBjaGVjayBv biB0aGlzIHBhY2tldCAqLwotICAgICAgICAgICAgaWYgKGJjdHUgPT0gNCkKLSAgICAgICAgICAg ICAgcHJpbnR3KCJCIik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHByaW50dygi JWQiLGJjdHUpOwotICAgICAgICAgICAgY2xydG9lb2woKTsKLSNlbmRpZiAvKiBDT01NRU5UICov Ci0gICAgICAgICAgICBpZiAoCi0jaWZkZWYgTkVXRlRQCi0JCShmdHAgJiYgKHNwYWNrZXRzID09 IDEgfHwgcnBhY2tldHMgPT0gMSkpIHx8Ci0jZW5kaWYgLyogTkVXRlRQICovCi0JCXNwYWNrZXRz ID09IDQKLQkJKSB7Ci0gICAgICAgICAgICAgICAgbW92ZShDV19MSU4sOCk7Ci0gICAgICAgICAg ICAgICAgaWYgKAotI2lmZGVmIE5FV0ZUUAotCQkgICAgZnRwIHx8Ci0jZW5kaWYgLyogTkVXRlRQ ICovCi0JCSAgICAoKHByb3RvY29sID09IFBST1RPX0spICYmIChzeXNpbmRleCA+IC0xKSkKLQkJ ICAgICkgewotICAgICAgICAgICAgICAgICAgICBpZiAobmV0KSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICBtb3ZlKENXX0xJTiw4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50dygi TmV0d29yayBIb3N0OiAlcyAoJXMpIiwKLSNpZmRlZiBORVdGVFAKLQkJCSAgICAgICBmdHAgPyAo ZnRwX2hvc3QgPyBmdHBfaG9zdCA6ICIiKSA6Ci0jZW5kaWYgLyogTkVXRlRQICovCi0JCQkgICAg ICAgdHRuYW1lLAotI2lmZGVmIE5FV0ZUUAotCQkJICAgICAgIGZ0cCA/IGZ0cF9zcnZ0eXAgOgot I2VuZGlmIC8qIE5FV0ZUUCAqLwotCQkJICAgICAgIHN5c2lkbGlzdFtzeXNpbmRleF0uc2lkX25h bWUKLQkJCSAgICAgICApOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg ICAgICAgICAgICAgICAgbW92ZShDV19MSU4sMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBw cmludHcoIkNvbW11bmljYXRpb24gRGV2aWNlOiAlcyAocmVtb3RlIGhvc3QgaXMgJXMpIiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRuYW1lLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzeXNpZGxpc3Rbc3lzaW5kZXhdLnNpZF9uYW1lCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg Y2xydG9lb2woKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K LSNpZmRlZiBDS19USU1FUlMKLSAgICAgICAgaWYgKC8qIHJ0dGZsZyAmJiAqLyBwcm90b2NvbCA9 PSBQUk9UT19LKSB7Ci0gICAgICAgICAgICBsb25nIHh4OwotICAgICAgICAgICAgaWYgKAotI2lm ZGVmIFNUUkVBTUlORwotICAgICAgICAgICAgICAgIHN0cmVhbWluZyAmJiBvbGR3aW4gIT0gLTIK LSNlbHNlCi0gICAgICAgICAgICAgICAgMAotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotICAgICAg ICAgICAgICAgICkgewotICAgICAgICAgICAgICAgIG1vdmUoQ1dfVE1PLCAyMik7Ci0gICAgICAg ICAgICAgICAgcHJpbnR3KCIwMCAvIDAwIik7Ci0gICAgICAgICAgICAgICAgY2xydG9lb2woKTsK LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgeHggPSAocnR0ZGVsYXkgKyA1 MDApIC8gMTAwMDsKLSAgICAgICAgICAgICAgICBpZiAoeHggIT0gb2xkcnR0IHx8IHJjdnRpbW8g IT0gb2xkdGltKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1vdmUoQ1dfVE1PLCAyMik7Ci0gICAg ICAgICAgICAgICAgICAgIHByaW50dygiJTAybGQgLyAlMDJkIiwgeHgsIHJjdnRpbW8pOwotICAg ICAgICAgICAgICAgICAgICBvbGRydHQgPSB4eDsKLSAgICAgICAgICAgICAgICAgICAgb2xkdGlt ID0gcmN2dGltbzsKLSAgICAgICAgICAgICAgICAgICAgY2xydG9lb2woKTsKLSAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS19USU1FUlMgKi8K LQotICAgICAgICB4ID0gKHdoYXQgJiBXX1JFQ1YpID8gICAgICAgICAgLyogUGFja2V0IGxlbmd0 aCAqLwotICAgICAgICAgIHJwa3RsKyhwcm90b2NvbD09UFJPVE9fSz8xOjApIDoKLSAgICAgICAg ICAgIHNwa3RsOwotICAgICAgICBpZiAoeCAhPSBvbGRsZW4pIHsgICAgICAgICAgICAgIC8qIEJ1 dCBvbmx5IGlmIGl0IGNoYW5nZWQuICovCi0gICAgICAgICAgICBtb3ZlKENXX1BMLCAyMik7Ci0g ICAgICAgICAgICBwcmludHcoIiVkIix4KTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAg ICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfUEws IChsb25nKSB4ICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAg ICAgICAgY2xydG9lb2woKTsKLSAgICAgICAgICAgIG9sZGxlbiA9IHg7Ci0gICAgICAgIH0KLSAg ICAgICAgbW92ZShDV19QQywgMjIpOyAgICAgICAgICAgICAgICAvKiBQYWNrZXQgY291bnQgKGFs d2F5cykuICovCi0KLSAgICAgICAgcHJpbnR3KCIlZCIsICh3aGF0ICYgV19SRUNWKSA/IHJwYWNr ZXRzIDogc3BhY2tldHMpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgIEt1aVNl dFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BDLCAobG9uZykgc3BhY2tl dHMgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgIGNscnRv ZW9sKCk7Ci0KLSAgICAgICAgaWYgKHByb3RvY29sID09IFBST1RPX0sgJiYgIWZ0cCkgeyAvKiBX aW5kb3cgc2xvdHMgKi8KLSAgICAgICAgICAgIGNoYXIgd3NbMTZdOwotICAgICAgICAgICAgaW50 IGZsYWc7Ci0gICAgICAgICAgICBmbGFnID0gMDsKLSNpZmRlZiBTVFJFQU1JTkcKLSAgICAgICAg ICAgIGlmIChzdHJlYW1pbmcpIHsKLSAgICAgICAgICAgICAgICBpZiAob2xkd2luICE9IC0yKSB7 Ci0gICAgICAgICAgICAgICAgICAgIHNwcmludGYod3MsIlNUUkVBTUlORyIpOwotICAgICAgICAg ICAgICAgICAgICBmbGFnID0gMTsKLSAgICAgICAgICAgICAgICAgICAgb2xkd2luID0gLTI7Ci0g ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyogU1RSRUFNSU5H ICovCi0gICAgICAgICAgICAgIGlmICh3Y3VyICE9IG9sZHdpbikgewotICAgICAgICAgICAgICAg ICAgc3ByaW50Zih3cywgIiVkIG9mICVkIiwgd2N1ciA8IDEgPyAxIDogd2N1ciwgd3Nsb3RuKTsK LSAgICAgICAgICAgICAgICAgIGZsYWcgPSAxOwotICAgICAgICAgICAgICAgICAgb2xkd2luID0g d2N1cjsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZsYWcpIHsKLSAgICAgICAg ICAgICAgICBtb3ZlKENXX1dTLCAyMik7Ci0gICAgICAgICAgICAgICAgcHJpbnR3KCIlcyIsIHdz KTsKLSAgICAgICAgICAgICAgICBjbHJ0b2VvbCgpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVH Ci0gICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9u ZykgQ1dfV1MsIChsb25nKSB3cyApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkg Ki8KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlcnJvcnMgPSByZXRyYW5zICsg Y3J1bmNoZWQgKyB0aW1lb3V0czsKLSAgICAgICAgaWYgKGVycm9ycyAhPSBvbGR0cnkpIHsgICAg ICAgICAvKiBSZXRyeSBjb3VudCwgaWYgY2hhbmdlZCAqLwotICAgICAgICAgICAgbW92ZShDV19Q UiwgMjIpOwotICAgICAgICAgICAgcHJpbnR3KCIlZCIsZXJyb3JzKTsKLSNpZmRlZiBLVUkKLSNp Zm5kZWYgSzk1RwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVS LCAobG9uZykgQ1dfUFIsIChsb25nKSBlcnJvcnMgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5k aWYgLyogS1VJICovCi0gICAgICAgICAgICBjbHJ0b2VvbCgpOwotICAgICAgICAgICAgb2xkdHJ5 ID0gZXJyb3JzOwotICAgICAgICB9Ci0JLyogU2VuZGVyJ3MgcGFja2V0IHR5cGUgKi8KLSAgICAg ICAgaWYgKCFmdHAgJiYgKGMgIT0gb2xkdHlwICYmIGMgIT0gJ1knICYmIGMgIT0gJ04nKSkgewot ICAgICAgICAgICAgY2hhciB0eXBlWzJdOwotICAgICAgICAgICAgc3ByaW50Zih0eXBlLCAiJWMi LGMpOwotICAgICAgICAgICAgbW92ZShDV19QVCwyMik7Ci0gICAgICAgICAgICBwcmludHcoIiVz IiwgdHlwZSk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgIEt1aVNldFBy b3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BULCAobG9uZykgdHlwZSApOwot I2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgIGNscnRvZW9s KCk7Ci0gICAgICAgICAgICBvbGR0eXAgPSBjOwotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAo YykgeyAgICAgICAgICAgICAgICAgICAgLyogTm93IGhhbmRsZSBzcGVjaWZpYyBwYWNrZXQgdHlw ZXMgKi8KLSAgICAgICAgICBjYXNlICdTJzogICAgICAgICAgICAgICAgICAgICAvKiBCZWdpbm5p bmcgb2YgdHJhbnNmZXIgKi8KLSAgICAgICAgICAgIGZjbnQgPSBmYnl0ID0gMEw7ICAgICAgICAg ICAvKiBDbGVhciBjb3VudGVycyAqLwotI2lmZGVmIEdGVElNRVIKLSAgICAgICAgICAgIGd0diA9 IC0xLjA7Ci0jZWxzZSAvKiBHRlRJTUVSICovCi0gICAgICAgICAgICBndHYgPSAtMUw7ICAgICAg ICAgICAgICAgICAgLyogQW5kIG9sZC9uZXcgdGhpbmdzLi4uICovCi0jZW5kaWYgLyogR0ZUSU1F UiAqLwotICAgICAgICAgICAgb2xkcGN0ID0gcGN0ID0gMEw7Ci0gICAgICAgICAgICBicmVhazsK LQotICAgICAgICAgIGNhc2UgJ1onOiAgICAgICAgICAgICAgICAgICAgIC8qIG9yIEVPRiAqLwot ICAgICAgICAgICAgZGVidWcoRjEwMSwic2NyZWVuYyBTQ1JfUFQgWiBwa3RudW0iLCIiLG4pOwot ICAgICAgICAgICAgZGVidWcoRjEwMSwic2NyZWVuYyBTQ1JfUFQgWiBvbGRwY3QiLCIiLG9sZHBj dCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5jIFNDUl9QVCBaIHBjdCIsIiIscGN0 KTsKLSAgICAgICAgICBjYXNlICdEJzogICAgICAgICAgICAgICAgICAgICAvKiBEYXRhIHBhY2tl dCAqLwotICAgICAgICAgICAgaWYgKGZzaXogPiAwTCkgeyAgICAgICAgICAgIC8qIFNob3cgcGVy Y2VudCBkb25lIGlmIGtub3duICovCi0gICAgICAgICAgICAgICAgb2xkcGN0ID0gcGN0OyAgICAg ICAgICAgLyogUmVtZW1iZXIgcHJldmlvdXMgcGVyY2VudCAqLwotICAgICAgICAgICAgICAgIGhv d2ZhciA9IGZmYzsKLSNpZmRlZiBDS19SRVNFTkQKLSAgICAgICAgICAgICAgICBpZiAod2hhdCAm IFdfU0VORCkJLyogQWNjb3VudCBmb3IgUFNFTkQgb3IgUkVTRU5EICovCi0gICAgICAgICAgICAg ICAgICBob3dmYXIgKz0gc2VuZHN0YXJ0OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdoYXQg JiBXX1JFQ1YpCi0gICAgICAgICAgICAgICAgICBob3dmYXIgKz0gcnNfbGVuOwotI2VuZGlmIC8q IENLX1JFU0VORCAqLwotICAgICAgICAgICAgICAgIC8qIFBlcmNlbnQgZG9uZSwgdG8gYmUgZGlz cGxheWVkLi4uICovCi0gICAgICAgICAgICAgICAgaWYgKGMgPT0gJ1onKSB7Ci0gICAgICAgICAg ICAgICAgICAgIGlmICghZGlzY2FyZCAmJiAhY3hzZWVuICYmICFjenNlZW4pIHBjdCA9IDEwMEw7 Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICBwY3QgPSAoZnNpeiA+ IDk5TCkgPyAoaG93ZmFyIC8gKGZzaXogLyAxMDBMKSkgOiAwTDsKLSAgICAgICAgICAgICAgICBp ZiAocGN0ID4gMTAwTCB8fCAgICAgICAvKiBBbGxvdyBmb3IgZXhwYW5zaW9uIGFuZCAqLwotICAg ICAgICAgICAgICAgICAgIChvbGRwY3QgPT0gOTlMICYmIHBjdCA8IDBMKSkgLyogb3RoZXIgYm91 bmRhcnkgY29uZGl0aW9ucyAqLwotICAgICAgICAgICAgICAgICAgcGN0ID0gMTAwTDsKLSAgICAg ICAgICAgICAgICBpZiAocGN0ICE9IG9sZHBjdCkgICAgICAvKiBPbmx5IGRvIHRoaXMgMTAwIHRp bWVzIHBlciBmaWxlICovCi0gICAgICAgICAgICAgICAgICB1cGRwY3Qob2xkcGN0LCBwY3QpOwot ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtb3ZlKENXX1BDRCwyMik7Ci0g ICAgICAgICAgICAgICAgcHJpbnR3KCIlcyIsIGNrZnN0b2EoZmZjKSk7Ci0gICAgICAgICAgICB9 Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtV SV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRkZDLCAobG9uZykgaG93ZmFyKTsKLSNlbmRpZiAv KiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICBjcHMgPSBzaG9jcHMoKGlu dCkgcGN0LCBmc2l6LCBob3dmYXIpOwotICAgICAgICAgICAgLyogb2xkX3RyID0gc2hvZXRsKG9s ZF90ciwgY3BzLCBmc2l6LCBob3dmYXIpOyAqLwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg ICAgICBjYXNlICclJzogICAgICAgICAgICAgICAgICAgICAvKiBUaW1lb3V0cywgcmV0cmFuc21p c3Npb25zICovCi0gICAgICAgICAgICBjcHMgPSBzaG9jcHMoKGludCkgcGN0LCBmc2l6LCBob3dm YXIpOwotICAgICAgICAgICAgLyogb2xkX3RyID0gc2hvZXRsKG9sZF90ciwgY3BzLCBmc2l6LCBo b3dmYXIpOyAqLwotCi0gICAgICAgICAgICBlcnJvcnMgPSByZXRyYW5zICsgY3J1bmNoZWQgKyB0 aW1lb3V0czsKLSAgICAgICAgICAgIGlmIChlcnJvcnMgIT0gb2xkdHJ5KSB7ICAgICAvKiBFcnJv ciBjb3VudCwgaWYgY2hhbmdlZCAqLwotICAgICAgICAgICAgICAgIG1vdmUoQ1dfUFIsIDIyKTsK LSAgICAgICAgICAgICAgICBwcmludHcoIiVkIixlcnJvcnMpOwotICAgICAgICAgICAgICAgIGNs cnRvZW9sKCk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgICAgICBLdWlT ZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAobG9uZykgQ1dfUFIsIChsb25nKSBlcnJvcnMKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb2xkdHJ5ID0gZXJyb3JzOwotICAgICAgICAgICAg ICAgIGlmIChzKSBpZiAoKnMpIHsKLSAgICAgICAgICAgICAgICAgICAgbW92ZShDV19FUlIsMjIp OwotICAgICAgICAgICAgICAgICAgICBwcmludHcoIiVzIixzKTsKLSAgICAgICAgICAgICAgICAg ICAgY2xydG9lb2woKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgICAg ICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0VSUiwgKGxv bmcpIHMpOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSAnRSc6ICAgICAgICAgICAg ICAgICAgICAgLyogRXJyb3IgcGFja2V0ICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAg bW92ZShDV19FUlIsMjIpOyAgICAgICAgICAgIC8qIFByaW50IGl0cyBkYXRhIGZpZWxkICovCi0g ICAgICAgICAgICBpZiAoKnMpIHsKLSAgICAgICAgICAgICAgICBwcmludHcoIiVzIixzKTsKLSNp ZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBL VUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0VSUiwgKGxvbmcpIHMgKTsKLSNlbmRpZiAvKiBL OTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjbHJ0 b2VvbCgpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgIGZjbnQgPSBmYnl0ID0g MEw7ICAgICAgICAgICAvKiBTbyBubyBieXRlcyBmb3IgdGhpcyBmaWxlICovCi0gICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICBjYXNlICdRJzogICAgICAgICAgICAgICAgICAgICAvKiBDcnVu Y2hlZCBwYWNrZXQgKi8KLSAgICAgICAgICAgIGNwcyA9IHNob2NwcygoaW50KSBwY3QsIGZzaXos IGhvd2Zhcik7Ci0gICAgICAgICAgICAvKiBvbGRfdHIgPSBzaG9ldGwob2xkX3RyLCBjcHMsIGZz aXosIGhvd2Zhcik7ICovCi0gICAgICAgICAgICBtb3ZlKENXX0VSUiwyMik7Ci0gICAgICAgICAg ICBwcmludHcoIkRhbWFnZWQgUGFja2V0Iik7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAg ICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGxvbmcpIENXX0VSUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg IChsb25nKSAiRGFtYWdlZCBQYWNrZXQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICApOwot I2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgIGNscnRvZW9s KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICdxJzogICAgICAgICAgICAg ICAgICAgICAvKiBDdHJsLUMgb3IgY29ubmVjdGlvbiBsb3N0ICovCi0gICAgICAgICAgICBtb3Zl KENXX01TRywyMik7Ci0JICAgIGNscnRvZW9sKCk7Ci0gICAgICAgICAgICBpZiAoIXMpIHMgPSAi IjsKLSAgICAgICAgICAgIHByaW50dygiJXMiLCAqcyA/IHMgOiAiVXNlciBpbnRlcnJ1cHRpb24g b3IgY29ubmVjdGlvbiBsb3N0Iik7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAg ICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGxvbmcpIENXX01TRywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25n KSBzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNl bmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgJ1QnOiAg ICAgICAgICAgICAgICAgICAgIC8qIFRpbWVvdXQgKi8KLSAgICAgICAgICAgIGNwcyA9IHNob2Nw cygoaW50KSBwY3QsIGZzaXosIGhvd2Zhcik7Ci0gICAgICAgICAgICAvKiBvbGRfdHIgPSBzaG9l dGwob2xkX3RyLCBjcHMsIGZzaXosIGhvd2Zhcik7ICovCi0gICAgICAgICAgICBtb3ZlKENXX0VS UiwyMik7Ci0gICAgICAgICAgICBwcmludHcoIlRpbWVvdXQgJWQgc2VjIixyY3Z0aW1vKTsKLSNp ZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJ TEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfRVJSLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICJUaW1lb3V0IgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0g ICAgICAgICAgICBjbHJ0b2VvbCgpOwotICAgICAgICAgICAgZXJyb3JzID0gcmV0cmFucyArIGNy dW5jaGVkICsgdGltZW91dHM7Ci0gICAgICAgICAgICBpZiAoZXJyb3JzICE9IG9sZHRyeSkgeyAg ICAgLyogRXJyb3IgY291bnQsIGlmIGNoYW5nZWQgKi8KLSAgICAgICAgICAgICAgICBtb3ZlKENX X1BSLCAyMik7Ci0gICAgICAgICAgICAgICAgcHJpbnR3KCIlZCIsZXJyb3JzKTsKLSNpZmRlZiBL VUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxF X1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19QUiwg KGxvbmcpIGVycm9ycwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYg LyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgICAgIGNscnRvZW9sKCk7 Ci0gICAgICAgICAgICAgICAgb2xkdHJ5ID0gZXJyb3JzOwotICAgICAgICAgICAgfQotICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgLyog T3RoZXJzLCBkbyBub3RoaW5nICovCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg ICAgICByZWZyZXNoKCk7Ci0jaWZkZWYgT1MyCi0gICAgICAgIFNhdmVDbWRNb2RlKDAsIDApOwot I2VuZGlmIC8qIE9TMiAqLwotICAgICAgICByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NSX1NUOiAg ICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIHRyYW5zZmVyIHN0YXR1cyAqLwotICAgICAgICBk ZWJ1ZyhGMTAxLCJzY3JlZW5jIFNDUl9TVCBjIiwiIixjKTsKLSAgICAgICAgZGVidWcoRjEwMSwi c2NyZWVuYyBTQ1JfU1Qgc3VjY2VzcyIsIiIsc3VjY2Vzcyk7Ci0gICAgICAgIGRlYnVnKEYxMDEs InNjcmVlbmMgU0NSX1NUIGN4c2VlbiIsIiIsY3hzZWVuKTsKLSNpZmRlZiBDT01NRU5UCi0gICAg ICAgIG1vdmUoQ1dfUENELDIyKTsgICAgICAgICAgICAgICAgLyogVXBkYXRlIHBlcmNlbnQgZG9u ZSAqLwotICAgICAgICBpZiAoYyA9PSBTVF9PSykgeyAgICAgICAgICAgICAgIC8qIE9LLCBwcmlu dCAxMDAgJSAqLwotICAgICAgICAgICAgaWYgKHBjdGxibCkKLSAgICAgICAgICAgICAgdXBkcGN0 KG9sZHBjdCwxMDApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBwcmludHcoIiVz IiwgY2tmc3RvYShmZmMpKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAg S3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19GRkMsIChsb25nKSBm ZmMpOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgIHBj dCA9IDEwMDsKLSAgICAgICAgICAgIG9sZHBjdCA9IDA7Ci0gICAgICAgIH0gZWxzZSBpZiAoZnNp eiA+IDBMKSAgICAgICAgICAgLyogTm90IE9LLCB1cGRhdGUgZmluYWwgcGVyY2VudCAqLwotLyoK LSAgVGhlIGVsc2UgcGFydCB3cml0ZXMgYWxsIG92ZXIgdGhlIHNjcmVlbiAtLSBob3dmYXIgYW5k L29yIGZzaXogaGF2ZQotICBiZWVuIHJlc2V0IGFzIGEgY29uc2VxdWVuY2Ugb2YgdGhlIG5vdC1P S25lc3Mgb2YgdGhlIHRyYW5zZmVyLgotKi8KLSAgICAgICAgICBpZiAocGN0bGJsKQotICAgICAg ICAgICAgdXBkcGN0KG9sZHBjdCwgKGhvd2ZhciAqIDEwMEwpIC8gZnNpeik7Ci0gICAgICAgIGNs cnRvZW9sKCk7Ci0jZWxzZQotICAgICAgICBpZiAoYyA9PSBTVF9PSykgeyAgICAgICAgICAgICAg IC8qIE9LLCBwcmludCAxMDAgJSAqLwotICAgICAgICAgICAgbW92ZShDV19QQ0QsMjIpOyAgICAg ICAgICAgIC8qIFVwZGF0ZSBwZXJjZW50IGRvbmUgKi8KLSAgICAgICAgICAgIGlmIChwY3RsYmwp IHsKLQkJaWYgKG9sZHBjdCA9PSAwKQkvKiBTd2l0Y2hpbmcgZnJvbSAiYnl0ZXMgc28gZmFyIiAq LwotCQkgIGNscnRvZW9sKCk7CQkvKiB0byAicGVyY2VudCBkb25lIi4uLiAqLwotCQl1cGRwY3Qo b2xkcGN0LDEwMCk7Ci0JICAgIH0gZWxzZQotICAgICAgICAgICAgICBwcmludHcoIiVzIiwgY2tm c3RvYShmZmMpKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgS3VpU2V0 UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19GRkMsIChsb25nKSBmZmMpOwot I2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAg ICAgICAgICBwY3QgPSAxMDA7Ci0gICAgICAgICAgICBvbGRwY3QgPSAwOwotI2VuZGlmIC8qIENP TU1FTlQgKi8KLSAgICAgICAgICAgIGNscnRvZW9sKCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBD T01NRU5UICovCi0KLSNpZmRlZiBDT01NRU5UCi0vKiBObywgbGVhdmUgaXQgdGhlcmUgc28gdGhl eSBjYW4gcmVhZCBpdCAqLwotICAgICAgICBtb3ZlKENXX01TRywyMik7ICAgICAgICAgICAgICAg IC8qIFJlbW92ZSBhbnkgcHJldmlvdXMgbWVzc2FnZSAqLwotI2lmZGVmIEtVSQotI2lmbmRlZiBL OTVHCi0gICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENX X01TRywgKGxvbmcpICIiICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwot ICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0g ICAgICAgIG1vdmUoQ1dfVFIsIDIyKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAg ICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19UUiwgKGxvbmcp ICIiICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICBjbHJ0 b2VvbCgpOyByZWZyZXNoKCk7Ci0KLSAgICAgICAgc3dpdGNoIChjKSB7ICAgICAgICAgICAgICAg ICAgICAvKiBQcmludCBuZXcgc3RhdHVzIG1lc3NhZ2UgKi8KLSAgICAgICAgICBjYXNlIFNUX09L OiAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2ZlciBPSyAqLwotICAgICAgICAgICAgZmNudCsr OyAgICAgICAgICAgICAgICAgICAgIC8qIENvdW50IHRoaXMgZmlsZSAqLwotCSAgICBpZiAod2hh dCA9PSAoV19GVFB8V19GVF9ERUxFKSkgewotCQltb3ZlKENXX01TRywyMik7Ci0JCWNscnRvZW9s KCk7Ci0JCXByaW50dygiRGVsZXRlIE9LIik7Ci0JICAgIH0gZWxzZSB7Ci0JCWZieXQgKz0gZmZj OwotCQltb3ZlKENXX01TRywyMik7Ci0JCWNscnRvZW9sKCk7Ci0JCXByaW50dygiVHJhbnNmZXIg T0siKTsKLQkgICAgfQotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICBLdWlT ZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg IChsb25nKSBDV19NU0csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIlRyYW5z ZmVyIE9LIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbmRpZiAvKiBLOTVHICov Ci0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7Ci0g ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICBjYXNlIFNUX0RJU0M6ICAgICAgICAgICAg ICAgICAvKiBEaXNjYXJkZWQgKi8KLSAgICAgICAgICAgIG1vdmUoQ1dfRVJSLDIyKTsKLSAgICAg ICAgICAgIHByaW50dygiRmlsZSBkaXNjYXJkZWQiKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1 RwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfRVJSLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGxvbmcpICJGaWxlIGRpc2NhcmRlZCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotI2lmZGVmIENPTU1FTlQK LSAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAg ICAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOwotICAgICAgICAgICAgcmV0dXJuOwotCi0g ICAgICAgICAgY2FzZSBTVF9JTlQ6ICAgICAgICAgICAgICAgICAgLyogSW50ZXJydXB0ZWQgKi8K LSAgICAgICAgICAgIG1vdmUoQ1dfRVJSLDIyKTsKLSAgICAgICAgICAgIHByaW50dygiVHJhbnNm ZXIgaW50ZXJydXB0ZWQiKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAg S3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAobG9uZykgQ1dfRVJSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICJU cmFuc2ZlciBpbnRlcnJ1cHRlZCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZW5k aWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAg ICAgIHBjdCA9IG9sZHBjdCA9IDA7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAg Y2xydG9lb2woKTsgcmVmcmVzaCgpOwotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAg Y2FzZSBTVF9TS0lQOiAgICAgICAgICAgICAgICAgLyogU2tpcHBlZCAqLwotICAgICAgICAgICAg bW92ZShDV19FUlIsMjIpOwotCSAgICBpZiAobiA+IDAgJiYgbiA8IG5za3JlYXNvbikKLQkgICAg ICBwcmludHcoIkZpbGUgc2tpcHBlZCAoJXMpIixza3JlYXNvbltuXSk7Ci0JICAgIGVsc2UKLQkg ICAgICBwcmludHcoIkZpbGUgc2tpcHBlZCIpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0g ICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgIChsb25nKSBDV19FUlIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAobG9uZykgIkZpbGUgc2tpcHBlZCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0j ZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAg ICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAg ICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOwotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg ICAgY2FzZSBTVF9FUlI6ICAgICAgICAgICAgICAgICAgLyogRXJyb3IgbWVzc2FnZSAqLwotICAg ICAgICAgICAgbW92ZShDV19FUlIsMjIpOwotICAgICAgICAgICAgaWYgKCFzKSBzID0gKGNoYXIg KillcGt0bXNnOwotICAgICAgICAgICAgcHJpbnR3KCIlcyIscyk7Ci0jaWZkZWYgS1VJCi0jaWZu ZGVmIEs5NUcKLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwg KGxvbmcpIENXX0VSUiwgKGxvbmcpIHMgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyog S1VJICovCi0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKLSNl bmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7Ci0g ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICBjYXNlIFNUX1JFRlU6ICAgICAgICAgICAg ICAgICAvKiBSZWZ1c2VkICovCi0gICAgICAgICAgICBtb3ZlKENXX0VSUiwyMik7Ci0gICAgICAg ICAgICBpZiAoKnMpIHsKLSAgICAgICAgICAgICAgICBjaGFyIGVycmJ1Zls2NF0gOwotICAgICAg ICAgICAgICAgIHNwcmludGYoIGVycmJ1ZiwgIlJlZnVzZWQsICVzIiwgcyApIDsKLSAgICAgICAg ICAgICAgICBwcmludHcoIiVzIiwgZXJyYnVmKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1Rwot ICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLChsb25nKSBD V19FUlIsKGxvbmcpIGVycmJ1Zik7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAq LwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcmludHcoIlJlZnVzZWQi KTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgICAgIEt1aVNldFByb3Bl cnR5KEtVSV9GSUxFX1RSQU5TRkVSLChsb25nKUNXX0VSUiwobG9uZykiUmVmdXNlZCIpOwotI2Vu ZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgIH0KLSNpZmRlZiBD T01NRU5UCi0gICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOwotI2VuZGlmIC8qIENPTU1FTlQg Ki8KLSAgICAgICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsKLSAgICAgICAgICAgIHJldHVy bjsKLQotICAgICAgICAgIGNhc2UgU1RfSU5DOgotICAgICAgICAgICAgbW92ZShDV19FUlIsMjIp OwotICAgICAgICAgICAgcHJpbnR3KCJJbmNvbXBsZXRlIik7Ci0jaWZkZWYgS1VJCi0jaWZuZGVm IEs5NUcKLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLChsb25n KUNXX0VSUiwobG9uZykiSW5jb21wbGV0ZSIpOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAv KiBLVUkgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOwot I2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsK LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGNhc2UgU1RfTVNHOgotICAgICAgICAg ICAgbW92ZShDV19NU0csMjIpOwotICAgICAgICAgICAgcHJpbnR3KCIlcyIscyk7Ci0jaWZkZWYg S1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RS QU5TRkVSLChsb25nKUNXX01TRywobG9uZylzKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYg LyogS1VJICovCi0gICAgICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7Ci0gICAgICAgICAg ICByZXR1cm47Ci0KLSAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAvKiBC YWQgY2FsbCAqLwotICAgICAgICAgICAgbW92ZShDV19FUlIsMjIpOwotICAgICAgICAgICAgcHJp bnR3KCIqKiogc2NyZWVuKCkgY2FsbGVkIHdpdGggYmFkIHN0YXR1cyAqKioiKTsKLSNpZmRlZiBL VUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RS QU5TRkVSLCAobG9uZykgQ1dfRVJSLAotICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIioq KiBzY3JlZW4oKSBjYWxsZWQgd2l0aCBiYWQgc3RhdHVzICoqKiIgKTsKLSNlbmRpZiAvKiBLOTVH ICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7 IHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIFNDUl9UQzogeyAgICAgICAgICAgICAg ICAgICAgLyogVHJhbnNhY3Rpb24gY29tcGxldGUgKi8KLSAgICAgICAgICBjaGFyIG1zZ2J1Zlsx MjhdOwotICAgICAgICAgIG1vdmUoQ1dfQ1AsMjIpOyAgICAgICAgICAgICAgIC8qIE92ZXJhbGwg dHJhbnNmZXIgcmF0ZSAqLwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgS3Vp U2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfQ1AsIHRmY3BzKTsKLSNl bmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgcHJpbnR3KCIlcyIs IGNrZnN0b2EodGZjcHMpKTsKLSAgICAgICAgICBjbHJ0b2VvbCgpOwotICAgICAgICAgIGlmIChz dWNjZXNzKSB7Ci0gICAgICAgICAgICAgIG1vdmUoQ1dfTVNHLDIyKTsgICAgICAgICAgLyogUHJp bnQgc3RhdGlzdGljcyBpbiBtZXNzYWdlIGxpbmUgKi8KLSAgICAgICAgICAgICAgY2xydG9lb2wo KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKLSAgICAgICAgICAgICAg c3ByaW50Zihtc2didWYsCi0gICAgICAgICAgICAgICAgICAgICAgIlNVQ0NFU1MuICBGaWxlczog JWxkLCBCeXRlczogJXMsICVsZCBDUFMiLAotICAgICAgICAgICAgICAgICAgICAgIGZpbGNudCAt IGZpbHJlaiwKLSAgICAgICAgICAgICAgICAgICAgICBja2ZzdG9hKGZieXQpLAotICAgICAgICAg ICAgICAgICAgICAgIHRmY3BzCi0gICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAg ICAgcHJpbnR3KCIlcyIsIG1zZ2J1Zik7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAg ICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChsb25nKSBDV19NU0csCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChsb25nKSBtc2didWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbmRp ZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICAgIGNscnRvZW9sKCk7 Ci0KLSAgICAgICAgICB9Ci0gICAgICAgICAgbW92ZShDV19UUiwgMSk7Ci0gICAgICAgICAgcHJp bnR3KCIgICAgICAgRWxhcHNlZCBUaW1lOiAlcyIsaGhtbXNzKChsb25nKQotI2lmZGVmIEdGVElN RVIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZw dHNlY3MgKyAwLjUpCi0jZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0c2VjcwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpOwotI2lmZGVmIEtVSQotI2lm bmRlZiBLOTVHCi0gICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1RSLAotICAgICAgICAgICAgICAgICAg ICAgICAgIChsb25nKSBoaG1tc3MoKGxvbmcpCi0jaWZkZWYgR0ZUSU1FUgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZwdHNlY3MgKyAwLjUpCi0jZWxzZQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNlY3MKLSNlbmRpZiAvKiBHRlRJTUVS ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKLSNlbmRpZiAv KiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgY2xydG9lb2woKTsKLSAgICAg ICAgICBtb3ZlKDIzLDApOyBjbHJ0b2VvbCgpOyAgICAgICAvKiBDbGVhciBpbnN0cnVjdGlvbnMg bGluZXMgKi8KLSAgICAgICAgICBtb3ZlKDIyLDApOyBjbHJ0b2VvbCgpOyAgICAgICAvKiB0byBt YWtlIHJvb20gZm9yIHByb21wdC4gKi8KLSAgICAgICAgICByZWZyZXNoKCk7Ci0KLSNpZmRlZiBH RlRJTUVSCi0gICAgICAgICAgb2xkZ3R2ID0gKENLRkxPQVQpIC0xLjA7Ci0jZWxzZQotICAgICAg ICAgIG9sZGd0diA9IC0xTDsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0KLSNpZm5kZWYgVk1TQ1VS U0UKLQkgIGRlYnVnKEYxMDAsInNjcmVlbmMgZW5kd2luIEEiLCIiLDApOwotICAgICAgICAgIGVu ZHdpbigpOwotI2lmZGVmIENPTU1FTlQKLS8qCi0gIFdoeSBhbmQgd2hlbiB3YXMgdGhpcyBjYWxs IHRvIGNvbnJlcygpIGFkZGVkPyAgSXQgbWFrZXMgbm8gc2Vuc2UsCi0gIGFuZCBpdCBicmVha3Mg ZWNob2luZyBvbiBTb2xhcmlzIDguCi0qLwotI2lmZGVmIFNPTEFSSVMKLSAgICAgICAgICBjb25y ZXMoKTsKLSNlbmRpZiAvKiBTT0xBUklTICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2VuZGlm IC8qIFZNU0NVUlNFICovCi0KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgcGN0ID0gMTAwOyBv bGRwY3QgPSAwOyAgICAgICAgLyogUmVzZXQgdGhlc2UgZm9yIG5leHQgdGltZS4gKi8KLSNlbmRp ZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgb2xkdHlwID0gMDsgb2xkcnR0ID0gLTFMOyBvbGR0 cnkgPSAtMTsgb2xkbGVuID0gLTE7Ci0gICAgICAgICAgb2xkdGltID0gLTE7Ci0gICAgICAgICAg Y2VuZHcgPSAxOwotICAgICAgICAgIGlmICh4ZnJiZWwpIGJsZWVwKEJQX05PVEUpOyAgIC8qIENs b3NlIHdpbmRvdywgdGhlbiBiZWVwLiAqLwotI2lmZGVmIFVOSVgKLSAgICAgICAgICBmZmx1c2go c3Rkb3V0KTsKLSNlbmRpZiAvKiBVTklYICovCi0gICAgICAgICAgZnRfd2luID0gMDsgICAgICAg ICAgICAgICAgICAgLyogV2luZG93IGNsb3NlZC4gKi8KLSAgICAgICAgICByZXR1cm47Ci0gICAg ICB9Ci0gICAgICBjYXNlIFNDUl9FTTogICAgICAgICAgICAgICAgICAgICAgLyogRXJyb3IgcGFj a2V0IChmYXRhbCkgKi8KLSAgICAgICAgbW92ZSAoQ1dfRVJSLDIyKTsKLSAgICAgICAgcHJpbnR3 KCJGQUlMVVJFOiAlcyIscyk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgS3Vp U2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRVJSLCAobG9uZykgcyAp OwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgaWYgKHhmcmJl bCkgYmxlZXAoQlBfRkFJTCk7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICBwY3QgPSBvbGRwY3Qg PSAwOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgp OyByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NSX1FFOiAgICAgICAgICAgICAgICAgICAgICAvKiBR dWFudGl0eSBlcXVhbHMgKi8KLSAgICAgIGNhc2UgU0NSX1RVOiAgICAgICAgICAgICAgICAgICAg ICAvKiBVbmRlbGltaXRlZCB0ZXh0ICovCi0gICAgICBjYXNlIFNDUl9UTjogICAgICAgICAgICAg ICAgICAgICAgLyogVGV4dCBkZWxpbWl0ZWQgYXQgc3RhcnQgKi8KLSAgICAgIGNhc2UgU0NSX1Ra OiAgICAgICAgICAgICAgICAgICAgICAvKiBUZXh0IGRlbGltaXRlZCBhdCBlbmQgKi8KLSAgICAg ICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAoaWdub3JlZCBpbiBmdWxsc2Ny ZWVuIGRpc3BsYXkpICovCi0KLSAgICAgIGNhc2UgU0NSX01TOgkJCS8qIE1lc3NhZ2UgZnJvbSBL ZXJtaXQgcGFydG5lciAqLwotICAgICAgICBtb3ZlKENXX01TRywyMik7Ci0JcHJpbnR3KCIlcyIs cyk7Ci0gICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsgcmV0dXJuOwotCi0gICAgICBjYXNl IFNDUl9YRDogICAgICAgICAgICAgICAgICAgICAgLyogWC1wYWNrZXQgZGF0YSAqLwotICAgICAg ICBwY3QgPSBvbGRwY3QgPSAwOwotICAgICAgICBtb3ZlKENXX05BTSwyMik7Ci0gICAgICAgIHBy aW50dygiJXMiLHMpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgIEt1aVNldFBy b3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX05BTSwgKGxvbmcpIHMgKTsKLSNl bmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgIGNscnRvZW9sKCk7IHJl ZnJlc2goKTsgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9DVzogICAgICAgICAgICAgICAgICAg ICAgLyogQ2xvc2UgV2luZG93ICovCi0gICAgICAgIGNscnRvZW9sKCk7IG1vdmUoMjMsMCk7IGNs cnRvZW9sKCk7IG1vdmUoMjIsMCk7IGNscnRvZW9sKCk7Ci0gICAgICAgIHJlZnJlc2goKTsKLSNp ZmRlZiBDT01NRU5UCi0gICAgICAgIHBjdCA9IDEwMDsgb2xkcGN0ID0gMDsgICAgICAgICAgLyog UmVzZXQgdGhlc2UgZm9yIG5leHQgdGltZS4gKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAg ICAgIG9sZHR5cCA9IDA7IG9sZHJ0dCA9IC0xTDsgb2xkdHJ5ID0gLTE7IG9sZGxlbiA9IC0xOwot ICAgICAgICBvbGR0aW0gPSAtMTsKLQotI2lmbmRlZiBWTVNDVVJTRQotCWRlYnVnKEYxMDAsInNj cmVlbmMgZW5kd2luIEIiLCIiLDApOwotICAgICAgICBlbmR3aW4oKTsKLSNlbmRpZiAvKiBWTVND VVJTRSAqLwotICAgICAgICBmdF93aW4gPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcg dGhhdCB3aW5kb3cgaXMgY2xvc2VkLiAqLwotICAgICAgICBjZW5kdyA9IDE7IHJldHVybjsKLQot ICAgICAgY2FzZSBTQ1JfQ0Q6ICAgICAgICAgICAgICAgICAgICAgIC8qIERpc3BsYXkgY3VycmVu dCBkaXJlY3RvcnkgKi8KLSAgICAgICAgbW92ZShDV19ESVIsMjIpOwotICAgICAgICAgcHJpbnR3 KCIlcyIsIHMpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgIEt1aVNldFByb3Bl cnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0RJUiwgKGxvbmcpIHMgKTsKLSNlbmRp ZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgIGNscnRvZW9sKCk7Ci0gICAg ICAgIHJlZnJlc2goKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgU2F2ZUNtZE1vZGUoMCwgMCk7Ci0j ZW5kaWYgLyogT1MyICovCi0gICAgICAgIHJldHVybjsKLQotICAgICAgZGVmYXVsdDogICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEJhZCBjYWxsICovCi0gICAgICAgIG1vdmUgKENXX0VSUiwy Mik7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJ X0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19FUlIsCi0g ICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiKioqIHNjcmVlbigpIGNhbGxlZCB3aXRoIGJh ZCBmdW5jdGlvbiBjb2RlICoqKiIKLSAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbmRpZiAv KiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgIHByaW50dygiKioqIHNjcmVlbigp IGNhbGxlZCB3aXRoIGJhZCBmdW5jdGlvbiBjb2RlICoqKiIpOwotICAgICAgICBjbHJ0b2VvbCgp OyByZWZyZXNoKCk7IHJldHVybjsKLSAgICB9Ci19Ci0jZW5kaWYgLyogQ0tfQ1VSU0VTICovCi0K LSNpZmRlZiBLVUkKLSNpZmRlZiBDS19BTlNJQwotdm9pZAotc2NyZWVuZyhpbnQgZiwgY2hhciBj LGxvbmcgbixjaGFyICpzKQotI2Vsc2UKLUNLVk9JRAotc2NyZWVuZyhmLGMsbixzKQotaW50IGY7 ICAgICAgICAgIC8qIGFyZ3VtZW50IGRlc2NyaXB0b3IgKi8KLWNoYXIgYzsgICAgICAgICAvKiBh IGNoYXJhY3RlciBvciBzbWFsbCBpbnRlZ2VyICovCi1sb25nIG47ICAgICAgICAgLyogYSBsb25n IGludGVnZXIgKi8KLWNoYXIgKnM7ICAgICAgICAvKiBhIHN0cmluZyAqLwotI2VuZGlmIC8qIENL X0FOU0lDICovCi0vKiBzY3JlZW5nKCkgKi8gewotI2lmZGVmIENLX1NTTAotICAgIGV4dGVybiBp bnQgdGxzX2FjdGl2ZV9mbGFnLCBzc2xfYWN0aXZlX2ZsYWc7Ci0jZW5kaWYgLyogQ0tfU1NMICov Ci0jaWZkZWYgUkxPR0NPREUKLSAgICBleHRlcm4gaW50IHR0bnByb3RvOwotI2VuZGlmIC8qIFJM T0dDT0RFICovCi0gICAgc3RhdGljIGludCBxID0gMDsKLSAgICBzdGF0aWMgQ0tfT0ZGX1QgZnNp eiA9IChDS19PRkZfVCktMTsgLyogQ29weSBvZiBmaWxlIHNpemUgKi8KLSAgICBzdGF0aWMgbG9u ZyBmY250ID0gMEw7ICAgIC8qIE51bWJlciBvZiBmaWxlcyB0cmFuc2ZlcnJlZCAqLwotICAgIHN0 YXRpYyBsb25nIGZieXQgPSAwTDsgICAgLyogVG90YWwgZmlsZSBieXRlcyBvZiBhbGwgZmlsZXMg dHJhbnNmZXJyZWQgKi8KLSAgICBzdGF0aWMgQ0tfT0ZGX1QgaG93ZmFyID0gKENLX09GRl9UKTA7 IC8qIEhvdyBtdWNoIG9mIGZpbGUgeGZlcidkIHNvIGZhciAqLwotICAgIHN0YXRpYyBpbnQgIHBj dGxibCA9IDBMOyAgLyogUGVyY2VudCBkb25lIHZzIEJ5dGVzIHNvIGZhciAqLwotICAgIGxvbmcg Y3BzID0gMEw7Ci0KLSAgICBpbnQgbmV0ID0gMDsKLSAgICBpbnQgeG5ldCA9IDA7Ci0gICAgaW50 IGZ0cCA9IDA7Ci0gICAgaW50IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGVu Z3RoIG9mIHN0cmluZyAqLwotICAgIGludCBlcnJvcnMgPSAwOyAgICAgICAgICAgICAgICAgICAg IC8qIEVycm9yIGNvdW50ZXIgKi8KLSAgICBpbnQgeDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBXb3JrZXIgKi8KLQotICAgIGRlYnVnKEYxMDEsInNjcmVlbmcgY2luaXQiLCIiLGNp bml0KTsKLSAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5nIGNlbmR3IiwiIixjZW5kdyk7Ci0KLSAgICBp ZiAoIXMpIHMgPSAiIjsgICAgICAgICAgICAgICAgICAgICAvKiBBbHdheXMgZG8gdGhpcy4gKi8K LQotICAgIGZ0cCA9ICh3aGF0ICYgV19GVFApID8gMSA6IDA7CS8qIEZUUCBvciBLZXJtaXQgKi8K LSAgICBuZXQgPSBuZXR3b3JrIHx8IGZ0cDsKLSAgICB4bmV0ID0gZnRwID8gMSA6IG5ldHR5cGU7 CQkvKiBORVRfVENQQiA9PSAxICovCi0KLSAgICBpZiAoY2luaXQgPT0gMCB8fCBjZW5kdyA+IDAp IHsgICAgICAvKiBIYW5kbGUgYm9yZGVybGluZSBjYXNlcy4uLiAqLwotICAgICAgICBpZiAoZiA9 PSBTQ1JfQ1cpIHsgICAgICAgICAgICAgIC8qIENsb3NlIHdpbmRvdywgYnV0IGl0J3Mgbm90IG9w ZW4gKi8KLSAgICAgICAgICAgIGZ0X3dpbiA9IDA7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg ICAgIH0KLSAgICAgICAgZGVidWcoRjExMSwic2NyZWVuZyBBIixzLGYpOwotICAgICAgICBpZiAo ZiA9PSBTQ1JfRU0gfHwKLSAgICAgICAgICAgKGYgPT0gU0NSX1BUICYmIGMgPT0gJ0UnKSkgeyAv KiBGYXRhbCBlcnJvciBiZWZvcmUgd2luZG93IG9wZW4gKi8KLSAgICAgICAgICAgIGNvbm9sbCgi Iik7IGNvbm9jKCc/Jyk7IGNvbm9sbChzKTsgcmV0dXJuOyAvKiBSZWd1bGFyIGRpc3BsYXkgKi8K LSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoY2luaXQgPT0gMCkgeyAgICAgICAgICAgICAgICAg ICAvKiBPbmx5IGNhbGwgaW5pdHNjcigpIG9uY2UgKi8KLQkvKiBDaGVjayB0aGVzZSBub3cgLS0g aWYgdGhleSBhcmUgZGVmaW5lZCBidXQgbm90IG51bWVyaWMgKi8KLQkvKiB0aGV5IGNhbiBjcmFz aCBjdXJzZXMgKi8KLSAgICAgICAgY2VuZHcgPSAxOyAgICAgICAgICAgICAgICAgICAgICAvKiBO ZXcgd2luZG93IG5lZWRzIHJlcGFpbnRpbmcgKi8KLSAgICAgICAgZGVidWcoRjEwMCwic2NyZWVu ZyBjYWxsaW5nIGluaXRzY3IiLCIiLDApOwotICAgICAgICBpbml0c2NyKCk7ICAgICAgICAgICAg ICAgICAgICAgIC8qIEluaXRpYWxpemUgY3Vyc2VzLiAqLwotICAgICAgICBkZWJ1ZyhGMTAwLCJz Y3JlZW5nIGluaXRzY3Igb2siLCIiLDApOwotICAgICAgICBjaW5pdCsrOyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFJlbWVtYmVyIGN1cnNlcyB3YXMgaW5pdGlhbGl6ZWQuICovCi0gICAgfQot ICAgIGZ0X3dpbiA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdpbmRvdyBpcyBvcGVu ICovCi0gICAgaWYgKHJlcGFpbnQpIHsKLSNpZmRlZiBDS19XUkVGUkVTSAotLyoKLSAgVGhpcyB0 b3RhbGx5IHJlcGFpbnRzIHRoZSBzY3JlZW4sIGp1c3Qgd2hhdCB3ZSB3YW50LCBidXQgd2UgY2Fu IG9ubHkKLSAgZG8gdGhpcyB3aXRoIHJlYWwgY3Vyc2VzLCBhbmQgdGhlbiBvbmx5IGlmIGNsZWFy b2soKSBhbmQgd3JlZnJlc2goKSBhcmUKLSAgcHJvdmlkZWQgaW4gdGhlIGN1cnNlcyBsaWJyYXJ5 LgotKi8KLSAgICAgICAgUmVzdG9yZUNtZE1vZGUoKTsKLSNlbHNlICAvKiBObyBDS19XUkVGUkVT SCAqLwotLyoKLSAgS2VybWl0J3MgZG8taXQteW91cnNlbGYgbWV0aG9kLCB3b3JrcyB3aXRoIGFs bCB0eXBlcyBvZiBmdWxsc2NyZWVuCi0gIHN1cHBvcnQsIGJ1dCBkb2VzIG5vdCByZXBhaW50IGFs bCB0aGUgZmllbGRzLiAgRm9yIGV4YW1wbGUsIHRoZSBmaWxlbmFtZQotICBpcyBsb3N0LCBiZWNh dXNlIGl0IGFycml2ZXMgYXQgYSBjZXJ0YWluIHRpbWUgYW5kIG5ldmVyIGNvbWVzIGFnYWluLCBh bmQKLSAgS2VybWl0IHByZXNlbnRseSBkb2VzIG5vdCBzYXZlIGl0IGFueXdoZXJlLiAgTWFraW5n IHRoaXMgbWV0aG9kIHdvcmsgZm9yCi0gIGFsbCBmaWVsZHMgd291bGQgYmUgYSByYXRoZXIgbWFq b3IgcmVjb2RpbmcgdGFzaywgZHVwbGljYXRpbmcgd2hhdCBjdXJzZXMKLSAgYWxyZWFkeSBkb2Vz LCBhbmQgd291bGQgYWRkIGEgbG90IG9mIGNvbXBsZXhpdHkgYW5kIHN0b3JhZ2Ugc3BhY2UuCi0q LwotICAgICAgICBjZW5kdyA9IDE7Ci0jZW5kaWYgLyogQ0tfV1JFRlJFU0ggKi8KLSAgICAgICAg cmVwYWludCA9IDA7Ci0gICAgfQotICAgIGlmIChjZW5kdykgeyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIGVuZHdpbigpIHdhcyBjYWxsZWQgcHJldmlvdXNseSAqLwotICAgICAgICBkZWJ1ZyhG MTAwLCJzY3JlZW5nIHNldHVwIG9rIiwiIiwwKTsKLSAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtV SV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRElSLCAobG9uZykgemd0ZGlyKCkgKTsKLSAgICAg ICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfTElOLAotICAg ICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICgKLSNpZmRlZiBORVdGVFAKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZnRwID8gKGZ0cF9ob3N0ID8gZnRwX2hvc3QgOiAiKHVua25v d24pIikgOgotI2VuZGlmIC8qIE5FV0ZUUCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0dG5hbWUpICk7Ci0KLSAgICAgICAgaWYgKG5ldCkgewotI2lmZGVmIE5FVENPTk4KLQkg ICAgaW50IHNlY3VyZSA9IDA7Ci0JICAgIGNoYXIgKiB4bmFtZTsKLQkgICAgaWYgKHhuZXQgPiBu bmV0bmFtZSkKLQkgICAgICB4bmFtZSA9ICJbRVJST1JdIjsKLQkgICAgZWxzZQotCSAgICAgIHhu YW1lID0gbmV0bmFtZVt4bmV0XTsKLSNpZmRlZiBORVdGVFAKLSAgICAgICAgICAgIGlmIChmdHAp IHsKLQkJaWYgKGZ0cGlzc2VjdXJlKCkpCi0JCSAgc2VjdXJlID0gMTsKLQkgICAgfSBlbHNlCi0j ZW5kaWYgLyogTkVXRlRQICovCi0JICAgICAgaWYgKDAKLSNpZmRlZiBTU0hCVUlMVElOCi0gICAg ICAgICAgICAgICAgfHwgSVNfU1NIKCkKLSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0jaWZkZWYg Q0tfRU5DUllQVElPTgotICAgICAgICAgICAgICAgIHx8IGNrX3RuX2VuY3J5cHRpbmcoKSAmJiBj a190bl9kZWNyeXB0aW5nKCkKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jaWZkZWYgQ0tf U1NMCi0gICAgICAgICAgICAgICAgfHwgdGxzX2FjdGl2ZV9mbGFnIHx8IHNzbF9hY3RpdmVfZmxh ZwotI2VuZGlmIC8qIENLX1NTTCAqLwotI2lmZGVmIFJMT0dDT0RFCi0jaWZkZWYgQ0tfS0VSQkVS T1MKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAgICAgICAgICAgfHwgdHRucHJvdG8gPT0g TlBfRUs0TE9HSU4gfHwgdHRucHJvdG8gPT0gTlBfRUs1TE9HSU4KLSNlbmRpZiAvKiBDS19FTkNS WVBUSU9OICovCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSNlbmRpZiAvKiBSTE9HQ09ERSAq LwotICAgICAgICAgICAgICAgICApIHsKLQkJc2VjdXJlID0gMTsKLQkgICAgfQotCSAgICBpZiAo c2VjdXJlKSB7Ci0gICAgICAgICAgICAgICAgY2hhciBidWZbMzBdOwotICAgICAgICAgICAgICAg IHNwcmludGYoYnVmLCIlcyAoU0VDVVJFKSIseG5hbWUpOwotICAgICAgICAgICAgICAgIEt1aVNl dFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChsb25nKSBDV19TUEQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcp IGJ1ZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICB9IGVs c2UgewotICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19TUEQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHhuYW1lCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKLSAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICBLdWlTZXRQcm9w ZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25n KSBDV19TUEQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIihuZXR3b3JrKSIK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYgLyogTkVUQ09OTiAqLwotICAg ICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHNwZWVkIDwgMEwpCi0gICAgICAgICAgICAg IHNwZWVkID0gdHRnc3BkKCk7Ci0gICAgICAgICAgICBpZiAoc3BlZWQgPiAwTCkgewotICAgICAg ICAgICAgICAgIGlmIChzcGVlZCA9PSA4ODgwKSB7Ci0gICAgICAgICAgICAgICAgICAgIEt1aVNl dFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAobG9uZykgQ1dfU1BELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAobG9uZykgIjc1LzEyMDAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhciBzcGVl ZGJ1Zls2NF0gOwotICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHNwZWVkYnVmLCAiJWxkIiwg c3BlZWQpOwotICAgICAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFO U0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1NQRCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHNwZWVkYnVmCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklM RV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfU1BE LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiKHVua25vd24pIgotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K LSAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAg ICAgICAgICAgIChsb25nKSBDV19QQVIsCi0gICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBw YXJuYW0oKGNoYXIpcGFyaXR5KQotICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICBw Y3RsYmwgPSAod2hhdCAmIFdfU0VORCk7Ci0gICAgICAgIGNlbmR3ID0gMDsKLSAgICB9Ci0gICAg ZGVidWcoRjEwMSwiU0NSRUVOQyBzd2l0Y2giLCIiLGYpOwotICAgIGRlYnVnKEYwMDAsIlNDUkVF TkMgYyIsIiIsYyk7Ci0gICAgZGVidWcoRjEwMSwiU0NSRUVOQyBuIiwiIixuKTsKLQotICAgIGxl biA9IHN0cmxlbihzKTsgICAgICAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBhcmd1bWVudCBz dHJpbmcgKi8KLSAgICBzd2l0Y2ggKGYpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBIYW5k bGUgb3VyIGZ1bmN0aW9uIGNvZGUgKi8KLSAgICAgIGNhc2UgU0NSX0ZOOiAgICAgICAgICAgICAg ICAgICAgICAvKiBGaWxlbmFtZSAqLwotICAgICAgICBvbGRwY3QgPSBwY3QgPSAwTDsgICAgICAg ICAgICAgIC8qIFJlc2V0IHBlcmNlbnRzICovCi0jaWZkZWYgR0ZUSU1FUgotICAgICAgICBndHYg PSAoQ0tGTE9BVCkgLTEuMDsKLSAgICAgICAgLyogb2xkZ3R2ID0gKENLRkxPQVQpIC0xLjA7ICov Ci0jZWxzZQotICAgICAgICBndHYgPSAtMUw7Ci0gICAgICAgIC8qIG9sZGd0diA9IC0xTDsgKi8K LSNlbmRpZiAvKiBHRlRJTUVSICovCi0gICAgICAgIG9sZHdpbiA9IC0xOwotICAgICAgICBmc2l6 ID0gKENLX09GRl9UKS0xTDsJCS8qIEludmFsaWRhdGUgcHJldmlvdXMgZmlsZSBzaXplICovCi0g ICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BDRCwg KGxvbmcpIDAgKTsKLSAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAo bG9uZykgQ1dfRkZDLCAobG9uZykgMCApOwotICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJ TEVfVFJBTlNGRVIsIChsb25nKSBDV19TSVosIChsb25nKSAwICk7Ci0gICAgICAgIEt1aVNldFBy b3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0VSUiwgKGxvbmcpICIiICk7Ci0K LSAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfTkFN LCAobG9uZykgcyApOwotICAgICAgICBxID0gbGVuOyAgICAgICAgICAgICAgICAgICAgICAgIC8q IFJlbWVtYmVyIG5hbWUgbGVuZ3RoIGZvciBsYXRlciAqLwotICAgICAgICBzY3JmdCgpOyAgICAg ICAgICAgICAgICAgICAgICAgIC8qIERpc3BsYXkgZmlsZSB0eXBlIChjYW4gY2hhbmdlKSAqLwot I2lmZGVmIE9TMgotICAgICAgICBTYXZlQ21kTW9kZSgwLCAwKTsKLSNlbmRpZiAvKiBPUzIgKi8K LSAgICAgICAgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9BTjogICAgICAgICAgICAgICAgICAg ICAgLyogRmlsZSBhcy1uYW1lICovCi0gICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9U UkFOU0ZFUiwgKGxvbmcpIENXX05BTSwgKGxvbmcpIHMgKTsKLSNpZmRlZiBPUzIKLSAgICAgICAg U2F2ZUNtZE1vZGUoMCwgMCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgIHJldHVybjsKLQot ICAgICAgY2FzZSBTQ1JfRlM6ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgc2l6ZSAqLwot ICAgICAgICBmc2l6ID0gbjsKLSAgICAgICAgaWYgKGZzaXogPiAoQ0tfT0ZGX1QpLTEpIHsKLSAg ICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1NJ WiwgKGxvbmcpIG4gKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZnNpeiA+IChDS19PRkZfVCkt MSkgewkvKiBQdXQgdXAgcGVyY2VudCBsYWJlbCAqLwotICAgICAgICAgICAgcGN0bGJsID0gMTsK LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBjdGxibCA9IDA7Ci0JfQotICAgICAgICBz Y3JmdCgpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgdHlwZSAqLwotI2lmZGVmIE9T MgotICAgICAgICBTYXZlQ21kTW9kZSgwLCAwKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAg cmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9QVDogICAgICAgICAgICAgICAgICAgICAgLyogUGFj a2V0IHR5cGUgb3IgcHNldWRvdHlwZSAqLwotICAgICAgICBpZiAoc3BhY2tldHMgPCA1KSB7Ci0g ICAgICAgICAgICBleHRlcm4gaW50IHN5c2luZGV4OwotICAgICAgICAgICAgZXh0ZXJuIHN0cnVj dCBzeXNkYXRhIHN5c2lkbGlzdFtdOwotICAgICAgICAgICAgLyogVGhpbmdzIHRoYXQgd29uJ3Qg Y2hhbmdlIGFmdGVyIHRoZSA0dGggcGFja2V0ICovCi0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0 eSggS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykg Q1dfUEFSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHBhcm5hbSgoY2hhcilw YXJpdHkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgaWYgKAot I2lmZGVmIE5FV0ZUUAotCQkoZnRwICYmIChzcGFja2V0cyA9PSAxIHx8IHJwYWNrZXRzID09IDEp KSB8fAotI2VuZGlmIC8qIE5FV0ZUUCAqLwotCQlzcGFja2V0cyA9PSA0Ci0JCSkgewotICAgICAg ICAgICAgICAgIGlmICgKLSNpZmRlZiBORVdGVFAKLQkJICAgIGZ0cCB8fAotI2VuZGlmIC8qIE5F V0ZUUCAqLwotCQkgICAgKChwcm90b2NvbCA9PSBQUk9UT19LKSAmJiAoc3lzaW5kZXggPiAtMSkp Ci0JCSAgICApIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhciBtc2didWZbMTI4XTsKLSAgICAg ICAgICAgICAgICAgICAgaWYgKG5ldCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50 Zihtc2didWYsIk5ldHdvcmsgSG9zdDogJXMgKCVzKSIsCi0jaWZkZWYgTkVXRlRQCi0JCQkgICAg ICAgZnRwID8gKGZ0cF9ob3N0ID8gZnRwX2hvc3QgOiAiIikgOgotI2VuZGlmIC8qIE5FV0ZUUCAq LwotCQkJICAgICAgIHR0bmFtZSwKLSNpZmRlZiBORVdGVFAKLQkJCSAgICAgICBmdHAgPyBmdHBf c3J2dHlwIDoKLSNlbmRpZiAvKiBORVdGVFAgKi8KLQkJCSAgICAgICBzeXNpZGxpc3Rbc3lzaW5k ZXhdLnNpZF9uYW1lCi0JCQkgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYobXNnYnVmLAotCQkJCSJDb21tdW5pY2F0 aW9uIERldmljZTogJXMgKHJlbW90ZSBob3N0IGlzICVzKSIsCi0JCQkJdHRuYW1lLAotCQkJCXN5 c2lkbGlzdFtzeXNpbmRleF0uc2lkX25hbWUKLQkJCQkpOwotICAgICAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwK LQkJCQkgICAgKGxvbmcpIENXX0xJTiwKLQkJCQkgICAgKGxvbmcpIG1zZ2J1ZgotCQkJCSAgICAp OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2lmZGVmIENL X1RJTUVSUwotICAgICAgICBpZiAoLyogcnR0ZmxnICYmICovIHByb3RvY29sID09IFBST1RPX0sp IHsKLSAgICAgICAgICAgIGxvbmcgeHg7Ci0gICAgICAgICAgICBpZiAoCi0jaWZkZWYgU1RSRUFN SU5HCi0gICAgICAgICAgICAgICAgc3RyZWFtaW5nICYmIG9sZHdpbiAhPSAtMgotI2Vsc2UKLSAg ICAgICAgICAgICAgICAwCi0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0gICAgICAgICAgICAgICAg KSB7Ci0gICAgICAgICAgICAgICAgY2hhciBtc2didWZbNjRdOwotICAgICAgICAgICAgICAgIHNw cmludGYobXNnYnVmLCIwMCAvIDAwIik7Ci0gICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHko IEtVSV9GSUxFX1RSQU5TRkVSLAotCQkJCShsb25nKSBDV19UTU8sCi0JCQkJKGxvbmcpIG1zZ2J1 ZgotCQkJCSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHh4ID0gKHJ0 dGRlbGF5ICsgNTAwKSAvIDEwMDA7Ci0gICAgICAgICAgICAgICAgaWYgKHh4ICE9IG9sZHJ0dCB8 fCByY3Z0aW1vICE9IG9sZHRpbSkgewotICAgICAgICAgICAgICAgICAgICBjaGFyIG1zZ2J1Zls2 NF07Ci0gICAgICAgICAgICAgICAgICAgIHNwcmludGYobXNnYnVmLCIlMDJsZCAvICUwMmQiLCB4 eCwgcmN2dGltbyk7Ci0gICAgICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklM RV9UUkFOU0ZFUiwKLQkJCQkgICAgKGxvbmcpIENXX1RNTywKLQkJCQkgICAgKGxvbmcpIG1zZ2J1 ZgotCQkJCSAgICApOwotICAgICAgICAgICAgICAgICAgICBvbGRydHQgPSB4eDsKLSAgICAgICAg ICAgICAgICAgICAgb2xkdGltID0gcmN2dGltbzsKLSAgICAgICAgICAgICAgICAgICAgY2xydG9l b2woKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRp ZiAvKiBDS19USU1FUlMgKi8KLQotICAgICAgICB4ID0gKHdoYXQgJiBXX1JFQ1YpID8gICAgICAg ICAgLyogUGFja2V0IGxlbmd0aCAqLwotICAgICAgICAgIHJwa3RsKyhwcm90b2NvbD09UFJPVE9f Sz8xOjApIDoKLSAgICAgICAgICAgIHNwa3RsOwotICAgICAgICBpZiAoeCAhPSBvbGRsZW4pIHsg ICAgICAgICAgICAgIC8qIEJ1dCBvbmx5IGlmIGl0IGNoYW5nZWQuICovCi0gICAgICAgICAgICBL dWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19QTCwgKGxvbmcpIHgg KTsKLSAgICAgICAgICAgIG9sZGxlbiA9IHg7Ci0gICAgICAgIH0KLSAgICAgICAgS3VpU2V0UHJv cGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfUEMsIChsb25nKSBzcGFja2V0cyAp OwotCi0gICAgICAgIGlmIChwcm90b2NvbCA9PSBQUk9UT19LICYmICFmdHApIHsgLyogV2luZG93 IHNsb3RzICovCi0gICAgICAgICAgICBjaGFyIHdzWzE2XTsKLSAgICAgICAgICAgIGludCBmbGFn OwotICAgICAgICAgICAgZmxhZyA9IDA7Ci0jaWZkZWYgU1RSRUFNSU5HCi0gICAgICAgICAgICBp ZiAoc3RyZWFtaW5nKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG9sZHdpbiAhPSAtMikgewotICAg ICAgICAgICAgICAgICAgICBzcHJpbnRmKHdzLCJTVFJFQU1JTkciKTsKLSAgICAgICAgICAgICAg ICAgICAgZmxhZyA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIG9sZHdpbiA9IC0yOwotICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZQotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwot ICAgICAgICAgICAgICBpZiAod2N1ciAhPSBvbGR3aW4pIHsKLSAgICAgICAgICAgICAgICAgIHNw cmludGYod3MsICIlZCBvZiAlZCIsIHdjdXIgPCAxID8gMSA6IHdjdXIsIHdzbG90bik7Ci0gICAg ICAgICAgICAgICAgICBmbGFnID0gMTsKLSAgICAgICAgICAgICAgICAgIG9sZHdpbiA9IHdjdXI7 Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmbGFnKSB7Ci0gICAgICAgICAgICAg ICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfV1MsIChsb25n KSB3cyApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVycm9ycyA9IHJldHJh bnMgKyBjcnVuY2hlZCArIHRpbWVvdXRzOwotICAgICAgICBpZiAoZXJyb3JzICE9IG9sZHRyeSkg eyAgICAgICAgIC8qIFJldHJ5IGNvdW50LCBpZiBjaGFuZ2VkICovCi0gICAgICAgICAgICBLdWlT ZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19QUiwgKGxvbmcpIGVycm9y cyApOwotICAgICAgICAgICAgb2xkdHJ5ID0gZXJyb3JzOwotICAgICAgICB9Ci0JLyogU2VuZGVy J3MgcGFja2V0IHR5cGUgKi8KLSAgICAgICAgaWYgKCFmdHAgJiYgKGMgIT0gb2xkdHlwICYmIGMg IT0gJ1knICYmIGMgIT0gJ04nKSkgewotICAgICAgICAgICAgY2hhciB0eXBlWzJdOwotICAgICAg ICAgICAgc3ByaW50Zih0eXBlLCAiJWMiLGMpOwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHko IEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfUFQsIChsb25nKSB0eXBlICk7Ci0gICAgICAg ICAgICBvbGR0eXAgPSBjOwotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAoYykgeyAgICAgICAg ICAgICAgICAgICAgLyogTm93IGhhbmRsZSBzcGVjaWZpYyBwYWNrZXQgdHlwZXMgKi8KLSAgICAg ICAgICBjYXNlICdTJzogICAgICAgICAgICAgICAgICAgICAvKiBCZWdpbm5pbmcgb2YgdHJhbnNm ZXIgKi8KLSAgICAgICAgICAgIGZjbnQgPSBmYnl0ID0gMEw7ICAgICAgICAgICAvKiBDbGVhciBj b3VudGVycyAqLwotI2lmZGVmIEdGVElNRVIKLSAgICAgICAgICAgIGd0diA9IC0xLjA7Ci0jZWxz ZSAvKiBHRlRJTUVSICovCi0gICAgICAgICAgICBndHYgPSAtMUw7ICAgICAgICAgICAgICAgICAg LyogQW5kIG9sZC9uZXcgdGhpbmdzLi4uICovCi0jZW5kaWYgLyogR0ZUSU1FUiAqLwotICAgICAg ICAgICAgb2xkcGN0ID0gcGN0ID0gMEw7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg IGNhc2UgJ1onOiAgICAgICAgICAgICAgICAgICAgIC8qIG9yIEVPRiAqLwotICAgICAgICAgICAg ZGVidWcoRjEwMSwic2NyZWVuZyBTQ1JfUFQgWiBwa3RudW0iLCIiLG4pOwotICAgICAgICAgICAg ZGVidWcoRjEwMSwic2NyZWVuZyBTQ1JfUFQgWiBvbGRwY3QiLCIiLG9sZHBjdCk7Ci0gICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5nIFNDUl9QVCBaIHBjdCIsIiIscGN0KTsKLSAgICAgICAg ICBjYXNlICdEJzogICAgICAgICAgICAgICAgICAgICAvKiBEYXRhIHBhY2tldCAqLwotICAgICAg ICAgICAgaWYgKGZzaXogPiAwTCkgeyAgICAgICAgICAgIC8qIFNob3cgcGVyY2VudCBkb25lIGlm IGtub3duICovCi0gICAgICAgICAgICAgICAgb2xkcGN0ID0gcGN0OyAgICAgICAgICAgLyogUmVt ZW1iZXIgcHJldmlvdXMgcGVyY2VudCAqLwotICAgICAgICAgICAgICAgIGhvd2ZhciA9IGZmYzsK LSNpZmRlZiBDS19SRVNFTkQKLSAgICAgICAgICAgICAgICBpZiAod2hhdCAmIFdfU0VORCkJLyog QWNjb3VudCBmb3IgUFNFTkQgb3IgUkVTRU5EICovCi0gICAgICAgICAgICAgICAgICBob3dmYXIg Kz0gc2VuZHN0YXJ0OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdoYXQgJiBXX1JFQ1YpCi0g ICAgICAgICAgICAgICAgICBob3dmYXIgKz0gcnNfbGVuOwotI2VuZGlmIC8qIENLX1JFU0VORCAq LwotICAgICAgICAgICAgICAgIC8qIFBlcmNlbnQgZG9uZSwgdG8gYmUgZGlzcGxheWVkLi4uICov Ci0gICAgICAgICAgICAgICAgaWYgKGMgPT0gJ1onKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm ICghZGlzY2FyZCAmJiAhY3hzZWVuICYmICFjenNlZW4pIHBjdCA9IDEwMEw7Ci0gICAgICAgICAg ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICBwY3QgPSAoZnNpeiA+IDk5TCkgPyAoaG93 ZmFyIC8gKGZzaXogLyAxMDBMKSkgOiAwTDsKLSAgICAgICAgICAgICAgICBpZiAocGN0ID4gMTAw TCB8fCAgICAgICAvKiBBbGxvdyBmb3IgZXhwYW5zaW9uIGFuZCAqLwotICAgICAgICAgICAgICAg ICAgIChvbGRwY3QgPT0gOTlMICYmIHBjdCA8IDBMKSkgLyogb3RoZXIgYm91bmRhcnkgY29uZGl0 aW9ucyAqLwotICAgICAgICAgICAgICAgICAgcGN0ID0gMTAwTDsKLSAgICAgICAgICAgICAgICBp ZiAocGN0ICE9IG9sZHBjdCkgICAgICAvKiBPbmx5IGRvIHRoaXMgMTAwIHRpbWVzIHBlciBmaWxl ICovCi0gICAgICAgICAgICAgICAgICB1cGRwY3Qob2xkcGN0LCBwY3QpOwotICAgICAgICAgICAg fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZF UiwgKGxvbmcpIENXX0ZGQywgKGxvbmcpIGZmYyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg ICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0ZGQywgKGxvbmcp IGhvd2Zhcik7Ci0gICAgICAgICAgICBjcHMgPSBzaG9jcHMoKGludCkgcGN0LCBmc2l6LCBob3dm YXIpOwotICAgICAgICAgICAgLyogb2xkX3RyID0gc2hvZXRsKG9sZF90ciwgY3BzLCBmc2l6LCBo b3dmYXIpOyAqLwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlICclJzogICAg ICAgICAgICAgICAgICAgICAvKiBUaW1lb3V0cywgcmV0cmFuc21pc3Npb25zICovCi0gICAgICAg ICAgICBjcHMgPSBzaG9jcHMoKGludCkgcGN0LCBmc2l6LCBob3dmYXIpOwotICAgICAgICAgICAg Lyogb2xkX3RyID0gc2hvZXRsKG9sZF90ciwgY3BzLCBmc2l6LCBob3dmYXIpOyAqLwotCi0gICAg ICAgICAgICBlcnJvcnMgPSByZXRyYW5zICsgY3J1bmNoZWQgKyB0aW1lb3V0czsKLSAgICAgICAg ICAgIGlmIChlcnJvcnMgIT0gb2xkdHJ5KSB7ICAgICAvKiBFcnJvciBjb3VudCwgaWYgY2hhbmdl ZCAqLwotICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19QUiwKLQkJCSAgICAgICAo bG9uZykgZXJyb3JzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb2xkdHJ5ID0gZXJyb3JzOwotICAgICAgICAgICAg ICAgIGlmIChzKSBpZiAoKnMpIHsKLSAgICAgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHko S1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19FUlIsIChsb25nKSBzKTsKLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSAnRSc6ICAgICAgICAgICAg ICAgICAgICAgLyogRXJyb3IgcGFja2V0ICovCi0gICAgICAgICAgICBpZiAoKnMpIHsKLSAgICAg ICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19F UlIsIChsb25nKSBzICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmY250ID0gZmJ5dCA9 IDBMOyAgICAgICAgICAgLyogU28gbm8gYnl0ZXMgZm9yIHRoaXMgZmlsZSAqLwotICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAnUSc6ICAgICAgICAgICAgICAgICAgICAgLyogQ3J1 bmNoZWQgcGFja2V0ICovCi0gICAgICAgICAgICBjcHMgPSBzaG9jcHMoKGludCkgcGN0LCBmc2l6 LCBob3dmYXIpOwotICAgICAgICAgICAgLyogb2xkX3RyID0gc2hvZXRsKG9sZF90ciwgY3BzLCBm c2l6LCBob3dmYXIpOyAqLwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJB TlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfRVJSLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICJEYW1hZ2VkIFBhY2tldCIKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICdx JzogICAgICAgICAgICAgICAgICAgICAvKiBDdHJsLUMgb3IgY29ubmVjdGlvbiBsb3N0ICovCi0g ICAgICAgICAgICBpZiAoIXMpIHMgPSAiIjsKLSAgICAgICAgICAgIGlmICghKnMpIHMgPSAiVXNl ciBpbnRlcnJ1cHRpb24gb3IgY29ubmVjdGlvbiBsb3N0IjsKLSAgICAgICAgICAgIEt1aVNldFBy b3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxv bmcpIENXX01TRywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBzCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz ZSAnVCc6ICAgICAgICAgICAgICAgICAgICAgLyogVGltZW91dCAqLwotICAgICAgICAgICAgY3Bz ID0gc2hvY3BzKChpbnQpIHBjdCwgZnNpeiwgaG93ZmFyKTsKLSAgICAgICAgICAgIC8qIG9sZF90 ciA9IHNob2V0bChvbGRfdHIsIGNwcywgZnNpeiwgaG93ZmFyKTsgKi8KLSAgICAgICAgICAgIEt1 aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGxvbmcpIENXX0VSUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiVGlt ZW91dCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBlcnJvcnMg PSByZXRyYW5zICsgY3J1bmNoZWQgKyB0aW1lb3V0czsKLSAgICAgICAgICAgIGlmIChlcnJvcnMg IT0gb2xkdHJ5KSB7ICAgICAvKiBFcnJvciBjb3VudCwgaWYgY2hhbmdlZCAqLwotICAgICAgICAg ICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChsb25nKSBDV19QUiwgKGxvbmcpIGVycm9ycwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgb2xkdHJ5ID0gZXJyb3JzOwot ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogICAg ICAgICAgICAgICAgICAgICAgLyogT3RoZXJzLCBkbyBub3RoaW5nICovCi0gICAgICAgICAgICBi cmVhazsKLSAgICAgICAgfQotI2lmZGVmIE9TMgotICAgICAgICBTYXZlQ21kTW9kZSgwLCAwKTsK LSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9TVDog ICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSB0cmFuc2ZlciBzdGF0dXMgKi8KLSAgICAgICAg ZGVidWcoRjEwMSwic2NyZWVuZyBTQ1JfU1QgYyIsIiIsYyk7Ci0gICAgICAgIGRlYnVnKEYxMDEs InNjcmVlbmcgU0NSX1NUIHN1Y2Nlc3MiLCIiLHN1Y2Nlc3MpOwotICAgICAgICBkZWJ1ZyhGMTAx LCJzY3JlZW5nIFNDUl9TVCBjeHNlZW4iLCIiLGN4c2Vlbik7Ci0jaWZkZWYgQ09NTUVOVAotICAg ICAgICBpZiAoYyA9PSBTVF9PSykgeyAgICAgICAgICAgICAgIC8qIE9LLCBwcmludCAxMDAgJSAq LwotICAgICAgICAgICAgaWYgKHBjdGxibCkKLSAgICAgICAgICAgICAgdXBkcGN0KG9sZHBjdCwx MDApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtV SV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRkZDLCAobG9uZykgZmZjKTsKLSAgICAgICAgICAg IHBjdCA9IDEwMDsKLSAgICAgICAgICAgIG9sZHBjdCA9IDA7Ci0gICAgICAgIH0gZWxzZSBpZiAo ZnNpeiA+IDBMKSAgICAgICAgICAgLyogTm90IE9LLCB1cGRhdGUgZmluYWwgcGVyY2VudCAqLwot LyoKLSAgVGhlIGVsc2UgcGFydCB3cml0ZXMgYWxsIG92ZXIgdGhlIHNjcmVlbiAtLSBob3dmYXIg YW5kL29yIGZzaXogaGF2ZQotICBiZWVuIHJlc2V0IGFzIGEgY29uc2VxdWVuY2Ugb2YgdGhlIG5v dC1PS25lc3Mgb2YgdGhlIHRyYW5zZmVyLgotKi8KLSAgICAgICAgICBpZiAocGN0bGJsKQotICAg ICAgICAgICAgdXBkcGN0KG9sZHBjdCwgKGhvd2ZhciAqIDEwMEwpIC8gZnNpeik7Ci0jZWxzZQot ICAgICAgICBpZiAoYyA9PSBTVF9PSykgeyAgICAgICAgICAgICAgIC8qIE9LLCBwcmludCAxMDAg JSAqLwotICAgICAgICAgICAgaWYgKHBjdGxibCkgewotCQl1cGRwY3Qob2xkcGN0LDEwMCk7Ci0J ICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5T RkVSLCAobG9uZykgQ1dfRkZDLCAobG9uZykgZmZjKTsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAg ICAgICBwY3QgPSAxMDA7Ci0gICAgICAgICAgICBvbGRwY3QgPSAwOwotI2VuZGlmIC8qIENPTU1F TlQgKi8KLSAgICAgICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAgICAgICBLdWlTZXRQ cm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19UUiwgKGxvbmcpICIiICk7Ci0K LSAgICAgICAgc3dpdGNoIChjKSB7ICAgICAgICAgICAgICAgICAgICAvKiBQcmludCBuZXcgc3Rh dHVzIG1lc3NhZ2UgKi8KLSAgICAgICAgICBjYXNlIFNUX09LOiAgICAgICAgICAgICAgICAgICAv KiBUcmFuc2ZlciBPSyAqLwotICAgICAgICAgICAgZmNudCsrOyAgICAgICAgICAgICAgICAgICAg IC8qIENvdW50IHRoaXMgZmlsZSAqLwotCSAgICBpZiAod2hhdCA9PSAoV19GVFB8V19GVF9ERUxF KSkgewotICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfTVNHLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIkRlbGV0ZSBPSyIKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKLQkgICAgfSBlbHNlIHsKLQkJZmJ5dCArPSBmZmM7Ci0gICAg ICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19NU0csCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChsb25nKSAiVHJhbnNmZXIgT0siCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7Ci0JICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGNh c2UgU1RfRElTQzogICAgICAgICAgICAgICAgIC8qIERpc2NhcmRlZCAqLwotICAgICAgICAgICAg S3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAobG9uZykgQ1dfRVJSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICJG aWxlIGRpc2NhcmRlZCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jaWZkZWYgQ09N TUVOVAotICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKLSNlbmRpZiAvKiBDT01NRU5UICov Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICBjYXNlIFNUX0lOVDogICAgICAgICAg ICAgICAgICAvKiBJbnRlcnJ1cHRlZCAqLwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJ X0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfRVJS LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICJUcmFuc2ZlciBpbnRlcnJ1cHRl ZCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAg ICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAg ICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSBTVF9TS0lQOiB7ICAgICAgICAgICAgICAgIC8qIFNr aXBwZWQgKi8KLSAgICAgICAgICAgIGNoYXIgZXJyYnVmWzY0XSA7Ci0JICAgIGlmIChuID4gMCAm JiBuIDwgbnNrcmVhc29uKQotICAgICAgICAgICAgICAgIHNwcmludGYoIGVycmJ1ZiwgIkZpbGUg c2tpcHBlZCwgKCVzKSIsIHNrcmVhc29uW25dICkgOwotCSAgICBlbHNlCi0gICAgICAgICAgICAg ICAgc3ByaW50ZiggZXJyYnVmLCAiRmlsZSBza2lwcGVkIiApIDsKLSAgICAgICAgICAgIEt1aVNl dFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg KGxvbmcpIENXX0VSUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBlcnJidWYK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAg ICAgcGN0ID0gb2xkcGN0ID0gMDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICBy ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICBjYXNlIFNUX0VSUjogICAgICAgICAgICAgICAg ICAvKiBFcnJvciBtZXNzYWdlICovCi0gICAgICAgICAgICBpZiAoIXMpIHMgPSAoY2hhciAqKWVw a3Rtc2c7Ci0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChs b25nKSBDV19FUlIsIChsb25nKSBzICk7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgcGN0 ID0gb2xkcGN0ID0gMDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgICAgICByZXR1cm47 Ci0KLSAgICAgICAgICBjYXNlIFNUX1JFRlU6ICAgICAgICAgICAgICAgICAvKiBSZWZ1c2VkICov Ci0gICAgICAgICAgICBpZiAoKnMpIHsKLSAgICAgICAgICAgICAgICBjaGFyIGVycmJ1Zls2NF0g OwotICAgICAgICAgICAgICAgIHNwcmludGYoIGVycmJ1ZiwgIlJlZnVzZWQsICVzIiwgcyApIDsK LSAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwobG9uZykg Q1dfRVJSLChsb25nKSBlcnJidWYpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg ICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwobG9uZylDV19FUlIsKGxvbmcp IlJlZnVzZWQiKTsKLSAgICAgICAgICAgIH0KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICBw Y3QgPSBvbGRwY3QgPSAwOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgIHJldHVy bjsKLQotICAgICAgICAgIGNhc2UgU1RfSU5DOgotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHko S1VJX0ZJTEVfVFJBTlNGRVIsKGxvbmcpQ1dfRVJSLChsb25nKSJJbmNvbXBsZXRlIik7Ci0jaWZk ZWYgQ09NTUVOVAotICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKLSNlbmRpZiAvKiBDT01N RU5UICovCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICBjYXNlIFNUX01TRzoKLSAg ICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLChsb25nKUNXX01TRywo bG9uZylzKTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGRlZmF1bHQ6ICAgICAg ICAgICAgICAgICAgICAgIC8qIEJhZCBjYWxsICovCi0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0 eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19FUlIsCi0gICAgICAgICAgICAgICAgICAg ICAgIChsb25nKSAiKioqIHNjcmVlbigpIGNhbGxlZCB3aXRoIGJhZCBzdGF0dXMgKioqIiApOwot ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgU0NSX1RDOiB7ICAg ICAgICAgICAgICAgICAgICAvKiBUcmFuc2FjdGlvbiBjb21wbGV0ZSAqLwotICAgICAgICAgIGNo YXIgbXNnYnVmWzEyOF07Ci0gICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5T RkVSLCAobG9uZykgQ1dfQ1AsIHRmY3BzKTsKLSAgICAgICAgICBpZiAoc3VjY2VzcykgewotICAg ICAgICAgICAgICBzcHJpbnRmKG1zZ2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAiU1VDQ0VT Uy4gIEZpbGVzOiAlcywgQnl0ZXM6ICVsZCwgJWxkIENQUyIsCi0gICAgICAgICAgICAgICAgICAg ICAgZmlsY250IC0gZmlscmVqLAotICAgICAgICAgICAgICAgICAgICAgIGNrZnN0b2EoZmJ5dCks Ci0gICAgICAgICAgICAgICAgICAgICAgdGZjcHMKLSAgICAgICAgICAgICAgICAgICAgICApOwot ICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX01TRywKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGxvbmcpIG1zZ2J1ZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwot ICAgICAgICAgIH0KLSAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfVFIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgKGxvbmcpIGhobW1zcygobG9uZykKLSNpZmRlZiBHRlRJTUVSCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnB0c2VjcyArIDAuNSkKLSNlbHNlCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c2VjcwotI2VuZGlmIC8qIEdGVElN RVIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpOwotCi0jaWZk ZWYgR0ZUSU1FUgotICAgICAgICAgIG9sZGd0diA9IChDS0ZMT0FUKSAtMS4wOwotI2Vsc2UKLSAg ICAgICAgICBvbGRndHYgPSAtMUw7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotCi0jaWZkZWYgQ09N TUVOVAotICAgICAgICAgIHBjdCA9IDEwMDsgb2xkcGN0ID0gMDsgICAgICAgIC8qIFJlc2V0IHRo ZXNlIGZvciBuZXh0IHRpbWUuICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgIG9s ZHR5cCA9IDA7IG9sZHJ0dCA9IC0xTDsgb2xkdHJ5ID0gLTE7IG9sZGxlbiA9IC0xOwotICAgICAg ICAgIG9sZHRpbSA9IC0xOwotICAgICAgICAgIGNlbmR3ID0gMTsKLSAgICAgICAgICBpZiAoeGZy YmVsKSBibGVlcChCUF9OT1RFKTsgICAvKiBDbG9zZSB3aW5kb3csIHRoZW4gYmVlcC4gKi8KLSAg ICAgICAgICBmdF93aW4gPSAwOyAgICAgICAgICAgICAgICAgICAvKiBXaW5kb3cgY2xvc2VkLiAq LwotICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGNhc2UgU0NSX0VNOiAgICAgICAg ICAgICAgICAgICAgICAvKiBFcnJvciBwYWNrZXQgKGZhdGFsKSAqLwotICAgICAgICBLdWlTZXRQ cm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19FUlIsIChsb25nKSBzICk7Ci0g ICAgICAgIGlmICh4ZnJiZWwpIGJsZWVwKEJQX0ZBSUwpOwotI2lmZGVmIENPTU1FTlQKLSAgICAg ICAgcGN0ID0gb2xkcGN0ID0gMDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIHJldHVy bjsKLQotICAgICAgY2FzZSBTQ1JfUUU6ICAgICAgICAgICAgICAgICAgICAgIC8qIFF1YW50aXR5 IGVxdWFscyAqLwotICAgICAgY2FzZSBTQ1JfVFU6ICAgICAgICAgICAgICAgICAgICAgIC8qIFVu ZGVsaW1pdGVkIHRleHQgKi8KLSAgICAgIGNhc2UgU0NSX1ROOiAgICAgICAgICAgICAgICAgICAg ICAvKiBUZXh0IGRlbGltaXRlZCBhdCBzdGFydCAqLwotICAgICAgY2FzZSBTQ1JfVFo6ICAgICAg ICAgICAgICAgICAgICAgIC8qIFRleHQgZGVsaW1pdGVkIGF0IGVuZCAqLwotICAgICAgICByZXR1 cm47ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChpZ25vcmVkIGluIGZ1bGxzY3JlZW4gZGlz cGxheSkgKi8KLQotICAgICAgY2FzZSBTQ1JfWEQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIFgt cGFja2V0IGRhdGEgKi8KLSAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKLSAgICAgICAgS3VpU2V0 UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfTkFNLCAobG9uZykgcyApOwot ICAgICAgICByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NSX0NXOiAgICAgICAgICAgICAgICAgICAg ICAvKiBDbG9zZSBXaW5kb3cgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIHBjdCA9IDEwMDsg b2xkcGN0ID0gMDsgICAgICAgICAgLyogUmVzZXQgdGhlc2UgZm9yIG5leHQgdGltZS4gKi8KLSNl bmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIG9sZHR5cCA9IDA7IG9sZHJ0dCA9IC0xTDsgb2xk dHJ5ID0gLTE7IG9sZGxlbiA9IC0xOwotICAgICAgICBvbGR0aW0gPSAtMTsKLQotICAgICAgICBm dF93aW4gPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgdGhhdCB3aW5kb3cgaXMgY2xv c2VkLiAqLwotICAgICAgICBjZW5kdyA9IDE7IHJldHVybjsKLQotICAgICAgY2FzZSBTQ1JfQ0Q6 ICAgICAgICAgICAgICAgICAgICAgIC8qIERpc3BsYXkgY3VycmVudCBkaXJlY3RvcnkgKi8KLSAg ICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRElSLCAo bG9uZykgcyApOwotI2lmZGVmIE9TMgotICAgICAgICBTYXZlQ21kTW9kZSgwLCAwKTsKLSNlbmRp ZiAvKiBPUzIgKi8KLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBkZWZhdWx0OiAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQmFkIGNhbGwgKi8KLSAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJ X0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19FUlIsCi0g ICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiKioqIHNjcmVlbigpIGNhbGxlZCB3aXRoIGJh ZCBmdW5jdGlvbiBjb2RlICoqKiIKLSAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAg cmV0dXJuOwotICAgIH0KLX0KLSNlbmRpZiAvKiBLVUkgKi8KLSNlbmRpZiAvKiBNQUMgKi8KLQot I2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZuZGVmIENLX0NVUlBPUwotLyogRHVtbWllcyBmb3Ig d2hlbiBjdXJzb3IgY29udHJvbCBpcyBub3Qgc3VwcG9ydGVkICovCi1pbnQKLWNrX2N1cnBvcyhy b3csIGNvbCkgewotICAgIHJldHVybigtMSk7Ci19Ci0KLWludAotY2tfY2xzKCkgewotICAgIHJl dHVybigtMSk7Ci19Ci0KLWludAotY2tfY2xlb2woKSB7Ci0gICAgcmV0dXJuKC0xKTsKLX0KLSNl bmRpZiAvKiBDS19DVVJQT1MgKi8KLQotI2lmbmRlZiBOT0lLU0QKLSNpZmRlZiBJS1NEQgotCi1z dHJ1Y3QgaWtzZGJmbGQgZGJmbGRbXSA9IHsKLSAgIC8qIE9mZnNldCAgICBMZW5ndGggICAgVHlw ZSAgICovCi0gICAgeyBEQl9GTEFHUywgZEJfRkxBR1MsIERCVF9IRVggfSwgICAgLyogIDAgZGJf RkxBR1MgRmxhZ3MgKi8KLSAgICB7IERCX0FUWVBFLCBkQl9BVFlQRSwgREJUX0hFWCB9LCAgICAv KiAgMSBkYl9BVFlQRSBBdXRoIHR5cGUgKi8KLSAgICB7IERCX0FNT0RFLCBkQl9BTU9ERSwgREJU X0hFWCB9LCAgICAvKiAgMyBkYl9BTU9ERSBBdXRoIG1vZGUgKi8KLSAgICB7IERCX1NUQVRFLCBk Ql9TVEFURSwgREJUX0hFWCB9LCAgICAvKiAgMiBkYl9TVEFURSBTdGF0ZSAqLwotICAgIHsgREJf TVlQSUQsIGRCX01ZUElELCBEQlRfSEVYIH0sICAgIC8qICA1IGRiX01ZUElEIFBJRCAqLwotICAg IHsgREJfU0FERFIsIGRCX1NBRERSLCBEQlRfSEVYIH0sICAgIC8qICA0IGRiX1NBRERSIFNlcnZl ciBhZGRyZXNzICovCi0gICAgeyBEQl9DQUREUiwgZEJfQ0FERFIsIERCVF9IRVggfSwgICAgLyog IDYgZGJfQ0FERFIgQ2xpZW50IGFkZHJlc3MgKi8KLSAgICB7IERCX1NUQVJULCBkQl9TVEFSVCwg REJUX0RBVCB9LCAgICAvKiAgNyBkYl9TVEFSVCBTZXNzaW9uIHN0YXJ0ICovCi0gICAgeyBEQl9M QVNUVSwgZEJfTEFTVFUsIERCVF9EQVQgfSwgICAgLyogIDggZGJfTEFTVFUgTGFzdCB1cGRhdGUg Ki8KLSAgICB7IERCX1VMRU4sICBkQl9VTEVOLCAgREJUX0hFWCB9LCAgICAvKiAgOSBkYl9VTEVO ICBVc2VybmFtZSBsZW5ndGggKi8KLSAgICB7IERCX0RMRU4sICBkQl9ETEVOLCAgREJUX0hFWCB9 LCAgICAvKiAxMCBkYl9ETEVOICBEaXJlY3RvcnkgbmFtZSBsZW5ndGggKi8KLSAgICB7IERCX0lM RU4sICBkQl9JTEVOLCAgREJUX0hFWCB9LCAgICAvKiAxMSBkYl9JTEVOICBJbmZvIGxlbmd0aCAq LwotICAgIHsgREJfUEFEMSwgIGRCX1BBRDEsICBEQlRfVU5EIH0sICAgIC8qIDEyIGRiX1BBRDEg IChSZXNlcnZlZCkgKi8KLSAgICB7IERCX1VTRVIsICBkQl9VU0VSLCAgREJUX1NUUiB9LCAgICAv KiAxMyBkYl9VU0VSICBVc2VybmFtZSAqLwotICAgIHsgREJfRElSLCAgIGRCX0RJUiwgICBEQlRf U1RSIH0sICAgIC8qIDE0IGRiX0RJUiAgIEN1cnJlbnQgRGlyZWN0b3J5ICovCi0gICAgeyBEQl9J TkZPLCAgZEJfSU5GTywgIERCVF9TVFIgfSAgICAgLyogMTUgZGJfSU5GTyAgU3RhdGUtc3BlY2lm aWMgaW5mbyAqLwotfTsKLQotc3RhdGljIGNoYXIgbGNrbmFtW0NLTUFYUEFUSCsxXTsgICAgICAg IC8qIExvY2tmaWxlIHBhdGhuYW1lICovCi1zdGF0aWMgY2hhciB0bXBsY2tbQ0tNQVhQQVRIKzFd OyAgICAgICAgLyogVGVtcG9yYXJ5IGxvY2tmaWxlIG5hbWUgKi8KLQotc3RhdGljIGNoYXIgKiB1 cGRtb2RlID0gICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSBtb2RlIGZvciBmb3BlbigpICovCi0j aWZkZWYgT1MyCi0gICJyK2IiCi0jZWxzZQotI2lmZGVmIFZNUwotICAicitiIgotI2Vsc2UKLSAg InIrIgotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotICA7Ci0KLS8qICBEIEIg SSBOIEkgVCAgLS0gIEluaXRpYWxpemUgdGhlIElLU0QgZGF0YWJhc2UuLi4gICovCi0KLWludAot ZGJpbml0KCkgewotICAgIGV4dGVybiBpbnQgZGJpbml0ZWQ7Ci0gICAgaW50IHggPSAwOwotICAg IGRlYnVnKEYxMTAsImRiaW5pdCBkYmRpciAxIixkYmRpciwwKTsKLSAgICBkZWJ1ZyhGMTEwLCJk YmluaXQgZGJmaWxlIDEiLGRiZmlsZSwwKTsKLSAgICBpZiAoZGJpbml0ZWQpCi0gICAgICByZXR1 cm4oMCk7Ci0jaWZkZWYgT1MyCi0gICAgaWYgKCFkYmRpcikgewotI2lmZGVmIE5UCi0gICAgICAg IGNoYXIgKiBwID0gTlVMTDsKLSAgICAgICAgaWYgKCFpc1dpbjk1KCkpIHsKLSAgICAgICAgICAg IHAgPSBnZXRlbnYoIlN5c3RlbVJvb3QiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg IHAgPSBnZXRlbnYoIndpbmJvb3RkaXIiKTsKLSAgICAgICAgICAgIGlmICghcCkgIHAgPSBnZXRl bnYoIndpbmRpciIpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghcCkgcCA9ICJDOi8iOwotICAg ICAgICBkYmRpciA9IG1hbGxvYyhzdHJsZW4ocCkrMik7Ci0gICAgICAgIHN0cmNweShkYmRpcixw KTsJCS8qIHNhZmUgKi8KLSAgICAgICAgcCA9IGRiZGlyOwotICAgICAgICB3aGlsZSAoKnApIHsK LSAgICAgICAgICAgIGlmICgqcCA9PSAnXFwnKQotICAgICAgICAgICAgICAqcCA9ICcvJzsKLSAg ICAgICAgICAgIHArKzsKLSAgICAgICAgfQotICAgICAgICBpZiAoKihwLTEpICE9ICcvJyApIHsK LSAgICAgICAgICAgICpwKysgPSAnLyc7Ci0gICAgICAgICAgICAqcCA9ICdcMCc7Ci0gICAgICAg IH0KLSNlbHNlIC8qIE5UICovCi0gICAgICAgIG1ha2VzdHIoJmRiZGlyLCJDOi8iKTsKLSNlbmRp ZiAvKiBOVCAqLwotICAgIH0KLSNlbHNlIC8qIE9TMiAqLwotICAgIGlmICghZGJkaXIpCi0gICAg ICBtYWtlc3RyKCZkYmRpcixJS19EQkFTRURJUik7Ci0jZW5kaWYgLyogT1MyICovCi0KLSAgICBp ZiAoIWRiZmlsZSkgewotICAgICAgICBjaGFyICogcyA9ICIiOwotICAgICAgICB4ID0gc3RybGVu KGRiZGlyKTsKLSAgICAgICAgaWYgKGRiZGlyW3gtMV0gIT0gJy8nKSB7Ci0gICAgICAgICAgICBz ID0gIi8iOwotICAgICAgICAgICAgeCsrOwotICAgICAgICB9Ci0gICAgICAgIHggKz0gKGludClz dHJsZW4oSUtfREJBU0VGSUwpOwotICAgICAgICBkYmZpbGUgPSAoY2hhciAqKW1hbGxvYyh4KzEp OwotICAgICAgICBzcHJpbnRmKGRiZmlsZSwiJXMlcyVzIixkYmRpcixzLElLX0RCQVNFRklMKTsK LSAgICB9Ci0gICAgZGVidWcoRjExMCwiZGJpbml0IGRiZGlyIDIiLGRiZGlyLDApOwotICAgIGRl YnVnKEYxMTAsImRiaW5pdCBkYmZpbGUgMiIsZGJmaWxlLDApOwotICAgIG15cGlkID0gZ2V0cGlk KCk7ICAgICAgICAgICAgICAgICAgIC8qIEdldCBteSBwaWQgKi8KLSAgICBkZWJ1ZyhGMTAxLCJk YmluaXQgbXlwaWQiLCIiLG15cGlkKTsKLQotICAgIGlmICghbXloZXhpcFswXSkgeyAgICAgICAg ICAgICAgICAgIC8qIFNldCBteSBoZXggSVAgYWRkcmVzcyAqLwotI2lmZGVmIFRDUFNPQ0tFVAot ICAgICAgICBleHRlcm4gdW5zaWduZWQgbG9uZyBteXhpcGFkZHI7Ci0gICAgICAgIGlmIChnZXRs b2NhbGlwYWRkcigpID4gLTEpIHsKLSAgICAgICAgICAgIG15aXAgPSBteXhpcGFkZHI7Ci0gICAg ICAgICAgICBzcHJpbnRmKG15aGV4aXAsIiUwOGx4IixteWlwKTsgLyogKE5lZWRzIGZpeGluZyBm b3IgSVB2NikgKi8KLSAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0gICAg ICAgICAgY2tzdHJuY3B5KG15aGV4aXAsIjAwMDAwMDAwIiw5KTsKLSAgICB9Ci0gICAgZGVidWco RjExMSwiZGJpbml0IG15aXAiLG15aGV4aXAsbXlpcCk7Ci0gICAgaWYgKCFwZWVyaGV4aXBbMF0p IHsgICAgICAgICAgICAgICAgLyogR2V0IHBlZXIncyAgaGV4IElQIGFkZHJlc3MgKi8KLSNpZmRl ZiBUQ1BTT0NLRVQKLSAgICAgICAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGVlcnhpcGFkZHI7Ci0g ICAgICAgIGlmIChja2dldHBlZXIoKSkgewotICAgICAgICAgICAgcGVlcmlwID0gcGVlcnhpcGFk ZHI7Ci0gICAgICAgICAgICBzcHJpbnRmKHBlZXJoZXhpcCwiJTA4bHgiLHBlZXJpcCk7IC8qIChO ZWVkcyBmaXhpbmcgZm9yIElQdjYpICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJkYmluaXQg cGVlcmlwIixwZWVyaGV4aXAscGVlcmlwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg IGRlYnVnKEYxMDEsImRiaW5pdCBja2dldHBlZXIgZmFpbHVyZSIsIiIsZXJybm8pOwotICAgICAg ICAgICAgY2tzdHJuY3B5KHBlZXJoZXhpcCwiMDAwMDAwMDAiLDkpOwotICAgICAgICB9Ci0jZWxz ZQotICAgICAgICBja3N0cm5jcHkocGVlcmhleGlwLCIwMDAwMDAwMCIsOSk7Ci0jZW5kaWYgLyog VENQU09DS0VUICovCi0gICAgfQotICAgIGRlYnVnKEYxMTEsImRiaW5pdCBwZWVyaXAiLHBlZXJo ZXhpcCxwZWVyaXApOwotICAgIGRlYnVnKEYxMDEsImRiaW5pdCBkYmVuYWJsZWQiLCIiLGRiZW5h YmxlZCk7Ci0gICAgaWYgKGRiZW5hYmxlZCAmJiBpbnNlcnZlcikgewotICAgICAgICBteWRic2xv dCA9IGdldHNsb3QoKTsKLSAgICAgICAgZGVidWcoRjExMSwiZGJpbml0IGdldHNsb3QiLGNraXRv YShpa2Rib3BlbikseCk7Ci0gICAgICAgIGlmIChpa2Rib3BlbikgZGJpbml0ZWQgPSAxOwotICAg IH0KLSAgICByZXR1cm4oMCk7Ci19Ci0KLS8qICBVIFAgRCBTIEwgTyBUICAtLSAgVXBkYXRlIHNs b3QgbiAgKi8KLQotLyoKLSAgT3BlbnMgdGhlIGRhdGFiYXNlIGlmIG5lY2Vzc2FyeSwgc2Vla3Mg dG8gc2xvdCBuLCB3cml0ZXMgY3VycmVudCByZWNvcmQKLSAgYW5kIGFkZHMgY3VycmVudCB0aW1l IHRvIGxhc3QtdXBkYXRlIGZpZWxkLiAgbiBpcyB0aGUgcmVjb3JkIHNlcXVlbmNlIG51bWJlcgot ICAoMCwgMSwgMiwgLi4uKSwgbm90IHRoZSBzZWVrIHBvaW50ZXIuICAgUmV0dXJucyAtMSBvbiBm YWlsdXJlLCAwIG9uIHN1Y2Nlc3MuCi0qLwotaW50Ci11cGRzbG90KG4pIGludCBuOyB7ICAgICAg ICAgICAgICAgICAgICAgLyogVXBkYXRlIG91ciBzbG90ICovCi0gICAgaW50IHJjID0gMDsKLSAg ICBDS19PRkZfVCBwb3NpdGlvbjsKLQotICAgIGRlYnVnKEYxMTEsInVwZHNsb3QiLCJpa2Rib3Bl biIsaWtkYm9wZW4pOwotICAgIGlmICghaWtkYm9wZW4pICAgICAgICAgICAgICAgICAgICAgIC8q IE5vdCBpZiBub3Qgb2sgKi8KLSAgICAgIHJldHVybigwKTsKLSAgICBpZiAoIWRiZnApIHsgICAg ICAgICAgICAgICAgICAgICAgICAvKiBPcGVuIGRhdGFiYXNlIGlmIG5vdCBvcGVuICovCi0gICAg ICAgIGRiZnAgPSBmb3BlbihkYmZpbGUsdXBkbW9kZSk7ICAgLyogSW4gdXBkYXRlIG5vLXRydW5j YXRlIG1vZGUgKi8KLSAgICAgICAgaWYgKCFkYmZwKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTEw LCJ1cGRzbG90IGZvcGVuIGZhaWxlZCIsZGJmaWxlLDApOwotICAgICAgICAgICAgaWtkYm9wZW4g PSAwOwotICAgICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAvKiBk ZWJ1ZyhGMTExLCJ1cGRzbG90IGRiZmlsZSIsZGJmaWxlLGRiZnApOyAqLwotICAgIHBvc2l0aW9u ID0gbiAqIERCX1JFQ0w7Ci0gICAgaWYgKENLRlNFRUsoZGJmcCxwb3NpdGlvbiwwKSA8IDApIHsJ LyogU2VlayB0byBkZXNpcmVkIHNsb3QgKi8KLSAgICAgICAgZGVidWcoRjExMSwidXBkc2xvdCBm c2VlayBmYWlsZWQiLGRiZmlsZSxteWRic2Vlayk7Ci0gICAgICAgIGlrZGJvcGVuID0gMDsKLSAg ICAgICAgcmMgPSAtMTsKLSAgICB9IGVsc2UgewotICAgICAgICAvKiBVcGRhdGUgdGhlIHVwZGF0 ZSB0aW1lICovCi0gICAgICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX0xBU1RVXS5vZmZdLAot ICAgICAgICAgICAgICAgIGNrZGF0ZSgpLAotICAgICAgICAgICAgICAgIGRiZmxkW2RiX0xBU1RV XS5sZW4KLSAgICAgICAgICAgICAgICApOwotICAgICAgICBpZiAoZndyaXRlKGRicmVjLDEsREJf UkVDTCxkYmZwKSA8IERCX1JFQ0wpIHsgLyogV3JpdGUgdGhlIHJlY29yZCAqLwotICAgICAgICAg ICAgZGVidWcoRjExMCwidXBkc2xvdCBmd3JpdGUgZmFpbGVkIixkYmZpbGUsMCk7Ci0gICAgICAg ICAgICBpa2Rib3BlbiA9IDA7Ci0gICAgICAgICAgICByYyA9IC0xOwotICAgICAgICB9IGVsc2Ug eyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsdXNoIHRoZSB3cml0ZSAqLwotICAgICAgICAg ICAgZmZsdXNoKGRiZnApOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybihyYyk7Ci19Ci0K LS8qICBJIE4gSSBUIFMgTCBPIFQgLS0gIEluaXRpYWxpemUgc2xvdCBuIHdpdGggbXkgaW5mbyAg Ki8KLQotaW50Ci1pbml0c2xvdChuKSBpbnQgbjsgeyAgICAgICAgICAgICAgICAgICAgLyogSW5p dGlhbGl6ZSBzbG90ICovCi0gICAgaW50IGs7Ci0jaWZkZWYgVENQU09DS0VUCi0gICAgZXh0ZXJu IHVuc2lnbmVkIGxvbmcgcGVlcnhpcGFkZHI7Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0KLSAg ICBkZWJ1ZyhGMTAxLCJpbml0c2xvdCIsIiIsbik7Ci0KLSNpZmRlZiBVU0VfTUVNQ1BZCi0gICAg bWVtc2V0KGRicmVjLDMyLERCX1JFQ0wpOwotI2Vsc2UKLSAgICBmb3IgKGsgPSAwOyBrIDwgREJf UkVDTDsgaysrKQotICAgICAgZGJyZWNba10gPSAnXDA0MCc7Ci0jZW5kaWYgLyogVVNFX01FTUNQ WSAqLwotCi0gICAgbXlmbGFncyA9IERCRl9JTlVTRTsgICAgICAgICAgICAgICAgLyogU2V0IGlu LXVzZSBmbGFnICovCi0gICAgbXlzdGF0ZSA9IFdfTk9USElORzsKLSAgICBteWF0eXBlID0gMEw7 Ci0gICAgbXlhbW9kZSA9IDBMOwotCi0gICAgayA9IGRiZmxkW2RiX0ZMQUdTXS5sZW47ICAgICAg ICAgICAgLyogTGVuZ3RoIG9mIGZsYWdzIGZpZWxkICovCi0gICAgc3RybmNweSgmZGJyZWNbZGJm bGRbZGJfRkxBR1NdLm9mZl0sdWxvbmd0b2hleChteWZsYWdzLGspLGspOwotCi0gICAgayA9IGRi ZmxkW2RiX0FUWVBFXS5sZW47Ci0gICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJfQVRZUEVdLm9m Zl0sdWxvbmd0b2hleChteWF0eXBlLGspLGspOwotCi0gICAgayA9IGRiZmxkW2RiX0FNT0RFXS5s ZW47Ci0gICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJfQU1PREVdLm9mZl0sdWxvbmd0b2hleCht eWFtb2RlLGspLGspOwotCi0gICAgayA9IGRiZmxkW2RiX1NUQVRFXS5sZW47Ci0gICAgc3RybmNw eSgmZGJyZWNbZGJmbGRbZGJfU1RBVEVdLm9mZl0sdWxvbmd0b2hleChteXN0YXRlLGspLGspOwot Ci0gICAgayA9IGRiZmxkW2RiX1NBRERSXS5sZW47Ci0gICAgc3RybmNweSgmZGJyZWNbZGJmbGRb ZGJfU0FERFJdLm9mZl0sdWxvbmd0b2hleChteWlwLGspLGspOwotCi0jaWZkZWYgVENQU09DS0VU Ci0gICAgY2tnZXRwZWVyKCk7Ci0gICAgayA9IGRiZmxkW2RiX0NBRERSXS5sZW47Ci0gICAgc3Ry bmNweSgmZGJyZWNbZGJmbGRbZGJfQ0FERFJdLm9mZl0sdWxvbmd0b2hleChwZWVyeGlwYWRkcixr KSxrKTsKLSNlbHNlCi0gICAgayA9IGRiZmxkW2RiX0NBRERSXS5sZW47Ci0gICAgc3RybmNweSgm ZGJyZWNbZGJmbGRbZGJfQ0FERFJdLm9mZl0sdWxvbmd0b2hleCgwTCxrKSxrKTsKLSNlbmRpZiAv KiBUQ1BTT0NLRVQgKi8KLQotICAgIGsgPSBkYmZsZFtkYl9NWVBJRF0ubGVuOwotICAgIHN0cm5j cHkoJmRicmVjW2RiZmxkW2RiX01ZUElEXS5vZmZdLHVsb25ndG9oZXgobXlwaWQsayksayk7Ci0K LSAgICBrID0gZGJmbGRbZGJfU1RBUlRdLmxlbjsKLSAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtk Yl9TVEFSVF0ub2ZmXSxja2RhdGUoKSxrKTsKLQotICAgIGsgPSBkYmZsZFtkYl9VTEVOXS5sZW47 Ci0gICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJfVUxFTl0ub2ZmXSwiMDAwMCIsNCk7Ci0KLSAg ICBrID0gZGJmbGRbZGJfRExFTl0ubGVuOwotICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX0RM RU5dLm9mZl0sIjAwMDAiLDQpOwotCi0gICAgayA9IGRiZmxkW2RiX0lMRU5dLmxlbjsKLSAgICBz dHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9JTEVOXS5vZmZdLCIwMDAwIiw0KTsKLQotICAgIHN0cm5j cHkoJmRicmVjW2RiZmxkW2RiX0lORk9dLm9mZl0sIklOSVQiLDQpOwotICAgIHJldHVybih1cGRz bG90KG4pKTsKLX0KLQotaW50Ci1zbG90c3RhdGUoeCxzMSxzMixzMykgaW50IHg7IGNoYXIgKnMx LCAqczIsICpzMzsgewotICAgIGludCBrLCBsMSwgbDIsIGwzLCB6OwotICAgIG15c3RhdGUgPSB4 OwotICAgIGRlYnVnKEYxMDEsInNsb3RzdGF0ZSBpa2Rib3BlbiIsIiIsaWtkYm9wZW4pOwotICAg IGlmICghaWtkYm9wZW4pCi0gICAgICByZXR1cm4oLTEpOwotICAgIGlmICghczEpIHMxID0gIiI7 Ci0gICAgbDEgPSBzdHJsZW4oczEpOwotICAgIGlmICghczIpIHMyID0gIiI7Ci0gICAgbDIgPSBz dHJsZW4oczIpOwotICAgIGlmICghczMpIHMzID0gIiI7Ci0gICAgbDMgPSBzdHJsZW4oczMpOwot ICAgIHN0cm5jcHkoJmRicmVjW0RCX1NUQVRFXSx1bG9uZ3RvaGV4KG15c3RhdGUsNCksNCk7Ci0g ICAgayA9IGRiZmxkW2RiX0lMRU5dLmxlbjsKLSAgICB6ID0gbDEgKyBsMiArIGwzICsgMjsKLSAg ICBpZiAoeiA+IGRCX0lORk8pCi0gICAgICB6ID0gZEJfSU5GTzsKLSAgICBzdHJuY3B5KCZkYnJl Y1tEQl9JTEVOXSx1bG9uZ3RvaGV4KCh1bnNpZ25lZCBsb25nKXosayksayk7Ci0gICAgayA9IGRi ZmxkW2RiX0lORk9dLmxlbjsKLSAgICB6ID0gZGJmbGRbZGJfSU5GT10ub2ZmOwotICAgIGlmIChs MSA8PSBrKSB7Ci0gICAgICAgIGxzZXQoJmRicmVjW3pdLHMxLGwxKzEsMzIpOwotICAgICAgICB6 ICs9IGwxKzE7Ci0gICAgICAgIGsgLT0gbDErMTsKLSAgICAgICAgaWYgKGwyIDw9IGspIHsKLSAg ICAgICAgICAgIGxzZXQoJmRicmVjW3pdLHMyLGwyKzEsMzIpOwotICAgICAgICAgICAgeiArPSBs MisxOwotICAgICAgICAgICAgayAtPSBsMisxOwotICAgICAgICAgICAgaWYgKGwzIDw9IGspCi0g ICAgICAgICAgICAgIGxzZXQoJmRicmVjW3pdLHMzLGssMzIpOwotICAgICAgICB9Ci0gICAgfQot I2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewotICAgICAgICBjaGFyIGJ1ZlsxMjhdOwot ICAgICAgICBpbnQgaTsKLSAgICAgICAgc3RybmNweShidWYsJmRicmVjW0RCX0lORk9dLDEyNyk7 Ci0gICAgICAgIGJ1ZlsxMjddID0gTlVMOwotICAgICAgICBmb3IgKGkgPSAxMjY7IGkgPiAwICYm IGJ1ZltpXSA9PSAzMjsgaS0tKSBidWZbaV0gPSAwOwotICAgICAgICBkZWJ1ZyhGMTExLCJzbG90 c3RhdGUiLGJ1ZixteXN0YXRlKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICB6ID0g dXBkc2xvdChteWRic2xvdCk7Ci0gICAgZGVidWcoRjEwMSwic2xvdHN0YXRlIHVwZHNsb3QiLCIi LHopOwotICAgIHJldHVybih6KTsKLX0KLQotaW50Ci1zbG90ZGlyKHMxLHMyKSBjaGFyICogczEs ICogczI7IHsgICAgICAgLyogVXBkYXRlIGN1cnJlbnQgZGlyZWN0b3J5ICovCi0gICAgaW50IGss IGxlbjEsIGxlbjI7Ci0gICAgaWYgKCFpa2Rib3BlbikKLSAgICAgIHJldHVybigtMSk7Ci0gICAg aWYgKCFzMSkgczEgPSAiIjsKLSAgICBpZiAoIXMyKSBzMiA9ICIiOwotICAgIGxlbjEgPSBzdHJs ZW4oczEpOwotICAgIGxlbjIgPSBzdHJsZW4oczIpOwotICAgIGsgPSBkYmZsZFtkYl9ETEVOXS5s ZW47Ci0gICAgc3RybmNweSgmZGJyZWNbREJfRExFTl0sdWxvbmd0b2hleCgodW5zaWduZWQgbG9u ZykobGVuMStsZW4yKSxrKSxrKTsKLSAgICBrID0gZGJmbGRbZGJfRElSXS5sZW47Ci0gICAgaWYg KGxlbjEgPiAwKSB7Ci0gICAgICAgIGxzZXQoJmRicmVjW2RiZmxkW2RiX0RJUl0ub2ZmXSxzMSxs ZW4xLDMyKTsKLSAgICAgICAgbHNldCgmZGJyZWNbZGJmbGRbZGJfRElSXS5vZmYrbGVuMV0sczIs ay1sZW4xLDMyKTsKLSAgICB9IGVsc2UgewotICAgICAgICBsc2V0KCZkYnJlY1tkYmZsZFtkYl9E SVJdLm9mZl0sczIsaywzMik7Ci0gICAgfQotICAgIHJldHVybih1cGRzbG90KG15ZGJzbG90KSk7 Ci19Ci0KLS8qICBGIFIgRSBFIFMgTCBPIFQgIC0tICBGcmVlIHNsb3QgbiAgKi8KLQotaW50Ci1m cmVlc2xvdChuKSBpbnQgbjsgewotICAgIGludCBrOwotICAgIGlmICghaWtkYm9wZW4pCi0gICAg ICByZXR1cm4oMCk7Ci0gICAgZGJmbGFncyA9IDBMOwotICAgIGlmIChuID09IG15ZGJzbG90KSB7 Ci0gICAgICAgIGRiZmxhZ3MgPSBteWZsYWdzICYgfkRCRl9JTlVTRTsKLSAgICAgICAgZGJmbGFn cyAmPSB+REJGX0xPR0dFRDsKLSAgICB9Ci0gICAgayA9IGRiZmxkW2RiX0ZMQUdTXS5sZW47Ci0g ICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJfRkxBR1NdLm9mZl0sdWxvbmd0b2hleChkYmZsYWdz LGspLGspOwotICAgIHJldHVybih1cGRzbG90KG4pKTsKLX0KLQotLyogIEcgRSBUIFMgTCBPIFQg IC0tICBGaW5kIGEgZnJlZSBkYXRhYmFzZSBzbG90OyByZXR1cm5zIHNsb3QgbnVtYmVyICAqLwot Ci0jaWZkZWYgVU5JWAotI2luY2x1ZGUgPGZjbnRsLmg+CQkJLyogRm9yIGNyZWF0KCkgKi8KLSNl bmRpZgkvKiBVTklYICovCi0KLWludAotZ2V0c2xvdCgpIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEZpbmQgYSBmcmVlIHNsb3QgZm9yIHVzICovCi0gICAgRklMRSAqIHJmcCA9IE5V TEw7ICAgICAgICAgICAgICAgICAgLyogUmV0dXJucyBzbG90IG51bWJlciAoMCwgMSwgLi4uKSAq LwotICAgIGNoYXIgaWRzdHJpbmdbNjRdOyAgICAgICAgICAgICAgICAgIC8qIFBJRCBzdHJpbmcg YnVmZmVyIChkZWNpbWFsKSAqLwotICAgIGNoYXIgcGlkYnVmWzY0XSwgKiBzOwotICAgIGludCBq LCBrLCBuLCB4LCByYyA9IC0xOwotICAgIGludCBsb2NrZmQsIHRyaWVzLCBoYXZlc2xvdCA9IDA7 Ci0gICAgbG9uZyBsb2NrcGlkOwotICAgIENLX09GRl9UIGk7Ci0gICAgLyogY2hhciBpcGJ1Zlsx N107ICovCi0KLSAgICBpZiAoIW15aGV4aXBbMF0pICAgICAgICAgICAgICAgICAgICAvKiBTZXQg bXkgaGV4IElQIGFkZHJlc3MgaWYgbm90IHNldCAqLwotICAgICAgY2tzdHJuY3B5KChjaGFyICop bXloZXhpcCwiN0YwMDAwMDEiLDMzKTsKLSAgICBzcHJpbnRmKGlkc3RyaW5nLCIlMDhseDolMDEw bGRcbiIsbXlpcCxteXBpZCk7Ci0gICAgZGVidWcoRjExMCwiZ2V0c2xvdCBpZHN0cmluZyIsIGlk c3RyaW5nLCAwKTsKLQotICAgIC8qIE1ha2UgdGVtcG9yYXJ5IGxvY2tmaWxlIG5hbWUgSVAuUElE IChoZXguaGV4KSAqLwotICAgIC8qIFRoaXMgc2hvdWxkIGZpdCBpbiAxNCBjaGFycyAtLSBodWdl IFBJRHMgYXJlIHVzdWFsbHkgbm90IHBvc3NpYmxlICovCi0gICAgLyogb24gMTQtY2hhciBmaWxl bmFtZSBzeXN0ZW1zLiAqLwotCi0gICAgc3ByaW50Zih0bXBsY2ssIiVzJTA4bHguJWx4IixkYmRp cixteWlwLG15cGlkKTsKLSAgICBkZWJ1ZyhGMTEwLCJnZXRzbG90IHRlbXBmaWxlIix0bXBsY2ss MCk7Ci0KLSAgICAvKiBNYWtlIGEgdGVtcG9yYXJ5IGZpbGUgKi8KLQotICAgIGxvY2tmZCA9IGNy ZWF0KHRtcGxjaywgMDYwMCk7CS8qIEJVVCBUSElTIElTTidUIFBPUlRBQkxFICovCi0gICAgaWYg KGxvY2tmZCA8IDApIHsKLSAgICAgICAgZGVidWcoRjExMSwiZ2V0c2xvY2sgdGVtcCBsb2NrZmls ZSBjcmVhdGUgZmFpbHVyZSIsIHRtcGxjaywgZXJybm8pOwotICAgICAgICByZXR1cm4oLTEpOwot ICAgIH0KLSAgICAvKiBXcml0ZSBteSAoZGVjaW1hbCkgUElEIGludG8gdGhlIHRlbXAgZmlsZSAq LwotCi0gICAgd3JpdGUobG9ja2ZkLGlkc3RyaW5nLChpbnQpc3RybGVuKGlkc3RyaW5nKSk7Ci0g ICAgaWYgKGNsb3NlKGxvY2tmZCkgPCAwKSB7ICAgICAgICAgICAgLyogQ2xvc2UgbG9ja2ZpbGUg Ki8KLSAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBlcnJvciBjbG9zaW5nIHRlbXAgbG9ja2Zp bGUiLCAiIiwgZXJybm8pOwotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICBzcHJpbnRm KGxja25hbSwiJXMlcyIsZGJkaXIsSUtfTE9DS0ZJTEUpOyAvKiBCdWlsZCBsb2NrZmlsZSBuYW1l ICovCi0gICAgZGVidWcoRjExMCwiZ2V0c2xvdCBsb2NrZmlsZSIsbGNrbmFtLDApOwotCi0gICAg cmZwID0gZm9wZW4obGNrbmFtLCJyIik7ICAgICAgICAgICAgLyogU2VlIGlmIGxvY2tmaWxlIGV4 aXN0cyAqLwotICAgIGlmIChyZnApIHsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHNv Li4uICovCi0gICAgICAgIHJzZXQocGlkYnVmLCIiLDY0LDApOwotICAgICAgICB4ID0gZnJlYWQo cGlkYnVmLDEsNjMscmZwKTsgICAgIC8qIFJlYWQgSUQgc3RyaW5nIGZyb20gaXQgKi8KLSAgICAg ICAgZmNsb3NlKHJmcCk7ICAgICAgICAgICAgICAgICAgICAvKiBhbmQgY2xvc2UgaXQgcXVpY2ts eSAqLwotICAgICAgICBkZWJ1ZyhGMTEwLCJnZXRzbG90IGxvY2sgZXhpc3RzIixwaWRidWYsMCk7 Ci0gICAgICAgIGlmICh4ID4gMCkgeyAgICAgICAgICAgICAgICAgICAgLyogSWYgd2UgaGF2ZSBh IFBJRCwgY2hlY2sgaXQgKi8KLSAgICAgICAgICAgIGNoYXIgKiBzID0gcGlkYnVmOwotICAgICAg ICAgICAgd2hpbGUgKCpzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzbG93ZXIoKnMpKSAqcyA9 IHRvdXBwZXIoKnMpOwotICAgICAgICAgICAgICAgIGlmICgqcyA9PSAnOicpIHsKLSAgICAgICAg ICAgICAgICAgICAgKnMgPSBOVUw7Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImdl dHNsb3QgbG9jayBJUCIscGlkYnVmLDApOwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEw LCJndGVzbG90IG15ICAgSVAiLG15aGV4aXAsMCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh c3RyY21wKHBpZGJ1ZixteWhleGlwKSkgeyAvKiBTYW1lIElQIGFkZHJlc3M/ICovCi0gICAgICAg ICAgICAgICAgICAgICAgICBsb2NrcGlkID0gYXRvbChzKzEpOyAvKiBZZXMsIG5vdyBnZXQgUElE ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IGxvY2twaWQi LCIiLGxvY2twaWQpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBpZiBQSUQg bG9ja3BpZCBvbiB0aGlzIGNvbXB1dGVyIGlzIGFsaXZlICovCi0gICAgICAgICAgICAgICAgICAg ICAgICB4ID0gemNoa3BpZChsb2NrcGlkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh eCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsImdldHNsb3QgUElE IHN0YWxlLHJlbW92aW5nIGxvY2siLCIiLDApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVubGluayhsY2tuYW0pOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgcysrOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgZGVidWcoRjExMSwiZ2V0c2xvdCBsb2NrZmlsZSBvcGVuIGZhaWx1cmUi LGxja25hbSxlcnJubyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLyogVHJ5IElLX0xDS1RSSUVT ICgxNikgdGltZXMgdG8gcmVuYW1lIHRlbXAgZmlsZSB0byBsb2NrZmlsZSAqLwotCi0gICAgZm9y ICh0cmllcyA9IElLX0xDS1RSSUVTOyB0cmllcyA+IDA7IHRyaWVzLS0pIHsKLSAgICAgICAgaWYg KHpyZW5hbWUodG1wbGNrLGxja25hbSkgPT0gMCkKLSAgICAgICAgICBicmVhazsKLSAgICAgICAg ZGVidWcoRjEwMSwiZ2V0c2xvdCBkYXRhYmFzZSBsb2NrZWQgYnkgcGlkIiwgIiIsIGRicGlkKTsK LSAgICAgICAgc2xlZXAoSUtfTENLU0xFRVApOwotICAgIH0KLSAgICBpZiAodHJpZXMgPCAxKSB7 ICAgICAgICAgICAgICAgICAgICAvKiBDb3VsZG4ndCAqLwotICAgICAgICBkZWJ1ZyhGMTEwLCJn ZXRzbG90IGNyZWF0ZSBsb2NrIGZhaWx1cmUiLGxja25hbSwwKTsKLSAgICAgICAgcmV0dXJuKC0x KTsKLSAgICB9Ci0gICAgLyogSGF2ZSBsb2NrLCBvcGVuIGRhdGFiYXNlICovCi0KLSAgICBkZWJ1 ZyhGMTEwLCJnZXRzbG90IGhhcyBsb2NrIixsY2tuYW0sMCk7IC8qIEhhdmUgbG9jayAqLwotCi0g ICAgaWYgKCFkYmZpbGUpCi0gICAgICByZXR1cm4oLTEpOwotCi0gICAgLyogSWYgZGF0YWJhc2Ug ZG9lc24ndCBleGlzdCwgY3JlYXRlIGl0LiAqLwotCi0gICAgZGVidWcoRjExMCwiZ2V0c2xvdCBk YmZpbGUiLGRiZmlsZSwwKTsKLSAgICBpZiAoemNoa2koZGJmaWxlKSA8IDApIHsKLSAgICAgICAg ZGVidWcoRjExMCwiZ2V0c2xvdCBjcmVhdGluZyBuZXcgZGF0YWJhc2UiLGRiZmlsZSwwKTsKLSAg ICAgICAgeCA9IGNyZWF0KGRiZmlsZSwwNjYwKTsKLSAgICAgICAgaWYgKHggPCAwKSB7Ci0gICAg ICAgICAgICBkZWJ1ZyhGMTExLCJnZXRzbG90IGNyZWF0KCkgZmFpbGVkIiwgZGJmaWxlLCBlcnJu byk7Ci0gICAgICAgICAgICBnb3RvIHhzbG90OwotICAgICAgICB9Ci0gICAgICAgIGNsb3NlKHgp OwotICAgIH0KLSAgICBkYmZwID0gZm9wZW4oZGJmaWxlLHVwZG1vZGUpOyAgICAgICAvKiBPcGVu IGl0IGluIHVwZGF0ZSBtb2RlICovCi0gICAgaWYgKCFkYmZwKSB7Ci0gICAgICAgIGRlYnVnKEYx MTEsImdldHNsb3QgZm9wZW4gZmFpbGVkIixkYmZpbGUsZXJybm8pOwotICAgICAgICBnb3RvIHhz bG90OwotICAgIH0KLSAgICAvKiBOb3cgZmluZCBhIGZyZWUgKG9yIG5ldykgc2xvdC4uLiAqLwot Ci0gICAgZGJsYXN0dXNlZCA9IDBMOyAgICAgICAgICAgICAgICAgICAgLyogU2VlayBwb2ludGVy IHRvIGxhc3QgcmVjb3JkIGludXNlICovCi0gICAgbXlkYnNlZWsgPSAwTDsgICAgICAgICAgICAg ICAgICAgICAgLyogU2VlayBwb2ludGVyIGZvciBteSByZWNvcmQgKi8KLQotICAgIC8qIFF1aWNr bHkgcmVhZCB0aGUgd2hvbGUgZGF0YWJhc2U7IG4gPSByZWNvcmQgY291bnRlciwgaSA9IHNlZWsg cG9pbnRlciAqLwotCi0gICAgZm9yIChuID0gMCwgaSA9IDA7ICFmZW9mKGRiZnApOyBpICs9IERC X1JFQ0wsIG4rKykgewotICAgICAgICB4ID0gZnJlYWQoZGJyZWMsMSxEQl9SRUNMLGRiZnApOyAv KiBSZWFkIGEgcmVjb3JkICovCi0gICAgICAgIGlmICh4IDwgMSkgICAgICAgICAgICAgICAgICAg ICAgLyogRU9GIG5vdCBjYXVnaHQgYnkgZmVvZigpICovCi0gICAgICAgICAgYnJlYWs7Ci0jaWZu ZGVmIE5PRlRSVU5DQVRFCi0gICAgICAgIGlmICh4ICE9IERCX1JFQ0wpIHsgICAgICAgICAgICAg LyogV2F0Y2ggb3V0IGZvciB0cmFpbGluZyBqdW5rICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTAx LCJnZXRzbG90IGJhZCBzaXplIiwiIix4KTsgIC8qIChTaG91bGRuJ3QgaGFwcGVuLi4uKSAqLwot I2lmZGVmIENPSEVSRU5UCi0gICAgICAgICAgICBjaHNpemUoZmlsZW5vKGRiZnApLGkpOwotI2Vs c2UKLSAgICAgICAgICAgIGZ0cnVuY2F0ZShmaWxlbm8oZGJmcCksKENLX09GRl9UKWkpOwotI2Vu ZGlmIC8qIENPSEVSRU5UICovCi0gICAgICAgICAgICB4ID0gMDsKLSAgICAgICAgICAgIENLRlNF RUsoZGJmcCxpLDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBO T0ZUUlVOQ0FURSAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IHJlY29yZCIsIiIsbik7 Ci0gICAgICAgIGsgPSBkYmZsZFtkYl9GTEFHU10ub2ZmOwotICAgICAgICBqID0gZGJmbGRbZGJf RkxBR1NdLmxlbjsKLSAgICAgICAgZGJmbGFncyA9IGhleHRvdWxvbmcoJmRicmVjW2tdLGopOwot ICAgICAgICBkZWJ1ZyhGMDAxLCJnZXRzbG90IGRiZmxhZ3MiLCIiLGRiZmxhZ3MpOwotICAgICAg ICBrID0gZGJmbGRbZGJfTVlQSURdLm9mZjsKLSAgICAgICAgaiA9IGRiZmxkW2RiX01ZUElEXS5s ZW47Ci0gICAgICAgIGRicGlkICA9IGhleHRvdWxvbmcoJmRicmVjW2tdLGopOwotICAgICAgICBk ZWJ1ZyhGMDAxLCJnZXRzbG90IGRicGlkIiwiIixkYnBpZCk7Ci0gICAgICAgIGsgPSBkYmZsZFtk Yl9TQUREUl0ub2ZmOwotICAgICAgICBqID0gZGJmbGRbZGJfU0FERFJdLmxlbjsKLSAgICAgICAg ZGJpcCA9IGhleHRvdWxvbmcoJmRicmVjW2tdLGopOwotICAgICAgICBkZWJ1ZyhGMDAxLCJnZXRz bG90IGRiaXAiLCIiLGRiaXApOwotCi0gICAgICAgIGlmIChkYmZsYWdzICYgREJGX0lOVVNFKSB7 ICAgICAgLyogUmVtZW1iZXIgbGFzdCBzbG90IGluIHVzZSAqLwotICAgICAgICAgICAgeCA9IDA7 ICAgICAgICAgICAgICAgICAgICAgIC8qIE1ha2Ugc3VyZSBpdCdzIFJFQUxMWSBpbiB1c2UgKi8K LSAgICAgICAgICAgIGlmIChkYnBpZCA9PSBteXBpZCAmJiBkYmlwID09IG15aXApIHsgLyogQ2hl Y2sgZm9yIFBJRCA9PSBteSBQSUQgKi8KLSAgICAgICAgICAgICAgICB4ID0gMTsKLSAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IHJlY29yZCBwaWQiLCIiLGRicGlkKTsKLSAgICAg ICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiBPciBmb3Igc3RhbGUgUElEICov Ci0gICAgICAgICAgICAgICAgeCA9IHpjaGtwaWQoZGJwaWQpOwotICAgICAgICAgICAgICAgIGRl YnVnKEYxMDEsImdldHNsb3QgemNoa3BpZCgpIiwiIix4KTsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIGlmICgheCkgeyAgICAgICAgICAgICAgICAgICAvKiBCb2d1cyByZWNvcmQgKi8KLSAg ICAgICAgICAgICAgICB4ID0gZnJlZXNsb3Qobik7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEw MSwiZ2V0c2xvdCBzdGFsZSByZWNvcmQgcGlkOiBmcmVlc2xvdCgpIiwiIix4KTsKLSAgICAgICAg ICAgICAgICBpZiAoeCA+IC0xICYmICFoYXZlc2xvdCkKLSAgICAgICAgICAgICAgICAgIGRiZmxh Z3MgPSAwOwotICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIEl0J3Mg cmVhbGx5IGluIHVzZSAqLwotICAgICAgICAgICAgICAgIGRibGFzdHVzZWQgPSBpOwotICAgICAg ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICghaGF2ZXNsb3QpIHsgICAgICAgICAgICAg ICAgLyogSWYgSSBkb24ndCBoYXZlIGEgc2xvdCB5ZXQgKi8KLSAgICAgICAgICAgIGlmICghKGRi ZmxhZ3MgJiBEQkZfSU5VU0UpKSB7ICAgICAgIC8qIENsYWltIHRoaXMgb25lICovCi0gICAgICAg ICAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBmcmVlIHNsb3QiLCAiIiwgbik7Ci0gICAgICAg ICAgICAgICAgaGF2ZXNsb3QgPSAxOwotICAgICAgICAgICAgICAgIG15ZGJzZWVrID0gaTsKLSAg ICAgICAgICAgICAgICBteWRic2xvdCA9IG47ICAgICAgICAgICAvKiBCdXQga2VlcCBnb2luZy4u LiAqLwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIC8qIENvbWUgaGVyZSB3 aXRoIGkgPT0gc2VlayBwb2ludGVyIHRvIGZpcnN0IHJlY29yZCBhZnRlciBlb2YgKi8KLQotICAg IGlmICghaGF2ZXNsb3QpIHsgICAgICAgICAgICAgICAgICAgIC8qIEZvdW5kIG5vIGZyZWUgc2xv dCBzbyBhZGQgdG8gZW5kICovCi0gICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgbmV3IHNsb3Qi LCIiLG4pOwotICAgICAgICBoYXZlc2xvdCA9IDE7Ci0gICAgICAgIG15ZGJzZWVrID0gaTsKLSAg ICAgICAgbXlkYnNsb3QgPSBuOwotICAgIH0KLSAgICBpa2Rib3BlbiA9IDE7ICAgICAgICAgICAg ICAgICAgICAgICAvKiBPSyB0byBtYWtlIGRhdGFiYXNlIGVudHJpZXMgKi8KLSAgICBkZWJ1ZyhG MTAxLCJnZXRzbG90IHJlY29yZHMiLCIiLG4pOwotICAgIGRlYnVnKEYxMDEsImdldHNsb3QgZGJs YXN0dXNlZCIsIiIsZGJsYXN0dXNlZCk7Ci0gICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBpIiwiIixp KTsKLQotICAgIC8qIFRyaW0gc3RhbGUgcmVjb3JkcyBmcm9tIGVuZCAqLwotCi0jaWZuZGVmIE5P RlRSVU5DQVRFCi0gICAgaWYgKGkgPiBkYmxhc3R1c2VkK0RCX1JFQ0wpIHsKLSAgICAgICAgZGVi dWcoRjEwMSwiZ2V0c2xvdCB0cnVuY2F0aW5nIGF0IiwiIixkYmxhc3R1c2VkK0RCX1JFQ0wpOwot I2lmZGVmIENPSEVSRU5UCi0gICAgICAgIHggPSBjaHNpemUoZmlsZW5vKGRiZnApLGRibGFzdHVz ZWQrREJfUkVDTCk7Ci0jZWxzZQotICAgICAgICB4ID0gZnRydW5jYXRlKGZpbGVubyhkYmZwKSwo Q0tfT0ZGX1QpKGRibGFzdHVzZWQrREJfUkVDTCkpOwotI2VuZGlmIC8qIENPSEVSRU5UICovCi0g ICAgICAgIGlmICh4IDwgMCkgICAgICAgICAgICAgICAgICAgICAgLyogKE5vdCBmYXRhbCkgKi8K LSAgICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IGZ0cnVuY2F0ZSBmYWlsZWQiLCAiIiwgZXJy bm8pOwotICAgIH0KLSNlbmRpZiAvKiBOT0ZUUlVOQ0FURSAqLwotCi0gICAgLyogSW5pdGlhbGl6 ZSBteSByZWNvcmQgKi8KLQotICAgIGlmIChpbml0c2xvdChteWRic2xvdCkgPCAwKSB7Ci0gICAg ICAgIGRlYnVnKEYxMDEsImdldHNsb3QgaW5pdHNsb3QoKSBlcnJvciIsIiIsbik7Ci0gICAgICAg IGlrZGJvcGVuID0gMDsKLSAgICAgICAgZ290byB4c2xvdDsKLSAgICB9Ci0gICAgZGVidWcoRjEw MSwiZ2V0c2xvdCBPSyIsIiIsbXlkYnNsb3QpOwotICAgIHJjID0gbXlkYnNsb3Q7ICAgICAgICAg ICAgICAgICAgICAgIC8qIE9LIHJldHVybiBjb2RlICovCi0KLSAgeHNsb3Q6ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBVbmxvY2sgdGhlIGRhdGFiYXNlIGFuZCByZXR1cm4gKi8K LSAgICBpZiAodW5saW5rKGxja25hbSkgPCAwKSB7Ci0gICAgICAgIGRlYnVnKEYxMTEsImdldHNs b3QgbG9ja2ZpbGUgcmVtb3ZhbCBmYWlsZWQiLGxja25hbSxlcnJubyk7Ci0gICAgICAgIHJjID0g LTE7Ci0gICAgfQotICAgIHJldHVybihyYyk7Ci19Ci0jZW5kaWYgLyogSUtTREIgKi8KLSNlbmRp ZiAvKiBOT0lLU0QgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1p dC05LjAuMzAyL2NrdXVzeC5jLnByaW50dyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0 LTkuMC4zMDIvY2t1dXN4LmMucHJpbnR3CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBk MzMyYmVkLi4wMDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4z MDIvY2t1dXN4LmMucHJpbnR3CisrKyAvZGV2L251bGwKQEAgLTEsOTcxOCArMCwwIEBACi0jaW5j bHVkZSAiY2tjc3ltLmgiCi0KLS8qICBDIEsgVSBVIFMgWCAtLSAgIlVzZXIgSW50ZXJmYWNlIiBj b21tb24gZnVuY3Rpb25zLiAqLwotCi0vKgotICBBdXRob3JzOgotICAgIEZyYW5rIGRhIENydXog PGZkY0Bjb2x1bWJpYS5lZHU+LAotICAgICAgVGhlIEtlcm1pdCBQcm9qZWN0LCBDb2x1bWJpYSBV bml2ZXJzaXR5LCBOZXcgWW9yayBDaXR5Ci0gICAgSmVmZnJleSBFIEFsdG1hbiA8amFsdG1hbkBz ZWN1cmUtZW5kcG9pbnRzLmNvbT4KLSAgICAgIFNlY3VyZSBFbmRwb2ludHMgSW5jLiwgTmV3IFlv cmsgQ2l0eQotCi0gIENvcHlyaWdodCAoQykgMTk4NSwgMjAxMSwKLSAgICBUcnVzdGVlcyBvZiBD b2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgotICAgIEFsbCByaWdo dHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCi0g ICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBh bmQgcGVybWlzc2lvbnMuCi0qLwotCi0vKgotICBUaGlzIG1vZHVsZSBjb250YWlucyB1c2VyIGlu dGVyZmFjZSBmdW5jdGlvbnMgbmVlZGVkIGJ5IGJvdGggdGhlIGludGVyYWN0aXZlCi0gIHVzZXIg aW50ZXJmYWNlIGFuZCB0aGUgY29tbWFuZC1saW5lLW9ubHkgdXNlciBpbnRlcmZhY2UsIGFzIHdl bGwgYXMgdGhlCi0gIHNjcmVlbi1jb250cm9sIHJvdXRpbmVzIChjdXJzZXMgYW5kIGVxdWl2YWxl bnQpLgotKi8KLQotLyogSW5jbHVkZXMgKi8KLQotI2luY2x1ZGUgImNrY2RlYi5oIgotI2luY2x1 ZGUgImNrY2FzYy5oIgotI2luY2x1ZGUgImNrY2tlci5oIgotI2luY2x1ZGUgImNrdXVzci5oIgot I2luY2x1ZGUgImNrY3hsYS5oIgotCi0jaWZuZGVmIE5PSFRFUk1DQVAKLSNpZmRlZiBOT1RFUk1D QVAKLSNkZWZpbmUgTk9IVEVSTUNBUAotI2Vsc2UKLSNpZm5kZWYgQlNENDQKLSNkZWZpbmUgTk9I VEVSTUNBUAotI2Vsc2UKLSNpZmRlZiBfX2JzZGlfXwotI2RlZmluZSBOT0hURVJNQ0FQCi0jZWxz ZQotI2lmZGVmIE9QRU5CU0QKLSNkZWZpbmUgTk9IVEVSTUNBUAotI2Vsc2UKLSNpZmRlZiBNQUNP U1gKLSNkZWZpbmUgTk9IVEVSTUNBUAotI2VuZGlmIC8qIE1BQ09TWCAqLwotI2VuZGlmIC8qIE9Q RU5CU0QgKi8KLSNlbmRpZiAvKiBfX2JzZGlfXyAqLwotI2VuZGlmIC8qIEJTRDQ0ICovCi0jZW5k aWYgLyogTk9URVJNQ0FQICovCi0jZW5kaWYgLyogTk9IVEVSTUNBUCAqLwotCi0jaWZuZGVmIE5P VEVSTUNBUAotI2lmZGVmIEJTRDQ0Ci0jaWZuZGVmIE5PSFRFUk1DQVAKLSNpbmNsdWRlIDx0ZXJt Y2FwLmg+Ci0jZW5kaWYgLyogTk9IVEVSTUNBUCAqLwotI2VuZGlmIC8qIEJTRDQ0ICovCi0jZWxz ZSAgLyogIUJTRDQ0ICovCi0jaWZkZWYgbGludXgKLSNpbmNsdWRlIDx0ZXJtLmg+Ci0jZW5kaWYg LyogbGludXggKi8KLSNlbmRpZiAvKiBOT1RFUk1DQVAgKi8KLQotI2lmZGVmIE9TMgotI2luY2x1 ZGUgPHN0cmluZy5oPgotX1BST1RPVFlQKGNoYXIgKiBvczJfZ2V0aG9zdG5hbWUsICh2b2lkKSk7 Ci0jZGVmaW5lIGdldHBpZCBfZ2V0cGlkCi0jZW5kaWYgLyogT1MyICovCi0jaWZkZWYgQlNENDQK LSNpbmNsdWRlIDxlcnJuby5oPgotI2VuZGlmIC8qIEJTRDQ0ICovCi0KLWV4dGVybiB4eF9zdHJw IHh4c3RyaW5nOwotCi0jaWZkZWYgT1MyCi0jaW5jbHVkZSAiY2tjbmV0LmgiCi0jZWxzZSAvKiBP UzIgKi8KLV9QUk9UT1RZUCggY2hhciAqIGNrZ2V0cGVlciwgKFZPSUQpKTsKLV9QUk9UT1RZUChp bnQgZ2V0bG9jYWxpcGFkZHIsICh2b2lkKSk7Ci1fUFJPVE9UWVAoaW50IGlzdG5jb21wb3J0LCAo dm9pZCkpOwotI2lmbmRlZiBOT0NLR0VURlFIT1NUCi1fUFJPVE9UWVAoIGNoYXIgKiBja2dldGZx aG9zdG5hbWUsKGNoYXIgKikpOwotI2VuZGlmCS8qIE5PQ0tHRVRGUUhPU1QgKi8KLSNpZm5kZWYg TkVUQ09OTgotLyoKLSAgV2Ugc2hvdWxkIGp1c3QgcHVsbCBpbiBja2NuZXQuaCBoZXJlLCBidXQg aXQgY2F1c2VzIGEgY29uZmxpY3Qgd2l0aCBjdXJzZXMuaC4KLSovCi0jaWZkZWYgVENQU09DS0VU Ci0jZGVmaW5lIE5FVENPTk4KLSNlbHNlCi0jaWZkZWYgU1VOWDI1Ci0jZGVmaW5lIE5FVENPTk4K LSNlbHNlCi0jaWZkZWYgU1RSQVRVU1gyNQotI2RlZmluZSBORVRDT05OCi0jZWxzZQotI2lmZGVm IElCTVgyNQotI2RlZmluZSBORVRDT05OCi0jZWxzZQotI2lmZGVmIEhQWDI1Ci0jZGVmaW5lIE5F VENPTk4KLSNlbHNlCi0jaWZkZWYgREVDTkVUCi0jZGVmaW5lIE5FVENPTk4KLSNlbHNlCi0jaWZk ZWYgTlBJUEUKLSNkZWZpbmUgTkVUQ09OTgotI2Vsc2UKLSNpZmRlZiBDS19ORVRCSU9TCi0jZGVm aW5lIE5FVENPTk4KLSNpZmRlZiBTVVBFUkxBVAotI2RlZmluZSBORVRDT05OCi0jZWxzZQotI2Vu ZGlmIC8qIFNVUEVSTEFUICovCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0jZW5kaWYgLyogU1VO WDI1ICovCi0jZW5kaWYgLyogU1RSQVRVU1gyNSAqLwotI2VuZGlmIC8qIElCTVgyNSAqLwotI2Vu ZGlmIC8qIEhQWDI1ICovCi0jZW5kaWYgLyogREVDTkVUICovCi0jZW5kaWYgLyogTlBJUEUgKi8K LSNlbmRpZiAvKiBDS19ORVRCSU9TICovCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotI2VuZGlmIC8q IE9TMiAqLwotCi0jaWZuZGVmIFRDUFNPQ0tFVAotI2lmZGVmIE1VTFRJTkVUCi0jZGVmaW5lIFRD UFNPQ0tFVAotI2VuZGlmIC8qIE1VTFRJTkVUICovCi0jaWZkZWYgREVDX1RDUElQCi0jZGVmaW5l IFRDUFNPQ0tFVAotI2VuZGlmIC8qIERFQ19UQ1BJUCAqLwotI2lmZGVmIFdJTlRDUAotI2RlZmlu ZSBUQ1BTT0NLRVQKLSNlbmRpZiAvKiBXSU5UQ1AgKi8KLSNpZmRlZiBUQ1BXQVJFCi0jZGVmaW5l IFRDUFNPQ0tFVAotI2VuZGlmIC8qIFRDUFdBUkUgKi8KLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8K LQotI2lmZGVmIE9TMgotI2lmZGVmIE5UCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUg PHRhcGkuaD4KLSNpbmNsdWRlICJja250YXAuaCIKLSNlbHNlIC8qIE5UICovCi0jZGVmaW5lIElO Q0xfVklPCi0jaW5jbHVkZSA8b3MyLmg+Ci0jZW5kaWYgLyogTlQgKi8KLSNpZmRlZiBDT01NRU5U ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXb3VsZCB5b3UgYmVsaWV2ZSAqLwotI3VuZGVm IENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDxvczIuaD4gZGVmaW5lcyB0aGlz ID8gKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0jaWZkZWYgQ0tfTkVUQklPUwotI2luY2x1ZGUg ImNrb25iaS5oIgotI2VuZGlmIC8qIENLX05FVEJJT1MgKi8KLQotI2luY2x1ZGUgImNrb2Nvbi5o IgotZXh0ZXJuIGFzY3JlZW4gY29tbWFuZHNjcmVlbjsKLSNpZmRlZiBLVUkKLSNpbmNsdWRlICJp a3VpLmgiCi0jZW5kaWYgLyogS1VJICovCi0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBOVAot I2luY2x1ZGUgImNrbndpbi5oIgotI2VuZGlmIC8qIE5UICovCi0jaWZkZWYgT1MyCi0jaW5jbHVk ZSAiY2tvd2luLmgiCi0jaW5jbHVkZSAiY2tvc3luLmgiCi0jZW5kaWYgLyogT1MyICovCi0KLSNp ZmRlZiBDS19UQVBJCi1leHRlcm4gaW50IHR0dGFwaTsKLWV4dGVybiBpbnQgdGFwaXBhc3M7Ci0j ZW5kaWYgLyogQ0tfVEFQSSAqLwotCi0jaWZkZWYgQ0tfS0VSQkVST1MKLSNpbmNsdWRlICJja3Vh dGguaCIKLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotCi0jaWZuZGVmIFdJTlRDUAotI2luY2x1 ZGUgPHNpZ25hbC5oPgotI2VuZGlmIC8qIFdJTlRDUCAqLwotCi0jaWZkZWYgVk1TCi0jaW5jbHVk ZSA8ZGVzY3JpcC5oPgotI2luY2x1ZGUgPHNzZGVmLmg+Ci0jaW5jbHVkZSA8c3RzZGVmLmg+Ci0j aWZuZGVmIE9MRF9WTVMKLSNpbmNsdWRlIDxsaWIkcm91dGluZXMuaD4gIC8qIE5vdCBmb3IgVkFY IEMgMi4zICovCi0jZWxzZQotI2luY2x1ZGUgPGxpYmRlZi5oPgotI2VuZGlmIC8qIE9MRF9WTVMg Ki8KLSNpZmRlZiBXSU5UQ1AKLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNlbmRpZiAvKiBXSU5UQ1Ag Ki8KLSNlbmRpZiAvKiBWTVMgKi8KLQotI2lmZGVmIERDTEZET1BFTgotLyogZmRvcGVuKCkgbmVl ZHMgZGVjbGFyaW5nIGJlY2F1c2UgaXQncyBub3QgZGVjbGFyZWQgaW4gPHN0ZGlvLmg+ICovCi1f UFJPVE9UWVAoIEZJTEUgKiBmZG9wZW4sIChpbnQsIGNoYXIgKikgKTsKLSNlbmRpZiAvKiBEQ0xG RE9QRU4gKi8KLQotI2lmZGVmIERDTFBPUEVOCi0vKiBwb3BlbigpIG5lZWRzIGRlY2xhcmluZyBi ZWNhdXNlIGl0J3Mgbm90IGRlY2xhcmVkIGluIDxzdGRpby5oPiAqLwotX1BST1RPVFlQKCBGSUxF ICogcG9wZW4sIChjaGFyICosIGNoYXIgKikgKTsKLSNlbmRpZiAvKiBEQ0xQT1BFTiAqLwotCi1p bnQgdHRfY3JkID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2FycmlhZ2UgcmV0dXJu IGRpc3BsYXkgKi8KLWludCB0dF9sZmQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBM aW5lZmVlZCBkaXNwbGF5ICovCi1pbnQgaW50ZXJydXB0ZWQgPSAwOyAgICAgICAgICAgICAgICAg ICAgLyogSW50ZXJydXB0ZWQgZnJvbSBrZXlib2FyZCBmbGFnICovCi1pbnQgZnhkX2luaXRlZCA9 IDA7CQkJLyogRnVsbHNjcmVlbiBzdHVmZiBpbml0aWFsaXplZCAqLwotCi0jaWZkZWYgREVCVUcK LWNoYXIgZGViZmlsW0NLTUFYUEFUSCsxXTsgICAgICAgICAgICAgICAvKiBEZWJ1Z2dpbmcgbG9n IGZpbGUgbmFtZSAqLwotI2VuZGlmIC8qIERFQlVHICovCi0KLSNpZmRlZiBUTE9HCi1jaGFyIHRy YWZpbFtDS01BWFBBVEgrMV07ICAgICAgICAgICAgICAgLyogVHJhbnNhY3Rpb24gbG9nIGZpbGUg bmFtZSAqLwotI2VuZGlmIC8qIFRMT0cgKi8KLQotY2hhciBzZXNmaWxbQ0tNQVhQQVRIKzFdOyAg ICAgICAgICAgICAgIC8qIFNlc3Npb24gbG9nIGZpbGUgbmFtZSAqLwotCi0jaWZkZWYgQ0tMT0dE SUFMCi1jaGFyIGRpYWZpbFtDS01BWFBBVEgrMV07ICAgICAgICAgICAgICAgLyogQ29ubmVjdGlv biBsb2cgZmlsZSBuYW1lICovCi1jaGFyIGN4bG9nYnVmW0NYTE9HQlVGTCsxXTsgICAgICAgICAg ICAgLyogQ29ubmVjdGlvbiBsb2cgcmVjb3JkIGJ1ZmZlciAqLwotaW50IGN4X2FjdGl2ZSA9IDA7 ICAgICAgICAgICAgICAgICAgICAgIC8qIENvbm5lY3Rpb24gaXMgYWN0aXZlICovCi1leHRlcm4g aW50IGRpYWxvZzsKLSNlbmRpZiAvKiBDS0xPR0RJQUwgKi8KLQotI2lmZGVmIERZTkFNSUMKLXN0 YXRpYyBjaGFyICpjbWRzdHIgPSBOVUxMOyAgICAgICAgICAgICAvKiBQbGFjZSB0byBidWlsZCBn ZW5lcmljIGNvbW1hbmQgKi8KLSNlbHNlCi0jaWZkZWYgcGRwMTEKLXN0YXRpYyBjaGFyIGNtZHN0 clsyNTZdOwotI2Vsc2UKLXN0YXRpYyBjaGFyIGNtZHN0cls0MDk2XTsKLSNlbmRpZiAvKiBwZHAx MSAqLwotI2VuZGlmIC8qIERZTkFNSUMgKi8KLQotI2lmbmRlZiBOT01TRU5ECi1jaGFyIGZzcGVj W0NNREJMKzRdOyAgICAgICAgICAgICAgICAgICAgLyogRmlsZW5hbWUgc3RyaW5nIGZvciBcdihm aWxlc3BlYykgKi8KLWludCBmc3BlY2xlbiA9IENNREJMOwotI2Vsc2UKLWNoYXIgZnNwZWNbQ0tN QVhQQVRIKzRdOwotaW50IGZzcGVjbGVuID0gQ0tNQVhQQVRIOwotI2VuZGlmIC8qIE5PTVNFTkQg Ki8KLQotY2hhciAqIHJmc3BlYyA9IE5VTEw7CQkJLyogUmVjZWl2ZWQgZmlsZXNwZWM6IGxvY2Fs ICovCi1jaGFyICogcHJmc3BlYyA9IE5VTEw7CQkJLyogUHJlbGltaW5hcnkgcmZzcGVjICovCi1j aGFyICogc2ZzcGVjID0gTlVMTDsJCQkvKiBTZW50IGZpbGVzcGVjOiBsb2NhbCAqLwotY2hhciAq IHBzZnNwZWMgPSBOVUxMOwkJCS8qIFByZWxpbWluYXJ5IHNmc3BlYyAqLwotY2hhciAqIHNyZnNw ZWMgPSBOVUxMOwkJCS8qIFJlY2VpdmVkIGZpbGVzcGVjOiByZW1vdGUgKi8KLWNoYXIgKiBwc3Jm c3BlYyA9IE5VTEw7CQkJLyogUHJlbGltaW5hcnkgc3Jmc3BlYyAqLwotY2hhciAqIHJyZnNwZWMg PSBOVUxMOwkJCS8qIFNlbnQgZmlsZXNwZWM6IHJlbW90ZSAqLwotY2hhciAqIHBycmZzcGVjID0g TlVMTDsJCQkvKiBQcmVsaW1pbmFyeSBycmZzcGVjICovCi0KLWludCBzdWNjZXNzID0gMSwgICAg ICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIHN1Y2Nlc3MvZmFpbHVyZSBmbGFnICovCi0g ICAgY21kbHZsID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBsZXZlbCAq LwotICAgIGFjdGlvbiA9IDAsCQkJCS8qIEFjdGlvbiBzZWxlY3RlZCBvbiBjb21tYW5kIGxpbmUg Ki8KLSAgICBzbG9ndHMgPSAwLAkJCQkvKiBTZXNzaW9uLWxvZyB0aW1lc3RhbXBzIG9uL29mZiAq LwotICAgIHNsb2dudWwgPSAwLAkJCS8qIFNlc3Npb24tbG9nIG51bGwtdGVybWluYXRlZCBsaW5l cyAqLwotI2lmZGVmIFVOSVgKLSAgICBzZXNzZnQgPSBYWUZUX1QsICAgICAgICAgICAgICAgICAg ICAvKiBTZXNzaW9uIGxvZyBmaWxlIHR5cGUgKi8KLSNlbHNlCi0gICAgc2Vzc2Z0ID0gWFlGVF9C LAkJCS8qICh0ZXh0IGZvciBVTklYIGJpbmFyeSBmb3Igb3RoZXJzKSAqLwotI2VuZGlmIC8qIFVO SVggKi8KLSAgICBwZmxhZyA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcmludCBw cm9tcHQgKi8KLSAgICBtc2dmbGcgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcmlu dCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzICovCi0KLWV4dGVybiBpbnQgeGFza21vcmUsIHNhdmVh c2s7CQkvKiBNb3JlLXByb21wdGluZyAqLwotCi0jaWZkZWYgQ0tfQVBDCi1leHRlcm4gaW50IGFw Y2FjdGl2ZTsKLSNlbmRpZiAvKiBDS19BUEMgKi8KLS8qIEV4dGVybmFsIHZhcmlhYmxlcyAqLwot Ci1leHRlcm4gaW50IGxvY2FsLCBxdWlldCwgYmluYXJ5LCBuZXR3b3JrLCB3aGF0LCBwYXJpdHks IHhpdHN0YSwgZXNjYXBlLAotICB0bGV2ZWwsIGJnc2V0LCBiYWNrZ3JkLCB4c3VzcGVuZCwgY21k aW50LCBuZXR0eXBlLCBzZXNsb2csIGRmbG9jOwotCi1leHRlcm4gaW50IGNtZF9yb3dzLCBjbWRf Y29scywgeGNtZHNyYzsKLQotZXh0ZXJuIGNoYXIgY21kZmlsW107Ci0KLSNpZmRlZiBWTVMKLWV4 dGVybiBpbnQgYmF0Y2g7Ci0jZW5kaWYgLyogVk1TICovCi0KLSNpZmRlZiBkYXRhZ2VuZXJhbCAg ICAgICAgICAgICAgICAgICAgICAvKiAyLzEyLzkyIEVOSCAqLwotI2luY2x1ZGUgPHN5c2lkLmg+ Ci1leHRlcm4gaW50IGNvbl9yZWFkc19tdCwgY29uaW50X2NoLCBjb25pbnRfYXZsOwotI2VuZGlm IC8qIGRhdGFnZW5lcmFsICovCi0KLWV4dGVybiBsb25nIHNwZWVkOwotCi1leHRlcm4gY2hhciB0 dG5hbWVbXSwgKmRmdHR5LCAqY21hcmcsICoqY21saXN0LCAqdmVyc2lvLCBteWhvc3RbXTsKLQot I2lmbmRlZiBOT0NTRVRTCi1leHRlcm4gaW50IGZjaGFyc2V0LCB0Y2hhcnNldCwgeGZyeGxhOwot ZXh0ZXJuIHN0cnVjdCBjc2luZm8gZmNzaW5mb1tdLCB0Y3NpbmZvW107Ci0jZW5kaWYgLyogTk9D U0VUUyAqLwotCi0jaWZkZWYgT1MyCi1leHRlcm4gdW5zaWduZWQgY2hhciBjb2xvcmNtZDsKLSNl bmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIE5PWEZFUgotCi1pbnQgZmRpc3BsYSA9IFhZRkRfTjsK LQotI2Vsc2UgIC8qIE5PWEZFUiBpcyBub3QgZGVmaW5lZCAqLwotCi0jaWZkZWYgT1MyICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSB0cmFuc2ZlciBkaXNwbGF5IHR5cGUgKi8K LWludCBmZGlzcGxhID0gWFlGRF9DOyAgICAgICAgICAgICAgICAgICAvKiBDdXJzZXMgKGZ1bGxz Y3JlZW4pIGlmIHdlIGhhdmUgaXQgKi8KLSNlbHNlCi0jaWZkZWYgQ0tfQ1VSU0VTCi1pbnQgZmRp c3BsYSA9IFhZRkRfQzsKLSNlbHNlCi1pbnQgZmRpc3BsYSA9IFhZRkRfUzsgICAgICAgICAgICAg ICAgICAgLyogT3RoZXJ3aXNlIENSVCAqLwotI2VuZGlmIC8qIENLX0NVUlNFUyAqLwotI2VuZGlm IC8qIE9TMiAqLwotCi1leHRlcm4gc3RydWN0IGNrX3AgcHRhYltdOwotZXh0ZXJuIGludCBwcm90 b2NvbCwgeGZyYmVsLCB4ZnJpbnQ7Ci0KLSNpZmRlZiBTVFJFQU1JTkcKLWV4dGVybiBpbnQgc3Ry ZWFtaW5nLCBzdHJlYW1vazsKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLQotLyogVXNlZCBpbnRl cm5hbGx5ICovCi0KLSNpZmRlZiBLVUkKLV9QUk9UT1RZUCggVk9JRCBzY3JlZW5nLCAoaW50LCBj aGFyLCBsb25nLCBjaGFyICopICk7Ci0jZW5kaWYJLyogS1VJICovCi1fUFJPVE9UWVAoIFZPSUQg c2NyZWVuYywgKGludCwgY2hhciwgQ0tfT0ZGX1QsIGNoYXIgKikgKTsKLQotCi0jaWZkZWYgQ0tf Q1VSU0VTCi0jaWZuZGVmIERZTkFNSUMKLXN0YXRpYyBjaGFyIHh0cm1idWZbVFJNQlVGTF07ICAg ICAgICAgICAvKiB0Z2V0ZW50KCkgYnVmZmVyICovCi1jaGFyICogdHJtYnVmID0geHRybWJ1ZjsK LSNlbHNlCi1jaGFyICogdHJtYnVmID0gTlVMTDsKLSNlbmRpZiAvKiBEWU5BTUlDICovCi1fUFJP VE9UWVAoIHN0YXRpYyBWT0lEIGRweWluaXQsICh2b2lkKSApOwotX1BST1RPVFlQKCBzdGF0aWMg bG9uZyBzaG9jcHMsIChpbnQsIENLX09GRl9ULCBDS19PRkZfVCkgKTsKLV9QUk9UT1RZUCggc3Rh dGljIENLX09GRl9UIHNob2V0bCwgKENLX09GRl9ULCBsb25nLCBDS19PRkZfVCwgQ0tfT0ZGX1Qp ICk7Ci0jZW5kaWYgLyogQ0tfQ1VSU0VTICovCi0KLXN0YXRpYyBpbnQgZnRfd2luID0gMDsgIC8q IEZ1bGxzY3JlZW4gZmlsZSB0cmFuc2ZlciBkaXNwbGF5IHdpbmRvdyBpcyBhY3RpdmUgKi8KLQot LyogVmFyaWFibGVzIGRlY2xhcmVkIGhlcmUgKi8KLQotc3RhdGljIGNoYXIgKiBza3JlYXNvbltd ID0gewotICAgICIiLAkJCQkJLyogMCAqLwotICAgICJSZW1vdGUgZmlsZSBub3Qgb2xkZXIiLAkJ LyogU0tQX0RBVCAqLwotICAgICJJZGVudGljYWwgbW9kaWZpY2F0aW9uIHRpbWVzIiwJLyogU0tQ X0VRVSAqLwotICAgICJUeXBlIiwJCQkJLyogU0tQX1RZUCAqLwotICAgICJTaXplIiwJCQkJLyog U0tQX1NJWiAqLwotICAgICJOYW1lIGNvbGxpc2lvbiIsCQkJLyogU0tQX05BTSAqLwotICAgICJF eGNlcHRpb24gTGlzdCIsCQkJLyogU0tQX0VYTCAqLwotICAgICJEb3QgZmlsZSIsCQkJCS8qIFNL UF9ET1QgKi8KLSAgICAiQmFja3VwIGZpbGUiLAkJCS8qIFNLUF9CS1UgKi8KLSAgICAiUmVjb3Zl cnkgbm90IG5lZWRlZCIsCQkvKiBTS1BfUkVTICovCi0gICAgIkFjY2VzcyBkZW5pZWQiLAkJCS8q IFNLUF9BQ0MgKi8KLSAgICAiTm90IGEgcmVndWxhciBmaWxlIiwJCS8qIFNLUF9OUkYgKi8KLSAg ICAiU2ltdWxhdGVkIiwJCQkvKiBTS1BfU0lNICovCi0gICAgIlNpbXVsYXRlZCAtIFJlbW90ZSBm aWxlIG9sZGVyIiwJLyogU0tQX1hVUCAqLwotICAgICJTaW11bGF0ZWQgLSBObyByZW1vdGUgZmls ZSIsCS8qIFNLUF9YTlggKi8KLX07Ci1zdGF0aWMgaW50IG5za3JlYXNvbiA9IChzaXplb2Yoc2ty ZWFzb24pIC8gc2l6ZW9mKGNoYXIgKikpOwotCi1jaGFyICoKLWdza3JlYXNvbihuKSBpbnQgbjsg ewotICAgIHJldHVybigobiA+IDAgJiYgbiA8IG5za3JlYXNvbikgPyBza3JlYXNvbltuXSA6ICIi KTsKLX0KLQotY2hhciBwa3RmaWxbQ0tNQVhQQVRIKzFdOyAgICAgICAgICAgICAgIC8qIFBhY2tl dCBsb2cgZmlsZSBuYW1lICovCi0KLSNpZm5kZWYgTk9NU0VORCAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBNdWx0aXBsZSBTRU5EICovCi1jaGFyICptc2ZpbGVzW01TRU5ETUFYXTsKLSNlbmRp ZiAvKiBOT01TRU5EICovCi0KLSNpZmRlZiBDS19USU1FUlMKLWV4dGVybiBsb25nIHJ0dGRlbGF5 OwotZXh0ZXJuIGludCAgcnR0ZmxnOwotI2VuZGlmIC8qIENLX1RJTUVSUyAqLwotZXh0ZXJuIGlu dCByY3Z0aW1vOwotCi0jaWZkZWYgQ0tfUkVTRU5ECi1leHRlcm4gaW50IHNlbmRtb2RlOwotZXh0 ZXJuIENLX09GRl9UIHNlbmRzdGFydCwgcnNfbGVuOwotI2VuZGlmIC8qIENLX1JFU0VORCAqLwot Ci0jaWZkZWYgQ0tfUENUX0JBUiAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSB0cmFuc2Zl ciB0aGVybW9tZXRlciAqLwotaW50IHRoZXJtb21ldGVyID0gMTsgICAgICAgICAgICAgICAgICAg IC8qIE9OIGJ5IGRlZmF1bHQgKi8KLSNlbmRpZiAvKiBDS19QQ1RfQkFSICovCi0KLSNpZmRlZiBH RlRJTUVSCi1DS0ZMT0FUIGd0diA9IC0xLjAsIG9sZGd0diA9IC0xLjA7Ci0jZWxzZQotI2lmbmRl ZiBPUzIKLXN0YXRpYwotI2VuZGlmIC8qIE9TMiAqLwotICBsb25nIGd0diA9IC0xTCwgb2xkZ3R2 ID0gLTFMOwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLQotZXh0ZXJuIGludCBzZXJ2ZXIsIGJjdHUs IHJwdGZsZywgZWJxZmxnLCBzcHNpeiwgdXJwc2l6LCB3bWF4LCBjenNlZW4sIGN4c2VlbiwKLSAg d2lubG8sIGRpc3BsYSwgdGltaW50LCBucGFkLCBlYnEsIGJjdHIsIHJwdHEsIGF0Y2FwdSwgbHBj YXB1LAotICBzd2NhcHUsIHdzbG90biwgd3Nsb3RyLCBydGltbywgbXlwYWRuLCBzcSwgY2FwYXMs IHJwc2l6LCB0c2VjcywKLSAgcGt0bG9nLCBsc2NhcHUsIGRlc3QsIHNydmRpcywgd3Nsb3RzLCBz cGFja2V0cywgc3BrdGwsIHJwa3RsLAotICByZXRyYW5zLCB3Y3VyLCBudW1lcnJzLCBmc2Vjcywg d2hhdHJ1LCBjcnVuY2hlZCwgdGltZW91dHMsCi0gIHJwYWNrZXRzLCBmbmNudiwgYnllX2FjdGl2 ZSwgZGlzY2FyZCwgaW5zZXJ2ZXIsIGRpcmFjdGl2ZSwgY2RhY3RpdmU7Ci0KLWV4dGVybiBsb25n IGZpbGNudCwgZmlscmVqLCBycHRuLCBmaWxjcHMsIHRmY3BzLCBjcHMsIHBlYWtjcHM7Ci1leHRl cm4gQ0tfT0ZGX1QgZmZjLCB0ZmMsIGZzaXplOyAKLQotbG9uZyBvbGRjcHMgPSAwTDsKLQotZXh0 ZXJuIENIQVIgKnJkYXRhcCwgcGFkY2gsIHNlb2wsIGN0bHEsIG15cGFkYywgZW9sLCAqZXBrdG1z ZzsKLWV4dGVybiBjaGFyICp4ZnJtc2c7Ci0KLSNpZmRlZiBJS1NEQgotRklMRSAqIGRiZnAgPSBO VUxMOyAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgcG9pbnRlciB0byBkYXRhYmFzZSBmaWxl ICovCi0KLWludCBkYmVuYWJsZWQgPSAxOyAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZv ciBkYXRhYmFzZSBpcyBlbmFibGVkICovCi1leHRlcm4gaW50IGlrZGJvcGVuOyAgICAgICAgICAg ICAgICAgICAgLyogRmxhZyBmb3IgZGF0YWJhc2UgaXMgb3BlbiAqLwotCi11bnNpZ25lZCBsb25n IG15ZGJzZWVrID0gMEw7ICAgICAgICAgICAgLyogU2VlayBwb2ludGVyIHRvIG15IHJlY29yZCAq LwotaW50IG15ZGJzbG90ID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIE15IHNsb3QgbnVt YmVyICovCi11bnNpZ25lZCBsb25nIG15ZmxhZ3MgPSAwTDsgICAgICAgICAgICAgLyogTXkgZmxh Z3MgKi8KLXVuc2lnbmVkIGxvbmcgbXlhdHlwZSA9IDBMOyAgICAgICAgICAgICAvKiBNeSBhdXRo b3JpemF0aW9uIHR5cGUgKi8KLXVuc2lnbmVkIGxvbmcgbXlhbW9kZSA9IDBMOyAgICAgICAgICAg ICAvKiBNeSBhdXRob3JpemF0aW9uIG1vZGUgKi8KLXVuc2lnbmVkIGxvbmcgbXlzdGF0ZSA9IDBM OyAgICAgICAgICAgICAvKiBNeSBzdGF0ZSAoU0VORCwgUkVDRUlWRSwgZXRjKSAqLwotdW5zaWdu ZWQgbG9uZyBteXBpZCA9IDBMOyAgICAgICAgICAgICAgIC8qIE15IFBJRCAqLwotdW5zaWduZWQg bG9uZyBteWlwID0gMEw7ICAgICAgICAgICAgICAgIC8qIE15IElQIGFkZHJlc3MgKi8KLXVuc2ln bmVkIGxvbmcgcGVlcmlwID0gMEw7ICAgICAgICAgICAgICAvKiBNeSBwZWVyJ3MgSVAgYWRkcmVz cyAqLwotCi11bnNpZ25lZCBsb25nIGRiaXAgPSAwTDsgICAgICAgICAgICAgICAgLyogSVAgYWRk cmVzcyBpbiBkYiByZWNvcmQgKi8KLXVuc2lnbmVkIGxvbmcgZGJwaWQgPSAwTDsgICAgICAgICAg ICAgICAvKiBQSUQgaW4gZGIgcmVjb3JkICovCi11bnNpZ25lZCBsb25nIGRiZmxhZ3MgPSAwTDsg ICAgICAgICAgICAgLyogRmxhZ3MgZmllbGQgaW4gZGIgcmVjb3JkICovCi11bnNpZ25lZCBsb25n IGRibGFzdHVzZWQgPSAwTDsgICAgICAgICAgLyogTGFzdCBpbi11c2UgcmVjb3JkIGluIGRiICov Ci1jaGFyIGRicmVjW0RCX1JFQ0xdOyAgICAgICAgICAgICAgICAgICAgLyogRGF0YWJhc2UgcmVj b3JkIGJ1ZmZlciAqLwotCi1jaGFyICogZGJkaXIgICA9IE5VTEw7ICAgICAgICAgICAgICAgICAg LyogRGF0YWJhc2UgZGlyZWN0b3J5ICovCi1jaGFyICogZGJmaWxlICA9IE5VTEw7ICAgICAgICAg ICAgICAgICAgLyogRGF0YWJhc2UgZmlsZSBmdWxsIHBhdGhuYW1lICovCi1jaGFyIG15aGV4aXBb MzNdID0geyBOVUwsIE5VTCB9OyAgICAgICAgLyogTXkgSVAgYWRkcmVzcyBpbiBoZXggKi8KLWNo YXIgcGVlcmhleGlwWzMzXSA9IHsgTlVMLCBOVUwgfTsgICAgICAvKiBDbGllbnQncyBJUCBhZGRy ZXNzIGluIGhleCAqLwotI2VuZGlmIC8qIElLU0RCICovCi0KLSNpZmRlZiBHRlRJTUVSCi1leHRl cm4gQ0tGTE9BVCBmcGZzZWNzLCBmcHRzZWNzLCBmcHhmc2VjczsKLSNlbHNlCi1leHRlcm4gbG9u ZyB4ZnNlY3M7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0j aWZkZWYgVENQU09DS0VUCi0jaWZkZWYgTkVXRlRQCi1leHRlcm4gY2hhciAqIGZ0cF9ob3N0LCBm dHBfc3J2dHlwW107Ci1leHRlcm4gaW50IGZ0cF9jc3gsIGZ0cF9jc2wsIGZ0cF9kZWI7Ci0jZW5k aWYgLyogTkVXRlRQICovCi1leHRlcm4gY2hhciBteWlwYWRkcltdOwotI2VuZGlmIC8qIFRDUFNP Q0tFVCAqLwotCi0jaWZuZGVmIE5PSUNQCi0jaWZuZGVmIE5PU1BMCi0gICAgZXh0ZXJuIHN0cnVj dCBtdGFiICptYWN0YWI7ICAgICAgICAgLyogRm9yIE9OX0VYSVQgbWFjcm8uICovCi0gICAgZXh0 ZXJuIGludCBubWFjOwotI2VuZGlmIC8qIE5PU1BMICovCi0jaWZkZWYgRENNREJVRgotZXh0ZXJu IGNoYXIgKmNtZGJ1ZjsgICAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgYnVmZmVyICovCi0j ZWxzZQotZXh0ZXJuIGNoYXIgY21kYnVmW107ICAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQg YnVmZmVyICovCi0jZW5kaWYgLyogRENNREJVRiAqLwotZXh0ZXJuIGludCBjbWRfcXVvdGluZzsK LSNlbmRpZiAvKiBOT0lDUCAqLwotCi0jaWZuZGVmIE5PQ0NUUkFQCi0jaWZkZWYgTlQKLSNpbmNs dWRlIDxzZXRqbXBleC5oPgotI2Vsc2UgLyogTlQgKi8KLSNpbmNsdWRlIDxzZXRqbXAuaD4KLSNl bmRpZiAvKiBOVCAqLwotI2luY2x1ZGUgImNrY3NpZy5oIgotZXh0ZXJuIGNram1wYnVmIGNtamJ1 ZjsKLSNlbmRpZiAvKiBOT0NDVFJBUCAqLwotCi1leHRlcm4gaW50IHhmaWxldHlwZSwgbnNjYW5m aWxlOwotCi1pbnQKLXNob2VzYyhlc2NhcGUpIGludCBlc2NhcGU7IHsKLSAgICBleHRlcm4gY2hh ciAqIGNjbnRhYltdOwkJLyogQzAgY29udHJvbCBjaGFyYWN0ZXIgbmFtZSB0YWJsZSAqLwotICAg IGV4dGVybiBpbnQgdHRfZXNjYXBlOwotICAgIGlmICgoZXNjYXBlID4gMCAmJiBlc2NhcGUgPCAz MikgfHwgKGVzY2FwZSA9PSAxMjcpKSB7Ci0JcHJpbnRmKCIgRXNjYXBlIGNoYXJhY3RlcjogQ3Ry bC0lYyAoQVNDSUkgJWQsICVzKTogJXNcclxuIiwKLQkgICAgICAgY3RsKGVzY2FwZSksCi0JICAg ICAgIGVzY2FwZSwKLQkgICAgICAgKGVzY2FwZSA9PSAxMjcgPyAiREVMIiA6IGNjbnRhYltlc2Nh cGVdKSwKLQkgICAgICAgdHRfZXNjYXBlID8gImVuYWJsZWQiIDogImRpc2FibGVkIgotCSAgICAg ICApOwotICAgIH0gZWxzZSB7Ci0JcHJpbnRmKCIgRXNjYXBlIGNoYXJhY3RlcjogQ29kZSAlZCIs ZXNjYXBlKTsKLQlpZiAoZXNjYXBlID4gMTYwICYmIGVzY2FwZSA8IDI1NikKLQkgIHByaW50Zigi ICglYykiLGVzY2FwZSk7Ci0JcHJpbnRmKCI6ICVzXHJcbiIsIHR0X2VzY2FwZSA/ICJlbmFibGVk IiA6ICJkaXNhYmxlZCIpOwkKLSAgICB9Ci0gICAgcmV0dXJuKDApOwotfQotCi0jaWZuZGVmIE5P WEZFUgotLyogIFAgUiBFIFMgRSBUICAtLSAgUmVzZXQgZ2xvYmFsIHByb3RvY29sIHZhcmlhYmxl cyAgKi8KLQotZXh0ZXJuIGludCByZWN1cnNpdmU7Ci0KLSNpZmRlZiBQQVRURVJOUwotaW50IHBh dHRlcm5zID0gU0VUX0FVVE87ICAgICAgICAgICAgICAgIC8qIFdoZXRoZXIgdG8gdXNlIGZpbGVu YW1lIHBhdHRlcm5zICovCi1leHRlcm4gaW50IGdfcGF0dGVybnM7CQkJLyogRm9yIHNhdmluZyBh bmQgcmVzdG9yaW5nICovCi0jZWxzZQotaW50IHBhdHRlcm5zID0gU0VUX09GRjsKLSNlbmRpZiAv KiBQQVRURVJOUyAqLwotCi0jaWZuZGVmIE5PSUNQCi0jaWZkZWYgQ0tfTEFCRUxFRAotZXh0ZXJu IGludCBnX2xmX29wdHMsIGxmX29wdHM7Ci0jZW5kaWYgLyogQ0tfTEFCRUxFRCAqLwotZXh0ZXJu IGludCBnX21hdGNoZG90LCBnX3VzZXBpcGVzLCB1c2VwaXBlczsKLWV4dGVybiBpbnQgZ19iaW5h cnksIGdfcHJvdG8sIGdfZGlzcGxhLCBnX3NwYXRoLCBnX3JwYXRoLCBnX2ZuY252OwotZXh0ZXJu IGludCBnX3JlY3Vyc2l2ZTsKLWV4dGVybiBpbnQgZ194ZmVybW9kZSwgeGZlcm1vZGU7Ci1leHRl cm4gaW50IGdfdXJwc2l6LCBnX3Nwc2l6ZiwgZ19zcHNpejsKLWV4dGVybiBpbnQgZ19zcHNpenIs IGdfc3BtYXgsIGdfd3Nsb3RyLCBnX3ByZWZpeGluZywgZ19mbmNhY3Q7Ci1leHRlcm4gaW50IGdf Zm5zcGF0aCwgZ19mbnJwYXRoLCBnX3NraXBidXA7Ci1leHRlcm4gaW50IG5vbGlua3M7Ci0jaWZk ZWYgQ0tTWU1MSU5LCi1leHRlcm4gaW50IHpnZnNfbGluazsKLSNlbmRpZiAvKiBDS1NZTUxJTksg Ki8KLSNpZm5kZWYgTk9TUEwKLWV4dGVybiBpbnQgZ19wZmxnLCBwd2ZsZywgZ19wY3B0LCBwd2Ny eXB0OwotZXh0ZXJuIGNoYXIgKiBnX3Bzd2QsIHB3YnVmW107Ci0jZW5kaWYgLyogTk9TUEwgKi8K LSNlbmRpZiAvKiBOT0lDUCAqLwotCi1leHRlcm4gaW50IHNwc2l6Ziwgc3BzaXpyLCBzcG1heCwg cHJlZml4aW5nLCBmbmNhY3QsIGZuc3BhdGgsIGZucnBhdGg7Ci1leHRlcm4gaW50IG1vdmluZzsg ICAgICAgICAgICAgICAgICAgICAgLyogU0VORCBjcml0ZXJpYSAqLwotZXh0ZXJuIGNoYXIgc25k YWZ0ZXJbXSwgc25kYmVmb3JlW10sICpzbmRleGNlcHRbXSwgKnJjdmV4Y2VwdFtdOwotZXh0ZXJu IENLX09GRl9UIHNuZGxhcmdlciwgc25kc21hbGxlciwgY2FsaWJyYXRlOwotZXh0ZXJuIGludCBy bWFpbGYsIHJwcmludGYsIHNraXBidXA7Ci1leHRlcm4gY2hhciBvcHRidWZbXTsKLQotI2lmZGVm IFBJUEVTRU5ECi1leHRlcm4gY2hhciAqIGdfc2ZpbHRlciwgKiBnX3JmaWx0ZXI7Ci1leHRlcm4g Y2hhciAqIHNuZGZpbHRlciwgKiByY3ZmaWx0ZXI7Ci0jZW5kaWYgLyogUElQRVNFTkQgKi8KLWV4 dGVybiBjaGFyICoqIHNuZGFycmF5OwotCi1WT0lECi1mdHJlc2V0KCkgewotI2lmbmRlZiBOT0lD UAotICAgIGludCBpOwotICAgIGV4dGVybiBjaGFyICogZmlsZWZpbGU7Ci0gICAgZXh0ZXJuIGlu dCByZWxpYWJsZSwgeHJlbGlhYmxlLCBjX3NhdmUsIHNzX3NhdmUsIHNsb3N0YXJ0LCB1cmNsZWFy OwotICAgIGV4dGVybiBpbnQgb29wdHMsIG9tb2RlLCBvbmFtZSwgb3BhdGgsIGthY3RpdmUsIGF1 dG9wYXRoOwotICAgIGV4dGVybiBjaGFyICogc25kX21vdmU7ICAgICAgICAgICAgIC8qIERpcmVj dG9yeSB0byBtb3ZlIHNlbnQgZmlsZXMgdG8gKi8KLSAgICBleHRlcm4gY2hhciAqIHNuZF9yZW5h bWU7ICAgICAgICAgICAvKiBXaGF0IHRvIHJlbmFtZSBzZW50IGZpbGVzIHRvICovCi0gICAgZXh0 ZXJuIGNoYXIgKiByY3ZfbW92ZTsKLSAgICBleHRlcm4gY2hhciAqIHJjdl9yZW5hbWU7Ci0gICAg ZXh0ZXJuIGNoYXIgKiBnX3NuZF9tb3ZlOwotICAgIGV4dGVybiBjaGFyICogZ19zbmRfcmVuYW1l OwotICAgIGV4dGVybiBjaGFyICogZ19yY3ZfbW92ZTsKLSAgICBleHRlcm4gY2hhciAqIGdfcmN2 X3JlbmFtZTsKLQotI2lmZGVmIENLX1RNUERJUgotICAgIGV4dGVybiBpbnQgZl90bXBkaXI7Ci0g ICAgZXh0ZXJuIGNoYXIgc2F2ZGlyW107Ci0jZW5kaWYgLyogQ0tfVE1QRElSICovCi0KLSNpZmRl ZiBDS19TUEVFRAotI2lmZGVmIENPTU1FTlQKLSAgICBleHRlcm4gaW50IGZfY3RscDsKLSAgICBl eHRlcm4gc2hvcnQgc19jdGxwW10sIGN0bHBbXTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0jZW5k aWYgLyogQ0tfU1BFRUQgKi8KLQotI2lmbmRlZiBOT0NTRVRTCi0gICAgZXh0ZXJuIGludCBmY3Nf c2F2ZSwgdGNzX3NhdmU7Ci0gICAgZXh0ZXJuIGludCBnX3hmcnhsYSwgeGZyeGxhOwotI2VuZGlm IC8qIE5PQ1NFVFMgKi8KLQotLyogUmVzdG9yZSAvIHJlc2V0IHBlci1jb21tYW5kIGZpbGUtdHJh bnNmZXIgc3dpdGNoZXMgKi8KLQotICAgIG1ha2VzdHIoJnNuZF9tb3ZlLGdfc25kX21vdmUpOwot ICAgIG1ha2VzdHIoJnJjdl9tb3ZlLGdfcmN2X21vdmUpOwotICAgIG1ha2VzdHIoJnNuZF9yZW5h bWUsZ19zbmRfcmVuYW1lKTsKLSAgICBtYWtlc3RyKCZyY3ZfcmVuYW1lLGdfcmN2X3JlbmFtZSk7 Ci0KLSAgICBrYWN0aXZlID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBLZXJtaXQgcHJv dG9jb2wgbm8gbG9uZ2VyIGFjdGl2ZSAqLwotICAgIG9vcHRzID0gLTE7ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIE8tUGFja2V0IE9wdGlvbnMgKi8KLSAgICBvbW9kZSA9IC0xOyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBPLVBhY2tldCBUcmFuc2ZlciBNb2RlICovCi0gICAgb25hbWUg PSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTy1QYWNrZXQgRmlsZW5hbWUgT3B0aW9u cyAqLwotICAgIG9wYXRoID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE8tUGFja2V0 IFBhdGhuYW1lIE9wdGlvbnMgKi8KLQotI2lmZGVmIENLX1JFU0VORAotICAgIHJzX2xlbiA9IDBM OwkJCS8qIFJFR0VUIHBvc2l0aW9uICovCi0jZW5kaWYgLyogQ0tfUkVTRU5EICovCi0KLSNpZmRl ZiBDT01NRU5UCi0jaWZkZWYgQ0tfU1BFRUQKLSAgICBpZiAoZl9jdGxwKSB7Ci0gICAgICAgIGZv ciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKLSAgICAgICAgICBjdGxwW2ldID0gc19jdGxwW2ldOwot ICAgICAgICBmX2N0bHAgPSAwOwotICAgIH0KLSNlbmRpZiAvKiBDS19TUEVFRCAqLwotI2VuZGlm IC8qIENPTU1FTlQgKi8KLQotI2lmZGVmIENLX1RNUERJUgotICAgIGlmIChmX3RtcGRpcikgewkJ CS8qIElmIHdlIGNoYW5nZWQgdG8gZG93bmxvYWQgZGlyICovCi0JemNoZGlyKChjaGFyICopIHNh dmRpcik7CS8qIEdvIGJhY2sgd2hlcmUgd2UgY2FtZSBmcm9tICovCi0JZl90bXBkaXIgPSAwOwot ICAgIH0KLSNlbmRpZiAvKiBDS19UTVBESVIgKi8KLQotICAgIGNhbGlicmF0ZSA9IDBMOyAgICAg ICAgICAgICAgICAgICAgIC8qIENhbGlicmF0aW9uIHJ1biAqLwotICAgIGlmICh4cmVsaWFibGUg PiAtMSkgewotCXJlbGlhYmxlID0geHJlbGlhYmxlOwotCWRlYnVnKEYxMDEsImZ0cmVzZXQgcmVs aWFibGUiLCIiLHJlbGlhYmxlKTsKLSAgICB9Ci0gICAgdXJjbGVhciA9IDA7Ci0KLSAgICBpZiAo YXV0b3BhdGgpIHsgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgUkVDRUlWRSBQQVRITkFNRVMg QVVUTyAqLwotICAgICAgICBmbnJwYXRoID0gUEFUSF9BVVRPOwotICAgICAgICBhdXRvcGF0aCA9 IDA7Ci0gICAgfQotICAgIGlmIChmaWxlZmlsZSkgeyAgICAgICAgICAgICAgICAgICAgIC8qIEZp bGUgbGlzdCAqLwotICAgICAgICB6Y2xvc2UoWk1GSUxFKTsKLSAgICAgICAgbWFrZXN0cigmZmls ZWZpbGUsTlVMTCk7Ci0gICAgfQotICAgIGlmIChjX3NhdmUgPiAtMSkgeyAgICAgICAgICAgICAg ICAgIC8qIEJsb2NrIENoZWNrIFR5cGUgKi8KLSAgICAgICAgYmN0ciA9IGNfc2F2ZTsKLSAgICAg ICAgY19zYXZlID0gLTE7Ci0gICAgfQotICAgIGlmIChzc19zYXZlID4gLTEpIHsgICAgICAgICAg ICAgICAgIC8qIFNsb3cgU3RhcnQgKi8KLSAgICAgICAgc2xvc3RhcnQgPSBzc19zYXZlOwotICAg ICAgICBzc19zYXZlID0gLTE7Ci0gICAgfQotI2lmZGVmIENLX0xBQkVMRUQKLSAgICBpZiAoZ19s Zl9vcHRzID4gLTEpIHsKLSAgICAgICAgbGZfb3B0cyA9IGdfbGZfb3B0czsgICAgICAgICAgICAv KiBSZXN0b3JlIGxhYmVsZWQgdHJhbnNmZXIgb3B0aW9ucyAqLwotICAgICAgICBnX2xmX29wdHMg PSAtMTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tfTEFCRUxFRCAqLwotCi0jaWZuZGVmIE5PQ1NFVFMK LSAgICBpZiAodGNzX3NhdmUgPiAtMSkgeyAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIgc2V0 cyAqLwotICAgICAgICB0Y2hhcnNldCA9IHRjc19zYXZlOwotICAgICAgICB0Y3Nfc2F2ZSA9IC0x OwotICAgIH0KLSAgICBpZiAoZmNzX3NhdmUgPiAtMSkgewotICAgICAgICBmY2hhcnNldCA9IGZj c19zYXZlOwotICAgICAgICBmY3Nfc2F2ZSA9IC0xOwotICAgIH0KLSAgICBpZiAoZ194ZnJ4bGEg PiAtMSkgewotCXhmcnhsYSA9IGdfeGZyeGxhOwotCWdfeGZyeGxhID0gLTE7Ci0gICAgfQotICAg IHNldHhsYXR5cGUodGNoYXJzZXQsZmNoYXJzZXQpOyAgICAgIC8qIFRyYW5zbGF0aW9uIHR5cGUg Ki8KLSNlbmRpZiAvKiBOT0NTRVRTICovCi0KLSNpZmRlZiBORVRDT05OCi0jaWZuZGVmIE5PU1BM Ci0gICAgaWYgKGdfcHN3ZCkgewotICAgICAgICBja3N0cm5jcHkocHdidWYsZ19wc3dkLFBXQlVG TCk7Ci0gICAgICAgIG1ha2VzdHIoJmdfcHN3ZCxOVUxMKTsKLSAgICB9Ci0gICAgaWYgKGdfcGZs ZyA+IC0xKSB7Ci0gICAgICAgIHB3ZmxnID0gZ19wZmxnOwotICAgICAgICBnX3BmbGcgPSAtMTsK LSAgICB9Ci0gICAgaWYgKGdfcGNwdCA+IC0xKSB7Ci0gICAgICAgIHB3Y3J5cHQgPSBnX3BjcHQ7 Ci0gICAgICAgIGdfcGNwdCA9IC0xOwotICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotI2VuZGlm IC8qIE5FVENPTk4gKi8KLQotICAgIGlmIChnX2JpbmFyeSA+IC0xKSB7ICAgICAgICAgICAgICAg IC8qIEZpbGUgdHlwZSAqLwotICAgICAgICBiaW5hcnkgPSBnX2JpbmFyeTsKLSAgICAgICAgZ19i aW5hcnkgPSAtMTsKLSAgICB9Ci0gICAgaWYgKGdfeGZlcm1vZGUgPiAtMSkgeyAgICAgICAgICAg ICAgLyogVHJhbnNmZXIgbW9kZSAqLwotICAgICAgICB4ZmVybW9kZSA9IGdfeGZlcm1vZGU7Ci0g ICAgICAgIGdfeGZlcm1vZGUgPSAtMTsKLSAgICB9Ci0jaWZkZWYgUEFUVEVSTlMKLSAgICBpZiAo Z19wYXR0ZXJucyA+IC0xKSB7ICAgICAgICAgICAgICAvKiBGaWxlbmFtZSBwYXR0ZXJucyAqLwot ICAgICAgICBwYXR0ZXJucyA9IGdfcGF0dGVybnM7Ci0gICAgICAgIGdfcGF0dGVybnMgPSAtMTsK LSAgICB9Ci0jZW5kaWYgLyogUEFUVEVSTlMgKi8KLQotICAgIGlmIChnX3VzZXBpcGVzID4gLTEp IHsKLSAgICAgICAgdXNlcGlwZXMgPSBnX3VzZXBpcGVzOwotICAgICAgICBnX3VzZXBpcGVzID0g LTE7Ci0gICAgfQotICAgIGlmIChnX21hdGNoZG90ID4gLTEpIHsKLSAgICAgICAgbWF0Y2hkb3Qg PSBnX21hdGNoZG90OwotICAgICAgICBnX21hdGNoZG90ID0gLTE7Ci0gICAgfQotICAgIGlmIChn X3Byb3RvID4gLTEpIHsgICAgICAgICAgICAgICAgIC8qIFByb3RvY29sICovCi0gICAgICAgIHBy b3RvY29sID0gZ19wcm90bzsKLSAgICAgICAgZ19wcm90byA9IC0xOwotICAgIH0KLSAgICBpZiAo Z191cnBzaXogPiAtMSkgewotICAgICAgICB1cnBzaXogPSBnX3VycHNpejsKLSAgICAgICAgZGVi dWcoRjEwMSwiZnRyZXNldCByZXN0b3JpbmcgdXJwc2l6IiwiIix1cnBzaXopOwotICAgICAgICBn X3VycHNpeiA9IC0xOwotICAgIH0KLSAgICBpZiAoZ19zcHNpemYgPiAtMSkgewotICAgICAgICBz cHNpemYgPSBnX3Nwc2l6ZjsKLSAgICAgICAgZGVidWcoRjEwMSwiZnRyZXNldCByZXN0b3Jpbmcg c3BzaXpmIiwiIixzcHNpemYpOwotICAgICAgICBnX3Nwc2l6ZiA9IC0xOwotICAgIH0KLSAgICBp ZiAoZ19zcHNpeiA+IC0xKSB7Ci0gICAgICAgIHNwc2l6ID0gZ19zcHNpejsKLSAgICAgICAgZGVi dWcoRjEwMSwiZnRyZXNldCByZXN0b3Jpbmcgc3BzaXoiLCIiLHNwc2l6KTsKLSAgICAgICAgZ19z cHNpeiA9IC0xOwotICAgIH0KLSAgICBpZiAoZ19zcHNpenIgPiAtMSkgewotICAgICAgICBzcHNp enIgPSBnX3Nwc2l6cjsKLSAgICAgICAgZGVidWcoRjEwMSwiZnRyZXNldCByZXN0b3Jpbmcgc3Bz aXpyIiwiIixzcHNpenIpOwotICAgICAgICBnX3Nwc2l6ciA9IC0xOwotICAgIH0KLSAgICBpZiAo Z19zcG1heCA+IC0xKSB7Ci0gICAgICAgIHNwbWF4ID0gZ19zcG1heDsKLSAgICAgICAgZ19zcG1h eCA9IC0xOwotICAgIH0KLSAgICBpZiAoZ193c2xvdHIgPiAtMSkgewotICAgICAgICB3c2xvdHIg PSBnX3dzbG90cjsKLSAgICAgICAgZ193c2xvdHIgPSAtMTsKLSAgICB9Ci0gICAgaWYgKGdfcHJl Zml4aW5nID4gLTEpIHsKLSAgICAgICAgcHJlZml4aW5nID0gZ19wcmVmaXhpbmc7Ci0gICAgICAg IGdfcHJlZml4aW5nID0gLTE7Ci0gICAgfQotICAgIGlmIChnX2ZuY2FjdCA+IC0xKSB7Ci0gICAg ICAgIGZuY2FjdCA9IGdfZm5jYWN0OwotICAgICAgICBnX2ZuY2FjdCA9IC0xOwotICAgIH0KLSAg ICBpZiAoZ19mbmNudiA+IC0xKSB7Ci0gICAgICAgIGZuY252ID0gZ19mbmNudjsKLSAgICAgICAg Z19mbmNudiA9IC0xOwotICAgIH0KLSAgICBpZiAoZ19mbnNwYXRoID4gLTEpIHsKLSAgICAgICAg Zm5zcGF0aCA9IGdfZm5zcGF0aDsKLSAgICAgICAgZ19mbnNwYXRoID0gLTE7Ci0gICAgfQotICAg IGlmIChnX2ZucnBhdGggPiAtMSkgewotICAgICAgICBmbnJwYXRoID0gZ19mbnJwYXRoOwotICAg ICAgICBnX2ZucnBhdGggPSAtMTsKLSAgICB9Ci0gICAgaWYgKGdfc2tpcGJ1cCA+IC0xKSB7Ci0g ICAgICAgIHNraXBidXAgPSBnX3NraXBidXA7Ci0gICAgICAgIGdfc2tpcGJ1cCA9IC0xOwotICAg IH0KLSAgICBub2xpbmtzID0gMjsJCQkvKiAvRk9MTE9XTElOS1MgaXMgbmV2ZXIgZ2xvYmFsICov Ci0gICAgcmVjdXJzaXZlID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogL1JFQ1VSU0lWRSBj YW4gbmV2ZXIgYmUgZ2xvYmFsICovCi0gICAgeGZpbGV0eXBlID0gLTE7Ci0KLSAgICBpZiAoZ19k aXNwbGEgPiAtMSkgeyAgICAgICAgICAgICAgICAvKiBGaWxlIHRyYW5zZmVyIGRpc3BsYXkgKi8K LSAgICAgICAgZmRpc3BsYSA9IGdfZGlzcGxhOwotICAgICAgICBnX2Rpc3BsYSA9IC0xOwotICAg IH0KLSAgICBpZiAoZ19zcGF0aCA+IC0xKSB7ICAgICAgICAgICAgICAgICAvKiBTZW5kIHBhdGhu YW1lcyAqLwotICAgICAgICBmbnNwYXRoID0gZ19zcGF0aDsKLSAgICAgICAgZ19zcGF0aCA9IC0x OwotICAgIH0KLSAgICBpZiAoZ19ycGF0aCA+IC0xKSB7ICAgICAgICAgICAgICAgICAvKiBSZWNl aXZlIHBhdGhuYW1lcyAqLwotICAgICAgICBmbnJwYXRoID0gZ19ycGF0aDsKLSAgICAgICAgZ19y cGF0aCA9IC0xOwotICAgIH0KLSAgICBpZiAoZ19mbmNudiA+IC0xKSB7ICAgICAgICAgICAgICAg ICAvKiBGaWxlbmFtZSBjb252ZXJzaW9uICovCi0gICAgICAgIGZuY252ID0gZ19mbmNudjsKLSAg ICAgICAgZ19mbmNudiA9IC0xOwotICAgIH0KLSNpZmRlZiBQSVBFU0VORAotICAgIG1ha2VzdHIo JnNuZGZpbHRlcixnX3NmaWx0ZXIpOyAgICAgIC8qIFNlbmQgZmlsdGVyICovCi0gICAgbWFrZXN0 cigmcmN2ZmlsdGVyLGdfcmZpbHRlcik7ICAgICAgLyogUmVjZWl2ZSBmaWx0ZXIgKi8KLSNlbmRp ZiAvKiBQSVBFU0VORCAqLwotCi0jaWZuZGVmIE5PRlJJTExTCi0gICAgcm1haWxmID0gcnByaW50 ZiA9IDA7ICAgICAgICAgICAgICAgLyogTUFJTCBhbmQgUFJJTlQgbW9kaWZpZXJzIGZvciBTRU5E ICovCi0gICAgb3B0YnVmWzBdID0gTlVMOyAgICAgICAgICAgICAgICAgICAgLyogTUFJTCBhbmQg UFJJTlQgb3B0aW9ucyAqLwotI2VuZGlmIC8qIE5PRlJJTExTICovCi0KLSAgICBtb3ZpbmcgPSAw OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBkZWxldGUtYWZ0ZXItc2VuZCBpbmRp Y2F0b3IgKi8KLSAgICBzbmRhZnRlclswXSAgPSBOVUw7ICAgICAgICAgICAgICAgICAvKiBSZXNl dCBTRU5EIHNlbGVjdGlvbiBzd2l0Y2hlcyAqLwotICAgIHNuZGJlZm9yZVswXSA9IE5VTDsKLQot ICAgIGZvciAoaSA9IDA7IGkgPCBOU05ERVhDRVBUOyBpKyspIHsKLSAgICAgICAgaWYgKHNuZGV4 Y2VwdFtpXSkKLSAgICAgICAgICBmcmVlKHNuZGV4Y2VwdFtpXSk7Ci0gICAgICAgIHNuZGV4Y2Vw dFtpXSA9IE5VTEw7Ci0gICAgICAgIGlmIChyY3ZleGNlcHRbaV0pCi0gICAgICAgICAgZnJlZShy Y3ZleGNlcHRbaV0pOwotICAgICAgICByY3ZleGNlcHRbaV0gPSBOVUxMOwotICAgIH0KLSAgICBz bmRsYXJnZXIgPSAgKENLX09GRl9UKS0xOwotICAgIHNuZHNtYWxsZXIgPSAoQ0tfT0ZGX1QpLTE7 Ci0gICAgZGVidWcoRjEwMSwicHJlc2VudCBzbmRzbWFsbGVyIiwiIixzbmRzbWFsbGVyKTsKLSNp ZmRlZiBHRlRJTUVSCi0gICAgZ3R2ID0gLTEuMDsKLSAgICBvbGRndHYgPSAtMS4wOwotI2Vsc2UK LSAgICBndHYgPSAtMUw7Ci0gICAgb2xkZ3R2ID0gLTFMOwotI2VuZGlmIC8qIEdGVElNRVIgKi8K LSNlbmRpZiAvKiBOT0lDUCAqLwotfQotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi1jaGFyICoKLXR0 Z3RwbigpIHsJCQkJLyogR2V0IHR5cGljYWwgcG9ydCBuYW1lICovCi0vKgotICBJZGVhbGx5IHRo aXMgcm91dGluZSB3b3VsZCBiZSBpbXBsZW1lbnRlZCBpbiBlYWNoIG9mIHRoZSBja3U/aW8uKiBt b2R1bGVzLAotICBidXQgdGhhdCByZXF1aXJlcyBjaGFuZ2luZyB0aGUgQVBJIGRlZmluaXRpb24u Ci0qLwotICAgIHJldHVybigKLSNpZmRlZiBPUzIKLSNpZmRlZiBPUzJPTkxZCi0iQ09NMSIKLSNl bHNlICAvKiBPUzJPTkxZICovCi0iVEFQSSBbIG5hbWUgXSBvciBDT00xIgotI2VuZGlmIC8qIE9T Mk9OTFkgKi8KLSNlbHNlICAvKiBPUzIgKi8KLSNpZmRlZiBWTVMKLSJUWEEwOiwgVFRBMDosIG9y IExUQTA6IgotI2Vsc2UgIC8qIFZNUyAqLwotI2lmZGVmIFNPTEFSSVMKLSIvZGV2L2N1YS9hIgot I2Vsc2UgIC8qIFNPTEFSSVMgKi8KLSNpZmRlZiBIUFVYMTAKLSIvZGV2L2N1YTBwMCIKLSNlbHNl ICAvKiBIUFVYMTAgKi8KLSNpZmRlZiBIUFVYCi0iL2Rldi9jdWEwMCIKLSNlbHNlICAvKiBIUFVY ICovCi0jaWZkZWYgX19GcmVlQlNEX18KLSIvZGV2L2N1YWEwIgotI2Vsc2UgIC8qIF9fRnJlZUJT RF9fICovCi0jaWZkZWYgX19saW51eF9fCi0iL2Rldi90dHlTMCIKLSNlbHNlICAvKiBfX2xpbnV4 X18gKi8KLSNpZmRlZiBCU0Q0NAotIi9kZXYvdHR5MDAiCi0jZWxzZSAgLyogQlNENDQgKi8KLSNp ZmRlZiBPU0sKLSIvdDEiCi0jZWxzZSAgLyogT1NLICovCi0jaWZkZWYgUU5YCi0iL2Rldi9zZXIx IgotI2Vsc2UgIC8qIFFOWCAqLwotI2lmZGVmIFFOWDYKLSIvZGV2L3NlcjEiCi0jZWxzZSAgLyog UU5YNiAqLwotI2lmZGVmIFVOSVhXQVJFCi0iL2Rldi90ZXJtLzAwIG9yIC9kZXYvdHR5MDAiCi0j ZWxzZSAgLyogVU5JWFdBUkUgKi8KLSNpZmRlZiBDS19TQ09WNQotIi9kZXYvdHR5MUEiCi0jZWxz ZSAgLyogQ0tfU0NPVjUgKi8KLSNpZmRlZiBDS19TQ08zMlY0Ci0iL2Rldi90dHkxQSIKLSNlbHNl ICAvKiBDS19TQ08zMlY0ICovCi0jaWZkZWYgTV9YRU5JWAotIi9kZXYvdHR5MUEiCi0jZWxzZSAg LyogTV9YRU5JWCAqLwotI2lmZGVmIEFJWFJTCi0iL2Rldi90dHkwIgotI2Vsc2UgIC8qIEFJWFJT ICovCi0jaWZkZWYgREdVWAotIi9kZXYvdHR5MDAiCi0jZWxzZSAgLyogREdVWCAqLwotI2lmZGVm IGRhdGFnZW5lcmFsCi0iQGNvbjEiCi0jZWxzZSAgLyogZGF0YWdlbmVyYWwgKi8KLSNpZmRlZiBJ UklYCi0iL2Rldi90dHltMCIKLSNlbHNlICAvKiBJUklYICovCi0jaWZkZWYgU1VOT1M0Ci0iL2Rl di90dHloMCIKLSNlbHNlICAvKiBTVU5PUzQgKi8KLSNpZmRlZiBTVjY4UjNWNgotIi9kZXYvc2Nj MCIKLSNlbHNlICAvKiBTVjY4UjNWNiAqLwotI2lmZGVmIE1PVFNWODhSNAotIi9kZXYvY29udHR5 MDAiCi0jZWxzZSAgLyogTU9UU1Y4OFI0ICovCi0jaWZkZWYgTkVYVAotIi9kZXYvY3VmYSIKLSNl bHNlCi0jaWZkZWYgT1NGCi0iL2Rldi90dHlkMSIKLSNlbHNlCi0jaWZkZWYgU0lOSVgKLSIvZGV2 L3R0eWMxIgotI2Vsc2UKLSNpZmRlZiBVTklYCi0iL2Rldi9jdWEsIC9kZXYvYWN1LCAvZGV2L3R0 eTAsIGV0YyIKLSNlbHNlICAvKiBVTklYICovCi0iKHNvcnJ5IG5vIGV4YW1wbGUgYXZhaWxhYmxl KSIKLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogU0lOSVggKi8KLSNlbmRpZiAvKiBPU0Yg Ki8KLSNlbmRpZiAvKiBORVhUICovCi0jZW5kaWYgLyogTU9UU1Y4OFI0ICovCi0jZW5kaWYgLyog U1Y2OFIzVjYgKi8KLSNlbmRpZiAvKiBTVU5PUzQgKi8KLSNlbmRpZiAvKiBJUklYICovCi0jZW5k aWYgLyogZGF0YWdlbmVyYWwgKi8KLSNlbmRpZiAvKiBER1VYICovCi0jZW5kaWYgLyogQUlYICov Ci0jZW5kaWYgLyogTV9YRU5JWCAqLwotI2VuZGlmIC8qIENLX1NDTzMyVjQgKi8KLSNlbmRpZiAv KiBDS19TQ09WNSAqLwotI2VuZGlmIC8qIFVOSVhXQVJFICovCi0jZW5kaWYgLyogUU5YNiAqLwot I2VuZGlmIC8qIFFOWCAqLwotI2VuZGlmIC8qIE9TSyAqLwotI2VuZGlmIC8qIEJTRDQ0ICovCi0j ZW5kaWYgLyogX19saW51eF9fICovCi0jZW5kaWYgLyogX19GcmVlQlNEX18gKi8KLSNlbmRpZiAv KiBIUFVYICovCi0jZW5kaWYgLyogSFBVWDEwICovCi0jZW5kaWYgLyogU09MQVJJUyAqLwotI2Vu ZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIE9TMiAqLwotCSAgICk7Ci19Ci0KLS8qICBDIEsgXyBF IFIgUiBTIFQgUiAgLS0gIFJldHVybiBtZXNzYWdlIGZyb20gbW9zdCByZWNlbnQgc3lzdGVtIGVy cm9yICovCi0KLSNpZmRlZiBDS1JPT1QKLWV4dGVybiBpbnQgY2tyb290ZXJyOwotI2VuZGlmIC8q IENLUk9PVCAqLwotCi1jaGFyICoKLWNrX2VycnN0cigpIHsKLSNpZmRlZiBVU0VfU1RSRVJST1IK LSNpZm5kZWYgQ0tfQU5TSUxJQlMKLSAgICAvKiBTaG91bGQgaGF2ZSBiZWVuIGRlY2xhcmVkIGlu IDxzdHJpbmcuaD4gKi8KLV9QUk9UT1RZUCggY2hhciAqIHN0cmVycm9yLCAoaW50KSApOwotI2Vu ZGlmIC8qIENLX0FOU0lMSUJTICovCi0jaWZkZWYgQ0tST09UCi0gICAgaWYgKGNrcm9vdGVycikK LSAgICAgIHJldHVybigiT2ZmIGxpbWl0cyIpOwotI2VuZGlmIC8qIENLUk9PVCAqLwotICAgIHJl dHVybihzdHJlcnJvcihlcnJubykpOwotI2Vsc2UgIC8qICFVU0VfU1RSRVJST1IgKi8KLSNpZmRl ZiBWTVMKLSAgICBleHRlcm4gY2hhciAqIGNrdm1zZXJyc3RyKHVuc2lnbmVkIGxvbmcpOwotI2lm ZGVmIENLUk9PVAotICAgIGlmIChja3Jvb3RlcnIpCi0gICAgICByZXR1cm4oIk9mZiBsaW1pdHMi KTsKLSNlbmRpZiAvKiBDS1JPT1QgKi8KLSAgICByZXR1cm4oY2t2bXNlcnJzdHIoMEwpKTsKLSNl bHNlICAvKiAhVk1TICovCi0jaWZkZWYgQlNENDQKLSNpZmRlZiBfXzM4NkJTRF9fCi0jaWZuZGVm IE5EU1lTRVJSTElTVAotICAgIGV4dGVybiBpbnQgc3lzX25lcnI7Ci0gICAgZXh0ZXJuIGNoYXIg KnN5c19lcnJsaXN0W107Ci0jZW5kaWYgLyogTkRTWVNFUlJMSVNUICovCi0jZWxzZSAgLyogIV9f Mzg2QlNEX18gKi8KLSNpZm5kZWYgX19ic2RpX18KLSNpZm5kZWYgTkRTWVNFUlJMSVNUCi0gICAg ZXh0ZXJuIGludCBzeXNfbmVycjsKLSAgICBleHRlcm4gY29uc3QgY2hhciAqY29uc3Qgc3lzX2Vy cmxpc3RbXTsKLSNlbmRpZiAvKiBORFNZU0VSUkxJU1QgKi8KLSNlbmRpZiAvKiBfX2JzZGlfXyAq LwotI2VuZGlmIC8qIF9fMzg2QlNEX18gKi8KLSNpZmRlZiBDS1JPT1QKLSAgICBpZiAoY2tyb290 ZXJyKQotICAgICAgcmV0dXJuKCJPZmYgbGltaXRzIik7Ci0gICAgZWxzZQotI2VuZGlmIC8qIENL Uk9PVCAqLwotICAgIGlmIChlcnJubyA+PSBzeXNfbmVycikKLSAgICAgIHJldHVybigiRXJyb3Ig bnVtYmVyIG91dCBvZiByYW5nZSIpOwotICAgIGVsc2UKLSAgICAgIHJldHVybigoY2hhciAqKSBz eXNfZXJybGlzdFtlcnJub10pOwotI2Vsc2UgLyogIUJTRDQ0ICovCi0jaWZkZWYgQVRUU1YKLSNp Zm5kZWYgTkRTWVNFUlJMSVNUCi0gICAgZXh0ZXJuIGludCBzeXNfbmVycjsKLSAgICBleHRlcm4g Y2hhciAqc3lzX2Vycmxpc3RbXTsKLSNlbmRpZiAvKiBORFNZU0VSUkxJU1QgKi8KLSNpZmRlZiBD S1JPT1QKLSAgICBpZiAoY2tyb290ZXJyKQotICAgICAgcmV0dXJuKCJPZmYgbGltaXRzIik7Ci0g ICAgZWxzZQotI2VuZGlmIC8qIENLUk9PVCAqLwotICAgIGlmIChlcnJubyA+PSBzeXNfbmVycikK LSAgICAgIHJldHVybigiRXJyb3IgbnVtYmVyIG91dCBvZiByYW5nZSIpOwotICAgIGVsc2UKLSAg ICAgIHJldHVybigoY2hhciAqKSBzeXNfZXJybGlzdFtlcnJub10pOwotI2Vsc2UgLyogIUFUVFNW ICovCi0jaWZkZWYgQlNENAotI2lmbmRlZiBORFNZU0VSUkxJU1QKLSAgICBleHRlcm4gaW50IHN5 c19uZXJyOwotICAgIGV4dGVybiBjaGFyICpzeXNfZXJybGlzdFtdOwotI2VuZGlmIC8qIE5EU1lT RVJSTElTVCAqLwotI2lmZGVmIENLUk9PVAotICAgIGlmIChja3Jvb3RlcnIpCi0gICAgICByZXR1 cm4oIk9mZiBsaW1pdHMiKTsKLSAgICBlbHNlCi0jZW5kaWYgLyogQ0tST09UICovCi0gICAgaWYg KGVycm5vID49IHN5c19uZXJyKQotICAgICAgcmV0dXJuKCJFcnJvciBudW1iZXIgb3V0IG9mIHJh bmdlIik7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKChjaGFyICopIHN5c19lcnJsaXN0W2Vycm5v XSk7Ci0jZWxzZQotI2lmZGVmIE9TMgotI2lmbmRlZiBORFNZU0VSUkxJU1QKLSAgICBleHRlcm4g Y2hhciAqc3lzX2Vycmxpc3RbXTsKLSNlbmRpZiAvKiBORFNZU0VSUkxJU1QgKi8KLSNpZmRlZiBO VAotICAgIGV4dGVybiBpbnRfc3lzX25lcnI7Ci0jZW5kaWYgLyogTlQgKi8KLSAgICBjaGFyICpl OwotI2lmZGVmIENLUk9PVAotICAgIGlmIChja3Jvb3RlcnIpCi0gICAgICByZXR1cm4oIk9mZiBs aW1pdHMiKTsKLSNlbmRpZiAvKiBDS1JPT1QgKi8KLSAgICBlID0gKGVycm5vID4gLTEKLSNpZmRl ZiBOVAotICAgICAgICAgJiYgZXJybm8gPD0gX3N5c19uZXJyCi0jZW5kaWYgLyogTlQgKi8KLSAg ICAgICAgICkgPwotI2lmZGVmIE5UCi0gICAgICAgICAoY2hhciAqKSBzeXNfZXJybGlzdFtlcnJu b10KLSNlbHNlIC8qIE5UICovCi0gICAgICAgICAvKiBJIGRvbid0IGtub3cgaG93IHRvIGdldCBh IENMSUIgZXJyb3Igc3RyaW5nIGluIE9TLzIgKi8KLSAgICAgICAgIHN0cmVycm9yKGVycm5vKQot I2VuZGlmIC8qIE5UICovCi0gICAgICAgICAgICAgOiAiIjsKLSAgICByZXR1cm4oZSA/IGUgOiAi Iik7Ci0jZWxzZSAvKiBPUzIgKi8KLSAgICByZXR1cm4oIiIpOwotI2VuZGlmIC8qIE9TMiAqLwot I2VuZGlmIC8qIEJTRDQgKi8KLSNlbmRpZiAvKiBBVFRTViAqLwotI2VuZGlmIC8qIEJTRDQ0ICov Ci0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogVVNFX1NUUkVSUk9SICovCi19Ci0KLSNpZmRl ZiBQQVRURVJOUwotLyoKLSAgRmlsZW5hbWUgcGF0dGVybiByZWNvZ25pdGlvbiBsaXN0cyBmb3Ig YXV0b21hdGljIHRleHQvYmluYXJ5IHN3aXRjaGluZy4KLSAgVGhlc2UgYXJlIHNvbWV3aGF0IHBh c3NlIGFmdGVyIHRoZSBhZGRpdGlvbiBvZiBzY2FuZmlsZSgpICAoNy4wKS4KLSAgQnV0IHdpdGgg dGhlIGFkZGl0aW9uIG9mIEZUUCBbTV1HRVQsIHRoZXkncmUgYmFjayBpbiBzdHlsZSAoOC4wKS4K LQotICBBbHRob3VnaCwgd2l0aCBGVFAgdGhlIGxpc3RzIG5lZWQgdG8gYmUgdXNlZCBpbiB0aGUg cmV2ZXJzZS4gIFdpdGgKLSAgS2VybWl0IHRoZSBsaXN0IGlzIHVzZWQgdG8gaW1wbHkgdGhlIHR5 cGVzIG9mIHRoZSBsb2NhbCBzeXN0ZW0uICBXaGVyZWFzCi0gIHdpdGggRlRQLCB0aGUgbGlzdCBt dXN0IGJlIHVzZWQgdG8gaW1wbHkgdGhlIHR5cGUgb2YgdGhlIHJlbW90ZSBzeXN0ZW0uCi0gIFRo ZXJlZm9yZSwgYWxsIHBsYXRmb3JtcyBtdXN0IG5vdyBzdXBwb3J0IGFsbCBvZiB0aGUgbGlzdHMu Ci0qLwotY2hhciAqdHh0cGF0dGVybnNbRlRQQVRURVJOUysxXSA9IHsgTlVMTCwgTlVMTCB9Owot Y2hhciAqYmlucGF0dGVybnNbRlRQQVRURVJOUysxXSA9IHsgTlVMTCwgTlVMTCB9OwotLyoKLSAg RGVmYXVsdCBwYXR0ZXJuIGxpc3RzIGZvciBlYWNoIHBsYXRmb3JtLi4uCi0KLSAgTk9URTogSW4g bW9zdCBjYXNlcyB3ZSBsZWF2ZSAiLmhscCIsICIuaW5pIiwgYW5kICIuc2NyIiBhbG9uZTsgYWx0 aG91Z2ggdGhleQotICBhcmUgdHJhZGl0aW9uYWxseSB0ZXh0IHR5cGVzLCB0aGV5IGFyZSBiaW5h cnkgaW4gV2luZG93cy4gIFNvIHRoZXkgYXJlCi0gIGhhbmRsZWQgYnkgdGhlIHByZXZhaWxpbmcg U0VUIEZJTEUgVFlQRSwgcmF0aGVyIHRoYW4gYXV0b21hdGljYWxseS4KLSAgU2ltaWxhcmx5IGZv ciAiLmRhdCIsICIuaW5mIiwgYW5kIHNvIG9uLiAgQWxzbyAiLnBzIiBzaW5jZSBQb3N0U2NyaXB0 IGZpbGVzCi0gIGFyZSBub3QgYWx3YXlzIHRleHQuICAiLmxvZyIgaXMgb21pdHRlZCBzaW5jZSBs b2dzIGNhbiBiZSB0ZXh0IG9yIGJpbmFyeSwKLSAgZXhjZXB0IGluIFZNUyB0aGV5IGFyZSB1c3Vh bGx5IHRleHQsIGV0YyBldGMuCi0KLSAgTGF0ZXIgKFNlcCAyMDAzKTogQWRkIFBvc3RTY3JpcHQg dG8gYmluYXJ5IHBhdHRlcm5zLgotKi8KLXN0YXRpYyBjaGFyICp0eHRwW1NZU19NQVhdW0ZUUEFU VEVSTlNdID0gewotICAgIC8qIFVOS05PV04gKi8gewotCU5VTEwsIE5VTEwKLSAgICB9LAotICAg IHsJCQkJCS8qIFVOSVggKi8KLSAgICAiKi50eHQiLCIqLmMiLCIqLmgiLCIqLnIiLCIqLnciLCIq LmNwcCIsIiouY2MiLCIqLmtzYyIsIiouYndyIiwiKi51cGQiLAotICAgICIqLmh0bWwiLCIqLmh0 bSIsIioubXNzIiwiKi50ZXgiLCIqLm5yIiwiW01tXWFrZWZpbGUiLCAiKi5oZXgiLCAiKi5ocXgi LAotICAgICIqLmZvciIsIiouZjc3IiwiKi5mIiwiKi5GIiwiKi5zIiwiKi5wYXMiLCIqLmphdmEi LCIqLmVsIiwiKi5saXNwIiwiKi5zaCIsCi0gICAgIioubTQiLCIqLnBlcmwiLCIqLnBsIiwiKi5w b2QiLCIqLnBtIiwiKi5hd2siLCIqLnNubyIsIiouc3B0IiwiKi5zZWQiLAotICAgICIqLmtzYyIs IiouVFhUIiwgIipyZWFkLm1lIiwgIipSRUFELk1FIiwgIi4qIiwgIiovLioiLCAiKi5tZW0iLCIq Lm1hYyIsCi0gICAgTlVMTAotICAgIH0sCi0gICAgewkJCQkJLyogV0lOMzIgKi8KLSAgICAiKi50 eHQiLCIqLmtzYyIsIiouaHRtIiwiKi5odG1sIiwiKi5iYXQiLCIqLmNtZCIsIiouamF2IiwiKi5h c20iLCAiKi5oZXgiLAotICAgICIqLmhxeCIsICIqLmMiLCAiKi5oIiwgIiouY3BwIiwgIiouaHBw IiwgIiouY3h4IiwgIiouY3h4IiwgIioudyIsCi0gICAgIiouamF2YSIsICIqLmJ3ciIsICIqLnVw ZCIsICIqLm1hayIsICJyZWFkLm1lIiwgIioubWFwIiwgIm1ha2VmaWxlIiwKLSAgICAiKi5tZW0i LCIqLm1hYyIsIiouY2MiLCIqLnBsIiwiKi5wb2QiLCIqLnBtIiwiKi5tNCIsTlVMTAotICAgIH0s Ci0gICAgewkJCQkJLyogVk1TICovCi0gICAgIiouY29tIiwiKi50eHQiLCIqLmMiLCAgIiouZm9y IiwiKi5wYXMiLCIqLnJubyIsIioucm5oIiwiKi5tYXIiLCIqLmJsaSIsCi0gICAgIiouaGxwIiwi Ki5tc3MiLCIqLmRvYyIsIiouYndyIiwiKi5jbGQiLCIqLmhleCIsIiouYmFzIiwiKi5pbmkiLCIq LmxvZyIsCi0gICAgIioubW1zIiwiKi5vcHQiLCIqLmtzYyIsIioucGVybCIsIioucGwiLCIqLnBv ZCIsIioucG0iLCIqLnNubyIsIiouc3B0IiwKLSAgICAiKi5tZW0iLE5VTEwKLSAgICB9LAotICAg IHsJCQkJCS8qIE9TMiAqLwotICAgICIqLnR4dCIsIioua3NjIiwiKi5odG0iLCIqLmh0bWwiLCIq LmJhdCIsIiouY21kIiwiKi5qYXYiLCIqLmFzbSIsICIqLmhleCIsCi0gICAgIiouaHF4IiwgIiou YyIsICIqLmgiLCAiKi5jcHAiLCAiKi5ocHAiLCAiKi5jeHgiLCAiKi5jeHgiLCAiKi53IiwKLSAg ICAiKi5qYXZhIiwgIiouYndyIiwgIioudXBkIiwgIioubWFrIiwgInJlYWQubWUiLCAiKi5tYXAi LCAibWFrZWZpbGUiLAotICAgIE5VTEwKLSAgICB9LAotICAgIHsJCQkJCS8qIERPUyAqLwotICAg ICIqLnR4dCIsIioua3NjIiwiKi5odG0iLCIqLmJhdCIsIiouY21kIiwiKi5qYXYiLCIqLmFzbSIs ICIqLmhleCIsCi0gICAgIiouaHF4IiwgIiouYyIsICIqLmgiLCAiKi5jcHAiLCAiKi5ocHAiLCAi Ki5jeHgiLCAiKi5jeHgiLCAiKi53IiwKLSAgICAiKi5id3IiLCAiKi51cGQiLCAiKi5tYWsiLCAi cmVhZC5tZSIsICIqLm1hcCIsICJtYWtlZmlsZSIsIE5VTEwKLSAgICB9LAotICAgIHsJCQkJCS8q IFRPUFMtMTAgKi8KLSAgICAiKi5jbWQiLCIqLmhscCIsIiouZG9jIiwiKi5pbmkiLCIqLnR4dCIs IioubWFjIiwiKi5mb3IiLCIqLnNhaSIsIiouYmxpIiwKLSAgICAiKi5wYXMiLCIqLnNubyIsIiou c3B0IiwiKi5wY2wiLCIqLm1zcyIsIioucm5vIiwiKi5iMzYiLCIqLnRleCIsIioucHViIiwKLSAg ICAiKi5yZXEiLCIqLnIzNiIsIioubWVtIiwiKi5id3IiLCIqLmNjbCIsIiouY3RsIiwiKi5ybmgi LCIqLmtzYyIsTlVMTAotICAgIH0sCi0gICAgewkJCQkJLyogVE9QUy0yMCAqLwotICAgICIqLmNt ZCIsIiouaGxwIiwiKi5kb2MiLCIqLmluaSIsIioudHh0IiwiKi5tYWMiLCIqLmZvciIsIiouc2Fp IiwiKi5ibGkiLAotICAgICIqLnBhcyIsIiouc25vIiwiKi5zcHQiLCIqLnBjbCIsIioubXNzIiwi Ki5ybm8iLCIqLmIzNiIsIioudGV4IiwiKi5wdWIiLAotICAgICIqLnJlcSIsIioucjM2IiwiKi5t ZW0iLCIqLmJ3ciIsIiouY2NsIiwiKi5jdGwiLCIqLnJuaCIsIioua3NjIixOVUxMCi0gICAgfSwK LSAgICB7CQkJCQkvKiBTVFJBVFVTIFZPUyAqLwotICAgICIqLnR4dCIsIioua3NjIiwiKi5odG0i LCIqLmh0bWwiLCIqLmJhdCIsICIqLmNtZCIsIiouamF2IiwiKi5hc20iLCIqLmhleCIsCi0gICAg IiouaHF4IiwiKi5jIiwgICIqLmgiLCAgIioudyIsICAgIiouamF2YSIsIiouYndyIiwiKi51cGQi LCIqLnR0cCIsIiouY20iLAotICAgICIqLnBsMSIsIiouZW1hY3MiLCAicmVhZC5tZSIsICIqLnBs IiwgIm1ha2VmaWxlIiwgTlVMTAotICAgIH0sCi0gICAgewkJCQkJLyogREcgQU9TL1ZTICovCi0g ICAgIioudHh0IiwgIiouYyIsICIqLmgiLCAiKi53IiwgIiouZXIiLCAiKi5id3IiLCAiKi51cGQi LCAicmVhZC5tZSIsCi0gICAgIiouY2xpIiwgIioua3NjIiwgTlVMTAotICAgIH0sCi0gICAgewkJ CQkJLyogT1NLICovCi0gICAgIiouYyIsIiouY3BwIiwiKi5oIiwiKi5hIiwiKmFrZWZpbGUiLCAv KiBwcm9ncmFtIHNvdXJjZXMgKi8KLSAgICAiKi5mb3IiLCIqLmY3NyIsIiouZiIsIiouRiIsIiou cyIsIioucGFzIiwiKi5qYXZhIiwiKi5lbCIsIioubGlzcCIsCi0gICAgIiouc2giLCIqLnBlcmwi LCIqLmF3ayIsIiouc25vIiwiKi5zcHQiLCIqLnNlZCIsCi0gICAgIioudHh0IiwiKi53IiwJCQkv KiBnZW5lcmFsIHRleHQgKi8KLSAgICAiKi5rc2MiLCIqLmJ3ciIsIioudXBkIiwKLSAgICAiKi5o dG1sIiwiKi5odG0iLCIqLm1zcyIsIioudGV4IiwiKi5uciIsIiouaGV4IiwgIiouaHF4IiwKLSAg ICAiKi5UWFQiLCAiKnJlYWQubWUiLCAiKlJFQUQuTUUiLCAiLioiLCAiKi8uKiIsCi0gICAgTlVM TAotICAgIH0KLX07Ci0KLS8qIE5vdGU6IC5ET0MgYWRkZWQgdG8gKHNvbWUpIGJpbmFyeSBwYXR0 ZXJucyBKdW5lIDE5OTguLi4gTWljcm9zb2Z0IHdpbnMuICovCi0KLXN0YXRpYyBjaGFyICpiaW5w W1NZU19NQVhdW0ZUUEFUVEVSTlNdID0gewotICAgIHsJCQkJCS8qIFVOS05PV04gKi8KLSAgICBO VUxMLCBOVUxMCi0gICAgfSwKLSAgICB7CQkJCQkvKiBVTklYICovCi0gICAgIiouZ3oiLCIqLloi LCIqLnRneiIsIiouZ2lmIiwgIioudGFyIiwiKi56aXAiLCIqLm8iLCIqLnNvIiwiKi5hIiwiKi5v dXQiLAotICAgICIqLmV4ZSIsICIqLmpwZyIsICIqLmpwZWciLCAiKi50aWYiLCIqLnRpZmYiLCAi Ki5wZGYiLCAiKi5zby4qIiwgIiouY2xhc3MiLAotICAgICIqLnJwbSIsICIqLmJtcCIsICIqLmJ6 MiIsICIqLkJNUCIsICIqLmRsbCIsICIqLmRvYyIsICIqLnZ4ZCIsICIqLmRjeCIsCi0gICAgIiou eGwqIiwgIioubHpoIiwgIioubGh6IiwgIiouYXUiLCAiKi52b2MiLCAiKi5tcGciLCAiKi5tcGVn IiwiW3drXWVybWl0IiwKLSAgICAiKi5wcyIsIE5VTEwKLSAgICB9LAotICAgIHsJCQkJCS8qIFdJ TjMyICovCi0gICAgIiouZXhlIiwgIiouemlwIiwgIioub2JqIiwgIiouY29tIiwgIiouZ2lmIiwg IiouanBnIiwgIioud2F2IiwgIioucmFtIiwKLSAgICAiKi5jbGFzcyIsIiouY2xhIiwiKi5kbGwi LCAiKi5kcnYiLCAiKi5vY3giLCAiKi52YngiLCAiKi5saWIiLCAiKi5pY28iLAotICAgICIqLmJt cCIsICIqLnRpZiIsICIqLnRhciIsICIqLmd6IiwgICIqLnRneiIsICIqLnhsKiIsICIqLmRvYyIs ICIqLnZ4ZCIsCi0gICAgIioucGRmIiwgIioubHpoIiwgIioudnhkIiwgIiouc25kIiwgIiouYXUi LCAiKiAudm9jIiwgIioubXBnIiwgIioubXBlZyIsCi0gICAgIioucHMiLCBOVUxMCi0gICAgfSwK LSAgICB7CQkJCQkvKiBWTVMgKi8KLSAgICAiKi5leGUiLCIqLm9iaiIsIiouYmFrIiwiKi5iaW4i LCIqLmFkZiIsIiouc3RiIiwiKi5tYWkiLCIqLnN5cyIsIiouZG1wIiwKLSAgICAiKi5wcyIsICIq LmRhdCIsIioucGFyIiwgTlVMTAotICAgIH0sCi0gICAgewkJCQkJLyogT1MyICovCi0gICAgIiou ZXhlIiwgIiouemlwIiwgIioub2JqIiwgIiouY29tIiwgIiouZ2lmIiwgIiouanBnIiwgIioud2F2 IiwgIioucmFtIiwKLSAgICAiKi5jbGFzcyIsICIqLmNsYSIsICIqLmRsbCIsICIqLmRydiIsICIq Lm9jeCIsICIqLnZieCIsICIqLmxpYiIsICIqLmljbyIsCi0gICAgIiouYm1wIiwgIioudGlmIiwg IioudGFyIiwgIiouZ3oiLCAiKi50Z3oiLCAiKi54bCoiLCAiKi5kb2MiLCAiKi52eGQiLAotICAg ICIqLnBkZiIsICIqLnBzIiwgIioubHpoIiwgTlVMTAotICAgIH0sCi0gICAgewkJCQkJLyogRE9T ICovCi0gICAgIiouZXhlIiwgIiouemlwIiwgIioub2JqIiwgIiouY29tIiwgIiouZ2lmIiwgIiou anBnIiwgIioud2F2IiwgIioucmFtIiwKLSAgICAiKi5jbGEiLCAiKi5kbGwiLCAiKi5kcnYiLCAi Ki5vY3giLCAiKi52YngiLCAiKi5saWIiLCAiKi5pY28iLAotICAgICIqLmJtcCIsICIqLnRpZiIs ICIqLnRhciIsICIqLmd6IiwgIioudGd6IiwgIioueGwqIiwgIiouZG9jIiwgIioudnhkIiwKLSAg ICAiKi5wZGYiLCAiKi5wcyIsICIqLmx6aCIsIE5VTEwKLSAgICB9LAotICAgIHsJCQkJCS8qIFRP UFMxMCAqLwotICAgICIqLmV4ZSIsIiouc2F2IiwiKi5iaW4iLCIqLnJpbSIsIioucmVsIiwiKi51 bnYiLCIqLmxpYiIsIioudGFwIiwiKi5kdmkiLAotICAgICIqLnBzIiwgTlVMTAotICAgIH0sCi0g ICAgewkJCQkJLyogVE9QUzIwICovCi0gICAgIiouZXhlIiwiKi5zYXYiLCIqLmJpbiIsIioucmlt IiwiKi5yZWwiLCIqLnVudiIsIioubGliIiwiKi50YXAiLCIqLmR2aSIsCi0gICAgIioucHMiLCBO VUxMCi0gICAgfSwKLSAgICB7CQkJCQkvKiBTVFJBVFVTIFZPUyAqLwotICAgICIqLmV4ZSIsICIq LnppcCIsICIqLm9iaiIsICIqLmNvbSIsICIqLmdpZiIsICIqLmpwZyIsICIqLndhdiIsICIqLnJh bSIsCi0gICAgIiouY2xhc3MiLCAiKi5jbGEiLCAiKi5kbGwiLCAiKi5kcnYiLCAiKi5vY3giLCAi Ki52YngiLCAiKi5saWIiLCAiKi5pY28iLAotICAgICIqLmJtcCIsICIqLnRpZiIsICIqLnRhciIs ICIqLmd6IiwgIioudGd6IiwgIioueGwqIiwgIiouZG9jIiwgIioudnhkIiwKLSAgICAiKi5wZGYi LCAiKi5wcyIsICIqLmx6aCIsICIqLnBtIiwgTlVMTAotICAgIH0sCi0gICAgewkJCQkJLyogREcg Ki8KLSAgICAiKi5vYiIsICIqLnByIiwgIiouZG1wIiwgIioucHMiLCBOVUxMCi0gICAgfSwKLSAg ICB7IC8qIE9TSyAqLwotICAgICIqLmd6IiwiKi5aIiwiKi56IiwiKi50Z3oiLCIqLmxoeiIsIiou dGFyIiwJLyogYXJjaGl2ZXJzICovCi0gICAgIiouemlwIiwiKi5hciIsIiouem9vIiwiKi5ycG0i LCIqLmx6aCIsCi0gICAgLyogb2JqZWN0IGZpbGVzLCBsaWJyYXJpZXMsIGV4ZWN1dGFibGVzICov Ci0gICAgIiouciIsIioubCIsIiouZXhlIiwgIiouZGxsIiwgIiouc28uKiIsICIqLmNsYXNzIiwK LSAgICAvKiBpbWFnZXMgKi8KLSAgICAiKi5naWYiLCAiKi5qcGciLCAiKi5qcGVnIiwgIioudGlm IiwiKi50aWZmIiwgIioucGRmIiwgIioucHMiLAotICAgICIqLmJtcCIsICIqLmJ6MiIsICIqLkJN UCIsIioucGN4IiwKLSAgICBOVUxMCi0gICAgfQotfTsKLQotLyoKLSAgU2V0IHVwIGRlZmF1bHQg cGF0dGVybiBsaXN0cyBzbyB0aGV5IGNhbiBiZSBmcmVlZCBhbmQgcmUtbWFsbG9jJ2QuCi0gIEVh Y2ggcGF0dGVybiBsaXN0IG11c3QgdGVybWluYXRlZCBieSBhIG51bGwgZWxlbWVudC4KLSovCi1W T0lECi1pbml0cGF0KCkgewotICAgIGludCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBGVFBBVFRF Uk5TOyBpKyspIHsKLSAgICAgICAgdHh0cGF0dGVybnNbaV0gPSBOVUxMOwotICAgICAgICBiaW5w YXR0ZXJuc1tpXSA9IE5VTEw7Ci0gICAgfQotICAgIGZvciAoaSA9IDA7IGkgPCBGVFBBVFRFUk5T OyBpKyspIHsKLSNpZmRlZiBVTklYCi0gICAgICAgIG1ha2VzdHIoJih0eHRwYXR0ZXJuc1tpXSks dHh0cFtTWVNfVU5JWF1baV0pOwotI2Vsc2UgLyogVU5JWCAqLwotI2lmZGVmIE9TMgotI2lmZGVm IE5UCi0gICAgICAgIG1ha2VzdHIoJih0eHRwYXR0ZXJuc1tpXSksdHh0cFtTWVNfV0lOMzJdW2ld KTsKLSNlbHNlIC8qIE5UICovCi0gICAgICAgIG1ha2VzdHIoJih0eHRwYXR0ZXJuc1tpXSksdHh0 cFtTWVNfT1MyXVtpXSk7Ci0jZW5kaWYgLyogTlQgKi8KLSNlbHNlIC8qIE9TMiAqLwotI2lmZGVm IFZNUwotICAgICAgICBtYWtlc3RyKCYodHh0cGF0dGVybnNbaV0pLHR4dHBbU1lTX1ZNU11baV0p OwotI2Vsc2UgLyogVk1TICovCi0jaWZkZWYgU1RSQVRVUwotICAgICAgICBtYWtlc3RyKCYodHh0 cGF0dGVybnNbaV0pLHR4dHBbU1lTX1ZPU11baV0pOwotI2Vsc2UgLyogU1RSQVRVUyAqLwotI2lm ZGVmIGRhdGFnZW5lcmFsCi0gICAgICAgIG1ha2VzdHIoJih0eHRwYXR0ZXJuc1tpXSksdHh0cFtT WVNfREddW2ldKTsKLSNlbHNlIC8qIGRhdGFnZW5lcmFsICovCi0jaWZkZWYgT1NLCi0gICAgICAg IG1ha2VzdHIoJih0eHRwYXR0ZXJuc1tpXSksdHh0cFtTWVNfT1NLXVtpXSk7Ci0jZWxzZSAvKiBP U0sgKi8KLSAgICAgICAgbWFrZXN0cigmKHR4dHBhdHRlcm5zW2ldKSx0eHRwW1NZU19VTktdW2ld KTsKLSNlbmRpZiAvKiBPU0sgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8q IFNUUkFUVVMgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAv KiBVTklYICovCi0gICAgICAgIGlmICghdHh0cFtpXSkKLSAgICAgICAgICBicmVhazsKLSAgICB9 Ci0gICAgZm9yIChpID0gMDsgaSA8IEZUUEFUVEVSTlM7IGkrKykgewotI2lmZGVmIFVOSVgKLSAg ICAgICAgbWFrZXN0cigmKGJpbnBhdHRlcm5zW2ldKSxiaW5wW1NZU19VTklYXVtpXSk7Ci0jZWxz ZSAvKiBVTklYICovCi0jaWZkZWYgT1MyCi0jaWZkZWYgTlQKLSAgICAgICAgbWFrZXN0cigmKGJp bnBhdHRlcm5zW2ldKSxiaW5wW1NZU19XSU4zMl1baV0pOwotI2Vsc2UgLyogTlQgKi8KLSAgICAg ICAgbWFrZXN0cigmKGJpbnBhdHRlcm5zW2ldKSxiaW5wW1NZU19PUzJdW2ldKTsKLSNlbmRpZiAv KiBOVCAqLwotI2Vsc2UgLyogT1MyICovCi0jaWZkZWYgVk1TCi0gICAgICAgIG1ha2VzdHIoJihi aW5wYXR0ZXJuc1tpXSksYmlucFtTWVNfVk1TXVtpXSk7Ci0jZWxzZSAvKiBWTVMgKi8KLSNpZmRl ZiBTVFJBVFVTCi0gICAgICAgIG1ha2VzdHIoJihiaW5wYXR0ZXJuc1tpXSksYmlucFtTWVNfVk9T XVtpXSk7Ci0jZWxzZSAvKiBTVFJBVFVTICovCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICAgICAg bWFrZXN0cigmKGJpbnBhdHRlcm5zW2ldKSxiaW5wW1NZU19ER11baV0pOwotI2Vsc2UgLyogZGF0 YWdlbmVyYWwgKi8KLSNpZmRlZiBPU0sKLSAgICAgICAgbWFrZXN0cigmKGJpbnBhdHRlcm5zW2ld KSxiaW5wW1NZU19PU0tdW2ldKTsKLSNlbHNlIC8qIE9TSyAqLwotICAgICAgICBtYWtlc3RyKCYo YmlucGF0dGVybnNbaV0pLGJpbnBbU1lTX1VOS11baV0pOwotI2VuZGlmIC8qIE9TSyAqLwotI2Vu ZGlmIC8qIGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotI2VuZGlmIC8qIFZN UyAqLwotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIFVOSVggKi8KLSAgICAgICAgaWYgKCFi aW5wW2ldKQotICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotLyoKLSAgbSBhIHQgYyBoIG4g YSBtIGUgIC0tICBDb21wYXJlIGZpbGVuYW1lIHdpdGggdGV4dCAmIGJpbmFyeSBuYW1lIHBhdHRl cm5zLgotCi0gIFJldHVybnM6Ci0gICAgMCBpZiBuYW1lIG1hdGNoZXMgYSB0ZXh0IHBhdHRlcm4g YnV0IG5vdCBhIGJpbmFyeSBwYXR0ZXJuLgotICAgIDEgaWYgbmFtZSBtYXRjaGVzIGEgYmluYXJ5 IHBhdHRlcm4gYnV0IG5vdCBhIHRleHQgcGF0dGVybi4KLSAgIC0xIGlmIG5hbWUgbWF0Y2hlcyBu byBwYXR0ZXJucy4KLSAgIC0yIGlmIG5hbWUgbWF0Y2hlcyBhIGJpbmFyeSBwYXR0ZXJuIGFuZCBh IHRleHQgcGF0dGVybi4KLSovCi1pbnQKLW1hdGNobmFtZShmaWxlbmFtZSwgbG9jYWwsIG9zKSBj aGFyICogZmlsZW5hbWU7IGludCBsb2NhbDsgaW50IG9zOyB7Ci0gICAgaW50IHJjID0gLTE7CQkJ LyogUmV0dXJuIGNvZGUgKi8KLSAgICBjaGFyICogbmFtZSwgKiBwOwotI2lmZGVmIE9TMk9SVU5J WAotICAgIGNoYXIgdG1wYnVmW0NLTUFYUEFUSCsxXTsKLSNlbmRpZiAvKiBPUzJPUlVOSVggKi8K LQotICAgIG5hbWUgPSBmaWxlbmFtZSA/IGZpbGVuYW1lIDogIiI7CS8qIENvcHkgb2Ygb3JpZ2lu YWwgYXJnICovCi0gICAgaWYgKHBhdHRlcm5zICYmICpuYW1lKSB7CQkvKiBJZiBQQVRURVJOUyBP Ti4uLiAqLwotCWludCBpOwotCi0jaWZkZWYgT1MyT1JVTklYCi0JaWYgKGNrbWF0Y2goIiouflsx LTldKn4iLG5hbWUsMSwxKSkgeyAvKiBOYW1lIGhhcyBiYWNrdXAgc3VmZml4PyAqLwotCSAgICBp bnQgazsKLQkgICAgayA9IGNrc3RybmNweSh0bXBidWYsbmFtZSxDS01BWFBBVEgrMSk7IC8qIFll cywgY29weSBhbmQgc3RyaXAgKi8KLQkgICAgZm9yIChpID0gayAtIDM7IGkgPiA0OyBpLS0pIHsK LQkJaWYgKHRtcGJ1ZltpXSA9PSAnficgJiYgdG1wYnVmW2ktMV0gPT0gJy4nKSB7Ci0JCSAgICB0 bXBidWZbaS0xXSA9IE5VTDsKLQkJICAgIGJyZWFrOwotCQl9Ci0JICAgIH0KLQkgICAgbmFtZSA9 IHRtcGJ1ZjsJCS8qIEFuZCBwb2ludCB0byBzdHJpcHBlZCBjb3B5ICovCi0JfQotI2VuZGlmIC8q IE9TMk9SVU5JWCAqLwotCXpzdHJpcChuYW1lLCZwKTsJCS8qIFN0cmlwIHBhdGhuYW1lIHRvbyAq LwotCW5hbWUgPSBwOwotCi0gICAgICAgIGlmIChsb2NhbCkgewotICAgICAgICAgICAgaWYgKHR4 dHBhdHRlcm5zWzBdKSB7CS8qIFNlYXJjaCB0ZXh0IHBhdHRlcm5zICovCi0gICAgICAgICAgICAg ICAgZm9yIChpID0gMDsgaSA8IEZUUEFUVEVSTlMgJiYgdHh0cGF0dGVybnNbaV07IGkrKykgewot ICAgICAgICAgICAgICAgICAgICBpZiAoY2ttYXRjaCh0eHRwYXR0ZXJuc1tpXSxuYW1lLGZpbGVj YXNlLDEpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByYyA9IDA7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChiaW5wYXR0ZXJuc1swXSkgewkvKiBB bmQgc2VhcmNoIGJpbmFyeSBwYXR0ZXJucyAqLwotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7 IGkgPCBGVFBBVFRFUk5TICYmIGJpbnBhdHRlcm5zW2ldOyBpKyspIHsKLSAgICAgICAgICAgICAg ICAgICAgaWYgKGNrbWF0Y2goYmlucGF0dGVybnNbaV0sbmFtZSxmaWxlY2FzZSwxKSkgewotICAg ICAgICAgICAgICAgICAgICAgICAgcmMgPSAocmMgPiAtMSkgPyAtMiA6IDE7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgIH0KLQl9IGVsc2UgewotICAgICAgICAgICAgaWYgKG9zID49IDAg JiYgb3MgPCBTWVNfTUFYKSB7Ci0JCWlmICh0eHRwW29zXVswXSkgewotCQkgICAgZm9yIChpID0g MDsgaSA8IEZUUEFUVEVSTlMgJiYgdHh0cFtvc11baV07IGkrKykgewotCQkJaWYgKGNrbWF0Y2go dHh0cFtvc11baV0sbmFtZSxmaWxlY2FzZSwxKSkgewotCQkJICAgIHJjID0gMDsKLQkJCSAgICBi cmVhazsKLQkJCX0KLQkJICAgIH0KLQkJfQotCQlpZiAoYmlucFtvc11bMF0pIHsKLQkJICAgIGZv ciAoaSA9IDA7IGkgPCBGVFBBVFRFUk5TICYmIGJpbnBbb3NdW2ldOyBpKyspIHsKLQkJCWlmIChj a21hdGNoKGJpbnBbb3NdW2ldLG5hbWUsZmlsZWNhc2UsMSkpIHsKLQkJCSAgICByYyA9IChyYyA+ IC0xKSA/IC0yIDogMTsKLQkJCSAgICBicmVhazsKLQkJCX0KLQkJICAgIH0KLQkJfQotCSAgICB9 Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZGVidWcoRjExMSwibWF0Y2huYW1lIixuYW1lLHJjKTsK LSAgICByZXR1cm4ocmMpOwotfQotI2VuZGlmIC8qIFBBVFRFUk5TICovCi0KLSNpZmRlZiBVTklD T0RFCi0jaWZuZGVmIE5PRVZFTk1BWAotI2RlZmluZSBFVkVOTUFYCi0jZW5kaWYgLyogTk9FVkVO TUFYICovCi0jZW5kaWYgLyogVU5JQ09ERSAqLwotCi0vKiAgUyBDIEEgTiBGIEkgTCBFICAtLSAg QW5hbHl6ZSBhIGZpbGUncyBjb250ZW50cyAgKi8KLQotLyoKLSAgQ2FsbCB3aXRoOgotICAgIG5h bWU6ICAgIFBvaW50ZXIgdG8gbmFtZSBvZiBleGlzdGluZyBmaWxlLgotICAgIGZsYWc6ICAgIFBv aW50ZXIgdG8gaW50IGluIHdoaWNoIHRvIHJldHVybiBhZGRpdGlvbmFsIG51bWVyaWMgZGF0YS4K LQotICBSZXR1cm5zOgotICAgIC0xIG9uIGZhaWx1cmUgKHRvIG9wZW4gZmlsZSBvciB0byByZWFk IGZyb20gaXQpLgotICAgIEludGVnZXIsIDAuLjQsIG9uIHN1Y2Nlc3MgaW5kaWNhdGluZyBmaWxl IHR5cGU6Ci0gICAgIDAgPSA3LWJpdCB0ZXh0IChmbGFnID0gLTEpCi0gICAgIDEgPSBVVEYtOCB0 ZXh0IChmbGFnID0gLTEpCi0gICAgIDIgPSBVQ1MtMiB0ZXh0IChmbGFnID0gIDA6IGJpZy1lbmRp YW47IGZsYWcgPSAxOiBsaXR0bGUtZW5kaWFuKQotICAgICAzID0gOC1iaXQgdGV4dCAoZmxhZyA9 ICAwOiBubyBDMSBieXRlczsgZmxhZyA9IDE6IGluY2x1ZGVzIEMxIGJ5dGVzKQotICAgICA0ID0g VGV4dCAgICAgICAodHlwZSB1bmtub3duKQotICAgICA1ID0gYmluYXJ5ICAgICAoZmxhZyA9IC0x KQotCi0gIElmIFVOSUNPREUgaXMgZGVmaW5lZDoKLQotICAgMS4gSWYgZmlsZSBiZWdpbnMgd2l0 aCBhIHZhbGlkIEJPTSwgaXQgaXMgYmVsaWV2ZWQuICBPdGhlcndpc2Ugd2UKLSAgICAgIHJlYWQg dGhlIGZpcnN0IDRLIG9mIHRoZSBmaWxlIChzaW5jZSBpdCBtaWdodCBiZSBlbWFpbCB3aXRoIHZl cmJvc2UKLSAgICAgIGhlYWRlcnMpIGFuZCBhbmFseXplIGl0OgotCi0gICAyLiBJZiBmaWxlIGNv bnRhaW5zIG9ubHkgdmFsaWQgVVRGLTggc2VxdWVuY2VzLCB3ZSBjYWxsIGl0IFVURi04OwotICAg ICAgb3RoZXJ3aXNlOgotCi0gICAzLiBJZiB0aGUgZmlsZSBjb250YWlucyBsb3RzIG9mIGFsdGVy bmF0ZSAwIGJ5dGVzLCB3ZSBjYWxsIGl0IFVDUy0yLCBhbmQKLSAgICAgIHNldCB0aGUgcG9sYXJp dHkgYWNjb3JkaW5nIHRvIHdoZXRoZXIgdGhlIHByZXBvbmRlcmFuY2Ugb2YgdGhlbSBhcmUgaW4K LSAgICAgIGV2ZW4gb3Igb2RkIHBvc2l0aW9uczsgb3RoZXJ3aXNlOgotCi0gICA0LiBJZiBFVkVO TUFYIGlzIGRlZmluZWQgYW5kIHRoZSBmaWxlIGNvbnRhaW5zIGxvdHMgb2YgYWx0ZXJuYXRlIGJ5 dGVzIHRoYXQKLSAgICAgIGFyZSBpZGVudGljYWwsIGV2ZW4gaWYgdGhleSBhcmVuJ3QgemVybywg YW5kIHRoZSBudW1iZXIgb2Ygc3VjaCBieXRlcwotICAgICAgaXMgYXQgbGVhc3QgZm91ciB0aW1l cyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXhpbXVtIHJ1biBvZiBhbHRlcm5hdGluZwotICAgICAgaWRl bnRpY2FsIGJ5dGVzIG9mIHRoZSBvcHBvc2l0ZSBwb2xhcml0eSwgd2UgY2FsbCBpdCBVQ1MtMjsg b3RoZXJ3aXNlOgotCi0gICA1LiBJZiB0aGUgZmlsZSBjb250YWluZWQgbm8gYnl0ZXMgd2l0aCB0 aGVpciA4dGggYml0cyBvbiBhbmQgbm8gY29udHJvbHMKLSAgICAgIG90aGVyIHRoYW4gQ1IsIExG LCBIVCwgYW5kIEZGLCB3ZSBjYWxsIGl0IEFTQ0lJOyBvdGhlcndpc2U6Ci0KLSAgIDYuIElmIGl0 IGNvbnRhaW5zIEMwIGNvbnRyb2wgY2hhcmFjdGVycyBvdGhlciB0aGFuIENSLCBMRiwgSFQsIGFu ZCBGRiwgd2UKLSAgICAgIGNhbGwgaXQgYmluYXJ5OyBvdGhlcndpc2U6Ci0KLSAgIDcuIFdlIGNh bGwgaXQgOC1iaXQgdGV4dCwgY2hhcmFjdGVyIHNldCB1bmtub3duIChjb3VsZCBiZSBMYXRpbi0x IG9yCi0gICAgICBhbnl0aGluZyBlbHNlKS4KLQotICAgTm90ZSB0aGF0IG1hbGZvcm1lZCBVVEYt OCBpcyBub3QgZGlhZ25vc2VkIGFzIFVURi04LgotCi0gICBJZiBVTklDT0RFIGlzIG5vdCBkZWZp bmVkOgotCi0gICAxLiBJZiB0aGUgZmlsZSBjb250YWlucyBDMCBjb250cm9sIGNoYXJhY3RlcnMg b3RoZXIgdGhhbiBDUiwgTEYsIEhULCBhbmQKLSAgICAgIEZGLCB3ZSBjYWxsIGl0IGJpbmFyeTsg b3RoZXJ3aXNlOgotCi0gICAyLiBJZiB0aGUgZmlsZSBjb250YWlucyBhbnkgOC1iaXQgYnl0ZXMs IHdlIGNhbGwgaXQgOC1iaXQgdGV4dDsgb3RoZXJ3aXNlOgotCi0gICAzLiBXZSBjYWxsIGl0IDct Yml0IHRleHQuCi0KLSAgIEluIHRoZSBub24tVW5pY29kZSBjYXNlLCBVQ1MtMiBpcyBkaWFnbm9z ZWQgYXMgYmluYXJ5LCBidXQgVVRGLTggYXMKLSAgIDgtYml0IHRleHQuCi0KLSAgIFRoZXJlIGlz IG5vIHNpZ25pZmljYW50IHNwZWVkIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgVW5pY29kZSBhbmQK LSAgIG5vbi1Vbmljb2RlIGNhc2VzLgotKi8KLWludAotc2NhbmZpbGUobmFtZSxmbGFnLG5zY2Fu ZmlsZSkgY2hhciAqIG5hbWU7IGludCAqIGZsYWcsIG5zY2FuZmlsZTsgewotICAgIEZJTEUgKiBm cDsJCQkJLyogRmlsZSBwb2ludGVyICovCi0gICAgdW5zaWduZWQgY2hhciBidWZbU0NBTkZJTEVC VUZdOwkvKiBGaWxlIGRhdGEgYnVmZmVyIGZvciBhbmFseXNpcyAqLwotICAgIGludCB4LCB2YWwg PSAtMSwgY291bnQgPSAwOwkJLyogV29ya2VycyAqLwotICAgIGludCByYyA9IC0xOwkJCS8qIFJl dHVybiBjb2RlICovCi0gICAgaW50IHB2ID0gLTE7CQkJLyogUGF0dGVybi1tYXRjaCB2YWx1ZSAq LwotICAgIGludCBlb2YgPSAwOwkJCS8qIEZsYWcgZm9yIGZpbGUgRU9GIGVuY291bnRlcmVkICov Ci0gICAgaW50IGJ5dGVzID0gMDsJCQkvKiBUb3RhbCBieXRlIGNvdW50ICovCi0jaWZkZWYgVU5J Q09ERQotICAgIHVuc2lnbmVkIGludCBjMCwgYzE7CQkvKiBGaXJzdCAyIGZpbGUgYnl0ZXMgKGZv ciBCT00pICovCi0jZW5kaWYgLyogVU5JQ09ERSAqLwotICAgIGV4dGVybiBpbnQgcGlwZXNlbmQs IGZpbGVwZWVrOwotCi0gICAgcmVnaXN0ZXIgaW50IGk7CQkJLyogTG9vcCBjb250cm9sICovCi0g ICAgaW50IHJlYWRzaXplID0gMDsJCQkvKiBIb3cgbXVjaCB0byByZWFkICovCi0gICAgaW50IGVp Z2h0Yml0ID0gMDsJCQkvKiBOdW1iZXIgb2YgYnl0ZXMgd2l0aCA4dGggYml0IG9uICovCi0gICAg aW50IGMwY29udHJvbHMgPSAwOwkJCS8qIEMwIG5vbi10ZXh0IGNvbnRyb2wtY2hhciBjb3VudGVy ICovCi0gICAgaW50IGMwbm9uaXNvID0gMDsJCQkvKiBDMCBub24tSVNPIGNvbnRyb2wtY2hhciBj b3VudGVyICovCi0gICAgaW50IGMxY29udHJvbHMgPSAwOwkJCS8qIEMxIGNvbnRyb2wtY2hhcmFj dGVyIGNvdW50ZXIgKi8KLSAgICB1bnNpZ25lZCBpbnQgYzsJCQkvKiBDdXJyZW50IGNoYXJhY3Rl ciAqLwotICAgIGludCBydW5tYXggPSAwOwkJCS8qIExvbmdlc3QgcnVuIG9mIDAgYnl0ZXMgKi8K LSAgICBpbnQgcnVuemVybyA9IDA7CQkJLyogUnVuIG9mIDAgYnl0ZXMgKi8KLSAgICBpbnQgcGN0 emVybyA9IDA7CQkJLyogUGVyY2VudGFnZSBvZiAwIGJ5dGVzICovCi0gICAgaW50IHR4dGN6ID0g MDsKLSNpZmRlZiBDS19DVFJMWgotICAgIGV4dGVybiBpbnQgZW9mbWV0aG9kOwotI2VuZGlmIC8q IENLX0NUUkxaICovCi0KLSNpZmRlZiBVTklDT0RFCi0gICAgaW50IG5vdHV0ZjggPSAwOwkJCS8q IE5vbnplcm8gaWYgZGVmaW5pdGVseSBub3QgVVRGLTggKi8KLSAgICBpbnQgdXRmOHN0YXRlID0g MDsJCQkvKiBVVEYtOCByZWNvZ25pemVyIHN0YXRlICovCi0gICAgaW50IG9kZHplcm8gPSAwOwkJ CS8qIE51bWJlciBvZiAwIGJ5dGVzIGluIG9kZCBwb3N0aW9ucyAqLwotICAgIGludCBldmVuemVy byA9IDA7CQkJLyogYW5kIGluIGV2ZW4gcG9zaXRpb25zICovCi0gICAgaW50IGxmbnVsID0gMDsJ CQkvKiBOdW1iZXIgb2YgPExGPjxOVUw+IHNlcXVlbmNlcyAqLwotICAgIGludCBjcmxmID0gMDsJ CQkvKiBOdW1iZXIgb2YgPENSTEY+IHNlcXVlbmNlcyAqLwotI2Vsc2UKLSAgICBpbnQgbm90dXRm OCA9IDE7Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotCi0jaWZkZWYgQ09NTUVOVAotI2lmZGVmIEVW RU5NQVgKLSAgICBpbnQgb2RkcnVuID0gMCwgb2RkbWF4ID0gMCwgb2RkYnl0ZSA9IDAsIG9kZG1h eGJ5dGUgPSAwOwotICAgIGludCBldmVucnVuID0gMCwgZXZlbm1heCA9IDAsIGV2ZW5ieXRlID0g MCwgZXZlbm1heGJ5dGUgPSAwOwotI2VuZGlmIC8qIEVWRU5NQVggKi8KLSNlbmRpZiAvKiBDT01N RU5UICovCi0KLSNpZm5kZWYgTk9YRkVSCi0gICAgaWYgKHBpcGVzZW5kIHx8IGNhbGlicmF0ZSB8 fCBzbmRhcnJheSkgLyogT25seSBmb3IgcmVhbCBmaWxlcyAqLwotICAgICAgcmV0dXJuKC0xKTsK LSNlbmRpZiAvKiBOT1hGRVIgKi8KLSAgICBkZWJ1ZyhGMTExLCJzY2FuZmlsZSIsbmFtZSxuc2Nh bmZpbGUpOwotI2lmZGVmIFBBVFRFUk5TCi0gICAgaWYgKCFmaWxlcGVlaykgewotCXB2ID0gbWF0 Y2huYW1lKG5hbWUsMSwtMSk7Ci0JaWYgKHB2IDwgMCkKLQkgIHJjID0gLTE7Ci0JZWxzZQotCSAg cmMgPSAocHYgPT0gMSkgPyBGVF9CSU4gOiBGVF9URVhUOwotCWRlYnVnKEYxMTEsInNjYW5maWxl ICFmaWxlcGVlayByZXN1bHQiLG5hbWUscmMpOwotCXJldHVybihyYyk7Ci0gICAgfQotI2VuZGlm IC8qIFBBVFRFUk5TICovCi0KLSNpZmRlZiBWTVMKLS8qIFdlIGRvbid0IHNjYW4gaW4gVk1TIHdo ZXJlIHRleHQgZmlsZXMgaGF2ZSB2YXJpb3VzIHJlY29yZCBmb3JtYXRzIGluICAqLwotLyogd2hp Y2ggcmVjb3JkIGhlYWRlcnMgY29udGFpbiBzZWVtaW5nbHkgbm9uLXRleHQgYnl0ZXMuICBTbyB0 aGUgYmVzdCAgICovCi0vKiB3ZSBjYW4gZG8gaW4gVk1TIGlzIHRlbGwgd2hldGhlciB0aGUgZmls ZSBpcyB0ZXh0IG9yIGJpbmFyeSwgcGVyaW9kLiAgKi8KLSAgICB7Ci0JaW50IGIsIHg7Ci0JYiA9 IGJpbmFyeTsJCQkvKiBTYXZlIGN1cnJlbnQgYmluYXJ5IHNldHRpbmcgKi8KLQlpZiAoem9wZW5p KFpJRklMRSxuYW1lKSA+IDApIHsJLyogSW4gVk1TIHRoaXMgc2V0cyBiaW5hcnkgKi8KLQkgICAg eCA9IGJpbmFyeTsJCQkvKiBHZXQgcmVzdWx0ICovCi0JICAgIHpjbG9zZShaSUZJTEUpOwkJLyog Q2xvc2UgdGhlIGZpbGUgKi8KLQkgICAgYmluYXJ5ID0gYjsJCQkvKiBSZXN0b3JlIHByZXZpb3Vz IGJpbmFyeSBzZXR0aW5nICovCi0JICAgIHJjID0geCA/IEZUX0JJTiA6IEZUX1RFWFQ7Ci0JICAg IHZhbCA9IDA7Ci0JICAgIGdvdG8geHNjYW5maWxlOwotCX0KLSAgICB9Ci0jZW5kaWYgLyogVk1T ICovCi0KLSAgICBlb2YgPSAwOwkJCQkvKiBFbmQtb2YtZmlsZSByZWFjaGVkIGluZGljYXRvciAq LwotI2lmZGVmIE9TMgotICAgIGZwID0gZm9wZW4obmFtZSwgInJiIik7CQkvKiBPcGVuIHRoZSBm aWxlIGluIGJpbmFyeSBtb2RlICovCi0jZWxzZQotICAgIGZwID0gZm9wZW4obmFtZSwgInIiKTsK LSNlbmRpZiAvKiBPUzIgKi8KLQotICAgIGlmICghZnApCQkJCS8qIEZhaWxlZD8gKi8KLSAgICAg IHJldHVybigtMSk7Ci0KLSAgICB3aGlsZSAoMSkgewkJCQkvKiBPbmUgb3IgbW9yZSBndWxwcyBm cm9tIGZpbGUgKi8KLQlpZiAoZW9mKSB7CQkJLyogRU9GIGZyb20gbGFzdCB0aW1lPyAqLwotCSAg ICBkZWJ1ZyhGMTExLCJzY2FuZmlsZSBhdCBFT0YiLG5hbWUsYnl0ZXMpOwotCSAgICBpZiAocnVu emVybyA+IHJ1bm1heCkKLQkgICAgICBydW5tYXggPSBydW56ZXJvOwotCSAgICBicmVhazsKLQl9 Ci0JaWYgKG5zY2FuZmlsZSA8IDApIHsJCS8qIFJlYWRpbmcgd2hvbGUgZmlsZSAqLwotCSAgICBy ZWFkc2l6ZSA9IFNDQU5GSUxFQlVGOwotCX0gZWxzZSB7CQkJLyogUmVhZGluZyBmaXJzdCBuc2Nh bmZpbGVlIGJ5dGVzICovCi0JICAgIHJlYWRzaXplID0gbnNjYW5maWxlIC0gYnl0ZXM7Ci0JICAg IGlmIChyZWFkc2l6ZSA8IDEpCi0JICAgICAgYnJlYWs7Ci0JICAgIGlmIChyZWFkc2l6ZSA+IFND QU5GSUxFQlVGKQotCSAgICAgIHJlYWRzaXplID0gU0NBTkZJTEVCVUY7Ci0JfQotCWRlYnVnKEYx MDEsInNjYW5maWxlIHJlYWRzaXplIiwiIixyZWFkc2l6ZSk7Ci0JY291bnQgPSBmcmVhZChidWYs MSxyZWFkc2l6ZSxmcCk7IC8qIFJlYWQgYSBidWZmZXIgKi8KLQlpZiAoY291bnQgPT0gRU9GIHx8 IGNvdW50ID09IDApIHsKLQkgICAgZGVidWcoRjExMSwic2NhbmZpbGUgRU9GIixuYW1lLGNvdW50 KTsKLQkgICAgYnJlYWs7Ci0JfQotCWRlYnVnKEYxMTEsInNjYW5maWxlIGJ1ZmZlciBvayIsbmFt ZSxjb3VudCk7Ci0KLQlpZiAoYnl0ZXMgPT0gMCAmJiBjb3VudCA+IDgpIHsKLQkgICAgLyogUERG IGZpbGVzIGNhbiBsb29rIGxpa2UgdGV4dCBpbiB0aGUgYmVnaW5uaW5nLiAqLwotCSAgICBpZiAo IWNrc3RyY21wKChjaGFyICopYnVmLCIlUERGLTEuIiw3LDEpKSB7Ci0JCWlmIChpc2RpZ2l0KGJ1 Zls3XSkpIHsKLQkJICAgIGlmIChidWZbOF0gPT0gJ1wwMTUnIHx8Ci0JCQljb3VudCA+IDkgJiYg YnVmWzhdID09IFNQICYmIGJ1Zls5XSA9PSAnXDAxNScpIHsKLSNpZmRlZiBERUJVRwotCQkJYnVm WzhdID0gTlVMOwotCQkJZGVidWcoRjExMCwic2NhbmZpbGUgUERGIixidWYsMCk7Ci0jZW5kaWYg LyogREVCVUcgKi8KLQkJCWJpbmFyeSA9IDE7CS8qIEJ1dCB0aGV5IGFyZSBiaW5hcnkuICovCi0J CQlicmVhazsKLQkJICAgIH0KLQkJfQotCSAgICB9IGVsc2UgaWYgKCFja3N0cmNtcCgoY2hhciAq KWJ1ZiwiJSFQUy1BZG8iLDgsMSkpIHsKLQkJLyogRGl0dG8gZm9yIFBvc3RTY3JpcHQgKi8KLSNp ZmRlZiBERUJVRwotCQlpbnQgaTsKLQkJZm9yIChpID0gODsgaSA8IGNvdW50OyBpKyspIHsKLQkJ ICAgIGlmIChidWZbaV0gPCAnIScpIHsKLQkJCWJ1ZltpXSA9IE5VTDsKLQkJCWJyZWFrOwotCQkg ICAgfQotCQl9Ci0JCWRlYnVnKEYxMTAsInNjYW5maWxlIFBvc3RTY3JpcHQiLGJ1ZiwwKTsKLSNl bmRpZiAvKiBERUJVRyAqLwotCQliaW5hcnkgPSAxOwotCQlicmVhazsKLSNpZm5kZWYgTk9QQ0xT Q0FOCi0JICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKChjaGFyICopYnVmLCIpIEhQLVBDTCIsOCwx KSkgewotCQkvKiBIUCBQQ0wgcHJpbnRlciBsYW5ndWFnZSAqLwotI2lmZGVmIERFQlVHCi0JCWlu dCBpOwotCQlmb3IgKGkgPSA4OyBpIDwgY291bnQ7IGkrKykgewotCQkgICAgaWYgKGJ1ZltpXSA8 ICchJykgewotCQkJYnVmW2ldID0gTlVMOwotCQkJYnJlYWs7Ci0JCSAgICB9Ci0JCX0KLQkJZGVi dWcoRjExMCwic2NhbmZpbGUgUENMIixidWYsMCk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLQkJYmlu YXJ5ID0gMTsKLQkJYnJlYWs7Ci0JICAgIH0gCi0jZW5kaWYgLyogTk9QQ0xTQ0FOICovCi0jaWZu ZGVmIE5PUEpMU0NBTgotCSAgICAgIGVsc2UgaWYgKGJ1ZlswXSA9PSAnXDAzMycgJiYgKGJ1Zlsx XSA9PSAnRScgfHwgYnVmWzFdID09ICclJykpIHsKLQkJLyogRGl0dG8gZm9yIFBKTCBKb2IgcHJp bnRlciBoZWFkZXIgKi8KLSNpZmRlZiBERUJVRwotCQlpbnQgaTsKLQkJZm9yIChpID0gMjsgaSA8 IGNvdW50OyBpKyspIHsKLQkJICAgIGlmIChidWZbaV0gPCAnIScpIHsKLQkJCWJ1ZltpXSA9IE5V TDsKLQkJCWJyZWFrOwotCQkgICAgfQotCQl9Ci0JCWRlYnVnKEYxMTAsInNjYW5maWxlIFBKTCBK b2IgcHJpbnRlciBoZWFkZXIiLGJ1ZiwwKTsKLSNlbmRpZiAvKiBERUJVRyAqLwotCQliaW5hcnkg PSAxOwotCQlicmVhazsKLSNlbmRpZiAvKiBOT1BKTFNDQU4gKi8KLQkgICAgfQotCX0KLQotI2lm ZGVmIFVOSUNPREUKLQlpZiAoYnl0ZXMgPT0gMCAmJiBjb3VudCA+IDEpIHsKLQkgICAgaW50IGlu Y2xfY250ID0gMDsKLQotCSAgICAvKiBGaXJzdCBsb29rIGZvciBCT00gKi8KLQotCSAgICBjMCA9 ICh1bnNpZ25lZCkoKHVuc2lnbmVkKWJ1ZlswXSYweEZGKTsgLyogRmlyc3QgZmlsZSBieXRlICov Ci0JICAgIGMxID0gKHVuc2lnbmVkKSgodW5zaWduZWQpYnVmWzFdJjB4RkYpOyAvKiBTZWNvbmQg Ynl0ZSAqLwotCi0JICAgIGlmIChjMCA9PSAweEZFICYmIGMxID09IDB4RkYpIHsJLyogVUNTLTIg QkUgKi8KLQkJcmMgPSBGVF9VQ1MyOwotCQl2YWwgPSAwOwotCQlkZWJ1ZyhGMTExLCJzY2FuZmls ZSBVQ1MyIEJPTSBCRSIsY2tpdG9hKHZhbCkscmMpOwotCQlpbmNsX2NudCsrOwotCSAgICB9IGVs c2UgaWYgKGMwID09IDB4RkYgJiYgYzEgPT0gMHhGRSkgeyAvKiBVQ1MtMiBMRSAqLwotCQlyYyA9 IEZUX1VDUzI7Ci0JCXZhbCA9IDE7Ci0JCWRlYnVnKEYxMTEsInNjYW5maWxlIFVDUzIgQk9NIExF Iixja2l0b2EodmFsKSxyYyk7Ci0JCWluY2xfY250Kys7Ci0JICAgIH0gZWxzZSBpZiAoY291bnQg PiAyKSBpZiAoYzAgPT0gMHhFRiAmJiBjMSA9PSAweEJCICYmCi0JCSAgICAgICAodW5zaWduZWQp KCh1bnNpZ25lZClidWZbMl0mMHhGRikgPT0gMHhCRikgewotCQlyYyA9IEZUX1VURjg7Ci0JCWRl YnVnKEYxMTEsInNjYW5maWxlIFVURjggQk9NIixja2l0b2EodmFsKSxyYyk7Ci0JCWluY2xfY250 Kys7Ci0JICAgIH0KLQkgICAgaWYgKGluY2xfY250KSB7CQkvKiBIYXZlIEJPTSAqLwotCQlieXRl cyArPSBjb3VudDsKLQkJZ290byB4c2NhbmZpbGU7Ci0JICAgIH0KLQl9Ci0jZW5kaWYgLyogVU5J Q09ERSAqLwotCi0JYnl0ZXMgKz0gY291bnQ7CQkJLyogQ291bnQgYnl0ZXMgcmVhZCAqLwotCWVv ZiA9IGZlb2YoZnApOwkJCS8qIEZsYWcgZm9yIGF0IEVPRiAgKi8KLQotCWZvciAoaSA9IDA7IGkg PCBjb3VudDsgaSsrKSB7CS8qIEZvciBlYWNoIGJ5dGUuLi4gKi8KLQkgICAgYyA9ICh1bnNpZ25l ZClidWZbaV07CS8qIEZvciBlYXNlIG9mIHJlZmVyZW5jZSAqLwotCSAgICBpZiAoIWMpIHsJCQkv KiBaZXJvIGJ5dGU/ICovCi0jaWZkZWYgRVZFTk1BWAotCQlpZiAoaSYxKQkJLyogSW4gb2RkIHBv c2l0aW9uICovCi0JCSAgb2RkemVybysrOwotCQllbHNlCi0JCSAgZXZlbnplcm8rKzsJCS8qIElu IGV2ZW4gcG9zaXRpb24gKi8KLSNlbmRpZiAvKiBFVkVOTUFYICovCi0JCXJ1bnplcm8rKzsKLQkg ICAgfSBlbHNlIHsJCQkvKiBOb3QgYSB6ZXJvIGJ5dGUgKi8KLQkJaWYgKHJ1bnplcm8gPiBydW5t YXgpCi0JCSAgcnVubWF4ID0gcnVuemVybzsKLQkJaWYgKHJ1bm1heCA+IDIpCQkvKiBUaGF0J3Mg YWxsIHdlIG5lZWQgdG8gYmUgY2VydGFpbiAqLwotCQkgIGJyZWFrOwkJLyogaXQncyBhIGJpbmFy eSBmaWxlLiAqLwotCQlydW56ZXJvID0gMDsKLQkgICAgfQotCi0jaWZkZWYgQ09NTUVOVAotI2lm ZGVmIEVWRU5NQVgKLQotLyogVGhpcyBpcyB0byBjYXRjaCBVQ1MtMiB3aXRoIGEgbm9uLUFTQ0lJ LCBub24tTGF0aW4tMSByZXBlcnRvaXJlICAqLwotCi0JICAgIGlmIChpID4gMSkgewkgICAgICAv KiBMb29rIGZvciBydW5zIG9mIGFsdGVybmF0aW5nIGNoYXJzICovCi0JCWlmIChpJjEpIHsKLQkJ ICAgIGlmIChjID09IGJ1ZltpLTJdKSB7IC8qIEluIG9kZCBwb3NpdGlvbnMgKi8KLQkJCW9kZHJ1 bisrOwotCQkJb2RkYnl0ZSA9IGM7Ci0JCSAgICB9IGVsc2UgewotCQkJb2RkbWF4ID0gb2RkcnVu OwotCQkJb2RkbWF4Ynl0ZSA9IG9kZGJ5dGU7Ci0JCSAgICB9Ci0JCX0gZWxzZSB7CQkvKiBhbmQg ZXZlbiBwb3NpdGlvbnMgKi8KLQkJICAgIGlmIChjID09IGJ1ZltpLTJdKSB7Ci0JCQlldmVucnVu Kys7Ci0JCQlldmVuYnl0ZSA9IGM7Ci0JCSAgICB9IGVsc2UgewotCQkJZXZlbm1heCA9IGV2ZW5y dW47Ci0JCQlldmVubWF4Ynl0ZSA9IGV2ZW5ieXRlOwotCQkgICAgfQotCQl9Ci0JICAgIH0KLSNl bmRpZiAvKiBFVkVOTUFYICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0JICAgIGlmICgoYyAm IDB4ODApID09IDApIHsJLyogV2UgaGF2ZSBhIDctYml0IGJ5dGUgKi8KLSNpZmRlZiBVTklDT0RF Ci0JCWlmIChpID4gMCAmJiBjID09IDEwKSB7IC8qIExpbmVmZWVkICovCi0JCSAgICBpZiAoYnVm W2ktMV0gPT0gMCkgbGZudWwrKzsgLyogUHJlY2VkZWQgYnkgTlVMICovCi0JCSAgICBlbHNlIGlm IChidWZbaS0xXSA9PSAxMykgY3JsZisrOyAvKiBvciBieSBDUi4uLiAqLwotCQl9Ci0jZW5kaWYg LyogVU5JQ09ERSAqLwotCQlpZiAoYyA8ICcgJykgewkJLyogQ2hlY2sgZm9yIENPIGNvbnRyb2xz ICovCi0JCSAgICBpZiAoYyAhPSBMRiAmJiBjICE9IENSICYmIGMgIT0gSFQgJiYgYyAhPSBGRikg ewotCQkJYzBjb250cm9scysrOwotCQkJaWYgKGMgIT0gRVNDICYmIGMgIT0gU08gJiYgYyAhPSBT SSkKLQkJCSAgYzBub25pc28rKzsKLQkJICAgIH0KLQkJICAgIGlmICgoYyA9PSAnXDAzMicpCS8q IEN0cmwtWiAqLwotI2lmZGVmIENPTU1FTlQKLQkJCSYmIGVvZiAmJiAoaSA+PSBjb3VudCAtIDIp Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCQkJKSB7Ci0JCQljMGNvbnRyb2xzLS07Ci0JCQljMG5v bmlzby0tOwotI2lmZGVmIENLX0NUUkxaCi0JCQlpZiAoZW9mbWV0aG9kID09IFhZRU9GX1ogJiYg dHh0Y3ogPT0gMCkgewotCQkJICAgIGlmIChjMGNvbnRyb2xzID09IDApIC8qIEFsbCB0ZXh0IHBy aW9yIHRvIEN0cmwtWiAqLwotCQkJICAgICAgdHh0Y3ogPSAxOwotCQkJfQotI2VuZGlmIC8qIENL X0NUUkxaICovCi0JCSAgICB9Ci0JCX0KLSNpZmRlZiBVTklDT0RFCi0JCWlmICghbm90dXRmOCAm JiB1dGY4c3RhdGUpIHsgLyogSW4gVVRGLTggc2VxdWVuY2U/ICovCi0JCSAgICB1dGY4c3RhdGUg PSAwOwotCQkgICAgZGVidWcoRjAwMCwic2NhbmZpbGUiLCI3LWJpdCBieXRlIGluIFVURjggc2Vx dWVuY2UiLGMpOwotCQkgICAgbm90dXRmOCsrOwkJLyogVGhlbiBpdCdzIG5vdCBVVEYtOCAqLwot CQkgICAgY29udGludWU7Ci0JCX0KLSNlbmRpZiAvKiBVTklDT0RFICovCi0JICAgIH0gZWxzZSB7 CQkJLyogV2UgaGF2ZSBhbiA4LWJpdCBieXRlICovCi0JCWVpZ2h0Yml0Kys7CQkvKiBDb3VudCBp dCAqLwotCQlpZiAoYyA+PSAweDgwICYmIGMgPCAweEEwKSAvKiBDaGVjayBmb3IgQzEgY29udHJv bHMgKi8KLQkJICBjMWNvbnRyb2xzKys7Ci0jaWZkZWYgVU5JQ09ERQotCQlpZiAoIW5vdHV0Zjgp IHsJCS8qIElmIGl0IG1pZ2h0IHN0aWxsIGJlIFVURjguLi4gKi8KLQkJICAgIHN3aXRjaCAodXRm OHN0YXRlKSB7IC8qIEVudGVyIHRoZSBVVEYtOCBzdGF0ZSBtYWNoaW5lICovCi0JCSAgICAgIGNh c2UgMDoJCSAvKiBGaXJzdCBieXRlLi4uICovCi0JCQlpZiAoKGMgJiAweEUwKSA9PSAweEMwKSB7 IC8qIFRlbGxzIG51bWJlciBvZiAqLwotCQkJICAgIHV0ZjhzdGF0ZSA9IDE7ICAgICAgICAvKiBz dWJzZXF1ZW50IGJ5dGVzICovCi0JCQl9IGVsc2UgaWYgKChjICYgMHhGMCkgPT0gMHhFMCkgewot CQkJICAgIHV0ZjhzdGF0ZSA9IDI7Ci0JCQl9IGVsc2UgaWYgKChjICYgMHhGOCkgPT0gMHhGMCkg ewotCQkJICAgIHV0ZjhzdGF0ZSA9IDM7Ci0JCQl9IGVsc2UgewotCQkJICAgIG5vdHV0ZjgrKzsK LQkJCX0KLQkJCWJyZWFrOwotCQkgICAgICBjYXNlIDE6CQkvKiBTdWJzZXF1ZW50IGJ5dGUgKi8K LQkJICAgICAgY2FzZSAyOgotCQkgICAgICBjYXNlIDM6Ci0JCQlpZiAoKGMgJiAweEMwKSAhPSAw eDgwKSB7IC8qIE11c3Qgc3RhcnQgd2l0aCAxMCAqLwotCQkJICAgIGRlYnVnKEYwMDAsInNjYW5m aWxlIiwKLQkJCQkgICJiYWQgYnl0ZSBpbiBVVEY4IHNlcXVlbmNlIixjKTsKLQkJCSAgICBub3R1 dGY4Kys7Ci0JCQkgICAgYnJlYWs7Ci0JCQl9Ci0JCQl1dGY4c3RhdGUtLTsJLyogR29vZCwgb25l IGxlc3MgaW4gdGhpcyBzZXF1ZW5jZSAqLwotCQkJYnJlYWs7Ci0JCSAgICAgIGRlZmF1bHQ6CQkv KiBTaG91bGRuJ3QgaGFwcGVuICovCi0JCQlkZWJ1ZyhGMTExLCJzY2FuZmlsZSIsImJhZCBVVEY4 IHN0YXRlIix1dGY4c3RhdGUpOwotCQkJbm90dXRmOCsrOwotCQkgICAgfQotCQl9Ci0jZW5kaWYg LyogVU5JQ09ERSAqLwotCSAgICB9Ci0JfQotICAgIH0KLSAgICBmY2xvc2UoZnApOwkJCQkvKiBD bG9zZSB0aGUgZmlsZSAqLwotICAgIGRlYnVnKEYxMDEsInNjYW5maWxlIGJ5dGVzIiwiIixieXRl cyk7Ci0KLSAgICBpZiAoYnl0ZXMgPT0gMCkJCQkvKiBJZiBub3RoaW5nIHdhcyByZWFkICovCi0g ICAgICByZXR1cm4oLTEpOwkJCS8qIHdlJ3JlIGRvbmUuICovCi0KLSNpZmRlZiBFVkVOTUFYCi0g ICAgLyogSW4gY2FzZSB3ZSBoYWQgYSBydW4gdGhhdCBuZXZlciBicm9rZS4uLiAqLwotI2lmZGVm IENPTU1FTlQKLSAgICBpZiAob2RkbWF4ID09IDApIHsKLQlvZGRtYXggPSBvZGRydW47Ci0Jb2Rk bWF4Ynl0ZSA9IG9kZGJ5dGU7Ci0gICAgfQotICAgIGlmIChldmVubWF4ID09IDApIHsKLQlldmVu bWF4ID0gZXZlbnJ1bjsKLQlldmVubWF4Ynl0ZSA9IGV2ZW5ieXRlOwotICAgIH0KLSNlbmRpZiAv KiBDT01NRU5UICovCi0gICAgaWYgKHJ1bm1heCA9PSAwKSB7Ci0JcnVubWF4ID0gcnVuemVybzsK LSAgICB9Ci0jZW5kaWYgLyogRVZFTk1BWCAqLwotCi0jaWZkZWYgVU5JQ09ERQotICAgIGlmIChi eXRlcyA+IDEwMCkJCQkvKiBCeXRlcyBpcyBub3QgMCAqLwotICAgICAgcGN0emVybyA9IChldmVu emVybyArIG9kZHplcm8pIC8gKGJ5dGVzIC8gMTAwKTsKLSAgICBlbHNlCi0gICAgICBwY3R6ZXJv ID0gKChldmVuemVybyArIG9kZHplcm8pICogMTAwKSAvIGJ5dGVzOwotI2VuZGlmIC8qIFVOSUNP REUgKi8KLQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewkJCS8qIElmIGRlYnVnZ2lu ZywgZHVtcCBzdGF0aXN0aWNzICovCi0JZGVidWcoRjEwMSwic2NhbmZpbGUgYzBjb250cm9scyAi LCIiLGMwY29udHJvbHMpOwotCWRlYnVnKEYxMDEsInNjYW5maWxlIGMwbm9uaXNvICAgIiwiIixj MG5vbmlzbyk7Ci0JZGVidWcoRjEwMSwic2NhbmZpbGUgYzFjb250cm9scyAiLCIiLGMxY29udHJv bHMpOwotCWRlYnVnKEYxMDEsInNjYW5maWxlIGVpZ2h0Yml0ICAgIiwiIixlaWdodGJpdCk7Ci0j aWZkZWYgVU5JQ09ERQotCWRlYnVnKEYxMDEsInNjYW5maWxlIGNybGYgICAgICAgIiwiIixjcmxm KTsKLQlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBsZm51bCAgICAgICIsIiIsbGZudWwpOwotCWRlYnVn KEYxMDEsInNjYW5maWxlIG5vdHV0ZjggICAgIiwiIixub3R1dGY4KTsKLQlkZWJ1ZyhGMTAxLCJz Y2FuZmlsZSBldmVuemVybyAgICIsIiIsZXZlbnplcm8pOwotCWRlYnVnKEYxMDEsInNjYW5maWxl IG9kZHplcm8gICAgIiwiIixvZGR6ZXJvKTsKLQlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBldmVuL29k ZCAgICIsIiIsKGV2ZW56ZXJvIC8gKG9kZHplcm8gKyAxKSkpOwotCWRlYnVnKEYxMDEsInNjYW5m aWxlIG9kZC9ldmVuICAgIiwiIiwob2RkemVybyAvIChldmVuemVybyArIDEpKSk7Ci0JZGVidWco RjEwMSwic2NhbmZpbGUgcGN0emVybyAgICAiLCIiLHBjdHplcm8pOwotI2VuZGlmIC8qIFVOSUNP REUgKi8KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgRVZFTk1BWAotCWRlYnVnKEYxMDEsInNjYW5m aWxlIG9kZG1heCAgICAgIiwiIixvZGRtYXgpOwotCWRlYnVnKEYxMDEsInNjYW5maWxlIG9kZG1h eGJ5dGUgIiwiIixvZGRtYXhieXRlKTsKLQlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBldmVubWF4ICAg ICIsIiIsZXZlbm1heCk7Ci0JZGVidWcoRjEwMSwic2NhbmZpbGUgZXZlbm1heGJ5dGUiLCIiLGV2 ZW5tYXhieXRlKTsKLSNlbmRpZiAvKiBFVkVOTUFYICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwot CWRlYnVnKEYxMDEsInNjYW5maWxlIHJ1bm1heCAgICAgIiwiIixydW5tYXgpOwotICAgIH0KLSNl bmRpZiAvKiBERUJVRyAqLwotCi0jaWZkZWYgVU5JQ09ERQotICAgIHggPSBlaWdodGJpdCA/IGJ5 dGVzIC8gMjAgOiBieXRlcyAvIDQ7IC8qIEZvciBVQ1MtMi4uLiAqLwotCi0gICAgaWYgKHJ1bm1h eCA+IDIpIHsJCQkvKiBGaWxlIGhhcyBydW4gb2YgbW9yZSB0aGFuIDIgTlVMcyAqLwotCWRlYnVn KEYxMDAsInNjYW5maWxlIEJJTiBydW5tYXgiLCIiLDApOwotCXJjID0gRlRfQklOOwkJCS8qIHNv IGl0IGNhbid0IGJlIGFueSBraW5kIG9mIHRleHQuICovCi0JZ290byB4c2NhbmZpbGU7Ci0KLSAg ICB9IGVsc2UgaWYgKHJjID09IEZUX1VDUzIgfHwgKHJjID09IEZUX1VURjggJiYgcnVubWF4ID09 IDApKSB7Ci0JZ290byB4c2NhbmZpbGU7CQkJLyogRmlsZSBzdGFydHMgd2l0aCBhIEJPTSAqLwot Ci0gICAgfSBlbHNlIGlmIChlaWdodGJpdCA+IDAgJiYgIW5vdHV0ZjgpIHsgLyogRmlsZSBoYXMg OC1iaXQgZGF0YSAqLwotCWlmIChydW5tYXggPiAwKSB7CQkgICAvKiBhbmQgcnVucyBvZiBOVUxz ICovCi0JICAgIGRlYnVnKEYxMDAsInNjYW5maWxlIEJJTiAobm5VVEY4KSBydW5tYXgiLCIiLDAp OwotCSAgICByYyA9IEZUX0JJTjsJCSAgIC8qIFVURi04IGRvZXNuJ3QgaGF2ZSBOVUxzICovCi0J fSBlbHNlIHsJCQkgICAvKiBObyBOVUxzICovCi0JICAgIGRlYnVnKEYxMDAsInNjYW5maWxlIFVU RjggKG5uVVRGOCArIHJ1bm1heCA9PSAwKSIsIiIsMCk7Ci0JICAgIHJjID0gRlRfVVRGODsJCSAg IC8qIGFuZCBub3Qgbm90IFVURi04LCBzbyBpcyBVVEYtOCAqLwotCX0KLQlnb3RvIHhzY2FuZmls ZTsKLSAgICB9Ci0vKgotICBGb3IgVUNTLTIgZGV0ZWN0aW9uLCBzZWUgaWYgdGhlIHRleHQgY29u dGFpbnMgbGluZXMgZGVsaW1pdGVkIGJ5Ci0gIEFTQ0lJIGNvbnRyb2xzIGFuZCBjb250YWluaW5n IHNwYWNlcywgQVNDSUkgZGlnaXRzLCBvciBvdGhlciBBU0NJSQotICBjaGFyYWN0ZXJzLCB0aHVz IGZvcmNpbmcgdGhlIHByZXNlbmNlIG9mIGEgY2VydGFpbiBwZXJjZW50YWdlIG9mIHplcm8gYnl0 ZXMuCi0gIEZvciB0aGlzIHB1cnBvc2UgcmVxdWlyZSAyMCUgemVybyBieXRlcywgd2l0aCBhdCBs ZWFzdCBzaXggdGltZXMgYXMgbWFueQotICBpbiBldmVuIChvZGQpIHBvc2l0aW9ucyBhcyBpbiBv ZGQgKGV2ZW4pIHBvc2l0aW9ucy4KLSovCi0gICAgaWYgKChldmVuemVybyA+PSB4ICYmIG9kZHpl cm8gPT0gMCkgfHwKLQkoKCgoZXZlbnplcm8gLyAob2RkemVybyArIDEpKSA+IDYpICYmIChwY3R6 ZXJvID4gMjApKSAmJgotCShjcmxmID09IDApICYmCi0JKGxmbnVsID4gMSkpCi0JKSB7Ci0JICAg IGRlYnVnKEYxMDAsInNjYW5maWxlIFVDUzIgbm9CT00gQkUgKGV2ZW4vb2RkemVybykiLCIiLDAp OwotCXJjID0gRlRfVUNTMjsKLQl2YWwgPSAwOwotICAgIH0gZWxzZSBpZiAoKGV2ZW56ZXJvID09 IDAgJiYgb2RkemVybyA+PSB4KSB8fAotCSAgICAgICAoKCgob2RkemVybyAvIChldmVuemVybyAr IDEpKSA+IDYpICYmIChwY3R6ZXJvID4gMjApKSAmJgotCSAgICAgICAoY3JsZiA9PSAwKSAmJgot CSAgICAgICAobGZudWwgPiAxKSkKLQkgICAgICAgKSB7Ci0JZGVidWcoRjEwMCwic2NhbmZpbGUg VUNTMiBub0JPTSBMRSAoZXZlbi9vZGR6ZXJvKSIsIiIsMCk7Ci0JcmMgPSBGVF9VQ1MyOwotCXZh bCA9IDE7Ci0KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgRVZFTk1BWAotLyoKLSAgSWYgdGhlIHRl c3RzIGFib3ZlIGZhaWwsIHdlIHN0aWxsIG1pZ2h0IGhhdmUgVUNTLTIgaWYgdGhlcmUgYXJlIHNp Z25pZmljYW50Ci0gIHJ1bnMgb2YgaWRlbnRpY2FsIGJ5dGVzIGluIGFsdGVybmF0aW5nIHBvc2l0 aW9ucywgYnV0IG9ubHkgaWYgaXQgYWxzbyBoYXMKLSAgdW51c3VhbCBDMCBjb250cm9scyAob3Ro ZXJ3aXNlIHdlJ2QgcGljayB1cCBoZXggZmlsZXMgaGVyZSkuICBOT1RFOiBXZQotICBkb24ndCBh Y3R1YWxseSBkbyB0aGlzIC0tIEVWRU5NQVggaXMgbm90IGRlZmluZWQgKHNlZSBjb21tZW50cyBh Ym92ZSBhdAotICBmaXJzdCBvY2N1cnJlbmNlIG9mIEVWRU5NQVgpLgotKi8KLSAgICB9IGVsc2Ug aWYgKGMwbm9uaXNvICYmIGV2ZW5tYXggPiBieXRlcyAvIDQpIHsKLQlkZWJ1ZyhGMTAwLCJzY2Fu ZmlsZSBVQ1MyIEJFIChldmVubWF4KSIsIiIsMCk7Ci0JcmMgPSBGVF9VQ1MyOwotCXZhbCA9IDA7 Ci0gICAgfSBlbHNlIGlmIChjMG5vbmlzbyAmJiBvZGRtYXggPiBieXRlcyAvIDQpIHsKLQlkZWJ1 ZyhGMTAwLCJzY2FuZmlsZSBVQ1MyIExFIChldmVubWF4KSIsIiIsMCk7Ci0JcmMgPSBGVF9VQ1My OwotCXZhbCA9IDE7Ci0jZW5kaWYgLyogRVZFTk1BWCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8K LQotICAgIH0KLS8qCi0gIEl0IHNlZW1zIHRvIGJlIFVDUy0yIGJ1dCBsZXQncyBiZSBtb3JlIGNl cnRhaW4gc2luY2UgdGhlcmUgaXMgbm8gQk9NLi4uCi0gIElmIHRoZSBudW1iZXIgb2YgNy0gYW5k IDgtYml0IGNoYXJhY3RlcnMgaXMgYXBwcm94aW1hdGVseSBlcXVhbCwgaXQgbWlnaHQKLSAgYmUg YSBjb21wcmVzc2VkIGZpbGUuICBJbiB0aGlzIGNhc2Ugd2UgZGVjaWRlIGJhc2VkIG9uIHRoZSBu YW1lLgotKi8KLSAgICBpZiAocmMgPT0gRlRfVUNTMikgewotCWlmIChlaWdodGJpdCA+IDApIHsK LQkgICAgaW50IGosIGs7Ci0JICAgIGogPSAoYzFjb250cm9scyAqIDEwMCkgLyAoYzBjb250cm9s cyArIDEpOwotCSAgICBkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBjMS9jMCAgICAgICIsIiIsaik7Ci0J ICAgIGsgPSAoYnl0ZXMgKiAxMDApIC8gZWlnaHRiaXQ7Ci0JICAgIGRlYnVnKEYxMDEsInNjYW5m aWxlIHBjdCA4Yml0ICAgIiwiIixrKTsKLQkgICAgaWYgKGsgPiA0MCAmJiBrIDwgNjAgJiYgaiA+ IDYwKSB7Ci0JCWlmIChja21hdGNoKCJ7Ki5aLCouZ3osKi56aXAsKi5aSVB9IixuYW1lLDEsMSkp IHsKLQkJICAgIGRlYnVnKEYxMTAsInNjYW5maWxlIDgtYml0IEJJTiBjb21wcmVzc2VkIixuYW1l LDApOwotCQkgICAgcmMgPSBGVF9CSU47Ci0JCSAgICBnb3RvIHhzY2FuZmlsZTsKLQkJfQotCSAg ICB9Ci0JfQotCS8qIFNtYWxsIGZpbGUgLSBub3QgZW5vdWdoIGV2aWRlbmNlIHVubGVzcyAuLi4g Ki8KLQotCWlmIChieXRlcyA8IDEwMCkgewotCSAgICBpZiAob2RkemVybyAhPSAwICYmIGV2ZW56 ZXJvICE9IDApIHsKLQkJZGVidWcoRjEwMCwic2NhbmZpbGUgc21hbGwgVUNTMiBkb3VidGZ1bCIs IiIsMCk7Ci0JCXJjID0gRlRfQklOOwotCQlnb3RvIHhzY2FuZmlsZTsKLQkgICAgfSBlbHNlIGlm IChvZGR6ZXJvID09IDAgJiYgZXZlbnplcm8gPT0gMCkgewotCQlyYyA9IGVpZ2h0Yml0ID8gRlRf OEJJVCA6IEZUXzdCSVQ7Ci0JICAgIH0KLQl9Ci0JZ290byB4c2NhbmZpbGU7CQkJLyogU2VlbXMg dG8gYmUgVUNTLTIgKi8KLSAgICB9Ci0KLS8qIElmIG5vbmUgb2YgdGhlIGFib3ZlLCBpdCdzIHBy b2JhYmx5IG5vdCBVbmljb2RlLiAgKi8KLQotICAgIGlmICghZWlnaHRiaXQpIHsJCQkvKiBJdCdz IDctYml0ICovCi0JaWYgKGMwY29udHJvbHMpIHsJCS8qIFRoaXMgd291bGQgYmUgc3RyYW5nZSAq LwotCSAgICBpZiAoKGMwbm9uaXNvID4gMCkgJiYgKHR4dGN6ID09IDApKSB7Ci0JCWRlYnVnKEYx MDAsInNjYW5maWxlIDctYml0IEJJTiAoYzBjb25pc28pIiwiIiwwKTsKLQkJcmMgPSBGVF9CSU47 Ci0JICAgIH0gZWxzZSB7Ci0JCWRlYnVnKEYxMDAsInNjYW5maWxlIDctYml0IElTTzIwMjIgVEVY VCAobm8gYzBub25pc28pIiwiIiwwKTsKLQkJcmMgPSBGVF83QklUOwotCSAgICB9Ci0JfSBlbHNl IHsJCQkvKiA3LWJpdCB0ZXh0ICovCi0JICAgIGRlYnVnKEYxMDAsInNjYW5maWxlIDctYml0IFRF WFQgKG5vIGMwY29udHJvbHMpIiwiIiwwKTsKLQkgICAgcmMgPSBGVF83QklUOwotCX0KLSAgICB9 IGVsc2UgaWYgKCFjMG5vbmlzbyB8fCB0eHRjeikgewkvKiA4LWJpdCB0ZXh0ICovCi0JZGVidWco RjEwMCwic2NhbmZpbGUgOC1iaXQgVEVYVCAobm8gYzBub25pc28pIiwiIiwwKTsKLQlyYyA9IEZU XzhCSVQ7Ci0JdmFsID0gYzFjb250cm9scyA/IDEgOiAwOwotICAgIH0gZWxzZSB7CQkJCS8qIDgt Yml0IGJpbmFyeSAqLwotCWRlYnVnKEYxMDAsInNjYW5maWxlIDgtYml0IEJJTiAoYzBub25pc28p IiwiIiwwKTsKLQlyYyA9IEZUX0JJTjsKLSAgICB9Ci0KLSNlbHNlICAvKiAhVU5JQ09ERSAqLwot Ci0gICAgaWYgKGMwbm9uaXNvKSB7Ci0JZGVidWcoRjEwMCwic2NhbmZpbGUgOC1iaXQgQklOIChj MG5vbmlzbykiLCIiLDApOwotCXJjID0gRlRfQklOOwotICAgIH0gZWxzZSBpZiAoZWlnaHRiaXQp IHsKLQlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSA4LWJpdCBURVhUIChubyBjMG5vbmlzbykiLCIiLDAp OwotCXJjID0gRlRfOEJJVDsKLQl2YWwgPSBjMWNvbnRyb2xzID8gMSA6IDA7Ci0gICAgfSBlbHNl IHsKLQlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSA3LWJpdCBURVhUIChubyBjMG5vbmlzbykiLCIiLDAp OwotCXJjID0gRlRfN0JJVDsKLSAgICB9Ci0KLSNlbmRpZiAvKiBVTklDT0RFICovCi0KLSAgeHNj YW5maWxlOgotICAgIGlmIChmbGFnKSAqZmxhZyA9IHZhbDsKLSAgICBkZWJ1ZyhGMTAxLCJzY2Fu ZmlsZSByZXN1bHQgICAgICIsIiIscmMpOwotICAgIHJldHVybihyYyk7Ci19Ci0KLS8qCi0gIHNj YW5zdHJpbmcgLSBsaWtlIHNjYW4gZmlsZSBidXQgZm9yIGEgc3RyaW5nLgotICBUaGlzIGlzIGp1 c3QgYSBxdWljayBidXRjaGVyeSBvZiBzY2FuZmlsZSB3aXRob3V0IHRoaW5raW5nIHRvbyBtdWNo LgotKi8KLWludAotc2NhbnN0cmluZyhzKSBjaGFyICogczsgewotICAgIGludCB4LCB2YWwgPSAt MSwgY291bnQgPSAwOwkJLyogV29ya2VycyAqLwotICAgIGludCByYyA9IC0xOwkJCS8qIFJldHVy biBjb2RlICovCi0gICAgaW50IHB2ID0gLTE7CQkJLyogUGF0dGVybi1tYXRjaCB2YWx1ZSAqLwot ICAgIGludCBieXRlcyA9IDA7CQkJLyogVG90YWwgYnl0ZSBjb3VudCAqLwotI2lmZGVmIFVOSUNP REUKLSAgICB1bnNpZ25lZCBpbnQgYzAsIGMxOwkJLyogRmlyc3QgMiBmaWxlIGJ5dGVzIChmb3Ig Qk9NKSAqLwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSAgICBleHRlcm4gaW50IHBpcGVzZW5kLCBm aWxlcGVlazsKLQotICAgIHJlZ2lzdGVyIGludCBpOwkJCS8qIExvb3AgY29udHJvbCAqLwotICAg IGludCByZWFkc2l6ZSA9IDA7CQkJLyogSG93IG11Y2ggdG8gcmVhZCAqLwotICAgIGludCBlaWdo dGJpdCA9IDA7CQkJLyogTnVtYmVyIG9mIGJ5dGVzIHdpdGggOHRoIGJpdCBvbiAqLwotICAgIGlu dCBjMGNvbnRyb2xzID0gMDsJCQkvKiBDMCBub24tdGV4dCBjb250cm9sLWNoYXIgY291bnRlciAq LwotICAgIGludCBjMG5vbmlzbyA9IDA7CQkJLyogQzAgbm9uLUlTTyBjb250cm9sLWNoYXIgY291 bnRlciAqLwotICAgIGludCBjMWNvbnRyb2xzID0gMDsJCQkvKiBDMSBjb250cm9sLWNoYXJhY3Rl ciBjb3VudGVyICovCi0gICAgdW5zaWduZWQgaW50IGM7CQkJLyogQ3VycmVudCBjaGFyYWN0ZXIg Ki8KLSAgICBpbnQgcnVubWF4ID0gMDsJCQkvKiBMb25nZXN0IHJ1biBvZiAwIGJ5dGVzICovCi0g ICAgaW50IHJ1bnplcm8gPSAwOwkJCS8qIFJ1biBvZiAwIGJ5dGVzICovCi0gICAgaW50IHBjdHpl cm8gPSAwOwkJCS8qIFBlcmNlbnRhZ2Ugb2YgMCBieXRlcyAqLwotICAgIGludCB0eHRjeiA9IDA7 Ci0KLSNpZmRlZiBVTklDT0RFCi0gICAgaW50IG5vdHV0ZjggPSAwOwkJCS8qIE5vbnplcm8gaWYg ZGVmaW5pdGVseSBub3QgVVRGLTggKi8KLSAgICBpbnQgdXRmOHN0YXRlID0gMDsJCQkvKiBVVEYt OCByZWNvZ25pemVyIHN0YXRlICovCi0gICAgaW50IG9kZHplcm8gPSAwOwkJCS8qIE51bWJlciBv ZiAwIGJ5dGVzIGluIG9kZCBwb3N0aW9ucyAqLwotICAgIGludCBldmVuemVybyA9IDA7CQkJLyog YW5kIGluIGV2ZW4gcG9zaXRpb25zICovCi0gICAgaW50IGxmbnVsID0gMDsJCQkvKiBOdW1iZXIg b2YgPExGPjxOVUw+IHNlcXVlbmNlcyAqLwotICAgIGludCBjcmxmID0gMDsJCQkvKiBOdW1iZXIg b2YgPENSTEY+IHNlcXVlbmNlcyAqLwotI2Vsc2UKLSAgICBpbnQgbm90dXRmOCA9IDE7Ci0jZW5k aWYgLyogVU5JQ09ERSAqLwotCi0gICAgY2hhciAqIGJ1ZiA9IHM7Ci0gICAgaWYgKCFzKSBzID0g IiI7Ci0gICAgY291bnQgPSBzdHJsZW4ocyk7Ci0KLSNpZmRlZiBVTklDT0RFCi0gICAgaWYgKGJ5 dGVzID09IDAgJiYgY291bnQgPiAxKSB7Ci0JaW50IGluY2xfY250ID0gMDsKLQotCS8qIEZpcnN0 IGxvb2sgZm9yIEJPTSAqLwotCi0JYzAgPSAodW5zaWduZWQpKCh1bnNpZ25lZClidWZbMF0mMHhG Rik7IC8qIEZpcnN0IGZpbGUgYnl0ZSAqLwotCWMxID0gKHVuc2lnbmVkKSgodW5zaWduZWQpYnVm WzFdJjB4RkYpOyAvKiBTZWNvbmQgYnl0ZSAqLwotCi0JaWYgKGMwID09IDB4RkUgJiYgYzEgPT0g MHhGRikgewkvKiBVQ1MtMiBCRSAqLwotCSAgICByYyA9IEZUX1VDUzI7Ci0JICAgIHZhbCA9IDA7 Ci0JICAgIGRlYnVnKEYxMTEsInNjYW5zdHJpbmcgVUNTMiBCT00gQkUiLGNraXRvYSh2YWwpLHJj KTsKLQkgICAgaW5jbF9jbnQrKzsKLQl9IGVsc2UgaWYgKGMwID09IDB4RkYgJiYgYzEgPT0gMHhG RSkgeyAvKiBVQ1MtMiBMRSAqLwotCSAgICByYyA9IEZUX1VDUzI7Ci0JICAgIHZhbCA9IDE7Ci0J ICAgIGRlYnVnKEYxMTEsInNjYW5zdHJpbmcgVUNTMiBCT00gTEUiLGNraXRvYSh2YWwpLHJjKTsK LQkgICAgaW5jbF9jbnQrKzsKLQl9IGVsc2UgaWYgKGNvdW50ID4gMikgaWYgKGMwID09IDB4RUYg JiYgYzEgPT0gMHhCQiAmJgotCQkgICAodW5zaWduZWQpKCh1bnNpZ25lZClidWZbMl0mMHhGRikg PT0gMHhCRikgewotCSAgICByYyA9IEZUX1VURjg7Ci0JICAgIGRlYnVnKEYxMTEsInNjYW5zdHJp bmcgVVRGOCBCT00iLGNraXRvYSh2YWwpLHJjKTsKLQkgICAgaW5jbF9jbnQrKzsKLQl9Ci0JaWYg KGluY2xfY250KSB7CQkvKiBIYXZlIEJPTSAqLwotCSAgICBieXRlcyArPSBjb3VudDsKLQkgICAg Z290byB4c2NhbnN0cmluZzsKLQl9Ci0gICAgfQotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQotICAg IGJ5dGVzICs9IGNvdW50OwkJCS8qIENvdW50IGJ5dGVzIHJlYWQgKi8KLQotICAgIGZvciAoaSA9 IDA7IGkgPCBjb3VudDsgaSsrKSB7CS8qIEZvciBlYWNoIGJ5dGUuLi4gKi8KLQljID0gKHVuc2ln bmVkKWJ1ZltpXTsJLyogRm9yIGVhc2Ugb2YgcmVmZXJlbmNlICovCi0JaWYgKCFjKSB7CQkJLyog WmVybyBieXRlPyAqLwotCSAgICBnb3RvIHhzY2Fuc3RyaW5nOwkvKiBOdWxsIHRlcm1pbmF0ZWQg c3RyaW5nICovCi0JfQotCWlmICgoYyAmIDB4ODApID09IDApIHsJLyogV2UgaGF2ZSBhIDctYml0 IGJ5dGUgKi8KLSNpZmRlZiBVTklDT0RFCi0JICAgIGlmIChpID4gMCAmJiBjID09IDEwKSB7IC8q IExpbmVmZWVkICovCi0JCWlmIChidWZbaS0xXSA9PSAwKSBsZm51bCsrOyAvKiBQcmVjZWRlZCBi eSBOVUwgKi8KLQkJZWxzZSBpZiAoYnVmW2ktMV0gPT0gMTMpIGNybGYrKzsgLyogb3IgYnkgQ1Iu Li4gKi8KLQkgICAgfQotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQkgICAgaWYgKGMgPCAnICcpIHsJ CS8qIENoZWNrIGZvciBDTyBjb250cm9scyAqLwotCQlpZiAoYyAhPSBMRiAmJiBjICE9IENSICYm IGMgIT0gSFQgJiYgYyAhPSBGRikgewotCQkgICAgYzBjb250cm9scysrOwotCQkgICAgaWYgKGMg IT0gRVNDICYmIGMgIT0gU08gJiYgYyAhPSBTSSkKLQkJICAgICAgYzBub25pc28rKzsKLQkJfQot CQlpZiAoKGMgPT0gJ1wwMzInKQkvKiBDdHJsLVogKi8KLQkJICAgICkgewotCQkgICAgYzBjb250 cm9scy0tOwotCQkgICAgYzBub25pc28tLTsKLQkJfQotCSAgICB9Ci0jaWZkZWYgVU5JQ09ERQot CSAgICBpZiAoIW5vdHV0ZjggJiYgdXRmOHN0YXRlKSB7IC8qIEluIFVURi04IHNlcXVlbmNlPyAq LwotCQl1dGY4c3RhdGUgPSAwOwotCQlkZWJ1ZyhGMDAwLCJzY2Fuc3RyaW5nIiwiNy1iaXQgYnl0 ZSBpbiBVVEY4IHNlcXVlbmNlIixjKTsKLQkJbm90dXRmOCsrOwkJLyogVGhlbiBpdCdzIG5vdCBV VEYtOCAqLwotCQljb250aW51ZTsKLQkgICAgfQotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQl9IGVs c2UgewkJCS8qIFdlIGhhdmUgYW4gOC1iaXQgYnl0ZSAqLwotCSAgICBlaWdodGJpdCsrOwkJLyog Q291bnQgaXQgKi8KLQkgICAgaWYgKGMgPj0gMHg4MCAmJiBjIDwgMHhBMCkgLyogQ2hlY2sgZm9y IEMxIGNvbnRyb2xzICovCi0JICAgICAgYzFjb250cm9scysrOwotI2lmZGVmIFVOSUNPREUKLQkg ICAgaWYgKCFub3R1dGY4KSB7CQkvKiBJZiBpdCBtaWdodCBzdGlsbCBiZSBVVEY4Li4uICovCi0J CXN3aXRjaCAodXRmOHN0YXRlKSB7IC8qIEVudGVyIHRoZSBVVEYtOCBzdGF0ZSBtYWNoaW5lICov Ci0JCSAgY2FzZSAwOgkJIC8qIEZpcnN0IGJ5dGUuLi4gKi8KLQkJICAgIGlmICgoYyAmIDB4RTAp ID09IDB4QzApIHsgLyogVGVsbHMgbnVtYmVyIG9mICovCi0JCQl1dGY4c3RhdGUgPSAxOyAgICAg ICAgLyogc3Vic2VxdWVudCBieXRlcyAqLwotCQkgICAgfSBlbHNlIGlmICgoYyAmIDB4RjApID09 IDB4RTApIHsKLQkJCXV0ZjhzdGF0ZSA9IDI7Ci0JCSAgICB9IGVsc2UgaWYgKChjICYgMHhGOCkg PT0gMHhGMCkgewotCQkJdXRmOHN0YXRlID0gMzsKLQkJICAgIH0gZWxzZSB7Ci0JCQlub3R1dGY4 Kys7Ci0JCSAgICB9Ci0JCSAgICBicmVhazsKLQkJICBjYXNlIDE6CQkvKiBTdWJzZXF1ZW50IGJ5 dGUgKi8KLQkJICBjYXNlIDI6Ci0JCSAgY2FzZSAzOgotCQkgICAgaWYgKChjICYgMHhDMCkgIT0g MHg4MCkgeyAvKiBNdXN0IHN0YXJ0IHdpdGggMTAgKi8KLQkJCWRlYnVnKEYwMDAsInNjYW5zdHJp bmciLAotCQkJICAgICAgImJhZCBieXRlIGluIFVURjggc2VxdWVuY2UiLGMpOwotCQkJbm90dXRm OCsrOwotCQkJYnJlYWs7Ci0JCSAgICB9Ci0JCSAgICB1dGY4c3RhdGUtLTsJLyogR29vZCwgb25l IGxlc3MgaW4gdGhpcyBzZXF1ZW5jZSAqLwotCQkgICAgYnJlYWs7Ci0JCSAgZGVmYXVsdDoJCS8q IFNob3VsZG4ndCBoYXBwZW4gKi8KLQkJICAgIGRlYnVnKEYxMTEsInNjYW5zdHJpbmciLCJiYWQg VVRGOCBzdGF0ZSIsdXRmOHN0YXRlKTsKLQkJICAgIG5vdHV0ZjgrKzsKLQkJfQotCSAgICB9Ci0j ZW5kaWYgLyogVU5JQ09ERSAqLwotCX0KLSAgICB9Ci0gICAgaWYgKGJ5dGVzID09IDApCQkJLyog SWYgbm90aGluZyB3YXMgcmVhZCAqLwotICAgICAgcmV0dXJuKC0xKTsJCQkvKiB3ZSdyZSBkb25l LiAqLwotCi0jaWZkZWYgVU5JQ09ERQotICAgIGlmIChieXRlcyA+IDEwMCkJCQkvKiBCeXRlcyBp cyBub3QgMCAqLwotICAgICAgcGN0emVybyA9IChldmVuemVybyArIG9kZHplcm8pIC8gKGJ5dGVz IC8gMTAwKTsKLSAgICBlbHNlCi0gICAgICBwY3R6ZXJvID0gKChldmVuemVybyArIG9kZHplcm8p ICogMTAwKSAvIGJ5dGVzOwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQotI2lmZGVmIFVOSUNPREUK LSAgICB4ID0gZWlnaHRiaXQgPyBieXRlcyAvIDIwIDogYnl0ZXMgLyA0OyAvKiBGb3IgVUNTLTIu Li4gKi8KLQotICAgIGlmIChydW5tYXggPiAyKSB7CQkJLyogRmlsZSBoYXMgcnVuIG9mIG1vcmUg dGhhbiAyIE5VTHMgKi8KLQlkZWJ1ZyhGMTAwLCJzY2Fuc3RyaW5nIEJJTiBydW5tYXgiLCIiLDAp OwotCXJjID0gRlRfQklOOwkJCS8qIHNvIGl0IGNhbid0IGJlIGFueSBraW5kIG9mIHRleHQuICov Ci0JZ290byB4c2NhbnN0cmluZzsKLQotICAgIH0gZWxzZSBpZiAocmMgPT0gRlRfVUNTMiB8fCAo cmMgPT0gRlRfVVRGOCAmJiBydW5tYXggPT0gMCkpIHsKLQlnb3RvIHhzY2Fuc3RyaW5nOwkJCS8q IEZpbGUgc3RhcnRzIHdpdGggYSBCT00gKi8KLQotICAgIH0gZWxzZSBpZiAoZWlnaHRiaXQgPiAw ICYmICFub3R1dGY4KSB7IC8qIEZpbGUgaGFzIDgtYml0IGRhdGEgKi8KLQlpZiAocnVubWF4ID4g MCkgewkJICAgLyogYW5kIHJ1bnMgb2YgTlVMcyAqLwotCSAgICBkZWJ1ZyhGMTAwLCJzY2Fuc3Ry aW5nIEJJTiAobm5VVEY4KSBydW5tYXgiLCIiLDApOwotCSAgICByYyA9IEZUX0JJTjsJCSAgIC8q IFVURi04IGRvZXNuJ3QgaGF2ZSBOVUxzICovCi0JfSBlbHNlIHsJCQkgICAvKiBObyBOVUxzICov Ci0JICAgIGRlYnVnKEYxMDAsInNjYW5zdHJpbmcgVVRGOCAobm5VVEY4ICsgcnVubWF4ID09IDAp IiwiIiwwKTsKLQkgICAgcmMgPSBGVF9VVEY4OwkJICAgLyogYW5kIG5vdCBub3QgVVRGLTgsIHNv IGlzIFVURi04ICovCi0JfQotCWdvdG8geHNjYW5zdHJpbmc7Ci0gICAgfQotLyoKLSAgSXQgc2Vl bXMgdG8gYmUgVUNTLTIgYnV0IGxldCdzIGJlIG1vcmUgY2VydGFpbiBzaW5jZSB0aGVyZSBpcyBu byBCT00uLi4KLSAgSWYgdGhlIG51bWJlciBvZiA3LSBhbmQgOC1iaXQgY2hhcmFjdGVycyBpcyBh cHByb3hpbWF0ZWx5IGVxdWFsLCBpdCBtaWdodAotICBiZSBhIGNvbXByZXNzZWQgZmlsZS4gIElu IHRoaXMgY2FzZSB3ZSBkZWNpZGUgYmFzZWQgb24gdGhlIG5hbWUuCi0qLwotICAgIGlmIChyYyA9 PSBGVF9VQ1MyKSB7Ci0JaWYgKGJ5dGVzIDwgMTAwKSB7Ci0JICAgIGlmIChvZGR6ZXJvICE9IDAg JiYgZXZlbnplcm8gIT0gMCkgewotCQlkZWJ1ZyhGMTAwLCJzY2Fuc3RyaW5nIHNtYWxsIFVDUzIg ZG91YnRmdWwiLCIiLDApOwotCQlyYyA9IEZUX0JJTjsKLQkJZ290byB4c2NhbnN0cmluZzsKLQkg ICAgfSBlbHNlIGlmIChvZGR6ZXJvID09IDAgJiYgZXZlbnplcm8gPT0gMCkgewotCQlyYyA9IGVp Z2h0Yml0ID8gRlRfOEJJVCA6IEZUXzdCSVQ7Ci0JICAgIH0KLQl9Ci0JZ290byB4c2NhbnN0cmlu ZzsJCQkvKiBTZWVtcyB0byBiZSBVQ1MtMiAqLwotICAgIH0KLQotLyogSWYgbm9uZSBvZiB0aGUg YWJvdmUsIGl0J3MgcHJvYmFibHkgbm90IFVuaWNvZGUuICAqLwotCi0gICAgaWYgKCFlaWdodGJp dCkgewkJCS8qIEl0J3MgNy1iaXQgKi8KLQlpZiAoYzBjb250cm9scykgewkJLyogVGhpcyB3b3Vs ZCBiZSBzdHJhbmdlICovCi0JICAgIGlmICgoYzBub25pc28gPiAwKSAmJiAodHh0Y3ogPT0gMCkp IHsKLQkJZGVidWcoRjEwMCwic2NhbnN0cmluZyA3LWJpdCBCSU4gKGMwY29uaXNvKSIsIiIsMCk7 Ci0JCXJjID0gRlRfQklOOwotCSAgICB9IGVsc2UgewotCQlkZWJ1ZyhGMTAwLCJzY2Fuc3RyaW5n IDctYml0IElTTzIwMjIgVEVYVCAobm8gYzBub25pc28pIiwiIiwwKTsKLQkJcmMgPSBGVF83QklU OwotCSAgICB9Ci0JfSBlbHNlIHsJCQkvKiA3LWJpdCB0ZXh0ICovCi0JICAgIGRlYnVnKEYxMDAs InNjYW5zdHJpbmcgNy1iaXQgVEVYVCAobm8gYzBjb250cm9scykiLCIiLDApOwotCSAgICByYyA9 IEZUXzdCSVQ7Ci0JfQotICAgIH0gZWxzZSBpZiAoIWMwbm9uaXNvIHx8IHR4dGN6KSB7CS8qIDgt Yml0IHRleHQgKi8KLQlkZWJ1ZyhGMTAwLCJzY2Fuc3RyaW5nIDgtYml0IFRFWFQgKG5vIGMwbm9u aXNvKSIsIiIsMCk7Ci0JcmMgPSBGVF84QklUOwotCXZhbCA9IGMxY29udHJvbHMgPyAxIDogMDsK LSAgICB9IGVsc2UgewkJCQkvKiA4LWJpdCBiaW5hcnkgKi8KLQlkZWJ1ZyhGMTAwLCJzY2Fuc3Ry aW5nIDgtYml0IEJJTiAoYzBub25pc28pIiwiIiwwKTsKLQlyYyA9IEZUX0JJTjsKLSAgICB9Ci0K LSNlbHNlICAvKiAhVU5JQ09ERSAqLwotCi0gICAgaWYgKGMwbm9uaXNvKSB7Ci0JZGVidWcoRjEw MCwic2NhbnN0cmluZyA4LWJpdCBCSU4gKGMwbm9uaXNvKSIsIiIsMCk7Ci0JcmMgPSBGVF9CSU47 Ci0gICAgfSBlbHNlIGlmIChlaWdodGJpdCkgewotCWRlYnVnKEYxMDAsInNjYW5zdHJpbmcgOC1i aXQgVEVYVCAobm8gYzBub25pc28pIiwiIiwwKTsKLQlyYyA9IEZUXzhCSVQ7Ci0JdmFsID0gYzFj b250cm9scyA/IDEgOiAwOwotICAgIH0gZWxzZSB7Ci0JZGVidWcoRjEwMCwic2NhbnN0cmluZyA3 LWJpdCBURVhUIChubyBjMG5vbmlzbykiLCIiLDApOwotCXJjID0gRlRfN0JJVDsKLSAgICB9Ci0K LSNlbmRpZiAvKiBVTklDT0RFICovCi0KLSAgeHNjYW5zdHJpbmc6Ci0gICAgZGVidWcoRjEwMSwi c2NhbnN0cmluZyByZXN1bHQgICAgICIsIiIscmMpOwotICAgIHJldHVybihyYyk7Ci19Ci0KLQot Ci0vKiAgRiBJIEwgRSBTIEUgTCBFIEMgVCAgLS0gIFNlbGVjdCB0aGlzIGZpbGUgZm9yIHNlbmRp bmcgICovCi0KLWludAotI2lmZGVmIENLX0FOU0lDCi1maWxlc2VsZWN0KAotICAgIGNoYXIgKmYs IGNoYXIgKnNhLCBjaGFyICpzYiwgY2hhciAqc25hLCBjaGFyICpzbmIsCi0gICAgQ0tfT0ZGX1Qg bWluc2l6LCBDS19PRkZfVCBtYXhzaXosCi0gICAgaW50IG5idSwgaW50IG54bGlzdCwKLSAgICBj aGFyICoqIHhsaXN0Ci0pCi0jZWxzZQotZmlsZXNlbGVjdChmLHNhLHNiLHNuYSxzbmIsbWluc2l6 LG1heHNpeixuYnUsbnhsaXN0LHhsaXN0KQotIGNoYXIgKmYsKnNhLCpzYiwqc25hLCpzbmI7IENL X09GRl9UIG1pbnNpeixtYXhzaXo7Ci0gaW50IG5idSxueGxpc3Q7IGNoYXIgKiogeGxpc3Q7Ci0j ZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGZpbGVzZWxlY3QgKi8gewotICAgIGNoYXIgKmZkYXRl OwotICAgIGludCBuOwotICAgIENLX09GRl9UIHo7Ci0KLSAgICBkZWJ1ZyhGMTExLCJmaWxlc2Vs ZWN0IG1pbnNpeiIsY2tmc3RvYShtaW5zaXopLG1pbnNpeik7Ci0gICAgZGVidWcoRjExMSwiZmls ZXNlbGVjdCBtYXhzaXoiLGNrZnN0b2EobWF4c2l6KSxtYXhzaXopOwotICAgIGRlYnVnKEYxMTEs ImZpbGVzZWxlY3QgKENLX09GRl9UKS0xIixja2ZzdG9hKChDS19PRkZfVCktMSksKENLX09GRl9U KS0xKTsKLQotICAgIGlmICghc2EpIHNhID0gIiI7Ci0gICAgaWYgKCFzYikgc2IgPSAiIjsKLSAg ICBpZiAoIXNuYSkgc25hID0gIiI7Ci0gICAgaWYgKCFzbmIpIHNuYiA9ICIiOwotCi0jaWZkZWYg Q0tTWU1MSU5LCi0jaWZuZGVmIE5PSUNQCi0jaWZuZGVmIE5PWEZFUgotICAgIGlmIChub2xpbmtz KSB7Ci0JQ0tfT0ZGX1Qgeno7Ci0JenogPSB6Z2V0ZnMoZik7Ci0JZGVidWcoRjExMSwiZmlsZXNl bGVjdCBOT0xJTktTIHpnZXRmcyIsZix6eik7Ci0JaWYgKHp6IDwgKENLX09GRl9UKTApCi0JICBy ZXR1cm4oMCk7Ci0JZGVidWcoRjExMSwiZmlsZXNlbGVjdCBOT0xJTktTIHpnZnNfbGluayIsZix6 Z2ZzX2xpbmspOwotCWlmICh6Z2ZzX2xpbmspCi0JICByZXR1cm4oMCk7Ci0gICAgfQotI2VuZGlm IC8qIE5PWEZFUiAqLwotI2VuZGlmIC8qIE5PSUNQICovCi0jZW5kaWYgLyogQ0tTWU1MSU5LICov Ci0KLSAgICBkZWJ1ZyhGMTEwLCJmaWxlc2VsZWN0IixmLDApOwotICAgIGlmICgqc2EgfHwgKnNi IHx8ICpzbmEgfHwgKnNuYikgewotCWZkYXRlID0gemZjZGF0KGYpOwkJLyogRGF0ZS90aW1lIG9m IHRoaXMgZmlsZSAqLwotCWlmICghZmRhdGUpIGZkYXRlID0gIiI7Ci0JbiA9IHN0cmxlbihmZGF0 ZSk7Ci0JZGVidWcoRjExMSwiZmlsZXNlbGVjdCBmZGF0ZSIsZmRhdGUsbik7Ci0JaWYgKG4gIT0g MTcpCQkJLyogRmFpbGVkIHRvIGdldCBpdCAqLwotCSAgcmV0dXJuKDEpOwotCS8qIC9BRlRFUjog Ki8KLQlpZiAoc2FbMF0gJiYgKHN0cmNtcChmZGF0ZSwoY2hhciAqKXNhKSA8PSAwKSkgewotCSAg ICBkZWJ1ZyhGMTEwLCJmaWxlc2VsZWN0IHNhIixzYSwwKTsKLQkgICAgLyogdGxvZyhGMTEwLCJT a2lwcGluZyAodG9vIG9sZCkiLGYsMCk7ICovCi0JICAgIHJldHVybigwKTsKLQl9Ci0JLyogL0JF Rk9SRTogKi8KLQlpZiAoc2JbMF0gJiYgKHN0cmNtcChmZGF0ZSwoY2hhciAqKXNiKSA+PSAwKSkg ewotCSAgICBkZWJ1ZyhGMTEwLCJmaWxlc2VsZWN0IHNiIixzYiwwKTsKLQkgICAgLyogdGxvZyhG MTEwLCJTa2lwcGluZyAodG9vIG5ldykiLGYsMCk7ICovCi0JICAgIHJldHVybigwKTsKLQl9Ci0J LyogL05PVC1BRlRFUjogKi8KLQlpZiAoc25hWzBdICYmIChzdHJjbXAoZmRhdGUsKGNoYXIgKilz bmEpID4gMCkpIHsKLQkgICAgZGVidWcoRjExMCwiZmlsZXNlbGVjdCBzbmEiLHNuYSwwKTsKLQkg ICAgLyogdGxvZyhGMTEwLCJTa2lwcGluZyAodG9vIG5ldykiLGYsMCk7ICovCi0JICAgIHJldHVy bigwKTsKLQl9Ci0JLyogL05PVC1CRUZPUkU6ICovCi0JaWYgKHNuYlswXSAmJiAoc3RyY21wKGZk YXRlLChjaGFyICopc25iKSA8IDApKSB7Ci0JICAgIGRlYnVnKEYxMTAsImZpbGVzZWxlY3Qgc25i IixzbmIsMCk7Ci0JICAgIC8qIHRsb2coRjExMCwiU2tpcHBpbmcgKHRvbyBvbGQpIixmLDApOyAq LwotCSAgICByZXR1cm4oMCk7Ci0JfQotICAgIH0KLSAgICAvKiBTbWFsbGVyIG9yIGxhcmdlciAq LwotICAgIGlmIChtaW5zaXogPiAoQ0tfT0ZGX1QpLTEgfHwgbWF4c2l6ID4gKENLX09GRl9UKS0x KSB7Ci0JeiA9IHpjaGtpKGYpOwkJCS8qIEdldCBzaXplICovCi0JZGVidWcoRjEwMSwiZmlsZXNl bGVjdCBmaWxlc2l6ZSIsIiIseik7Ci0JaWYgKHogPCAoQ0tfT0ZGX1QpMCkKLQkgIHJldHVybigx KTsKLQlpZiAoKG1pbnNpeiA+IChDS19PRkZfVCktMSkgJiYgKHogPj0gbWluc2l6KSkgewotCSAg ICBkZWJ1ZyhGMTExLCJmaWxlc2VsZWN0IG1pbnNpeiBza2lwcGluZyIsZixtaW5zaXopOwotCSAg ICAvKiB0bG9nKEYxMTEsIlNraXBwaW5nICh0b28gYmlnKSIsZix6KTsgKi8KLQkgICAgcmV0dXJu KDApOwotCX0KLQlpZiAoKG1heHNpeiA+IChDS19PRkZfVCktMSkgJiYgKHogPD0gbWF4c2l6KSkg ewotCSAgICBkZWJ1ZyhGMTExLCJmaWxlc2VsZWN0IG1heHNpeiBza2lwcGluZyIsZixtYXhzaXop OwotCSAgICAvKiB0bG9nKEYxMTAsIlNraXBwaW5nICh0b28gc21hbGwpIixmLDApOyAqLwotCSAg ICByZXR1cm4oMCk7Ci0JfQotICAgIH0KLSAgICBpZiAobmJ1KSB7CQkJCS8qIFNraXBwaW5nIGJh Y2t1cCBmaWxlcz8gKi8KLQlpZiAoY2ttYXRjaCgKLSNpZmRlZiBDS1JFR0VYCi0JCSAgICAiKi5+ WzAtOV0qfiIJLyogTm90IHBlcmZlY3QgYnV0IGNsb3NlIGVub3VnaC4gKi8KLSNlbHNlCi0JCSAg ICAiKi5+Kn4iCQkvKiBMZXNzIGNsb3NlLiAqLwotI2VuZGlmIC8qIENLUkVHRVggKi8KLQkJICAg ICxmLGZpbGVjYXNlLDEpKSB7Ci0JICAgIGRlYnVnKEYxMTAsImZpbGVzZWxlY3Qgc2tpcHBpbmcg YmFja3VwIixmLDApOwotCSAgICByZXR1cm4oMCk7Ci0JfQotICAgIH0KLSAgICBmb3IgKG4gPSAw OyB4bGlzdCAmJiBuIDwgbnhsaXN0OyBuKyspIHsKLQlpZiAoIXhsaXN0W25dKSB7Ci0JICAgIGRl YnVnKEYxMDEsImZpbGVzZWxlY3QgeGxpc3QgZW1wdHkiLDAsbik7Ci0JICAgIGJyZWFrOwotCX0K LQlpZiAoY2ttYXRjaCh4bGlzdFtuXSxmLGZpbGVjYXNlLDEpKSB7Ci0JICAgIGRlYnVnKEYxMTEs ImZpbGVzZWxlY3QgeGxpc3QiLHhsaXN0W25dLG4pOwotCSAgICBkZWJ1ZyhGMTEwLCJmaWxlc2Vs ZWN0IHNraXBwaW5nIixmLDApOwotCSAgICByZXR1cm4oMCk7Ci0JfQotICAgIH0KLSAgICBpZiAo eGZpbGV0eXBlID4gLTEpIHsKLQluID0gc2NhbmZpbGUoZixOVUxMLG5zY2FuZmlsZSk7Ci0JaWYg KG4gPCAwKSB7Ci0JICAgIG4gPSBiaW5hcnkgPyAxIDogMDsKLQl9IGVsc2UgewotCSAgICBuID0g KG4gPT0gRlRfQklOKSA/IDEgOiAwOwotCX0KLQlpZiAobiAhPSB4ZmlsZXR5cGUpCi0JICByZXR1 cm4oMCk7Ci0gICAgfQotICAgIGRlYnVnKEYxMTAsImZpbGVzZWxlY3Qgc2VsZWN0aW5nIixmLDAp OwotICAgIHJldHVybigxKTsKLX0KLQotCi0jaWZkZWYgVENQU09DS0VUCi0jaWZkZWYgTlQKLWV4 dGVybiBpbnQgV1NBU2FmZVRvQ2FuY2VsOwotI2VuZGlmIC8qIE5UICovCi0jZW5kaWYgLyogVENQ U09DS0VUICovCi0KLVZPSUQKLXNldGZsb3coKSB7Ci0gICAgZXh0ZXJuIGludCBmbG93LCBhdXRv ZmxvdywgbWRtdHlwLCBjeHR5cGUsIGN4Zmxvd1tdOwotI2lmbmRlZiBOT0RJQUwKLSAgICBleHRl cm4gaW50IGRpYWxjYXBhcywgZGlhbGZjOwotICAgIGV4dGVybiBNRE1JTkYgKiBtb2RlbXBbXTsK LSAgICBNRE1JTkYgKiBwID0gTlVMTDsKLSAgICBsb25nIGJpdHMgPSAwOwotI2VuZGlmIC8qIE5P RElBTCAqLwotCi0gICAgZGVidWcoRjEwMSwic2V0ZmxvdyBhdXRvZmxvdyIsIiIsYXV0b2Zsb3cp OwotCi0vKiAjaWZkZWYgQ09NTUVOVCAqLwotLyogV0hZIFdBUyBUSElTIENPTU1FTlRFRCBPVVQ/ ICovCi0gICAgaWYgKCFhdXRvZmxvdykgICAgICAgICAgICAgICAgICAgICAgLyogT25seSBpZiBG TE9XIGlzIEFVVE8gKi8KLSAgICAgIHJldHVybjsKLS8qICNlbmRpZiAqLyAvKiBDT01NRU5UICov Ci0KLSAgICBkZWJ1ZyhGMTAxLCJzZXRmbG93IGxvY2FsIiwiIixsb2NhbCk7Ci0gICAgZGVidWco RjEwMSwic2V0ZmxvdyBuZXR3b3JrIiwiIixuZXR3b3JrKTsKLSAgICBkZWJ1ZyhGMTAxLCJzZXRm bG93IGN4dHlwZSIsIiIsY3h0eXBlKTsKLQotI2lmZGVmIFROX0NPTVBPUlQKLSAgICBpZiAobmV0 d29yayAmJiBpc3RuY29tcG9ydCgpKSB7Ci0JZmxvdyA9IGN4Zmxvd1tDWFRfTU9ERU1dOwotICAg ICAgICBkZWJ1ZyhGMTAxLCJzZXRmbG93IFROX0NPTVBPUlQgZmxvdyIsIiIsZmxvdyk7Ci0gICAg ICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYgLyogVE5fQ09NUE9SVCAqLwotCi0gICAgaWYgKG5l dHdvcmsgfHwgIWxvY2FsIHx8IGN4dHlwZSA9PSBDWFRfRElSRUNUKSB7Ci0gICAgICAgIGZsb3cg PSBjeGZsb3dbY3h0eXBlXTsgICAgICAgICAgLyogU2V0IGFwcHJvcHJpYXRlIGZsb3cgY29udHJv bCAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJzZXRmbG93IGZsb3ciLCIiLGZsb3cpOwotICAgICAg ICByZXR1cm47Ci0gICAgfQotICAgIGlmIChjeHR5cGUgIT0gQ1hUX01PREVNKSAgICAgICAgICAg IC8qIENvbm5lY3Rpb24gdHlwZSBzaG91bGQgYmUgbW9kZW0gKi8KLSAgICAgIHJldHVybjsKLQot I2lmbmRlZiBOT0RJQUwKLSAgICBiaXRzID0gZGlhbGNhcGFzOyAgICAgICAgICAgICAgICAgICAv KiBDYXBhYmlsaXR5IGJpdHMgKi8KLSAgICBpZiAoIWJpdHMpIHsgICAgICAgICAgICAgICAgICAg ICAgICAvKiBObyBiaXRzPyAqLwotICAgICAgICBwID0gbW9kZW1wW21kbXR5cF07ICAgICAgICAg ICAgIC8qIExvb2sgaW4gbW9kZW0gaW5mbyBzdHJ1Y3R1cmUgKi8KLSAgICAgICAgaWYgKHApCi0g ICAgICAgICAgYml0cyA9IHAtPmNhcGFzOwotICAgIH0KLSAgICBpZiAoZGlhbGZjID09IEZMT19B VVRPKSB7ICAgICAgICAgICAvKiBJZiBESUFMIGZsb3cgaXMgQVVUTyAqLwotI2lmZGVmIENLX1JU U0NUUyAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHdlIGNhbiBkbyBSVFMvQ1RTIGZsb3cg Y29udHJvbCAqLwotICAgICAgICBpZiAoYml0cyAmIENLRF9IVykgICAgICAgICAgICAgIC8qIGFu ZCBtb2RlbSBjYW4gZG8gaXQgdG9vICovCi0gICAgICAgICAgZmxvdyA9IEZMT19SVFNDOyAgICAg ICAgICAgICAgLyogdGhlbiBzd2l0Y2ggdG8gUlRTL0NUUyAqLwotICAgICAgICBlbHNlICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIG90aGVyd2lzZSAqLwotICAgICAgICAgIGZsb3cgPSBG TE9fWE9OWDsgICAgICAgICAgICAgIC8qIHVzZSBYb24vWG9mZi4gKi8KLSNlbHNlCi0jaWZuZGVm IE5FWFQKLSNpZm5kZWYgSVJJWAotICAgICAgICBmbG93ID0gRkxPX1hPTlg7ICAgICAgICAgICAg ICAgIC8qIFVzZSBYb24vWG9mZi4gKi8KLSNlbmRpZiAvKiBJUklYICovCi0jZW5kaWYgLyogTkVY VCAqLwotI2VuZGlmIC8qIENLX1JUU0NUUyAqLwotICAgIH0KLSNlbmRpZiAvKiBOT0RJQUwgKi8K LSAgICBkZWJ1ZyhGMTAxLCJzZXRmbG93IG1vZGVtIGZsb3ciLCIiLGZsb3cpOwotICAgIHJldHVy bjsKLX0KLQotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgQ0tfVFJJR0dFUgotCi0vKiAgQSBVIFQg TyBFIFggSSBUIEMgSCBLICAtLSAgQ2hlY2sgZm9yIENPTk5FQ1QtbW9kZSB0cmlnZ2VyIHN0cmlu ZyAgKi8KLS8qCi0gIFJldHVybnMgLTEgaWYgdHJpZ2dlciBub3QgZm91bmQsIG9yIGVsc2UgdGhl IHRyaWdnZXIgaW5kZXgsIDAgb3IgZ3JlYXRlci4KLSAgKFJlcGxhY2Ugd2l0aCBmYW5jaWVyIGFu ZCBtb3JlIGVmZmljaWVudCBtYXRjaGVyIGxhdGVyLi4uKQotICBOT1RFOiB0byBwcmV2ZW50IHVu bmVjZXNzYXJ5IGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQsIGNhbGwgdGhpcyB3YXk6Ci0KLSAgICB4 ID0gdHRfdHJpZ2dlclswXSA/IGF1dG9leGl0Y2hrKGMpIDogLTE7Ci0KLSovCi1pbnQKLSNpZmRl ZiBDS19BTlNJQwotYXV0b2V4aXRjaGsoQ0hBUiBjKQotI2Vsc2UKLWF1dG9leGl0Y2hrKGMpIENI QVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogYXV0b2V4aXRjaGsgKi8gewotICAgIGV4 dGVybiBDSEFSICogdHRfdHJtYXRjaFtdOwotICAgIGV4dGVybiBjaGFyICogdHRfdHJpZ2dlcltd OwotICAgIGludCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBUUklHR0VSUzsgaSsrKSB7Ci0gICAg ICAgIGlmICghdHRfdHJpZ2dlcltpXSkgeyAgICAgICAgICAgLyogTm8gbW9yZSB0cmlnZ2VycyBp biBsaXN0ICovCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSBlbHNlIGlmICgqdHRfdHJp Z2dlcltpXSkgewotICAgICAgICAgICAgaWYgKCF0dF90cm1hdGNoW2ldKSAgICAgICAgIC8qIEp1 c3Qgc3RhcnRpbmc/ICovCi0gICAgICAgICAgICAgIHR0X3RybWF0Y2hbaV0gPSAoQ0hBUiAqKXR0 X3RyaWdnZXJbaV07IC8qIFNldCBtYXRjaCBwb2ludGVyICovCi0gICAgICAgICAgICBpZiAoYyA9 PSAqdHRfdHJtYXRjaFtpXSkgeyAgLyogQ29tcGFyZSB0aGlzIGNoYXJhY3RlciAqLwotICAgICAg ICAgICAgICAgIHR0X3RybWF0Y2hbaV0rKzsgICAgICAgIC8qIEl0IG1hdGNoZXMgKi8KLSAgICAg ICAgICAgICAgICBpZiAoISp0dF90cm1hdGNoW2ldKSB7ICAvKiBFbmQgb2YgbWF0Y2ggc3RyaW5n PyAqLwotICAgICAgICAgICAgICAgICAgICB0dF90cm1hdGNoW2ldID0gKENIQVIgKikgdHRfdHJp Z2dlcltpXTsgLyogWWVzLCByZXdpbmQsICovCi0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYx MDEsImF1dG9leGl0Y2hrIix0dF90cmlnZ2VyW2ldLGkpOyAvKiBsb2csICovCi0gICAgICAgICAg ICAgICAgICAgIHJldHVybihpKTsgICAgICAgICAgLyogYW5kIHJldHVybiBzdWNjZXNzICovCi0g ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlICAgICAgICAgICAgICAgICAgICAg IC8qIE5vIG1hdGNoICovCi0gICAgICAgICAgICAgIHR0X3RybWF0Y2hbaV0gPSAoQ0hBUiAqKSB0 dF90cmlnZ2VyW2ldOyAvKiBSZXdpbmQgbWF0Y2ggc3RyaW5nICovCi0gICAgICAgIH0gLyogYW5k IGdvIG9uIHRoZSBuZXh0IG1hdGNoIHN0cmluZyAqLwotICAgIH0KLSAgICByZXR1cm4oLTEpOyAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBtYXRjaCBmb3VuZCAqLwotfQotI2VuZGlmIC8q IENLX1RSSUdHRVIgKi8KLQotI2lmbmRlZiBOT1NIT1cKLS8qICBTIEggTyBNIEQgTSAgLS0gIFNo b3cgbW9kZW0gc2lnbmFscyAgKi8KLQotVk9JRAotc2hvbWRtKCkgewotLyoKLSAgTm90ZSB1c2Ug b2YgIlxyXG4iIHRvIG1ha2Ugc3VyZSB0aGlzIHJlcG9ydCBwcmludHMgcmlnaHQsIGV2ZW4gd2hl bgotICBjYWxsZWQgZHVyaW5nIENPTk5FQ1QgbW9kZS4KLSovCi0gICAgaW50IHk7Ci0gICAgeSA9 IHR0Z21kbSgpOwotICAgIHN3aXRjaCAoeSkgewotICAgICAgY2FzZSAtMzogcHJpbnRmKAotICAg ICAgICAgICAgICAgICAiTW9kZW0gc2lnbmFscyB1bmF2YWlsYWJsZSBpbiB0aGlzIHZlcnNpb24g b2YgS2VybWl0XHJcbiIpOwotICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIC0yOiBw cmludGYoIk5vIG1vZGVtIGNvbnRyb2wgZm9yIHRoaXMgZGV2aWNlXHJcbiIpOyBicmVhazsKLSAg ICAgIGNhc2UgLTE6IHByaW50ZigiTW9kZW0gc2lnbmFscyB1bmF2YWlsYWJsZVxyXG4iKTsgYnJl YWs7Ci0gICAgICBkZWZhdWx0OgotI2lmbmRlZiBNQUMKLSAgICAgICAgcHJpbnRmKAotICAgICAg ICAgICIgQ2FycmllciBEZXRlY3QgICAgICAoQ0QpOiAgJXNcclxuIiwoeSAmIEJNX0RDRCkgPyAi T24iOiAiT2ZmIik7Ci0gICAgICAgIHByaW50ZigKLSAgICAgICAgICAiIERhdGFzZXQgUmVhZHkg ICAgICAgKERTUik6ICVzXHJcbiIsKHkgJiBCTV9EU1IpID8gIk9uIjogIk9mZiIpOwotI2VuZGlm IC8qIE1BQyAqLwotICAgICAgICBwcmludGYoCi0gICAgICAgICAgIiBDbGVhciBUbyBTZW5kICAg ICAgIChDVFMpOiAlc1xyXG4iLCh5ICYgQk1fQ1RTKSA/ICJPbiI6ICJPZmYiKTsKLSNpZm5kZWYg U1RSQVRVUwotI2lmbmRlZiBNQUMKLSAgICAgICAgcHJpbnRmKAotICAgICAgICAgICIgUmluZyBJ bmRpY2F0b3IgICAgICAoUkkpOiAgJXNcclxuIiwoeSAmIEJNX1JORykgPyAiT24iOiAiT2ZmIik7 Ci0jZW5kaWYgLyogTUFDICovCi0gICAgICAgIHByaW50ZigKLSAgICAgICAgICAiIERhdGEgVGVy bWluYWwgUmVhZHkgKERUUik6ICVzXHJcbiIsCi0jaWZkZWYgTlQKLSAgICAgICAgICAiKHVua25v d24pIgotI2Vsc2UgLyogTlQgKi8KLSAgICAgICAgICAoeSAmIEJNX0RUUikgPyAiT24iOiAiT2Zm IgotI2VuZGlmIC8qIE5UICovCi0gICAgICAgICAgKTsKLSNpZm5kZWYgTUFDCi0gICAgICAgIHBy aW50ZigKLSAgICAgICAgICAiIFJlcXVlc3QgVG8gU2VuZCAgICAgKFJUUyk6ICVzXHJcbiIsCi0j aWZkZWYgTlQKLSAgICAgICAgICAiKHVua25vd24pIgotI2Vsc2UgLyogTlQgKi8KLSAgICAgICAg ICAoeSAmIEJNX1JUUykgPyAiT24iOiAiT2ZmIgotI2VuZGlmIC8qIE5UICovCi0gICAgICAgICAg KTsKLSNlbmRpZiAvKiBNQUMgKi8KLSNlbmRpZiAvKiBTVFJBVFVTICovCi0gICAgfQotI2lmZGVm IEJFVEFERUJVRwotI2lmZGVmIENLX1RBUEkKLSAgICBpZiAodHR0YXBpICYmICF0YXBpcGFzcykg ewotICAgICAgICBMUERFVkNGRyAgICAgICAgbHBEZXZDZmcgPSBOVUxMOwotICAgICAgICBMUENP TU1DT05GSUcgICAgbHBDb21tQ29uZmlnID0gTlVMTDsKLSAgICAgICAgTFBNT0RFTVNFVFRJTkdT IGxwTW9kZW1TZXR0aW5ncyA9IE5VTEw7Ci0gICAgICAgIERDQiAqICAgICAgICAgICBscERDQiA9 IE5VTEw7Ci0KLSAgICAgICAgaWYgKGNrdGFwaUdldE1vZGVtU2V0dGluZ3MoJmxwRGV2Q2ZnLCZs cE1vZGVtU2V0dGluZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbHBD b21tQ29uZmlnLCZscERDQikpIHsKLSAgICAgICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAg ICAgIGNrdGFwaURpc3BsYXlNb2RlbVNldHRpbmdzKGxwRGV2Q2ZnLGxwTW9kZW1TZXR0aW5ncywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwQ29tbUNvbmZpZyxscERD Qik7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogQ0tfVEFQSSAqLwotI2VuZGlmIC8qIEJF VEFERUJVRyAqLwotfQotI2VuZGlmIC8qIE5PU0hPVyAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8K LQotI2lmbmRlZiBOT1hGRVIKLS8qICBTIEQgRSBCIFUgIC0tIFJlY29yZCBzcGFyIHJlc3VsdHMg aW4gZGVidWdnaW5nIGxvZyAgKi8KLQotVk9JRAotc2RlYnUobGVuKSBpbnQgbGVuOyB7Ci0gICAg ZGVidWcoRjExMSwic3BhcjogZGF0YSIsKGNoYXIgKikgcmRhdGFwLGxlbik7Ci0gICAgZGVidWco RjEwMSwiIHNwc2l6ICIsIiIsIHNwc2l6KTsKLSAgICBkZWJ1ZyhGMTAxLCIgdGltaW50IiwiIix0 aW1pbnQpOwotICAgIGRlYnVnKEYxMDEsIiBucGFkICAiLCIiLCAgbnBhZCk7Ci0gICAgZGVidWco RjEwMSwiIHBhZGNoICIsIiIsIHBhZGNoKTsKLSAgICBkZWJ1ZyhGMTAxLCIgc2VvbCAgIiwiIiwg IHNlb2wpOwotICAgIGRlYnVnKEYxMDEsIiBjdGxxICAiLCIiLCAgY3RscSk7Ci0gICAgZGVidWco RjEwMSwiIGVicSAgICIsIiIsICAgZWJxKTsKLSAgICBkZWJ1ZyhGMTAxLCIgZWJxZmxnIiwiIixl YnFmbGcpOwotICAgIGRlYnVnKEYxMDEsIiBiY3RyICAiLCIiLCAgYmN0cik7Ci0gICAgZGVidWco RjEwMSwiIHJwdHEgICIsIiIsICBycHRxKTsKLSAgICBkZWJ1ZyhGMTAxLCIgcnB0ZmxnIiwiIixy cHRmbGcpOwotICAgIGRlYnVnKEYxMDEsIiBsc2NhcHUiLCIiLGxzY2FwdSk7Ci0gICAgZGVidWco RjEwMSwiIGF0Y2FwdSIsIiIsYXRjYXB1KTsKLSAgICBkZWJ1ZyhGMTAxLCIgbHBjYXB1IiwiIixs cGNhcHUpOwotICAgIGRlYnVnKEYxMDEsIiBzd2NhcHUiLCIiLHN3Y2FwdSk7Ci0gICAgZGVidWco RjEwMSwiIHdzbG90biIsIiIsIHdzbG90bik7Ci0gICAgZGVidWcoRjEwMSwiIHdoYXRydSIsIiIs IHdoYXRydSk7Ci19Ci0vKiAgUiBEIEUgQiBVIC0tIERlYnVnZ2luZyBkaXNwbGF5IG9mIHJwYXIo KSB2YWx1ZXMgICovCi0KLVZPSUQKLXJkZWJ1KGQsbGVuKSBDSEFSICpkOyBpbnQgbGVuOyB7Ci0g ICAgZGVidWcoRjExMSwicnBhcjogZGF0YSIsZCxsZW4pOwotICAgIGRlYnVnKEYxMDEsIiBycHNp eiAiLCIiLCB4dW5jaGFyKGRbMF0pKTsKLSAgICBkZWJ1ZyhGMTAxLCIgcnRpbW8gIiwiIiwgcnRp bW8pOwotICAgIGRlYnVnKEYxMDEsIiBteXBhZG4iLCIiLG15cGFkbik7Ci0gICAgZGVidWcoRjEw MSwiIG15cGFkYyIsIiIsbXlwYWRjKTsKLSAgICBkZWJ1ZyhGMTAxLCIgZW9sICAgIiwiIiwgICBl b2wpOwotICAgIGRlYnVnKEYxMDEsIiBjdGxxICAiLCIiLCAgY3RscSk7Ci0gICAgZGVidWcoRjEw MSwiIHNxICAgICIsIiIsICAgIHNxKTsKLSAgICBkZWJ1ZyhGMTAxLCIgZWJxICAgIiwiIiwgICBl YnEpOwotICAgIGRlYnVnKEYxMDEsIiBlYnFmbGciLCIiLGVicWZsZyk7Ci0gICAgZGVidWcoRjEw MSwiIGJjdHIgICIsIiIsICBiY3RyKTsKLSAgICBkZWJ1ZyhGMTAxLCIgcnB0cSAgIiwiIiwgIGRb OF0pOwotICAgIGRlYnVnKEYxMDEsIiBycHRmbGciLCIiLHJwdGZsZyk7Ci0gICAgZGVidWcoRjEw MSwiIGNhcGFzICIsIiIsIGNhcGFzKTsKLSAgICBkZWJ1ZyhGMTAxLCIgYml0cyAgIiwiIixkW2Nh cGFzXSk7Ci0gICAgZGVidWcoRjEwMSwiIGxzY2FwdSIsIiIsbHNjYXB1KTsKLSAgICBkZWJ1ZyhG MTAxLCIgYXRjYXB1IiwiIixhdGNhcHUpOwotICAgIGRlYnVnKEYxMDEsIiBscGNhcHUiLCIiLGxw Y2FwdSk7Ci0gICAgZGVidWcoRjEwMSwiIHN3Y2FwdSIsIiIsc3djYXB1KTsKLSAgICBkZWJ1ZyhG MTAxLCIgd3Nsb3RyIiwiIiwgd3Nsb3RyKTsKLSAgICBkZWJ1ZyhGMTAxLCIgcnBzaXooZXh0ZW5k ZWQpIiwiIixycHNpeik7Ci19Ci0KLSNpZmRlZiBDT01NRU5UCi0vKiAgQyBIIEsgRSBSIFIgIC0t ICBEZWNpZGUgd2hldGhlciB0byBleGl0IHVwb24gYSBwcm90b2NvbCBlcnJvciAgKi8KLQotVk9J RAotY2hrZXJyKCkgewotICAgIGlmIChiYWNrZ3JkICYmICFzZXJ2ZXIpIGZhdGFsKCJQcm90b2Nv bCBlcnJvciIpOwotfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8K LQotLyogIEYgQSBUIEEgTCAgLS0gIEZhdGFsIGVycm9yIG1lc3NhZ2UgKi8KLQotVk9JRAotZmF0 YWwobXNnKSBjaGFyICptc2c7IHsKLSAgICBleHRlcm4gaW50IGluaXRmbGc7Ci0gICAgc3RhdGlj IGludCBpbml0aW5nID0gMDsKLSAgICBpZiAoIW1zZykgbXNnID0gIiI7Ci0gICAgZGVidWcoRjEx MSwiZmF0YWwiLG1zZyxpbml0ZmxnKTsKLQotICAgIGlmICghaW5pdGZsZykgewkJCS8qIElmIGNh bGxlZCBmcm9tIHByZXNjYW4gKi8KLQlpZiAoaW5pdGluZykJCQkvKiBvciBjYWxsZWQgZnJvbSBz eXNpbml0KCkgKi8KLSAgICAgICAgICBleGl0KDI1Myk7Ci0JaW5pdGluZyA9IDE7Ci0Jc3lzaW5p dCgpOwotICAgIH0KLQotICAgIGRlYnVnKEYxMTEsImZhdGFsIixtc2cseGl0c3RhKTsKLSAgICB0 bG9nKEYxMTAsIkZhdGFsOiIsbXNnLDBMKTsKLSNpZmRlZiBWTVMKLSAgICBpZiAoc3RybmNtcCht c2csIiVDS0VSTUlUIiw4KSkKLSAgICAgIGNvbm9sKCIlQ0tFUk1JVC1FLUZBVEFMLCAiKTsKLSAg ICBjb25vbGwobXNnKTsKLSNlbHNlIC8qICFWTVMgKi8KLSAgICBjb25vbGwobXNnKTsKLSNlbmRp ZiAvKiBWTVMgKi8KLSNpZmRlZiBPUzIKLSNpZm5kZWYgTk9YRkVSCi0gICAgaWYgKHhmcmJlbCkg ewotICAgICAgICBibGVlcChCUF9GQUlMKTsKLSAgICAgICAgc2xlZXAoMSk7Ci0gICAgICAgIGJs ZWVwKEJQX0ZBSUwpOwotICAgIH0KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2VuZGlmIC8qIE9T MiAqLwotICAgIGRvZXhpdChCQURfRVhJVCx4aXRzdGEgfCAxKTsgICAgICAgIC8qIEV4aXQgaW5k aWNhdGluZyBmYWlsdXJlICovCi19Ci0KLSNpZm5kZWYgTk9YRkVSCi0vKiAgQiBMIEQgTCBFIE4g IC0tICBNYWtlIGxlbmd0aC1lbmNvZGVkIGNvcHkgb2Ygc3RyaW5nICAqLwotCi1jaGFyICoKLWJs ZGxlbihzdHIsZGVzdCkgY2hhciAqc3RyLCAqZGVzdDsgewotICAgIGludCBsZW47Ci0gICAgbGVu ID0gKGludClzdHJsZW4oc3RyKTsKLSAgICBpZiAobGVuID4gOTQpCi0gICAgICAqZGVzdCA9IFNQ OwotICAgIGVsc2UKLSAgICAgICpkZXN0ID0gKGNoYXIpIHRvY2hhcihsZW4pOwotICAgIHN0cmNw eShkZXN0KzEsc3RyKTsJCQkvKiBDaGVja2VkIGJlbG93IGluIHNldGdlbigpICovCi0gICAgcmV0 dXJuKGRlc3QrbGVuKzEpOwotfQotCi0KLS8qICBTIEUgVCBHIEUgTiAgLS0gIENvbnN0cnVjdCBh IGdlbmVyaWMgY29tbWFuZCAgKi8KLS8qCi0gIENhbGwgd2l0aCBHZW5lcmljIGNvbW1hbmQgY2hh cmFjdGVyIGZvbGxvd2VkIGJ5IHRocmVlIHN0cmluZyBhcmd1bWVudHMuCi0gIFRyYWlsaW5nIHN0 cmluZ3MgYXJlIGFsbG93ZWQgdG8gYmUgZW1wdHkgKCIiKS4gIEVhY2ggc3RyaW5nIGV4Y2VwdCB0 aGUgbGFzdAotICBub24tZW1wdHkgc3RyaW5nIG11c3QgYmUgbGVzcyB0aGFuIDk1IGNoYXJhY3Rl cnMgbG9uZy4gIFRoZSBmaW5hbCBub25lbXB0eQotICBzdHJpbmcgaXMgYWxsb3dlZCB0byBiZSBs b25nZXIuCi0qLwotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi1zZXRnZW4oY2hhciB0eXBlLCBjaGFy ICogYXJnMSwgY2hhciAqIGFyZzIsIGNoYXIgKiBhcmczKQotI2Vsc2UKLXNldGdlbih0eXBlLGFy ZzEsYXJnMixhcmczKSBjaGFyIHR5cGUsICphcmcxLCAqYXJnMiwgKmFyZzM7Ci0jZW5kaWYgLyog Q0tfQU5TSUMgKi8KLS8qIHNldGdlbiAqLyB7Ci0gICAgY2hhciAqdXBzdHIsICpjcDsKLSNpZmRl ZiBEWU5BTUlDCi0gICAgaWYgKCFjbWRzdHIpCi0gICAgICBpZiAoIShjbWRzdHIgPSBtYWxsb2Mo TUFYU1AgKyAxKSkpCi0gICAgICAgIGZhdGFsKCJzZXRnZW46IGNhbid0IGFsbG9jYXRlIG1lbW9y eSIpOwotI2VuZGlmIC8qIERZTkFNSUMgKi8KLQotICAgIGNwID0gY21kc3RyOwotICAgICpjcCsr ID0gdHlwZTsKLSAgICAqY3AgPSBOVUw7Ci0gICAgaWYgKCFhcmcxKSBhcmcxID0gIiI7Ci0gICAg aWYgKCFhcmcyKSBhcmcyID0gIiI7Ci0gICAgaWYgKCFhcmczKSBhcmczID0gIiI7Ci0gICAgaWYg KCgoaW50KXN0cmxlbihhcmcxKSsoaW50KXN0cmxlbihhcmcyKSsoaW50KXN0cmxlbihhcmczKSs0 KSA8IE1BWFNQKSB7Ci0JaWYgKCphcmcxICE9IE5VTCkgewotCSAgICB1cHN0ciA9IGJsZGxlbihh cmcxLGNwKTsKLQkgICAgaWYgKCphcmcyICE9IE5VTCkgewotCQl1cHN0ciA9IGJsZGxlbihhcmcy LHVwc3RyKTsKLQkJaWYgKCphcmczICE9IE5VTCkgYmxkbGVuKGFyZzMsdXBzdHIpOwotCSAgICB9 Ci0JfQotCWNtYXJnID0gY21kc3RyOwotCWRlYnVnKEYxMTAsInNldGdlbiIsY21hcmcsMCk7Ci0J cmV0dXJuKCdnJyk7Ci0gICAgfQotICAgIHJldHVybignRScpOwotfQotI2VuZGlmIC8qIE5PWEZF UiAqLwotCi0jaWZuZGVmIE5PTVNFTkQKLXN0YXRpYyBjaGFyICptZ2J1ZnAgPSBOVUxMOwotCi0v KiAgRiBOIFAgQSBSIFMgRSAgLS0gICovCi0KLS8qCi0gIEFyZ3VtZW50IGlzIGEgY2hhcmFjdGVy IHN0cmluZyBjb250YWluaW5nIG9uZSBvciBtb3JlIGZpbGVzcGVjcy4KLSAgVGhpcyBmdW5jdGlv biBicmVha3MgdGhlIHN0cmluZyBhcGFydCBpbnRvIGFuIGFycmF5IG9mIHBvaW50ZXJzLCBvbmUK LSAgdG8gZWFjaCBmaWxlc3BlYywgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBmaWxlc3BlY3Mu ICBVc2VkIGJ5IHNlcnZlcgotICB3aGVuIGl0IHJlY2VpdmVzIGEgR0VUIGNvbW1hbmQgdG8gYWxs b3cgaXQgdG8gcHJvY2VzcyBtdWx0aXBsZSBmaWxlCi0gIHNwZWNpZmljYXRpb25zIGluIG9uZSB0 cmFuc2FjdGlvbi4gIFNldHMgY21saXN0IHRvIHBvaW50IHRvIGEgbGlzdCBvZgotICBmaWxlIHBv aW50ZXJzLCBleGFjdGx5IGFzIGlmIHRoZXkgd2VyZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgot Ci0gIFRoaXMgdmVyc2lvbiBvZiBmbnBhcnNlIHRyZWF0cyBzcGFjZXMgYXMgZmlsZW5hbWUgc2Vw YXJhdG9ycy4gIElmIHlvdXIKLSAgb3BlcmF0aW5nIHN5c3RlbSBhbGxvd3Mgc3BhY2VzIGluIGZp bGVuYW1lcywgeW91J2xsIG5lZWQgYSBkaWZmZXJlbnQKLSAgc2VwYXJhdG9yLgotCi0gIFRoaXMg dmVyc2lvbiBvZiBmbnBhcnNlIG1hbGxvY3MgYSBzdHJpbmcgYnVmZmVyIHRvIGNvbnRhaW4gdGhl IG5hbWVzLiAgSXQKLSAgY2Fubm90IGFzc3VtZSB0aGF0IHRoZSBzdHJpbmcgdGhhdCBpcyBwb2lu dGVkIHRvIGJ5IHRoZSBhcmd1bWVudCBpcyBzYWZlLgotKi8KLWludAotZm5wYXJzZShzdHJpbmcp IGNoYXIgKnN0cmluZzsgewotICAgIGNoYXIgKnAsICpzLCAqcTsKLSAgICBpbnQgciA9IDAsIHg7 ICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gY29kZSAqLwotI2lmZGVmIFJFQ1VSU0lW RQotICAgIGRlYnVnKEYxMTEsImZucGFyc2UiLHN0cmluZyxyZWN1cnNpdmUpOwotI2VuZGlmIC8q IFJFQ1VSU0lWRSAqLwotCi0gICAgaWYgKG1nYnVmcCkgZnJlZShtZ2J1ZnApOyAgICAgICAgICAg LyogRnJlZSB0aGlzIGZyb20gbGFzdCB0aW1lLiAqLwotICAgIG1nYnVmcCA9IG1hbGxvYygoaW50 KXN0cmxlbihzdHJpbmcpKzIpOwotICAgIGlmICghbWdidWZwKSB7Ci0gICAgICAgIGRlYnVnKEYx MDAsImZucGFyc2UgbWFsbG9jIGVycm9yIiwiIiwwKTsKLSAgICAgICAgcmV0dXJuKDApOwotICAg IH0KLSNpZm5kZWYgTk9JQ1AKLSNpZm5kZWYgTk9TUEwKLSAgICBja3N0cm5jcHkoZnNwZWMsc3Ry aW5nLGZzcGVjbGVuKTsgICAvKiBNYWtlIGNvcHkgZm9yIFx2KGZpbGVzcGVjKSAqLwotI2VuZGlm IC8qIE5PU1BMICovCi0jZW5kaWYgLyogTk9JQ1AgKi8KLSAgICBzID0gc3RyaW5nOyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBJbnB1dCBzdHJpbmcgKi8KLSAgICBwID0gcSA9IG1nYnVmcDsg ICAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byB0aGUgY29weSAqLwotICAgIHIgPSAwOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgb3VyIHJldHVybiBjb2Rl ICovCi0gICAgd2hpbGUgKCpzID09IFNQIHx8ICpzID09IEhUKSAgICAgICAgLyogU2tpcCBsZWFk aW5nIHNwYWNlcyBhbmQgdGFicyAqLwotICAgICAgcysrOwotICAgIGZvciAoeCA9IHN0cmxlbihz KTsgICAgICAgICAgICAgICAgIC8qIFN0cmlwIHRyYWlsaW5nIHNwYWNlcyAqLwotICAgICAgICAg KHggPiAxKSAmJiAoc1t4LTFdID09IFNQIHx8IHNbeC0xXSA9PSBIVCk7Ci0gICAgICAgICB4LS0p Ci0gICAgICBzW3gtMV0gPSBOVUw7Ci0gICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAgICAgICAg ICAgICAgLyogTG9vcCB0aHJvdWdoIHJlc3Qgb2Ygc3RyaW5nICovCi0gICAgICAgIGlmICgqcyA9 PSBDTURRKSB7ICAgICAgICAgICAgICAgLyogQmFja3NsYXNoIChxdW90ZSBjaGFyYWN0ZXIpPyAq LwotICAgICAgICAgICAgaWYgKCh4ID0geHhlc2MoJnMpKSA+IC0xKSB7IC8qIEdvIGludGVycHJl dCBpdC4gKi8KLSAgICAgICAgICAgICAgICAqcSsrID0gKGNoYXIpIHg7ICAgICAgICAvKiBOdW1l cmljIGJhY2tzbGFzaCBjb2RlLCBvayAqLwotICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAg ICAgICAgICAgIC8qIEp1c3QgbGV0IGl0IHF1b3RlIG5leHQgY2hhciAqLwotICAgICAgICAgICAg ICAgIHMrKzsgICAgICAgICAgICAgICAgICAgIC8qIGdldCBwYXN0IHRoZSBiYWNrc2xhc2ggKi8K LSAgICAgICAgICAgICAgICAqcSsrID0gKnMrKzsgICAgICAgICAgICAvKiBkZXBvc2l0IG5leHQg Y2hhciAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0g ZWxzZSBpZiAoKnMgPT0gU1AgfHwgKnMgPT0gTlVMKSB7IC8qIFVucXVvdGVkIHNwYWNlIG9yIE5V TD8gKi8KLSAgICAgICAgICAgICpxKysgPSBOVUw7ICAgICAgICAgICAgICAgICAvKiBFbmQgb2Yg b3V0cHV0IGZpbGVuYW1lLiAqLwotICAgICAgICAgICAgbXNmaWxlc1tyXSA9IHA7ICAgICAgICAg ICAgIC8qIEFkZCB0aGlzIGZpbGVuYW1lIHRvIHRoZSBsaXN0ICovCi0gICAgICAgICAgICBkZWJ1 ZyhGMTExLCJmbnBhcnNlIixtc2ZpbGVzW3JdLHIpOwotICAgICAgICAgICAgcisrOyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIENvdW50IGl0ICovCi0gICAgICAgICAgICBpZiAoKnMgPT0gTlVM KSBicmVhazsgICAgICAgLyogRW5kIG9mIHN0cmluZz8gKi8KLSAgICAgICAgICAgIHdoaWxlICgq cyA9PSBTUCkgcysrOyAgICAgICAvKiBTa2lwIHJlcGVhdGVkIHNwYWNlcyAqLwotICAgICAgICAg ICAgcCA9IHE7ICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IG9mIG5leHQgbmFtZSAqLwot ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0gZWxzZSAqcSsrID0gKnM7ICAgICAgICAg ICAgICAgLyogT3RoZXJ3aXNlIGNvcHkgdGhlIGNoYXJhY3RlciAqLwotICAgICAgICBzKys7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5leHQgaW5wdXQgY2hhcmFjdGVyICovCi0gICAg fQotICAgIGRlYnVnKEYxMDEsImZucGFyc2UgciIsIiIscik7Ci0gICAgbXNmaWxlc1tyXSA9ICIi OyAgICAgICAgICAgICAgICAgICAgLyogUHV0IGVtcHR5IHN0cmluZyBhdCBlbmQgb2YgbGlzdCAq LwotICAgIGNtbGlzdCA9IG1zZmlsZXM7Ci0gICAgcmV0dXJuKHIpOwotfQotI2VuZGlmIC8qIE5P TVNFTkQgKi8KLQotY2hhciAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRi Y2hyKCkgZm9yIERFQlVHIFNFU1NJT04gKi8KLWRiY2hyKGMpIGludCBjOyB7Ci0gICAgc3RhdGlj IGNoYXIgc1s4XTsKLSAgICBjaGFyICpjcCA9IHM7Ci0KLSAgICBjICY9IDB4ZmY7Ci0gICAgaWYg KGMgJiAweDgwKSB7ICAgICAgICAgICAgICAgICAgICAgLyogOHRoIGJpdCBvbiAqLwotICAgICAg ICAqY3ArKyA9ICd+JzsKLSAgICAgICAgYyAmPSAweDdmOwotICAgIH0KLSAgICBpZiAoYyA8IFNQ KSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sIGNoYXJhY3RlciAqLwotICAgICAg ICAqY3ArKyA9ICdeJzsKLSAgICAgICAgKmNwKysgPSAoY2hhcikgY3RsKGMpOwotICAgIH0gZWxz ZSBpZiAoYyA9PSBERUwpIHsKLSAgICAgICAgKmNwKysgPSAnXic7Ci0gICAgICAgICpjcCsrID0g Jz8nOwotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByaW50aW5n IGNoYXJhY3RlciAqLwotICAgICAgICAqY3ArKyA9IChjaGFyKSBjOwotICAgIH0KLSAgICAqY3Ag PSAnXDAnOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGUgc3RyaW5nICovCi0g ICAgY3AgPSBzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIHBvaW50ZXIg dG8gaXQgKi8KLSAgICByZXR1cm4oY3ApOwotfQotCi0vKiAgQyBLIEggTyBTIFQgIC0tICBHZXQg bmFtZSBvZiBsb2NhbCBob3N0ICh3aGVyZSBDLUtlcm1pdCBpcyBydW5uaW5nKSAgKi8KLQotLyoK LSAgQ2FsbCB3aXRoIHBvaW50ZXIgdG8gYnVmZmVyIHRvIHB1dCBob3N0bmFtZSBpbiwgYW5kIGxl bmd0aCBvZiBidWZmZXIuCi0gIENvcGllcyBob3N0bmFtZSBpbnRvIGJ1ZmZlciBvbiBzdWNjZXNz LCBwdXRzIG51bGwgc3RyaW5nIGluIGJ1ZmZlciBvbgotICBmYWlsdXJlLgotKi8KLSNpZmRlZiBC U0Q0NAotI2RlZmluZSBCU0Q0Ci0jdW5kZWYgQVRUU1YKLSNlbmRpZiAvKiBCU0Q0NCAqLwotCi0j aWZkZWYgU1ZPUlBPU0lYCi0jaWZuZGVmIEJTRDQ0Ci0jaWZuZGVmIGFwb2xsbwotI2luY2x1ZGUg PHN5cy91dHNuYW1lLmg+Ci0jZW5kaWYgLyogYXBvbGxvICovCi0jZW5kaWYgLyogQlNENDQgKi8K LSNlbHNlCi0jaWZkZWYgQkVMTFYxMAotI2luY2x1ZGUgPHV0c25hbWUuaD4KLSNlbmRpZiAvKiBC RUxMVjEwICovCi0jZW5kaWYgLyogU1ZPUlBPU0lYKi8KLQotI2lmZGVmIENLU1lTTE9HCi1leHRl cm4gY2hhciB1aWRidWZbXSwgKiBjbGllbnRob3N0OwotI2VuZGlmIC8qIENLU1lTTE9HICovCi0K LVZPSUQKLWNraG9zdCh2dmJ1Zix2dmxlbikgY2hhciAqIHZ2YnVmOyBpbnQgdnZsZW47IHsKLQot I2lmbmRlZiBOT1BVU0gKLSAgICBleHRlcm4gaW50IG5vcHVzaDsKLSNpZm5kZWYgTk9TRVJWRVIK LSAgICBleHRlcm4gaW50IGVuX2hvczsKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotI2VuZGlmIC8q IE5PUFVTSCAqLwotCi0jaWZkZWYgcGRwMTEKLSAgICAqdnZidWYgPSBOVUw7Ci0jZWxzZSAgLyog RXZlcnl0aGluZyBlbHNlIC0gcmVzdCBvZiB0aGlzIHJvdXRpbmUgKi8KLQotICAgIGNoYXIgKmc7 Ci0gICAgaW50IGhhdmVmdWxsID0gMDsKLSNpZmRlZiBWTVMKLSAgICBpbnQgeDsKLSNlbmRpZiAv KiBWTVMgKi8KLQotI2lmZGVmIFNWT1JQT1NJWAotI2lmbmRlZiBCU0Q0NAotI2lmbmRlZiBfMzg2 QlNECi0jaWZuZGVmIEFQT0xMT1NSMTAKLSAgICBzdHJ1Y3QgdXRzbmFtZSBobmFtZTsKLSNlbmRp ZiAvKiBBUE9MTE9TUjEwICovCi0jZW5kaWYgLyogXzM4NkJTRCAqLwotI2VuZGlmIC8qIEJTRDQ0 ICovCi0jZW5kaWYgLyogU1ZPUlBPU0lYICovCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICBpbnQg YWMwID0gKGNoYXIgKikgdnZidWYsIGFjMSA9IC0xLCBhYzIgPSAwOwotI2VuZGlmIC8qIGRhdGFn ZW5lcmFsICovCi0KLSNpZm5kZWYgTk9QVVNICi0gICAgaWYgKGdldGVudigiQ0tfTk9QVVNIIikp IHsgICAgICAgICAgLyogTm8gc2hlbGwgYWNjZXNzIGFsbG93ZWQgKi8KLSAgICAgICAgbm9wdXNo ID0gMTsgICAgICAgICAgICAgICAgICAgICAvKiBvbiB0aGlzIGhvc3QuLi4gKi8KLSNpZm5kZWYg Tk9TRVJWRVIKLSAgICAgICAgZW5faG9zID0gMDsKLSNlbmRpZiAvKiBOT1NFUlZFUiAqLwotICAg IH0KLSNlbmRpZiAvKiBOT1BVU0ggKi8KLQotICAgICp2dmJ1ZiA9IE5VTDsgICAgICAgICAgICAg ICAgICAgICAgIC8qIEhvdyBsZXQncyBnZXQgb3VyIGhvc3QgbmFtZSAuLi4gKi8KLQotI2lmbmRl ZiBCRUxMVjEwICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvZXMgbm90IGhhdmUgZ2V0aG9z dG5hbWUoKSAqLwotI2lmbmRlZiBPWE9TCi0jaWZkZWYgU1ZPUlBPU0lYCi0jaWZkZWYgQVBPTExP U1IxMAotICAgIGNrc3RybmNweSh2dmJ1ZiwiQXBvbGxvIix2dmxlbik7Ci0jZWxzZQotI2lmZGVm IEJTRDQ0Ci0gICAgaWYgKGdldGhvc3RuYW1lKHZ2YnVmLHZ2bGVuKSA8IDApCi0gICAgICAqdnZi dWYgPSBOVUw7Ci0jZWxzZQotI2lmZGVmIF8zODZCU0QKLSAgICBpZiAoZ2V0aG9zdG5hbWUodnZi dWYsdnZsZW4pIDwgMCkgKnZ2YnVmID0gTlVMOwotI2Vsc2UKLSNpZmRlZiBRTlgKLSNpZmRlZiBU Q1BTT0NLRVQKLSAgICBpZiAoZ2V0aG9zdG5hbWUodnZidWYsdnZsZW4pIDwgMCkgKnZ2YnVmID0g TlVMOwotI2Vsc2UKLSAgICBpZiAodW5hbWUoJmhuYW1lKSA+IC0xKSBja3N0cm5jcHkodnZidWYs aG5hbWUubm9kZW5hbWUsdnZsZW4pOwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2Vsc2UgLyog U1ZPUlBPU0lYIGJ1dCBub3QgXzM4NkJTRCBvciBCU0Q0NCAqLwotI2lmZGVmIF9faWE2NF9fCi0g ICAgaWYgKHVuYW1lKCZobmFtZSkgPiAtMSkgY2tzdHJuY3B5KHZ2YnVmLGhuYW1lLm5vZGVuYW1l LHZ2bGVuKTsKLSNlbHNlCi0gICAgaWYgKHVuYW1lKCZobmFtZSkgPiAtMSkgewotCWNoYXIgKiBw OwotCXAgPSBobmFtZS5ub2RlbmFtZTsKLSNpZmRlZiBUQ1BTT0NLRVQKLSNpZm5kZWYgTk9DS0dF VEZRSE9TVAotCWlmICghY2tzdHJjaHIocCwnLicpKQotCSAgcCA9IChjaGFyICopY2tnZXRmcWhv c3RuYW1lKHApOwotI2VuZGlmIC8qIE5PQ0tHRVRGUUhPU1QgKi8KLSNlbmRpZiAvKiBUQ1BTT0NL RVQgKi8KLQlpZiAoIXApIHAgPSAiIjsKLQlpZiAoISpwKSBwID0gIih1bmtub3duKSI7Ci0JY2tz dHJuY3B5KHZ2YnVmLHAsdnZsZW4pOwotICAgIH0KLSNlbmRpZiAvKiBfX2lhNjRfXyAqLwotI2Vu ZGlmIC8qIFFOWCAqLwotI2VuZGlmIC8qIF8zODZCU0QgKi8KLSNlbmRpZiAvKiBCU0Q0NCAqLwot I2VuZGlmIC8qIEFQT0xMT1NSMTAgKi8KLSNlbHNlIC8qICFTVk9SUE9TSVggKi8KLSNpZmRlZiBC U0Q0Ci0gICAgaWYgKGdldGhvc3RuYW1lKHZ2YnVmLHZ2bGVuKSA8IDApICp2dmJ1ZiA9IE5VTDsK LSNlbHNlIC8qICFCU0Q0ICovCi0jaWZkZWYgVk1TCi0gICAgZyA9IGdldGVudigiU1lTJE5PREUi KTsKLSAgICBpZiAoZykgY2tzdHJuY3B5KHZ2YnVmLGcsdnZsZW4pOwotICAgIHggPSAoaW50KXN0 cmxlbih2dmJ1Zik7Ci0gICAgaWYgKHggPiAxICYmIHZ2YnVmW3gtMV0gPT0gJzonICYmIHZ2YnVm W3gtMl0gPT0gJzonKSB2dmJ1Zlt4LTJdID0gTlVMOwotI2Vsc2UKLSNpZmRlZiBkYXRhZ2VuZXJh bAotICAgIGlmIChzeXMoJEhOQU1FLCZhYzAsJmFjMSwmYWMyKSA9PSAwKSAvKiBzdWNjZXNzZnVs ICovCi0gICAgICAgIHZ2bGVuID0gYWMyICsgMTsgICAgICAgICAgICAgICAgLyogZW5oIC0gaGF2 ZSB0byBhZGQgb25lICovCi0jZWxzZQotI2lmZGVmIE9TMiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIE9TLzIgKi8KLSAgICBnID0gb3MyX2dldGhvc3RuYW1lKCk7Ci0gICAgaWYgKGcp IGNrc3RybmNweSh2dmJ1ZixnLHZ2bGVuKTsKLSNlbHNlIC8qIE9TMiAqLwotI2lmZGVmIE9TSwot I2lmZGVmIFRDUFNPQ0tFVAotICAgICAgICBpZiAoZ2V0aG9zdG5hbWUodnZidWYsIHZ2bGVuKSA8 IDApICp2dmJ1ZiA9IE5VTDsKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNlbmRpZiAvKiBPU0sg Ki8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotI2VuZGlmIC8q IFZNUyAqLwotI2VuZGlmIC8qIEJTRDQgKi8KLSNlbmRpZiAvKiBTVk9SUE9TSVggKi8KLSNlbHNl IC8qIE9YT1MgKi8KLSAgICAvKiBJZiBUQ1AvSVAgaXMgbm90IGluc3RhbGxlZCwgZ2V0aG9zdG5h bWUoKSBmYWlscywgdXNlIHVuYW1lKCkgKi8KLSAgICBpZiAoZ2V0aG9zdG5hbWUodnZidWYsdnZs ZW4pIDwgMCkgewotICAgICAgICBpZiAodW5hbWUoJmhuYW1lKSA+IC0xKQotICAgICAgICAgICAg Y2tzdHJuY3B5KHZ2YnVmLGhuYW1lLm5vZGVuYW1lLHZ2bGVuKTsKLSAgICAgICAgZWxzZQotICAg ICAgICAgICAgKnZ2YnVmID0gTlVMOwotICAgIH0KLSNlbmRpZiAvKiBPWE9TICovCi0jZW5kaWYg LyogQkVMTFYxMCAqLwotICAgIGlmICgqdnZidWYgPT0gTlVMKSB7ICAgICAgICAgICAgICAgIC8q IElmIGl0J3Mgc3RpbGwgZW1wdHkgKi8KLSAgICAgICAgZyA9IGdldGVudigiSE9TVCIpOyAgICAg ICAgICAgICAvKiB0cnkgdGhpcyAqLwotICAgICAgICBpZiAoZykgY2tzdHJuY3B5KHZ2YnVmLGcs dnZsZW4pOwotICAgIH0KLSAgICB2dmJ1Zlt2dmxlbi0xXSA9IE5VTDsgICAgICAgICAgICAgICAv KiBNYWtlIHN1cmUgcmVzdWx0IGlzIHRlcm1pbmF0ZWQuICovCi0jZW5kaWYgLyogcGRwMTEgKi8K LX0KLSNpZmRlZiBCU0Q0NAotI3VuZGVmIEJTRDQKLSNkZWZpbmUgQVRUU1YKLSNlbmRpZiAvKiBC U0Q0NCAqLwotCi0vKgotICBBIFMgSyBNIE8gUiBFICAtLSAgUG9vciBwZXJzb24ncyAibW9yZSIu Ci0gIFJldHVybnMgMCBpZiBubyBtb3JlLCAxIGlmIG1vcmUgd2FudGVkLgotKi8KLWludAotYXNr bW9yZSgpIHsKLSAgICBjaGFyIGM7Ci0gICAgaW50IHJ2LCBjeDsKLSNpZmRlZiBJS1NECi0gICAg ZXh0ZXJuIGludCB0aW1lbGltaXQ7Ci0jZW5kaWYgLyogSUtTRCAqLwotI2lmZGVmIElLU0RDT05G Ci0gICAgZXh0ZXJuIGludCBpa3NkY2Y7Ci0jZW5kaWYgLyogSUtTRENPTkYgKi8KLSNpZmRlZiBD S19BUEMKLSAgICBleHRlcm4gaW50IGFwY3N0YXR1cywgYXBjYWN0aXZlOwotI2VuZGlmIC8qIENL X0FQQyAqLwotCi0jaWZkZWYgTk9JQ1AKLSAgICByZXR1cm4oMSk7Ci0jZWxzZQotICAgIGlmICgh eGFza21vcmUpCi0gICAgICByZXR1cm4oMSk7Ci0jaWZkZWYgSUtTRENPTkYKLSAgICBpZiAoaW5z ZXJ2ZXIgJiYgIWlrc2RjZikKLSAgICAgIHJldHVybigxKTsKLSNlbmRpZiAvKiBJS1NEQ09ORiAq LwotI2lmZGVmIENLX0FQQwotICAgIGlmIChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMIHx8Ci0gICAg ICAgIChhcGNhY3RpdmUgPT0gQVBDX1JFTU9URSAmJiAoYXBjc3RhdHVzICYgQVBDX05PSU5QKSkp Ci0gICAgICAgIHJldHVybigxKTsKLSNlbmRpZiAvKiBDS19BUEMgKi8KLSNpZmRlZiBWTVMKLSAg ICBpZiAoYmF0Y2gpCi0gICAgICByZXR1cm4oMSk7Ci0jZWxzZQotI2lmZGVmIFVOSVgKLSAgICBp ZiAoYmFja2dyZCkKLSAgICAgIHJldHVybigxKTsKLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYg LyogVk1TICovCi0KLSNpZm5kZWYgVk1TCi0gICAgY29uY2IoKGNoYXIpZXNjYXBlKTsgICAgICAg ICAgICAgICAgLyogRm9yY2UgQ0JSRUFLIG1vZGUuICovCi0jZW5kaWYgLyogVk1TICovCi0KLSAg ICBydiA9IC0xOwotICAgIHdoaWxlIChydiA8IDApIHsKLSNpZm5kZWYgT1MyCi0gICAgICAgIHBy aW50ZigibW9yZT8gIik7Ci0jaWZkZWYgVU5JWAotI2lmZGVmIE5PU0VUQlVGCi0gICAgICAgIGZm bHVzaChzdGRvdXQpOwotI2VuZGlmIC8qIE5PU0VUQlVGICovCi0jZW5kaWYgLyogVU5JWCAqLwot I2Vsc2UKLSAgICAgICAgcHJpbnRmKCJtb3JlPyAiKTsKLSAgICAgICAgZmZsdXNoKHN0ZG91dCk7 Ci0jZW5kaWYgLyogT1MyICovCi0KLSNpZmRlZiBJS1NECi0gICAgICAgIGlmIChpbnNlcnZlcikg ewotICAgICAgICAgICAgY3ggPSBjbWRnZXRjKHRpbWVsaW1pdCk7Ci0gICAgICAgICAgICBpZiAo Y3ggPCAtMSAmJiB0aW1lbGltaXQpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIlxuP0lLUyBp ZGxlIHRpbWVvdXQgLSBHb29kYnllLlxuIik7Ci0gICAgICAgICAgICAgICAgZG9leGl0KEdPT0Rf RVhJVCwwKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY3ggPT0gLTEpIHsJLyogQ29ubmVjdGlv biBsb3N0ICovCi0gICAgICAgICAgICAgICAgZG9leGl0KEJBRF9FWElULDApOwotICAgICAgICAg ICAgfQotICAgICAgICAgICAgYyA9IChjaGFyKSBjeDsKLSAgICAgICAgfSBlbHNlIHsKLSNlbmRp ZiAvKiBJS1NEICovCi0jaWZkZWYgVk1TCi0JICAgIGNvbmJpbigoY2hhcillc2NhcGUpOwkvKiBQ cm90ZWN0IGFnYWluc3QgQ3RybC1aICovCi0JICAgIGN4ID0gY29uaW5jKDApOwotCSAgICBjb25j YigoY2hhcillc2NhcGUpOwotI2Vsc2UKLQkgICAgY3ggPSBjbWRnZXRjKDApOwotI2VuZGlmIC8q IFZNUyAqLwotCSAgICBkZWJ1ZyhGMTAxLCJhc2ttb3JlIGNtZGdldGMiLCIiLGN4KTsKLQkgICAg aWYgKGN4ID09IEVPRikgewotCQlkZWJ1ZyhGMTAwLCJhc2ttb3JlIEVPRiIsIiIsMCk7Ci0jaWZk ZWYgVk1TCi0JCWMgPSAnXDAzMic7Ci0jZWxzZQotCQljID0gJ24nOwotI2VuZGlmIC8qIFZNUyAq LwotCSAgICB9IGVsc2UgewotCQljID0gKGNoYXIpY3g7Ci0JICAgIH0KLQkgICAgZGVidWcoRjEw MSwiYXNrbW9yZSBjIiwiIixjKTsKLQotI2lmZGVmIElLU0QKLQl9Ci0jZW5kaWYgLyogSUtTRCAq LwotICAgICAgICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgICAvKiBZZXMgKi8KLQkgIGNhc2UgJ3An OiBjYXNlICdQJzogY2FzZSAnZyc6IGNhc2UgJ0cnOiAvKiBQcm9jZWVkIG9yIEdvICovCi0JICAg IHhhc2ttb3JlID0gMDsKLQkgICAgLyogZmFsbCB0aHJ1IG9uIHB1cnBvc2UgKi8KLQotICAgICAg ICAgIGNhc2UgU1A6IGNhc2UgJ3knOiBjYXNlICdZJzogY2FzZSAwMTI6ICBjYXNlIDAxNToKLSNp ZmRlZiBPU0sKLSAgICAgICAgICAgIHdyaXRlKDEsICJcMDE1ICAgICAgXDAxNSIsIHNpemVvZiAi XDAxNSAgICAgIFwwMTUiIC0gMSk7Ci0jZWxzZQotICAgICAgICAgICAgcHJpbnRmKCJcMDE1ICAg ICAgXDAxNSIpOwotI2VuZGlmIC8qIE9TSyAqLwotICAgICAgICAgICAgcnYgPSAxOwotICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgLyogTm8gKi8KLSAgICAgICAgICBjYXNlICduJzogY2Fz ZSAnTic6IGNhc2UgJ3EnOiBjYXNlICdRJzoKLSNpZmRlZiBPU0sKLSAgICAgICAgICAgIHByaW50 ZigiXG4iKTsKLSNlbHNlCi0gICAgICAgICAgICBwcmludGYoIlwwMTVcMDEyIik7Ci0jZW5kaWYg LyogT1NLICovCi0gICAgICAgICAgICBydiA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLQkgIGNh c2UgJ1wwMDMnOgotCSAgY2FzZSAnXDAwNCc6Ci0JICBjYXNlICdcMDMyJzoKLSNpZmRlZiBPU0sK LQkgICAgcHJpbnRmKCJeJWMuLi5cbiIsIChjICsgMDEwMCkpOwotI2Vsc2UKLQkgICAgcHJpbnRm KCJeJWMuLi5cMDE1XDAxMiIsIChjICsgMDEwMCkpOwotI2VuZGlmIC8qIE9TSyAqLwotCSAgICBy diA9IDA7Ci0JICAgIGJyZWFrOwotICAgICAgICAgIC8qIEludmFsaWQgYW5zd2VyICovCi0gICAg ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImFza21vcmUiLCJpbnZhbGlk IGFuc3dlciIsYyk7Ci0gICAgICAgICAgICBwcmludGYoIlkgb3Igc3BhY2UtYmFyIGZvciB5ZXMs IE4gZm9yIG5vLCBHIHRvIHNob3cgdGhlIHJlc3RcbiIpOwotICAgICAgICAgICAgY29udGludWU7 Ci0gICAgICAgIH0KLSNpZmRlZiBPUzIKLSAgICAgICAgcHJpbnRmKCJcciAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyIik7Ci0gICAgICAgIGZmbHVz aChzdGRvdXQpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgIH0KLSAgICByZXR1cm4ocnYpOwotI2Vu ZGlmIC8qIE5PSUNQICovCi19Ci0KLS8qICBUIFIgQSBQICAtLSAgVGVybWluYWwgaW50ZXJydXB0 IGhhbmRsZXIgKi8KLQotU0lHVFlQCi0jaWZkZWYgQ0tfQU5TSUMKLXRyYXAoaW50IHNpZykKLSNl bHNlCi10cmFwKHNpZykgaW50IHNpZzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogdHJhcCAq LyB7Ci0gICAgZXh0ZXJuIGludCBiX3NhdmUsIGZfc2F2ZTsKLSNpZm5kZWYgTk9JQ1AKLSAgICBl eHRlcm4gaW50IHRpbWVsaW1pdDsKLSNlbmRpZiAvKiBOT0lDUCAqLwotI2lmZGVmIE9TMgotICAg IGV4dGVybiB1bnNpZ25lZCBsb25nIHN0YXJ0ZmxhZ3M7Ci0jaWZuZGVmIE5PU0VUS0VZCi0gICAg ZXh0ZXJuIGludCBvczJna3M7Ci0jZW5kaWYgLyogTk9TRVRLRVkgKi8KLSAgICBpbnQgaTsKLSNl bmRpZiAvKiBPUzIgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICBleHRlcm4gaW50IGlfYWN0aXZlLCBp bnN0YXR1czsKLSNlbmRpZiAvKiBOT1NQTCAqLwotI2lmZGVmIFZNUwotICAgIGludCBpOyBGSUxF ICpmOwotI2VuZGlmIC8qIFZNUyAqLwotICAgIGV4dGVybiBpbnQgemNoa29kLCB6Y2hraWQ7Ci0j aWZuZGVmIE5PU1BMCi0gICAgZXh0ZXJuIGludCB1bmttYWNybzsKLSNlbmRpZiAvKiBOT1NQTCAq LwotCi0gICAgZGVib2sgPSAxOwotI2lmZGVmIE5UU0lHCi0gICAgY29ubm9pKCk7Ci0jZW5kaWYg LyogTlRTSUcgKi8KLSNpZmRlZiBfX0VNWF9fCi0gICAgc2lnbmFsKFNJR0lOVCwgU0lHX0FDSyk7 Ci0jZW5kaWYKLSNpZmRlZiBHRU1ET1MKLS8qIEdFTSBpcyBub3QgcmVlbnRyYW50LCBubyBpL28g ZnJvbSBpbnRlcnJ1cHQgbGV2ZWwgKi8KLSAgICBja2xvbmdqbXAoY21qYnVmLDEpOyAgICAgICAg ICAgICAgICAvKiBKdW1wIGJhY2sgdG8gcGFyc2VyIG5vdyEgKi8KLSNlbmRpZiAvKiBHRU1ET1Mg Ki8KLQotI2lmZGVmIERFQlVHCi0gICAgaWYgKGRlYmxvZykgewotCWRlYnVnKEYxMDAsIioqKioq KioqKioqKioqKioqKioqKiIsIiIsMCk7Ci0JaWYgKHNpZyA9PSBTSUdJTlQpCi0JICBkZWJ1ZyhG MTAxLCJ0cmFwIGNhdWdodCBTSUdJTlQiLCIiLHNpZyk7Ci0JZWxzZSAKLQkgIGRlYnVnKEYxMDEs InRyYXAgY2F1Z2h0IHNpZ25hbCIsIiIsc2lnKTsKLQlkZWJ1ZyhGMTAwLCIqKioqKioqKioqKioq KioqKioqKioiLCIiLDApOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0jaWZkZWYgT1My Ci0gICAgaWYgKCBzaWcgPT0gU0lHQlJFQUsgJiYgKHN0YXJ0ZmxhZ3MgJiAxMjgpICkgewotICAg ICAgICBkZWJ1ZyhGMTAxLCJ0cmFwIGlnbm9yaW5nIFNJR0JSRUFLIiwiIixzaWcpOwotICAgICAg ICByZXR1cm47Ci0gICAgfQotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZuZGVmIE5PSUNQCi0gICAg dGltZWxpbWl0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogSW4gY2FzZSB0aW1lZCBBU0sg aW50ZXJydXB0ZWQgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICB1bmttYWNybyA9IDA7CQkJLyogT3Ig T05fVU5LTk9XTl9NQUNSTyBpbnRlcnJ1cHRlZC4uICovCi0jZW5kaWYgLyogTk9TUEwgKi8KLSNl bmRpZiAvKiBOT0lDUCAqLwotICAgIHpjaGtvZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAg IC8qIE9yIGZpbGUgZXhwYW5zaW9uIGludGVycnVwdGVkLi4uICovCi0gICAgemNoa2lkID0gMDsK LSAgICBpbnRlcnJ1cHRlZCA9IDE7Ci0KLSAgICBpZiAod2hhdCAmIFdfQ09OTkVDVCkgewkJLyog QXJlIHdlIGluIENPTk5FQ1QgbW9kZT8gKi8KLS8qCi0gIFRoZSBIUCB3b3Jrc3RhdGlvbiBSZXNl dCBrZXkgc2VuZHMgc29tZSBraW5kIG9mIHVlYmVyLVNJR0lOVCB0aGF0IGNhbiBub3QKLSAgYmUg U0lHX0lHTm9yZWQsIHNvIHdlIHdpbmQgdXAgaGVyZSBzb21laG93IChldmVuIHRob3VnaCB0aGlz IGlzICpub3QqIHRoZQotICBjdXJyZW50IFNJR0lOVCBoYW5kbGVyKS4gIEp1c3QgcmV0dXJuLgot Ki8KLSAgICAgICAgZGVidWcoRjEwMSwidHJhcDogU0lHSU5UIGNhdWdodCBkdXJpbmcgQ09OTkVD VCIsIiIsc2lnKTsKLSAgICAgICAgU0lHUkVUVVJOOwotICAgIH0KLSNpZm5kZWYgTk9TUEwKLSAg ICBpZiAoaV9hY3RpdmUpIHsgICAgICAgICAgICAgICAgICAgICAvKiBJTlBVVCBjb21tYW5kIHdh cyBhY3RpdmU/ICovCi0gICAgICAgIGlfYWN0aXZlID0gMDsgICAgICAgICAgICAgICAgICAgLyog Tm90IGFueSBtb3JlLi4uICovCi0gICAgICAgIGluc3RhdHVzID0gSU5QX1VJOyAgICAgICAgICAg ICAgLyogSU5QVVQgc3RhdHVzID0gVXNlciBJbnRlcnJ1cHRlZCAqLwotICAgIH0KLSNlbmRpZiAv KiBOT1NQTCAqLwotCi0jaWZuZGVmIE5PWEZFUgotICAgIGZ0cmVzZXQoKTsgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFJlc3RvcmUgZ2xvYmFsIHByb3RvY29sIHNldHRpbmdzICovCi0gICAg YmluYXJ5ID0gYl9zYXZlOyAgICAgICAgICAgICAgICAgICAgLyogVGhlbiByZXN0b3JlIHRoZXNl ICovCi0gICAgZm5jbnYgID0gZl9zYXZlOwotICAgIGJ5ZV9hY3RpdmUgPSAwOwotICAgIGRpcmFj dGl2ZSA9IDA7Ci0gICAgY2RhY3RpdmUgPSAwOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgIHpj bG9zZShaSUZJTEUpOyAgICAgICAgICAgICAgICAgICAgIC8qIElmIHdlIHdlcmUgdHJhbnNmZXJy aW5nIGEgZmlsZSwgKi8KLSAgICB6Y2xvc2UoWk9GSUxFKTsgICAgICAgICAgICAgICAgICAgICAv KiBjbG9zZSBpdC4gKi8KLSNpZm5kZWYgTk9JQ1AKLSAgICBjbWRzcXVvKGNtZF9xdW90aW5nKTsg ICAgICAgICAgICAgICAvKiBJZiBjb21tYW5kIHF1b3Rpbmcgd2FzIHR1cm5lZCBvZmYgKi8KLSNp ZmRlZiBDS0xFQVJOCi0gICAgewotCWV4dGVybiBGSUxFICogbGVhcm5mcDsKLQlleHRlcm4gaW50 IGxlYXJuaW5nOwotCWlmIChsZWFybmZwKSB7Ci0JICAgIGZjbG9zZShsZWFybmZwKTsKLQkgICAg bGVhcm5mcCA9IE5VTEw7Ci0JICAgIGxlYXJuaW5nID0gMDsKLQl9Ci0gICAgfQotI2VuZGlmIC8q IENLTEVBUk4gKi8KLSNlbmRpZiAvKiBOT0lDUCAqLwotI2lmZGVmIENLX0FQQwotICAgIGRlbG1h YygiX2FwY19jb21tYW5kcyIsMSk7Ci0gICAgYXBjYWN0aXZlID0gQVBDX0lOQUNUSVZFOwotI2Vu ZGlmIC8qIENLX0FQQyAqLwotCi0jaWZkZWYgVk1TCi0vKgotICBGaXggdGVybWluYWwuCi0qLwot ICAgIGlmIChmdF93aW4pIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIGN1cnNlcyB3aW5k b3cgb3BlbiAqLwotICAgICAgICBkZWJ1ZyhGMTAwLCJeQyB0cmFwKCkgY3Vyc2VzIiwiIiwwKTsK LSAgICAgICAgeHhzY3JlZW4oU0NSX0NXLDAsMEwsIiIpOyAgICAgICAvKiBDbG9zZSBpdCAqLwot ICAgICAgICBjb25yZXMoKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgdGVybWlu YWwgKi8KLSAgICAgICAgaSA9IHByaW50ZigiXkMuLi4iKTsgICAgICAgICAgICAvKiBFY2hvIF5D IHRvIHN0YW5kYXJkIG91dHB1dCAqLwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbnJlcygpOwot ICAgICAgICBpID0gcHJpbnRmKCJeQy4uLlxuIik7ICAgICAgICAgIC8qIEVjaG8gXkMgdG8gc3Rh bmRhcmQgb3V0cHV0ICovCi0gICAgfQotICAgIGlmIChpIDwgMSAmJiBmZXJyb3Ioc3Rkb3V0KSkg eyAgICAgIC8qIElmIHRoZXJlIHdhcyBhbiBlcnJvciAqLwotICAgICAgICBkZWJ1ZyhGMTAwLCJe QyB0cmFwKCkgZXJyb3IiLCIiLDApOwotICAgICAgICBmY2xvc2Uoc3Rkb3V0KTsgICAgICAgICAg ICAgICAgIC8qIGNsb3NlIHN0YW5kYXJkIG91dHB1dCAqLwotICAgICAgICBmID0gZm9wZW4oZGZ0 dHksICJ3Iik7ICAgICAgICAgIC8qIG9wZW4gdGhlIGNvbnRyb2xsaW5nIHRlcm1pbmFsICovCi0g ICAgICAgIGlmIChmKSBzdGRvdXQgPSBmOyAgICAgICAgICAgICAgLyogYW5kIG1ha2UgaXQgc3Rh bmRhcmQgb3V0cHV0ICovCi0gICAgICAgIHByaW50ZigiXkMuLi5cbiIpOyAgICAgICAgICAgICAg LyogYW5kIGVjaG8gdGhlIF5DIGFnYWluLiAqLwotICAgIH0KLSNlbHNlICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBOb3QgVk1TICovCi0jaWZkZWYgU1RSQVRVUwotICAgIGNv bnJlcygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBjb25zb2xlIGJhY2sgdG8g bm9ybWFsIG1vZGUgKi8KLSNlbmRpZiAvKiBTVFJBVFVTICovCi0jaWZuZGVmIE5PWEZFUgotICAg IGlmIChmdF93aW4pIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIGN1cnNlcyB3aW5kb3cg b3BlbiwgKi8KLSAgICAgICAgZGVidWcoRjEwMCwiXkMgdHJhcCgpIGN1cnNlcyIsIiIsMCk7Ci0g ICAgICAgIHh4c2NyZWVuKFNDUl9DVywwLDBMLCIiKTsJLyogY2xvc2UgaXQuICovCi0gICAgICAg IHByaW50ZigiXkMuLi4iKTsgICAgICAgICAgICAgICAgLyogRWNobyBeQyB0byBzdGFuZGFyZCBv dXRwdXQgKi8KLSAgICB9IGVsc2UgewotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgICAgICBwcmlu dGYoIl5DLi4uXG4iKTsKLSNpZm5kZWYgTk9YRkVSCi0gICAgfQotI2VuZGlmIC8qIE5PWEZFUiAq LwotI2VuZGlmIC8qIFZNUyAqLwotI2lmZGVmIGRhdGFnZW5lcmFsCi0gICAgY29ubm9pX210KCk7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogS2lsbCBhc3luY2ggdGFzayB0aGF0IGxpc3RlbnMg dG8gKi8KLSAgICB0dGltb2ZmKCk7Ci0gICAgY29ucmVzKCk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogdGhlIGtleWJvYXJkICovCi0jZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KLQotI2lm bmRlZiBOT0NDVFJBUAotLyogIFRoaXMgaXMgc3R1cGlkIC0tIGV2ZXJ5IHZlcnNpb24gc2hvdWxk IGhhdmUgdHRpbW9mZigpLi4uICAqLwotI2lmZGVmIFVOSVgKLSAgICB0dGltb2ZmKCk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBUdXJuIG9mZiBhbnkgdGltZXIgaW50ZXJydXB0cyAqLwot I2Vsc2UKLSNpZmRlZiBPU0sKLSAgICB0dGltb2ZmKCk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBUdXJuIG9mZiBhbnkgdGltZXIgaW50ZXJydXB0cyAqLwotI2Vsc2UKLSNpZmRlZiBTVFJB VFVTCi0gICAgdHRpbW9mZigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVHVybiBvZmYg YW55IHRpbWVyIGludGVycnVwdHMgKi8KLSNlbHNlCi0jaWZkZWYgT1MyCi0jaWZuZGVmIE5PU0VU S0VZCi0gICAgb3MyZ2tzID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogVHVybiBiYWNr IG9uIGtleWNvZGUgbWFwcGluZyAgKi8KLSNlbmRpZiAvKiBOT1NFVEtFWSAqLwotI2lmbmRlZiBO T0xPQ0FMCi0gICAgZm9yIChpID0gMDsgaSA8IFZOVU07IGkrKykKLSAgICAgIFZzY3JuUmVzZXRQ b3B1cChpKTsKLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0jaWZkZWYgVENQU09DS0VUCi0jaWZkZWYg TlQKLSAgICAvKiBXU0FJc0Jsb2NraW5nKCkgcmV0dXJucyBGQUxTRSBpbiBXaW45NSBkdXJpbmcg YSBibG9ja2luZyBhY2NlcHQgY2FsbCAqLwotICAgIGlmICggV1NBU2FmZVRvQ2FuY2VsIC8qICYm IFdTQUlzQmxvY2tpbmcoKSAqLyApIHsKLSAgICAgICAgV1NBQ2FuY2VsQmxvY2tpbmdDYWxsKCk7 Ci0gICAgfQotI2VuZGlmIC8qIE5UICovCi0jZW5kaWYgLyogVENQU09DS0VUICovCi0jaWZkZWYg Q0tfTkVUQklPUwotICAgIE5DQkNhbmNlbE91dHN0YW5kaW5nKCk7Ci0jZW5kaWYgLyogQ0tfTkVU QklPUyAqLwotICAgIHR0aW1vZmYoKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR1cm4g b2ZmIGFueSB0aW1lciBpbnRlcnJ1cHRzICovCi0jZWxzZQotI2lmZGVmIFZNUwotICAgIHR0aW1v ZmYoKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIGFueSB0aW1lciBpbnRl cnJ1cHRzICovCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0jZW5kaWYgLyog U1RSQVRVUyAqLwotI2VuZGlmIC8qIE9TSyAqLwotI2VuZGlmIC8qIFVOSVggKi8KLQotI2lmZGVm IE5FVFBUWQotICAgIC8qIENsZWFuIHVwIEN0cmwtQyBvdXQgb2YgUkVESVJFQ1Qgb3IgZXh0ZXJu YWwgcHJvdG9jb2wgKi8KLSAgICB7Ci0JZXh0ZXJuIFBJRF9UIHB0eV9mb3JrX3BpZDsKLQlleHRl cm4gaW50IHB0eV9tYXN0ZXJfZmQsIHB0eV9zbGF2ZV9mZDsKLQlpbnQgeDsKLQotCXNpZ25hbChT SUdDSExELFNJR19JR04pOwkvKiBXZSBkb24ndCB3YW50IHRoaXMgYW55IG1vcmUgKi8KLQotCWRl YnVnKEYxMDEsInRyYXAgcHR5X21hc3Rlcl9mZCIsIiIscHR5X21hc3Rlcl9mZCk7Ci0JaWYgKHB0 eV9tYXN0ZXJfZmQgPiAyKSB7Ci0JICAgIHggPSBjbG9zZShwdHlfbWFzdGVyX2ZkKTsKLQkgICAg ZGVidWcoRjEwMSwidHJhcCBwdHlfbWFzdGVyX2ZkIGNsb3NlIiwiIix4KTsKLQl9Ci0JcHR5X21h c3Rlcl9mZCA9IC0xOwotCWRlYnVnKEYxMDEsInRyYXAgcHR5X3NsYXZlX2ZkIiwiIixwdHlfc2xh dmVfZmQpOwotCWlmIChwdHlfc2xhdmVfZmQgPiAyKSB7Ci0JICAgIHggPSBjbG9zZShwdHlfc2xh dmVfZmQpOwotCSAgICBkZWJ1ZyhGMTAxLCJ0cmFwIHB0eV9zbGF2ZV9mZCBjbG9zZSIsIiIseCk7 Ci0JfQotCXB0eV9zbGF2ZV9mZCA9IC0xOwotCWRlYnVnKEYxMDEsInRyYXAgcHR5X2ZvcmtfcGlk IiwiIixwdHlfZm9ya19waWQpOwotCWlmIChwdHlfZm9ya19waWQgPiAwKSB7Ci0JICAgIHggPSBr aWxsKHB0eV9mb3JrX3BpZCwwKTsJLyogU2VlIGlmIHRoZSBmb3JrIGlzIHJlYWxseSB0aGVyZSAq LwotCSAgICBkZWJ1ZyhGMTExLCJ0cmFwIHB0eV9mb3JrX3BpZCBraWxsIDAgZXJybm8iLGNraXRv YSh4KSxlcnJubyk7Ci0JICAgIGlmICh4ID09IDApIHsJCS8qIFNlZW1zIHRvIGJlIGFjdGl2ZSAq LwotCQl4ID0ga2lsbChwdHlfZm9ya19waWQsU0lHSFVQKTsgLyogQXNrIGl0IHRvIGNsZWFuIHVw ICYgZXhpdCAqLwotCQlkZWJ1ZyhGMTAxLCJ0cmFwIHB0eV9mb3JrX3BpZCBraWxsIFNJR0hVUCIs IiIseCk7Ci0JCW1zbGVlcCgxMDApOwotCQllcnJubyA9IDA7Ci0JCXggPSBraWxsKHB0eV9mb3Jr X3BpZCwwKTsgLyogSXMgaXQgc3RpbGwgdGhlcmU/ICovCi0JCWlmICh4ID09IDAKLSNpZmRlZiBF U1JDSAotCQkgICAgLyogVGhpcyBtb2R1bGUgaXMgbm90IGFsd2F5cyBleHBvc2VkIHRvIDxlcnJu by5oPiAqLwotCQkgICAgfHwgZXJybm8gIT0gRVNSQ0gKLSNlbmRpZgkvKiBFU1JDSCAqLwotCQkg ICAgKSB7Ci0JCSAgICB4ID0ga2lsbChwdHlfZm9ya19waWQsU0lHS0lMTCk7Ci0JCSAgICBkZWJ1 ZyhGMTAxLCJ0cmFwIHB0eV9mb3JrX3BpZCBraWxsIFNJR0tJTEwiLCIiLHgpOwotCQl9Ci0JICAg IH0KLQkgICAgcHR5X2ZvcmtfcGlkID0gLTE7Ci0JfQotICAgIH0KLSNlbmRpZgkvKiBORVRQVFkg Ki8KLQotI2lmZGVmIE9TSwotICAgIHNpZ21hc2soLTEpOwotLyoKLSAgV2UgYXJlIGluIGFuIGlu dGVyY2VwdCByb3V0aW5lIGJ1dCBkbyBub3QgcGVyZm9ybSBhIEYkUlRFIChkb25lIGltcGxpY2l0 bHkKLSAgYnkgcnRzKS4gIFdlIGhhdmUgdG8gZGVjcmVtZW50IHRoZSBzaWdtYXNrIGFzIEYkUlRF IGRvZXMuICBXYXJuaW5nOiBsb25nanVtcAotICBvbmx5IHJlc3RvcmVzIHRoZSBjcHUgcmVnaXN0 ZXJzLCBOT1QgdGhlIGZwdSByZWdpc3RlcnMuICBTbyBkb24ndCB1c2UgZnB1IGF0Ci0gIGFsbCBv ciBhdCBsZWFzdCBkb24ndCB1c2UgY29tbW9uIGZwdSAoZG91YmxlIG9yIGZsb2F0KSByZWdpc3Rl ciB2YXJpYWJsZXMuCi0qLwotI2VuZGlmIC8qIE9TSyAqLwotCi0jaWZkZWYgTlRTSUcKLSAgICBQ b3N0Q3RybENTZW0oKTsKLSNlbHNlIC8qIE5UU0lHICovCi0gICAgZGVidWcoRjEwMCwidHJhcCBh Ym91dCB0byBsb25nam1wIiwiIiwwKTsKLSNpZmRlZiBOVAotICAgIGNrbG9uZ2ptcChja2phZGRy KGNtamJ1ZiksMSk7Ci0jZWxzZSAvKiBOVCAqLwotICAgIGNrbG9uZ2ptcChjbWpidWYsMSk7Ci0j ZW5kaWYgLyogTlQgKi8KLSNlbmRpZiAvKiBOVFNJRyAqLwotI2Vsc2UgLyogTk9DQ1RSQVAgKi8K LS8qIE5vIEN0cmwtQyB0cmFwLCBqdXN0IGV4aXQuICovCi0jaWZkZWYgQ0tfQ1VSU0VTICAgICAg ICAgICAgICAgICAgICAgICAgLyogQ3Vyc2VzIHN1cHBvcnQ/ICovCi0gICAgeHhzY3JlZW4oU0NS X0NXLDAsMEwsIiIpOyAgICAgICAgICAgLyogQ2xvc2UgY3Vyc2VzIHdpbmRvdyAqLwotI2VuZGlm IC8qIENLX0NVUlNFUyAqLwotICAgIGRvZXhpdChCQURfRVhJVCx3aGF0KTsgICAgICAgICAgICAg IC8qIEV4aXQgcG9vcmx5ICovCi0jZW5kaWYgLyogTk9DQ1RSQVAgKi8KLSAgICBTSUdSRVRVUk47 Ci19Ci0KLQotLyogIEMgSyBfIFQgSSBNIEUgIC0tIFJldHVybnMgcG9pbnRlciB0byBjdXJyZW50 IHRpbWUuICovCi0KLWNoYXIgKgotY2tfdGltZSgpIHsKLSAgICBzdGF0aWMgY2hhciB0YnVmWzEw XTsKLSAgICBjaGFyICpwOwotICAgIGludCB4OwotCi0gICAgenRpbWUoJnApOyAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogIlRodSBGZWIgIDggMTI6MDA6MDAgMTk5MCIgKi8KLSAgICBpZiAo IXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaWtlIGFzY3RpbWUoKSEgKi8KLSAg ICAgIHJldHVybigiIik7Ci0gICAgaWYgKCpwKSB7Ci0gICAgICAgIGZvciAoeCA9IDExOyB4IDwg MTk7IHgrKykgICAgICAgLyogY29weSBoaDptbTpzcyAqLwotICAgICAgICAgIHRidWZbeCAtIDEx XSA9IHBbeF07ICAgICAgICAgIC8qIHRvIHRidWYgKi8KLSAgICAgICAgdGJ1Zls4XSA9IE5VTDsg ICAgICAgICAgICAgICAgICAvKiB0ZXJtaW5hdGUgKi8KLSAgICB9Ci0gICAgcmV0dXJuKHRidWYp OyAgICAgICAgICAgICAgICAgICAgICAgLyogYW5kIHJldHVybiBpdCAqLwotfQotCi0vKiAgQyBD IF8gQyBMIEUgQSBOICAtLSAgQ2xlYW51cCBhZnRlciB0ZXJtaW5hbCBpbnRlcnJ1cHQgaGFuZGxl ciAqLwotCi0jaWZkZWYgR0VNRE9TCi1pbnQKLWNjX2NsZWFuKCkgewotICAgIHpjbG9zZShaSUZJ TEUpOyAgICAgICAgICAgICAgICAgICAgIC8qIElmIHdlIHdlcmUgdHJhbnNmZXJyaW5nIGEgZmls ZSwgKi8KLSAgICB6Y2xvc2UoWk9GSUxFKTsgICAgICAgICAgICAgICAgICAgICAvKiBjbG9zZSBp dC4gKi8KLSAgICBwcmludGYoIl5DLi4uXG4iKTsgICAgICAgICAgICAgICAgICAvKiBOb3QgVk1T LCBubyBwcm9ibGVtLi4uICovCi19Ci0jZW5kaWYgLyogR0VNRE9TICovCi0KLQotLyogIFMgVCBQ IFQgUiBBIFAgLS0gSGFuZGxlIFNJR1RTVFAgKHN1c3BlbmQpIHNpZ25hbHMgKi8KLQotU0lHVFlQ Ci0jaWZkZWYgQ0tfQU5TSUMKLXN0cHRyYXAoaW50IHNpZykKLSNlbHNlCi1zdHB0cmFwKHNpZykg aW50IHNpZzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogc3RwdHJhcCAqLyB7Ci0KLSNpZm5k ZWYgTk9KQwotICAgIGludCB4OyBleHRlcm4gaW50IGNtZmxnczsKLSAgICBkZWJ1ZyhGMTAxLCJz dHB0cmFwKCkgY2F1Z2h0IHNpZ25hbCIsIiIsc2lnKTsKLSAgICBpZiAoIXhzdXNwZW5kKSB7Ci0g ICAgICAgIHByaW50ZigiXHJcbnN1c3BlbmQgZGlzYWJsZWRcclxuIik7Ci0jaWZuZGVmIE5PSUNQ Ci0gICAgICAgIGlmICh3aGF0ICYgV19DT01NQU5EKSB7CQkvKiBJZiB3ZSB3ZXJlIHBhcnNpbmcg Y29tbWFuZHMgKi8KLSAgICAgICAgICAgIHByb21wdCh4eHN0cmluZyk7ICAgICAgICAgICAvKiBy ZWlzc3VlIHRoZSBwcm9tcHQgYW5kIHBhcnRpYWwgKi8KLSAgICAgICAgICAgIGlmICghY21mbGdz KSAgICAgICAgICAgICAgICAvKiBjb21tYW5kIChpZiBhbnkpICovCi0gICAgICAgICAgICAgIHBy aW50ZigiJXMiLGNtZGJ1Zik7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBOT0lDUCAqLwotICAgIH0g ZWxzZSB7Ci0gICAgICAgIGNvbnJlcygpOyAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQg dGhlIGNvbnNvbGUgKi8KLSNpZm5kZWYgT1MyCi0gICAgICAgIC8qIEZsdXNoIHBlbmRpbmcgb3V0 cHV0IGZpcnN0LCBpbiBjYXNlIHdlIGFyZSBjb250aW51ZWQgKi8KLSAgICAgICAgLyogaW4gdGhl IGJhY2tncm91bmQsIHdoaWNoIGNvdWxkIG1ha2UgdXMgYmxvY2sgKi8KLSAgICAgICAgZmZsdXNo KHN0ZG91dCk7Ci0KLSAgICAgICAgeCA9IHBzdXNwZW5kKHhzdXNwZW5kKTsJCS8qIFRyeSB0byBz dXNwZW5kLiAqLwotICAgICAgICBpZiAoeCA8IDApCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAg ICAgcHJpbnRmKCJKb2IgY29udHJvbCBub3Qgc3VwcG9ydGVkXHJcbiIpOwotICAgICAgICBjb25p bnQodHJhcCxzdHB0cmFwKTsgICAgICAgICAgIC8qIFJlYXJtIHRoZSB0cmFwLiAqLwotICAgICAg ICBkZWJ1ZyhGMTAwLCJzdHB0cmFwIGJhY2sgZnJvbSBzdXNwZW5kIiwiIiwwKTsKLSAgICAgICAg c3dpdGNoICh3aGF0KSB7Ci0gICAgICAgICAgY2FzZSBXX0NPTk5FQ1Q6ICAgICAgICAgICAgICAg LyogSWYgc3VzcGVuZGVkIGR1cmluZyBDT05ORUNUPyAqLwotICAgICAgICAgICAgY29uYmluKChj aGFyKWVzY2FwZSk7ICAgICAgIC8qIHB1dCBjb25zb2xlIGJhY2sgaW4gYmluYXJ5IG1vZGUgKi8K LSAgICAgICAgICAgIGRlYnVnKEYxMDAsInN0cHRyYXAgV19DT05ORUNUIiwiIiwwKTsKLSAgICAg ICAgICAgIGJyZWFrOwotI2lmbmRlZiBOT0lDUAotICAgICAgICAgIGNhc2UgV19DT01NQU5EOiAg ICAgICAgICAgICAgIC8qIFN1c3BlbmRlZCBpbiBjb21tYW5kIG1vZGUgKi8KLSAgICAgICAgICAg IGRlYnVnKEYxMDEsInN0cHRyYXAgV19DT01NQU5EIHBmbGFnIiwiIixwZmxhZyk7Ci0gICAgICAg ICAgICBjb25jYigoY2hhcillc2NhcGUpOyAgICAgICAgLyogUHV0IGJhY2sgQ0JSRUFLIHR0eSBt b2RlICovCi0gICAgICAgICAgICBpZiAocGZsYWcpIHsgICAgICAgICAgICAgICAgLyogSWYgY29t bWFuZCBwYXJzaW5nIHdhcyAqLwotICAgICAgICAgICAgICAgIHByb21wdCh4eHN0cmluZyk7ICAg ICAgIC8qIHJlaXNzdWUgdGhlIHByb21wdCBhbmQgcGFydGlhbCAqLwotICAgICAgICAgICAgICAg IGlmICghY21mbGdzKSAgICAgICAgICAgIC8qIGNvbW1hbmQgKGlmIGFueSkgKi8KLSAgICAgICAg ICAgICAgICAgIHByaW50ZigiJXMiLGNtZGJ1Zik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg ICBicmVhazsKLSNlbmRpZiAvKiBOT0lDUCAqLwotICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAg ICAgICAgICAgICAgIC8qIEFsbCBvdGhlciBjYXNlcy4uLiAqLwotICAgICAgICAgICAgZGVidWco RjEwMCwic3RwdHJhcCBkZWZhdWx0IiwiIiwwKTsKLSAgICAgICAgICAgIGNvbmNiKChjaGFyKWVz Y2FwZSk7ICAgICAgICAvKiBQdXQgaXQgYmFjayBpbiBDQlJFQUsgbW9kZSAqLwotICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogTk9KQyAqLwotICAgIFNJR1JF VFVSTjsKLX0KLQotI2lmZGVmIFRMT0cKLSNkZWZpbmUgVEJVRkwgMzAwCi0KLS8qICBUIEwgTyBH ICAtLSAgTG9nIGEgcmVjb3JkIGluIHRoZSB0cmFuc2FjdGlvbiBmaWxlICAqLwotLyoKLSBDYWxs IHdpdGggYSBmb3JtYXQgYW5kIDMgYXJndW1lbnRzOiB0d28gc3RyaW5ncyBhbmQgYSBudW1iZXI6 Ci0gICBmICAgICAtIEZvcm1hdCwgYSBiaXQgc3RyaW5nIGluIHJhbmdlIDAtNywgYml0IHggaXMg b24sIGFyZyAjeCBpcyBwcmludGVkLgotICAgczEsczIgLSBTdHJpbmcgYXJndW1lbnRzIDAgYW5k IDEuCi0gICBuICAgICAtIExvbmcsIGFyZ3VtZW50IDIuCi0qLwotVk9JRAotI2lmZGVmIENLX0FO U0lDCi1kb3Rsb2coaW50IGYsIGNoYXIgKnMxLCBjaGFyICpzMiwgQ0tfT0ZGX1QgbikKLSNlbHNl Ci1kb3Rsb2coZixzMSxzMixuKSBpbnQgZjsgQ0tfT0ZGX1QgbjsgY2hhciAqczEsICpzMjsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwotLyogZG90bG9nICovIHsKLSAgICBzdGF0aWMgY2hhciBzW1RC VUZMXTsKLSAgICBleHRlcm4gaW50IHRsb2dmbXQ7Ci0gICAgY2hhciAqc3AgPSBzOyBpbnQgeDsK LSAgICBpZiAoIXMxKSBzMSA9ICIiOwotICAgIGlmICghczIpIHMyID0gIiI7Ci0KLSAgICBpZiAo IXRyYWxvZykgcmV0dXJuOyAgICAgICAgICAgICAgICAvKiBJZiBubyB0cmFuc2FjdGlvbiBsb2cs IGRvbid0ICovCi0gICAgaWYgKHRsb2dmbXQgIT0gMSkgcmV0dXJuOwotICAgIHN3aXRjaCAoZikg ewotICAgICAgY2FzZSBGMDAwOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAgKHNwZWNpYWwp ICJzMSBuIHMyIiAgKi8KLSAgICAgICAgaWYgKChpbnQpc3RybGVuKHMxKSArIChpbnQpc3RybGVu KHMyKSArIDE1ID4gVEJVRkwpCi0gICAgICAgICAgc3ByaW50ZihzcCwiP1QtTG9nIHN0cmluZyB0 b28gbG9uZyIpOwotICAgICAgICBlbHNlCi0JICBzcHJpbnRmKHNwLCIlcyAlcyAlcyIsczEsY2tm c3RvYShuKSxzMik7Ci0gICAgICAgIGlmICh6c291dGwoWlRGSUxFLHMpIDwgMCkgdHJhbG9nID0g MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEYwMDE6ICAgICAgICAgICAgICAgICAgICAg ICAgLyogMSwgIiBuIiAqLwotICAgICAgICBzcHJpbnRmKHNwLCIgJXMiLGNrZnN0b2EobikpOwot ICAgICAgICBpZiAoenNvdXRsKFpURklMRSxzKSA8IDApIHRyYWxvZyA9IDA7Ci0gICAgICAgIGJy ZWFrOwotICAgICAgY2FzZSBGMDEwOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDIsICJbczJd IiAqLwotICAgICAgICB4ID0gKGludClzdHJsZW4oczIpOwotICAgICAgICBpZiAoczJbeF0gPT0g J1xuJykgczJbeF0gPSAnXDAnOwotICAgICAgICBpZiAoeCArIDYgPiBUQlVGTCkKLSAgICAgICAg ICBzcHJpbnRmKHNwLCI/U3RyaW5nIHRvbyBsb25nIik7Ci0gICAgICAgIGVsc2Ugc3ByaW50Zihz cCwiWyVzXSIsczIpOwotICAgICAgICBpZiAoenNvdXRsKFpURklMRSwiIikgPCAwKSB0cmFsb2cg PSAwOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRjAxMTogICAgICAgICAgICAgICAgICAg ICAgICAvKiAzLCAiW3MyXSBuIiAqLwotICAgICAgICB4ID0gKGludClzdHJsZW4oczIpOwotICAg ICAgICBpZiAoczJbeF0gPT0gJ1xuJykgczJbeF0gPSAnXDAnOwotICAgICAgICBpZiAoeCArIDYg PiBUQlVGTCkKLSAgICAgICAgICBzcHJpbnRmKHNwLCI/U3RyaW5nIHRvbyBsb25nIik7Ci0gICAg ICAgIGVsc2Ugc3ByaW50ZihzcCwiWyVzXSAlcyIsczIsY2tmc3RvYShuKSk7Ci0gICAgICAgIGlm ICh6c291dGwoWlRGSUxFLHMpIDwgMCkgdHJhbG9nID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAg ICBjYXNlIEYxMDA6ICAgICAgICAgICAgICAgICAgICAgICAgLyogNCwgInMxIiAqLwotICAgICAg ICBpZiAoenNvdXRsKFpURklMRSxzMSkgPCAwKSB0cmFsb2cgPSAwOwotICAgICAgICBicmVhazsK LSAgICAgIGNhc2UgRjEwMTogICAgICAgICAgICAgICAgICAgICAgICAvKiA1LCAiczE6IG4iICov Ci0gICAgICAgIGlmICgoaW50KXN0cmxlbihzMSkgKyAxNSA+IFRCVUZMKQotICAgICAgICAgIHNw cmludGYoc3AsIj9TdHJpbmcgdG9vIGxvbmciKTsKLSAgICAgICAgZWxzZSBzcHJpbnRmKHNwLCIl czogJXMiLHMxLGNrZnN0b2EobikpOwotICAgICAgICBpZiAoenNvdXRsKFpURklMRSxzKSA8IDAp IHRyYWxvZyA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGMTEwOiAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDYsICJzMSBzMiIgKi8KLSAgICAgICAgeCA9IChpbnQpc3RybGVuKHMy KTsKLSAgICAgICAgaWYgKHMyW3hdID09ICdcbicpIHMyW3hdID0gJ1wwJzsKLSAgICAgICAgaWYg KChpbnQpc3RybGVuKHMxKSArIHggKyA0ID4gVEJVRkwpCi0gICAgICAgICAgc3ByaW50ZihzcCwi P1N0cmluZyB0b28gbG9uZyIpOwotICAgICAgICBlbHNlCi0JICBzcHJpbnRmKHNwLCIlcyVzJXMi LHMxLCgoKnMyID09ICc6JykgPyAiIiA6ICIgIiksczIpOwotICAgICAgICBpZiAoenNvdXRsKFpU RklMRSxzKSA8IDApIHRyYWxvZyA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGMTEx OiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDcsICJzMSBzMjogbiIgKi8KLSAgICAgICAgeCA9 IChpbnQpc3RybGVuKHMyKTsKLSAgICAgICAgaWYgKHMyW3hdID09ICdcbicpIHMyW3hdID0gJ1ww JzsKLSAgICAgICAgaWYgKChpbnQpc3RybGVuKHMxKSArIHggKyAxNSA+IFRCVUZMKQotICAgICAg ICAgIHNwcmludGYoc3AsIj9TdHJpbmcgdG9vIGxvbmciKTsKLSAgICAgICAgZWxzZQotCSAgc3By aW50ZihzcCwiJXMlcyVzOiAlcyIsczEsKCgqczIgPT0gJzonKSA/ICIiIDogIiAiKSxzMixja2Zz dG9hKG4pKTsKLSAgICAgICAgaWYgKHpzb3V0bChaVEZJTEUscykgPCAwKSB0cmFsb2cgPSAwOwot ICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHNwcmludGYoc3AsIj9JbnZh bGlkIGZvcm1hdCBmb3IgdGxvZygpIC0gJWQiLGYpOwotICAgICAgICBpZiAoenNvdXRsKFpURklM RSxzKSA8IDApIHRyYWxvZyA9IDA7Ci0gICAgfQotfQotCi0vKgotICBEIE8gWCBMIE8gRwotCi0g IFRoaXMgaXMgdGhlIHRyYW5zYWN0aW9uLWxvZyB3cml0ZXIgZm9yIEJSSUVGIGZvcm1hdC4KLSAg VGhlIGlkZWEgaXMgcHJvZHVjZSBvbmUgcmVjb3JkIChsaW5lKSBwZXIgZmlsZS4gIEVhY2ggcmVj b3JkCi0gIGhhcyB0aGUgZm9sbG93aW5nIGRlbGltaXRlZCBmaWVsZHM6Ci0gICAgRGF0ZSAoeXl5 eW1tZGQpCi0gICAgVGltZSAoaGg6bW06c3MpCi0gICAgQWN0aW9uOiBTRU5EIG9yIFJFQ1YKLSAg ICBGaWxlIG5hbWUKLSAgICBGaWxlIHNpemUKLSAgICBUcmFuc2ZlciBtb2RlICh0ZXh0LCBiaW5h cnksIGltYWdlLCBsYWJlbGVkLCBldGMpLgotICAgIFN0YXR1czogT0sgb3IgRkFJTEVECi0gICAg RnJlZS1mb3JtIGNvbW1lbnRzIGluIGRvdWJsZXF1b3RlcwotICBUaGUgZGVmYXVsdCBzZXBhcmF0 b3IgaXMgY29tbWEuCi0gIElmIGEgZmllbGQgY29udGFpbnMgdGhlIHNlcGFyYXRvciwgaXQgaXMg ZW5jbG9zZWQgaW4gZG91YmxlcXVvdGVzLgotKi8KLVZPSUQKLSNpZmRlZiBDS19BTlNJQwotZG94 bG9nKGludCB4LCBjaGFyICogZm4sIENLX09GRl9UIGZzLCBpbnQgZm0sIGludCBzdGF0dXMsIGNo YXIgKiBtc2cpCi0jZWxzZQotZG94bG9nKHgsIGZuLCBmcywgZm0sIHN0YXR1cywgbXNnKQotICAg IGludCB4OyBjaGFyICogZm47IENLX09GRl9UIGZzOyBpbnQgZm07IGludCBzdGF0dXM7IGNoYXIg KiBtc2c7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIGRveGxvZyAqLyB7Ci0gICAgZXh0ZXJu IGludCB0bG9nc2VwOwotICAgIGNoYXIgc2VwWzJdOwotICAgIGNoYXIgYnVmW0NLTUFYUEFUSCsy NTZdLCAqIGJ1ZnA7Ci0gICAgY2hhciB0bXBidWZbMzJdOwotICAgIGNoYXIgKiBzLCAqIHA7Ci0g ICAgaW50IGxlbiwgbGVmdCwgZnRwID0gMCwgazsKLQotICAgIGlmICghdHJhbG9nKSByZXR1cm47 ICAgICAgICAgICAgICAgIC8qIElmIG5vIHRyYW5zYWN0aW9uIGxvZywgZG9uJ3QgKi8KLQotICAg IGlmICghZm4pIGZuID0gIiI7ICAgICAgICAgICAgICAgICAgIC8qIFByb3RlY3QgYWdhaW5zdCBu dWxsIHBvaW50ZXJzICovCi0gICAgaWYgKCFtc2cpIG1zZyA9ICIiOwotICAgIGlmICh4ICYgV19G VFApCi0gICAgICBmdHArKzsKLQotICAgIHNlcFswXSA9IChjaGFyKSB0bG9nc2VwOwotICAgIHNl cFsxXSA9IE5VTDsKLSAgICBpZiAoIXNlcFswXSkgc2VwWzBdID0gJywnOwotCi0gICAgYnVmcCA9 IGJ1ZjsKLSAgICBsZWZ0ID0gc2l6ZW9mKGJ1Zik7Ci0gICAgZGVidWcoRjEwMSwiWFhYIGRveGxv ZyBsZWZ0IDEiLCIiLGxlZnQpOwotCi0gICAgcCA9IHp6bmRhdGUoKTsgICAgICAgICAgICAgICAg ICAgICAgLyogRGF0ZSAqLwotICAgIGNrbWFrbXNnKGJ1ZiwgbGVmdCwgcCA/IHAgOiAiMDAwMDAw MDAiLCBzZXAsIE5VTEwsIE5VTEwpOwotICAgIGJ1ZnAgKz0gOTsKLSAgICBsZWZ0IC09IDk7Ci0g ICAgZGVidWcoRjExMSwiWFhYIGRveGxvZyBsZWZ0IDIiLGJ1ZixsZWZ0KTsKLQotICAgIHp0aW1l KCZwKTsKLSAgICBja3N0cm5jcHkoYnVmcCxwKzExLGxlZnQpOwotICAgIGJ1ZnAgKz0gODsKLSAg ICBsZWZ0IC09IDg7Ci0gICAgZGVidWcoRjExMSwiWFhYIGRveGxvZyBsZWZ0IDMiLGJ1ZixsZWZ0 KTsKLQotICAgIGlmIChmdHApIHsKLQlpZiAoISh4ICYgKFdfU0VORHxXX1JFQ1YpKSkKLQkgIHJl dHVybjsKLQlzID0gICh4ICYgV19TRU5EKSA/ICJQVVQiIDogIkdFVCI7Ci0JayA9IDM7Ci0gICAg fSBlbHNlIHsKLQlzID0gICh4ICYgV19TRU5EKSA/ICJTRU5EIiA6ICJSRUNWIjsKLQlrID0gNDsK LSAgICB9Ci0gICAgY2ttYWttc2coYnVmcCxsZWZ0LHNlcCxzLHNlcCxOVUxMKTsKLSAgICBidWZw ICs9IGsgKyAyOwotICAgIGxlZnQgLT0gKGsgKyAyKTsKLSAgICBkZWJ1ZyhGMTExLCJYWFggZG94 bG9nIGxlZnQgNCIsYnVmLGxlZnQpOwotCi0gICAgcyA9ICIiOwotICAgIGlmIChja3N0cmNocihm bixzZXBbMF0pKQkJLyogRmlsZW5hbWUgKi8KLSAgICAgIHMgPSAiXCIiOwotICAgIGNrbWFrbXNn KGJ1ZnAsbGVmdCxzLGZuLHMsc2VwKTsKLSAgICBzcHJpbnRmKHRtcGJ1ZiwiJXMiLGNrZnN0b2Eo ZnMpKTsJLyogU2l6ZSAqLwotICAgIGNrc3RybmNhdChidWYsdG1wYnVmLENLTUFYUEFUSCk7Ci0g ICAgY2tzdHJuY2F0KGJ1ZixzZXAsQ0tNQVhQQVRIKTsKLSAgICBkZWJ1ZyhGMTEwLCJkb3hsb2cg NCIsYnVmLDApOwotCi0jaWZkZWYgTk9JQ1AKLSAgICAvKiBUcmFuc2ZlciBtb2RlICovCi0gICAg Y2tzdHJuY3B5KHRtcGJ1ZiwgKGJpbmFyeSA/ICJiaW5hcnkiIDogInRleHQiKSwgVE1QQlVGU0la KTsKLSNlbHNlCi0gICAgY2tzdHJuY3B5KHRtcGJ1ZixnZm1vZGUoZm0sMCksVE1QQlVGU0laKTsK LSNlbmRpZiAvKiBOT0lDUCAqLwotICAgIGlmIChja3N0cmNocih0bXBidWYsc2VwWzBdKSkgeyAg ICAgIC8qIE1pZ2h0IGNvbnRhaW4gc3BhY2VzICovCi0gICAgICAgIGNrc3RybmNhdChidWYsIlwi IixDS01BWFBBVEgpOwotICAgICAgICBja3N0cm5jYXQoYnVmLHRtcGJ1ZixDS01BWFBBVEgpOwot ICAgICAgICBja3N0cm5jYXQoYnVmLCJcIiIsQ0tNQVhQQVRIKTsKLSAgICB9IGVsc2UKLSAgICAg IGNrc3RybmNhdChidWYsdG1wYnVmLENLTUFYUEFUSCk7Ci0gICAgY2tzdHJuY2F0KGJ1ZixzZXAs Q0tNQVhQQVRIKTsKLSAgICBkZWJ1ZyhGMTEwLCJkb3hsb2cgNSIsYnVmLDApOwotCi0gICAgY2tz dHJuY2F0KGJ1Ziwgc3RhdHVzID8gIkZBSUxFRCIgOiAiT0siLENLTUFYUEFUSCk7Ci0gICAgbGVu ID0gc3RybGVuKGJ1Zik7Ci0gICAgbGVmdCA9IENLTUFYUEFUSCsyNTYgLSBsZW47Ci0gICAgaWYg KGxlZnQgPCAyKSBmYXRhbCgiZG94bG9nIGJ1ZmZlciBvdmVybG93Iik7Ci0KLSAgICBkZWJ1ZyhG MTExLCJYWFggZG94bG9nIGxlZnQgNSIsYnVmLGxlZnQpOwotCi0gICAgZGVidWcoRjExMCwiZG94 bG9nIGJ1ZiAxIiwgYnVmLCBsZW4pOwotICAgIHMgPSBidWYgKyBsZW47Ci0gICAgaWYgKHN0YXR1 cyA9PSAwICYmIGxlZnQgPiAzMikgewotICAgICAgICBsb25nIGNwcyA9IDBMOwotI2lmZGVmIEdG VElNRVIKLQlkZWJ1ZyhGMTAxLCJET1hMT0cgZnB4ZnNlY3MiLCIiLChsb25nKShmcHhmc2VjcyAq IDEwMDApKTsKLSAgICAgICAgaWYgKGZweGZzZWNzKSBjcHMgPSAobG9uZykoKENLRkxPQVQpIGZz IC8gZnB4ZnNlY3MpOwotICAgICAgICBzcHJpbnRmKHMsIiVzXCIlMC4zZnNlYyAlbGRjcHNcIiIs c2VwLGZweGZzZWNzLGNwcyk7Ci0jZWxzZQotICAgICAgICBpZiAoeGZzZWNzKSBjcHMgPSBmcyAv IHhmc2VjczsKLSAgICAgICAgc3ByaW50ZihzLCIlc1wiJWxkc2VjICVsZGNwc1wiIixzZXAseGZz ZWNzLGNwcyk7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotICAgIH0gZWxzZSBpZiAoKGludClzdHJs ZW4obXNnKSArIDQgPCBsZWZ0KSB7Ci0gICAgICAgIHNwcmludGYocywiJXNcIiVzXCIiLHNlcCxt c2cpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTExLCJYWFggZG94bG9nIGxlZnQgNSIsYnVmLGxlZnQp OwotCi0gICAgZGVidWcoRjExMCwiZG94bG9nIDUiLGJ1ZiwwKTsKLSAgICB4ID0genNvdXRsKFpU RklMRSxidWYpOwotICAgIGRlYnVnKEYxMDEsImRveGxvZyB6c291dGwiLCIiLHgpOwotICAgIGlm ICh4IDwgMCkgdHJhbG9nID0gMDsKLX0KLSNlbmRpZiAvKiBUTE9HICovCi0KLSNpZm5kZWYgTUFD Ci0vKgotICBUaGUgcmVzdCBvZiB0aGlzIGZpbGUgaXMgZm9yIGFsbCBpbXBsZW1lbnRhdGlvbnMg YnV0IHRoZSBNYWNpbnRvc2guCi0qLwotCi0jaWZkZWYgQ0tfQ1VSU0VTCi1zdGF0aWMgaW50IHJl cGFpbnQgPSAwOyAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXIgZGlzcGxheSBuZWVkcyByZXBh aW50aW5nICovCi0jZW5kaWYgLyogQ0tfQ1VSU0VTICovCi0KLSNpZm5kZWYgTk9YRkVSCi0vKiAg QyBIIEsgSSBOIFQgIC0tICBDaGVjayBmb3IgY29uc29sZSBpbnRlcnJ1cHRzICAqLwotCi0vKgot ICBVc2VkIGR1cmluZyBmaWxlIHRyYW5zZmVyIGluIGxvY2FsIG1vZGUgb25seToKLSAgLiBJZiB1 c2VyIGhhcyBub3QgdG91Y2hlZCB0aGUga2V5Ym9hcmQsIHJldHVybnMgMCB3aXRoIG5vIHNpZGUg ZWZmZWN0cy4KLSAgLiBJZiB1c2VyIHR5cGVkIFMgb3IgQSAoZXRjLCBzZWUgYmVsb3cpIHByaW50 cyBzdGF0dXMgbWVzc2FnZSBhbmQgcmV0dXJucyAwLgotICAuIElmIHVzZXIgdHlwZWQgWCBvciBG IChldGMsIHNlZSBiZWxvdykgcmV0dXJucyAwIHdpdGggY3hzZWVuIHNldCB0byAxLgotICAuIElm IHVzZXIgdHlwZWQgWiBvciBCIChldGMsIHNlZSBiZWxvdykgcmV0dXJucyAwIHdpdGggY3pzZWVu IHNldCB0byAxLgotICAuIElmIHVzZXIgdHlwZWQgRSBvciBDIChldGMsIHNlZSBiZWxvdykgcmV0 dXJucyAtMS4KLSovCi1pbnQKLWNoa2ludCgpIHsKLSAgICBpbnQgY2gsIGNuLCBvZmQ7IGxvbmcg eno7Ci0gICAgaWYgKCF4ZnJpbnQpCi0gICAgICByZXR1cm4oMCk7Ci0gICAgaWYgKCghbG9jYWwp IHx8IChxdWlldCkpIHJldHVybigwKTsgLyogT25seSBkbyB0aGlzIGlmIGxvY2FsICYgbm90IHF1 aWV0ICovCi0jaWZkZWYgZGF0YWdlbmVyYWwKLSAgICBpZiAoY29uX3JlYWRzX210KSAgICAgICAg ICAgICAgICAgICAvKiBpZiBjb25pbnRfbXQgdGFzayBpcyBhY3RpdmUgKi8KLSAgICAgIGlmIChj b25pbnRfYXZsKSB7ICAgICAgICAgICAgICAgICAvKiBhbmQgdGhlcmUncyBhbiBpbnRlcnJ1cHQg cGVuZGluZyAqLwotICAgICAgICAgIGNuID0gMTsgICAgICAgICAgICAgICAgICAgICAgIC8qIHBy b2Nlc3MgaXQgKi8KLSAgICAgICAgICBjaCA9IGNvbmludF9jaDsKLSAgICAgICAgICBjb25pbnRf YXZsID0gMDsgICAgICAgICAgICAgICAvKiB0dXJuIG9mZiBmbGFnIHNvIGNvbmludF9tdCBjYW4g Ki8KLSAgICAgIH0gZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm9jZWVkICov Ci0gICAgICAgIHJldHVybigwKTsKLSAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBpZiBjb25pbnRfbXQgbm90IGFjdGl2ZSAqLwotICAgICAgaWYgKChjaCA9IGNvbmlu YygyKSkgPCAwKSAgICAgICAgIC8qIHRyeSB0byBnZXQgY2hhciBtYW51YWxseSAqLwotICAgICAg ICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIEkvTyBlcnJvciwgb3Igbm8gZGF0 YSAqLwotICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlmIHN1Y2Nl c3NmdWwsIHNldCBjbiBzbyB3ZSAqLwotICAgICAgICBjbiA9IDE7ICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIGtub3cgd2UgZ290IG9uZSAqLwotICAgIGRlYnVnKEYxMDEsImNoa2ludCBnb3Qg a2V5Ym9hcmQgY2hhcmFjdGVyIixjaCxjbik7Ci0jZWxzZSAvKiAhZGF0YWdlbmVyYWwgKi8KLSNp ZmRlZiBOVFNJRwotICAgIHsKLSAgICAgICAgZXh0ZXJuIGludCBUbHNJbmRleDsKLSAgICAgICAg c3RydWN0IF90aHJlYWRpbmZvICogdGhyZWFkaW5mbzsKLSAgICAgICAgdGhyZWFkaW5mbyA9IChz dHJ1Y3QgX3RocmVhZGluZm8gKikgVGxzR2V0VmFsdWUoVGxzSW5kZXgpOwotICAgICAgICBpZiAo dGhyZWFkaW5mbykgewotICAgICAgICAgICAgaWYgKCFXYWl0U2VtKHRocmVhZGluZm8tPkRpZVNl bSwwKSkKLSAgICAgICAgICAgICAgcmV0dXJuIC0xOyAgICAgICAgICAgICAgICAvKiBDYW5jZWwg SW1tZWRpYXRlbHkgKi8KLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvKiBOVFNJRyAqLwotICAg IGNuID0gY29uY2hrKCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIEFueSBpbnB1dCB3YWl0aW5n PyAqLwotICAgIGRlYnVnKEYxMDEsImNvbmNoayIsIiIsY24pOwotICAgIGlmIChjbiA8IDEpIHJl dHVybigwKTsKLSAgICBjaCA9IGNvbmluYyg1KSA7Ci0gICAgZGVidWcoRjEwMSwiY29uaW5jIiwi IixjaCk7Ci0gICAgaWYgKGNoIDwgMCkgcmV0dXJuKDApOwotI2VuZGlmIC8qIGRhdGFnZW5lcmFs ICovCi0KLSAgICBjaCAmPSAwMTc3OwotICAgIHN3aXRjaCAoY2gpIHsKLSAgICAgIGNhc2UgJ0En OiBjYXNlICdhJzogY2FzZSAwMDAxOiAgICAvKiBTdGF0dXMgcmVwb3J0ICovCi0gICAgICBjYXNl ICdTJzogY2FzZSAncyc6Ci0gICAgICAgIGlmIChmZGlzcGxhICE9IFhZRkRfUiAmJiBmZGlzcGxh ICE9IFhZRkRfUyAmJiBmZGlzcGxhICE9IFhZRkRfTikKLSAgICAgICAgICByZXR1cm4oMCk7ICAg ICAgICAgICAgICAgICAgICAvKiBPbmx5IGZvciBzZXJpYWwsIHNpbXBsZSBvciBub25lICovCi0g ICAgICAgIG9mZCA9IGZkaXNwbGE7ICAgICAgICAgICAgICAgICAgLyogW01GXSBTYXZlIGZpbGUg ZGlzcGxheSB0eXBlICovCi0gICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfTikKLSAgICAgICAg ICBmZGlzcGxhID0gWFlGRF9SOyAgICAgICAgICAgICAvKiBbTUZdIFByZXRlbmQgc2VyaWFsIGlm IG5vIGRpc3BsYXkgKi8KLSAgICAgICAgeHhzY3JlZW4oU0NSX1ROLDAsMGwsIlN0YXR1cyByZXBv cnQ6Iik7Ci0gICAgICAgIHh4c2NyZWVuKFNDUl9UTiwwLDBsLCIgZmlsZSB0eXBlOiAiKTsKLSAg ICAgICAgaWYgKGJpbmFyeSkgewotICAgICAgICAgICAgc3dpdGNoKGJpbmFyeSkgewotICAgICAg ICAgICAgICBjYXNlIFhZRlRfTDogeHhzY3JlZW4oU0NSX1RaLDAsMGwsImxhYmVsZWQiKTsgYnJl YWs7Ci0gICAgICAgICAgICAgIGNhc2UgWFlGVF9JOiB4eHNjcmVlbihTQ1JfVFosMCwwbCwiaW1h Z2UiKTsgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgWFlGVF9VOiB4eHNjcmVlbihTQ1JfVFos MCwwbCwiYmluYXJ5IHVuZGVmaW5lZCIpOyBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoK LSAgICAgICAgICAgICAgY2FzZSBYWUZUX0I6IHh4c2NyZWVuKFNDUl9UWiwwLDBsLCJiaW5hcnki KTsgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0jaWZkZWYgTk9DU0VU UwotICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1RaLDAsMGwsInRleHQiKTsKLSNlbHNlCi0gICAg ICAgICAgICB4eHNjcmVlbihTQ1JfVFUsMCwwbCwidGV4dCwgIik7Ci0gICAgICAgICAgICBpZiAo dGNoYXJzZXQgPT0gVENfVFJBTlNQIHx8IHhmcnhsYSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAg eHhzY3JlZW4oU0NSX1RaLDAsMGwsInRyYW5zcGFyZW50Iik7Ci0gICAgICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgICAgIGlmICh3aGF0ICYgV19TRU5EKSB7Ci0gICAgICAgICAgICAgICAg ICAgIHh4c2NyZWVuKFNDUl9UWiwwLDBsLHRjc2luZm9bdGNoYXJzZXRdLmtleXdvcmQpOwotICAg ICAgICAgICAgICAgICAgICB4eHNjcmVlbihTQ1JfVFUsMCwwbCwiID0+ICIpOwotICAgICAgICAg ICAgICAgICAgICB4eHNjcmVlbihTQ1JfVFosMCwwbCxmY3NpbmZvW2ZjaGFyc2V0XS5rZXl3b3Jk KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB4eHNjcmVl bihTQ1JfVFosMCwwbCxmY3NpbmZvW2ZjaGFyc2V0XS5rZXl3b3JkKTsKLSAgICAgICAgICAgICAg ICAgICAgeHhzY3JlZW4oU0NSX1RVLDAsMGwsIiA9PiAiKTsKLSAgICAgICAgICAgICAgICAgICAg eHhzY3JlZW4oU0NSX1RaLDAsMGwsdGNzaW5mb1t0Y2hhcnNldF0ua2V5d29yZCk7Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgfQotI2VuZGlmIC8qIE5PQ1NFVFMgKi8KLSAgICAgICAg fQotICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCxmaWxjbnQsIiBmaWxlIG51bWJlciIpOwotICAg ICAgICBpZiAoZnNpemUpIHh4c2NyZWVuKFNDUl9RRSwwLGZzaXplLCIgc2l6ZSIpOwotICAgICAg ICB4eHNjcmVlbihTQ1JfUUUsMCxmZmMsIiBjaGFyYWN0ZXJzIHNvIGZhciIpOwotICAgICAgICBp ZiAoZnNpemUgPiAwTCkgewotI2lmZGVmIENLX1JFU0VORAotICAgICAgICAgICAgenogPSB3aGF0 ICYgV19TRU5EID8gc2VuZHN0YXJ0IDogd2hhdCAmIFdfUkVDViA/IHJzX2xlbiA6IDA7Ci0gICAg ICAgICAgICB6eiA9ICggKGZmYyArIHp6KSAqIDEwMEwgKSAvIGZzaXplOwotI2Vsc2UKLSAgICAg ICAgICAgIHp6ID0gKCBmZmMgKiAxMDBMICkgLyBmc2l6ZTsKLSNlbmRpZiAvKiBDS19SRVNFTkQg Ki8KLSAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9RRSwwLHp6LCAgICAgICIgcGVyY2VudCBkb25l Iik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGJjdHUgPT0gNCkgeyAgICAgICAgICAgICAgICAv KiBCbG9jayBjaGVjayAqLwotICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1RVLDAsMEwsIiBibG9j ayBjaGVjazogIik7Ci0gICAgICAgICAgICB4eHNjcmVlbihTQ1JfVFosMCwwTCwiYmxhbmstZnJl ZS0yIik7Ci0gICAgICAgIH0gZWxzZSB4eHNjcmVlbihTQ1JfUUUsMCwobG9uZyliY3R1LCAgIiBi bG9jayBjaGVjayIpOwotICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCwobG9uZylycHRmbGcsIiBj b21wcmVzc2lvbiIpOwotICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCwobG9uZyllYnFmbGcsIiA4 dGgtYml0IHByZWZpeGluZyIpOwotICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCwobG9uZylsc2Nh cHUsIiBsb2NraW5nIHNoaWZ0cyIpOwotICAgICAgICBpZiAoIW5ldHdvcmspCi0gICAgICAgICAg eHhzY3JlZW4oU0NSX1FFLDAsIHNwZWVkLCAiIHNwZWVkIik7Ci0gICAgICAgIGlmICh3aGF0ICYg V19TRU5EKQotCi0gICAgICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsc3BzaXosICIgcGFja2V0IGxl bmd0aCIpOwotICAgICAgICBlbHNlIGlmICh3aGF0ICYgV19SRUNWIHx8IHdoYXQgJiBXX1JFTU8p Ci0gICAgICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsdXJwc2l6LCIgcGFja2V0IGxlbmd0aCIpOwot ICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCx3c2xvdHMsICAiIHdpbmRvdyBzbG90cyIpOwotICAg ICAgICBmZGlzcGxhID0gb2ZkOyAvKiBbTUZdIFJlc3RvcmUgZmlsZSBkaXNwbGF5IHR5cGUgKi8K LSAgICAgICAgcmV0dXJuKDApOwotCi0gICAgICBjYXNlICdCJzogY2FzZSAnYic6IGNhc2UgMDAw MjogICAgLyogQ2FuY2VsIGJhdGNoICovCi0gICAgICBjYXNlICdaJzogY2FzZSAneic6IGNhc2Ug MDAzMjoKLSAgICAgICAgY3pzZWVuID0gMTsKLSAgICAgICAgaW50ZXJydXB0ZWQgPSAxOwotICAg ICAgICB4eHNjcmVlbihTQ1JfU1QsU1RfTVNHLDBsLAotICAgICAgICAgICAgICAgICAoKCh3aGF0 ICYgV19SRUNWKSAmJiAod3Nsb3RzID4gMSkpID8KLSAgICAgICAgICAgICAgICAgICJDYW5jZWxp bmcgYmF0Y2gsIHdhaXQuLi4gIiA6Ci0gICAgICAgICAgICAgICAgICAiQ2FuY2VsaW5nIGJhdGNo Li4uICIpCi0gICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIHJldHVybigwKTsKLQotICAgICAg Y2FzZSAnRic6IGNhc2UgJ2YnOiBjYXNlIDAwMDY6ICAgIC8qIENhbmNlbCBmaWxlICovCi0gICAg ICBjYXNlICdYJzogY2FzZSAneCc6IGNhc2UgMDAzMDoKLSAgICAgICAgY3hzZWVuID0gMTsKLSAg ICAgICAgaW50ZXJydXB0ZWQgPSAxOwotICAgICAgICB4eHNjcmVlbihTQ1JfU1QsU1RfTVNHLDBs LAotICAgICAgICAgICAgICAgICAoKCh3aGF0ICYgV19SRUNWKSAmJiAod3Nsb3RzID4gMSkpID8K LSAgICAgICAgICAgICAgICAgICJDYW5jZWxpbmcgZmlsZSwgd2FpdC4uLiAiIDoKLSAgICAgICAg ICAgICAgICAgICJDYW5jZWxpbmcgZmlsZS4uLiAiKQotICAgICAgICAgICAgICAgICApOwotICAg ICAgICByZXR1cm4oMCk7Ci0KLSAgICAgIGNhc2UgJ1InOiBjYXNlICdyJzogY2FzZSAwMDIyOiAg ICAvKiBSZXNlbmQgcGFja2V0ICovCi0gICAgICBjYXNlIDAwMTU6IGNhc2UgMDAxMjoKLSNpZmRl ZiBTVFJFQU1JTkcKLSAgICAgICAgaWYgKHN0cmVhbWluZykKLSAgICAgICAgICByZXR1cm4oMCk7 Ci0jZW5kaWYgLyogU1RSRUFNSU5HICovCi0gICAgICAgIHh4c2NyZWVuKFNDUl9TVCxTVF9NU0cs MGwsIlJlc2VuZGluZyBwYWNrZXQuLi4gIik7Ci0gICAgICAgIG51bWVycnMrKzsKLSAgICAgICAg cmVzZW5kKHdpbmxvKTsKLSAgICAgICAgcmV0dXJuKDApOwotCi0jaWZkZWYgZGF0YWdlbmVyYWwK LSAgICAgIGNhc2UgJ1wwMyc6ICAgICAgICAgICAgICAgICAgICAgICAvKiBXZSdyZSBub3QgdHJh cHBpbmcgXkMncyB3aXRoICovCi0gICAgICAgIHRyYXAoMCk7ICAgICAgICAgICAgICAgICAgICAg ICAgLyogc2lnbmFscywgc28gd2UgY2hlY2sgaGVyZSAgICAqLwotI2VuZGlmIC8qIGRhdGFnZW5l cmFsICovCi0KLSAgICAgIGNhc2UgJ0MnOiBjYXNlICdjJzogICAgICAgICAgICAgICAvKiBDdHJs LUMgKi8KLSNpZm5kZWYgZGF0YWdlbmVyYWwKLSAgICAgIGNhc2UgJ1wwMyc6Ci0jZW5kaWYgLyog ZGF0YWdlbmVyYWwgKi8KLQotICAgICAgY2FzZSAnRSc6IGNhc2UgJ2UnOiAgICAgICAgICAgICAg IC8qIFNlbmQgZXJyb3IgcGFja2V0ICovCi0gICAgICBjYXNlIDAwMDU6Ci0gICAgICAgIGludGVy cnVwdGVkID0gMTsKLSAgICAgICAgcmV0dXJuKC0xKTsKLQotI2lmZGVmIENLX0NVUlNFUwotICAg ICAgY2FzZSAwMDE0OiAgICAgICAgICAgICAgICAgICAgICAgIC8qIEN0cmwtTCB0byByZWZyZXNo IHNjcmVlbiAqLwotICAgICAgY2FzZSAnTCc6IGNhc2UgJ2wnOiAgICAgICAgICAgICAgIC8qIEFs c28gYWNjZXB0IEwgKHVwcGVyLCBsb3dlcikgKi8KLSAgICAgIGNhc2UgMDAyNzogICAgICAgICAg ICAgICAgICAgICAgICAvKiBDdHJsLVcgc3lub255bSBmb3IgVk1TICYgSW5ncmVzICovCi0gICAg ICAgIHJlcGFpbnQgPSAxOwotICAgICAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogQ0tfQ1VSU0VT ICovCi0KLSAgICAgIGNhc2UgJ1QnOgotICAgICAgY2FzZSAndCc6CQkJCS8qIFR1cm4gb24gZGVi dWctbG9nIHRpbWVzdGFtcHMgKi8KLSNpZmRlZiBERUJVRwotCXsKLQkgICAgZXh0ZXJuIGludCBk ZWJ0aW07Ci0JICAgIGlmIChjaCA9PSAnVCcpIHsKLQkJZGVidGltID0gMTsKLQkJeHhzY3JlZW4o U0NSX1NULFNUX01TRywwbCwKLQkJCSAiRGVidWcgdGltZXN0YW1wcyBPbi4uLiAiKTsKLQkgICAg fSBlbHNlIHsKLQkJZGVidGltID0gMTsKLQkJeHhzY3JlZW4oU0NSX1NULFNUX01TRywwbCwKLQkJ CSAiRGVidWcgdGltZXN0YW1wcyBPZmYuLi4gIik7Ci0JICAgIH0KLQl9Ci0jZW5kaWYgLyogREVC VUcgKi8KLQlyZXR1cm4oMCk7Ci0KLSAgICAgIGNhc2UgJ0QnOgotI2lmZGVmIERFQlVHCi0JaWYg KCFkZWJsb2cpIHsKLQkgICAgZGVib3BuKCJkZWJ1Zy5sb2ciLDApOwotCSAgICBpZiAoZGVibG9n KSB7Ci0JCXh4c2NyZWVuKFNDUl9TVCxTVF9NU0csMGwsImRlYnVnLmxvZyBvcGVuLi4uICIpOwot CSAgICB9IGVsc2UgewotCQl4eHNjcmVlbihTQ1JfU1QsU1RfTVNHLDBsLCJkZWJ1Zy5sb2cgb3Bl biBGQUlMRUQuLi4gIik7Ci0JICAgIH0KLQl9IGVsc2UgewotCSAgICB4eHNjcmVlbihTQ1JfU1Qs U1RfTVNHLDBsLCJEZWJ1ZyBsb2cgT24uLi4gIik7Ci0JfQotCWlmIChkZWJsb2cpCi0JICBkZWJv ayA9IDE7Ci0jZW5kaWYgLyogREVCVUcgKi8KLQlyZXR1cm4oMCk7Ci0KLSAgICAgIGNhc2UgJ2Qn OgkJCQkvKiBUdXJuIG9mZiBkZWJ1Z2dpbmcgKi8KLSNpZmRlZiBERUJVRwotCWlmIChkZWJsb2cp Ci0JICB4eHNjcmVlbihTQ1JfU1QsU1RfTVNHLDBsLCJEZWJ1ZyBsb2cgT2ZmLi4uICIpOwotCWRl Ym9rID0gMDsKLSNlbmRpZiAvKiBERUJVRyAqLwotCXJldHVybigwKTsKLQotICAgICAgZGVmYXVs dDogICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFueXRoaW5nIGVsc2UsIHByaW50IG1lc3Nh Z2UgKi8KLSAgICAgICAgaW50bXNnKDFMKTsKLSAgICAgICAgcmV0dXJuKDApOwotICAgIH0KLX0K LQotLyogIEkgTiBUIE0gUyBHICAtLSAgSXNzdWUgbWVzc2FnZSBhYm91dCB0ZXJtaW5hbCBpbnRl cnJ1cHRzICAqLwotCi1WT0lECi0jaWZkZWYgQ0tfQU5TSUMKLWludG1zZyhsb25nIG4pCi0jZWxz ZQotaW50bXNnKG4pIGxvbmcgbjsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogaW50bXNnICov IHsKLSNpZmRlZiBDS19ORUVEX1NJRwotICAgIGNoYXIgYnVmWzgwXTsKLSNlbmRpZiAvKiBDS19O RUVEX1NJRyAqLwotCi0gICAgaWYgKCFkaXNwbGEgfHwgcXVpZXQpICAgICAgICAgICAgICAgLyog Tm90IGlmIHdlJ3JlIGJlaW5nIHF1aWV0ICovCi0gICAgICByZXR1cm47Ci0gICAgaWYgKHNlcnZl ciAmJiAoIXNydmRpcyB8fCBuID4gLTFMKSkgLyogU3BlY2lhbCBmb3Igc2VydmVyICovCi0gICAg ICByZXR1cm47Ci0jaWZkZWYgQ0tfTkVFRF9TSUcKLSAgICBidWZbMF0gPSBOVUw7ICAgICAgICAg ICAgICAgICAgICAgICAvKiBLZWVwIGNvbXBpbGVycyBoYXBweSAqLwotI2VuZGlmIC8qIENLX05F RURfU0lHICovCi0jaWZuZGVmIE9YT1MKLSNpZmRlZiBTVk9SUE9TSVgKLSAgICBjb25jaGsoKTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBvdXQgcGVuZGluZyBlc2NhcGUtc2ln bmFscyAqLwotI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwotI2VuZGlmIC8qICEgT1hPUyAqLwotI2lm ZGVmIFZNUwotICAgIGNvbnJlcygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNvIEN0 cmwtQyB3aWxsIHdvcmsgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLSAgICBpZiAoKCFzZXJ2ZXIgJiYg biA9PSAxTCkgfHwgKHNlcnZlciAmJiBuIDwgMEwpKSB7Ci0KLSNpZmRlZiBDS19ORUVEX1NJRwot ICAgICAgICBpZiAoeGZyaW50KSB7Ci0JICAgIGNrbWFrbXNnKGJ1ZiwKLQkJICAgICA4MCwKLQkJ ICAgICAiVHlwZSBlc2NhcGUgY2hhcmFjdGVyICgiLAotCQkgICAgIGRiY2hyKGVzY2FwZSksCi0J CSAgICAgIikgZm9sbG93ZWQgYnk6IiwKLQkJICAgICBOVUxMCi0JCSAgICAgKTsKLSAgICAgICAg ICAgIHh4c2NyZWVuKFNDUl9UTiwwLDBsLGJ1Zik7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDS19O RUVEX1NJRyAqLwotCi0gICAgICAgIGlmICh4ZnJpbnQpIHsKLSAgICAgICAgICAgIGlmIChwcm90 b2NvbCA9PSBQUk9UT19LKSB7Ci0geHhzY3JlZW4oU0NSX1ROLDAsMGwsIlggdG8gY2FuY2VsIGZp bGUsICBDUiB0byByZXNlbmQgY3VycmVudCBwYWNrZXQiKTsKLSB4eHNjcmVlbihTQ1JfVE4sMCww bCwiWiB0byBjYW5jZWwgZ3JvdXAsIEEgZm9yIHN0YXR1cyByZXBvcnQiKTsKLSB4eHNjcmVlbihT Q1JfVE4sMCwwbCwiRSB0byBzZW5kIEVycm9yIHBhY2tldCwgQ3RybC1DIHRvIHF1aXQgaW1tZWRp YXRlbHk6ICIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB4eHNjcmVl bihTQ1JfVE4sMCwwbCwiQ3RybC1DIHRvIGNhbmNlbCBmaWxlIHRyYW5zZmVyOiAiKTsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9UTiww LDBsLCJUcmFuc2ZlciBpbnRlcnJ1cHRpb24gZGlzYWJsZWQuICIpOwotICAgICAgICB9Ci0gICAg fQotICAgIGVsc2UgeHhzY3JlZW4oU0NSX1RVLDAsMGwsIiAiKTsKLX0KLQotI2lmbmRlZiBOT0RJ U1BMQVkKLXN0YXRpYyBpbnQgbmV3ZHB5ID0gMDsgICAgICAgICAgICAgICAgICAvKiBOZXcgZGlz cGxheSBmbGFnICovCi1zdGF0aWMgY2hhciBmYnVmWzgwXTsgICAgICAgICAgICAgICAgICAgLyog RmlsZW5hbWUgYnVmZmVyICovCi1zdGF0aWMgY2hhciBhYnVmWzgwXTsgICAgICAgICAgICAgICAg ICAgLyogQXMtbmFtZSBidWZmZXIgKi8KLXN0YXRpYyBjaGFyIGEyYnVmWzgwXTsgICAgICAgICAg ICAgICAgICAvKiBTZWNvbmQgQXMtbmFtZSBidWZmZXIgKi8KLXN0YXRpYyBDS19PRkZfVCBvbGRm ZmMgPSAwTDsKLXN0YXRpYyBDS19PRkZfVCBkb3RzID0gMEw7Ci1zdGF0aWMgaW50IGhwb3MgPSAw OwotCi1zdGF0aWMgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6 ZSBTZXJpYWwgb3IgQ1JUIGRpc3BsYXkgKi8KLWRweWluaXQoKSB7Ci0gICAgaW50IG0gPSAwLCBu ID0gMDsKLSAgICBjaGFyICogcyA9ICIiOwotCi0gICAgbmV3ZHB5ID0gMDsgICAgICAgICAgICAg ICAgICAgICAgICAgLyogIERvbid0IGRvIHRoaXMgYWdhaW4gKi8KLSAgICBvbGRmZmMgPSAoQ0tf T0ZGX1QpMDsJCS8qICBSZXNldCB0aGlzICovCi0gICAgZG90cyA9IChDS19PRkZfVCkwOwkJCS8q ICBhbmQgdGhpcy4uICovCi0gICAgb2xkY3BzID0gY3BzID0gMEw7Ci0KLSAgICBjb25vbGwoIiIp OwkJCQkvKiBOZXcgbGluZSAqLwotICAgIGlmICh3aGF0ICYgV19TRU5EKSBzID0gIlNlbmRpbmc6 ICI7CS8qIEFjdGlvbiAqLwotICAgIGVsc2UgaWYgKHdoYXQgJiBXX1JFQ1YpIHMgPSAiUmVjZWl2 aW5nOiAiOwotICAgIG4gPSAoaW50KXN0cmxlbihzKSArIChpbnQpc3RybGVuKGZidWYpOwotICAg IGNvbm9sKGZidWYpOwotICAgIG0gPSAoaW50KXN0cmxlbihhYnVmKSArIDQ7Ci0gICAgaWYgKG4g KyBtID4gY21kX2NvbHMpIHsKLSAgICAgICAgY29ub2xsKCIiKTsKLSAgICAgICAgbiA9IDA7Ci0g ICAgfSBlbHNlCi0gICAgICBuICs9IG07Ci0gICAgaWYgKCphYnVmKSB7Ci0gICAgICAgIGNvbm9s KCIgPT4gIik7Ci0gICAgICAgIGNvbm9sKGFidWYpOwotICAgIH0KLSAgICBtID0gKGludClzdHJs ZW4oYTJidWYpICsgNDsKLSAgICBpZiAobiArIG0gPiBjbWRfY29scykgewotICAgICAgICBjb25v bGwoIiIpOwotICAgICAgICBuID0gMDsKLSAgICB9IGVsc2UKLSAgICAgIG4gKz0gbTsKLSAgICBp ZiAoKmEyYnVmKSB7Ci0gICAgICAgIGNvbm9sKCIgPT4gIik7Ci0gICAgICAgIGNvbm9sKGEyYnVm KTsKLSAgICB9Ci0gICAgKmZidWYgPSBOVUw7ICphYnVmID0gTlVMOyAqYTJidWYgPSBOVUw7Ci0g ICAgY29ub2xsKCIiKTsKLSAgICBpZiAoZnNpemUgPiAoQ0tfT0ZGX1QpLTEpIHsJCS8qIFNpemUg Ki8KLSAgICAgICAgc3ByaW50ZihmYnVmLCJTaXplOiAlcywgVHlwZTogIixja2ZzdG9hKGZzaXpl KSk7IC8qIFNBRkUgKDgwKSAqLwotICAgICAgICBjb25vbChmYnVmKTsgKmZidWYgPSBOVUw7Ci0g ICAgfSBlbHNlIGNvbm9sKCJTaXplOiB1bmtub3duLCBUeXBlOiAiKTsKLSAgICBpZiAoYmluYXJ5 KSB7CQkJLyogVHlwZSAqLwotICAgICAgICBzd2l0Y2goYmluYXJ5KSB7Ci0gICAgICAgICAgICAg IGNhc2UgWFlGVF9MOiBjb25vbCgibGFiZWxlZCIpOyBicmVhazsKLSAgICAgICAgICAgICAgY2Fz ZSBYWUZUX0k6IGNvbm9sKCJpbWFnZSIpOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBYWUZU X1U6IGNvbm9sKCJiaW5hcnkgdW5kZWZpbmVkIik7IGJyZWFrOwotICAgICAgICAgICAgICBkZWZh dWx0OgotICAgICAgICAgICAgICBjYXNlIFhZRlRfQjogY29ub2woImJpbmFyeSIpOyBicmVhazsK LSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0jaWZkZWYgTk9DU0VUUwotICAgICAgICBjb25vbCgi dGV4dCIpOwotI2Vsc2UKLSAgICAgICAgY29ub2woInRleHQsICIpOwotICAgICAgICBpZiAodGNo YXJzZXQgPT0gVENfVFJBTlNQIHx8IHhmcnhsYSA9PSAwKSB7Ci0gICAgICAgICAgICBjb25vbCgi dHJhbnNwYXJlbnQiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICh3aGF0ICYg V19TRU5EKSB7Ci0gICAgICAgICAgICAgICAgY29ub2woZmNzaW5mb1tmY2hhcnNldF0ua2V5d29y ZCk7Ci0gICAgICAgICAgICAgICAgY29ub2woIiA9PiAiKTsKLSAgICAgICAgICAgICAgICBjb25v bCh0Y3NpbmZvW3RjaGFyc2V0XS5rZXl3b3JkKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg ICAgICAgICAgICAgY29ub2wodGNzaW5mb1t0Y2hhcnNldF0ua2V5d29yZCk7Ci0gICAgICAgICAg ICAgICAgY29ub2woIiA9PiAiKTsKLSAgICAgICAgICAgICAgICBjb25vbChmY3NpbmZvW2ZjaGFy c2V0XS5rZXl3b3JkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIE5PQ1NF VFMgKi8KLSAgICB9Ci0jaWZkZWYgU1RSRUFNSU5HCi0gICAgaWYgKHN0cmVhbWluZykKLSAgICAg IGNvbm9sKCIsIFNUUkVBTUlORyIpOwotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotICAgIGNvbm9s bCgiIik7Ci0KLSAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX1MpIHsgICAgICAgICAgICAvKiBDUlQg ZmllbGQgaGVhZGluZ3MgKi8KLS8qCi0gIERlZmluZSBDS19DUFMgdG8gc2hvdyBjdXJyZW50IHRy YW5zZmVyIHJhdGUuCi0gIExlYXZlIGl0IHVuZGVmaW5lZCB0byBzaG93IGVzdGltYXRlZCB0aW1l IHJlbWFpbmluZy4KLSAgRXN0aW1hdGVkLXRpbWUtcmVtYWluaW5nIGNvZGUgZnJvbSBBbmR5IEZ5 ZmUsIG5vdCB0ZXN0ZWQgb24KLSAgcGF0aG9sb2dpY2FsIGNhc2VzLgotKi8KLSNkZWZpbmUgQ0tf Q1BTCi0KLSNpZmRlZiBDS19DUFMKLSAgICAgICAgY29ub2xsKCIgICAgRmlsZSAgIFBlcmNlbnQg ICAgICAgUGFja2V0Iik7Ci0gICAgICAgIGNvbm9sbCgiICAgIEJ5dGVzICBEb25lICAgICBDUFMg IExlbmd0aCIpOwotI2Vsc2UKLSAgICAgICAgY29ub2xsKCIgICAgRmlsZSAgIFBlcmNlbnQgIFNl Y3MgUGFja2V0Iik7Ci0gICAgICAgIGNvbm9sbCgiICAgIEJ5dGVzICBEb25lICAgICBMZWZ0IExl bmd0aCIpOwotI2VuZGlmIC8qIENLX0NQUyAqLwotICAgICAgICBuZXdkcHkgPSAwOwotICAgIH0K LSAgICBocG9zID0gMDsKLX0KLQotLyoKLSAgc2hvd3BrdChjKQotICBjID0gY29tcGxldGlvbiBj b2RlOiAwIG1lYW5zIHRyYW5zZmVyIGluIHByb2dyZXNzLCBub256ZXJvIG1lYW5zIGl0J3MgZG9u ZS4KLSAgU2hvdyB0aGUgZmlsZSB0cmFuc2ZlciBwcm9ncmVzcyBjb3VudGVyIGFuZCBwZXJoYXBz IHZlcmJvc2UgcGFja2V0IHR5cGUuCi0qLwotVk9JRAotI2lmZGVmIENLX0FOU0lDCi1zaG93cGt0 KGNoYXIgYykKLSNlbHNlCi1zaG93cGt0KGMpIGNoYXIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAq LwotLyogc2hvd3BrdCAqLyB7Ci0KLSNpZm5kZWYgR0ZUSU1FUgotICAgIGxvbmcgZXQ7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEVsYXBzZWQgdGltZSwgZW50aXJlIGJhdGNoICAqLwot I2VuZGlmIC8qIEdGVElNRVIgKi8KLSAgICBDS19PRkZfVCBob3dmYXI7CQkJLyogSG93IGZhciBp bnRvIGZpbGUgKi8KLSAgICBsb25nIHBkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQ ZXJjZW50IGRvbmUsIHRoaXMgZmlsZSAgICAgKi8KLSAgICBsb25nIHRwOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBUcmFuc2ZlciByYXRlLCBlbnRpcmUgYmF0Y2ggKi8KLSAgICBsb25n IHBzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQYWNrZXQgc2l6ZSwgY3VycmVudCBw YWNrZXQgKi8KLSAgICBDS19PRkZfVCBteXRmYzsJCQkvKiBMb2NhbCBjb3B5IG9mIGJ5dGUgY291 bnRlciAgKi8KLQotI2lmZGVmIEdGVElNRVIKLSAgICBDS0ZMT0FUIHRub3c7Ci0jZW5kaWYgLyog R0ZUSU1FUiAqLwotCi0gICAgaWYgKG5ld2RweSkgICAgICAgICAgICAgICAgICAgICAgICAgLyog UHV0IHVwIGZpbGVuYW1lcywgZXRjLCAqLwotICAgICAgZHB5aW5pdCgpOyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIGlmIHRoZXkncmUgbm90IHRoZXJlIGFscmVhZHkuICovCi0KLSAgICBob3dm YXIgPSBmZmM7ICAgICAgICAgICAgICAgICAgICAgICAvKiBIb3cgZmFyICovCi0vKgotICBDYWxj dWxhdGUgQ1BTIHJhdGUgZXZlbiBpZiBub3QgZGlzcGxheWluZyBvbiBzY3JlZW4gZm9yIHVzZSBp biBmaWxlCi0gIHRyYW5zZmVyIHN0YXRpc3RpY3MuCi0qLwotI2lmZGVmIEdGVElNRVIKLSAgICB0 bm93ID0gZ2Z0aW1lcigpOyAgICAgICAgICAgICAgICAgICAvKiBUaW1lIHNpbmNlIHdlIHN0YXJ0 ZWQgKi8KLSAgICBwcyA9ICh3aGF0ICYgV19SRUNWKSA/IHJwa3RsIDogc3BrdGw7IC8qIFBhY2tl dCBzaXplICovCi0jaWZkZWYgQ0tfUkVTRU5ECi0gICAgaWYgKHdoYXQgJiBXX1NFTkQpCQkJLyog SW4gY2FzZSB3ZSBkaWRuJ3Qgc3RhcnQgYXQgKi8KLSAgICAgIGhvd2ZhciArPSBzZW5kc3RhcnQ7 ICAgICAgICAgICAgICAvKiAgdGhlIGJlZ2lubmluZy4uLiAqLwotICAgIGVsc2UgaWYgKHdoYXQg JiBXX1JFQ1YpCi0gICAgICBob3dmYXIgKz0gcnNfbGVuOwotI2VuZGlmIC8qIENLX1JFU0VORCAq LwotICAgIHBkID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBlcmNlbnQgZG9u ZS4gKi8KLSAgICBpZiAoYyA9PSBOVUwpIHsgICAgICAgICAgICAgICAgICAgICAvKiBTdGlsbCBn b2luZywgZmlndXJlICUgZG9uZSAqLwotICAgICAgICBpZiAoIWZzaXplKSByZXR1cm47CQkvKiBF bXB0eSBmaWxlLCBkb24ndCBib3RoZXIgKi8KLSAgICAgICAgcGQgPSAoZnNpemUgPiA5OSkgPyAo aG93ZmFyIC8gKGZzaXplIC8gKENLX09GRl9UKTEwMCkpIDogMDsKLSAgICAgICAgaWYgKHBkID4g MTAwKSBwZCA9IDEwMDsgICAgICAgICAvKiBFeHBhbnNpb24gKi8KLSAgICB9Ci0gICAgaWYgKGMg IT0gTlVMKQotICAgICAgaWYgKCFjeHNlZW4gJiYgIWRpc2NhcmQgJiYgIWN6c2VlbikKLSAgICAg ICAgcGQgPSAxMDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIGNvbXBsZXRlLCBzbyAx MDAlLiAqLwotCi0gICAgbXl0ZmMgPSAocGQgPCAxMDApID8gdGZjICsgZmZjIDogdGZjOyAgICAv KiBDUFMgKi8KLSAgICB0cCA9IChsb25nKSgodG5vdyA+IDAuMCkgPyAoQ0tGTE9BVCkgbXl0ZmMg LyB0bm93IDogMCk7Ci0gICAgaWYgKGMgJiYgKHRwID09IDApKQotICAgICAgdHAgPSBmZmM7Ci0K LSAgICBjcHMgPSB0cDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgZ2xvYmFsIHZh cmlhYmxlICovCi0gICAgaWYgKGNwcyA+IHBlYWtjcHMgJiYgICAgICAgICAgICAgICAgLyogUGVh ayB0cmFuc2ZlciByYXRlICovCi0gICAgICAgICAoKHdoYXQgJiBXX1NFTkQgJiYgc3BhY2tldHMg PiB3c2xvdHMgKyA0KSB8fAotCSAgKCEod2hhdCAmIFdfU0VORCkgJiYgc3BhY2tldHMgPiAxMCkp KSB7Ci0gICAgICAgIHBlYWtjcHMgPSBjcHM7Ci0gICAgfQotCi0jZWxzZSAgLyogTm90IEdGVElN RVIgKi8KLQotICAgIGV0ID0gZ3RpbWVyKCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIEVsYXBz ZWQgdGltZSAgKi8KLSAgICBwcyA9ICh3aGF0ICYgV19SRUNWKSA/IHJwa3RsIDogc3BrdGw7IC8q IFBhY2tldCBsZW5ndGggKi8KLSNpZmRlZiBDS19SRVNFTkQKLSAgICBpZiAod2hhdCAmIFdfU0VO RCkJCQkvKiBBbmQgaWYgd2UgZGlkbid0IHN0YXJ0IGF0ICovCi0gICAgICBob3dmYXIgKz0gc2Vu ZHN0YXJ0OyAgICAgICAgICAgICAgLyogIHRoZSBiZWdpbm5pbmcuLi4gKi8KLSAgICBlbHNlIGlm ICh3aGF0ICYgV19SRUNWKQotICAgICAgaG93ZmFyICs9IHJzX2xlbjsKLSNlbmRpZiAvKiBDS19S RVNFTkQgKi8KLSAgICBwZCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQZXJj ZW50IGRvbmUuICovCi0gICAgaWYgKGMgPT0gTlVMKSB7ICAgICAgICAgICAgICAgICAgICAgLyog U3RpbGwgZ29pbmcsIGZpZ3VyZSAlIGRvbmUgKi8KLSAgICAgICAgaWYgKGZzaXplID09IDBMKSBy ZXR1cm47ICAgICAgICAvKiBFbXB0eSBmaWxlLCBkb24ndCBib3RoZXIgKi8KLSAgICAgICAgcGQg PSAoZnNpemUgPiA5OSkgPyAoaG93ZmFyIC8gKGZzaXplIC8gKENLX09GRl9UKTEwMCkpIDogMDsK LSAgICAgICAgaWYgKHBkID4gMTAwKSBwZCA9IDEwMDsgICAgICAgICAvKiBFeHBhbnNpb24gKi8K LSAgICB9Ci0gICAgaWYgKGMgIT0gTlVMKQotICAgICAgaWYgKCFjeHNlZW4gJiYgIWRpc2NhcmQg JiYgIWN6c2VlbikKLSAgICAgICAgcGQgPSAxMDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBG aWxlIGNvbXBsZXRlLCBzbyAxMDAlLiAqLwotCi0KLSNpZm5kZWYgQ0tfQ1BTCi0vKgotICBmc2Vj cyA9IHRpbWUgKGZyb20gZ3RpbWVyKSB0aGF0IHRoaXMgZmlsZSBzdGFydGVkIChzZXQgaW4gc2Zp bGUoKSkuCi0gIFJhdGUgc28gZmFyIGlzIGZmYyAvIChldCAtIGZzZWNzKSwgIGVzdGltYXRlZCB0 aW1lIGZvciByZW1haW5pbmcgYnl0ZXMKLSAgaXMgKGZzaXplIC0gZmZjKSAvIChmZmMgLyAoZXQg LSBmc2VjcykpLgotKi8KLSAgICB0cCA9IChob3dmYXIgPiAwKSA/IChmc2l6ZSAtIGhvd2Zhcikg KiAoZXQgLSBmc2VjcykgLyBob3dmYXIgOiAwOwotI2VuZGlmIC8qIENLX0NQUyAqLwotCi0jaWZk ZWYgQ0tfQ1BTCi0gICAgbXl0ZmMgPSAocGQgPCAxMDApID8gdGZjICsgZmZjIDogdGZjOwotICAg IHRwID0gKGV0ID4gMCkgPyBteXRmYyAvIGV0IDogMDsJLyogVHJhbnNmZXIgcmF0ZSAqLwotICAg IGlmIChjICYmICh0cCA9PSAwKSkJCQkvKiBXYXRjaCBvdXQgZm9yIHN1YnNlY29uZCB0aW1lcyAq LwotICAgICAgICB0cCA9IGZmYzsKLQotICAgIGNwcyA9IHRwOwkJCQkvKiBTZXQgZ2xvYmFsIHZh cmlhYmxlICovCi0gICAgaWYgKGNwcyA+IHBlYWtjcHMgJiYgICAgICAgICAgICAgICAgLyogUGVh ayB0cmFuc2ZlciByYXRlICovCi0gICAgICAgICAoKHdoYXQgJiBXX1NFTkQgJiYgc3BhY2tldHMg PiB3c2xvdHMgKyA0KSB8fAotCSAgKCEod2hhdCAmIFdfU0VORCkgJiYgc3BhY2tldHMgPiAxMCkp KSB7Ci0gICAgICAgIHBlYWtjcHMgPSBjcHM7Ci0gICAgfQotI2VuZGlmIC8qIENLX0NQUyAqLwot Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotCi0gICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9TKSB7ICAg ICAgICAgICAgLyogQ1JUIGRpc3BsYXkgKi8KLSAgICAgICAgY2hhciBidWZmZXJbMTI4XTsKLQkv KiBUaGVzZSBzcHJpbnRmcyBzaG91bGQgYmUgc2FmZSB1bnRpbCB3ZSBoYXZlIDMyLWRpZ2l0IG51 bWJlcnMgKi8KLQotICAgICAgICBpZiAocGQgPiAtMUwpCi0gICAgICAgICAgc3ByaW50ZihidWZm ZXIsICIlYyU5cyU1bGQlJSU4bGQlOGxkICIsIENSLGNrZnN0b2EoaG93ZmFyKSxwZCx0cCxwcyk7 Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBzcHJpbnRmKGJ1ZmZlciwgIiVjJTlzICAgICAgJThs ZCU4bGQgIiwgQ1IsY2tmc3RvYShob3dmYXIpLHRwLHBzKTsKLSAgICAgICAgY29ub2woYnVmZmVy KTsKLSAgICAgICAgaHBvcyA9IDMxOwotICAgIH0gZWxzZSBpZiAoZmRpc3BsYSA9PSBYWUZEX1Ip IHsgICAgIC8qIFNFUklBTCAqLwotICAgICAgICBsb25nIGksIGs7Ci0gICAgICAgIGlmIChob3dm YXIgLSBvbGRmZmMgPCAxMDI0KSAgICAgLyogVXBkYXRlIGRpc3BsYXkgZXZlcnkgMUsgKi8KLSAg ICAgICAgICByZXR1cm47Ci0gICAgICAgIG9sZGZmYyA9IGhvd2ZhcjsgICAgICAgICAgICAgICAg LyogVGltZSBmb3IgbmV3IGRpc3BsYXkgKi8KLSAgICAgICAgayA9IChob3dmYXIgLyAxMDI0TCkg LSBkb3RzOyAgICAvKiBIb3cgbWFueSBLIHNvIGZhciAqLwotICAgICAgICBmb3IgKGkgPSAwTDsg aSA8IGs7IGkrKykgewotICAgICAgICAgICAgaWYgKGhwb3MrKyA+IChjbWRfY29scyAtIDMpKSB7 IC8qIFRpbWUgdG8gd3JhcD8gKi8KLSAgICAgICAgICAgICAgICBjb25vbGwoIiIpOwotICAgICAg ICAgICAgICAgIGhwb3MgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29ub2MoJy4n KTsgICAgICAgICAgICAgICAgIC8qIFByaW50IGEgZG90IGZvciB0aGlzIEsgKi8KLSAgICAgICAg ICAgIGRvdHMrKzsgICAgICAgICAgICAgICAgICAgICAvKiBDb3VudCBpdCAqLwotICAgICAgICB9 Ci0gICAgfQotfQotCi0KLS8qICBDIEsgUyBDIFIgRSBFIE4gIC0tICBTY3JlZW4gZGlzcGxheSBm dW5jdGlvbiAgKi8KLQotLyoKLSAgY2tzY3JlZW4oZixjLG4scykKLSAgICBmIC0gYXJndW1lbnQg ZGVzY3JpcHRvcgotICAgIGMgLSBhIGNoYXJhY3RlciBvciBzbWFsbCBpbnRlZ2VyCi0gICAgbiAt IGEgbG9uZyBpbnRlZ2VyCi0gICAgcyAtIGEgc3RyaW5nLgotCi0gIGFuZCBnbG9iYWwgZmRpc3Bs YSA9IFNFVCBGSUxFIERJU1BMQVkgdmFsdWU6Ci0KLSAgICBYWUZEX04gPSBOT05FCi0gICAgWFlG RF9SID0gU0VSSUFMOiAgICAgRG90cywgZXRjLCB3b3JrcyBvbiBhbnkgdGVybWluYWwsIGV2ZW4g aGFyZGNvcHkuCi0gICAgWFlGRF9TID0gQ1JUOiAgICAgICAgV29ya3Mgb24gYW55IENSVCwgd3Jp dGVzIG92ZXIgY3VycmVudCBsaW5lLgotICAgIFhZRkRfQyA9IEZVTExTQ1JFRU46IFJlcXVpcmVz IHRlcm1pbmFsLWRlcGVuZGVudCBzY3JlZW4gY29udHJvbC4KLSAgICBYWUZEX0IgPSBCUklFRjog ICAgICBMaWtlIFNFUklBTCBidXQgb25seSBmaWxlbmFtZSAmIGNvbXBsZXRpb24gc3RhdHVzLgot ICAgIFhZRkRfRyA9IEdVSTsgICAgICAgIFdpbmRvd3MgR1VJLCBzYW1lIGJlaGF2aW9yIGFzIEZV TExTQ1JFRU4KLSovCi1WT0lECi0jaWZkZWYgQ0tfQU5TSUMKLWNrc2NyZWVuKGludCBmLCBjaGFy IGMsQ0tfT0ZGX1QgbixjaGFyICpzKQotI2Vsc2UKLWNrc2NyZWVuKGYsYyxuLHMpIGludCBmOyBj aGFyIGM7IENLX09GRl9UIG47IGNoYXIgKnM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHNj cmVlbiAqLyB7Ci0gICAgY2hhciBidWZbODBdOwotICAgIGludCBsZW47ICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBzdHJpbmcgKi8KLSNpZmRlZiBVTklYCi0jaWZuZGVm IE5PSkMKLSAgICBpbnQgb2JnOwotX1BST1RPVFlQKCBWT0lEIGNvbmJndCwgKGludCkgKTsKLSNl bmRpZiAvKiBOT0pDICovCi0jZW5kaWYgLyogVU5JWCAqLwotICAgIGludCBmdHAgPSAwOwotCi0g ICAgZnRwID0gKHdoYXQgJiBXX0ZUUCkgPyAxIDogMDsJLyogRlRQIG9yIEtlcm1pdD8gKi8KLQot ICAgIGlmICghbG9jYWwgJiYgIWZ0cCkJCQkvKiBJbiByZW1vdGUgbW9kZSAtIGRvbid0IGRvIHRo aXMgKi8KLSAgICAgIHJldHVybjsKLQotICAgIGlmICghcykgcyA9ICIiOwotCi0gICAgaWYgKCFm eGRfaW5pdGVkKSAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBpZiBuZWNlc3Nhcnkg Ki8KLSAgICAgIGZ4ZGluaXQoZmRpc3BsYSk7Ci0KLSNpZmRlZiBVTklYCi0jaWZuZGVmIE5PSkMK LSAgICBvYmcgPSBiYWNrZ3JkOyAgICAgICAgICAgICAgICAgICAgICAvKiBQcmV2aW91cyBiYWNr Z3JvdW5kIHN0YXR1cyAqLwotICAgIGNvbmJndCgxKTsgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFNlZSBpZiBydW5uaW5nIGluIGJhY2tncm91bmQgKi8KLSAgICBpZiAoIWJhY2tncmQgJiYg b2JnKSB7ICAgICAgICAgICAgICAvKiBKdXN0IGNhbWUgaW50byBmb3JlZ3JvdW5kPyAqLwotICAg ICAgICBjb25jYigoY2hhcillc2NhcGUpOyAgICAgICAgICAgIC8qIFB1dCBjb25zb2xlIGJhY2sg aW4gQ0JSRUFLIG1vZGUgKi8KLSAgICAgICAgc2V0aW50KCk7ICAgICAgICAgICAgICAgICAgICAg ICAvKiBSZXN0b3JlIGludGVycnVwdHMgKi8KLSAgICB9Ci0jZW5kaWYgLyogTk9KQyAqLwotI2Vu ZGlmIC8qIFVOSVggKi8KLQotICAgIGlmICgoZiAhPSBTQ1JfV00pICYmIChmICE9IFNDUl9FTSkp IC8qIEFsd2F5cyB1cGRhdGUgd2FybmluZ3MgJiBlcnJvcnMgKi8KLSAgICAgIGlmICghZGlzcGxh IHx8Ci0gICAgICAgICAgKGJhY2tncmQgJiYgYmdzZXQpIHx8Ci0gICAgICAgICAgZmRpc3BsYSA9 PSBYWUZEX04gfHwKLSAgICAgICAgICAoc2VydmVyICYmICFzcnZkaXMpCi0gICAgICAgICAgKQot ICAgICAgICByZXR1cm47Ci0KLSNpZmRlZiBWTVMKLSAgICBpZiAoZiA9PSBTQ1JfRk4pICAgICAg ICAgICAgICAgICAgICAvKiBWTVMgLSBzaG9ydGVuIHRoZSBuYW1lICovCi0gICAgICBzID0genJl bG5hbWUocyx6Z3RkaXIoKSk7Ci0jZW5kaWYgLyogVk1TICovCi0KLSAgICBpZiAoZGVzdCA9PSBE RVNUX1MpICAgICAgICAgICAgICAgICAvKiBTRVQgREVTVElOQVRJT04gU0NSRUVOICovCi0gICAg ICByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIHdvdWxkIGludGVyZmVyZS4u LiAqLwotCi0jaWZkZWYgS1VJCi0gICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9HKSB7ICAgICAgICAg ICAgLyogSWYgZ3VpIGRpc3BsYXkgc2VsZWN0ZWQgKi8KLSAgICAgICAgc2NyZWVuZyhmLGMsbixz KTsgICAgICAgICAgICAgICAvKiBjYWxsIHRoZSBndWkgdmVyc2lvbiAqLwotICAgICAgICByZXR1 cm47Ci0gICAgfQotI2VuZGlmIC8qIEtVSSAqLwotI2lmZGVmIENLX0NVUlNFUwotICAgIGlmIChm ZGlzcGxhID09IFhZRkRfQykgeyAgICAgICAgICAgIC8qIElmIGZ1bGxzY3JlZW4gZGlzcGxheSBz ZWxlY3RlZCAqLwotICAgICAgICBzY3JlZW5jKGYsYyxuLHMpOyAgICAgICAgICAgICAgIC8qIGNh bGwgdGhlIGZ1bGxzY3JlZW4gdmVyc2lvbiAqLwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2Vu ZGlmIC8qIENLX0NVUlNFUyAqLwotCi0gICAgbGVuID0gKGludClzdHJsZW4ocyk7ICAgICAgICAg ICAgICAgLyogTGVuZ3RoIG9mIHN0cmluZyAqLwotCi0gICAgc3dpdGNoIChmKSB7ICAgICAgICAg ICAgICAgICAgICAgICAgLyogSGFuZGxlIG91ciBmdW5jdGlvbiBjb2RlICovCi0gICAgICBjYXNl IFNDUl9GTjogICAgICAgICAgICAgICAgICAgICAgLyogRmlsZW5hbWUgKi8KLSAgICAgICAgaWYg KGZkaXNwbGEgPT0gWFlGRF9CKSB7Ci0jaWZkZWYgTkVXRlRQCi0JICAgIGlmIChmdHApCi0JICAg ICAgcHJpbnRmKCIgJXMgJXMiLCB3aGF0ICYgV19TRU5EID8gIlBVVCIgOiAiR0VUIiwgcyk7Ci0J ICAgIGVsc2UKLSNlbmRpZiAvKiBORVdGVFAgKi8KLQkgICAgICBwcmludGYoIiAlcyAlcyIsIHdo YXQgJiBXX1NFTkQgPyAiU0VORCIgOiAiUkVDViIsIHMpOwotI2lmZGVmIFVOSVgKLSAgICAgICAg ICAgIGZmbHVzaChzdGRvdXQpOwotI2VuZGlmIC8qIFVOSVggKi8KLSAgICAgICAgICAgIHJldHVy bjsKLSAgICAgICAgfQotI2lmZGVmIE1BQwotICAgICAgICBjb25vbGwoIiIpOyBjb25vbChzKTsg Y29ub2MoU1ApOyBocG9zID0gbGVuICsgMTsKLSNlbHNlCi0gICAgICAgIGNrc3RybmNweShmYnVm LHMsODApOwotICAgICAgICBhYnVmWzBdID0gYTJidWZbMF0gPSBOVUw7Ci0gICAgICAgIG5ld2Rw eSA9IDE7ICAgICAgICAgICAgICAgICAgICAgLyogTmV3IGZpbGUgc28gcmVmcmVzaCBkaXNwbGF5 ICovCi0jZW5kaWYgLyogTUFDICovCi0gICAgICAgIHJldHVybjsKLQotICAgICAgY2FzZSBTQ1Jf QU46ICAgICAgICAgICAgICAgICAgICAgIC8qIEFzLW5hbWUgKi8KLSAgICAgICAgaWYgKGZkaXNw bGEgPT0gWFlGRF9CKSB7Ci0jaWZkZWYgQ09NTUVOVAotICAgICAgICAgICAgcHJpbnRmKCIoYXMg JXMpICIscyk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgcmV0dXJuOwotICAg ICAgICB9Ci0jaWZkZWYgTUFDCi0gICAgICAgIGlmIChocG9zICsgbGVuID4gNzUpIHsgY29ub2xs KCIiKTsgaHBvcyA9IDA7IH0KLSAgICAgICAgY29ub2woIj0+ICIpOyBjb25vbChzKTsKLSAgICAg ICAgaWYgKChocG9zICs9IChsZW4gKyAzKSkgPiA3OCkgeyBjb25vbGwoIiIpOyBocG9zID0gMDsg fQotI2Vsc2UKLSAgICAgICAgaWYgKGFidWZbMF0pIHsKLSAgICAgICAgICAgIGNrc3RybmNweShh MmJ1ZixzLDgwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNrc3RybmNweShhYnVm LHMsODApOwotICAgICAgICB9Ci0jZW5kaWYgLyogTUFDICovCi0gICAgICAgIHJldHVybjsKLQot ICAgICAgY2FzZSBTQ1JfRlM6ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUtc2l6ZSAqLwot ICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKLSAgICAgICAgICAgIHByaW50ZigiICgl cykgKCVzIGJ5dGUlcykiLAotI2lmZGVmIE5PSUNQCi0gICAgICAgICAgICAgICAgICAgKGJpbmFy eSA/ICJiaW5hcnkiIDogInRleHQiKQotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICBnZm1vZGUo YmluYXJ5LDApCi0jZW5kaWYgLyogTk9JQ1AgKi8KLSAgICAgICAgICAgICAgICAgICAsIGNrZnN0 b2EobiksIG4gPT0gMSA/ICIiIDogInMiKTsKLSNpZmRlZiBVTklYCi0gICAgICAgICAgICBmZmx1 c2goc3Rkb3V0KTsKLSNlbmRpZiAvKiBVTklYICovCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg ICAgIH0KLSNpZmRlZiBNQUMKLSAgICAgICAgc3ByaW50ZihidWYsIiwgU2l6ZTogJXMiLGNrZnN0 b2EobikpOyAgY29ub2xsKGJ1Zik7ICBocG9zID0gMDsKLSNlbmRpZiAvKiBNQUMgKi8KLSAgICAg ICAgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9YRDogICAgICAgICAgICAgICAgICAgICAgLyog WC1wYWNrZXQgZGF0YSAqLwotICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpCi0gICAgICAg ICAgcmV0dXJuOwotI2lmZGVmIE1BQwotICAgICAgICBjb25vbGwoIiIpOyBjb25vbGwocyk7IGhw b3MgPSAwOwotI2Vsc2UKLSAgICAgICAgY2tzdHJuY3B5KGZidWYscyw4MCk7Ci0gICAgICAgIGFi dWZbMF0gPSBhMmJ1ZlswXSA9IE5VTDsKLSNlbmRpZiAvKiBNQUMgKi8KLSAgICAgICAgcmV0dXJu OwotCi0gICAgICBjYXNlIFNDUl9TVDogICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBzdGF0 dXMgKi8KLSAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgY2FzZSBTVF9PSzogICAgICAg ICAgICAgICAgICAgLyogVHJhbnNmZXJyZWQgT0sgKi8KLSAgICAgICAgICAgIHNob3dwa3QoJ1on KTsgICAgICAgICAgICAgICAvKiBVcGRhdGUgbnVtYmVycyBvbmUgbGFzdCB0aW1lICovCi0gICAg ICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKLSNpZmRlZiBHRlRJTUVSCi0JCWlmIChm cHhmc2VjcykKLQkJICBwcmludGYoIjogT0sgKCUwLjNmIHNlYywgJWxkIGNwcykiLGZweGZzZWNz LAotCQkJIChsb25nKSgoQ0tGTE9BVClmZmMgLyBmcHhmc2VjcykpOwotI2Vsc2UKLQkJaWYgKHhm c2VjcykKLQkJICBwcmludGYoIjogT0sgKCVkIHNlYywgJWxkIGNwcykiLHhmc2VjcyxmZmMveGZz ZWNzKTsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0JCXByaW50ZigiXG4iKTsKLSAgICAgICAgICAg ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKGhwb3MgKz0gNSkg PiA3OCkgY29ub2xsKCIiKTsgLyogV3JhcCBzY3JlZW4gbGluZS4gKi8KLSAgICAgICAgICAgIGNv bm9sbCgiIFtPS10iKTsgaHBvcyA9IDA7ICAvKiBQcmludCBPSyBtZXNzYWdlLiAqLwotICAgICAg ICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9TKSB7ICAgIC8qIFdlIGRpZG4ndCBzaG93IFogcGFj a2V0IHdoZW4gKi8KLSAgICAgICAgICAgICAgICBjb25vYygnWicpOyAgICAgICAgICAgICAvKiBp dCBjYW1lLCBzbyBzaG93IGl0IG5vdy4gKi8KLSAgICAgICAgICAgICAgICBocG9zID0gMTsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGNhc2UgU1RfRElT QzogICAgICAgICAgICAgICAgIC8qICBEaXNjYXJkZWQgKi8KLSAgICAgICAgICAgIGlmIChmZGlz cGxhID09IFhZRkRfQikgewotICAgICAgICAgICAgICAgIHByaW50ZigiOiBESVNDQVJERURcbiIp OwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm ICgoaHBvcyArPSAxMikgPiA3OCkgY29ub2xsKCIiKTsKLSAgICAgICAgICAgIGNvbm9sbCgiIFtk aXNjYXJkZWRdIik7IGhwb3MgPSAwOwotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAg Y2FzZSBTVF9JTlQ6ICAgICAgICAgICAgICAgICAgLyogIEludGVycnVwdGVkICovCi0gICAgICAg ICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIjog SU5URVJSVVBURURcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIGlmICgoaHBvcyArPSAxNCkgPiA3OCkgY29ub2xsKCIiKTsKLSAgICAgICAg ICAgIGNvbm9sbCgiIFtpbnRlcnJ1cHRlZF0iKTsgaHBvcyA9IDA7Ci0gICAgICAgICAgICByZXR1 cm47Ci0KLQkgIGNhc2UgU1RfU0lNOgotICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9C KSB7Ci0JCWlmIChuID09IFNLUF9YTlgpCi0JCSAgcHJpbnRmKCI6IFdPVUxEIEJFIFRSQU5TRkVS UkVEIChOZXcgZmlsZSlcbiIpOwotCQllbHNlIGlmIChuID09IFNLUF9YVVApCi0JCSAgcHJpbnRm KCI6IFdPVUxEIEJFIFRSQU5TRkVSUkVEIChSZW1vdGUgZmlsZSBvbGRlcilcbiIpOwotCQllbHNl IGlmIChuID09IFNLUF9TSU0pCi0JCSAgcHJpbnRmKCI6IFdPVUxEIEJFIFRSQU5TRkVSUkVEXG4i KTsKLQkJZWxzZSBpZiAobiA+IDAgJiYgbiA8IG5za3JlYXNvbikKLQkJICBwcmludGYoIjogU0tJ UFBFRCAoJXMpXG4iLHNrcmVhc29uW25dKTsKLQkJZWxzZQotCQkgIHByaW50ZigiOiBTS0lQUEVE XG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGZk aXNwbGEgPT0gWFlGRF9TKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9T ICYmIGZidWZbMF0pIHsgLyogQ1JUIGRpc3BsYXkgKi8KLSAgICAgICAgICAgICAgICAgICAgY29u b2xsKCIiKTsgICAgICAgICAvKiBOZXcgbGluZSAqLwotICAgICAgICAgICAgICAgICAgICBpZiAo d2hhdCAmIFdfU0VORCkgY29ub2woIldvdWxkIFNlbmQ6ICIpOyAvKiBBY3Rpb24gKi8KLSAgICAg ICAgICAgICAgICAgICAgZWxzZSBpZiAod2hhdCAmIFdfUkVDVikgY29ub2woIldvdWxkIFJlY2Vp dmU6ICIpOwotICAgICAgICAgICAgICAgICAgICBjb25vbChmYnVmKTsKLSAgICAgICAgICAgICAg ICAgICAgaWYgKCphYnVmKSBjb25vbCgiID0+ICIpOyBjb25vbChhYnVmKTsgLyogTmFtZXMgKi8K LSAgICAgICAgICAgICAgICAgICAgaWYgKCphMmJ1ZikgY29ub2woIiA9PiAiKTsgY29ub2woYTJi dWYpOyAvKiBOYW1lcyAqLwotICAgICAgICAgICAgICAgICAgICAqZmJ1ZiA9IE5VTDsgKmFidWYg PSBOVUw7ICphMmJ1ZiA9IE5VTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg Y29ub2xsKCIgW3NpbXVsYXRlZF0iKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg ICAgICB9Ci0gICAgICAgICAgICBpZiAoKGhwb3MgKz0gMTApID4gNzgpIGNvbm9sbCgiIik7Ci0g ICAgICAgICAgICBjb25vbCgiIFtzaW11bGF0ZWRdIik7IGhwb3MgPSAwOwotICAgICAgICAgICAg cmV0dXJuOwotCi0gICAgICAgICAgY2FzZSBTVF9TS0lQOiAgICAgICAgICAgICAgICAgLyogIFNr aXBwZWQgKi8KLSAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikgewotCQlpZiAobiA9 PSBTS1BfWE5YKQotCQkgIHByaW50ZigiOiBXT1VMRCBCRSBUUkFOU0ZFUlJFRCAoTmV3IGZpbGUp XG4iKTsKLQkJZWxzZSBpZiAobiA9PSBTS1BfWFVQKQotCQkgIHByaW50ZigiOiBXT1VMRCBCRSBU UkFOU0ZFUlJFRCAoUmVtb3RlIGZpbGUgb2xkZXIpXG4iKTsKLQkJZWxzZSBpZiAobiA9PSBTS1Bf U0lNKQotCQkgIHByaW50ZigiOiBXT1VMRCBCRSBUUkFOU0ZFUlJFRFxuIik7Ci0JCWVsc2UgaWYg KG4gPiAwICYmIG4gPCBuc2tyZWFzb24pCi0JCSAgcHJpbnRmKCI6IFNLSVBQRUQgKCVzKVxuIixz a3JlYXNvbltuXSk7Ci0JCWVsc2UKLQkJICBwcmludGYoIjogU0tJUFBFRFxuIik7Ci0gICAgICAg ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfSBlbHNlIGlmIChmZGlzcGxhID09IFhZRkRf UykgewotICAgICAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfUyAmJiBmYnVmWzBdKSB7 IC8qIENSVCBkaXNwbGF5ICovCi0gICAgICAgICAgICAgICAgICAgIGNvbm9sbCgiIik7ICAgICAg ICAgLyogTmV3IGxpbmUgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHdoYXQgJiBXX1NFTkQp IGNvbm9sKCJTZW5kaW5nOiAiKTsgLyogQWN0aW9uICovCi0gICAgICAgICAgICAgICAgICAgIGVs c2UgaWYgKHdoYXQgJiBXX1JFQ1YpIGNvbm9sKCJSZWNlaXZpbmc6ICIpOwotICAgICAgICAgICAg ICAgICAgICBjb25vbChmYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCphYnVmKSBjb25v bCgiID0+ICIpOyBjb25vbChhYnVmKTsgLyogTmFtZXMgKi8KLSAgICAgICAgICAgICAgICAgICAg aWYgKCphMmJ1ZikgY29ub2woIiA9PiAiKTsgY29ub2woYTJidWYpOyAvKiBOYW1lcyAqLwotICAg ICAgICAgICAgICAgICAgICAqZmJ1ZiA9IE5VTDsgKmFidWYgPSBOVUw7ICphMmJ1ZiA9IE5VTDsK LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29ub2xsKCIgW3NraXBwZWRdIik7 Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg KChocG9zICs9IDEwKSA+IDc4KSBjb25vbGwoIiIpOwotCSAgICBjb25vbCgiICIpOyBjb25vbChm YnVmKTsKLSAgICAgICAgICAgIGNvbm9sbCgiIFtza2lwcGVkXSIpOyBocG9zID0gMDsKLSAgICAg ICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGNhc2UgU1RfRVJSOiAgICAgICAgICAgICAgICAg IC8qIEVycm9yICovCi0gICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKLSAgICAg ICAgICAgICAgICBwcmludGYoIjogRVJST1I6ICVzXG4iLHMpOwotICAgICAgICAgICAgICAgIHJl dHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbm9sbCgiIik7Ci0gICAgICAgICAg ICBjb25vbCgiRXJyb3I6ICIpOyBjb25vbGwocyk7IGhwb3MgPSAwOwotICAgICAgICAgICAgcmV0 dXJuOwotCi0gICAgICAgICAgY2FzZSBTVF9NU0c6ICAgICAgICAgICAgICAgICAgLyogTWVzc2Fn ZSAqLwotI2lmZGVmIE5FV0ZUUAotICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7 Ci0gICAgICAgICAgICAgICAgaWYgKGZ0cCAmJiBmdHBfZGViKQotCQkgIHByaW50ZigiOiBNRVNT QUdFOiAlc1xuIixzKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0j ZW5kaWYgLyogTkVXRlRQICovCi0gICAgICAgICAgICBjb25vbGwoIiIpOwotICAgICAgICAgICAg Y29ub2woIk1lc3NhZ2U6ICIpOwotICAgICAgICAgICAgY29ub2xsKHMpOwotICAgICAgICAgICAg aHBvcyA9IDA7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICBjYXNlIFNUX1JFRlU6 ICAgICAgICAgICAgICAgICAvKiBSZWZ1c2VkICovCi0gICAgICAgICAgICBpZiAoZmRpc3BsYSA9 PSBYWUZEX0IpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIjogUkVGVVNFRFxuIik7Ci0gICAg ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfSBlbHNlIGlmIChmZGlzcGxhID09IFhZ RkRfUykgewotICAgICAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfUyAmJiBmYnVmWzBd KSB7IC8qIENSVCBkaXNwbGF5ICovCi0gICAgICAgICAgICAgICAgICAgIGNvbm9sbCgiIik7ICAg ICAgICAgLyogTmV3IGxpbmUgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHdoYXQgJiBXX1NF TkQpIGNvbm9sKCJTZW5kaW5nOiAiKTsgLyogQWN0aW9uICovCi0gICAgICAgICAgICAgICAgICAg IGVsc2UgaWYgKHdoYXQgJiBXX1JFQ1YpIGNvbm9sKCJSZWNlaXZpbmc6ICIpOwotICAgICAgICAg ICAgICAgICAgICBjb25vbChmYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCphYnVmKSBj b25vbCgiID0+ICIpOyBjb25vbChhYnVmKTsgICAgICAvKiBOYW1lcyAqLwotICAgICAgICAgICAg ICAgICAgICBpZiAoKmEyYnVmKSBjb25vbCgiID0+ICIpOyBjb25vbChhMmJ1Zik7ICAgIC8qIE5h bWVzICovCi0gICAgICAgICAgICAgICAgICAgICpmYnVmID0gTlVMOyAqYWJ1ZiA9IE5VTDsgKmEy YnVmID0gTlVMOwotICAgICAgICAgICAgICAgICAgICBjb25vbGwoIiIpOwotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICBjb25vbCgiUmVmdXNlZDogIik7IGNvbm9sbChzKTsKLSAg ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb25vbGwo IiIpOwotICAgICAgICAgICAgY29ub2woIlJlZnVzZWQ6ICIpOyBjb25vbGwocyk7IGhwb3MgPSAw OwotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgY2FzZSBTVF9JTkM6ICAgICAgICAg ICAgICAgICAgLyogSW5jb21wbGV0ZSAqLwotICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlG RF9CKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCI6IElOQ09NUExFVEVcbiIpOwotICAgICAg ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoaHBvcyAr PSAxMikgPiA3OCkgY29ub2xsKCIiKTsKLSAgICAgICAgICAgIGNvbm9sbCgiIFtpbmNvbXBsZXRl XSIpOyBocG9zID0gMDsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGRlZmF1bHQ6 Ci0gICAgICAgICAgICBjb25vbGwoIioqKiBzY3JlZW4oKSBjYWxsZWQgd2l0aCBiYWQgc3RhdHVz ICoqKiIpOwotICAgICAgICAgICAgaHBvcyA9IDA7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg ICAgIH0KLQotI2lmZGVmIE1BQwotICAgICAgY2FzZSBTQ1JfUE46ICAgICAgICAgICAgICAgICAg ICAgIC8qIFBhY2tldCBudW1iZXIgKi8KLSAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7 Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQlja21ha21zZyhidWYsODAscywiOiAi LGNrbHRvYShuKSxOVUxMKTsKLSAgICAgICAgY29ub2woYnVmKTsgaHBvcyArPSAoaW50KXN0cmxl bihidWYpOyByZXR1cm47Ci0jZW5kaWYgLyogTUFDICovCi0KLSAgICAgIGNhc2UgU0NSX1BUOiAg ICAgICAgICAgICAgICAgICAgICAvKiBQYWNrZXQgdHlwZSBvciBwc2V1ZG90eXBlICovCi0gICAg ICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlm IChjID09ICdZJykgcmV0dXJuOyAgICAgICAgICAgLyogRG9uJ3QgYm90aGVyIHdpdGggQUNLcyAq LwotICAgICAgICBpZiAoYyA9PSAnRCcpIHsgICAgICAgICAgICAgICAgIC8qIEluIGRhdGEgdHJh bnNmZXIgcGhhc2UsICovCi0gICAgICAgICAgICBzaG93cGt0KE5VTCk7ICAgICAgICAgICAgICAg Lyogc2hvdyBwcm9ncmVzcy4gKi8KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotI2lm bmRlZiBBTUlHQQotICAgICAgICBpZiAoaHBvcysrID4gNzcpIHsgICAgICAgICAgICAgIC8qIElm IG5lYXIgcmlnaHQgbWFyZ2luLCAqLwotICAgICAgICAgICAgY29ub2xsKCIiKTsgICAgICAgICAg ICAgICAgIC8qIFN0YXJ0IG5ldyBsaW5lICovCi0gICAgICAgICAgICBocG9zID0gMDsgICAgICAg ICAgICAgICAgICAgLyogYW5kIHJlc2V0IGNvdW50ZXIuICovCi0gICAgICAgIH0KLSNlbmRpZiAv KiBBTUlHQSAqLwotICAgICAgICBpZiAoYyA9PSAnWicgJiYgZmRpc3BsYSA9PSBYWUZEX1MpCi0g ICAgICAgICAgcmV0dXJuOwotICAgICAgICBlbHNlCi0gICAgICAgICAgY29ub2MoYyk7ICAgICAg ICAgICAgICAgICAgICAgLyogRGlzcGxheSB0aGUgcGFja2V0IHR5cGUuICovCi0jaWZkZWYgQU1J R0EKLSAgICAgICAgaWYgKGMgPT0gJ0cnKSBjb25vbGwoIiIpOyAgICAgICAvKiBOZXcgbGluZSBh ZnRlciBHIHBhY2tldHMgKi8KLSNlbmRpZiAvKiBBTUlHQSAqLwotICAgICAgICByZXR1cm47Ci0K LSAgICAgIGNhc2UgU0NSX1RDOiAgICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2FjdGlvbiBj b21wbGV0ZSAqLwotICAgICAgICBpZiAoeGZyYmVsKSBibGVlcChCUF9OT1RFKTsKLSAgICAgICAg aWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7ICAgICAgICAvKiBCcmllZiBkaXNwbGF5Li4uICovCi0g ICAgICAgICAgICBpZiAoZmlsY250ID4gMSkgewotICAgICAgICAgICAgICAgIGxvbmcgZng7Ci0g ICAgICAgICAgICAgICAgZnggPSBmaWxjbnQgLSBmaWxyZWo7Ci0gICAgICAgICAgICAgICAgcHJp bnRmKCIgU1VNTUFSWTogJWxkIGZpbGUlcyIsIGZ4LCAoKGZ4ID09IDEpID8gIiIgOiAicyIpKTsK LSAgICAgICAgICAgICAgICBwcmludGYoIiwgJXMgYnl0ZSVzIiwgY2tmc3RvYSh0ZmMpLCAoKHRm YyA9PSAxKSA/ICIiIDogInMiKSk7Ci0jaWZkZWYgR0ZUSU1FUgotICAgICAgICAgICAgICAgIHBy aW50ZigiLCAlMC4zZiBzZWMsICVsZCBjcHMiLCBmcHRzZWNzLCB0ZmNwcyk7Ci0jZWxzZQotICAg ICAgICAgICAgICAgIHByaW50ZigiLCAlbGQgc2VjLCAlbGQgY3BzIiwgdHNlY3MsIHRmY3BzKTsK LSNlbmRpZiAvKiBHRlRJTUVSICovCi0gICAgICAgICAgICAgICAgcHJpbnRmKCIuXG4iKTsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbm9sbCgiIik7Ci0g ICAgICAgIH0KLSNpZmRlZiBVTklYCi0gICAgICAgIGZmbHVzaChzdGRvdXQpOwotI2VuZGlmIC8q IFVOSVggKi8KLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9FTTogICAgICAgICAg ICAgICAgICAgICAgLyogRXJyb3IgbWVzc2FnZSAqLwotICAgICAgICBpZiAoZmRpc3BsYSA9PSBY WUZEX0IpIHsKLSAgICAgICAgICAgIHByaW50ZigiIEVSUk9SOiAlc1xuIixzKTsKLSAgICAgICAg ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBjb25vbGwoIiIpOyBjb25vYygnPycpOyBj b25vbGwocyk7IGhwb3MgPSAwOyByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NSX1dNOiAgICAgICAg ICAgICAgICAgICAgICAvKiBXYXJuaW5nIG1lc3NhZ2UgKi8KLSAgICAgICAgaWYgKGZkaXNwbGEg PT0gWFlGRF9CKSB7Ci0gICAgICAgICAgICBwcmludGYoIiBXQVJOSU5HOiAlc1xuIixzKTsKLSAg ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBjb25vbGwoIiIpOyBjb25vbGwo cyk7IGhwb3MgPSAwOyByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NSX01TOiAgICAgICAgICAgICAg ICAgICAgICAvKiBNZXNzYWdlIGZyb20gb3RoZXIgS2VybWl0ICovCi0gICAgICAgIGlmIChmZGlz cGxhID09IFhZRkRfQikgewotICAgICAgICAgICAgcHJpbnRmKCIgTUVTU0FHRTogJXNcbiIscyk7 Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgY29ub2xsKCIiKTsgY29u b2xsKHMpOyBocG9zID0gMDsgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9UVTogICAgICAgICAg ICAgICAgICAgICAgLyogVW5kZWxpbWl0ZWQgdGV4dCAqLwotICAgICAgICBpZiAoZmRpc3BsYSA9 PSBYWUZEX0IpCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoKGhwb3MgKz0gbGVuKSA+ IDc3KSB7IGNvbm9sbCgiIik7IGhwb3MgPSBsZW47IH0KLSAgICAgICAgY29ub2wocyk7IHJldHVy bjsKLQotICAgICAgY2FzZSBTQ1JfVE46ICAgICAgICAgICAgICAgICAgICAgIC8qIFRleHQgZGVs aW1pdGVkIGF0IGJlZ2lubmluZyAqLwotICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpCi0g ICAgICAgICAgcmV0dXJuOwotICAgICAgICBjb25vbGwoIiIpOyBjb25vbChzKTsgaHBvcyA9IGxl bjsgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9UWjogICAgICAgICAgICAgICAgICAgICAgLyog VGV4dCBkZWxpbWl0ZWQgYXQgZW5kICovCi0gICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikK LSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICgoaHBvcyArPSBsZW4pID4gNzcpIHsgY29u b2xsKCIiKTsgaHBvcyA9IGxlbjsgfQotICAgICAgICBjb25vbGwocyk7IHJldHVybjsKLQotICAg ICAgY2FzZSBTQ1JfUUU6ICAgICAgICAgICAgICAgICAgICAgIC8qIFF1YW50aXR5IGVxdWFscyAq LwotICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpCi0gICAgICAgICAgcmV0dXJuOwotCWNr bWFrbXNnKGJ1Ziw4MCxzLCI6ICIsY2tsdG9hKG4pLE5VTEwpOwotICAgICAgICBjb25vbGwoYnVm KTsgaHBvcyA9IDA7IHJldHVybjsKLQotICAgICAgY2FzZSBTQ1JfQ1c6ICAgICAgICAgICAgICAg ICAgICAgIC8qIENsb3NlIGZ1bGxzY3JlZW4gd2luZG93ICovCi0gICAgICAgIHJldHVybjsgICAg ICAgICAgICAgICAgICAgICAgICAgLyogTm8gd2luZG93IHRvIGNsb3NlICovCi0KLSAgICAgIGNh c2UgU0NSX0NEOgotICAgICAgICByZXR1cm47Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGNv bm9sbCgiKioqIHNjcmVlbigpIGNhbGxlZCB3aXRoIGJhZCBvYmplY3QgKioqIik7Ci0gICAgICAg IGhwb3MgPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotI2VuZGlmIC8qIE5PRElTUExB WSAqLwotCi0vKiAgRSBSIE0gUyBHICAtLSAgTm9uZmF0YWwgZXJyb3IgbWVzc2FnZSAgKi8KLQot LyogU2hvdWxkIGJlIHVzZWQgb25seSBmb3IgcHJpbnRpbmcgdGhlIG1lc3NhZ2UgdGV4dCBmcm9t IGFuIEVycm9yIHBhY2tldC4gKi8KLQotVk9JRAotZXJtc2cobXNnKSBjaGFyICptc2c7IHsgICAg ICAgICAgICAgICAgIC8qIFByaW50IGVycm9yIG1lc3NhZ2UgKi8KLSAgICBkZWJ1ZyhGMTEwLCJl cm1zZyIsbXNnLDApOwotICAgIGlmIChsb2NhbCkKLSAgICAgIHh4c2NyZWVuKFNDUl9FTSwwLDBM LG1zZyk7Ci0gICAgdGxvZyhGMTEwLCJQcm90b2NvbCBFcnJvcjoiLG1zZywwTCk7Ci19Ci0jZW5k aWYgLyogTk9YRkVSICovCi0KLVZPSUQKLXNldHNlc2xvZyh4KSBpbnQgeDsgewotICAgIHNlc2xv ZyA9IHg7Ci0jaWZkZWYgS1VJCi0gICAgS3VpU2V0UHJvcGVydHkoS1VJX1RFUk1fQ0FQVFVSRSx4 LDApOwotI2VuZGlmIC8qIEtVSSAqLwotfQotCi1WT0lECi1kb2NsZWFuKGZjKSBpbnQgZmM7IHsg ICAgICAgICAgICAgICAgICAgLyogR2VuZXJhbCBjbGVhbnVwICovCi0jaWZkZWYgT1MyT1JVTklY Ci0gICAgZXh0ZXJuIGludCB0dHlmZDsKLSNlbmRpZiAvKiBPUzJPUlVOSVggKi8KLSAgICBleHRl cm4gaW50ICBrZWVwOwotICAgIGV4dGVybiBpbnQgZXhpdGhhbmd1cDsKLSNpZm5kZWYgTk9YRkVS Ci0gICAgZXh0ZXJuIGNoYXIgZmlsbmFtW107Ci0jZW5kaWYgLyogTk9YRkVSICovCi0jaWZuZGVm IE5PSUNQCi0gICAgaW50IHg7Ci0KLSAgICBpZiAoZmMgPiAwKQotICAgICAgZG9zdG9wKCk7ICAg ICAgICAgICAgICAgICAvKiBTdG9wIGFsbCBjb21tYW5kIGZpbGVzIGFuZCBlbmQgbWFjcm9zICov Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLQotI2lmbmRlZiBOT1hGRVIKLSAgICBpZiAocGt0bG9nKSB7 Ci0gICAgICAgICpwa3RmaWwgPSAnXDAnOwotICAgICAgICBwa3Rsb2cgPSAwOwotICAgICAgICB6 Y2xvc2UoWlBGSUxFKTsKLSAgICB9Ci0jZW5kaWYgLyogTk9YRkVSICovCi0gICAgaWYgKHNlc2xv ZykgewotICAgICAgICAqc2VzZmlsID0gJ1wwJzsKLSAgICAgICAgc2V0c2VzbG9nKDApOwotICAg ICAgICB6Y2xvc2UoWlNGSUxFKTsKLSAgICB9Ci0jaWZkZWYgVExPRwotICAgIGlmICh0cmFsb2cp IHsKLSAgICAgICAgdGxvZyhGMTAwLCJUcmFuc2FjdGlvbiBMb2cgQ2xvc2VkIiwiIiwwTCk7Ci0g ICAgICAgICp0cmFmaWwgPSAnXDAnOwotICAgICAgICB0cmFsb2cgPSAwOwotICAgICAgICB6Y2xv c2UoWlRGSUxFKTsKLSAgICB9Ci0jZW5kaWYgLyogVExPRyAqLwotCi0gICAgZGVidWcoRjEwMCwi ZG9jbGVhbiBjYWxsaW5nIGRvbG9nZW5kIiwiIiwwKTsKLSAgICBkb2xvZ2VuZCgpOyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBFbmQgY3VycmVudCBsb2cgcmVjb3JkIGlmIGFueSAqLwotI2lm ZGVmIENPTU1FTlQKLSAgICBpZiAoZGlhbG9nKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBJ ZiBjb25uZWN0aW9uIGxvZyBvcGVuICovCi0JZGlhbG9nID0gMDsKLSAgICAgICAgKmRpYWZpbCA9 ICdcMCc7ICAgICAgICAgICAgICAgICAvKiBjbG9zZSBpdC4gKi8KLSAgICAgICAgemNsb3NlKFpE SUZJTCk7Ci0gICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2lmbmRlZiBOT0lDUAotI2lm bmRlZiBOT1NQTAotICAgIHpjbG9zZShaUkZJTEUpOyAgICAgICAgICAgICAgICAgICAgIC8qIFJF QUQgYW5kIFdSSVRFIGZpbGVzLCBpZiBhbnkuICovCi0gICAgemNsb3NlKFpXRklMRSk7Ci0jaWZu ZGVmIE5PWEZFUgotICAgIHpjbG9zZShaSUZJTEUpOyAgICAgICAgICAgICAgICAgICAgIC8qIEFu ZCBvdGhlciBmaWxlcyB0b28gKi8KLSAgICB4ID0gY2hrZm4oWk9GSUxFKTsJCQkvKiBEb3dubG9h ZCBpbiBwcm9ncmVzcz8gKi8KLSAgICBkZWJ1ZyhGMTExLCJkb2NsZWFuIGNoa2ZuIFpPRklMRSIs ZmlsbmFtLHgpOwotICAgIGRlYnVnKEYxMTEsImRvY2xlYW4ga2VlcCIsIiIsa2VlcCk7Ci0gICAg emNsb3NlKFpPRklMRSk7CQkJLyogQ2xvc2Ugb3V0cHV0IGZpbGUgKi8KLSAgICBpZiAoeCA+IDAg JiYgIWtlZXApIHsJCS8qIElmIGl0IHdhcyBiZWluZyBkb3dubG9hZGVkICovCi0JaWYgKGZpbG5h bVswXSkKLQkgIHggPSB6ZGVsZXQoZmlsbmFtKTsJCS8qIERlbGV0ZSBpZiBJTkNPTVBMRVRFID0g RElTQ0FSRCAqLwotCWRlYnVnKEYxMTEsImRvY2xlYW4gZG93bmxvYWQgZmlsZW5hbWUiLGZpbG5h bSx4KTsKLSAgICB9Ci0jZW5kaWYgLyogTk9YRkVSICovCi0gICAgemNsb3NlKFpTWVNGTik7Ci0g ICAgemNsb3NlKFpNRklMRSk7Ci0KLSAgICBpZiAoZmMgPCAxKSB7ICAgICAgICAgICAgICAgICAg ICAgICAvKiBSRVNFVGluZywgbm90IEVYSVRpbmcgKi8KLSNpZmRlZiBERUJVRwotICAgICAgICBp ZiAoZGVibG9nKSB7ICAgICAgICAgICAgICAgICAgIC8qIENsb3NlIHRoZSBkZWJ1ZyBsb2cuICov Ci0gICAgICAgICAgICAqZGViZmlsID0gJ1wwJzsKLSAgICAgICAgICAgIGRlYmxvZyA9IDA7Ci0g ICAgICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIERFQlVHICov Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSNlbmRpZiAvKiBO T0lDUCAqLwotCi0jaWZuZGVmIE5PTE9DQUwKLSAgICBkZWJ1ZyhGMTAxLCJkb2NsZWFuIGV4aXRo YW5ndXAiLCIiLGV4aXRoYW5ndXApOwotICAgIGlmIChsb2NhbCAmJiBleGl0aGFuZ3VwKSB7CQkv KiBDbG9zZSBjb21tdW5pY2F0aW9uIGNvbm5lY3Rpb24gKi8KLSAgICAgICAgZXh0ZXJuIGludCBo YXNsb2NrOwotCWludCB4OwotCQotCXggPSB0dGNoaygpOwotCWRlYnVnKEYxMDEsImRvY2xlYW4g dHRjaGsoKSIsIiIseCk7Ci0jaWZkZWYgT1MyT1JVTklYCi0JZGVidWcoRjEwMSwiZG9jbGVhbiB0 dHlmZCIsIiIsdHR5ZmQpOwotI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwotICAgICAgICBpZiAoeCA+ PSAwCi0jaWZkZWYgT1MyCi0gICAgICAgICAgICB8fCB0dHlmZCAhPSAtMQotI2Vsc2UKLSNpZmRl ZiBVTklYCi0gICAgICAgICAgICB8fCBoYXNsb2NrICAgICAgICAgICAgICAgICAgLyogTWFrZSBz dXJlIHdlIGdldCBsb2NrZmlsZSEgKi8KLSAgICAgICAgICAgIHx8ICghbmV0d29yayAmJiB0dHlm ZCA+IC0xKQotI2VuZGlmIC8qIFVOSVggKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICAg ICkgewotICAgICAgICAgICAgZXh0ZXJuIGludCB3YXNjbG9zZWQsIHdoeWNsb3NlZDsKLQkgICAg ZGVidWcoRjEwMCwiZG9jbGVhbiBoYW5naW5nIHVwIGFuZCBjbG9zaW5nIiwiIiwwKTsKLSAgICAg ICAgICAgIGlmIChtc2dmbGcpIHsKLSNpZmRlZiBVTklYCi0gICAgICAgICAgICAgICAgZmZsdXNo KHN0ZG91dCk7Ci0jZW5kaWYgLyogVU5JWCAqLwotICAgICAgICAgICAgICAgIHByaW50ZigiQ2xv c2luZyAlcy4uLiIsdHRuYW1lKTsKLSAgICAgICAgICAgIH0KLSNpZm5kZWYgTk9ESUFMCi0gICAg ICAgICAgICBtZG1odXAoKTsgICAgICAgICAgICAgICAgICAgLyogSGFuZ3VwIHRoZSBtb2RlbT8/ PyAqLwotI2VuZGlmIC8qIE5PRElBTCAqLwotICAgICAgICAgICAgdHRjbG9zKDApOyAgICAgICAg ICAgICAgICAgIC8qIENsb3NlIGV4dGVybmFsIGxpbmUsIGlmIGFueSAqLwotICAgICAgICAgICAg aWYgKG1zZ2ZsZykgewotICAgICAgICAgICAgICAgIHByaW50ZigiT0tcbiIpOwotI2lmZGVmIFVO SVgKLSAgICAgICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKLSNlbmRpZiAvKiBVTklYICovCi0g ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAod2FzY2xvc2VkKSB7Ci0gICAgICAgICAgICAg ICAgd2h5Y2xvc2VkID0gV0NfQ0xPUzsKLSNpZm5kZWYgTk9TUEwKLSAgICAgICAgICAgICAgICBp ZiAobm1hYykgeyAgICAgICAgICAgICAvKiBBbnkgbWFjcm9zIGRlZmluZWQ/ICovCi0gICAgICAg ICAgICAgICAgICAgIGludCBrOyAgICAgICAgICAgICAgLyogWWVzICovCi0gICAgICAgICAgICAg ICAgICAgIGsgPSBtbG9vayhtYWN0YWIsIm9uX2Nsb3NlIixubWFjKTsgIC8qIExvb2sgdGhpcyB1 cCAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoayA+PSAwKSB7ICAgICAgICAgICAgICAgICAg ICAgICAvKiBJZiBmb3VuZCwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHdhc2Nsb3NlZCA9 IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBwcmludGYoIk9OX0NMT1NFIERPQ0xFQU5c biIpOyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgKihtYWN0YWJba10ua3dkKSA9IE5VTDsg ICAgICAgICAvKiBTZWUgY29tbWVudCBiZWxvdyAqLwotICAgICAgICAgICAgICAgICAgICAgICAg aWYgKGRvZG8oayxja2l0b2Eod2h5Y2xvc2VkKSwwKSA+IC0xKSAvKiBzZXQgaXQgdXAsICovCi0g ICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcigxKTsgICAgICAgICAgICAgICAgICAgIC8q IGFuZCBleGVjdXRlIGl0ICovCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSAgICAgICAgICAgICAgICB3YXNjbG9zZWQgPSAwOwot ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNrc3RybmNweSh0dG5hbWUsZGZ0dHks VFROQU1MRU4pOyAvKiBSZXN0b3JlIGRlZmF1bHQgdHR5ICovCi0gICAgICAgIGxvY2FsID0gZGZs b2M7ICAgICAgICAgICAgICAgICAgLyogQW5kIGRlZmF1bHQgcmVtb3RlL2xvY2FsIHN0YXR1cyAq LwotICAgIH0KLSNpZmRlZiBERUJVRwotICAgIGVsc2UgaWYgKGxvY2FsKSBkZWJ1ZyhGMTAwLCJk b2NsZWFuIGhhbmd1cC9jbG9zZSBza2lwcGVkIiwiIiwwKTsKLSNlbmRpZiAvKiBERUJVRyAqLwot I2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmZGVmIE5FV0ZUUAotICAgIGZ0cGJ5ZSgpOwkJCQkv KiBJZiBGVFAgY29ubmVjdGlvbiBvcGVuLCBjbG9zZSBpdCAqLwotI2VuZGlmIC8qIE5FV0ZUUCAq LwotCi0jaWZkZWYgSUtTRAotICAgIGlmIChpbnNlcnZlcikKLSAgICAgIHR0Y2xvcygwKTsJCQkv KiBJZiBJS1NELCBjbG9zZSBzb2NrZXQgKi8KLSNlbmRpZiAvKiBJS1NEICovCi0KLSNpZm5kZWYg Tk9TUEwKLS8qCi0gIElmIGEgbWFjcm8gbmFtZWQgIm9uX2V4aXQiIGlzIGRlZmluZWQsIGV4ZWN1 dGUgaXQuICBBbHNvIHJlbW92ZSBpdCBmcm9tIHRoZQotICBtYWNybyB0YWJsZSwgaW4gY2FzZSBp dHMgZGVmaW5pdGlvbiBpbmNsdWRlcyBhbiBFWElUIG9yIFFVSVQgY29tbWFuZCwgd2hpY2gKLSAg d291bGQgY2F1c2UgbXVjaCByZWN1cnNpb24gYW5kIHdvdWxkIHByZXZlbnQgdGhlIHByb2dyYW0g ZnJvbSBldmVyIGFjdHVhbGx5Ci0gIEVYSVRpbmcuCi0qLwotICAgIGlmIChubWFjKSB7ICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEFueSBtYWNyb3MgZGVmaW5lZD8gKi8KLSAgICAgICAgaW50 IGs7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBZZXMgKi8KLSAgICAgICAgY2hhciAqIGNt ZCA9ICJvbl9leGl0IjsgICAgICAgICAvKiBNU1ZDIDIueCBjb21waWxlciBlcnJvciAqLwotICAg ICAgICBrID0gbWxvb2sobWFjdGFiLGNtZCxubWFjKTsgICAgIC8qIExvb2sgdXAgIm9uX2V4aXQi ICovCi0gICAgICAgIGlmIChrID49IDApIHsgICAgICAgICAgICAgICAgICAgLyogSWYgZm91bmQs ICovCi0jaWZkZWYgQ09NTUVOVAotCSAgICAvKiBUaGlzIG1ha2VzIGEgbWVzcyBpZiBPTl9FWElU IGl0c2VsZiBleGVjdXRlcyBtYWNyb3MgKi8KLSAgICAgICAgICAgICoobWFjdGFiW2tdLmt3ZCkg PSBOVUw7ICAgICAvKiBwb2tlIGl0cyBuYW1lIGZyb20gdGhlIHRhYmxlLCAqLwotI2Vsc2UKLQkg ICAgLyogUmVwbGFjZSB0aGUga2V5d29yZCB3aXRoIHNvbWV0aGluZyB0aGF0IGRvZXNuJ3Qgd3Jl Y2sgdGhlICovCi0JICAgIC8qIG9yZGVyIG9mIHRoZSBrZXl3b3JkIHRhYmxlICovCi0JICAgIGNr c3RybmNweShtYWN0YWJba10ua3dkLCJvbl9leHh4Iiw4KTsKLSNlbmRpZiAvKiBDT01NRU5UICov Ci0gICAgICAgICAgICBpZiAoZG9kbyhrLCIiLDApID4gLTEpICAgICAgLyogc2V0IGl0IHVwLCAq LwotICAgICAgICAgICAgICBwYXJzZXIoMSk7ICAgICAgICAgICAgICAgIC8qIGFuZCBleGVjdXRl IGl0ICovCi0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLS8qCi0gIFB1dCBj b25zb2xlIHRlcm1pbmFsIGJhY2sgdG8gbm9ybWFsLiAgVGhpcyBpcyBkb25lIGhlcmUgYmVjYXVz ZSB0aGUKLSAgT05fRVhJVCBtYWNybyBjYWxscyB0aGUgcGFyc2VyLCB3aGljaCBtZWRkbGVzIHdp dGggY29uc29sZSB0ZXJtaW5hbCBtb2Rlcy4KLSovCi0gICAgY29ucmVzKCk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogUmVzdG9yZSBjb25zb2xlIHRlcm1pbmFsLiAqLwotCi0jaWZkZWYg Q09NTUVOVAotLyogU2hvdWxkIGJlIG5vIG5lZWQgZm9yIHRoaXMsIGFuZCBtYXliZSBpdCdzIHNj cmV3aW5nIHRoaW5ncyB1cD8gKi8KLSAgICBjb25ub2koKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBUdXJuIG9mZiBjb25zb2xlIGludGVycnVwdCB0cmFwcyAqLwotI2VuZGlmIC8qIENP TU1FTlQgKi8KLQotICAgIC8qIERlbGV0ZSB0aGUgU3RhcnR1cCBGaWxlIGlmIHdlIGFyZSBzdXBw b3NlZCB0by4gKi8KLSNpZm5kZWYgTk9JQ1AKLSAgICB7Ci0gICAgICAgIGV4dGVybiBpbnQgRGVs ZXRlU3RhcnR1cEZpbGU7Ci0gICAgICAgIGRlYnVnKEYxMTEsImRvY2xlYW4gRGVsZXRlU3RhcnR1 cEZpbGUiLGNtZGZpbCxEZWxldGVTdGFydHVwRmlsZSk7Ci0gICAgICAgIGlmIChEZWxldGVTdGFy dHVwRmlsZSkgewotICAgICAgICAgICAgaW50IHJjID0gemRlbGV0KGNtZGZpbCk7Ci0gICAgICAg ICAgICBkZWJ1ZyhGMTExLCJkb2NsZWFuIHpkZWxldCIsY21kZmlsLHJjKTsKLSAgICAgICAgfQot ICAgIH0KLSNlbmRpZiAvKiBOT0lDUCAqLwotICAgIHN5c2NsZWFudXAoKTsgICAgICAgICAgICAg ICAgICAgICAgIC8qIFN5c3RlbS1kZXBlbmRlbnQgY2xlYW51cCwgbGFzdCAqLwotfQotCi0vKiAg RCBPIEUgWCBJIFQgIC0tICBFeGl0IGZyb20gdGhlIHByb2dyYW0uICAqLwotCi0vKgotICBGaXJz dCBhcmcgaXMgZ2VuZXJhbCwgc3lzdGVtLWluZGVwZW5kZW50IHN5bWJvbDogR09PRF9FWElUIG9y IEJBRF9FWElULgotICBJZiBzZWNvbmQgYXJnIGlzIC0xLCB0YWtlIDFzdCBhcmcgbGl0ZXJhbGx5 LgotICBJZiBzZWNvbmQgYXJnIGlzIG5vdCAtMSwgd29yayBpdCBpbnRvIHRoZSBleGl0IGNvZGUu Ci0qLwotVk9JRAotZG9leGl0KGV4aXRzdGF0LGNvZGUpIGludCBleGl0c3RhdCwgY29kZTsgewot ICAgIGV4dGVybiBpbnQgeF9sb2dnZWQsIHF1aXR0aW5nOwotI2lmZGVmIE9TMgotICAgIGV4dGVy biBpbnQgZGlzcGxheV9kZW1vOwotICAgIGV4dGVybiBpbnQgU3lzSW5pdGVkOwotI2VuZGlmIC8q IE9TMiAqLwotI2lmZGVmIENLX0tFUkJFUk9TCi0jaWZkZWYgS1JCNAotICAgIGV4dGVybiBpbnQg a3JiNF9hdXRvZGVsOwotI2VuZGlmIC8qIEtSQjQgKi8KLSNpZmRlZiBLUkI1Ci0gICAgZXh0ZXJu IGludCBrcmI1X2F1dG9kZWw7Ci0jZW5kaWYgLyogS1JCNSAqLwotI2VuZGlmIC8qIENLX0tFUkJF Uk9TICovCi0KLSNpZmRlZiBWTVMKLSAgICBjaGFyIGVudnN0cls2NF07Ci0gICAgc3RhdGljICRE RVNDUklQVE9SKHN5bW5hbSwiQ0tFUk1JVF9TVEFUVVMiKTsKLSAgICBzdGF0aWMgc3RydWN0IGRz YyRkZXNjcmlwdG9yX3Mgc3ltdmFsOwotI2VuZGlmIC8qIFZNUyAqLwotICAgIGludCBpOwotCi0j aWZkZWYgREVCVUcKLSNpZmRlZiBVU0VfTFVDQUNIRQotICAgIGV4dGVybiBsb25nIGx1Y2FsbHMs IGx1aGl0cywgeHhoaXRzLCBsdWxvb3A7Ci0gICAgZXh0ZXJuIGludCBsdXNpemU7Ci0jZW5kaWYg LyogVVNFX0xVQ0FDSEUgKi8KLSNpZm5kZWYgTk9TUEwKLSAgICBleHRlcm4gaW50IGNtZHN0YXRz W107Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotICAgIHF1aXR0aW5nKys7Ci0KLSNpZmRlZiBPUzIK LSAgICBpZiAoICFTeXNJbml0ZWQgKSB7Ci0gICAgICAgIHN0YXRpYyBpbnQgaW5pdGluZyA9IDA7 Ci0gICAgICAgIGlmICggaW5pdGluZyApCi0JICBleGl0KDI1Myk7Ci0gICAgICAgIGluaXRpbmcg PSAxOwotICAgICAgICBzeXNpbml0KCk7Ci0gICAgfQotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAg aWYgKGRlYmxvZykgewotI2lmZGVmIFVTRV9MVUNBQ0hFCi0JZGVidWcoRjEwMSwibG9va3VwIGNh Y2hlIHNpemUiLCIiLGx1c2l6ZSk7Ci0JZGVidWcoRjEwMSwibG9va3VwIGNhbGxzIC4uLi4iLCIi LGx1Y2FsbHMpOwotCWRlYnVnKEYxMDEsImxvb2t1cCBjYWNoZSBoaXRzIiwiIixsdWhpdHMpOwot CWRlYnVnKEYxMDEsImxvb2t1cCBzdGFydCBoaXRzIiwiIix4eGhpdHMpOwotCWRlYnVnKEYxMDEs Imxvb2t1cCBsb29wIGl0ZXJhdGlvbnMiLCIiLGx1bG9vcCk7Ci0jZW5kaWYgLyogVVNFX0xVQ0FD SEUgKi8KLSNpZm5kZWYgTk9TUEwKLQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLQkgICAg aWYgKGNtZHN0YXRzW2ldKQotCSAgICAgIGRlYnVnKEYxMTEsIkNNU1RBVFMiLGNraXRvYShpKSxj bWRzdGF0c1tpXSk7Ci0JfQotI2VuZGlmIC8qIE5PU1BMICovCi0JZGVidWcoRjEwMSwiZG9leGl0 IGV4aXRzdGF0IiwiIixleGl0c3RhdCk7Ci0JZGVidWcoRjEwMSwiZG9leGl0IGNvZGUiLCIiLGNv ZGUpOwotCWRlYnVnKEYxMDEsImRvZXhpdCB4aXRzdGEiLCIiLHhpdHN0YSk7Ci0gICAgfQotI2Vu ZGlmIC8qIERFQlVHICovCi0KLSNpZmRlZiBDS19LRVJCRVJPUwotICAgIC8qIElmIHdlIGFyZSBh dXRvbWF0aWNhbGx5IGRlc3Ryb3lpbmcgS2VyYmVyb3MgY3JlZGVudGlhbHMgb24gRXhpdCAqLwot ICAgIC8qIGRvIGl0IG5vdy4gKi8KLSNpZmRlZiBLUkI0Ci0gICAgaWYgKGtyYjRfYXV0b2RlbCA9 PSBLUkJfREVMX0VYKSB7Ci0gICAgICAgIGV4dGVybiBzdHJ1Y3Qga3JiX29wX2RhdGEga3JiX29w OwotICAgICAgICBrcmJfb3AudmVyc2lvbiA9IDQ7Ci0gICAgICAgIGtyYl9vcC5jYWNoZSA9IE5V TEw7Ci0gICAgICAgIGNrX2tyYjRfZGVzdHJveSgma3JiX29wKTsKLSAgICB9Ci0jZW5kaWYgLyog S1JCNCAqLwotI2lmZGVmIEtSQjUKLSAgICBpZiAoa3JiNV9hdXRvZGVsID09IEtSQl9ERUxfRVgp IHsKLSAgICAgICAgZXh0ZXJuIHN0cnVjdCBrcmJfb3BfZGF0YSBrcmJfb3A7Ci0gICAgICAgIGV4 dGVybiBjaGFyICoga3JiNV9kX2NjOwotICAgICAgICBrcmJfb3AudmVyc2lvbiA9IDU7Ci0gICAg ICAgIGtyYl9vcC5jYWNoZSA9IGtyYjVfZF9jYzsKLSAgICAgICAgY2tfa3JiNV9kZXN0cm95KCZr cmJfb3ApOwotICAgIH0KLSNlbmRpZiAvKiBLUkI1ICovCi0jZW5kaWYgLyogQ0tfS0VSQkVST1Mg Ki8KLQotI2lmbmRlZiBOT0xPQ0FMCi0jaWZkZWYgT1MyCi0gICAgaWYgKFN5c0luaXRlZCkKLSAg ICB7Ci0jaWZkZWYgRENNREJVRgotICAgICAgICBleHRlcm4gc3RydWN0IGNtZHB0ciAqY21kc3Rr OwotI2Vsc2UKLSAgICAgICAgZXh0ZXJuIHN0cnVjdCBjbWRwdHIgY21kc3RrW107Ci0jZW5kaWYg LyogRENNREJVRiAqLwotICAgICAgICBleHRlcm4gaW50IHR0X3N0YXR1c1tdOwotICAgICAgICBl eHRlcm4gaW50IHZtb2RlOwotCi0gICAgICAgIC8qIElmIHRoZXJlIGlzIGEgZGVtbyBzY3JlZW4g dG8gYmUgZGlzcGxheWVkLCBkaXNwbGF5IGl0ICovCi0gICAgICAgIGlmIChkaXNwbGF5X2RlbW8p IHsKLSAgICAgICAgICAgIGRlbW9zY3JuKFZDTUQpOwotICAgICAgICAgICAgZGlzcGxheV9kZW1v ID0gMDsKLSAgICAgICAgfQotI2lmbmRlZiBLVUkKLSAgICAgICAgLyogVGhpcyBpcyBnb2luZyB0 byBiZSBoaWRlb3VzLiAgSWYgd2UgaGF2ZSBhIHN0YXR1cyBsaW5lICovCi0gICAgICAgIC8qIGlu IHRoZSBjb21tYW5kIHdpbmRvdyB0dXJuIGl0IG9mZiBiZWZvcmUgd2UgZXhpdC4gICAgICAqLwot Ci0gICAgICAgIGlmICggdHRfc3RhdHVzW1ZDTURdICYmIHZtb2RlID09IFZDTUQgKSB7Ci0gICAg ICAgICAgICBkb21hYygiX2NsZWFyX3N0YXR1c2xpbmUiLCJzZXQgY29tbWFuZCBzdGF0dXNsaW5l IG9mZiIsCi0gICAgICAgICAgICAgICAgICAgY21kc3RrW2NtZGx2bF0uY2NmbGdzKTsKLSAgICAg ICAgICAgIGRlbG1hYygiX2NsZWFyX3N0YXR1c2xpbmUiLDEpOwotICAgICAgICAgICAgUmVxdWVz dFNjcmVlbk11dGV4KC0xKTsKLSAgICAgICAgICAgIFZzY3JuSXNEaXJ0eSh2bW9kZSk7Ci0gICAg ICAgICAgICBSZWxlYXNlU2NyZWVuTXV0ZXgoKTsKLSAgICAgICAgICAgIHdoaWxlICggSXNWc2Ny bkRpcnR5KHZtb2RlKSApCi0gICAgICAgICAgICAgICAgbXNsZWVwKDIwMCk7Ci0gICAgICAgICAg ICBSZXF1ZXN0U2NyZWVuTXV0ZXgoLTEpOwotICAgICAgICAgICAgUmVsZWFzZVNjcmVlbk11dGV4 KCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgRGlhbGVyU2VuZChPUFRf S0VSTUlUX0VYSVQsZXhpdHN0YXQpOwotI2lmbmRlZiBLVUkKLSAgICAgICAgZGVidWcoRjEwMCwi ZG9leGl0IGFib3V0IHRvIG1zbGVlcCIsIiIsMCk7Ci0KLSAgICAgICAgaWYgKCBpc1dpbjk1KCkg KQotICAgICAgICAgICAgbXNsZWVwKDI1MCk7Ci0jZW5kaWYgLyogS1VJICovCi0gICAgfQotI2Vu ZGlmIC8qIE9TMiAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQotI2lmZGVmIElLU0QKLSNpZmRl ZiBDS19MT0dJTgotICAgIGlmIChpbnNlcnZlciAmJiB4X2xvZ2dlZCkgewotI2lmbmRlZiBOT1NQ TAotLyoKLSAgSWYgYSBtYWNybyBuYW1lZCAib25fbG9nb3V0IiBpcyBkZWZpbmVkLCBleGVjdXRl IGl0LiAgQWxzbyByZW1vdmUgaXQgZnJvbSB0aGUKLSAgbWFjcm8gdGFibGUsIGluIGNhc2UgaXRz IGRlZmluaXRpb24gaW5jbHVkZXMgYW4gRVhJVCBvciBRVUlUIGNvbW1hbmQsIHdoaWNoCi0gIHdv dWxkIGNhdXNlIG11Y2ggcmVjdXJzaW9uIGFuZCB3b3VsZCBwcmV2ZW50IHRoZSBwcm9ncmFtIGZy b20gZXZlciBhY3R1YWxseQotICBFWElUaW5nLgotKi8KLQlpZiAobm1hYykgewkJCS8qIEFueSBt YWNyb3MgZGVmaW5lZD8gKi8KLQkgICAgaW50IGs7CQkJLyogWWVzICovCi0JICAgIGNoYXIgKiBj bWQgPSAib25fbG9nb3V0IjsJLyogTVNWQyAyLnggY29tcGlsZXIgZXJyb3IgKi8KLQkgICAgayA9 IG1sb29rKG1hY3RhYixjbWQsbm1hYyk7CS8qIExvb2sgdXAgIm9uX2xvZ291dCIgKi8KLQkgICAg aWYgKGsgPj0gMCkgewkJLyogSWYgZm91bmQsICovCi0JCSoobWFjdGFiW2tdLmt3ZCkgPSBOVUw7 CS8qIHBva2UgaXRzIG5hbWUgZnJvbSB0aGUgdGFibGUsICovCi0JCWlmIChkb2RvKGssIiIsMCkg PiAtMSkJLyogc2V0IGl0IHVwLCAqLwotCQkgIHBhcnNlcigxKTsJCS8qIGFuZCBleGVjdXRlIGl0 ICovCi0JICAgIH0KLQl9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQl6dmxvZ291dCgpOwotICAgIH0K LSNlbmRpZiAvKiBDS19MT0dJTiAqLwotI2VuZGlmIC8qIElLU0QgKi8KLQotICAgIGRlYnVnKEYx MDAsImRvZXhpdCBhYm91dCB0byBkb2NsZWFuIiwiIiwwKTsKLSAgICBkb2NsZWFuKDEpOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBDbGVhbiB1cCBtb3N0IHRoaW5ncyAqLwotCi0jaWZkZWYg Vk1TCi0gICAgaWYgKGNvZGUgPT0gLTEpCi0gICAgICBjb2RlID0gMDsgICAgICAgICAgICAgICAg ICAgICAgICAgLyogU2luY2Ugd2Ugc2V0IHR3byBkaWZmZXJlbnQgaXRlbXMgKi8KLSAgICBzcHJp bnRmKGVudnN0ciwiJWQiLCBleGl0c3RhdCB8IGNvZGUpOyAvKiBTQUZFICovCi0gICAgc3ltdmFs LmRzYyR3X2xlbmd0aCA9IChpbnQpc3RybGVuKGVudnN0cik7Ci0gICAgc3ltdmFsLmRzYyRhX3Bv aW50ZXIgPSBlbnZzdHI7Ci0gICAgc3ltdmFsLmRzYyRiX2NsYXNzID0gRFNDJEtfQ0xBU1NfUzsK LSAgICBzeW12YWwuZHNjJGJfZHR5cGUgPSBEU0MkS19EVFlQRV9UOwotICAgIGkgPSAyOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0b3JlIGluIGdsb2JhbCB0YWJsZSAqLwotI2lm ZGVmIENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hcnRpbiBaaW5zZXIgKi8K LSAgICBMSUIkU0VUX1NZTUJPTCgmc3ltbmFtLCAmc3ltdmFsLCAmaSk7Ci0jZWxzZQotICAgIGxp YiRzZXRfc3ltYm9sKCZzeW1uYW0sICZzeW12YWwsICZpKTsKLSNlbmRpZiAvKiBDT01NRU5UICov Ci0gICAgaWYgKGV4aXRzdGF0ID09IEJBRF9FWElUKQotICAgICAgZXhpdHN0YXQgPSBTUyRfQUJP UlQgfCBTVFMkTV9JTkhJQl9NU0c7Ci0gICAgaWYgKGV4aXRzdGF0ID09IEdPT0RfRVhJVCkKLSAg ICAgIGV4aXRzdGF0ID0gU1MkX05PUk1BTCB8IFNUUyRNX0lOSElCX01TRzsKLSNlbHNlIC8qIE5v dCBWTVMgKi8KLSAgICBpZiAoY29kZSAhPSAtMSkgICAgICAgICAgICAgICAgICAgICAvKiBUYWtl IDFzdCBhcmcgbGl0ZXJhbGx5ICovCi0gICAgICBleGl0c3RhdCB8PSBjb2RlOwotI2VuZGlmIC8q IFZNUyAqLwotCi0jaWZkZWYgSUtTRAotI2lmZGVmIElLU0RCCi0gICAgZGVidWcoRjEwMSwiZG9l eGl0IGlrZGJvcGVuIiwiIixpa2Rib3Blbik7Ci0gICAgaWYgKGlrZGJvcGVuICYmIGRiZnApIHsg ICAgICAgICAgICAgLyogSWYgSUtTRCBkYXRhYmFzZSBvcGVuICovCi0gICAgICAgIGludCB4Owot ICAgICAgICB4ID0gZnJlZXNsb3QobXlkYnNsb3QpOyAgICAgICAgIC8qIEZyZWUgb3VyIHNsb3Qu Li4gKi8KLSAgICAgICAgZGVidWcoRjEwMSwiZG9leGl0IGZyZWVzbG90IiwiIix4KTsKLSAgICAg ICAgZmNsb3NlKGRiZnApOyAgICAgICAgICAgICAgICAgICAvKiBhbmQgY2xvc2UgaXQuICovCi0g ICAgfQotI2VuZGlmIC8qIElLU0RCICovCi0jZW5kaWYgLyogSUtTRCAqLwotCi0vKiBXZSBoYXZl IHB1dCB0aGlzIG9mZiB0aWxsIHRoZSB2ZXJ5IGxhc3QgbW9tZW50Li4uICovCi0KLSNpZmRlZiBE RUJVRwotICAgIGlmIChkZWJsb2cpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIENsb3NlIHRo ZSBkZWJ1ZyBsb2cuICovCi0gICAgICAgIGRlYnVnKEYxMDEsIkMtS2VybWl0IEVYSVQgc3RhdHVz IiwiIixleGl0c3RhdCk7Ci0gICAgICAgICpkZWJmaWwgPSAnXDAnOwotICAgICAgICBkZWJsb2cg PSAwOwotICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKLSAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8K LQotI2lmZGVmIE9TMgotICAgIF9leGl0KGV4aXRzdGF0KTsgICAgICAgICAgICAvKiBFeGl0IGZy b20gQy1LZXJtaXQgKG5vIG1hdHRlciB3aGF0KSAqLwotI2Vsc2UgLyogT1MyICovCi0gICAgZXhp dChleGl0c3RhdCk7ICAgICAgICAgICAgICAgICAgICAgLyogRXhpdCBmcm9tIEMtS2VybWl0ICov Ci0jZW5kaWYgLyogT1MyICovCi19Ci0KLVZPSUQKLWJnY2hrKCkgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBDaGVjayBiYWNrZ3JvdW5kIHN0YXR1cyAqLwotICAgIGlmIChiZ3Nl dCA8IDApIHsgICAgICAgICAgICAgICAgICAgIC8qIFRoZXkgZGlkbid0IHR5cGUgU0VUIEJBQ0tH Uk9VTkQgKi8KLSNpZmRlZiBWTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQg cHJvbXB0IGZsYWcgYmFzZWQgb24gKi8KLSAgICAgICAgcGZsYWcgPSAhYmF0Y2g7ICAgICAgICAg ICAgICAgICAvKiB3aGF0IHdlIGRldGVjdGVkIGF0IHN0YXJ0dXAuICovCi0jZWxzZQotICAgICAg ICBwZmxhZyA9ICFiYWNrZ3JkOwotI2VuZGlmIC8qIFZNUyAqLwotICAgIH0gZWxzZSB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSBTRVQgQkFDS0dST1VORCB2YWx1ZSAq LwotICAgICAgICBwZmxhZyA9IChiZ3NldCA9PSAwID8gMSA6IDApOwotICAgIH0KLQotI2lmbmRl ZiBOT0lDUAotICAgIC8qIE1lc3NhZ2UgZmxhZyBvbiBvbmx5IGlmIGF0IHRvcCBsZXZlbCwgcGZs YWcgaXMgb24sIGFuZCBRVUlFVCBpcyBPRkYgKi8KLSAgICBpZiAoIXhjbWRzcmMpCi0gICAgICBt c2dmbGcgPSAocGZsYWcgPT0gMCkgPyAwIDogIXF1aWV0OwotICAgIGVsc2UgbXNnZmxnID0gMDsK LSNlbHNlCi0gICAgbXNnZmxnID0gMDsKLSNlbmRpZiAvKiBOT0lDUCAqLwotfQotCi0vKiBTZXQg Y29uc29sZSBpbnRlcnJ1cHRzICovCi0KLVZPSUQKLXNldGludCgpIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBBY2NvcmRpbmcgdG8gU0VUIENPTU1BTkQgSU5URVJSVVAgKi8KLSAg ICBpbnQgeCA9IDA7Ci0gICAgaWYgKGNtZGludCkgIHggfD0gMTsKLSAgICBpZiAoeHN1c3BlbmQp IHggfD0gMjsKLSAgICBkZWJ1ZyhGMTAxLCJzZXRpbnQiLCIiLHgpOwotCi0gICAgc3dpdGNoICh4 KSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IHRoZSBkZXNpcmVkIGNvbWJpbmF0aW9u ICovCi0gICAgICBjYXNlIDA6IGNvbm5vaSgpOyBicmVhazsgICAgICAgICAgLyogTm8gaW50ZXJy dXB0cyAqLwotICAgICAgY2FzZSAxOiBjb25pbnQodHJhcCxTSUdfSUdOKTsgYnJlYWs7Ci0gICAg ICBjYXNlIDI6IGNvbmludChTSUdfSUdOLHN0cHRyYXApOyBicmVhazsKLSAgICAgIGNhc2UgMzog Y29uaW50KHRyYXAsc3RwdHJhcCk7IGJyZWFrOwotICAgIH0KLSAgICBiZ2NoaygpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBiYWNrZ3JvdW5kIHN0YXR1cyAqLwotfQotCi0j aWZkZWYgREVCVUcKLS8qICBEIEUgQiBVIEcgIC0tICBFbnRlciBhIHJlY29yZCBpbiB0aGUgZGVi dWdnaW5nIGxvZyAgKi8KLQotLyoKLSBDYWxsIHdpdGggYSBmb3JtYXQsIHR3byBzdHJpbmdzLCBh bmQgYSBudW1iZXI6Ci0gICBmICAtIEZvcm1hdCwgYSBiaXQgc3RyaW5nIGluIHJhbmdlIDAtNy4K LSAgICAgICAgSWYgYml0IHggaXMgb24sIHRoZW4gYXJndW1lbnQgbnVtYmVyIHggaXMgcHJpbnRl ZC4KLSAgIHMxIC0gU3RyaW5nLCBhcmd1bWVudCBudW1iZXIgMS4gIElmIHNlbGVjdGVkLCBwcmlu dGVkIGFzIGlzLgotICAgczIgLSBTdHJpbmcsIGFyZ3VtZW50IG51bWJlciAyLiAgSWYgc2VsZWN0 ZWQsIHByaW50ZWQgaW4gYnJhY2tldHMuCi0gICBuICAtIExvbmcgaW50LCBhcmd1bWVudCAzLiAg SWYgc2VsZWN0ZWQsIHByaW50ZWQgcHJlY2VkZWQgYnkgZXF1YWxzIHNpZ24uCi0KLSAgIGY9MCBp cyBzcGVjaWFsOiBwcmludCBzMSxzMiwgYW5kIGludGVycHJldCBuIGFzIGEgY2hhci4KLQotICAg Zj1GMDExICgzKSBpcyBhbHNvIHNwZWNpYWw7IGluIHRoaXMgY2FzZSBzMiBpcyBpbnRlcnBldGVk IGFzIGEgY291bnRlZAotICAgc3RyaW5nIHRoYXQgbWlnaHQgY29udGFpbiBOVUxzLiAgbiBpcyB0 aGUgbGVuZ3RoLiAgSWYgbiBpcyBuZWdhdGl2ZSwgdGhpcwotICAgbWVhbnMgdGhlIHN0cmluZyBo YXMgYmVlbiB0cnVuY2F0ZWQgYW5kICIuLiIgc2hvdWxkIGJlIHByaW50ZWQgYWZ0ZXIgdGhlCi0g ICBmaXJzdCBuIGJ5dGVzLiAgTlVMIGFuZCBMRiBieXRlcyBhcmUgcHJpbnRlZCBhcyAiPE5VTD4i IGFuZCAiPExGPiIuCi0KLSAgIEdsb2JhbHM6Ci0gICAgIGRlYmxvZzogbm9uemVybyBpZiBkZWJ1 ZyBsb2cgb3Blbi4KLSAgICAgZGVib2s6ICBub256ZXJvIGlmIG9rIHRvIHdyaXRlIGVudHJpZXMu Ci0qLwotLyoKLSAgV0FSTklORzogRG9uJ3QgY2hhbmdlIERFQlVGTCB3aXRob3V0IGNoYW5naW5n IHNwcmludGYoKSBmb3JtYXRzIGJlbG93LAotICBhY2NvcmRpbmdseS4KLSovCi0jZGVmaW5lIERC VUZMIDQwMDAKLS8qCi0gIFdBUk5JTkc6IFRoaXMgcm91dGluZSBpcyBub3QgdGhyZWFkLXNhZmUs IGVzcGVjaWFsbHkgd2hlbiBLZXJtaXQgaXMKLSAgZXhlY3V0aW5nIG9uIG11bHRpcGxlIENQVXMg LS0gYXMgZGlmZmVyZW50IHRocmVhZHMgd3JpdGUgdG8gdGhlIHNhbWUKLSAgc3RhdGljIGJ1ZmZl ciwgdGhlIGRlYnVnIHN0YXRlbWVudHMgYXJlIGFsbCBpbnRlcmxlYXZlZC4gIFRvIGJlIGZpeGVk Ci0gIGxhdGVyLi4uCi0qLwotc3RhdGljIGNoYXIgKmRicHRyID0gKGNoYXIgKikwOwotCi1pbnQK LSNpZmRlZiBDS19BTlNJQwotZG9kZWJ1ZyhpbnQgZiwgY2hhciAqczEsIGNoYXIgKnMyLCBDS19P RkZfVCBuKQotI2Vsc2UKLWRvZGVidWcoZixzMSxzMixuKSBpbnQgZjsgY2hhciAqczEsICpzMjsg Q0tfT0ZGX1QgbjsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogZG9kZWJ1ZyAqLyB7Ci0gICAg Y2hhciAqc3A7Ci0gICAgaW50IGxlbjEsIGxlbjI7Ci0gICAgZXh0ZXJuIGludCBkZWJ0aW07Ci0j aWZkZWYgT1MyCi0gICAgZXh0ZXJuIGludCBTeXNJbml0ZWQ7Ci0jZW5kaWYgLyogT1MyICovCi0K LSAgICBpZiAoIWRlYmxvZyB8fCAhZGVib2spCi0gICAgICByZXR1cm4oMCk7Ci0KLSNpZmRlZiBD T01NRU5UCi0gICAgLyogZXhwZW5zaXZlLi4uICovCi0gICAgaWYgKCFjaGtmbihaREZJTEUpKQkJ CS8qIERlYnVnIGxvZyBub3Qgb3BlbiwgZG9uJ3QuICovCi0gICAgICByZXR1cm4oMCk7Ci0jZW5k aWYgLyogQ09NTUVOVCAqLwotICAgIGlmICghZGJwdHIpIHsgICAgICAgICAgICAgICAgICAgICAg IC8qIEFsbG9jYXRlIG1lbW9yeSBidWZmZXIgKi8KLSAgICAgICAgZGJwdHIgPSBtYWxsb2MoREJV RkwrNCk7ICAgICAgICAvKiBUaGlzIG9ubHkgaGFwcGVucyBvbmNlICovCi0gICAgICAgIGlmICgh ZGJwdHIpIHsKLSAgICAgICAgICAgIHpjbG9zZShaREZJTEUpOwotICAgICAgICAgICAgcmV0dXJu KDApOwotICAgICAgICB9Ci0gICAgfQotLyoKLSAgVGhpcyBwcmV2ZW50cyBpbmZpbml0ZSByZWN1 cnNpb24gaW4gY2FzZSB3ZSBhY2NpZGVudGFsbHkgcHV0IGEgZGVidWcoKQotICBjYWxsIGluIHRo aXMgcm91dGluZSwgb3IgY2FsbCBhbm90aGVyIHJvdXRpbmUgdGhhdCBjb250YWlucyBkZWJ1Zygp IGNhbGxzLgotICBGcm9tIHRoaXMgcG9pbnQgb24sIGFsbCByZXR1cm5zIGZyb20gdGhpcyByZXR1 cm4gbXVzdCBiZSB2aWEgZ290byB4ZGVidWcsCi0gIHdoaWNoIHNldHMgZGVibG9nIGJhY2sgdG8g MS4KLSovCi0jaWZkZWYgT1MyCi0gICAgaWYgKFN5c0luaXRlZCkgewotCWlmIChSZXF1ZXN0RGVi dWdNdXRleCgzMDAwMCkpCi0JICAgIGdvdG8geGRlYnVnOwotICAgIH0KLSNlbHNlIC8qIE9TMiAq LwotICAgIGRlYmxvZyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByZXZlbnQgaW5m aW5pdGUgcmVjdXJzaW9uICovCi0jZW5kaWYgLyogT1MyICovCi0KLSAgICBpZiAoZGVidGltKSB7 ICAgICAgICAgICAgICAgICAgICAgICAvKiBUaW1lc3RhbXAgKi8KLSAgICAgICAgY2hhciAqdGIs IHRzYnVmWzQ4XTsKLSAgICAgICAgenRpbWUoJnRiKTsKLSAgICAgICAgY2tzdHJuY3B5KHRzYnVm LHRiLDMyKTsKLSAgICAgICAgaWYgKHp0bXNlYyA+IC0xTCkgewotCSAgICBzcHJpbnRmKHRzYnVm KzE5LCIuJTAzbGQgIix6dG1zZWMpOyAvKiBTQUZFICovCi0JfSBlbHNlIHsKLQkgICAgdHNidWZb MTldID0gJzonOwotCSAgICB0c2J1ZlsyMF0gPSBTUDsKLQkgICAgdHNidWZbMjFdID0gTlVMOwot CX0KLSAgICAgICAgenNvdXQoWkRGSUxFLHRzYnVmKzExKTsKLSAgICB9Ci0gICAgaWYgKCFzMSkg czE9IihOVUxMKSI7Ci0gICAgaWYgKCFzMikgczI9IihOVUxMKSI7Ci0KLSAgICBsZW4xID0gc3Ry bGVuKHMxKTsKLSAgICBsZW4yID0gc3RybGVuKHMyKTsKLQotI2lmZGVmIENPTU1FTlQKLS8qCi0g IFRoaXMgc2hvdWxkIHdvcmssIGJ1dCBpdCBkb2Vzbid0LgotICBTbyBpbnN0ZWFkIHdlJ2xsIGNv cGUgd2l0aCBvdmVyZmxvdyB2aWEgc3ByaW50ZiBmb3JtYXRzLgotICBOLkIuOiBVTkZPUlRVTkFU RUxZLCB0aGlzIG1lYW5zIHdlIGhhdmUgdG8gcHV0IGNvbnN0YW50cyBpbiB0aGUKLSAgc3ByaW50 ZiBmb3JtYXRzLgotKi8KLSAgICBpZiAoZiAhPSBGMDExICYmICghZiB8fCAoZiAmIDYpKSkgeyAv KiBTdHJpbmcgYXJndW1lbnQocykgaW5jbHVkZWQ/ICovCi0gICAgICAgIHggPSAoaW50KSBzdHJs ZW4oczEpICsgKGludCkgc3RybGVuKHMyKSArIDE4OwotICAgICAgICBpZiAoeCA+IGRidWZsKSB7 ICAgICAgICAgICAgICAgIC8qIExvbmdlciB0aGFuIGJ1ZmZlcj8gKi8KLSAgICAgICAgICAgIGlm IChkYnB0cikgICAgICAgICAgICAgICAgICAvKiBZZXMsIGZyZWUgcHJldmlvdXMgYnVmZmVyICov Ci0gICAgICAgICAgICAgIGZyZWUoZGJwdHIpOwotICAgICAgICAgICAgZGJwdHIgPSAoY2hhciAq KSBtYWxsb2MoeCArIDIpOyAvKiBBbGxvY2F0ZSBhIG5ldyBvbmUgKi8KLSAgICAgICAgICAgIGlm ICghZGJwdHIpIHsKLSAgICAgICAgICAgICAgICB6c291dGwoWkRGSUxFLCJERUJVRzogTWVtb3J5 IGFsbG9jYXRpb24gZmFpbHVyZSIpOwotICAgICAgICAgICAgICAgIGRlYmxvZyA9IDA7Ci0gICAg ICAgICAgICAgICAgemNsb3NlKFpERklMRSk7Ci0gICAgICAgICAgICAgICAgZ290byB4ZGVidWc7 Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRidWZsID0geDsKLSAgICAg ICAgICAgICAgICBzcHJpbnRmKGRicHRyLCJERUJVRzogQnVmZmVyIGV4cGFuZGVkIHRvICVkXG4i LCB4ICsgMTgpOwotICAgICAgICAgICAgICAgIHpzb3V0bChaREZJTEUsZGJwdHIpOwotICAgICAg ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotI2lmZGVm IENPTU1FTlQKLS8qIFRoZSBhZm9yZW1lbnRpb25lZCBzcHJpbnRmKCkgZm9ybWF0cyB3ZXJlIGxp a2UgdGhpczogKi8KLSAgICAgICAgaWYgKG4gPiAzMSAmJiBuIDwgMTI3KQotICAgICAgICAgIHNw cmludGYoc3AsIiUuMTAwcyUuMjAwMHM6JWNcbiIsczEsczIsKENIQVIpIG4pOwotICAgICAgICBl bHNlIGlmIChuIDwgMzIgfHwgbiA9PSAxMjcpCi0gICAgICAgICAgc3ByaW50ZihzcCwiJS4xMDBz JS4yMDAwczpeJWNcbiIsczEsczIsKENIQVIpICgobis2NCkgJiAweDdGKSk7Ci0gICAgICAgIGVs c2UgaWYgKG4gPiAxMjcgJiYgbiA8IDE2MCkKLSAgICAgICAgICBzcHJpbnRmKHNwLCIlLjEwMHMl LjIwMDBzOn5eJWNcbiIsczEsczIsKENIQVIpKChuLTY0KSAmIDB4N0YpKTsKLSAgICAgICAgZWxz ZSBpZiAobiA+IDE1OSAmJiBuIDwgMjU2KQotICAgICAgICAgIHNwcmludGYoc3AsIiUuMTAwcyUu MjAwMHM6fiVjXG4iLHMxLHMyLChDSEFSKSAobiAmIDB4N0YpKTsKLSAgICAgICAgZWxzZSBzcHJp bnRmKHNwLCIlLjEwMHMlLjIwMDBzOiVsZFxuIixzMSxzMixuKTsKLS8qCi0gIEJ1dCwgbmF0dXJh bGx5LCBpdCB0dXJucyBvdXQgdGhlc2UgYXJlIG5vdCBwb3J0YWJsZSBlaXRoZXIsIHNvIG5vdwot ICB3ZSBkbyB0aGUgc3R1cGlkZXN0IHBvc3NpYmxlIHRoaW5nLgotKi8KLSNlbmRpZiAvKiBDT01N RU5UICovCi0KLSNpZmRlZiBCSUdCVUZPSwotLyogTmVlZCB0byBhY2NlcHQgbG9uZ2VyIHN0cmlu Z3Mgd2hlbiBkZWJ1Z2dpbmcgYXV0aGVudGljYXRlZCBjb25uZWN0aW9ucyAqLwotICAgIGlmIChm ID09IEYwMTApIHsKLSAgICAgICAgaWYgKGxlbjIgKyAyID49IERCVUZMKSBzMiA9ICIoc3RyaW5n IHRvbyBsb25nKSI7Ci0gICAgfSBlbHNlIGlmIChmICE9IEYwMTEgJiYgZiAhPSBGMTAwKSB7Ci0g ICAgICAgIGlmIChsZW4xID4gMTAwKSBzMSA9ICIoc3RyaW5nIHRvbyBsb25nKSI7Ci0gICAgICAg IGlmIChsZW4yICsgMTAxID49IERCVUZMKSBzMiA9ICIoc3RyaW5nIHRvbyBsb25nKSI7Ci0gICAg fQotI2Vsc2UKLSAgICBpZiAoZiAhPSBGMDExKSB7Ci0gICAgICAgIGlmIChsZW4xID4gMTAwKSBz MSA9ICIoc3RyaW5nIHRvbyBsb25nKSI7Ci0gICAgICAgIGlmIChsZW4yICsgMTAxID49IERCVUZM KSBzMiA9ICIoc3RyaW5nIHRvbyBsb25nKSI7Ci0gICAgfQotI2VuZGlmIC8qIEJJR0JVRk9LICov Ci0KLSAgICBzcCA9IGRicHRyOwotCi0gICAgc3dpdGNoIChmKSB7ICAgICAgICAgICAgICAgIC8q IFdyaXRlIGxvZyByZWNvcmQgYWNjb3JkaW5nIHRvIGZvcm1hdC4gKi8KLSAgICAgIGNhc2UgRjAw MDogICAgICAgICAgICAgICAgLyogMCA9IHByaW50IGJvdGggc3RyaW5ncywgYW5kIG4gYXMgYSBj aGFyLiAqLwotICAgICAgICBpZiAobGVuMiA+IDApIHsKLSAgICAgICAgICAgIGlmICgobiA+IDMx ICYmIG4gPCAxMjcpIHx8IChuID4gMTU5ICYmIG4gPCAyNTYpKQotICAgICAgICAgICAgICBzcHJp bnRmKHNwLCIlc1slc109JWNcbiIsczEsczIsKENIQVIpIG4pOwotICAgICAgICAgICAgZWxzZSBp ZiAobiA8IDMyIHx8IG4gPT0gMTI3KQotICAgICAgICAgICAgICBzcHJpbnRmKHNwLCIlc1slc109 XiVjXG4iLHMxLHMyLChDSEFSKSAoKG4rNjQpICYgMHg3RikpOwotICAgICAgICAgICAgZWxzZSBp ZiAobiA+IDEyNyAmJiBuIDwgMTYwKQotICAgICAgICAgICAgICBzcHJpbnRmKHNwLCIlc1slc109 fl4lY1xuIixzMSxzMiwoQ0hBUikoKG4tNjQpICYgMHg3RikpOwotICAgICAgICAgICAgZWxzZSBz cHJpbnRmKHNwLCIlc1slc109MHglbFhcbiIsczEsczIsKGxvbmcpbik7Ci0gICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICBpZiAoKG4gPiAzMSAmJiBuIDwgMTI3KSB8fCAobiA+IDE1OSAmJiBu IDwgMjU2KSkKLSAgICAgICAgICAgICAgc3ByaW50ZihzcCwiJXM9JWNcbiIsczEsKENIQVIpIG4p OwotICAgICAgICAgICAgZWxzZSBpZiAobiA8IDMyIHx8IG4gPT0gMTI3KQotICAgICAgICAgICAg ICBzcHJpbnRmKHNwLCIlcz1eJWNcbiIsczEsKENIQVIpICgobis2NCkgJiAweDdGKSk7Ci0gICAg ICAgICAgICBlbHNlIGlmIChuID4gMTI3ICYmIG4gPCAxNjApCi0gICAgICAgICAgICAgIHNwcmlu dGYoc3AsIiVzPX5eJWNcbiIsczEsKENIQVIpKChuLTY0KSAmIDB4N0YpKTsKLSAgICAgICAgICAg IGVsc2Ugc3ByaW50ZihzcCwiJXM9MHglbFhcbiIsczEsKGxvbmcpbik7Ci0gICAgICAgIH0KLSAg ICAgICAgaWYgKHpzb3V0KFpERklMRSxkYnB0cikgPCAwKSB7Ci0gICAgICAgICAgICBkZWJsb2cg PSAwOwotICAgICAgICAgICAgemNsb3NlKFpERklMRSk7Ci0gICAgICAgIH0KLSNpZmRlZiBDS1NZ U0xPRwotICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX0RCICYmIGNreGxvZ2dpbmcpIHsK LSAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0RCLDEsImRlYnVnIixkYnB0cixOVUxMKTsKLSAg ICAgICAgfQotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgICAgIGJyZWFrOwotCi0gICAgICBj YXNlIEYwMDE6ICAgICAgICAgICAgICAgICAgICAgICAgLyogMSwgIj1uIiAqLwotI2lmZGVmIENP TU1FTlQKLSAgICAgICAgLyogVGhpcyB3YXMgbmV2ZXIgdXNlZCAqLwotICAgICAgICBzcHJpbnRm KHNwLCI9JXNcbiIsY2tmc3RvYShuKSk7Ci0jZWxzZQotICAgICAgICAvKiBMaWtlIEYxMTEsIGJ1 dCBzaG93cyBudW1iZXIgbiBpbiBoZXggKi8KLQlja21ha3htc2coc3AsREJVRkwsCi0JCSAgczEs Ci0JCSAgKCpzMSA/ICI6IiA6ICIiKSwKLQkJICBzMiwKLQkJICAoKnMyID8gIjoiIDogIiIpLAot CQkgIGNrbHRveChuKSwKLQkJICAiXG4iLAotCQkgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxO VUxMCi0JCSAgKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIGlmICh6c291dChaREZJ TEUsZGJwdHIpIDwgMCkgewotICAgICAgICAgICAgZGVibG9nID0gMDsKLSAgICAgICAgICAgIHpj bG9zZShaREZJTEUpOwotICAgICAgICB9Ci0jaWZkZWYgQ0tTWVNMT0cKLSAgICAgICAgaWYgKGNr eHN5c2xvZyA+PSBTWVNMR19EQiAmJiBja3hsb2dnaW5nKSB7Ci0gICAgICAgICAgICBja3N5c2xv ZyhTWVNMR19EQiwxLCJkZWJ1ZyIsZGJwdHIsTlVMTCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBD S1NZU0xPRyAqLwotICAgICAgICBicmVhazsKLQotLyoKLSAgVGhpcyBvbmUgd2FzIG5ldmVyIHVz ZWQgc28gKE9jdG9iZXIgMjAwMCkgd2Ugbm93IHVzZSBpdCBsaWtlIEYwMTEsCi0gIGV4Y2VwdCBp biB0aGlzIGNhc2Ugd2UgdHJlYXQgczIgYXMgTlVMIHRlcm1pbmF0ZWQuCi0qLwotICAgICAgY2Fz ZSBGMDEwOgotCW4gPSAtZGVieGxlbjsKLS8qCi0gIFRoaXMgb25lIHRyZWF0cyBuIGFzIHRoZSBs ZW5ndGggb2YgdGhlIHN0cmluZyBzMiwgd2hpY2ggbWF5IGNvbnRhaW4gTlVMcy4KLSAgSXQncyBn b29kIGZvciBsb2dnaW5nIE5VTC1iZWFyaW5nIGRhdGEgaW4gdGhlIGRlYnVnIGxvZy4KLSovCi0g ICAgICBjYXNlIEYwMTE6IHsKLQkgIGludCBpLCBqLCBjb250ZCA9IDA7Ci0JICBjaGFyICogcCA9 IHMyLCAqcGJ1ZiA9IE5VTEw7CS8qIHAgPSBzb3VyY2UgcG9pbnRlciAqLwotCSAgaW50IG07CQkJ LyogcGJ1ZiA9IGRlc3RpbmF0aW9uIHBvaW50ZXIgKi8KLQotCSAgaWYgKGYgPT0gRjAxMSkgewot CSAgICAgIGlmIChuIDwgMCkgewkJLyogbiA9IHNpemUgb2Ygc291cmNlICovCi0JCSAgbiA9IDAg LSBuOwkJLyogTmVnYXRpdmUgbWVhbnMgdG8gYWRkICIuLi4iICovCi0JCSAgY29udGQgPSAxOwot CSAgICAgIH0KLQkgIH0gZWxzZSB7Ci0JICAgICAgaW50IHgsIGZsYWcgPSAwOwotCSAgICAgIHgg PSBzdHJsZW4oczIpOwotCSAgICAgIGlmIChuIDwgMCkgewotCQkgIGZsYWcgPSAxOwotCQkgIG4g PSAwIC0gbjsKLQkgICAgICB9Ci0JICAgICAgaWYgKHggPCBuKQotCQluID0geDsKLQkgIH0KLQkg IGlmIChuID09IDApCQkJLyogMCBtZWFucyBkbyBub3RoaW5nICovCi0JICAgIGdvdG8geGRlYnVn OwotCSAgbSA9IERCVUZMIC0gODsJCS8qIEdldCBzaXplIGZvciBpbnRlcnByZXRlZCBwYXJ0ICov Ci0JICBpZiAobiA+IG0pCQkJLyogRW5zdXJlIHJlcXVlc3RlZCBzaXplIG5vdCB0b28gYmlnICov Ci0JICAgIG4gPSBtOwotCSAgcGJ1ZiA9IGRicHRyOwkJCS8qIENvbnN0cnVjdGlvbiBwb2ludGVy ICovCi0JICBpID0gMDsKLQkgIHBidWZbaSsrXSA9ICdbJzsJCS8qIEludGVycHJldCB0aGUgc3Ry aW5nIGludG8gaXQgKi8KLQkgIGZvciAoaiA9IDA7IGogPCBuICYmIGkgPCBtLTQ7IHArKyxqKysp IHsgLyogY2hhciBieSBjaGFyLi4uICovCi0JICAgICAgaWYgKCpwID09IExGKSB7Ci0JCSAgaWYg KGkgPj0gbS00KQotCQkgICAgYnJlYWs7Ci0JCSAgcGJ1ZltpKytdID0gJzwnOwotCQkgIHBidWZb aSsrXSA9ICdMJzsKLQkJICBwYnVmW2krK10gPSAnRic7Ci0JCSAgcGJ1ZltpKytdID0gJz4nOwot CQkgIGNvbnRpbnVlOwotCSAgICAgIH0gZWxzZSBpZiAoKnAgPT0gQ1IpIHsKLQkJICBpZiAoaSA+ PSBtLTQpCi0JCSAgICBicmVhazsKLQkJICBwYnVmW2krK10gPSAnPCc7Ci0JCSAgcGJ1ZltpKytd ID0gJ0MnOwotCQkgIHBidWZbaSsrXSA9ICdSJzsKLQkJICBwYnVmW2krK10gPSAnPic7Ci0JCSAg Y29udGludWU7Ci0JICAgICAgfSBlbHNlIGlmICgqcCA9PSBIVCkgewotCQkgIGlmIChpID49IG0t NSkKLQkJICAgIGJyZWFrOwotCQkgIHBidWZbaSsrXSA9ICc8JzsKLQkJICBwYnVmW2krK10gPSAn VCc7Ci0JCSAgcGJ1ZltpKytdID0gJ0EnOwotCQkgIHBidWZbaSsrXSA9ICdCJzsKLQkJICBwYnVm W2krK10gPSAnPic7Ci0JCSAgY29udGludWU7Ci0JICAgICAgfSBlbHNlIGlmICgqcCkgewotCQkg IHBidWZbaSsrXSA9ICpwOwotCQkgIGNvbnRpbnVlOwotCSAgICAgIH0gZWxzZSB7Ci0JCSAgaWYg KGkgPj0gbS01KQotCQkgICAgYnJlYWs7Ci0JCSAgcGJ1ZltpKytdID0gJzwnOwotCQkgIHBidWZb aSsrXSA9ICdOJzsKLQkJICBwYnVmW2krK10gPSAnVSc7Ci0JCSAgcGJ1ZltpKytdID0gJ0wnOwot CQkgIHBidWZbaSsrXSA9ICc+JzsKLQkJICBjb250aW51ZTsKLQkgICAgICB9Ci0JICB9Ci0JICBp ZiAoaSA8IG0tMiAmJiAoKnAgfHwgY29udGQpKSB7Ci0JICAgICAgcGJ1ZltpKytdID0gJy4nOwot CSAgICAgIHBidWZbaSsrXSA9ICcuJzsKLQkgIH0KLQkgIHBidWZbaSsrXSA9ICddJzsKLQkgIHBi dWZbaV0gPSBOVUw7Ci0JICBpZiAoenNvdXQoWkRGSUxFLHMxKSA8IDApIHsKLQkgICAgICBkZWJs b2cgPSAwOwotCSAgICAgIHpjbG9zZShaREZJTEUpOwotCSAgfQotCSAgaWYgKHpzb3V0bChaREZJ TEUscGJ1ZikgPCAwKSB7Ci0JICAgICAgZGVibG9nID0gMDsKLQkgICAgICB6Y2xvc2UoWkRGSUxF KTsKLQkgIH0KLSNpZmRlZiBDS1NZU0xPRwotCSAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19EQiAm JiBja3hsb2dnaW5nKSB7Ci0JICAgICAgY2tzeXNsb2coU1lTTEdfREIsMSwiZGVidWciLHMxLHBi dWYpOwotCSAgfQotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgICAgIH0KLSAgICAgICAgYnJl YWs7Ci0KLSAgICAgIGNhc2UgRjEwMDogICAgICAgICAgICAgICAgICAgICAgICAvKiA0LCAiczEi ICovCi0gICAgICAgIGlmICh6c291dGwoWkRGSUxFLHMxKSA8IDApIHsKLSAgICAgICAgICAgIGRl YmxvZyA9IDA7Ci0gICAgICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKLSAgICAgICAgfQotI2lmZGVm IENLU1lTTE9HCi0gICAgICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfREIgJiYgY2t4bG9nZ2lu ZykgewotICAgICAgICAgICAgY2tzeXNsb2coU1lTTEdfREIsMSwiZGVidWciLHMxLE5VTEwpOwot ICAgICAgICB9Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgICBj YXNlIEYxMDE6ICAgICAgICAgICAgICAgICAgICAgICAgLyogNSwgInMxPW4iICovCi0gICAgICAg IHNwcmludGYoc3AsIiVzPSVzXG4iLHMxLGNrZnN0b2EobikpOwotICAgICAgICBpZiAoenNvdXQo WkRGSUxFLGRicHRyKSA8IDApIHsKLSAgICAgICAgICAgIGRlYmxvZyA9IDA7Ci0gICAgICAgICAg ICB6Y2xvc2UoWkRGSUxFKTsKLSAgICAgICAgfQotI2lmZGVmIENLU1lTTE9HCi0gICAgICAgIGlm IChja3hzeXNsb2cgPj0gU1lTTEdfREIgJiYgY2t4bG9nZ2luZykgewotICAgICAgICAgICAgY2tz eXNsb2coU1lTTEdfREIsMSwiZGVidWciLGRicHRyLE5VTEwpOwotICAgICAgICB9Ci0jZW5kaWYg LyogQ0tTWVNMT0cgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEYxMTA6ICAgICAgICAg ICAgICAgICAgICAgICAgLyogNiwgInMxW3MyXSIgKi8KLSAgICAgICAgc3ByaW50ZihzcCwiJXNb JXNdXG4iLHMxLHMyKTsKLSAgICAgICAgaWYgKHpzb3V0KFpERklMRSxkYnB0cikgPCAwKSB7Ci0g ICAgICAgICAgICBkZWJsb2cgPSAwOwotICAgICAgICAgICAgemNsb3NlKFpERklMRSk7Ci0gICAg ICAgIH0KLSNpZmRlZiBDS1NZU0xPRwotICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX0RC ICYmIGNreGxvZ2dpbmcpIHsKLSAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0RCLDEsImRlYnVn IixkYnB0cixOVUxMKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIENLU1lTTE9HICovCi0gICAgICAg IGJyZWFrOwotICAgICAgY2FzZSBGMTExOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDcsICJz MVtzMl09biIgKi8KLSAgICAgICAgc3ByaW50ZihzcCwiJXNbJXNdPSVzXG4iLHMxLHMyLGNrZnN0 b2EobikpOwotICAgICAgICBpZiAoenNvdXQoWkRGSUxFLGRicHRyKSA8IDApIHsKLSAgICAgICAg ICAgIGRlYmxvZyA9IDA7Ci0gICAgICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKLSAgICAgICAgfQot I2lmZGVmIENLU1lTTE9HCi0gICAgICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfREIgJiYgY2t4 bG9nZ2luZykgewotICAgICAgICAgICAgY2tzeXNsb2coU1lTTEdfREIsMSwiZGVidWciLGRicHRy LE5VTEwpOwotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICAgICAgYnJlYWs7 Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBzcHJpbnRmKHNwLCJcbj9JbnZhbGlkIGZvcm1hdCBm b3IgZGVidWcoKSAtICVkXG4iLGYpOwotICAgICAgICBpZiAoenNvdXQoWkRGSUxFLGRicHRyKSA8 IDApIHsKLSAgICAgICAgICAgIGRlYmxvZyA9IDA7Ci0gICAgICAgICAgICB6Y2xvc2UoWkRGSUxF KTsKLSAgICAgICAgfQotI2lmZGVmIENLU1lTTE9HCi0gICAgICAgIGlmIChja3hzeXNsb2cgPj0g U1lTTEdfREIgJiYgY2t4bG9nZ2luZykgewotICAgICAgICAgICAgY2tzeXNsb2coU1lTTEdfREIs MSwiZGVidWciLGRicHRyLE5VTEwpOwotICAgICAgICB9Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8K LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB4ZGVidWc6ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIENvbW1vbiBleGl0IHBvaW50ICovCi0jaWZkZWYgT1MyCi0gICAgaWYgKFN5c0lu aXRlZCkKLQlSZWxlYXNlRGVidWdNdXRleCgpOwotI2Vsc2UgLyogT1MyICovCi0gICAgZGVibG9n ID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSB0aGlzICovCi0jZW5kaWYg LyogT1MyICovCi0gICAgcmV0dXJuKDApOwotfQotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotZG9o ZXhkdW1wKENIQVIgKm1zZywgQ0hBUiAqc3QsIGludCBjbnQpCi0jZWxzZQotZG9oZXhkdW1wKG1z ZyxzdCxjbnQpIENIQVIgKm1zZzsgQ0hBUiAqc3Q7IGludCBjbnQ7Ci0jZW5kaWYgLyogQ0tfQU5T SUMgKi8KLS8qIGRvaGV4ZHVtcCAqLyB7Ci0gICAgaW50IGkgPSAwLCBqID0gMCwgayA9IDA7Ci0g ICAgY2hhciB0bXBbOF07Ci0jaWZkZWYgT1MyCi0gICAgZXh0ZXJuIGludCBTeXNJbml0ZWQ7Ci0j ZW5kaWYgLyogT1MyICovCi0KLSAgICBpZiAoIWRlYmxvZykgcmV0dXJuKDApOwkJLyogSWYgbm8g ZGVidWcgbG9nLCBkb24ndC4gKi8KLSAgICBpZiAoIWRicHRyKSB7ICAgICAgICAgICAgICAgICAg ICAgICAvKiBBbGxvY2F0ZSBtZW1vcnkgYnVmZmVyICovCi0gICAgICAgIGRicHRyID0gbWFsbG9j KERCVUZMKzEpOyAgICAgICAgLyogVGhpcyBvbmx5IGhhcHBlbnMgb25jZSAqLwotICAgICAgICBp ZiAoIWRicHRyKSB7Ci0gICAgICAgICAgICBkZWJsb2cgPSAwOwotICAgICAgICAgICAgemNsb3Nl KFpERklMRSk7Ci0gICAgICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNp ZmRlZiBPUzIKLSAgICBpZiAoU3lzSW5pdGVkKSB7Ci0JaWYgKFJlcXVlc3REZWJ1Z011dGV4KDMw MDAwKSkKLQkgICAgZ290byB4ZGVidWc7Ci0gICAgfQotI2Vsc2UgLyogT1MyICovCi0gICAgZGVi bG9nID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJldmVudCBpbmZpbml0ZSByZWN1 cnNpb24gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotICAgIGlmIChtc2cgIT0gTlVMTCkgewotCWNr bWFreG1zZyhkYnB0ciwKLQkJICBEQlVGTCwKLQkJICAiSEVYRFVNUDogIiwKLQkJICAoY2hhciAq KW1zZywKLQkJICAiICgiLAotCQkgIGNraXRvYShjbnQpLAotCQkgICIgYnl0ZXMpXG4iLAotCQkg IE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwKLQkJICk7Ci0gICAgICAgIGlmICh6 c291dChaREZJTEUsZGJwdHIpIDwgMCkgewotICAgICAgICAgICAgZGVibG9nID0gMDsKLSAgICAg ICAgICAgIHpjbG9zZShaREZJTEUpOwotCSAgICBnb3RvIHhkZWJ1ZzsKLSAgICAgICAgfQotICAg IH0gZWxzZSB7Ci0JY2ttYWttc2coZGJwdHIsCi0JCSBEQlVGTCwKLQkJICJIRVhEVU1QOiAoIiwK LQkJIGNraXRvYShjbnQpLAotCQkgIiBieXRlcylcbiIsCi0JCSBOVUxMCi0JCSApOwotICAgICAg ICB6c291dChaREZJTEUsZGJwdHIpOwotICAgICAgICBpZiAoenNvdXQoWkRGSUxFLGRicHRyKSA8 IDApIHsKLSAgICAgICAgICAgIGRlYmxvZyA9IDA7Ci0gICAgICAgICAgICB6Y2xvc2UoWkRGSUxF KTsKLQkgICAgZ290byB4ZGVidWc7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZm9yIChpID0gMDsg aSA8IGNudDsgaSsrKSB7Ci0gICAgICAgIGRicHRyWzBdID0gJ1wwJzsKLSAgICAgICAgZm9yIChq ID0gMCA7IChqIDwgMTYpOyBqKyspIHsKLSAgICAgICAgICAgIGlmICgoaSArIGopIDwgY250KQot CSAgICAgIHNwcmludGYodG1wLAotCQkgICAgICAiJXMlMDJ4ICIsCi0JCSAgICAgIChqID09IDgg PyAifCAiIDogIiIpLAotCQkgICAgICAoQ0hBUikgc3RbaSArIGpdCi0JCSAgICAgICk7Ci0gICAg ICAgICAgICBlbHNlCi0JICAgICAgc3ByaW50Zih0bXAsCi0JCSAgICAgICIlcyAgICIsCi0JCSAg ICAgIChqID09IDggPyAifCAiIDogIiIpCi0JCSAgICAgICk7Ci0gICAgICAgICAgICBja3N0cm5j YXQoZGJwdHIsdG1wLERCVUZMKzEpOwotICAgICAgICB9Ci0gICAgICAgIGNrc3RybmNhdChkYnB0 ciwiICIsREJVRkwrMSk7Ci0gICAgICAgIGZvciAoayA9IDA7IChrIDwgMTYpICYmICgoaSArIGsp IDwgY250KTsgaysrKSB7Ci0gICAgICAgICAgICBzcHJpbnRmKHRtcCwKLSAgICAgICAgICAgICAg ICAgICAgIiVzJWMiLAotICAgICAgICAgICAgICAgICAgICAoayA9PSA4ID8gIiAiIDogIiIpLAot ICAgICAgICAgICAgICAgICAgICBpc3ByaW50KHN0W2kgKyBrXSkgPyBzdFtpICsga10gOiAnLicK LSAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGNrc3RybmNhdChkYnB0cix0bXAs REJVRkwrMSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2tzdHJuY2F0KGRicHRyLCJcbiIsREJVRkwr MSk7Ci0gICAgICAgIGkgKz0gaiAtIDE7Ci0gICAgICAgIGlmICh6c291dChaREZJTEUsZGJwdHIp IDwgMCkgewotICAgICAgICAgICAgZGVibG9nID0gMDsKLSAgICAgICAgICAgIHpjbG9zZShaREZJ TEUpOwotCSAgICBnb3RvIHhkZWJ1ZzsKLSAgICAgICAgfQotICAgIH0gLyogZW5kIGZvciAqLwot Ci0KLSAgeGRlYnVnOgotI2lmZGVmIE9TMgotICAgIGlmIChTeXNJbml0ZWQpCi0gICAgICBSZWxl YXNlRGVidWdNdXRleCgpOwotI2Vsc2UgLyogT1MyICovCi0gICAgZGVibG9nID0gMTsKLSNlbmRp ZiAvKiBPUzIgKi8KLSAgICByZXR1cm4oMCk7Ci19Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotLyog IFNlc3Npb24gTG9nLi4uICovCi0KLWludCB0c3N0YXRlID0gMDsKLQotVk9JRAotI2lmZGVmIE9T MgotbG9nY2hhcih1bnNpZ25lZCBzaG9ydCBjKQotI2Vsc2UgLyogT1MyICovCi0jaWZkZWYgQ0tf QU5TSUMKLWxvZ2NoYXIoY2hhciBjKQotI2Vsc2UKLWxvZ2NoYXIoYykgY2hhciBjOwotI2VuZGlm IC8qIENLX0FOU0lDICovCi0jZW5kaWYgLyogT1MyICovCi0vKiBsb2djaGFyICovIHsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogTG9nIGNoYXJhY3RlciBjIHRvIHNlc3Npb24gbG9nICovCi0g ICAgZXh0ZXJuIGludCBzbG9nbnVsOwotICAgIGludCBva3RvbG9nID0gMDsKLSNpZm5kZWYgTk9M T0NBTAotICAgIGlmICghc2VzbG9nKQotICAgICAgcmV0dXJuOwotCi0gICAgaWYgKChzZXNzZnQg IT0gWFlGVF9UKSB8fCAoCi0jaWZkZWYgVU5JWAotCSBjICE9ICdccicgJiYKLSNlbHNlCi0jaWZk ZWYgZGF0YWdlbmVyYWwKLQkgYyAhPSAnXHInICYmCi0jZWxzZQotI2lmZGVmIFNUUkFUVVMKLQkg YyAhPSAnXHInICYmCi0jZWxzZQotI2lmZGVmIEFNSUdBCi0JIGMgIT0gJ1xyJyAmJgotI2Vsc2UK LSNpZmRlZiBHRU1ET1MKLQkgYyAhPSAnXHInICYmCi0jZW5kaWYgLyogR0VNRE9TICovCi0jZW5k aWYgLyogQU1JR0EgKi8KLSNlbmRpZiAvKiBTVFJBVFVTICovCi0jZW5kaWYgLyogZGF0YWdlbmVy YWwgKi8KLSNlbmRpZiAvKiBVTklYICovCi0jaWZkZWYgT1NLCi0JIGMgIT0gJ1xuJyAmJgotI2Vs c2UKLSNpZmRlZiBNQUMKLQkgYyAhPSAnXG4nICYmCi0jZW5kaWYgLyogTUFDICovCi0jZW5kaWYg LyogT1NLICovCi0JIGMgIT0gWE9OICYmCi0JIGMgIT0gWE9GRikpCi0gICAgICBva3RvbG9nID0g MTsKLSAgICBpZiAoYyA9PSAnXDAnICYmICFzZXNzZnQpCQkvKiBOVUwgaW4gdGV4dCBtb2RlICov Ci0gICAgICBpZiAoc2xvZ251bCkgb2t0b2xvZyA9IDE7CQkvKiBvbmx5IGlmIHBhZGRpbmcgKDIw MDkvMTAvMjIpICovCi0gICAgaWYgKCFva3RvbG9nKQotICAgICAgcmV0dXJuOwotICAgIGlmIChz bG9ndHMpIHsJCQkvKiBMb2cgaXMgdGltZXN0YW1wZWQgKi8KLQlpZiAodHNzdGF0ZSA9PSAwKSB7 CQkvKiBTdGF0ZSA9IGJldHdlZW4tbGluZXMgKi8KLQkgICAgY2hhciAqIHA7CQkJLyogenN0aW1l KCkgcG9pbnRlciAqLwotCSAgICBjaGFyIHRzWzQ4XTsJCS8qIHRpbWVzdGFtcCBidWZmZXIgKi8K LQkgICAgenRpbWUoJnApOwkJCS8qIEdldCBhc2N0aW1lKCkgc3RyaW5nICovCi0JICAgIGNrc3Ry bmNweSh0cyxwLDMyKTsJCS8qIE1ha2Ugc2FmZSBjb3B5ICovCi0JICAgIGlmICh6dG1zZWMgPiAt MUwpIHsJCS8qIEFkZCBtc2VjcyBpZiB3ZSBoYXZlIHRoZW0gKi8KLQkJc3ByaW50ZigmdHNbMTld LCIuJTAzbGQ6ICIsenRtc2VjKTsgLyogU0FGRSAqLwotCSAgICB9IGVsc2UgewotCQl0c1sxOV0g PSAnOic7Ci0JCXRzWzIwXSA9IFNQOwotCQl0c1syMV0gPSBOVUw7Ci0JICAgIH0KLQkgICAgaWYg KHpzb3V0KFpTRklMRSwmdHNbMTFdKSA8IDApCi0JICAgICAgZ290byB4bG9nY2hhcjsKLQl9Ci0g ICAgfQotICAgIGlmIChjID09ICdcbicpCQkJLyogQXQgZW5kIG9mIGxpbmU/ICovCi0gICAgICB0 c3N0YXRlID0gMDsJCQkvKiB5ZXMgKi8KLSAgICBlbHNlCi0gICAgICB0c3N0YXRlID0gMTsJCQkv KiBubyAqLwotICAgIGlmICh6Y2hvdXQoWlNGSUxFLChDSEFSKShjICYgMHhGRikpIDwgMCkgLyog TG9nIHRoZSBjaGFyYWN0ZXIgKi8KLSAgICAgIGdvdG8geGxvZ2NoYXI7Ci0gICAgaWYgKHRzc3Rh dGUgPT0gMCAmJiBzbG9nbnVsICE9IDApIHsJLyogTnVsbC10ZXJtaW5hdGluZyBsaW5lcz8gKi8K LQlpZiAoemNob3V0KFpTRklMRSwoQ0hBUikwKSA8IDApCS8qIEFkZCBhIE5VTCAqLwotCSAgZ290 byB4bG9nY2hhcjsKLSAgICB9Ci0gICAgcmV0dXJuOwotCi0gIHhsb2djaGFyOgotICAgIGNvbm9s bCgiIik7Ci0gICAgY29ub2xsKCJFUlJPUiBXUklUSU5HIFNFU1NJT04gTE9HLCBMT0cgQ0xPU0VE ISIpOwotICAgIHNldHNlc2xvZygwKTsKLSAgICB6Y2xvc2UoWlNGSUxFKTsKLSNlbmRpZiAvKiBO T0xPQ0FMICovCi19Ci0KLVZPSUQKLWxvZ3N0cihzLCBsZW4pIGNoYXIgKiBzOyBpbnQgbGVuOyB7 ICAgICAvKiBMb2cgc3RyaW5nIHRvIHNlc3Npb24gbG9nICovCi0jaWZuZGVmIE5PTE9DQUwKLSAg ICBpbnQgbiA9IDA7Ci0gICAgaWYgKCFzKQotICAgICAgcmV0dXJuOwotICAgIHdoaWxlIChzZXNs b2cgJiYgKG4gPCBsZW4pKQotICAgICAgbG9nY2hhcihzW24rK10pOwotI2VuZGlmIC8qIE5PTE9D QUwgKi8KLX0KLQotI2lmZGVmIENLX0NVUlNFUwotaW50Ci1ja19yZXBhaW50KCkgewotICAgIHJl cGFpbnQgPSAxOwotICAgIHJldHVybigwKTsKLX0KLQotI2lmZGVmIFNUUkFUVVMKLS8qIFZPUyBo YXMgY3Vyc2VzIGJ1dCBubyB0Z2V0ZW50KCkgKi8KLWludAotdGdldGVudChzMSwgczIpIGNoYXIg KiBzMSwgKiBzMjsgewotICAgIHJldHVybigxKTsKLX0KLSNlbmRpZiAvKiBTVFJBVFVTICovCi0K LSNpZmRlZiBWTVMKLSNpZmRlZiBfX0RFQ0MKLV9QUk9UT1RZUChpbnQgdGdldGVudCwoY2hhciAq LCBjaGFyICopKTsKLSNlbmRpZiAvKiBfX0RFQ0MgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQotLyoK LSAgVGhlcmUgYXJlIHRocmVlIGRpZmZlcmVudCB3YXlzIHRvIGRvIGZ1bGxzY3JlZW4gb24gVk1T LgotICAxLiBVc2UgdGhlIHJlYWwgY3Vyc2VzIGxpYnJhcnksIFZBWENDVVJTRS4KLSAgMi4gVXNl IGRvLWl0LXlvdXJzZWxmIGNvZGUuCi0gIDMuIFVzZSB0aGUgU2NyZWVuIE1hbmFnZXIsIFNNRyQu Ci0KLSAgTWV0aG9kIDEgZG9lc24ndCB3b3JrIHF1aXRlIHJpZ2h0OyB5b3UgY2FuJ3QgY2FsbCBl bmR3aW4oKSwgc28gb25jZSB5b3UndmUKLSAgc3RhcnRlZCBjdXJzZXMgbW9kZSwgeW91IGNhbiBu ZXZlciBsZWF2ZS4KLQotICBNZXRob2QgMiBkb2Vzbid0IG9wdGltaXplIHRoZSBzY3JlZW4sIGFu ZCBzbyBtdWNoIG1vcmUgdGltZSBpcyBzcGVudCBpbgotICBzY3JlZW4gd3JpdGVzLiAgVGhpcyBh Y3R1YWxseSBjYXVzZXMgZmlsZSB0cmFuc2ZlcnMgdG8gZmFpbCBiZWNhdXNlIHRoZQotICB0dHkg ZGV2aWNlIGlucHV0IGJ1ZmZlciBjYW4gYmUgb3ZlcnJ1biB3aGlsZSB0aGUgc2NyZWVuIGlzIGJl aW5nIHVwZGF0ZWQsCi0gIGVzcGVjaWFsbHkgb24gYSBzbG93IE1pY3JvVkFYIHRoYXQgaGFzIHNt YWxsIHR5cGVhaGVhZCBidWZmZXJzLgotCi0gIEluIHRoZSBmb2xsb3dpbmcgI2lmZGVmIGJsb2Nr LCAjZGVmaW5lIG9uZSBvZiB0aGVtIGFuZCAjdW5kZWYgdGhlIG90aGVyIDIuCi0KLSAgU28gbm93 IGxldCdzIHRyeSBtZXRob2QgMy4uLgotKi8KLSNpZmRlZiBWTVMKLSNkZWZpbmUgQ0tfU01HICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBTY3JlZW4gTWFuYWdlciAqLwotI3VuZGVmIE1ZQ1VS U0VTICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvLWl0LXlvdXJzZWxmICovCi0jdW5kZWYg Vk1TQ1VSU0UgICAgICAgICAgICAgICAgICAgICAgICAgLyogVkFYQ0NVUlNFIGxpYnJhcnkgKi8K LSNlbmRpZiAvKiBWTVMgKi8KLS8qCi0gIEJ1dCBqdXN0IGJlZm9yZSBOZXcgWWVhcnMsIDIwMDAs IHRoZSBTTUcgbGlicmFyeSBzZWVtZWQgdG8gYnJlYWsgb24KLSAgYm90aCBWTVMgc3lzdGVtcyB3 ZSBoYXZlIGhlcmUgKGFuIEFscGhhIHdpdGggVk1TIDcuMSBhbmQgYSBWQVggd2l0aCA1LjUpLgot ICBTbyBiYWNrIHRvIE1ZQ1VSU0VTLCB3aGljaCB3b3JrcyBmaW5lLgotKi8KLSNpZmRlZiBWTVMK LSN1bmRlZiBDS19TTUcKLSNkZWZpbmUgTVlDVVJTRVMKLSNlbmRpZiAvKiBWTVMgKi8KLQotI2lm ZGVmIE1ZQ1VSU0VTCi0jZGVmaW5lIHN0ZHNjciAwCi0jaWZkZWYgQ0tfV1JFRlJFU0gKLSN1bmRl ZiBDS19XUkVGUkVTSAotI2VuZGlmIC8qIENLX1dSRUZSRVNIICovCi0jZW5kaWYgLyogTVlDVVJT RVMgKi8KLQotLyogIFMgQyBSIEUgRSBOIEMgIC0tICBTY3JlZW4gZGlzcGxheSBmdW5jdGlvbiwg dXNlcyBjdXJzZXMgICovCi0KLS8qIElkZWEgZm9yIGN1cnNlcyBkaXNwbGF5IGNvbnRyaWJ1dGVk IGJ5IENocmlzIFByYXR0IG9mIEFQViBCYWtlciwgVUsgKi8KLQotLyogQXZvaWQgY29uZmljdHMg d2l0aCBjdXJzZXMuaCAqLwotCi0jaWZkZWYgUU5YCi0vKiBTYW1lIGFzIGNrY2FzYy5oLCBidXQg aW4gYSBkaWZmZXJlbnQgcmFkaXguLi4gKi8KLSNpZmRlZiBFU0MKLSN1bmRlZiBFU0MKLSNlbmRp ZiAvKiBFU0MgKi8KLSNlbmRpZiAvKiBRTlggKi8KLQotI2lmbmRlZiBNWUNVUlNFUwotI3VuZGVm IFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgd2FzIGRlZmluZWQgaW4g Y2tjZGViLmggKi8KLSNlbmRpZiAvKiBNWUNVUlNFUyAqLwotCi0jdW5kZWYgQlMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogVGhlc2Ugd2VyZSBkZWZpbmVkIGluIGNrY2FzYy5oICov Ci0jdW5kZWYgQ1IKLSN1bmRlZiBOTAotI3VuZGVmIFNPCi0jaWZkZWYgVVMKLSN1bmRlZiBVUwot I2VuZGlmCS8qIFVTICovCi0jdW5kZWYgU1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogVXNlZCBpbiBuY3Vyc2VzICovCi0jZGVmaW5lIENIUl9TUCAzMiAgICAgICAgICAgICAgICAg ICAgICAgLyogVXNlIHRoaXMgaW5zdGVhZCAqLwotCi0jaWZkZWYgVk1TICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogVk1TIGZ1bGxzY3JlZW4gZGlzcGxheSAqLwotI2lmZGVmIE1ZQ1VS U0VTICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvLWl0LXlvdXJzZWxmIG1ldGhvZCAqLwot ZXh0ZXJuIGludCBpc3Z0NTI7ICAgICAgICAgICAgICAgICAgICAgIC8qIEZyb20gQ0tWVElPLkMg Ki8KLSNkZWZpbmUgcHJpbnR3IHByaW50ZgotI2Vsc2UKLSNpZmRlZiBWTVNDVVJTRSAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBWTVMgY3Vyc2VzIGxpYnJhcnkgVkFYQ0NVUlNFICovCi0jaW5j bHVkZSA8Y3Vyc2VzLmg+Ci0vKiBOb3RlOiBTY3JlZW4gbWFuYWdlciBkb2Vzbid0IG5lZWQgYSBo ZWFkZXIgZmlsZSAqLwotI2VuZGlmIC8qIFZNU0NVUlNFICovCi0jZW5kaWYgLyogTVlDVVJTRVMg Ki8KLSNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgVk1TICov Ci0jaWZkZWYgTVlDVVJTRVMgICAgICAgICAgICAgICAgICAgICAgICAgLyogRG8taXQteW91cnNl bGYgbWV0aG9kICovCi0jZGVmaW5lIGlzdnQ1MiAwICAgICAgICAgICAgICAgICAgICAgICAgLyog VXNlZCBieSBPUy8yLCBWVC0xMDAvQU5TSSBhbHdheXMgKi8KLSNpZmRlZiBDS1hQUklOVEYKLSNk ZWZpbmUgcHJpbnR3IGNreHByaW50ZgotI2Vsc2UgLyogQ0tYUFJJTlRGICovCi0jaWZkZWYgS1VJ Ci0jZGVmaW5lIHByaW50dyBWc2NybnByaW50dwotI2Vsc2UgLyogS1VJICovCi0jZGVmaW5lIHBy aW50dyBwcmludGYKLSNlbmRpZiAvKiBLVUkgKi8KLSNlbmRpZiAvKiBDS1hQUklOVEYgKi8KLSNl bHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVc2UgcmVhbCBjdXJzZXMg Ki8KLSNpZmRlZiBDS19OQ1VSU0VTICAgICAgICAgICAgICAgICAgICAgICAvKiBvciBuY3Vyc2Vz Li4uICovCi0jaWZkZWYgQ0tYUFJJTlRGICAgICAgICAgICAgICAgICAgICAgICAgLyogT3VyIHBy aW50ZiBtYWNybyBjb25mbGljdHMgd2l0aCAqLwotI3VuZGVmIHByaW50ZiAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIHVzZSBvZiAicHJpbnRmIiBpbiBuY3Vyc2VzLmggKi8KLSNlbmRpZiAv KiBDS1hQUklOVEYgKi8KLSNpbmNsdWRlIDxuY3Vyc2VzLmg+Ci0jaWZkZWYgQ0tYUFJJTlRGCi0j ZGVmaW5lIHByaW50ZiBja3hwcmludGYKLSNlbmRpZiAvKiBDS1hQUklOVEYgKi8KLSNlbHNlICAv KiBOb3QgbmN1cnNlcyAqLwotI2lmZGVmIENLWFBSSU5URiAgICAgICAgICAgICAgICAgICAgICAg IC8qIE91ciBwcmludGYgbWFjcm8gY29uZmxpY3RzIHdpdGggKi8KLSN1bmRlZiBwcmludGYgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiB1c2Ugb2YgInByaW50ZiIgaW4gY3Vyc2VzLmggKi8K LSNlbmRpZiAvKiBDS1hQUklOVEYgKi8KLSNpZmRlZiBNX1hFTklYCQkJCS8qIFNDTyBYRU5JWC4u LiAqLwotI2lmZGVmIE1fVEVSTUNBUAotI3VuZGVmIE1fVEVSTUNBUAotI2VuZGlmIC8qIE1fVEVS TUNBUCAqLwotI2lmbmRlZiBNX1RFUk1JTkZPCi0jZGVmaW5lIE1fVEVSTUlORk8KLSNlbmRpZiAv KiBNX1RFUk1JTkZPICovCi0jZW5kaWYgLyogTV9YRU5JWCAqLwotI2lmZGVmIFJUQUlYCi0jdW5k ZWYgTkxTCQkJCS8qIEF2b2lkICdyZWRlY2xhcmF0aW9uIG9mIGZyZWUnLiAqLwotI2VuZGlmIC8q IFJUQUlYICovCi0jaW5jbHVkZSA8Y3Vyc2VzLmg+Ci0jaWZkZWYgQ0tYUFJJTlRGCi0jZGVmaW5l IHByaW50ZiBja3hwcmludGYKLSNlbmRpZiAvKiBDS1hQUklOVEYgKi8KLSNlbmRpZiAvKiBDS19O Q1VSU0VTICovCi0jZW5kaWYgLyogTVlDVVJTRVMgKi8KLSNlbmRpZiAvKiBWTVMgKi8KLQotI2lm ZGVmIEJVRzk5OQotX1BST1RPVFlQKGludCB0Z2V0ZW50LChjaGFyICosIGNoYXIgKikpOwotX1BS T1RPVFlQKGNoYXIgKnRnZXRzdHIsKGNoYXIgKiwgY2hhciAqKikpOwotX1BST1RPVFlQKGludCB0 cHV0cywoY2hhciAqLCBpbnQsIGludCAoKikoKSkpOwotX1BST1RPVFlQKGNoYXIgKnRnb3RvLChj b25zdCBjaGFyICosIGludCwgaW50KSk7Ci0jZW5kaWYJLyogQlVHOTk5ICovCi0KLSNlbmRpZiAv KiBDS19DVVJTRVMgKi8KLQotLyogIEYgWCBEIEkgTiBJIFQgIC0tICBGaWxlIFhmZXIgRGlzcGxh eSBJbml0aWFsaXphdGlvbiAgKi8KLQotI2lmZGVmIENLX0NVUlNFUwotI2lmbmRlZiBNWUNVUlNF UwotI2lmbmRlZiBDS19TTUcKLXN0YXRpYwotI2lmZGVmIENLX0FOU0lDCi0vKiBDYW4ndCB1c2Ug Vk9JRCBiZWNhdXNlIG9mIGN1cnNlcy5oICovCi12b2lkCi1ja190ZXJtc2V0KGludCk7Ci0jZWxz ZQotY2tfdGVybXNldCgpOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0jZW5kaWYgLyogQ0tfU01H ICovCi0jZW5kaWYgLyogTVlDVVJTRVMgKi8KLSNlbmRpZiAvKiBDS19DVVJTRVMgKi8KLQotI2lm ZGVmIE5PVEVSTUNBUAotc3RhdGljIGludCBub3Rlcm1jYXAgPSAxOwotI2Vsc2UKLXN0YXRpYyBp bnQgbm90ZXJtY2FwID0gMDsKLSNlbmRpZiAvKiBOT1RFUk1DQVAgKi8KLQotI2lmbmRlZiBOT0RJ U1BMQVkKLUNLVk9JRAotZnhkaW5pdCh4ZGlzcGxhKSBpbnQgeGRpc3BsYTsgewotI2lmbmRlZiBD T0hFUkVOVAotI2lmbmRlZiBPUzIKLSNpZm5kZWYgU1RSQVRVUwotICAgIGNoYXIgKnM7Ci0gICAg aW50IHgsIGR1bW15OwotCi0gICAgZGVidWcoRjEwMSwiZnhkaW5pdCB4ZGlzcGxhIiwiIix4ZGlz cGxhKTsKLSAgICBkZWJ1ZyhGMTAxLCJmeGRpbml0IGZ4ZF9pbml0ZWQiLCIiLGZ4ZF9pbml0ZWQp OwotCi0jaWZkZWYgSUtTRAotI2lmbmRlZiBOT1hGRVIKLSAgICAvKiBObyBjdXJzZXMgZm9yIElL U0QgKi8KLSAgICBpZiAoaW5zZXJ2ZXIpIHsKLSAgICAgICAgZmRpc3BsYSA9IFhZRkRfTjsKLSAg ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoZnhkX2luaXRlZCkgICAgICAgICAgICAgICAg ICAgICAvKiBPbmx5IGRvIHRoaXMgb25jZSAqLwotICAgICAgcmV0dXJuOwotI2VuZGlmIC8qIE5P WEZFUiAqLwotI2VuZGlmIC8qIElLU0QgKi8KLQotICAgIGlmICh4ZGlzcGxhID09IFhZRkRfUiB8 fCB4ZGlzcGxhID09IFhZRkRfUyB8fCB4ZGlzcGxhID09IFhZRkRfQikgewotCWlmICh4ZnJtc2cp IHsKLQkgICAgcHJpbnRmKCIlc1xuIix4ZnJtc2cpOwotCSAgICBtYWtlc3RyKCZ4ZnJtc2csTlVM TCk7Ci0JfQotICAgIH0KLQotI2lmZGVmIENLX0NVUlNFUwotI2lmZGVmIFZNUwotICAgIC8qIEZv cmNlIEJSSUVGIGluIEJhdGNoIGxvZ3MgKi8KLSAgICBpZiAoYmF0Y2ggJiYgKHhkaXNwbGEgPT0g WFlGRF9DIHx8IHhkaXNwbGEgPT0gWFlGRF9TKSkKLSAgICAgIHhkaXNwbGEgPSBYWUZEX0I7Ci0j ZWxzZQotICAgIGlmICh4ZGlzcGxhID09IFhZRkRfQyB8fCB4ZGlzcGxhID09IDk5OTkpIHsKLQot I2lmZGVmIERZTkFNSUMKLSAgICAgICAgaWYgKCF0cm1idWYpIHsKLS8qCi0gIEFsbG9jYXRlIHRn ZXRlbnQoKSBidWZmZXIuICBNYWtlIGl0IGJpZyAtLSBzb21lIHRlcm1jYXBzIGNhbiBiZSBodWdl OwotICB0Z2V0ZW50KCkgbWVycmlseSB3cml0ZXMgcGFzdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIs IGNhdXNpbmcgY29yZSBkdW1wcwotICBvciB3b3JzZS4KLSovCi0gICAgICAgICAgICB0cm1idWYg PSAoY2hhciAqKW1hbGxvYyhUUk1CVUZMKTsKLSAgICAgICAgICAgIGlmICghdHJtYnVmKSB7Ci0g ICAgICAgICAgICAgICAgbm90ZXJtY2FwID0gMTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAx LCJmeGRpbml0IG1hbGxvYyB0cm1idWYiLCJGQUlMRUQiLFRSTUJVRkwpOwotICAgICAgICAgICAg ICAgIGZkaXNwbGEgPSBYWUZEX1M7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg ICAgfQotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ4ZGluaXQgbWFs bG9jIHRybWJ1ZiIsIk9LIixUUk1CVUZMKTsKLSAgICAgICAgICAgIGRlYnVnKEYwMDEsImZ4ZGlu aXQgdHJtYnVmIiwiIix0cm1idWYpOwotICAgICAgICAgICAgbWVtc2V0KHRybWJ1ZiwnXDAnLChz aXplX3QpVFJNQlVGTCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAwLCJmeGRpbml0IG1lbXNldCBP SyIsIiIsMCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICB9Ci0jZW5kaWYgLyogRFlO QU1JQyAqLwotCi0gICAgICAgIGRlYnVnKEYxMDAsImZ4ZGluaXQgYmVmb3JlIGdldGVudihURVJN KSIsIiIsMCk7Ci0gICAgICAgIHMgPSBnZXRlbnYoIlRFUk0iKTsKLSAgICAgICAgZGVidWcoRjEx MCwiZnhkaW5pdCBhZnRlciBnZXRlbnYoVEVSTSkiLHMsMCk7Ci0gICAgICAgIGlmICghcykgcyA9 ICIiOwotICAgICAgICBpZiAoKnMpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ4ZGluaXQg YmVmb3JlIHRnZXRlbnQoKSIscywwKTsKLSAgICAgICAgICAgIHggPSB0Z2V0ZW50KHRybWJ1Zixz KTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ4ZGluaXQgdGdldGVudCIscyx4KTsKLSAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHggPSAwOwotICAgICAgICAgICAgbm90ZXJtY2FwID0g MTsKLSAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ4ZGluaXQgVEVSTSBudWxsIC0gbm8gdGdldGVu dCIscywwKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoeCA8IDEgJiYgIXF1aWV0ICYmICFiYWNr Z3JkCi0jaWZkZWYgVk1TCi0gICAgICAgICAgICAmJiAhYmF0Y2gKLSNlbmRpZiAvKiBWTVMgKi8K LSAgICAgICAgICAgICkgewotICAgICAgICAgICAgcHJpbnRmKCJXYXJuaW5nOiB0ZXJtaW5hbCB0 eXBlIHVua25vd246IFwiJXNcIlxuIixzKTsKLSNpZmRlZiBDT01NRU5UCi0JICAgIC8qIENvbmZ1 c2luZyAtIG5vYm9keSBrbm93cyB3aGF0IHRoaXMgbWVhbnMgKi8KLSAgICAgICAgICAgIHByaW50 ZigiU0NSRUVOIGNvbW1hbmQgd2lsbCB1c2UgQU5TSSBzZXF1ZW5jZXMuXG4iKTsKLSNlbmRpZiAv KiBDT01NRU5UICovCi0gICAgICAgICAgICBpZiAobG9jYWwpCi0gICAgICAgICAgICAgIHByaW50 ZigiRnVsbHNjcmVlbiBmaWxlIHRyYW5zZmVyIGRpc3BsYXkgZGlzYWJsZWQuXG4iKTsKLSAgICAg ICAgICAgIGZkaXNwbGEgPSBYWUZEX1M7Ci0gICAgICAgIH0KLSNpZm5kZWYgTVlDVVJTRVMKLSNp Zm5kZWYgQ0tfU01HCi0gICAgICAgIGNrX3Rlcm1zZXQoeCk7Ci0jZW5kaWYgLyogQ0tfU01HICov Ci0jZW5kaWYgLyogTVlDVVJTRVMgKi8KLSAgICAgICAgZnhkX2luaXRlZCA9IDE7Ci0gICAgfQot I2VuZGlmIC8qIENLX0NVUlNFUyAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2VuZGlmIC8qIFNUUkFU VVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBDT0hFUkVOVCAqLwotfQotI2VuZGlm IC8qIE5PRElTUExBWSAqLwotCi0jaWZkZWYgQ0tfQ1VSU0VTCi0jaWZkZWYgQ0tfU01HCi0vKgot ICBMb25nIHNlY3Rpb24gZm9yIFNjcmVlbiBNYW5hZ2VyIHN0YXJ0cyBoZXJlLi4uCi0gIEJ5IFdp bGxpYW0gQmFkZXIuCi0qLwotI2luY2x1ZGUgImNrdnZtcy5oIgotI2lmZGVmIE9MRF9WTVMKLSNp bmNsdWRlIDxzbWdkZWYuaD4gICAgICAgICAgICAgICAgICAgICAvKiB1c2UgdGhpcyBvbiBWQVgg QyAyLjQgKi8KLS8qICNpbmNsdWRlIDxzbWdtc2cuaD4gKi8KLSNlbHNlCi0jaW5jbHVkZSA8c21n JHJvdXRpbmVzLmg+ICAgICAgICAgICAgICAgLyogTWFydGluIFppbnNlciAqLwotI2VuZGlmIC8q IE9MRF9WTVMgKi8KLQotZXh0ZXJuIHVuc2lnbmVkIGludCB2bXNfc3RhdHVzOyAgICAgLyogVXNl ZCBmb3Igc3lzdGVtIHNlcnZpY2UgcmV0dXJuIHN0YXR1cyAqLwotCi1zdGF0aWMgbG9uZyBzbWdf cGFzdGVib2FyZF9pZCA9IC0xOyAgICAgLyogcGFzdGVib2FyZCBpZGVudGlmaWVyICovCi1zdGF0 aWMgbG9uZyBzbWdfZGlzcGxheV9pZCA9IC0xOyAgICAgICAgLyogZGlzcGxheSBpZGVudGlmaWVy ICovCi1zdGF0aWMgaW50IHNtZ19vcGVuID0gMDsgICAgICAgICAgICAgICAgLyogZmxhZyBpZiBz bWcgY3VycmVudCBvcGVuICovCi1zdGF0aWMgaW50IHNtZ19pbml0ZWQgPSAwOyAgICAgICAgICAg ICAgLyogZmxhZyBpZiBzbWcgaW5pdGlhbGl6ZWQgKi8KLQotI2lmZGVmIENPTU1FTlQKLSNkZWZp bmUgY2xydG9lb2woKSAgICAgIFNNRyRFUkFTRV9MSU5FKCZzbWdfZGlzcGxheV9pZCwgMCwgMCkK LQotI2RlZmluZSBjbGVhcigpICAgICAgICAgU01HJEVSQVNFX0RJU1BMQVkoJnNtZ19kaXNwbGF5 X2lkLCAwLCAwLCAwLCAwKQotCi0jZGVmaW5lIHRvdWNod2luKHNjcikgICBTTUckUkVQQUlOVF9T Q1JFRU4oJnNtZ19wYXN0ZWJvYXJkX2lkKQotCi0jZWxzZSAgLyogTm90IENPTU1FTlQgKi8KLQot I2RlZmluZSBjbHJ0b2VvbCgpICAgICAgc21nJGVyYXNlX2xpbmUoJnNtZ19kaXNwbGF5X2lkLCAw LCAwKQotCi0jZGVmaW5lIGNsZWFyKCkgICAgICAgICBzbWckZXJhc2VfZGlzcGxheSgmc21nX2Rp c3BsYXlfaWQsIDAsIDAsIDAsIDApCi0KLSNkZWZpbmUgdG91Y2h3aW4oc2NyKSAgIHNtZyRyZXBh aW50X3NjcmVlbigmc21nX3Bhc3RlYm9hcmRfaWQpCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0j ZGVmaW5lIGNsZWFyb2soY3Vyc2NyLG9rKSAgICAgICAgICAgICAgLyogTGV0IHdyZWZyZXNoKCkg ZG8gdGhlIHdvcmsgKi8KLQotI2RlZmluZSB3cmVmcmVzaChjdXJzcmMpIHRvdWNod2luKHNjcikK LQotc3RhdGljIHZvaWQKLW1vdmUocm93LCBjb2wpIGludCByb3csIGNvbDsgewotICAgIC8qIENo YW5nZSBmcm9tIDAtYmFzZWQgZm9yIGN1cnNlcyB0byAxLWJhc2VkIGZvciBTTUcgKi8KLSAgICBp ZiAoIXNtZ19vcGVuKQotICAgICAgcmV0dXJuOwotICAgICsrcm93OyArK2NvbDsKLSAgICBkZWJ1 ZyhGMTExLCJWTVMgc21nIG1vdmUiLGNraXRvYShyb3cpLGNvbCk7Ci0jaWZkZWYgQ09NTUVOVCAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFydGluIFppbnNlciAqLwotICAgIENIRUNLX0VS UigibW92ZTogc21nJHNldF9jdXJzb3JfYWJzIiwKLSAgICAgICAgICAgICAgU01HJFNFVF9DVVJT T1JfQUJTKCZzbWdfZGlzcGxheV9pZCwgJnJvdywgJmNvbCkpOwotI2Vsc2UKLSAgICBDSEVDS19F UlIoIm1vdmU6IHNtZyRzZXRfY3Vyc29yX2FicyIsCi0gICAgICAgICAgICAgIHNtZyRzZXRfY3Vy c29yX2Ficygmc21nX2Rpc3BsYXlfaWQsICZyb3csICZjb2wpKTsKLSNlbmRpZiAvKiBDT01NRU5U ICovCi0gICAgZGVidWcoRjEwMSwiVk1TIHNtZyBtb3ZlIHZtc19zdGF0dXMiLCIiLHZtc19zdGF0 dXMpOwotfQotCi0jaWZkZWYgVk1TX1Y0MAotI2RlZmluZSBPTERfVk1TCi0jZW5kaWYgLyogVk1T X1Y0MCAqLwotI2lmZGVmIFZNU19WNDIKLSNkZWZpbmUgT0xEX1ZNUwotI2VuZGlmIC8qIFZNU19W NDIgKi8KLSNpZmRlZiBWTVNfVjQ0Ci0jZGVmaW5lIE9MRF9WTVMKLSNlbmRpZiAvKiBWTVNfVjQ0 ICovCi0KLXN0YXRpYyBpbnQKLWluaXRzY3IoKSB7Ci0gICAgaW50IHJvd3MgPSAyNCwgY29scyA9 IDgwOwotICAgIGludCByb3cgPSAxLCBjb2wgPSAxOwotCi0gICAgZGVidWcoRjEwMSwiVk1TIGlu aXRzY3Igc21nX3Bhc3RlYm9hcmRfaWQgQSIsIiIsc21nX3Bhc3RlYm9hcmRfaWQpOwotCi0gICAg aWYgKHNtZ19wYXN0ZWJvYXJkX2lkID09IC0xKSB7IC8qIE9wZW4gdGhlIHNjcmVlbiAqLwotI2lm ZGVmIE9MRF9WTVMgICAgICAgICAgICAgICAgICAgICAvKiBOb3RlOiBSb3V0aW5lIGNhbGxzIGxv d2VyY2FzZWQgOS85NiAqLwotICAgICAgICBDSEVDS19FUlIoImluaXRzY3I6IHNtZyRjcmVhdGVf cGFzdGVib2FyZCIsCi0gICAgICAgICAgICAgICAgICBzbWckY3JlYXRlX3Bhc3RlYm9hcmQoJnNt Z19wYXN0ZWJvYXJkX2lkLCAwLCAwLCAwLCAwKSk7Ci0jZWxzZQotICAgICAgICAvKiBGb3IgVk1T IFY1LCBub3QgdGVzdGVkICovCi0gICAgICAgIENIRUNLX0VSUigiaW5pdHNjcjogc21nJGNyZWF0 ZV9wYXN0ZWJvYXJkIiwKLSAgICAgICAgICAgICAgICAgIHNtZyRjcmVhdGVfcGFzdGVib2FyZCgm c21nX3Bhc3RlYm9hcmRfaWQsIDAsIDAsIDAsIDAsIDApKTsKLSNlbmRpZiAvKiBPTERfVk1TICov Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsIlZNUyBpbml0c2NyIHNtZ19wYXN0ZWJvYXJkX2lkIEIi LCIiLHNtZ19wYXN0ZWJvYXJkX2lkKTsKLSAgICBpZiAoc21nX3Bhc3RlYm9hcmRfaWQgPT0gLTEp IHsKLQlwcmludGYoIj9FcnJvciBpbml0aWFsaXppbmcgZnVsbHNjcmVlbiBkaXNwbGF5XG4iKTsK LQlmZGlzcGxhID0gWFlGRF9TOwotCWRweWluaXQoKTsKLQlyZXR1cm4oMCk7Ci0gICAgfQotICAg IGRlYnVnKEYxMDEsIlZNUyBpbml0c2NyIHNtZ19kaXNwbGF5X2lkIiwiIixzbWdfZGlzcGxheV9p ZCk7Ci0gICAgaWYgKHNtZ19kaXNwbGF5X2lkID09IC0xKSB7ICAgICAgICAgLyogQ3JlYXRlIGEg ZGlzcGxheSB3aW5kb3cgKi8KLQotI2lmZGVmIENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIE1hcnRpbiBaaW5zZXIgKi8KLSAgICAgICAgQ0hFQ0tfRVJSKCJpbml0c2NyOiBzbWck Y3JlYXRlX3ZpcnR1YWxfZGlzcGxheSIsCi0gICAgICAgICAgICAgICAgICBTTUckQ1JFQVRFX1ZJ UlRVQUxfRElTUExBWSgmcm93cywgJmNvbHMsICZzbWdfZGlzcGxheV9pZCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDApKTsKLQotICAgICAgICAv KiBDb25uZWN0IHRoZSBkaXNwbGF5IHdpbmRvdyB0byB0aGUgc2NyZWVuICovCi0gICAgICAgIENI RUNLX0VSUigiaW5pdHNjcjogc21nJHBhc3RlX3ZpcnR1YWxfZGlzcGxheSIsCi0gICAgICAgICAg ICAgICAgICBTTUckUEFTVEVfVklSVFVBTF9ESVNQTEFZKCZzbWdfZGlzcGxheV9pZCwmc21nX3Bh c3RlYm9hcmRfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZyb3csJmNvbCkpOwotI2Vsc2UKLSAgICAgICAgQ0hFQ0tfRVJSKCJpbml0c2NyOiBzbWckY3Jl YXRlX3ZpcnR1YWxfZGlzcGxheSIsCi0gICAgICAgICAgICAgICAgICBzbWckY3JlYXRlX3ZpcnR1 YWxfZGlzcGxheSgmcm93cywgJmNvbHMsICZzbWdfZGlzcGxheV9pZCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDApKTsKLQotICAgICAgICAvKiBD b25uZWN0IHRoZSBkaXNwbGF5IHdpbmRvdyB0byB0aGUgc2NyZWVuICovCi0gICAgICAgIENIRUNL X0VSUigiaW5pdHNjcjogc21nJHBhc3RlX3ZpcnR1YWxfZGlzcGxheSIsCi0gICAgICAgICAgICAg ICAgICBzbWckcGFzdGVfdmlydHVhbF9kaXNwbGF5KCZzbWdfZGlzcGxheV9pZCwmc21nX3Bhc3Rl Ym9hcmRfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZy b3csJmNvbCkpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB9Ci0gICAgZGVidWcoRjEwMSwi Vk1TIGluaXRzY3Igc21nX29wZW4gQSIsIiIsc21nX29wZW4pOwotICAgIGlmICghc21nX29wZW4p IHsgICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IGEgYmF0Y2ggdXBkYXRlICovCi0gICAgICAg IHNtZ19vcGVuID0gMTsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIENIRUNLX0VSUigiaW5pdHNj cjogc21nJGJlZ2luX3Bhc3RlYm9hcmRfdXBkYXRlIiwKLSAgICAgICAgICAgICAgICAgIFNNRyRC RUdJTl9QQVNURUJPQVJEX1VQREFURSgmc21nX3Bhc3RlYm9hcmRfaWQpKTsKLSNlbHNlCi0gICAg ICAgIENIRUNLX0VSUigiaW5pdHNjcjogc21nJGJlZ2luX3Bhc3RlYm9hcmRfdXBkYXRlIiwKLSAg ICAgICAgICAgICAgICAgIHNtZyRiZWdpbl9wYXN0ZWJvYXJkX3VwZGF0ZSgmc21nX3Bhc3RlYm9h cmRfaWQpKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0JZGVidWcoRjEwMSwiVk1TIGluaXRzY3Ig c21nJGJlZ2luX3Bhc3RlYm9hcmRfdXBkYXRlIiwiIix2bXNfc3RhdHVzKTsKLSAgICB9Ci0gICAg ZGVidWcoRjEwMSwiVk1TIGluaXRzY3Igc21nX29wZW4gQiIsIiIsc21nX29wZW4pOwotICAgIHNt Z19pbml0ZWQgPSAxOwotICAgIHJldHVybigxKTsKLX0KLQotc3RhdGljIHZvaWQKLXJlZnJlc2go KSB7Ci0gICAgZGVidWcoRjEwMSwicmVmcmVzaCBzbWdfcGFzdGVib2FyZF9pZCIsIiIsc21nX3Bh c3RlYm9hcmRfaWQpOwotCi0gICAgaWYgKHNtZ19vcGVuID09IDAgfHwgc21nX3Bhc3RlYm9hcmRf aWQgPT0gLTEpCi0gICAgICByZXR1cm47Ci0KLSNpZmRlZiBDT01NRU5UICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBNYXJ0aW4gWmluc2VyICovCi0gICAgQ0hFQ0tfRVJSKCJyZWZyZXNoOiBz bWckZW5kX3Bhc3RlYm9hcmRfdXBkYXRlIiwKLSAgICAgICAgICAgICAgU01HJEVORF9QQVNURUJP QVJEX1VQREFURSgmc21nX3Bhc3RlYm9hcmRfaWQpKTsKLSAgICBDSEVDS19FUlIoInJlZnJlc2g6 IHNtZyRiZWdpbl9wYXN0ZWJvYXJkX3VwZGF0ZSIsCi0gICAgICAgICAgICAgIFNNRyRCRUdJTl9Q QVNURUJPQVJEX1VQREFURSgmc21nX3Bhc3RlYm9hcmRfaWQpKTsKLSNlbHNlCi0gICAgQ0hFQ0tf RVJSKCJyZWZyZXNoOiBzbWckZW5kX3Bhc3RlYm9hcmRfdXBkYXRlIiwKLSAgICAgICAgICAgICAg c21nJGVuZF9wYXN0ZWJvYXJkX3VwZGF0ZSgmc21nX3Bhc3RlYm9hcmRfaWQpKTsKLSAgICBDSEVD S19FUlIoInJlZnJlc2g6IHNtZyRiZWdpbl9wYXN0ZWJvYXJkX3VwZGF0ZSIsCi0gICAgICAgICAg ICAgIHNtZyRiZWdpbl9wYXN0ZWJvYXJkX3VwZGF0ZSgmc21nX3Bhc3RlYm9hcmRfaWQpKTsKLSNl bmRpZiAvKiBDT01NRU5UICovCi19Ci0KLXN0YXRpYyB2b2lkCi1lbmR3aW4oKSB7Ci0gICAgaWYg KCFzbWdfb3BlbikKLSAgICAgIHJldHVybjsKLQotICAgIHNtZ19vcGVuID0gMDsKLQotI2lmZGVm IENPTU1FTlQKLSAgICBDSEVDS19FUlIoImVuZHdpbjogc21nJGVuZF9wYXN0ZWJvYXJkX3VwZGF0 ZSIsCi0gICAgICAgICAgICAgIFNNRyRFTkRfUEFTVEVCT0FSRF9VUERBVEUoJnNtZ19wYXN0ZWJv YXJkX2lkKSk7Ci0jZWxzZQotICAgIENIRUNLX0VSUigiZW5kd2luOiBzbWckZW5kX3Bhc3RlYm9h cmRfdXBkYXRlIiwKLSAgICAgICAgICAgICAgc21nJGVuZF9wYXN0ZWJvYXJkX3VwZGF0ZSgmc21n X3Bhc3RlYm9hcmRfaWQpKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLSAgICBtb3ZlKDIyLCAw KTsKLQotI2lmZGVmIENPTU1FTlQKLS8qCi0gIFRoZXNlIGNhbGxzIGNsZWFyIHRoZSBzY3JlZW4u Ci0gIChjb252ZXJ0IHJvdXRpbmUgY2FsbHMgdG8gbG93ZXJjYXNlIC0gTWFydGluIFppbnNlcikK LSovCi0gICAgQ0hFQ0tfRVJSKCJlbmR3aW46IHNtZyRkZWxldGVfdmlydHVhbF9kaXNwbGF5IiwK LSAgICAgICAgICAgICAgU01HJERFTEVURV9WSVJUVUFMX0RJU1BMQVkoJnNtZ19kaXNwbGF5X2lk KSk7Ci0gICAgc21nX2Rpc3BsYXlfaWQgPSAtMTsKLQotICAgIENIRUNLX0VSUigiZW5kd2luOiBz bWckZGVsZXRlX3Bhc3RlYm9hcmQiLAotICAgICAgICAgICAgICBTTUckREVMRVRFX1BBU1RFQk9B UkQoJnNtZ19wYXN0ZWJvYXJkX2lkLCAwKSk7Ci0gICAgc21nX3Bhc3RlYm9hcmRfaWQgPSAtMTsK LSNlbmRpZiAvKiBDT01NRU5UICovCi19Ci0KLSNpZmRlZiBDT01NRU5UCi0vKiBERUNDIDYuMiBz Y3JlYW1zIGJsb29keSBtdXJkZXIgYWJvdXQgcHJpbnR3ICgibm90IGVub3VnaCBhcmdzIikgKi8K LS8qIGJ1dCBhZGRpbmcgdGhlIGZvbGxvd2luZyBwcm90b3R5cGUgb25seSBtYWtlcyBpdCBob2xs ZXIgbG91ZGVyLiAqLwotI2lmZGVmIF9fREVDQwotLyogInZhcmFyZ3MiIHByb3RvdHlwZSBmb3Ig cHJpbnR3ICovCi1fUFJPVE9UWVAoc3RhdGljIGludCBwcmludHcsKGNoYXIgKiwgLi4uKSk7Ci0j ZW5kaWYgLyogX19ERUNDICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0jaWZkZWYgX19ERUND Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci1fUFJPVE9UWVAoc3RhdGljIHZvaWQgcHJpbnR3LChjaGFy ICosIC4uLikpOwotc3RhdGljIHZvaWQKLXByaW50dyhjaGFyICpzdHIsLi4uKSB7Ci0gICAgY2hh ciBidWZbMjU1XTsKLSAgICB2YV9saXN0IGFwOwotICAgICRERVNDUklQVE9SKHRleHRfZHNjLCAw KTsKLSAgICB0ZXh0X2RzYy5kc2MkYV9wb2ludGVyPWJ1ZjsKLSAgICBpZiAoIXNtZ19vcGVuKQot ICAgICAgcmV0dXJuOwotICAgIHZhX3N0YXJ0KGFwLHN0cik7Ci0gICAgdGV4dF9kc2MuZHNjJHdf bGVuZ3RoID0gdnNwcmludGYoYnVmLCBzdHIsIGFwKTsKLSAgICB2YV9lbmQoYXApOwotICAgIENI RUNLX0VSUigicHJpbnR3OiBzbWckcHV0X2NoYXJzIiwKLSAgICAgICAgICAgICAgc21nJHB1dF9j aGFycygmc21nX2Rpc3BsYXlfaWQsICZ0ZXh0X2RzYywgMCwgMCwgMCwgMCwgMCkpOwotfQotI2Vs c2UKLXN0YXRpYyB2b2lkCi1wcmludHcoc3RyLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywg YTgpCi0gICAgY2hhciAqc3RyOwotICAgIGxvbmcgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcs IGE4OwotLyogcHJpbnR3ICovIHsKLSAgICBjaGFyIGJ1ZlsyNTVdOwotICAgICRERVNDUklQVE9S KHRleHRfZHNjLCAwKTsKLSAgICBpZiAoIXNtZ19vcGVuKQotICAgICAgcmV0dXJuOwotICAgIHRl eHRfZHNjLmRzYyRhX3BvaW50ZXI9YnVmOwotICAgIHRleHRfZHNjLmRzYyR3X2xlbmd0aCA9IHNw cmludGYoYnVmLCBzdHIsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCk7Ci0gICAgQ0hF Q0tfRVJSKCJwcmludHc6IHNtZyRwdXRfY2hhcnMiLAotICAgICAgICAgICAgICBzbWckcHV0X2No YXJzKCZzbWdfZGlzcGxheV9pZCwgJnRleHRfZHNjLCAwLCAwLCAwLCAwLCAwKSk7Ci19Ci0jZW5k aWYgLyogX19ERUNDICovCi0KLSNkZWZpbmUgQ0tfQ1VSUE9TCi1pbnQKLWNrX2N1cnBvcyhyb3cs IGNvbCkgewotICAgIGRlYnVnKEYxMTEsIlZNUyBzbWcgY2tfY3VycG9zIixja2l0b2Eocm93KSxj b2wpOwotICAgIGlmICghc21nX2luaXRlZCB8fCAhc21nX29wZW4pIHsKLSAgICAgICAgaW5pdHNj cigpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTAxLCJWTVMgc21nIGN1cnBvcyBzbWdfb3BlbiIsIiIs c21nX29wZW4pOwotICAgIGlmICghc21nX29wZW4pCi0gICAgICByZXR1cm4oMCk7Ci0gICAgZGVi dWcoRjExMSwiVk1TIHNtZyBja19jdXJwb3MiLGNraXRvYShyb3ctMSksY29sLTEpOwotICAgIG1v dmUocm93IC0gMSwgY29sIC0gMSk7ICAgICAgICAgICAgIC8qIFNNRyBpcyAwLWJhc2VkICovCi0g ICAgcmVmcmVzaCgpOwotICAgIC8qIGVuZHdpbigpOyAqLwotICAgIHJldHVybigwKTsKLX0KLQot aW50Ci1ja19jbHMoKSB7Ci0gICAgZGVidWcoRjEwMSwiVk1TIHNtZyBja19jbHMgc21nX2luaXRl ZCIsIiIsc21nX2luaXRlZCk7Ci0gICAgaWYgKCFzbWdfaW5pdGVkIHx8ICFzbWdfb3Blbikgewot ICAgICAgICBpbml0c2NyKCk7Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsIlZNUyBzbWcgY2tfY2xz IHNtZ19vcGVuIiwiIixzbWdfb3Blbik7Ci0gICAgaWYgKCFzbWdfb3BlbikKLSAgICAgIHJldHVy bigwKTsKLSAgICBjbGVhcigpOwotICAgIHJlZnJlc2goKTsKLSAgICAvKiBlbmR3aW4oKTsgKi8K LSAgICByZXR1cm4oMCk7Ci19Ci0KLWludAotY2tfY2xlb2woKSB7Ci0gICAgZGVidWcoRjEwMSwi Vk1TIHNtZyBja19jbGVvbCBzbWdfaW5pdGVkIiwiIixzbWdfaW5pdGVkKTsKLSAgICBpZiAoIXNt Z19pbml0ZWQgfHwgIXNtZ19vcGVuKSB7Ci0gICAgICAgIGluaXRzY3IoKTsKLSAgICB9Ci0gICAg ZGVidWcoRjEwMSwiVk1TIHNtZyBja19jbGVvbCBzbWdfb3BlbiIsIiIsc21nX29wZW4pOwotICAg IGlmICghc21nX29wZW4pCi0gICAgICByZXR1cm4oMCk7Ci0gICAgY2xydG9lb2woKTsKLSAgICBy ZWZyZXNoKCk7Ci0gICAgLyogZW5kd2luKCk7ICovCi0gICAgcmV0dXJuKDApOwotfQotI2VuZGlm IC8qIENLX1NNRyAqLwotCi0jaWZkZWYgTVlDVVJTRVMKLS8qCi0gIERvLWl0LXlvdXJzZWxmIGN1 cnNlcyBpbXBsZW1lbnRhdGlvbiBmb3IgVk1TLCBPUy8yIGFuZCBvdGhlciBBTlNJL1ZULTEwMCdz LgotICBTdXBwb3J0cyBvbmx5IHRoZSBWVDUyIGFuZCBWVDF4eCAoYW5kIGxhdGVyIFZUMnh4LzN4 eC80eHgpIHRlcm1pbmFscy4KLSAgQnkgVGVycnkgS2VubmVkeSwgU3QgUGV0ZXJzIENvbGxlZ2Uu Ci0KLSAgRmlyc3QsIHNvbWUgc3R1ZmYgd2UgY2FuIGp1c3QgaWdub3JlOgotKi8KLQotc3RhdGlj IGludAotdG91Y2h3aW4oeCkgaW50IHg7IHsKLSAgICByZXR1cm4oMCk7Ci19Ci1zdGF0aWMgaW50 Ci1pbml0c2NyKCkgewotICAgIHJldHVybigwKTsKLX0KLXN0YXRpYyBpbnQKLXJlZnJlc2goKSB7 Ci0gICAgcmV0dXJuKDApOwotfQotc3RhdGljIGludAotZW5kd2luKCkgewotICAgIHJldHVybigw KTsKLX0KLQotLyoKLSAqIE5vdywgc29tZSBzdHVmZiB3ZSBuZWVkIHRvIGRvOgotICovCi0KLV9Q Uk9UT1RZUCggaW50IG1vdmUsIChpbnQsIGludCkgKTsKLSNpZm5kZWYgT1MyCi1pbnQKLW1vdmUo cm93LCBjb2wpIGludCByb3csIGNvbDsgewotICAgIGlmIChpc3Z0NTIpCi0gICAgICBwcmludGYo IlwwMzNZJWMlYyIsIHJvdyArIDAzNywgY29sICsgMDM3KTsKLSAgICBlbHNlCi0gICAgICBwcmlu dGYoIlwwMzNbJWQ7JWRIIiwgcm93ICsgMSwgY29sICsgMSk7Ci0gICAgcmV0dXJuKDApOwotfQot Ci1pbnQKLWNsZWFyKCkgewotICAgIG1vdmUoMCwwKTsKLSAgICBpZiAoaXN2dDUyKQotICAgICAg cHJpbnRmKCJcMDMzSiIpOwotICAgIGVsc2UKLSAgICAgIHByaW50ZigiXDAzM1tKIik7Ci0gICAg cmV0dXJuKDApOwotfQotCi1pbnQKLWNscnRvZW9sKCkgewotICAgIGlmIChpc3Z0NTIpCi0gICAg ICBwcmludGYoIlwwMzNLIik7Ci0gICAgZWxzZQotICAgICAgcHJpbnRmKCJcMDMzW0siKTsKLSAg ICByZXR1cm4oMCk7Ci19Ci0KLSNkZWZpbmUgQ0tfQ1VSUE9TCi1pbnQKLWNrX2NscygpIHsKLSAg ICByZXR1cm4oY2xlYXIoKSk7Ci19Ci0KLWludAotY2tfY2xlb2woKSB7Ci0gICAgcmV0dXJuKGNs cnRvZW9sKCkpOwotfQotCi1pbnQKLWNrX2N1cnBvcyhyb3csIGNvbCkgaW50IHJvdywgY29sOyB7 Ci0gICAgbW92ZShyb3csIGNvbCk7Ci0gICAgcmV0dXJuKDApOwotfQotCi0jZWxzZSAvKiBPUzIg Ki8KLS8qIFdpbmRvd3MgTlQgYW5kIFdpbmRvd3MgOTUgZG8gbm90IHByb3ZpZGUgQU5TSSBlbXVs YXRpb24gKi8KLS8qIFRoZXJlZm9yZSB3ZSBtaWdodCBhcyB3ZWxsIG5vdCB1c2UgaXQgZm9yIE9T LzIgZWl0aGVyICAgKi8KLQotaW50Ci1tb3ZlKHJvdywgY29sKSBpbnQgcm93LCBjb2w7IHsKLSNp Zm5kZWYgT05FVEVSTVVQRAotICAgIFNldEN1clBvcyhyb3csIGNvbCk7Ci0jZW5kaWYgLyogT05F VEVSTVVQRCAqLwotICAgIGxnb3RveHkoIFZDTUQsIGNvbCsxLCByb3crMSk7Ci0gICAgVnNjcm5J c0RpcnR5KFZDTUQpOwotICAgIHJldHVybigwKTsKLX0KLQotaW50Ci1jbGVhcigpIHsKLSAgICB2 aW9jZWxsIGNlbGw7Ci0gICAgbW92ZSgwLDApOwotI2lmZGVmIE9ORVRFUk1VUEQKLSAgICBpZiAo VnNjcm5HZXRCdWZmZXJTaXplKFZDTUQpID4gMCkgewotICAgICAgICBWc2NyblNjcm9sbChWQ01E LCBVUFdBUkQsIDAsCi0gICAgICAgICAgICAgICAgICAgIFZzY3JuR2V0SGVpZ2h0KFZDTUQpLSgx KSwKLSAgICAgICAgICAgICAgICAgICAgVnNjcm5HZXRIZWlnaHQoVkNNRCktKDApLCBUUlVFLCBD SFJfU1ApOwotICAgICAgICBjbGVhcnRlcm1zY3JlZW4oVkNNRCk7Ci0gICAgfQotI2Vsc2UKLSAg ICBjZWxsLmMgPSAnICc7Ci0gICAgY2VsbC5hID0gY29sb3JjbWQ7Ci0gICAgV3J0TkNlbGwoY2Vs bCwgY21kX3Jvd3MgKiBjbWRfY29scywgMCwgMCk7Ci0jZW5kaWYgLyogT05FVEVSTVVQRCAqLwot ICAgIHJldHVybigwKTsKLX0KLQotaW50Ci1jbHJ0b2VvbCgpIHsKLSAgICBVU0hPUlQgcm93LCBj b2w7Ci0gICAgdmlvY2VsbCBjZWxsOwotCi0gICAgY2VsbC5jID0gJyAnOwotICAgIGNlbGwuYSA9 IGNvbG9yY21kOwotI2lmbmRlZiBPTkVURVJNVVBECi0gICAgR2V0Q3VyUG9zKCZyb3csICZjb2wg KTsKLSAgICBXcnROQ2VsbChjZWxsLCBjbWRfY29scyAtIGNvbCAtMSwgcm93LCBjb2wpOwotI2Vu ZGlmIC8qIE9ORVRFUk1VUEQgKi8KLSAgICBjbHJ0b2VvbG4oVkNNRCxDSFJfU1ApOwotICAgIHJl dHVybigwKTsKLX0KLQotI2RlZmluZSBDS19DVVJQT1MKLWludAotY2tfY3VycG9zKHJvdywgY29s KSBpbnQgcm93LCBjb2w7IHsKLSAgICBtb3ZlKHJvdywgY29sKTsKLSAgICByZXR1cm4oMCk7Ci19 Ci0KLWludAotY2tfY2xzKCkgewotICAgIHJldHVybihjbGVhcigpKTsKLX0KLQotaW50Ci1ja19j bGVvbCgpIHsKLSAgICByZXR1cm4oY2xydG9lb2woKSk7Ci19Ci0KLSNlbmRpZiAvKiBPUzIgKi8K LSNlbmRpZiAvKiBNWUNVUlNFUyAqLwotCi0jaWZuZGVmIE5PVEVSTUNBUAotI2lmbmRlZiBDS19D VVJQT1MKLSNkZWZpbmUgQ0tfQ1VSUE9TCi0KLS8qIFRlcm1jYXAvVGVybWluZm8gc2VjdGlvbiAq LwotCi1zdGF0aWMgY2hhciBjdXJfY2xzWzMyXSA9IHsgTlVMLCBOVUwgfTsKLXN0YXRpYyBjaGFy IGN1cl9jbGVvbFszMl0gPSB7IE5VTCwgTlVMIH07Ci1zdGF0aWMgY2hhciBjdXJfY21bNjRdID0g eyBOVUwsIE5VTCB9Owotc3RhdGljIGNoYXIgdGdzYnVmWzEyOF0gPSB7IE5VTCwgTlVMIH07Ci0K LXN0YXRpYwotI2lmZGVmIENLX0FOU0lDCi12b2lkCi0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLWNr X3Rlcm1zZXQoeCkgaW50IHg7IHsKLSAgICBjdXJfY2xzWzBdID0gTlVMOwotICAgIGN1cl9jbGVv bFswXSA9IE5VTDsKLSAgICBjdXJfY21bMF0gPSBOVUw7Ci0jaWZkZWYgdGdldGVudAotICAgIGRl YnVnKEYxMDAsInRnZXRlbnQgaXMgYSBtYWNybyIsIiIsMCk7Ci0jZW5kaWYgLyogdGdldGVudCAq LwotI2lmZGVmIHRnZXRzdHIKLSAgICBkZWJ1ZyhGMTAwLCJ0Z2V0c3RyIGlzIGEgbWFjcm8iLCIi LDApOwotI2VuZGlmIC8qIHRnZXRzdHIgKi8KLSNpZmRlZiB0cHV0cwotICAgIGRlYnVnKEYxMDAs InRwdXRzIGlzIGEgbWFjcm8iLCIiLDApOwotI2VuZGlmIC8qIHRwdXRzICovCi0jaWZkZWYgdGdv dG8KLSAgICBkZWJ1ZyhGMTAwLCJ0Z290byBpcyBhIG1hY3JvIiwiIiwwKTsKLSNlbmRpZiAvKiB0 Z290byAqLwotI2lmZGVmIE5PVEVSTUNBUAotICAgIC8qIHRnZXRzdHIoKSBnZXRzIGEgc2VnbWVu dGF0aW9uIGZhdWx0IG9uIE9TRi8xICovCi0gICAgZGVidWcoRjEwMCwiY2tfdGVybXNldCBOT1RF Uk1DQVAiLCIiLDApOwotI2Vsc2UKLSAgICBpZiAobm90ZXJtY2FwKSB7Ci0gICAgICAgIGRlYnVn KEYxMDAsImNrX3Rlcm1zZXQgbm90ZXJtY2FwIiwiIiwwKTsKLSAgICAgICAgcmV0dXJuOwotICAg IH0KLSAgICBkZWJ1ZyhGMTAxLCJja190ZXJtc2V0IHgiLCIiLHgpOwotICAgIGlmICh4ID4gMCkg ewotICAgICAgICBjaGFyICogYnA7Ci0gICAgICAgIGJwID0gdGdzYnVmOwotICAgICAgICAqYnAg PSBOVUw7Ci0gICAgICAgIGRlYnVnKEYxMTAsImNrX3Rlcm1zZXQgY2FsbGluZyB0Z2V0c3RyIiwi Y2wiLDApOwotICAgICAgICBpZiAodGdldHN0cigiY2wiLCAmYnApKSB7ICAgICAgIC8qIEdldCBj bGVhci1zY3JlZW4gY29kZSAqLwotICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfdGVybXNldCB0 Z2V0c3RyIGNsIix0Z3NidWYsIiIpOwotICAgICAgICAgICAgaWYgKChpbnQpc3RybGVuKHRnc2J1 ZikgPCAzMikKLSAgICAgICAgICAgICAgY2tzdHJuY3B5KGN1cl9jbHMsdGdzYnVmLDMyKTsKLSAg ICAgICAgfSBlbHNlCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgICBicCA9IHRnc2J1ZjsKLSAg ICAgICAgaWYgKHRnZXRzdHIoImNlIiwgJmJwKSkgeyAgICAgICAvKiBHZXQgY2xlYXItdG8tZW5k LW9mLWxpbmUgY29kZSAqLwotICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfdGVybXNldCB0Z2V0 c3RyIGNlIix0Z3NidWYsIiIpOwotICAgICAgICAgICAgaWYgKChpbnQpc3RybGVuKHRnc2J1Zikg PCAzMikKLSAgICAgICAgICAgICAgY2tzdHJuY3B5KGN1cl9jbGVvbCx0Z3NidWYsMzIpOwotICAg ICAgICB9IGVsc2UKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJwID0gdGdzYnVmOwotICAg ICAgICBpZiAodGdldHN0cigiY20iLCAmYnApKSB7ICAgICAgIC8qIEdldCBjdXJzb3ItbW92ZW1l bnQgY29kZSAqLwotICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfdGVybXNldCB0Z2V0c3RyIGNt Iix0Z3NidWYsIiIpOwotICAgICAgICAgICAgaWYgKChpbnQpc3RybGVuKHRnc2J1ZikgPCA2NCkK LSAgICAgICAgICAgICAgY2tzdHJuY3B5KGN1cl9jbSx0Z3NidWYsNjQpOwotICAgICAgICB9IGVs c2UKLSAgICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmIC8qIE5PVEVSTUNBUCAqLwotfQot Ci0jaWZuZGVmIFRQVVRTRk5UWVBFCi0jaWZkZWYgVFBVVFNJU1ZPSUQKLSNkZWZpbmUgVFBVVFNG TlRZUEUgdm9pZAotI2Vsc2UKLSNkZWZpbmUgVFBVVFNGTlRZUEUgaW50Ci0jZW5kaWYgLyogVFBV VFNJU1ZPSUQgKi8KLSNlbmRpZiAvKiBUUFVUU0ZOVFlQRSAqLwotCi0jaWZuZGVmIFRQVVRTQVJH VFlQRQotI2lmZGVmIEhQVVg5Ci0jZGVmaW5lIFRQVVRTQVJHVFlQRSBjaGFyCi0jZWxzZQotI2lm ZGVmIEhQVVgxMAotI2RlZmluZSBUUFVUU0FSR1RZUEUgY2hhcgotI2Vsc2UKLSNkZWZpbmUgVFBV VFNBUkdUWVBFIGludAotI2VuZGlmIC8qIEhQVVgxMCAqLwotI2VuZGlmIC8qIEhQVVg5ICovCi0j ZW5kaWYgLyogVFBVVFNBUkdUWVBFICovCi0KLXN0YXRpYyBUUFVUU0ZOVFlQRQotI2lmZGVmIENL X0FOU0lDCi1ja19vdXRjKFRQVVRTQVJHVFlQRSB4KQotI2Vsc2UKLWNrX291dGMoeCkgVFBVVFNB UkdUWVBFIHg7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBUbyBzYXRpc2Z5IHRwdXRzKCkgYXJnMyBwcm90b3R5cGUgKi8K LSAgICBpbnQgcmM7Ci0gICAgY2hhciBjOwotICAgIGMgPSAoY2hhcikgeDsKLSAgICByYyA9IChp bnNlcnZlcikgPyB0dG9jKGMpIDogY29ub2MoYyk7Ci0jaWZuZGVmIFRQVVRTSVNWT0lECi0gICAg cmV0dXJuKHJjKTsKLSNlbmRpZiAvKiBUUFVUU0lTVk9JRCAqLwotfQotCi1pbnQKLWNrX2N1cnBv cyhyb3csIGNvbCkgaW50IHJvdywgY29sOyB7Ci0jaWZkZWYgQ0tfQU5TSUMKLSAgICBUUFVUU0ZO VFlQRSAoKmZuKShUUFVUU0FSR1RZUEUpOwotI2Vsc2UKLSAgICBUUFVUU0ZOVFlQRSAoKmZuKSgp OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0gICAgaWYgKCFmeGRfaW5pdGVkKQotICAgICAgZnhk aW5pdCg5OTk5KTsKLSAgICBpZiAoIWN1cl9jbVswXSkgeyAgICAgICAgICAgICAgICAgICAvKiBX ZSBkb24ndCBoYXZlIGVzY2FwZSBzZXF1ZW5jZXMgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAg IHJldHVybigtMSk7ICAgICAgICAgICAgICAgICAgICAgLyogRG8gbm90aGluZyAqLwotI2Vsc2UK LSAgICAgICAgLyogQm90aCBDLUtlcm1pdCdzIFNDUkVFTiBjb21tYW5kIGFuZCBBTlNJL1ZUMTAw IGFyZSAxLWJhc2VkICovCi0gICAgICAgIHByaW50ZigiXDAzM1slZDslZEgiLCByb3csIGNvbCk7 IC8qIE9yIGRlZmF1bHQgdG8gQU5TSSAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB9IGVs c2UgewotICAgICAgICBmbiA9IGNrX291dGM7Ci0gICAgICAgIC8qIHRlcm1jYXAvdGVybWluZm8g aXMgMC1iYXNlZCAqLwotICAgICAgICB0cHV0cygKLSNpZmRlZiBUUFVUU0FSRzFDT05TVAotICAg ICAgICAgICAgICAoY29uc3QgY2hhciAqKQotI2VuZGlmIC8qIFRQVVRTQVJHMUNPTlNUICovCi0g ICAgICAgICAgICAgIHRnb3RvKGN1cl9jbSxjb2wtMSxyb3ctMSksMSxmbik7Ci0gICAgfQotICAg IHJldHVybigwKTsKLX0KLQotaW50Ci1ja19jbHMoKSB7Ci0jaWZkZWYgQ0tfQU5TSUMKLSAgICBU UFVUU0ZOVFlQRSAoKmZuKShUUFVUU0FSR1RZUEUpOwotI2Vsc2UKLSAgICBUUFVUU0ZOVFlQRSAo KmZuKSgpOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi0gICAgaWYgKCFmeGRfaW5pdGVkKQotICAg ICAgZnhkaW5pdCg5OTk5KTsKLSAgICBpZiAoIWN1cl9jbHNbMF0pIHsgICAgICAgICAgICAgICAg ICAvKiBJZiB3ZSBkb24ndCBoYXZlIGVzY2FwZSBzZXF1ZW5jZXMgKi8KLSNpZmRlZiBDT01NRU5U Ci0gICAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAgICAgICAgLyogRG8gbm90aGluZyAq LwotI2Vsc2UKLSAgICAgICAgcHJpbnRmKCJcMDMzWztIXDAzM1sySiIpOyAgICAgICAvKiBPciBk ZWZhdWx0IHRvIEFOU0kgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgfSBlbHNlIHsKLSAg ICAgICAgZm4gPSBja19vdXRjOwotICAgICAgICBkZWJ1ZyhGMTExLCJja19jbHMgMiIsY3VyX2Ns cyxmeGRfaW5pdGVkKTsKLSAgICAgICAgdHB1dHMoY3VyX2NscyxjbWRfcm93cyxmbik7Ci0gICAg fQotICAgIHJldHVybigwKTsKLX0KLQotaW50Ci1ja19jbGVvbCgpIHsKLSNpZmRlZiBDS19BTlNJ QwotICAgIFRQVVRTRk5UWVBFICgqZm4pKFRQVVRTQVJHVFlQRSk7Ci0jZWxzZQotICAgIFRQVVRT Rk5UWVBFICgqZm4pKCk7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLSAgICBpZiAoIWZ4ZF9pbml0 ZWQpCi0gICAgICBmeGRpbml0KDk5OTkpOwotICAgIGlmICghY3VyX2NsZW9sWzBdKSB7ICAgICAg ICAgICAgICAgIC8qIElmIHdlIGRvbid0IGhhdmUgZXNjYXBlIHNlcXVlbmNlcyAqLwotI2lmZGVm IENPTU1FTlQKLSAgICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgICAgICAgICAvKiBEbyBu b3RoaW5nICovCi0jZWxzZQotICAgICAgICBwcmludGYoIlwwMzNbSyIpOyAgICAgICAgICAgICAg IC8qIE9yIHVzZSBBTlNJICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIH0gZWxzZSB7Ci0g ICAgICAgIGZuID0gY2tfb3V0YzsKLSAgICAgICAgdHB1dHMoY3VyX2NsZW9sLDEsZm4pOwotICAg IH0KLSAgICByZXR1cm4oMCk7Ci19Ci0jZW5kaWYgLyogQ0tfQ1VSUE9TICovCi0jZWxzZQotc3Rh dGljIHZvaWQKLWNrX3Rlcm1zZXQoeCkgaW50IHg7IHsKLSAgICBpZiAoeCkgcmV0dXJuOwotfQot I2VuZGlmIC8qIE5PVEVSTUNBUCAqLwotCi0jaWZuZGVmIENLX0NVUlBPUwotI2RlZmluZSBDS19D VVJQT1MKLWludAotY2tfY2xzKCkgewotICAgIHByaW50ZigiXDAzM1s7SFwwMzNbMkoiKTsKLSAg ICByZXR1cm4oMCk7Ci19Ci0KLWludAotY2tfY2xlb2woKSB7Ci0gICAgcHJpbnRmKCJcMDMzW0si KTsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLWludAotY2tfY3VycG9zKHJvdywgY29sKSBpbnQgcm93 LCBjb2w7IHsKLSAgICBwcmludGYoIlwwMzNbJWQ7JWRIIiwgcm93LCBjb2wpOwotICAgIHJldHVy bigwKTsKLX0KLSNlbmRpZiAvKiBDS19DVVJQT1MgKi8KLQotCi0jaWZuZGVmIE5PWEZFUgotc3Rh dGljIGludCBjaW5pdCA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIGN1cnNlcyBp bml0J2QgKi8KLXN0YXRpYyBpbnQgY2VuZHcgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBlbmR3 aW4oKSB3YXMgY2FsbGVkICovCi0KLXN0YXRpYwotI2lmZGVmIENLX0FOU0lDICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEJlY2F1c2UgVk9JRCB1c2VkIGJ5IGN1cnNlcy5oICovCi12b2lkCi0j ZWxzZQotI2lmZGVmIE1ZQ1VSU0VTCi1WT0lECi0jZWxzZQotaW50Ci0jZW5kaWYgLyogTVlDVVJT RVMgKi8KLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotI2lmZGVmIENLX0FOU0lDICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFVwZGF0ZSAlIHRyYW5zZmVyZWQgYW5kICUgYmFyICovCi11cGRwY3Qo bG9uZyBvbGQsIGxvbmcgbmV3KQotI2Vsc2UgLyogQ0tfQU5TSUMgKi8KLXVwZHBjdChvbGQsIG5l dykgbG9uZyBvbGQsIG5ldzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogdXBkcGN0ICovIHsK LSNpZmRlZiBDT01NRU5UCi0gICAgaW50IG0sIG47Ci0gICAgbW92ZShDV19QQ0QsMjIpOwotICAg IHByaW50dygiJWxkIiwgbmV3KTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgIEt1aVNl dFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfUENELCAobG9uZykgbmV3KTsK LSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0jaWZkZWYgQ0tfUENUX0JBUgot ICAgIGlmICh0aGVybW9tZXRlcikgewotICAgICAgICBpZiAob2xkID4gbmV3KSB7Ci0gICAgICAg ICAgICBvbGQgPSAwOwotICAgICAgICAgICAgbW92ZShDV19QQ0QsIDI2KTsKLSAgICAgICAgICAg IGNscnRvZW9sKCk7Ci0gICAgICAgIH0KLSAgICAgICAgbSA9IG9sZC8yOwotICAgICAgICBtb3Zl KENXX1BDRCwgMjYgKyBtKTsKLSAgICAgICAgbiA9IG5ldyAvIDIgLSBtOwotI2lmbmRlZiBPUzIK LSAgICAgICAgd2hpbGUgKG4gPiAwKSB7Ci0gICAgICAgICAgICBpZiAoKG0gKyAxKSAlIDUgPT0g MCkKLSAgICAgICAgICAgICAgcHJpbnR3KCIqIik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg ICAgICAgIHByaW50dygiPSIpOwotICAgICAgICAgICAgbSsrOwotICAgICAgICAgICAgbi0tOwot ICAgICAgICB9Ci0gICAgICAgIGlmIChuZXcgJSAyICE9IDApIHByaW50dygiLSIpOwotICAgICAg ICAvKiBtb3ZlKENXX1BDRCwgMjIrNTMpOyAqLwotI2Vsc2UgLyogT1MyICovCi0gICAgICAgIHdo aWxlIChuID4gMCkgewotICAgICAgICAgICAgcHJpbnR3KCIlYyIsICdcMzMzJyk7Ci0gICAgICAg ICAgICBtKys7IG4tLTsKLSAgICAgICAgfQotICAgICAgICBpZiAobmV3ICUgMiAhPSAwKQotICAg ICAgICAgIHByaW50dygiJWMiLCAnXDI2MScpOwotI2VuZGlmIC8qIE9TMiAqLwotICAgIH0KLSNl bmRpZiAvKiBDS19QQ1RfQkFSICovCi0gICAgLyogY2xydG9lb2woKTsgKi8KLSNlbHNlICAvKiAh Q09NTUVOVCAqLwotI2lmZGVmIE9TMgotI2RlZmluZSBDSEFSMSAgICdcMzMzJyAgICAgICAgICAv KiBPUzIgLSBDUDQzNyAqLwotI2RlZmluZSBDSEFSMiAgICdcMjYxJwotI2Vsc2UKLSNkZWZpbmUg Q0hBUjEgICAnLycgICAgICAgICAgICAgLyogRGVmYXVsdCAqLwotI2RlZmluZSBDSEFSMiAgICct JwotI2VuZGlmIC8qIE9TMiAqLwotICAgIGRlYnVnKEYxMDEsInVwZHBjdCBvbGQiLCIiLG9sZCk7 Ci0gICAgZGVidWcoRjEwMSwidXBkcGN0IG5ldyIsIiIsbmV3KTsKLSAgICBtb3ZlKENXX1BDRCwy Mik7Ci0gICAgcHJpbnR3KCIlLTNsZCIsIG5ldyk7IC8qICAod2FzKSAgIHByaW50dygiJWxkIiwg bmV3KTsgICovCi0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICBLdWlTZXRQcm9wZXJ0eSgg S1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19QQ0QsIChsb25nKSBuZXcgKTsKLSNlbmRpZiAv KiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0jaWZkZWYgQ0tfUENUX0JBUgotICAgIGlmICh0 aGVybW9tZXRlcikgewotICAgICAgICBpbnQgbSwgbjsKLQotICAgICAgICBpZiAob2xkID4gbmV3 KSB7Ci0gICAgICAgICAgICBvbGQgPSAwIDsKLSAgICAgICAgICAgIG1vdmUoQ1dfUENELCAyNik7 Ci0gICAgICAgICAgICBjbHJ0b2VvbCgpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChuZXcgPD0g MTAwTCkgewotICAgICAgICAgICAgbSA9IG9sZCAvIDI7Ci0gICAgICAgICAgICBuID0gbmV3IC8g MiAtIG07Ci0gICAgICAgICAgICBtb3ZlKENXX1BDRCwgMjYrbSk7Ci0gICAgICAgICAgICB3aGls ZSAobi0tID4gMCkKLSAgICAgICAgICAgICAgcHJpbnR3KCIlYyIsIENIQVIxKTsKLSAgICAgICAg ICAgIGlmIChuZXcgJSAyICE9IDApCi0gICAgICAgICAgICAgIHByaW50dygiJWMiLCBDSEFSMik7 Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogQ0tfUENUX0JBUiAqLwotI2VuZGlmIC8qIENP TU1FTlQgKi8KLX0KLQotc3RhdGljIENLX09GRl9UIG9sZF90ciA9IChDS19PRkZfVCktMTsJLyog VGltZSByZW1haW5pbmcgcHJldmlvdXNseSAqLwotCi1zdGF0aWMgQ0tfT0ZGX1QKLSNpZmRlZiBD S19BTlNJQwotc2hvZXRsKENLX09GRl9UIG9sZF90ciwgbG9uZyBjcHMsIENLX09GRl9UIGZzaXos IENLX09GRl9UIGhvd2ZhcikKLSNlbHNlCi0gICAgc2hvZXRsKG9sZF90ciwgY3BzLCBmc2l6LCBo b3dmYXIpIGxvbmcgY3BzOyBDS19PRkZfVCBvbGRfdHIsIGZzaXosIGhvd2ZhcjsKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwotLyogc2hvZXRsICovIHsgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IEVzdGltYXRlZCB0aW1lIGxlZnQgaW4gdHJhbnNmZXIgKi8KLSAgICBDS19PRkZfVCB0cjsJCQkv KiBUaW1lIHJlbWFpbmluZywgc2Vjb25kcyAqLwotCi0jaWZkZWYgR0ZUSU1FUgotICAgIGlmIChm c2l6ID4gMEwgJiYgY3BzID4gMEwpCi0gICAgICB0ciA9IChDS19PRkZfVCkoKENLRkxPQVQpKGZz aXogLSBob3dmYXIpIC8gKENLRkxPQVQpY3BzKTsKLSAgICBlbHNlCi0gICAgICB0ciA9IChDS19P RkZfVCktMTsKLSNlbHNlCi0gICAgdHIgPSAoZnNpeiA+IDBMICYmIGNwcyA+IDBMKSA/Ci0gICAg ICAoKGZzaXogLSBob3dmYXIpIC8gY3BzKSA6Ci0gICAgICAgIChDS19PRkZfVCktMTsKLSNlbmRp ZiAvKiBHRlRJTUVSICovCi0gICAgbW92ZShDV19UUiwyMik7Ci0gICAgaWYgKHRyID4gKENLX09G Rl9UKS0xKSB7Ci0gICAgICAgIGlmICh0ciAhPSBvbGRfdHIpIHsKLSAgICAgICAgICAgIHByaW50 dygiJXMiLGhobW1zcyh0cikpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAg ICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpQ1dfVFIsIChsb25nKWho bW1zcyh0cikpOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAg ICAgIGNscnRvZW9sKCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBwcmludHco Iih1bmtub3duKSIpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgIEt1aVNldFBy b3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1RSLCAobG9uZykgIih1bmtub3du KSIgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgIGNscnRv ZW9sKCk7Ci0gICAgfQotICAgIHJldHVybih0cik7Ci19Ci0KLXN0YXRpYyBsb25nCi0jaWZkZWYg Q0tfQU5TSUMKLXNob2NwcyhpbnQgcGN0LCBDS19PRkZfVCBmc2l6LCBDS19PRkZfVCBob3dmYXIp Ci0jZWxzZQotc2hvY3BzKHBjdCwgZnNpeiwgaG93ZmFyKSBpbnQgcGN0OyBDS19PRkZfVCBmc2l6 LCBob3dmYXI7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLS8qIHNob2NwcyAqLyB7Ci0jaWZkZWYg Q1BTX1dFSUdIVEVECi0gICAgc3RhdGljIENLX09GRl9UIG9sZGZmYyA9IDBMOwotI2VuZGlmIC8q IENQU19XRUlHSFRFRCAqLwotI2lmZGVmIEdGVElNRVIKLSAgICBDS0ZMT0FUIHNlY3MsIHh4Owot I2Vsc2UKLSAgICBDS19PRkZfVCBzZWNzLCB4eDsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0KLSNp ZmRlZiBHRlRJTUVSCi0gICAgeHggPSAoZ3R2ID49IDAuMCkgPyBndHYgOiAwLjA7ICAgICAgLyog RmxvYXRpbmctcG9pbnQgdmVyc2lvbiAqLwotICAgIGd0diA9IGdmdGltZXIoKTsKLSAgICBpZiAo KGd0diAtIG9sZGd0dikgPCAoQ0tGTE9BVCkgMS4wKSAvKiBPbmx5IGRvIHRoaXMgb25jZSBwZXIg c2Vjb25kICovCi0gICAgICByZXR1cm4ob2xkY3BzKTsKLSAgICBvbGRndHYgPSB4eDsKLSNlbHNl Ci0gICAgeHggPSAoZ3R2ID49IDApID8gZ3R2IDogMDsgICAgICAgICAgLyogV2hvbGUtbnVtYmVy IHZlcnNpb24gKi8KLSAgICBndHYgPSBndGltZXIoKTsKLSAgICBpZiAoKGd0diAtIG9sZGd0dikg PCAxKQotICAgICAgcmV0dXJuKG9sZGNwcyk7Ci0gICAgb2xkZ3R2ID0geHg7Ci0jZW5kaWYgLyog R0ZUSU1FUiAqLwotCi0jaWZkZWYgQ1BTX1dFSUdIVEVECi0gICAgLyogZGVidWcoRjEwMCwiU0hP Q1BTOiBXRUlHSFRFRCIsIiIsMCk7ICovCi0gICAgaWYgKGd0diAhPSBvbGRndHYpIHsgICAgICAg ICAgICAgICAgLyogVGhlIGZpcnN0IHBhY2tldCBpcyBpZ25vcmVkICovCi0gICAgICAgIGlmIChm ZmMgPCBvbGRmZmMpCi0gICAgICAgICAgb2xkZmZjID0gZmZjOwotICAgICAgICBvbGRjcHMgPSBj cHM7Ci0gICAgICAgIGlmIChvbGRjcHMgJiYgb2xkZ3R2ID4KLSNpZmRlZiBHRlRJTUVSCi0gICAg ICAgICAgICAxLjAKLSNlbHNlCi0gICAgICAgICAgICAxCi0jZW5kaWYgLyogR0ZUSU1FUiAqLwot ICAgICAgICAgICAgKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBmaXJzdCBzZWNv bmQgaXMgaWdub3JlZCAqLwotLyoKLSAgVGhpcyB2ZXJzaW9uIG9mIHNob2NwcygpIHByb2R1Y2Vz IGEgd2VpZ2h0ZWQgYXZlcmFnZSB0aGF0IHNvbWUKLSAgcGVvcGxlIGxpa2UsIGJ1dCBtb3N0IHBl b3BsZSBmaW5kIGl0IGRpc2NvbmNlcnRpbmcgYW5kIGJvbWJhcmQgdXMKLSAgd2l0aCBxdWVzdGlv bnMgYW5kIGNvbXBsYWludHMgYWJvdXQgd2h5IHRoZSBDUFMgZmlndXJlIGZsdWN0dWF0ZXMgc28K LSAgd2lsZGx5LiAgU28gbm93IHlvdSBvbmx5IGdldCB0aGUgd2VpZ2h0ZWQgYXZlcmFnZSBpZiB5 b3UgYnVpbGQgdGhlCi0gIHByb2dyYW0geW91cnNlbGYgd2l0aCBDUFNfV0VJR0hURUQgZGVmaW5l ZC4KLSovCi0jaWZuZGVmIENQU19WSU5DRQotI2lmZGVmIEdGVElNRVIKLSAgICAgICAgICAgIGNw cyA9IChsb25nKSgoKChDS0ZMT0FUKW9sZGNwcyAqIDMuMCkgKwotICAgICAgICAgICAgICAgICAg IChDS0ZMT0FUKShmZmMgLSBvbGRmZmMpIC8gKGd0di1vbGRndHYpICkgLyA0LjApOwotI2Vsc2UK LSAgICAgICAgICAgIGNwcyA9ICggKG9sZGNwcyAqIDMpICsgKGZmYyAtIG9sZGZmYykgLyAoZ3R2 LW9sZGd0dikgKSAvIDQ7Ci0jZW5kaWYgLyogR0ZUSU1FUiAqLwotI2Vsc2UKLS8qIEFuZCBhbiBh bHRlcm5hdGUgd2VpZ2h0aW5nIHNjaGVtZSBmcm9tIFZpbmNlbnQgRmF0aWNhLi4uICovCi0gICAg ICAgICAgICBjcHMgPSAoMyAqCi0gICAgICAgICAgICAgKCgxK3BjdC8zMDApKm9sZGZmYy9vbGRn dHYrKDEtcGN0LzEwMCkqKGZmYy1vbGRmZmMpLyhndHYtb2xkZ3R2KSkpCi0gICAgICAgICAgICAg IC8gNDsKLSNlbmRpZiAvKiBDUFNfVklOQ0UgKi8KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgIC8qIE5vIHdlaWdodGVkIGF2ZXJhZ2Ugc2luY2UgdGhlcmUgaXMgbm90aGluZyB0byB3ZWln aCAqLwotI2lmZGVmIEdGVElNRVIKLSAgICAgICAgICAgIGNwcyA9IChsb25nKShndHYgIT0gMC4w ID8KLSAgICAgICAgICAgICAgKENLRkxPQVQpKGZmYyAtIG9sZGZmYykgLyAoZ3R2IC0gb2xkZ3R2 KSA6Ci0gICAgICAgICAgICAgICAgKGZmYyAtIG9sZGZmYykpIDsKLSNlbHNlCi0gICAgICAgICAg ICBjcHMgPSBndHYgPyAoZmZjIC0gb2xkZmZjKSAvIChndHYgLSBvbGRndHYpIDogKGZmYyAtIG9s ZGZmYykgOwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLSAgICAgICAgfQotI2lmZGVmIENPTU1FTlQK LSNpZmRlZiBERUJVRwotICAgICAgICBpZiAoZGVibG9nKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhG MTAxLCJTSE9DUFM6IHBjdCAgICIsIiIscGN0KTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsIlNI T0NQUzogZ3R2ICAgIiwiIixndHYpOwotICAgICAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBv bGRndHYiLCIiLG9sZGd0dik7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IGRndHYg ICIsIiIsKGxvbmcpKGd0di1vbGRndHYpKTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQ UzogZmZjICAgIiwiIixmZmMpOwotICAgICAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBvbGRm ZmMiLCIiLG9sZGZmYyk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IGRmZmMgICIs IiIsZmZjLW9sZGZmYyk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IGNwcyAgICIs IiIsY3BzKTsKLSAgICAgICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0jZW5kaWYgLyogQ09NTUVO VCAqLwotICAgICAgICBtb3ZlKENXX0NQLDIyKTsKLSAgICAgICAgcHJpbnR3KCIlbGQiLCBjcHMp OwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlf RklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0NQLCAobG9uZykgY3BzICk7Ci0jZW5kaWYgLyogSzk1 RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICBjbHJ0b2VvbCgpOwotICAgICAgICBvbGRm ZmMgPSBmZmM7Ci0gICAgfQotI2Vsc2UgLyogIUNQU19XRUlHSFRFRCAqLwotI2lmZGVmIENPTU1F TlQKLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsKLQlkZWJ1ZyhGMTAwLCJTSE9DUFM6 IE5PVCBXRUlHSFRFRCIsIiIsMCk7Ci0gICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogcGN0ICAg ICIsIiIscGN0KTsKLSAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBndHYgICAgIiwiIixndHYp OwotICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IG9sZGd0diAiLCIiLG9sZGd0dik7Ci0gICAg ICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogZGd0diAgICIsIiIsKGxvbmcpZ3R2IC0gKGxvbmcpb2xk Z3R2KTsKLSAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBmZmMgICAgIiwiIixmZmMpOwotICAg ICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IG9sZGZmYyAiLCIiLG9sZGZmYyk7Ci0gICAgICAgIGRl YnVnKEYxMDEsIlNIT0NQUzogZGZmYyAgICIsIiIsZmZjLW9sZGZmYyk7Ci0gICAgICAgIGRlYnVn KEYxMDEsIlNIT0NQUzogY3BzICAgICIsIiIsY3BzKTsKLSAgICAgICAgZGVidWcoRjEwMSwiU0hP Q1BTOiBmaWxjbnQgIiwiIixmaWxjbnQpOwotI2lmZGVmIEdGVElNRVIKLSAgICAgICAgZGVidWco RjEwMSwiU0hPQ1BTOiBmcGZzZWNzIiwiIixmcGZzZWNzKTsKLSNlbmRpZiAvKiBHRlRJTUVSICov Ci0gICAgfQotICAgIGRlYnVnKEYxMDEsInNob2NwcyBndHYiLCIiLGd0dik7Ci0jZW5kaWYgLyog REVCVUcgKi8KLSNpZmRlZiBHRlRJTUVSCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgIC8qIGRl YnVnKEYxMDEsInNob2NwcyBmcGZzZWNzIiwiIixmcGZzZWNzKTsgKi8KLSAgICBzZWNzID0gZ3R2 IC0gZnBmc2VjczsKLSAgICAvKiBkZWJ1ZyhGMTAxLCJzaG9jcHMgc2VjcyIsIiIsKGxvbmcpc2Vj cyk7ICovCi0gICAgaWYgKHNlY3MgPiAwLjApIHsKLSAgICAgICAgY3BzID0gKGxvbmcpKChDS0ZM T0FUKSBmZmMgLyBzZWNzKTsKLSAgICAgICAgLyogZGVidWcoRjEwMSwic2hvY3BzIGNwcyIsIiIs Y3BzKTsgKi8KLSAgICAgICAgbW92ZShDV19DUCwyMik7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5 NUcKLSAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1df Q1AsIChsb25nKSBjcHMgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0g ICAgICAgIHByaW50dygiJWxkIiwgY3BzKTsKLSAgICAgICAgY2xydG9lb2woKTsKLSAgICB9Ci0j ZWxzZSAgLyogTm90IEdGVElNRVIgKi8KLSAgICBpZiAoKHNlY3MgPSBndHYgLSBmc2VjcykgPiAw KSB7Ci0gICAgICAgIGNwcyA9IChzZWNzIDwgMUwpID8gZmZjIDogZmZjIC8gc2VjczsKLSAgICAg ICAgbW92ZShDV19DUCwyMik7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgS3Vp U2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfQ1AsIChsb25nKSBjcHMg KTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgIHByaW50dygi JWxkIiwgY3BzKTsKLSAgICAgICAgY2xydG9lb2woKTsKLSAgICB9Ci0jZW5kaWYgLyogR0ZUSU1F UiAqLwotI2VuZGlmIC8qIENQU19XRUlHSFRFRCAqLwotCi0gICAgaWYgKGNwcyA+IHBlYWtjcHMg JiYgICAgICAgICAgICAgICAgLyogUGVhayB0cmFuc2ZlciByYXRlICovCi0gICAgICAgICgod2hh dCAmIFdfU0VORCAmJiBzcGFja2V0cyA+IHdzbG90cyArIDQpIHx8Ci0JICghKHdoYXQgJiBXX1NF TkQpICYmIHNwYWNrZXRzID4gMTApKSkgewotICAgICAgICBwZWFrY3BzID0gY3BzOwotICAgIH0K LSAgICBvbGRfdHIgPSBzaG9ldGwob2xkX3RyLCBjcHMsIGZzaXosIGhvd2Zhcik7Ci0gICAgcmV0 dXJuKGNwcyk7Ci19Ci0KLXN0YXRpYwotI2lmZGVmIENLX0FOU0lDICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEJlY2F1c2UgVk9JRCB1c2VkIGJ5IGN1cnNlcy5oICovCi12b2lkCi0jZWxzZQot I2lmZGVmIE1ZQ1VSU0VTCi1WT0lECi0jZWxzZQotaW50Ci0jZW5kaWYgLyogTVlDVVJTRVMgKi8K LSNlbmRpZiAvKiBDS19BTlNJQyAqLwotc2NyZnQoKSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIERpc3BsYXkgZmlsZSB0eXBlICovCi0gICAgY2hhciB4ZmVyc3RyWzI1Nl07Ci0g ICAgeGZlcnN0clswXSA9IE5VTDsKLSAgICBkZWJ1ZyhGMTAxLCJzY3JmdCBiaW5hcnkiLCIiLGJp bmFyeSk7Ci0gICAgaWYgKGJpbmFyeSkgewotICAgICAgICBzd2l0Y2goYmluYXJ5KSB7Ci0gICAg ICAgICAgY2FzZSBYWUZUX0w6Ci0gICAgICAgICAgICBja3N0cm5jcHkoeGZlcnN0ciwiTEFCRUxF RCIsMjU2KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgWFlGVF9JOgotICAg ICAgICAgICAgY2tzdHJuY3B5KHhmZXJzdHIsIklNQUdFIiwyNTYpOwotICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgY2FzZSBYWUZUX1U6Ci0gICAgICAgICAgICBja3N0cm5jcHkoeGZlcnN0 ciwiQklOQVJZIFVOREVGSU5FRCIsMjU2KTsKLSAgICAgICAgICAgIGJyZWFrOwotCSAgY2FzZSBY WUZUX006Ci0gICAgICAgICAgICBja3N0cm5jcHkoeGZlcnN0ciwiTUFDQklOQVJZIiwyNTYpOwot ICAgICAgICAgICAgYnJlYWs7Ci0JICBjYXNlIFhZRlRfWDoKLSAgICAgICAgICAgIGNrc3RybmNw eSh4ZmVyc3RyLCJURU5FWCIsMjU2KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRl ZmF1bHQ6Ci0gICAgICAgICAgY2FzZSBYWUZUX0I6Ci0gICAgICAgICAgICBja3N0cm5jcHkoeGZl cnN0ciwiQklOQVJZIiwyNTYpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSNpZmRl ZiBDS19SRVNFTkQKLSAgICAgICAgaWYgKHdoYXQgJiBXX1NFTkQgJiYgc2VuZHN0YXJ0ID4gMEwp IHsKLSAgICAgICAgICAgIGlmIChzZW5kbW9kZSA9PSBTTV9QU0VORCkgewotICAgICAgICAgICAg ICAgIGNrc3RybmNhdCh4ZmVyc3RyLCAiIC8gcGFydGlhbCIsIDI1Nik7Ci0gICAgICAgICAgICB9 IGVsc2UgaWYgKHNlbmRtb2RlID09IFNNX1JFU0VORCkgewotICAgICAgICAgICAgICAgIGNrc3Ry bmNhdCh4ZmVyc3RyLCAiIC8gcmVzZW5kIiwgMjU2KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg fSBlbHNlIGlmICh3aGF0ICYgV19SRUNWICYmIHJzX2xlbiA+IDBMKSB7Ci0gICAgICAgICAgICBj a3N0cm5jYXQoeGZlcnN0ciwgIiAvIHJlc2VuZCIsIDI1Nik7Ci0gICAgICAgIH0KLSNlbmRpZiAv KiBDS19SRVNFTkQgKi8KLSAgICB9IGVsc2UgewotCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICAgICAg Y2tzdHJuY3B5KHhmZXJzdHIsIlRFWFQiLDI1Nik7Ci0jaWZkZWYgTkVXRlRQCi0jaWZuZGVmIE5P VU5JQ09ERQotCWlmICh3aGF0ICYgV19GVFApIHsKLQkgICAgaWYgKGZ0cF9jc3ggPCAwKQotCSAg ICAgIGNrc3RybmNhdCh4ZmVyc3RyLCIgKG5vIHRyYW5zbGF0aW9uKSIsIDI1Nik7Ci0JICAgIGVs c2UKLQkgICAgICBja21ha3htc2coJnhmZXJzdHJbNF0sMjUyLAotCQkgICAgICAgIiAoIiwKLQkJ ICAgICAgIGZjc2luZm9bKHdoYXQgJiBXX1NFTkQpID8gZnRwX2NzbCA6IGZ0cF9jc3hdLmtleXdv cmQsCi0JCSAgICAgICAiID0+ICIsCi0JCSAgICAgICBmY3NpbmZvWyh3aGF0ICYgV19TRU5EKSA/ IGZ0cF9jc3ggOiBmdHBfY3NsXS5rZXl3b3JkLAotCQkgICAgICAgIikiLAotCQkgICAgICAgTlVM TCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTAotCQkgICAgICAgKTsKLQl9IGVsc2UKLSNl bmRpZiAvKiBOT1VOSUNPREUgKi8KLSNlbmRpZiAvKiBORVdGVFAgKi8KLQkgIGlmICh0Y2hhcnNl dCA9PSBUQ19UUkFOU1ApIHsKLSAgICAgICAgICAgIGNrc3RybmNhdCh4ZmVyc3RyLCAiIChubyB0 cmFuc2xhdGlvbikiLCAyNTYpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHdo YXQgJiBXX1NFTkQpIHsKLSAgICAgICAgICAgICAgICBzcHJpbnRmKCAmeGZlcnN0cltzdHJsZW4o eGZlcnN0cildLCAvKiBzYWZlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAiICglcyA9PiAl cykiLAotICAgICAgICAgICAgICAgICAgICAgICAgZmNzaW5mb1tmY2hhcnNldF0ua2V5d29yZCwg LyogYnVpbHQtaW4ga2V5d29yZHMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHRjc2luZm9b dGNoYXJzZXRdLmtleXdvcmQgIC8qIGxlbmd0aHMgYXJlIGNvbnRyb2xsZWQgKi8KLQkJCSk7Ci0g ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNwcmludGYoICZ4ZmVyc3RyW3N0 cmxlbih4ZmVyc3RyKV0sIC8qIHNhZmUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICIgKCVz ID0+ICVzKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICB0Y3NpbmZvW3RjaGFyc2V0XS5rZXl3 b3JkLCAvKiBidWlsdC1pbiBrZXl3b3JkcyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgZmNz aW5mb1tmY2hhcnNldF0ua2V5d29yZCk7IC8qIGxlbmd0aHMgY29udHJvbGxlZCAqLwotICAgICAg ICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotICAgIH0KLSAgICBtb3Zl KENXX1RZUCwyMik7Ci0gICAgcHJpbnR3KCIlcyIsIHhmZXJzdHIpOwotICAgIGNscnRvZW9sKCk7 Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVf VFJBTlNGRVIsIChsb25nKSBDV19UWVAsIChsb25nKSB4ZmVyc3RyICk7Ci0jZW5kaWYgLyogSzk1 RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgIHJldHVybjsKLX0KLQotI2lmZGVmIENLX05FV1RF Uk0KLXN0YXRpYyBGSUxFICpja19zdGRvdXQgPSBOVUxMOwotc3RhdGljIGludCBja19mZCA9IC0x OwotI2VuZGlmIC8qIENLX05FV1RFUk0gKi8KLQotc3RhdGljIGxvbmcgcGN0ID0gMEwsIG9sZHBj dCA9IDBMLCBvbGRydHQgPSAtMUw7Ci1zdGF0aWMgaW50IG9sZHR5cCA9IDAsIG9sZHdpbiA9IC0x LCBvbGR0cnkgPSAtMSwgb2xkbGVuID0gLTEsIG9sZHRpbSA9IC0xOwotCi0jaWZkZWYgTkVUQ09O Tgotc3RhdGljIGNoYXIgKm5ldG5hbWVbXSA9IHsKLSAgICAibm9uZSIsCQkJCS8qIDAwICovCi0g ICAgIlRDUC9JUCIsCQkJCS8qIDAxIFRDUCAoU29ja2V0cykgKi8KLSAgICAiVENQL0lQIiwJCQkJ LyogMDIgVENQIChTdHJlYW1zKSAqLwotICAgICJYLjI1IiwJCQkJLyogMDMgU3VuTGluayBYLjI0 ICAqLwotICAgICJERUNuZXQiLAkJCQkvKiAwNCBERUNuZXQgICovCi0gICAgIlZBWCBQU0kiLAkJ CQkvKiAwNSBWQVggUFNJICovCi0gICAgIk5hbWVkIFBpcGVzIiwJCQkvKiAwNiBMQU4gTWFuYWdl ciBOYW1lZCBQaXBlICovCi0gICAgIlguMjUiLAkJCQkvKiAwNyBTdHJhdHVzIFZPUyBYLjI1ICov Ci0gICAgIk5ldEJJT1MiLAkJCQkvKiAwOCBJQk0gTkVUQklPUyAqLwotICAgICJTdXBlckxBVCIs CQkJCS8qIDA3IE1lcmlkaWFuIFN1cGVyTEFUICovCi0gICAgIkZpbGUiLAkJCQkvKiAxMCBGaWxl ICovCi0gICAgIkNvbW1hbmQiLAkJCQkvKiAxMSBTdWJwcm9jZXNzIChwaXBlKSAqLwotICAgICJE TEwiLAkJCQkvKiAxMiBETEwgZG9lcyBpL28gKi8KLSAgICAiWC4yNSIsCQkJCS8qIDEzIElCTSBB SVhMaW5rIFguMjUgKi8KLSAgICAiWC4yNSIsCQkJCS8qIDE0IEhQLVVYIFguMjUgKi8KLSAgICAi UFRZIiwJCQkJLyogMTUgUHNldWRvdGVybWluYWwgKi8KLSAgICAiU1NIIiwJCQkJLyogMTYgU1NI ICovCi0gICAgIjxFUlJPUj4iLAkJCQkvKiAxNyBJbiBjYXNlIG5ldyB0eXBlcyBhcmUgYWRkZWQg Ki8KLSAgICAiPEVSUk9SPiIsCQkJCS8qIDE4IGJ1dCBub2JvZHkgcmVtZW1iZXJzIHRvIHVwZGF0 ZSAqLwotICAgICI8RVJST1I+IiwJCQkJLyogMTkgdGhpcyB0YWJsZSAuLi4gKi8KLSAgICBOVUxM CQkJCS8qIDIwICovCi19Owotc3RhdGljIGludCBubmV0bmFtZSA9IChzaXplb2YobmV0bmFtZSkg LyBzaXplb2YoY2hhciAqKSk7Ci0KLSNlbmRpZiAvKiBORVRDT05OICovCi0KLSNpZmRlZiBDS19B TlNJQwotdm9pZAotc2NyZWVuYyhpbnQgZiwgY2hhciBjLENLX09GRl9UIG4sY2hhciAqcykKLSNl bHNlCi1DS1ZPSUQKLXNjcmVlbmMoZixjLG4scykKLWludCBmOyAgICAgICAgICAvKiBhcmd1bWVu dCBkZXNjcmlwdG9yICovCi1jaGFyIGM7ICAgICAgICAgLyogYSBjaGFyYWN0ZXIgb3Igc21hbGwg aW50ZWdlciAqLwotQ0tfT0ZGX1QgbjsgICAgIC8qIGEgbG9uZyBpbnRlZ2VyICovCi1jaGFyICpz OyAgICAgICAgLyogYSBzdHJpbmcgKi8KLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogc2NyZWVu YygpICovIHsKLSNpZmRlZiBDS19TU0wKLSAgICBleHRlcm4gaW50IHRsc19hY3RpdmVfZmxhZywg c3NsX2FjdGl2ZV9mbGFnOwotI2VuZGlmIC8qIENLX1NTTCAqLwotI2lmZGVmIFJMT0dDT0RFCi0g ICAgZXh0ZXJuIGludCB0dG5wcm90bzsKLSNlbmRpZiAvKiBSTE9HQ09ERSAqLwotICAgIHN0YXRp YyBpbnQgcSA9IDA7Ci0gICAgc3RhdGljIGxvbmcgZmNudCA9IDBMOwkJLyogTnVtYmVyIG9mIGZp bGVzIHRyYW5zZmVycmVkICovCi0gICAgc3RhdGljIENLX09GRl9UIGZzaXogPSAoQ0tfT0ZGX1Qp LTE7IC8qIENvcHkgb2YgZmlsZSBzaXplICovCi0gICAgc3RhdGljIENLX09GRl9UIGZieXQgPSAw TDsgLyogVG90YWwgZmlsZSBieXRlcyBvZiBhbGwgZmlsZXMgdHJhbnNmZXJyZWQgKi8KLSAgICBz dGF0aWMgQ0tfT0ZGX1QgaG93ZmFyID0gMEw7IC8qIEhvdyBtdWNoIG9mIGN1cnJlbnQgZmlsZSBo YXMgYmVlbiB4ZmVyJ2QgKi8KLSAgICBzdGF0aWMgaW50ICBwY3RsYmwgPSAwTDsgIC8qIFBlcmNl bnQgZG9uZSB2cyBCeXRlcyBzbyBmYXIgKi8KLSAgICBsb25nIGNwcyA9IDBMOwotCi0gICAgaW50 IG5ldCA9IDA7Ci0gICAgaW50IHhuZXQgPSAwOwotICAgIGludCBmdHAgPSAwOwotICAgIGludCBs ZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBzdHJpbmcgKi8KLSAg ICBpbnQgZXJyb3JzID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciBjb3VudGVyICov Ci0gICAgaW50IHg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV29ya2VyICovCi0K LSAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5jIGNpbml0IiwiIixjaW5pdCk7Ci0gICAgZGVidWcoRjEw MSwic2NyZWVuYyBjZW5kdyIsIiIsY2VuZHcpOwotCi0gICAgaWYgKCFzKSBzID0gIiI7ICAgICAg ICAgICAgICAgICAgICAgLyogQWx3YXlzIGRvIHRoaXMuICovCi0KLSAgICBmdHAgPSAod2hhdCAm IFdfRlRQKSA/IDEgOiAwOwkvKiBGVFAgb3IgS2VybWl0ICovCi0gICAgbmV0ID0gbmV0d29yayB8 fCBmdHA7Ci0gICAgeG5ldCA9IGZ0cCA/IDEgOiBuZXR0eXBlOwkJLyogTkVUX1RDUEIgPT0gMSAq LwotCi0gICAgaWYgKGNpbml0ID09IDAgfHwgY2VuZHcgPiAwKSB7ICAgICAgLyogSGFuZGxlIGJv cmRlcmxpbmUgY2FzZXMuLi4gKi8KLSAgICAgICAgaWYgKGYgPT0gU0NSX0NXKSB7ICAgICAgICAg ICAgICAvKiBDbG9zZSB3aW5kb3csIGJ1dCBpdCdzIG5vdCBvcGVuICovCi0gICAgICAgICAgICBm dF93aW4gPSAwOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGRlYnVn KEYxMTEsInNjcmVlbmMgQSIscyxmKTsKLSAgICAgICAgaWYgKGYgPT0gU0NSX0VNIHx8Ci0gICAg ICAgICAgIChmID09IFNDUl9QVCAmJiBjID09ICdFJykpIHsgLyogRmF0YWwgZXJyb3IgYmVmb3Jl IHdpbmRvdyBvcGVuICovCi0gICAgICAgICAgICBjb25vbGwoIiIpOyBjb25vYygnPycpOyBjb25v bGwocyk7IHJldHVybjsgLyogUmVndWxhciBkaXNwbGF5ICovCi0gICAgICAgIH0KLSAgICB9Ci0g ICAgaWYgKGNpbml0ID09IDApIHsgICAgICAgICAgICAgICAgICAgLyogT25seSBjYWxsIGluaXRz Y3IoKSBvbmNlICovCi0JY2hhciAqIHM7Ci0JLyogQ2hlY2sgdGhlc2Ugbm93IC0tIGlmIHRoZXkg YXJlIGRlZmluZWQgYnV0IG5vdCBudW1lcmljICovCi0JLyogdGhleSBjYW4gY3Jhc2ggY3Vyc2Vz ICovCi0JcyA9IGdldGVudigiTElORVMiKTsKLQlpZiAocykgaWYgKCFyZGlnaXRzKHMpKSB7Ci0J ICAgIHByaW50ZigiP0xJTkVTIHZhcmlhYmxlIG5vdCBudW1lcmljOiBcIiVzXCIuXG4iLHMpOwot CSAgICBwcmludGYoIihGdWxsc2NyZWVuIGRpc3BsYXkgZGlzYWJsZWQpXG4iKTsKLQkgICAgZmRp c3BsYSA9IFhZRkRfUzsKLQkgICAgcmV0dXJuOwotCX0KLQlzID0gZ2V0ZW52KCJDT0xVTU5TIik7 Ci0JaWYgKHMpIGlmICghcmRpZ2l0cyhzKSkgewotCSAgICBwcmludGYoIj9DT0xVTU5TIHZhcmlh YmxlIG5vdCBudW1lcmljOiBcIiVzXCIuXG4iLHMpOwotCSAgICBwcmludGYoIihGdWxsc2NyZWVu IGRpc3BsYXkgZGlzYWJsZWQpXG4iKTsKLQkgICAgZmRpc3BsYSA9IFhZRkRfUzsKLQkgICAgcmV0 dXJuOwotCX0KLSAgICAgICAgY2VuZHcgPSAxOyAgICAgICAgICAgICAgICAgICAgICAvKiBOZXcg d2luZG93IG5lZWRzIHJlcGFpbnRpbmcgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIGlmICgh aW5pdHNjcigpKSB7ICAgICAgICAgICAgICAgLyogT29wcywgY2FuJ3QgaW5pdGlhbGl6ZSB3aW5k b3c/ICovCi0vKgotICBJbiBmYWN0LCB0aGlzIGRvZXNuJ3QgaGFwcGVuLiAgIm1hbiBjdXJzZXMi IHNheXMgaW5pdHNjcigpIGhhbHRzIHRoZQotICBlbnRpcmUgcHJvZ3JhbSBpZiBpdCBmYWlscywg d2hpY2ggaXMgdHJ1ZSBvbiB0aGUgc3lzdGVtcyB3aGVyZSBJJ3ZlCi0gIHRlc3RlZCBpdC4gIEl0 IHdpbGwgZmFpbCBpZiB5b3VyIHRlcm1pbmFsIHR5cGUgaXMgbm90IGtub3duIHRvIGl0LgotICBU aGF0J3Mgd2h5IFNFVCBGSUxFIERJU1BMQVkgRlVMTFNDUkVFTiBjYWxscyB0Z2V0ZW50KCkgdG8g bWFrZSBzdXJlIHRoZQotICB0ZXJtaW5hbCB0eXBlIGlzIGtub3duIGJlZm9yZSBhbGxvd2luZyBh IGN1cnNlcyBkaXNwbGF5LgotKi8KLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJDVVJTRVMg SU5JVFNDUiBFUlJPUlxyXG4iKTsKLSAgICAgICAgICAgIGZkaXNwbGEgPSBYWUZEX1M7ICAgICAg ICAgICAvKiBGYWxsIGJhY2sgdG8gQ1JUIGRpc3BsYXkgKi8KLSAgICAgICAgICAgIHJldHVybjsK LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNpbml0Kys7ICAgICAgICAgICAgICAgICAg ICAvKiBXaW5kb3cgaW5pdGlhbGl6ZWQgb2sgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMDAsIkNV UlNFUyBJTklUU0NSIE9LIiwiIiwwKTsKLSAgICAgICAgfQotI2Vsc2UgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFNhdmUgc29tZSBtZW1vcnkuICovCi0jaWZkZWYgQ0tfTkVX VEVSTQotICAgICAgICAvKiAoRnJvbSBBbmR5IEZ5ZmUgPGFuZHlAdmxzaS5jcy5jYWx0ZWNoLmVk dT4pCi0gICAgICAgICAgIFN5c3RlbSBWIGN1cnNlcyBzZWVtcyB0byByZXNlcnZlIHRoZSByaWdo dCB0byBhbHRlciB0aGUgYnVmZmVyaW5nCi0gICAgICAgICAgIG9uIHRoZSBvdXRwdXQgRklMRSog d2l0aG91dCByZXN0b3JpbmcgaXQuICBGb3J0dW5hdGVseSBTeXN0ZW0gVgotICAgICAgICAgICBj dXJzZXMgcHJvdmlkZXMgbmV3dGVybSgpLCBhbiBhbHRlcm5hdGl2ZSB0byBpbml0c2NyKCksIHRo YXQKLSAgICAgICAgICAgYWxsb3dzIHVzIHRvIHNwZWNpZnkgZXhwbGljaXRseSB0aGUgdGVybWlu YWwgdHlwZSBhbmQgaW5wdXQgYW5kCi0gICAgICAgICAgIG91dHB1dCBGSUxFIHBvaW50ZXJzLiAg VGh1cyB3ZSBkdXBsaWNhdGUgc3Rkb3V0LCBhbmQgbGV0IGN1cnNlcwotICAgICAgICAgICBoYXZl IHRoZSBjb3B5LiAgVGhlIG9yaWdpbmFsIHJlbWFpbnMgdW5hbHRlcmVkLiAgVW5mb3J0dW5hdGVs eSwKLSAgICAgICAgICAgbmV3dGVybSgpIHNlZW1zIHRvIGJlIHBhcnRpY3VsYXIgdG8gU3lzdGVt IFYuCi0gICAgICAgICovCi0gICAgICAgIHMgPSBnZXRlbnYoIlRFUk0iKTsKLSAgICAgICAgaWYg KGNrX2ZkIDwgMCkgewotICAgICAgICAgICAgY2tfZmQgPSBkdXAoZmlsZW5vKHN0ZG91dCkpOwot ICAgICAgICAgICAgY2tfc3Rkb3V0ID0gKGNrX2ZkID49IDApID8gKEZJTEUgKilmZG9wZW4oY2tf ZmQsICJ3IikgOiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmMg bmV3dGVybS4uLiIsIiIsMCk7Ci0KLS8qIE5PVEU6IEl0IG1pZ2h0IGJlIG5lY2Vzc2FyeSB0byBk byB0aGlzIHdpdGggc3RkaW4gdG9vISAqLwotLyogVGhpcyB3b3VsZCBoYXZlIGJlZW4gdGhlIGNh c2UgaW4gRnJlZUJTRCA0LjEgYnV0IHRoZXkgZml4ZWQgdGhlICovCi0vKiBwcm9ibGVtIGJ5IHJl c3RvcmluZyB0aGUgYnVmZmVyaW5nIG9mIHN0ZGluIGJlZm9yZSB0aGUgZmluYWwgcmVsZWFzZS4g Ki8KLS8qIChCdXQgVC5FLiBEaWNrZXkgc2F5cyBzdGRpbiBpcyBub3QgYnVmZmVyZWQ/KSAqLwot Ci0gICAgICAgIGlmIChja19zdGRvdXQgPT0gTlVMTCB8fCBuZXd0ZXJtKHMsIGNrX3N0ZG91dCwg c3RkaW4pID09IDApIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAg ICAiRnVsbHNjcmVlbiBkaXNwbGF5IG5vdCBzdXBwb3J0ZWQgZm9yIHRlcm1pbmFsIHR5cGU6ICVz XHJcbiIscyk7Ci0gICAgICAgICAgICBmZGlzcGxhID0gWFlGRF9TOyAgICAgICAgICAgLyogVXNl IENSVCBpbnN0ZWFkICovCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg ZGVidWcoRjEwMCwic2NyZWVuYyBuZXd0ZXJtIG9rIiwiIiwwKTsKLSNlbHNlCi0gICAgICAgIGRl YnVnKEYxMDAsInNjcmVlbiBjYWxsaW5nIGluaXRzY3IiLCIiLDApOwotICAgICAgICBpbml0c2Ny KCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgY3Vyc2VzLiAqLwotICAgICAg ICBkZWJ1ZyhGMTAwLCJzY3JlZW4gaW5pdHNjciBvayIsIiIsMCk7Ci0jZW5kaWYgLyogQ0tfTkVX VEVSTSAqLwotICAgICAgICBjaW5pdCsrOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlbWVt YmVyIGN1cnNlcyB3YXMgaW5pdGlhbGl6ZWQuICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAg IH0KLSAgICBmdF93aW4gPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXaW5kb3cgaXMg b3BlbiAqLwotICAgIGlmIChyZXBhaW50KSB7Ci0jaWZkZWYgQ0tfV1JFRlJFU0gKLS8qCi0gIFRo aXMgdG90YWxseSByZXBhaW50cyB0aGUgc2NyZWVuLCBqdXN0IHdoYXQgd2Ugd2FudCwgYnV0IHdl IGNhbiBvbmx5Ci0gIGRvIHRoaXMgd2l0aCByZWFsIGN1cnNlcywgYW5kIHRoZW4gb25seSBpZiBj bGVhcm9rKCkgYW5kIHdyZWZyZXNoKCkgYXJlCi0gIHByb3ZpZGVkIGluIHRoZSBjdXJzZXMgbGli cmFyeS4KLSovCi0jaWZkZWYgT1MyCi0gICAgICAgIFJlc3RvcmVDbWRNb2RlKCk7Ci0jZWxzZQot I2lmZGVmIFFOWAotI2lmbmRlZiBRTlgxNgotICAgICAgICBjbGVhcm9rKHN0ZHNjciwgMSk7ICAg ICAgICAgICAgIC8qIFFOWCBkb2Vzbid0IGhhdmUgY3Vyc2NyICovCi0jZW5kaWYgLyogUU5YMTYg Ki8KLSAgICAgICAgd3JlZnJlc2goc3Rkc2NyKTsKLSNlbHNlCi0gICAgICAgIHdyZWZyZXNoKGN1 cnNjcik7Ci0jZW5kaWYgLyogUU5YICovCi0jZW5kaWYgLyogT1MyICovCi0jZWxzZSAgLyogTm8g Q0tfV1JFRlJFU0ggKi8KLS8qCi0gIEtlcm1pdCdzIGRvLWl0LXlvdXJzZWxmIG1ldGhvZCwgd29y a3Mgd2l0aCBhbGwgdHlwZXMgb2YgZnVsbHNjcmVlbgotICBzdXBwb3J0LCBidXQgZG9lcyBub3Qg cmVwYWludCBhbGwgdGhlIGZpZWxkcy4gIEZvciBleGFtcGxlLCB0aGUgZmlsZW5hbWUKLSAgaXMg bG9zdCwgYmVjYXVzZSBpdCBhcnJpdmVzIGF0IGEgY2VydGFpbiB0aW1lIGFuZCBuZXZlciBjb21l cyBhZ2FpbiwgYW5kCi0gIEtlcm1pdCBwcmVzZW50bHkgZG9lcyBub3Qgc2F2ZSBpdCBhbnl3aGVy ZS4gIE1ha2luZyB0aGlzIG1ldGhvZCB3b3JrIGZvcgotICBhbGwgZmllbGRzIHdvdWxkIGJlIGEg cmF0aGVyIG1ham9yIHJlY29kaW5nIHRhc2ssIGR1cGxpY2F0aW5nIHdoYXQgY3Vyc2VzCi0gIGFs cmVhZHkgZG9lcywgYW5kIHdvdWxkIGFkZCBhIGxvdCBvZiBjb21wbGV4aXR5IGFuZCBzdG9yYWdl IHNwYWNlLgotKi8KLSAgICAgICAgY2VuZHcgPSAxOwotI2VuZGlmIC8qIENLX1dSRUZSRVNIICov Ci0gICAgICAgIHJlcGFpbnQgPSAwOwotICAgIH0KLSAgICBpZiAoY2VuZHcpIHsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBlbmR3aW4oKSB3YXMgY2FsbGVkIHByZXZpb3VzbHkgKi8KLSNpZmRl ZiBWTVMKLSAgICAgICAgaW5pdHNjcigpOyAgICAgICAgICAgICAgICAgICAgICAvKiAob3Igc2hv dWxkIGhhdmUgYmVlbiEpICovCi0gICAgICAgIGNsZWFyKCk7Ci0gICAgICAgIHRvdWNod2luKHN0 ZHNjcik7Ci0gICAgICAgIHJlZnJlc2goKTsKLSNlbHNlCi0jaWZkZWYgUU5YCi0vKgotICBJbiBR TlgsIGlmIHdlIGRvbid0IGNhbGwgaW5pdHNjcigpIGhlcmUgd2UgY29yZSBkdW1wLgotICBJIGRv bid0IGhhdmUgYW55IFFOWCBjdXJzZXMgZG9jdW1lbnRhdGlvbiwgYnV0IG90aGVyIGN1cnNlcyBt YW51YWxzCi0gIHNheSB0aGF0IGluaXRzY3IoKSBzaG91bGQgYmUgY2FsbGVkIG9ubHkgb25jZSBw ZXIgYXBwbGljYXRpb24sIGFuZAotICBleHBlcmllbmNlIHNob3dzIHRoYXQgb24gb3RoZXIgc3lz dGVtcywgY2FsbGluZyBpbml0c2NyKCkgaGVyZSBnZW5lcmFsbHkKLSAgcmVzdWx0cyBpbiBhIGNv cmUgZHVtcC4KLSovCi0gICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmMgcmUtY2FsbGluZyBpbml0 c2NyIFFOWCIsIiIsMCk7Ci0gICAgICAgIGluaXRzY3IoKTsKLSAgICAgICAgY2xlYXIoKTsKLSAg ICAgICAgcmVmcmVzaCgpOwotI2lmZGVmIENPTU1FTlQKLS8qCi0gIEJ1dCBldmVuIHNvLCBzZWNv bmQgYW5kIHN1YnNlcXVlbnQgY3Vyc2VzIGRpc3BsYXlzIGFyZSBtZXNzZWQgdXAuCi0gIENhbGxp bmcgdG91Y2h3aW4sIHJlZnJlc2gsIGV0YywgZG9lc24ndCBtYWtlIGFueSBkaWZmZXJlbmNlLgot Ki8KLSAgICAgICAgZGVidWcoRjEwMCwic2NyZWVuYyBjYWxsaW5nIHRvdWNod2luIFFOWCIsIiIs MCk7Ci0gICAgICAgIHRvdWNod2luKHN0ZHNjcik7Ci0gICAgICAgIGRlYnVnKEYxMDAsInNjcmVl bmMgY2FsbGluZyByZWZyZXNoIFFOWCIsIiIsMCk7Ci0gICAgICAgIHJlZnJlc2goKTsKLSNlbmRp ZiAvKiBDT01NRU5UICovCi0KLSNlbHNlIC8qIEFsbCBvdGhlcnMuLi4gKi8KLSAgICAgICAgZGVi dWcoRjEwMCwic2NyZWVuYyBjYWxsaW5nIGNsZWFyIiwiIiwwKTsKLSAgICAgICAgY2xlYXIoKTsK LSAgICAgICAgZGVidWcoRjEwMCwic2NyZWVuYyBjbGVhciBvayIsIiIsMCk7Ci0jZW5kaWYgLyog UU5YICovCi0jZW5kaWYgLyogVk1TICovCi0gICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmMgc2V0 dXAgb2siLCIiLDApOwotICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5jIGRvaW5nIGZpcnN0IG1v dmUiLCIiLDApOwotICAgICAgICBtb3ZlKENXX0JBTiwwKTsgICAgICAgICAgICAgICAgIC8qIERp c3BsYXkgdGhlIGJhbm5lciAqLwotICAgICAgICBkZWJ1ZyhGMTEwLCJzY3JlZW5jIG15aG9zdCIs bXlob3N0LDApOwotI2lmZGVmIFRDUFNPQ0tFVAotICAgICAgICBkZWJ1ZyhGMTEwLCJzY3JlZW5j IG15aXBhZGRyIixteWlwYWRkciwwKTsKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSNpZmRlZiBI UFVYMTAxMAotICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5jIGNhbGxpbmcgZmlyc3QgcHJpbnR3 Li4uIiwiIiwwKTsKLS8qIFJpZ2h0IGhlcmUgaXMgd2hlcmUgSFAtVVggMTAuMTAgbGlieGN1cnNl LjEgUmV2IDc2LjIwIGhhbmdzLi4uICovCi0jZW5kaWYgLyogSFBVWDEwMTAgKi8KLSAgICAgICAg aWYgKG15aG9zdFswXSkgewotI2lmZGVmIFRDUFNPQ0tFVAotICAgICAgICAgICAgaWYgKCFteWlw YWRkclswXQotI2lmZGVmIE9TMgotICAgICAgICAgICAgICAgICAvKiBXZSBuZWVkIHRvIHBlcmZv cm0gdGhpcyB0ZXN0IGJlY2F1c2Ugb24gbm9uLVRDUC9JUCAqLwotICAgICAgICAgICAgICAgICAv KiBzeXN0ZW1zIHRoZSBjYWxsIHRvIGdldGxvY2FsaXBhZGRyKCkgcmVzdWx0cyBpbiBhICAqLwot ICAgICAgICAgICAgICAgICAvKiBETlMgTG9va3VwIHdoaWNoIHRha2VzIHNldmVyYWwgbWludXRl cyB0byB0aW1lIG91dCAqLwotICAgICAgICAgICAgICAgICAmJiBuZXQgJiYKLSAgICAgICAgICAg ICAgICAgKHhuZXQgPT0gTkVUX1RDUEEgfHwgeG5ldCA9PSBORVRfVENQQgotI2lmZGVmIFNTSEJV SUxUSU4KLSAgICAgICAgICAgICAgICAgIHx8IHhuZXQgPT0gTkVUX1NTSAotI2VuZGlmIC8qIFNT SEJVSUxUSU4gKi8KLSAgICAgICAgICAgICAgICAgICkKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAg ICAgICAgICAgICAgKQotICAgICAgICAgICAgICBnZXRsb2NhbGlwYWRkcigpOwotICAgICAgICAg ICAgaWYgKG15aXBhZGRyWzBdICYmIHN0cmNtcCgoY2hhciAqKW15aG9zdCwoY2hhciAqKW15aXBh ZGRyKSkKLSAgICAgICAgICAgICAgcHJpbnR3KCIlcywgJXMgWyVzXSIsdmVyc2lvLChjaGFyICop bXlob3N0LChjaGFyICopbXlpcGFkZHIpOwotICAgICAgICAgICAgZWxzZQotI2VuZGlmIC8qIFRD UFNPQ0tFVCAqLwotICAgICAgICAgICAgICBwcmludHcoIiVzLCAlcyIsdmVyc2lvLChjaGFyICop bXlob3N0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHByaW50dygiJXMiLHZlcnNp byk7Ci0gICAgICAgIH0KLSNpZmRlZiBIUFVYMTAxMAotICAgICAgICBkZWJ1ZyhGMTAwLCJzY3Jl ZW5jIGZpcnN0IHByaW50dyByZXR1cm5zIiwiIiwwKTsKLSNlbmRpZiAvKiBIUFVYMTAxMCAqLwot ICAgICAgICBtb3ZlKENXX0RJUiwzKTsKLSAgICAgICAgcHJpbnR3KCJDdXJyZW50IERpcmVjdG9y eTogJXMiLHpndGRpcigpKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICBLdWlT ZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19ESVIsIChsb25nKSB6Z3Rk aXIoKSApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgaWYg KG5ldCkgewotICAgICAgICAgICAgbW92ZShDV19MSU4sOCk7Ci0gICAgICAgICAgICBwcmludHco Ik5ldHdvcmsgSG9zdDogJXMiLAotI2lmZGVmIE5FV0ZUUAotCQkgICBmdHAgPyAoZnRwX2hvc3Qg PyBmdHBfaG9zdCA6ICIodW5rbm93bikiKSA6Ci0jZW5kaWYgLyogTkVXRlRQICovCi0JCSAgIHR0 bmFtZQotCQkgICApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbW92ZShDV19MSU4s MCk7Ci0gICAgICAgICAgICBwcmludHcoIkNvbW11bmljYXRpb24gRGV2aWNlOiAlcyIsdHRuYW1l KTsKLSAgICAgICAgfQotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgIEt1aVNldFBy b3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0xJTiwgKGxvbmcpIHR0bmFtZSAp OwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLQotICAgICAgICBpZiAobmV0 KSB7Ci0gICAgICAgICAgICBtb3ZlKENXX1NQRCw4KTsKLSAgICAgICAgICAgIHByaW50dygiTmV0 d29yayBUeXBlOiAiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1vdmUoQ1dfU1BE LDEpOwotICAgICAgICAgICAgcHJpbnR3KCJDb21tdW5pY2F0aW9uIFNwZWVkOiAiKTsKLSAgICAg ICAgfQotICAgICAgICBtb3ZlKENXX1NQRCwyMik7ICAgICAgICAgICAgICAgIC8qIFNlcmlhbCBz cGVlZCBvciBuZXR3b3JrIHR5cGUgKi8KLSAgICAgICAgaWYgKG5ldCkgewotI2lmZGVmIE5FVENP Tk4KLQkgICAgaW50IHNlY3VyZSA9IDA7Ci0JICAgIGNoYXIgKiB4bmFtZTsKLQkgICAgaWYgKHhu ZXQgPiBubmV0bmFtZSkKLQkgICAgICB4bmFtZSA9ICJbRVJST1JdIjsKLQkgICAgZWxzZQotCSAg ICAgIHhuYW1lID0gbmV0bmFtZVt4bmV0XTsKLSNpZmRlZiBORVdGVFAKLSAgICAgICAgICAgIGlm IChmdHApIHsKLQkJaWYgKGZ0cGlzc2VjdXJlKCkpCi0JCSAgc2VjdXJlID0gMTsKLQkgICAgfSBl bHNlCi0jZW5kaWYgLyogTkVXRlRQICovCi0JICAgICAgaWYgKDAKLSNpZmRlZiBTU0hCVUlMVElO Ci0gICAgICAgICAgICAgICAgfHwgSVNfU1NIKCkKLSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0j aWZkZWYgQ0tfRU5DUllQVElPTgotICAgICAgICAgICAgICAgIHx8IGNrX3RuX2VuY3J5cHRpbmco KSAmJiBja190bl9kZWNyeXB0aW5nKCkKLSNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCi0jaWZk ZWYgQ0tfU1NMCi0gICAgICAgICAgICAgICAgfHwgdGxzX2FjdGl2ZV9mbGFnIHx8IHNzbF9hY3Rp dmVfZmxhZwotI2VuZGlmIC8qIENLX1NTTCAqLwotI2lmZGVmIFJMT0dDT0RFCi0jaWZkZWYgQ0tf S0VSQkVST1MKLSNpZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAgICAgICAgICAgfHwgdHRucHJv dG8gPT0gTlBfRUs0TE9HSU4gfHwgdHRucHJvdG8gPT0gTlBfRUs1TE9HSU4KLSNlbmRpZiAvKiBD S19FTkNSWVBUSU9OICovCi0jZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KLSNlbmRpZiAvKiBSTE9H Q09ERSAqLwotICAgICAgICAgICAgICAgICApIHsKLQkJc2VjdXJlID0gMTsKLQkgICAgfQotCSAg ICBpZiAoc2VjdXJlKSB7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgICAg ICBjaGFyIGJ1ZlszMF07Ci0gICAgICAgICAgICAgICAgc3ByaW50ZihidWYsIiVzIChTRUNVUkUp Iix4bmFtZSk7Ci0gICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNG RVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1NQRCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgYnVmCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAg ICAgICAgICAgICAgcHJpbnR3KCIlcyAoU0VDVVJFKSIseG5hbWUpOwotICAgICAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgICAgICBwcmludHcoIiVzIix4bmFtZSk7Ci0jaWZkZWYgS1VJCi0j aWZuZGVmIEs5NUcKLSAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFO U0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfU1BELAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSB4bmFtZQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwot ICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgIHByaW50dygiKG5ldHdvcmspIik7Ci0j aWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9G SUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1NQRCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiKG5ldHdvcmspIgotICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICov Ci0jZW5kaWYgLyogTkVUQ09OTiAqLwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYg KHNwZWVkIDwgMEwpCi0gICAgICAgICAgICAgIHNwZWVkID0gdHRnc3BkKCk7Ci0gICAgICAgICAg ICBpZiAoc3BlZWQgPiAwTCkgewotICAgICAgICAgICAgICAgIGlmIChzcGVlZCA9PSA4ODgwKSB7 Ci0gICAgICAgICAgICAgICAgICAgIHByaW50dygiNzUvMTIwMCIpOwotI2lmZGVmIEtVSQotI2lm bmRlZiBLOTVHCi0gICAgICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RS QU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfU1BE LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIjc1LzEyMDAiCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYgLyogSzk1RyAqLwot I2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg ICAgICAgIGNoYXIgc3BlZWRidWZbNjRdIDsKLSAgICAgICAgICAgICAgICAgICAgc3ByaW50Zihz cGVlZGJ1ZiwgIiVsZCIsIHNwZWVkKTsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnR3KCIlcyIs c3BlZWRidWYpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICAgICAgICAg IEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAobG9uZykgQ1dfU1BELAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAobG9uZykgc3BlZWRidWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcmludHcoInVua25v d24iKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgICAgIEt1aVNldFBy b3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChsb25nKSBDV19TUEQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICIo dW5rbm93bikiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbmRpZiAvKiBL OTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg ICAgbW92ZShDV19QQVIsMTQpOwotICAgICAgICBwcmludHcoIlBhcml0eTogJXMiLGZ0cCA/ICJu b25lIiA6IHBhcm5hbSgoY2hhcilwYXJpdHkpKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1Rwot ICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAg ICAgICAgICAgKGxvbmcpIENXX1BBUiwKLSAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHBh cm5hbSgoY2hhcilwYXJpdHkpCi0gICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYgLyog Szk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotI2lmZGVmIENLX1RJTUVSUwotICAgICAgICBpZiAo LyogcnR0ZmxnICYmICovIHByb3RvY29sID09IFBST1RPX0spIHsKLSAgICAgICAgICAgIG1vdmUo Q1dfVE1PLCA5KTsgcHJpbnR3KCJSVFQvVGltZW91dDoiKTsgfQotI2VuZGlmIC8qIENLX1RJTUVS UyAqLwotICAgICAgICBtb3ZlKENXX1RZUCwxMSk7IHByaW50dygiRmlsZSBUeXBlOiIpOwotICAg ICAgICBtb3ZlKENXX1NJWiwxMSk7IHByaW50dygiRmlsZSBTaXplOiIpOwotICAgICAgICBtb3Zl KENXX1BDRCwgOCk7Ci0gICAgICAgIGNscnRvZW9sKCk7Ci0gICAgICAgIHBjdGxibCA9ICh3aGF0 ICYgV19TRU5EKTsKLSAgICAgICAgcHJpbnR3KCIlczoiLCBwY3RsYmwgPyAiUGVyY2VudCBEb25l IiA6ICJCeXRlcyBTbyBGYXIiKTsKLQotI2lmZGVmIFhZWl9JTlRFUk5BTAotICAgICAgICBtb3Zl KENXX0JBUiwgMSk7Ci0gICAgICAgIHByaW50dygiJTEwcyBQcm90b2NvbDoiLCBmdHAgPyAiRlRQ IiA6IHB0YWJbcHJvdG9jb2xdLnBfbmFtZSk7Ci0jZW5kaWYgLyogWFlaX0lOVEVSTkFMICovCi0j aWZkZWYgQ0tfUENUX0JBUgotICAgICAgICBpZiAodGhlcm1vbWV0ZXIpIHsKLSAgICAgICAgICAg IG9sZHBjdCA9IHBjdCA9IDA7Ci0gICAgICAgICAgICBtb3ZlKENXX0JBUiwyMik7Ci0gICAgICAg ICAgICBwcmludHcoIiAgICAuLi4xMC4uLjIwLi4uMzAuLi40MC4uLjUwLi4uNjAuLi43MC4uLjgw Li4uOTAuLjEwMCIpOwotICAgICAgICAgICAgbW92ZShDV19CQVIsMjIrNTYpOwotICAgICAgICB9 Ci0jZW5kaWYgLyogQ0tfUENUX0JBUiAqLwotICAgICAgICBtb3ZlKENXX1RSLCAgMSk7IHByaW50 dygiRXN0aW1hdGVkIFRpbWUgTGVmdDoiKTsKLSAgICAgICAgbW92ZShDV19DUCwgIDIpOyBwcmlu dHcoIlRyYW5zZmVyIFJhdGUsIENQUzoiKTsKLSAgICAgICAgbW92ZShDV19XUywgIDgpOyBwcmlu dHcoIldpbmRvdyBTbG90czolcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgo cHJvdG9jb2wgPT0gUFJPVE9fSykgJiYgIWZ0cCkgPwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiIiA6ICIgTi9BIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwot ICAgICAgICBtb3ZlKENXX1BULCAgOSk7IHByaW50dygiUGFja2V0IFR5cGU6Iik7Ci0gICAgICAg IGlmIChmdHAgfHwgcHJvdG9jb2wgIT0gUFJPVE9fSykgewotCSAgICBtb3ZlKENXX1BULDIyKTsK LSAgICAgICAgICAgIHByaW50dygiJXMiLCAiTi9BIik7Ci0gICAgICAgICAgICBtb3ZlKENXX1BD LCAgMTEpOyBwcmludHcoIkkvTyBDb3VudDoiKTsKLSAgICAgICAgICAgIG1vdmUoQ1dfUEwsICAx MCk7IHByaW50dygiSS9PIExlbmd0aDoiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg IG1vdmUoQ1dfUEMsICA4KTsgcHJpbnR3KCJQYWNrZXQgQ291bnQ6Iik7Ci0gICAgICAgICAgICBt b3ZlKENXX1BMLCAgNyk7IHByaW50dygiUGFja2V0IExlbmd0aDoiKTsKLSAgICAgICAgfQotI2lm bmRlZiBDT01NRU5UCi0gICAgICAgIG1vdmUoQ1dfUFIsICA5KTsgcHJpbnR3KCJFcnJvciBDb3Vu dDoiKTsKLSNlbHNlCi0gICAgICAgIG1vdmUoQ1dfUFIsICAyKTsgcHJpbnR3KCJQYWNrZXQgUmV0 cnkgQ291bnQ6Iik7Ci0jZW5kaWYKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIG1vdmUoQ1dfUEIs ICAyKTsgcHJpbnR3KCJQYWNrZXQgQmxvY2sgQ2hlY2s6Iik7Ci0jZW5kaWYgLyogQ09NTUVOVCAq LwotICAgICAgICBtb3ZlKENXX0VSUiwxMCk7IHByaW50dygiTGFzdCBFcnJvcjoiKTsKLSAgICAg ICAgbW92ZShDV19NU0csIDgpOyBwcmludHcoIkxhc3QgTWVzc2FnZToiKTsKLQlpZiAoeGZybXNn KSB7Ci0JICAgIG1vdmUoQ1dfTVNHLCAyMik7IHByaW50dygiJXMiLHhmcm1zZyk7Ci0JICAgIG1h a2VzdHIoJnhmcm1zZyxOVUxMKTsKLQl9Ci0gICAgICAgIG1vdmUoQ1dfSU5ULCAwKTsKLSAgICAg ICAgaWYgKCF4ZnJpbnQpIHsKLSAgICAgICAgICAgIHByaW50dygiKFRyYW5zZmVyIGludGVycnVw dGlvbiBpcyBkaXNhYmxlZCkiKTsKLSAgICAgICAgfSBlbHNlIHsKLSNpZmRlZiBDS19ORUVEX1NJ RwotICAgICAgICAgICAgcHJpbnR3KAotIjwlcz5YIHRvIGNhbmNlbCBmaWxlLCA8JXM+WiB0byBj YW5jZWwgZ3JvdXAsIDwlcz48Q1I+IHRvIHJlc2VuZCBsYXN0IHBhY2tldCIsCi0gICAgICAgICAg ICAgICAgICAgZGJjaHIoZXNjYXBlKSwgZGJjaHIoZXNjYXBlKSwgZGJjaHIoZXNjYXBlKQotICAg ICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBtb3ZlKENXX0lOVCArIDEsIDApOwotICAg ICAgICAgICAgcHJpbnR3KAotIjwlcz5FIHRvIHNlbmQgRXJyb3IgcGFja2V0LCBeQyB0byBxdWl0 IGltbWVkaWF0ZWx5LCA8JXM+TCB0byByZWZyZXNoIHNjcmVlbi4iLAotICAgICAgICAgICAgICAg ICAgIGRiY2hyKGVzY2FwZSksIGRiY2hyKGVzY2FwZSkKLSAgICAgICAgICAgICAgICAgICApOwot I2Vsc2UgLyogIUNLX05FRURfU0lHICovCi0gICAgICAgICAgICBtb3ZlKENXX0lOVCwgMCk7Ci0j aWZkZWYgT1MyCi0gICAgICAgICAgICBpZiAocHJvdG9jb2wgPT0gUFJPVE9fSykgewotICAgICAg ICAgICAgICAgIHByaW50dygKLSJYIHRvIGNhbmNlbCBmaWxlLCBaIHRvIGNhbmNlbCBncm91cCwg PEVudGVyPiB0byByZXNlbmQgbGFzdCBwYWNrZXQsIgotICAgICAgICAgICAgICAgICAgICAgICAp OwotICAgICAgICAgICAgfQotI2Vsc2UgLyogIU9TMiAqLwotI2lmZGVmIFZNUyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEluIFZNUyBhdm9pZCBib3R0b20gbGluZSAqLwotICAgICAg ICAgICAgcHJpbnR3KAotIlg6IENhbmNlbCB0aGlzIGZpbGU7IEU6IENhbmNlbCB0cmFuc2Zlcjsg XkM6IFF1aXQgbm93OyBeVzogUmVmcmVzaCBzY3JlZW4uIgotICAgICAgICAgICAgICAgICAgICk7 Ci0jZWxzZQotICAgICAgICAgICAgcHJpbnR3KAotIlggdG8gY2FuY2VsIGZpbGUsIFogdG8gY2Fu Y2VsIGdyb3VwLCA8Q1I+IHRvIHJlc2VuZCBsYXN0IHBhY2tldCwiCi0gICAgICAgICAgICAgICAg ICAgKTsKLSNlbmRpZiAvKiBWTVMgKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmbmRlZiBWTVMK LSAgICAgICAgICAgIG1vdmUoQ1dfSU5UICsgMSwgMCk7Ci0gICAgICAgICAgICBpZiAocHJvdG9j b2wgPT0gUFJPVE9fSykgewotICAgICAgICAgICAgICAgIHByaW50dygKLSJFIHRvIHNlbmQgRXJy b3IgcGFja2V0LCBeQyB0byBxdWl0IGltbWVkaWF0ZWx5LCBeTCB0byByZWZyZXNoIHNjcmVlbi4i Ci0gICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg ICAgICAgICAgIHByaW50dygiXkMgdG8gY2FuY2VsIGZpbGUgdHJhbnNmZXIuIik7Ci0gICAgICAg ICAgICB9Ci0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogQ0tfTkVFRF9TSUcgKi8KLSAgICAg ICAgfQotICAgICAgICByZWZyZXNoKCk7Ci0gICAgICAgIGNlbmR3ID0gMDsKLSAgICB9Ci0gICAg ZGVidWcoRjEwMSwiU0NSRUVOQyBzd2l0Y2giLCIiLGYpOwotICAgIGRlYnVnKEYwMDAsIlNDUkVF TkMgYyIsIiIsYyk7Ci0gICAgZGVidWcoRjEwMSwiU0NSRUVOQyBuIiwiIixuKTsKLQotICAgIGxl biA9IHN0cmxlbihzKTsgICAgICAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBhcmd1bWVudCBz dHJpbmcgKi8KLSAgICBzd2l0Y2ggKGYpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBIYW5k bGUgb3VyIGZ1bmN0aW9uIGNvZGUgKi8KLSAgICAgIGNhc2UgU0NSX0ZOOiAgICAgICAgICAgICAg ICAgICAgICAvKiBGaWxlbmFtZSAqLwotICAgICAgICBvbGRwY3QgPSBwY3QgPSAwTDsgICAgICAg ICAgICAgIC8qIFJlc2V0IHBlcmNlbnRzICovCi0jaWZkZWYgR0ZUSU1FUgotICAgICAgICBndHYg PSAoQ0tGTE9BVCkgLTEuMDsKLSAgICAgICAgLyogb2xkZ3R2ID0gKENLRkxPQVQpIC0xLjA7ICov Ci0jZWxzZQotICAgICAgICBndHYgPSAtMUw7Ci0gICAgICAgIC8qIG9sZGd0diA9IC0xTDsgKi8K LSNlbmRpZiAvKiBHRlRJTUVSICovCi0gICAgICAgIG9sZHdpbiA9IC0xOwotICAgICAgICBmc2l6 ID0gKENLX09GRl9UKS0xOwkJLyogSW52YWxpZGF0ZSBwcmV2aW91cyBmaWxlIHNpemUgKi8KLSAg ICAgICAgbW92ZShDV19QQ0QsMjIpOyAgICAgICAgICAgICAgICAvKiBFcmFzZSBwZXJjZW50IGRv bmUgZnJvbSBsYXN0IHRpbWUgKi8KLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICBL dWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19QQ0QsIChsb25nKSAw ICk7Ci0gICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENX X0ZGQywgKGxvbmcpIDAgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0g ICAgICAgIGNscnRvZW9sKCk7Ci0gICAgICAgIG1vdmUoQ1dfU0laLDIyKTsgICAgICAgICAgICAg ICAgLyogRXJhc2UgZmlsZSBzaXplIGZyb20gbGFzdCB0aW1lICovCi0jaWZkZWYgS1VJCi0jaWZu ZGVmIEs5NUcKLSAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9u ZykgQ1dfU0laLCAobG9uZykgMCApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkg Ki8KLSAgICAgICAgY2xydG9lb2woKTsKLSAgICAgICAgbW92ZShDV19FUlIsMjIpOyAgICAgICAg ICAgICAgICAvKiBBbmQgbGFzdCBlcnJvciBtZXNzYWdlICovCi0jaWZkZWYgS1VJCi0jaWZuZGVm IEs5NUcKLSAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykg Q1dfRVJSLCAobG9uZykgIiIgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICov Ci0gICAgICAgIGNscnRvZW9sKCk7Ci0jaWZkZWYgQ09NTUVOVAotI2lmZGVmIFNUUkVBTUlORwot ICAgICAgICBpZiAocHJvdG9jb2wgPT0gUFJPVE9fSyAmJiBzdHJlYW1vaykgewotICAgICAgICAg ICAgbW92ZShDV19CQVIsIDEpOwotI2lmZGVmIFhZWl9JTlRFUk5BTAotICAgICAgICAgICAgcHJp bnR3KCIgICBLZXJtaXQgU1RSRUFNSU5HOiIpOwotI2Vsc2UKLSAgICAgICAgICAgIHByaW50dygi ICAgICAgICAgIFNUUkVBTUlORzoiKTsKLSNlbmRpZiAvKiBYWVpfSU5URVJOQUwgKi8KLSAgICAg ICAgfQotI2VuZGlmIC8qIFNUUkVBTUlORyAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLQotICAg ICAgICBpZiAod2hhdCAmIFdfU0VORCkgewkJLyogSWYgd2UncmUgc2VuZGluZy4uLiAqLwotI2lm ZGVmIE5FV0ZUUAotCSAgICBpZiAod2hhdCAmIFdfRlRQKSB7CQkvKiBGVFAgKi8KLSAgICAgICAg ICAgICAgICBtb3ZlKENXX05BTSwxMCk7Ci0gICAgICAgICAgICAgICAgcHJpbnR3KCIgICBGVFAg UFVUOiIpOwotCSAgICB9IGVsc2UKLSNlbmRpZiAvKiBORVdGVFAgKi8KLSNpZmRlZiBDS19SRVNF TkQKLSAgICAgICAgICAgIHN3aXRjaCAoc2VuZG1vZGUpIHsJCS8qIEtlcm1pdCAqLwotICAgICAg ICAgICAgICBjYXNlIFNNX1JFU0VORDoKLSAgICAgICAgICAgICAgICBtb3ZlKENXX05BTSwxMCk7 Ci0gICAgICAgICAgICAgICAgcHJpbnR3KCIgUkVTRU5ESU5HOiIpOwotICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIG1vdmUoQ1df TkFNLDEwKTsKLSAgICAgICAgICAgICAgICBwcmludHcoIiAgIFNFTkRJTkc6Iik7Ci0gICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgbW92ZShD V19OQU0sMTApOwotICAgICAgICAgICAgcHJpbnR3KCIgICBTRU5ESU5HOiIpOwotI2VuZGlmIC8q IENLX1JFU0VORCAqLwotCi0gICAgICAgIH0gZWxzZSBpZiAod2hhdCAmIFdfUkVDVikgewkvKiBJ ZiB3ZSdyZSByZWNlaXZpbmcuLi4gKi8KLSNpZmRlZiBORVdGVFAKLQkgICAgaWYgKHdoYXQgJiBX X0ZUUCkgewkJLyogRlRQICovCi0gICAgICAgICAgICAgICAgbW92ZShDV19OQU0sMTApOwotICAg ICAgICAgICAgICAgIHByaW50dygiICAgRlRQIEdFVDoiKTsKLQkgICAgfSBlbHNlIHsKLSNlbmRp ZiAvKiBORVdGVFAgKi8KLQkJbW92ZShDV19OQU0sMTApOwotCQlwcmludHcoIiBSRUNFSVZJTkc6 Iik7Ci0jaWZkZWYgTkVXRlRQCi0JICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICh3aGF0ID09IChX X0ZUUHxXX0ZUX0RFTEUpKSB7Ci0JCW1vdmUoQ1dfTkFNLDEwKTsKLQkJcHJpbnR3KCJGVFAgREVM RVRFOiIpOwotI2VuZGlmIC8qIE5FV0ZUUCAqLwotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIElmIHdlIGRvbid0IGtub3cuLi4gKi8KLSAgICAgICAgICAgIG1vdmUo Q1dfTkFNLDEwKTsgICAgICAgICAgICAvKiAoc2hvdWxkIG5ldmVyIHNlZSB0aGlzKSAqLwotICAg ICAgICAgICAgcHJpbnR3KCIgRmlsZSBOYW1lOiIpOwotICAgICAgICB9Ci0gICAgICAgIG1vdmUo Q1dfTkFNLDIyKTsgICAgICAgICAgICAgICAgLyogRGlzcGxheSB0aGUgZmlsZW5hbWUgKi8KLSAg ICAgICAgaWYgKGxlbiA+IDU3KSB7Ci0gICAgICAgICAgICBwcmludHcoIiUuNTVzLi4iLHMpOwot ICAgICAgICAgICAgbGVuID0gNTc7Ci0gICAgICAgIH0gZWxzZSBwcmludHcoIiVzIixzKTsKLSNp ZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVf VFJBTlNGRVIsIChsb25nKSBDV19OQU0sIChsb25nKSBzICk7Ci0jZW5kaWYgLyogSzk1RyAqLwot I2VuZGlmIC8qIEtVSSAqLwotICAgICAgICBxID0gbGVuOyAgICAgICAgICAgICAgICAgICAgICAg IC8qIFJlbWVtYmVyIG5hbWUgbGVuZ3RoIGZvciBsYXRlciAqLwotICAgICAgICBjbHJ0b2VvbCgp OwotICAgICAgICBzY3JmdCgpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIERpc3BsYXkgZmls ZSB0eXBlIChjYW4gY2hhbmdlKSAqLwotICAgICAgICByZWZyZXNoKCk7Ci0jaWZkZWYgT1MyCi0g ICAgICAgIFNhdmVDbWRNb2RlKDAsIDApOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICByZXR1 cm47Ci0KLSAgICAgIGNhc2UgU0NSX0FOOiAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIGFz LW5hbWUgKi8KLSAgICAgICAgaWYgKHEgKyBsZW4gKyA0IDwgNTgpIHsgICAgICAgICAvKiBXaWxs IGZpdCAqLwotICAgICAgICAgICAgbW92ZShDV19OQU0sIDIyICsgcSk7Ci0gICAgICAgICAgICBw cmludHcoIiA9PiAlcyIscyk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAg IEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX05BTSwgKGxvbmcp IHMgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgIH0gZWxz ZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogVG9vIGxvbmcgKi8KLSAgICAgICAgICAgIG1v dmUoQ1dfTkFNLCAyMik7ICAgICAgICAgICAvKiBPdmVyd3JpdGUgcHJldmlvdXMgbmFtZSAqLwot ICAgICAgICAgICAgcSA9IDA7Ci0gICAgICAgICAgICBpZiAobGVuICsgNCA+IDU3KSB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd2cxNSAqLwotICAgICAgICAgICAgICAgIHBy aW50dygiID0+ICUuNTFzLi4iLHMpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdnMTUgKi8K LSAgICAgICAgICAgICAgICBsZW4gPSA1MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiB3ZzE1ICovCi0gICAgICAgICAgICB9IGVsc2UgcHJpbnR3KCIgPT4gJXMiLHMp OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd2cxNSAqLwotI2lmZGVmIEtVSQotI2lmbmRl ZiBLOTVHCi0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChs b25nKSBDV19OQU0sIChsb25nKSBzICApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBL VUkgKi8KLSAgICAgICAgfQotICAgICAgICBxICs9IGxlbiArIDQ7ICAgICAgICAgICAgICAgICAg IC8qIFJlbWVtYmVyIGhvcml6b250YWwgcG9zaXRpb24gKi8KLSAgICAgICAgY2xydG9lb2woKTsK LSAgICAgICAgcmVmcmVzaCgpOwotI2lmZGVmIE9TMgotICAgICAgICBTYXZlQ21kTW9kZSgwLCAw KTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9G UzogICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBzaXplICovCi0gICAgICAgIGZzaXogPSBu OwotICAgICAgICBtb3ZlKENXX1NJWiwyMik7Ci0gICAgICAgIGlmIChmc2l6ID4gKENLX09GRl9U KS0xKSB7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAgIEt1aVNldFByb3Bl cnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1NJWiwgKGxvbmcpIG4gKTsKLSNlbmRp ZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICBwcmludHcoIiVzIixj a2ZzdG9hKG4pKTsKLSAgICAgICAgfQotCWlmIChmc2l6ID09IC0yTCkgewotCSAgICBwcmludHco IlBPU1NJQkxZIEVYQ0VFRFMgTE9DQUwgRklMRSBTSVpFIExJTUlUIik7Ci0JfQotICAgICAgICBj bHJ0b2VvbCgpOwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgbW92ZShDV19QQ0QsIDgpOwotICAg ICAgICBpZiAoZnNpeiA+IChDS19PRkZfVCktMSkgewkvKiBQdXQgdXAgcGVyY2VudCBsYWJlbCAq LwotICAgICAgICAgICAgcGN0bGJsID0gMTsKLQkgICAgY2xydG9lb2woKTsKLSAgICAgICAgICAg IHByaW50dygiUGVyY2VudCBEb25lOiIpOwotICAgICAgICB9Ci0jZWxzZQotCW1vdmUoQ1dfUENE LCA4KTsKLQljbHJ0b2VvbCgpOwotICAgICAgICBpZiAoZnNpeiA+IChDS19PRkZfVCktMSkgewkv KiBQdXQgdXAgcGVyY2VudCBsYWJlbCAqLwotICAgICAgICAgICAgcGN0bGJsID0gMTsKLSAgICAg ICAgICAgIHByaW50dygiUGVyY2VudCBEb25lOiIpOwotICAgICAgICB9IGVsc2UgewotICAgICAg ICAgICAgcGN0bGJsID0gMDsKLSAgICAgICAgICAgIHByaW50dygiQnl0ZXMgU28gRmFyOiIpOwot CX0KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAgIGNscnRvZW9sKCk7Ci0gICAgICAgIHNj cmZ0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSB0eXBlICovCi0gICAgICAgIHJl ZnJlc2goKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgU2F2ZUNtZE1vZGUoMCwgMCk7Ci0jZW5kaWYg LyogT1MyICovCi0gICAgICAgIHJldHVybjsKLQotICAgICAgY2FzZSBTQ1JfUFQ6ICAgICAgICAg ICAgICAgICAgICAgIC8qIFBhY2tldCB0eXBlIG9yIHBzZXVkb3R5cGUgKi8KLSAgICAgICAgaWYg KHNwYWNrZXRzIDwgNSkgewotICAgICAgICAgICAgZXh0ZXJuIGludCBzeXNpbmRleDsKLSAgICAg ICAgICAgIGV4dGVybiBzdHJ1Y3Qgc3lzZGF0YSBzeXNpZGxpc3RbXTsKLSAgICAgICAgICAgIC8q IFRoaW5ncyB0aGF0IHdvbid0IGNoYW5nZSBhZnRlciB0aGUgNHRoIHBhY2tldCAqLwotICAgICAg ICAgICAgbW92ZShDV19QQVIsMjIpOwotICAgICAgICAgICAgcHJpbnR3KCIlcyIscGFybmFtKChj aGFyKXBhcml0eSkpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICBLdWlT ZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAobG9uZykgQ1dfUEFSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHBhcm5h bSgoY2hhcilwYXJpdHkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2VuZGlmIC8q IEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgIGNscnRvZW9sKCk7Ci0jaWZk ZWYgQ09NTUVOVAotICAgICAgICAgICAgbW92ZShDV19QQiwgMjIpOyAgICAgICAgICAgIC8qIEJs b2NrIGNoZWNrIG9uIHRoaXMgcGFja2V0ICovCi0gICAgICAgICAgICBpZiAoYmN0dSA9PSA0KQot ICAgICAgICAgICAgICBwcmludHcoIkIiKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg ICAgcHJpbnR3KCIlZCIsYmN0dSk7Ci0gICAgICAgICAgICBjbHJ0b2VvbCgpOwotI2VuZGlmIC8q IENPTU1FTlQgKi8KLSAgICAgICAgICAgIGlmICgKLSNpZmRlZiBORVdGVFAKLQkJKGZ0cCAmJiAo c3BhY2tldHMgPT0gMSB8fCBycGFja2V0cyA9PSAxKSkgfHwKLSNlbmRpZiAvKiBORVdGVFAgKi8K LQkJc3BhY2tldHMgPT0gNAotCQkpIHsKLSAgICAgICAgICAgICAgICBtb3ZlKENXX0xJTiw4KTsK LSAgICAgICAgICAgICAgICBpZiAoCi0jaWZkZWYgTkVXRlRQCi0JCSAgICBmdHAgfHwKLSNlbmRp ZiAvKiBORVdGVFAgKi8KLQkJICAgICgocHJvdG9jb2wgPT0gUFJPVE9fSykgJiYgKHN5c2luZGV4 ID4gLTEpKQotCQkgICAgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuZXQpIHsKLSAgICAg ICAgICAgICAgICAgICAgICAgIG1vdmUoQ1dfTElOLDgpOwotICAgICAgICAgICAgICAgICAgICAg ICAgcHJpbnR3KCJOZXR3b3JrIEhvc3Q6ICVzICglcykiLAotI2lmZGVmIE5FV0ZUUAotCQkJICAg ICAgIGZ0cCA/IChmdHBfaG9zdCA/IGZ0cF9ob3N0IDogIiIpIDoKLSNlbmRpZiAvKiBORVdGVFAg Ki8KLQkJCSAgICAgICB0dG5hbWUsCi0jaWZkZWYgTkVXRlRQCi0JCQkgICAgICAgZnRwID8gZnRw X3NydnR5cCA6Ci0jZW5kaWYgLyogTkVXRlRQICovCi0JCQkgICAgICAgc3lzaWRsaXN0W3N5c2lu ZGV4XS5zaWRfbmFtZQotCQkJICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICBtb3ZlKENXX0xJTiwwKTsKLSAgICAgICAgICAgICAg ICAgICAgICAgIHByaW50dygiQ29tbXVuaWNhdGlvbiBEZXZpY2U6ICVzIChyZW1vdGUgaG9zdCBp cyAlcykiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dG5hbWUsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN5c2lkbGlzdFtzeXNpbmRleF0uc2lkX25hbWUKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgICAgICBjbHJ0b2VvbCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K LSAgICAgICAgfQotI2lmZGVmIENLX1RJTUVSUwotICAgICAgICBpZiAoLyogcnR0ZmxnICYmICov IHByb3RvY29sID09IFBST1RPX0spIHsKLSAgICAgICAgICAgIGxvbmcgeHg7Ci0gICAgICAgICAg ICBpZiAoCi0jaWZkZWYgU1RSRUFNSU5HCi0gICAgICAgICAgICAgICAgc3RyZWFtaW5nICYmIG9s ZHdpbiAhPSAtMgotI2Vsc2UKLSAgICAgICAgICAgICAgICAwCi0jZW5kaWYgLyogU1RSRUFNSU5H ICovCi0gICAgICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAgICAgbW92ZShDV19UTU8sIDIy KTsKLSAgICAgICAgICAgICAgICBwcmludHcoIjAwIC8gMDAiKTsKLSAgICAgICAgICAgICAgICBj bHJ0b2VvbCgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB4eCA9IChy dHRkZWxheSArIDUwMCkgLyAxMDAwOwotICAgICAgICAgICAgICAgIGlmICh4eCAhPSBvbGRydHQg fHwgcmN2dGltbyAhPSBvbGR0aW0pIHsKLSAgICAgICAgICAgICAgICAgICAgbW92ZShDV19UTU8s IDIyKTsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnR3KCIlMDJsZCAvICUwMmQiLCB4eCwgcmN2 dGltbyk7Ci0gICAgICAgICAgICAgICAgICAgIG9sZHJ0dCA9IHh4OwotICAgICAgICAgICAgICAg ICAgICBvbGR0aW0gPSByY3Z0aW1vOwotICAgICAgICAgICAgICAgICAgICBjbHJ0b2VvbCgpOwot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIENL X1RJTUVSUyAqLwotCi0gICAgICAgIHggPSAod2hhdCAmIFdfUkVDVikgPyAgICAgICAgICAvKiBQ YWNrZXQgbGVuZ3RoICovCi0gICAgICAgICAgcnBrdGwrKHByb3RvY29sPT1QUk9UT19LPzE6MCkg OgotICAgICAgICAgICAgc3BrdGw7Ci0gICAgICAgIGlmICh4ICE9IG9sZGxlbikgeyAgICAgICAg ICAgICAgLyogQnV0IG9ubHkgaWYgaXQgY2hhbmdlZC4gKi8KLSAgICAgICAgICAgIG1vdmUoQ1df UEwsIDIyKTsKLSAgICAgICAgICAgIHByaW50dygiJWQiLHgpOwotI2lmZGVmIEtVSQotI2lmbmRl ZiBLOTVHCi0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChs b25nKSBDV19QTCwgKGxvbmcpIHggKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJ ICovCi0gICAgICAgICAgICBjbHJ0b2VvbCgpOwotICAgICAgICAgICAgb2xkbGVuID0geDsKLSAg ICAgICAgfQotICAgICAgICBtb3ZlKENXX1BDLCAyMik7ICAgICAgICAgICAgICAgIC8qIFBhY2tl dCBjb3VudCAoYWx3YXlzKS4gKi8KLQotICAgICAgICBwcmludHcoIiVkIiwgKHdoYXQgJiBXX1JF Q1YpID8gcnBhY2tldHMgOiBzcGFja2V0cyk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAg ICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfUEMsIChs b25nKSBzcGFja2V0cyApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAg ICAgICAgY2xydG9lb2woKTsKLQotICAgICAgICBpZiAocHJvdG9jb2wgPT0gUFJPVE9fSyAmJiAh ZnRwKSB7IC8qIFdpbmRvdyBzbG90cyAqLwotICAgICAgICAgICAgY2hhciB3c1sxNl07Ci0gICAg ICAgICAgICBpbnQgZmxhZzsKLSAgICAgICAgICAgIGZsYWcgPSAwOwotI2lmZGVmIFNUUkVBTUlO RwotICAgICAgICAgICAgaWYgKHN0cmVhbWluZykgewotICAgICAgICAgICAgICAgIGlmIChvbGR3 aW4gIT0gLTIpIHsKLSAgICAgICAgICAgICAgICAgICAgc3ByaW50Zih3cywiU1RSRUFNSU5HIik7 Ci0gICAgICAgICAgICAgICAgICAgIGZsYWcgPSAxOwotICAgICAgICAgICAgICAgICAgICBvbGR3 aW4gPSAtMjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UKLSNlbmRpZiAv KiBTVFJFQU1JTkcgKi8KLSAgICAgICAgICAgICAgaWYgKHdjdXIgIT0gb2xkd2luKSB7Ci0gICAg ICAgICAgICAgICAgICBzcHJpbnRmKHdzLCAiJWQgb2YgJWQiLCB3Y3VyIDwgMSA/IDEgOiB3Y3Vy LCB3c2xvdG4pOwotICAgICAgICAgICAgICAgICAgZmxhZyA9IDE7Ci0gICAgICAgICAgICAgICAg ICBvbGR3aW4gPSB3Y3VyOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZmxhZykg ewotICAgICAgICAgICAgICAgIG1vdmUoQ1dfV1MsIDIyKTsKLSAgICAgICAgICAgICAgICBwcmlu dHcoIiVzIiwgd3MpOwotICAgICAgICAgICAgICAgIGNscnRvZW9sKCk7Ci0jaWZkZWYgS1VJCi0j aWZuZGVmIEs5NUcKLSAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJB TlNGRVIsIChsb25nKSBDV19XUywgKGxvbmcpIHdzICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2Vu ZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVycm9ycyA9 IHJldHJhbnMgKyBjcnVuY2hlZCArIHRpbWVvdXRzOwotICAgICAgICBpZiAoZXJyb3JzICE9IG9s ZHRyeSkgeyAgICAgICAgIC8qIFJldHJ5IGNvdW50LCBpZiBjaGFuZ2VkICovCi0gICAgICAgICAg ICBtb3ZlKENXX1BSLCAyMik7Ci0gICAgICAgICAgICBwcmludHcoIiVkIixlcnJvcnMpOwotI2lm ZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJ TEVfVFJBTlNGRVIsIChsb25nKSBDV19QUiwgKGxvbmcpIGVycm9ycyApOwotI2VuZGlmIC8qIEs5 NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgIGNscnRvZW9sKCk7Ci0gICAgICAg ICAgICBvbGR0cnkgPSBlcnJvcnM7Ci0gICAgICAgIH0KLQkvKiBTZW5kZXIncyBwYWNrZXQgdHlw ZSAqLwotICAgICAgICBpZiAoIWZ0cCAmJiAoYyAhPSBvbGR0eXAgJiYgYyAhPSAnWScgJiYgYyAh PSAnTicpKSB7Ci0gICAgICAgICAgICBjaGFyIHR5cGVbMl07Ci0gICAgICAgICAgICBzcHJpbnRm KHR5cGUsICIlYyIsYyk7Ci0gICAgICAgICAgICBtb3ZlKENXX1BULDIyKTsKLSAgICAgICAgICAg IHByaW50dygiJXMiLCB0eXBlKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAg ICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfUFQsIChsb25n KSB0eXBlICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAg ICAgY2xydG9lb2woKTsKLSAgICAgICAgICAgIG9sZHR5cCA9IGM7Ci0gICAgICAgIH0KLSAgICAg ICAgc3dpdGNoIChjKSB7ICAgICAgICAgICAgICAgICAgICAvKiBOb3cgaGFuZGxlIHNwZWNpZmlj IHBhY2tldCB0eXBlcyAqLwotICAgICAgICAgIGNhc2UgJ1MnOiAgICAgICAgICAgICAgICAgICAg IC8qIEJlZ2lubmluZyBvZiB0cmFuc2ZlciAqLwotICAgICAgICAgICAgZmNudCA9IGZieXQgPSAw TDsgICAgICAgICAgIC8qIENsZWFyIGNvdW50ZXJzICovCi0jaWZkZWYgR0ZUSU1FUgotICAgICAg ICAgICAgZ3R2ID0gLTEuMDsKLSNlbHNlIC8qIEdGVElNRVIgKi8KLSAgICAgICAgICAgIGd0diA9 IC0xTDsgICAgICAgICAgICAgICAgICAvKiBBbmQgb2xkL25ldyB0aGluZ3MuLi4gKi8KLSNlbmRp ZiAvKiBHRlRJTUVSICovCi0gICAgICAgICAgICBvbGRwY3QgPSBwY3QgPSAwTDsKLSAgICAgICAg ICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSAnWic6ICAgICAgICAgICAgICAgICAgICAgLyog b3IgRU9GICovCi0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5jIFNDUl9QVCBaIHBrdG51 bSIsIiIsbik7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5jIFNDUl9QVCBaIG9sZHBj dCIsIiIsb2xkcGN0KTsKLSAgICAgICAgICAgIGRlYnVnKEYxMDEsInNjcmVlbmMgU0NSX1BUIFog cGN0IiwiIixwY3QpOwotICAgICAgICAgIGNhc2UgJ0QnOiAgICAgICAgICAgICAgICAgICAgIC8q IERhdGEgcGFja2V0ICovCi0gICAgICAgICAgICBpZiAoZnNpeiA+IDBMKSB7ICAgICAgICAgICAg LyogU2hvdyBwZXJjZW50IGRvbmUgaWYga25vd24gKi8KLSAgICAgICAgICAgICAgICBvbGRwY3Qg PSBwY3Q7ICAgICAgICAgICAvKiBSZW1lbWJlciBwcmV2aW91cyBwZXJjZW50ICovCi0gICAgICAg ICAgICAgICAgaG93ZmFyID0gZmZjOwotI2lmZGVmIENLX1JFU0VORAotICAgICAgICAgICAgICAg IGlmICh3aGF0ICYgV19TRU5EKQkvKiBBY2NvdW50IGZvciBQU0VORCBvciBSRVNFTkQgKi8KLSAg ICAgICAgICAgICAgICAgIGhvd2ZhciArPSBzZW5kc3RhcnQ7Ci0gICAgICAgICAgICAgICAgZWxz ZSBpZiAod2hhdCAmIFdfUkVDVikKLSAgICAgICAgICAgICAgICAgIGhvd2ZhciArPSByc19sZW47 Ci0jZW5kaWYgLyogQ0tfUkVTRU5EICovCi0gICAgICAgICAgICAgICAgLyogUGVyY2VudCBkb25l LCB0byBiZSBkaXNwbGF5ZWQuLi4gKi8KLSAgICAgICAgICAgICAgICBpZiAoYyA9PSAnWicpIHsK LSAgICAgICAgICAgICAgICAgICAgaWYgKCFkaXNjYXJkICYmICFjeHNlZW4gJiYgIWN6c2Vlbikg cGN0ID0gMTAwTDsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgIHBj dCA9IChmc2l6ID4gOTlMKSA/IChob3dmYXIgLyAoZnNpeiAvIDEwMEwpKSA6IDBMOwotICAgICAg ICAgICAgICAgIGlmIChwY3QgPiAxMDBMIHx8ICAgICAgIC8qIEFsbG93IGZvciBleHBhbnNpb24g YW5kICovCi0gICAgICAgICAgICAgICAgICAgKG9sZHBjdCA9PSA5OUwgJiYgcGN0IDwgMEwpKSAv KiBvdGhlciBib3VuZGFyeSBjb25kaXRpb25zICovCi0gICAgICAgICAgICAgICAgICBwY3QgPSAx MDBMOwotICAgICAgICAgICAgICAgIGlmIChwY3QgIT0gb2xkcGN0KSAgICAgIC8qIE9ubHkgZG8g dGhpcyAxMDAgdGltZXMgcGVyIGZpbGUgKi8KLSAgICAgICAgICAgICAgICAgIHVwZHBjdChvbGRw Y3QsIHBjdCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1vdmUoQ1df UENELDIyKTsKLSAgICAgICAgICAgICAgICBwcmludHcoIiVzIiwgY2tmc3RvYShmZmMpKTsKLSAg ICAgICAgICAgIH0KLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgS3VpU2V0 UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19GRkMsIChsb25nKSBob3dmYXIp OwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgIGNwcyA9 IHNob2NwcygoaW50KSBwY3QsIGZzaXosIGhvd2Zhcik7Ci0gICAgICAgICAgICAvKiBvbGRfdHIg PSBzaG9ldGwob2xkX3RyLCBjcHMsIGZzaXosIGhvd2Zhcik7ICovCi0gICAgICAgICAgICBicmVh azsKLQotICAgICAgICAgIGNhc2UgJyUnOiAgICAgICAgICAgICAgICAgICAgIC8qIFRpbWVvdXRz LCByZXRyYW5zbWlzc2lvbnMgKi8KLSAgICAgICAgICAgIGNwcyA9IHNob2NwcygoaW50KSBwY3Qs IGZzaXosIGhvd2Zhcik7Ci0gICAgICAgICAgICAvKiBvbGRfdHIgPSBzaG9ldGwob2xkX3RyLCBj cHMsIGZzaXosIGhvd2Zhcik7ICovCi0KLSAgICAgICAgICAgIGVycm9ycyA9IHJldHJhbnMgKyBj cnVuY2hlZCArIHRpbWVvdXRzOwotICAgICAgICAgICAgaWYgKGVycm9ycyAhPSBvbGR0cnkpIHsg ICAgIC8qIEVycm9yIGNvdW50LCBpZiBjaGFuZ2VkICovCi0gICAgICAgICAgICAgICAgbW92ZShD V19QUiwgMjIpOwotICAgICAgICAgICAgICAgIHByaW50dygiJWQiLGVycm9ycyk7Ci0gICAgICAg ICAgICAgICAgY2xydG9lb2woKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAg ICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChsb25nKSBDV19QUiwgKGxvbmcpIGVycm9ycwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAq LwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBvbGR0cnkgPSBlcnJvcnM7Ci0g ICAgICAgICAgICAgICAgaWYgKHMpIGlmICgqcykgewotICAgICAgICAgICAgICAgICAgICBtb3Zl KENXX0VSUiwyMik7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50dygiJXMiLHMpOwotICAgICAg ICAgICAgICAgICAgICBjbHJ0b2VvbCgpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAg ICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykg Q1dfRVJSLCAobG9uZykgcyk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwot ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlICdFJzog ICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciBwYWNrZXQgKi8KLSNpZmRlZiBDT01NRU5UCi0g ICAgICAgICAgICBtb3ZlKENXX0VSUiwyMik7ICAgICAgICAgICAgLyogUHJpbnQgaXRzIGRhdGEg ZmllbGQgKi8KLSAgICAgICAgICAgIGlmICgqcykgewotICAgICAgICAgICAgICAgIHByaW50dygi JXMiLHMpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICAgICAgS3VpU2V0 UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRVJSLCAobG9uZykgcyApOwot I2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIGNscnRvZW9sKCk7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgZmNu dCA9IGZieXQgPSAwTDsgICAgICAgICAgIC8qIFNvIG5vIGJ5dGVzIGZvciB0aGlzIGZpbGUgKi8K LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgJ1EnOiAgICAgICAgICAgICAgICAg ICAgIC8qIENydW5jaGVkIHBhY2tldCAqLwotICAgICAgICAgICAgY3BzID0gc2hvY3BzKChpbnQp IHBjdCwgZnNpeiwgaG93ZmFyKTsKLSAgICAgICAgICAgIC8qIG9sZF90ciA9IHNob2V0bChvbGRf dHIsIGNwcywgZnNpeiwgaG93ZmFyKTsgKi8KLSAgICAgICAgICAgIG1vdmUoQ1dfRVJSLDIyKTsK LSAgICAgICAgICAgIHByaW50dygiRGFtYWdlZCBQYWNrZXQiKTsKLSNpZmRlZiBLVUkKLSNpZm5k ZWYgSzk1RwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfRVJSLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGxvbmcpICJEYW1hZ2VkIFBhY2tldCIKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAg ICAgY2xydG9lb2woKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgJ3EnOiAg ICAgICAgICAgICAgICAgICAgIC8qIEN0cmwtQyBvciBjb25uZWN0aW9uIGxvc3QgKi8KLSAgICAg ICAgICAgIG1vdmUoQ1dfTVNHLDIyKTsKLQkgICAgY2xydG9lb2woKTsKLSAgICAgICAgICAgIGlm ICghcykgcyA9ICIiOwotICAgICAgICAgICAgcHJpbnR3KCpzID8gcyA6ICJVc2VyIGludGVycnVw dGlvbiBvciBjb25uZWN0aW9uIGxvc3QiKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAg ICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAobG9uZykgQ1dfTVNHLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg KGxvbmcpIHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0jZW5kaWYgLyogSzk1RyAq LwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAn VCc6ICAgICAgICAgICAgICAgICAgICAgLyogVGltZW91dCAqLwotICAgICAgICAgICAgY3BzID0g c2hvY3BzKChpbnQpIHBjdCwgZnNpeiwgaG93ZmFyKTsKLSAgICAgICAgICAgIC8qIG9sZF90ciA9 IHNob2V0bChvbGRfdHIsIGNwcywgZnNpeiwgaG93ZmFyKTsgKi8KLSAgICAgICAgICAgIG1vdmUo Q1dfRVJSLDIyKTsKLSAgICAgICAgICAgIHByaW50dygiVGltZW91dCAlZCBzZWMiLHJjdnRpbW8p OwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShL VUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19F UlIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIlRpbWVvdXQiCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkg Ki8KLSAgICAgICAgICAgIGNscnRvZW9sKCk7Ci0gICAgICAgICAgICBlcnJvcnMgPSByZXRyYW5z ICsgY3J1bmNoZWQgKyB0aW1lb3V0czsKLSAgICAgICAgICAgIGlmIChlcnJvcnMgIT0gb2xkdHJ5 KSB7ICAgICAvKiBFcnJvciBjb3VudCwgaWYgY2hhbmdlZCAqLwotICAgICAgICAgICAgICAgIG1v dmUoQ1dfUFIsIDIyKTsKLSAgICAgICAgICAgICAgICBwcmludHcoIiVkIixlcnJvcnMpOwotI2lm ZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJ X0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENX X1BSLCAobG9uZykgZXJyb3JzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNl bmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAgICAgICAgICAgY2xydG9l b2woKTsKLSAgICAgICAgICAgICAgICBvbGR0cnkgPSBlcnJvcnM7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAg ICAvKiBPdGhlcnMsIGRvIG5vdGhpbmcgKi8KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9 Ci0gICAgICAgIHJlZnJlc2goKTsKLSNpZmRlZiBPUzIKLSAgICAgICAgU2F2ZUNtZE1vZGUoMCwg MCk7Ci0jZW5kaWYgLyogT1MyICovCi0gICAgICAgIHJldHVybjsKLQotICAgICAgY2FzZSBTQ1Jf U1Q6ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgdHJhbnNmZXIgc3RhdHVzICovCi0gICAg ICAgIGRlYnVnKEYxMDEsInNjcmVlbmMgU0NSX1NUIGMiLCIiLGMpOwotICAgICAgICBkZWJ1ZyhG MTAxLCJzY3JlZW5jIFNDUl9TVCBzdWNjZXNzIiwiIixzdWNjZXNzKTsKLSAgICAgICAgZGVidWco RjEwMSwic2NyZWVuYyBTQ1JfU1QgY3hzZWVuIiwiIixjeHNlZW4pOwotI2lmZGVmIENPTU1FTlQK LSAgICAgICAgbW92ZShDV19QQ0QsMjIpOyAgICAgICAgICAgICAgICAvKiBVcGRhdGUgcGVyY2Vu dCBkb25lICovCi0gICAgICAgIGlmIChjID09IFNUX09LKSB7ICAgICAgICAgICAgICAgLyogT0ss IHByaW50IDEwMCAlICovCi0gICAgICAgICAgICBpZiAocGN0bGJsKQotICAgICAgICAgICAgICB1 cGRwY3Qob2xkcGN0LDEwMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHByaW50 dygiJXMiLCBja2ZzdG9hKGZmYykpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAg ICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0ZGQywgKGxv bmcpIGZmYyk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAg ICAgcGN0ID0gMTAwOwotICAgICAgICAgICAgb2xkcGN0ID0gMDsKLSAgICAgICAgfSBlbHNlIGlm IChmc2l6ID4gMEwpICAgICAgICAgICAvKiBOb3QgT0ssIHVwZGF0ZSBmaW5hbCBwZXJjZW50ICov Ci0vKgotICBUaGUgZWxzZSBwYXJ0IHdyaXRlcyBhbGwgb3ZlciB0aGUgc2NyZWVuIC0tIGhvd2Zh ciBhbmQvb3IgZnNpeiBoYXZlCi0gIGJlZW4gcmVzZXQgYXMgYSBjb25zZXF1ZW5jZSBvZiB0aGUg bm90LU9LbmVzcyBvZiB0aGUgdHJhbnNmZXIuCi0qLwotICAgICAgICAgIGlmIChwY3RsYmwpCi0g ICAgICAgICAgICB1cGRwY3Qob2xkcGN0LCAoaG93ZmFyICogMTAwTCkgLyBmc2l6KTsKLSAgICAg ICAgY2xydG9lb2woKTsKLSNlbHNlCi0gICAgICAgIGlmIChjID09IFNUX09LKSB7ICAgICAgICAg ICAgICAgLyogT0ssIHByaW50IDEwMCAlICovCi0gICAgICAgICAgICBtb3ZlKENXX1BDRCwyMik7 ICAgICAgICAgICAgLyogVXBkYXRlIHBlcmNlbnQgZG9uZSAqLwotICAgICAgICAgICAgaWYgKHBj dGxibCkgewotCQlpZiAob2xkcGN0ID09IDApCS8qIFN3aXRjaGluZyBmcm9tICJieXRlcyBzbyBm YXIiICovCi0JCSAgY2xydG9lb2woKTsJCS8qIHRvICJwZXJjZW50IGRvbmUiLi4uICovCi0JCXVw ZHBjdChvbGRwY3QsMTAwKTsKLQkgICAgfSBlbHNlCi0gICAgICAgICAgICAgIHByaW50dygiJXMi LCBja2ZzdG9hKGZmYykpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICBL dWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0ZGQywgKGxvbmcpIGZm Yyk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotI2lmZGVmIENPTU1FTlQK LSAgICAgICAgICAgIHBjdCA9IDEwMDsKLSAgICAgICAgICAgIG9sZHBjdCA9IDA7Ci0jZW5kaWYg LyogQ09NTUVOVCAqLwotICAgICAgICAgICAgY2xydG9lb2woKTsKLSAgICAgICAgfQotI2VuZGlm IC8qIENPTU1FTlQgKi8KLQotI2lmZGVmIENPTU1FTlQKLS8qIE5vLCBsZWF2ZSBpdCB0aGVyZSBz byB0aGV5IGNhbiByZWFkIGl0ICovCi0gICAgICAgIG1vdmUoQ1dfTVNHLDIyKTsgICAgICAgICAg ICAgICAgLyogUmVtb3ZlIGFueSBwcmV2aW91cyBtZXNzYWdlICovCi0jaWZkZWYgS1VJCi0jaWZu ZGVmIEs5NUcKLSAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9u ZykgQ1dfTVNHLCAobG9uZykgIiIgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJ ICovCi0gICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsKLSNlbmRpZiAvKiBDT01NRU5UICov Ci0KLSAgICAgICAgbW92ZShDV19UUiwgMjIpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0g ICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1RSLCAo bG9uZykgIiIgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0gICAgICAg IGNscnRvZW9sKCk7IHJlZnJlc2goKTsKLQotICAgICAgICBzd2l0Y2ggKGMpIHsgICAgICAgICAg ICAgICAgICAgIC8qIFByaW50IG5ldyBzdGF0dXMgbWVzc2FnZSAqLwotICAgICAgICAgIGNhc2Ug U1RfT0s6ICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIE9LICovCi0gICAgICAgICAgICBm Y250Kys7ICAgICAgICAgICAgICAgICAgICAgLyogQ291bnQgdGhpcyBmaWxlICovCi0JICAgIGlm ICh3aGF0ID09IChXX0ZUUHxXX0ZUX0RFTEUpKSB7Ci0JCW1vdmUoQ1dfTVNHLDIyKTsKLQkJY2xy dG9lb2woKTsKLQkJcHJpbnR3KCJEZWxldGUgT0siKTsKLQkgICAgfSBlbHNlIHsKLQkJZmJ5dCAr PSBmZmM7Ci0JCW1vdmUoQ1dfTVNHLDIyKTsKLQkJY2xydG9lb2woKTsKLQkJcHJpbnR3KCJUcmFu c2ZlciBPSyIpOwotCSAgICB9Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgICAg IEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGxvbmcpIENXX01TRywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAi VHJhbnNmZXIgT0siCi0gICAgICAgICAgICAgICAgICAgICAgICAgICApOwotI2VuZGlmIC8qIEs5 NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2go KTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGNhc2UgU1RfRElTQzogICAgICAg ICAgICAgICAgIC8qIERpc2NhcmRlZCAqLwotICAgICAgICAgICAgbW92ZShDV19FUlIsMjIpOwot ICAgICAgICAgICAgcHJpbnR3KCJGaWxlIGRpc2NhcmRlZCIpOwotI2lmZGVmIEtVSQotI2lmbmRl ZiBLOTVHCi0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19FUlIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAobG9uZykgIkZpbGUgZGlzY2FyZGVkIgotICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0jaWZkZWYgQ09N TUVOVAotICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKLSNlbmRpZiAvKiBDT01NRU5UICov Ci0gICAgICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7Ci0gICAgICAgICAgICByZXR1cm47 Ci0KLSAgICAgICAgICBjYXNlIFNUX0lOVDogICAgICAgICAgICAgICAgICAvKiBJbnRlcnJ1cHRl ZCAqLwotICAgICAgICAgICAgbW92ZShDV19FUlIsMjIpOwotICAgICAgICAgICAgcHJpbnR3KCJU cmFuc2ZlciBpbnRlcnJ1cHRlZCIpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAg ICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgIChsb25nKSBDV19FUlIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9u ZykgIlRyYW5zZmVyIGludGVycnVwdGVkIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK LSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0jaWZkZWYgQ09NTUVOVAotICAg ICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAg ICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg ICAgICBjYXNlIFNUX1NLSVA6ICAgICAgICAgICAgICAgICAvKiBTa2lwcGVkICovCi0gICAgICAg ICAgICBtb3ZlKENXX0VSUiwyMik7Ci0JICAgIGlmIChuID4gMCAmJiBuIDwgbnNrcmVhc29uKQot CSAgICAgIHByaW50dygiRmlsZSBza2lwcGVkICglcykiLHNrcmVhc29uW25dKTsKLQkgICAgZWxz ZQotCSAgICAgIHByaW50dygiRmlsZSBza2lwcGVkIik7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5 NUcKLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX0VSUiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIChsb25nKSAiRmlsZSBza2lwcGVkIgotICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyogS1VJICovCi0jaWZkZWYgQ09NTUVOVAot ICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAg ICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAg ICAgICAgICBjYXNlIFNUX0VSUjogICAgICAgICAgICAgICAgICAvKiBFcnJvciBtZXNzYWdlICov Ci0gICAgICAgICAgICBtb3ZlKENXX0VSUiwyMik7Ci0gICAgICAgICAgICBpZiAoIXMpIHMgPSAo Y2hhciAqKWVwa3Rtc2c7Ci0gICAgICAgICAgICBwcmludHcoIiVzIixzKTsKLSNpZmRlZiBLVUkK LSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5T RkVSLCAobG9uZykgQ1dfRVJSLCAobG9uZykgcyApOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRp ZiAvKiBLVUkgKi8KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAw OwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2go KTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGNhc2UgU1RfUkVGVTogICAgICAg ICAgICAgICAgIC8qIFJlZnVzZWQgKi8KLSAgICAgICAgICAgIG1vdmUoQ1dfRVJSLDIyKTsKLSAg ICAgICAgICAgIGlmICgqcykgewotICAgICAgICAgICAgICAgIGNoYXIgZXJyYnVmWzY0XSA7Ci0g ICAgICAgICAgICAgICAgc3ByaW50ZiggZXJyYnVmLCAiUmVmdXNlZCwgJXMiLCBzICkgOwotICAg ICAgICAgICAgICAgIHByaW50dygiJXMiLCBlcnJidWYpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBL OTVHCi0gICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsKGxv bmcpIENXX0VSUiwobG9uZykgZXJyYnVmKTsKLSNlbmRpZiAvKiBLOTVHICovCi0jZW5kaWYgLyog S1VJICovCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByaW50dygiUmVm dXNlZCIpOwotI2lmZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICAgICAgS3VpU2V0 UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsKGxvbmcpQ1dfRVJSLChsb25nKSJSZWZ1c2VkIik7 Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICAgICAgfQotI2lm ZGVmIENPTU1FTlQKLSAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7Ci0jZW5kaWYgLyogQ09N TUVOVCAqLwotICAgICAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOwotICAgICAgICAgICAg cmV0dXJuOwotCi0gICAgICAgICAgY2FzZSBTVF9JTkM6Ci0gICAgICAgICAgICBtb3ZlKENXX0VS UiwyMik7Ci0gICAgICAgICAgICBwcmludHcoIkluY29tcGxldGUiKTsKLSNpZmRlZiBLVUkKLSNp Zm5kZWYgSzk1RwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIs KGxvbmcpQ1dfRVJSLChsb25nKSJJbmNvbXBsZXRlIik7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2Vu ZGlmIC8qIEtVSSAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9 IDA7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAgY2xydG9lb2woKTsgcmVmcmVz aCgpOwotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgY2FzZSBTVF9NU0c6Ci0gICAg ICAgICAgICBtb3ZlKENXX01TRywyMik7Ci0gICAgICAgICAgICBwcmludHcoIiVzIixzKTsKLSNp ZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJ TEVfVFJBTlNGRVIsKGxvbmcpQ1dfTVNHLChsb25nKXMpOwotI2VuZGlmIC8qIEs5NUcgKi8KLSNl bmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsKLSAgICAg ICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAg IC8qIEJhZCBjYWxsICovCi0gICAgICAgICAgICBtb3ZlKENXX0VSUiwyMik7Ci0gICAgICAgICAg ICBwcmludHcoIioqKiBzY3JlZW4oKSBjYWxsZWQgd2l0aCBiYWQgc3RhdHVzICoqKiIpOwotI2lm ZGVmIEtVSQotI2lmbmRlZiBLOTVHCi0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJ TEVfVFJBTlNGRVIsIChsb25nKSBDV19FUlIsCi0gICAgICAgICAgICAgICAgICAgICAgIChsb25n KSAiKioqIHNjcmVlbigpIGNhbGxlZCB3aXRoIGJhZCBzdGF0dXMgKioqIiApOwotI2VuZGlmIC8q IEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgIGNscnRvZW9sKCk7IHJlZnJl c2goKTsgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgU0NSX1RDOiB7ICAgICAgICAg ICAgICAgICAgICAvKiBUcmFuc2FjdGlvbiBjb21wbGV0ZSAqLwotICAgICAgICAgIGNoYXIgbXNn YnVmWzEyOF07Ci0gICAgICAgICAgbW92ZShDV19DUCwyMik7ICAgICAgICAgICAgICAgLyogT3Zl cmFsbCB0cmFuc2ZlciByYXRlICovCi0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAg ICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19DUCwgdGZjcHMp OwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICBwcmludHco IiVzIiwgY2tmc3RvYSh0ZmNwcykpOwotICAgICAgICAgIGNscnRvZW9sKCk7Ci0gICAgICAgICAg aWYgKHN1Y2Nlc3MpIHsKLSAgICAgICAgICAgICAgbW92ZShDV19NU0csMjIpOyAgICAgICAgICAv KiBQcmludCBzdGF0aXN0aWNzIGluIG1lc3NhZ2UgbGluZSAqLwotICAgICAgICAgICAgICBjbHJ0 b2VvbCgpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoc3VjY2VzcykgewotICAgICAgICAg ICAgICBzcHJpbnRmKG1zZ2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAiU1VDQ0VTUy4gIEZp bGVzOiAlbGQsIEJ5dGVzOiAlcywgJWxkIENQUyIsCi0gICAgICAgICAgICAgICAgICAgICAgZmls Y250IC0gZmlscmVqLAotICAgICAgICAgICAgICAgICAgICAgIGNrZnN0b2EoZmJ5dCksCi0gICAg ICAgICAgICAgICAgICAgICAgdGZjcHMKLSAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAg ICAgICAgICBwcmludHcoIiVzIiwgbXNnYnVmKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1Rwot ICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX01TRywKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGxvbmcpIG1zZ2J1ZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwot I2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICAgICAgY2xydG9l b2woKTsKLQotICAgICAgICAgIH0KLSAgICAgICAgICBtb3ZlKENXX1RSLCAxKTsKLSAgICAgICAg ICBwcmludHcoIiAgICAgICBFbGFwc2VkIFRpbWU6ICVzIixoaG1tc3MoKGxvbmcpCi0jaWZkZWYg R0ZUSU1FUgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoZnB0c2VjcyArIDAuNSkKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRzZWNzCi0jZW5kaWYgLyogR0ZUSU1FUiAqLwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7Ci0jaWZkZWYgS1VJ Ci0jaWZuZGVmIEs5NUcKLSAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZF UiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfVFIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgKGxvbmcpIGhobW1zcygobG9uZykKLSNpZmRlZiBHRlRJTUVSCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnB0c2VjcyArIDAuNSkKLSNlbHNlCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c2VjcwotI2VuZGlmIC8qIEdG VElNRVIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpOwotI2Vu ZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgICBjbHJ0b2VvbCgpOwot ICAgICAgICAgIG1vdmUoMjMsMCk7IGNscnRvZW9sKCk7ICAgICAgIC8qIENsZWFyIGluc3RydWN0 aW9ucyBsaW5lcyAqLwotICAgICAgICAgIG1vdmUoMjIsMCk7IGNscnRvZW9sKCk7ICAgICAgIC8q IHRvIG1ha2Ugcm9vbSBmb3IgcHJvbXB0LiAqLwotICAgICAgICAgIHJlZnJlc2goKTsKLQotI2lm ZGVmIEdGVElNRVIKLSAgICAgICAgICBvbGRndHYgPSAoQ0tGTE9BVCkgLTEuMDsKLSNlbHNlCi0g ICAgICAgICAgb2xkZ3R2ID0gLTFMOwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLQotI2lmbmRlZiBW TVNDVVJTRQotCSAgZGVidWcoRjEwMCwic2NyZWVuYyBlbmR3aW4gQSIsIiIsMCk7Ci0gICAgICAg ICAgZW5kd2luKCk7Ci0jaWZkZWYgQ09NTUVOVAotLyoKLSAgV2h5IGFuZCB3aGVuIHdhcyB0aGlz IGNhbGwgdG8gY29ucmVzKCkgYWRkZWQ/ICBJdCBtYWtlcyBubyBzZW5zZSwKLSAgYW5kIGl0IGJy ZWFrcyBlY2hvaW5nIG9uIFNvbGFyaXMgOC4KLSovCi0jaWZkZWYgU09MQVJJUwotICAgICAgICAg IGNvbnJlcygpOwotI2VuZGlmIC8qIFNPTEFSSVMgKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0j ZW5kaWYgLyogVk1TQ1VSU0UgKi8KLQotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgICBwY3QgPSAx MDA7IG9sZHBjdCA9IDA7ICAgICAgICAvKiBSZXNldCB0aGVzZSBmb3IgbmV4dCB0aW1lLiAqLwot I2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICBvbGR0eXAgPSAwOyBvbGRydHQgPSAtMUw7 IG9sZHRyeSA9IC0xOyBvbGRsZW4gPSAtMTsKLSAgICAgICAgICBvbGR0aW0gPSAtMTsKLSAgICAg ICAgICBjZW5kdyA9IDE7Ci0gICAgICAgICAgaWYgKHhmcmJlbCkgYmxlZXAoQlBfTk9URSk7ICAg LyogQ2xvc2Ugd2luZG93LCB0aGVuIGJlZXAuICovCi0jaWZkZWYgVU5JWAotICAgICAgICAgIGZm bHVzaChzdGRvdXQpOwotI2VuZGlmIC8qIFVOSVggKi8KLSAgICAgICAgICBmdF93aW4gPSAwOyAg ICAgICAgICAgICAgICAgICAvKiBXaW5kb3cgY2xvc2VkLiAqLwotICAgICAgICAgIHJldHVybjsK LSAgICAgIH0KLSAgICAgIGNhc2UgU0NSX0VNOiAgICAgICAgICAgICAgICAgICAgICAvKiBFcnJv ciBwYWNrZXQgKGZhdGFsKSAqLwotICAgICAgICBtb3ZlIChDV19FUlIsMjIpOwotICAgICAgICBw cmludHcoIkZBSUxVUkU6ICVzIixzKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAg ICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19FUlIsIChsb25n KSBzICk7Ci0jZW5kaWYgLyogSzk1RyAqLwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgICBpZiAo eGZyYmVsKSBibGVlcChCUF9GQUlMKTsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgIHBjdCA9IG9s ZHBjdCA9IDA7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICBjbHJ0b2VvbCgpOyByZWZy ZXNoKCk7IHJldHVybjsKLQotICAgICAgY2FzZSBTQ1JfUUU6ICAgICAgICAgICAgICAgICAgICAg IC8qIFF1YW50aXR5IGVxdWFscyAqLwotICAgICAgY2FzZSBTQ1JfVFU6ICAgICAgICAgICAgICAg ICAgICAgIC8qIFVuZGVsaW1pdGVkIHRleHQgKi8KLSAgICAgIGNhc2UgU0NSX1ROOiAgICAgICAg ICAgICAgICAgICAgICAvKiBUZXh0IGRlbGltaXRlZCBhdCBzdGFydCAqLwotICAgICAgY2FzZSBT Q1JfVFo6ICAgICAgICAgICAgICAgICAgICAgIC8qIFRleHQgZGVsaW1pdGVkIGF0IGVuZCAqLwot ICAgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChpZ25vcmVkIGluIGZ1 bGxzY3JlZW4gZGlzcGxheSkgKi8KLQotICAgICAgY2FzZSBTQ1JfTVM6CQkJLyogTWVzc2FnZSBm cm9tIEtlcm1pdCBwYXJ0bmVyICovCi0gICAgICAgIG1vdmUoQ1dfTVNHLDIyKTsKLQlwcmludHco IiVzIixzKTsKLSAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOyByZXR1cm47Ci0KLSAgICAg IGNhc2UgU0NSX1hEOiAgICAgICAgICAgICAgICAgICAgICAvKiBYLXBhY2tldCBkYXRhICovCi0g ICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7Ci0gICAgICAgIG1vdmUoQ1dfTkFNLDIyKTsKLSAgICAg ICAgcHJpbnR3KCIlcyIscyk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgS3Vp U2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfTkFNLCAobG9uZykgcyAp OwotI2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgY2xydG9lb2wo KTsgcmVmcmVzaCgpOyByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NSX0NXOiAgICAgICAgICAgICAg ICAgICAgICAvKiBDbG9zZSBXaW5kb3cgKi8KLSAgICAgICAgY2xydG9lb2woKTsgbW92ZSgyMyww KTsgY2xydG9lb2woKTsgbW92ZSgyMiwwKTsgY2xydG9lb2woKTsKLSAgICAgICAgcmVmcmVzaCgp OwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgcGN0ID0gMTAwOyBvbGRwY3QgPSAwOyAgICAgICAg ICAvKiBSZXNldCB0aGVzZSBmb3IgbmV4dCB0aW1lLiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8K LSAgICAgICAgb2xkdHlwID0gMDsgb2xkcnR0ID0gLTFMOyBvbGR0cnkgPSAtMTsgb2xkbGVuID0g LTE7Ci0gICAgICAgIG9sZHRpbSA9IC0xOwotCi0jaWZuZGVmIFZNU0NVUlNFCi0JZGVidWcoRjEw MCwic2NyZWVuYyBlbmR3aW4gQiIsIiIsMCk7Ci0gICAgICAgIGVuZHdpbigpOwotI2VuZGlmIC8q IFZNU0NVUlNFICovCi0gICAgICAgIGZ0X3dpbiA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyog RmxhZyB0aGF0IHdpbmRvdyBpcyBjbG9zZWQuICovCi0gICAgICAgIGNlbmR3ID0gMTsgcmV0dXJu OwotCi0gICAgICBjYXNlIFNDUl9DRDogICAgICAgICAgICAgICAgICAgICAgLyogRGlzcGxheSBj dXJyZW50IGRpcmVjdG9yeSAqLwotICAgICAgICBtb3ZlKENXX0RJUiwyMik7Ci0gICAgICAgICBw cmludHcoIiVzIiwgcyk7Ci0jaWZkZWYgS1VJCi0jaWZuZGVmIEs5NUcKLSAgICAgICAgS3VpU2V0 UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRElSLCAobG9uZykgcyApOwot I2VuZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgY2xydG9lb2woKTsK LSAgICAgICAgcmVmcmVzaCgpOwotI2lmZGVmIE9TMgotICAgICAgICBTYXZlQ21kTW9kZSgwLCAw KTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgcmV0dXJuOwotCi0gICAgICBkZWZhdWx0OiAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogQmFkIGNhbGwgKi8KLSAgICAgICAgbW92ZSAoQ1df RVJSLDIyKTsKLSNpZmRlZiBLVUkKLSNpZm5kZWYgSzk1RwotICAgICAgICBLdWlTZXRQcm9wZXJ0 eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX0VS UiwKLSAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICIqKiogc2NyZWVuKCkgY2FsbGVkIHdp dGggYmFkIGZ1bmN0aW9uIGNvZGUgKioqIgotICAgICAgICAgICAgICAgICAgICAgICApOwotI2Vu ZGlmIC8qIEs5NUcgKi8KLSNlbmRpZiAvKiBLVUkgKi8KLSAgICAgICAgcHJpbnR3KCIqKiogc2Ny ZWVuKCkgY2FsbGVkIHdpdGggYmFkIGZ1bmN0aW9uIGNvZGUgKioqIik7Ci0gICAgICAgIGNscnRv ZW9sKCk7IHJlZnJlc2goKTsgcmV0dXJuOwotICAgIH0KLX0KLSNlbmRpZiAvKiBDS19DVVJTRVMg Ki8KLQotI2lmZGVmIEtVSQotI2lmZGVmIENLX0FOU0lDCi12b2lkCi1zY3JlZW5nKGludCBmLCBj aGFyIGMsbG9uZyBuLGNoYXIgKnMpCi0jZWxzZQotQ0tWT0lECi1zY3JlZW5nKGYsYyxuLHMpCi1p bnQgZjsgICAgICAgICAgLyogYXJndW1lbnQgZGVzY3JpcHRvciAqLwotY2hhciBjOyAgICAgICAg IC8qIGEgY2hhcmFjdGVyIG9yIHNtYWxsIGludGVnZXIgKi8KLWxvbmcgbjsgICAgICAgICAvKiBh IGxvbmcgaW50ZWdlciAqLwotY2hhciAqczsgICAgICAgIC8qIGEgc3RyaW5nICovCi0jZW5kaWYg LyogQ0tfQU5TSUMgKi8KLS8qIHNjcmVlbmcoKSAqLyB7Ci0jaWZkZWYgQ0tfU1NMCi0gICAgZXh0 ZXJuIGludCB0bHNfYWN0aXZlX2ZsYWcsIHNzbF9hY3RpdmVfZmxhZzsKLSNlbmRpZiAvKiBDS19T U0wgKi8KLSNpZmRlZiBSTE9HQ09ERQotICAgIGV4dGVybiBpbnQgdHRucHJvdG87Ci0jZW5kaWYg LyogUkxPR0NPREUgKi8KLSAgICBzdGF0aWMgaW50IHEgPSAwOwotICAgIHN0YXRpYyBDS19PRkZf VCBmc2l6ID0gKENLX09GRl9UKS0xOyAvKiBDb3B5IG9mIGZpbGUgc2l6ZSAqLwotICAgIHN0YXRp YyBsb25nIGZjbnQgPSAwTDsgICAgLyogTnVtYmVyIG9mIGZpbGVzIHRyYW5zZmVycmVkICovCi0g ICAgc3RhdGljIGxvbmcgZmJ5dCA9IDBMOyAgICAvKiBUb3RhbCBmaWxlIGJ5dGVzIG9mIGFsbCBm aWxlcyB0cmFuc2ZlcnJlZCAqLwotICAgIHN0YXRpYyBDS19PRkZfVCBob3dmYXIgPSAoQ0tfT0ZG X1QpMDsgLyogSG93IG11Y2ggb2YgZmlsZSB4ZmVyJ2Qgc28gZmFyICovCi0gICAgc3RhdGljIGlu dCAgcGN0bGJsID0gMEw7ICAvKiBQZXJjZW50IGRvbmUgdnMgQnl0ZXMgc28gZmFyICovCi0gICAg bG9uZyBjcHMgPSAwTDsKLQotICAgIGludCBuZXQgPSAwOwotICAgIGludCB4bmV0ID0gMDsKLSAg ICBpbnQgZnRwID0gMDsKLSAgICBpbnQgbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBMZW5ndGggb2Ygc3RyaW5nICovCi0gICAgaW50IGVycm9ycyA9IDA7ICAgICAgICAgICAgICAg ICAgICAgLyogRXJyb3IgY291bnRlciAqLwotICAgIGludCB4OyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFdvcmtlciAqLwotCi0gICAgZGVidWcoRjEwMSwic2NyZWVuZyBjaW5pdCIs IiIsY2luaXQpOwotICAgIGRlYnVnKEYxMDEsInNjcmVlbmcgY2VuZHciLCIiLGNlbmR3KTsKLQot ICAgIGlmICghcykgcyA9ICIiOyAgICAgICAgICAgICAgICAgICAgIC8qIEFsd2F5cyBkbyB0aGlz LiAqLwotCi0gICAgZnRwID0gKHdoYXQgJiBXX0ZUUCkgPyAxIDogMDsJLyogRlRQIG9yIEtlcm1p dCAqLwotICAgIG5ldCA9IG5ldHdvcmsgfHwgZnRwOwotICAgIHhuZXQgPSBmdHAgPyAxIDogbmV0 dHlwZTsJCS8qIE5FVF9UQ1BCID09IDEgKi8KLQotICAgIGlmIChjaW5pdCA9PSAwIHx8IGNlbmR3 ID4gMCkgeyAgICAgIC8qIEhhbmRsZSBib3JkZXJsaW5lIGNhc2VzLi4uICovCi0gICAgICAgIGlm IChmID09IFNDUl9DVykgeyAgICAgICAgICAgICAgLyogQ2xvc2Ugd2luZG93LCBidXQgaXQncyBu b3Qgb3BlbiAqLwotICAgICAgICAgICAgZnRfd2luID0gMDsKLSAgICAgICAgICAgIHJldHVybjsK LSAgICAgICAgfQotICAgICAgICBkZWJ1ZyhGMTExLCJzY3JlZW5nIEEiLHMsZik7Ci0gICAgICAg IGlmIChmID09IFNDUl9FTSB8fAotICAgICAgICAgICAoZiA9PSBTQ1JfUFQgJiYgYyA9PSAnRScp KSB7IC8qIEZhdGFsIGVycm9yIGJlZm9yZSB3aW5kb3cgb3BlbiAqLwotICAgICAgICAgICAgY29u b2xsKCIiKTsgY29ub2MoJz8nKTsgY29ub2xsKHMpOyByZXR1cm47IC8qIFJlZ3VsYXIgZGlzcGxh eSAqLwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChjaW5pdCA9PSAwKSB7ICAgICAgICAgICAg ICAgICAgIC8qIE9ubHkgY2FsbCBpbml0c2NyKCkgb25jZSAqLwotCS8qIENoZWNrIHRoZXNlIG5v dyAtLSBpZiB0aGV5IGFyZSBkZWZpbmVkIGJ1dCBub3QgbnVtZXJpYyAqLwotCS8qIHRoZXkgY2Fu IGNyYXNoIGN1cnNlcyAqLwotICAgICAgICBjZW5kdyA9IDE7ICAgICAgICAgICAgICAgICAgICAg IC8qIE5ldyB3aW5kb3cgbmVlZHMgcmVwYWludGluZyAqLwotICAgICAgICBkZWJ1ZyhGMTAwLCJz Y3JlZW5nIGNhbGxpbmcgaW5pdHNjciIsIiIsMCk7Ci0gICAgICAgIGluaXRzY3IoKTsgICAgICAg ICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBjdXJzZXMuICovCi0gICAgICAgIGRlYnVnKEYx MDAsInNjcmVlbmcgaW5pdHNjciBvayIsIiIsMCk7Ci0gICAgICAgIGNpbml0Kys7ICAgICAgICAg ICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgY3Vyc2VzIHdhcyBpbml0aWFsaXplZC4gKi8KLSAg ICB9Ci0gICAgZnRfd2luID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2luZG93IGlz IG9wZW4gKi8KLSAgICBpZiAocmVwYWludCkgewotI2lmZGVmIENLX1dSRUZSRVNICi0vKgotICBU aGlzIHRvdGFsbHkgcmVwYWludHMgdGhlIHNjcmVlbiwganVzdCB3aGF0IHdlIHdhbnQsIGJ1dCB3 ZSBjYW4gb25seQotICBkbyB0aGlzIHdpdGggcmVhbCBjdXJzZXMsIGFuZCB0aGVuIG9ubHkgaWYg Y2xlYXJvaygpIGFuZCB3cmVmcmVzaCgpIGFyZQotICBwcm92aWRlZCBpbiB0aGUgY3Vyc2VzIGxp YnJhcnkuCi0qLwotICAgICAgICBSZXN0b3JlQ21kTW9kZSgpOwotI2Vsc2UgIC8qIE5vIENLX1dS RUZSRVNIICovCi0vKgotICBLZXJtaXQncyBkby1pdC15b3Vyc2VsZiBtZXRob2QsIHdvcmtzIHdp dGggYWxsIHR5cGVzIG9mIGZ1bGxzY3JlZW4KLSAgc3VwcG9ydCwgYnV0IGRvZXMgbm90IHJlcGFp bnQgYWxsIHRoZSBmaWVsZHMuICBGb3IgZXhhbXBsZSwgdGhlIGZpbGVuYW1lCi0gIGlzIGxvc3Qs IGJlY2F1c2UgaXQgYXJyaXZlcyBhdCBhIGNlcnRhaW4gdGltZSBhbmQgbmV2ZXIgY29tZXMgYWdh aW4sIGFuZAotICBLZXJtaXQgcHJlc2VudGx5IGRvZXMgbm90IHNhdmUgaXQgYW55d2hlcmUuICBN YWtpbmcgdGhpcyBtZXRob2Qgd29yayBmb3IKLSAgYWxsIGZpZWxkcyB3b3VsZCBiZSBhIHJhdGhl ciBtYWpvciByZWNvZGluZyB0YXNrLCBkdXBsaWNhdGluZyB3aGF0IGN1cnNlcwotICBhbHJlYWR5 IGRvZXMsIGFuZCB3b3VsZCBhZGQgYSBsb3Qgb2YgY29tcGxleGl0eSBhbmQgc3RvcmFnZSBzcGFj ZS4KLSovCi0gICAgICAgIGNlbmR3ID0gMTsKLSNlbmRpZiAvKiBDS19XUkVGUkVTSCAqLwotICAg ICAgICByZXBhaW50ID0gMDsKLSAgICB9Ci0gICAgaWYgKGNlbmR3KSB7ICAgICAgICAgICAgICAg ICAgICAgICAgLyogZW5kd2luKCkgd2FzIGNhbGxlZCBwcmV2aW91c2x5ICovCi0gICAgICAgIGRl YnVnKEYxMDAsInNjcmVlbmcgc2V0dXAgb2siLCIiLDApOwotICAgICAgICBLdWlTZXRQcm9wZXJ0 eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19ESVIsIChsb25nKSB6Z3RkaXIoKSApOwot ICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19MSU4s Ci0gICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgKAotI2lmZGVmIE5FV0ZUUAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmdHAgPyAoZnRwX2hvc3QgPyBmdHBfaG9zdCA6ICIo dW5rbm93bikiKSA6Ci0jZW5kaWYgLyogTkVXRlRQICovCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHR0bmFtZSkgKTsKLQotICAgICAgICBpZiAobmV0KSB7Ci0jaWZkZWYgTkVUQ09O TgotCSAgICBpbnQgc2VjdXJlID0gMDsKLQkgICAgY2hhciAqIHhuYW1lOwotCSAgICBpZiAoeG5l dCA+IG5uZXRuYW1lKQotCSAgICAgIHhuYW1lID0gIltFUlJPUl0iOwotCSAgICBlbHNlCi0JICAg ICAgeG5hbWUgPSBuZXRuYW1lW3huZXRdOwotI2lmZGVmIE5FV0ZUUAotICAgICAgICAgICAgaWYg KGZ0cCkgewotCQlpZiAoZnRwaXNzZWN1cmUoKSkKLQkJICBzZWN1cmUgPSAxOwotCSAgICB9IGVs c2UKLSNlbmRpZiAvKiBORVdGVFAgKi8KLQkgICAgICBpZiAoMAotI2lmZGVmIFNTSEJVSUxUSU4K LSAgICAgICAgICAgICAgICB8fCBJU19TU0goKQotI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KLSNp ZmRlZiBDS19FTkNSWVBUSU9OCi0gICAgICAgICAgICAgICAgfHwgY2tfdG5fZW5jcnlwdGluZygp ICYmIGNrX3RuX2RlY3J5cHRpbmcoKQotI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KLSNpZmRl ZiBDS19TU0wKLSAgICAgICAgICAgICAgICB8fCB0bHNfYWN0aXZlX2ZsYWcgfHwgc3NsX2FjdGl2 ZV9mbGFnCi0jZW5kaWYgLyogQ0tfU1NMICovCi0jaWZkZWYgUkxPR0NPREUKLSNpZmRlZiBDS19L RVJCRVJPUwotI2lmZGVmIENLX0VOQ1JZUFRJT04KLSAgICAgICAgICAgICAgICB8fCB0dG5wcm90 byA9PSBOUF9FSzRMT0dJTiB8fCB0dG5wcm90byA9PSBOUF9FSzVMT0dJTgotI2VuZGlmIC8qIENL X0VOQ1JZUFRJT04gKi8KLSNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwotI2VuZGlmIC8qIFJMT0dD T0RFICovCi0gICAgICAgICAgICAgICAgICkgewotCQlzZWN1cmUgPSAxOwotCSAgICB9Ci0JICAg IGlmIChzZWN1cmUpIHsKLSAgICAgICAgICAgICAgICBjaGFyIGJ1ZlszMF07Ci0gICAgICAgICAg ICAgICAgc3ByaW50ZihidWYsIiVzIChTRUNVUkUpIix4bmFtZSk7Ci0gICAgICAgICAgICAgICAg S3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGxvbmcpIENXX1NQRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo bG9uZykgYnVmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNG RVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1NQRCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgeG5hbWUKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOwotICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgIEt1aVNl dFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg KGxvbmcpIENXX1NQRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiKG5ldHdv cmspIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbmRpZiAvKiBORVRDT05OICov Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoc3BlZWQgPCAwTCkKLSAgICAgICAg ICAgICAgc3BlZWQgPSB0dGdzcGQoKTsKLSAgICAgICAgICAgIGlmIChzcGVlZCA+IDBMKSB7Ci0g ICAgICAgICAgICAgICAgaWYgKHNwZWVkID09IDg4ODApIHsKLSAgICAgICAgICAgICAgICAgICAg S3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChsb25nKSBDV19TUEQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChsb25nKSAiNzUvMTIwMCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjaGFy IHNwZWVkYnVmWzY0XSA7Ci0gICAgICAgICAgICAgICAgICAgIHNwcmludGYoc3BlZWRidWYsICIl bGQiLCBzcGVlZCk7Ci0gICAgICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxF X1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1df U1BELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgc3BlZWRidWYK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtV SV9GSUxFX1RSQU5TRkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBD V19TUEQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICIodW5rbm93biki Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgfQotICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAg ICAgICAgICAgICAgICAgKGxvbmcpIENXX1BBUiwKLSAgICAgICAgICAgICAgICAgICAgICAgKGxv bmcpIHBhcm5hbSgoY2hhcilwYXJpdHkpCi0gICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg ICAgIHBjdGxibCA9ICh3aGF0ICYgV19TRU5EKTsKLSAgICAgICAgY2VuZHcgPSAwOwotICAgIH0K LSAgICBkZWJ1ZyhGMTAxLCJTQ1JFRU5DIHN3aXRjaCIsIiIsZik7Ci0gICAgZGVidWcoRjAwMCwi U0NSRUVOQyBjIiwiIixjKTsKLSAgICBkZWJ1ZyhGMTAxLCJTQ1JFRU5DIG4iLCIiLG4pOwotCi0g ICAgbGVuID0gc3RybGVuKHMpOyAgICAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIGFyZ3Vt ZW50IHN0cmluZyAqLwotICAgIHN3aXRjaCAoZikgeyAgICAgICAgICAgICAgICAgICAgICAgIC8q IEhhbmRsZSBvdXIgZnVuY3Rpb24gY29kZSAqLwotICAgICAgY2FzZSBTQ1JfRk46ICAgICAgICAg ICAgICAgICAgICAgIC8qIEZpbGVuYW1lICovCi0gICAgICAgIG9sZHBjdCA9IHBjdCA9IDBMOyAg ICAgICAgICAgICAgLyogUmVzZXQgcGVyY2VudHMgKi8KLSNpZmRlZiBHRlRJTUVSCi0gICAgICAg IGd0diA9IChDS0ZMT0FUKSAtMS4wOwotICAgICAgICAvKiBvbGRndHYgPSAoQ0tGTE9BVCkgLTEu MDsgKi8KLSNlbHNlCi0gICAgICAgIGd0diA9IC0xTDsKLSAgICAgICAgLyogb2xkZ3R2ID0gLTFM OyAqLwotI2VuZGlmIC8qIEdGVElNRVIgKi8KLSAgICAgICAgb2xkd2luID0gLTE7Ci0gICAgICAg IGZzaXogPSAoQ0tfT0ZGX1QpLTFMOwkJLyogSW52YWxpZGF0ZSBwcmV2aW91cyBmaWxlIHNpemUg Ki8KLSAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1df UENELCAobG9uZykgMCApOwotICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNG RVIsIChsb25nKSBDV19GRkMsIChsb25nKSAwICk7Ci0gICAgICAgIEt1aVNldFByb3BlcnR5KCBL VUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1NJWiwgKGxvbmcpIDAgKTsKLSAgICAgICAgS3Vp U2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRVJSLCAobG9uZykgIiIg KTsKLQotICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBD V19OQU0sIChsb25nKSBzICk7Ci0gICAgICAgIHEgPSBsZW47ICAgICAgICAgICAgICAgICAgICAg ICAgLyogUmVtZW1iZXIgbmFtZSBsZW5ndGggZm9yIGxhdGVyICovCi0gICAgICAgIHNjcmZ0KCk7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogRGlzcGxheSBmaWxlIHR5cGUgKGNhbiBjaGFuZ2Up ICovCi0jaWZkZWYgT1MyCi0gICAgICAgIFNhdmVDbWRNb2RlKDAsIDApOwotI2VuZGlmIC8qIE9T MiAqLwotICAgICAgICByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NSX0FOOiAgICAgICAgICAgICAg ICAgICAgICAvKiBGaWxlIGFzLW5hbWUgKi8KLSAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9G SUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfTkFNLCAobG9uZykgcyApOwotI2lmZGVmIE9TMgotICAg ICAgICBTYXZlQ21kTW9kZSgwLCAwKTsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgcmV0dXJu OwotCi0gICAgICBjYXNlIFNDUl9GUzogICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBzaXpl ICovCi0gICAgICAgIGZzaXogPSBuOwotICAgICAgICBpZiAoZnNpeiA+IChDS19PRkZfVCktMSkg ewotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykg Q1dfU0laLCAobG9uZykgbiApOwotICAgICAgICB9Ci0gICAgICAgIGlmIChmc2l6ID4gKENLX09G Rl9UKS0xKSB7CS8qIFB1dCB1cCBwZXJjZW50IGxhYmVsICovCi0gICAgICAgICAgICBwY3RsYmwg PSAxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGN0bGJsID0gMDsKLQl9Ci0gICAg ICAgIHNjcmZ0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSB0eXBlICovCi0jaWZk ZWYgT1MyCi0gICAgICAgIFNhdmVDbWRNb2RlKDAsIDApOwotI2VuZGlmIC8qIE9TMiAqLwotICAg ICAgICByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NSX1BUOiAgICAgICAgICAgICAgICAgICAgICAv KiBQYWNrZXQgdHlwZSBvciBwc2V1ZG90eXBlICovCi0gICAgICAgIGlmIChzcGFja2V0cyA8IDUp IHsKLSAgICAgICAgICAgIGV4dGVybiBpbnQgc3lzaW5kZXg7Ci0gICAgICAgICAgICBleHRlcm4g c3RydWN0IHN5c2RhdGEgc3lzaWRsaXN0W107Ci0gICAgICAgICAgICAvKiBUaGluZ3MgdGhhdCB3 b24ndCBjaGFuZ2UgYWZ0ZXIgdGhlIDR0aCBwYWNrZXQgKi8KLSAgICAgICAgICAgIEt1aVNldFBy b3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChs b25nKSBDV19QQVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgcGFybmFtKChj aGFyKXBhcml0eSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBp ZiAoCi0jaWZkZWYgTkVXRlRQCi0JCShmdHAgJiYgKHNwYWNrZXRzID09IDEgfHwgcnBhY2tldHMg PT0gMSkpIHx8Ci0jZW5kaWYgLyogTkVXRlRQICovCi0JCXNwYWNrZXRzID09IDQKLQkJKSB7Ci0g ICAgICAgICAgICAgICAgaWYgKAotI2lmZGVmIE5FV0ZUUAotCQkgICAgZnRwIHx8Ci0jZW5kaWYg LyogTkVXRlRQICovCi0JCSAgICAoKHByb3RvY29sID09IFBST1RPX0spICYmIChzeXNpbmRleCA+ IC0xKSkKLQkJICAgICkgewotICAgICAgICAgICAgICAgICAgICBjaGFyIG1zZ2J1ZlsxMjhdOwot ICAgICAgICAgICAgICAgICAgICBpZiAobmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBz cHJpbnRmKG1zZ2J1ZiwiTmV0d29yayBIb3N0OiAlcyAoJXMpIiwKLSNpZmRlZiBORVdGVFAKLQkJ CSAgICAgICBmdHAgPyAoZnRwX2hvc3QgPyBmdHBfaG9zdCA6ICIiKSA6Ci0jZW5kaWYgLyogTkVX RlRQICovCi0JCQkgICAgICAgdHRuYW1lLAotI2lmZGVmIE5FV0ZUUAotCQkJICAgICAgIGZ0cCA/ IGZ0cF9zcnZ0eXAgOgotI2VuZGlmIC8qIE5FV0ZUUCAqLwotCQkJICAgICAgIHN5c2lkbGlzdFtz eXNpbmRleF0uc2lkX25hbWUKLQkJCSAgICAgICApOwotICAgICAgICAgICAgICAgICAgICB9IGVs c2UgewotICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50Zihtc2didWYsCi0JCQkJIkNvbW11 bmljYXRpb24gRGV2aWNlOiAlcyAocmVtb3RlIGhvc3QgaXMgJXMpIiwKLQkJCQl0dG5hbWUsCi0J CQkJc3lzaWRsaXN0W3N5c2luZGV4XS5zaWRfbmFtZQotCQkJCSk7Ci0gICAgICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5T RkVSLAotCQkJCSAgICAobG9uZykgQ1dfTElOLAotCQkJCSAgICAobG9uZykgbXNnYnVmCi0JCQkJ ICAgICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jaWZk ZWYgQ0tfVElNRVJTCi0gICAgICAgIGlmICgvKiBydHRmbGcgJiYgKi8gcHJvdG9jb2wgPT0gUFJP VE9fSykgewotICAgICAgICAgICAgbG9uZyB4eDsKLSAgICAgICAgICAgIGlmICgKLSNpZmRlZiBT VFJFQU1JTkcKLSAgICAgICAgICAgICAgICBzdHJlYW1pbmcgJiYgb2xkd2luICE9IC0yCi0jZWxz ZQotICAgICAgICAgICAgICAgIDAKLSNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KLSAgICAgICAgICAg ICAgICApIHsKLSAgICAgICAgICAgICAgICBjaGFyIG1zZ2J1Zls2NF07Ci0gICAgICAgICAgICAg ICAgc3ByaW50Zihtc2didWYsIjAwIC8gMDAiKTsKLSAgICAgICAgICAgICAgICBLdWlTZXRQcm9w ZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsCi0JCQkJKGxvbmcpIENXX1RNTywKLQkJCQkobG9uZykg bXNnYnVmCi0JCQkJKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgeHgg PSAocnR0ZGVsYXkgKyA1MDApIC8gMTAwMDsKLSAgICAgICAgICAgICAgICBpZiAoeHggIT0gb2xk cnR0IHx8IHJjdnRpbW8gIT0gb2xkdGltKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIgbXNn YnVmWzY0XTsKLSAgICAgICAgICAgICAgICAgICAgc3ByaW50Zihtc2didWYsIiUwMmxkIC8gJTAy ZCIsIHh4LCByY3Z0aW1vKTsKLSAgICAgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtV SV9GSUxFX1RSQU5TRkVSLAotCQkJCSAgICAobG9uZykgQ1dfVE1PLAotCQkJCSAgICAobG9uZykg bXNnYnVmCi0JCQkJICAgICk7Ci0gICAgICAgICAgICAgICAgICAgIG9sZHJ0dCA9IHh4OwotICAg ICAgICAgICAgICAgICAgICBvbGR0aW0gPSByY3Z0aW1vOwotICAgICAgICAgICAgICAgICAgICBj bHJ0b2VvbCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot I2VuZGlmIC8qIENLX1RJTUVSUyAqLwotCi0gICAgICAgIHggPSAod2hhdCAmIFdfUkVDVikgPyAg ICAgICAgICAvKiBQYWNrZXQgbGVuZ3RoICovCi0gICAgICAgICAgcnBrdGwrKHByb3RvY29sPT1Q Uk9UT19LPzE6MCkgOgotICAgICAgICAgICAgc3BrdGw7Ci0gICAgICAgIGlmICh4ICE9IG9sZGxl bikgeyAgICAgICAgICAgICAgLyogQnV0IG9ubHkgaWYgaXQgY2hhbmdlZC4gKi8KLSAgICAgICAg ICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BMLCAobG9u ZykgeCApOwotICAgICAgICAgICAgb2xkbGVuID0geDsKLSAgICAgICAgfQotICAgICAgICBLdWlT ZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19QQywgKGxvbmcpIHNwYWNr ZXRzICk7Ci0KLSAgICAgICAgaWYgKHByb3RvY29sID09IFBST1RPX0sgJiYgIWZ0cCkgeyAvKiBX aW5kb3cgc2xvdHMgKi8KLSAgICAgICAgICAgIGNoYXIgd3NbMTZdOwotICAgICAgICAgICAgaW50 IGZsYWc7Ci0gICAgICAgICAgICBmbGFnID0gMDsKLSNpZmRlZiBTVFJFQU1JTkcKLSAgICAgICAg ICAgIGlmIChzdHJlYW1pbmcpIHsKLSAgICAgICAgICAgICAgICBpZiAob2xkd2luICE9IC0yKSB7 Ci0gICAgICAgICAgICAgICAgICAgIHNwcmludGYod3MsIlNUUkVBTUlORyIpOwotICAgICAgICAg ICAgICAgICAgICBmbGFnID0gMTsKLSAgICAgICAgICAgICAgICAgICAgb2xkd2luID0gLTI7Ci0g ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyogU1RSRUFNSU5H ICovCi0gICAgICAgICAgICAgIGlmICh3Y3VyICE9IG9sZHdpbikgewotICAgICAgICAgICAgICAg ICAgc3ByaW50Zih3cywgIiVkIG9mICVkIiwgd2N1ciA8IDEgPyAxIDogd2N1ciwgd3Nsb3RuKTsK LSAgICAgICAgICAgICAgICAgIGZsYWcgPSAxOwotICAgICAgICAgICAgICAgICAgb2xkd2luID0g d2N1cjsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZsYWcpIHsKLSAgICAgICAg ICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19XUywg KGxvbmcpIHdzICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZXJyb3JzID0g cmV0cmFucyArIGNydW5jaGVkICsgdGltZW91dHM7Ci0gICAgICAgIGlmIChlcnJvcnMgIT0gb2xk dHJ5KSB7ICAgICAgICAgLyogUmV0cnkgY291bnQsIGlmIGNoYW5nZWQgKi8KLSAgICAgICAgICAg IEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BSLCAobG9uZykg ZXJyb3JzICk7Ci0gICAgICAgICAgICBvbGR0cnkgPSBlcnJvcnM7Ci0gICAgICAgIH0KLQkvKiBT ZW5kZXIncyBwYWNrZXQgdHlwZSAqLwotICAgICAgICBpZiAoIWZ0cCAmJiAoYyAhPSBvbGR0eXAg JiYgYyAhPSAnWScgJiYgYyAhPSAnTicpKSB7Ci0gICAgICAgICAgICBjaGFyIHR5cGVbMl07Ci0g ICAgICAgICAgICBzcHJpbnRmKHR5cGUsICIlYyIsYyk7Ci0gICAgICAgICAgICBLdWlTZXRQcm9w ZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19QVCwgKGxvbmcpIHR5cGUgKTsKLSAg ICAgICAgICAgIG9sZHR5cCA9IGM7Ci0gICAgICAgIH0KLSAgICAgICAgc3dpdGNoIChjKSB7ICAg ICAgICAgICAgICAgICAgICAvKiBOb3cgaGFuZGxlIHNwZWNpZmljIHBhY2tldCB0eXBlcyAqLwot ICAgICAgICAgIGNhc2UgJ1MnOiAgICAgICAgICAgICAgICAgICAgIC8qIEJlZ2lubmluZyBvZiB0 cmFuc2ZlciAqLwotICAgICAgICAgICAgZmNudCA9IGZieXQgPSAwTDsgICAgICAgICAgIC8qIENs ZWFyIGNvdW50ZXJzICovCi0jaWZkZWYgR0ZUSU1FUgotICAgICAgICAgICAgZ3R2ID0gLTEuMDsK LSNlbHNlIC8qIEdGVElNRVIgKi8KLSAgICAgICAgICAgIGd0diA9IC0xTDsgICAgICAgICAgICAg ICAgICAvKiBBbmQgb2xkL25ldyB0aGluZ3MuLi4gKi8KLSNlbmRpZiAvKiBHRlRJTUVSICovCi0g ICAgICAgICAgICBvbGRwY3QgPSBwY3QgPSAwTDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg ICAgICAgY2FzZSAnWic6ICAgICAgICAgICAgICAgICAgICAgLyogb3IgRU9GICovCi0gICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5nIFNDUl9QVCBaIHBrdG51bSIsIiIsbik7Ci0gICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5nIFNDUl9QVCBaIG9sZHBjdCIsIiIsb2xkcGN0KTsKLSAg ICAgICAgICAgIGRlYnVnKEYxMDEsInNjcmVlbmcgU0NSX1BUIFogcGN0IiwiIixwY3QpOwotICAg ICAgICAgIGNhc2UgJ0QnOiAgICAgICAgICAgICAgICAgICAgIC8qIERhdGEgcGFja2V0ICovCi0g ICAgICAgICAgICBpZiAoZnNpeiA+IDBMKSB7ICAgICAgICAgICAgLyogU2hvdyBwZXJjZW50IGRv bmUgaWYga25vd24gKi8KLSAgICAgICAgICAgICAgICBvbGRwY3QgPSBwY3Q7ICAgICAgICAgICAv KiBSZW1lbWJlciBwcmV2aW91cyBwZXJjZW50ICovCi0gICAgICAgICAgICAgICAgaG93ZmFyID0g ZmZjOwotI2lmZGVmIENLX1JFU0VORAotICAgICAgICAgICAgICAgIGlmICh3aGF0ICYgV19TRU5E KQkvKiBBY2NvdW50IGZvciBQU0VORCBvciBSRVNFTkQgKi8KLSAgICAgICAgICAgICAgICAgIGhv d2ZhciArPSBzZW5kc3RhcnQ7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAod2hhdCAmIFdfUkVD VikKLSAgICAgICAgICAgICAgICAgIGhvd2ZhciArPSByc19sZW47Ci0jZW5kaWYgLyogQ0tfUkVT RU5EICovCi0gICAgICAgICAgICAgICAgLyogUGVyY2VudCBkb25lLCB0byBiZSBkaXNwbGF5ZWQu Li4gKi8KLSAgICAgICAgICAgICAgICBpZiAoYyA9PSAnWicpIHsKLSAgICAgICAgICAgICAgICAg ICAgaWYgKCFkaXNjYXJkICYmICFjeHNlZW4gJiYgIWN6c2VlbikgcGN0ID0gMTAwTDsKLSAgICAg ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgIHBjdCA9IChmc2l6ID4gOTlMKSA/ IChob3dmYXIgLyAoZnNpeiAvIDEwMEwpKSA6IDBMOwotICAgICAgICAgICAgICAgIGlmIChwY3Qg PiAxMDBMIHx8ICAgICAgIC8qIEFsbG93IGZvciBleHBhbnNpb24gYW5kICovCi0gICAgICAgICAg ICAgICAgICAgKG9sZHBjdCA9PSA5OUwgJiYgcGN0IDwgMEwpKSAvKiBvdGhlciBib3VuZGFyeSBj b25kaXRpb25zICovCi0gICAgICAgICAgICAgICAgICBwY3QgPSAxMDBMOwotICAgICAgICAgICAg ICAgIGlmIChwY3QgIT0gb2xkcGN0KSAgICAgIC8qIE9ubHkgZG8gdGhpcyAxMDAgdGltZXMgcGVy IGZpbGUgKi8KLSAgICAgICAgICAgICAgICAgIHVwZHBjdChvbGRwY3QsIHBjdCk7Ci0gICAgICAg ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RS QU5TRkVSLCAobG9uZykgQ1dfRkZDLCAobG9uZykgZmZjKTsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRkZDLCAo bG9uZykgaG93ZmFyKTsKLSAgICAgICAgICAgIGNwcyA9IHNob2NwcygoaW50KSBwY3QsIGZzaXos IGhvd2Zhcik7Ci0gICAgICAgICAgICAvKiBvbGRfdHIgPSBzaG9ldGwob2xkX3RyLCBjcHMsIGZz aXosIGhvd2Zhcik7ICovCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgJyUn OiAgICAgICAgICAgICAgICAgICAgIC8qIFRpbWVvdXRzLCByZXRyYW5zbWlzc2lvbnMgKi8KLSAg ICAgICAgICAgIGNwcyA9IHNob2NwcygoaW50KSBwY3QsIGZzaXosIGhvd2Zhcik7Ci0gICAgICAg ICAgICAvKiBvbGRfdHIgPSBzaG9ldGwob2xkX3RyLCBjcHMsIGZzaXosIGhvd2Zhcik7ICovCi0K LSAgICAgICAgICAgIGVycm9ycyA9IHJldHJhbnMgKyBjcnVuY2hlZCArIHRpbWVvdXRzOwotICAg ICAgICAgICAgaWYgKGVycm9ycyAhPSBvbGR0cnkpIHsgICAgIC8qIEVycm9yIGNvdW50LCBpZiBj aGFuZ2VkICovCi0gICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNG RVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1BSLAotCQkJICAg ICAgIChsb25nKSBlcnJvcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBvbGR0cnkgPSBlcnJvcnM7Ci0gICAgICAg ICAgICAgICAgaWYgKHMpIGlmICgqcykgewotICAgICAgICAgICAgICAgICAgICBLdWlTZXRQcm9w ZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0VSUiwgKGxvbmcpIHMpOwotICAgICAg ICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlICdFJzogICAgICAg ICAgICAgICAgICAgICAvKiBFcnJvciBwYWNrZXQgKi8KLSAgICAgICAgICAgIGlmICgqcykgewot ICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcp IENXX0VSUiwgKGxvbmcpIHMgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZjbnQgPSBm Ynl0ID0gMEw7ICAgICAgICAgICAvKiBTbyBubyBieXRlcyBmb3IgdGhpcyBmaWxlICovCi0gICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICdRJzogICAgICAgICAgICAgICAgICAgICAv KiBDcnVuY2hlZCBwYWNrZXQgKi8KLSAgICAgICAgICAgIGNwcyA9IHNob2NwcygoaW50KSBwY3Qs IGZzaXosIGhvd2Zhcik7Ci0gICAgICAgICAgICAvKiBvbGRfdHIgPSBzaG9ldGwob2xkX3RyLCBj cHMsIGZzaXosIGhvd2Zhcik7ICovCi0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklM RV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19FUlIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIkRhbWFnZWQgUGFja2V0IgotICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh c2UgJ3EnOiAgICAgICAgICAgICAgICAgICAgIC8qIEN0cmwtQyBvciBjb25uZWN0aW9uIGxvc3Qg Ki8KLSAgICAgICAgICAgIGlmICghcykgcyA9ICIiOwotICAgICAgICAgICAgaWYgKCEqcykgcyA9 ICJVc2VyIGludGVycnVwdGlvbiBvciBjb25uZWN0aW9uIGxvc3QiOwotICAgICAgICAgICAgS3Vp U2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAobG9uZykgQ1dfTVNHLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHMKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICBjYXNlICdUJzogICAgICAgICAgICAgICAgICAgICAvKiBUaW1lb3V0ICovCi0gICAgICAgICAg ICBjcHMgPSBzaG9jcHMoKGludCkgcGN0LCBmc2l6LCBob3dmYXIpOwotICAgICAgICAgICAgLyog b2xkX3RyID0gc2hvZXRsKG9sZF90ciwgY3BzLCBmc2l6LCBob3dmYXIpOyAqLwotICAgICAgICAg ICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAobG9uZykgQ1dfRVJSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcp ICJUaW1lb3V0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGVy cm9ycyA9IHJldHJhbnMgKyBjcnVuY2hlZCArIHRpbWVvdXRzOwotICAgICAgICAgICAgaWYgKGVy cm9ycyAhPSBvbGR0cnkpIHsgICAgIC8qIEVycm9yIGNvdW50LCBpZiBjaGFuZ2VkICovCi0gICAg ICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1BSLCAobG9uZykgZXJyb3JzCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICBvbGR0cnkgPSBlcnJv cnM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0 OiAgICAgICAgICAgICAgICAgICAgICAvKiBPdGhlcnMsIGRvIG5vdGhpbmcgKi8KLSAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICB9Ci0jaWZkZWYgT1MyCi0gICAgICAgIFNhdmVDbWRNb2RlKDAs IDApOwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICByZXR1cm47Ci0KLSAgICAgIGNhc2UgU0NS X1NUOiAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIHRyYW5zZmVyIHN0YXR1cyAqLwotICAg ICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5nIFNDUl9TVCBjIiwiIixjKTsKLSAgICAgICAgZGVidWco RjEwMSwic2NyZWVuZyBTQ1JfU1Qgc3VjY2VzcyIsIiIsc3VjY2Vzcyk7Ci0gICAgICAgIGRlYnVn KEYxMDEsInNjcmVlbmcgU0NSX1NUIGN4c2VlbiIsIiIsY3hzZWVuKTsKLSNpZmRlZiBDT01NRU5U Ci0gICAgICAgIGlmIChjID09IFNUX09LKSB7ICAgICAgICAgICAgICAgLyogT0ssIHByaW50IDEw MCAlICovCi0gICAgICAgICAgICBpZiAocGN0bGJsKQotICAgICAgICAgICAgICB1cGRwY3Qob2xk cGN0LDEwMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVy dHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19GRkMsIChsb25nKSBmZmMpOwotICAgICAg ICAgICAgcGN0ID0gMTAwOwotICAgICAgICAgICAgb2xkcGN0ID0gMDsKLSAgICAgICAgfSBlbHNl IGlmIChmc2l6ID4gMEwpICAgICAgICAgICAvKiBOb3QgT0ssIHVwZGF0ZSBmaW5hbCBwZXJjZW50 ICovCi0vKgotICBUaGUgZWxzZSBwYXJ0IHdyaXRlcyBhbGwgb3ZlciB0aGUgc2NyZWVuIC0tIGhv d2ZhciBhbmQvb3IgZnNpeiBoYXZlCi0gIGJlZW4gcmVzZXQgYXMgYSBjb25zZXF1ZW5jZSBvZiB0 aGUgbm90LU9LbmVzcyBvZiB0aGUgdHJhbnNmZXIuCi0qLwotICAgICAgICAgIGlmIChwY3RsYmwp Ci0gICAgICAgICAgICB1cGRwY3Qob2xkcGN0LCAoaG93ZmFyICogMTAwTCkgLyBmc2l6KTsKLSNl bHNlCi0gICAgICAgIGlmIChjID09IFNUX09LKSB7ICAgICAgICAgICAgICAgLyogT0ssIHByaW50 IDEwMCAlICovCi0gICAgICAgICAgICBpZiAocGN0bGJsKSB7Ci0JCXVwZHBjdChvbGRwY3QsMTAw KTsKLQkgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVf VFJBTlNGRVIsIChsb25nKSBDV19GRkMsIChsb25nKSBmZmMpOwotI2lmZGVmIENPTU1FTlQKLSAg ICAgICAgICAgIHBjdCA9IDEwMDsKLSAgICAgICAgICAgIG9sZHBjdCA9IDA7Ci0jZW5kaWYgLyog Q09NTUVOVCAqLwotICAgICAgICB9Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0gICAgICAgIEt1 aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1RSLCAobG9uZykgIiIg KTsKLQotICAgICAgICBzd2l0Y2ggKGMpIHsgICAgICAgICAgICAgICAgICAgIC8qIFByaW50IG5l dyBzdGF0dXMgbWVzc2FnZSAqLwotICAgICAgICAgIGNhc2UgU1RfT0s6ICAgICAgICAgICAgICAg ICAgIC8qIFRyYW5zZmVyIE9LICovCi0gICAgICAgICAgICBmY250Kys7ICAgICAgICAgICAgICAg ICAgICAgLyogQ291bnQgdGhpcyBmaWxlICovCi0JICAgIGlmICh3aGF0ID09IChXX0ZUUHxXX0ZU X0RFTEUpKSB7Ci0gICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNG RVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19NU0csCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiRGVsZXRlIE9LIgotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOwotCSAgICB9IGVsc2UgewotCQlmYnl0ICs9IGZmYzsK LSAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX01TRywKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGxvbmcpICJUcmFuc2ZlciBPSyIKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKLQkgICAgfQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg ICAgY2FzZSBTVF9ESVNDOiAgICAgICAgICAgICAgICAgLyogRGlzY2FyZGVkICovCi0gICAgICAg ICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgIChsb25nKSBDV19FUlIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9u ZykgIkZpbGUgZGlzY2FyZGVkIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNpZmRl ZiBDT01NRU5UCi0gICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOwotI2VuZGlmIC8qIENPTU1F TlQgKi8KLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGNhc2UgU1RfSU5UOiAgICAg ICAgICAgICAgICAgIC8qIEludGVycnVwdGVkICovCi0gICAgICAgICAgICBLdWlTZXRQcm9wZXJ0 eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBD V19FUlIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIlRyYW5zZmVyIGludGVy cnVwdGVkIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNpZmRlZiBDT01NRU5UCi0g ICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAg ICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIFNUX1NLSVA6IHsgICAgICAgICAgICAgICAg LyogU2tpcHBlZCAqLwotICAgICAgICAgICAgY2hhciBlcnJidWZbNjRdIDsKLQkgICAgaWYgKG4g PiAwICYmIG4gPCBuc2tyZWFzb24pCi0gICAgICAgICAgICAgICAgc3ByaW50ZiggZXJyYnVmLCAi RmlsZSBza2lwcGVkLCAoJXMpIiwgc2tyZWFzb25bbl0gKSA7Ci0JICAgIGVsc2UKLSAgICAgICAg ICAgICAgICBzcHJpbnRmKCBlcnJidWYsICJGaWxlIHNraXBwZWQiICkgOwotICAgICAgICAgICAg S3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAobG9uZykgQ1dfRVJSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGVy cmJ1ZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNpZmRlZiBDT01NRU5UCi0gICAg ICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAg ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAgIGNhc2UgU1RfRVJSOiAgICAgICAgICAg ICAgICAgIC8qIEVycm9yIG1lc3NhZ2UgKi8KLSAgICAgICAgICAgIGlmICghcykgcyA9IChjaGFy ICopZXBrdG1zZzsKLSAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZF UiwgKGxvbmcpIENXX0VSUiwgKGxvbmcpIHMgKTsKLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAg ICBwY3QgPSBvbGRwY3QgPSAwOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgIHJl dHVybjsKLQotICAgICAgICAgIGNhc2UgU1RfUkVGVTogICAgICAgICAgICAgICAgIC8qIFJlZnVz ZWQgKi8KLSAgICAgICAgICAgIGlmICgqcykgewotICAgICAgICAgICAgICAgIGNoYXIgZXJyYnVm WzY0XSA7Ci0gICAgICAgICAgICAgICAgc3ByaW50ZiggZXJyYnVmLCAiUmVmdXNlZCwgJXMiLCBz ICkgOwotICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLChs b25nKSBDV19FUlIsKGxvbmcpIGVycmJ1Zik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg ICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLChsb25nKUNXX0VSUiwo bG9uZykiUmVmdXNlZCIpOwotICAgICAgICAgICAgfQotI2lmZGVmIENPTU1FTlQKLSAgICAgICAg ICAgIHBjdCA9IG9sZHBjdCA9IDA7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotICAgICAgICAgICAg cmV0dXJuOwotCi0gICAgICAgICAgY2FzZSBTVF9JTkM6Ci0gICAgICAgICAgICBLdWlTZXRQcm9w ZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwobG9uZylDV19FUlIsKGxvbmcpIkluY29tcGxldGUiKTsK LSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOwotI2VuZGlmIC8q IENPTU1FTlQgKi8KLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGNhc2UgU1RfTVNH OgotICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsKGxvbmcpQ1df TVNHLChsb25nKXMpOwotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgZGVmYXVsdDog ICAgICAgICAgICAgICAgICAgICAgLyogQmFkIGNhbGwgKi8KLSAgICAgICAgICAgIEt1aVNldFBy b3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0VSUiwKLSAgICAgICAgICAgICAg ICAgICAgICAgKGxvbmcpICIqKiogc2NyZWVuKCkgY2FsbGVkIHdpdGggYmFkIHN0YXR1cyAqKioi ICk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgY2FzZSBTQ1JfVEM6 IHsgICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zYWN0aW9uIGNvbXBsZXRlICovCi0gICAgICAg ICAgY2hhciBtc2didWZbMTI4XTsKLSAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVf VFJBTlNGRVIsIChsb25nKSBDV19DUCwgdGZjcHMpOwotICAgICAgICAgIGlmIChzdWNjZXNzKSB7 Ci0gICAgICAgICAgICAgIHNwcmludGYobXNnYnVmLAotICAgICAgICAgICAgICAgICAgICAgICJT VUNDRVNTLiAgRmlsZXM6ICVzLCBCeXRlczogJWxkLCAlbGQgQ1BTIiwKLSAgICAgICAgICAgICAg ICAgICAgICBmaWxjbnQgLSBmaWxyZWosCi0gICAgICAgICAgICAgICAgICAgICAgY2tmc3RvYShm Ynl0KSwKLSAgICAgICAgICAgICAgICAgICAgICB0ZmNwcwotICAgICAgICAgICAgICAgICAgICAg ICk7Ci0gICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfTVNHLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAobG9uZykgbXNnYnVmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7Ci0gICAgICAgICAgfQotICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5T RkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19UUiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAobG9uZykgaGhtbXNzKChsb25nKQotI2lmZGVmIEdGVElNRVIKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcHRzZWNzICsgMC41KQotI2Vsc2UK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzZWNzCi0jZW5kaWYgLyog R0ZUSU1FUiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7Ci0K LSNpZmRlZiBHRlRJTUVSCi0gICAgICAgICAgb2xkZ3R2ID0gKENLRkxPQVQpIC0xLjA7Ci0jZWxz ZQotICAgICAgICAgIG9sZGd0diA9IC0xTDsKLSNlbmRpZiAvKiBHRlRJTUVSICovCi0KLSNpZmRl ZiBDT01NRU5UCi0gICAgICAgICAgcGN0ID0gMTAwOyBvbGRwY3QgPSAwOyAgICAgICAgLyogUmVz ZXQgdGhlc2UgZm9yIG5leHQgdGltZS4gKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAg ICAgb2xkdHlwID0gMDsgb2xkcnR0ID0gLTFMOyBvbGR0cnkgPSAtMTsgb2xkbGVuID0gLTE7Ci0g ICAgICAgICAgb2xkdGltID0gLTE7Ci0gICAgICAgICAgY2VuZHcgPSAxOwotICAgICAgICAgIGlm ICh4ZnJiZWwpIGJsZWVwKEJQX05PVEUpOyAgIC8qIENsb3NlIHdpbmRvdywgdGhlbiBiZWVwLiAq LwotICAgICAgICAgIGZ0X3dpbiA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIFdpbmRvdyBjbG9z ZWQuICovCi0gICAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgY2FzZSBTQ1JfRU06ICAg ICAgICAgICAgICAgICAgICAgIC8qIEVycm9yIHBhY2tldCAoZmF0YWwpICovCi0gICAgICAgIEt1 aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0VSUiwgKGxvbmcpIHMg KTsKLSAgICAgICAgaWYgKHhmcmJlbCkgYmxlZXAoQlBfRkFJTCk7Ci0jaWZkZWYgQ09NTUVOVAot ICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAg cmV0dXJuOwotCi0gICAgICBjYXNlIFNDUl9RRTogICAgICAgICAgICAgICAgICAgICAgLyogUXVh bnRpdHkgZXF1YWxzICovCi0gICAgICBjYXNlIFNDUl9UVTogICAgICAgICAgICAgICAgICAgICAg LyogVW5kZWxpbWl0ZWQgdGV4dCAqLwotICAgICAgY2FzZSBTQ1JfVE46ICAgICAgICAgICAgICAg ICAgICAgIC8qIFRleHQgZGVsaW1pdGVkIGF0IHN0YXJ0ICovCi0gICAgICBjYXNlIFNDUl9UWjog ICAgICAgICAgICAgICAgICAgICAgLyogVGV4dCBkZWxpbWl0ZWQgYXQgZW5kICovCi0gICAgICAg IHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogKGlnbm9yZWQgaW4gZnVsbHNjcmVl biBkaXNwbGF5KSAqLwotCi0gICAgICBjYXNlIFNDUl9YRDogICAgICAgICAgICAgICAgICAgICAg LyogWC1wYWNrZXQgZGF0YSAqLwotICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOwotICAgICAgICBL dWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19OQU0sIChsb25nKSBz ICk7Ci0gICAgICAgIHJldHVybjsKLQotICAgICAgY2FzZSBTQ1JfQ1c6ICAgICAgICAgICAgICAg ICAgICAgIC8qIENsb3NlIFdpbmRvdyAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgcGN0ID0g MTAwOyBvbGRwY3QgPSAwOyAgICAgICAgICAvKiBSZXNldCB0aGVzZSBmb3IgbmV4dCB0aW1lLiAq LwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgb2xkdHlwID0gMDsgb2xkcnR0ID0gLTFM OyBvbGR0cnkgPSAtMTsgb2xkbGVuID0gLTE7Ci0gICAgICAgIG9sZHRpbSA9IC0xOwotCi0gICAg ICAgIGZ0X3dpbiA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyB0aGF0IHdpbmRvdyBp cyBjbG9zZWQuICovCi0gICAgICAgIGNlbmR3ID0gMTsgcmV0dXJuOwotCi0gICAgICBjYXNlIFND Ul9DRDogICAgICAgICAgICAgICAgICAgICAgLyogRGlzcGxheSBjdXJyZW50IGRpcmVjdG9yeSAq LwotICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19E SVIsIChsb25nKSBzICk7Ci0jaWZkZWYgT1MyCi0gICAgICAgIFNhdmVDbWRNb2RlKDAsIDApOwot I2VuZGlmIC8qIE9TMiAqLwotICAgICAgICByZXR1cm47Ci0KLSAgICAgIGRlZmF1bHQ6ICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBCYWQgY2FsbCAqLwotICAgICAgICBLdWlTZXRQcm9wZXJ0 eShLVUlfRklMRV9UUkFOU0ZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX0VS UiwKLSAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICIqKiogc2NyZWVuKCkgY2FsbGVkIHdp dGggYmFkIGZ1bmN0aW9uIGNvZGUgKioqIgotICAgICAgICAgICAgICAgICAgICAgICApOwotICAg ICAgICByZXR1cm47Ci0gICAgfQotfQotI2VuZGlmIC8qIEtVSSAqLwotI2VuZGlmIC8qIE1BQyAq LwotCi0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYgQ0tfQ1VSUE9TCi0vKiBEdW1taWVz IGZvciB3aGVuIGN1cnNvciBjb250cm9sIGlzIG5vdCBzdXBwb3J0ZWQgKi8KLWludAotY2tfY3Vy cG9zKHJvdywgY29sKSB7Ci0gICAgcmV0dXJuKC0xKTsKLX0KLQotaW50Ci1ja19jbHMoKSB7Ci0g ICAgcmV0dXJuKC0xKTsKLX0KLQotaW50Ci1ja19jbGVvbCgpIHsKLSAgICByZXR1cm4oLTEpOwot fQotI2VuZGlmIC8qIENLX0NVUlBPUyAqLwotCi0jaWZuZGVmIE5PSUtTRAotI2lmZGVmIElLU0RC Ci0KLXN0cnVjdCBpa3NkYmZsZCBkYmZsZFtdID0gewotICAgLyogT2Zmc2V0ICAgIExlbmd0aCAg ICBUeXBlICAgKi8KLSAgICB7IERCX0ZMQUdTLCBkQl9GTEFHUywgREJUX0hFWCB9LCAgICAvKiAg MCBkYl9GTEFHUyBGbGFncyAqLwotICAgIHsgREJfQVRZUEUsIGRCX0FUWVBFLCBEQlRfSEVYIH0s ICAgIC8qICAxIGRiX0FUWVBFIEF1dGggdHlwZSAqLwotICAgIHsgREJfQU1PREUsIGRCX0FNT0RF LCBEQlRfSEVYIH0sICAgIC8qICAzIGRiX0FNT0RFIEF1dGggbW9kZSAqLwotICAgIHsgREJfU1RB VEUsIGRCX1NUQVRFLCBEQlRfSEVYIH0sICAgIC8qICAyIGRiX1NUQVRFIFN0YXRlICovCi0gICAg eyBEQl9NWVBJRCwgZEJfTVlQSUQsIERCVF9IRVggfSwgICAgLyogIDUgZGJfTVlQSUQgUElEICov Ci0gICAgeyBEQl9TQUREUiwgZEJfU0FERFIsIERCVF9IRVggfSwgICAgLyogIDQgZGJfU0FERFIg U2VydmVyIGFkZHJlc3MgKi8KLSAgICB7IERCX0NBRERSLCBkQl9DQUREUiwgREJUX0hFWCB9LCAg ICAvKiAgNiBkYl9DQUREUiBDbGllbnQgYWRkcmVzcyAqLwotICAgIHsgREJfU1RBUlQsIGRCX1NU QVJULCBEQlRfREFUIH0sICAgIC8qICA3IGRiX1NUQVJUIFNlc3Npb24gc3RhcnQgKi8KLSAgICB7 IERCX0xBU1RVLCBkQl9MQVNUVSwgREJUX0RBVCB9LCAgICAvKiAgOCBkYl9MQVNUVSBMYXN0IHVw ZGF0ZSAqLwotICAgIHsgREJfVUxFTiwgIGRCX1VMRU4sICBEQlRfSEVYIH0sICAgIC8qICA5IGRi X1VMRU4gIFVzZXJuYW1lIGxlbmd0aCAqLwotICAgIHsgREJfRExFTiwgIGRCX0RMRU4sICBEQlRf SEVYIH0sICAgIC8qIDEwIGRiX0RMRU4gIERpcmVjdG9yeSBuYW1lIGxlbmd0aCAqLwotICAgIHsg REJfSUxFTiwgIGRCX0lMRU4sICBEQlRfSEVYIH0sICAgIC8qIDExIGRiX0lMRU4gIEluZm8gbGVu Z3RoICovCi0gICAgeyBEQl9QQUQxLCAgZEJfUEFEMSwgIERCVF9VTkQgfSwgICAgLyogMTIgZGJf UEFEMSAgKFJlc2VydmVkKSAqLwotICAgIHsgREJfVVNFUiwgIGRCX1VTRVIsICBEQlRfU1RSIH0s ICAgIC8qIDEzIGRiX1VTRVIgIFVzZXJuYW1lICovCi0gICAgeyBEQl9ESVIsICAgZEJfRElSLCAg IERCVF9TVFIgfSwgICAgLyogMTQgZGJfRElSICAgQ3VycmVudCBEaXJlY3RvcnkgKi8KLSAgICB7 IERCX0lORk8sICBkQl9JTkZPLCAgREJUX1NUUiB9ICAgICAvKiAxNSBkYl9JTkZPICBTdGF0ZS1z cGVjaWZpYyBpbmZvICovCi19OwotCi1zdGF0aWMgY2hhciBsY2tuYW1bQ0tNQVhQQVRIKzFdOyAg ICAgICAgLyogTG9ja2ZpbGUgcGF0aG5hbWUgKi8KLXN0YXRpYyBjaGFyIHRtcGxja1tDS01BWFBB VEgrMV07ICAgICAgICAvKiBUZW1wb3JhcnkgbG9ja2ZpbGUgbmFtZSAqLwotCi1zdGF0aWMgY2hh ciAqIHVwZG1vZGUgPSAgICAgICAgICAgICAgICAgLyogVXBkYXRlIG1vZGUgZm9yIGZvcGVuKCkg Ki8KLSNpZmRlZiBPUzIKLSAgInIrYiIKLSNlbHNlCi0jaWZkZWYgVk1TCi0gICJyK2IiCi0jZWxz ZQotICAicisiCi0jZW5kaWYgLyogVk1TICovCi0jZW5kaWYgLyogT1MyICovCi0gIDsKLQotLyog IEQgQiBJIE4gSSBUICAtLSAgSW5pdGlhbGl6ZSB0aGUgSUtTRCBkYXRhYmFzZS4uLiAgKi8KLQot aW50Ci1kYmluaXQoKSB7Ci0gICAgZXh0ZXJuIGludCBkYmluaXRlZDsKLSAgICBpbnQgeCA9IDA7 Ci0gICAgZGVidWcoRjExMCwiZGJpbml0IGRiZGlyIDEiLGRiZGlyLDApOwotICAgIGRlYnVnKEYx MTAsImRiaW5pdCBkYmZpbGUgMSIsZGJmaWxlLDApOwotICAgIGlmIChkYmluaXRlZCkKLSAgICAg IHJldHVybigwKTsKLSNpZmRlZiBPUzIKLSAgICBpZiAoIWRiZGlyKSB7Ci0jaWZkZWYgTlQKLSAg ICAgICAgY2hhciAqIHAgPSBOVUxMOwotICAgICAgICBpZiAoIWlzV2luOTUoKSkgewotICAgICAg ICAgICAgcCA9IGdldGVudigiU3lzdGVtUm9vdCIpOwotICAgICAgICB9IGVsc2UgewotICAgICAg ICAgICAgcCA9IGdldGVudigid2luYm9vdGRpciIpOwotICAgICAgICAgICAgaWYgKCFwKSAgcCA9 IGdldGVudigid2luZGlyIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFwKSBwID0gIkM6LyI7 Ci0gICAgICAgIGRiZGlyID0gbWFsbG9jKHN0cmxlbihwKSsyKTsKLSAgICAgICAgc3RyY3B5KGRi ZGlyLHApOwkJLyogc2FmZSAqLwotICAgICAgICBwID0gZGJkaXI7Ci0gICAgICAgIHdoaWxlICgq cCkgewotICAgICAgICAgICAgaWYgKCpwID09ICdcXCcpCi0gICAgICAgICAgICAgICpwID0gJy8n OwotICAgICAgICAgICAgcCsrOwotICAgICAgICB9Ci0gICAgICAgIGlmICgqKHAtMSkgIT0gJy8n ICkgewotICAgICAgICAgICAgKnArKyA9ICcvJzsKLSAgICAgICAgICAgICpwID0gJ1wwJzsKLSAg ICAgICAgfQotI2Vsc2UgLyogTlQgKi8KLSAgICAgICAgbWFrZXN0cigmZGJkaXIsIkM6LyIpOwot I2VuZGlmIC8qIE5UICovCi0gICAgfQotI2Vsc2UgLyogT1MyICovCi0gICAgaWYgKCFkYmRpcikK LSAgICAgIG1ha2VzdHIoJmRiZGlyLElLX0RCQVNFRElSKTsKLSNlbmRpZiAvKiBPUzIgKi8KLQot ICAgIGlmICghZGJmaWxlKSB7Ci0gICAgICAgIGNoYXIgKiBzID0gIiI7Ci0gICAgICAgIHggPSBz dHJsZW4oZGJkaXIpOwotICAgICAgICBpZiAoZGJkaXJbeC0xXSAhPSAnLycpIHsKLSAgICAgICAg ICAgIHMgPSAiLyI7Ci0gICAgICAgICAgICB4Kys7Ci0gICAgICAgIH0KLSAgICAgICAgeCArPSAo aW50KXN0cmxlbihJS19EQkFTRUZJTCk7Ci0gICAgICAgIGRiZmlsZSA9IChjaGFyICopbWFsbG9j KHgrMSk7Ci0gICAgICAgIHNwcmludGYoZGJmaWxlLCIlcyVzJXMiLGRiZGlyLHMsSUtfREJBU0VG SUwpOwotICAgIH0KLSAgICBkZWJ1ZyhGMTEwLCJkYmluaXQgZGJkaXIgMiIsZGJkaXIsMCk7Ci0g ICAgZGVidWcoRjExMCwiZGJpbml0IGRiZmlsZSAyIixkYmZpbGUsMCk7Ci0gICAgbXlwaWQgPSBn ZXRwaWQoKTsgICAgICAgICAgICAgICAgICAgLyogR2V0IG15IHBpZCAqLwotICAgIGRlYnVnKEYx MDEsImRiaW5pdCBteXBpZCIsIiIsbXlwaWQpOwotCi0gICAgaWYgKCFteWhleGlwWzBdKSB7ICAg ICAgICAgICAgICAgICAgLyogU2V0IG15IGhleCBJUCBhZGRyZXNzICovCi0jaWZkZWYgVENQU09D S0VUCi0gICAgICAgIGV4dGVybiB1bnNpZ25lZCBsb25nIG15eGlwYWRkcjsKLSAgICAgICAgaWYg KGdldGxvY2FsaXBhZGRyKCkgPiAtMSkgewotICAgICAgICAgICAgbXlpcCA9IG15eGlwYWRkcjsK LSAgICAgICAgICAgIHNwcmludGYobXloZXhpcCwiJTA4bHgiLG15aXApOyAvKiAoTmVlZHMgZml4 aW5nIGZvciBJUHY2KSAqLwotICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8K LSAgICAgICAgICBja3N0cm5jcHkobXloZXhpcCwiMDAwMDAwMDAiLDkpOwotICAgIH0KLSAgICBk ZWJ1ZyhGMTExLCJkYmluaXQgbXlpcCIsbXloZXhpcCxteWlwKTsKLSAgICBpZiAoIXBlZXJoZXhp cFswXSkgeyAgICAgICAgICAgICAgICAvKiBHZXQgcGVlcidzICBoZXggSVAgYWRkcmVzcyAqLwot I2lmZGVmIFRDUFNPQ0tFVAotICAgICAgICBleHRlcm4gdW5zaWduZWQgbG9uZyBwZWVyeGlwYWRk cjsKLSAgICAgICAgaWYgKGNrZ2V0cGVlcigpKSB7Ci0gICAgICAgICAgICBwZWVyaXAgPSBwZWVy eGlwYWRkcjsKLSAgICAgICAgICAgIHNwcmludGYocGVlcmhleGlwLCIlMDhseCIscGVlcmlwKTsg LyogKE5lZWRzIGZpeGluZyBmb3IgSVB2NikgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImRi aW5pdCBwZWVyaXAiLHBlZXJoZXhpcCxwZWVyaXApOwotICAgICAgICB9IGVsc2UgewotICAgICAg ICAgICAgZGVidWcoRjEwMSwiZGJpbml0IGNrZ2V0cGVlciBmYWlsdXJlIiwiIixlcnJubyk7Ci0g ICAgICAgICAgICBja3N0cm5jcHkocGVlcmhleGlwLCIwMDAwMDAwMCIsOSk7Ci0gICAgICAgIH0K LSNlbHNlCi0gICAgICAgIGNrc3RybmNweShwZWVyaGV4aXAsIjAwMDAwMDAwIiw5KTsKLSNlbmRp ZiAvKiBUQ1BTT0NLRVQgKi8KLSAgICB9Ci0gICAgZGVidWcoRjExMSwiZGJpbml0IHBlZXJpcCIs cGVlcmhleGlwLHBlZXJpcCk7Ci0gICAgZGVidWcoRjEwMSwiZGJpbml0IGRiZW5hYmxlZCIsIiIs ZGJlbmFibGVkKTsKLSAgICBpZiAoZGJlbmFibGVkICYmIGluc2VydmVyKSB7Ci0gICAgICAgIG15 ZGJzbG90ID0gZ2V0c2xvdCgpOwotICAgICAgICBkZWJ1ZyhGMTExLCJkYmluaXQgZ2V0c2xvdCIs Y2tpdG9hKGlrZGJvcGVuKSx4KTsKLSAgICAgICAgaWYgKGlrZGJvcGVuKSBkYmluaXRlZCA9IDE7 Ci0gICAgfQotICAgIHJldHVybigwKTsKLX0KLQotLyogIFUgUCBEIFMgTCBPIFQgIC0tICBVcGRh dGUgc2xvdCBuICAqLwotCi0vKgotICBPcGVucyB0aGUgZGF0YWJhc2UgaWYgbmVjZXNzYXJ5LCBz ZWVrcyB0byBzbG90IG4sIHdyaXRlcyBjdXJyZW50IHJlY29yZAotICBhbmQgYWRkcyBjdXJyZW50 IHRpbWUgdG8gbGFzdC11cGRhdGUgZmllbGQuICBuIGlzIHRoZSByZWNvcmQgc2VxdWVuY2UgbnVt YmVyCi0gICgwLCAxLCAyLCAuLi4pLCBub3QgdGhlIHNlZWsgcG9pbnRlci4gICBSZXR1cm5zIC0x IG9uIGZhaWx1cmUsIDAgb24gc3VjY2Vzcy4KLSovCi1pbnQKLXVwZHNsb3QobikgaW50IG47IHsg ICAgICAgICAgICAgICAgICAgICAvKiBVcGRhdGUgb3VyIHNsb3QgKi8KLSAgICBpbnQgcmMgPSAw OwotICAgIENLX09GRl9UIHBvc2l0aW9uOwotCi0gICAgZGVidWcoRjExMSwidXBkc2xvdCIsImlr ZGJvcGVuIixpa2Rib3Blbik7Ci0gICAgaWYgKCFpa2Rib3BlbikgICAgICAgICAgICAgICAgICAg ICAgLyogTm90IGlmIG5vdCBvayAqLwotICAgICAgcmV0dXJuKDApOwotICAgIGlmICghZGJmcCkg eyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9wZW4gZGF0YWJhc2UgaWYgbm90IG9wZW4gKi8K LSAgICAgICAgZGJmcCA9IGZvcGVuKGRiZmlsZSx1cGRtb2RlKTsgICAvKiBJbiB1cGRhdGUgbm8t dHJ1bmNhdGUgbW9kZSAqLwotICAgICAgICBpZiAoIWRiZnApIHsKLSAgICAgICAgICAgIGRlYnVn KEYxMTAsInVwZHNsb3QgZm9wZW4gZmFpbGVkIixkYmZpbGUsMCk7Ci0gICAgICAgICAgICBpa2Ri b3BlbiA9IDA7Ci0gICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICB9Ci0gICAgfQotICAg IC8qIGRlYnVnKEYxMTEsInVwZHNsb3QgZGJmaWxlIixkYmZpbGUsZGJmcCk7ICovCi0gICAgcG9z aXRpb24gPSBuICogREJfUkVDTDsKLSAgICBpZiAoQ0tGU0VFSyhkYmZwLHBvc2l0aW9uLDApIDwg MCkgewkvKiBTZWVrIHRvIGRlc2lyZWQgc2xvdCAqLwotICAgICAgICBkZWJ1ZyhGMTExLCJ1cGRz bG90IGZzZWVrIGZhaWxlZCIsZGJmaWxlLG15ZGJzZWVrKTsKLSAgICAgICAgaWtkYm9wZW4gPSAw OwotICAgICAgICByYyA9IC0xOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIFVwZGF0ZSB0aGUg dXBkYXRlIHRpbWUgKi8KLSAgICAgICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJfTEFTVFVdLm9m Zl0sCi0gICAgICAgICAgICAgICAgY2tkYXRlKCksCi0gICAgICAgICAgICAgICAgZGJmbGRbZGJf TEFTVFVdLmxlbgotICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIGlmIChmd3JpdGUoZGJyZWMs MSxEQl9SRUNMLGRiZnApIDwgREJfUkVDTCkgeyAvKiBXcml0ZSB0aGUgcmVjb3JkICovCi0gICAg ICAgICAgICBkZWJ1ZyhGMTEwLCJ1cGRzbG90IGZ3cml0ZSBmYWlsZWQiLGRiZmlsZSwwKTsKLSAg ICAgICAgICAgIGlrZGJvcGVuID0gMDsKLSAgICAgICAgICAgIHJjID0gLTE7Ci0gICAgICAgIH0g ZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRmx1c2ggdGhlIHdyaXRlICovCi0gICAg ICAgICAgICBmZmx1c2goZGJmcCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuKHJjKTsK LX0KLQotLyogIEkgTiBJIFQgUyBMIE8gVCAtLSAgSW5pdGlhbGl6ZSBzbG90IG4gd2l0aCBteSBp bmZvICAqLwotCi1pbnQKLWluaXRzbG90KG4pIGludCBuOyB7ICAgICAgICAgICAgICAgICAgICAv KiBJbml0aWFsaXplIHNsb3QgKi8KLSAgICBpbnQgazsKLSNpZmRlZiBUQ1BTT0NLRVQKLSAgICBl eHRlcm4gdW5zaWduZWQgbG9uZyBwZWVyeGlwYWRkcjsKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8K LQotICAgIGRlYnVnKEYxMDEsImluaXRzbG90IiwiIixuKTsKLQotI2lmZGVmIFVTRV9NRU1DUFkK LSAgICBtZW1zZXQoZGJyZWMsMzIsREJfUkVDTCk7Ci0jZWxzZQotICAgIGZvciAoayA9IDA7IGsg PCBEQl9SRUNMOyBrKyspCi0gICAgICBkYnJlY1trXSA9ICdcMDQwJzsKLSNlbmRpZiAvKiBVU0Vf TUVNQ1BZICovCi0KLSAgICBteWZsYWdzID0gREJGX0lOVVNFOyAgICAgICAgICAgICAgICAvKiBT ZXQgaW4tdXNlIGZsYWcgKi8KLSAgICBteXN0YXRlID0gV19OT1RISU5HOwotICAgIG15YXR5cGUg PSAwTDsKLSAgICBteWFtb2RlID0gMEw7Ci0KLSAgICBrID0gZGJmbGRbZGJfRkxBR1NdLmxlbjsg ICAgICAgICAgICAvKiBMZW5ndGggb2YgZmxhZ3MgZmllbGQgKi8KLSAgICBzdHJuY3B5KCZkYnJl Y1tkYmZsZFtkYl9GTEFHU10ub2ZmXSx1bG9uZ3RvaGV4KG15ZmxhZ3Msayksayk7Ci0KLSAgICBr ID0gZGJmbGRbZGJfQVRZUEVdLmxlbjsKLSAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9BVFlQ RV0ub2ZmXSx1bG9uZ3RvaGV4KG15YXR5cGUsayksayk7Ci0KLSAgICBrID0gZGJmbGRbZGJfQU1P REVdLmxlbjsKLSAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9BTU9ERV0ub2ZmXSx1bG9uZ3Rv aGV4KG15YW1vZGUsayksayk7Ci0KLSAgICBrID0gZGJmbGRbZGJfU1RBVEVdLmxlbjsKLSAgICBz dHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9TVEFURV0ub2ZmXSx1bG9uZ3RvaGV4KG15c3RhdGUsayks ayk7Ci0KLSAgICBrID0gZGJmbGRbZGJfU0FERFJdLmxlbjsKLSAgICBzdHJuY3B5KCZkYnJlY1tk YmZsZFtkYl9TQUREUl0ub2ZmXSx1bG9uZ3RvaGV4KG15aXAsayksayk7Ci0KLSNpZmRlZiBUQ1BT T0NLRVQKLSAgICBja2dldHBlZXIoKTsKLSAgICBrID0gZGJmbGRbZGJfQ0FERFJdLmxlbjsKLSAg ICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9DQUREUl0ub2ZmXSx1bG9uZ3RvaGV4KHBlZXJ4aXBh ZGRyLGspLGspOwotI2Vsc2UKLSAgICBrID0gZGJmbGRbZGJfQ0FERFJdLmxlbjsKLSAgICBzdHJu Y3B5KCZkYnJlY1tkYmZsZFtkYl9DQUREUl0ub2ZmXSx1bG9uZ3RvaGV4KDBMLGspLGspOwotI2Vu ZGlmIC8qIFRDUFNPQ0tFVCAqLwotCi0gICAgayA9IGRiZmxkW2RiX01ZUElEXS5sZW47Ci0gICAg c3RybmNweSgmZGJyZWNbZGJmbGRbZGJfTVlQSURdLm9mZl0sdWxvbmd0b2hleChteXBpZCxrKSxr KTsKLQotICAgIGsgPSBkYmZsZFtkYl9TVEFSVF0ubGVuOwotICAgIHN0cm5jcHkoJmRicmVjW2Ri ZmxkW2RiX1NUQVJUXS5vZmZdLGNrZGF0ZSgpLGspOwotCi0gICAgayA9IGRiZmxkW2RiX1VMRU5d LmxlbjsKLSAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9VTEVOXS5vZmZdLCIwMDAwIiw0KTsK LQotICAgIGsgPSBkYmZsZFtkYl9ETEVOXS5sZW47Ci0gICAgc3RybmNweSgmZGJyZWNbZGJmbGRb ZGJfRExFTl0ub2ZmXSwiMDAwMCIsNCk7Ci0KLSAgICBrID0gZGJmbGRbZGJfSUxFTl0ubGVuOwot ICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX0lMRU5dLm9mZl0sIjAwMDAiLDQpOwotCi0gICAg c3RybmNweSgmZGJyZWNbZGJmbGRbZGJfSU5GT10ub2ZmXSwiSU5JVCIsNCk7Ci0gICAgcmV0dXJu KHVwZHNsb3QobikpOwotfQotCi1pbnQKLXNsb3RzdGF0ZSh4LHMxLHMyLHMzKSBpbnQgeDsgY2hh ciAqczEsICpzMiwgKnMzOyB7Ci0gICAgaW50IGssIGwxLCBsMiwgbDMsIHo7Ci0gICAgbXlzdGF0 ZSA9IHg7Ci0gICAgZGVidWcoRjEwMSwic2xvdHN0YXRlIGlrZGJvcGVuIiwiIixpa2Rib3Blbik7 Ci0gICAgaWYgKCFpa2Rib3BlbikKLSAgICAgIHJldHVybigtMSk7Ci0gICAgaWYgKCFzMSkgczEg PSAiIjsKLSAgICBsMSA9IHN0cmxlbihzMSk7Ci0gICAgaWYgKCFzMikgczIgPSAiIjsKLSAgICBs MiA9IHN0cmxlbihzMik7Ci0gICAgaWYgKCFzMykgczMgPSAiIjsKLSAgICBsMyA9IHN0cmxlbihz Myk7Ci0gICAgc3RybmNweSgmZGJyZWNbREJfU1RBVEVdLHVsb25ndG9oZXgobXlzdGF0ZSw0KSw0 KTsKLSAgICBrID0gZGJmbGRbZGJfSUxFTl0ubGVuOwotICAgIHogPSBsMSArIGwyICsgbDMgKyAy OwotICAgIGlmICh6ID4gZEJfSU5GTykKLSAgICAgIHogPSBkQl9JTkZPOwotICAgIHN0cm5jcHko JmRicmVjW0RCX0lMRU5dLHVsb25ndG9oZXgoKHVuc2lnbmVkIGxvbmcpeixrKSxrKTsKLSAgICBr ID0gZGJmbGRbZGJfSU5GT10ubGVuOwotICAgIHogPSBkYmZsZFtkYl9JTkZPXS5vZmY7Ci0gICAg aWYgKGwxIDw9IGspIHsKLSAgICAgICAgbHNldCgmZGJyZWNbel0sczEsbDErMSwzMik7Ci0gICAg ICAgIHogKz0gbDErMTsKLSAgICAgICAgayAtPSBsMSsxOwotICAgICAgICBpZiAobDIgPD0gaykg ewotICAgICAgICAgICAgbHNldCgmZGJyZWNbel0sczIsbDIrMSwzMik7Ci0gICAgICAgICAgICB6 ICs9IGwyKzE7Ci0gICAgICAgICAgICBrIC09IGwyKzE7Ci0gICAgICAgICAgICBpZiAobDMgPD0g aykKLSAgICAgICAgICAgICAgbHNldCgmZGJyZWNbel0sczMsaywzMik7Ci0gICAgICAgIH0KLSAg ICB9Ci0jaWZkZWYgREVCVUcKLSAgICBpZiAoZGVibG9nKSB7Ci0gICAgICAgIGNoYXIgYnVmWzEy OF07Ci0gICAgICAgIGludCBpOwotICAgICAgICBzdHJuY3B5KGJ1ZiwmZGJyZWNbREJfSU5GT10s MTI3KTsKLSAgICAgICAgYnVmWzEyN10gPSBOVUw7Ci0gICAgICAgIGZvciAoaSA9IDEyNjsgaSA+ IDAgJiYgYnVmW2ldID09IDMyOyBpLS0pIGJ1ZltpXSA9IDA7Ci0gICAgICAgIGRlYnVnKEYxMTEs InNsb3RzdGF0ZSIsYnVmLG15c3RhdGUpOwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotICAg IHogPSB1cGRzbG90KG15ZGJzbG90KTsKLSAgICBkZWJ1ZyhGMTAxLCJzbG90c3RhdGUgdXBkc2xv dCIsIiIseik7Ci0gICAgcmV0dXJuKHopOwotfQotCi1pbnQKLXNsb3RkaXIoczEsczIpIGNoYXIg KiBzMSwgKiBzMjsgeyAgICAgICAvKiBVcGRhdGUgY3VycmVudCBkaXJlY3RvcnkgKi8KLSAgICBp bnQgaywgbGVuMSwgbGVuMjsKLSAgICBpZiAoIWlrZGJvcGVuKQotICAgICAgcmV0dXJuKC0xKTsK LSAgICBpZiAoIXMxKSBzMSA9ICIiOwotICAgIGlmICghczIpIHMyID0gIiI7Ci0gICAgbGVuMSA9 IHN0cmxlbihzMSk7Ci0gICAgbGVuMiA9IHN0cmxlbihzMik7Ci0gICAgayA9IGRiZmxkW2RiX0RM RU5dLmxlbjsKLSAgICBzdHJuY3B5KCZkYnJlY1tEQl9ETEVOXSx1bG9uZ3RvaGV4KCh1bnNpZ25l ZCBsb25nKShsZW4xK2xlbjIpLGspLGspOwotICAgIGsgPSBkYmZsZFtkYl9ESVJdLmxlbjsKLSAg ICBpZiAobGVuMSA+IDApIHsKLSAgICAgICAgbHNldCgmZGJyZWNbZGJmbGRbZGJfRElSXS5vZmZd LHMxLGxlbjEsMzIpOwotICAgICAgICBsc2V0KCZkYnJlY1tkYmZsZFtkYl9ESVJdLm9mZitsZW4x XSxzMixrLWxlbjEsMzIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGxzZXQoJmRicmVjW2RiZmxk W2RiX0RJUl0ub2ZmXSxzMixrLDMyKTsKLSAgICB9Ci0gICAgcmV0dXJuKHVwZHNsb3QobXlkYnNs b3QpKTsKLX0KLQotLyogIEYgUiBFIEUgUyBMIE8gVCAgLS0gIEZyZWUgc2xvdCBuICAqLwotCi1p bnQKLWZyZWVzbG90KG4pIGludCBuOyB7Ci0gICAgaW50IGs7Ci0gICAgaWYgKCFpa2Rib3BlbikK LSAgICAgIHJldHVybigwKTsKLSAgICBkYmZsYWdzID0gMEw7Ci0gICAgaWYgKG4gPT0gbXlkYnNs b3QpIHsKLSAgICAgICAgZGJmbGFncyA9IG15ZmxhZ3MgJiB+REJGX0lOVVNFOwotICAgICAgICBk YmZsYWdzICY9IH5EQkZfTE9HR0VEOwotICAgIH0KLSAgICBrID0gZGJmbGRbZGJfRkxBR1NdLmxl bjsKLSAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9GTEFHU10ub2ZmXSx1bG9uZ3RvaGV4KGRi ZmxhZ3Msayksayk7Ci0gICAgcmV0dXJuKHVwZHNsb3QobikpOwotfQotCi0vKiAgRyBFIFQgUyBM IE8gVCAgLS0gIEZpbmQgYSBmcmVlIGRhdGFiYXNlIHNsb3Q7IHJldHVybnMgc2xvdCBudW1iZXIg ICovCi0KLSNpZmRlZiBVTklYCi0jaW5jbHVkZSA8ZmNudGwuaD4JCQkvKiBGb3IgY3JlYXQoKSAq LwotI2VuZGlmCS8qIFVOSVggKi8KLQotaW50Ci1nZXRzbG90KCkgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogRmluZCBhIGZyZWUgc2xvdCBmb3IgdXMgKi8KLSAgICBGSUxFICogcmZw ID0gTlVMTDsgICAgICAgICAgICAgICAgICAvKiBSZXR1cm5zIHNsb3QgbnVtYmVyICgwLCAxLCAu Li4pICovCi0gICAgY2hhciBpZHN0cmluZ1s2NF07ICAgICAgICAgICAgICAgICAgLyogUElEIHN0 cmluZyBidWZmZXIgKGRlY2ltYWwpICovCi0gICAgY2hhciBwaWRidWZbNjRdLCAqIHM7Ci0gICAg aW50IGosIGssIG4sIHgsIHJjID0gLTE7Ci0gICAgaW50IGxvY2tmZCwgdHJpZXMsIGhhdmVzbG90 ID0gMDsKLSAgICBsb25nIGxvY2twaWQ7Ci0gICAgQ0tfT0ZGX1QgaTsKLSAgICAvKiBjaGFyIGlw YnVmWzE3XTsgKi8KLQotICAgIGlmICghbXloZXhpcFswXSkgICAgICAgICAgICAgICAgICAgIC8q IFNldCBteSBoZXggSVAgYWRkcmVzcyBpZiBub3Qgc2V0ICovCi0gICAgICBja3N0cm5jcHkoKGNo YXIgKilteWhleGlwLCI3RjAwMDAwMSIsMzMpOwotICAgIHNwcmludGYoaWRzdHJpbmcsIiUwOGx4 OiUwMTBsZFxuIixteWlwLG15cGlkKTsKLSAgICBkZWJ1ZyhGMTEwLCJnZXRzbG90IGlkc3RyaW5n IiwgaWRzdHJpbmcsIDApOwotCi0gICAgLyogTWFrZSB0ZW1wb3JhcnkgbG9ja2ZpbGUgbmFtZSBJ UC5QSUQgKGhleC5oZXgpICovCi0gICAgLyogVGhpcyBzaG91bGQgZml0IGluIDE0IGNoYXJzIC0t IGh1Z2UgUElEcyBhcmUgdXN1YWxseSBub3QgcG9zc2libGUgKi8KLSAgICAvKiBvbiAxNC1jaGFy IGZpbGVuYW1lIHN5c3RlbXMuICovCi0KLSAgICBzcHJpbnRmKHRtcGxjaywiJXMlMDhseC4lbHgi LGRiZGlyLG15aXAsbXlwaWQpOwotICAgIGRlYnVnKEYxMTAsImdldHNsb3QgdGVtcGZpbGUiLHRt cGxjaywwKTsKLQotICAgIC8qIE1ha2UgYSB0ZW1wb3JhcnkgZmlsZSAqLwotCi0gICAgbG9ja2Zk ID0gY3JlYXQodG1wbGNrLCAwNjAwKTsJLyogQlVUIFRISVMgSVNOJ1QgUE9SVEFCTEUgKi8KLSAg ICBpZiAobG9ja2ZkIDwgMCkgewotICAgICAgICBkZWJ1ZyhGMTExLCJnZXRzbG9jayB0ZW1wIGxv Y2tmaWxlIGNyZWF0ZSBmYWlsdXJlIiwgdG1wbGNrLCBlcnJubyk7Ci0gICAgICAgIHJldHVybigt MSk7Ci0gICAgfQotICAgIC8qIFdyaXRlIG15IChkZWNpbWFsKSBQSUQgaW50byB0aGUgdGVtcCBm aWxlICovCi0KLSAgICB3cml0ZShsb2NrZmQsaWRzdHJpbmcsKGludClzdHJsZW4oaWRzdHJpbmcp KTsKLSAgICBpZiAoY2xvc2UobG9ja2ZkKSA8IDApIHsgICAgICAgICAgICAvKiBDbG9zZSBsb2Nr ZmlsZSAqLwotICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IGVycm9yIGNsb3NpbmcgdGVtcCBs b2NrZmlsZSIsICIiLCBlcnJubyk7Ci0gICAgICAgIHJldHVybigtMSk7Ci0gICAgfQotICAgIHNw cmludGYobGNrbmFtLCIlcyVzIixkYmRpcixJS19MT0NLRklMRSk7IC8qIEJ1aWxkIGxvY2tmaWxl IG5hbWUgKi8KLSAgICBkZWJ1ZyhGMTEwLCJnZXRzbG90IGxvY2tmaWxlIixsY2tuYW0sMCk7Ci0K LSAgICByZnAgPSBmb3BlbihsY2tuYW0sInIiKTsgICAgICAgICAgICAvKiBTZWUgaWYgbG9ja2Zp bGUgZXhpc3RzICovCi0gICAgaWYgKHJmcCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgLyog SWYgc28uLi4gKi8KLSAgICAgICAgcnNldChwaWRidWYsIiIsNjQsMCk7Ci0gICAgICAgIHggPSBm cmVhZChwaWRidWYsMSw2MyxyZnApOyAgICAgLyogUmVhZCBJRCBzdHJpbmcgZnJvbSBpdCAqLwot ICAgICAgICBmY2xvc2UocmZwKTsgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBjbG9zZSBpdCBx dWlja2x5ICovCi0gICAgICAgIGRlYnVnKEYxMTAsImdldHNsb3QgbG9jayBleGlzdHMiLHBpZGJ1 ZiwwKTsKLSAgICAgICAgaWYgKHggPiAwKSB7ICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSBo YXZlIGEgUElELCBjaGVjayBpdCAqLwotICAgICAgICAgICAgY2hhciAqIHMgPSBwaWRidWY7Ci0g ICAgICAgICAgICB3aGlsZSAoKnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNsb3dlcigqcykp ICpzID0gdG91cHBlcigqcyk7Ci0gICAgICAgICAgICAgICAgaWYgKCpzID09ICc6JykgewotICAg ICAgICAgICAgICAgICAgICAqcyA9IE5VTDsKLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEx MCwiZ2V0c2xvdCBsb2NrIElQIixwaWRidWYsMCk7Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVn KEYxMTAsImd0ZXNsb3QgbXkgICBJUCIsbXloZXhpcCwwKTsKLSAgICAgICAgICAgICAgICAgICAg aWYgKCFzdHJjbXAocGlkYnVmLG15aGV4aXApKSB7IC8qIFNhbWUgSVAgYWRkcmVzcz8gKi8KLSAg ICAgICAgICAgICAgICAgICAgICAgIGxvY2twaWQgPSBhdG9sKHMrMSk7IC8qIFllcywgbm93IGdl dCBQSUQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgbG9j a3BpZCIsIiIsbG9ja3BpZCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGlm IFBJRCBsb2NrcGlkIG9uIHRoaXMgY29tcHV0ZXIgaXMgYWxpdmUgKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgIHggPSB6Y2hrcGlkKGxvY2twaWQpOwotICAgICAgICAgICAgICAgICAgICAgICAg aWYgKCF4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwiZ2V0c2xv dCBQSUQgc3RhbGUscmVtb3ZpbmcgbG9jayIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgdW5saW5rKGxja25hbSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICBzKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJnZXRzbG90IGxvY2tmaWxlIG9wZW4gZmFp bHVyZSIsbGNrbmFtLGVycm5vKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAvKiBUcnkgSUtfTENL VFJJRVMgKDE2KSB0aW1lcyB0byByZW5hbWUgdGVtcCBmaWxlIHRvIGxvY2tmaWxlICovCi0KLSAg ICBmb3IgKHRyaWVzID0gSUtfTENLVFJJRVM7IHRyaWVzID4gMDsgdHJpZXMtLSkgewotICAgICAg ICBpZiAoenJlbmFtZSh0bXBsY2ssbGNrbmFtKSA9PSAwKQotICAgICAgICAgIGJyZWFrOwotICAg ICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IGRhdGFiYXNlIGxvY2tlZCBieSBwaWQiLCAiIiwgZGJw aWQpOwotICAgICAgICBzbGVlcChJS19MQ0tTTEVFUCk7Ci0gICAgfQotICAgIGlmICh0cmllcyA8 IDEpIHsgICAgICAgICAgICAgICAgICAgIC8qIENvdWxkbid0ICovCi0gICAgICAgIGRlYnVnKEYx MTAsImdldHNsb3QgY3JlYXRlIGxvY2sgZmFpbHVyZSIsbGNrbmFtLDApOwotICAgICAgICByZXR1 cm4oLTEpOwotICAgIH0KLSAgICAvKiBIYXZlIGxvY2ssIG9wZW4gZGF0YWJhc2UgKi8KLQotICAg IGRlYnVnKEYxMTAsImdldHNsb3QgaGFzIGxvY2siLGxja25hbSwwKTsgLyogSGF2ZSBsb2NrICov Ci0KLSAgICBpZiAoIWRiZmlsZSkKLSAgICAgIHJldHVybigtMSk7Ci0KLSAgICAvKiBJZiBkYXRh YmFzZSBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgaXQuICovCi0KLSAgICBkZWJ1ZyhGMTEwLCJnZXRz bG90IGRiZmlsZSIsZGJmaWxlLDApOwotICAgIGlmICh6Y2hraShkYmZpbGUpIDwgMCkgewotICAg ICAgICBkZWJ1ZyhGMTEwLCJnZXRzbG90IGNyZWF0aW5nIG5ldyBkYXRhYmFzZSIsZGJmaWxlLDAp OwotICAgICAgICB4ID0gY3JlYXQoZGJmaWxlLDA2NjApOwotICAgICAgICBpZiAoeCA8IDApIHsK LSAgICAgICAgICAgIGRlYnVnKEYxMTEsImdldHNsb3QgY3JlYXQoKSBmYWlsZWQiLCBkYmZpbGUs IGVycm5vKTsKLSAgICAgICAgICAgIGdvdG8geHNsb3Q7Ci0gICAgICAgIH0KLSAgICAgICAgY2xv c2UoeCk7Ci0gICAgfQotICAgIGRiZnAgPSBmb3BlbihkYmZpbGUsdXBkbW9kZSk7ICAgICAgIC8q IE9wZW4gaXQgaW4gdXBkYXRlIG1vZGUgKi8KLSAgICBpZiAoIWRiZnApIHsKLSAgICAgICAgZGVi dWcoRjExMSwiZ2V0c2xvdCBmb3BlbiBmYWlsZWQiLGRiZmlsZSxlcnJubyk7Ci0gICAgICAgIGdv dG8geHNsb3Q7Ci0gICAgfQotICAgIC8qIE5vdyBmaW5kIGEgZnJlZSAob3IgbmV3KSBzbG90Li4u ICovCi0KLSAgICBkYmxhc3R1c2VkID0gMEw7ICAgICAgICAgICAgICAgICAgICAvKiBTZWVrIHBv aW50ZXIgdG8gbGFzdCByZWNvcmQgaW51c2UgKi8KLSAgICBteWRic2VlayA9IDBMOyAgICAgICAg ICAgICAgICAgICAgICAvKiBTZWVrIHBvaW50ZXIgZm9yIG15IHJlY29yZCAqLwotCi0gICAgLyog UXVpY2tseSByZWFkIHRoZSB3aG9sZSBkYXRhYmFzZTsgbiA9IHJlY29yZCBjb3VudGVyLCBpID0g c2VlayBwb2ludGVyICovCi0KLSAgICBmb3IgKG4gPSAwLCBpID0gMDsgIWZlb2YoZGJmcCk7IGkg Kz0gREJfUkVDTCwgbisrKSB7Ci0gICAgICAgIHggPSBmcmVhZChkYnJlYywxLERCX1JFQ0wsZGJm cCk7IC8qIFJlYWQgYSByZWNvcmQgKi8KLSAgICAgICAgaWYgKHggPCAxKSAgICAgICAgICAgICAg ICAgICAgICAvKiBFT0Ygbm90IGNhdWdodCBieSBmZW9mKCkgKi8KLSAgICAgICAgICBicmVhazsK LSNpZm5kZWYgTk9GVFJVTkNBVEUKLSAgICAgICAgaWYgKHggIT0gREJfUkVDTCkgeyAgICAgICAg ICAgICAvKiBXYXRjaCBvdXQgZm9yIHRyYWlsaW5nIGp1bmsgKi8KLSAgICAgICAgICAgIGRlYnVn KEYxMDEsImdldHNsb3QgYmFkIHNpemUiLCIiLHgpOyAgLyogKFNob3VsZG4ndCBoYXBwZW4uLi4p ICovCi0jaWZkZWYgQ09IRVJFTlQKLSAgICAgICAgICAgIGNoc2l6ZShmaWxlbm8oZGJmcCksaSk7 Ci0jZWxzZQotICAgICAgICAgICAgZnRydW5jYXRlKGZpbGVubyhkYmZwKSwoQ0tfT0ZGX1QpaSk7 Ci0jZW5kaWYgLyogQ09IRVJFTlQgKi8KLSAgICAgICAgICAgIHggPSAwOwotICAgICAgICAgICAg Q0tGU0VFSyhkYmZwLGksMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotI2VuZGlm IC8qIE5PRlRSVU5DQVRFICovCi0gICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgcmVjb3JkIiwi IixuKTsKLSAgICAgICAgayA9IGRiZmxkW2RiX0ZMQUdTXS5vZmY7Ci0gICAgICAgIGogPSBkYmZs ZFtkYl9GTEFHU10ubGVuOwotICAgICAgICBkYmZsYWdzID0gaGV4dG91bG9uZygmZGJyZWNba10s aik7Ci0gICAgICAgIGRlYnVnKEYwMDEsImdldHNsb3QgZGJmbGFncyIsIiIsZGJmbGFncyk7Ci0g ICAgICAgIGsgPSBkYmZsZFtkYl9NWVBJRF0ub2ZmOwotICAgICAgICBqID0gZGJmbGRbZGJfTVlQ SURdLmxlbjsKLSAgICAgICAgZGJwaWQgID0gaGV4dG91bG9uZygmZGJyZWNba10saik7Ci0gICAg ICAgIGRlYnVnKEYwMDEsImdldHNsb3QgZGJwaWQiLCIiLGRicGlkKTsKLSAgICAgICAgayA9IGRi ZmxkW2RiX1NBRERSXS5vZmY7Ci0gICAgICAgIGogPSBkYmZsZFtkYl9TQUREUl0ubGVuOwotICAg ICAgICBkYmlwID0gaGV4dG91bG9uZygmZGJyZWNba10saik7Ci0gICAgICAgIGRlYnVnKEYwMDEs ImdldHNsb3QgZGJpcCIsIiIsZGJpcCk7Ci0KLSAgICAgICAgaWYgKGRiZmxhZ3MgJiBEQkZfSU5V U0UpIHsgICAgICAvKiBSZW1lbWJlciBsYXN0IHNsb3QgaW4gdXNlICovCi0gICAgICAgICAgICB4 ID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogTWFrZSBzdXJlIGl0J3MgUkVBTExZIGluIHVz ZSAqLwotICAgICAgICAgICAgaWYgKGRicGlkID09IG15cGlkICYmIGRiaXAgPT0gbXlpcCkgeyAv KiBDaGVjayBmb3IgUElEID09IG15IFBJRCAqLwotICAgICAgICAgICAgICAgIHggPSAxOwotICAg ICAgICAgICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgcmVjb3JkIHBpZCIsIiIsZGJwaWQpOwot ICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIE9yIGZvciBzdGFsZSBQ SUQgKi8KLSAgICAgICAgICAgICAgICB4ID0gemNoa3BpZChkYnBpZCk7Ci0gICAgICAgICAgICAg ICAgZGVidWcoRjEwMSwiZ2V0c2xvdCB6Y2hrcGlkKCkiLCIiLHgpOwotICAgICAgICAgICAgfQot ICAgICAgICAgICAgaWYgKCF4KSB7ICAgICAgICAgICAgICAgICAgIC8qIEJvZ3VzIHJlY29yZCAq LwotICAgICAgICAgICAgICAgIHggPSBmcmVlc2xvdChuKTsKLSAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTAxLCJnZXRzbG90IHN0YWxlIHJlY29yZCBwaWQ6IGZyZWVzbG90KCkiLCIiLHgpOwotICAg ICAgICAgICAgICAgIGlmICh4ID4gLTEgJiYgIWhhdmVzbG90KQotICAgICAgICAgICAgICAgICAg ZGJmbGFncyA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgLyog SXQncyByZWFsbHkgaW4gdXNlICovCi0gICAgICAgICAgICAgICAgZGJsYXN0dXNlZCA9IGk7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFoYXZlc2xvdCkgeyAgICAgICAg ICAgICAgICAvKiBJZiBJIGRvbid0IGhhdmUgYSBzbG90IHlldCAqLwotICAgICAgICAgICAgaWYg KCEoZGJmbGFncyAmIERCRl9JTlVTRSkpIHsgICAgICAgLyogQ2xhaW0gdGhpcyBvbmUgKi8KLSAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IGZyZWUgc2xvdCIsICIiLCBuKTsKLSAg ICAgICAgICAgICAgICBoYXZlc2xvdCA9IDE7Ci0gICAgICAgICAgICAgICAgbXlkYnNlZWsgPSBp OwotICAgICAgICAgICAgICAgIG15ZGJzbG90ID0gbjsgICAgICAgICAgIC8qIEJ1dCBrZWVwIGdv aW5nLi4uICovCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLyogQ29tZSBo ZXJlIHdpdGggaSA9PSBzZWVrIHBvaW50ZXIgdG8gZmlyc3QgcmVjb3JkIGFmdGVyIGVvZiAqLwot Ci0gICAgaWYgKCFoYXZlc2xvdCkgeyAgICAgICAgICAgICAgICAgICAgLyogRm91bmQgbm8gZnJl ZSBzbG90IHNvIGFkZCB0byBlbmQgKi8KLSAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBuZXcg c2xvdCIsIiIsbik7Ci0gICAgICAgIGhhdmVzbG90ID0gMTsKLSAgICAgICAgbXlkYnNlZWsgPSBp OwotICAgICAgICBteWRic2xvdCA9IG47Ci0gICAgfQotICAgIGlrZGJvcGVuID0gMTsgICAgICAg ICAgICAgICAgICAgICAgIC8qIE9LIHRvIG1ha2UgZGF0YWJhc2UgZW50cmllcyAqLwotICAgIGRl YnVnKEYxMDEsImdldHNsb3QgcmVjb3JkcyIsIiIsbik7Ci0gICAgZGVidWcoRjEwMSwiZ2V0c2xv dCBkYmxhc3R1c2VkIiwiIixkYmxhc3R1c2VkKTsKLSAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IGki LCIiLGkpOwotCi0gICAgLyogVHJpbSBzdGFsZSByZWNvcmRzIGZyb20gZW5kICovCi0KLSNpZm5k ZWYgTk9GVFJVTkNBVEUKLSAgICBpZiAoaSA+IGRibGFzdHVzZWQrREJfUkVDTCkgewotICAgICAg ICBkZWJ1ZyhGMTAxLCJnZXRzbG90IHRydW5jYXRpbmcgYXQiLCIiLGRibGFzdHVzZWQrREJfUkVD TCk7Ci0jaWZkZWYgQ09IRVJFTlQKLSAgICAgICAgeCA9IGNoc2l6ZShmaWxlbm8oZGJmcCksZGJs YXN0dXNlZCtEQl9SRUNMKTsKLSNlbHNlCi0gICAgICAgIHggPSBmdHJ1bmNhdGUoZmlsZW5vKGRi ZnApLChDS19PRkZfVCkoZGJsYXN0dXNlZCtEQl9SRUNMKSk7Ci0jZW5kaWYgLyogQ09IRVJFTlQg Ki8KLSAgICAgICAgaWYgKHggPCAwKSAgICAgICAgICAgICAgICAgICAgICAvKiAoTm90IGZhdGFs KSAqLwotICAgICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgZnRydW5jYXRlIGZhaWxlZCIsICIi LCBlcnJubyk7Ci0gICAgfQotI2VuZGlmIC8qIE5PRlRSVU5DQVRFICovCi0KLSAgICAvKiBJbml0 aWFsaXplIG15IHJlY29yZCAqLwotCi0gICAgaWYgKGluaXRzbG90KG15ZGJzbG90KSA8IDApIHsK LSAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBpbml0c2xvdCgpIGVycm9yIiwiIixuKTsKLSAg ICAgICAgaWtkYm9wZW4gPSAwOwotICAgICAgICBnb3RvIHhzbG90OwotICAgIH0KLSAgICBkZWJ1 ZyhGMTAxLCJnZXRzbG90IE9LIiwiIixteWRic2xvdCk7Ci0gICAgcmMgPSBteWRic2xvdDsgICAg ICAgICAgICAgICAgICAgICAgLyogT0sgcmV0dXJuIGNvZGUgKi8KLQotICB4c2xvdDogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVubG9jayB0aGUgZGF0YWJhc2UgYW5kIHJldHVy biAqLwotICAgIGlmICh1bmxpbmsobGNrbmFtKSA8IDApIHsKLSAgICAgICAgZGVidWcoRjExMSwi Z2V0c2xvdCBsb2NrZmlsZSByZW1vdmFsIGZhaWxlZCIsbGNrbmFtLGVycm5vKTsKLSAgICAgICAg cmMgPSAtMTsKLSAgICB9Ci0gICAgcmV0dXJuKHJjKTsKLX0KLSNlbmRpZiAvKiBJS1NEQiAqLwot I2VuZGlmIC8qIE5PSUtTRCAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9j a2VybWl0LTkuMC4zMDIvY2t1dXN5LmMgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05 LjAuMzAyL2NrdXVzeS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODAyYjA1Li4w MDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXN5 LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NzQ0ICswLDAgQEAKLSNpbmNsdWRlICJja2NzeW0uaCIK LSNkZWZpbmUgWEZBVEFMIGZhdGFsCi0KLS8qICBDIEsgVSBVIFMgWSAtLSAgIlVzZXIgSW50ZXJm YWNlIiBmb3IgQy1LZXJtaXQgS2VybWl0LCBwYXJ0IFkgICovCi0KLS8qICBDb21tYW5kLUxpbmUg QXJndW1lbnQgUGFyc2VyICovCi0KLS8qCi0gIEF1dGhvcnM6Ci0gICAgRnJhbmsgZGEgQ3J1eiA8 ZmRjQGNvbHVtYmlhLmVkdT4sCi0gICAgICBUaGUgS2VybWl0IFByb2plY3QsIENvbHVtYmlhIFVu aXZlcnNpdHksIE5ldyBZb3JrIENpdHkKLSAgICBKZWZmcmV5IEUgQWx0bWFuIDxqYWx0bWFuQHNl Y3VyZS1lbmRwb2ludHMuY29tPgotICAgICAgU2VjdXJlIEVuZHBvaW50cyBJbmMuLCBOZXcgWW9y ayBDaXR5Ci0KLSAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDA5LAotICAgIFRydXN0ZWVzIG9mIENv bHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCi0gICAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBvciB0aGUKLSAg ICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFu ZCBwZXJtaXNzaW9ucy4KLSovCi0jaW5jbHVkZSAiY2tjZGViLmgiCi0KLWNoYXIgKiBiYW5uZXJm aWxlID0gTlVMTDsKLWNoYXIgKiBoZWxwZmlsZSA9IE5VTEw7Ci1leHRlcm4gaW50IHhmZXJsb2cs IGZpbGVwZWVrLCBub2xpbmtzOwotZXh0ZXJuIGNoYXIgKiB4ZmVyZmlsZTsKLWV4dGVybiBpbnQg ZGVidGltOwotCi0jaW5jbHVkZSAiY2tjYXNjLmgiCi0jaW5jbHVkZSAiY2tja2VyLmgiCi0jaW5j bHVkZSAiY2t1Y21kLmgiCi0jaW5jbHVkZSAiY2tjbmV0LmgiCi0jaW5jbHVkZSAiY2t1dXNyLmgi Ci0jaW5jbHVkZSAiY2tjeGxhLmgiCi0jaWZkZWYgQ0tfU1NMCi0jaW5jbHVkZSAiY2tfc3NsLmgi Ci0jZW5kaWYgLyogQ0tfU1NMICovCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0KLSNpZmRlZiBPUzIK LSNpbmNsdWRlIDxpby5oPgotI2lmZGVmIEtVSQotI2luY2x1ZGUgImlrdWkuaCIKLWV4dGVybiBz dHJ1Y3QgX2t1aV9pbml0IGt1aV9pbml0OwotI2VuZGlmIC8qIEtVSSAqLwotI2VuZGlmIC8qIE9T MiAqLwotCi1leHRlcm4gaW50IGluc2VydmVyLCBmbmNudiwgZl9zYXZlLCB4ZmVybW9kZTsKLSNp ZmRlZiBQQVRURVJOUwotZXh0ZXJuIGludCBwYXR0ZXJuczsKLSNlbmRpZiAvKiBQQVRURVJOUyAq LwotCi0jaWZuZGVmIE5PSUNQCi1leHRlcm4gaW50IGNtZGludDsKLSNlbmRpZiAvKiBOT0lDUCAq LwotZXh0ZXJuIGludCB4c3VzcGVuZDsKLQotI2lmZGVmIE5FVENPTk4KLSNpZmRlZiBBTllYMjUK LWV4dGVybiBpbnQgcmV2Y2FsbCwgY2xvc2dyLCBjdWRhdGE7Ci1leHRlcm4gY2hhciB1ZGF0YVtd OwotZXh0ZXJuIGludCB4MjVmZDsKLSNlbmRpZiAvKiBBTllYMjUgKi8KLSNpZm5kZWYgVk1TCi0j aWZuZGVmIE9TMgotI2lmbmRlZiBPU0sKLWV4dGVybgotI2VuZGlmIC8qIE9TSyAqLwotI2VuZGlm IC8qIE9TMiAqLwotI2VuZGlmIC8qIFZNUyAqLwotCi1pbnQgdGVsbmV0ZmQ7Ci1leHRlcm4gc3Ry dWN0IGtleXRhYiBuZXRjbWRbXTsKLWV4dGVybiBpbnQgdG5fZXhpdDsKLSNpZm5kZWYgTk9JQ1AK LSNpZm5kZWYgTk9ESUFMCi1leHRlcm4gaW50IG5uZXRzLCBubmV0ZGlyOyAgICAgICAgICAgICAg LyogTmV0d29yayBzZXJ2aWNlcyBkaXJlY3RvcnkgKi8KLWV4dGVybiBjaGFyICpuZXRkaXJbXTsK LWV4dGVybiBjaGFyICpuaF9wW107ICAgICAgICAgICAgICAgICAgICAvKiBOZXR3b3JrIGRpcmVj dG9yeSBlbnRyeSBwb2ludGVycyAqLwotZXh0ZXJuIGNoYXIgKm5oX3AyW107ICAgICAgICAgICAg ICAgICAgIC8qIE5ldHdvcmsgZGlyZWN0b3J5IGVudHJ5IG5ldHR5cGUgKi8KLWV4dGVybiBjaGFy ICpuaF9weFs0XVtNQVhETlVNUyArIDFdOwotI2VuZGlmIC8qIE5PRElBTCAqLwotZXh0ZXJuIGlu dCBuaGNvdW50OwotZXh0ZXJuIGNoYXIgKiBuX25hbWU7ICAgICAgICAgICAgICAgICAgIC8qIE5l dHdvcmsgbmFtZSBwb2ludGVyICovCi0jZW5kaWYgLyogTk9JQ1AgKi8KLSNlbmRpZiAvKiBORVRD T05OICovCi0KLSNpZm5kZWYgTk9TUEwKLWV4dGVybiBpbnQgbm1hYzsKLWV4dGVybiBzdHJ1Y3Qg bXRhYiAqbWFjdGFiOwotI2VuZGlmIC8qIE5PU1BMICovCi1leHRlcm4gY2hhciB1aWRidWZbXTsK LQotI2lmZGVmIENLX0xPR0lOCi1leHRlcm4gaW50IGxvZ2ludGltbzsKLSNlbmRpZiAvKiBDS19M T0dJTiAqLwotCi1leHRlcm4gY2hhciAqIG15bmFtZSwgKiBkZnR0eTsKLWV4dGVybiBpbnQgaG93 Y2FsbGVkOwotCi1leHRlcm4gY2hhciAqY2t4c3lzLCAqY2t6c3lzLCAqKnhhcmd2LCAqeGFyZzAs ICoqY21saXN0LCAqY2xjbWRzOwotCi1leHRlcm4gaW50IGFjdGlvbiwgY2ZsZywgeGFyZ2MsIGNu ZmxnLCBsb2NhbCwgcXVpZXQsIGVzY2FwZSwgbmV0d29yaywgbWRtdHlwLAotICBiZ3NldCwgYmFj a2dyZCwgeGFyZ3MsIGJpbmFyeSwgcGFyaXR5LCB0dXJuLCB0dXJuY2gsIGR1cGxleCwgZmxvdywg Y2xmaWxzLAotICBub2luaXQsIHN0YXlmbGcsIG5ldHR5cGUsIGNmaWxlZiwgbm9oZXJhbGQsIGNt YXNrLCBjbWRtc2ssIGV4aXRvbmNsb3NlLAotICBoYXZlbGluZSwganVzdG9uZSwgY3h0eXBlLCB4 ZmluaXNoLCB0dG5wcm90bzsKLQotZXh0ZXJuIGxvbmcgc3BlZWQ7Ci1leHRlcm4gY2hhciB0dG5h bWVbXTsKLWV4dGVybiBjaGFyICogcGlwZWRhdGEsICogY21kZmlsOwotCi0jaWZuZGVmIE5PWEZF UgotZXh0ZXJuIGNoYXIgKmNtYXJnLCAqY21hcmcyOwotCi1leHRlcm4gaW50IG5maWxzLCBzdGRv dWYsIHN0ZGluZiwgZGlzcGxhLCBtYXhycHMsIHJwc2l6LCBja3dhcm4sIHVycHNpeiwKLSAgd3Ns b3RyLCBzd2NhcHIsIGNrZGVsYXksIHJlY3Vyc2l2ZSwgcmVsaWFibGUsIHhyZWxpYWJsZSwgZm5z cGF0aCwgZm5jYWN0LAotICBjbGVhcnJxLCBzZXRyZWxpYWJsZTsKLQotI2lmZGVmIFBJUEVTRU5E Ci1leHRlcm4gaW50IHVzZXBpcGVzLCBwaXBlc2VuZDsKLSNlbmRpZiAvKiBQSVBFU0VORCAqLwot ZXh0ZXJuIGludCBwcm90b2NvbDsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBOT1BV U0gKLWV4dGVybiBpbnQgbm9wdXNoOwotI2VuZGlmIC8qIE5PUFVTSCAqLwotCi0jaWZkZWYgT1My Ci1leHRlcm4gc3RydWN0IGtleXRhYiBvczJkZXZ0YWJbXTsKLWV4dGVybiBpbnQgbm9zMmRldjsK LWV4dGVybiBpbnQgdHRzbGlwOwotZXh0ZXJuIGludCB0dF9zY3JvbGwsIHR0X2VzY2FwZTsKLSNp ZmRlZiBPUzJQTQotZXh0ZXJuIGludCBvczJwbTsKLSNlbmRpZiAvKiBPUzJQTSAqLwotI2VuZGlm IC8qIE9TMiAqLwotCi0jaWZkZWYgQ0tfTkVUQklPUwotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgTmV0 Qmlvc0FkYXB0ZXI7Ci0jZW5kaWYgLyogQ0tfTkVUQklPUyAqLwotCi0jaWZkZWYgWEZBVEFMCi0j dW5kZWYgWEZBVEFMCi0jZW5kaWYgLyogWEZBVEFMICovCi0KLSNpZmRlZiBUTkNPREUKLV9QUk9U T1RZUChzdGF0aWMgaW50IGRvdG5hcmcsIChjaGFyIHgpICk7Ci0jZW5kaWYgLyogVE5DT0RFICov Ci0jaWZkZWYgUkxPR0NPREUKLV9QUk9UT1RZUChzdGF0aWMgaW50IGRvcmxnYXJnLCAoY2hhciB4 KSApOwotI2VuZGlmIC8qIFJMT0dDT0RFICovCi0jaWZkZWYgU1NIQlVJTFRJTgotX1BST1RPVFlQ KHN0YXRpYyBpbnQgZG9zc2hhcmcsIChjaGFyIHgpICk7Ci0jZW5kaWYgLyogU1NIQlVJTFRJTiAq LwotCi1pbnQgaGF2ZWZ0cHVpZCA9IDA7CQkJLyogSGF2ZSBGVFAgdXNlciBJRCAqLwotc3RhdGlj IGludCBoYXZlX2N4ID0gMDsJCQkvKiBIYXZlIGNvbm5lY3Rpb24gKi8KLQotc3RhdGljIGNoYXIg KiBmYWlsbXNnID0gTlVMTDsJCS8qIEZhaWx1cmUgbWVzc2FnZSAqLwotCi0jaWZkZWYgTkVXRlRQ Ci1leHRlcm4gY2hhciAqIGZ0cF9ob3N0OwotI2VuZGlmIC8qIE5FV0ZUUCAqLwotCi1leHRlcm4g aW50IHdoYXQ7Ci0KLSNpZm5kZWYgTk9JQ1AKLSNpZm5kZWYgTk9ESUFMCi1leHRlcm4gaW50IG5t ZG0sIHRlbGVwaG9ueTsKLWV4dGVybiBzdHJ1Y3Qga2V5dGFiIG1kbXRhYltdOwotZXh0ZXJuIGlu dCB1c2VybWRtLCBkaWFsdWR0OwotI2VuZGlmIC8qIE5PRElBTCAqLwotX1BST1RPVFlQKHN0YXRp YyBpbnQgcG1zZywgKGNoYXIgKikgKTsKLV9QUk9UT1RZUChzdGF0aWMgaW50IGZtc2csIChjaGFy ICopICk7Ci1zdGF0aWMgaW50IHBtc2cocykgY2hhciAqczsgeyBwcmludGYoIiVzXG4iLCBzKTsg cmV0dXJuKDApOyB9Ci1zdGF0aWMgaW50IGZtc2cocykgY2hhciAqczsgeyBmYXRhbChzKTsgcmV0 dXJuKDApOyB9Ci0jZGVmaW5lIFhGQVRBTChzKSByZXR1cm4od2hhdD09V19DT01NQU5EP3Btc2co cyk6Zm1zZyhzKSkKLSNlbHNlCi0jZGVmaW5lIFhGQVRBTCBmYXRhbAotI2VuZGlmIC8qIE5PSUNQ ICovCi0KLSNpZm5kZWYgTk9IVFRQCi0jZGVmaW5lIEhUVFBfR0VUIDEKLSNkZWZpbmUgSFRUUF9Q VVQgMgotI2RlZmluZSBIVFRQX0hFRCAzCi0jZW5kaWYgLyogTk9IVFRQICovCi0KLSNpZmRlZiBD S19VUkwKLS8qIFVSTHMgd2UgcmVjb2duaXplICovCi0KLSNkZWZpbmUgVVJMX0ZUUCAgICAxCi0j ZGVmaW5lIFVSTF9IVFRQICAgMgotI2RlZmluZSBVUkxfSFRUUFMgIDMKLSNkZWZpbmUgVVJMX0lL U0QgICA0Ci0jZGVmaW5lIFVSTF9URUxORVQgNQotI2RlZmluZSBVUkxfTE9HSU4gIDYKLQotc3Ry dWN0IGtleXRhYiB1cmx0YWJbXSA9IHsKLSNpZmRlZiBORVdGVFAKLSAgICAiZnRwIiwgICAgVVJM X0ZUUCwgICAgMCwKLSNlbmRpZiAvKiBORVdGVFAgKi8KLSNpZm5kZWYgTk9IVFRQCi0gICAgImh0 dHAiLCAgIFVSTF9IVFRQLCAgIDAsCi0gICAgImh0dHBzIiwgIFVSTF9IVFRQUywgIDAsCi0jZW5k aWYgLyogTk9IVFRQICovCi0gICAgImlrc2QiLCAgIFVSTF9JS1NELCAgIDAsCi0gICAgImtlcm1p dCIsIFVSTF9JS1NELCAgIDAsCi0gICAgInRlbG5ldCIsIFVSTF9URUxORVQsIDAsCi0gICAgIiIs IDAsIDAKLX07Ci1pbnQgbnVybHRhYiA9IHNpemVvZih1cmx0YWIpL3NpemVvZihzdHJ1Y3Qga2V5 dGFiKSAtIDE7Ci0KLSNpZm5kZWYgVVJMQlVGTEVOCi0jZGVmaW5lIFVSTEJVRkxFTiAxMDI0Ci0j ZW5kaWYgLyogVVJMQlVGTEVOICovCi1zdGF0aWMgY2hhciB1cmxidWZbVVJMQlVGTEVOXTsKLXN0 cnVjdCB1cmxkYXRhIGdfdXJsID0ge05VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEx9 OwotCi0vKiB1IHIgbCBwIGEgciBzIGUgIC0tICBQYXJzZSBhIHBvc3NpYmxlIFVSTCAqLwotCi0v KgotICBSZXR1cm5zIDAgaWYgdGhlIGNhbmRpZGF0ZSBkb2VzIG5vdCBzZWVtIHRvIGJlIGEgVVJM LgotICBSZXR1cm5zIDEgaWYgaXQgbWlnaHQgYmUgYSBVUkwsIHdpdGggdGhlIGFib3ZlIHBvaW50 ZXJzIHNldCB0byBpdHMgcGllY2VzOgotICAgIHNlcnZpY2UgOiBbIC8vIF0gWyB1c2VyIFsgOiBw YXNzd29yZCBdIEAgXSBob3N0IFsgOiBzZXJ2aWNlIF0gWyAvIHBhdGggXSAtCi0gICAgICAgICAg ICAgIFsgPyBuYW1lIFsgPSB2YWx1ZSBdXQotCi0gIEV4YW1wbGU6IGZ0cDovL2RzLmludGVybmlj Lm5ldDoyMS9yZmMvcmZjMTIzNC50eHQKLSAgICB1cmwuc3ZjID0gW2Z0cF0KLSAgICB1cmwudXNy ID0gWyhOVUxMKV0KLSAgICB1cmwucHN3ID0gWyhOVUxMKV0KLSAgICB1cmwuaG9zID0gW2RzLmlu dGVybmljLm5ldF0KLSAgICB1cmwucG9yID0gWzIxXQotICAgIHVybC5wdGggPSBbcmZjL3JmYzEy MzQudHh0XQotCi0gIEl0IG1pZ2h0IGJlIGEgVVJMIGlmIGl0IGNvbnRhaW5zIGEgcG9zc2libGUg c2VydmljZSBuYW1lIGZvbGxvd2VkIGJ5IGEKLSAgYSBjb2xvbiAoOikuICBUaHVzICJ0ZWxuZXQ6 eHl6Y29ycC5jb20iIGlzIGEgbWluaW1hbCBVUkwsIHdoZXJlYXMgYQotICBmdWxsLWJsb3duIGV4 YW1wbGUgd291bGQgYmU6Ci0KLSAgICBmdHA6Ly9vbGdhOnNlY3JldEBmdHAueHl6Y29ycC5jb20v cHVibGljL29vZmEudHh0Ci0KLSAgVGhlIGNhbGxlciBtdXN0IHZlcmlmeSB0aGUgcmVzdWx0cywg aS5lLiB0aGF0IHRoZSBzZXJ2aWNlIHN0cmluZyBpcyBhIHJlYWwKLSAgVENQIHNlcnZpY2UsIGV0 Yy4gIFRoaXMgcm91dGluZSBqdXN0IHBhcnNlcyB0aGUgZmllbGRzLgotCi0gIHN0cnVjdCB1cmxk YXRhIGRlZmluZWQgaW4gY2tja2VyLmgKLSovCi0KLWludAotdXJscGFyc2Uocyx1cmwpIGNoYXIg KnM7IHN0cnVjdCB1cmxkYXRhICogdXJsOyB7Ci0gICAgY2hhciAqIHAgPSBOVUxMLCAqIHVybGJ1 ZiA9IE5VTEw7Ci0gICAgaW50IHg7Ci0KLSAgICBpZiAoIXMgfHwgIXVybCkKLSAgICAgICAgcmV0 dXJuKDApOwotCi0gICAgaWYgKCEqcykKLSAgICAgICAgcmV0dXJuKDApOwotCi0gICAgbWFrZXN0 cigmdXJsYnVmLHMpOwotCi0gICAgaWYgKHVybC0+c2F2KSB7CQkJLyogSW4gY2FzZSB3ZSB3ZXJl IGNhbGxlZCBiZWZvcmUuLi4gKi8KLSAgICAgICAgZnJlZSh1cmwtPnNhdik7Ci0gICAgICAgIHVy bC0+c2F2ID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKHVybC0+c3ZjKSB7Ci0gICAgICAgIGZyZWUo dXJsLT5zdmMpOwotICAgICAgICB1cmwtPnN2YyA9IE5VTEw7Ci0gICAgfQotICAgIGlmICh1cmwt PmhvcykgewotICAgICAgICBmcmVlKHVybC0+aG9zKTsKLSAgICAgICAgdXJsLT5ob3MgPSBOVUxM OwotICAgIH0KLSAgICBpZiAodXJsLT5wb3IpIHsKLSAgICAgICAgZnJlZSh1cmwtPnBvcik7Ci0g ICAgICAgIHVybC0+cG9yID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKHVybC0+dXNyKSB7Ci0gICAg ICAgIGZyZWUodXJsLT51c3IpOwotICAgICAgICB1cmwtPnVzciA9IE5VTEw7Ci0gICAgfQotICAg IGlmICh1cmwtPnBzdykgewotICAgICAgICBmcmVlKHVybC0+cHN3KTsKLSAgICAgICAgdXJsLT5w c3cgPSBOVUxMOwotICAgIH0KLSAgICBpZiAodXJsLT5wdGgpIHsKLSAgICAgICAgZnJlZSh1cmwt PnB0aCk7Ci0gICAgICAgIHVybC0+cHRoID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKHVybC0+bm9w dHMpIHsKLSAgICAgICAgaW50IGk7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCB1cmwtPm5vcHRz ICYmIGkgPCBNQVhfVVJMX09QVFM7IGkrKyApIHsKLSAgICAgICAgICAgIGlmICh1cmwtPm9wdFtp XS5uYW0pIHsKLSAgICAgICAgICAgICAgICBmcmVlKHVybC0+b3B0W2ldLm5hbSk7Ci0gICAgICAg ICAgICAgICAgdXJsLT5vcHRbaV0ubmFtID0gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIGlmICh1cmwtPm9wdFtpXS52YWwpIHsKLSAgICAgICAgICAgICAgICBmcmVlKHVybC0+b3B0 W2ldLnZhbCk7Ci0gICAgICAgICAgICAgICAgdXJsLT5vcHRbaV0udmFsID0gTlVMTDsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB1cmwtPm5vcHRzID0gMDsKLSAgICB9Ci0gICAg cCA9IHVybGJ1ZjsJCQkJLyogV2FzIGEgc2VydmljZSByZXF1ZXN0ZWQ/ICovCi0gICAgd2hpbGUg KCpwICYmICpwICE9ICc6JykJCS8qIExvb2sgZm9yIGNvbG9uICovCi0gICAgICBwKys7Ci0gICAg aWYgKCpwID09ICc6JykgeyAgICAgICAgICAgICAgICAgICAgLyogSGF2ZSBhIGNvbG9uICovCi0g ICAgICAgICpwKysgPSBOVUw7CQkJLyogR2V0IHNlcnZpY2UgbmFtZSBvciBudW1iZXIgKi8KLSAg ICAgICAgaWYgKCpwID09ICc6JykJCQkvKiBhIHNlY29uZCBjb2xvbiAqLwotICAgICAgICAgICpw KysgPSBOVUw7CQkJLyogZ2V0IHJpZCBvZiB0aGF0IG9uZSB0b28gKi8KLSAgICAgICAgd2hpbGUg KCpwID09ICcvJykgKnArKyA9IE5VTDsJLyogYW5kIHNsYXNoZXMgKi8KLSNpZmRlZiBDT01NRU5U Ci0gICAgICAgIC8qIFRyYWlsaW5nIHNsYXNoIGlzIHBhcnQgb2YgcGF0aCAtIGxlYXZlIGl0IC0g amFsdG1hbiAqLwotICAgICAgICB4ID0gc3RybGVuKHApOyAgICAgICAgICAgICAgICAgIC8qIExl bmd0aCBvZiByZW1haW5kZXIgKi8KLSAgICAgICAgaWYgKHBbeC0xXSA9PSAnLycpICAgICAgICAg ICAgICAvKiBJZiB0aGVyZSBpcyBhIHRyYWlsaW5nIHNsYXNoICovCi0gICAgICAgICAgcFt4LTFd ID0gTlVMOwkJCS8qIHJlbW92ZSBpdC4gKi8KLSNlbmRpZiAvKiBDT01NRU5UICovCi0gICAgICAg IGlmICh1cmxidWZbMF0pIHsJCS8qIEFueXRoaW5nIGxlZnQ/ICovCi0gICAgICAgICAgICBjaGFy ICpxID0gcCwgKnIgPSBwLCAqdyA9IHA7Ci0JICAgIG1ha2VzdHIoJnVybC0+c3ZjLHVybGJ1Zik7 Ci0KLSAgICAgICAgICAgIHdoaWxlICgqcCAhPSBOVUwgJiYgKnAgIT0gJ0AnKSAvKiBsb29rIGZv ciBAICovCi0JICAgICAgcCsrOwotICAgICAgICAgICAgaWYgKCpwID09ICdAJykgewkJLyogU2ln bmlmaWVzIHVzZXIgSUQsIG1heWJlIHBhc3N3b3JkICovCi0gICAgICAgICAgICAgICAgKnArKyA9 IE5VTDsKLQkJdXJsLT5ob3MgPSBwOwotICAgICAgICAgICAgICAgIHdoaWxlICgqdyAhPSBOVUwg JiYgKncgIT0gJzonKQotICAgICAgICAgICAgICAgICAgdysrOwotICAgICAgICAgICAgICAgIGlm ICgqdyA9PSAnOicpCi0gICAgICAgICAgICAgICAgICAqdysrID0gTlVMOwotCQl1cmwtPnVzciA9 IHI7CQkvKiBVc2VybmFtZSAqLwotCQlpZiAoKncpCi0JCSAgdXJsLT5wc3cgPSB3OwkJLyogUGFz c3dvcmQgKi8KLSAgICAgICAgICAgICAgICBxID0gcDsKLSAgICAgICAgICAgIH0gZWxzZSB7CQkJ LyogTm8gdXNlcm5hbWUgb3IgcGFzc3dvcmQgKi8KLSAgICAgICAgICAgICAgICBwID0gcTsKLQkJ dXJsLT5ob3MgPSBwOwotICAgICAgICAgICAgfQotI2lmZGVmIENPTU1FTlQKLQkgICAgZGVidWco RjExMSwidXJscGFyc2UgdXJsLT51c3IiLHVybC0+dXNyLHVybC0+dXNyKTsKLQkgICAgZGVidWco RjExMSwidXJscGFyc2UgdXJsLT5wc3ciLHVybC0+dXNyLHVybC0+cHN3KTsKLQkgICAgZGVidWco RjExMSwidXJscGFyc2UgdXJsLT5ob3MiLHVybC0+dXNyLHVybC0+aG9zKTsKLSNlbmRpZgkvKiBD T01NRU5UICovCi0KLSAgICAgICAgICAgIHdoaWxlICgqcCAhPSBOVUwgJiYgKnAgIT0gJzonICYm ICpwICE9ICcvJykJLyogUG9ydD8gKi8KLSAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAg aWYgKCpwID09ICc6JykgewkJLyogVENQIHBvcnQgKi8KLSAgICAgICAgICAgICAgICAqcCsrID0g TlVMOwotICAgICAgICAgICAgICAgIHIgPSBwOwotCQl1cmwtPnBvciA9IHI7Ci0gICAgICAgICAg ICAgICAgd2hpbGUgKCpwICE9IE5VTCAmJiAqcCAhPSAnLycpCi0JCSAgcCsrOwotICAgICAgICAg ICAgICAgIC8qICcvJyBpcyBwYXJ0IG9mIHBhdGgsIGxlYXZlIGl0IHVudGlsIHdlIGNhbiBjb3B5 ICovCi0gICAgICAgICAgICAgICAgaWYgKCpwID09ICcvJykgewotCQkgICAgbWFrZXN0cigmdXJs LT5wdGgscCk7ICAvKiBQYXRoICovCi0JCSAgICAqcCA9IE5VTDsKLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICB9IGVsc2UgewkJCS8qIE5vIHBvcnQgKi8KLSAgICAgICAgICAgICAgICAv KiAnLycgaXMgcGFydCBvZiBwYXRoLCBsZWF2ZSBpdCAqLwotICAgICAgICAgICAgICAgIGlmICgq cCA9PSAnLycpIHsKLQkJICAgIG1ha2VzdHIoJnVybC0+cHRoLHApOyAgLyogUGF0aCAqLwotCQkg ICAgKnAgPSBOVUw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9 Ci0JLyogQ29weSBub24tTlVMTCByZXN1bHQgc3RyaW5ncyAqLwotCWlmICh1cmwtPnN2YykgaWYg KCp1cmwtPnN2YykgewotICAgICAgICAgICAgcCA9IHVybC0+c3ZjOwotICAgICAgICAgICAgdXJs LT5zdmMgPSBOVUxMOwotICAgICAgICAgICAgbWFrZXN0cigmdXJsLT5zdmMscCk7Ci0gICAgICAg IH0KLQlpZiAodXJsLT5ob3MpIGlmICgqdXJsLT5ob3MpIHsKLSAgICAgICAgICAgIHAgPSB1cmwt PmhvczsKLSAgICAgICAgICAgIHVybC0+aG9zID0gTlVMTDsKLSAgICAgICAgICAgIG1ha2VzdHIo JnVybC0+aG9zLHApOwotICAgICAgICB9Ci0JaWYgKHVybC0+cG9yKSBpZiAoKnVybC0+cG9yKSB7 Ci0gICAgICAgICAgICBwID0gdXJsLT5wb3I7Ci0gICAgICAgICAgICB1cmwtPnBvciA9IE5VTEw7 Ci0gICAgICAgICAgICBtYWtlc3RyKCZ1cmwtPnBvcixwKTsKLSAgICAgICAgfQotLyoKLSAgV0FS TklORyAoV2VkIE9jdCAgOSAxNjowOTowMyAyMDAyKTogV2Ugbm93IGFsbG93IHRoZSB1c2VybmFt ZSBhbmQKLSAgcGFzc3dvcmQgdG8gYmUgZW1wdHkgc3RyaW5ncy4gIFRoZXNlIGFyZSB0cmVhdGVk IGRpZmZlcmVudGx5IGZyb20gbnVsbAotICBwb2ludGVyczogYW4gZW1wdHkgc3RyaW5nIG1lYW5z IHRoZSBVUkwgaW5jbHVkZWQgdXNlcm5hbWUgYW5kL29yIHBhc3N3b3JkCi0gIGZpZWxkcyB0aGF0 IHdlcmUgZW1wdHksIGUuZy4gZnRwOi8vOkBmdHAueHl6Y29ycC5jb20vc29tZXBhdGgvc29tZWZp bGUsCi0gIHdoaWNoIGNhdXNlcyB0aGUgY2xpZW50IHRvIHByb21wdCBmb3IgdGhlIHVzZXJuYW1l IGFuZC9vciBwYXNzd29yZC4KLSovCi0JaWYgKHVybC0+dXNyKSAvKiBpZiAoKnVybC0+dXNyKSAq LyB7Ci0gICAgICAgICAgICBwID0gdXJsLT51c3I7Ci0gICAgICAgICAgICB1cmwtPnVzciA9IE5V TEw7Ci0gICAgICAgICAgICBtYWtlc3RyKCZ1cmwtPnVzcixwKTsKLSAgICAgICAgfQotCWlmICh1 cmwtPnBzdykgLyogaWYgKCp1cmwtPnBzdykgKi8gewotICAgICAgICAgICAgcCA9IHVybC0+cHN3 OwotICAgICAgICAgICAgdXJsLT5wc3cgPSBOVUxMOwotICAgICAgICAgICAgbWFrZXN0cigmdXJs LT5wc3cscCk7Ci0gICAgICAgIH0KLSAgICAgICAgLyogU2F2ZSBhIGNvcHkgb2YgdGhlIGZ1bGwg dXJsIGlmIG9uZSB3YXMgZm91bmQuICovCi0JaWYgKHVybC0+c3ZjKSAKLQkgIG1ha2VzdHIoJnVy bC0+c2F2LHMpOwotICAgICAgICBmcmVlKHVybGJ1Zik7Ci0JcmV0dXJuKHVybC0+c3ZjID8gMSA6 IDApOwotICAgIH0KLSAgICByZXR1cm4oMCk7Ci19Ci0jZW5kaWYgLyogQ0tfVVJMICovCi0KLSNp Zm5kZWYgTk9DTURMCi0KLWNoYXIgKmhscDFbXSA9IHsKLSNpZm5kZWYgTk9JQ1AKLSIgW2ZpbGVu YW1lXSBbLXggYXJnIFsteCBhcmddLi4uWy15eXldLi5dIFsgPSB0ZXh0IF0gXVxuIiwKLSNlbHNl Ci0iWy14IGFyZyBbLXggYXJnXS4uLlsteXl5XS4uXVxuIiwKLSNlbmRpZiAvKiBOT0lDUCAqLwot IlxuIiwKLSIgIC14IGlzIGFuIG9wdGlvbiByZXF1aXJpbmcgYW4gYXJndW1lbnQsIC15IGFuIG9w dGlvbiB3aXRoIG5vIGFyZ3VtZW50LlxuIiwKLSIgIElmIHRoZSBmaXJzdCBjb21tYW5kLWxpbmUg YXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgYSBmaWxlLCBpbnRlcmFjdGl2ZS1cbiIsCi0iICBtb2Rl IGNvbW1hbmRzIGFyZSBleGVjdXRlZCBmcm9tIHRoZSBmaWxlLiAgVGhlICc9JyBhcmd1bWVudCB0 ZWxscyBLZXJtaXRcbiIsCi0iICBub3QgdG8gcGFyc2UgdGhlIHJlbWFpbmRlciBvZiB0aGUgY29t bWFuZCBsaW5lLCBidXQgdG8gbWFrZSB0aGUgd29yZHNcbiIsCi0iICBmb2xsb3dpbmcgJz0nIGF2 YWlsYWJsZSBhcyBcXCUxLCBcXCUyLCAuLi4gXFwlOS4gIFRoZSBjb21tYW5kIGZpbGUgXAotKGlm IGFueSlcbiIsCi0iICBpcyBleGVjdXRlZCBiZWZvcmUgdGhlIGNvbW1hbmQtbGluZSBvcHRpb25z LlxuIiwKLSJcbiIsCi0jaWZuZGVmIE5PSUNQCi0iSWYgbm8gYWN0aW9uIGNvbW1hbmQgaXMgaW5j bHVkZWQsIG9yIC1TIGlzLCB0aGVuIGFmdGVyIHRoZSBjb21tYW5kIGxpbmUgaXNcbiIsCi0iZXhl Y3V0ZWQsIEtlcm1pdCBpc3N1ZXMgaXRzIHByb21wdCBhbmQgd2FpdHMgZm9yIHlvdSB0byB0eXBl IGNvbW1hbmRzLlxuIiwKLSNlbHNlCi0iT3BlcmF0aW9uIGJ5IGNvbW1hbmQtbGluZSBvcHRpb25z IG9ubHkuXG4iLAotI2VuZGlmIC8qIE5PSUNQICovCi0iIgotfTsKLQotc3RhdGljCi1jaGFyICpo bHAyW10gPSB7Ci0iICBbb3B0aW9uLWxpc3RdIGhvc3RbOnBvcnRdIFtwb3J0XVxuIiwKLSIgIFRo ZSBvcHRpb24tbGlzdCBjb25zaXN0cyBvZiB6ZXJvLCBvbmUsIG9yIG1vcmUgb2Y6XG4iLAotIiAg LTggICAgICAgICAgICAgICAgTmVnb3RpYXRlIFRlbG5ldCBCaW5hcnkgaW4gYm90aCBkaXJlY3Rp b25zXG4iLAotIiAgLWEgICAgICAgICAgICAgICAgUmVxdWlyZSB1c2Ugb2YgVGVsbmV0IGF1dGhl bnRpY2F0aW9uXG4iLAotIiAgLWQgICAgICAgICAgICAgICAgVHVybiBvbiBkZWJ1ZyBtb2RlXG4i LAotIiAgLUUgICAgICAgICAgICAgICAgTm8gZXNjYXBlIGNoYXJhY3RlclxuIiwKLSIgIC1LICAg ICAgICAgICAgICAgIFJlZnVzZSB1c2Ugb2YgYXV0aGVudGljYXRpb247IGRvIG5vdCBzZW5kIHVz ZXJuYW1lXG4iLAotIiAgLWwgdXNlciAgICAgICAgICAgU2V0IHVzZXJuYW1lIGFuZCByZXF1ZXN0 IFRlbG5ldCBhdXRoZW50aWNhdGlvblxuIiwKLSIgIC1MICAgICAgICAgICAgICAgIE5lZ290aWF0 ZSBUZWxuZXQgQmluYXJ5IE91dHB1dCBvbmx5XG4iLAotIiAgLXggICAgICAgICAgICAgICAgUmVx dWlyZSBFbmNyeXB0aW9uXG4iLAotIiAgLUQgICAgICAgICAgICAgICAgRGlzYWJsZSBmb3J3YXJk LVhcbiIsCi0iICAtVCBjZXJ0PWZpbGUgICAgICBVc2UgY2VydGlmaWNhdGUgaW4gZmlsZVxuIiwK LSIgIC1UIGtleT1maWxlICAgICAgIFVzZSBwcml2YXRlIGtleSBpbiBmaWxlXG4iLAotIiAgLVQg Y3JsZmlsZT1maWxlICAgVXNlIENSTCBpbiBmaWxlXG4iLAotIiAgLVQgY3JsZGlyPWRpciAgICAg VXNlIENSTHMgaW4gZGlyZWN0b3J5XG4iLAotIiAgLVQgY2lwaGVyPXN0cmluZyAgVXNlIG9ubHkg Y2lwaGVycyBpbiBzdHJpbmdcbiIsCi0iICAtZiAgICAgICAgICAgICAgICBGb3J3YXJkIGNyZWRl bnRpYWxzIHRvIGhvc3RcbiIsCi0iICAtayByZWFsbSAgICAgICAgICBTZXQgZGVmYXVsdCBLZXJi ZXJvcyByZWFsbVxuIiwKLSIiCi19OwotCi1zdGF0aWMKLWNoYXIgKmhscDNbXSA9IHsgICAgICAg IC8qIHJsb2dpbiAqLwotIiAgW29wdGlvbi1saXN0XSBob3N0Wzpwb3J0XSBbcG9ydF1cbiIsCi0i ICBUaGUgb3B0aW9uLWxpc3QgY29uc2lzdHMgb2YgemVybywgb25lLCBvciBtb3JlIG9mOlxuIiwK LSIgIC1kICAgICAgICAgICAgICAgIFR1cm4gb24gZGVidWcgbW9kZVxuIiwKLSIgIC1sIHVzZXIg ICAgICAgICAgIFNldCB1c2VybmFtZVxuIiwKLSIiCi19OwotCi1zdGF0aWMKLWNoYXIgKmhscDRb XSA9IHsgICAgICAgIC8qIHNzaCAqLwotIiAgW29wdGlvbi1saXN0XSBob3N0Wzpwb3J0XSBbcG9y dF1cbiIsCi0iICBUaGUgb3B0aW9uLWxpc3QgY29uc2lzdHMgb2YgemVybywgb25lLCBvciBtb3Jl IG9mOlxuIiwKLSNpZmRlZiBPUzIKLSIgIC0jIGZsYWdzICAgICAgICAgIEtlcm1pdCA5NSBTdGFy dHVwIEZsYWdzXG4iLAotIiAgICAgICAxICAgICAgICAgICAgICB0dXJuIG9mZiBXaW45NSBzcGVj aWFsIGZpeGVzXG4iLAotIiAgICAgICAyICAgICAgICAgICAgICBkbyBub3QgbG9hZCBvcHRpb25h bCBuZXR3b3JrIGRsbHNcbiIsCi0iICAgICAgIDQgICAgICAgICAgICAgIGRvIG5vdCBsb2FkIG9w dGlvbmFsIHRhcGkgZGxsc1xuIiwKLSIgICAgICAgOCAgICAgICAgICAgICAgZG8gbm90IGxvYWQg b3B0aW9uYWwga2VyYmVyb3MgZGxsc1xuIiwKLSIgICAgICAxNiAgICAgICAgICAgICAgZG8gbm90 IGxvYWQgb3B0aW9uYWwgem1vZGVtIGRsbHNcbiIsCi0iICAgICAgMzIgICAgICAgICAgICAgIHVz ZSBzdGRpbiBmb3IgaW5wdXQgaW5zdGVhZCBvZiB0aGUgY29uc29sZVxuIiwKLSIgICAgICA2NCAg ICAgICAgICAgICAgdXNlIHN0ZG91dCBmb3Igb3V0cHV0IGluc3RlYWQgb2YgdGhlIGNvbnNvbGVc biIsCi0iICAgICAxMjggICAgICAgICAgICAgIGRvIG5vdCB0ZXJtaW5hdGUgcHJvY2VzcyBpbiBy ZXNwb25zZSB0byBTZXNzaW9uIExvZ29mZlxuIiwKLSNlbmRpZiAvKiBPUzIgKi8KLSIgIC1kICAg ICAgICAgICAgICAgIFR1cm4gb24gZGVidWcgbW9kZVxuIiwKLSIgIC1ZICAgICAgICAgICAgICAg IERpc2FibGUgaW5pdCBmaWxlIHByb2Nlc3NpbmdcbiIsCi0iICAtbCB1c2VyICAgICAgICAgICBT ZXQgdXNlcm5hbWVcbiIsCi0iIgotfTsKLQotLyogQ29tbWFuZC1saW5lIG9wdGlvbiBoZWxwIGxp bmVzLiAgVXBkYXRlIHRoaXMgd2hlbiBhZGRpbmcgbmV3IG9wdGlvbnMhICovCi0KLWNoYXIgKiBv cHRobHBbMTI4XTsgICAgICAgICAgICAgICAgICAgICAvKiBPcHRpb24gaGVscCAqLwotY2hhciAq IGFyZ2hscFsxMjhdOyAgICAgICAgICAgICAgICAgICAgIC8qIEFyZ3VtZW50IGZvciBvcHRpb24g Ki8KLWludCBvcHRhY3RbMTI4XTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBBY3Rpb24tb3B0 aW9uIGZsYWcgKi8KLQotVk9JRAotZmF0YWwyKG1zZzEsbXNnMikgY2hhciAqbXNnMSwgKm1zZzI7 IHsKLSAgICBjaGFyIGJ1ZlsyNTZdOwotICAgIGlmICghbXNnMSkgbXNnMSA9ICIiOwotICAgIGlm ICghbXNnMikgbXNnMiA9ICIiOwotICAgIGNrbWFrbXNnKGJ1ZiwyNTYsIlwiIixtc2cxLCJcIiAt ICIsbXNnMik7Ci0jaWZuZGVmIE5PSUNQCi0gICAgaWYgKHdoYXQgPT0gV19DT01NQU5EKQotICAg ICAgcHJpbnRmKCIlc1xuIixidWYpOwotICAgIGVsc2UKLSNlbmRpZiAvKiBOT0lDUCAqLwotICAg ICAgZmF0YWwoKGNoYXIgKilidWYpOwotfQotCi1zdGF0aWMgU0lHVFlQCi0jaWZkZWYgQ0tfQU5T SQotY2xfaW50KGludCBkdW1teSkKLSNlbHNlIC8qIENLX0FOU0kgKi8KLWNsX2ludChkdW1teSkg aW50IGR1bW15OwotI2VuZGlmIC8qIENLX0FOU0kgKi8KLXsJCQkJCS8qIENvbW1hbmQtbGluZSBp bnRlcnJ1cHQgaGFuZGxlciAqLwotICAgIGRvZXhpdChCQURfRVhJVCwxKTsKLSAgICBTSUdSRVRV Uk47Ci19Ci0KLSNpZmRlZiBORVdGVFAKLWV4dGVybiBpbnQgZnRwX2FjdGlvbiwgZnRwX2NtZGxp bjsKLQotc3RhdGljIGludAoteHhfZnRwKGhvc3QsIHBvcnQpIGNoYXIgKiBob3N0LCAqIHBvcnQ7 IHsKLSNpZmRlZiBDS19VUkwKLSAgICBleHRlcm4gaW50IGhhdmV1cmw7Ci0jZW5kaWYgLyogQ0tf VVJMICovCi0gICAgZXh0ZXJuIGNoYXIgKiBmdHBfbG9nbmFtZTsKLSAgICBpbnQgdXNlX3RscyA9 IDA7Ci0gICAgY2hhciAqIHA7Ci0KLSAgICBpZiAocG9ydCkgaWYgKCEqcG9ydCkgcG9ydCA9IE5V TEw7Ci0KLSAgICBpZiAoIWhvc3QpCi0gICAgICByZXR1cm4oMCk7Ci0gICAgaWYgKCEqaG9zdCkK LSAgICAgIHJldHVybigwKTsKLSAgICBkZWJ1ZyhGMTExLCJmdHAgeHhfZnRwIGhvc3QiLGZ0cF9o b3N0LGhhdmVmdHB1aWQpOwotICAgIGRlYnVnKEYxMTEsImZ0cCB4eF9mdHAgdWlkYnVmIDEiLHVp ZGJ1ZixoYXZlZnRwdWlkKTsKLSAgICBmdHBfY21kbGluID0gMTsJCQkvKiAxID0gRlRQIHN0YXJ0 ZWQgZnJvbSBjb21tYW5kIGxpbmUgKi8KLSAgICBpZiAobmZpbHMgPiAwKQotICAgICAgZnRwX2Nt ZGxpbisrOwkJCS8qIDIgPSBzYW1lIHBsdXMgZmlsZSB0cmFuc2ZlciAqLwotCi0jaWZuZGVmIE5P VVJMCi0gICAgLyogZGVidWcoRjExMSwiZnRwIHh4X2Z0cCBnX3VybC51c3IiLGdfdXJsLnVzcixn X3VybC51c3IpOyAqLwotICAgIGlmIChoYXZldXJsICYmIGdfdXJsLnVzcikgewkJLyogV2VkIE9j dCAgOSAxNToxNToyMiAyMDAyICovCi0JaWYgKCEqKGdfdXJsLnVzcikpIHsJCS8qIEZvcmNlIHVz ZXJuYW1lIHByb21wdCBpZiAqLwotCSAgICBoYXZlZnRwdWlkID0gMDsJCS8qICJmdHA6Ly86QGhv c3QiIGdpdmVuLiAqLwotCSAgICB1aWRidWZbMF0gPSBOVUw7Ci0JICAgIG1ha2VzdHIoJmZ0cF9s b2duYW1lLE5VTEwpOwotCX0JICAKLQlkZWJ1ZyhGMTExLCJmdHAgeHhfZnRwIHVpZGJ1ZiAyIix1 aWRidWYsaGF2ZWZ0cHVpZCk7Ci0gICAgfQotI2VuZGlmIC8qIE5PVVJMICovCi0gICAgZGVidWco RjExMSwiZnRwIHh4X2Z0cCB1aWRidWYgMyIsdWlkYnVmLGhhdmVmdHB1aWQpOwotICAgIGlmICho YXZlZnRwdWlkKSB7Ci0JbWFrZXN0cigmZnRwX2xvZ25hbWUsdWlkYnVmKTsKLQlkZWJ1ZyhGMTEx LCJmdHBfbG9nbmFtZSIsZnRwX2xvZ25hbWUsaGF2ZWZ0cHVpZCk7Ci0gICAgfQotICAgIGlmICgh cG9ydCkgewotCWlmICgocCA9IGNrc3RyY2hyKGZ0cF9ob3N0LCc6JykpKQotCSAgKnArKyA9IE5V TDsKLQlwb3J0ID0gcDsKLSAgICB9Ci0gICAgaWYgKCFwb3J0KSB7Ci0jaWZkZWYgQ0tfVVJMCi0g ICAgICAgIGlmIChoYXZldXJsKSB7Ci0JICAgIGlmIChnX3VybC5wb3IpIAotCSAgICAgIHBvcnQg PSBnX3VybC5wb3I7Ci0gICAgICAgICAgICBlbHNlIGlmIChnX3VybC5zdmMpCi0JICAgICAgcG9y dCA9IGdfdXJsLnN2YzsKLSAgICAgICAgICAgIGVsc2UgCi0JICAgICAgcG9ydCA9ICJmdHAiOwot ICAgICAgICB9IGVsc2UKLSNlbmRpZiAvKiBDS19VUkwgKi8KLQkgIHBvcnQgPSAiZnRwIjsKLSAg ICB9Ci0KLSNpZmRlZiBDS19TU0wKLSAgICBpZiAoaGF2ZXVybCAmJiBnX3VybC5zdmMpCi0gICAg ICB1c2VfdGxzID0gIWNrc3RyY21wKCJmdHBzIixnX3VybC5zdmMsLTEsMCk7Ci0jZW5kaWYgLyog Q0tfU1NMICovCi0KLSAgICBpZiAoZnRwb3BlbihmdHBfaG9zdCxwb3J0LHVzZV90bHMpIDwgMSkK LSAgICAgIHJldHVybigtMSk7Ci0gICAgZGVidWcoRjExMSwiZnRwIHh4X2Z0cCBhY3Rpb24iLGNr Y3RvYSgoY2hhcilmdHBfYWN0aW9uKSxuZmlscyk7Ci0gICAgaWYgKG5maWxzID4gMCkgewotCXN3 aXRjaCAoZnRwX2FjdGlvbikgewotCSAgY2FzZSAnZyc6Ci0JICAgIHJldHVybihjbWRsaW5nZXQo c3RheWZsZykpOwotCSAgY2FzZSAncCc6Ci0JICBjYXNlICdzJzoKLQkgICAgcmV0dXJuKGNtZGxp bnB1dChzdGF5ZmxnKSk7Ci0JfQotICAgIH0KLSAgICByZXR1cm4oMSk7Ci19Ci0jZW5kaWYgLyog TkVXRlRQICovCi0KLQotI2lmbmRlZiBOT0hUVFAKLXN0YXRpYwotY2hhciAqIGh0dHBfaGxwW10g PSB7Ci0gICAgIiAtaCAgICAgICAgICAgICBUaGlzIG1lc3NhZ2UuXG4iLAotICAgICIgLWQgICAg ICAgICAgICAgRGVidWcgdG8gZGVidWcubG9nLlxuIiwKLSAgICAiIC1TICAgICAgICAgICAgIFN0 YXkgKGlzc3VlIGNvbW1hbmQgcHJvbXB0IHdoZW4gZG9uZSkuXG4iLAotICAgICIgLVkgICAgICAg ICAgICAgRG8gbm90IGV4ZWN1dGUgS2VybWl0IGluaXRpYWxpemF0aW9uIGZpbGUuXG4iLAotICAg ICIgLXEgICAgICAgICAgICAgUXVpZXQgKHN1cHByZXNzIG1vc3QgbWVzc2FnZXMpLlxuIiwKLSAg ICAiIC11IG5hbWUgICAgICAgIFVzZXJuYW1lLlxuIiwKLSAgICAiIC1QIHBhc3N3b3JkICAgIFBh c3N3b3JkLlxuIiwKLSAgICAiIC1nIHBhdGhuYW1lICAgIEdldCByZW1vdGUgcGF0aG5hbWUuXG4i LAotICAgICIgLXAgcGF0aG5hbWUgICAgUHV0IHJlbW90ZSBwYXRobmFtZS5cbiIsCi0gICAgIiAt SCBwYXRobmFtZSAgICBIZWFkIHJlbW90ZSBwYXRobmFtZS5cbiIsCi0gICAgIiAtbCBwYXRobmFt ZSAgICBMb2NhbCBwYXRoIGZvciAtZywgLXAsIGFuZCAtSC5cbiIsCi0jaWZkZWYgQ0tfU1NMCi0g ICAgIiAteiBvcHRbPXZhbHVlXSBTZWN1cml0eSBvcHRpb25zLi4uXG4iLAotICAgICIgICAgY2Vy dD1maWxlICAgQ2xpZW50IGNlcnRpZmljYXRlIGZpbGVcbiIsCi0gICAgIiAgICBjZXJ0c29rICAg ICBBY2NlcHQgYWxsIGNlcnRpZmljYXRlc1xuIiwKLSAgICAiICAgIGtleT1maWxlICAgIENsaWVu dCBwcml2YXRlIGtleSBmaWxlXG4iLAotICAgICIgICAgc2VjdXJlICAgICAgVXNlIFNTTFxuIiwK LSAgICAiICAgIHZlcmlmeT1uICAgIDAgPSBub25lLCAxID0gcGVlciAsIDIgPSBjZXJ0aWZpY2F0 ZSByZXF1aXJlZFxuIiwKLSNlbmRpZiAvKiBDS19TU0wgKi8KLSAgICAiIgotfTsKLQotI2RlZmlu ZSBIVF9DRVJURkkgMAotI2RlZmluZSBIVF9PS0NFUlQgMQotI2RlZmluZSBIVF9LRVkgICAgMgot I2RlZmluZSBIVF9TRUNVUkUgMwotI2RlZmluZSBIVF9WRVJJRlkgNAotCi1zdGF0aWMgc3RydWN0 IGtleXRhYiBodHRwenRhYltdID0gewotICAgIHsgImNlcnQiLCAgICBIVF9DRVJURkksIENNX0FS RyB9LAotICAgIHsgImNlcnRzb2siLCBIVF9PS0NFUlQsIDAgfSwKLSAgICB7ICJrZXkiLCAgICAg SFRfS0VZLCAgICBDTV9BUkcgfSwKLSAgICB7ICJzZWN1cmUiLCAgSFRfU0VDVVJFLCAwIH0sCi0g ICAgeyAidmVyaWZ5IiwgIEhUX1ZFUklGWSwgQ01fQVJHIH0sCi0gICAgeyAiIiwgMCwgMCB9Ci19 Owotc3RhdGljIGludCBuaHR0cHp0YWIgPSBzaXplb2YoaHR0cHp0YWIpIC8gc2l6ZW9mKHN0cnVj dCBrZXl0YWIpIC0gMTsKLSNlbmRpZiAvKiBOT0hUVFAgKi8KLQotLyogIFUgUyBBIEcgRSAqLwot Ci1WT0lECi11c2FnZSgpIHsKLSNpZmRlZiBNSU5JWAotICAgIGNvbm9sKCJVc2FnZTogIik7Ci0g ICAgY29ub2woeGFyZzApOwotICAgIGNvbm9sKCIgWy14IGFyZyBbLXggYXJnXS4uLlsteXl5XS4u XSBdXG4iKTsKLSNlbHNlCi0gICAgY29ub2woIlVzYWdlOiAiKTsKLSAgICBjb25vbCh4YXJnMCk7 Ci0gICAgaWYgKGhvd2NhbGxlZCA9PSBJX0FNX0tFUk1JVCB8fCBob3djYWxsZWQgPT0gSV9BTV9J S1NEIHx8Ci0gICAgICAgIGhvd2NhbGxlZCA9PSBJX0FNX1NTSFNVQikKLSAgICAgIGNvbm9sYSho bHAxKTsKLSAgICBlbHNlIGlmIChob3djYWxsZWQgPT0gSV9BTV9URUxORVQpCi0gICAgICBjb25v bGEoaGxwMik7Ci0gICAgZWxzZSBpZiAoaG93Y2FsbGVkID09IElfQU1fUkxPR0lOKQotICAgICAg Y29ub2xhKGhscDMpOwotICAgIGVsc2UgaWYgKGhvd2NhbGxlZCA9PSBJX0FNX1NTSCkKLSAgICAg IGNvbm9sYShobHA0KTsKLSAgICBpZiAoaG93Y2FsbGVkID09IElfQU1fS0VSTUlUIHx8IGhvd2Nh bGxlZCA9PSBJX0FNX0lLU0QgfHwKLSAgICAgICAgaG93Y2FsbGVkID09IElfQU1fU1NIU1VCKSB7 Ci0JaW50IGM7Ci0JY29ub2xsKCIiKTsKLQljb25vbGwoIkNvbXBsZXRlIGxpc3Rpbmcgb2YgY29t bWFuZC1saW5lIG9wdGlvbnM6Iik7Ci0JY29ub2xsKCIiKTsKLQlmb3IgKGMgPSAzMTsgYyA8IDEy ODsgYysrKSB7Ci0JICAgIGlmICghb3B0aGxwW2NdKQotCSAgICAgIGNvbnRpbnVlOwotCSAgICBp ZiAoYXJnaGxwW2NdKSB7Ci0JCXByaW50ZigiIC0lYyA8YXJnPiVzXG4iLAotCQkgICAgICAgKGNo YXIpYywKLQkJICAgICAgIChvcHRhY3RbY10gPyAiIChhY3Rpb24gb3B0aW9uKSIgOiAiIikKLQkJ ICAgICAgICk7Ci0JCXByaW50ZigiICAgICAlc1xuIixvcHRobHBbY10pOwotCQlwcmludGYoIiAg ICAgQXJndW1lbnQ6ICVzXG5cbiIsYXJnaGxwW2NdKTsKLQkgICAgfSBlbHNlIHsJCQkvKiBPcHRp b24gd2l0aG91dCBhcmcgKi8KLQkJcHJpbnRmKCIgLSVjICAlcyVzXG4iLAotCQkgICAgICAgKGNo YXIpYywgb3B0aGxwW2NdLAotCQkgICAgICAgKG9wdGFjdFtjXT8iIChhY3Rpb24gb3B0aW9uKSI6 IiIpCi0JCSAgICAgICApOwotCQlwcmludGYoIiAgICAgQXJndW1lbnQ6IChub25lKVxuXG4iKTsK LQkgICAgfQotCX0KLSNpZmRlZiBPUzJPUlVOSVgKLQlwcmludGYoIlRvIHByZXZlbnQgdGhpcyBt ZXNzYWdlIGZyb20gc2Nyb2xsaW5nLCB1c2UgJyVzIC1oIHwgbW9yZScuXG4iLAotCSAgICAgICB4 YXJnMCk7Ci0jZW5kaWYgLyogT1MyT1JVTklYICovCi0JcHJpbnRmKCJGb3IgYSBsaXN0IG9mIGV4 dGVuZGVkIG9wdGlvbnMgdXNlICclcyAtLWhlbHAnLlxuIiwKLQkgICAgICAgeGFyZzApOwotICAg IH0KLSNlbmRpZiAvKiBNSU5JWCAqLwotfQotCi0KLS8qICBDIE0gRCBMIEkgTiAgLS0gIEdldCBh cmd1bWVudHMgZnJvbSBjb21tYW5kIGxpbmUgICovCi0KLWludAotY21kbGluKCkgewotICAgIGNo YXIgeDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExvY2FsIGdlbmVyYWwtcHVycG9z ZSBjaGFyICovCi0gICAgZXh0ZXJuIGludCBoYXZldXJsOwotCi0jaWZkZWYgTkVXRlRQCi0gICAg Y2hhciAqIHBvcnQgPSBOVUxMOwotI2VuZGlmIC8qIE5FV0ZUUCAqLwotCi0jaWZuZGVmIE5PWEZF UgotICAgIGNtYXJnID0gIiI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUg Z2xvYmFscyAqLwotICAgIGNtYXJnMiA9ICIiOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotICAgIGFj dGlvbiA9IDA7Ci0gICAgY2ZsZyA9IDA7Ci0KLSAgICBzaWduYWwoU0lHSU5ULGNsX2ludCk7Ci0K LS8qIEhlcmUgd2UgaGFuZGxlIGRpZmZlcmVudCAiQ29tbWFuZCBMaW5lIFBlcnNvbmFsaXRpZXMi ICovCi0KLSNpZmRlZiBUQ1BTT0NLRVQKLSNpZm5kZWYgTk9IVFRQCi0gICAgaWYgKGhvd2NhbGxl ZCA9PSBJX0FNX0hUVFApIHsgICAgICAgLyogSWYgSSB3YXMgY2FsbGVkIGFzIEhUVFAuLi4gKi8K LQljaGFyIHJkbnNbMTI4XTsKLSNpZmRlZiBPUzIKLQljaGFyICogYWdlbnQgPSAiS2VybWl0IDk1 IjsKLSNlbHNlICAgCi0JY2hhciAqIGFnZW50ID0gIkMtS2VybWl0IjsKLSNlbmRpZiAvKiBPUzIg Ki8KLQotICAgICAgICBkZWJ1ZyhGMTAwLCJodHRwIHBlcnNvbmFsaXR5IiwiIiwwKTsKLSNpZmRl ZiBDS19VUkwKLSAgICAgICAgaWYgKGhhdmV1cmwpIHsKLSAgICAgICAgICAgIGludCB0eXBlOwot ICAgICAgICAgICAgY2hhciAqIGxmaWxlOwotCi0JICAgIHR5cGUgPSBsb29rdXAodXJsdGFiLGdf dXJsLnN2YyxudXJsdGFiLE5VTEwpOwotICAgICAgICAgICAgaWYgKCEodHlwZSA9PSBVUkxfSFRU UCB8fCB0eXBlID09IFVSTF9IVFRQUykpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIj9JbnRl cm5hbCBFcnJvcjogSFRUUCBjb21tYW5kIGxpbmUgcHJvY2Vzc2luZ1xuIik7Ci0gICAgICAgICAg ICAgICAgZGVidWcoRjEwMCwiRXJyb3I6IEhUVFAgY29tbWFuZCBsaW5lIHByb2Nlc3NpbmciLCIi LDApOwotICAgICAgICAgICAgICAgIGRvZXhpdChCQURfRVhJVCwxKTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIHJkbnNbMF0gPSAnXDAnOwotICAgICAgICAgICAgbGZpbGUgPSAiIjsKLSAg ICAgICAgICAgIHggPSAoaHR0cF9vcGVuKGdfdXJsLmhvcyxnX3VybC5wb3IgPyBnX3VybC5wb3Ig OiBnX3VybC5zdmMsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9PSBVUkxfSFRU UFMsIHJkbnMsMTI4LE5VTEwpID09IDApOwotICAgICAgICAgICAgaWYgKHgpIHsKLSNpZmRlZiBL VUkKLQkJY2hhciBhc25hbWVbQ0tNQVhQQVRIKzFdOwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAg ICAgICAgICAgIGlmICghcXVpZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJkbnNbMF0p Ci0JCSAgICAgIHByaW50ZigiQ29ubmVjdGVkIHRvICVzIFslc11cclxuIixnX3VybC5ob3MscmRu cyk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLQkJICAgICAgcHJpbnRmKCJDb25uZWN0ZWQg dG8gJXNcclxuIixnX3VybC5ob3MpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg ICBpZiAoZ191cmwucHRoKQotICAgICAgICAgICAgICAgICAgenN0cmlwKGdfdXJsLnB0aCwmbGZp bGUpOwotICAgICAgICAgICAgICAgIGVsc2UKLQkJICBnX3VybC5wdGggPSAiLyI7Ci0KLSAgICAg ICAgICAgICAgICBpZiAoISpsZmlsZSkKLSAgICAgICAgICAgICAgICAgIGxmaWxlID0gImluZGV4 Lmh0bWwiOwotCi0jaWZkZWYgS1VJCi0JCWlmICh1cV9maWxlKE5VTEwsCS8qIEs5NSBHVUk6IFB1 dCB1cCBmaWxlIGJveC4gKi8KLQkJCSAgICBOVUxMLAkvKiAobm90IHRlc3RlZC4uLikgKi8KLQkJ CSAgICA0LAotCQkJICAgIE5VTEwsCi0JCQkgICAgbGZpbGUsCi0JCQkgICAgYXNuYW1lLAotCQkJ ICAgIENLTUFYUEFUSCsxCi0JCQkgICAgKSA+IDApCi0JCSAgbGZpbGUgPSBhc25hbWU7Ci0jZW5k aWYgLyogS1VJICovCi0KLSAgICAgICAgICAgICAgICB4ID0gaHR0cF9nZXQoYWdlbnQsCi0JCQkg ICAgIE5VTEwsCS8qIGhkcmxpc3QgKi8KLQkJCSAgICAgZ191cmwudXNyLAotCQkJICAgICBnX3Vy bC5wc3csCi0JCQkgICAgIDAsCi0JCQkgICAgIGxmaWxlLAotCQkJICAgICBnX3VybC5wdGgsCi0J CQkgICAgIDAJCS8qIHN0ZGlvICovCi0JCQkgICAgICk7Ci0gICAgICAgICAgICAgICAgeCA9ICho dHRwX2Nsb3NlKCkgPT0gMCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg IGlmICghcXVpZXQpCi0JCSAgcHJpbnRmKCI/SFRUUCBDb25uZWN0aW9uIGZhaWxlZC5cclxuIik7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkb2V4aXQoeCA/IEdPT0RfRVhJVCA6IEJBRF9F WElULCAtMSk7Ci0gICAgICAgIH0gZWxzZSAKLSNlbmRpZiAvKiBDS19VUkwgKi8KLQkgIHsKLQkg ICAgICBpbnQgaHR0cF9hY3Rpb24gPSAwOwotCSAgICAgIGNoYXIgKiBob3N0ID0gTlVMTCwgKiBz dmMgPSBOVUxMLCAqIGxwYXRoID0gTlVMTDsKLQkgICAgICBjaGFyICogdXNlciA9IE5VTEwsICog cHN3ZCA9IE5VTEwsICogcGF0aCA9IE5VTEw7Ci0JICAgICAgY2hhciAqIHhwOwotCi0JICAgICAg d2hpbGUgKC0teGFyZ2MgPiAwKSB7CS8qIEdvIHRocm91Z2ggY29tbWFuZCBsaW5lIHdvcmRzICov Ci0JCSAgeGFyZ3YrKzsKLQkJICBkZWJ1ZyhGMTExLCJjbWRsaW4gaHR0cCB4YXJndiIsKnhhcmd2 LHhhcmdjKTsKLQkJICB4cCA9ICp4YXJndisxOwotCQkgIGlmICgqKnhhcmd2ID09ICctJykgeyAv KiBHb3QgYW4gb3B0aW9uICovCi0JCSAgICAgIGludCB4eDsKLQkJICAgICAgeCA9ICooKnhhcmd2 KzEpOwkvKiBHZXQgdGhlIG9wdGlvbiBsZXR0ZXIgKi8KLQkJICAgICAgc3dpdGNoICh4KSB7Ci0J CQljYXNlICdkJzoJLyogRGVidWcgKi8KLSNpZmRlZiBERUJVRwotCQkJICBpZiAoZGVibG9nKSB7 Ci0JCQkgICAgICBkZWJ0aW0gPSAxOwotCQkJICB9IGVsc2UgewotCQkJICAgICAgZGVibG9nID0g ZGVib3BuKCJkZWJ1Zy5sb2ciLDApOwotCQkJICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLQkJCSAg YnJlYWs7Ci0JCQljYXNlICdTJzoJLyogU3RheSAqLwotCQkJY2FzZSAnWSc6CS8qIE5vIGluaXRp YWxpemF0aW9uIGZpbGUgKi8KLQkJCSAgYnJlYWs7CS8qIChhbHJlYWR5IGRvbmUgaW4gcHJlc2Nh bikgKi8KLQkJCWNhc2UgJ3EnOgkvKiBRdWlldCAqLwotCQkJICBxdWlldCA9IDE7Ci0JCQkgIGJy ZWFrOwotCQkJY2FzZSAndSc6CS8qIE9wdGlvbnMgdGhhdCByZXF1aXJlIGFyZ3VtZW50cyAqLwot CQkJY2FzZSAnUCc6Ci0JCQljYXNlICdnJzoKLQkJCWNhc2UgJ3AnOgotCQkJY2FzZSAnSCc6Ci0J CQljYXNlICdsJzoKLQkJCSAgaWYgKCooeHArMSkpIHsKLQkJCSAgICAgIFhGQVRBTCgiSW52YWxp ZCBhcmd1bWVudCBidW5kbGluZyIpOwotCQkJICB9Ci0JCQkgIHhhcmd2KyssIHhhcmdjLS07Ci0J CQkgIGlmICgoeGFyZ2MgPCAxKSB8fCAoKip4YXJndiA9PSAnLScpKSB7Ci0JCQkgICAgICBYRkFU QUwoIk1pc3NpbmcgYXJndW1lbnQiKTsKLQkJCSAgfQotCQkJICBzd2l0Y2ggKHgpIHsKLQkJCSAg ICBjYXNlICd1JzoKLQkJCSAgICAgIHVzZXIgPSAqeGFyZ3Y7Ci0JCQkgICAgICBicmVhazsKLQkJ CSAgICBjYXNlICdQJzoKLQkJCSAgICAgIHBzd2QgPSAqeGFyZ3Y7Ci0JCQkgICAgICBicmVhazsK LQkJCSAgICBjYXNlICdsJzoKLQkJCSAgICAgIGlmIChodHRwX2FjdGlvbiAhPSBIVFRQX1BVVCkK LQkJCQlscGF0aCA9ICp4YXJndjsKLQkJCSAgICAgIGJyZWFrOwotCQkJICAgIGNhc2UgJ2cnOgot CQkJICAgICAgaHR0cF9hY3Rpb24gPSBIVFRQX0dFVDsKLQkJCSAgICAgIHBhdGggPSAqeGFyZ3Y7 Ci0JCQkgICAgICBkZWJ1ZyhGMTExLCJjbWRsaW4gaHR0cCBHRVQiLHBhdGgsaHR0cF9hY3Rpb24p OwotCQkJICAgICAgYnJlYWs7Ci0JCQkgICAgY2FzZSAncCc6Ci0JCQkgICAgICBodHRwX2FjdGlv biA9IEhUVFBfUFVUOwotCQkJICAgICAgcGF0aCA9ICp4YXJndjsKLQkJCSAgICAgIGJyZWFrOwot CQkJICAgIGNhc2UgJ0gnOgotCQkJICAgICAgaHR0cF9hY3Rpb24gPSBIVFRQX0hFRDsKLQkJCSAg ICAgIHBhdGggPSAqeGFyZ3Y7Ci0JCQkgIH0KLQkJCSAgYnJlYWs7Ci0KLSNpZmRlZiBDS19TU0wK LSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3onOiB7Ci0JCQkgICAgLyogKnhhcmd2IGNv bnRhaW5zIGEgdmFsdWUgb2YgdGhlIGZvcm0gdGFnPXZhbHVlICovCi0JCQkgICAgLyogd2UgbmVl ZCB0byBsb29rdXAgdGhlIHRhZyBhbmQgc2F2ZSB0aGUgdmFsdWUgICovCi0JCQkgICAgaW50IHgs eSx6OwotCQkJICAgIGNoYXIgKiBwLCAqIHE7Ci0JCQkgICAgbWFrZXN0cigmcCwqeGFyZ3YpOwot CQkJICAgIHkgPSBja2luZGV4KCI9IixwLDAsMCwxKTsKLQkJCSAgICBpZiAoeSA+IDApCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwW3ktMV0gPSAnXDAnOwotCQkJICAgIHggPSBsb29r dXAoaHR0cHp0YWIscCxuaHR0cHp0YWIsJnopOwotCQkJICAgIGlmICh4IDwgMCkgewotCQkJCXBy aW50ZigiP0ludmFsaWQgc2VjdXJpdHkgb3B0aW9uOiBcIiVzXCJcbiIscCk7Ci0JCQkgICAgfSBl bHNlIHsKLQkJCQlwcmludGYoIlNlY3VyaXR5IG9wdGlvbjogXCIlcyIscCk7Ci0JCQkJaWYgKGh0 dHB6dGFiW3pdLmZsZ3MgJiBDTV9BUkcpIHsKLQkJCQkgICAgcSA9ICZwW3ldOwotCQkJCSAgICBp ZiAoISpxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXRhbCgiP01p c3NpbmcgcmVxdWlyZWQgdmFsdWUiKTsKLQkJCQl9Ci0JCQkJLyogLXogb3B0aW9ucyB3L2FyZ3Mg Ki8KLQkJCQlzd2l0Y2ggKGh0dHB6dGFiW3pdLmt3dmFsKSB7Ci0JCQkJICBjYXNlIEhUX0NFUlRG SToKLQkJCQkgICAgbWFrZXN0cigmc3NsX3JzYV9jZXJ0X2ZpbGUscSk7Ci0JCQkJICAgIGJyZWFr OwotCQkJCSAgY2FzZSBIVF9PS0NFUlQ6Ci0JCQkJICAgIHNzbF9jZXJ0c29rX2ZsYWcgPSAxOwot CQkJCSAgICBicmVhazsKLQkJCQkgIGNhc2UgSFRfS0VZOgotCQkJCSAgICBtYWtlc3RyKCZzc2xf cnNhX2tleV9maWxlLHEpOwotCQkJCSAgICBicmVhazsKLQkJCQkgIGNhc2UgSFRfU0VDVVJFOgot CQkJCSAgICBzdmM9Imh0dHBzIjsKLQkJCQkgICAgYnJlYWs7Ci0JCQkJICBjYXNlIEhUX1ZFUklG WToKLQkJCQkgICAgaWYgKCFyZGlnaXRzKHEpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwcmludGYoIj9CYWQgbnVtYmVyOiAlc1xuIixxKTsKLQkJCQkgICAgc3NsX3Zl cmlmeV9mbGFnID0gYXRvaShxKTsKLQkJCQkgICAgYnJlYWs7Ci0JCQkJfQotCQkJICAgIH0KLQkJ CSAgICBmcmVlKHApOwotCQkJICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot I2VuZGlmIC8qIENLX1NTTCAqLwotCi0JCQljYXNlICdoJzoJLyogSGVscCAqLwotCQkJZGVmYXVs dDoKLQkJCSAgcHJpbnRmKCJVc2FnZTogJXMgaG9zdCBbIG9wdGlvbnMuLi4gXVxuIix4YXJnMCk7 Ci0JCQkgIGNvbm9sYShodHRwX2hscCk7Ci0JCQkgIGRvZXhpdChHT09EX0VYSVQsLTEpOwotCQkg ICAgICB9Ci0JCSAgfSBlbHNlIHsJCS8qIE5vIGRhc2ggLSBtdXN0IGJlIGhvc3RuYW1lICovCi0J CSAgICAgIGhvc3QgPSAqeGFyZ3Y7Ci0JCSAgICAgIGlmICh4YXJnYyA+IDEpIHsKLQkJCSAgc3Zj ID0gKih4YXJndisxKTsKLQkJCSAgaWYgKHN2YykgaWYgKCpzdmMgPT0gJy0nIHx8ICEqc3ZjKQot CQkJICAgIHN2YyA9IE5VTEw7Ci0JCQkgIGlmIChzdmMpIHsKLQkJCSAgICAgIHhhcmd2Kys7Ci0J CQkgICAgICB4YXJnYy0tOwotCQkJICB9Ci0JCSAgICAgIH0KLQkJICB9Ci0JICAgICAgfQotCSAg ICAgIGlmICghc3ZjKSBzdmMgPSAiIjsKLQkgICAgICBpZiAoISpzdmMpIHN2YyA9ICJodHRwIjsK LQkgICAgICBpZiAoIWhvc3QpIFhGQVRBTCgiTm8gaHR0cCBob3N0IGdpdmVuIik7Ci0KLQkgICAg ICAvKiBDaGVjayBhY3Rpb24gYXJncyBiZWZvcmUgb3BlbmluZyB0aGUgY29ubmVjdGlvbiAqLwot CSAgICAgIGlmIChodHRwX2FjdGlvbikgewotCQkgIGlmIChodHRwX2FjdGlvbiA9PSBIVFRQX1BV VCkgewotCQkgICAgICBpZiAoIWxwYXRoKQotCQkJWEZBVEFMKCJObyBsb2NhbCBwYXRoIGZvciBo dHRwIFBVVCIpOwotCQkgIH0KLQkJICBpZiAoIXBhdGgpCi0JCSAgICBYRkFUQUwoIk5vIHJlbW90 ZSBwYXRoIGZvciBodHRwIGFjdGlvbiIpOwotCSAgICAgIH0KLQkgICAgICAvKiBOb3cgaXQncyBP SyB0byBvcGVuIHRoZSBjb25uZWN0aW9uICovCi0JICAgICAgcmRuc1swXSA9IE5VTDsKLQkgICAg ICB4ID0gKGh0dHBfb3Blbihob3N0LAotCQkJICAgICBzdmMsIWNrc3RyY21wKCJodHRwcyIsc3Zj LC0xLDApLHJkbnMsMTI4LE5VTEwKLQkJCSAgICAgKSA9PSAwKTsKLQkgICAgICBpZiAoIXgpIHsK LQkJICBpZiAoIXF1aWV0KQotCQkgICAgcHJpbnRmKCI/SFRUUCBDb25uZWN0aW9uIGZhaWxlZC5c clxuIik7Ci0JCSAgZG9leGl0KEJBRF9FWElULC0xKTsKLQkgICAgICB9Ci0JICAgICAgaWYgKCFx dWlldCkgewotCQkgIGlmIChyZG5zWzBdKQotCQkgICAgcHJpbnRmKCJDb25uZWN0ZWQgdG8gJXMg WyVzXVxyXG4iLGhvc3QscmRucyk7Ci0JCSAgZWxzZQotCQkgICAgcHJpbnRmKCJDb25uZWN0ZWQg dG8gJXNcclxuIixob3N0KTsKLQkgICAgICB9Ci0JICAgICAgaWYgKGh0dHBfYWN0aW9uKSB7Ci0g ICAgICAgICAgICAgICAgICBpbnQgcGNweSA9IDA7Ci0JCSAgaWYgKGh0dHBfYWN0aW9uICE9IEhU VFBfUFVUKSB7IC8qIFN1cHBseSBkZWZhdWx0ICovCi0JCSAgICAgIGlmICghbHBhdGgpIHsJCSAv KiBsb2NhbCBwYXRoLi4uICovCi0JCQkgIHpzdHJpcChwYXRoLCZscGF0aCk7Ci0JCQkgIGlmICgh bHBhdGgpCi0JCQkgICAgbHBhdGggPSAiIjsKLQkJCSAgaWYgKCEqbHBhdGgpCi0JCQkgICAgbHBh dGggPSAiaW5kZXguaHRtbCI7Ci0JCSAgICAgIH0KLQkJICB9Ci0gICAgICAgICAgICAgICAgICBp ZiAoKnBhdGggIT0gJy8nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgY2hhciAqIHAgPSAoY2hh ciAqKSBtYWxsb2Moc3RybGVuKHBhdGgpKzIpOwotICAgICAgICAgICAgICAgICAgICAgIGlmICgh cCkgZmF0YWwoIj9NZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxuIik7Ci0gICAgICAgICAgICAgICAg ICAgICAgKnAgPSAnLyc7Ci0gICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZwWzFdLHBhdGgp OyAgICAgIC8qIHNhZmUgKi8KLSAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gcDsKLSAgICAg ICAgICAgICAgICAgICAgICBwY3B5ID0gMTsKLSAgICAgICAgICAgICAgICAgIH0KLQkJICBzd2l0 Y2ggKGh0dHBfYWN0aW9uKSB7Ci0JCSAgICBjYXNlIEhUVFBfR0VUOgotCQkgICAgICB4ID0gaHR0 cF9nZXQoYWdlbnQsTlVMTCx1c2VyLHBzd2QsMCxscGF0aCxwYXRoLDApOwotCQkgICAgICBicmVh azsKLQkJICAgICAgCi0JCSAgICBjYXNlIEhUVFBfUFVUOgotCQkgICAgICB4ID0gaHR0cF9wdXQo YWdlbnQsTlVMTCwidGV4dC9IVE1MIiwKLQkJCQkgICB1c2VyLHBzd2QsMCxscGF0aCxwYXRoLE5V TEwsMCk7Ci0JCSAgICAgIGJyZWFrOwotCi0JCSAgICBjYXNlIEhUVFBfSEVEOgotCQkgICAgICB4 ID0gaHR0cF9oZWFkKGFnZW50LE5VTEwsdXNlcixwc3dkLDAsbHBhdGgscGF0aCwwKTsKLQkJICAg ICAgYnJlYWs7Ci0JCSAgfQotCQkgIGRlYnVnKEYxMDEsImNtZGxpbmUgaHR0cCByZXN1bHQiLCIi LHgpOwotICAgICAgICAgICAgICAgICAgeCA9IChodHRwX2Nsb3NlKCkgPT0gMCk7Ci0gICAgICAg ICAgICAgICAgICBpZiAocGNweSkgZnJlZShwYXRoKTsKLSAgICAgICAgICAgICAgICAgIGRvZXhp dCh4ID8gR09PRF9FWElUIDogQkFEX0VYSVQsIC0xKTsKLQkgICAgICB9Ci0JICAgICAgcmV0dXJu KDApOwotCSAgfQotICAgIH0gZWxzZQotI2VuZGlmIC8qIE5PSFRUUCAqLwotI2lmZGVmIE5FV0ZU UAotICAgICAgaWYgKGhvd2NhbGxlZCA9PSBJX0FNX0ZUUCkgewkvKiBJZiBJIHdhcyBjYWxsZWQg YXMgRlRQLi4uICovCi0JICBkZWJ1ZyhGMTAwLCJmdHAgcGVyc29uYWxpdHkiLCIiLDApOwotI2lm ZGVmIENLX1VSTAotCSAgaWYgKGhhdmV1cmwpCi0gICAgICAgICAgICBkb2Z0cGFyZygnVScpOwot CSAgZWxzZSAKLSNlbmRpZiAvKiBDS19VUkwgKi8KLQkgICAgewotCQl3aGlsZSAoLS14YXJnYyA+ IDApIHsJLyogR28gdGhyb3VnaCBjb21tYW5kIGxpbmUgd29yZHMgKi8KLQkJICAgIHhhcmd2Kys7 Ci0JCSAgICBkZWJ1ZyhGMTExLCJjbWRsaW4gZnRwIHhhcmd2IiwqeGFyZ3YseGFyZ2MpOwotCQkg ICAgaWYgKCoqeGFyZ3YgPT0gJy0nKSB7IC8qIEdvdCBhbiBvcHRpb24gKi8KLQkJCWludCB4eDsK LQkJCXggPSAqKCp4YXJndisxKTsgLyogR2V0IHRoZSBvcHRpb24gbGV0dGVyICovCi0JCQl4eCA9 IGRvZnRwYXJnKHgpOwotCQkJaWYgKHh4IDwgMCkgewotCQkJICAgIGlmICh3aGF0ID09IFdfQ09N TUFORCkKLQkJCSAgICAgIHJldHVybigwKTsKLQkJCSAgICBlbHNlCi0JCQkgICAgICBkb2V4aXQo QkFEX0VYSVQsMSk7Ci0JCQl9Ci0JCSAgICB9IGVsc2UgewkJLyogTm8gZGFzaCAtIG11c3QgYmUg aG9zdG5hbWUgKi8KLQkJCW1ha2VzdHIoJmZ0cF9ob3N0LCp4YXJndik7Ci0JCQlpZiAoeGFyZ2Mg PiAxKSB7Ci0JCQkgICAgcG9ydCA9ICooeGFyZ3YrMSk7Ci0JCQkgICAgaWYgKHBvcnQpIGlmICgq cG9ydCA9PSAnLScgfHwgISpwb3J0KQotCQkJICAgICAgcG9ydCA9IE5VTEw7Ci0JCQkgICAgaWYg KHBvcnQpIHsKLQkJCQl4YXJndisrOwotCQkJCXhhcmdjLS07Ci0JCQkgICAgfQotCQkJfQotCQkJ ZGVidWcoRjExMCwiY21kbGluIGZ0cCBob3N0IixmdHBfaG9zdCwwKTsKLQkJCWRlYnVnKEYxMTAs ImNtZGxpbiBmdHAgcG9ydCIscG9ydCwwKTsKLQkJICAgIH0KLQkJfSAvKiB3aGlsZSAqLwotCSAg ICB9IC8qIGlmIChoYXZldXJsKSAqLwotCi0JICBpZiAoZnRwX2hvc3QpIHsKLQkgICAgICBpbnQg eHg7Ci0jaWZkZWYgTk9ESUFMCi0JICAgICAgeHggPSB4eF9mdHAoZnRwX2hvc3QscG9ydCk7Ci0J ICAgICAgaWYgKHh4IDwgMCAmJiAoaGF2ZXVybCB8fCBmdHBfY21kbGluID4gMSkpIGRvZXhpdChC QURfRVhJVCwtMSk7Ci0jZWxzZQotI2lmZGVmIE5PSUNQCi0JICAgICAgeHggPSB4eF9mdHAoZnRw X2hvc3QscG9ydCk7Ci0JICAgICAgaWYgKHh4IDwgMCAmJiAoaGF2ZXVybCB8fCBmdHBfY21kbGlu ID4gMSkpIGRvZXhpdChCQURfRVhJVCwtMSk7Ci0jZWxzZQotCSAgICAgIGlmICgqZnRwX2hvc3Qg PT0gJz0nKSB7CS8qIFNraXAgZGlyZWN0b3J5IGxvb2t1cCAqLwotCQkgIHh4ID0geHhfZnRwKCZm dHBfaG9zdFsxXSxwb3J0KTsKLQkJICBpZiAoeHggPCAwICYmIChoYXZldXJsIHx8IGZ0cF9jbWRs aW4gPiAxKSkKLQkJICAgIGRvZXhpdChCQURfRVhJVCwtMSk7Ci0JICAgICAgfSBlbHNlIHsJCQkv KiBXYW50IGxvb2t1cCAqLwotCQkgIGludCBpOwotCQkgIG5oY291bnQgPSAwOwkJLyogQ2hlY2sg bmV0d29yayBkaXJlY3RvcnkgKi8KLQkJICBkZWJ1ZyhGMTAxLCJjbWRsaW4gbm5ldGRpciIsIiIs bm5ldGRpcik7Ci0JCSAgaWYgKG5uZXRkaXIgPiAwKQkvKiBJZiB0aGVyZSBpcyBhIGRpcmVjdG9y eS4uLiAqLwotCQkgICAgbHVuZXQoZnRwX2hvc3QpOwkvKiBMb29rIHVwIHRoZSBuYW1lICovCi0J CSAgZWxzZQkJCS8qIElmIG5vIGRpcmVjdG9yeSAqLwotCQkgICAgbmhjb3VudCA9IDA7CS8qIHdl IGRpZG4ndCBmaW5kIGFueXRoaW5nIHRoZXJlICovCi0jaWZkZWYgREVCVUcKLQkJICBpZiAoZGVi bG9nKSB7Ci0JCSAgICAgIGRlYnVnKEYxMDEsImNtZGxpbiBsdW5ldCBuaGNvdW50IiwiIixuaGNv dW50KTsKLQkJICAgICAgaWYgKG5oY291bnQgPiAwKSB7Ci0JCQkgIGRlYnVnKEYxMTAsImNtZGxp biBsdW5ldCBuaF9wWzBdIixuaF9wWzBdLDApOwotCQkJICBkZWJ1ZyhGMTEwLCJjbWRsaW4gbHVu ZXQgbmhfcDJbMF0iLG5oX3AyWzBdLDApOwotCQkJICBkZWJ1ZyhGMTEwLCJjbWRsaW4gbHVuZXQg bmhfcHhbMF1bMF0iLAotCQkJCW5oX3B4WzBdWzBdLDApOwotCQkgICAgICB9Ci0JCSAgfQotI2Vu ZGlmIC8qIERFQlVHICovCi0JCSAgaWYgKG5oY291bnQgPT0gMCkgewotCQkgICAgICB4eCA9IHh4 X2Z0cChmdHBfaG9zdCxwb3J0KTsKLQkJICAgICAgaWYgKHh4IDwgMCAmJiAoaGF2ZXVybCB8fCBm dHBfY21kbGluID4gMSkpCi0JCQlkb2V4aXQoQkFEX0VYSVQsLTEpOwotCQkgIH0gZWxzZSB7Ci0J CSAgICAgIGZvciAoaSA9IDA7IGkgPCBuaGNvdW50OyBpKyspIHsKLQkJCSAgaWYgKGNrc3RyY21w KG5oX3AyW2ldLCJ0Y3AvaXAiLDYsMCkpCi0JCQkgICAgY29udGludWU7Ci0JCQkgIG1ha2VzdHIo JmZ0cF9ob3N0LG5oX3BbaV0pOwotCQkJICBkZWJ1ZyhGMTEwLCJjbWRsaW4gY2FsbGluZyB4eF9m dHAiLGZ0cF9ob3N0LDApOwotCQkJICBpZiAoIXF1aWV0KQotCQkJICAgIHByaW50ZigiVHJ5aW5n ICVzLi4uXG4iLGZ0cF9ob3N0KTsKLQkJCSAgaWYgKHh4X2Z0cChmdHBfaG9zdCxwb3J0KSA+IC0x KQotCQkJICAgIGJyZWFrOwotCQkgICAgICB9Ci0JCSAgfQotCSAgICAgIH0KLSNlbmRpZiAvKiBO T0RJQUwgKi8KLSNlbmRpZiAvKiBOT0lDUCAqLwotCSAgICAgIGlmICghZnRwaXNjb25uZWN0ZWQo KSkKLQkJZG9leGl0KEJBRF9FWElULC0xKTsKLQkgIH0KLQkgIHJldHVybigwKTsKLSAgICAgIH0K LSNlbmRpZiAvKiBORVdGVFAgKi8KLQotI2lmZGVmIFROQ09ERQotICAgIGlmIChob3djYWxsZWQg PT0gSV9BTV9URUxORVQpIHsgICAgIC8qIElmIEkgd2FzIGNhbGxlZCBhcyBUZWxuZXQuLi4gKi8K LQotICAgICAgICB3aGlsZSAoLS14YXJnYyA+IDApIHsJCS8qIEdvIHRocm91Z2ggY29tbWFuZCBs aW5lIHdvcmRzICovCi0gICAgICAgICAgICB4YXJndisrOwotICAgICAgICAgICAgZGVidWcoRjEx MSwiY21kbGluIHRlbG5ldCB4YXJndiIsKnhhcmd2LHhhcmdjKTsKLSAgICAgICAgICAgIGlmICgq Knhhcmd2ID09ICc9JykKLQkgICAgICByZXR1cm4oMCk7Ci0gICAgICAgICAgICBpZiAoIXN0cmNt cCgqeGFyZ3YsIi0tIikpCS8qIGdldG9wdCgpIGNvbmZvcm1hbmNlICovCi0JICAgICAgcmV0dXJu KDApOwotI2lmZGVmIFZNUwotICAgICAgICAgICAgZWxzZSBpZiAoKip4YXJndiA9PSAnLycpCi0J ICAgICAgY29udGludWU7Ci0jZW5kaWYgLyogVk1TICovCi0gICAgICAgICAgICBlbHNlIGlmICgq Knhhcmd2ID09ICctJykgewkvKiBHb3QgYW4gb3B0aW9uIChiZWdpbnMgd2l0aCBkYXNoKSAqLwot ICAgICAgICAgICAgICAgIGludCB4eDsKLSAgICAgICAgICAgICAgICB4ID0gKigqeGFyZ3YrMSk7 CS8qIEdldCB0aGUgb3B0aW9uIGxldHRlciAqLwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEs ImNtZGxpbiB0ZWxuZXQgYXJncyAxIiwqeGFyZ3YseGFyZ2MpOwotICAgICAgICAgICAgICAgIHh4 ID0gZG90bmFyZyh4KTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJjbWRsaW4gdGVsbmV0 IGRvYXJnIiwiIix4eCk7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjExMSwiY21kbGluIHRlbG5l dCBhcmdzIDIiLCp4YXJndix4YXJnYyk7Ci0gICAgICAgICAgICAgICAgaWYgKHh4IDwgMCkgewot I2lmbmRlZiBOT0lDUAotICAgICAgICAgICAgICAgICAgICBpZiAod2hhdCA9PSBXX0NPTU1BTkQp Ci0JCSAgICAgIHJldHVybigwKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotI2VuZGlmIC8q IE5PSUNQICovCi0JCSAgICAgIHsKLSNpZmRlZiBPUzIKLQkJCSAgc2xlZXAoMSk7CS8qIEdpdmUg aXQgYSBjaGFuY2UuLi4gKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQkJCSAgZG9leGl0KEJBRF9FWElU LDEpOyAvKiBHbyBoYW5kbGUgb3B0aW9uICovCi0JCSAgICAgIH0KLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICB9IGVsc2UgewkJCS8qIE5vIGRhc2ggbXVzdCBiZSBob3N0bmFtZSAqLwot ICAgICAgICAgICAgICAgIGNrc3RybmNweSh0dG5hbWUsKnhhcmd2LFRUTkFNTEVOKzEpOwotICAg ICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNtZGxpbiB0ZWxuZXQgaG9zdCIsdHRuYW1lLDApOwot Ci0jaWZuZGVmIE5PSUNQCi0jaWZuZGVmIE5PRElBTAotICAgICAgICAgICAgICAgIG5oY291bnQg PSAwOwkJLyogQ2hlY2sgbmV0d29yayBkaXJlY3RvcnkgKi8KLSAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTAxLCJjbWRsaW4gdGVsbmV0IG5uZXRkaXIiLCIiLG5uZXRkaXIpOwotICAgICAgICAgICAg ICAgIGlmIChubmV0ZGlyID4gMCkJLyogSWYgdGhlcmUgaXMgYSBkaXJlY3RvcnkuLi4gKi8KLQkJ ICBsdW5ldCgqeGFyZ3YpOwkvKiBMb29rIHVwIHRoZSBuYW1lICovCi0gICAgICAgICAgICAgICAg ZWxzZQkJCS8qIElmIG5vIGRpcmVjdG9yeSAqLwotCQkgIG5oY291bnQgPSAwOwkJLyogd2UgZGlk bid0IGZpbmQgYW55dGhpbmcgdGhlcmUgKi8KLSNpZmRlZiBERUJVRwotICAgICAgICAgICAgICAg IGlmIChkZWJsb2cpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiY21kbGluIHRl bG5ldCBsdW5ldCBuaGNvdW50IiwiIixuaGNvdW50KTsKLSAgICAgICAgICAgICAgICAgICAgaWYg KG5oY291bnQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJjbWRs aW4gdGVsbmV0IGx1bmV0IG5oX3BbMF0iLG5oX3BbMF0sMCk7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTEwLCJjbWRsaW4gdGVsbmV0IGx1bmV0IG5oX3AyWzBdIixuaF9wMlswXSww KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNtZGxpbiB0ZWxuZXQgbHVu ZXQgbmhfcHhbMF1bMF0iLAotCQkJICAgICAgbmhfcHhbMF1bMF0sMCk7Ci0gICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogREVCVUcgKi8KLSAgICAgICAg ICAgICAgICBpZiAobmhjb3VudCA+IDAgJiYgbmhfcDJbMF0pIC8qIElmIG5ldHdvcmsgdHlwZSBz cGVjaWZpZWQgKi8KLQkJICBpZiAoY2tzdHJjbXAobmhfcDJbMF0sInRjcC9pcCIsNiwwKSkgLyog aXQgbXVzdCBiZSBUQ1AvSVAgKi8KLQkJICAgIG5oY291bnQgPSAwOwotICAgICAgICAgICAgICAg IGlmIChuaGNvdW50ID09IDEpIHsJLyogU3RpbGwgT0ssIHNvIG1ha2Ugc3Vic3RpdHV0aW9uICov Ci0gICAgICAgICAgICAgICAgICAgIGNrc3RybmNweSh0dG5hbWUsbmhfcFswXSxUVE5BTUxFTisx KTsKLSAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY21kbGluIHRlbG5ldCBsdW5ldCBz dWJzdGl0dXRpb24iLHR0bmFtZSwwKTsKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogTk9E SUFMICovCi0jZW5kaWYgLyogTk9JQ1AgKi8KLQotICAgICAgICAgICAgICAgIGlmICgtLXhhcmdj ID4gMCAmJiAhaGF2ZXVybCkgeyAvKiBTZXJ2aWNlIGZyb20gY29tbWFuZCBsaW5lPyAqLwotICAg ICAgICAgICAgICAgICAgICB4YXJndisrOwotICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQo dHRuYW1lLCI6IixUVE5BTUxFTisxKTsKLSAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHR0 bmFtZSwqeGFyZ3YsVFROQU1MRU4rMSk7Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAs ImNtZGxpbiB0ZWxuZXQgaG9zdDIiLHR0bmFtZSwwKTsKLSAgICAgICAgICAgICAgICB9Ci0jaWZu ZGVmIE5PSUNQCi0jaWZuZGVmIE5PRElBTAotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5oY291 bnQpIHsJLyogTm8gLSBob3cgYWJvdXQgaW4gbmV0IGRpcmVjdG9yeT8gKi8KLSAgICAgICAgICAg ICAgICAgICAgaWYgKG5oX3B4WzBdWzBdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBja3N0 cm5jYXQodHRuYW1lLCI6IixUVE5BTUxFTisxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNr c3RybmNhdCh0dG5hbWUsbmhfcHhbMF1bMF0sVFROQU1MRU4rMSk7Ci0gICAgICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyogTk9ESUFMICovCi0jZW5kaWYgLyog Tk9JQ1AgKi8KLSAgICAgICAgICAgICAgICBsb2NhbCA9IDE7CQkvKiBUcnkgdG8gb3BlbiB0aGUg Y29ubmVjdGlvbiAqLwotICAgICAgICAgICAgICAgIG5ldHR5cGUgPSBORVRfVENQQjsKLSAgICAg ICAgICAgICAgICBtZG10eXAgPSAtbmV0dHlwZTsKLSAgICAgICAgICAgICAgICBpZiAodHRvcGVu KHR0bmFtZSwmbG9jYWwsbWRtdHlwLDApIDwgMCkgewotICAgICAgICAgICAgICAgICAgICBYRkFU QUwoImNhbid0IG9wZW4gaG9zdCBjb25uZWN0aW9uIik7Ci0gICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICAgIG5ldHdvcmsgPSAxOwkJLyogSXQncyBvcGVuICovCi0jaWZkZWYgQ0tMT0dE SUFMCi0gICAgICAgICAgICAgICAgZG9sb2duZXQoKTsKLSNlbmRpZiAvKiBDS0xPR0RJQUwgKi8K LSNpZm5kZWYgTk9YRkVSCi0gICAgICAgICAgICAgICAgcmVsaWFibGUgPSAxOwkJLyogSXQncyBy ZWxpYWJsZSAqLwotICAgICAgICAgICAgICAgIHhyZWxpYWJsZSA9IDE7CQkvKiAuLi4gKi8KLSAg ICAgICAgICAgICAgICBzZXRyZWxpYWJsZSA9IDE7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0gICAg ICAgICAgICAgICAgY2ZsZyA9IDE7CQkvKiBDb25uZWN0ICovCi0gICAgICAgICAgICAgICAgc3Rh eWZsZyA9IDE7CQkvKiBTdGF5ICovCi0gICAgICAgICAgICAgICAgdG5fZXhpdCA9IDE7CQkvKiBU ZWxuZXQtbGlrZSBleGl0IGNvbmRpdGlvbiAqLwotICAgICAgICAgICAgICAgIHF1aWV0ID0gMTsK LSAgICAgICAgICAgICAgICBleGl0b25jbG9zZSA9IDE7CS8qIEV4aXQgd2hlbiBjb25uZWN0aW9u IGNsb3NlcyAqLwotI2lmbmRlZiBOT1NQTAotICAgICAgICAgICAgICAgIGlmIChsb2NhbCkgewot ICAgICAgICAgICAgICAgICAgICBpZiAobm1hYykgewkJLyogQW55IG1hY3JvcyBkZWZpbmVkPyAq LwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGs7CQkvKiBZZXMgKi8KLSAgICAgICAgICAg ICAgICAgICAgICAgIGsgPSBtbG9vayhtYWN0YWIsIm9uX29wZW4iLG5tYWMpOyAvKiBMb29rIHRo aXMgdXAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID49IDApIHsgICAgICAgICAg ICAgICAgICAgICAvKiBJZiBmb3VuZCwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoZG9kbyhrLHR0bmFtZSwwKSA+IC0xKSAgICAvKiBzZXQgaXQgdXAsICovCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcigxKTsgICAgICAgICAgICAgICAgLyogYW5kIGV4 ZWN1dGUgaXQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybigwKTsK LSAgICB9Ci0jZW5kaWYgLyogVE5DT0RFICovCi0jaWZkZWYgUkxPR0NPREUKLSAgICBlbHNlIGlm IChob3djYWxsZWQgPT0gSV9BTV9STE9HSU4pIHsgLyogSWYgSSB3YXMgY2FsbGVkIGFzIFJsb2dp bi4uLiAqLwotICAgICAgICB3aGlsZSAoLS14YXJnYyA+IDApIHsJCS8qIEdvIHRocm91Z2ggY29t bWFuZCBsaW5lIHdvcmRzICovCi0gICAgICAgICAgICB4YXJndisrOwotICAgICAgICAgICAgZGVi dWcoRjExMSwiY21kbGluIHJsb2dpbiB4YXJndiIsKnhhcmd2LHhhcmdjKTsKLSAgICAgICAgICAg IGlmICgqKnhhcmd2ID09ICc9JykKLQkgICAgICByZXR1cm4oMCk7Ci0gICAgICAgICAgICBpZiAo IXN0cmNtcCgqeGFyZ3YsIi0tIikpCS8qIGdldG9wdCgpIGNvbmZvcm1hbmNlICovCi0JICAgICAg cmV0dXJuKDApOwotI2lmZGVmIFZNUwotICAgICAgICAgICAgZWxzZSBpZiAoKip4YXJndiA9PSAn LycpCi0JICAgICAgY29udGludWU7Ci0jZW5kaWYgLyogVk1TICovCi0gICAgICAgICAgICBlbHNl IGlmICgqKnhhcmd2ID09ICctJykgewkvKiBHb3QgYW4gb3B0aW9uIChiZWdpbnMgd2l0aCBkYXNo KSAqLwotICAgICAgICAgICAgICAgIGludCB4eDsKLSAgICAgICAgICAgICAgICB4ID0gKigqeGFy Z3YrMSk7CS8qIEdldCB0aGUgb3B0aW9uIGxldHRlciAqLwotICAgICAgICAgICAgICAgIGRlYnVn KEYxMTEsImNtZGxpbiBybG9naW4gYXJncyAxIiwqeGFyZ3YseGFyZ2MpOwotICAgICAgICAgICAg ICAgIHh4ID0gZG9ybGdhcmcoeCk7Ci0gICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiY21kbGlu IHJsb2dpbiBkb2FyZyIsIiIseHgpOwotICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImNtZGxp biBybG9naW4gYXJncyAyIiwqeGFyZ3YseGFyZ2MpOwotICAgICAgICAgICAgICAgIGlmICh4eCA8 IDApIHsKLSNpZm5kZWYgTk9JQ1AKLSAgICAgICAgICAgICAgICAgICAgaWYgKHdoYXQgPT0gV19D T01NQU5EKQotCQkgICAgICByZXR1cm4oMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSNl bmRpZiAvKiBOT0lDUCAqLwotCQkgICAgICB7Ci0jaWZkZWYgT1MyCi0JCQkgIHNsZWVwKDEpOwkv KiBHaXZlIGl0IGEgY2hhbmNlLi4uICovCi0jZW5kaWYgLyogT1MyICovCi0JCQkgIGRvZXhpdChC QURfRVhJVCwxKTsgLyogR28gaGFuZGxlIG9wdGlvbiAqLwotCQkgICAgICB9Ci0gICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsJCQkvKiBObyBkYXNoIG11c3QgYmUgaG9zdG5h bWUgKi8KLSAgICAgICAgICAgICAgICBja3N0cm5jcHkodHRuYW1lLCp4YXJndixUVE5BTUxFTisx KTsKLSAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJjbWRsaW4gcmxvZ2luIGhvc3QiLHR0bmFt ZSwwKTsKLQotI2lmbmRlZiBOT0lDUAotI2lmbmRlZiBOT0RJQUwKLSAgICAgICAgICAgICAgICBu aGNvdW50ID0gMDsJCS8qIENoZWNrIG5ldHdvcmsgZGlyZWN0b3J5ICovCi0gICAgICAgICAgICAg ICAgZGVidWcoRjEwMSwiY21kbGluIHJsb2dpbiBubmV0ZGlyIiwiIixubmV0ZGlyKTsKLSAgICAg ICAgICAgICAgICBpZiAobm5ldGRpciA+IDApCS8qIElmIHRoZXJlIGlzIGEgZGlyZWN0b3J5Li4u ICovCi0JCSAgbHVuZXQoKnhhcmd2KTsJLyogTG9vayB1cCB0aGUgbmFtZSAqLwotICAgICAgICAg ICAgICAgIGVsc2UJCQkvKiBJZiBubyBkaXJlY3RvcnkgKi8KLQkJICBuaGNvdW50ID0gMDsJCS8q IHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nIHRoZXJlICovCi0jaWZkZWYgREVCVUcKLSAgICAgICAg ICAgICAgICBpZiAoZGVibG9nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImNt ZGxpbiBybG9naW4gbHVuZXQgbmhjb3VudCIsIiIsbmhjb3VudCk7Ci0gICAgICAgICAgICAgICAg ICAgIGlmIChuaGNvdW50ID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEx MCwiY21kbGluIHJsb2dpbiBsdW5ldCBuaF9wWzBdIixuaF9wWzBdLDApOwotICAgICAgICAgICAg ICAgICAgICAgICAgZGVidWcoRjExMCwiY21kbGluIHJsb2dpbiBsdW5ldCBuaF9wMlswXSIsbmhf cDJbMF0sMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJjbWRsaW4gcmxv Z2luIGx1bmV0IG5oX3B4WzBdWzBdIiwKLQkJCSAgICAgIG5oX3B4WzBdWzBdLDApOwotICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0g ICAgICAgICAgICAgICAgaWYgKG5oY291bnQgPiAwICYmIG5oX3AyWzBdKSAvKiBJZiBuZXR3b3Jr IHR5cGUgc3BlY2lmaWVkICovCi0JCSAgaWYgKGNrc3RyY21wKG5oX3AyWzBdLCJ0Y3AvaXAiLDYs MCkpIC8qIGl0IG11c3QgYmUgVENQL0lQICovCi0JCSAgICBuaGNvdW50ID0gMDsKLSAgICAgICAg ICAgICAgICBpZiAobmhjb3VudCA9PSAxKSB7CS8qIFN0aWxsIE9LLCBzbyBtYWtlIHN1YnN0aXR1 dGlvbiAqLwotICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkodHRuYW1lLG5oX3BbMF0sVFRO QU1MRU4rMSk7Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNtZGxpbiBybG9naW4g bHVuZXQgc3Vic3RpdHV0aW9uIix0dG5hbWUsMCk7Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlm IC8qIE5PRElBTCAqLwotI2VuZGlmIC8qIE5PSUNQICovCi0KLSAgICAgICAgICAgICAgICBpZiAo IWhhdmV1cmwpIHsgLyogU2VydmljZSBmcm9tIGNvbW1hbmQgbGluZT8gKi8KLSAgICAgICAgICAg ICAgICAgICAgY2tzdHJuY2F0KHR0bmFtZSwiOmxvZ2luIixUVE5BTUxFTisxKTsKLSAgICAgICAg ICAgICAgICAgICAgZGVidWcoRjExMCwiY21kbGluIHJsb2dpbiBob3N0MiIsdHRuYW1lLDApOwot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBsb2NhbCA9IDE7CQkvKiBUcnkgdG8g b3BlbiB0aGUgY29ubmVjdGlvbiAqLwotICAgICAgICAgICAgICAgIG5ldHR5cGUgPSBORVRfVENQ QjsKLSAgICAgICAgICAgICAgICBtZG10eXAgPSAtbmV0dHlwZTsKLSAgICAgICAgICAgICAgICBp ZiAodHRvcGVuKHR0bmFtZSwmbG9jYWwsbWRtdHlwLDApIDwgMCkgewotICAgICAgICAgICAgICAg ICAgICBYRkFUQUwoImNhbid0IG9wZW4gaG9zdCBjb25uZWN0aW9uIik7Ci0gICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICAgIG5ldHdvcmsgPSAxOwkJLyogSXQncyBvcGVuICovCi0jaWZk ZWYgQ0tMT0dESUFMCi0gICAgICAgICAgICAgICAgZG9sb2duZXQoKTsKLSNlbmRpZiAvKiBDS0xP R0RJQUwgKi8KLSNpZm5kZWYgTk9YRkVSCi0gICAgICAgICAgICAgICAgcmVsaWFibGUgPSAxOwkJ LyogSXQncyByZWxpYWJsZSAqLwotICAgICAgICAgICAgICAgIHhyZWxpYWJsZSA9IDE7CQkvKiAu Li4gKi8KLSAgICAgICAgICAgICAgICBzZXRyZWxpYWJsZSA9IDE7Ci0jZW5kaWYgLyogTk9YRkVS ICovCi0gICAgICAgICAgICAgICAgY2ZsZyA9IDE7CQkvKiBDb25uZWN0ICovCi0gICAgICAgICAg ICAgICAgc3RheWZsZyA9IDE7CQkvKiBTdGF5ICovCi0gICAgICAgICAgICAgICAgdG5fZXhpdCA9 IDE7CQkvKiBUZWxuZXQtbGlrZSBleGl0IGNvbmRpdGlvbiAqLwotICAgICAgICAgICAgICAgIHF1 aWV0ID0gMTsKLSAgICAgICAgICAgICAgICBleGl0b25jbG9zZSA9IDE7CS8qIEV4aXQgd2hlbiBj b25uZWN0aW9uIGNsb3NlcyAqLwotI2lmbmRlZiBOT1NQTAotICAgICAgICAgICAgICAgIGlmIChs b2NhbCkgewotICAgICAgICAgICAgICAgICAgICBpZiAobm1hYykgewkJLyogQW55IG1hY3JvcyBk ZWZpbmVkPyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGs7CQkvKiBZZXMgKi8KLSAg ICAgICAgICAgICAgICAgICAgICAgIGsgPSBtbG9vayhtYWN0YWIsIm9uX29wZW4iLG5tYWMpOyAv KiBMb29rIHRoaXMgdXAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID49IDApIHsg ICAgICAgICAgICAgICAgICAgICAvKiBJZiBmb3VuZCwgKi8KLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoZG9kbyhrLHR0bmFtZSwwKSA+IC0xKSAgICAvKiBzZXQgaXQgdXAsICovCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcigxKTsgICAgICAgICAgICAgICAg LyogYW5kIGV4ZWN1dGUgaXQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBOT1NQTCAqLwotICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJl dHVybigwKTsKLSAgICB9Ci0jZW5kaWYgLyogUkxPR0NPREUgKi8KLSNlbmRpZiAvKiBUQ1BTT0NL RVQgKi8KLQotI2lmZGVmIFNTSEJVSUxUSU4KLSAgICAgIGlmIChob3djYWxsZWQgPT0gSV9BTV9T U0gpIHsJLyogSWYgSSB3YXMgY2FsbGVkIGFzIFNTSC4uLiAqLwotICAgICAgICAgIGV4dGVybiBj aGFyICogc3NoX2hzdCwgKiBzc2hfY21kLCAqIHNzaF9wcnQ7Ci0JICBkZWJ1ZyhGMTAwLCJzc2gg cGVyc29uYWxpdHkiLCIiLDApOwotI2lmZGVmIENLX1VSTAotCSAgaWYgKGhhdmV1cmwpIHsKLSAg ICAgICAgICAgICAgbWFrZXN0cigmc3NoX2hzdCxnX3VybC5ob3MpOwotICAgICAgICAgICAgICBt YWtlc3RyKCZzc2hfcHJ0LGdfdXJsLnN2Yyk7Ci0JICAgICAgY2tzdHJuY3B5KHR0bmFtZSxzc2hf aHN0LFRUTkFNTEVOKzEpOwotICAgICAgICAgICAgICBja3N0cm5jYXQodHRuYW1lLCI6IixUVE5B TUxFTisxKTsKLSAgICAgICAgICAgICAgY2tzdHJuY2F0KHR0bmFtZSxzc2hfcHJ0LFRUTkFNTEVO KzEpOwotICAgICAgICAgIH0KLQkgIGVsc2UgCi0jZW5kaWYgLyogQ0tfVVJMICovCi0JICB7Ci0g ICAgICAgICAgICAgIHdoaWxlICgtLXhhcmdjID4gMCkgewkvKiBHbyB0aHJvdWdoIGNvbW1hbmQg bGluZSB3b3JkcyAqLwotICAgICAgICAgICAgICAgICAgeGFyZ3YrKzsKLSAgICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTEsImNtZGxpbiBzc2ggeGFyZ3YiLCp4YXJndix4YXJnYyk7Ci0gICAgICAg ICAgICAgICAgICBpZiAoKip4YXJndiA9PSAnPScpCi0gICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuKDApOwotICAgICAgICAgICAgICAgICAgaWYgKCFzdHJjbXAoKnhhcmd2LCItLSIpKSAvKiBn ZXRvcHQoKSBjb25mb3JtYW5jZSAqLwotICAgICAgICAgICAgICAgICAgICAgIHJldHVybigwKTsK LSNpZmRlZiBWTVMKLSAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCoqeGFyZ3YgPT0gJy8nKQot ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotI2VuZGlmIC8qIFZNUyAqLwotCQkgIC8q IEdvdCBhbiBvcHRpb24gKGJlZ2lucyB3aXRoIGRhc2gpICovCi0gICAgICAgICAgICAgICAgICBl bHNlIGlmICgqKnhhcmd2ID09ICctJykgewotICAgICAgICAgICAgICAgICAgICAgIGludCB4eDsK LSAgICAgICAgICAgICAgICAgICAgICB4ID0gKigqeGFyZ3YrMSk7CS8qIEdldCB0aGUgb3B0aW9u IGxldHRlciAqLwotICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImNtZGxpbiBhcmdz IDEiLCp4YXJndix4YXJnYyk7Ci0gICAgICAgICAgICAgICAgICAgICAgeHggPSBkb3NzaGFyZyh4 KTsKLSAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJjbWRsaW4gZG9hcmciLCIiLHh4 KTsKLSAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJjbWRsaW4gYXJncyAyIiwqeGFy Z3YseGFyZ2MpOwotICAgICAgICAgICAgICAgICAgICAgIGlmICh4eCA8IDApIHsKLSNpZm5kZWYg Tk9JQ1AKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdoYXQgPT0gV19DT01NQU5EKQot CQkJICAgIHJldHVybigwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotI2VuZGlm IC8qIE5PSUNQICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSNpZmRlZiBPUzIKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsZWVwKDEpOwkvKiBHaXZlIGl0IGEgY2hhbmNl Li4uICovCi0jZW5kaWYgLyogT1MyICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk b2V4aXQoQkFEX0VYSVQsMSk7IC8qIEdvIGhhbmRsZSBvcHRpb24gKi8KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg IH0gZWxzZSB7CQkJLyogTm8gZGFzaCBtdXN0IGJlIGhvc3RuYW1lICovCi0gICAgICAgICAgICAg ICAgICAgICAgY2tzdHJuY3B5KHR0bmFtZSwqeGFyZ3YsVFROQU1MRU4rMSk7Ci0gICAgICAgICAg ICAgICAgICAgICAgbWFrZXN0cigmc3NoX2hzdCx0dG5hbWUpOwotICAgICAgICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTAsImNtZGxpbiBzc2ggaG9zdCIsdHRuYW1lLDApOwotI2lmbmRlZiBOT0lD UAotI2lmbmRlZiBOT0RJQUwKLSAgICAgICAgICAgICAgICAgICAgICBuaGNvdW50ID0gMDsJCS8q IENoZWNrIG5ldHdvcmsgZGlyZWN0b3J5ICovCi0gICAgICAgICAgICAgICAgICAgICAgZGVidWco RjEwMSwiY21kbGluIG5uZXRkaXIiLCIiLG5uZXRkaXIpOwotICAgICAgICAgICAgICAgICAgICAg IGlmIChubmV0ZGlyID4gMCkJLyogSWYgdGhlcmUgaXMgYSBkaXJlY3RvcnkuLi4gKi8KLQkJCWx1 bmV0KCp4YXJndik7CS8qIExvb2sgdXAgdGhlIG5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAg ICBlbHNlCQkvKiBJZiBubyBkaXJlY3RvcnkgKi8KLQkJCW5oY291bnQgPSAwOwkvKiB3ZSBkaWRu J3QgZmluZCBhbnl0aGluZyB0aGVyZSAqLwotI2lmZGVmIERFQlVHCi0gICAgICAgICAgICAgICAg ICAgICAgaWYgKGRlYmxvZykgewotICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAx LCJjbWRsaW4gbHVuZXQgbmhjb3VudCIsIiIsbmhjb3VudCk7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChuaGNvdW50ID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZGVidWcoRjExMCwiY21kbGluIGx1bmV0IG5oX3BbMF0iLG5oX3BbMF0sMCk7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJjbWRsaW4gbHVuZXQgbmhfcDJbMF0iLG5o X3AyWzBdLDApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwKLQkJ CQkgICAgImNtZGxpbiBsdW5ldCBuaF9weFswXVswXSIsbmhfcHhbMF1bMF0sMCk7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICB9Ci0jZW5kaWYgLyog REVCVUcgKi8KLQkJICAgICAgLyogSWYgbmV0d29yayB0eXBlIHNwZWNpZmllZCAqLwotCQkgICAg ICAvKiBpdCBtdXN0IGJlIFRDUC9JUCAqLwotICAgICAgICAgICAgICAgICAgICAgIGlmIChuaGNv dW50ID4gMCAmJiBuaF9wMlswXSkKLQkJCWlmIChja3N0cmNtcChuaF9wMlswXSwidGNwL2lwIiw2 LDApKQotCQkJICBuaGNvdW50ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICBpZiAobmhjb3Vu dCA9PSAxKSB7IC8qIFN0aWxsIE9LLCBzbyBtYWtlIHN1YnN0aXR1dGlvbiAqLwotICAgICAgICAg ICAgICAgICAgICAgICAgICBja3N0cm5jcHkodHRuYW1lLG5oX3BbMF0sVFROQU1MRU4rMSk7Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF9oc3QsdHRuYW1lKTsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY21kbGluIGx1bmV0IHN1YnN0aXR1dGlv biIsdHRuYW1lLDApOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvKiBOT0RJQUwg Ki8KLSNlbmRpZiAvKiBOT0lDUCAqLwotCQkgICAgICAvKiBTZXJ2aWNlIGZyb20gY29tbWFuZCBs aW5lPyAqLwotICAgICAgICAgICAgICAgICAgICAgIGlmICgtLXhhcmdjID4gMCAmJiAhaGF2ZXVy bCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICB4YXJndisrOwotICAgICAgICAgICAgICAg ICAgICAgICAgICBja3N0cm5jYXQodHRuYW1lLCI6IixUVE5BTUxFTisxKTsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgY2tzdHJuY2F0KHR0bmFtZSwqeGFyZ3YsVFROQU1MRU4rMSk7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF9wcnQsKnhhcmd2KTsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY21kbGluIHRlbG5ldCBob3N0MiIsdHRuYW1l LDApOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSNpZmRlZiBDT01NRU5UCi0gICAgICAgICAg ICAgICAgICAgICAgLyogRG8gbm90IHN1YnN0aXR1dGUgbmV0IGRpciBzZXJ2aWNlIGZvciBzc2gg cG9ydCAqLwotI2lmbmRlZiBOT0lDUAotI2lmbmRlZiBOT0RJQUwKLQkJICAgICAgLyogTm8gLSBo b3cgYWJvdXQgaW4gbmV0IGRpcmVjdG9yeT8gKi8KLSAgICAgICAgICAgICAgICAgICAgICBlbHNl IGlmIChuaGNvdW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuaF9weFswXVsw XSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHR0bmFtZSwiOiIs VFROQU1MRU4rMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQodHRu YW1lLG5oX3B4WzBdWzBdLFRUTkFNTEVOKzEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbWFrZXN0cigmc3NoX3BydCxuaF9weFswXVswXSk7Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSNlbmRpZiAvKiBOT0RJQUwgKi8KLSNl bmRpZiAvKiBOT0lDUCAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAg ICAgIH0KLSAgICAgICAgICBsb2NhbCA9IDE7CQkJLyogVHJ5IHRvIG9wZW4gdGhlIGNvbm5lY3Rp b24gKi8KLSAgICAgICAgICBuZXR0eXBlID0gTkVUX1NTSDsKLSAgICAgICAgICBtZG10eXAgPSAt bmV0dHlwZTsKLSAgICAgICAgICBpZiAodHRvcGVuKHR0bmFtZSwmbG9jYWwsbWRtdHlwLDApIDwg MCkgewotICAgICAgICAgICAgICBYRkFUQUwoImNhbid0IG9wZW4gaG9zdCBjb25uZWN0aW9uIik7 Ci0gICAgICAgICAgfQotICAgICAgICAgIG5ldHdvcmsgPSAxOwkJCS8qIEl0J3Mgb3BlbiAqLwot I2lmZGVmIENLTE9HRElBTAotICAgICAgICAgIGRvbG9nbmV0KCk7Ci0jZW5kaWYgLyogQ0tMT0dE SUFMICovCi0jaWZuZGVmIE5PWEZFUgotICAgICAgICAgIHJlbGlhYmxlID0gMTsJCQkvKiBJdCdz IHJlbGlhYmxlICovCi0gICAgICAgICAgeHJlbGlhYmxlID0gMTsJCS8qIC4uLiAqLwotICAgICAg ICAgIHNldHJlbGlhYmxlID0gMTsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSAgICAgICAgICBjZmxn ID0gMTsJCQkvKiBDb25uZWN0ICovCi0gICAgICAgICAgc3RheWZsZyA9IDE7CQkJLyogU3RheSAq LwotICAgICAgICAgIHRuX2V4aXQgPSAxOwkJCS8qIFRlbG5ldC1saWtlIGV4aXQgY29uZGl0aW9u ICovCi0gICAgICAgICAgcXVpZXQgPSAxOwotICAgICAgICAgIGV4aXRvbmNsb3NlID0gMTsJCS8q IEV4aXQgd2hlbiBjb25uZWN0aW9uIGNsb3NlcyAqLwotI2lmbmRlZiBOT1NQTAotICAgICAgICAg IGlmIChsb2NhbCkgewotICAgICAgICAgICAgICBpZiAobm1hYykgewkJLyogQW55IG1hY3JvcyBk ZWZpbmVkPyAqLwotICAgICAgICAgICAgICAgICAgaW50IGs7CQkvKiBZZXMgKi8KLSAgICAgICAg ICAgICAgICAgIGsgPSBtbG9vayhtYWN0YWIsIm9uX29wZW4iLG5tYWMpOyAvKiBMb29rIHRoaXMg dXAgKi8KLSAgICAgICAgICAgICAgICAgIGlmIChrID49IDApIHsgICAgICAgICAgICAgICAgICAg ICAvKiBJZiBmb3VuZCwgKi8KLSAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9kbyhrLHR0bmFt ZSwwKSA+IC0xKSAgICAvKiBzZXQgaXQgdXAsICovCi0gICAgICAgICAgICAgICAgICAgICAgICAg IHBhcnNlcigxKTsgICAgICAgICAgICAgICAgLyogYW5kIGV4ZWN1dGUgaXQgKi8KLSAgICAgICAg ICAgICAgICAgIH0gCi0gICAgICAgICAgICAgIH0gICAgIAotICAgICAgICAgIH0KLSNlbmRpZiAv KiBOT1NQTCAqLwotCSAgcmV0dXJuKDApOwotICAgICAgfQotI2VuZGlmIC8qIFNTSEJVSUxUSU4g Ki8KLQotICAgIGlmIChob3djYWxsZWQgPT0gSV9BTV9TU0hTVUIpCi0gICAgICByZXR1cm4oMCk7 Ci0KLS8qCi0gIEZyb20gaGVyZSBkb3duOiBXZSB3ZXJlIGNhbGxlZCBhcyAia2VybWl0IiBvciAi aWtzZCIuCi0KLSAgSWYgd2Ugd2VyZSBzdGFydGVkIGRpcmVjdGx5IGZyb20gYSBLZXJtaXQgc2Ny aXB0IGZpbGUsCi0gIHRoZSBmaWxlbmFtZSBvZiB0aGUgc2NyaXB0IGlzIGluIGFyZ3ZbMV0sIHNv IHNraXAgcGFzdCBpdC4KLSovCi0gICAgaWYgKHhhcmdjID4gMSkgewotICAgICAgICBpbnQgbiA9 IDE7Ci0gICAgICAgIGlmICgqeGFyZ3ZbMV0gIT0gJy0nKSB7Ci0KLSNpZmRlZiBLRVJCQU5HCi0g ICAgICAgICAgICAvKiBJZiB3ZSB3ZXJlIHN0YXJ0ZWQgd2l0aCBhIEtlcmJhbmcgc2NyaXB0LCB0 aGUgc2NyaXB0ICovCi0gICAgICAgICAgICAvKiBhcmd1bWVudHMgd2VyZSBhbHJlYWR5IHBpY2tl ZCB1cCBpbiBwcmVzY2FuIC8gY21kaW5pKCkgKi8KLSAgICAgICAgICAgIC8qIGFuZCB0aGVyZSBp cyBub3RoaW5nIGhlcmUgZm9yIHVzIGFueXdheS4gKi8KLSAgICAgICAgICAgIGlmICghc3RyY21w KHhhcmd2WzFdLCIrIikpCi0gICAgICAgICAgICAgIHJldHVybigwKTsKLSNlbmRpZiAvKiBLRVJC QU5HICovCi0KLSAgICAgICAgICAgIGlmIChjZmlsZWYpIHsgICAgICAgICAgICAgICAvKiBDb21t YW5kIGZpbGUgZm91bmQgaW4gcHJlc2NhbigpICovCi0gICAgICAgICAgICAgICAgeGFyZ2MgLT0g bjsgICAgICAgICAgICAgLyogU2tpcCBwYXN0IGl0ICovCi0gICAgICAgICAgICAgICAgeGFyZ3Yg Kz0gbjsKLSAgICAgICAgICAgICAgICBjZmlsZWYgPSAwOwotICAgICAgICAgICAgICAgIGRlYnVn KEYxMDEsImNtZGxpbiBjZmlsZWYgc2V0IHRvIDAiLCIiLGNmaWxlZik7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgIH0KLSAgICB9Ci0vKgotICBSZWd1bGFyIFVuaXgtc3R5bGUgY29tbWFuZCBsaW5l IHBhcnNlciwgbW9zdGx5IGNvbmZvcm1pbmcgd2l0aCAnQSBQcm9wb3NlZAotICBDb21tYW5kIFN5 bnRheCBTdGFuZGFyZCBmb3IgVW5peCBTeXN0ZW1zJywgSGVtZW53YXkgJiBBcm1pdGFnZSwgVW5p eC9Xb3JsZCwKLSAgVm9sLjEsIE5vLjMsIDE5ODQuCi0qLwotICAgIHdoaWxlICgtLXhhcmdjID4g MCkgeyAgICAgICAgICAgICAgIC8qIEdvIHRocm91Z2ggY29tbWFuZCBsaW5lIHdvcmRzICovCi0g ICAgICAgIHhhcmd2Kys7Ci0gICAgICAgIGRlYnVnKEYxMTEsImNtZGxpbiB4YXJndiIsKnhhcmd2 LHhhcmdjKTsKLSAgICAgICAgaWYgKCoqeGFyZ3YgPT0gJz0nKQotICAgICAgICAgIHJldHVybigw KTsKLSAgICAgICAgaWYgKCFzdHJjbXAoKnhhcmd2LCItLSIpKSAgICAgICAvKiBnZXRvcHQoKSBj b25mb3JtYW5jZSAqLwotICAgICAgICAgIHJldHVybigwKTsKLSNpZmRlZiBWTVMKLSAgICAgICAg ZWxzZSBpZiAoKip4YXJndiA9PSAnLycpCi0gICAgICAgICAgY29udGludWU7Ci0jZW5kaWYgLyog Vk1TICovCi0gICAgICAgIGVsc2UgaWYgKCoqeGFyZ3YgPT0gJy0nKSB7ICAgICAgLyogR290IGFu IG9wdGlvbiAoYmVnaW5zIHdpdGggZGFzaCkgKi8KLSAgICAgICAgICAgIGludCB4eDsKLSAgICAg ICAgICAgIHggPSAqKCp4YXJndisxKTsgICAgICAgICAgICAvKiBHZXQgdGhlIG9wdGlvbiBsZXR0 ZXIgKi8KLSAgICAgICAgICAgIGRlYnVnKEYxMTEsImNtZGxpbiBhcmdzIDEiLCp4YXJndix4YXJn Yyk7Ci0gICAgICAgICAgICB4eCA9IGRvYXJnKHgpOwotICAgICAgICAgICAgZGVidWcoRjEwMSwi Y21kbGluIGRvYXJnIiwiIix4eCk7Ci0gICAgICAgICAgICBkZWJ1ZyhGMTExLCJjbWRsaW4gYXJn cyAyIiwqeGFyZ3YseGFyZ2MpOwotICAgICAgICAgICAgaWYgKHh4IDwgMCkgewotI2lmbmRlZiBO T0lDUAotICAgICAgICAgICAgICAgIGlmICh3aGF0ID09IFdfQ09NTUFORCkKLSAgICAgICAgICAg ICAgICAgIHJldHVybigwKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0jZW5kaWYgLyogTk9JQ1Ag Ki8KLSAgICAgICAgICAgICAgICAgIHsKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAgICAgICAg ICBzbGVlcCgxKTsgICAgICAgICAvKiBHaXZlIGl0IGEgY2hhbmNlLi4uICovCi0jZW5kaWYgLyog T1MyICovCi0gICAgICAgICAgICAgICAgICAgICAgZG9leGl0KEJBRF9FWElULDEpOyAvKiBHbyBo YW5kbGUgb3B0aW9uICovCi0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg ICAgIH0gZWxzZSBpZiAoIWhhdmV1cmwpIHsJCS8qIE5vIGRhc2ggd2hlcmUgZXhwZWN0ZWQgKi8K LQkgICAgY2hhciB4YnVmWzMyXTsKLSAgICAgICAgICAgIGNoYXIgYnVmWzEyOF07Ci0JICAgIGlu dCBrOwotCSAgICBrID0gY2tzdHJuY3B5KHhidWYsKnhhcmd2LDQwKTsKLQkgICAgaWYgKGsgPiAz MCkgewotCQl4YnVmWzMwXSA9ICcuJzsKLQkJeGJ1ZlsyOV0gPSAnLic7Ci0JCXhidWZbMjhdID0g Jy4nOwotCSAgICB9Ci0JICAgIHhidWZbMzFdID0gTlVMOwotICAgICAgICAgICAgY2ttYWttc2co YnVmLAotCQkgICAgIDEyOCwKLQkJICAgICAiaW52YWxpZCBjb21tYW5kLWxpbmUgb3B0aW9uLCB0 eXBlIFwiIiwKLQkJICAgICBteW5hbWUsCi0JCSAgICAgIiAtaFwiIGZvciBoZWxwIiwKLQkJICAg ICBOVUxMCi0JCSAgICAgKTsKLQkgICAgZmF0YWwyKHhidWYsYnVmKTsKLSAgICAgICAgfQotICAg IH0KLSNpZmRlZiBERUJVRwotICAgIGlmIChkZWJsb2cpIHsKLSNpZm5kZWYgTk9JQ1AKLSAgICAg ICAgZGVidWcoRjEwMSwiY21kbGluIHdoYXQiLCIiLHdoYXQpOwotI2VuZGlmIC8qIE5PSUNQICov Ci0gICAgICAgIGRlYnVnKEYxMDEsImNtZGxpbiBhY3Rpb24iLCIiLGFjdGlvbik7Ci0jaWZuZGVm IE5PWEZFUgotICAgICAgICBkZWJ1ZyhGMTAxLCJjbWRsaW4gc3Rkb3VmIiwiIixzdGRvdWYpOwot I2VuZGlmIC8qIE5PWEZFUiAqLwotICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0jaWZkZWYg Tk9JQ1AKLSAgICBpZiAoIWFjdGlvbiAmJiAhY2ZsZyAmJiAhY25mbGcpIHsKLSAgICAgICAgZGVi dWcoRjEwMCwiY21kbGluIE5PSUNQIGZhdGFsIG5vIGFjdGlvbiIsIiIsMCk7Ci0gICAgICAgIFhG QVRBTCgiP05vIGFjdGlvbnMgc3BlY2lmaWVkIG9uIGNvbW1hbmQgbGluZSIpOwotICAgIH0KLSNl bHNlCi0gICAgaWYgKGluc2VydmVyICYmIHdoYXQgPT0gMCkgeyAgICAgICAgLyogSW50ZXJuZXQg S2VybWl0IHNlcnZlciBjaGVja3MgKi8KLSAgICAgICAgaWYgKGxvY2FsIHx8IChhY3Rpb24gIT0g MCAmJiBhY3Rpb24gIT0gJ3gnKSkgewotICAgICAgICAgICAgaWYgKGxvY2FsKQotICAgICAgICAg ICAgICBwcmludGYoImxvY2FsXHJcbiIpOwotICAgICAgICAgICAgaWYgKGFjdGlvbikKLSAgICAg ICAgICAgICAgcHJpbnRmKCJhY3Rpb249JWNcclxuIixhY3Rpb24pOwotICAgICAgICAgICAgZGVi dWcoRjEwMCwiY21kbGluIGZhdGFsIDEiLCIiLDApOwotICAgICAgICAgICAgWEZBVEFMKCJObyBh Y3Rpb25zIG9yIGNvbm5lY3Rpb25zIGFsbG93ZWQgd2l0aCAtQSIpOwotICAgICAgICB9Ci0gICAg fQotI2VuZGlmIC8qIE5PSUNQICovCi0KLSNpZm5kZWYgTk9MT0NBTAotICAgIGlmICghbG9jYWwp IHsKLSAgICAgICAgaWYgKChhY3Rpb24gPT0gJ2MnKSB8fCAoY2ZsZyAhPSAwKSkgewotICAgICAg ICAgICAgZGVidWcoRjEwMCwiY21kbGluIGZhdGFsIDIiLCIiLDApOwotICAgICAgICAgICAgWEZB VEFMKCItbCBvciAtaiBvciAtWCByZXF1aXJlZCIpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlm IC8qIE5PTE9DQUwgKi8KLSNpZm5kZWYgTk9YRkVSCi0gICAgaWYgKCpjbWFyZzIgIT0gMCkgewot ICAgICAgICBpZiAoKGFjdGlvbiAhPSAncycpICYmIChhY3Rpb24gIT0gJ3InKSAmJiAoYWN0aW9u ICE9ICd2JykpIHsKLSAgICAgICAgICAgIGRlYnVnKEYxMDAsImNtZGxpbiBmYXRhbCAzIiwiIiww KTsKLSAgICAgICAgICAgIFhGQVRBTCgiLWEgd2l0aG91dCAtcywgLXIsIG9yIC1nIik7Ci0gICAg ICAgIH0KLSAgICAgICAgaWYgKGFjdGlvbiA9PSAncicgfHwgYWN0aW9uID09ICd2JykgewotI2lm ZGVmIENLX1RNUERJUgotICAgICAgICAgICAgaWYgKGlzZGlyKGNtYXJnMikpIHsgICAgICAgIC8q IC1hIGlzIGEgZGlyZWN0b3J5ICovCi0gICAgICAgICAgICAgICAgaWYgKCF6Y2hkaXIoY21hcmcy KSkgeyAgLyogdHJ5IHRvIGNoYW5nZSB0byBpdCAqLwotICAgICAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTAwLCJjbWRsaW4gZmF0YWwgNCIsIiIsMCk7Ci0gICAgICAgICAgICAgICAgICAgIFhGQVRB TCgiY2FuJ3QgY2hhbmdlIHRvICctYScgZGlyZWN0b3J5Iik7Ci0gICAgICAgICAgICAgICAgfSBl bHNlIGNtYXJnMiA9ICIiOwotICAgICAgICAgICAgfSBlbHNlCi0jZW5kaWYgLyogQ0tfVE1QRElS ICovCi0gICAgICAgICAgICAgIGlmICh6Y2hrbyhjbWFyZzIpIDwgMCkgewotICAgICAgICAgICAg ICAgICAgZGVidWcoRjEwMCwiY21kbGluIGZhdGFsIDUiLCIiLDApOwotICAgICAgICAgICAgICAg ICAgWEZBVEFMKCJ3cml0ZSBhY2Nlc3MgdG8gLWEgZmlsZSBkZW5pZWQiKTsKLSAgICAgICAgICAg ICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGlmICgoYWN0aW9uID09ICd2JykgJiYgKHN0ZG91 ZikgJiYgKCFsb2NhbCkpIHsKLSAgICAgICAgaWYgKGlzX2FfdHR5KDEpKSB7Ci0gICAgICAgICAg ICBkZWJ1ZyhGMTAwLCJjbWRsaW4gZmF0YWwgNiIsIiIsMCk7Ci0gICAgICAgICAgICBYRkFUQUwo InVucmVkaXJlY3RlZCAtayBjYW4gb25seSBiZSB1c2VkIGluIGxvY2FsIG1vZGUiKTsKLSAgICAg ICAgfQotICAgIH0KLSAgICBpZiAoKGFjdGlvbiA9PSAncycpIHx8IChhY3Rpb24gPT0gJ3YnKSB8 fAotICAgICAgICAoYWN0aW9uID09ICdyJykgfHwgKGFjdGlvbiA9PSAneCcpKSB7Ci0gICAgICAg IGlmIChsb2NhbCkKLSAgICAgICAgICBkaXNwbGEgPSAxOwotICAgICAgICBpZiAoc3Rkb3VmKSB7 Ci0gICAgICAgICAgICBkaXNwbGEgPSAwOwotICAgICAgICAgICAgcXVpZXQgPSAxOwotICAgICAg ICB9Ci0gICAgfQotICAgIGlmIChxdWlldCkgZGlzcGxhID0gMDsgICAgICAgICAgICAgIC8qIE5v IGRpc3BsYXkgaWYgcXVpZXQgcmVxdWVzdGVkICovCi0jZW5kaWYgLyogTk9YRkVSICovCi0jaWZk ZWYgREVCVUcKLSAgICBpZiAoYWN0aW9uKQotICAgICAgZGVidWcoRjAwMCwiY21kbGluIHJldHVy bnMgYWN0aW9uIiwiIixhY3Rpb24pOwotICAgIGVsc2UKLSAgICAgIGRlYnVnKEYxMDEsImNtZGxp biByZXR1cm5zIGFjdGlvbiIsIiIsYWN0aW9uKTsKLSNlbmRpZiAvKiBERUJVRyAqLwotCi0gICAg cmV0dXJuKGFjdGlvbik7ICAgICAgICAgICAgICAgICAgICAgLyogVGhlbiBkbyBhbnkgcmVxdWVz dGVkIHByb3RvY29sICovCi19Ci0KLS8qIEV4dGVuZGVkIGFyZ3VtZW50IHBhcnNpbmc6IC0ta2V5 d29yZFs6dmFsdWVdIChvciA9dmFsdWUpICovCi0KLS8qCi0gIFhBX3h4eHggc3ltYm9scyBhcmUg ZGVmaW5lZCBpbiBja3V1c3IuaC4KLSAgSWYgeW91IGFkZCBhIG5ldyBvbmUsIGFsc28gcmVtZW1i ZXIgdG8gdXBkYXRlIGRvc2hvdygpLAotICBTSFhPUFQgc2VjdGlvbiwgaW4gY2t1dXM1LmMuCi0q Lwotc3RydWN0IGtleXRhYiB4YXJndGFiW10gPSB7Ci0jaWZkZWYgQ0tfTE9HSU4KLSAgICB7ICJh bm9ueW1vdXMiLCAgIFhBX0FOT04sIENNX0FSR3xDTV9QUkUgfSwKLSNlbmRpZiAvKiBDS19MT0dJ TiAqLwotICAgIHsgImJhbm5lcmZpbGUiLCAgWEFfQkFGSSwgQ01fQVJHIH0sCi0gICAgeyAiY2Rm aWxlIiwgICAgICBYQV9DREZJLCBDTV9BUkcgfSwKLSAgICB7ICJjZG1lc3NhZ2UiLCAgIFhBX0NE TVMsIENNX0FSRyB9LAotICAgIHsgImNkbXNnIiwgICAgICAgWEFfQ0RNUywgQ01fQVJHfENNX0lO ViB9LAotI2lmZGVmIEtVSQotICAgIHsgImNoYW5nZWRpbSIsICAgWEFfQ0hHRCwgQ01fUFJFIH0s Ci0jZW5kaWYgLyogS1VJICovCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICB7ICJjaGFyc2V0IiwgICAg IFhBX0NTRVQsIENNX0FSR3xDTV9QUkUgfSwKLSNlbmRpZiAvKiBOT0NTRVRTICovCi0jaWZkZWYg SUtTREIKLSAgICB7ICJkYXRhYmFzZSIsICAgIFhBX0RCQVMsIENNX0FSR3xDTV9QUkUgfSwKLSAg ICB7ICJkYmZpbGUiLCAgICAgIFhBX0RCRkksIENNX0FSR3xDTV9QUkUgfSwKLSNlbmRpZiAvKiBJ S1NEQiAqLwotI2lmZGVmIEtVSQotICAgIHsgImZhY2VuYW1lIiwgICAgWEFfRk5BTSwgQ01fQVJH fENNX1BSRXxDTV9JTlYgfSwKLSAgICB7ICJmb250bmFtZSIsICAgIFhBX0ZOQU0sIENNX0FSR3xD TV9QUkUgfSwKLSAgICB7ICJmb250c2l6ZSIsICAgIFhBX0ZTSVosIENNX0FSR3xDTV9QUkUgfSwK LSNlbmRpZiAvKiBLVUkgKi8KLSNpZmRlZiBDT01NRU5UCi0jaWZkZWYgTkVXRlRQCi0gICAgeyAi ZnRwIiwgICAgICAgICBYQV9GVFAsICBDTV9BUkcgfSwKLSNlbmRpZiAvKiBORVdGVFAgKi8KLSNl bmRpZiAvKiBDT01NRU5UICovCi0jaWZuZGVmIE5PTE9DQUwKLSNpZmRlZiBPUzIKLSAgICB7ICJo ZWlnaHQiLCAgICAgIFhBX1JPV1MsIENNX0FSR3xDTV9QUkUgfSwKLSNlbmRpZiAvKiBPUzIgKi8K LSNlbmRpZiAvKiBOT0xPQ0FMICovCi0gICAgeyAiaGVscCIsICAgICAgICBYQV9IRUxQLCAwIH0s Ci0jaWZuZGVmIE5PSEVMUAotICAgIHsgImhlbHBmaWxlIiwgICAgWEFfSEVGSSwgQ01fQVJHIH0s Ci0jZW5kaWYgLyogTk9IRUxQICovCi0jaWZkZWYgQ0tfTE9HSU4KLSAgICB7ICJpbml0ZmlsZSIs ICAgIFhBX0FORkksIENNX0FSR3xDTV9QUkUgfSwKLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotI2lm ZGVmIE9TMgotICAgIHsgImxvY2tkb3duIiwgICAgWEFfTE9DSywgQ01fUFJFIH0sCi0jaWZkZWYg S1VJCi0gICAgeyAibWF4aW1pemUiLCAgICBYQV9XTUFYLCAgQ01fUFJFIH0sCi0gICAgeyAibWlu aW1pemUiLCAgICBYQV9XTUlOLCAgQ01fUFJFIH0sCi0gICAgeyAibm9iYXJzIiwgICAgICBYQV9O T0JBUiwgQ01fUFJFIH0sCi0gICAgeyAibm9jbG9zZSIgLCAgICBYQV9OT0NMT1NFLCBDTV9QUkUg fSwKLSNlbmRpZiAvKiBLVUkgKi8KLSAgICB7ICJub2VzY2FwZSIsICAgIFhBX05PRVNDQVBFLCBD TV9QUkUgfSwKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICB7ICJub2ludGVycnVwdHMiLFhBX05PSU4s IENNX1BSRSB9LAotI2lmZGVmIEtVSQotICAgIHsgIm5vbWVudWJhciIsICAgWEFfTk9NTiwgQ01f UFJFIH0sCi0jZW5kaWYgLyogS1VJICovCi0gICAgeyAibm9wZXJtcyIsICAgICBYQV9OUFJNLCAw IH0sCi0jaWZuZGVmIE5PUFVTSAotICAgIHsgIm5vcHVzaCIsICAgICAgWEFfTk9QVVNILCBDTV9Q UkUgfSwKLSNlbmRpZiAvKiBOT1BVU0ggKi8KLSNpZmRlZiBPUzIKLSAgICB7ICJub3Njcm9sbCIs ICAgIFhBX05PU0NST0xMLCBDTV9QUkUgfSwKLSNlbmRpZiAvKiBPUzIgKi8KLSNpZmRlZiBLVUkK LSAgICB7ICJub3N0YXR1c2JhciIsIFhBX05PU0IsIENNX1BSRSB9LAotICAgIHsgIm5vdG9vbGJh ciIsICAgWEFfTk9UQiwgQ01fUFJFIH0sCi0jZW5kaWYgLyogS1VJICovCi0jaWZkZWYgQ09NTUVO VAotICAgIHsgInBhc3N3b3JkIiwgICAgWEFfUEFTUywgQ01fQVJHfENNX0lOViB9LAotI2VuZGlm IC8qIENPTU1FTlQgKi8KLSNpZmRlZiBDS19MT0dJTgotI2lmbmRlZiBOT1hGRVIKLSNpZmRlZiBD S19QRVJNCi0gICAgeyAicGVybWlzc2lvbnMiLCBYQV9QRVJNLCBDTV9BUkd8Q01fUFJFIH0sCi0g ICAgeyAicGVybXMiLCAgICAgICBYQV9QRVJNLCBDTV9BUkd8Q01fUFJFfENNX0lOViB9LAotI2Vu ZGlmIC8qIENLX1BFUk0gKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSNpZmRlZiBVTklYCi0gICAg eyAicHJpdmlkIiwgICAgICBYQV9QUklWLCBDTV9BUkd8Q01fUFJFIH0sCi0jZW5kaWYgLyogVU5J WCAqLwotI2lmbmRlZiBOT0xPQ0FMCi0jaWZuZGVmIE5PQ1NFVFMKLSAgICB7ICJyY2hhcnNldCIs ICAgIFhBX0NTRVQsIENNX0FSR3xDTV9QUkV8Q01fSU5WIH0sCi0jZW5kaWYgLyogTk9DU0VUUyAq LwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNpZmRlZiBVTklYCi0gICAgeyAicm9vdCIsICAgICAg ICBYQV9ST09ULCBDTV9BUkd8Q01fUFJFIH0sCi0jZWxzZSAvKiBVTklYICovCi0jaWZkZWYgQ0tS T09UCi0gICAgeyAicm9vdCIsICAgICAgICBYQV9ST09ULCBDTV9BUkd8Q01fUFJFIH0sCi0jZW5k aWYgLyogQ0tST09UICovCi0jZW5kaWYgLyogVU5JWCAqLwotI2lmZGVmIEtVSQotICAgIHsgInNj YWxlZm9udCIsICAgWEFfU0NBTEUsIENNX1BSRSB9LAotI2VuZGlmIC8qIEtVSSAqLwotI2lmZGVm IENPTU1FTlQKLSNpZmRlZiBTU0hCVUlMVElOCi0gICAgeyAic3NoIiwgICAgICAgICBYQV9TU0gs ICBDTV9BUkcgfSwKLSNlbmRpZiAvKiBTU0hCVUlMVElOICovCi0jZW5kaWYgLyogQ09NTUVOVCAq LwotI2lmZGVmIENLU1lTTE9HCi0gICAgeyAic3lzbG9nIiwgICAgICBYQV9TWVNMLCBDTV9BUkd8 Q01fUFJFIH0sCi0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVm IENPTU1FTlQKLSNpZmRlZiBUTkNPREUKLSAgICB7ICJ0ZWxuZXQiLCAgICAgIFhBX1RFTCwgIENN X0FSRyB9LAotI2VuZGlmIC8qIFROQ09ERSAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICB7 ICJ0ZXJtdHlwZSIsICAgIFhBX1RFUk0sIENNX0FSR3xDTV9QUkUgfSwKLSNlbmRpZiAvKiBOT0xP Q0FMICovCi0gICAgeyAidGltZW91dCIsICAgICBYQV9USU1PLCBDTV9BUkd8Q01fUFJFIH0sCi0j aWZuZGVmIE5PTE9DQUwKLSNpZmRlZiBPUzIKLSAgICB7ICJ0aXRsZSIsICAgICAgIFhBX1RJVEws IENNX0FSRyB9LAotI2VuZGlmIC8qIE9TMiAqLwotI2lmZGVmIFVOSVgKLSAgICB7ICJ1bmJ1ZmZl cmVkIiwgIFhBX1VOQlVGLCAwIH0sCi0jZW5kaWYJLyogVU5JWCAqLwotI2lmbmRlZiBOT1NQTAot ICAgIHsgInVzZXIiLCAgICAgICAgWEFfVVNFUiwgQ01fQVJHIH0sCi0jZW5kaWYgLyogTk9TUEwg Ki8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0gICAgeyAidXNlcmZpbGUiLCAgICBYQV9VU0ZJLCBD TV9BUkd8Q01fUFJFIH0sCi0gICAgeyAidmVyc2lvbiIsICAgICBYQV9WRVJTLCAwIH0sCi0jaWZu ZGVmIE5PTE9DQUwKLSNpZmRlZiBPUzIKLSAgICB7ICJ3aWR0aCIsICAgICAgIFhBX0NPTFMsIENN X0FSR3xDTV9QUkUgfSwKLSNlbmRpZiAvKiBPUzIgKi8KLSNlbmRpZiAvKiBOT0xPQ0FMICovCi0j aWZkZWYgQ0tXVE1QCi0gICAgeyAid3RtcGZpbGUiLCAgICBYQV9XVEZJLCBDTV9BUkd8Q01fUFJF IH0sCi0gICAgeyAid3RtcGxvZyIsICAgICBYQV9XVE1QLCBDTV9BUkd8Q01fUFJFIH0sCi0jZW5k aWYgLyogQ0tXVE1QICovCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSAgICB7ICJ4ZmVyZmlsZSIs ICAgIFhBX0lLRkksIENNX0FSR3xDTV9QUkUgfSwKLSAgICB7ICJ4ZmVybG9nIiwgICAgIFhBX0lL TEcsIENNX0FSR3xDTV9QUkUgfSwKLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIEtVSQotICAgIHsg Inhwb3MiLCAgICAgICAgWEFfWFBPUywgQ01fQVJHfENNX1BSRSB9LAotICAgIHsgInlwb3MiLCAg ICAgICAgWEFfWVBPUywgQ01fQVJHfENNX1BSRSB9LAotI2VuZGlmIC8qIEtVSSAqLwotI2VuZGlm IC8qIE5PTE9DQUwgKi8KLSAgICB7IiIsIDAsIDAgfQotfTsKLWludCBueGFyZ3MgPSBzaXplb2Yo eGFyZ3RhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpIC0gMTsKLQotc3RhdGljIHN0cnVjdCBrZXl0 YWIgb2t0YWJbXSA9IHsKLSAgICB7ICIwIiwgICAgIDAsIDAgfSwKLSAgICB7ICIxIiwgICAgIDEs IDAgfSwKLSAgICB7ICIyIiwgICAgIDIsIDAgfSwKLSAgICB7ICIzIiwgICAgIDMsIDAgfSwKLSAg ICB7ICI0IiwgICAgIDQsIDAgfSwKLSAgICB7ICI1IiwgICAgIDUsIDAgfSwKLSAgICB7ICI2Iiwg ICAgIDYsIDAgfSwKLSAgICB7ICI3IiwgICAgIDcsIDAgfSwKLSAgICB7ICI4IiwgICAgIDgsIDAg fSwKLSAgICB7ICI5IiwgICAgIDksIDAgfSwKLSAgICB7ICJmYWxzZSIsIDAsIDAgfSwKLSAgICB7 ICJubyIsICAgIDAsIDAgfSwKLSAgICB7ICJvZmYiLCAgIDAsIDAgfSwKLSAgICB7ICJvayIsICAg IDEsIDAgfSwKLSAgICB7ICJvbiIsICAgIDEsIDAgfSwKLSAgICB7ICJ0cnVlIiwgIDEsIDAgfSwK LSAgICB7ICJ5ZXMiLCAgIDEsIDAgfQotfTsKLXN0YXRpYyBpbnQgbm9rdGFiID0gc2l6ZW9mKG9r dGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7Ci0KLSNkZWZpbmUgWEFSR0JVRkwgMzIKLQotY2hh ciAqIHhvcHRobHBbWEFfTUFYKzFdOyAgICAgICAgICAgICAgIC8qIEV4dGVuZGVkIG9wdGlvbiBo ZWxwICovCi1jaGFyICogeGFyZ2hscFtYQV9NQVgrMV07ICAgICAgICAgICAgICAgLyogRXh0ZW5k ZWQgYXJndW1lbnQgZm9yIG9wdGlvbiAqLwotCi1zdGF0aWMgVk9JRAotaW5peG9wdGhscCgpIHsK LSAgICBpbnQgaSwgajsKLSAgICBmb3IgKGkgPSAwOyBpIDw9IFhBX01BWDsgaSsrKSB7ICAgICAv KiBJbml0aWFsaXplIGFsbCB0byBudWxsICovCi0gICAgICAgIHhvcHRobHBbaV0gPSBOVUxMOwot ICAgICAgICB4YXJnaGxwW2ldID0gTlVMTDsKLSAgICB9Ci0gICAgZm9yIChpID0gMDsgaSA8IG54 YXJnczsgaSsrKSB7ICAgICAgLyogVGhlbiBmb3IgZWFjaCBkZWZpbmVkIGtleXdvcmQgKi8KLSAg ICAgICAgaiA9IHhhcmd0YWJbaV0ua3d2YWw7ICAgICAgICAgICAvKiBpbmRleCBieSBhc3NvY2lh dGVkIHZhbHVlICovCi0gICAgICAgIGlmIChqIDwgMCB8fCBqID4gWEFfTUFYKQotICAgICAgICAg IGNvbnRpbnVlOwotICAgICAgICBzd2l0Y2ggKGopIHsKLSNpZmRlZiBDS19MT0dJTgotICAgICAg ICAgIGNhc2UgWEFfQU5PTjogICAgICAgICAgICAgICAgIC8qICItLWFub255bW91cyIgKi8KLSAg ICAgICAgICAgIHhvcHRobHBbal0gPSAiLS1hbm9ueW1vdXM6e29uLG9mZn0gW0lLU0Qgb25seV0i OwotICAgICAgICAgICAgeGFyZ2hscFtqXSA9ICJXaGV0aGVyIHRvIGFsbG93IGFub255bW91cyBJ S1NEIGxvZ2lucyI7Ci0gICAgICAgICAgICBicmVhazsKLSNpZmRlZiBVTklYCi0JICBjYXNlIFhB X1BSSVY6Ci0gICAgICAgICAgICB4b3B0aGxwW2pdID0gIi0tcHJpdmlkOntvbixvZmZ9IFtJS1NE IG9ubHldIjsKLSAgICAgICAgICAgIHhhcmdobHBbal0gPSAiV2hldGhlciB0byBhbGxvdyBwcml2 aWxlZ2VkIElEcyB0byBsb2dpbiB0byBJS1NEIjsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlm IC8qIFVOSVggKi8KLSNlbmRpZiAvKiBDS19MT0dJTiAqLwotICAgICAgICAgIGNhc2UgWEFfQkFG STogICAgICAgICAgICAgICAgIC8qICItLWJhbm5lcmZpbGUiICovCi0gICAgICAgICAgICB4b3B0 aGxwW2pdID0gIi0tYmFubmVyZmlsZTo8ZmlsZW5hbWU+IjsKLSAgICAgICAgICAgIHhhcmdobHBb al0gPSAiRmlsZSB0byBkaXNwbGF5IHVwb24gc3RhcnR1cCBvciBJS1NEIGxvZ2luIjsKLSAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgWEFfQ0RGSTogICAgICAgICAgICAgICAgIC8q ICItLWNkZmlsZSIgKi8KLSAgICAgICAgICAgIHhvcHRobHBbal0gPSAiLS1jZGZpbGU6PGZpbGVu YW1lPiI7Ci0gICAgICAgICAgICB4YXJnaGxwW2pdID0gIkZpbGUgdG8gZGlzcGxheSB3aGVuIHNl cnZlciBjaGFuZ2VzIGRpcmVjdG9yeSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBj YXNlIFhBX0NETVM6ICAgICAgICAgICAgICAgICAvKiAiLS1jZG1lc3NhZ2UiICovCi0gICAgICAg ICAgICB4b3B0aGxwW2pdID0gIi0tY2RtZXNzYWdlOntvbixvZmZ9IjsKLSAgICAgICAgICAgIHhh cmdobHBbal0gPSAiV2hldGhlciB0byBkaXNwbGF5IENEIG1lc3NhZ2UgZmlsZSI7Ci0gICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFhBX0hFTFA6ICAgICAgICAgICAgICAgICAvKiAi LS1oZWxwIiAqLwotICAgICAgICAgICAgeG9wdGhscFtqXSA9ICItLWhlbHAiOwotICAgICAgICAg ICAgeGFyZ2hscFtqXSA9ICJQcmludCB0aGlzIGhlbHAgdGV4dCBhYm91dCBleHRlbmRlZCBvcHRp b25zIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgWEFfSEVGSTogICAgICAg ICAgICAgICAgIC8qICItLWhlbHAiICovCi0gICAgICAgICAgICB4b3B0aGxwW2pdID0gIi0taGVs cGZpbGU6PGZpbGVuYW1lPiI7Ci0gICAgICAgICAgICB4YXJnaGxwW2pdID0gIkZpbGUgY29udGFp bmluZyBjdXN0b20gaW5mbyBmb3IgSEVMUCBjb21tYW5kIjsKLSAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgIGNhc2UgWEFfSUtGSTogICAgICAgICAgICAgICAgIC8qICItLXhmZXJmaWxlIiAq LwotICAgICAgICAgICAgeG9wdGhscFtqXSA9ICItLXhmZXJmaWxlOjxmaWxlbmFtZT4gW0lLU0Qg b25seV0iOwotICAgICAgICAgICAgeGFyZ2hscFtqXSA9ICJOYW1lIG9mIGZ0cGQtbGlrZSBsb2dm aWxlLiI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFhBX0lLTEc6ICAgICAg ICAgICAgICAgICAvKiAiLS14ZmVybG9nIiAqLwotICAgICAgICAgICAgeG9wdGhscFtqXSA9ICIt LXhmZXJsb2c6e29uLG9mZn0gW0lLU0Qgb25seV0iOwotICAgICAgICAgICAgeGFyZ2hscFtqXSA9 ICJXaGV0aGVyIHRvIGtlZXAgYW4gZnRwZC1saWtlIGxvZ2ZpbGUuIjsKLSAgICAgICAgICAgIGJy ZWFrOwotI2lmZGVmIENLX0xPR0lOCi0gICAgICAgICAgY2FzZSBYQV9BTkZJOiAgICAgICAgICAg ICAgICAgLyogIi0taW5pdGZpbGUiICovCi0gICAgICAgICAgICB4b3B0aGxwW2pdID0gIi0taW5p dGZpbGU6PGZpbGVuYW1lPiBbSUtTRCBvbmx5XSI7Ci0gICAgICAgICAgICB4YXJnaGxwW2pdID0g IkluaXRpYWxpemF0aW9uIGZpbGUgZm9yIGFub255bW91cyB1c2Vycy4iOwotICAgICAgICAgICAg YnJlYWs7Ci0jaWZkZWYgQ0tfUEVSTQotICAgICAgICAgIGNhc2UgWEFfUEVSTTogICAgICAgICAg ICAgICAgIC8qICItLXBlcm1pc3Npb25zIiAqLwotICAgICAgICAgICAgeG9wdGhscFtqXSA9ICIt LXBlcm1pc3Npb25zOjxvY3RhbG51bT4gW0lLU0Qgb25seV0iOwotICAgICAgICAgICAgeGFyZ2hs cFtqXSA9ICJQZXJtaXNzaW9ucyBmb3IgZmlsZXMgdXBsb2FkZWQgYnkgYW5vbnltb3VzIHVzZXJz LiI7Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBDS19QRVJNICovCi0jaWZkZWYgVU5J WAotICAgICAgICAgIGNhc2UgWEFfUk9PVDogICAgICAgICAgICAgICAgIC8qICItLXJvb3QiICov Ci0gICAgICAgICAgICB4b3B0aGxwW2pdID0gIi0tcm9vdDo8ZGlyZWN0b3J5PiBbSUtTRCBvbmx5 XSI7Ci0gICAgICAgICAgICB4YXJnaGxwW2pdID0gIkZpbGUtc3lzdGVtIHJvb3QgZm9yIGFub255 bW91cyB1c2Vycy4iOwotICAgICAgICAgICAgYnJlYWs7Ci0jZWxzZSAvKiBVTklYICovCi0jaWZk ZWYgQ0tST09UCi0gICAgICAgICAgY2FzZSBYQV9ST09UOiAgICAgICAgICAgICAgICAgLyogIi0t cm9vdCIgKi8KLSAgICAgICAgICAgIHhvcHRobHBbal0gPSAiLS1yb290OjxkaXJlY3Rvcnk+IFtJ S1NEIG9ubHldIjsKLSAgICAgICAgICAgIHhhcmdobHBbal0gPSAiRmlsZS1zeXN0ZW0gcm9vdCBm b3IgYW5vbnltb3VzIHVzZXJzLiI7Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBDS1JP T1QgKi8KLSNlbmRpZiAvKiBVTklYICovCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSNpZmRlZiBD S1NZU0xPRwotICAgICAgICAgIGNhc2UgWEFfU1lTTDogICAgICAgICAgICAgICAgIC8qICItLXN5 c2xvZyIgKi8KLSAgICAgICAgICAgIHhvcHRobHBbal0gPSAiLS1zeXNsb2c6PGRpZ2l0PiBbSUtT RCBvbmx5XSI7Ci0gICAgICAgICAgICB4YXJnaGxwW2pdID0gIlN5c2xvZyByZWNvcmRpbmcgbGV2 ZWwsIDAtNi4iOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAg ICAgICAgICBjYXNlIFhBX1VTRkk6ICAgICAgICAgICAgICAgICAvKiAiLS11c2VyZmlsZSIgKi8K LSAgICAgICAgICAgIHhvcHRobHBbal0gPSAiLS11c2VyZmlsZTo8ZmlsZW5hbWU+IFtJS1NEIG9u bHldIjsKLSAgICAgICAgICAgIHhhcmdobHBbal0gPSAiRm9yYmlkZGVuIHVzZXIgZmlsZS4iOwot ICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgQ0tXVE1QCi0gICAgICAgICAgY2FzZSBYQV9XVEZJ OiAgICAgICAgICAgICAgICAgLyogIi0td3RtcGZpbGUiICovCi0gICAgICAgICAgICB4b3B0aGxw W2pdID0gIi0td3RtcGZpbGU6PGZpbGVuYW1lPiBbSUtTRCBvbmx5XSI7Ci0gICAgICAgICAgICB4 YXJnaGxwW2pdID0gIk5hbWUgb2Ygd3RtcCBsb2dmaWxlLiI7Ci0gICAgICAgICAgICBicmVhazsK LSAgICAgICAgICBjYXNlIFhBX1dUTVA6ICAgICAgICAgICAgICAgICAvKiAiLS13dG1wbG9nIiAq LwotICAgICAgICAgICAgeG9wdGhscFtqXSA9ICItLXd0bXBsb2c6e29uLG9mZn0gW0lLU0Qgb25s eV0iOwotICAgICAgICAgICAgeGFyZ2hscFtqXSA9ICJXaGV0aGVyIHRvIGtlZXAgYSB3dG1wIGxv Z2ZpbGUuIjsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIENLV1RNUCAqLwotI2lmZGVm IENLX0xPR0lOCi0gICAgICAgICAgY2FzZSBYQV9USU1POiAgICAgICAgICAgICAgICAgLyogIi0t dGltZW91dCIgKi8KLSAgICAgICAgICAgIHhvcHRobHBbal0gPSAiLS10aW1lb3V0OjxzZWNvbmRz PiBbSUtTRCBvbmx5XSI7Ci0gICAgICAgICAgICB4YXJnaGxwW2pdID0KLSAiSG93IGxvbmcgdG8g d2FpdCBmb3IgbG9naW4gYmVmb3JlIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24uIjsKLSAgICAgICAg ICAgIGJyZWFrOwotI2VuZGlmIC8qIENLX0xPR0lOICovCi0gICAgICAgICAgY2FzZSBYQV9OT0lO OgotICAgICAgICAgICAgeG9wdGhscFtqXSA9ICItLW5vaW50ZXJydXB0cyI7Ci0gICAgICAgICAg ICB4YXJnaGxwW2pdID0gIkRpc2FibGUga2V5Ym9hcmQgaW50ZXJydXB0cy4iOwotICAgICAgICAg ICAgYnJlYWs7Ci0jaWZkZWYgVU5JWAotICAgICAgICAgIGNhc2UgWEFfVU5CVUY6Ci0gICAgICAg ICAgICB4b3B0aGxwW2pdID0gIi0tdW5idWZmZXJlZCI7Ci0gICAgICAgICAgICB4YXJnaGxwW2pd ID0gIkZvcmNlIHVuYnVmZmVyZWQgY29uc29sZSBpL28uIjsKLSAgICAgICAgICAgIGJyZWFrOwot I2VuZGlmCS8qIFVOSVggKi8KLSNpZmRlZiBJS1NEQgotICAgICAgICAgIGNhc2UgWEFfREJBUzoK LSAgICAgICAgICAgIHhvcHRobHBbal0gPSAiLS1kYXRhYmFzZTp7b24sb2ZmfSI7Ci0gICAgICAg ICAgICB4YXJnaGxwW2pdID0gIkVuYWJsZS9EaXNhYmxlIElLU0QgZGF0YWJhc2UgKElLU0Qgb25s eSkiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBYQV9EQkZJOgotICAgICAg ICAgICAgeG9wdGhscFtqXSA9ICItLWRiZmlsZTo8ZmlsZW5hbWU+IjsKLSAgICAgICAgICAgIHhh cmdobHBbal0gPSAiU3BlY2lmeSBJS1NEIGRhdGFiYXNlIGZpbGUgKElLU0Qgb25seSkiOwotICAg ICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogSUtTREIgKi8KLSNpZmRlZiBDS19QRVJNUwotCSAg Y2FzZSBYQV9OUFJNOgotICAgICAgICAgICAgeG9wdGhscFtqXSA9ICItLW5vcGVybXMiOwotICAg ICAgICAgICAgeGFyZ2hscFtqXSA9ICJEaXNhYmxlIGZpbGUtdHJhbnNmZXIgUGVybWlzc2lvbnMg YXR0cmlidXRlLiI7Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBDS19QRVJNUyAqLwot I2lmZGVmIEtVSQotICAgICAgICAgIGNhc2UgWEFfQ0hHRDoKLQkgICAgeG9wdGhscFtqXSA9ICIt LWNoYW5nZWRpbSI7Ci0JICAgIHhhcmdobHBbal0gPSAiQ2hhbmdlIERpbWVuc2lvbiBvbiBXaW5k b3cgUmVzaXplIjsKLSAgICAgICAgICBjYXNlIFhBX1NDQUxFOgotCSAgICB4b3B0aGxwW2pdID0g Ii0tc2NhbGVmb250IjsKLQkgICAgeGFyZ2hscFtqXSA9ICJTY2FsZSBGb250IG9uIFdpbmRvdyBS ZXNpemUiOwotICAgICAgICAgIGNhc2UgWEFfV01BWDoKLQkgICAgeG9wdGhscFtqXSA9ICItLW1h eGltaXplIjsKLQkgICAgeGFyZ2hscFtqXSA9ICJzdGFydCBLOTVHIHdpbmRvdyBtYXhpbWl6ZWQu IjsKLQkgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBYQV9XTUlOOgotCSAgICB4b3B0aGxwW2pd ID0gIi0tbWluaW1pemUiOwotCSAgICB4YXJnaGxwW2pdID0gInN0YXJ0IEs5NUcgd2luZG93IG1p bmltaXplZC4iOwotCSAgICBicmVhazsKLQkgIGNhc2UgWEFfWFBPUzoKLQkgICAgeG9wdGhscFtq XSA9ICItLXhwb3M6biI7Ci0JICAgIHhhcmdobHBbal0gPSAiWC1jb29yZGluYXRlIG9mIHdpbmRv dyBwb3NpdGlvbiAobnVtYmVyKS4iOwotCSAgICBicmVhazsKLQkgIGNhc2UgWEFfWVBPUzoKLQkg ICAgeG9wdGhscFtqXSA9ICItLXlwb3M6biI7Ci0JICAgIHhhcmdobHBbal0gPSAiWS1jb29yZGlu YXRlIG9mIHdpbmRvdyBwb3NpdGlvbiAobnVtYmVyKS4iOwotCSAgICBicmVhazsKLQkgIGNhc2Ug WEFfRk5BTToKLQkgICAgeG9wdGhscFtqXSA9ICItLWZvbnRuYW1lOnMgKG9yIC0tZmFjZW5hbWU6 cykiOwotCSAgICB4YXJnaGxwW2pdID0gIkZvbnQvdHlwZWZhY2UgbmFtZTogc3RyaW5nIHdpdGgg XyByZXBsYWNpbmcgYmxhbmsuIjsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIFhBX0ZTSVo6Ci0JICAg IHhvcHRobHBbal0gPSAiLS1mb250c2l6ZTpuIjsKLQkgICAgeGFyZ2hscFtqXSA9ICJGb250IHBv aW50IHNpemUgKG51bWJlcikuIjsKLQkgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBYQV9OT01O OgotICAgICAgICAgICAgeG9wdGhscFtqXSA9ICItLW5vbWVudWJhciI7Ci0gICAgICAgICAgICB4 YXJnaGxwW2pdID0gIk5vIE1lbnUgQmFyIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg IGNhc2UgWEFfTk9UQjoKLSAgICAgICAgICAgIHhvcHRobHBbal0gPSAiLS1ub3Rvb2xiYXIiOwot ICAgICAgICAgICAgeGFyZ2hscFtqXSA9ICJObyBUb29sIEJhciI7Ci0gICAgICAgICAgICBicmVh azsKLSAgICAgICAgICBjYXNlIFhBX05PU0I6Ci0gICAgICAgICAgICB4b3B0aGxwW2pdID0gIi0t bm9zdGF0dXNiYXIiOwotICAgICAgICAgICAgeGFyZ2hscFtqXSA9ICJObyBTdGF0dXMgQmFyIjsK LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgWEFfTk9CQVI6Ci0gICAgICAgICAg ICB4b3B0aGxwW2pdID0gIi0tbm9iYXJzIjsKLSAgICAgICAgICAgIHhhcmdobHBbal0gPSAiTm8g TWVudSwgU3RhdHVzLCBvciBUb29sIEJhcnMiOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYg LyogS1VJICovCi0jaWZuZGVmIE5PUFVTSAotICAgICAgICAgIGNhc2UgWEFfTk9QVVNIOgotCSAg ICB4b3B0aGxwW2pdID0gIi0tbm9wdXNoIjsKLQkgICAgeGFyZ2hscFtqXSA9ICJEaXNhYmxlIGV4 dGVybmFsIGNvbW1hbmQgZXhlY3V0aW9uLiI7Ci0JICAgIGJyZWFrOwotI2VuZGlmIC8qIE5PUFVT SCAqLwotI2lmZGVmIE9TMgotICAgICAgICAgIGNhc2UgWEFfTE9DSzoKLQkgICAgeG9wdGhscFtq XSA9ICItLWxvY2tkb3duIjsKLQkgICAgeGFyZ2hscFtqXSA9ICJFbmFibGUgYWxsIGxvY2tkb3du IG9wdGlvbnMuIjsKLQkgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBYQV9OT0NMT1NFOgotICAg ICAgICAgICAgeG9wdGhscFtqXSA9ICItLW5vY2xvc2UiOwotICAgICAgICAgICAgeGFyZ2hscFtq XSA9ICJEaXNhYmxlIENsb3NlIFdpbmRvdyBhbmQgTWVudSBFeGl0LiI7Ci0gICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICBjYXNlIFhBX05PU0NST0xMOgotCSAgICB4b3B0aGxwW2pdID0gIi0t bm9zY3JvbGwiOwotCSAgICB4YXJnaGxwW2pdID0gIkRpc2FibGUgc2Nyb2xsYmFjayBvcGVyYXRp b25zLiI7Ci0JICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgWEFfTk9FU0NBUEU6Ci0JICAgIHhv cHRobHBbal0gPSAiLS1ub2VzY2FwZSI7Ci0JICAgIHhhcmdobHBbal0gPSAiRGlzYWJsZSBlc2Nh cGUgZnJvbSBjb25uZWN0IG1vZGUuIjsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIFhBX1JPV1M6Ci0J ICAgIHhvcHRobHBbal0gPSAiLS1oZWlnaHQ6biI7Ci0JICAgIHhhcmdobHBbal0gPSAiU2NyZWVu IGhlaWdodCAobnVtYmVyIG9mIHJvd3MpLiI7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBYQV9DT0xT OgotCSAgICB4b3B0aGxwW2pdID0gIi0td2lkdGg6biI7Ci0JICAgIHhhcmdobHBbal0gPSAiU2Ny ZWVuIHdpZHRoIChudW1iZXIgb2YgY29sdW1ucykuIjsKLQkgICAgYnJlYWs7Ci0gICAgICAgICAg Y2FzZSBYQV9USVRMOgotICAgICAgICAgICAgeG9wdGhscFtqXSA9ICItLXRpdGxlOnN0cmluZyI7 Ci0gICAgICAgICAgICB4YXJnaGxwW2pdID0gIldpbmRvdyBUaXRsZS4iOwotICAgICAgICAgICAg YnJlYWs7Ci0jZW5kaWYgLyogT1MyICovCi0JICBjYXNlIFhBX0NTRVQ6Ci0JICAgIHhvcHRobHBb al0gPSAiLS1yY2hhcnNldDpuYW1lIjsKLQkgICAgeGFyZ2hscFtqXSA9ICJOYW1lIG9mIHJlbW90 ZSB0ZXJtaW5hbCBjaGFyYWN0ZXIgc2V0LiI7Ci0JICAgIGJyZWFrOwotCSAgY2FzZSBYQV9URVJN OgotCSAgICB4b3B0aGxwW2pdID0gIi0tdGVybXR5cGU6bmFtZSI7Ci0jaWZkZWYgT1MyCi0JICAg IHhhcmdobHBbal0gPSAiQ2hvb3NlIHRlcm1pbmFsIGVtdWxhdGlvbi4iOwotI2Vsc2UKLQkgICAg eGFyZ2hscFtqXSA9ICJDaG9vc2UgdGVybWluYWwgdHlwZS4iOwotI2VuZGlmIC8qIE9TMiAqLwot CSAgICBicmVhazsKLQkgIGNhc2UgWEFfVVNFUjoKLQkgICAgeG9wdGhscFtqXSA9ICItLXVzZXI6 bmFtZSI7Ci0jaWZuZGVmIE5FVENPTk4KLQkgICAgeGFyZ2hscFtqXSA9ICJVc2VybmFtZSAoZm9y IG5ldHdvcmsgbG9naW4pIjsKLSNlbHNlCi0JICAgIHhhcmdobHBbal0gPSAiVXNlcm5hbWUuIjsK LSNlbmRpZiAvKiBORVRDT05OICovCi0JICAgIGJyZWFrOwotICAgICAgIH0KLSAgICB9Ci19Ci0K LVZPSUQKLWluaW9wdGhscCgpIHsKLSAgICBpbnQgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgMTI4 OyBpKyspIHsKLSAgICAgICAgb3B0YWN0W2ldID0gMDsKLSAgICAgICAgc3dpdGNoKGkpIHsKLSNp ZmRlZiBPUzIKLSAgICAgICAgICBjYXNlICcjJzogICAgICAgICAgICAgICAgICAgICAvKiBLOTUg U3RhcnR1cCBGbGFncyAqLwotICAgICAgICAgICAgb3B0aGxwW2ldID0gIktlcm1pdCA5NSBTdGFy dHVwIEZsYWdzIjsKLSAgICAgICAgICAgIGFyZ2hscFtpXSA9ICJcbiJcCi0gICAgICAgICAgICAg ICIgICAxIC0gdHVybiBvZmYgV2luOTUgc3BlY2lhbCBmaXhlc1xuIlwKLSAgICAgICAgICAgICAg IiAgIDIgLSBkbyBub3QgbG9hZCBvcHRpb25hbCBuZXR3b3JrIGRsbHNcbiJcCi0gICAgICAgICAg ICAgICIgICA0IC0gZG8gbm90IGxvYWQgb3B0aW9uYWwgdGFwaSBkbGxzXG4iXAotICAgICAgICAg ICAgICAiICAgOCAtIGRvIG5vdCBsb2FkIG9wdGlvbmFsIGtlcmJlcm9zIGRsbHNcbiJcCi0gICAg ICAgICAgICAgICIgIDE2IC0gZG8gbm90IGxvYWQgb3B0aW9uYWwgem1vZGVtIGRsbHNcbiJcCi0g ICAgICAgICAgICAgICIgIDMyIC0gdXNlIHN0ZGluIGZvciBpbnB1dCBpbnN0ZWFkIG9mIHRoZSBj b25zb2xlXG4iXAotICAgICAgICAgICAgICAiICA2NCAtIHVzZSBzdGRvdXQgZm9yIG91dHB1dCBp bnN0ZWFkIG9mIHRoZSBjb25zb2xlXG4iXAotICAgICAgICAgICAgICAiIDEyOCAtIGRvIG5vdCB0 ZXJtaW5hdGUgcHJvY2VzcyBpbiByZXNwb25zZSB0byBTZXNzaW9uIExvZ29mZiI7Ci0gICAgICAg ICAgICBicmVhazsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgICAgICBjYXNlICcwJzogICAgICAg ICAgICAgICAgICAgICAvKiBJbiB0aGUgbWlkZGxlICovCi0gICAgICAgICAgICBvcHRobHBbaV0g PQotICAgICAgICAgICAgICAiMTAwJSB0cmFuc3BhcmVudCBDT05ORUNUIG1vZGUgZm9yIFwiaW4t dGhlLW1pZGRsZVwiIG9wZXJhdGlvbiI7Ci0gICAgICAgICAgICBhcmdobHBbaV0gPSBOVUxMOwot ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlICc4JzoKLSAgICAgICAgICAgIG9w dGhscFtpXSA9ICJDb25uZWN0aW9uIGlzIDgtYml0IGNsZWFuIjsKLSAgICAgICAgICAgIGFyZ2hs cFtpXSA9IE5VTEw7Ci0gICAgICAgICAgICBicmVhazsKLQotI2lmZGVmIE5FV0ZUUAotICAgICAg ICAgIGNhc2UgJzknOgotICAgICAgICAgICAgb3B0aGxwW2ldID0gIk1ha2UgYSBjb25uZWN0aW9u IHRvIGFuIEZUUCBzZXJ2ZXIiOwotICAgICAgICAgICAgYXJnaGxwW2ldID0gIklQLWFkZHJlc3Mt b3ItaG9zdG5hbWVbOm9wdGlvbmFsLVRDUC1wb3J0XSI7Ci0gICAgICAgICAgICBicmVhazsKLSNl bmRpZiAvKiBORVdGVFAgKi8KLQotI2lmZGVmIElLU0QKLSAgICAgICAgICBjYXNlICdBJzoKLSAg ICAgICAgICAgIG9wdGhscFtpXSA9ICJLZXJtaXQgaXMgdG8gYmUgc3RhcnRlZCBhcyBhbiBJbnRl cm5ldCBzZXJ2aWNlIjsKLSNpZmRlZiBOVAotICAgICAgICAgICAgYXJnaGxwW2ldID0gIiAgc29j a2V0IGhhbmRsZSBvZiBpbmNvbWluZyBjb25uZWN0aW9uIjsKLSNlbHNlIC8qIE5UICovCi0gICAg ICAgICAgICBhcmdobHBbaV0gPSBOVUxMOwotI2VuZGlmIC8qIE5UICovCi0gICAgICAgICAgICBi cmVhazsKLSNlbmRpZiAvKiBJS1NEICovCi0gICAgICAgICAgY2FzZSAnQic6IG9wdGhscFtpXSA9 Ci0JICAiS2VybWl0IGlzIHJ1bm5pbmcgaW4gQmF0Y2ggb3IgQmFja2dyb3VuZCAobm8gY29udHJv bGxpbmcgdGVybWluYWwpIjsKLSAgICAgICAgICAgIGJyZWFrOwotI2lmbmRlZiBOT1NQTAotICAg ICAgICAgIGNhc2UgJ0MnOgotICAgICAgICAgICAgb3B0aGxwW2ldID0gIkludGVyYWN0aXZlLW1v ZGUgQ29tbWFuZHMgdG8gYmUgZXhlY3V0ZWQiOwotICAgICAgICAgICAgYXJnaGxwW2ldID0gIkNv bW1hbmRzIHNlcGFyYXRlZCBieSBjb21tYXMsIGxpc3QgaW4gZG91YmxlcXVvdGVzIjsKLSAgICAg ICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIE5PU1BMICovCi0gICAgICAgICAgY2FzZSAnRCc6Ci0g ICAgICAgICAgICBvcHRobHBbaV0gPSAiRGVsYXkgYmVmb3JlIHN0YXJ0aW5nIHRvIHNlbmQiOwot ICAgICAgICAgICAgYXJnaGxwW2ldID0gIk51bWJlciBvZiBzZWNvbmRzIjsKLSAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgIGNhc2UgJ0UnOgotICAgICAgICAgICAgb3B0aGxwW2ldID0gIkV4 aXQgYXV0b21hdGljYWxseSB3aGVuIGNvbm5lY3Rpb24gY2xvc2VzIjsKLSAgICAgICAgICAgIGFy Z2hscFtpXSA9IE5VTEw7Ci0gICAgICAgICAgICBicmVhazsKLSNpZmRlZiBUQ1BTT0NLRVQKLSAg ICAgICAgICBjYXNlICdGJzoKLSAgICAgICAgICAgIG9wdGhscFtpXSA9ICJVc2UgYW4gZXhpc3Rp bmcgVENQIGNvbm5lY3Rpb24iOwotICAgICAgICAgICAgYXJnaGxwW2ldID0gIk51bWVyaWMgZmls ZSBkZXNjcmlwdG9yIG9mIG9wZW4gVENQIGNvbm5lY3Rpb24iOwotICAgICAgICAgICAgYnJlYWs7 Ci0jZW5kaWYgLyogVENQU09DS0VUICovCi0gICAgICAgICAgY2FzZSAnRyc6Ci0gICAgICAgICAg ICBvcHRobHBbaV0gPSAiR0VUIGZyb20gc2VydmVyLCBzZW5kIHRvIHN0YW5kYXJkIG91dHB1dCI7 Ci0gICAgICAgICAgICBhcmdobHBbaV0gPSAiUmVtb3RlIGZpbGUgc3BlY2lmaWNhdGlvbiI7Ci0g ICAgICAgICAgICBvcHRhY3RbaV0gPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg Y2FzZSAnSCc6Ci0gICAgICAgICAgICBvcHRobHBbaV0gPSAiU3VwcHJlc3MgcHJvZ3JhbSBzdGFy dHVwIEhlcmFsZCBhbmQgZ3JlZXRpbmciOwotICAgICAgICAgICAgYXJnaGxwW2ldID0gTlVMTDsK LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgJ0knOgotICAgICAgICAgICAgb3B0 aGxwW2ldID0gIkNvbm5lY3Rpb24gaXMgcmVsaWFibGUsIHN0cmVhbWluZyBpcyBhbGxvd2VkIjsK LSAgICAgICAgICAgIGFyZ2hscFtpXSA9IE5VTEw7Ci0gICAgICAgICAgICBicmVhazsKLSNpZmRl ZiBUQ1BTT0NLRVQKLSAgICAgICAgICBjYXNlICdKJzoKLSAgICAgICAgICAgIG9wdGhscFtpXSA9 ICInQmUgbGlrZSBUZWxuZXQnIjsKLSAgICAgICAgICAgIGFyZ2hscFtpXSA9ICJJUCBob3N0bmFt ZS9hZGRyZXNzIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgc2VydmljZSI7Ci0gICAgICAgICAgICBi cmVhazsKLSNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KLSAgICAgICAgICBjYXNlICdMJzoKLSAgICAg ICAgICAgIG9wdGhscFtpXSA9ICJSZWN1cnNpdmUgZGlyZWN0b3J5IGRlc2NlbnQgZm9yIGZpbGVz IGluIC1zIG9wdGlvbiI7Ci0gICAgICAgICAgICBhcmdobHBbaV0gPSBOVUxMOwotICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAnTSc6Ci0gICAgICAgICAgICBvcHRobHBbaV0gPSAi TXkgdXNlciBuYW1lIChmb3IgdXNlIHdpdGggVGVsbmV0LCBSbG9naW4sIGV0YykiOwotICAgICAg ICAgICAgYXJnaGxwW2ldID0gIlVzZXJuYW1lIHN0cmluZyI7Ci0gICAgICAgICAgICBicmVhazsK LSNpZmRlZiBORVRCSU9TCi0gICAgICAgICAgY2FzZSAnTic6Ci0gICAgICAgICAgICBvcHRobHBb aV0gPSAiTkVUQklPUyBhZGFwdGVyIG51bWJlciI7Ci0gICAgICAgICAgICBhcmdobHBbaV0gPSAi TnVtYmVyIjsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIE5FVEJJT1MgKi8KLSAgICAg ICAgICBjYXNlICdPJzogICAgICAgICAgICAgICAgICAgICAvKiBCZSBhIHNlcnZlciBmb3IgT25l IGNvbW1hbmQgb25seSAqLwotICAgICAgICAgICAgb3B0aGxwW2ldID0gIkJlIGEgc2VydmVyIGZv ciBPbmUgY29tbWFuZCBvbmx5IjsKLSAgICAgICAgICAgIGFyZ2hscFtpXSA9IE5VTEw7Ci0gICAg ICAgICAgICBvcHRhY3RbaV0gPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz ZSAnUCc6Ci0gICAgICAgICAgICBvcHRobHBbaV0gPSAiRG9uJ3QgY29udmVydCBmaWxlIChQYXRo KSBuYW1lcyI7Ci0gICAgICAgICAgICBhcmdobHBbaV0gPSBOVUxMOwotICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgY2FzZSAnUSc6Ci0gICAgICAgICAgICBvcHRobHBbaV0gPSAiUXVpY2sg KEZBU1QpIEtlcm1pdCBwcm90b2NvbCBzZXR0aW5ncyI7Ci0gICAgICAgICAgICBhcmdobHBbaV0g PSBOVUxMOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAnUic6ICAgICAgICAg ICAgICAgICAgICAgLyogUmVtb3RlLU9ubHkgKi8KLSAgICAgICAgICAgIG9wdGhscFtpXSA9ICJS ZW1vdGUtb25seSAobWFrZXMgSUYgUkVNT1RFIHRydWUpIjsKLSAgICAgICAgICAgIGFyZ2hscFtp XSA9IE5VTEw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICdTJzogICAgICAg ICAgICAgICAgICAgICAvKiAiU3RheSIgLSBlbnRlciBpbnRlcmFjdGl2ZSAqLwotICAgICAgICAg ICAgb3B0aGxwW2ldID0gIlN0YXkgKGVudGVyIGNvbW1hbmQgcGFyc2VyIGFmdGVyIGFjdGlvbiBv cHRpb25zKSI7Ci0gICAgICAgICAgICBhcmdobHBbaV0gPSBOVUxMOwotICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgY2FzZSAnVCc6ICAgICAgICAgICAgICAgICAgICAgLyogVGV4dCBmaWxl IHRyYW5zZmVyIG1vZGUgKi8KLSAgICAgICAgICAgIG9wdGhscFtpXSA9ICJUcmFuc2ZlciBmaWxl cyBpbiBUZXh0IG1vZGUiOwotICAgICAgICAgICAgYXJnaGxwW2ldID0gTlVMTDsKLSAgICAgICAg ICAgIGJyZWFrOwotI2lmZGVmIEFOWVgyNQotICAgICAgICAgIGNhc2UgJ1UnOiAgICAgICAgICAg ICAgICAgICAgIC8qIFguMjUgY2FsbCB1c2VyIGRhdGEgKi8KLSAgICAgICAgICAgIG9wdGhscFtp XSA9ICJYLjI1IGNhbGwgVXNlciBkYXRhIjsKLSAgICAgICAgICAgIGFyZ2hscFtpXSA9ICJDYWxs LXVzZXItZGF0YSBzdHJpbmciOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQU5ZWDI1 ICovCi0gICAgICAgICAgY2FzZSAnVic6ICAgICAgICAgICAgICAgICAgICAgLyogTm8gYXV0b21h dGljIGZpbGV0eXBlIHN3aXRjaGluZyAqLwotICAgICAgICAgICAgb3B0aGxwW2ldID0gIkRpc2Fi bGUgYXV0b21hdGljIHBlci1maWxlIHRleHQvYmluYXJ5IHN3aXRjaGluZyI7Ci0gICAgICAgICAg ICBhcmdobHBbaV0gPSBOVUxMOwotICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgQ09NTUVOVAot I2lmZGVmIE9TMgotICAgICAgICAgIGNhc2UgJ1cnOiAgICAgICAgICAgICAgICAgICAgIC8qIFdp bjMyIFdpbmRvdyBIYW5kbGUgKi8KLSAgICAgICAgICAgIG9wdGhscFtpXSA9ICIiOwotICAgICAg ICAgICAgYXJnaGxwW2ldID0gTlVMTDsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIE9T MiAqLwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSNpZmRlZiBBTllYMjUKLSAgICAgICAgICBjYXNl ICdYJzogICAgICAgICAgICAgICAgICAgICAvKiBTRVQgSE9TVCB0byBYLjI1IGFkZHJlc3MgKi8K LSAgICAgICAgICAgIG9wdGhscFtpXSA9ICJNYWtlIGFuIFguMjUgY29ubmVjdGlvbiI7Ci0gICAg ICAgICAgICBhcmdobHBbaV0gPSAiWC4yNSBvciBYLjEyMSBhZGRyZXNzIjsKLSAgICAgICAgICAg IGJyZWFrOwotI2VuZGlmIC8qIEFOWVgyNSAqLwotICAgICAgICAgIGNhc2UgJ1knOiAgICAgICAg ICAgICAgICAgICAgIC8qIE5vIGluaXRpYWxpemF0aW9uIGZpbGUgKi8KLSAgICAgICAgICAgIG9w dGhscFtpXSA9ICJTa2lwIGluaXRpYWxpemF0aW9uIGZpbGUiOwotICAgICAgICAgICAgYXJnaGxw W2ldID0gTlVMTDsKLSAgICAgICAgICAgIGJyZWFrOwotI2lmZGVmIEFOWVgyNQotICAgICAgICAg IGNhc2UgJ1onOiAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBIT1NUIHRvIFguMjUgZmlsZSBk ZXNjcmlwdG9yICovCi0gICAgICAgICAgICBvcHRobHBbaV0gPSAiTWFrZSBhbiBYLjI1IGNvbm5l Y3Rpb24iOwotICAgICAgICAgICAgYXJnaGxwW2ldID0gIk51bWVyaWMgZmlsZSBkZXNjcmlwdG9y IG9mIG9wZW4gWC4yNSBjb25uZWN0aW9uIjsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8q IEFOWVgyNSAqLwotICAgICAgICAgIGNhc2UgJ2EnOiAgICAgICAgICAgICAgICAgICAgIC8qIGFz LW5hbWUgKi8KLSAgICAgICAgICAgIG9wdGhscFtpXSA9ICJBcy1uYW1lIGZvciBmaWxlKHMpIGlu IC1zLCAtciwgb3IgLWciOwotICAgICAgICAgICAgYXJnaGxwW2ldID0gIkFzLW5hbWUgc3RyaW5n IChhbHRlcm5hdGl2ZSBmaWxlbmFtZSkiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg Y2FzZSAnYic6ICAgICAgICAgICAgICAgICAgICAgLyogU2V0IGJpdHMtcGVyLXNlY29uZCBmb3Ig c2VyaWFsICovCi0gICAgICAgICAgICBvcHRobHBbaV0gPSAiU3BlZWQgZm9yIHNlcmlhbCBkZXZp Y2UiOwotICAgICAgICAgICAgYXJnaGxwW2ldID0gIk51bWVyaWMgQml0cyBwZXIgc2Vjb25kIjsK LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgJ2MnOiAgICAgICAgICAgICAgICAg ICAgIC8qIENvbm5lY3QgYmVmb3JlICovCi0gICAgICAgICAgICBvcHRhY3RbaV0gPSAxOwotICAg ICAgICAgICAgb3B0aGxwW2ldID0gIkNPTk5FQ1QgYmVmb3JlIHRyYW5zZmVycmluZyBmaWxlcyI7 Ci0gICAgICAgICAgICBhcmdobHBbaV0gPSBOVUxMOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgY2FzZSAnZCc6ICAgICAgICAgICAgICAgICAgICAgLyogREVCVUcgKi8KLSAgICAgICAg ICAgIG9wdGhscFtpXSA9ICJDcmVhdGUgZGVidWcubG9nIGZpbGUgKGEgc2Vjb25kIC1kIGFkZHMg dGltZXN0YW1wcykiOwotICAgICAgICAgICAgYXJnaGxwW2ldID0gTlVMTDsKLSAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgIGNhc2UgJ2UnOiAgICAgICAgICAgICAgICAgICAgIC8qIEV4dGVu ZGVkIHBhY2tldCBsZW5ndGggKi8KLSAgICAgICAgICAgIG9wdGhscFtpXSA9ICJNYXhpbXVtIGxl bmd0aCBmb3IgaW5jb21pbmcgZmlsZS10cmFuc2ZlciBwYWNrZXRzIjsKLSAgICAgICAgICAgIGFy Z2hscFtpXSA9ICJMZW5ndGggaW4gYnl0ZXMiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgY2FzZSAnZic6ICAgICAgICAgICAgICAgICAgICAgLyogZmluaXNoICovCi0gICAgICAgICAg ICBvcHRhY3RbaV0gPSAxOwotICAgICAgICAgICAgb3B0aGxwW2ldID0gIlNlbmQgRmluaXNoIGNv bW1hbmQgdG8gYSBLZXJtaXQgc2VydmVyIjsKLSAgICAgICAgICAgIGFyZ2hscFtpXSA9IE5VTEw7 Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICdnJzogICAgICAgICAgICAgICAg ICAgICAvKiBnZXQgKi8KLSAgICAgICAgICAgIG9wdGFjdFtpXSA9IDE7Ci0gICAgICAgICAgICBv cHRobHBbaV0gPSAiR0VUIGZpbGUocykgZnJvbSBhIEtlcm1pdCBzZXJ2ZXIiOwotICAgICAgICAg ICAgYXJnaGxwW2ldID0gIlJlbW90ZSBmaWxlIHNwZWNpZmljYXRpb24iOwotICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgY2FzZSAnaCc6ICAgICAgICAgICAgICAgICAgICAgLyogaGVscCAq LwotICAgICAgICAgICAgb3B0YWN0W2ldID0gMTsKLSNpZmRlZiBPUzJPUlVOSVgKLSAgICAgICAg ICAgIG9wdGhscFtpXSA9Ci0JICAgICAgIlByaW50IHRoaXMgbWVzc2FnZSAocGlwZSB0aHJ1ICdt b3JlJyB0byBwcmV2ZW50IHNjcm9sbGluZykiOwotI2Vsc2UKLQkgICAgICAiUHJpbnQgdGhpcyBt ZXNzYWdlIjsKLSNlbmRpZiAvKiBPUzJPUlVOSVggKi8KLSAgICAgICAgICAgIGFyZ2hscFtpXSA9 IE5VTEw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICdpJzogICAgICAgICAg ICAgICAgICAgICAvKiBUcmVhdCBmaWxlcyBhcyBiaW5hcnkgKi8KLSAgICAgICAgICAgIG9wdGhs cFtpXSA9IlRyYW5zZmVyIGZpbGVzIGluIGJpbmFyeSBtb2RlIjsKLSAgICAgICAgICAgIGFyZ2hs cFtpXSA9IE5VTEw7Ci0gICAgICAgICAgICBicmVhazsKLSNpZmRlZiBUQ1BTT0NLRVQKLSAgICAg ICAgICBjYXNlICdqJzogICAgICAgICAgICAgICAgICAgICAvKiBTRVQgSE9TVCAoVENQL0lQIHNv Y2tldCkgKi8KLSAgICAgICAgICAgIG9wdGhscFtpXSA9ICJNYWtlIGEgVENQIGNvbm5lY3Rpb24i OwotICAgICAgICAgICAgYXJnaGxwW2ldID0KLQkgICAgICAiVENQIGhvc3QgbmFtZS9hZGRyZXNz IGFuZCBvcHRpb25hbCBzZXJ2aWNlIG5hbWUgb3IgbnVtYmVyIjsKLSAgICAgICAgICAgIGJyZWFr OwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotICAgICAgICAgIGNhc2UgJ2snOiAgICAgICAgICAg ICAgICAgICAgIC8qIHJlY2VpdmUgdG8gc3Rkb3V0ICovCi0gICAgICAgICAgICBvcHRhY3RbaV0g PSAxOwotICAgICAgICAgICAgb3B0aGxwW2ldID0gIlJFQ0VJVkUgZmlsZShzKSB0byBzdGFuZGFy ZCBvdXRwdXQiOwotICAgICAgICAgICAgYXJnaGxwW2ldID0gTlVMTDsKLSAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgIGNhc2UgJ2wnOiAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBMSU5F ICovCi0gICAgICAgICAgICBvcHRobHBbaV0gPSAiTWFrZSBjb25uZWN0aW9uIG9uIHNlcmlhbCBj b21tdW5pY2F0aW9ucyBkZXZpY2UiOwotICAgICAgICAgICAgYXJnaGxwW2ldID0gIlNlcmlhbCBk ZXZpY2UgbmFtZSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICdtJzogICAg ICAgICAgICAgICAgICAgICAvKiBNb2RlbSB0eXBlICovCi0gICAgICAgICAgICBvcHRobHBbaV0g PSAiTW9kZW0gdHlwZSBmb3IgdXNlIHdpdGggLWwgZGV2aWNlIjsKLSAgICAgICAgICAgIGFyZ2hs cFtpXSA9ICJNb2RlbSBuYW1lIGFzIGluIFNFVCBNT0RFTSBUWVBFIGNvbW1hbmQiOwotICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAnbic6ICAgICAgICAgICAgICAgICAgICAgLyog Y29ubmVjdCBhZnRlciAqLwotICAgICAgICAgICAgb3B0YWN0W2ldID0gMTsKLSAgICAgICAgICAg IG9wdGhscFtpXSA9ICJDT05ORUNUIGFmdGVyIHRyYW5zZmVycmluZyBmaWxlcyI7Ci0gICAgICAg ICAgICBhcmdobHBbaV0gPSBOVUxMOwotICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgQU5ZWDI1 Ci0gICAgICAgICAgY2FzZSAnbyc6ICAgICAgICAgICAgICAgICAgICAgLyogWC4yNSBjbG9zZWQg dXNlciBncm91cCAqLwotICAgICAgICAgICAgb3B0aGxwW2ldID0gIlguMjUgY2xvc2VkIHVzZXIg Z3JvdXAiOwotICAgICAgICAgICAgYXJnaGxwW2ldID0gIlVzZXIgZ3JvdXAgc3RyaW5nIjsKLSAg ICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIEFOWVgyNSAqLwotICAgICAgICAgIGNhc2UgJ3An OiAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBQQVJJVFkgKi8KLSAgICAgICAgICAgIG9wdGhs cFtpXSA9ICJQYXJpdHkiOwotICAgICAgICAgICAgYXJnaGxwW2ldID0gIk9uZSBvZiB0aGUgZm9s bG93aW5nOiBldmVuLCBvZGQsIG1hcmssIG5vbmUsIHNwYWNlIjsKLSAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgIGNhc2UgJ3EnOiAgICAgICAgICAgICAgICAgICAgIC8qIFF1aWV0ICovCi0g ICAgICAgICAgICBvcHRobHBbaV0gPSAiUXVpZXQgKHN1cHByZXNzIG1vc3QgbWVzc2FnZXMpIjsK LSAgICAgICAgICAgIGFyZ2hscFtpXSA9IE5VTEw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICBjYXNlICdyJzogICAgICAgICAgICAgICAgICAgICAvKiByZWNlaXZlICovCi0gICAgICAg ICAgICBvcHRhY3RbaV0gPSAxOwotICAgICAgICAgICAgb3B0aGxwW2ldID0gIlJFQ0VJVkUgZmls ZShzKSI7Ci0gICAgICAgICAgICBhcmdobHBbaV0gPSBOVUxMOwotICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgY2FzZSAncyc6ICAgICAgICAgICAgICAgICAgICAgLyogc2VuZCAqLwotICAg ICAgICAgICAgb3B0YWN0W2ldID0gMTsKLSAgICAgICAgICAgIG9wdGhscFtpXSA9ICJTRU5EIGZp bGUocykiOwotICAgICAgICAgICAgYXJnaGxwW2ldID0gIk9uZSBvciBtb3JlIGZpbGUgc3BlY2lm aWNhdGlvbnMiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAndCc6ICAgICAg ICAgICAgICAgICAgICAgLyogTGluZSB0dXJuYXJvdW5kIGhhbmRzaGFrZSAqLwotICAgICAgICAg ICAgb3B0aGxwW2ldID0gIlhPTiBUdXJuYXJvdW5kIGNoYXJhY3RlciBmb3IgaGFsZi1kdXBsZXgg Y29ubmVjdGlvbnMiOwotICAgICAgICAgICAgYXJnaGxwW2ldID0gTlVMTDsKLSAgICAgICAgICAg IGJyZWFrOwotI2lmZGVmIEFOWVgyNQotICAgICAgICAgIGNhc2UgJ3UnOiAgICAgICAgICAgICAg ICAgICAgIC8qIFguMjUgcmV2ZXJzZSBjaGFyZ2UgY2FsbCAqLwotICAgICAgICAgICAgb3B0aGxw W2ldID0gIlguMjUgcmV2ZXJzZSBjaGFyZ2UgY2FsbCI7Ci0gICAgICAgICAgICBhcmdobHBbaV0g PSBOVUxMOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQU5ZWDI1ICovCi0gICAgICAg ICAgY2FzZSAndic6ICAgICAgICAgICAgICAgICAgICAgLyogVmluZG93IHNpemUgKi8KLSAgICAg ICAgICAgIG9wdGhscFtpXSA9ICJXaW5kb3cgc2l6ZSI7Ci0gICAgICAgICAgICBhcmdobHBbaV0g PSAiTnVtYmVyLCAxIHRvIDMyIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug J3cnOiAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlb3ZlciAqLwotICAgICAgICAgICAgb3B0 aGxwW2ldID0gIkluY29taW5nIGZpbGVzIFdyaXRlIG92ZXIgZXhpc3RpbmcgZmlsZXMiOwotICAg ICAgICAgICAgYXJnaGxwW2ldID0gTlVMTDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg IGNhc2UgJ3gnOiAgICAgICAgICAgICAgICAgICAgIC8qIFNlcnZlciAqLwotICAgICAgICAgICAg b3B0YWN0W2ldID0gMTsKLSAgICAgICAgICAgIG9wdGhscFtpXSA9ICJCZSBhIEtlcm1pdCBTRVJW RVIiOwotICAgICAgICAgICAgYXJnaGxwW2ldID0gTlVMTDsKLSAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgIGNhc2UgJ3knOiAgICAgICAgICAgICAgICAgICAgIC8qIEFsdGVybmF0ZSBpbml0 LWZpbGUgbmFtZSAqLwotICAgICAgICAgICAgb3B0aGxwW2ldID0gIkFsdGVybmF0aXZlIGluaXRp YWxpemF0aW9uIGZpbGUiOwotICAgICAgICAgICAgYXJnaGxwW2ldID0gIkZpbGUgc3BlY2lmaWNh dGlvbiI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICd6JzogICAgICAgICAg ICAgICAgICAgICAvKiBOb3QgYmFja2dyb3VuZCAqLwotICAgICAgICAgICAgb3B0aGxwW2ldID0g IkZvcmNlIGZvcmVncm91bmQgYmVoYXZpb3IiOwotICAgICAgICAgICAgYXJnaGxwW2ldID0gTlVM TDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBv cHRobHBbaV0gPSBOVUxMOwotICAgICAgICAgICAgYXJnaGxwW2ldID0gTlVMTDsKLSAgICAgICAg fQotICAgIH0KLSAgICBpbml4b3B0aGxwKCk7Ci19Ci0KLWludAotZG94YXJnKHMscHJlKSBjaGFy ICoqIHM7IGludCBwcmU7IHsKLSNpZmRlZiBJS1NECi0jaWZkZWYgQ0tfTE9HSU4KLSAgICBleHRl cm4gaW50IGNreHN5c2xvZywgY2t4d3RtcCwgY2t4YW5vbjsKLSNpZmRlZiBVTklYCi0gICAgZXh0 ZXJuIGludCBja3hwcml2OwotI2VuZGlmIC8qIFVOSVggKi8KLSNpZmRlZiBDS19QRVJNUwotICAg IGV4dGVybiBpbnQgY2t4cGVybXM7Ci0jZW5kaWYgLyogQ0tfUEVSTVMgKi8KLSAgICBleHRlcm4g Y2hhciAqIGFub25maWxlLCAqIHVzZXJmaWxlLCAqIGFub25yb290OwotI2VuZGlmIC8qIENLX0xP R0lOICovCi0jaWZkZWYgQ0tXVE1QCi0gICAgZXh0ZXJuIGNoYXIgKiB3dG1wZmlsZTsKLSNlbmRp ZiAvKiBDS1dUTVAgKi8KLSNlbmRpZiAvKiBJS1NEICovCi0gICAgZXh0ZXJuIGludCBzcnZjZG1z ZzsKLSAgICBleHRlcm4gY2hhciAqIGNkbXNnZmlsZVtdLCAqIGNkbXNnc3RyOwotICAgIGNoYXIg dG1wYnVmW0NLTUFYUEFUSCsxXTsKLQotICAgIGludCBpLCB4LCB5LCB6LCBoYXZlYXJnID0gMDsK LSAgICBjaGFyIGJ1ZltYQVJHQlVGTF0sIGMsICogcDsKLQotICAgIGlmIChueGFyZ3MgPCAxKQot ICAgICAgcmV0dXJuKC0xKTsKLQotICAgIGMgPSAqKCpzICsgMSk7ICAgICAgICAgICAgICAgICAg ICAgIC8qIEh5cGhlbiBvciBQbHVzIHNpZ24gKi8KLQotICAgIHAgPSAqcyArIDI7Ci0gICAgZm9y IChpID0gMDsgKnAgJiYgaSA8IFhBUkdCVUZMOyBpKyspIHsKLSAgICAgICAgYnVmW2ldID0gKnAr KzsKLSAgICAgICAgaWYgKGJ1ZltpXSA9PSAnPScgfHwgYnVmW2ldID09ICc6JykgewotICAgICAg ICAgICAgaGF2ZWFyZyA9IDE7Ci0gICAgICAgICAgICBidWZbaV0gPSBOVUw7Ci0gICAgICAgICAg ICBicmVhazsKLSAgICAgICAgfSBlbHNlIGlmIChidWZbaV0gPCAnICcpIHsKLSAgICAgICAgICAg IGJ1ZltpXSA9IE5VTDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAg IGlmIChpID4gWEFSR0JVRkwgLSAxKQotICAgICAgcmV0dXJuKC0xKTsKLSAgICBidWZbaV0gPSBO VUw7Ci0KLSAgICB4ID0gbG9va3VwKHhhcmd0YWIsYnVmLG54YXJncywmeik7ICAvKiBMb29rdXAg dGhlIG9wdGlvbiBrZXl3b3JkICovCi0KLSAgICBpZiAoeCA8IDApICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBPbiBhbnkga2luZCBvZiBlcnJvciAqLwotICAgICAgcmV0dXJuKC0xKTsgICAg ICAgICAgICAgICAgICAgICAgIC8qIGZhaWwuICovCi0KLSAgICAvKiBIYW5kbGUgcHJlc2NhbiB2 ZXJzdXMgcG9zdC1pbml0aWFsaXphdGlvbiBmaWxlICovCi0KLSAgICBpZiAoKCh4YXJndGFiW3pd LmZsZ3MgJiBDTV9QUkUpIHx8IChjID09ICcrJykpICYmICFwcmUpCi0gICAgICByZXR1cm4oMCk7 Ci0gICAgZWxzZSBpZiAocHJlICYmICEoeGFyZ3RhYlt6XS5mbGdzICYgQ01fUFJFKSAmJiAoYyAh PSAnKycpKQotICAgICAgcmV0dXJuKDApOwotCi0gICAgLyogRW5zdXJlIHRoYXQgYXJndW1lbnQg aXMgZ2l2ZW4gaWYgYW5kIG9ubHkgaWYgcmVxdWlyZWQgKi8KLQotICAgIHAgPSBoYXZlYXJnID8g KnMgKyBpICsgMyA6IE5VTEw7Ci0KLSAgICBpZiAoKHhhcmd0YWJbel0uZmxncyAmIENNX0FSRykg JiYgIWhhdmVhcmcpCi0gICAgICByZXR1cm4oLTEpOwotICAgIGVsc2UgaWYgKCghKHhhcmd0YWJb el0uZmxncyAmIENNX0FSRykpICYmIGhhdmVhcmcpCi0gICAgICByZXR1cm4oLTEpOwotCi0gICAg c3dpdGNoICh4KSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogT0sgdG8gcHJvY2VzcyB0aGlz IG9wdGlvbi4uLiAqLwotI2lmZGVmIENLU1lTTE9HCi0gICAgICBjYXNlIFhBX1NZU0w6ICAgICAg ICAgICAgICAgICAgICAgLyogSUtTOiBTeXNsb2cgbGV2ZWwgKi8KLSAgICAgICAgeSA9IDA7Ci0g ICAgICAgIGlmIChpc2RpZ2l0KCpwKSkgewotICAgICAgICAgICAgd2hpbGUgKCpwKSB7Ci0gICAg ICAgICAgICAgICAgaWYgKCpwIDwgJzAnIHx8ICpwID4gJzknKQotICAgICAgICAgICAgICAgICAg cmV0dXJuKC0xKTsKLSAgICAgICAgICAgICAgICB5ID0geSAqIDEwICsgKCpwKysgLSAnMCcpOwot ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgeSA9IGxvb2t1cChv a3RhYixwLG5va3RhYiwmeik7Ci0gICAgICAgICAgICBpZiAoeSA+IDApIHkgPSBTWVNMR19ERjsg ICAgLyogWWVzID0gZGVmYXVsdCBsb2dnaW5nIGxldmVsICovCi0gICAgICAgIH0KLSNpZm5kZWYg U1lTTE9HTEVWRUwKLSAgICAgICAgLyogSWYgc3BlY2lmaWVkIG9uIGNjIGNvbW1hbmQgbGluZSwg dXNlciBjYW4ndCBjaGFuZ2UgaXQuICovCi0gICAgICAgIGlmICghaW5zZXJ2ZXIpICAgICAgICAg ICAgICAgICAgLyogRG9uJ3QgYWxsb3cgdm9sdW1pbm91cyBzeXNsb2dnaW5nICovCi0gICAgICAg ICAgaWYgKHkgPiBTWVNMR19GQSkgICAgICAgICAgICAgLyogYnkgb3JkaW5hcnkgdXNlcnMuICov Ci0gICAgICAgICAgICB5ID0gU1lTTEdfRkE7Ci0jZW5kaWYgLyogU1lTTE9HTEVWRUwgKi8KLSAg ICAgICAgaWYgKHkgPCAwKSByZXR1cm4oLTEpOwotI2lmZGVmIERFQlVHCi0gICAgICAgIGlmICh5 ID49IFNZU0xHX0RCKQotICAgICAgICAgIGlmICghZGVibG9nKQotICAgICAgICAgICAgZGVibG9n ID0gZGVib3BuKCJkZWJ1Zy5sb2ciLDApOwotI2VuZGlmIC8qIERFQlVHICovCi0jaWZkZWYgU1lT TE9HTEVWRUwKLSAgICAgICAgLyogSWYgc3BlY2lmaWVkIG9uIGNjIGNvbW1hbmQgbGluZSwgdXNl ciBjYW4ndCBjaGFuZ2UgaXQuICovCi0gICAgICAgIHkgPSBTWVNMT0dMRVZFTDsKLSNlbmRpZiAv KiBTWVNMT0dMRVZFTCAqLwotICAgICAgICBja3hzeXNsb2cgPSB5OwotICAgICAgICAvKiBwcmlu dGYoImNreHN5c2xvZz0lZFxuIixja3hzeXNsb2cpOyAqLwotICAgICAgICBicmVhazsKLSNlbmRp ZiAvKiBDS1NZU0xPRyAqLwotCi0jaWZkZWYgQ0tfTE9HSU4KLSNpZmRlZiBDS1dUTVAKLSAgICAg IGNhc2UgWEFfV1RNUDogICAgICAgICAgICAgICAgICAgICAvKiBJS1M6IHd0bXAgbG9nICovCi0g ICAgICAgIHkgPSBsb29rdXAob2t0YWIscCxub2t0YWIsJnopOwotICAgICAgICBpZiAoeSA8IDAp IHJldHVybigtMSk7Ci0gICAgICAgIGNreHd0bXAgPSB5OwotICAgICAgICAvKiBwcmludGYoImNr eHd0bXA9JWRcbiIsY2t4d3RtcCk7ICovCi0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFhB X1dURkk6ICAgICAgICAgICAgICAgICAgICAgLyogSUtTOiB3dG1wIGxvZ2ZpbGUgKi8KLSAgICAg ICAgaWYgKHpmbnFmcChwLENLTUFYUEFUSCx0bXBidWYpKQotICAgICAgICAgIHAgPSB0bXBidWY7 Ci0gICAgICAgIG1ha2VzdHIoJnd0bXBmaWxlLHApOwotICAgICAgICAvKiBwcmludGYoInd0bXBm aWxlPSVzXG4iLHd0bXBmaWxlKTsgKi8KLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ0tXVE1Q ICovCi0KLSAgICAgIGNhc2UgWEFfQU5PTjogICAgICAgICAgICAgICAgICAgICAvKiBJS1M6IEFu b255bW91cyBsb2dpbiBhbGxvd2VkICovCi0gICAgICAgIHkgPSBsb29rdXAob2t0YWIscCxub2t0 YWIsJnopOwotICAgICAgICBpZiAoeSA8IDApIHJldHVybigtMSk7Ci0gICAgICAgIGNreGFub24g PSB5OwotICAgICAgICAvKiBwcmludGYoImNreGFub249JWRcbiIsY2t4YW5vbik7ICovCi0gICAg ICAgIGJyZWFrOwotCi0jaWZkZWYgVU5JWAotICAgICAgY2FzZSBYQV9QUklWOiAgICAgICAgICAg ICAgICAgICAgIC8qIElLUzogUHJpdidkIGxvZ2luIGFsbG93ZWQgKi8KLSAgICAgICAgeSA9IGxv b2t1cChva3RhYixwLG5va3RhYiwmeik7Ci0gICAgICAgIGlmICh5IDwgMCkgcmV0dXJuKC0xKTsK LSAgICAgICAgY2t4cHJpdiA9IHk7Ci0gICAgICAgIC8qIHByaW50ZigiY2t4cHJpdj0lZFxuIixj a3hwcml2KTsgKi8KLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogVU5JWCAqLwotCi0jaWZkZWYg Q0tfUEVSTVMKLSAgICAgIGNhc2UgWEFfUEVSTTogICAgICAgICAgICAgICAgICAgICAvKiBJS1M6 IEFub255bW91cyBVcGxvYWQgUGVybWlzc2lvbnMgKi8KLSAgICAgICAgeSA9IDA7Ci0gICAgICAg IHdoaWxlICgqcCkgewotICAgICAgICAgICAgaWYgKCpwIDwgJzAnIHx8ICpwID4gJzcnKQotICAg ICAgICAgICAgICByZXR1cm4oLTEpOwotICAgICAgICAgICAgeSA9IHkgKiA4ICsgKCpwKysgLSAn MCcpOwotICAgICAgICB9Ci0gICAgICAgIGNreHBlcm1zID0geTsKLSAgICAgICAgLyogcHJpbnRm KCJja3hwZXJtcz0lMDRvXG4iLGNreHBlcm1zKTsgKi8KLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYg LyogQ0tfUEVSTVMgKi8KLQotICAgICAgY2FzZSBYQV9BTkZJOiAgICAgICAgICAgICAgICAgICAg IC8qIEFub255bW91cyBpbml0IGZpbGUgKi8KLQlpZiAoIWlzYWJzb2x1dGUocCkpCi0JICBpZiAo emZucWZwKHAsQ0tNQVhQQVRILHRtcGJ1ZikpCi0JICAgIHAgPSB0bXBidWY7Ci0gICAgICAgIG1h a2VzdHIoJmFub25maWxlLHApOwotICAgICAgICAvKiBwcmludGYoImFub25maWxlPSVzXG4iLGFu b25maWxlKTsgKi8KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgWEFfVVNGSTogICAgICAg ICAgICAgICAgICAgICAvKiBJS1M6IEZvcmJpZGRlbiB1c2VyIGZpbGUgKi8KLQlpZiAoIWlzYWJz b2x1dGUocCkpCi0JICBpZiAoemZucWZwKHAsQ0tNQVhQQVRILHRtcGJ1ZikpCi0JICAgIHAgPSB0 bXBidWY7Ci0gICAgICAgIG1ha2VzdHIoJnVzZXJmaWxlLHApOwotICAgICAgICAvKiBwcmludGYo InVzZXJmaWxlPSVzXG4iLHVzZXJmaWxlKTsgKi8KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNh c2UgWEFfUk9PVDogICAgICAgICAgICAgICAgICAgICAvKiBJS1M6IEFub255bW91cyByb290ICov Ci0JaWYgKCFpc2Fic29sdXRlKHApKQotCSAgaWYgKHpmbnFmcChwLENLTUFYUEFUSCx0bXBidWYp KQotCSAgICBwID0gdG1wYnVmOwotICAgICAgICBtYWtlc3RyKCZhbm9ucm9vdCxwKTsKLSAgICAg ICAgLyogcHJpbnRmKCJhbm9ucm9vdD0lc1xuIixhbm9ucm9vdCk7ICovCi0gICAgICAgIGJyZWFr OwotI2VuZGlmIC8qIENLX0xPR0lOICovCi0KLSAgICAgIGNhc2UgWEFfQ0RGSTogICAgICAgICAg ICAgICAgICAgICAvKiBDRCBmaWxlbmFtZSAqLwotI2lmZGVmIENPTU1FTlQKLSAgICAgICAgLyog RG8gTk9UIGV4cGFuZCB0aGlzIG9uZSEgKi8KLSAgICAgICAgaWYgKHpmbnFmcChwLENLTUFYUEFU SCx0bXBidWYpKQotICAgICAgICAgIHAgPSB0bXBidWY7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwot ICAgICAgICBtYWtlbGlzdChwLGNkbXNnZmlsZSwxNik7Ci0gICAgICAgIG1ha2VzdHIoJmNkbXNn c3RyLHApOwotICAgICAgICAvKiBwcmludGYoImNkbXNnc3RyPSVzXG4iLGNkbXNnc3RyKTsgKi8K LSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgWEFfQ0RNUzogICAgICAgICAgICAgICAgICAg ICAvKiBDRCBtZXNzYWdlcyAqLwotICAgICAgICB5ID0gbG9va3VwKG9rdGFiLHAsbm9rdGFiLCZ6 KTsKLSAgICAgICAgaWYgKHkgPCAwKSByZXR1cm4oLTEpOwotICAgICAgICBzcnZjZG1zZyA9IHk7 Ci0gICAgICAgIC8qIHByaW50Zigic3J2Y2Rtc2c9JWRcbiIsc3J2Y2Rtc2cpOyAqLwotICAgICAg ICBicmVhazsKLQotI2lmbmRlZiBOT1hGRVIKLSAgICAgIGNhc2UgWEFfSUtMRzogICAgICAgICAg ICAgICAgICAgICAvKiBUcmFuc2ZlciBsb2cgb24vb2ZmICovCi0gICAgICAgIHkgPSBsb29rdXAo b2t0YWIscCxub2t0YWIsJnopOwotICAgICAgICBpZiAoeSA8IDApIHJldHVybigtMSk7Ci0gICAg ICAgIHhmZXJsb2cgPSB5OwotICAgICAgICAvKiBwcmludGYoInhmZXJsb2c9JWRcbiIseGZlcmxv Zyk7ICovCi0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFhBX0lLRkk6ICAgICAgICAgICAg ICAgICAgICAgLyogVHJhbnNmZXIgbG9nIGZpbGUgKi8KLQlpZiAoIWlzYWJzb2x1dGUocCkpCi0J ICBpZiAoemZucWZwKHAsQ0tNQVhQQVRILHRtcGJ1ZikpCi0JICAgIHAgPSB0bXBidWY7Ci0gICAg ICAgIG1ha2VzdHIoJnhmZXJmaWxlLHApOwotICAgICAgICB4ZmVybG9nID0gMTsKLSAgICAgICAg LyogcHJpbnRmKCJ4ZmVyZmlsZT0lc1xuIix4ZmVyZmlsZSk7ICovCi0gICAgICAgIGJyZWFrOwot Ci0gICAgICBjYXNlIFhBX0JBRkk6ICAgICAgICAgICAgICAgICAgICAgLyogSUtTOiBiYW5uZXIg KGdyZWV0aW5nKSBmaWxlICovCi0JaWYgKCFpc2Fic29sdXRlKHApKQotCSAgaWYgKHpmbnFmcChw LENLTUFYUEFUSCx0bXBidWYpKQotCSAgICBwID0gdG1wYnVmOwotICAgICAgICBtYWtlc3RyKCZi YW5uZXJmaWxlLHApOwotICAgICAgICAvKiBwcmludGYoImJhbm5lcmZpbGU9JXNcbiIsYmFubmVy ZmlsZSk7ICovCi0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZuZGVm IE5PSEVMUAotICAgICAgY2FzZSBYQV9IRUxQOiAgICAgICAgICAgICAgICAgICAgIC8qIEhlbHAg Ki8KLSAgICAgICAgLyogcHJpbnRmKCJoZWxwXG4iKTsgKi8KLSAgICAgICAgZm9yIChpID0gMDsg aSA8PSBYQV9NQVg7IGkrKykKLSAgICAgICAgICBpZiAoeG9wdGhscFtpXSkKLSAgICAgICAgICAg IHByaW50ZigiJXNcbiAgICVzXG5cbiIseG9wdGhscFtpXSx4YXJnaGxwW2ldKTsKLSAgICAgICAg aWYgKHN0YXlmbGcgfHwgd2hhdCA9PSBXX0NPTU1BTkQpCi0gICAgICAgICAgYnJlYWs7Ci0gICAg ICAgIGVsc2UKLSAgICAgICAgICBkb2V4aXQoR09PRF9FWElULC0xKTsKLSNlbmRpZiAvKiBOT0hF TFAgKi8KLQotI2lmbmRlZiBOT0hFTFAKLSAgICAgIGNhc2UgWEFfSEVGSTogICAgICAgICAgICAg ICAgICAgICAvKiBJS1M6IGN1c3RvbSBoZWxwIGZpbGUgKi8KLQlpZiAoIWlzYWJzb2x1dGUocCkp Ci0JICBpZiAoemZucWZwKHAsQ0tNQVhQQVRILHRtcGJ1ZikpCi0JICAgIHAgPSB0bXBidWY7Ci0g ICAgICAgIG1ha2VzdHIoJmhlbHBmaWxlLHApOwotICAgICAgICAvKiBwcmludGYoImhlbHBmaWxl PSVzXG4iLGhlbHBmaWxlKTsgKi8KLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogTk9IRUxQICov Ci0KLSNpZmRlZiBDS19MT0dJTgotICAgICAgY2FzZSBYQV9USU1POgotICAgICAgICBpZiAoIXJk aWdpdHMocCkpCi0gICAgICAgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgbG9naW50aW1vID0gYXRv aShwKTsKLSAgICAgICAgLyogcHJpbnRmKCJsb2dpbnRpbW89JWRcbiIscCk7ICovCi0gICAgICAg IGJyZWFrOwotI2VuZGlmIC8qIENLX0xPR0lOICovCi0KLSAgICAgIGNhc2UgWEFfTk9JTjogICAg ICAgICAgICAgICAgICAgICAvKiBObyBpbnRlcnJ1cHRzICovCi0jaWZuZGVmIE5PSUNQCi0gICAg ICAgIGNtZGludCA9IDA7Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLQl4c3VzcGVuZCA9IDA7Ci0gICAg ICAgIGJyZWFrOwotCi0jaWZkZWYgVU5JWAotICAgICAgY2FzZSBYQV9VTkJVRjoJCQkvKiBVbmJ1 ZmZlcmVkIGNvbnNvbGUgaS9vKi8KLQlicmVhazsJCQkJLyogVGhpcyBvbmUgaXMgaGFuZGxlZCBp biBja2NtYWkuYyAqLwotI2VuZGlmCS8qIFVOSVggKi8KLQotI2lmZGVmIElLU0RCCi0gICAgICBj YXNlIFhBX0RCRkk6IHsKLSAgICAgICAgICBleHRlcm4gY2hhciAqIGRiZGlyLCAqIGRiZmlsZTsK LSAgICAgICAgICBleHRlcm4gaW50IGRiZW5hYmxlZDsKLSAgICAgICAgICBzdHJ1Y3QgemZuZnAg KiB6ejsKLSAgICAgICAgICBpZiAoKHp6ID0gemZucWZwKHAsQ0tNQVhQQVRILHRtcGJ1ZikpKSB7 Ci0JICAgICAgY2hhciAqcywgKnMyID0gTlVMTDsKLSAgICAgICAgICAgICAgbWFrZXN0cigmZGJk aXIsenotPmZwYXRoKTsKLSAgICAgICAgICAgICAgbWFrZXN0cigmZGJmaWxlLHp6LT5mcGF0aCk7 Ci0JICAgICAgZm9yIChzID0gZGJkaXI7ICpzOyBzKyspIHsKLQkJICBpZiAoSVNESVJTRVAoKnMp KQotCQkgICAgczIgPSBzKzE7Ci0JICAgICAgfQotCSAgICAgIGlmIChzMikgKnMyID0gTlVMOwot CSAgICAgIGRlYnVnKEYxMTAsIlhBX0RCRkkgZGJkaXIiLGRiZGlyLDApOwotCSAgICAgIGRlYnVn KEYxMTAsIlhBX0RCRkkgZGJmaWxlIixkYmZpbGUsMCk7Ci0gICAgICAgICAgICAgIGRiZW5hYmxl ZCA9IDE7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2Fz ZSBYQV9EQkFTOiB7Ci0gICAgICAgICAgZXh0ZXJuIGludCBkYmVuYWJsZWQ7Ci0gICAgICAgICAg eSA9IGxvb2t1cChva3RhYixwLG5va3RhYiwmeik7Ci0gICAgICAgICAgaWYgKHkgPCAwKSByZXR1 cm4oLTEpOwotICAgICAgICAgIGRiZW5hYmxlZCA9IHk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAg ICB9Ci0jZW5kaWYgLyogSUtTREIgKi8KLQotICAgICAgY2FzZSBYQV9WRVJTOiB7Ci0JICBleHRl cm4gY2hhciAqIGNrX3NfdmVyLCAqIGNrX3NfeHZlcjsKLQkgIHByaW50ZigiJXMiLGNrX3NfdmVy KTsKLQkgIGlmICgqY2tfc194dmVyKQotCSAgICBwcmludGYoIiBbJXNdXG4iLGNrX3NfeHZlcik7 Ci0JICBwcmludGYoIlxuIik7Ci0JICBpZiAoc3RheWZsZyB8fCB3aGF0ID09IFdfQ09NTUFORCkK LQkgICAgYnJlYWs7Ci0JICBlbHNlCi0JICAgIGRvZXhpdChHT09EX0VYSVQsLTEpOwotICAgICAg fQotI2lmbmRlZiBOT1hGRVIKLSNpZmRlZiBDS19QRVJNUwotICAgICAgY2FzZSBYQV9OUFJNOiB7 Ci0JICBleHRlcm4gaW50IGF0bHByaSwgYXRscHJvLCBhdGdwcmksIGF0Z3BybzsKLQkgIGF0bHBy aSA9IDA7Ci0JICBhdGxwcm8gPSAwOwotCSAgYXRncHJpID0gMDsKLQkgIGF0Z3BybyA9IDA7Ci0J ICBicmVhazsKLSAgICAgIH0KLSNlbmRpZiAvKiBDS19QRVJNUyAqLwotI2VuZGlmIC8qIE5PWEZF UiAqLwotCi0jaWZkZWYgS1VJCi0gICAgICBjYXNlIFhBX1NDQUxFOgotICAgICAgICBrdWlfaW5p dC5yZXNpemVNb2RlID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFhBX0NIR0Q6Ci0g ICAgICAgIGt1aV9pbml0LnJlc2l6ZU1vZGUgPSAyOwotICAgICAgICBicmVhazsKLSAgICAgIGNh c2UgWEFfV01BWDoKLSAgICAgICAga3VpX2luaXQubkNtZFNob3cgPSBTV19NQVhJTUlaRTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFhBX1dNSU46Ci0gICAgICAgIGt1aV9pbml0Lm5DbWRT aG93ID0gU1dfTUlOSU1JWkU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFhBX1hQT1M6 Ci0gICAgICAgIGlmICghcmRpZ2l0cyhwKSkKLSAgICAgICAgICByZXR1cm4oLTEpOwotCWt1aV9p bml0LnBvc19pbml0Kys7Ci0Ja3VpX2luaXQucG9zX3ggPSBhdG9pKHApOwotICAgICAgICBicmVh azsKLQotICAgICAgY2FzZSBYQV9ZUE9TOgotICAgICAgICBpZiAoIXJkaWdpdHMocCkpCi0gICAg ICAgICAgcmV0dXJuKC0xKTsKLQlrdWlfaW5pdC5wb3NfaW5pdCsrOwotCWt1aV9pbml0LnBvc195 ID0gYXRvaShwKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgWEFfRk5BTTogewotCSAg ZXh0ZXJuIHN0cnVjdCBfa3VpX2luaXQga3VpX2luaXQ7Ci0JICBleHRlcm4gc3RydWN0IGtleXRh YiAqIHRlcm1fZm9udDsKLQkgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiICogX3Rlcm1fZm9udDsKLQkg IGV4dGVybiBpbnQgdHRfZm9udCwgbnRlcm1mb250OwotCSAgaW50IHgsIHo7Ci0JICBpZiAobnRl cm1mb250ID09IDApCi0JICAgIEJ1aWxkRm9udFRhYmxlKCZ0ZXJtX2ZvbnQsICZfdGVybV9mb250 LCAmbnRlcm1mb250KTsKLQkgIGlmICghKHRlcm1fZm9udCAmJiBfdGVybV9mb250ICYmIG50ZXJt Zm9udCA+IDApKSB7Ci0gICAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gY29uc3RydWN0IEZv bnQgRmFjZW5hbWUgVGFibGVcbiIpOwotCSAgICByZXR1cm4oMCk7Ci0gICAgICAgICAgfQotCSAg eCA9IGxvb2t1cCh0ZXJtX2ZvbnQscCxudGVybWZvbnQsJnopOwotCSAgaWYgKHggPCAwKSB7Ci0g ICAgICAgICAgICAgIHggPSBsb29rdXAoX3Rlcm1fZm9udCxwLG50ZXJtZm9udCwmeik7Ci0gICAg ICAgICAgICAgIGlmICh4IDwgMCkgewotICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/SW52YWxp ZCBGb250IEZhY2VuYW1lOiAlc1xuIixwKTsKLSAgICAgICAgICAgICAgICAgIHJldHVybigwKTsK LSAgICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQkgIHR0X2ZvbnQgPSB4OwotCSAga3VpX2lu aXQuZmFjZV9pbml0Kys7Ci0JICBtYWtlc3RyKCZrdWlfaW5pdC5mYWNlbmFtZSx0ZXJtX2ZvbnRb el0ua3dkKTsKLQkgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBYQV9GU0laOiB7Ci0JICBl eHRlcm4gc3RydWN0IF9rdWlfaW5pdCBrdWlfaW5pdDsKLQkgIGV4dGVybiBpbnQgdHRfZm9udF9z aXplOwotICAgICAgICAgIGNoYXIgKiBxOwotICAgICAgICAgIGludCBoYWxmcG9pbnQgPSAwOwot Ci0JICBrdWlfaW5pdC5mb250X2luaXQrKzsKLSAgICAgICAgICBmb3IgKCBxPXAgOyAqcSA7IHEr KyApIHsKLSAgICAgICAgICAgICAgaWYgKCAqcSA9PSAnLicpIHsKLSAgICAgICAgICAgICAgICAg ICpxKysgPSAnXDAnOwotICAgICAgICAgICAgICAgICAgaWYgKCFyZGlnaXRzKHEpKQotICAgICAg ICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgICAgICAgICAgICBpZiAoISpxIHx8 IGF0b2kocSkgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgLyogbm8gaGFs ZnBvaW50ICovCi0gICAgICAgICAgICAgICAgICBoYWxmcG9pbnQgPSAxOwotICAgICAgICAgICAg ICAgICAgaWYgKGF0b2kocSkgIT0gNSkKLSAgICAgICAgICAgICAgICBwcmludGYoIj8gRm9udCBz aXplcyBhcmUgdHJlYXRlZCBpbiBoYWxmLXBvaW50IGluY3JlbWVudHNcbiIpOwotICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0JICBpZiAoIXJk aWdpdHMocCkpCi0JICAgIHJldHVybigtMSk7Ci0JICB0dF9mb250X3NpemUgPSBrdWlfaW5pdC5m b250X3NpemUgPSAyICogYXRvaShwKSArIGhhbGZwb2ludDsKLQkgIGJyZWFrOwotICAgICAgfQot ICAgICAgY2FzZSBYQV9OT01OOgotICAgICAgICBrdWlfaW5pdC5ub21lbnViYXIgPSAxOwotICAg ICAgICBicmVhazsKLSAgICAgIGNhc2UgWEFfTk9UQjoKLSAgICAgICAga3VpX2luaXQubm90b29s YmFyID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFhBX05PU0I6Ci0gICAgICAgIGt1 aV9pbml0Lm5vc3RhdHVzYmFyID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFhBX05P QkFSOgotICAgICAgICBrdWlfaW5pdC5ub21lbnViYXIgPSAxOwotICAgICAgICBrdWlfaW5pdC5u b3Rvb2xiYXIgPSAxOwotICAgICAgICBrdWlfaW5pdC5ub3N0YXR1c2JhciA9IDE7Ci0gICAgICAg IGJyZWFrOwotI2VuZGlmIC8qIEtVSSAqLwotCi0jaWZuZGVmIE5PUFVTSAotICAgIGNhc2UgWEFf Tk9QVVNIOgotICAgICAgICBub3B1c2ggPSAxOwotICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBO T1BVU0ggKi8KLSNpZmRlZiBPUzIKLSAgICBjYXNlIFhBX0xPQ0s6Ci0gICAgICAgIHR0X3Njcm9s bCA9IDA7Ci0gICAgICAgIHR0X2VzY2FwZSA9IDA7Ci0jaWZuZGVmIE5PUFVTSAotICAgICAgICBu b3B1c2ggPSAxOwotI2VuZGlmCi0jaWZkZWYgS1VJCi0gICAgICAgIGt1aV9pbml0Lm5vbWVudWJh ciA9IDE7Ci0gICAgICAgIGt1aV9pbml0Lm5vdG9vbGJhciA9IDE7Ci0gICAgICAgIGt1aV9pbml0 Lm5vc3RhdHVzYmFyID0gMTsKLSNlbmRpZgotICAgICAgICBicmVhazsKLSNpZmRlZiBLVUkKLSAg ICAgIGNhc2UgWEFfTk9DTE9TRToKLSAgICAgICAga3VpX2luaXQubm9jbG9zZSA9IDE7Ci0gICAg ICAgIGJyZWFrOwotI2VuZGlmIC8qIEtVSSAqLwotICAgICAgY2FzZSBYQV9OT1NDUk9MTDoKLSAg ICAgICAgdHRfc2Nyb2xsID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFhBX05PRVND QVBFOgotICAgICAgICB0dF9lc2NhcGUgPSAwOwotICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBP UzIgKi8KLQotI2lmbmRlZiBOT0xPQ0FMCi0gICAgICBjYXNlIFhBX1RFUk06IHsJCQkvKiBUZXJt aW5hbCB0eXBlICovCi0gICAgICAgICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgdHR5cHRhYltdOwot ICAgICAgICAgIGV4dGVybiBpbnQgbnR0eXA7Ci0jaWZkZWYgVE5DT0RFCi0JICBleHRlcm4gY2hh ciAqIHRuX3Rlcm07Ci0jZW5kaWYgLyogVE5DT0RFICovCi0jaWZkZWYgT1MyCi0JICBpbnQgeCwg ejsKLQkgIGV4dGVybiBpbnQgdHRfdHlwZSwgdHRfdHlwZV9tb2RlOwotCSAgeCA9IGxvb2t1cCh0 dHlwdGFiLHAsbnR0eXAsJnopOwotCSAgaWYgKHggPCAwKQotCSAgICByZXR1cm4oLTEpOwotCSAg dHRfdHlwZV9tb2RlID0gdHRfdHlwZSA9IHg7Ci0jZW5kaWYgLyogT1MyICovCi0jaWZkZWYgVE5D T0RFCi0JICBtYWtlc3RyKCZ0bl90ZXJtLHApOwotI2VuZGlmIC8qIFROQ09ERSAqLwotCSAgYnJl YWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIFhBX0NTRVQ6IHsJCQkvKiBSZW1vdGUgQ2hhcmFjdGVy IFNldCAqLwotI2lmbmRlZiBOT0NTRVRTCi0jaWZkZWYgQ0tPVU5JCi0gICAgICAgICAgZXh0ZXJu IHN0cnVjdCBrZXl0YWIgdHhydGFiW107Ci0gICAgICAgICAgZXh0ZXJuIGludCBudHhydGFiOwot ICAgICAgICAgIHggPSBsb29rdXAodHhydGFiLHAsbnR4cnRhYiwmeik7Ci0jZWxzZSAvKiBDS09V TkkgKi8KLSAgICAgICAgICBleHRlcm4gc3RydWN0IGtleXRhYiB0dGNzdGFiW107Ci0gICAgICAg ICAgZXh0ZXJuIGludCBudGVybWM7Ci0gICAgICAgICAgeCA9IGxvb2t1cCh0dGNzdGFiLHAsbnRl cm1jLCZ6KTsKLSNlbmRpZiAvKiBDS09VTkkgKi8KLQkgIGlmICh4IDwgMCkKLQkgICAgcmV0dXJu KC0xKTsKLSAgICAgICAgICBzZXRyZW1jaGFyc2V0KHosNCAvKiBUVF9HUl9BTEwgKGluIGNrdXVz Ny5jKSAqLyk7Ci0jZWxzZSAvKiBOT0NTRVRTICovCi0gICAgICAgICAgcmV0dXJuKC0xKTsKLSNl bmRpZiAvKiBOT0NTRVRTICovCi0JICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgWEFfUk9X UzogewkJCS8qIFNjcmVlbiByb3dzIChoZWlnaHQpICovCi0jaWZkZWYgT1MyCi0gICAgICAgICAg ZXh0ZXJuIGludCByb3dfaW5pdDsKLSNlbHNlIC8qIE9TMiAqLwotCSAgZXh0ZXJuIGludCB0dF9y b3dzOwotI2VuZGlmIC8qIE9TMiAqLwotCSAgaWYgKCFyZGlnaXRzKHApKQotCSAgICByZXR1cm4o LTEpOwotI2lmZGVmIE9TMgotCSAgaWYgKCFvczJfc2V0dGVybWhlaWdodChhdG9pKHApKSkKLQkg ICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICByb3dfaW5pdCsrOwotI2Vsc2UgIC8qIE5vdCBPUy8y ICovCi0JICB0dF9yb3dzID0gYXRvaShwKTsKLSNlbmRpZiAvKiBPUzIgKi8KLQkgIGJyZWFrOwot ICAgICAgfQotICAgICAgY2FzZSBYQV9DT0xTOiB7CQkJLyogU2NyZWVuIGNvbHVtbnMgKHdpZHRo KSAqLwotI2lmZGVmIE9TMgotICAgICAgICAgIGV4dGVybiBpbnQgY29sX2luaXQ7Ci0jZWxzZSAv KiBPUzIgKi8KLQkgIGV4dGVybiBpbnQgdHRfY29sczsKLSNlbmRpZiAvKiBPUzIgKi8KLQkgIGlm ICghcmRpZ2l0cyhwKSkKLQkgICAgcmV0dXJuKC0xKTsKLSNpZmRlZiBPUzIKLQkgIGlmICghb3My X3NldHRlcm13aWR0aChhdG9pKHApKSkKLQkgICAgcmV0dXJuKC0xKTsKLSAgICAgICAgICBjb2xf aW5pdCsrOwotI2Vsc2UgIC8qIE5vdCBPUy8yICovCi0JICB0dF9jb2xzID0gYXRvaShwKTsKLSNl bmRpZiAvKiBPUzIgKi8KLQkgIGJyZWFrOwotICAgICAgfQotI2lmZGVmIE9TMgotICAgIGNhc2Ug WEFfVElUTDogewotICAgICAgICBleHRlcm4gY2hhciB1c2VydGl0bGVbXTsKLSAgICAgICAgY2tz dHJuY3B5KHVzZXJ0aXRsZSxwLDY0KTsKLSAgICAgICAgb3Myc2V0dGl0bGUoIiIsMSk7Ci0gICAg ICAgIGJyZWFrOwotICAgIH0KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIENPTU1FTlQJCQkJ LyogVE8gQkUgRklMTEVEIElOIC4uLiAqLwotICAgICAgY2FzZSBYQV9URUw6CQkJLyogTWFrZSBh IFRlbG5ldCBjb25uZWN0aW9uICovCi0gICAgICBjYXNlIFhBX0ZUUDoJCQkvKiBNYWtlIGFuIEZU UCBjb25uZWN0aW9uICovCi0gICAgICBjYXNlIFhBX1NTSDoJCQkvKiBNYWtlIGFuIFNTSCBjb25u ZWN0aW9uICovCi0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0jaWZuZGVmIE5PU1BMCi0gICAgICBj YXNlIFhBX1VTRVI6CQkJLyogVXNlcm5hbWUgZm9yIGxvZ2luICovCi0jaWZkZWYgSUtTRAotCWlm ICghaW5zZXJ2ZXIpCi0jZW5kaWYgLyogSUtTRCAqLwotCXsKLQkgICAgY2tzdHJuY3B5KHVpZGJ1 ZiwqeGFyZ3YsVUlEQlVGTEVOKTsKLQkgICAgaGF2ZWZ0cHVpZCA9IDE7Ci0JfQotCWJyZWFrOwot I2VuZGlmIC8qIE5PU1BMICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0gICAgICBkZWZhdWx0 OgotICAgICAgICByZXR1cm4oLTEpOwotICAgIH0KLSAgICByZXR1cm4oMCk7Ci19Ci0KLSNpZmRl ZiBJS1NECi0jaWZkZWYgSUtTRENPTkYKLSNkZWZpbmUgSUtTX0FOT04gMAotI2RlZmluZSBJS1Nf QkFGSSAxCi0jZGVmaW5lIElLU19DREZJIDIKLSNkZWZpbmUgSUtTX0NETVMgMwotI2RlZmluZSBJ S1NfSEVGSSA0Ci0jZGVmaW5lIElLU19BTkZJIDUKLSNkZWZpbmUgSUtTX1VTRkkgNgotI2RlZmlu ZSBJS1NfSUtMRyA3Ci0jZGVmaW5lIElLU19JS0ZJIDgKLSNkZWZpbmUgSUtTX0RCQVMgOQotI2Rl ZmluZSBJS1NfREJGSSAxMAotI2RlZmluZSBJS1NfUEVSTSAxMQotI2RlZmluZSBJS1NfUFJJViAx MgotI2RlZmluZSBJS1NfUk9PVCAxMwotI2RlZmluZSBJS1NfVElNTyAxNAotI2RlZmluZSBJS1Nf V1RGSSAxNQotI2RlZmluZSBJS1NfV1RNUCAxNgotI2RlZmluZSBJS1NfU1JWUiAxNwotI2RlZmlu ZSBJS1NfTk9JTiAxOAotI2RlZmluZSBJS1NfSU5JVCAxOQotI2RlZmluZSBJS1NfQU5MRyAyMAot I2RlZmluZSBJS1NfQUNDVCAyMQotI2RlZmluZSBJS1NfTlRET00gMjIKLSNkZWZpbmUgSUtTX1NZ U0wgMjMKLQotI2lmZGVmIENLX0xPR0lOCi1zdGF0aWMgc3RydWN0IGtleXRhYiBpa3NhbnRhYltd ID0gewotI2lmZGVmIE9TMgotICAgIHsgImFjY291bnQiLCAgICAgSUtTX0FDQ1QsIDAgfSwKLSNl bmRpZiAvKiBPUzIgKi8KLSAgICB7ICJpbml0ZmlsZSIsICAgIElLU19BTkZJLCAwIH0sCi0gICAg eyAibG9naW4iLCAgICAgICBJS1NfQU5MRywgMCB9LAotI2lmZGVmIFVOSVgKLSAgICB7ICJyb290 IiwgICAgICAgIElLU19ST09ULCAwIH0sCi0jZWxzZQotI2lmZGVmIENLUk9PVAotICAgIHsgInJv b3QiLCAgICAgICAgSUtTX1JPT1QsIDAgfSwKLSNlbmRpZiAvKiBDS1JPT1QgKi8KLSNlbmRpZiAv KiBVTklYICovCi0gICAgeyAiIiwgMCwgMCB9Ci19Owotc3RhdGljIGludCBuaWtzYW50YWIgPSBz aXplb2YoaWtzYW50YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpIC0gMTsKLSNlbmRpZiAvKiBD S19MT0dJTiAqLwotCi1zdGF0aWMgc3RydWN0IGtleXRhYiBpa3N0YWJbXSA9IHsKLSNpZmRlZiBD S19MT0dJTgotICAgIHsgImFub255bW91cyIsICAgSUtTX0FOT04sIDAgfSwKLSNlbmRpZiAvKiBD S19MT0dJTiAqLwotICAgIHsgImJhbm5lcmZpbGUiLCAgSUtTX0JBRkksIDAgfSwKLSAgICB7ICJj ZGZpbGUiLCAgICAgIElLU19DREZJLCAwIH0sCi0gICAgeyAiY2RtZXNzYWdlIiwgICBJS1NfQ0RN UywgMCB9LAotICAgIHsgImNkbXNnIiwgICAgICAgSUtTX0NETVMsIENNX0lOViB9LAotI2lmZGVm IElLU0RCCi0gICAgeyAiZGF0YWJhc2UiLCAgICBJS1NfREJBUywgMCB9LAotICAgIHsgImRiZmls ZSIsICAgICAgSUtTX0RCRkksIDAgfSwKLSNlbmRpZiAvKiBJS1NEQiAqLwotI2lmZGVmIENLX0xP R0lOCi0jaWZkZWYgTlQKLSAgICB7ICJkZWZhdWx0LWRvbWFpbiIsIElLU19OVERPTSwgMCB9LAot I2VuZGlmIC8qIE5UICovCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSNpZm5kZWYgTk9IRUxQCi0g ICAgeyAiaGVscGZpbGUiLCAgICBJS1NfSEVGSSwgMCB9LAotI2VuZGlmIC8qIE5PSEVMUCAqLwot ICAgIHsgImluaXRmaWxlIiwgICAgSUtTX0lOSVQsIDAgfSwKLSAgICB7ICJuby1pbml0ZmlsZSIs IElLU19OT0lOLCAwIH0sCi0jaWZkZWYgQ0tfTE9HSU4KLSNpZmRlZiBDS19QRVJNCi0gICAgeyAi cGVybWlzc2lvbnMiLCBJS1NfUEVSTSwgMCB9LAotICAgIHsgInBlcm1zIiwgICAgICAgSUtTX1BF Uk0sIENNX0lOViB9LAotI2VuZGlmIC8qIENLX1BFUk0gKi8KLSNpZmRlZiBVTklYCi0gICAgeyAi cHJpdmlkIiwgICAgICBJS1NfUFJJViwgMCB9LAotI2VuZGlmIC8qIFVOSVggKi8KLSAgICB7ICJz ZXJ2ZXItb25seSIsIElLU19TUlZSLCAwIH0sCi0jaWZkZWYgQ0tTWVNMT0cKLSAgICB7ICJzeXNs b2ciLCAgICAgIElLU19TWVNMLCAwIH0sCi0jZW5kaWYgLyogQ0tTWVNMT0cgKi8KLSAgICB7ICJ0 aW1lb3V0IiwgICAgIElLU19USU1PLCAwIH0sCi0gICAgeyAidXNlcmZpbGUiLCAgICBJS1NfVVNG SSwgMCB9LAotI2lmZGVmIENLV1RNUAotICAgIHsgInd0bXBmaWxlIiwgICAgSUtTX1dURkksIDAg fSwKLSAgICB7ICJ3dG1wbG9nIiwgICAgIElLU19XVE1QLCAwIH0sCi0jZW5kaWYgLyogQ0tXVE1Q ICovCi0jZW5kaWYgLyogQ0tfTE9HSU4gKi8KLSAgICB7ICJ4ZmVyZmlsZSIsICAgIElLU19JS0ZJ LCAwIH0sCi0gICAgeyAieGZlcmxvZyIsICAgICBJS1NfSUtMRywgMCB9Ci19Owotc3RhdGljIGlu dCBuaWtzdGFiID0gc2l6ZW9mKGlrc3RhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYik7Ci0jZW5k aWYgLyogSUtTRENPTkYgKi8KLQotI2lmbmRlZiBOT0lDUAotaW50Ci1zZXRpa3MoKSB7CQkJCS8q IFNFVCBJS1MgKi8KLSNpZmRlZiBJS1NEQ09ORgotI2lmZGVmIENLX0xPR0lOCi0gICAgZXh0ZXJu IGludCBja3hzeXNsb2csIGNreHd0bXAsIGNreGFub247Ci0jaWZkZWYgVU5JWAotICAgIGV4dGVy biBpbnQgY2t4cHJpdjsKLSNlbmRpZiAvKiBVTklYICovCi0jaWZkZWYgQ0tfUEVSTVMKLSAgICBl eHRlcm4gaW50IGNreHBlcm1zOwotI2VuZGlmIC8qIENLX1BFUk1TICovCi0gICAgZXh0ZXJuIGNo YXIgKiBhbm9uZmlsZSwgKiB1c2VyZmlsZSwgKiBhbm9ucm9vdDsKLSNpZmRlZiBPUzIKLSAgICBl eHRlcm4gY2hhciAqIGFub25hY2N0OwotI2VuZGlmIC8qIE9TMiAqLwotI2lmZGVmIE5UCi0gICAg ZXh0ZXJuIGNoYXIgKiBpa3NfZG9tYWluOwotI2VuZGlmIC8qIE5UICovCi0jZW5kaWYgLyogQ0tf TE9HSU4gKi8KLSNpZmRlZiBDS1dUTVAKLSAgICBleHRlcm4gY2hhciAqIHd0bXBmaWxlOwotI2Vu ZGlmIC8qIENLV1RNUCAqLwotICAgIGV4dGVybiBpbnQgc3J2Y2Rtc2csIHN1Y2Nlc3MsIGlrc2Rj ZiwgcmNmbGFnLCBub2luaXQsIGFyZ194OwotICAgIGV4dGVybiBjaGFyICogY2Rtc2dmaWxlW10s ICogY2Rtc2dzdHIsICprZXJtcmM7Ci0gICAgZXh0ZXJuIHh4X3N0cnAgeHhzdHJpbmc7Ci0gICAg aW50IHgsIHksIHo7Ci0gICAgY2hhciAqczsKLSAgICBjaGFyIHRtcGJ1ZltDS01BWFBBVEgrMV07 Ci0KLSAgICBpZiAoKHkgPSBjbWtleShpa3N0YWIsbmlrc3RhYiwiIiwiIix4eHN0cmluZykpIDwg MCkKLSAgICAgIHJldHVybih5KTsKLQotI2lmZGVmIENLX0xPR0lOCi0gICAgaWYgKHkgPT0gSUtT X0FOT04pIHsKLSAgICAgICAgaWYgKCh5ID0gY21rZXkoaWtzYW50YWIsbmlrc2FudGFiLCIiLCIi LHh4c3RyaW5nKSkgPCAwKQotCSAgcmV0dXJuKHkpOwotICAgIH0KLSNlbmRpZiAvKiBDS19MT0dJ TiAqLwotCi0gICAgc3dpdGNoICh5KSB7Ci0jaWZkZWYgQ0tTWVNMT0cKLSAgICAgIGNhc2UgSUtT X1NZU0w6ICAgICAgICAgICAgICAgICAgICAgLyogSUtTOiBTeXNsb2cgbGV2ZWwgKi8KLSAgICAg ICAgaWYgKCh6ID0gY21rZXkob2t0YWIsbm9rdGFiLCIiLCIiLHh4c3RyaW5nKSkgPCAwKQotCSAg cmV0dXJuKHopOwotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAg ICAgICAgaWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSNpZm5kZWYgU1lTTE9HTEVW RUwKLSAgICAgICAgLyogSWYgc3BlY2lmaWVkIG9uIGNjIGNvbW1hbmQgbGluZSwgdXNlciBjYW4n dCBjaGFuZ2UgaXQuICovCi0gICAgICAgIGlmICghaW5zZXJ2ZXIpICAgICAgICAgICAgICAgICAg LyogRG9uJ3QgYWxsb3cgdm9sdW1pbm91cyBzeXNsb2dnaW5nICovCi0gICAgICAgICAgaWYgKHkg PiBTWVNMR19GQSkgICAgICAgICAgICAgLyogYnkgb3JkaW5hcnkgdXNlcnMuICovCi0gICAgICAg ICAgICB5ID0gU1lTTEdfRkE7Ci0jZW5kaWYgLyogU1lTTE9HTEVWRUwgKi8KLSAgICAgICAgaWYg KHkgPCAwKSByZXR1cm4oLTEpOwotI2lmZGVmIERFQlVHCi0gICAgICAgIGlmICh5ID49IFNZU0xH X0RCKQotICAgICAgICAgIGlmICghZGVibG9nKQotICAgICAgICAgICAgZGVibG9nID0gZGVib3Bu KCJkZWJ1Zy5sb2ciLDApOwotI2VuZGlmIC8qIERFQlVHICovCi0jaWZkZWYgU1lTTE9HTEVWRUwK LSAgICAgICAgLyogSWYgc3BlY2lmaWVkIG9uIGNjIGNvbW1hbmQgbGluZSwgdXNlciBjYW4ndCBj aGFuZ2UgaXQuICovCi0gICAgICAgIHkgPSBTWVNMT0dMRVZFTDsKLSNlbmRpZiAvKiBTWVNMT0dM RVZFTCAqLwotICAgICAgICBja3hzeXNsb2cgPSB5OwotICAgICAgICAvKiBwcmludGYoImNreHN5 c2xvZz0lZFxuIixja3hzeXNsb2cpOyAqLwotICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBDS1NZ U0xPRyAqLwotCi0jaWZkZWYgQ0tfTE9HSU4KLSNpZmRlZiBOVAotICAgICAgY2FzZSBJS1NfTlRE T006Ci0gICAgICAgIGlmICgoeiA9IGNtdHh0KAotICJET01BSU4gdG8gYmUgdXNlZCBmb3IgdXNl ciBhdXRoZW50aWNhdGlvbiB3aGVuIG5vbmUgaXMgc3BlY2lmaWVkIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgIiIsICZzLHh4c3RyaW5nKSkgPCAwKQotCSAgcmV0dXJuKHopOwotICAgICAgICBp ZiAoaWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAgICBpZiAoISpzKSBzPSBOVUxM OwotICAgICAgICAgIG1ha2VzdHIoJmlrc19kb21haW4scyk7Ci0gICAgICAgIGJyZWFrOwotI2Vu ZGlmIC8qIE5UICovCi0jaWZkZWYgT1MyCi0gICAgICBjYXNlIElLU19BQ0NUOgotICAgICAgICBp ZiAoKHogPSBjbXR4dCgiTmFtZSBvZiBsb2NhbCBhY2NvdW50IHRvIHVzZSBmb3IgYW5vbnltb3Vz IGxvZ2lucyIsCi0JCQkiR1VFU1QiLCAmcyx4eHN0cmluZykpIDwgMCkKLQkgIHJldHVybih6KTsK LSAgICAgICAgaWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgaWYgKCpz KSB7Ci0gICAgICAgICAgICBtYWtlc3RyKCZhbm9uYWNjdCxzKTsKLSAgICAgICAgfSBlbHNlIGlm ICggYW5vbmFjY3QgKSB7Ci0JICAgIGZyZWUoYW5vbmFjY3QpOwotCSAgICBhbm9uYWNjdCA9IE5V TEw7Ci0JfQotICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBPUzIgKi8KLSAgICAgIGNhc2UgSUtT X0FOTEc6Ci0gICAgICAgIGlmICgoeiA9IGNta2V5KG9rdGFiLG5va3RhYiwiIiwibm8iLHh4c3Ry aW5nKSkgPCAwKQotCSAgcmV0dXJuKHopOwotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDAp IHJldHVybih4KTsKLSAgICAgICAgaWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAg ICAgICAgY2t4YW5vbiA9IHo7Ci0jaWZkZWYgT1MyCi0JaWYgKGNreGFub24gJiYgIWFub25hY2N0 KQotCSAgbWFrZXN0cigmYW5vbmFjY3QsIkdVRVNUIik7Ci0jZW5kaWYgLyogT1MyICovCi0gICAg ICAgIGJyZWFrOwotI2VuZGlmIC8qIENLX0xPR0lOICovCi0gICAgICBjYXNlIElLU19CQUZJOgot ICAgICAgICBpZiAoKHogPSBjbWlmaSgiRmlsZW5hbWUiLCIiLCZzLCZ4LHh4c3RyaW5nKSkgPCAw KQotCSAgcmV0dXJuKHopOwotICAgICAgICBpZiAoeCkgewotICAgICAgICAgICAgcHJpbnRmKCI/ V2lsZGNhcmRzIG5vdCBhbGxvd2VkXG4iKTsKLSAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAg ICAgIH0KLSAgICAgICAgZGVidWcoRjExMCwiYmFubmVyZmlsZSBiZWZvcmUgemZucWZwKCkiLHMs MCk7Ci0gICAgICAgIGlmICh6Zm5xZnAocyxDS01BWFBBVEgsdG1wYnVmKSkgewotICAgICAgICAg ICAgZGVidWcoRjExMCwiYmFubmVyZmlsZSBhZnRlciB6Zm5xZnAoKSIsdG1wYnVmLDApOwotICAg ICAgICAgICAgcyA9IHRtcGJ1ZjsKLSAgICAgICAgfQotICAgICAgICBpZiAoKHggPSBjbWNmbSgp KSA8IDApIHJldHVybih4KTsKLSAgICAgICAgaWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAw KTsKLSAgICAgICAgaWYgKCpzKQotCSAgbWFrZXN0cigmYmFubmVyZmlsZSxzKTsKLSAgICAgICAg YnJlYWs7Ci0gICAgICBjYXNlIElLU19DREZJOgotICAgICAgICBpZiAoKHogPSBjbXR4dCgibGlz dCBvZiBjZCBtZXNzYWdlIGZpbGUgbmFtZXMiLCJSRUFELk1FIiwKLQkJICAgICAgICZzLHh4c3Ry aW5nKSkgPCAwKQotCSAgcmV0dXJuKHopOwotICAgICAgICBpZiAoaWtzZGNmKSByZXR1cm4oc3Vj Y2VzcyA9IDApOwotICAgICAgICBpZiAoKnMpIHsKLSAgICAgICAgICAgIG1ha2VsaXN0KHMsY2Rt c2dmaWxlLDE2KTsKLSAgICAgICAgICAgIG1ha2VzdHIoJmNkbXNnc3RyLHMpOwotICAgICAgICB9 Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBJS1NfQ0RNUzoKLSAgICAgICAgaWYgKCh6ID0g Y21rZXkob2t0YWIsbm9rdGFiLCIiLCJubyIseHhzdHJpbmcpKSA8IDApCi0JICByZXR1cm4oeik7 Ci0gICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICBpZiAo aWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAgICBzcnZjZG1zZyA9IHo7Ci0gICAg ICAgIGJyZWFrOwotICAgICAgY2FzZSBJS1NfSEVGSToKLSAgICAgICAgaWYgKCh6ID0gY21pZmko IkZpbGVuYW1lIiwiIiwmcywmeCx4eHN0cmluZykpIDwgMCkKLQkgIHJldHVybih6KTsKLSAgICAg ICAgaWYgKHgpIHsKLSAgICAgICAgICAgIHByaW50ZigiP1dpbGRjYXJkcyBub3QgYWxsb3dlZFxu Iik7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0gICAgICAgIGlmICh6Zm5x ZnAocyxDS01BWFBBVEgsdG1wYnVmKSkKLSAgICAgICAgICBzID0gdG1wYnVmOwotICAgICAgICBp ZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgaWYgKGlrc2RjZikgcmV0 dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgaWYgKCpzKQotCSAgbWFrZXN0cigmaGVscGZpbGUs cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBJS1NfQU5GSToKLSAgICAgICAgaWYgKCh6 ID0gY21pZmkoIkZpbGVuYW1lIiwiIiwmcywmeCx4eHN0cmluZykpIDwgMCkKLQkgIHJldHVybih6 KTsKLSAgICAgICAgaWYgKHgpIHsKLSAgICAgICAgICAgIHByaW50ZigiP1dpbGRjYXJkcyBub3Qg YWxsb3dlZFxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0gICAgICAg IGlmICh6Zm5xZnAocyxDS01BWFBBVEgsdG1wYnVmKSkKLSAgICAgICAgICBzID0gdG1wYnVmOwot ICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgaWYgKGlr c2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgaWYgKCpzKQotCSAgbWFrZXN0cigm YW5vbmZpbGUscyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBJS1NfVVNGSToKLSAgICAg ICAgaWYgKCh6ID0gY21pZmkoIkZpbGVuYW1lIiwiIiwmcywmeCx4eHN0cmluZykpIDwgMCkKLQkg IHJldHVybih6KTsKLSAgICAgICAgaWYgKHgpIHsKLSAgICAgICAgICAgIHByaW50ZigiP1dpbGRj YXJkcyBub3QgYWxsb3dlZFxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwotICAgICAgICB9 Ci0gICAgICAgIGlmICh6Zm5xZnAocyxDS01BWFBBVEgsdG1wYnVmKSkKLSAgICAgICAgICBzID0g dG1wYnVmOwotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAg ICAgaWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgaWYgKCpzKQotCSAg bWFrZXN0cigmdXNlcmZpbGUscyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBJS1NfSUtG SToKLSAgICAgICAgaWYgKCh6ID0gY21pZmkoIkZpbGVuYW1lIiwiIiwmcywmeCx4eHN0cmluZykp IDwgMCkKLQkgIHJldHVybih6KTsKLSAgICAgICAgaWYgKHgpIHsKLSAgICAgICAgICAgIHByaW50 ZigiP1dpbGRjYXJkcyBub3QgYWxsb3dlZFxuIik7Ci0gICAgICAgICAgICByZXR1cm4oLTkpOwot ICAgICAgICB9Ci0gICAgICAgIGlmICh6Zm5xZnAocyxDS01BWFBBVEgsdG1wYnVmKSkKLSAgICAg ICAgICBzID0gdG1wYnVmOwotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4 KTsKLSAgICAgICAgaWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgaWYg KCpzKSB7Ci0gICAgICAgICAgICBtYWtlc3RyKCZ4ZmVyZmlsZSxzKTsKLSAgICAgICAgICAgIHhm ZXJsb2cgPSAxOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBJS1NfSUtM RzoKLSAgICAgICAgaWYgKCh6ID0gY21rZXkob2t0YWIsbm9rdGFiLCIiLCJubyIseHhzdHJpbmcp KSA8IDApCi0JICByZXR1cm4oeik7Ci0gICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0 dXJuKHgpOwotICAgICAgICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAg ICB4ZmVybG9nID0gejsKLSAgICAgICAgYnJlYWs7Ci0KLSNpZmRlZiBDS19MT0dJTgotI2lmZGVm IENLX1BFUk0KLSAgICAgIGNhc2UgSUtTX1BFUk06Ci0gICAgICAgIGlmICgoeiA9IGNtdHh0KCJP Y3RhbCBmaWxlIHBlcm1zc2lvbiBjb2RlIiwiMDAwIiwKLQkJICAgICAgICZzLHh4c3RyaW5nKSkg PCAwKQotCSAgcmV0dXJuKHopOwotCWlmICh6IDwgMCkgcmV0dXJuKHopOwotICAgICAgICBpZiAo aWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOwotICAgICAgICB5ID0gMDsKLSAgICAgICAgd2hp bGUgKCpzKSB7Ci0gICAgICAgICAgICBpZiAoKnMgPCAnMCcgfHwgKnMgPiAnNycpCi0gICAgICAg ICAgICAgIHJldHVybigtOSk7Ci0gICAgICAgICAgICB5ID0geSAqIDggKyAoKnMrKyAtICcwJyk7 Ci0gICAgICAgIH0KLSAgICAgICAgY2t4cGVybXMgPSB5OwotICAgICAgICBicmVhazsKLSNlbmRp ZiAvKiBDS19QRVJNICovCi0jaWZkZWYgVU5JWAotICAgICAgY2FzZSBJS1NfUFJJVjogICAgICAg ICAgICAgICAgICAgICAvKiBJS1M6IFByaXYnZCBsb2dpbiBhbGxvd2VkICovCi0gICAgICAgIGlm ICgoeiA9IGNta2V5KG9rdGFiLG5va3RhYiwiIiwibm8iLHh4c3RyaW5nKSkgPCAwKQotCSAgcmV0 dXJuKHopOwotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAg ICAgaWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgY2t4cHJpdiA9IHo7 Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIFVOSVggKi8KLQotICAgICAgY2FzZSBJS1NfUk9P VDogICAgICAgICAgICAgICAgICAgICAvKiBJS1M6IEFub255bW91cyByb290ICovCi0JaWYgKCh6 ID0gY21kaXIoIk5hbWUgb2YgZGlzayBhbmQvb3IgZGlyZWN0b3J5IiwiIiwmcywKLQkJICAgICAg IHh4c3RyaW5nKSkgPCAwICkgewotCSAgICBpZiAoeiAhPSAtMykKLQkgICAgICByZXR1cm4oeik7 Ci0JfQotICAgICAgICBpZiAoKnMpIHsKLQkgICAgaWYgKHpmbnFmcChzLENLTUFYUEFUSCx0bXBi dWYpKQotCSAgICAgIHMgPSB0bXBidWY7Ci0gICAgICAgIH0gZWxzZQotCSAgcyA9ICIiOwotICAg ICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgaWYgKGlrc2Rj ZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgaWYgKCpzKQotCSAgbWFrZXN0cigmYW5v bnJvb3Qscyk7Ci0gICAgICAgIC8qIHByaW50ZigiYW5vbnJvb3Q9JXNcbiIsYW5vbnJvb3QpOyAq LwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBJS1NfVElNTzoKLQl6ID0gY21udW0oImxv Z2luIHRpbWVvdXQsIHNlY29uZHMiLCIwIiwxMCwmeCx4eHN0cmluZyk7Ci0JaWYgKHogPCAwKSBy ZXR1cm4oeik7Ci0gICAgICAgIGlmICh4IDwgMCB8fCB4ID4gNzIwMCkgewotICAgICAgICAgICAg cHJpbnRmKCI/VmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDcyMDBcclxuIik7Ci0gICAgICAg ICAgICByZXR1cm4oLTkpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwg MCkgcmV0dXJuKHopOwotICAgICAgICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOwot ICAgICAgICBsb2dpbnRpbW8gPSB4OwotICAgICAgICBicmVhazsKLQotI2lmZGVmIENLV1RNUAot ICAgICAgY2FzZSBJS1NfV1RNUDogICAgICAgICAgICAgICAgICAgICAvKiBJS1M6IHd0bXAgbG9n ICovCi0gICAgICAgIGlmICgoeiA9IGNta2V5KG9rdGFiLG5va3RhYiwiIiwibm8iLHh4c3RyaW5n KSkgPCAwKQotCSAgcmV0dXJuKHopOwotICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJl dHVybih4KTsKLSAgICAgICAgaWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAg ICAgY2t4d3RtcCA9IHo7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIElLU19XVEZJOiAg ICAgICAgICAgICAgICAgICAgIC8qIElLUzogd3RtcCBsb2dmaWxlICovCi0gICAgICAgIGlmICgo eiA9IGNtaWZpKCJGaWxlbmFtZSIsIiIsJnMsJngseHhzdHJpbmcpKSA8IDApCi0JICByZXR1cm4o eik7Ci0gICAgICAgIGlmICh4KSB7Ci0gICAgICAgICAgICBwcmludGYoIj9XaWxkY2FyZHMgbm90 IGFsbG93ZWRcbiIpOwotICAgICAgICAgICAgcmV0dXJuKC05KTsKLSAgICAgICAgfQotICAgICAg ICBpZiAoemZucWZwKHMsQ0tNQVhQQVRILHRtcGJ1ZikpCi0gICAgICAgICAgcyA9IHRtcGJ1ZjsK LSAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgIGlmIChp a3NkY2YpIHJldHVybihzdWNjZXNzID0gMCk7Ci0gICAgICAgIGlmICgqcykKLQkgIG1ha2VzdHIo Jnd0bXBmaWxlLHMpOwotICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBDS1dUTVAgKi8KLSNlbmRp ZiAvKiBDS19MT0dJTiAqLwotI2lmZGVmIElLU0RCCi0gICAgICBjYXNlIElLU19EQkZJOiB7Ci0g ICAgICAgICAgZXh0ZXJuIGNoYXIgKiBkYmRpciwgKiBkYmZpbGU7Ci0gICAgICAgICAgZXh0ZXJu IGludCBkYmVuYWJsZWQ7Ci0gICAgICAgICAgc3RydWN0IHpmbmZwICogeno7Ci0gICAgICAgICAg aWYgKCh6ID0gY21pZmkoIkZpbGVuYW1lIiwiIiwmcywmeCx4eHN0cmluZykpIDwgMCkKLQkgICAg cmV0dXJuKHopOwotICAgICAgICAgIGlmICh4KSB7Ci0gICAgICAgICAgICAgIHByaW50ZigiP1dp bGRjYXJkcyBub3QgYWxsb3dlZFxuIik7Ci0gICAgICAgICAgICAgIHJldHVybigtOSk7Ci0gICAg ICAgICAgfQotICAgICAgICAgIHp6ID0gemZucWZwKHMsQ0tNQVhQQVRILHRtcGJ1Zik7Ci0gICAg ICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Ci0gICAgICAgICAgaWYgKGlr c2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgICBpZiAoenopIHsKLSAgICAgICAg ICAgICAgbWFrZXN0cigmZGJkaXIsenotPmZwYXRoKTsKLSAgICAgICAgICAgICAgbWFrZXN0cigm ZGJmaWxlLChjaGFyICopdG1wYnVmKTsKLSAgICAgICAgICAgICAgZGJlbmFibGVkID0gMTsKLSAg ICAgICAgICB9IGVsc2UKLQkgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgICBicmVh azsKLSAgICAgIH0KLSAgICAgIGNhc2UgSUtTX0RCQVM6IHsKLSAgICAgICAgICBleHRlcm4gaW50 IGRiZW5hYmxlZDsKLSAgICAgICAgICBpZiAoKHogPSBjbWtleShva3RhYixub2t0YWIsIiIsIm5v Iix4eHN0cmluZykpIDwgMCkKLQkgICAgcmV0dXJuKHopOwotICAgICAgICAgIGlmICgoeCA9IGNt Y2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgICAgICAgIGlmIChpa3NkY2YpIHJldHVybihzdWNj ZXNzID0gMCk7Ci0gICAgICAgICAgZGJlbmFibGVkID0gejsKLSAgICAgICAgICBicmVhazsKLSAg ICAgIH0KLSNlbmRpZiAvKiBJS1NEQiAqLwotCi0gICAgICBjYXNlIElLU19JTklUOgotICAgICAg ICBpZiAoKHogPSBjbXR4dCgiQWx0ZXJuYXRlIGluaXQgZmlsZSBzcGVjaWZpY2F0aW9uIiwiIiwK LQkJICAgICAgICZzLHh4c3RyaW5nKSkgPCAwKQotCSAgcmV0dXJuKHopOwotICAgICAgICBpZiAo eiA8IDApIHJldHVybih6KTsKLSAgICAgICAgaWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAw KTsKLSAgICAgICAgY2tzdHJuY3B5KGtlcm1yYyxzLEtFUk1SQ0wpOwotICAgICAgICByY2ZsYWcg PSAxOwkJCS8qIEZsYWcgdGhhdCB0aGlzIGhhcyBiZWVuIGRvbmUgKi8KLSAgICAgICAgYnJlYWs7 Ci0KLSAgICAgIGNhc2UgSUtTX05PSU46Ci0gICAgICAgIGlmICgoeiA9IGNta2V5KG9rdGFiLG5v a3RhYiwiIiwibm8iLHh4c3RyaW5nKSkgPCAwKQotCSAgcmV0dXJuKHopOwotICAgICAgICBpZiAo KHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgaWYgKGlrc2RjZikgcmV0dXJu KHN1Y2Nlc3MgPSAwKTsKLSAgICAgICAgbm9pbml0ID0gejsKLSAgICAgICAgYnJlYWs7Ci0KLSAg ICAgIGNhc2UgSUtTX1NSVlI6Ci0gICAgICAgIGlmICgoeiA9IGNta2V5KG9rdGFiLG5va3RhYiwi Iiwibm8iLHh4c3RyaW5nKSkgPCAwKQotCSAgcmV0dXJuKHopOwotICAgICAgICBpZiAoKHggPSBj bWNmbSgpKSA8IDApIHJldHVybih4KTsKLSAgICAgICAgaWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nl c3MgPSAwKTsKLSAgICAgICAgYXJnX3ggPSB6OwotICAgICAgICBicmVhazsKLQotICAgICAgZGVm YXVsdDoKLSAgICAgICAgcmV0dXJuKC05KTsKLSAgICB9Ci0gICAgcmV0dXJuKHN1Y2Nlc3MgPSAo aW5zZXJ2ZXIgPyAxIDogMCkpOwotI2Vsc2UgLyogSUtTRENPTkYgKi8KLSAgICBpZiAoKHggPSBj bWNmbSgpKSA8IDApCi0gICAgICByZXR1cm4oeCk7Ci0gICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsK LSNlbmRpZiAvKiBJS1NEQ09ORiAqLwotfQotI2VuZGlmIC8qIE5PSUNQICovCi0jZW5kaWYgLyog SUtTRCAqLwotCi0vKiAgRCBPIEEgUiBHICAtLSAgRG8gYSBjb21tYW5kLWxpbmUgYXJndW1lbnQu ICAqLwotCi1pbnQKLSNpZmRlZiBDS19BTlNJQwotZG9hcmcoY2hhciB4KQotI2Vsc2UKLWRvYXJn KHgpIGNoYXIgeDsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogZG9hcmcgKi8gewotICAgIGlu dCBpLCBuLCB5LCB6LCB4eDsgbG9uZyB6ejsgY2hhciAqeHA7Ci0KLSNpZmRlZiBORVRDT05OCi1l eHRlcm4gY2hhciAqbGluZSwgKnRtcGJ1ZjsgICAgICAgICAgICAgLyogQ2hhcmFjdGVyIGJ1ZmZl cnMgZm9yIGFueXRoaW5nICovCi0jZW5kaWYgLyogTkVUQ09OTiAqLwotCi0jaWZkZWYgSUtTRAot ICAgIC8qIEludGVybmV0IEtlcm1pdCBTZXJ2ZXIgc2V0IHNvbWUgd2F5IGJlc2lkZXMgLUEuLi4g Ki8KLSAgICBpZiAoaW5zZXJ2ZXIpCi0gICAgICBkb2Zhc3QoKTsKLSNlbmRpZiAvKiBJS1NEICov Ci0KLSAgICB4cCA9ICp4YXJndisxOyAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIGZv ciBidW5kbGVkIGFyZ3MgKi8KLSAgICBkZWJ1ZyhGMTExLCJkb2FyZyBlbnRyeSIseHAseGFyZ2Mp OwotICAgIHdoaWxlICh4KSB7Ci0gICAgICAgIGRlYnVnKEYwMDAsImRvYXJnIGFyZyIsIiIseCk7 Ci0gICAgICAgIHN3aXRjaCAoeCkgeyAgICAgICAgICAgICAgICAgICAgLyogQmlnIHN3aXRjaCBv biBhcmcgKi8KLQotI2lmbmRlZiBDT01NRU5UCi0JICBjYXNlICctJzoJCQkvKiBFeHRlbmRlZCBj b21tYW5kcy4uLiAqLwotCSAgICBpZiAoZG94YXJnKHhhcmd2LDApIDwgMCkgewotCQlYRkFUQUwo IkV4dGVuZGVkIG9wdGlvbiBlcnJvciIpOwotCSAgICB9IC8qIEZ1bGwgdGhydS4uLiAqLwotCSAg Y2FzZSAnKyc6CQkJLyogRXh0ZW5kZWQgY29tbWFuZCBmb3IgcHJlc2NhbigpICovCi0JICAgIHJl dHVybigwKTsKLSNlbHNlICAvKiBOT0lDUCAqLwotCSAgY2FzZSAnLSc6Ci0JICBjYXNlICcrJzoK LQkgICAgWEZBVEFMKCJFeHRlbmRlZCBvcHRpb25zIG5vdCBjb25maWd1cmVkIik7Ci0jZW5kaWYg LyogTk9JQ1AgKi8KLQotI2lmbmRlZiBOT1NQTAotCSAgY2FzZSAnQyc6IHsJCQkvKiBDb21tYW5k cyBmb3IgcGFyc2VyICovCi0JICAgICAgY2hhciAqIHM7Ci0JICAgICAgeGFyZ3YrKywgeGFyZ2Mt LTsKLQkgICAgICBpZiAoKHhhcmdjIDwgMSkgfHwgKCoqeGFyZ3YgPT0gJy0nKSkgewotCQkgIFhG QVRBTCgiTm8gY29tbWFuZHMgZ2l2ZW4gZm9yIC1DIik7Ci0JICAgICAgfQotCSAgICAgIHMgPSAq eGFyZ3Y7CQkvKiBHZXQgdGhlIGFyZ3VtZW50IChtdXN0IGJlIHF1b3RlZCkgKi8KLQkgICAgICBp ZiAoISpzKQkJCS8qIElmIGVtcHR5IHF1b3RlcyAqLwotCQlzID0gTlVMTDsJCS8qIGlnbm9yZSB0 aGlzIG9wdGlvbiAqLwotCSAgICAgIGlmIChzKSB7Ci0JCSAgbWFrZXN0cigmY2xjbWRzLHMpOwkv KiBNYWtlIHBva2VhYmxlIGNvcHkgKi8KLQkJICBzID0gY2xjbWRzOwkJLyogQ2hhbmdlIHRhYnMg dG8gc3BhY2VzICovCi0JCSAgd2hpbGUgKCpzKSB7Ci0JCSAgICAgIGlmICgqcyA9PSAnXHQnKSAq cyA9ICcgJzsKLQkJICAgICAgcysrOwotCQkgIH0KLQkgICAgICB9Ci0JICAgICAgYnJlYWs7Ci0J ICB9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQotI2lmbmRlZiBOT1hGRVIKLQkgIGNhc2UgJ0QnOgkJ CS8qIERlbGF5ICovCi0JICAgIGlmICgqKHhwKzEpKSB7Ci0JCVhGQVRBTCgiaW52YWxpZCBhcmd1 bWVudCBidW5kbGluZyIpOwotCSAgICB9Ci0JICAgIHhhcmd2KyssIHhhcmdjLS07Ci0JICAgIGlm ICgoeGFyZ2MgPCAxKSB8fCAoKip4YXJndiA9PSAnLScpKSB7Ci0JCVhGQVRBTCgibWlzc2luZyBk ZWxheSB2YWx1ZSIpOwotCSAgICB9Ci0JICAgIHogPSBhdG9pKCp4YXJndik7CQkvKiBDb252ZXJ0 IHRvIG51bWJlciAqLwotCSAgICBpZiAoeiA+IC0xKQkJCS8qIElmIGluIHJhbmdlICovCi0JICAg ICAgY2tkZWxheSA9IHo7CQkvKiBzZXQgaXQgKi8KLQkgICAgZWxzZSB7Ci0JCVhGQVRBTCgiYmFk IGRlbGF5IHZhbHVlIik7Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0jZW5kaWYgLyogTk9YRkVSICov Ci0KLQkgIGNhc2UgJ0UnOgkJCS8qIEV4aXQgb24gY2xvc2UgKi8KLSNpZmRlZiBORVRDT05OCi0J ICAgIHRuX2V4aXQgPSAxOwotI2VuZGlmIC8qIE5FVENPTk4gKi8KLQkgICAgZXhpdG9uY2xvc2Ug PSAxOwotCSAgICBicmVhazsKLQotI2lmbmRlZiBOT0lDUAotCSAgY2FzZSAnUyc6CQkJLyogIlN0 YXkiIC0gZW50ZXIgaW50ZXJhY3RpdmUgKi8KLQkgICAgc3RheWZsZyA9IDE7CQkvKiBjb21tYW5k IHBhcnNlciBhZnRlciBleGVjdXRpbmcgKi8KLQkgICAgeGZpbmlzaCA9IDA7CQkvKiBjb21tYW5k LWxpbmUgYWN0aW9ucy4gKi8KLQkgICAgYnJlYWs7Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLQotCSAg Y2FzZSAnVCc6CQkJLyogRmlsZSB0cmFuc2ZlciBtb2RlID0gdGV4dCAqLwotCSAgICBiaW5hcnkg PSBYWUZUX1Q7Ci0JICAgIHhmZXJtb2RlID0gWE1PREVfTTsJCS8qIFRyYW5zZmVyIG1vZGUgbWFu dWFsICovCi0JICAgIGZpbGVwZWVrID0gMDsKLSNpZmRlZiBQQVRURVJOUwotCSAgICBwYXR0ZXJu cyA9IDA7Ci0jZW5kaWYgLyogUEFUVEVSTlMgKi8KLQkgICAgYnJlYWs7Ci0KLQkgIGNhc2UgJzcn OgotCSAgICBicmVhazsKLQotI2lmZGVmIElLU0QKLQkgIGNhc2UgJ0EnOiB7CQkJLyogSW50ZXJu ZXQgc2VydmVyICovCi0JICAgICAgLyogQWxyZWFkeSBkb25lIGluIHByZXNjYW4oKSAqLwotCSAg ICAgIC8qIGJ1dCBpbXBsaWVzICd4JyAmJiAgJ1EnICAgKi8KLSNpZmRlZiBPUzIKLQkgICAgICBj aGFyICogcDsKLQkgICAgICBpZiAoKih4cCsxKSkgewotCQkgIFhGQVRBTCgiaW52YWxpZCBhcmd1 bWVudCBidW5kbGluZyIpOwotCSAgICAgIH0KLSNpZmRlZiBOVAotCSAgICAgIC8qIFN1cHBvcnQg Zm9yIFByYWdtYSBTeXN0ZW1zIFRlbG5ldC9UZXJtaW5hbCBTZXJ2ZXJzICovCi0JICAgICAgcCA9 IGdldGVudigiUFJBR01BU1lTX0lORVREX1NPQ0siKTsKLQkgICAgICBpZiAoIShwICYmIGF0b2ko cCkgIT0gMCkpIHsKLQkJICB4YXJndisrLCB4YXJnYy0tOwotCQkgIGlmICh4YXJnYyA8IDEgfHwg Kip4YXJndiA9PSAnLScpIHsKLQkJICAgICAgWEZBVEFMKCJtaXNzaW5nIHNvY2tldCBoYW5kbGUi KTsKLQkJICB9Ci0JICAgICAgfQotI2Vsc2UgLyogTlQgKi8KLQkgICAgICB4YXJndisrLCB4YXJn Yy0tOwotCSAgICAgIGlmICh4YXJnYyA8IDEgfHwgKip4YXJndiA9PSAnLScpIHsKLQkJICBYRkFU QUwoIm1pc3Npbmcgc29ja2V0IGhhbmRsZSIpOwotCSAgICAgIH0KLSNlbmRpZiAvKiBOVCAqLwot I2VuZGlmIC8qIE9TMiAqLwotI2lmZGVmIE5PSUNQICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIElmIG5vIEludGVyYWN0aXZlIENvbW1hbmQgUGFyc2VyICovCi0JICAgICAgYWN0aW9uID0g J3gnOwkJLyogLUEgaW1wbGllcyAteC4gKi8KLSNlbmRpZiAvKiBOT0lDUCAqLwotI2lmbmRlZiBO T1hGRVIKLQkgICAgICBkb2Zhc3QoKTsKLSNlbmRpZiAvKiBOT1hGRVIgKi8KLQkgICAgICBicmVh azsKLQkgIH0KLSNlbmRpZiAvKiBJS1NEICovCi0KLSNpZm5kZWYgTk9YRkVSCi0JICBjYXNlICdR JzoJCQkvKiBRdWljayAoaS5lLiBGQVNUKSAqLwotCSAgICBkb2Zhc3QoKTsKLQkgICAgYnJlYWs7 Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLQkgIGNhc2UgJ1InOgkJCS8qIFJlbW90ZS1Pbmx5ICov Ci0JICAgIGJyZWFrOwkJCS8qIFRoaXMgaXMgaGFuZGxlZCBpbiBwcmVzY2FuKCkuICovCi0KLSNp Zm5kZWYgTk9TRVJWRVIKLQkgIGNhc2UgJ3gnOgkJCS8qIHNlcnZlciAqLwotCSAgY2FzZSAnTyc6 CQkJLyogKGZvciBPbmUgY29tbWFuZCBvbmx5KSAqLwotCSAgICBpZiAoYWN0aW9uKSB7Ci0JCVhG QVRBTCgiY29uZmxpY3RpbmcgYWN0aW9ucyIpOwotCSAgICB9Ci0JICAgIGlmICh4ID09ICdPJykg anVzdG9uZSA9IDE7Ci0JICAgIHhmaW5pc2ggPSAxOwotCSAgICBhY3Rpb24gPSAneCc7Ci0JICAg IGJyZWFrOwotI2VuZGlmIC8qIE5PU0VSVkVSICovCi0KLSNpZm5kZWYgTk9YRkVSCi0JICBjYXNl ICdmJzoJCQkvKiBmaW5pc2ggKi8KLQkgICAgaWYgKGFjdGlvbikgewotCQlYRkFUQUwoImNvbmZs aWN0aW5nIGFjdGlvbnMiKTsKLQkgICAgfQotCSAgICBhY3Rpb24gPSBzZXRnZW4oJ0YnLCIiLCIi LCIiKTsKLQkgICAgYnJlYWs7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLQkgIGNhc2UgJ3InOiB7 CQkJLyogcmVjZWl2ZSAqLwotCSAgICAgIGlmIChhY3Rpb24pIHsKLQkJICBYRkFUQUwoImNvbmZs aWN0aW5nIGFjdGlvbnMiKTsKLQkgICAgICB9Ci0JICAgICAgYWN0aW9uID0gJ3YnOwotCSAgICAg IGJyZWFrOwotCSAgfQotCi0jaWZuZGVmIE5PWEZFUgotCSAgY2FzZSAnayc6CQkJLyogcmVjZWl2 ZSB0byBzdGRvdXQgKi8KLQkgICAgaWYgKGFjdGlvbikgewotCQlYRkFUQUwoImNvbmZsaWN0aW5n IGFjdGlvbnMiKTsKLQkgICAgfQotCSAgICBzdGRvdWYgPSAxOwotCSAgICBhY3Rpb24gPSAndic7 Ci0JICAgIGJyZWFrOwotCi0JICBjYXNlICdzJzogewkJCS8qIHNlbmQgKi8KLQkgICAgICBpbnQg ZmlsMnNuZCwgcmM7Ci0JICAgICAgaWYgKCFyZWN1cnNpdmUpCi0JICAgICAgbm9saW5rcyA9IDA7 CQkvKiBGb2xsb3cgbGlua3MgYnkgZGVmYXVsdCAqLwotCi0JICAgICAgaWYgKGFjdGlvbikgewot CQkgIFhGQVRBTCgiY29uZmxpY3RpbmcgYWN0aW9ucyIpOwotCSAgICAgIH0KLQkgICAgICBpZiAo Kih4cCsxKSkgewotCQkgIFhGQVRBTCgiaW52YWxpZCBhcmd1bWVudCBidW5kbGluZyBhZnRlciAt cyIpOwotCSAgICAgIH0KLQkgICAgICBuZmlscyA9IDA7CQkvKiBJbml0aWFsaXplIGZpbGUgY291 bnRlciAqLwotCSAgICAgIGZpbDJzbmQgPSAwOwkJLyogQXNzdW1lIG5vdGhpbmcgdG8gc2VuZCAg Ki8KLQkgICAgICB6ID0gMDsJCQkvKiBGbGFnIGZvciBzdGRpbiAqLwotCSAgICAgIGNtbGlzdCA9 IHhhcmd2ICsgMTsJLyogUmVtZW1iZXIgdGhpcyBwb2ludGVyICovCi0JICAgICAgd2hpbGUgKCsr eGFyZ3YsIC0teGFyZ2MgPiAwKSB7IC8qIFRyYXZlcnNlIHRoZSBsaXN0ICovCi0jaWZkZWYgUElQ RVNFTkQKLQkJICBpZiAodXNlcGlwZXMgJiYgcHJvdG9jb2wgPT0gUFJPVE9fSyAmJiAqKnhhcmd2 ID09ICchJykgewotCQkgICAgICBjbWFyZyA9ICp4YXJndjsKLQkJICAgICAgY21hcmcrKzsKLQkJ ICAgICAgZGVidWcoRjExMCwiZG9hcmcgcGlwZXNlbmQiLGNtYXJnLDApOwotCQkgICAgICBuZmls cyA9IC0xOwotCQkgICAgICB6ID0gMTsKLQkJICAgICAgcGlwZXNlbmQgPSAxOwotCQkgIH0gZWxz ZQotI2VuZGlmIC8qIFBJUEVTRU5EICovCi0JCSAgICBpZiAoKip4YXJndiA9PSAnLScpIHsgLyog Q2hlY2sgZm9yIHNlbmRpbmcgc3RkaW4gKi8KLQkJCWlmIChzdHJjbXAoKnhhcmd2LCItIikgIT0g MCkgLyogbmV4dCBvcHRpb24/ICovCi0JCQkgIGJyZWFrOwotCQkJeisrOwkJLyogIi0iIGFsb25l IG1lYW5zIHNlbmQgZnJvbSBzdGRpbi4gKi8KLSNpZmRlZiBSRUNVUlNJVkUKLQkJICAgIH0gZWxz ZSBpZiAoIXN0cmNtcCgqeGFyZ3YsIi4iKSkgewotCQkJZmlsMnNuZCA9IDE7Ci0JCQluZmlscysr OwotCQkJcmVjdXJzaXZlID0gMTsKLQkJCW5vbGlua3MgPSAyOwotI2VuZGlmIC8qIFJFQ1VSU0lW RSAqLwotCQkgICAgfSBlbHNlIC8qIENoZWNrIGlmIGZpbGUgZXhpc3RzICovCi0JCSAgICAgIGlm ICgocmMgPSB6Y2hraSgqeGFyZ3YpKSA+IC0xIHx8IChyYyA9PSAtMikpIHsKLQkJCSAgaWYgIChy YyAhPSAtMikKLQkJCSAgICBmaWwyc25kID0gMTsKLQkJCSAgbmZpbHMrKzsJLyogQnVtcCBmaWxl IGNvdW50ZXIgKi8KLQkJICAgICAgfSBlbHNlIGlmIChpc3dpbGQoKnhhcmd2KSAmJiBuenhwYW5k KCp4YXJndiwwKSA+IDApIHsKLQkJICAgICAgLyogb3IgY29udGFpbnMgd2lsZGNhcmQgY2hhcmFj dGVycyBtYXRjaGluZyByZWFsIGZpbGVzICovCi0JCQkgIGZpbDJzbmQgPSAxOwotCQkJICBuZmls cysrOwotCQkgICAgICB9IGVsc2UgewotCQkJICBpZiAoIWZhaWxtc2cpCi0JCQkgICAgZmFpbG1z ZyA9IChjaGFyICopbWFsbG9jKDIwMDApOwotCQkJICBpZiAoZmFpbG1zZykgewotCQkJICAgICAg Y2ttYWttc2coZmFpbG1zZywyMDAwLAotI2lmZGVmIFZNUwotCQkJCSAgICAgICAiJUNLRVJNSVQt RS1TRUFSQ0hGQUlMICIKLSNlbHNlCi0JCQkJICAgICAgICJrZXJtaXQgLXMgIgotI2VuZGlmCS8q IFZNUyAqLwotCQkJCSAgICAgICAsCi0JCQkJICAgICAgICp4YXJndiwKLQkJCQkgICAgICAgIjog IiwKLQkJCQkgICAgICAgY2tfZXJyc3RyKCkKLQkJCQkgICAgICAgKTsKLQkJCSAgfQotCQkgICAg ICB9Ci0JICAgICAgfQotCSAgICAgIHhhcmdjKyssIHhhcmd2LS07CQkvKiBBZGp1c3QgYXJndi9h cmdjICovCi0JICAgICAgaWYgKCFmaWwyc25kICYmIHogPT0gMCkgewotCQkgIGlmICghZmFpbG1z ZykgewotI2lmZGVmIFZNUwotCQkgICAgICBmYWlsbXNnID0gIiVDS0VSTUlULUUtU0VBUkNIRkFJ TCwgbm8gZmlsZXMgZm9yIC1zIjsKLSNlbHNlCi0JCSAgICAgIGZhaWxtc2cgPSAiTm8gZmlsZXMg Zm9yIC1zIjsKLSNlbmRpZiAvKiBWTVMgKi8KLQkJICB9Ci0JCSAgWEZBVEFMKGZhaWxtc2cpOwot CSAgICAgIH0KLQkgICAgICBpZiAoeiA+IDEpIHsKLQkJICBYRkFUQUwoImtlcm1pdCAtczogdG9v IG1hbnkgLSdzIik7Ci0JICAgICAgfQotCSAgICAgIGlmICh6ID09IDEgJiYgZmlsMnNuZCkgewot CQkgIFhGQVRBTCgiaW52YWxpZCBtaXh0dXJlIG9mIGZpbGVuYW1lcyBhbmQgJy0nIGluIC1zIik7 Ci0JICAgICAgfQotCSAgICAgIGRlYnVnKEYxMDEsImRvYXJnIHMgbmZpbHMiLCIiLG5maWxzKTsK LQkgICAgICBkZWJ1ZyhGMTAxLCJkb2FyZyBzIHoiLCIiLHopOwotCSAgICAgIGlmIChuZmlscyA9 PSAwKSB7CQkvKiBubyBmaWxlIHBhcmFtZXRlcnMgd2VyZSBzcGVjaWZpZWQgKi8KLQkJICBpZiAo aXNfYV90dHkoMCkpIHsJLyogKHVzZWQgdG8gYmUgaXNfYV90dHkoMSkgLSB3aHk/KSAqLwotCQkg ICAgICBYRkFUQUwoInNlbmRpbmcgZnJvbSB0ZXJtaW5hbCBub3QgYWxsb3dlZCIpOwotCQkgIH0g ZWxzZSBzdGRpbmYgPSAxOwotCSAgICAgIH0KLQkgICAgICBkZWJ1ZyhGMTAxLCJkb2FyZyBzIHN0 ZGluZiIsIiIsc3RkaW5mKTsKLQkgICAgICBkZWJ1ZyhGMTExLCJkb2FyZyIsKnhhcmd2LG5maWxz KTsKLQkgICAgICBhY3Rpb24gPSAncyc7Ci0JICAgICAgYnJlYWs7Ci0JICB9Ci0KLQkgIGNhc2Ug J2cnOgkJCS8qIGdldCAqLwotCSAgY2FzZSAnRyc6CQkJLyogZ2V0IHRvIHN0ZG91dCAqLwotCSAg ICBpZiAoYWN0aW9uKSB7Ci0JCVhGQVRBTCgiY29uZmxpY3RpbmcgYWN0aW9ucyIpOwotCSAgICB9 Ci0JICAgIGlmICgqKHhwKzEpKSB7Ci0JCVhGQVRBTCgiaW52YWxpZCBhcmd1bWVudCBidW5kbGlu ZyBhZnRlciAtZyIpOwotCSAgICB9Ci0JICAgIHhhcmd2KyssIHhhcmdjLS07Ci0JICAgIGlmICgo eGFyZ2MgPT0gMCkgfHwgKCoqeGFyZ3YgPT0gJy0nKSkgewotCQlYRkFUQUwoIm1pc3NpbmcgZmls ZW5hbWUgZm9yIC1nIik7Ci0JICAgIH0KLQkgICAgaWYgKHggPT0gJ0cnKSBzdGRvdWYgPSAxOwot CSAgICBjbWFyZyA9ICp4YXJndjsKLQkgICAgYWN0aW9uID0gJ3InOwotCSAgICBicmVhazsKLSNl bmRpZiAvKiBOT1hGRVIgKi8KLQotI2lmbmRlZiBOT0xPQ0FMCi0JICBjYXNlICdjJzoJCQkvKiBj b25uZWN0IGJlZm9yZSAqLwotCSAgICBjZmxnID0gMTsKLQkgICAgYnJlYWs7Ci0KLQkgIGNhc2Ug J24nOgkJCS8qIGNvbm5lY3QgYWZ0ZXIgKi8KLQkgICAgY25mbGcgPSAxOwotCSAgICBicmVhazsK LSNlbmRpZiAvKiBOT0xPQ0FMICovCi0KLQkgIGNhc2UgJ2gnOgkJCS8qIGhlbHAgKi8KLQkgICAg dXNhZ2UoKTsKLSNpZm5kZWYgTk9JQ1AKLQkgICAgaWYgKHN0YXlmbGcgfHwgd2hhdCA9PSBXX0NP TU1BTkQpCi0JICAgICAgYnJlYWs7Ci0JICAgIGVsc2UKLSNlbmRpZiAvKiBOT0lDUCAqLwotCSAg ICAgIGRvZXhpdChHT09EX0VYSVQsLTEpOwotCi0jaWZuZGVmIE5PWEZFUgotCSAgY2FzZSAnYSc6 CQkJLyogImFzIiAqLwotCSAgICBpZiAoKih4cCsxKSkgewotCQlYRkFUQUwoImludmFsaWQgYXJn dW1lbnQgYnVuZGxpbmcgYWZ0ZXIgLWEiKTsKLQkgICAgfQotCSAgICB4YXJndisrLCB4YXJnYy0t OwotCSAgICBpZiAoKHhhcmdjIDwgMSkgfHwgKCoqeGFyZ3YgPT0gJy0nKSkgewotCQlYRkFUQUwo Im1pc3NpbmcgbmFtZSBpbiAtYSIpOwotCSAgICB9Ci0JICAgIGNtYXJnMiA9ICp4YXJndjsKLQkg ICAgZGVidWcoRjExMSwiZG9hcmcgYSIsY21hcmcyLHhhcmdjKTsKLQkgICAgYnJlYWs7Ci0jZW5k aWYgLyogTk9YRkVSICovCi0KLSNpZm5kZWYgTk9JQ1AKLQkgIGNhc2UgJ1knOgkJCS8qIE5vIGlu aXRpYWxpemF0aW9uIGZpbGUgKi8KLQkgICAgbm9pbml0ID0gMTsKLQkgICAgYnJlYWs7Ci0KLQkg IGNhc2UgJ3knOgkJCS8qIEFsdGVybmF0ZSBpbml0LWZpbGUgbmFtZSAqLwotCSAgICBub2luaXQg PSAwOwotCSAgICBpZiAoKih4cCsxKSkgewotCQlYRkFUQUwoImludmFsaWQgYXJndW1lbnQgYnVu ZGxpbmcgYWZ0ZXIgLXkiKTsKLQkgICAgfQotCSAgICB4YXJndisrLCB4YXJnYy0tOwotCSAgICBp ZiAoeGFyZ2MgPCAxKSB7Ci0JCVhGQVRBTCgibWlzc2luZyBmaWxlbmFtZSBpbiAteSIpOwotCSAg ICB9Ci0JICAgIC8qIHN0cmNweShrZXJtcmMsKnhhcmd2KTsgLi4uIGFscmVhZHkgZG9uZSBpbiBw cmVzY2FuKCkuLi4gKi8KLQkgICAgYnJlYWs7Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLQotI2lmbmRl ZiBOT1hGRVIKLQkgIGNhc2UgJ0knOgkJCS8qIEFzc3VtZSB3ZSBoYXZlIGFuICJJbnRlcm5ldCIg Ki8KLQkgICAgcmVsaWFibGUgPSAxOwkJLyogb3Igb3RoZXIgcmVsaWFibGUgY29ubmVjdGlvbiAq LwotCSAgICB4cmVsaWFibGUgPSAxOwotCSAgICBzZXRyZWxpYWJsZSA9IDE7Ci0KLQkgICAgLyog SSdtIG5vdCBzbyBzdXJlIGFib3V0IHRoaXMgLS0gd2hhdCBhYm91dCBWTVM/IChuZXh0IGNvbW1l bnQpICovCi0JICAgIGNsZWFycnEgPSAxOwkJLyogdGhlcmVmb3JlIHRoZSBjaGFubmVsIGlzIGNs ZWFyICovCi0KLSNpZm5kZWYgVk1TCi0vKgotICBTaW5jZSB0aGlzIGNhbiB0cmlnZ2VyIGZ1bGwg Y29udHJvbC1jaGFyYWN0ZXIgdW5wcmVmaXhpbmcsIHdlIG5lZWQgdG8KLSAgZW5zdXJlIHRoYXQg b3VyIHRlcm1pbmFsIG9yIHB0eSBkcml2ZXIgaXMgbm90IGRvaW5nIFhvbi9Yb2ZmOyBvdGhlcndp c2UKLSAgd2UgY2FuIGJlY29tZSBkZWFkbG9ja2VkIHRoZSBmaXJzdCB0aW1lIHdlIHJlY2VpdmUg YSBmaWxlIHRoYXQgY29udGFpbnMKLSAgWG9mZi4KLSovCi0JICAgIGZsb3cgPSBGTE9fTk9ORTsK LSNlbmRpZiAvKiBWTVMgKi8KLQkgICAgYnJlYWs7Ci0jZW5kaWYgLyogTk9YRkVSICovCi0KLSNp Zm5kZWYgTk9MT0NBTAotCSAgY2FzZSAnbCc6CQkJLyogU0VUIExJTkUgKi8KLSNpZmRlZiBORVRD T05OCi0jaWZkZWYgQU5ZWDI1Ci0JICBjYXNlICdYJzoJCQkvKiBTRVQgSE9TVCB0byBYLjI1IGFk ZHJlc3MgKi8KLSNpZmRlZiBTVU5YMjUKLQkgIGNhc2UgJ1onOgkJCS8qIFNFVCBIT1NUIHRvIFgu MjUgZmlsZSBkZXNjcmlwdG9yICovCi0jZW5kaWYgLyogU1VOWDI1ICovCi0jZW5kaWYgLyogQU5Z WDI1ICovCi0jaWZkZWYgVENQU09DS0VUCi0JICBjYXNlICdKJzoKLQkgIGNhc2UgJ2onOgkJCS8q IFNFVCBIT1NUIChUQ1AvSVAgc29ja2V0KSAqLwotI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwotI2Vu ZGlmIC8qIE5FVENPTk4gKi8KLSNpZm5kZWYgTk9YRkVSCi0JICAgIGlmICh4ID09ICdqJyB8fCB4 ID09ICdKJyB8fCB4ID09ICdYJyB8fCB4ID09ICdaJykgewotCQlyZWxpYWJsZSA9IDE7CQkvKiBv ciBvdGhlciByZWxpYWJsZSBjb25uZWN0aW9uICovCi0JCXhyZWxpYWJsZSA9IDE7Ci0JCXNldHJl bGlhYmxlID0gMTsKLQkgICAgfQotI2VuZGlmIC8qIE5PWEZFUiAqLwotCSAgICBuZXR3b3JrID0g MDsKLQkgICAgaWYgKCooeHArMSkpIHsKLQkJWEZBVEFMKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRs aW5nIGFmdGVyIC1sIG9yIC1qIik7Ci0JICAgIH0KLQkgICAgeGFyZ3YrKywgeGFyZ2MtLTsKLQkg ICAgaWYgKCh4YXJnYyA8IDEpIHx8ICgqKnhhcmd2ID09ICctJykpIHsKLQkJWEZBVEFMKCJjb21t dW5pY2F0aW9uIGxpbmUgZGV2aWNlIG5hbWUgbWlzc2luZyIpOwotCSAgICB9Ci0KLSNpZmRlZiBO RVRDT05OCi0JICAgIGlmICh4ID09ICdKJykgewotCQljZmxnICAgID0gMTsJCS8qIENvbm5lY3Qg Ki8KLQkJc3RheWZsZyA9IDE7CQkvKiBTdGF5ICovCi0JCXRuX2V4aXQgPSAxOwkJLyogVGVsbmV0 LWxpa2UgZXhpdCBjb25kaXRpb24gKi8KLQkJZXhpdG9uY2xvc2UgPSAxOwotCSAgICB9Ci0jZW5k aWYgLyogTkVUQ09OTiAqLwotCSAgICBja3N0cm5jcHkodHRuYW1lLCp4YXJndixUVE5BTUxFTisx KTsKLQkgICAgbG9jYWwgPSAoc3RyY21wKHR0bmFtZSxDVFROQU0pICE9IDApOwotCSAgICBpZiAo bG9jYWwgJiYgc3RyY21wKHR0bmFtZSwiMCIpID09IDApCi0JICAgICAgbG9jYWwgPSAwOwotLyoK LSAgTk9URTogV2UgcmVhbGx5IGRvIG5vdCBuZWVkIHRvIGNhbGwgdHRvcGVuIGhlcmUsIHNpbmNl IGl0IHNob3VsZCBiZSBjYWxsZWQKLSAgYWdhaW4gbGF0ZXIsIGF1dG9tYXRpY2FsbHksIHdoZW4g d2UgZmlyc3QgdHJ5IHRvIGNvbmRpdGlvbiB0aGUgZGV2aWNlIHZpYQotICB0dHBrdCBvciB0dHZ0 LiAgQ2FsbGluZyB0dG9wZW4gaGVyZSBoYXMgdGhlIGJhZCBzaWRlIGVmZmVjdCBvZiBtYWtpbmcg dGhlCi0gIG9yZGVyIG9mIHRoZSAtYiBhbmQgLWwgb3B0aW9ucyBzaWduaWZpY2FudCB3aGVuIHRo ZSBvcmRlciBvZiBjb21tYW5kLWxpbmUKLSAgb3B0aW9ucyBzaG91bGQgbm90IG1hdHRlci4gIEhv d2V2ZXIsIHRoZSBuZXR3b3JrIGNhc2VzIGltbWVkaWF0ZWx5IGJlbG93Ci0gIGNvbXBsaWNhdGUg bWF0dGVycyBhIGJpdCwgc28gd2UnbGwgc2V0dGxlIHRoaXMgaW4gYSBmdXR1cmUgZWRpdC4KLSov Ci0JICAgIGlmICh4ID09ICdsJykgewotCQlpZiAodHRvcGVuKHR0bmFtZSwmbG9jYWwsbWRtdHlw LDApIDwgMCkgewotCQkgICAgWEZBVEFMKCJjYW4ndCBvcGVuIGRldmljZSIpOwotCQl9Ci0jaWZk ZWYgQ0tMT0dESUFMCi0JCWRvbG9nbGluZSgpOwotI2VuZGlmIC8qIENLTE9HRElBTCAqLwotCQlk ZWJ1ZyhGMTAxLCJkb2FyZyBzcGVlZCIsIiIsc3BlZWQpOwotCQljeHR5cGUgPSAobWRtdHlwID4g MCkgPyBDWFRfTU9ERU0gOiBDWFRfRElSRUNUOwotCQlzcGVlZCA9IHR0Z3NwZCgpOwkvKiBHZXQg dGhlIHNwZWVkLiAqLwotCQlzZXRmbG93KCk7CQkvKiBEbyBzb21ldGhpbmcgYWJvdXQgZmxvdyBj b250cm9sLiAqLwotI2lmbmRlZiBOT1NQTAotCQlpZiAobG9jYWwpIHsKLQkJICAgIGlmIChubWFj KSB7CQkvKiBBbnkgbWFjcm9zIGRlZmluZWQ/ICovCi0JCQlpbnQgazsJCS8qIFllcyAqLwotCQkJ ayA9IG1sb29rKG1hY3RhYiwib25fb3BlbiIsbm1hYyk7IC8qIExvb2sgdGhpcyB1cCAqLwotCQkJ aWYgKGsgPj0gMCkgewkvKiBJZiBmb3VuZCwgKi8KLQkJCSAgICBpZiAoZG9kbyhrLHR0bmFtZSww KSA+IC0xKSAvKiBzZXQgaXQgdXAsICovCi0JCQkgICAgICBwYXJzZXIoMSk7IC8qIGFuZCBleGVj dXRlIGl0ICovCi0JCQl9Ci0JCSAgICB9Ci0JCX0KLSNlbmRpZiAvKiBOT1NQTCAqLwotCi0jaWZk ZWYgTkVUQ09OTgotCSAgICB9IGVsc2UgewotCQlpZiAoeCA9PSAnaicgfHwgeCA9PSAnSicpIHsg LyogSVAgbmV0d29yayBob3N0IG5hbWUgKi8KLQkJICAgIGNoYXIgKiBzID0gbGluZTsKLQkJICAg IGNoYXIgKiBzZXJ2aWNlID0gdG1wYnVmOwotCQkgICAgaWYgKHhhcmdjID4gMCkgewkvKiBDaGVj ayBpZiBpdCdzIGZvbGxvd2VkIGJ5ICovCi0JCQkvKiBBIHNlcnZpY2UgbmFtZSBvciBudW1iZXIg Ki8KLQkJCWlmICgqKHhhcmd2KzEpICYmICooKih4YXJndisxKSkgIT0gJy0nKSB7Ci0JCQkgICAg eGFyZ3YrKywgeGFyZ2MtLTsKLQkJCSAgICBja3N0cm5jYXQodHRuYW1lLCI6IixUVE5BTUxFTisx KTsKLQkJCSAgICBja3N0cm5jYXQodHRuYW1lLCp4YXJndixUVE5BTUxFTisxKTsKLQkJCX0KLQkJ ICAgIH0KLQkJICAgIG5ldHR5cGUgPSBORVRfVENQQjsKLQkJICAgIG1kbXR5cCA9IC1uZXR0eXBl OwkvKiBQZXJoYXBzIGFscmVhZHkgc2V0IGluIGluaXQgZmlsZSAqLwotCQkgICAgdGVsbmV0ZmQg PSAxOwkvKiBPciBtYXliZSBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvciAqLwotCQkgICAgY2tzdHJu Y3B5KGxpbmUsIHR0bmFtZSwgTElOQlVGU0laKTsgLyogV29ya2luZyBjb3B5ICovCi0JCSAgICBm b3IgKHMgPSBsaW5lOyAqcyAhPSBOVUwgJiYgKnMgIT0gJzonOyBzKyspOwotCQkgICAgaWYgKCpz KSB7Ci0JCQkqcysrID0gTlVMOwotCQkJY2tzdHJuY3B5KHNlcnZpY2UsIHMsIFRNUEJVRlNJWik7 Ci0JCSAgICB9IGVsc2UgKnNlcnZpY2UgPSBOVUw7Ci0JCSAgICBzID0gbGluZTsKLSNpZm5kZWYg Tk9ESUFMCi0jaWZuZGVmIE5PSUNQCi0JCSAgICAvKiBMb29rIHVwIGluIG5ldHdvcmsgZGlyZWN0 b3J5ICovCi0JCSAgICB4ID0gMDsKLQkJICAgIGlmICgqcyA9PSAnPScpIHsJLyogSWYgbnVtYmVy IHN0YXJ0cyB3aXRoID0gc2lnbiAqLwotCQkJcysrOwkJLyogc3RyaXAgaXQgKi8KLQkJCXdoaWxl ICgqcyA9PSBTUCkgLyogYW5kIGFsc28gYW55IGxlYWRpbmcgc3BhY2VzICovCi0JCQkgIHMrKzsK LQkJCWNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsgLyogRG8gdGhpcyBhZ2Fpbi4gKi8KLQkJ CW5oY291bnQgPSAwOwotCQkgICAgfSBlbHNlIGlmICghaXNkaWdpdChsaW5lWzBdKSkgewotLyoK LSAgbm5ldGRpciB3aWxsIGJlIGdyZWF0ZXIgdGhhbiAwIGlmIHRoZSBpbml0IGZpbGUgaGFzIGJl ZW4gcHJvY2Vzc2VkIGFuZCBpdAotICBjb250YWluZWQgYSBTRVQgTkVUV09SSyBESVJFQ1RPUlkg Y29tbWFuZC4KLSovCi0JCQl4eCA9IDA7CQkvKiBJbml0aWFsaXplIHRoaXMgKi8KLQkJCWlmIChu bmV0ZGlyID4gMCkgLyogSWYgdGhlcmUgaXMgYSBkaXJlY3RvcnkuLi4gKi8KLQkJCSAgeHggPSBs dW5ldChsaW5lKTsgLyogTG9vayB1cCB0aGUgbmFtZSAqLwotCQkJZWxzZQkJLyogSWYgbm8gZGly ZWN0b3J5ICovCi0JCQkgIG5oY291bnQgPSAwOwkvKiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZyB0 aGVyZSAqLwotCQkJaWYgKHh4IDwgMCkgewkvKiBMb29rdXAgZXJyb3I6ICovCi0JCQkgICAgY2tt YWttc2codG1wYnVmLAotCQkJCSAgICAgVE1QQlVGU0laLAotCQkJCSAgICAiP0ZhdGFsIG5ldHdv cmsgZGlyZWN0b3J5IGxvb2t1cCBlcnJvciAtICIsCi0JCQkJICAgICBsaW5lLAotCQkJCSAgICAg IlxuIiwKLQkJCQkgICAgIE5VTEwKLQkJCQkgICAgICk7Ci0JCQkgICAgWEZBVEFMKHRtcGJ1Zik7 Ci0JCQl9Ci0JCSAgICB9Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLSNlbmRpZiAvKiBOT0RJQUwgKi8K LQkJICAgIC8qIEFkZCBzZXJ2aWNlIHRvIGxpbmUgc3BlY2lmaWNhdGlvbiBmb3IgdHRvcGVuKCkg Ki8KLQkJICAgIGlmICgqc2VydmljZSkgewkvKiBUaGVyZSBpcyBhIHNlcnZpY2Ugc3BlY2lmaWVk ICovCi0JCQlja3N0cm5jYXQobGluZSwgIjoiLExJTkJVRlNJWik7Ci0JCQlja3N0cm5jYXQobGlu ZSwgc2VydmljZSxMSU5CVUZTSVopOwotCQkJdHRucHJvdG8gPSBOUF9ERUZBVUxUOwotCQkgICAg fSBlbHNlIHsKLQkJCWNrc3RybmNhdChsaW5lLCAiOnRlbG5ldCIsTElOQlVGU0laKTsKLQkJCXR0 bnByb3RvID0gTlBfVEVMTkVUOwotCQkgICAgfQotCi0jaWZuZGVmIE5PSUNQCi0jaWZuZGVmIE5P RElBTAotCQkgICAgaWYgKChuaGNvdW50ID4gMSkgJiYgIXF1aWV0ICYmICFiYWNrZ3JkKSB7Ci0J CQlwcmludGYoIiVkIGVudHIlcyBmb3VuZCBmb3IgXCIlc1wiJXNcbiIsCi0JCQkgICAgICAgbmhj b3VudCwKLQkJCSAgICAgICAobmhjb3VudCA9PSAxKSA/ICJ5IiA6ICJpZXMiLAotCQkJICAgICAg IHMsCi0JCQkgICAgICAgKG5oY291bnQgPiAwKSA/ICI6IiA6ICIuIgotCQkJICAgICAgICk7Ci0J CQlmb3IgKGkgPSAwOyBpIDwgbmhjb3VudDsgaSsrKQotCQkJICBwcmludGYoIiUzZC4gJXMgJS0x MnMgPT4gJXNcbiIsCi0JCQkJIGkrMSwgbl9uYW1lLCBuaF9wMltpXSwgbmhfcFtpXQotCQkJCSAp OwotCQkgICAgfQotCQkgICAgaWYgKG5oY291bnQgPT0gMCkKLQkJICAgICAgbiA9IDE7Ci0JCSAg ICBlbHNlCi0JCSAgICAgIG4gPSBuaGNvdW50OwotI2Vsc2UKLQkJICAgIG4gPSAxOwotCQkgICAg bmhjb3VudCA9IDA7Ci0jZW5kaWYgLyogTk9ESUFMICovCi0JCSAgICBmb3IgKGkgPSAwOyBpIDwg bjsgaSsrKSB7Ci0jaWZuZGVmIE5PRElBTAotCQkJaWYgKG5oY291bnQgPj0gMSkgewotCQkJICAg IC8qIENvcHkgdGhlIGN1cnJlbnQgZW50cnkgdG8gbGluZSAqLwotCQkJICAgIGNrc3RybmNweShs aW5lLG5oX3BbaV0sTElOQlVGU0laKTsKLSAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgdG8g c2VlIGlmIHRoZSBuZXR3b3JrIGVudHJ5IGNvbnRhaW5zIGEgc2VydmljZSAqLwotCQkJICAgIGZv ciAocyA9IGxpbmUgOyAoKnMgIT0gTlVMKSAmJiAoKnMgIT0gJzonKTsgcysrKQotCQkJICAgICAg OwotCQkJICAgIC8qIElmIGRpcmVjdG9yeSBkb2VzIG5vdCBoYXZlIGEgc2VydmljZSAuLi4gKi8K LQkJCSAgICAvKiBhbmQgdGhlIHVzZXIgc3BlY2lmaWVkIG9uZSAqLwotCQkJICAgIGlmICghKnMg JiYgKnNlcnZpY2UpIHsKLQkJCQlja3N0cm5jYXQobGluZSwgIjoiLExJTkJVRlNJWik7Ci0JCQkJ Y2tzdHJuY2F0KGxpbmUsIHNlcnZpY2UsTElOQlVGU0laKTsKLQkJCSAgICB9Ci0JCQkgICAgaWYg KGxvb2t1cChuZXRjbWQsbmhfcDJbaV0sbm5ldHMsJnopID4gLTEpIHsKLQkJCQltZG10eXAgPSAw IC0gbmV0Y21kW3pdLmt3dmFsOwotCQkJICAgIH0gZWxzZSB7Ci0JCQkJcHJpbnRmKAotCQkJCSAi RXJyb3IgLSBuZXR3b3JrIHR5cGUgXCIlc1wiIG5vdCBzdXBwb3J0ZWRcbiIsCi0JCQkJICAgICAg IG5oX3AyW2ldCi0JCQkJICAgICAgICk7Ci0JCQkJY29udGludWU7Ci0JCQkgICAgfQotCQkJfQot I2VuZGlmIC8qIE5PRElBTCAqLwotCQkgICAgfQotI2VuZGlmIC8qIE5PSUNQICovCi0JCSAgICBj a3N0cm5jcHkodHRuYW1lLCBsaW5lLFRUTkFNTEVOKzEpOwotCQkgICAgY3h0eXBlID0gQ1hUX1RD UElQOwkvKiBTZXQgY29ubmVjdGlvbiB0eXBlICovCi0JCSAgICBzZXRmbG93KCk7CQkvKiBTZXQg YXBwcm9wcmlhdGUgZmxvdyBjb250cm9sLiAqLwotI2lmZGVmIFNVTlgyNQotCQl9IGVsc2UgaWYg KHggPT0gJ1gnKSB7CS8qIFguMjUgYWRkcmVzcyAqLwotCQkgICAgbmV0dHlwZSA9IE5FVF9TWDI1 OwotCQkgICAgbWRtdHlwID0gLW5ldHR5cGU7Ci0JCX0gZWxzZSBpZiAoeCA9PSAnWicpIHsJLyog T3BlbiBYLjI1IGZpbGUgZGVzY3JpcHRvciAqLwotCQkgICAgbmV0dHlwZSA9IE5FVF9TWDI1Owot CQkgICAgbWRtdHlwID0gLW5ldHR5cGU7Ci0JCSAgICB4MjVmZCA9IDE7Ci0jZW5kaWYgLyogU1VO WDI1ICovCi0jaWZkZWYgU1RSQVRVU1gyNQotCQl9IGVsc2UgaWYgKHggPT0gJ1gnKSB7CS8qIFgu MjUgYWRkcmVzcyAqLwotCQkgICAgbmV0dHlwZSA9IE5FVF9WWDI1OwotCQkgICAgbWRtdHlwID0g LW5ldHR5cGU7Ci0jZW5kaWYgLyogU1RSQVRVU1gyNSAqLwotI2lmZGVmIElCTVgyNQotCQl9IGVs c2UgaWYgKHggPT0gJ1gnKSB7CS8qIFguMjUgYWRkcmVzcyAqLwotCQkgICAgbmV0dHlwZSA9IE5F VF9JWDI1OwotCQkgICAgbWRtdHlwID0gLW5ldHR5cGU7Ci0jZW5kaWYgLyogSUJNWDI1ICovCi0j aWZkZWYgSFBYMjUKLQkJfSBlbHNlIGlmICh4ID09ICdYJykgewkvKiBYLjI1IGFkZHJlc3MgKi8K LQkJICAgIG5ldHR5cGUgPSBORVRfSFgyNTsKLQkJICAgIG1kbXR5cCA9IC1uZXR0eXBlOwotI2Vu ZGlmIC8qIEhQWDI1ICovCi0JCX0KLQkJaWYgKHR0b3Blbih0dG5hbWUsJmxvY2FsLG1kbXR5cCww KSA8IDApIHsKLQkJICAgIFhGQVRBTCgiY2FuJ3Qgb3BlbiBob3N0IGNvbm5lY3Rpb24iKTsKLQkJ fQotCQluZXR3b3JrID0gMTsKLSNpZmRlZiBDS0xPR0RJQUwKLQkJZG9sb2duZXQoKTsKLSNlbmRp ZiAvKiBDS0xPR0RJQUwgKi8KLQkJY3h0eXBlID0gQ1hUX1gyNTsJLyogU2V0IGNvbm5lY3Rpb24g dHlwZSAqLwotCQlzZXRmbG93KCk7CQkvKiBTZXQgYXBwcm9wcmlhdGUgZmxvdyBjb250cm9sLiAq LwotI2lmbmRlZiBOT1NQTAotCQlpZiAobG9jYWwpIHsKLQkJICAgIGlmIChubWFjKSB7CQkvKiBB bnkgbWFjcm9zIGRlZmluZWQ/ICovCi0JCQlpbnQgazsJCS8qIFllcyAqLwotCQkJayA9IG1sb29r KG1hY3RhYiwib25fb3BlbiIsbm1hYyk7IC8qIExvb2sgdGhpcyB1cCAqLwotCQkJaWYgKGsgPj0g MCkgewkvKiBJZiBmb3VuZCwgKi8KLQkJCSAgICBpZiAoZG9kbyhrLHR0bmFtZSwwKSA+IC0xKSAv KiBzZXQgaXQgdXAsICovCi0JCQkgICAgICBwYXJzZXIoMSk7ICAgICAgICAvKiBhbmQgZXhlY3V0 ZSBpdCAqLwotCQkJfQotCQkgICAgfQotCQl9Ci0jZW5kaWYgLyogTk9TUEwgKi8KLSNlbmRpZiAv KiBORVRDT05OICovCi0JICAgIH0KLQkgICAgLyogYWRkIG1vcmUgaGVyZSAtLSBkZWNuZXQsIGV0 Yy4uLiAqLwotCSAgICBoYXZlbGluZSA9IDE7Ci0JICAgIGJyZWFrOwotCi0jaWZkZWYgQU5ZWDI1 Ci0JICBjYXNlICdVJzoJCQkvKiBYLjI1IGNhbGwgdXNlciBkYXRhICovCi0JICAgIGlmICgqKHhw KzEpKSB7Ci0JCVhGQVRBTCgiaW52YWxpZCBhcmd1bWVudCBidW5kbGluZyIpOwotCSAgICB9Ci0J ICAgIHhhcmd2KyssIHhhcmdjLS07Ci0JICAgIGlmICgoeGFyZ2MgPCAxKSB8fCAoKip4YXJndiA9 PSAnLScpKSB7Ci0JCVhGQVRBTCgibWlzc2luZyBjYWxsIHVzZXIgZGF0YSBzdHJpbmciKTsKLQkg ICAgfQotCSAgICBja3N0cm5jcHkodWRhdGEsKnhhcmd2LE1BWENVREFUQSk7Ci0JICAgIGlmICgo aW50KXN0cmxlbih1ZGF0YSkgPD0gTUFYQ1VEQVRBKSB7Ci0JCWN1ZGF0YSA9IDE7Ci0JICAgIH0g ZWxzZSB7Ci0JCVhGQVRBTCgiSW52YWxpZCBjYWxsIHVzZXIgZGF0YSIpOwotCSAgICB9Ci0JICAg IGJyZWFrOwotCi0JICBjYXNlICdvJzoJCQkvKiBYLjI1IGNsb3NlZCB1c2VyIGdyb3VwICovCi0J ICAgIGlmICgqKHhwKzEpKSB7Ci0JCVhGQVRBTCgiaW52YWxpZCBhcmd1bWVudCBidW5kbGluZyIp OwotCSAgICB9Ci0JICAgIHhhcmd2KyssIHhhcmdjLS07Ci0JICAgIGlmICgoeGFyZ2MgPCAxKSB8 fCAoKip4YXJndiA9PSAnLScpKSB7Ci0JCVhGQVRBTCgibWlzc2luZyBjbG9zZWQgdXNlciBncm91 cCBpbmRleCIpOwotCSAgICB9Ci0JICAgIHogPSBhdG9pKCp4YXJndik7CQkvKiBDb252ZXJ0IHRv IG51bWJlciAqLwotCSAgICBpZiAoeiA+PSAwICYmIHogPD0gOTkpIHsKLQkJY2xvc2dyID0gejsK LQkgICAgfSBlbHNlIHsKLQkJWEZBVEFMKCJJbnZhbGlkIGNsb3NlZCB1c2VyIGdyb3VwIGluZGV4 Iik7Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0KLQkgIGNhc2UgJ3UnOgkJCS8qIFguMjUgcmV2ZXJz ZSBjaGFyZ2UgY2FsbCAqLwotCSAgICByZXZjYWxsID0gMTsKLQkgICAgYnJlYWs7Ci0jZW5kaWYg LyogQU5ZWDI1ICovCi0jZW5kaWYgLyogTk9MT0NBTCAqLwotCi0JICBjYXNlICdiJzoJCQkvKiBC aXRzLXBlci1zZWNvbmQgZm9yIHNlcmlhbCBkZXZpY2UgKi8KLQkgICAgaWYgKCooeHArMSkpIHsK LQkJWEZBVEFMKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRsaW5nIik7Ci0JICAgIH0KLQkgICAgeGFy Z3YrKywgeGFyZ2MtLTsKLQkgICAgaWYgKCh4YXJnYyA8IDEpIHx8ICgqKnhhcmd2ID09ICctJykp IHsKLQkJWEZBVEFMKCJtaXNzaW5nIGJwcyIpOwotCSAgICB9Ci0JICAgIHp6ID0gYXRvbCgqeGFy Z3YpOwkJLyogQ29udmVydCB0byBsb25nIGludCAqLwotCSAgICBpID0genogLyAxMEw7Ci0jaWZu ZGVmIE5PTE9DQUwKLQkgICAgaWYgKHR0c3NwZChpKSA+IC0xKQkJLyogQ2hlY2sgYW5kIHNldCBp dCAqLwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLQkgICAgICBzcGVlZCA9IHR0Z3NwZCgpOwkJLyog YW5kIHJlYWQgaXQgYmFjay4gKi8KLSNpZm5kZWYgTk9MT0NBTAotCSAgICBlbHNlIHsKLQkJWEZB VEFMKCJ1bnN1cHBvcnRlZCB0cmFuc21pc3Npb24gcmF0ZSIpOwotCSAgICB9Ci0jZW5kaWYgLyog Tk9MT0NBTCAqLwotCSAgICBicmVhazsKLQotI2lmbmRlZiBOT0RJQUwKLSNpZm5kZWYgTk9JQ1AK LQkgIGNhc2UgJ20nOgkJCS8qIE1vZGVtIHR5cGUgKi8KLQkgICAgaWYgKCooeHArMSkpIHsKLQkJ WEZBVEFMKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRsaW5nIGFmdGVyIC1tIik7Ci0JICAgIH0KLQkg ICAgeGFyZ3YrKywgeGFyZ2MtLTsKLQkgICAgaWYgKCh4YXJnYyA8IDEpIHx8ICgqKnhhcmd2ID09 ICctJykpIHsKLQkJWEZBVEFMKCJtb2RlbSB0eXBlIG1pc3NpbmciKTsKLQkgICAgfQotCSAgICB5 ID0gbG9va3VwKG1kbXRhYiwqeGFyZ3Ysbm1kbSwmeik7Ci0JICAgIGlmICh5IDwgMCkgewotCQlY RkFUQUwoInVua25vd24gbW9kZW0gdHlwZSIpOwotCSAgICB9Ci0JICAgIHVzZXJtZG0gPSAwOwot CSAgICB1c2VybWRtID0gKHkgPT0gZGlhbHVkdCkgPyB4IDogMDsKLQkgICAgaW5pdG1kbSh5KTsK LQkgICAgYnJlYWs7Ci0jZW5kaWYgLyogTk9JQ1AgKi8KLSNlbmRpZiAvKiBOT0RJQUwgKi8KLQot I2lmbmRlZiBOT1hGRVIKLQkgIGNhc2UgJ2UnOgkJCS8qIEV4dGVuZGVkIHBhY2tldCBsZW5ndGgg Ki8KLQkgICAgaWYgKCooeHArMSkpIHsKLQkJWEZBVEFMKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRs aW5nIGFmdGVyIC1lIik7Ci0JICAgIH0KLQkgICAgeGFyZ3YrKywgeGFyZ2MtLTsKLQkgICAgaWYg KCh4YXJnYyA8IDEpIHx8ICgqKnhhcmd2ID09ICctJykpIHsKLQkJWEZBVEFMKCJtaXNzaW5nIGxl bmd0aCIpOwotCSAgICB9Ci0JICAgIHogPSBhdG9pKCp4YXJndik7CQkvKiBDb252ZXJ0IHRvIG51 bWJlciAqLwotCSAgICBpZiAoeiA+IDEwICYmIHogPD0gbWF4cnBzKSB7Ci0JCXJwc2l6ID0gdXJw c2l6ID0gejsKLQkJaWYgKHogPiA5NCkgcnBzaXogPSA5NDsJLyogRmFsbGJhY2sgaWYgb3RoZXIg S2VybWl0IGNhbid0ICovCi0JICAgIH0gZWxzZSB7Ci0JCVhGQVRBTCgiVW5zdXBwb3J0ZWQgcGFj a2V0IGxlbmd0aCIpOwotCSAgICB9Ci0JICAgIGJyZWFrOwotCi0JICBjYXNlICd2JzoJCQkvKiBW aW5kb3cgc2l6ZSAqLwotCSAgICBpZiAoKih4cCsxKSkgewotCQlYRkFUQUwoImludmFsaWQgYXJn dW1lbnQgYnVuZGxpbmciKTsKLQkgICAgfQotCSAgICB4YXJndisrLCB4YXJnYy0tOwotCSAgICBp ZiAoKHhhcmdjIDwgMSkgfHwgKCoqeGFyZ3YgPT0gJy0nKSkgewotCQlYRkFUQUwoIm1pc3Npbmcg b3IgYmFkIHdpbmRvdyBzaXplIik7Ci0JICAgIH0KLQkgICAgeiA9IGF0b2koKnhhcmd2KTsJCS8q IENvbnZlcnQgdG8gbnVtYmVyICovCi0JICAgIGlmICh6IDwgMzIpIHsJCS8qIElmIGluIHJhbmdl ICovCi0JCXdzbG90ciA9IHo7CQkvKiBzZXQgaXQgKi8KLQkJaWYgKHogPiAxKSBzd2NhcHIgPSAx OwkvKiBTZXQgY2FwYXMgYml0IGlmIHdpbmRvd2luZyAqLwotCSAgICB9IGVsc2UgewotCQlYRkFU QUwoIlVuc3VwcG9ydGVkIHBhY2tldCBsZW5ndGgiKTsKLQkgICAgfQotCSAgICBicmVhazsKLSNl bmRpZiAvKiBOT1hGRVIgKi8KLQotCSAgY2FzZSAnaSc6CQkJLyogVHJlYXQgZmlsZXMgYXMgYmlu YXJ5ICovCi0JICAgIGJpbmFyeSA9IFhZRlRfQjsKLQkgICAgeGZlcm1vZGUgPSBYTU9ERV9NOwkJ LyogVHJhbnNmZXIgbW9kZSBtYW51YWwgKi8KLQkgICAgZmlsZXBlZWsgPSAwOwotI2lmZGVmIFBB VFRFUk5TCi0JICAgIHBhdHRlcm5zID0gMDsKLSNlbmRpZiAvKiBQQVRURVJOUyAqLwotCSAgICBi cmVhazsKLQotI2lmbmRlZiBOT1hGRVIKLQkgIGNhc2UgJ3cnOgkJCS8qIFdyaXRlb3ZlciAqLwot CSAgICBja3dhcm4gPSAwOwotCSAgICBmbmNhY3QgPSBYWUZYX1g7Ci0JICAgIGJyZWFrOwotI2Vu ZGlmIC8qIE5PWEZFUiAqLwotCi0JICBjYXNlICdxJzoJCQkvKiBRdWlldCAqLwotCSAgICBxdWll dCA9IDE7Ci0JICAgIGJyZWFrOwotCi0jaWZkZWYgREVCVUcKLQkgIGNhc2UgJ2QnOgkJCS8qIERF QlVHICovCi0JICAgIGJyZWFrOwkJCS8qIEhhbmRsZWQgaW4gcHJlc2NhbigpICovCi0jZW5kaWYg LyogREVCVUcgKi8KLQotCSAgY2FzZSAnMCc6IHsJCQkvKiBJbiB0aGUgbWlkZGxlICovCi0JICAg ICAgZXh0ZXJuIGludCB0dF9lc2NhcGUsIGxzY2FwcjsKLQkgICAgICB0dF9lc2NhcGUgPSAwOwkJ LyogTm8gZXNjYXBlIGNoYXJhY3RlciAqLwotCSAgICAgIGZsb3cgPSAwOwkJCS8qIE5vIFhvbi9Y b2ZmICh3aGF0IGFib3V0IGh3ZmM/KSAqLwotI2lmbmRlZiBOT1hGRVIKLQkgICAgICBsc2NhcHIg PSAwOwkJLyogTm8gbG9ja2luZyBzaGlmdHMgKi8KLSNlbmRpZiAvKiBOT1hGRVIgKi8KLSNpZmRl ZiBDS19BUEMKLQkgICAgICB7Ci0JCSAgZXh0ZXJuIGludCBhcGNzdGF0dXM7CS8qIE5vIEFQQ3Mg Ki8KLQkJICBhcGNzdGF0dXMgPSBBUENfT0ZGOwotCSAgICAgIH0KLSNlbmRpZiAvKiBDS19BUEMg Ki8KLSNpZm5kZWYgTk9MT0NBTAotI2lmZGVmIENLX0FVVE9ETAotICAgICAgICAgICAgICBzZXRh dXRvZGwoMCwwKTsJCS8qIE5vIGF1dG9kb3dubG9hZCAqLwotI2VuZGlmIC8qIENLX0FVVE9ETCAq LwotI2VuZGlmIC8qIE5PTE9DQUwgKi8KLSNpZm5kZWYgTk9DU0VUUwotCSAgICAgIHsKLQkJICBl eHRlcm4gaW50IHRjc3IsIHRjc2w7IC8qIE5vIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24gKi8K LQkJICB0Y3NyID0gMDsKLQkJICB0Y3NsID0gdGNzcjsJCS8qIE1ha2UgdGhlc2UgZXF1YWwgKi8K LQkgICAgICB9Ci0jZW5kaWYgLyogTk9DU0VUUyAqLwotI2lmZGVmIFROQ09ERQotCSAgICAgIFRF TE9QVF9ERUZfQ19VX01PREUoVEVMT1BUX0tFUk1JVCkgPSBUTl9OR19SRjsKLQkgICAgICBURUxP UFRfREVGX0NfTUVfTU9ERShURUxPUFRfS0VSTUlUKSA9IFROX05HX1JGOwotCSAgICAgIFRFTE9Q VF9ERUZfU19VX01PREUoVEVMT1BUX0tFUk1JVCkgPSBUTl9OR19SRjsKLQkgICAgICBURUxPUFRf REVGX1NfTUVfTU9ERShURUxPUFRfS0VSTUlUKSA9IFROX05HX1JGOwotI2VuZGlmIC8qIFROQ09E RSAqLwotCSAgfQotLyogRmFsbCB0aHJ1Li4uICovCi0KLQkgIGNhc2UgJzgnOgkJCS8qIDgtYml0 IGNsZWFuICovCi0JICAgIHBhcml0eSA9IDA7Ci0JICAgIGNtZG1zayA9IDB4ZmY7Ci0JICAgIGNt YXNrID0gMHhmZjsKLQkgICAgYnJlYWs7Ci0KLQkgIGNhc2UgJ1YnOiB7Ci0JICAgICAgZXh0ZXJu IGludCB4ZmVybW9kZTsKLSNpZmRlZiBQQVRURVJOUwotCSAgICAgIGV4dGVybiBpbnQgcGF0dGVy bnM7Ci0JICAgICAgcGF0dGVybnMgPSAwOwkJLyogTm8gcGF0dGVybnMgKi8KLSNlbmRpZiAvKiBQ QVRURVJOUyAqLwotCSAgICAgIHhmZXJtb2RlID0gWE1PREVfTTsJLyogTWFudWFsIHRyYW5zZmVy IG1vZGUgKi8KLQkgICAgICBmaWxlcGVlayA9IDA7Ci0JICAgICAgYnJlYWs7Ci0JICB9Ci0KLQkg IGNhc2UgJ3AnOgkJCS8qIFNFVCBQQVJJVFkgKi8KLQkgICAgaWYgKCooeHArMSkpIHsKLQkJWEZB VEFMKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRsaW5nIik7Ci0JICAgIH0KLQkgICAgeGFyZ3YrKywg eGFyZ2MtLTsKLQkgICAgaWYgKCh4YXJnYyA8IDEpIHx8ICgqKnhhcmd2ID09ICctJykpIHsKLQkJ WEZBVEFMKCJtaXNzaW5nIHBhcml0eSIpOwotCSAgICB9Ci0JICAgIHN3aXRjaCh4ID0gKip4YXJn dikgewotCSAgICAgIGNhc2UgJ2UnOgotCSAgICAgIGNhc2UgJ28nOgotCSAgICAgIGNhc2UgJ20n OgotCSAgICAgIGNhc2UgJ3MnOiBwYXJpdHkgPSB4OyBicmVhazsKLQkgICAgICBjYXNlICduJzog cGFyaXR5ID0gMDsgYnJlYWs7Ci0JICAgICAgZGVmYXVsdDogIHsgWEZBVEFMKCJpbnZhbGlkIHBh cml0eSIpOyB9Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0KLQkgIGNhc2UgJ3QnOgkJCS8qIExpbmUg dHVybmFyb3VuZCBoYW5kc2hha2UgKi8KLQkgICAgdHVybiA9IDE7Ci0JICAgIHR1cm5jaCA9IFhP TjsJCS8qIFhPTiBpcyB0dXJuYXJvdW5kIGNoYXJhY3RlciAqLwotCSAgICBkdXBsZXggPSAxOwkJ CS8qIEhhbGYgZHVwbGV4ICovCi0JICAgIGZsb3cgPSAwOwkJCS8qIE5vIGZsb3cgY29udHJvbCAq LwotCSAgICBicmVhazsKLQotCSAgY2FzZSAnQic6Ci0JICAgIGJnc2V0ID0gMTsJCQkvKiBGb3Jj ZSBiYWNrZ3JvdW5kIChiYXRjaCkgKi8KLQkgICAgYmFja2dyZCA9IDE7Ci0JICAgIGJyZWFrOwot Ci0JICBjYXNlICd6JzoJCQkvKiBGb3JjZSBmb3JlZ3JvdW5kICovCi0JICAgIGJnc2V0ID0gMDsK LQkgICAgYmFja2dyZCA9IDA7Ci0JICAgIGJyZWFrOwotCi0jaWZuZGVmIE5PWEZFUgotI2lmZGVm IFJFQ1VSU0lWRQotCSAgY2FzZSAnTCc6Ci0JICAgIHJlY3Vyc2l2ZSA9IDI7Ci0JICAgIG5vbGlu a3MgPSAyOwotCSAgICBmbnNwYXRoID0gUEFUSF9SRUw7Ci0JICAgIGJyZWFrOwotI2VuZGlmIC8q IFJFQ1VSU0lWRSAqLwotI2VuZGlmIC8qIE5PWEZFUiAqLwotCi0jaWZuZGVmIE5PU1BMCi0JICBj YXNlICdNJzoJCQkvKiBNeSBVc2VyIE5hbWUgKi8KLQkgICAgaWYgKCooeHArMSkpIHsKLQkJWEZB VEFMKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRsaW5nIik7Ci0JICAgIH0KLQkgICAgeGFyZ3YrKywg eGFyZ2MtLTsKLQkgICAgaWYgKCh4YXJnYyA8IDEpIHx8ICgqKnhhcmd2ID09ICctJykpIHsKLQkJ WEZBVEFMKCJtaXNzaW5nIHVzZXJuYW1lIik7Ci0JICAgIH0KLQkgICAgaWYgKChpbnQpc3RybGVu KCp4YXJndikgPiA2MykgewotCQlYRkFUQUwoInVzZXJuYW1lIHRvbyBsb25nIik7Ci0JICAgIH0K LSNpZmRlZiBJS1NECi0JICAgIGlmICghaW5zZXJ2ZXIpCi0jZW5kaWYgLyogSUtTRCAqLwotCSAg ICAgIHsKLQkJICBja3N0cm5jcHkodWlkYnVmLCp4YXJndixVSURCVUZMRU4pOwotCQkgIGhhdmVm dHB1aWQgPSAxOwotCSAgICAgIH0KLQkgICAgYnJlYWs7Ci0jZW5kaWYgLyogTk9TUEwgKi8KLQot I2lmZGVmIENLX05FVEJJT1MKLQkgIGNhc2UgJ04nOgkJCS8qIE5ldEJpb3MgQWRhcHRlciBOdW1i ZXIgZm9sbG93cyAqLwotCSAgICBpZiAoKih4cCsxKSkgewotCQlYRkFUQUwoImludmFsaWQgYXJn dW1lbnQgYnVuZGxpbmcgYWZ0ZXIgLU4iKTsKLQkgICAgfQotCSAgICB4YXJndisrLCB4YXJnYy0t OwotCSAgICBpZiAoKHhhcmdjIDwgMSkgfHwgKCoqeGFyZ3YgPT0gJy0nKSkgewotCQlYRkFUQUwo Im1pc3NpbmcgTmV0QmlvcyBBZGFwdGVyIG51bWJlciIpOwotCSAgICB9Ci0JICAgIGlmICgoc3Ry bGVuKCp4YXJndikgIT0gMSkgfHwKLQkJKCp4YXJndilbMF0gIT0gJ1gnICYmCi0JCShhdG9pKCp4 YXJndikgPCAwKSAmJgotCQkoYXRvaSgqeGFyZ3YpID4gOSkpIHsKLQkJWEZBVEFMKCJJbnZhbGlk IE5ldEJpb3MgQWRhcHRlciAtIEFkYXB0ZXJzIDAgdG8gOSBhcmUgdmFsaWQiKTsKLQkgICAgfQot CSAgICBicmVhazsKLSNlbmRpZiAvKiBDS19ORVRCSU9TICovCi0KLSNpZmRlZiBORVRDT05OCi0J ICBjYXNlICdGJzoKLQkgICAgbmV0d29yayA9IDE7Ci0JICAgIGlmICgqKHhwKzEpKSB7Ci0JCVhG QVRBTCgiaW52YWxpZCBhcmd1bWVudCBidW5kbGluZyBhZnRlciAtRiIpOwotCSAgICB9Ci0JICAg IHhhcmd2KyssIHhhcmdjLS07Ci0JICAgIGlmICgoeGFyZ2MgPCAxKSB8fCAoKip4YXJndiA9PSAn LScpKSB7Ci0JCVhGQVRBTCgibmV0d29yayBmaWxlIGRlc2NyaXB0b3IgbWlzc2luZyIpOwotCSAg ICB9Ci0JICAgIGNrc3RybmNweSh0dG5hbWUsKnhhcmd2LFRUTkFNTEVOKzEpOwotCSAgICBuZXR0 eXBlID0gTkVUX1RDUEI7Ci0JICAgIG1kbXR5cCA9IC1uZXR0eXBlOwotCSAgICB0ZWxuZXRmZCA9 IDE7Ci0JICAgIGxvY2FsID0gMTsKLQkgICAgYnJlYWs7Ci0jZW5kaWYgLyogTkVUQ09OTiAqLwot Ci0jaWZkZWYgQ09NTUVOVAotI2lmZGVmIE9TMlBNCi0JICBjYXNlICdQJzoJCQkvKiBPUy8yIFBy ZXNlbnRhdGlvbiBNYW5hZ2VyICovCi0JICAgIGlmICgqKHhwKzEpKSB7Ci0JCVhGQVRBTCgiaW52 YWxpZCBhcmd1bWVudCBidW5kbGluZyBhZnRlciAtUCIpOwotCSAgICB9Ci0JICAgIHhhcmd2Kyss IHhhcmdjLS07Ci0JICAgIGlmICgoeGFyZ2MgPCAxKSB8fCAoKip4YXJndiA9PSAnLScpKSB7Ci0J CVhGQVRBTCgicGlwZSBkYXRhIG1pc3NpbmciKTsKLQkgICAgfQotCSAgICBwaXBlZGF0YSA9ICp4 YXJndjsKLQkgICAgYnJlYWs7Ci0jZW5kaWYgLyogT1MyUE0gKi8KLSNlbHNlCi0JICBjYXNlICdQ JzoJCQkvKiBGaWxlbmFtZXMgbGl0ZXJhbCAqLwotCSAgICBmbmNudiAgPSBYWUZOX0w7Ci0JICAg IGZfc2F2ZSA9IFhZRk5fTDsKLQkgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0j aWZuZGVmIE5PSUNQCi0JICBjYXNlICdIJzoKLQkgICAgbm9oZXJhbGQgPSAxOwotCSAgICBicmVh azsKLSNlbmRpZiAvKiBOT0lDUCAqLwotCi0jaWZkZWYgT1MyCi0JICBjYXNlICdXJzoKLQkgICAg aWYgKCooeHArMSkpIHsKLQkJWEZBVEFMKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRsaW5nIGFmdGVy IC1XIik7Ci0JICAgIH0KLQkgICAgeGFyZ3YrKywgeGFyZ2MtLTsKLQkgICAgaWYgKCh4YXJnYyA8 IDEpKSB7IC8qIGNvdWxkIGJlIG5lZ2F0aXZlICovCi0JCVhGQVRBTCgiV2luZG93IGhhbmRsZSBt aXNzaW5nIik7Ci0JICAgIH0KLQkgICAgeGFyZ3YrKywgeGFyZ2MtLTsKLQkgICAgaWYgKCh4YXJn YyA8IDEpIHx8ICgqKnhhcmd2ID09ICctJykpIHsKLQkJWEZBVEFMKCJLZXJtaXQgSW5zdGFuY2Ug bWlzc2luZyIpOwotCSAgICB9Ci0JICAgIC8qIEFjdGlvbiBkb25lIGluIHByZXNjYW4gKi8KLQkg ICAgYnJlYWs7Ci0KLQkgIGNhc2UgJyMnOgkJCS8qIEs5NSBzdGRpbyB0aHJlYWRzICovCi0JICAg IHhhcmd2KyssIHhhcmdjLS07CQkvKiBTa2lwIHBhc3QgYXJndW1lbnQgKi8KLQkgICAgYnJlYWs7 CQkJLyogQWN0aW9uIGRvbmUgaW4gcHJlc2NhbiAqLwotI2VuZGlmIC8qIE9TMiAqLwotCi0jaWZk ZWYgTkVXRlRQCi0JICBjYXNlICc5JzoJCQkvKiBGVFAgKi8KLQkgICAgaWYgKCooeHArMSkpIHsK LQkJWEZBVEFMKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRsaW5nIGFmdGVyIC05Iik7Ci0JICAgIH0K LQkgICAgeGFyZ3YrKywgeGFyZ2MtLTsKLQkgICAgaWYgKCh4YXJnYyA8IDEpIHx8ICgqKnhhcmd2 ID09ICctJykpIHsKLQkJWEZBVEFMKCJGVFAgc2VydmVyIGFkZHJlc3MgbWlzc2luZyIpOwotCSAg ICB9Ci0JICAgIG1ha2VzdHIoJmZ0cF9ob3N0LCp4YXJndik7Ci0JICAgIGJyZWFrOwotI2VuZGlm IC8qIE5FV0ZUUCAqLwotCi0JICBkZWZhdWx0OgotCSAgICBmYXRhbDIoKnhhcmd2LAotI2lmZGVm IE5UCi0gICAgICAgICAgICAgICAgICAgImludmFsaWQgY29tbWFuZC1saW5lIG9wdGlvbiwgdHlw ZSBcIms5NSAtaFwiIGZvciBoZWxwIgotI2Vsc2UKLSNpZmRlZiBPUzIKLSAgICAgICAgICAgICAg ICAgICAiaW52YWxpZCBjb21tYW5kLWxpbmUgb3B0aW9uLCB0eXBlIFwiazIgLWhcIiBmb3IgaGVs cCIKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgImludmFsaWQgY29tbWFuZC1saW5lIG9wdGlv biwgdHlwZSBcImtlcm1pdCAtaFwiIGZvciBoZWxwIgotI2VuZGlmIC8qIE9TMiAqLwotI2VuZGlm IC8qIE5UICovCi0JCSAgICk7Ci0gICAgICAgIH0KLQlpZiAoIXhwKSBicmVhazsKLQl4ID0gKisr eHA7CQkJLyogU2VlIGlmIG9wdGlvbnMgYXJlIGJ1bmRsZWQgKi8KLSAgICB9Ci0gICAgcmV0dXJu KDApOwotfQotCi0jaWZkZWYgVE5DT0RFCi0vKiAgRCBPIFQgTiBBIFIgRyAgLS0gIERvIGEgdGVs bmV0IGNvbW1hbmQtbGluZSBhcmd1bWVudC4gICovCi0KLXN0YXRpYyBpbnQKLSNpZmRlZiBDS19B TlNJQwotZG90bmFyZyhjaGFyIHgpCi0jZWxzZQotZG90bmFyZyh4KSBjaGFyIHg7Ci0jZW5kaWYg LyogQ0tfQU5TSUMgKi8KLS8qIGRvdG5hcmcgKi8gewotICAgIGNoYXIgKnhwOwotCi0gICAgeHAg PSAqeGFyZ3YrMTsgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciBmb3IgYnVuZGxlZCBh cmdzICovCi0gICAgZGVidWcoRjExMSwiZG90bmFyZyBlbnRyeSIseHAseGFyZ2MpOwotICAgIHdo aWxlICh4KSB7Ci0gICAgICAgIGRlYnVnKEYwMDAsImRvdG5hcmcgYXJnIiwiIix4KTsKLSAgICAg ICAgc3dpdGNoICh4KSB7ICAgICAgICAgICAgICAgICAgICAvKiBCaWcgc3dpdGNoIG9uIGFyZyAq LwotCi0jaWZuZGVmIENPTU1FTlQKLQkgIGNhc2UgJy0nOgkJCS8qIEV4dGVuZGVkIGNvbW1hbmRz Li4uICovCi0gICAgICAgICAgICBpZiAoZG94YXJnKHhhcmd2LDApIDwgMCkgewotICAgICAgICAg ICAgICAgIFhGQVRBTCgiRXh0ZW5kZWQgb3B0aW9uIGVycm9yIik7Ci0gICAgICAgICAgICB9IC8q IEZ1bGwgdGhydS4uLiAqLwotCSAgY2FzZSAnKyc6CQkJLyogRXh0ZW5kZWQgY29tbWFuZCBmb3Ig cHJlc2NhbigpICovCi0gICAgICAgICAgICByZXR1cm4oMCk7Ci0jZWxzZSAgLyogQ09NTUVOVCAq LwotCSAgY2FzZSAnLSc6Ci0JICBjYXNlICcrJzoKLQkgICAgWEZBVEFMKCJFeHRlbmRlZCBvcHRp b25zIG5vdCBjb25maWd1cmVkIik7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi0vKgotICogLSMg ICAgICAgICAgICAgICAgS2VybWl0IDk1IFN0YXJ0dXAgRmxhZ3MKLSAqIC04ICAgICAgICAgICAg ICAgIE5lZ290aWF0ZSBUZWxuZXQgQmluYXJ5IGluIGJvdGggZGlyZWN0aW9ucwotICogLWEgICAg ICAgICAgICAgICAgUmVxdWlyZSB1c2Ugb2YgVGVsbmV0IGF1dGhlbnRpY2F0aW9uCi0gKiAtYyAg ICAgICAgICAgICAgICBEbyBub3QgcmVhZCB0aGUgLnRlbG5ldHJjIGZpbGUKLSAqIC1kICAgICAg ICAgICAgICAgIFR1cm4gb24gZGVidWcgbW9kZQotICogLUUgICAgICAgICAgICAgICAgTm8gZXNj YXBlIGNoYXJhY3RlcgotICogLWYgICAgICAgICAgICAgICAgRm9yd2FyZCBjcmVkZW50aWFscyB0 byBob3N0Ci0gKiAtSyAgICAgICAgICAgICAgICBSZWZ1c2UgdXNlIG9mIGF1dGhlbnRpY2F0aW9u OyBkbyBub3Qgc2VuZCB1c2VybmFtZQotICogLWsgcmVhbG0gICAgICAgICAgU2V0IGRlZmF1bHQg cmVhbG0KLSAqIC1sIHVzZXIgICAgICAgICAgIFNldCB1c2VybmFtZSBhbmQgcmVxdWVzdCBUZWxu ZXQgYXV0aGVudGljYXRpb24KLSAqIC1MICAgICAgICAgICAgICAgIE5lZ290aWF0ZSBUZWxuZXQg QmluYXJ5IE91dHB1dCBvbmx5Ci0gKiAtcSAgICAgICAgICAgICAgICBRdWlldCBtb2RlIChzdXBw cmVzcyBtZXNzYWdlcykKLSAqIC1TIHRvcyAgICAgICAgICAgIFVzZSB0aGUgSVAgdHlwZS1vZi1z ZXJ2aWNlIHRvcwotICogLXggICAgICAgICAgICAgICAgUmVxdWlyZSBFbmNyeXB0aW9uCi0gKiAt RCAgICAgICAgICAgICAgICBEaXNhYmxlIGZvcndhcmQtWAotICogLVQgY2VydD1maWxlICAgICAg VXNlIGNlcnRpZmljYXRlIGluIGZpbGUKLSAqIC1UIGtleT1maWxlICAgICAgIFVzZSBwcml2YXRl IGtleSBpbiBmaWxlCi0gKiAtVCBjcmxmaWxlPWZpbGUgICBVc2UgQ1JMIGluIGZpbGUKLSAqIC1U IGNybGRpcj1kaXIgICAgIFVzZSBDUkxzIGluIGRpcmVjdG9yeQotICogLVQgY2lwaGVyPXN0cmlu ZyAgVXNlIG9ubHkgY2lwaGVycyBpbiBzdHJpbmcKLSAqIC1YIGF0eXBlICAgICAgICAgIERpc2Fi bGUgdXNlIG9mIGF0eXBlIGF1dGhlbnRpY2F0aW9uCi0gKiAtWSAgICAgICAgICAgICAgICBEaXNh YmxlIGluaXQgZmlsZSBwcm9jZXNzaW5nCi0gKgotICovCi0JICBjYXNlICdoJzoJCQkvKiBoZWxw ICovCi0JICAgIHVzYWdlKCk7Ci0JICAgIGRvZXhpdChHT09EX0VYSVQsLTEpOwotCSAgICBicmVh azsKLQotCSAgY2FzZSAnOCc6CQkJLyogVGVsbmV0IEJpbmFyeSBpbiBib3RoIGRpcmVjdGlvbnMg Ki8KLQkgICAgVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfQklOQVJZKSA9IFROX05HX01VOwot CSAgICBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfQklOQVJZKSA9IFROX05HX01VOwotCSAg ICBwYXJpdHkgPSAwOwotCSAgICBjbWRtc2sgPSAweGZmOwotCSAgICBjbWFzayA9IDB4ZmY7Ci0J ICAgIGJyZWFrOwotCi0JICBjYXNlICdhJzoJCQkvKiBSZXF1aXJlIFRlbG5ldCBBdXRoICovCi0J ICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9BVVRIRU5USUNBVElPTikgPSBUTl9OR19N VTsKLQkgICAgYnJlYWs7Ci0KLQkgIGNhc2UgJ1knOgotCSAgICB4YXJndisrLCB4YXJnYy0tOwkJ LyogU2tpcCBwYXN0IGFyZ3VtZW50ICovCi0JICAgIGJyZWFrOwkJCS8qIEFjdGlvbiBkb25lIGlu IHByZXNjYW4gKi8KLQotI2lmZGVmIE9TMgotICAgICAgICAgIGNhc2UgJyMnOgkJCS8qIEs5NSBz dGRpbyB0aHJlYWRzICovCi0JICAgIHhhcmd2KyssIHhhcmdjLS07CQkvKiBTa2lwIHBhc3QgYXJn dW1lbnQgKi8KLQkgICAgYnJlYWs7CQkJLyogQWN0aW9uIGRvbmUgaW4gcHJlc2NhbiAqLwotI2Vu ZGlmIC8qIE9TMiAqLwotCi0gICAgICAgICAgY2FzZSAncSc6CSAgICAgICAgICAgICAgICAvKiBR dWlldCAqLwotCSAgICBxdWlldCA9IDE7Ci0JICAgIGJyZWFrOwotCi0JICBjYXNlICdkJzoKLSNp ZmRlZiBERUJVRwotCSAgICBpZiAoZGVibG9nKSB7Ci0JCWRlYnRpbSA9IDE7Ci0JICAgIH0gZWxz ZSB7Ci0JCWRlYmxvZyA9IGRlYm9wbigiZGVidWcubG9nIiwwKTsKLQkgICAgfQotI2VuZGlmIC8q IERFQlVHICovCi0JICAgIGJyZWFrOwotCi0JICBjYXNlICdFJzogewkJCS8qIE5vIEVzY2FwZSBj aGFyYWN0ZXIgKi8KLQkgICAgICBleHRlcm4gaW50IHR0X2VzY2FwZTsKLQkgICAgICB0dF9lc2Nh cGUgPSAwOwotCSAgfQotCSAgICBicmVhazsKLQotCSAgY2FzZSAnSyc6Ci0JICAgIFRFTE9QVF9E RUZfQ19NRV9NT0RFKFRFTE9QVF9BVVRIRU5USUNBVElPTikgPSBUTl9OR19SRjsKLQkgICAgdWlk YnVmWzBdID0gTlVMOwotCSAgICBicmVhazsKLQotCSAgY2FzZSAnbCc6IC8qIFNldCB1c2VybmFt ZSBhbmQgcmVxdWVzdCB0ZWxuZXQgYXV0aGVudGljYXRpb24gKi8KLQkgICAgaWYgKCooeHArMSkp IHsKLQkJWEZBVEFMKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRsaW5nIik7Ci0JICAgIH0KLQkgICAg eGFyZ3YrKywgeGFyZ2MtLTsKLQkgICAgaWYgKCh4YXJnYyA8IDEpIHx8ICgqKnhhcmd2ID09ICct JykpIHsKLQkJWEZBVEFMKCJtaXNzaW5nIHVzZXJuYW1lIik7Ci0JICAgIH0KLQkgICAgaWYgKChp bnQpc3RybGVuKCp4YXJndikgPiA2MykgewotCQlYRkFUQUwoInVzZXJuYW1lIHRvbyBsb25nIik7 Ci0JICAgIH0KLQkgICAgY2tzdHJuY3B5KHVpZGJ1ZiwqeGFyZ3YsVUlEQlVGTEVOKTsKLQkgICAg VEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA9IFROX05HX01VOwot CSAgICBicmVhazsKLQotCSAgY2FzZSAnTCc6CQkJLyogUmVxdWlyZSBCSU5BUlkgbW9kZSBvdXRi b3VuZCBvbmx5ICovCi0JICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9CSU5BUlkpID0g VE5fTkdfTVU7Ci0JICAgIGJyZWFrOwotCi0JICBjYXNlICd4JzoJCQkvKiBSZXF1aXJlIEVuY3J5 cHRpb24gKi8KLQkgICAgVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBU Tl9OR19NVTsKLQkgICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0g VE5fTkdfTVU7Ci0JICAgIGJyZWFrOwotCi0JICBjYXNlICdEJzoJCQkvKiBEaXNhYmxlIHVzZSBv ZiBGb3J3YXJkIFggKi8KLQkgICAgVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfRk9SV0FSRF9Y KSA9IFROX05HX1JGOwotCSAgICBicmVhazsKLQotCSAgY2FzZSAnZic6CQkJLyogRm9yd2FyZCBj cmVkZW50aWFscyB0byBob3N0ICovCi0JICAgIHsKLSNpZmRlZiBDS19BVVRIRU5USUNBVElPTgot CQlleHRlcm4gaW50IGZvcndhcmRfZmxhZzsKLQkJZm9yd2FyZF9mbGFnID0gMTsKLSNlbmRpZgot CQlicmVhazsKLQkgICAgfQotCi0JICBjYXNlICdrJzogewotI2lmZGVmIENLX0tFUkJFUk9TCi0J ICAgICAgZXh0ZXJuIGNoYXIgKiBrcmI1X2RfcmVhbG0sICoga3JiNF9kX3JlYWxtOwotI2VuZGlm IC8qIENLX0tFUkJFUk9TICovCi0JICAgICAgaWYgKCooeHArMSkpIHsKLQkJICBYRkFUQUwoImlu dmFsaWQgYXJndW1lbnQgYnVuZGxpbmciKTsKLQkgICAgICB9Ci0JICAgICAgeGFyZ3YrKywgeGFy Z2MtLTsKLQkgICAgICBpZiAoKHhhcmdjIDwgMSkgfHwgKCoqeGFyZ3YgPT0gJy0nKSkgewotCQkg IFhGQVRBTCgibWlzc2luZyByZWFsbSIpOwotCSAgICAgIH0KLSNpZmRlZiBDS19LRVJCRVJPUwot CSAgICAgIGlmICgoaW50KXN0cmxlbigqeGFyZ3YpID4gNjMpIHsKLQkJICBYRkFUQUwoInJlYWxt IHRvbyBsb25nIik7Ci0JICAgICAgfQotCSAgICAgIG1ha2VzdHIoJmtyYjVfZF9yZWFsbSwqeGFy Z3YpOwotCSAgICAgIG1ha2VzdHIoJmtyYjRfZF9yZWFsbSwqeGFyZ3YpOwotI2VuZGlmIC8qIENL X0tFUkJFUk9TICovCi0JICAgICAgYnJlYWs7Ci0JICB9Ci0KLQkgIGNhc2UgJ1QnOiB7Ci0JICAg ICAgaWYgKCooeHArMSkpIHsKLQkJICBYRkFUQUwoImludmFsaWQgYXJndW1lbnQgYnVuZGxpbmci KTsKLQkgICAgICB9Ci0JICAgICAgeGFyZ3YrKywgeGFyZ2MtLTsKLQkgICAgICBpZiAoKHhhcmdj IDwgMSkgfHwgKCoqeGFyZ3YgPT0gJy0nKSkgewotCQkgIFhGQVRBTCgibWlzc2luZyBjZXJ0PSwg a2V5PSwgY3JsZmlsZT0sIGNybGRpcj0sIG9yIGNpcGhlcj0iKTsKLQkgICAgICB9Ci0jaWZkZWYg Q0tfU1NMCi0JICAgICAgaWYgKCFzdHJuY21wKCp4YXJndiwiY2VydD0iLDUpKSB7Ci0JCSAgZXh0 ZXJuIGNoYXIgKiBzc2xfcnNhX2NlcnRfZmlsZTsKLQkJICBtYWtlc3RyKCZzc2xfcnNhX2NlcnRf ZmlsZSwmKCp4YXJndls1XSkpOwotCSAgICAgIH0gZWxzZSBpZiAoICFzdHJuY21wKCp4YXJndiwi a2V5PSIsNCkgKSB7Ci0JCSAgZXh0ZXJuIGNoYXIgKiBzc2xfcnNhX2tleV9maWxlOwotCQkgIG1h a2VzdHIoJnNzbF9yc2Ffa2V5X2ZpbGUsJigqeGFyZ3ZbNF0pKTsKLQkgICAgICB9IGVsc2UgaWYg KCAhc3RybmNtcCgqeGFyZ3YsImNybGZpbGU9Iiw4KSApIHsKLQkJICBleHRlcm4gY2hhciAqIHNz bF9jcmxfZmlsZTsKLQkJICBtYWtlc3RyKCZzc2xfY3JsX2ZpbGUsJigqeGFyZ3ZbOF0pKTsKLQkg ICAgICB9IGVsc2UgaWYgKCAhc3RybmNtcCgqeGFyZ3YsImNybGRpcj0iLDcpICkgewotCQkgIGV4 dGVybiBjaGFyICogc3NsX2NybF9kaXI7Ci0JCSAgbWFrZXN0cigmc3NsX2NybF9kaXIsJigqeGFy Z3ZbN10pKTsKLQkgICAgICB9IGVsc2UgaWYgKCAhc3RybmNtcCgqeGFyZ3YsImNpcGhlcj0iLDcp ICkgewotCQkgIGV4dGVybiBjaGFyICogc3NsX2NpcGhlcl9saXN0OwotCQkgIG1ha2VzdHIoJnNz bF9jaXBoZXJfbGlzdCwmKCp4YXJndls3XSkpOwotCSAgICAgIH0gZWxzZSB7Ci0JCSAgWEZBVEFM KCJpbnZhbGlkIHBhcmFtZXRlciIpOwotCSAgICAgIH0KLSNlbmRpZiAvKiBDS19TU0wgKi8KLQkg ICAgICBicmVhazsKLQkgIH0KLQotCSAgZGVmYXVsdDoKLQkgICAgZmF0YWwyKCp4YXJndiwKLQkJ ICAgImludmFsaWQgY29tbWFuZC1saW5lIG9wdGlvbiwgdHlwZSBcInRlbG5ldCAtaFwiIGZvciBo ZWxwIgotCQkgICApOwotICAgICAgICB9Ci0KLQlpZiAoIXhwKSBicmVhazsKLQl4ID0gKisreHA7 CQkJLyogU2VlIGlmIG9wdGlvbnMgYXJlIGJ1bmRsZWQgKi8KLSAgICB9Ci0gICAgcmV0dXJuKDAp OwotfQotI2VuZGlmIC8qIFROQ09ERSAqLwotCi0jaWZkZWYgUkxPR0NPREUKLQotLyogIEQgTyBS IEwgRyBBIFIgRyAgLS0gIERvIGEgcmxvZ2luIGNvbW1hbmQtbGluZSBhcmd1bWVudC4gICovCi0K LXN0YXRpYyBpbnQKLSNpZmRlZiBDS19BTlNJQwotZG9ybGdhcmcoY2hhciB4KQotI2Vsc2UKLWRv cmxnYXJnKHgpIGNoYXIgeDsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotLyogZG9ybGdhcmcgKi8g ewotICAgIGNoYXIgKnhwOwotCi0gICAgeHAgPSAqeGFyZ3YrMTsgICAgICAgICAgICAgICAgICAg ICAgLyogUG9pbnRlciBmb3IgYnVuZGxlZCBhcmdzICovCi0gICAgZGVidWcoRjExMSwiZG9ybGdh cmcgZW50cnkiLHhwLHhhcmdjKTsKLSAgICB3aGlsZSAoeCkgewotICAgICAgICBkZWJ1ZyhGMDAw LCJkb3JsZ2FyZyBhcmciLCIiLHgpOwotICAgICAgICBzd2l0Y2ggKHgpIHsgICAgICAgICAgICAg ICAgICAgIC8qIEJpZyBzd2l0Y2ggb24gYXJnICovCi0KLSNpZm5kZWYgQ09NTUVOVAotCSAgY2Fz ZSAnLSc6CQkJLyogRXh0ZW5kZWQgY29tbWFuZHMuLi4gKi8KLSAgICAgICAgICAgIGlmIChkb3hh cmcoeGFyZ3YsMCkgPCAwKSB7Ci0gICAgICAgICAgICBYRkFUQUwoIkV4dGVuZGVkIG9wdGlvbiBl cnJvciIpOwotICAgICAgICAgICAgfSAvKiBGdWxsIHRocnUuLi4gKi8KLQkgIGNhc2UgJysnOgkJ CS8qIEV4dGVuZGVkIGNvbW1hbmQgZm9yIHByZXNjYW4oKSAqLwotICAgICAgICAgICAgcmV0dXJu KDApOwotI2Vsc2UgIC8qIENPTU1FTlQgKi8KLQkgIGNhc2UgJy0nOgotCSAgY2FzZSAnKyc6Ci0J ICAgIFhGQVRBTCgiRXh0ZW5kZWQgb3B0aW9ucyBub3QgY29uZmlndXJlZCIpOwotI2VuZGlmIC8q IENPTU1FTlQgKi8KLQotLyoKLSAqIC1kICAgICAgICAgICAgICAgIERlYnVnCi0gKiAtbCB1c2Vy ICAgICAgICAgICBTZXQgdXNlcm5hbWUKLSAqCi0gKi8KLQkgIGNhc2UgJ2gnOgkJCS8qIGhlbHAg Ki8KLQkgICAgdXNhZ2UoKTsKLQkgICAgZG9leGl0KEdPT0RfRVhJVCwtMSk7Ci0JICAgIGJyZWFr OwotCi0gICAgICAgICAgY2FzZSAnWSc6Ci0JICAgIHhhcmd2KyssIHhhcmdjLS07CQkvKiBTa2lw IHBhc3QgYXJndW1lbnQgKi8KLQkgICAgYnJlYWs7CQkJLyogQWN0aW9uIGRvbmUgaW4gcHJlc2Nh biAqLwotI2lmZGVmIE9TMgotICAgICAgICAgIGNhc2UgJyMnOgkJCS8qIEs5NSBzdGRpbyB0aHJl YWRzICovCi0JICAgIHhhcmd2KyssIHhhcmdjLS07CQkvKiBTa2lwIHBhc3QgYXJndW1lbnQgKi8K LQkgICAgYnJlYWs7CQkJLyogQWN0aW9uIGRvbmUgaW4gcHJlc2NhbiAqLwotI2VuZGlmIC8qIE9T MiAqLwotICAgICAgICAgIGNhc2UgJ3EnOgkgICAgICAgICAgICAgICAgLyogUXVpZXQgKi8KLQkg ICAgcXVpZXQgPSAxOwotCSAgICBicmVhazsKLQotCSAgY2FzZSAnZCc6Ci0jaWZkZWYgREVCVUcK LQkgICAgaWYgKGRlYmxvZykgewotCQlkZWJ0aW0gPSAxOwotCSAgICB9IGVsc2UgewotCQlkZWJs b2cgPSBkZWJvcG4oImRlYnVnLmxvZyIsMCk7Ci0JICAgIH0KLSNlbmRpZiAvKiBERUJVRyAqLwot CSAgICBicmVhazsKLQotCSAgY2FzZSAnbCc6IC8qIFNldCB1c2VybmFtZSBhbmQgcmVxdWVzdCB0 ZWxuZXQgYXV0aGVudGljYXRpb24gKi8KLQkgICAgaWYgKCooeHArMSkpIHsKLQkJWEZBVEFMKCJp bnZhbGlkIGFyZ3VtZW50IGJ1bmRsaW5nIik7Ci0JICAgIH0KLQkgICAgeGFyZ3YrKywgeGFyZ2Mt LTsKLQkgICAgaWYgKCh4YXJnYyA8IDEpIHx8ICgqKnhhcmd2ID09ICctJykpIHsKLQkJWEZBVEFM KCJtaXNzaW5nIHVzZXJuYW1lIik7Ci0JICAgIH0KLQkgICAgaWYgKChpbnQpc3RybGVuKCp4YXJn dikgPiA2MykgewotCQlYRkFUQUwoInVzZXJuYW1lIHRvbyBsb25nIik7Ci0JICAgIH0KLQkgICAg Y2tzdHJuY3B5KHVpZGJ1ZiwqeGFyZ3YsVUlEQlVGTEVOKTsKLQkgICAgYnJlYWs7Ci0KLQkgIGRl ZmF1bHQ6Ci0JICAgIGZhdGFsMigqeGFyZ3YsCi0JCSAgICJpbnZhbGlkIGNvbW1hbmQtbGluZSBv cHRpb24sIHR5cGUgXCJybG9naW4gLWhcIiBmb3IgaGVscCIKLQkJICAgKTsKLSAgICAgICAgfQot Ci0JaWYgKCF4cCkgYnJlYWs7Ci0JeCA9ICorK3hwOwkJCS8qIFNlZSBpZiBvcHRpb25zIGFyZSBi dW5kbGVkICovCi0gICAgfQotICAgIHJldHVybigwKTsKLX0KLSNlbmRpZiAvKiBSTE9HQ09ERSAq LwotCi0jaWZkZWYgU1NIQlVJTFRJTgotCi0vKiAgRCBPIFMgUyBIIEEgUiBHICAtLSAgRG8gYSBz c2ggY29tbWFuZC1saW5lIGFyZ3VtZW50LiAgKi8KLQotc3RhdGljIGludAotI2lmZGVmIENLX0FO U0lDCi1kb3NzaGFyZyhjaGFyIHgpCi0jZWxzZQotZG9zc2hhcmcoeCkgY2hhciB4OwotI2VuZGlm IC8qIENLX0FOU0lDICovCi0vKiBkb3NzaGFyZyAqLyB7Ci0gICAgY2hhciAqeHA7Ci0KLSAgICB4 cCA9ICp4YXJndisxOyAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIGZvciBidW5kbGVk IGFyZ3MgKi8KLSAgICBkZWJ1ZyhGMTExLCJkb3NzaGFyZyBlbnRyeSIseHAseGFyZ2MpOwotICAg IHdoaWxlICh4KSB7Ci0gICAgICAgIGRlYnVnKEYwMDAsImRvc3NoYXJnIGFyZyIsIiIseCk7Ci0g ICAgICAgIHN3aXRjaCAoeCkgeyAgICAgICAgICAgICAgICAgICAgLyogQmlnIHN3aXRjaCBvbiBh cmcgKi8KLQotI2lmbmRlZiBDT01NRU5UCi0JICBjYXNlICctJzoJCQkvKiBFeHRlbmRlZCBjb21t YW5kcy4uLiAqLwotICAgICAgICAgICAgaWYgKGRveGFyZyh4YXJndiwwKSA8IDApIHsKLSAgICAg ICAgICAgICAgICBYRkFUQUwoIkV4dGVuZGVkIG9wdGlvbiBlcnJvciIpOwotICAgICAgICAgICAg fSAvKiBGdWxsIHRocnUuLi4gKi8KLQkgIGNhc2UgJysnOgkJCS8qIEV4dGVuZGVkIGNvbW1hbmQg Zm9yIHByZXNjYW4oKSAqLwotICAgICAgICAgICAgcmV0dXJuKDApOwotI2Vsc2UgIC8qIENPTU1F TlRQICovCi0JICBjYXNlICctJzoKLQkgIGNhc2UgJysnOgotCSAgICBYRkFUQUwoIkV4dGVuZGVk IG9wdGlvbnMgbm90IGNvbmZpZ3VyZWQiKTsKLSNlbmRpZiAvKiBDT01NRU5UICovCi0KLS8qCi0g KiAtZCAgICAgICAgICAgICAgICBEZWJ1ZwotICogLSMgYXJncyAgICAgICAgICAgSW5pdAotICog LVkgICAgICAgICAgICAgICAgbm8gaW5pdCBmaWxlCi0gKiAtbCB1c2VyICAgICAgICAgICBTZXQg dXNlcm5hbWUKLSAqCi0gKi8KLQkgIGNhc2UgJ2gnOgkJCS8qIGhlbHAgKi8KLQkgICAgdXNhZ2Uo KTsKLQkgICAgZG9leGl0KEdPT0RfRVhJVCwtMSk7Ci0JICAgIGJyZWFrOwotCi0gICAgICAgICAg Y2FzZSAnWSc6Ci0JICAgIHhhcmd2KyssIHhhcmdjLS07CQkvKiBTa2lwIHBhc3QgYXJndW1lbnQg Ki8KLQkgICAgYnJlYWs7CQkJLyogQWN0aW9uIGRvbmUgaW4gcHJlc2NhbiAqLwotI2lmZGVmIE9T MgotICAgICAgICAgIGNhc2UgJyMnOgkJCS8qIEs5NSBzdGRpbyB0aHJlYWRzICovCi0JICAgIHhh cmd2KyssIHhhcmdjLS07CQkvKiBTa2lwIHBhc3QgYXJndW1lbnQgKi8KLQkgICAgYnJlYWs7CQkJ LyogQWN0aW9uIGRvbmUgaW4gcHJlc2NhbiAqLwotI2VuZGlmIC8qIE9TMiAqLwotICAgICAgICAg IGNhc2UgJ3EnOgkgICAgICAgICAgICAgICAgLyogUXVpZXQgKi8KLQkgICAgcXVpZXQgPSAxOwot CSAgICBicmVhazsKLQotCSAgY2FzZSAnZCc6Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgICAgICAg aWYgKGRlYmxvZykgewotICAgICAgICAgICAgICAgICAgZGVidGltID0gMTsKLSAgICAgICAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgIGRlYmxvZyA9IGRlYm9wbigiZGVidWcubG9n IiwwKTsKLSAgICAgICAgICAgICAgfQotI2VuZGlmIC8qIERFQlVHICovCi0JICAgIGJyZWFrOwot Ci0JICBjYXNlICdsJzogLyogU2V0IHVzZXJuYW1lIGFuZCByZXF1ZXN0IHRlbG5ldCBhdXRoZW50 aWNhdGlvbiAqLwotCSAgICBpZiAoKih4cCsxKSkgewotCQlYRkFUQUwoImludmFsaWQgYXJndW1l bnQgYnVuZGxpbmciKTsKLQkgICAgfQotCSAgICB4YXJndisrLCB4YXJnYy0tOwotCSAgICBpZiAo KHhhcmdjIDwgMSkgfHwgKCoqeGFyZ3YgPT0gJy0nKSkgewotCQlYRkFUQUwoIm1pc3NpbmcgdXNl cm5hbWUiKTsKLQkgICAgfQotCSAgICBpZiAoKGludClzdHJsZW4oKnhhcmd2KSA+IDYzKSB7Ci0J CVhGQVRBTCgidXNlcm5hbWUgdG9vIGxvbmciKTsKLQkgICAgfQotCSAgICBja3N0cm5jcHkodWlk YnVmLCp4YXJndixVSURCVUZMRU4pOwotCSAgICBicmVhazsKLQotCSAgZGVmYXVsdDoKLQkgICAg ZmF0YWwyKCp4YXJndiwKLQkJICAgImludmFsaWQgY29tbWFuZC1saW5lIG9wdGlvbiwgdHlwZSBc InNzaCAtaFwiIGZvciBoZWxwIgotCQkgICApOwotICAgICAgICB9Ci0KLQlpZiAoIXhwKSBicmVh azsKLQl4ID0gKisreHA7CQkJLyogU2VlIGlmIG9wdGlvbnMgYXJlIGJ1bmRsZWQgKi8KLSAgICB9 Ci0gICAgcmV0dXJuKDApOwotfQotI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KLQotI2Vsc2UgLyog Tm8gY29tbWFuZC1saW5lIGludGVyZmFjZS4uLiAqLwotCi1pbnQKLWNtZGxpbigpIHsKLSAgICBl eHRlcm4gaW50IHhhcmdjOwotICAgIGlmICh4YXJnYyA+IDEpIHsKLSAgICAgICAgWEZBVEFMKCJT b3JyeSwgY29tbWFuZC1saW5lIG9wdGlvbnMgZGlzYWJsZWQuIik7Ci0gICAgfQotfQotI2VuZGlm IC8qIE5PQ01ETCAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0 LTkuMC4zMDIvY2t1dmVyLmggYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAy L2NrdXZlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTExMWZiLi4wMDAwMDAw Ci0tLSBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dmVyLmgKKysr IC9kZXYvbnVsbApAQCAtMSwxMjYyICswLDAgQEAKLS8qIGNrdXZlci5oIC0tIEMtS2VybWl0IFVO SVggVmVyc2lvbiBoZXJhbGRzICovCi0vKgotICBBdXRob3I6IEZyYW5rIGRhIENydXogPGZkY0Bj b2x1bWJpYS5lZHU+LAotICBDb2x1bWJpYSBVbml2ZXJzaXR5IEFjYWRlbWljIEluZm9ybWF0aW9u IFN5c3RlbXMsIE5ldyBZb3JrIENpdHkuCi0KLSAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDEwLAot ICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlv cmsuCi0gICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5U WFQgZmlsZSBvciB0aGUKLSAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxl IGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KLSovCi0KLSNpZm5kZWYgQ0tVVkVSX0gK LSNkZWZpbmUgQ0tVVkVSX0gKLQotLyogQXJyYW5nZWQgbW9yZSBvciBsZXNzIGFscGhhYmV0aWNh bGx5IGJ5IGNvbXBpbGVyIHN5bWJvbCAqLwotLyogTXVzdCBiZSBpbmNsdWRlZCBBRlRFUiBja2Nk ZWIuaC4gKi8KLQotI2lmZGVmIEJFT1MKLSNpZmRlZiBCRU9TNDUKLSNkZWZpbmUgSEVSQUxEICIg QmVPUyA0LjUiCi0jZWxzZQotI2RlZmluZSBIRVJBTEQgIiBCZU9TIgotI2VuZGlmIC8qIEJFT1M0 NSAqLwotI2Vsc2UKLSNpZmRlZiBCRUJPWAotI2lmZGVmIEJFX0RSXzcKLSNkZWZpbmUgSEVSQUxE ICIgQmVCb3ggRFI3IgotI2Vsc2UKLSNkZWZpbmUgSEVSQUxEICIgQmVCb3giCi0jZW5kaWYgLyog QkVfRFJfNyAqLwotI2VuZGlmIC8qIEJFQk9YICovCi0jZW5kaWYgLyogQkVPUyAqLwotCi0jaWZk ZWYgQkVMTFYxMAotI2RlZmluZSBIRVJBTEQgIiBCZWxsIExhYnMgUmVzZWFyY2ggVU5JWCBWMTAi Ci0jZW5kaWYgLyogQkVMTFYxMCAqLwotCi0jaWZkZWYgQVBPTExPU1IxMAotI2RlZmluZSBIRVJB TEQgIiBBcG9sbG8gU1IxMCIKLSNlbmRpZiAvKiBBUE9MTE9TUjEwICovCi0KLSNpZmRlZiBNQUMK LSNkZWZpbmUgSEVSQUxEICIgQXBwbGUgTWFjaW50b3NoIgotI2VuZGlmIC8qIE1BQyAqLwotCi0j aWZkZWYgQTk4NgotI2RlZmluZSBIRVJBTEQgIiBBbHRvcyA5ODYgLyBYZW5peCAzLjAiCi0jZW5k aWYgLyogQTk4NiAqLwotCi0jaWZkZWYgQVM0MDAKLSNkZWZpbmUgSEVSQUxEICIgQVMvNDAwIgot I2VuZGlmIC8qIEFTNDAwICovCi0KLSNpZmRlZiBhZWdpcwotI2lmZGVmIEJTRDQKLSNkZWZpbmUg SEVSQUxEICIgQXBvbGxvIERPTUFJTi9JWCA0LjIgQlNEIgotI2Vsc2UKLSNpZmRlZiBBVFRTVgot I2RlZmluZSBIRVJBTEQgIiBBcG9sbG8gRE9NQUlOL0lYIFN5c3RlbSBWIgotI2Vsc2UKLSNkZWZp bmUgSEVSQUxEICIgQXBvbGxvIEFlZ2lzIgotI2VuZGlmIC8qIEJTRDQgICovCi0jZW5kaWYgLyog QVRUU1YgKi8KLSNlbmRpZiAvKiBhZWdpcyAqLwotCi0jaWZuZGVmIEhFUkFMRAotCi0jaWZkZWYg QUlYUlMKLQotI2lmZGVmIEFJWDUzCi0jZGVmaW5lIEhFUkFMRCAiIElCTSBBSVggNS4zIgotI2Vs c2UKLSNpZmRlZiBBSVg1MgotI2RlZmluZSBIRVJBTEQgIiBJQk0gQUlYIDUuMiIKLSNlbHNlCi0j aWZkZWYgQUlYNTEKLSNkZWZpbmUgSEVSQUxEICIgSUJNIEFJWCA1LjEiCi0jZWxzZQotI2lmZGVm IEFJWDQ1Ci0jZGVmaW5lIEhFUkFMRCAiIElCTSBBSVggNS4wIgotI2Vsc2UKLSNpZmRlZiBBSVg0 NQotI2RlZmluZSBIRVJBTEQgIiBJQk0gQUlYIDQuNSIKLSNlbHNlCi0jaWZkZWYgQUlYNDQKLSNk ZWZpbmUgSEVSQUxEICIgSUJNIEFJWCA0LjQiCi0jZWxzZQotI2lmZGVmIEFJWDQzCi0jZGVmaW5l IEhFUkFMRCAiIElCTSBBSVggNC4zIgotI2Vsc2UKLSNpZmRlZiBBSVg0MgotI2RlZmluZSBIRVJB TEQgIiBJQk0gQUlYIDQuMiIKLSNlbHNlCi0jaWZkZWYgU1ZSNAotI2lmZGVmIEFJWDQxCi0jZGVm aW5lIEhFUkFMRCAiIElCTSBBSVggNC4xIgotI2Vsc2UKLSNkZWZpbmUgSEVSQUxEICIgSUJNIFJT LzYwMDAgQUlYIDMuMiIKLSNlbmRpZiAvKiBBSVg0MSAqLwotI2Vsc2UKLSNkZWZpbmUgSEVSQUxE ICIgSUJNIFJTLzYwMDAgQUlYIDMuMC8zLjEiCi0jZW5kaWYgLyogU1ZSNCAqLwotI2VuZGlmIC8q IEFJWDQyICovCi0jZW5kaWYgLyogQUlYNDMgKi8KLSNlbmRpZiAvKiBBSVg0NCAqLwotI2VuZGlm IC8qIEFJWDQ1ICovCi0jZW5kaWYgLyogQUlYNTAgKi8KLSNlbmRpZiAvKiBBSVg1MSAqLwotI2Vu ZGlmIC8qIEFJWDUyICovCi0jZW5kaWYgLyogQUlYNTMgKi8KLSNlbmRpZiAvKiBBSVhSUyAqLwot Ci0jaWZkZWYgUFMyQUlYMTAKLSNkZWZpbmUgSEVSQUxEICIgSUJNIFBTLzIgQUlYIDEueCIKLSNl bmRpZiAvKiBQUzJBSVgxMCAqLwotCi0jaWZkZWYgQUlYUFMyCi0jZGVmaW5lIEhFUkFMRCAiIElC TSBQUy8yIEFJWCAzLngiCi0jZW5kaWYgLyogQUlYUFMyICovCi0KLSNpZmRlZiBBSVgzNzAKLSNp Zm5kZWYgSEVSQUxECi0jZGVmaW5lIEhFUkFMRCAiIElCTSBTeXN0ZW0vMzcwIEFJWC8zNzAiCi0j ZW5kaWYKLSNlbmRpZiAvKiBBSVgzNzAgKi8KLQotI2lmZGVmIEFJWEVTQQotI2lmbmRlZiBIRVJB TEQKLSNkZWZpbmUgSEVSQUxEICIgSUJNIEFJWC9FU0EgdmVyc2lvbiAyLjEiCi0jZW5kaWYKLSNl bmRpZiAvKiBBSVhFU0EgKi8KLQotI2lmZGVmIEFUVDYzMDAKLSNkZWZpbmUgSEVSQUxEICIgQVQm VCA2MzAwIgotI2VuZGlmIC8qIEFUVDYzMDAgKi8KLQotI2lmZGVmIEFUVDczMDAKLSNpZmRlZiBV TklYMzUxTQotI2RlZmluZSBIRVJBTEQgIiBBVCZUIDczMDAgVU5JWCBQQyBVTklYIDMuNTFtIgot I2Vsc2UKLSNkZWZpbmUgSEVSQUxEICIgQVQmVCA3MzAwIFVOSVggUEMiCi0jZW5kaWYgLyogVU5J WDM1MU0gKi8KLSNlbmRpZiAvKiBBVFQ3MzAwICovCi0KLSNpZmRlZiBBVVgKLSNkZWZpbmUgSEVS QUxEICIgQXBwbGUgTWFjaW50b3NoIEFVWCIKLSNlbmRpZiAvKiBBVVggKi8KLQotI2lmZGVmIEJT RDQ0Ci0jaWZkZWYgTUFDT1NYCi0jZGVmaW5lIEhFUkFMRCAiIE1hYyBPUyBYIgotI2Vsc2UKLSNp ZmRlZiBfX09wZW5CU0RfXwotI2RlZmluZSBIRVJBTEQgIiBPcGVuQlNEIgotI2Vsc2UKLSNpZmRl ZiBfX2JzZGlfXwotI2lmZGVmIEJTREk0Ci0jZGVmaW5lIEhFUkFMRCAiIEJTREkgQlNEL09TIDQu MCIKLSNlbHNlCi0jaWZkZWYgQlNESTMKLSNkZWZpbmUgSEVSQUxEICIgQlNESSBCU0QvT1MgMy4w IgotI2Vsc2UKLSNpZmRlZiBCU0RJMgotI2RlZmluZSBIRVJBTEQgIiBCU0RJIEJTRC9PUyAyLjAi CS8qIDEuMSsrIG5hbWUuLi4gKi8KLSNlbHNlCi0jZGVmaW5lIEhFUkFMRCAiIEJTREkgQlNELzM4 NiIJCS8qIE9yaWdpbmFsIDEuMCBuYW1lICovCi0jZW5kaWYgLyogQlNESTIgKi8KLSNlbmRpZiAv KiBCU0RJMyAqLwotI2VuZGlmIC8qIEJTREk0ICovCi0jZWxzZSAgLyogX19ic2RpX18gKi8KLSNp ZmRlZiBfX05ldEJTRF9fCi0jaWZuZGVmIEhFUkFMRAotI2lmZGVmIE5FVEJTRDE2Ci0jZGVmaW5l IEhFUkFMRCAiIE5ldEJTRCAxLjYiCi0jZWxzZQotI2lmZGVmIE5FVEJTRDE1Ci0jZGVmaW5lIEhF UkFMRCAiIE5ldEJTRCAxLjUiCi0jZWxzZQotI2RlZmluZSBIRVJBTEQgIiBOZXRCU0QiCi0jZW5k aWYgLyogTkVUQlNEMTUgKi8KLSNlbmRpZiAvKiBORVRCU0QxNiAqLwotI2VuZGlmIC8qIEhFUkFM RCAqLwotI2Vsc2UgIC8qIF9fTmV0QlNEX18gKi8KLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2lmZGVm IEZSRUVCU0Q1MQotI2RlZmluZSBIRVJBTEQgIiBGcmVlQlNEIDUuMSIKLSNlbHNlCi0jaWZkZWYg RlJFRUJTRDUwCi0jZGVmaW5lIEhFUkFMRCAiIEZyZWVCU0QgNS4wIgotI2Vsc2UKLSNpZmRlZiBG UkVFQlNENDkKLSNkZWZpbmUgSEVSQUxEICIgRnJlZUJTRCA0LjkiCi0jZWxzZQotI2lmZGVmIEZS RUVCU0Q0OAotI2RlZmluZSBIRVJBTEQgIiBGcmVlQlNEIDQuOCIKLSNlbHNlCi0jaWZkZWYgRlJF RUJTRDQ3Ci0jZGVmaW5lIEhFUkFMRCAiIEZyZWVCU0QgNC43IgotI2Vsc2UKLSNpZmRlZiBGUkVF QlNENDYKLSNkZWZpbmUgSEVSQUxEICIgRnJlZUJTRCA0LjYiCi0jZWxzZQotI2lmZGVmIEZSRUVC U0Q0NQotI2RlZmluZSBIRVJBTEQgIiBGcmVlQlNEIDQuNSIKLSNlbHNlCi0jaWZkZWYgRlJFRUJT RDQ0Ci0jZGVmaW5lIEhFUkFMRCAiIEZyZWVCU0QgNC40IgotI2Vsc2UKLSNpZmRlZiBGUkVFQlNE NDMKLSNkZWZpbmUgSEVSQUxEICIgRnJlZUJTRCA0LjMiCi0jZWxzZQotI2lmZGVmIEZSRUVCU0Q0 MgotI2RlZmluZSBIRVJBTEQgIiBGcmVlQlNEIDQuMiIKLSNlbHNlCi0jaWZkZWYgRlJFRUJTRDQx Ci0jZGVmaW5lIEhFUkFMRCAiIEZyZWVCU0QgNC4xIgotI2Vsc2UKLSNpZmRlZiBGUkVFQlNENAot I2RlZmluZSBIRVJBTEQgIiBGcmVlQlNEIDQuMCIKLSNlbHNlCi0jaWZkZWYgRlJFRUJTRDMKLSNk ZWZpbmUgSEVSQUxEICIgRnJlZUJTRCAzLjAiCi0jZWxzZQotI2lmZGVmIEZSRUVCU0QyCi0jZGVm aW5lIEhFUkFMRCAiIEZyZWVCU0QgMi4wIgotI2Vsc2UKLSNkZWZpbmUgSEVSQUxEICIgRnJlZUJT RCIKLSNlbmRpZiAvKiBGUkVFQlNEMiAqLwotI2VuZGlmIC8qIEZSRUVCU0QzICovCi0jZW5kaWYg LyogRlJFRUJTRDQgKi8KLSNlbmRpZiAvKiBGUkVFQlNENDEgKi8KLSNlbmRpZiAvKiBGUkVFQlNE NDIgKi8KLSNlbmRpZiAvKiBGUkVFQlNENDMgKi8KLSNlbmRpZiAvKiBGUkVFQlNENDQgKi8KLSNl bmRpZiAvKiBGUkVFQlNENDUgKi8KLSNlbmRpZiAvKiBGUkVFQlNENDYgKi8KLSNlbmRpZiAvKiBG UkVFQlNENDcgKi8KLSNlbmRpZiAvKiBGUkVFQlNENDggKi8KLSNlbmRpZiAvKiBGUkVFQlNENDkg Ki8KLSNlbmRpZiAvKiBGUkVFQlNENTAgKi8KLSNlbmRpZiAvKiBGUkVFQlNENTEgKi8KLSNlbHNl Ci0jaWZkZWYgX18zODZCU0RfXwotI2RlZmluZSBIRVJBTEQgIiAzODZCU0QiCi0jZWxzZQotI2Rl ZmluZSBIRVJBTEQgIiA0LjRCU0QiCi0jZW5kaWYgLyogX18zODZCU0RfXyAqLwotI2VuZGlmIC8q IF9fRnJlZUJTRF9fICovCi0jZW5kaWYgLyogX19OZXRCU0RfXyAqLwotI2VuZGlmIC8qIF9fYnNk aV9fICovCi0jZW5kaWYgLyogX19PcGVuQlNEX18gKi8KLSNlbmRpZiAvKiBNQUNPU1ggKi8KLSNl bmRpZiAvKiBCU0Q0NCAqLwotCi0jaWZkZWYgRU5DT1JFCi0jaWZkZWYgQlNENDMKLSNkZWZpbmUg SEVSQUxEICIgRW5jb3JlIE11bHRpbWF4IFVNQVggNC4zIgotI2Vsc2UKLSNkZWZpbmUgSEVSQUxE ICIgRW5jb3JlIE11bHRpbWF4IFVNQVggNC4yIgotI2VuZGlmCi0jZW5kaWYgLyogRU5DT1JFICov Ci0KLSNpZmRlZiBCU0QyOQotI2RlZmluZSBIRVJBTEQgIiAyLjkgQlNEIgotI2VuZGlmIC8qIEJT RDI5ICovCi0KLSNpZmRlZiBCU0Q0MQotI2RlZmluZSBIRVJBTEQgIiA0LjEgQlNEIgotI2VuZGlm IC8qIEJTRDQxICovCi0KLSNpZmRlZiBDNzAKLSNkZWZpbmUgSEVSQUxEICIgQkJOIEMvNzAiCi0j ZW5kaWYgLyogYzcwICovCi0KLSNpZmRlZiBDSUUKLSNkZWZpbmUgSEVSQUxEICIgQ0lFIFN5c3Rl bXMgNjgwLzIwIFJlZ3VsdXMiCi0jZW5kaWYgLyogQ0lFICovCi0KLSNpZmRlZiBDT0hFUkVOVAot I2lmZGVmIF9JMzg2Ci0jZGVmaW5lIEhFUkFMRCAiIE1XQyBDb2hlcmVudCAzODYgNC54IgotI2lm bmRlZiBpMzg2Ci0jZGVmaW5lIGkzODYKLSNlbmRpZiAvKiBpMzg2ICovCi0jZWxzZQotI2RlZmlu ZSBIRVJBTEQgIiBQQy9BVCBNV0MgQ29oZXJlbnQgMjg2IDMueCIKLSNpZm5kZWYgaTI4NgotI2Rl ZmluZSBpMjg2Ci0jZW5kaWYgLyogaTI4NiAqLwotI2VuZGlmIC8qIF9JMzg2ICovCi0jZW5kaWYg LyogQ09IRVJFTlQgKi8KLQotI2lmZGVmIENPTlZFWDkKLSNkZWZpbmUgSEVSQUxEICIgQ29udmV4 L09TIgotI2VuZGlmIC8qIENPTlZFWDkgKi8KLQotI2lmZGVmIENPTlZFWDEwCi0jZGVmaW5lIEhF UkFMRCAiIENvbnZleC9PUyAxMC4xIgotI2VuZGlmIC8qIENPTlZFWDEwICovCi0KLSNpZmRlZiBf Q1JBWQotI2lmZGVmIF9DUkFZQ09NCi0jZGVmaW5lIEhFUkFMRCAiIENyYXkgQ1NPUyIKLSNlbHNl IC8qIF9DUkFZQ09NICovCi0jZGVmaW5lIEhFUkFMRCAiIENyYXkgVU5JQ09TIgotI2VuZGlmIC8q IF9DUkFZQ09NICovCi0jZW5kaWYgLyogX0NSQVkgKi8KLQotI2lmZGVmIERHVVgKLSNpZmRlZiBE R1VYNTQ0MjAKLSNkZWZpbmUgSEVSQUxEICIgRGF0YSBHZW5lcmFsIERHL1VYIFI0LjIwIgotI2Vs c2UKLSNpZmRlZiBER1VYNTQ0MTEKLSNkZWZpbmUgSEVSQUxEICIgRGF0YSBHZW5lcmFsIERHL1VY IFI0LjExIgotI2Vsc2UKLSNpZmRlZiBER1VYNTQ0MTAKLSNkZWZpbmUgSEVSQUxEICIgRGF0YSBH ZW5lcmFsIERHL1VYIFI0LjEwIgotI2Vsc2UKLSNpZmRlZiBER1VYNTQzMTAKLSNkZWZpbmUgSEVS QUxEICIgRGF0YSBHZW5lcmFsIERHL1VYIDUuNFIzLjEwIgotI2Vsc2UKLSNpZmRlZiBER1VYNTQz Ci0jZGVmaW5lIEhFUkFMRCAiIERhdGEgR2VuZXJhbCBERy9VWCA1LjRSMy4wMCIKLSNlbHNlCi0j aWZkZWYgREdVWDU0MAotI2RlZmluZSBIRVJBTEQgIiBEYXRhIEdlbmVyYWwgREcvVVggNS40Igot I2Vsc2UKLSNpZmRlZiBER1VYNDMwCi0jZGVmaW5lIEhFUkFMRCAiIERhdGEgR2VuZXJhbCBERy9V WCA0LjMwIgotI2Vsc2UKLSNkZWZpbmUgSEVSQUxEICIgRGF0YSBHZW5lcmFsIERHL1VYIgotI2Vu ZGlmIC8qIERHVVg0MzAgKi8KLSNlbmRpZiAvKiBER1VYNTQwICovCi0jZW5kaWYgLyogREdVWDU0 MyAqLwotI2VuZGlmIC8qIERHVVg1NDMxMCAqLwotI2VuZGlmIC8qIERHVVg1NDQxMCAqLwotI2Vu ZGlmIC8qIERHVVg1NDQxMSAqLwotI2VuZGlmIC8qIERHVVg1NDQyMCAqLwotI2VuZGlmIC8qIERH VVggKi8KLQotI2lmZGVmIGRhdGFnZW5lcmFsCi0jaWZuZGVmIEhFUkFMRAotI2RlZmluZSBIRVJB TEQgIiBEYXRhIEdlbmVyYWwgQU9TL1ZTIgotI2VuZGlmIC8qIEhFUkFMRCAqLwotI2VuZGlmIC8q IGRhdGFnZW5lcmFsICovCi0KLSNpZmRlZiBTSU5JWAotI2lmZGVmIFNOSTU0NAotI2RlZmluZSBI RVJBTEQgIiBTaWVtZW5zIE5peGRvcmYgUmVsaWFudCBVTklYIFY1LjQ0IgotI2Vsc2UKLSNpZmRl ZiBTTkk1NDMKLSNkZWZpbmUgSEVSQUxEICIgU2llbWVucyBOaXhkb3JmIFJlbGlhbnQgVU5JWCBW NS40MyIKLSNlbHNlCi0jaWZkZWYgU05JNTQxCi0jZGVmaW5lIEhFUkFMRCAiIFNpZW1lbnMgTml4 ZG9yZiBTSU5JWCBWNS40MSIKLSNlbHNlCi0jZGVmaW5lIEhFUkFMRCAiIFNpZW1lbnMgTml4ZG9y ZiBTSU5JWCBWNS40MiIKLSNlbmRpZiAvKiBTTkk1NDEgKi8KLSNlbmRpZiAvKiBTTkk1NDMgKi8K LSNlbmRpZiAvKiBTTkk1NDQgKi8KLSNlbmRpZiAvKiBTSU5JWCAqLwotCi0jaWZkZWYgUE9XRVJN QVgKLSNkZWZpbmUgSEVSQUxEICIgQ29uY3VycmVudCBQb3dlck1BWCBPUyIKLSNlbmRpZiAvKiBQ T1dFUk1BWCAqLwotCi0jaWZkZWYgREVMTF9TVlI0Ci0jZGVmaW5lIEhFUkFMRCAiIERlbGwgU3lz dGVtIFYgUjQiCi0jZW5kaWYgLyogREVMTF9TVlI0ICovCi0KLSNpZmRlZiBOQ1JNUFJBUwotI2Rl ZmluZSBIRVJBTEQgIiBOQ1IgTVAtUkFTIgotI2VuZGlmIC8qIE5DUk1QUkFTICovCi0KLSNpZmRl ZiBVTklYV0FSRQotI2RlZmluZSBIRVJBTEQgIiBVbml4V2FyZSIKLSNlbHNlCi0jaWZkZWYgT0xE X1VOSVhXQVJFCi0jZGVmaW5lIEhFUkFMRCAiIFVuaXhXYXJlIgotI2VuZGlmIC8qIE9MRF9VTklY V0FSRSAqLwotI2VuZGlmIC8qIFVOSVhXQVJFICovCi0KLSNpZmRlZiBJQ0xfU1ZSNAotI2RlZmlu ZSBIRVJBTEQgIiBJQ0wgU3lzdGVtIFYgUjQgRFJTIE4vWCIKLSNlbmRpZiAvKiBJQ0xfU1ZSNCAq LwotCi0jaWZkZWYgRlQxOAotI2lmZGVmIEZUMjEKLSNkZWZpbmUgSEVSQUxEICIgRm9ydHVuZSBG b3I6UHJvIDIuMSIKLSNlbHNlCi0jZGVmaW5lIEhFUkFMRCAiIEZvcnR1bmUgRm9yOlBybyAxLjgi Ci0jZW5kaWYgLyogRlQyMSAqLwotI2VuZGlmIC8qIEZUMTggKi8KLQotI2lmZGVmIEdFTURPUwot I2RlZmluZSBIRVJBTEQgIiBBdGFyaSBTVCBHRU0gMS4wIgotI2VuZGlmIC8qIEdFTURPUyAqLwot Ci0jaWZkZWYgWEY2OFIzVjYKLSNkZWZpbmUgSEVSQUxEICIgTW90b3JvbGEgVU5JWCBTeXN0ZW0g Vi82OCBSM1Y2IgotI2VuZGlmIC8qIFhGNjhSM1Y2ICovCi0KLSNpZmRlZiBYRjg4UjMyCi0jZGVm aW5lIEhFUkFMRCAiIE1vdG9yb2xhIFVOSVggU3lzdGVtIFYvODggUjMyIgotI2VuZGlmIC8qIFhG ODhSMzIgKi8KLQotI2lmZGVmIEkzODZJWAotI2lmZGVmIFNWUjNKQwotI2RlZmluZSBIRVJBTEQg IiBJbnRlcmFjdGl2ZSBVTklYIFN5c3RlbSBWLzM4NiBSMy4yIgotI2Vsc2UKLSNkZWZpbmUgSEVS QUxEICIgSW50ZXJhY3RpdmUgU3lzdGVtcyBDb3JwIDM4Ni9peCIKLSNlbmRpZiAvKiBTVlIzSkMg Ki8KLSNlbmRpZiAvKiBJMzg2SVggKi8KLQotI2lmZGVmIElSSVg2NQotI2RlZmluZSBIRVJBTEQg IiBTaWxpY29uIEdyYXBoaWNzIElSSVggNi41IgotI2Vsc2UKLSNpZmRlZiBJUklYNjQKLSNkZWZp bmUgSEVSQUxEICIgU2lsaWNvbiBHcmFwaGljcyBJUklYIDYuNCIKLSNlbHNlCi0jaWZkZWYgSVJJ WDYzCi0jZGVmaW5lIEhFUkFMRCAiIFNpbGljb24gR3JhcGhpY3MgSVJJWCA2LjMiCi0jZWxzZQot I2lmZGVmIElSSVg2MgotI2RlZmluZSBIRVJBTEQgIiBTaWxpY29uIEdyYXBoaWNzIElSSVggNi4y IgotI2Vsc2UKLSNpZmRlZiBJUklYNjAKLSNkZWZpbmUgSEVSQUxEICIgU2lsaWNvbiBHcmFwaGlj cyBJUklYIDYuMCIKLSNlbHNlCi0jaWZkZWYgSVJJWDUzCi0jZGVmaW5lIEhFUkFMRCAiIFNpbGlj b24gR3JhcGhpY3MgSVJJWCA1LjMiCi0jZWxzZQotI2lmZGVmIElSSVg1MgotI2RlZmluZSBIRVJB TEQgIiBTaWxpY29uIEdyYXBoaWNzIElSSVggNS4yIgotI2Vsc2UKLSNpZmRlZiBJUklYNTEKLSNk ZWZpbmUgSEVSQUxEICIgU2lsaWNvbiBHcmFwaGljcyBJUklYIDUuMSIKLSNlbHNlCi0jaWZkZWYg SVJJWDQwCi0jZGVmaW5lIEhFUkFMRCAiIFNpbGljb24gR3JhcGhpY3MgSVJJWCA0LjAiCi0jZW5k aWYgLyogSVJJWDQwICovCi0jZW5kaWYgLyogSVJJWDUxICovCi0jZW5kaWYgLyogSVJJWDUyICov Ci0jZW5kaWYgLyogSVJJWDUzICovCi0jZW5kaWYgLyogSVJJWDYwICovCi0jZW5kaWYgLyogSVJJ WDYyICovCi0jZW5kaWYgLyogSVJJWDYzICovCi0jZW5kaWYgLyogSVJJWDY0ICovCi0jZW5kaWYg LyogSVJJWDY1ICovCi0KLSNpZmRlZiBJU0lJSQotI2RlZmluZSBIRVJBTEQgIiBJbnRlcmFjdGl2 ZSBTeXN0ZW1zIENvcnAgU3lzdGVtIElJSSIKLSNlbmRpZiAvKiBJU0lJSSAqLwotCi0jaWZkZWYg SVgzNzAKLSNkZWZpbmUgSEVSQUxEICIgSUJNIElYLzM3MCIKLSNlbmRpZiAvKiBJWDM3MCAqLwot Ci0jaWZkZWYgSFBVWAotI2lmZGVmIEhQVVg1Ci0jZGVmaW5lIEhFUkFMRCAiIEhQLVVYIDUuMDAi Ci0jZWxzZQotI2lmZGVmIEhQVVg2Ci0jZGVmaW5lIEhFUkFMRCAiIEhQLVVYIDYuMDAiCi0jZWxz ZQotI2lmZGVmIEhQVVg3Ci0jZGVmaW5lIEhFUkFMRCAiIEhQLVVYIDcuMDAiCi0jZWxzZQotI2lm ZGVmIEhQVVg4Ci0jZGVmaW5lIEhFUkFMRCAiIEhQLVVYIDguMDAiCi0jZWxzZQotI2lmZGVmIEhQ VVg5Ci0jZGVmaW5lIEhFUkFMRCAiIEhQLVVYIDkuMDAiCi0jZWxzZQotI2lmZGVmIEhQVVgxMTAw Ci0jZGVmaW5lIEhFUkFMRCAiIEhQLVVYIDExLjAwIgotI2Vsc2UKLSNpZmRlZiBIUFVYMTAKLSNp ZmRlZiBIUFVYMTAzMAotI2RlZmluZSBIRVJBTEQgIiBIUC1VWCAxMC4zMCIKLSNlbHNlCi0jaWZk ZWYgSFBVWDEwMjAKLSNkZWZpbmUgSEVSQUxEICIgSFAtVVggMTAuMjAiCi0jZWxzZQotI2lmZGVm IEhQVVgxMDEwCi0jZGVmaW5lIEhFUkFMRCAiIEhQLVVYIDEwLjEwIgotI2Vsc2UKLSNpZmRlZiBI UFVYMTB4eAotI2RlZmluZSBIRVJBTEQgIiBIUC1VWCAxMC54eCIKLSNlbHNlCi0jZGVmaW5lIEhF UkFMRCAiIEhQLVVYIDEwLjAwIgotI2VuZGlmIC8qIEhQVVgxMFhYICovCi0jZW5kaWYgLyogSFBV WDEwMTAgKi8KLSNlbmRpZiAvKiBIUFVYMTAyMCAqLwotI2VuZGlmIC8qIEhQVVgxMDMwICovCi0j ZWxzZQotI2RlZmluZSBIRVJBTEQgIiBIUC1VWCIKLSNlbmRpZiAvKiBIUFVYMTAgKi8KLSNlbmRp ZiAvKiBIUFVYMTEwMCAqLwotI2VuZGlmIC8qIEhQVVg5ICAqLwotI2VuZGlmIC8qIEhQVVg4ICAq LwotI2VuZGlmIC8qIEhQVVg3ICAqLwotI2VuZGlmIC8qIEhQVVg2ICAqLwotI2VuZGlmIC8qIEhQ VVg1ICAqLwotI2VuZGlmIC8qIEhQVVggICAqLwotCi0jaWZuZGVmIE1JTklYCi0jaWZkZWYgTUlO SVgzMTUKLSNkZWZpbmUgTUlOSVgKLSNlbmRpZgkvKiBNSU5JWDMxNSAqLwotI2VuZGlmCS8qIE1J TklYICovCi0KLSNpZm5kZWYgTUlOSVgKLSNpZmRlZiBNSU5JWDMKLSNkZWZpbmUgTUlOSVgKLSNl bmRpZgkvKiBNSU5JWDMgKi8KLSNlbmRpZgkvKiBNSU5JWCAqLwotCi0jaWZkZWYgTUlOSVgKLSNp ZmRlZiBNSU5JWDMxNQotI2RlZmluZSBIRVJBTEQgIiBNaW5peCAzLjEuNSIKLSNpZm5kZWYgTUlO SVgzCi0jZGVmaW5lIE1JTklYMwotI2VuZGlmCS8qIE1JTklYMyAqLwotI2VuZGlmCS8qIE1JTklY MzE1ICovCi0jaWZkZWYgTUlOSVgzCi0jaWZuZGVmIE1JTklYMgotI2RlZmluZSBNSU5JWDIKLSNl bmRpZgkvKiBNSU5JWDIgKi8KLSNpZm5kZWYgSEVSQUxECi0jZGVmaW5lIEhFUkFMRCAiIE1pbml4 IDMuMCIKLSNlbmRpZgkvKiBIRVJBTEQgKi8KLSNlbHNlCi0jaWZkZWYgTUlOSVgyCi0jZGVmaW5l IEhFUkFMRCAiIE1pbml4IDIuMCIKLSNlbHNlCi0jZGVmaW5lIEhFUkFMRCAiIE1pbml4IDEuMCIK LSNlbmRpZiAvKiBNSU5JWDMgKi8KLSNlbmRpZiAvKiBNSU5JWDIgKi8KLSNlbmRpZiAvKiBNSU5J WCAqLwotCi0jaWZkZWYgTUlQUwotI2RlZmluZSBIRVJBTEQgIiBNSVBTIFJJU0MvT1MgU1ZSMyIK LSNlbmRpZiAvKiBNSVBTICovCi0KLSNpZmRlZiBORVhUCi0jaWZkZWYgT1BFTlNURVA0MgotI2Rl ZmluZSBIRVJBTEQgIiBPUEVOU1RFUCA0LjIiCi0jZWxzZQotI2lmZGVmIE5FWFQzMwotI2RlZmlu ZSBIRVJBTEQgIiBOZVhUU1RFUCAzLjMiCi0jZWxzZQotI2RlZmluZSBIRVJBTEQgIiBOZVhUU1RF UCIKLSNlbmRpZiAvKiBORVhUMzMgKi8KLSNlbmRpZiAvKiBPUEVOU1RFUDQyICovCi0jZW5kaWYg LyogTkVYVCAqLwotCi0jaWZkZWYgT1NGCi0jaWZkZWYgaTM4NgotI2RlZmluZSBIRVJBTEQgIiBE RUNwYyBPU0YvMSIKLSNpZmRlZiBfX0dOVUMKLSNkZWZpbmUgT1NGUEMKLSNlbmRpZiAvKiBfX0dO VUMgKi8KLSNlbHNlICAvKiBOb3QgaTM4NiBzbyBBbHBoYSAqLwotCi0jaWZkZWYgVFJVNjQKLQot I2lmZGVmIE9TRjUxQgotI2RlZmluZSBIRVJBTEQgIiBDb21wYXEgVHJ1NjQgVU5JWCA1LjFCIgot I2Vsc2UKLSNpZmRlZiBPU0Y1MUEKLSNkZWZpbmUgSEVSQUxEICIgQ29tcGFxIFRydTY0IFVOSVgg NS4xQSIKLSNlbHNlCi0jaWZkZWYgT1NGNTAKLSNkZWZpbmUgSEVSQUxEICIgQ29tcGFxIFRydTY0 IFVOSVggNS4wQSIKLSNlbHNlCi0jaWZkZWYgT1NGNDBHCi0jZGVmaW5lIEhFUkFMRCAiIENvbXBh cSBUcnU2NCBVTklYIDQuMEciCi0jZWxzZQotI2lmZGVmIE9TRjQwRgotI2RlZmluZSBIRVJBTEQg IiBDb21wYXEgVHJ1NjQgVU5JWCA0LjBGIgotI2Vsc2UKLSNpZmRlZiBPU0Y0MEUKLSNkZWZpbmUg SEVSQUxEICIgQ29tcGFxIFRydTY0IFVOSVggNC4wRSIKLSNlbmRpZiAvKiBPU0Y0MEUgKi8KLSNl bmRpZiAvKiBPU0Y0MEYgKi8KLSNlbmRpZiAvKiBPU0Y0MEcgKi8KLSNlbmRpZiAvKiBPU0Y1MCAq LwotI2VuZGlmIC8qIE9TRjUxQSAqLwotI2VuZGlmIC8qIE9TRjUxQiAqLwotCi0jZWxzZSAgLyog Tm90IFRSVTY0ICovCi0KLSNpZmRlZiBPU0Y0MAotI2RlZmluZSBIRVJBTEQgIiBEaWdpdGFsIFVO SVggNC4wIgotI2Vsc2UKLSNpZmRlZiBPU0YzMgotI2RlZmluZSBIRVJBTEQgIiBEaWdpdGFsIFVO SVggMy4yIgotI2Vsc2UKLSNkZWZpbmUgSEVSQUxEICIgREVDIE9TRi8xIEFscGhhIgotI2VuZGlm IC8qIE9TRjQwICovCi0jZW5kaWYgLyogT1NGMzIgKi8KLQotI2VuZGlmIC8qIFRSVTY0ICovCi0j ZW5kaWYgLyogaTM4NiAqLwotI2VuZGlmIC8qIE9TRiAqLwotCi0jaWZkZWYgUENJWAotI2RlZmlu ZSBIRVJBTEQgIiBQQy9JWCIKLSNlbmRpZiAvKiBQQ0lYICovCi0KLSNpZmRlZiBzeGFFNTAKLSNk ZWZpbmUgSEVSQUxEICIgUEZVIFNYL0EgVjEwL0w1MCIKLSNlbmRpZiAvKiBzeGFFNTAgKi8KLQot I2lmZGVmIFBST1ZYMQotI2RlZmluZSBIRVJBTEQgIiBERUMgUHJvZmVzc2lvbmFsIDMwMCAoVmVu aXggMS4wKSIKLSNlbmRpZiAvKiBQUk9WWDEgKi8KLQotI2lmZGVmIFBZUkFNSUQKLSNpZmRlZiBT VlI0Ci0jZGVmaW5lIEhFUkFMRCAiIFB5cmFtaWQgREMvT1N4IgotI2Vsc2UKLSNkZWZpbmUgSEVS QUxEICIgUHlyYW1pZCBEdWFsIFBvcnQgT1N4IgotI2VuZGlmIC8qIFNWUjQgKi8KLSNlbmRpZiAv KiBQWVJBTUlEICovCi0KLSNpZmRlZiBSVEFJWAotI2RlZmluZSBIRVJBTEQgIiBJQk0gUlQgUEMg KEFJWCAyLjIpIgotI2VuZGlmIC8qIFJUQUlYICovCi0KLSNpZmRlZiBSVFUKLSNkZWZpbmUgSEVS QUxEICIgTWFzc2NvbXAvQ29uY3VycmVudCBSVFUiCi0jZW5kaWYgLyogUlRVICovCi0KLSNpZmRl ZiBzb255X25ld3MKLSNkZWZpbmUgSEVSQUxEICIgU09OWSBORVdTIgotI2VuZGlmIC8qIHNvbnlf bmV3cyAqLwotCi0jaWZkZWYgU09MQVJJUzI0Ci0jZGVmaW5lIEhFUkFMRCAiIFNvbGFyaXMgMi40 IgotI2Vsc2UKLSNpZmRlZiBTT0xBUklTMjMKLSNkZWZpbmUgSEVSQUxEICIgU29sYXJpcyAyLjMi Ci0jZWxzZQotI2lmZGVmIFNPTEFSSVMKLSNkZWZpbmUgSEVSQUxEICIgU29sYXJpcyAyLngiCi0j ZW5kaWYgLyogU09MQVJJUyAqLwotI2VuZGlmIC8qIFNPTEFSSVMyMyAqLwotI2VuZGlmIC8qIFNP TEFSSVMyNCAqLwotCi0jaWZkZWYgU1VOT1M0Ci0jaWZkZWYgQlNENAotI2lmZGVmIFNVTk9TNDEK LSNkZWZpbmUgSEVSQUxEICIgU3VuT1MgNC4xIgotI2Vsc2UKLSNkZWZpbmUgSEVSQUxEICIgU3Vu T1MgNC4wIgotI2VuZGlmIC8qIFNVTk9TNDEgKi8KLSNlbmRpZiAvKiBCU0Q0ICovCi0jZW5kaWYg LyogU1VOT1M0ICovCi0KLSNpZmRlZiBTVU40UzUKLSNpZmRlZiBIREJVVUNQCi0jZGVmaW5lIEhF UkFMRCAiIFN1bk9TIDQuMSAoU1ZSMykiCi0jZWxzZQotI2RlZmluZSBIRVJBTEQgIiBTdW5PUyA0 LjAgKFNWUjMpIgotI2VuZGlmIC8qIEhEQlVVQ1AgKi8KLSNlbmRpZiAvKiBTVU40UzUgKi8KLQot I2lmZGVmIFNUUkFUVVMKLSNkZWZpbmUgSEVSQUxEICIgU3RyYXR1cyBWT1MiCi0jZW5kaWYgLyog U1RSQVRVUyAqLwotCi0jaWZkZWYgVE9XRVIxCi0jZGVmaW5lIEhFUkFMRCAiIE5DUiBUb3dlciAx NjMyIE9TIDEuMDIiCi0jZW5kaWYgLyogVE9XRVIxICovCi0KLSNpZmRlZiBUUlMxNgotI2RlZmlu ZSBIRVJBTEQgIiBUYW5keSAxNi82MDAwIFhlbml4IDMuMCIKLSNpZm5kZWYgQ0tDUFUKLSNkZWZp bmUgQ0tDUFUgIm1jNjgwMDAiCi0jZW5kaWYgLyogQ0tDUFUgKi8KLSNlbmRpZiAvKiBUUlMxNiAq LwotCi0jaWZkZWYgdTNiMgotI2lmbmRlZiBIRVJBTEQKLSNpZmRlZiBTVlIzCi0jZGVmaW5lIEhF UkFMRCAiIEFUJlQgM0IyIFN5c3RlbSBWIFIzIgotI2Vsc2UKLSNkZWZpbmUgSEVSQUxEICIgQVQm VCAzQjIgU3lzdGVtIFYiCi0jZW5kaWYgLyogU1ZSMyAqLwotI2VuZGlmIC8qIEhFUkFMRCAqLwot I2VuZGlmIC8qIHUzYjIgKi8KLQotI2lmZGVmIHVsdHJpeAotI2lmZGVmIHZheAotI2lmZGVmIFVM VFJJWDMKLSNkZWZpbmUgSEVSQUxEICIgVkFYL1VMVFJJWCAzLjAiCi0jZWxzZQotI2RlZmluZSBI RVJBTEQgIiBWQVgvVUxUUklYIgotI2VuZGlmIC8qIFVMVFJJWDMgKi8KLSNlbHNlCi0jaWZkZWYg bWlwcwotI2lmZGVmIFVMVFJJWDQzCi0jZGVmaW5lIEhFUkFMRCAiIERFQ3N0YXRpb24vVUxUUklY IDQuMyIKLSNlbHNlCi0jaWZkZWYgVUxUUklYNDQKLSNkZWZpbmUgSEVSQUxEICIgREVDc3RhdGlv bi9VTFRSSVggNC40IgotI2Vsc2UKLSNpZmRlZiBVTFRSSVg0NQotI2RlZmluZSBIRVJBTEQgIiBE RUNzdGF0aW9uL1VMVFJJWCA0LjUiCi0jZWxzZQotI2RlZmluZSBIRVJBTEQgIiBERUNzdGF0aW9u L1VMVFJJWCIKLSNlbmRpZiAvKiBVTFRSSVg0NSAqLwotI2VuZGlmIC8qIFVMVFJJWDQ0ICovCi0j ZW5kaWYgLyogVUxUUklYNDMgKi8KLSNlbHNlCi0jZGVmaW5lIEhFUkFMRCAiIFVMVFJJWCIKLSNl bmRpZiAvKiBtaXBzICovCi0jZW5kaWYgLyogdmF4ICovCi0jZW5kaWYgLyogdWx0cml4ICovCi0K LSNpZmRlZiBPWE9TCi0jZGVmaW5lIEhFUkFMRCAiIE9saXZldHRpIFgvT1MiCi0jZW5kaWYgLyog T1hPUyAqLwotCi0jaWZkZWYgXzM4NkJTRAotI2RlZmluZSBIRVJBTEQgIiAzODZCU0QiCi0jZW5k aWYgLyogXzM4NkJTRCAqLwotCi0jaWZkZWYgUE9TSVgKLSNpZmRlZiBQVFgKLSNpZmRlZiBQVFg0 Ci0jZGVmaW5lIEhFUkFMRCAiIERZTklYL3B0eCBWNCIKLSNlbHNlCi0jZGVmaW5lIEhFUkFMRCAi IERZTklYL3B0eCIKLSNlbmRpZiAvKiBQVFg0ICovCi0jZWxzZSAgLyogUFRYICovCi0jaWZuZGVm IE9TRgkJLyogTGV0IE9TRiAtRFBPU0lYIGtlZXAgcHJldmlvdXNseSBkZWZpbmVkIEhFUkFMRCAq LwotI2lmZGVmIEhFUkFMRAotI3VuZGVmIEhFUkFMRAotI2VuZGlmIC8qIEhFUkFMRCAqLwotI2Vu ZGlmIC8qIE9TRiAqLwotI2lmZGVmIE9VOAotI2RlZmluZSBIRVJBTEQgIiBPcGVuVU5JWCA4Igot I2Vsc2UKLSNpZmRlZiBVVzcKLSNkZWZpbmUgSEVSQUxEICIgVW5peHdhcmUgNyIKLSNlbHNlCi0j aWZkZWYgUU5YCi0jaWZkZWYgUU5YMTYKLSNkZWZpbmUgSEVSQUxEICIgUU5YIDE2LWJpdCIKLSNl bHNlCi0jZGVmaW5lIEhFUkFMRCAiIFFOWCAzMi1iaXQiCi0jZW5kaWYgLyogUU5YMTYgKi8KLSNl bHNlCi0jaWZkZWYgTkVVVFJJTk8KLSNkZWZpbmUgSEVSQUxEICIgUU5YIE5ldXRyaW5vIDIiCi0j ZWxzZSAgLyogTkVVVFJJTk8gKi8KLSNpZmRlZiBRTlg2Ci0jZGVmaW5lIEhFUkFMRCAiIFFOWDYi Ci0jZWxzZSAgLyogUU5YNiAqLwotI2lmZGVmIF9fbGludXhfXwotI2lmZGVmIFpTTDU1MDAKLSNk ZWZpbmUgSEVSQUxEICIgU2hhcnAgWmF1cnVzIFNMLTU1MDAiCi0jZWxzZQotI2lmZGVmIFJIOTAK LSNkZWZpbmUgSEVSQUxEICIgUmVkIEhhdCBMaW51eCA5LjAiCi0jZWxzZQotI2lmZGVmIFJIODAK LSNkZWZpbmUgSEVSQUxEICIgUmVkIEhhdCBMaW51eCA4LjAiCi0jZWxzZQotI2lmZGVmIFJINzMK LSNkZWZpbmUgSEVSQUxEICIgUmVkIEhhdCBMaW51eCA3LjMiCi0jZWxzZQotI2lmZGVmIFJINzIK LSNkZWZpbmUgSEVSQUxEICIgUmVkIEhhdCBMaW51eCA3LjIiCi0jZWxzZQotI2lmZGVmIFJINzEK LSNkZWZpbmUgSEVSQUxEICIgUmVkIEhhdCBMaW51eCA3LjEiCi0jZWxzZQotI2RlZmluZSBIRVJB TEQgIiBMaW51eCIKLSNlbmRpZiAvKiBSSDcxICovCi0jZW5kaWYgLyogUkg3MiAqLwotI2VuZGlm IC8qIFJINzMgKi8KLSNlbmRpZiAvKiBSSDgwICovCi0jZW5kaWYgLyogUkg5MCAqLwotI2VuZGlm IC8qIFpTTDU1MDAgKi8KLSNlbHNlICAvKiBfX2xpbnV4X18gKi8KLSNpZmRlZiBfMzg2QlNECQkJ CS8qIDM4NkJTRCBKb2xpeCAqLwotI2RlZmluZSBIRVJBTEQgIiAzODZCU0QiCi0jZWxzZQotI2lm ZGVmIExZTlhPUwkJCQkvKiBMeW54IE9TIDIuMiAqLwotI2RlZmluZSBIRVJBTEQgIiBMeW54IE9T IgotI2Vsc2UKLSNpZmRlZiBQbGFuOQotI2RlZmluZSBIRVJBTEQgIiBQbGFuIDkgZnJvbSBCZWxs IExhYnMiCi0jZWxzZQotI2lmZGVmIFNPTEFSSVMxMQotI2RlZmluZSBIRVJBTEQgIiBTb2xhcmlz IDExIgotI2Vsc2UKLSNpZmRlZiBTT0xBUklTMTAKLSNkZWZpbmUgSEVSQUxEICIgU29sYXJpcyAx MCIKLSNlbHNlCi0jaWZkZWYgU09MQVJJUzkKLSNkZWZpbmUgSEVSQUxEICIgU29sYXJpcyA5Igot I2Vsc2UKLSNpZmRlZiBTT0xBUklTOAotI2RlZmluZSBIRVJBTEQgIiBTb2xhcmlzIDgiCi0jZWxz ZQotI2lmZGVmIFNPTEFSSVM3Ci0jZGVmaW5lIEhFUkFMRCAiIFNvbGFyaXMgNyIKLSNlbHNlCi0j aWZkZWYgU09MQVJJUzI2Ci0jZGVmaW5lIEhFUkFMRCAiIFNvbGFyaXMgMi42IgotI2Vsc2UKLSNp ZmRlZiBTT0xBUklTMjUKLSNkZWZpbmUgSEVSQUxEICIgU29sYXJpcyAyLjUiCi0jZWxzZQotI2lm ZGVmIFNPTEFSSVMyNAotI2RlZmluZSBIRVJBTEQgIiBTb2xhcmlzIDIuNCIKLSNlbHNlCi0jaWZk ZWYgU09MQVJJUwotI2RlZmluZSBIRVJBTEQgIiBTb2xhcmlzIDIueCIKLSNlbmRpZiAvKiBTT0xB UklTICovCi0jZW5kaWYgLyogU09MQVJJUzI0ICovCi0jZW5kaWYgLyogU09MQVJJUzI1ICovCi0j ZW5kaWYgLyogU09MQVJJUzI2ICovCi0jZW5kaWYgLyogU09MQVJJUzcgKi8KLSNlbmRpZiAvKiBT T0xBUklTOCAqLwotI2VuZGlmIC8qIFNPTEFSSVM5ICovCi0jZW5kaWYgLyogU09MQVJJUzEwICov Ci0jZW5kaWYgLyogU09MQVJJUzExICovCi0jZW5kaWYgLyogUGxhbjkgKi8KLSNlbmRpZiAvKiBM WU5YT1MgKi8KLSNlbmRpZiAvKiBfMzg2QlNEICovCi0jZW5kaWYgLyogX19saW51eF9fICovCi0j ZW5kaWYgLyogUU5YNiAqLwotI2VuZGlmIC8qIE5FVVRSSU5PICovCi0jZW5kaWYgLyogUU5YICov Ci0jZW5kaWYgLyogVVc3ICovCi0jZW5kaWYgLyogT1U4ICovCi0jZW5kaWYgLyogUFRYICovCi0j ZW5kaWYgLyogUE9TSVggKi8KLQotI2lmZGVmIFVUUzI0Ci0jZGVmaW5lIEhFUkFMRCAiIEFtZGFo bCBVVFMgMi40IgotI2VuZGlmIC8qIFVUUzI0ICovCi0KLSNpZmRlZiBVVFNWCi0jZGVmaW5lIEhF UkFMRCAiIEFtZGFobCBVVFMgViIKLSNlbmRpZiAvKiBVVFNWICovCi0KLSNpZmRlZiBWWFZFCi0j ZGVmaW5lIEhFUkFMRCAiIENEQyBWWC9WRSA1LjIuMSBTeXN0ZW0gViIKLSNlbmRpZiAvKiBWWFZF ICovCi0KLSNpZmRlZiBTQ08yMzQKLSNpZmRlZiBIRVJBTEQKLSN1bmRlZiBIRVJBTEQKLSNlbmRp ZiAvKiBIRVJBTEQgKi8KLSNkZWZpbmUgSEVSQUxEICIgU0NPIFhFTklYIDIuMy40IgotI2Vsc2UK LSNpZmRlZiBDS19TQ08zMlY0Ci0jaWZkZWYgSEVSQUxECi0jdW5kZWYgSEVSQUxECi0jZW5kaWYg LyogSEVSQUxEICovCi0jaWZkZWYgT0RUMzAKLSNkZWZpbmUgSEVSQUxEICIgU0NPIE9EVCAzLjAi Ci0jZWxzZQotI2RlZmluZSBIRVJBTEQgIiBTQ08gVU5JWC8zODYgVjQiCi0jZW5kaWYgLyogT0RU MzAgKi8KLSNlbHNlCi0jaWZkZWYgQ0tfU0NPVjUKLSNpZmRlZiBIRVJBTEQKLSN1bmRlZiBIRVJB TEQKLSNlbmRpZiAvKiBIRVJBTEQgKi8KLSNpZmRlZiBTQ09fT1NSNTA3Ci0jZGVmaW5lIEhFUkFM RCAiIFNDTyBPcGVuU2VydmVyIFI1LjAuNyIKLSNlbHNlCi0jaWZkZWYgU0NPX09TUjUwNkEKLSNk ZWZpbmUgSEVSQUxEICIgU0NPIE9wZW5TZXJ2ZXIgUjUuMC42YSIKLSNlbHNlCi0jaWZkZWYgU0NP X09TUjUwNgotI2RlZmluZSBIRVJBTEQgIiBTQ08gT3BlblNlcnZlciBSNS4wLjYiCi0jZWxzZQot I2lmZGVmIFNDT19PU1I1MDUKLSNkZWZpbmUgSEVSQUxEICIgU0NPIE9wZW5TZXJ2ZXIgUjUuMC41 IgotI2Vsc2UKLSNpZmRlZiBTQ09fT1NSNTA0Ci0jZGVmaW5lIEhFUkFMRCAiIFNDTyBPcGVuU2Vy dmVyIFI1LjAuNCIKLSNlbHNlCi0jaWZkZWYgU0NPX09TUjUwMgotI2RlZmluZSBIRVJBTEQgIiBT Q08gT3BlblNlcnZlciBSNS4wLjIiCi0jZWxzZQotI2RlZmluZSBIRVJBTEQgIiBTQ08gT3BlblNl cnZlciBSNS4wIgotI2VuZGlmIC8qIFNDT19PU1I1MDIgKi8KLSNlbmRpZiAvKiBTQ09fT1NSNTA0 ICovCi0jZW5kaWYgLyogU0NPX09TUjUwNSAqLwotI2VuZGlmIC8qIFNDT19PU1I1MDYgKi8KLSNl bmRpZiAvKiBTQ09fT1NSNTA2QSAqLwotI2VuZGlmIC8qIFNDT19PU1I1MDcgKi8KLSNlbHNlCi0j aWZkZWYgWEVOSVgKLSNpZmRlZiBIRVJBTEQKLSN1bmRlZiBIRVJBTEQKLSNlbmRpZiAvKiBIRVJB TEQgKi8KLSNpZmRlZiBNX1VOSVgKLSNkZWZpbmUgSEVSQUxEICIgU0NPIFVOSVgvMzg2IgotI2Vs c2UKLSNpZmRlZiBNX0kzODYKLSNkZWZpbmUgSEVSQUxEICIgWGVuaXgvMzg2IgotI2Vsc2UKLSNp ZmRlZiBNX0kyODYKLSNkZWZpbmUgSEVSQUxEICIgWGVuaXgvMjg2IgotI2Vsc2UKLSNkZWZpbmUg SEVSQUxEICIgWGVuaXgiCi0jZW5kaWYgLyogTV9JMjg2ICovCi0jZW5kaWYgLyogTV9JMzg2ICov Ci0jZW5kaWYgLyogTV9VTklYICovCi0jZW5kaWYgLyogWEVOSVggICovCi0jZW5kaWYgLyogQ0tf U0NPVjUgKi8KLSNlbmRpZiAvKiBDS19TQ09WMzJWNCAqLwotI2VuZGlmIC8qIFNDTzIzNCAqLwot Ci0jaWZkZWYgWklMT0cKLSNkZWZpbmUgSEVSQUxEICIgWmlsb2cgUzgwMDAgWmV1cyAzLjIxKyIK LSNlbmRpZiAvKiBaSUxPRyAqLwotCi0jaWZkZWYgVVRFSwotI2RlZmluZSBIRVJBTEQgIiBVVGVr IgotI2VuZGlmIC8qIFVURUsgKi8KLQotLyogQ2F0Y2gtYWxscyBmb3IgYW55dGhpbmcgbm90IGRl ZmluZWQgZXhwbGljaXRseSBhYm92ZSAqLwotCi0jaWZuZGVmIEhFUkFMRAotI2lmZGVmIFNWUjQK LSNpZmRlZiBpMzg2Ci0jZGVmaW5lIEhFUkFMRCAiIEFUJlQgU3lzdGVtIFYvMzg2IFI0IgotI2Vs c2UKLSNpZmRlZiBBTUlYCi0jZGVmaW5lIEhFUkFMRCAiIENvbW1vZG9yZSBBbWlnYSBTeXN0ZW0g Vi9tNjhrIFI0IgotI2Vsc2UKLSNkZWZpbmUgSEVSQUxEICIgQVQmVCBTeXN0ZW0gViBSNCIKLSNl bmRpZiAvKiBBTUlYICovCi0jZW5kaWYgLyogaTM4NiAqLwotI2Vsc2UKLSNpZmRlZiBTVlIzCi0j ZGVmaW5lIEhFUkFMRCAiIEFUJlQgU3lzdGVtIFYgUjMiCi0jZWxzZQotI2lmZGVmIEFUVFNWCi0j ZGVmaW5lIEhFUkFMRCAiIEFUJlQgU3lzdGVtIElJSSAvIFN5c3RlbSBWIgotI2Vsc2UKLSNpZmRl ZiBCU0Q0MwotI2lmZGVmIHBkcDExCi0jZGVmaW5lIEhFUkFMRCAiIDIuMTAgQlNEIFBEUC0xMSIK LSNlbHNlCi0jaWZkZWYgdmF4Ci0jZGVmaW5lIEhFUkFMRCAiIDQuMyBCU0QgVkFYIgotI2Vsc2UK LSNkZWZpbmUgSEVSQUxEICIgNC4zIEJTRCIKLSNlbmRpZiAvKiB2YXggKi8KLSNlbmRpZiAvKiBw ZHAxMSAqLwotI2Vsc2UKLSNpZmRlZiBCU0Q0Ci0jaWZkZWYgdmF4Ci0jZGVmaW5lIEhFUkFMRCAi IDQuMiBCU0QgVkFYIgotI2Vsc2UKLSNkZWZpbmUgSEVSQUxEICIgNC4yIEJTRCIKLSNlbmRpZiAv KiB2YXggKi8KLSNlbHNlCi0jaWZkZWYgVjcKLSNkZWZpbmUgSEVSQUxEICIgVU5JWCBWZXJzaW9u IDciCi0jZW5kaWYgLyogVjcgKi8KLSNlbmRpZiAvKiBCU0Q0ICovCi0jZW5kaWYgLyogQlNENDMg Ki8KLSNlbmRpZiAvKiBBVFRTViAqLwotI2VuZGlmIC8qIFNWUjMgKi8KLSNlbmRpZiAvKiBTVlI0 ICovCi0jZW5kaWYgLyogSEVSQUxEICovCi0jZW5kaWYgLyogSEVSQUxEICovCi0KLSNpZmRlZiBP UzIKLSNpZmRlZiBIRVJBTEQKLSN1bmRlZiBIRVJBTEQKLSNlbmRpZiAvKiBIRVJBTEQgKi8KLSNp ZmRlZiBOVAotI2RlZmluZSBIRVJBTEQgIiAzMi1iaXQgV2luZG93cyIKLSNlbHNlIC8qIE5UICov Ci0jZGVmaW5lIEhFUkFMRCAiIDMyLWJpdCBPUy8yIgotI2VuZGlmIC8qIE5UICovCi0jZW5kaWYg LyogT1MvMiAqLwotCi0jaWZuZGVmIEhFUkFMRAotI2RlZmluZSBIRVJBTEQgIiBVbmtub3duIFZl cnNpb24iCi0jZW5kaWYgLyogSEVSQUxEICovCi0KLS8qIEhhcmR3YXJlIHR5cGUgKi8KLQotI2lm ZGVmIHZheAkJCQkvKiBERUMgVkFYICovCi0jaWZuZGVmIENLQ1BVCi0jZGVmaW5lIENLQ1BVICJ2 YXgiCi0jZW5kaWYgLyogQ0tDUFUgKi8KLSNlbmRpZiAvKiAgdmF4ICovCi0jaWZkZWYgcGRwMTEJ CQkJLyogREVDIFBEUC0xMSAqLwotI2lmbmRlZiBDS0NQVQotI2RlZmluZSBDS0NQVSAicGRwMTEi Ci0jZW5kaWYgLyogQ0tDUFUgKi8KLSNlbmRpZiAvKiBwZHAxMSAqLwotCi0jaWZkZWYgX19BTFBI QQkJCQkvKiBERUMgQWxwaGEgKi8KLSNpZm5kZWYgQ0tDUFUKLSNkZWZpbmUgQ0tDUFUgIkFscGhh IgotI2VuZGlmIC8qIENLQ1BVICovCi0jZW5kaWYgLyogX19BTFBIQSAqLwotCi0jaWZkZWYgX19h bHBoYQkJCQkvKiBPU0YvMSB1c2VzIGxvd2VyY2FzZS4uLiAqLwotI2lmbmRlZiBDS0NQVQotI2Rl ZmluZSBDS0NQVSAiQWxwaGEiCi0jZW5kaWYgLyogQ0tDUFUgKi8KLSNlbmRpZiAvKiBfX2FscGhh ICovCi0KLSNpZmRlZiBER1VYCQkJCS8qIE92ZXJyaWRlIE1vdG9yb2xhIDg4ayBhc3N1bXB0aW9u ICovCi0jaWZuZGVmIENLQ1BVCQkJCS8qIE5ldyBBVmlpT05zIGFyZSBJbnRlbCBiYXNlZC4uLiAq LwotI2lmZGVmIGk1ODYKLSNkZWZpbmUgQ0tDUFUgImk1ODYiCi0jZWxzZQotI2lmZGVmIGk0ODYK LSNkZWZpbmUgQ0tDUFUgImk0ODYiCi0jZWxzZQotI2lmZGVmIGkzODYKLSNkZWZpbmUgQ0tDUFUg ImkzODYiCi0jZW5kaWYgLyogaTM4NiAqLwotI2VuZGlmIC8qIGk0ODYgKi8KLSNlbmRpZiAvKiBp NTg2ICovCi0jZW5kaWYgLyogQ0tDUFUgKi8KLSNlbmRpZiAvKiBER1VYICovCi0KLS8qIEhQIDkw MDAgKi8KLQotI2lmZGVmIF9faHA5MDAwczcwMAotI2lmbmRlZiBDS0NQVQotI2RlZmluZSBDS0NQ VSAiaHA5MDAwczcwMCIKLSNlbmRpZiAvKiBDS0NQVSAqLwotI2VuZGlmIC8qIF9faHA5MDAwczcw MCAqLwotCi0jaWZkZWYgX19ocDkwMDBzODAwCi0jaWZuZGVmIENLQ1BVCi0jZGVmaW5lIENLQ1BV ICJocDkwMDBzODAwIgotI2VuZGlmIC8qIENLQ1BVICovCi0jZW5kaWYgLyogX19ocDkwMDBzODAw ICovCi0KLSNpZmRlZiBfX2hwOTAwMHM1MDAKLSNpZm5kZWYgQ0tDUFUKLSNkZWZpbmUgQ0tDUFUg ImhwOTAwMHM1MDAiCi0jZW5kaWYgLyogQ0tDUFUgKi8KLSNlbmRpZiAvKiBfX2hwOTAwMHM1MDAg Ki8KLQotI2lmZGVmIF9faHA5MDAwczQwMAotI2lmbmRlZiBDS0NQVQotI2RlZmluZSBDS0NQVSAi aHA5MDAwczQwMCIKLSNlbmRpZiAvKiBDS0NQVSAqLwotI2VuZGlmIC8qIF9faHA5MDAwczQwMCAq LwotCi0jaWZkZWYgX19ocDkwMDBzMzAwCi0jaWZuZGVmIENLQ1BVCi0jZGVmaW5lIENLQ1BVICJo cDkwMDBzMzAwIgotI2VuZGlmIC8qIENLQ1BVICovCi0jZW5kaWYgLyogX19ocDkwMDBzMzAwICov Ci0KLSNpZmRlZiBfX2hwOTAwMHMyMDAKLSNpZm5kZWYgQ0tDUFUKLSNkZWZpbmUgQ0tDUFUgImhw OTAwMHMyMDAiCi0jZW5kaWYgLyogQ0tDUFUgKi8KLSNlbmRpZiAvKiBfX2hwOTAwMHMyMDAgKi8K LQotI2lmZGVmIG04ODAwMAkJCQkvKiBNb3Rvcm9sYSA4ODAwMCAqLwotI2lmbmRlZiBDS0NQVQot I2RlZmluZSBDS0NQVSAibWM4ODAwMCIKLSNlbmRpZiAvKiBDS0NQVSAqLwotI2VuZGlmIC8qIG04 ODAwMCAqLwotI2lmZGVmIF9fdXNpbmdfTTg4S0JDUwkJCS8qIERHIHN5bWJvbCBmb3IgTW90b3Jv bGEgODgwMDAgKi8KLSNpZm5kZWYgQ0tDUFUKLSNkZWZpbmUgQ0tDUFUgIm1jODgwMDAiCi0jZW5k aWYgLyogQ0tDUFUgKi8KLSNlbmRpZiAvKiBfX3VzaW5nX004OEtCQ1MgKi8KLSNpZmRlZiBtODhr CQkJCS8qIE1vdG9yb2xhIHN5bWJvbCBmb3IgODgwMDAgKi8KLSNpZm5kZWYgQ0tDUFUKLSNkZWZp bmUgQ0tDUFUgIm1jODgwMDAiCi0jZW5kaWYgLyogQ0tDUFUgKi8KLSNlbmRpZiAvKiBtODhrICov Ci0jaWZkZWYgbWM2ODA0MAkJCQkvKiBNb3Rvcm9sYSA2ODA0MCAqLwotI2lmbmRlZiBDS0NQVQot I2RlZmluZSBDS0NQVSAibWM2ODA0MCIKLSNlbmRpZiAvKiBDS0NQVSAqLwotI2VuZGlmIC8qIG1j NjgwNDAgKi8KLSNpZmRlZiBtYzY4MDMwCQkJCS8qIE1vdG9yb2xhIDY4MDMwICovCi0jaWZuZGVm IENLQ1BVCi0jZGVmaW5lIENLQ1BVICJtYzY4MDMwIgotI2VuZGlmIC8qIENLQ1BVICovCi0jZW5k aWYgLyogbWM2ODAzMCAqLwotI2lmZGVmIG1jNjgwMjAJCQkJLyogTW90b3JvbGEgNjgwMjAgKi8K LSNpZm5kZWYgQ0tDUFUKLSNkZWZpbmUgQ0tDUFUgIm1jNjgwMjAiCi0jZW5kaWYgLyogQ0tDUFUg Ki8KLSNlbmRpZiAvKiBtYzY4MDIwICovCi0jaWZkZWYgbWM2ODAxMAkJCQkvKiBNb3Rvcm9sYSA2 ODAxMCAqLwotI2lmbmRlZiBDS0NQVQotI2RlZmluZSBDS0NQVSAibWM2ODAxMCIKLSNlbmRpZiAv KiBDS0NQVSAqLwotI2VuZGlmIC8qIG1jNjgwMTAgKi8KLSNpZmRlZiBtYzY4MDAwCQkJCS8qIE1v dG9yb2xhIDY4MDAwICovCi0jaWZuZGVmIENLQ1BVCi0jZGVmaW5lIENLQ1BVICJtYzY4MDAwIgot I2VuZGlmIC8qIENLQ1BVICovCi0jZW5kaWYgLyogbWM2ODAwMCAqLwotI2lmZGVmIG1jNjhrCQkJ CS8qIERpdHRvICh1c2VkIGJ5IERJQUIgRFM5MCkgKi8KLSNpZm5kZWYgQ0tDUFUKLSNkZWZpbmUg Q0tDUFUgIm1jNjgwMDAiCi0jZW5kaWYgLyogQ0tDUFUgKi8KLSNlbmRpZiAvKiBtYzY4ayAqLwot I2lmZGVmIG02OAkJCQkvKiBEaXR0byAqLwotI2lmbmRlZiBDS0NQVQotI2RlZmluZSBDS0NQVSAi bWM2ODAwMCIKLSNlbmRpZiAvKiBDS0NQVSAqLwotI2VuZGlmIC8qIG02OCAqLwotI2lmZGVmIG02 OGsJCQkJLyogRGl0dG8gKi8KLSNpZm5kZWYgQ0tDUFUKLSNkZWZpbmUgQ0tDUFUgIm1jNjgwMDAi Ci0jZW5kaWYgLyogQ0tDUFUgKi8KLSNlbmRpZiAvKiBtNjhrICovCi0KLSNpZmRlZiBpYTY0CQkJ CS8qIElBNjQgLyBJdGFuaXVtICovCi0jaWZuZGVmIENLQ1BVCi0jZGVmaW5lIENLQ1BVICJpYTY0 IgotI2VuZGlmIC8qIENLQ1BVICovCi0jZW5kaWYgLyogaTY4NiAqLwotCi0jaWZkZWYgaTY4NgkJ CQkvKiBJbnRlbCA4MDY4NiAqLwotI2lmbmRlZiBDS0NQVQotI2RlZmluZSBDS0NQVSAiaTY4NiIK LSNlbmRpZiAvKiBDS0NQVSAqLwotI2VuZGlmIC8qIGk2ODYgKi8KLQotI2lmZGVmIGk1ODYJCQkJ LyogSW50ZWwgODA1ODYgKi8KLSNpZm5kZWYgQ0tDUFUKLSNkZWZpbmUgQ0tDUFUgImk1ODYiCi0j ZW5kaWYgLyogQ0tDUFUgKi8KLSNlbmRpZiAvKiBpNTg2ICovCi0KLSNpZmRlZiBpNDg2CQkJCS8q IEludGVsIDgwNDg2ICovCi0jaWZuZGVmIENLQ1BVCi0jZGVmaW5lIENLQ1BVICJpNDg2IgotI2Vu ZGlmIC8qIENLQ1BVICovCi0jZW5kaWYgLyogaTgwNDg2ICovCi0jaWZkZWYgaTM4NgkJCQkvKiBJ bnRlbCA4MDM4NiAqLwotI2lmbmRlZiBDS0NQVQotI2RlZmluZSBDS0NQVSAiaTM4NiIKLSNlbmRp ZiAvKiBDS0NQVSAqLwotI2VuZGlmIC8qIGk4MDM4NiAqLwotI2lmZGVmIGkyODYJCQkJLyogSW50 ZWwgODAyODYgKi8KLSNpZm5kZWYgQ0tDUFUKLSNkZWZpbmUgQ0tDUFUgImkyODYiCi0jZW5kaWYg LyogQ0tDUFUgKi8KLSNlbmRpZiAvKiBpMjg2ICovCi0jaWZkZWYgaTE4NgkJCQkvKiBJbnRlbCA4 MDE4NiAqLwotI2lmbmRlZiBDS0NQVQotI2RlZmluZSBDS0NQVSAiaTE4NiIKLSNlbmRpZiAvKiBD S0NQVSAqLwotI2VuZGlmIC8qIGkxODYgKi8KLSNpZmRlZiBNX0k1ODYJCQkJLyogSW50ZWwgODA1 ODYgKi8KLSNpZm5kZWYgQ0tDUFUKLSNkZWZpbmUgQ0tDUFUgImk1ODYiCi0jZW5kaWYgLyogQ0tD UFUgKi8KLSNlbmRpZiAvKiBNX0k1ODYgKi8KLSNpZmRlZiBNX0k0ODYJCQkJLyogSW50ZWwgODA0 ODYgKi8KLSNpZm5kZWYgQ0tDUFUKLSNkZWZpbmUgQ0tDUFUgImk0ODYiCi0jZW5kaWYgLyogQ0tD UFUgKi8KLSNlbmRpZiAvKiBNX0k0ODYgKi8KLSNpZmRlZiBfTV9JMzg2CQkJCS8qIEludGVsIDgw Mzg2ICovCi0jaWZuZGVmIENLQ1BVCi0jZGVmaW5lIENLQ1BVICJpMzg2IgotI2VuZGlmIC8qIENL Q1BVICovCi0jZW5kaWYgLyogX01fSTM4NiAqLwotI2lmZGVmIE1fSTI4NgkJCQkvKiBJbnRlbCA4 MDI4NiAqLwotI2lmbmRlZiBDS0NQVQotI2RlZmluZSBDS0NQVSAiaTI4NiIKLSNlbmRpZiAvKiBD S0NQVSAqLwotI2VuZGlmIC8qIE1fSTI4NiAqLwotI2lmZGVmIE1fSTg2CQkJCS8qIEludGVsIDgw eDg2ICovCi0jaWZuZGVmIENLQ1BVCi0jZGVmaW5lIENLQ1BVICJpeDg2IgotI2VuZGlmIC8qIENL Q1BVICovCi0jZW5kaWYgLyogTV9JODYgKi8KLSNpZmRlZiBzcGFyYwkJCQkvKiBTVU4gU1BBUkMg Ki8KLSNpZm5kZWYgQ0tDUFUKLSNkZWZpbmUgQ0tDUFUgInNwYXJjIgotI2VuZGlmIC8qIENLQ1BV ICovCi0jZW5kaWYgLyogc3BhcmMgKi8KLSNpZmRlZiBtaXBzCQkJCS8qIE1JUFMgUklTQyBwcm9j ZXNzb3IgKi8KLSNpZm5kZWYgQ0tDUFUKLSNkZWZpbmUgQ0tDUFUgIm1pcHMiCi0jZW5kaWYgLyog Q0tDUFUgKi8KLSNlbmRpZiAvKiBtaXBzICovCi0jaWZkZWYgX0lCTVIyCQkJCS8qIElCTSBSUy82 MDAwICovCi0jaWZuZGVmIENLQ1BVCQkJCS8qICh3aGF0IGRvIHRoZXkgY2FsbCB0aGUgY2hpcD8p ICovCi0jZGVmaW5lIENLQ1BVICJyczYwMDAiCi0jZW5kaWYgLyogQ0tDUFUgKi8KLSNlbmRpZiAv KiByczYwMDAgKi8KLSNpZmRlZiB1M2I1CQkJCS8qIFdFMzIwMDAgTUFDLTMyLCBBVCZUIDNCeCAq LwotI2lmbmRlZiBDS0NQVQotI2RlZmluZSBDS0NQVSAidTNiNSIKLSNlbmRpZiAvKiBDS0NQVSAq LwotI2VuZGlmIC8qIHUzYjUgKi8KLSNpZmRlZiBuM2IKLSNpZm5kZWYgQ0tDUFUKLSNkZWZpbmUg Q0tDUFUgIm4zYiIKLSNlbmRpZiAvKiBDS0NQVSAqLwotI2VuZGlmIC8qIG4zYiAqLwotI2lmZGVm IHUzYgotI2lmbmRlZiBDS0NQVQotI2RlZmluZSBDS0NQVSAidTNiIgotI2VuZGlmIC8qIENLQ1BV ICovCi0jZW5kaWYgLyogdTNiICovCi0jaWZkZWYgbjE2CQkJCS8qIEVuY29yZSBNdWx0aW1heCAq LwotI2lmbmRlZiBDS0NQVQotI2RlZmluZSBDS0NQVSAibjE2IgotI2VuZGlmIC8qIENLQ1BVICov Ci0jZW5kaWYgLyogbjE2ICovCi0jaWZkZWYgdTM3MAkJCQkvKiBJQk0gMzcwICovCi0jaWZuZGVm IENLQ1BVCi0jZGVmaW5lIENLQ1BVICJ1MzcwIgotI2VuZGlmIC8qIENLQ1BVICovCi0jZW5kaWYg LyogdTM3MCAqLwotI2lmZGVmIE1BQwkJCQkvKiBNYWNpbnRvc2ggY2F0Y2gtYWxsICovCi0jaWZu ZGVmIENLQ1BVCi0jZGVmaW5lIENLQ1BVICJtYzY4MDAwIgotI2VuZGlmIC8qIENLQ1BVICovCi0j ZW5kaWYgLyogTUFDICovCi0KLSNpZmRlZiBTVFJBVFVTCi0jaWZuZGVmIENLQ1BVCi0jaWZkZWYg X19JODYwX18KLSNkZWZpbmUgQ0tDUFUgIkk4NjAgRmFtaWx5IgotI2Vsc2UKLSNpZmRlZiBfX01D NjhLX18KLSNkZWZpbmUgQ0tDUFUgIk1DNjgweDAgRmFtaWx5IgotI2Vsc2UKLSNkZWZpbmUgQ0tD UFUgIlN0cmF0dXMgdW5rbm93biBwcm9jZXNzb3IiCi0jZW5kaWYgLyogX19NQzY4S19fICovCi0j ZW5kaWYgLyogX19JODYwX18gKi8KLSNlbmRpZiAvKiBDS0NQVSAqLwotI2VuZGlmIC8qIFNUUkFU VVMgKi8KLQotI2lmZGVmIENPTU1FTlQKLSNpZm5kZWYgQ0tDUFUJCQkJLyogQWxsIG90aGVycyAq LwotI2RlZmluZSBDS0NQVSAidW5rbm93biIKLSNlbmRpZiAvKiBDS0NQVSAqLwotI2VuZGlmIC8q IENPTU1FTlQgKi8KLQotI2VuZGlmIC8qIENLVVZFUl9IICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1p dC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V4bGEuYyBiL2NrZXJtaXQtOS4wLjMw Mi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1eGxhLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IGQ1NTY2ZmEuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJt aXQtOS4wLjMwMi9ja3V4bGEuYworKysgL2Rldi9udWxsCkBAIC0xLDc1ODggKzAsMCBAQAotI2lu Y2x1ZGUgImNrY3N5bS5oIgotCi0jaW5jbHVkZSAiY2tjZGViLmgiCQkJLyogSW5jbHVkZXMuLi4g Ki8KLSNpbmNsdWRlICJja2NrZXIuaCIKLSNpbmNsdWRlICJja3VjbWQuaCIKLSNpbmNsdWRlICJj a2N4bGEuaCIKLQotI2lmZGVmIE5PWEZFUgotI2RlZmluZSB6ZHN0dWZmKGEpCi0jZW5kaWYgLyog Tk9YRkVSICovCi0KLSNpZm5kZWYgTk9DU0VUUwotY2hhciAqeGxhdiA9ICJDaGFyYWN0ZXIgU2V0 IFRyYW5zbGF0aW9uIDkuMC4wNDQsIDIgSnVuIDIwMTEiOwotCi0vKiAgQyBLIFUgWCBMIEEgICov Ci0KLS8qICBDLUtlcm1pdCB0YWJsZXMgYW5kIGZ1bmN0aW9ucyBzdXBwb3J0aW5nIGNoYXJhY3Rl ciBzZXQgdHJhbnNsYXRpb24uICAqLwotLyoKLSAgQXV0aG9yOiBGcmFuayBkYSBDcnV6IDxmZGNA Y29sdW1iaWEuZWR1PiwKLSAgQ29sdW1iaWEgVW5pdmVyc2l0eSBBY2FkZW1pYyBJbmZvcm1hdGlv biBTeXN0ZW1zLCBOZXcgWW9yayBDaXR5LgotCi0gIENvcHlyaWdodCAoQykgMTk4NSwgMjAxMSwK LSAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZ b3JrLgotICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcu VFhUIGZpbGUgb3IgdGhlCi0gICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVs ZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCi0qLwotCi0vKiBDaGFyYWN0ZXIgc2V0 IHRyYW5zbGF0aW9uIGRhdGEgYW5kIGZ1bmN0aW9ucyAqLwotCi1leHRlcm4gaW50IHppbmNudDsJ CQkvKiBGaWxlIGkvbyBtYWNyb3MgYW5kIHZhcmlhYmxlcyAqLwotZXh0ZXJuIGNoYXIgKnppbnB0 cjsKLWV4dGVybiBpbnQgem91dGNudDsKLWV4dGVybiBjaGFyICp6b3V0cHRyOwotZXh0ZXJuIGlu dCBieXRlb3JkZXI7Ci1leHRlcm4gaW50IHhmcnhsYTsKLQotaW50IHRzbGV2ZWwgID0gVFNfTDA7 CQkJLyogVHJhbnNmZXIgc3ludGF4IGxldmVsICgwLDEsMikgKi8KLWludCB0Y2hhcnNldCA9IFRD X1RSQU5TUDsJCS8qIFRyYW5zZmVyIHN5bnRheCBjaGFyYWN0ZXIgc2V0ICovCi1pbnQgdGNzX3Nh dmUgPSAtMTsJCQkvKiBGb3Igc2F2ZS9yZXN0b3JlIHRlcm0gY2hhcnNldCAqLwotaW50IHRjc190 cmFuc3AgPSAwOwkJCS8qIFRlcm0gY2hhcnNldCBpcyBUUkFOU1BBUkVOVCBmbGFnICovCi0KLSNp ZmRlZiBDS09VTkkKLWludCB0Y3NyICAgICA9IFRYXzg4NTlfMTsJCS8qIFJlbW90ZSB0ZXJtaW5h bCBjaGFyYWN0ZXIgc2V0ICovCi0jZWxzZSAvKiBDS09VTkkgKi8KLWludCB0Y3NyICAgICA9IEZD X1VTQVNDSUk7Ci0jZW5kaWYgLyogQ0tPVU5JICovCi1pbnQgbGFuZ3VhZ2UgPSBMX1VTQVNDSUk7 CQkvKiBMYW5ndWFnZSAqLwotCi0jaWZkZWYgVU5JQ09ERQotaW50IHVjc2JvbSA9IDE7CQkJCS8q IEFkZCBCT00gdG8gbmV3IFVDUyBmaWxlcz8gKi8KLWludCB1Y3NvcmRlciA9IC0xOwkJCS8qIERl ZmF1bHQgYnl0ZSBvcmRlciBmb3IgVUNTIGZpbGVzICovCi1pbnQgZmlsZW9yZGVyID0gLTE7CQkJ LyogQnl0ZSBvcmRlciBvZiBjdXJyZW50IGZpbGUgKi8KLQkJCQkJLyogMCA9IEJFLCAxID0gTEUg Ki8KLSNlbmRpZiAvKiBVTklDT0RFICovCi0vKgotICBEZWZhdWx0IGxvY2FsIGZpbGUgYW5kIHRl cm1pbmFsIGNoYXJhY3RlciBzZXQuCi0gIE5vcm1hbGx5IEFTQ0lJLCBidXQgZm9yIHNvbWUgc3lz dGVtcyB3ZSBrbm93IG90aGVyd2lzZS4KLSovCi1pbnQgZmNzX3NhdmUgPSAtMTsKLSNpZmRlZiBk YXRhZ2VuZXJhbAkJCS8qIERhdGEgR2VuZXJhbCBBT1MvVlMgKi8KLWludCBmY2hhcnNldCA9IEZD X0RHTUNTOwkJLyogdXNlcyB0aGUgREcgSW50ZXJuYXRpb25hbCBzZXQgKi8KLWludCBkY3NldDgg ICA9IEZDX0RHTUNTOwotaW50IGRjc2V0NyAgID0gRkNfVVNBU0NJSTsKLWludCB0Y3NsICAgICA9 IEZDX0RHTUNTOwotI2Vsc2UKLSNpZmRlZiBORVhUCQkJCS8qIFRoZSBOZVhUIHdvcmtzdGF0aW9u ICovCi1pbnQgZmNoYXJzZXQgPSBGQ19ORVhUOwkJCS8qIHVzZXMgaXRzIG93biA4LWJpdCBzZXQg Ki8KLWludCBkY3NldDggICA9IEZDX05FWFQ7Ci1pbnQgZGNzZXQ3ICAgPSBGQ19VU0FTQ0lJOwot aW50IHRjc2wgICAgID0gRkNfTkVYVDsKLSNlbHNlCi0jaWZkZWYgTUFDCQkJCS8qIFRoZSBNYWNp bnRvc2ggKi8KLWludCBmY2hhcnNldCA9IEZDX0FQUFFEOwkJLyogdXNlcyBhbiBleHRlbmRlZCB2 ZXJzaW9uIG9mICovCi1pbnQgZGNzZXQ4ICAgPSBGQ19BUFBRRDsKLWludCBkY3NldDcgICA9IEZD X1VTQVNDSUk7Ci1pbnQgdGNzbCAgICAgPSBGQ19BUFBRRDsJCS8qIEFwcGxlIFF1aWNrZHJhdyAq LwotI2Vsc2UKLSNpZmRlZiBBVVgKLWludCBmY2hhcnNldCA9IEZDX0FQUFFEOwkJLyogRGl0dG8g Zm9yIEFwcGxlIEEvVVggKi8KLWludCBkY3NldDggICA9IEZDX0FQUFFEOwotaW50IGRjc2V0NyAg ID0gRkNfVVNBU0NJSTsKLWludCB0Y3NsICAgICA9IEZDX0FQUFFEOwotI2Vsc2UKLSNpZmRlZiBB TUlHQQkJCQkvKiBUaGUgQ29tbW9kb3JlIEFtaWdhICovCi1pbnQgZmNoYXJzZXQgPSBGQ18xTEFU SU47CQkvKiB1c2VzIExhdGluLTEgKi8KLWludCBkY3NldDggICA9IEZDXzFMQVRJTjsKLWludCBk Y3NldDcgICA9IEZDX1VTQVNDSUk7Ci1pbnQgdGNzbCAgICAgPSBGQ18xTEFUSU47Ci0jZWxzZQkJ CQkJLyogQWxsIG90aGVycyAqLwotI2lmZGVmIENLT1VOSSAJCQkJLyogT1MvMiBVbmljb2RlICov Ci1pbnQgZmNoYXJzZXQgPSBGQ18xTEFUSU47Ci1pbnQgZGNzZXQ4ICAgPSBGQ18xTEFUSU47Ci1p bnQgZGNzZXQ3ICAgPSBGQ19VU0FTQ0lJOwotaW50IHRjc2wgICAgID0gVFhfODg1OV8xOwotaW50 IHBybmNzICAgID0gVFhfQ1A0Mzc7Ci0jZWxzZQkJCQkJLyogQWxsIG90aGVycyAqLwotaW50IGZj aGFyc2V0ID0gRkNfVVNBU0NJSTsJCS8qIHVzZSBBU0NJSSBieSBkZWZhdWx0ICovCi1pbnQgZGNz ZXQ4ICAgPSBGQ18xTEFUSU47CQkvKiBCdXQgZGVmYXVsdCA4LWJpdCBzZXQgaXMgTGF0aW4tMSAq LwotaW50IGRjc2V0NyAgID0gRkNfVVNBU0NJSTsKLWludCB0Y3NsICAgICA9IEZDX1VTQVNDSUk7 Ci1pbnQgcHJuY3MgICAgPSBGQ19DUDQzNzsKLSNlbmRpZiAvKiBDS09VTkkgKi8KLSNlbmRpZiAv KiBBTUlHQSAqLwotI2VuZGlmIC8qIEFVWCAqLwotI2VuZGlmIC8qIE1BQyAqLwotI2VuZGlmIC8q IE5FWFQgKi8KLSNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwotCi1pbnQgc19jc2V0ID0gWE1PREVf QTsJCQkvKiBTRU5EIGNoYXJzZXQgc2VsZWN0aW9uID0gQVVUTyAqLwotaW50IHJfY3NldCA9IFhN T0RFX0E7CQkJLyogUkVDViBjaGFyc2V0IHNlbGVjdGlvbiA9IEFVVE8gKi8KLWludCBhZmNzZXRb TUFYRkNTRVRTKzFdOwkJLyogQ2hhcmFjdGVyLXNldCBhc3NvY2lhdGlvbnMgKi8KLWludCBheGNz ZXRbTUFYVENTRVRTKzFdOwotaW50IHhsYXR5cGUgPSBYTEFfTk9ORTsJCQkvKiBUcmFuc2xhdGlv biB0eXBlICovCi0KLSNpZmRlZiBVTklDT0RFCi0jaWZkZWYgQ0tfQU5TSUMKLWV4dGVybiBpbnQg KCp4bF91dGNbTUFYVENTRVRTKzFdKShVU0hPUlQpOyAgLyogVW5pY29kZSB0byBUQ1MgKi8KLWV4 dGVybiBpbnQgKCp4bF91ZmNbTUFYRkNTRVRTKzFdKShVU0hPUlQpOyAgLyogVW5pY29kZSB0byBG Q1MgKi8KLWV4dGVybiBVU0hPUlQgKCp4bF90Y3VbTUFYVENTRVRTKzFdKShDSEFSKTsgLyogVENT IHRvIFVuaWNvZGUgKi8KLWV4dGVybiBVU0hPUlQgKCp4bF9mY3VbTUFYRkNTRVRTKzFdKShDSEFS KTsgLyogRkNTIHRvIFVuaWNvZGUgKi8KLSNlbHNlCi1leHRlcm4gaW50ICgqeGxfdXRjW01BWFRD U0VUUysxXSkoKTsKLWV4dGVybiBpbnQgKCp4bF91ZmNbTUFYRkNTRVRTKzFdKSgpOwotZXh0ZXJu IFVTSE9SVCAoKnhsX3RjdVtNQVhUQ1NFVFMrMV0pKCk7Ci1leHRlcm4gVVNIT1JUICgqeGxfZmN1 W01BWEZDU0VUUysxXSkoKTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotI2VuZGlmIC8qIFVOSUNP REUgKi8KLQotLyogQnVyZWF1Y3JhY3kgc2VjdGlvbiAqLwotCi1fUFJPVE9UWVAoIENIQVIgeG5l bDEsIChDSEFSIGMpICk7CS8qIE5lWFQgdG8gTGF0aW4tMSAqLwotX1BST1RPVFlQKCBDSEFSIHhs MTQzLCAoQ0hBUiBjKSApOwkvKiBMYXRpbi0xIHRvIElCTSBDUDQzNyAqLwotX1BST1RPVFlQKCBD SEFSIHhsMWFzLCAoQ0hBUiBjKSApOwkvKiBMYXRpbi0xIHRvIFVTIEFTQ0lJICovCi1fUFJPVE9U WVAoIENIQVIgemwxYXMsIChDSEFSIGMpICk7CS8qIExhdGluLTEgdG8gVVMgQVNDSUkgKi8KLQot I2lmZGVmIENZUklMTElDCi1fUFJPVE9UWVAoIENIQVIgeGFzc2ssIChDSEFSIGMpICk7CS8qIEFT Q0lJIHRvIFNob3J0IEtPSSAqLwotX1BST1RPVFlQKCBDSEFSIHhza2N5LCAoQ0hBUiBjKSApOwkv KiBTaG9ydCBLT0kgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KLSNlbmRpZiAvKiBDWVJJTExJQyAqLwot Ci0jaWZkZWYgTEFUSU4yCi1fUFJPVE9UWVAoIENIQVIgeG5lbDIsIChDSEFSIGMpICk7CS8qIE5l WFQgdG8gTGF0aW4tMiAqLwotX1BST1RPVFlQKCBDSEFSIHhsMjQzLCAoQ0hBUiBjKSApOwkvKiBM YXRpbi0yIHRvIElCTSBDUDQzNyAqLwotX1BST1RPVFlQKCBDSEFSIHhsMmFzLCAoQ0hBUiBjKSAp OwkvKiBMYXRpbi0yIHRvIFVTIEFTQ0lJICovCi1fUFJPVE9UWVAoIENIQVIgemwyYXMsIChDSEFS IGMpICk7CS8qIExhdGluLTIgdG8gVVMgQVNDSUkgKi8KLV9QUk9UT1RZUCggQ0hBUiB4bDJyOCwg KENIQVIgYykgKTsJLyogTGF0aW4tMiB0byBIUCAqLwotX1BST1RPVFlQKCBDSEFSIHhsMmw5LCAo Q0hBUiBjKSApOwkvKiBMYXRpbi0yIHRvIExhdGluLTkgKi8KLV9QUk9UT1RZUCggQ0hBUiB4bDls MiwgKENIQVIgYykgKTsJLyogTGF0aW4tOSB0byBMYXRpbi0yICovCi1fUFJPVE9UWVAoIENIQVIg eGwybXosIChDSEFSIGMpICk7CS8qIExhdGluLTIgdG8gTWF6b3ZpYSAqLwotX1BST1RPVFlQKCBD SEFSIHhtemwyLCAoQ0hBUiBjKSApOwkvKiBNYXpvdmlhIHRvIExhdGluLTIgKi8KLV9QUk9UT1RZ UCggQ0hBUiB4bDFteiwgKENIQVIgYykgKTsJLyogTGF0aW4tMSB0byBNYXpvdmlhICovCi1fUFJP VE9UWVAoIENIQVIgeG16bDEsIChDSEFSIGMpICk7CS8qIE1hem92aWEgdG8gTGF0aW4tMSAqLwot X1BST1RPVFlQKCBDSEFSIHhtemw5LCAoQ0hBUiBjKSApOwkvKiBMYXRpbi05IHRvIE1hem92aWEg Ki8KLV9QUk9UT1RZUCggQ0hBUiB4bDlteiwgKENIQVIgYykgKTsJLyogTWF6b3ZpYSB0byBMYXRp bi05ICovCi0jZW5kaWYgLyogTEFUSU4yICovCi0KLS8qIFRyYW5zZmVyIGNoYXJhY3Rlci1zZXQg aW5mbyAqLwotCi1zdHJ1Y3QgY3NpbmZvIHRjc2luZm9bXSA9IHsKLS8qICBOYW1lICAgICAgICAg ICAgICBzaXplIGNvZGUgICAgICBkZXNpZ25hdG9yIGFscGhhYmV0IGtleXdvcmQgICAgICAgICAg ICAqLwotICAiVFJBTlNQQVJFTlQiLCAgICAgICAyNTYsVENfVFJBTlNQLCAiIiwgICAgICBBTF9V TkssICAidHJhbnNwYXJlbnQiLCAgLyogMCAqLwotICAiQVNDSUkiLCAgICAgICAgICAgICAxMjgs VENfVVNBU0NJSSwiIiwgICAgICBBTF9ST01BTiwiYXNjaWkiLCAgICAgICAgLyogMSAqLwotICAi SVNPIDg4NTktMSBMYXRpbi0xIiwyNTYsVENfMUxBVElOLCAiSTYvMTAwIixBTF9ST01BTiwibGF0 aW4xLWlzbyIsICAgLyogMiAqLwotI2lmZGVmIExBVElOMgotICAiSVNPIDg4NTktMiBMYXRpbi0y IiwyNTYsVENfMkxBVElOLCAiSTYvMTAxIixBTF9ST01BTiwibGF0aW4yLWlzbyIsICAgLyogMyAq LwotI2VuZGlmIC8qIExBVElOMiAqLwotI2lmZGVmIENZUklMTElDCi0gIC8qIDQgKi8KLSAgIklT TyA4ODU5LTUgTGF0aW4vQ3lyaWxsaWMiLDI1NixUQ19DWVJJTEwsIkk2LzE0NCIsQUxfQ1lSSUws ImN5cmlsbGljLWlzbyIsCi0jZW5kaWYgLyogQ1lSSUxMSUMgKi8KLSNpZmRlZiBLQU5KSQotICAi SmFwYW5lc2UgRVVDIiwxNjM4NCxUQ19KRVVDLCAgIkkxNC84Ny8xMyIsIEFMX0pBUEFOLCAiZXVj LWpwIiwgICAgICAgLyogNSAqLwotI2VuZGlmIC8qIEtBTkpJICovCi0jaWZkZWYgSEVCUkVXCi0g IC8qIDYgKi8KLSAgIklTTyA4ODU5LTggTGF0aW4vSGVicmV3IiwyNTYsVENfSEVCUkVXLCJJNi8x MzgiLEFMX0hFQlJFVywiaGVicmV3LWlzbyIsCi0jZW5kaWYgLyogSEVCUkVXICovCi0jaWZkZWYg R1JFRUsKLSAgIklTTyA4ODU5LTcgTGF0aW4vR3JlZWsiLDI1NixUQ19HUkVFSywiSTYvMTI2IixB TF9HUkVFSywiZ3JlZWstaXNvIiwgLyogIDcgKi8KLSNlbmRpZiAvKiBHUkVFSyAqLwotICAiSVNP IDg4NTktMTUgTGF0aW4tOSIsMjU2LFRDXzlMQVRJTiwiSTYvMjAzIixBTF9ST01BTiwibGF0aW45 LWlzbyIsICAvKiAgOCAqLwotICAiSVNPIDEwNjQ2IC8gVW5pY29kZSBVQ1MtMiIsNjQwMDAsVENf VUNTMiwiSTE2MiIsQUxfVU5JViwidWNzMiIsICAgICAvKiAgOSAqLwotICAiSVNPIDEwNjQ2IC8g VW5pY29kZSBVVEYtOCIsNjQwMDAsVENfVVRGOCwiSTE5MCIsQUxfVU5JViwidXRmOCIsICAgICAv KiAxMCAqLwotICAiIiwwLDAsIiIsMCwiIgotfTsKLWludCBudGNzZXRzID0gKHNpemVvZih0Y3Np bmZvKSAvIHNpemVvZihzdHJ1Y3QgY3NpbmZvKSkgLSAxOwotCi1zdHJ1Y3Qga2V5dGFiIHRjc3Rh YltdID0gewkJLyogS2V5d29yZCB0YWJsZSBmb3IgKi8KLSAgICAiYXNjaWkiLCAgICAgICAgIFRD X1VTQVNDSUksIDAsCS8qIFNFVCBUUkFOU0ZFUiBDSEFSQUNURVItU0VUICovCi0jaWZkZWYgQ1lS SUxMSUMKLSAgICAiY3lyaWxsaWMtaXNvIiwgIFRDX0NZUklMTCwgIDAsCi0jZW5kaWYgLyogQ1lS SUxMSUMgKi8KLSNpZmRlZiBHUkVFSwotICAgICJlbG90OTI4LWdyZWVrIiwgVENfR1JFRUssICAg Q01fSU5WLAotI2VuZGlmIC8qIEdSRUVLICovCi0jaWZkZWYgS0FOSkkKLSAgICAiZXVjLWpwIiwg ICAgICAgIFRDX0pFVUMsICAgIDAsCi0jZW5kaWYgLyogS0FOSkkgKi8KLSNpZmRlZiBHUkVFSwot ICAgICJncmVlay1pc28iLCAgICAgVENfR1JFRUssICAgMCwKLSNlbmRpZiAvKiBHUkVFSyAqLwot I2lmZGVmIEhFQlJFVwotICAgICJoZWJyZXctaXNvIiwgICAgVENfSEVCUkVXLCAgMCwKLSNlbmRp ZiAvKiBIRUJSRVcgKi8KLQotI2lmZGVmIFVOSUNPREUKLSAgICAiaXNvLTEwNjQ2LXVjcy0yIiwg VENfVUNTMiwgICAgQ01fSU5WLCAvKiBJU08gMTA2NDYgLyBVbmljb2RlIFVDUy0yICovCi0jZW5k aWYgLyogVU5JQ09ERSAqLwotICAgICJpc28tODg1OS0xIiwgICAgVENfMUxBVElOLCAgQ01fSU5W LCAvKiBJU08gTGF0aW4gQWxwaGFiZXQgMSAqLwotICAgICJpc28tODg1OS0xNSIsICAgVENfOUxB VElOLCAgQ01fSU5WLCAvKiBJU08gTGF0aW4gQWxwaGFiZXQgOSAoeWVzKSAqLwotICAgICJpc28t ODg1OS0yIiwgICAgVENfMkxBVElOLCAgQ01fSU5WLCAvKiBJU08gTGF0aW4gQWxwaGFiZXQgMiAq LwotI2lmZGVmIENZUklMTElDCi0gICAgImlzby04ODU5LTUiLCAgICBUQ19DWVJJTEwsICBDTV9J TlYsIC8qIElTTyBMYXRpbi9DeXJpbGxpYyBBbHBoYWJldCAqLwotI2VuZGlmIC8qIENZUklMTElD ICovCi0jaWZkZWYgR1JFRUsKLSAgICAiaXNvLTg4NTktNyIsICAgIFRDX0dSRUVLLCAgIENNX0lO ViwgLyogSVNPIDg4NTktNyBMYXRpbi9HcmVlayAqLwotI2VuZGlmIC8qIEdSRUVLICovCi0jaWZk ZWYgSEVCUkVXCi0gICAgImlzby04ODU5LTgiLCAgICBUQ19IRUJSRVcsICBDTV9JTlYsIC8qIElT TyBMYXRpbi9IZWJyZXcgKi8KLSNlbmRpZiAvKiBIRUJSRVcgKi8KLQotI2lmZGVmIEtBTkpJCi0g ICAgImphcGFuZXNlLWV1YyIsICBUQ19KRVVDLCAgICBDTV9JTlYsCi0jZW5kaWYgLyogS0FOSkkg Ki8KLSAgICAibCIsICAgICAgICAgICAgIFRDXzFMQVRJTiwgIENNX0FCUnxDTV9JTlYsCi0gICAg ImxhIiwgICAgICAgICAgICBUQ18xTEFUSU4sICBDTV9BQlJ8Q01fSU5WLAotICAgICJsYXQiLCAg ICAgICAgICAgVENfMUxBVElOLCAgQ01fQUJSfENNX0lOViwKLSAgICAibGF0aSIsICAgICAgICAg IFRDXzFMQVRJTiwgIENNX0FCUnxDTV9JTlYsCi0gICAgImxhdGluIiwgICAgICAgICBUQ18xTEFU SU4sICBDTV9BQlJ8Q01fSU5WLAotICAgICJsYXRpbjEtaXNvIiwgICAgVENfMUxBVElOLCAgMCwK LSNpZmRlZiBMQVRJTjIKLSAgICAibGF0aW4yLWlzbyIsICAgIFRDXzJMQVRJTiwgIDAsCi0jZW5k aWYgLyogTEFUSU4yICovCi0gICAgImxhdGluOS1pc28iLCAgICBUQ185TEFUSU4sICAwLAotICAg ICJ0cmFuc3BhcmVudCIsICAgVENfVFJBTlNQLCAgMCwKLSNpZmRlZiBVTklDT0RFCi0gICAgInVj czIiLCAgICAgICAgICBUQ19VQ1MyLCAgICAwLAotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSAgICAi dXMtYXNjaWkiLCAgICAgIFRDX1VTQVNDSUksIENNX0lOViwKLSAgICAidXNhc2NpaSIsICAgICAg IFRDX1VTQVNDSUksIENNX0lOViwKLSNpZmRlZiBVTklDT0RFCi0gICAgInV0Zi04IiwgICAgICAg ICBUQ19VVEY4LCAgICBDTV9JTlYsCi0gICAgInV0ZjgiLCAgICAgICAgICBUQ19VVEY4LCAgICAw LAotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSAgICAiIiwgMCwgMAotfTsKLWludCBudGNzID0gKHNp emVvZih0Y3N0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0KLS8qIEZpbGUgY2hh cmFjdGVyIHNldCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUsIGluZGV4ZWQgYnkgY2hhcmFjdGVyIHNl dCBjb2RlLCAqLwotLyogYXMgZGVmaW5lZCBpbiBja3V4bGEuaC4gIFRoaXMgdGFibGUgbXVzdCBi ZSBpbiBvcmRlciBvZiBmaWxlIGNoYXJhY3RlciAqLwotLyogc2V0IG51bWJlciEgKi8KLQotc3Ry dWN0IGNzaW5mbyBmY3NpbmZvW10gPSB7IC8qIEZpbGUgY2hhcmFjdGVyIHNldCBpbmZvcm1hdGlv bi4uLiAqLwotICAvKiBEZXNjcmlwdGl2ZSBOYW1lICAgICAgICAgICAgICBTaXplICBEZXNpZ25h dG9yICovCi0gICJVUyBBU0NJSSIsICAgICAgICAgICAgICAgICAgICAgMTI4LCBGQ19VU0FTQ0lJ LCBOVUxMLCBBTF9ST01BTiwgImFzY2lpIiwKLSAgIkJyaXRpc2gvVUsgSVNPLTY0NiIsICAgICAg ICAgICAxMjgsIEZDX1VLQVNDSUksIE5VTEwsIEFMX1JPTUFOLCAiYnJpdGlzaCIsCi0gICJEdXRj aCBJU08tNjQ2IiwgICAgICAgICAgICAgICAgMTI4LCBGQ19EVUFTQ0lJLCBOVUxMLCBBTF9ST01B TiwgImR1dGNoIiwKLSAgIkZpbm5pc2ggSVNPLTY0NiIsICAgICAgICAgICAgICAxMjgsIEZDX0ZJ QVNDSUksIE5VTEwsIEFMX1JPTUFOLCAiZmlubmlzaCIsCi0gICJGcmVuY2ggSVNPLTY0NiIsICAg ICAgICAgICAgICAgMTI4LCBGQ19GUkFTQ0lJLCBOVUxMLCBBTF9ST01BTiwgImZyZW5jaCIsCi0g ICJDYW5hZGlhbi1GcmVuY2ggTlJDIiwgMTI4LCBGQ19GQ0FTQ0lJLCBOVUxMLCBBTF9ST01BTiwg ImNhbmFkaWFuLWZyZW5jaCIsCi0gICJHZXJtYW4gSVNPLTY0NiIsICAgICAgICAgICAgICAgMTI4 LCBGQ19HRUFTQ0lJLCBOVUxMLCBBTF9ST01BTiwgImdlcm1hbiIsCi0gICJIdW5nYXJpYW4gSVNP LTY0NiIsICAgICAgICAgICAgMTI4LCBGQ19IVUFTQ0lJLCBOVUxMLCBBTF9ST01BTiwgImh1bmdh cmlhbiIsCi0gICJJdGFsaWFuIElTTy02NDYiLCAgICAgICAgICAgICAgMTI4LCBGQ19JVEFTQ0lJ LCBOVUxMLCBBTF9ST01BTiwgIml0YWxpYW4iLAotICAiTm9yd2VnaWFuL0RhbmlzaCBJU08tNjQ2 IiwxMjgsRkNfTk9BU0NJSSxOVUxMLEFMX1JPTUFOLCJub3J3ZWdpYW4vZGFuaXNoIiwKLSAgIlBv cnR1Z3Vlc2UgSVNPLTY0NiIsICAgICAgICAgICAxMjgsIEZDX1BPQVNDSUksIE5VTEwsIEFMX1JP TUFOLCJwb3J0dWd1ZXNlIiwKLSAgIlNwYW5pc2ggSVNPLTY0NiIsICAgICAgICAgICAgICAxMjgs IEZDX1NQQVNDSUksIE5VTEwsIEFMX1JPTUFOLCAic3BhbmlzaCIsCi0gICJTd2VkaXNoIElTTy02 NDYiLCAgICAgICAgICAgICAgMTI4LCBGQ19TV0FTQ0lJLCBOVUxMLCBBTF9ST01BTiwgInN3ZWRp c2giLAotICAiU3dpc3MgTlJDIiwgICAgICAgICAgICAgICAgICAgIDEyOCwgRkNfQ0hBU0NJSSwg TlVMTCwgQUxfUk9NQU4sICJzd2lzcyIsCi0gICJJU08gODg1OS0xIExhdGluLTEiLCAgICAgICAg ICAgMjU2LCBGQ18xTEFUSU4sICBOVUxMLCBBTF9ST01BTiwibGF0aW4xLWlzbyIsCi0gICJJU08g ODg1OS0yIExhdGluLTIiLCAgICAgICAgICAgMjU2LCBGQ18yTEFUSU4sICBOVUxMLCBBTF9ST01B TiwibGF0aW4yLWlzbyIsCi0gICJERUMgTXVsdGluYXRpb25hbCIsIDI1NiwgIEZDX0RFQ01DUywg TlVMTCxBTF9ST01BTiwiZGVjLW11bHRpbmF0aW9uYWwiLAotICAiTmVYVCBNdWx0aW5hdGlvbmFs IiwgMjU2LCBGQ19ORVhULCAgIE5VTEwsQUxfUk9NQU4sIm5leHQtbXVsdGluYXRpb25hbCIsCi0g ICJQQyBDb2RlIFBhZ2UgNDM3IiwgICAgICAgICAgICAyNTYsIEZDX0NQNDM3LCAgIE5VTEwsIEFM X1JPTUFOLCJjcDQzNyIsCi0gICJQQyBDb2RlIFBhZ2UgODUwIiwgICAgICAgICAgICAyNTYsIEZD X0NQODUwLCAgIE5VTEwsIEFMX1JPTUFOLCJjcDg1MCIsCi0gICJQQyBDb2RlIFBhZ2UgODUyIiwg ICAgICAgICAgICAyNTYsIEZDX0NQODUyLCAgIE5VTEwsIEFMX1JPTUFOLCJjcDg1MiIsCi0gICJB cHBsZSBNYWNpbnRvc2ggTGF0aW4iLCAyNTYsIEZDX0FQUFFELCAgIE5VTEwsIEFMX1JPTUFOLCJt YWNpbnRvc2gtbGF0aW4iLAotICAiRGF0YSBHZW5lcmFsIEludGVybmF0aW9uYWwiLDI1NixGQ19E R01DUyxOVUxMLEFMX1JPTUFOLCJkZy1pbnRlcm5hdGlvbmFsIiwKLSAgIkhld2xldHQgUGFja2Fy ZCBSb21hbjgiLCAgICAyNTYsIEZDX0hQUjgsICAgIE5VTEwsIEFMX1JPTUFOLCAiaHAtcm9tYW44 IiwKLSAgIklTTyA4ODU5LTUgTGF0aW4vQ3lyaWxsaWMiLCAyNTYsIEZDX0NZUklMTCwgIE5VTEws IEFMX0NZUklMLCJjeXJpbGxpYy1pc28iLAotICAiQ1A4NjYgQ3lyaWxsaWMiLAkgICAgICAgMjU2 LCBGQ19DUDg2NiwgICBOVUxMLCBBTF9DWVJJTCwiY3A4NjYiLAotICAiU2hvcnQgS09JIiwgICAg ICAgICAgICAgICAgIDEyOCwgRkNfS09JNywgICAgTlVMTCwgQUxfQ1lSSUwsInNob3J0LWtvaSIs Ci0gICJPbGQgS09JLTggQ3lyaWxsaWMiLCAgICAgICAgMjU2LCBGQ19LT0k4LCAgICBOVUxMLCBB TF9DWVJJTCwia29pOC1jeXJpbGxpYyIsCi0gICJKYXBhbmVzZSBKSVM3IiwJICAxNjM4NCwgRkNf SklTNywgICAgTlVMTCwgQUxfSkFQQU4sICJqaXM3LWthbmppIiwKLSAgIkphcGFuZXNlIFNoaWZ0 IEpJUyIsCSAgMTYzODQsIEZDX1NISklTLCAgIE5VTEwsIEFMX0pBUEFOLCAic2hpZnQtamlzLWth bmppIiwKLSAgIkphcGFuZXNlIEVVQyIsCSAgMTYzODQsIEZDX0pFVUMsICAgIE5VTEwsIEFMX0pB UEFOLCAiZXVjLWpwIiwKLSAgIkphcGFuZXNlIERFQyBLYW5qaSIsCSAgMTYzODQsIEZDX0pERUMs ICAgIE5VTEwsIEFMX0pBUEFOLCAiZGVjLWthbmppIiwKLSAgIkhlYnJldy03IERFQyIsICAgICAg ICAgICAxMjgsIEZDX0hFNywgICAgIE5VTEwsIEFMX0hFQlJFVywgImhlYnJldy03IiwKLSAgIklT TyA4ODU5LTggTGF0aW4vSGVicmV3IiwyNTYsIEZDX0hFQlJFVywgIE5VTEwsIEFMX0hFQlJFVywg ImhlYnJldy1pc28iLAotICAiQ1A4NjIgSGVicmV3IiwgICAgICAgICAgIDI1NiwgRkNfQ1A4NjIs ICAgTlVMTCwgQUxfSEVCUkVXLCAiY3A4NjItaGVicmV3IiwKLSAgIkVMT1QgOTI3IEdyZWVrIiwg ICAgICAgICAxMjgsIEZDX0VMT1QsICAgIE5VTEwsIEFMX0dSRUVLLCAiZWxvdDkyNy1ncmVlayIs Ci0gICJJU08gODg1OS03IExhdGluL0dyZWVrIiwgMjU2LCBGQ19HUkVFSywgICBOVUxMLCBBTF9H UkVFSywgImdyZWVrLWlzbyIsCi0gICJDUDg2OSBHcmVlayIsICAgICAgICAgICAgMjU2LCBGQ19D UDg2OSwgICBOVUxMLCBBTF9HUkVFSywgImNwODY5LWdyZWVrIiwKLSAgIklTTyA4ODU5LTE1IExh dGluLTkiLCAgICAyNTYsIEZDXzlMQVRJTiwgIE5VTEwsIEFMX1JPTUFOLCAibGF0aW45LWlzbyIs Ci0gICJQQyBDb2RlIFBhZ2UgODU4IiwgICAgICAgMjU2LCBGQ19DUDg1MCwgICBOVUxMLCBBTF9S T01BTiwgImNwODU4IiwKLSAgIlBDIENvZGUgUGFnZSA4NTUiLCAgICAgICAyNTYsIEZDX0NQODU1 LCAgIE5VTEwsIEFMX0NZUklMLCAiY3A4NTUtY3lyaWxsaWMiLAotICAiV2luZG93cyBDb2RlIFBh Z2UgMTI1MSIsIDI1NiwgRkNfQ1AxMjUxLCAgTlVMTCwgQUxfQ1lSSUwsICJjcDEyNTEtY3lyaWxs aWMiLAotICAiQnVsZ2FyaWFuIFBDIENvZGUgUGFnZSIsIDI1NiwgRkNfQlVMR0FSLCAgTlVMTCwg QUxfQ1lSSUwsICJidWxnYXJpYS1wYyIsCi0gICJXaW5kb3dzIENvZGUgUGFnZSAxMjUwIiwgMjU2 LCBGQ19DUDEyNTAsICBOVUxMLCBBTF9ST01BTiwgImNwMTI1MCIsCi0gICJQb2xpc2ggTWF6b3Zp YSBQQyBDb2RlIFBhZ2UiLCAyNTYsIEZDX01BWk9WSUEsIE5VTEwsIEFMX1JPTUFOLCAibWF6b3Zp YS1wYyIsCi0gICJJU08gMTA2NDYgLyBVbmljb2RlIFVDUy0yIiwgNjQwMDAsIEZDX1VDUzIsIE5V TEwsIEFMX1VOSVYsICJ1Y3MyIiwKLSAgIklTTyAxMDY0NiAvIFVuaWNvZGUgVVRGLTgiLCA2NDAw MCwgRkNfVUNTMiwgTlVMTCwgQUxfVU5JViwgInV0ZjgiLAotICAiS09JOC1SIFJ1c3NpYW4rQm94 ZHJhd2luZyIsMjU2LCAgRkNfS09JOFIsIE5VTEwsIEFMX0NZUklMLCJrb2k4ciIsCi0gICJLT0k4 LVUgVWtyYWluaWFuK0JveGRyYXdpbmciLDI1NixGQ19LT0k4VSwgTlVMTCwgQUxfQ1lSSUwsImtv aTh1IiwKLSAgIldpbmRvd3MgQ29kZSBQYWdlIDEyNTIiLCAyNTYsIEZDX0NQMTI1MiwgIE5VTEws IEFMX1JPTUFOLCAiY3AxMjUyIiwKLSAgIiIsMCwwLE5VTEwsMCxOVUxMCi19OwotCi0vKiBMb2Nh bCBmaWxlIGNoYXJhY3RlciBzZXRzICovCi0vKiBJbmNsdWRlcyA3LWJpdCBOYXRpb25hbCBSZXBs YWNlbWVudCBDaGFyYWN0ZXIgU2V0cyBvZiBJU08gNjQ2ICovCi0vKiBQbHVzIElTTyBMYXRpbi0x LCBERUMgTXVsdGluYXRpb25hbCBDaGFyYWN0ZXIgU2V0IChNQ1MpLCBOZVhUIGNoYXIgc2V0LCAq LwotLyogVmFyaW91cyBQQyBhbmQgV2luZG93cyBjb2RlIHBhZ2VzLCBldGMuICovCi0vKiBBcyBv ZiBDLUtlcm1pdCA5LjAgTUlNRSBuYW1lcyBhcmUgaW5jbHVkZWQgYXMgaW52aXNpYmxlIHN5bm9t eW1zIGZvciAqLwotLyogdGhvc2UgY2hhcmFjdGVyIHNldHMgdGhhdCBoYXZlIE1JTUUgbmFtZXMu ICovCi0KLXN0cnVjdCBrZXl0YWIgZmNzdGFiW10gPSB7IC8qIEtleXdvcmQgdGFibGUgZm9yICdz ZXQgZmlsZSBjaGFyYWN0ZXItc2V0JyAqLwotLyoKLSAgSU1QT1JUQU5UOiBUaGlzIHRhYmxlIGlz IHJlcGxpY2F0ZWQgYmVsb3cgYXMgdHRjc3RhYiAodGVybWluYWwgY2hhcmFjdGVyCi0gIHNldCB0 YWJsZSkuICBUaGUgb25seSBkaWZmZXJlbmNlcyBhcmUgdGhlIGFkZGl0aW9uIG9mIFRSQU5TUEFS RU5UCi0gIGFuZCB0aGUgcmVtb3ZhbCBvZiB0aGUgS2Fuamkgc2V0cywgd2hpY2ggYXJlIG5vdCBz dXBwb3J0ZWQgZm9yIHRlcm1pbmFsCi0gIGVtdWxhdGlvbi4gIElmIHlvdSBtYWtlIGNoYW5nZXMg dG8gdGhpcyB0YWJsZSwgYWxzbyBjaGFuZ2UgdHRjc3RhYi4KLSovCi0KLS8qIEtleXdvcmQgICAg ICAgICAgICAgICBWYWx1ZSAgICAgICBGbGFncyAqLwotICAgICJhcHBsZS1xdWlja2RyYXciLCAg ICBGQ19BUFBRRCwgICBDTV9JTlYsIC8qIEFwcGxlIFF1aWNrZHJhdyAqLwotICAgICJhc2NpaSIs ICAgICAgICAgICAgICBGQ19VU0FTQ0lJLCAwLCAvKiBBU0NJSSAqLwotICAgICJicml0aXNoIiwg ICAgICAgICAgICBGQ19VS0FTQ0lJLCAwLCAvKiBCcml0aXNoIE5SQyAqLwotICAgICJidWxnYXJp YS1wYyIsICAgICAgICBGQ19CVUxHQVIsICAwLCAvKiBCdWxnYXJpYW4gUEMgQ29kZSBQYWdlICov Ci0gICAgImNhbmFkaWFuLWZyZW5jaCIsICAgIEZDX0ZDQVNDSUksIDAsIC8qIEZyZW5jaCBDYW5h ZGlhbiBOUkMgKi8KLSNpZmRlZiBMQVRJTjIKLSAgICAiY3AxMjUwIiwgICAgICAgICAgICAgRkNf Q1AxMjUwLCAgMCwgLyogV2luZG93cyBDUCAxMjUwICovCi0jZW5kaWYgLyogTEFUSU4yICovCi0j aWZkZWYgQ1lSSUxMSUMKLSAgICAiY3AxMjUxLWN5cmlsbGljIiwgICAgRkNfQ1AxMjUxLCAgMCwg LyogV2luZG93cyBDUCAxMjUxICovCi0jZW5kaWYgLyogQ1lSSUxMSUMgKi8KLSAgICAiY3AxMjUy IiwgICAgICAgICAgICAgRkNfQ1AxMjUyLCAgMCwgLyogV2luZG93cyBDUCAxMjUyICovCi0gICAg ImNwNDM3IiwgICAgICAgICAgICAgIEZDX0NQNDM3LCAgIDAsIC8qIFBDIENQNDM3ICovCi0gICAg ImNwODUwIiwgICAgICAgICAgICAgIEZDX0NQODUwLCAgIDAsIC8qIFBDIENQODUwICovCi0jaWZk ZWYgTEFUSU4yCi0gICAgImNwODUyIiwgICAgICAgICAgICAgIEZDX0NQODUyLCAgIDAsIC8qIFBD IENQODUyICovCi0jZW5kaWYgLyogTEFUSU4yICovCi0jaWZkZWYgQ1lSSUxMSUMKLSAgICAiY3A4 NTUtY3lyaWxsaWMiLCAgICAgRkNfQ1A4NTUsICAgMCwgLyogUEMgQ1A4NTUgKi8KLSNlbmRpZiAv KiBDWVJJTExJQyAqLwotICAgICJjcDg1OCIsICAgICAgICAgICAgICBGQ19DUDg1OCwgICAwLCAv KiBQQyBDUDg1OCAqLwotI2lmZGVmIEhFQlJFVwotICAgICJjcDg2Mi1oZWJyZXciLCAgICAgICBG Q19DUDg2MiwgICAwLCAvKiBQQyBDUDg2MiAqLwotI2VuZGlmIC8qIEhFQlJFVyAqLwotI2lmZGVm IENZUklMTElDCi0gICAgImNwODY2LWN5cmlsbGljIiwgICAgIEZDX0NQODY2LCAgIDAsIC8qIENQ ODY2IEN5cmlsbGljICovCi0jZW5kaWYgLyogQ1lSSUxMSUMgKi8KLSNpZmRlZiBHUkVFSwotICAg ICJjcDg2OS1ncmVlayIsICAgICAgICBGQ19DUDg2OSwgICAwLCAvKiBDUDg2OSBHcmVlayAqLwot I2VuZGlmIC8qIEdSRUVLICovCi0jaWZkZWYgQ1lSSUxMSUMKLSAgICAiY3lyaWxsaWMtaXNvIiwg ICAgICAgRkNfQ1lSSUxMLCAgMCwgLyogSVNPIExhdGluL0N5cmlsbGljIEFscGhhYmV0ICovCi0j ZW5kaWYgLyogQ1lSSUxMSUMgKi8KLSAgICAiZGFuaXNoIiwgICAgICAgICAgICAgRkNfTk9BU0NJ SSwgMCwgLyogTm9yd2VnaWFuIGFuZCBEYW5pc2ggTlJDICovCi0jaWZkZWYgS0FOSkkKLSAgICAi ZGVjLWthbmppIiwgICAgICAgICAgRkNfSkRFQywgICAgMCwgLyogSmFwYW5lc2UgREVDIEthbmpp ICovCi0jZW5kaWYgLyogS0FOSkkgKi8KLSAgICAiZGVjLW1jcyIsICAgICAgICAgICAgRkNfREVD TUNTLCAgQ01fSU5WLCAvKiBERUMgbXVsdGluYXRpb25hbCBjaGFyIHNldCAqLwotICAgICJkZWMt bXVsdGluYXRpb25hbCIsICBGQ19ERUNNQ1MsICAwLCAvKiBERUMgbXVsdGluYXRpb25hbCBjaGFy YWN0ZXIgc2V0ICovCi0gICAgImRnLWludGVybmF0aW9uYWwiLCAgIEZDX0RHTUNTLCAgIDAsIC8q IERhdGEgR2VuZXJhbCBtdWx0aW5hdGlvbmFsICovCi0gICAgImR1dGNoIiwgICAgICAgICAgICAg IEZDX0RVQVNDSUksIDAsIC8qIER1dGNoIE5SQyAqLwotI2lmZGVmIEdSRUVLCi0gICAgImVsb3Q5 MjctZ3JlZWsiLCAgICAgIEZDX0VMT1QsICAgIDAsIC8qIEVMT1QgOTI3IEdyZWVrICovCi0gICAg ImVsb3Q5MjgtZ3JlZWsiLCAgICAgIEZDX0dSRUVLLCAgIDAsIC8qIFNhbWUgYXMgSVNPIDg4NTkt NyBMYXRpbi9HcmVlayAqLwotI2VuZGlmIC8qIEdSRUVLICovCi0jaWZkZWYgS0FOSkkKLSAgICAi ZXVjLWpwIiwgICAgICAgICAgICAgRkNfSkVVQywgICAgMCwgLyogSmFwYW5lc2UgRVVDICovCi0j ZW5kaWYgLyogS0FOSkkgKi8KLSAgICAiZmlubmlzaCIsICAgICAgICAgICAgRkNfRklBU0NJSSwg MCwgLyogRmlubmlzaCBOUkMgKi8KLSAgICAiZnJlbmNoIiwgICAgICAgICAgICAgRkNfRlJBU0NJ SSwgMCwgLyogRnJlbmNoIE5SQyAqLwotICAgICJmci1jYW5hZGlhbiIsICAgICAgICBGQ19GQ0FT Q0lJLCBDTV9JTlYsIC8qIEZyZW5jaCBDYW5hZGlhbiBOUkMgKi8KLSAgICAiZ2VybWFuIiwgICAg ICAgICAgICAgRkNfR0VBU0NJSSwgMCwgLyogR2VybWFuIE5SQyAqLwotI2lmZGVmIEdSRUVLCi0g ICAgImdyZWVrLWlzbyIsICAgICAgICAgIEZDX0dSRUVLLCAgIDAsIC8qIElTTyA4ODU5LTcgTGF0 aW4vR3JlZWsgKi8KLSNlbmRpZiAvKiBHUkVFSyAqLwotI2lmZGVmIEhFQlJFVwotICAgICJoZSIs ICAgICAgICAgICAgICAgICBGQ19IRUJSRVcsICBDTV9BQlJ8Q01fSU5WLAotICAgICJoZWIiLCAg ICAgICAgICAgICAgICBGQ19IRUJSRVcsICBDTV9BQlJ8Q01fSU5WLAotICAgICJoZWJyIiwgICAg ICAgICAgICAgICBGQ19IRUJSRVcsICBDTV9BQlJ8Q01fSU5WLAotICAgICJoZWJyZSIsICAgICAg ICAgICAgICBGQ19IRUJSRVcsICBDTV9BQlJ8Q01fSU5WLAotICAgICJoZWJyZXciLCAgICAgICAg ICAgICBGQ19IRUJSRVcsICBDTV9BQlJ8Q01fSU5WLAotICAgICJoZWJyZXctNyIsICAgICAgICAg ICBGQ19IRTcsICAgICAwLCAvKiBERUMgNy1CaXQgSGVicmV3ICovCi0gICAgImhlYnJldy1pc28i LCAgICAgICAgIEZDX0hFQlJFVywgIDAsIC8qIElTTyBMYXRpbi9IZWJyZXcgKi8KLSNlbmRpZiAv KiBIRUJSRVcgKi8KLSAgICAiaHAtcm9tYW44IiwgICAgICAgICAgRkNfSFBSOCwgICAgMCwgLyog SGV3bGV0dCBQYWNrYXJkIFJvbWFuOCAqLwotICAgICJodW5nYXJpYW4iLCAgICAgICAgICBGQ19I VUFTQ0lJLCAwLCAvKiBIdW5nYXJpYW4gTlJDICovCi0KLSAgICAiaWJtNDM3IiwgICAgICAgICAg ICAgRkNfQ1A0MzcsICAgQ01fSU5WLCAvKiBQQyBDUDQzNyAqLwotICAgICJpYm04NTAiLCAgICAg ICAgICAgICBGQ19DUDg1MCwgICBDTV9JTlYsIC8qIFBDIENQODUwIChub3QgaW4gTUlNRSkgKi8K LSNpZmRlZiBMQVRJTjIKLSAgICAiaWJtODUyIiwgICAgICAgICAgICAgRkNfQ1A4NTIsICAgQ01f SU5WLCAvKiBQQyBDUDg1MiAqLwotI2VuZGlmIC8qIExBVElOMiAqLwotI2lmZGVmIENZUklMTElD Ci0gICAgImlibTg1NSIsICAgICAgICAgICAgIEZDX0NQODU1LCAgIENNX0lOViwgLyogUEMgQ1A4 NTUgKi8KLSNlbmRpZiAvKiBDWVJJTExJQyAqLwotICAgICJpYm04NTgiLCAgICAgICAgICAgICBG Q19DUDg1OCwgICBDTV9JTlYsIC8qIFBDIENQODU4IChub3QgaW4gTUlNRSkgKi8KLSNpZmRlZiBI RUJSRVcKLSAgICAiaWJtODYyIiwgICAgICAgICAgICAgRkNfQ1A4NjIsICAgQ01fSU5WLCAvKiBQ QyBDUDg2MiAobm90IGluIE1JTUUpICovCi0jZW5kaWYgLyogSEVCUkVXICovCi0jaWZkZWYgQ1lS SUxMSUMKLSAgICAiaWJtODY2IiwgICAgICAgICAgICAgRkNfQ1A4NjYsICAgQ01fSU5WLCAvKiBD UDg2NiBDeXJpbGxpYyAqLwotI2VuZGlmIC8qIENZUklMTElDICovCi0jaWZkZWYgR1JFRUsKLSAg ICAiaWJtODY5IiwgICAgICAgICAgICAgRkNfQ1A4NjksICAgQ01fSU5WLCAvKiBDUDg2OSBHcmVl ayAqLwotI2VuZGlmIC8qIEdSRUVLICovCi0KLSNpZmRlZiBVTklDT0RFCi0gICAgImlzby0xMDY0 Ni11Y3MtMiIsICAgIEZDX1VDUzIsICAgIENNX0lOViwgLyogSVNPIDEwNjQ2IC8gVW5pY29kZSBV Q1MtMiAqLwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSAgICAiaXNvLTg4NTktMSIsICAgICAgICAg RkNfMUxBVElOLCAgQ01fSU5WLCAvKiBJU08gTGF0aW4gQWxwaGFiZXQgMSAqLwotICAgICJpc28t ODg1OS0xNSIsICAgICAgICBGQ185TEFUSU4sICBDTV9JTlYsIC8qIElTTyBMYXRpbiBBbHBoYWJl dCA5ICh5ZXMpICovCi0gICAgImlzby04ODU5LTIiLCAgICAgICAgIEZDXzJMQVRJTiwgIENNX0lO ViwgLyogSVNPIExhdGluIEFscGhhYmV0IDIgKi8KLSNpZmRlZiBDWVJJTExJQwotICAgICJpc28t ODg1OS01IiwgICAgICAgICBGQ19DWVJJTEwsICBDTV9JTlYsIC8qIElTTyBMYXRpbi9DeXJpbGxp YyBBbHBoYWJldCAqLwotI2VuZGlmIC8qIENZUklMTElDICovCi0jaWZkZWYgR1JFRUsKLSAgICAi aXNvLTg4NTktNyIsICAgICAgICAgRkNfR1JFRUssICAgQ01fSU5WLCAvKiBJU08gODg1OS03IExh dGluL0dyZWVrICovCi0jZW5kaWYgLyogR1JFRUsgKi8KLSNpZmRlZiBIRUJSRVcKLSAgICAiaXNv LTg4NTktOCIsICAgICAgICAgRkNfSEVCUkVXLCAgQ01fSU5WLCAvKiBJU08gTGF0aW4vSGVicmV3 ICovCi0jZW5kaWYgLyogSEVCUkVXICovCi0jaWZkZWYgS0FOSkkKLSAgICAiaXNvMjAyMmpwLWth bmppIiwgICAgRkNfSklTNywgICAgQ01fSU5WLCAvKiBTeW5vbnltIGZvciBKSVMtNyAqLwotI2Vu ZGlmIC8qIEtBTkpJICovCi0KLSAgICAiaXNvNjQ2LWdiIiwgICAgICAgICAgRkNfVUtBU0NJSSwg Q01fSU5WLCAvKiBCcml0aXNoIE5SQyAqLwotICAgICJpc282NDYtY2EiLCAgICAgICAgICBGQ19G Q0FTQ0lJLCBDTV9JTlYsIC8qIEZyZW5jaCBDYW5hZGlhbiBOUkMgKi8KLSAgICAiaXNvNjQ2LWRl IiwgICAgICAgICAgRkNfR0VBU0NJSSwgQ01fSU5WLCAvKiBHZXJtYW4gTlJDICovCi0gICAgImlz bzY0Ni1kayIsICAgICAgICAgIEZDX05PQVNDSUksIENNX0lOViwgLyogTm9yd2VnaWFuIGFuZCBE YW5pc2ggTlJDICovCi0gICAgImlzbzY0Ni1lcyIsICAgICAgICAgIEZDX1NQQVNDSUksIENNX0lO ViwgLyogU3BhbmlzaCBOUkMgKi8KLSAgICAiaXNvNjQ2LWZpIiwgICAgICAgICAgRkNfRklBU0NJ SSwgQ01fSU5WLCAvKiBGaW5uaXNoIE5SQyAqLwotICAgICJpc282NDYtZnIiLCAgICAgICAgICBG Q19GUkFTQ0lJLCBDTV9JTlYsIC8qIEZyZW5jaCBOUkMgKi8KLSAgICAiaXNvNjQ2LWh1IiwgICAg ICAgICAgRkNfSFVBU0NJSSwgQ01fSU5WLCAvKiBIdW5nYXJpYW4gTlJDICovCi0gICAgImlzbzY0 Ni1pdCIsICAgICAgICAgIEZDX0lUQVNDSUksIENNX0lOViwgLyogSXRhbGlhbiBOUkMgKi8KLSAg ICAiaXNvNjQ2LW5vIiwgICAgICAgICAgRkNfTk9BU0NJSSwgQ01fSU5WLCAvKiBOb3J3ZWdpYW4g YW5kIERhbmlzaCBOUkMgKi8KLSAgICAiaXNvNjQ2LXBvIiwgICAgICAgICAgRkNfUE9BU0NJSSwg Q01fSU5WLCAvKiBQb3J0dWd1ZXNlIE5SQyAqLwotICAgICJpc282NDYtc2UiLCAgICAgICAgICBG Q19TV0FTQ0lJLCBDTV9JTlYsIC8qIFN3ZWRpc2ggTlJDICovCi0KLSAgICAiaXRhbGlhbiIsICAg ICAgICAgICAgRkNfSVRBU0NJSSwgQ01fSU5WLCAvKiBJdGFsaWFuIE5SQyAqLwotI2lmZGVmIEtB TkpJCi0gICAgImphcGFuZXNlLWV1YyIsICAgICAgIEZDX0pFVUMsICAgIENNX0lOViwgLyogSmFw YW5lc2UgRVVDICovCi0gICAgImppczcta2FuamkiLCAgICAgICAgIEZDX0pJUzcsICAgIDAsIC8q IEphcGFuZXNlIEpJUzcgN2JpdCBjb2RlICovCi0jZW5kaWYgLyogS0FOSkkgKi8KLSNpZmRlZiBD WVJJTExJQwotICAgICJrIiwgICAgICAgICAgICAgICAgICBGQ19LT0k4LCAgICBDTV9BQlJ8Q01f SU5WLAotICAgICJrbyIsICAgICAgICAgICAgICAgICBGQ19LT0k4LCAgICBDTV9BQlJ8Q01fSU5W LAotICAgICJrb2kiLCAgICAgICAgICAgICAgICBGQ19LT0k4LCAgICBDTV9BQlJ8Q01fSU5WLAot ICAgICJrb2k3IiwgICAgICAgICAgICAgICBGQ19LT0k3LCAgICAwLCAvKiBTaG9ydCBLT0kgQ3ly aWxsaWMgKi8KLSAgICAia29pOCIsICAgICAgICAgICAgICAgRkNfS09JOCwgICAgMCwgLyogT2xk IEtPSS04IEN5cmlsbGljICovCi0gICAgImtvaTgtZSIsICAgICAgICAgICAgIEZDX0tPSTgsICAg IENNX0lOViwgLyogT2xkIEtPSS04IEN5cmlsbGljICovCi0gICAgImtvaTgtY3lyaWxsaWMiLCAg ICAgIEZDX0tPSTgsICAgIENNX0lOViwKLSAgICAia29pOC1yIiwgICAgICAgICAgICAgRkNfS09J OFIsICAgQ01fSU5WLCAvKiBLT0k4LVIgUkZDMTQ4OSAqLwotICAgICJrb2k4LXUiLCAgICAgICAg ICAgICBGQ19LT0k4VSwgICBDTV9JTlYsIC8qIEtPSTgtVSBSRkMyMzE5ICovCi0gICAgImtvaThy IiwgICAgICAgICAgICAgIEZDX0tPSThSLCAgIDAsIC8qIEtPSTgtUiBSRkMxNDg5ICovCi0gICAg ImtvaTh1IiwgICAgICAgICAgICAgIEZDX0tPSThVLCAgIDAsIC8qIEtPSTgtVSBSRkMyMzE5ICov Ci0jZW5kaWYgLyogQ1lSSUxMSUMgKi8KLSAgICAibCIsICAgICAgICAgICAgICAgICAgRkNfMUxB VElOLCAgQ01fQUJSfENNX0lOViwKLSAgICAibGEiLCAgICAgICAgICAgICAgICAgRkNfMUxBVElO LCAgQ01fQUJSfENNX0lOViwKLSAgICAibGF0IiwgICAgICAgICAgICAgICAgRkNfMUxBVElOLCAg Q01fQUJSfENNX0lOViwKLSAgICAibGF0aSIsICAgICAgICAgICAgICAgRkNfMUxBVElOLCAgQ01f QUJSfENNX0lOViwKLSAgICAibGF0aW4iLCAgICAgICAgICAgICAgRkNfMUxBVElOLCAgQ01fQUJS fENNX0lOViwKLSAgICAibGF0aW4xLWlzbyIsICAgICAgICAgRkNfMUxBVElOLCAgMCwgLyogSVNP IExhdGluIEFscGhhYmV0IDEgKi8KLSNpZmRlZiBMQVRJTjIKLSAgICAibGF0aW4yLWlzbyIsICAg ICAgICAgRkNfMkxBVElOLCAgMCwgLyogSVNPIExhdGluIEFscGhhYmV0IDIgKi8KLSNlbmRpZiAv KiBMQVRJTjIgKi8KLSAgICAibGF0aW45LWlzbyIsICAgICAgICAgRkNfOUxBVElOLCAgMCwgLyog SVNPIExhdGluIEFscGhhYmV0IDkgKi8KLSAgICAibWFjaW50b3NoLWxhdGluIiwgICAgRkNfQVBQ UUQsICAgMCwgLyogIkV4dGVuZGVkIE1hYyBMYXRpbiIgKi8KLSNpZmRlZiBMQVRJTjIKLSAgICAi bWF6b3ZpYS1wYyIsICAgICAgICAgRkNfTUFaT1ZJQSwgMCwgLyogUG9saXNoIE1hem92aWEgUEMg Y29kZSBwYWdlICovCi0jZW5kaWYgLyogTEFUSU4yICovCi0gICAgIm5leHQtbXVsdGluYXRpb25h bCIsIEZDX05FWFQsICAgIDAsIC8qIE5lWFQgd29ya3N0YXRpb24gKi8KLSAgICAibm9yd2VnaWFu IiwgICAgICAgICAgRkNfTk9BU0NJSSwgMCwgLyogTm9yd2VnaWFuIGFuZCBEYW5pc2ggTlJDICov Ci0gICAgInBvcnR1Z3Vlc2UiLCAgICAgICAgIEZDX1BPQVNDSUksIDAsIC8qIFBvcnR1Z3Vlc2Ug TlJDICovCi0jaWZkZWYgS0FOSkkKLSAgICAic2hpZnQtamlzLWthbmppIiwgICAgRkNfU0hKSVMs ICAgMCwgLyogSmFwYW5lc2UgS2FuamkgU2hpZnQtSklTICovCi0gICAgInNoaWZ0X2ppcyIsICAg ICAgICAgIEZDX1NISklTLCAgIENNX0lOViwgLyogSmFwYW5lc2UgS2FuamkgU2hpZnQtSklTICov Ci0jZW5kaWYgLyogS0FOSkkgKi8KLSNpZmRlZiBDWVJJTExJQwotICAgICJzaG9ydC1rb2kiLCAg ICAgICAgICBGQ19LT0k3LCAgICAwLCAvKiBTaG9ydCBLT0kgQ3lyaWxsaWMgKi8KLSNlbmRpZiAv KiBDWVJJTExJQyAqLwotICAgICJzcGFuaXNoIiwgICAgICAgICAgICBGQ19TUEFTQ0lJLCAwLCAv KiBTcGFuaXNoIE5SQyAqLwotICAgICJzd2VkaXNoIiwgICAgICAgICAgICBGQ19TV0FTQ0lJLCAw LCAvKiBTd2VkaXNoIE5SQyAqLwotICAgICJzd2lzcyIsICAgICAgICAgICAgICBGQ19DSEFTQ0lJ LCAwLCAvKiBTd2lzcyBOUkMgKi8KLSNpZmRlZiBVTklDT0RFCi0gICAgInVjczIiLCAgICAgICAg ICAgICAgIEZDX1VDUzIsICAgIDAsIC8qIElTTyAxMDY0NiAvIFVuaWNvZGUgVUNTLTIgKi8KLSNl bmRpZiAvKiBVTklDT0RFICovCi0gICAgInVzLWFzY2lpIiwgICAgICAgICAgIEZDX1VTQVNDSUks IENNX0lOViwgLyogTUlNRSAqLwotICAgICJ1c2FzY2lpIiwgICAgICAgICAgICBGQ19VU0FTQ0lJ LCBDTV9JTlYsCi0jaWZkZWYgVU5JQ09ERQotICAgICJ1dGYtOCIsICAgICAgICAgICAgICBGQ19V VEY4LCAgICBDTV9JTlYsIC8qIElTTyAxMDY0NiAvIFVuaWNvZGUgVVRGLTggKi8KLSAgICAidXRm OCIsICAgICAgICAgICAgICAgRkNfVVRGOCwgICAgMCwgLyogSVNPIDEwNjQ2IC8gVW5pY29kZSBV VEYtOCAqLwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSNpZmRlZiBMQVRJTjIKLSAgICAid2luZG93 cy0xMjUwIiwgICAgICAgRkNfQ1AxMjUwLCAgQ01fSU5WLCAvKiBXaW5kb3dzIENQIDEyNTAgKi8K LSNlbmRpZiAvKiBMQVRJTjIgKi8KLSNpZmRlZiBDWVJJTExJQwotICAgICJ3aW5kb3dzLTEyNTEi LCAgICAgICBGQ19DUDEyNTEsICBDTV9JTlYsIC8qIFdpbmRvd3MgQ1AgMTI1MSAqLwotI2VuZGlm IC8qIENZUklMTElDICovCi0gICAgIndpbmRvd3MtMTI1MiIsICAgICAgIEZDX0NQMTI1MiwgIENN X0lOViwgLyogV2luZG93cyBDUCAxMjUyICovCi0gICAgIiIsIDAsIDAKLX07Ci1pbnQgbmZpbGMg PSAoc2l6ZW9mKGZjc3RhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKLQotc3RydWN0 IGtleXRhYiB0dGNzdGFiW10gPSB7IC8qIEtleXdvcmQgdGFibGUgZm9yIFNFVCBURVJNSU5BTCBD SEFSQUNURVItU0VUICovCi0vKgotICBJTVBPUlRBTlQ6IFRoaXMgdGFibGUgaXMgYSByZXBsaWNh IG9mIGZjc3RhYiwgaW1tZWRpYXRlbHkgYWJvdmUsIHdpdGggdGhlCi0gIGFkZGl0aW9uIG9mIFRS QU5TUEFSRU5UIGFuZCBkZWxldGlvbiBvZiB0aGUgSmFwYW5lc2Ugc2V0cy4gIElmIHlvdSBtYWtl Ci0gIGNoYW5nZXMgdG8gdGhpcyB0YWJsZSwgbWFrZSB0aGUgY29ycmVzcG9uZGluZyBjaGFuZ2Vz IHRvIGZjc3RhYi4KLSovCi0vKiBLZXl3b3JkICAgICAgICAgICAgIFZhbHVlICAgICAgIEZsYWdz ICovCi0gICAgImFwcGxlLXF1aWNrZHJhdyIsICAgIEZDX0FQUFFELCAgIENNX0lOViwgLyogQXBw bGUgUXVpY2tkcmF3ICovCi0gICAgImFzY2lpIiwgICAgICAgICAgICAgIEZDX1VTQVNDSUksIDAs IC8qIEFTQ0lJICovCi0gICAgImJyaXRpc2giLCAgICAgICAgICAgIEZDX1VLQVNDSUksIDAsIC8q IEJyaXRpc2ggTlJDICovCi0gICAgImJ1bGdhcmlhLXBjIiwgICAgICAgIEZDX0JVTEdBUiwgIDAs IC8qIEJ1bGdhcmlhbiBQQyBDb2RlIFBhZ2UgKi8KLSAgICAiY2FuYWRpYW4tZnJlbmNoIiwgICAg RkNfRkNBU0NJSSwgMCwgLyogRnJlbmNoIENhbmFkaWFuIE5SQyAqLwotI2lmZGVmIExBVElOMgot ICAgICJjcDEyNTAiLCAgICAgICAgICAgICBGQ19DUDEyNTAsICAwLCAvKiBXaW5kb3dzIENQIDEy NTAgKi8KLSNlbmRpZiAvKiBMQVRJTjIgKi8KLSNpZmRlZiBDWVJJTExJQwotICAgICJjcDEyNTEt Y3lyaWxsaWMiLCAgICBGQ19DUDEyNTEsICAwLCAvKiBXaW5kb3dzIENQIDEyNTEgKi8KLSNlbmRp ZiAvKiBDWVJJTExJQyAqLwotICAgICJjcDEyNTIiLCAgICAgICAgICAgICBGQ19DUDEyNTIsICAw LCAvKiBXaW5kb3dzIENQIDEyNTIgKi8KLSAgICAiY3A0MzciLCAgICAgICAgICAgICAgRkNfQ1A0 MzcsICAgMCwgLyogUEMgQ1A0MzcgKi8KLSAgICAiY3A4NTAiLCAgICAgICAgICAgICAgRkNfQ1A4 NTAsICAgMCwgLyogUEMgQ1A4NTAgKi8KLSNpZmRlZiBMQVRJTjIKLSAgICAiY3A4NTIiLCAgICAg ICAgICAgICAgRkNfQ1A4NTIsICAgMCwgLyogUEMgQ1A4NTIgKi8KLSNlbmRpZiAvKiBMQVRJTjIg Ki8KLSNpZmRlZiBDWVJJTExJQwotICAgICJjcDg1NS1jeXJpbGxpYyIsICAgICBGQ19DUDg1NSwg ICAwLCAvKiBQQyBDUDg1NSAqLwotI2VuZGlmIC8qIENZUklMTElDICovCi0gICAgImNwODU4Iiwg ICAgICAgICAgICAgIEZDX0NQODU4LCAgIDAsIC8qIFBDIENQODU4ICovCi0jaWZkZWYgSEVCUkVX Ci0gICAgImNwODYyLWhlYnJldyIsICAgICAgIEZDX0NQODYyLCAgIDAsIC8qIFBDIENQODYyICov Ci0jZW5kaWYgLyogSEVCUkVXICovCi0jaWZkZWYgQ1lSSUxMSUMKLSAgICAiY3A4NjYtY3lyaWxs aWMiLCAgICAgRkNfQ1A4NjYsICAgMCwgLyogQ1A4NjYgQ3lyaWxsaWMgKi8KLSNlbmRpZiAvKiBD WVJJTExJQyAqLwotI2lmZGVmIEdSRUVLCi0gICAgImNwODY5LWdyZWVrIiwgICAgICAgIEZDX0NQ ODY5LCAgIDAsIC8qIENQODY5IEdyZWVrICovCi0jZW5kaWYgLyogR1JFRUsgKi8KLSNpZmRlZiBD WVJJTExJQwotICAgICJjeXJpbGxpYy1pc28iLCAgICAgICBGQ19DWVJJTEwsICAwLCAvKiBJU08g TGF0aW4vQ3lyaWxsaWMgQWxwaGFiZXQgKi8KLSNlbmRpZiAvKiBDWVJJTExJQyAqLwotICAgICJk YW5pc2giLCAgICAgICAgICAgICBGQ19OT0FTQ0lJLCAwLCAvKiBOb3J3ZWdpYW4gYW5kIERhbmlz aCBOUkMgKi8KLSAgICAiZGVjLW1jcyIsICAgICAgICAgICAgRkNfREVDTUNTLCAgQ01fSU5WLCAv KiBERUMgbXVsdGluYXRpb25hbCBjaGFyIHNldCAqLwotICAgICJkZWMtbXVsdGluYXRpb25hbCIs ICBGQ19ERUNNQ1MsICAwLCAvKiBERUMgbXVsdGluYXRpb25hbCBjaGFyYWN0ZXIgc2V0ICovCi0g ICAgImRnLWludGVybmF0aW9uYWwiLCAgIEZDX0RHTUNTLCAgIDAsIC8qIERhdGEgR2VuZXJhbCBt dWx0aW5hdGlvbmFsICovCi0gICAgImR1dGNoIiwgICAgICAgICAgICAgIEZDX0RVQVNDSUksIDAs IC8qIER1dGNoIE5SQyAqLwotI2lmZGVmIEdSRUVLCi0gICAgImVsb3Q5MjctZ3JlZWsiLCAgICAg IEZDX0VMT1QsICAgIDAsIC8qIEVMT1QgOTI3IEdyZWVrICovCi0gICAgImVsb3Q5MjgtZ3JlZWsi LCAgICAgIEZDX0dSRUVLLCAgIDAsIC8qIFNhbWUgYXMgSVNPIDg4NTktNyBMYXRpbi9HcmVlayAq LwotI2VuZGlmIC8qIEdSRUVLICovCi0gICAgImZpbm5pc2giLCAgICAgICAgICAgIEZDX0ZJQVND SUksIDAsIC8qIEZpbm5pc2ggTlJDICovCi0gICAgImZyZW5jaCIsICAgICAgICAgICAgIEZDX0ZS QVNDSUksIDAsIC8qIEZyZW5jaCBOUkMgKi8KLSAgICAiZnItY2FuYWRpYW4iLCAgICAgICAgRkNf RkNBU0NJSSwgQ01fSU5WLCAvKiBGcmVuY2ggQ2FuYWRpYW4gTlJDICovCi0gICAgImdlcm1hbiIs ICAgICAgICAgICAgIEZDX0dFQVNDSUksIDAsIC8qIEdlcm1hbiBOUkMgKi8KLSNpZmRlZiBHUkVF SwotICAgICJncmVlay1pc28iLCAgICAgICAgICBGQ19HUkVFSywgICAwLCAvKiBJU08gODg1OS03 IExhdGluL0dyZWVrICovCi0jZW5kaWYgLyogR1JFRUsgKi8KLSNpZmRlZiBIRUJSRVcKLSAgICAi aGUiLCAgICAgICAgICAgICAgICAgRkNfSEVCUkVXLCAgQ01fQUJSfENNX0lOViwKLSAgICAiaGVi IiwgICAgICAgICAgICAgICAgRkNfSEVCUkVXLCAgQ01fQUJSfENNX0lOViwKLSAgICAiaGViciIs ICAgICAgICAgICAgICAgRkNfSEVCUkVXLCAgQ01fQUJSfENNX0lOViwKLSAgICAiaGVicmUiLCAg ICAgICAgICAgICAgRkNfSEVCUkVXLCAgQ01fQUJSfENNX0lOViwKLSAgICAiaGVicmV3IiwgICAg ICAgICAgICAgRkNfSEVCUkVXLCAgQ01fQUJSfENNX0lOViwKLSAgICAiaGVicmV3LTciLCAgICAg ICAgICAgRkNfSEU3LCAgICAgMCwgLyogREVDIDctQml0IEhlYnJldyAqLwotICAgICJoZWJyZXct aXNvIiwgICAgICAgICBGQ19IRUJSRVcsICAwLCAvKiBJU08gTGF0aW4vSGVicmV3ICovCi0jZW5k aWYgLyogSEVCUkVXICovCi0gICAgImhwLXJvbWFuOCIsICAgICAgICAgIEZDX0hQUjgsICAgIDAs IC8qIEhld2xldHQgUGFja2FyZCBSb21hbjggKi8KLSAgICAiaHVuZ2FyaWFuIiwgICAgICAgICAg RkNfSFVBU0NJSSwgMCwgLyogSHVuZ2FyaWFuIE5SQyAqLwotCi0gICAgImlibTQzNyIsICAgICAg ICAgICAgIEZDX0NQNDM3LCAgIENNX0lOViwgLyogUEMgQ1A0MzcgKi8KLSAgICAiaWJtODUwIiwg ICAgICAgICAgICAgRkNfQ1A4NTAsICAgQ01fSU5WLCAvKiBQQyBDUDg1MCAobm90IGluIE1JTUUp ICovCi0jaWZkZWYgTEFUSU4yCi0gICAgImlibTg1MiIsICAgICAgICAgICAgIEZDX0NQODUyLCAg IENNX0lOViwgLyogUEMgQ1A4NTIgKi8KLSNlbmRpZiAvKiBMQVRJTjIgKi8KLSNpZmRlZiBDWVJJ TExJQwotICAgICJpYm04NTUiLCAgICAgICAgICAgICBGQ19DUDg1NSwgICBDTV9JTlYsIC8qIFBD IENQODU1ICovCi0jZW5kaWYgLyogQ1lSSUxMSUMgKi8KLSAgICAiaWJtODU4IiwgICAgICAgICAg ICAgRkNfQ1A4NTgsICAgQ01fSU5WLCAvKiBQQyBDUDg1OCAobm90IGluIE1JTUUpICovCi0jaWZk ZWYgSEVCUkVXCi0gICAgImlibTg2MiIsICAgICAgICAgICAgIEZDX0NQODYyLCAgIENNX0lOViwg LyogUEMgQ1A4NjIgKG5vdCBpbiBNSU1FKSAqLwotI2VuZGlmIC8qIEhFQlJFVyAqLwotI2lmZGVm IENZUklMTElDCi0gICAgImlibTg2NiIsICAgICAgICAgICAgIEZDX0NQODY2LCAgIENNX0lOViwg LyogQ1A4NjYgQ3lyaWxsaWMgKi8KLSNlbmRpZiAvKiBDWVJJTExJQyAqLwotI2lmZGVmIEdSRUVL Ci0gICAgImlibTg2OSIsICAgICAgICAgICAgIEZDX0NQODY5LCAgIENNX0lOViwgLyogQ1A4Njkg R3JlZWsgKi8KLSNlbmRpZiAvKiBHUkVFSyAqLwotCi0jaWZkZWYgVU5JQ09ERQotICAgICJpc28t MTA2NDYtdWNzLTIiLCAgICBGQ19VQ1MyLCAgICBDTV9JTlYsIC8qIElTTyAxMDY0NiAvIFVuaWNv ZGUgVUNTLTIgKi8KLSNlbmRpZiAvKiBVTklDT0RFICovCi0gICAgImlzby04ODU5LTEiLCAgICAg ICAgIEZDXzFMQVRJTiwgIENNX0lOViwgLyogSVNPIExhdGluIEFscGhhYmV0IDEgKi8KLSAgICAi aXNvLTg4NTktMTUiLCAgICAgICAgRkNfOUxBVElOLCAgQ01fSU5WLCAvKiBJU08gTGF0aW4gQWxw aGFiZXQgOSAoeWVzKSAqLwotICAgICJpc28tODg1OS0yIiwgICAgICAgICBGQ18yTEFUSU4sICBD TV9JTlYsIC8qIElTTyBMYXRpbiBBbHBoYWJldCAyICovCi0jaWZkZWYgQ1lSSUxMSUMKLSAgICAi aXNvLTg4NTktNSIsICAgICAgICAgRkNfQ1lSSUxMLCAgQ01fSU5WLCAvKiBJU08gTGF0aW4vQ3ly aWxsaWMgQWxwaGFiZXQgKi8KLSNlbmRpZiAvKiBDWVJJTExJQyAqLwotI2lmZGVmIEdSRUVLCi0g ICAgImlzby04ODU5LTciLCAgICAgICAgIEZDX0dSRUVLLCAgIENNX0lOViwgLyogSVNPIDg4NTkt NyBMYXRpbi9HcmVlayAqLwotI2VuZGlmIC8qIEdSRUVLICovCi0jaWZkZWYgSEVCUkVXCi0gICAg Imlzby04ODU5LTgiLCAgICAgICAgIEZDX0hFQlJFVywgIENNX0lOViwgLyogSVNPIExhdGluL0hl YnJldyAqLwotI2VuZGlmIC8qIEhFQlJFVyAqLwotCi0gICAgImlzbzY0Ni1nYiIsICAgICAgICAg IEZDX1VLQVNDSUksIENNX0lOViwgLyogQnJpdGlzaCBOUkMgKi8KLSAgICAiaXNvNjQ2LWNhIiwg ICAgICAgICAgRkNfRkNBU0NJSSwgQ01fSU5WLCAvKiBGcmVuY2ggQ2FuYWRpYW4gTlJDICovCi0g ICAgImlzbzY0Ni1kZSIsICAgICAgICAgIEZDX0dFQVNDSUksIENNX0lOViwgLyogR2VybWFuIE5S QyAqLwotICAgICJpc282NDYtZGsiLCAgICAgICAgICBGQ19OT0FTQ0lJLCBDTV9JTlYsIC8qIE5v cndlZ2lhbiBhbmQgRGFuaXNoIE5SQyAqLwotICAgICJpc282NDYtZXMiLCAgICAgICAgICBGQ19T UEFTQ0lJLCBDTV9JTlYsIC8qIFNwYW5pc2ggTlJDICovCi0gICAgImlzbzY0Ni1maSIsICAgICAg ICAgIEZDX0ZJQVNDSUksIENNX0lOViwgLyogRmlubmlzaCBOUkMgKi8KLSAgICAiaXNvNjQ2LWZy IiwgICAgICAgICAgRkNfRlJBU0NJSSwgQ01fSU5WLCAvKiBGcmVuY2ggTlJDICovCi0gICAgImlz bzY0Ni1odSIsICAgICAgICAgIEZDX0hVQVNDSUksIENNX0lOViwgLyogSHVuZ2FyaWFuIE5SQyAq LwotICAgICJpc282NDYtaXQiLCAgICAgICAgICBGQ19JVEFTQ0lJLCBDTV9JTlYsIC8qIEl0YWxp YW4gTlJDICovCi0gICAgImlzbzY0Ni1ubyIsICAgICAgICAgIEZDX05PQVNDSUksIENNX0lOViwg LyogTm9yd2VnaWFuIGFuZCBEYW5pc2ggTlJDICovCi0gICAgImlzbzY0Ni1wbyIsICAgICAgICAg IEZDX1BPQVNDSUksIENNX0lOViwgLyogUG9ydHVndWVzZSBOUkMgKi8KLSAgICAiaXNvNjQ2LXNl IiwgICAgICAgICAgRkNfU1dBU0NJSSwgQ01fSU5WLCAvKiBTd2VkaXNoIE5SQyAqLwotCi0gICAg Iml0YWxpYW4iLCAgICAgICAgICAgIEZDX0lUQVNDSUksIENNX0lOViwgLyogSXRhbGlhbiBOUkMg Ki8KLQotI2lmZGVmIENZUklMTElDCi0gICAgImsiLCAgICAgICAgICAgICAgICAgIEZDX0tPSTgs ICAgIENNX0FCUnxDTV9JTlYsCi0gICAgImtvIiwgICAgICAgICAgICAgICAgIEZDX0tPSTgsICAg IENNX0FCUnxDTV9JTlYsCi0gICAgImtvaSIsICAgICAgICAgICAgICAgIEZDX0tPSTgsICAgIENN X0FCUnxDTV9JTlYsCi0gICAgImtvaTciLCAgICAgICAgICAgICAgIEZDX0tPSTcsICAgIDAsIC8q IFNob3J0IEtPSSBDeXJpbGxpYyAqLwotICAgICJrb2k4IiwgICAgICAgICAgICAgICBGQ19LT0k4 LCAgICAwLCAvKiBPbGQgS09JLTggQ3lyaWxsaWMgKi8KLSAgICAia29pOC1lIiwgICAgICAgICAg ICAgRkNfS09JOCwgICAgQ01fSU5WLCAvKiBPbGQgS09JLTggQ3lyaWxsaWMgKi8KLSAgICAia29p OC1jeXJpbGxpYyIsICAgICAgRkNfS09JOCwgICAgQ01fSU5WLAotICAgICJrb2k4LXIiLCAgICAg ICAgICAgICBGQ19LT0k4UiwgICBDTV9JTlYsIC8qIEtPSTgtUiBSRkMxNDg5ICovCi0gICAgImtv aTgtdSIsICAgICAgICAgICAgIEZDX0tPSThVLCAgIENNX0lOViwgLyogS09JOC1VIFJGQzIzMTkg Ki8KLSAgICAia29pOHIiLCAgICAgICAgICAgICAgRkNfS09JOFIsICAgMCwgLyogS09JOC1SIFJG QzE0ODkgKi8KLSAgICAia29pOHUiLCAgICAgICAgICAgICAgRkNfS09JOFUsICAgMCwgLyogS09J OC1VIFJGQzIzMTkgKi8KLSNlbmRpZiAvKiBDWVJJTExJQyAqLwotICAgICJsIiwgICAgICAgICAg ICAgICAgICBGQ18xTEFUSU4sICBDTV9BQlJ8Q01fSU5WLAotICAgICJsYSIsICAgICAgICAgICAg ICAgICBGQ18xTEFUSU4sICBDTV9BQlJ8Q01fSU5WLAotICAgICJsYXQiLCAgICAgICAgICAgICAg ICBGQ18xTEFUSU4sICBDTV9BQlJ8Q01fSU5WLAotICAgICJsYXRpIiwgICAgICAgICAgICAgICBG Q18xTEFUSU4sICBDTV9BQlJ8Q01fSU5WLAotICAgICJsYXRpbiIsICAgICAgICAgICAgICBGQ18x TEFUSU4sICBDTV9BQlJ8Q01fSU5WLAotICAgICJsYXRpbjEtaXNvIiwgICAgICAgICBGQ18xTEFU SU4sICAwLCAvKiBJU08gTGF0aW4gQWxwaGFiZXQgMSAqLwotI2lmZGVmIExBVElOMgotICAgICJs YXRpbjItaXNvIiwgICAgICAgICBGQ18yTEFUSU4sICAwLCAvKiBJU08gTGF0aW4gQWxwaGFiZXQg MiAqLwotI2VuZGlmIC8qIExBVElOMiAqLwotICAgICJsYXRpbjktaXNvIiwgICAgICAgICBGQ185 TEFUSU4sICAwLCAvKiBJU08gTGF0aW4gQWxwaGFiZXQgOSAqLwotICAgICJtYWNpbnRvc2gtbGF0 aW4iLCAgICBGQ19BUFBRRCwgICAwLCAvKiAiRXh0ZW5kZWQgTWFjIExhdGluIiAqLwotI2lmZGVm IExBVElOMgotICAgICJtYXpvdmlhLXBjIiwgICAgICAgICBGQ19NQVpPVklBLCAwLCAvKiBQb2xp c2ggTWF6b3ZpYSBQQyBjb2RlIHBhZ2UgKi8KLSNlbmRpZiAvKiBMQVRJTjIgKi8KLSAgICAibmV4 dC1tdWx0aW5hdGlvbmFsIiwgRkNfTkVYVCwgICAgMCwgLyogTmVYVCB3b3Jrc3RhdGlvbiAqLwot ICAgICJub3J3ZWdpYW4iLCAgICAgICAgICBGQ19OT0FTQ0lJLCAwLCAvKiBOb3J3ZWdpYW4gYW5k IERhbmlzaCBOUkMgKi8KLSAgICAicG9ydHVndWVzZSIsICAgICAgICAgRkNfUE9BU0NJSSwgMCwg LyogUG9ydHVndWVzZSBOUkMgKi8KLQotI2lmZGVmIENZUklMTElDCi0gICAgInNob3J0LWtvaSIs ICAgICAgICAgIEZDX0tPSTcsICAgIDAsIC8qIFNob3J0IEtPSSBDeXJpbGxpYyAqLwotI2VuZGlm IC8qIENZUklMTElDICovCi0gICAgInNwYW5pc2giLCAgICAgICAgICAgIEZDX1NQQVNDSUksIDAs IC8qIFNwYW5pc2ggTlJDICovCi0gICAgInN3ZWRpc2giLCAgICAgICAgICAgIEZDX1NXQVNDSUks IDAsIC8qIFN3ZWRpc2ggTlJDICovCi0gICAgInN3aXNzIiwgICAgICAgICAgICAgIEZDX0NIQVND SUksIDAsIC8qIFN3aXNzIE5SQyAqLwotICAgICJ0cmFuc3BhcmVudCIsICAgICAgICBGQ19UUkFO U1AsICAwLCAvKiBUcmFuc3BhcmVudCAqLwotI2lmZGVmIFVOSUNPREUKLSAgICAidWNzMiIsICAg ICAgICAgICAgICAgRkNfVUNTMiwgICAgMCwgLyogSVNPIDEwNjQ2IC8gVW5pY29kZSBVQ1MtMiAq LwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSAgICAidXMtYXNjaWkiLCAgICAgICAgICAgRkNfVVNB U0NJSSwgQ01fSU5WLCAvKiBNSU1FICovCi0gICAgInVzYXNjaWkiLCAgICAgICAgICAgIEZDX1VT QVNDSUksIENNX0lOViwKLSNpZmRlZiBVTklDT0RFCi0gICAgInV0Zi04IiwgICAgICAgICAgICAg IEZDX1VURjgsICAgIENNX0lOViwgLyogSVNPIDEwNjQ2IC8gVW5pY29kZSBVVEYtOCAqLwotICAg ICJ1dGY4IiwgICAgICAgICAgICAgICBGQ19VVEY4LCAgICAwLCAvKiBJU08gMTA2NDYgLyBVbmlj b2RlIFVURi04ICovCi0jZW5kaWYgLyogVU5JQ09ERSAqLwotI2lmZGVmIExBVElOMgotICAgICJ3 aW5kb3dzLTEyNTAiLCAgICAgICBGQ19DUDEyNTAsICBDTV9JTlYsIC8qIFdpbmRvd3MgQ1AgMTI1 MCAqLwotI2VuZGlmIC8qIExBVElOMiAqLwotI2lmZGVmIENZUklMTElDCi0gICAgIndpbmRvd3Mt MTI1MSIsICAgICAgIEZDX0NQMTI1MSwgIENNX0lOViwgLyogV2luZG93cyBDUCAxMjUxICovCi0j ZW5kaWYgLyogQ1lSSUxMSUMgKi8KLSAgICAid2luZG93cy0xMjUyIiwgICAgICAgRkNfQ1AxMjUy LCAgQ01fSU5WLCAvKiBXaW5kb3dzIENQIDEyNTIgKi8KLSAgICAiIiwgMCwgMAotfTsKLWludCBu dGVybWMgPSAoc2l6ZW9mKHR0Y3N0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7Ci0K LS8qIFRoaXMgdGFibGUgY29udGFpbnMgdGhlIGVxdWl2YWxlbnQgRkNTIG51bWJlciBmb3IgZWFj aCBUQ1MuICovCi0vKiBJZiB0aGUgVENfeHh4IHN5bWJvbCBkZWZpbml0aW9ucyBhcmUgZXZlciBj aGFuZ2VkLCBmaXggdGhpcyB0YWJsZS4gKi8KLS8qIERpdHRvIGlmIGFub3RoZXIgVENTIGlzIGFk ZGVkLiAqLwotCi1pbnQKLWNzZXF0YWJbTUFYVENTRVRTKzFdID0gewkJLyogVENTL0ZDUyBlcXVp dmFsZW5jeSB0YWJsZSAqLwotICAgIC0xLAkJCQkJLyogIDAgPSBUcmFuc3BhcmVudCAqLwotICAg IEZDX1VTQVNDSUksCQkJCS8qICAxID0gQVNDSUkgKi8KLSAgICBGQ18xTEFUSU4sCQkJCS8qICAy ID0gTGF0aW4tMSAqLwotICAgIEZDXzJMQVRJTiwJCQkJLyogIDMgPSBMYXRpbi0yICovCi0gICAg RkNfQ1lSSUxMLAkJCQkvKiAgNCA9IExhdGluL0N5cmlsbGljICovCi0gICAgRkNfSkVVQywJCQkJ LyogIDUgPSBKYXBhbmVzZSBFVUMgKi8KLSAgICBGQ19IRUJSRVcsCQkJCS8qICA2ID0gTGF0aW4v SGVicmV3ICovCi0gICAgRkNfR1JFRUssCQkJCS8qICA3ID0gTGF0aW4vR3JlZWsgKi8KLSAgICBG Q185TEFUSU4sCQkJCS8qICA4ID0gTGF0aW4tOSAqLwotICAgIEZDX1VDUzIsCQkJCS8qICA5ID0g VUNTLTIgKi8KLSAgICBGQ19VVEY4CQkJCS8qIDEwID0gVVRGLTggKi8KLX07Ci0KLS8qCi0gTGFu Z3VhZ2VzOgotCi0gVGhpcyB0YWJsZSBhbGxvd3MgQy1LZXJtaXQgdG8gaGF2ZSBhIFNFVCBMQU5H VUFHRSBjb21tYW5kIHRvIGFwcGx5IHNwZWNpYWwKLSBsYW5ndWFnZS1zcGVjaWZpYyBydWxlcyB3 aGVuIHRyYW5zbGF0aW5nIGZyb20gYSBjaGFyYWN0ZXIgc2V0IHRoYXQgY29udGFpbnMKLSBuYXRp b25hbCBjaGFyYWN0ZXJzIGludG8gcGxhaW4gQVNDSUksIGxpa2UgR2VybWFuIHVtbGF1dC1hIGJl Y29tZXMgYWUuCi0KLSBPcmlnaW5hbGx5LCBJIHRob3VnaHQgaXQgd291bGQgYmUgYSBnb29kIGlk ZWEgdG8gbGV0IFNFVCBMQU5HVUFHRSBhbHNvIHNlbGVjdAotIGFuIGFwcHJvcHJpYXRlIEZJTEUg Q0hBUkFDVEVSLVNFVCBhbmQgVFJBTlNGRVIgQ0hBUkFDVEVSLVNFVCBhdXRvbWF0aWNhbGx5LAot IGFuZCB0aGVzZSBhcmUgaW5jbHVkZWQgaW4gdGhlIGxhbmdpbmZvIHN0cnVjdHVyZS4gIExhdGVy IEkgcmVhbGl6ZWQgdGhhdCB0aGlzCi0gd2FzIGEgYmFkIGlkZWEuICBBbnkgcGFydGljdWxhciBs YW5ndWFnZSAoZS5nLiBEdXRjaCkgY2FuIGJlIHJlcHJlc2VudGVkIGJ5Ci0gbWFueSBkaWZmZXJl bnQgYW5kIGluY29tcGF0aWJsZSBjaGFyYWN0ZXIgc2V0cy4KLQotIChCdXQgd2UgY291bGQgdXNl IHRoZSBuZXcgKDE5OTgpIEFTU09DSUFURSBjb21tYW5kIGZvciB0aGlzLi4uKQotKi8KLQotc3Ry dWN0IGxhbmdpbmZvIGxhbmdzW10gPSB7Ci0vKiAgTGFuZ3VhZ2UgY29kZSAgIEZpbGUgQ2hhcnNl dCBYZmVyIENoYXJzZXQgTmFtZSAqLwotICAgIExfVVNBU0NJSSwgICAgICBGQ19VU0FTQ0lJLCAg VENfVVNBU0NJSSwgICJBU0NJSSAoQW1lcmljYW4gRW5nbGlzaCkiLAotICAgIExfREFOSVNILCAg ICAgICBGQ19OT0FTQ0lJLCAgVENfMUxBVElOLCAgICJEYW5pc2giLAotICAgIExfRFVUQ0gsICAg ICAgICBGQ19EVUFTQ0lJLCAgVENfMUxBVElOLCAgICJEdXRjaCIsCi0gICAgTF9GSU5OSVNILCAg ICAgIEZDX0ZJQVNDSUksICBUQ18xTEFUSU4sICAgIkZpbm5pc2giLAotICAgIExfRlJFTkNILCAg ICAgICBGQ19GUkFTQ0lJLCAgVENfMUxBVElOLCAgICJGcmVuY2giLAotICAgIExfR0VSTUFOLCAg ICAgICBGQ19HRUFTQ0lJLCAgVENfMUxBVElOLCAgICJHZXJtYW4iLAotI2lmZGVmIEdSRUVLCi0g ICAgTF9HUkVFSywgICAgICAgIEZDX0dSRUVLLCAgICBUQ19HUkVFSywgICAgIkdyZWVrIiwKLSNl bmRpZiAvKiBHUkVFSyAqLwotI2lmZGVmIEhFQlJFVwotICAgIExfSEVCUkVXLCAgICAgICBGQ19I RUJSRVcsICAgVENfSEVCUkVXLCAgICJIZWJyZXciLAotI2VuZGlmIC8qIEhFQlJFVyAqLwotICAg IExfSFVOR0FSSUFOLCAgICBGQ19IVUFTQ0lJLCAgVENfMkxBVElOLCAgICJIdW5nYXJpYW4iLAot ICAgIExfSUNFTEFORElDLCAgICBGQ19VU0FTQ0lJLCAgVENfMUxBVElOLCAgICJJY2VsYW5kaWMi LAotICAgIExfSVRBTElBTiwgICAgICBGQ19JVEFTQ0lJLCAgVENfMUxBVElOLCAgICJJdGFsaWFu IiwKLSNpZmRlZiBLQU5KSQotICAgIExfSkFQQU5FU0UsICAgICBGQ19KRVVDLCAgICAgVENfSkVV QywgICAgICJKYXBhbmVzZSIsCi0jZW5kaWYgLyogS0FOSkkgKi8KLSAgICBMX05PUldFR0lBTiwg ICAgRkNfTk9BU0NJSSwgIFRDXzFMQVRJTiwgICAiTm9yd2VnaWFuIiwKLSAgICBMX1BPUlRVR1VF U0UsICAgRkNfUE9BU0NJSSwgIFRDXzFMQVRJTiwgICAiUG9ydHVndWVzZSIsCi0jaWZkZWYgQ1lS SUxMSUMKLSAgICBMX1JVU1NJQU4sICAgICAgRkNfQ1A4NjYsICAgIFRDX0NZUklMTCwgICAiUnVz c2lhbiIsCi0jZW5kaWYgLyogQ1lSSUxMSUMgKi8KLSAgICBMX1NQQU5JU0gsICAgICAgRkNfU1BB U0NJSSwgIFRDXzFMQVRJTiwgICAiU3BhbmlzaCIsCi0gICAgTF9TV0VESVNILCAgICAgIEZDX1NX QVNDSUksICBUQ18xTEFUSU4sICAgIlN3ZWRpc2giLAotICAgIExfU1dJU1MsICAgICAgICBGQ19D SEFTQ0lJLCAgVENfMUxBVElOLCAgICJTd2lzcyIKLX07Ci1pbnQgbmxhbmdzID0gKHNpemVvZihs YW5ncykgLyBzaXplb2Yoc3RydWN0IGxhbmdpbmZvKSk7Ci0KLS8qCi0gIEtleXdvcmQgdGFibGUg Zm9yIHRoZSBTRVQgTEFOR1VBR0UgY29tbWFuZC4KLSAgT25seSBhIGZldyBvZiB0aGVzZSAoR2Vy bWFuLCBTY2FuZGluYXZpYW4sIGV0YykgYWN0dWFsbHkgZG8gYW55dGhpbmcuCi0gIFRoZSBsYW5n dWFnZSBpcyB1c2VkIHRvIGludm9rZSBzcGVjaWFsIHRyYW5zbGF0aW9uIHJ1bGVzIHdoZW4gY29u dmVydGluZwotICBmcm9tIGFuIDgtYml0IGNoYXJhY3RlciBzZXQgdG8gQVNDSUk7IGZvciBleGFt cGxlLCBHZXJtYW4gdS1kaWFlcmVzaXMKLSAgYmVjb21lcyAidWUiLCBEdXRjaCB5LWRpYWVyZXNp cyBiZWNvbWVzICJpaiIuICBMYW5ndWFnZXMgd2l0aG91dCBhc3NvY2lhdGVkCi0gIHJ1bGVzIGFy ZSBpbnZpc2libGUgKENNX0lOVikuCi0qLwotc3RydWN0IGtleXRhYiBsbmd0YWJbXSA9IHsKLSAg ICAiYXNjaWkiLCAgICAgICAgICAgIExfVVNBU0NJSSwgICAgQ01fSU5WLAotICAgICJkYW5pc2gi LCAgICAgICAgICAgTF9EQU5JU0gsICAgICAwLAotICAgICJkdXRjaCIsICAgICAgICAgICAgTF9E VVRDSCwgICAgICAwLAotICAgICJlbmdsaXNoIiwgICAgICAgICAgTF9VU0FTQ0lJLCAgICBDTV9J TlYsCi0gICAgImZpbm5pc2giLCAgICAgICAgICBMX0ZJTk5JU0gsICAgIDAsCi0gICAgImZyZW5j aCIsICAgICAgICAgICBMX0ZSRU5DSCwgICAgIDAsCi0gICAgImdlcm1hbiIsICAgICAgICAgICBM X0dFUk1BTiwgICAgIDAsCi0jaWZkZWYgR1JFRUsKLSAgICAiZ3JlZWsiLCAgICAgICAgICAgIExf R1JFRUssICAgICAgQ01fSU5WLAotI2VuZGlmIC8qIEdSRUVLICovCi0jaWZkZWYgSEVCUkVXCi0g ICAgImhlYnJldyIsICAgICAgICAgICBMX0hFQlJFVywgICAgIENNX0lOViwKLSNlbmRpZiAvKiBI RUJSRVcgKi8KLSAgICAiaHVuZ2FyaWFuIiwgICAgICAgIExfSFVOR0FSSUFOLCAgQ01fSU5WLAot ICAgICJpY2VsYW5kaWMiLCAgICAgICAgTF9JQ0VMQU5ESUMsICAwLAotICAgICJpdGFsaWFuIiwg ICAgICAgICAgTF9JVEFMSUFOLCAgICBDTV9JTlYsCi0jaWZkZWYgS0FOSkkKLSAgICAiamFwYW5l c2UiLCAgICAgICAgIExfSkFQQU5FU0UsICAgQ01fSU5WLAotI2VuZGlmIC8qIEtBTkpJICovCi0g ICAgIm5vcndlZ2lhbiIsICAgICAgICBMX05PUldFR0lBTiwgIDAsCi0gICAgIm5vbmUiLCAgICAg ICAgICAgICBMX1VTQVNDSUksICAgIDAsCi0gICAgInBvcnR1Z3Vlc2UiLCAgICAgICBMX1BPUlRV R1VFU0UsIENNX0lOViwKLSNpZmRlZiBDWVJJTExJQwotICAgICJydXNzaWFuIiwgICAgICAgICAg TF9SVVNTSUFOLCAgICAwLAotI2VuZGlmIC8qIENZUklMTElDICovCi0gICAgInNwYW5pc2giLCAg ICAgICAgICBMX1NQQU5JU0gsICAgIENNX0lOViwKLSAgICAic3dlZGlzaCIsICAgICAgICAgIExf U1dFRElTSCwgICAgMCwKLSNpZmRlZiBDWVJJTExJQwotICAgICJ1a3JhaW5pYW4iLCAgICAgICAg TF9SVVNTSUFOLCAgICAwLAotI2VuZGlmIC8qIENZUklMTElDICovCi0gICAgIiIsIDAsIDAKLX07 Ci1pbnQgbmxuZyA9IChzaXplb2YobG5ndGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAx OyAvKiBob3cgbWFueSAqLwotCi0KLS8qIFRyYW5zbGF0aW9uIHRhYmxlcyAuLi4gKi8KLQotLyoK LSAgRm9yIGVhY2ggcGFpciBvZiAodHJhbnNmZXIsZmlsZSkgY2hhcmFjdGVyIHNldHMsIHdlIG5l ZWQgdHdvIHRyYW5zbGF0aW9uCi0gIGZ1bmN0aW9ucywgb25lIGZvciBzZW5kaW5nLCBvbmUgZm9y IHJlY2VpdmluZy4KLSovCi0KLS8qCi0gIEhlcmUgaXMgdGhlIGZpcnN0IHRhYmxlLCBMYXRpbi0x IHRvIEFTQ0lJLCBmdWxseSBhbm5vdGF0ZWQuLi4KLSAgVGhpcyBvbmUgaXMgYWJzb2x1dGVseSBO T1QgaW52ZXJ0aWJsZSwgc2luY2Ugd2UncmUgZ29pbmcgZnJvbSBhbiA4LWJpdAotICBzZXQgdG8g YSA3LWJpdCBzZXQuICBBY2NlbnRlZCBsZXR0ZXJzIGFyZSBtYXBwZWQgdG8gdW5hY2NlbnRlZAot ICBlcXVpdmFsZW50cywgQzEgY29udHJvbCBjaGFyYWN0ZXJzIGFyZSBhbGwgdHJhbnNsYXRlZCB0 byAiPyIsIGV0Yy4KLSovCi1DT05TVCBDSEFSCi15bDFhc1tdID0geyAgLyogSVNPIDg4NTktMSBM YXRpbiBBbHBoYWJldCAxIHRvIFVTIEFTQ0lJICovCi0gICAgICAvKiAgU291cmNlIGNoYXJhY3Rl ciAgICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgID0+IFRyYW5zbGF0aW9uICovCi0gICAgICAv KiAgRGVjIHJvdy9jb2wgU2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICovCi0gIDAsICAvKiAgMDAwICAwMC8wMCAgQzAgTlVMICBDdHJsLUAgICAgICAgICAgICAg ICAgICAgID0+ICAoc2VsZikgICovCi0gIDEsICAvKiAgMDAxICAwMC8wMSAgQzAgU09IICBDdHJs LUEgICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gIDIsICAvKiAgMDAyICAwMC8w MiAgQzAgU1RYICBDdHJsLUIgICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gIDMs ICAvKiAgMDAzICAwMC8wMyAgQzAgRVRYICBDdHJsLUMgICAgICAgICAgICAgICAgICAgID0+ICAo c2VsZikgICovCi0gIDQsICAvKiAgMDA0ICAwMC8wNCAgQzAgRU9UICBDdHJsLUQgICAgICAgICAg ICAgICAgICAgID0+ICAoc2VsZikgICovCi0gIDUsICAvKiAgMDA1ICAwMC8wNSAgQzAgRU5RICBD dHJsLUUgICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gIDYsICAvKiAgMDA2ICAw MC8wNiAgQzAgQUNLICBDdHJsLUYgICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0g IDcsICAvKiAgMDA3ICAwMC8wNyAgQzAgQkVMICBDdHJsLUcgICAgICAgICAgICAgICAgICAgID0+ ICAoc2VsZikgICovCi0gIDgsICAvKiAgMDA4ICAwMC8wOCAgQzAgQlMgICBDdHJsLUggICAgICAg ICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gIDksICAvKiAgMDA5ICAwMC8wOSAgQzAgSFQg ICBDdHJsLUkgICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gMTAsICAvKiAgMDEw ICAwMC8xMCAgQzAgTEYgICBDdHJsLUogICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICov Ci0gMTEsICAvKiAgMDExICAwMC8xMSAgQzAgVlQgICBDdHJsLUsgICAgICAgICAgICAgICAgICAg ID0+ICAoc2VsZikgICovCi0gMTIsICAvKiAgMDEyICAwMC8xMiAgQzAgRkYgICBDdHJsLUwgICAg ICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gMTMsICAvKiAgMDEzICAwMC8xMyAgQzAg Q1IgICBDdHJsLU0gICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gMTQsICAvKiAg MDE0ICAwMC8xNCAgQzAgU08gICBDdHJsLU4gICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikg ICovCi0gMTUsICAvKiAgMDE1ICAwMC8xNSAgQzAgU0kgICBDdHJsLU8gICAgICAgICAgICAgICAg ICAgID0+ICAoc2VsZikgICovCi0gMTYsICAvKiAgMDE2ICAwMS8wMCAgQzAgRExFICBDdHJsLVAg ICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gMTcsICAvKiAgMDE3ICAwMS8wMSAg QzAgREMxICBDdHJsLVEgICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gMTgsICAv KiAgMDE4ICAwMS8wMiAgQzAgREMyICBDdHJsLVIgICAgICAgICAgICAgICAgICAgID0+ICAoc2Vs ZikgICovCi0gMTksICAvKiAgMDE5ICAwMS8wMyAgQzAgREMzICBDdHJsLVMgICAgICAgICAgICAg ICAgICAgID0+ICAoc2VsZikgICovCi0gMjAsICAvKiAgMDIwICAwMS8wNCAgQzAgREM0ICBDdHJs LVQgICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gMjEsICAvKiAgMDIxICAwMS8w NSAgQzAgTkFLICBDdHJsLVUgICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gMjIs ICAvKiAgMDIyICAwMS8wNiAgQzAgU1lOICBDdHJsLVYgICAgICAgICAgICAgICAgICAgID0+ICAo c2VsZikgICovCi0gMjMsICAvKiAgMDIzICAwMS8wNyAgQzAgRVRCICBDdHJsLVcgICAgICAgICAg ICAgICAgICAgID0+ICAoc2VsZikgICovCi0gMjQsICAvKiAgMDI0ICAwMS8wOCAgQzAgQ0FOICBD dHJsLVggICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gMjUsICAvKiAgMDI1ICAw MS8wOSAgQzAgRU0gICBDdHJsLVkgICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0g MjYsICAvKiAgMDI2ICAwMS8xMCAgQzAgU1VCICBDdHJsLVogICAgICAgICAgICAgICAgICAgID0+ ICAoc2VsZikgICovCi0gMjcsICAvKiAgMDI3ICAwMS8xMSAgQzAgRVNDICBDdHJsLVsgICAgICAg ICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gMjgsICAvKiAgMDI4ICAwMS8xMiAgQzAgRlMg ICBDdHJsLVwgICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gMjksICAvKiAgMDI5 ICAwMS8xMyAgQzAgR1MgICBDdHJsLV0gICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICov Ci0gMzAsICAvKiAgMDMwICAwMS8xNCAgQzAgUlMgICBDdHJsLV4gICAgICAgICAgICAgICAgICAg ID0+ICAoc2VsZikgICovCi0gMzEsICAvKiAgMDMxICAwMS8xNSAgQzAgVVMgICBDdHJsLV8gICAg ICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gMzIsICAvKiAgMDMyICAwMi8wMCAgICAg U1AgICBTcGFjZSAgICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gMzMsICAvKiAg MDMzICAwMi8wMSAgRzAgISAgICBFeGNsYW1hdGlvbiBtYXJrICAgICAgICAgID0+ICAoc2VsZikg ICovCi0gMzQsICAvKiAgMDM0ICAwMi8wMiAgRzAgIiAgICBEb3VibGVxdW90ZSAgICAgICAgICAg ICAgID0+ICAoc2VsZikgICovCi0gMzUsICAvKiAgMDM1ICAwMi8wMyAgRzAgIyAgICBOdW1iZXIg c2lnbiAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gMzYsICAvKiAgMDM2ICAwMi8wNCAg RzAgJCAgICBEb2xsYXIgc2lnbiAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gMzcsICAv KiAgMDM3ICAwMi8wNSAgRzAgJSAgICBQZXJjZW50IHNpZ24gICAgICAgICAgICAgID0+ICAoc2Vs ZikgICovCi0gMzgsICAvKiAgMDM4ICAwMi8wNiAgRzAgJiAgICBBbXBlcnNhbmQgICAgICAgICAg ICAgICAgID0+ICAoc2VsZikgICovCi0gMzksICAvKiAgMDM5ICAwMi8wNyAgRzAgJyAgICBBcG9z dHJvcGhlICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gNDAsICAvKiAgMDQwICAwMi8w OCAgRzAgKCAgICBMZWZ0IHBhcmVudGhlc2lzICAgICAgICAgID0+ICAoc2VsZikgICovCi0gNDEs ICAvKiAgMDQxICAwMi8wOSAgRzAgKSAgICBSaWdodCBwYXJlbnRoZXNpcyAgICAgICAgID0+ICAo c2VsZikgICovCi0gNDIsICAvKiAgMDQyICAwMi8xMCAgRzAgKiAgICBBc3RlcmlzayAgICAgICAg ICAgICAgICAgID0+ICAoc2VsZikgICovCi0gNDMsICAvKiAgMDQzICAwMi8xMSAgRzAgKyAgICBQ bHVzIHNpZ24gICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gNDQsICAvKiAgMDQ0ICAw Mi8xMiAgRzAgLCAgICBDb21tYSAgICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0g NDUsICAvKiAgMDQ1ICAwMi8xMyAgRzAgLSAgICBIeXBoZW4sIG1pbnVzIHNpZ24gICAgICAgID0+ ICAoc2VsZikgICovCi0gNDYsICAvKiAgMDQ2ICAwMi8xNCAgRzAgLiAgICBQZXJpb2QsIGZ1bGwg c3RvcCAgICAgICAgID0+ICAoc2VsZikgICovCi0gNDcsICAvKiAgMDQ3ICAwMi8xNSAgRzAgLyAg ICBTbGFzaCwgc29saWR1cyAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gNDgsICAvKiAgMDQ4 ICAwMy8wMCAgRzAgMCAgICBEaWdpdCAwICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICov Ci0gNDksICAvKiAgMDQ5ICAwMy8wMSAgRzAgMSAgICBEaWdpdCAxICAgICAgICAgICAgICAgICAg ID0+ICAoc2VsZikgICovCi0gNTAsICAvKiAgMDUwICAwMy8wMiAgRzAgMiAgICBEaWdpdCAyICAg ICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gNTEsICAvKiAgMDUxICAwMy8wMyAgRzAg MyAgICBEaWdpdCAzICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gNTIsICAvKiAg MDUyICAwMy8wNCAgRzAgNCAgICBEaWdpdCA0ICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikg ICovCi0gNTMsICAvKiAgMDUzICAwMy8wNSAgRzAgNSAgICBEaWdpdCA1ICAgICAgICAgICAgICAg ICAgID0+ICAoc2VsZikgICovCi0gNTQsICAvKiAgMDU0ICAwMy8wNiAgRzAgNiAgICBEaWdpdCA2 ICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gNTUsICAvKiAgMDU1ICAwMy8wNyAg RzAgNyAgICBEaWdpdCA3ICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gNTYsICAv KiAgMDU2ICAwMy8wOCAgRzAgOCAgICBEaWdpdCA4ICAgICAgICAgICAgICAgICAgID0+ICAoc2Vs ZikgICovCi0gNTcsICAvKiAgMDU3ICAwMy8wOSAgRzAgOSAgICBEaWdpdCA5ICAgICAgICAgICAg ICAgICAgID0+ICAoc2VsZikgICovCi0gNTgsICAvKiAgMDU4ICAwMy8xMCAgRzAgOiAgICBDb2xv biAgICAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gNTksICAvKiAgMDU5ICAwMy8x MSAgRzAgOyAgICBTZW1pY29sb24gICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gNjAs ICAvKiAgMDYwICAwMy8xMiAgRzAgPCAgICBMZXNzLXRoYW4gc2lnbiAgICAgICAgICAgID0+ICAo c2VsZikgICovCi0gNjEsICAvKiAgMDYxICAwMy8xMyAgRzAgPSAgICBFcXVhbHMgc2lnbiAgICAg ICAgICAgICAgID0+ICAoc2VsZikgICovCi0gNjIsICAvKiAgMDYyICAwMy8xNCAgRzAgPiAgICBH cmVhdGVyLXRoYW4gc2lnbiAgICAgICAgID0+ICAoc2VsZikgICovCi0gNjMsICAvKiAgMDYzICAw My8xNSAgRzAgPyAgICBRdWVzdGlvbiBtYXJrICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0g NjQsICAvKiAgMDY0ICAwNC8wMCAgRzAgQCAgICBDb21tZXJjaWFsIGF0IHNpZ24gICAgICAgID0+ ICAoc2VsZikgICovCi0gNjUsICAvKiAgMDY1ICAwNC8wMSAgRzAgQSAgICBMZXR0ZXIgQSAgICAg ICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gNjYsICAvKiAgMDY2ICAwNC8wMiAgRzAgQiAg ICBMZXR0ZXIgQiAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gNjcsICAvKiAgMDY3 ICAwNC8wMyAgRzAgQyAgICBMZXR0ZXIgQyAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICov Ci0gNjgsICAvKiAgMDY4ICAwNC8wNCAgRzAgRCAgICBMZXR0ZXIgRCAgICAgICAgICAgICAgICAg ID0+ICAoc2VsZikgICovCi0gNjksICAvKiAgMDY5ICAwNC8wNSAgRzAgRSAgICBMZXR0ZXIgRSAg ICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gNzAsICAvKiAgMDcwICAwNC8wNiAgRzAg RiAgICBMZXR0ZXIgRiAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gNzEsICAvKiAg MDcxICAwNC8wNyAgRzAgRyAgICBMZXR0ZXIgRyAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikg ICovCi0gNzIsICAvKiAgMDcyICAwNC8wOCAgRzAgSCAgICBMZXR0ZXIgSCAgICAgICAgICAgICAg ICAgID0+ICAoc2VsZikgICovCi0gNzMsICAvKiAgMDczICAwNC8wOSAgRzAgSSAgICBMZXR0ZXIg SSAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gNzQsICAvKiAgMDc0ICAwNC8xMCAg RzAgSiAgICBMZXR0ZXIgSiAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gNzUsICAv KiAgMDc1ICAwNC8xMSAgRzAgSyAgICBMZXR0ZXIgSyAgICAgICAgICAgICAgICAgID0+ICAoc2Vs ZikgICovCi0gNzYsICAvKiAgMDc2ICAwNC8xMiAgRzAgTCAgICBMZXR0ZXIgTCAgICAgICAgICAg ICAgICAgID0+ICAoc2VsZikgICovCi0gNzcsICAvKiAgMDc3ICAwNC8xMyAgRzAgTSAgICBMZXR0 ZXIgTSAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gNzgsICAvKiAgMDc4ICAwNC8x NCAgRzAgTiAgICBMZXR0ZXIgTiAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gNzks ICAvKiAgMDc5ICAwNC8xNSAgRzAgTyAgICBMZXR0ZXIgTyAgICAgICAgICAgICAgICAgID0+ICAo c2VsZikgICovCi0gODAsICAvKiAgMDgwICAwNS8wMCAgRzAgUCAgICBMZXR0ZXIgUCAgICAgICAg ICAgICAgICAgID0+ICAoc2VsZikgICovCi0gODEsICAvKiAgMDgxICAwNS8wMSAgRzAgUSAgICBM ZXR0ZXIgUSAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gODIsICAvKiAgMDgyICAw NS8wMiAgRzAgUiAgICBMZXR0ZXIgUiAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0g ODMsICAvKiAgMDgzICAwNS8wMyAgRzAgUyAgICBMZXR0ZXIgUyAgICAgICAgICAgICAgICAgID0+ ICAoc2VsZikgICovCi0gODQsICAvKiAgMDg0ICAwNS8wNCAgRzAgVCAgICBMZXR0ZXIgVCAgICAg ICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gODUsICAvKiAgMDg1ICAwNS8wNSAgRzAgVSAg ICBMZXR0ZXIgVSAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gODYsICAvKiAgMDg2 ICAwNS8wNiAgRzAgViAgICBMZXR0ZXIgViAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICov Ci0gODcsICAvKiAgMDg3ICAwNS8wNyAgRzAgVyAgICBMZXR0ZXIgVyAgICAgICAgICAgICAgICAg ID0+ICAoc2VsZikgICovCi0gODgsICAvKiAgMDg4ICAwNS8wOCAgRzAgWCAgICBMZXR0ZXIgWCAg ICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gODksICAvKiAgMDg5ICAwNS8wOSAgRzAg WSAgICBMZXR0ZXIgWSAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gOTAsICAvKiAg MDkwICAwNS8xMCAgRzAgWiAgICBMZXR0ZXIgWiAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikg ICovCi0gOTEsICAvKiAgMDkxICAwNS8xMSAgRzAgWyAgICBMZWZ0IHNxdWFyZSBicmFja2V0ICAg ICAgID0+ICAoc2VsZikgICovCi0gOTIsICAvKiAgMDkyICAwNS8xMiAgRzAgXCAgICBSZXZlcnNl IHNsYXNoICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gOTMsICAvKiAgMDkzICAwNS8xMyAg RzAgXSAgICBSaWdodCBzcXVhcmUgYnJhY2tldCAgICAgID0+ICAoc2VsZikgICovCi0gOTQsICAv KiAgMDk0ICAwNS8xNCAgRzAgXiAgICBDaXJjdW1mbGV4IGFjY2VudCAgICAgICAgID0+ICAoc2Vs ZikgICovCi0gOTUsICAvKiAgMDk1ICAwNS8xNSAgRzAgXyAgICBVbmRlcmxpbmUsIGxvdyBsaW5l ICAgICAgID0+ICAoc2VsZikgICovCi0gOTYsICAvKiAgMDk2ICAwNi8wMCAgRzAgYCAgICBHcmF2 ZSBhY2NlbnQgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gOTcsICAvKiAgMDk3ICAwNi8w MSAgRzAgYSAgICBMZXR0ZXIgYSAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0gOTgs ICAvKiAgMDk4ICAwNi8wMiAgRzAgYiAgICBMZXR0ZXIgYiAgICAgICAgICAgICAgICAgID0+ICAo c2VsZikgICovCi0gOTksICAvKiAgMDk5ICAwNi8wMyAgRzAgYyAgICBMZXR0ZXIgYyAgICAgICAg ICAgICAgICAgID0+ICAoc2VsZikgICovCi0xMDAsICAvKiAgMTAwICAwNi8wNCAgRzAgZCAgICBM ZXR0ZXIgZCAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0xMDEsICAvKiAgMTAxICAw Ni8wNSAgRzAgZSAgICBMZXR0ZXIgZSAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0x MDIsICAvKiAgMTAyICAwNi8wNiAgRzAgZiAgICBMZXR0ZXIgZiAgICAgICAgICAgICAgICAgID0+ ICAoc2VsZikgICovCi0xMDMsICAvKiAgMTAzICAwNi8wNyAgRzAgZyAgICBMZXR0ZXIgZyAgICAg ICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0xMDQsICAvKiAgMTA0ICAwNi8wOCAgRzAgaCAg ICBMZXR0ZXIgaCAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0xMDUsICAvKiAgMTA1 ICAwNi8wOSAgRzAgaSAgICBMZXR0ZXIgaSAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICov Ci0xMDYsICAvKiAgMTA2ICAwNi8xMCAgRzAgaiAgICBMZXR0ZXIgaiAgICAgICAgICAgICAgICAg ID0+ICAoc2VsZikgICovCi0xMDcsICAvKiAgMTA3ICAwNi8xMSAgRzAgayAgICBMZXR0ZXIgayAg ICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0xMDgsICAvKiAgMTA4ICAwNi8xMiAgRzAg bCAgICBMZXR0ZXIgbCAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0xMDksICAvKiAg MTA5ICAwNi8xMyAgRzAgbSAgICBMZXR0ZXIgbSAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikg ICovCi0xMTAsICAvKiAgMTEwICAwNi8xNCAgRzAgbiAgICBMZXR0ZXIgbiAgICAgICAgICAgICAg ICAgID0+ICAoc2VsZikgICovCi0xMTEsICAvKiAgMTExICAwNi8xNSAgRzAgbyAgICBMZXR0ZXIg byAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0xMTIsICAvKiAgMTEyICAwNy8wMCAg RzAgcCAgICBMZXR0ZXIgcCAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0xMTMsICAv KiAgMTEzICAwNy8wMSAgRzAgcSAgICBMZXR0ZXIgcSAgICAgICAgICAgICAgICAgID0+ICAoc2Vs ZikgICovCi0xMTQsICAvKiAgMTE0ICAwNy8wMiAgRzAgciAgICBMZXR0ZXIgciAgICAgICAgICAg ICAgICAgID0+ICAoc2VsZikgICovCi0xMTUsICAvKiAgMTE1ICAwNy8wMyAgRzAgcyAgICBMZXR0 ZXIgcyAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0xMTYsICAvKiAgMTE2ICAwNy8w NCAgRzAgdCAgICBMZXR0ZXIgdCAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0xMTcs ICAvKiAgMTE3ICAwNy8wNSAgRzAgdSAgICBMZXR0ZXIgdSAgICAgICAgICAgICAgICAgID0+ICAo c2VsZikgICovCi0xMTgsICAvKiAgMTE4ICAwNy8wNiAgRzAgdiAgICBMZXR0ZXIgdiAgICAgICAg ICAgICAgICAgID0+ICAoc2VsZikgICovCi0xMTksICAvKiAgMTE5ICAwNy8wNyAgRzAgdyAgICBM ZXR0ZXIgdyAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0xMjAsICAvKiAgMTIwICAw Ny8wOCAgRzAgeCAgICBMZXR0ZXIgeCAgICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0x MjEsICAvKiAgMTIxICAwNy8wOSAgRzAgeSAgICBMZXR0ZXIgeSAgICAgICAgICAgICAgICAgID0+ ICAoc2VsZikgICovCi0xMjIsICAvKiAgMTIyICAwNy8xMCAgRzAgeiAgICBMZXR0ZXIgeiAgICAg ICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0xMjMsICAvKiAgMTIzICAwNy8xMSAgRzAgeyAg ICBMZWZ0IGN1cmx5IGJyYWNrZXQgICAgICAgID0+ICAoc2VsZikgICovCi0xMjQsICAvKiAgMTI0 ICAwNy8xMiAgRzAgfCAgICBWZXJ0aWNhbCBiYXIgICAgICAgICAgICAgID0+ICAoc2VsZikgICov Ci0xMjUsICAvKiAgMTI1ICAwNy8xMyAgRzAgfSAgICBSaWdodCBjdXJseSBicmFja2V0ICAgICAg ID0+ICAoc2VsZikgICovCi0xMjYsICAvKiAgMTI2ICAwNy8xNCAgRzAgfiAgICBUaWxkZSAgICAg ICAgICAgICAgICAgICAgID0+ICAoc2VsZikgICovCi0xMjcsICAvKiAgMTI3ICAwNy8xNSAgICAg REVMICBEZWxldGUsIFJ1Ym91dCAgICAgICAgICAgID0+ICAoc2VsZikgICovCi1VTkssICAvKiAg MTI4ICAwOC8wMCAgQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAg ICovCi1VTkssICAvKiAgMTI5ICAwOC8wMSAgQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgID0+ICBVTksgICAgICovCi1VTkssICAvKiAgMTMwICAwOC8wMiAgQzEgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCi1VTkssICAvKiAgMTMxICAwOC8wMyAg QzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCi1VTkssICAv KiAgMTMyICAwOC8wNCAgQzEgSU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksg ICAgICovCi1VTkssICAvKiAgMTMzICAwOC8wNSAgQzEgTkVMICAgICAgICAgICAgICAgICAgICAg ICAgICAgID0+ICBVTksgICAgICovCi1VTkssICAvKiAgMTM0ICAwOC8wNiAgQzEgU1NBICAgICAg ICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCi1VTkssICAvKiAgMTM1ICAwOC8w NyAgQzEgRVNBICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCi1VTkss ICAvKiAgMTM2ICAwOC8wOCAgQzEgSFRTICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBV TksgICAgICovCi1VTkssICAvKiAgMTM3ICAwOC8wOSAgQzEgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgID0+ICBVTksgICAgICovCi1VTkssICAvKiAgMTM4ICAwOC8xMCAgQzEgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCi1VTkssICAvKiAgMTM5ICAw OC8xMSAgQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCi1V TkssICAvKiAgMTQwICAwOC8xMiAgQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ ICBVTksgICAgICovCi1VTkssICAvKiAgMTQxICAwOC8xMyAgQzEgUkkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgID0+ICBVTksgICAgICovCi1VTkssICAvKiAgMTQyICAwOC8xNCAgQzEgU1My ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCi1VTkssICAvKiAgMTQz ICAwOC8xNSAgQzEgU1MzICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAgICov Ci1VTkssICAvKiAgMTQ0ICAwOS8wMCAgQzEgRENTICAgICAgICAgICAgICAgICAgICAgICAgICAg ID0+ICBVTksgICAgICovCi1VTkssICAvKiAgMTQ1ICAwOS8wMSAgQzEgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCi1VTkssICAvKiAgMTQ2ICAwOS8wMiAgQzEg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCi1VTkssICAvKiAg MTQ3ICAwOS8wMyAgQzEgU1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAg ICovCi1VTkssICAvKiAgMTQ4ICAwOS8wNCAgQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgID0+ICBVTksgICAgICovCi1VTkssICAvKiAgMTQ5ICAwOS8wNSAgQzEgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCi1VTkssICAvKiAgMTUwICAwOS8wNiAg QzEgU1BBICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCi1VTkssICAv KiAgMTUxICAwOS8wNyAgQzEgRVBBICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksg ICAgICovCi1VTkssICAvKiAgMTUyICAwOS8wOCAgQzEgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgID0+ICBVTksgICAgICovCi1VTkssICAvKiAgMTUzICAwOS8wOSAgQzEgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCi1VTkssICAvKiAgMTU0ICAwOS8x MCAgQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCi1VTkss ICAvKiAgMTU1ICAwOS8xMSAgQzEgQ1NJICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBV TksgICAgICovCi1VTkssICAvKiAgMTU2ICAwOS8xMiAgQzEgU1QgICAgICAgICAgICAgICAgICAg ICAgICAgICAgID0+ICBVTksgICAgICovCi1VTkssICAvKiAgMTU3ICAwOS8xMyAgQzEgT1NDICAg ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCi1VTkssICAvKiAgMTU4ICAw OS8xNCAgQzEgUE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCi1V TkssICAvKiAgMTU5ICAwOS8xNSAgQzEgQVBDICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ ICBVTksgICAgICovCi0gMzIsICAvKiAgMTYwICAxMC8wMCAgRzEgICAgICBOby1icmVhayBzcGFj ZSAgICAgICAgICAgID0+ICBTUCAgICAgICovCi0gMzMsICAvKiAgMTYxICAxMC8wMSAgRzEgICAg ICBJbnZlcnRlZCBleGNsYW1hdGlvbiAgICAgID0+ICAhICAgICAgICovCi0gOTksICAvKiAgMTYy ICAxMC8wMiAgRzEgICAgICBDZW50IHNpZ24gICAgICAgICAgICAgICAgID0+ICBjICAgICAgICov Ci0gMzUsICAvKiAgMTYzICAxMC8wMyAgRzEgICAgICBQb3VuZCBzaWduICAgICAgICAgICAgICAg ID0+ICAjICAgICAgICovCi0gMzYsICAvKiAgMTY0ICAxMC8wNCAgRzEgICAgICBDdXJyZW5jeSBz aWduICAgICAgICAgICAgID0+ICAkICAgICAgICovCi0gODksICAvKiAgMTY1ICAxMC8wNSAgRzEg ICAgICBZZW4gc2lnbiAgICAgICAgICAgICAgICAgID0+ICBZICAgICAgICovCi0xMjQsICAvKiAg MTY2ICAxMC8wNiAgRzEgICAgICBCcm9rZW4gYmFyICAgICAgICAgICAgICAgID0+ICB8ICAgICAg ICovCi0gODAsICAvKiAgMTY3ICAxMC8wNyAgRzEgICAgICBQYXJhZ3JhcGggc2lnbiAgICAgICAg ICAgID0+ICBQICAgICAgICovCi0gMzQsICAvKiAgMTY4ICAxMC8wOCAgRzEgICAgICBEaWFlcmVz aXMgICAgICAgICAgICAgICAgID0+ICAiICAgICAgICovCi0gNjcsICAvKiAgMTY5ICAxMC8wOSAg RzEgICAgICBDb3B5cmlnaHQgc2lnbiAgICAgICAgICAgID0+ICBDICAgICAgICovCi0gOTcsICAv KiAgMTcwICAxMC8xMCAgRzEgICAgICBGZW1pbmluZSBvcmRpbmFsICAgICAgICAgID0+ICBhICAg ICAgICovCi0gMzQsICAvKiAgMTcxICAxMC8xMSAgRzEgICAgICBMZWZ0IGFuZ2xlIHF1b3RhdGlv biAgICAgID0+ICAiICAgICAgICovCi0xMjYsICAvKiAgMTcyICAxMC8xMiAgRzEgICAgICBOb3Qg c2lnbiAgICAgICAgICAgICAgICAgID0+ICB+ICAgICAgICovCi0gNDUsICAvKiAgMTczICAxMC8x MyAgRzEgICAgICBTb2Z0IGh5cGhlbiAgICAgICAgICAgICAgID0+ICAtICAgICAgICovCi0gODIs ICAvKiAgMTc0ICAxMC8xNCAgRzEgICAgICBSZWdpc3RlcmVkIHRyYWRlIG1hcmsgICAgID0+ICBS ICAgICAgICovCi0gOTUsICAvKiAgMTc1ICAxMC8xNSAgRzEgICAgICBNYWNyb24gICAgICAgICAg ICAgICAgICAgID0+ICBfICAgICAgICovCi0xMTEsICAvKiAgMTc2ICAxMS8wMCAgRzEgICAgICBE ZWdyZWUgc2lnbiwgcmluZyBhYm92ZSAgID0+ICBvICAgICAgICovCi1VTkssICAvKiAgMTc3ICAx MS8wMSAgRzEgICAgICBQbHVzLW1pbnVzIHNpZ24gICAgICAgICAgID0+ICBVTksgICAgICovCi0g NTAsICAvKiAgMTc4ICAxMS8wMiAgRzEgICAgICBTdXBlcnNjcmlwdCB0d28gICAgICAgICAgID0+ ICAyICAgICAgICovCi0gNTEsICAvKiAgMTc5ICAxMS8wMyAgRzEgICAgICBTdXBlcnNjcmlwdCB0 aHJlZSAgICAgICAgID0+ICAzICAgICAgICovCi0gMzksICAvKiAgMTgwICAxMS8wNCAgRzEgICAg ICBBY3V0ZSBhY2NlbnQgICAgICAgICAgICAgID0+ICAnICAgICAgICovCi0xMTcsICAvKiAgMTgx ICAxMS8wNSAgRzEgICAgICBNaWNybyBzaWduICAgICAgICAgICAgICAgID0+ICB1ICAgICAgICov Ci0gNDUsICAvKiAgMTgyICAxMS8wNiAgRzEgICAgICBQaWxjcm93IHNpZ24gICAgICAgICAgICAg ID0+ICAtICAgICAgICovCi0gNDUsICAvKiAgMTgzICAxMS8wNyAgRzEgICAgICBNaWRkbGUgZG90 ICAgICAgICAgICAgICAgID0+ICAtICAgICAgICovCi0gNDQsICAvKiAgMTg0ICAxMS8wOCAgRzEg ICAgICBDZWRpbGxhICAgICAgICAgICAgICAgICAgID0+ICAsICAgICAgICovCi0gNDksICAvKiAg MTg1ICAxMS8wOSAgRzEgICAgICBTdXBlcnNjcmlwdCBvbmUgICAgICAgICAgID0+ICAxICAgICAg ICovCi0xMTEsICAvKiAgMTg2ICAxMS8xMCAgRzEgICAgICBNYXNjdWxpbmUgb3JkaW5hbCAgICAg ICAgID0+ICBvICAgICAgICovCi0gMzQsICAvKiAgMTg3ICAxMS8xMSAgRzEgICAgICBSaWdodCBh bmdsZSBxdW90YXRpb24gICAgID0+ICAiICAgICAgICovCi1VTkssICAvKiAgMTg4ICAxMS8xMiAg RzEgICAgICBPbmUgcXVhcnRlciAgICAgICAgICAgICAgID0+ICBVTksgICAgICovCi1VTkssICAv KiAgMTg5ICAxMS8xMyAgRzEgICAgICBPbmUgaGFsZiAgICAgICAgICAgICAgICAgID0+ICBVTksg ICAgICovCi1VTkssICAvKiAgMTkwICAxMS8xNCAgRzEgICAgICBUaHJlZSBxdWFydGVycyAgICAg ICAgICAgID0+ICBVTksgICAgICovCi0gNjMsICAvKiAgMTkxICAxMS8xNSAgRzEgICAgICBJbnZl cnRlZCBxdWVzdGlvbiBtYXJrICAgID0+ICA/ICAgICAgICovCi0gNjUsICAvKiAgMTkyICAxMi8w MCAgRzEgICAgICBBIGdyYXZlICAgICAgICAgICAgICAgICAgID0+ICBBICAgICAgICovCi0gNjUs ICAvKiAgMTkzICAxMi8wMSAgRzEgICAgICBBIGFjdXRlICAgICAgICAgICAgICAgICAgID0+ICBB ICAgICAgICovCi0gNjUsICAvKiAgMTk0ICAxMi8wMiAgRzEgICAgICBBIGNpcmN1bWZsZXggICAg ICAgICAgICAgID0+ICBBICAgICAgICovCi0gNjUsICAvKiAgMTk1ICAxMi8wMyAgRzEgICAgICBB IHRpbGRlICAgICAgICAgICAgICAgICAgID0+ICBBICAgICAgICovCi0gNjUsICAvKiAgMTk2ICAx Mi8wNCAgRzEgICAgICBBIGRpYWVyZXNpcyAgICAgICAgICAgICAgID0+ICBBICAgICAgICovCi0g NjUsICAvKiAgMTk3ICAxMi8wNSAgRzEgICAgICBBIHJpbmcgYWJvdmUgICAgICAgICAgICAgID0+ ICBBICAgICAgICovCi0gNjUsICAvKiAgMTk4ICAxMi8wNiAgRzEgICAgICBBIHdpdGggRSAgICAg ICAgICAgICAgICAgID0+ICBBICAgICAgICovCi0gNjcsICAvKiAgMTk5ICAxMi8wNyAgRzEgICAg ICBDIENlZGlsbGEgICAgICAgICAgICAgICAgID0+ICBDICAgICAgICovCi0gNjksICAvKiAgMjAw ICAxMi8wOCAgRzEgICAgICBFIGdyYXZlICAgICAgICAgICAgICAgICAgID0+ICBFICAgICAgICov Ci0gNjksICAvKiAgMjAxICAxMi8wOSAgRzEgICAgICBFIGFjdXRlICAgICAgICAgICAgICAgICAg ID0+ICBFICAgICAgICovCi0gNjksICAvKiAgMjAyICAxMi8xMCAgRzEgICAgICBFIGNpcmN1bWZs ZXggICAgICAgICAgICAgID0+ICBFICAgICAgICovCi0gNjksICAvKiAgMjAzICAxMi8xMSAgRzEg ICAgICBFIGRpYWVyZXNpcyAgICAgICAgICAgICAgID0+ICBFICAgICAgICovCi0gNzMsICAvKiAg MjA0ICAxMi8xMiAgRzEgICAgICBJIGdyYXZlICAgICAgICAgICAgICAgICAgID0+ICBJICAgICAg ICovCi0gNzMsICAvKiAgMjA1ICAxMi8xMyAgRzEgICAgICBJIGFjdXRlICAgICAgICAgICAgICAg ICAgID0+ICBJICAgICAgICovCi0gNzMsICAvKiAgMjA2ICAxMi8xNCAgRzEgICAgICBJIGNpcmN1 bWZsZXggICAgICAgICAgICAgID0+ICBJICAgICAgICovCi0gNzMsICAvKiAgMjA3ICAxMi8xNSAg RzEgICAgICBJIGRpYWVyZXNpcyAgICAgICAgICAgICAgID0+ICBJICAgICAgICovCi0gNjgsICAv KiAgMjA4ICAxMy8wMCAgRzEgICAgICBJY2VsYW5kaWMgRXRoICAgICAgICAgICAgID0+ICBEICAg ICAgICovCi0gNzgsICAvKiAgMjA5ICAxMy8wMSAgRzEgICAgICBOIHRpbGRlICAgICAgICAgICAg ICAgICAgID0+ICBOICAgICAgICovCi0gNzksICAvKiAgMjEwICAxMy8wMiAgRzEgICAgICBPIGdy YXZlICAgICAgICAgICAgICAgICAgID0+ICBPICAgICAgICovCi0gNzksICAvKiAgMjExICAxMy8w MyAgRzEgICAgICBPIGFjdXRlICAgICAgICAgICAgICAgICAgID0+ICBPICAgICAgICovCi0gNzks ICAvKiAgMjEyICAxMy8wNCAgRzEgICAgICBPIGNpcmN1bWZsZXggICAgICAgICAgICAgID0+ICBP ICAgICAgICovCi0gNzksICAvKiAgMjEzICAxMy8wNSAgRzEgICAgICBPIHRpbGRlICAgICAgICAg ICAgICAgICAgID0+ICBPICAgICAgICovCi0gNzksICAvKiAgMjE0ICAxMy8wNiAgRzEgICAgICBP IGRpYWVyZXNpcyAgICAgICAgICAgICAgID0+ICBPICAgICAgICovCi0xMjAsICAvKiAgMjE1ICAx My8wNyAgRzEgICAgICBNdWx0aXBsaWNhdGlvbiBzaWduICAgICAgID0+ICB4ICAgICAgICovCi0g NzksICAvKiAgMjE2ICAxMy8wOCAgRzEgICAgICBPIG9ibGlxdWUgc3Ryb2tlICAgICAgICAgID0+ ICBPICAgICAgICovCi0gODUsICAvKiAgMjE3ICAxMy8wOSAgRzEgICAgICBVIGdyYXZlICAgICAg ICAgICAgICAgICAgID0+ICBVICAgICAgICovCi0gODUsICAvKiAgMjE4ICAxMy8xMCAgRzEgICAg ICBVIGFjdXRlICAgICAgICAgICAgICAgICAgID0+ICBVICAgICAgICovCi0gODUsICAvKiAgMjE5 ICAxMy8xMSAgRzEgICAgICBVIGNpcmN1bWZsZXggICAgICAgICAgICAgID0+ICBVICAgICAgICov Ci0gODUsICAvKiAgMjIwICAxMy8xMiAgRzEgICAgICBVIGRpYWVyZXNpcyAgICAgICAgICAgICAg ID0+ICBVICAgICAgICovCi0gODksICAvKiAgMjIxICAxMy8xMyAgRzEgICAgICBZIGFjdXRlICAg ICAgICAgICAgICAgICAgID0+ICBZICAgICAgICovCi0gODQsICAvKiAgMjIyICAxMy8xNCAgRzEg ICAgICBJY2VsYW5kaWMgVGhvcm4gICAgICAgICAgID0+ICBUICAgICAgICovCi0xMTUsICAvKiAg MjIzICAxMy8xNSAgRzEgICAgICBHZXJtYW4gc2hhcnAgcyAgICAgICAgICAgID0+ICBzICAgICAg ICovCi0gOTcsICAvKiAgMjI0ICAxNC8wMCAgRzEgICAgICBhIGdyYXZlICAgICAgICAgICAgICAg ICAgID0+ICBhICAgICAgICovCi0gOTcsICAvKiAgMjI1ICAxNC8wMSAgRzEgICAgICBhIGFjdXRl ICAgICAgICAgICAgICAgICAgID0+ICBhICAgICAgICovCi0gOTcsICAvKiAgMjI2ICAxNC8wMiAg RzEgICAgICBhIGNpcmN1bWZsZXggICAgICAgICAgICAgID0+ICBhICAgICAgICovCi0gOTcsICAv KiAgMjI3ICAxNC8wMyAgRzEgICAgICBhIHRpbGRlICAgICAgICAgICAgICAgICAgID0+ICBhICAg ICAgICovCi0gOTcsICAvKiAgMjI4ICAxNC8wNCAgRzEgICAgICBhIGRpYWVyZXNpcyAgICAgICAg ICAgICAgID0+ICBhICAgICAgICovCi0gOTcsICAvKiAgMjI5ICAxNC8wNSAgRzEgICAgICBhIHJp bmcgYWJvdmUgICAgICAgICAgICAgID0+ICBhICAgICAgICovCi0gOTcsICAvKiAgMjMwICAxNC8w NiAgRzEgICAgICBhIHdpdGggZSAgICAgICAgICAgICAgICAgID0+ICBhICAgICAgICovCi0gOTks ICAvKiAgMjMxICAxNC8wNyAgRzEgICAgICBjIGNlZGlsbGEgICAgICAgICAgICAgICAgID0+ICBj ICAgICAgICovCi0xMDEsICAvKiAgMjMyICAxNC8wOCAgRzEgICAgICBlIGdyYXZlICAgICAgICAg ICAgICAgICAgID0+ICBlICAgICAgICovCi0xMDEsICAvKiAgMjMzICAxNC8wOSAgRzEgICAgICBl IGFjdXRlICAgICAgICAgICAgICAgICAgID0+ICBlICAgICAgICovCi0xMDEsICAvKiAgMjM0ICAx NC8xMCAgRzEgICAgICBlIGNpcmN1bWZsZXggICAgICAgICAgICAgID0+ICBlICAgICAgICovCi0x MDEsICAvKiAgMjM1ICAxNC8xMSAgRzEgICAgICBlIGRpYWVyZXNpcyAgICAgICAgICAgICAgID0+ ICBlICAgICAgICovCi0xMDUsICAvKiAgMjM2ICAxNC8xMiAgRzEgICAgICBpIGdyYXZlICAgICAg ICAgICAgICAgICAgID0+ICBpICAgICAgICovCi0xMDUsICAvKiAgMjM3ICAxNC8xMyAgRzEgICAg ICBpIGFjdXRlICAgICAgICAgICAgICAgICAgID0+ICBpICAgICAgICovCi0xMDUsICAvKiAgMjM4 ICAxNC8xNCAgRzEgICAgICBpIGNpcmN1bWZsZXggICAgICAgICAgICAgID0+ICBpICAgICAgICov Ci0xMDUsICAvKiAgMjM5ICAxNC8xNSAgRzEgICAgICBpIGRpYWVyZXNpcyAgICAgICAgICAgICAg ID0+ICBpICAgICAgICovCi0xMDAsICAvKiAgMjQwICAxNS8wMCAgRzEgICAgICBJY2VsYW5kaWMg ZXRoICAgICAgICAgICAgID0+ICBkICAgICAgICovCi0xMTAsICAvKiAgMjQxICAxNS8wMSAgRzEg ICAgICBuIHRpbGRlICAgICAgICAgICAgICAgICAgID0+ICBuICAgICAgICovCi0xMTEsICAvKiAg MjQyICAxNS8wMiAgRzEgICAgICBvIGdyYXZlICAgICAgICAgICAgICAgICAgID0+ICBvICAgICAg ICovCi0xMTEsICAvKiAgMjQzICAxNS8wMyAgRzEgICAgICBvIGFjdXRlICAgICAgICAgICAgICAg ICAgID0+ICBvICAgICAgICovCi0xMTEsICAvKiAgMjQ0ICAxNS8wNCAgRzEgICAgICBvIGNpcmN1 bWZsZXggICAgICAgICAgICAgID0+ICBvICAgICAgICovCi0xMTEsICAvKiAgMjQ1ICAxNS8wNSAg RzEgICAgICBvIHRpbGRlICAgICAgICAgICAgICAgICAgID0+ICBvICAgICAgICovCi0xMTEsICAv KiAgMjQ2ICAxNS8wNiAgRzEgICAgICBvIGRpYWVyZXNpcyAgICAgICAgICAgICAgID0+ICBvICAg ICAgICovCi0gNDcsICAvKiAgMjQ3ICAxNS8wNyAgRzEgICAgICBEaXZpc2lvbiBzaWduICAgICAg ICAgICAgID0+ICAvICAgICAgICovCi0xMTEsICAvKiAgMjQ4ICAxNS8wOCAgRzEgICAgICBvIG9i bGlxdWUgc3Ryb2tlICAgICAgICAgID0+ICBvICAgICAgICovCi0xMTcsICAvKiAgMjQ5ICAxNS8w OSAgRzEgICAgICB1IGdyYXZlICAgICAgICAgICAgICAgICAgID0+ICB1ICAgICAgICovCi0xMTcs ICAvKiAgMjUwICAxNS8xMCAgRzEgICAgICB1IGFjdXRlICAgICAgICAgICAgICAgICAgID0+ICB1 ICAgICAgICovCi0xMTcsICAvKiAgMjUxICAxNS8xMSAgRzEgICAgICB1IGNpcmN1bWZsZXggICAg ICAgICAgICAgID0+ICB1ICAgICAgICovCi0xMTcsICAvKiAgMjUyICAxNS8xMiAgRzEgICAgICB1 IGRpYWVyZXNpcyAgICAgICAgICAgICAgID0+ICB1ICAgICAgICovCi0xMjEsICAvKiAgMjUzICAx NS8xMyAgRzEgICAgICB5IGFjdXRlICAgICAgICAgICAgICAgICAgID0+ICB5ICAgICAgICovCi0x MTYsICAvKiAgMjU0ICAxNS8xNCAgRzEgICAgICBJY2VsYW5kaWMgdGhvcm4gICAgICAgICAgID0+ ICB0ICAgICAgICovCi0xMjEgICAvKiAgMjU1ICAxNS8xNSAgRzEgICAgICB5IGRpYWVyZXNpcyAg ICAgICAgICAgICAgID0+ICB5ICAgICAgICovCi19OwotCi0KLS8qIFRyYW5zbGF0aW9uIHRhYmxl cyBmb3IgSVNPIExhdGluIEFscGhhYmV0IDEgdG8gbG9jYWwgZmlsZSBjaGFyYWN0ZXIgc2V0cyAq LwotCi0vKgotICBNb3N0IG9mIHRoZSByZW1haW5pbmcgdGFibGVzIGFyZSBub3QgYW5ub3RhdGVk IGxpa2UgdGhlIG9uZSBhYm92ZSwgYmVjYXVzZQotICB0aGUgc2l6ZSBvZiB0aGUgcmVzdWx0aW5n IHNvdXJjZSBmaWxlIHdvdWxkIGJlIHJpZGljdWxvdXMuICBFYWNoIHJvdyBpbiB0aGUKLSAgZm9s bG93aW5nIHRhYmxlcyBjb3JyZXNwb25kcyB0byBhIGNvbHVtbiBvZiBJU08gODg1OS0xLgotKi8K LQotQ09OU1QgQ0hBUgoteWwxODVbXSA9IHsgIC8qIElTTyA4ODU5LTEgTGF0aW4gQWxwaGFiZXQg MSAoTGF0aW4tMSkgdG8gSUJNIENvZGUgUGFnZSA4NTAgKi8KLS8qCi0gIFRoaXMgaXMgYmFzZWQg b24gSUJNJ3Mgb2ZmaWNpYWwgaW52ZXJ0aWJsZSB0cmFuc2xhdGlvbi4gIFJlZmVyZW5jZTogSUJN Ci0gIENoYXJhY3RlciBEYXRhIFJlcHJlc2VudGF0aW9uIEFyY2hpdGVjdHVyZSAoQ0RSQSksIExl dmVsIDEsIFJlZ2lzdHJ5LAotICBTQzA5LTEyOTEtMDAgKDE5OTApLCBwLjE1Mi4gIChOb3RlOiBM YXRpbi0xIGlzIElCTSBDb2RlIFBhZ2UgMDA4MTkuKSAgTm90ZToKLSAgSUJNJ3MgYml6YXJyZSBy ZWFycmFuZ2VtZW50IG9mIEMwIGNvbnRyb2xzIGFuZCBERUwgaGFzIGJlZW4gdW5kb25lIGluIHRo aXMKLSAgdGFibGUuCi0qLwotICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcs ICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcsICAxOCwg IDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAz MCwgIDMxLAotIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQx LCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIs ICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAot IDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3 NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2 LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAotIDk2LCAgOTcs ICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAx MDksIDExMCwgMTExLAotMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEy MCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAotMTg2LCAyMDUsIDIwMSwgMTg3 LCAyMDAsIDE4OCwgMjA0LCAxODUsIDIwMywgMjAyLCAyMDYsIDIyMywgMjIwLCAyMTksIDI1NCwg MjQyLAotMTc5LCAxOTYsIDIxOCwgMTkxLCAxOTIsIDIxNywgMTk1LCAxODAsIDE5NCwgMTkzLCAx OTcsIDE3NiwgMTc3LCAxNzgsIDIxMywgMTU5LAotMjU1LCAxNzMsIDE4OSwgMTU2LCAyMDcsIDE5 MCwgMjIxLCAyNDUsIDI0OSwgMTg0LCAxNjYsIDE3NCwgMTcwLCAyNDAsIDE2OSwgMjM4LAotMjQ4 LCAyNDEsIDI1MywgMjUyLCAyMzksIDIzMCwgMjQ0LCAyNTAsIDI0NywgMjUxLCAxNjcsIDE3NSwg MTcyLCAxNzEsIDI0MywgMTY4LAotMTgzLCAxODEsIDE4MiwgMTk5LCAxNDIsIDE0MywgMTQ2LCAx MjgsIDIxMiwgMTQ0LCAyMTAsIDIxMSwgMjIyLCAyMTQsIDIxNSwgMjE2LAotMjA5LCAxNjUsIDIy NywgMjI0LCAyMjYsIDIyOSwgMTUzLCAxNTgsIDE1NywgMjM1LCAyMzMsIDIzNCwgMTU0LCAyMzcs IDIzMiwgMjI1LAotMTMzLCAxNjAsIDEzMSwgMTk4LCAxMzIsIDEzNCwgMTQ1LCAxMzUsIDEzOCwg MTMwLCAxMzYsIDEzNywgMTQxLCAxNjEsIDE0MCwgMTM5LAotMjA4LCAxNjQsIDE0OSwgMTYyLCAx NDcsIDIyOCwgMTQ4LCAyNDYsIDE1NSwgMTUxLCAxNjMsIDE1MCwgMTI5LCAyMzYsIDIzMSwgMTUy Ci19OwotCi1DT05TVCBDSEFSCi15ODVsMVtdID0geyAgLyogSUJNIENvZGUgUGFnZSA4NTAgdG8g TGF0aW4tMSAqLwotLyoKLSAgVGhpcyBpcyBmcm9tIElCTSBDRFJBIHBhZ2UgMTUzLiAgSXQgaXMg dGhlIGludmVyc2Ugb2YgeWwxODVbXS4KLSAgQXMgb2YgZWRpdCAxODMsIHRoaXMgdGFibGUgaXMg bm8gbG9uZ2VyIHB1cmUgQ0RSQS4gIFRoZSB0cmFuc2xhdGlvbnMKLSAgaW52b2x2aW5nIEMwIGNv bnRyb2xzIGFuZCBERUwgaGF2ZSBiZWVuIHJlbW92ZWQuCi0qLwotICAwLCAgIDEsICAgMiwgICAz LCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwg IDE1LAotIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAg MjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAotIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAz NywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4 LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwg IDYwLCAgNjEsICA2MiwgIDYzLAotIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAg NzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4 MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMs ICA5NCwgIDk1LAotIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwg MTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAotMTEyLCAxMTMsIDExNCwgMTE1LCAx MTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3 LAotMTk5LCAyNTIsIDIzMywgMjI2LCAyMjgsIDIyNCwgMjI5LCAyMzEsIDIzNCwgMjM1LCAyMzIs IDIzOSwgMjM4LCAyMzYsIDE5NiwgMTk3LAotMjAxLCAyMzAsIDE5OCwgMjQ0LCAyNDYsIDI0Miwg MjUxLCAyNDksIDI1NSwgMjE0LCAyMjAsIDI0OCwgMTYzLCAyMTYsIDIxNSwgMTU5LAotMjI1LCAy MzcsIDI0MywgMjUwLCAyNDEsIDIwOSwgMTcwLCAxODYsIDE5MSwgMTc0LCAxNzIsIDE4OSwgMTg4 LCAxNjEsIDE3MSwgMTg3LAotMTU1LCAxNTYsIDE1NywgMTQ0LCAxNTEsIDE5MywgMTk0LCAxOTIs IDE2OSwgMTM1LCAxMjgsIDEzMSwgMTMzLCAxNjIsIDE2NSwgMTQ3LAotMTQ4LCAxNTMsIDE1Miwg MTUwLCAxNDUsIDE1NCwgMjI3LCAxOTUsIDEzMiwgMTMwLCAxMzcsIDEzNiwgMTM0LCAxMjksIDEz OCwgMTY0LAotMjQwLCAyMDgsIDIwMiwgMjAzLCAyMDAsIDE1OCwgMjA1LCAyMDYsIDIwNywgMTQ5 LCAxNDYsIDE0MSwgMTQwLCAxNjYsIDIwNCwgMTM5LAotMjExLCAyMjMsIDIxMiwgMjEwLCAyNDUs IDIxMywgMTgxLCAyNTQsIDIyMiwgMjE4LCAyMTksIDIxNywgMjUzLCAyMjEsIDE3NSwgMTgwLAot MTczLCAxNzcsIDE0MywgMTkwLCAxODIsIDE2NywgMjQ3LCAxODQsIDE3NiwgMTY4LCAxODMsIDE4 NSwgMTc5LCAxNzgsIDE0MiwgMTYwCi19OwotCi0jaWZkZWYgQ09NTUVOVAotQ09OU1QgQ0hBUgot eWwxcjhbXSA9IHsgIC8qIExhdGluLTEgdG8gSGV3bGV0dCBQYWNrYXJkIFJvbWFuOCAqLwotLyog VGhpcyBpcyBIUCdzIG9mZmljaWFsIHRyYW5zbGF0aW9uLCBzdHJhaWdodCBmcm9tIGljb252ICov Ci0vKiBJdCBpcyBOT1QgaW52ZXJ0aWJsZS4gKi8KLSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAg IDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAx NiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcs ICAyOCwgIDI5LCAgMzAsICAzMSwKLSAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwg IDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAg NTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYx LCAgNjIsICA2MywKLSA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIs ICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4Mywg IDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5 NSwKLSA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2 LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKLTExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcs IDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKLTEyOCwg MTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0 MCwgMTQxLCAxNDIsIDE0MywKLTE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUx LCAxNTIsIDE1MywgMTU0LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwKLTE2MCwgMTg0LCAxOTEs IDE4NywgMTg2LCAxODgsIDEyNCwgMTg5LCAxNzEsICA5OSwgMjQ5LCAyNTEsIDEyNiwgIDQ1LCAg ODIsIDE3NiwKLTE3OSwgMjU0LCAgNTAsICA1MSwgMTY4LCAyNDMsIDI0NCwgMjQyLCAgNDQsICA0 OSwgMjUwLCAyNTMsIDI0NywgMjQ4LCAyNDUsIDE4NSwKLTE2MSwgMjI0LCAxNjIsIDIyNSwgMjE2 LCAyMDgsIDIxMSwgMTgwLCAxNjMsIDIyMCwgMTY0LCAxNjUsIDIzMCwgMjI5LCAxNjYsIDE2NywK LTIyNywgMTgyLCAyMzIsIDIzMSwgMjIzLCAyMzMsIDIxOCwgMTIwLCAyMTAsIDE3MywgMjM3LCAx NzQsIDIxOSwgMTc3LCAyNDAsIDIyMiwKLTIwMCwgMTk2LCAxOTIsIDIyNiwgMjA0LCAyMTIsIDIx NSwgMTgxLCAyMDEsIDE5NywgMTkzLCAyMDUsIDIxNywgMjEzLCAyMDksIDIyMSwKLTIyOCwgMTgz LCAyMDIsIDE5OCwgMTk0LCAyMzQsIDIwNiwgIDQ3LCAyMTQsIDIwMywgMTk5LCAxOTUsIDIwNywg MTc4LCAyNDEsIDIzOQotfTsKLUNPTlNUIENIQVIKLXlyOGwxW10gPSB7ICAvKiBIZXdsZXR0IFBh Y2thcmQgUm9tYW44IHRvIExhdGluLTEgKi8KLS8qIFRoaXMgaXMgSFAncyBvZmZpY2lhbCB0cmFu c2xhdGlvbiwgc3RyYWlnaHQgZnJvbSBpY29udiAqLwotLyogSXQgaXMgTk9UIGludmVydGlibGUu ICovCi0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAx MCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIx LCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCi0gMzIs ICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAg NDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1 NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCi0gNjQsICA2NSwgIDY2 LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3Nywg IDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAg ODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCi0gOTYsICA5NywgIDk4LCAgOTksIDEw MCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEs Ci0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwg MTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCi0xMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAx MzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsCi0xNDQsIDE0 NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMTU1LCAxNTYs IDE1NywgMTU4LCAxNTksCi0xNjAsIDE5MiwgMTk0LCAyMDAsIDIwMiwgMjAzLCAyMDYsIDIwNywg MTgwLCAgOTYsICA5NCwgMTY4LCAxMjYsIDIxNywgMjE5LCAxNjMsCi0xNzUsIDIyMSwgMjUzLCAx NzYsIDE5OSwgMjMxLCAyMDksIDI0MSwgMTYxLCAxOTEsIDE2NCwgMTYzLCAxNjUsIDE2NywgMTAy LCAxNjIsCi0yMjYsIDIzNCwgMjQ0LCAyNTEsIDIyNSwgMjMzLCAyNDMsIDI1MCwgMjI0LCAyMzIs IDI0MiwgMjQ5LCAyMjgsIDIzNSwgMjQ2LCAyNTIsCi0xOTcsIDIzOCwgMjE2LCAxOTgsIDIyOSwg MjM3LCAyNDgsIDIzMCwgMTk2LCAyMzYsIDIxNCwgMjIwLCAyMDEsIDIzOSwgMjIzLCAyMTIsCi0x OTMsIDE5NSwgMjI3LCAyMDgsIDI0MCwgMjA1LCAyMDQsIDIxMSwgMjEwLCAyMTMsIDI0NSwgIDgz LCAxMTUsIDIxOCwgIDg5LCAyNTUsCi0yMjIsIDI1NCwgMTgzLCAxODEsIDE4MiwgMTkwLCAgNDUs IDE4OCwgMTg5LCAxNzAsIDE4NiwgMTcxLCAgNDIsIDE4NywgMTc3LCAxNjAKLX07Ci0jZWxzZSAv KiAhQ09NTUVOVCAqLwotLyogVGhpcyBpcyBhbiBpbnZlcnRpYmxlIG1hcHBpbmcsIGFwcHJvdmVk IGJ5IEhQIGluIEphbnVhcnkgMTk5NC4gKi8KLUNPTlNUIENIQVIKLXlsMXI4W10gPSB7ICAvKiBJ U08gTGF0aW4tMSB0byBIUCBSb21hbjgsIEludmVydGlibGUgKi8KLSAgMCwgICAxLCAgIDIsICAg MywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQs ICAxNSwKLSAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwg IDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKLSAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAg MzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKLSA0 OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTks ICA2MCwgIDYxLCAgNjIsICA2MywKLSA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwg IDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAg ODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkz LCAgOTQsICA5NSwKLSA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQs IDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKLTExMiwgMTEzLCAxMTQsIDExNSwg MTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEy NywKLTEyOCwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4 LCAxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywKLTE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDks IDE1MCwgMTUxLCAxNTIsIDE1MywgMTU0LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwKLTE2MCwg MTg0LCAxOTEsIDE4NywgMTg2LCAxODgsIDE2OSwgMTg5LCAxNzEsIDE3MCwgMjQ5LCAyNTEsIDE3 MiwgMTc1LCAxOTAsIDE3NiwKLTE3OSwgMjU0LCAyMzUsIDIzNiwgMTY4LCAyNDMsIDI0NCwgMjQy LCAyMzgsIDI0NiwgMjUwLCAyNTMsIDI0NywgMjQ4LCAyNDUsIDE4NSwKLTE2MSwgMjI0LCAxNjIs IDIyNSwgMjE2LCAyMDgsIDIxMSwgMTgwLCAxNjMsIDIyMCwgMTY0LCAxNjUsIDIzMCwgMjI5LCAx NjYsIDE2NywKLTIyNywgMTgyLCAyMzIsIDIzMSwgMjIzLCAyMzMsIDIxOCwgMjUyLCAyMTAsIDE3 MywgMjM3LCAxNzQsIDIxOSwgMTc3LCAyNDAsIDIyMiwKLTIwMCwgMTk2LCAxOTIsIDIyNiwgMjA0 LCAyMTIsIDIxNSwgMTgxLCAyMDEsIDE5NywgMTkzLCAyMDUsIDIxNywgMjEzLCAyMDksIDIyMSwK LTIyOCwgMTgzLCAyMDIsIDE5OCwgMTk0LCAyMzQsIDIwNiwgMjU1LCAyMTQsIDIwMywgMTk5LCAx OTUsIDIwNywgMTc4LCAyNDEsIDIzOQotfTsKLQotQ09OU1QgQ0hBUgoteXI4bDFbXSA9IHsgLyog SFAgUm9tYW44IHRvIElTTyBMYXRpbi0xLCBJbnZlcnRpYmxlICovCi0gIDAsICAgMSwgICAyLCAg IDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0 LCAgMTUsCi0gMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUs ICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0LCAgMzUsICAzNiwg IDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0g NDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5 LCAgNjAsICA2MSwgIDYyLCAgNjMsCi0gNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAs ICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwg IDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5 MywgIDk0LCAgOTUsCi0gOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0 LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDExMywgMTE0LCAxMTUs IDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAx MjcsCi0xMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEz OCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsCi0xNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5 LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTksCi0xNjAs IDE5MiwgMTk0LCAyMDAsIDIwMiwgMjAzLCAyMDYsIDIwNywgMTgwLCAxNjYsIDE2OSwgMTY4LCAx NzIsIDIxNywgMjE5LCAxNzMsCi0xNzUsIDIyMSwgMjUzLCAxNzYsIDE5OSwgMjMxLCAyMDksIDI0 MSwgMTYxLCAxOTEsIDE2NCwgMTYzLCAxNjUsIDE2NywgMTc0LCAxNjIsCi0yMjYsIDIzNCwgMjQ0 LCAyNTEsIDIyNSwgMjMzLCAyNDMsIDI1MCwgMjI0LCAyMzIsIDI0MiwgMjQ5LCAyMjgsIDIzNSwg MjQ2LCAyNTIsCi0xOTcsIDIzOCwgMjE2LCAxOTgsIDIyOSwgMjM3LCAyNDgsIDIzMCwgMTk2LCAy MzYsIDIxNCwgMjIwLCAyMDEsIDIzOSwgMjIzLCAyMTIsCi0xOTMsIDE5NSwgMjI3LCAyMDgsIDI0 MCwgMjA1LCAyMDQsIDIxMSwgMjEwLCAyMTMsIDI0NSwgMTc4LCAxNzksIDIxOCwgMTg0LCAyNTUs Ci0yMjIsIDI1NCwgMTgzLCAxODEsIDE4MiwgMTkwLCAxODUsIDE4OCwgMTg5LCAxNzAsIDE4Niwg MTcxLCAyMTUsIDE4NywgMTc3LCAyNDcKLX07Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotCi1DT05T VCBDSEFSCi15bDE0M1tdID0geyAgLyogTGF0aW4tMSB0byBJQk0gQ29kZSBQYWdlIDQzNyAqLwot LyoKLSAgQWx0aG91Z2ggdGhlIElCTSBDRFJBIGRvZXMgbm90IGluY2x1ZGUgYW4gb2ZmaWNpYWwg dHJhbnNsYXRpb24gYmV0d2VlbiBDUDQzNwotICBhbmQgSVNPIExhdGluIEFscGhhYmV0IDEsIGl0 IGRvZXMgaW5jbHVkZSBhbiBvZmZpY2lhbCwgaW52ZXJ0aWJsZQotICB0cmFuc2xhdGlvbiBiZXR3 ZWVuIENQNDM3IGFuZCBDUDg1MCAocGFnZSAxOTYpLCBhbmQgYW5vdGhlciBmcm9tIENQODUwIHRv Ci0gIExhdGluLTEgKENQODE5KSAocGFnZSAxNTMpLiAgVGhpcyB0cmFuc2xhdGlvbiB3YXMgb2J0 YWluZWQgd2l0aCBhIHR3by1zdGVwCi0gIHByb2Nlc3MgYmFzZWQgb24gdGhvc2UgdGFibGVzLgot ICBBcyBvZiBlZGl0IDE4MywgdGhlIHRyYW5zbGF0aW9uIGlzIG1vZGlmaWVkIHRvIGxlYXZlIEMw IGNvbnRyb2xzIGFsb25lLgotKi8KLSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwg ICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAg MTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5 LCAgMzAsICAzMSwKLSAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAs ICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwg IDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2 MywKLSA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0 LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUs ICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKLSA5Niwg IDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEw OCwgMTA5LCAxMTAsIDExMSwKLTExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5 LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKLTE4NiwgMjA1LCAyMDEs IDE4NywgMjAwLCAxODgsIDIwNCwgMTg1LCAyMDMsIDIwMiwgMjA2LCAyMjMsIDIyMCwgMjE5LCAy NTQsIDI0MiwKLTE3OSwgMTk2LCAyMTgsIDE5MSwgMTkyLCAyMTcsIDE5NSwgMTgwLCAxOTQsIDE5 MywgMTk3LCAxNzYsIDE3NywgMTc4LCAyMTMsIDE1OSwKLTI1NSwgMTczLCAxNTUsIDE1NiwgMjA3 LCAxNTcsIDIyMSwgMjQ1LCAyNDksIDE4NCwgMTY2LCAxNzQsIDE3MCwgMjQwLCAxNjksIDIzOCwK LTI0OCwgMjQxLCAyNTMsIDI1MiwgMjM5LCAyMzAsIDI0NCwgMjUwLCAyNDcsIDI1MSwgMTY3LCAx NzUsIDE3MiwgMTcxLCAyNDMsIDE2OCwKLTE4MywgMTgxLCAxODIsIDE5OSwgMTQyLCAxNDMsIDE0 NiwgMTI4LCAyMTIsIDE0NCwgMjEwLCAyMTEsIDIyMiwgMjE0LCAyMTUsIDIxNiwKLTIwOSwgMTY1 LCAyMjcsIDIyNCwgMjI2LCAyMjksIDE1MywgMTU4LCAxOTAsIDIzNSwgMjMzLCAyMzQsIDE1NCwg MjM3LCAyMzIsIDIyNSwKLTEzMywgMTYwLCAxMzEsIDE5OCwgMTMyLCAxMzQsIDE0NSwgMTM1LCAx MzgsIDEzMCwgMTM2LCAxMzcsIDE0MSwgMTYxLCAxNDAsIDEzOSwKLTIwOCwgMTY0LCAxNDksIDE2 MiwgMTQ3LCAyMjgsIDE0OCwgMjQ2LCAxODksIDE1MSwgMTYzLCAxNTAsIDEyOSwgMjM2LCAyMzEs IDE1MgotfTsKLQotQ09OU1QgQ0hBUgoteTQzbDFbXSA9IHsgIC8qIElCTSBDb2RlIFBhZ2UgNDM3 IHRvIExhdGluLTEgKi8KLS8qCi0gIFRoaXMgdGFibGUgaXMgdGhlIGludmVyc2Ugb2YgeWwxNDNb XS4KLSovCi0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDks ICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4LCAgMTksICAyMCwg IDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCi0g MzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQz LCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQs ICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCi0gNjQsICA2NSwg IDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3 NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4 LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCi0gOTYsICA5NywgIDk4LCAgOTks IDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAx MTEsCi0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEy MiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCi0xOTksIDI1MiwgMjMzLCAyMjYsIDIyOCwgMjI0 LCAyMjksIDIzMSwgMjM0LCAyMzUsIDIzMiwgMjM5LCAyMzgsIDIzNiwgMTk2LCAxOTcsCi0yMDEs IDIzMCwgMTk4LCAyNDQsIDI0NiwgMjQyLCAyNTEsIDI0OSwgMjU1LCAyMTQsIDIyMCwgMTYyLCAx NjMsIDE2NSwgMjE1LCAxNTksCi0yMjUsIDIzNywgMjQzLCAyNTAsIDI0MSwgMjA5LCAxNzAsIDE4 NiwgMTkxLCAxNzQsIDE3MiwgMTg5LCAxODgsIDE2MSwgMTcxLCAxODcsCi0xNTUsIDE1NiwgMTU3 LCAxNDQsIDE1MSwgMTkzLCAxOTQsIDE5MiwgMTY5LCAxMzUsIDEyOCwgMTMxLCAxMzMsIDI0OCwg MjE2LCAxNDcsCi0xNDgsIDE1MywgMTUyLCAxNTAsIDE0NSwgMTU0LCAyMjcsIDE5NSwgMTMyLCAx MzAsIDEzNywgMTM2LCAxMzQsIDEyOSwgMTM4LCAxNjQsCi0yNDAsIDIwOCwgMjAyLCAyMDMsIDIw MCwgMTU4LCAyMDUsIDIwNiwgMjA3LCAxNDksIDE0NiwgMTQxLCAxNDAsIDE2NiwgMjA0LCAxMzks Ci0yMTEsIDIyMywgMjEyLCAyMTAsIDI0NSwgMjEzLCAxODEsIDI1NCwgMjIyLCAyMTgsIDIxOSwg MjE3LCAyNTMsIDIyMSwgMTc1LCAxODAsCi0xNzMsIDE3NywgMTQzLCAxOTAsIDE4MiwgMTY3LCAy NDcsIDE4NCwgMTc2LCAxNjgsIDE4MywgMTg1LCAxNzksIDE3OCwgMTQyLCAxNjAKLX07Ci0KLUNP TlNUIENIQVIKLXlsMWFxW10gPSB7ICAvKiBMYXRpbi0xIHRvIEV4dGVuZGVkIE1hYyBMYXRpbiAo YmFzZWQgb24gQXBwbGUgUXVpY2tEcmF3KSAqLwotICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAg NSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAotIDE2 LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywg IDI4LCAgMjksICAzMCwgIDMxLAotIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAg MzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1 MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEs ICA2MiwgIDYzLAotIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3Miwg IDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAg ODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1 LAotIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYs IDEwNywgMTA4LCAxMDksIDExMCwgMTExLAotMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywg MTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAotMTgyLCAx ODMsIDE4NCwgMTg1LCAxODksIDE5NiwgMTk3LCAxOTgsIDIwNiwgMjA3LCAyMTAsIDIxMSwgMjE3 LCAyMTgsIDE5NSwgMjEyLAotMjA5LCAyMTUsIDIxMywgMjI2LCAyMjcsIDIyOCwgMjQwLCAyNDUs IDI0NiwgMjQ3LCAyNDksIDI1MCwgMjUxLCAyNTMsIDI1NCwgMjU1LAotMjAyLCAxOTMsIDE2Miwg MTYzLCAyMTksIDE4MCwgMjAxLCAxNjQsIDE3MiwgMTY5LCAxODcsIDE5OSwgMTk0LCAyMDgsIDE2 OCwgMjQ4LAotMTYxLCAxNzcsIDE3MCwgMTczLCAxNzEsIDE4MSwgMTY2LCAyMjUsIDI1MiwgMTc2 LCAxODgsIDIwMCwgMTc4LCAxNzksIDE4NiwgMTkyLAotMjAzLCAyMzEsIDIyOSwgMjA0LCAxMjgs IDEyOSwgMTc0LCAxMzAsIDIzMywgMTMxLCAyMzAsIDIzMiwgMjM3LCAyMzQsIDIzNSwgMjM2LAot MjIwLCAxMzIsIDI0MSwgMjM4LCAyMzksIDIwNSwgMTMzLCAxNjUsIDE3NSwgMjQ0LCAyNDIsIDI0 MywgMTM0LCAxNjAsIDIyMiwgMTY3LAotMTM2LCAxMzUsIDEzNywgMTM5LCAxMzgsIDE0MCwgMTkw LCAxNDEsIDE0MywgMTQyLCAxNDQsIDE0NSwgMTQ3LCAxNDYsIDE0OCwgMTQ5LAotMjIxLCAxNTAs IDE1MiwgMTUxLCAxNTMsIDE1NSwgMTU0LCAyMTQsIDE5MSwgMTU3LCAxNTYsIDE1OCwgMTU5LCAy MjQsIDIyMywgMjE2Ci19OwotCi1DT05TVCBDSEFSCi15bDFkdVtdID0geyAgLyogTGF0aW4tMSB0 byBEdXRjaCBJU08gNjQ2ICovCi0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAg NywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4 LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwg IDMwLCAgMzEsCi0gMzIsICAzMywgIDM0LCBVTkssICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAg NDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEsICA1 MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMs Ci1VTkssICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwg IDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAg ODYsICA4NywgIDg4LCAgODksICA5MCwgVU5LLCBVTkssIFVOSywgIDk0LCAgOTUsCi0gOTYsICA5 NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgs IDEwOSwgMTEwLCAxMTEsCi0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwg MTIwLCAxMjEsIDEyMiwgVU5LLCBVTkssIFVOSywgIDM5LCAxMjcsCi0xMjgsIDEyOSwgMTMwLCAx MzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQy LCAxNDMsCi0xNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMs IDE1NCwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTksCi0gMzIsICAzMywgVU5LLCAgMzUsIDEyNCwg VU5LLCBVTkssICA5MywgMTIzLCAgNjcsIFVOSywgIDM0LCBVTkssICA0NSwgIDgyLCBVTkssCi0g OTEsIFVOSywgVU5LLCBVTkssIDEyNiwgMTE3LCBVTkssIFVOSywgIDQ0LCBVTkssIFVOSywgIDM0 LCAxMjUsICA5MiwgIDY0LCAgNjMsCi0gNjUsICA2NSwgIDY1LCAgNjUsICA5MSwgIDY1LCAgNjUs ICA2NywgIDY5LCAgNjksICA2OSwgIDY5LCAgNzMsICA3MywgIDczLCAgNzMsCi1VTkssICA3OCwg IDc5LCAgNzksICA3OSwgIDc5LCAgNzksIDEyMCwgIDc5LCAgODUsICA4NSwgIDg1LCAgODUsICA4 OSwgVU5LLCAxMTUsCi0gOTcsICA5NywgIDk3LCAgOTcsICA5NywgIDk3LCAgOTcsICA5OSwgMTAx LCAxMDEsIDEwMSwgMTAxLCAxMDUsIDEwNSwgMTA1LCAxMDUsCi1VTkssIDExMCwgMTExLCAxMTEs IDExMSwgMTExLCAxMTEsICA0NywgMTExLCAxMTcsIDExNywgMTE3LCAxMTcsIDEyMSwgVU5LLCAg OTEKLX07Ci0KLUNPTlNUIENIQVIKLXlsMWZpW10gPSB7ICAvKiBMYXRpbi0xIHRvIEZpbm5pc2gg SVNPIE5SQyAoKm5vdCogSVNPIDY0NikgKi8KLSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUs ICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwg IDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAy OCwgIDI5LCAgMzAsICAzMSwKLSAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5 LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAs ICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAg NjIsICA2MywKLSA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3 MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0 LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCBVTkssIFVOSywgVU5LLCBVTkssICA5NSwK LVVOSywgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAx MDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKLTExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDEx OCwgMTE5LCAxMjAsIDEyMSwgMTIyLCBVTkssIFVOSywgVU5LLCBVTkssIDEyNywKLTEyOCwgMTI5 LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwg MTQxLCAxNDIsIDE0MywKLTE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAx NTIsIDE1MywgMTU0LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwKLSAzMiwgIDMzLCBVTkssIFVO SywgVU5LLCBVTkssIFVOSywgVU5LLCAgMzQsICA2NywgVU5LLCAgMzQsIFVOSywgIDQ1LCAgODIs IFVOSywKLVVOSywgVU5LLCBVTkssIFVOSywgIDM5LCAxMTcsIFVOSywgVU5LLCAgNDQsIFVOSywg VU5LLCAgMzQsIFVOSywgVU5LLCBVTkssICA2MywKLSA2NSwgIDY1LCAgNjUsICA2NSwgIDkxLCAg OTMsICA2NSwgIDY3LCAgNjksICA2OSwgIDY5LCAgNjksICA3MywgIDczLCAgNzMsICA3MywKLVVO SywgIDc4LCAgNzksICA3OSwgIDc5LCAgNzksICA5MiwgMTIwLCAgNzksICA4NSwgIDg1LCAgODUs ICA5NCwgIDg5LCBVTkssIDExNSwKLSA5NywgIDk3LCAgOTcsICA5NywgMTIzLCAxMjUsICA5Nywg IDk5LCAxMDEsICA5NiwgMTAxLCAxMDEsIDEwNSwgMTA1LCAxMDUsIDEwNSwKLVVOSywgMTEwLCAx MTEsIDExMSwgMTExLCAxMTEsIDEyNCwgIDQ3LCAxMTEsIDExNywgMTE3LCAxMTcsIDEyNiwgMTIx LCBVTkssIDEyMQotfTsKLQotQ09OU1QgQ0hBUgoteWwxZnJbXSA9IHsgIC8qIExhdGluLTEgdG8g RnJlbmNoIElTTyA2NDYgKi8KLSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3 LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAgMTgs ICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAg MzAsICAzMSwKLSAzMiwgIDMzLCAgMzQsIFVOSywgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0 MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUy LCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywK LVVOSywgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAg NzUsICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4 NiwgIDg3LCAgODgsICA4OSwgIDkwLCBVTkssIFVOSywgVU5LLCAgOTQsICA5NSwKLSA5NiwgIDk3 LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwg MTA5LCAxMTAsIDExMSwKLTExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAx MjAsIDEyMSwgMTIyLCBVTkssIFVOSywgVU5LLCBVTkssIDEyNywKLTEyOCwgMTI5LCAxMzAsIDEz MSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAxNDIs IDE0MywKLTE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE1Mywg MTU0LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwKLSAzMiwgIDMzLCBVTkssICAzNSwgVU5LLCBV TkssIFVOSywgIDkzLCAgMzQsICA2NywgVU5LLCAgMzQsIFVOSywgIDQ1LCAgODIsIFVOSywKLSA5 MSwgVU5LLCBVTkssIFVOSywgIDM5LCAxMTcsIFVOSywgVU5LLCAgNDQsIFVOSywgVU5LLCAgMzQs IFVOSywgVU5LLCBVTkssICA2MywKLSA2NSwgIDY1LCAgNjUsICA2NSwgIDY1LCAgNjUsICA2NSwg IDY3LCAgNjksICA2OSwgIDY5LCAgNjksICA3MywgIDczLCAgNzMsICA3MywKLVVOSywgIDc4LCAg NzksICA3OSwgIDc5LCAgNzksICA3OSwgMTIwLCAgNzksICA4NSwgIDg1LCAgODUsICA4NSwgIDg5 LCBVTkssIDExNSwKLSA2NCwgIDk3LCAgOTcsICA5NywgIDk3LCAgOTcsICA5NywgIDkyLCAxMjUs IDEyMywgMTAxLCAxMDEsIDEwNSwgMTA1LCAxMDUsIDEwNSwKLVVOSywgMTEwLCAxMTEsIDExMSwg MTExLCAxMTEsIDExMSwgIDQ3LCAxMTEsIDEyNCwgMTE3LCAxMTcsIDExNywgMTIxLCBVTkssIDEy MQotfTsKLQotQ09OU1QgQ0hBUgoteWwxZmNbXSA9IHsgIC8qIExhdGluLTEgdG8gRnJlbmNoLUNh bmFkaWFuIElTTyA2NDYgKi8KLSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3 LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAgMTgs ICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAg MzAsICAzMSwKLSAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0 MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUy LCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywK LVVOSywgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAg NzUsICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4 NiwgIDg3LCAgODgsICA4OSwgIDkwLCBVTkssIFVOSywgVU5LLCBVTkssICA5NSwKLVVOSywgIDk3 LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwg MTA5LCAxMTAsIDExMSwKLTExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAx MjAsIDEyMSwgMTIyLCBVTkssIFVOSywgVU5LLCBVTkssIDEyNywKLTEyOCwgMTI5LCAxMzAsIDEz MSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAxNDIs IDE0MywKLTE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE1Mywg MTU0LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwKLSAzMiwgIDMzLCBVTkssIFVOSywgVU5LLCBV TkssIFVOSywgVU5LLCAgMzQsICA2NywgVU5LLCAgMzQsIFVOSywgIDQ1LCAgODIsIFVOSywKLVVO SywgVU5LLCBVTkssIFVOSywgIDM5LCAxMTcsIFVOSywgVU5LLCAgNDQsIFVOSywgVU5LLCAgMzQs IFVOSywgVU5LLCBVTkssICA2MywKLSA2NSwgIDY1LCAgNjUsICA2NSwgIDY1LCAgNjUsICA2NSwg IDY3LCAgNjksICA2OSwgIDY5LCAgNjksICA3MywgIDczLCAgNzMsICA3MywKLVVOSywgIDc4LCAg NzksICA3OSwgIDc5LCAgNzksICA3OSwgMTIwLCAgNzksICA4NSwgIDg1LCAgODUsICA4NSwgIDg5 LCBVTkssIDExNSwKLSA2NCwgIDk3LCAgOTEsICA5NywgIDk3LCAgOTcsICA5NywgIDkyLCAxMjUs IDEyMywgIDkzLCAxMDEsIDEwNSwgMTA1LCAgOTQsIDEwNSwKLVVOSywgMTEwLCAxMTEsIDExMSwg IDk2LCAxMTEsIDExMSwgIDQ3LCAxMTEsIDEyNCwgMTE3LCAxMjYsIDExNywgMTIxLCBVTkssIDEy MQotfTsKLQotQ09OU1QgQ0hBUgoteWwxZ2VbXSA9IHsgIC8qIExhdGluLTEgdG8gR2VybWFuIElT TyA2NDYgKi8KLSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAg OSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAgMTgsICAxOSwgIDIw LCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwK LSAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAg NDMsICA0NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1 NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKLVVOSywgIDY1 LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3Niwg IDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAg ODgsICA4OSwgIDkwLCBVTkssIFVOSywgVU5LLCAgOTQsICA5NSwKLSA5NiwgIDk3LCAgOTgsICA5 OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAs IDExMSwKLTExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwg MTIyLCBVTkssIFVOSywgVU5LLCBVTkssIDEyNywKLTEyOCwgMTI5LCAxMzAsIDEzMSwgMTMyLCAx MzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywKLTE0 NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE1MywgMTU0LCAxNTUs IDE1NiwgMTU3LCAxNTgsIDE1OSwKLSAzMiwgIDMzLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywg IDY0LCAgMzQsICA2NywgVU5LLCAgMzQsIFVOSywgIDQ1LCAgODIsIFVOSywKLVVOSywgVU5LLCBV TkssIFVOSywgIDM5LCAxMTcsIFVOSywgVU5LLCAgNDQsIFVOSywgVU5LLCAgMzQsIFVOSywgVU5L LCBVTkssICA2MywKLSA2NSwgIDY1LCAgNjUsICA2NSwgIDkxLCAgNjUsICA2NSwgIDY3LCAgNjks ICA2OSwgIDY5LCAgNjksICA3MywgIDczLCAgNzMsICA3MywKLVVOSywgIDc4LCAgNzksICA3OSwg IDc5LCAgNzksICA5MiwgMTIwLCAgNzksICA4NSwgIDg1LCAgODUsICA5MywgIDg5LCBVTkssIDEy NiwKLSA5NywgIDk3LCAgOTcsICA5NywgMTIzLCAgOTcsICA5NywgIDk5LCAxMDEsIDEwMSwgMTAx LCAxMDEsIDEwNSwgMTA1LCAxMDUsIDEwNSwKLVVOSywgMTEwLCAxMTEsIDExMSwgMTExLCAxMTEs IDEyNCwgIDQ3LCAxMTEsIDExNywgMTE3LCAxMTcsIDEyNSwgMTIxLCBVTkssIDEyMQotfTsKLQot Q09OU1QgQ0hBUgoteWwxaHVbXSA9IHsgIC8qIExhdGluLTEgdG8gSHVuZ2FyaWFuIElTTy02NDYg Ki8KLSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEw LCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEs ICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKLSAzMiwg IDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0 NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1 LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKLSA2NCwgIDY1LCAgNjYs ICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAg NzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4 OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKLSA5NiwgIDk3LCAgOTgsICA5OSwgMTAw LCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwK LTExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAx MjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKLTEyOCwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEz NCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywKLTE0NCwgMTQ1 LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE1MywgMTU0LCAxNTUsIDE1Niwg MTU3LCAxNTgsIDE1OSwKLSAzMiwgIDMzLCBVTkssIFVOSywgIDM2LCBVTkssIFVOSywgVU5LLCAg MzQsICA2NywgVU5LLCAgMzQsIFVOSywgIDQ1LCAgODIsIFVOSywKLVVOSywgIDY0LCBVTkssIFVO SywgIDM5LCAxMTcsIFVOSywgVU5LLCAgNDQsIFVOSywgVU5LLCAgMzQsIFVOSywgVU5LLCBVTkss ICA2MywKLSA2NSwgIDY1LCAgNjUsICA2NSwgIDY1LCAgNjUsICA2NSwgIDY3LCAgNjksICA5MSwg IDY5LCAgNjksICA3MywgIDczLCAgNzMsICA3MywKLVVOSywgIDc4LCAgNzksICA3OSwgIDc5LCAg NzksICA5MiwgMTIwLCAgNzksICA4NSwgIDg1LCAgODUsICA5MywgIDg5LCBVTkssIDExNSwKLSA5 NywgIDk2LCAgOTcsICA5NywgIDk3LCAgOTcsICA5NywgIDk5LCAxMDEsIDEyMywgMTAxLCAxMDEs IDEwNSwgMTA1LCAxMDUsIDEwNSwKLVVOSywgMTEwLCAxMTEsIDExMSwgMTExLCAxMTEsIDEyNCwg IDQ3LCAxMTEsIDExNywgMTE3LCAxMTcsIDEyNSwgMTIxLCBVTkssIDEyMQotfTsKLQotQ09OU1Qg Q0hBUgoteWwxaXRbXSA9IHsgIC8qIExhdGluLTEgdG8gSXRhbGlhbiBJU08gNjQ2ICovCi0gIDAs ICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAg MTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAy MywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0 LCBVTkssICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwg IDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAg NTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCi1VTkssICA2NSwgIDY2LCAgNjcsICA2 OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzks Ci0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwg VU5LLCBVTkssIFVOSywgIDk0LCAgOTUsCi1VTkssICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAx MDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDEx MywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgVU5LLCBVTkss IFVOSywgVU5LLCAxMjcsCi0xMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwg MTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsCi0xNDQsIDE0NSwgMTQ2LCAx NDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMTU1LCAxNTYsIDE1NywgMTU4 LCAxNTksCi0gMzIsICAzMywgVU5LLCAgMzUsIFVOSywgVU5LLCBVTkssICA2NCwgIDM0LCAgNjcs IFVOSywgIDM0LCBVTkssICA0NSwgIDgyLCBVTkssCi0gOTEsIFVOSywgVU5LLCBVTkssICAzOSwg MTE3LCBVTkssIFVOSywgIDQ0LCBVTkssIFVOSywgIDM0LCBVTkssIFVOSywgVU5LLCAgNjMsCi0g NjUsICA2NSwgIDY1LCAgNjUsICA2NSwgIDY1LCAgNjUsICA2NywgIDY5LCAgNjksICA2OSwgIDY5 LCAgNzMsICA3MywgIDczLCAgNzMsCi1VTkssICA3OCwgIDc5LCAgNzksICA3OSwgIDc5LCAgNzks IDEyMCwgIDc5LCAgODUsICA4NSwgIDg1LCAgODUsICA4OSwgVU5LLCAxMTUsCi0xMjMsICA5Nywg IDk3LCAgOTcsICA5NywgIDk3LCAgOTcsICA5MiwgMTI1LCAgOTMsIDEwMSwgMTAxLCAxMjYsIDEw NSwgMTA1LCAxMDUsCi1VTkssIDExMCwgMTI0LCAxMTEsIDExMSwgMTExLCAxMTEsICA0NywgMTEx LCAgOTYsIDExNywgMTE3LCAxMTcsIDEyMSwgVU5LLCAxMjEKLX07Ci0KLUNPTlNUIENIQVIKLXls MW5lW10gPSB7ICAvKiBMYXRpbi0xIHRvIE5lWFQgKi8KLS8qIE5FRUQgVE8gTUFLRSBUSElTIE9O RSBJTlZFUlRJQkxFLCBMSUtFIENQODUwICovCi0vKgotICBXaGljaCBtZWFucyBmaW5kaW5nIGFs bCB0aGUgZ3JhcGhpYyBjaGFyYWN0ZXJzIGluIHRoZSBOZVhUIHNldCB0aGF0IGhhdmUKLSAgbm8g ZXF1aXZhbGVudCBpbiBMYXRpbi0xIGFuZCBhc3NpZ25pbmcgdGhlbSB0byB0aGUgVU5LIHBvc2l0 aW9ucyAobW9zdGx5Ci0gIExhdGluLTEgQzEgY29udHJvbHMpLiAgVGhlbiBtYWtlIHRoZSB5bmVs MVtdIHRhYmxlIGJlIHRoZSBpbnZlcnNlIG9mIHRoaXMKLSAgb25lLiAgQnV0IGZpcnN0IHdlIHNo b3VsZCB0cnkgdG8gZ2V0IGFuIG9mZmljaWFsIExhdGluLTEvTmVYVCB0cmFuc2xhdGlvbgotICB0 YWJsZSBmcm9tIE5lWFQsIEluYy4KLSovCi0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAg IDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAx NywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgs ICAyOSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwg IDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAg NTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYy LCAgNjMsCi0gNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMs ICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwg IDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCi0g OTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3 LCAxMDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgs IDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCi1VTkssIFVOSywg VU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVO SywgVU5LLCBVTkssCi1VTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5L LCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssCi0gMzIsIDE2MSwgMTYyLCAxNjMs IDE2OCwgMTY1LCAxODEsIDE2NywgMjAwLCAxNjAsIDIyNywgMTcxLCAxOTAsIFVOSywgMTc2LCAx OTcsCi0yMDIsIDIwOSwgMjAxLCAyMDQsIDE5NCwgMTU3LCAxODIsIDE4MywgMjAzLCAxOTIsIDIz NSwgMTg3LCAyMTAsIDIxMSwgMjEyLCAxOTEsCi0xMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0 LCAyMjUsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsCi0xNDQs IDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1OCwgMjMzLCAxNTEsIDE1MiwgMTUzLCAx NTQsIDE1NSwgMTU2LCAyNTEsCi0yMTMsIDIxNCwgMjE1LCAyMTYsIDIxNywgMjE4LCAyNDEsIDIx OSwgMjIwLCAyMjEsIDIyMiwgMjIzLCAyMjQsIDIyNiwgMjI4LCAyMjksCi0yMzAsIDIzMSwgMjM2 LCAyMzcsIDIzOCwgMjM5LCAyNDAsIDE1OSwgMjQ5LCAyNDIsIDI0MywgMjQ0LCAyNDYsIDI0Nywg MjUyLCAyNTMKLX07Ci0KLUNPTlNUIENIQVIKLXlsMW5vW10gPSB7ICAvKiBMYXRpbi0xIHRvIE5v cndlZ2lhbi9EYW5pc2ggSVNPIDY0NiAqLwotICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwg ICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAg MTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4 LCAgMjksICAzMCwgIDMxLAotIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzks ICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwg IDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2 MiwgIDYzLAotIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDcz LCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQs ICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsIFVOSywgVU5LLCBVTkssICA5NCwgIDk1LAot IDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEw NywgMTA4LCAxMDksIDExMCwgMTExLAotMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4 LCAxMTksIDEyMCwgMTIxLCAxMjIsIFVOSywgVU5LLCBVTkssIDEyNiwgMTI3LAotMTI4LCAxMjks IDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAx NDEsIDE0MiwgMTQzLAotMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1 MiwgMTUzLCAxNTQsIDE1NSwgMTU2LCAxNTcsIDE1OCwgMTU5LAotIDMyLCAgMzMsIFVOSywgVU5L LCBVTkssIFVOSywgVU5LLCBVTkssICAzNCwgIDY3LCBVTkssICAzNCwgVU5LLCAgNDUsICA4Miwg VU5LLAotVU5LLCBVTkssIFVOSywgVU5LLCAgMzksIDExNywgVU5LLCBVTkssICA0NCwgVU5LLCBV TkssICAzNCwgVU5LLCBVTkssIFVOSywgIDYzLAotIDY1LCAgNjUsICA2NSwgIDY1LCAgNjUsICA5 MywgIDkxLCAgNjcsICA2OSwgIDY5LCAgNjksICA2OSwgIDczLCAgNzMsICA3MywgIDczLAotVU5L LCAgNzgsICA3OSwgIDc5LCAgNzksICA3OSwgIDc5LCAxMjAsICA5MiwgIDg1LCAgODUsICA4NSwg IDg1LCAgODksIFVOSywgMTE1LAotIDk3LCAgOTcsICA5NywgIDk3LCAgOTcsIDEyNSwgMTIzLCAg OTksIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTA1LCAxMDUsIDEwNSwgMTA1LAotVU5LLCAxMTAsIDEx MSwgMTExLCAxMTEsIDExMSwgMTExLCAgNDcsIDEyNCwgMTE3LCAxMTcsIDExNywgMTE3LCAxMjEs IFVOSywgMTIxCi19OwotCi1DT05TVCBDSEFSCi15bDFwb1tdID0geyAgLyogTGF0aW4tMSB0byBQ b3J0dWd1ZXNlIElTTyA2NDYgKi8KLSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwg ICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAg MTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5 LCAgMzAsICAzMSwKLSAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAs ICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwg IDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2 MywKLSA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0 LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUs ICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCBVTkssIFVOSywgVU5LLCAgOTQsICA5NSwKLSA5Niwg IDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEw OCwgMTA5LCAxMTAsIDExMSwKLTExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5 LCAxMjAsIDEyMSwgMTIyLCBVTkssIFVOSywgVU5LLCAxMjYsIDEyNywKLTEyOCwgMTI5LCAxMzAs IDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAx NDIsIDE0MywKLTE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE1 MywgMTU0LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwKLSAzMiwgIDMzLCBVTkssIFVOSywgVU5L LCBVTkssIFVOSywgVU5LLCAgMzQsICA2NywgVU5LLCAgMzQsIFVOSywgIDQ1LCAgODIsIFVOSywK LVVOSywgVU5LLCBVTkssIFVOSywgIDM5LCAxMTcsIFVOSywgVU5LLCAgNDQsIFVOSywgVU5LLCAg MzQsIFVOSywgVU5LLCBVTkssICA2MywKLSA2NSwgIDY1LCAgNjUsICA5MSwgIDY1LCAgNjUsICA2 NSwgIDkyLCAgNjksICA2OSwgIDY5LCAgNjksICA3MywgIDczLCAgNzMsICA3MywKLVVOSywgIDc4 LCAgNzksICA3OSwgIDc5LCAgOTMsICA3OSwgMTIwLCAgNzksICA4NSwgIDg1LCAgODUsICA4NSwg IDg5LCBVTkssIDExNSwKLSA5NywgIDk3LCAgOTcsIDEyMywgIDk3LCAgOTcsICA5NywgMTI0LCAx MDEsIDEwMSwgMTAxLCAxMDEsIDEwNSwgMTA1LCAxMDUsIDEwNSwKLVVOSywgMTEwLCAxMTEsIDEx MSwgMTExLCAxMjUsIDExMSwgIDQ3LCAxMTEsIDExNywgMTE3LCAxMTcsIDExNywgMTIxLCBVTkss IDEyMQotfTsKLQotQ09OU1QgQ0hBUgoteWwxc3BbXSA9IHsgIC8qIExhdGluLTEgdG8gU3Bhbmlz aCBJU08gNjQ2ICovCi0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4 LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4LCAgMTks ICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAg MzEsCi0gMzIsICAzMywgIDM0LCBVTkssICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0 MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUz LCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCi1VTkss ICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAg NzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4 NywgIDg4LCAgODksICA5MCwgVU5LLCBVTkssIFVOSywgIDk0LCAgOTUsCi0gOTYsICA5NywgIDk4 LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwg MTEwLCAxMTEsCi0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAx MjEsIDEyMiwgIDk2LCBVTkssIFVOSywgMTI2LCAxMjcsCi0xMjYsIDEyOSwgMTMwLCAxMzEsIDEz MiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMs Ci0xNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwg MTU1LCAxNTYsIDE1NywgMTU4LCAxNTksCi0gMzIsICA5MSwgVU5LLCAgMzUsIFVOSywgVU5LLCBV TkssICA2NCwgIDM0LCAgNjcsIFVOSywgIDM0LCBVTkssICA0NSwgIDgyLCBVTkssCi0xMjMsIFVO SywgVU5LLCBVTkssICAzOSwgMTE3LCBVTkssIFVOSywgIDQ0LCBVTkssIFVOSywgIDM0LCBVTkss IFVOSywgVU5LLCAgOTMsCi0gNjUsICA2NSwgIDY1LCAgNjUsICA2NSwgIDY1LCAgNjUsICA2Nywg IDY5LCAgNjksICA2OSwgIDY5LCAgNzMsICA3MywgIDczLCAgNzMsCi1VTkssICA5MiwgIDc5LCAg NzksICA3OSwgIDc5LCAgNzksIDEyMCwgIDc5LCAgODUsICA4NSwgIDg1LCAgODUsICA4OSwgVU5L LCAxMTUsCi0xMjQsICA5NywgIDk3LCAgOTcsICA5NywgIDk3LCAgOTcsIDEyNSwgMTAxLCAxMDEs IDEwMSwgMTAxLCAxMDUsIDEwNSwgMTA1LCAxMDUsCi1VTkssIDEyNCwgMTExLCAxMTEsIDExMSwg MTExLCAxMTEsICA0NywgMTExLCAxMTcsIDExNywgMTE3LCAxMTcsIDEyMSwgVU5LLCAxMjEKLX07 Ci0KLUNPTlNUIENIQVIKLXlsMXN3W10gPSB7ICAvKiBMYXRpbi0xIHRvIFN3ZWRpc2ggSVNPIDY0 NiAqLwotICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAg MTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAy MSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAotIDMy LCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0Mywg IDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAg NTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAotVU5LLCAgNjUsICA2 NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcs ICA3OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwg IDg5LCAgOTAsIFVOSywgVU5LLCBVTkssIFVOSywgIDk1LAotVU5LLCAgOTcsICA5OCwgIDk5LCAx MDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTEx LAotMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIs IFVOSywgVU5LLCBVTkssIFVOSywgMTI3LAotMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywg MTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLAotMTQ0LCAx NDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAxNTQsIDE1NSwgMTU2 LCAxNTcsIDE1OCwgMTU5LAotIDMyLCAgMzMsIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkss ICAzNCwgIDY3LCBVTkssICAzNCwgVU5LLCAgNDUsICA4MiwgVU5LLAotVU5LLCBVTkssIFVOSywg VU5LLCAgMzksIDExNywgVU5LLCBVTkssICA0NCwgVU5LLCBVTkssICAzNCwgVU5LLCBVTkssIFVO SywgIDYzLAotIDY1LCAgNjUsICA2NSwgIDY1LCAgOTEsICA5MywgIDY1LCAgNjcsICA2OSwgIDY0 LCAgNjksICA2OSwgIDczLCAgNzMsICA3MywgIDczLAotVU5LLCAgNzgsICA3OSwgIDc5LCAgNzks ICA3OSwgIDkyLCAxMjAsICA3OSwgIDg1LCAgODUsICA4NSwgIDk0LCAgODksIFVOSywgMTE1LAot IDk3LCAgOTcsICA5NywgIDk3LCAxMjMsIDEyNSwgIDk3LCAgOTksIDEwMSwgIDk2LCAxMDEsIDEw MSwgMTA1LCAxMDUsIDEwNSwgMTA1LAotVU5LLCAxMTAsIDExMSwgMTExLCAxMTEsIDExMSwgMTI0 LCAgNDcsIDExMSwgMTE3LCAxMTcsIDExNywgMTI2LCAxMjEsIFVOSywgMTIxCi19OwotCi1DT05T VCBDSEFSCi15bDFjaFtdID0geyAgLyogTGF0aW4tMSB0byBTd2lzcyBJU08gNjQ2ICovCi0gIDAs ICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAg MTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAy MywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0 LCBVTkssICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwg IDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAg NTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCi1VTkssICA2NSwgIDY2LCAgNjcsICA2 OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzks Ci0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwg VU5LLCBVTkssIFVOSywgVU5LLCBVTkssCi0gOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAx MDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDEx MywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgVU5LLCBVTkss IFVOSywgVU5LLCAxMjcsCi0xMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwg MTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsCi0xNDQsIDE0NSwgMTQ2LCAx NDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMTU1LCAxNTYsIDE1NywgMTU4 LCAxNTksCi0gMzIsICAzMywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgIDM0LCAgNjcs IFVOSywgIDM0LCBVTkssICA0NSwgIDgyLCBVTkssCi1VTkssIFVOSywgVU5LLCBVTkssICAzOSwg MTE3LCBVTkssIFVOSywgIDQ0LCBVTkssIFVOSywgIDM0LCBVTkssIFVOSywgVU5LLCAgNjMsCi0g NjUsICA2NSwgIDY1LCAgNjUsICA2NSwgIDY1LCAgNjUsICA2NywgIDY5LCAgNjksICA2OSwgIDY5 LCAgNzMsICA3MywgIDczLCAgNzMsCi1VTkssICA3OCwgIDc5LCAgNzksICA3OSwgIDc5LCAgNzks IDEyMCwgIDc5LCAgODUsICA4NSwgIDg1LCAgODUsICA4OSwgVU5LLCAxMTUsCi0gNjQsICA5Nywg IDk3LCAgOTcsIDEyMywgIDk3LCAgOTcsICA5MiwgIDk1LCAgOTEsICA5MywgMTAxLCAxMDUsIDEw NSwgIDk0LCAxMDUsCi1VTkssIDExMCwgMTExLCAxMTEsICA5NiwgMTExLCAxMjQsICA0NywgMTEx LCAgMzUsIDExNywgMTI2LCAxMjUsIDEyMSwgVU5LLCAxMjEKLX07Ci0KLUNPTlNUIENIQVIKLXls MWRtW10gPSB7ICAvKiBMYXRpbi0xIHRvIERFQyBNdWx0aW5hdGlvbmFsIENoYXJhY3RlciBTZXQg Ki8KLSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEw LCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEs ICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKLSAzMiwg IDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0 NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1 LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKLSA2NCwgIDY1LCAgNjYs ICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAg NzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4 OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKLSA5NiwgIDk3LCAgOTgsICA5OSwgMTAw LCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwK LTExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAx MjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKLTEyOCwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEz NCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywKLTE0NCwgMTQ1 LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE1MywgMTU0LCAxNTUsIDE1Niwg MTU3LCAxNTgsIDE1OSwKLSAzMiwgMTYxLCAxNjIsIDE2MywgMTY4LCAxNjUsIDEyNCwgMTY3LCAg MzQsIDE2OSwgMTcwLCAxNzEsIDEyNiwgVU5LLCAgODIsIFVOSywKLTE3NiwgMTc3LCAxNzgsIDE3 OSwgIDM5LCAxODEsIDE4MiwgMTgzLCAgNDQsIDE4NSwgMTg2LCAxODcsIDE4OCwgMTg5LCBVTkss IDE5MSwKLTE5MiwgMTkzLCAxOTQsIDE5NSwgMTk2LCAxOTcsIDE5OCwgMTk5LCAyMDAsIDIwMSwg MjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYsIDIwNywKLVVOSywgMjA5LCAyMTAsIDIxMSwgMjEyLCAy MTMsIDIxNCwgMTIwLCAyMTYsIDIxNywgMjE4LCAyMTksIDIyMCwgMjIxLCBVTkssIDIyMywKLTIy NCwgMjI1LCAyMjYsIDIyNywgMjI4LCAyMjksIDIzMCwgMjMxLCAyMzIsIDIzMywgMjM0LCAyMzUs IDIzNiwgMjM3LCAyMzgsIDIzOSwKLVVOSywgMjQxLCAyNDIsIDI0MywgMjQ0LCAyNDUsIDI0Niwg IDQ3LCAyNDgsIDI0OSwgMjUwLCAyNTEsIDI1MiwgVU5LLCBVTkssIDI1MwotfTsKLQotQ09OU1Qg Q0hBUgoteWwxZGdbXSA9IHsgIC8qIExhdGluLTEgdG8gRGF0YSBHZW5lcmFsIEludGVybmF0aW9u YWwgQ2hhcmFjdGVyIFNldCAqLwotICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAg IDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcsICAx OCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjks ICAzMCwgIDMxLAotIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwg IDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUxLCAg NTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYz LAotIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQs ICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwg IDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAotIDk2LCAg OTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4 LCAxMDksIDExMCwgMTExLAotMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTks IDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAotMTI4LCAxMjksIDEzMCwg MTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0 MiwgMTQzLAotMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUz LCAxNTQsIDE1NSwgMTU2LCAxNTcsIDE1OCwgMTU5LAotMTYwLCAxNzEsIDE2NywgMTY4LCAxNjYs IDE4MSwgMTkxLCAxODcsIDE4OSwgMTczLCAxNjksIDE3NywgMTYxLCAyNTUsIDE3NCwgMTc1LAot MTg4LCAxODIsIDE2NCwgMTY1LCAxOTAsIDE2MywgMTc4LCAxODUsIDE4NiwgMTc5LCAxNzAsIDE3 NiwgMjIzLCAxNjIsIDIyMCwgMTcyLAotMTkzLCAxOTIsIDE5NCwgMTk2LCAxOTUsIDE5NywgMTk4 LCAxOTksIDIwMSwgMjAwLCAyMDIsIDIwMywgMjA1LCAyMDQsIDIwNiwgMjA3LAotMTg0LCAyMDgs IDIxMCwgMjA5LCAyMTEsIDIxMywgMjEyLCAyMTUsIDIxNCwgMjE3LCAyMTYsIDIxOCwgMjE5LCAy MjEsIDIyMiwgMjUyLAotMjI1LCAyMjQsIDIyNiwgMjI4LCAyMjcsIDIyOSwgMjMwLCAyMzEsIDIz MywgMjMyLCAyMzQsIDIzNSwgMjM3LCAyMzYsIDIzOCwgMjM5LAotMTgzLCAyNDAsIDI0MiwgMjQx LCAyNDMsIDI0NSwgMjQ0LCAyNDcsIDI0NiwgMjQ5LCAyNDgsIDI1MCwgMjUxLCAxODAsIDI1NCwg MjUzCi19OwotCi0KLS8qIExvY2FsIGZpbGUgY2hhcmFjdGVyIHNldHMgdG8gSVNPIExhdGluIEFs cGhhYmV0IDEgKi8KLQotI2lmZGVmIE5PVFVTRUQKLUNPTlNUIENIQVIKLXlhc2wxW10gPSB7ICAv KiBBU0NJSSB0byBMYXRpbi0xICovCi0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYs ICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywg IDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAy OSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQw LCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEs ICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAg NjMsCi0gNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3 NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1 LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCi0gOTYs ICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAx MDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDEx OSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcKLX07Ci0jZW5kaWYgLyog Tk9UVVNFRCAqLwotCi1DT05TVCBDSEFSCi15YXFsMVtdID0geyAgLyogRXh0ZW5kZWQgTWFjIExh dGluIChiYXNlZCBvbiBBcHBsZSBRdWlja2RyYXcpIHRvIExhdGluLTEgKi8KLSAgMCwgICAxLCAg IDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEz LCAgMTQsICAxNSwKLSAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQs ICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKLSAzMiwgIDMzLCAgMzQsICAzNSwg IDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0 NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4 LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKLSA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjks ICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwg IDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5 MiwgIDkzLCAgOTQsICA5NSwKLSA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAz LCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKLTExMiwgMTEzLCAxMTQs IDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAx MjYsIDEyNywKLTE5NiwgMTk3LCAxOTksIDIwMSwgMjA5LCAyMTQsIDIyMCwgMjI1LCAyMjQsIDIy NiwgMjI4LCAyMjcsIDIyOSwgMjMxLCAyMzMsIDIzMiwKLTIzNCwgMjM1LCAyMzcsIDIzNiwgMjM4 LCAyMzksIDI0MSwgMjQzLCAyNDIsIDI0NCwgMjQ2LCAyNDUsIDI1MCwgMjQ5LCAyNTEsIDI1MiwK LTIyMSwgMTc2LCAxNjIsIDE2MywgMTY3LCAyMTUsIDE4MiwgMjIzLCAxNzQsIDE2OSwgMTc4LCAx ODAsIDE2OCwgMTc5LCAxOTgsIDIxNiwKLTE4NSwgMTc3LCAxODgsIDE4OSwgMTY1LCAxODEsIDEy OCwgMTI5LCAxMzAsIDEzMSwgMTkwLCAxNzAsIDE4NiwgMTMyLCAyMzAsIDI0OCwKLTE5MSwgMTYx LCAxNzIsIDE0MiwgMTMzLCAxMzQsIDEzNSwgMTcxLCAxODcsIDE2NiwgMTYwLCAxOTIsIDE5NSwg MjEzLCAxMzYsIDEzNywKLTE3MywgMTQ0LCAxMzgsIDEzOSwgMTQzLCAxNDYsIDI0NywgMTQ1LCAy NTUsIDE0MCwgMTQxLCAxNjQsIDIwOCwgMjQwLCAyMjIsIDI1NCwKLTI1MywgMTgzLCAxNDcsIDE0 OCwgMTQ5LCAxOTQsIDIwMiwgMTkzLCAyMDMsIDIwMCwgMjA1LCAyMDYsIDIwNywgMjA0LCAyMTEs IDIxMiwKLTE1MCwgMjEwLCAyMTgsIDIxOSwgMjE3LCAxNTEsIDE1MiwgMTUzLCAxNzUsIDE1NCwg MTU1LCAxNTYsIDE4NCwgMTU3LCAxNTgsIDE1OQotfTsKLQotQ09OU1QgQ0hBUgoteWR1bDFbXSA9 IHsgIC8qIER1dGNoIElTTyA2NDYgdG8gTGF0aW4tMSAqLwotICAwLCAgIDEsICAgMiwgICAzLCAg IDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1 LAotIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYs ICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAotIDMyLCAgMzMsICAzNCwgMTYzLCAgMzYsICAzNywg IDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAg NDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYw LCAgNjEsICA2MiwgIDYzLAotMTkwLCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEs ICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4Miwg IDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsIDI1NSwgMTg5LCAxMjQsICA5 NCwgIDk1LAotIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1 LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAotMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYs IDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDE2OCwgMTY0LCAxODgsICAzOSwgMTI3Ci19 OwotCi1DT05TVCBDSEFSCi15ZmlsMVtdID0geyAgLyogRmlubmlzaCBOUkMgKCpub3QqIElTTy02 NDYpIHRvIExhdGluLTEgKi8KLSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3 LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAgMTgs ICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAg MzAsICAzMSwKLSAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0 MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUy LCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywK LSA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAg NzUsICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4 NiwgIDg3LCAgODgsICA4OSwgIDkwLCAxOTYsIDIxNCwgMTk3LCAyMjAsICA5NSwKLTIzMywgIDk3 LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwg MTA5LCAxMTAsIDExMSwKLTExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAx MjAsIDEyMSwgMTIyLCAyMjgsIDI0NiwgMjI5LCAyNTIsIDEyNwotfTsKLQotQ09OU1QgQ0hBUgot eWZybDFbXSA9IHsgIC8qIEZyZW5jaCBJU08gNjQ2IHRvIExhdGluLTEgKi8KLSAgMCwgICAxLCAg IDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEz LCAgMTQsICAxNSwKLSAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQs ICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKLSAzMiwgIDMzLCAgMzQsIDE2Mywg IDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0 NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4 LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKLTIyNCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjks ICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwg IDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAxNzYsIDIz MSwgMTY3LCAgOTQsICA5NSwKLSA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAz LCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKLTExMiwgMTEzLCAxMTQs IDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAyMzMsIDI0OSwgMjMyLCAx NjgsIDEyNwotfTsKLQotQ09OU1QgQ0hBUgoteWZjbDFbXSA9IHsgIC8qIEZyZW5jaC1DYW5hZGlh biBJU08gNjQ2IHRvIExhdGluLTEgKi8KLSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAg NiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3 LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwg IDI5LCAgMzAsICAzMSwKLSAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAg NDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1 MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIs ICA2MywKLTIyNCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3Mywg IDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAg ODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAyMjYsIDIzMSwgMjM0LCAyMzgsICA5NSwKLTI0 NCwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcs IDEwOCwgMTA5LCAxMTAsIDExMSwKLTExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwg MTE5LCAxMjAsIDEyMSwgMTIyLCAyMzMsIDI0OSwgMjMyLCAyNTEsIDEyNwotfTsKLQotQ09OU1Qg Q0hBUgoteWdlbDFbXSA9IHsgIC8qIEdlcm1hbiBJU08gNjQ2IHRvIExhdGluLTEgKi8KLSAgMCwg ICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAx MiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIz LCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKLSAzMiwgIDMzLCAgMzQs ICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAg NDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1 NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKLTE2NywgIDY1LCAgNjYsICA2NywgIDY4 LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwK LSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAx OTYsIDIxNCwgMjIwLCAgOTQsICA5NSwKLSA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEw MiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKLTExMiwgMTEz LCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAyMjgsIDI0Niwg MjUyLCAyMjMsIDEyNwotfTsKLQotQ09OU1QgQ0hBUgoteWl0bDFbXSA9IHsgIC8qIEl0YWxpYW4g SVNPIDY0NiB0byBMYXRpbi0xICovCi0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYs ICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywg IDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAy OSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0LCAxNjMsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQw LCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEs ICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAg NjMsCi0xNjcsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3 NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1 LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgMTc2LCAyMzEsIDIzMywgIDk0LCAgOTUsCi0yNDks ICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAx MDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDEx OSwgMTIwLCAxMjEsIDEyMiwgMjI0LCAyNDIsIDIzMiwgMjM2LCAxMjcKLX07Ci0KLUNPTlNUIENI QVIKLXluZWwxW10gPSB7ICAvKiBOZVhUIHRvIExhdGluLTEgKi8KLS8qIE5FRUQgVE8gTUFLRSBU SElTIE9ORSBJTlZFUlRJQkxFICovCi0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYs ICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywg IDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAy OSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQw LCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEs ICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAg NjMsCi0gNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3 NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1 LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCi0gOTYs ICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAx MDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDEx OSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCi0xNjAsIDE5MiwgMTkz LCAxOTQsIDE5NSwgMTk2LCAxOTcsIDE5OSwgMjAwLCAyMDEsIDIwMiwgMjAzLCAyMDQsIDIwNSwg MjA2LCAyMDcsCi0yMDgsIDIwOSwgMjEwLCAyMTEsIDIxMiwgMjEzLCAyMTQsIDIxNywgMjE4LCAy MTksIDIyMCwgMjIxLCAyMjIsIDE4MSwgMjE1LCAyNDcsCi0xNjksIDE2MSwgMTYyLCAxNjMsIFVO SywgMTY1LCBVTkssIDE2NywgMTY0LCBVTkssIFVOSywgMTcxLCBVTkssIFVOSywgVU5LLCBVTkss Ci0xNzQsIFVOSywgVU5LLCBVTkssIDE4MywgMTY2LCAxODIsIFVOSywgVU5LLCBVTkssIFVOSywg MTg3LCBVTkssIFVOSywgMTcyLCAxOTEsCi0xODUsICA5NiwgMTgwLCAgOTQsIDEyNiwgMTc1LCBV TkssIFVOSywgMTY4LCAxNzgsIDE3NiwgMTg0LCAxNzksIFVOSywgVU5LLCBVTkssCi1VTkssIDE3 NywgMTg4LCAxODksIDE5MCwgMjI0LCAyMjUsIDIyNiwgMjI3LCAyMjgsIDIyOSwgMjMxLCAyMzIs IDIzMywgMjM0LCAyMzUsCi0yMzYsIDE5OCwgMjM3LCAxNzAsIDIzOCwgMjM5LCAyNDAsIDI0MSwg VU5LLCAyMTYsIFVOSywgMTg2LCAyNDIsIDI0MywgMjQ0LCAyNDUsCi0yNDYsIDIzMCwgMjQ5LCAy NTAsIDI1MSwgVU5LLCAyNTIsIDI1MywgVU5LLCAyNDgsIFVOSywgMjIzLCAyNTQsIDI1NSwgVU5L LCBVTksKLX07Ci0KLUNPTlNUIENIQVIKLXlub2wxW10gPSB7ICAvKiBOb3J3ZWdpYW4vRGFuaXNo IElTTyA2NDYgdG8gTGF0aW4tMSAqLwotICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2 LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcs ICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAg MjksICAzMCwgIDMxLAotIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0 MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUx LCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2Miwg IDYzLAotIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAg NzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4 NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsIDE5OCwgMjE2LCAxOTcsICA5NCwgIDk1LAotIDk2 LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywg MTA4LCAxMDksIDExMCwgMTExLAotMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAx MTksIDEyMCwgMTIxLCAxMjIsIDIzMCwgMjQ4LCAyMjksIDEyNiwgMTI3Ci19OwotCi1DT05TVCBD SEFSCi15cG9sMVtdID0geyAgLyogUG9ydHVndWVzZSBJU08gNjQ2IHRvIExhdGluLTEgKi8KLSAg MCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEs ICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwg IDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKLSAzMiwgIDMzLCAg MzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1 LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYs ICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKLSA2NCwgIDY1LCAgNjYsICA2Nywg IDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3 OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkw LCAxOTUsIDE5OSwgMjEzLCAgOTQsICA5NSwKLSA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEs IDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKLTExMiwg MTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAyMjcsIDIz MSwgMjQ1LCAxMjYsIDEyNwotfTsKLQotQ09OU1QgQ0hBUgoteXNwbDFbXSA9IHsgIC8qIFNwYW5p c2ggSVNPIDY0NiB0byBMYXRpbi0xICovCi0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAg IDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAx NywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgs ICAyOSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0LCAxNjMsICAzNiwgIDM3LCAgMzgsICAzOSwg IDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAg NTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYy LCAgNjMsCi0xNjcsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMs ICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwg IDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgMTYxLCAyMDksIDE5MSwgIDk0LCAgOTUsCi0g OTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3 LCAxMDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgs IDExOSwgMTIwLCAxMjEsIDEyMiwgMTc2LCAyNDEsIDIzMSwgMTI2LCAxMjcKLX07Ci0KLUNPTlNU IENIQVIKLXlzd2wxW10gPSB7ICAvKiBTd2VkaXNoIElTTyA2NDYgdG8gTGF0aW4tMSAqLwotICAw LCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwg IDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAg MjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAotIDMyLCAgMzMsICAz NCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUs ICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1Niwg IDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAotMjAxLCAgNjUsICA2NiwgIDY3LCAg NjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5 LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAs IDE5NiwgMjE0LCAxOTcsIDIyMCwgIDk1LAotMjMzLCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwg MTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAotMTEyLCAx MTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDIyOCwgMjQ2 LCAyMjksIDI1MiwgMTI3Ci19OwotCi1DT05TVCBDSEFSCi15Y2hsMVtdID0geyAgLyogU3dpc3Mg SVNPIDY0NiB0byBMYXRpbi0xICovCi0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYs ICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywg IDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAy OSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0LCAyNDksICAzNiwgIDM3LCAgMzgsICAzOSwgIDQw LCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEs ICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAg NjMsCi0yMjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3 NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1 LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgMjMzLCAyMzEsIDIzNCwgMjM4LCAyMzIsCi0yNDQs ICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAx MDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDEx OSwgMTIwLCAxMjEsIDEyMiwgMjI4LCAyNDYsIDI1MiwgMjUxLCAxMjcKLX07Ci0KLUNPTlNUIENI QVIKLXlodWwxW10gPSB7ICAvKiBIdW5nYXJpYW4gSVNPIDY0NiB0byBMYXRpbi0xICovCi0gIDAs ICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAg MTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAy MywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0 LCAgMzUsIDE2NCwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwg IDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAg NTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCi0xOTMsICA2NSwgIDY2LCAgNjcsICA2 OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzks Ci0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwg MjAxLCAyMTQsIDIyMCwgIDk0LCAgOTUsCi0yMjUsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAx MDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDEx MywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMjMzLCAyNDYs IDI1MiwgIDM0LCAxMjcKLX07Ci0KLUNPTlNUIENIQVIKLXlkbWwxW10gPSB7ICAvKiBERUMgTXVs dGluYXRpb25hbCBDaGFyYWN0ZXIgU2V0IHRvIExhdGluLTEgKi8KLS8qIE5vdGU6IFRoaXMgaXMg YSBudWxsIHRyYW5zbGF0aW9uICovCi0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYs ICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywg IDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAy OSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQw LCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEs ICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAg NjMsCi0gNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3 NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1 LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCi0gOTYs ICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAx MDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDEx OSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCi0xMjgsIDEyOSwgMTMw LCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwg MTQyLCAxNDMsCi0xNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAx NTMsIDE1NCwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTksCi0xNjAsIDE2MSwgMTYyLCAxNjMsIDE2 NCwgMTY1LCAxNjYsIDE2NywgMTY4LCAxNjksIDE3MCwgMTcxLCAxNzIsIDE3MywgMTc0LCAxNzUs Ci0xNzYsIDE3NywgMTc4LCAxNzksIDE4MCwgMTgxLCAxODIsIDE4MywgMTg0LCAxODUsIDE4Niwg MTg3LCAxODgsIDE4OSwgMTkwLCAxOTEsCi0xOTIsIDE5MywgMTk0LCAxOTUsIDE5NiwgMTk3LCAx OTgsIDE5OSwgMjAwLCAyMDEsIDIwMiwgMjAzLCAyMDQsIDIwNSwgMjA2LCAyMDcsCi0yMDgsIDIw OSwgMjEwLCAyMTEsIDIxMiwgMjEzLCAyMTQsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjE5LCAyMjAs IDIyMSwgMjIyLCAyMjMsCi0yMjQsIDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5LCAyMzAsIDIzMSwg MjMyLCAyMzMsIDIzNCwgMjM1LCAyMzYsIDIzNywgMjM4LCAyMzksCi0yNDAsIDI0MSwgMjQyLCAy NDMsIDI0NCwgMjQ1LCAyNDYsIDI0NywgMjQ4LCAyNDksIDI1MCwgMjUxLCAyNTIsIDI1MywgMjU0 LCAyNTUKLX07Ci0KLUNPTlNUIENIQVIKLXlkZ2wxW10gPSB7ICAvKiBEYXRhIEdlbmVyYWwgSW50 ZXJuYXRpb25hbCB0byBMYXRpbi0xICovCi0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAg IDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAx NywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgs ICAyOSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwg IDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAg NTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYy LCAgNjMsCi0gNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMs ICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwg IDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCi0g OTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3 LCAxMDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgs IDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCi0xMjgsIDEyOSwg MTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0 MSwgMTQyLCAxNDMsCi0xNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUy LCAxNTMsIDE1NCwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTksCi0xNjAsIDE3MiwgMTg5LCAxODEs IDE3OCwgMTc5LCAxNjQsIDE2MiwgMTYzLCAxNzAsIDE4NiwgMTYxLCAxOTEsIDE2OSwgMTc0LCAx NzUsCi0xODcsIDE3MSwgMTgyLCAxODUsIDI1MywgMTY1LCAxNzcsIDI0MCwgMjA4LCAxODMsIDE4 NCwgMTY3LCAxNzYsIDE2OCwgMTgwLCAxNjYsCi0xOTMsIDE5MiwgMTk0LCAxOTYsIDE5NSwgMTk3 LCAxOTgsIDE5OSwgMjAxLCAyMDAsIDIwMiwgMjAzLCAyMDUsIDIwNCwgMjA2LCAyMDcsCi0yMDks IDIxMSwgMjEwLCAyMTIsIDIxNCwgMjEzLCAyMTYsIDIxNSwgMjE4LCAyMTcsIDIxOSwgMjIwLCAx OTAsIDIyMSwgMjIyLCAxODgsCi0yMjUsIDIyNCwgMjI2LCAyMjgsIDIyNywgMjI5LCAyMzAsIDIz MSwgMjMzLCAyMzIsIDIzNCwgMjM1LCAyMzcsIDIzNiwgMjM4LCAyMzksCi0yNDEsIDI0MywgMjQy LCAyNDQsIDI0NiwgMjQ1LCAyNDgsIDI0NywgMjUwLCAyNDksIDI1MSwgMjUyLCAyMjMsIDI1NSwg MjU0LCAxNzMKLX07Ci0KLQotLyogVHJhbnNsYXRpb24gdGFibGVzIGZvciBDeXJpbGxpYyBjaGFy YWN0ZXIgc2V0cyAqLwotCi0jaWZkZWYgQ1lSSUxMSUMKLUNPTlNUIENIQVIKLXlsY2FjW10gPSB7 ICAvKiBMYXRpbi9DeXJpbGxpYyB0byBDUDg2NiAqLwotICAwLCAgIDEsICAgMiwgICAzLCAgIDQs ICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAot IDE2LCAgMTcsICAxOCwgIDE5LCAyMDgsIDIwOSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAy NywgIDI4LCAgMjksICAzMCwgIDMxLAotIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4 LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDks ICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAg NjEsICA2MiwgIDYzLAotIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3 MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgz LCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwg IDk1LAotIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAx MDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAotMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDEx NywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAotMTk2 LCAxNzksIDE5MiwgMjE3LCAxOTEsIDIxOCwgMTk1LCAxOTMsIDE4MCwgMTk0LCAxOTcsIDE3Niwg MTc3LCAxNzgsIDIxMSwgMjE2LAotMjA1LCAxODYsIDIwMCwgMTg4LCAxODcsIDIwMSwgMjA0LCAy MDIsIDE4NSwgMjAzLCAyMDYsIDIyMywgMjIwLCAyMTksIDI1NCwgVU5LLAotMjU1LCAyNDAsIDEz MiwgMTMxLCAyNDIsICA4MywgIDczLCAyNDQsICA3NCwgMTM5LCAxNDEsIDE1MSwgMTM4LCAgNDUs IDI0NiwgMTM1LAotMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwg MTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLAotMTQ0LCAxNDUsIDE0NiwgMTQ3LCAx NDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAxNTQsIDE1NSwgMTU2LCAxNTcsIDE1OCwgMTU5 LAotMTYwLCAxNjEsIDE2MiwgMTYzLCAxNjQsIDE2NSwgMTY2LCAxNjcsIDE2OCwgMTY5LCAxNzAs IDE3MSwgMTcyLCAxNzMsIDE3NCwgMTc1LAotMjI0LCAyMjUsIDIyNiwgMjI3LCAyMjgsIDIyOSwg MjMwLCAyMzEsIDIzMiwgMjMzLCAyMzQsIDIzNSwgMjM2LCAyMzcsIDIzOCwgMjM5LAotMjUyLCAy NDEsIDE2NCwgMTYzLCAyNDMsIDExNSwgMTA1LCAyNDUsIDEwNiwgMTcxLCAxNzMsIDIzMSwgMTcw LCAgMjEsIDI0NywgMTY3Ci19OwotCi1DT05TVCBDSEFSCi15bGM1NVtdID0geyAgLyogTGF0aW4v Q3lyaWxsaWMgdG8gQ1A4NTUgKGludmVyc2Ugb2YgeTU1bGMpICovCi0gIDAsICAgMSwgICAyLCAg IDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0 LCAgMTUsCi0gMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUs ICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0LCAgMzUsICAzNiwg IDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0g NDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5 LCAgNjAsICA2MSwgIDYyLCAgNjMsCi0gNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAs ICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwg IDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5 MywgIDk0LCAgOTUsCi0gOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0 LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDExMywgMTE0LCAxMTUs IDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAx MjcsCi0xNzQsIDE3NSwgMTc2LCAxNzcsIDE3OCwgMTc5LCAxODAsIDE4NSwgMTg2LCAxODcsIDE4 OCwgMTkxLCAxOTIsIDE5MywgMTk0LCAxOTUsCi0xOTYsIDE5NywgMjAwLCAyMDEsIDIwMiwgMjAz LCAyMDQsIDIwNSwgMjA2LCAyMDcsIDIxNywgMjE4LCAyMTksIDIyMCwgMjIzLCAyNTQsCi0yNTUs IDEzMywgMTI5LCAxMzEsIDEzNSwgMTM3LCAxMzksIDE0MSwgMTQzLCAxNDUsIDE0NywgMTQ5LCAx NTEsIDI0MCwgMTUzLCAxNTUsCi0xNjEsIDE2MywgMjM2LCAxNzMsIDE2NywgMTY5LCAyMzQsIDI0 NCwgMTg0LCAxOTAsIDE5OSwgMjA5LCAyMTEsIDIxMywgMjE1LCAyMjEsCi0yMjYsIDIyOCwgMjMw LCAyMzIsIDE3MSwgMTgyLCAxNjUsIDI1MiwgMjQ2LCAyNTAsIDE1OSwgMjQyLCAyMzgsIDI0OCwg MTU3LCAyMjQsCi0xNjAsIDE2MiwgMjM1LCAxNzIsIDE2NiwgMTY4LCAyMzMsIDI0MywgMTgzLCAx ODksIDE5OCwgMjA4LCAyMTAsIDIxMiwgMjE0LCAyMTYsCi0yMjUsIDIyNywgMjI5LCAyMzEsIDE3 MCwgMTgxLCAxNjQsIDI1MSwgMjQ1LCAyNDksIDE1OCwgMjQxLCAyMzcsIDI0NywgMTU2LCAyMjIs Ci0yMzksIDEzMiwgMTI4LCAxMzAsIDEzNCwgMTM2LCAxMzgsIDE0MCwgMTQyLCAxNDQsIDE0Niwg MTQ4LCAxNTAsIDI1MywgMTUyLCAxNTQKLX07Ci0KLUNPTlNUIENIQVIKLXlsYzEyNTFbXSA9IHsg IC8qIExhdGluL0N5cmlsbGljIHRvIENQMTI1MSAoaW52ZXJzZSBvZiB5MTI1MWxjKSAqLwotICAw LCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwg IDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAg MjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAotIDMyLCAgMzMsICAz NCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUs ICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1Niwg IDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAotIDY0LCAgNjUsICA2NiwgIDY3LCAg NjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5 LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAs ICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAotIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwg MTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAotMTEyLCAx MTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0 LCAxMjUsIDEyNiwgMTI3LAotMTMwLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzks IDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLAotMTUzLCAxNTUsIDE2NCwg MTY1LCAxNjYsIDE2OSwgMTcxLCAxNzIsIDE3NCwgMTc2LCAxNzcsIDE4MCwgMTgxLCAxODIsIDE4 MywgMTg3LAotMTYwLCAxNjgsIDEyOCwgMTI5LCAxNzAsIDE4OSwgMTc4LCAxNzUsIDE2MywgMTM4 LCAxNDAsIDE0MiwgMTQxLCAxNzMsIDE2MSwgMTQzLAotMTkyLCAxOTMsIDE5NCwgMTk1LCAxOTYs IDE5NywgMTk4LCAxOTksIDIwMCwgMjAxLCAyMDIsIDIwMywgMjA0LCAyMDUsIDIwNiwgMjA3LAot MjA4LCAyMDksIDIxMCwgMjExLCAyMTIsIDIxMywgMjE0LCAyMTUsIDIxNiwgMjE3LCAyMTgsIDIx OSwgMjIwLCAyMjEsIDIyMiwgMjIzLAotMjI0LCAyMjUsIDIyNiwgMjI3LCAyMjgsIDIyOSwgMjMw LCAyMzEsIDIzMiwgMjMzLCAyMzQsIDIzNSwgMjM2LCAyMzcsIDIzOCwgMjM5LAotMjQwLCAyNDEs IDI0MiwgMjQzLCAyNDQsIDI0NSwgMjQ2LCAyNDcsIDI0OCwgMjQ5LCAyNTAsIDI1MSwgMjUyLCAy NTMsIDI1NCwgMjU1LAotMTg1LCAxODQsIDE0NCwgMTMxLCAxODYsIDE5MCwgMTc5LCAxOTEsIDE4 OCwgMTU0LCAxNTYsIDE1OCwgMTU3LCAxNjcsIDE2MiwgMTU5Ci19OwotCi1DT05TVCBDSEFSCi15 bGNidVtdID0geyAgLyogTGF0aW4vQ3lyaWxsaWMgdG8gQnVsZ2FyaWFuIFBDIENvZGUgUGFnZSAq LwotICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAs ICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwg IDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAotIDMyLCAg MzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0 LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUs ICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAotIDY0LCAgNjUsICA2Niwg IDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3 OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5 LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAotIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAs IDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAot MTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEy MywgMTI0LCAxMjUsIDEyNiwgMTI3LAotMjU1LCAxOTIsIDE5MywgMTk0LCAxOTUsIDE5NiwgMTk3 LCAxOTgsIDE5OSwgMjAwLCAyMDEsIDIwMiwgMjAzLCAyMDQsIDIwNSwgMjA2LAotMTI4LCAxMjks IDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAx NDEsIDE0MiwgMTQzLAotMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1 MiwgMTUzLCAxNTQsIDE1NSwgMTU2LCAxNTcsIDE1OCwgMTU5LAotMTYwLCAxNjEsIDE2MiwgMTYz LCAxNjQsIDE2NSwgMTY2LCAxNjcsIDE2OCwgMTY5LCAxNzAsIDE3MSwgMTcyLCAxNzMsIDE3NCwg MTc1LAotMTc2LCAxNzcsIDE3OCwgMTc5LCAxODAsIDE4MSwgMTgyLCAxODMsIDE4NCwgMTg1LCAx ODYsIDE4NywgMTg4LCAxODksIDE5MCwgMTkxLAotMjEzLCAyMDcsIDIwOCwgMjA5LCAyMTAsIDIx MSwgMjEyLCAyMTUsIDIxNiwgMjE3LCAyMTgsIDIxOSwgMjIwLCAyMjEsIDIyMiwgMjIzLAotMjI0 LCAyMjUsIDIyNiwgMjI3LCAyMjgsIDIyOSwgMjMwLCAyMzEsIDIzMiwgMjMzLCAyMzQsIDIzNSwg MjM2LCAyMzcsIDIzOCwgMjM5LAotMjQwLCAyNDEsIDI0MiwgMjQzLCAyNDQsIDI0NSwgMjQ2LCAy NDcsIDI0OCwgMjQ5LCAyNTAsIDI1MSwgMjUyLCAyMTQsIDI1MywgMjU0Ci19OwotCi1DT05TVCBD SEFSCi15bGNrOFtdID0geyAgLyogTGF0aW4vQ3lyaWxsaWMgdG8gT2xkIEtPSS04IEN5cmlsbGlj ICovCi0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAx MCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIx LCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCi0gMzIs ICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAg NDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1 NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCi0gNjQsICA2NSwgIDY2 LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3Nywg IDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAg ODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCi0gOTYsICA5NywgIDk4LCAgOTksIDEw MCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEs Ci0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwg MTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCi0xMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAx MzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsCi0xNDQsIDE0 NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMTU1LCAxNTYs IDE1NywgMTU4LCAxNTksCi1VTkssIDIyOSwgVU5LLCBVTkssIFVOSywgIDgzLCAgNzMsICA3Mywg IDc0LCBVTkssIFVOSywgVU5LLCAyMzUsIFVOSywgMjQ1LCBVTkssCi0yMjUsIDIyNiwgMjQ3LCAy MzEsIDIyOCwgMjI5LCAyNDYsIDI1MCwgMjMzLCAyMzQsIDIzNSwgMjM2LCAyMzcsIDIzOCwgMjM5 LCAyNDAsCi0yNDIsIDI0MywgMjQ0LCAyNDUsIDIzMCwgMjMyLCAyMjcsIDI1NCwgMjUxLCAyNTMs IDI1NSwgMjQ5LCAyNDgsIDI1MiwgMjI0LCAyNDEsCi0xOTMsIDE5NCwgMjE1LCAxOTksIDE5Niwg MTk3LCAyMTQsIDIxOCwgMjAxLCAyMDIsIDIwMywgMjA0LCAyMDUsIDIwNiwgMjA3LCAyMDgsCi0y MTAsIDIxMSwgMjEyLCAyMTMsIDE5OCwgMjAwLCAxOTUsIDIyMiwgMjE5LCAyMjEsIDIyMywgMjE3 LCAyMTYsIDIyMCwgMTkyLCAyMDksCi1VTkssIDE5NywgVU5LLCBVTkssIFVOSywgMTE1LCAxMDUs IDEwNSwgMTA2LCBVTkssIFVOSywgVU5LLCAyMDMsIFVOSywgMjEzLCBVTksKLX07Ci0KLUNPTlNU IENIQVIKLXlhY2xjW10gPSB7ICAvKiBDUDg2NiB0byBMYXRpbi9DeXJpbGxpYyAqLwotLyogTkVF RCBUTyBNQUtFIFRISVMgT05FIElOVkVSVElCTEUgKi8KLSAgMCwgICAxLCAgIDIsICAgMywgICA0 LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwK LSAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAg MjcsICAyOCwgIDI5LCAgMzAsICAzMSwKLSAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAz OCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5 LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwg IDYxLCAgNjIsICA2MywKLSA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAg NzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4 MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQs ICA5NSwKLSA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwg MTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKLTExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAx MTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKLTE3 NiwgMTc3LCAxNzgsIDE3OSwgMTgwLCAxODEsIDE4MiwgMTgzLCAxODQsIDE4NSwgMTg2LCAxODcs IDE4OCwgMTg5LCAxOTAsIDE5MSwKLTE5MiwgMTkzLCAxOTQsIDE5NSwgMTk2LCAxOTcsIDE5OCwg MTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYsIDIwNywKLTIwOCwgMjA5LCAy MTAsIDIxMSwgMjEyLCAyMTMsIDIxNCwgMjE1LCAyMTYsIDIxNywgMjE4LCAyMTksIDIyMCwgMjIx LCAyMjIsIDIyMywKLVVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkss IFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywKLVVOSywgVU5LLCBVTkssIFVOSywg VU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVO SywKLVVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5L LCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywKLTIyNCwgMjI1LCAyMjYsIDIyNywgMjI4LCAyMjks IDIzMCwgMjMxLCAyMzIsIDIzMywgMjM0LCAyMzUsIDIzNiwgMjM3LCAyMzgsIDIzOSwKLTE2MSwg MjQxLCAxNjQsIDI0NCwgMTY3LCAyNDcsIDE3NCwgMjU0LCBVTkssIFVOSywgVU5LLCBVTkssIDI0 MCwgVU5LLCBVTkssIFVOSwotfTsKLQotQ09OU1QgQ0hBUgoteTU1bGNbXSA9IHsgIC8qIENQODU1 IHRvIExhdGluL0N5cmlsbGljIChpbnZlcnNlIG9mIHlsYzU1KSAqLwotICAwLCAgIDEsICAgMiwg ICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAx NCwgIDE1LAotIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1 LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAotIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYs ICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAot IDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1 OSwgIDYwLCAgNjEsICA2MiwgIDYzLAotIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcw LCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEs ICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAg OTMsICA5NCwgIDk1LAotIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEw NCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAotMTEyLCAxMTMsIDExNCwgMTE1 LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwg MTI3LAotMjQyLCAxNjIsIDI0MywgMTYzLCAyNDEsIDE2MSwgMjQ0LCAxNjQsIDI0NSwgMTY1LCAy NDYsIDE2NiwgMjQ3LCAxNjcsIDI0OCwgMTY4LAotMjQ5LCAxNjksIDI1MCwgMTcwLCAyNTEsIDE3 MSwgMjUyLCAxNzIsIDI1NCwgMTc0LCAyNTUsIDE3NSwgMjM4LCAyMDYsIDIzNCwgMjAyLAotMjA4 LCAxNzYsIDIwOSwgMTc3LCAyMzAsIDE5OCwgMjEyLCAxODAsIDIxMywgMTgxLCAyMjgsIDE5Niwg MjExLCAxNzksIDEyOCwgMTI5LAotMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDIyOSwgMTk3LCAy MTYsIDE4NCwgMTM1LCAxMzYsIDEzNywgMTM4LCAyMTcsIDE4NSwgMTM5LAotMTQwLCAxNDEsIDE0 MiwgMTQzLCAxNDQsIDE0NSwgMjE4LCAxODYsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEs IDE1MiwgMTUzLAotMjE5LCAxODcsIDIyMCwgMTg4LCAyMjEsIDE4OSwgMjIyLCAxOTAsIDIyMywg MTU0LCAxNTUsIDE1NiwgMTU3LCAxOTEsIDIzOSwgMTU4LAotMjA3LCAyMjQsIDE5MiwgMjI1LCAx OTMsIDIyNiwgMTk0LCAyMjcsIDE5NSwgMjE0LCAxODIsIDIxMCwgMTc4LCAyMzYsIDIwNCwgMjQw LAotMTczLCAyMzUsIDIwMywgMjE1LCAxODMsIDIzMiwgMjAwLCAyMzcsIDIwNSwgMjMzLCAyMDEs IDIzMSwgMTk5LCAyNTMsIDE1OSwgMTYwCi19OwotCi1DT05TVCBDSEFSCi15MTI1MWxjW10gPSB7 ICAvKiBDUDEyNTEgdG8gTGF0aW4vQ3lyaWxsaWMgKGludmVyc2Ugb2YgeWxjMTI1MSkgKi8KLSAg MCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEs ICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwg IDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKLSAzMiwgIDMzLCAg MzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1 LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYs ICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKLSA2NCwgIDY1LCAgNjYsICA2Nywg IDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3 OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkw LCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKLSA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEs IDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKLTExMiwg MTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEy NCwgMTI1LCAxMjYsIDEyNywKLTE2MiwgMTYzLCAxMjgsIDI0MywgMTI5LCAxMzAsIDEzMSwgMTMy LCAxMzMsIDEzNCwgMTY5LCAxMzUsIDE3MCwgMTcyLCAxNzEsIDE3NSwKLTI0MiwgMTM2LCAxMzcs IDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsIDE0NCwgMjQ5LCAxNDUsIDI1MCwgMjUyLCAy NTEsIDI1NSwKLTE2MCwgMTc0LCAyNTQsIDE2OCwgMTQ2LCAxNDcsIDE0OCwgMjUzLCAxNjEsIDE0 OSwgMTY0LCAxNTAsIDE1MSwgMTczLCAxNTIsIDE2NywKLTE1MywgMTU0LCAxNjYsIDI0NiwgMTU1 LCAxNTYsIDE1NywgMTU4LCAyNDEsIDI0MCwgMjQ0LCAxNTksIDI0OCwgMTY1LCAyNDUsIDI0NywK LTE3NiwgMTc3LCAxNzgsIDE3OSwgMTgwLCAxODEsIDE4MiwgMTgzLCAxODQsIDE4NSwgMTg2LCAx ODcsIDE4OCwgMTg5LCAxOTAsIDE5MSwKLTE5MiwgMTkzLCAxOTQsIDE5NSwgMTk2LCAxOTcsIDE5 OCwgMTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYsIDIwNywKLTIwOCwgMjA5 LCAyMTAsIDIxMSwgMjEyLCAyMTMsIDIxNCwgMjE1LCAyMTYsIDIxNywgMjE4LCAyMTksIDIyMCwg MjIxLCAyMjIsIDIyMywKLTIyNCwgMjI1LCAyMjYsIDIyNywgMjI4LCAyMjksIDIzMCwgMjMxLCAy MzIsIDIzMywgMjM0LCAyMzUsIDIzNiwgMjM3LCAyMzgsIDIzOQotfTsKLQotQ09OU1QgQ0hBUgot eWJ1bGNbXSA9IHsgIC8qIEJ1bGdhcmlhbiBQQyBDb2RlIFBhZ2UgdG8gTGF0aW4vQ3lyaWxsaWMg Ki8KLSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEw LCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEs ICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKLSAzMiwg IDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0 NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1 LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKLSA2NCwgIDY1LCAgNjYs ICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAg NzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4 OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKLSA5NiwgIDk3LCAgOTgsICA5OSwgMTAw LCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwK LTExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAx MjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKLTE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1 MCwgMTUxLCAxNTIsIDE1MywgMTU0LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwKLTE2MCwgMTYx LCAxNjIsIDE2MywgMTY0LCAxNjUsIDE2NiwgMTY3LCAxNjgsIDE2OSwgMTcwLCAxNzEsIDE3Miwg MTczLCAxNzQsIDE3NSwKLTE3NiwgMTc3LCAxNzgsIDE3OSwgMTgwLCAxODEsIDE4MiwgMTgzLCAx ODQsIDE4NSwgMTg2LCAxODcsIDE4OCwgMTg5LCAxOTAsIDE5MSwKLTE5MiwgMTkzLCAxOTQsIDE5 NSwgMTk2LCAxOTcsIDE5OCwgMTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYs IDIwNywKLTEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwg MTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsIDIwOSwKLTIxMCwgMjExLCAyMTIsIDIxMywgMjE0LCAy MDgsIDI1MywgMjE1LCAyMTYsIDIxNywgMjE4LCAyMTksIDIyMCwgMjIxLCAyMjIsIDIyMywKLTIy NCwgMjI1LCAyMjYsIDIyNywgMjI4LCAyMjksIDIzMCwgMjMxLCAyMzIsIDIzMywgMjM0LCAyMzUs IDIzNiwgMjM3LCAyMzgsIDIzOSwKLTI0MCwgMjQxLCAyNDIsIDI0MywgMjQ0LCAyNDUsIDI0Niwg MjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTEsIDI1MiwgMjU0LCAyNTUsIDEyOAotfTsKLQotQ09OU1Qg Q0hBUgoteWs4bGNbXSA9IHsgIC8qIE9sZCBLT0ktOCBDeXJpbGxpYyB0byBMYXRpbi9DeXJpbGxp YyAqLwotICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAg MTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAy MSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAotIDMy LCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0Mywg IDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAg NTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAotIDY0LCAgNjUsICA2 NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcs ICA3OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwg IDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAotIDk2LCAgOTcsICA5OCwgIDk5LCAx MDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTEx LAotMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIs IDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAotMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywg MTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLAotMTQ0LCAx NDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAxNTQsIDE1NSwgMTU2 LCAxNTcsIDE1OCwgMTU5LAotVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkss IFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLAotVU5LLCBVTkssIFVOSywg VU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVO SywgVU5LLAotMjM4LCAyMDgsIDIwOSwgMjMwLCAyMTIsIDIxMywgMjI4LCAyMTEsIDIyOSwgMjE2 LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIyMSwgMjIyLAotMjIzLCAyMzksIDIyNCwgMjI1LCAyMjYs IDIyNywgMjE0LCAyMTAsIDIzNiwgMjM1LCAyMTUsIDIzMiwgMjM3LCAyMzMsIDIzMSwgMjM0LAot MjA2LCAxNzYsIDE3NywgMTk4LCAxODAsIDE4MSwgMTk2LCAxNzksIDE5NywgMTg0LCAxODUsIDE4 NiwgMTg3LCAxODgsIDE4OSwgMTkwLAotMTkxLCAyMDcsIDE5MiwgMTkzLCAxOTQsIDE5NSwgMTgy LCAxNzgsIDIwNCwgMjAzLCAxODMsIDIwMCwgMjA1LCAyMDEsIDE5OSwgMTI3Ci19OwotCi1DT05T VCBDSEFSCi15bGNza1tdID0geyAgLyogTGF0aW4vQ3lyaWxsaWMgdG8gU2hvcnQgS09JICovCi0g IDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDEx LCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIs ICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCi0gMzIsICAzMywg IDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0 NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2 LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCi0gNjQsICA2NSwgIDY2LCAgNjcs ICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAg NzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5 MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCi0gNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5 LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAs ICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAg OTIsICA5MywgIDk0LCAxMjcsCi0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAg NywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4 LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwg IDMwLCAgMzEsCi0gMzIsIDEwMSwgVU5LLCBVTkssIFVOSywgIDgzLCAgNzMsICA3MywgIDc0LCBV TkssIFVOSywgVU5LLCAxMDcsICA0NSwgMTE3LCBVTkssCi0gOTcsICA5OCwgMTE5LCAxMDMsIDEw MCwgMTAxLCAxMTgsIDEyMiwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLCAxMTIs Ci0xMTQsIDExNSwgMTE2LCAxMTcsIDEwMiwgMTA0LCAgOTksIDEyNiwgMTIzLCAxMjUsICAzOSwg MTIxLCAxMjAsIDEyNCwgIDk2LCAxMTMsCi0gOTcsICA5OCwgMTE5LCAxMDMsIDEwMCwgMTAxLCAx MTgsIDEyMiwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLCAxMTIsCi0xMTQsIDEx NSwgMTE2LCAxMTcsIDEwMiwgMTA0LCAgOTksIDEyNiwgMTIzLCAxMjUsICAzOSwgMTIxLCAxMjAs IDEyNCwgIDk2LCAxMTMsCi1VTkssIDEwMSwgVU5LLCBVTkssIFVOSywgIDgzLCAgNzMsICA3Mywg IDc0LCBVTkssIFVOSywgVU5LLCAxMDcsIFVOSywgMTE3LCBVTksKLX07Ci0KLUNPTlNUIENIQVIg eXNrY3lbXSA9IHsgIC8qIFNob3J0IEtPSSB0byBMYXRpbi9DeXJpbGxpYyAqLwotICAwLCAgIDEs ICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAg MTMsICAxNCwgIDE1LAotIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAy NCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAotIDMyLCAgMzMsICAzNCwgIDM1 LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0Niwg IDQ3LAotIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAg NTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAotIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2 OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgw LCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwg IDkyLCAgOTMsICA5NCwgIDk1LAotMjA2LCAxNzYsIDE3NywgMTk4LCAxODAsIDE4MSwgMTk2LCAx NzksIDE5NywgMTg0LCAxODUsIDE4NiwgMTg3LCAxODgsIDE4OSwgMTkwLAotMTkxLCAyMDcsIDE5 MiwgMTkzLCAxOTQsIDE5NSwgMTgyLCAxNzgsIDIwNCwgMjAzLCAxODMsIDIwMCwgMjA1LCAyMDEs IDE5OSwgMTI3Ci19OwotI2VuZGlmIC8qIENZUklMTElDICovCi0KLSNpZmRlZiBMQVRJTjIKLQot LyogTGF0aW4tMiB0YWJsZXMgKi8KLQotQ09OU1QgQ0hBUgoteWwyNTJbXSA9IHsJCQkJLyogTGF0 aW4tMiB0byBDb2RlIFBhZ2UgODUyICovCi0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAg IDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAx NywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgs ICAyOSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwg IDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAg NTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYy LCAgNjMsCi0gNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMs ICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwg IDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCi0g OTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3 LCAxMDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgs IDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCi0xNzQsIDE3NSwg MTc2LCAxNzcsIDE3OCwgMTc5LCAxODAsIDE4NSwgMTg2LCAxODcsIDE4OCwgMTkxLCAxOTIsIDE5 MywgMTk0LCAxOTUsCi0xOTYsIDE5NywgMjAwLCAyMDEsIDIwMiwgMjAzLCAyMDQsIDIwNSwgMjA2 LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIyMywgMjQwLCAyNTQsCi0yNTUsIDE2NCwgMjQ0LCAxNTcs IDIwNywgMTQ5LCAxNTEsIDI0NSwgMjQ5LCAyMzAsIDE4NCwgMTU1LCAxNDEsIDE3MCwgMTY2LCAx ODksCi0yNDgsIDE2NSwgMjQyLCAxMzYsIDIzOSwgMTUwLCAxNTIsIDI0MywgMjQ3LCAyMzEsIDE3 MywgMTU2LCAxNzEsIDI0MSwgMTY3LCAxOTAsCi0yMzIsIDE4MSwgMTgyLCAxOTgsIDE0MiwgMTQ1 LCAxNDMsIDEyOCwgMTcyLCAxNDQsIDE2OCwgMjExLCAxODMsIDIxNCwgMjE1LCAyMTAsCi0yMDks IDIyNywgMjEzLCAyMjQsIDIyNiwgMTM4LCAxNTMsIDE1OCwgMjUyLCAyMjIsIDIzMywgMjM1LCAx NTQsIDIzNywgMjIxLCAyMjUsCi0yMzQsIDE2MCwgMTMxLCAxOTksIDEzMiwgMTQ2LCAxMzQsIDEz NSwgMTU5LCAxMzAsIDE2OSwgMTM3LCAyMTYsIDE2MSwgMTQwLCAyMTIsCi0yMDgsIDIyOCwgMjI5 LCAxNjIsIDE0NywgMTM5LCAxNDgsIDI0NiwgMjUzLCAxMzMsIDE2MywgMjUxLCAxMjksIDIzNiwg MjM4LCAyNTAKLX07Ci0KLUNPTlNUIENIQVIKLXk1MmwyW10gPSB7CQkJCS8qIENvZGUgUGFnZSA4 NTIgdG8gTGF0aW4tMiAqLwotICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcs ICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcsICAxOCwg IDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAz MCwgIDMxLAotIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQx LCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIs ICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAot IDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3 NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2 LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAotIDk2LCAgOTcs ICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAx MDksIDExMCwgMTExLAotMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEy MCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAotMTk5LCAyNTIsIDIzMywgMjI2 LCAyMjgsIDI0OSwgMjMwLCAyMzEsIDE3OSwgMjM1LCAyMTMsIDI0NSwgMjM4LCAxNzIsIDE5Niwg MTk4LAotMjAxLCAxOTcsIDIyOSwgMjQ0LCAyNDYsIDE2NSwgMTgxLCAxNjYsIDE4MiwgMjE0LCAy MjAsIDE3MSwgMTg3LCAxNjMsIDIxNSwgMjMyLAotMjI1LCAyMzcsIDI0MywgMjUwLCAxNjEsIDE3 NywgMTc0LCAxOTAsIDIwMiwgMjM0LCAxNzMsIDE4OCwgMjAwLCAxODYsIDEyOCwgMTI5LAotMTMw LCAxMzEsIDEzMiwgMTMzLCAxMzQsIDE5MywgMTk0LCAyMDQsIDE3MCwgMTM1LCAxMzYsIDEzNywg MTM4LCAxNzUsIDE5MSwgMTM5LAotMTQwLCAxNDEsIDE0MiwgMTQzLCAxNDQsIDE0NSwgMTk1LCAy MjcsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTY0LAotMjQwLCAyMDgsIDIw NywgMjAzLCAyMzksIDIxMCwgMjA1LCAyMDYsIDIzNiwgMTUzLCAxNTQsIDE1NSwgMTU2LCAyMjIs IDIxNywgMTU3LAotMjExLCAyMjMsIDIxMiwgMjA5LCAyNDEsIDI0MiwgMTY5LCAxODUsIDE5Miwg MjE4LCAyMjQsIDIxOSwgMjUzLCAyMjEsIDI1NCwgMTgwLAotMTU4LCAxODksIDE3OCwgMTgzLCAx NjIsIDE2NywgMjQ3LCAxODQsIDE3NiwgMTY4LCAyNTUsIDI1MSwgMjE2LCAyNDgsIDE1OSwgMTYw Ci19OwotCi1DT05TVCBDSEFSCi15bDIxMjUwW10gPSB7CQkJCS8qIExhdGluLTIgdG8gQ29kZSBQ YWdlIDEyNTAgKi8KLSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgs ICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAgMTgsICAxOSwg IDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAz MSwKLSAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQy LCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMs ICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKLSA2NCwg IDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3 NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3 LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKLSA5NiwgIDk3LCAgOTgs ICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAx MTAsIDExMSwKLTExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEy MSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKLTEyOCwgMTI5LCAxMzAsIDEzMSwgMTMy LCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM5LCAxNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwK LTE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAxNTUsIDE2NiwgMTY5LCAxNzEsIDE3MiwgMTc0LCAx NzcsIDE4MSwgMTgyLCAxODMsIDE4NywKLTE2MCwgMTY1LCAxNjIsIDE2MywgMTY0LCAxODgsIDE0 MCwgMTY3LCAxNjgsIDEzOCwgMTcwLCAxNDEsIDE0MywgMTczLCAxNDIsIDE3NSwKLTE3NiwgMTg1 LCAxNzgsIDE3OSwgMTgwLCAxOTAsIDE1NiwgMTYxLCAxODQsIDE1NCwgMTg2LCAxNTcsIDE1OSwg MTg5LCAxNTgsIDE5MSwKLTE5MiwgMTkzLCAxOTQsIDE5NSwgMTk2LCAxOTcsIDE5OCwgMTk5LCAy MDAsIDIwMSwgMjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYsIDIwNywKLTIwOCwgMjA5LCAyMTAsIDIx MSwgMjEyLCAyMTMsIDIxNCwgMjE1LCAyMTYsIDIxNywgMjE4LCAyMTksIDIyMCwgMjIxLCAyMjIs IDIyMywKLTIyNCwgMjI1LCAyMjYsIDIyNywgMjI4LCAyMjksIDIzMCwgMjMxLCAyMzIsIDIzMywg MjM0LCAyMzUsIDIzNiwgMjM3LCAyMzgsIDIzOSwKLTI0MCwgMjQxLCAyNDIsIDI0MywgMjQ0LCAy NDUsIDI0NiwgMjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTEsIDI1MiwgMjUzLCAyNTQsIDI1NQotfTsK LQotQ09OU1QgQ0hBUgoteTEyNTBsMltdID0gewkJCQkvKiBDb2RlIFBhZ2UgMTI1MCB0byBMYXRp bi0yICovCi0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDks ICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4LCAgMTksICAyMCwg IDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCi0g MzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQz LCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQs ICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCi0gNjQsICA2NSwg IDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3 NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4 LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCi0gOTYsICA5NywgIDk4LCAgOTks IDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAx MTEsCi0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEy MiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCi0xMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMz LCAxMzQsIDEzNSwgMTM2LCAxMzcsIDE2OSwgMTM4LCAxNjYsIDE3MSwgMTc0LCAxNzIsCi0xMzks IDE0MCwgMTQxLCAxNDIsIDE0MywgMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE4NSwgMTQ5LCAx ODIsIDE4NywgMTkwLCAxODgsCi0xNjAsIDE4MywgMTYyLCAxNjMsIDE2NCwgMTYxLCAxNTAsIDE2 NywgMTY4LCAxNTEsIDE3MCwgMTUyLCAxNTMsIDE3MywgMTU0LCAxNzUsCi0xNzYsIDE1NSwgMTc4 LCAxNzksIDE4MCwgMTU2LCAxNTcsIDE1OCwgMTg0LCAxNzcsIDE4NiwgMTU5LCAxNjUsIDE4OSwg MTgxLCAxOTEsCi0xOTIsIDE5MywgMTk0LCAxOTUsIDE5NiwgMTk3LCAxOTgsIDE5OSwgMjAwLCAy MDEsIDIwMiwgMjAzLCAyMDQsIDIwNSwgMjA2LCAyMDcsCi0yMDgsIDIwOSwgMjEwLCAyMTEsIDIx MiwgMjEzLCAyMTQsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIyMSwgMjIyLCAyMjMs Ci0yMjQsIDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5LCAyMzAsIDIzMSwgMjMyLCAyMzMsIDIzNCwg MjM1LCAyMzYsIDIzNywgMjM4LCAyMzksCi0yNDAsIDI0MSwgMjQyLCAyNDMsIDI0NCwgMjQ1LCAy NDYsIDI0NywgMjQ4LCAyNDksIDI1MCwgMjUxLCAyNTIsIDI1MywgMjU0LCAyNTUKLX07Ci0KLUNP TlNUIENIQVIKLXlsMm16W10gPSB7CQkJICAgICAvKiBMYXRpbi0yIHRvIE1hem92aWEgKE5PVCBp bnZlcnRpYmxlKSAqLwotICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAg OCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcsICAxOCwgIDE5 LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwg IDMxLAotIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAg NDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1 MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAotIDY0 LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwg IDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAg ODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAotIDk2LCAgOTcsICA5 OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDks IDExMCwgMTExLAotMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwg MTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAotMTI4LCAxMjksIDEzMCwgMTMxLCAx MzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQz LAotMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAxNTQs IDE1NSwgMTU2LCAxNTcsIDE1OCwgMTU5LAotMjU1LCAxNDMsIFVOSywgMTU2LCAxNTUsICA3Niwg MTUyLCAgMjEsICAzNCwgIDgzLCAgODMsICA4NCwgMTYwLCAgNDUsICA5MCwgMTYxLAotMjQ4LCAx MzQsICA0NCwgMTQ2LCAgMzksIDEwOCwgMTU4LCBVTkssICA0NCwgMTE1LCAxMTUsIDExNiwgMTY2 LCAgMzQsIDEyMiwgMTY3LAotIDgyLCAgNjUsICA2NSwgIDY1LCAxNDIsICA3NiwgMTQ5LCAxMjgs ICA2NywgIDY5LCAxNDQsICA2OSwgIDY5LCAgNzMsICA3MywgIDY4LAotIDY4LCAxNjUsICA3OCwg MTYzLCAgNzksIDE1MywgMTUzLCAyNTAsICA4MiwgIDg1LCAgODUsIDE1NCwgMTU0LCAgODksICA4 NCwgMjI1LAotMTE0LCAgOTcsIDEzMSwgIDk3LCAxMzIsIDEwOCwgMTQxLCAxMzUsICA5OSwgMTMw LCAxNDUsIDEzNywgMTAxLCAxMDUsIDE0MCwgMTAxLAotMTAwLCAxNjQsIDExMCwgMTYyLCAxNDcs IDE0OCwgMTQ4LCAyNDYsIDExNCwgMTE3LCAxMTcsIDEyOSwgMTI5LCAxMjEsIDExNiwgMjQ5Ci19 OwotCi1DT05TVCBDSEFSCi15bXpsMltdID0gewkJCSAgICAgLyogTWF6b3ZpYSB0byBMYXRpbi0y IChOT1QgSU5WRVJUSUJMRSkgKi8KLSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwg ICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAg MTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5 LCAgMzAsICAzMSwKLSAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAs ICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwg IDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2 MywKLSA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0 LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUs ICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKLSA5Niwg IDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEw OCwgMTA5LCAxMTAsIDExMSwKLTExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5 LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKLTEyOCwgMjUyLCAyMzMs IDIyNiwgMjI4LCAgOTcsIDE3NywgMjMxLCAxMDEsIDIzNSwgMTAxLCAxMDUsIDIzOCwgMjMwLCAx OTYsIDE2MSwKLTIwMiwgMjM0LCAxNzksIDI0NCwgMjQ2LCAxOTgsIDExNywgMTE3LCAxNjYsIDIx NCwgMjIwLCAxNjQsIDE2MywgIDg5LCAxODIsIDEwMiwKLTE3MiwgMTc1LCAyNDMsIDIxMSwgMjQy LCAyMTAsIDE4OCwgMTkxLCAgNjMsIFVOSywgVU5LLCBVTkssIFVOSywgIDMzLCAgMzQsICAzNCwK LVVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBV TkssIFVOSywgVU5LLCBVTkssIFVOSywKLVVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVO SywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywKLVVOSywgVU5L LCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywg VU5LLCBVTkssIFVOSywKLVVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBV TkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywKLVVOSywgVU5LLCBVTkssIFVO SywgVU5LLCBVTkssIDI0NywgVU5LLCAxNzYsIDI1NSwgMjE1LCBVTkssIFVOSywgVU5LLCBVTkss IDE2MAotfTsKLQotQ09OU1QgQ0hBUgoteWwybDFbXSA9IHsJCQkJLyogTGF0aW4tMiB0byBMYXRp bi0xICovCi0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDks ICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAxNywgIDE4LCAgMTksICAyMCwg IDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCi0g MzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQz LCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQs ICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCi0gNjQsICA2NSwg IDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3 NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4 LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCi0gOTYsICA5NywgIDk4LCAgOTks IDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAx MTEsCi0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEy MiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCi0xMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMz LCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsCi0xNDQs IDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMTU1LCAx NTYsIDE1NywgMTU4LCAxNTksCi0xNjAsICdBJywgVU5LLCAnTCcsIDE2NCwgJ0wnLCAnUycsIDE2 NywgMTY4LCAnUycsICdTJywgJ1QnLCAnWicsIDE3MywgJ1onLCAnWicsCi0xNzYsICdhJywgVU5L LCAnbCcsIDE4MCwgJ2wnLCAncycsIFVOSywgMTg0LCAncycsICdzJywgJ3QnLCAneicsIFVOSywg J3onLCAneicsCi0nUicsIDE5MywgMTk0LCAnQScsIDE5NiwgJ0wnLCAnQycsIDE5OSwgJ0MnLCAy MDEsICdFJywgMjAzLCAnRScsIDIwNSwgJ0knLCAnRCcsCi0yMDgsICdOJywgJ04nLCAyMTEsIDIx MiwgJ08nLCAyMTQsIDIxNSwgJ1InLCAnVScsIDIxOCwgJ1UnLCAyMjAsIDIyMSwgJ1QnLCAyMjMs Ci0ncicsIDIyNSwgMjI2LCAnYScsIDIyOCwgJ2wnLCAnYycsIDIzMSwgJ2MnLCAyMzMsICdlJywg MjM1LCAnZScsIDIzNywgJ2knLCAnZCcsCi0yNDAsICduJywgJ24nLCAyNDMsIDI0NCwgJ28nLCAy NDYsIDI0NywgJ3InLCAndScsIDI1MCwgJ3UnLCAyNTIsIDI1MywgJ3QnLCAnLicKLX07Ci0KLUNP TlNUIENIQVIKLXlsMWwyW10gPSB7CQkJCS8qIExhdGluLTEgdG8gTGF0aW4tMiAqLwotICAwLCAg IDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEy LCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMs ICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAotIDMyLCAgMzMsICAzNCwg IDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0 NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3 LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAotIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgs ICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAot IDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5 MSwgIDkyLCAgOTMsICA5NCwgIDk1LAotIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAy LCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAotMTEyLCAxMTMs IDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAx MjUsIDEyNiwgMTI3LAotMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEz NiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLAotMTQ0LCAxNDUsIDE0NiwgMTQ3 LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAxNTQsIDE1NSwgMTU2LCAxNTcsIDE1OCwg MTU5LAotMTYwLCAnQScsIFVOSywgJ0wnLCAxNjQsIFVOSywgVU5LLCAxNjcsIDE2OCwgJ0MnLCAn YScsICc8JywgJz4nLCAxNzMsICdSJywgVU5LLAotMTc2LCBVTkssIFVOSywgVU5LLCAxODAsIFVO SywgVU5LLCBVTkssIDE4NCwgVU5LLCAnbycsICc+JywgVU5LLCBVTkssIFVOSywgVU5LLAotJ0En LCAxOTMsIDE5NCwgJ0EnLCAxOTYsICdBJywgJ0EnLCAxOTksICdFJywgMjAxLCAnRScsIDIwMywg J0knLCAyMDUsICdJJywgJ0knLAotMjA4LCAnTicsICdPJywgMjExLCAyMTIsICdPJywgMjE0LCAy MTUsICdPJywgJ1UnLCAyMTgsICdVJywgMjIwLCAyMjEsIFVOSywgMjIzLAotJ2EnLCAyMjUsIDIy NiwgJ2EnLCAyMjgsICdhJywgJ2EnLCAyMzEsICdlJywgMjMzLCAnZScsIDIzNSwgJ2knLCAyMzcs ICdpJywgJ2knLAotMjQwLCAnbicsICdvJywgMjQzLCAyNDQsICdvJywgMjQ2LCAyNDcsICdvJywg J3UnLCAyNTAsICd1JywgMjUyLCAyNTMsIFVOSywgJ3knCi19OwotCi1DT05TVCBDSEFSCi15bDJh c1tdID0gewkJCQkvKiBMYXRpbi0yIHRvIEFTQ0lJICovCi0gIDAsICAgMSwgICAyLCAgIDMsICAg NCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUs Ci0gMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwg IDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAg MzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0 OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAs ICA2MSwgIDYyLCAgNjMsCi0gNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwg IDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAg ODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0 LCAgOTUsCi0gOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUs IDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDExMywgMTE0LCAxMTUsIDExNiwg MTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCi1V TkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5L LCBVTkssIFVOSywgVU5LLCBVTkssCi1VTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkss IFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssCi0gMzIsICdBJywg VU5LLCAnTCcsIFVOSywgJ0wnLCAnUycsIFVOSywgIDM0LCAnUycsICdTJywgJ1QnLCAnWicsICct JywgJ1onLCAnWicsCi1VTkssICdhJywgVU5LLCAnbCcsICAzOSwgJ2wnLCAncycsIFVOSywgIDQ0 LCAncycsICdzJywgJ3QnLCAneicsIFVOSywgJ3onLCAneicsCi0nUicsICdBJywgJ0EnLCAnQScs ICdBJywgJ0wnLCAnQycsICdDJywgJ0MnLCAnRScsICdFJywgJ0UnLCAnRScsICdJJywgJ0knLCAn RCcsCi0nRCcsICdOJywgJ04nLCAnTycsICdPJywgJ08nLCAnTycsICd4JywgJ1InLCAnVScsICdV JywgJ1UnLCAnVScsICdZJywgJ1QnLCAncycsCi0ncicsICdhJywgJ2EnLCAnYScsICdhJywgJ2wn LCAnYycsICdjJywgJ2MnLCAnZScsICdlJywgJ2UnLCAnZScsICdpJywgJ2knLCAnZCcsCi0nZCcs ICduJywgJ24nLCAnbycsICdvJywgJ28nLCAnbycsICcvJywgJ3InLCAndScsICd1JywgJ3UnLCAn dScsICd5JywgJ3QnLCAnLicKLX07Ci0jZW5kaWYgLyogTEFUSU4yICovCi0KLSNpZmRlZiBIRUJS RVcKLS8qCi0gIDgtYml0IFRhYmxlcyBwcm92aWRpbmcgaW52ZXJ0aWJsZSB0cmFuc2xhdGlvbiBi ZXR3ZWVuIExhdGluL0hlYnJldyBhbmQgQ1A4NjIuCi0qLwotQ09OU1QgQ0hBUgoteTYybGhbXSA9 IHsgIC8qIFBDIENvZGUgUGFnZSA4NjIgdG8gSVNPIDg4NTktOCBMYXRpbi9IZWJyZXcgKi8KLSAg MCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEs ICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwg IDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKLSAzMiwgIDMzLCAg MzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1 LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYs ICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKLSA2NCwgIDY1LCAgNjYsICA2Nywg IDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3 OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkw LCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKLSA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEs IDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKLTExMiwg MTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEy NCwgMTI1LCAxMjYsIDEyNywKLTIyNCwgMjI1LCAyMjYsIDIyNywgMjI4LCAyMjksIDIzMCwgMjMx LCAyMzIsIDIzMywgMjM0LCAyMzUsIDIzNiwgMjM3LCAyMzgsIDIzOSwKLTI0MCwgMjQxLCAyNDIs IDI0MywgMjQ0LCAyNDUsIDI0NiwgMjQ3LCAyNDgsIDI0OSwgMjUwLCAxNjIsIDE2MywgMTY1LCAx MjgsIDEyOSwKLTEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEz OSwgMTcyLCAxODksIDE4OCwgMTQwLCAxNzEsIDE4NywKLTE0MSwgMTQyLCAxNDMsIDE0NCwgMTQ1 LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE1MywgMTU0LCAxNTUsIDE1NiwK LTE1NywgMTU4LCAxNTksIDE2MSwgMTY0LCAxNjYsIDE2NywgMTY4LCAxNjksIDE3MCwgMTczLCAx NzQsIDE3NSwgMjIzLCAxNzksIDE4MCwKLTE4MiwgMTg0LCAxODUsIDE5MCwgMTkxLCAxOTIsIDE5 MywgMTk0LCAxOTUsIDE5NiwgMTk3LCAxOTgsIDE5OSwgMjAwLCAyMDEsIDIwMiwKLTIwMywgMjA0 LCAyMDUsIDIwNiwgMjA3LCAyMDgsIDE4MSwgMjA5LCAyMTAsIDIxMSwgMjEyLCAyMTMsIDIxNCwg MjE1LCAyMTYsIDIxNywKLTIxOCwgMTc3LCAyMTksIDIyMCwgMjIxLCAyMjIsIDE4NiwgMjUxLCAx NzYsIDE4MywgMjUyLCAyNTMsIDI1NCwgMTc4LCAyNTUsIDE2MAotfTsKLQotQ09OU1QgQ0hBUgot eWxoNjJbXSA9IHsgIC8qIElTTyA4ODU5LTggTGF0aW4vSGVicmV3IHRvIFBDIENvZGUgUGFnZSA4 NjIgKi8KLSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwg IDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAg MjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKLSAz MiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMs ICA0NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwg IDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKLSA2NCwgIDY1LCAg NjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3 LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgs ICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKLSA5NiwgIDk3LCAgOTgsICA5OSwg MTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDEx MSwKLTExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIy LCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKLTE1OCwgMTU5LCAxNjAsIDE2MSwgMTYyLCAxNjMs IDE2NCwgMTY1LCAxNjYsIDE2NywgMTY4LCAxNjksIDE3MywgMTc2LCAxNzcsIDE3OCwKLTE3OSwg MTgwLCAxODEsIDE4MiwgMTgzLCAxODQsIDE4NSwgMTg2LCAxODcsIDE4OCwgMTg5LCAxOTAsIDE5 MSwgMTkyLCAxOTMsIDE5NCwKLTI1NSwgMTk1LCAxNTUsIDE1NiwgMTk2LCAxNTcsIDE5NywgMTk4 LCAxOTksIDIwMCwgMjAxLCAxNzQsIDE3MCwgMjAyLCAyMDMsIDIwNCwKLTI0OCwgMjQxLCAyNTMs IDIwNiwgMjA3LCAyMzAsIDIwOCwgMjQ5LCAyMDksIDIxMCwgMjQ2LCAxNzUsIDE3MiwgMTcxLCAy MTEsIDIxMiwKLTIxMywgMjE0LCAyMTUsIDIxNiwgMjE3LCAyMTgsIDIxOSwgMjIwLCAyMjEsIDIy MiwgMjIzLCAyMjQsIDIyNSwgMjI2LCAyMjcsIDIyOCwKLTIyOSwgMjMxLCAyMzIsIDIzMywgMjM0 LCAyMzUsIDIzNiwgMjM3LCAyMzgsIDIzOSwgMjQwLCAyNDIsIDI0MywgMjQ0LCAyNDUsIDIwNSwK LTEyOCwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAx MzksIDE0MCwgMTQxLCAxNDIsIDE0MywKLTE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1 MCwgMTUxLCAxNTIsIDE1MywgMTU0LCAyNDcsIDI1MCwgMjUxLCAyNTIsIDI1NAotfTsKLS8qCi0g IDctYml0IHRhYmxlIHByb3ZpZGluZyByZWFkYWJsZSB0cmFuc2xhdGlvbiBmcm9tIERFQyBIZWJy ZXctNyB0byBDUDg2Mi4KLSovCi1DT05TVCBDSEFSCi15aDc2MltdID0gewotICAwLCAgIDEsICAg MiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMs ICAxNCwgIDE1LAotIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwg IDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAotIDMyLCAgMzMsICAzNCwgIDM1LCAg MzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3 LAotIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgs ICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAotIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwg IDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAg ODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDky LCAgOTMsICA5NCwgIDk1LAotVU5LLCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEs ICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4Miwg IDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsIDEyMywgMTI0LCAxMjUsIDEy NiwgMTI3Ci19OwotLyoKLSAgOC1iaXQgdGFibGUgcHJvdmlkaW5nIHJlYWRhYmxlIHRyYW5zbGF0 aW9uIGZyb20gQ1A4NjIgdG8gSGVicmV3LTcuCi0qLwotQ09OU1QgQ0hBUgoteTYyaDdbXSA9IHsg IC8qIFBDIENvZGUgUGFnZSA4NjIgdG8gSGVicmV3LTcgKi8KLSAgMCwgICAxLCAgIDIsICAgMywg ICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAx NSwKLSAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2 LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKLSAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcs ICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwg IDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2 MCwgIDYxLCAgNjIsICA2MywKLSA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcx LCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIs ICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAg OTQsICA5NSwKLSA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3 MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0 LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywK LSA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAx MDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKLTExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDEx OCwgMTE5LCAxMjAsIDEyMSwgMTIyLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywKLVVOSywgVU5L LCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywg VU5LLCBVTkssIFVOSywKLVVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBV TkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywKLVVOSywgVU5LLCBVTkssIFVO SywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkss IFVOSywKLVVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywg VU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywKLVVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBV TkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywKLVVO SywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkss IFVOSywgVU5LLCBVTkssIFVOSwotfTsKLS8qCi0gIDctYml0IHRhYmxlIHByb3ZpZGluZyByZWFk YWJsZSB0cmFuc2xhdGlvbiBmcm9tIEhlYnJldy03IHRvIElTTyBMYXRpbi9IZWJyZXcuCi0qLwot Q09OU1QgQ0hBUgoteWg3bGhbXSA9IHsKLSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAg NiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3 LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwg IDI5LCAgMzAsICAzMSwKLSAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAg NDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1 MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIs ICA2MywKLSA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3Mywg IDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAg ODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKLTIw OCwgMjA5LCAyMTAsIDIxMSwgMjEyLCAyMTMsIDIxNCwgMjE1LCAyMTYsIDIxNywgMjE4LCAyMTks IDIyMCwgMjIxLCAyMjIsIDIyMywKLTIyNCwgMjI1LCAyMjYsIDIyNywgMjI4LCAyMjksIDIzMCwg MjMxLCAyMzIsIDIzMywgMjM0LCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNwotfTsKLS8qCi0gIDgt Yml0IHRhYmxlIHByb3ZpZGluZyByZWFkYWJsZSB0cmFuc2xhdGlvbiBmcm9tIElTTyBMYXRpbi9I ZWJyZXcgdG8gSGVicmV3LTcuCi0qLwotQ09OU1QgQ0hBUgoteWxoaDdbXSA9IHsgIC8qIExhdGlu L0hlYnJldyB0byBIZWJyZXctNyAqLwotICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2 LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcs ICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAg MjksICAzMCwgIDMxLAotIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0 MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUx LCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2Miwg IDYzLAotIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAg NzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4 NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAotIDY0 LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwg IDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAg ODcsICA4OCwgIDg5LCAgOTAsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAotVU5LLCBVTkssIFVO SywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkss IFVOSywgVU5LLAotVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywg VU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLAotVU5LLCBVTkssIFVOSywgVU5LLCBV TkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5L LAotVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkss IFVOSywgVU5LLCBVTkssIFVOSywgVU5LLAotVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywg VU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLAotVU5LLCBV TkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5L LCBVTkssIFVOSywgVU5LLAotIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMs IDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAotMTEyLCAxMTMsIDExNCwg MTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIFVOSywgVU5LLCBVTkssIFVO SywgVU5LCi19OwotI2VuZGlmIC8qIEhFQlJFVyAqLwotCi0jaWZkZWYgR1JFRUsKLS8qCi0gIDgt Yml0IFRhYmxlcyBwcm92aWRpbmcgaW52ZXJ0aWJsZSB0cmFuc2xhdGlvbiBiZXR3ZWVuIExhdGlu L0dyZWVrIGFuZCBDUDg2OS4KLSovCi1DT05TVCBDSEFSCi15bGc2OVtdID0geyAgLyogSVNPIDg4 NTktNyBMYXRpbi9HcmVlayB0byBQQyBDb2RlIFBhZ2UgODY5ICovCi0gIDAsICAgMSwgICAyLCAg IDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0 LCAgMTUsCi0gMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUs ICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0LCAgMzUsICAzNiwg IDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0g NDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5 LCAgNjAsICA2MSwgIDYyLCAgNjMsCi0gNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAs ICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwg IDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5 MywgIDk0LCAgOTUsCi0gOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0 LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCi0xMTIsIDExMywgMTE0LCAxMTUs IDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAx MjcsCi0xMzUsIDE0NywgMTQ4LCAxNzYsIDE3NywgMTc4LCAxNzksIDE4MCwgMTg1LCAxODYsIDE4 NywgMTg4LCAxOTEsIDE5MiwgMTkzLCAxOTQsCi0xOTUsIDE5NiwgMTk3LCAyMDAsIDIwMSwgMjAy LCAyMDMsIDIwNCwgMjA1LCAyMDYsIDIxNywgMjE4LCAyMTksIDIyMCwgMjIzLCAyNTQsCi0yNTUs IDEzOSwgMTQwLCAxNTYsIDEyOCwgMTI5LCAxMzgsIDI0NSwgMjQ5LCAxNTEsIDEzMCwgMTc0LCAx MzcsIDI0MCwgMTMxLCAxNDIsCi0yNDgsIDI0MSwgMTUzLCAxNTQsIDIzOSwgMjQ3LCAxMzQsIDEz NiwgMTQxLCAxNDMsIDE0NCwgMTc1LCAxNDYsIDE3MSwgMTQ5LCAxNTIsCi0xNjEsIDE2NCwgMTY1 LCAxNjYsIDE2NywgMTY4LCAxNjksIDE3MCwgMTcyLCAxNzMsIDE4MSwgMTgyLCAxODMsIDE4NCwg MTg5LCAxOTAsCi0xOTgsIDE5OSwgMTMyLCAyMDcsIDIwOCwgMjA5LCAyMTAsIDIxMSwgMjEyLCAy MTMsIDE0NSwgMTUwLCAxNTUsIDE1NywgMTU4LCAxNTksCi0yNTIsIDIxNCwgMjE1LCAyMTYsIDIy MSwgMjIyLCAyMjQsIDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5LCAyMzAsIDIzMSwgMjMyLCAyMzMs Ci0yMzQsIDIzNSwgMjM3LCAyMzYsIDIzOCwgMjQyLCAyNDMsIDI0NCwgMjQ2LCAyNTAsIDE2MCwg MjUxLCAxNjIsIDE2MywgMjUzLCAxMzMKLX07Ci0KLUNPTlNUIENIQVIKLXk2OWxnW10gPSB7ICAv KiBQQyBDb2RlIFBhZ2UgODY5IHRvIElTTyA4ODU5LTcgTGF0aW4vR3JlZWsgKi8KLSAgMCwgICAx LCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwg IDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAg MjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKLSAzMiwgIDMzLCAgMzQsICAz NSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYs ICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1Nywg IDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKLSA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAg NjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKLSA4 MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEs ICA5MiwgIDkzLCAgOTQsICA5NSwKLSA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwg MTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKLTExMiwgMTEzLCAx MTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1 LCAxMjYsIDEyNywKLTE2NCwgMTY1LCAxNzAsIDE3NCwgMjEwLCAyNTUsIDE4MiwgMTI4LCAxODMs IDE3MiwgMTY2LCAxNjEsIDE2MiwgMTg0LCAxNzUsIDE4NSwKLTE4NiwgMjE4LCAxODgsIDEyOSwg MTMwLCAxOTAsIDIxOSwgMTY5LCAxOTEsIDE3OCwgMTc5LCAyMjAsIDE2MywgMjIxLCAyMjIsIDIy MywKLTI1MCwgMTkyLCAyNTIsIDI1MywgMTkzLCAxOTQsIDE5NSwgMTk2LCAxOTcsIDE5OCwgMTk5 LCAxODksIDIwMCwgMjAxLCAxNzEsIDE4NywKLTEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAyMDIs IDIwMywgMjA0LCAyMDUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMjA2LCAyMDcsIDE0MCwKLTE0MSwg MTQyLCAxNDMsIDE0NCwgMTQ1LCAxNDYsIDIwOCwgMjA5LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1 MSwgMTUyLCAxNTMsIDIxMSwKLTIxMiwgMjEzLCAyMTQsIDIxNSwgMjE2LCAyMTcsIDIyNSwgMjI2 LCAyMjcsIDE1NCwgMTU1LCAxNTYsIDE1NywgMjI4LCAyMjksIDE1OCwKLTIzMCwgMjMxLCAyMzIs IDIzMywgMjM0LCAyMzUsIDIzNiwgMjM3LCAyMzgsIDIzOSwgMjQwLCAyNDEsIDI0MywgMjQyLCAy NDQsIDE4MCwKLTE3MywgMTc3LCAyNDUsIDI0NiwgMjQ3LCAxNjcsIDI0OCwgMTgxLCAxNzYsIDE2 OCwgMjQ5LCAyNTEsIDIyNCwgMjU0LCAxNTksIDE2MAotfTsKLS8qCi0gIDctYml0IHRhYmxlIHBy b3ZpZGluZyByZWFkYWJsZSB0cmFuc2xhdGlvbiBmcm9tIEVMT1QgOTI3IHRvIENQODY5LgotKi8K LUNPTlNUIENIQVIKLXllZzY5W10gPSB7Ci0gIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAg IDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCi0gMTYsICAx NywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgs ICAyOSwgIDMwLCAgMzEsCi0gMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwg IDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCi0gNDgsICA0OSwgIDUwLCAg NTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYy LCAgNjMsCi0gNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMs ICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCi0gODAsICA4MSwgIDgyLCAgODMsICA4NCwg IDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCi0g OTYsIDE2NCwgMTY1LCAxNjYsIDE2NywgMTY4LCAxNjksIDE3MCwgMTcyLCAxNzMsIDE4MSwgMTgy LCAxODMsIDE4NCwgMTg5LCAxOTAsCi0xOTgsIDE5OSwgMjA3LCAyMDgsIDIwOSwgMjEwLCAyMTEs IDIxMiwgMjEzLCAgMzIsICAzMiwgIDIzLCAxMjQsIDEyNSwgMTI2LCAxMjcKLX07Ci0vKgotICA4 LWJpdCB0YWJsZSBwcm92aWRpbmcgcmVhZGFibGUgdHJhbnNsYXRpb24gZnJvbSBDUDg2OSB0byBF TE9UIDkyNy4KLSovCi1DT05TVCBDSEFSCi15NjllZ1tdID0geyAgLyogUEMgQ29kZSBQYWdlIDg2 OSB0byBFTE9UIDkyNyAqLwotICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcs ICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAotIDE2LCAgMTcsICAxOCwg IDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAz MCwgIDMxLAotIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQx LCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAotIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIs ICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAot IDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3 NSwgIDc2LCAgNzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2 LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAotIDk2LCAgNjUs ICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAg NzcsICA3OCwgIDc5LAotIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4 OCwgIDg5LCAgOTAsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAotVU5LLCBVTkssIFVOSywgVU5L LCBVTkssIFVOSywgIDk3LCBVTkssICA0NiwgVU5LLCAxMjQsICAzOSwgIDM5LCAxMDEsICA0NSwg MTAzLAotMTA1LCAxMDUsIDExMSwgVU5LLCBVTkssIDExNiwgMTE2LCBVTkssIDEyMCwgIDUwLCAg NTEsICA5NywgVU5LLCAxMDEsIDEwMywgMTA1LAotMTA1LCAxMDUsIDExMSwgMTE2LCAgOTcsICA5 OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIFVOSywgMTA0LCAxMDUsICAzNCwgIDM0LAotVU5L LCBVTkssIFVOSywgVU5LLCBVTkssIDEwNiwgMTA3LCAxMDgsIDEwOSwgVU5LLCBVTkssIFVOSywg VU5LLCAxMTAsIDExMSwgVU5LLAotVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgMTEyLCAx MTMsIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgMTE0LAotMTE1LCAxMTYsIDEx NywgMTE4LCAxMTksIDEyMCwgIDk3LCAgOTgsICA5OSwgVU5LLCBVTkssIFVOSywgVU5LLCAxMDAs IDEwMSwgVU5LLAotMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwg MTExLCAxMTIsIDExMywgMTE0LCAxMTQsIDExNSwgIDM5LAotIDQ1LCBVTkssIDExNiwgMTE3LCAx MTgsIFVOSywgMTE5LCBVTkssIFVOSywgVU5LLCAxMjAsIDExNiwgMTE2LCAxMjAsIFVOSywgIDMy Ci0KLX07Ci0vKgotICA3LWJpdCB0YWJsZSBwcm92aWRpbmcgcmVhZGFibGUgdHJhbnNsYXRpb24g ZnJvbSBFTE9UIDkyNyB0byBJU08gTGF0aW4vR3JlZWsuCi0qLwotQ09OU1QgQ0hBUgoteWVnbGdb XSA9IHsKLSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwg IDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAg MjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKLSAz MiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMs ICA0NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwg IDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKLSA2NCwgIDY1LCAg NjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3 LCAgNzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgs ICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKLSA5NiwgMTkzLCAxOTQsIDE5NSwg MTk2LCAxOTcsIDE5OCwgMTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYsIDIw NywKLTIwOCwgMjA5LCAyMTEsIDIxMiwgMjEzLCAyMTQsIDIxNSwgMjE2LCAyMTcsICAzMiwgIDMy LCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNwotfTsKLS8qCi0gIDgtYml0IHRhYmxlIHByb3ZpZGlu ZyByZWFkYWJsZSB0cmFuc2xhdGlvbiBmcm9tIElTTyBMYXRpbi9HcmVlayB0byBFTE9UIDkyNy4K LSovCi1DT05TVCBDSEFSCi15bGdlZ1tdID0geyAgLyogTGF0aW4vR3JlZWsgdG8gRUxPVCA5Mjcg Ki8KLSAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEw LCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKLSAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEs ICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKLSAzMiwg IDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0 NCwgIDQ1LCAgNDYsICA0NywKLSA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1 LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKLSA2NCwgIDY1LCAgNjYs ICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAg NzgsICA3OSwKLSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4 OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKLSA5NiwgIDY1LCAgNjYsICA2NywgIDY4 LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwK LSA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAx MjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKLVVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVO SywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywKLVVOSywgVU5L LCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywg VU5LLCBVTkssIFVOSywKLSAzMiwgIDM5LCAgMzksIFVOSywgVU5LLCBVTkssIDEyNCwgVU5LLCAg MzQsIFVOSywgVU5LLCAgMzQsIFVOSywgIDQ1LCBVTkssICA0NSwKLVVOSywgVU5LLCAgNTAsICA1 MSwgIDM5LCBVTkssICA5NywgIDQ2LCAxMDEsIDEwMywgMTA1LCAgMzQsIDExMSwgVU5LLCAxMTYs IDEyMCwKLVVOSywgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwg MTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKLTExMiwgMTEzLCBVTkssIDExNCwgMTE1LCAx MTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTA1LCAxMTYsICA5NywgMTAxLCAxMDMsIDEwNSwKLTEx NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcs IDEwOCwgMTA5LCAxMTAsIDExMSwKLTExMiwgMTEzLCAxMTQsIDExNCwgMTE1LCAxMTYsIDExNywg MTE4LCAxMTksIDEyMCwgMTA1LCAxMTYsIDExMSwgMTE2LCAxMjAsIFVOSwotfTsKLSNlbmRpZiAv KiBHUkVFSyAqLwotCi0vKiBUcmFuc2xhdGlvbiBmdW5jdGlvbnMgLi4uICovCi0KLUNIQVIJCQkJ CS8qIFRoZSBpZGVudGl0eSBmdW5jdGlvbi4uLiAqLwotI2lmZGVmIENLX0FOU0lDCi1pZGVudChD SEFSIGMpCQkJCS8qIChubyBsb25nZXIgdXNlZCkgKi8KLSNlbHNlCi1pZGVudChjKSBDSEFSIGM7 Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogaWRlbnQgKi8KLSAgICByZXR1cm4oYyk7CQkJ CS8qIEluc3RlYWQsIGVudGVyIE5VTEwgaW4gdGhlICAqLwotfQkJCQkJLyogdGFibGUgb2YgZnVu Y3Rpb25zIHRvIGF2b2lkICovCi0JCQkJCS8qIG5lZWRsZXNzIGZ1bmN0aW9uIGNhbGxzLiAgICAq LwotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhsZWZ0MTI4KENIQVIgYykKLSNlbHNlCi14bGVm dDEyOChjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGxlZnQxMjggKi8K LSAgICByZXR1cm4oKGMgPCAxMjgpID8gYyA6ICc/Jyk7Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19B TlNJQwoteGxlZnQxNjAoQ0hBUiBjKQotI2Vsc2UKLXhsZWZ0MTYwKGMpIENIQVIgYzsKLSNlbmRp ZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bGVmdDE2MCAqLwotICAgIHJldHVybigoYyA8IDE2MCkg PyBjIDogJz8nKTsKLX0KLQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhsMWFzKENIQVIgYykK LSNlbHNlCi14bDFhcyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGwx YXMgKi8gCQkJCS8qIExhdGluLTEgdG8gVVMgQVNDSUkuLi4gKi8KLSAgICBzd2l0Y2gobGFuZ3Nb bGFuZ3VhZ2VdLmlkKSB7Ci0KLSAgICAgIGNhc2UgTF9EVVRDSDoKLQlpZiAoYyA9PSAyNTUpIHsJ CQkvKiBEdXRjaCB1bWxhdXQteSAqLwotCSAgICB6bXN0dWZmKCdqJyk7CQkvKiBiZWNvbWVzIGlq ICovCi0JICAgIHJldHVybignaScpOwotCX0gZWxzZSByZXR1cm4oeWwxYXNbY10pOwkvKiBhbGwg b3RoZXJzIGJ5IHRoZSBib29rICovCi0KLSAgICAgIGNhc2UgTF9HRVJNQU46Ci0Jc3dpdGNoIChj KSB7CQkJLyogR2VybWFuLCBzcGVjaWFsIHJ1bGVzLiAqLwotCSAgY2FzZSAxOTY6CQkJLyogdW1s YXV0LUEgLT4gQWUgKi8KLQkgICAgem1zdHVmZignZScpOwotCSAgICByZXR1cm4oJ0EnKTsKLQkg IGNhc2UgMjE0OgkJCS8qIHVtbGF1dC1PIC0+IE9lICovCi0JICAgIHptc3R1ZmYoJ2UnKTsKLQkg ICAgcmV0dXJuKCdPJyk7Ci0JICBjYXNlIDIyMDoJCQkvKiB1bWxhdXQtVSAtPiBVZSAqLwotCSAg ICB6bXN0dWZmKCdlJyk7Ci0JICAgIHJldHVybignVScpOwotCSAgY2FzZSAyMjg6CQkJLyogdW1s YXV0LWEgLT4gYWUgKi8KLQkgICAgem1zdHVmZignZScpOwotCSAgICByZXR1cm4oJ2EnKTsKLQkg IGNhc2UgMjQ2OgkJCS8qIHVtbGF1dC1vIC0+IG9lICovCi0JICAgIHptc3R1ZmYoJ2UnKTsKLQkg ICAgcmV0dXJuKCdvJyk7Ci0JICBjYXNlIDI1MjoJCQkvKiB1bWxhdXQtdSAtPiB1ZSAqLwotCSAg ICB6bXN0dWZmKCdlJyk7Ci0JICAgIHJldHVybigndScpOwotCSAgY2FzZSAyMjM6CQkJLyogZXNz LXpldCAtPiBzcyAqLwotCSAgICB6bXN0dWZmKCdzJyk7Ci0JICAgIHJldHVybigncycpOwotCSAg ZGVmYXVsdDogcmV0dXJuKHlsMWFzW2NdKTsJLyogYWxsIG90aGVycyBieSB0aGUgYm9vayAqLwot CX0KLSAgICAgIGNhc2UgTF9EQU5JU0g6Ci0gICAgICBjYXNlIExfRklOTklTSDoKLSAgICAgIGNh c2UgTF9OT1JXRUdJQU46Ci0gICAgICBjYXNlIExfU1dFRElTSDoKLQlzd2l0Y2ggKGMpIHsJCQkv KiBTY2FuZGFuYXZpYW4gbGFuZ3VhZ2VzLiAqLwotCSAgY2FzZSAxOTY6CQkJLyogdW1sYXV0LUEg LT4gQWUgKi8KLSAgICAgICAgICBjYXNlIDE5ODoJCQkvKiBBRSBsaWdhdHVyZSBhbHNvIC0+IEFl ICovCi0JICAgIHptc3R1ZmYoJ2UnKTsKLQkgICAgcmV0dXJuKCdBJyk7Ci0JICBjYXNlIDIxNDoJ CQkvKiB1bWxhdXQtTyAtPiBPZSAqLwotCSAgY2FzZSAyMTY6CQkJLyogTy1zbGFzaCAtPiBPZSAq LwotCSAgICB6bXN0dWZmKCdlJyk7Ci0JICAgIHJldHVybignTycpOwotCSAgY2FzZSAyMjA6CQkJ LyogdW1sYXV0LVUgLT4gVWUgKi8KLQkgIC8qICByZXR1cm4oJ1knKTsgcmVwbGFjZWQgYnkgIlVl IiBieSBwb3B1bGFyIGRlbWFuZC4gKi8KLSAgICAgICAgICAvKiAgWSBmb3IgVW1sYXV0LVUgaXMg b25seSB1c2VkIGluIEdlcm1hbiBuYW1lcy4gKi8KLQkgICAgem1zdHVmZignZScpOwotCSAgICBy ZXR1cm4oJ1UnKTsKLQkgIGNhc2UgMjI4OgkJCS8qIHVtbGF1dC1hIC0+IGFlICovCi0gICAgICAg ICAgY2FzZSAyMzA6CQkJLyogZGl0dG8gZm9yIGFlIGxpZ2F0dXJlICovCi0JICAgIHptc3R1ZmYo J2UnKTsKLQkgICAgcmV0dXJuKCdhJyk7Ci0JICBjYXNlIDI0NjoJCQkvKiB1bWxhdXQtbyAtPiBv ZSAqLwotCSAgY2FzZSAyNDg6CQkJLyogby1zbGFzaCAtPiBvZSAqLwotCSAgICB6bXN0dWZmKCdl Jyk7Ci0JICAgIHJldHVybignbycpOwotCSAgY2FzZSAyNTI6CQkJLyogdW1sYXV0LXUgLT4gdWUg Ki8KLQkgIC8qICByZXR1cm4oJ3knKTsgcmVwbGFjZWQgYnkgInVlIiBieSBwb3B1bGFyIGRlbWFu ZC4gKi8KLQkgICAgem1zdHVmZignZScpOwotCSAgICByZXR1cm4oJ3UnKTsKLQkgIGNhc2UgMTk3 OgkJCS8qIEEtcmluZyAtPiBBYSAqLwotCSAgICB6bXN0dWZmKCdhJyk7Ci0JICAgIHJldHVybign QScpOwotICAgICAgICAgIGNhc2UgMjI5OgkJCS8qIGEtcmluZyAtPiBhYSAqLwotCSAgICB6bXN0 dWZmKCdhJyk7Ci0JICAgIHJldHVybignYScpOwotCSAgZGVmYXVsdDogcmV0dXJuKHlsMWFzW2Nd KTsJLyogQWxsIG90aGVycyBieSB0aGUgYm9vayAqLwotCX0KLSAgICAgIGNhc2UgTF9JQ0VMQU5E SUM6CQkJLyogSWNlbGFuZGljLiAqLwotCXN3aXRjaCAoYykgewotCSAgY2FzZSAxOTg6CQkJLyog dXBwZXJjYXNlIEFFIC0+IEFFICovCi0JICAgIHptc3R1ZmYoJ2UnKTsKLQkgICAgcmV0dXJuKCdB Jyk7Ci0JICBjYXNlIDIwODoJCQkvKiB1cHBlcmNhc2UgRXRoIC0+IEQgKi8KLQkgICAgcmV0dXJu KCdEJyk7Ci0JICBjYXNlIDIxNDoJCQkvKiB1cHBlcmNhc2UgTy1kaWFlcmVzaXMgLT4gT2UgKi8K LQkgICAgem1zdHVmZignZScpOwotCSAgICByZXR1cm4oJ08nKTsKLQkgIGNhc2UgMjIyOgkJCS8q IHVwcGVyY2FzZSBUaG9ybiAtPiBUaCAqLwotCSAgICB6bXN0dWZmKCdoJyk7Ci0JICAgIHJldHVy bignVCcpOwotCSAgY2FzZSAyMzA6CQkJLyogbG93ZXJjYXNlIGFlIC0+IGFlICovCi0JICAgIHpt c3R1ZmYoJ2UnKTsKLQkgICAgcmV0dXJuKCdhJyk7Ci0JICBjYXNlIDI0MDoJCQkvKiBsb3dlcmNh c2UgRXRoIC0+IGQgKi8KLQkgICAgcmV0dXJuKCdkJyk7Ci0JICBjYXNlIDI0NjoJCQkvKiBsb3dl cmNhc2UgTy1kaWFlcmVzaXMgLT4gb2UgKi8KLQkgICAgem1zdHVmZignZScpOwotCSAgICByZXR1 cm4oJ28nKTsKLQkgIGNhc2UgMjU0OgkJCS8qIGxvd2VyY2FzZSBUaG9ybiAtPiB0aCAqLwotCSAg ICB6bXN0dWZmKCdoJyk7Ci0JICAgIHJldHVybigndCcpOwotCSAgZGVmYXVsdDogcmV0dXJuKHls MWFzW2NdKTsJLyogQWxsIG90aGVycyBieSB0aGUgYm9vayAqLwotCX0KLSAgICAgIGRlZmF1bHQ6 Ci0JcmV0dXJuKHlsMWFzW2NdKTsJCS8qIE5vbmUgb2YgdGhlIGFib3ZlLCBieSB0aGUgdGFibGUu ICovCi0gICAgfQotfQotCi1DSEFSCQkJCQkvKiBDUDEyNTIgdG8gQVNDSUkgKi8KLSNpZmRlZiBD S19BTlNJQwoteHcxYXMoQ0hBUiBjKQotI2Vsc2UKLXh3MWFzKGMpIENIQVIgYzsKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwoteyAvKiB4dzFhcyAqLwotICAgIHN3aXRjaChjKSB7CQkJCS8qIE1pY3Jv c29mdCBuYW1lLi4uICovCi0gICAgICBjYXNlIDB4ODA6IHJldHVybignPycpOwkJLyogRXVybyBT aWduICovCi0gICAgICBjYXNlIDB4ODI6IHJldHVybignXDA0NycpOwkvKiBTaW5nbGUgTG93LTkg UXVvdGF0aW9uIE1hcmsgKi8KLSAgICAgIGNhc2UgMHg4MzogcmV0dXJuKCdmJyk7CQkvKiBMYXRp biBTbWFsbCBMZXR0ZXIgZiB3aXRoIEhvb2sgKi8KLSAgICAgIGNhc2UgMHg4NDogcmV0dXJuKCci Jyk7CQkvKiBEb3VibGUgbG93LTkgUXVvdGF0aW9uIE1hcmsgKi8KLSAgICAgIGNhc2UgMHg4NTog cmV0dXJuKCctJyk7CQkvKiBIb3Jpem9udGFsIEVsbGlwc2lzICovCi0gICAgICBjYXNlIDB4ODY6 IHJldHVybignKycpOwkJLyogRGFnZ2VyICovCi0gICAgICBjYXNlIDB4ODc6IHJldHVybignKycp OwkJLyogRG91YmxlIERhZ2dlciAqLwotICAgICAgY2FzZSAweDg4OiByZXR1cm4oJ14nKTsJCS8q IE1vZGlmaWVyIExldHRlciBDaXJjdW1mbGV4IEFjY2VudCAqLwotICAgICAgY2FzZSAweDg5OiBy ZXR1cm4oJz8nKTsJCS8qIFBlciBNaWxsZSBTaWduICovCi0gICAgICBjYXNlIDB4OEE6IHJldHVy bignUycpOwkJLyogTGF0aW4gQ2FwaXRhbCBMZXR0ZXIgUyB3aXRoIENhcm9uICovCi0gICAgICBj YXNlIDB4OEI6IHJldHVybignPCcpOwkJLyogU2luZ2xlIExlZnQgQW5nbGUgUXVvdGF0aW9uIE1h cmsgKi8KLSAgICAgIGNhc2UgMHg4QzogcmV0dXJuKCdPJyk7CQkvKiBMYXRpbiBDYXBpdGFsIExp Z2F0dXJlIE9FICovCi0gICAgICBjYXNlIDB4OEU6IHJldHVybignWicpOwkJLyogTGF0aW4gQ2Fw aXRhbCBMZXR0ZXIgWiB3aXRoIENhcm9uICovCi0gICAgICBjYXNlIDB4OTE6IHJldHVybignXDA0 NycpOwkvKiBMZWZ0IFNpbmdsZSBRdW90YXRpb24gTWFyayAqLwotICAgICAgY2FzZSAweDkyOiBy ZXR1cm4oJ1wwNDcnKTsJLyogUmlnaHQgU2luZ2xlIFF1b3RhdGlvbiBNYXJrICovCi0gICAgICBj YXNlIDB4OTM6IHJldHVybignIicpOwkJLyogTGVmdCBEb3VibGUgUXVvdGF0aW9uIE1hcmsgKi8K LSAgICAgIGNhc2UgMHg5NDogcmV0dXJuKCciJyk7CQkvKiBSaWdodCBEb3VibGUgUXVvdGF0aW9u IE1hcmsgKi8KLSAgICAgIGNhc2UgMHg5NTogcmV0dXJuKCcuJyk7CQkvKiBCdWxsZXQgKi8KLSAg ICAgIGNhc2UgMHg5NjogcmV0dXJuKCctJyk7CQkvKiBFbiBEYXNoICovCi0gICAgICBjYXNlIDB4 OTc6IHJldHVybignLScpOwkJLyogRW0gRGFzaCAqLwotICAgICAgY2FzZSAweDk4OiByZXR1cm4o J34nKTsJCS8qIFNtYWxsIFRpbGRlICovCi0gICAgICBjYXNlIDB4OTk6IHJldHVybignVCcpOwkJ LyogVHJhZGUgTWFyayBTaWduICovCi0gICAgICBjYXNlIDB4OUE6IHJldHVybigncycpOwkJLyog TGF0aW4gU21hbGwgTGV0dGVyIHMgd2l0aCBDYXJvbiAqLwotICAgICAgY2FzZSAweDlCOiByZXR1 cm4oJz4nKTsJCS8qIFNpbmdsZSBSaWdodCBBbmdsZSBRdW90YXRpb24gTWFyayAqLwotICAgICAg Y2FzZSAweDlDOiByZXR1cm4oJ28nKTsJCS8qIExhdGluIFNtYWxsIExpZ2F0dXJlIE9FICovCi0g ICAgICBjYXNlIDB4OUU6IHJldHVybigneicpOwkJLyogTGF0aW4gU21hbGwgTGV0dGVyIHogd2l0 aCBDYXJvbiAqLwotICAgICAgY2FzZSAweDlGOiByZXR1cm4oJ1knKTsJCS8qIExhdGluIENhcGl0 YWwgTGV0dGVyIFkgRGlhZXJlc2lzICovCi0gICAgICBkZWZhdWx0OgotCWlmIChjID4gMHg4MCAm JiBjIDwgMHhhMCkKLQkgIHJldHVybignPycpOwotCWVsc2UKLQkgIHJldHVybih5bDFhc1tjXSk7 Ci0gICAgfQotfQotCi1DSEFSCQkJCQkvKiBDUDEyNTIgdG8gTGF0aW4tMSAqLwotI2lmZGVmIENL X0FOU0lDCi14dzFsMShDSEFSIGMpCi0jZWxzZQoteHcxbDEoYykgQ0hBUiBjOwotI2VuZGlmIC8q IENLX0FOU0lDICovCi17IC8qIHh3MWwxICovCi0gICAgaWYgKGMgPT0gMHg5NSkgcmV0dXJuKDB4 YjcpOwkvKiBNaWRkbGUgZG90ICovCi0gICAgcmV0dXJuKChjIDwgMTYwKSA/IHh3MWFzKGMpIDog Yyk7Ci19Ci0KLUNIQVIJCQkJCS8qIExhdGluLTEgdG8gR2VybWFuICovCi0jaWZkZWYgQ0tfQU5T SUMKLXhsMWdlKENIQVIgYykKLSNlbHNlCi14bDFnZShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tf QU5TSUMgKi8KLXsgLyogeGwxZ2UgKi8KLSAgICByZXR1cm4oeWwxZ2VbY10pOwotfQotCi1DSEFS CQkJCQkvKiBHZXJtYW4gdG8gTGF0aW4tMSAqLwotI2lmZGVmIENLX0FOU0lDCi14Z2VsMShDSEFS IGMpCi0jZWxzZQoteGdlbDEoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8q IHhnZWwxICovCi0gICAgaWYgKGMgJiAweDgwKQotICAgICAgcmV0dXJuKFVOSyk7Ci0gICAgcmV0 dXJuKHlnZWwxW2NdKTsKLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14Z2VhcyhDSEFSIGMp Ci0jZWxzZQoteGdlYXMoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhn ZWFzICovCQkJCS8qIEdlcm1hbiBJU08gNjQ2IHRvIEFTQ0lJICovCi0gICAgaWYgKGMgJiAweDgw KQotICAgICAgcmV0dXJuKFVOSyk7Ci0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBjYXNlIDkxOgkJ CQkvKiB1bWxhdXQtQSAtPiBBZSAqLwotCXptc3R1ZmYoJ2UnKTsKLQlyZXR1cm4oJ0EnKTsKLSAg ICAgIGNhc2UgOTI6CQkJCS8qIHVtbGF1dC1PIC0+IE9lICovCi0Jem1zdHVmZignZScpOwotCXJl dHVybignTycpOwotICAgICAgY2FzZSA5MzoJCQkJLyogdW1sYXV0LVUgLT4gVWUgKi8KLQl6bXN0 dWZmKCdlJyk7Ci0JcmV0dXJuKCdVJyk7Ci0gICAgICBjYXNlIDEyMzoJCQkJLyogdW1sYXV0LWEg LT4gYWUgKi8KLQl6bXN0dWZmKCdlJyk7Ci0JcmV0dXJuKCdhJyk7Ci0gICAgICBjYXNlIDEyNDoJ CQkJLyogdW1sYXV0LW8gLT4gb2UgKi8KLQl6bXN0dWZmKCdlJyk7Ci0JcmV0dXJuKCdvJyk7Ci0g ICAgICBjYXNlIDEyNToJCQkJLyogdW1sYXV0LXUgLT4gdWUgKi8KLQl6bXN0dWZmKCdlJyk7Ci0J cmV0dXJuKCd1Jyk7Ci0gICAgICBjYXNlIDEyNjoJCQkJLyogZXNzLXpldCAtPiBzcyAqLwotCXpt c3R1ZmYoJ3MnKTsKLQlyZXR1cm4oJ3MnKTsKLSAgICAgIGRlZmF1bHQ6ICByZXR1cm4oYyk7CQkv KiBhbGwgb3RoZXJzIHN0YXkgdGhlIHNhbWUgKi8KLSAgICB9Ci19Ci0KLUNIQVIKLSNpZmRlZiBD S19BTlNJQwoteGwxdzEoQ0hBUiBjKQotI2Vsc2UKLXhsMXcxKGMpIENIQVIgYzsKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwoteyAvKiB4bDF3MSAqLwkJCQkvKiBMYXRpbi0xIHRvIENQMTI1MiAoV2lu ZG93cyBMMSkgKi8KLSAgICBpZiAoYyA+IDEyNyAmJiBjIDwgMTYwKQotICAgICAgcmV0dXJuKFVO Syk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKGMpOwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5T SUMKLXhkdWFzKENIQVIgYykKLSNlbHNlCi14ZHVhcyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tf QU5TSUMgKi8KLXsgLyogeGR1YXMgKi8JCQkJLyogRHV0Y2ggSVNPIDY0NiB0byBVUyBBU0NJSSAq LwotICAgIGlmIChjICYgMHg4MCkKLSAgICAgIHJldHVybihVTkspOwotICAgIHN3aXRjaCAoYykg ewotICAgICAgY2FzZSA2NDogIHJldHVybihVTkspOwkJLyogMy80ICovCi0gICAgICBjYXNlIDkx OgkJCQkvKiB5LWRpYWVyZXNpcyAqLwotCXptc3R1ZmYoJ2onKTsKLQlyZXR1cm4oJ2knKTsKLSAg ICAgIGNhc2UgOTI6ICByZXR1cm4oVU5LKTsJCS8qIDEvMiAqLwotICAgICAgY2FzZSA5MzogIHJl dHVybigxMjQpOwkJLyogdmVydGljYWwgYmFyICovCi0gICAgICBjYXNlIDEyMzogcmV0dXJuKDM0 KTsJCS8qIGRpYWVyZXNpcyAqLwotICAgICAgY2FzZSAxMjQ6IHJldHVybihVTkspOwkJLyogRmxv cmluICovCi0gICAgICBjYXNlIDEyNTogcmV0dXJuKFVOSyk7CQkvKiAxLzQgKi8KLSAgICAgIGNh c2UgMTI2OiByZXR1cm4oMzkpOwkJLyogQXBvc3Ryb3BoZSAqLwotICAgICAgZGVmYXVsdDogIHJl dHVybihjKTsKLSAgICB9Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGZpYXMoQ0hBUiBj KQotI2Vsc2UKLXhmaWFzKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4 ZmlhcyAqLwkJCQkvKiBGaW5uaXNoIElTTyA2NDYgdG8gVVMgQVNDSUkgKi8KLSAgICBpZiAoYyAm IDB4ODApCi0gICAgICByZXR1cm4oVU5LKTsKLSAgICBzd2l0Y2ggKGMpIHsKLSAgICAgIGNhc2Ug OTE6CQkJCS8qIEEtZGlhZXJlc2lzICovCi0Jem1zdHVmZignZScpOwotCXJldHVybignQScpOwot ICAgICAgY2FzZSA5MjoJCQkJLyogTy1kaWFlcmVzaXMgKi8KLQl6bXN0dWZmKCdlJyk7Ci0JcmV0 dXJuKCdPJyk7Ci0gICAgICBjYXNlIDkzOgkJCQkvKiBBLXJpbmcgKi8KLQl6bXN0dWZmKCdhJyk7 Ci0JcmV0dXJuKCdBJyk7Ci0gICAgICBjYXNlIDk0OgkJCQkvKiBVLWRpYWVyZXNpcyAqLwotCS8q IHJldHVybignWScpOyAqLwotCXptc3R1ZmYoJ2UnKTsKLQlyZXR1cm4oJ1UnKTsKLSAgICAgIGNh c2UgOTY6CQkJCS8qIGUtYWN1dGUgKi8KLQlyZXR1cm4oJ2UnKTsKLSAgICAgIGNhc2UgMTIzOgkJ CQkvKiBhLWRpYWVyZXNpcyAqLwotCXptc3R1ZmYoJ2UnKTsKLQlyZXR1cm4oJ2EnKTsKLSAgICAg IGNhc2UgMTI0OgkJCQkvKiBvLWRpYWVyZXNpcyAqLwotCXptc3R1ZmYoJ2UnKTsKLQlyZXR1cm4o J28nKTsKLSAgICAgIGNhc2UgMTI1OgkJCQkvKiBhLXJpbmcgKi8KLQl6bXN0dWZmKCdhJyk7Ci0J cmV0dXJuKCdhJyk7Ci0gICAgICBjYXNlIDEyNjoJCQkJLyogdS1kaWFlcmVzaXMgKi8KLQkvKiBy ZXR1cm4oJ3knKTsgKi8KLQl6bXN0dWZmKCdlJyk7Ci0JcmV0dXJuKCdVJyk7Ci0gICAgICBkZWZh dWx0OgotCXJldHVybihjKTsKLSAgICB9Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGZy YXMoQ0hBUiBjKQotI2Vsc2UKLXhmcmFzKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAq LwoteyAvKiB4ZnJhcyAqLwkJCQkvKiBGcmVuY2ggSVNPIDY0NiB0byBVUyBBU0NJSSAqLwotICAg IGlmIChjICYgMHg4MCkKLSAgICAgIHJldHVybihVTkspOwotICAgIHN3aXRjaCAoYykgewotICAg ICAgY2FzZSA2NDogIHJldHVybig5Nyk7CQkvKiBhIGdyYXZlICovCi0gICAgICBjYXNlIDkxOiAg cmV0dXJuKFVOSyk7CQkvKiBkZWdyZWUgc2lnbiAqLwotICAgICAgY2FzZSA5MjogIHJldHVybig5 OSk7CQkvKiBjIGNlZGlsbGEgKi8KLSAgICAgIGNhc2UgOTM6ICByZXR1cm4oVU5LKTsJCS8qIHBh cmFncmFwaCBzaWduICovCi0gICAgICBjYXNlIDEyMzogcmV0dXJuKDEwMSk7CQkvKiBlIGFjdXRl ICovCi0gICAgICBjYXNlIDEyNDogcmV0dXJuKDExNyk7CQkvKiB1IGdyYXZlICovCi0gICAgICBj YXNlIDEyNTogcmV0dXJuKDEwMSk7CQkvKiBlIGdyYXZlICovCi0gICAgICBjYXNlIDEyNjogcmV0 dXJuKDM0KTsJCS8qIGRpYWVyZXNpcyAqLwotICAgICAgZGVmYXVsdDogIHJldHVybihjKTsKLSAg ICB9Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGZjYXMoQ0hBUiBjKQotI2Vsc2UKLXhm Y2FzKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4ZmNhcyAqLwkJCQkv KiBGcmVuY2ggQ2FuYWRpYW4gSVNPIDY0NiB0byBBU0NJSSAqLwotICAgIGlmIChjICYgMHg4MCkK LSAgICAgIHJldHVybihVTkspOwotICAgIHN3aXRjaCAoYykgewotICAgICAgY2FzZSA2NDogIHJl dHVybignYScpOwkJLyogYSBncmF2ZSAqLwotICAgICAgY2FzZSA5MTogIHJldHVybignYScpOwkJ LyogYSBjaXJjdW1mbGV4ICovCi0gICAgICBjYXNlIDkyOiAgcmV0dXJuKCdjJyk7CQkvKiBjIGNl ZGlsbGEgKi8KLSAgICAgIGNhc2UgOTM6ICByZXR1cm4oJ2UnKTsJCS8qIGUgY2lyY3VtZmxleCAq LwotICAgICAgY2FzZSA5NDogIHJldHVybignaScpOwkJLyogaSBjaXJjdW1mbGV4ICovCi0gICAg ICBjYXNlIDk2OiAgcmV0dXJuKCdvJyk7CQkvKiBvIGNpcmN1bWZsZXggKi8KLSAgICAgIGNhc2Ug MTIzOiByZXR1cm4oJ2UnKTsJCS8qIGUgYWN1dGUgKi8KLSAgICAgIGNhc2UgMTI0OiByZXR1cm4o J3UnKTsJCS8qIHUgZ3JhdmUgKi8KLSAgICAgIGNhc2UgMTI1OiByZXR1cm4oJ2UnKTsJCS8qIGUg Z3JhdmUgKi8KLSAgICAgIGNhc2UgMTI2OiByZXR1cm4oJ3UnKTsJCS8qIHUgY2lyY3VtZmxleCAq LwotICAgICAgZGVmYXVsdDogIHJldHVybihjKTsKLSAgICB9Ci19Ci0KLUNIQVIKLSNpZmRlZiBD S19BTlNJQwoteGl0YXMoQ0hBUiBjKQotI2Vsc2UKLXhpdGFzKGMpIENIQVIgYzsKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwoteyAvKiB4aXRhcyAqLwkJCQkvKiBJdGFsaWFuIElTTyA2NDYgdG8gQVND SUkgKi8KLSAgICBpZiAoYyAmIDB4ODApCi0gICAgICByZXR1cm4oVU5LKTsKLSAgICBzd2l0Y2gg KGMpIHsKLSAgICAgIGNhc2UgOTE6ICByZXR1cm4oVU5LKTsJCS8qIGRlZ3JlZSAqLwotICAgICAg Y2FzZSA5MjogIHJldHVybignYycpOwkJLyogYyBjZWRpbGxhICovCi0gICAgICBjYXNlIDkzOiAg cmV0dXJuKCdlJyk7CQkvKiBlIGFjdXRlICovCi0gICAgICBjYXNlIDk2OiAgcmV0dXJuKCd1Jyk7 CQkvKiB1IGdyYXZlICovCi0gICAgICBjYXNlIDEyMzogcmV0dXJuKCdhJyk7CQkvKiBhIGdyYXZl ICovCi0gICAgICBjYXNlIDEyNDogcmV0dXJuKCdvJyk7CQkvKiBvIGdyYXZlICovCi0gICAgICBj YXNlIDEyNTogcmV0dXJuKCdlJyk7CQkvKiBlIGdyYXZlICovCi0gICAgICBjYXNlIDEyNjogcmV0 dXJuKCdpJyk7CQkvKiBpIGdyYXZlICovCi0gICAgICBkZWZhdWx0OiAgcmV0dXJuKGMpOwotICAg IH0KLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14bmVhcyhDSEFSIGMpCi0jZWxzZQoteG5l YXMoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhuZWFzICovCQkJCS8q IE5lWFQgdG8gQVNDSUkgKi8KLSAgICBpZiAobGFuZ3NbbGFuZ3VhZ2VdLmlkID09IExfRlJFTkNI KSB7IC8qIElmIFNFVCBMQU5HVUFHRSBGUkVOQ0ggKi8KLQlpZiAoYyA9PSAyMzQpIHsJCQkvKiBo YW5kbGUgT0UgZGlncmFwaC4gKi8KLQkgICAgem1zdHVmZignRScpOwotCSAgICByZXR1cm4oJ08n KTsKLQl9IGVsc2UgaWYgKGMgPT0gMjUwKSB7CQkvKiBBbHNvIGxvd2VyY2FzZSBvZS4gKi8KLQkg ICAgem1zdHVmZignZScpOwotCSAgICByZXR1cm4oJ28nKTsKLQl9Ci0gICAgfQotICAgIGMgPSB4 bmVsMShjKTsJCQkvKiBDb252ZXJ0IHRvIExhdGluLTEgKi8KLSAgICByZXR1cm4oeWwxYXNbY10p OwkJCS8qIENvbnZlcnQgTGF0aW4tMSB0byBBU0NJSSAqLwotfQotCi1DSEFSCi0jaWZkZWYgQ0tf QU5TSUMKLXhub2FzKENIQVIgYykKLSNlbHNlCi14bm9hcyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyog Q0tfQU5TSUMgKi8KLXsgLyogeG5vYXMgKi8JCQkJLyogTm9yZ2UvRGFuaXNoIElTTyA2NDYgdG8g QVNDSUkgKi8KLSAgICBpZiAoYyAmIDB4ODApCi0gICAgICByZXR1cm4oVU5LKTsKLSAgICBzd2l0 Y2ggKGMpIHsKLSAgICAgIGNhc2UgOTE6Ci0Jem1zdHVmZignRScpOwkJCS8qIEFFIGRpZ3JhcGgg Ki8KLQlyZXR1cm4oJ0EnKTsKLSAgICAgIGNhc2UgOTI6IHJldHVybignTycpOwkJLyogTyBzbGFz aCAqLwotICAgICAgY2FzZSA5MzoJCQkJLyogQSByaW5nICovCi0Jem1zdHVmZignYScpOwotCXJl dHVybignQScpOwotICAgICAgY2FzZSAxMjM6CQkJCS8qIGFlIGRpZ3JhcGggKi8KLQl6bXN0dWZm KCdlJyk7Ci0JcmV0dXJuKCdhJyk7Ci0gICAgICBjYXNlIDEyNDogcmV0dXJuKCdvJyk7CQkvKiBv IHNsYXNoICovCi0gICAgICBjYXNlIDEyNToJCQkJLyogYSByaW5nICovCi0Jem1zdHVmZignYScp OwotCXJldHVybignYScpOwotICAgICAgZGVmYXVsdDogIHJldHVybihjKTsKLSAgICB9Ci19Ci0K LUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteHBvYXMoQ0hBUiBjKQotI2Vsc2UKLXhwb2FzKGMpIENI QVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4cG9hcyAqLwkJCQkvKiBQb3J0dWd1 ZXNlIElTTyA2NDYgdG8gQVNDSUkgKi8KLSAgICBpZiAoYyAmIDB4ODApCi0gICAgICByZXR1cm4o VU5LKTsKLSAgICBzd2l0Y2ggKGMpIHsKLSAgICAgIGNhc2UgOTE6ICByZXR1cm4oJ0EnKTsJCS8q IEEgdGlsZGUgKi8KLSAgICAgIGNhc2UgOTI6ICByZXR1cm4oJ0MnKTsJCS8qIEMgY2VkaWxsYSAq LwotICAgICAgY2FzZSA5MzogIHJldHVybignTycpOwkJLyogTyB0aWxkZSAqLwotICAgICAgY2Fz ZSAxMjM6IHJldHVybignYScpOwkJLyogYSB0aWxkZSAqLwotICAgICAgY2FzZSAxMjQ6IHJldHVy bignYycpOwkJLyogYyBjZWRpbGxhICovCi0gICAgICBjYXNlIDEyNTogcmV0dXJuKCdvJyk7CQkv KiBvIHRpbGRlICovCi0gICAgICBkZWZhdWx0OiAgcmV0dXJuKGMpOwotICAgIH0KLX0KLQotQ0hB UgotI2lmZGVmIENLX0FOU0lDCi14c3BhcyhDSEFSIGMpCi0jZWxzZQoteHNwYXMoYykgQ0hBUiBj OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhzcGFzICovCQkJCS8qIFNwYW5pc2ggSVNP IDY0NiB0byBBU0NJSSAqLwotICAgIGlmIChjICYgMHg4MCkKLSAgICAgIHJldHVybihVTkspOwot ICAgIHN3aXRjaCAoYykgewotICAgICAgY2FzZSA5MTogIHJldHVybigzMyk7CQkvKiBJbnZlcnRl ZCBleGNsYW1hdGlvbiAqLwotICAgICAgY2FzZSA5MjogIHJldHVybignTicpOwkJLyogTiB0aWxk ZSAqLwotICAgICAgY2FzZSA5MzogIHJldHVybig2Myk7CQkvKiBJbnZlcnRlZCBxdWVzdGlvbiBt YXJrICovCi0gICAgICBjYXNlIDEyMzogcmV0dXJuKFVOSyk7CQkvKiBkZWdyZWUgKi8KLSAgICAg IGNhc2UgMTI0OiByZXR1cm4oJ24nKTsJCS8qIG4gdGlsZGUgKi8KLSAgICAgIGNhc2UgMTI1OiBy ZXR1cm4oJ2MnKTsJCS8qIGMgY2VkaWxsYSAqLwotICAgICAgZGVmYXVsdDogIHJldHVybihjKTsK LSAgICB9Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteHN3YXMoQ0hBUiBjKQotI2Vsc2UK LXhzd2FzKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4c3dhcyAqLwkJ CQkvKiBTd2VkaXNoIElTTyA2NDYgdG8gQVNDSUkgKi8KLSAgICBpZiAoYyAmIDB4ODApCi0gICAg ICByZXR1cm4oVU5LKTsKLSAgICBzd2l0Y2ggKGMpIHsKLSAgICAgIGNhc2UgNjQ6ICByZXR1cm4o J0UnKTsJCS8qIEUgYWN1dGUgKi8KLSAgICAgIGNhc2UgOTE6CQkJCS8qIEEgZGlhZXJlc2lzICov Ci0Jem1zdHVmZignZScpOwotCXJldHVybignQScpOwotICAgICAgY2FzZSA5MjoJCQkJLyogTyBk aWFlcmVzaXMgKi8KLQl6bXN0dWZmKCdlJyk7Ci0JcmV0dXJuKCdPJyk7Ci0gICAgICBjYXNlIDkz OgkJCQkvKiBBIHJpbmcgKi8KLQl6bXN0dWZmKCdhJyk7Ci0JcmV0dXJuKCdBJyk7Ci0gICAgICBj YXNlIDk0OgkJCQkvKiBVIGRpYWVyZXNpcyAqLwotCS8qIHJldHVybignWScpOyAqLwotCXptc3R1 ZmYoJ2UnKTsKLQlyZXR1cm4oJ1UnKTsKLSAgICAgIGNhc2UgOTY6ICByZXR1cm4oJ2UnKTsJCS8q IGUgYWN1dGUgKi8KLSAgICAgIGNhc2UgMTIzOgkJCQkvKiBhIGRpYWVyZXNpcyAqLwotCXptc3R1 ZmYoJ2UnKTsKLQlyZXR1cm4oJ2EnKTsKLSAgICAgIGNhc2UgMTI0OgkJCQkvKiBvIGRpYWVyZXNp cyAqLwotCXptc3R1ZmYoJ2UnKTsKLQlyZXR1cm4oJ28nKTsKLSAgICAgIGNhc2UgMTI1OgkJCQkv KiBhIHJpbmcgKi8KLQl6bXN0dWZmKCdhJyk7Ci0JcmV0dXJuKCdhJyk7Ci0gICAgICBjYXNlIDEy NjoJCQkJLyogdSBkaWFlcmVzaXMgKi8KLQkvKiByZXR1cm4oJ3knKTsgKi8KLQl6bXN0dWZmKCdl Jyk7Ci0JcmV0dXJuKCd1Jyk7Ci0gICAgICBkZWZhdWx0OiAgcmV0dXJuKGMpOwotICAgIH0KLX0K LQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14Y2hhcyhDSEFSIGMpCi0jZWxzZQoteGNoYXMoYykg Q0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhjaGFzICovCQkJCS8qIFN3aXNz IElTTyA2NDYgdG8gQVNDSUkgKi8KLSAgICBpZiAoYyAmIDB4ODApCi0gICAgICByZXR1cm4oVU5L KTsKLSAgICBzd2l0Y2ggKGMpIHsKLSAgICAgIGNhc2UgMzU6ICByZXR1cm4oJ3UnKTsJCS8qIHUg Z3JhdmUgKi8KLSAgICAgIGNhc2UgNjQ6ICByZXR1cm4oJ2EnKTsJCS8qIGEgZ3JhdmUgKi8KLSAg ICAgIGNhc2UgOTE6ICByZXR1cm4oJ2UnKTsJCS8qIGUgYWN1dGUgKi8KLSAgICAgIGNhc2UgOTI6 ICByZXR1cm4oJ2MnKTsJCS8qIGMgY2VkaWxsYSAqLwotICAgICAgY2FzZSA5MzogIHJldHVybign ZScpOwkJLyogZSBjaXJjdW1mbGV4ICovCi0gICAgICBjYXNlIDk0OiAgcmV0dXJuKCdpJyk7CQkv KiBpIGNpcmN1bWZsZXggKi8KLSAgICAgIGNhc2UgOTU6ICByZXR1cm4oJ2UnKTsJCS8qIGUgZ3Jh dmUgKi8KLSAgICAgIGNhc2UgOTY6ICByZXR1cm4oJ28nKTsJCS8qIG8gY2lyY3VtZmxleCAqLwot ICAgICAgY2FzZSAxMjM6CQkJCS8qIGEgZGlhZXJlc2lzICovCi0Jem1zdHVmZignZScpOwotCXJl dHVybignYScpOwotICAgICAgY2FzZSAxMjQ6CQkJCS8qIG8gZGlhZXJlc2lzICovCi0Jem1zdHVm ZignZScpOwotCXJldHVybignbycpOwotICAgICAgY2FzZSAxMjU6CQkJCS8qIHUgZGlhZXJlc2lz ICovCi0Jem1zdHVmZignZScpOwotCXJldHVybigndScpOwotICAgICAgY2FzZSAxMjY6IHJldHVy bigndScpOwkJLyogdSBjaXJjdW1mbGV4ICovCi0gICAgICBkZWZhdWx0OiAgcmV0dXJuKGMpOwot ICAgIH0KLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14aHVhcyhDSEFSIGMpCi0jZWxzZQot eGh1YXMoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhodWFzICovCQkJ CS8qIEh1bmdhcmlhbiBJU08gNjQ2IHRvIEFTQ0lJICovCi0gICAgaWYgKGMgJiAweDgwKQotICAg ICAgcmV0dXJuKFVOSyk7Ci0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBjYXNlIDY0OiAgcmV0dXJu KCdBJyk7CQkvKiBBIGFjdXRlICovCi0gICAgICBjYXNlIDkxOiAgcmV0dXJuKCdFJyk7CQkvKiBF IGFjdXRlICovCi0gICAgICBjYXNlIDkyOiAgcmV0dXJuKCdPJyk7CQkvKiBPIGRpYWVyZXNpcyAq LwotICAgICAgY2FzZSA5MzogIHJldHVybignVScpOwkJLyogVSBkaWFlcmVzaXMgKi8KLSAgICAg IGNhc2UgOTY6ICByZXR1cm4oJ2EnKTsJCS8qIGEgYWN1dGUgKi8KLSAgICAgIGNhc2UgMTIzOiBy ZXR1cm4oJ2UnKTsJCS8qIGUgYWN1dGUgKi8KLSAgICAgIGNhc2UgMTI0OiByZXR1cm4oJ28nKTsJ CS8qIG8gYWN1dGUgKi8KLSAgICAgIGNhc2UgMTI1OiByZXR1cm4oJ3UnKTsJCS8qIHUgYWN1dGUg Ki8KLSAgICAgIGNhc2UgMTI2OiByZXR1cm4oMzQpOwkJLyogZG91YmxlIGFjdXRlIGFjY2VudCAq LwotICAgICAgZGVmYXVsdDogIHJldHVybihjKTsKLSAgICB9Ci19Ci0KLUNIQVIKLSNpZmRlZiBD S19BTlNJQwoteGRtYXMoQ0hBUiBjKQotI2Vsc2UKLXhkbWFzKGMpIENIQVIgYzsKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwoteyAvKiB4ZG1hcyAqLwkJCQkvKiBERUMgTUNTIHRvIEFTQ0lJICovCi0g ICAgaWYgKGxhbmdzW2xhbmd1YWdlXS5pZCA9PSBMX0ZSRU5DSCkgeyAvKiBJZiBTRVQgTEFOR1VB R0UgRlJFTkNIICovCi0JaWYgKGMgPT0gMjE1KSB7CQkJLyogaGFuZGxlIE9FIGRpZ3JhcGguICov Ci0JICAgIHptc3R1ZmYoJ0UnKTsKLQkgICAgcmV0dXJuKCdPJyk7Ci0JfSBlbHNlIGlmIChjID09 IDI0NykgewkJLyogQWxzbyBsb3dlcmNhc2Ugb2UuICovCi0JICAgIHptc3R1ZmYoJ2UnKTsKLQkg ICAgcmV0dXJuKCdvJyk7Ci0JfQotICAgIH0KLSAgICByZXR1cm4oeWwxYXNbY10pOwkJCS8qIE90 aGVyd2lzZSB0cmVhdCBsaWtlIExhdGluLTEgKi8KLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lD Ci14ZGdhcyhDSEFSIGMpCi0jZWxzZQoteGRnYXMoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FO U0lDICovCi17IC8qICB4ZGdhcyAqLwkJCQkvKiBEYXRhIEdlbmVyYWwgdG8gQVNDSUkgKi8KLSAg ICBzd2l0Y2goYykgewotICAgICAgY2FzZSAxODA6IHJldHVybignZicpOwkJLyogRmxvcmluICov Ci0gICAgICBjYXNlIDE4MzogcmV0dXJuKCc8Jyk7CQkvKiBMZXNzLWVxdWFsICovCi0gICAgICBj YXNlIDE4NDogcmV0dXJuKCc+Jyk7CQkvKiBHcmVhdGVyLWVxdWFsICovCi0gICAgICBjYXNlIDE4 NjogcmV0dXJuKDk2KTsJCS8qIEdyYXZlIGFjY2VudCAqLwotICAgICAgY2FzZSAxOTE6IHJldHVy bignXicpOwkJLyogVXBhcnJvdyAqLwotICAgICAgY2FzZSAyMTU6Ci0JaWYgKGxhbmdzW2xhbmd1 YWdlXS5pZCA9PSBMX0ZSRU5DSCkgeyAvKiBPRSBkaWdyYXBoICovCi0JICAgIHptc3R1ZmYoJ0Un KTsKLQkgICAgcmV0dXJuKCdPJyk7Ci0JfSBlbHNlIHJldHVybignTycpOwotICAgICAgY2FzZSAy NDc6Ci0JaWYgKGxhbmdzW2xhbmd1YWdlXS5pZCA9PSBMX0ZSRU5DSCkgeyAvKiBvZSBkaWdyYXBo ICovCi0JICAgIHptc3R1ZmYoJ2UnKTsKLQkgICAgcmV0dXJuKCdvJyk7Ci0JfSBlbHNlIHJldHVy bignbycpOwotICAgICAgY2FzZSAxNzU6IGNhc2UgMTc5OiBjYXNlIDIyMDogY2FzZSAyMjI6Ci0g ICAgICBjYXNlIDIyMzogY2FzZSAyNTQ6IGNhc2UgMjU1OgotCXJldHVybihVTkspOwotICAgICAg ZGVmYXVsdDoJCQkJLyogVGhlIHJlc3QsIGNvbnZlcnQgdG8gTGF0aW4tMSAqLwotCXJldHVybih5 bDFhc1t5ZGdsMVtjXV0pOwkvKiBhbmQgZnJvbSB0aGVyZSB0byBBU0NJSSAqLwotICAgIH0KLX0K LQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14cjhhcyhDSEFSIGMpCi0jZWxzZQoteHI4YXMoYykg Q0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qICB4cjhhcyAqLwkJCQkvKiBIZXds ZXR0IFBhY2thcmQgUm9tYW44IHRvIEFTQ0lJICovCi0gICAgc3dpdGNoKGMpIHsKLSAgICAgIGNh c2UgMTc1OiByZXR1cm4oJ0wnKTsJCS8qIExpcmEgKi8KLSAgICAgIGNhc2UgMTkwOiByZXR1cm4o J2YnKTsJCS8qIEZsb3JpbiAqLwotICAgICAgY2FzZSAyMzU6IHJldHVybignUycpOwkJLyogUyBj YXJvbiAqLwotICAgICAgY2FzZSAyMzY6IHJldHVybigncycpOwkJLyogcyBjYXJvbiAqLwotICAg ICAgY2FzZSAyNDY6IHJldHVybignLScpOwkJLyogSG9yaXpvbnRhbCBiYXIgKi8KLSAgICAgIGNh c2UgMjUyOiByZXR1cm4oJyonKTsJCS8qIFNvbGlkIGJveCAqLwotICAgICAgZGVmYXVsdDoJCQkJ LyogVGhlIHJlc3QsIGNvbnZlcnQgdG8gTGF0aW4tMSAqLwotCXJldHVybih5bDFhc1t5cjhsMVtj XV0pOwkvKiBhbmQgZnJvbSB0aGVyZSB0byBBU0NJSSAqLwotICAgIH0KLX0KLQotQ0hBUgotI2lm ZGVmIENLX0FOU0lDCi14dWtsMShDSEFSIGMpCi0jZWxzZQoteHVrbDEoYykgQ0hBUiBjOwotI2Vu ZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHh1a2wxICovCQkJCS8qIFVLIEFTQ0lJIHRvIExhdGlu LTEgKi8KLSAgICBpZiAoYyAmIDB4ODApCi0gICAgICByZXR1cm4oVU5LKTsKLSAgICBpZiAoYyA9 PSAzNSkKLSAgICAgIHJldHVybigxNjMpOwotICAgIGVsc2UgcmV0dXJuKGMpOwotfQotCi1DSEFS Ci0jaWZkZWYgQ0tfQU5TSUMKLXhsMXVrKENIQVIgYykKLSNlbHNlCi14bDF1ayhjKSBDSEFSIGM7 Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGwxdWsgKi8JCQkJLyogTGF0aW4tMSB0byBV SyBBU0NJSSAqLwotICAgIGlmIChjID09IDE2MykKLSAgICAgIHJldHVybigzNSk7Ci0gICAgZWxz ZSByZXR1cm4oeWwxYXNbY10pOwotfQotCi1DSEFSCQkJCQkvKiBMYXRpbi0xIHRvIEZyZW5jaCBJ U08gNjQ2ICovCi0jaWZkZWYgQ0tfQU5TSUMKLXhsMWZyKENIQVIgYykKLSNlbHNlCi14bDFmcihj KSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGwxZnIgKi8KLSAgICByZXR1 cm4oeWwxZnJbY10pOwotfQotCi0KLUNIQVIJCQkJCS8qIEZyZW5jaCBJU08gNjQ2IHRvIExhdGlu LTEgKi8KLSNpZmRlZiBDS19BTlNJQwoteGZybDEoQ0hBUiBjKQotI2Vsc2UKLXhmcmwxKGMpIENI QVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4ZnJsMSAqLwotICAgIGlmIChjICYg MHg4MCkKLSAgICAgIHJldHVybihVTkspOwotICAgIHJldHVybih5ZnJsMVtjXSk7Ci19Ci0KLUNI QVIJCQkJCS8qIExhdGluLTEgdG8gRHV0Y2ggQVNDSUkgKi8KLSNpZmRlZiBDS19BTlNJQwoteGwx ZHUoQ0hBUiBjKQotI2Vsc2UKLXhsMWR1KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAq LwoteyAvKiB4bDFkdSAqLwotICAgIHJldHVybih5bDFkdVtjXSk7Ci19Ci0KLUNIQVIKLSNpZmRl ZiBDS19BTlNJQwoteGR1bDEoQ0hBUiBjKQotI2Vsc2UKLXhkdWwxKGMpIENIQVIgYzsKLSNlbmRp ZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4ZHVsMSAqLwkJCQkvKiBEdXRjaCBJU08gNjQ2IHRvIExh dGluLTEgKi8KLSAgICBpZiAoYyAmIDB4ODApCi0gICAgICByZXR1cm4oVU5LKTsKLSAgICByZXR1 cm4oeWR1bDFbY10pOwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhmaWwxKENIQVIgYykK LSNlbHNlCi14ZmlsMShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGZp bDEgKi8JCQkJLyogRmlubmlzaCBJU08gNjQ2IHRvIExhdGluLTEgKi8KLSAgICBpZiAoYyAmIDB4 ODApCi0gICAgICByZXR1cm4oVU5LKTsKLSAgICByZXR1cm4oeWZpbDFbY10pOwotfQotCi1DSEFS Ci0jaWZkZWYgQ0tfQU5TSUMKLXhsMWZpKENIQVIgYykKLSNlbHNlCi14bDFmaShjKSBDSEFSIGM7 Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGwxZmkgKi8JCQkJLyogTGF0aW4tMSB0byBG aW5uaXNoIElTTyA2NDYgKi8KLSAgICByZXR1cm4oeWwxZmlbY10pOwotfQotCi1DSEFSCi0jaWZk ZWYgQ0tfQU5TSUMKLXhmY2wxKENIQVIgYykKLSNlbHNlCi14ZmNsMShjKSBDSEFSIGM7Ci0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGZjbDEgKi8JCQkJLyogRnJlbmNoIENhbmFkaWFuIElT TzY0NiB0byBMYXRpbi0xICovCi0gICAgaWYgKGMgJiAweDgwKQotICAgICAgcmV0dXJuKFVOSyk7 Ci0gICAgcmV0dXJuKHlmY2wxW2NdKTsKLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14bDFm YyhDSEFSIGMpCi0jZWxzZQoteGwxZmMoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICov Ci17IC8qIHhsMWZjICovCQkJCS8qIExhdGluLTEgdG8gRnJlbmNoIENhbmFkaWFuIElTTzY0NiAq LwotICAgIHJldHVybih5bDFmY1tjXSk7Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGl0 bDEoQ0hBUiBjKQotI2Vsc2UKLXhpdGwxKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAq LwoteyAvKiB4aXRsMSAqLwkJCQkvKiBJdGFsaWFuIElTTyA2NDYgdG8gTGF0aW4tMSAqLwotICAg IGlmIChjICYgMHg4MCkKLSAgICAgIHJldHVybihVTkspOwotICAgIHJldHVybih5aXRsMVtjXSk7 Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGwxaXQoQ0hBUiBjKQotI2Vsc2UKLXhsMWl0 KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bDFpdCAqLwkJCQkvKiBM YXRpbi0xIHRvIEl0YWxpYW4gSVNPIDY0NiAqLwotICAgIHJldHVybih5bDFpdFtjXSk7Ci19Ci0K LUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteG5lbDEoQ0hBUiBjKQotI2Vsc2UKLXhuZWwxKGMpIENI QVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bmVsMSAqLwkJIAkJLyogTmVYVCB0 byBMYXRpbi0xICovCi0gICAgaWYgKGxhbmdzW2xhbmd1YWdlXS5pZCA9PSBMX0ZSRU5DSCkgeyAv KiBJZiBTRVQgTEFOR1VBR0UgRlJFTkNIICovCi0JaWYgKGMgPT0gMjM0KSB7CQkJLyogaGFuZGxl IE9FIGRpZ3JhcGguICovCi0JICAgIHptc3R1ZmYoJ0UnKTsKLQkgICAgcmV0dXJuKCdPJyk7Ci0J fSBlbHNlIGlmIChjID09IDI1MCkgewkJLyogQWxzbyBsb3dlcmNhc2Ugb2UuICovCi0JICAgIHpt c3R1ZmYoJ2UnKTsKLQkgICAgcmV0dXJuKCdvJyk7Ci0JfQotICAgIH0KLSAgICByZXR1cm4oeW5l bDFbY10pOwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhuZWw5KENIQVIgYykKLSNlbHNl Ci14bmVsOShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeG5lbDkgKi8J CSAJCS8qIE5lWFQgdG8gTGF0aW4tOSAqLwotICAgIHN3aXRjaCAoYykgewotICAgICAgY2FzZSAy MzQ6IHJldHVybigxODgpOwkJLyogT0UgKi8KLSAgICAgIGNhc2UgMjUwOiByZXR1cm4oMTg5KTsJ CS8qIG9lICovCi0gICAgICBjYXNlIDE4ODogcmV0dXJuKDIzNCk7CQkvKiBrZWVwIGl0IGludmVy dGlibGUuLi4gKi8KLSAgICAgIGNhc2UgMTg5OiByZXR1cm4oMjUwKTsJCS8qIG9lICovCi0gICAg ICBkZWZhdWx0OgotCXJldHVybih5bmVsMVtjXSk7Ci0gICAgfQotfQotCi1DSEFSCi0jaWZkZWYg Q0tfQU5TSUMKLXhsMW5lKENIQVIgYykKLSNlbHNlCi14bDFuZShjKSBDSEFSIGM7Ci0jZW5kaWYg LyogQ0tfQU5TSUMgKi8KLXsgLyogeGwxbmUgKi8JCSAJCS8qIExhdGluLTEgdG8gTmVYVCAqLwot ICAgIHJldHVybih5bDFuZVtjXSk7Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGw5bmUo Q0hBUiBjKQotI2Vsc2UKLXhsOW5lKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot eyAvKiB4bDluZSAqLwkJIAkJLyogTGF0aW4tOSB0byBOZVhUICovCi0gICAgc3dpdGNoIChjKSB7 Ci0gICAgICBjYXNlIDE4ODogcmV0dXJuKDIzNCk7CQkvKiBPRSAqLwotICAgICAgY2FzZSAxODk6 IHJldHVybigyNTApOwkJLyogb2UgKi8KLSAgICAgIGNhc2UgMjM0OiByZXR1cm4oMTg4KTsJCS8q IE9FICovCi0gICAgICBjYXNlIDI1MDogcmV0dXJuKDE4OSk7CQkvKiBvZSAqLwotICAgICAgZGVm YXVsdDoKLQlyZXR1cm4oeWwxbmVbY10pOwotICAgIH0KLX0KLQotQ0hBUgotI2lmZGVmIENLX0FO U0lDCi14bm9sMShDSEFSIGMpCi0jZWxzZQoteG5vbDEoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENL X0FOU0lDICovCi17IC8qIHhub2wxICovCQkgCQkvKiBOb3J3YXkvRGVubWFyayBJU08gNjQ2IHRv IExhdGluLTEgKi8KLSAgICBpZiAoYyAmIDB4ODApCi0gICAgICByZXR1cm4oVU5LKTsKLSAgICBy ZXR1cm4oeW5vbDFbY10pOwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhsMW5vKENIQVIg YykKLSNlbHNlCi14bDFubyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyog eGwxbm8gKi8JCSAJCS8qIExhdGluLTEgdG8gTm9yd2F5L0Rlbm1hcmsgSVNPIDY0NiAqLwotICAg IHJldHVybih5bDFub1tjXSk7Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteHBvbDEoQ0hB UiBjKQotI2Vsc2UKLXhwb2wxKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAv KiB4cG9sMSAqLwkJCQkvKiBQb3J0dWd1ZXNlIElTTyA2NDYgdG8gTGF0aW4tMSAqLwotICAgIGlm IChjICYgMHg4MCkKLSAgICAgIHJldHVybihVTkspOwotICAgIHJldHVybih5cG9sMVtjXSk7Ci19 Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGwxcG8oQ0hBUiBjKQotI2Vsc2UKLXhsMXBvKGMp IENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bDFwbyAqLwkJCQkvKiBMYXRp bi0xIHRvIFBvcnR1Z3Vlc2UgSVNPIDY0NiAqLwotICAgIHJldHVybih5bDFwb1tjXSk7Ci19Ci0K LUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteHNwbDEoQ0hBUiBjKQotI2Vsc2UKLXhzcGwxKGMpIENI QVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4c3BsMSAqLwkJCQkvKiBTcGFuaXNo IElTTyA2NDYgdG8gTGF0aW4tMSAqLwotICAgIGlmIChjICYgMHg4MCkKLSAgICAgIHJldHVybihV TkspOwotICAgIHJldHVybih5c3BsMVtjXSk7Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwot eGwxc3AoQ0hBUiBjKQotI2Vsc2UKLXhsMXNwKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJ QyAqLwoteyAvKiB4bDFzcCAqLwkJCQkvKiBMYXRpbi0xIHRvIFNwYW5pc2ggSVNPIDY0NiAqLwot ICAgIHJldHVybih5bDFzcFtjXSk7Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteHN3bDEo Q0hBUiBjKQotI2Vsc2UKLXhzd2wxKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot eyAvKiB4c3dsMSAqLwkJCQkvKiBTd2VkaXNoIElTTyA2NDYgdG8gTGF0aW4tMSAqLwotICAgIGlm IChjICYgMHg4MCkKLSAgICAgIHJldHVybihVTkspOwotICAgIHJldHVybih5c3dsMVtjXSk7Ci19 Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGwxc3coQ0hBUiBjKQotI2Vsc2UKLXhsMXN3KGMp IENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bDFzdyAqLwkJCQkvKiBMYXRp bi0xIHRvIFN3ZWRpc2ggSVNPIDY0NiAqLwotICAgIHJldHVybih5bDFzd1tjXSk7Ci19Ci0KLUNI QVIKLSNpZmRlZiBDS19BTlNJQwoteGNobDEoQ0hBUiBjKQotI2Vsc2UKLXhjaGwxKGMpIENIQVIg YzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4Y2hsMSAqLwkJCQkvKiBTd2lzcyBJU08g NjQ2IHRvIExhdGluLTEgKi8KLSAgICBpZiAoYyAmIDB4ODApCi0gICAgICByZXR1cm4oVU5LKTsK LSAgICByZXR1cm4oeWNobDFbY10pOwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhsMWNo KENIQVIgYykKLSNlbHNlCi14bDFjaChjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8K LXsgLyogeGwxY2ggKi8JCQkJLyogTGF0aW4tMSB0byBTd2lzcyBJU08gNjQ2ICovCi0gICAgcmV0 dXJuKHlsMWNoW2NdKTsKLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14aHVsMShDSEFSIGMp Ci0jZWxzZQoteGh1bDEoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHho dWwxICovCQkJCS8qIEh1bmdhcmlhbiBJU08gNjQ2IHRvIExhdGluLTEgKi8KLSAgICBpZiAoYyAm IDB4ODApCi0gICAgICByZXR1cm4oVU5LKTsKLSAgICByZXR1cm4oeWh1bDFbY10pOwotfQotCi1D SEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhsMWh1KENIQVIgYykKLSNlbHNlCi14bDFodShjKSBDSEFS IGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGwxaHUgKi8JCQkJLyogTGF0aW4tMSB0 byBIdW5nYXJpYW4gSVNPIDY0NiAqLwotICAgIHJldHVybih5bDFodVtjXSk7Ci19Ci0KLUNIQVIK LSNpZmRlZiBDS19BTlNJQwoteGwxZG0oQ0hBUiBjKQotI2Vsc2UKLXhsMWRtKGMpIENIQVIgYzsK LSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bDFkbSAqLwkJCQkvKiBMYXRpbi0xIHRvIERF QyBNQ1MgKi8KLSAgICByZXR1cm4oeWwxZG1bY10pOwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5T SUMKLXhsOWRtKENIQVIgYykKLSNlbHNlCi14bDlkbShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tf QU5TSUMgKi8KLXsgLyogeGw5ZG0gKi8JCQkJLyogTGF0aW4tOSB0byBERUMgTUNTICovCi0gICAg c3dpdGNoIChjKSB7Ci0gICAgICBjYXNlIDE4ODogcmV0dXJuKDIxNSk7Ci0gICAgICBjYXNlIDE4 OTogcmV0dXJuKDI0Nyk7Ci0gICAgICBjYXNlIDIxNTogcmV0dXJuKDE4OCk7Ci0gICAgICBjYXNl IDI0NzogcmV0dXJuKDE4OSk7Ci0gICAgICBkZWZhdWx0OgotCXJldHVybih5bDFkbVtjXSk7Ci0g ICAgfQotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhsOXcxKENIQVIgYykKLSNlbHNlCi14 bDl3MShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGw5dzEgKi8JCQkJ LyogTGF0aW4tOSB0byBDUDEyNTIgKi8KLSAgICBpZiAoYyA8IDEyOCkKLSAgICAgIHJldHVybihj KTsKLSAgICBlbHNlIGlmIChjIDwgMTYwKQotICAgICAgcmV0dXJuKCc/Jyk7Ci0gICAgc3dpdGNo IChjKSB7Ci0gICAgICBjYXNlIDB4YTQ6IHJldHVybigweDgwKTsJCS8qIEV1cm8gKi8KLSAgICAg IGNhc2UgMHhhNjogcmV0dXJuKDB4OGEpOwkJLyogUy1jYXJvbiAqLwotICAgICAgY2FzZSAweGE4 OiByZXR1cm4oMHg5YSk7CQkvKiBzLWNhcm9uICovCi0gICAgICBjYXNlIDB4YjQ6IHJldHVybigw eDhlKTsJCS8qIFotY2Fyb24gKi8KLSAgICAgIGNhc2UgMHhiODogcmV0dXJuKDB4OWUpOwkJLyog ei1jYXJvbiAqLwotICAgICAgY2FzZSAweGJjOiByZXR1cm4oMHg4Yyk7CQkvKiBPRSAqLwotICAg ICAgY2FzZSAweGJkOiByZXR1cm4oMHg5Yyk7CQkvKiBvZSAqLwotICAgICAgY2FzZSAweGJlOiBy ZXR1cm4oMHg5Zik7CQkvKiBZLWRpYWVyZXNpcyAqLwotICAgICAgZGVmYXVsdDoKLQlyZXR1cm4o Yyk7Ci0gICAgfQotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhsMWRnKENIQVIgYykKLSNl bHNlCi14bDFkZyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGwxZGcg Ki8JCQkJLyogTGF0aW4tMSB0byBERyBJQ1MgKi8KLSAgICByZXR1cm4oeWwxZGdbY10pOwotfQot Ci1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhkbWwxKENIQVIgYykKLSNlbHNlCi14ZG1sMShjKSBD SEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGRtbDEgKi8JCQkJLyogREVDIE1D UyB0byBMYXRpbi0xICovCi0gICAgaWYgKGxhbmdzW2xhbmd1YWdlXS5pZCA9PSBMX0ZSRU5DSCkg eyAvKiBJZiBTRVQgTEFOR1VBR0UgRlJFTkNIICovCi0JaWYgKGMgPT0gMjE1KSB7CQkJLyogaGFu ZGxlIE9FIGRpZ3JhcGguICovCi0JICAgIHptc3R1ZmYoJ0UnKTsKLQkgICAgcmV0dXJuKCdPJyk7 Ci0JfSBlbHNlIGlmIChjID09IDI0NykgewkJLyogQWxzbyBsb3dlcmNhc2Ugb2UuICovCi0JICAg IHptc3R1ZmYoJ2UnKTsKLQkgICAgcmV0dXJuKCdvJyk7Ci0JfQotICAgIH0KLSAgICByZXR1cm4o eWRtbDFbY10pOwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhkbWw5KENIQVIgYykKLSNl bHNlCi14ZG1sOShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGRtbDkg Ki8JCQkJLyogREVDIE1DUyB0byBMYXRpbi05ICovCi0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBj YXNlIDIxNTogcmV0dXJuKDE4OCk7CQkvKiBPRSAqLwotICAgICAgY2FzZSAyNDc6IHJldHVybigx ODkpOwkJLyogb2UgKi8KLSAgICAgIGNhc2UgMTg4OiByZXR1cm4oMjE1KTsJCS8qIGFuZCBzd2Fw IHRoZSBvdGhlciB0d28uLi4gKi8KLSAgICAgIGNhc2UgMTg5OiByZXR1cm4oMjQ3KTsJCS8qICgx LzQgYW5kIDEvMikgKi8KLSAgICAgIGRlZmF1bHQ6CQkJCS8qIHRvIGtlZXAgaXQgaW52ZXJ0aWJs ZSAqLwotCXJldHVybih5ZG1sMVtjXSk7Ci0gICAgfQotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5T SUMKLXhkZ2wxKENIQVIgYykKLSNlbHNlCi14ZGdsMShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tf QU5TSUMgKi8KLXsgLyogeGRnbDEgKi8JCQkJLyogREcgSW50ZXJuYXRpb25hbCBDUyB0byBMYXRp bi0xICovCi0gICAgaWYgKGxhbmdzW2xhbmd1YWdlXS5pZCA9PSBMX0ZSRU5DSCkgeyAvKiBJZiBT RVQgTEFOR1VBR0UgRlJFTkNIICovCi0JaWYgKGMgPT0gMjE1KSB7CQkJLyogaGFuZGxlIE9FIGRp Z3JhcGguICovCi0JICAgIHptc3R1ZmYoJ0UnKTsKLQkgICAgcmV0dXJuKCdPJyk7Ci0JfSBlbHNl IGlmIChjID09IDI0NykgewkJLyogQWxzbyBsb3dlcmNhc2Ugb2UuICovCi0JICAgIHptc3R1ZmYo J2UnKTsKLQkgICAgcmV0dXJuKCdvJyk7Ci0JfQotICAgIH0KLSAgICByZXR1cm4oeWRnbDFbY10p OwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhyOGwxKENIQVIgYykKLSNlbHNlCi14cjhs MShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeHI4bDEgKi8JCQkJLyog SGV3bGV0dCBQYWNrYXJkIFJvbWFuOCB0byBMYXRpbi0xICovCi0gICAgcmV0dXJuKHlyOGwxW2Nd KTsKLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14bDFyOChDSEFSIGMpCi0jZWxzZQoteGwx cjgoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsMXI4ICovCQkJCS8q IExhdGluLTEgdG8gSGV3bGV0dCBQYWNrYXJkIFJvbWFuOCAqLwotICAgIHJldHVybih5bDFyOFtj XSk7Ci19Ci0KLS8qIFRyYW5zbGF0aW9uIGZ1bmN0aW9ucyBmb3IgcmVjZWl2aW5nIGZpbGVzIGFu ZCB0cmFuc2xhdGluZyB0aGVtIGludG8gQVNDSUkgKi8KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lD Ci16bDFhcyhDSEFSIGMpCi0jZWxzZQotemwxYXMoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FO U0lDICovCi17IC8qIHpsMWFzICovCi0gICAgc3dpdGNoKGxhbmdzW2xhbmd1YWdlXS5pZCkgewot Ci0gICAgICBjYXNlIExfRFVUQ0g6Ci0JaWYgKGMgPT0gMjU1KSB7CQkJLyogRHV0Y2ggdW1sYXV0 LXkgKi8KLQkgICAgemRzdHVmZignaicpOwkJLyogYmVjb21lcyBpaiAqLwotCSAgICByZXR1cm4o J2knKTsKLQl9IGVsc2UgcmV0dXJuKHlsMWFzW2NdKTsJLyogYWxsIG90aGVycyBieSB0aGUgYm9v ayAqLwotCi0gICAgICBjYXNlIExfR0VSTUFOOgotCXN3aXRjaCAoYykgewkJCS8qIEdlcm1hbiwg c3BlY2lhbCBydWxlcy4gKi8KLQkgIGNhc2UgMTk2OgkJCS8qIHVtbGF1dC1BIC0+IEFlICovCi0J ICAgIHpkc3R1ZmYoJ2UnKTsKLQkgICAgcmV0dXJuKCdBJyk7Ci0JICBjYXNlIDIxNDoJCQkvKiB1 bWxhdXQtTyAtPiBPZSAqLwotCSAgICB6ZHN0dWZmKCdlJyk7Ci0JICAgIHJldHVybignTycpOwot CSAgY2FzZSAyMjA6CQkJLyogdW1sYXV0LVUgLT4gVWUgKi8KLQkgICAgemRzdHVmZignZScpOwot CSAgICByZXR1cm4oJ1UnKTsKLQkgIGNhc2UgMjI4OgkJCS8qIHVtbGF1dC1hIC0+IGFlICovCi0J ICAgIHpkc3R1ZmYoJ2UnKTsKLQkgICAgcmV0dXJuKCdhJyk7Ci0JICBjYXNlIDI0NjoJCQkvKiB1 bWxhdXQtbyAtPiBvZSAqLwotCSAgICB6ZHN0dWZmKCdlJyk7Ci0JICAgIHJldHVybignbycpOwot CSAgY2FzZSAyNTI6CQkJLyogdW1sYXV0LXUgLT4gdWUgKi8KLQkgICAgemRzdHVmZignZScpOwot CSAgICByZXR1cm4oJ3UnKTsKLQkgIGNhc2UgMjIzOgkJCS8qIGVzcy16ZXQgLT4gc3MgKi8KLQkg ICAgemRzdHVmZigncycpOwotCSAgICByZXR1cm4oJ3MnKTsKLQkgIGRlZmF1bHQ6IHJldHVybih5 bDFhc1tjXSk7CS8qIGFsbCBvdGhlcnMgYnkgdGhlIGJvb2sgKi8KLQl9Ci0gICAgICBjYXNlIExf REFOSVNIOgotICAgICAgY2FzZSBMX0ZJTk5JU0g6Ci0gICAgICBjYXNlIExfTk9SV0VHSUFOOgot ICAgICAgY2FzZSBMX1NXRURJU0g6Ci0Jc3dpdGNoIChjKSB7CQkJLyogU2NhbmRhbmF2aWFuIGxh bmd1YWdlcy4gKi8KLQkgIGNhc2UgMTk2OgkJCS8qIHVtbGF1dC1BIC0+IEFlICovCi0JICAgIHpk c3R1ZmYoJ2UnKTsKLQkgICAgcmV0dXJuKCdBJyk7Ci0JICBjYXNlIDIxNDoJCQkvKiB1bWxhdXQt TyAtPiBPZSAqLwotCSAgY2FzZSAyMTY6CQkJLyogTy1zbGFzaCAtPiBPZSAqLwotCSAgICB6ZHN0 dWZmKCdlJyk7Ci0JICAgIHJldHVybignTycpOwotCSAgY2FzZSAyMjA6CQkJLyogdW1sYXV0LVUg LT4gWSAqLwotCSAgICAvKiByZXR1cm4oJ1knKTsgKi8KLQkgICAgemRzdHVmZignZScpOwotCSAg ICByZXR1cm4oJ1UnKTsKLQkgIGNhc2UgMjI4OgkJCS8qIHVtbGF1dC1hIC0+IGFlICovCi0JICAg IHpkc3R1ZmYoJ2UnKTsKLQkgICAgcmV0dXJuKCdhJyk7Ci0JICBjYXNlIDI0NjoJCQkvKiB1bWxh dXQtbyAtPiBvZSAqLwotCSAgY2FzZSAyNDg6CQkJLyogby1zbGFzaCAtPiBvZSAqLwotCSAgICB6 ZHN0dWZmKCdlJyk7Ci0JICAgIHJldHVybignbycpOwotCSAgY2FzZSAyNTI6CQkJLyogdW1sYXV0 LXUgLT4geSAqLwotCSAgICAvKiByZXR1cm4oJ3knKTsgKi8KLQkgICAgemRzdHVmZignZScpOwot CSAgICByZXR1cm4oJ3UnKTsKLQkgIGNhc2UgMTk3OgkJCS8qIEEtcmluZyAtPiBBYSAqLwotCSAg ICB6ZHN0dWZmKCdhJyk7Ci0JICAgIHJldHVybignQScpOwotICAgICAgICAgIGNhc2UgMjI5OgkJ CS8qIGEtcmluZyAtPiBhYSAqLwotCSAgICB6ZHN0dWZmKCdhJyk7Ci0JICAgIHJldHVybignYScp OwotCSAgZGVmYXVsdDogcmV0dXJuKHlsMWFzW2NdKTsJLyogQWxsIG90aGVycyBieSB0aGUgYm9v ayAqLwotCX0KLSAgICAgIGRlZmF1bHQ6Ci0JcmV0dXJuKHlsMWFzW2NdKTsJCS8qIE5vIGxhbmd1 YWdlLCBnbyBieSB0aGUgdGFibGUuICovCi0gICAgfQotfQotCi1DSEFSCQkJCQkvKiBJQk0gQ1A0 MzcgdG8gTGF0aW4tMSAqLwotI2lmZGVmIENLX0FOU0lDCi14NDNsMShDSEFSIGMpCi0jZWxzZQot eDQzbDEoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHg0M2wxICovCi0g ICAgcmV0dXJuKHk0M2wxW2NdKTsKLX0KLQotQ0hBUgkJCQkJLyogSUJNIENQODUwIHRvIExhdGlu LTEgKi8KLSNpZmRlZiBDS19BTlNJQwoteDg1bDEoQ0hBUiBjKQotI2Vsc2UKLXg4NWwxKGMpIENI QVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4ODVsMSAqLwotICAgIHJldHVybih5 ODVsMVtjXSk7Ci19Ci0KLUNIQVIJCQkJCS8qIExhdGluLTEgdG8gSUJNIENQNDM3ICovCi0jaWZk ZWYgQ0tfQU5TSUMKLXhsMTQzKENIQVIgYykKLSNlbHNlCi14bDE0MyhjKSBDSEFSIGM7Ci0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGwxNDMgKi8KLSAgICByZXR1cm4oeWwxNDNbY10pOwot fQotCi1DSEFSCQkJCQkvKiBMYXRpbi0xIHRvIENQODUwICovCi0jaWZkZWYgQ0tfQU5TSUMKLXhs MTg1KENIQVIgYykKLSNlbHNlCi14bDE4NShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMg Ki8KLXsgLyogeGwxODUgKi8KLSAgICByZXR1cm4oeWwxODVbY10pOwotfQotCi1DSEFSCi0jaWZk ZWYgQ0tfQU5TSUMKLXg0M2FzKENIQVIgYykKLSNlbHNlCi14NDNhcyhjKSBDSEFSIGM7Ci0jZW5k aWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeDQzYXMgKi8JCQkJLyogQ1A0MzcgdG8gQVNDSUkgKi8K LSAgICBjID0geTQzbDFbY107CQkJLyogVHJhbnNsYXRlIHRvIExhdGluLTEgKi8KLSAgICByZXR1 cm4oeGwxNDMoYykpOwkJCS8qIGFuZCBmcm9tIExhdGluLTEgdG8gQVNDSUkuICovCi19Ci0KLUNI QVIKLSNpZmRlZiBDS19BTlNJQwoteDg1YXMoQ0hBUiBjKQotI2Vsc2UKLXg4NWFzKGMpIENIQVIg YzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4ODVhcyAqLwkJCQkvKiBDUDg1MCB0byBB U0NJSSAqLwotICAgIGMgPSB5ODVsMVtjXTsJCQkvKiBUcmFuc2xhdGUgdG8gTGF0aW4tMSAqLwot ICAgIHJldHVybih4bDFhcyhjKSk7CQkJLyogYW5kIGZyb20gTGF0aW4tMSB0byBBU0NJSS4gKi8K LX0KLQotQ0hBUgkJCQkJLyogTWFjaW50b3NoIExhdGluIHRvIExhdGluLTEgKi8KLSNpZmRlZiBD S19BTlNJQwoteGFxbDEoQ0hBUiBjKQotI2Vsc2UKLXhhcWwxKGMpIENIQVIgYzsKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwoteyAvKiB4YXFsMSAqLwotICAgIGlmIChsYW5nc1tsYW5ndWFnZV0uaWQg PT0gTF9GUkVOQ0gpIHsgLyogSWYgU0VUIExBTkdVQUdFIEZSRU5DSCAqLwotCWlmIChjID09IDIw NikgewkJCS8qIGhhbmRsZSBPRSBkaWdyYXBoLiAqLwotCSAgICB6bXN0dWZmKCdFJyk7Ci0JICAg IHJldHVybignTycpOwotCX0gZWxzZSBpZiAoYyA9PSAyMDcpIHsJCS8qIEFsc28gbG93ZXJjYXNl IG9lLiAqLwotCSAgICB6bXN0dWZmKCdlJyk7Ci0JICAgIHJldHVybignbycpOwotCX0KLSAgICB9 Ci0gICAgcmV0dXJuKHlhcWwxW2NdKTsKLX0KLQotQ0hBUgkJCQkJLyogTWFjaW50b3NoIExhdGlu IHRvIEFTQ0lJICovCi0jaWZkZWYgQ0tfQU5TSUMKLXhhcWFzKENIQVIgYykKLSNlbHNlCi14YXFh cyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGFxYXMgKi8KLSAgICBp ZiAobGFuZ3NbbGFuZ3VhZ2VdLmlkID09IExfRlJFTkNIKSB7IC8qIElmIFNFVCBMQU5HVUFHRSBG UkVOQ0ggKi8KLQlpZiAoYyA9PSAyMDYpIHsJCQkvKiBoYW5kbGUgT0UgZGlncmFwaC4gKi8KLQkg ICAgem1zdHVmZignRScpOwotCSAgICByZXR1cm4oJ08nKTsKLQl9IGVsc2UgaWYgKGMgPT0gMjA3 KSB7CQkvKiBBbHNvIGxvd2VyY2FzZSBvZS4gKi8KLQkgICAgem1zdHVmZignZScpOwotCSAgICBy ZXR1cm4oJ28nKTsKLQl9Ci0gICAgfQotICAgIGMgPSB5YXFsMVtjXTsJCQkvKiBUcmFuc2xhdGUg dG8gTGF0aW4tMSAqLwotICAgIHJldHVybih4bDFhcyhjKSk7CQkJLyogdGhlbiB0byBBU0NJSS4g Ki8KLX0KLQotQ0hBUgkJCQkJLyogTGF0aW4tMSB0byBNYWNpbnRvc2ggTGF0aW4gKi8KLSNpZmRl ZiBDS19BTlNJQwoteGwxYXEoQ0hBUiBjKQotI2Vsc2UKLXhsMWFxKGMpIENIQVIgYzsKLSNlbmRp ZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bDFhcSAqLwotICAgIHJldHVybih5bDFhcVtjXSk7Ci19 Ci0KLSNpZmRlZiBMQVRJTjIKLQotLyogVHJhbnNsYXRpb24gZnVuY3Rpb25zIGZvciBMYXRpbiBB bHBoYWJldCAyICovCi0KLUNIQVIJCQkJCS8qIExhdGluLTIgdG8gTGF0aW4tMSAqLwotI2lmZGVm IENLX0FOU0lDCi14bDJsMShDSEFSIGMpCi0jZWxzZQoteGwybDEoYykgQ0hBUiBjOwotI2VuZGlm IC8qIENLX0FOU0lDICovCi17IC8qIHhsbDJsMSAqLwotICAgIHJldHVybih5bDJsMVtjXSk7Ci19 Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGwydzEoQ0hBUiBjKQotI2Vsc2UKLXhsMncxKGMp IENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bDJ3MSAqLwkJCQkvKiBMYXRp bi0yIHRvIENQMTI1MiAoV2luZG93cyBMMSkgKi8KLSAgICBpZiAoYyA+IDEyNyAmJiBjIDwgMTYw KQotICAgICAgcmV0dXJuKFVOSyk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHlsMmwxW2NdKTsK LX0KLQotQ0hBUgkJCQkJLyogTGF0aW4tMSB0byBMYXRpbi0yICovCi0jaWZkZWYgQ0tfQU5TSUMK LXhsMWwyKENIQVIgYykKLSNlbHNlCi14bDFsMihjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5T SUMgKi8KLXsgLyogeGxsMWwyICovCi0gICAgcmV0dXJuKHlsMWwyW2NdKTsKLX0KLQotQ0hBUgkJ CQkJLyogQ1AxMjUyIHRvIExhdGluLTEgKi8KLSNpZmRlZiBDS19BTlNJQwoteHcxbDIoQ0hBUiBj KQotI2Vsc2UKLXh3MWwyKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4 dzFsMiAqLwotICAgIHN3aXRjaCAoYykgewotICAgICAgY2FzZSAweDhhOiByZXR1cm4oMHhhOSk7 CQkvKiBTIGNhcm9uICovCi0gICAgICBjYXNlIDB4OGU6IHJldHVybigweGFlKTsJCS8qIFogY2Fy b24gKi8KLSAgICAgIGNhc2UgMHg5YTogcmV0dXJuKDB4YjkpOwkJLyogcyBjYXJvbiAqLwotICAg ICAgY2FzZSAweDllOiByZXR1cm4oMHhiZSk7CQkvKiB6IGNhcm9uICovCi0gICAgICBkZWZhdWx0 OgotCXJldHVybigoYyA8IDE2MCkgPyB4dzFhcyhjKSA6IHhsMWwyKGMpKTsKLSAgICB9Ci19Ci0K LQotQ0hBUgkJCQkJLyogTGF0aW4tMiB0byBBU0NJSSAqLwotI2lmZGVmIENLX0FOU0lDCi14bDJh cyhDSEFSIGMpCi0jZWxzZQoteGwyYXMoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICov Ci17IC8qIHhsbDJhcyAqLwotICAgIHJldHVybih5bDJhc1tjXSk7Ci19Ci0KLUNIQVIJCQkJCS8q IExhdGluLTIgdG8gQ1A4NTIgKi8KLSNpZmRlZiBDS19BTlNJQwoteGwyNTIoQ0hBUiBjKQotI2Vs c2UKLXhsMjUyKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bGwyNTIg Ki8KLSAgICByZXR1cm4oeWwyNTJbY10pOwotfQotCi1DSEFSCQkJCQkvKiBMYXRpbi0yIHRvIE1h em92aWEgKi8KLSNpZmRlZiBDS19BTlNJQwoteGwybXooQ0hBUiBjKQotI2Vsc2UKLXhsMm16KGMp IENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bGwybXogKi8KLSAgICByZXR1 cm4oeWwybXpbY10pOwotfQotCi1DSEFSCQkJCQkvKiBMYXRpbi0xIHRvIE1hem92aWEgKi8KLSNp ZmRlZiBDS19BTlNJQwoteGwxbXooQ0hBUiBjKQotI2Vsc2UKLXhsMW16KGMpIENIQVIgYzsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bGwxbXogKi8KLSAgICByZXR1cm4oeWwybXpbeWwx bDJbY11dKTsKLX0KLQotQ0hBUgkJCQkJLyogTWF6b3ZpYSB0byBMYXRpbi0xICovCi0jaWZkZWYg Q0tfQU5TSUMKLXhtemwxKENIQVIgYykKLSNlbHNlCi14bXpsMShjKSBDSEFSIGM7Ci0jZW5kaWYg LyogQ0tfQU5TSUMgKi8KLXsgLyogeG16bDEgKi8KLSAgICByZXR1cm4oeWwybDFbeW16bDJbY11d KTsKLX0KLQotQ0hBUgkJCQkJLyogTWF6b3ZpYSB0byBMYXRpbi05ICovCi0jaWZkZWYgQ0tfQU5T SUMKLXhtemw5KENIQVIgYykKLSNlbHNlCi14bXpsOShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tf QU5TSUMgKi8KLXsgLyogeG16bDkgKi8KLSAgICByZXR1cm4oeGwybDkoeW16bDJbY10pKTsKLX0K LQotQ0hBUgkJCQkJLyogQ1A4NTIgdG8gTGF0aW4tMiAqLwotI2lmZGVmIENLX0FOU0lDCi14NTJs MihDSEFSIGMpCi0jZWxzZQoteDUybDIoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICov Ci17IC8qIHg1MmwyICovCi0gICAgcmV0dXJuKHk1MmwyW2NdKTsKLX0KLQotQ0hBUgkJCQkJLyog TWF6b3ZpYSB0byBMYXRpbi0yICovCi0jaWZkZWYgQ0tfQU5TSUMKLXhtemwyKENIQVIgYykKLSNl bHNlCi14bXpsMihjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeG16bDIg Ki8KLSAgICByZXR1cm4oeW16bDJbY10pOwotfQotCi1DSEFSCQkJCQkvKiBMYXRpbi0yIHRvIENQ MTI1MCAqLwotI2lmZGVmIENLX0FOU0lDCi14bDIxMjUwKENIQVIgYykKLSNlbHNlCi14bDIxMjUw KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bGwyMTI1MCAqLwotICAg IHJldHVybih5bDIxMjUwW2NdKTsKLX0KLQotQ0hBUgkJCQkJLyogQ1AxMjUwIHRvIExhdGluLTIg Ki8KLSNpZmRlZiBDS19BTlNJQwoteDEyNTBsMihDSEFSIGMpCi0jZWxzZQoteDEyNTBsMihjKSBD SEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeDEyNTBsMiAqLwotICAgIHJldHVy bih5MTI1MGwyW2NdKTsKLX0KLQotQ0hBUgkJCQkJLyogQ1A4NTIgdG8gQVNDSUkgKi8KLSNpZmRl ZiBDS19BTlNJQwoteDUyYXMoQ0hBUiBjKQotI2Vsc2UKLXg1MmFzKGMpIENIQVIgYzsKLSNlbmRp ZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bDUyYXMgKi8KLSAgICByZXR1cm4oeWwyYXNbeTUybDJb Y11dKTsJCS8qIENQODUyIC0+IExhdGluLTIgLT4gQVNDSUkgKi8KLX0KLQotQ0hBUgkJCQkJLyog Q1AxMjUwIHRvIEFTQ0lJICovCi0jaWZkZWYgQ0tfQU5TSUMKLXgxMjUwYXMoQ0hBUiBjKQotI2Vs c2UKLXgxMjUwYXMoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsMTI1 MGFzICovCi0gICAgcmV0dXJuKHlsMmFzW3kxMjUwbDJbY11dKTsJCS8qIENQODEyNTAgLT4gTGF0 aW4tMiAtPiBBU0NJSSAqLwotfQotCi0KLUNIQVIJCQkJCS8qIENQODUyIHRvIExhdGluLTEgKi8K LSNpZmRlZiBDS19BTlNJQwoteDUybDEoQ0hBUiBjKQotI2Vsc2UKLXg1MmwxKGMpIENIQVIgYzsK LSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bDUybDEgKi8KLSAgICByZXR1cm4oeWwybDFb eTUybDJbY11dKTsJCS8qIENQODUyIC0+IExhdGluLTIgLT4gTGF0aW4tMSAqLwotfQotCi1DSEFS CQkJCQkvKiBDUDEyNTAgdG8gTGF0aW4tMSAqLwotI2lmZGVmIENLX0FOU0lDCi14MTI1MGwxKENI QVIgYykKLSNlbHNlCi14MTI1MGwxKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot eyAvKiB4bDEyNTBsMSAqLwotICAgIHJldHVybih5bDJsMVt5MTI1MGwyW2NdXSk7CQkvKiBDUDEy NTAgLT4gTGF0aW4tMiAtPiBMYXRpbi0xICovCi19Ci0KLUNIQVIJCQkJCS8qIENQMTI1MCB0byBM YXRpbi05ICovCi0jaWZkZWYgQ0tfQU5TSUMKLXgxMjUwbDkoQ0hBUiBjKQotI2Vsc2UKLXgxMjUw bDkoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHgxMjUwbDkgKi8KLSAg ICBpZiAoYyA9PSAoQ0hBUikxMjgpCQkJLyogRXVybyAqLwotICAgICAgcmV0dXJuKChDSEFSKTE2 NCk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHhsMmw5KHkxMjUwbDJbY10pKTsJLyogQ1AxMjUw IC0+IExhdGluLTIgLT4gTGF0aW4tOSAqLwotfQotCi1DSEFSCQkJCQkvKiBMYXRpbi0xIHRvIENQ ODUyICovCi0jaWZkZWYgQ0tfQU5TSUMKLXhsMTUyKENIQVIgYykKLSNlbHNlCi14bDE1MihjKSBD SEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGxsMTUyICovCi0gICAgcmV0dXJu KHlsMjUyW3lsMWwyW2NdXSk7CQkvKiBMYXRpbi0xIC0+IExhdGluLTIgLT4gQ1A4NTIgKi8KLX0K LQotQ0hBUgkJCQkJLyogTGF0aW4tMSB0byBDUDEyNTAgKi8KLSNpZmRlZiBDS19BTlNJQwoteGwx MTI1MChDSEFSIGMpCi0jZWxzZQoteGwxMTI1MChjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5T SUMgKi8KLXsgLyogeGxsMTEyNTAgKi8KLSAgICByZXR1cm4oeWwyMTI1MFt5bDFsMltjXV0pOwkJ LyogTGF0aW4tMSAtPiBMYXRpbi0yIC0+IENQMTI1MCAqLwotfQotCi1DSEFSCQkJCQkvKiBMYXRp bi05IHRvIENQMTI1MCAqLwotI2lmZGVmIENLX0FOU0lDCi14bDkxMjUwKENIQVIgYykKLSNlbHNl Ci14bDkxMjUwKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bGw5MTI1 MCAqLwotICAgIGlmIChjID09IChDSEFSKTE2NCkJCQkvKiBFdXJvICovCi0gICAgICByZXR1cm4o KENIQVIpMTI4KTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4oeWwyMTI1MFt4bDlsMihjKV0pOwkv KiBMYXRpbi05IC0+IExhdGluLTIgLT4gQ1AxMjUwICovCi19Ci0KLUNIQVIJCQkJCS8qIExhdGlu LTkgdG8gTWF6b3ZpYSAqLwotI2lmZGVmIENLX0FOU0lDCi14bDlteihDSEFSIGMpCi0jZWxzZQot eGw5bXooYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsbDlteiAqLwot ICAgIHJldHVybih5bDJtelt4bDlsMihjKV0pOwkJLyogTGF0aW4tOSAtPiBMYXRpbi0yIC0+IE1h em92aWEgKi8KLX0KLQotQ0hBUgkJCQkJLyogTGF0aW4tOSB0byBNYXpvdmlhICovCi0jaWZkZWYg Q0tfQU5TSUMKLXhtemFzKENIQVIgYykKLSNlbHNlCi14bXphcyhjKSBDSEFSIGM7Ci0jZW5kaWYg LyogQ0tfQU5TSUMgKi8KLXsgLyogeG16YXMgKi8KLSAgICByZXR1cm4oeWwyYXNbeG16bDIoYyld KTsJCS8qIE1hem92aWEgLT4gTGF0aW4tMiAtPiBBU0NJSSAqLwotfQotCi1DSEFSCQkJCQkvKiBM YXRpbi0yIHRvIE5lWFQgKi8KLSNpZmRlZiBDS19BTlNJQwoteGwybmUoQ0hBUiBjKQotI2Vsc2UK LXhsMm5lKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bGwybmUgKi8K LSAgICBzd2l0Y2goYykgewotICAgICAgY2FzZSAxNjI6IHJldHVybigxOTgpOwkJLyogQnJldmUg Ki8KLSAgICAgIGNhc2UgMTYzOiByZXR1cm4oMjMyKTsJCS8qIEwgd2l0aCBzdHJva2UgKi8KLSAg ICAgIGNhc2UgMTc4OiByZXR1cm4oMjA2KTsJCS8qIE9nb25layAqLwotICAgICAgY2FzZSAxNzk6 IHJldHVybigyNDgpOwkJLyogbCB3aXRoIHN0cm9rZSAqLwotICAgICAgY2FzZSAxODM6IHJldHVy bigyMDcpOwkJLyogQ2Fyb24gKi8KLSAgICAgIGNhc2UgMTg5OiByZXR1cm4oMjA1KTsJCS8qIERv dWJsZSBhY3V0ZSAqLwotICAgICAgY2FzZSAyMDg6IHJldHVybigxNDQpOwkJLyogRCBzdHJva2Ug PSBFdGggKi8KLSAgICAgIGNhc2UgMjQwOiByZXR1cm4oMjMwKTsJCS8qIGQgc3Ryb2tlID0gZXRo ICovCi0gICAgICBjYXNlIDI1NTogcmV0dXJuKDE5OSk7CQkvKiBEb3QgYWJvdmUgKi8KLSAgICAg IGRlZmF1bHQ6ICByZXR1cm4oeWwxbmVbeWwybDFbY11dKTsKLSAgICB9Ci19Ci0KLUNIQVIJCQkJ CS8qIExhdGluLTIgdG8gQ1A0MzcgKi8KLSNpZmRlZiBDS19BTlNJQwoteGwyNDMoQ0hBUiBjKQot I2Vsc2UKLXhsMjQzKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bGwy NDMgKi8KLSAgICByZXR1cm4oeWwxbDJbeTQzbDFbY11dKTsKLX0KLQotQ0hBUgkJCQkJLyogTGF0 aW4tMiB0byBDUDg1MCAqLwotI2lmZGVmIENLX0FOU0lDCi14bDI4NShDSEFSIGMpCi0jZWxzZQot eGwyODUoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsbDI4NSAqLwot ICAgIHJldHVybih5bDFsMlt5ODVsMVtjXV0pOwotfQotCi1DSEFSCQkJCQkvKiBMYXRpbi0yIHRv IEFwcGxlICovCi0jaWZkZWYgQ0tfQU5TSUMKLXhsMmFxKENIQVIgYykKLSNlbHNlCi14bDJhcShj KSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGwyYXEgKi8KLSAgICByZXR1 cm4oeWwxYXFbeWwybDFbY11dKTsJCS8qIENvdWxkIGRvIG1vcmUuLi4gKi8KLX0KLQotQ0hBUgkJ CQkJLyogTGF0aW4tMiB0byBER0kgKi8KLSNpZmRlZiBDS19BTlNJQwoteGwyZGcoQ0hBUiBjKQot I2Vsc2UKLXhsMmRnKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bGwy ZGcgKi8KLSAgICByZXR1cm4oeWRnbDFbeWwxbDJbY11dKTsKLX0KLQotQ0hBUgkJCQkJLyogTGF0 aW4tMiB0byBTaG9ydCBLT0kgKi8KLSNpZmRlZiBDS19BTlNJQwoteGwyc2soQ0hBUiBjKQotI2Vs c2UKLXhsMnNrKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bGwyc2sg Ki8KLSAgICByZXR1cm4oaXNsb3dlcihjKSA/IHRvdXBwZXIoYykgOiBjKTsKLX0KLQotQ0hBUgkJ CQkJLyogTmVYVCB0byBMYXRpbi0yICovCi0jaWZkZWYgQ0tfQU5TSUMKLXhuZWwyKENIQVIgYykK LSNlbHNlCi14bmVsMihjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeG5l bDIgKi8KLSAgICBzd2l0Y2ggKGMpIHsKLSAgICAgIGNhc2UgMTQ0OiByZXR1cm4oMjA4KTsJCS8q IEQgc3Ryb2tlID0gRXRoICovCi0gICAgICBjYXNlIDE5ODogcmV0dXJuKDE2Mik7CQkvKiBCcmV2 ZSAqLwotICAgICAgY2FzZSAxOTk6IHJldHVybigyNTUpOwkJLyogRG90IGFib3ZlICovCi0gICAg ICBjYXNlIDIwNTogcmV0dXJuKDE4OSk7CQkvKiBEb3VibGUgYWN1dGUgKi8KLSAgICAgIGNhc2Ug MjA2OiByZXR1cm4oMTc4KTsJCS8qIE9nb25layAqLwotICAgICAgY2FzZSAyMDc6IHJldHVybigx ODMpOwkJLyogQ2Fyb24gKi8KLSAgICAgIGNhc2UgMjMwOiByZXR1cm4oMjQwKTsJCS8qIGQgc3Ry b2tlID0gZXRoICovCi0gICAgICBjYXNlIDIzMjogcmV0dXJuKDE2Myk7CQkvKiBMIHdpdGggc3Ry b2tlICovCi0gICAgICBjYXNlIDI0ODogcmV0dXJuKDE3OSk7CQkvKiBsIHdpdGggc3Ryb2tlICov Ci0gICAgICBkZWZhdWx0OiAgcmV0dXJuKHlsMWwyW3luZWwxW2NdXSk7IC8qIE90aGVycywgZ28g dGhydSBMYXRpbi0xICovCi0gICAgfQotfQotCi1DSEFSCQkJCQkvKiBDUDQzNyB0byBMYXRpbi0y ICovCi0jaWZkZWYgQ0tfQU5TSUMKLXg0M2wyKENIQVIgYykKLSNlbHNlCi14NDNsMihjKSBDSEFS IGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGw0M2wyICovCi0gICAgcmV0dXJuKHls MWwyW3k0M2wxW2NdXSk7Ci19Ci0KLUNIQVIJCQkJCS8qIENQODUwIHRvIExhdGluLTIgKi8KLSNp ZmRlZiBDS19BTlNJQwoteDg1bDIoQ0hBUiBjKQotI2Vsc2UKLXg4NWwyKGMpIENIQVIgYzsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bDg1bDIgKi8KLSAgICByZXR1cm4oeWwxbDJbeTg1 bDFbY11dKTsKLX0KLQotQ0hBUgkJCQkJLyogQXBwbGUgdG8gTGF0aW4tMiAqLwotI2lmZGVmIENL X0FOU0lDCi14YXFsMihDSEFSIGMpCi0jZWxzZQoteGFxbDIoYykgQ0hBUiBjOwotI2VuZGlmIC8q IENLX0FOU0lDICovCi17IC8qIHhsYXFsMiAqLwotICAgIHN3aXRjaCAoYykgewotICAgICAgY2Fz ZSAyNDk6IHJldHVybigxNjIpOwkJLyogQnJldmUgYWNjZW50ICovCi0gICAgICBjYXNlIDI1MDog cmV0dXJuKDI1NSk7CQkvKiBEb3QgYWNjZW50ICovCi0gICAgICBjYXNlIDI1MzogcmV0dXJuKDE4 OSk7CQkvKiBEb3VibGUgYWN1dGUgKi8KLSAgICAgIGRlZmF1bHQ6IHJldHVybih5bDFsMlt5YXFs MVtjXV0pOwotICAgIH0KLX0KLQotQ0hBUgkJCQkJLyogREdJIHRvIExhdGluLTIgKi8KLSNpZmRl ZiBDS19BTlNJQwoteGRnbDIoQ0hBUiBjKQotI2Vsc2UKLXhkZ2wyKGMpIENIQVIgYzsKLSNlbmRp ZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bGRnbDIgKi8KLSAgICByZXR1cm4oeWwxbDJbeWRnbDFb Y11dKTsJCS8qIChmb3Igbm93KSAqLwotfQotCi1DSEFSCQkJCQkvKiBTaG9ydCBLT0kgdG8gTGF0 aW4tMiAqLwotI2lmZGVmIENLX0FOU0lDCi14c2tsMihDSEFSIGMpCi0jZWxzZQoteHNrbDIoYykg Q0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsc2tsMiAqLwotICAgIHJldHVy bihpc2xvd2VyKGMpID8gdG91cHBlcihjKSA6IGMpOwotfQotCi1DSEFSCQkJCQkvKiBMYXRpbi0y IHRvIEdlcm1hbiAqLwotI2lmZGVmIENLX0FOU0lDCi14bDJnZShDSEFSIGMpCi0jZWxzZQoteGwy Z2UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsbDJnZSAqLwotICAg IHN3aXRjaChjKSB7Ci0gICAgICBjYXNlIDE2NzogcmV0dXJuKDY0KTsJCS8qIFBhcmFncmFwaCBz aWduICovCi0gICAgICBjYXNlIDE5NjogcmV0dXJuKDkxKTsJCS8qIEEtZGlhZXJlc2lzICovCi0g ICAgICBjYXNlIDIxNDogcmV0dXJuKDkyKTsJCS8qIE8tZGlhZXJlc2lzICovCi0gICAgICBjYXNl IDIyMDogcmV0dXJuKDkzKTsJCS8qIFUtZGlhZXJlc2lzICovCi0gICAgICBjYXNlIDIyMzogcmV0 dXJuKDEyNik7CQkvKiBkb3VibGUtcyAqLwotICAgICAgY2FzZSAyMjg6IHJldHVybigxMjMpOwkJ LyogYS1kaWFlcmVzaXMgKi8KLSAgICAgIGNhc2UgMjQ2OiByZXR1cm4oMTI0KTsJCS8qIG8tZGlh ZXJlc2lzICovCi0gICAgICBjYXNlIDI1MjogcmV0dXJuKDEyNSk7CQkvKiB1LWRpYWVyZXNpcyAq LwotICAgICAgZGVmYXVsdDogIHJldHVybih5bDJhc1tjXSk7CS8qIE90aGVycyAqLwotICAgIH0K LX0KLQotQ0hBUgkJCQkJLyogR2VybWFuIHRvIExhdGluLTIgKi8KLSNpZmRlZiBDS19BTlNJQwot eGdlbDIoQ0hBUiBjKQotI2Vsc2UKLXhnZWwyKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJ QyAqLwoteyAvKiB4bGdlbDIgKi8KLSAgICBpZiAoYyAmIDB4ODApCi0gICAgICByZXR1cm4oVU5L KTsKLSAgICBzd2l0Y2goYykgewotICAgICAgY2FzZSA2NDogIHJldHVybigxNjcpOwkJLyogUGFy YWdyYXBoIHNpZ24gKi8KLSAgICAgIGNhc2UgOTE6ICByZXR1cm4oMTk2KTsJCS8qIEEtZGlhZXJl c2lzICovCi0gICAgICBjYXNlIDkyOiAgcmV0dXJuKDIxNCk7CQkvKiBPLWRpYWVyZXNpcyAqLwot ICAgICAgY2FzZSA5MzogIHJldHVybigyMjApOwkJLyogVS1kaWFlcmVzaXMgKi8KLSAgICAgIGNh c2UgMTIzOiByZXR1cm4oMjI4KTsJCS8qIGEtZGlhZXJlc2lzICovCi0gICAgICBjYXNlIDEyNjog cmV0dXJuKDIyMyk7CQkvKiBkb3VibGUtcyAqLwotICAgICAgY2FzZSAxMjQ6IHJldHVybigyNDYp OwkJLyogby1kaWFlcmVzaXMgKi8KLSAgICAgIGNhc2UgMTI1OiByZXR1cm4oMjUyKTsJCS8qIHUt ZGlhZXJlc2lzICovCi0gICAgICBkZWZhdWx0OiAgcmV0dXJuKGMpOwkJLyogT3RoZXJzICovCi0g ICAgfQotfQotCi1DSEFSCQkJCQkvKiBMYXRpbi0yIHRvIEh1bmdhcmlhbiAqLwotI2lmZGVmIENL X0FOU0lDCi14bDJodShDSEFSIGMpCi0jZWxzZQoteGwyaHUoYykgQ0hBUiBjOwotI2VuZGlmIC8q IENLX0FOU0lDICovCi17IC8qIHhsbDJodSAqLwotICAgIHN3aXRjaChjKSB7Ci0gICAgICBjYXNl IDE2NDogcmV0dXJuKDM2KTsJCS8qIEN1cnJlbmN5IHN5bWJvbCAqLwotICAgICAgY2FzZSAxODk6 IHJldHVybigxMjYpOwkJLyogRG91YmxlIGFjdXRlIGFjY2VudCAqLwotICAgICAgY2FzZSAxOTM6 IHJldHVybig2NCk7CQkvKiBBLWFjdXRlICovCi0gICAgICBjYXNlIDIwMTogcmV0dXJuKDkxKTsJ CS8qIEUtYWN1dGUgKi8KLSAgICAgIGNhc2UgMjE0OiByZXR1cm4oOTIpOwkJLyogTy1kaWFlcmVz aXMgKi8KLSAgICAgIGNhc2UgMjIwOiByZXR1cm4oOTMpOwkJLyogVS1kaWFlcmVzaXMgKi8KLSAg ICAgIGNhc2UgMjI1OiByZXR1cm4oOTYpOwkJLyogYS1hY3V0ZSAqLwotICAgICAgY2FzZSAyMzM6 IHJldHVybigxMjMpOwkJLyogZS1hY3V0ZSAqLwotICAgICAgY2FzZSAyNDY6IHJldHVybigxMjQp OwkJLyogby1kaWFlcmVzaXMgKi8KLSAgICAgIGNhc2UgMjUyOiByZXR1cm4oMTI1KTsJCS8qIHUt ZGlhZXJlc2lzICovCi0gICAgICBkZWZhdWx0OiAgcmV0dXJuKHlsMmFzW2NdKTsJLyogT3RoZXJz ICovCi0gICAgfQotfQotCi1DSEFSCQkJCQkvKiBIdW5nYXJpYW4gdG8gTGF0aW4tMiAqLwotI2lm ZGVmIENLX0FOU0lDCi14aHVsMihDSEFSIGMpCi0jZWxzZQoteGh1bDIoYykgQ0hBUiBjOwotI2Vu ZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsaHVsMiAqLwotICAgIGlmIChjICYgMHg4MCkKLSAg ICAgIHJldHVybihVTkspOwotICAgIHN3aXRjaChjKSB7Ci0gICAgICBjYXNlIDM2OiAgcmV0dXJu KDE2NCk7CQkvKiBDdXJyZW5jeSBzeW1ib2wgKi8KLSAgICAgIGNhc2UgNjQ6ICByZXR1cm4oMTkz KTsJCS8qIEEtYWN1dGUgKi8KLSAgICAgIGNhc2UgOTE6ICByZXR1cm4oMjAxKTsJCS8qIEUtYWN1 dGUgKi8KLSAgICAgIGNhc2UgOTI6ICByZXR1cm4oMjE0KTsJCS8qIE8tZGlhZXJlc2lzICovCi0g ICAgICBjYXNlIDkzOiAgcmV0dXJuKDIyMCk7CQkvKiBVLWRpYWVyZXNpcyAqLwotICAgICAgY2Fz ZSA5NjogIHJldHVybigyMjUpOwkJLyogYS1hY3V0ZSAqLwotICAgICAgY2FzZSAxMjM6IHJldHVy bigyMzMpOwkJLyogZS1hY3V0ZSAqLwotICAgICAgY2FzZSAxMjQ6IHJldHVybigyNDYpOwkJLyog by1kaWFlcmVzaXMgKi8KLSAgICAgIGNhc2UgMTI1OiByZXR1cm4oMjUyKTsJCS8qIHUtZGlhZXJl c2lzICovCi0gICAgICBjYXNlIDEyNjogcmV0dXJuKDE4OSk7CQkvKiBEb3VibGUgYWN1dGUgYWNj ZW50ICovCi0gICAgICBkZWZhdWx0OiAgcmV0dXJuKGMpOwkJLyogT3RoZXJzICovCi0gICAgfQot fQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhyOGwyKENIQVIgYykKLSNlbHNlCi14cjhsMihj KSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeHI4bDIgKi8gLyogSGV3bGV0 dCBQYWNrYXJkIFJvbWFuOCB0byBMYXRpbi0yICovCi0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBj YXNlIDIzNTogcmV0dXJuKDE2OSk7CQkvKiBTIGNhcm9uICovCi0gICAgICBjYXNlIDIzNjogcmV0 dXJuKDE4NSk7CQkvKiBzIGNhcm9uICovCi0gICAgICBkZWZhdWx0OiAgcmV0dXJuKHlsMWwyW3ly OGwxW2NdXSk7Ci0gICAgfQotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhsMnI4KENIQVIg YykKLSNlbHNlCi14bDJyOChjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyog eGwycjggKi8gLyogTGF0aW4tMiB0byBIZXdsZXR0IFBhY2thcmQgUm9tYW44IENoYXJhY3RlciBT ZXQgKi8KLSAgICBzd2l0Y2ggKGMpIHsKLSAgICAgIGNhc2UgMTY5OiByZXR1cm4oMjM1KTsJCS8q IFMgY2Fyb24gKi8KLSAgICAgIGNhc2UgMTg1OiByZXR1cm4oMjM2KTsJCS8qIHMgY2Fyb24gKi8K LSAgICAgIGRlZmF1bHQ6ICByZXR1cm4oeXI4bDFbeWwxbDJbY11dKTsKLSAgICB9Ci19Ci0KLSNl bHNlIC8qIE5PTEFUSU4yICovCi0KLSNkZWZpbmUgeGwxbXogTlVMTAotI2RlZmluZSB4bXpsMSBO VUxMCi0jZGVmaW5lIHhsMm16IE5VTEwKLSNkZWZpbmUgeG16bDIgTlVMTAotI2RlZmluZSB4bDlt eiBOVUxMCi0jZGVmaW5lIHhtemw5IE5VTEwKLSNkZWZpbmUgeG16YXMgTlVMTAotCi0jZGVmaW5l IHhsMTEyNTAgTlVMTAotI2RlZmluZSB4bDIxMjUwIE5VTEwKLSNkZWZpbmUgeGw5MTI1MCBOVUxM Ci0KLSNkZWZpbmUgeDEyNTBhcyBOVUxMCi0jZGVmaW5lIHgxMjUwbDEgTlVMTAotI2RlZmluZSB4 MTI1MGwyIE5VTEwKLSNkZWZpbmUgeDEyNTBsOSBOVUxMCi0KLSNkZWZpbmUgeGwybDEgTlVMTAot I2RlZmluZSB4bDJ3MSBOVUxMCi0jZGVmaW5lIHhsMWwyIE5VTEwKLSNkZWZpbmUgeHcxbDIgTlVM TAotI2RlZmluZSB4bDJhcyBOVUxMCi0jZGVmaW5lIHhsMjUyIE5VTEwKLSNkZWZpbmUgeDUybDIg TlVMTAotI2RlZmluZSB4NTJhcyBOVUxMCi0jZGVmaW5lIHg1MmwxIE5VTEwKLSNkZWZpbmUgeGwx NTIgTlVMTAotI2RlZmluZSB4bDJuZSBOVUxMCi0jZGVmaW5lIHhsMjQzIE5VTEwKLSNkZWZpbmUg eGwyODUgTlVMTAotI2RlZmluZSB4bDJhcSBOVUxMCi0jZGVmaW5lIHhsMmRnIE5VTEwKLSNkZWZp bmUgeGwyc2sgTlVMTAotI2RlZmluZSB4bmVsMiBOVUxMCi0jZGVmaW5lIHg0M2wyIE5VTEwKLSNk ZWZpbmUgeDg1bDIgTlVMTAotI2RlZmluZSB4YXFsMiBOVUxMCi0jZGVmaW5lIHhkZ2wyIE5VTEwK LSNkZWZpbmUgeHNrbDIgTlVMTAotI2RlZmluZSB4bDJnZSBOVUxMCi0jZGVmaW5lIHhnZWwyIE5V TEwKLSNkZWZpbmUgeGwyaHUgTlVMTAotI2RlZmluZSB4aHVsMiBOVUxMCi0jZGVmaW5lIHhsMnI4 IE5VTEwKLSNkZWZpbmUgeHI4bDIgTlVMTAotI2VuZGlmIC8qIExBVElOMiAqLwotCi0vKiBUaGlz IG9uZSBjYW4gYWxzbyBiZSB1c2VkIGZvciBFTE9UIDkyNywgSGVicmV3IDcsIGV0YyAqLwotCi1D SEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhhc3NrKENIQVIgYykKLSNlbHNlCi14YXNzayhjKSBDSEFS IGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGFzc2sgKi8JCQkJLyogQVNDSUkgdG8g U2hvcnQgS09JICovCi0gICAgaWYgKGMgJiAweDgwKQotICAgICAgcmV0dXJuKFVOSyk7Ci0gICAg cmV0dXJuKChjID4gOTUpID8gKGMgLSAzMikgOiBjKTsJLyogRm9sZCBjb2x1bW5zIDYtNyB0byA0 LTUgKi8KLX0KLQotI2lmZGVmIENZUklMTElDCi0vKiBUcmFuc2xhdGlvbiBmdW5jdGlvbnMgZm9y IEN5cmlsbGljIGNoYXJhY3RlciBzZXRzICovCi0KLUNIQVIJCQkJCS8qIExhdGluL0N5cmlsbGlj IHRvIENQODY2ICovCi0jaWZkZWYgQ0tfQU5TSUMKLXhsY2FjKENIQVIgYykKLSNlbHNlCi14bGNh YyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGxjYWMgKi8JCQkJLyog UEMgQ29kZSBQYWdlIDg2NiAqLwotICAgIHJldHVybih5bGNhY1tjXSk7Ci19Ci0KLUNIQVIJCQkJ CS8qIExhdGluL0N5cmlsbGljIHRvICovCi0jaWZkZWYgQ0tfQU5TSUMKLXhsYzU1KENIQVIgYykK LSNlbHNlCi14bGM1NShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGxj NTUgKi8JCQkJLyogUEMgQ29kZSBQYWdlIDg1NSAqLwotICAgIHJldHVybih5bGM1NVtjXSk7Ci19 Ci0KLUNIQVIJCQkJCS8qIExhdGluL0N5cmlsbGljIHRvICovCi0jaWZkZWYgQ0tfQU5TSUMKLXhs YzEyNTEoQ0hBUiBjKQotI2Vsc2UKLXhsYzEyNTEoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FO U0lDICovCi17IC8qIHhsYzEyNTEgKi8JCQkJLyogUEMgQ29kZSBQYWdlIDEyNTEgKi8KLSAgICBy ZXR1cm4oeWxjMTI1MVtjXSk7Ci19Ci0KLUNIQVIJCQkJCS8qIExhdGluL0N5cmlsbGljIHRvLi4u ICovCi0jaWZkZWYgQ0tfQU5TSUMKLXhsY2J1KENIQVIgYykKLSNlbHNlCi14bGNidShjKSBDSEFS IGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGxjYnUgKi8JCQkJLyogQnVsZ2FyaWFu IFBDIENvZGUgUGFnZSAqLwotICAgIHJldHVybih5bGNidVtjXSk7Ci19Ci0KLUNIQVIJCQkJCS8q IExhdGluL0N5cmlsbGljIHRvIE9sZCBLT0ktOCAqLwotI2lmZGVmIENLX0FOU0lDCi14bGNrOChD SEFSIGMpCi0jZWxzZQoteGxjazgoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17 IC8qIHhsY2s4ICovCi0gICAgcmV0dXJuKHlsY2s4W2NdKTsKLX0KLQotQ0hBUgkJCQkJLyogTGF0 aW4vQ3lyaWxsaWMgdG8gS09JOC1SICovCi0jaWZkZWYgQ0tfQU5TSUMKLXhsY2tyKENIQVIgYykK LSNlbHNlCi14bGNrcihjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGxj a3IgKi8KLSAgICBzd2l0Y2goYykgewotICAgICAgY2FzZSAweGExOiByZXR1cm4oMHhiMyk7CQkv KiBJbyAqLwotICAgICAgY2FzZSAweGYxOiByZXR1cm4oMHhhMyk7CQkvKiBpbyAqLwotICAgICAg ZGVmYXVsdDoKLQlpZiAoYyA+IDB4N2YgJiYgYyA8IDB4YzApCi0JICByZXR1cm4oVU5LKTsKLQly ZXR1cm4oeWxjazhbY10pOwotICAgIH0KLX0KLQotQ0hBUgkJCQkJLyogTGF0aW4vQ3lyaWxsaWMg dG8gIEtPSTgtVSAqLwotI2lmZGVmIENLX0FOU0lDCi14bGNrdShDSEFSIGMpCi0jZWxzZQoteGxj a3UoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsY2t1ICovCi0gICAg c3dpdGNoKGMpIHsKLSAgICAgIGNhc2UgMHhhMTogcmV0dXJuKDB4YjMpOwkJLyogSW8gKi8KLSAg ICAgIGNhc2UgMHhmMTogcmV0dXJuKDB4YTMpOwkJLyogaW8gKi8KLSAgICAgIGNhc2UgMHhmNDog cmV0dXJuKDB4YTQpOwkJLyogVWtyYWluaWFuIGllICovCi0gICAgICBjYXNlIDB4ZjY6IHJldHVy bigweGE2KTsJCS8qIFVrcmFpbmlhbiBpICovCi0gICAgICBjYXNlIDB4Zjc6IHJldHVybigweGE3 KTsJCS8qIFVrcmFpbmlhbiB5aSAqLwotICAgICAgY2FzZSAweGYzOiByZXR1cm4oMHhhZCk7CQkv KiBVa3JhaW5pYW4gZ2hlIHdpdGggdXB0dXJuICovCi0gICAgICBjYXNlIDB4YTQ6IHJldHVybigw eGI0KTsJCS8qIFVrcmFpbmlhbiBJZSAqLwotICAgICAgY2FzZSAweGE2OiByZXR1cm4oMHhiNik7 CQkvKiBVa3JhaW5pYW4gSSAqLwotICAgICAgY2FzZSAweGE3OiByZXR1cm4oMHhiNyk7CQkvKiBV a3JhaW5pYW4gWWkgKi8KLSAgICAgIGNhc2UgMHhhMzogcmV0dXJuKDB4YmQpOwkJLyogVWtyYWlu aWFuIEdoZSB3aXRoIHVwdHVybiAqLwotICAgICAgZGVmYXVsdDoKLQlpZiAoYyA+IDB4N2YgJiYg YyA8IDB4YzApCi0JICByZXR1cm4oVU5LKTsKLQlyZXR1cm4oeWxjazhbY10pOwotICAgIH0KLX0K LQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14bGNzayhDSEFSIGMpCi0jZWxzZQoteGxjc2soYykg Q0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsY3NrICovCQkJCS8qIExhdGlu L0N5cmlsbGljIHRvIFNob3J0IEtPSSAqLwotICAgIHJldHVybih5bGNza1tjXSk7Ci19Ci0KLUNI QVIKLSNpZmRlZiBDS19BTlNJQwoteGxjYXMoQ0hBUiBjKQotI2Vsc2UKLXhsY2FzKGMpIENIQVIg YzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bGNhcyAqLwkJCQkvKiBMYXRpbi9DeXJp bGxpYyB0byBBU0NJSSAqLwotICAgIGlmIChsYW5nc1tsYW5ndWFnZV0uaWQgPT0gTF9SVVNTSUFO KQotICAgICAgcmV0dXJuKHlsY3NrW2NdKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4oKGMgPiAx MjcpID8gJz8nIDogYyk7Ci19Ci0KLUNIQVIJCQkJCS8qIENQODY2ICovCi0jaWZkZWYgQ0tfQU5T SUMKLXhhY2xjKENIQVIgYykKLSNlbHNlCi14YWNsYyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tf QU5TSUMgKi8KLXsgLyogeGFjbGMgKi8JCQkJLyogdG8gTGF0aW4vQ3lyaWxsaWMgKi8KLSAgICBy ZXR1cm4oeWFjbGNbY10pOwotfQotCi1DSEFSCQkJCQkvKiBDUDg1NSAqLwotI2lmZGVmIENLX0FO U0lDCi14NTVsYyhDSEFSIGMpCi0jZWxzZQoteDU1bGMoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENL X0FOU0lDICovCi17IC8qIHg1NWxjICovCQkJCS8qIHRvIExhdGluL0N5cmlsbGljICovCi0gICAg cmV0dXJuKHk1NWxjW2NdKTsKLX0KLQotQ0hBUgkJCQkJLyogQnVsZ2FyaWFuIFBDIENvZGUgUGFn ZSAuLi4gKi8KLSNpZmRlZiBDS19BTlNJQwoteGJ1bGMoQ0hBUiBjKQotI2Vsc2UKLXhidWxjKGMp IENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4YnVsYyAqLwkJCQkvKiB0byBM YXRpbi9DeXJpbGxpYyAqLwotICAgIHJldHVybih5YnVsY1tjXSk7Ci19Ci0KLUNIQVIJCQkJCS8q IENQMTI1MSAqLwotI2lmZGVmIENLX0FOU0lDCi14MTI1MWxjKENIQVIgYykKLSNlbHNlCi14MTI1 MWxjKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4MTI1MWxjICovCQkJ CS8qIHRvIExhdGluL0N5cmlsbGljICovCi0gICAgcmV0dXJuKHkxMjUxbGNbY10pOwotfQotCi1D SEFSCQkJCQkvKiBPbGQgS09JLTggdG8gTGF0aW4vQ3lyaWxsaWMgKi8KLSNpZmRlZiBDS19BTlNJ QwoteGs4bGMoQ0hBUiBjKQotI2Vsc2UKLXhrOGxjKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19B TlNJQyAqLwoteyAvKiB4azhsYyAqLwotICAgIHJldHVybih5azhsY1tjXSk7Ci19Ci0KLUNIQVIJ CQkJCS8qIEtPSTgtUiB0byBMYXRpbi9DeXJpbGxpYyAqLwotI2lmZGVmIENLX0FOU0lDCi14a3Js YyhDSEFSIGMpCi0jZWxzZQoteGtybGMoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICov Ci17IC8qIHhrcmxjICovCi0gICAgaWYgKGMgPT0gMHhiMykgcmV0dXJuKDB4YTEpOwotICAgIGVs c2UgaWYgKGMgPT0gMHhhMykgcmV0dXJuKDB4ZjEpOwotICAgIGVsc2UgaWYgKGMgPiAweDdmICYm IGMgPCAweGMwKQotICAgICAgcmV0dXJuKFVOSyk7Ci0gICAgcmV0dXJuKHlrOGxjW2NdKTsKLX0K LQotQ0hBUgkJCQkJLyogS09JOC1VIHRvIExhdGluL0N5cmlsbGljICovCi0jaWZkZWYgQ0tfQU5T SUMKLXhrdWxjKENIQVIgYykKLSNlbHNlCi14a3VsYyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tf QU5TSUMgKi8KLXsgLyogeGt1bGMgKi8KLSAgICBzd2l0Y2ggKGMpIHsKLSAgICAgIGNhc2UgMHhi MzogcmV0dXJuKDB4YTEpOwkJLyogSW8gKi8KLSAgICAgIGNhc2UgMHhhMzogcmV0dXJuKDB4ZjEp OwkJLyogaW8gKi8KLSAgICAgIGNhc2UgMHhhNDogcmV0dXJuKDB4ZjQpOwkJLyogVWtyYWluaWFu IGllICovCi0gICAgICBjYXNlIDB4YTY6IHJldHVybigweGY2KTsJCS8qIFVrcmFpbmlhbiBpICov Ci0gICAgICBjYXNlIDB4YTc6IHJldHVybigweGY3KTsJCS8qIFVrcmFpbmlhbiB5aSAqLwotICAg ICAgY2FzZSAweGFkOiByZXR1cm4oMHhmMyk7CQkvKiBVa3JhaW5pYW4gZ2hlIHdpdGggdXB0dXJu ICovCi0gICAgICBjYXNlIDB4YjQ6IHJldHVybigweGE0KTsJCS8qIFVrcmFpbmlhbiBJZSAqLwot ICAgICAgY2FzZSAweGI2OiByZXR1cm4oMHhhNik7CQkvKiBVa3JhaW5pYW4gSSAqLwotICAgICAg Y2FzZSAweGI3OiByZXR1cm4oMHhhNyk7CQkvKiBVa3JhaW5pYW4gWWkgKi8KLSAgICAgIGNhc2Ug MHhiZDogcmV0dXJuKDB4YTMpOwkJLyogVWtyYWluaWFuIEdoZSB3aXRoIHVwdHVybiAqLwotICAg ICAgLyogTm90ZSBzdWJzdGl0dXRpb24gb2YgR2plIGZvciBHaGUtVXB0dXJuLCB3aGljaCBpcyBu b3QgaW4gODg1OS01ICovCi0gICAgICBkZWZhdWx0OgotCWlmIChjID4gMHg3ZiAmJiBjIDwgMHhj MCkKLQkgIHJldHVybihVTkspOwotCXJldHVybih5azhsY1tjXSk7Ci0gICAgfQotfQotCi1DSEFS Ci0jaWZkZWYgQ0tfQU5TSUMKLXhza2N5KENIQVIgYykKLSNlbHNlCi14c2tjeShjKSBDSEFSIGM7 Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeHNrY3kgKi8JCQkvKiBTaG9ydCBLT0kgdG8g TGF0aW4vQ3lyaWxsaWMgKi8KLSAgICByZXR1cm4oeXNrY3lbYyAmIDB4N2ZdKTsKLX0KLQotQ0hB UgotI2lmZGVmIENLX0FOU0lDCi14YXNjeShDSEFSIGMpCi0jZWxzZQoteGFzY3koYykgQ0hBUiBj OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhhc2N5ICovCQkJLyogQVNDSUkgdG8gTGF0 aW4vQ3lyaWxsaWMgKi8KLSAgICBpZiAobGFuZ3NbbGFuZ3VhZ2VdLmlkID09IExfUlVTU0lBTikg eyAvKiBJZiBMQU5HVUFHRSA9PSBSVVNTSUFOICAqLwotCXJldHVybih5c2tjeVtjICYgMHg3Zl0p OwkvKiB0cmVhdCBBU0NJSSBhcyBTaG9ydCBLT0kgKi8KLSAgICB9IGVsc2UgcmV0dXJuKChjID4g MTI3KSA/ICc/JyA6IGMpOwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhhY2FzKENIQVIg YykKLSNlbHNlCi14YWNhcyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyog eGFjYXMgKi8JCQkvKiBDUDg2NiB0byBBU0NJSSAqLwotICAgIGlmIChsYW5nc1tsYW5ndWFnZV0u aWQgPT0gTF9SVVNTSUFOKSB7Ci0JYyA9IHlhY2xjW2NdOwkJCS8qIEZpcnN0IHRvIExhdGluL0N5 cmlsbGljICovCi0JcmV0dXJuKHlsY3NrW2NdKTsJCS8qIFRoZW4gdG8gU2hvcnQgS09JICovCi0g ICAgfSBlbHNlIHJldHVybigoYyA+IDEyNykgPyAnPycgOiBjKTsKLX0KLQotQ0hBUgotI2lmZGVm IENLX0FOU0lDCi14NTVhcyhDSEFSIGMpCi0jZWxzZQoteDU1YXMoYykgQ0hBUiBjOwotI2VuZGlm IC8qIENLX0FOU0lDICovCi17IC8qIHg1NWFzICovCQkJLyogQ1A4NTUgdG8gQVNDSUkgKi8KLSAg ICBpZiAobGFuZ3NbbGFuZ3VhZ2VdLmlkID09IExfUlVTU0lBTikgewotCWMgPSB5NTVsY1tjXTsJ CQkvKiBGaXJzdCB0byBMYXRpbi9DeXJpbGxpYyAqLwotCXJldHVybih5bGNza1tjXSk7CQkvKiBU aGVuIHRvIFNob3J0IEtPSSAqLwotICAgIH0gZWxzZSByZXR1cm4oKGMgPiAxMjcpID8gJz8nIDog Yyk7Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteDEyNTFhcyhDSEFSIGMpCi0jZWxzZQot eDEyNTFhcyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeDEyNTFhcyAq LwkJCS8qIENQODEyNTEgdG8gQVNDSUkgKi8KLSAgICBpZiAobGFuZ3NbbGFuZ3VhZ2VdLmlkID09 IExfUlVTU0lBTikgewotCWMgPSB5MTI1MWxjW2NdOwkJCS8qIEZpcnN0IHRvIExhdGluL0N5cmls bGljICovCi0JcmV0dXJuKHlsY3NrW2NdKTsJCS8qIFRoZW4gdG8gU2hvcnQgS09JICovCi0gICAg fSBlbHNlIHJldHVybigoYyA+IDEyNykgPyAnPycgOiBjKTsKLX0KLQotQ0hBUgotI2lmZGVmIENL X0FOU0lDCi14c2thcyhDSEFSIGMpCi0jZWxzZQoteHNrYXMoYykgQ0hBUiBjOwotI2VuZGlmIC8q IENLX0FOU0lDICovCi17IC8qIHhza2FzICovCQkJCS8qIFNob3J0IEtPSSB0byBBU0NJSSAqLwot ICAgIHJldHVybigoYyA+IDk1KSA/ICc/JyA6IGMpOwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5T SUMKLXhrOGFzKENIQVIgYykKLSNlbHNlCi14azhhcyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tf QU5TSUMgKi8KLXsgLyogeGs4YXMgKi8JCQkJLyogT2xkIEtPSS04IEN5cmlsbGljIHRvIEFTQ0lJ ICovCi0gICAgaWYgKGxhbmdzW2xhbmd1YWdlXS5pZCA9PSBMX1JVU1NJQU4pIHsKLQljID0geWs4 bGNbY107CQkJLyogRmlyc3QgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KLQlyZXR1cm4oeWxjc2tbY10p OwkJLyogVGhlbiB0byBTaG9ydCBLT0kgKi8KLSAgICB9IGVsc2UgcmV0dXJuKChjID4gMTI3KSA/ ICc/JyA6IGMpOwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhsMXNrKENIQVIgYykKLSNl bHNlCi14bDFzayhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGwxc2sg Ki8JCQkJLyogTGF0aW4tMSB0byBTaG9ydCBLT0kgKi8KLSAgICBjID0gemwxYXMoYyk7CQkJLyog Q29udmVydCB0byBBU0NJSSAqLwotICAgIHJldHVybihjID0geGFzc2soYykpOwkJLyogQ29udmVy dCBBU0NJSSB0byBTaG9ydCBLT0kgKi8KLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14dzFs YyhDSEFSIGMpCi0jZWxzZQoteHcxbGMoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICov Ci17IC8qIHh3MWxjICovCQkJCS8qIENQMTI1MiB0byBMYXRpbi9DeXJpbGxpYyAqLwotICAgIHJl dHVybigoYyA8IDE2MCkgPyB4dzFhcyhjKSA6IHpsMWFzKGMpKTsKLX0KLQotQ0hBUgotI2lmZGVm IENLX0FOU0lDCi14YXNsYyhDSEFSIGMpCi0jZWxzZQoteGFzbGMoYykgQ0hBUiBjOwotI2VuZGlm IC8qIENLX0FOU0lDICovCi17IC8qIHhhc2xjICovCQkJLyogQVNDSUkgdG8gTGF0aW4vQ3lyaWxs aWMgKi8KLSAgICBpZiAobGFuZ3NbbGFuZ3VhZ2VdLmlkID09IExfUlVTU0lBTikKLSAgICAgIHJl dHVybih5c2tjeVtjICYgMHg3Zl0pOwotICAgIGVsc2UgcmV0dXJuKGMgJiAweDdmKTsKLX0KLQot Q0hBUgotI2lmZGVmIENLX0FOU0lDCi14YXNhYyhDSEFSIGMpCi0jZWxzZQoteGFzYWMoYykgQ0hB UiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhhc2FjICovCQkJLyogQVNDSUkgdG8g Q1A4NjYgKi8KLSAgICBpZiAoYyAmIDB4ODApCi0gICAgICByZXR1cm4oVU5LKTsKLSAgICBpZiAo bGFuZ3NbbGFuZ3VhZ2VdLmlkID09IExfUlVTU0lBTikgeyAvKiBVc2UgU2hvcnQgS09JICovCi0J YyA9IHhza2N5KGMpOwkJCS8qIFRyYW5zbGF0ZSB0byBMYXRpbi9DeXJpbGxpYyAqLwotCXJldHVy bih5bGNhY1tjXSk7CQkvKiBUaGVuIHRvIENQODY2ICovCi0gICAgfSBlbHNlIHJldHVybihjICYg MHg3Zik7Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGFzNTUoQ0hBUiBjKQotI2Vsc2UK LXhhczU1KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4YXM1NSAqLwkJ CS8qIEFTQ0lJIHRvIENQODU1ICovCi0gICAgaWYgKGMgJiAweDgwKQotICAgICAgcmV0dXJuKFVO Syk7Ci0gICAgaWYgKGxhbmdzW2xhbmd1YWdlXS5pZCA9PSBMX1JVU1NJQU4pIHsgLyogVXNlIFNo b3J0IEtPSSAqLwotCWMgPSB4c2tjeShjKTsJCQkvKiBUcmFuc2xhdGUgdG8gTGF0aW4vQ3lyaWxs aWMgKi8KLQlyZXR1cm4oeWxjNTVbY10pOwkJLyogVGhlbiB0byBDUDg2NiAqLwotICAgIH0gZWxz ZSByZXR1cm4oYyAmIDB4N2YpOwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhhczEyNTEo Q0hBUiBjKQotI2Vsc2UKLXhhczEyNTEoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICov Ci17IC8qIHhhczEyNTEgKi8JCQkvKiBBU0NJSSB0byBDUDgxMjUxICovCi0gICAgaWYgKGMgJiAw eDgwKQotICAgICAgcmV0dXJuKFVOSyk7Ci0gICAgaWYgKGxhbmdzW2xhbmd1YWdlXS5pZCA9PSBM X1JVU1NJQU4pIHsgLyogVXNlIFNob3J0IEtPSSAqLwotCWMgPSB4c2tjeShjKTsJCQkvKiBUcmFu c2xhdGUgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KLQlyZXR1cm4oeWxjMTI1MVtjXSk7CQkvKiBUaGVu IHRvIENQODY2ICovCi0gICAgfSBlbHNlIHJldHVybihjICYgMHg3Zik7Ci19Ci0KLUNIQVIKLSNp ZmRlZiBDS19BTlNJQwoteGFzazgoQ0hBUiBjKQotI2Vsc2UKLXhhc2s4KGMpIENIQVIgYzsKLSNl bmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4YXNrOCAqLwkJCS8qIEFTQ0lJIHRvIEtPSS04ICov Ci0gICAgaWYgKGMgJiAweDgwKQotICAgICAgcmV0dXJuKFVOSyk7Ci0gICAgaWYgKGxhbmdzW2xh bmd1YWdlXS5pZCA9PSBMX1JVU1NJQU4pIHsgLyogVXNlIFNob3J0IEtPSSAqLwotCWMgPSB4c2tj eShjKTsJCQkvKiBUcmFuc2xhdGUgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KLQlyZXR1cm4oeWxjazhb Y10pOwkJLyogVGhlbiB0byBLT0ktOCAqLwotICAgIH0gZWxzZSByZXR1cm4oYyAmIDB4N2YpOwot fQotI2Vsc2UgLyogTm8gQ3lyaWxsaWMgKi8KLSNkZWZpbmUgeGFjYXMgTlVMTAotI2RlZmluZSB4 NTVhcyBOVUxMCi0jZGVmaW5lIHgxMjUxYXMgTlVMTAotI2RlZmluZSB4YWNsYyBOVUxMCi0jZGVm aW5lIHg1NWxjIE5VTEwKLSNkZWZpbmUgeDEyNTFsYyBOVUxMCi0jZGVmaW5lIHhhc2FjIE5VTEwK LSNkZWZpbmUgeGFzNTUgTlVMTAotI2RlZmluZSB4YXMxMjUxIE5VTEwKLSNkZWZpbmUgeGFzY3kg TlVMTAotI2RlZmluZSB4YXNrOCBOVUxMCi0jZGVmaW5lIHhhc2xjIE5VTEwKLSNkZWZpbmUgeGFz c2sgTlVMTAotI2RlZmluZSB4azhhcyBOVUxMCi0jZGVmaW5lIHhrOGxjIE5VTEwKLSNkZWZpbmUg eGtybGMgTlVMTAotI2RlZmluZSB4a3VsYyBOVUxMCi0jZGVmaW5lIHhsMXNrIE5VTEwKLSNkZWZp bmUgeHcxbGMgTlVMTAotI2RlZmluZSB4bGNhYyBOVUxMCi0jZGVmaW5lIHhsYzU1IE5VTEwKLSNk ZWZpbmUgeGxjMTI1MSBOVUxMCi0jZGVmaW5lIHhsY2FzIE5VTEwKLSNkZWZpbmUgeGxjazggTlVM TAotI2RlZmluZSB4bGNrciBOVUxMCi0jZGVmaW5lIHhsY2t1IE5VTEwKLSNkZWZpbmUgeGxjaDcg TlVMTAotI2RlZmluZSB4bGNzayBOVUxMCi0jZGVmaW5lIHhza2FzIE5VTEwKLSNkZWZpbmUgeHNr Y3kgTlVMTAotI2RlZmluZSB4YnVsYyBOVUxMCi0jZGVmaW5lIHhsY2J1IE5VTEwKLSNlbmRpZiAv KiBDWVJJTExJQyAqLwotCi0vKiBUcmFuc2xhdGlvbiBmdW5jdGlvbnMgZm9yIEhlYnJldyBjaGFy YWN0ZXIgc2V0cyAqLwotCi0jaWZkZWYgSEVCUkVXCi0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwot eGFzaDcoQ0hBUiBjKQotI2Vsc2UKLXhhc2g3KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJ QyAqLwoteyAvKiB4YXNoNyAqLwkJCS8qIEFTQ0lJIHRvIEhlYnJldy03ICovCi0gICAgaWYgKGMg JiAweDgwKQotICAgICAgcmV0dXJuKFVOSyk7Ci0gICAgaWYgKGMgPT0gOTYpIHJldHVybignPycp OwotICAgIGlmIChjID4gOTYgJiYgYyA8IDEyMykgcmV0dXJuKGMgLSAzMik7Ci0gICAgZWxzZSBy ZXR1cm4oYyk7Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGwxaDcoQ0hBUiBjKQotI2Vs c2UKLXhsMWg3KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bDFoNyAq LwkJCS8qIExhdGluLTEgdG8gSGVicmV3LTcgKi8KLSAgICByZXR1cm4oeGFzaDcoeGwxYXMoYykp KTsKLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14bDFsaChDSEFSIGMpCi0jZWxzZQoteGwx bGgoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsMWxoICovCQkJCS8q IExhdGluLTEgdG8gTGF0aW4vSGVicmV3ICovCi0gICAgc3dpdGNoKGMpIHsKLSAgICAgIGNhc2Ug MTcwOiByZXR1cm4oJ2EnKTsJCS8qIEZlbWluaW5lIG9yZGluYWwgKi8KLSAgICAgIGNhc2UgMTg2 OiByZXR1cm4oJ28nKTsJCS8qIE1hc2N1bGluZSBvcmRpbmFsICovCi0gICAgICBjYXNlIDIxNTog cmV0dXJuKDE3MCk7CQkvKiBUaW1lcyAqLwotICAgICAgY2FzZSAyNDc6IHJldHVybigxODYpOwkJ LyogRGl2aWRlICovCi0gICAgICBkZWZhdWx0OiAgcmV0dXJuKCAoYyA+IDE5MCkgPyB4bDFhcyhj KSA6IGMgKTsKLSAgICB9Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteHcxbGgoQ0hBUiBj KQotI2Vsc2UKLXh3MWxoKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4 dzFsaCAqLwkJCQkvKiBDUDEyNTIgdG8gTGF0aW4vSGVicmV3ICovCi0gICAgc3dpdGNoKGMpIHsK LSAgICAgIGNhc2UgMTcwOiByZXR1cm4oJ2EnKTsJCS8qIEZlbWluaW5lIG9yZGluYWwgKi8KLSAg ICAgIGNhc2UgMTg2OiByZXR1cm4oJ28nKTsJCS8qIE1hc2N1bGluZSBvcmRpbmFsICovCi0gICAg ICBjYXNlIDIxNTogcmV0dXJuKDE3MCk7CQkvKiBUaW1lcyAqLwotICAgICAgY2FzZSAyNDc6IHJl dHVybigxODYpOwkJLyogRGl2aWRlICovCi0gICAgICBkZWZhdWx0OgotCWlmIChjIDwgMTYwKQot CSAgcmV0dXJuKHh3MWFzKGMpKTsKLQllbHNlCi0JICByZXR1cm4oKGMgPiAxOTApID8geGwxYXMo YykgOiBjKTsKLSAgICB9Ci19Ci0KLSNpZmRlZiBMQVRJTjIKLUNIQVIKLSNpZmRlZiBDS19BTlNJ QwoteGwyaDcoQ0hBUiBjKQotI2Vsc2UKLXhsMmg3KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19B TlNJQyAqLwoteyAvKiB4bDJoNyAqLwkJCQkvKiBMYXRpbi0yIHRvIEhlYnJldy03ICovCi0gICAg cmV0dXJuKHhhc2g3KHhsMmFzKGMpKSk7Ci19Ci0jZWxzZQotI2RlZmluZSB4bDJoNyBOVUxMCi0j ZW5kaWYgLyogTEFUSU4yICovCi0KLSNpZm5kZWYgTk9DWVJJTAotQ0hBUgotI2lmZGVmIENLX0FO U0lDCi14bGNoNyhDSEFSIGMpCi0jZWxzZQoteGxjaDcoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENL X0FOU0lDICovCi17IC8qIHhsY2g3ICovCQkJCS8qIExhdGluL0N5cmlsbGljIHRvIEhlYnJldy03 ICovCi0gICAgcmV0dXJuKHhhc2g3KHhsY2FzKGMpKSk7Ci19Ci0jZW5kaWYgLyogTk9DWVJJTCAq LwotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhsaGFzKENIQVIgYykKLSNlbHNlCi14bGhhcyhj KSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGxoYXMgKi8JCQkvKiBMYXRp bi9IZWJyZXcgdG8gQVNDSUkgKi8KLSAgICByZXR1cm4oIChjID4gMTI3KSA/ICc/JyA6IGMgKTsK LX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14bGhsMShDSEFSIGMpCi0jZWxzZQoteGxobDEo YykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsaGwxICovCQkJLyogTGF0 aW4vSGVicmV3IHRvIExhdGluLTEgKi8KLSAgICBzd2l0Y2ggKGMpIHsKLSAgICAgIGNhc2UgMTcw OiByZXR1cm4oMjE1KTsKLSAgICAgIGNhc2UgMTg2OiByZXR1cm4oMjQ3KTsKLSAgICAgIGRlZmF1 bHQ6IHJldHVybiggKGMgPiAxOTApID8gJz8nIDogYyApOwotICAgIH0KLX0KLQotQ0hBUgotI2lm ZGVmIENLX0FOU0lDCi14bGh3MShDSEFSIGMpCi0jZWxzZQoteGxodzEoYykgQ0hBUiBjOwotI2Vu ZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsaHcxICovCQkJLyogTGF0aW4vSGVicmV3IHRvIENQ MTI1MiAqLwotICAgIGlmIChjID4gMTI3ICYmIGMgPCAxNjApCi0gICAgICByZXR1cm4oJz8nKTsK LSAgICBzd2l0Y2ggKGMpIHsKLSAgICAgIGNhc2UgMTcwOiByZXR1cm4oMjE1KTsKLSAgICAgIGNh c2UgMTg2OiByZXR1cm4oMjQ3KTsKLSAgICAgIGRlZmF1bHQ6IHJldHVybiggKGMgPiAxOTApID8g Jz8nIDogYyApOwotICAgIH0KLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14bGg2MihDSEFS IGMpCi0jZWxzZQoteGxoNjIoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8q IHhsaDYyICovCQkJLyogTGF0aW4vSGVicmV3IHRvIENQODYyICovCi0gICAgcmV0dXJuKHlsaDYy W2NdKTsKLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14bDE2MihDSEFSIGMpCi0jZWxzZQot eGwxNjIoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsMTYyICovCQkJ LyogTGF0aW4tMSB0byBDUDg2MiAqLwotICAgIHJldHVybih4bGg2Mih4bDFsaChjKSkpOwkvKiBW aWEgTGF0aW4vSGVicmV3ICovCi19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGxoaDcoQ0hB UiBjKQotI2Vsc2UKLXhsaGg3KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAv KiB4bGhoNyAqLwkJCS8qIExhdGluL0hlYnJldyB0byBIZWJyZXctNyAqLwotICAgIHJldHVybih5 bGhoN1tjXSk7Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGg3YXMoQ0hBUiBjKQotI2Vs c2UKLXhoN2FzKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4aDdhcyAq LwkJCS8qIEhlYnJldy03IHRvIEFTQ0lJICovCi0gICAgaWYgKGMgJiAweDgwKQotICAgICAgcmV0 dXJuKFVOSyk7Ci0gICAgcmV0dXJuKCAoYyA+IDk1ICYmIGMgPCAxMjMpID8gJz8nIDogYyApOwot fQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXg2MmxoKENIQVIgYykKLSNlbHNlCi14NjJsaChj KSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeDYybGggKi8JCQkvKiBDUDg2 MiB0byBMYXRpbi9IZWJyZXcgKi8KLSAgICByZXR1cm4oeTYybGhbY10pOwotfQotCi1DSEFSCi0j aWZkZWYgQ0tfQU5TSUMKLXg2MmFzKENIQVIgYykKLSNlbHNlCi14NjJhcyhjKSBDSEFSIGM7Ci0j ZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeDYyYXMgKi8JCQkvKiBDUDg2MiB0byBBU0NJSSAq LwotICAgIHJldHVybiggeGxoYXMoeDYybGgoYykpICk7Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19B TlNJQwoteDYybDEoQ0hBUiBjKQotI2Vsc2UKLXg2MmwxKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBD S19BTlNJQyAqLwoteyAvKiB4NjJsMSAqLwkJCS8qIENQODYyIHRvIExhdGluLTEgKi8KLSAgICBy ZXR1cm4oIHhsaGwxKHg2MmxoKGMpKSApOwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXho N2xoKENIQVIgYykKLSNlbHNlCi14aDdsaChjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMg Ki8KLXsgLyogeGg3bGggKi8JCQkvKiBIZWJyZXctNyB0byBMYXRpbi9IZWJyZXcgKi8KLSAgICBp ZiAoYyAmIDB4ODApCi0gICAgICByZXR1cm4oVU5LKTsKLSAgICByZXR1cm4oeWg3bGhbY10pOwot fQotCi0jZWxzZSAvKiBObyBIZWJyZXcgKi8KLQotI2RlZmluZSB4YXNoNyBOVUxMCi0jZGVmaW5l IHhsMWg3IE5VTEwKLSNkZWZpbmUgeGwyaDcgTlVMTAotI2RlZmluZSB4bGNoNyBOVUxMCi0jZGVm aW5lIHhsMWxoIE5VTEwKLSNkZWZpbmUgeHcxbGggTlVMTAotI2RlZmluZSB4bGhhcyBOVUxMCi0j ZGVmaW5lIHhsaGwxIE5VTEwKLSNkZWZpbmUgeGxodzEgTlVMTAotI2RlZmluZSB4bDE2MiBOVUxM Ci0jZGVmaW5lIHhsaGg3IE5VTEwKLSNkZWZpbmUgeGxoNjIgTlVMTAotI2RlZmluZSB4aDdhcyBO VUxMCi0jZGVmaW5lIHg2MmFzIE5VTEwKLSNkZWZpbmUgeDYybDEgTlVMTAotI2RlZmluZSB4aDds aCBOVUxMCi0jZGVmaW5lIHg2MmxoIE5VTEwKLQotI2VuZGlmIC8qIEhFQlJFVyAqLwotCi0vKiBU cmFuc2xhdGlvbiBmdW5jdGlvbnMgZm9yIEdyZWVrIGNoYXJhY3RlciBzZXRzICovCi0KLSNpZmRl ZiBHUkVFSwotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhhc2VnKENIQVIgYykKLSNlbHNlCi14 YXNlZyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGFzZWcgKi8JCQkv KiBBU0NJSSB0byBFTE9UIDkyNyAqLwotICAgIGlmIChjICYgMHg4MCkKLSAgICAgIHJldHVybihV TkspOwotICAgIGlmIChjID4gOTYgJiYgYyA8IDEyMykgcmV0dXJuKGMgLSAzMik7Ci0gICAgZWxz ZSByZXR1cm4oYyk7Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGwxZWcoQ0hBUiBjKQot I2Vsc2UKLXhsMWVnKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bDFn ZSAqLwkJCS8qIExhdGluLTEgdG8gRUxPVCA5MjcgKi8KLSAgICByZXR1cm4oeGFzZWcoeGwxYXMo YykpKTsKLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14bDJsZyhDSEFSIGMpCi0jZWxzZQot eGwybGcoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsMmxnICovCQkJ LyogTGF0aW4tMSB0byBMYXRpbi9HcmVlayAqLwotICAgIGlmIChjIDwgMTYwKSByZXR1cm4oYyk7 Ci0gICAgZWxzZSBpZiAoYyA9PSAxNjAgfHwgYyA9PSAxNjggfHwgYyA9PSAxNzMgfHwgYyA9PSAx NzQpCi0gICAgICByZXR1cm4oYyk7Ci0gICAgZWxzZSByZXR1cm4oJz8nKTsKLX0KLQotQ0hBUgot I2lmZGVmIENLX0FOU0lDCi14bDFsZyhDSEFSIGMpCi0jZWxzZQoteGwxbGcoYykgQ0hBUiBjOwot I2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsMWxnICovCQkJLyogTGF0aW4tMSB0byBMYXRp bi9HcmVlayAqLwotICAgIGlmIChjIDwgMTYwKSByZXR1cm4oYyk7Ci0gICAgc3dpdGNoKGMpIHsK LSAgICAgIGNhc2UgMTYwOgkJCQkvKiBUaGVtc2VsdmVzICovCi0gICAgICBjYXNlIDE2NDoKLSAg ICAgIGNhc2UgMTY2OgotICAgICAgY2FzZSAxNjc6Ci0gICAgICBjYXNlIDE2ODoKLSAgICAgIGNh c2UgMTY5OgotICAgICAgY2FzZSAxNzE6Ci0gICAgICBjYXNlIDE3MjoKLSAgICAgIGNhc2UgMTcz OgotICAgICAgY2FzZSAxNzY6Ci0gICAgICBjYXNlIDE3NzoKLSAgICAgIGNhc2UgMTc4OgotICAg ICAgY2FzZSAxNzk6Ci0gICAgICBjYXNlIDE4MDoKLSAgICAgIGNhc2UgMTg3OgotICAgICAgY2Fz ZSAxODk6Ci0JcmV0dXJuKGMpOwotICAgICAgY2FzZSAxODE6CQkJCS8qIExvd2VyY2FzZSBtdSAq LwotCXJldHVybigyMzYpOwotICAgICAgZGVmYXVsdDoKLQlyZXR1cm4oVU5LKTsKLSAgICB9Ci19 Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteHcxbGcoQ0hBUiBjKQotI2Vsc2UKLXh3MWxnKGMp IENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4dzFsZyAqLwkJCQkvKiBDUDEy NTIgdG8gTGF0aW4vR3JlZWsgKi8KLSAgICByZXR1cm4oKGMgPCAxNjApID8geHcxYXMoYykgOiB4 bDFsZyhjKSk7Ci19Ci0KLQotI2lmZGVmIExBVElOMgotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14 bDJlZyhDSEFSIGMpCi0jZWxzZQoteGwyZWcoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lD ICovCi17IC8qIHhsMmVnICovCQkJCS8qIExhdGluLTIgdG8gRUxPVCA5MjcgKi8KLSAgICByZXR1 cm4oeGFzZWcoeGwyYXMoYykpKTsKLX0KLSNlbHNlCi0jZGVmaW5lIHhsMmVnIE5VTEwKLSNlbmRp ZiAvKiBMQVRJTjIgKi8KLQotI2lmbmRlZiBOT0NZUklMCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMK LXhsY2VnKENIQVIgYykKLSNlbHNlCi14bGNlZyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5T SUMgKi8KLXsgLyogeGxjZWcgKi8JCQkvKiBMYXRpbi9DeXJpbGxpYyB0byBFTE9UIDkyNyAqLwot ICAgIHJldHVybih4YXNlZyh4bGNhcyhjKSkpOwotfQotI2VuZGlmIC8qIE5PQ1lSSUwgKi8KLQot Q0hBUgotI2lmZGVmIENLX0FOU0lDCi14bGdhcyhDSEFSIGMpCi0jZWxzZQoteGxnYXMoYykgQ0hB UiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsZ2FzICovCQkJLyogTGF0aW4vR3Jl ZWsgdG8gQVNDSUkgKi8KLSAgICByZXR1cm4oIChjID4gMTI3KSA/ICc/JyA6IGMgKTsKLX0KLQot Q0hBUgotI2lmZGVmIENLX0FOU0lDCi14bGdsMShDSEFSIGMpCi0jZWxzZQoteGxnbDEoYykgQ0hB UiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsZ2wxICovCQkJLyogTGF0aW4vR3Jl ZWsgdG8gTGF0aW4tMSAqLwotICAgIGlmIChjID09IDIzNikKLSAgICAgIHJldHVybigxODEpOwot ICAgIGVsc2UKLSAgICAgIHJldHVybih4bDFsZyhjKSk7Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19B TlNJQwoteGxndzEoQ0hBUiBjKQotI2Vsc2UKLXhsZ3cxKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBD S19BTlNJQyAqLwoteyAvKiB4bGd3MSAqLwkJCS8qIExhdGluL0dyZWVrIHRvIExhdGluLTEgKi8K LSAgICBpZiAoYyA+IDEyNyAmJiBjIDwgMTYwKQotICAgICAgcmV0dXJuKCc/Jyk7Ci0gICAgcmV0 dXJuKHhsZ2wxKGMpKTsKLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14bGc2OShDSEFSIGMp Ci0jZWxzZQoteGxnNjkoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhs ZzY5ICovCQkJLyogTGF0aW4vR3JlZWsgdG8gQ1A4NjkgKi8KLSAgICByZXR1cm4oeWxnNjlbY10p OwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhsMTY5KENIQVIgYykKLSNlbHNlCi14bDE2 OShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGwxNjkgKi8JCQkvKiBM YXRpbi0xIHRvIENQODY5ICovCi0gICAgcmV0dXJuKHhsZzY5KHhsMWxnKGMpKSk7CS8qIFZpYSBM YXRpbi9HcmVlayAqLwotfQotCi1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhsZ2VnKENIQVIgYykK LSNlbHNlCi14bGdlZyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGxn ZWcgKi8JCQkvKiBMYXRpbi9HcmVlayB0byBFTE9UIDkyNyAqLwotICAgIHJldHVybih5bGdlZ1tj XSk7Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGVnYXMoQ0hBUiBjKQotI2Vsc2UKLXhl Z2FzKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4ZWdhcyAqLwkJCS8q IEVMT1QgOTI3IHRvIEFTQ0lJICovCi0gICAgaWYgKGMgJiAweDgwKQotICAgICAgcmV0dXJuKFVO Syk7Ci0gICAgcmV0dXJuKCAoYyA+IDk2ICYmIGMgPCAxMjMpID8gJz8nIDogYyApOwotfQotCi1D SEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXg2OWxnKENIQVIgYykKLSNlbHNlCi14NjlsZyhjKSBDSEFS IGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeDY5bGcgKi8JCQkvKiBDUDg2OSB0byBM YXRpbi9HcmVlayAqLwotICAgIHJldHVybih5NjlsZ1tjXSk7Ci19Ci0KLUNIQVIKLSNpZmRlZiBD S19BTlNJQwoteDY5YXMoQ0hBUiBjKQotI2Vsc2UKLXg2OWFzKGMpIENIQVIgYzsKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwoteyAvKiB4NjlhcyAqLwkJCS8qIENQODY5IHRvIEFTQ0lJICovCi0gICAg cmV0dXJuKCB4bGdhcyh4NjlsZyhjKSkgKTsKLX0KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14 NjlsMShDSEFSIGMpCi0jZWxzZQoteDY5bDEoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lD ICovCi17IC8qIHg2OWwxICovCQkJLyogQ1A4NjkgdG8gTGF0aW4tMSAqLwotICAgIHJldHVybigg eGxnbDEoeDY5bGcoYykpICk7Ci19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGVnbGcoQ0hB UiBjKQotI2Vsc2UKLXhlZ2xnKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAv KiB4ZWdsZyAqLwkJCS8qIEVMT1QgOTI3IHRvIExhdGluL0dyZWVrICovCi0gICAgcmV0dXJuKHll Z2xnW2NdKTsKLX0KLQotI2Vsc2UgLyogTm8gR3JlZWsgKi8KLQotI2RlZmluZSB4NjlhcyBOVUxM Ci0jZGVmaW5lIHg2OWwxIE5VTEwKLSNkZWZpbmUgeDY5bGcgTlVMTAotI2RlZmluZSB4YXNlZyBO VUxMCi0jZGVmaW5lIHhlZ2FzIE5VTEwKLSNkZWZpbmUgeGVnbGcgTlVMTAotI2RlZmluZSB4bDE2 OSBOVUxMCi0jZGVmaW5lIHhsMWVnIE5VTEwKLSNkZWZpbmUgeGwxbGcgTlVMTAotI2RlZmluZSB4 dzFsZyBOVUxMCi0jZGVmaW5lIHhsMmdlIE5VTEwKLSNkZWZpbmUgeGwybGcgTlVMTAotI2RlZmlu ZSB4bGNnZSBOVUxMCi0jZGVmaW5lIHhsZzY5IE5VTEwKLSNkZWZpbmUgeGxnYXMgTlVMTAotI2Rl ZmluZSB4bGdlZyBOVUxMCi0jZGVmaW5lIHhsZ2dlIE5VTEwKLSNkZWZpbmUgeGxnbDEgTlVMTAot I2RlZmluZSB4bGd3MSBOVUxMCi0KLSNlbmRpZiAvKiBHUkVFSyAqLwotCi0KLS8qIFRyYW5zbGF0 aW9uIGZ1bmN0aW9ucyBmb3IgSmFwYW5lc2UgS2FuamkgY2hhcmFjdGVyIHNldHMgKi8KLQotI2lm ZGVmIEtBTkpJCi0vKgotICBUcmFuc2xhdGUgS2FuamkgVHJhbnNmZXIgQ2hhcmFjdGVyIFNldCAo RVVDKSB0byBsb2NhbCBmaWxlIGNoYXJhY3RlciBzZXQsCi0gIGNvbnRyaWJ1dGVkIGJ5IERyLiBI aXJvZnVtaSBGdWppaSwgSmFwYW4gSGlnaCBFbmVyZ3kgUmVzZWFyY2ggTGFib3JhdG9yeQotICAo S0VLKSwgVG9reW8sIEphcGFuLgotCi0gIGEgaXMgYSBieXRlIHRvIGJlIHRyYW5zbGF0ZWQsIHdo aWNoIG1heSBiZSBhIHNpbmdsZS1ieXRlIGNoYXJhY3RlciwKLSAgdGhlIEthdGFrYW5hIHByZWZp eCwgdGhlIGZpcnN0IGJ5dGUgb2YgYSB0d28tYnl0ZSBLYW5qaSBjaGFyYWN0ZXIsIG9yIHRoZQot ICBzZWNvbmQgYnl0ZSBvZiAyLWJ5dGUgS2FuamkgY2hhcmFjdGVyLgotCi0gIGZuIGlzIHRoZSBv dXRwdXQgZnVuY3Rpb24uCi0KLSAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUu Ci0qLwotCi1fUFJPVE9UWVAoc3RhdGljIGludCBqcG54YXMsIChpbnQsIGludFtdKSApOwotX1BS T1RPVFlQKHN0YXRpYyBpbnQganBueGt0LCAoaW50LCBpbnRbXSkgKTsKLV9QUk9UT1RZUChzdGF0 aWMgaW50IGpwbnhrbiwgKGludFtdLCBpbnRbXSkgKTsKLQotc3RhdGljIGludCBqcG5jbnQ7CQkJ LyogQnl0ZSBjb3VudCBmb3IgSmFwYW5lc2UgKi8KLXN0YXRpYyBpbnQganBubHN0OwkJCS8qIExh c3Qgc3RhdHVzIChmb3IgSklTNykgKi8KLQotc3RhdGljIGludAotanBueGFzKGEsIG9idWYpIGlu dCBhOyBpbnQgb2J1ZltdOyB7IC8qIFRyYW5zbGF0ZSBBU0NJSSB0byBsb2NhbCBmaWxlIGNvZGUg Ki8KLSAgICBpbnQgcjsKLQotICAgIHIgPSAwOwotICAgIGlmIChmY2hhcnNldCA9PSBGQ19KSVM3 KSB7Ci0Jc3dpdGNoIChqcG5sc3QpIHsKLQkgIGNhc2UgMToKLQkgICAgb2J1ZlswXSA9IDB4MGY7 Ci0JICAgIG9idWZbMV0gPSBhOwotCSAgICByID0gMjsKLQkgICAgYnJlYWs7Ci0JICBjYXNlIDI6 Ci0JICAgIG9idWZbMF0gPSAweDFiOwotCSAgICBvYnVmWzFdID0gMHgyODsKLQkgICAgb2J1Zlsy XSA9IDB4NGE7Ci0JICAgIG9idWZbM10gPSBhOwotCSAgICByID0gNDsKLQkgICAgYnJlYWs7Ci0J ICBkZWZhdWx0OgotCSAgICBvYnVmWzBdID0gYTsKLQkgICAgciA9IDE7Ci0JICAgIGJyZWFrOwot CX0KLSAgICB9IGVsc2UgewotCW9idWZbMF0gPSBhOwotCXIgPSAxOwotICAgIH0KLSAgICByZXR1 cm4ocik7Ci19Ci0KLXN0YXRpYyBpbnQKLWpwbnhrdChhLCBvYnVmKSBpbnQgYTsgaW50IG9idWZb XTsgewotLyogVHJhbnNsYXRlIEpJUyBYIDIwMSBLYXRha2FuYSB0byBsb2NhbCBjb2RlICovCi0K LSAgICBpbnQgcjsKLQotICAgIHIgPSAwOwotICAgIGlmIChmY2hhcnNldCA9PSBGQ19KSVM3KSB7 Ci0Jc3dpdGNoIChqcG5sc3QpIHsKLQkgIGNhc2UgMjoJCQkJLyogZnJvbSBLYW5qaSAqLwotCSAg ICBvYnVmW3IrK10gPSAweDFiOwotCSAgICBvYnVmW3IrK10gPSAweDI4OwotCSAgICBvYnVmW3Ir K10gPSAweDRhOwotCSAgY2FzZSAwOgkJCQkvKiBmcm9tIFJvbWFuICovCi0JICAgIG9idWZbcisr XSA9IDB4MGU7Ci0JICBkZWZhdWx0OgotCSAgICBvYnVmW3IrK10gPSAoYSAmIDB4N2YpOwotCSAg YnJlYWs7Ci0JfQotICAgIH0gZWxzZSB7Ci0JaWYgKGZjaGFyc2V0ID09IEZDX0pFVUMpCi0JICBv YnVmW3IrK10gPSAweDhlOwotCW9idWZbcisrXSA9IChhIHwgMHg4MCk7Ci0gICAgfQotICAgIHJl dHVybihyKTsKLX0KLQotc3RhdGljIGludAotanBueGtuKGlidWYsIG9idWYpIGludCBpYnVmW10s IG9idWZbXTsgewotICAgIC8qIFRyYW5zbGF0ZSBKSVMgWCAwMjA4IEthbmppIHRvIGxvY2FsIGNv ZGUgKi8KLSAgICBpbnQgYzEsIGMyOwotICAgIGludCByOwotCi0gICAgYzEgPSBpYnVmWzBdICYg MHg3ZjsKLSAgICBjMiA9IGlidWZbMV0gJiAweDdmOwotCi0gICAgaWYgKGZjaGFyc2V0ID09IEZD X1NISklTKSB7Ci0JaWYgKGMxICYgMSkKLQkgIGMyICs9IDB4MWY7Ci0JZWxzZQotCSAgYzIgKz0g MHg3ZDsKLQotICAgICAgICBpZiAoYzIgPj0gMHg3ZikgYzIrKzsKLQotICAgICAgICBjMSA9ICgo YzEgLSAweDIxKSA+PiAxKSArIDB4ODE7Ci0gICAgICAgIGlmIChjMSA+IDB4OWYpIGMxICs9IDB4 NDA7Ci0KLSAgICAgICAgb2J1ZlswXSA9IGMxOwotICAgICAgICBvYnVmWzFdID0gYzI7Ci0gICAg ICAgIHIgPSAyOwotICAgIH0gZWxzZSBpZiAoZmNoYXJzZXQgPT0gRkNfSklTNykgewotICAgICAg ICByID0gMDsKLSAgICAgICAgc3dpdGNoIChqcG5sc3QpIHsKLSAgCSAgY2FzZSAxOgotCSAgICBv YnVmW3IrK10gPSAweDBmOyAvKiBGcm9tIEthdGFrYW5hICovCi0gIAkgIGNhc2UgMDoKLQkgICAg b2J1ZltyKytdID0gMHgxYjsKLQkgICAgb2J1ZltyKytdID0gMHgyNDsKLQkgICAgb2J1ZltyKytd ID0gMHg0MjsKLQkgIGRlZmF1bHQ6Ci0JICAgIG9idWZbcisrXSA9IGMxOwotCSAgICBvYnVmW3Ir K10gPSBjMjsKLQkgICAgYnJlYWs7Ci0JfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIG9idWZbMF0g PSAoYzEgfCAweDgwKTsKLSAgICAgICAgb2J1ZlsxXSA9IChjMiB8IDB4ODApOwotICAgICAgICBy ID0gMjsKLSAgICB9Ci0gICAgcmV0dXJuKHIpOwotfQotCi1pbnQKLXhrYW5qZigpIHsKLS8qIElu aXRpYWxpemUgcGFyYW1ldGVycyBmb3IgeGthbmppICovCi0vKiBUaGlzIGZ1bmN0aW9uIHNob3Vs ZCBiZSBjYWxsZWQgd2hlbiBGL1gtcGFja2V0IGlzIHJlY2VpdmVkICovCi0gICAganBuY250ID0g anBubHN0ID0gMDsKLSAgICByZXR1cm4oMCk7Ci19Ci0KLWludAotI2lmZGVmIENLX0FOU0lDCi14 a2FuanooaW50ICgqZm4pKGNoYXIpKQotI2Vsc2UKLXhrYW5qeihmbikgaW50ICgqZm4pKCk7Ci0j ZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGthbmp6ICovCi0vKgotICBUZXJtaW5hdGUgeGth bmppCi0gIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2hlbiBaLXBhY2tldCBpcyByZWNl aXZlZAotICAoYmVmb3JlIGNsb3NpbmcgdGhlIGZpbGUpLgotKi8KLSAgICBzdGF0aWMgaW50IG9i dWZbNl07Ci0gICAgaW50IHIsIGksIGM7Ci0KLSAgICBpZiAoZmNoYXJzZXQgPT0gRkNfSklTNykg ewotICAgICAgICBjID0gJ0EnOwkJCS8qIER1bW15IFJvbWFuIGNoYXJhY3RlciAqLwotICAgICAg ICByID0ganBueGFzKGMsIG9idWYpIC0gMTsJLyogLTEgcmVtb3ZlcyBEdW1teSBjaGFyYWN0ZXIg Ki8KLSAgICAgICAgaWYgKHIgPiAwKSB7Ci0JICAgIGZvciAoaSA9IDA7IGkgPCByOyBpKyspCi0J ICAgICAgaWYgKCgoKmZuKSgoY2hhcikgb2J1ZltpXSkpIDwgMCkKLQkJcmV0dXJuKC0xKTsKLQl9 Ci0gICAgfQotICAgIHJldHVybigwKTsKLX0KLQotaW50Ci0jaWZkZWYgQ0tfQU5TSUMKLXhrYW5q aShpbnQgYSwgaW50ICgqZm4pKGNoYXIpKQotI2Vsc2UKLXhrYW5qaShhLCBmbikgaW50IGE7IGlu dCAoKmZuKSgpOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhrYW5qaSAqLwotICAgIHN0 YXRpYyBpbnQgeGJ1ZlsyXTsKLSAgICBzdGF0aWMgaW50IG9idWZbOF07Ci0KLSAgICBpbnQgaSwg cjsKLSAgICBpbnQgYzc7Ci0gICAgaW50IHN0YXRlPTA7Ci0KLSAgICByID0gMDsKLSAgICBpZiAo anBuY250ID09IDApIHsKLQkvKiAxc3QgYnl0ZSAqLwotCWlmICgoYSAmIDB4ODApID09IDApIHsK LQkgICAgLyogOHRoIGJpdCBpcyAwLCBpLmUuLCBzaW5nbGUtYnl0ZSBjb2RlICovCi0JICAgIHIg PSBqcG54YXMoYSwgb2J1Zik7Ci0JICAgIHN0YXRlID0gMDsKLQl9IGVsc2UgewotCSAgICAvKiA4 dGggYml0IGlzIDEsIGNoZWNrIHRoZSByYW5nZSAqLwotCSAgICBjNyA9IGEgJiAweDdmOwotCSAg ICBpZiAoKChjNyA+IDB4MjApICYmIChjNyA8IDB4N2YpKSB8fCAoYzcgPT0gMHgwZSkpIHsKLQkg ICAgICAgIC8qIGRvdWJsZSBieXRlIGNvZGUgKi8KLQkgICAgICAgIHhidWZbanBuY250KytdID0g YTsKLQkgICAgfSBlbHNlIHsKLQkgICAgICAgIC8qIHNpbmdsZSBieXRlIGNvZGUgKi8KLQkgICAg ICAgIHIgPSBqcG54YXMoYSwgb2J1Zik7Ci0JICAgICAgICBzdGF0ZSA9IDA7Ci0JICAgIH0KLQl9 Ci0gICAgfSBlbHNlIHsKLQkvKiBub3QgdGhlIDFzdCBieXRlICovCi0JeGJ1ZltqcG5jbnQrK10g PSBhOwotCWlmICh4YnVmWzBdID09IDB4OGUpIHsKLQkgICAgciA9IGpwbnhrdCh4YnVmWzFdLCBv YnVmKTsKLQkgICAgc3RhdGUgPSAxOwotCX0gZWxzZSB7Ci0JICAgIHIgPSBqcG54a24oeGJ1Ziwg b2J1Zik7Ci0JICAgIHN0YXRlID0gMjsKLQl9Ci0gICAgfQotICAgIGlmIChyID4gMCkgewotICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgcjsgaSsrICkKLQkgIGlmICgoKCpmbikoKGNoYXIpIG9idWZb aV0pKSA8IDApCi0JICAgIHJldHVybigtMSk7Ci0gICAgICAgIGpwbmxzdCA9IHN0YXRlOwotICAg ICAgICBqcG5jbnQgPSAwOwotICAgIH0KLSAgICByZXR1cm4oMCk7Ci19Ci0KLS8qCi0gIEZ1bmN0 aW9uIGZvciB0cmFuc2xhdGluZyBmcm9tIEphcGFuZXNlIGZpbGUgY2hhcmFjdGVyIHNldAotICB0 byBKYXBhbmVzZSBFVUMgdHJhbnNmZXIgY2hhcmFjdGVyIHNldC4KLSAgUmV0dXJucyBhIHBvaW50 ZXIgdG8gYSBzdHJpbmcgY29udGFpbmluZyAwLCAxLCBvciAyIGJ5dGVzLgotKi8KLQotLyogemth bmppICovCi1zdGF0aWMgaW50IGpwbnN0ejsJCQkvKiBzdGF0dXMgZm9yIEpJUy03ICovCi1zdGF0 aWMgaW50IGpwbnBuZDsJCQkvKiBudW1iZXIgb2YgcGVuZGluZyBieXRlcyAqLwotc3RhdGljIGlu dCBqcG5wbnQ7CQkJLyogcGVuZGluZyBidWZmZXIgaW5kZXggKi8KLXN0YXRpYyBpbnQganBucGJm WzhdOwkJCS8qIHBlbmRpbmcgYnVmZmVyICovCi0KLS8qIFRoZXJlIGlzIHNvbWUgZHVwbGljYXRp b24gaGVyZSBiZXR3ZWVuIHRoZSBvbGQgYW5kIG5ldyBKSVMtNyBwYXJzZXJzICovCi0vKiB0byBi ZSBjbGVhbmVkIHVwIGxhdGVyLi4uICovCi0KLVZPSUQKLWo3aW5pdCgpIHsJCQkJLyogSW5pdGlh bGl6ZSBKSVMtNyBwYXJzZXIgKi8KLSAgICBqcG5zdHogPSAwOwotICAgIGpwbnBuZCA9IDA7Ci0g ICAganBucG50ID0gMDsKLX0KLQotaW50Ci1nZXRqNygpIHsJCQkJLyogUmVhZHMgSklTLTcgcmV0 dXJucyBuZXh0IEVVQyBieXRlICovCi0gICAgaW50IHg7Ci0KLSAgICBpZiAoanBucG5kID4gMCkg ewkJCS8qIElmIHNvbWV0aGluZyBpcyBwZW5kaW5nICovCi0JeCA9ICh1bnNpZ25lZCkganBucGJm W2pwbnBudCsrXTsgLyogR2V0IGl0ICovCi0JanBucG5kLS07Ci0JaWYgKGpwbnBuZCA8IDApIGpw bnBuZCA9IDA7Ci0JcmV0dXJuKCh1bnNpZ25lZCl4KTsKLSAgICB9Ci0gICAganBucG50ID0gMDsK LQotICAgIGlmICgoeCA9IHptaW5jaGFyKCkpIDwgMCkgcmV0dXJuKHgpOwotICAgIHdoaWxlIChq cG5wbmQgPT0gMCkgewkJLyogV2hpbGUgc29tZXRoaW5nIGlzIHBlbmRpbmcuLi4gKi8KLQlpZiAo KHggPiAweDIwKSAmJiAoeCA8IDB4N2YpKSB7CS8qIDctYml0IGdyYXBoaWMgY2hhcmFjdGVyICov Ci0JICAgIHN3aXRjaCAoanBuc3R6KSB7Ci0JICAgICAgY2FzZSAxOgkJCSAvKiBLYXRha2FuYSAq LwotI2lmZGVmIENPTU1FTlQKLQkJLyogVGhpcyBjYW4ndCBiZSByaWdodC4uLiAqLwotCQlqcG5w YmZbanBucG5kKytdID0gMHg4MDsgLyogSW5zZXJ0IGZsYWcgKE5PVCBTUzI/Pz8pICovCi0jZWxz ZQotCQlqcG5wYmZbanBucG5kKytdID0gMHg4ZTsgLyogSW5zZXJ0IFNTMiAqLwotI2VuZGlmIC8q IENPTU1FTlQgKi8KLQkJanBucGJmW2pwbnBuZCsrXSA9ICh4IHwgMHg4MCk7IC8qIEluc2VydCBL YW5hICsgOHRoIGJpdCAqLwotCQlicmVhazsKLQkgICAgICBjYXNlIDI6CQkJLyogS2FuamkgKi8K LQkJanBucGJmW2pwbnBuZCsrXSA9ICh4IHwgMHg4MCk7IC8qIEdldCBhbm90aGVyIGJ5dGUgKi8K LQkJaWYgKCh4ID0gem1pbmNoYXIoKSkgPCAwKSByZXR1cm4oeCk7Ci0JCWpwbnBiZltqcG5wbmQr K10gPSAoeCB8IDB4ODApOwotCQlicmVhazsKLQkgICAgICBkZWZhdWx0OgkJCS8qIEFTQ0lJIC8g SklTIFJvbWFuICovCi0JCWpwbnBiZltqcG5wbmQrK10gPSB4OwotCQlicmVhazsKLQkgICAgfQot CX0gZWxzZSBpZiAoeCA9PSAweDBlKSB7CQkvKiBeTiA9IFNPICovCi0JICAgIGpwbnN0eiA9IDE7 CQkJLyogS2F0YWthbmEgKi8KLQkgICAgaWYgKCh4ID0gem1pbmNoYXIoKSkgPCAwKSByZXR1cm4o eCk7Ci0JfSBlbHNlIGlmICh4ID09IDB4MGYpIHsJCS8qIF5PID0gU0kgKi8KLQkgICAganBuc3R6 ID0gMDsJCQkvKiBBU0NJSSAvIEpJUyBSb21hbiAqLwotCSAgICBpZiAoKHggPSB6bWluY2hhcigp KSA8IDApIHJldHVybih4KTsKLQl9IGVsc2UgaWYgKHggPT0gMHgxYikgewkJLyogRXNjYXBlICov Ci0JICAgIGpwbnBiZltqcG5wbmQrK10gPSB4OwkvKiBTYXZlIGluIGJ1ZmZlciAqLwotCSAgICBp ZiAoKHggPSB6bWluY2hhcigpKSA8IDApIHJldHVybih4KTsKLQkgICAganBucGJmW2pwbnBuZCsr XSA9IHg7CS8qIFNhdmUgaW4gYnVmZmVyICovCi0JICAgIGlmICh4ID09ICckJykgewkJLyogPEVT Qz4kICovCi0JCWlmICgoeCA9IHptaW5jaGFyKCkpIDwgMCkgcmV0dXJuKHgpOwotCQlqcG5wYmZb anBucG5kKytdID0geDsKLQkJaWYgKCh4ID09ICdAJykgfHwgKHggPT0gJ0InKSkgewkvKiBLYW5q aSAqLwotCQkgICAganBuc3R6ID0gMjsKLQkJICAgIGpwbnBudCA9IGpwbnBuZCA9IDA7Ci0JCSAg ICBpZiAoKHggPSB6bWluY2hhcigpKSA8IDApIHJldHVybih4KTsKLQkJfQotCSAgICB9IGVsc2Ug aWYgKHggPT0gJygnKSB7CS8qIDxFU0M+KCA9PSA5NC1ieXRlIHNpbmdsZS1ieXRlIHNldCAqLwot CQlpZiAoKHggPSB6bWluY2hhcigpKSA8IDApIHJldHVybih4KTsKLQkJanBucGJmW2pwbnBuZCsr XSA9IHg7Ci0JCWlmICgoeCA9PSAnQicpIHx8ICh4ID09ICdKJykpIHsJLyogQVNDSUkgb3IgSklT IFJvbWFuICovCi0JCSAgICBqcG5zdHogPSAwOwkJICAgICAgICAvKiBTZXQgc3RhdGUgKi8KLQkJ ICAgIGpwbnBudCA9IGpwbnBuZCA9IDA7ICAgICAgICAvKiBSZXNldCBwb2ludGVycyAqLwotCQkg ICAgaWYgKCh4ID0gem1pbmNoYXIoKSkgPCAwKSByZXR1cm4oeCk7Ci0JCX0KLQkgICAgfSBlbHNl IGlmICh4ID09IDB4MWIpIHsJLyogPEVTQz48RVNDPiAqLwotCQlqcG5wbnQgPSBqcG5wbmQgPSAw OwkvKiBSZXNldCBwb2ludGVycywgc3RheSBpbiBzdGF0ZSAqLwotCQlpZiAoKHggPSB6bWluY2hh cigpKSA8IDApIHJldHVybih4KTsKLQkgICAgfQotCX0gZWxzZSB7CQkJLyogTm90IDxFU0M+IC0g anVzdCBzYXZlIGl0ICovCi0JICAgIGpwbnBiZltqcG5wbmQrK10gPSB4OwotCX0KLSAgICB9Ci0g ICAganBucG50ID0gMDsKLSAgICB4ID0gKHVuc2lnbmVkKWpwbnBiZltqcG5wbnQrK107Ci0gICAg anBucG5kLS07Ci0gICAgcmV0dXJuKCh1bnNpZ25lZCl4KTsKLX0KLQotVVNIT1JUCi0jaWZkZWYg Q0tfQU5TSUMKLWV1X3RvX3NqKFVTSE9SVCBldSkJCQkvKiBFVUMtSlAgdG8gU2hpZnQtSklTICov Ci0jZWxzZQotZXVfdG9fc2ooZXUpIFVTSE9SVCBldTsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwot ewotICAgIGludCBjMSwgYzI7Ci0gICAgdW5pb24gY2tfc2hvcnQgamNvZGUsc2NvZGU7Ci0KLSAg ICBqY29kZS54X3Nob3J0ID0gZXU7Ci0gICAgYzEgPSAoamNvZGUueF9jaGFyW2J5dGVvcmRlcl0g JiAweDdmKTsKLSAgICBjMiA9IChqY29kZS54X2NoYXJbMS1ieXRlb3JkZXJdICYgMHg3Zik7Ci0K LSAgICBpZiAoYzEgJiAxKQotICAgICAgYzIgKz0gMHgxZjsKLSAgICBlbHNlCi0gICAgICBjMiAr PSAweDdkOwotICAgIGlmIChjMiA+PSAweDdmKQotICAgICAgYzIrKzsKLSAgICBjMSA9ICgoYzEg LSAweDIxKSA+PiAxKSArIDB4ODE7Ci0gICAgaWYgKGMxID4gMHg5ZikKLSAgICAgIGMxICs9IDB4 NDA7Ci0KLSAgICBzY29kZS54X2NoYXJbYnl0ZW9yZGVyXSA9IGMxOwotICAgIHNjb2RlLnhfY2hh clsxLWJ5dGVvcmRlcl0gPSBjMjsKLSAgICByZXR1cm4oc2NvZGUueF9zaG9ydCk7Ci19Ci0KLQot VVNIT1JUCi0jaWZkZWYgQ0tfQU5TSUMKLXNqX3RvX2V1KFVTSE9SVCBzaikJCQkvKiBTaGlmdC1K SVMgdG8gRVVDLUpQICovCi0jZWxzZQotc2pfdG9fZXUoc2opIFVTSE9SVCBzajsKLSNlbmRpZiAv KiBDS19BTlNJQyAqLwotewotICAgIHVuaW9uIGNrX3Nob3J0IGpjb2RlLCBzY29kZTsKLSAgICBp bnQgYzAsIGMxOwotCi0gICAgc2NvZGUueF9zaG9ydCA9IHNqOwotICAgIGMwID0gc2NvZGUueF9j aGFyW2J5dGVvcmRlcl07CS8qIExlZnQgKGhpIG9yZGVyKSBieXRlICovCi0gICAgYzEgPSBzY29k ZS54X2NoYXJbMS1ieXRlb3JkZXJdOwkvKiBSaWdodCAobG8gb3JkZXIpIGJ5dGUgKi8KLQotICAg IGlmICgoKGMwID49IDB4ODEpICYmIChjMCA8PSAweDlmKSkgfHwgLyogSGlnaCBvcmRlciBieXRl IGhhcyA4dGggYml0IHNldCAqLwotICAgICAgICAoKGMwID49IDB4ZTApICYmIChjMCA8PSAweGZj KSkpIHsgLyogS2FuamkgKi8KLQlpZiAoYzAgPD0gMHg5ZikJCQkgIC8qIFR3byBieXRlcyBpbiAq LwotCSAgYzAgLT0gMHg3MTsJCQkgIC8qIERvIHRoZSBzaGlmdGluZy4uLiAqLwotCWVsc2UKLQkg IGMwIC09IDB4YjE7Ci0JYzAgPSBjMCAqIDIgKyAxOwotCWlmIChjMSA+IDB4N2YpIGMxIC09IDE7 Ci0JaWYgKGMxID49IDB4OWUpIHsKLQkgICAgYzEgLT0gMHg3ZDsKLQkgICAgYzAgKz0gMTsKLQl9 IGVsc2UgewotCSAgICBjMSAtPSAweDFmOwotCX0KLQlqY29kZS54X2NoYXJbYnl0ZW9yZGVyXSA9 IChjMCB8IDB4ODApOyAvKiBUd28gYnl0ZXMgb3V0ICovCi0JamNvZGUueF9jaGFyWzEtYnl0ZW9y ZGVyXSA9IChjMSB8IDB4ODApOwotCi0gICAgfSBlbHNlIGlmIChjMCA9PSAwKSB7CQkvKiBTaW5n bGUgYnl0ZSAqLwotCWlmIChjMSA+PSAweGExICYmIGMxIDw9IDB4ZGYpIHsJLyogS2F0YWthbmEg Ki8KLQkgICAgamNvZGUueF9jaGFyW2J5dGVvcmRlcl0gPSAweDhlOyAvKiBTUzIgKi8KLQkgICAg amNvZGUueF9jaGFyWzEtYnl0ZW9yZGVyXSA9IGMxOyAvKiBLYW5hIGNvZGUgKi8KLQl9IGVsc2Ug ewkJCS8qIEFTQ0lJIG9yIEMwICovCi0JICAgIGpjb2RlLnhfc2hvcnQgPSBjMTsKLQl9Ci0gICAg fSBlbHNlIHsJCQkJLyogU29tZXRoaW5nIGJhZCAqLwotCWRlYnVnKEYwMDEsInNqX3RvX2V1IGJh ZCBzaiIsIiIsc2opOwotCWpjb2RlLnhfc2hvcnQgPSAweGZmZmY7Ci0gICAgfQotICAgIHJldHVy bihqY29kZS54X3Nob3J0KTsKLX0KLQotaW50Ci16a2FuamYoKSB7CQkJCS8qIEluaXRpYWxpemUg Ki8KLSAgICBqcG5zdHogPSBqcG5wbmQgPSBqcG5wbnQgPSAwOwotICAgIHJldHVybigwKTsKLX0K LQotaW50Ci16a2FuanooKSB7Ci0gICAgcmV0dXJuKDApOwotfQotCi1pbnQKLSNpZmRlZiBDS19B TlNJQwotemthbmppKGludCAoKmZuKSh2b2lkKSkKLSNlbHNlCi16a2FuamkoZm4pIGludCAoKmZu KSgpOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHprYW5qaSAqLwotICAgIC8qIFJlYWQg SmFwYW5lc2UgbG9jYWwgY29kZSBhbmQgdHJhbnNsYXRlIHRvIEphcGFuZXNlIEVVQyAqLwotICAg IGludCBhOwotICAgIGludCBzY1szXTsKLQotICAgIC8qIE5vIHBlbmRpbmcgY2hhcmFjdGVycyAq LwotICAgIGlmIChmY2hhcnNldCA9PSBGQ19TSEpJUykgewkJLyogVHJhbnNsYXRpbmcgZnJvbSBT aGlmdC1KSVMgKi8KLSAgICAgICAgaWYgKGpwbnBuZCkgewotICAgICAgICAgICAganBucG5kLS07 Ci0gICAgICAgICAgICByZXR1cm4oanBucGJmW2pwbnBudCsrXSk7Ci0gICAgICAgIH0KLSAgICAg ICAgYSA9ICgqZm4pKCk7Ci0JanBucG5kID0ganBucG50ID0gMDsKLQlpZiAoKChhID49IDB4ODEp ICYmIChhIDw9IDB4OWYpKSB8fAotCSAgICAoKGEgPj0gMHhlMCkgJiYgKGEgPD0gMHhmYykpKSB7 IC8qIDItYnl0ZSBLYW5qaSBjb2RlICovCi0JICAgIHNjWzBdID0gYTsKLQkgICAgaWYgKChzY1sx XSA9ICgqZm4pKCkpIDwgMCkJLyogR2V0IHNlY29uZCBieXRlICovCi0JICAgICAgcmV0dXJuKHNj WzFdKTsKLQkgICAgaWYgKHNjWzBdIDw9IDB4OWYpCi0JICAgICAgc2NbMF0gLT0gMHg3MTsKLQkg ICAgZWxzZQotCSAgICAgIHNjWzBdIC09IDB4YjE7Ci0JICAgIHNjWzBdID0gc2NbMF0gKiAyICsg MTsKLQkgICAgaWYgKHNjWzFdID4gMHg3ZikKLQkgICAgICBzY1sxXS0tOwotCSAgICBpZiAoc2Nb MV0gPj0gMHg5ZSkgewotCSAgICAgICAgc2NbMV0gLT0gMHg3ZDsKLQkgICAgICAgIHNjWzBdKys7 Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgICBzY1sxXSAtPSAweDFmOwotCSAgICB9Ci0JICAgIGEg PSAoc2NbMF0gfCAweDgwKTsKLQkgICAganBucGJmWzBdID0gKHNjWzFdIHwgMHg4MCk7Ci0JICAg IGpwbnBuZCA9IDE7Ci0JICAgIGpwbnBudCA9IDA7Ci0JfSBlbHNlIGlmICgoYSA+PSAweGExKSAm JiAoYSA8PSAweGRmKSkgeyAvKiBLYXRha2FuYSAqLwotCSAgICBqcG5wYmZbMF0gPSBhOwotCSAg ICBqcG5wbmQgPSAxOwotCSAgICBqcG5wbnQgPSAwOwotCSAgICBhID0gMHg4ZTsKLQl9Ci0JcmV0 dXJuKGEpOwotICAgIH0gZWxzZSBpZiAoZmNoYXJzZXQgPT0gRkNfSklTNyApIHsJLyogNy1iaXQg SklTIFggMDIwOCAqLwotICAgICAgICBpZiAoanBucG5kKSB7Ci0gICAgICAgICAgICBhID0ganBu cGJmW2pwbnBudCsrXTsKLQkgICAganBucG5kLS07Ci0gICAgICAgICAgICByZXR1cm4oYSk7Ci0g ICAgICAgIH0KLSAgICAgICAganBucG50ID0gMDsKLSAgICAgICAgaWYgKChhID0gKCpmbikoKSkg PCAwKQotCSAgcmV0dXJuKGEpOwotICAgICAgICB3aGlsZSAoanBucG5kID09IDApIHsKLSAgICAg ICAgICAgIGlmICgoYSA+IDB4MjApICYmIChhIDwgMHg3ZikpIHsKLSAgICAgICAgICAgICAgICBz d2l0Y2ggKGpwbnN0eikgewotCQkgIGNhc2UgMToKLQkJICAgIGpwbnBiZltqcG5wbmQrK10gPSAw eDgwOyAvKiBLYXRha2FuYSAqLwotCQkgICAganBucGJmW2pwbnBuZCsrXSA9IChhIHwgMHg4MCk7 Ci0JCSAgICBicmVhazsKLQkJICBjYXNlIDI6Ci0JCSAgICBqcG5wYmZbanBucG5kKytdID0gKGEg fCAweDgwKTsgLyogS2FuamkgKi8KLQkJICAgIGlmICgoYSA9ICgqZm4pKCkpIDwgMCkKLQkJICAg ICAgcmV0dXJuKGEpOwotCQkgICAganBucGJmW2pwbnBuZCsrXSA9IChhIHwgMHg4MCk7Ci0JCSAg ICBicmVhazsKLQkJICBkZWZhdWx0OgotCQkgICAganBucGJmW2pwbnBuZCsrXSA9IGE7IC8qIFNp bmdsZSBieXRlICovCi0JCSAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICB9IGVsc2UgaWYgKGEgPT0gMHgwZSkgewotICAgICAgICAgICAgICAgIGpwbnN0eiA9IDE7Ci0g ICAgICAgICAgICAgICAgaWYgKChhID0gKCpmbikoKSkgPCAwKQotCQkgIHJldHVybihhKTsKLSAg ICAgICAgICAgIH0gZWxzZSBpZiAoYSA9PSAweDBmKSB7Ci0gICAgICAgICAgICAgICAganBuc3R6 ID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoKGEgPSAoKmZuKSgpKSA8IDApCi0JCSAgcmV0dXJu KGEpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChhID09IDB4MWIpIHsKLSAgICAgICAgICAgICAg ICBqcG5wYmZbanBucG5kKytdID0gYTsJLyogRXNjYXBlICovCi0gICAgICAgICAgICAgICAgaWYg KChhID0gKCpmbikoKSkgPCAwKQotCQkgIHJldHVybihhKTsKLSAgICAgICAgICAgICAgICBqcG5w YmZbanBucG5kKytdID0gYTsKLSAgICAgICAgICAgICAgICBpZiAoYSA9PSAnJCcpIHsKLSAgICAg ICAgICAgICAgICAgICAgaWYgKChhID0gKCpmbikoKSkgPCAwKQotCQkgICAgICByZXR1cm4oYSk7 Ci0gICAgICAgICAgICAgICAgICAgIGpwbnBiZltqcG5wbmQrK10gPSBhOwotICAgICAgICAgICAg ICAgICAgICBpZiAoKGEgPT0gJ0AnKSB8fCAoYSA9PSAnQicpKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICBqcG5zdHogPSAyOwotCQkJanBucG50ID0ganBucG5kID0gMDsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGlmICgoYSA9ICgqZm4pKCkpIDwgMCkKLQkJCSAgcmV0dXJuKGEpOwotICAg ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhID09ICcoJykg ewotICAgICAgICAgICAgICAgICAgICBpZiAoKGEgPSAoKmZuKSgpKSA8IDApCi0JCSAgICAgIHJl dHVybihhKTsKLSAgICAgICAgICAgICAgICAgICAganBucGJmW2pwbnBuZCsrXSA9IGE7Ci0gICAg ICAgICAgICAgICAgICAgIGlmICgoYSA9PSAnQicpIHx8IChhID09ICdKJykpIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgIGpwbnN0eiA9IDA7Ci0JCQlqcG5wbnQgPSBqcG5wbmQgPSAwOwotICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKChhID0gKCpmbikoKSkgPCAwKQotCQkJICByZXR1cm4o YSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGEg PT0gMHgxYikgewotICAgICAgICAgICAgICAgICAgICBqcG5wbnQgPSBqcG5wbmQgPSAwOwotICAg ICAgICAgICAgICAgICAgICBpZiAoKGEgPSAoKmZuKSgpKSA8IDApCi0JCSAgICAgIHJldHVybihh KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg ICAgIGpwbnBiZltqcG5wbmQrK10gPSBhOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg ICAgIGpwbnBudCA9IDA7Ci0gICAgICAgIGEgPSBqcG5wYmZbanBucG50KytdOwotCWpwbnBuZC0t OwotICAgICAgICByZXR1cm4oYSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYSA9ICgqZm4pKCk7 Ci0gICAgICAgIHJldHVybihhKTsKLSAgICB9Ci19Ci0jZW5kaWYgLyogS0FOSkkgKi8KLQotLyog RXVybyBmdW5jdGlvbnMgKi8KLQotI2lmZGVmIExBVElOMgotQ0hBUgotI2lmZGVmIENLX0FOU0lD Ci14bDJsOShDSEFSIGMpCi0jZWxzZQoteGwybDkoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FO U0lDICovCi17IC8qIHhsMmw5ICovIAkJCQkvKiBMYXRpbi0yIHRvIExhdGluLTkuLi4gKi8KLSAg ICBzd2l0Y2ggKGMpIHsKLSAgICAgIGNhc2UgMTY5OiByZXR1cm4oKENIQVIpMTY2KTsJLyogUyBj YXJvbiAqLwotICAgICAgY2FzZSAxODU6IHJldHVybigoQ0hBUikxNjgpOwkvKiBzIGNhcm9uICov Ci0gICAgICBjYXNlIDE3NDogcmV0dXJuKChDSEFSKTE4MCk7CS8qIFogY2Fyb24gKi8KLSAgICAg IGNhc2UgMTkwOiByZXR1cm4oKENIQVIpMTg0KTsJLyogeiBjYXJvbiAqLwotICAgICAgZGVmYXVs dDoKLQlyZXR1cm4oeWwybDFbY10pOwotICAgIH0KLQotfQotCi1fUFJPVE9UWVAoIENIQVIgeGwy NTgsICggQ0hBUiApICk7Ci1DSEFSCi0jaWZkZWYgQ0tfQU5TSUMKLXhsMjU4KENIQVIgYykKLSNl bHNlCi14bDI1OChjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tfQU5TSUMgKi8KLXsgLyogeGwyNTgg Ki8gCQkJCS8qIExhdGluLTIgdG8gQ1A4NTguLi4gKi8KLSAgICByZXR1cm4oYyk7Ci19Ci0jZWxz ZQotI2RlZmluZSB4bDJsOSBOVUxMCi0jZGVmaW5lIHhsMjU4IE5VTEwKLSNlbmRpZiAvKiBMQVRJ TjIgKi8KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi16bDlhcyhDSEFSIGMpCi0jZWxzZQotemw5 YXMoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHpsOWFzICovIAkJCQkv KiBMYXRpbi05IHRvIFVTIEFTQ0lJLi4uICovCi0gICAgaWYgKGMgPCAoQ0hBUikweDgwKSByZXR1 cm4oYyk7CS8qIFNhdmUgYSBmdW5jdGlvbiBjYWxsICovCi0gICAgc3dpdGNoIChjKSB7Ci0gICAg ICBjYXNlIDB4YTQ6IHJldHVybihVTkspOwkJLyogRXVybyAqLwotICAgICAgY2FzZSAweGE2OiBy ZXR1cm4oJ1MnKTsJCS8qIFMgQ2Fyb24gKi8KLSAgICAgIGNhc2UgMHhhODogcmV0dXJuKCdzJyk7 CQkvKiBzIENhcm9uICovCi0gICAgICBjYXNlIDB4YjQ6IHJldHVybignWicpOwkJLyogWiBDYXJv biAqLwotICAgICAgY2FzZSAweGJjOiByZXR1cm4oJ08nKTsJCS8qIE9FIGRpZ3JhcGggKi8KLSAg ICAgIGNhc2UgMHhiZDogcmV0dXJuKCdvJyk7CQkvKiBvZSBkaWdyYXBoICovCi0gICAgICBjYXNl IDB4YmU6IHJldHVybignWScpOwkJLyogWSBkaWFlcmVzaXMgKi8KLSAgICAgIGRlZmF1bHQ6ICAg cmV0dXJuKHpsMWFzKGMpKTsJLyogVGhlIHJlc3QgaXMgbGlrZSBMYXRpbi0xICovCi0gICAgfQot fQotCi1fUFJPVE9UWVAoIENIQVIgeGw5YXMsICggQ0hBUiApICk7Ci1DSEFSCi0jaWZkZWYgQ0tf QU5TSUMKLXhsOWFzKENIQVIgYykKLSNlbHNlCi14bDlhcyhjKSBDSEFSIGM7Ci0jZW5kaWYgLyog Q0tfQU5TSUMgKi8KLXsgLyogeGw5YXMgKi8gCQkJCS8qIExhdGluLTkgdG8gVVMgQVNDSUkuLi4g Ki8KLSAgICBpZiAoYyA8IChDSEFSKTB4ODApIHJldHVybihjKTsJLyogU2F2ZSBhIGZ1bmN0aW9u IGNhbGwgKi8KLSAgICBzd2l0Y2ggKGMpIHsKLSAgICAgIGNhc2UgMHhhNDogcmV0dXJuKFVOSyk7 CQkvKiBFdXJvICovCi0gICAgICBjYXNlIDB4YTY6IHJldHVybignUycpOwkJLyogUyBDYXJvbiAq LwotICAgICAgY2FzZSAweGE4OiByZXR1cm4oJ3MnKTsJCS8qIHMgQ2Fyb24gKi8KLSAgICAgIGNh c2UgMHhiNDogcmV0dXJuKCdaJyk7CQkvKiBaIENhcm9uICovCi0gICAgICBjYXNlIDB4Yjg6IHJl dHVybigneicpOwkJLyogeiBDYXJvbiAqLwotICAgICAgY2FzZSAweGJjOiByZXR1cm4oJ08nKTsJ CS8qIE9FIGRpZ3JhcGggKi8KLSAgICAgIGNhc2UgMHhiZDogcmV0dXJuKCdvJyk7CQkvKiBvZSBk aWdyYXBoICovCi0gICAgICBjYXNlIDB4YmU6IHJldHVybignWScpOwkJLyogWSBkaWFlcmVzaXMg Ki8KLSAgICAgIGRlZmF1bHQ6ICAgcmV0dXJuKHhsMWFzKGMpKTsJLyogVGhlIHJlc3QgaXMgbGlr ZSBMYXRpbi0xICovCi0gICAgfQotfQotCi1DSEFSCQkJCQkvKiBDUDEyNTIgdG8gTGF0aW4tOSAq LwotI2lmZGVmIENLX0FOU0lDCi14dzFsOShDSEFSIGMpCi0jZWxzZQoteHcxbDkoYykgQ0hBUiBj OwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHh3MWw5ICovCi0gICAgc3dpdGNoIChjKSB7 Ci0gICAgICBjYXNlIDB4ODA6IHJldHVybigweGE0KTsJCS8qIEV1cm8gc2lnbiAqLwotICAgICAg Y2FzZSAweDhhOiByZXR1cm4oMHhhNik7CQkvKiBTIGNhcm9uICovCi0gICAgICBjYXNlIDB4OGM6 IHJldHVybigweGJjKTsJCS8qIE9FICovCi0gICAgICBjYXNlIDB4OGU6IHJldHVybigweGI0KTsJ CS8qIFogY2Fyb24gKi8KLSAgICAgIGNhc2UgMHg5YTogcmV0dXJuKDB4YTgpOwkJLyogcyBjYXJv biAqLwotICAgICAgY2FzZSAweDljOiByZXR1cm4oMHhiZCk7CQkvKiBvZSAqLwotICAgICAgY2Fz ZSAweDllOiByZXR1cm4oMHhiOCk7CQkvKiB6IGNhcm9uICovCi0gICAgICBjYXNlIDB4OWY6IHJl dHVybigweGJlKTsJCS8qIFkgZGlhZXJlc2lzICovCi0gICAgICBjYXNlIDB4YTQ6CQkJLyogQ3Vy cmVuY3kgc2lnbiAqLwotICAgICAgY2FzZSAweGE2OgkJCS8qIEJyb2tlbiB2ZXJ0aWNhbCBiYXIg Ki8KLSAgICAgIGNhc2UgMHhhODoJCQkvKiBEaWFlcmVzaXMgKi8KLSAgICAgIGNhc2UgMHhiNDoJ CQkvKiBBY3V0ZSBhY2NlbnQgKi8KLSAgICAgIGNhc2UgMHhiODoJCQkvKiBDZWRpbGxhICovCi0g ICAgICBjYXNlIDB4YmM6CQkJLyogMS80ICovCi0gICAgICBjYXNlIDB4YmQ6CQkJLyogMS8yICov Ci0gICAgICBjYXNlIDB4YmU6IHJldHVybignPycpOwkJLyogMy80ICovCi0gICAgICBkZWZhdWx0 OiByZXR1cm4oKGMgPCAxNjApID8geHcxYXMoYykgOiBjKTsKLSAgICB9Ci19Ci0KLSNpZmRlZiBM QVRJTjIKLUNIQVIKLSNpZmRlZiBDS19BTlNJQwoteGw5bDIoQ0hBUiBjKQotI2Vsc2UKLXhsOWwy KGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19BTlNJQyAqLwoteyAvKiB4bDlsMiAqLyAJCQkJLyog TGF0aW4tOSB0byBMYXRpbi0yLi4uICovCi0gICAgaWYgKGMgPCAoQ0hBUikweDgwKSByZXR1cm4o Yyk7CS8qIFNhdmUgYSBmdW5jdGlvbiBjYWxsICovCi0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBj YXNlIDB4YTQ6IHJldHVybihVTkspOwkJLyogRXVybyAqLwotICAgICAgY2FzZSAweGE2OiByZXR1 cm4oKENIQVIpMHhhOSk7CS8qIFMgQ2Fyb24gKi8KLSAgICAgIGNhc2UgMHhhODogcmV0dXJuKChD SEFSKTB4YjkpOwkvKiBzIENhcm9uICovCi0gICAgICBjYXNlIDB4YjQ6IHJldHVybigoQ0hBUikw eGFlKTsJLyogWiBDYXJvbiAqLwotICAgICAgY2FzZSAweGI4OiByZXR1cm4oKENIQVIpMHhhZik7 CS8qIHogQ2Fyb24gKi8KLSAgICAgIGNhc2UgMHhiYzogcmV0dXJuKCdPJyk7CQkvKiBPRSBkaWdy YXBoICovCi0gICAgICBjYXNlIDB4YmQ6IHJldHVybignbycpOwkJLyogb2UgZGlncmFwaCAqLwot ICAgICAgY2FzZSAweGJlOiByZXR1cm4oJ1knKTsJCS8qIFkgZGlhZXJlc2lzICovCi0gICAgICBk ZWZhdWx0OiAgIHJldHVybih4bDFsMihjKSk7CS8qIFRoZSByZXN0IGlzIGxpa2UgTGF0aW4tMSAq LwotICAgIH0KLX0KLSNlbHNlCi0jZGVmaW5lIHhsOWwyIE5VTEwKLSNlbmRpZiAvKiBMQVRJTjIg Ki8KLQotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14bDk1OChDSEFSIGMpCi0jZWxzZQoteGw5NTgo YykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHhsOTU4ICovIAkJCQkvKiBM YXRpbi05IHRvIENQODU4Li4uICovCi0gICAgaWYgKGMgPT0gMHhhNCkJCQkvKiBFdXJvIFN5bWJv bCAqLwotICAgICAgcmV0dXJuKChDSEFSKTB4ZDUpOwotICAgIGVsc2UgaWYgKGMgPT0gMHg5ZSkJ CQkvKiBUaGlzIHdhcyBjdXJyZW5jeSBzeW1ib2wgKi8KLSAgICAgIHJldHVybigoQ0hBUikweGNm KTsKLSAgICBjID0geWwxODVbY107Ci0gICAgcmV0dXJuKGMpOwotfQotCi1DSEFSCi0jaWZkZWYg Q0tfQU5TSUMKLXg1OGFzKENIQVIgYykKLSNlbHNlCi14NThhcyhjKSBDSEFSIGM7Ci0jZW5kaWYg LyogQ0tfQU5TSUMgKi8KLXsgLyogeDU4YXMgKi8gCQkJCS8qIENQODU4IHRvIFVTIEFTQ0lJLi4u ICovCi0gICAgaWYgKGMgPT0gMHhkNSkJCQkvKiBFdXJvIHJhdGhlciB0aGFuIGRvdGxlc3MgaSAq LwotICAgICAgcmV0dXJuKFVOSyk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHg4NWFzKGMpKTsJ CQkvKiBUaGUgcmVzdCBpcyBsaWtlIENQODUwICovCi19Ci0KLUNIQVIKLSNpZmRlZiBDS19BTlNJ QwoteDU4bDEoQ0hBUiBjKQotI2Vsc2UKLXg1OGwxKGMpIENIQVIgYzsKLSNlbmRpZiAvKiBDS19B TlNJQyAqLwoteyAvKiB4NThsMSAqLyAJCQkJLyogQ1A4NTggdG8gTGF0aW4tMS4uLiAqLwotICAg IGlmIChjID09IDB4ZDUpCQkJLyogRXVybyByYXRoZXIgdGhhbiBkb3RsZXNzIGkgKi8KLSAgICAg IHJldHVybigoQ0hBUikweGE0KTsJCS8qIFJldHVybiBjdXJyZW5jeSBzeW1ib2wgKi8KLSAgICBl bHNlIGlmIChjID09IDB4Y2YpCQkJLyogVGhpcyBrZWVwcyBpdCBpbnZlcnRpYmxlICovCi0gICAg ICByZXR1cm4oKENIQVIpMHg5ZSk7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuKHg4NWwxKGMpKTsK LX0KLQotI2lmZGVmIExBVElOMgotQ0hBUgotI2lmZGVmIENLX0FOU0lDCi14NThsMihDSEFSIGMp Ci0jZWxzZQoteDU4bDIoYykgQ0hBUiBjOwotI2VuZGlmIC8qIENLX0FOU0lDICovCi17IC8qIHg1 OGwyICovIAkJCQkvKiBDUDg1OCB0byBMYXRpbi0yLi4uICovCi0gICAgaWYgKGMgPT0gMHhkNSkJ CQkvKiBFdXJvIHJhdGhlciB0aGFuIGRvdGxlc3MgaSAqLwotICAgICAgcmV0dXJuKChDSEFSKTB4 YTQpOwkJLyogUmV0dXJuIGN1cnJlbmN5IHN5bWJvbCAqLwotICAgIGVsc2UgaWYgKGMgPT0gMHhj ZikJCQkvKiBUaGlzIGtlZXBzIGl0IGludmVydGlibGUgKi8KLSAgICAgIHJldHVybigoQ0hBUikw eDllKTsJCS8qIChpZiBpdCBldmVyIHdhcy4uLikgKi8KLSAgICBlbHNlCQkJCS8qIE90aGVyd2lz ZSBsaWtlIENQODUwICovCi0gICAgICByZXR1cm4oeDg1bDIoYykpOwotfQotI2Vsc2UKLSNkZWZp bmUgeDU4bDIgTlVMTAotI2VuZGlmIC8qIExBVElOMiAqLwotCi1DSEFSCi0jaWZkZWYgQ0tfQU5T SUMKLXg1OGw5KENIQVIgYykKLSNlbHNlCi14NThsOShjKSBDSEFSIGM7Ci0jZW5kaWYgLyogQ0tf QU5TSUMgKi8KLXsgLyogeDU4bDkgKi8gCQkJCS8qIENQLTg1OCB0byBMYXRpbi05Li4uICovCi0g ICAgaWYgKGMgPT0gMHhkNSkJCQkvKiBFdXJvIHJhdGhlciB0aGFuIGRvdGxlc3MgaSAqLwotICAg ICAgcmV0dXJuKChDSEFSKTB4YTQpOwkJLyogUmV0dXJuIGN1cnJlbmN5IHN5bWJvbCAqLwotICAg IGVsc2UgaWYgKGMgPT0gMHhjZikJCQkvKiBUaGlzIGtlZXBzIGl0IGludmVydGlibGUgKi8KLSAg ICAgIHJldHVybigoQ0hBUikweDllKTsJCS8qIChpZiBpdCBldmVyIHdhcy4uLikgKi8KLSAgICBl bHNlCQkJCS8qIE90aGVyd2lzZSBsaWtlIENQODUwICovCi0gICAgICByZXR1cm4oeDg1bDEoYykp OwkJCS8qIHRvIExhdGluLTEgKi8KLX0KLQotLyogRW5kIEV1cm8gZnVuY3Rpb25zICovCi0KLQot LyogIFRBQkxFUyBPRiBUUkFOU0xBVElPTiBGVU5DVElPTlMgKi8KLQotLyoKLSAgRmlyc3QsIHRo ZSB0YWJsZSBvZiB0cmFuc2xhdGlvbiBmdW5jdGlvbnMgZm9yIFJFQ0VJVklORyBmaWxlcy4gIFRo YXQgaXMsCi0gICpmcm9tKiB0aGUgVFJBTlNGRVIgY2hhcmFjdGVyIHNldCAqdG8qIHRoZSBGSUxF IGNoYXJhY3RlciBzZXQsIGFuIGFycmF5IG9mCi0gIHBvaW50ZXJzIHRvIGZ1bmN0aW9ucy4gIFRo ZSBmaXJzdCBpbmRleCBpcyB0aGUgVFJBTlNGRVIgQ0hBUkFDVEVSLVNFVAotICBudW1iZXIsIHRo ZSBzZWNvbmQgaW5kZXggaXMgdGhlIEZJTEUgQ0hBUkFDVEVSLVNFVCBudW1iZXIuCi0KLSAgVGhl c2UgYXJyYXlzIG11c3QgYmUgZnVsbHkgcG9wdWxhdGVkLCBldmVuIGlmIChhcyBpcyB0aGUgY2Fz ZSB3aXRoIEthbmppCi0gIGNoYXJhY3RlciBzZXRzKSwgYWxsIHRoZSBlbnRyaWVzIGFyZSBOVUxM LiAgT3RoZXJ3aXNlLCBzdWJzY3JpcHQKLSAgY2FsY3VsYXRpb25zIHdpbGwgYmUgd3JvbmcgYW5k IHdlJ2xsIHVzZSB0aGUgd3JvbmcgZnVuY3Rpb25zLgotKi8KLQotLyogUG9pbnRlcnMgdG8gYnl0 ZS1mb3ItYnl0ZSB0cmFuc2xhdGlvbiBmdW5jdGlvbnMgKi8KLQotX1BST1RPVFlQKCBDSEFSICgq cngpLCAoQ0hBUikgKTsKLV9QUk9UT1RZUCggQ0hBUiAoKnN4KSwgKENIQVIpICk7Ci0KLSNpZmRl ZiBVTklDT0RFCi1fUFJPVE9UWVAoIGludCAoKnh1dCksIChVU0hPUlQpICk7CS8qIFRyYW5zbGF0 aW9uIGZ1bmN0aW9uIFVDUyB0byBUQ1MgKi8KLV9QUk9UT1RZUCggaW50ICgqeHVmKSwgKFVTSE9S VCkgKTsJLyogVHJhbnNsYXRpb24gZnVuY3Rpb24gVUNTIHRvIEZDUyAqLwotX1BST1RPVFlQKCBV U0hPUlQgKCp4dHUpLCAoQ0hBUikgKTsJLyogVHJhbnNsYXRpb24gZnVuY3Rpb24gVENTIHRvIFVD UyAqLwotX1BST1RPVFlQKCBVU0hPUlQgKCp4ZnUpLCAoQ0hBUikgKTsJLyogVHJhbnNsYXRpb24g ZnVuY3Rpb24gRkNTIHRvIFVDUyAqLwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLQotI2lmZGVmIENL X0FOU0lDCi1DSEFSICgqeGxyW01BWFRDU0VUUysxXVtNQVhGQ1NFVFMrMV0pKENIQVIpID0KLSNl bHNlCi1DSEFSICgqeGxyW01BWFRDU0VUUysxXVtNQVhGQ1NFVFMrMV0pKCkgPQotI2VuZGlmIC8q IENLX0FOU0lDICovCi17Ci0gICAgTlVMTCwJCQkvKiAwLDAgdHJhbnNwYXJlbnQgdG8gdXMgYXNj aWkgKi8KLSAgICBOVUxMLAkJCS8qIDAsMSB0cmFuc3BhcmVudCB0byB1ayBhc2NpaSAqLwotICAg IE5VTEwsCQkJLyogMCwyIHRyYW5zcGFyZW50IHRvIGR1dGNoIG5yYyAqLwotICAgIE5VTEwsCQkJ LyogMCwzIHRyYW5zcGFyZW50IHRvIGZpbm5pc2ggbnJjICovCi0gICAgTlVMTCwJCQkvKiAwLDQg dHJhbnNwYXJlbnQgdG8gZnJlbmNoIG5yYyAqLwotICAgIE5VTEwsCQkJLyogMCw1IHRyYW5zcGFy ZW50IHRvIGZyLWNhbmFkaWFuIG5yYyAqLwotICAgIE5VTEwsCQkJLyogMCw2IHRyYW5zcGFyZW50 IHRvIGdlcm1hbiBucmMgKi8KLSAgICBOVUxMLAkJCS8qIDAsNyB0cmFuc3BhcmVudCB0byBodW5n YXJpYW4gbnJjICovCi0gICAgTlVMTCwJCQkvKiAwLDggdHJhbnNwYXJlbnQgdG8gaXRhbGlhbiBu cmMgKi8KLSAgICBOVUxMLAkJCS8qIDAsOSB0cmFuc3BhcmVudCB0byBub3JnZS9kYW5pc2ggbnJj ICovCi0gICAgTlVMTCwJCQkvKiAwLDEwIHRyYW5zcGFyZW50IHRvIHBvcnR1Z3Vlc2UgbnJjICov Ci0gICAgTlVMTCwJCQkvKiAwLDExIHRyYW5zcGFyZW50IHRvIHNwYW5pc2ggbnJjICovCi0gICAg TlVMTCwJCQkvKiAwLDEyIHRyYW5zcGFyZW50IHRvIHN3ZWRpc2ggbnJjICovCi0gICAgTlVMTCwJ CQkvKiAwLDEzIHRyYW5zcGFyZW50IHRvIHN3aXNzIG5yYyAqLwotICAgIE5VTEwsCQkJLyogMCwx NCB0cmFuc3BhcmVudCB0byBsYXRpbi0xICovCi0gICAgTlVMTCwJCQkvKiAwLDE1IHRyYW5zcGFy ZW50IHRvIGxhdGluLTIgKi8KLSAgICBOVUxMLAkJCS8qIDAsMTYgdHJhbnNwYXJlbnQgdG8gREVD IE1DUyAqLwotICAgIE5VTEwsCQkJLyogMCwxNyB0cmFuc3BhcmVudCB0byBOZVhUICovCi0gICAg TlVMTCwJCQkvKiAwLDE4IHRyYW5zcGFyZW50IHRvIENQNDM3ICovCi0gICAgTlVMTCwJCQkvKiAw LDE5IHRyYW5zcGFyZW50IHRvIENQODUwICovCi0gICAgTlVMTCwJCQkvKiAwLDIwIHRyYW5zcGFy ZW50IHRvIENQODUyICovCi0gICAgTlVMTCwJCQkvKiAwLDIxIHRyYW5zcGFyZW50IHRvIE1hY2lu dG9zaCBMYXRpbiAqLwotICAgIE5VTEwsCQkJLyogMCwyMiB0cmFuc3BhcmVudCB0byBER0kgKi8K LSAgICBOVUxMLAkJCS8qIDAsMjMgdHJhbnNwYXJlbnQgdG8gSFAgKi8KLSAgICBOVUxMLAkJCS8q IDAsMjQgdHJhbnNwYXJlbnQgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KLSAgICBOVUxMLCAgICAgICAg ICAgICAgICAgICAgICAgLyogMCwyNSB0cmFuc3BhcmVudCB0byBDUDg2NiAqLwotICAgIE5VTEws CQkJLyogMCwyNiB0cmFuc3BhcmVudCB0byBTaG9ydCBLT0ktNyAqLwotICAgIE5VTEwsICAgICAg ICAgICAgICAgICAgICAgICAvKiAwLDI3IHRyYW5zcGFyZW50IHRvIE9sZCBLT0ktOCBDeXJpbGxp YyAqLwotICAgIE5VTEwsCQkJLyogMCwyOCB0cmFuc3BhcmVudCB0byBKSVMtNyAqLwotICAgIE5V TEwsCQkJLyogMCwyOSB0cmFuc3BhcmVudCB0byBTaGlmdC1KSVMgKi8KLSAgICBOVUxMLAkJCS8q IDAsMzAgdHJhbnNwYXJlbnQgdG8gSi1FVUMgKi8KLSAgICBOVUxMLAkJCS8qIDAsMzEgdHJhbnNw YXJlbnQgdG8gREVDIEthbmppICovCi0gICAgTlVMTCwJCQkvKiAwLDMyIHRyYW5zcGFyZW50IHRv IEhlYnJldy03ICovCi0gICAgTlVMTCwJCQkvKiAwLDMzIHRyYW5zcGFyZW50IHRvIExhdGluL0hl YnJldyAqLwotICAgIE5VTEwsCQkJLyogMCwzNCB0cmFuc3BhcmVudCB0byBDUDg2MiBIZWJyZXcg Ki8KLSAgICBOVUxMLAkJCS8qIDAsMzUgdHJhbnNwYXJlbnQgdG8gRUxPVCA5MjcgR3JlZWsgKi8K LSAgICBOVUxMLAkJCS8qIDAsMzYgdHJhbnNwYXJlbnQgdG8gTGF0aW4vR3JlZWsgKi8KLSAgICBO VUxMLAkJCS8qIDAsMzcgdHJhbnNwYXJlbnQgdG8gQ1A4NjkgKi8KLSAgICBOVUxMLAkJCS8qIDAs MzggdHJhbnNwYXJlbnQgdG8gTGF0aW4tOSAqLwotICAgIE5VTEwsCQkJLyogMCwzOSB0cmFuc3Bh cmVudCB0byBDUDg1OCAqLwotICAgIE5VTEwsCQkJLyogMCw0MCB0cmFuc3BhcmVudCB0byBDUDg1 NSAqLwotICAgIE5VTEwsCQkJLyogMCw0MSB0cmFuc3BhcmVudCB0byBDUDEyNTEgKi8KLSAgICBO VUxMLAkJCS8qIDAsNDIgdHJhbnNwYXJlbnQgdG8gQnVsZ2FyaWFuICovCi0gICAgTlVMTCwJCQkv KiAwLDQzIHRyYW5zcGFyZW50IHRvIENQMTI1MCAqLwotICAgIE5VTEwsCQkJLyogMCw0NCB0cmFu c3BhcmVudCB0byBNYXpvdmlhICovCi0gICAgTlVMTCwJCQkvKiAwLDQ1IHRyYW5zcGFyZW50IHRv IFVDUy0yICovCi0gICAgTlVMTCwJCQkvKiAwLDQ2IHRyYW5zcGFyZW50IHRvIFVURi04ICovCi0g ICAgTlVMTCwJCQkvKiAwLDQ3IHRyYW5zcGFyZW50IHRvIEtPSThSICovCi0gICAgTlVMTCwJCQkv KiAwLDQ4IHRyYW5zcGFyZW50IHRvIEtPSThVICovCi0gICAgTlVMTCwJCQkvKiAwLDQ5IHRyYW5z cGFyZW50IHRvIENQMTI1MiAqLwotICAgIE5VTEwsCQkJLyogMSwwIGFzY2lpIHRvIHVzIGFzY2lp ICovCi0gICAgTlVMTCwJCQkvKiAxLDEgYXNjaWkgdG8gdWsgYXNjaWkgKi8KLSAgICBOVUxMLAkJ CS8qIDEsMiBhc2NpaSB0byBkdXRjaCBucmMgKi8KLSAgICBOVUxMLAkJCS8qIDEsMyBhc2NpaSB0 byBmaW5uaXNoIG5yYyAqLwotICAgIE5VTEwsCQkJLyogMSw0IGFzY2lpIHRvIGZyZW5jaCBucmMg Ki8KLSAgICBOVUxMLAkJCS8qIDEsNSBhc2NpaSB0byBmci1jYW5hZGlhbiBucmMgKi8KLSAgICBO VUxMLAkJCS8qIDEsNiBhc2NpaSB0byBnZXJtYW4gbnJjICovCi0gICAgTlVMTCwJCQkvKiAxLDcg YXNjaWkgdG8gaHVuZ2FyaWFuIG5yYyAqLwotICAgIE5VTEwsCQkJLyogMSw4IGFzY2lpIHRvIGl0 YWxpYW4gbnJjICovCi0gICAgTlVMTCwJCQkvKiAxLDkgYXNjaWkgdG8gbm9yZ2UvZGFuaXNoIG5y YyAqLwotICAgIE5VTEwsCQkJLyogMSwxMCBhc2NpaSB0byBwb3J0dWd1ZXNlIG5yYyAqLwotICAg IE5VTEwsCQkJLyogMSwxMSBhc2NpaSB0byBzcGFuaXNoIG5yYyAqLwotICAgIE5VTEwsCQkJLyog MSwxMiBhc2NpaSB0byBzd2VkaXNoIG5yYyAqLwotICAgIE5VTEwsCQkJLyogMSwxMyBhc2NpaSB0 byBzd2lzcyBucmMgKi8KLSAgICBOVUxMLAkJCS8qIDEsMTQgYXNjaWkgdG8gbGF0aW4tMSAqLwot ICAgIE5VTEwsCQkJLyogMSwxNSBhc2NpaSB0byBsYXRpbi0yICovCi0gICAgTlVMTCwJCQkvKiAx LDE2IGFzY2lpIHRvIERFQyBNQ1MgKi8KLSAgICBOVUxMLAkJCS8qIDEsMTcgYXNjaWkgdG8gTmVY VCAqLwotICAgIE5VTEwsCQkJLyogMSwxOCBhc2NpaSB0byBDUDQzNyAqLwotICAgIE5VTEwsCQkJ LyogMSwxOSBhc2NpaSB0byBDUDg1MCAqLwotICAgIE5VTEwsCQkJLyogMSwyMCBhc2NpaSB0byBD UDg1MiAqLwotICAgIE5VTEwsCQkJLyogMSwyMSBhc2NpaSB0byBNYWNpbnRvc2ggTGF0aW4gKi8K LSAgICBOVUxMLAkJCS8qIDEsMjIgYXNjaWkgdG8gREdJICovCi0gICAgTlVMTCwJCQkvKiAxLDIz IGFzY2lpIHRvIEhQICovCi0gICAgeGFzbGMsICAgICAgICAgICAgICAgICAgICAgIC8qIDEsMjQg YXNjaWkgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KLSAgICB4YXNhYywgICAgICAgICAgICAgICAgICAg ICAgLyogMSwyNSBhc2NpaSB0byBDUDg2NiAqLwotICAgIHhhc3NrLCAgICAgICAgICAgICAgICAg ICAgICAvKiAxLDI2IGFzY2lpIHRvIFNob3J0IEtPSSAqLwotICAgIHhhc2s4LCAgICAgICAgICAg ICAgICAgICAgICAvKiAxLDI3IGFzY2lpIHRvIE9sZCBLT0ktOCBDeXJpbGxpYyAqLwotICAgIE5V TEwsCQkJLyogMSwyOCBhc2NpaSB0byBKSVMtNyAqLwotICAgIE5VTEwsCQkJLyogMSwyOSBhc2Np aSB0byBTaGlmdC1KSVMgKi8KLSAgICBOVUxMLAkJCS8qIDEsMzAgYXNjaWkgdG8gSi1FVUMgKi8K LSAgICBOVUxMLAkJCS8qIDEsMzEgYXNjaWkgdG8gREVDIEthbmppICovCi0gICAgeGFzaDcsCQkJ LyogMSwzMiBhc2NpaSB0byBIZWJyZXctNyAqLwotICAgIE5VTEwsCQkJLyogMSwzMyBhc2NpaSB0 byBMYXRpbi9IZWJyZXcgKi8KLSAgICBOVUxMLAkJCS8qIDEsMzQgYXNjaWkgdG8gQ1A4NjIgSGVi cmV3ICovCi0gICAgeGFzZWcsCQkJLyogMSwzNSBhc2NpaSB0byBFTE9UIDkyNyBHcmVlayAqLwot ICAgIE5VTEwsCQkJLyogMSwzNiBhc2NpaSB0byBMYXRpbi9HcmVlayAqLwotICAgIE5VTEwsCQkJ LyogMSwzNyBhc2NpaSB0byBDUDg2OSAqLwotICAgIE5VTEwsCQkJLyogMSwzOCBhc2NpaSB0byBM YXRpbi05ICovCi0gICAgTlVMTCwJCQkvKiAxLDM5IGFzY2lpIHRvIENQODU4ICovCi0gICAgeGFz NTUsCQkJLyogMSw0MCBhc2NpaSB0byBDUDg1NSAqLwotICAgIHhhczEyNTEsCQkJLyogMSw0MSBh c2NpaSB0byBDUDEyNTEgKi8KLSAgICB4bGVmdDEyOCwJCQkvKiAxLDQyIGFzY2lpIHRvIGJ1bGdh cmlhbiAqLwotICAgIHhsZWZ0MTI4LAkJCS8qIDEsNDMgYXNjaWkgdG8gQ1AxMjUwICovCi0gICAg eGxlZnQxMjgsCQkJLyogMSw0NCBhc2NpaSB0byBNYXpvdmlhICovCi0gICAgTlVMTCwJCQkvKiAx LDQ1IGFzY2lpIHRvIFVDUy0yICovCi0gICAgTlVMTCwJCQkvKiAxLDQ2IGFzY2lpIHRvIFVURi04 ICovCi0gICAgTlVMTCwJCQkvKiAxLDQ3IGFzY2lpIHRvIEtPSTgtUiAqLwotICAgIE5VTEwsCQkJ LyogMSw0OCBhc2NpaSB0byBLT0k4LVUgKi8KLSAgICBOVUxMLAkJCS8qIDEsNDkgYXNjaWkgdG8g Q1AxMjUyICovCi0gICAgemwxYXMsCQkJLyogMiwwIGxhdGluLTEgdG8gdXMgYXNjaWkgKi8KLSAg ICB4bDF1aywJCQkvKiAyLDEgbGF0aW4tMSB0byB1ayBhc2NpaSAqLwotICAgIHhsMWR1LAkJCS8q IDIsMiBsYXRpbi0xIHRvIGR1dGNoIG5yYyAqLwotICAgIHhsMWZpLAkJCS8qIDIsMyBsYXRpbi0x IHRvIGZpbm5pc2ggbnJjICovCi0gICAgeGwxZnIsCQkJLyogMiw0IGxhdGluLTEgdG8gZnJlbmNo IG5yYyAqLwotICAgIHhsMWZjLAkJCS8qIDIsNSBsYXRpbi0xIHRvIGZyLWNhbmFkaWFuIG5yYyAq LwotICAgIHhsMWdlLAkJCS8qIDIsNiBsYXRpbi0xIHRvIGdlcm1hbiBucmMgKi8KLSAgICB4bDFp dCwJCQkvKiAyLDcgbGF0aW4tMSB0byBpdGFsaWFuIG5yYyAqLwotICAgIHhsMWh1LAkJCS8qIDIs OCBsYXRpbi0xIHRvIGh1bmdhcmlhbiBucmMgKi8KLSAgICB4bDFubywJCQkvKiAyLDkgbGF0aW4t MSB0byBub3JnZS9kYW5pc2ggbnJjICovCi0gICAgeGwxcG8sCQkJLyogMiwxMCBsYXRpbi0xIHRv IHBvcnR1Z3Vlc2UgbnJjICovCi0gICAgeGwxc3AsCQkJLyogMiwxMSBsYXRpbi0xIHRvIHNwYW5p c2ggbnJjICovCi0gICAgeGwxc3csCQkJLyogMiwxMiBsYXRpbi0xIHRvIHN3ZWRpc2ggbnJjICov Ci0gICAgeGwxY2gsCQkJLyogMiwxMyBsYXRpbi0xIHRvIHN3aXNzIG5yYyAqLwotICAgIE5VTEws CQkJLyogMiwxNCBsYXRpbi0xIHRvIGxhdGluLTEgKi8KLSAgICB4bDFsMiwJCQkvKiAyLDE1IGxh dGluLTEgdG8gbGF0aW4tMiAqLwotICAgIHhsMWRtLAkJCS8qIDIsMTYgbGF0aW4tMSB0byBERUMg TUNTICovCi0gICAgeGwxbmUsCQkJLyogMiwxNyBsYXRpbi0xIHRvIE5lWFQgKi8KLSAgICB4bDE0 MywJCQkvKiAyLDE4IGxhdGluLTEgdG8gQ1A0MzcgKi8KLSAgICB4bDE4NSwJCQkvKiAyLDE5IGxh dGluLTEgdG8gQ1A4NTAgKi8KLSAgICB4bDE1MiwJCQkvKiAyLDIwIGxhdGluLTEgdG8gQ1A4NTIg Ki8KLSAgICB4bDFhcSwJCQkvKiAyLDIxIGxhdGluLTEgdG8gTWFjaW50b3NoIExhdGluICovCi0g ICAgeGwxZGcsCQkJLyogMiwyMiBsYXRpbi0xIHRvIERHSSAqLwotICAgIHhsMXI4LAkJCS8qIDIs MjMgbGF0aW4tMSB0byBIUCBSb21hbjggKi8KLSAgICB6bDFhcywJCQkvKiAyLDI0IGxhdGluLTEg dG8gTGF0aW4vQ3lyaWxsaWMgKi8KLSAgICB6bDFhcywgICAgICAgICAgICAgICAgICAgICAgLyog MiwyNSBsYXRpbi0xIHRvIENQODY2ICovCi0gICAgeGwxc2ssICAgICAgICAgICAgICAgICAgICAg IC8qIDIsMjYgbGF0aW4tMSB0byBTaG9ydCBLT0kgKi8KLSAgICB6bDFhcywJCSAgICAgICAJLyog MiwyNyBsYXRpbi0xIHRvIE9sZCBLT0ktOCBDeXJpbGxpYyAqLwotICAgIE5VTEwsCQkJLyogMiwy OCBsYXRpbi0xIHRvIEpJUy03ICovCi0gICAgTlVMTCwJCQkvKiAyLDI5IGxhdGluLTEgdG8gU2hp ZnQtSklTICovCi0gICAgTlVMTCwJCQkvKiAyLDMwIGxhdGluLTEgdG8gSi1FVUMgKi8KLSAgICBO VUxMLAkJCS8qIDIsMzEgbGF0aW4tMSB0byBERUMgS2FuamkgKi8KLSAgICB4bDFoNywJCQkvKiAy LDMyIGxhdGluLTEgdG8gSGVicmV3LTcgKi8KLSAgICB4bDFsaCwJCQkvKiAyLDMzIGxhdGluLTEg dG8gTGF0aW4vSGVicmV3ICovCi0gICAgeGwxNjIsCQkJLyogMiwzNCBsYXRpbi0xIHRvIENQODYy IEhlYnJldyAqLwotICAgIHhsMWVnLAkJCS8qIDIsMzUgbGF0aW4tMSB0byBFTE9UIDkyNyBHcmVl ayAqLwotICAgIHhsMWxnLAkJCS8qIDIsMzYgbGF0aW4tMSB0byBMYXRpbi9HcmVlayAqLwotICAg IHhsMTY5LAkJCS8qIDIsMzcgbGF0aW4tMSB0byBDUDg2OSAqLwotICAgIE5VTEwsCQkJLyogMiwz OCBsYXRpbi0xIHRvIExhdGluOSAqLwotICAgIHhsMTg1LAkJCS8qIDIsMzkgbGF0aW4tMSB0byBD UDg1OCAqLwotICAgIHpsMWFzLAkJCS8qIDIsNDAgbGF0aW4tMSB0byBDUDg1NSAqLwotICAgIHps MWFzLAkJCS8qIDIsNDEgbGF0aW4tMSB0byBDUDEyNTEgKi8KLSAgICB6bDFhcywJCQkvKiAyLDQy IGxhdGluLTEgdG8gQnVsZ2FyaWFuICovCi0gICAgeGwxMTI1MCwJCQkvKiAyLDQzIGxhdGluLTEg dG8gQ1AxMjUwICovCi0gICAgeGwxbXosCQkJLyogMiw0NCBsYXRpbi0xIHRvIE1hem92aWEgKi8K LSAgICBOVUxMLAkJCS8qIDIsNDUgbGF0aW4tMSB0byBVQ1MtMiAqLwotICAgIE5VTEwsCQkJLyog Miw0NiBsYXRpbi0xIHRvIFVURi04ICovCi0gICAgemwxYXMsCQkJLyogMiw0NyBsYXRpbi0xIHRv IEtPSThSICovCi0gICAgemwxYXMsCQkJLyogMiw0OCBsYXRpbi0xIHRvIEtPSThVICovCi0gICAg eGwxdzEsCQkJLyogMiw0OSBsYXRpbi0xIHRvIENQMTI1MiAqLwotICAgIHhsMmFzLAkJCS8qIDMs MCBsYXRpbi0yIHRvIHVzIGFzY2lpICovCi0gICAgeGwyYXMsCQkJLyogMywxIGxhdGluLTIgdG8g dWsgYXNjaWkgKi8KLSAgICB4bDJhcywJCQkvKiAzLDIgbGF0aW4tMiB0byBkdXRjaCBucmMgKi8K LSAgICB4bDJhcywJCQkvKiAzLDMgbGF0aW4tMiB0byBmaW5uaXNoIG5yYyAqLwotICAgIHhsMmFz LAkJCS8qIDMsNCBsYXRpbi0yIHRvIGZyZW5jaCBucmMgKi8KLSAgICB4bDJhcywJCQkvKiAzLDUg bGF0aW4tMiB0byBmci1jYW5hZGlhbiBucmMgKi8KLSAgICB4bDJhcywJCQkvKiAzLDYgbGF0aW4t MiB0byBnZXJtYW4gbnJjICovCi0gICAgeGwyYXMsCQkJLyogMyw3IGxhdGluLTIgdG8gaXRhbGlh biBucmMgKi8KLSAgICB4bDJhcywJCQkvKiAzLDggbGF0aW4tMiB0byBodW5nYXJpYW4gbnJjICov Ci0gICAgeGwyYXMsCQkJLyogMyw5IGxhdGluLTIgdG8gbm9yZ2UvZGFuaXNoIG5yYyAqLwotICAg IHhsMmFzLAkJCS8qIDMsMTAgbGF0aW4tMiB0byBwb3J0dWd1ZXNlIG5yYyAqLwotICAgIHhsMmFz LAkJCS8qIDMsMTEgbGF0aW4tMiB0byBzcGFuaXNoIG5yYyAqLwotICAgIHhsMmFzLAkJCS8qIDMs MTIgbGF0aW4tMiB0byBzd2VkaXNoIG5yYyAqLwotICAgIHhsMmFzLAkJCS8qIDMsMTMgbGF0aW4t MiB0byBzd2lzcyBucmMgKi8KLSAgICB4bDJsMSwJCQkvKiAzLDE0IGxhdGluLTIgdG8gbGF0aW4t MSAqLwotICAgIE5VTEwsCQkJLyogMywxNSBsYXRpbi0yIHRvIGxhdGluLTIgKi8KLSAgICB4bDJs MSwJCQkvKiAzLDE2IGxhdGluLTIgdG8gREVDIE1DUyAqLwotICAgIHhsMm5lLAkJCS8qIDMsMTcg bGF0aW4tMiB0byBOZVhUICovCi0gICAgeGwyNDMsCQkJLyogMywxOCBsYXRpbi0yIHRvIENQNDM3 ICovCi0gICAgeGwyODUsCQkJLyogMywxOSBsYXRpbi0yIHRvIENQODUwICovCi0gICAgeGwyNTIs CQkJLyogMywyMCBsYXRpbi0yIHRvIENQODUyICovCi0gICAgeGwyYXEsCQkJLyogMywyMSBsYXRp bi0yIHRvIE1hY2ludG9zaCBMYXRpbiAqLwotICAgIHhsMmRnLAkJCS8qIDMsMjIgbGF0aW4tMiB0 byBER0kgKi8KLSAgICB4bDJyOCwJCQkvKiAzLDIzIGxhdGluLTIgdG8gSFAgKi8KLSAgICB4bDJh cywJCQkvKiAzLDI0IGxhdGluLTIgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KLSAgICB4bDJhcywgICAg ICAgICAgICAgICAgICAgICAgLyogMywyNSBsYXRpbi0yIHRvIENQODY2ICovCi0gICAgeGwyc2ss ICAgICAgICAgICAgICAgICAgICAgIC8qIDMsMjYgbGF0aW4tMiB0byBTaG9ydCBLT0kgKi8KLSAg ICB4bDJhcywJCSAgICAgICAJLyogMywyNyBsYXRpbi0yIHRvIE9sZCBLT0ktOCBDeXJpbGxpYyAq LwotICAgIE5VTEwsCQkJLyogMywyOCBsYXRpbi0yIHRvIEpJUy03ICovCi0gICAgTlVMTCwJCQkv KiAzLDI5IGxhdGluLTIgdG8gU2hpZnQtSklTICovCi0gICAgTlVMTCwJCQkvKiAzLDMwIGxhdGlu LTIgdG8gSi1FVUMgKi8KLSAgICBOVUxMLAkJCS8qIDMsMzEgbGF0aW4tMiB0byBERUMgS2Fuamkg Ki8KLSAgICB4bDJoNywJCQkvKiAzLDMyIGxhdGluLTIgdG8gSGVicmV3LTcgKi8KLSAgICB4bDJh cywJCQkvKiAzLDMzIGxhdGluLTIgdG8gTGF0aW4vSGVicmV3ICovCi0gICAgeGwyYXMsCQkJLyog MywzNCBsYXRpbi0yIHRvIENQODYyIEhlYnJldyAqLwotICAgIHhhc3NrLAkJCS8qIDMsMzUgbGF0 aW4tMiB0byBFTE9UIDkyNyBHcmVlayAqLwotICAgIHhsMmFzLAkJCS8qIDMsMzYgbGF0aW4tMiB0 byBMYXRpbi9HcmVlayAqLwotICAgIHhsMmFzLAkJCS8qIDMsMzcgbGF0aW4tMiB0byBDUDg2OSAq LwotICAgIHhsMmw5LAkJCS8qIDMsMzggbGF0aW4tMiB0byBMYXRpbi05ICovCi0gICAgeGwyNTgs CQkJLyogMywzOSBsYXRpbi0yIHRvIENQODU4ICovCi0gICAgeGwyYXMsCQkJLyogMyw0MCBsYXRp bi0yIHRvIENQODU1ICovCi0gICAgeGwyYXMsCQkJLyogMyw0MSBsYXRpbi0yIHRvIENQMTI1MSAq LwotICAgIHhsMmFzLAkJCS8qIDMsNDIgbGF0aW4tMiB0byBCdWxnYXJpYW4gKi8KLSAgICB4bDIx MjUwLAkJCS8qIDMsNDMgbGF0aW4tMiB0byBDUDEyNTAgKi8KLSAgICB4bDJteiwJCQkvKiAzLDQ0 IGxhdGluLTIgdG8gTWF6b3ZpYSAqLwotICAgIE5VTEwsCQkJLyogMyw0NSBsYXRpbi0yIHRvIFVD Uy0yICovCi0gICAgTlVMTCwJCQkvKiAzLDQ2IGxhdGluLTIgdG8gVVRGLTggKi8KLSAgICB4bDJh cywJCQkvKiAzLDQ3IGxhdGluLTIgdG8gS09JOFIgKi8KLSAgICB4bDJhcywJCQkvKiAzLDQ4IGxh dGluLTIgdG8gS09JOFUgKi8KLSAgICB4bDJ3MSwJCQkvKiAzLDQ5IGxhdGluLTIgdG8gQ1AxMjUy ICovCi0gICAgeGxjYXMsCQkJLyogNCwwIGxhdGluL2N5cmlsbGljIHRvIHVzIGFzY2lpICovCi0g ICAgeGxjYXMsCQkJLyogNCwxIGxhdGluL2N5cmlsbGljIHRvIHVrIGFzY2lpICovCi0gICAgeGxj YXMsIAkJICAgICAgICAvKiA0LDIgbGF0aW4vY3lyaWxsaWMgdG8gZHV0Y2ggbnJjICovCi0gICAg eGxjYXMsCQkJLyogNCwzIGxhdGluL2N5cmlsbGljIHRvIGZpbm5pc2ggYXNjaWkgKi8KLSAgICB4 bGNhcywJCQkvKiA0LDQgbGF0aW4vY3lyaWxsaWMgdG8gZnJlbmNoIG5yYyAqLwotICAgIHhsY2Fz LAkJCS8qIDQsNSBsYXRpbi9jeXJpbGxpYyB0byBmci1jYW5hZGlhbiBucmMgKi8KLSAgICB4bGNh cywJCQkvKiA0LDYgbGF0aW4vY3lyaWxsaWMgdG8gZ2VybWFuIG5yYyAqLwotICAgIHhsY2FzLAkJ CS8qIDQsNyBsYXRpbi9jeXJpbGxpYyB0byBpdGFsaWFuIG5yYyAqLwotICAgIHhsY2FzLAkJCS8q IDQsOCBsYXRpbi9jeXJpbGxpYyB0byBodW5nYXJpYW4gbnJjICovCi0gICAgeGxjYXMsCQkJLyog NCw5IGxhdGluL2N5cmlsbGljIHRvIG5vcmdlL2RhbmlzaCBucmMgKi8KLSAgICB4bGNhcywJCQkv KiA0LDEwIGxhdGluL2N5cmlsbGljIHRvIHBvcnR1Z3Vlc2UgbnJjICovCi0gICAgeGxjYXMsCQkJ LyogNCwxMSBsYXRpbi9jeXJpbGxpYyB0byBzcGFuaXNoIG5yYyAqLwotICAgIHhsY2FzLAkJCS8q IDQsMTIgbGF0aW4vY3lyaWxsaWMgdG8gc3dlZGlzaCBucmMgKi8KLSAgICB4bGNhcywJCQkvKiA0 LDEzIGxhdGluL2N5cmlsbGljIHRvIHN3aXNzIG5yYyAqLwotICAgIHhsY2FzLAkJCS8qIDQsMTQg bGF0aW4vY3lyaWxsaWMgdG8gbGF0aW4tMSAqLwotICAgIHhsY2FzLAkJCS8qIDQsMTUgbGF0aW4v Y3lyaWxsaWMgdG8gbGF0aW4tMiAqLwotICAgIHhsY2FzLAkJCS8qIDQsMTYgbGF0aW4vY3lyaWxs aWMgdG8gREVDIE1DUyAqLwotICAgIHhsY2FzLAkJCS8qIDQsMTcgbGF0aW4vY3lyaWxsaWMgdG8g TmVYVCAqLwotICAgIHhsY2FzLAkJCS8qIDQsMTggbGF0aW4vY3lyaWxsaWMgdG8gQ1A0MzcgKi8K LSAgICB4bGNhcywJCQkvKiA0LDE5IGxhdGluL2N5cmlsbGljIHRvIENQODUwICovCi0gICAgeGxj YXMsCQkJLyogNCwyMCBsYXRpbi9jeXJpbGxpYyB0byBDUDg1MiAqLwotICAgIHhsY2FzLAkJCS8q IDQsMjEgbGF0aW4vY3lyaWxsaWMgdG8gTWFjaW50b3NoIExhdGluICovCi0gICAgeGxjYXMsCQkJ LyogNCwyMiBsYXRpbi9jeXJpbGxpYyB0byBER0kgKi8KLSAgICB4bGNhcywJCQkvKiA0LDIzIGxh dGluL2N5cmlsbGljIHRvIEhQICovCi0gICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgIC8q IDQsMjQgbGF0aW4vY3lyaWxsaWMgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KLSAgICB4bGNhYywgICAg ICAgICAgICAgICAgICAgICAgLyogNCwyNSBsYXRpbi9jeXJpbGxpYyB0byBDUDg2NiAqLwotICAg IHhsY3NrLCAgICAgICAgICAgICAgICAgICAgICAvKiA0LDI2IGxhdGluL2N5cmlsbGljIHRvIFNo b3J0IEtPSSAqLwotICAgIHhsY2s4LAkJICAgICAgIAkvKiA0LDI3IGxhdGluL2N5cmlsbGljIHRv IE9sZCBLT0ktOCBDeXJpbGxpYyAqLwotICAgIE5VTEwsCQkJLyogNCwyOCBsYXRpbi9jeXJpbCB0 byBKSVMtNyAqLwotICAgIE5VTEwsCQkJLyogNCwyOSBsYXRpbi9jeXJpbCB0byBTaGlmdC1KSVMg Ki8KLSAgICBOVUxMLAkJCS8qIDQsMzAgbGF0aW4vY3lyaWwgdG8gSi1FVUMgKi8KLSAgICBOVUxM LAkJCS8qIDQsMzEgbGF0aW4vY3lyaWwgdG8gREVDIEthbmppICovCi0gICAgeGxjaDcsCQkJLyog NCwzMiBsYXRpbi9jeXJpbCB0byBIZWJyZXctNyAqLwotICAgIHhsY2FzLAkJCS8qIDQsMzMgbGF0 aW4vY3lyaWwgdG8gTGF0aW4vSGVicmV3ICovCi0gICAgeGxjYXMsCQkJLyogNCwzNCBsYXRpbi9j eXJpbCB0byBDUDg2MiBIZWJyZXcgKi8KLSAgICB4YXNzaywJCQkvKiA0LDM1IGxhdGluL2N5cmls IHRvIEVMT1QgOTI3IEdyZWVrICovCi0gICAgeGxlZnQxNjAsCQkJLyogNCwzNiBsYXRpbi9jeXJp bCB0byBMYXRpbi9HcmVlayAqLwotICAgIHhsZWZ0MTI4LAkJCS8qIDQsMzcgbGF0aW4vY3lyaWwg dG8gQ1A4NjkgKi8KLSAgICB4bGNhcywJCQkvKiA0LDM4IGxhdGluL2N5cmlsIHRvIGxhdGluLTkg Ki8KLSAgICB4bGNhcywJCQkvKiA0LDM5IGxhdGluL2N5cmlsIHRvIENQODU4ICovCi0gICAgeGxj NTUsCQkJLyogNCw0MCBsYXRpbi9jeXJpbCB0byBDUDg1NSAqLwotICAgIHhsYzEyNTEsCQkJLyog NCw0MSBsYXRpbi9jeXJpbCB0byBDUDEyNTEgKi8KLSAgICB4bGNidSwJCQkvKiA0LDQyIGxhdGlu L2N5cmlsIHRvIEJ1bGdhcmlhbiAqLwotICAgIHhsY2FzLAkJCS8qIDQsNDMgbGF0aW4vY3lyaWwg dG8gQ1AxMjUwICovCi0gICAgeGxjYXMsCQkJLyogNCw0NCBsYXRpbi9jeXJpbCB0byBNYXpvdmlh ICovCi0gICAgTlVMTCwJCQkvKiA0LDQ1IGxhdGluL2N5cmlsIHRvIFVDUy0yICovCi0gICAgTlVM TCwJCQkvKiA0LDQ2IGxhdGluL2N5cmlsIHRvIFVURi04ICovCi0gICAgeGxja3IsCQkJLyogNCw0 NyBsYXRpbi9jeXJpbCB0byBLT0k4UiAqLwotICAgIHhsY2t1LAkJCS8qIDQsNDggbGF0aW4vY3ly aWwgdG8gS09JOFUgKi8KLSAgICB4bGNhcywJCQkvKiA0LDQ5IGxhdGluL2N5cmlsIHRvIENQMTI1 MiAqLwotICAgIE5VTEwsCQkJLyogNSwwMCAqLwotICAgIE5VTEwsCQkJLyogNSwwMSAqLwotICAg IE5VTEwsCQkJLyogNSwwMiAqLwotICAgIE5VTEwsCQkJLyogNSwwMyAqLwotICAgIE5VTEwsCQkJ LyogNSwwNCAqLwotICAgIE5VTEwsCQkJLyogNSwwNSAqLwotICAgIE5VTEwsCQkJLyogNSwwNiAq LwotICAgIE5VTEwsCQkJLyogNSwwNyAqLwotICAgIE5VTEwsCQkJLyogNSwwOCAqLwotICAgIE5V TEwsCQkJLyogNSwwOSAqLwotICAgIE5VTEwsCQkJLyogNSwxMCAqLwotICAgIE5VTEwsCQkJLyog NSwxMSAqLwotICAgIE5VTEwsCQkJLyogNSwxMiAqLwotICAgIE5VTEwsCQkJLyogNSwxMyAqLwot ICAgIE5VTEwsCQkJLyogNSwxNCAqLwotICAgIE5VTEwsCQkJLyogNSwxNSAqLwotICAgIE5VTEws CQkJLyogNSwxNiAqLwotICAgIE5VTEwsCQkJLyogNSwxNyAqLwotICAgIE5VTEwsCQkJLyogNSwx OCAqLwotICAgIE5VTEwsCQkJLyogNSwxOSAqLwotICAgIE5VTEwsCQkJLyogNSwyMCAqLwotICAg IE5VTEwsCQkJLyogNSwyMSAqLwotICAgIE5VTEwsCQkJLyogNSwyMiAqLwotICAgIE5VTEwsCQkJ LyogNSwyMyAqLwotICAgIE5VTEwsCQkJLyogNSwyNCAqLwotICAgIE5VTEwsCQkJLyogNSwyNSAq LwotICAgIE5VTEwsCQkJLyogNSwyNiAqLwotICAgIE5VTEwsCQkJLyogNSwyNyAqLwotICAgIE5V TEwsCQkJLyogNSwyOCAqLwotICAgIE5VTEwsCQkJLyogNSwyOSAqLwotICAgIE5VTEwsCQkJLyog NSwzMCAqLwotICAgIE5VTEwsCQkJLyogNSwzMSAqLwotICAgIE5VTEwsCQkJLyogNSwzMiAqLwot ICAgIE5VTEwsCQkJLyogNSwzMyAqLwotICAgIE5VTEwsCQkJLyogNSwzNCAqLwotICAgIE5VTEws CQkJLyogNSwzNSAqLwotICAgIE5VTEwsCQkJLyogNSwzNiAqLwotICAgIE5VTEwsCQkJLyogNSwz NyAqLwotICAgIE5VTEwsCQkJLyogNSwzOCAqLwotICAgIE5VTEwsCQkJLyogNSwzOSAqLwotICAg IE5VTEwsCQkJLyogNSw0MCAqLwotICAgIE5VTEwsCQkJLyogNSw0MSAqLwotICAgIE5VTEwsCQkJ LyogNSw0MiAqLwotICAgIE5VTEwsCQkJLyogNSw0MyAqLwotICAgIE5VTEwsCQkJLyogNSw0NCAq LwotICAgIE5VTEwsCQkJLyogNSw0NSAqLwotICAgIE5VTEwsCQkJLyogNSw0NiAqLwotICAgIE5V TEwsCQkJLyogNSw0NyAqLwotICAgIE5VTEwsCQkJLyogNSw0OCAqLwotICAgIE5VTEwsCQkJLyog NSw0OSAqLwotICAgIHhsaGFzLAkJCS8qIDYsMCBsYXRpbi9oZWJyZXcgdG8gdXMgYXNjaWkgKi8K LSAgICB4bGhhcywJCQkvKiA2LDEgbGF0aW4vaGVicmV3IHRvIHVrIGFzY2lpICovCi0gICAgeGxo YXMsIAkJICAgICAgICAvKiA2LDIgbGF0aW4vaGVicmV3IHRvIGR1dGNoIG5yYyAqLwotICAgIHhs aGFzLAkJCS8qIDYsMyBsYXRpbi9oZWJyZXcgdG8gZmlubmlzaCBhc2NpaSAqLwotICAgIHhsaGFz LAkJCS8qIDYsNCBsYXRpbi9oZWJyZXcgdG8gZnJlbmNoIG5yYyAqLwotICAgIHhsaGFzLAkJCS8q IDYsNSBsYXRpbi9oZWJyZXcgdG8gZnItY2FuYWRpYW4gbnJjICovCi0gICAgeGxoYXMsCQkJLyog Niw2IGxhdGluL2hlYnJldyB0byBnZXJtYW4gbnJjICovCi0gICAgeGxoYXMsCQkJLyogNiw3IGxh dGluL2hlYnJldyB0byBpdGFsaWFuIG5yYyAqLwotICAgIHhsaGFzLAkJCS8qIDYsOCBsYXRpbi9o ZWJyZXcgdG8gaHVuZ2FyaWFuIG5yYyAqLwotICAgIHhsaGFzLAkJCS8qIDYsOSBsYXRpbi9oZWJy ZXcgdG8gbm9yZ2UvZGFuaXNoIG5yYyAqLwotICAgIHhsaGFzLAkJCS8qIDYsMTAgbGF0aW4vaGVi cmV3IHRvIHBvcnR1Z3Vlc2UgbnJjICovCi0gICAgeGxoYXMsCQkJLyogNiwxMSBsYXRpbi9oZWJy ZXcgdG8gc3BhbmlzaCBucmMgKi8KLSAgICB4bGhhcywJCQkvKiA2LDEyIGxhdGluL2hlYnJldyB0 byBzd2VkaXNoIG5yYyAqLwotICAgIHhsaGFzLAkJCS8qIDYsMTMgbGF0aW4vaGVicmV3IHRvIHN3 aXNzIG5yYyAqLwotICAgIHhsaGwxLAkJCS8qIDYsMTQgbGF0aW4vaGVicmV3IHRvIGxhdGluLTEg Ki8KLSAgICB4bGhhcywJCQkvKiA2LDE1IGxhdGluL2hlYnJldyB0byBsYXRpbi0yICovCi0gICAg eGxobDEsCQkJLyogNiwxNiBsYXRpbi9oZWJyZXcgdG8gREVDIE1DUyAqLwotICAgIHhsaGFzLAkJ CS8qIDYsMTcgbGF0aW4vaGVicmV3IHRvIE5lWFQgKi8KLSAgICB4bGhhcywJCQkvKiA2LDE4IGxh dGluL2hlYnJldyB0byBDUDQzNyAqLwotICAgIHhsaGFzLAkJCS8qIDYsMTkgbGF0aW4vaGVicmV3 IHRvIENQODUwICovCi0gICAgeGxoYXMsCQkJLyogNiwyMCBsYXRpbi9oZWJyZXcgdG8gQ1A4NTIg Ki8KLSAgICB4bGhhcywJCQkvKiA2LDIxIGxhdGluL2hlYnJldyB0byBNYWNpbnRvc2ggTGF0aW4g Ki8KLSAgICB4bGhhcywJCQkvKiA2LDIyIGxhdGluL2hlYnJldyB0byBER0kgKi8KLSAgICB4bGhh cywgICAgICAgICAgICAgICAgICAgICAgLyogNiwyMyBsYXRpbi9oZWJyZXcgdG8gSFAgKi8KLSAg ICB4bGhhcywgICAgICAgICAgICAgICAgICAgICAgLyogNiwyNCBsYXRpbi9oZWJyZXcgdG8gTGF0 aW4vQ3lyaWxsaWMgKi8KLSAgICB4bGhhcywgICAgICAgICAgICAgICAgICAgICAgLyogNiwyNSBs YXRpbi9oZWJyZXcgdG8gQ1A4NjYgKi8KLSAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAg LyogNiwyNiBsYXRpbi9oZWJyZXcgdG8gU2hvcnQgS09JICovCi0gICAgeGxoYXMsCQkgICAgICAg CS8qIDYsMjcgbGF0aW4vaGVicmV3IHRvIE9sZCBLT0ktOCBDeXJpbGxpYyAqLwotICAgIE5VTEws CQkJLyogNiwyOCBsYXRpbi9oZWJyZXcgdG8gSklTLTcgKi8KLSAgICBOVUxMLAkJCS8qIDYsMjkg bGF0aW4vaGVicmV3IHRvIFNoaWZ0LUpJUyAqLwotICAgIE5VTEwsCQkJLyogNiwzMCBsYXRpbi9o ZWJyZXcgdG8gSi1FVUMgKi8KLSAgICBOVUxMLAkJCS8qIDYsMzEgbGF0aW4vaGVicmV3IHRvIERF QyBLYW5qaSAqLwotICAgIHhsaGg3LAkJCS8qIDYsMzIgbGF0aW4vaGVicmV3IHRvIEhlYnJldy03 ICovCi0gICAgTlVMTCwJCQkvKiA2LDMzIGxhdGluL2hlYnJldyB0byBMYXRpbi9IZWJyZXcgKi8K LSAgICB4bGg2MiwJCQkvKiA2LDM0IGxhdGluL2hlYnJldyB0byBDUDg2MiBIZWJyZXcgKi8KLSAg ICBOVUxMLAkJCS8qIDYsMzUgbGF0aW4vaGVicmV3IHRvIEVMT1QgOTI3IEdyZWVrICovCi0gICAg eGxoYXMsCQkJLyogNiwzNiBsYXRpbi9oZWJyZXcgdG8gTGF0aW4vR3JlZWsgKi8KLSAgICB4bGhh cywJCQkvKiA2LDM3IGxhdGluL2hlYnJldyB0byBDUDg2OSAqLwotICAgIHhsaGFzLAkJCS8qIDYs MzggbGF0aW4vaGVicmV3IHRvIExhdGluLTkgKi8KLSAgICB4bGhhcywJCQkvKiA2LDM5IGxhdGlu L2hlYnJldyB0byBDUDg1OCAqLwotICAgIHhsaGFzLAkJCS8qIDYsNDAgbGF0aW4vaGVicmV3IHRv IENQODU1ICovCi0gICAgeGxoYXMsCQkJLyogNiw0MSBsYXRpbi9oZWJyZXcgdG8gQ1AxMjUxICov Ci0gICAgeGxoYXMsCQkJLyogNiw0MiBsYXRpbi9oZWJyZXcgdG8gQnVsZ2FyaWFuICovCi0gICAg eGxoYXMsCQkJLyogNiw0MyBsYXRpbi9oZWJyZXcgdG8gQ1AxMjUwICovCi0gICAgeGxoYXMsCQkJ LyogNiw0NCBsYXRpbi9oZWJyZXcgdG8gTWF6b3ZpYSAqLwotICAgIE5VTEwsCQkJLyogNiw0NSBs YXRpbi9oZWJyZXcgdG8gVUNTLTIgKi8KLSAgICBOVUxMLAkJCS8qIDYsNDYgbGF0aW4vaGVicmV3 IHRvIFVURi04ICovCi0gICAgTlVMTCwJCQkvKiA2LDQ3IGxhdGluL2hlYnJldyB0byBLT0k4UiAq LwotICAgIE5VTEwsCQkJLyogNiw0OCBsYXRpbi9oZWJyZXcgdG8gS09JOFUgKi8KLSAgICB4bGh3 MSwJCQkvKiA2LDQ5IGxhdGluL2hlYnJldyB0byBDUDEyNTIgKi8KLSAgICB4bGdhcywJCQkvKiA3 LDAgbGF0aW4vZ3JlZWsgdG8gdXMgYXNjaWkgKi8KLSAgICB4bGdhcywJCQkvKiA3LDEgbGF0aW4v Z3JlZWsgdG8gdWsgYXNjaWkgKi8KLSAgICB4bGdhcywgCQkgICAgICAgIC8qIDcsMiBsYXRpbi9n cmVlayB0byBkdXRjaCBucmMgKi8KLSAgICB4bGdhcywJCQkvKiA3LDMgbGF0aW4vZ3JlZWsgdG8g ZmlubmlzaCBhc2NpaSAqLwotICAgIHhsZ2FzLAkJCS8qIDcsNCBsYXRpbi9ncmVlayB0byBmcmVu Y2ggbnJjICovCi0gICAgeGxnYXMsCQkJLyogNyw1IGxhdGluL2dyZWVrIHRvIGZyLWNhbmFkaWFu IG5yYyAqLwotICAgIHhsZ2FzLAkJCS8qIDcsNiBsYXRpbi9ncmVlayB0byBnZXJtYW4gbnJjICov Ci0gICAgeGxnYXMsCQkJLyogNyw3IGxhdGluL2dyZWVrIHRvIGl0YWxpYW4gbnJjICovCi0gICAg eGxnYXMsCQkJLyogNyw4IGxhdGluL2dyZWVrIHRvIGh1bmdhcmlhbiBucmMgKi8KLSAgICB4bGdh cywJCQkvKiA3LDkgbGF0aW4vZ3JlZWsgdG8gbm9yZ2UvZGFuaXNoIG5yYyAqLwotICAgIHhsZ2Fz LAkJCS8qIDcsMTAgbGF0aW4vZ3JlZWsgdG8gcG9ydHVndWVzZSBucmMgKi8KLSAgICB4bGdhcywJ CQkvKiA3LDExIGxhdGluL2dyZWVrIHRvIHNwYW5pc2ggbnJjICovCi0gICAgeGxnYXMsCQkJLyog NywxMiBsYXRpbi9ncmVlayB0byBzd2VkaXNoIG5yYyAqLwotICAgIHhsZ2FzLAkJCS8qIDcsMTMg bGF0aW4vZ3JlZWsgdG8gc3dpc3MgbnJjICovCi0gICAgeGxnYXMsCQkJLyogNywxNCBsYXRpbi9n cmVlayB0byBsYXRpbi0xICovCi0gICAgeGxnYXMsCQkJLyogNywxNSBsYXRpbi9ncmVlayB0byBs YXRpbi0yICovCi0gICAgeGxnYXMsCQkJLyogNywxNiBsYXRpbi9ncmVlayB0byBERUMgTUNTICov Ci0gICAgeGxnYXMsCQkJLyogNywxNyBsYXRpbi9ncmVlayB0byBOZVhUICovCi0gICAgeGxnYXMs CQkJLyogNywxOCBsYXRpbi9ncmVlayB0byBDUDQzNyAqLwotICAgIHhsZ2FzLAkJCS8qIDcsMTkg bGF0aW4vZ3JlZWsgdG8gQ1A4NTAgKi8KLSAgICB4bGdhcywJCQkvKiA3LDIwIGxhdGluL2dyZWVr IHRvIENQODUyICovCi0gICAgeGxnYXMsCQkJLyogNywyMSBsYXRpbi9ncmVlayB0byBNYWNpbnRv c2ggTGF0aW4gKi8KLSAgICB4bGdhcywJCQkvKiA3LDIyIGxhdGluL2dyZWVrIHRvIERHSSAqLwot ICAgIHhsZ2FzLAkJCS8qIDcsMjMgbGF0aW4vZ3JlZWsgdG8gSFAgKi8KLSAgICB4bGVmdDE2MCwg ICAgICAgICAgICAgICAgICAgLyogNywyNCBsYXRpbi9ncmVlayB0byBMYXRpbi9DeXJpbGxpYyAq LwotICAgIHhsZWZ0MTI4LCAgICAgICAgICAgICAgICAgICAvKiA3LDI1IGxhdGluL2dyZWVrIHRv IENQODY2ICovCi0gICAgeGFzc2ssICAgICAgICAgICAgICAgICAgICAgIC8qIDcsMjYgbGF0aW4v Z3JlZWsgdG8gU2hvcnQgS09JICovCi0gICAgeGxlZnQxNjAsCQkgICAgICAgCS8qIDcsMjcgbGF0 aW4vZ3JlZWsgdG8gT2xkIEtPSS04IEdyZWVrICovCi0gICAgTlVMTCwJCQkvKiA3LDI4IGxhdGlu L2dyZWVrIHRvIEpJUy03ICovCi0gICAgTlVMTCwJCQkvKiA3LDI5IGxhdGluL2dyZWVrIHRvIFNo aWZ0LUpJUyAqLwotICAgIE5VTEwsCQkJLyogNywzMCBsYXRpbi9ncmVlayB0byBKLUVVQyAqLwot ICAgIE5VTEwsCQkJLyogNywzMSBsYXRpbi9ncmVlayB0byBERUMgS2FuamkgKi8KLSAgICBOVUxM LAkJCS8qIDcsMzIgbGF0aW4vZ3JlZWsgdG8gSGVicmV3LTcgKi8KLSAgICB4bGdhcywJCQkvKiA3 LDMzIGxhdGluL2dyZWVrIHRvIExhdGluL0hlYnJldyAqLwotICAgIHhsZ2FzLAkJCS8qIDcsMzQg bGF0aW4vZ3JlZWsgdG8gQ1A4NjIgSGVicmV3ICovCi0gICAgeGxnZWcsCQkJLyogNywzNSBsYXRp bi9ncmVlayB0byBFTE9UIDkyNyBHcmVlayAqLwotICAgIE5VTEwsCQkJLyogNywzNiBsYXRpbi9n cmVlayB0byBMYXRpbi9HcmVlayAqLwotICAgIHhsZzY5LAkJCS8qIDcsMzcgbGF0aW4vZ3JlZWsg dG8gQ1A4NjkgKi8KLSAgICB4bGdhcywJCQkvKiA3LDM4IGxhdGluL2dyZWVrIHRvIExhdGluLTkg Ki8KLSAgICB4bGdhcywJCQkvKiA3LDM5IGxhdGluL2dyZWVrIHRvIENQODU4ICovCi0gICAgeGxl ZnQxMjgsCQkJLyogNyw0MCBsYXRpbi9ncmVlayB0byBDUDg1NSAqLwotICAgIHhsZWZ0MTI4LAkJ CS8qIDcsNDEgbGF0aW4vZ3JlZWsgdG8gQ1AxMjUxICovCi0gICAgeGxlZnQxMjgsCQkJLyogNyw0 MiBsYXRpbi9ncmVlayB0byBCdWxnYXJpYW4gKi8KLSAgICB4bGVmdDEyOCwJCQkvKiA3LDQzIGxh dGluL2dyZWVrIHRvIENQMTI1MCAqLwotICAgIHhsZWZ0MTI4LAkJCS8qIDcsNDQgbGF0aW4vZ3Jl ZWsgdG8gTWF6b3ZpYSAqLwotICAgIE5VTEwsCQkJLyogNyw0NSBsYXRpbi9ncmVlayB0byBVQ1Mt MiAqLwotICAgIE5VTEwsCQkJLyogNyw0NiBsYXRpbi9ncmVlayB0byBVVEYtOCAqLwotICAgIE5V TEwsCQkJLyogNyw0NyBsYXRpbi9ncmVlayB0byBLT0k4UiAqLwotICAgIE5VTEwsCQkJLyogNyw0 OCBsYXRpbi9ncmVlayB0byBLT0k4VSAqLwotICAgIHhsZ3cxLAkJCS8qIDcsNDkgbGF0aW4vZ3Jl ZWsgdG8gQ1AxMjUyICovCi0gICAgemw5YXMsCQkJLyogOCwwIGxhdGluLTkgdG8gdXMgYXNjaWkg Ki8KLSAgICB4bDF1aywJCQkvKiA4LDEgbGF0aW4tOSB0byB1ayBhc2NpaSAqLwotICAgIHhsMWR1 LAkJCS8qIDgsMiBsYXRpbi05IHRvIGR1dGNoIG5yYyAqLwotICAgIHhsMWZpLAkJCS8qIDgsMyBs YXRpbi05IHRvIGZpbm5pc2ggbnJjICovCi0gICAgeGwxZnIsCQkJLyogOCw0IGxhdGluLTkgdG8g ZnJlbmNoIG5yYyAqLwotICAgIHhsMWZjLAkJCS8qIDgsNSBsYXRpbi05IHRvIGZyLWNhbmFkaWFu IG5yYyAqLwotICAgIHhsMWdlLAkJCS8qIDgsNiBsYXRpbi05IHRvIGdlcm1hbiBucmMgKi8KLSAg ICB4bDFpdCwJCQkvKiA4LDcgbGF0aW4tOSB0byBpdGFsaWFuIG5yYyAqLwotICAgIHhsMWh1LAkJ CS8qIDgsOCBsYXRpbi05IHRvIGh1bmdhcmlhbiBucmMgKi8KLSAgICB4bDFubywJCQkvKiA4LDkg bGF0aW4tOSB0byBub3JnZS9kYW5pc2ggbnJjICovCi0gICAgeGwxcG8sCQkJLyogOCwxMCBsYXRp bi05IHRvIHBvcnR1Z3Vlc2UgbnJjICovCi0gICAgeGwxc3AsCQkJLyogOCwxMSBsYXRpbi05IHRv IHNwYW5pc2ggbnJjICovCi0gICAgeGwxc3csCQkJLyogOCwxMiBsYXRpbi05IHRvIHN3ZWRpc2gg bnJjICovCi0gICAgeGwxY2gsCQkJLyogOCwxMyBsYXRpbi05IHRvIHN3aXNzIG5yYyAqLwotICAg IE5VTEwsCQkJLyogOCwxNCBsYXRpbi05IHRvIGxhdGluLTEgKi8KLSAgICB4bDFsMiwJCQkvKiA4 LDE1IGxhdGluLTkgdG8gbGF0aW4tMiAqLwotICAgIHhsOWRtLAkJCS8qIDgsMTYgbGF0aW4tOSB0 byBERUMgTUNTICovCi0gICAgeGw5bmUsCQkJLyogOCwxNyBsYXRpbi05IHRvIE5lWFQgKi8KLSAg ICB4bDE0MywJCQkvKiA4LDE4IGxhdGluLTkgdG8gQ1A0MzcgKi8KLSAgICB4bDE4NSwJCQkvKiA4 LDE5IGxhdGluLTkgdG8gQ1A4NTAgKi8KLSAgICB4bDE1MiwJCQkvKiA4LDIwIGxhdGluLTkgdG8g Q1A4NTIgKi8KLSAgICB4bDFhcSwJCQkvKiA4LDIxIGxhdGluLTkgdG8gTWFjaW50b3NoIExhdGlu ICovCi0gICAgeGwxZGcsCQkJLyogOCwyMiBsYXRpbi05IHRvIERHSSAqLwotICAgIHhsMXI4LAkJ CS8qIDgsMjMgbGF0aW4tOSB0byBIUCBSb21hbjggKi8KLSAgICB6bDFhcywJCQkvKiA4LDI0IGxh dGluLTkgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KLSAgICB6bDFhcywgICAgICAgICAgICAgICAgICAg ICAgLyogOCwyNSBsYXRpbi05IHRvIENQODY2ICovCi0gICAgeGwxc2ssICAgICAgICAgICAgICAg ICAgICAgIC8qIDgsMjYgbGF0aW4tOSB0byBTaG9ydCBLT0kgKi8KLSAgICB6bDFhcywJCSAgICAg ICAJLyogOCwyNyBsYXRpbi05IHRvIE9sZCBLT0ktOCBDeXJpbGxpYyAqLwotICAgIE5VTEwsCQkJ LyogOCwyOCBsYXRpbi05IHRvIEpJUy03ICovCi0gICAgTlVMTCwJCQkvKiA4LDI5IGxhdGluLTkg dG8gU2hpZnQtSklTICovCi0gICAgTlVMTCwJCQkvKiA4LDMwIGxhdGluLTkgdG8gSi1FVUMgKi8K LSAgICBOVUxMLAkJCS8qIDgsMzEgbGF0aW4tOSB0byBERUMgS2FuamkgKi8KLSAgICB4bDFoNywJ CQkvKiA4LDMyIGxhdGluLTkgdG8gSGVicmV3LTcgKi8KLSAgICB4bDFsaCwJCQkvKiA4LDMzIGxh dGluLTkgdG8gTGF0aW4vSGVicmV3ICovCi0gICAgeGwxNjIsCQkJLyogOCwzNCBsYXRpbi05IHRv IENQODYyIEhlYnJldyAqLwotICAgIHhsMWVnLAkJCS8qIDgsMzUgbGF0aW4tOSB0byBFTE9UIDky NyBHcmVlayAqLwotICAgIHhsMWxnLAkJCS8qIDgsMzYgbGF0aW4tOSB0byBMYXRpbi9HcmVlayAq LwotICAgIHhsMTY5LAkJCS8qIDgsMzcgbGF0aW4tOSB0byBDUDg2OSAqLwotICAgIE5VTEwsCQkJ LyogOCwzOCBsYXRpbi05IHRvIExhdGluOSAqLwotICAgIHhsOTU4LAkJCS8qIDgsMzkgbGF0aW4t OSB0byBDUDg1OCAqLwotICAgIHpsMWFzLAkJCS8qIDgsNDAgbGF0aW4tOSB0byBDUDg1NSAqLwot ICAgIHpsMWFzLAkJCS8qIDgsNDEgbGF0aW4tOSB0byBDUDEyNTEgKi8KLSAgICB4bDFhcywJCQkv KiA4LDQyIGxhdGluLTkgdG8gQnVsZ2FyaWFuICovCi0gICAgeGw5MTI1MCwJCQkvKiA4LDQzIGxh dGluLTkgdG8gQ1AxMjUwICovCi0gICAgeGw5bXosCQkJLyogOCw0NCBsYXRpbi05IHRvIE1hem92 aWEgKi8KLSAgICBOVUxMLAkJCS8qIDgsNDUgbGF0aW4tOSB0byBVQ1MtMiAqLwotICAgIE5VTEws CQkJLyogOCw0NiBsYXRpbi05IHRvIFVURi04ICovCi0gICAgemwxYXMsCQkJLyogOCw0NyBsYXRp bi05IHRvIEtPSTgtUiAqLwotICAgIHpsMWFzLAkJCS8qIDgsNDggbGF0aW4tOSB0byBLT0k4LVUg Ki8KLSAgICB4bDl3MSwJCQkvKiA4LDQ5IGxhdGluLTkgdG8gQ1AxMjUyICovCi0gICAgTlVMTCwJ CQkvKiA5LDAwIFVuaWNvZGUuLi4gKi8KLSAgICBOVUxMLAkJCS8qIDksMDEgKi8KLSAgICBOVUxM LAkJCS8qIDksMDIgKi8KLSAgICBOVUxMLAkJCS8qIDksMDMgKi8KLSAgICBOVUxMLAkJCS8qIDks MDQgKi8KLSAgICBOVUxMLAkJCS8qIDksMDUgKi8KLSAgICBOVUxMLAkJCS8qIDksMDYgKi8KLSAg ICBOVUxMLAkJCS8qIDksMDcgKi8KLSAgICBOVUxMLAkJCS8qIDksMDggKi8KLSAgICBOVUxMLAkJ CS8qIDksMDkgKi8KLSAgICBOVUxMLAkJCS8qIDksMTAgKi8KLSAgICBOVUxMLAkJCS8qIDksMTEg Ki8KLSAgICBOVUxMLAkJCS8qIDksMTIgKi8KLSAgICBOVUxMLAkJCS8qIDksMTMgKi8KLSAgICBO VUxMLAkJCS8qIDksMTQgKi8KLSAgICBOVUxMLAkJCS8qIDksMTUgKi8KLSAgICBOVUxMLAkJCS8q IDksMTYgKi8KLSAgICBOVUxMLAkJCS8qIDksMTcgKi8KLSAgICBOVUxMLAkJCS8qIDksMTggKi8K LSAgICBOVUxMLAkJCS8qIDksMTkgKi8KLSAgICBOVUxMLAkJCS8qIDksMjAgKi8KLSAgICBOVUxM LAkJCS8qIDksMjEgKi8KLSAgICBOVUxMLAkJCS8qIDksMjIgKi8KLSAgICBOVUxMLAkJCS8qIDks MjMgKi8KLSAgICBOVUxMLAkJCS8qIDksMjQgKi8KLSAgICBOVUxMLAkJCS8qIDksMjUgKi8KLSAg ICBOVUxMLAkJCS8qIDksMjYgKi8KLSAgICBOVUxMLAkJCS8qIDksMjcgKi8KLSAgICBOVUxMLAkJ CS8qIDksMjggKi8KLSAgICBOVUxMLAkJCS8qIDksMjkgKi8KLSAgICBOVUxMLAkJCS8qIDksMzAg Ki8KLSAgICBOVUxMLAkJCS8qIDksMzEgKi8KLSAgICBOVUxMLAkJCS8qIDksMzIgKi8KLSAgICBO VUxMLAkJCS8qIDksMzMgKi8KLSAgICBOVUxMLAkJCS8qIDksMzQgKi8KLSAgICBOVUxMLAkJCS8q IDksMzUgKi8KLSAgICBOVUxMLAkJCS8qIDksMzYgKi8KLSAgICBOVUxMLAkJCS8qIDksMzcgKi8K LSAgICBOVUxMLAkJCS8qIDksMzggKi8KLSAgICBOVUxMLAkJCS8qIDksMzkgKi8KLSAgICBOVUxM LAkJCS8qIDksNDAgKi8KLSAgICBOVUxMLAkJCS8qIDksNDEgKi8KLSAgICBOVUxMLAkJCS8qIDks NDIgKi8KLSAgICBOVUxMLAkJCS8qIDksNDMgKi8KLSAgICBOVUxMLAkJCS8qIDksNDQgKi8KLSAg ICBOVUxMLAkJCS8qIDksNDUgKi8KLSAgICBOVUxMLAkJCS8qIDksNDYgKi8KLSAgICBOVUxMLAkJ CS8qIDksNDcgKi8KLSAgICBOVUxMLAkJCS8qIDksNDggKi8KLSAgICBOVUxMLAkJCS8qIDksNDkg Ki8KLSAgICBOVUxMLAkJCS8qIDEwLDAwICovCi0gICAgTlVMTCwJCQkvKiAxMCwwMSAqLwotICAg IE5VTEwsCQkJLyogMTAsMDIgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDAzICovCi0gICAgTlVMTCwJ CQkvKiAxMCwwNCAqLwotICAgIE5VTEwsCQkJLyogMTAsMDUgKi8KLSAgICBOVUxMLAkJCS8qIDEw LDA2ICovCi0gICAgTlVMTCwJCQkvKiAxMCwwNyAqLwotICAgIE5VTEwsCQkJLyogMTAsMDggKi8K LSAgICBOVUxMLAkJCS8qIDEwLDA5ICovCi0gICAgTlVMTCwJCQkvKiAxMCwxMCAqLwotICAgIE5V TEwsCQkJLyogMTAsMTEgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDEyICovCi0gICAgTlVMTCwJCQkv KiAxMCwxMyAqLwotICAgIE5VTEwsCQkJLyogMTAsMTQgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDE1 ICovCi0gICAgTlVMTCwJCQkvKiAxMCwxNiAqLwotICAgIE5VTEwsCQkJLyogMTAsMTcgKi8KLSAg ICBOVUxMLAkJCS8qIDEwLDE4ICovCi0gICAgTlVMTCwJCQkvKiAxMCwxOSAqLwotICAgIE5VTEws CQkJLyogMTAsMjAgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDIxICovCi0gICAgTlVMTCwJCQkvKiAx MCwyMiAqLwotICAgIE5VTEwsCQkJLyogMTAsMjMgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDI0ICov Ci0gICAgTlVMTCwJCQkvKiAxMCwyNSAqLwotICAgIE5VTEwsCQkJLyogMTAsMjYgKi8KLSAgICBO VUxMLAkJCS8qIDEwLDI3ICovCi0gICAgTlVMTCwJCQkvKiAxMCwyOCAqLwotICAgIE5VTEwsCQkJ LyogMTAsMjkgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDMwICovCi0gICAgTlVMTCwJCQkvKiAxMCwz MSAqLwotICAgIE5VTEwsCQkJLyogMTAsMzIgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDMzICovCi0g ICAgTlVMTCwJCQkvKiAxMCwzNCAqLwotICAgIE5VTEwsCQkJLyogMTAsMzUgKi8KLSAgICBOVUxM LAkJCS8qIDEwLDM2ICovCi0gICAgTlVMTCwJCQkvKiAxMCwzNyAqLwotICAgIE5VTEwsCQkJLyog MTAsMzggKi8KLSAgICBOVUxMLAkJCS8qIDEwLDM5ICovCi0gICAgTlVMTCwJCQkvKiAxMCw0MCAq LwotICAgIE5VTEwsCQkJLyogMTAsNDEgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDQyICovCi0gICAg TlVMTCwJCQkvKiAxMCw0MyAqLwotICAgIE5VTEwsCQkJLyogMTAsNDQgKi8KLSAgICBOVUxMLAkJ CS8qIDEwLDQ1ICovCi0gICAgTlVMTCwJCQkvKiAxMCw0NiAqLwotICAgIE5VTEwsCQkJLyogMTAs NDcgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDQ4ICovCi0gICAgTlVMTAkJCS8qIDEwLDQ5ICovCi19 OwotaW50IG54bHIgPSAoc2l6ZW9mKHhscikgLyBzaXplb2YoQ0hBUiAqKSk7Ci0KLS8qCi0gIFRy YW5zbGF0aW9uIGZ1bmN0aW9uIHRhYmxlIGZvciBzZW5kaW5nIGZpbGVzLgotICBBcnJheSBvZiBw b2ludGVycyB0byBmdW5jdGlvbnMgZm9yIHRyYW5zbGF0aW5nIGZyb20gdGhlIGxvY2FsIGZpbGUK LSAgY2hhcmFjdGVyIHNldCB0byB0aGUgdHJhbnNmZXIgY2hhcmFjdGVyIHNldC4gIEluZGV4ZWQg aW4gdGhlIHNhbWUKLSAgd2F5IGFzIHRoZSB4bHIgYXJyYXkgYWJvdmUsIGJ1dCB3aXRoIHRoZSBp bmRpY2VzIHJldmVyc2VkLgotKi8KLSNpZmRlZiBDS19BTlNJQwotQ0hBUiAoKnhsc1tNQVhUQ1NF VFMrMV1bTUFYRkNTRVRTKzFdKShDSEFSKSA9Ci0jZWxzZQotQ0hBUiAoKnhsc1tNQVhUQ1NFVFMr MV1bTUFYRkNTRVRTKzFdKSgpID0KLSNlbmRpZiAvKiBDS19BTlNJQyAqLwotewotICAgIE5VTEws CQkJLyogMCwwIHVzIGFzY2lpIHRvIHRyYW5zcGFyZW50ICovCi0gICAgTlVMTCwJCQkvKiAwLDEg dWsgYXNjaWkgdG8gdHJhbnNwYXJlbnQgKi8KLSAgICBOVUxMLAkJCS8qIDAsMiBkdXRjaCBucmMg dG8gdHJhbnNwYXJlbnQgKi8KLSAgICBOVUxMLAkJCS8qIDAsMyBmaW5uaXNoIG5yYyB0byB0cmFu c3BhcmVudCAqLwotICAgIE5VTEwsCQkJLyogMCw0IGZyZW5jaCBucmMgdG8gdHJhbnNwYXJlbnQg Ki8KLSAgICBOVUxMLAkJCS8qIDAsNSBmci1jYW5hZGlhbiBucmMgdG8gdHJhbnNwYXJlbnQgKi8K LSAgICBOVUxMLAkJCS8qIDAsNiBnZXJtYW4gbnJjIHRvIHRyYW5zcGFyZW50ICovCi0gICAgTlVM TCwJCQkvKiAwLDcgaHVuZ2FyaWFuIG5yYyB0byB0cmFuc3BhcmVudCAqLwotICAgIE5VTEwsCQkJ LyogMCw4IGl0YWxpYW4gbnJjIHRvIHRyYW5zcGFyZW50ICovCi0gICAgTlVMTCwJCQkvKiAwLDkg bm9yZ2UvZGFuaXNoIG5yYyB0byB0cmFuc3BhcmVudCAqLwotICAgIE5VTEwsCQkJLyogMCwxMCBw b3J0dWd1ZXNlIG5yYyB0byB0cmFuc3BhcmVudCAqLwotICAgIE5VTEwsCQkJLyogMCwxMSBzcGFu aXNoIG5yYyB0byB0cmFuc3BhcmVudCAqLwotICAgIE5VTEwsCQkJLyogMCwxMiBzd2VkaXNoIG5y YyB0byB0cmFuc3BhcmVudCAqLwotICAgIE5VTEwsCQkJLyogMCwxMyBzd2lzcyBucmMgdG8gdHJh bnNwYXJlbnQgKi8KLSAgICBOVUxMLAkJCS8qIDAsMTQgbGF0aW4tMSB0byB0cmFuc3BhcmVudCAq LwotICAgIE5VTEwsCQkJLyogMCwxNSBsYXRpbi0yIHRvIHRyYW5zcGFyZW50ICovCi0gICAgTlVM TCwJCQkvKiAwLDE2IERFQyBNQ1MgdG8gdHJhbnNwYXJlbnQgKi8KLSAgICBOVUxMLAkJCS8qIDAs MTcgTmVYVCB0byB0cmFuc3BhcmVudCAqLwotICAgIE5VTEwsCQkJLyogMCwxOCBDUDQzNyB0byB0 cmFuc3BhcmVudCAqLwotICAgIE5VTEwsCQkJLyogMCwxOSBDUDg1MCB0byB0cmFuc3BhcmVudCAq LwotICAgIE5VTEwsCQkJLyogMCwyMCBDUDg1MiB0byB0cmFuc3BhcmVudCAqLwotICAgIE5VTEws CQkJLyogMCwyMSBNYWNpbnRvc2ggTGF0aW4gdG8gdHJhbnNwYXJlbnQgKi8KLSAgICBOVUxMLAkJ CS8qIDAsMjIgREdJIHRvIHRyYW5zcGFyZW50ICovCi0gICAgTlVMTCwJCQkvKiAwLDIzIEhQIHRv IHRyYW5zcGFyZW50ICovCi0gICAgTlVMTCwJCQkvKiAwLDI0IExhdGluL0N5cmlsbGljIHRvIHRy YW5zcGFyZW50ICovCi0gICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgIC8qIDAsMjUgQ1A4 NjYgdG8gdHJhbnNwYXJlbnQgKi8KLSAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgLyog MCwyNiBTaG9ydCBLT0kgdG8gdHJhbnNwYXJlbnQgKi8KLSAgICBOVUxMLCAgICAgICAgICAgICAg ICAgICAgICAgLyogMCwyNyBPbGQgS09JLTggdG8gdHJhbnNwYXJlbnQgKi8KLSAgICBOVUxMLAkJ CS8qIDAsMjggSklTLTcgdG8gdHJhbnNwYXJlbnQgKi8KLSAgICBOVUxMLAkJCS8qIDAsMjkgU2hp ZnQgSklTIHRvIHRyYW5zcGFyZW50ICovCi0gICAgTlVMTCwJCQkvKiAwLDMwIEphcGFuZXNlIEVV QyB0byB0cmFuc3BhcmVudCAqLwotICAgIE5VTEwsCQkJLyogMCwzMSBERUMgS2FuamkgdG8gdHJh bnNwYXJlbnQgKi8KLSAgICBOVUxMLAkJCS8qIDAsMzIgSGVicmV3LTcgdG8gdHJhbnNwYXJlbnQg Ki8KLSAgICBOVUxMLAkJCS8qIDAsMzMgTGF0aW4vSGVicmV3IHRvIHRyYW5zcGFyZW50ICovCi0g ICAgTlVMTCwJCQkvKiAwLDM0IENQODYyIEhlYnJldyB0byB0cmFuc3BhcmVudCAqLwotICAgIE5V TEwsCQkJLyogMCwzNSBFTE9UIDkyNyBHcmVlayB0byB0cmFuc3BhcmVudCAqLwotICAgIE5VTEws CQkJLyogMCwzNiBMYXRpbi9HcmVlayB0byB0cmFuc3BhcmVudCAqLwotICAgIE5VTEwsCQkJLyog MCwzNyBDUDg2OSB0byB0cmFuc3BhcmVudCAqLwotICAgIE5VTEwsCQkJLyogMCwzOCBMYXRpbi05 IHRvIHRyYW5zcGFyZW50ICovCi0gICAgTlVMTCwJCQkvKiAwLDM5IENQODU4IHRvIHRyYW5zcGFy ZW50ICovCi0gICAgTlVMTCwJCQkvKiAwLDQwIENQODU1IHRvIHRyYW5zcGFyZW50ICovCi0gICAg TlVMTCwJCQkvKiAwLDQxIENQMTI1MSB0byB0cmFuc3BhcmVudCAqLwotICAgIE5VTEwsCQkJLyog MCw0MiBCdWxnYXJpYW4gdG8gdHJhbnNwYXJlbnQgKi8KLSAgICBOVUxMLAkJCS8qIDAsNDMgQ1Ax MjUwIHRvIHRyYW5zcGFyZW50ICovCi0gICAgTlVMTCwJCQkvKiAwLDQ0IE1hem92aWEgdG8gdHJh bnNwYXJlbnQgKi8KLSAgICBOVUxMLAkJCS8qIDAsNDUgVUNTLTIgdG8gdHJhbnNwYXJlbnQgKi8K LSAgICBOVUxMLAkJCS8qIDAsNDYgVVRGLTggdG8gdHJhbnNwYXJlbnQgKi8KLSAgICBOVUxMLAkJ CS8qIDAsNDcgS09JOFIgdG8gdHJhbnNwYXJlbnQgKi8KLSAgICBOVUxMLAkJCS8qIDAsNDggS09J OFUgdG8gdHJhbnNwYXJlbnQgKi8KLSAgICBOVUxMLAkJCS8qIDAsNDkgQ1AxMjUyIHRvIHRyYW5z cGFyZW50ICovCi0gICAgTlVMTCwJCQkvKiAxLDAgdXMgYXNjaWkgdG8gYXNjaWkgKi8KLSAgICBO VUxMLAkJCS8qIDEsMSB1ayBhc2NpaSB0byBhc2NpaSAqLwotICAgIHhkdWFzLAkJCS8qIDEsMiBk dXRjaCBucmMgdG8gYXNjaWkgKi8KLSAgICB4ZmlhcywJCQkvKiAxLDMgZmlubmlzaCBucmMgdG8g YXNjaWkgKi8KLSAgICB4ZnJhcywJCQkvKiAxLDQgZnJlbmNoIG5yYyB0byBhc2NpaSAqLwotICAg IHhmY2FzLAkJCS8qIDEsNSBmcmVuY2ggY2FuYWRpYW4gbnJjIHRvIGFzY2lpICovCi0gICAgeGdl YXMsCQkJLyogMSw2IGdlcm1hbiBucmMgdG8gYXNjaWkgKi8KLSAgICB4aHVhcywJCQkvKiAxLDcg aHVuZ2FyaWFuIG5yYyB0byBhc2NpaSAqLwotICAgIHhpdGFzLAkJCS8qIDEsOCBpdGFsaWFuIG5y YyB0byBhc2NpaSAqLwotICAgIHhub2FzLAkJCS8qIDEsOSBub3J3ZWdpYW4vZGFuaXNoIG5yYyB0 byBhc2NpaSAqLwotICAgIHhwb2FzLAkJCS8qIDEsMTAgcG9ydHVndWVzZSBucmMgdG8gYXNjaWkg Ki8KLSAgICB4c3BhcywJCQkvKiAxLDExIHNwYW5pc2ggbnJjIHRvIGFzY2lpICovCi0gICAgeHN3 YXMsCQkJLyogMSwxMiBzd2VkaXNoIG5yYyB0byBhc2NpaSAqLwotICAgIHhjaGFzLAkJCS8qIDEs MTMgc3dpc3MgbnJjIHRvIGFzY2lpICovCi0gICAgeGwxYXMsCQkJLyogMSwxNCBsYXRpbi0xIHRv IGFzY2lpICovCi0gICAgeGwyYXMsCQkJLyogMSwxNSBsYXRpbi0yIHRvIGFzY2lpICovCi0gICAg eGRtYXMsCQkJLyogMSwxNiBkZWMgbWNzIHRvIGFzY2lpICovCi0gICAgeG5lYXMsCQkJLyogMSwx NyBOZVhUIHRvIGFzY2lpICovCi0gICAgeDQzYXMsCQkJLyogMSwxOCBDUDQzNyB0byBhc2NpaSAq LwotICAgIHg4NWFzLAkJCS8qIDEsMTkgQ1A4NTAgdG8gYXNjaWkgKi8KLSAgICB4NTJhcywJCQkv KiAxLDIwIENQODUwIHRvIGFzY2lpICovCi0gICAgeGFxYXMsCQkJLyogMSwyMSBNYWNpbnRvc2gg TGF0aW4gdG8gYXNjaWkgKi8KLSAgICB4ZGdhcywJCQkvKiAxLDIyIERHSSB0byBhc2NpaSAqLwot ICAgIHhyOGFzLAkJCS8qIDEsMjMgSFAgdG8gQVNDSUkgKi8KLSAgICB4bGNhcywJCQkvKiAxLDI0 IExhdGluL0N5cmlsbGljIHRvIEFTQ0lJICovCi0gICAgeGFjYXMsICAgICAgICAgICAgICAgICAg ICAgIC8qIDEsMjUgQ1A4NjYgdG8gQVNDSUkgKi8KLSAgICB4c2thcywJCQkvKiAxLDI2IFNob3J0 IEtPSSB0byBBU0NJSSAqLwotICAgIHhrOGFzLCAgICAgICAgICAgICAgICAgICAgICAvKiAxLDI3 IE9sZCBLT0ktOCBDeXJpbGxpYyB0byBBU0NJSSAqLwotICAgIE5VTEwsCQkJLyogMSwyOCAqLwot ICAgIE5VTEwsCQkJLyogMSwyOSAqLwotICAgIE5VTEwsCQkJLyogMSwzMCAqLwotICAgIE5VTEws CQkJLyogMSwzMSAqLwotICAgIHhoN2FzLAkJCS8qIDEsMzIgSGVicmV3LTcgdG8gQVNDSUkgKi8K LSAgICB4bGhhcywJCQkvKiAxLDMzIExhdGluL0hlYnJldyB0byBBU0NJSSAqLwotICAgIHg2MmFz LAkJCS8qIDEsMzQgQ1A4NjIgSGVicmV3IHRvIEFTQ0lJICovCi0gICAgeGVnYXMsCQkJLyogMSwz NSBFTE9UIDkyNyBHcmVlayB0byBBU0NJSSAqLwotICAgIHhsZ2FzLAkJCS8qIDEsMzYgTGF0aW4v R3JlZWsgdG8gQVNDSUkgKi8KLSAgICB4NjlhcywJCQkvKiAxLDM3IENQODY5IHRvIEFTQ0lJICov Ci0gICAgeGw5YXMsCQkJLyogMSwzOCBMYXRpbi05IHRvIEFTQ0lJICovCi0gICAgeDU4YXMsCQkJ LyogMSwzOSBDUDg1OCB0byBBU0NJSSAqLwotICAgIHg1NWFzLAkJCS8qIDEsNDAgQ1A4NTUgdG8g QVNDSUkgKi8KLSAgICB4MTI1MWFzLAkJCS8qIDEsNDEgQ1AxMjUxIHRvIEFTQ0lJICovCi0gICAg eGxlZnQxMjgsCQkJLyogMSw0MiBCdWxnYXJpYW4gdG8gQVNDSUkgKi8KLSAgICB4MTI1MGFzLAkJ CS8qIDEsNDMgQ1AxMjUwIHRvIEFTQ0lJICovCi0gICAgeG16YXMsCQkJLyogMSw0NCBNYXpvdmlh IHRvIEFTQ0lJICovCi0gICAgTlVMTCwJCQkvKiAxLDQ1IFVDUy0yIHRvIEFTQ0lJICovCi0gICAg TlVMTCwJCQkvKiAxLDQ2IFVURi04IHRvIEFTQ0lJICovCi0gICAgeGs4YXMsCQkJLyogMSw0NyBL T0k4UiB0byBBU0NJSSAqLwotICAgIHhrOGFzLAkJCS8qIDEsNDggS09JOFUgdG8gQVNDSUkgKi8K LSAgICB4dzFhcywJCQkvKiAxLDQ5IENQMTI1MiB0byBBU0NJSSAqLwotICAgIE5VTEwsCQkJLyog MiwwIHVzIGFzY2lpIHRvIGxhdGluLTEgKi8KLSAgICB4dWtsMSwJCQkvKiAyLDEgdWsgYXNjaWkg dG8gbGF0aW4tMSAqLwotICAgIHhkdWwxLAkJCS8qIDIsMiBkdXRjaCBucmMgdG8gbGF0aW4tMSAq LwotICAgIHhmaWwxLAkJCS8qIDIsMyBmaW5uaXNoIG5yYyB0byBsYXRpbi0xICovCi0gICAgeGZy bDEsCQkJLyogMiw0IGZyZW5jaCBucmMgdG8gbGF0aW4tMSAqLwotICAgIHhmY2wxLAkJCS8qIDIs NSBmcmVuY2ggY2FuYWRpYW4gbnJjIHRvIGxhdGluLTEgKi8KLSAgICB4Z2VsMSwJCQkvKiAyLDYg Z2VybWFuIG5yYyB0byBsYXRpbi0xICovCi0gICAgeGh1bDEsCQkJLyogMiw3IGh1bmdhcmlhbiBu cmMgdG8gbGF0aW4tMSAqLwotICAgIHhpdGwxLAkJCS8qIDIsOCBpdGFsaWFuIG5yYyB0byBsYXRp bi0xICovCi0gICAgeG5vbDEsCQkJLyogMiw5IG5vcndlZ2lhbi9kYW5pc2ggbnJjIHRvIGxhdGlu LTEgKi8KLSAgICB4cG9sMSwJCQkvKiAyLDEwIHBvcnR1Z3Vlc2UgbnJjIHRvIGxhdGluLTEgKi8K LSAgICB4c3BsMSwJCQkvKiAyLDExIHNwYW5pc2ggbnJjIHRvIGxhdGluLTEgKi8KLSAgICB4c3ds MSwJCQkvKiAyLDEyIHN3ZWRpc2ggbnJjIHRvIGxhdGluLTEgKi8KLSAgICB4Y2hsMSwJCQkvKiAy LDEzIHN3aXNzIG5yYyB0byBsYXRpbi0xICovCi0gICAgTlVMTCwJCQkvKiAyLDE0IGxhdGluLTEg dG8gbGF0aW4tMSAqLwotICAgIHhsMmwxLAkJCS8qIDIsMTUgbGF0aW4tMiB0byBsYXRpbi0xICov Ci0gICAgeGRtbDEsCQkJLyogMiwxNiBkZWMgbWNzIHRvIGxhdGluLTEgKi8KLSAgICB4bmVsMSwg ICAgICAgICAgICAgICAgICAgICAgLyogMiwxNyBOZVhUIHRvIExhdGluLTEgKi8KLSAgICB4NDNs MSwgICAgICAgICAgICAgICAgICAgICAgLyogMiwxOCBDUDQzNyB0byBMYXRpbi0xICovCi0gICAg eDg1bDEsICAgICAgICAgICAgICAgICAgICAgIC8qIDIsMTkgQ1A4NTAgdG8gTGF0aW4tMSAqLwot ICAgIHg1MmwxLCAgICAgICAgICAgICAgICAgICAgICAvKiAyLDIwIENQODUyIHRvIExhdGluLTEg Ki8KLSAgICB4YXFsMSwgICAgICAgICAgICAgICAgICAgICAgLyogMiwyMSBNYWNpbnRvc2ggTGF0 aW4gdG8gTGF0aW4tMSAqLwotICAgIHhkZ2wxLCAgICAgICAgICAgICAgICAgICAgICAvKiAyLDIy IERHSSB0byBMYXRpbi0xICovCi0gICAgeHI4bDEsICAgICAgICAgICAgICAgICAgICAgIC8qIDIs MjMgSFAgdG8gTGF0aW4tMSAqLwotICAgIHhsY2FzLCAgICAgICAgICAgICAgICAgICAgICAvKiAy LDI0IExhdGluL0N5cmlsbGljIHRvIExhdGluLTEgKi8KLSAgICB4YWNhcywgICAgICAgICAgICAg ICAgICAgICAgLyogMiwyNSBDUDg2NiB0byBMYXRpbi0xICovCi0gICAgeHNrYXMsICAgICAgICAg ICAgICAgICAgICAgIC8qIDIsMjYgU2hvcnQgS09JIHRvIExhdGluLTEgKi8KLSAgICB4azhhcywg ICAgICAgICAgICAgICAgICAgICAgLyogMiwyNyBPbGQgS09JLTggQ3lyaWxsaWMgdG8gTGF0aW4t MSAqLwotICAgIE5VTEwsCQkJLyogMiwyOCBLYW5qaSAuLi4gKi8KLSAgICBOVUxMLAkJCS8qIDIs MjkgKi8KLSAgICBOVUxMLAkJCS8qIDIsMzAgKi8KLSAgICBOVUxMLAkJCS8qIDIsMzEgKi8KLSAg ICB4aDdhcywJCQkvKiAyLDMyIEhlYnJldy03IHRvIExhdGluLTEgKi8KLSAgICB4bGhsMSwJCQkv KiAyLDMzIExhdGluL0hlYnJldyB0byBMYXRpbi0xICovCi0gICAgeDYybDEsCQkJLyogMiwzNCBD UDg2MiBIZWJyZXcgdG8gTGF0aW4tMSAqLwotICAgIHhlZ2FzLAkJCS8qIDIsMzUgRUxPVCA5Mjcg R3JlZWsgdG8gTGF0aW4tMSAqLwotICAgIHhsZ2wxLAkJCS8qIDIsMzYgTGF0aW4vR3JlZWsgdG8g TGF0aW4tMSAqLwotICAgIE5VTEwsCQkJLyogMiwzNyBDUDg2OSB0byBMYXRpbi0xICovCi0gICAg TlVMTCwJCQkvKiAyLDM4IExhdGluLTkgdG8gTGF0aW4tMSAqLwotICAgIHg1OGwxLAkJCS8qIDIs MzkgQ1A4NTggdG8gTGF0aW4tMSAqLwotICAgIHg1NWFzLAkJCS8qIDIsNDAgQ1A4NTUgdG8gTGF0 aW4tMSAqLwotICAgIHgxMjUxYXMsCQkJLyogMiw0MSBDUDEyNTEgdG8gTGF0aW4tMSAqLwotICAg IHhsZWZ0MTI4LAkJCS8qIDIsNDIgQnVsZ2FyaWFuIHRvIExhdGluLTEgKi8KLSAgICB4MTI1MGwx LAkJCS8qIDIsNDMgQ1AxMjUwIHRvIExhdGluLTEgKi8KLSAgICB4bXpsMSwJCQkvKiAyLDQ0IE1h em92aWEgdG8gTGF0aW4tMSAqLwotICAgIE5VTEwsCQkJLyogMiw0NSBVQ1MtMiB0byBMYXRpbi0x ICovCi0gICAgTlVMTCwJCQkvKiAyLDQ2IFVURi04IHRvIExhdGluLTEgKi8KLSAgICB4azhhcywJ CQkvKiAyLDQ3IEtPSThSIHRvIExhdGluLTEgKi8KLSAgICB4azhhcywJCQkvKiAyLDQ4IEtPSThV IHRvIExhdGluLTEgKi8KLSAgICB4dzFsMSwJCQkvKiAyLDQ5IENQMTI1MiB0byBMYXRpbi0xICov Ci0gICAgTlVMTCwJCQkvKiAzLDAgdXMgYXNjaWkgdG8gbGF0aW4tMiAqLwotICAgIE5VTEwsCQkJ LyogMywxIHVrIGFzY2lpIHRvIGxhdGluLTIgKi8KLSAgICB4ZHVhcywJCQkvKiAzLDIgZHV0Y2gg bnJjIHRvIGxhdGluLTIgKi8KLSAgICB4ZmlhcywJCQkvKiAzLDMgZmlubmlzaCBucmMgdG8gbGF0 aW4tMiAqLwotICAgIHhmcmFzLAkJCS8qIDMsNCBmcmVuY2ggbnJjIHRvIGxhdGluLTIgKi8KLSAg ICB4ZmNhcywJCQkvKiAzLDUgZnJlbmNoIGNhbmFkaWFuIG5yYyB0byBsYXRpbi0yICovCi0gICAg eGdlbDIsCQkJLyogMyw2IGdlcm1hbiBucmMgdG8gbGF0aW4tMiAqLwotICAgIHhodWwyLAkJCS8q IDMsNyBodW5nYXJpYW4gbnJjIHRvIGxhdGluLTIgKi8KLSAgICB4aXRhcywJCQkvKiAzLDggaXRh bGlhbiBucmMgdG8gbGF0aW4tMiAqLwotICAgIHhub2FzLAkJCS8qIDMsOSBub3J3ZWdpYW4vZGFu aXNoIG5yYyB0byBsYXRpbi0yICovCi0gICAgeHBvYXMsCQkJLyogMywxMCBwb3J0dWd1ZXNlIG5y YyB0byBsYXRpbi0yICovCi0gICAgeHNwYXMsCQkJLyogMywxMSBzcGFuaXNoIG5yYyB0byBsYXRp bi0yICovCi0gICAgeHN3YXMsCQkJLyogMywxMiBzd2VkaXNoIG5yYyB0byBsYXRpbi0yICovCi0g ICAgeGNoYXMsCQkJLyogMywxMyBzd2lzcyBucmMgdG8gbGF0aW4tMiAqLwotICAgIHhsMWwyLAkJ CS8qIDMsMTQgbGF0aW4tMSB0byBsYXRpbi0yICovCi0gICAgTlVMTCwJCQkvKiAzLDE1IGxhdGlu LTIgdG8gbGF0aW4tMiAqLwotICAgIHhsMWwyLAkJCS8qIDMsMTYgZGVjIG1jcyB0byBsYXRpbi0y ICovCi0gICAgeG5lbDIsICAgICAgICAgICAgICAgICAgICAgIC8qIDMsMTcgTmVYVCB0byBMYXRp bi0yICovCi0gICAgeDQzbDIsICAgICAgICAgICAgICAgICAgICAgIC8qIDMsMTggQ1A0MzcgdG8g TGF0aW4tMiAqLwotICAgIHg4NWwyLCAgICAgICAgICAgICAgICAgICAgICAvKiAzLDE5IENQODUw IHRvIExhdGluLTIgKi8KLSAgICB4NTJsMiwgICAgICAgICAgICAgICAgICAgICAgLyogMywyMCBD UDg1MiB0byBMYXRpbi0yICovCi0gICAgeGFxbDIsICAgICAgICAgICAgICAgICAgICAgIC8qIDMs MjEgTWFjaW50b3NoIExhdGluIHRvIExhdGluLTIgKi8KLSAgICB4ZGdsMiwgICAgICAgICAgICAg ICAgICAgICAgLyogMywyMiBER0kgdG8gTGF0aW4tMiAqLwotICAgIHhyOGwyLCAgICAgICAgICAg ICAgICAgICAgICAvKiAzLDIzIEhQIHRvIExhdGluLTIgKi8KLSAgICB4bGNhcywgICAgICAgICAg ICAgICAgICAgICAgLyogMywyNCBMYXRpbi9DeXJpbGxpYyB0byBMYXRpbi0yICovCi0gICAgeGFj YXMsICAgICAgICAgICAgICAgICAgICAgIC8qIDMsMjUgQ1A4NjYgdG8gTGF0aW4tMiAqLwotICAg IHhza2FzLCAgICAgICAgICAgICAgICAgICAgICAvKiAzLDI2IFNob3J0IEtPSSB0byBMYXRpbi0y ICovCi0gICAgeGs4YXMsICAgICAgICAgICAgICAgICAgICAgIC8qIDMsMjcgT2xkIEtPSS04IEN5 cmlsbGljIHRvIExhdGluLTIgKi8KLSAgICBOVUxMLAkJCS8qIDMsMjggS2FuamkgLi4uICovCi0g ICAgTlVMTCwJCQkvKiAzLDI5ICovCi0gICAgTlVMTCwJCQkvKiAzLDMwICovCi0gICAgTlVMTCwJ CQkvKiAzLDMxICovCi0gICAgeGg3YXMsCQkJLyogMywzMiBIZWJyZXctNyB0byBMYXRpbi0yICov Ci0gICAgeGxoYXMsCQkJLyogMywzMyBMYXRpbi9IZWJyZXcgdG8gTGF0aW4tMiAqLwotICAgIHg2 MmFzLAkJCS8qIDMsMzQgQ1A4NjIgSGVicmV3IHRvIExhdGluLTIgKi8KLSAgICB4ZWdhcywJCQkv KiAzLDM1IEVMT1QgOTI3IEdyZWVrIHRvIExhdGluLTIgKi8KLSAgICB4bDJsZywJCQkvKiAzLDM2 IExhdGluL0dyZWVrIHRvIExhdGluLTIgKi8KLSAgICB4bGVmdDEyOCwJCQkvKiAzLDM3IENQODY5 IHRvIExhdGluLTIgKi8KLSAgICB4bDlsMiwJCQkvKiAzLDM4IExhdGluLTkgdG8gTGF0aW4tMiAq LwotICAgIHg1OGwyLAkJCS8qIDMsMzkgQ1A4NTggdG8gTGF0aW4tMiAqLwotICAgIHg1NWFzLAkJ CS8qIDMsNDAgQ1A4NTUgdG8gTGF0aW4tMiAqLwotICAgIHgxMjUxYXMsCQkJLyogMyw0MSBDUDEy NTEgdG8gTGF0aW4tMiAqLwotICAgIHhsZWZ0MTI4LAkJCS8qIDMsNDIgQnVsZ2FyaWFuIHRvIExh dGluLTIgKi8KLSAgICB4MTI1MGwyLAkJCS8qIDMsNDMgQ1AxMjUwIHRvIExhdGluLTIgKi8KLSAg ICB4bXpsMiwJCQkvKiAzLDQ0IE1hem92aWEgdG8gTGF0aW4tMiAqLwotICAgIE5VTEwsCQkJLyog Myw0NSBVQ1MtMiB0byBMYXRpbi0yICovCi0gICAgTlVMTCwJCQkvKiAzLDQ2IFVURi04IHRvIExh dGluLTIgKi8KLSAgICB4azhhcywJCQkvKiAzLDQ3IEtPSThSIHRvIExhdGluLTIgKi8KLSAgICB4 azhhcywJCQkvKiAzLDQ4IEtPSThVIHRvIExhdGluLTIgKi8KLSAgICB4dzFsMiwJCQkvKiAzLDQ5 IENQMTI1MiB0byBsYXRpbi0yICovCi0gICAgeGFzbGMsCQkJLyogNCwwIHVzIGFzY2lpIHRvIGxh dGluL2N5cmlsbGljICovCi0gICAgeGFzbGMsCQkJLyogNCwxIHVrIGFzY2lpIHRvIGxhdGluL2N5 cmlsbGljICovCi0gICAgeGR1YXMsCQkJLyogNCwyIGR1dGNoIG5yYyB0byBsYXRpbi9jeXJpbGxp YyAqLwotICAgIHhmaWFzLAkJCS8qIDQsMyBmaW5uaXNoIG5yYyB0byBsYXRpbi9jeXJpbGxpYyAq LwotICAgIHhmcmFzLAkJCS8qIDQsNCBmcmVuY2ggbnJjIHRvIGxhdGluL2N5cmlsbGljICovCi0g ICAgeGZjYXMsCQkJLyogNCw1IGZyZW5jaCBjYW5hZGlhbiBucmMgdG8gbGF0aW4vY3lyaWxsaWMg Ki8KLSAgICB4Z2VhcywJCQkvKiA0LDYgZ2VybWFuIG5yYyB0byBsYXRpbi9jeXJpbGxpYyAqLwot ICAgIHhodWFzLAkJCS8qIDQsNyBodW5nYXJpYW4gbnJjIHRvIGxhdGluL2N5cmlsbGljICovCi0g ICAgeGl0YXMsCQkJLyogNCw4IGl0YWxpYW4gbnJjIHRvIGxhdGluL2N5cmlsbGljICovCi0gICAg eG5vYXMsCQkJLyogNCw5IG5vcmdlL2RhbmlzaCBucmMgdG8gbGF0aW4vY3lyaWxsaWMgKi8KLSAg ICB4cG9hcywJCQkvKiA0LDEwIHBvcnR1Z3Vlc2UgbnJjIHRvIGxhdGluL2N5cmlsbGljICovCi0g ICAgeHNwYXMsCQkJLyogNCwxMSBzcGFuaXNoIG5yYyB0byBsYXRpbi9jeXJpbGxpYyAqLwotICAg IHhzd2FzLAkJCS8qIDQsMTIgc3dlZGlzaCBucmMgdG8gbGF0aW4vY3lyaWxsaWMgKi8KLSAgICB4 Y2hhcywJCQkvKiA0LDEzIHN3aXNzIG5yYyB0byBsYXRpbi9jeXJpbGxpYyAqLwotICAgIHhsMWFz LAkJCS8qIDQsMTQgbGF0aW4tMSB0byBsYXRpbi9jeXJpbGxpYyAqLwotICAgIHhsMmFzLAkJCS8q IDQsMTUgbGF0aW4tMiB0byBsYXRpbi9jeXJpbGxpYyAqLwotICAgIHhkbWFzLAkJCS8qIDQsMTYg ZGVjIG1jcyB0byBsYXRpbi9jeXJpbGxpYyAqLwotICAgIHhuZWFzLAkJCS8qIDQsMTcgTmVYVCB0 byBsYXRpbi9jeXJpbGxpYyAqLwotICAgIHg0M2FzLAkJCS8qIDQsMTggQ1A0MzcgdG8gbGF0aW4v Y3lyaWxsaWMgKi8KLSAgICB4ODVhcywJCQkvKiA0LDE5IENQODUwIHRvIGxhdGluL2N5cmlsbGlj ICovCi0gICAgeDUyYXMsCQkJLyogNCwyMCBDUDg1MiB0byBsYXRpbi9jeXJpbGxpYyAqLwotICAg IHhhcWFzLAkJCS8qIDQsMjEgTWFjaW50b3NoIExhdGluIHRvIGxhdGluL2N5cmlsbGljICovCi0g ICAgeGRnYXMsCQkJLyogNCwyMiBER0kgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KLSAgICB4cjhhcywJ CQkvKiA0LDIzIEhQIHRvIExhdGluL0N5cmlsbGljICovCi0gICAgTlVMTCwgICAgICAgICAgICAg ICAgICAgICAgIC8qIDQsMjQgTGF0aW4vQ3lyaWxsaWMgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KLSAg ICB4YWNsYywgICAgICAgICAgICAgICAgICAgICAgLyogNCwyNSBDUDg2NiB0byBMYXRpbi9DeXJp bGxpYyAqLwotICAgIHhza2N5LCAgICAgICAgICAgICAgICAgICAgICAvKiA0LDI2IFNob3J0IEtP SSB0byBMYXRpbi9DeXJpbGxpYyAqLwotICAgIHhrOGxjLCAgICAgICAgICAgICAgICAgICAgICAv KiA0LDI3IE9sZCBLT0ktOCBDeXJpbGxpYyB0byBMYXRpbi9DeXJpbGxpYyAqLwotICAgIE5VTEws CQkJLyogNCwyOCBLYW5qaS4uLiAqLwotICAgIE5VTEwsCQkJLyogNCwyOSAqLwotICAgIE5VTEws CQkJLyogNCwzMCAqLwotICAgIE5VTEwsCQkJLyogNCwzMSAqLwotICAgIHhoN2FzLAkJCS8qIDQs MzIgSGVicmV3LTcgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KLSAgICB4bGhhcywJCQkvKiA0LDMzIExh dGluL0hlYnJldyB0byBMYXRpbi9DeXJpbGxpYyAqLwotICAgIHg2MmFzLAkJCS8qIDQsMzQgQ1A4 NjIgSGVicmV3IHRvIExhdGluL0N5cmlsbGljICovCi0gICAgeGVnYXMsCQkJLyogNCwzNSBFTE9U IDkyNyBHcmVlayB0byBMYXRpbi9DeXJpbGxpYyAqLwotICAgIHhsZWZ0MTYwLAkJCS8qIDQsMzYg TGF0aW4vR3JlZWsgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KLSAgICB4bGVmdDEyOCwJCQkvKiA0LDM3 IENQODY5IHRvIExhdGluL0N5cmlsbGljICovCi0gICAgeGwxYXMsCQkJLyogNCwzOCBsYXRpbi05 IHRvIGxhdGluL2N5cmlsbGljICovCi0gICAgeGxlZnQxMjgsCQkJLyogNCwzOSBDUDg1OCB0byBM YXRpbi9DeXJpbGxpYyAqLwotICAgIHg1NWxjLAkJCS8qIDQsNDAgQ1A4NTUgdG8gTGF0aW4vQ3ly aWxsaWMgKi8KLSAgICB4MTI1MWxjLAkJCS8qIDQsNDEgQ1AxMjUxIHRvIExhdGluL0N5cmlsbGlj ICovCi0gICAgeGJ1bGMsCQkJLyogNCw0MiBCdWxnYXJpYW4gdG8gTGF0aW4vQ3lyaWxsaWMgKi8K LSAgICB4MTI1MGFzLAkJCS8qIDQsNDMgQ1AxMjUwIHRvIExhdGluL0N5cmlsbGljICovCi0gICAg eG16YXMsCQkJLyogNCw0NCBNYXpvdmlhIHRvIExhdGluL0N5cmlsbGljICovCi0gICAgTlVMTCwJ CQkvKiA0LDQ1IFVDUy0yIHRvIExhdGluL0N5cmlsbGljICovCi0gICAgTlVMTCwJCQkvKiA0LDQ2 IFVURi04IHRvIExhdGluL0N5cmlsbGljICovCi0gICAgeGtybGMsCQkJLyogNCw0NyBLT0k4UiB0 byBMYXRpbi9DeXJpbGxpYyAqLwotICAgIHhrdWxjLAkJCS8qIDQsNDggS09JOFUgdG8gTGF0aW4v Q3lyaWxsaWMgKi8KLSAgICB4dzFsYywJCQkvKiA0LDQ5IENQMTI1MiB0byBMYXRpbi9DeXJpbGxp YyAqLwotICAgIE5VTEwsCQkJLyogNSwwMCAqLwotICAgIE5VTEwsCQkJLyogNSwwMSAqLwotICAg IE5VTEwsCQkJLyogNSwwMiAqLwotICAgIE5VTEwsCQkJLyogNSwwMyAqLwotICAgIE5VTEwsCQkJ LyogNSwwNCAqLwotICAgIE5VTEwsCQkJLyogNSwwNSAqLwotICAgIE5VTEwsCQkJLyogNSwwNiAq LwotICAgIE5VTEwsCQkJLyogNC4wNyAqLwotICAgIE5VTEwsCQkJLyogNSwwOCAqLwotICAgIE5V TEwsCQkJLyogNSwwOSAqLwotICAgIE5VTEwsCQkJLyogNSwxMCAqLwotICAgIE5VTEwsCQkJLyog NSwxMSAqLwotICAgIE5VTEwsCQkJLyogNSwxMiAqLwotICAgIE5VTEwsCQkJLyogNSwxMyAqLwot ICAgIE5VTEwsCQkJLyogNSwxNCAqLwotICAgIE5VTEwsCQkJLyogNSwxNSAqLwotICAgIE5VTEws CQkJLyogNSwxNiAqLwotICAgIE5VTEwsCQkJLyogNSwxNyAqLwotICAgIE5VTEwsCQkJLyogNSwx OCAqLwotICAgIE5VTEwsCQkJLyogNSwxOSAqLwotICAgIE5VTEwsCQkJLyogNSwyMCAqLwotICAg IE5VTEwsCQkJLyogNSwyMSAqLwotICAgIE5VTEwsCQkJLyogNSwyMiAqLwotICAgIE5VTEwsCQkJ LyogNSwyMyAqLwotICAgIE5VTEwsCQkJLyogNSwyNCAqLwotICAgIE5VTEwsCQkJLyogNSwyNSAq LwotICAgIE5VTEwsCQkJLyogNSwyNiAqLwotICAgIE5VTEwsCQkJLyogNSwyNyAqLwotICAgIE5V TEwsCQkJLyogNSwyOCAqLwotICAgIE5VTEwsCQkJLyogNSwyOSAqLwotICAgIE5VTEwsCQkJLyog NSwzMCAqLwotICAgIE5VTEwsCQkJLyogNSwzMSAqLwotICAgIE5VTEwsCQkJLyogNSwzMiAqLwot ICAgIE5VTEwsCQkJLyogNSwzMyAqLwotICAgIE5VTEwsCQkJLyogNSwzNCAqLwotICAgIE5VTEws CQkJLyogNSwzNSAqLwotICAgIE5VTEwsCQkJLyogNSwzNiAqLwotICAgIE5VTEwsCQkJLyogNSwz NyAqLwotICAgIE5VTEwsCQkJLyogNSwzOCAqLwotICAgIE5VTEwsCQkJLyogNSwzOSAqLwotICAg IE5VTEwsCQkJLyogNSw0MCAqLwotICAgIE5VTEwsCQkJLyogNSw0MSAqLwotICAgIE5VTEwsCQkJ LyogNSw0MiAqLwotICAgIE5VTEwsCQkJLyogNSw0MyAqLwotICAgIE5VTEwsCQkJLyogNSw0NCAq LwotICAgIE5VTEwsCQkJLyogNSw0NSAqLwotICAgIE5VTEwsCQkJLyogNSw0NiAqLwotICAgIE5V TEwsCQkJLyogNSw0NyAqLwotICAgIE5VTEwsCQkJLyogNSw0OCAqLwotICAgIE5VTEwsCQkJLyog NSw0OSAqLwotICAgIE5VTEwsCQkJLyogNiwwIHVzIGFzY2lpIHRvIExhdGluL0hlYnJldyAqLwot ICAgIE5VTEwsCQkJLyogNiwxIHVrIGFzY2lpIHRvIExhdGluL0hlYnJldyAqLwotICAgIHhkdWFz LAkJCS8qIDYsMiBkdXRjaCBucmMgdG8gTGF0aW4vSGVicmV3ICovCi0gICAgeGZpYXMsCQkJLyog NiwzIGZpbm5pc2ggbnJjIHRvIExhdGluL0hlYnJldyAqLwotICAgIHhmcmFzLAkJCS8qIDYsNCBm cmVuY2ggbnJjIHRvIExhdGluL0hlYnJldyAqLwotICAgIHhmY2FzLAkJCS8qIDYsNSBmcmVuY2gg Y2FuYWRpYW4gbnJjIHRvIExhdGluL0hlYnJldyAqLwotICAgIHhnZWFzLAkJCS8qIDYsNiBnZXJt YW4gbnJjIHRvIExhdGluL0hlYnJldyAqLwotICAgIHhodWFzLAkJCS8qIDYsNyBodW5nYXJpYW4g bnJjIHRvIExhdGluL0hlYnJldyAqLwotICAgIHhpdGFzLAkJCS8qIDYsOCBpdGFsaWFuIG5yYyB0 byBMYXRpbi9IZWJyZXcgKi8KLSAgICB4bm9hcywJCQkvKiA2LDkgbm9yZ2UvZGFuaXNoIG5yYyB0 byBMYXRpbi9IZWJyZXcgKi8KLSAgICB4cG9hcywJCQkvKiA2LDEwIHBvcnR1Z3Vlc2UgbnJjIHRv IExhdGluL0hlYnJldyAqLwotICAgIHhzcGFzLAkJCS8qIDYsMTEgc3BhbmlzaCBucmMgdG8gTGF0 aW4vSGVicmV3ICovCi0gICAgeHN3YXMsCQkJLyogNiwxMiBzd2VkaXNoIG5yYyB0byBMYXRpbi9I ZWJyZXcgKi8KLSAgICB4Y2hhcywJCQkvKiA2LDEzIHN3aXNzIG5yYyB0byBMYXRpbi9IZWJyZXcg Ki8KLSAgICB4bDFsaCwJCQkvKiA2LDE0IGxhdGluLTEgdG8gTGF0aW4vSGVicmV3ICovCi0gICAg eGwyYXMsCQkJLyogNiwxNSBsYXRpbi0yIHRvIExhdGluL0hlYnJldyAqLwotICAgIHhkbWFzLAkJ CS8qIDYsMTYgZGVjIG1jcyB0byBMYXRpbi9IZWJyZXcgKi8KLSAgICB4bmVhcywJCQkvKiA2LDE3 IE5lWFQgdG8gTGF0aW4vSGVicmV3ICovCi0gICAgeDQzYXMsCQkJLyogNiwxOCBDUDQzNyB0byBM YXRpbi9IZWJyZXcgKi8KLSAgICB4ODVhcywJCQkvKiA2LDE5IENQODUwIHRvIExhdGluL0hlYnJl dyAqLwotICAgIHg1MmFzLAkJCS8qIDYsMjAgQ1A4NTIgdG8gTGF0aW4vSGVicmV3ICovCi0gICAg eGFxYXMsCQkJLyogNiwyMSBNYWNpbnRvc2ggTGF0aW4gdG8gTGF0aW4vSGVicmV3ICovCi0gICAg eGRnYXMsCQkJLyogNiwyMiBER0kgdG8gTGF0aW4vSGVicmV3ICovCi0gICAgeHI4YXMsCQkJLyog NiwyMyBIUCB0byBMYXRpbi9IZWJyZXcgKi8KLSAgICB4bGNhcywgICAgICAgICAgICAgICAgICAg ICAgLyogNiwyNCBMYXRpbi9DeXJpbGxpYyB0byBMYXRpbi9IZWJyZXcgKi8KLSAgICB4YWNhcywg ICAgICAgICAgICAgICAgICAgICAgLyogNiwyNSBDUDg2NiB0byBMYXRpbi9IZWJyZXcgKi8KLSAg ICB4c2thcywgICAgICAgICAgICAgICAgICAgICAgLyogNiwyNiBTaG9ydCBLT0kgdG8gTGF0aW4v SGVicmV3ICovCi0gICAgeGs4YXMsICAgICAgICAgICAgICAgICAgICAgIC8qIDYsMjcgT2xkIEtP SS04IEN5cmlsbGljIHRvIExhdGluL0hlYnJldyAqLwotICAgIE5VTEwsCQkJLyogNiwyOCBLYW5q aS4uLiAqLwotICAgIE5VTEwsCQkJLyogNiwyOSAqLwotICAgIE5VTEwsCQkJLyogNiwzMCAqLwot ICAgIE5VTEwsCQkJLyogNiwzMSAqLwotICAgIHhoN2xoLAkJCS8qIDYsMzIgSGVicmV3LTcgdG8g TGF0aW4vSGVicmV3ICovCi0gICAgTlVMTCwJCQkvKiA2LDMzIExhdGluL0hlYnJldyB0byBMYXRp bi9IZWJyZXcgKi8KLSAgICB4NjJsaCwJCQkvKiA2LDM0IENQODYyIEhlYnJldyB0byBMYXRpbi9I ZWJyZXcgKi8KLSAgICB4ZWdhcywJCQkvKiA2LDM1IEVMT1QgOTI3IEdyZWVrIHRvIExhdGluL0hl YnJldyAqLwotICAgIHhsZ2FzLAkJCS8qIDYsMzYgTGF0aW4vR3JlZWsgdG8gTGF0aW4vSGVicmV3 ICovCi0gICAgeDY5YXMsCQkJLyogNiwzNyBDUDg2OSB0byBMYXRpbi9IZWJyZXcgKi8KLSAgICB4 bDFhcywJCQkvKiA2LDM4IGxhdGluLTkgdG8gTGF0aW4vSGVicmV3ICovCi0gICAgeDU4YXMsCQkJ LyogNiwzOSBDUDg1OCB0byBMYXRpbi9IZWJyZXcgKi8KLSAgICB4NTVhcywJCQkvKiA2LDQwIENQ ODU1IHRvIExhdGluL0hlYnJldyAqLwotICAgIHgxMjUxYXMsCQkJLyogNiw0MSBDUDEyNTEgdG8g TGF0aW4vSGVicmV3ICovCi0gICAgeGxlZnQxMjgsCQkJLyogNiw0MiBCdWxnYXJpYW4gdG8gTGF0 aW4vSGVicmV3ICovCi0gICAgeDEyNTBhcywJCQkvKiA2LDQzIENQMTI1MCB0byBMYXRpbi9IZWJy ZXcgKi8KLSAgICB4bXphcywJCQkvKiA2LDQ0IE1hem92aWEgdG8gTGF0aW4vSGVicmV3ICovCi0g ICAgTlVMTCwJCQkvKiA2LDQ1IFVDUy0yIHRvIExhdGluL0hlYnJldyAqLwotICAgIE5VTEwsCQkJ LyogNiw0NiBVVEYtOCB0byBMYXRpbi9IZWJyZXcgKi8KLSAgICBOVUxMLAkJCS8qIDYsNDcgS09J OFIgdG8gTGF0aW4vSGVicmV3ICovCi0gICAgTlVMTCwJCQkvKiA2LDQ4IEtPSThVIHRvIExhdGlu L0hlYnJldyAqLwotICAgIHh3MWxoLAkJCS8qIDYsNDkgQ1AxMjUyIHRvIExhdGluL0hlYnJldyAq LwotICAgIE5VTEwsCQkJLyogNywwIHVzIGFzY2lpIHRvIExhdGluL0dyZWVrICovCi0gICAgTlVM TCwJCQkvKiA3LDEgdWsgYXNjaWkgdG8gTGF0aW4vR3JlZWsgKi8KLSAgICB4ZHVhcywJCQkvKiA3 LDIgZHV0Y2ggbnJjIHRvIExhdGluL0dyZWVrICovCi0gICAgeGZpYXMsCQkJLyogNywzIGZpbm5p c2ggbnJjIHRvIExhdGluL0dyZWVrICovCi0gICAgeGZyYXMsCQkJLyogNyw0IGZyZW5jaCBucmMg dG8gTGF0aW4vR3JlZWsgKi8KLSAgICB4ZmNhcywJCQkvKiA3LDUgZnJlbmNoIGNhbmFkaWFuIG5y YyB0byBMYXRpbi9HcmVlayAqLwotICAgIHhnZWFzLAkJCS8qIDcsNiBnZXJtYW4gbnJjIHRvIExh dGluL0dyZWVrICovCi0gICAgeGh1YXMsCQkJLyogNyw3IGh1bmdhcmlhbiBucmMgdG8gTGF0aW4v R3JlZWsgKi8KLSAgICB4aXRhcywJCQkvKiA3LDggaXRhbGlhbiBucmMgdG8gTGF0aW4vR3JlZWsg Ki8KLSAgICB4bm9hcywJCQkvKiA3LDkgbm9yZ2UvZGFuaXNoIG5yYyB0byBMYXRpbi9HcmVlayAq LwotICAgIHhwb2FzLAkJCS8qIDcsMTAgcG9ydHVndWVzZSBucmMgdG8gTGF0aW4vR3JlZWsgKi8K LSAgICB4c3BhcywJCQkvKiA3LDExIHNwYW5pc2ggbnJjIHRvIExhdGluL0dyZWVrICovCi0gICAg eHN3YXMsCQkJLyogNywxMiBzd2VkaXNoIG5yYyB0byBMYXRpbi9HcmVlayAqLwotICAgIHhjaGFz LAkJCS8qIDcsMTMgc3dpc3MgbnJjIHRvIExhdGluL0dyZWVrICovCi0gICAgeGwxbGcsCQkJLyog NywxNCBsYXRpbi0xIHRvIExhdGluL0dyZWVrICovCi0gICAgeGwybGcsCQkJLyogNywxNSBsYXRp bi0yIHRvIExhdGluL0dyZWVrICovCi0gICAgeGwxbGcsCQkJLyogNywxNiBkZWMgbWNzIHRvIExh dGluL0dyZWVrICovCi0gICAgeG5lYXMsCQkJLyogNywxNyBOZVhUIHRvIExhdGluL0dyZWVrICov Ci0gICAgeGxlZnQxMjgsCQkJLyogNywxOCBDUDQzNyB0byBMYXRpbi9HcmVlayAqLwotICAgIHg4 NWFzLAkJCS8qIDcsMTkgQ1A4NTAgdG8gTGF0aW4vR3JlZWsgKi8KLSAgICB4NTJhcywJCQkvKiA3 LDIwIENQODUyIHRvIExhdGluL0dyZWVrICovCi0gICAgeGFxYXMsCQkJLyogNywyMSBNYWNpbnRv c2ggTGF0aW4gdG8gTGF0aW4vR3JlZWsgKi8KLSAgICB4ZGdhcywJCQkvKiA3LDIyIERHSSB0byBM YXRpbi9HcmVlayAqLwotICAgIHhyOGFzLAkJCS8qIDcsMjMgSFAgdG8gTGF0aW4vR3JlZWsgKi8K LSAgICB4bGVmdDE2MCwgICAgICAgICAgICAgICAgICAgLyogNywyNCBMYXRpbi9DeXJpbGxpYyB0 byBMYXRpbi9HcmVlayAqLwotICAgIHhsZWZ0MTI4LCAgICAgICAgICAgICAgICAgICAvKiA3LDI1 IENQODY2IHRvIExhdGluL0dyZWVrICovCi0gICAgeHNrYXMsICAgICAgICAgICAgICAgICAgICAg IC8qIDcsMjYgU2hvcnQgS09JIHRvIExhdGluL0dyZWVrICovCi0gICAgeGs4YXMsICAgICAgICAg ICAgICAgICAgICAgIC8qIDcsMjcgT2xkIEtPSS04IEN5cmlsbGljIHRvIExhdGluL0dyZWVrICov Ci0gICAgTlVMTCwJCQkvKiA3LDI4IEthbmppLi4uICovCi0gICAgTlVMTCwJCQkvKiA3LDI5ICov Ci0gICAgTlVMTCwJCQkvKiA3LDMwICovCi0gICAgTlVMTCwJCQkvKiA3LDMxICovCi0gICAgeGg3 YXMsCQkJLyogNywzMiBIZWJyZXctNyB0byBMYXRpbi9HcmVlayAqLwotICAgIE5VTEwsCQkJLyog NywzMyBMYXRpbi9IZWJyZXcgdG8gTGF0aW4vR3JlZWsgKi8KLSAgICB4NjJhcywJCQkvKiA3LDM0 IENQODYyIEhlYnJldyB0byBMYXRpbi9HcmVlayAqLwotICAgIHhlZ2xnLAkJCS8qIDcsMzUgRUxP VCA5MjcgR3JlZWsgdG8gTGF0aW4vR3JlZWsgKi8KLSAgICBOVUxMLAkJCS8qIDcsMzYgTGF0aW4v R3JlZWsgdG8gTGF0aW4vR3JlZWsgKi8KLSAgICB4NjlsZywJCQkvKiA3LDM3IENQODY5IHRvIExh dGluL0dyZWVrICovCi0gICAgeGwxYXMsCQkJLyogNywzOCBsYXRpbi05IHRvIExhdGluL0dyZWVr ICovCi0gICAgeGwxYXMsCQkJLyogNywzOSBsYXRpbi05IHRvIExhdGluL0hlYnJldyovCi0gICAg eGxlZnQxMjgsCQkJLyogNyw0MCBDUDg1NSB0byBMYXRpbi9HcmVlayAqLwotICAgIHhsZWZ0MTI4 LAkJCS8qIDcsNDEgQ1AxMjUxIHRvIExhdGluL0dyZWVrICovCi0gICAgeGxlZnQxMjgsCQkJLyog Nyw0MiBCdWxnYXJpYW4gdG8gTGF0aW4vR3JlZWsgKi8KLSAgICB4MTI1MGFzLAkJCS8qIDcsNDMg Q1AxMjUwIHRvIExhdGluL0dyZWVrICovCi0gICAgeG16YXMsCQkJLyogNyw0NCBNYXpvdmlhIHRv IExhdGluL0dyZWVrICovCi0gICAgTlVMTCwJCQkvKiA3LDQ1IFVDUy0yIHRvIExhdGluL0dyZWVr ICovCi0gICAgTlVMTCwJCQkvKiA3LDQ2IFVURi04IHRvIExhdGluL0dyZWVrICovCi0gICAgTlVM TCwJCQkvKiA3LDQ3IEtPSThSIHRvIExhdGluL0dyZWVrICovCi0gICAgTlVMTCwJCQkvKiA3LDQ4 IEtPSThVIHRvIExhdGluL0dyZWVrICovCi0gICAgeHcxbGcsCQkJLyogNyw0OSBDUDEyNTIgdG8g TGF0aW4vR3JlZWsgKi8KLSAgICBOVUxMLAkJCS8qIDgsMCB1cyBhc2NpaSB0byBsYXRpbi05ICov Ci0gICAgeHVrbDEsCQkJLyogOCwxIHVrIGFzY2lpIHRvIGxhdGluLTkgKi8KLSAgICB4ZHVsMSwJ CQkvKiA4LDIgZHV0Y2ggbnJjIHRvIGxhdGluLTkgKi8KLSAgICB4ZmlsMSwJCQkvKiA4LDMgZmlu bmlzaCBucmMgdG8gbGF0aW4tOSAqLwotICAgIHhmcmwxLAkJCS8qIDgsNCBmcmVuY2ggbnJjIHRv IGxhdGluLTkgKi8KLSAgICB4ZmNsMSwJCQkvKiA4LDUgZnJlbmNoIGNhbmFkaWFuIG5yYyB0byBs YXRpbi05ICovCi0gICAgeGdlbDEsCQkJLyogOCw2IGdlcm1hbiBucmMgdG8gbGF0aW4tOSAqLwot ICAgIHhodWwxLAkJCS8qIDgsNyBodW5nYXJpYW4gbnJjIHRvIGxhdGluLTkgKi8KLSAgICB4aXRs MSwJCQkvKiA4LDggaXRhbGlhbiBucmMgdG8gbGF0aW4tOSAqLwotICAgIHhub2wxLAkJCS8qIDgs OSBub3J3ZWdpYW4vZGFuaXNoIG5yYyB0byBsYXRpbi05ICovCi0gICAgeHBvbDEsCQkJLyogOCwx MCBwb3J0dWd1ZXNlIG5yYyB0byBsYXRpbi05ICovCi0gICAgeHNwbDEsCQkJLyogOCwxMSBzcGFu aXNoIG5yYyB0byBsYXRpbi05ICovCi0gICAgeHN3bDEsCQkJLyogOCwxMiBzd2VkaXNoIG5yYyB0 byBsYXRpbi05ICovCi0gICAgeGNobDEsCQkJLyogOCwxMyBzd2lzcyBucmMgdG8gbGF0aW4tOSAq LwotICAgIE5VTEwsCQkJLyogOCwxNCBsYXRpbi0xIHRvIGxhdGluLTkgKi8KLSAgICB4bDJsOSwJ CQkvKiA4LDE1IGxhdGluLTIgdG8gbGF0aW4tOSAqLwotICAgIHhkbWw5LAkJCS8qIDgsMTYgZGVj IG1jcyB0byBsYXRpbi05ICovCi0gICAgeG5lbDksICAgICAgICAgICAgICAgICAgICAgIC8qIDgs MTcgTmVYVCBUbyBMYXRpbi05ICovCi0gICAgeDQzbDEsICAgICAgICAgICAgICAgICAgICAgIC8q IDgsMTggQ1A0MzcgVG8gTGF0aW4tOSAqLwotICAgIHg4NWwxLCAgICAgICAgICAgICAgICAgICAg ICAvKiA4LDE5IENQODUwIFRvIExhdGluLTkgKi8KLSAgICB4NTJsMSwgICAgICAgICAgICAgICAg ICAgICAgLyogOCwyMCBDUDg1MiBUbyBMYXRpbi05ICovCi0gICAgeGFxbDEsICAgICAgICAgICAg ICAgICAgICAgIC8qIDgsMjEgTWFjaW50b3NoIExhdGluIFRvIExhdGluLTkgKi8KLSAgICB4ZGds MSwgICAgICAgICAgICAgICAgICAgICAgLyogOCwyMiBER0kgVG8gTGF0aW4tOSAqLwotICAgIHhy OGwxLCAgICAgICAgICAgICAgICAgICAgICAvKiA4LDIzIEhQIFRvIExhdGluLTkgKi8KLSAgICB4 bGNhcywgICAgICAgICAgICAgICAgICAgICAgLyogOCwyNCBMYXRpbi9DeXJpbGxpYyBUbyBMYXRp bi05ICovCi0gICAgeGFjYXMsICAgICAgICAgICAgICAgICAgICAgIC8qIDgsMjUgQ1A4NjYgVG8g TGF0aW4tOSAqLwotICAgIHhza2FzLCAgICAgICAgICAgICAgICAgICAgICAvKiA4LDI2IFNob3J0 IEtPSSBUbyBMYXRpbi05ICovCi0gICAgeGs4YXMsICAgICAgICAgICAgICAgICAgICAgIC8qIDgs MjcgT2xkIEtPSS04IEN5cmlsbGljIFRvIExhdGluLTkgKi8KLSAgICBOVUxMLAkJCS8qIDgsMjgg S2FuamkgLi4uICovCi0gICAgTlVMTCwJCQkvKiA4LDI5ICovCi0gICAgTlVMTCwJCQkvKiA4LDMw ICovCi0gICAgTlVMTCwJCQkvKiA4LDMxICovCi0gICAgeGg3YXMsCQkJLyogOCwzMiBIZWJyZXct NyBUbyBMYXRpbi05ICovCi0gICAgeGxobDEsCQkJLyogOCwzMyBMYXRpbi9IZWJyZXcgVG8gTGF0 aW4tOSAqLwotICAgIHg2MmwxLAkJCS8qIDgsMzQgQ1A4NjIgSGVicmV3IFRvIExhdGluLTkgKi8K LSAgICB4ZWdhcywJCQkvKiA4LDM1IEVMT1QgOTI3IEdyZWVrIFRvIExhdGluLTkgKi8KLSAgICB4 bGdsMSwJCQkvKiA4LDM2IExhdGluL0dyZWVrIFRvIExhdGluLTkgKi8KLSAgICB4bDE2OSwJCQkv KiA4LDM3IENQODY5IFRvIExhdGluLTkgKi8KLSAgICBOVUxMLAkJCS8qIDgsMzggTGF0aW4tOSBU byBMYXRpbi05ICovCi0gICAgeDU4bDksCQkJLyogOCwzOSBjcDg1OCBUbyBMYXRpbi05ICovCi0g ICAgeDU1YXMsCQkJLyogOCw0MCBjcDg1NSBUbyBMYXRpbi05ICovCi0gICAgeDU1YXMsCQkJLyog OCw0MSBjcDEyNTEgVG8gTGF0aW4tOSAqLwotICAgIHhsZWZ0MTI4LAkJCS8qIDgsNDIgQnVsZ2Fy aWFuIFRvIExhdGluLTkgKi8KLSAgICB4MTI1MGw5LAkJCS8qIDgsNDMgQ1AxMjUwIFRvIExhdGlu LTkgKi8KLSAgICB4bXpsOSwJCQkvKiA4LDQ0IE1hem92aWEgVG8gTGF0aW4tOSAqLwotICAgIE5V TEwsCQkJLyogOCw0NSBVQ1MtMiB0byBMYXRpbi05ICovCi0gICAgTlVMTCwJCQkvKiA4LDQ2IFVU Ri04IHRvIExhdGluLTkgKi8KLSAgICBOVUxMLAkJCS8qIDgsNDcgS09JOFIgdG8gTGF0aW4tOSAq LwotICAgIE5VTEwsCQkJLyogOCw0OCBLT0k4VSB0byBMYXRpbi05ICovCi0gICAgeHcxbDksCQkJ LyogOCw0OSBDUDEyNTIgdG8gTGF0aW4tOSAqLwotICAgIE5VTEwsCQkJLyogOSwwMCBVbmljb2Rl Li4uICovCi0gICAgTlVMTCwJCQkvKiA5LDAxICovCi0gICAgTlVMTCwJCQkvKiA5LDAyICovCi0g ICAgTlVMTCwJCQkvKiA5LDAzICovCi0gICAgTlVMTCwJCQkvKiA5LDA0ICovCi0gICAgTlVMTCwJ CQkvKiA5LDA1ICovCi0gICAgTlVMTCwJCQkvKiA5LDA2ICovCi0gICAgTlVMTCwJCQkvKiA5LDA3 ICovCi0gICAgTlVMTCwJCQkvKiA5LDA4ICovCi0gICAgTlVMTCwJCQkvKiA5LDA5ICovCi0gICAg TlVMTCwJCQkvKiA5LDEwICovCi0gICAgTlVMTCwJCQkvKiA5LDExICovCi0gICAgTlVMTCwJCQkv KiA5LDEyICovCi0gICAgTlVMTCwJCQkvKiA5LDEzICovCi0gICAgTlVMTCwJCQkvKiA5LDE0ICov Ci0gICAgTlVMTCwJCQkvKiA5LDE1ICovCi0gICAgTlVMTCwJCQkvKiA5LDE2ICovCi0gICAgTlVM TCwJCQkvKiA5LDE3ICovCi0gICAgTlVMTCwJCQkvKiA5LDE4ICovCi0gICAgTlVMTCwJCQkvKiA5 LDE5ICovCi0gICAgTlVMTCwJCQkvKiA5LDIwICovCi0gICAgTlVMTCwJCQkvKiA5LDIxICovCi0g ICAgTlVMTCwJCQkvKiA5LDIyICovCi0gICAgTlVMTCwJCQkvKiA5LDIzICovCi0gICAgTlVMTCwJ CQkvKiA5LDI0ICovCi0gICAgTlVMTCwJCQkvKiA5LDI1ICovCi0gICAgTlVMTCwJCQkvKiA5LDI2 ICovCi0gICAgTlVMTCwJCQkvKiA5LDI3ICovCi0gICAgTlVMTCwJCQkvKiA5LDI4ICovCi0gICAg TlVMTCwJCQkvKiA5LDI5ICovCi0gICAgTlVMTCwJCQkvKiA5LDMwICovCi0gICAgTlVMTCwJCQkv KiA5LDMxICovCi0gICAgTlVMTCwJCQkvKiA5LDMyICovCi0gICAgTlVMTCwJCQkvKiA5LDMzICov Ci0gICAgTlVMTCwJCQkvKiA5LDM0ICovCi0gICAgTlVMTCwJCQkvKiA5LDM1ICovCi0gICAgTlVM TCwJCQkvKiA5LDM2ICovCi0gICAgTlVMTCwJCQkvKiA5LDM3ICovCi0gICAgTlVMTCwJCQkvKiA5 LDM4ICovCi0gICAgTlVMTCwJCQkvKiA5LDM5ICovCi0gICAgTlVMTCwJCQkvKiA5LDQwICovCi0g ICAgTlVMTCwJCQkvKiA5LDQxICovCi0gICAgTlVMTCwJCQkvKiA5LDQyICovCi0gICAgTlVMTCwJ CQkvKiA5LDQzICovCi0gICAgTlVMTCwJCQkvKiA5LDQ0ICovCi0gICAgTlVMTCwJCQkvKiA5LDQ1 ICovCi0gICAgTlVMTCwJCQkvKiA5LDQ2ICovCi0gICAgTlVMTCwJCQkvKiA5LDQ3ICovCi0gICAg TlVMTCwJCQkvKiA5LDQ4ICovCi0gICAgTlVMTCwJCQkvKiA5LDQ5ICovCi0gICAgTlVMTCwJCQkv KiAxMCwwMCAqLwotICAgIE5VTEwsCQkJLyogMTAsMDEgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDAy ICovCi0gICAgTlVMTCwJCQkvKiAxMCwwMyAqLwotICAgIE5VTEwsCQkJLyogMTAsMDQgKi8KLSAg ICBOVUxMLAkJCS8qIDEwLDA1ICovCi0gICAgTlVMTCwJCQkvKiAxMCwwNiAqLwotICAgIE5VTEws CQkJLyogMTAsMDcgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDA4ICovCi0gICAgTlVMTCwJCQkvKiAx MCwwOSAqLwotICAgIE5VTEwsCQkJLyogMTAsMTAgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDExICov Ci0gICAgTlVMTCwJCQkvKiAxMCwxMiAqLwotICAgIE5VTEwsCQkJLyogMTAsMTMgKi8KLSAgICBO VUxMLAkJCS8qIDEwLDE0ICovCi0gICAgTlVMTCwJCQkvKiAxMCwxNSAqLwotICAgIE5VTEwsCQkJ LyogMTAsMTYgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDE3ICovCi0gICAgTlVMTCwJCQkvKiAxMCwx OCAqLwotICAgIE5VTEwsCQkJLyogMTAsMTkgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDIwICovCi0g ICAgTlVMTCwJCQkvKiAxMCwyMSAqLwotICAgIE5VTEwsCQkJLyogMTAsMjIgKi8KLSAgICBOVUxM LAkJCS8qIDEwLDIzICovCi0gICAgTlVMTCwJCQkvKiAxMCwyNCAqLwotICAgIE5VTEwsCQkJLyog MTAsMjUgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDI2ICovCi0gICAgTlVMTCwJCQkvKiAxMCwyNyAq LwotICAgIE5VTEwsCQkJLyogMTAsMjggKi8KLSAgICBOVUxMLAkJCS8qIDEwLDI5ICovCi0gICAg TlVMTCwJCQkvKiAxMCwzMCAqLwotICAgIE5VTEwsCQkJLyogMTAsMzEgKi8KLSAgICBOVUxMLAkJ CS8qIDEwLDMyICovCi0gICAgTlVMTCwJCQkvKiAxMCwzMyAqLwotICAgIE5VTEwsCQkJLyogMTAs MzQgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDM1ICovCi0gICAgTlVMTCwJCQkvKiAxMCwzNiAqLwot ICAgIE5VTEwsCQkJLyogMTAsMzcgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDM4ICovCi0gICAgTlVM TCwJCQkvKiAxMCwzOSAqLwotICAgIE5VTEwsCQkJLyogMTAsNDAgKi8KLSAgICBOVUxMLAkJCS8q IDEwLDQxICovCi0gICAgTlVMTCwJCQkvKiAxMCw0MiAqLwotICAgIE5VTEwsCQkJLyogMTAsNDMg Ki8KLSAgICBOVUxMLAkJCS8qIDEwLDQ0ICovCi0gICAgTlVMTCwJCQkvKiAxMCw0NSAqLwotICAg IE5VTEwsCQkJLyogMTAsNDYgKi8KLSAgICBOVUxMLAkJCS8qIDEwLDQ3ICovCi0gICAgTlVMTCwJ CQkvKiAxMCw0OCAqLwotICAgIE5VTEwJCQkvKiAxMCw0OSAqLwotfTsKLWludCBueGxzID0gKHNp emVvZih4bHMpIC8gc2l6ZW9mKENIQVIgKikpOwotCi0jaWZuZGVmIE5PTE9DQUwKLS8qCi0gIFRo ZSBmb2xsb3dpbmcgcm91dGluZXMgYXJlIHVzZWZ1bCBvbmx5IGZvciB0ZXJtaW5hbCBjaGFyYWN0 ZXIgc2V0cywgYW5kIHNvCi0gIGlmZGVmJ2Qgb3V0IGZvciBOT0xPQ0FMIGNvbXBpbGF0aW9ucy4K LSovCi0KLS8qCi0gIEMgUyBfIEkgUyBfIE4gUiBDCi0KLSAgUmV0dXJucyBub256ZXJvIGlmIGFy Z3VtZW50IGluZGljYXRlcyBhIDctYml0IG5hdGlvbmFsIGNoYXJhY3RlciBzZXQsCi0gIHplcm8g b3RoZXJ3aXNlLgotKi8KLWludAotY3NfaXNfbnJjKHgpIGludCB4OyB7Ci0jaWZkZWYgVU5JQ09E RQotICAgIGlmICh4ID09IFRYX0oyMDFSIHx8IHggPT0gVFhfREVDU1BFQyB8fCB4ID09IFRYX0RF Q1RFQ0gKLSAgICAgICAgfHwgdHhyaW5mb1t4XSA9PSBOVUxMKQotICAgICAgcmV0dXJuKDApOwot ICAgIGVsc2UKLSAgICAgIHJldHVybih0eHJpbmZvW3hdLT5mbGFncyAmIFgyVV9TVEQgJiYgdHhy aW5mb1t4XS0+c2l6ZSA9PSA5NCk7Ci0jZWxzZSAvKiBVTklDT0RFICovCi0gICAgaWYgKChjc19z aXplKHgpID09IDk0KSkKLSAgICAgIHJldHVybigxKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4o MCk7Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotfQotCi0vKgotICBDIFMgXyBJIFMgXyBTIFQgRAot Ci0gIFJldHVybnMgbm9uemVybyBpZiBhcmd1bWVudCBpbmRpY2F0ZXMgYW4gSVNPIDQ4NzMtc3Rh bmRhcmQtZm9ybWF0Ci0gIGNoYXJhY3RlciBzZXQsIGkuZS4gb25lIGluIHdoaWNoIHRoZSBjb250 cm9sIHJlZ2lvbiBpcyBOT1QgdXNlZCBmb3IKLSAgZ3JhcGhpY3M7IHplcm8gb3RoZXJ3aXNlLgot Ki8KLWludAotY3NfaXNfc3RkKHgpIGludCB4OyB7Ci0jaWZkZWYgVU5JQ09ERQotICAgIGlmICgh dHhyaW5mb1t4XSkJCQkvKiBFdmVuIG1vcmUgc2FmZXR5ICovCi0gICAgICByZXR1cm4oMCk7Ci0g ICAgZWxzZSBpZiAodHhyaW5mb1t4XS0+c2l6ZSA9PSAxMjgpCS8qIEp1c3QgZm9yIHNhZmV0eSAq LwotICAgICAgcmV0dXJuKDApOwotICAgIGVsc2UKLSAgICAgIHJldHVybih0eHJpbmZvW3hdLT5m bGFncyAmIFgyVV9TVEQpOyAvKiBPbmx5IHRoaXMgc2hvdWxkIGJlIG5lZWRlZCAqLwotI2Vsc2UK LSAgICBzd2l0Y2ggKHgpIHsKLSAgICAgIGNhc2UgRkNfQ1A0Mzc6CQkJLyogQ29kZSBwYWdlcyB1 c2UgQzEgZ3JhcGhpY3MgKi8KLSAgICAgIGNhc2UgRkNfQ1A4NTA6Ci0gICAgICBjYXNlIEZDX0NQ ODUyOgotICAgICAgY2FzZSBGQ19DUDg2MjoKLSAgICAgIGNhc2UgRkNfQ1A4NjY6Ci0gICAgICBj YXNlIEZDX0NQODY5OgotICAgICAgY2FzZSBGQ19DUDg1ODoKLSAgICAgIGNhc2UgRkNfQVBQUUQ6 CQkJLyogU28gZG8gQXBwbGUgYW5kIE5lWFRTVEVQICovCi0gICAgICBjYXNlIEZDX05FWFQ6Ci0J cmV0dXJuKDApOwotICAgICAgZGVmYXVsdDoJCQkJLyogT3RoZXJzIGJlaGF2ZSAqLwotCXJldHVy bigxKTsKLSAgICB9Ci0jZW5kaWYgLyogQ0tPVUlOSSAqLwotfQotCi1pbnQKLWNzX3NpemUoeCkg aW50IHg7IHsKLSNpZmRlZiBVTklDT0RFCi0gICAgaWYgKCF0eHJpbmZvW3hdKQotICAgICAgcmV0 dXJuKDEyOCk7Ci0gICAgcmV0dXJuKHR4cmluZm9beF0tPnNpemUpOwotI2Vsc2UKLSAgICBzd2l0 Y2goeCkgewotICAgICAgY2FzZSBGQ19VU0FTQ0lJOgotICAgICAgY2FzZSBGQ19VS0FTQ0lJOgot ICAgICAgY2FzZSBGQ19EVUFTQ0lJOgotICAgICAgY2FzZSBGQ19GSUFTQ0lJOgotICAgICAgY2Fz ZSBGQ19GUkFTQ0lJOgotICAgICAgY2FzZSBGQ19GQ0FTQ0lJOgotICAgICAgY2FzZSBGQ19HRUFT Q0lJOgotICAgICAgY2FzZSBGQ19IVUFTQ0lJOgotICAgICAgY2FzZSBGQ19JVEFTQ0lJOgotICAg ICAgY2FzZSBGQ19OT0FTQ0lJOgotICAgICAgY2FzZSBGQ19QT0FTQ0lJOgotICAgICAgY2FzZSBG Q19TUEFTQ0lJOgotICAgICAgY2FzZSBGQ19TV0FTQ0lJOgotICAgICAgY2FzZSBGQ19DSEFTQ0lJ OgotICAgICAgY2FzZSBGQ19LT0k3OgotICAgICAgY2FzZSBGQ19IRTc6Ci0gICAgICBjYXNlIEZD X0VMT1Q6Ci0JcmV0dXJuKDk0KTsKLQotICAgICAgY2FzZSBGQ18xTEFUSU46Ci0gICAgICBjYXNl IEZDXzJMQVRJTjoKLSAgICAgIGNhc2UgRkNfREVDTUNTOgotICAgICAgY2FzZSBGQ19ER01DUzoK LSAgICAgIGNhc2UgRkNfSFBSODoKLSAgICAgIGNhc2UgRkNfQ1lSSUxMOgotICAgICAgY2FzZSBG Q19LT0k4OgotICAgICAgY2FzZSBGQ19IRUJSRVc6Ci0gICAgICBjYXNlIEZDX0dSRUVLOgotICAg ICAgY2FzZSBGQ185TEFUSU46Ci0JcmV0dXJuKDk2KTsKLQotICAgICAgY2FzZSBGQ19ORVhUOgot ICAgICAgY2FzZSBGQ19DUDQzNzoKLSAgICAgIGNhc2UgRkNfQ1A4NTA6Ci0gICAgICBjYXNlIEZD X0NQODUyOgotICAgICAgY2FzZSBGQ19DUDg1NToKLSAgICAgIGNhc2UgRkNfQ1A4NjI6Ci0gICAg ICBjYXNlIEZDX0NQODY2OgotICAgICAgY2FzZSBGQ19DUDEyNTE6Ci0gICAgICBjYXNlIEZDX0FQ UFFEOgotCXJldHVybigxMjgpOwotI2lmZGVmIEtBTkpJCi0gICAgICBjYXNlIEZDX0pJUzc6Ci0J cmV0dXJuKC05NCk7Ci0gICAgICBjYXNlIEZDX1NISklTOgotCXJldHVybigtMTI4KTsKLSAgICAg IGNhc2UgRkNfSkVVQzoKLSAgICAgIGNhc2UgRkNfSkRFQzoKLQlyZXR1cm4oLTk2KTsKLSNlbmRp ZiAvKiBLQU5KSSAqLwotICAgICAgY2FzZSBGQ19DUDg1ODoKLSAgICAgIGRlZmF1bHQ6Ci0JcmV0 dXJuKC0xKTsKLSAgICB9Ci0jZW5kaWYgLyogVU5JQ09ERSAqLwotfQotI2VuZGlmIC8qIE5PTE9D QUwgKi8KLQotLyoKLSAgUyBFIFQgWCBMIEEgVCBZIFAgRSAgLS0gIFNldCBUcmFuc2xhdGlvbiBU eXBlCi0KLSAgU2V0cyBnbG9iYWwgeGxhdHlwZSB0byBpbmRpY2F0ZSB3aGljaCBraW5kIG9mIHRy YW5zbGF0aW9uOgotCi0gICAgWExBX05PTkUgICAgICBObyB0cmFuc2xhdGlvbgotICAgIFhMQV9C WVRFICAgICAgQnl0ZS1mb3ItQnl0ZSB0cmFuc2xhdGlvbgotICAgIFhMQV9KQVBBTiAgICAgSmFw YW5lc2UgS2FuamkgdHJhbnNsYXRpb24KLSAgICBYTEFfVU5JQ09ERSAgIFVuaWNvZGUgdHJhbnNs YXRpb25zCi0KLSAgQW5kIHNldHMgdXAgdGhlIGFwcHJvcHJpYXRlIHRyYW5zbGF0aW9uIGZ1bmN0 aW9uIHBvaW50ZXJzIGFzIGZvbGxvd3M6Ci0KLSAgRm9yIG5vIHRyYW5zbGF0aW9uOgotICAgIEFs bCBmdW5jdGlvbiBwb2ludGVycyBhcmUgTlVMTC4KLQotICBGb3IgQnl0ZS1mb3ItQnl0ZSB0cmFu c2F0aW9uOgotICAgIHJ4ICA9IFRDUyB0byBGQ1MgKHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW4gdGhp cyBtb2R1bGUuLi4pCi0gICAgc3ggID0gRkNTIHRvIFRDUwotCi0gIEZvciBVbmljb2RlIHRyYW5z bGF0aW9uczoKLSAgICB4ZnUgPSBGQ1MgdG8gVUNTICh0aGVzZSBmdW5jdGlvbnMgYXJlIGluIGNr Y3VuaS5jLi4uKQotICAgIHh0dSA9IFRDUyB0byBVQ1MKLSAgICB4dWYgPSBVQ1MgdG8gRkNTCi0g ICAgeHV0ID0gVUNTIHRvIFRDUwotKi8KLVZPSUQKLXNldHhsYXR5cGUodGNzLCBmY3MpIGludCB0 Y3MsIGZjczsgewotI2lmZGVmIFVOSUNPREUKLSAgICB4ZnUgPSBOVUxMOwkJCQkvKiBVbmljb2Rl IDwtPiBUQ1MvRkNTIGZ1bmN0aW9ucyAqLwotICAgIHh0dSA9IE5VTEw7Ci0gICAgeHVmID0gTlVM TDsKLSAgICB4dXQgPSBOVUxMOwotI2VuZGlmIC8qIFVOSUNPREUgKi8KLSAgICByeCA9IHN4ID0g TlVMTDsKLSAgICBkZWJ1ZyhGMTAxLCJzZXR4bGF0eXBlIGZjcyIsIiIsZmNzKTsKLSAgICBkZWJ1 ZyhGMTAxLCJzZXR4bGF0eXBlIHRjcyIsIiIsdGNzKTsKLQotICAgIGlmICh0Y3MgPCAwIHx8IHRj cyA+IE1BWFRDU0VUUykgewotCWRlYnVnKEYxMDEsInNldHhsYXR5cGUgYmFkIHRjcyIsIiIsdGNz KTsKLQlyZXR1cm47Ci0gICAgfQotICAgIGlmIChmY3MgPCAwIHx8IGZjcyA+IE1BWEZDU0VUUykg ewotCWRlYnVnKEYxMDEsInNldHhsYXR5cGUgYmFkIGZjcyIsIiIsZmNzKTsKLQlyZXR1cm47Ci0g ICAgfQotICAgIGlmICh0Y3MgPT0gVENfVFJBTlNQIHx8IHhmcnhsYSA9PSAwKSB7IC8qIFRyYW5z ZmVyIGNoYXJzZXQgVFJBTlNQQVJFTlQgKi8KLQlkZWJ1ZyhGMTAxLCJzZXR4bGF0eXBlIHRyYW5z cGFyZW50IGJlY2F1c2UgVENTPT1UcmFuc3BhcmVudCIsIiIsdGNzKTsKLQl4bGF0eXBlID0gWExB X05PTkU7CQkvKiBUcmFuc2xhdGlvbiB0eXBlIGlzIE5vbmUgKi8KLSNpZmRlZiBVTklDT0RFCi0g ICAgLyogSWYgYW55IG9mIG91ciBjaGFyc2V0cyBpcyBVbmljb2RlIHdlIHVzZSBVbmljb2RlIGZ1 bmN0aW9ucyAqLwotICAgIC8qIGV2ZW4gaWYgVENTIGFuZCBGQ1MgYXJlIHRoZSBzYW1lIGJlY2F1 c2Ugb2YgQk9NIGFuZCBieXRlIHN3YXBwaW5nICovCi0gICAgfSBlbHNlIGlmICh0Y3MgPT0gVENf VUNTMiB8fCB0Y3MgPT0gVENfVVRGOCB8fAotCSAgICAgICBmY3MgPT0gRkNfVUNTMiB8fCBmY3Mg PT0gRkNfVVRGOCkgewotCWRlYnVnKEYxMDEsInNldHhsYXR5cGUgVW5pY29kZSB0Y3MiLCIiLHRj cyk7Ci0JZGVidWcoRjEwMSwic2V0eGxhdHlwZSBVbmljb2RlIGZjcyIsIiIsZmNzKTsKLQkvKiBV bmljb2RlIDwtPiBUQ1MvRkNTIGZ1bmN0aW9ucyAqLwotCXhmdSA9IHhsX2ZjdVtmY3NdOwkJLyog RkNTIC0+IFVDUyAqLwotCXh0dSA9IHhsX3RjdVt0Y3NdOwkJLyogVENTIC0+IFVDUyAqLwotCXh1 ZiA9IHhsX3VmY1tmY3NdOwkJLyogVUNTIC0+IEZDUyAqLwotCXh1dCA9IHhsX3V0Y1t0Y3NdOwkJ LyogVUNTIC0+IFRDUyAqLwotICAgICAgICB4bGF0eXBlID0gWExBX1VOSUNPREU7CQkvKiBUcmFu c2xhdGlvbiB0eXBlIGlzIFVuaWNvZGUgKi8KLSNpZmRlZiBDT01NRU5UCi0JLyogVGhlc2UgbWFr ZSB0cm91YmxlIGluIDY0LWJpdCBsYW5kICovCi0JZGVidWcoRjAwMSwic2V0eGxhdHlwZSBVbmlj b2RlIHhmdSIsIiIsKHVuc2lnbmVkKXhmdSk7Ci0JZGVidWcoRjAwMSwic2V0eGxhdHlwZSBVbmlj b2RlIHh1ZiIsIiIsKHVuc2lnbmVkKXh1Zik7Ci0jZW5kaWYgLyogQ09NTUVOVCAqLwotI2VuZGlm IC8qIFVOSUNPREUgKi8KLSAgICB9IGVsc2UgaWYgKGNzZXF0YWJbdGNzXSA9PSBmY3MpIHsJLyog T3IgaWYgVENTID09IEZDUyAqLwotCWRlYnVnKEYxMDEsInNldHhsYXR5cGUgdHJhbnNwYXJlbnQg YmVjYXVzZSBUQ1M9PUZDUyIsIiIsdGNzKTsKLQl4bGF0eXBlID0gWExBX05PTkU7CQkvKiB0cmFu c2xhdGlvbiB0eXBlIGlzIGFsc28gTm9uZSAqLwotI2lmZGVmIEtBTkpJCi0gICAgLyogT3RoZXJ3 aXNlIGlmIGFueSBvZiB0aGVtIGlzIEphcGFuZXNlLCB3ZSB1c2UgS2FuamkgZnVuY3Rpb25zICov Ci0gICAgfSBlbHNlIGlmICh0Y3MgPT0gVENfSkVVQyB8fCBmY3NpbmZvW2Zjc10uYWxwaGFiZXQg PT0gQUxfSkFQQU4pIHsKLQlkZWJ1ZyhGMTAxLCJzZXR4bGF0eXBlIEphcGFuZXNlIHRjcyIsIiIs dGNzKTsKLQlkZWJ1ZyhGMTAxLCJzZXR4bGF0eXBlIEphcGFuZXNlIGZjcyIsIiIsZmNzKTsKLSAg ICAgICAgeGxhdHlwZSA9IFhMQV9KQVBBTjsJCS8qIFRyYW5zbGF0aW9uIHR5cGUgaXMgSmFwYW5l c2UgKi8KLSNlbmRpZiAvKiBLQU5KSSAqLwotICAgIC8qIE90aGVyd2lzZSB3ZSB1c2UgYnl0ZSBm dW5jdGlvbnMgKi8KLSAgICB9IGVsc2UgewkJCQkvKiBPdGhlcndpc2UuLi4gKi8KLQlyeCA9IHhs clt0Y3NdW2Zjc107CQkvKiBJbnB1dCB0cmFuc2xhdGlvbiBmdW5jdGlvbiAqLwotCXN4ID0geGxz W3Rjc11bZmNzXTsJCS8qIE91dHB1dCB0cmFuc2xhdGlvbiBmdW5jdGlvbiAqLwotCWRlYnVnKEYx MDEsInNldHhsYXR5cGUgQnl0ZSB0Y3MiLCIiLHRjcyk7Ci0JZGVidWcoRjEwMSwic2V0eGxhdHlw ZSBCeXRlIGZjcyIsIiIsZmNzKTsKLSAgICAgICAgeGxhdHlwZSA9IFhMQV9CWVRFOwkJLyogVHJh bnNsYXRpb24gdHlwZSBpcyBCeXRlICovCi0gICAgfQotICAgIGRlYnVnKEYxMDEsInNldHhsYXR5 cGUgeGxhdHlwZSIsIiIseGxhdHlwZSk7Ci19Ci0KLS8qIFNldCB1cCB0cmFuc2xhdGlvbiBiZXR3 ZWVuIHR3byBmaWxlIGNoYXJhY3RlciBzZXRzIHdpdGggVUNTIGludGVybWVkaWF0ZSAqLwotCi0j aWZkZWYgVU5JQ09ERQotVk9JRAotaW5pdHhsYXRlKGNzaW4sIGNzb3V0KSBpbnQgY3NpbiwgY3Nv dXQ7IHsKLSAgICB4ZnUgPSBOVUxMOwotICAgIHh0dSA9IE5VTEw7Ci0gICAgeHVmID0gTlVMTDsK LSAgICB4dXQgPSBOVUxMOwotCi0gICAgZGVidWcoRjEwMSwiaW5pdHhsYXRlIGNzaW4iLCIiLGNz aW4pOwotICAgIGRlYnVnKEYxMDEsImluaXR4bGF0ZSBjc291dCIsIiIsY3NvdXQpOwotCi0gICAg aWYgKGNzaW4gPCAwIHx8IGNzaW4gPiBNQVhGQ1NFVFMpIHsKLQlkZWJ1ZyhGMTAxLCJpbml0eGxh dGUgYmFkIGNzaW4iLCIiLGNzaW4pOwotCXJldHVybjsKLSAgICB9Ci0gICAgaWYgKGNzb3V0IDwg MCB8fCBjc291dCA+IE1BWEZDU0VUUykgewotCWRlYnVnKEYxMDEsImluaXR4bGF0ZSBiYWQgY3Nv dXQiLCIiLGNzb3V0KTsKLQlyZXR1cm47Ci0gICAgfQotICAgIGlmIChjc2luID09IGNzb3V0ICYm IGNzaW4gIT0gRkNfVUNTMikgewotCXhsYXR5cGUgPSBYTEFfTk9ORTsJCS8qIFRyYW5zbGF0aW9u IHR5cGUgaXMgTm9uZSAqLwotCXJldHVybjsKLSAgICB9Ci0gICAgeGxhdHlwZSA9IFhMQV9VTklD T0RFOwkJLyogVHJhbnNsYXRpb24gdHlwZSBpcyBVbmljb2RlICovCi0gICAgeGZ1ID0geGxfZmN1 W2NzaW5dOwkJCS8qIEZDUyAtPiBVQ1MgKi8KLSAgICB4dWYgPSB4bF91ZmNbY3NvdXRdOwkJLyog VUNTIC0+IEZDUyAqLwotICAgIHhwbmJ5dGUoLTEsMCwwLE5VTEwpOwkJLyogUmVzZXQgVUNTLTIg Ki8KLSNpZmRlZiBDT01NRU5UCi0gICAgZGVidWcoRjAwMSwiaW5pdHhsYXRlIFVuaWNvZGUgeGZ1 IiwiIiwodW5zaWduZWQpeGZ1KTsKLSAgICBkZWJ1ZyhGMDAxLCJpbml0eGxhdGUgVW5pY29kZSB4 dWYiLCIiLCh1bnNpZ25lZCl4dWYpOwotI2VuZGlmIC8qIENPTU1FTlQgKi8KLSAgICBkZWJ1ZyhG MTAxLCJpbml0eGxhdGUgeGxhdHlwZSIsIiIseGxhdHlwZSk7Ci19Ci0jZW5kaWYgLyogVU5JQ09E RSAqLwotCi1pbnQgY3NldHNpbml0ZWQgPSAwOwotCi1WT0lECi1pbml0Y3NldHMoKSB7CQkJCS8q IFJvdXRpbmUgdG8gcmVzZXQgb3IgaW5pdGlhbGl6ZSAqLwotICAgIGludCBpOwkJCQkvKiBjaGFy YWN0ZXItc2V0IGFzc29jaWF0aW9ucy4gKi8KLQotI2lmZGVmIFVOSUNPREUKLSAgICBpZiAodWNz b3JkZXIgPCAwKQkJCS8qIEZvciBjcmVhdGluZyBVQ1MtMiBmaWxlcy4gKi8KLSAgICAgIHVjc29y ZGVyID0gYnl0ZW9yZGVyOwotICAgIGlmICh1Y3NvcmRlciA8IDApCi0gICAgICB1Y3NvcmRlciA9 IDA7Ci0gICAgaWYgKGZpbGVvcmRlciA8IDApCQkJLyogRm9yIHJlYWRpbmcgVUNTLTIgZmlsZXMu ICovCi0gICAgICBmaWxlb3JkZXIgPSB1Y3NvcmRlcjsKLSNlbmRpZiAvKiBVTklDT0RFICovCi0K LSAgICBkZWJ1ZyhGMTAxLCJpbml0Y3NldHMgbnhscyIsIiIsbnhscyk7Ci0gICAgZGVidWcoRjEw MSwiaW5pdGNzZXRzIG54bHIiLCIiLG54bHIpOwotCi0gICAgZGVidWcoRjEwMSwiaW5pdGNzZXRz IFRFUk0gTE9DQUwgQ1NFVCIsIiIsdGNzbCk7Ci0gICAgZGVidWcoRjEwMSwiaW5pdGNzZXRzIFRF Uk0gUkVNT1RFIENTRVQiLCIiLHRjc3IpOwotCi0gICAgZm9yIChpID0gMDsgaSA8PSBNQVhGQ1NF VFM7IGkrKykJLyogRmlyc3QgY2xlYXIgdGhlbSBhbGwuLi4gKi8KLSAgICAgIGFmY3NldFtpXSA9 IC0xOwotICAgIGZvciAoaSA9IDA7IGkgPD0gTUFYVENTRVRTOyBpKyspCi0gICAgICBheGNzZXRb aV0gPSAtMTsKLQotICAgIC8qIE5vdyBzZXQgc3BlY2lmaWMgZGVmYXVsdHMgZm9yIGluY29taW5n IGZpbGVzICovCi0KLSAgICB4bGF0eXBlID0gWExBX05PTkU7Ci0KLSAgICBheGNzZXRbVENfVFJB TlNQXSAgPSBGQ19UUkFOU1A7Ci0gICAgYXhjc2V0W1RDX1VTQVNDSUldID0gRkNfVVNBU0NJSTsK LQotI2lmZGVmIE9TMgotICAgIHN3aXRjaCAoZmNoYXJzZXQpIHsKLSAgICAgIGNhc2UgRkNfQ1A4 NTA6Ci0gICAgICBjYXNlIEZDX0NQODU4OgotICAgICAgY2FzZSBGQ19DUDQzNzoKLSAgICAgIGNh c2UgRkNfMUxBVElOOgotCWF4Y3NldFtUQ18xTEFUSU5dICA9IGZjaGFyc2V0OwotCWJyZWFrOwot ICAgICAgZGVmYXVsdDoKLQlheGNzZXRbVENfMUxBVElOXSAgPSBGQ19DUDg1MDsKLSAgICB9Ci0j ZWxzZQotI2lmZGVmIEhQVVgKLSAgICBheGNzZXRbVENfMUxBVElOXSAgPSBGQ19IUFI4OwotI2Vs c2UKLSNpZmRlZiBWTVMKLSAgICBheGNzZXRbVENfMUxBVElOXSAgPSBGQ19ERUNNQ1M7Ci0jZWxz ZQotI2lmZGVmIE5FWFQKLSAgICBheGNzZXRbVENfMUxBVElOXSAgPSBGQ19ORVhUOwotI2Vsc2UK LSNpZmRlZiBkYXRhZ2VuZXJhbAotICAgIGF4Y3NldFtUQ18xTEFUSU5dICA9IEZDX0RHTUNTOwot I2Vsc2UKLSAgICAvKiBTaG91bGQgd2UgdXNlIGNvZGUgcGFnZXMgb24gc29tZSBQQyBiYXNlZCBV TklYZXM/ICovCi0gICAgYXhjc2V0W1RDXzFMQVRJTl0gID0gRkNfMUxBVElOOwotI2VuZGlmIC8q IGRhdGFnZW5lcmFsICovCi0jZW5kaWYgLyogTkVYVCAqLwotI2VuZGlmIC8qIFZNUyAqLwotI2Vu ZGlmIC8qIEhQVVggKi8KLSNlbmRpZiAvKiBPUzIgKi8KLQotI2lmZGVmIE9TMgotICAgIGF4Y3Nl dFtUQ18yTEFUSU5dICA9IEZDX0NQODUyOwotICAgIGF4Y3NldFtUQ19DWVJJTExdICA9IEZDX0NQ ODY2OwotICAgIGF4Y3NldFtUQ19KRVVDXSAgICA9IEZDX1NISklTOwotICAgIGF4Y3NldFtUQ19I RUJSRVddICA9IEZDX0NQODYyOwotICAgIGF4Y3NldFtUQ19HUkVFS10gICA9IEZDX0NQODY5Owot ICAgIGF4Y3NldFtUQ185TEFUSU5dICA9IEZDX0NQODU4OwotICAgIGF4Y3NldFtUQ19VQ1MyXSAg ICA9IEZDX1VDUzI7Ci0gICAgYXhjc2V0W1RDX1VURjhdICAgID0gRkNfVUNTMjsKLSNlbHNlCi0g ICAgYXhjc2V0W1RDXzJMQVRJTl0gID0gRkNfMkxBVElOOwotICAgIGF4Y3NldFtUQ19DWVJJTExd ICA9IEZDX0NZUklMTDsKLSAgICBheGNzZXRbVENfSkVVQ10gICAgPSBGQ19KRVVDOwotICAgIGF4 Y3NldFtUQ19IRUJSRVddICA9IEZDX0hFQlJFVzsKLSAgICBheGNzZXRbVENfR1JFRUtdICAgPSBG Q19HUkVFSzsKLSAgICBheGNzZXRbVENfOUxBVElOXSAgPSBGQ185TEFUSU47Ci0gICAgYXhjc2V0 W1RDX1VDUzJdICAgID0gRkNfVVRGODsKLSAgICBheGNzZXRbVENfVVRGOF0gICAgPSBGQ19VVEY4 OwotI2VuZGlmIC8qIE9TMiAqLwotCi0gICAgLyogQW5kIGZvciBvdXRib3VuZCBmaWxlcyAqLwot Ci0gICAgYWZjc2V0W0ZDX1VTQVNDSUldID0gVENfVVNBU0NJSTsKLSAgICBhZmNzZXRbRkNfVUtB U0NJSV0gPSBUQ18xTEFUSU47Ci0gICAgYWZjc2V0W0ZDX0RVQVNDSUldID0gVENfMUxBVElOOwot ICAgIGFmY3NldFtGQ19GSUFTQ0lJXSA9IFRDXzFMQVRJTjsKLSAgICBhZmNzZXRbRkNfRlJBU0NJ SV0gPSBUQ18xTEFUSU47Ci0gICAgYWZjc2V0W0ZDX0ZDQVNDSUldID0gVENfMUxBVElOOwotICAg IGFmY3NldFtGQ19HRUFTQ0lJXSA9IFRDXzFMQVRJTjsKLSAgICBhZmNzZXRbRkNfSFVBU0NJSV0g PSBUQ18yTEFUSU47Ci0gICAgYWZjc2V0W0ZDX0lUQVNDSUldID0gVENfMUxBVElOOwotICAgIGFm Y3NldFtGQ19OT0FTQ0lJXSA9IFRDXzFMQVRJTjsKLSAgICBhZmNzZXRbRkNfUE9BU0NJSV0gPSBU Q18xTEFUSU47Ci0gICAgYWZjc2V0W0ZDX1NQQVNDSUldID0gVENfMUxBVElOOwotICAgIGFmY3Nl dFtGQ19TV0FTQ0lJXSA9IFRDXzFMQVRJTjsKLSAgICBhZmNzZXRbRkNfQ0hBU0NJSV0gPSBUQ18x TEFUSU47Ci0gICAgYWZjc2V0W0ZDXzFMQVRJTl0gID0gVENfMUxBVElOOwotICAgIGFmY3NldFtG Q18yTEFUSU5dICA9IFRDXzJMQVRJTjsKLSAgICBhZmNzZXRbRkNfREVDTUNTXSAgPSBUQ18xTEFU SU47Ci0gICAgYWZjc2V0W0ZDX05FWFRdICAgID0gVENfMUxBVElOOwotICAgIGFmY3NldFtGQ19D UDQzN10gICA9IFRDXzFMQVRJTjsKLSAgICBhZmNzZXRbRkNfQ1A4NTBdICAgPSBUQ18xTEFUSU47 Ci0gICAgYWZjc2V0W0ZDX0NQODUyXSAgID0gVENfMkxBVElOOwotICAgIGFmY3NldFtGQ19BUFBR RF0gICA9IFRDXzFMQVRJTjsKLSAgICBhZmNzZXRbRkNfREdNQ1NdICAgPSBUQ18xTEFUSU47Ci0g ICAgYWZjc2V0W0ZDX0hQUjhdICAgID0gVENfMUxBVElOOwotICAgIGFmY3NldFtGQ19DWVJJTExd ICA9IFRDX0NZUklMTDsKLSAgICBhZmNzZXRbRkNfQ1A4NjZdICAgPSBUQ19DWVJJTEw7Ci0gICAg YWZjc2V0W0ZDX0tPSTddICAgID0gVENfQ1lSSUxMOwotICAgIGFmY3NldFtGQ19LT0k4XSAgICA9 IFRDX0NZUklMTDsKLSAgICBhZmNzZXRbRkNfSklTN10gICAgPSBUQ19KRVVDOwotICAgIGFmY3Nl dFtGQ19TSEpJU10gICA9IFRDX0pFVUM7Ci0gICAgYWZjc2V0W0ZDX0pFVUNdICAgID0gVENfSkVV QzsKLSAgICBhZmNzZXRbRkNfSkRFQ10gICAgPSBUQ19KRVVDOwotICAgIGFmY3NldFtGQ19IRTdd ICAgICA9IFRDX0hFQlJFVzsKLSAgICBhZmNzZXRbRkNfSEVCUkVXXSAgPSBUQ19IRUJSRVc7Ci0g ICAgYWZjc2V0W0ZDX0NQODYyXSAgID0gVENfSEVCUkVXOwotICAgIGFmY3NldFtGQ19FTE9UXSAg ICA9IFRDX0dSRUVLOwotICAgIGFmY3NldFtGQ19HUkVFS10gICA9IFRDX0dSRUVLOwotICAgIGFm Y3NldFtGQ19DUDg2OV0gICA9IFRDX0dSRUVLOwotICAgIGFmY3NldFtGQ185TEFUSU5dICA9IFRD XzlMQVRJTjsKLSAgICBhZmNzZXRbRkNfQ1A5MjNdICAgPSBUQ185TEFUSU47Ci0gICAgYWZjc2V0 W0ZDX0NQODU4XSAgID0gVENfOUxBVElOOwotICAgIGFmY3NldFtGQ19DUDg1NV0gICA9IFRDX0NZ UklMTDsKLSAgICBhZmNzZXRbRkNfQ1AxMjUxXSAgPSBUQ19DWVJJTEw7Ci0gICAgYWZjc2V0W0ZD X0JVTEdBUl0gID0gVENfQ1lSSUxMOwotICAgIGFmY3NldFtGQ19DUDEyNTBdICA9IFRDXzJMQVRJ TjsKLSAgICBhZmNzZXRbRkNfTUFaT1ZJQV0gPSBUQ18yTEFUSU47Ci0gICAgYWZjc2V0W0ZDX1VD UzJdICAgID0gVENfVVRGODsKLSAgICBhZmNzZXRbRkNfVVRGOF0gICAgPSBUQ19VVEY4OwotCi0g ICAgYWZjc2V0W0ZDX0tPSThSXSAgID0gVENfQ1lSSUxMOwotICAgIGFmY3NldFtGQ19LT0k4VV0g ICA9IFRDX0NZUklMTDsKLSAgICBhZmNzZXRbRkNfQ1AxMjUyXSAgPSBUQ18xTEFUSU47Ci0KLSAg ICBjc2V0c2luaXRlZCsrOwotICAgIHJldHVybjsKLX0KLSNlbmRpZiAvKiBOT0NTRVRTICovCgpk aWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V4bGEu aCBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1eGxhLmgKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzY2QxYTUuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05 LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V4bGEuaAorKysgL2Rldi9udWxsCkBAIC0x LDExOCArMCwwIEBACi0vKgotICBGaWxlIENLVVhMQS5ICi0KLSAgQy1LZXJtaXQgbGFuZ3VhZ2Ug YW5kIGNoYXJhY3Rlci1zZXQgc3VwcG9ydCBmb3IgVU5JWCwgVk1TLCBPUy8yLAotICBBT1MvVlMs IGFuZCBvdGhlciBzeXN0ZW1zLgotCi0gIFRoaXMgZmlsZSBzaG91bGQgYmUgdXNlZCBhcyBhIHRl bXBsYXRlIGZvciB0aGUgbGFuZ3VhZ2Ugc3VwcG9ydCBmaWxlcwotICBmb3Igb3RoZXIgQy1LZXJt aXQgaW1wbGVtZW50YXRpb25zIC0tIE1hY2ludG9zaCwgZXRjLgotKi8KLS8qCi0gIEF1dGhvcjog RnJhbmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4sCi0gIENvbHVtYmlhIFVuaXZlcnNpdHkg QWNhZGVtaWMgSW5mb3JtYXRpb24gU3lzdGVtcywgTmV3IFlvcmsgQ2l0eS4KLQotICBDb3B5cmln aHQgKEMpIDE5ODUsIDIwMDksCi0gICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBp biB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KLSAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRo ZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQotICAgIGNvcHlyaWdodCB0ZXh0IGlu IHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgotCi0q LwotCi0jaWZuZGVmIENLVVhMQV9ICi0jZGVmaW5lIENLVVhMQV9ICi0KLS8qIENvZGVzIGZvciBm aWxlIGNoYXJhY3RlciBzZXRzICovCi0KLS8qIElTTyA2NDYgYW5kIG90aGVyIElTTy02NDYtbGlr ZSA3LWJpdCBzZXRzICovCi0KLSNkZWZpbmUgRkNfVVNBU0NJSSAwICAgLyogVVMgQVNDSUkgKi8K LSNkZWZpbmUgRkNfVUtBU0NJSSAxICAgLyogVW5pdGVkIEtpbmdkb20gQVNDSUkgKi8KLSNkZWZp bmUgRkNfRFVBU0NJSSAyICAgLyogRHV0Y2ggSVNPIDY0NiBOUkMgKi8KLSNkZWZpbmUgRkNfRklB U0NJSSAzICAgLyogRmlubmlzaCBJU08gNjQ2IE5SQyAqLwotI2RlZmluZSBGQ19GUkFTQ0lJIDQg ICAvKiBGcmVuY2ggSVNPIDY0NiBOUkMgKi8KLSNkZWZpbmUgRkNfRkNBU0NJSSA1ICAgLyogRnJl bmNoIENhbmFkaWFuIElTTyA2NDYgTlJDICovCi0jZGVmaW5lIEZDX0dFQVNDSUkgNiAgIC8qIEdl cm1hbiBJU08gNjQ2IE5SQyAqLwotI2RlZmluZSBGQ19IVUFTQ0lJIDcgICAvKiBIdW5nYXJpYW4g SVNPIDY0NiBOUkMgKi8KLSNkZWZpbmUgRkNfSVRBU0NJSSA4ICAgLyogSXRhbGlhbiAqSVNPIDY0 NiBOUkMgKi8KLSNkZWZpbmUgRkNfTk9BU0NJSSA5ICAgLyogTm9yd2VnaWFuIGFuZCBEYW5pc2gg SVNPIDY0NiBOUkMgKi8KLSNkZWZpbmUgRkNfUE9BU0NJSSAxMCAgLyogUG9ydHVndWVzZSBJU08g NjQ2IE5SQyAqLwotI2RlZmluZSBGQ19TUEFTQ0lJIDExICAvKiBTcGFuaXNoIElTTyA2NDYgTlJD ICovCi0jZGVmaW5lIEZDX1NXQVNDSUkgMTIgIC8qIFN3ZWRpc2ggSVNPIDY0NiBOUkMgKi8KLSNk ZWZpbmUgRkNfQ0hBU0NJSSAxMyAgLyogU3dpc3MgSVNPIDY0NiBOUkMgKi8KLQotLyogOC1iaXQg Um9tYW4gY2hhcmFjdGVyIHNldHMgKi8KLQotI2RlZmluZSBGQ18xTEFUSU4gIDE0ICAvKiBJU08g ODg1OS0xIExhdGluIEFscGhhYmV0IDEgKi8KLSNkZWZpbmUgRkNfMkxBVElOICAxNSAgLyogSVNP IDg4NTktMiBMYXRpbiBBbHBoYWJldCAyICovCi0jZGVmaW5lIEZDX0RFQ01DUyAgMTYgIC8qIERF QyBNdWx0aW5hdGlvbmFsIENoYXJhY3RlciBTZXQgKi8KLSNkZWZpbmUgRkNfTkVYVCAgICAxNyAg LyogTmVYVCB3b3Jrc3RhdGlvbiBjaGFyYWN0ZXIgc2V0ICovCi0jZGVmaW5lIEZDX0NQNDM3ICAg MTggIC8qIElCTSBQQyBDb2RlIFBhZ2UgNDM3ICovCi0jZGVmaW5lIEZDX0NQODUwICAgMTkgIC8q IElCTSBQQyBDb2RlIFBhZ2UgODUwICovCi0jZGVmaW5lIEZDX0NQODUyICAgMjAgIC8qIElCTSBQ QyBDb2RlIFBhZ2UgODUyICovCi0jZGVmaW5lIEZDX0FQUFFEICAgMjEgIC8qIEFwcGxlIFF1aWNr ZHJhdyAqLwotI2RlZmluZSBGQ19ER01DUyAgIDIyICAvKiBEYXRhIEdlbmVyYWwgSW50ZXJuYXRp b25hbCBDaGFyYWN0ZXIgU2V0ICovCi0jZGVmaW5lIEZDX0hQUjggICAgMjMgIC8qIEhQIFJvbWFu OCAqLwotCi0vKiBDeXJpbGxpYyBzZXRzICovCi0KLSNkZWZpbmUgRkNfQ1lSSUxMICAyNCAgLyog SVNPIDg4NTktNSBMYXRpbi9DeXJpbGxpYyAqLwotI2RlZmluZSBGQ19DUDg2NiAgIDI1ICAvKiBQ QyBDb2RlIFBhZ2UgODY2IEN5cmlsbGljICovCi0jZGVmaW5lIEZDX0tPSTcgICAgMjYgIC8qIEtP SS03ID0gU2hvcnQgS09JICovCi0jZGVmaW5lIEZDX0tPSTggICAgMjcgIC8qIEtPSS04ICovCi0K LS8qIEphcGFuZXNlIHNldHMgKi8KLQotI2RlZmluZSBGQ19KSVM3ICAgIDI4ICAvKiBKSVMtNyAq LwotI2RlZmluZSBGQ19TSEpJUyAgIDI5ICAvKiBTaGlmdGVkIEpJUyA9IENQOTMyICovCi0jZGVm aW5lIEZDX0pFVUMgICAgMzAgIC8qIEphcGFuZXNlIEVVQyAoSkFFKSAqLwotI2RlZmluZSBGQ19K REVDICAgIDMxICAvKiBKYXBhbmVzZSBERUMgS2FuamkgKi8KLQotLyogSGVicmV3IHNldHMgKi8K LQotI2RlZmluZSBGQ19IRTcgICAgIDMyICAvKiA3LUJpdCBERUMgSGVicmV3ICovCi0jZGVmaW5l IEZDX0hFQlJFVyAgMzMgIC8qIDgtQml0IElTTyA4ODU5LTggTGF0aW4vSGVicmV3ICovCi0jZGVm aW5lIEZDX0NQODYyICAgMzQgIC8qIEhlYnJldyBQQyBDb2RlIFBhZ2UgKi8KLQotLyogR3JlZWsg c2V0cyAqLwotCi0jZGVmaW5lIEZDX0VMT1QgICAgMzUgIC8qIDctQml0IEVMT1QgOTI3IEdyZWVr ICovCi0jZGVmaW5lIEZDX0dSRUVLICAgMzYgIC8qIDgtQml0IElTTyA4ODU5LTcgTGF0aW4vR3Jl ZWsgKi8KLSNkZWZpbmUgRkNfQ1A4NjkgICAzNyAgLyogR3JlZWsgUEMgQ29kZSBQYWdlICovCi0K LS8qIE5ldyBSb21hbiBzZXRzIHdpdGggRXVybyBzeW1ib2wgKi8KLQotI2RlZmluZSBGQ185TEFU SU4gIDM4ICAvKiBJU08gODg1OS0xNSBMYXRpbiBBbHBoYWJldCA5ICovCi0jZGVmaW5lIEZDX0NQ OTIzICAgMzggIC8qIFNhbWUgYXMgTGF0aW4tOSAqLwotI2RlZmluZSBGQ19DUDg1OCAgIDM5ICAv KiBXZXN0ZXJuIEV1cm9wZSB3aXRoIEV1cm8gKi8KLQotLyogT3RoZXIgbmV3IGFkZGl0aW9ucyAq LwotCi0jZGVmaW5lIEZDX0NQODU1ICAgNDAgIC8qIEN5cmlsbGljIFBDIENvZGUgUGFnZSAqLwot I2RlZmluZSBGQ19DUDEyNTEgIDQxICAvKiBDeXJpbGxpYyBXaW5kb3dzICovCi0jZGVmaW5lIEZD X0JVTEdBUiAgNDIgIC8qIEJ1bGdhcmlhbiBQQyBjb2RlIHBhZ2UgKi8KLSNkZWZpbmUgRkNfQ1Ax MjUwICA0MyAgLyogTGF0aW4gMiBXaW5kb3dzIChkaWZmZXJlbnQgZnJvbSBMYXRpbi0yKSovCi0j ZGVmaW5lIEZDX01BWk9WSUEgNDQgIC8qIFBvbGlzaCBNYXpvdmlhIFBDIGNvZGUgcGFnZSAqLwot Ci0vKiBVbmljb2RlICovCi0KLSNkZWZpbmUgRkNfVUNTMiAgICA0NSAgLyogSVNPLTEwNjQ2IC8g VW5pY29kZSBVQ1MtMiAqLwotI2RlZmluZSBGQ19VVEY4ICAgIDQ2ICAvKiBJU08tMTA2NDYgLyBV bmljb2RlIFVURi04ICovCi0KLS8qIFJlY2VudCBhZGRpdGlvbnMgKi8KLQotI2RlZmluZSBGQ19L T0k4UiAgIDQ3ICAvKiBLT0k4LVIgKFJGQzE0ODkpIC0gUnVzc2lhbiArIGJveGRyYXdpbmcgKi8K LSNkZWZpbmUgRkNfS09JOFUgICA0OCAgLyogS09JOC1VIChSRkMyMzE5KSAtIFVrcmFpbmlhbiAr IGJveGRyYXdpbmcgKi8KLSNkZWZpbmUgRkNfQ1AxMjUyICA0OSAgLyogTGF0aW4gMSBXaW5kb3dz ICovCi0KLSNkZWZpbmUgTUFYRkNTRVRTICA0OSAgLyogSGlnaGVzdCBmaWxlIGNoYXJhY3RlciBz ZXQgbnVtYmVyICovCi0KLSNpZmRlZiBPUzIKLSNkZWZpbmUgRkNfREVDU1BFQyAyNTMgLyogTm90 IHJlYWwgY2hhcmFjdGVyLXNldHMgKi8KLSNkZWZpbmUgRkNfREVDVEVDSCAyNTIKLSNlbmRpZiAv KiBPUzIgKi8KLQotI2lmZGVmIFVOSUNPREUKLV9QUk9UT1RZUCggVk9JRCBpbml0eGxhdGUsIChp bnQsIGludCkgKTsKLSNlbmRpZiAvKiBVTklDT0RFICovCi0KLSNlbmRpZiAvKiBDS1VYTEFfSCAq LwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t3 YXJ0LmMgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2Nrd2FydC5jCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjNiYjc1Li4wMDAwMDAwCi0tLSBhL2NrZXJt aXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t3YXJ0LmMKKysrIC9kZXYvbnVsbApA QCAtMSw3NDYgKzAsMCBAQAotI2luY2x1ZGUgImNrY3N5bS5oIgotY2hhciAqd2FydHYgPSAiV2Fy dCBWZXJzaW9uIDIuMTQsIDEwIE5vdiAxOTk5IjsKLQotI2RlZmluZSBDS1dBUlRfQwotCi0jaWZk ZWYgTURFQlVHCi0vKiBVc2UgdGhlIHJlYWwgb25lcyBpbiB0aGlzIG1vZHVsZSBvbmx5ICovCi0j aWZkZWYgbWFsbG9jCi0jdW5kZWYgbWFsbG9jCi0jZW5kaWYgLyogbWFsbG9jICovCi0jaWZkZWYg Y2FsbG9jCi0jdW5kZWYgY2FsbG9jCi0jZW5kaWYgLyogY2FsbG9jICovCi0jaWZkZWYgcmVhbGxv YwotI3VuZGVmIHJlYWxsb2MKLSNlbmRpZiAvKiByZWFsbG9jICovCi0jaWZkZWYgZnJlZQotI3Vu ZGVmIGZyZWUKLSNlbmRpZiAvKiBmcmVlICovCi0jZW5kaWYgLyogTURFQlVHICovCi0KLSNpZmRl ZiBNQUMKLSNkZWZpbmUgVk9JRCB2b2lkCi0jZW5kaWYgLyogTUFDICovCi0KLS8qIFcgQSBSIFQg Ki8KLQotLyoKLSAgQSBzbWFsbCBzdWJzZXQgb2YgImxleCIuCi0KLSAgQXV0aG9yczogSmVmZiBE YW1lbnMsIEZyYW5rIGRhIENydXoKLSAgQ29sdW1iaWEgVW5pdmVyc2l0eSBDZW50ZXIgZm9yIENv bXB1dGluZyBBY3Rpdml0ZXMuCi0gIEZpcnN0IHJlbGVhc2VkIE5vdmVtYmVyIDE5ODQuCi0gIENv cHlyaWdodCAoQykgMTk4NCwgMjAwOSwKLSAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJz aXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgotICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBT ZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCi0gICAgY29weXJpZ2h0IHRl eHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMu Ci0qLwotCi0vKgotICogaW5wdXQgZm9ybWF0IGlzOgotICogIGxpbmVzIHRvIGJlIGNvcGllZCB8 ICVzdGF0ZSA8c3RhdGUgbmFtZXMuLi4+Ci0gKiAgJSUKLSAqIDxzdGF0ZT4gfCA8c3RhdGUsc3Rh dGUsLi4uPiBDSEFSICB7IGFjdGlvbnMgfQotICogLi4uCi0gKiAgJSUKLSAqICBtb3JlIGxpbmVz IHRvIGJlIGNvcGllZAotICovCi0KLSNpbmNsdWRlICJja2NkZWIuaCIJCQkvKiBJbmNsdWRlcyAq LwotCi0jaWZkZWYgU1RSQVRVUwotLyogQWN0dWFsbHkgY2FsbCBwcmludGYsIG5vdCBvdXIgcHJp bnRmLWNhdGNoZXIgZm9yIEtlcm1pdCAqLwotI2lmZGVmIHByaW50ZgotI3VuZGVmIHByaW50Zgot I2VuZGlmIC8qIHByaW50ZiAqLwotI2lmZGVmIGZwcmludGYKLSN1bmRlZiBmcHJpbnRmCi0jZW5k aWYgLyogZnByaW50ZiAqLwotI2VuZGlmIC8qIFNUUkFUVVMgKi8KLQotI2lmZGVmIE1BQwotLyog U2FtZSBkZWFsIGZvciBNYWNpbnRvc2ggKi8KLSNpZmRlZiBwcmludGYKLSN1bmRlZiBwcmludGYK LSNlbmRpZiAvKiBwcmludGYgKi8KLSNpZmRlZiBmcHJpbnRmCi0jdW5kZWYgZnByaW50ZgotI2Vu ZGlmIC8qIGZwcmludGYgKi8KLSNlbmRpZiAvKiBNQUMgKi8KLQotI2lmZGVmIFVOSVgKLS8qIEFu ZCBVTklYICovCi0jaWZkZWYgcHJpbnRmCi0jdW5kZWYgcHJpbnRmCi0jZW5kaWYgLyogcHJpbnRm ICovCi0jaWZkZWYgZnByaW50ZgotI3VuZGVmIGZwcmludGYKLSNlbmRpZiAvKiBmcHJpbnRmICov Ci0jZW5kaWYgLyogVU5JWCAqLwotLyoKLSAgVGhlIGZvbGxvd2luZyAiY2hhciIgc2hvdWxkIGJl IGNoYW5nZWQgdG8gInNob3J0IiwgImludCIsIG9yICJsb25nIiBpZiB5b3VyCi0gIHdhcnQgcHJv Z3JhbSB3aWxsIGdlbmVyYXRlIG1vcmUgdGhhbiAxMjcgc3RhdGVzLiAgU2luY2Ugd2FydCBpcyB1 c2VkIG1haW5seQotICB3aXRoIEMtS2VybWl0LCB3aGljaCBoYXMgYWJvdXQgODAgc3RhdGVzLCAi Y2hhciIgaXMgYWRlcXVhdGUuICBUaGlzIGtlZXBzCi0gIHRoZSBwcm9ncmFtIGFib3V0IDNLLTRL IHNtYWxsZXIsIHdoaWNoIGNhbiBiZSBjcml0aWNhbCBvbiAxNi1iaXQKLSAgYXJjaGl0ZWN0dXJl cy4KLSovCi0jaWZkZWYgSVJJWDYwCi0vKgotICBBbHNvIHVzZSBzaG9ydCBvciBpbnQgaWYgeW91 ciBjb21waWxlciBjb21wbGFpbnMgaW5vcmRpbmF0ZWx5IGFib3V0Ci0gICJpbnRlZ2VyIGNvbnZl cnNpb24gcmVzdWx0ZWQgaW4gYSBjaGFuZ2Ugb2Ygc2lnbiIuLi4KLSovCi0jZGVmaW5lIFRCTF9U WVBFICJzaG9ydCIJCS8qIEMgZGF0YSB0eXBlIG9mIHN0YXRlIHRhYmxlICovCi0jZWxzZQotI2Rl ZmluZSBUQkxfVFlQRSAiY2hhciIJCQkvKiBDIGRhdGEgdHlwZSBvZiBzdGF0ZSB0YWJsZSAqLwot I2VuZGlmIC8qIElSSVg2MCAqLwotCi0jZGVmaW5lIENfTCAwMTQJCQkJLyogRm9ybWZlZWQgKi8K LQotI2RlZmluZSBTRVAgMQkJCQkvKiBUb2tlbiB0eXBlcyAqLwotI2RlZmluZSBMQlJBQ0sgMgot I2RlZmluZSBSQlJBQ0sgMwotI2RlZmluZSBXT1JEIDQKLSNkZWZpbmUgQ09NTUEgNQotCi0vKiBT dG9yYWdlIHNpemVzICovCi0KLSNkZWZpbmUgTUFYU1RBVEVTIDUwCQkJLyogbWF4IG51bWJlciBv ZiBzdGF0ZXMgKi8KLSNkZWZpbmUgTUFYV09SRCA1MAkJCS8qIG1heCAjIG9mIGNoYXJzL3dvcmQg Ki8KLSNkZWZpbmUgU0JZVEVTICgoTUFYU1RBVEVTKzYpLzgpCS8qICMgb2YgYnl0ZXMgZm9yIHN0 YXRlIGJpdG1hc2sgKi8KLQotLyogTmFtZSBvZiB3YXJ0IGZ1bmN0aW9uIGluIGdlbmVyYXRlZCBw cm9ncmFtICovCi0KLSNpZm5kZWYgRk5BTUUKLSNkZWZpbmUgRk5BTUUgIndhcnQiCi0jZW5kaWYg LyogRk5BTUUgKi8KLQotLyogU3RydWN0dXJlIGZvciBzdGF0ZSBpbmZvcm1hdGlvbiAqLwotCi1z dHJ1Y3QgdHJhbnN4IHsKLSAgICBDSEFSIHN0YXRlc1tTQllURVNdOwkJLyogaW5jbHVkZWQgc3Rh dGVzICovCi0gICAgaW50IGFueXN0OwkJCQkvKiB0cnVlIGlmIHRoaXMgZ29vZCBmcm9tIGFueSBz dGF0ZSAqLwotICAgIENIQVIgaW5jaHI7CQkJCS8qIGlucHV0IGNoYXJhY3RlciAqLwotICAgIGlu dCBhY3RubzsJCQkJLyogYXNzb2NpYXRlZCBhY3Rpb24gKi8KLSAgICBzdHJ1Y3QgdHJhbnN4ICpu eHQ7Ci19OwkJCQkJLyogbmV4dCB0cmFuc2l0aW9uICovCi10eXBlZGVmIHN0cnVjdCB0cmFuc3gg KnRyYW5zOwotCi0vKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCi0KLV9QUk9UT1RZUCggVk9JRCBz ZXR3c3RhdGUsIChpbnQsIHRyYW5zKSApOwotX1BST1RPVFlQKCBpbnQgdGVzdHN0YXRlLCAoaW50 LCB0cmFucykgKTsKLV9QUk9UT1RZUCggdHJhbnMgcmRpbnB1dCwgKEZJTEUgKiwgRklMRSAqKSAp OwotX1BST1RPVFlQKCBWT0lEIGluaXRpYWwsIChGSUxFICosIEZJTEUgKikgKTsKLV9QUk9UT1RZ UCggaW50IGlzaW4sIChjaGFyICosIGludCkgKTsKLV9QUk9UT1RZUCggaW50IGlzd29yZCwgKGlu dCkgKTsKLV9QUk9UT1RZUCggVk9JRCByZHdvcmQsIChGSUxFICosIGNoYXIgKikgKTsKLV9QUk9U T1RZUCggVk9JRCByZHN0YXRlcywgKEZJTEUgKiwgRklMRSAqKSApOwotX1BST1RPVFlQKCB0cmFu cyBuZXd0cmFucywgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIHRyYW5zIHJkcnVsZXMsIChGSUxFICos IEZJTEUgKikgKTsKLV9QUk9UT1RZUCggVk9JRCBzdGF0ZWxpc3QsIChGSUxFICosIHRyYW5zKSAp OwotX1BST1RPVFlQKCBWT0lEIGNvcHlhY3QsIChGSUxFICosIEZJTEUgKiwgaW50KSApOwotX1BS T1RPVFlQKCBpbnQgZmFjdGlvbiwgKHRyYW5zLCBpbnQsIGludCkgKTsKLV9QUk9UT1RZUCggVk9J RCBlbXB0eXRibCwgKHZvaWQpICk7Ci1fUFJPVE9UWVAoIFZPSUQgYWRkYWN0aW9uLCAoaW50LCBp bnQsIGludCkgKTsKLV9QUk9UT1RZUCggVk9JRCB3cml0ZXRibCwgKEZJTEUgKikgKTsKLV9QUk9U T1RZUCggVk9JRCB3YXJyYXksIChGSUxFICosIGNoYXIgKiwgaW50IFtdLCBpbnQsIGNoYXIgKikg KTsKLV9QUk9UT1RZUCggVk9JRCBwcm9sb2csIChGSUxFICopICk7Ci1fUFJPVE9UWVAoIFZPSUQg ZXBpbG9ndWUsIChGSUxFICopICk7Ci1fUFJPVE9UWVAoIFZPSUQgY29weXJlc3QsIChGSUxFICos IEZJTEUgKikgKTsKLV9QUk9UT1RZUCggaW50IGdldHRva2VuLCAoRklMRSAqKSApOwotX1BST1RP VFlQKCBWT0lEIHJkY21udCwgKEZJTEUgKikgKTsKLV9QUk9UT1RZUCggVk9JRCBjbHJoYXNoLCAo dm9pZCkgKTsKLV9QUk9UT1RZUCggaW50IGhhc2gsIChjaGFyICopICk7Ci1fUFJPVE9UWVAoIFZP SUQgZW50ZXIsIChjaGFyICosIGludCkgKTsKLV9QUk9UT1RZUCggaW50IGxrdXAsIChjaGFyICop ICk7Ci1fUFJPVE9UWVAoIHN0YXRpYyBjaGFyKiBjb3B5LCAoY2hhciAqcykgKTsKLQotLyogVmFy aWFibGVzIGFuZCB0YWJsZXMgKi8KLQotLyogbHQgMTk5Mi0xMC0wOCBCZWdpbgotICogcHJvdmlk ZSBkZWZpbml0aW9uIGZvciBkZWJsb2cgdmFyaWFibGUKLSAqIGNrY2RlYi5oIGRlY2xhcmVzIGFz IGV4dGVybi4gREVDQyBBWFAgaXMgc3RyaWN0IGFib3V0IHJlZi9kZWYgbW9kZWwKLSAqIFZhcmlh YmxlIGlzIHVudXNlZCBoZXJlaW4sIHRvIHRoZSBiZXN0IG9mIG15IGtub3dsZWRnZS4KLSAqLwot I2lmZGVmIFZNUwotaW50IGRlYmxvZzsKLSNlbmRpZiAvKiBWTVMgKi8KLS8qIGx0IDE5OTItMTAt MDggRW5kCi0gKi8KLQotc3RhdGljIGludCBsaW5lcywgbnN0YXRlcywgbmFjdHM7Ci0KLXN0YXRp YyBjaGFyIHRva3ZhbFtNQVhXT1JEXTsKLQotc3RhdGljIGludCB0YmxbTUFYU1RBVEVTKjk2XTsK LQotY2hhciAqdGJsX3R5cGUgPSBUQkxfVFlQRTsKLQotY2hhciAqdHh0MSA9ICJcbiNkZWZpbmUg QkVHSU4gc3RhdGUgPVxuXG5pbnQgc3RhdGUgPSAwO1xuXG5pbnRcbiI7Ci0KLWNoYXIgKmZuYW1l ID0gRk5BTUU7CQkJLyogR2VuZXJhdGVkIGZ1bmN0aW9uIG5hbWUgZ29lcyBoZXJlICovCi0KLS8q IHJlc3Qgb2YgcHJvZ3JhbS4uLiAqLwotCi1jaGFyICp0eHQyID0gIigpXG5cCi17XG5cCi0gICAg aW50IGMsYWN0bm87XG5cCi0gICAgZXh0ZXJuICI7Ci0KLS8qIERhdGEgdHlwZSBvZiBzdGF0ZSB0 YWJsZSBpcyBpbnNlcnRlZCBoZXJlIChzaG9ydCBvciBpbnQpICovCi0KLWNoYXIgKnR4dDJhID0K LSIgdGJsW107XG5cCi0gICAgd2hpbGUgKDEpIHtcblwKLQljID0gaW5wdXQoKSAtIDMyO1xuXAot CWRlYnVnKEYwMDAsXCJQUk9UTyBpbnB1dFwiLGNraXRvYShzdGF0ZSksYyszMik7XG5cCi0JaWYg KGMgPCAwIHx8IGMgPiA5NSkgYyA9IDA7XG4iOwotCi1jaGFyICp0eHQyYiA9ICIJaWYgKChhY3Ru byA9IHRibFtjICsgc3RhdGUqOTZdKSAhPSAtMSlcblwKLQkgICAgc3dpdGNoKGFjdG5vKSB7XG4i OwotCi0vKiB0aGlzIHByb2dyYW0ncyBvdXRwdXQgZ29lcyBoZXJlLCBmb2xsb3dlZCBieSBmaW5h bCB0ZXh0Li4uICovCi0KLWNoYXIgKnR4dDMgPSAiXG4JICAgIH1cbiAgICB9XG59XG5cbiI7Ci0K LQotLyoKLSAqIHR1cm4gb24gdGhlIGJpdCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIHN0YXRl Ci0gKgotICovCi1WT0lECi1zZXR3c3RhdGUoc3RhdGUsdCkgaW50IHN0YXRlOyB0cmFucyB0OyB7 Ci0gICAgaW50IGlkeCxtc2s7Ci0gICAgaWR4ID0gc3RhdGUvODsJCQkvKiBieXRlIGFzc29jaWF0 ZWQgd2l0aCBzdGF0ZSAqLwotICAgIG1zayA9IDB4ODAgPj4gKHN0YXRlICUgOCk7CQkvKiBiaXQg bWFzayBmb3Igc3RhdGUgKi8KLSAgICB0LT5zdGF0ZXNbaWR4XSB8PSBtc2s7Ci19Ci0KLS8qCi0g KiBzZWUgaWYgdGhlIHN0YXRlIGlzIGludm9sdmVkIGluIHRoZSB0cmFuc2l0aW9uCi0gKgotICov Ci1pbnQKLXRlc3RzdGF0ZShzdGF0ZSx0KSBpbnQgc3RhdGU7IHRyYW5zIHQ7IHsKLSAgICBpbnQg aWR4LG1zazsKLSAgICBpZHggPSBzdGF0ZS84OwotICAgIG1zayA9IDB4ODAgPj4gKHN0YXRlICUg OCk7Ci0gICAgcmV0dXJuKHQtPnN0YXRlc1tpZHhdICYgbXNrKTsKLX0KLQotCi0vKgotICogcmVh ZCBpbnB1dCBmcm9tIGhlcmUuLi4KLSAqCi0gKi8KLQotdHJhbnMKLXJkaW5wdXQoaW5mcCxvdXRm cCkgRklMRSAqaW5mcCwqb3V0ZnA7IHsKLSAgICB0cmFucyB4OwotICAgIGxpbmVzID0gMTsJCQkJ LyogbGluZSBjb3VudGVyICovCi0gICAgbnN0YXRlcyA9IDA7CQkJLyogbm8gc3RhdGVzICovCi0g ICAgbmFjdHMgPSAwOwkJCQkvKiBubyBhY3Rpb25zIHlldCAqLwotICAgIGZwcmludGYob3V0ZnAs IlxuJWMqIFdBUk5JTkcgLS0gVGhpcyBDIHNvdXJjZSBwcm9ncmFtIGdlbmVyYXRlZCBieSAiLCcv Jyk7Ci0gICAgZnByaW50ZihvdXRmcCwiV2FydCBwcmVwcm9jZXNzb3IuICovXG4iKTsKLSAgICBm cHJpbnRmKG91dGZwLCIlYyogRG8gbm90IGVkaXQgdGhpcyBmaWxlOyBlZGl0IHRoZSBXYXJ0LWZv cm1hdCAiLCcvJyk7Ci0gICAgZnByaW50ZihvdXRmcCwic291cmNlIGZpbGUgaW5zdGVhZCwgKi9c biIpOwotICAgIGZwcmludGYob3V0ZnAsIiVjKiBhbmQgdGhlbiBydW4gaXQgdGhyb3VnaCBXYXJ0 IHRvIHByb2R1Y2UgYSBuZXcgIiwnLycpOwotICAgIGZwcmludGYob3V0ZnAsIkMgc291cmNlIGZp bGUuICAgICAqL1xuXG4iKTsKLSAgICBmcHJpbnRmKG91dGZwLCIlYyogV2FydCBWZXJzaW9uIElu Zm86ICovXG4iLCcvJyk7Ci0gICAgZnByaW50ZihvdXRmcCwiY2hhciAqd2FydHYgPSBcIiVzXCI7 XG5cbiIsd2FydHYpOwotCi0gICAgaW5pdGlhbChpbmZwLG91dGZwKTsJCS8qIHJlYWQgc3RhdGUg bmFtZXMsIGluaXRpYWwgZGVmcyAqLwotICAgIHByb2xvZyhvdXRmcCk7CQkJLyogd3JpdGUgb3V0 IG91ciBpbml0aWFsIGNvZGUgKi8KLSAgICB4ID0gcmRydWxlcyhpbmZwLG91dGZwKTsJCS8qIHJl YWQgcnVsZXMgKi8KLSAgICBlcGlsb2d1ZShvdXRmcCk7CQkJLyogd3JpdGUgb3V0IGVwaWxvZ3Vl IGNvZGUgKi8KLSAgICByZXR1cm4oeCk7Ci19Ci0KLQotLyoKLSAqIGluaXRpYWwgLSByZWFkIGlu aXRpYWwgZGVmaW5pdGlvbnMgYW5kIHN0YXRlIG5hbWVzLiAgUmV0dXJucwotICogb24gRU9GIG9y ICUlLgotICoKLSAqLwotVk9JRAotaW5pdGlhbChpbmZwLG91dGZwKSBGSUxFICppbmZwLCAqb3V0 ZnA7IHsKLSAgICBpbnQgYzsKLSAgICBjaGFyIHdvcmRidWZbTUFYV09SRF07Ci0gICAgd2hpbGUg KChjID0gZ2V0YyhpbmZwKSkgIT0gRU9GKSB7Ci0JaWYgKGMgPT0gJyUnKSB7Ci0JICAgIHJkd29y ZChpbmZwLHdvcmRidWYpOwotCSAgICBpZiAoc3RyY21wKHdvcmRidWYsInN0YXRlcyIpID09IDAp Ci0JICAgICAgcmRzdGF0ZXMoaW5mcCxvdXRmcCk7Ci0JICAgIGVsc2UgaWYgKHN0cmNtcCh3b3Jk YnVmLCIlIikgPT0gMCkgcmV0dXJuOwotCSAgICBlbHNlIGZwcmludGYob3V0ZnAsIiUlJXMiLHdv cmRidWYpOwotCX0KLQllbHNlIHB1dGMoYyxvdXRmcCk7Ci0JaWYgKGMgPT0gJ1xuJykgbGluZXMr KzsKLSAgICB9Ci19Ci0KLS8qCi0gKiBib29sZWFuIGZ1bmN0aW9uIHRvIHRlbGwgaWYgdGhlIGdp dmVuIGNoYXJhY3RlciBjYW4gYmUgcGFydCBvZgotICogYSB3b3JkLgotICoKLSAqLwotaW50Ci1p c2luKHMsYykgY2hhciAqczsgaW50IGM7IHsKLSAgICBmb3IgKDsgKnMgIT0gJ1wwJzsgcysrKQot ICAgICAgaWYgKCpzID09IChjaGFyKSBjKSByZXR1cm4oMSk7Ci0gICAgcmV0dXJuKDApOwotfQot aW50Ci1pc3dvcmQoYykgaW50IGM7IHsKLSAgICBzdGF0aWMgY2hhciBzcGVjaWFsW10gPSAiLiVf LSRAIjsJLyogdGhlc2UgYXJlIGFsbG93YWJsZSAqLwotICAgIHJldHVybihpc2FsbnVtKGMpIHx8 IGlzaW4oc3BlY2lhbCxjKSk7Ci19Ci0KLS8qCi0gKiByZWFkIHRoZSBuZXh0IHdvcmQgaW50byB0 aGUgZ2l2ZW4gYnVmZmVyLgotICoKLSAqLwotVk9JRAotcmR3b3JkKGZwLGJ1ZikgRklMRSAqZnA7 IGNoYXIgKmJ1ZjsgewotICAgIGludCBsZW4gPSAwLGM7Ci0gICAgd2hpbGUgKGlzd29yZChjID0g Z2V0YyhmcCkpICYmICsrbGVuIDwgTUFYV09SRCkgKmJ1ZisrID0gKGNoYXIpIGM7Ci0gICAgKmJ1 ZisrID0gJ1wwJzsJCQkvKiB0aWUgb2ZmIHdvcmQgKi8KLSAgICB1bmdldGMoYyxmcCk7CQkJLyog cHV0IGJyZWFrIGNoYXIgYmFjayAqLwotfQotCi0vKgotICogcmVhZCBzdGF0ZSBuYW1lcywgdXAg dG8gYSBuZXdsaW5lLgotICoKLSAqLwotVk9JRAotcmRzdGF0ZXMoZnAsb2ZwKSBGSUxFICpmcCwq b2ZwOyB7Ci0gICAgaW50IGM7Ci0gICAgY2hhciB3b3JkYnVmW01BWFdPUkRdOwotICAgIHdoaWxl ICgoYyA9IGdldGMoZnApKSAhPSBFT0YgJiYgYyAhPSAnXG4nKSB7Ci0JaWYgKGlzc3BhY2UoYykg fHwgYyA9PSBDX0wpIGNvbnRpbnVlOwkvKiBza2lwIHdoaXRlc3BhY2UgKi8KLQl1bmdldGMoYyxm cCk7CQkJLyogcHV0IGNoYXIgYmFjayAqLwotCXJkd29yZChmcCx3b3JkYnVmKTsJCS8qIHJlYWQg dGhlIHdob2xlIHdvcmQgKi8KLQllbnRlcih3b3JkYnVmLCsrbnN0YXRlcyk7CS8qIHB1dCBpbnRv IHN5bWJvbCB0YmwgKi8KLQlmcHJpbnRmKG9mcCwiI2RlZmluZSAlcyAlZFxuIix3b3JkYnVmLG5z dGF0ZXMpOwotICAgIH0KLSAgICBsaW5lcysrOwotfQotCi0vKgotICogYWxsb2NhdGUgYSBuZXcs IGVtcHR5IHRyYW5zaXRpb24gbm9kZQotICoKLSAqLwotdHJhbnMKLW5ld3RyYW5zKCkgewotICAg IHRyYW5zIG5ldzsKLSAgICBpbnQgaTsKLSAgICBuZXcgPSAodHJhbnMpIG1hbGxvYyhzaXplb2Yg KHN0cnVjdCB0cmFuc3gpKTsKLSAgICBmb3IgKGk9MDsgaTxTQllURVM7IGkrKykgbmV3LT5zdGF0 ZXNbaV0gPSAwOwotICAgIG5ldy0+YW55c3QgPSAwOwotICAgIG5ldy0+bnh0ID0gTlVMTDsKLSAg ICByZXR1cm4obmV3KTsKLX0KLQotCi0vKgotICogcmVhZCBhbGwgdGhlIHJ1bGVzLgotICoKLSAq LwotCi10cmFucwotcmRydWxlcyhmcCxvdXQpIEZJTEUgKmZwLCpvdXQ7IHsKLSAgICB0cmFucyBo ZWFkLGN1cixwcmV2OwotICAgIGludCBjdXJ0b2s7Ci0gICAgaGVhZCA9IGN1ciA9IHByZXYgPSBO VUxMOwotICAgIHdoaWxlICgoY3VydG9rID0gZ2V0dG9rZW4oZnApKSAhPSBTRVApCi0KLSAgICAg IHN3aXRjaChjdXJ0b2spIHsKLQljYXNlIExCUkFDSzoKLQkgIGlmIChjdXIgPT0gTlVMTCkKLQkg ICAgY3VyID0gbmV3dHJhbnMoKTsKLQkgIGVsc2UKLQkgICAgZmF0YWwoImR1cGxpY2F0ZSBzdGF0 ZSBsaXN0Iik7Ci0JICBzdGF0ZWxpc3QoZnAsY3VyKTsJCS8qIHNldCBzdGF0ZXMgKi8KLQkgIGNv bnRpbnVlOwkJCS8qIHByZXBhcmUgdG8gcmVhZCBjaGFyICovCi0KLQljYXNlIFdPUkQ6Ci0JICBp ZiAoKGludClzdHJsZW4odG9rdmFsKSAhPSAxKQotCSAgICBmYXRhbCgibXVsdGlwbGUgY2hhcnMg aW4gc3RhdGUiKTsKLQkgIGlmIChjdXIgPT0gTlVMTCkgewotCSAgICAgIGN1ciA9IG5ld3RyYW5z KCk7Ci0JICAgICAgY3VyLT5hbnlzdCA9IDE7Ci0JICB9Ci0JICBjdXItPmFjdG5vID0gKytuYWN0 czsKLQkgIGN1ci0+aW5jaHIgPSAoY2hhcikgKHRva3ZhbFswXSAtIDMyKTsKLQkgIGlmIChoZWFk ID09IE5VTEwpCi0JICAgIGhlYWQgPSBjdXI7Ci0JICBlbHNlCi0JICAgIHByZXYtPm54dCA9IGN1 cjsKLQkgIHByZXYgPSBjdXI7Ci0JICBjdXIgPSBOVUxMOwotCSAgY29weWFjdChmcCxvdXQsbmFj dHMpOwotCSAgYnJlYWs7Ci0JZGVmYXVsdDogZmF0YWwoImJhZCBpbnB1dCBmb3JtYXQiKTsKLSAg ICAgIH0KLSAgICByZXR1cm4oaGVhZCk7Ci19Ci0KLS8qCi0gKiByZWFkIGEgbGlzdCBvZiAoY29t bWEtc2VwYXJhdGVkKSBzdGF0ZXMsIHNldCB0aGVtIGluIHRoZQotICogZ2l2ZW4gdHJhbnNpdGlv bi4KLSAqCi0gKi8KLVZPSUQKLXN0YXRlbGlzdChmcCx0KSBGSUxFICpmcDsgdHJhbnMgdDsgewot ICAgIGludCBjdXJ0b2ssc3ZhbDsKLSAgICBjdXJ0b2sgPSBDT01NQTsKLSAgICB3aGlsZSAoY3Vy dG9rICE9IFJCUkFDSykgewotCWlmIChjdXJ0b2sgIT0gQ09NTUEpIGZhdGFsKCJtaXNzaW5nIGNv bW1hIik7Ci0JaWYgKChjdXJ0b2sgPSBnZXR0b2tlbihmcCkpICE9IFdPUkQpIGZhdGFsKCJtaXNz aW5nIHN0YXRlIG5hbWUiKTsKLQlpZiAoKHN2YWwgPSBsa3VwKHRva3ZhbCkpID09IC0xKSB7Ci0J ICAgIGZwcmludGYoc3RkZXJyLCJzdGF0ZSAlcyB1bmRlZmluZWRcbiIsdG9rdmFsKTsKLQkgICAg ZmF0YWwoInVuZGVmaW5lZCBzdGF0ZSIpOwotCX0KLQlzZXR3c3RhdGUoc3ZhbCx0KTsKLQljdXJ0 b2sgPSBnZXR0b2tlbihmcCk7Ci0gICAgfQotfQotCi0vKgotICogY29weSBhbiBhY3Rpb24gZnJv bSB0aGUgaW5wdXQgdG8gdGhlIG91dHB1dCBmaWxlCi0gKgotICovCi1WT0lECi1jb3B5YWN0KGlu cCxvdXRwLGFjdG5vKSBGSUxFICppbnAsKm91dHA7IGludCBhY3RubzsgewotICAgIGludCBjLGJj bnQ7Ci0gICAgZnByaW50ZihvdXRwLCJjYXNlICVkOlxuIixhY3Rubyk7Ci0gICAgd2hpbGUgKGMg PSBnZXRjKGlucCksIChpc3NwYWNlKGMpIHx8IGMgPT0gQ19MKSkKLSAgICAgIGlmIChjID09ICdc bicpIGxpbmVzKys7Ci0gICAgaWYgKGMgPT0gJ3snKSB7Ci0JYmNudCA9IDE7Ci0JZnB1dHMoIiAg ICB7IixvdXRwKTsKLQl3aGlsZSAoYmNudCA+IDAgJiYgKGMgPSBnZXRjKGlucCkpICE9IEVPRikg ewotCSAgICBpZiAoYyA9PSAneycpIGJjbnQrKzsKLQkgICAgZWxzZSBpZiAoYyA9PSAnfScpIGJj bnQtLTsKLQkgICAgZWxzZSBpZiAoYyA9PSAnXG4nKSBsaW5lcysrOwotCSAgICBwdXRjKGMsb3V0 cCk7Ci0JfQotCWlmIChiY250ID4gMCkgZmF0YWwoImFjdGlvbiBkb2Vzbid0IGVuZCIpOwotICAg IH0gZWxzZSB7Ci0Jd2hpbGUgKGMgIT0gJ1xuJyAmJiBjICE9IEVPRikgewotCSAgICBwdXRjKGMs b3V0cCk7Ci0JICAgIGMgPSBnZXRjKGlucCk7Ci0JfQotCWxpbmVzKys7Ci0gICAgfQotICAgIGZw cmludGYob3V0cCwiXG4gICAgYnJlYWs7XG4iKTsKLX0KLQotLyoKLSAqIGZpbmQgdGhlIGFjdGlv biBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBjaGFyYWN0ZXIgYW5kIHN0YXRlLgotICogcmV0dXJu cyAtMSBpZiBvbmUgY2FuJ3QgYmUgZm91bmQuCi0gKgotICovCi1pbnQKLWZhY3Rpb24oaGQsc3Rh dGUsY2hyKSB0cmFucyBoZDsgaW50IHN0YXRlLGNocjsgewotICAgIHdoaWxlIChoZCAhPSBOVUxM KSB7Ci0JaWYgKGhkLT5hbnlzdCB8fCB0ZXN0c3RhdGUoc3RhdGUsaGQpKQotCSAgaWYgKGhkLT5p bmNociA9PSAoJy4nIC0gMzIpIHx8IGhkLT5pbmNociA9PSAoY2hhcikgY2hyKQotCSAgICByZXR1 cm4oaGQtPmFjdG5vKTsKLQloZCA9IGhkLT5ueHQ7Ci0gICAgfQotICAgIHJldHVybigtMSk7Ci19 Ci0KLS8qCi0gKiBlbXB0eSB0aGUgdGFibGUuLi4KLSAqCi0gKi8KLVZPSUQKLWVtcHR5dGJsKCkg ewotICAgIGludCBpOwotICAgIGZvciAoaT0wOyBpPG5zdGF0ZXMqOTY7IGkrKykgdGJsW2ldID0g LTE7Ci19Ci0KLS8qCi0gKiBhZGQgdGhlIHNwZWNpZmllZCBhY3Rpb24gdG8gdGhlIG91dHB1dCBm b3IgdGhlIGdpdmVuIHN0YXRlIGFuZCBjaHIuCi0gKgotICovCi1WT0lECi1hZGRhY3Rpb24oYWN0 LHN0YXRlLGNocikgaW50IGFjdCxzdGF0ZSxjaHI7IHsKLSAgICB0Ymxbc3RhdGUqOTYgKyBjaHJd ID0gYWN0OwotfQotCi1WT0lECi13cml0ZXRibChmcCkgRklMRSAqZnA7IHsKLSAgICB3YXJyYXko ZnAsInRibCIsdGJsLDk2Kihuc3RhdGVzKzEpLFRCTF9UWVBFKTsKLX0KLQotCi0vKgotICogd3Jp dGUgYW4gYXJyYXkgdG8gdGhlIG91dHB1dCBmaWxlLCBnaXZlbiBpdHMgbmFtZSBhbmQgc2l6ZS4K LSAqCi0gKi8KLVZPSUQKLXdhcnJheShmcCxuYW0sY29udCxzaXosdHlwKSBGSUxFICpmcDsgY2hh ciAqbmFtOyBpbnQgY29udFtdLHNpejsgY2hhciAqdHlwOyB7Ci0gICAgaW50IGk7Ci0gICAgZnBy aW50ZihmcCwiJXMgJXNbXSA9IHtcbiIsdHlwLG5hbSk7Ci0gICAgZm9yIChpID0gMDsgaSA8IHNp eiAtIDE7ICkgewotCWZwcmludGYoZnAsIiAlMmQsIixjb250W2ldKTsKLQlpZiAoKCsraSAlIDE2 KSA9PSAwKSBwdXRjKCdcbicsZnApOwotICAgIH0KLSAgICBmcHJpbnRmKGZwLCIlMmRcbn07XG4i LGNvbnRbc2l6LTFdKTsKLX0KLQotI2lmbmRlZiBTVFJBVFVTCi0jaWZkZWYgTUFJTlRZUEUKLS8q Ci0gIElmIHlvdSBnZXQgY29tcGxhaW50cyBhYm91dCAibWFpbjogcmV0dXJuIHR5cGUgaXMgbm90 IGJsYWgiLAotICBkZWZpbmUgTUFJTlRZUEUgb24gdGhlIENDIGNvbW1hbmQgbGluZSwgZS5nLiAi Q0ZMQUdTPS1ETUFJTlRZUEU9aW50Ii4KLSovCi1NQUlOVFlQRQotI2Vsc2UKLSNpZmRlZiBDS19T Q09WNQotaW50Ci0jZWxzZQotI2lmZGVmIF9fREVDQwotI2lmZGVmIF9fQUxQSEEKLWludAotI2Vs c2UKLVZPSUQKLSNlbmRpZiAvKiBfX0FMUEhBICovCi0jZWxzZQotI2lmZGVmIFNUUkFUVVMKLWlu dAotI2lmZGVmIF9fR05VQ19fCi1pbnQKLSNlbHNlCi0vKgotICBUaGUgZGVmYXVsdCBjYXNlIHNo b3VsZCBiZSBpbnQsIG5vdCBWT0lELCBidXQgaXQncyBiZWVuIHRoaXMgd2F5IGZvcgotICB5ZWFy cyAobm8gZG91YnQgZm9yIGEgcmVhc29uKSBhbmQgd2hvIGtub3dzIGhvdyBtYW55IGJ1aWxkcyB3 b3VsZCBicmVhawotICBpZiBJIGNoYW5nZWQgaXQuCi0qLwotVk9JRAotI2VuZGlmIC8qIF9fR05V Q19fICovCi0jZW5kaWYgLyogU1RSQVRVUyAqLwotI2VuZGlmIC8qIF9fREVDQyAqLwotI2VuZGlm IC8qIENLX1NDT1Y1ICovCi0jZW5kaWYgLyogTUFJTlRZUEUgKi8KLSNlbmRpZiAvKiBTVFJBVFVT ICovCi1tYWluKGFyZ2MsYXJndikgaW50IGFyZ2M7IGNoYXIgKiphcmd2OyB7Ci0gICAgdHJhbnMg aGVhZDsKLSAgICBpbnQgc3RhdGUsYzsKLSAgICBGSUxFICppbmZpbGUsKm91dGZpbGU7Ci0KLSAg ICBpZiAoYXJnYyA+IDEpIHsKLQlpZiAoKGluZmlsZSA9IGZvcGVuKGFyZ3ZbMV0sInIiKSkgPT0g TlVMTCkgewotCSAgICBmcHJpbnRmKHN0ZGVyciwiQ2FuJ3Qgb3BlbiAlc1xuIixhcmd2WzFdKTsK LQkgICAgZmF0YWwoInVucmVhZGFibGUgaW5wdXQgZmlsZSIpOwotCX0KLSAgICB9IGVsc2UgaW5m aWxlID0gc3RkaW47Ci0KLSAgICBpZiAoYXJnYyA+IDIpIHsKLQlpZiAoKG91dGZpbGUgPSBmb3Bl bihhcmd2WzJdLCJ3IikpID09IE5VTEwpIHsKLQkgICAgZnByaW50ZihzdGRlcnIsIkNhbid0IHdy aXRlIHRvICVzXG4iLGFyZ3ZbMl0pOwotCSAgICBmYXRhbCgiYmFkIG91dHB1dCBmaWxlIik7Ci0J fQotICAgIH0gZWxzZSBvdXRmaWxlID0gc3Rkb3V0OwotCi0gICAgY2xyaGFzaCgpOwkJCQkvKiBl bXB0eSBoYXNoIHRhYmxlICovCi0gICAgaGVhZCA9IHJkaW5wdXQoaW5maWxlLG91dGZpbGUpOwkv KiByZWFkIGlucHV0IGZpbGUgKi8KLSAgICBlbXB0eXRibCgpOwkJCQkvKiBlbXB0eSBvdXIgdGFi bGVzICovCi0gICAgZm9yIChzdGF0ZSA9IDA7IHN0YXRlIDw9IG5zdGF0ZXM7IHN0YXRlKyspCi0g ICAgICBmb3IgKGMgPSAxOyBjIDwgOTY7IGMrKykJCS8qIGZpbmQgYWN0aW9ucywgKi8KLQlhZGRh Y3Rpb24oZmFjdGlvbihoZWFkLHN0YXRlLGMpLHN0YXRlLGMpOyAvKiBhZGQgdG8gdGJsICovCi0g ICAgd3JpdGV0Ymwob3V0ZmlsZSk7Ci0gICAgY29weXJlc3QoaW5maWxlLG91dGZpbGUpOwotICAg IHByaW50ZigiJWQgc3RhdGVzLCAlZCBhY3Rpb25zXG4iLG5zdGF0ZXMsbmFjdHMpOwotICAgIGV4 aXQoR09PRF9FWElUKTsKLX0KLQotCi0vKgotICogZmF0YWwgZXJyb3IgaGFuZGxlcgotICoKLSAq LwotCi1WT0lECi1mYXRhbChtc2cpIGNoYXIgKm1zZzsgewotICAgIGZwcmludGYoc3RkZXJyLCJl cnJvciBpbiBsaW5lICVkOiAlc1xuIixsaW5lcyxtc2cpOwotICAgIGV4aXQoQkFEX0VYSVQpOwot fQotCi1WT0lECi1wcm9sb2cob3V0ZnApIEZJTEUgKm91dGZwOyB7Ci0gICAgaW50IGM7Ci0gICAg d2hpbGUgKChjID0gKnR4dDErKykgICAgICE9ICdcMCcpIHB1dGMoYyxvdXRmcCk7Ci0gICAgd2hp bGUgKChjID0gKmZuYW1lKyspICAgICE9ICdcMCcpIHB1dGMoYyxvdXRmcCk7Ci0gICAgd2hpbGUg KChjID0gKnR4dDIrKykgICAgICE9ICdcMCcpIHB1dGMoYyxvdXRmcCk7Ci0gICAgd2hpbGUgKChj ID0gKnRibF90eXBlKyspICE9ICdcMCcpIHB1dGMoYyxvdXRmcCk7Ci0gICAgd2hpbGUgKChjID0g KnR4dDJhKyspICAgICE9ICdcMCcpIHB1dGMoYyxvdXRmcCk7Ci0gICAgd2hpbGUgKChjID0gKnR4 dDJiKyspICAgICE9ICdcMCcpIHB1dGMoYyxvdXRmcCk7Ci19Ci0KLVZPSUQKLWVwaWxvZ3VlKG91 dGZwKSBGSUxFICpvdXRmcDsgewotICAgIGludCBjOwotICAgIHdoaWxlICgoYyA9ICp0eHQzKysp ICE9ICdcMCcpIHB1dGMoYyxvdXRmcCk7Ci19Ci0KLVZPSUQKLWNvcHlyZXN0KGluLG91dCkgRklM RSAqaW4sKm91dDsgewotICAgIGludCBjOwotICAgIHdoaWxlICgoYyA9IGdldGMoaW4pKSAhPSBF T0YpIHB1dGMoYyxvdXQpOwotfQotCi0vKgotICogZ2V0dG9rZW4gLSByZXR1cm5zIHRva2VuIHR5 cGUgb2YgbmV4dCB0b2tlbiwgc2V0cyB0b2t2YWwKLSAqIHRvIHRoZSBzdHJpbmcgdmFsdWUgb2Yg dGhlIHRva2VuIGlmIGFwcHJvcHJpYXRlLgotICoKLSAqLwotCi1pbnQKLWdldHRva2VuKGZwKSBG SUxFICpmcDsgewotICAgIGludCBjOwotICAgIHdoaWxlICgxKSB7CQkJCS8qIGxvb3AgaWYgcmVh ZGluZyBjb21tZW50cy4uLiAqLwotCWRvIHsKLQkgICAgYyA9IGdldGMoZnApOwotCSAgICBpZiAo YyA9PSAnXG4nKSBsaW5lcysrOwotCX0gd2hpbGUgKChpc3NwYWNlKGMpIHx8IGMgPT0gQ19MKSk7 IC8qIHNraXAgd2hpdGVzcGFjZSAqLwotCXN3aXRjaChjKSB7Ci0JICBjYXNlIEVPRjoKLQkgICAg cmV0dXJuKFNFUCk7Ci0JICBjYXNlICclJzoKLQkgICAgaWYgKChjID0gZ2V0YyhmcCkpID09ICcl JykgcmV0dXJuKFNFUCk7Ci0JICAgIHRva3ZhbFswXSA9ICclJzsKLQkgICAgdG9rdmFsWzFdID0g KGNoYXIpIGM7Ci0JICAgIHJkd29yZChmcCx0b2t2YWwrMik7Ci0JICAgIHJldHVybihXT1JEKTsK LQkgIGNhc2UgJzwnOgotCSAgICByZXR1cm4oTEJSQUNLKTsKLQkgIGNhc2UgJz4nOgotCSAgICBy ZXR1cm4oUkJSQUNLKTsKLQkgIGNhc2UgJywnOgotCSAgICByZXR1cm4oQ09NTUEpOwotCSAgY2Fz ZSAnLyc6Ci0JICAgIGlmICgoYyA9IGdldGMoZnApKSA9PSAnKicpIHsKLQkJcmRjbW50KGZwKTsJ CS8qIHNraXAgb3ZlciB0aGUgY29tbWVudCAqLwotCQljb250aW51ZTsKLQkgICAgfSBlbHNlIHsJ CQkvKiBhbmQga2VlcCBsb29waW5nICovCi0JCXVuZ2V0YyhjLGZwKTsJCS8qIHB1dCB0aGlzIGJh Y2sgaW50byBpbnB1dCAqLwotCQljID0gJy8nOwkJLyogcHV0IGNoYXJhY3RlciBiYWNrLCBmYWxs IHRocnUgKi8KLQkgICAgfQotCi0JICBkZWZhdWx0OgotCSAgICBpZiAoaXN3b3JkKGMpKSB7Ci0J CXVuZ2V0YyhjLGZwKTsKLQkJcmR3b3JkKGZwLHRva3ZhbCk7Ci0JCXJldHVybihXT1JEKTsKLQkg ICAgfSBlbHNlIGZhdGFsKCJJbnZhbGlkIGNoYXJhY3RlciBpbiBpbnB1dCIpOwotCX0KLSAgICB9 Ci19Ci0KLS8qCi0gKiBza2lwIG92ZXIgYSBjb21tZW50Ci0gKgotICovCi0KLVZPSUQKLXJkY21u dChmcCkgRklMRSAqZnA7IHsKLSAgICBpbnQgYyxzdGFyLHByY250OwotICAgIHByY250ID0gc3Rh ciA9IDA7CQkJLyogbm8gc3RhciBzZWVuIHlldCAqLwotICAgIHdoaWxlICghKChjID0gZ2V0Yyhm cCkpID09ICcvJyAmJiBzdGFyKSkgewotCWlmIChjID09IEVPRiB8fCAocHJjbnQgJiYgYyA9PSAn JScpKSBmYXRhbCgiVW50ZXJtaW5hdGVkIGNvbW1lbnQiKTsKLQlwcmNudCA9IChjID09ICclJyk7 Ci0Jc3RhciA9IChjID09ICcqJyk7Ci0JaWYgKGMgPT0gJ1xuJykgbGluZXMrKzsKLSAgICB9Ci19 Ci0KLS8qCi0gKiBzeW1ib2wgdGFibGUgbWFuYWdlbWVudCBmb3Igd2FydAotICoKLSAqIGVudHJ5 IHBvaW50czoKLSAqICAgY2xyaGFzaCAtIGVtcHR5IGhhc2ggdGFibGUuCi0gKiAgIGVudGVyIC0g ZW50ZXIgYSBuYW1lIGludG8gdGhlIHN5bWJvbCB0YWJsZQotICogICBsa3VwIC0gZmluZCBhIG5h bWUncyB2YWx1ZSBpbiB0aGUgc3ltYm9sIHRhYmxlLgotICoKLSAqLwotCi0jZGVmaW5lIEhBU0hT SVpFIDEwMQkJCS8qICMgb2YgZW50cmllcyBpbiBoYXNoIHRhYmxlICovCi0KLXN0cnVjdCBzeW0g ewotICAgIGNoYXIgKm5hbWU7CQkJCS8qIHN5bWJvbCBuYW1lICovCi0gICAgaW50IHZhbDsJCQkJ LyogdmFsdWUgKi8KLSAgICBzdHJ1Y3Qgc3ltICpobnh0OwkJCS8qIG5leHQgb24gY29sbGlzaW9u IGNoYWluICovCi19ICpodGFiW0hBU0hTSVpFXTsJCQkvKiB0aGUgaGFzaCB0YWJsZSAqLwotCi0v KgotICogZW1wdHkgdGhlIGhhc2ggdGFibGUgYmVmb3JlIHVzaW5nIGl0Li4uCi0gKgotICovCi1W T0lECi1jbHJoYXNoKCkgewotICAgIGludCBpOwotICAgIGZvciAoaT0wOyBpPEhBU0hTSVpFOyBp KyspIGh0YWJbaV0gPSBOVUxMOwotfQotCi0vKgotICogY29tcHV0ZSB0aGUgdmFsdWUgb2YgdGhl IGhhc2ggZm9yIGEgc3ltYm9sCi0gKgotICovCi1pbnQKLWhhc2gobmFtZSkgY2hhciAqbmFtZTsg ewotICAgIGludCBzdW07Ci0gICAgZm9yIChzdW0gPSAwOyAqbmFtZSAhPSAnXDAnOyBuYW1lKysp IHN1bSArPSAoc3VtICsgKm5hbWUpOwotICAgIHN1bSAlPSBIQVNIU0laRTsJCQkvKiB0YWtlIHN1 bSBtb2QgaGFzaHNpemUgKi8KLSAgICBpZiAoc3VtIDwgMCkgc3VtICs9IEhBU0hTSVpFOwkvKiBk aXNhbGxvdyBuZWdhdGl2ZSBoYXNoIHZhbHVlICovCi0gICAgcmV0dXJuKHN1bSk7Ci19Ci0KLS8q Ci0gKiBtYWtlIGEgcHJpdmF0ZSBjb3B5IG9mIGEgc3RyaW5nLi4uCi0gKgotICovCi1zdGF0aWMg Y2hhcioKLWNvcHkocykgY2hhciAqczsgewotICAgIGNoYXIgKm5ldzsKLSAgICBuZXcgPSAoY2hh ciAqKSBtYWxsb2MoKGludClzdHJsZW4ocykgKyAxKTsKLSAgICBzdHJjcHkobmV3LHMpOwotICAg IHJldHVybihuZXcpOwotfQotCi0vKgotICogZW50ZXIgc3RhdGUgbmFtZSBpbnRvIHRoZSBoYXNo IHRhYmxlCi0gKgotICovCi1WT0lECi1lbnRlcihuYW1lLHN2YWx1ZSkgY2hhciAqbmFtZTsgaW50 IHN2YWx1ZTsgewotICAgIGludCBoOwotICAgIHN0cnVjdCBzeW0gKmN1cjsKLSAgICBpZiAobGt1 cChuYW1lKSAhPSAtMSkgewotCWZwcmludGYoc3RkZXJyLCJzdGF0ZSBcIiVzXCIgYXBwZWFycyB0 d2ljZS4uLlxuIiwgbmFtZSk7Ci0JZXhpdChCQURfRVhJVCk7Ci0gICAgfQotICAgIGggPSBoYXNo KG5hbWUpOwotICAgIGN1ciA9IChzdHJ1Y3Qgc3ltICopbWFsbG9jKHNpemVvZiAoc3RydWN0IHN5 bSkpOwotICAgIGN1ci0+bmFtZSA9IGNvcHkobmFtZSk7Ci0gICAgY3VyLT52YWwgPSBzdmFsdWU7 Ci0gICAgY3VyLT5obnh0ID0gaHRhYltoXTsKLSAgICBodGFiW2hdID0gY3VyOwotfQotCi0vKgot ICogZmluZCBuYW1lIGluIHRoZSBzeW1ib2wgdGFibGUsIHJldHVybiBpdHMgdmFsdWUuICBSZXR1 cm5zIC0xCi0gKiBpZiBub3QgZm91bmQuCi0gKgotICovCi1pbnQKLWxrdXAobmFtZSkgY2hhciAq bmFtZTsgewotICAgIHN0cnVjdCBzeW0gKmN1cjsKLSAgICBmb3IgKGN1ciA9IGh0YWJbaGFzaChu YW1lKV07IGN1ciAhPSBOVUxMOyBjdXIgPSBjdXItPmhueHQpCi0gICAgICBpZiAoc3RyY21wKGN1 ci0+bmFtZSxuYW1lKSA9PSAwKSByZXR1cm4oY3VyLT52YWwpOwotICAgIHJldHVybigtMSk7Ci19 CgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9tYWtl ZmlsZSBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvbWFrZWZpbGUKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZmUyNjIuLjAwMDAwMDAKLS0tIGEvY2tlcm1p dC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9tYWtlZmlsZQorKysgL2Rldi9udWxsCkBA IC0xLDg2MjYgKzAsMCBAQAotIyBtYWtlZmlsZSAvIE1ha2VmaWxlIC8gY2t1a2VyLm1hayAvIENL VUtFUi5NQUsKLSMKLSMgU3VuIEF1ZyAyMSAxMDozMzowOCAyMDExCi1CVUlMRElEPTIwMTEwODIx Ci1DS1ZFUj0gIjkuMC4zMDIiCi0jCi0jIC0tIE1ha2VmaWxlIHRvIGJ1aWxkIEMtS2VybWl0IGZv ciBVTklYIGFuZCBVTklYLWxpa2UgcGxhdGZvcm1zIC0tCi0jCi0jIENvcHlyaWdodCAoQykgMTk4 NSwgMjAxMSwKLSMgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5 IG9mIE5ldyBZb3JrLgotIyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0 IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCi0jICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21h aS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCi0jICAgSW4gY2FzZSB5 b3UgY2FuJ3QgZmluZCB0aGUgQ09QWUlORy5UWFQgZmlsZSwgaXQgY29udGFpbnMgdGhlIAotIyAg IFNpbXBsaWZpZWQgMy1DbGF1c2UgQlNEIExpY2Vuc2UsIHdoaWNoIGlzIGFuIE9wZW4gU291cmNl IGxpY2Vuc2UuCi0jCi0jIEF1dGhvcjogRnJhbmsgZGEgQ3J1eiwgQ29sdW1iaWEgVW5pdmVyc2l0 eQotIyA2MTIgV2VzdCAxMTV0aCBTdHJlZXQsIE5ldyBZb3JrIE5ZIDEwMDI1LTc3OTksIFVTQQot IyBFbWFpbDogZmRjQGNvbHVtYmlhLmVkdQotIyBXZWI6ICAgaHR0cDovL2tlcm1pdC5jb2x1bWJp YS5lZHUvCi0jIEZUUDogICBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC8KLSMKLSMg Tm90ZTogQXV0aG9yIGlzIG5vIGxvbmdlciBhdCBDb2x1bWJpYSBVbml2ZXJzaXR5IG9yIGF0IHRo ZSAxMTV0aCBTdHJlZXQKLSMgYWRkcmVzcyBlZmZlY3RpdmUgMSBKdWx5IDIwMTEuICBUaGUgZW1h aWwgYWRkcmVzcyBzaG91bGQgc3RpbGwgd29yaywKLSMgYXMgd2VsbCBhcyB0aGUgd2Vic2l0ZSBh bmQgRlRQIGFkZHJlc3NlcywgZm9yIHRoZSBmb3Jlc2VlYWJsZSBmdXR1cmUuCi0jIEZvciBuZXcg ZGV2ZWxvcG1lbnRzLCBhbHNvIGNoZWNrOgotIwotIyAgICBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9+ZmRjL2tlcm1pdC8KLSMKLSMgQ29udHJpYnV0aW9ucyBmcm9tIG1hbnkgb3RoZXJzLiAgU3Bl Y2lhbCB0aGFua3MgdG8gSmVmZiBBbHRtYW4gZm9yIHRoZQotIyBzZWN1cmUtYnVpbGQgdGFyZ2V0 cywgUGV0ZXIgRWljaGhvcm4sIGFzc3lzdCBHbWJILCBmb3IgdGhlIGNvbnNvbGlkYXRlZAotIyBI UC1VWCB0YXJnZXRzIGFuZCB0aGUgInVuaW5zdGFsbCIgdGFyZ2V0LCB0byBSb2JlcnQgTGlwZSBm b3IgdGhlIHVwZGF0ZWQKLSMgYW5kIGNvbnNvbGlkYXRlZCBTQ08gVU5JWCAvIE9EVCAvIE9TUjUg dGFyZ2V0cywgdG8gUmljIEFuZGVyc29uIGZvciB0aGUKLSMgSVJJWCA2LnggdGFyZ2V0cywgdG8g U2V0aCBUaGVyaWF1bHQgZm9yIG1ham9yIGltcHJvdmVtZW50cyB0byB0aGUKLSMgTWFjIE9TIFgg dGFyZ2V0cywgYW5kIHRvIEFsZXhleSBEb2t1Y2hhZXYgZm9yIEZyZWVCU0QgOS4wLgotIwotIyBD LUtlcm1pdCBpcyB3cml0dGVuIGFuZCBwcm9kdWNlZCBieSBoYW5kIHdpdGhvdXQgYW55IGF1dG9t YXRlZCBwcm9jZWR1cmVzCi0jIHN1Y2ggYXMgYXV0b2NvbmYgLyBhdXRvbWFrZSAvIGNvbmZpZ3Vy ZSwgYWx0aG91Z2ggc29tZSBvZiB0aGUgdGFyZ2V0cyBiZWxvdwotIyAoZXNwZWNpYWxseSB0aGUg bGludXggdGFyZ2V0KSBpbnNwZWN0IHRoZSBlbnZpcm9ubWVudCBhbmQgbWFrZSBzb21lCi0jIGRl Y2lzaW9ucyBpbiB0aGUgbW9zdCBwb3J0YWJsZSB3YXkgcG9zc2libGUuIFRoZSBhdXRvbWF0ZWQg dG9vbHMgYXJlIG5vdAotIyB1c2VkIGJlY2F1c2UgKGEpIEMtS2VybWl0IHByZWRhdGVzIHRoZW0s IGFuZCAoYikgdGhleSBhcmUgbm90IHBvcnRhYmxlIHRvCi0jIGFsbCB0aGUgcGxhdGZvcm1zIHdo ZXJlIEMtS2VybWl0IG11c3QgYmUgKG9yIG9uY2Ugd2FzKSBidWlsdCwgYW5kIChjKSB0bwotIyBr ZWVwIEMtS2VybWl0IGFzIGluZGVwZW5kZW50IGFzIHBvc3NpYmxlIGZyb20gZXh0ZXJuYWwgdG9v bHMgb3ZlciB3aGljaAotIyB3ZSBoYXZlIG5vIGNvbnRyb2wuCi0jCi0jIE1vc3QgZW50cmllcyB1 c2UgdGhlICJ4ZXJtaXQiIHRhcmdldCwgd2hpY2ggdXNlcyB0aGUgc2VsZWN0KCktYmFzZWQgQ09O TkVDVAotIyBtb2R1bGUsIGNrdWNucy5jLiAgVGhlICJ3ZXJtaXQiIHRhcmdldCB1c2VzIHRoZSBv cmlnaW5hbCBmb3JrKCktYmFzZWQgQ09OTkVDVAotIyBtb2R1bGUsIGNrdWNvbi5jLCB3aGljaCBo YXMgc29tZSBkcmF3YmFja3MgYnV0IHdhcyBwb3J0YWJsZSB0byBldmVyeSBVbml4Ci0jIHZhcmlh bnQgd2hldGhlciBpdCBoYWQgVENQL0lQIG9yIG5vdCAoc2VsZWN0KCkgaXMgcGFydCBvZiB0aGUg VENQL0lQCi0jIGxpYnJhcnksIHdoaWNoIHdhcyBub3Qgc3RhbmRhcmQgb24gb2xkZXIgVW5peGVz KS4gIElmIHlvdXIgdGFyZ2V0IHN0aWxsIHVzZXMKLSMgdGhlICJ3ZXJtaXQiIHRhcmdldCwgcGxl YXNlIHRyeSBzdWJzdGl0dXRpbmcgdGhlICJ4ZXJtaXQiIG9uZSBhbmQgaWYgaXQKLSMgd29ya3Ms IGxldCB1cyBrbm93IChtYWlsdG86a2VybWl0LXN1cHBvcnRAY29sdW1iaWEuZWR1KS4gIFdoZW4g Y2hhbmdpbmcgYQotIyB0YXJnZXQgb3ZlciBmcm9tIHdlcm1pdCB0byB4ZXJtaXQsIGFsc28gcmVt b3ZlIC1ETk9MT0VBUk4uCi0jCi0jIENBUkVGVUw6IERvbid0IHB1dCB0aGUgbG93ZXJjYXNlIHdv cmQgImlmIiwgImRlZmluZSIsIG9yICJlbmQiIGFzIHRoZSBmaXJzdAotIyB3b3JkIGFmdGVyIHRo ZSAiIyIgY29tbWVudCBpbnRyb2R1Y2VyIGluIHRoZSBtYWtlZmlsZSwgZXZlbiBpZiBpdCBpcwot IyBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4gIFNvbWUgdmVyc2lvbnMgb2YgIm1ha2UiIHVuZGVy c3RhbmQgdGhlc2UgYXMKLSMgZGlyZWN0aXZlcy4gIFVwcGVyY2FzZSBsZXR0ZXJzIHJlbW92ZSB0 aGUgZGFuZ2VyLCBlLmcuICIjIElmIHlvdSBoYXZlLi4uIgotIyAKLSMgV0FSTklORzogVGhpcyBp cyBhIGh1Z2UgbWFrZWZpbGUuICBBbHRob3VnaCB0aGlzIGlzIGxlc3MgbGlrZWx5IHNpbmNlIHRo ZQotIyB0dXJuIG9mIHRoZSBjZW50dXJ5LCBzb21lICJtYWtlIiBwcm9ncmFtcyBtaWdodCBydW4g b3V0IG9mIG1lbW9yeS4gIElmIHRoaXMKLSMgaGFwcGVucyB0byB5b3UsIGVkaXQgYXdheSB0aGUg cGFydHMgdGhhdCBkbyBub3QgYXBwbHkgdG8geW91ciBwbGF0Zm9ybSBhbmQKLSMgdHJ5IGFnYWlu LgotIwotIyBXQVJOSU5HIDI6IEluIG1hbnkgY2FzZXMgdGhpcyBmaWxlIGludm9rZXMgaXRzZWxm IHJlY3Vyc2l2ZWx5LCBzb21ldGltZXMKLSMgc2V2ZXJhbCBsZXZlbHMgZGVlcCAoYXMgaW4gdGhl IExpbnV4IHRhcmdldHMpOyBpLmUuIHNvbWUgdGFyZ2V0cyBhcmUgdXNlZAotIyBhcyAnc3Vicm91 dGluZXMnIG9mIG90aGVyIHRhcmdldHMsIHdpdGggcGFyYW1ldGVycyBwYXNzZWQgYnkgc2V0dGlu ZwotIyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICBGb3IgdGhhdCByZWFzb24sIGRvbid0IHVzZSAn bWFrZSAtZScuCi0jCi0jIENlcnRhaW4gVU5JWCB2YXJpYXRpb25zIGhhdmUgdGhlaXIgb3duIHNl cGFyYXRlIG1ha2VmaWxlczoKLSMgIC4gRm9yIDIuMTAgb3IgMi4xMSBCU0Qgb24gdGhlIERFQyBQ RFAtMTEsIHVzZSBja3ViczIubWFrLgotIyAgLiBGb3IgUGxhbiA5LCB1c2UgY2twa2VyLm1rLgot IwotIyBTZXBhcmF0ZSBidWlsZCBwcm9jZWR1cmVzIGFyZSBwcm92aWRlZCBub24tVU5JWCBwbGF0 Zm9ybXM6IFZNUywgVk9TLAotIyBBT1MvVlMsIGV0Yy4gIFNlZSB0aGUgY2thYWFhLnR4dCBmaWxl IG9yIHRoZSBLZXJtaXQgd2Vic2l0ZSBmb3IgZGV0YWlscy4KLSMKLSMKLSMgRElSRUNUSU9OUyBG T1IgVU5JWAotIwotIyBSZW5hbWUgdGhpcyBmaWxlIHRvICJtYWtlZmlsZSIgb3IgIk1ha2VmaWxl IiBpZiBuZWNlc3NhcnkuICBQaWNrIG91dCB0aGUKLSMgZW50cnkgbW9zdCBhcHByb3ByaWF0ZSBm b3IgeW91ciBVTklYIHZlcnNpb24gZnJvbSB0aGUgbGlzdCBiZWxvdyBhbmQgdGhlbgotIyBnaXZl IHRoZSBhcHByb3ByaWF0ZSAibWFrZSIgY29tbWFuZCwgZm9yIGV4YW1wbGUgIm1ha2UgYWl4Iiwg Im1ha2UgbWFjb3N4IiwKLSMgIm1ha2UgbGludXgiLiAgSWYgeW91IGV4cGVyaWVuY2UgYW55IGRp ZmZpY3VsdGllcyB3aXRoIHRoZSBidWlsZCBwcm9jZWR1cmUsCi0jIHRoZW4gcGxlYXNlIGFsc28g cmVhZCBhbnkgY29tbWVudHMgdGhhdCBhY2NvbXBhbnkgdGhlIG1ha2UgZW50cnkgaXRzZWxmCi0j IChzZWFyY2ggZm9yIHRoZSBtYWtlIGVudHJ5IG5hbWUgb24gdGhlIGxlZnQgbWFyZ2luKS4KLSMK LSMgT3RoZXIgdGFyZ2V0czoKLSMgICdtYWtlIGluc3RhbGwnIGlzIGFuIGluc3RhbGxhdGlvbiBz Y3JpcHQgKHJlYWQgYWNjb21wYW55aW5nIGNvbW1lbnRzISkuCi0jICAnbWFrZSB1bmluc3RhbGwn IHVuZG9lcyAnbWFrZSBpbnN0YWxsJyAocmVhZCBhY2NvbXBhbnlpbmcgY29tbWVudHMhKS4KLSMg ICdtYWtlIGNsZWFuJyByZW1vdmVzIGludGVybWVkaWF0ZSBhbmQgb2JqZWN0IGZpbGVzLgotIyAg J21ha2Ugc2hvdycgdGVsbHMgdGhlIGRlZmF1bHQgaW5jbHVkZSBhbmQgbGliIHBhdGhzIGZvciBz ZWN1cmUgYnVpbGRzLgotIwotIyBJTVBPUlRBTlQ6Ci0jICAgRm9yIG1vcmUgZGV0YWlsZWQgaW5z dGFsbGF0aW9uIGluc3RydWN0aW9ucywgcmVhZCB0aGUgZmlsZXMgY2t1aW5zLnR4dAotIyAgIGFu ZCBja2NjZmcudHh0LCBhbHNvIGF2YWlsYWJsZSBhdCB0aGUgS2VybWl0IHdlYnNpdGUgaW4gSFRN TCBmb3JtOgotIyAgIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbAot IyAgIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbAotIwotIyAgRm9y IGRlc2NyaXB0aW9ucyBvZiBrbm93biBwcm9ibGVtcyBhbmQgbGltaXRhdGlvbnMsCi0jICAgcmVh ZCB0aGUgZmlsZXMgY2tjYndyLnR4dCBhbmQgY2t1YndyLnR4dCAodGhlICJiZXdhcmUgZmlsZXMi KSBvcjoKLSMgICBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwKLSMg ICBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwKLSMKLSMgTW9zdCB0 YXJnZXRzIGJ1aWxkIEMtS2VybWl0IHdpdGggaXRzIHN5bWJvbCB0YWJsZSBpbmNsdWRlZC4gIFRv IHJlZHVjZSB0aGUKLSMgc2l6ZSBvZiB0aGUgZXhlY3V0YWJsZSBwcm9ncmFtLCBhZGQgIkxOS0ZM QUdTPS1zIiB0byB0aGUgZW5kIG9mIHlvdXIgJ21ha2UnCi0jIGNvbW1hbmQgb3IgdG8gdGhlIG1h a2VmaWxlIGVudHJ5LCBvciAnc3RyaXAnIHRoZSBleGVjdXRhYmxlIGFmdGVyCi0jIGJ1aWxkaW5n LiAgVG8gZnVydGhlciByZWR1Y2UgdGhlIHNpemUgYWZ0ZXIgYnVpbGRpbmcsIHVzZSAnbWNzIC1k JyBpZiB5b3VyCi0jIFVuaXggdmVyc2lvbiBoYXMgc3VjaCBhIGNvbW1hbmQuICBGb3IgZnVydGhl ciBkZXRhaWxzIG9uIHNpemUgcmVkdWN0aW9uLCByZWFkCi0jIGNrY2NmZy50eHQgdG8gZmluZCBv dXQgaG93IHRvIHJlbW92ZSBmZWF0dXJlcyB0aGF0IHlvdSBkb24ndCBuZWVkLgotIwotIyBUQ1Av SVAgbmV0d29ya2luZyBzdXBwb3J0OiBJZiB5b3VyIEMtS2VybWl0IHZlcnNpb24gZG9lcyBub3Qg aW5jbHVkZSBUQ1AvSVAKLSMgbmV0d29ya2luZywgYnV0IHlvdXIgVU5JWCBzeXN0ZW0gZG9lcywg dHJ5IGFkZGluZyAtRFRDUFNPQ0tFVCB0byB0aGUgQ0ZMQUdTCi0jIG9mIHlvdXIgbWFrZWZpbGUg ZW50cnkuICBJZiB0aGF0IGRvZXNuJ3Qgd29yaywgbG9vayBhdCBzb21lIG9mIHRoZSBvdGhlcgot IyB0YXJnZXRzIHRoYXQgaW5jbHVkZSB0aGlzIGZsYWcgZm9yIGlkZWFzIGFib3V0IHdoYXQgbGli cmFyaWVzIG1pZ2h0IG5lZWQgdG8KLSMgYmUgaW5jbHVkZWQgKHR5cGljYWxseSAtbHNvY2tldCBh bmQvb3IgLWxCU0QgYW5kL29yIC1sbnNsIGFuZC9vciAtbGluZXQpLgotIyBOT1RFOiBJbiBzb21l IGNhc2VzIChvbGQgdmVyc2lvbnMgb2YgU0NPIG9yIEhQLVVYKSwgeW91IG1pZ2h0IG5lZWQgbm90 IG9ubHkKLSMgYSBDIGNvbXBpbGVyLCBidXQgYWxzbyBhICJUQ1AvSVAgZGV2ZWxvcGVycyBraXQi IGZvciB0aGUgcmVxdWlyZWQgb2JqZWN0Ci0jIGxpYnJhcmllcyBhbmQgaGVhZGVyIGZpbGVzLgot IwotIyBQbGVhc2UgcmVwb3J0IG1vZGlmaWNhdGlvbnMsIGZhaWx1cmVzIChwcmVmZXJhYmx5IHdp dGggZml4ZXMpIG9yIHN1Y2Nlc3NlcwotIyB0byB0aGUgYXV0aG9yLCBmZGNAY29sdW1iaWEuZWR1 LgotIwotIyBUQVJHRVRTIEZPUiBESUZGRVJFTlQgVU5JWCBQTEFURk9STVMgQU5EIFZFUlNJT05T OgotIwotIyArIE1hcmtzIHRob3NlIHRoYXQgaGF2ZSBiZWVuIGJ1aWx0IHN1Y2Nlc3NmdWxseSBm b3IgQy1LZXJtaXQgOS4wIG9yIGxhdGVyLgotIyAtIFRob3NlIHRoYXQgb25jZSBidWlsdCBPSyBi dXQgbm8gbG9uZ2VyIGRvIChlLmcuIHRvbyBiaWcpLgotIyA/IFRob3NlIHRoYXQgd29ya2VkIGlu IGEgcHJldmlvdXMgdmVyc2lvbiBidXQgaGF2ZSBub3QgYmVlbiB0ZXN0ZWQgcmVjZW50bHkuCi0j IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFNvbWUgY29tbW9ubHkgdXNlZCB0YXJnZXRz OgotIwotIyArICJtYWtlIGxpbnV4IiBzaG91bGQgd29yayBmb3IgYW55IHZlcnNpb24gb2YgTGlu dXggb24gYW55IGhhcmR3YXJlLgotIyArICJtYWtlIGxpbnV4K3NzbCIgZGl0dG8sIHdpdGggT3Bl blNTTCBzZWN1cml0eSBhZGRlZC4KLSMgKyAibWFrZSBsaW51eCtrcmI1IiBkaXR0bywgd2l0aCBL ZXJiZXJvcyA1IHNlY3VyaXR5IGFkZGVkLgotIyArICJtYWtlIGxpbnV4K2tyYjUrc3NsIiBMaW51 eCB3aXRoIE9wZW5TU0wgYW5kIEtlcmJlcm9zIDUuCi0jICsgIm1ha2UgbmV0YnNkIiwgTmV0QlNE LCBhbnkgdmVyc2lvbi4KLSMgKyAibWFrZSBuZXRic2Qrc3NsIiwgTmV0QlNEIHdpdGggT3BlblNT TCAwLjkuNyBvciBsYXRlci4KLSMgKyAibWFrZSBuZXRic2Qra3JiNSIsIE5ldEJTRCB3aXRoIEtl cmJlcm9zIDUuCi0jICsgIm1ha2UgbmV0YnNkK2tyYjUrc3NsIiwgTmV0QlNEIHdpdGggS2VyYmVy b3MgNSBhbmQgT3BlblNTTCAwLjkuNyBvciBsYXRlci4KLSMgPyAibWFrZSBmcmVlYnNkMSIgZm9y IEZyZWVCU0QgMS54Ci0jID8gIm1ha2UgZnJlZWJzZDIiIGZvciBGcmVlQlNEIDIueAotIyArICJt YWtlIGZyZWVic2QzIiBmb3IgRnJlZUJTRCAzLngKLSMgPyAibWFrZSBmcmVlYnNkNCIgZm9yIEZy ZWVCU0QgNC4wCi0jICsgIm1ha2UgZnJlZWJzZCIsIEZyZWVCU0QgNC4xIG9yIGxhdGVyLgotIyAr ICJtYWtlIGZyZWVic2Qrc3NsIiwgRnJlZUJTRCA1LjAgb3IgbGF0ZXIgd2l0aCBPcGVuU1NMIDAu OS43IG9yIGxhdGVyLgotIyArICJtYWtlIG9wZW5ic2QiLCBPcGVuQlNEIDIuMyBvciBsYXRlci4K LSMgKyAibWFrZSBvcGVuYnNkK3NzbCIsIE9wZW5CU0QgMi4zIG9yIGxhdGVyIHdpdGggT3BlblNT TCAwLjkuNyBvciBsYXRlci4KLSMgKyAibWFrZSBtaXJic2QiLCBNaXJCU0QuCi0jICsgIm1ha2Ug bWlyYnNkK3NzbCIsIE1pckJTRCB3aXRoIE9wZW5TU0wgMC45Ljcgb3IgbGF0ZXIuCi0jICsgIm1h a2UgbWFjb3N4IiBzaG91bGQgd29yayBmb3IgYW55IE1hYyBPUyBYIHZlcnNpb24gMTAuMy45IG9y IGxhdGVyLgotIyArICJtYWtlIG1hY29zeCtrcmI1K29wZW5zc2wiIE1hYyBPUyBYIDEwLjMuOSBv ciBsYXRlciArIEtlcmJlcm9zIFYgKyBPcGVuU1NMLgotIyArICJtYWtlIGFpeCIgc2hvdWxkIHdv cmsgZm9yIGFueSB2ZXJzaW9uIG9mIEFJWCA0LjIgb3IgbGF0ZXIuCi0jICsgIm1ha2UgYWl4ZyIg c2hvdWxkIHdvcmsgZm9yIGFueSB2ZXJzaW9uIG9mIEFJWCA0LjIgb3IgbGF0ZXIsIHVzaW5nIGdj Yy4KLSMgKyAibWFrZSBhaXgrc3NsIiBkaXR0bywgd2l0aCBPcGVuU1NMIChzcGVjaWZ5aW5nIFNT TExJQiBhbmQgU1NMSU5DKQotIyArICJtYWtlIGFpeCtpYm1zc2wiIGRpdHRvLCB3aXRoIElCTSBP cGVuU1NMCi0jICsgIm1ha2Ugc29sYXJpczkiLCAibWFrZSBzb2xhcmlzMTAiIGZvciBTb2xhcmlz IDkgb3IgMTAgd2l0aCBTdW4gY2MuCi0jICsgIm1ha2Ugc29sYXJpczlnIiwgIm1ha2Ugc29sYXJp czEwZyIgZm9yIFNvbGFyaXMgOSBvciAxMCB3aXRoIGdjYy4KLSMgKyAibWFrZSBzb2xhcmlzMTEi IGZvciBTb2xhcmlzIDExIHdpdGggU3VuIENDCi0jICsgIm1ha2Ugc29sYXJpczExZyIgZm9yIFNv bGFyaXMgMTEgd2l0aCBnY2MKLSMgKyAibWFrZSBzY29fb3NyNjAwIiBmb3IgU0NPIE9wZW5TZXJ2 ZXIgNi4wLjAuCi0jCi0jIEZvciBvdGhlciBjdXJyZW50IE9TcyBzdWNoIGFzIFNvbGFyaXMsIEhQ LVVYLCBhbmQgU0NPIHRoZXJlIGFyZSBzZXBhcmF0ZQotIyB0YXJnZXRzIGZvciBkaWZmZXJlbnQg Y29tYmluYXRpb25zIG9mIE9TIHZlcnNpb24gYW5kIGNvbXBpbGVyOyBzZWUgdGhlCi0jIGNvbXBs ZXRlIGxpc3QuICBGb3Igb2xkZXIgT1MncyBzZWUgdGhlIGNvbXBsZXRlIGxpc3QuICBJZiBhbiBv bGQgdGFyZ2V0Ci0jIGRvZXNuJ3Qgd29yayBpbiB0aGlzIHJlbGVhc2Ugb2YgQy1LZXJtaXQgeW91 IGNhbiBnZXQgYSBwcmV2aW91cyByZWxlYXNlIGZyb20KLSMgdGhlIEtlcm1pdCBGVFAgc2l0ZTog ZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvCi0jCi0jIFNFQ1VSRSBUQVJHRVRTICh2 ZXJzaW9ucyB0aGF0IHN1cHBvcnQgYXV0aGVudGljYXRpb24gYW5kIGVuY3J5cHRpb24pCi0jICBh cmUgZGVzY3JpYmVkIGFmdGVyIHRoZSBmb2xsb3dpbmcgbGlzdC4gIFNlYXJjaCBmb3IgKioqKioq KiBiZWxvdy4KLSMKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ29tcGxldGUgbGlz dCAoYWxwaGFiZXRpY2FsKToKLSMgPyBmb3IgMzg2QlNEIChKb2xpeCkgMC4wLCAwLjEsICJtYWtl IDM4NmJzZCIgKHNlZSBjb21tZW50cyBpbiBlbnRyeSksCi0jICAgICBvciAocHJlZmVyYWJseSwg aWYgaXQgd29ya3MpICJtYWtlIGJzZDQ0IiBvciAibWFrZSBic2Q0NGMiLgotIyA/IGZvciBBY29y biBSSVNDaVgsICJtYWtlIHJpc2NpeCIgb3IgIm1ha2UgcmlzY2l4LWdjYyIKLSMgPyBmb3IgQWxs aWFudCBGWC84IHdpdGggQ29uY2VudHJpeCA0LjEgb3IgbGF0ZXIsICJtYWtlIGJzZGxjayIKLSMg PyBmb3IgQWx0b3MgNDg2LCA1ODYsIDk4NiB3aXRoIFhlbml4IDMuMCwgIm1ha2UgYWx0b3MiCi0j ID8gZm9yIEFsdG9zIEFDUzY4MDAwLCA4TWh6IDY4MDAwLCBVTklYIFN5c3RlbSAzIFJlbCAyLCA1 MTJLLCAibWFrZSBhbHRvczMiCi0jID8gZm9yIEFtZGFobCBVVFMgMi40IG9uIElCTSAzNzAgc2Vy aWVzICYgY29tcGF0aWJsZSBtYWluZnJhbWVzLCAibWFrZSB1dHMyNCIKLSMgPyBmb3IgQW1kYWhs IFVUU1YgSUJNIDM3MCBzZXJpZXMgJiBjb21wYXRpYmxlIG1haW5mcmFtZXMsICJtYWtlIHV0c3Yi Ci0jID8gZm9yIEFtZGFobCBVVFNWIElCTSAzNzAgc2VyaWVzIG1haW5mcmFtZXMgd2l0aCBUQ1Av SVAsICJtYWtlIHV0c3Z0Y3AiCi0jID8gZm9yIEFtZGFobCBtYWluZnJhbWVzIHdpdGggVU5JWCBT eXN0ZW0gViBSIDUuMi42YiA1ODAsICJtYWtlIHN5czMiCi0jID8gZm9yIEFwb2xsbyBBZWdpcyA5 LngsIERPTUFJTi9JWCA5LngsICJtYWtlIGFlZ2lzIgotIyAgICAoTGFzdCB0ZXN0ZWQgaW4gQy1L ZXJtaXQgNUEoMTg5KSkKLSMgPyBmb3IgQXBvbGxvIERPTUFJTi9JWCwgaWYgdGhlIGFib3ZlIGZh aWxzLCB0cnkgIm1ha2UgYXBvbGxvYnNkIgotIyA/IGZvciBBcG9sbG8gd2l0aCBTUjEwLjAgb3Ig bGF0ZXIsIEJTRCBlbnZpcm9ubWVudCwgIm1ha2Ugc3IxMC1ic2QiCi0jID8gZm9yIEFwb2xsbyB3 aXRoIFNSMTAuMCBvciBsYXRlciwgU3lzdGVtIFYgZW52aXJvbm1lbnQsICJtYWtlIHNyMTAtczVy MyIKLSMgPyBmb3IgQXBwbGUgTWFjaW50b3NoIElJIHdpdGggQS9VWCBwcmUtMy4wLCAibWFrZSBh dXgiLCAiYXV4Z2NjIiBvciAiYXV4dWZzIgotIyA/IGZvciBBcHBsZSBNYWNpbnRvc2ggd2l0aCBB L1VYIDMuMCBhbmQgZ2NjLCAibWFrZSBhdXgzZ2NjIiBvciBhdXgzZ2NjYwotIyA/IGZvciBBcHBs ZSBQb3dlck1hYyB3aXRoIE1rTGludXgsICJtYWtlIG1rbGludXgiIChyZWFkIExpbnV4IGVudHJ5 IGZpcnN0KQotIyA/IGZvciBBcHBsZSBQb3dlck1hYyB3aXRoIExpbnV4UFBDLCAibWFrZSBsaW51 eHBwYyIKLSMgPyBmb3IgQXBwbGUgTWFjaW50b3NoIHdpdGggTWluaXggMS41LjEwLCAibWFrZSBt aW5peDY4ayIgb3IgIm1ha2UgbWluaXhjNjgiCi0jID8gZm9yIEFwcGxlIE1hY2ludG9zaCB3aXRo IE1hYyBPUyBYIDEuMCAoUmhhcHNvZHkpLCAibWFrZSBtYWNvc3gxMCIKLSMgICAgIChubyBjdXJz ZXMpLCAibWFrZSBtYWNvc3gxMGMiIChjdXJzZXMpLCBvciAibWFrZSBtYWNvc3gxMG5jIiAobmN1 cnNlcykuCi0jICAgICBPciAibWFrZSBtYWNvc3gxMG5jeCIgKG5jdXJzZXMgYnV0ICJtYWtlIG1h Y29zeDEwbmMiIGRvZXNuJ3Qgd29yaykuCi0jID8gZm9yIEFwcGxlIE1hY2ludG9zaCB3aXRoIE1h YyBPUyBYIDEwLjIsICJtYWtlIG1hY29zeDEwMm5jIiAobmN1cnNlcykuCi0jID8gZm9yIEFwcGxl IE1hY2ludG9zaCB3aXRoIE1hYyBPUyBYIDEwLjMsICJtYWtlIG1hY29zeDEwMyIKLSMgPyBmb3Ig QXBwbGUgTWFjaW50b3NoIHdpdGggTWFjIE9TIFggMTAuMy45IG9yIGxhdGVyLCAibWFrZSBtYWNv c3giCi0jID8gZm9yIEFyaXggU3lzdGVtIDkwIHdpdGggQVQmVCBTVlIzLCAibWFrZSBzeXM1cjNu YSIKLSMgLSBmb3IgQVQmVCA2MzAwIHdpdGggSU4vaXgsICJtYWtlIHN5czUiCi0jIC0gZm9yIEFU JlQgNjMwMCBQTFVTLCAibWFrZSBhdHQ2MzAwIiBvciAod2l0aCBubyBkZWJ1Z2dpbmcpICJtYWtl IGF0dDYzMDBuZCIKLSMgPyBmb3IgQVQmVCA2Mzg2IFdHUyBVTklYIFBDLCAibWFrZSBzeXM1cjMi Ci0jID8gZm9yIEFUJlQgM0IyLCAzQjIwIHN5c3RlbXMsICJtYWtlIGF0dDNiMiIuCi0jICAgZm9y IEFUJlQgM0IxLCA3MzAwIFVOSVggUEMgKHNlZSBub3RlcyB3aXRoIHRoZSBlbnRyaWVzKToKLSMg ICAgIEluIEMtS2VybWl0IDcuMCwgb25seSB0aGUgZ2NjIGVudHJpZXMgd29yazoKLSMgPyAgICJt YWtlIHN5czN1cGNnIiwgIm1ha2Ugc3lzM3VwY2djIiwgIm1ha2UgYXR0MzUxZ20iCi0jICAgIFRo ZSBvdGhlcnMgZmFpbCB3aXRoICJ0b28gbWFueSBkZWZpbmVzIiAodXN1YWxseSBpbiBja3V1c3Iu aCk6Ci0jIC0gICAibWFrZSBzeXMzdXBjIiwgIm1ha2Ugc3lzM3VwY29sZCIsICJtYWtlIHN5czN1 cGNjIiwgIm1ha2Ugc3lzM3VwY3giLAotIyAgICAgICAibWFrZSBzeXMzdXBjbSIsICJtYWtlIGF0 dDM1MW0iCi0jID8gZm9yIEFUJlQgU3lzdGVtIElJSS9TeXN0ZW0gViBSMiBvciBlYXJsaWVyLCAi bWFrZSBzeXMzIiBvciAibWFrZSBzeXMzbmlkIgotIyA/IGZvciBBVCZUIFN5c3RlbSBJSUkvU3lz dGVtIFYgd2l0aCBIb25leSBEYW5CZXIgVVVDUCwgIm1ha2Ugc3lzM2hkYiIKLSMgPyBmb3IgQVQm VCBTeXN0ZW0gViBvbiBERUMgVkFYLCAibWFrZSBzeXMzIiBvciAibWFrZSBzeXM1cjMiCi0jID8g Zm9yIEFUJlQgU3lzdGVtIFYgUjMsIHVzZSAibWFrZSBzeXM1cjMiIG9yICJtYWtlIHN5czVyM2Mi Ci0jID8gZm9yIEFUJlQgU3lzdGVtIFYvMzg2IFIzLjIgYnVpbHQgb24gSW50ZXJhY3RpdmUgNC4x LjEsICJtYWtlIHN5czVyMzJpcyIuCi0jID8gZm9yIEFUJlQgU3lzdGVtIFYvMzg2IFIzMjAuMCBW ZXJzeXNzIFN5c3RlbXMsIHVzZSAibWFrZSBzeXM1cjMiCi0jICAgICBvciAibWFrZSBzeXM1cjNj Ii4KLSMgPyBmb3IgQVQmVCBTeXN0ZW0gViBSNCwgIm1ha2Ugc3lzNXI0IiwgIm1ha2Ugc3lzNXI0 c3giLCBvciAibWFrZSBzeXM1cjRueCIsCi0jICAgICBvciBpZiB0aGUgQU5TSSBDIGZ1bmN0aW9u IHByb3RvdHlwaW5nIG1ha2VzIHRyb3VibGUsIGFkZCAtRE5PQU5TSSwKLSMgICAgIGFzIGluICJz eXM1cjRzeG5hIiBlbnRyeQotIyA/IGZvciBBVCZUIChVU0wpIFN5c3RlbSBWIFI0LjIgdXNlIHRo ZSBzeXM1cjQqIGVudHJpZXMuCi0jID8gZm9yIEF0YXJpIEZhbGNvbiB3aXRoIE1pTlQsICJtYWtl IHBvc2l4IgotIyA/IGZvciBBdGFyaSBTVCB3aXRoIE1pbml4IFNUIDEuNS4xMC4zLCAibWFrZSBt aW5peDY4ayIgb3IgIm1ha2UgbWluaXhjNjgiCi0jID8gZm9yIEJCTiBDLzcwIHdpdGggSU9TIDIu MCwgIm1ha2UgYzcwIgotIyA/IGZvciBCZUJveCB3aXRoIEJlIE9TIDEueCBEUjcsICJtYWtlIGJl Ym94ZHI3IgotIyAgICAgQ29tcGlsZXMgT0sgYnV0IGRvZXNuJ3QgbGluayB3aXRoIGRlZmF1bHQg bGlua2VyIHdoaWNoIGlzIGxpbWl0ZWQgdG8gNjRLLgotIyAgICAgTGlua3MgT0sgd2l0aCAiQ29k ZSBXYXJyaW9yIEdvbGQiLiAgTWFueSBoYWNrcyBpbiB0aGUgc291cmNlIGNvZGUgbmVlZAotIyAg ICAgdG8gYmUgcmVtb3ZlZCB3aGVuIERSOCBhbmQgbGF0ZXIgY29tZSBvdXQuCi0jICAgICAoTGFz dCB0ZXN0ZWQgaW4gQy1LZXJtaXQgNi4wKQotIyAtIGZvciBCZUJveCB3aXRoIEJlIE9TIDEueCBE UjgsICJtYWtlIGJlYm94IgotIyAgICAgKE5lZWRlZCBmdW5jdGlvbnMgbWlzc2luZyBmcm9tIG9w ZXJhdGluZyBzeXN0ZW0gYW5kL29yIG5vdCB3b3JraW5nLikKLSMgLSBmb3IgQmVsbCBMYWJzIFVO SVggVmVyc2lvbiA2ICg2dGggRWRpdGlvbiksIHRoZXJlIGlzIG5vIG1ha2VmaWxlIGVudHJ5Lgot IyA/IGZvciBCZWxsIExhYnMgVU5JWCBWZXJzaW9uIDcgKDd0aCBFZGl0aW9uKSwgIm1ha2Ugdjci IChidXQgc2VlIG5vdGVzIGJlbG93KQotIyAgICAobGFzdCBidWlsdCBzdWNjZXNzZnVsbHkgaW4g Qy1LZXJtaXQgNUExODgpCi0jID8gZm9yIEJlbGwgTGFicyBSZXNlYXJjaCBVTklYIFZlcnNpb24g MTAsICJtYWtlIGJlbGx2MTAiCi0jICAgIChsYXN0IGJ1aWx0IHN1Y2Nlc3NmdWxseSBpbiBDLUtl cm1pdCA2LjApCi0jID8gZm9yIEJlbGwgTGFicyAvIEx1Y2VudCBQbGFuIDksIHVzZSBzZXBhcmF0 ZSBtYWtlZmlsZSBja3BrZXIubWs6Ci0jICAgIGNhbiBiZSBidWlsdCBmb3IgSW50ZWwsIE1JUFMs IDY4MHgwLCBhbmQgUG93ZXJQQyAobGFzdCBidWlsdCBDLUtlcm1pdCA3LjApCi0jID8gZm9yIEJT REkgQlNELzM4NiAxLngsICJtYWtlIGJzZGkiCi0jID8gZm9yIEJTREkgQlNEL09TIDIueCwgIm1h a2UgYnNkaTIiCi0jID8gZm9yIEJTREkgQlNEL09TIDMuMCBvciAzLjEsICJtYWtlIGJzZGkzIgot IyA/IGZvciBCU0RJIEJTRC9PUyA0LngsICJtYWtlIGJzZGk0IgotIyA/IGZvciBCU0RJIEJTRC9P UyA0LngsIHRvIGJ1aWxkIGEgYmluYXJ5IHRoYXQgYWxzbyB3b3JrcyBvbiBGcmVlQlNELAotIyAg ICAgIm1ha2UgYnNkaXgiLgotIyA/IGZvciBCZXJrZWxleSBVbml4IDIuNCwgIm1ha2UgdjciIChi dXQgcmVhZCB2NyBtYXRlcmlhbCBiZWxvdykKLSMgPyBmb3IgQmVya2VsZXkgVW5peCAyLjkgKERF QyBQRFAtMTEgb3IgUHJvLTN4eCksICJtYWtlIGJzZDI5IgotIyAtIGZvciBCZXJrZWxleSBVbml4 IDIuMTAsIHVzZSBja3ViczIubWFrIChhIHNlcGFyYXRlIG1ha2VmaWxlKQotIyAtIGZvciBCZXJr ZWxleSBVbml4IDIuMTEsIHVzZSBja3ViczIubWFrIChhIHNlcGFyYXRlIG1ha2VmaWxlKQotIyAg ICAgVGhpcyBtYWtlZmlsZSBpcyB0b28gYmlnLiAgUmVhZCB0aGUgaW5zdHJ1Y3Rpb25zIGluIGNr dWJzMi5tYWsuCi0jICAgICAibWFrZSAtZiBja3ViczIubWFrIGJzZDIxMCIgb3IgIm1ha2UgLWYg Y2t1YnMyLm1hayBic2QyMTEiLgotIyAgICAgKGxhc3QgYnVpbHQgc3VjY2Vzc2Z1bGx5IGluIEMt S2VybWl0IDYuMCAtIGxhdGVyIHZlcnNpb25zIHRvbyBiaWcpCi0jID8gZm9yIEJlcmtlbGV5IFVu aXggMi4xMSAibWFrZSAtZiBja3ViczIubWFrIGJzZDIxMG5vaWNwIiAobm8gY29tbWFuZCBwYXJz ZXIpCi0jID8gZm9yIEJlcmtlbGV5IFVuaXggNC4xLCAibWFrZSBic2Q0MSIKLSMgPyBmb3IgQmVy a2VsZXkgVW5peCA0LjIgb24gVkFYLCAibWFrZSBic2Q0MiIgb3IgIm1ha2UgYnNkNDJjIgotIyA/ IGZvciBCZXJrZWxleSBVbml4IDQuMiBvciA0LjMgd2l0aCBIb25leURhbkJlciBVVUNQLCAibWFr ZSBic2RoZGIiCi0jID8gZm9yIEJlcmtlbGV5IFVuaXggNC4zIG9uIFZBWCwgIm1ha2UgYnNkNDMi LCAibWFrZSBic2Q0M25jIi4KLSMgPyBmb3IgQmVya2VsZXkgVW5peCA0LjMgb24gVkFYLCBubyBu ZXR3b3JraW5nICJtYWtlIGJzZDQzbm9uZXQuCi0jID8gZm9yIEJlcmtlbGV5IFVuaXggNC4zIHdp dGhvdXQgYWN1Y250cmwgcHJvZ3JhbSwgIm1ha2UgYnNkNDIiIG9yICJic2Q0MmMiCi0jICAgICBO T1RFOiBhbGwgdGhlIEMtS2VybWl0IDcuMCBmdWxsIGJ1aWxkcyBmb3Igb2xkIEJTRHMgZmFpbCB3 aXRoCi0jICAgICAidG9vIG1hbnkgZGVmaW5lcyIgaW4gQ1BQLCBldmVuIG9uIGJpZyBhcmNoaXRl Y3R1cmVzIGxpa2UgVkFYLiAgVGhpcwotIyAgICAgY2FuIGJlIHdvcmtlZCBhcm91bmQgd2l0aCBh IGNsZXZlciBydXNlLiAgU2VlIGNvbW1lbnRzIGF0IHRhcmdldC4KLSMgPyBmb3IgQmVya2VsZXkg VW5peCA0LjMsIGNvbW1hbmQtbGluZSBvbmx5LCAibWFrZSBic2RtIi4KLSMgPyBmb3IgQmVya2Vs ZXkgVW5peCA0LjMtVGFob2UsIHNhbWUgYXMgNC4zIEJTRAotIyA/IGZvciBCZXJrZWxleSBVbml4 IDQuMy1SZW5vLCAibWFrZSBic2Q0MyIgb3IgIm1ha2UgYnNkNDQiIG9yICJtYWtlIGJzZDQ0YyIK LSMgPyBmb3IgQmVya2VsZXkgVW5peCA0LjMtQ2Fyc29uIENpdHksICJtYWtlIGJzZDQ0IiBvciAi bWFrZSBic2Q0NGMiCi0jID8gZm9yIEJlcmtlbGV5IFVuaXggNC40LU5ldHdvcmtpbmcvMiBvciAt QWxwaGEsICJtYWtlIGJzZDQ0IiBvciAibWFrZSBic2Q0NGMiCi0jID8gZm9yIEJlcmtlbGV5IFVu aXggNC40LCAibWFrZSBic2Q0NCIgb3IgIm1ha2UgYnNkNDRjIgotIyA/IGZvciBCZXJrZWxleSBV bml4IDQuNC1MaXRlLCAibWFrZSBic2Q0NCIgb3IgIm1ha2UgYnNkNDRjIgotIyA/IGZvciBCdWxs IERQWC8yIHdpdGggQk9TL1gsICJtYWtlIGJ1bGxkcHgyIgotIyA/IGZvciBDYWRtdXMsICJtYWtl IHN5czMiCi0jICAgZm9yIENhbGRlcmEsIHNlZSBTQ08sIExpbnV4LgotIyA/IGZvciBDYWxsYW4g VW5pc3RhciwgIm1ha2Ugc3lzMyIKLSMgPyBmb3IgQ0RDIFZYL1ZFIDUuMi4xIFN5c3RlbSBWIGVt dWxhdGlvbiwgIm1ha2Ugdnh2ZSIKLSMgPyBmb3IgQ2hhcmxlcyBSaXZlciBEYXRhIFN5c3RlbXMg VW5pdmVyc2UgNjgweDAgd2l0aCBVTk9TIDkuMiwgbWF5YmUKLSMgICAgIGFsc28gb3RoZXIgVU5P UyB2ZXJzaW9ucywgIm1ha2UgY3JkcyIKLSMgPyBmb3IgQ0lFIFN5c3RlbXMgNjgwLzIwIHdpdGgg UmVndWx1cywgIm1ha2UgY2llIgotIyA/IGZvciBDb21tb2RvcmUgQW1pZ2EgMzAwMFVYIFN5cyBW IFI0LCAibWFrZSBzeXM1cjRzeCIKLSMgPyBmb3IgQ29tbW9kb3JlIEFtaWdhIDMwMDBVWCBTeXMg ViBSNCBhbmQgVENQL0lQLCAibWFrZSBzdnI0YW1pZ2FuZXQiCi0jID8gZm9yIENvbW1vZG9yZSBB bWlnYSB3aXRoIE1pbml4IDEuNS4xMCwgIm1ha2UgbWluaXg2OGsiIG9mICJtYWtlIG1pbml4YzY4 IgotIyA/IGZvciBDb25jdXJyZW50L01hc3Njb21wIHdpdGggUlRVIDQuMCBvciBsYXRlciwgQlNE IGVudmlyb25tZW50LCAibWFrZQotIyAgICAgcnR1YnNkIiwgIm1ha2UgcnR1YnNkMiIsICJtYWtl IHJ0dWJzZDMiIChkZXBlbmRpbmcgb24gd2hlcmUgbmRpci5oCi0jICAgICBpcyBzdG9yZWQsIHNl ZSBlbnRyaWVzIGJlbG93KS4KLSMgPyBmb3IgQ29uY3VycmVudC9NYXNzY29tcCB3aXRoIFJUVSA0 LjAgb3IgbGF0ZXIsIFN5c3RlbSBWIFIyLCAibWFrZSBydHVzNSIKLSMgPyBmb3IgQ29uY3VycmVu dCAoUGVya2luLUVsbWVyKSAzMjAwIHNlcmllcywgIm1ha2Ugc3lzNSIuCi0jID8gZm9yIENvbmN1 cnJlbnQgKFBlcmtpbi1FbG1lcikgMzIwMCBzZXJpZXMgd2l0aCA8ZGlyZW50Lmg+LCAibWFrZSBj Y29wMSIKLSMgPyBmb3IgQ29uY3VycmVudCBQb3dlck1BWCBPUyBTVlI0LCAibWFrZSBwb3dlcm1h eCIKLSMgPyBmb3IgQ29uc2Vuc3lzIFVOSVggU1YvMzg2IFI0VjMsICJtYWtlIHN5czVyNHN4dGNw YyIgb3IgIm1ha2Ugc3lzNXI0c3giCi0jID8gZm9yIENvbnZlcmdlbnQgd2l0aCBDVElYIFN5cyBW IFIyLCAibWFrZSBzeXM1IgotIyA/IGZvciBDb252ZXJnZW50IHdpdGggQ1RJWCA2LjQuMSwgIm1h a2UgY3RpeCIKLSMgPyBmb3IgQ29udmV4IEMxLCAibWFrZSBjb252ZXgiCi0jID8gZm9yIENvbnZl eCBDMjEwIHdpdGggQ29udmV4L09TIDgsICJtYWtlIGNvbnZleDgiCi0jID8gZm9yIENvbnZleCBD MiB3aXRoIENvbnZleC9PUyA5LjEsICJtYWtlIGNvbnZleDkiCi0jID8gZm9yIENvbnZleCBDMiB3 aXRoIENvbnZleC9PUyAxMC4xIGFuZCBnY2MgMi54LCAibWFrZSBjb252ZXgxMGdjYyIKLSMgPyBm b3IgQ3JheSBSZXNlYXJjaCBYL01QIG9yIFlNUCBvciBDOTAgd2l0aCBVTklDT1MgNi54IChTeXN0 ZW0gViBSMyksCi0jCSJtYWtlIGNyYXkiCi0jID8gZm9yIENyYXkgUmVzZWFyY2ggWC9NUCBvciBZ TVAgb3IgQzkwIHdpdGggVU5JQ09TIDcueCAoU3lzdGVtIFYgUjQpLAotIwkibWFrZSBjcmF5Igot IyA/IGZvciBDcmF5IFJlc2VhcmNoIFgvTVAgb3IgWU1QIG9yIEM5MCB3aXRoIFVOSUNPUyA4LjAg QWxwaGEsICJtYWtlIGNyYXk4IgotIyA/IGZvciBDcmF5IFJlc2VhcmNoIFgvTVAgb3IgWS1NUCBv ciBDOTAgd2l0aCBVTklDT1MgOS4wLCAibWFrZSBjcmF5OSIKLSMgPyBmb3IgQ3JheSBDb21wdXRl ciBDcmF5LTIgb3IgQ3JheTMgd2l0aCBDU09TLCAibWFrZSBjcmF5Y3NvcyIKLSMgPyBmb3IgQ3li ZXIgOTEwIChTaWxpY29uLUdyYXBoaWNzIElyaXMpIHdpdGggSXJpeCAzLjMsICJpcml4MzMiCi0j ID8gZm9yIERhdGEgR2VuZXJhbCBBVmlpT04gd2l0aCBERy9VWCA1LjQgYmVmb3JlIFIzLjAwLCAi bWFrZSBkZ3V4NTQwIgotIyAgICAgb3IgIm1ha2UgZGd1eDU0MGMiIChjb21waWxlIGNrd2FydCBz ZXBhcmF0ZWx5IGlmIG5lY2Vzc2FyeSkKLSMgPyBmb3IgREcvVVggNS40IG9uIEFWaWlPTiBJbnRl bCBtb2RlbHMsICJtYWtlIGRndXg1NDBpIiBvciBkZ3V4NTQwaWMuCi0jID8gZm9yIERHL1VYIDUu NFI0LjExIG9uIEFWaWlPTiwgYWxsIG1vZGVscywgIm1ha2UgZGd1eDU0NDExIgotIyA/IGZvciBE Ry9VWCA1LjRSNC4yMCBvbiBBVmlpT04sIGFsbCBtb2RlbHMsICJtYWtlIGRndXg1NDQyMCIKLSMg PyBmb3IgRGF0YSBHZW5lcmFsIEFWaWlPTiB3aXRoIERHL1VYIDQuM3ggdXNpbmcgU3lzIFYtaXNt cywgIm1ha2UgZGd1eDQzMCIKLSMgPyBmb3IgRGF0YSBHZW5lcmFsIEFWaWlPTiB3aXRoIERHL1VY IDQuM3ggdXNpbmcgQlNELWlzbXMsICJtYWtlIGRndXg0MzBic2QiCi0jID8gZm9yIERhdGEgR2Vu ZXJhbCBBVmlpT04sIGVhcmxpZXIgVU5JWCB2ZXJzaW9ucywKLSMgICAgICJtYWtlIHN5czVyMyIg KG1heWJlIGNvbXBpbGUgY2t3YXJ0IHNlcGFyYXRlbHksIG9yICJ0b3VjaCBja2Nwcm8uYyIpCi0j ID8gZm9yIERhdGEgR2VuZXJhbCBNViBzeXN0ZW1zIHdpdGggREcvVVgsID8/PwotIyA/IGZvciBE YXRhIEdlbmVyYWwgTVYgc3lzdGVtcyB3aXRoIE1WL1VYLCB1c2UgQU9TL1ZTIEMtS2VybWl0IChD S0RLRVIuTUFLKQotIyA/IGZvciBEYXRhIEdlbmVyYWwgTVYgc3lzdGVtcyB3aXRoIEFPUy9WUywg dXNlIENLREtFUi5NQUsgKGxhc3QgPSBDLUsgNy4wKQotIyA/IGZvciBERUMgUERQLTExIHdpdGgg QmVya2VsZXkgVU5JWCAyLngsIHNlZSBCZXJrZWxleSBVTklYIDIueC4KLSMgPyBmb3IgREVDIFBE UC0xMSB3aXRoIE1pbmktVU5JWCAoQmVsbCA2dGggRWRpdGlvbiBmb3IgUERQLTExIHdpdGggbm8g TU1VKSwKLSMgICAgIHByb2JhYmx5IG5vIHdheSB0byBmaXQgQy1LZXJtaXQgd2l0aG91dCBJJkQg c3BhY2UuCi0jID8gZm9yIERFQyBQRFAtMTEgd2l0aCBVbHRyaXgtMTEgMy54LCA/Pz8gKHByb2Jh Ymx5IG5lZWRzIG92ZXJsYXlzKQotIyA/IGZvciBERUMgVkFYIHdpdGggVWx0cml4IDEueCAibWFr ZSBic2QiCi0jID8gZm9yIERFQyBWQVggd2l0aCBVbHRyaXggMi54ICJtYWtlIHVsdHJpeDJ4Igot IyA/IGZvciBERUMgVkFYIG9yIERFQ3N0YXRpb24gd2l0aCBVbHRyaXggMy4wLCAzLjEsICJtYWtl IHVsdHJpeDN4IgotIyA/IGZvciBERUNzdGF0aW9uIG9yIFZBWCB3aXRoIFVsdHJpeCA0LjAgb3Ig NC4xLCAibWFrZSB1bHRyaXg0MCIKLSMgPyBmb3IgREVDc3RhdGlvbiBvciBWQVggd2l0aCBVbHRy aXggNC4yLCAibWFrZSB1bHRyaXg0MiIgb3IgIm1ha2UgdWx0cml4NDJjIgotIyA/IGZvciBERUNz dGF0aW9uIG9yIFZBWCB3aXRoIFVsdHJpeCA0LngsIFBPU0lYIHdvcmxkLCAibWFrZSBwb3NpeCIK LSMgPyBmb3IgREVDc3RhdGlvbiBvciBWQVggd2l0aCBVbHRyaXggNC4zLCAibWFrZSB1bHRyaXg0 MyIuCi0jID8gZm9yIERFQ3N0YXRpb24gb3IgVkFYIHdpdGggVWx0cml4IDQuNCwgIm1ha2UgdWx0 cml4NDQiLgotIyA/IGZvciBERUNzdGF0aW9uIDUwMDAvNTAsIC8xNTAgb3IgLzI2MCAoUjR4MDAg TUlQUyBDUFUpLCBVbHRyaXggNC4zQSBvciBsYXRlcgotIyAgICAgIm1ha2UgdWx0cml4NDMtbWlw czMiIG9yICJtYWtlIHVsdHJpeDQzYy1taXBzMyIKLSMgPyBmb3IgREVDc3RhdGlvbiAoTUlQUykg d2l0aCBCZXJrZWxleSBTcHJpdGUsICJtYWtlIGJzZDQ0Ij8KLSMgPyBmb3IgREVDc3RhdGlvbiAo TUlQUykgd2l0aCBPU0YvMSBWMS4wIHRvIDEuMywgIm1ha2UgZGVjLW9zZiIKLSMgPyBmb3IgREVD IEFscGhhIHdpdGggT1NGLzEgMS4wIHRvIDEuMywgIm1ha2UgZGVjLW9zZiIKLSMgPyBmb3IgREVD IFBDIDQ4NiB3aXRoIE9TRi8xLCAibWFrZSBkZWMtb3NmIgotIyA/IGZvciBERUMgQWxwaGEgd2l0 aCBPU0YvMSAyLngsICJtYWtlIGRlYy1vc2YyMCIKLSMgPyBmb3IgREVDIEFscGhhIHdpdGggT1NG LzEgMy4wLCAibWFrZSBkZWMtb3NmMzAiCi0jID8gZm9yIERFQyBBbHBoYSB3aXRoIERpZ2l0YWwg VU5JWCAzLjIsICJtYWtlIGR1MzIiCi0jID8gZm9yIERFQyBBbHBoYSB3aXRoIERpZ2l0YWwgVU5J WCA0LjAtNC4wRCwgIm1ha2UgZHU0MCIgb3IgIm1ha2UgZHU0MGdjYyIKLSMgPyBmb3IgREVDIEFs cGhhIHdpdGggRGlnaXRhbCBVTklYIDQuMEUgb3IgaGlnaGVyLCBzZWUgVHJ1NjQuCi0jICsgZm9y IERFQyBBbHBoYSB3aXRoIGFueSB2ZXJzaW9uIG9mIERVIG9yIE9TRi8xLCAibWFrZSBkZWMtb3Nm MSIKLSMgLSBmb3IgREVDIFByby0zNTAgd2l0aCBQcm8vVmVuaXggVjEueCwgIm1ha2UgcHJvdngx IiAodmVyc2lvbiA1QSBpcyB0b28gYmlnKQotIyA/IGZvciBERUMgUHJvLTM4MCB3aXRoIFByby9W ZW5peCBWMi4wIChTeXMgViksICJtYWtlIHN5czMiIG9yICJtYWtlIHN5czNuaWQiCi0jID8gZm9y IERFQyBQcm8tMzgwIHdpdGggMi45LCAyLjEwLCBvciAyLjExIEJTRCwgIm1ha2UgYnNkMjkiIG9y ICJtYWtlIGJzZDIxMCIKLSMgICBmb3IgREVDIFBEUC0xMSB3aXRoIDIueEJTRCAodXNlIHNlcGFy YXRlIG1ha2VmaWxlIGNrdWJzMi5tYWspCi0jID8gZm9yIERlbGwgVU5JWCBJc3N1ZSAyLnggKD0g VVNMIFN5cyBWLzM4NiBSNC54ICsgZml4ZXMpLCAibWFrZSBkZWxsc3lzNXI0IgotIyAgICAgb3Ig Im1ha2UgZGVsbHN5czVyNGMiIChsYXN0IHRlc3RlZCBpbiBDLUtlcm1pdCA1QSkuCi0jID8gZm9y IERJQUIgRFM5MCB3aXRoIEROSVggKGFueSB2ZXJzaW9uKSBjcmVhdGUgYW4gZW1wdHkgPHN5cy9m aWxlLmg+IGlmCi0jICAgICB0aGlzIGZpbGUgZG9lcyBub3QgYWxyZWFkeSBleGlzdCAob3IgYWRk IC1ETk9GSUxFSCB0byB0aGUgbWFrZSBlbnRyeSkuCi0jID8gZm9yIERJQUIgRFM5MCB3aXRoIERO SVggNS4yIChTeXMgVi4yKSBvciBlYXJsaWVyLCAibWFrZSBkbml4IiwKLSMgICAgICJtYWtlIGRu aXhuZCIsIG9yICh0byBhZGQgY3Vyc2VzIGFuZCBUQ1AvSVApICJtYWtlIGRuaXhuZXRjIiwKLSMg PyBmb3IgRElBQiBEUzkwIHdpdGggRE5JWCA1LjMgKFN5cyBWLjMpLCAibWFrZSBkbml4NXIzIgot IyA/IGZvciBESUFCIERTOTAgd2l0aCBETklYIDUuMyAoU3lzIFYuMykgYW5kIFRDUC9JUCwgIm1h a2UgZG5peDVyM25ldCIKLSMgPyBmb3IgRElBQiBEUzkwIHdpdGggRE5JWCA1LjMgMi4yIChTeXMg Vi4zKSwgQU5TSSBDLCAibWFrZSBkbml4NXIzYW5zaSIKLSMgICAgIG9yLCB0byBpbmNsdWRlIFRD UC9JUCwgIm1ha2UgZG5peDVyM2Fuc2luZXQiLAotIyAgICAgYnV0IHlvdSBoYXZlIHRvIGZpeCBh IGJ1ZyBpbiAvdXNyL2luY2x1ZGUvc3RkbGliLmggZmlyc3Q6Ci0jICAgICBjaGFuZ2UgImV4dGVy biB2b2lkIGZyZWUoY2hhciAqc3RyKTsiIHRvICJleHRlcm4gdm9pZCBmcmVlKHZvaWQgKnN0cik7 IgotIyA/IGZvciBEb2xwaGluIFNlcnZlciBUZWNobm9sb2d5IFRyaXRvbiA4OC8xNyB3aXRoIFNW Lzg4IFIzLjIsICJtYWtlIHN2ODhyMzIiCi0jID8gZm9yIEVuY29yZSBNdWx0aW1heCAzMTAsIDUx MCB3aXRoIFVtYXggNC4yLCAibWFrZSB1bWF4NDIiCi0jID8gZm9yIEVuY29yZSBNdWx0aW1heCAz MTAsIDUxMCB3aXRoIFVtYXggNC4zLCAibWFrZSB1bWF4NDMiCi0jID8gZm9yIEVuY29yZSBNdWx0 aW1heCAzMTAsIDUxMCB3aXRoIFVtYXggViAyLjIsIHVzZSBCZXJrZWxleSBjYywgIm1ha2UgYnNk IgotIyA/IGZvciBFbmNvcmUgODhLIHdpdGggVW1heCBWIDUuMiwgIm1ha2UgZW5jb3JlODhrIgot IyA/IGZvciBFU0lYIFN5c3RlbSBWIFI0LjAuMyBvciA0LjA0IHdpdGggVENQL0lQIHN1cHBvcnQs ICJtYWtlIGVzaXhyNCIKLSMgICAgIE5PVEU6IFlvdSBjYW4gYWxzbyBidWlsZCBvbiBVbml4d2Fy ZSAyLnggd2l0aCAibWFrZSBlc2l4cjQiLCBhbmQgcnVuCi0jICAgICBvbiBFU0lYLCBidXQgdGhl cmUgeW91IG11c3QgZmlyc3Q6Ci0jICAgICAgIGxuIC91c3IvbGliL2xpYnNvY2tldC5zbyAvdXNy L2xpYi9saWJzb2NrZXQuc28uMQotIyAgICAgICBsbiAvdXNyL2xpYi9saWJuc2wuc28gL3Vzci9s aWIvbGlibnNsLnNvLjEKLSMgICAgIChUaGlzIHdvcmtlZCBmb3IgQy1LZXJtaXQgNi4wIGJ1dCBk b2VzIG5vdCB3b3JrIGZvciA3LjApCi0jICAgICAoQnV0IHlvdSBjYW4gcHJvYmFibHkgc3RpbGwg YnVpbGQgYSBub24tbmV0d29ya2luZyB2ZXJzaW9uIHRoaXMgd2F5KQotIyA/IGZvciBFdmVyZXgg U1RFUCAzODYvMjUgUmV2IEcgd2l0aCBFU0lYIFN5cyBWIFIzLjJELCAibWFrZSBzeXM1cjMiCi0j ID8gZm9yIEZvcnR1bmUgMzI6MTYsIEZvcjpQcm8gMS44LCAibWFrZSBmdDE4IgotIyA/IGZvciBG b3J0dW5lIDMyOjE2LCBGb3I6UHJvIDIuMSwgIm1ha2UgZnQyMSIKLSMgPyBmb3IgRlBTIDUwMCB3 aXRoIEZQWCA0LjEsICJtYWRlIGJzZCIKLSMgPyBmb3IgRnJlZUJTRCAxLjAsICJtYWtlIGZyZWVi c2QxIgotIyA/IGZvciBGcmVlQlNEIDIueCwgIm1ha2UgZnJlZWJzZDIiIChuY3Vyc2VzKSBvciAi bWFrZSBmcmVlYnNkMmMiIChjdXJzZXMpCi0jID8gZm9yIEZyZWVCU0QgMy54LCAibWFrZSBmcmVl YnNkMyIgKG5jdXJzZXMpIG9yICJtYWtlIGZyZWVic2QzYyIgKGN1cnNlcykKLSMgPyBmb3IgRnJl ZUJTRCA0LjAsICJtYWtlIGZyZWVic2Q0MCIKLSMgPyBmb3IgRnJlZUJTRCA0LjEgb3IgbGF0ZXIs ICJtYWtlIGZyZWVic2QiCi0jICsgTk9URTogSnVzdCB1c2UgIm1ha2UgZnJlZWJzZCIgZm9yIGFu eSByZWFzb25hYmx5IHJlY2VudCBGcmVlQlNEIHZlcnNpb24uCi0jID8gZm9yIEhhcnJpcyBIQ1gt MjkwMCwgIm1ha2Ugc3lzNXIzIgotIyA/IGZvciBIYXJyaXMgTmlnaHQgSGF3ayA4OEsgb3IgNjhL IHdpdGggQ1gvVVggcHJlLTYuMSwgIm1ha2Ugc3lzNXIzIgotIyA/IGZvciBIYXJyaXMgTmlnaHQg SGF3ayA4OEsgb3IgNjhLIHdpdGggQ1gvVVggNi4xIG9yIGxhdGVyLCAibWFrZSBjeF91eCIKLSMg PyBmb3IgSGV1cmlrb24sICJtYWtlIHN5czMiCi0jID8gZm9yIEhQLTMwMDAsIE1QRS9peCwgIm1h a2UgcG9zaXgiPwotIyA/IGZvciBIUC05MDAwIFNlcmllcyAzMDAgd2l0aCA0LjRCU0QsICJtYWtl IGJzZDQ0IgotCi0jIE5PVEU6IE1vc3Qgb2YgdGhlIEhQLVVYIHRhcmdldHMgd2VyZSB0ZXN0ZWQg c3VjY2Vzc2Z1bGx5IGluIDIwMTAuCi0jIFZlcmlmaWNhdGlvbiBuZWVkZWQgZm9yIEMtS2VybWl0 IDkuMCBCZXRhLjAxLi4uCi0KLSMgPyBmb3IgSFAtOTAwMCBTZXJpZXMgNTAwLCBIUC1VWCA1LjIx IGFuZCBubyBuZXR3b3JraW5nICJtYWtlIGhwdXgwNTAwIgotIyA/IGZvciBIUC05MDAwIFNlcmll cyA1MDAsIEhQLVVYIDUuMjEgd2l0aCBXSU4vVENQIDEuMiAibWFrZSBocHV4MDUwMHdpbnRjcCIK LSMgPyBmb3IgSFAtOTAwMCBTZXJpZXMsIEhQLVVYIDYuNSwgd2l0aG91dCBsb25nIGZpbGVuYW1l cywKLSMgICAgICJtYWtlIGhwdXgwNjUwIiwgIm1ha2UgaHB1eDA2NTBjIiBvciAibWFrZSBocHV4 MDY1MHRjcGMiCi0jID8gZm9yIEhQLTkwMDAgU2VyaWVzLCBIUC1VWCA3LjAgb3IgbGF0ZXIgbm8g bG9uZyBmaWxlbmFtZXMsICJtYWtlIGhwdXgwNzAwc2YiCi0jICAgICBvciAodG8gaW5jbHVkZSB0 Y3AvaXAsIGN1cnNlcywgZXRjKSAibWFrZSBocHV4MDcwMHNmdGNwYyIKLSMgPyBmb3IgSFAtOTAw MCBTZXJpZXMgd2l0aCBIUC1VWCA3LjAsIFRDUC9JUCxsb25nIGZpbGVuYW1lcywibWFrZSBocHV4 MDcwMGxmbiIKLSMgPyBmb3IgSFAtOTAwMCAzMDAvNDAwIFNlcmllcyAoNjgweDApIHdpdGggSFAt VVggOC4wLCBUQ1AvSVAsICJtYWtlIGhwdXgwODAwIgotIyAgICAgIG9yICJtYWtlIGhwdXgwODAw YyIKLSMgPyBmb3IgSFAtOTAwMCA3MDAvODAwIFNlcmllcyAoUEEtUklTQyksIEhQLVVYIDguMCwg VENQL0lQLCAibWFrZSBocHV4MDgwMHBhIgotIyAgICAgIG9yICJtYWtlIGhwdXgwODAwcGFjIgot IyA/IGZvciBIUC05MDAwIFNlcmllcyB3aXRoIEhQLVVYIDguMCwgbm8gVENQL0lQLCBsb25nIGZp bGVuYW1lcywKLSMgICAgICAibWFrZSBocHV4MDgwMG5vdGNwIgotIyA/IGZvciBIUC05MDAwIFNl cmllcywgSFAtVVggOS4wIC0gOS4xMCwgVENQL0lQLCBjdXJzZXMsIHJlc3RyaWN0ZWQgY29tcGls ZXIKLSMgICAgIChubyBvcHRpbWl6YXRpb24sIG5vIEFOU0kpLCBhbGwgbW9kZWxzLCAibWFrZSBo cHV4MDkwMCIuICBSZWFkIHRoZQotIyAgICAgaHB1eDA5MDAgZW50cnkgYmVsb3cgZm9yIG1vcmUg aW5mby4KLSMgPyBmb3IgSFAtOTAwMCA3MDAgYW5kIDgwMCBTZXJpZXMsIEhQLVVYIDkueCwgVENQ L0lQLCBjdXJzZXMsCi0jICAgICBIUCBvcHRpbWl6aW5nIEFOU0kgQyBjb21waWxlciwgIm1ha2Ug aHB1eDA5MDBvNzAwIi4KLSMgPyBmb3IgSFAtOTAwMCB3aXRoIE1vdG9yb2xhIENQVXMsIEhQLVVY IDkueCwgVENQL0lQLCBjdXJzZXMsCi0jICAgICBIUCBvcHRpbWl6aW5nIEFOU0kgQyBjb21waWxl ciwgIm1ha2UgaHB1eDA5MDBtb3QiLgotIyA/IGZvciBIUC05MDAwIG9uIG90aGVyIENQVXMsIEhQ LVVYIDkueCwgVENQL0lQLCBjdXJzZXMsCi0jICAgICBIUCBvcHRpbWl6aW5nIEFOU0kgQyBjb21w aWxlciwgIm1ha2UgaHB1eDA5MDBvIi4KLSMgPyBmb3IgSFAtOTAwMCBzZXJpZXMsIEhQLVVYIDku eCwgVENQL0lQLCBjdXJzZXMsIGdjYywgYWxsIG1vZGVscywKLSMgICAgICJtYWtlIGhwdXgwOTAw Z2NjIgotIyA/IGZvciBIUC05MDAwIDcwMC84MDAgU2VyaWVzLCBIUC1VWCAxMC4wMCwxMC4wMSwx MC4xMCwxMC4yMCwxMC4zMCwgVENQL0lQLAotIyAgICAgY3Vyc2VzLCByZXN0cmljdGVkIGNvbXBp bGVyIChubyBvcHRpbWl6YXRpb24sIG5vIEFOU0kpICJtYWtlIGhwdXgxMDAwIi4KLSMgPyBmb3Ig SFAtOTAwMCA3MDAvODAwIFNlcmllcywgSFAtVVggMTAuMDAsMTAuMDEsMTAuMTAsMTAuMjAsMTAu MzAsIFRDUC9JUCwKLSMgICAgIGN1cnNlcywgSFAgQU5TSS9vcHRpbWl6aW5nIGNvbXBpbGVyICJt YWtlIGhwdXgxMDAwbyIgb3IgIm1ha2UgaHB1eDEwMDBvKyIKLSMgPyBmb3IgSFAtOTAwMCBIUC1V WCAxMC4wMCBvciBsYXRlciB3aXRoIGdjYywgIm1ha2UgaHB1eDEwMDBnY2MiCi0jID8gZm9yIFRy dXN0ZWQgSFAtVVggMTAueHggIm1ha2UgaHB1eDEwMDB0IiwgIm1ha2UgaHB1eDEwMDB0byIsCi0j ICAgICBvciBtYWtlIGhwdXgxMDAwdG8rIgotIyA/IGZvciBIUC05MDAwIDcwMC84MDAgU2VyaWVz LCBIUC1VWCAxMS4wMCxUQ1AvSVAsY3Vyc2VzLCByZXN0cmljdGVkIGNvbXBpbGVyCi0jICAgICAo bm8gb3B0aW1pemF0aW9uLCBubyBBTlNJKSAibWFrZSBocHV4MTEwMCIuCi0jID8gZm9yIEhQLTkw MDAgNzAwLzgwMCBTZXJpZXMsIEhQLVVYIDExLjAwLFRDUC9JUCxjdXJzZXMsIHJlc3RyaWN0ZWQg Y29tcGlsZXIKLSMgICAgIEhQIEFOU0kvb3B0aW1pemluZyBjb21waWxlciAibWFrZSBocHV4MTEw MG8iIG9yICJtYWtlIGhwdXgxMTAwbysiCi0jID8gZm9yIFRydXN0ZWQgSFAtVVggMTEueHggIm1h a2UgaHB1eDExMDB0IiwgIm1ha2UgaHB1eDExMDB0byIsCi0jICAgICBtYWtlIGhwdXgxMTAwdG8r IgotIyA/IGZvciBIUC05MDAwIFBBLVJJU0MgbW9kZWxzIHdpdGggTmVYVFNURVAgMy4zLCAibWFr ZSBuZXh0cXVhZGZhdCIuCi0jID8gZm9yIEhQLTkwMDAgUEEtUklTQyBtb2RlbHMgd2l0aCBPUEVO U1RFUC9NYWNoIDQuMSwgIm1ha2UgbmV4dHF1YWRmYXQiLgotIyA/IGZvciBJQk0gMzcwIFNlcmll cyB3aXRoIElYLzM3MCwgIm1ha2UgaXgzNzAiCi0jID8gZm9yIElCTSAzNzAgU2VyaWVzIHdpdGgg QUlYLzM3MCAxLjIsICJtYWtlIGFpeDM3MCIKLSMgPyBmb3IgSUJNIDM3MCBTZXJpZXMgd2l0aCBB SVgvMzcwIDMuMCwgIm1ha2UgYWl4MzcwIgotIyA/IGZvciBJQk0gMzcwIFNlcmllcyB3aXRoIEFJ WC9FU0EgMi4xLCAibWFrZSBhaXhlc2EiCi0jIC0gZm9yIElCTSBQQy9BVCAyODYgJiBjb21wYXRp YmxlcyB3aXRoIE1hcmsgV2lsbGlhbXMgQ29oZXJlbnQgT1MsCi0jICAgICBjb21tYW5kLWxpbmUt b25seSB2ZXJzaW9uLCAibWFrZSBjb2hlcmVudCIgKHZlcnNpb24gNUEgJiBsYXRlciB0b28gYmln KQotIyA/IGZvciBJQk0gUEMgMzg2ICYgY29tcGF0aWJsZXMgd2l0aCBNYXJrIFdpbGxpYW1zIENv aGVyZW50IE9TLAotIyAgICAgbWluaW11bSBpbnRlcmFjdGl2ZSB2ZXJzaW9uLCAibWFrZSBjb2hl cmVudG1pIgotIyA/IGZvciBJQk0gUEMgMzg2ICYgY29tcGF0aWJsZXMgd2l0aCBNYXJrIFdpbGxp YW1zIENvaGVyZW50IE9TLAotIyAgICAgZnVsbCBpbnRlcmFjdGl2ZSB2ZXJzaW9uLCBwcmlvciB0 byB2NC4yLCAibWFrZSBjb2hlcmVudG1heCIKLSMgPyBmb3IgSUJNIFBDIDM4NiAmIGNvbXBhdGli bGVzIHdpdGggTWFyayBXaWxsaWFtcyBDb2hlcmVudCBPUyA0LjIsCi0jICAgICAibWFrZSBjb2hl cmVudDQyIgotIyA/IGZvciBJQk0gUEMgMzg2ICYgY29tcGF0aWJsZXMgd2l0aCBMeW54T1MgMi4w IG9yIDIuMSwgIm1ha2UgbHlueDIxIgotIyA/IGZvciBJQk0gUEMgMzg2ICYgY29tcGF0aWJsZXMg d2l0aCBMeW54T1MgMi4yLCAibWFrZSBseW54IgotIyAtIGZvciBJQk0gUEMvQVQgJiBjb21wYXRp YmxlcyB3aXRoIG9yaWdpbmFsIE1JTklYLCAibWFrZSBtaW5peCIgKHRvbyBiaWcpCi0jID8gZm9y IElCTSBQQyBmYW1pbHksIDM4Ni1iYXNlZCwgd2l0aCBNSU5JWC8zODYgMS41LCAibWFrZSBtaW5p eDM4NiIKLSMgICAgIG9yIGlmIHlvdSBoYXZlIEdOVSBDQywgIm1ha2UgbWluaXgzODZnY2MiCi0j ID8gZm9yIElCTSBQQyBmYW1pbHksIDM4Ni1iYXNlZCwgd2l0aCBNSU5JWCAyLjAsICJtYWtlIG1p bml4MjAiCi0jID8gZm9yIElCTSBQQyBmYW1pbHksIDM4Ni1iYXNlZCwgd2l0aCBNSU5JWCAzLjAs ICJtYWtlIG1pbml4MyIKLSMgKyBmb3IgSUJNIFBDIGZhbWlseSwgMzg2LWJhc2VkLCB3aXRoIE1J TklYIDMuMCwgIm1ha2UgbWluaXgzMTUiCi0jID8gZm9yIElCTSBQUy8yIHdpdGggUFMvMiBBSVgg MS4wLCAxLjEsIG9yIDEuMiwgIm1ha2UgcHMyYWl4IiBvciBwczJhaXhuZXRjLgotIyA/IGZvciBJ Qk0gUFMvMiB3aXRoIFBTLzIgQUlYIDEuMywgIm1ha2UgcHMyYWl4MyIKLSMgPyBmb3IgSUJNIFJJ U0MgU3lzdGVtLzYwMDAgd2l0aCBBSVggMy4wLCAibWFrZSBhaXgzMCIKLSMgPyBmb3IgSUJNIFJJ U0MgU3lzdGVtLzYwMDAgd2l0aCBBSVggMy4xLngsICJtYWtlIGFpeDMxIgotIyA/IGZvciBJQk0g UklTQyBTeXN0ZW0vNjAwMCB3aXRoIEFJWCAzLjIuMCB0aHJ1IDMuMi41LCAibWFrZSBhaXgzMiIK LSMgPyBmb3IgSUJNIFJTLzYwMDAgb3IgUG93ZXIgU2VyaWVzIHdpdGggQUlYIDQuMS54LCAibWFr ZSBhaXg0MSIKLSMgPyBmb3IgSUJNIFJTLzYwMDAgb3IgUG93ZXIgU2VyaWVzIHdpdGggQUlYIDQu MS54IHdpdGggZ2NjLCAibWFrZSBhaXg0MWciCi0jID8gZm9yIElCTSBSUy82MDAwIG9yIFBvd2Vy IFNlcmllcyB3aXRoIEFJWCA0LjEgd2l0aCBYLjI1LCAibWFrZSBhaXg0MXgyNSIKLSMgPyBmb3Ig SUJNIFJTLzYwMDAgb3IgUG93ZXIgU2VyaWVzIHdpdGggQUlYIDQuMiBvciBsYXRlcjogIm1ha2Ug YWl4IgotIyAgKHRoZSBmb2xsb3dpbmcgIm1ha2UgYWl4bm4iIHRhcmdldHMgYXJlIG5vIGxvbmdl ciBuZWNlc3NhcnkgZXhjZXB0IGZvciBnY2MpCi0jID8gZm9yIElCTSBSUy82MDAwIG9yIFBvd2Vy IFNlcmllcyB3aXRoIEFJWCA0LjIsICJtYWtlIGFpeDQyIgotIyA/IGZvciBJQk0gUlMvNjAwMCBv ciBQb3dlciBTZXJpZXMgd2l0aCBBSVggNC4zLCAibWFrZSBhaXg0MyIgKG9yIGFpeDQzZ2NjKQot IyA/IGZvciBJQk0gUlMvNjAwMCBvciBQb3dlciBTZXJpZXMgd2l0aCBBSVggNC40LCAibWFrZSBh aXg0NCIgKG9yIGFpeDQ0Z2NjKQotIyA/IGZvciBJQk0gUlMvNjAwMCBvciBQb3dlciBTZXJpZXMg d2l0aCBBSVggNC41LCAibWFrZSBhaXg0NSIgKG9yIGFpeDQ1Z2NjKQotIyA/IGZvciBJQk0gUlMv NjAwMCBvciBQb3dlciBTZXJpZXMgd2l0aCBBSVggNS4wLCAibWFrZSBhaXg1MCIgKG9yIGFpeDUw Z2NjKQotIyA/IGZvciBJQk0gUlMvNjAwMCBvciBQb3dlciBTZXJpZXMgd2l0aCBBSVggNS4xLCAi bWFrZSBhaXg1MSIgKG9yIGFpeDUxZ2NjKQotIyA/IGZvciBJQk0gUlMvNjAwMCBvciBQb3dlciBT ZXJpZXMgd2l0aCBBSVggNS4yLCAibWFrZSBhaXg1MiIgKG9yIGFpeDUyZ2NjKQotIyA/IGZvciBJ Qk0gUlMvNjAwMCBvciBQb3dlciBTZXJpZXMgd2l0aCBBSVggNS4zLCAibWFrZSBhaXg1MyIgKG9y IGFpeDUzZ2NjKQotIyA/IGZvciBJQk0gUlMvNjAwMCBvciBQb3dlciBTZXJpZXMgd2l0aCBBSVgg Ni4xLCAibWFrZSBhaXg2MSIgKG9yIGFpeDUzZ2NjKQotIyA/IGZvciBJQk0gUlQgUEMgd2l0aCBB SVggMi4xLCAibWFrZSBzeXMzIgotIyA/IGZvciBJQk0gUlQgUEMgd2l0aCBBSVggMi4yLjEsICJt YWtlIHJ0YWl4IiBvciAibWFrZSBydGFpeGMiCi0jID8gZm9yIElCTSBSVCBQQyB3aXRoIEFDSVMg NC4yLCAibWFrZSBic2QiCi0jID8gZm9yIElCTSBSVCBQQyB3aXRoIEFDSVMgNC4zLCAibWFrZSBy dGFjaXMiIG9yICJtYWtlIGJzZCBLRkxBR1M9LUROT0FOU0kiCi0jID8gZm9yIElCTSBSVCBQQyB3 aXRoIDQuM0JTRC9SZW5vLCAibWFrZSBic2Q0NCIgb3IgIm1ha2UgYnNkNDRjIgotIyA/IGZvciBJ Q0wgRFJTNDAwIG9yIDQwMEUsICJtYWtlIGljbHN5czVyMyIKLSMgPyBmb3IgSUNMIERSUzMwMDAg KDgwNDg2KSB3aXRoIERSUy9OWCwgIm1ha2UgaWNsc3lzNXI0XzQ4NiIKLSMgPyBmb3IgSUNMIERS UzYwMDAgKFNQQVJDKSB3aXRoIERSUy9OWCwgIm1ha2UgaWNsc3lzNXI0IgotIyA/IGZvciBJQ0wg RFJTNjAwMCAoU1BBUkMpIHdpdGggRFJTL05YIDQuMk1QIDdNUGx1cywgIm1ha2UgaWNsc3lzNXI0 bSsiCi0jID8gICAgIERpdHRvIGJ1dCB3aXRoIElLU0Qgc3VwcG9ydCBpbmNsdWRlZCwgIm1ha2Ug aWNsc3lzNXI0bStpa3NkIgotIyA/IGZvciBJbnRlZ3JhdGVkIFNvbHV0aW9ucyBJbmMgVjhTIFZN RSA2ODAyMCwgIm1ha2UgaXNpIgotIyA/IGZvciBJbnRlbCAzMDIgd2l0aCBCZWxsIFRlY2ggU3lz IFYvMzg2IFIzLjIsICJtYWtlIHN5czVyMyIKLSMgPyBmb3IgSW50ZWwgWGVuaXgvMjg2LCAibWFr ZSBzY28yODYiCi0jID8gZm9yIEludGVyYWN0aXZlIFN5c3RlbSBJSUkgKFBDL0lYKSwgIm1ha2Ug cGNpeCIgb3IgIm1ha2UgaXMzIgotIyA/IGZvciBJbnRlcmFjdGl2ZSBTeXN0ZW0gSUlJIChQQy9J WCkgd2l0aCBnY2MsICJtYWtlIGlzM2djYyIKLSMgPyBmb3IgSW50ZXJhY3RpdmUgMzg2L2l4IDEu MC42IHdpdGggVENQL0lQIG5ldHdvcmtpbmcsICJtYWtlIGlzNXIzbmV0MiIKLSMgPyBmb3IgSW50 ZXJhY3RpdmUgMzg2L2l4IDIuMC54LCAibWFrZSBpczVyMyIgb3IgKFBPU0lYKSAibWFrZSBpczVy M3AiCi0jID8gZm9yIEludGVyYWN0aXZlIDM4Ni9peCAyLjAueCB3aXRoIFRDUC9JUCBuZXR3b3Jr aW5nLCAibWFrZSBpczVyM25ldCIKLSMgICAgIG9yICJtYWtlIGlzNXIzbmV0MiIKLSMgPyBmb3Ig SW50ZXJhY3RpdmUgMzg2L2l4IDIuMi4xLCBqb2IgY29udHJvbCwgY3Vyc2VzLCBubyBuZXQsIGdj YywKLSMgICAgICJtYWtlIGlzNXIzZ2NjIgotIyA/IGZvciBJbnRlcmFjdGl2ZSBVTklYIFN5cyBW IFIzLjIgVjIuMiAtIDQuMCB3aXRob3V0IFRDUC9JUCwgIm1ha2UgaXM1cjNqYyIKLSMgPyBmb3Ig SW50ZXJhY3RpdmUgVU5JWCBTeXMgViBSMy4yIFYyLjIgLSA0LjAgd2l0aCBUQ1AvSVAsICJtYWtl IGlzNXIzbmV0amMiCi0jID8gZm9yIEludGVyZ3JhcGggQ2xpcHBlciwgIm1ha2UgY2xpeCIgb3Ig Im1ha2UgY2xpeG5ldCIKLSMgPyBmb3IgSm9saXggKHNlZSAzODZCU0QpCi0jICsgZm9yIExpbnV4 IDEuMiBhbmQgbGF0ZXIsICJtYWtlIGxpbnV4Ii4gIFVzZXMgbmN1cnNlcy4gIFRoaXMgdmVyc2lv bgotIyAgICAgaGFuZGxlcyBzZXJpYWwgc3BlZWRzIHVwIHRvIDQ2MDgwMCBicHMsIExpbnV4IEZT U1REIDEuMiwgVENQL0lQLCBhbmQKLSMgICAgIHNob3VsZCB3b3JrIG9uIGJvdGggbGliYyBhbmQg Z2xpYmMgc3lzdGVtcy4gIEZvciBzdGF0aWMgbGlua2luZywgdXNlCi0jICAgICAibWFrZSBsaW51 eCBMTktGTEFHUz0tc3RhdGljIi4gIFBsZWFzZSByZWFkIHRoZSBjb21tZW50cyB0aGF0IGFjY29t cGFueQotIyAgICAgdGhlIGxpbnV4IGVudHJ5LiAgQXMgb2YgOC4wLjIxMiBEZXYuMTAsIHRoaXMg YWxzbyBpbmNsdWRlcyBMYXJnZSBGaWxlCi0jICAgICBTdXBwb3J0IChMRlMpLgotIyArIGZvciBM aW51eCBidWlsZHMgdGhhdCBmYWlsIHdpdGggInN5cy9zZWxlY3QuaDogTm8gc3VjaCBmaWxlIG9y IGRpcmVjdG9yeSIsCi0jICAgICAibWFrZSBsaW51eG5zIgotIyArIGZvciBMaW51eCAxLjIgYW5k IGxhdGVyIGJ1dCB3aXRoIGN1cnNlcy5oIGFuZCBsaWJjdXJzZXMgKHJhdGhlciB0aGFuCi0jICAg ICBuY3Vyc2VzLmggYW5kIGxpYm5jdXJzZXMpLCB1c2UgIm1ha2UgbGludXhjIi4KLSMgKyBmb3Ig TGludXggMS4yIGFuZCBsYXRlciB3aXRoIG5vIGN1cnNlcyBzdXBwb3J0IGF0IGFsbCwgIm1ha2Ug bGludXhuYyIuCi0jICsgZm9yIExpbnV4IHdpdGggbm8gVENQL0lQLCAibWFrZSBsaW51eG5vdGNw IgotIyAoVGhlIGZvbGxvd2luZyBMaW51eCB0YXJnZXRzIGFyZSBoaXN0b3JpYyBhbmQgbWlnaHQg bm90IHdvcmsuLi4pCi0jID8gZm9yIFJlZCBIYXQgTGludXggNy4xIHRocm91Z2ggUkg5LCBmdWxs eSBjb25maWd1cmVkIChrcmI1LCBTU0wsIGV0Yyk6Ci0jICAgICAibWFrZSByZWRoYXQ3MSIsICJt YWtlIHJlZGhhdDcyIiwgIm1ha2UgcmVkaGF0NzMiLCAibWFrZSByZWRoYXQ4MCIKLSMgICAgICJt YWtlIHJlZGhhdDkiCi0jICAgICBOT1RFOiBZb3UgbXVzdCB1c2UgdGhpcyB0YXJnZXQgZm9yIFJl ZCBIYXQgNy4xIHNpbmNlIGl0Ci0jICAgICBhbHNvIGluY2x1ZGVzIGEgd29ya2Fyb3VuZCBmb3Ig aXRzIGJyb2tlbiBjdXJzZXMgbGlicmFyeS4KLSMgICAgIFdBUk5JTkc6IFRoZXNlIHRhcmdldHMg Y3JlYXRlIGJpbmFyaWVzIHRoYXQgaW5jbHVkZSBjb2RlIGZvcgotIyAgICAgc3Ryb25nIGVuY3J5 cHRpb24gYW5kIGFyZSB0aGVyZWZvcmUgbm90IGV4cG9ydGFibGUuIERPIE5PVCBQVVQKLSMgICAg IFRIRVNFIEJJTkFSSUVTIE9OIFVTIE9SIENBTkFESUFOIFdFQiBPUiBGVFAgU0lURVMuCi0jID8g Zm9yIExpbnV4IG9uIFBvd2VyTWFjIChNa2xpbnV4IERSMyksICJtYWtlIG1rbGludXgiLgotIyA/ IGZvciBMaW51eCAxLjIgYW5kIGxhdGVyLCB0byBidWlsZCB3aXRoIGVnY3MsICJtYWtlIGxpbnV4 ZWdjcyIuCi0jID8gZm9yIExpbnV4IHdpdGggbGNjIGNvbXBpbGVyLCBubyBUQ1AvSVAsICJtYWtl IGxpbnV4bm90Y3AtbGNjIgotIyA/IGZvciBMaW51eCAxLjAgb3IgZWFybGllciwgIm1ha2UgbGlu dXgxMCIuCi0jIChFbmQgb2xkIGxpbnV4IHRhcmdldHMpCi0jID8gZm9yIE1hY2ggMi42IG9uIChh bnl0aGluZywgZS5nLiBERUNzdGF0aW9uKSwgIm1ha2UgYnNkNDIiIG9yICJtYWtlIGJzZDQzIi4K LSMgPyBmb3IgTWFjaFRlbiAoVGVub24pIDIuMS4xLkQgb24gKGUuZy4pIEFwcGxlIFBvd2VyYm9v aywgIm1ha2UgbWFjaHRlbiIuCi0jID8gZm9yIE1hc3Njb21wIFJUVSBBVCZUIFN5c3RlbSBJSUks ICJtYWtlIHJ0dSIKLSMgICBmb3Igb3RoZXIgTWFzc2NvbXAsIHNlZSBDb25jdXJyZW50LgotIyA/ IGZvciBNaWNyb3BvcnQgU1YvQVQgKFN5c3RlbSBWIFIyKSwgIm1ha2UgbXBzeXN2IiAobGFzdCBl ZGl0IHRlc3RlZDogMTQ0KQotIyA/IGZvciBNaWNyb3BvcnQgU1ZSNCAyLjIsIDMuMSwgb3IgNC4x ICJtYWtlIHN5czVyNHN4IgotIyA/IGZvciBNaWNyb3NvZnQsSUJNIFhlbml4ICgvMjg2LCBQQy9B VCwgZXRjKSwgIm1ha2UgeGVuaXgiIG9yICJtYWtlIHNjbzI4NiIKLSMgPyBmb3IgTUlQUyBTeXN0 ZW0gd2l0aCBSSVNDL29zIChVTUlQUykgNC41MiA9IEFUJlQgU1ZSMywgIm1ha2UgbWlwcyIKLSMg ICAgIG9yICJtYWtlIG1pcHN0Y3BjIgotIyA/IGZvciBNa0xpbnV4IG9uIFBvd2VyIE1hY2ludG9z aCwgIm1ha2UgbWtsaW51eCIKLSMgPyBmb3IgTW9kY29tcCA5NzMwLCBSZWFsL0lYLCAibWFrZSBz eXM1cjMiIChvciBtb2RpZnkgdG8gdXNlIGdjYyA9IEdMUyBjYykKLSMgPyBmb3IgTW9kY29tcCBS ZWFsc3RhciAxMDAwIHdpdGggUkVBTC9JWCBELjEsICJtYWtlIHN2ODhyMzIiCi0jID8gZm9yIE1v dG9yb2xhIEZvdXIgUGhhc2UsICJtYWtlIHN5czMiIG9yICJtYWtlIHN5czNuaWQiCi0jID8gZm9y IE1vdG9yb2xhIERlbHRhIFN5c3RlbSBWLzY4IFIzLCAibWFrZSBzdjY4cjMiCi0jID8gZm9yIE1v dG9yb2xhIERlbHRhIFN5c3RlbSBWLzY4IFIzVjUsICJtYWtlIHN2NjhyM3Y1IgotIyA/IGZvciBN b3Rvcm9sYSBEZWx0YSBTeXN0ZW0gVi82OCBSM1Y1LjEsICJtYWtlIHN2NjhyM3Y1MSIKLSMgPyBm b3IgTW90b3JvbGEgRGVsdGEgU3lzdGVtIFYvNjggUjNWNiB3aXRoIE5TRSBUQ1AvSVAsICJtYWtl IHN2NjhyM3Y2IgotIyA/IGZvciBNb3Rvcm9sYSBEZWx0YSBTeXN0ZW0gVi84OCBSMzIsICJtYWtl IHN2ODhyMzIiCi0jID8gZm9yIE1vdG9yb2xhIERlbHRhIFN5c3RlbSBWLzg4IFI0MCwgIm1ha2Ug c3Y4OHI0MCIKLSMgPyBmb3IgTXQgWGludSBNYWNoMzg2IG9uIDM4Ni80ODYtYmFzZWQgUENzLCAi bWFrZSBic2Q0MyIKLSMgPyBmb3IgTkNSIFRvd2VyIDE2MzIsIE9TIDEuMDIsICJtYWtlIHRvd2Vy MSIKLSMgPyBmb3IgTkNSIFRvd2VyIDE2MzIgb3IgTWluaXRvd2VyIHdpdGggU3lzdGVtIFYgUjIs ICJtYWtlIHN5czMiCi0jICAgICBvciAibWFrZSBzeXMzbnYiCi0jID8gZm9yIE5DUiBUb3dlciAz MiwgT1MgUmVsZWFzZSAxLnh4Lnh4LCAibWFrZSB0b3dlcjMyLTEiCi0jID8gZm9yIE5DUiBUb3dl ciAzMiwgT1MgUmVsZWFzZSAyLnh4Lnh4LCAibWFrZSB0b3dlcjMyLTIiCi0jID8gZm9yIE5DUiBU b3dlciAzMiwgT1MgUmVsZWFzZXMgYmFzZWQgb24gU3lzIFYgUjMsICJtYWtlIHRvd2VyMzIiCi0j ID8gZm9yIE5DUiBUb3dlciAzMiwgT1MgUmVsZWFzZXMgYmFzZWQgb24gU3lzIFYgUjMgd2l0aCBn Y2MgIm1ha2UgdG93ZXIzMmciCi0jID8gZm9yIE5DUiBTeXN0ZW0gMzAwMCwgQVQmVCBVTklYIFN5 c3RlbSBWIFI0IDIuMCwgIm1ha2Ugc3lzNXI0c3huYSIKLSMgPyBmb3IgTkNSIFN5c3RlbSAzMDAw LCBBVCZUIFVOSVggU3lzdGVtIFYgUjQgMi4wIHdpdGggV29sbG9uZ29uZyBUQ1AvSVAsCi0jICAg ICAibWFrZSBzeXM1cjRuZXQyIiBvciAibWFrZSBzeXM1cjRuZXQyYyIuCi0jICAgICAgU29tZSBo ZWFkZXIgZmlsZXMgbWlnaHQgYmUgbWlzcGxhY2VkOyB0cnkgdGhpczoKLSMgICAgICAgbG4gL3Vz ci9pbmNsdWRlL25ldGluZXQvaW4uaCAvdXNyL2luY2x1ZGUvc3lzL2luLmgKLSMgICAgICAgbG4g L3Vzci9pbmNsdWRlL2FycGEvaW5ldC5oIC91c3IvaW5jbHVkZS9zeXMvaW5ldC5oCi0jICAgICAg IGxuIC91c3IvaW5jbHVkZS9zeXMvdGVybWlveC5oIC91c3IvaW5jbHVkZS90ZXJtaW94LmgKLSMg PyBmb3IgTkNSIFN5c3RlbSAzMDAwLCBOQ1IgVU5JWCAwMi4wMi4wMSwgc2FtZSBhcyBhYm92ZS4K LSMgPyBmb3IgTkNSIE1QLVJBUyBTeXN0ZW0gViBSNCBWMi4wMyBvciAzLjAyLCAibWFrZSBtcHJh cyIgb3IgIm1ha2UgbXByYXN0Y3BjIgotIyArIGZvciBOZXRCU0QgYW55IHZlcnNpb24gb24gYW55 IGFyY2hpdGVjdHVyZSwgIm1ha2UgbmV0YnNkIgotIyArIGZvciBOZXRCU0Qgd2l0aCBPcGVuU1NM LCAibWFrZSBuZXRic2Qrc3NsIgotIyA/IGZvciBOZXRCU0Qgd2l0aCBuY3Vyc2VzIHNwZWNpZmll ZCBpbnN0ZWFkIG9mIGN1cnNlcywgIm1ha2UgbmV0YnNkbiIKLSMgPyBmb3IgTmV0QlNEIHdpdGgg YWxsIGN1cnNlcyBzdXBwb3J0IG9taXR0ZWQsICJtYWtlIG5ldGJzZG5jIgotIyA/IGZvciBOZVhU IHdpdGggTmVYVFNURVAgMS4wIHRocm91Z2ggMy4yLCAibWFrZSBuZXh0IiAob24gYSBOZVhUKQot IyA/IGZvciBOZVhUIHdpdGggTmVYVFNURVAgMy4zLCAibWFrZSBuZXh0MzMiCi0jID8gZm9yIE5l WFQgd2l0aCBPUEVOU1RFUC9NYWNoIDQuMSwgIm1ha2UgbmV4dHF1YWRmYXQiLgotIyA/IGZvciBO ZVhUIHdpdGggT1BFTlNURVAvTWFjaCA0LjIsICJtYWtlIG9wZW5zdGVwNDIiLgotIyA/IGZvciBO ZVhUU1RFUC80ODYsICJtYWtlIG5leHQiIChvbiBhIFBDKQotIyA/IGZvciBOZVhUU1RFUCBwb3J0 YWJsZSBiaW5hcnkgKHJ1bnMgb24gSW50ZWwgb3IgTW90b3JvbGEpLCAibWFrZSBuZXh0ZmF0Igot IyA/IGZvciBOZVhUU1RFUCBwb3J0YWJsZSBiaW5hcnkgKEludGVsLCBNb3Rvcm9sYSwgSFAgUEEt UklTQywgb3IgU1BBUkMpLAotIyAgICAgIm1ha2UgbmV4dHF1YWRmYXQiCi0jID8gZm9yIE5peGRv cmYgVGFyZ29uLzMxLCAibWFrZSB0MzF0b3M0MHgiCi0jID8gZm9yIE5vcnNrIERhdGEgVW5pbGlu ZSA4OC8xNyB3aXRoIFNWLzg4IFIzLjIsICJtYWtlIHN2ODhyMzIiCi0jICAgZm9yIE5vdmVsbCBV bml4V2FyZSAtIHNlZSBVbml4V2FyZQotIyA/IGZvciBPU0YvMSAodmFuaWxsYSwgZnJvbSBPUy9G KSwgIm1ha2UgcG9zaXgiCi0jID8gZm9yIE9raVN0YXRpb24gNzMwMCBTZXJpZXMsICJtYWtlIHN5 czVyNHN4dGNwIgotIyA/IGZvciBPbGl2ZXR0aSBMU1gtMzAyMCB3aXRoIFgvT1MgUi4yLjMsICJt YWtlIHhvczIzIiBvciAibWFrZSB4b3MyM2MiCi0jICsgZm9yIE9wZW5CU0QsICJtYWtlIG9wZW5i c2QiIChhbHNvIHNlZSBzZWN1cmUgdGFyZ2V0cyBsaXN0ZWQgYmVsb3cpLgotIyA/IGZvciBPUEVO U1RFUC9NYWNoIDQuMSwgIm1ha2UgbmV4dHF1YWRmYXQiIChOZVhULCBJbnRlbCwgUEEtUklTQywg U1BBUkMpCi0jID8gZm9yIE9QRU5TVEVQL01hY2ggNC4yLCAibWFrZSBvcGVuc3RlcDQyIiAodGVz dGVkIG9uIE5lWFQpCi0jID8gZm9yIFBlcmtpbi1FbG1lciAoQ29uY3VycmVudCkgMzIwMCBzZXJp ZXMsICJtYWtlIHN5czUiLgotIyA/IGZvciBQZXJraW4tRWxtZXIgKENvbmN1cnJlbnQpIDMyMDAg c2VyaWVzIHdpdGggPGRpcmVudC5oPiwgIm1ha2UgY2NvcDEiCi0jID8gZm9yIFBlcmtpbi1FbG1l ci9Db25jdXJyZW50IDMyMDAgd2l0aCBYZWxvcyBSMDIsICJtYWtlIGNjb3AxIgotIyA/IGZvciBQ RlUgQ29tcGFjdCBBIFNlcmllcyBTWC9BIFRJU1AgVjEwL0U1MCAoSmFwYW4pLCAibWFrZSBzeGFl NTAiCi0jID8gZm9yIFBsZXh1cywgIm1ha2Ugc3lzMyIKLSMgPyBmb3IgUHlyYW1pZCA5WFhYIChl LmcuIDk4NDUpIG9yIE1JU2VydmVyIFQgc2VyaWVzLCBPU3ggNC40YiB0aHJ1IDUuMSwKLSMgICAg ICJ1Y2IgbWFrZSBweXJhbWlkIiBvciBmb3IgSERCIFVVQ1AsICJ1Y2IgbWFrZSBweXJhbWlkLWhk YiIgb3I6Ci0jID8gZm9yIFB5cmFtaWQgTUlTZXJ2ZXIgUyBvciBFUyBTZXJpZXMsIERhdGFDZW50 ZXIvT1N4LCAibWFrZSBweXJkY29zeCIKLSMgPyBmb3IgUHlyYW1pZCBNSVMtUyBNSVBTIFIzMDAw LCBEYXRhQ2VudGVyIE9TeCBTeXN0ZW0gViBSNCwgIm1ha2UgcHlyZGNvc3giCi0jID8gZm9yIFBP U0lYIG9uIGFueXRoaW5nLCAibWFrZSBwb3NpeCIgKGJ1dCBhZGp1c3RtZW50cyBtaWdodCBiZSBu ZWNlc3NhcnkpLgotIyAgICAgIE5PVEU6IHRoaXMgdGFyZ2V0IGlzIG5vdCB2ZXJ5IHVzZWZ1bCAt IG1hbnkgZmVhdHVyZXMgYXJlIG1pc3NpbmcuCi0jID8gZm9yIFByaW1lIDgwMDAgTUlQUywgU1ZS MywgIm1ha2UgbWlwcyIgb3IgIm1ha2UgbWlwc3RjcGMiCi0jIC0gZm9yIFFOWCAyLnggKHNvcnJ5 IHdlIGRvbid0IGhhdmUgYSB2ZXJzaW9uIG9mIEMtS2VybWl0IGZvciBRTlggMi54KQotIyA/IGZv ciBRTlggNC4wIG9yIDQuMSwgMTYtYml0LCBvbiAyODYgUEMsIFdhdGNvbSBDIDguNSwgIm1ha2Ug cW54MTZfNDEiCi0jID8gZm9yIFFOWCA0LjIxIC0gNC4yMkEgKDI4NispLCBhbmQgNC4yMyAoMzg2 KyksIG9yIGhpZ2hlciwgMTYtYml0LAotIyAgICAgV2F0Y29tIEMgOS41eCBvciBoaWdoZXIsICJt YWtlIHFueDE2IgotIyArIGZvciBRTlggNC4yMS00LjI1LCAzMi1iaXQsIDM4NiBvciBhYm92ZSwg V2F0Y29tIEMgMTAuNiwgIm1ha2UgcW54MzIiCi0jICAgICBOT1RFOiAoIm1ha2UgcW54IiA9PSAi bWFrZSBxbngzMiIpCi0jID8gZm9yIFFOWCBOZXV0cmlubyAyKywgIm1ha2UgcW54X250bzIrIiAo Y3Jvc3Njb21waWxlZCBvbiBRTlg0IHdpdGggV2F0Y29tIEMpCi0jID8gZm9yIFFOWCA2ID0gTmV1 dHJpbm8gMi54eCwgIm1ha2UgcW54NiIKLSMgPyBmb3IgUmlkZ2UgMzIgKFJPUzMuMiksICJtYWtl IHJpZGdlMzIiCi0jID8gZm9yIFNhbXN1bmcgTWFnaWNTdGF0aW9uLCAibWFrZSBzeXM1cjQiCi0j ID8gZm9yIFNDTyBYZW5peCAyLjIuMSB3aXRoIGRldmVsb3BtZW50IHN5c3RlbSAyLjIgb24gODA4 Ni84ICJtYWtlIHNjbzg2IgotIyA/IGZvciBTQ08gWGVuaXgvMjg2IDIuMi4xIHdpdGggZGV2ZWxv cG1lbnQgc3lzdGVtIDIuMiBvbiA4MDI4NiwgIm1ha2Ugc2NvMjg2IgotIyAgICAgTk9URTogcmVw b3J0ZWRseSB0aGlzIG1ha2VmaWxlIGlzIHRvbyBsb25nIGZvciBTQ08gWGVuaXgvMjg2IG1ha2Us IGJ1dCBpdAotIyAgICAgd29ya3Mgd2l0aCAibWFrZUwiLCBvciBpZiBzb21lIG9mIHRoZSBvdGhl ciBtYWtlIGVudHJpZXMgYXJlIGVkaXRlZCBvdXQuCi0jID8gZm9yIFNDTyBYZW5peC8zODYgMi4y LjIsICJtYWtlIHNjbzM4NiIKLSMgPyBmb3IgU0NPIFhlbml4LzM4NiAyLjMueCwgIm1ha2Ugc2Nv M3IyIgotIyA/IGZvciBTQ08gWGVuaXgvMzg2IFNDTyAyLjMuMyBvciAyLjMuNCB3aXRoIGdjYyAx LjM3IG9yIGxhdGVyLAotIyAgICAgIm1ha2Ugc2NvMzg2Z2NjIiBvciAodG8gYWRkIGN1cnNlcykg Im1ha2Ugc2NvMzg2Z2NjYyIuCi0jID8gZm9yIFNDTyBYZW5peC8zODYgb3IgVU5JWC8zODYgd2l0 aCBFeGNlbGFuIFRDUC9JUCwgIm1ha2Ugc2NvM3IybmV0IgotIyAgICAgb3IgKHRvIGFkZCBjdXJz ZXMgc3VwcG9ydCkgIm1ha2Ugc2NvM3IybmV0YyIgb3IgInNjbzM4Nm5ldGMiCi0jICsgZm9yIFND TyBYRU5JWCAyLjMuNCwgIm1ha2Ugc2NvMjM0IiBvciAibWFrZSBzY28yMzRjIiB0byBhZGQgY3Vy c2VzLgotIyA/IGZvciBTQ08gWEVOSVggMi4zLjQgd2l0aCBTQ08gVENQL0lQICYgY3Vyc2VzLCAi bWFrZSBzY28yMzRuZXRjIi4KLSMgPyBmb3IgU0NPIFhlbml4IDIuMy54IHdpdGggUmFjYWwtSW50 ZXJMYW4gVENQL0lQLCAibWFrZSBzY28zcjJuZXRyaSIKLSMgICBmb3Igb3RoZXIgVU5JWCB2YXJp ZXRpZXMgd2l0aCBSYWNhbCBJbnRlcmxhbiBUQ1AvSVAsIHJlYWQgc2NvM3IybmV0cmkgZW50cnkK LSMgPyBmb3IgU0NPIFhlbml4IDIuMy54IHdpdGggU0NPIChMYWNobWFuKSBUQ1AvSVAsICJtYWtl IHNjbzNyMmxhaSIKLSMgICAgIG9yICh0byBhZGQgY3Vyc2VzKSAibWFrZSBzY28zcjJsYWljIgot IyAgIGZvciBTQ08gVU5JWC4uLiAgQUxTTyBSRUFEIENPTU1FTlRTIGluIHRoZSBTQ08gVU5JWCBl bnRyaWVzIGZvciBtb3JlIGluZm8hCi0jID8gZm9yIFNDTyBVTklYLzM4NiAzLjIuMCBvciAzLjIu MSwgIm1ha2Ugc2NvM3IyIiBvciAibWFrZSBzY28zcjJ4IgotIyA/IGZvciBTQ08gVU5JWC8zODYg My4yLjIsICJtYWtlIHNjbzNyMjIiIG9yICJtYWtlIHNjbzNyMjJnY2MiCi0jICAgICBvciAibWFr ZSBzY28zcjIyYyIKLSMgPyBmb3IgU0NPIFVOSVgvMzg2IDMuMi4yIHdpdGggU0NPIFRDUC9JUCwg Im1ha2Ugc2NvM3IyMm5ldCIKLSMgICAgIG9yICJtYWtlIHNjbzNyMjJuZXRjIiAoY3Vyc2VzKQot IyA/IGZvciBTQ08gT0RUIDEuMSwgIm1ha2Ugc2NvM3IyMm5ldCIgb3IgIm1ha2Ugc2NvM3IyMm5l dGMiIChjdXJzZXMpCi0jID8gZm9yIFNDTyBVTklYLzM4NiAzLjIgVjQueCwgbm8gbmV0d29yayBz dXBwb3J0LCAibWFrZSBzY28zMnY0IgotIyA/ICAgb3IgIm1ha2Ugc2NvMzJ2NG5zIiAodGhpcyBv bmUgdXNlcyBubyBzZWxlY3QoKSBvciBzb2NrZXRzIGxpYnJhcnkpCi0jID8gZm9yIFNDTyBVTklY LzM4NiAzLjIgVjQueCB3aXRoIFRDUC9JUCwgIm1ha2Ugc2NvMzJ2NG5ldCIKLSMgICAgIChhbHNv IHNjbzMydjRnY2MsIHNjbzMydjRuZXRnY2MpCi0jID8gZm9yIFNDTyBVTklYLzM4NiAzLjIgVjUu MCAtIHNlZSBTQ08gT3BlblNlcnZlci4KLSMgPyBmb3IgU0NPIFVOSVggMy4ydjQueCB3aXRoIFRD UC9JUCwgPGRpcmVudC5oPiBmb3IgRXh0ZW5kZWQgQWNlciBGaWxlCi0jICAgICBTeXN0ZW0gKEVB RlMpLCBjdXJzZXMsIEFOU0kgQyBjb21waWxhdGlvbiwgIm1ha2Ugc2NvMzJ2NG5ldCIKLSMgPyAg IG9yICh0byB1c2Ugc2VsZWN0KCktYmFzZWQgQ09OTkVDVCBtb2R1bGUpICJtYWtlIHNjbzMydjRu ZXR4Ii4KLSMgPyBmb3IgU0NPIFVOSVggMy4ydjQuMiwgIm1ha2Ugc2NvLW9kdDMwIiAoaW5jbHVk ZXMgVENQL0lQKS4KLSMgPyBmb3IgU0NPIE1QWCAzLjAgLSBUaGUgU0NPIFVOSVggYmluYXJ5IHJ1 bnMgb24gdGhlIGNvcnJlc3BvbmRpbmcgTVBYIHN5c3RlbS4KLSMKLSMgTk9URTogQWxzbyBzZWUg YmVsb3cgZm9yIG90aGVyIGVudHJpZXMgdGhhdCBhcmUgdmFyaWF0aW9ucyBvbiB0aGVzZS4KLSMg QWxzbyBiZSBzdXJlIHRvIHJlYWQgdGhlIGNvbW1lbnRzIGFjY29tcGFueWluZyBlYWNoIFNDTyBl bnRyeS4KLSMgQWxzbyBzZWUgVW5peHdhcmUgc2VjdGlvbi4KLSMKLSMgPyBmb3IgU0NPIE9EVCAy LjAsICJtYWtlIHNjbzMydjRuZXQiCi0jID8gZm9yIFNDTyBPRFQgMy4wLCAibWFrZSBzY28tb2R0 MzAiCi0jID8gZm9yIFNDTyBPcGVuU2VydmVyIDUuMCAoT1NSNSksICJtYWtlIHNjbzMydjUwMCIK LSMgPyBmb3IgU0NPIE9wZW5TZXJ2ZXIgNS4wIChPU1I1KSB3aXRoIG5ldHdvcmtpbmcsICJtYWtl IHNjbzMydjUwMG5ldCIKLSMgPyBmb3IgU0NPIE9wZW5TZXJ2ZXIgNS4wIChPU1I1KSwgZ2NjLCAi bWFrZSBzY28zMnY1MDBnY2MiCi0jID8gZm9yIFNDTyBPcGVuU2VydmVyIDUuMCAoT1NSNSksIGdj Yywgd2l0aCBuZXR3b3JraW5nLCAibWFrZSBzY28zMnY1MDBuZXRnY2MiCi0jID8gZm9yIFNDTyBP cGVuU2VydmVyIDUuMCAoT1NSNSksIGFzIGFib3ZlLCBFTEYsICJtYWtlIHNjbzMydjUwMG5ldGdj Y2VsZiIKLSMgPyBmb3IgU0NPIE9wZW5TZXJ2ZXIgNS4wLjIsIHVzZSAibWFrZSBzY28zMnY1MDJ4 eHgiIGVudHJpZXMgYXMgYWJvdmUuCi0jID8gZm9yIFNDTyBPcGVuU2VydmVyIDUuMC40LCB1c2Ug Im1ha2Ugc2NvMzJ2NTA0eHh4IiBlbnRyaWVzIGFzIGFib3ZlLgotIyA/IGZvciBTQ08gT3BlblNl cnZlciA1LjAuNSwgdXNlICJtYWtlIHNjbzMydjUwNXh4eCIgZW50cmllcyBhcyBhYm92ZS4KLSMg ICAgIFVzZSB0aGUgc2NvMzJ2NTA1dWRreHh4IGVudHJpZXMgaWYgeW91IGhhdmUgdGhlIFVESyBy YXRoZXIgdGhhbiAvYmluL2NjLgotIyA/IGZvciBTQ08gT3BlblNlcnZlciA1LjAuNiwgdXNlICJt YWtlIHNjbzMydjUwNnh4eCIgZW50cmllcyBhcyBhYm92ZS4KLSMgPyBmb3IgU0NPIE9wZW5TZXJ2 ZXIgNS4wLjZhLHVzZSAibWFrZSBzY28zMnY1MDZheHh4IiBlbnRyaWVzIGFzIGFib3ZlLgotIyA/ IGZvciBTQ08gT3BlblNlcnZlciA1LjAuNywgdXNlICJtYWtlIHNjbzMydjUwNyIsICJtYWtlIHNj bzMydjUwN25ldCIKLSMgPyBmb3IgU0NPIChVbml2ZWwpIFVuaXhXYXJlIDEueCwgIm1ha2UgdW5p eHdhcmUiIG9yICJtYWtlIHVuaXh3YXJlbmV0YyIuCi0jICAgICBJZiB0aGVyZSBhcmUgcHJvYmxl bXMgd2l0aCB0aGlzIGluIEMtSyA3KyBzZWUgbm90ZXMgYXQgdW5peHdhcmUgZW50cnkuCi0jICsg Zm9yIFNDTyBPcGVuU2VydmVyIDYuMC4wLCAibWFrZSBzY29fb3NyNjAwIgotIyA/IGZvciBTQ08g VW5peFdhcmUgMi4wLngsICJtYWtlIHV3MjAiCi0jID8gZm9yIFNDTyBVbml4V2FyZSAyLjEuMCwg Im1ha2UgdXcyMSIKLSMgPyBmb3IgU0NPIFVuaXhXYXJlIDIuMS4zLCAibWFrZSB1dzIxMyIKLSMg KyBmb3IgU0NPIFVuaXhXYXJlIDcsICJtYWtlIHV3NyIgKGluY2x1ZGVzIGxhcmdlIGZpbGUgc3Vw cG9ydCkKLSMgPyBmb3IgU0NPIFVuaXhXYXJlIDcgd2l0aCBJS1NEIHN1cHBvcnQsICJtYWtlIHV3 N2lrc2QiIG9yICJtYWtlIHV3N2lrc2R1ZGsiCi0jID8gZm9yIFNDTyBVbml4V2FyZSA3IHdpdGgg T3BlblNTTCwgIm1ha2UgdXc3c3NsIgotIyA/IGZvciBTQ08gKENhbGRlcmEpIE9wZW4gVU5JWCA4 LCAibWFrZSBvdTgiCi0jID8gZm9yIFNoYXJwIFphdXJ1cyBTTDU1MDAgUERBLCAibWFrZSB6c2w1 NTAwIi4KLSMgPyBmb3IgU2VxdWVudCB3aXRoIERZTklYL3B0eCAxLjIuMSwgIm1ha2UgZHluaXhw dHgxMiIKLSMgPyBmb3IgU2VxdWVudCB3aXRoIERZTklYL3B0eCAxLjMgb3IgMS40IHdpdGggVENQ L0lQLCAibWFrZSBkeW5peHB0eDEzIgotIyA/IGZvciBTZXF1ZW50IHdpdGggRFlOSVgvcHR4IDIu MCBvciAyLjEgd2l0aCBUQ1AvSVAsICJtYWtlIGR5bml4cHR4MjAiCi0jICAgICBvciAiZHluaXhw dHgyMGMiCi0jID8gZm9yIFNlcXVlbnQgd2l0aCBEWU5JWC9wdHggMi4xLjYgb24gaTQ4NiwgImR5 bml4cHR4MjE2YyIKLSMgPyBmb3IgU2VxdWVudCB3aXRoIERZTklYL3B0eCBWNC4xLjMgd2l0aCBU Q1AvSVAsICJtYWtlIGR5bml4cHR4NDFjIgotIyA/IGZvciBTZXF1ZW50IHdpdGggRFlOSVgvcHR4 IFY0LjQuMiB3aXRoIFRDUC9JUCwgIm1ha2UgZHluaXhwdHg0NCIKLSMgPyBmb3IgU2VxdWVudCBC YWxhbmNlIDgwMDAgb3IgQjggd2l0aCBEWU5JWCAzLjAueHgsICJtYWtlIGR5bml4MyIKLSMgICAg b3IgIm1ha2UgZHluaXgzbm9hY3UiCi0jID8gZm9yIFNlcXVlbnQgU3ltbWV0cnkgUzgxIHdpdGgg RFlOSVggMy4wLnh4LCAibWFrZSBkeW5peDMiCi0jID8gZm9yIFNlcXVlbnQgRFlOSVggMy4xLnh4 LCAibWFrZSBkeW5peDMxIiBvciAibWFrZSBkeW5peDMxYyIKLSMgPyBmb3IgU2llbWVucy9OaXhk b3JmIFNJTklYLUwgSW50ZWwgVjUuNDEsICJtYWtlIHNpbml4NTQxaSIKLSMgKyBmb3IgU2llbWVu cy9OaXhkb3JmIFNJTklYLU4gTUlQUyBWNS40MiwgIm1ha2Ugc2luaXg1NDIiCi0jID8gZm9yIFNp ZW1lbnMvTml4ZG9yZiBTSU5JWC1QIE1JUFMgVjUuNDIgd2l0aCBnY2MsICJtYWtlIHNpbml4NTQy ZyIKLSMgPyBmb3IgU2llbWVucy9OaXhkb3JmIFNJTklYLVogSW50ZWwgVjUuNDIsICJtYWtlIHNp bml4NTQyaSIKLSMgPyBmb3IgU2llbWVucy9OaXhkb3JmIFJlbGlhbnQgVU5JWCBWNS40MywgIm1h a2Ugc25pNTQzIgotIyA/IGZvciBTaWVtZW5zL05peGRvcmYgUmVsaWFudCBVTklYIFY1LjQ0LCAi bWFrZSBzbmk1NDQiCi0jID8gZm9yIFNpbGljb24gR3JhcGhpY3MgSXJpcyBTeXN0ZW0gViBJUklY IDMuMiBvciBlYXJsaWVyLCAibWFrZSBpcmlzIgotIyA/IGZvciBTaWxpY29uIEdyYXBoaWNzIFN5 cyBWIFIzIHdpdGggSVJJWCAzLjMgb3IgbGF0ZXIsICJtYWtlIHN5czVyMyIKLSMgPyBmb3IgU2ls aWNvbiBHcmFwaGljcyBJcmlzIEluZGlnbyB3aXRoIElSSVggNC4wIG9yIDUuMCwgIm1ha2UgaXJp eDQwIiBvcgotIyAgICAgKHRvIGluY2x1ZGUgWWVsbG93IFBhZ2VzIGFuZCBDdXJzZXMpICJtYWtl IGlyaXg0MHlwYyIKLSMgPyBmb3IgU2lsaWNvbiBHcmFwaGljcyBJcmlzIEluZGlnbyBvciBFbGFu IHdpdGggSVJJWCA0LjAueCB3aXRoIG1pY3JvY29kZQotIyAgICAgb3B0aW1pemF0aW9uIGFuZCAt TzQsICJtYWtlIGlyaXg0MHUiIG9yICJpcml4NDB1YyIgKGFuZCByZWFkIG5vdGVzCi0jICAgICBh Y2NvbXBhbnlpbmcgdGhlc2UgZW50cmllcykuCi0jID8gZm9yIFNpbGljb24gR3JhcGhpY3MgSVJJ WCA1LjEsICJtYWtlIGlyaXg1MSIgb3IgImlyaXg1MXgiIChubyBvcHRpbWl6ZSkKLSMgPyBmb3Ig U2lsaWNvbiBHcmFwaGljcyBJUklYIDUuMiwgIm1ha2UgaXJpeDUyIgotIyA/IGZvciBTaWxpY29u IEdyYXBoaWNzIElSSVggNS4zLCAibWFrZSBpcml4NTMiIG9yICJpcml4NTN4IiAobm8gb3B0aW1p emUpCi0jID8gZm9yIFNpbGljb24gR3JhcGhpY3MgSVJJWCA2LjAsICJtYWtlIGlyaXg2MCIuCi0j ID8gZm9yIFNpbGljb24gR3JhcGhpY3MgSVJJWCA2LjIsICJtYWtlIGlyaXg2MiIuCi0jID8gZm9y IFNpbGljb24gR3JhcGhpY3MgSVJJWCA2LjMsICJtYWtlIGlyaXg2MyIuCi0jID8gZm9yIFNpbGlj b24gR3JhcGhpY3MgSVJJWCA2LjQsICJtYWtlIGlyaXg2NCIgb3IgIm1ha2UgaXJpeDY0Z2NjIi4K LSMgKyBmb3IgU2lsaWNvbiBHcmFwaGljcyAoU0dJKSBJUklYIDYuNSwgIm1ha2UgaXJpeDY1Igot IyArICAgb3IgIm1ha2UgaXJpeDY1bWlwczIiIHRvIGZvcmNlIE1JUFMyLCBvciAibWFrZSBpcml4 NjVnY2MiIGZvciBHQ0MuCi0jICsgZm9yIFNpbGljb24gR3JhcGhpY3MgKFNHSSkgSVJJWCA2LjUs ICJtYWtlIGlyaXg2NSIgb3IgIm1ha2UgaXJpeDY1bWlwczIiCi0jID8gZm9yIFNHSSBJUklYIDYu NSB3aXRoIFNTTC9UTFMsIFNSUCwgYW5kIFpMSUIgIm1ha2UgaXJpeDY1K3NzbCtzcnAremxpYiIK LSMgPyBmb3IgU29sYXJpcyAyLjAtMi4zIG9uIFNQQVJDIG9yIEludGVsLCBTdW5Qcm8gQ0MsICJt YWtlIHNvbGFyaXMyeCIsCi0jID8gICBvciB0byBhZGQgU3VuTGluayBYLjI1IDguMHggc3VwcG9y dCwgIm1ha2Ugc29sYXJpczJ4MjUiLgotIyA/IGZvciBTb2xhcmlzIDIuNCBidWlsdCB3aXRoIGdj YywgIm1ha2Ugc29sYXJpczI0ZyIuCi0jID8gZm9yIFNvbGFyaXMgMi4wLTIuMyBvbiBTUEFSQyBv ciBJbnRlbCwgR05VIENDLCAibWFrZSBzb2xhcmlzMnhnIi4KLSMgPyBmb3IgU29sYXJpcyAyLjQg d2l0aCBYLjI1LCAibWFrZSBzb2xhcmlzMjR4MjUiLgotIyA/IGZvciBTb2xhcmlzIDIuNSBvbiBT UEFSQyBvciBJbnRlbCwgU3VuUHJvIENDLCAibWFrZSBzb2xhcmlzMjUiLgotIyA/ICAgb3IgdG8g YWRkIFN1bkxpbmsgWC4yNSA4LjB4IHN1cHBvcnQsICJtYWtlIHNvbGFyaXMyNXgyNSIuCi0jID8g Zm9yIFNvbGFyaXMgMi41IG9uIFNQQVJDIG9yIEludGVsLCBHTlUgQ0MsICJtYWtlIHNvbGFyaXMy NWciLgotIyA/IGZvciBTb2xhcmlzIDIuNiBvbiBTUEFSQyBvciBJbnRlbCwgIm1ha2Ugc29sYXJp czI2Ii4KLSMgPyBmb3IgU29sYXJpcyA3IG9uIFNQQVJDIG9yIEludGVsLCBTdW5Qcm8gQ0MsICJt YWtlIHNvbGFyaXM3Ii4KLSMgPyBmb3IgU29sYXJpcyA3IG9uIFNQQVJDIG9yIEludGVsLCBHTlUg Q0MsICJtYWtlIHNvbGFyaXM3ZyIuCi0jID8gZm9yIFNvbGFyaXMgOCBvbiBTUEFSQyBvciBJbnRl bCwgU3VuUHJvIENDLCAibWFrZSBzb2xhcmlzOCIuCi0jID8gZm9yIFNvbGFyaXMgOCBvbiBTUEFS QyBvciBJbnRlbCwgR05VIENDLCAibWFrZSBzb2xhcmlzOGciLgotIyArIGZvciBTb2xhcmlzIDkg b24gU1BBUkMgKG9yIEludGVsPyksIDMyLWJpdCwgU3VuUHJvIENDLCAibWFrZSBzb2xhcmlzOSIu Ci0jICsgZm9yIFNvbGFyaXMgOSBvbiBTUEFSQyAob3IgSW50ZWw/KSwgMzItYml0LCBHTlUgQ0Ms ICJtYWtlIHNvbGFyaXM5ZyIuCi0jID8gZm9yIFNvbGFyaXMgOSBvbiBTUEFSQyAob3IgSW50ZWw/ KSwgNjQtYml0LCBHTlUgQ0MsICJtYWtlIHNvbGFyaXM5ZzY0Ii4KLSMgKyBmb3IgU29sYXJpcyAx MCBvbiBTUEFSQyAob3IgSW50ZWw/KSwgMzItYml0LCBTdW5Qcm8gQ0MsICJtYWtlIHNvbGFyaXMx MCIuCi0jICsgZm9yIFNvbGFyaXMgMTAgb24gU1BBUkMgNjQtYml0LCBTdW5Qcm8gQ0MsICJtYWtl IHNvbGFyaXMxMF82NCIuCi0jICsgZm9yIFNvbGFyaXMgMTAgb24gU1BBUkMgKG9yIEludGVsPyks IDMyLWJpdCwgR05VIENDLCAibWFrZSBzb2xhcmlzMTBnIi4KLSMgPyBmb3IgU29sYXJpcyAxMCBv biBTUEFSQyAob3IgSW50ZWw/KSwgNjQtYml0LCBHTlUgQ0MsICJtYWtlIHNvbGFyaXMxMGc2NCIu Ci0jID8gZm9yIFNvbGJvdXJuZSA0LzUwMCB3aXRoIE9TL01QIDQgIm1ha2Ugc3Vub3M0IgotIyA/ IGZvciBTb2xib3VybmUgNC81MDAgd2l0aCBPUy9NUCA0LjEgIm1ha2Ugc3Vub3M0MSIgb3IgIm1h a2Ugc3Vub3M0MWMiCi0jID8gZm9yIFNPTlkgTkVXUyB3aXRoIE5FV1MtT1MgNC4wLjFDLCAibWFr ZSBzb255bmV3cyIKLSMgPyBmb3IgU09OWSBORVdTIHdpdGggTkVXUy1PUyA0LjEuMkMsICJtYWtl IHNvbnluZXdzIgotIyA/IGZvciBTcGVycnkvVU5JU1lTIDUwMDAvMjAsIFVUUyBWIDUuMiAzUjEs ICJtYWtlIHN5czUiCi0jID8gZm9yIFNwZXJyeS9VTklTWVMgNTAwMC8zMC8zNS81MC81NSwgVVRT IFYgNS4yIDIuMDEsICJtYWtlIHVuaXN5czVyMiIKLSMgPyBmb3IgU3BlcnJ5L1VOSVNZUyA1MDAw LzgwIHdpdGggU3lzdGVtIFYgUjMsICJtYWtlIHN5czVyMyIKLSMgPyBmb3IgU3BlcnJ5L1VOSVNZ UyA1MDAwLzk1IHdpdGggU3lzdGVtIFYgUjMsICJtYWtlIHN5czVyMyIKLSMgICAgIEZvciBVTklT WVMgU1ZSMyBpdCBtaWdodCBiZSBuZWNlc3NhcnkgdG8gIm1ha2Ugc3lzNXIzIEtGTEFHUz0tVURZ TkFNSUMiCi0jID8gZm9yIFN0YXJkZW50IDE1MjAsICJtYWtlIHN5czVyMyIKLSMgPyBmb3IgU3Ry YXR1cyBGVFggMi54LCB0cnkgIm1ha2UgZnR4IiBvciBlbHNlICJtYWtlIHN5czVyNCIgb3IgInN5 czVyNHN4IgotIyA/IGZvciBTdHJhdHVzIEZUWCAzLngsIFBBLVJJU0MgMS4wIG9yIDIuMCwgIm1h a2UgZnR4IiBvciAibWFrZSBmdHh0Y3AiCi0jID8gZm9yIFN1biB3aXRoIFN1biBVTklYIDMuNSBh bmQgZ2NjLCAibWFrZSBzdW5vczNnY2MiCi0jID8gZm9yIFN1biB3aXRoIHByZS00LjAgU3VuT1Mg dmVyc2lvbnMsICJtYWtlIGJzZCIgKG9yIGFwcHJvcHJpYXRlIHZhcmlhbnQpCi0jID8gZm9yIFN1 biB3aXRoIFN1bk9TIDQuMCwgQlNEIGVudmlyb25tZW50LCAibWFrZSBzdW5vczQiCi0jID8gZm9y IFN1biB3aXRoIFN1bk9TIDQuMCwgQlNELCB3aXRoIFN1bkxpbmsgWC4yNSwgbWFrZSBzdW5vczR4 MjUKLSMgPyBmb3IgU3VuIHdpdGggU3VuT1MgNC4xIG9yIDQuMS4xLCBCU0QgZW52aXJvbm1lbnQs ICJtYWtlIHN1bm9zNDEiCi0jICAgICBvciAibWFrZSBzdW5vczQxYyIgKGN1cnNlcykgb3IgIm1h a2Ugc3Vub3M0MWdjYyIgKGNvbXBpbGUgd2l0aCBnY2MpCi0jID8gZm9yIFN1biB3aXRoIFN1bk9T IDQuMS54LCBCU0QsIHdpdGggU3VuTGluayBYLjI1IDcuMDAgb3IgZWFybGllciwKLSMgICAgICJt YWtlIHN1bm9zNDF4MjUiIG9yICJtYWtlIHN1bm9zNDF4MjVjIiAoY3Vyc2VzKQotIyA/IGZvciBT dW4gd2l0aCBTdW5PUyA0LjEsIDQuMS4xLCBBVCZUIFN5cyBWIFIzIGVudmlyb25tZW50LCAibWFr ZSBzdW5vczQxczUiCi0jID8gZm9yIFN1biB3aXRoIFN1bk9TIDQuMS4yLCAibWFrZSBzdW5vczQx IiBvciBhbnkgb2YgaXRzIHZhcmlhdGlvbnMuCi0jICAgICBOT1RFOiAgQWxsIFN1bk9TIDQueCBz eXN0ZW1zIC0tIFNoYXJlZCBsaWJyYXJpZXMgYXJlIHVzZWQgYnkgZGVmYXVsdC4KLSMgICAgICAg SWYgdGhpcyBjYXVzZXMgcHJvYmxlbXMsIGFkZCAtQnN0YXRpYyB0byBDRkxBR1MuCi0jICAgICBO T1RFMjogV2hlbiBidWlsZGluZyBDLUtlcm1pdCB1bmRlciBTdW5PUyBmb3IgdGhlIEJTRCB1bml2 ZXJzZSwKLSMgICAgICAgYnV0IC91c3IvNWJpbi9jYyBpcyBhaGVhZCBvZiAvdXNyL3VjYi9jYyBp biB5b3VyIFBBVEgsIGFkZAotIyAgICAgICAiQ0M9L3Vzci91Y2IvY2MgQ0MyPS91c3IvdWNiL2Nj IiB0byB0aGUgbWFrZSBlbnRyeS4KLSMgICAgIE5PVEUzOiBJZiBhbiBleGVjdXRhYmxlIGJ1aWx0 IG9uIG9uZSB0eXBlIG9mIFN1biBoYXJkd2FyZSBkb2VzIG5vdCB3b3JrCi0jICAgICAgIG9uIGFu b3RoZXIgdHlwZSwgcmVidWlsZCB0aGUgcHJvZ3JhbSBmcm9tIHNvdXJjZSBvbiB0aGUgdGFyZ2V0 IG1hY2hpbmUuCi0jICAgZm9yIFN1biB3aXRoIFNvbGFyaXMgMS54IHVzZSBTdW5PUyA0LjEgZW50 cmllcy4KLSMgICBmb3IgU3VuIHdpdGggU29sYXJpcyAyLjAgYW5kIGhpZ2hlciB1c2UgU29sYXJp cyBlbnRyaWVzLgotIyArIGZvciBTdW4gU1BBUkMgd2l0aCBMaW51eCwgIm1ha2UgbGludXgiCi0j ID8gZm9yIFN1biBTUEFSQyB3aXRoIE9QRU5TVEVQL01hY2ggNC4xLCAibWFrZSBuZXh0cXVhZGZh dCIKLSMgPyBmb3IgU3VuIFNQQVJDIHdpdGggT1BFTlNURVAvTWFjaCA0LjIsICJtYWtlIG9wZW5z dGVwNDIiCi0jIC0gZm9yIFRhbmR5IDE2LzYwMDAgd2l0aCBYZW5peCAzLjAsICJtYWtlIHRyczE2 IiAoQy1LZXJtaXQgNy4wIGlzIHRvbyBiaWcpCi0jID8gZm9yIFRla3Ryb25peCA2MTMwLzQxMzIv NDN4eCAoZS5nLjQzMDEpIHdpdGggVVRlayBPUywgIm1ha2UgdXRlayIKLSMgICAgIG9yIChmb3Ig bW9kZWxzIHdpdGhvdXQgaGFyZHdhcmUgZmxvdyBjb250cm9sKSwgIm1ha2UgdXRla25vaHdmYyIK LSMgPyBmb3IgVGVrdHJvbml4IFhEODggc2VyaWVzIHdpdGggVVRla1YgT1MsICJtYWtlIHV0ZWt2 cjMiCi0jID8gZm9yIFRyaSBTdGFyIEZsYXNoIENhY2hlIHdpdGggRXNpeCBTVlIzLjIsICJtYWtl IHN5czVyMyIKLSMgTk9URTogVGhlIFRydTY0IGJ1aWxkcyBoYXZlIGJlZW4gZmFpbGluZyBzaW5j ZSAyMDEwLCBidXQgIm1ha2UgZGVjLW9zZiIgaXMgT0sKLSMgPyBmb3IgVHJ1NjQgVU5JWCA0LjBF LCAibWFrZSB0cnU2NC00MGUiCi0jID8gZm9yIFRydTY0IFVOSVggNC4wRiwgIm1ha2UgdHJ1NjQt NDBmIgotIyA/IGZvciBUcnU2NCBVTklYIDQuMEcsICJtYWtlIHRydTY0LTQwZyIKLSMgPyBmb3Ig VHJ1NjQgVU5JWCA1LjBBLCAibWFrZSB0cnU2NC01MGEiCi0jID8gZm9yIFRydTY0IFVOSVggNS4x QSwgIm1ha2UgdHJ1NjQtNTFhIgotIyA/IGZvciBUcnU2NCBVTklYIDUuMUIsICJtYWtlIHRydTY0 LTUxYiIKLSMgPyBmb3IgVW5pc3RhciwgIm1ha2Ugc3lzNSIKLSMgPyBmb3IgVW5pc3lzIFMvNDA0 MCA2ODA0MCBDVElYIFNWUjMuMiA2LjQuMSwgIm1ha2UgY3RpeCIgb3IgIm1ha2Ugc3lzNXIzIgot IyA/IGZvciBVbmlzeXMgVTUwMDAgVU5JWCBTVlIzIDYueCwgIm1ha2Ugc3lzNXIzIiBvciAibWFr ZSBzeXM1cjNjIgotIyA/IGZvciBVbmlzeXMgVTYwMDAgVU5JWCBTVlI0IDEueCwgIm1ha2Ugc3lz NXI0bngiIG9yICJtYWtlIHN5czVyNG54bmV0YyIKLSMgICBmb3IgVW5pc3lzIC4uLiAoYWxzbyBz ZWUgU3BlcnJ5KQotIyAgIGZvciBVbml2ZWwgLSBzZWUgVW5peFdhcmUKLSMgICBmb3IgVW5peHdh cmUgLSBzZWUgU0NPCi0jID8gZm9yIFZhbGlkIFNjYWxkc3RhciwgIm1ha2UgdmFsaWQiCi0jID8g Zm9yIFdoaXRlY2hhcGVsIE1HMDEgR2VuaXggMS4zLCAibWFrZSB3aGl0ZSIKLSMgPyBmb3IgWmls b2cgWkVVUyAzLjIxLCAibWFrZSB6aWxvZyIKLSMKLSMgVGhlIHJlc3VsdCBzaG91bGQgYmUgYSBy dW5uYWJsZSBwcm9ncmFtIGNhbGxlZCAid2VybWl0IiBpbiB0aGUgY3VycmVudAotIyBkaXJlY3Rv cnkuICBBZnRlciBzYXRpc2ZhY3RvcnkgdGVzdGluZywgeW91IGNhbiByZW5hbWUgd2VybWl0IHRv ICJrZXJtaXQiCi0jIGFuZCBwdXQgaXQgaW4gc29tZSBkaXJlY3RvcnkgdGhhdCdzIGluIGV2ZXJ5 Ym9keSdzIFBBVEgsIHN1Y2ggYXMKLSMgL3Vzci9sb2NhbCBvciAvb3B0L2xvY2FsLgotIwotIyBU byByZW1vdmUgaW50ZXJtZWRpYXRlIGFuZCBvYmplY3QgZmlsZXMsICJtYWtlIGNsZWFuIi4KLSMg SWYgeW91ciBDIGNvbXBpbGVyIHByb2R1Y2VzIGZpbGVzIHdpdGggYW4gZXh0ZW5zaW9uIG90aGVy IHRoYW4gIm8iLAotIyB0aGVuICJtYWtlIGNsZWFuIEVYVD11IiwgIm1ha2UgY2xlYW4gRVhUPXMi LCBvciB3aGF0ZXZlci4KLSMKLSMgVG8gcnVuIGxpbnQgb24gdGhlIHNvdXJjZSBmaWxlcywgIm1h a2UgbGludHN1biIsICJtYWtlIGxpbnRic2QiLAotIyAibWFrZSBsaW50czUiLCBhcyBhcHByb3By aWF0ZS4KLSMKLSMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jIFNFQ1VSRSBUQVJH RVRTCi0jCi0jIEJlZ2lubmluZyB3aXRoIEMtS2VybWl0IDcuMCwgc2VjdXJlIHRhcmdldHMgYXJl IGluY2x1ZGVkLCBhcyBhcmUgdGhlCi0jIHNvdXJjZSBtb2R1bGVzIChja3VhdCouW2NoXSwgY2tf Ki5bY2hdKSBuZWVkZWQgdG8gYnVpbGQgdGhlbS4gIFNlY3VyZQotIyB0YXJnZXQgbmFtZXMgYXJl IGxpa2UgdGhlIHJlZ3VsYXIgbmFtZXMsIGJ1dCB3aXRoIHNlY3VyaXR5IGZlYXR1cmVzCi0jIGlu ZGljYXRlZCBieSBwbHVzICgrKSBzaWducy4gIFRoZSBmZWF0dXJlcyBhcmU6Ci0jCi0jIGtyYjQg ICAgIE1JVCBLZXJiZXJvcyBJVgotIyBrcmI1ICAgICBNSVQgS2VyYmVyb3MgVgotIyBvcGVuc3Ns ICBPcGVuU1NMIChTU0wvVExTKQotIyB6bGliICAgICBaTElCIGNvbXByZXNzaW9uIGZvciBTU0wv VExTCi0jIHNycCAgICAgIFN0YW5mb3JkIFNlY3VyZSBSZW1vdGUgUGFzc3dvcmQKLSMgcGFtICAg ICAgUEFNIChwbHVnZ2FibGUgYXV0aGVudGljYXRpb24gbW9kdWxlKQotIyBzaGFkb3cgICBTaGFk b3cgUGFzc3dvcmQgRmlsZQotIwotIyBZb3UgY2FuIGJ1aWxkIHRoZXNlIHRhcmdldHMgaWYgeW91 IGhhdmUgdGhlIEtlcm1pdCBzb3VyY2UgZmlsZXMgYW5kIHRoZQotIyByZXF1aXJlZCBsaWJyYXJp ZXMgKEtlcmJlcm9zLCBPcGVuU1NMLCBTUlAsIGV0YykgYW5kIGhlYWRlciBmaWxlcy4gIFNlZToK LSMgICBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2VjdXJpdHkuaHRtbAotIyBmb3Ig c3BlY2lmaWMgZGV0YWlscyByZWdhcmRpbmcgc3VwcG9ydGVkIHZlcnNpb25zLgotIwotIyBOT1RF OiBPcGVuU1NMIDAuOS42IGFuZCBlYXJsaWVyIGFyZSBub3QgY29tcGF0aWJsZSB3aXRoIDAuOS43 IGFuZCBsYXRlci4KLSMgQy1LZXJtaXQgY29kZSB3YXMgb3JpZ2luYWxseSBkZXNpZ25lZCBmb3Ig MC45LjYuICBUbyBidWlsZCB3aXRoIDAuOS43IHlvdQotIyBtdXN0IGFkZCAtRE9QRU5TU0xfMDk3 IHRvIGF2b2lkIG1pc3Npbmcgc3ltYm9scyBpbiB0aGUgREVTIGxpYnJhcnkgYW5kIHRvCi0jIHVz ZSB0aGUgZW50cnkgcG9pbnRzIHRoYXQgd2VyZSByZW5hbWVkIHRvIGF2b2lkIGNvbmZsaWN0IHdp dGggS2VyYmVyb3MgNC4KLSMgSWYgeW91IGhhdmUgT3BlblNTTCAwLjkuOCwgYWRkIC1ET1BFTlNT TF8wOTgsIHdoaWNoIGlzIGEgc3lub255bSBmb3IKLSMgLURPUEVOU1NMXzA5Ny4gIElmIHlvdSBo YXZlIDEuMC4wIG9yIGxhdGVyLCBhZGQgLURPUEVOU1NMXzEwMCwgd2hpY2ggaXMKLSMgYW5vdGhl ciBzeW5vbnltLgotCi0jIEluIE9wZW5TU0wgYnVpbGRzIGFkZCAtbGRsIGlmIHlvdSBnZXQgdW5y ZXNvbHZlZCByZWZlcmVuY2VzIGZvcgotIyBkbG9wZW4sIGRsY2xvc2UsIGRsc3ltLCBhbmQvb3Ig ZGxlcnJvci4KLSMKLSMgSW4gb3JkZXIgdG8gYnVpbGQgYSBzZWN1cmUgdmVyc2lvbiBvZiBLZXJt aXQsIHlvdSBuZWVkIHRvIGtub3cgdGhlIGxvY2F0aW9uCi0jIG9mIHRoZSBoZWFkZXIgKGluY2x1 ZGUpIGZpbGVzIGFuZCBsaWJyYXJpZXMgZm9yIHRoZSBkZXNpcmVkIGZvcm0gb2YKLSMgc2VjdXJp dHkuICBVbmxlc3MgeW91IHNwZWNpZnkgYSBsb2NhdGlvbiwgdGhpcyBtYWtlZmlsZSBsb29rcyBp biAvdXNyL2xvY2FsCi0jIGFuZCBpZiB0aGUgcmVxdWlyZWQgZmlsZXMgYXJlIG5vdCBmb3VuZCwg dGhlIGJ1aWxkIGZhaWxzLgotIwotIyBJZiB0aGUgc2VjdXJlIGhlYWRlcnMgYW5kIGxpYnJhcmll cyBhcmUgbm90IG9uIHlvdXIgY29tcHV0ZXIsIHlvdSBoYXZlCi0jIHRvIGRvd25sb2FkIGFuZCBp bnN0YWxsIHRoZW0sIGZvciBleGFtcGxlIGZyb20gaHR0cDovL3d3dy5vcGVuc3NsLm9yZyAuCi0j Ci0jIFRoZSBmb2xsb3dpbmcgc3ltYm9scyBhcmUgdXNlZCB0byBzcGVjaWZ5IGxpYnJhcnkgYW5k IGhlYWRlciBmaWxlIGxvY2F0aW9uczoKLSMgCi1wcmVmaXggID0gL3Vzci9sb2NhbAotc3Jwcm9v dCA9ICQocHJlZml4KQotc3Nscm9vdCA9ICQocHJlZml4KQotbWFucm9vdCA9ICQocHJlZml4KQot Ci1LNExJQj0tTC91c3Iva2VyYmVyb3MvbGliCi1LNElOQz0tSS91c3Iva2VyYmVyb3MvaW5jbHVk ZQotSzVMSUI9LUwvdXNyL2tlcmJlcm9zL2xpYgotSzVJTkM9LUkvdXNyL2tlcmJlcm9zL2luY2x1 ZGUKLVNSUExJQj0tTCQoc3Jwcm9vdCkvbGliCi1TUlBJTkM9LUkkKHNycHJvb3QpL2luY2x1ZGUK LVNTTExJQj0tTCQoc3Nscm9vdCkvc3NsL2xpYgotU1NMSU5DPS1JJChzc2xyb290KS9zc2wvaW5j bHVkZQotCi0jIFRvIG92ZXJyaWRlIHRoZXNlIGFzc2lnbm1lbnRzOyBmb3IgZXhhbXBsZSwgaWYg eW91ciBPcGVuU1NMIGZpbGVzIGFyZQotIyBub3QgaW4gL3Vzci9sb2NhbC9zc2wsIGludm9rZSB0 aGUgZGVzaXJlZCB0YXJnZXQgbGlrZSB0aGlzOgotIyAKLSMgIG1ha2Ugc29sYXJpczkrb3BlbnNz bCAiU1NMSU5DPS1JL29wdC9vcGVuc3NsLTAuOS44ay9pbmNsdWRlIiBcCi0jICAgIlNTTExJQj0t TC9vcHQvb3BlbnNzbC0wLjkuOGsvbGliIgotIwotIyAoZG9uJ3Qgc2V0IHRoZSB2YXJpYWJsZXMg YW5kIHRoZW4gZG8gIm1ha2UgLWUiIGJlY2F1c2UgdGhhdCBicmVha3MgCi0jIGNoYWluaW5nIG9m IG1ha2VmaWxlIHRhcmdldHMuKQotIwotIyBIZXJlIGFyZSBzb21lIHVwLXRvLWRhdGUgc2VjdXJl IHRhcmdldHMgYXMgb2YgU2VwIDIwMDk6IAotIwotIyBhaXgrb3BlbnNzbDogICAgICAgICAgICAg ICAgICAgICAgICBJQk0gQUlYIDQuMiBvciBsYXRlciB3aXRoIE9wZW5TU0wKLSMgZnJlZWJzZDQ0 K3NycCtvcGVuc3NsICAgICAgICAgICAgICAgRnJlZUJTRCA0LjQgd2l0aCBTUlAgYW5kIE9wZW5T U0wKLSMgZnJlZWJzZDUwK29wZW5zc2wgICAgICAgICAgICAgICAgICAgRnJlZUJTRCA1LjAgd2l0 aCBPcGVuU1NMCi0jIGhwdXgxMTAwbytvcGVuc3NsOiAgICAgICAgICAgICAgICAgIEhQLVVYIDEx Lnh4IHdpdGggT3BlblNTTAotIyBocHV4MTAwMGdjYytvcGVuc3NsOiAgICAgICAgICAgICAgICBI UC1VWCAxMC54eCB3aXRoIE9wZW5TU0wgKGJ1aWxkIHdpdGggZ2NjKQotIyBocHV4MTEwMGdjYytv cGVuc3NsOiAgICAgICAgICAgICAgICBIUC1VWCAxMS54eCB3aXRoIE9wZW5TU0wgKGJ1aWxkIHdp dGggZ2NjKQotIyBpcml4Nngra3JiNTogICAgICAgICAgICAgICAgICAgICAgICBJUklYIDYueCB3 aXRoIEtlcmJlcm9zIFYKLSMgaXJpeDY1K2tyYjU6ICAgICAgICAgICAgICAgICAgICAgICAgZXRj IGV0Yy4uLgotIyBzb2xhcmlzOStvcGVuc3NsICAgICAgICAgICAgICAgICAgICBTb2xhcmlzIDks MTAsIG9yIDExIHdpdGggT3BlbnNzbCAoU3VuIGNjKQotIyBzb2xhcmlzOWcrb3BlbnNzbCAgICAg ICAgICAgICAgICAgICBTb2xhcmlzIDksMTAsIG9yIDExIHdpdGggT3BlbnNzbCAoZ2NjKQotIyBs aW51eCtzc2wgICAgICAgICAgICAgICAgICAgICAgICAgICBPcGVuU1NMIG9ubHkKLSMgbGludXgr a3JiNStzc2wgICAgICAgICAgICAgICAgICAgICAgTGludXggd2l0aCBLZXJiZXJvcyA1IGFuZCBP cGVuU1NMCi0jIGxpbnV4K2tyYjU6ICAgICAgICAgICAgICAgICAgICAgICAgIEtlcmJlcm9zIDUg b25seQotIyAKLSMgVGhlIGZvbGxvd2luZyBzZWN1cmUgTGludXggdGFyZ2V0cyBoYXZlIG5vdCBi ZWVuIHVwZGF0ZWQgb3IgdGVzdGVkIHJlY2VudGx5LgotIyBsaW51eCtrcmI1K2tyYjQ6Ci0jIGxp bnV4K3NycDoKLSMgbGludXgrc3JwK3BhbToKLSMgbGludXgrc3JwK2dtcDoKLSMgbGludXgrc3Jw K2dtcCtuby1kZXM6Ci0jIGxpbnV4K3NycCtnbXAtZXhwb3J0OgotIyBsaW51eCtzcnArZ21wK3Bh bToKLSMgbGludXgrc2hhZG93K3BhbToKLSMgbGludXgrb3BlbnNzbDoKLSMgbGludXgrb3BlbnNz bCtzaGFkb3c6Ci0jIGxpbnV4K29wZW5zc2wremxpYitzaGFkb3crcGFtOgotIyBsaW51eCtzcnAr b3BlbnNzbDoKLSMgbGludXgra3JiNStrcmI0K3NycDoKLSMgbGludXgra3JiNStrcmI0K3NycCtv cGVuc3NsOgotIyBsaW51eCtrcmI1K2tyYjQrb3BlbnNzbDoKLSMgbGludXgra3JiNStrcmI0K29w ZW5zc2wrc2hhZG93OgotIyBsaW51eCtrcmI1K2tyYjQrb3BlbnNzbCt6bGliK3NoYWRvdzoKLSMg bGludXgra3JiNStrcmI0K3NycC1leHBvcnQ6Ci0jIGxpbnV4K2tyYjUra3JiNCtzcnArcGFtOgot IyBsaW51eCtrcmI1K2tyYjQrc3JwK29wZW5zc2wrcGFtLWRlYnVnOgotIyBsaW51eCtrcmI1K2ty YjQrc3JwK29wZW5zc2wrcGFtOgotIyBsaW51eCtrcmI1K2tyYjQrc3JwK29wZW5zc2wremxpYitw YW06Ci0jIGxpbnV4K2tyYjUra3JiNCtvcGVuc3NsK3NoYWRvdytwYW06Ci0jIGxpbnV4K2tyYjUr b3BlbnNzbCt6bGliK3NoYWRvdytwYW06Ci0jIAotIyBUaGUgZm9sbG93aW5nIGhhdmUgbm90IGJl ZW4gdGVzdGVkIHJlY2VudGx5IGVpdGhlciBhbmQgbWlnaHQKLSMgbmVlZCBhZGp1c3RtZW50Lgot IwotIyBtYWNvc3gra3JiNStzc2w6ICAgICBNYWMgT1MgWCAxMC4zLjkgb3IgbGF0ZXIgKyBPcGVu U1NMIGFuZCBLZXJiZXJvcyA1Ci0jIG1hY29zeDEwMytzZWN1cmU6ICAgIFRoaXMgb25lIGlzIHBy b2JhYmx5IHJlZHVuZGFudAotIyBuZXRic2Qrb3BlbnNzbDogICAgICBOZXRCU0Qgd2l0aCBPcGVu U1NMCi0jIG9wZW5ic2QzMCtzc2w6ICAgICAgIE9wZW5CU0QgMy4wIHdpdGggT3BlblNTTAotIyBy ZWRoYXQ3MSxyZWRoYXQ3MixyZWRoYXQ3MyxyZWRoYXQ4MCxyZWRoYXQ5IChLcmI1LE9wZW5TU0ws U2hvd2RvdyxQQU0sWmxpYikKLSMgc2NvMzJ2NTAwbmV0K3NzbDoKLSMgc2NvMzJ2NTA1bmV0K3Nz bDoKLSMgc29sYXJpczJ4K2tyYjQ6Ci0jIHNvbGFyaXMyeGcra3JiNDoKLSMgc29sYXJpczJ4Zytv cGVuc3NsK3BhbStzaGFkb3c6Ci0jIHNvbGFyaXMyeGcrb3BlbnNzbCt6bGliK3BhbStzaGFkb3c6 Ci0jIHNvbGFyaXMyeGcra3JiNStrcmI0K29wZW5zc2wrc2hhZG93OgotIyBzb2xhcmlzMjUra3Ji NDoKLSMgc29sYXJpczI1ZytrcmI0OgotIyBzb2xhcmlzMjZnK29wZW5zc2w6Ci0jIHNvbGFyaXM4 ZytvcGVuc3NsK3psaWIrcGFtK3NoYWRvdzoKLSMgc29sYXJpczhnK2tyYjQ6Ci0jIHNvbGFyaXM5 ZytvcGVuc3NsK3psaWIrcGFtK3NoYWRvdzoKLSMgc29sYXJpczlnK29wZW5zc2wrc2hhZG93K3Bh bSt6bGliCi0jIHN1bm9zNDFnY2Mra3JiNDogICAgICAgICAgICAgICAgICAgIFN1bk9TIDQuMSBi dWlsdCB3aXRoIGdjYyB3aXRoIEtlcmJlcm9zIElWCi0jIHN1bm9zNDFnY2Mrb3BlbnNzbDogICAg ICAgICAgICAgICAgIFN1bk9TIDQuMSBidWlsdCB3aXRoIGdjYyB3aXRoIE9wZW5TU0wKLSMgc3Vu b3M0MWdjYytrcmI0K29wZW5zc2w6ICAgICAgICAgICAgLi4ud2l0aCBLZXJiZXJvcyBJViBhbmQg T3BlblNTTAotIyBzdW5vczQxZ2NjK2tyYjQrb3BlbnNzbCt6bGliOiAgICAgICBkaXR0bywgcGx1 cyBaTElCIGNvbXByZXNzaW9uCi0jIHN1bm9zNDFnY2Mra3JiNCtzcnArb3BlbnNzbCt6bGliOiAg IGRpdHRvLCBwbHVzIFNSUAotIyBzdW5vczQxZ2NjK3NycCtvcGVuc3NsK3psaWI6Ci0jIHRydTY0 LTUxYi1vcGVuc3NsOiAgICAgICAgICAgICAgICAgIFRydTY0IChEaWdpdGFsKSBVbml4IDUuMUIg d2l0aCBPcGVuU1NMCi0jIHV3N3NzbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaXh3 YXJlIDcgd2l0aCBTU0wKLSMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIwotIyAgQ29tcGlsZSBhbmQg TGluayB2YXJpYWJsZXM6Ci0jCi0jICBFWFQgaXMgdGhlIGV4dGVuc2lvbiAoZmlsZSB0eXBlKSBm b3Igb2JqZWN0IGZpbGVzLCBub3JtYWxseSBvLgotIyAgU2VlIE1JTklYIGVudHJ5IGZvciB3aGF0 IHRvIGRvIGlmIGFub3RoZXIgZmlsZXR5cGUgbXVzdCBiZSB1c2VkLgotIwotRVhUPW8KLSNMTktG TEFHUz0KLVNIQVJFRExJQj0KLUNDPSBjYwotQ0MyPSBjYwotTUFLRT0gbWFrZQotU0hFTEw9L2Jp bi9zaAotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgKEFuY2llbnQpIFVOSVggVjctc3BlY2lmaWMg dmFyaWFibGVzLgotIyBUaGVzZSBhcmUgc2V0IHVwIGZvciBQZXJraW4tRWxtZXIgMzIzMCBWNyBV bml4OgotIwotUFJPQz1wcm9jCi1ESVJFQ1Q9Ci1OUFJPQz1ucHJvYwotTlBUWVBFPWludAotQk9P VEZJTEU9L2VkaXRpb243Ci0jCi0jICggRm9yIG9sZCBUYW5keSBUUlMtODAgTW9kZWwgMTZBIG9y IDYwMDAgVjctYmFzZWQgWGVuaXgsIHVzZSBQUk9DPV9wcm9jLAotIyAgIERJUkVDVD0tRERJUkVD VCwgTlBST0M9X05wcm9jLCBOUFRZUEU9c2hvcnQsIEJPT1RGSUxFPS94ZW5peCApCi0jCi0KLSMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIwotIyBTQU1QTEUgSU5TVEFMTEFUSU9OIFNDUklQVAotIwotIyBNb2Rp ZnkgdG8gc3VpdCB5b3VyIG93biBjb21wdXRlcidzIGZpbGUgb3JnYW5pemF0aW9uIGFuZCBwZXJt aXNzaW9ucy4gIElmCi0jIHlvdSBkb24ndCBoYXZlIHdyaXRlIGFjY2VzcyB0byB0aGUgZGVzdGlu YXRpb24gZGlyZWN0b3JpZXMsICJtYWtlIGluc3RhbGwiCi0jIGZhaWxzLiAgSW4gbW9zdCBjYXNl cywgYSByZWFsIGluc3RhbGxhdGlvbiBhbHNvIHJlcXVpcmVzIHlvdSB0byBjaG93biAvCi0jIGNo Z3JwIHRoZSBLZXJtaXQgYmluYXJ5IGZvciB0aGUgVVVDUCBsb2NrZmlsZSBhbmQvb3IgdHR5IGRl dmljZXMsIGFuZAotIyBwZXJoYXBzIGFsc28gdG8gY2htb2QgK3MgdGhlIGNvcnJlc3BvbmRpbmcg cGVybWlzc2lvbiBmaWVsZHMuCi0jCi0jIERlZmF1bHQgYmluYXJ5LCBtYW4sIGFuZCBkb2MgZGly ZWN0b3JpZXMgYXJlIHN1cHBsaWVkIGJlbG93LiAgWW91IGNhbgotIyBvdmVycmlkZSB0aGVtIGlu IHlvdXIgJ21ha2UnIGNvbW1hbmQuICBFeGFtcGxlczoKLSMKLSMgICBtYWtlIGluc3RhbGwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWNjZXB0IGRlZmF1bHRzLgotIyAgIG1h a2UgIklORk9ESVI9L3Vzci9zaGFyZS9saWIva2VybWl0IiBpbnN0YWxsICAgIyBPdmVycmlkZSBJ TkZPRElSIGRlZmF1bHQuCi0jCi0jIFlvdSBjYW4gYWxzbyBidWlsZCBhbmQgaW5zdGFsbCBpbiBv bmUgc3RlcCwgZS5nLjoKLSMKLSMgICBtYWtlIGxpbnV4IGluc3RhbGwKLSMKLSMgSWYgeW91IHVz ZSB0aGUgJ2luc3RhbGwnIHRhcmdldCB0byBpbnN0YWxsIEMtS2VybWl0LCBpdCBjcmVhdGVzIGFu Ci0jIFVOSU5TVEFMTCBzY3JpcHQgdGhhdCBjYW4gYmUgdXNlZCB0byB1bmluc3RhbGwgaXQuCi0j Ci1XRVJNSVQgPSBtYWtld2hhdAotQklOQVJZID0gd2VybWl0Ci1ERVNURElSID0KLUJJTkRJUiA9 ICQocHJlZml4KS9iaW4KLU1BTkRJUiA9ICQobWFucm9vdCkvbWFuL21hbjEKLU1BTkVYVCA9IDEK LVNSQ0RJUiA9Ci1JTkZPRElSID0KLUNFUlRESVIgPQotCi1URVhURklMRVMgPSBDT1BZSU5HLlRY VCBja2Nid3IudHh0IGNrdWJ3ci50eHQgY2t1aW5zLnR4dCBja2NjZmcudHh0IFwKLQkJY2tjcGxt LnR4dCBja2VybWl0LmluaSBja2VybW9kLmluaSBja2VybWl0NzAudHh0IGNrZXJtaXQ4MC50eHQK LQotQUxMID0gJChXRVJNSVQpCi0KLWFsbDogJChBTEwpCi0KLS5jLm86Ci0JJChDQykgJChDRkxB R1MpIC1ES1RBUkdFVD1cIiQoS1RBUkdFVClcIiAtYyAkPAotCi0jQ2xlYW4gdXAgaW50ZXJtZWRp YXRlIGFuZCBvYmplY3QgZmlsZXMKLWNsZWFuOgotCUBlY2hvICdSZW1vdmluZyBvYmplY3QgZmls ZXMuLi4nCi0JLXJtIC1mIGNrY21haS4kKEVYVCkgY2t1Y21kLiQoRVhUKSBja3V1c3IuJChFWFQp IGNrdXVzMi4kKEVYVCkgXAotY2t1dXMzLiQoRVhUKSBja3V1czQuJChFWFQpIGNrdXVzNS4kKEVY VCkgY2tjcHJvLiQoRVhUKSBja2NmbnMuJChFWFQpIFwKLWNrY2ZuMi4kKEVYVCkgY2tjZm4zLiQo RVhUKSBja3V4bGEuJChFWFQpIGNrdWNvbi4kKEVYVCkgY2t1dGlvLiQoRVhUKSBcCi1ja3VmaW8u JChFWFQpIGNrdWRpYS4kKEVYVCkgY2t1c2NyLiQoRVhUKSBja3dhcnQuJChFWFQpIGNrdXVzeC4k KEVYVCkgXAotY2t1dXN5LiQoRVhUKSBja2NuZXQuJChFWFQpIGNrdXVzNi4kKEVYVCkgY2t1dXM3 LiQoRVhUKSBja3VzaWcuJChFWFQpIFwKLWNrdWNucy4kKEVYVCkgY2tjbWRiLiQoRVhUKSBja3Vh dGguJChFWFQpIGNrY3RlbC4kKEVYVCkgY2tjbGliLiQoRVhUKSBcCi1ja2N1bmkuJChFWFQpIGNr X2NycC4kKEVYVCkgY2tfc3NsLiQoRVhUKSBja3VwdHkuJChFWFQpIGNrY2Z0cC4kKEVYVCkgXAot Y2tjcHJvLmMgd2FydAotCi1zaG93OgotCUBlY2hvIHByZWZpeD0kKHByZWZpeCkKLQlAZWNobyBz cnByb290PSQoc3Jwcm9vdCkKLQlAZWNobyBzc2xyb290PSQoc3Nscm9vdCkKLQlAZWNobyBtYW5y b290PSQobWFucm9vdCkKLQlAZWNobyBLNExJQj0kKEs0TElCKQotCUBlY2hvIEs0SU5DPSQoSzRJ TkMpCi0JQGVjaG8gSzVMSUI9JChLNUxJQikKLQlAZWNobyBLNUlOQz0kKEs1SU5DKQotCUBlY2hv IFNSUExJQj0kKFNSUExJQikKLQlAZWNobyBTUlBJTkM9JChTUlBJTkMpCi0JQGVjaG8gU1NMTElC PSQoU1NMTElCKQotCUBlY2hvIFNTTElOQz0kKFNTTElOQykKLQlAZXhpdAotCi0jIEluc3RhbGwg Qy1LZXJtaXQgYWZ0ZXIgYnVpbGRpbmcgLS0gSU1QT1JUQU5UOiBSZWFkIHRoZSBpbnN0cnVjdGlv bnMgYWJvdmUKLSMgKFNBTVBMRSBJTlNUQUxMQVRJT04gU0NSSVBUKS4gIEZvciBTU0wvVExTIHZl cnNpb25zLCBjYV9jZXJ0cy5wZW0gZmlsZQotIyBzaG91bGQgYmUgaW5zdGFsbGVkIGluIHRoZSBh cHByb3ByaWF0ZSBwbGFjZSBmb3IgeW91ciBPcGVuU1NMIGxpYnJhcnksIGUuZy46Ci0jCi0jICAg Y3AgY2FfY2VydHMucGVtIC91c3IvbG9jYWwvc3NsLwotIyAgIGNwIGNhX2NlcnRzLnBlbSAvdXNy L3NoYXJlL3NzbC8KLSMKLSMgVG8gbWFrZSBzdXJlICdtYW4nIG5vdGljZXMgdGhlIG5ldyBzb3Vy Y2UgZmlsZSBhbmQgZG9lc24ndCBrZWVwCi0jIHNob3dpbmcgdGhlIG9sZCBmb3JtYXR0ZWQgdmVy c2lvbiwgcmVtb3ZlIHRoZSBvbGQgZm9ybWF0dGVkIHZlcnNpb24sCi0jIHNvbWV0aGluZyBsaWtl IHRoaXM6Ci0jCQlybSAtZiAkKE1BTkRJUikvLi4vY2F0JChNQU5FWFQpL2tlcm1pdC4kKE1BTkVY VCkKLSMgb3IgdGhpcyAod2hpY2ggcmVxdWlyZXMgQ0FURElSIHRvIGJlIGRlZmluZWQpOgotIwkJ cm0gLWYgJChDQVRESVIpL2tlcm1pdC4kKE1BTkVYVCkKLSMKLSMgQXMgb2YgQy1LZXJtaXQgOC4w LjIwNSB0aGlzIHRhcmdldCBhbHNvIGJ1aWxkcyBhbiBVTklOU1RBTEwgc2NyaXB0LCBhbmQKLSMg c28gaXQgbWlnaHQgYmUgdG9vIGxvbmcgZm9yIHNvbWUgb2xkIEJvdXJuZSBzaGVsbHMsIGluIHdo aWNoIGNhc2UgeW91IGNhbgotIyB1c2UgYSBkaWZmZXJlbnQgc2hlbGw6Ci0jCi0jICAgbWFrZSBT SEVMTD1rc2ggaW5zdGFsbAotIyAgIG1ha2UgU0hFTEw9L2Jpbi9wb3NpeC9zaCBpbnN0YWxsCi0j Ci1pbnN0YWxsOgotCUBlY2hvIEluc3RhbGxpbmcgQy1LZXJtaXQgdmVyc2lvbiAkKENLVkVSKS4u LjtcCi0Jcm0gLWYgVU5JTlNUQUxMO1wKLQlleGVjIDM+Li9VTklOU1RBTEw7XAotCWVjaG8gIiMg Qy1LZXJtaXQgVU5JTlNUQUxMIHNjcmlwdCIgPiYzO1wKLQllY2hvICIjIGBkYXRlYFxuIiA+JjM7 XAotCWVjaG8gIkNLVkVSPSQoQ0tWRVIpIiA+JjM7XAotCWVjaG8gIlByTiBVbmluc3RhbGxpbmcg Qy1LZXJtaXQgdmVyc2lvbiAkKENLVkVSKS4uLiIgPiYzO1wKLQllY2hvIERFU1RESVI9JChERVNU RElSKTtcCi0JaWYgdGVzdCAtbiAiJChERVNURElSKSI7IHRoZW5cCi0JCWlmIHRlc3QgLWQgJChE RVNURElSKTsgdGhlblwKLQkJCWVjaG8gICIkKERFU1RESVIpIGV4aXN0cy4uLlxuIjtcCi0JCWVs c2VcCi0JCQllY2hvICJDcmVhdGluZyAkKERFU1RESVIpLi4uIjtcCi0JCQlERVNURElSPWBlY2hv ICQoREVTVERJUikgfCBzZWQgJ3MhLyokJCEhJ2A7XAotCQkJbWtkaXIgJCRERVNURElSICB8fCBl eGl0IDE7XAotCQlmaTtcCi0JCWNobW9kIDc1NSAkKERFU1RESVIpIHx8IGV4aXQgMTtcCi0JZmk7 XAotCWVjaG8gQklOQVJZPSQoQklOQVJZKTtcCi0JaWYgdGVzdCAtZiAkKEJJTkFSWSk7IHRoZW5c Ci0JCWxzIC1sICQoQklOQVJZKTtcCi0JZWxzZVwKLQkJZWNobyAiPyQoQklOQVJZKSBub3QgZm91 bmQiO1wKLQkJZXhpdCAxO1wKLQlmaTtcCi0JaWYgdGVzdCAteiAiJChERVNURElSKSQoQklORElS KSI7IHRoZW5cCi0JCWVjaG8gIkJpbmFyeSBkaXJlY3Rvcnkgbm90IHNwZWNpZmllZCI7XAotCQll eGl0IDE7XAotCWZpO1wKLQlpZiB0ZXN0IC1kICQoREVTVERJUikkKEJJTkRJUik7IHRoZW5cCi0J CWVjaG8gICIkKERFU1RESVIpJChCSU5ESVIpIGV4aXN0cy4uLiI7XAotCWVsc2VcCi0JCWVjaG8g IkNyZWF0aW5nICQoREVTVERJUikkKEJJTkRJUikvLi4uIjtcCi0JCW1rZGlyICAgICAkKERFU1RE SVIpJChCSU5ESVIpIHx8IGV4aXQgMTtcCi0JCWNobW9kIDc1NSAkKERFU1RESVIpJChCSU5ESVIp O1wKLQlmaTtcCi0Jcm0gLWYgJChERVNURElSKSQoQklORElSKS9rZXJtaXQ7XAotCWNwICQoQklO QVJZKSAkKERFU1RESVIpJChCSU5ESVIpL2tlcm1pdCB8fCBleGl0IDE7XAotCWNobW9kIDc1NSAg ICAkKERFU1RESVIpJChCSU5ESVIpL2tlcm1pdCB8fCBleGl0IDE7XAotCXJtIC1mICAgICAgICAk KERFU1RESVIpJChCSU5ESVIpL2tlcm1pdC1zc2hzdWI7XAotCWxuIC1zICAgICAgICAkKERFU1RE SVIpJChCSU5ESVIpL2tlcm1pdFwKLQkJICAgICAkKERFU1RESVIpJChCSU5ESVIpL2tlcm1pdC1z c2hzdWIgfHwgZXhpdCAxO1wKLQllY2hvICdzZXQgZmxhZz1mXG5QckMgUmVtb3ZpbmcgYmluYXJp ZXMnID4mMztcCi0JZWNobyAiUm1GICQoREVTVERJUikkKEJJTkRJUikva2VybWl0LXNzaHN1YiIg PiYzO1wKLQllY2hvICJSbUYgJChERVNURElSKSQoQklORElSKS9rZXJtaXQiID4mMztcCi0JaWYg dGVzdCAtZiBja2VybWl0LmluaTsgdGhlblwKLQkJZWNobyAiIyEkKEJJTkRJUikva2VybWl0IiA+ XAotCQkJJChERVNURElSKSQoQklORElSKS9fdG1wLmluaTtcCi0JCWNhdCBja2VybWl0LmluaSA+ PiAkKERFU1RESVIpJChCSU5ESVIpL190bXAuaW5pO1wKLQkJbXYgJChERVNURElSKSQoQklORElS KS9fdG1wLmluaVwKLQkJICAgJChERVNURElSKSQoQklORElSKS9ja2VybWl0LmluaTtcCi0JCWNo bW9kIDc1NSAkKERFU1RESVIpJChCSU5ESVIpL2NrZXJtaXQuaW5pO1wKLQkJZWNobyAiUm1GICQo REVTVERJUikkKEJJTkRJUikvY2tlcm1pdC5pbmkiID4mMztcCi0JZmk7XAotCWVjaG87XAotCWVj aG8gJ0VmTScgPiYzO1wKLQllY2hvICJLZXJtaXQgYmluYXJ5IGluc3RhbGxlZDoiO1wKLQlscyAt bCAkKERFU1RESVIpJChCSU5ESVIpL2tlcm1pdFwKLQkgICAgICAkKERFU1RESVIpJChCSU5ESVIp L2tlcm1pdC1zc2hzdWJcCi0JICAgICAgJChERVNURElSKSQoQklORElSKS9ja2VybWl0LmluaTtc Ci0JZWNobztcCi0JZWNobyAiIFdBUk5JTkc6IElmIEMtS2VybWl0IGlzIHRvIGJlIHVzZWQgZm9y IGRpYWxpbmcgb3V0LCI7XAotCWVjaG8gIiB5b3UgbXVzdCBjaGFuZ2UgaXRzIG93bmVyIGFuZCBn cm91cCBhbmQgcGVybWlzc2lvbnMiO1wKLQllY2hvICIgdG8gbWF0Y2ggdGhlICdjdScgcHJvZ3Jh bS4gIFNlZSB0aGUgY2t1aW5zLnR4dCBmaWxlIjtcCi0JZWNobyAiIGZvciBkZXRhaWxzLiI7XAot CWVjaG87XAotCWVjaG8gTUFORElSPSQoTUFORElSKTtcCi0JaWYgdGVzdCAtbiAiJChERVNURElS KSQoTUFORElSKSI7IHRoZW5cCi0JCWlmIHRlc3QgLWQgJChERVNURElSKSQoTUFORElSKTsgdGhl blwKLQkJCWVjaG8gICIkKERFU1RESVIpJChNQU5ESVIpIGV4aXN0cy4uLiI7XAotCQllbHNlXAot CQkJZWNobyAiQ3JlYXRpbmcgJChNQU5ESVIpLi4uIjtcCi0JCQlta2RpciAkKE1BTkRJUikgfHwg ZXhpdCAxO1wKLQkJCWNobW9kIDc1NSAkKE1BTkRJUikgfHwgZXhpdCAxO1wKLQkJZmk7XAotCQly bSAtZiAkKERFU1RESVIpJChNQU5ESVIpL2tlcm1pdC4kKE1BTkVYVCk7XAotCQljcCBja3VrZXIu bnIgJChERVNURElSKSQoTUFORElSKS9rZXJtaXQuJChNQU5FWFQpIHx8IGV4aXQgMTtcCi0JCWNo bW9kIDY0NCAkKERFU1RESVIpJChNQU5ESVIpL2tlcm1pdC4kKE1BTkVYVCkgfHwgZXhpdCAxO1wK LQkJZWNobyAnc2V0IGZsYWc9ZlxuUHJDIFJlbW92aW5nIG1hbiBwYWdlcycgPiYzO1wKLQkJZWNo byAiUm1GICQoREVTVERJUikkKE1BTkRJUikva2VybWl0LiQoTUFORVhUKSIgPiYzO1wKLQkJZWNo byAnRWZNJyA+JjM7XAotCQllY2hvO1wKLQllbHNlXAotCQllY2hvICJOb3QgaW5zdGFsbGluZyBt YW4gcGFnZSFcbiI7XAotCWZpO1wKLQllY2hvIENFUlRESVI9JChDRVJURElSKTtcCi0JaWYgdGVz dCAtbiAiJChDRVJURElSKSI7IHRoZW5cCi0JCWlmIHRlc3QgLWYgY2FfY2VydHMucGVtOyB0aGVu XAotCQkJaWYgdGVzdCAtZCAkKENFUlRESVIpOyB0aGVuXAotCQkJCWVjaG8gICIkKENFUlRESVIp IGV4aXN0cy4uLiI7XAotCQkJZWxzZVwKLQkJCQllY2hvICJDcmVhdGluZyAkKENFUlRESVIpLi4u IjtcCi0JCQkJbWtkaXIgJChDRVJURElSKSB8fCBleGl0IDE7XAotCQkJCWNobW9kIDc1NSAkKENF UlRESVIpIHx8IGV4aXQgMTtcCi0JCQlmaTtcCi0JCQllY2hvICJJbnN0YWxsaW5nIGNlcnRpZmlj YXRlcyBmaWxlLi4uIjtcCi0JCQljcCBjYV9jZXJ0cy5wZW0gJChDRVJURElSKSB8fCBleGl0IDE7 XAotCQkJZWNobyAnc2V0IGZsYWc9ZicgPiYzO1wKLQkJCWVjaG8gJ1ByQyBSZW1vdmluZyBjZXJ0 aWZpY2F0ZXMgZmlsZScgPiYzO1wKLQkJCWVjaG8gIlJtRiAkKENFUlRESVIpL2NhX2NlcnRzLnBl bSIgPiYzO1wKLQkJCWVjaG8gJ0VmTScgPiYzO1wKLQkJCWVjaG87XAotCQlmaTtcCi0JZWxzZVwK LQkJZWNobyAiTm90IGluc3RhbGxpbmcgY2VydGlmaWNhdGVzIGZpbGUhXG4iO1wKLQlmaTtcCi0J ZWNobyBTUkNESVI9JChERVNURElSKSQoU1JDRElSKTtcCi0JaWYgdGVzdCAtbiAiJChTUkNESVIp IjsgdGhlblwKLQkJZWNobyAiSW5zdGFsbGluZyBzb3VyY2UgZmlsZXMuLi4iO1wKLQkJaWYgdGVz dCAtZCAkKERFU1RESVIpJChTUkNESVIpOyB0aGVuXAotCQkJZWNobyAgIiQoREVTVERJUikkKFNS Q0RJUikgZXhpc3RzLi4uIjtcCi0JCWVsc2VcCi0JCQllY2hvICJDcmVhdGluZyAkKERFU1RESVIp JChTUkNESVIpLy4uLiI7XAotCQkJbWtkaXIgICAgICQoREVTVERJUikkKFNSQ0RJUikgfHwgZXhp dCAxO1wKLQkJCWNobW9kIDc1NSAkKERFU1RESVIpJChTUkNESVIpO1wKLQkJZmk7XAotCQllY2hv ICJDb3B5aW5nIHNvdXJjZSBmaWxlcyB0byAkKERFU1RESVIpJChTUkNESVIpLi4uIjtcCi0JCWVj aG8gJ3NldCBmbGFnPWZcblByQyBSZW1vdmluZyBzb3VyY2UgZmlsZXMnID4mMztcCi0JCWZvciBU ZXh0RmlsZSBpbiBDT1BZSU5HLlRYVCBja1tjdXdfXSouW2N3aF0gbWFrZWZpbGU7IGRvXAotCQkJ Y3AgJCRUZXh0RmlsZSAkKERFU1RESVIpJChTUkNESVIpLyAmJiBlY2hvICIuXGMiO1wKLQkJCWVj aG8gIlJtRiAkKERFU1RESVIpJChTUkNESVIpLyQkVGV4dEZpbGUiID4mMztcCi0JCWRvbmU7IGVj aG87XAotCQllY2hvICdFZk0nID4mMztcCi0JCSggY2QgJChERVNURElSKSQoU1JDRElSKS8gJiZc Ci0JCWxzIC1sIENPUFlJTkcuVFhUIGNrW2N1d19dKi5bY3doXSBtYWtlZmlsZSApO2VjaG87XAot CWVsc2VcCi0JCWVjaG8gIk5vdCBpbnN0YWxsaW5nIHNvdXJjZSBjb2RlIVxuIjtcCi0JZmk7XAot CWVjaG8gSU5GT0RJUj0kKERFU1RESVIpJChJTkZPRElSKTtcCi0JaWYgdGVzdCAtbiAiJChJTkZP RElSKSI7IHRoZW5cCi0JCWVjaG8gIkluc3RhbGxpbmcgaW5mbyBmaWxlcy4uLiI7XAotCQlpZiB0 ZXN0IC1kICQoREVTVERJUikkKElORk9ESVIpOyB0aGVuXAotCQkJZWNobyAgIiQoREVTVERJUikk KElORk9ESVIpIGV4aXN0cy4uLiI7XAotCQllbHNlXAotCQkJZWNobyAiQ3JlYXRpbmcgJChERVNU RElSKSQoSU5GT0RJUikvLi4uIjtcCi0JCQlta2RpciAgICAgJChERVNURElSKSQoSU5GT0RJUikg fHwgZXhpdCAxO1wKLQkJCWNobW9kIDc1NSAkKERFU1RESVIpJChJTkZPRElSKTtcCi0JCWZpO1wK LQkJZWNobyAiQ29weWluZyB0ZXh0IGZpbGVzIHRvICQoREVTVERJUikkKElORk9ESVIpLi4uIjtc Ci0JCWVjaG8gJ3NldCBmbGFnPWZcblByQyBSZW1vdmluZyB0ZXh0IGZpbGVzJyA+JjM7XAotCQlG aWxlQ29weUxpc3Q9Jyc7XAotCQlmb3IgVGV4dEZpbGUgaW4gJChURVhURklMRVMpOyBkb1wKLQkJ CXRlc3QgLWYgJCRUZXh0RmlsZSB8fCBjb250aW51ZTtcCi0JCQljcCAkJFRleHRGaWxlICQoREVT VERJUikkKElORk9ESVIpICYmIGVjaG8gIi5cYyIgJiZcCi0JCQlGaWxlQ29weUxpc3Q9IiQkRmls ZUNvcHlMaXN0ICQkVGV4dEZpbGUiO1wKLQkJCWVjaG8gIlJtRiAkKERFU1RESVIpJChJTkZPRElS KS8kJFRleHRGaWxlIiA+JjM7XAotCQlkb25lOyBlY2hvO1wKLQkJZWNobyAnRWZNJyA+JjM7XAot CQkoIGNkICQoREVTVERJUikkKElORk9ESVIpLyAmJiBjaG1vZCAgNjQ0ICAgJCRGaWxlQ29weUxp c3QgKTtcCi0JCSggY2QgJChERVNURElSKSQoSU5GT0RJUikvICYmIHB3ZCAmJiBscyAtbCAkJEZp bGVDb3B5TGlzdCApO1wKLQllbHNlXAotCQllY2hvICJOb3QgaW5zdGFsbGluZyB0ZXh0IGZpbGVz IVxuIjtcCi0JZmk7XAotCWVjaG8gInNldCBmbGFnPWRcblByTiBSZW1vdmluZyBlbXB0eSBkaXJz Li4uIiA+JjM7XAotCWVjaG8gIlJtRCAkKERFU1RESVIpJChCSU5ESVIpIiA+JjM7XAotCWVjaG8g IlJtRCAkKERFU1RESVIpJChTUkNESVIpIiA+JjM7XAotCWVjaG8gIlJtRCAkKERFU1RESVIpJChJ TkZPRElSKSIgPiYzO1wKLQllY2hvICJSbUQgJChDRVJURElSKSIgPiYzO1wKLQllY2hvICJSbUQg JChNQU5ESVIpIiA+JjM7XAotCWVjaG8gIlJtRCAkKERFU1RESVIpIiA+JjM7XAotCWVjaG8gIkVm TSIgPiYzO1wKLQllY2hvICJQck4gQy1LZXJtaXQgdmVyc2lvbiAkKENLVkVSKSBpcyB1bmluc3Rh bGxlZCEiID4mMztcCi0JZWNobyBDLUtlcm1pdCB2ZXJzaW9uICQoQ0tWRVIpIGluc3RhbGxlZCEK LQotIyBVTi1JbnN0YWxsIEMtS2VybWl0IGFmdGVyIGJ1aWxkaW5nCi0jIFBsZWFzZSB0byBub3Qg cmVtb3ZlIHRoZSBleHRyYSBibGFua3MgYmVmb3JlIGFuZCBhZnRlciAne30nIHdpdGhpbiB0aGUK LSMgZnVuY3Rpb25zLiBZb3Ugd291bGQgZ2V0IHN5bnRheCBlcnJvcnMgZm9yIHNvbWUgb2xkZXIg Qm91cm5lIHNoZWxscyEgQmVzdCBpcyAKLSMgeW91IGRvbid0IGNoYW5nZSBvciByZW1vdmUgYW55 dGhpbmcuCi0jCi11bmluc3RhbGw6Ci0JQGlmIHRlc3QgISAtZiBVTklOU1RBTEw7IHRoZW5cCi0J CWVjaG8gIj9DLUtlcm1pdCBVTklOU1RBTEwgZGF0YSBmaWxlIG5vdCBmb3VuZCEiO1wKLQkJZXhp dCAxO1wKLQlmaTsgXAotCVg9YGdyZXAgJ15DS1ZFUj0nJChDS1ZFUiknJCQnIC4vVU5JTlNUQUxM IHx8IDpgO1wKLQlpZiB0ZXN0IC16ICIkJFgiOyB0aGVuXAotCQllY2hvICI/VU5JTlNUQUxMIGZp bGUgaXMgbm90IGZvciBDLUtlcm1pdCB2ZXJzaW9uICQoQ0tWRVIpIjtcCi0JCWV4aXQgMjtcCi0J Zmk7XAotCVByTiAoKSB7IGVjaG8gIiQkKiI7IH07XAotCVByQyAoKSB7IGVjaG8gIiQkKiBcYyI7 IH07XAotCVJtRiAoKSB7IHRlc3QgLWYgIiQkMSIgJiYgcm0gLWYgIiQkMSIgJiYgZWNobyAiLlxj IiAmJiBmbGFnPUYgOyB9O1wKLQlSbUQgKCkgeyBcCi0JZGlyPSQkMTtcCi0Jd2hpbGUgdGVzdCAt ZCAiJCRkaXIiOyBkb1wKLQkJcm1kaXIgIiQkZGlyIiAyPiYtIHx8IHJldHVybiAmJiBlY2hvICIk JGRpciIgJiYgZmxhZz1EO1wKLQkJZGlyPWBlY2hvICIkJGRpciIgfCBzZWQgJ3MhL1teL10qLyok JCEhJ2A7XAotCWRvbmU7IFwKLQl9O1wKLQlFZk0gKCkgeyBcCi0JY2FzZSAiJCRmbGFnIiBpblwK LQkJZikgZWNobyAiLSBOb3RoaW5nIHRvIHJlbW92ZSEiOztcCi0JCWQpIGVjaG8gIk5vdGhpbmcg dG8gcmVtb3ZlISI7O1wKLQkJRikgZWNobyAiIGRvbmUiOztcCi0JCUQpIGVjaG8gImRvbmUiOztc Ci0JZXNhYzsgXAotCX07XAotCXdoaWxlIHJlYWQgQWN0IEFyZ3M7IGRvXAotCQljYXNlICQkQWN0 IGluXAotCQkJRWZNKSBFZk07O1wKLQkJCVJtRCkgUm1EICQkQXJnczs7XAotCQkJUm1GKSBSbUYg JCRBcmdzOztcCi0JCQlQck4pIFByTiAkJEFyZ3M7O1wKLQkJCVByQykgUHJDICQkQXJnczs7XAot CQkJc2V0KSBldmFsICQkQXJnczs7XAotCQllc2FjO1wKLQlkb25lIDwgLi9VTklOU1RBTEwKLQot bWFrZXdoYXQ6Ci0JQGVjaG8gJ21ha2Ugd2hhdD8gIFlvdSBtdXN0IHRlbGwgd2hpY2ggcGxhdGZv cm0gdG8gbWFrZSBDLUtlcm1pdCBmb3IuJwotCUBlY2hvIEV4YW1wbGVzOiBtYWtlIGxpbnV4LCBt YWtlIGFpeCwgbWFrZSBzb2xhcmlzMTAsIG1ha2UgaHB1eDExMDAuCi0JQGVjaG8gUGxlYXNlIHJl YWQgdGhlIGNvbW1lbnRzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG1ha2VmaWxlLgotCi0jIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKLSMKLSMgRGVwZW5kZW5jaWVzIFNlY3Rpb246Ci0KLXdlcm1pdDoJY2tj bWFpLiQoRVhUKSBja2NsaWIuJChFWFQpIGNrdWNtZC4kKEVYVCkgY2t1dXNyLiQoRVhUKSBja3V1 czIuJChFWFQpIFwKLQkJY2t1dXMzLiQoRVhUKSBja3V1czQuJChFWFQpIGNrdXVzNS4kKEVYVCkg Y2t1dXM2LiQoRVhUKSBcCi0JCWNrdXVzNy4kKEVYVCkgY2t1dXN4LiQoRVhUKSBja3V1c3kuJChF WFQpIGNrY3Byby4kKEVYVCkgXAotCQlja2NmbnMuJChFWFQpIGNrY2ZuMi4kKEVYVCkgY2tjZm4z LiQoRVhUKSBja3V4bGEuJChFWFQpIFwKLQkJY2t1Y29uLiQoRVhUKSBja3V0aW8uJChFWFQpIGNr dWZpby4kKEVYVCkgY2t1ZGlhLiQoRVhUKSBcCi0JCWNrdXNjci4kKEVYVCkgY2tjbmV0LiQoRVhU KSBja2N0ZWwuJChFWFQpIGNrdXNpZy4kKEVYVCkgXAotCQlja2N1bmkuJChFWFQpIGNrdXB0eS4k KEVYVCkgY2tjZnRwLiQoRVhUKQotCSQoQ0MyKSAkKExOS0ZMQUdTKSAtbyB3ZXJtaXQgXAotCQlj a2NtYWkuJChFWFQpIGNrY2xpYi4kKEVYVCkgY2t1dGlvLiQoRVhUKSBja3VmaW8uJChFWFQpIFwK LQkJY2tjZm5zLiQoRVhUKSBja2NmbjIuJChFWFQpIGNrY2ZuMy4kKEVYVCkgY2t1eGxhLiQoRVhU KSBcCi0JCWNrY3Byby4kKEVYVCkgY2t1Y21kLiQoRVhUKSBja3V1czIuJChFWFQpIGNrdXVzMy4k KEVYVCkgXAotCQlja3V1czQuJChFWFQpIGNrdXVzNS4kKEVYVCkgY2t1dXM2LiQoRVhUKSBja3V1 czcuJChFWFQpIFwKLQkJY2t1dXN4LiQoRVhUKSBja3V1c3kuJChFWFQpIGNrdXVzci4kKEVYVCkg Y2t1Y29uLiQoRVhUKSBcCi0JCWNrdWRpYS4kKEVYVCkgY2t1c2NyLiQoRVhUKSBja2NuZXQuJChF WFQpIGNrY3RlbC4kKEVYVCkgXAotCQlja3VzaWcuJChFWFQpIGNrY3VuaS4kKEVYVCkgY2t1cHR5 LiQoRVhUKSBja2NmdHAuJChFWFQpIFwKLQkJJChMSUJTKQotCi0jIFByZWZlcnJlZCBjb25maWd1 cmF0aW9uIHdpdGggc2VsZWN0KCktYmFzZWQgQ09OTkVDVAotCi14ZXJtaXQ6CWNrY21haS4kKEVY VCkgY2tjbGliLiQoRVhUKSBja3VjbWQuJChFWFQpIGNrdXVzci4kKEVYVCkgY2t1dXMyLiQoRVhU KSBcCi0JCWNrdXVzMy4kKEVYVCkgY2t1dXM0LiQoRVhUKSBja3V1czUuJChFWFQpIGNrdXVzNi4k KEVYVCkgXAotCQlja3V1czcuJChFWFQpIGNrdXVzeC4kKEVYVCkgY2t1dXN5LiQoRVhUKSBja2Nw cm8uJChFWFQpIFwKLQkJY2tjZm5zLiQoRVhUKSBja2NmbjIuJChFWFQpIGNrY2ZuMy4kKEVYVCkg Y2t1eGxhLiQoRVhUKSBcCi0JCWNrdWNucy4kKEVYVCkgY2t1dGlvLiQoRVhUKSBja3VmaW8uJChF WFQpIGNrdWRpYS4kKEVYVCkgXAotCQlja3VzY3IuJChFWFQpIGNrY25ldC4kKEVYVCkgY2tjdGVs LiQoRVhUKSBja3VzaWcuJChFWFQpIFwKLQkJY2tjdW5pLiQoRVhUKSBja3VwdHkuJChFWFQpIGNr Y2Z0cC4kKEVYVCkgY2t1YXRoLiQoRVhUKSBcCi0JCWNrX2NycC4kKEVYVCkgY2tfc3NsLiQoRVhU KQotCSQoQ0MyKSAkKExOS0ZMQUdTKSAtbyB3ZXJtaXQgXAotCQlja2NtYWkuJChFWFQpIGNrY2xp Yi4kKEVYVCkgY2t1dGlvLiQoRVhUKSBja3VmaW8uJChFWFQpIFwKLQkJY2tjZm5zLiQoRVhUKSBj a2NmbjIuJChFWFQpIGNrY2ZuMy4kKEVYVCkgY2t1eGxhLiQoRVhUKSBcCi0JCWNrY3Byby4kKEVY VCkgY2t1Y21kLiQoRVhUKSBja3V1czIuJChFWFQpIGNrdXVzMy4kKEVYVCkgXAotCQlja3V1czQu JChFWFQpIGNrdXVzNS4kKEVYVCkgY2t1dXM2LiQoRVhUKSBja3V1czcuJChFWFQpIFwKLQkJY2t1 dXN4LiQoRVhUKSBja3V1c3kuJChFWFQpIGNrdXVzci4kKEVYVCkgY2t1Y25zLiQoRVhUKSBcCi0J CWNrdWRpYS4kKEVYVCkgY2t1c2NyLiQoRVhUKSBja2NuZXQuJChFWFQpIGNrdXNpZy4kKEVYVCkg XAotCQlja2N0ZWwuJChFWFQpIGNrY3VuaS4kKEVYVCkgY2t1cHR5LiQoRVhUKSBja2NmdHAuJChF WFQpIFwKLQkJY2t1YXRoLiQoRVhUKSBja19jcnAuJChFWFQpIGNrX3NzbC4kKEVYVCkgJChMSUJT KQotCi0jIE1hbGxvYyBEZWJ1Z2dpbmcgdmVyc2lvbgotCi1tZXJtaXQ6CWNrY21kYi4kKEVYVCkg Y2tjbWFpLiQoRVhUKSBja2NsaWIuJChFWFQpIGNrdWNtZC4kKEVYVCkgY2t1dXNyLiQoRVhUKSBc Ci0JCWNrdXVzMi4kKEVYVCkgY2t1dXMzLiQoRVhUKSBja3V1czQuJChFWFQpIGNrdXVzNS4kKEVY VCkgXAotCQlja3V1czYuJChFWFQpIGNrdXVzNy4kKEVYVCkgY2t1dXN4LiQoRVhUKSBja3V1c3ku JChFWFQpIFwKLQkJY2tjcHJvLiQoRVhUKSBja2NmbnMuJChFWFQpIGNrY2ZuMi4kKEVYVCkgY2tj Zm4zLiQoRVhUKSBcCi0JCWNrdXhsYS4kKEVYVCkgY2t1Y29uLiQoRVhUKSBja3V0aW8uJChFWFQp IGNrdWZpby4kKEVYVCkgXAotCQlja3VkaWEuJChFWFQpIGNrdXNjci4kKEVYVCkgY2tjbmV0LiQo RVhUKSBja2N0ZWwuJChFWFQpIFwKLQkJY2t1c2lnLiQoRVhUKSBja2N1bmkuJChFWFQpIGNrdXB0 eS4kKEVYVCkgY2tjZnRwLiQoRVhUKQotCSQoQ0MyKSAkKExOS0ZMQUdTKSAtbyBtZXJtaXQgY2tj bWRiLiQoRVhUKSBja2NsaWIuJChFWFQpIGNrY21haS4kKEVYVClcCi0JCWNrdXRpby4kKEVYVCkg Y2t1ZmlvLiQoRVhUKSBja2NmbnMuJChFWFQpIGNrY2ZuMi4kKEVYVCkgXAotCQlja2NmbjMuJChF WFQpIGNrdXhsYS4kKEVYVCkgY2tjcHJvLiQoRVhUKSBja3VjbWQuJChFWFQpIFwKLQkJY2t1dXMy LiQoRVhUKSBja3V1czMuJChFWFQpIGNrdXVzNC4kKEVYVCkgY2t1dXM1LiQoRVhUKSBcCi0JCWNr dXVzNi4kKEVYVCkgY2t1dXM3LiQoRVhUKSBja3V1c3guJChFWFQpIGNrdXVzeS4kKEVYVCkgXAot CQlja3V1c3IuJChFWFQpIGNrdWNvbi4kKEVYVCkgY2t1ZGlhLiQoRVhUKSBja3VzY3IuJChFWFQp IFwKLQkJY2tjbmV0LiQoRVhUKSBja2N0ZWwuJChFWFQpIGNrdXNpZy4kKEVYVCkgY2tjdW5pLiQo RVhUKSBcCi0JCWNrdXB0eS4kKEVYVCkgY2tjZnRwLiQoRVhUKSAkKExJQlMpCi0KLSMgS2VyYmVy aXplZCBWZXJzaW9uIC0gU3ViamVjdCB0byBVU0EgZXhwb3J0IHJlc3RyaWN0aW9ucy4KLQotIyBO T1RFOiBXZSBkb24ndCB1c2UgdGhpcyBhbnkgbW9yZSAtLSBBcyBvZiAxNSBGZWIgMjAwMywgdGhl ICJ4ZXJtaXQiCi0jIHRhcmdldCBpcyB1c2VkIGZvciBib3RoIHNlY3VyZSBhbmQgcmVndWxhciB2 ZXJzaW9uLgotCi1rcmJtaXQ6CWNrY21haS4kKEVYVCkgY2tjbGliLiQoRVhUKSBja3VjbWQuJChF WFQpIGNrdXVzci4kKEVYVCkgY2t1dXMyLiQoRVhUKSBcCi0JCWNrdXVzMy4kKEVYVCkgY2t1dXM0 LiQoRVhUKSBja3V1czUuJChFWFQpIGNrdXVzNi4kKEVYVCkgXAotCQlja3V1czcuJChFWFQpIGNr dXVzeC4kKEVYVCkgY2t1dXN5LiQoRVhUKSBja2Nwcm8uJChFWFQpIFwKLQkJY2tjZm5zLiQoRVhU KSBja2NmbjIuJChFWFQpIGNrY2ZuMy4kKEVYVCkgY2t1eGxhLiQoRVhUKSBcCi0JCWNrdWNucy4k KEVYVCkgY2t1dGlvLiQoRVhUKSBja3VmaW8uJChFWFQpIGNrdWRpYS4kKEVYVCkgXAotCQlja3Vz Y3IuJChFWFQpIGNrY25ldC4kKEVYVCkgY2tjdGVsLiQoRVhUKSBja3VzaWcuJChFWFQpIFwKLQkJ Y2t1YXRoLiQoRVhUKSBja19jcnAuJChFWFQpIGNrY3VuaS4kKEVYVCkgY2t1cHR5LiQoRVhUKSBc Ci0JCWNrY2Z0cC4kKEVYVCkgY2tfc3NsLiQoRVhUKQotCSQoQ0MyKSAkKExOS0ZMQUdTKSAtbyBr cmJtaXQgY2tjbWFpLiQoRVhUKSBja2NsaWIuJChFWFQpIFwKLQkJY2t1dGlvLiQoRVhUKSBja3Vm aW8uJChFWFQpIGNrY2Zucy4kKEVYVCkgY2tjZm4yLiQoRVhUKSBcCi0JCWNrY2ZuMy4kKEVYVCkg Y2t1eGxhLiQoRVhUKSBja2Nwcm8uJChFWFQpIGNrdWNtZC4kKEVYVCkgXAotCQlja3V1czIuJChF WFQpIGNrdXVzMy4kKEVYVCkgY2t1dXM0LiQoRVhUKSBja3V1czUuJChFWFQpIFwKLQkJY2t1dXM2 LiQoRVhUKSBja3V1czcuJChFWFQpIGNrdXVzeC4kKEVYVCkgY2t1dXN5LiQoRVhUKSBcCi0JCWNr dXVzci4kKEVYVCkgY2t1Y25zLiQoRVhUKSBja3VkaWEuJChFWFQpIGNrdXNjci4kKEVYVCkgXAot CQlja2NuZXQuJChFWFQpIGNrY3RlbC4kKEVYVCkgY2t1c2lnLiQoRVhUKSBja3VhdGguJChFWFQp IFwKLQkJY2tfY3JwLiQoRVhUKSBja2N1bmkuJChFWFQpIGNrdXB0eS4kKEVYVCkgY2tjZnRwLiQo RVhUKSBcCi0JCWNrX3NzbC4kKEVYVCkgJChMSUJTKQotCi1rcmJtaXQtZGVidWc6CWNrY21haS4k KEVYVCkgY2tjbGliLiQoRVhUKSBja3VjbWQuJChFWFQpIGNrdXVzci4kKEVYVCkgXAotCQlja3V1 czIuJChFWFQpIGNrdXVzMy4kKEVYVCkgY2t1dXM0LiQoRVhUKSBja3V1czUuJChFWFQpIFwKLQkJ Y2t1dXM2LiQoRVhUKSBja3V1czcuJChFWFQpIGNrdXVzeC4kKEVYVCkgY2t1dXN5LiQoRVhUKSBc Ci0JCWNrY3Byby4kKEVYVCkgY2tjZm5zLiQoRVhUKSBja2NmbjIuJChFWFQpIGNrY2ZuMy4kKEVY VCkgXAotCQlja3V4bGEuJChFWFQpIGNrdWNucy4kKEVYVCkgY2t1dGlvLiQoRVhUKSBja3VmaW8u JChFWFQpIFwKLQkJY2t1ZGlhLiQoRVhUKSBja3VzY3IuJChFWFQpIGNrY25ldC4kKEVYVCkgY2tj dGVsLiQoRVhUKSBcCi0JCWNrdXNpZy4kKEVYVCkgY2t1YXRoLiQoRVhUKSBja19jcnAuJChFWFQp IGNrY3VuaS4kKEVYVCkgXAotCQlja3VwdHkuJChFWFQpIGNrX3NzbC4kKEVYVCkgY2tjbWRiLiQo RVhUKSBja2NmdHAuJChFWFQpCi0JJChDQzIpICQoTE5LRkxBR1MpIC1vIGtyYm1pdCBja2NtZGIu JChFWFQpIGNrY21haS4kKEVYVCkgXAotCQlja2NsaWIuJChFWFQpIGNrdXRpby4kKEVYVCkgY2t1 ZmlvLiQoRVhUKSBja2NmbnMuJChFWFQpIFwKLQkJY2tjZm4yLiQoRVhUKSBja2NmbjMuJChFWFQp IGNrdXhsYS4kKEVYVCkgY2tjcHJvLiQoRVhUKSBcCi0JCWNrdWNtZC4kKEVYVCkgY2t1dXMyLiQo RVhUKSBja3V1czMuJChFWFQpIGNrdXVzNC4kKEVYVCkgXAotCQlja3V1czUuJChFWFQpIGNrdXVz Ni4kKEVYVCkgY2t1dXM3LiQoRVhUKSBja3V1c3guJChFWFQpIFwKLQkJY2t1dXN5LiQoRVhUKSBj a3V1c3IuJChFWFQpIGNrdWNucy4kKEVYVCkgY2t1ZGlhLiQoRVhUKSBcCi0JCWNrdXNjci4kKEVY VCkgY2tjbmV0LiQoRVhUKSBja2N0ZWwuJChFWFQpIGNrdXNpZy4kKEVYVCkgXAotCQlja3VhdGgu JChFWFQpIGNrX2NycC4kKEVYVCkgY2tjdW5pLiQoRVhUKSBja3VwdHkuJChFWFQpIFwKLQkJY2tj ZnRwLiQoRVhUKSBja19zc2wuJChFWFQpICQoTElCUykKLQotIyBTUlAoVE0pIFZlcnNpb24gLSBT dWJqZWN0IHRvIFVTQSBleHBvcnQgcmVzdHJpY3Rpb25zLgotCi1zcnBtaXQ6CWNrY21haS4kKEVY VCkgY2tjbGliLiQoRVhUKSBja3VjbWQuJChFWFQpIGNrdXVzci4kKEVYVCkgY2t1dXMyLiQoRVhU KSBcCi0JCWNrdXVzMy4kKEVYVCkgY2t1dXM0LiQoRVhUKSBja3V1czUuJChFWFQpIGNrdXVzNi4k KEVYVCkgXAotCQlja3V1czcuJChFWFQpIGNrdXVzeC4kKEVYVCkgY2t1dXN5LiQoRVhUKSBja2Nw cm8uJChFWFQpIFwKLQkJY2tjZm5zLiQoRVhUKSBja2NmbjIuJChFWFQpIGNrY2ZuMy4kKEVYVCkg Y2t1eGxhLiQoRVhUKSBcCi0JCWNrdWNucy4kKEVYVCkgY2t1dGlvLiQoRVhUKSBja3VmaW8uJChF WFQpIGNrdWRpYS4kKEVYVCkgXAotCQlja3VzY3IuJChFWFQpIGNrY25ldC4kKEVYVCkgY2tjdGVs LiQoRVhUKSBja3VzaWcuJChFWFQpIFwKLQkJY2t1YXRoLiQoRVhUKSBja19jcnAuJChFWFQpIGNr Y3VuaS4kKEVYVCkgY2t1cHR5LiQoRVhUKSBcCi0JCWNrY2Z0cC4kKEVYVCkgY2tfc3NsLiQoRVhU KQotCSQoQ0MyKSAkKExOS0ZMQUdTKSAtbyBzcnBtaXQgY2tjbWFpLiQoRVhUKSBja2NsaWIuJChF WFQpIFwKLQkJY2t1dGlvLiQoRVhUKSBja3VmaW8uJChFWFQpIGNrY2Zucy4kKEVYVCkgY2tjZm4y LiQoRVhUKSBcCi0JCWNrY2ZuMy4kKEVYVCkgY2t1eGxhLiQoRVhUKSBja2Nwcm8uJChFWFQpIGNr dWNtZC4kKEVYVCkgXAotCQlja3V1czIuJChFWFQpIGNrdXVzMy4kKEVYVCkgY2t1dXM0LiQoRVhU KSBja3V1czUuJChFWFQpIFwKLQkJY2t1dXM2LiQoRVhUKSBja3V1czcuJChFWFQpIGNrdXVzeC4k KEVYVCkgY2t1dXN5LiQoRVhUKSBcCi0JCWNrdXVzci4kKEVYVCkgY2t1Y25zLiQoRVhUKSBja3Vk aWEuJChFWFQpIGNrdXNjci4kKEVYVCkgXAotCQlja2NuZXQuJChFWFQpIGNrY3RlbC4kKEVYVCkg Y2t1c2lnLiQoRVhUKSBja3VhdGguJChFWFQpIFwKLQkJY2tfY3JwLiQoRVhUKSBja2N1bmkuJChF WFQpIGNrdXB0eS4kKEVYVCkgY2tfc3NsLiQoRVhUKSBcCi0JCWNrY2Z0cC4kKEVYVCkgJChMSUJT KQotCi0jIEtlcmJlcml6ZWQgVmVyc2lvbiAtIE5vdCBzdWJqZWN0IHRvIFVTQSBleHBvcnQgcmVz dHJpY3Rpb25zLgotCi1rcmJtaXQtZXhwb3J0Oglja2NtYWkuJChFWFQpIFwKLQkJY2tjbGliLiQo RVhUKSBja3VjbWQuJChFWFQpIGNrdXVzci4kKEVYVCkgY2t1dXMyLiQoRVhUKSBcCi0JCWNrdXVz My4kKEVYVCkgY2t1dXM0LiQoRVhUKSBja3V1czUuJChFWFQpIGNrdXVzNi4kKEVYVCkgXAotCQlj a3V1czcuJChFWFQpIGNrdXVzeC4kKEVYVCkgY2t1dXN5LiQoRVhUKSBja2Nwcm8uJChFWFQpIFwK LQkJY2tjZm5zLiQoRVhUKSBja2NmbjIuJChFWFQpIGNrY2ZuMy4kKEVYVCkgY2t1eGxhLiQoRVhU KSBcCi0JCWNrdWNucy4kKEVYVCkgY2t1dGlvLiQoRVhUKSBja3VmaW8uJChFWFQpIGNrdWRpYS4k KEVYVCkgXAotCQlja3VzY3IuJChFWFQpIGNrY25ldC4kKEVYVCkgY2tjdGVsLiQoRVhUKSBja3Vz aWcuJChFWFQpIFwKLQkJY2t1YXRoLiQoRVhUKSBja2N1bmkuJChFWFQpIGNrdXB0eS4kKEVYVCkg Y2tjZnRwLiQoRVhUKQotCSQoQ0MyKSAkKExOS0ZMQUdTKSAtbyBrcmJtaXQtZXhwb3J0IGNrY21h aS4kKEVYVCkgY2tjbGliLiQoRVhUKSBcCi0JCWNrdXRpby4kKEVYVCkgY2t1ZmlvLiQoRVhUKSBj a2NmbnMuJChFWFQpIGNrY2ZuMi4kKEVYVCkgXAotCQlja2NmbjMuJChFWFQpIGNrdXhsYS4kKEVY VCkgY2tjcHJvLiQoRVhUKSBja3VjbWQuJChFWFQpIFwKLQkJY2t1dXMyLiQoRVhUKSBja3V1czMu JChFWFQpIGNrdXVzNC4kKEVYVCkgY2t1dXM1LiQoRVhUKSBcCi0JCWNrdXVzNi4kKEVYVCkgY2t1 dXM3LiQoRVhUKSBja3V1c3guJChFWFQpIGNrdXVzeS4kKEVYVCkgXAotCQlja3V1c3IuJChFWFQp IGNrdWNucy4kKEVYVCkgY2t1ZGlhLiQoRVhUKSBja3VzY3IuJChFWFQpIFwKLQkJY2tjbmV0LiQo RVhUKSBja2N0ZWwuJChFWFQpIGNrdXNpZy4kKEVYVCkgY2t1YXRoLiQoRVhUKSBcCi0JCWNrY3Vu aS4kKEVYVCkgY2t1cHR5LiQoRVhUKSBja2NmdHAuJChFWFQpICQoTElCUykKLQotIyBTUlAoVE0p IFZlcnNpb24gLSBOb3Qgc3ViamVjdCB0byBVU0EgZXhwb3J0IHJlc3RyaWN0aW9ucy4KLQotc3Jw bWl0LWV4cG9ydDoJY2tjbWFpLiQoRVhUKSBcCi0JCWNrY2xpYi4kKEVYVCkgY2t1Y21kLiQoRVhU KSBja3V1c3IuJChFWFQpIGNrdXVzMi4kKEVYVCkgXAotCQlja3V1czMuJChFWFQpIGNrdXVzNC4k KEVYVCkgY2t1dXM1LiQoRVhUKSBja3V1czYuJChFWFQpIFwKLQkJY2t1dXM3LiQoRVhUKSBja3V1 c3guJChFWFQpIGNrdXVzeS4kKEVYVCkgY2tjcHJvLiQoRVhUKSBcCi0JCWNrY2Zucy4kKEVYVCkg Y2tjZm4yLiQoRVhUKSBja2NmbjMuJChFWFQpIGNrdXhsYS4kKEVYVCkgXAotCQlja3VjbnMuJChF WFQpIGNrdXRpby4kKEVYVCkgY2t1ZmlvLiQoRVhUKSBja3VkaWEuJChFWFQpIFwKLQkJY2t1c2Ny LiQoRVhUKSBja2NuZXQuJChFWFQpIGNrY3RlbC4kKEVYVCkgY2t1c2lnLiQoRVhUKSBcCi0JCWNr dWF0aC4kKEVYVCkgY2tjdW5pLiQoRVhUKSBja3VwdHkuJChFWFQpIGNrY2Z0cC4kKEVYVCkKLQkk KENDMikgJChMTktGTEFHUykgLW8gc3JwbWl0LWV4cG9ydCBja2NtYWkuJChFWFQpIGNrY2xpYi4k KEVYVCkgXAotCQlja3V0aW8uJChFWFQpIGNrdWZpby4kKEVYVCkgY2tjZm5zLiQoRVhUKSBja2Nm bjIuJChFWFQpIFwKLQkJY2tjZm4zLiQoRVhUKSBja3V4bGEuJChFWFQpIGNrY3Byby4kKEVYVCkg Y2t1Y21kLiQoRVhUKSBcCi0JCWNrdXVzMi4kKEVYVCkgY2t1dXMzLiQoRVhUKSBja3V1czQuJChF WFQpIGNrdXVzNS4kKEVYVCkgXAotCQlja3V1czYuJChFWFQpIGNrdXVzNy4kKEVYVCkgY2t1dXN4 LiQoRVhUKSBja3V1c3kuJChFWFQpIFwKLQkJY2t1dXNyLiQoRVhUKSBja3VjbnMuJChFWFQpIGNr dWRpYS4kKEVYVCkgY2t1c2NyLiQoRVhUKSBcCi0JCWNrY25ldC4kKEVYVCkgY2tjdGVsLiQoRVhU KSBja3VzaWcuJChFWFQpIGNrdWF0aC4kKEVYVCkgXAotCQlja2N1bmkuJChFWFQpIGNrdXB0eS4k KEVYVCkgY2tjZnRwLiQoRVhUKSAkKExJQlMpCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBtYW4g cGFnZS4uLgotIwotY2t1a2VyLm5yOgotCUBlY2hvIFRoaXMgdGFyZ2V0IGlzIG9ic29sZXRlLgot CUBlY2hvIFRoZSBja3VrZXIubnIgZmlsZSBubyBsb25nZXIgbmVlZHMgYW55IHByZXByb2Nlc3Np bmcuCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBEZXBlbmRlbmNpZXMgZm9yIGVhY2ggbW9kdWxl Li4uCi0jCi1ja2NtYWkuJChFWFQpOiBja2NtYWkuYyBja2NrZXIuaCBja2NkZWIuaCBja2NzeW0u aCBja2Nhc2MuaCBja2NuZXQuaCBja2NzaWcuaCBcCi0JCWNrdXVzci5oIGNrY3RlbC5oIGNrY2xp Yi5oCi0KLWNrY2xpYi4kKEVYVCk6IGNrY2xpYi5jIGNrY2xpYi5oIGNrY2RlYi5oIGNrY2FzYy5o IGNrY3N5bS5oCi0KLWNrY3Byby4kKEVYVCk6IGNrY3Byby5jIGNrY2tlci5oIGNrY2RlYi5oIGNr Y3N5bS5oIGNrY2FzYy5oIGNrY2xpYi5oCi0KLWNrY3Byby5jOiBja2Nwcm8udyB3YXJ0IGNrY2Rl Yi5oIGNrY3N5bS5oIGNrY2FzYy5oIGNrY2tlci5oIGNrY25ldC5oIGNrY3RlbC5oIFwKLQkgY2tj bGliLmgKLQkuL3dhcnQgY2tjcHJvLncgY2tjcHJvLmMKLQotY2tjZm5zLiQoRVhUKTogY2tjZm5z LmMgY2tja2VyLmggY2tjZGViLmggY2tjc3ltLmggY2tjYXNjLmggY2tjeGxhLmggY2tjdW5pLmgg XAotCQlja3V4bGEuaCBja2NsaWIuaCBja2NuZXQuaAotCi1ja2NmbjIuJChFWFQpOiBja2NmbjIu YyBja2NrZXIuaCBja2NkZWIuaCBja2NzeW0uaCBja2Nhc2MuaCBja2N4bGEuaCBcCi0JCWNrdXhs YS5oIGNrY3RlbC5oIGNrY2xpYi5oIGNrY25ldC5oIGNrY3VuaS5oCi0KLWNrY2ZuMy4kKEVYVCk6 IGNrY2ZuMy5jIGNrY2tlci5oIGNrY2RlYi5oIGNrY3N5bS5oIGNrY2FzYy5oIGNrY3hsYS5oIFwK LQkJY2t1eGxhLmggY2tjbGliLmggY2tjdW5pLmgKLQotY2t1eGxhLiQoRVhUKTogY2t1eGxhLmMg Y2tja2VyLmggY2tjc3ltLmggY2tjZGViLmggY2tjeGxhLmggY2t1eGxhLmggY2tjbGliLmggXAot CQkgY2tjdW5pLmgKLQotY2tjdW5pLiQoRVhUKTogY2tjdW5pLmMgY2tjZGViLmggY2tja2VyLmgg Y2t1Y21kLmggY2tjdW5pLmggY2tjeGxhLmggY2t1eGxhLmgKLQotY2t1dXNyLiQoRVhUKTogY2t1 dXNyLmMgY2t1Y21kLmggY2tja2VyLmggY2t1dXNyLmggY2tjc3ltLmggY2tjZGViLmggY2tjeGxh LmggXAotCQlja3V4bGEuaCBja2Nhc2MuaCBja2NuZXQuaCBja2N0ZWwuaCBja2NsaWIuaCBja2N1 bmkuaAotCi1ja3V1czIuJChFWFQpOiBja3V1czIuYyBja3VjbWQuaCBja2NrZXIuaCBja3V1c3Iu aCBja2NkZWIuaCBja2N4bGEuaCBja3V4bGEuaCBcCi0JCWNrY2FzYy5oIGNrY25ldC5oIGNrY3N5 bS5oIGNrY3RlbC5oIGNrY2xpYi5oIGNrY3VuaS5oCi0KLWNrdXVzMy4kKEVYVCk6IGNrdXVzMy5j IGNrdWNtZC5oIGNrY2tlci5oIGNrdXVzci5oIGNrY2RlYi5oIGNrY3hsYS5oIGNrdXhsYS5oIFwK LQkJY2tjYXNjLmggY2tjbmV0LmggY2tjc3ltLmggY2tjdGVsLmggY2tjbGliLmggY2tjdW5pLmgK LQotY2t1dXM0LiQoRVhUKTogY2t1dXM0LmMgY2t1Y21kLmggY2tja2VyLmggY2t1dXNyLmggY2tj ZGViLmggY2tjeGxhLmggY2t1eGxhLmggXAotCQlja2Nhc2MuaCBja2NuZXQuaCBja3V2ZXIuaCBj a2NzeW0uaCBja2N0ZWwuaCBja2NsaWIuaCBja2N1bmkuaAotCi1ja3V1czUuJChFWFQpOiBja3V1 czUuYyBja3VjbWQuaCBja2NrZXIuaCBja3V1c3IuaCBja2NkZWIuaCBja2Nhc2MuaCBja2NuZXQu aCBcCi0JCSBja2NzeW0uaCBja2N0ZWwuaCBja2NsaWIuaCBja2N4bGEuaCBja3V4bGEuaCBja2N1 bmkuaAotCi1ja3V1czYuJChFWFQpOiBja3V1czYuYyBja3VjbWQuaCBja2NrZXIuaCBja3V1c3Iu aCBja2NkZWIuaCBja2Nhc2MuaCBja2NuZXQuaCBcCi0JCSBja2NzeW0uaCBja2N0ZWwuaCBja2Ns aWIuaAotCi1ja3V1czcuJChFWFQpOiBja3V1czcuYyBja3VjbWQuaCBja2NrZXIuaCBja3V1c3Iu aCBja2NkZWIuaCBja2N4bGEuaCBja3V4bGEuaCBcCi0JCWNrY2FzYy5oIGNrY25ldC5oIGNrY3N5 bS5oIGNrY3RlbC5oIGNrY2xpYi5oIGNrY3VuaS5oCi0KLWNrdXVzeC4kKEVYVCk6IGNrdXVzeC5j IGNrY2tlci5oIGNrdXVzci5oIGNrY2RlYi5oIGNrY2FzYy5oIGNrY3N5bS5oIFwKLQkJY2tjc2ln LmggY2tjbmV0LmggY2tjdGVsLmggY2tjbGliLmggY2tjeGxhLmggY2t1eGxhLmggY2tjdW5pLmgK LQotY2t1dXN5LiQoRVhUKTogY2t1dXN5LmMgY2tja2VyLmggY2tjZGViLmggY2tjYXNjLmggY2tj bmV0LmggY2tjc3ltLmggY2tjdGVsLmggXAotCQkgY2tjbGliLmgKLQotY2t1Y21kLiQoRVhUKTog Y2t1Y21kLmMgY2tjYXNjLmggY2t1Y21kLmggY2tjZGViLmggY2tjc3ltLmggY2tjdGVsLmggY2tj bGliLmgKLQotY2t1ZmlvLiQoRVhUKTogY2t1ZmlvLmMgY2tjZGViLmggY2t1dmVyLmggY2tjc3lt LmggY2tjbGliLmggXAotCQlja2N4bGEuaCBja3V4bGEuaCBja2N1bmkuaAotCi1ja3V0aW8uJChF WFQpOiBja3V0aW8uYyBja2NkZWIuaCBja2NuZXQuaCBja3V2ZXIuaCBja2NzeW0uaCBja2N0ZWwu aCBja2NsaWIuaAotCi1ja3Vjb24uJChFWFQpOiBja3Vjb24uYyBja2NrZXIuaCBja2NkZWIuaCBj a2Nhc2MuaCBja2NuZXQuaCBja2NzeW0uaCBja2N0ZWwuaCBcCi0JCSBja2NsaWIuaAotCi1ja3Vj bnMuJChFWFQpOiBja3VjbnMuYyBja2NrZXIuaCBja2NkZWIuaCBja2Nhc2MuaCBja2NuZXQuaCBj a2NzeW0uaCBja2N0ZWwuaCBcCi0JCSBja2NsaWIuaCBja2N4bGEuaCBja3V4bGEuaCBja2N1bmku aAotCi1ja2NuZXQuJChFWFQpOiBja2NuZXQuYyBja2NkZWIuaCBja2NrZXIuaCBja2NuZXQuaCBj a2NzeW0uaCBja2NzaWcuaCBja2N0ZWwuaCBcCi0JCSBja2NsaWIuaAotCi1ja2N0ZWwuJChFWFQp OiBja2NzeW0uaCBja2NkZWIuaCBja2NrZXIuaCBja2NuZXQuaCBja2N0ZWwuaCBja2NsaWIuaAot Ci0jIGNrX29mZl90OiBja19vZmZfdC4kKEVYVCkKLSMJJChDQykgLW8gY2tfb2ZmX3QgY2tfb2Zm X3QuJChFWFQpCi0KLXdhcnQ6IGNrd2FydC4kKEVYVCkKLQkkKENDKSAkKExOS0ZMQUdTKSAtbyB3 YXJ0IGNrd2FydC4kKEVYVCkgJChMSUJTKQotCi1ja2NtZGIuJChFWFQpOiBja2NtZGIuYyBja2Nk ZWIuaCBja2NzeW0uaCBja2NsaWIuaAotCi1ja3dhcnQuJChFWFQpOiBja3dhcnQuYwotCi1ja3Vk aWEuJChFWFQpOiBja3VkaWEuYyBja2NrZXIuaCBja2NkZWIuaCBja3VjbWQuaCBja2Nhc2MuaCBj a2NzeW0uaCBja2NzaWcuaCBcCi0JCWNrY25ldC5oIGNrY3RlbC5oIGNrY2xpYi5oCi0KLWNrdXNj ci4kKEVYVCk6IGNrdXNjci5jIGNrY2tlci5oIGNrY2RlYi5oIGNrY2FzYy5oIGNrY3N5bS5oIGNr Y3NpZy5oIFwKLQkJY2tjbmV0LmggY2tjdGVsLmggY2tjbGliLmgKLQotY2t1c2lnLiQoRVhUKTog Y2t1c2lnLmMgY2tjYXNjLmggY2tjZGViLmggY2tja2VyLmggY2tjbmV0LmggY2t1dXNyLmggXAot CQlja2NzaWcuaCBja2N0ZWwuaCBja2NsaWIuaAotCi1ja2NmdHAuJChFWFQpOiBja2NmdHAuYyBj a2NkZWIuaCBja2Nhc2MuaCBja2NrZXIuaCBja3VjbWQuaCBja3V1c3IuaCBcCi0JCWNrY25ldC5o IGNrY3RlbC5oIGNrY3hsYS5oIGNrdXhsYS5oIGNrY3VuaS5oCi0KLWNrdXB0eS4kKEVYVCk6IGNr dXB0eS5jIGNrdXB0eS5oIGNrY2RlYi5oCi0KLWNrdWF0aC4kKEVYVCk6IGNrdWF0aC5jIGNrY2Rl Yi5oIGNrdWNtZC5oIGNrdWF0aC5oIGNrdWF0Mi5oIGNrY3RlbC5oIFwKLQkJIGNrY2xpYi5oIGNr Y25ldC5oCi0KLWNrX2NycC4kKEVYVCk6IGNrX2NycC5jIGNrY2RlYi5oIGNrY25ldC5oIGNrdWF0 aC5oIGNrY2xpYi5oCi0KLWNrX3NzbC4kKEVYVCk6IGNrX3NzbC5jIGNrY2RlYi5oIGNrdWNtZC5o IGNrdWF0aC5oIGNrdWF0Mi5oIGNrY3RlbC5oIFwKLQkJIGNrY2xpYi5oIGNrX3NzbC5oCi0KLSMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIwotIwotIyBFbnRyaWVzIHRvIG1ha2UgQy1LZXJtaXQgZm9yIHNwZWNp ZmljIHN5c3RlbXMuCi0jCi0jIFB1dCB0aGUgb25lcyB0aGF0IG5lZWQgc2hvcnQgbWFrZWZpbGVz IGZpcnN0LgotCi0jQXBvbGxvIEFlZ2lzIDkueC4gIEluY2x1ZGVzIFRDUC9JUCBzdXBwb3J0Lgot I1lvdSBjYW4gYWxzbyBhZGQgcHJvY2Vzc29yLWRlcGVuZGVudCBvcHRpbWl6YXRpb24gc3dpdGNo ZXMgbGlrZSAtTTU3MC4KLWFlZ2lzOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBm b3IgQXBvbGxvIEFlZ2lzIDkueC4uLgotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gXAotCSJDRkxBR1M9IC1EQlNENCAtRFRDUFNPQ0tFVCAtRE5PQ1NFVFMgLURDS19D VVJTRVMgLU8gJChLRkxBR1MpIiBcCi0JIkxJQlMgPSAtbGN1cnNlcyAtbHRlcm1jYXAiCi0KLSNB cHBsZSBNYWMgSUksIEEvVVggcHJlLTMuMAotI1dhcm5pbmcsIGlmICJzZW5kICoiIGRvZXNuJ3Qg d29yaywgdHJ5IHRoZSBhdXh1ZnMgbWFrZWZpbGUgZW50cnkgYmVsb3cuCi1hdXg6Ci0JQGVjaG8g TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNYWNpbnRvc2ggQS9VWC4uLgotCSQoTUFLRSkg d2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtREFVWCAtRFRD UFNPQ0tFVCAkKEtGTEFHUykgLWkgLU8iICJMTktGTEFHUyA9IC1pIgotCi0jQXBwbGUgTWFjIElJ LCBBL1VYIHByZS0zLjAsIGNvbXBpbGVkIHdpdGggZ2NjCi1hdXhnY2M6Ci0JQGVjaG8gTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNYWNpbnRvc2ggQS9VWC4uLgotCSQoTUFLRSkgd2VybWl0 IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtREFVWCAtRFRDUFNPQ0tF VCAtdHJhZGl0aW9uYWwgJChLRkxBR1MpIC1pIC1PIiBcCi0JIkxOS0ZMQUdTID0gIiAiQ0MgPSBn Y2MiICJDQzIgPSBnY2MiCi0KLSNBcHBsZSBNYWMgSUksIEEvVVgsIHByZS0zLjAsIGJ1dCB3aXRo IHVmcyBmaWxlIHZvbHVtZXMsIHVzZXMgPGRpcmVudC5oPi4KLWF1eHVmczoKLQlAZWNobyBNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE1hY2ludG9zaCBBL1VYLi4uCi0JJChNQUtFKSB3ZXJt aXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1EQVVYIC1EVENQU09D S0VUIC1ERElSRU5UICQoS0ZMQUdTKSAtaSAtTyIgIkxOS0ZMQUdTID0gLWkiCi0KLSNBcHBsZSBN YWMgSUksIEEvVVggMy4wLCBjb21waWxlZCB3aXRoIGdjYwotYXV4M2djYzoKLQlAZWNobyBNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE1hY2ludG9zaCBBL1VYIDMuMC4uLgotCSQoTUFLRSkg d2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtREFVWCAtREhE QlVVQ1AgLURMRkRFVk5PIC1EVENQU09DS0VUIC1ERElSRU5UICQoS0ZMQUdTKSIgXAotCSJMTktG TEFHUyA9IC1zIiAiTElCUyA9ICQoTElCUykiIFwKLQkiQ0M9Z2NjIC1waXBlIC10cmFkaXRpb25h bCIgIkNDMj1nY2MgLXBpcGUgLXRyYWRpdGlvbmFsIgotCi0jQXBwbGUgTWFjIElJLCBBL1VYIDMu MCwgY29tcGlsZWQgd2l0aCBnY2MsIHVzZXMgY3Vyc2VzCi1hdXgzY2djYzoKLQlAZWNobyBNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE1hY2ludG9zaCBBL1VYIDMuMC4uLgotCSQoTUFLRSkg Ik1BS0U9JChNQUtFKSIgQ0M9JChDQykgQ0MyPSQoQ0MyKSBhdXgzZ2NjIFwKLQlLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPSQoS0ZMQUdTKSAtRENLX0NVUlNFUyIgIkxJQlMg PSAtbGN1cnNlcyAkKExJQlMpIgotCi0jIFRlbm9uIE1hY2hUZW4sIHRlc3RlZCBvbiBBcHBsZSBQ b3dlcmJvb2sgd2l0aCBNYWNoVGVuIDIuMS4xLkQuCi0jIE5PVEU6IFRoaXMgZG9lc24ndCBkbyBh bnl0aGluZyBhYm91dCBVVUNQLiAgSXQgb25seSB3b3JrcyBpZiAvdXNyL3Nwb29sL3V1Y3AKLSMg aGFzIHBlcm1pc3Npb24gb2YgNzc3LCBhbmQgZGlhbG91dCBkZXZpY2UgaXMgd29ybGQgcmVhZC93 cml0ZWFibGUuCi1tYWNodGVuOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3Ig TWFjaFRlbi4uLgotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAot CSJDRkxBR1M9IC1EQlNENDMgLURUQ1BTT0NLRVQgLURTSUdfViAtRE5ER1BXTkFNIC1EQ0tfQ1VS U0VTIC1PIFwKLQkkKEtGTEFHUykiICAiTElCUz0tbGN1cnNlcyAtbHRlcm1jYXAiCi0KLSNCZWxs IExhYnMgUmVzZWFyY2ggVU5JWCBWMTAKLSNDYW4ndCBhZGQgVENQL0lQIGJlY2F1c2UgdGhlcmUg aXMgbm8gc29ja2V0cyBsaWJyYXJ5LiAgSXQgd291bGQgaGF2ZSB0bwotI2JlIGRvbmUgdXNpbmcg c3RyZWFtcywgYnV0IHRoZXJlIGlzIG5vIGNvZGUgaW4gQy1LZXJtaXQgZm9yIHRoYXQuCi0jUmVt b3ZlIC1ETk9KQyBpZiBkZXNpcmVkIChpZiB5b3VyIHN5c3RlbSBoYXMgY3NoLCBrc2gsIG9yIGJh c2gpLgotYmVsbHYxMDoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEJlbGwg TGFicyBSZXNlYXJjaCBVTklYIFYxMC4uLgotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RB UkdFVC0kKEApfSBcCi0JIkNGTEFHUz0gLURCRUxMVjEwIC1EQlNENCAtRE5ESVIgLUROT0pDIC1E Tk9TWVNJT0NUTEggLUROT1NFVFJFVSBcCi0JLUROT0NTRVRTIC1NSU5JRElBTCAkKEtGTEFHUyki Ci0KLSMgV0FSTklORzogVGhlIGVhcmx5IEJTRCBlbnRyaWVzIGRvIG5vdCBidWlsZCBpbiB2ZXJz aW9uIDcuMCB3aXRoIHRoZSBzdG9jawotIyBCU0QgY29tcGlsZXI6ICJUb28gbWFueSBkZWZpbmVz Ii4gIFVubGVzcyB5b3UgY2FuIHJlYnVpbGQgY3BwIHRvIGhhdmUgbW9yZQotIyBzcGFjZSBmb3Ig ZGVmaW5lcywgdGhlc2UgYnVpbGRzIG11c3QgYmUgYWNjb21wbGlzaGVkIGJ5OgotIyBjb3B5aW5n IHRoZSAvdXNyL2luY2x1ZGUgdHJlZSB0byBzb21lcGxhY2UgZWxzZSwgcHJlcHJvY2Vzc2luZyB0 aGVyZSB3aXRoIGNjCi0jIC1FIC1JLi9pbmNsdWRlIG9yIHdoYXRldmVyIChwbHVzIGFsbCB0aGUg c2FtZSAtRCdzLCBhZGRpbmcgYW55IG5lY2Vzc2FyeQotIyAtVS8tRCB0byBvdmVycmlkZSB0aGUg YXJjaGl0ZWN0dXJlKSksIHJlbmFtaW5nIHRoZSB0aGUgcmVzdWx0aW5nIGZpbGVzIGJhY2sKLSMg dG8gdGhlaXIgb3JpZ2luYWwgbmFtZXMsIGJyaW5naW5nIHRoZW0gYmFjayB0byB0aGUgb3JpZ2lu YWwgQlNEIHN5c3RlbSwgYW5kCi0jIHJ1bm5pbmcgdGhlIG1ha2UgdGFyZ2V0IHRoZXJlLiAgVGhp cyB0ZWNobmlxdWUgd2FzIHVzZWQgZm9yIDQuMiBhbmQgNC4zIEJTRAotIyBvbiBhIFZBWCBpbiBD LUtlcm1pdCA3LjAgKGxhdGVyLCBjcHAgb24gdGhhdCBtYWNoaW5lIHdhcyByZWJ1aWx0IHRvIGFs bG93Ci0jIG1vcmUgc3ltYm9scywgc28gdGhlIEMtS2VybWl0IDguMCBidWlsZCBwcm9jZWVkcyBu b3JtYWxseSkuCi0KLSNCZXJrZWxleSBVbml4IDQuMQotYnNkNDE6Ci0JQGVjaG8gTWFraW5nIEMt S2VybWl0ICQoQ0tWRVIpIGZvciA0LjFCU0QuLi4KLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQk e0tUQVJHRVQtJChAKX0gXAotCSJDRkxBR1M9IC1EQlNENDEiICJMSUJTID0gLWxqb2JzIgotCi0j QmVya2VsZXkgNC4yLCA0LjMsIGFsc28gVWx0cml4LTMyIDEueCwgMi54LCAzLngsIG1hbnkgb3Ro ZXJzCi0jIEFkZCAtTywgLXMsIGV0YywgaWYgdGhleSB3b3JrLgotIyBJZiB5b3UgaGF2ZSBhIHZl cnNpb24gb2YgQlNEIGJ1dCBzaWduYWwoKSBpcyB2b2lkIHJhdGhlciB0aGFuIGludCwKLSMgIm1h a2UgYnNkIEtGTEFHUz0tRFNJR19WIi4KLWJzZDQyOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgNC4yQlNELi4uCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VU LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtREJTRDQgLURUQ1BTT0NLRVQgLUROT1JFQUxQQVRIIC1ETk9U SU1FSCAtRE5PSUtTRCBcCi0JLURDS19DVVJTRVMgLURTWVNUSU1FQkggLUROT1BVVEVOViAtRE5P QU5TSSAtREJJR0JVRk9LIC1EQlNENDJIQUNLIFwKLQkkKEtGTEFHUykiICJMSUJTPS1sY3Vyc2Vz IC1sdGVybWNhcCAkKExJQlMpIgotCi1ic2Q6Ci0JJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIp IGJzZDQyIEtUQVJHRVQ9JCR7S1RBUkdFVC0kKEApfQotCi0jQmVya2VsZXkgVW5peCA0LjIgb3Ig NC4zIHdpdGggSG9uZXlEYW5CZXIgVVVDUAotYnNkaGRiOgotCUBlY2hvIE1ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgNC4yQlNEIHdpdGggSERCIFVVQ1AuLi4KLQkkKE1BS0UpIENDPSQoQ0Mp IENDMj0kKENDMikgYnNkIEtUQVJHRVQ9JCR7S1RBUkdFVC0kKEApfSBcCi0JIktGTEFHUz0gLURI REJVVUNQICQoS0ZMQUdTKSIKLQotI0JlcmtlbGV5IFVuaXggNC4zIHdpdGggYWN1Y250cmwgcHJv Z3JhbSwgY3Vyc2VzLCBUQ1AvSVAgaW5jbHVkZWQuCi1ic2Q0MzoKLQlAZWNobyBNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIDQuM0JTRC4uLgotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7 S1RBUkdFVC0kKEApfSBcCi0JIkNGTEFHUz0gLURCU0Q0IC1EQlNENDMgLURUQ1BTT0NLRVQgLURO T1JFQUxQQVRIIC1ETk9USU1FSCAtRE5PSUtTRCBcCi0JLURDS19DVVJTRVMgLURBQ1VDTlRSTCAt RFNZU1RJTUVCSCAtRE5PUFVURU5WIC1ETk9BTlNJIC1EQklHQlVGT0sgXAotCS1EQlNENDJIQUNL ICQoS0ZMQUdTKSIgIkxJQlM9LWxjdXJzZXMgLWx0ZXJtY2FwICQoTElCUykiCi0KLSM0LjNCU0Qs IGN1cnNlcyBleGNsdWRlZAotYnNkNDNuYzoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZF UikgZm9yIDQuM0JTRC4uLgotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVC0kKEAp fSBcCi0JIkNGTEFHUz0gLURCU0Q0IC1EQlNENDMgLURUQ1BTT0NLRVQgLUROT1JFQUxQQVRIIC1E Tk9USU1FSCBcCi0JLURBQ1VDTlRSTCAtRFNZU1RJTUVCSCAtRE5PSUtTRCAtRE5PUFVURU5WIC1E Tk9BTlNJIC1EQklHQlVGT0sgXAotCS1EQlNENDJIQUNLICQoS0ZMQUdTKSIgIkxJQlM9JChMSUJT KSIKLQotIzQuM0JTRCwgVENQL0lQIGV4Y2x1ZGVkLgotYnNkNDNub25ldDoKLQlAZWNobyBNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIDQuM0JTRCArIGN1cnNlcy4uLgotCSQoTUFLRSkgeGVy bWl0IEtUQVJHRVQ9JCR7S1RBUkdFVC0kKEApfSBcCi0JIkNGTEFHUz0gLURCU0Q0IC1EQlNENDMg LURUQ1BTT0NLRVQgLUROT1JFQUxQQVRIIC1ETk9USU1FSCAtRE5PSUtTRCBcCi0JLURDS19DVVJT RVMgLURBQ1VDTlRSTCAtRFNZU1RJTUVCSCAtRE5PUFVURU5WIC1ETk9BTlNJIC1EQklHQlVGT0sg XAotCS1EQlNENDJIQUNLIC1ETk9ORVQgJChLRkxBR1MpIiAiTElCUz0tbGN1cnNlcyAtbHRlcm1j YXAgJChMSUJTKSIKLQotI0JlcmtlbGV5IFVuaXggNC4yIG9yIDQuMyB3aXRoIGxvY2sgZGlyZWN0 b3J5IC91c3Ivc3Bvb2wvdXVjcC9MQ0svTENLLi50dHl4eCwKLSNidXQgd2l0aG91dCBhY3VjbnRy bCBwcm9ncmFtCi1ic2RsY2s6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciA0 LjJCU0QsIC91c3Ivc3Bvb2wvdXVjcC9MQ0svLi4uCi0JJChNQUtFKSBDQz0kKENDKSBDQzI9JChD QzIpIGJzZCBLVEFSR0VUPSQke0tUQVJHRVQtJChAKX0gXAotCSJLRkxBR1M9IC1ETENLRElSICQo S0ZMQUdTKSIKLQotI0JlcmtlbGV5IFVOSVggNC40LUxpdGUsIDQuNC1FbmN1bWJlcmVkLCBOZXQv MiwgZXRjIChQb3N0LVJlbm8pLAotI3dpdGggVENQL0lQIG5ldHdvcmtpbmcuICBUaGlzIHdhcyB0 aGUgYmFzaXMgZm9yIEZyZWVCU0QsIE5ldEJTRCwgT3BlbkJTRCwKLSNCU0RJLCBCU0QvT1MsIGFu ZCBNYWMgT1MgWCAoZWFjaCBvZiB3aGljaCBoYXMgaXRzIG93biBzZXQgb2YgdGFyZ2V0cyB0aGF0 Ci0jYXJlIG5ld2VyIHRoYW4gdGhpcyBvbmUpLgotIwotI05PVEU6IFRoaXMgaXMgbm90IGEgcHVy ZSBQT1NJWCBjb25maWd1cmF0aW9uLiAgVXNpbmcgLURQT1NJWCBpbnN0ZWFkIG9mCi0jIC1EQlNE NDQgcHJldmVudHMgYW55IGtpbmQgb2YgZGlyZWN0b3J5LXJlYWRpbmcgKGZvciB3aWxkY2FyZCBl eHBhbnNpb24pLAotI2FuZCBkaXNhbGxvd3MgdXNlIG9mIEVOT1RDT05OIHN5bWJvbCBmb3IgZGV0 ZWN0aW5nIGJyb2tlbiBuZXR3b3JrCi0jY29ubmVjdGlvbnMsIGFuZCBkaXNhbGxvd3MgUlRTL0NU UyBmbG93IGNvbnRyb2wsIGFuZCB3b3VsZCBhbHNvIHJlcXVpcmUKLSNkZWZpbml0aW9uIG9mIHRo ZSBhcHByb3ByaWF0ZSBVVUNQIGxvY2tmaWxlIGNvbnZlbnRpb24uCi0jRG8gbm90IGFkZCAtRENL X1BPU0lYX1NJRyB3aXRob3V0IHJlYWRpbmcgPHNpZ25hbC5oPiBmaXJzdCEgIEZvciBleGFtcGxl LAotI3NpZ3NldGptcCgpLCBldGMsIHRlbmQgdG8gYmUgZGVmaW5lZCBidXQgbm90IGltcGxlbWVu dGVkLgotIwotI05PVEU6IG9yaWdpbmFsbHkgY3J5cHQgd2FzIGluIGxpYmMgLSBsYXRlciBpdCB3 YXMgdW5idW5kbGVkLgotI1JlbW92ZSB0aGUgTElCUyBjbGF1c2UgdG8gYnVpbGQgb24gYW4gZWFy bHkgNC40QlNEIHBsYXRmb3JtLgotIwotYnNkNDQ6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQo Q0tWRVIpIGZvciA0LjRCU0QuLi4KLQkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKENDMikgeGVybWl0 IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1EQlNENDQgLURUQ1BTT0NL RVQgJChLRkxBR1MpIC1PIiAiTElCUz0tbGNyeXB0IgotCi0jQmVya2VsZXkgVU5JWCA0LjQsIGFz IGFib3ZlLCBidXQgd2l0aCBjdXJzZXMgZm9yIGZ1bGxzY3JlZW4gZGlzcGxheQotI1BsZWFzZSBy ZWFkIG5vdGVzIGZvciBic2Q0NCBlbnRyeSBqdXN0IGFib3ZlLgotIyBOT1RFOiBUaGlzIG9uZSBk dW1wZWQgY29yZSBvbiB0aGUgcmVhbCA0LjRCU0QgZGV2ZWxvcG1lbnQgc3lzdGVtIGF0Ci0jIFVD IEJlcmtlbGV5IChhbiBIUC05MDAwLzMwMCksIHNvIHRoZSBuby1jdXJzZXMgdmVyc2lvbiB3YXMg dXNlZAotIyBmb3IgdGhhdCBvbmUsIHdoaWNoIHdhcyB1bnBsdWdnZWQgeWVhcnMgYWdvLgotYnNk NDRjOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgNC40QlNEIHdpdGggY3Vy c2VzLi4uCi0JJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIHhlcm1pdCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtREJTRDQ0IC1EQ0tfQ1VSU0VTIC1EVENQU09DS0VU ICQoS0ZMQUdTKSAtTyIgXAotCSJMSUJTPSAtbGN1cnNlcyAtbHRlcm1jYXAgLWxjcnlwdCAkKExJ QlMpIgotCi0jRm9yIEZyZWVCU0QgMS54LgotZnJlZWJzZDE6Ci0JQGVjaG8gJ01ha2luZyBDLUtl cm1pdCAkKENLVkVSKSBmb3IgRnJlZUJTRC4uLicKLQkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKEND MikgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1EQlNENDQg LURDS19DVVJTRVMgLURUQ1BTT0NLRVQgLUROT0NPVEZNQyAtZnVuc2lnbmVkLWNoYXIgXAotCS1E Rk5GTE9BVCAtRE5PSFRFUk1DQVAgLUROT1JFQUxQQVRIIC1ETk9TWVNDT05GICQoS0ZMQUdTKSAt TyAtcGlwZSIgXAotCSJMSUJTPSAtbGN1cnNlcyAtbHRlcm1jYXAgLWxtICQoTElCUykiCi0KLSNG cmVlQlNEIDIueCB3aXRoIG5jdXJzZXMKLWZyZWVic2QyOgotCUBlY2hvICdNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIEZyZWVCU0QgMi54IHdpdGggbmN1cnNlcy4uLicKLQkkKE1BS0UpIEND PSQoQ0MpIENDMj0kKENDMikgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJD RkxBR1M9IC1EQlNENDQgLURDS19OQ1VSU0VTIC1EVENQU09DS0VUIC1ETk9DT1RGTUMgLURVU0Vf U1RSRVJST1IgXAotCS1EVFBVVFNBUkdUWVBFPWludCAtRFRQVVRTQVJHMUNPTlNUIC1ERlJFRUJT RDIgLWZ1bnNpZ25lZC1jaGFyIFwKLQktREZORkxPQVQgJChLRkxBR1MpIC1PIC1waXBlIiBcCi0J IkxJQlM9IC1sbmN1cnNlcyAtbHRlcm1saWIgLWxjcnlwdCAtbG0gJChMSUJTKSIKLQotI0ZvciBG cmVlQlNEIDIueCAtLSBVc2VzIGN1cnNlcyByYXRoZXIgdGhhbiBuY3Vyc2VzCi1mcmVlYnNkMmM6 Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgRnJlZUJTRCAyLnggd2l0aCBj dXJzZXMuLi4nCi0JJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIHhlcm1pdCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtREJTRDQ0IC1EQ0tfQ1VSU0VTIC1EVENQU09D S0VUIC1ETk9DT1RGTUMgLURVU0VfU1RSRVJST1IgXAotCS1EVFBVVFNBUkdUWVBFPWludCAtRFRQ VVRTQVJHMUNPTlNUIC1ERlJFRUJTRDIgLURGTkZMT0FUIFwKLQktZnVuc2lnbmVkLWNoYXIgJChL RkxBR1MpIC1PIC1waXBlIiBcCi0JIkxJQlM9IC1sY3Vyc2VzIC1sdGVybWxpYiAtbGNyeXB0IC1s bSAkKExJQlMpIgotCi0jRnJlZUJTRCAzLnggd2l0aCBuY3Vyc2VzIGFuZCB1dV9sb2NrKCkKLSMo Tm90ZTogdXVfbG9jaygpIGdvZXMgYmFjayB0byAyLjIuMiwgYnV0IG5vdCBuZWNlc3NhcmlseSAy LjApCi0jT0sgMjAxMS8wOC8yMCBGcmVlQlNEIDMuMwotZnJlZWJzZDM6Ci0JQGVjaG8gJ01ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgRnJlZUJTRCAzLnggd2l0aCBuY3Vyc2VzLi4uJwotCSQo TUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCi0JIkNGTEFHUz0gLURCU0Q0NCAtRENLX05DVVJTRVMgLURUQ1BTT0NLRVQgLUROT0NPVEZN QyAtZnVuc2lnbmVkLWNoYXIgXAotCS1EVFBVVFNBUkdUWVBFPWludCAtRFVTRV9TVFJFUlJPUiAt REZSRUVCU0QzIC1EVVNFX1VVX0xPQ0sgLURGTkZMT0FUIFwKLQkkKEtGTEFHUykgLU8gLXBpcGUi IFwKLQkiTElCUz0gLWxuY3Vyc2VzIC1sY3J5cHQgLWx1dGlsIC1sbSAkKExJQlMpIgotCi0jQXMg YWJvdmUgYnV0IHdpdGggY3Vyc2VzIHJhdGhlciB0aGFuIG5jdXJzZXMuCi1mcmVlYnNkM2M6Ci0J QGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgRnJlZUJTRCAzLnggd2l0aCBjdXJz ZXMuLi4nCi0JJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIHhlcm1pdCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtREJTRDQ0IC1EQ0tfQ1VSU0VTIC1EVENQU09DS0VU IC1ETk9DT1RGTUMgLURVU0VfVVVfTE9DSyBcCi0JLURUUFVUU0FSR1RZUEU9aW50IC1EVVNFX1NU UkVSUk9SIC1ERlJFRUJTRDMgJChLRkxBR1MpIC1ERk5GTE9BVCBcCi0JLWZ1bnNpZ25lZC1jaGFy IC1waXBlIC1PIiBcCi0JIkxJQlM9IC1sY3Vyc2VzIC1sY3J5cHQgLWx1dGlsIC1sbSAkKExJQlMp IgotCi0jRnJlZUJTRCA0LjAgd2l0aCBuY3Vyc2VzIGFuZCB1dV9sb2NrKCkuICBOb3RlIC0gdGhl cmUgaXMgbm8gY3Vyc2VzIGluIDQuMC4KLSNuY3Vyc2VzIDUuMCBpcyBicm9rZW4gcmVxdWlyaW5n IHVzIHRvIHdvcmsgYXJvdW5kIHdpdGggc2V0YnVmKCkuCi1mcmVlYnNkNDA6Ci0JQGVjaG8gJ01h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgRnJlZUJTRCA0Lnggd2l0aCBuY3Vyc2VzLi4uJwot CSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCi0JIkNGTEFHUz0gLURCU0Q0NCAtRENLX05DVVJTRVMgLURUQ1BTT0NLRVQgLUROT0NP VEZNQyAtREZORkxPQVQgXAotCS1mdW5zaWduZWQtY2hhciAtRFRQVVRTQVJHVFlQRT1pbnQgLURV U0VfU1RSRVJST1IgLURGUkVFQlNENCBcCi0JLUROT05PU0VUQlVGIC1EVVNFX1VVX0xPQ0sgJChL RkxBR1MpIC1PIC1waXBlIiBcCi0JIkxJQlM9IC1sbmN1cnNlcyAtbGNyeXB0IC1sdXRpbCAtbG0g JChMSUJTKSIKLQotI0ZyZWVCU0QgNC4xIGFuZCBhYm92ZQotI0xpa2UgRnJlZUJTRCA0LjAgYnV0 IHdpdGhvdXQgdGhlIE5PTk9TRVRCVUYgaGFjayBhbmQgd2l0aCBDS19ORVdURVJNLgotI05PVEU6 IFRoaXMgdGFyZ2V0IGRlZmluaXRlbHkgZG9lcyBub3Qgd29yayBmb3IgRnJlZUJTRCAzLjMgaW4g OS4wLjMwMi4KLSNhbmQgaXQgaGFzIG5vdCBiZWVuIHRlc3RlZCBvbiA0IG9yIDUuCi0jT0sgMjAx MS8wNi94eCBGcmVlQlNEIDMuMywgNCw0LCA0LjcsIGFuZCA4LjIKLSNPSyAyMDExLzA4LzIxIEZy ZWVCU0QgMy4zLCA0LjQsIDYuNCwgOS4wCi1mcmVlYnNkIGZyZWVic2Q0MSBmcmVlYnNkNzIgZnJl ZWJzZDUgZnJlZWJzZDYgZnJlZWJzZDcgZnJlZWJzZDggZnJlZWJzZDk6Ci0JQGVjaG8gJ01ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgRnJlZUJTRCA0LjEgb3IgbGF0ZXIuLi4nCi0JQGlmIHRl c3QgYHVuYW1lIC1yIHwgY3V0IC1kIC4gLWYgMWAgLWdlIDg7IHRoZW4gXAotCSAgIEhBVkVfRkJT RDg9Jy1ERlJFRUJTRDgnOyBcCi0JZWxzZSBIQVZFX0ZCU0Q4PScnOyBmaTsgXAotCWlmIHRlc3Qg YHVuYW1lIC1yIHwgY3V0IC1kIC4gLWYgMWAgLWdlIDk7IHRoZW4gXAotCSAgIEhBVkVfRkJTRDk9 Jy1ERlJFRUJTRDknOyBcCi0JZWxzZSBIQVZFX0ZCU0Q5PScnOyAgZmk7IFwKLQlpZiB0ZXN0IC1m IC91c3IvaW5jbHVkZS91dG1weC5oIDsgXAotCXRoZW4gSEFWRV9VVE1QWD0nLURIQVZFVVRNUFgn IDsgXAotCWVsc2UgSEFWRV9VVE1QWD0nJyA7IGZpOyBcCi0JJChNQUtFKSBDQz0kKENDKSBDQzI9 JChDQzIpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtREJT RDQ0IC1EQ0tfTkNVUlNFUyAtRENLX05FV1RFUk0gLURUQ1BTT0NLRVQgLUROT0NPVEZNQyBcCi0J LURGUkVFQlNENCAkJEhBVkVfRkJTRDggJCRIQVZFX0ZCU0Q5IC1EVVNFX1VVX0xPQ0sgLURGTkZM T0FUIFwKLQkkJEhBVkVfVVRNUFggLURIRVJBTEQ9XCJcXFwiIGB1bmFtZSAtcnNgXFxcIlwiIFwK LQktZnVuc2lnbmVkLWNoYXIgLURUUFVUU0FSR1RZUEU9aW50IC1EVVNFX1NUUkVSUk9SICQoS0ZM QUdTKSBcCi0JLU8yIC1waXBlIlwKLQkiTElCUz0gLWxuY3Vyc2VzIC1sY3J5cHQgLWx1dGlsIC1s bSAkKExJQlMpIgotCi0jRnJlZUJTRCA1LjAgb3IgbGF0ZXIgd2l0aCBPcGVuU1NMLgotI09LIDIw MTEvMDYvMTUgRnJlZUJTRCA0LjcgYW5kIDguMgotI09LIDIwMTEvMDgvMjAgRnJlZUJTRCA5LjAt Q1VSUkVOVAotZnJlZWJzZCtzc2wgZnJlZWJzZCtvcGVuc3NsIGZyZWVic2Q1MCtvcGVuc3NsOgot CUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEZyZWVCU0Qgd2l0aCBLZXJiZXJv cyA1Li4uJwotCUBjYXNlIGBvcGVuc3NsIHZlcnNpb25gIGluIFwKLQkgICowLjkuNyopIE9QRU5T U0xPUFRJT049Ii1ET1BFTlNTTF8wOTciIDs7IFwKLQkgICowLjkuOCopIE9QRU5TU0xPUFRJT049 Ii1ET1BFTlNTTF8wOTgiIDs7IFwKLQkgICoxLlswLTldLlswLTldKikgT1BFTlNTTE9QVElPTj0i LURPUEVOU1NMXzEwMCIgOzsgXAotCSAgKikgT1BFTlNTTE9QVElPTj0iIiA7OyBcCi0JZXNhYzsg XAotCUhBVkVfREVTPScnOyBcCi0JREVTX0xJQj0nJzsgXAotCWlmIGxzIC91c3IvbGliL2xpYmRl cyogPiAvZGV2L251bGwgMj4gL2Rldi9udWxsIHx8IFwKLQkgICBscyAkKFNTTExJQikvbGliZGVz KiA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGw7IHRoZW4gXAotCSAgICAgIERFU19MSUI9Jy1sZGVz JzsgXAotCSAgICAgIEhBVkVfREVTPSctRENLX0RFUyAtRExJQkRFUyc7IFwKLSAgICAgICAgICAg ICAgZWNobyAiSEFWRSBERVMiOyBcCi0gICAgICAgICAgIGVsc2UgZWNobyAiTk8gREVTIjsgXAot CWZpOyBcCi0JJChNQUtFKSBmcmVlYnNkIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDID0g JChDQykiICJDQzIgPSAkKENDMikiIFwKLQlLRkxBR1M9Ii1EQ0tfQVVUSEVOVElDQVRJT04gLURD S19TU0wgJChTU0xJTkMpIC1EWkxJQiAkJE9QRU5TU0xPUFRJT04gXAotCSQkSEFWRV9ERVMgJChL RkxBR1MpIiAgIkxOS0ZMQUdTID0gJChMTktGTEFHUykiIFwKLQkiTElCUz0gLWxuY3Vyc2VzIC1s Y3J5cHQgLWxzc2wgLWxjcnlwdG8gLWx1dGlsIC1sbSBcCi0JJChTU0xMSUIpICQkREVTX0xJQiAk KExJQlMpIjsgXAotCWlmIFsgISAtZiAuL3dlcm1pdCBdIHx8IFsgLi9ja2NtYWkubyAtbnQgLi93 ZXJtaXQgXSA7IHRoZW4gXAotCQllY2hvICIiOyBcCi0JCWVjaG8gIklmIGJ1aWxkIGZhaWxlZCB0 cnk6IjsgXAotCQllY2hvICIiOyBcCi0JCWVjaG8gIiAgbWFrZSBjbGVhbiA7IG1ha2UgJCR7S1RB UkdFVDotJChAKX0gS0ZMQUdTPS1VQ0tfREVTIjsgXAotCQllY2hvICIiOyBcCi0JZmkKLQotI05l dEJTRCAxLjQuMSBvciBsYXRlciB3aXRoIHZhbml0eSBiYW5uZXIgYXV0b21hdGVkIHdpdGggdW5h bWUKLSNhbmQgYXV0b21hdGljIGluY2x1c2lvbiBvZiBsYXJnZSBmaWxlIHN1cHBvcnQgaWYgaXQg aXMgYXZhaWxhYmxlLgotI1RoaXMgdGFyZ2V0IHRlc3RlZCBzdWNjZXNzZnVsbHkgb24gTmV0QlNE IDEuNC4xLCAxLjUuMiwgYW5kIDIuMC4zIChKYW4gMjAwNikuCi0jRmFpbHMgb24gTmV0QlNEIDIu MCBvbiBTdW4vMyBtYzY4MDMwIHdpdGggZ2NjIDMuMy4zIHVubGVzcyBvcHRpbWl6YXRpb24gaXMK LSNkaXNhYmxlZCBvbiBja2NmbjIuYyAoIktGTEFHUz0tTzAiKSAoTGV0dGVyIE8gRGlnaXQgWmVy bykuCi0jKFRoaXMgY291bGQgYmUgYXV0b21hdGVkIGJ5IHRlc3RpbmcgYHVuYW1lIC1tYCBmb3Ig InN1bjMiLikKLSNPSzogMjAxMS8wNi8xNSBvbiBOZXRCU0QgMS41LjIgYW5kIDUuMS4KLSNPSzog MjAxMS8wOC8yMSBvbiA1LjEuCi1uZXRic2QgbmV0YnNkMiBuZXRic2QxNSBuZXRic2QxNiBvbGQt bmV0YnNkOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTmV0QlNEIHdpdGgg Y3Vyc2VzLi4uCi0JJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIHhlcm1pdCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPWBncmVwIGZzZWVrbyAvdXNyL2luY2x1ZGUvc3Rk aW8uaCA+IC9kZXYvbnVsbCAmJiBcCi0JZWNobyAnLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxF X09GRlNFVF9CSVRTPTY0J2AgXAotCS1EQlNENDQgLURDS19DVVJTRVMgLURUQ1BTT0NLRVQgLURV U0VfU1RSRVJST1IgLURIQVZFX09QRU5QVFkgXAotCS1mdW5zaWduZWQtY2hhciAtREhFUkFMRD1c IlxcXCIgTmV0QlNEIGB1bmFtZSAtcmBcXFwiXCIgXAotCS1EQ0tfRFRSQ0QgLURDS19EVFJDVFMg LURUUFVUU0FSR1RZUEU9aW50IC1ERk5GTE9BVCAkKEtGTEFHUykgLU8iIFwKLQkiTElCUz0gLWxj dXJzZXMgLWxjcnlwdCAtbG0gLWx1dGlsICQoTElCUykiCi0KLSNOZXRCU0QgMS40LjEgb3IgbGF0 ZXIgd2l0aCBPcGVuU1NMCi0jT0s6IDIwMTEvMDYvMTUgb24gTmV0QlNEIDUuMSAoYnV0IG5vdCAx LjUuMiB3aXRoIE9wZW5TU0wgMC45LjVhKQotI09LOiAyMDExLzA4LzIxIG9uIDUuMS4KLW5ldGJz ZCtzc2wgbmV0YnNkK29wZW5zc2w6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBm b3IgTmV0QlNEK09wZW5TU0wgU1NMTElCPSQoU1NMTElCKScKLQlAY2FzZSBgb3BlbnNzbCB2ZXJz aW9uYCBpbiBcCi0JICAqMC45LjcqKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMDk3IiA7OyBc Ci0JICAqMC45LjgqKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMDk4IiA7OyBcCi0JICAqMS5b MC05XS5bMC05XSopIE9QRU5TU0xPUFRJT049Ii1ET1BFTlNTTF8xMDAiIDs7IFwKLQkgICopIE9Q RU5TU0xPUFRJT049IiIgOzsgXAotCWVzYWM7IFwKLQlIQVZFX0RFUz0nJzsgXAotCURFU19MSUI9 Jyc7IFwKLQlpZiBscyAvdXNyL2xpYi9saWJkZXMqID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbCB8 fCBcCi0JICAgbHMgJChTU0xMSUIpL2xpYmRlcyogPiAvZGV2L251bGwgMj4gL2Rldi9udWxsOyB0 aGVuIFwKLQkgICAgICBERVNfTElCPSctbGRlcyc7IFwKLQkgICAgICBIQVZFX0RFUz0nLURDS19E RVMgLURMSUJERVMnOyBcCi0gICAgICAgICAgICAgIGVjaG8gIkhBVkUgREVTIjsgXAotICAgICAg ICAgICBlbHNlIGVjaG8gIk5PIERFUyI7IFwKLQlmaTsgXAotCSQoTUFLRSkgbmV0YnNkIEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDID0gJChDQykiICJDQzIgPSAkKENDMikiIFwKLQkiS0ZM QUdTPSAtRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfRU5DUllQVElPTiAtRENLX0NBU1QgJCRIQVZF X0RFUyBcCi0JLURDS19TU0wgLURDS19QQU0gLURaTElCIC1ETk9fRENMX0lORVRfQVRPTiAkJE9Q RU5TU0xPUFRJT04gXAotCSQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gJChMTktGTEFHUykiIFwKLQki TElCUz0gLUwvdXNyL3BrZy9saWIgLVIvdXNyL3BrZy9saWIgLWxzc2wgJCRERVNfTElCIC1sY3Vy c2VzIFwKLQktbGNyeXB0byAtbGNyeXB0IC1seiAtbG0gLWxwYW0gLWx1dGlsICQoTElCUykiCi0K LSNOZXRCU0Qgd2l0aCBNSVQgS2VyYmVyb3MgNToKLSMgT0sgMjAxMS8wNi8xNSAob25jZSBLNUlO QyBhbmQgSzVMSUIgd2VyZSBzZXQgcmlnaHQpLgotIyBOT1QgT0sgZm9yIEhlaW1kYWwgLSBIZWlt ZGFsIEtlcmJlcm9zIHN1cHBvcnQgaW4gQy1LZXJtaXQgbmVlZHMgd29yay4KLSMgT0s6IDIwMTEv MDgvMjEgb24gNS4xLgotbmV0YnNkK2tyYjU6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgTmV0QlNEIHdpdGggS2VyYmVyb3MgNS4uLicKLQlAY2FzZSBgb3BlbnNzbCB2ZXJz aW9uYCBpbiBcCi0JICAqMC45LjcqKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMDk3IiA7OyBc Ci0JICAqMC45LjgqKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMDk4IiA7OyBcCi0JICAqMS5b MC05XS5bMC05XSopIE9QRU5TU0xPUFRJT049Ii1ET1BFTlNTTF8xMDAiIDs7IFwKLQkgICopIE9Q RU5TU0xPUFRJT049IiIgOzsgXAotCWVzYWM7IFwKLQlIQVZFX0RFUz0nJzsgXAotCURFU19MSUI9 Jyc7IFwKLQlpZiBscyAvdXNyL2xpYi9saWJkZXMqID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbCB8 fCBcCi0JICAgbHMgJChTU0xMSUIpL2xpYmRlcyogPiAvZGV2L251bGwgMj4gL2Rldi9udWxsOyB0 aGVuIFwKLQkgICAgICBERVNfTElCPSctbGRlcyc7IFwKLQkgICAgICBIQVZFX0RFUz0nLURDS19E RVMgLURMSUJERVMnOyBcCi0gICAgICAgICAgICAgIGVjaG8gIkhBVkUgREVTIjsgXAotICAgICAg ICAgICBlbHNlIGVjaG8gIk5PIERFUyI7IFwKLQlmaTsgXAotCSQoTUFLRSkgbmV0YnNkIEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDID0gJChDQykiICJDQzIgPSAkKENDMikiIFwKLQkiS0ZM QUdTPSAtRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfRU5DUllQVElPTiAtRENLX0tFUkJFUk9TIC1E S1JCNSBcCi0JLURDS19DQVNUICQkSEFWRV9ERVMgLUROT0ZUUF9HU1NBUEkgJChLNUlOQykgJChL NUlOQykva3JiNSBcCi0JJChLRkxBR1MpIiBcCi0JIkxJQlM9ICQoSzVMSUIpIC1ML3Vzci9wa2cv bGliIC1SL3Vzci9wa2cvbGliIC1sY3Vyc2VzICQkREVTX0xJQiBcCi0JLWxjcnlwdG8gLWxnc3Nh cGkgLWxrcmI1IC1sbSAtbHV0aWwgJChMSUJTKSIKLQotIyBOZXRCU0QgLSBXaXRoIEtlcmJlcm9z IDUgYW5kIFNTTCBhbmQgWmxpYi4KLSMgT0s6IDIwMTEvMDgvMjEgb24gNS4xIHdpdGggTUlUIEtl cmJlcm9zLgotbmV0YnNkK2tyYjUrc3NsIG5ldGJzZCtrcmI1K29wZW5zc2wremxpYjoKLQlAZWNo byAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBOZXRCU0QrT3BlblNTTCtLZXJiZXJvczUu Li4nCi0JQGNhc2UgYG9wZW5zc2wgdmVyc2lvbmAgaW4gXAotCSAgKjAuOS43KikgT1BFTlNTTE9Q VElPTj0iLURPUEVOU1NMXzA5NyIgOzsgXAotCSAgKjAuOS44KikgT1BFTlNTTE9QVElPTj0iLURP UEVOU1NMXzA5OCIgOzsgXAotCSAgKjEuWzAtOV0uWzAtOV0qKSBPUEVOU1NMT1BUSU9OPSItRE9Q RU5TU0xfMTAwIiA7OyBcCi0JICAqKSBPUEVOU1NMT1BUSU9OPSIiIDs7IFwKLQllc2FjOyBcCi0J SEFWRV9ERVM9Jyc7IFwKLQlERVNfTElCPScnOyBcCi0JaWYgbHMgL3Vzci9saWIvbGliZGVzKiA+ IC9kZXYvbnVsbCAyPiAvZGV2L251bGwgfHwgXAotCSAgIGxzICQoU1NMTElCKS9saWJkZXMqID4g L2Rldi9udWxsIDI+IC9kZXYvbnVsbDsgdGhlbiBcCi0JICAgICAgREVTX0xJQj0nLWxkZXMnOyBc Ci0JICAgICAgSEFWRV9ERVM9Jy1EQ0tfREVTIC1ETElCREVTJzsgXAotICAgICAgICAgICAgICBl Y2hvICJIQVZFIERFUyI7IFwKLSAgICAgICAgICAgZWxzZSBlY2hvICJOTyBERVMiOyBcCi0JZmk7 IFwKLQkkKE1BS0UpIG5ldGJzZCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9ICQoQ0Mp IiAiQ0MyID0gJChDQzIpIiBcCi0JIktGTEFHUz0gLURDS19BVVRIRU5USUNBVElPTiAtRENLX0VO Q1JZUFRJT04gLURDS19DQVNUICQkSEFWRV9ERVMgXAotCS1EQ0tfS0VSQkVST1MgLURLUkI1IC1E Tk9GVFBfR1NTQVBJICQoSzVJTkMpICQoSzVJTkMpL2tyYjUgXAotCS1EQ0tfU1NMIC1EQ0tfUEFN IC1EWkxJQiAtRE5PX0RDTF9JTkVUX0FUT04gJCRPUEVOU1NMT1BUSU9OIFwKLQkkKEtGTEFHUyki ICJMTktGTEFHUyA9ICQoTE5LRkxBR1MpIiBcCi0JIkxJQlM9ICQoSzVMSUIpIC1ML3Vzci9wa2cv bGliIC1SL3Vzci9wa2cvbGliIC1sc3NsICQkREVTX0xJQiBcCi0JLWxjcnlwdG8gLWxjcnlwdCAt bGdzc2FwaSAtbGtyYjUgLWx6IC1sbSAtbHBhbSAtbHV0aWwgLWxjdXJzZXMgJChMSUJTKSIKLQot I1NwZWNpYWwgU2VjdXJpdHkgRW5oYW5jZWQgTmV0QlNEIHRhcmdldCB3aXRoIFNSUCwgU1NMLCBh bmQgemxpYiBzdXBwb3J0LgotI1RvIGJ1aWxkIHRoaXMsIHlvdSBuZWVkIHRvIEJVSUxEIHRoZSBw a2dzcmMgc3JwX2NsaWVudCBwYWNrYWdlLiAgQWZ0ZXIKLSN5b3UgYnVpbGQgaXQsIHlvdSBtdXN0 IGdvIGludG8gd29yay9zcnAteC55LnovbGlia3J5cHRvIGFuZCAiYm1ha2UgaW5zdGFsbCIKLSN0 aGVuIGdvIHRvIHdvcmsvc3JwLXgueS56L2xpYnNycCBhbmQgImJtYWtlIGluc3RhbGwiLiAgQXMg b2YgMjAwNVEzLCB0aGUKLSNwa2dzcmMgaW5zdGFsbCBvbmx5IGluc3RhbGxlZCB0aGUgc3RhdGlj YWxseSBsaW5rZWQgY2xpZW50IGFwcGxpY2F0aW9ucy4gIFlvdQotI25lZWQgdG8gbWFudWFsbHkg aW5zdGFsbCB0aGUgbGlicmFyaWVzIHRvIGJ1aWxkIHlvdXIgb3duIGFwcGxpY2F0aW9ucy4KLSNO T1QgVEVTVEVEIFJFQ0VOVExZIC0gcHJvYmFibHkgbmVlZHMgd29yay4KLW5ldGJzZCtzc2wrc3Jw K3psaWI6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBOZXRCU0Qgd2l0aCBj dXJzZXMuLi4KLQkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKENDMikgeGVybWl0IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1EQlNENDQgLURDS19DVVJTRVMgLURUQ1BTT0NL RVQgLURVU0VfU1RSRVJST1IgLURORVRCU0QxNSBcCi0JLURDS19EVFJDRCAtRENLX0RUUkNUUyAt RFRQVVRTQVJHVFlQRT1pbnQgLURIQVZFX09QRU5QVFkgXAotCS1JL3Vzci9pbmNsdWRlL29wZW5z c2wgLUkvdXNyL3BrZy9pbmNsdWRlIFwKLQktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1JQIC1E UFJFX1NSUF8xXzRfNSAtRENLX0VOQ1JZUFRJT04gXAotCS1EQ0tfQ0FTVCAtRENLX0RFUyAtRExJ QkRFUyAtRENLX1NTTCAtRFpMSUIgLURGTkZMT0FUICQoS0ZMQUdTKSAtTyIgXAotCSJMSUJTPSAt TC91c3IvcGtnL2xpYiAtUi91c3IvcGtnL2xpYiAtbGN1cnNlcyAtbHNycCAtbGdtcCAtbGRlcyBc Ci0JLWxzc2wgLWxrcnlwdG8gLWxjcnlwdG8gLWxjcnlwdCAtbHogLWxtIC1sdXRpbCAkKExJQlMp IgotCi0jTmV0QlNEIHdpdGggY3Vyc2VzIGxlZnQgb3V0IChlLmcuIGZvciB1c2UgYXMgSUtTRCku Ci1uZXRic2RuYzoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE5ldEJTRCB3 aXRoIG5vIGN1cnNlcy4uLgotCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSBuZXRic2QgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0tRE5PQ1VSU0VTIgotCi0jTmV0QlNE IHdpdGggbmN1cnNlcyByZXF1ZXN0ZWQgZXhwbGljaXRseSByYXRoZXIgdGhhbiBjdXJzZXMtd2hp Y2gtaXMtbmN1cnNlcwotbmV0YnNkbjoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIE5ldEJTRCB3aXRoIGN1cnNlcy4uLgotCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4 ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz1gZ3JlcCBmc2Vla28g L3Vzci9pbmNsdWRlL3N0ZGlvLmggPiAvZGV2L251bGwgJiYgXAotCWVjaG8gJy1EX0xBUkdFRklM RV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCdgIFwKLQktREJTRDQ0IC1EQ0tfQ1VSU0VT IC1EVENQU09DS0VUIC1EVVNFX1NUUkVSUk9SIC1ESEFWRV9PUEVOUFRZIFwKLQktREhFUkFMRD1c IlxcXCIgTmV0QlNEIGB1bmFtZSAtcmBcXFwiXCIgXAotCS1EQ0tfRFRSQ0QgLURDS19EVFJDVFMg LURUUFVUU0FSR1RZUEU9aW50IC1ERk5GTE9BVCAkKEtGTEFHUykgLU8iIFwKLQkiTElCUz0gLUwv dXNyL3BrZy9saWIgLWxuY3Vyc2VzIC1sY3J5cHQgLWxtIC1sdXRpbCAkKExJQlMpIgotCi0jT3Bl bkJTRCBiZWZvcmUgMi4zLgotI1VzZXMgbmN1cnNlcyBhcyBpdHMgY3Vyc2VzIHNvIHVzZSAtbHRl cm1saWIsIG5vdCAtbHRlcm1jYXAKLSNCdXQgaXQgZG9lc24ndCB1c2UgdXVfbG9jaygpIHdoaWNo IHdhcyBpbnRyb2R1Y2VkIGluIE9wZW5CU0QgMi4zLgotI0ZvciB0aGF0IHVzZSB0aGUgbmV4dCBl bnRyeS4KLSNBZGQgLURNQUlOVFlQRT1pbnQgaWYgeW91IGdldCBjb21wbGFpbnRzIGFib3V0IG1h aW46IHJldHVybiB0eXBlIGlzIG5vdCBpbnQuCi1vcGVuYnNkb2xkOgotCUBlY2hvIE1ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgT3BlbkJTRC4uLgotCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQo Q0MyKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURCU0Q0 NCAtRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURUQ1BTT0NLRVQgLURPUEVOQlNEIFwKLQktREZO RkxPQVQgLURORFNZU0VSUkxJU1QgJChLRkxBR1MpIC1PIiAiTElCUz0gLWxjdXJzZXMgLWx0ZXJt bGliIC1sbSIKLQotI09wZW5CU0QgMi4zIG9yIGxhdGVyCi0jQWRkIC1ETUFJTlRZUEU9aW50IGlm IHlvdSBnZXQgY29tcGxhaW50cyBhYm91dCBtYWluOiByZXR1cm4gdHlwZSBpcyBub3QgaW50Lgot I0ZvciBDLUtlcm1pdCA4LjAgKENocmlzdGlhbiBXZWlzZ2VyYmVyKToKLSMgLWx0ZXJtbGliIHJl bW92ZWQgKHByZXN1bWFibHkgYmVjYXVzZSAtbGN1cnNlcz09bmN1cnNlcyBhbHJlYWR5IGluY2x1 ZGVzIGl0KQotIyAtRFVTRV9VVV9MT0NLIGFuZCAtbHV0aWwgYWRkZWQgZm9yIHV1X2xvY2soKQot IyAtRE5EU1lTRVJSTElTVCBjaGFuZ2VkIHRvIC1EVVNFX1NUUkVSUk9SCi0jSWYgdGhpcyBnaXZl cyB5b3UgdHJvdWJsZSB1c2UgdGhlIHByZXZpb3VzIGVudHJ5LgotI05PVEU6IFRoZSBvcGVuYnNk IGFuZCBvcGVuYnNkK3NzbCBzaG91bGQgYmUgcmV3b3JrZWQgdG8gYmUgbGlrZSB0aGUKLSNjb3Jy ZXNwb25kaW5nIEZyZWVCU0QgYW5kIE5ldEJTRCB0YXJnZXRzLiAgVGhlIG1pcmJzZCB0YXJnZXRz IHNob3VsZAotb3BlbmJzZDoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE9w ZW5CU0QgMi4zIG9yIGxhdGVyLi4uCi0JJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIHhlcm1p dCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtREJTRDQ0IC1EQ0tfQ1VS U0VTIC1EQ0tfTkVXVEVSTSAtRFRDUFNPQ0tFVCAtRE9QRU5CU0QgXAotCS1ESEVSQUxEPVwiXFxc IiBPcGVuQlNEIGB1bmFtZSAtcmBcXFwiXCIgXAotCS1EVVNFX1VVX0xPQ0sgLURGTkZMT0FUIC1E VVNFX1NUUkVSUk9SICQoS0ZMQUdTKSAtTyIgXAotCSJMSUJTPSAtbGN1cnNlcyAtbHV0aWwgLWxt IgotCi0jQmV0dGVyIHRvIGNoYWluIHRvIHRoZSBvcGVuYnNkIHRhcmdldCBidXQuLi4KLW1pcmJz ZDoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE9wZW5CU0QgMi4zIG9yIGxh dGVyLi4uCi0JJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIHhlcm1pdCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtREJTRDQ0IC1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVS TSAtRFRDUFNPQ0tFVCAtRE9QRU5CU0QgXAotCS1ESEVSQUxEPVwiXFxcIiBNaXJCU0QgYHVuYW1l IC1yYFxcXCJcIiBcCi0JLURVU0VfVVVfTE9DSyAtREZORkxPQVQgLURVU0VfU1RSRVJST1IgJChL RkxBR1MpIC1PIiBcCi0JIkxJQlM9IC1sY3Vyc2VzIC1sdXRpbCAtbG0iCi0KLSNPcGVuQlNEIDMu MCBvciBsYXRlciBpbmNsdWRlcyBPcGVuU1NMCi0jQWRkIC1ETUFJTlRZUEU9aW50IGlmIHlvdSBn ZXQgY29tcGxhaW50cyBhYm91dCBtYWluOiByZXR1cm4gdHlwZSBpcyBub3QgaW50LgotI0ZvciBD LUtlcm1pdCA4LjAgKENocmlzdGlhbiBXZWlzZ2VyYmVyKToKLSMgLWx0ZXJtbGliIHJlbW92ZWQg KHByZXN1bWFibHkgYmVjYXVzZSAtbGN1cnNlcz09bmN1cnNlcyBhbHJlYWR5IGluY2x1ZGVzIGl0 KQotIyAtRFVTRV9VVV9MT0NLIGFuZCAtbHV0aWwgYWRkZWQgZm9yIHV1X2xvY2soKQotIyAtRE5E U1lTRVJSTElTVCBjaGFuZ2VkIHRvIC1EVVNFX1NUUkVSUk9SCi0jSWYgdGhpcyBnaXZlcyB5b3Ug dHJvdWJsZSB1c2UgdGhlIHByZXZpb3VzIGVudHJ5Lgotb3BlbmJzZCtzc2w6Ci0JQGVjaG8gTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBPcGVuQlNEIDMuMCBvciBsYXRlci4uLgotCSQoTUFL RSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBc Ci0JIkNGTEFHUz0gLURCU0Q0NCAtRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURUQ1BTT0NLRVQg LURPUEVOQlNEIFwKLQktREhFUkFMRD1cIlxcXCIgT3BlbkJTRCBgdW5hbWUgLXJgXFxcIlwiIFwK LQktRFVTRV9VVV9MT0NLIC1ERk5GTE9BVCAtRFVTRV9TVFJFUlJPUiAtRENLX0FVVEhFTlRJQ0FU SU9OIFwKLQktRENLX1NTTCAkKEtGTEFHUykgLU8iIFwKLQkiTElCUz0gLWxjdXJzZXMgLWx1dGls IC1sbSAtbHNzbCAtbGNyeXB0byIKLQotbWlyYnNkK3NzbDoKLQlAZWNobyBNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIE9wZW5CU0QgMy4wIG9yIGxhdGVyLi4uCi0JJChNQUtFKSBDQz0kKEND KSBDQzI9JChDQzIpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdT PSAtREJTRDQ0IC1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtRFRDUFNPQ0tFVCAtRE9QRU5CU0Qg XAotCS1ESEVSQUxEPVwiXFxcIiBNaXJCU0QgYHVuYW1lIC1yYFxcXCJcIiBcCi0JLURVU0VfVVVf TE9DSyAtREZORkxPQVQgLURVU0VfU1RSRVJST1IgLURDS19BVVRIRU5USUNBVElPTiBcCi0JLURD S19TU0wgLUROT19EQ0xfSU5FVF9BVE9OICQoS0ZMQUdTKSAtTyIgXAotCSJMSUJTPSAtbGN1cnNl cyAtbHV0aWwgLWxtIC1sc3NsIC1sY3J5cHRvIgotCi0jIG1ha2UgMzg2YnNkIDAuMG5ldywgcG9z aXgKLSMgZm9yICAzODZic2QgMC4xLjI0LCBjaGFuZ2UgL3Vzci9pbmNsdWRlL3Rlcm1pb3MuaCB0 byAjZGVmaW5lIE5DQ1MgaWYKLSMgIF9QT1NJWF9TT1VSQ0UgaXMgI2RlZmluZWQuIChzb3VyY2U6 IGxld2luZSwgcG9zaXggcHJnbXJzIGd1aWRlLCBvYHJlaWxseSkKLSNOT1RFOiBMb2NrIGRpcmVj dG9yeSBpcyAvdmFyL3Nwb29sL2xvY2suICBGb3JtZXJseSwgaXQgd2FzIC92YXIvc3Bvb2wvdXVj cCwKLSNidXQgcmVwb3J0ZWRseSA8d2pvbmVzQGhhbGN5b24uY29tPiB0aGF0IHdhcyBkdWUgdG8g YSB0eXBvIGluICdtYW4gdGlwJy4KLTM4NmJzZDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQo Q0tWRVIpIGZvciBqb2xpeCAzODZCU0QgMC4wbmV3IGFuZCAwLjEuMjQuLi4nCi0JJChNQUtFKSBD Qz0kKENDKSBDQzI9JChDQzIpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQki Q0ZMQUdTPSAtRFBPU0lYIC1EU0VUUkVVSUQgLURQSURTVFJJTkcgLURVU0xFRVAgXAotCS1EXzM4 NkJTRCAtRENLX0NVUlNFUyAtRFRDUFNPQ0tFVCBcCi0JLURMT0NLX0RJUj1cXFwiL3Zhci9zcG9v bC9sb2NrXFxcIiBcCi0JJChLRkxBR1MpIC1PIiAiTE5LRkxBR1MgPSAtcyIgIkxJQlMgPSAtbGN1 cnNlcyAtbHRlcm1jYXAiCi0KLSMgTWFjIE9TIFggMTAgZWFybHkgdmVyc2lvbnMuCi0jIEZvciAx MC4zLjkgYW5kIGxhdGVyLCB1c2UgdGhlIG1hY29zeCB0YXJnZXQgYmVsb3cuCi0KLSNNYWMgT1Mg WCAxLjAgKFJoYXBzb2R5LCBEYXJ3aW4pIC0tIFRDUC9JUCBidXQgbm8gY3Vyc2VzLgotb2xkbWFj b3N4MTA6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBgdW5hbWUgLXNgLi4u Ci0JJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtRE1BQ09TWDEwIC1EVENQU09DS0VUIC1EVVNFX1NUUkVSUk9S IC1PICQoS0ZMQUdTKSIKLQotI01hYyBPUyBYIDEuMCAoUmhhcHNvZHksIERhcndpbikgLS0gVENQ L0lQIGFuZCBjdXJzZXMuCi0jTm90ZTogY3Vyc2VzIG11c3QgYmUgb2J0YWluZWQgc2VwYXJhdGVs eS4gIFNlZSBuZXh0IGVudHJ5IGZvciBuY3Vyc2VzLgotI0FkZCAiTElCUyA9IC1sY3Vyc2VzIC1s dGVybWNhcCIgaWYgbmVjZXNzYXJ5IChidXQgcmVwb3J0ZWRseSBpdCBpcyBub3QpLgotb2xkbWFj b3N4MTBjOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgYHVuYW1lIC1zYCAr IGN1cnNlcy4uLgotCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURNQUNPU1gxMCAtRENLX0NVUlNFUyAtRFRQ VVRTRk5UWVBFPXZvaWQgLURUUFVUU0lTVk9JRCBcCi0JLURUQ1BTT0NLRVQgLURVU0VfU1RSRVJS T1IgLU8gJChLRkxBR1MpIgotCi0jTWFjIE9TIFggMS4wIChSaGFwc29keSwgRGFyd2luKSAtLSBU Q1AvSVAgYW5kIG5jdXJzZXMuCi0jTm90ZTogbmN1cnNlcyBtdXN0IGJlIG9idGFpbmVkIHNlcGFy YXRlbHkuCi0jSW4gdGhlIGV2ZW50IG9mIHRyb3VibGUgd2l0aCB0aGlzIG9uZSB0cnkgdGhlIG5l eHQgb25lLgotb2xkbWFjb3N4MTBuYzoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIGB1bmFtZSAtc2AgKyBuY3Vyc2VzLi4uCi0JJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIp IHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtRE1BQ09TWDEw IC1EQ0tfTkNVUlNFUyAtRFRDUFNPQ0tFVCAtRFVTRV9TVFJFUlJPUiAtTyBcCi0JJChLRkxBR1Mp IiAiTElCUz0gLWxuY3Vyc2VzICQoTElCUykiCi0KLSNNYWMgT1MgWCAxMC4yIChKYWd1YXIpIG5j dXJzZXMuCi1vbGRtYWNvc3gxMDJuYzoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIGB1bmFtZSAtc2AgKyBuY3Vyc2VzLi4uCi0JJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIp IHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtRE1BQ09TWDEw IC1EQ0tfTkNVUlNFUyAtRFRDUFNPQ0tFVCAtRFVTRV9TVFJFUlJPUiAtTyBcCi0JJChLRkxBR1Mp ICIgIkxJQlM9IC1sbmN1cnNlcyAkKExJQlMpIgotCi0jVGhlIHByb2JsZW0gaGVyZSBpcyB0aGF0 IGlmIGN1cnNlcy5oIGFsc28gZXhpc3RzLCBpdCBjb25mbGljdHMgd2l0aAotI25jdXJzZXMuaCBh bmQgYW5kIHdlIGhhdmUgZmF0YWwgZXJyb3JzLiAgSWYgdGhpcyBoYXBwZW5zIHRvIHlvdSwgdGhl bgotI3RyeSB0aGlzIHRhcmdldC4KLW9sZG1hY29zeDEwbmN4OgotCUBlY2hvIE1ha2luZyBDLUtl cm1pdCAkKENLVkVSKSBmb3IgYHVuYW1lIC1zYCArIG5jdXJzZXMuLi4KLQlAcm0gLWYgLi9jdXJz ZXMuaDsgdG91Y2ggLi9jdXJzZXMuaAotCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJt aXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURNQUNPU1gxMCAtRENL X05DVVJTRVMgLURUQ1BTT0NLRVQgLURVU0VfU1RSRVJST1IgXAotCS1JLiAtTyAkKEtGTEFHUykg IiBcCi0JIkxJQlM9IC1sbmN1cnNlcyAkKExJQlMpIgotCUBybSAtZiAuL2N1cnNlcy5oCi0KLSNN YWMgT1MgWCAxMC4zIChQYW50aGVyKSAtIEFzc3VtZXMgbmN1cnNlcyBpcyBpbnN0YWxsZWQuCi1v bGRtYWNvc3gxMDM6IAotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgYHVuYW1l IC1zYCArIG5jdXJzZXMuLi4KLQkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKENDMikgeGVybWl0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1ETUFDT1NYMTAgLURNQUNPU1gx MDMgLURDS19OQ1VSU0VTIC1EVENQU09DS0VUIC1EQ0tIVFRQIFwKLQktRFVTRV9TVFJFUlJPUiAt RFVTRV9OQU1FU0VSX0NPTVBBVCAtTyBcCi0JJChLRkxBR1MpICIgIkxJQlM9IC1sbmN1cnNlcyAt bHJlc29sdiAkKExJQlMpIgotCi0jTWFjIE9TIFggMTAuMyAoUGFudGhlcikgd2l0aCBLZXJiZXJv cyA1IGFuZCBTU0wsIGFzc3VtZXMgbmN1cnNlcyBpcyBpbnN0YWxsZWQuCi1vbGRtYWNvc3gxMDMr c2VjdXJlOgotCUBlY2hvIE1ha2luZyBTZWN1cmUgQy1LZXJtaXQgJChDS1ZFUikgZm9yIGB1bmFt ZSAtc2AgKyBuY3Vyc2VzLi4uCi0JJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIHhlcm1pdCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtRE1BQ09TWDEwIC1ETUFDT1NY MTAzIC1EQ0tfTkNVUlNFUyAtRFRDUFNPQ0tFVCBcCi0JLURVU0VfU1RSRVJST1IgLURVU0VfTkFN RVNFUl9DT01QQVQgLU8gLURDS19QQU0gXAotCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19LRVJC RVJPUyAtREtSQjUgLURaTElCIFwKLQktRENLX0VOQ1JZUFRJT04gLURDS19DQVNUIC1EQ0tfREVT IC1ETElCREVTIC1EQ0tfU1NMIFwKLQkkKEtGTEFHUykgIiAiTElCUz0gLWxzc2wgLWxjcnlwdG8g LWxrcmI1IC1sY29tX2VyciBcCi0JLWxrNWNyeXB0byAtbGdzc2FwaV9rcmI1IC1scGFtIC1sbmN1 cnNlcyAtbHJlc29sdiAkKExJQlMpIgotCi0jIFRISVMgSVMgVEhFIE1BSU4gTUFDIE9TIFggVEFS R0VUICh0aGUgbmV4dCBvbmUgaXMgZm9yIEtlcmJlcm9zL1NTTCBidWlsZHMpLgotIyBVc2UgdGhp cyB0YXJnZXQgZm9yIDEwLjMuOSAob3IgbWF5YmUgZWFybGllcikgdGhyb3VnaCAxMC42IChtYXli ZSBsYXRlcikKLSMgb24gYm90aCBQb3dlciBhbmQgSW50ZWwgYXJjaGl0ZWN0dXJlcy4gIFRoaXMg b25lIHVzZXMgdXRtcC5oIG9uIDEwLjQgYW5kCi0jIGVhcmxpZXIgYW5kIHV0bXB4Lmggb24gMTAu NSBvbndhcmRzLgotIyBOb3RlOiBNYWMgT1MgWCAxMC41IGFuZCBlYXJsaWVyIGFyZSAzMi1iaXQ7 IDEwLjYgYW5kIGxhdGVyIDY0LWJpdC4KLSMgTm90ZSAyOiBBcyBvZiBDLUtlcm1pdCA5LjAgLU5P VVVDUCBpcyBpbmNsdWRlZCBieSBkZWZhdWx0IGJlY2F1c2UKLSMgTWFjIE9TIFggZG9lc24ndCBz dXBwb3J0IFVVQ1AuICBUbyB1bmRvIHRoaXMsIHVzZSBLRkxBR1M9LVVOT1VVQ1AuCi0jT0s6IDIw MTEvMDYvMTQgKGZvciAxMC40LjExLCAxMC41LjgsIDEwLjYuNykKLW1hY29zeCBtYWNvc3gxMCBt YWNvc3gxMC4zLjkgbWFjb3N4MTAuNCBtYWNvc3gxMC41IG1hY29zeDEwLjY6Ci0JQE1BQ09TTkFN RT1gL3Vzci9iaW4vc3dfdmVycyAtcHJvZHVjdE5hbWVgOyBcCi0JTUFDT1NWPWAvdXNyL2Jpbi9z d192ZXJzIC1wcm9kdWN0VmVyc2lvbmA7IFwKLQllY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVS KSBmb3IgJCRNQUNPU05BTUUgJCRNQUNPU1YuLi4gOyBcCi0JTUFDQ1BVPSQkSE9TVFRZUEU7IFwK LQlpZiB0ZXN0IGB1bmFtZSAtciB8IGN1dCAtZCAuIC1mIDFgIC1ndCA4OyBcCi0JdGhlbiBpZiB0 ZXN0IC1mIC91c3IvaW5jbHVkZS91dG1weC5oIDsgXAotCXRoZW4gSEFWRV9VVE1QWD0nLURIQVZF VVRNUFggLURfVVRNUFhfQ09NUEFUJyA7IFwKLQllbHNlIEhBVkVfVVRNUFg9JycgOyBmaSA7IGZp OyBcCi0JJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtRE1BQ09TWDEwIC1ETUFDT1NYMTAzIC1EQ0tfTkNVUlNF UyAtRFRDUFNPQ0tFVCAtRENLSFRUUCBcCi0JLURVU0VfU1RSRVJST1IgLURVU0VfTkFNRVNFUl9D T01QQVQgLUROT0NIRUNLT1ZFUkZMT1cgLURGTkZMT0FUIFwKLQktRF9MQVJHRUZJTEVfU09VUkNF IC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgJCRIQVZFX1VUTVBYIFwKLQktZnVuc2lnbmVkLWNoYXIg LUROT0RDTElOSVRHUk9VUFMgXAotCS1ETk9VVUNQIC1PIC1ESEVSQUxEPVwiXFxcIiAkJHtNQUNP U05BTUV9ICQke01BQ09TVn1cXFwiXCIgXAotCS1EQ0tDUFU9XCJcXFwiJCR7TUFDQ1BVfVxcXCJc IiBcCi0JJChLRkxBR1MpIiAiTElCUz0gLWxuY3Vyc2VzIC1scmVzb2x2ICQoTElCUykiCi0KLSMg TWFjIE9TIFggMTAuMy45IG9yIGxhdGVyIHdpdGggS2VyYmVyb3MgNSBhbmQgT3BlblNTTC4uLgot IyBOT1RFOiBBcHBsZSBoYXMgcmVtb3ZlZCBhbGwgc3VwcG9ydCBmb3IgREVTIGluIE9wZW5TU0wg YW5kIEtlcmJlcm9zCi0jICAgaW4gTWFjIE9TIFggMTAuNiBhbmQgbGF0ZXIuICBUaGUgREVTIGZs YWdzIGFyZSBpbmNsdWRlZCBvciBsZWZ0IG91dAotIyAgIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24g dGhlIE1hYyBPUyBYIHZlcnNpb24gbnVtYmVyLgotIyBTZWUgbm90ZSBhYm91dCBVVUNQIGluIHBy ZXZpb3VzIHRhcmdldC4KLSNPSzogMjAwOS8xMS8xNiAoZm9yIDEwLjMuOSwgMTAuNC4xMSwgMTAu NS44LCAxMC42LjEpCi0jT0s6IDIwMTEvMDYvMTQgKGZvciAxMC40LjExLCAxMC41LjgsIDEwLjYu NykKLW1hY29zeCtrcmI1K3NzbCBtYWNvc3gxMC41K2tyYjUrc3NsIG1hY29zeDEwLjYra3JiNStz c2wgXAotbWFjb3N4K2tyYjUrb3BlbnNzbCBtYWNvc3gxMC41K2tyYjUrb3BlbnNzbCBtYWNvc3gx MC42K2tyYjUrb3BlbnNzbDoKLQlATUFDT1NOQU1FPWAvdXNyL2Jpbi9zd192ZXJzIC1wcm9kdWN0 TmFtZWA7IFwKLQlNQUNPU1Y9YC91c3IvYmluL3N3X3ZlcnMgLXByb2R1Y3RWZXJzaW9uYDsgXAot CWVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciAkJE1BQ09TTkFNRSAkJE1BQ09TVi4u LiA7IFwKLQlNQUNDUFU9JCRIT1NUVFlQRTsgXAotCWlmIHRlc3QgYHVuYW1lIC1yIHwgY3V0IC1k IC4gLWYgMWAgLWd0IDg7IFwKLQl0aGVuIGlmIHRlc3QgLWYgL3Vzci9pbmNsdWRlL3V0bXB4Lmgg OyBcCi0JdGhlbiBIQVZFX1VUTVBYPSctREhBVkVVVE1QWCAtRF9VVE1QWF9DT01QQVQnIDsgXAot CWVsc2UgSEFWRV9VVE1QWD0nJyA7IGZpIDsgZmk7IFwKLQlpZiB0ZXN0IGB1bmFtZSAtciB8IGN1 dCAtZCAuIC1mIDFgIC1lcSA3OyBcCi0JdGhlbiBJU19NQUNPU1gxMDM9Jy1ETUFDT1NYMTAzJyA7 IFwKLQllbHNlIElTX01BQ09TWDEwMz0nJyA7IGZpOyBcCi0JY2FzZSAkJE1BQ09TViBpbiBcCi0J ICAxMC5bMDEyMzQ1XS4qKSBIQVZFX0RFUz0nLURDS19ERVMgLURMSUJERVMnIDs7IFwKLQkgICou KikgSEFWRV9ERVM9JycgOzsgXAotCWVzYWMgOyBcCi0JaWYgdGVzdCAteCAvdXNyL2Jpbi9rcmI1 LWNvbmZpZyA7IFwKLQl0aGVuIEhBVkVfS1JCNUNPTkZJRz1gL3Vzci9iaW4va3JiNS1jb25maWcg LS1saWJzIGtyYjUgZ3NzYXBpYCA7IFwKLQllbHNlIEhBVkVfS1JCNUNPTkZJRz0nLWxnc3NhcGlf a3JiNSAtbGtyYjUgLWxrNWNyeXB0byBcCi0JLWxjb21fZXJyIC1scmVzb2x2JyA7IGZpOyBcCi0J JChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKLQkiQ0ZMQUdTPSAtRE1BQ09TWDEwICQkSVNfTUFDT1NYMTAzIC1EQ0tfTkNVUlNFUyAt RFRDUFNPQ0tFVCBcCi0JLURVU0VfU1RSRVJST1IgLURVU0VfTkFNRVNFUl9DT01QQVQgLUROT0NI RUNLT1ZFUkZMT1cgLURGTkZMT0FUIFwKLQktRENLSFRUUCAtRF9MQVJHRUZJTEVfU09VUkNFIC1E X0ZJTEVfT0ZGU0VUX0JJVFM9NjQgJCRIQVZFX1VUTVBYIFwKLQktRE5PRENMSU5JVEdST1VQUyAt RENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfS0VSQkVST1MgLURLUkI1IC1EWkxJQiBcCi0JLURDS19F TkNSWVBUSU9OIC1EQ0tfQ0FTVCAtRENLX1NTTCAtRE9QRU5TU0xfMDk4ICQkSEFWRV9ERVMgXAot CS1ETk9VVUNQIC1ESEVSQUxEPVwiXFxcIiAkJHtNQUNPU05BTUV9ICQke01BQ09TVn1cXFwiXCIg XAotCS1EQ0tDUFU9XCJcXFwiJCR7TUFDQ1BVfVxcXCJcIiBcCi0JLWZ1bnNpZ25lZC1jaGFyIC1P ICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAkJEhBVkVfS1JCNUNPTkZJRyAtbHNzbCAtbGNyeXB0byAt bHBhbSAtbG5jdXJzZXMgJChMSUJTKSIKLQotIyBFbmQgb2YgTWFjIE9TIFggU2VjdGlvbgotCi0j QWNvcm4gUklTQ2lYLCBiYXNlZCBvbiAuLi4KLSNCZXJrZWxleSBVbml4IDQuMiBvciA0LjMgd2l0 aCBsb2NrIGRpcmVjdG9yeSAvdXNyL3Nwb29sL3V1Y3AvTENLL0xDSy4udHR5eHgsCi0jYnV0IHdp dGhvdXQgYWN1Y250cmwgcHJvZ3JhbQotcmlzY2l4OgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgUklTQ2lYLCAvdXNyL3Nwb29sL3V1Y3AvTENLLi50dHl4eAotCSQoTUFLRSkg d2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCQkiQ0ZMQUdTPSAtREJTRDQyIC1E QlNENCAtRFJJU0NJWCAtRE5PQ1NFVFMgXAotCQktRExPQ0tfRElSPVxcXCIvdXNyL3Nwb29sL3V1 Y3BcXFwiIC1ERElSRU5UIC1EQ0tfQ1VSU0VTIFwKLQkJLURNQVhTUD05MDI0IC1ETUFYUkQ9OTAy NCAtRFNCU0laPTkwNTAgLURSQlNJWj05MDUwIFwKLQkJLURERlRUWT1cXFwiL2Rldi9zZXJpYWxc XFwiIC1ETk9DU0VUUyAtRE5PQ1lSSUwgXAotCQktRE5PQU5TSSAtdyAtTzIgLWZvbWl0LWZyYW1l LXBvaW50ZXIiIFwKLQkJIkxJQlM9IC1sY3Vyc2VzIC1sdGVybWNhcCAiIFwKLQkJIkNDPSAvdXNy L3VjYi9jYyIgXAotCQkiQ0MyPSAvdXNyL3VjYi9jYyIKLQotI0Fjb3JuIFJJU0NpWCwgYXMgYWJv dmUsIGJ1dCB1c2luZyBnY2MKLXJpc2NpeC1nY2M6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQo Q0tWRVIpIGZvciBSSVNDaVgsIC91c3Ivc3Bvb2wvdXVjcC9MQ0suLnR0eXh4Ci0JJChNQUtFKSB3 ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JCSJDRkxBR1M9IC1EQlNENDIgLURC U0Q0IC1EUklTQ0lYIC1ETk9DU0VUUyBcCi0JCS1ETE9DS19ESVI9XFxcIi91c3Ivc3Bvb2wvdXVj cFxcXCIgLURESVJFTlQgLURDS19DVVJTRVMgXAotCQktRE1BWFNQPTkwMjQgLURNQVhSRD05MDI0 IC1EU0JTSVo9OTA1MCAtRFJCU0laPTkwNTAgXAotCQktRERGVFRZPVxcXCIvZGV2L3NlcmlhbFxc XCIgLUROT0NTRVRTIC1ETk9DWVJJTCBcCi0JCS1ETk9BTlNJIC13IC1PMiAtZm9taXQtZnJhbWUt cG9pbnRlciIgXAotCQkiTElCUz0gLWxjdXJzZXMgLWx0ZXJtY2FwICIgXAotCQkiQ0M9IGdjYyAt bWJzZCIgXAotCQkiQ0MyPSBnY2MgLW1ic2QiCi0KLSNDb252ZXJnZW50IENUSVggNi40LjEKLWN0 aXg6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQ29udmVyZ2VudCBDVElY IDYuNC4xJwotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJD RkxBR1M9IC1EU1ZSMyAtRERJUkVOVCAtRFRDUFNPQ0tFVCAtREhEQlVVQ1AgLURDS19DVVJTRVMg XAotCS1ETk9OQVdTIC1ETk9MRUFSTiAtRE5PTE9OR0xPTkcgJChLRkxBR1MpIC1YTyIgXAotCSJM TktGTEFHUz0tcyIgIkxJQlM9LWxzb2NrZXQgLWxjdXJzZXMgLWxjX3MiCi0JbWNzIC1kIHdlcm1p dAotCi0jIFRoZSBmb2xsb3dpbmcgbWFrZWZpbGUgZW50cnkgc2hvdWxkIHdvcmsgZm9yIGFueSBI YXJyaXMgTmlnaHQgSGF3ayBzeXN0ZW0KLSMgKGVpdGhlciA4OGsgb3IgNjhrIGJhc2VkKSBydW5u aW5nIHJlbGVhc2UgNi4xIG9yIGxhdGVyIG9mIHRoZSBDWC9VWAotIyBvcGVyYXRpbmcgc3lzdGVt LiBUaGlzIGlzIGEgUE9TSVggYW5kIEFOU0ktQyBjb21wbGlhbnQgc3lzdGVtIHdoaWNoIGFsc28K LSMgc3VwcG9ydHMgQlNEIG5ldHdvcmtpbmcuIChFYXJsaWVyIENYL1VYIHJlbGVhc2VzIHdpbGwg cHJvYmFibHkgd29yayB3aXRoCi0jIHN5czVyMywgYnV0IHRoaXMgaGFzIG5vdCBiZWVuIHZlcmlm aWVkKS4KLSMKLWN4X3V4OgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSGFy cmlzIE5pZ2h0IEhhd2sgQ1gvVVggNi4xIG9yIGxhdGVyCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0tRFBPU0lYIC1EVENQU09DS0VUIC1ESERC VVVDUCAtRFBJRF9UPXBpZF90IC1EV0FJVF9UPWludCBcCi0JLURkX2lubz1kX2ZpbGVubyAtRFVJ RF9UPXVpZF90IC1ER0lEX1Q9Z2lkX3QgLUROT0xPTkdMT05HIFwKLQkkKEtGTEFHUykgLVhhIC1P MyAtZyIgIkxOS0ZMQUdTPS1PMyIKLQotI0ludGVyZ3JhcGggQ2xpcHBlciwgQ0xJWCwgam9iIGNv bnRyb2wsIEhEQiBVVUNQLgotY2xpeDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIp IGZvciBJbnRlcmdyYXBoIENMSVguLi4nCi0JJChNQUtFKSB3ZXJtaXQgIkNDPWFjYyIgIkNDMj1h Y2MiIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC13IC1EU1ZSMyAtRENM SVggLURESVJFTlQgLURIREJVVUNQIC1ETk9TWVNMT0cgLURVU0VfTUVNQ1BZIFwKLQktRE5PR0VU VVNFUlNIRUxMIC1ETk9SRUFMUEFUSCAtRE5PTEVBUk4gJChLRkxBR1MpIC1PIiBcCi0JIkxOS0ZM QUdTPSIgIkxJQlM9IC1sYnNkIgotCi0jQXMgYWJvdmUgKyBUQ1AvSVAuLi4KLWNsaXhuZXQ6Ci0J QGVjaG8gJ01ha2luZyBuZXR3b3JrZWQgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEludGVyZ3JhcGgg Q0xJWC4uLicKLQkkKE1BS0UpIHdlcm1pdCAiQ0M9YWNjIiAiQ0MyPWFjYyIgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLXcgLURTVlIzIC1EQ0xJWCAtRERJUkVOVCAtREhE QlVVQ1AgLUROT1NZU0xPRyAtRFVTRV9NRU1DUFkgXAotCS1EVENQU09DS0VUIC1ETk9HRVRVU0VS U0hFTEwgLUROT0xFQVJOIC1ETk9SRUFMUEFUSCAkKEtGTEFHUykgLU8iIFwKLQkiTE5LRkxBR1M9 IiAiTElCUz0gLWxic2QiCi0KLSNNYXJrIFdpbGxpYW1zIENvaGVyZW50IDI4NiBvciAzODYgb24g SUJNIFBDIGZhbWlseS4KLSNUaGVyZSBpcyBhIDY0SyBsaW1pdCBvbiBwcm9ncmFtIHNpemUsIHNv IHRoaXMgaXMgYSBjb21tYW5kLWxpbmUgb25seSB2ZXJzaW9uLgotY29oZXJlbnQ6Ci0JJChNQUtF KSAiQ0ZMQUdTID0gLU8gLURDT0hFUkVOVCAtRE5PQU5TSSAtRE5PSUNQIC1ETk9TRVRLRVkgLURO T0xFQVJOIFwKLQktRE5PQ1NFVFMgLUROT0hFTFAgLUROT0RJQUwgLUROT1NDUklQVCAtRE5PREVC VUcgLUROT1RMT0cgLUROT1hNSVQgXAotCS1ETk9NU0VORCAtRE5PRlJJTExTIC1ETk9TWVNJT0NU TEggLURTRUxFQ1RfSCAkKEtGTEFHUykgLVZTVVZBUiIgXAotCS1ETk9GTE9BVCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9IHdlcm1pdAotCi0jTWFyayBXaWxsaWFtcyBDb2hlcmVudCAzODYgb24g SUJNIFBDIGZhbWlseS4KLSNUaGlzIHdpbGwgbWFrZSBhICJtaW5pbXVtIGludGVyYWN0aXZlIiB2 ZXJzaW9uIC0gbm8gc2NyaXB0cywKLSNubyBjaGFyYWN0ZXIgc2V0cywgbm8gaGVscCwgbm8gZGlh bCwgbm8gZGVidWcvdHJhbnNhY3Rpb24gbG9nZ2luZywgbm8KLSN0cmFuc21pdCwgbXNlbmQsIG1h aWwsIHR5cGUsIGV0Yy4KLWNvaGVyZW50bWk6Ci0JJChNQUtFKSAiQ0ZMQUdTID0gLU8gLURDT0hF UkVOVCAtRE5PQU5TSSAtRE5PU0VUS0VZIC1ETk9MRUFSTiBcCi0JLUROT1NIT1cgLUROT0NTRVRT IC1ETk9IRUxQIC1ETk9ESUFMIC1ETk9TQ1JJUFQgLUROT0RFQlVHIC1ETk9UTE9HIFwKLQktRE5P WE1JVCAtRE5PTVNFTkQgLUROT0ZSSUxMUyAtRE5PU1lTSU9DVExIIC1ETk9TRVJWRVIgLUROT1VV Q1AgXAotCS1ETk9TUEwgLUROT1BVU0ggLUROT01ETUhVUCAtRE5PSkMgLUROT0ZEWkVSTyAtRE5P RVNDU0VRIC1ETk9GTE9BVCBcCi0JLUROT0NNREwgJChLRkxBR1MpIC1WU1VWQVIgLURTRUxFQ1Rf SCIgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0Jd2VybWl0Ci0KLSNNYXJrIFdpbGxpYW1z IENvaGVyZW50IDM4NiBvbiBJQk0gUEMvQVQgZmFtaWx5LgotY29oZXJlbnRtYXg6Ci0JJChNQUtF KSAiQ0ZMQUdTID0gLU8gLURDT0hFUkVOVCAtRE5PQU5TSSAtRFNFTEVDVF9IIC1ETk9MRUFSTiBc Ci0JLUROT0ZMT0FUIC1ETk9TWVNJT0NUTEggJChLRkxBR1MpIC1WU1VWQVIiICJMTktGTEFHUyA9 IC1PIC1zIiBcCi0JS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSB3ZXJtaXQKLQotI01hcmsgV2ls bGlhbXMgQ29oZXJlbnQgMzg2IDQuMi4gIEluY2x1ZGVzIGN1cnNlcyBidXQgbm90IFRDUC9JUC4K LSNSZXF1aXJlcyB1cGRhdGVzIHRvIHRoZSA0LjIuMTAgY29tcGlsZXI7IHRoZSByZWd1bGFyIGNv bXBpbGVyIGZhaWxzIHRvCi0jdG8gaGFuZGxlICJjb21wbGV4IGV4cHJlc3Npb25zIi4gIE5PRkxP QVQgaXMgc28gaXQgY2FuIHdvcmsgb24gb2xkIFBDcwotI3dpdGhvdXQgZmxvYXRpbmctcG9pbnQg aGFyZHdhcmUuCi1jb2hlcmVudDQyOgotCSQoTUFLRSkgIkNGTEFHUyA9IC1UNTAwMDAwIC1ETk9G TE9BVCAtRENPSEVSRU5UIC1ETk9BTlNJIC1EU0VMRUNUIFwKLQktRE5PU1lTTE9HIC1ERElSRU5U IC1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtRENLX1dSRUZSRVNIIC1WU1VWQVIgXAotCS1ERENM R0VUQ1dEIC1ETk9TWVNJT0NUTEggLUROT0lOSVRHUk9VUFMgLUROT1NZTUxJTksgLURTRUxFQ1Rf SCBcCi0JLUREQ0xHRVRDV0QgLU8gJChLRkxBR1MpIiBcCi0JIkxOS0ZMQUdTID0gLU8gLXMiIEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJMSUJTICA9IC1sc29ja2V0IC1sY3Vyc2VzIiB3 ZXJtaXQKLQotI0RFQyBVbHRyaXggMi54Ci0jIEFkZCAtTywgLUREWU5BTUlDLCAtcywgZXRjLCBp ZiB0aGV5IHdvcmsuCi11bHRyaXgyeDoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIFVsdHJpeCAyLnggLi4uCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VULSQo QCl9IFwKLQkiQ0ZMQUdTPSAtREJTRDQgLURUQ1BTT0NLRVQgLUREVTIgLUROT0dFVFVTRVJTSEVM TCAkKEtGTEFHUykiCi0KLWR1MjoKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIEtUQVJHRVQ9JCR7 S1RBUkdFVC0kKEApfSB1bHRyaXgyeAotCi0jREVDIFVsdHJpeCAzLjAgYW5kIDMuMQotdWx0cml4 MzA6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBVbHRyaXggMy4wLi4uCi0J JChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VULSQoQCl9IFwKLQkiQ0ZMQUdTPSAtREJT RDQgLURUQ1BTT0NLRVQgLURESVJFTlQgLURTSUdfViAtRE5PR0VUVVNFUlNIRUxMIFwKLQktRFVM VFJJWDMgLURDS19DVVJTRVMgJChLRkxBR1MpIC1PIiAiTElCUz0gLWxjdXJzZXMgLWx0ZXJtY2Fw IgotCi1kdTM6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBLVEFSR0VUPSQke0tUQVJHRVQtJChA KX0gdWx0cml4MzAKLQotdWx0cml4M3g6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBLVEFSR0VU PSQke0tUQVJHRVQtJChAKX0gdWx0cml4MzAKLQotI0RFQyBVbHRyaXggNC4wIG9yIDQuMSBvbiBE RUNzdGF0aW9uLCBWQVhzdGF0aW9uLCBWQVgsIGV0Yy4KLXVsdHJpeDQwOgotCUBlY2hvIE1ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgVWx0cml4IDQuMCBvciA0LjEuLi4KLQkkKE1BS0UpIHhl cm1pdCBLVEFSR0VUPSQke0tUQVJHRVQtJChAKX0gXAotCSJDRkxBR1M9IC1EQlNENCAtRFRDUFNP Q0tFVCAtRFNJR19WIC1ERFU0IC1ETk9HRVRVU0VSU0hFTEwgXAotCSQoS0ZMQUdTKSAtT2xpbWl0 IDE0NTAiICJMTktGTEFHUyA9IC1zIgotCi0jREVDIFVsdHJpeCA0LjItNC41IG9uIERFQ3N0YXRp b24sIERFQ3N5c3RlbSwgVkFYc3RhdGlvbiwgVkFYLCBldGMuCi0jTGlrZSB1bHRyaXg0MCwgZXhj ZXB0IG5vdyBDIGNvbXBpbGVyIHN1cHBvcnRzIC1PMiBvcHRpbWl6YXRpb24uCi11bHRyaXg0MjoK LQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFVsdHJpeCA0LjIgb3IgbGF0ZXIu Li4KLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQtJChAKX0gXAotCSJDRkxBR1M9 IC1EQlNENCAtRFRDUFNPQ0tFVCAtRFNJR19WIC1ETk9HRVRVU0VSU0hFTEwgJChLRkxBR1MpIFwK LQktTzIgLU9saW1pdCAxNzUwIiAiTE5LRkxBR1MgPSAtcyIKLQotZHU0MjoKLQkkKE1BS0UpICJN QUtFPSQoTUFLRSkiIEtUQVJHRVQ9JCR7S1RBUkdFVC0kKEApfSB1bHRyaXg0MgotCi0jREVDIFVs dHJpeCA0LjItNC41IG9uIERFQ3N0YXRpb24sIERFQ3N5c3RlbSwgVkFYc3RhdGlvbiwgVkFYLCBl dGMuCi0jTGlrZSBkdTQyLCBidXQgd2l0aCBjdXJzZXMgc3VwcG9ydCBhZGRlZCBhbmQgYSBjb3Vw bGUgZmVhdHVyZXMuCi11bHRyaXg0MmM6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIp IGZvciBVbHRyaXggNC4yIG9yIGxhdGVyLi4uCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtL VEFSR0VULSQoQCl9IFwKLQkiQ0ZMQUdTPSAtREJTRDQgLURUQ1BTT0NLRVQgLURTSUdfViAtRE5P R0VUVVNFUlNIRUxMIFwKLQktRENLX0NVUlNFUyAtRE5PSUtTRCAkKEtGTEFHUyktRzYgLU8yIC1P bGltaXQgMzAwMCAiIFwKLQkiTE5LRkxBR1MgPSAtcyIgIkxJQlM9IC1sY3Vyc2VzIC1sdGVybWNh cCIKLQotdWx0cml4NDM6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBDQz0kKENDKSBDQzI9JChD QzIpIFwKLQkiS0ZMQUdTPS1EVUxUUklYNDMgJChLRkxBR1MpIiBLVEFSR0VUPSQke0tUQVJHRVQt JChAKX0gdWx0cml4NDJjCi0KLXVsdHJpeDQzbm90Y3A6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0Up IiBDQz0kKENDKSBDQzI9JChDQzIpIFwKLQkiS0ZMQUdTPS1EVUxUUklYNDMgLUROT05FVCAkKEtG TEFHUykiIFwKLQlLVEFSR0VUPSQke0tUQVJHRVQtJChAKX0gdWx0cml4NDJjCi0KLSMgTk9URTog bmVlZCAtRE5PREVCVUcgb24gTUlQUyB0byBhdm9pZCByZWxvY2F0aW9uIGVycm9ycyBhdCBsaW5r IHRpbWUuCi0jIEFjdHVhbGx5IG5vdyAoOC4wKSB0aGF0IHdlIGhhdmUgZGlzY292ZXJlZCB0aGUg LUcgb3B0aW9uIG1heWJlIGRlYnVnZ2luZwotIyBjYW4gYmUgcHV0IGJhY2suCi11bHRyaXg0NDoK LQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIENDPSQoQ0MpIENDMj0kKENDMikgXAotCSJLRkxBR1M9 LURVTFRSSVg0NCAtRzcgLUROT0RFQlVHIC1ETkVUUFRZIC1ETk9fREVWVFRZICQoS0ZMQUdTKSIg XAotCUtUQVJHRVQ9JCR7S1RBUkdFVC0kKEApfSB1bHRyaXg0MmMKLQotdWx0cml4NDU6Ci0JJChN QUtFKSAiTUFLRT0kKE1BS0UpIiBDQz0kKENDKSBDQzI9JChDQzIpIFwKLQkiS0ZMQUdTPS1EVUxU UklYNDUgJChLRkxBR1MpLURORVRQVFkgLUROT19ERVZUVFkgJChLRkxBR1MpIiBcCi0JS1RBUkdF VD0kJHtLVEFSR0VULSQoQCl9IHVsdHJpeDQyYwotCi1kdTQyYzoKLQkkKE1BS0UpICJNQUtFPSQo TUFLRSkiIENDPSQoQ0MpIENDMj0kKENDMikgXAotCUtUQVJHRVQ9JCR7S1RBUkdFVC0kKEApfSB1 bHRyaXg0MmMKLQotI0RFQyBVbHRyaXggNC4zQSBvciBsYXRlciBvbiBERUNzeXN0ZW0gYW5kIERF Q3N0YXRpb24gNTAwMC81MCwgLzE1MCBvciAvMjYwCi0jd2l0aCBNSVBTIFI0eDAwIHByb2Nlc3Nv ci4gIFRoZSAiLW1pcHMzIiBzd2l0Y2ggZ2VuZXJhdGVzIFI0MDAwLXNwZWNpZmljCi0jY29kZSwg d2hpY2ggaXMgZmFzdGVyIGFuZCBtb3JlIGNvbXBhY3QsIGJ1dCAqd29uJ3QqIHJ1biBvbiBlYXJs aWVyCi0jREVDc3lzdGVtcyBhbmQgREVDc3RhdGlvbnMuCi11bHRyaXg0My1taXBzMzoKLQlAZWNo byBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFVsdHJpeCA0LjNBIG9yIGxhdGVyLCBSNDAw MCBjcHUuLi4KLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQtJChAKX0gXAotCSJD RkxBR1M9IC1EQlNENCAtRFRDUFNPQ0tFVCAtRFNJR19WIC1ETk9HRVRVU0VSU0hFTEwgXAotCSQo S0ZMQUdTKSAtTzIgLU9saW1pdCAxNzUwIC1taXBzMyIgIkxOS0ZMQUdTID0gLXMgLW1pcHMzIgot Ci1kdTQzLW1pcHMzOgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgQ0M9JChDQykgQ0MyPSQoQ0My KSB1bHRyaXg0My1taXBzMwotCi0jREVDIFVsdHJpeCA0LjNBIG9yIGxhdGVyIG9uIE1JUFMgUjR4 MDAwIGJhc2VkIHN5c3RlbXMuCi0jTGlrZSB1bHRyaXg0My1taXBzMyBidXQgd2l0aCBjdXJzZXMg c3VwcG9ydCBhZGRlZAotdWx0cml4NDNjLW1pcHMzOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgVWx0cml4IDQuM0Egb3IgbGF0ZXIsIFI0MDAwIGNwdS4uLgotCSQoTUFLRSkg eGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVC0kKEApfSBcCi0JIkNGTEFHUz0gLURCU0Q0IC1EVENQ U09DS0VUIC1EU0lHX1YgLUROT0dFVFVTRVJTSEVMTCAtRENLX0NVUlNFUyBcCi0JJChLRkxBR1Mp IC1PMiAtT2xpbWl0IDMwMDAgLW1pcHMzIiAiTE5LRkxBR1MgPSAtcyAtbWlwczMiIFwKLQkiTElC Uz0gLWxjdXJzZXMgLWx0ZXJtY2FwIgotCi1kdTQzYy1taXBzMzoKLQkkKE1BS0UpICJNQUtFPSQo TUFLRSkiIENDPSQoQ0MpIENDMj0kKENDMikgXAotCUtUQVJHRVQ9JCR7S1RBUkdFVC0kKEApfSB1 bHRyaXg0M2MtbWlwczMKLQotI0RFQyBVbHRyaXggNC40IG9uIERFQ3N0YXRpb24gNTAwMC81MCBv ciAvMTUwIHdpdGggUjQwMDAgTUlQUyBwcm9jZXNzb3IsCi0jb3IgNTAwMC8yNjAgd2l0aCBSNDQw MC4gIFRoZSAiLW1pcHMzIiBzd2l0Y2ggZ2VuZXJhdGVzIFI0MDAwLXNwZWNpZmljIGNvZGUsCi0j d2hpY2ggaXMgZmFzdGVyIGFuZCBtb3JlIGNvbXBhY3QgYnV0ICp3b24ndCogcnVuIG9uIGVhcmxp ZXIgREVDc3RhdGlvbnMuCi11bHRyaXg0NC1taXBzMzoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQg JChDS1ZFUikgZm9yIFVsdHJpeCA0LjQsIFI0MDAwIGNwdSAuLi4KLQkkKE1BS0UpIHhlcm1pdCBL VEFSR0VUPSQke0tUQVJHRVQtJChAKX0gXAotCSJDRkxBR1M9IC1EQlNENCAtRFRDUFNPQ0tFVCAt RFNJR19WIC1ETk9HRVRVU0VSU0hFTEwgXAotCSQoS0ZMQUdTKSAtTzIgLU9saW1pdCAxNDUwIC1t aXBzMyIgIkxOS0ZMQUdTID0gLXMgLW1pcHMzIgotCi1kdTQ0LW1pcHMzOgotCSQoTUFLRSkgIk1B S0U9JChNQUtFKSIgQ0M9JChDQykgQ0MyPSQoQ0MyKSBcCi0JS1RBUkdFVD0kJHtLVEFSR0VULSQo QCl9IHVsdHJpeDQ0Yy1taXBzMwotCi0jREVDIFVsdHJpeCA0LjIgb24gREVDc3RhdGlvbiwgVkFY c3RhdGlvbiwgVkFYLCBldGMsIFN5c3RlbSBWIFI0IGVudmlyb25tZW50Ci11bHRyaXg0MnM1cjQ6 Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCBVTklYIFN5c3RlbSBW IFI0IG9uIFVsdHJpeC4uLicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQtJChA KX0gXAotCSJDRkxBR1MgPSAtTzIgLU9saW1pdCAxNTAwIC1EU1ZSNCAtRERJUkVOVCAtREhEQlVV Q1AgLUROT0dFVFVTRVJTSEVMTCBcCi0JLURUQ1BTT0NLRVQgJChLRkxBR1MpIiAiTE5LRkxBR1Mg PSAtcyIKLQotI09TRi8xCi1vc2Ygb3NmMToKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtREJTRDQgLURPU0YgLURfQlNEIC1EVENQU09DS0VU IC1EQ0tfQU5TSUMgLURTSUdfViBcCi0JLURDS19DVVJTRVMgLURDS19SVFNDVFMgLURGTkZMT0FU ICQoS0ZMQUdTKSIgXAotCSJMTktGTEFHUyA9IC1zIiAiTElCUyA9ICQoTElCUykgLWxic2QgLWxj dXJzZXMgLWx0ZXJtY2FwIC1sbSIKLQotI0RFQyBPU0YvMSBWMS4wLTEuMyBvbiBERUNzdGF0aW9u LCBWQVgsIEFscGhhLCBvciBQQy4KLWRlYy1vc2YgZGVjLW9zZjE6Ci0JJChNQUtFKSB4ZXJtaXQg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURCU0Q0IC1ET1NGIC1ET1NG MTMgLURfQlNEIC1EVENQU09DS0VUIC1EQ0tfQU5TSUMgLURTSUdfViBcCi0JLUROT1JFQUxQQVRI IC1ETk9JS1NEIC1EQ0tfQ1VSU0VTIC1EQ0tfUlRTQ1RTIC1ERk5GTE9BVCAtRE5PREVCVUcgXAot CS1ETk9VTklDT0RFICQoS0ZMQUdTKSIgXAotCSJMTktGTEFHUyA9IC1ub25fc2hhcmVkIiAiTElC UyA9IC1sYnNkIC1sY3Vyc2VzIC1sdGVybWNhcCAtbG0iCi0KLSMgVGhpcyBvbmUgY2F1c2VzICJy ZWxvY2F0aW9uIG91dC1vZi1yYW5nZSIgZXJyb3JzIGluIHRoZSBsaW5rZXIuCi1vbGQtZGVjLW9z ZjoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIERFQyBPU0YvMSBWMS54Li4u Ci0JQGVjaG8gSWYgeW91IGFyZSBidWlsZGluZyBmb3IgREVDIE9TRi8xIDIuMCwgcGxlYXNlIHVz ZSBkZWMtb3NmMjAuCi0JQGVjaG8gUmVtb3ZlIG9yIGFkanVzdCAtTzIgYW5kL29yIC1PbGltaXQg aWYgdGhleSBjYXVzZSB0cm91YmxlLgotCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSBvc2Yg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0gLU8yIC1PbGltaXQgMjQwMCAk KEtGTEFHUykiCi0KLSNERUMgT1NGLzEgMi4wIG9uIEFscGhhIGFuZCBwcm9iYWJseSBub3doZXJl IGVsc2UuCi0jVGhlIG9ubHkgZGlmZmVyZW5jZSBmcm9tIE9TRi8xIGlzIHRoYXQgb3B0aW1pemF0 aW9uIGlzIG9taXR0ZWQuCi0jVGhlIG9wdGltaXplZCB2ZXJzaW9uIGdldHMgc3RyYW5nZSBydW50 aW1lIGVycm9ycywgbGlrZSB0aGUgUEFVU0UgY29tbWFuZAotI25vdCB3b3JraW5nLiAgQWRkICIt dW5zaWduZWQiIHRvIG1ha2UgYWxsIGNoYXJzIHVuc2lnbmVkLgotZGVjLW9zZjIwOgotCUBlY2hv IE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgREVDIE9TRi8xIFYyLjAuLi4KLQlAZWNobyBP cHRpbWl6YXRpb24gb21pdHRlZCBiZWNhdXNlIGl0IGNhdXNlcyBydW50aW1lIGVycm9ycy4KLQlA ZWNobyBTZWUgY29tbWVudHMgaW4gbWFrZWZpbGUuCi0JJChNQUtFKSBDQz0kKENDKSBDQzI9JChD QzIpIG9zZiBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPSAtRE9TRjIwICQo S0ZMQUdTKSIKLQotZGVjLW9zZjMwOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBm b3IgREVDIE9TRi8xIFYzLjAuLi4KLQkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKENDMikgb3NmIEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9IC1ET1NGMzAgLU8yIC1PbGltaXQg MjQwMCAkKEtGTEFHUykiCi0KLSNEaWdpdGFsIFVOSVggMy4yCi0jIE11c3QgY29tcGlsZSBja3V1 c1s2eF0uYyBzZXBhcmF0ZWx5IHdpdGhvdXQgb3B0aW1pemF0aW9uIG90aGVyd2lzZQotIyB0aGUg b3B0aW1pemVyIGR1bXBzIGNvcmUgLSBrZWVwIENGTEFHUyBoZXJlIGluIHN5bmMgd2l0aCB0aG9z ZSBmcm9tIG9zZi4KLWR1MzI6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBE aWdpdGFsIFVOSVggMy4yLi4uCi0JJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIGNrdXVzNi4k KEVYVCkgXAotCSJDRkxBR1M9IC1EQlNENCAtRE9TRiAtRF9CU0QgLURUQ1BTT0NLRVQgLURDS19B TlNJQyAtRFNJR19WIFwKLQktRENLX0NVUlNFUyAtRENLX1JUU0NUUyAtREZORkxPQVQgLURPU0Yz MiAtREhEQlVVQ1AgJChLRkxBR1MpIgotCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSBja3V1 c3guJChFWFQpIFwKLQkiQ0ZMQUdTPSAtREJTRDQgLURPU0YgLURfQlNEIC1EVENQU09DS0VUIC1E Q0tfQU5TSUMgLURTSUdfViBcCi0JLURDS19DVVJTRVMgLURDS19SVFNDVFMgLURGTkZMT0FUIC1E T1NGMzIgLURIREJVVUNQICQoS0ZMQUdTKSIKLQkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKENDMikg b3NmIFwKLQkiS0ZMQUdTPSAtRE9TRjMyIC1ESERCVVVDUCAtTzIgLU9saW1pdCAzMjAwICQoS0ZM QUdTKSIKLQotZGVjLW9zZjMyOgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgQ0M9JChDQykgQ0My PSQoQ0MyKSBkdTMyIFwKLQlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9Ci0KLSNEaWdpdGFsIFVO SVggNC4wIHRocm91Z2ggNC4wRCAodXNlIHRydTY0IHRhcmdldHMgZm9yIDQuMEUgYW5kIGFib3Zl KS4uLgotZHU0MDoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIERpZ2l0YWwg VU5JWCA0LjAuLi4KLQkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKENDMikgb3NmIEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9IC1ET1NGNDAgLURIREJVVUNQIC1ERk5GTE9BVCBc Ci0JLXVuc2lnbmVkIC1zdGQxIC1PMyAtT2xpbWl0IDI0MDAgJChLRkxBR1MpIiAiTElCUz0tbG0i Ci0KLWR1NDBnY2M6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBEaWdpdGFs IFVOSVggNC4wIHdpdGggZ2NjIC4uLgotCSQoTUFLRSkgb3NmIENDPWdjYyBDQzI9Z2NjIEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9IC1ET1NGNDAgLURIREJVVUNQICQoS0ZM QUdTKSIKLQotI1RydTY0IFVuaXggNC4wRQotdHJ1NjQtNDBlOgotCUBlY2hvIE1ha2luZyBDLUtl cm1pdCAkKENLVkVSKSBmb3IgVHJ1NjQgVU5JWCA0LjBFLi4uCi0JJChNQUtFKSBDQz0kKENDKSBD QzI9JChDQzIpIG9zZiBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPSAtRE9T RjQwIC1ET1NGNDBFIC1EVFJVNjQgLURIREJVVUNQIC1ERk5GTE9BVCAtRE5PQ09URk1DIFwKLQkt dW5zaWduZWQgLXN0ZDEgLU8zIC1PbGltaXQgMjQwMCAkKEtGTEFHUykiICJMSUJTPS1sbSIKLQot dHJ1NjQtNDBmOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgVHJ1NjQgVU5J WCA0LjBGLi4uCi0JJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIG9zZiBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPSAtRE9TRjQwIC1ET1NGNDBGIC1EVFJVNjQgLURIREJV VUNQIC1ERk5GTE9BVCAtRE5PQ09URk1DIFwKLQktdW5zaWduZWQgLXN0ZDEgLU8zIC1PbGltaXQg MjQwMCAkKEtGTEFHUykiICJMSUJTPS1sbSIKLQotdHJ1NjQtNDBnOgotCUBlY2hvIE1ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgVHJ1NjQgVU5JWCA0LjBHLi4uCi0JJChNQUtFKSBDQz0kKEND KSBDQzI9JChDQzIpIG9zZiBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPSAt RE9TRjQwIC1ET1NGNDBHIC1EVFJVNjQgLURIREJVVUNQIC1ERk5GTE9BVCAtRE5PQ09URk1DIFwK LQktdW5zaWduZWQgLXN0ZDEgLU8zIC1PbGltaXQgMjQwMCAkKEtGTEFHUykiICJMSUJTPS1sbSIK LQotdHJ1NjQtNTBhOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgVHJ1NjQg VU5JWCA1LjBBLi4uCi0JJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIG9zZiBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPSAtRFRSVTY0IC1ET1NGNTAgLURIREJVVUNQIFwK LQktdW5zaWduZWQgLXN0ZDEgLU8zIC1PbGltaXQgMjQwMCAkKEtGTEFHUykiCi0KLXRydTY0LTUx YToKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFRydTY0IFVOSVggNS4xQS4u LgotCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSBvc2YgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCi0JIktGTEFHUz0gLURUUlU2NCAtRE9TRjUwIC1ET1NGNTFBIC1ESERCVVVDUCBcCi0J LXVuc2lnbmVkIC1zdGQxIC1PMyAtT2xpbWl0IDI0MDAgJChLRkxBR1MpIgotCi10cnU2NC01MWI6 Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBUcnU2NCBVTklYIDUuMUIuLi4K LQkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKENDMikgb3NmIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gXAotCSJLRkxBR1M9IC1EVFJVNjQgLURPU0Y1MCAtRE9TRjUxQSAtRE9TRjUxQiAtREhEQlVV Q1AgXAotCS11bnNpZ25lZCAtc3RkMSAtTzMgLU9saW1pdCAyNDAwICQoS0ZMQUdTKSIKLQotIyBB ZGRlZCA1LjFiIHZlcnNpb24gd2l0aCBPcGVuU1NMIC0gQ0RXIDYtMTMtMjAwNS4uLgotdHJ1NjQt NTFiK29wZW5zc2w6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBUcnU2NCBV TklYIDUuMWIKLQlAZWNobyAgaW5jbHVkaW5nIE9wZW5TU0wuLi4KLQkkKE1BS0UpIENDPSQoQ0Mp IENDMj0kKENDMikgb3NmIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9IC1E VFJVNjQgLURPU0Y1MCAtRE9TRjUxQSAtRE9TRjUxQiAtREhEQlVVQ1AgXAotCS11bnNpZ25lZCAt c3RkMSAtTzMgLU9saW1pdCAyNDAwIFwKLQktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1NMICQo U1NMSU5DKSAkKEtGTEFHUykiIFwKLQkiTElCUz0gJChTU0xMSUIpIC1ycGF0aCAkKHNzbHJvb3Qp L3NzbC9saWIgLWxzc2wgLWxjcnlwdG8iCi0KLWR1NTA6Ci0JJChNQUtFKSBDQz0kKENDKSBDQzI9 JChDQzIpIHRydTY0LTUwYSBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9Ci0KLWR1NDAtcmlkaWN1 bG91cy1jaGVja2luZzoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIERpZ2l0 YWwgVU5JWCA0LjAuCi0JQGVjaG8gQ2hlY2tpbmcgZXZlcnl0aGluZyAtIGFzc3VtZXMgREVDQy4u LgotCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSBvc2YgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCi0JIktGTEFHUz0gLURPU0Y0MCAtREhEQlVVQ1AgLXcwIC13YXJucHJvdG9zIC1jaGVj ayAtcG9ydGFibGUgXAotCS11bnNpZ25lZCAtc3RkMSAtTzMgLU9saW1pdCAxNzYwICQoS0ZMQUdT KSIKLQotI1NlcXVlbnQgRFlOSVgvcHR4IDEuMi4xCi1keW5peHB0eDEyOgotCUBlY2hvIE1ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU2VxdWVudCBEWU5JWC9wdHggMS4yLjEuLi4KLQkkKE1B S0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtRFNWUjMg LURESVJFTlQgLURIREJVVUNQIC1EUFRYIC1ETk9HRVRVU0VSU0hFTEwgLUROT0xFQVJOIFwKLQkt RFBJRF9UPXBpZF90IC1EVUlEX1Q9dWlkX3QgLURHSURfVD1naWRfdCAkKEtGTEFHUykgLWkgLU8i IFwKLQkiTE5LRkxBR1MgPSAtaSIKLQotI1NlcXVlbnQgRFlOSVgvcHR4IDEuMyBvciAxLjQKLWR5 bml4cHR4MTM6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTZXF1ZW50IERZ TklYL3B0eCAxLjMgVENQL0lQLi4uCi0JJChNQUtFKSB4ZXJtaXQgIkNGTEFHUz0gLU8gS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JLURTVlIzIC1ERElSRU5UIC1ESERCVVVDUCAtRFBUWCAt RENLX1BPTEwgLUROT0dFVFVTRVJTSEVMTCBcCi0JLURQSURfVD1waWRfdCAtRFVJRF9UPXVpZF90 IC1ER0lEX1Q9Z2lkX3QgLURUQ1BTT0NLRVQgJChLRkxBR1MpIC1pIiBcCi0JIkxOS0ZMQUdTID0g LWkiICJMSUJTID0gLWxzb2NrZXQgLWxpbmV0IC1sbnNsIgotCi0jU2VxdWVudCBEWU5JWC9wdHgg Mi4wLCBBTlNJIEMgY29tcGlsYXRpb24KLSNTaG91bGQgd29yayBvbiBhbnkgaGFyZHdhcmUgcGxh dGZvcm0gd2hlbiBEWU5JWC9wdHggcnVucywgaW5jbHVkaW5nCi0jMzg2LCA0ODYsIFBlbnRpdW0u Ci1keW5peHB0eDIwOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFBPU0lY LCBTZXF1ZW50IERZTklYL3B0eCAyLjAuLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURQT1NJWCAtREhEQlVVQ1AgLURUQ1BTT0NLRVQg XAotCS1EV0FJVF9UPWludCAtRFBUWCAtRE5PR0VUVVNFUlNIRUxMICQoS0ZMQUdTKSAtTyIgXAot CSJMSUJTID0gLWxzb2NrZXQgLWxpbmV0IC1sbnNsIgotCi0jU2VxdWVudCBEWU5JWC9wdHggMi4w LCBBTlNJIEMgY29tcGlsYXRpb24sIHdpdGggY3Vyc2VzCi1keW5peHB0eDIwYzoKLQlAZWNobyAn TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBQT1NJWCwgU2VxdWVudCBEWU5JWC9wdHggMi4w Li4uJwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxB R1M9IC1EUE9TSVggLURIREJVVUNQIC1EVENQU09DS0VUIC1EV0FJVF9UPWludCAtRFBUWCAtRENL X0NVUlNFUyBcCi0JLURDS19ORVdURVJNIC1ETk9HRVRVU0VSU0hFTEwgJChLRkxBR1MpIC1PIiBc Ci0JIkxJQlMgPSAtbHNvY2tldCAtbGluZXQgLWxuc2wgLWxjdXJzZXMgLWx0ZXJtY2FwIgotCi0j U2VxdWVudCBEWU5JWC9wdHggMi4xLjYsIDgwNDg2LCBBTlNJIEMgY29tcGlsYXRpb24sIHdpdGgg Y3Vyc2VzOgotIyAtWGEgLS0gdXNlIEFOU0kgY29tcGlsZXIuCi0jIC1XYywtcHcgLS0gc3VwcHJl c3MgcG9ydGFiaWxpdHkgd2FybmluZ3MuCi0jIC1XYywtaTM4NiAtLSA4MDM4NiBjcHUuCi0jIC1X YywtaTQ4NiAtLSA4MDQ4NiBjcHUuCi0jIC1XYywtUDUgLS0gUGVudGl1bSAoZGVmYXVsdCkuCi0j IC1XYywtTzMgLS0gaGlnaGVzdCBvcHRpbWl6YXRpb24uCi0jIC1XYSwtTjE3MDYxIC0tIGluY3Jl YXNlIHN5bWJvbCB0YWJsZSBmcm9tIGRlZmF1bHQgb2YgMTUwMTMgZm9yIGNrY3VuaS5jLgotIyBF YXJseSB2ZXJzaW9ucyBvZiBEWU5JWC9wdHggMi4xLnggbWF5IG5lZWQgLURDS19QT0xMIGluc3Rl YWQgb2YgLURTRUxFQ1QuCi0jIEFkZCAiJCYiIGFmdGVyIHRoZSBjb2xvbiBpbiB0aGUgInhlcm1p dCIgdGFyZ2V0IGZvciBwYXJhbGxlbCBtYWtlcy4KLWR5bml4cHR4MjE2YzoKLQlAZWNobyAnTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBQT1NJWCwgU2VxdWVudCBEWU5JWC9wdHggMi4xLjYn Ci0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0g LURQT1NJWCAtREhEQlVVQ1AgLUREWU5BTUlDIC1EVENQU09DS0VUIFwKLQktRFNFTEVDVCAtRENL X1JFRElSIC1EQ0tfTkFXUyAtRENLX1dSRUZSRVNIIC1EU1dfQUNDX0lEIFwKLQktRFRDUF9OT0RF TEFZPTEgLURUUk1CVUZMPTIwNDggLURCSUdCVUZPSyAtREhBRERSTElTVCBcCi0JLURQVFggIC1E Q0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtRE5PR0VUVVNFUlNIRUxMIC1ETk9SRUFMUEFUSCBcCi0J JChLRkxBR1MpIC1YYSAtV2MsLXB3IC1XYywtaTQ4NiAtV2MsLU8zIC1XYSwtTjE3MDYxIiBcCi0J IkxJQlMgPSAtbFhic2QgLWxzZXEgLWxzb2NrZXQgLWxpbmV0IC1sbnNsIC1sbWFsbG9jIC1sbSAt bGN1cnNlcyIgXAotCSJMTktGTEFHUyA9IC1zIgotCi0jU2VxdWVudCBEWU5JWC9wdHggMi4xLjYs IGdjYyAyLjcuMi4yLCB3aXRoIGN1cnNlczoKLWR5bml4cHR4MjE2Y2djYzoKLQlAZWNobyAnTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBQT1NJWCwgU2VxdWVudCBEWU5JWC9wdHggMi4xLjYg Z2NjJwotCSQoTUFLRSkgeGVybWl0ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURQT1NJWCAtREhEQlVVQ1AgLUREWU5BTUlDIC1E VENQU09DS0VUIFwKLQktRFNFTEVDVCAtRENLX1JFRElSIC1EQ0tfTkFXUyAtRENLX1dSRUZSRVNI IC1EU1dfQUNDX0lEIFwKLQktRFRDUF9OT0RFTEFZPTEgLURUUk1CVUZMPTIwNDggLURCSUdCVUZP SyAtREhBRERSTElTVCBcCi0JLURQVFggIC1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtRE5PR0VU VVNFUlNIRUxMIC1ETk9SRUFMUEFUSCBcCi0JJChLRkxBR1MpIC1PMyAtcGlwZSAtZnVuc2lnbmVk LWNoYXIiIFwKLQkiTElCUyA9IC1sWGJzZCAtbHNlcSAtbHNvY2tldCAtbGluZXQgLWxuc2wgLWxt YWxsb2MgLWxtIC1sY3Vyc2VzIiBcCi0JIkxOS0ZMQUdTID0gLXMiCi0KLSNTZXF1ZW50IERZTklY L3B0eCA0LjAsIEFOU0kgQyBjb21waWxhdGlvbiwgd2l0aCBjdXJzZXMKLWR5bml4cHR4NDFjOgot CUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFBPU0lYLCBTZXF1ZW50IERZTklY L3B0eCA0LjAuLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBc Ci0JIkNGTEFHUz0gLURQT1NJWCAtREhEQlVVQ1AgLURUQ1BTT0NLRVQgXAotCS1EV0FJVF9UPWlu dCAtRFBUWCAtRFBUWDQgLURDS19DVVJTRVMgLURDS19ORVdURVJNIFwKLQktRE5PR0VUVVNFUlNI RUxMICQoS0ZMQUdTKSAtTyIgXAotCSJMSUJTID0gLWxzb2NrZXQgLWxuc2wgLWxjdXJzZXMgLWx0 ZXJtY2FwIgotCi0jU2VxdWVudCBEWU5JWC9wdHggNC40LCBBTlNJIEMgY29tcGlsYXRpb24sIHdp dGggY3Vyc2VzCi1keW5peHB0eDQ0OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIFBPU0lYLCBTZXF1ZW50IERZTklYL3B0eCA0LjQuLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURQVFggLURQVFg0IC1EUE9TSVgg LURIREJVVUNQIC1EVENQU09DS0VUIC1EV0FJVF9UPWludCBcCi0JLURDS19DVVJTRVMgLURDS19O RVdURVJNIC1EQklHQlVGT0sgLURTRUxFQ1QgLUROT0dFVFVTRVJTSEVMTCBcCi0JJChLRkxBR1Mp IC1PIiAiTElCUyA9IC1sc29ja2V0IC1sbnNsIC1sY3Vyc2VzIC1sdGVybWNhcCIKLQotI1NlcXVl bnQgRFlOSVggMy4wLngKLWR5bml4MzoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIFNlcXVlbnQgRFlOSVggMy4wLnguLi4KLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtREJTRDQzIC1EQUNVQ05UUkwgLURUQ1BTT0NLRVQg LU8gXAotCS1EUFdVSURfVD1pbnQgLURHSURfVD1pbnQgJChLRkxBR1MpIgotCi0jU2VxdWVudCBE WU5JWCAzLjAueCwgbm8gQUNVQ05UUkwKLWR5bml4M25vYWN1OgotCUBlY2hvIE1ha2luZyBDLUtl cm1pdCAkKENLVkVSKSBmb3IgU2VxdWVudCBEWU5JWCAzLjAueC4uLgotCSQoTUFLRSkgeGVybWl0 IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1EQlNENDMgLURMQ0tESVIg LURUQ1BTT0NLRVQgLU8gXAotCS1EVUlEX1Q9aW50IC1ER0lEX1Q9aW50ICQoS0ZMQUdTKSIKLQot I1NlcXVlbnQgRFlOSVggMy4xLngKLWR5bml4MzE6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQo Q0tWRVIpIGZvciBTZXF1ZW50IERZTklYIDMuMS54Li4uCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLU8gLUREQ0xQT1BFTiAtRExDS0RJUiAt REJTRDQgLURUQ1BTT0NLRVQgJChLRkxBR1MpIgotCi0jU2VxdWVudCBEWU5JWCAzLjEuMiwgYXMg YWJvdmUgYnV0IHdpdGggY3Vyc2VzLCB0byBiZSBjb21waWxlZCBieSBnY2MgMi4zLjMuCi1keW5p eDMxYzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTZXF1ZW50IERZTklY IDMuMS4yLCBjdXJzZXMuLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCi0JIkNGTEFHUz0gLU8yIC1ERENMUE9QRU4gLURBQ1VDTlRSTCBcCi0JLURCU0Q0MyAt RFRDUFNPQ0tFVCAtRENLX0NVUlNFUyAtRFVJRF9UPWludCBcCi0JJChLRkxBR1MpIiAiTElCUz0g LWxjdXJzZXMgLWx0ZXJtY2FwIgotCi0jQ29udmV4IEMxIHdpdGggQmVya2VsZXkgVW5peAotY29u dmV4OgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQ29udmV4IEMxIC8gQlNE Li4uCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFH Uz0gLURCU0Q0IC1ETk9MRUFSTiAkKEtGTEFHUykgLURtc2xlZXA9bW5hcCIKLQotI0NvbnZleCBD MjEwIHdpdGggQ29udmV4L09TIDgKLWNvbnZleDg6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQo Q0tWRVIpIGZvciBDb252ZXggQzIxMCB3aXRoIE9TIDgKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtREJTRDQgLURUQ1BTT0NLRVQgLUROT0RF QlVHIC1ERElSRU5UIC1ETk9GSUxFSCBcCi0JJChLRkxBR1MpIC1EU0lHX1YgLURtc2xlZXA9bW5h cCIKLQotI0NvbnZleCBDMiB3aXRoIENvbnZleCBPUyA5LjEgKHNob3VsZCBhbHNvIHdvcmsgd2l0 aCA4LjEgb3IgbGF0ZXIpCi0jd2l0aCBBTlNJIEMgY29tcGlsZXIsIHVzZXMgQlNEIDQuMyB1dWNw IGxvY2tmaWxlIGNvbnZlbnRpb24uCi1jb252ZXg5OgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgQ29udmV4IEMyMTAgd2l0aCBPUyA5LjEKLQkkKE1BS0UpIHhlcm1pdCBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtRFBPU0lYIC1EQ09OVkVYOSAtRE5P SUVYVEVOIC1ERElSRU5UIC1ETk9GSUxFSCAtRFRDUFNPQ0tFVCBcCi0JLURfX1NURENfXyAtRExD S0RJUiAtRG1zbGVlcD1tbmFwIC1PIC1leHQgLXRtIGMxICQoS0ZMQUdTKSIgXAotCSJMTktGTEFH UyA9IC1leHQiCi0KLSNDb252ZXggQzIgd2l0aCBDb252ZXggT1MgMTAuMSBvciBsYXRlcgotI3dp dGggZ2NjIDIueCBDIGNvbXBpbGVyCi1jb252ZXgxMGdjYzoKLQlAZWNobyBNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIENvbnZleCBDMiB3aXRoIE9TIDEwLjEgdXNpbmcgZ2NjCi0JJChNQUtF KSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURQT1NJWCAt RENPTlZFWDkgLUROT0lFWFRFTiAtRERJUkVOVCAtRE5PRklMRUggLURUQ1BTT0NLRVQgXAotCS1E X19TVERDX18gIC1EbXNsZWVwPW1uYXAgLU8yICQoS0ZMQUdTKSIgQ0M9Z2NjIENDMj1nY2MKLQot I0NyYXkgWC1NUCBvciBZLU1QIFVOSUNPUyA2Lnggb3IgNy54LgotI05PVEU6IE5QUk9DIHRlbGxz IGhvdyBtYW55IHBhcmFsbGVsIG1ha2VzIHRvIHJ1bi4gIElmIHlvdXIgQ3JheSBoYXMgbXVsdGlw bGUKLSNwcm9jZXNzb3JzLCB5b3UgY2FuIHNldCBOUFJPQyB1cCB0byB0aGUgbnVtYmVyIG9mIENQ VXMsIGUuZy4gTlBST0M9MTYuCi1jcmF5OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZF UikgZm9yIENyYXkgWC9ZLU1QIFVOSUNPUyA2Lnggb3IgNy4wLi4uCi0JJChNQUtFKSB4ZXJtaXQg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBOUFJPQz0xIFwKLQkiQ0ZMQUdTPSAtRFNWUjMgLURE SVJFTlQgLURIREJVVUNQIC1EVENQU09DS0VUICQoS0ZMQUdTKSAtTzEiCi0KLSNDcmF5IFgtTVAg b3IgWS1NUCBVTklDT1MgOC4wIEFscGhhLgotY3JheTg6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgQ3JheSBYL1ktTVAgVU5JQ09TIDguMCBBbHBoYS4uLgotCSQoTUFLRSkg eGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gTlBST0M9MSBcCi0JIkNGTEFHUz0gLURT VlI0IC1ERElSRU5UIC1ESERCVVVDUCAtRFRDUFNPQ0tFVCAkKEtGTEFHUykgLU8xIgotCi0jQ3Jh eSBYLU1QIG9yIFktTVAgVU5JQ09TIDkuMC4KLSNUaGlzIG9uZSB3YXMgZXhlY3V0ZWQgc3VjY2Vz c2Z1bGx5IGZvciBDLUtlcm1pdCA4LjAuMjA5LgotI0VhcmxpZXIgdmVyc2lvbnMgb2YgVW5pY29z IHdpbGwgcHJvYmFibHkgbmVlZCB0aGUgc2FtZSBmbGFncy4KLWNyYXk5OgotCUBlY2hvICdNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIENyYXkgWC9ZLU1QIFVOSUNPUyA5LjAuLi4KLQkkKE1B S0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IE5QUk9DPTEgXAotCSJDRkxBR1M9 IC1EU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLUROT0xGREVWTk8gXAotCS1EVENQU09DS0VUICQo S0ZMQUdTKSAtTzEiCi0KLSNDcmF5LTIgb3IgQ3JheSAzLUNTT1MKLSNOT1RFOiBOUFJPQyB0ZWxs cyBob3cgbWFueSBwYXJhbGxlbCBtYWtlcyB0byBydW4uICBJZiB5b3VyIENyYXkgaGFzIG11bHRp cGxlCi0jcHJvY2Vzc29ycywgeW91IGNhbiBzZXQgTlBST0MgdXAgdG8gdGhlIG51bWJlciBvZiBD UFVzLCBlLmcuIE5QUk9DPTE2LgotY3JheWNzb3M6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgQ3JheS0yLzMgQ1NPUwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gTlBST0M9MSBcCi0JIkNGTEFHUz0gLURTVlIzIC1ERElSRU5UIC1ESERCVVVD UCAtRFRDUFNPQ0tFVCBcCi0JJChLRkxBR1MpIC1EQ0tfQU5TSUMgLURDS19DVVJTRVMiICJMSUJT PS1sbmV0IgotCi0jTmVYVFNURVAgMS4wIHRocm91Z2ggMy4yLgotI0luY2x1ZGVzIGZ1bGxzY3Jl ZW4gZmlsZSB0cmFuc2ZlciBkaXNwbGF5IChjdXJzZXMpIGFuZCBUQ1AvSVAgc3VwcG9ydC4KLSNV c2VzIHNoYXJlZCBsaWJyYXJ5IHRvIG1ha2UgZXhlY3V0YWJsZSBwcm9ncmFtIGFib3V0IDgwSyBz bWFsbGVyLgotI1JlbW92ZSAiTElCUyA9IC1sc3lzX3MiIGlmIHRoaXMgY2F1c2VzIHRyb3VibGUu Ci1uZXh0OgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTmVYVFNURVAuLi4K LQlAZWNobyAnSWYgeW91IGdldCBlcnJvcnMgaW4gY2t1dGlvLmMgYWJvdXQgd19TLCB3X1QsIGV0 YywnCi0JQGVjaG8gJ2FkZCBLRkdMQUdTPS1ETk9SRURJUkVDVCB0byB5b3VyIG1ha2UgY29tbWFu ZC4nCi0JJChNQUtFKSB4ZXJtaXQgQ0M9JChDQykgQ0MyPSQoQ0MyKSBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtRE5FWFQgLURUQ1BTT0NLRVQgLURMQ0tESVIgLUROT1BV VEVOViAtREZORkxPQVQgXAotCS1waXBlIC1EQ0tfQ1VSU0VTICQoS0ZMQUdTKSAtTyAtdyIgIkxJ QlMgPSAtbHN5c19zIC1sY3Vyc2VzIC1sdGVybWNhcCIKLQotbmV4dGM6Ci0JJChNQUtFKSAiTUFL RT0kKE1BS0UpIiBDQz0kKENDKSBDQzI9JChDQzIpIG5leHQgXAotCUtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0KLQotbmV4dGc6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBDQz0kKENDKSBDQzI9 JChDQzIpIG5leHQgXAotCUtGTEFHUz0tV2FsbCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9Ci0K LW5leHRnYzoKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIENDPSQoQ0MpIENDMj0kKENDMikgbmV4 dCBcCi0JS0ZMQUdTPS1XYWxsIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KLQotI05lWFRTVEVQ IDMuMy4KLSNJbmNsdWRlcyBmdWxsc2NyZWVuIGZpbGUgdHJhbnNmZXIgZGlzcGxheSBhbmQgVENQ L0lQLgotIyBZb3UgbWlnaHQgaGF2ZSB0byBhZGQgMSBsaW5lIHRvIDEgTmVYVCBoZWFkZXIgZmls ZSA8aXAuaD4KLSMgdG8gZGVjbGFyZSBuX2xvbmcgYXMgdV9sb25nIGJ5IGFkZGluZyAjaW5jbHVk ZSA8YnNkL25ldGluZXQvaW5fc3lzdG0uaD4KLQotbmV4dDMzOgotCUBlY2hvIE1ha2luZyBDLUtl cm1pdCAkKENLVkVSKSBmb3IgTmVYVFNURVAgMy4zLi4uCi0JJChNQUtFKSB4ZXJtaXQgQ0M9JChD QykgQ0MyPSQoQ0MyKSBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtRE5F WFQzMyAtRFRDUFNPQ0tFVCAtRExDS0RJUiAtRE5PUFVURU5WIC1ERk5GTE9BVCBcCi0JLXBpcGUg LURDS19DVVJTRVMgJChLRkxBR1MpIC1PIC13IiAiTElCUyA9IC1sc3lzX3MgLWxjdXJzZXMgLWx0 ZXJtY2FwIgotCi0jT1BFTlNURVAgNC4yIGZvciBTcGFyYywgbTY4MHgwLCBIUCBQQS1SSVNDLCBh bmQgSW50ZWwuCi0jSW5jbHVkZXMgZnVsbHNjcmVlbiBmaWxlIHRyYW5zZmVyIGRpc3BsYXkgYW5k IFRDUC9JUC4KLSNja2Nwcm8uYyBjb21waWxlZCB3aXRob3V0IG9wdGltaXphdGlvbiBiZWNhdXNl IGl0IGNyYXNoZXMgdGhlIGNvbXBpbGVyLgotb3BlbnN0ZXA0MjoKLQlAZWNobyBNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIE9QRU5TVEVQIDQuMi4uLgotCSQoTUFLRSkgY2tjcHJvLiQoRVhU KSBcCi0JIkNGTEFHUz0gLURPUEVOU1RFUDQyIC1ETkVYVDMzIC1EVENQU09DS0VUIC1ETENLRElS IC1ETk9QVVRFTlYgXAotCS1ERk5GTE9BVCAtcGlwZSAtRENLX0NVUlNFUyAkKEtGTEFHUykgLXci Ci0JJChNQUtFKSB4ZXJtaXQgQ0M9JChDQykgQ0MyPSQoQ0MyKSBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtRE9QRU5TVEVQNDIgLURORVhUMzMgLURUQ1BTT0NLRVQgLURM Q0tESVIgLUROT1BVVEVOViBcCi0JLURGTkZMT0FUIC1waXBlIC1EQ0tfQ1VSU0VTICQoS0ZMQUdT KSAtTyAtdyIgXAotCSJMSUJTID0gLWxzeXNfcyAtbGN1cnNlcyAtbHRlcm1jYXAiCi0KLSNOZVhU IHdpdGggbWFsbG9jIGRlYnVnZ2VyCi1uZXh0bWQ6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQo Q0tWRVIpIGZvciBOZVhUIHdpdGggbWFsbG9jIGRlYnVnZ2luZy4uLgotCSQoTUFLRSkgbWVybWl0 IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1ETkVYVCAtRFRDUFNPQ0tF VCAtRExDS0RJUiAtRE5PUFVURU5WIC1ERk5GTE9BVCBcCi0JLURDS19DVVJTRVMgJChLRkxBR1Mp IC1PIC13IC1EbWFsbG9jPWRtYWxsb2MgLURmcmVlPWRmcmVlIC1ETURFQlVHIiBcCi0JIkxJQlMg PSAtbHN5c19zIC1sY3Vyc2VzIC1sdGVybWNhcCIKLQotI0J1aWxkIGZvciBOZVhUU1RFUCB3aXRo ICJmYXQiIGJpbmFyaWVzIChNQUJzKSB0aGF0IHJ1biBvbiBib3RoIE1vdG9yb2xhCi0jYW5kIElu dGVsIHBsYXRmb3Jtcy4KLW5leHRmYXQ6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBDQz0kKEND KSBDQzI9JChDQzIpIFwKLQluZXh0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxB R1M9LVdhbGwgLWFyY2ggbTY4ayAtYXJjaCBpMzg2IiAiTE5LRkxBR1MgPSAtYXJjaCBtNjhrIC1h cmNoIGkzODYiCi0KLSNOZVhUU1RFUCBvbiBJbnRlbCBQbGF0Zm9ybXMuCi1uZXh0NDg2OgotCUBl Y2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTmVYVFNURVAgb24gSW50ZWwgUGxhdGZv cm1zLi4uCi0JQGVjaG8gJ0lmIHlvdSBnZXQgZXJyb3JzIGluIGNrdXRpby5jIGFib3V0IHdfUywg d19ULCBldGMsJwotCUBlY2hvICdhZGQgS0ZHTEFHUz1ELUROT1JFRElSRUNUIHRvIHlvdXIgbWFr ZSBjb21tYW5kLicKLQkkKE1BS0UpIHhlcm1pdCBDQz0kKENDKSBDQzI9JChDQzIpIEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1ETkVYVCAtRFRDUFNPQ0tFVCAtRExDS0RJ UiAtRE5PUFVURU5WIC1ERk5GTE9BVCBcCi0JLUROT0RFQlVHIC1PMyAtZm5vLW9taXQtZnJhbWUt cG9pbnRlciAtZnNjaGVkdWxlLWluc25zMiAtcGlwZSBcCi0JLURDS19DVVJTRVMgJChLRkxBR1Mp IC13IiAiTElCUyA9IC1sc3lzX3MgLWxjdXJzZXMgLWx0ZXJtY2FwIgotCi0jU2luZ2xlIGJpbmFy eSB0aGF0IHJ1bnMgb24gTmVYVCA2ODAzMCBhbmQgNjgwNDAsIEludGVsLCBIUCwgYW5kIFNwYXJj LAotI2FzIHdlbGwgYXMgb24gT3BlblN0ZXAvTWFjaC4KLW5leHRxdWFkZmF0OgotCSQoTUFLRSkg Ik1BS0U9JChNQUtFKSIgQ0M9JChDQykgQ0MyPSQoQ0MyKSBuZXh0IFwKLQlLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPS1XYWxsIC1hcmNoIG02OGsgLWFyY2ggaTM4NiAtYXJj aCBocHBhIC1hcmNoIHNwYXJjIiBcCi0JIkxOS0ZMQUdTID0gLWFyY2ggbTY4ayAtYXJjaCBpMzg2 IC1hcmNoIGhwcGEgLWFyY2ggc3BhcmMiCi0KLSNCZUJveAotYmVib3hkcjc6Ci0JQGVjaG8gJ01h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgdGhlIEJlQm94Li4uJwotCUBlY2hvICdMaW5rIHN0 ZXAgd2lsbCBmYWlsIHdpdGggZGVmYXVsdCBNZXRyb3dvcmtzIGxpbmtlciA2NEsgbGltaXQuJwot CUBlY2hvICdDb2RlIFdhcnJpb3IgR29sZCByZXF1aXJlZCB0byBsaW5rIGJpZyBwcm9ncmFtcy4n Ci0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNDPS9ib290 L2RldmVsb3AvdG9vbHMvbXdjYyIgIkNDMj0vYm9vdC9kZXZlbG9wL3Rvb2xzL213bGQiIFwKLQki Q0ZMQUdTPSAtREJFQk9YIC1EQkVfRFJfNyAtRFBPU0lYIC1ETk9VVUNQIC1ETk9MRUFSTiAkKEtG TEFHUykgLU8iCi0KLSNCZUJveCBCZU9TIERSNyBvbmx5Ci1iZWJveDoKLQlAZWNobyAnTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBCZUJveC4uLicKLQlAZWNobyAnTGluayBzdGVwIHdpbGwg ZmFpbCB3aXRoIGRlZmF1bHQgTWV0cm93b3JrcyBsaW5rZXIgNjRLIGxpbWl0LicKLQlAZWNobyAn Q29kZSBXYXJyaW9yIFBybyAzLjAgZm9yIEJlQm94IHJlcXVpcmVkIHRvIGxpbmsgYmlnIHByb2dy YW1zLicKLQkkKE1BS0UpIHdlcm1pdCAiQ0M9bXdjYyIgIkNDMj1td2xkIiBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtREJFQk9YIC1EUE9TSVggLUROT0xFQVJOIC1ETk9V VUNQICQoS0ZMQUdTKSAtTyIKLQotI0JlT1MgNC41Ci0jV2UgaGF2ZSB0byB1c2UgdGhlIHdlcm1p dCB0YXJnZXQgYmVjYXVzZSAnZmRfc2V0JyBpcyB1bmtub3duLgotYmVvczQ1OgotCSQoTUFLRSkg d2VybWl0ICJDQz0kKENDKSIgIkNDMj0kKENDMikiIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g XAotCSJDRkxBR1M9IC1EQkVPUyAtREJFT1M0NSAtRFBPU0lYIC1ETk9JS1NEIC1ETk9SRUFMUEFU SCAtRFNZU1RJTUVIIFwKLQktRE5PQ09URk1DIC1ETk9VVUNQIC1ETk9MRUFSTiAkKEtGTEFHUykg LU8iIFwKLQkiTElCUyA9ICQoTElCUykiCi0KLSNCZU9TIDQuNQotYmVvczQ1bmV0OgotCSQoTUFL RSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSBiZW9zNDUgXAotCSJLRkxBR1M9LURUQ1BTT0NLRVQgLURO T19ETlNfU1JWICQoS0ZMQUdTKSIgIkxJQlM9LWxuZXQgLWxuZXRhcGkiCi0KLSNQbGFuIDkgZnJv bSBCZWxsIExhYnMKLXBsYW45OgotCUBlY2hvICdDLUtlcm1pdCBmb3IgUGxhbiA5IGZyb20gQmVs bCBMYWJzIC0gY2FsbGluZyBja3BrZXIubWsuLi4nCi0JbWFrZSAtZiBja3BrZXIubWsKLQotI1BP U0lYCi1wb3NpeDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBwdXJlIFBP U0lYLi4uJwotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJD RkxBR1M9IC1EUE9TSVggLUROT1VVQ1AgLUROT0xFQVJOICQoS0ZMQUdTKSAtTyIKLQotIyBQb3dl ck1BWCBPUyAoU1ZSNCkgZnJvbSBDb25jdXJyZW50ICh0ZXN0ZWQgb24gUG93ZXJNQVggNS4xKQot cG93ZXJtYXg6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQ29uY3VycmVu dCBQb3dlck1BWCBPUy4uLicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKLQkiQ0ZMQUdTID0gLU8gLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCAtRFBPV0VSTUFY IFwKLQktRE5FVFBUWSAtREhBVkVfU1RSRUFNUyAtREhBVkVfR1JBTlRQVCAtREhBVkVfUFRTTkFN RSAtRFBVU0hfUFRFTSBcCi0JLURQVVNIX0xEVEVSTSAtRFBVU0hfVFRDT01QQVQgXAotCS1EU1RF Uk1JT1ggLURUQ1BTT0NLRVQgLURDS19DVVJTRVMgJChLRkxBR1MpIiBcCi0JIkxJQlM9IC1sc29j a2V0IC1sbnNsIC1scmVzb2x2IC1sY3Vyc2VzIC1sZ2VuIC1sYyAtbHVjYmMiCi0KLSNCZXJrZWxl eSBTb2Z0d2FyZSBEZXNpZ24gSW5jLiBCU0RJCi0jIFN1YnN0aXR1dGUgIkxJQlM9IC1sbmV3Y3Vy c2VzIC1sdGVybWNhcCIgaWYgZGVzaXJlZC4KLWJzZGk6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgQlNESSAuLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURCU0Q0NCAtRFNFVFJFVUlEIC1EU1dfQUNDX0lEIC1E QklHQlVGT0sgLURGSVhDUlRTQ1RTIFwKLQktRFRDUFNPQ0tFVCAtRENLX0NVUlNFUyAtREZORkxP QVQgJChLRkxBR1MpIC1PIiBcCi0JIkxJQlM9IC1sY3Vyc2VzIC1sdGVybWNhcCAtbG0iCi0KLSNC ZXJrZWxleSBTb2Z0d2FyZSBEZXNpZ24gSW5jLiBCU0RJIC0gaGFzIGhpZ2hlciBzZXJpYWwgc3Bl ZWRzIHRoYW4gMS54LgotYnNkaTI6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBDQz0kKENDKSBD QzI9JChDQzIpIGJzZGkgXAotCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIktGTEFHUz0tREJT REkyICQoS0ZMQUdTKSIKLQotYnNkaTM6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBDQz0kKEND KSBDQzI9JChDQzIpIGJzZGkgXAotCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIktGTEFHUz0t REJTREkyIC1EQlNESTMgJChLRkxBR1MpIgotCi1ic2RpNDoKLQkkKE1BS0UpICJNQUtFPSQoTUFL RSkiIENDPSQoQ0MpIENDMj0kKENDMikgYnNkaSBcCi0JS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCi0JIktGTEFHUz0tREJTREkyIC1EQlNESTMgLURCU0RJNCAtRFRQVVRTRk5UWVBFPXZvaWQg LURUUFVUU0lTVk9JRCBcCi0JLURDS0hUVFAgLW00ODYgJChLRkxBR1MpIgotCi0jIChvbGQgbmFt ZSBmb3IgdGhlIGFib3ZlKQotYnNkaXBvc2l4OgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgQ0M9 JChDQykgQ0MyPSQoQ0MyKSBic2RpCi0KLQotI0J1aWxkIGEgQlNESSA0LnggYmluYXJ5IHRoYXQg YWxzbyBydW5zIHVuZGVyIEZyZWVCU0QgKFRlcnJ5IEtlbm5lZHkpLgotI0J1dCB3YXRjaCBvdXQg Zm9yIGRldGFpbHMgbGlrZSBzZXJpYWwtcG9ydCBsb2NraW5nLgotYnNkaXg6Ci0JJChNQUtFKSAi TUFLRT0kKE1BS0UpIiBDQz0kKENDKSBDQzI9JChDQzIpIGJzZGkgXAotCUtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAotCSJLRkxBR1M9LURCU0RJMiAtREJTREkzIC1EQlNESTQgLURUUFVUU0ZO VFlQRT12b2lkIC1EVFBVVFNJU1ZPSUQgXAotCS1tNDg2ICQoS0ZMQUdTKSIgIkxOS0ZMQUdTPS1z dGF0aWMgLVdsLC1tLGkzODZic2RpIC1XbCwtZSxfc3RhcnQiCi0KLSNQeXJhbWlkIDlYWFggKGUu Zy4gOTg0NSkgb3IgTUlTZXJ2ZXIgVCBzZXJpZXMsIE9TeCA0LjRiIHRocnUgNS4xCi1weXJhbWlk OgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgUHlyYW1pZCBEdWFsIFBvcnQg T1N4Ci0JdWNiICQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJD RkxBR1M9IC1EQlNENDMgLURUQ1BTT0NLRVQgLURQWVJBTUlEIC1PICQoS0ZMQUdTKSIgIkxOS0ZM QUdTID0gLXMiCi0KLSNQeXJhbWlkIER1YWwgUG9ydCBPU3ggdXNpbmcgSG9uZXlEYW5CZXIgVVVD UCwgY3Vyc2VzIGFuZCBUQ1AKLXB5cmFtaWQtaGRiOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgUHlyYW1pZCBEdWFsIFBvcnQgT1N4Ci0JdWNiICQoTUFLRSkgeGVybWl0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1EQlNENDMgLURUQ1BTT0NLRVQg LURIQkRVVUNQIC1EQ0tfQ1VSU0VTIC1PICQoS0ZMQUdTKSIgXAotCSJMTktGTEFHUyA9IC1zIiAi TElCUyA9IC1sY3Vyc2VzIC1sdGVybWNhcCIKLQotI1B5cmFtaWQgREMvT1N4IChVTklYIFN5c3Rl bSBWIFI0KS4KLSNIYXMgPHN5cy90ZXJtaW94Lmg+LCByZWd1bGFyIEJlcmtlbGV5IHNvY2tldHMg bGlicmFyeSwgaS5lLiBpbi5oIGFuZCBpbmV0LmgKLSNhcmUgbm90IG1pc3BsYWNlZCBpbiBzeXMg KHJhdGhlciB0aGFuIG5ldGluZXQgYW5kIGFycGEsIHJlc3BlY3RpdmVseSkuCi0jVXNlcyBBTlNJ IEMuCi0jTk9URTogUmVtb3ZlIC1PIGFuZCBPbGltaXQ6MjUwMCBmcm9tIENGTEFHUyBpZiBURUxO RVQgY29ubmVjdGlvbnMgZG8gbm90IHdvcmsuCi1weXJkY29zeDoKLQlAZWNobyAnTWFraW5nIEMt S2VybWl0ICQoQ0tWRVIpIGZvciBQeXJhbWlkIERDL09TeC4uLicKLQkkKE1BS0UpIHhlcm1pdCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLVhhIC1PIC1EU1ZSNCAtRERJ UkVOVCAtREhEQlVVQ1AgLURTRUxFQ1QgLUROT0dFVFVTRVJTSEVMTCBcCi0JLURDS19DVVJTRVMg LURTVEVSTUlPWCAtRFRDUFNPQ0tFVCAtRFBZUkFNSUQgLUsgT2xpbWl0OjMxMDAgXAotCS1ETk9f RE5TX1NSViAkKEtGTEFHUykiICJMSUJTPSAtbGN1cnNlcyAtbHNvY2tldCAtbG5zbCIgIkxOS0ZM QUdTID0gLXMiCi0KLSNJQk0ncyBBSVggMy4wIG9uIElCTSAzNzAgbWFpbmZyYW1lLCB0ZXN0ZWQg b24gQUlYIEY0NCB0aHJ1IEY1MC4KLWFpeDM3MDoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIElCTSBTeXN0ZW0vMzcwIEFJWCAzLjAuLi4KLQkkKE1BS0UpIHhlcm1pdCBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtREFJWDM3MCAtRFRDUFNPQ0tFVCAt RExDS0RJUiAtRERJUkVOVCAkKEtGTEFHUykiIFwKLQkiTElCUyA9IC1sYnNkIgotCi0jSUJNJ3Mg QUlYL0VTQSAyLjEgKE9TRi8xKSBvbiBJQk0gbWFpbmZyYW1lCi1haXhlc2E6Ci0JQGVjaG8gTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJQk0gQUlYL0VTQS4uLgotCSQoTUFLRSkgeGVybWl0 IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1EQUlYRVNBIC1EVENQU09D S0VUICQoS0ZMQUdTKSAtTyIKLQotI0lCTSBQUy8yIHdpdGggQUlYIDEuMCB0aHJ1IDEuMy4KLSMg IFJlcG9ydHMgaW5kaWNhdGUgdGhhdCAtTyBzd2l0Y2ggbXVzdCBiZSBvbWl0dGVkLgotIyAgSXQg aXMgYWxzbyBwb3NzaWJsZSB0aGF0ICJtYWtlIGJzZCIgd2lsbCB3b3JrIChyZXBvcnRzIHdlbGNv bWUpLgotIyAgT25lIHJlcG9ydCBzYWlkICJtYWtlIExJQlM9LWxic2QgYnNkIiBkaWQgdGhlIHRy aWNrLgotIyAgTk9UTE9HIGlzIHRvIGdldCBhcm91bmQgYSAndGxvZycgc3ltYm9sIGRlZmluZWQg aW4gb25lIG9mIHRoZSBoZWFkZXJzLgotcHMyYWl4OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQg JChDS1ZFUikgZm9yIElCTSBBSVggMS54IFBTLzIuLi4nCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1EQVRUU1YgLUROT1JFQUxQQVRIIC1E UFMyQUlYMTAgLURTSUdfViBcCi0JLUROT1VOSUNPREUgLUROT1RMT0cgLUROT0xFQVJOICQoS0ZM QUdTKSAtaSIgXAotCSJMTktGTEFHUyA9IC1pIgotCi1wczJhaXhuZXRjOgotCUBlY2hvICdNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIElCTSBBSVggMS54IFBTLzIuLi4nCi0JJChNQUtFKSB3 ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1EQVRUU1YgLURO T1JFQUxQQVRIIC1EUFMyQUlYMTAgLURUQ1BTT0NLRVQgLURDS19DVVJTRVMgXAotCS1EU0lHX1Yg LUROT1VOSUNPREUgLUROT1RMT0cgLUROT0xFQVJOICQoS0ZMQUdTKSAtaSIgXAotCSJMSUJTID0g LWxjdXJzZXMiICJMTktGTEFHUyA9IC1pIgotCi1wczJhaXgzOgotCSQoTUFLRSkgcHMyYWl4IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KLQotI0lCTSBSVCBQQyB3aXRoIEFJWCAyLjIuMSwgdmFs aWQgYXMgb2YgQy1LZXJtaXQgOC4wLgotI05PVExPRyBiZWNhdXNlIG9mIGEgY29uZmxpY3QgaW4g PHN5cy90ZXJtaW8uaD4uCi0jVGhpcyBvbmUgaGFzIHVuaXF1ZSBhbmQgc3RyYW5nZSBsb2NrZmls ZXMuCi0jICAtTyByZW1vdmVkIG9uIHB1cnBvc2UgKDguMCkuCi0jICBJbiBjYXNlIG9mICJjb21w aWxlciBlcnJvcjogc3ltYm9sIHRhYmxlIGZ1bGwiLCBpbmNyZWFzZSB0aGUgLU5uIG51bWJlci4K LSMgIEluIGNhc2Ugb2YgImNvbXBpbGVyIGVycm9yOiBDb25zdGFudCBwb29sIHRvbyBiaWciLCBi b29zdCB0aGUgLU5wIG51bWJlci4KLSMgIEFkZCAtRE5PUFVURU5WIGlmIHB1dGVudigpIGNhdXNl cyB0cm91YmxlLgotIyAgUHV0IC1ETk9JS1NEIGJhY2sgaWYgSUtTRC1yZWxhdGVkIHByb2JsZW1z IG9jY3VyLgotcnRhaXg6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSUJN IFJUIFBDLCBBSVggMi4yLjEuLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VU LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLURBVFRTViAtRFJUQUlYIC1ESERCVVVDUCAtRERJUkVOVCAt RE5PVExPRyAtRFRDUFNPQ0tFVCBcCi0JLUROT0dFVFVTRVJTSEVMTCAtRENMU09QTiAtRE5PUkVB TFBBVEggLUROT1VOSUNPREUgLURCU0RfSU5DTFVERVMgXAotCS1EVVNFX0xTVEFUIC1ERk5GTE9B VCAtTm4yNTAwIC1OcDEwMDAgLVdxLC1TSjIgLWEgLXcgJChLRkxBR1MpIiBcCi0JIkxJQlMgPSAt bG0gJChMSUJTKSIgIkxOS0ZMQUdTID0gLXMiCi0KLSMjIyMgSUJNIFJUIFBDIC0gdGhlc2UgdGFy Z2V0cyB3ZXJlIGxhc3QgdmVyaWZpZWQgaW4gQy1LZXJtaXQgOC4wLjIxMS4KLQotI0lCTSBSVCBQ QyB3aXRoIEFJWCAyLjIuMSArIGN1cnNlcwotcnRhaXhjOgotCSQoTUFLRSkgcnRhaXggQ0M9JChD QykgQ0MyPSQoQ0MyKSAiS0ZMQUdTPS1EQ0tfQ1VSU0VTIiAiTElCUz0tbGN1cnNlcyIKLQotI0lC TSBSVCBQQyB3aXRoIEFJWCAoQUNJUykgMi4yLjEgKEJTRCA0LjMpCi0jIEFkZCAtTywgLUREWU5B TUlDLCAtcywgZXRjLCBpZiB0aGV5IHdvcmsuCi1ydGFjaXM6Ci0JQGVjaG8gTWFraW5nIEMtS2Vy bWl0ICQoQ0tWRVIpIGZvciBSVCBQQyB3aXRoIEFDSVMgMi4yLjEgPSBCU0QgNC4zLi4uCi0JJChN QUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VULSQoQCl9IFwKLQkiQ0ZMQUdTPSAtREJTRDQg LURUQ1BTT0NLRVQgLUROT1JFQUxQQVRIIC1ETk9JS1NEIC1ETk9QVVRFTlYgXAotCSQoS0ZMQUdT KSAtVV9fU1REQ19fIiAiTE5LRkxBR1MgPSAtcyIKLQotIyMjIyBJQk0gQUlYLiAgVGhlIGZpcnN0 IHR3byB0YXJnZXRzIHNob3VsZCB3b3JrIGZvciBhbnkgdmVyc2lvbiBvZiBBSVgKLSMjIyMgZnJv bSA0LjIgb253YXJkcy4gIFRoZSBvbmVzIGFmdGVyIHRoYXQgYXJlIGZvciBvbGRlciB2ZXJzaW9u cyBvcgotIyMjIyBzcGVjaWZpYyBjb25maWd1cmF0aW9ucywgYW5kL29yIHdpdGggZ2NjLgotCi0j IFRoaXMgb25lIHNob3VsZCB3b3JrIGZvciBhbnkgQUlYIDQuMiBvciBsYXRlcjogIm1ha2UgYWl4 Ii4KLSMgT3RoZXIgdGFncyBhcmUgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgbWFrZWZpbGUg dGFyZ2V0cy4KLSNPSzogMjAxMS8wNi8xMQotYWl4IGFpeDQyIGFpeDQzIGFpeDQ0IGFpeDQ1IGFp eDUwIGFpeDUxIGFpeDUyIGFpeDUzIGFpeDU0IGFpeDYxOgotCUBlY2hvIE1ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgSUJNIEFJWC4uLgotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1EQUlYUlMgLURBSVg0MSAtREFJWDQyIC1EU1ZSNCAt RFNURVJNSU9YIC1EVENQU09DS0VUIFwKLQktRERJUkVOVCAtRENLX0FOU0lDIC1EQ0xTT1BOIC1E Q0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtREZORkxPQVQgXAotCS1EU0VMRUNUIC1EU0VMRUNUX0gg LUROT0dFVFVTRVJTSEVMTCAtcW1heG1lbT0xNjAwMCAtTyBcCi0JLURDS0NQVT1cXFwiYHVuYW1l IC1wYFxcXCIgXAotCS1ESEVSQUxEPVwiXFxcIiBJQk0gQUlYIGB1bmFtZSAtdmAuYHVuYW1lIC1y YFxcXCJcIiBcCi0JLURfTEFSR0VfRklMRVMgJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAtcyIgIkxJ QlM9LWxjdXJzZXMgLWxtIgotCi0jIFNhbWUgYnV0IHVzaW5nIGdjYyBpbnN0ZWFkIG9mIGNjCi0j IFRoaXMgd29ya3MgYnV0IHdlIGdldCAiZ2NjOiB1bnJlY29nbml6ZWQgb3B0aW9uICctcW1heG1l bS0uLiciIGVhY2ggbW9kdWxlLgotYWl4ZzoKLQlAZWNobyAiVXNpbmcgZ2NjLi4uIgotCSQoTUFL RSkgYWl4IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCUNDPWdjYyBDQzI9Z2NjICJLRkxB R1M9LXBpcGUgLWZ1bnNpZ25lZC1jaGFyIgotCi0jIEFJWCA0LjIgb3IgbGF0ZXIgd2l0aCBPcGVu U1NMIDAuOS43IG9yIGxhdGVyOiAibWFrZSBhaXgrc3NsIgotIyBGb3IgZWFybGllciBPcGVuU1NM IHJlbW92ZSAtRE9QRU5TU0xfMDk3IG9yIGFkZCAiS0ZMQUdTPS1VT1BFTlNTTF8wOTciLgotIyBT eW5vbnltIHRhcmdldCBuYW1lcyBhZGRlZCB0byBjb3ZlciBvbGQgcmVkdW5kYW50IHRhcmdldHMg dGhhdCB3ZXJlIHJlbW92ZWQuCi0jIElmIFNTTCBpcyBub3QgaW5zdGFsbGVkIGluIHRoZSAvdXNy L2xvY2FsIHRyZWUgKHNlZSBTU0xJTkMgYW5kIFNTTExJQgotIyBkZWZpbml0aW9ucyBuZWFyIHRo ZSB0b3ApLCB5b3UgY2FuIHNwZWNpZnkgdGhlIGxvY2F0aW9ucyBpbiB5b3VyIG1ha2UKLSMgY29t bWFuZCBhcyBpbiB0aGlzIGV4YW1wbGU6Ci0jCi0jICBTU0xJTkM9LUkvb3B0L3NzbC9pbmNsdWRl IFNTTExJQj0tTC9vcHQvc3NsL2xpYiBtYWtlIC1lIGFpeCtzc2wKLSMKLSMgVG8gYnVpbGQgd2l0 aCBnY2MgdXNlICJtYWtlIGFpeCBDQz1nY2MgQ0MyPWdjYyIsIG9yICJtYWtlIGFpeGciCi0jCi0j T0s6IDIwMTEvMDYvMTUKLWFpeCtzc2wgYWl4NTErb3BlbnNzbCBhaXg1MitvcGVuc3NsIGFpeDUz K29wZW5zc2w6Ci0JQGVjaG8gIk1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSUJNIEFJWCB3 aXRoIE9wZW5TU0wuLi4iCi0JQGVjaG8gIlNTTElOQz0kKFNTTElOQykgU1NMTElCPSQoU1NMTElC KSIKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQlDQz0kKEND KSBDQzI9JChDQzIpIFwKLQkiQ0ZMQUdTPS1EQUlYUlMgLURBSVg0MSAtREFJWDQyIC1EU1ZSNCAt RFNURVJNSU9YIC1EVENQU09DS0VUIFwKLQktRERJUkVOVCAtRENLX0FOU0lDIC1EQ0xTT1BOIC1E Q0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtREZORkxPQVQgXAotCS1EX0xBUkdFX0ZJTEVTIC1EU0VM RUNUIC1EU0VMRUNUX0ggLUROT0dFVFVTRVJTSEVMTCBcCi0JLURDS0NQVT1cXFwiYHVuYW1lIC1w YFxcXCIgXAotCS1ESEVSQUxEPVwiXFxcIiBJQk0gQUlYIGB1bmFtZSAtdmAuYHVuYW1lIC1yYFxc XCJcIiBcCi0JLURDS19BVVRIRU5USUNBVElPTiAtRENLX1NTTCAtRE9QRU5TU0xfMDk3ICQoU1NM SU5DKSAkKEtGTEFHUykiIFwKLQkiTE5LRkxBR1M9LXMiICJMSUJTPSQoU1NMTElCKSAtbHNzbCAt bGNyeXB0byAtbGN1cnNlcyAtbG0gLWxjcnlwdCIKLQotIyBBSVggNS4zIG9yIDYuMSBvciBsYXRl ciB3aXRoIElCTSBPcGVuU1NMLCB3aGljaCBpcyBhbHdheXMgaW4gdGhlIGRpcmVjdG9yaWVzCi0j IHNob3duIGJlbG93IHNvIHlvdSBkb24ndCBoYXZlIHRvIHNldCBTU0xJTkMgYW5kIFNTTExJQi4g IElmIGZvciBzb21lIHJlYXNvbgotIyB0aGUgU1NMIGluY2x1ZGUgZmlsZXMgYW5kIGxpYnJhcmll cyBhcmUgbm90IGluIHRoZSBwbGFjZXMgYXNzdW1lZCwgdGhlbiB1c2UKLSMgIm1ha2UgYWl4K3Nz bCIgKGp1c3QgYWJvdmUpIGFuZCBzZXQgU1NMSU5DIGFuZCBTU0xMSUIgdG8gaW5kaWNhdGUgd2hl cmUgdGhlCi0jIFNTTCBmaWxlcyBhcmUuICBUbyBidWlsZCB3aXRoIGdjYyB1c2UgIm1ha2UgYWl4 K2libXNzbCBDQz1nY2MgQ0MyPWdjYyIuCi1haXgraWJtc3NsOgotCUBlY2hvICJNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIElCTSBBSVggNi4xIHdpdGggT3BlblNTTC4uLiIKLQlAZWNobyAi SWYgdGhpcyBmYWlscyB1c2UgJ21ha2UgYWl4K3NzJyBhbmQgc3BlY2lmeSBTU0xJTkMgYW5kIFNT TExJQiIKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQlDQz0k KENDKSBDQzI9JChDQzIpIFwKLQkiQ0ZMQUdTPS1EQUlYUlMgLURBSVg0MSAtREFJWDQyIC1EU1ZS NCAtRFNURVJNSU9YIC1EVENQU09DS0VUIFwKLQktRERJUkVOVCAtRENLX0FOU0lDIC1EQ0xTT1BO IC1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtREZORkxPQVQgXAotCS1EX0xBUkdFX0ZJTEVTIC1E U0VMRUNUIC1EU0VMRUNUX0ggLUROT0dFVFVTRVJTSEVMTCBcCi0JLURDS0NQVT1cXFwiYHVuYW1l IC1wYFxcXCIgXAotCS1ESEVSQUxEPVwiXFxcIiBJQk0gQUlYIGB1bmFtZSAtdmAuYHVuYW1lIC1y YFxcXCJcIiBcCi0JLURDS19BVVRIRU5USUNBVElPTiAtRENLX1NTTCAtRE9QRU5TU0xfMDk4IFwK LQktSS91c3IvaW5jbHVkZS9vcGVuc3NsICQoS0ZMQUdTKSIgXAotCSJMTktGTEFHUz0tcyIgXAot CSJMSUJTPS1ML3Vzci9saWIvb3BlbnNzbCAtbHNzbCAtbGNyeXB0byAtbGN1cnNlcyAtbG0gLWxj cnlwdCIKLQotIyBPbGQgQUlYIHZlcnNpb25zLi4uCi0KLSNJQk0gQUlYIDMuMCwgMy4xLCBvciAz LjIgZm9yIFJJU0MgU3lzdGVtLzYwMDAuCi1yczYwMDA6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBJQk0gQUlYIDMuMCBvciAzLjEsIFJTLzYwMDAuLi4KLQkkKE1BS0UpIHhl cm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtREFJWFJTIC1EVENQ U09DS0VUIC1EU1ZSMyAtRERJUkVOVCAtRENLX0FOU0lDIFwKLQktRENLX1BPTEwgLURDTFNPUE4g LURTRUxFQ1RfSCAtRE5PVFRZTE9DSyAtTyAkKEtGTEFHUykiIFwKLQkiTE5LRkxBR1MgPSAtcyIK LQotI0lCTSBBSVggMy4wLCAzLjEsIG9yIDMuMiBmb3IgUklTQyBTeXN0ZW0vNjAwMCwgd2l0aCBj dXJzZXMuCi1yczYwMDBjOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSUJN IEFJWCAzLjAgb3IgMy4xLCBSUy82MDAwLi4uCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURBSVhSUyAtRFRDUFNPQ0tFVCAtRFNWUjMgLURE SVJFTlQgLURDS19BTlNJQyBcCi0JLURDS19QT0xMIC1EQ0xTT1BOIC1EQ0tfQ1VSU0VTIC1EU0VM RUNUX0ggLUROT1RUWUxPQ0sgLUROT1JFQUxQQVRIIFwKLQktTyAkKEtGTEFHUykiICJMSUJTPSAt bGN1cnNlcyAtbHRlcm1jYXAiICJMTktGTEFHUyA9IC1zIgotCi1haXgzMDoKLQkkKE1BS0UpIHJz NjAwMCBDQz0kKENDKSBDQzI9JChDQzIpIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KLQotYWl4 MzE6Ci0JJChNQUtFKSByczYwMDAgQ0M9JChDQykgQ0MyPSQoQ0MyKSBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9Ci0KLSNJQk0gQUlYIDMuMiBmb3IgUklTQyBTeXN0ZW0vNjAwMC4KLSNJbiBjYXNl IG9mICJzdWJwcm9ncmFtIHRvbyBjb21wbGV4IiB3YXJuaW5ncywgYWRkICItcW1heG1lbT0xNjAw MCIgdG8gQ0ZMQUdTLgotcnM2YWl4MzI6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIp IGZvciBJQk0gQUlYIDMuMiwgUlMvNjAwMC4uLgotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1EQUlYUlMgLURUQ1BTT0NLRVQgLURTVlI0IC1E RElSRU5UIC1EQ0tfQU5TSUMgLUROT1JFQUxQQVRIIFwKLQktRFNFTEVDVF9IIC1EQ0xTT1BOIC1E Tk9UVFlMT0NLIC1PICQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gLXMiCi0KLSNJQk0gQUlYIDMuMiBm b3IgUklTQyBTeXN0ZW0vNjAwMC4KLXJzNmFpeDMyYzoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQg JChDS1ZFUikgZm9yIElCTSBBSVggMy4yLCBSUy82MDAwLCBUQ1ArY3Vyc2VzLi4uCi0JQGVjaG8g SW4gY2FzZSBvZiBTdWJwcm9ncmFtIFRvbyBDb21wbGV4IHdhcm5pbmdzLAotCUBlY2hvIGFkZCAt cW1heG1lbT0xNjAwMCB0byBDRkxBR1MuCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURBSVhSUyAtRFRDUFNPQ0tFVCAtRFNWUjQgLURESVJF TlQgLURDS19BTlNJQyAtRE5PUkVBTFBBVEggXAotCS1EQ0xTT1BOIC1EQ0tfQ1VSU0VTIC1EU0VM RUNUX0ggLUROT1RUWUxPQ0sgLU8gJChLRkxBR1MpIiBcCi0JIkxOS0ZMQUdTID0gLXMiICJMSUJT PS1sY3Vyc2VzIgotCi1haXgzMjoKLQkkKE1BS0UpIHJzNmFpeDMyYyBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9Ci0KLSNJQk0gQUlYIDQuMSwgNC4xLnggb24gUklTQyBTeXN0ZW0vNjAwMCBvciBQ b3dlciBTZXJpZXMuCi0jR2VuZXJhdGVzIGNvbW1vbiBiaW5hcnkgZm9yIGFsbCBwbGF0Zm9ybXMg aWYgdXNpbmcgeGxjIChJQk0gQyBjb21waWxlcikuCi0jV2hlbiB1c2luZyBnY2MsIGFkZCAtbWNw dT1jb21tb24gdG8gZ2VuZXJhdGUgY29tbW9uIGJpbmFyeS4KLSNOb3RlIHRoYXQgdGhpcyBvbmUg bmVlZHMgQ0tfTkVXVEVSTS4KLSMgQWRkIC1iYmlndG9jIGluIGNhc2UgbGQgZmFpbHMgd2l0aCBU T0Mgb3ZlcmZsb3cuCi1haXg0MToKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9y IElCTSBBSVggNC4xLjEgUlMvNjAwMCBvciBQb3dlclBDLi4uCi0JJChNQUtFKSB4ZXJtaXQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURBSVhSUyAtREFJWDQxIC1EU1ZS NCAtRFNURVJNSU9YIC1EVENQU09DS0VUIC1ERElSRU5UIFwKLQktRENLX0FOU0lDIC1EQ0xTT1BO IC1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtRFNFTEVDVCAtRFNFTEVDVF9IIFwKLQktRE5PR0VU VVNFUlNIRUxMIC1xbWF4bWVtPTE2MDAwIC1PICQoS0ZMQUdTKSIgXAotCSJMTktGTEFHUyA9IC1z IiAiTElCUz0tbGN1cnNlcyIKLQotI0RpdHRvIGJ1dCB3aXRoIGdjYy4KLSNSZW1vdmUgIkNDPWdj YyBDQzI9Z2NjIiBpZiB5b3UgaGF2ZSBnY2MgaW5zdGFsbGVkIGFzIGNjLgotYWl4NDFnOgotCUBl Y2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSUJNIEFJWCA0LjEuMSBSUy82MDAwIG9y IFBvd2VyUEMuLi4KLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJD Qz1nY2MiICJDQzI9Z2NjIiBcCi0JIkNGTEFHUz0gLURBSVhSUyAtREFJWDQxIC1EU1ZSNCAtRFNU RVJNSU9YIC1EVENQU09DS0VUIC1ERElSRU5UIFwKLQktRENLX0FOU0lDIC1EQ0xTT1BOIC1EQ0tf Q1VSU0VTIC1EQ0tfTkVXVEVSTSAtRFNFTEVDVCAtRFNFTEVDVF9IIFwKLQktRE5PR0VUVVNFUlNI RUxMIC1PICQoS0ZMQUdTKSIgXAotCSJMTktGTEFHUyA9IC1zIC1YbGlua2VyIC1iYmlndG9jIiAi TElCUz0tbGN1cnNlcyIKLQotIyBBZGQgLWJiaWd0b2MgaW4gY2FzZSBsZCBmYWlscyB3aXRoIFRP QyBvdmVyZmxvdy4KLWFpeDQxK2tyYjUra3JiNDoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIElCTSBBSVggNC4xLjEgUlMvNjAwMCBvciBQb3dlclBDLi4uCi0JJChNQUtFKSB4 ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURBSVhSUyAtREFJ WDQxIC1EU1ZSNCAtRFNURVJNSU9YIC1EVENQU09DS0VUIC1ERElSRU5UIFwKLQktRENLX0FOU0lD IC1EQ0xTT1BOIC1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtRFNFTEVDVCAtRFNFTEVDVF9IIFwK LQktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfS0VSQkVST1MgLURLUkI1IC1ES1JCNCAtREtSQjUy NCBcCi0JLURDS19FTkNSWVBUSU9OIC1EQ0tfREVTICQoSzVJTkMpICQoSzVJTkMpL2tyYjUgIFwK LQktRE5PR0VUVVNFUlNIRUxMIC1xbWF4bWVtPTE2MDAwIC1PICQoS0ZMQUdTKSIgXAotCSJMTktG TEFHUyA9IC1zIiBcCi0JIkxJQlMgPSAkKEs1TElCKSAtbGN1cnNlcyAtbGtyYjQgLWxkZXM0MjUg LWxrcmI1IFwKLQktbGNvbV9lcnIgLWxrNWNyeXB0byAtbGdzc2FwaV9rcmI1IgotCi0jT2xkIG5h bWUgZm9yICJhaXg0MSIuCi1yczZhaXg0MWM6Ci0JJChNQUtFKSBhaXg0MSBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9Ci0KLSNJQk0gQUlYIDQuMSwgNC4xLngsIG9yIDQuMiBvbiBSSVNDIFN5c3Rl bS82MDAwIG9yIFBvd2VyIFNlcmllcywKLSMgd2l0aCBYLjI1IHN1cHBvcnQKLSNHZW5lcmF0ZXMg Y29tbW9uIGJpbmFyeSBmb3IgYWxsIHBsYXRmb3JtcyBpZiB1c2luZyB4bGMgKElCTSBDIGNvbXBp bGVyKS4KLSNXaGVuIHVzaW5nIGdjYywgYWRkIC1tY3B1PWNvbW1vbiB0byBnZW5lcmF0ZSBjb21t b24gYmluYXJ5LgotIyBBZGQgLWJiaWd0b2MgaW4gY2FzZSBsZCBmYWlscyB3aXRoIFRPQyBvdmVy Zmxvdy4KLWFpeDQxeDI1OgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSUJN IEFJWCA0LjEuMSBSUy82MDAwIG9yIFBvd2VyUEMuLi4KLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtREFJWFJTIC1EQUlYNDEgLURTVlI0IC1E U1RFUk1JT1ggLURUQ1BTT0NLRVQgLURESVJFTlQgXAotCS1EQ0tfQU5TSUMgLURDTFNPUE4gLURD S19DVVJTRVMgLURDS19ORVdURVJNIC1EU0VMRUNUIC1EU0VMRUNUX0ggXAotCS1ESUJNWDI1IC1E REVCVUcgLUROT0dFVFVTRVJTSEVMTCAtcW1heG1lbT0xNjAwMCAtZyAkKEtGTEFHUykiIFwKLQki TE5LRkxBR1MgPSAtZyAtYkk6L2xpYi9wc2UuZXhwIiAiTElCUz0tbGN1cnNlcyAtbG9kbSAtbGNm ZyIKLQktQGVjaG8gIhtdMDtrZXJtaXQgZG9uZQdcYyIKLQotI0FzIGFib3ZlIGJ1dCB3aXRob3V0 IC1nIGluIExOS0ZMQUdTLgotIyBBZGQgLWJiaWd0b2MgaW4gY2FzZSBsZCBmYWlscyB3aXRoIFRP QyBvdmVyZmxvdy4KLWFpeDQxeDI1bzoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIElCTSBBSVggNC4xLjEgUlMvNjAwMCBvciBQb3dlclBDLi4uCi0JJChNQUtFKSB4ZXJtaXQg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURBSVhSUyAtREFJWDQxIC1E U1ZSNCAtRFNURVJNSU9YIC1EVENQU09DS0VUIC1ERElSRU5UIFwKLQktRENLX0FOU0lDIC1EQ0xT T1BOIC1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtRFNFTEVDVCAtRFNFTEVDVF9IIFwKLQktRElC TVgyNSAtRE5PREVCVUcgLUROT0dFVFVTRVJTSEVMTCAtcW1heG1lbT0xNjAwMCAkKEtGTEFHUyki IFwKLQkiTE5LRkxBR1MgPSAtYkk6L2xpYi9wc2UuZXhwIiAiTElCUz0tbGN1cnNlcyAtbG9kbSAt bGNmZyIKLQktQGVjaG8gIhtdMDtrZXJtaXQgZG9uZQdcYyIKLQotI0FJWCA0LjIgLS0gVXNlIHRo aXMgdGFyZ2V0IGlmIHRoZSByZWd1bGFyICJtYWtlIGFpeCIgZG9lc24ndCB3b3JrLgotIyBNdXN0 IGhhdmUgQ0tfTkVXVEVSTSBvciBlY2hvaW5nIGlzIGxvc3QgYWZ0ZXIgY3Vyc2VzLgotIyBBZGQg LWJiaWd0b2MgaW4gY2FzZSBsZCBmYWlscyB3aXRoIFRPQyBvdmVyZmxvdy4gIEFzIG9mIEMtS2Vy bWl0IDguMC4yMTIsCi0jIGFsbCBBSVggYnVpbGRzIDQuMiBhbmQgbGF0ZXIgaW5jbHVkZSBsYXJn ZSBmaWxlIHN1cHBvcnQuCi1vbGRhaXg0MjoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZF UikgZm9yIElCTSBBSVggNC4yIG9yIGhpZ2hlci4uLgotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1EQUlYUlMgLURBSVg0MSAtREFJWDQyIC1E U1ZSNCAtRFNURVJNSU9YIC1EVENQU09DS0VUIFwKLQktRERJUkVOVCAtRENLX0FOU0lDIC1EQ0xT T1BOIC1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtREZORkxPQVQgXAotCS1EU0VMRUNUIC1EU0VM RUNUX0ggLUROT0dFVFVTRVJTSEVMTCAtcW1heG1lbT0xNjAwMCAtTyBcCi0JLURDS0NQVT1cXFwi YHVuYW1lIC1wYFxcXCIgXAotCS1ESEVSQUxEPVxcXCJcIElCTVwgQUlYXCBgdW5hbWUgLXZgLmB1 bmFtZSAtcmBcXFwiIFwKLQktRF9MQVJHRV9GSUxFUyAkKEtGTEFHUykiICJMTktGTEFHUyA9IC1z IiAiTElCUz0tbGN1cnNlcyAtbG0iCi0KLSNBSVggNC4zIC0gVXNlIHRoaXMgdGFyZ2V0IGlmIHRo ZSByZWd1bGFyICJtYWtlIGFpeCIgZG9lc24ndCB3b3JrLgotIyBNdXN0IE5PVCBoYXZlIENLX05F V1RFUk0gb3IgZWxzZSBDLUtlcm1pdCBoYW5ncyBhZnRlciBjdXJzZXMuCi0jIC1iYmlndG9jIG5l ZWRlZCBvbiBzb21lIHN5c3RlbXMgYnV0IG5vdCBvdGhlcnMgdG8gYXZvaWQgVE9DIG92ZXJmbG93 LgotIyAibWFuIGxkIiBzYXlzIC1iYmlndG9jIG1ha2VzIHByb2dyYW0gcnVuIHNsb3dlci4KLW9s ZGFpeDQzOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSUJNIEFJWCA0LjMg b3IgaGlnaGVyLi4uCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBc Ci0JIkNGTEFHUz0gLURBSVhSUyAtREFJWDQxIC1EQUlYNDMgLURTVlI0IC1EU1RFUk1JT1ggLURU Q1BTT0NLRVQgXAotCS1ERElSRU5UIC1EQ0tfQU5TSUMgLURDTFNPUE4gLURDS19DVVJTRVMgLURT RUxFQ1QgLURTRUxFQ1RfSCBcCi0JLURGTkZMT0FUIC1ETk9HRVRVU0VSU0hFTEwgLXFtYXhtZW09 MTYwMDAgLWJiaWd0b2MgLU8gJChLRkxBR1MpIiBcCi0JIkxOS0ZMQUdTID0gLXMiICJMSUJTPS1s Y3Vyc2VzIC1sbSIKLQotI0FJWCA0LjMgd2l0aCBJQk0gWC4yNS4KLWFpeDQzeDI1OgotCUBlY2hv ICJNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIElCTSBBSVggNC4zIHdpdGggWC4yNS4uLiIK LQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAt REFJWFJTIC1EQUlYNDEgLURBSVg0MyAtRFNWUjQgLURTVEVSTUlPWCAtRFRDUFNPQ0tFVCBcCi0J LURESVJFTlQgLURDS19BTlNJQyAtRENMU09QTiAtRENLX0NVUlNFUyAtRFNFTEVDVCAtRFNFTEVD VF9IIFwKLQktREZORkxPQVQgLUROT0dFVFVTRVJTSEVMTCAtRElCTVgyNSBcCi0JLXFtYXhtZW09 MTYwMDAgLWJiaWd0b2MgLU8gJChLRkxBR1MpIiBcCi0JIkxOS0ZMQUdTID0gLWJJOi9saWIvcHNl LmV4cCIgIkxJQlM9LWxjdXJzZXMgLWxvZG0gLWxjZmcgLWxtIgotCi0jQUlYIDQuMyAtLSBNdXN0 IE5PVCBoYXZlIENLX05FV1RFUk0gb3IgZWxzZSBDLUtlcm1pdCBoYW5ncyBhZnRlciBjdXJzZXMu Ci0jIC1tbWluaW1hbC10b2MgbmVlZGVkIG9uIHNvbWUgc3lzdGVtcyBidXQgbm90IG90aGVycyB0 byBhdm9pZCBUT0Mgb3ZlcmZsb3cuCi0jICJtYW4gbGQiIHNheXMgLWJiaWd0b2MgbWFrZXMgcHJv Z3JhbSBydW4gc2xvd2VyLgotYWl4NDNnOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVS KSBmb3IgSUJNIEFJWCA0LjMgZ2NjLi4uCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBDQz1nY2MgQ0MyPWdjYyBcCi0JIkNGTEFHUz0gLW1taW5pbWFsLXRvYyAtZyAt TyAtREFJWFJTIC1EQUlYNDEgLURBSVg0MyAtRFNWUjQgXAotCS1ERElSRU5UIC1EQ0tfQU5TSUMg LURDTFNPUE4gLURDS19DVVJTRVMgLURTRUxFQ1QgLURTRUxFQ1RfSCBcCi0JLURTVEVSTUlPWCAt RFRDUFNPQ0tFVCAtREZORkxPQVQgLUROT0dFVFVTRVJTSEVMTCAkKEtGTEFHUykiIFwKLQkiTElC Uz0tbGN1cnNlcyAtbG0iCi0KLWFpeDQzZ2NjOgotCSQoTUFLRSkgYWl4NDNnCi0KLSMgTm9uZSBv ZiB0aGUgZm9sbG93aW5nIGFpeDQzZ2NjIGF0dGVtcHRzIHdvcmsgb24gYSBnY2Mtb25seSBBSVgg NC4zLjMgYm94LgotIyBJdCBqdXN0IHBsYWluIGNhbid0IGZpbmQgdGhlIG1hdGggcm91dGluZXMg KGZtb2QsIHBvdywgZXhwLCBzcXJ0LCBsb2cxMCwuLi4pCi0jIFdoaWNoIGlzIG9kZCBiZWNhdXNl IG5tIC91c3IvbGliL2xpYkMuYSBmaW5kcyB0aGVtLi4uCi0KLSNpbiBjYXNlIGFpeDQzZ2NjIGNh bid0IGZpbmQgaXRzIG1hdGggbGlicmFyeS4uLgotYWl4NDNnY2N4OgotCUBlY2hvIE1ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgSUJNIEFJWCA0LjMgZ2NjLi4uCi0JJChNQUtFKSB4ZXJtaXQg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBDQz1nY2MgQ0MyPWdjYyBcCi0JIkNGTEFHUz0gLW1t aW5pbWFsLXRvYyAtZyAtTyAtREFJWFJTIC1EQUlYNDEgLURBSVg0MyAtRFNWUjQgXAotCS1ERElS RU5UIC1EQ0tfQU5TSUMgLURDTFNPUE4gLURDS19DVVJTRVMgLURTRUxFQ1QgLURTRUxFQ1RfSCBc Ci0JLURTVEVSTUlPWCAtRFRDUFNPQ0tFVCAtREZORkxPQVQgLUROT0dFVFVTRVJTSEVMTCAkKEtG TEFHUykiIFwKLQkiTElCUz0gLUwvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFp eDQuMy4xLjAvMi45NS4yIFwKLQktbGN1cnNlcyAtYmxvYWRtYXAgLWJub3F1aWV0IgotCi0jaW4g Y2FzZSBhaXg0M2djY3ggY2FuJ3QgZmluZCBpdHMgbWF0aCBsaWJyYXJ5Li4uCi1haXg0M2djY3k6 Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJQk0gQUlYIDQuMyBnY2MuLi4K LQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IENDPWdjYyBDQzI9Z2Nj IFwKLQkiQ0ZMQUdTPSAtbW1pbmltYWwtdG9jIC1nIC1PIC1EQUlYUlMgLURBSVg0MSAtREFJWDQz IC1EU1ZSNCBcCi0JLURESVJFTlQgLURDS19BTlNJQyAtRENMU09QTiAtRENLX0NVUlNFUyAtRFNF TEVDVCAtRFNFTEVDVF9IIFwKLQktRFNURVJNSU9YIC1EVENQU09DS0VUIC1ERk5GTE9BVCAtRE5P R0VUVVNFUlNIRUxMICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAtbGN1cnNlcyAtYmxvYWRtYXAgLWJu b3F1aWV0IgotCi0jaW4gY2FzZSBhaXg0M2djY3ggY2FuJ3QgZmluZCBpdHMgbWF0aCBsaWJyYXJ5 Li4uCi1haXg0M2djY3o6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJQk0g QUlYIDQuMyBnY2MuLi4KLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 IENDPWdjYyBDQzI9Z2NjIFwKLQkiQ0ZMQUdTPSAtbW1pbmltYWwtdG9jIC1nIC1PIC1EQUlYUlMg LURBSVg0MSAtREFJWDQzIC1EU1ZSNCBcCi0JLURESVJFTlQgLURDS19BTlNJQyAtRENMU09QTiAt RENLX0NVUlNFUyAtRFNFTEVDVCAtRFNFTEVDVF9IIFwKLQktRFNURVJNSU9YIC1EVENQU09DS0VU IC1ERk5GTE9BVCAtRE5PR0VUVVNFUlNIRUxMICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAtTC4gLWxj dXJzZXMgLWJsb2FkbWFwIC1ibm9xdWlldCIKLQotI0FJWCA0LjMgd2l0aCBNSVQgS2VyYmVyb3Mg NSBhbmQgS2VyYmVyb3MgNCBjb21wYXRpYmlsaXR5IG1vZGUKLSMgTXVzdCBOT1QgaGF2ZSBDS19O RVdURVJNIG9yIGVsc2UgQy1LZXJtaXQgaGFuZ3MgYWZ0ZXIgY3Vyc2VzLgotIyAtbW1pbmltYWwt dG9jIG5lZWRlZCBvbiBzb21lIHN5c3RlbXMgYnV0IG5vdCBvdGhlcnMgdG8gYXZvaWQgVE9DIG92 ZXJmbG93LgotIyAibWFuIGxkIiBzYXlzIC1iYmlndG9jIG1ha2VzIHByb2dyYW0gcnVuIHNsb3dl ci4KLWFpeDQzZ2NjK2tyYjUra3JiNDoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIElCTSBBSVggNC4zIG9yIGhpZ2hlciB3L0tlcmJlcm9zLi4uCi0JJChNQUtFKSB4ZXJtaXQg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBDQz1nY2MgQ0MyPWdjYyBcCi0JIkNGTEFHUz0gLW1t aW5pbWFsLXRvYyAtZyAtTyAtREFJWFJTIC1EQUlYNDEgLURBSVg0MyAtRFNWUjQgXAotCS1ERElS RU5UIC1EQ0tfQU5TSUMgLURDTFNPUE4gLURDS19DVVJTRVMgLURTRUxFQ1QgLURTRUxFQ1RfSCBc Ci0JLURTVEVSTUlPWCAtRFRDUFNPQ0tFVCAtREZORkxPQVQgLUROT0dFVFVTRVJTSEVMTCBcCi0J LURDS19BVVRIRU5USUNBVElPTiAtRENLX0tFUkJFUk9TIC1ES1JCNSAtREtSQjQgLURLUkI1MjQg XAotCS1EQ0tfRU5DUllQVElPTiAtRENLX0RFUyAtZnVuc2lnbmVkLWNoYXIgJChLNUlOQykgJChL NUlOQykva3JiNSBcCi0JJChLRkxBR1MpIiBcCi0JIkxJQlM9JChLNUxJQikgLWxjdXJzZXMgLWxt IC1sa3JiNCAtbGRlczQyNSAtbGtyYjUgXAotCS1sY29tX2VyciAtbGs1Y3J5cHRvIC1sY3J5cHQg LWxnc3NhcGlfa3JiNSIKLQotI0FJWCA0LjMgd2l0aCBNSVQgS2VyYmVyb3MgNSwgS2VyYmVyb3Mg NCBjb21wYXRpYmlsaXR5IG1vZGUgYW5kIE9wZW5TU0wKLSMgTXVzdCBOT1QgaGF2ZSBDS19ORVdU RVJNIG9yIGVsc2UgQy1LZXJtaXQgaGFuZ3MgYWZ0ZXIgY3Vyc2VzLgotIyAtbW1pbmltYWwtdG9j IG5lZWRlZCBvbiBzb21lIHN5c3RlbXMgYnV0IG5vdCBvdGhlcnMgdG8gYXZvaWQgVE9DIG92ZXJm bG93LgotIyAibWFuIGxkIiBzYXlzIC1iYmlndG9jIG1ha2VzIHByb2dyYW0gcnVuIHNsb3dlci4K LWFpeDQzZ2NjK2tyYjUra3JiNCtvcGVuc3NsOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgSUJNIEFJWCA0LjMgb3IgaGlnaGVyIHcvS2VyYmVyb3MuLi4KLQkkKE1BS0UpIHhl cm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IENDPWdjYyBDQzI9Z2NjIFwKLQkiQ0ZMQUdT PSAtbW1pbmltYWwtdG9jIC1nIC1PIC1EQUlYUlMgLURBSVg0MSAtREFJWDQzIC1EU1ZSNCBcCi0J LURESVJFTlQgLURDS19BTlNJQyAtRENMU09QTiAtRENLX0NVUlNFUyAtRFNFTEVDVCAtRFNFTEVD VF9IIFwKLQktRFNURVJNSU9YIC1EVENQU09DS0VUIC1ERk5GTE9BVCAtRE5PR0VUVVNFUlNIRUxM IFwKLQktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfS0VSQkVST1MgLURLUkI1IC1ES1JCNCAtREtS QjUyNCBcCi0JLURDS19FTkNSWVBUSU9OIC1EQ0tfREVTIC1EQ0tfQ0FTVCAtRExJQkRFUyAtRENL X1NTTCBcCi0JLWZ1bnNpZ25lZC1jaGFyICQoSzVJTkMpICQoSzVJTkMpL2tyYjUgJChTU0xJTkMp ICQoS0ZMQUdTKSIgXAotCSJMSUJTPSQoSzVMSUIpICQoU1NMTElCKSAtbHNzbCAtbGNyeXB0byBc Ci0JLWxjdXJzZXMgLWxtIC1sa3JiNCAtbGRlczQyNSAtbGtyYjUgLWxjb21fZXJyIC1sazVjcnlw dG8gLWxjcnlwdCBcCi0JLWxnc3NhcGlfa3JiNSIKLQotYWl4NDNnY2Mrb3BlbnNzbDoKLQlAZWNo byBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIElCTSBBSVggNC4zIG9yIGhpZ2hlciB3L09w ZW5TU0wuLi4KLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IENDPWdj YyBDQzI9Z2NjIFwKLQkiQ0ZMQUdTPSAtbW1pbmltYWwtdG9jIC1nIC1PIC1EQUlYUlMgLURBSVg0 MSAtREFJWDQzIC1EU1ZSNCBcCi0JLURESVJFTlQgLURDS19BTlNJQyAtRENMU09QTiAtRENLX0NV UlNFUyAtRFNFTEVDVCAtRFNFTEVDVF9IIFwKLQktRFNURVJNSU9YIC1EVENQU09DS0VUIC1ERk5G TE9BVCAtRE5PR0VUVVNFUlNIRUxMIFwKLQktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1NMIC1m dW5zaWduZWQtY2hhciAkKFNTTElOQykgJChLRkxBR1MpIiBcCi0JIkxJQlM9JChTU0xMSUIpIC1s c3NsIC1sY3J5cHRvIC1sY3Vyc2VzIC1sbSAtbGNyeXB0IgotCi1haXg0NGdjYzoKLQkkKE1BS0Up IGFpeDQzZyAiS0ZMQUdTPS1EQUlYNDQgJChLRkxBR1MpIiBcCi0JS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfQotCi1haXg0NWdjYzoKLQkkKE1BS0UpIGFpeDQzZyAiS0ZMQUdTPS1EQUlYNDUgJChL RkxBR1MpIiBcCi0JS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQotCi1haXg1MGdjYzoKLQkkKE1B S0UpIGFpeDQzZyAiS0ZMQUdTPS1EQUlYNTAgJChLRkxBR1MpIiBcCi0JS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfQotCi1haXg1MWdjYzoKLQkkKE1BS0UpIGFpeDQzZyAiS0ZMQUdTPS1EQUlYNTEg JChLRkxBR1MpIiBcCi0JS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQotCi1haXg1MmdjYzoKLQkk KE1BS0UpIGFpeDQzZyAiS0ZMQUdTPS1EQUlYNTIgJChLRkxBR1MpIiBcCi0JS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfQotCi1haXg1M2djYzoKLQkkKE1BS0UpIGFpeDQzZyAiS0ZMQUdTPS1EQUlY NTMgJChLRkxBR1MpIiBcCi0JS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQotCi0jQnVsbCBEUFgv MiB3aXRoIEJPUy9YLCBsaWtlIEFJWC9SUzYwMDAKLWJ1bGxkcHgyOgotCUBlY2hvIE1ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgQnVsbCBEUFgvMiB3aXRoIEJPUy9YLi4uCi0JJChNQUtFKSB3 ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURTVlIzIC1ERElS RU5UIC1EQ0tfQU5TSUMgLURDS1RZUF9IPTxzeXMvdHlwZXMuaD4gXAotCS1EQ0tfUE9MTCAtRE5P R0VUVVNFUlNIRUxMIC1EQ0xTT1BOIC1ETk9MRUFSTiAtTyAkKEtGTEFHUykiIFwKLQkiTE5LRkxB R1MgPSAtcyIKLQotI1N1biBVTklYIDMuNSB3aXRoIGdjYyAyLjMuMy4KLXN1bm9zM2djYzoKLQlA ZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFN1biBVTklYIDMuNSBhbmQgZ2NjLi4u Ci0JJChNQUtFKSB4ZXJtaXQgQ0M9Z2NjIENDMj1nY2MgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCi0JQ0ZMQUdTPSItZyAtTyAtREJTRDQgLURUQ1BTT0NLRVQgJChLRkxBR1MpIgotCi0jU3Vu T1MgdmVyc2lvbiA0LjAsIEJTRCBlbnZpcm9ubWVudCwgaGFzIHNhdmVkIG9yaWdpbmFsIGV1aWQg ZmVhdHVyZS4KLSMgQWRkICJDQz0vdXNyL3VjYi9jYyBDQzI9L3Vzci91Y2IvY2MiIGlmIG5lY2Vz c2FyeS4KLSMgTm90ZTogSW5jbHVkaW5nIFVuaWNvZGUgY3Jhc2hlcyB0aGUgYXNzZW1ibGVyIGlu IGNrY3VuaS5jLgotc3Vub3M0OgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3Ig U3VuT1MgNC4wLCBCU0QgZW52aXJvbm1lbnQuLi4KLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtTyAtRFNVTk9TNCAtREZORkxPQVQgLUROT1VO SUNPREUgJChLRkxBR1MpIiBcCi0JIkxJQlM9LWxtIgotCi0jQXMgYWJvdmUsIGJ1dCB3aXRoIFN1 bkxpbmsgWC4yNSBzdXBwb3J0Ci1zdW5vczR4MjU6Ci0JQGVjaG8gU3VuTGluayBYLjI1IHN1cHBv cnQKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHN1bm9zNCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKLQkiS0ZMQUdTPSQoS0ZMQUdTKSAtREZORkxPQVQgLURTVU5YMjUiIFwKLQkiTElCUz0t bG0iCi0KLSNTVU4gT1MgdmVyc2lvbiA0LjEgLSA0LjEuMywgQlNEIGVudmlyb25tZW50LCBoYXMg c2F2ZWQgb3JpZ2luYWwgZXVpZCBmZWF0dXJlLgotI1VzZXMgSG9uZXkgRGFuQmVyIFVVQ1AuICBS ZXF1aXJlcyBwcmVzZW5jZSBvZiAvdXNyL3Nwb29sL2xvY2tzIGRpcmVjdG9yeS4KLSMgL3Zhci9z cG9vbC8gc2hvdWxkIGJlIGEgc3ltYm9saWMgbGluayB0byAgL3Vzci9zcG9vbC8uCi0jIC4uLiBv ciAnbWFrZSB4ZXJtaXQgIkNDPSAvdXNyL3VjYi9jYyAiIFwnCi0jIE5vdGU6ICJ4ZXJtaXQiIG1l YW5zIHVzZSB0aGUgc2VsZWN0KCkgdmVyc2lvbiBvZiB0aGUgQ09OTkVDVCBtb2R1bGUuCi0jIE5v dGUgZm9yIEMtS2VybWl0IDkuMDogUmVwb3J0ZWRseSAneW91IG5lZWQgdG8gbW9kaWZ5IHRoZSBz eXMvaW9jdGwuaAotIyBpbmNsdWRlIGZpbGUsIGkuZS4gY29tbWVudCBvdXQgdGhlICJzdHJ1Y3Qg d2luc2l6ZSIgYW5kICJzdHJ1Y3QKLSMgdHR5c2l6ZSIuIE90aGVyd2lzZSB0aGVyZSB3aWxsIGJl IGEgY29uZmxpY3Qgd2l0aCBzeXMvdHR5Y29tLmggKGluY2x1ZGVkIGJ5Ci0jIHRlcm1pb3MuaCkg d2hpY2ggYWxzbyBkZWNsYXJlcyB0aGVzZSBzdHJ1Y3RzLiBCdXQgeW91IG5lZWQgYm90aCBpbmNs dWRlcy4nCi1zdW5vczQxOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU3Vu T1MgNC4xIC8gQlNELi4uCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCi0JIkNGTEFHUz0gLU8gLURTVU5PUzQxIC1ESERCVVVDUCAtRE5PVU5JQ09ERSAkKEtGTEFH UykiIFwKLQkiTElCUz0gJChMSUJTKSAtbHJlc29sdiAtbG0iCi0KLSNBcyBhYm92ZSwgYnV0IGNv bXBpbGVkIHdpdGggZ2NjLiAgR2l2ZXMgMjQtMzJLIHNpemUgcmVkdWN0aW9uCi0jd2l0aCBnY2Mg Mi4xIG9yIDIuMi4yLiAgQ0FVVElPTjogbWFrZSBzdXJlICJmaXhpbmNsdWRlcyIgaGFzIGJlZW4g cnVuIG9uCi0jdGhlIGluY2x1ZGUgZmlsZXMsIHNvIGdjYydzIGFyZSBpbiBzeW5jIHdpdGggdGhl IHJlZ3VsYXIgU3VuIG9uZXMuCi0jVGhpcyBpbmNsdWRlcyB0aGUgY3Vyc2VzIGxpYnJhcnkgZm9y IGZ1bGxzY3JlZW4gZmlsZSB0cmFuc2ZlciBkaXNwbGF5LgotI05ER1BXTkFNIG5lZWRlZCBmb3Ig R0NDIDIuNS42LCBub3QgbmVlZGVkIGZvciAyLjQuMCwgYnV0IGl0J3MgdW5jZXJ0YWluCi0jd2hl dGhlciBpdCB3aWxsIGRvIGFueSBoYXJtIGZvciAyLjQuMCBjb21waWxhdGlvbiAtLSBpZiBzbywg cmVtb3ZlIGl0Lgotc3Vub3M0MWdjYzoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIFN1bk9TIDQuMSB3aXRoIGdjYyBhbmQgY3Vyc2VzLi4uCi0JJChNQUtFKSB4ZXJtaXQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0M9IGdjYyIgIkNDMj0gZ2NjIiBcCi0JIkNGTEFHUz0g LU8gLURTVU5PUzQxIC1ESERCVVVDUCAtRE5ER1BXTkFNIC1EQ0tfQ1VSU0VTIC1ERk5GTE9BVCBc Ci0JLWZ1bnNpZ25lZC1jaGFyICQoS0ZMQUdTKSIgIkxJQlM9IC1sY3Vyc2VzIC1sdGVybWNhcCAt bHJlc29sdiAtbG0iCi0KLSMgQXMgYWJvdmUsIGJ1dCB3aXRob3V0IC1mdW5zaWduZWQtY2hhciBz byBJIGNhbiBzZWUgdGhlIHdhcm5pbmdzIHRoYXQKLSMgZXZlcnlib2R5IGVsc2Ugd2lsbCBnZXQg d2hlbiB0aGV5IHVzZSBBTlNJIGNvbXBpbGVycyB0aGF0IGRvbid0IGhhdmUgdGhpcwotIyBvcHRp b24gKGdzYyA9IGdjYyBzaWduZWQgY2hhcikuCi1zdW5vczQxZ3NjOgotCUBlY2hvIE1ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgU3VuT1MgNC4xIHdpdGggZ2NjIGFuZCBjdXJzZXMuLi4KLQkk KE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQz0gZ2NjIiAiQ0MyPSBn Y2MiIFwKLQkiQ0ZMQUdTPSAtTyAtRFNVTk9TNDEgLURIREJVVUNQIC1ETkRHUFdOQU0gLURDS19D VVJTRVMgLURGTkZMT0FUIFwKLQkkKEtGTEFHUykiICJMSUJTPSAtbGN1cnNlcyAtbHRlcm1jYXAg LWxyZXNvbHYgLWxtIgotCi0jQXMgYWJvdmUgYnV0IHdpdGggY2t1Y29uLmMgcmF0aGVyIHRoYW4g Y2t1Y25zLmMgKGZvciB0ZXN0aW5nIG9ubHkpCi1zdW5vczQxZ2NjZm9yazoKLQlAZWNobyBNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFN1bk9TIDQuMSB3aXRoIGdjYyBhbmQgY3Vyc2VzLi4u Ci0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0M9IGdjYyIgIkND Mj0gZ2NjIiBcCi0JIkNGTEFHUz0gLU8gLURTVU5PUzQxIC1ESERCVVVDUCAtRE5ER1BXTkFNIC1E Q0tfQ1VSU0VTIC1ERk5GTE9BVCBcCi0JLUROT0xFQVJOIC1mdW5zaWduZWQtY2hhciAkKEtGTEFH UykiIFwKLQkiTElCUz0gLWxjdXJzZXMgLWx0ZXJtY2FwIC1scmVzb2x2IC1sbSIKLQotI2FzIGFi b3ZlIGJ1dCBjb25maWd1cmVkIGZvciBLZXJiZXJvcyBJVgotc3Vub3M0MWdjYytrcmI0OgotCUBl Y2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU3VuT1MgNC4xLCBnY2MsIGN1cnNlcywg a3JiNC4uLgotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDPSBn Y2MiICJDQzI9IGdjYyIgXAotCSJDRkxBR1M9IC1PIC1EU1VOT1M0MSAtREhEQlVVQ1AgLUROREdQ V05BTSAtRENLX0NVUlNFUyAtREZORkxPQVQgXAotCS1EVENQU09DS0VUIC1EQ0tfQVVUSEVOVElD QVRJT04gLURDS19LRVJCRVJPUyAgLURLUkI0IFwKLQktRENLX0VOQ1JZUFRJT04gLURDS19ERVMg LURDS19DQVNUIC1EQklHQlVGT0sgLWZ1bnNpZ25lZC1jaGFyIFwKLQkkKEs0SU5DKSAkKEtGTEFH UykiIFwKLQkiTElCUz0gJChLNExJQikgLWxjdXJzZXMgLWx0ZXJtY2FwIC1scmVzb2x2IC1sbSAt bGtyYiAtbGRlcyIKLQotI2FzIGFib3ZlIGJ1dCBjb25maWd1cmVkIGZvciBTU0wvVExTCi1zdW5v czQxZ2NjK29wZW5zc2w6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTdW5P UyA0LjEsIGdjYywgY3Vyc2VzLCBzc2wuLi4KLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9ICJDQz0gZ2NjIiAiQ0MyPSBnY2MiIFwKLQkiQ0ZMQUdTPSAtTyAtRFNVTk9T NDEgLURIREJVVUNQIC1ETkRHUFdOQU0gLURDS19DVVJTRVMgLURGTkZMT0FUIFwKLQktRENLX0FV VEhFTlRJQ0FUSU9OIC1mdW5zaWduZWQtY2hhciBcCi0JLURDS19TU0wgLURUQ1BTT0NLRVQgLURC SUdCVUZPSyAkKFNTTElOQykgJChLRkxBR1MpIiBcCi0JIkxJQlM9ICQoU1NMTElCKSAtbGN1cnNl cyAtbHRlcm1jYXAgLWxyZXNvbHYgLWxtIC1sc3NsIC1sY3J5cHRvIgotCi0jYXMgYWJvdmUgYnV0 IGNvbmZpZ3VyZWQgZm9yIEtlcmJlcm9zIElWIGFuZCBTU0wvVExTCi1zdW5vczQxZ2NjK2tyYjQr b3BlbnNzbDoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFN1bk9TIDQuMSwg Z2NjLCBjdXJzZXMsIGtyYjQuLi4KLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9ICJDQz0gZ2NjIiAiQ0MyPSBnY2MiIFwKLQkiQ0ZMQUdTPSAtTyAtRFNVTk9TNDEgLURI REJVVUNQIC1ETkRHUFdOQU0gLURDS19DVVJTRVMgLURGTkZMT0FUIFwKLQktRENLX0FVVEhFTlRJ Q0FUSU9OIC1EQ0tfS0VSQkVST1MgLURLUkI0IC1EQ0tfRU5DUllQVElPTiAtRENLX0RFUyBcCi0J LURDS19DQVNUIC1EQ0tfU1NMIC1ETElCREVTIC1EVENQU09DS0VUIC1EQklHQlVGT0sgLWZ1bnNp Z25lZC1jaGFyIFwKLQkkKEs0SU5DKSAkKFNTTElOQykgJChLRkxBR1MpIiBcCi0JIkxJQlM9ICQo SzRMSUIpICQoU1NMTElCKSBcCi0JLWxjdXJzZXMgLWx0ZXJtY2FwIC1scmVzb2x2IC1sbSAtbGty YiAtbHNzbCAtbGNyeXB0byIKLQotI2FzIGFib3ZlIGJ1dCBjb25maWd1cmVkIGZvciBLZXJiZXJv cyBJViBhbmQgWkxJQiBlbmFibGVkIFNTTC9UTFMKLXN1bm9zNDFnY2Mra3JiNCtvcGVuc3NsK3ps aWI6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTdW5PUyA0LjEsIGdjYywg Y3Vyc2VzLCBrcmI0Li4uCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSAiQ0M9IGdjYyIgIkNDMj0gZ2NjIiBcCi0JIkNGTEFHUz0gLU8gLURTVU5PUzQxIC1ESERCVVVD UCAtRE5ER1BXTkFNIC1EQ0tfQ1VSU0VTIC1ERk5GTE9BVCBcCi0JLURDS19BVVRIRU5USUNBVElP TiAtRENLX0tFUkJFUk9TIC1ES1JCNCAtRENLX0VOQ1JZUFRJT04gLURDS19ERVMgXAotCS1EQ0tf Q0FTVCAtRENLX1NTTCAtRExJQkRFUyAtRFRDUFNPQ0tFVCAtREJJR0JVRk9LIC1mdW5zaWduZWQt Y2hhciBcCi0JLURaTElCICQoSzRJTkMpICQoU1NMSU5DKSBcCi0JJChLRkxBR1MpIiBcCi0JIkxJ QlM9ICQoSzRMSUIpICQoU1NMTElCKSBcCi0JLWxjdXJzZXMgLWx0ZXJtY2FwIC1scmVzb2x2IC1s bSAtbGtyYiAtbHNzbCAtbGNyeXB0byAtbHoiCi0KLSNhcyBhYm92ZSBidXQgY29uZmlndXJlZCBm b3IgS2VyYmVyb3MgSVYgYW5kIFNSUCBhbmQgWkxJQiBlbmFibGVkIFNTTC9UTFMKLXN1bm9zNDFn Y2Mra3JiNCtzcnArb3BlbnNzbCt6bGliOgotCUBlY2hvICJDLUtlcm1pdCAkKENLVkVSKSBTdW5P UyA0LjE6IGdjYyxjdXJzZXMsa3JiNCxzcnAsc3NsLHpsaWIuLi4iCi0JJChNQUtFKSB4ZXJtaXQg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0M9IGdjYyIgIkNDMj0gZ2NjIiBcCi0JIkNGTEFH Uz0gLU8gLURTVU5PUzQxIC1ESERCVVVDUCAtRE5ER1BXTkFNIC1EQ0tfQ1VSU0VTIC1ERk5GTE9B VCBcCi0JLURDS19BVVRIRU5USUNBVElPTiAtRENLX0tFUkJFUk9TIC1ES1JCNCAtRENLX0VOQ1JZ UFRJT04gLURDS19ERVMgXAotCS1EQ0tfQ0FTVCAtRENLX1NTTCAtRExJQkRFUyAtRFRDUFNPQ0tF VCAtREJJR0JVRk9LIC1mdW5zaWduZWQtY2hhciBcCi0JLURaTElCIC1EQ0tfU1JQICQoSzRJTkMp ICQoU1JQSU5DKSAkKFNTTElOQykgJChLRkxBR1MpIiBcCi0JIkxJQlM9ICQoSzRMSUIpICQoU1JQ TElCKSAkKFNTTExJQikgXAotCS1sY3Vyc2VzIC1sdGVybWNhcCAtbHJlc29sdiAtbG0gLWxrcmIg LWxrcnlwdG8gXAotCS1sc3JwIC1sc3NsIC1sY3J5cHRvIC1seiIKLQotI2FzIGFib3ZlIGJ1dCBj b25maWd1cmVkIGZvciBLZXJiZXJvcyBJViBhbmQgU1JQIGFuZCBaTElCIGVuYWJsZWQgU1NML1RM Uwotc3Vub3M0MWdjYytzcnArb3BlbnNzbCt6bGliOgotCUBlY2hvICJDLUtlcm1pdCAkKENLVkVS KSBTdW5PUyA0LjE6IGdjYyxjdXJzZXMsc3JwLHNzbCx6bGliLi4uIgotCSQoTUFLRSkgeGVybWl0 IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDPSBnY2MiICJDQzI9IGdjYyIgXAotCSJDRkxB R1M9IC1PIC1EU1VOT1M0MSAtREhEQlVVQ1AgLUROREdQV05BTSAtRENLX0NVUlNFUyAtREZORkxP QVQgXAotCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19FTkNSWVBUSU9OIC1EQ0tfREVTIFwKLQkt RENLX0NBU1QgLURDS19TU0wgLURMSUJERVMgLURUQ1BTT0NLRVQgLURCSUdCVUZPSyAtZnVuc2ln bmVkLWNoYXIgXAotCS1EWkxJQiAtRENLX1NSUCAkKFNSUElOQykgJChTU0xJTkMpIFwKLQkkKEtG TEFHUykiIFwKLQkiTElCUz0gJChTUlBMSUIpICQoU1NMTElCKSBcCi0JLWxjdXJzZXMgLWx0ZXJt Y2FwIC1scmVzb2x2IC1sbSAtbGtyeXB0byAtbHNycCAtbHNzbCAtbGNyeXB0byAtbHogIgotCi0j U1VOT1MgNC4xIGFzIHN1bm9zNDEgYWJvdmUsIGJ1dCBhbHNvIHdpdGggY3Vyc2VzIHN1cHBvcnQK LXN1bm9zNDFjOgotCUBlY2hvIEN1cnNlcyBzdXBwb3J0Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0Up IiBzdW5vczQxIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9JChLRkxBR1Mp IC1EQ0tfQ1VSU0VTIC1ERk5GTE9BVCAiIFwKLQkiTElCUz0gLWxjdXJzZXMgLWx0ZXJtY2FwIgot Ci0jQXMgU3VuT1MgNC4xLngsIGdjYywgY29uZmlndXJlZCBhcyBJbnRlcm5ldCBLZXJtaXQgU2Vy dmVyLgotIyAuIE5PTE9DQUwgcmVtb3ZlcyBjYXBhYmlsaXR5IHRvIG1ha2UgY29ubmVjdGlvbnMK LSMgLiBUTkNPREUgYWxsb3dzIHNlcnZlci1zaWRlIFRlbG5ldCBuZWdvdGlhdGlvbi4KLSMgLiB1 c2VkIHRvIGluY2x1ZGUgLWxwd2VudCwgd2h5PwotIyAuIHVzZWQgdG8gaW5jbHVkZSAtTC91c3Iv bG9jYWwvbGliIC1sbSwgd2h5Pwotc3Vub3M0MWdpa3M6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBTdW5PUyA0LjEgd2l0aCBnY2MgZm9yIElLUy4uLgotCSQoTUFLRSkgeGVy bWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDPSBnY2MiICJDQzI9IGdjYyIgXAotCSJD RkxBR1M9IC1PIC1EU1VOT1M0MSAtRE5ER1BXTkFNIC1ERk5GTE9BVCBcCi0JLUROT0xPQ0FMIC1E VENQU09DS0VUIC1EVE5DT0RFIC1ETk9QVVNIICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAtbG0gLWxy ZXNvbHYiCi0KLSNTVU5PUyA0LjEgd2l0aCBTdW5MaW5rIFguMjUgc3VwcG9ydAotc3Vub3M0MXgy NToKLQlAZWNobyBTdW5MaW5rIFguMjUgc3VwcG9ydAotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIg d2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1PIC1EU1VOT1M0 MSAtREhEQlVVQ1AgLUROT1VOSUNPREUgLURGTkZMT0FUIC1EU1VOWDI1IFwKLQktRE5PTEVBUk4g JChLRkxBR1MpIiAiTElCUz0gJChMSUJTKSAtbHJlc29sdiAtbG0iCi0KLSNTVU5PUyA0LjEgd2l0 aCBTdW5MaW5rIFguMjUgc3VwcG9ydCBhbmQgY3Vyc2VzCi1zdW5vczQxeDI1YzoKLQlAZWNobyBT dW5MaW5rIFguMjUgc3VwcG9ydCArIGN1cnNlcwotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgd2Vy bWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1PIC1EU1VOT1M0MSAt REhEQlVVQ1AgLUROT1VOSUNPREUgLURGTkZMT0FUIC1EU1VOWDI1IFwKLQktRENLX0NVUlNFUyAt RE5PTEVBUk4gJChLRkxBR1MpIiBcCi0JIkxJQlM9ICQoTElCUykgLWxjdXJzZXMgLWx0ZXJtY2Fw IC1scmVzb2x2IC1sbSIKLQotI1NVTiB3aXRoIFNvbGFyaXMgMi4wID0gU3VuT1MgNS4wLgotI01v c3RseSB0aGUgc2FtZSBhcyBTeXN0ZW0gViBSNC4gIERvbid0IHVzZSB0aGlzIHdpdGggbGF0ZXIg U29sYXJpcyB2ZXJzaW9ucy4KLXNvbGFyaXMyMDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQo Q0tWRVIpIGZvciBTdW4gd2l0aCBTb2xhcmlzIDIuMCBhbmQgY3Vyc2VzLi4uJwotCSQoTUFLRSkg eGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtTyAtRFNWUjQg LURTT0xBUklTIC1ERElSRU5UIC1ESERCVVVDUCAtRFNURVJNSU9YIFwKLQktRFRDUFNPQ0tFVCAt RENLX0NVUlNFUyAtREZORkxPQVQgLURDS19QT0xMICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAtbHNv Y2tldCAtbG5zbCAtbGN1cnNlcyAtbHRlcm1saWIgLWxtIiAiTE5LRkxBR1MgPSAtcyIKLQotI1NV TiB3aXRoIFNvbGFyaXMgMi4wLgotI0FzIGFib3ZlLCBidXQgYnVpbHQgd2l0aCB0aGUgZ2NjIGNv bXBpbGVyIGZyb20gdGhlIEN5Z251cyBDRC1ST00uCi1zb2xhcmlzMjBnOgotCUBlY2hvICdNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFN1biBTb2xhcmlzIDIuMCwgZ2NjLCBhbmQgY3Vyc2Vz Li4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFH UyA9IC1PIC1EU1ZSNCAtRFNPTEFSSVMgLURESVJFTlQgLURIREJVVUNQIC1EU1RFUk1JT1ggXAot CS1EVENQU09DS0VUIC1EQ0tfQ1VSU0VTIC1EQ0tfUE9MTCAtREZORkxPQVQgJChLRkxBR1MpIiBc Ci0JIkxJQlM9IC1sc29ja2V0IC1sbnNsIC1sY3Vyc2VzIC1sdGVybWxpYiAtbG0iICJMTktGTEFH UyA9IC1zIiBcCi0JQ0M9L29wdC9jeWdudXMtc29sMi0xLjEvYmluL2djYyBDQzI9L29wdC9jeWdu dXMtc29sMi0xLjEvYmluL2djYwotCi0jU3VuT1MgNS4xID0gU29sYXJpcyAyLjEuCi0jTk9URTog QSBDIGNvbXBpbGVyIGlzIG5vIGxvbmdlciBidW5kbGVkIHdpdGggU3VuT1MgNS4xLCBzbyB0byBj b21waWxlIEMKLSNwcm9ncmFtcywgeW91IG1pZ2h0IGhhdmUgdG8gY2hhbmdlIHlvdXIgUEFUSCB0 byBpbmNsdWRlIHRoZSBkaXJlY3RvcnkKLSMvdXNyL2Njcy9iaW4gQUZURVIgdGhlIGRpcmVjdG9y eSBjb250YWluaW5nIHRoZSBjb21waWxlci4gIFN1blBSTyBDIGlzCi0jaW5zdGFsbGVkIGJ5IGRl ZmF1bHQgaW4gL29wdC9TVU5Xc3Byby9iaW4uICBTbyBhIHNhbXBsZSBQQVRIIG1pZ2h0IGJlOgot IwotIyAvdXNyL2xvY2FsL2JpbjovdXNyL2Jpbjovb3B0L1NVTldzcHJvL2JpbjovdXNyL2Njcy9i aW46XAotIyAvdXNyL3VjYjovdXNyL3NiaW46L3NiaW46LgotIwotIyBvcjoKLSMKLSMgL3Vzci9v cGVud2luL2JpbjovZXhwb3J0L2hvbWUvU1VOV3Nwcm8vYmluOi91c3IvY2NzL2JpbjovdXNyL3Ni aW46L3Vzci9iaW4uCi0jCi0jTk9URSAyOiBDb21waWxhdGlvbiB3aXRoIHRoZSBBcG9nZWUgQyBj b21waWxlciAoYXBjYykgbWlnaHQgbm90IHdvcmssCi0jYmVjYXVzZSBpdCByZWZ1c2VzIHRvIGFs bG93ICItVXN1biIuICBSZXBvcnRlZGx5LCBuZXdlciByZWxlYXNlcyBvZiBhcGNjCi0jKHN1Y2gg YXMgMS4yLjE3KSB3b3JrIE9LLCB1c2U6ICJtYWtlIC1lIHN1bm9zNTEgQ0M9YXBjYyBDQzI9YXBj YyIuCi1zb2xhcmlzMjE6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU3Vu T1MgNS54Li4uLicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwK LQkiQ0ZMQUdTID0gLU8gLVVzdW4gLURTVlI0IC1EU09MQVJJUyAtRERJUkVOVCAtREhEQlVVQ1Ag LURGTkZMT0FUIFwKLQktRFNFTEVDVCAtRE5PREVCVUcgLURTVEVSTUlPWCAkKEtGTEFHUykiICJM SUJTID0gLWxtIiAiTE5LRkxBR1MgPSAtcyIKLQotI1NvbGFyaXMgMi4wIC0gMi40LCBTdW5Qcm8g Y29tcGlsZXIsIGluY2x1ZGVzIGN1cnNlcyBhbmQgVENQL0lQLgotI1doZW4gdXNpbmcgU1VOV3Nw cm8gQ0MgMi4wLjEgdW5kZXIgU29sYXJpcyAyLjMsIGJlIHN1cmUgYWxsIGNjIHBhdGNoZXMKLSNh cmUgYXBwbGllZCwgb3RoZXJ3aXNlIGNvcnJ1cHQgb3IgdHJ1bmNhdGVkIG9iamVjdCBmaWxlcyBj YW4gcmVzdWx0LgotI1RvIGJ1aWxkLCBzZXQgeW91ciBQQVRIIGFzIGZvbGxvd3M6Ci0jICAvdXNy L2xvY2FsL2JpbjovdXNyL2Jpbjovb3B0L1NVTldzcHJvL2JpbjovdXNyL2Njcy9iaW46XAotIyAg L3Vzci91Y2I6L3Vzci9zYmluOi9zYmluOi4KLSMgb3IgKGRlcGVuZGluZyBvbiB3aGVyZSB0aGUg Y29tcGlsZXIgaGFzIGJlZW4gaW5zdGFsbGVkKToKLSMgIC91c3Ivb3Blbndpbi9iaW46L2V4cG9y dC9ob21lL1NVTldzcHJvL2JpbjovdXNyL2Njcy9iaW46L3Vzci9zYmluOi91c3IvYmluLgotI0Zv ciBhZGRpdGlvbmFsIG9wdGltaXphdGlvbiB0cnkgdXNpbmcgIi1mYXN0IC14TzQgLXhkZXBlbmQi Lgotc29sYXJpczJ4OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNvbGFy aXMgMi54IHdpdGggU3VuUHJvIGNjLi4uJwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtTyAtVXN1biAtaSAtRFNWUjQgLURESVJFTlQgLURT T0xBUklTIC1ESERCVVVDUCAtREZORkxPQVQgXAotCS1EU0VMRUNUIC1EQ0tfQ1VSU0VTIC1EQ0tf TkVXVEVSTSAtRFNURVJNSU9YIC1EVENQU09DS0VUICQoS0ZMQUdTKSIgXAotCSJMTktGTEFHUyA9 IC1zIiAiTElCUz0gLWx0ZXJtbGliIC1sc29ja2V0IC1sbnNsIC1sbSAtbHJlc29sdiIKLQotI2Fz IGFib3ZlIGJ1dCBjb25maWd1cmVkIGZvciBLZXJiZXJvcyBJVgotc29sYXJpczJ4K2tyYjQ6Ci0J QGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU29sYXJpcyAyLngsIFN1blBybyBj Yywga3JiNC4uLicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwK LQkiQ0ZMQUdTID0gLU8gLVVzdW4gLWkgLURTVlI0IC1ERElSRU5UIC1EU09MQVJJUyAtREhEQlVV Q1AgLURGTkZMT0FUIFwKLQktRFNFTEVDVCAtRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURTVEVS TUlPWCAtRFRDUFNPQ0tFVCAgXAotCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19LRVJCRVJPUyAg LURLUkI0IFwKLQktRENLX0VOQ1JZUFRJT04gLURDS19ERVMgLURDS19DQVNUICQoSzRJTkMpICQo S0ZMQUdTKSIgXAotCSJMTktGTEFHUyA9IC1zIiBcCi0JIkxJQlM9ICQoSzRMSUIpIC1sdGVybWxp YiAtbHNvY2tldCAtbG5zbCAtbG0gLWxyZXNvbHYgLWxrcmIgLWxkZXMiCi0KLSNDLUtlcm1pdCBm b3IgU29sYXJpcyAyLjAtMi40IGNvbXBpbGVkIHdpdGggZ2NjLCBpbmNsdWRlcyBjdXJzZXMgYW5k IFRDUC9JUC4KLSNDaGFuZ2UgLU8yIHRvIC1PIGlmIC1PMiBnaXZlcyB0cm91YmxlLgotI1JlbW92 ZSAtVXN1biBpZiBpdCBjYXVzZXMgdHJvdWJsZS4KLSNZb3VyIFBBVEggc2hvdWxkIHN0YXJ0IHdp dGggc29tZXRoaW5nIGxpa2U6Ci0jICAvdXNyL2xvY2FsL2dudS9iaW46L3Vzci9jY3MvYmluOgot I1Byb2R1Y2VzIGEgaHVnZSBleGVjdXRhYmxlIC0tIHN0cmlwIHdpdGggL3Vzci9jY3MvYmluL3N0 cmlwIChub3QgR251IHN0cmlwKS4KLSNBbHNvIGRvbid0IGFkZCAiTE5LRkxBR1MgPSAtcyIgLS0g c3RyaXAgbWFudWFsbHkgaW5zdGVhZC4KLSNBbHNvIG5vdGU6IHRoaXMgY2FuIE5PVCBiZSBsaW5r ZWQgc3RhdGljYWxseSAtIFN1biBtYWtlcyBpdCBpbXBvc3NpYmxlLgotI0FuZCBmb3IgU29sYXJp cyAyLjQsIHlvdSBtaWdodCBoYXZlIHRvIHJlcGxhY2U6Ci0jIC91c3IvbG9jYWwvbGliL2djYy1s aWIvaTQ4Ni1zdW4tc29sYXJpczIvMi40LjUvaW5jbHVkZS9zeXMvc3RhdC5oCi0jd2l0aCAvdXNy L2luY2x1ZGUvc3lzL3N0YXQuaC4KLXNvbGFyaXMyeGc6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgU29sYXJpcyAyLnggd2l0aCBHTlUgY2MuLi4nCi0JQGVjaG8gJ1BsZWFz ZSByZWFkIHRoZSBjb21tZW50cyB0aGF0IGFjY29tcGFueSB0aGUgc29sYXJpczJ4ZyB0YXJnZXQu JwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gQ0M9Z2NjIENDMj1n Y2MgXAotCSJDRkxBR1MgPSAtZyAtTyAtVXN1biAtRFNWUjQgLURTT0xBUklTIC1EU1RFUk1JT1gg LURTRUxFQ1QgLURGTkZMT0FUIFwKLQktRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURESVJFTlQg LURIREJVVUNQIC1EVENQU09DS0VUICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAtbHRlcm1saWIgLWxz b2NrZXQgLWxuc2wgLWxtIC1scmVzb2x2ICQoTElCUykiCi0KLSNkaXR0byBidXQgbm8gY3Vyc2Vz Lgotc29sYXJpczJ4Z25jOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNv bGFyaXMgMi54IHdpdGggR05VIGNjLi4uJwotCUBlY2hvICdQbGVhc2UgcmVhZCB0aGUgY29tbWVu dHMgdGhhdCBhY2NvbXBhbnkgdGhlIHNvbGFyaXMyeGcgdGFyZ2V0LicKLQkkKE1BS0UpIHhlcm1p dCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IENDPWdjYyBDQzI9Z2NjIFwKLQkiQ0ZMQUdTID0g LWcgLU8gLVVzdW4gLURTVlI0IC1EU09MQVJJUyAtRFNURVJNSU9YIC1EU0VMRUNUIC1ERk5GTE9B VCBcCi0JLURESVJFTlQgLURIREJVVUNQIC1EVENQU09DS0VUICQoS0ZMQUdTKSIgXAotCSJMSUJT PSAtbHNvY2tldCAtbG5zbCAtbG0gLWxyZXNvbHYgJChMSUJTKSIKLQotI2FuZCB3aXRoIEtlcmJl cm9zIElWCi1zb2xhcmlzMnhnK2tyYjQ6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVS KSBmb3IgU29sYXJpcyAyLnggd2l0aCBHTlUgY2MsIGtyYjQuLi4nCi0JQGVjaG8gJ1BsZWFzZSBy ZWFkIHRoZSBjb21tZW50cyB0aGF0IGFjY29tcGFueSB0aGUgc29sYXJpczJ4ZyB0YXJnZXQuJwot CSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gQ0M9Z2NjIENDMj1nY2Mg XAotCSJDRkxBR1MgPSAtZyAtTyAtVXN1biAtRFNWUjQgLURTT0xBUklTIC1EU1RFUk1JT1ggLURT RUxFQ1QgLURGTkZMT0FUIFwKLQktRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURESVJFTlQgLURI REJVVUNQIC1EVENQU09DS0VUIFwKLQktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfS0VSQkVST1Mg IC1ES1JCNCAtRENLX0VOQ1JZUFRJT04gXAotCS1EQ0tfREVTIC1EQ0tfQ0FTVCAtREJJR0JVRk9L ICQoSzRJTkMpICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAkKEs0TElCKSAtbHRlcm1saWIgLWxzb2Nr ZXQgLWxuc2wgLWxtIC1scmVzb2x2IC1sa3JiIC1sZGVzIFwKLQkkKExJQlMpIgotCi0jYW5kIHdp dGggT3BlblNTTCxaTElCLFBBTSxTSEFET1cKLXNvbGFyaXMyeGcrb3BlbnNzbCt6bGliK3BhbStz aGFkb3c6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU29sYXJpcyAyLngg d2l0aCBnY2MsIE9wZW5TU0wuLi4nCi0JQGVjaG8gJ1BsZWFzZSByZWFkIHRoZSBjb21tZW50cyB0 aGF0IGFjY29tcGFueSB0aGUgc29sYXJpczJ4ZyB0YXJnZXQuJwotCSQoTUFLRSkgeGVybWl0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gQ0M9Z2NjIENDMj1nY2MgXAotCSJDRkxBR1MgPSAtZyAt TyAtVXN1biAtRFNWUjQgLURTT0xBUklTIC1EU1RFUk1JT1ggLURTRUxFQ1QgLURGTkZMT0FUIFwK LQktRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURESVJFTlQgLURIREJVVUNQIC1EVENQU09DS0VU IFwKLQktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1NMIC1EQ0tfUEFNIC1EQ0tfU0hBRE9XICAt RFpMSUIgXAotCS1EQklHQlVGT0sgJChTU0xJTkMpICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAkKFNT TExJQikgLWx0ZXJtbGliIFwKLQktbHNvY2tldCAtbG5zbCAtbG0gLWxyZXNvbHYgLWxzc2wgLWxj cnlwdG8gLWxwYW0gLWx6IgotCi0jRGl0dG8gYnV0IHdpdGggR0NDIDMuMSBpbiB3aGljaCB5b3Ug aGF2ZSB0byBzcGVjaWZ5IDMyLWJpdCB3aXRoIC1tMzIuCi0jSW4gU29sYXJpcyA5IChhbmQgbWF5 YmUgOCkgeW91J2xsIGFsc28gbmVlZCBzcGVjaWZpeSB0aGUgTGlicmFyeSBwYXRoLgotI1JlcG9y dGVkbHkgdGhpcyBjYW4gYmUgZG9uZSBoZXJlLCBidXQgb25seSB3aXRoOgotIyBjcmxlIC1sIC91 c3IvbGliOi91c3IvbG9jYWwvc3NsL2xpYgotI3ByaW9yIHRvIGJ1aWxkaW5nLiAgTm90ZTogNjQt Yml0IG5vdCB0ZXN0ZWQgd2l0aCBTU0wuCi0jRm9yIG5vLWNyeXB0byA2NC1iaXQgYnVpbGRzIHNl ZSB0aGUgc29sYXJpczlnNjQgdGFyZ2V0Lgotc29sYXJpczJ4ZzMyK29wZW5zc2wremxpYitwYW0r c2hhZG93OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNvbGFyaXMgMi54 IHdpdGggZ2NjLCBPcGVuU1NMLi4uJwotCUBlY2hvICdQbGVhc2UgcmVhZCB0aGUgY29tbWVudHMg dGhhdCBhY2NvbXBhbnkgdGhlIHNvbGFyaXMyeGcgdGFyZ2V0LicKLQkkKE1BS0UpIHhlcm1pdCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IENDPSJnY2MgLW0zMiIgQ0MyPSJnY2MgLW0zMiIgXAot CSJDRkxBR1MgPSAtZyAtTyAtVXN1biAtRFNWUjQgLURTT0xBUklTIC1EU1RFUk1JT1ggLURTRUxF Q1QgLURGTkZMT0FUIFwKLQktRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURESVJFTlQgLURIREJV VUNQIC1EVENQU09DS0VUIFwKLQktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1NMIC1EQ0tfUEFN IC1EQ0tfU0hBRE9XICAtRFpMSUIgXAotCS1EQklHQlVGT0sgJChTU0xJTkMpICQoS0ZMQUdTKSIg XAotCSJMSUJTPSAkKFNTTExJQikgLWx0ZXJtbGliIFwKLQktbHNvY2tldCAtbG5zbCAtbG0gLWxy ZXNvbHYgLWxzc2wgLWxjcnlwdG8gLWxwYW0gLWx6IgotCi0jYW5kIHdpdGggS3JiNSxLcmI0LE9w ZW5TU0wsU0hBRE9XCi1zb2xhcmlzMnhnK2tyYjUra3JiNCtvcGVuc3NsK3NoYWRvdzoKLQlAZWNo byAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTb2xhcmlzIDIueCB3aXRoIGdjYyxrNSxr NCxzc2wuLi4nCi0JQGVjaG8gJ1BsZWFzZSByZWFkIHRoZSBjb21tZW50cyB0aGF0IGFjY29tcGFu eSB0aGUgc29sYXJpczJ4ZyB0YXJnZXQuJwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gQ0M9Z2NjIENDMj1nY2MgXAotCSJDRkxBR1MgPSAtTyAtVXN1biAtRFNWUjQg LURTT0xBUklTIC1EU1RFUk1JT1ggLURTRUxFQ1QgLURGTkZMT0FUIFwKLQktRENLX0NVUlNFUyAt RENLX05FV1RFUk0gLURESVJFTlQgLURIREJVVUNQIC1EVENQU09DS0VUIFwKLQktRENLX0FVVEhF TlRJQ0FUSU9OIC1EQ0tfS0VSQkVST1MgLURLUkI1IC1ES1JCNCAtREtSQjUyNCBcCi0JLURDS19F TkNSWVBUSU9OIC1EQ0tfU1NMIC1EQ0tfREVTIC1EQ0tfQ0FTVCAtREJJR0JVRk9LIFwKLQkkKEs1 SU5DKSAkKEs1SU5DKS9rcmI1ICQoU1NMSU5DKSAkKEtGTEFHUykiIFwKLQkiTElCUz0gJChLNUxJ QikgJChTU0xMSUIpIC1sdGVybWxpYiAtbHNvY2tldCAtbG5zbCAtbG0gLWxyZXNvbHYgXAotCS1s a3JiNCAtbHNzbCAtbGNyeXB0byAtbGdzc2FwaV9rcmI1IC1sa3JiNSAtbGNvbV9lcnIgLWxrNWNy eXB0byBcCi0JLWxkZXMgJChMSUJTKSIKLQotI2FuZCB3aXRoIE9wZW5TU0wKLXNvbGFyaXMyeGcr b3BlbnNzbCtwYW0rc2hhZG93OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9y IFNvbGFyaXMgMi54IHdpdGggZ2NjLCBPcGVuU1NMLi4uJwotCUBlY2hvICdQbGVhc2UgcmVhZCB0 aGUgY29tbWVudHMgdGhhdCBhY2NvbXBhbnkgdGhlIHNvbGFyaXMyeGcgdGFyZ2V0LicKLQkkKE1B S0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IENDPWdjYyBDQzI9Z2NjIFwKLQki Q0ZMQUdTID0gLWcgLU8gLVVzdW4gLURTVlI0IC1EU09MQVJJUyAtRFNURVJNSU9YIC1EU0VMRUNU IC1ERk5GTE9BVCBcCi0JLURDS19DVVJTRVMgLURDS19ORVdURVJNIC1ERElSRU5UIC1ESERCVVVD UCAtRFRDUFNPQ0tFVCBcCi0JLURDS19BVVRIRU5USUNBVElPTiAtRENLX1NTTCAtRENLX1BBTSAt RENLX1NIQURPVyBcCi0JLURCSUdCVUZPSyAkKFNTTElOQykgJChLRkxBR1MpIiBcCi0JIkxJQlM9 ICQoU1NMTElCKSAtbHRlcm1saWIgXAotCS1sc29ja2V0IC1sbnNsIC1sbSAtbHJlc29sdiAtbHNz bCAtbGNyeXB0byAtbHBhbSIKLQotc29sYXJpczJ4ZytvcGVuc3NsK3psaWIrc3JwK3BhbStzaGFk b3c6CQotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNvbGFyaXMgMi54IHdp dGggZ2NjLCBPcGVuU1NMLi4uJwotCUBlY2hvICdQbGVhc2UgcmVhZCB0aGUgY29tbWVudHMgdGhh dCBhY2NvbXBhbnkgdGhlIHNvbGFyaXMyeGcgdGFyZ2V0LicKLQkkKE1BS0UpIHhlcm1pdCBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IENDPWdjYyBDQzI9Z2NjIFwKLQkiQ0ZMQUdTID0gLWcgLU8g LVVzdW4gLURTVlI0IC1EU09MQVJJUyAtRFNURVJNSU9YIC1EU0VMRUNUIC1ERk5GTE9BVCBcCi0J LURDS19DVVJTRVMgLURDS19ORVdURVJNIC1ERElSRU5UIC1ESERCVVVDUCAtRFRDUFNPQ0tFVCAt REJJR0JVRk9LIFwKLQktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfRU5DUllQVElPTiAtRENLX0RF UyAtRExJQkRFUyAtRENLX0NBU1QgXAotCS1EQ0tfU1NMIC1EQ0tfUEFNIC1EQ0tfU0hBRE9XIC1E WkxJQiAtRENLX1NSUCAkKFNTTElOQykgJChLRkxBR1MpIiBcCi0JIkxJQlM9ICQoU1NMTElCKSAt bHRlcm1saWIgLWxzb2NrZXQgLWxuc2wgLWxtIC1scmVzb2x2IC1sc3JwIC1sc3NsIFwKLQktbGRl cyAtbGtyeXB0byAtbGNyeXB0byAtbHBhbSAtbHoiCi0KLXNvbGFyaXMyMmc6Ci0JJChNQUtFKSAi TUFLRT0kKE1BS0UpIiAiS0ZMQUdTPS1EUE9TSVhfQ1JUU0NUUyAkKEtGTEFHUykiIHNvbGFyaXMy eGcgXAotCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KLQotc29sYXJpczIzZzoKLQkkKE1BS0Up ICJNQUtFPSQoTUFLRSkiICJLRkxBR1M9LURQT1NJWF9DUlRTQ1RTICQoS0ZMQUdTKSIgc29sYXJp czJ4ZyBcCi0JS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQotCi0jU29sYXJpcyAyLjQgYnVpbHQg d2l0aCBnY2MKLXNvbGFyaXMyNGc6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9IFwKLQlzb2xhcmlzMnhnICJLRkxBR1M9LURTT0xBUklTMjQgLURQT1NJ WF9DUlRTQ1RTICQoS0ZMQUdTKSIKLQotI1NvbGFyaXMgMi4wLTIuMywgU3VuUHJvIGNvbXBpbGVy LCB3aXRoIFN1bkxpbmsgWC4yNSBzdXBwb3J0LgotI1RoaXMgd2lsbCBvbmx5IHJ1biBpZiB1c2Vy IGhhcyAvb3B0L1NVTldjb25uL2xpYi9saWJzb2NreDI1LnNvLjEKLSNleGlzdHMgYW5kIGNhbiBi ZSBkeW5hbWljYWxseSBsaW5rZWQuCi0jTk9URTogRG8gbm90IGNoYW5nZSB0YXJnZXQgdG8geGVy bWl0IC0tIGl0IGRvZXNuJ3Qgc3VwcG9ydCBYLjI1Lgotc29sYXJpczJ4MjU6Ci0JQGVjaG8gJ01h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU29sYXJpcyAyLngrWC4yNSB3aXRoIFN1blBybyBj Yy4uLicKLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZM QUdTID0gLU8gLWkgLVVzdW4gLURTVlI0IC1EU09MQVJJUyAtRERJUkVOVCBcCi0JLURTVU5YMjUg LURUQ1BTT0NLRVQgLURIREJVVUNQIC1ERk5GTE9BVCAtRE5PTEVBUk4gXAotCS1EU0VMRUNUIC1E Q0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtRFNURVJNSU9YICQoS0ZMQUdTKSIgXAotCSJMTktGTEFH UyA9IC1zIiBcCi0JIkxJQlM9IC1sdGVybWxpYiAtTC9vcHQvU1VOV2Nvbm4vbGliIC1SL29wdC9T VU5XY29ubi9saWIgXAotCS1sc29ja3gyNSAtbHNvY2tldCAtbG5zbCAtbG0gLWxyZXNvbHYiCi0K LSNTb2xhcmlzIDIuMC0yLjQsIGdjYywgU3VuTGluayBYLjI1IGFkZGVkLgotI05PVEU6IENhbid0 IHVzZSB4ZXJtaXQgdGFyZ2V0IHdpdGggWC4yNS4KLXNvbGFyaXMyeGd4MjU6Ci0JQGVjaG8gJ01h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU29sYXJpcyAyLnggKyBYLjI1IHdpdGggR05VIGNj Li4uJwotCUBlY2hvICdQbGVhc2UgcmVhZCB0aGUgY29tbWVudHMgdGhhdCBhY2NvbXBhbnkgdGhl IHNvbGFyaXMyeGcgZW50cnkuJwotCSQoTUFLRSkgd2VybWl0IENDPWdjYyBDQzI9Z2NjIEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtZyAtTyAtVXN1biAtRFNWUjQgLURT T0xBUklTIC1EU1RFUk1JT1ggLURTRUxFQ1QgLURTVU5YMjUgXAotCS1EQ0tfQ1VSU0VTIC1EQ0tf TkVXVEVSTSAtRERJUkVOVCAtREhEQlVVQ1AgLURUQ1BTT0NLRVQgLURGTkZMT0FUIFwKLQktRE5P TEVBUk4gJChLRkxBR1MpIiBcCi0JIkxJQlM9IC1sdGVybWxpYiAtbG0gLUwvb3B0L1NVTldjb25u L2xpYiAtUi9vcHQvU1VOV2Nvbm4vbGliIFwKLQktbHNvY2t4MjUgLWxzb2NrZXQgLWxuc2wiCi0K LSNTb2xhcmlzIDIuNCwgU3VuUHJvIGNvbXBpbGVyLCB3aXRoIFN1bkxpbmsgWC4yNSBzdXBwb3J0 LgotI1RoaXMgd2lsbCBvbmx5IHJ1biBpZiB1c2VyIGhhcyAvb3B0L1NVTldjb25uL2xpYi9saWJz b2NreDI1LnNvLjEKLSNleGlzdHMgYW5kIGNhbiBiZSBkeW5hbWljYWxseSBsaW5rZWQuCi1zb2xh cmlzMjR4MjU6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU29sYXJpcyAy LjQrWC4yNSB3aXRoIFN1blBybyBjYy4uLicKLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLU8gLWkgLVVzdW4gLURTVlI0IC1EU09MQVJJUyAt RFNPTEFSSVMyNCAtRERJUkVOVCAtRE5PTEVBUk4gXAotCS1EU1VOWDI1IC1EVENQU09DS0VUIC1E SERCVVVDUCAtREZORkxPQVQgLURQT1NJWF9DUlRTQ1RTIFwKLQktRFNFTEVDVCAtRENLX0NVUlNF UyAtRENLX05FV1RFUk0gLURTVEVSTUlPWCAkKEtGTEFHUykiIFwKLQkiTE5LRkxBR1MgPSAtcyIg XAotCSJMSUJTPSAtbHRlcm1saWIgLUwvb3B0L1NVTldjb25uL2xpYiAtUi9vcHQvU1VOV2Nvbm4v bGliIFwKLQktbHNvY2t4MjUgLWxzb2NrZXQgLWxuc2wgLWxtIC1scmVzb2x2IgotCi0jU29sYXJp cyAyLjUsIFN1blBybyBjb21waWxlciwgd2l0aCBTdW5MaW5rIFguMjUgc3VwcG9ydC4KLXNvbGFy aXMyNXgyNToKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTb2xhcmlzIDIu NStYLjI1IHdpdGggU3VuUHJvIGNjLi4uJwotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtTyAtaSAtVXN1biAtRFNWUjQgLURTT0xBUklTMjUg LURESVJFTlQgLURTVU5YMjUgXAotCS1EVENQU09DS0VUIC1ESERCVVVDUCAtRFNFTEVDVCAtRENL X0NVUlNFUyBcCi0JLURDS19ORVdURVJNIC1EU1RFUk1JT1ggLURGTkZMT0FUIC1EUE9TSVhfQ1JU U0NUUyAtRE5PTEVBUk4gXAotCS1JL29wdC9TVU5XY29ubi9pbmNsdWRlICQoS0ZMQUdTKSIgXAot CSJMSUJTPSAtbHRlcm1saWIgLUwvb3B0L1NVTldjb25uL2xpYiAtUi9vcHQvU1VOV2Nvbm4vbGli IFwKLQktbHNvY2t4MjUgLWxzb2NrZXQgLWxuc2wgLWxtIC1scmVzb2x2IgotCi1zb2xhcmlzMjM6 Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzb2xhcmlzMnggS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCi0JIktGTEFHUz0kKEtGTEFHUykiCi0KLXNvbGFyaXMyNDoKLQkkKE1BS0UpICJNQUtF PSQoTUFLRSkiIHNvbGFyaXMyeCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdT PS1EU09MQVJJUzI0IC1EUE9TSVhfQ1JUU0NUUyAkKEtGTEFHUykiCi0KLSMgdGVtcGxhdGUgZm9y IFNvbGFyaXMgMi41IGFuZCBhYm92ZS4KLXNvbGFyaXMyNXg6Ci0JQGVjaG8gJ01ha2luZyBDLUtl cm1pdCAkKENLVkVSKSBmb3IgU29sYXJpcyAyLnggd2l0aCBTdW5Qcm8gY2MuLi4nCi0JJChNQUtF KSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1ERk5GTE9B VCAtTyAtVXN1biAtaSAkKEtGTEFHUykiIFwKLQkiTE5LRkxBR1MgPSAtcyIgXAotCSJMSUJTPSAt bHRlcm1saWIgLWxzb2NrZXQgLWxuc2wgLWxtIC1scmVzb2x2ICQoTElCUykiCi0KLSNTb2xhcmlz IDIuNSwgU3VuUHJvIGNvbXBpbGVyLCBjdXJzZXMsIFRDUC9JUAotc29sYXJpczI1OgotCSQoTUFL RSkgIk1BS0U9JChNQUtFKSIgc29sYXJpczI1eCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwK LQkiS0ZMQUdTPS1EU09MQVJJUzI1ICQoS0ZMQUdTKSIKLQotI1NvbGFyaXMgMi41LCBTdW5Qcm8g Y29tcGlsZXIsIGN1cnNlcywgVENQL0lQLCBLZXJiZXJvcyBJVgotc29sYXJpczI1K2tyYjQ6Ci0J JChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzb2xhcmlzMjV4K2tyYjQgS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfSBcCi0JIktGTEFHUz0tRFNPTEFSSVMyNSAkKEtGTEFHUykiCi0KLSNTb2xhcmlzIDIu NSBidWlsdCB3aXRoIGdjYwotc29sYXJpczI1ZzoKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNv bGFyaXMyeGcgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0tZnVuc2lnbmVk LWNoYXIgLURTT0xBUklTMjUgJChLRkxBR1MpIgotCi0jU29sYXJpcyAyLjUgYnVpbHQgd2l0aCBn Y2MgYW5kIEtlcmJlcm9zIElWCi1zb2xhcmlzMjVnK2tyYjQ6Ci0JJChNQUtFKSAiTUFLRT0kKE1B S0UpIiBzb2xhcmlzMnhnK2tyYjQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFH Uz0tZnVuc2lnbmVkLWNoYXIgLURTT0xBUklTMjUgJChLRkxBR1MpIgotCi0jU29sYXJpcyAyLjUg YnVpbHQgd2l0aCBnY2MgYW5kIEtlcmJlcm9zIFYvSVYsIFNTTCwgLi4uCi1zb2xhcmlzMjVnK2ty YjUra3JiNCtvcGVuc3NsK3NoYWRvdzoKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNvbGFyaXMy eGcra3JiNStrcmI0K29wZW5zc2wrc2hhZG93IFwKLQlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 IFwKLQkiS0ZMQUdTPS1mdW5zaWduZWQtY2hhciAtRFNPTEFSSVMyNSAkKEtGTEFHUykiCi0KLSNT b2xhcmlzIDIuNSwgZ2NjLCBTdW5MaW5rIFguMjUgYWRkZWQuCi1zb2xhcmlzMjVneDI1OgotCSQo TUFLRSkgIk1BS0U9JChNQUtFKSIgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBzb2xhcmlzMnhn eDI1IFwKLQkiS0ZMQUdTPS1EU09MQVJJUzI1ICQoS0ZMQUdTKSIKLQotI1NvbGFyaXMgMi42LCBn Y2MsIFN1bkxpbmsgWC4yNSBhZGRlZC4KLXNvbGFyaXMyNmd4MjU6Ci0JJChNQUtFKSAiTUFLRT0k KE1BS0UpIiBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IHNvbGFyaXMyeGd4MjUgXAotCSJLRkxB R1M9LURTT0xBUklTMjYgLURDS19QQU0gLURDS19TSEFET1cgJChLRkxBR1MpIiBcCi0JIkxJQlM9 IC1scGFtIgotCi0jU29sYXJpcyAyLjYsIFN1blBybyBjb21waWxlciwgY3Vyc2VzLCBUQ1AvSVAK LXNvbGFyaXMyNjoKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNvbGFyaXMyNXggS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0tRFNPTEFSSVMyNiAtRENLX1BBTSAtRENLX1NI QURPVyAkKEtGTEFHUykiIFwKLQkiTElCUz0gLWxwYW0iCi0KLSNTb2xhcmlzIDIuNiB3aXRoIGdj Ywotc29sYXJpczI2ZzoKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIEtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gc29sYXJpczJ4ZyBcCi0JIktGTEFHUz0gLURTT0xBUklTMjYgLURDS19QQU0gLURD S19TSEFET1cgJChLRkxBR1MpIiBcCi0JIkxJQlMgPSAtbHBhbSIKLQotI1NvbGFyaXMgMi42IHdp dGggZ2NjIGFuZCBTU0wKLXNvbGFyaXMyNmcrb3BlbnNzbDoKLQkkKE1BS0UpICJNQUtFPSQoTUFL RSkiICBzb2xhcmlzMnhnK29wZW5zc2wrcGFtK3NoYWRvdyBcCi0JS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfSAiS0ZMQUdTPSAtRFNPTEFSSVMyNiAkKEtGTEFHUykiCi0KLSNTb2xhcmlzIDIuNiB3 aXRoIGdjYywgbm8gY3Vyc2VzIChlLmcuIGJlY2F1c2UgbGlidGVybWxpYiBpcyBtaXNzaW5nKS4K LXNvbGFyaXMyNmduYzoKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIEtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gc29sYXJpczJ4Z25jIFwKLQkiS0ZMQUdTPSAtRFNPTEFSSVMyNiAtRENLX1BBTSAt RENLX1NIQURPVyAkKEtGTEFHUykiIFwKLQkiTElCUz0gLWxwYW0iCi0KLSNTb2xhcmlzIDIuNiwg U3VuUHJvIGNvbXBpbGVyLCB3aXRoIFN1bkxpbmsgWC4yNSBzdXBwb3J0Lgotc29sYXJpczI2eDI1 OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNvbGFyaXMgMi42K1guMjUg d2l0aCBTdW5Qcm8gY2MuLi4nCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCi0JIkNGTEFHUyA9IC1PIC1pIC1Vc3VuIC1EU1ZSNCAtRFNPTEFSSVMyNiAtRERJUkVO VCAtRFNVTlgyNSBcCi0JLURUQ1BTT0NLRVQgLURIREJVVUNQIC1EU0VMRUNUIC1EQ0tfQ1VSU0VT IC1EQ0tfUEFNIC1EQ0tfU0hBRE9XIFwKLQktRENLX05FV1RFUk0gLURTVEVSTUlPWCAtREZORkxP QVQgLURQT1NJWF9DUlRTQ1RTIC1ETk9MRUFSTiBcCi0JLUkvb3B0L1NVTldjb25uL2luY2x1ZGUg JChLRkxBR1MpIiBcCi0JIkxJQlM9IC1sdGVybWxpYiAtTC9vcHQvU1VOV2Nvbm4vbGliIC1SL29w dC9TVU5XY29ubi9saWIgXAotCS1sc29ja3gyNSAtbHNvY2tldCAtbG5zbCAtbG0gLWxyZXNvbHYg LWxwYW0iCi0KLSNTb2xhcmlzIDcgKDIuNykgd2l0aCBTdW4gQ0MKLXNvbGFyaXM3OgotCSQoTUFL RSkgIk1BS0U9JChNQUtFKSIgc29sYXJpczI1eCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwK LQkiS0ZMQUdTPS1EU09MQVJJUzcgLURDS19QQU0gLURDS19TSEFET1cgJChLRkxBR1MpIiBcCi0J IkxJQlM9IC1scGFtIgotCi0jU29sYXJpcyA3IHdpdGggZ2NjICgzMi1iaXQpCi1zb2xhcmlzN2c6 Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzb2xhcmlzMnhnIEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gXAotCSJLRkxBR1M9LURTT0xBUklTNyAtRENLX1BBTSAtRENLX1NIQURPVyAkKEtGTEFH UykiIFwKLQkiTElCUz0gLWxwYW0iCi0KLSNTb2xhcmlzIDcgd2l0aCBnY2MgKyBLZXJiZXJvcyBJ ViAoMzItYml0KQotc29sYXJpczdnK2tyYjQ6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzb2xh cmlzMnhnK2tyYjQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0tRFNPTEFS SVM3IC1EQ0tfUEFNIC1EQ0tfU0hBRE9XICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAtbHBhbSIKLQot c29sYXJpczdnK29wZW5zc2wremxpYitwYW0rc2hhZG93OgotCSQoTUFLRSkgIk1BS0U9JChNQUtF KSIgc29sYXJpczJ4ZytvcGVuc3NsK3psaWIrcGFtK3NoYWRvdyBcCi0JS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBcCi0JIktGTEFHUz0tRFNPTEFSSVM3IC1EQ0tfUEFNIC1EQ0tfU0hBRE9XICQo S0ZMQUdTKSIKLQotI1NvbGFyaXMgNyB3aXRoIGdjYyArIE9wZW5TU0wgKDMyLWJpdCkKLXNvbGFy aXM3ZytvcGVuc3NsK3psaWIrc3JwK3BhbStzaGFkb3c6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0Up IiBzb2xhcmlzMnhnK29wZW5zc2wremxpYitzcnArcGFtK3NoYWRvdyBcCi0JS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0tRFNPTEFSSVM3IC1EQ0tfUEFNIC1EQ0tfU0hBRE9X ICQoS0ZMQUdTKSIKLQotI1NvbGFyaXMgOAotc29sYXJpczg6Ci0JJChNQUtFKSAiTUFLRT0kKE1B S0UpIiBzb2xhcmlzMjV4IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9LURT T0xBUklTOCAtRENLX1BBTSAtRENLX1NIQURPVyAkKEtGTEFHUykiIFwKLQkiTElCUz0gLWxwYW0i Ci0KLSNTb2xhcmlzIDggd2l0aCBnY2MgKDMyLWJpdCkKLXNvbGFyaXM4ZzoKLQkkKE1BS0UpICJN QUtFPSQoTUFLRSkiIHNvbGFyaXMyeGcgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktG TEFHUz0tRFNPTEFSSVM4IC1EQ0tfUEFNIC1EQ0tfU0hBRE9XICQoS0ZMQUdTKSIgXAotCSJMSUJT PSAtbHBhbSIKLQotIyBJbiBPcGVuU1NMIGJ1aWxkcyBhZGQgLWxkbCBpZiB5b3UgZ2V0IHVucmVz b2x2ZWQgcmVmZXJlbmNlcyBmb3IKLSMgZGxjbG9zZSwgZGxzeW0sIGRsb3BlbiwgZGxlcnJvci4K LQotI1NvbGFyaXMgOCB3aXRoIGdjYyArIE9wZW5TU0wgKDMyLWJpdCkKLXNvbGFyaXM4ZytvcGVu c3NsK3psaWIrcGFtK3NoYWRvdzoKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNvbGFyaXMyeGcr b3BlbnNzbCt6bGliK3BhbStzaGFkb3cgXAotCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIktG TEFHUz0tRFNPTEFSSVM4ICQoS0ZMQUdTKSIKLQotI1NvbGFyaXMgOCB3aXRoIGdjYyArIEtlcmJl cm9zIElWICgzMi1iaXQpCi1zb2xhcmlzOGcra3JiNDoKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSki IHNvbGFyaXMyeGcra3JiNCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPS1E U09MQVJJUzggLURDS19QQU0gLURDS19TSEFET1cgJChLRkxBR1MpIiBcCi0JIkxJQlM9IC1scGFt IgotCi1zb2xhcmlzOW5vbGZzOgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc29sYXJpczI1eCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPS1EU09MQVJJUzkgLURDS19QQU0g LURDS19TSEFET1cgLURVU0VfU1RSRVJST1IgJChLRkxBR1MpIiBcCi0JIkxJQlM9IC1scGFtIgot Ci0jU29sYXJpcyA5IHdpdGggbWFsbG9jIGRlYnVnZ2luZwotc29sYXJpczltZDoKLQkkKE1BS0Up IG1lcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLURGTkZMT0FU IC1PIC1Vc3VuIC1pIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgXAotCS1EU09MQVJJUzkgLURtYWxs b2M9ZG1hbGxvYyAtRGZyZWU9ZGZyZWUgLURNREVCVUcgXAotCS1EQ0tfUEFNIC1EQ0tfU0hBRE9X IC1EVVNFX1NUUkVSUk9SICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAtbHBhbSAtbHRlcm1saWIgLWxz b2NrZXQgLWxuc2wgLWxtIC1scmVzb2x2IgotCi0jU29sYXJpcyA5IHdpdGggZ2NjICsgT3BlblNT TCArIFNoYWRvdyAoMzItYml0KQotI0FkZCAtRE9QRU5TU0xfMDk3IGZvciBPcGVuU1NMIDAuOS43 IG9yIGxhdGVyLgotc29sYXJpczlnK29wZW5zc2wrc2hhZG93K3BhbSt6bGliOgotCSQoTUFLRSkg Ik1BS0U9JChNQUtFKSIgc29sYXJpczJ4ZytvcGVuc3NsK3psaWIrcGFtK3NoYWRvdyBcCi0JS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0tRFNPTEFSSVM5IC1ESERCVVVDUCAt RERJUkVOVCAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IFwKLQktRE5PX0RDTF9JTkVUX0FUT04gLURa TElCIC1EQ0tfUEFNIC1EQ0tfU0hBRE9XIC1ETElCREVTICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAt bHBhbSAtbGRlczQyNSAtbHogJChMSUJTKSIKLQotI1NvbGFyaXMgOSB3aXRoIGdjYyArIE9wZW5T U0wgKyBLZXJiZXJvcyA1ICsgS3JiNCArIFNoYWRvdyAoMzItYml0KQotI0FkZCAtRE9QRU5TU0xf MDk3IGZvciBPcGVuU1NMIDAuOS43IG9yIGxhdGVyLgotc29sYXJpczlnK2tyYjUra3JiNCtvcGVu c3NsK3NoYWRvdytwYW0remxpYjoKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNvbGFyaXMyeGcr a3JiNStrcmI0K29wZW5zc2wrc2hhZG93IFwKLQlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwK LQkiS0ZMQUdTPS1EU09MQVJJUzkgLURIREJVVUNQIC1ERElSRU5UIC1EX0ZJTEVfT0ZGU0VUX0JJ VFM9NjQgXAotCS1ETk9fRENMX0lORVRfQVRPTiAtRFpMSUIgLURDS19QQU0gLURDS19TSEFET1cg LURMSUJERVMgJChLRkxBR1MpIiBcCi0JIkxJQlM9IC1scGFtIC1sZGVzIC1seiAkKExJQlMpIgot Ci0jU29sYXJpcyA5IHdpdGggZ2NjICsgS2VyYmVyb3MgNCBhbmQgNToKLXNvbGFyaXM5ZytrcmI1 K2tyYjQ6Ci0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBDQz1nY2Mg Q0MyPWdjYyBcCi0JIkNGTEFHUyA9IC1PIC1Vc3VuIC1EU1ZSNCAtRFNPTEFSSVM5IC1EU1RFUk1J T1ggLURTRUxFQ1QgLURGTkZMT0FUIFwKLQktRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURESVJF TlQgLURIREJVVUNQIC1EVENQU09DS0VUIFwKLQktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfS0VS QkVST1MgLURLUkI1IC1ES1JCNCAtREtSQjUyNCBcCi0JLURfRklMRV9PRkZTRVRfQklUUz02NCBc Ci0JLURDS19FTkNSWVBUSU9OIC1EQ0tfREVTIC1EQ0tfQ0FTVCAtREJJR0JVRk9LIFwKLQkkKEs1 SU5DKSAkKEs1SU5DKS9rcmI1ICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAkKEs1TElCKSAtbHRlcm1s aWIgLWxzb2NrZXQgLWxuc2wgLWxtIC1scmVzb2x2IFwKLQktbGtyYjQgLWxjcnlwdG8gLWxnc3Nh cGlfa3JiNSAtbGtyYjUgLWxjb21fZXJyIC1sazVjcnlwdG8gXAotCS1sZGVzICQoTElCUykiCi0K LSNTb2xhcmlzIDksIDEwLCBvciAxMSB3aXRoIGdjYy4uLiAgCi0jVXNlcyBzdHJlYW1zIFBUWXMg cmF0aGVyIHRoYW4gQlNEIHB0eXMgYXMgaW4gQy1LZXJtaXQgOC4wIGFuZCBlYXJsaWVyLgotI1Ro aXMgdGFyZ2V0IGlzIGNoYWluZWQgdG8gYmUgdGhlIHNlY3VyZSBzb2xhcmlzOWcreHh4IHRhcmdl dHMgYmVsb3cuCi1zb2xhcmlzOWcgc29sYXJpczEwZyBzb2xhcmlzMTFnOgotCUBlY2hvICdNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNvbGFyaXMgOSBvciBsYXRlciB3aXRoIGdjYycKLQlA Y2FzZSBgdW5hbWUgLXJgIGluIFwKLQkgIDUuOSkgU09MQVJJU1ZFUlNJT049Ii1EU09MQVJJUzki IDs7IFwKLQkgIDUuMTApIFNPTEFSSVNWRVJTSU9OPSItRFNPTEFSSVMxMCIgOzsgXAotCSAgNS4x MSkgU09MQVJJU1ZFUlNJT049Ii1EU09MQVJJUzExIiA7OyBcCi0JICAqKSBTT0xBUklTVkVSU0lP Tj0iLURTT0xBUklTIiA7OyBcCi0JZXNhYyA7IFwKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIEND PSJnY2MgLW0zMiIgQ0MyPSJnY2MgLW0zMiIgeGVybWl0IFwKLQlLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLWcgLU8gLVVzdW4gLURTVlI0ICQkU09MQVJJU1ZFUlNJT04g LURVU0VfU1RSRVJST1IgXAotCS1EU1RFUk1JT1ggLURTRUxFQ1QgLURGTkZMT0FUIC1EQ0tfUEFN IC1EQ0tfU0hBRE9XIC1mdW5zaWduZWQtY2hhciBcCi0JLURIQVZFX1NUUkVBTVMgLURIQVZFX0dS QU5UUFQgLURIQVZFX1BUU05BTUUgLURQVVNIX1BURU0gXAotCS1EUFVTSF9MRFRFUk0gLURQVVNI X1RUQ09NUEFUIFwKLQktRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURESVJFTlQgLURIREJVVUNQ IC1EVENQU09DS0VUIFwKLQktRF9GSUxFX09GRlNFVF9CSVRTPTY0ICQoS0ZMQUdTKSIgXAotCSJM SUJTPSAtbHRlcm1saWIgLWxzb2NrZXQgLWxuc2wgLWxtIC1scmVzb2x2IC1scGFtICQoTElCUyki Ci0KLSNTb2xhcmlzIDksIDEwLCBvciAxMSB3aXRoIGdjYyArIEtlcmJlcm9zIDUgKyBPcGVuU1NM LgotI09LIEMtS2VybWl0IDkuMC4zMDEuCi1zb2xhcmlzOWcra3JiNStzc2wgc29sYXJpczEwZytr cmI1K3NzbCBzb2xhcmlzMTFnK2tyYjUrc3NsOgotCUBjYXNlIGBvcGVuc3NsIHZlcnNpb25gIGlu IFwKLQkgICowLjkuNyopIE9QRU5TU0xPUFRJT049Ii1ET1BFTlNTTF8wOTciIDs7IFwKLQkgICow LjkuOCopIE9QRU5TU0xPUFRJT049Ii1ET1BFTlNTTF8wOTgiIDs7IFwKLQkgICoxLlswLTldLlsw LTldKikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NMXzEwMCIgOzsgXAotCSAgKikgT1BFTlNTTE9Q VElPTj0iIiA7OyBcCi0JZXNhYyA7IFwKLQlIQVZFX0RFUz0nJzsgXAotCURFU19MSUI9Jyc7IFwK LQlpZiBscyAkKFNTTExJQikvbGliZGVzKiA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGw7IHRoZW4g XAotCSAgICAgIERFU19MSUI9Jy1sZGVzNDI1JzsgXAotCSAgICAgIEhBVkVfREVTPSctRENLX0RF UyAtRExJQkRFUyc7IFwKLSAgICAgICAgICAgICAgZWNobyAiSEFWRSBERVMiOyBcCi0gICAgICAg ICAgIGVsc2UgZWNobyAiTk8gREVTIjsgXAotCWZpOyBcCi0JR1NTQVBJTElCPScnOyBcCi0JSzVE SVI9YGVjaG8gJChLNUxJQikgfCBzZWQgJ3N8LUx8fCdgOyBcCi0JZWNobyBLNURJUj0kJEs1RElS OyBcCi0JaWYgbHMgJCRLNURJUi9saWJnc3NhcGlfa3JiNSogPiAvZGV2L251bGwgMj4gL2Rldi9u dWxsOyB0aGVuIFwKLSAgICAgICAgICAgICAgR1NTQVBJTElCPSctbGdzc2FwaV9rcmI1JzsgXAot ICAgICAgICAgIGVsc2UgR1NTQVBJTElCPSctbGdzc2FwaSc7IFwKLSAgICAgICAgZmk7IFwKLQkk KE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IENDPWdjYyBDQzI9Z2NjIFwK LQkiQ0ZMQUdTID0gLU8gLVVzdW4gLURTVlI0IC1EU09MQVJJUzkgLURTVEVSTUlPWCAtRFNFTEVD VCAtREZORkxPQVQgXAotCS1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtRERJUkVOVCAtREhEQlVV Q1AgLURUQ1BTT0NLRVQgIC1EQklHQlVGT0sgXAotCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19T U0wgLURaTElCIC1EQ0tfS0VSQkVST1MgLURLUkI1IFwKLQktRENLX0VOQ1JZUFRJT04gLURDS19D QVNUICQkT1BFTlNTTE9QVElPTiBcCi0JJCRIQVZFX0RFUyAkKFNTTElOQykgJChLNUlOQykgJChL NUlOQykva3JiNSAkKEtGTEFHUykiIFwKLQkiTElCUz0gJChTU0xMSUIpICQoSzVMSUIpIC1seiAt bHNzbCAtbHRlcm1saWIgLWxzb2NrZXQgLWxuc2wgLWxtIFwKLQktbHJlc29sdiAtbGNyeXB0byBc Ci0JJCRHU1NBUElMSUIgLWxrcmI1IC1sY29tX2VyciAtbGs1Y3J5cHRvICQkREVTX0xJQiAkKExJ QlMpIgotCi0jU29sYXJpcyA5LCAxMCwgb3IgMTEgd2l0aCBnY2MsIDY0IGJpdCBidWlsZC4KLSNQ ZWVraW5nIGluc2lkZSBGSUxFIHN0cnVjdCBub3QgYWxsb3dlZCBpbiA2NC1iaXQgd29ybGQuCi0j RE9OJ1QgVVNFIFRISVMgT05FIE9OIFBDIEFSQ0hJVEVDVFVSRSAtIEl0IGNvbXBpbGVzIGFuZCBs aW5rcyBidXQgd29uJ3QgcnVuLgotI09LOiAyMDA5LzA5LzI1IChidXQgbm90IHRlc3RlZCBvbiBT b2xhcmlzIDExKQotc29sYXJpczlnNjQgc29sYXJpczEwZzY0IHNvbGFyaXMxMWc2NDoKLQlAZWNo byAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTb2xhcmlzIDkrKyB3aXRoIGdjYyA2NC1i aXQnCi0JQGNhc2UgYHVuYW1lIC1yYCBpbiBcCi0JICA1LjkpIFNPTEFSSVNWRVJTSU9OPSItRFNP TEFSSVM5IiA7OyBcCi0JICA1LjEwKSBTT0xBUklTVkVSU0lPTj0iLURTT0xBUklTMTAiIDs7IFwK LQkgIDUuMTEpIFNPTEFSSVNWRVJTSU9OPSItRFNPTEFSSVMxMSIgOzsgXAotCSAgKikgU09MQVJJ U1ZFUlNJT049Ii1EU09MQVJJUyIgOzsgXAotCWVzYWMgOyBcCi0JJChNQUtFKSAiTUFLRT0kKE1B S0UpIiBDQz0iZ2NjIC1tNjQiIENDMj0iZ2NjIC1tNjQiIHhlcm1pdCBcCi0JS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1nIC1PIC1Vc3VuIC1mdW5zaWduZWQtY2hhciBc Ci0JLURTVlI0ICQkU09MQVJJU1ZFUlNJT04gLUROT0FSUk9XS0VZUyBcCi0JLURTVEVSTUlPWCAt RFNFTEVDVCAtREZORkxPQVQgLURVU0VfU1RSRVJST1IgLURDS19QQU0gLURDS19TSEFET1cgXAot CS1ESEFWRV9TVFJFQU1TIC1ESEFWRV9HUkFOVFBUIC1ESEFWRV9QVFNOQU1FIC1EUFVTSF9QVEVN IFwKLQktRFBVU0hfTERURVJNIC1EUFVTSF9UVENPTVBBVCBcCi0JLURDS19DVVJTRVMgLURDS19O RVdURVJNIC1ERElSRU5UIC1ESERCVVVDUCAtRFRDUFNPQ0tFVCAkKEtGTEFHUykiIFwKLQkiTElC Uz0gLWx0ZXJtbGliIC1sc29ja2V0IC1sbnNsIC1sbSAtbHJlc29sdiAtbHBhbSAkKExJQlMpIgot Ci0jU29sYXJpcyA5LCAxMCwgb3IgMTEgd2l0aCBTdW5Qcm8gQ0MKLSNVc2VzIHN0cmVhbXMgUFRZ cyByYXRoZXIgdGhhbiBCU0QgcHR5cyBhcyBpbiBDLUtlcm1pdCA4LjAgYW5kIGVhcmxpZXIuCi0j VGhpcyB0YXJnZXQgaXMgY2hhaW5lZCB0byBieSB0aGUgc2VjdXJlIHRhcmdldHMgYmVsb3cuCi0j T0sgQy1LZXJtaXQgOS4wCi1zb2xhcmlzOSBzb2xhcmlzMTAgc29sYXJpczExOgotCUBlY2hvICdN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNvbGFyaXMgOSBvciBsYXRlciB3aXRoIFN1biBD QycKLQlAY2FzZSBgdW5hbWUgLXJgIGluIFwKLQkgIDUuOSkgU09MQVJJU1ZFUlNJT049Ii1EU09M QVJJUzkiIDs7IFwKLQkgIDUuMTApIFNPTEFSSVNWRVJTSU9OPSItRFNPTEFSSVMxMCIgOzsgXAot CSAgNS4xMSkgU09MQVJJU1ZFUlNJT049Ii1EU09MQVJJUzExIiA7OyBcCi0JICAqKSBTT0xBUklT VkVSU0lPTj0iLURTT0xBUklTIiA7OyBcCi0JZXNhYyA7IFwKLQkkKE1BS0UpICJNQUtFPSQoTUFL RSkiIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLU8gLVVz dW4gLURTVlI0ICQkU09MQVJJU1ZFUlNJT04gLURVU0VfU1RSRVJST1IgXAotCS1EU1RFUk1JT1gg LURTRUxFQ1QgLURGTkZMT0FUIC1EQ0tfUEFNIC1EQ0tfU0hBRE9XIFwKLQktREhBVkVfU1RSRUFN UyAtREhBVkVfR1JBTlRQVCAtREhBVkVfUFRTTkFNRSAtRFBVU0hfUFRFTSBcCi0JLURQVVNIX0xE VEVSTSAtRFBVU0hfVFRDT01QQVQgXAotCS1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtRERJUkVO VCAtREhEQlVVQ1AgLURUQ1BTT0NLRVQgXAotCS1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgJChLRkxB R1MpIiBcCi0JIkxJQlM9ICQoTElCUykgLWx0ZXJtbGliIC1sc29ja2V0IC1sbnNsIC1sbSAtbHJl c29sdiAtbHBhbSIKLQotIyBTb2xhcmlzIDksIDEwLCBvciAxMSB3aXRoIE9wZW5TU0wgYnVpbHQg d2l0aCBTdW4gQ0MuCi0jIEhlcmUncyBhbiBleGFtcGxlIG9mIGhvdyB0byBpbnZva2UgdGhpcyB0 YXJnZXQgaW4gY2FzZSB5b3VyIE9wZW5TU0wKLSMgaGVhZGVycyBhbmQgbGlicmFyaWVzIGFyZSBu b3QgaW4gL3Vzci9sb2NhbDoKLSMKLSMgbWFrZSBzb2xhcmlzOStvcGVuc3NsICJTU0xJTkM9IiAi U1NMTElCPSIgXAotIyAgIktGTEFHUz0gLUkvb3B0L29wZW5zc2wtMC45LjhrL2luY2x1ZGUgLUwv b3B0L29wZW5zc2wtMC45LjhrL2xpYiIKLSMKLSMgRG9uJ3QgdXNlICdtYWtlIC1lJyBiZWNhdXNl IHRoYXQgaW5oaWJpdHMgcGFzc2luZyBvZiBLRkxBR1MgdG8KLSMgdGhlIGJhc2UgKHNvbGFyaXM5 KSB0YXJnZXQuCi0jCi0jT0sgQy1LZXJtaXQgOS4wCi1zb2xhcmlzOStzc2wgc29sYXJpczEwK3Nz bCBzb2xhcmlzMTErc3NsIFwKLXNvbGFyaXM5K29wZW5zc2wgc29sYXJpczEwK29wZW5zc2wgc29s YXJpczExK29wZW5zc2w6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU29s YXJpcyA5LzEwLzExIHdpdGggT3BlblNTTDogY2MnCi0JQGNhc2UgYG9wZW5zc2wgdmVyc2lvbmAg aW4gXAotCSAgKjAuOS43KikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NMXzA5NyIgOzsgXAotCSAg KjAuOS44KikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NMXzA5OCIgOzsgXAotCSAgKjEuWzAtOV0u WzAtOV0qKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMTAwIiA7OyBcCi0JICAqKSBPUEVOU1NM T1BUSU9OPSIiIDs7IFwKLQllc2FjIDsgXAotCUhBVkVfREVTPScnOyBcCi0JREVTX0xJQj0nJzsg XAotCWlmIGxzICQoU1NMTElCKS9saWJkZXMqID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbDsgdGhl biBcCi0JICAgICAgREVTX0xJQj0nLWxkZXM0MjUnOyBcCi0JICAgICAgSEFWRV9ERVM9Jy1EQ0tf REVTIC1ETElCREVTJzsgXAotICAgICAgICAgICAgICBlY2hvICJIQVZFIERFUyI7IFwKLSAgICAg ICAgICAgZWxzZSBlY2hvICJOTyBERVMiOyBcCi0JZmk7IFwKLQkkKE1BS0UpICJNQUtFPSQoTUFL RSkiIHNvbGFyaXM5IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9LURDS19B VVRIRU5USUNBVElPTiAtRENLX1NTTCAtRFpMSUIgJCRIQVZFX0RFUyBcCi0JLUROT19EQ0xfSU5F VF9BVE9OICQkT1BFTlNTTE9QVElPTiAkKFNTTElOQykgJChLRkxBR1MpIiBcCi0JIkxJQlM9ICQo U1NMTElCKSAtbHogLWxzc2wgJCRERVNfTElCIC1sY3J5cHRvICAkKExJQlMpIgotCi0jIFNvbGFy aXMgOSBvciBsYXRlciB3aXRoIE9wZW5TU0wsIGJ1aWx0IHdpdGggZ2NjLgotIyBSZW1vdmUgLURO T19EQ0xfSU5FVF9BVE9OIGlmIGluZXRfYXRvbiBjb21lcyB1cCBtaXNzaW5nLiAgVGhpcyB0YXJn ZXQgbmljZWx5Ci0jIGNoYWlucyB0byB0aGUgc29sYXJpc3s5LDEwLDExfWcgdGFyZ2V0IGJ1dCBm b3Igc29tZSByZWFzb24gaXQgZG9lc24ndCB3b3JrIGlmCi0jIHlvdSBhZGQgdGhlIC1ERk9SV0FS RF9YIG9wdGlvbiwgdGh1cyB0aGUgc29sYXJpczlnK29wZW5zc2wrZm9yd2FyZF94IHRhcmdldC4K LSMKLSNPSzogMjAxMS8wNi8xNAotc29sYXJpczlnK3NzbCBzb2xhcmlzMTBnK3NzbCBzb2xhcmlz MTFnK3NzbCBcCi1zb2xhcmlzOWcrb3BlbnNzbCBzb2xhcmlzMTBnK29wZW5zc2wgc29sYXJpczEx ZytvcGVuc3NsOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNvbGFyaXMg OS8xMC8xMSB3aXRoIE9wZW5TU0w6IGdjYycKLQlAY2FzZSBgb3BlbnNzbCB2ZXJzaW9uYCBpbiBc Ci0JICAqMC45LjcqKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMDk3IiA7OyBcCi0JICAqMC45 LjgqKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMDk4IiA7OyBcCi0JICAqMS5bMC05XS5bMC05 XSopIE9QRU5TU0xPUFRJT049Ii1ET1BFTlNTTF8xMDAiIDs7IFwKLQkgICopIE9QRU5TU0xPUFRJ T049IiIgOzsgXAotCWVzYWMgOyBcCi0JSEFWRV9ERVM9Jyc7IFwKLQlERVNfTElCPScnOyBcCi0J aWYgbHMgJChTU0xMSUIpL2xpYmRlcyogPiAvZGV2L251bGwgMj4gL2Rldi9udWxsOyB0aGVuIFwK LQkgICAgICBERVNfTElCPSctbGRlczQyNSc7IFwKLQkgICAgICBIQVZFX0RFUz0nLURDS19ERVMg LURMSUJERVMnOyBcCi0gICAgICAgICAgICAgIGVjaG8gIkhBVkUgREVTIjsgXAotICAgICAgICAg ICBlbHNlIGVjaG8gIk5PIERFUyI7IFwKLQlmaTsgXAotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIg c29sYXJpczlnIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9LURDS19BVVRI RU5USUNBVElPTiAtRENLX1NTTCAtRFpMSUIgJCRIQVZFX0RFUyBcCi0JLUROT19EQ0xfSU5FVF9B VE9OICQkT1BFTlNTTE9QVElPTiAkKFNTTElOQykgJChLRkxBR1MpIiBcCi0JIkxJQlM9ICQoU1NM TElCKSAtbHogLWxzc2wgJCRERVNfTElCIC1sY3J5cHRvICAkKExJQlMpIgotCi0jIFNvbGFyaXMg OSBvciBsYXRlciB3aXRoIGdjYyArIE9wZW5TU0wgKyBTaGFkb3cgKDMyLWJpdCkuCi0jIFJlbW92 ZSAtRE5PX0RDTF9JTkVUX0FUT04gaWYgaW5ldF9hdG9uIGNvbWVzIHVwIG1pc3NpbmcuCi0jIElu Y2x1ZGVzIGxvbmcgZmlsZSBzdXBwb3J0IC0gbm90IHN1cmUgaWYgdGhpcyB3YXMgYXZhaWxhYmxl IGJlZm9yZSBTb2xhcmlzIDkuCi0jIERldGVjdHMgU29sYXJpcyB2ZXJzaW9uIGF1dG9tYXRpY2Fs bHkuCi0jCi1zb2xhcmlzOWcrb3BlbnNzbCtmb3J3YXJkX3g6Ci0JQGVjaG8gJ01ha2luZyBDLUtl cm1pdCAkKENLVkVSKSBmb3IgU29sYXJpcyA5IG9yIGxhdGVyIHdpdGggT3BlblNTTC4uLicKLQlA Y2FzZSBgb3BlbnNzbCB2ZXJzaW9uYCBpbiBcCi0JICAqMC45LjcqKSBPUEVOU1NMT1BUSU9OPSIt RE9QRU5TU0xfMDk3IiA7OyBcCi0JICAqMC45LjgqKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xf MDk4IiA7OyBcCi0JICAqMS5bMC05XS5bMC05XSopIE9QRU5TU0xPUFRJT049Ii1ET1BFTlNTTF8x MDAiIDs7IFwKLQkgICopIE9QRU5TU0xPUFRJT049IiIgOzsgXAotCWVzYWMgOyBjYXNlIGB1bmFt ZSAtcmAgaW4gXAotCSAgNS45KSBTT0xBUklTVkVSU0lPTj0iLURTT0xBUklTOSIgOzsgXAotCSAg NS4xMCkgU09MQVJJU1ZFUlNJT049Ii1EU09MQVJJUzEwIiA7OyBcCi0JICA1LjExKSBTT0xBUklT VkVSU0lPTj0iLURTT0xBUklTMTEiIDs7IFwKLQkgICopIFNPTEFSSVNWRVJTSU9OPSItRFNPTEFS SVMiIDs7IFwKLQllc2FjIDsgXAotCSQoTUFLRSkgeGVybWl0IAlLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9IENDPWdjYyBDQzI9Z2NjIFwKLQkiQ0ZMQUdTID0gLWcgLU8gLVVzdW4gLURTVlI0ICQk U09MQVJJU1ZFUlNJT04gXAotCS1ESEFWRV9TVFJFQU1TIC1ESEFWRV9HUkFOVFBUIC1ESEFWRV9Q VFNOQU1FIC1EUFVTSF9QVEVNIFwKLQktRFBVU0hfTERURVJNIC1EUFVTSF9UVENPTVBBVCBcCi0J LURTVEVSTUlPWCAtRFNFTEVDVCAtREZORkxPQVQgLURCSUdCVUZPSyAtRF9GSUxFX09GRlNFVF9C SVRTPTY0IFwKLQktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1NMIC1EQ0tfUEFNIC1EQ0tfU0hB RE9XIC1EWkxJQiAtRExJQkRFUyBcCi0JLURGT1JXQVJEX1ggJCRPUEVOU1NMT1BUSU9OICQoU1NM SU5DKSAkKEtGTEFHUykiIFwKLQkiTElCUz0gJChTU0xMSUIpIC1scGFtIC1sZGVzNDI1IC1seiAt bHRlcm1saWIgXAotCS1sc29ja2V0IC1sbnNsIC1sbSAtbHJlc29sdiAtbHNzbCAtbGNyeXB0byAt bHBhbSAtbHogJChMSUJTKSIKLQotIyBUaGVzZSB0d28gc2hvdWxkIGJlIGZvbGRlZCBpbiB3aXRo IHRoZSBvbmVzIGp1c3QgYWJvdmUuCi0KLSNTb2xhcmlzIDkgd2l0aCBnY2MgMy4xICsgT3BlblNT TCAoMzItYml0KQotc29sYXJpczlnK29wZW5zc2wremxpYitwYW0rc2hhZG93OgotCSQoTUFLRSkg Ik1BS0U9JChNQUtFKSIgc29sYXJpczJ4ZzMyK29wZW5zc2wremxpYitwYW0rc2hhZG93IFwKLQlL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPS1EU09MQVJJUzkgLURVU0VfU1RS RVJST1IgJChLRkxBR1MpIgotCi0jU29sYXJpcyAxMCB3aXRoIGdjYyAzLjEgKyBPcGVuU1NMICgz Mi1iaXQpCi1zb2xhcmlzMTBnK29wZW5zc2wremxpYitwYW0rc2hhZG93OgotCSQoTUFLRSkgIk1B S0U9JChNQUtFKSIgc29sYXJpczJ4ZzMyK29wZW5zc2wremxpYitwYW0rc2hhZG93IFwKLQlLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPS1EU09MQVJJUzEwIC1EVVNFX1NUUkVS Uk9SICQoS0ZMQUdTKSIKLQotI1RoZSBmb2xsb3dpbmcgKG9sZCwgb2xkKSBzdW5vc3h4eCBlbnRy aWVzIGFyZSBmb3IgZGVidWdnaW5nIGFuZCB0ZXN0aW5nIG9ubHkuCi0KLXN1bm9zNDF4OgotCSQo TUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1PIC1E U1VOT1M0MSAtRERJUkVOVCAtRE5PVExPRyAtRE5PTVNFTkQgXAotCS1ETk9VVUNQIC1ETk9TSUdX SU5DSCAtRE5PUkVESVJFQ1QgLUROT1BVU0ggLUROT0NDVFJBUCBcCi0JLUROT0lDUCAtRE5PTE9D QUwgJChLRkxBR1MpIgotCi0jU3VuT1MgNC4xLngsIGRlYnVnZ2luZyB3aXRoIFB1cmUgU29mdHdh cmUsIEluYy4sIFB1cmlmeSAyIChjb21tZXJjaWFsIHJ1bnRpbWUKLSNlcnJvci1kZXRlY3Rpb24g c29mdHdhcmUgZm9yIGNhdGNoaW5nIHdpbGQgYXJyYXkgcmVmZXJlbmNlcywgZXRjKS4KLSNCZWZv cmUgcnVubmluZyB0aGUgcmVzdWx0aW5nIHdlcm1pdCwgeW91J2xsIGFsc28gbmVlZCB0byBkZWZp bmUgYW5kIGV4cG9ydAotI3RoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIChhcyBp biB0aGlzIGV4YW1wbGUpOgotI1BVUklGWUhPTUU9L3Vzci9sb2NhbC9wdXJpZnkgOyBleHBvcnQg UFVSSUZZSE9NRQotI1BVUklGWUNBQ0hFRElSPS90bXAgOyBleHBvcnQgUFVSSUZZQ0FDSEVESVIK LXN1bm9zNDFjcDoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFN1bk9TIDQu MSAvIEJTRCAvIEN1cnNlcyAvIFB1cmlmeS4uLgotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAotCSJDQzI9IHB1cmlmeSAtY2FjaGVfZGlyPS91c3IvdG1wIGNjIiBc Ci0JIkNGTEFHUz0gLWcgLURTVU5PUzQxIC1ESERCVVVDUCAtRERJUkVOVCAtRFRDUFNPQ0tFVCBc Ci0JLURTQVZFRFVJRCAtRENLX0NVUlNFUyAkKEtGTEFHUykiIFwKLQkiTElCUz0gLWxjdXJzZXMg LWx0ZXJtY2FwIgotCi0jU3VuT1MgNC4xIHdpdGggbWFsbG9jIGRlYnVnZ2VyCi1zdW5vczQxbWQ6 Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTdW5PUyA0LjEgbWFsbG9jIGRl YnVnLi4uCi0JJChNQUtFKSBtZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNG TEFHUz0gLU8gLURTVU5PUzQxIC1ESERCVVVDUCAtRERJUkVOVCAtRFRDUFNPQ0tFVCBcCi0JLURT QVZFRFVJRCAkKEtGTEFHUykgLURtYWxsb2M9ZG1hbGxvYyAtRGZyZWU9ZGZyZWUgLURNREVCVUci Ci0KLXN1bm9zNDFnbWQ6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTdW5P UyA0LjEgd2l0aCBnY2MgYW5kIGN1cnNlcy4uLgotCSQoTUFLRSkgbWVybWl0IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gIkNDPSBnY2MgIiAiQ0MyPSBnY2MiIFwKLQkiQ0ZMQUdTPSAtZyAtRFNV Tk9TNDEgLURIREJVVUNQIC1ERElSRU5UIC1EVENQU09DS0VUIFwKLQktRE5ER1BXTkFNIC1EU0FW RURVSUQgLURDS19DVVJTRVMgLURSTE9HQ09ERSBcCi0JJChLRkxBR1MpIC1EbWFsbG9jPWRtYWxs b2MgLURmcmVlPWRmcmVlIC1ETURFQlVHIiBcCi0JIkxJQlM9IC1sY3Vyc2VzIC1sdGVybWNhcCIK LQotI1N1bk9TIHZlcnNpb24gNC4xLCBnY2MsIHByb2ZpbGluZyB3aXRoIGdwcm9mLCBubyBkZWJ1 Z2dpbmcuCi0jVG8gZ2V0IHByb2ZpbGUsICJtYWtlIHN1bm9zNDFwIiAob24gU3VuKSwgdGhlbiAi Li93ZXJtaXQiLiAgQWZ0ZXIgcnVubmluZwotI3dlcm1pdCwgImdwcm9mIC4vd2VybWl0IHwgbHBy IiAob3Igd2hhdGV2ZXIpIHRvIGdldCBleGVjdXRpb24gcHJvZmlsZS4KLXN1bm9zNDFwOgotCUBl Y2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU3VuT1MgNC54IHdpdGggcHJvZmlsaW5n Li4uCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0M9IGdjYyAi ICJDQzI9IGdjYyIgXAotCSJDRkxBR1M9IC1EU1VOT1M0MSAtRE5PREVCVUcgLURTQVZFRFVJRCAt RERJUkVOVCAtRFRDUFNPQ0tFVCBcCi0JLUROREdQV05BTSAkKEtGTEFHUykgLXBnIiAiTE5LRkxB R1MgPSAtcGciCi0KLSNTdW5PUyB2ZXJzaW9uIDQuMSBvciBsYXRlciwgQlNEIGVudmlyb25tZW50 LCBtaW5pbXVtIGZlYXR1cmVzLgotc3Vub3M0MW1pbjoKLQlAZWNobyBNaW5pbXVtIGludGVyYWN0 aXZlCi0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzdW5vczQxIEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gXAotCSJLRkxBR1M9LUROT1NQTCAtRE5PWE1JVCAtRE5PTVNFTkQgLUROT0ZSSUxMUyAt RE5PUkVUUlkgXAotCS1ETk9ESUFMIC1ETk9IRUxQIC1ETk9ERUJVRyAtRE5PVExPRyAtRE5PU0NS SVBUIC1ETk9DU0VUUyBcCi0JLUROT1NIT1cgLUROT1NFVEtFWSAtRE5PVVVDUCAtRE5PUkVDQUxM IC1ETk9SRURJUkVDVCBcCi0JLUROT1BVU0ggLUROT01ETUhVUCAtRE5PSkMgLUROT0ZEWkVSTyAt RE5PRVNDU0VRIFwKLQktRE5PTkVUIC1EQ0tfU01BTEwgLUROT0NLU1BFRUQgLUROT0NLVElNRVJT IC1ETk9MT0dJTiBcCi0JLUROT0NLWFlaIC1ETk9LRVJCRVJPUyAtRE5PTUtESVIgLUROT1BBVFRF Uk5TIC1ETk9QRVJNUyAtRE5PUElQRVNFTkQgXAotCS1ETk9SRUNVUlNJVkUgLUROT1JFTkFNRSAt RE5PUkVTRU5EIC1ETk9TRVRLRVkgXAotCS1ETk9UUklHR0VSIC1ETk9UVU5JTkcgJChLRkxBR1Mp IiAiTE5LRkxBR1MgPSAtcyIKLQotI1N1bk9TIHZlcnNpb24gNC4xLCBCU0QgZW52aXJvbm1lbnQs IG1pbiBzaXplLCBjb21tYW5kLWxpbmUgb25seS4uLgotc3Vub3M0MW06Ci0JQGVjaG8gTWluaW11 bSBzaXplCi0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzdW5vczQxbWluIEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAotCSJLRkxBR1M9LUROT0lDUCAkKEtGTEFHUykiCi0KLSNTdW5PUyB2ZXJz aW9uIDQuMSwgQlNEIGVudmlyb25tZW50LCBtaW4gc2l6ZSwgY21kLWxpbmUgb25seSwgcmVtb3Rl IG9ubHkuLi4KLSMKLXN1bm9zNDFtcjoKLQlAZWNobyBNaW5pbXVtIHNpemUKLQkkKE1BS0UpICJN QUtFPSQoTUFLRSkiIHN1bm9zNDFtaW4gS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktG TEFHUz0tRE5PSUNQIC1ETk9MT0NBTCAkKEtGTEFHUykiCi0KLSNTdW5PUyB2ZXJzaW9uIDQuMSwg QlNEIGVudmlyb25tZW50LCBtaW4gc2l6ZSwgaW50ZXJhY3RpdmUuLi4KLXN1bm9zNDFtaToKLQlA ZWNobyBNaW5pbXVtIHNpemUKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHN1bm9zNDFtaW4gS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0tRE5PQ01ETCAkKEtGTEFHUykiCi0K LSNTdW5PUyB2ZXJzaW9uIDQuMSwgQlNEIGVudmlyb25tZW50LCBtaW4gc2l6ZSwgaW50ZXJhY3Rp dmUsIHJlbW90ZSBvbmx5Li4uCi1zdW5vczQxbWlyOgotCUBlY2hvIE1pbmltdW0gc2l6ZQotCSQo TUFLRSkgIk1BS0U9JChNQUtFKSIgc3Vub3M0MW1pbiBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 IFwKLQkiS0ZMQUdTPS1ETk9DTURMIC1ETk9MT0NBTCAkKEtGTEFHUykiCi0KLSNTdW5PUyA0LjEs IFN5c3RlbSBWIFIzIGVudmlyb25tZW50ICgtaSBvcHRpb24gb21pdHRlZCkuCi1zdW5vczQxczU6 Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTdW5PUyA0LjEgU3lzdGVtIFYg UjMuLi4KLQlAZWNobyBGb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5IC0gTk9UIGZvciBwcm9kdWN0 aW9uIHVzZS4KLQlAZWNobyBGb3IgYSB1c2VhYmxlIHZlcnNpb24sIG1ha2Ugc3Vub3M0MSBpbnN0 ZWFkLgotCSQoTUFLRSkgd2VybWl0ICJDQz0gL3Vzci81YmluL2NjICIgIkNDMj0vdXNyLzViaW4v Y2MgIiBcCi0JS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1EU1VONFM1 IC1ERElSRU5UIC1ESERCVVVDUCAtRE5PTEVBUk4gLURDS19QT0xMICQoS0ZMQUdTKSAtTyIKLQot I0FzIGFib3ZlLCBidXQgd2l0aCBjdXJzZXMgc3VwcG9ydAotc3Vub3M0MXM1YzoKLQlAZWNobyBN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFN1bk9TIDQuMSBTeXN0ZW0gViBSMy4uLgotCUBl Y2hvIEN1cnNlcyBpbmNsdWRlZC4KLQlAZWNobyBGb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5IC0g Tk9UIGZvciBwcm9kdWN0aW9uIHVzZS4KLQlAZWNobyBGb3IgYSB1c2VhYmxlIHZlcnNpb24sIG1h a2Ugc3Vub3M0MSBpbnN0ZWFkLgotCSQoTUFLRSkgd2VybWl0ICJDQz0gL3Vzci81YmluL2NjICIg IkNDMj0vdXNyLzViaW4vY2MgIiBcCi0JS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNG TEFHUyA9IC1EU1VONFM1IC1ERElSRU5UIC1ESERCVVVDUCAtRE5PTEVBUk4gXAotCS1EQ0tfUE9M TCAtRENLX0NVUlNFUyAtRENLX05FV1RFUk0gJChLRkxBR1MpIC1PIiAiTElCUz0gLWxjdXJzZXMi Ci0KLSNBcyBhYm92ZSwgYnV0IHdpdGggY3Vyc2VzIHN1cHBvcnQgQU5EIG5ldCBzdXBwb3J0Ci1z dW5vczQxczV0Y3BjOgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU3VuT1Mg NC4xIFN5c3RlbSBWIFIzLi4uCi0JQGVjaG8gVENQL0lQIGFuZCBjdXJzZXMgaW5jbHVkZWQuICBO byBkZWJ1ZyBsb2cuCi0JQGVjaG8gRm9yIHRlc3RpbmcgcHVycG9zZXMgb25seSAtIE5PVCBmb3Ig cHJvZHVjdGlvbiB1c2UuCi0JQGVjaG8gRm9yIGEgdXNlYWJsZSB2ZXJzaW9uLCBtYWtlIHN1bm9z NDEgaW5zdGVhZC4KLQkkKE1BS0UpIHhlcm1pdCAiQ0M9IC91c3IvNWJpbi9jYyAiICJDQzI9L3Vz ci81YmluL2NjICIgXAotCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAt RFNVTjRTNSAtRERJUkVOVCAtREhEQlVVQ1AgLURDS19QT0xMIFwKLQktRE5PREVCVUcgLURDS19D VVJTRVMgLURDS19ORVdURVJNIC1EVENQU09DS0VUICQoS0ZMQUdTKSAtTyIgXAotCSJMSUJTPSAt bGN1cnNlcyAtbHJlc29sdiIKLQotIyAoRW5kIG9mIFN1bk9TIHRlc3QgZW50cmllcy4uLikKLQot I0Fwb2xsbyB3aXRoIERvbWFpbiBTUjEwLjAgb3IgbGF0ZXIsIEJTRCBlbnZpcm9ubWVudAotI1Jl cG9ydGVkbHksIGl0IG1pZ2h0IGFsc28gaGVscCB0byBhZGQgJy1BLHN5c3R5cGU9YnNkNC4zJyB0 byBDRkxBR1MuCi0jUmVwb3J0ZWRseSwgdGhlcmUgaXMgYWxzbyBhIHByb2JsZW0gd2l0aCBnZXRj ICYgcHV0YyBtYWNyb3MgdGhhdCBjYW4KLSNiZSBoYW5kbGVkIGJ5IHVzaW5nICcjaWZkZWYgYXBv bGxvJyBzb21ld2hlcmUgdG8gcmVkZWZpbmUgdGhlbT8/PwotI09uIHRoZSBvdGhlciBoYW5kLCBv dGhlciByZXBvcnRzIGluZGljYXRlIHRoYXQgaXQgd29ya3MgZmluZSBhcy1pcy4KLSNOT1RFOiBU aGlzIGVudHJ5IHdhcyBwcmV2aW91c2x5IGxpa2UgdGhpczoKLSMJJChNQUtFKSB3ZXJtaXQgIkNG TEFHUz0gLUROT0ZJTEVIIC1EQlNENCAkKEtGTEFHUykgLVVhZWdpcyBcCi0jCS1EVENQU09DS0VU IC1VX19TVERDX18iCi0jUmVwb3J0cyAoRGVjIDkxKSBpbmRpY2F0ZSBTUjEwIGhhcyBhbiBBTlNJ LWNvbXBsaWFudCBDIGNvbXBpbGVyLAotI2luIGFkZGl0aW9uIHRvIGFuIG9sZGVyIG9uZSB0aGF0 IGNsYWltZWQgdG8gYmUgQU5TSS1jb21wbGlhbnQgYnV0IHdhc24ndC4KLSNUaGUgZm9sbG93aW5n IG1ha2UgZW50cnkgKHBsdXMgY2hlY2tzIHRoYXQgYXJlIG1hZGUgaW4gY2tjZGViLmgpIGRldGVj dAotI3doaWNoIGNvbXBpbGVyIGlzIHVzZWQgYW5kIGRlZmluZSB0aGUgQ0tfQU5TSUMgb3IgTk9B TlNJIGZsYWdzIGFjY29yZGluZ2x5Lgotc3IxMC1ic2Q6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBBcG9sbG8gU1IxMC4wIC8gQlNEIC4uLgotCSQoTUFLRSkgd2VybWl0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1PIC1EQVBPTExPU1IxMCAtREJT RDQzIC1EVENQU09DS0VUIC1EQ0tfQ1VSU0VTIC1ETk9MRUFSTiBcCi0JLVVhZWdpcyAkKEtGTEFH UykiICJMSUJTPSAtbGN1cnNlcyAtbHRlcm1jYXAiCi0KLSNBcG9sbG8gd2l0aCBEb21haW4gU1Ix MC4wIG9yIGxhdGVyLCBTeXN0ZW0gViBSMyBlbnZpcm9ubWVudC4KLSNEb24ndCB1c2UgdGhlIG9w dGltaXplciAoLU8pLCBpdCBjYXVzZXMgcHJvYmxlbXMgYXQgcnVudGltZS4KLXNyMTAtczVyMzoK LQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFwb2xsbyBTUjEwLjAgLyBTeXMg ViBSMyAuLi4KLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQki Q0ZMQUdTPSAtRE5PRklMRUggLURTVlIzIC1EQVBPTExPU1IxMCAtRE5PTEVBUk4gJChLRkxBR1Mp IFwKLQktVWFlZ2lzIC1VX19TVERDX18iCi0KLSNBcG9sbG8gRG9tYWluL0lYICh1bnRlc3RlZCwg dHJ5IHRoaXMgaWYgc3IxMC1ic2QgZG9lc24ndCB3b3JrKQotIyAtRFRDUFNPQ0tFVCBjYW4gcHJv YmFibHkgYmUgYWRkZWQgaGVyZS4KLWFwb2xsb2JzZDoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQg JChDS1ZFUikgZm9yIEFwb2xsbyBEb21haW4vSVguLi4KLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0M9IC9iaW4vY2MgIiAiQ0MyPSAvYmluL2NjICIgXAot CSJDRkxBR1M9IC1ETk9GSUxFSCAtREJTRDQgLURBUE9MTE9CU0QgLUROT0xFQVJOICQoS0ZMQUdT KSAtVWFlZ2lzIgotCi0jVmVyc2lvbiA3IFVuaXggKHNlZSBjb21tZW50cyBuZWFyIHRvcCBvZiBt YWtlZmlsZSkKLXY3OgotCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgVU5JWCBW ZXJzaW9uIDcuCi0JQGVjaG8gUmVhZCB0aGUgbWFrZWZpbGUgaWYgeW91IGhhdmUgdHJvdWJsZSB3 aXRoIHRoaXMuLi4KLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwK LQkiQ0ZMQUdTPS1EVjcgLURQUk9DTkFNRT1cXFwiJChQUk9DKVxcXCIgXAotCS1EQk9PVE5BTUU9 XFxcIiQoQk9PVEZJTEUpXFxcIiAtRE5QUk9DTkFNRT1cXFwiJChOUFJPQylcXFwiIFwKLQktRE5Q VFlQRT0kKE5QVFlQRSkgJChESVJFQ1QpIC1ET19SRFdSPTIgLURPX05ERUxBWT0wIC1ET19TQ0NT X0lEIFwKLQktRE5PTEVBUk4gJChLRkxBR1MpIgotCi0jQVQmVCBVTklYIFN5c3RlbSBWIFIzLCBz aWduYWwoKSBpcyB2b2lkIHJhdGhlciB0aGFuIGludC4KLSNVc2VzIGRpcmVudC5oIGFuZCBIb25l eSBEYW5CZXIgVVVDUC4KLSNBZGQgdGhlIC1pIGxpbmsgb3B0aW9uIGlmIG5lY2Vzc2FyeS4KLSNJ ZiB5b3UgZ2V0IGVycm9ycyBsaWtlICJ3c19yb3cgdW5kZWZpbmVkIiBpbiBja3V0aW8uYywgYWRk IC1ETk9OQVdTLgotc3lzNXIzOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9y IEFUJlQgVU5JWCBTeXN0ZW0gViBSMy4uLicKLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtRFNWUjMgLURESVJFTlQgLURIREJVVUNQIC1ETk9M RUFSTiAkKEtGTEFHUykgLU8iIFwKLQkiTE5LRkxBR1M9IgotCi0jQXMgYWJvdmUsIHBsdXMgY3Vy c2VzLgotc3lzNXIzYzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBVCZU IFVOSVggU3lzdGVtIFYgUjMgKyBjdXJzZXMuLi4nCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURTVlIzIC1ERElSRU5UIC1ESERCVVVDUCAt RENLX0NVUlNFUyAtRE5PTkFXUyAtRE5PTEVBUk4gXAotCSQoS0ZMQUdTKSAtTyIgIkxOS0ZMQUdT PSIgIkxJQlMgPSAtbHRlcm1saWIiCi0KLSNTeXN0ZW0gViBSMy4yIGZvciBQQ3MgYnVpbHQgb24g SW50ZXJhY3RpdmUgVU5JWCBTVi8zODYgUjQueAotI2J1dCB3aXRoIGFsbCBjYWxscyB0byBkdXAy KCkgZGlzYWJsZWQgYmVjYXVzZSBnZW5lcmljIFNWUjMgZG9lcyBub3QgaGF2ZSBkdXAyLgotIyAo VGhlIC1saW5ldCBsaWJyYXJ5IG1pZ2h0IG5vdCBuZWVkIHRvIGJlIGluIHRoaXMgb25lLikKLXN5 czVyMzJpczoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTeXN0ZW0gVi8z ODYgUjMyCi0JJChNQUtFKSB3ZXJtaXQgQ0M9IiQoQ0MpIiBDQzI9IiQoQ0MyKSIgXAotCSJDRkxB R1MgPSAtRFNWUjMgLURESVJFTlQgLURIREJVVUNQIC1PIC1ETk9DU0VUUyAtRE5PUkVBTFBBVEgg XAotCS1EVUlEX1Q9dXNob3J0IC1ER0lEX1Q9dXNob3J0IC1ESTM4NklYIC1EU1ZSM0pDIC1EQ0tf Q1VSU0VTIC1ETk9OQVdTIFwKLQktRFBPU0lYX0pDIC1EQ0tfUkVESVIgLURDS19QT0xMIC1ERENM R0VUQ1dEIC1ETk9GRFpFUk8gLUROT1JFRElSRUNUIFwKLQktRE5PWkVYRUMgLUROT0xFQVJOICQo S0ZMQUdTKSIgIkxJQlM9LWxjdXJzZXMgLWxjX3MgLWxpbmV0IgotCi0jU3lzdGVtIFYgUjMuMiBm b3IgUENzIGJ1aWx0IG9uIEludGVyYWN0aXZlIFVOSVggU1YvMzg2IFI0LngKLSNidXQgd2l0aCBh bGwgY2FsbHMgdG8gZHVwMigpIGRpc2FibGVkIGJlY2F1c2UgZ2VuZXJpYyBTVlIzIGRvZXMgbm90 IGhhdmUgZHVwMi4KLSNXaXRoIFRDUC9JUCBhZGRlZC4KLXN5czVyMzJpc25ldDoKLQlAZWNobyAn TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTeXN0ZW0gVi8zODYgUjMyICsgVENQL0lQCi0J JChNQUtFKSB3ZXJtaXQgQ0M9IiQoQ0MpIiBDQzI9IiQoQ0MyKSIgXAotCSJDRkxBR1MgPSAtRFNW UjMgLURESVJFTlQgLURIREJVVUNQIC1PIC1ETk9DU0VUUyAtRE5PUkVBTFBBVEggXAotCS1EVUlE X1Q9dXNob3J0IC1ER0lEX1Q9dXNob3J0IC1ESTM4NklYIC1EU1ZSM0pDIC1EQ0tfQ1VSU0VTIC1E Tk9OQVdTIFwKLQktRFBPU0lYX0pDIC1EQ0tfUkVESVIgLURDS19QT0xMIC1ERENMR0VUQ1dEIC1E Tk9GRFpFUk8gLUROT1JFRElSRUNUIFwKLQktRE5PTEVBUk4gLUROT1pFWEVDIC1EVENQU09DS0VU ICQoS0ZMQUdTKSIgIkxJQlM9LWxjdXJzZXMgLWxjX3MgLWxpbmV0IgotCi1pY2xzeXM1cjM6Ci0J bWFrZSBzeXM1cjMgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBLRkxBR1M9LURJQ0xTVlIzCi0K LSNBVCZUIFVOSVggU3lzdGVtIFYgUjMuICBBcyBhYm92ZSwgYnV0IG5vIEFOU0kgcHJvdG90eXBp bmcuCi1zeXM1cjNuYToKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBVCZU IFVOSVggU3lzdGVtIFYgUjMuLi4nCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfSBcCi0JIkNGTEFHUz0gLURTVlIzIC1ERElSRU5UIC1ESERCVVVDUCAtRE5PQU5TSSAt RE5PTEVBUk4gJChLRkxBR1MpIC1PIiBcCi0JIkxOS0ZMQUdTPSIKLQotI0FUJlQgVU5JWCBTeXN0 ZW0gViBSMywgZm9yIDNCIGNvbXB1dGVycyB3aXRoIFdvbGxvbmdvbmcgVENQL0lQLgotc3lzNXIz bmV0M2I6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCBVTklYIFNW UjMvM0IvV29sbG9uZ29uZy4uLicKLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLURTVlIzIC1ERElSRU5UIC1ESERCVVVDUCAtRFdPTExPTkdP TkcgLUROT0xFQVJOICQoS0ZMQUdTKSBcCi0JLU8iICJMSUJTPSAtbG5ldCAtbG5zbF9zIiAiTE5L RkxBR1MgPSIKLQotI0FUJlQgVU5JWCBTeXN0ZW0gViBSMywgc2lnbmFsKCkgaXMgdm9pZCByYXRo ZXIgdGhhbiBpbnQuCi0jVXNlcyBkaXJlbnQuaCBhbmQgSG9uZXkgRGFuQmVyIHV1Y3AsIGhhcyA8 dGVybWlveC5oPi4KLSNIYXMgPHRlcm1pb3guaD4gZm9yIFJUUy9DVFMgZmxvdyBjb250cm9sLgot c3lzNXIzdHg6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCBVTklY IFN5c3RlbSBWIFIzLi4uJwotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gXAotCSJDRkxBR1MgPSAtRFNWUjMgLURESVJFTlQgLURIREJVVUNQIC1EVEVSTUlPWCAtRE5P TEVBUk4gXAotCSQoS0ZMQUdTKSAtaSAtTyIgIkxOS0ZMQUdTID0iCi0KLSNBVCZUIFVOSVggU3lz dGVtIFYgUjMsIHNpZ25hbCgpIGlzIHZvaWQgcmF0aGVyIHRoYW4gaW50LgotI1VzZXMgZGlyZW50 LmggYW5kIEhvbmV5IERhbkJlciB1dWNwLCBoYXMgPHRlcm1pb3guaD4uCi0jSGFzIDxzeXMvdGVy bWlveC5oPiBmb3IgUlRTL0NUUyBmbG93IGNvbnRyb2wuCi1zeXM1cjNzeDoKLQlAZWNobyAnTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBVCZUIFVOSVggU3lzdGVtIFYgUjMuLi4nCi0JJChN QUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1EU1ZS MyAtRERJUkVOVCAtREhEQlVVQ1AgLURTVEVSTUlPWCAtRE5PTEVBUk4gXAotCSQoS0ZMQUdTKSAt aSAtTyIgIkxOS0ZMQUdTID0iCi0KLSNBVCZUIFVOSVggU3lzdGVtIFYgUjQuCi0jSGFzIDx0ZXJt aW94Lmg+Lgotc3lzNXI0OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFU JlQgVU5JWCBTeXN0ZW0gViBSNC4uLicKLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLU8gLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCAtRFRF Uk1JT1ggLUROT0xFQVJOICQoS0ZMQUdTKSIgXAotCSJMTktGTEFHUyA9IC1zIgotCi0jQVQmVCBV TklYIFN5c3RlbSBWIFI0IHdpdGggV29sbG9uZ29uZyBUQ1AvSVAuCi0jSGFzIDx0ZXJtaW94Lmg+ Lgotc3lzNXI0bmV0OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFN5c3Rl bSBWIFI0ICsgV29sbG9uZ29uZyBUQ1AvSVAuLi4nCi0JQGVjaG8gJyBJZiBzb2NrZXRzLWxpYnJh cnkgcm91dGluZXMgYXJlIG1pc3NpbmcgYXQgbGluayB0aW1lLCB0aGVuJwotCUBlY2hvICcgdHJ5 IHRoZSBzeXM1cjRuZXQyIGVudHJ5LicKLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLU8gLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCAtRE5P TEVBUk4gXAotCS1EVEVSTUlPWCAtRFdPTExPTkdPTkcgJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAt cyIKLQotI0FzIGFib3ZlLCBidXQgbmVlZHMgbGlicyBpbmNsdWRlZC4KLXN5czVyNG5ldDI6Ci0J QGVjaG8gJyBQTEVBU0UgUkVBRCBja3VpbnMudHh0IElGIFlPVSBHRVQgTUlTU0lORyBIRUFERVIg RklMRVMuJwotCUBlY2hvICcgKFNlYXJjaCBmb3IgV09MTE9OR09ORy4uLiknCi0JJChNQUtFKSBz eXM1cjRuZXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiTElCUz0gLWxzb2NrZXQgLWxuc2wi Ci0KLSNBcyBhYm92ZSBwbHVzIGN1cnNlcy4KLXN5czVyNG5ldDJjOgotCWVjaG8gJ01ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgU3lzdGVtIFYgUjQgKyBXb2xsb25nb25nIFRDUC9JUC4uLicK LQlAZWNobyAnIFBMRUFTRSBSRUFEIGNrdWlucy50eHQgSUYgWU9VIEdFVCBNSVNTSU5HIEhFQURF UiBGSUxFUy4nCi0JQGVjaG8gJyAoU2VhcmNoIGZvciBXT0xMT05HT05HLi4uKScKLQkkKE1BS0Up IHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLU8gLURTVlI0 IC1ERElSRU5UIC1ESERCVVVDUCAtRE5PTEVBUk4gXAotCS1EVEVSTUlPWCAtRFdPTExPTkdPTkcg LURDS19DVVJTRVMgJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAtcyIgXAotCSJMSUJTPSAtbHNvY2tl dCAtbG5zbCAtbGN1cnNlcyIKLQotI0RFTEwgVU5JWCBTeXN0ZW0gViBSNC4KLSNIYXMgPHN5cy90 ZXJtaW94Lmg+LCByZWd1bGFyIEJlcmtlbGV5IHNvY2tldHMgbGlicmFyeSwgaS5lLiBpbi5oIGFu ZCBpbmV0LmgKLSNhcmUgbm90IG1pc3BsYWNlZCBpbiBzeXMgKHJhdGhlciB0aGFuIG5ldGluZXQg YW5kIGFycGEsIHJlc3BlY3RpdmVseSkuCi0jVXNlcyBBTlNJIEMgY29uc3RydWN0cywgYWR2aXNv cnkgZmlsZSBsb2NraW5nIG9uIGRldmljZXMsIGV0Yy4KLSNXYXJuaW5nOiAtRFNURVJNSU9YIGVu YWJsZXMgaGFyZHdhcmUgZmxvdyBjb250cm9sIChSVFMvQ1RTKSwgYnV0IHJlcG9ydGVkbHkKLSN0 aGlzIGRvZXMgbm90IHdvcmsgd2l0aCB0aGUgbm9ybWFsIGRyaXZlcnMuICBIb3dldmVyLCBpdCBt aWdodCBzdGlsbCB3b3JrCi0jb24gbm9uLURlbGwgc3lzdGVtcywgb3IgZXZlbiBEZWxsIHN5c3Rl bXMgd2l0aCBkaWZmZXJlbnQgZHJpdmVycyBpbnN0YWxsZWQuCi1kZWxsc3lzNXI0OgotCUBlY2hv ICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIERFTEwgVU5JWCBTeXN0ZW0gViBSNC4uLicK LQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0g LU8gLURTVlI0IC1EREVMTF9TVlI0IC1ERElSRU5UIC1ESERCVVVDUCBcCi0JLURUQ1BTT0NLRVQg LURTVEVSTUlPWCAtRENLX1BPTEwgJChLRkxBR1MpIiBcCi0JIkxJQlM9IC1sc29ja2V0IC1sbnNs IiAiTE5LRkxBR1MgPSAtcyIKLQotI0FzIGFib3ZlLCBjdXJzZXMgc3VwcG9ydCBhZGRlZC4uLgot ZGVsbHN5czVyNGM6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgREVMTCBV TklYIFN5c3RlbSBWIFI0Li4uJwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gXAotCSJDRkxBR1MgPSAtTyAtRFNWUjQgLURERUxMX1NWUjQgLURESVJFTlQgLURIREJV VUNQIFwKLQktRFRDUFNPQ0tFVCAtRFNURVJNSU9YIC1EQ0tfQ1VSU0VTIC1EQ0tfUE9MTCBcCi0J JChLRkxBR1MpIiAiTElCUz0gLWxzb2NrZXQgLWxuc2wgLWxjdXJzZXMgLWx0ZXJtY2FwIiAiTE5L RkxBR1MgPSAtcyIKLQotI01pbmltdW0gaW50ZXJhY3RpdmU6IEFzIGFib3ZlLCBidXQgd2l0aCBl dmVyeSBjb25jZWl2YWJsZSBvcHRpb24gcmVtb3ZlZC4KLWRlbGxzeXM1cjRtaToKLQlAZWNobyAn TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBERUxMIFVOSVggU3lzdGVtIFYgUjQuLi4nCi0J QGVjaG8gJ01pbmltdW0tc2l6ZSBpbnRlcmFjdGl2ZScKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLU8gLURTVlI0IC1EREVMTF9TVlI0IC1E RElSRU5UIFwKLQktVVRDUFNPQ0tFVCAtRE5PQ01ETCAtRE5PU1BMIC1ETk9YTUlUIC1EQ0tfUE9M TCBcCi0JLUROT01TRU5EIC1ETk9GUklMTFMgLUROT0RJQUwgLUROT0hFTFAgLUROT0RFQlVHIC1E Tk9UTE9HIFwKLQktRE5PU0NSSVBUIC1ETk9DU0VUUyAtRE5PU0hPVyAtRE5PU0VUS0VZIC1ETk9T RVJWRVIgLUROT1VVQ1AgXAotCS1ETk9QVVNIIC1ETk9NRE1IVVAgLUROT0pDIC1ETk9GRFpFUk8g LUROT0VTQ1NFUSAgXAotCSQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gLXMiCi0KLSNDb21tYW5kLWxp bmUgb25seSB2ZXJzaW9uLgotZGVsbHN5czVyNG06Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgREVMTCBVTklYIFN5c3RlbSBWIFI0Li4uJwotCUBlY2hvICdDb21tYW5kLWxp bmUgb25seScKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQki Q0ZMQUdTID0gLU8gLURTVlI0IC1EREVMTF9TVlI0IC1ERElSRU5UIFwKLQktVVRDUFNPQ0tFVCAt RE5PSUNQIC1ETk9GUklMTFMgLUROT0RJQUwgLUROT0RFQlVHIC1ETk9UTE9HIC1ETk9DU0VUUyBc Ci0JLUROT1NFVEtFWSAtRE5PRVNDU0VRIC1ETk9KQyAtRE5PRkRaRVJPIC1EQ0tfUE9MTCBcCi0J JChLRkxBR1MpIiAiTE5LRkxBR1MgPSAtcyIKLQotI0FUJlQgVU5JWCBTeXN0ZW0gViBSNC4KLSNI YXMgPHN5cy90ZXJtaW94Lmg+Lgotc3lzNXI0c3g6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgQVQmVCBVTklYIFN5c3RlbSBWIFI0Li4uJwotCSQoTUFLRSkgd2VybWl0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtTyAtRFNWUjQgLURESVJFTlQg LURIREJVVUNQIC1EU1RFUk1JT1ggLUROT0xFQVJOIFwKLQkkKEtGTEFHUykiICJMTktGTEFHUyA9 IC1zIiAiTElCUz0kKExJQlMpIgotCi0jQVQmVCBVTklYIFN5c3RlbSBWIFI0LgotI0hhcyA8c3lz L3Rlcm1pb3guaD4sIHJlZ3VsYXIgQmVya2VsZXkgc29ja2V0cyBsaWJyYXJ5LCBpLmUuIGluLmgg YW5kIGluZXQuaAotI2FyZSBub3QgbWlzcGxhY2VkIGluIHN5cyAocmF0aGVyIHRoYW4gbmV0aW5l dCBhbmQgYXJwYSwgcmVzcGVjdGl2ZWx5KS4KLSNVc2VzIEFOU0kgQyBjb25zdHJ1Y3RzLCA8c3lz L3Rlcm1pb3guaD4sIGV0YyBldGMuCi1zeXM1cjRzeHRjcDoKLQlAZWNobyAnTWFraW5nIEMtS2Vy bWl0ICQoQ0tWRVIpIGZvciBBVCZUIFVOSVggU3lzdGVtIFYgUjQuLi4nCi0JJChNQUtFKSB4ZXJt aXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1PIC1EU1ZSNCAtRERJ UkVOVCAtREhEQlVVQ1AgXAotCS1EU1RFUk1JT1ggLURUQ1BTT0NLRVQgJChLRkxBR1MpIiBcCi0J IkxJQlM9IC1sc29ja2V0IC1sbnNsICQoTElCUykiICJMTktGTEFHUz0gLXMiCi0KLSNBVCZUIFVO SVggU3lzdGVtIFYgUjQuCi0jQXMgYWJvdmUgKyBjdXJzZXMuCi1zeXM1cjRzeHRjcGM6Ci0JQGVj aG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCBVTklYIFN5c3RlbSBWIFI0Li4u JwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1Mg PSAtTyAtRFNWUjQgLURESVJFTlQgLURIREJVVUNQIFwKLQktRFNURVJNSU9YICAtRENLX0NVUlNF UyAtRFRDUFNPQ0tFVCAkKEtGTEFHUykiIFwKLQkiTElCUz0gLWxzb2NrZXQgLWxuc2wgLWxjdXJz ZXMgLWx0ZXJtY2FwICQoTElCUykiICJMTktGTEFHUyA9IC1zIgotCi0jQVQmVCBVTklYIFN5c3Rl bSBWIFI0LiAgQ09OU0VOU1lTIFNWUjQuMi0xLgotI0hhcyA8c3lzL3Rlcm1pb3guaD4sIHJlZ3Vs YXIgQmVya2VsZXkgc29ja2V0cyBsaWJyYXJ5LCBpLmUuIGluLmggYW5kIGluZXQuaAotI2FyZSBu b3QgbWlzcGxhY2VkIGluIHN5cyAocmF0aGVyIHRoYW4gbmV0aW5ldCBhbmQgYXJwYSwgcmVzcGVj dGl2ZWx5KS4KLSNVc2VzIEFOU0kgQyBjb25zdHJ1Y3RzLCA8c3lzL3Rlcm1pb3guaD4sIGV0Yy4K LSMgRnVsbHNjcmVlbiAtRENLX0NVUlNFUyBhZGRlZCAod2l0aCBjdXJzZXMgJiB0ZXJtY2FwIGxp YnMpCi0jIFN1Ym1pc3Npb24gYnkgUm9iZXJ0IFdlaW5lci9Qcm9ncmFtbWluZyBQbHVzLCByd2Vp bmVyQHdhdHN1bi5jYy5jb2x1bWJpYS5lZHUKLXN5czVyNHN4dGNwZjoKLQlAZWNobyAnTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBVCZUIFVOSVggU3lzdGVtIFYgUjQuLi4nCi0JJChNQUtF KSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1PIC1EU1ZS NCAtRERJUkVOVCAtREhEQlVVQ1AgXAotCS1EU1RFUk1JT1ggLURUQ1BTT0NLRVQgLURDS19DVVJT RVMgJChLRkxBR1MpIiBcCi0JIkxJQlM9IC1sc29ja2V0IC1sbnNsIC1ML3Vzci9jY3MvbGliIC1s Y3Vyc2VzIC1sdGVybWNhcCIgXAotCSJMSUJTPSQoTElCUykiICJMTktGTEFHUyA9IC1zIgotCi0j U21hbGxlc3QgcG9zc2libGUgdmVyc2lvbiBmb3IgU3lzdGVtIFYgUjQKLXM1cjRtOgotCUBlY2hv IE1pbmltdW0gc2l6ZQotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc3lzNXI0c3ggS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0kKEtGTEFHUykgLUROT0RJQUwgLUROT0hFTFAg LUROT0RFQlVHIC1ETk9UTE9HIFwKLQktRE5PU0NSSVBUIC1ETk9DU0VUUyAtRE5PSUNQIC1ETk9N U0VORCAtVVRDUFNPQ0tFVCIgIkxOS0ZMQUdTID0gLXMiCi0KLSNTbWFsbGVzdCBwb3NzaWJsZSBp bnRlcmFjdGl2ZSB2ZXJzaW9uIG9mIGFib3ZlCi1zNXI0bWk6Ci0JQGVjaG8gTWluaW11bSBpbnRl cmFjdGl2ZQotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc3lzNXI0c3ggXAotCSJLRkxBR1M9LURO T1NQTCAtRE5PWE1JVCAtRE5PTVNFTkQgLUROT0ZSSUxMUyAtRE5PU0hPVyBcCi0JLUROT0RJQUwg LUROT0hFTFAgLUROT0RFQlVHIC1ETk9UTE9HIC1ETk9TQ1JJUFQgLUROT0NTRVRTIC1ETk9TRVRL RVkgXAotCS1VVENQU09DS0VUICQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gLXMiCi0KLSNBVCZUIFVO SVggU3lzdGVtIFYgUjQsIGhhcyA8c3lzL3Rlcm1pb3guaD4KLSNBTlNJIEMgZnVuY3Rpb24gcHJv dG90eXBpbmcgZGlzYWJsZWQuCi1zeXM1cjRzeG5hOgotCUBlY2hvIE5vIEFOU0kgQyBwcm90b3R5 cGluZy4uLgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc3lzNXI0c3ggS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBcCi0JIktGTEFHUz0kKEtGTEFHUykgLUROT0FOU0kiCi0KLSNTdHJhdHVzIEZU WC4KLWZ0eDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTdHJhdHVzIEZU WCAzLnguLi4nCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0J IkNGTEFHUyA9IC1PIC1EU1ZSNCAtREZUWCAtRERJUkVOVCAtREhEQlVVQ1AgLURTVEVSTUlPWCBc Ci0JLUROT0dFVFVTRVJTSEVMTCAtRE5PTEVBUk4gK0RBMS4xICQoS0ZMQUdTKSIgXAotCSJMTktG TEFHUyA9IC1zIiAiTElCUz0kKExJQlMpIgotCi0jU3RyYXR1cyBGVFggKyBUQ1AvSVAuCi1mdHh0 Y3A6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU3RyYXR1cyBGVFggMy54 Li4uJwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxB R1MgPSAtTyAtRFNWUjQgLURGVFggLURESVJFTlQgLURIREJVVUNQIC1ETk9HRVRVU0VSU0hFTEwg XAotCS1EU1RFUk1JT1ggLURUQ1BTT0NLRVQgLUROT19ETlNfU1JWICtEQTEuMSAkKEtGTEFHUyki IFwKLQkiTElCUz0gLWxzb2NrZXQgLWxuc2wgJChMSUJTKSIgIkxOS0ZMQUdTPSAtcyIKLQotI05D UiBNUC1SQVMgMi4wMyBvciAzLjAyCi1tcHJhczoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQo Q0tWRVIpIGZvciBOQ1IgTVAtUkFTLi4uJwotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtTyAtRFNWUjQgLUROQ1JNUFJBUyAtRERJUkVOVCAt REhEQlVVQ1AgLURTVEVSTUlPWCBcCi0JLUROT0dFVFVTRVJTSEVMTCAtRFVTRV9GSUxFX19DTlQg LUROT0xFQVJOIC1ETk9fRE5TX1NSViAkKEtGTEFHUykiIFwKLQkiTE5LRkxBR1MgPSAtcyIgIkxJ QlM9JChMSUJTKSIKLQotI05DUiBNUC1SQVMgMi4wMyBvciAzLjAyIHdpdGggVENQL0lQIGFuZCBj dXJzZXMKLW1wcmFzdGNwYzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBO Q1IgTVAtUkFTICsgVENQL0lQICsgY3Vyc2VzLi4uJwotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gIkNGTEFHUz0tRFRDUFNPQ0tFVCBcCi0JLURDS19DVVJTRVMgLURT VlI0IC1ETkNSTVBSQVMgLURESVJFTlQgLURIREJVVUNQIC1EU1RFUk1JT1ggLUROT0xFQVJOIFwK LQktRE5PR0VUVVNFUlNIRUxMIC1ETk9fRE5TX1NSViBEVVNFX0ZJTEVfX0NOVCAtTyAkKEtGTEFH UykiIFwKLQkiTE5LRkxBR1MgPSAtcyIgIkxJQlM9IC1sc29ja2V0IC1sbnNsIC1sY3Vyc2VzIC1s dGVybWNhcCAkKExJQlMpIgotCi0jU0lOSVgtTCBWNS40MSAtIGluY2x1ZGVzIGN1cnNlcywgdGNw L2lwIC0gVXNlIHRoaXMgb25lIGZvciBpMzg2LgotI1RoaXMgdmVyc2lvbiBvZiBTSU5JWCBkb2Vz bid0IGxpa2UgZmRvcGVuKCkgb3IgcG9wZW4oKS4KLXNpbml4NTQxOgotCUBlY2hvICdNYWtpbmcg Qy1LZXJtaXQgJChDS1ZFUikgZm9yIFNpZW1lbnMvTml4ZG9yZiBTSU5JWCBWNS40MS9pMzg2Jwot CSQoTUFLRSkgY2tjcHJvLiQoRVhUKSAiQ0ZMQUdTID0gLURTSU5JWCAtRFNWUjQgLURESVJFTlQg LURIREJVVUNQIFwKLQktRFNURVJNSU9YIC1EQ0tfQ1VSU0VTIC1EVENQU09DS0VUIC1EU0VMRUNU IC1EQ0tfQU5TSUMgLUROT19ETlNfU1JWIFwKLQktRFNOSTU0MSAtRE5PR0VUVVNFUlNIRUxMIC1E Tk9ORVRDTUQgLUROT1BPUEVOIC1rYW5zaSAtVzAgJChLRkxBR1MpIgotCSQoTUFLRSkgeGVybWl0 IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtRFNJTklYIC1EU1ZSNCAt RERJUkVOVCAtREhEQlVVQ1AgLUROT19ETlNfU1JWIC1ETk9QT1BFTiBcCi0JLURGTkZMT0FUIC1E U1RFUk1JT1ggLURDS19DVVJTRVMgLURUQ1BTT0NLRVQgLURTRUxFQ1QgLURDS19BTlNJQyBcCi0J LURTTkk1NDEgLUROT0dFVFVTRVJTSEVMTCAtRE5PTkVUQ01EIC1rYW5zaSAtVzAgLU8gJChLRkxB R1MpIiBcCi0JIkxJQlM9IC1sc29ja2V0IC1sbnNsIC1sY3Vyc2VzIC1sdGVybWNhcCAtbG0iICJM TktGTEFHUyA9IC1zIgotCi1zaW5peDU0MWk6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiAiS0ZM QUdTPSQoS0ZMQUdTKSIgc2luaXg1NDEKLQotI1NJTklYIFY1LjQyIC0gaW5jbHVkZXMgY3Vyc2Vz LCB0Y3AvaXAsIGV2ZXJ5dGhpbmcgLSBVc2UgdGhpcyBvbmUgZm9yIE1JUFMuCi0jIEFzIG9mIEMt S2VybWl0IDcuMSwgb3B0aW1pemF0aW9uIHJlbW92ZWQgLS0gdGFrZXMgKGxpdGVyYWxseSkgZm9y ZXZlci4KLXNpbml4NTQyOgotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gXAotCSJDRkxBR1MgPSAtRFNJTklYIC1EU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLUROT19E TlNfU1JWIFwKLQktREZORkxPQVQgLURTVEVSTUlPWCAtRENLX0NVUlNFUyAtRFRDUFNPQ0tFVCAt RFNFTEVDVCAtRENLX0FOU0lDIFwKLQktRFNOSTU0MiAtRE5PR0VUVVNFUlNIRUxMIC1rYW5zaSAt VzAgJChLRkxBR1MpIiBcCi0JIkxJQlM9IC1sc29ja2V0IC1sbnNsIC1sY3Vyc2VzIC1sdGVybWNh cCAtbG0iICJMTktGTEFHUyA9IC1zIgotCi0jU0lOSVggVjUuNDIgZ2NjIC0gaW5jbHVkZXMgY3Vy c2VzLCB0Y3AvaXAsIGV2ZXJ5dGhpbmcuCi0jVGhpcyBvbmUgd2FzIHVzZWQgdG8gYnVpbGQgdGhl IFB5cmFtaWQtYXJjaGl0ZWN0dXJlIFJNNjAwIHZlcnNpb24KLSNvbiBTSU5JWC1QIDUuNDIgQTEw IHdpdGggZ2NjIGJ1dCBzaG91bGQgd29yayBmb3IgU0lOSVggNS40MiBvbiBhbnkgb3RoZXIKLSNh cmNoaXRlY3R1cmUgd2l0aCBnY2MuCi1zaW5peDU0Mmc6Ci0JJChNQUtFKSB4ZXJtaXQgS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSAiQ0M9Z2NjIiAiQ0MyPWdjYyIgXAotCSJDRkxBR1MgPSAtRFNJ TklYIC1EU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLUROT19ETlNfU1JWIFwKLQktREZORkxPQVQg LURTVEVSTUlPWCAtRENLX0NVUlNFUyAtRFRDUFNPQ0tFVCAtRFNFTEVDVCAtRENLX0FOU0lDIFwK LQktRFNOSTU0MiAtRE5PR0VUVVNFUlNIRUxMICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAtbHNvY2tl dCAtbG5zbCAtbGN1cnNlcyAtbHRlcm1jYXAgLWxtIiBcCi0JIkxOS0ZMQUdTID0gLXMiCi0KLSNT SU5JWCBWNS40MiAtIGluY2x1ZGVzIGN1cnNlcywgdGNwL2lwLCBldmVyeXRoaW5nIC0gVXNlIHRo aXMgb25lIGZvciBJbnRlbC4KLSMgKE5vdGU6IFNOSSBkaXNjb250aW51ZWQgSW50ZWwgc3VwcG9y dCBhZnRlciA1LjQyLikKLXNpbml4NTQyaToKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tW RVIpIGZvciBTaWVtZW5zL05peGRvcmYgU0lOSVgtWiBWNS40Mi4uLicKLQkkKE1BS0UpIHhlcm1p dCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLURTSU5JWCAtRFNWUjQg LURESVJFTlQgLURIREJVVUNQIC1ERk5GTE9BVCAtRFNURVJNSU9YIFwKLQktRENLX0NVUlNFUyAt RFRDUFNPQ0tFVCAtRFNFTEVDVCAtRENLX0FOU0lDIC1ETk9fRE5TX1NSViAta2Fuc2kgXAotCS1E U05JNTQyICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAtbHNvY2tldCAtbG5zbCAtbGN1cnNlcyAtbHRl cm1jYXAgLWxtIiBcCi0JIkxOS0ZMQUdTID0gLXMiCi0KLSNTaWVtZW5zIE5peGRvcmYgUmVsaWFu dCBVTklYIFY1LjQzIC0gaW5jbHVkZXMgY3Vyc2VzLCB0Y3AvaXAsIGV2ZXJ5dGhpbmc6Ci0jIC4g Z2V0dGltZW9mZGF5KCkgc3VkZGVubHkgaGFzIG9ubHkgb25lIGFyZyBpbnN0ZWFkIG9mIHR3byAo R1RPRE9ORUFSRykuCi0jIC4gVGhlIHN5bnRheCBvZiB0aGUgT2xpbWl0IHNwZWNpZmllciBjaGFu Z2VkLgotIyAuIFRoZSBuYW1lIHdhcyBjaGFuZ2VkIGZyb20gU0lOSVggdG8gUmVsaWFudCBVTklY IGluIHZlcnNpb24gNS40M0MuCi1zbmk1NDM6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgU2llbWVucy9OaXhkb3JmIFJlbGlhbnQgVU5JWCBWNS40MycKLQkkKE1BS0UpIHhl cm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLURTSU5JWCAtRFNO STU0MyAtRFNWUjQgLURESVJFTlQgLURIREJVVUNQIFwKLQktRFNURVJNSU9YIC1EQ0tfQ1VSU0VT IC1EVENQU09DS0VUIC1EU0VMRUNUIC1EQ0tfQU5TSUMgLURHVE9ET05FQVJHIFwKLQktRE5PX0RO U19TUlYgLWthbnNpIC1XMCAtTyAtRiBPbGltaXQsMzEwMCAkKEtGTEFHUykiIFwKLQkiTElCUz0g LWxzb2NrZXQgLWxuc2wgLWxjdXJzZXMgLWx0ZXJtY2FwIiAiTE5LRkxBR1MgPSAtcyIKLQotI1Np ZW1lbnMgTml4ZG9yZiBSZWxpYW50IFVOSVggVjUuNDQgLSBMaWtlIDUuNDMgYnV0IHdpdGggZGlm ZmVyZW50IGJhbm5lci4KLXNuaTU0NDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIp IGZvciBTaWVtZW5zL05peGRvcmYgUmVsaWFudCBVTklYIFY1LjQ0JwotCSQoTUFLRSkgeGVybWl0 IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtRFNJTklYIC1EU05JNTQ0 IC1EU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgXAotCS1EU1RFUk1JT1ggLURDS19DVVJTRVMgLURU Q1BTT0NLRVQgLURTRUxFQ1QgLURDS19BTlNJQyAtREdUT0RPTkVBUkcgXAotCS1ETk9fRE5TX1NS ViAta2Fuc2kgLVcwIC1PIC1LIE9saW1pdCwzMTAwICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAtbHNv Y2tldCAtbG5zbCAtbGN1cnNlcyAtbHRlcm1jYXAiICJMTktGTEFHUyA9IC1zIgotCi0jQ29tbW9k b3JlIEFtaWdhIHdpdGggQVQmVCBVTklYIFN5c3RlbSBWIFI0IGFuZCBUQ1AvSVAgc3VwcG9ydC4K LSNIYXMgPHN5cy90ZXJtaW94Lmg+Lgotc3ZyNGFtaWdhbmV0OgotCUBlY2hvICdNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIEFtaWdhIFNWUjQgKyBUQ1AvSVAuLi4nCi0JJChNQUtFKSB4ZXJt aXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0M9Z2NjIiAiQ0MyPWdjYyIgXAotCSJDRkxB R1MgPSAtTyAtRFNWUjQgLURESVJFTlQgLURIREJVVUNQIC1EU1RFUk1JT1ggXAotCS1EVENQU09D S0VUIC1EQ0tfQ1VSU0VTICQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gLXMiIFwKLQkiTElCUyA9IC1s c29ja2V0IC1sbnNsIC1sdGVybWxpYiIKLQotI1NDTyAoTm92ZWxsIChVbml2ZWwpKSBVbml4V2Fy ZSAxLnggb3IgMi4wLCBubyBUQ1AvSVAuCi0jVGhpcyBhc3N1bWVzIHRoZSBOb3ZlbGwgU0RLIDEu MCwgd2hpY2ggaGFzIDxzeXMvdGVybWlveC5oPi4KLSNVbml4V2FyZSB1c2VycyB3aXRoIHRoZSAi UHJpbWUgVGltZSBGcmVld2FyZSIgQ0QtUk9NIFNESyB3aWxsIHByb2JhYmx5IGhhdmUKLSN0byB1 c2UgdGhlIHN5czVyNCBlbnRyeSAobm8gdGVybWlveC5oIGZpbGUsIHNvIG5vIGhhcmR3YXJlIGZs b3cgY29udHJvbCkuCi0jQ2hhbmdlIC1EU0VMRUNUIHRvIC1EQ0tfUE9MTCBpZiAtRFNFTEVDVCBj YXVzZXMgcHJvYmxlbXMuCi0jIE5PVEU6IFVuaXh3YXJlIDEueCBidWlsZHMgaGF2ZSBub3QgYmVl biB0cmllZCBpbiBDLUtlcm1pdCA3LjAuCi11bml4d2FyZToKLQkkKE1BS0UpICJNQUtFPSQoTUFL RSkiIHN5czVyNHN4IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9LURPTERf VU5JWFdBUkUgLURDS19ORVdURVJNIC1EU0VMRUNUIC1ETk9HRVRVU0VSU0hFTEwgXAotCS1ETk9T WVNMT0cgJChLRkxBR1MpIiAiTElCUz0tbGNyeXB0IgotCi0jVW5peFdhcmUgMS54IG9yIDIuMCB3 aXRoIFRDUC9JUCBhbmQgY3Vyc2VzLgotI2ZvcmsoKS1iYXNlZCBDT05ORUNUIC0gbm8gaGlnaCBz ZXJpYWwgc3BlZWRzLgotdW5peHdhcmVuZXRjOgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc3lz NXI0c3h0Y3BjIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9LURPTERfVU5J WFdBUkUgLURDS19ORVdURVJNIC1EU0VMRUNUIC1ETk9HRVRVU0VSU0hFTEwgXAotCS1ETk9TWVNM T0cgJChLRkxBR1MpIiAiTElCUz0tbGNyeXB0IC1scmVzb2x2IgotCi11dzEwOgotCSQoTUFLRSkg dW5peHdhcmVuZXRjIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIktGTEFHUz0kKEtGTEFHUyki Ci0KLSNUaGlzIGlzIGZvciBVbml4d2FyZSAyLjAueCBvbmx5IC0gdXNlIHVuaXh3YXJlMjEgZm9y IFVXIDIuMS54LgotI0hhcyBzcGVjaWFsIGxpYnJhcnkgc2VhcmNoIGFuZCBlbmFibGVzIHNwZWNp YWwga2x1ZGdlIGFyb3VuZCBsaWJyYXJ5Ci0jZm91bHVwIHJlZ2FyZGluZyB2Zm9yaygpICh3aGlj aCBLZXJtaXQgZG9lc24ndCB1c2UpLiAgRm9yY2VzIFBPU0lYLXN0eWxlCi0jaGFuZ3VwLgotdW5p eHdhcmUyMDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBVbml4V2FyZSAy LjAueC4uLicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQki Q0ZMQUdTID0gLU8gLURPTERfVU5JWFdBUkUgLURVTklYV0FSRTIgLURTRUxFQ1QgLURTVlI0IC1E RElSRU5UIFwKLQktREhEQlVVQ1AgLURCSUdCVUZPSyAtRE5PR0VUVVNFUlNIRUxMIC1EU1RFUk1J T1ggIC1EQ0tfQ1VSU0VTIFwKLQktRFRDUFNPQ0tFVCAtRFVXMjAwIC1ERk5GTE9BVCAtRENLX05F V1RFUk0gLUROT1NZU0xPRyAkKEtGTEFHUykiIFwKLQkiTElCUz0gLWxzb2NrZXQgLWxuc2wgLWxj dXJzZXMgLWx0ZXJtY2FwIC1sY3J5cHQgLWxnZW4gLWxtIC1scmVzb2x2IiBcCi0JIkxOS0ZMQUdT ID0gLXMiCi0KLXV3MjA6Ci0JJChNQUtFKSB1bml4d2FyZTIwIEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gIktGTEFHUz0kKEtGTEFHUykiCi0KLSNBZGRzIGJpZyBidWZmZXJzICgibGFyZ2UgbWVt b3J5IG1vZGVsIikgLSBvdGhlcndpc2UgdGhlIHNhbWUgYXMgVW5peFdhcmUgMS54LgotdW5peHdh cmUyMToKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBVbml4V2FyZSAyLjEu eC4uLicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZM QUdTID0gLU8gLURVTklYV0FSRSAtRFNFTEVDVCAtRFNWUjQgLURESVJFTlQgLURIREJVVUNQIC1E QklHQlVGT0sgXAotCS1ETk9TWVNMT0cgLURTVEVSTUlPWCAgLURDS19DVVJTRVMgLURUQ1BTT0NL RVQgXAotCS1EQ0tfTkVXVEVSTSAtREZORkxPQVQgLURVTklYV0FSRTIgJChLRkxBR1MpIiBcCi0J IkxJQlM9IC1sc29ja2V0IC1sbnNsIC1sY3Vyc2VzIC1sdGVybWNhcCAtbGNyeXB0IC1sbSAtbHJl c29sdiBcCi0JJChMSUJTKSIgIkxOS0ZMQUdTID0gLXMiCi0KLSNVbml4d2FyZSAyLjEuMAotdXcy MToKLQkkKE1BS0UpIHVuaXh3YXJlMjEgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiS0ZMQUdT PSQoS0ZMQUdTKSIKLQotI1VuaXh3YXJlIDIuMS4zCi11dzIxMzoKLQkkKE1BS0UpIHVuaXh3YXJl MjEgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0tRFVTRV9GSUxFX19DTlQg JChLRkxBR1MpIgotCi0jVW5peHdhcmUgMi4xIHdpdGggSUtTRCBzdXBwb3J0Ci11dzIxaWtzZDoK LQkkKE1BS0UpIHVuaXh3YXJlMjEgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFH Uz0tRENLX1NIQURPVyAkKEtGTEFHUykiICJMSUJTPSAtbGdlbiIKLQotI1VuaXhXYXJlIDcgd2l0 aCB0Y1tnc11ldHNwZWVkKCkgaGlnaCBzZXJpYWwgc3BlZWRzICYgc2VsZWN0KCktYmFzZWQgQ09O TkVDVAotI2FuZCBhcyBvZiBDLUtlcm1pdCA4LjAuMjEyLCBsYXJnZSBmaWxlIHN1cHBvcnQgKExG UykuCi0jTk9URTogVGhpcyBpcyB0aGUgb25lIHdlIHVzZS4KLXVuaXh3YXJlN3Q6Ci0JQGVjaG8g J01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgVW5peFdhcmUgNyB3aXRoIFBPU0lYIGkvby4u LicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdT ID0gLU8gLURVTklYV0FSRSAtRFNFTEVDVCAtRFNWUjQgLURESVJFTlQgLURIREJVVUNQIC1EQklH QlVGT0sgXAotCS1ERk5GTE9BVCAtRE5PR0VUVVNFUlNIRUxMIC1EU1RFUk1JT1ggLURDS19DVVJT RVMgLURUQ1BTT0NLRVQgLURQT1NJWCBcCi0JLURVVzcgLURVU0VUQ1NFVFNQRUVEIC1EQ0tfTkVX VEVSTSAtRE5PTFNUQVQgLUREQ0xUSU1FVkFMIFwKLQktRF9MQVJHRUZJTEVfU09VUkNFIC1EX0ZJ TEVfT0ZGU0VUX0JJVFM9NjQgLURORUVETURNREVGUyAkKEtGTEFHUykiIFwKLQkiTElCUz0tbHNv Y2tldCAtbG5zbCAtbGN1cnNlcyAtbHRlcm1jYXAgLWxjcnlwdCAtbG0gLWxyZXNvbHYgJChMSUJT KSIgXAotCSJMTktGTEFHUyA9IC1zIgotCi0jVW5peFdhcmUgNyAtIHNlbGVjdCgpLWJhc2VkIENP Tk5FQ1QgLSBubyBQT1NJWCBpL28gLSBubyBoaWdoIHNlcmlhbCBzcGVlZHMuCi0jSW4gb3RoZXIg d29yZHMsIGp1c3QgbGlrZSB0aGUgVW5peFdhcmUgMSBhbmQgMiBidWlsZHMuCi11bml4d2FyZTd4 OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFVuaXhXYXJlIDcuLi4nCi0J JChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1P IC1EVU5JWFdBUkUgLURTRUxFQ1QgLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCAtREJJR0JVRk9L IFwKLQktRFVXNyAtRE5PR0VUVVNFUlNIRUxMIC1EU1RFUk1JT1ggLURDS19DVVJTRVMgLURUQ1BT T0NLRVQgLUROT0xTVEFUIFwKLQktREZORkxPQVQgLURDS19ORVdURVJNICQoS0ZMQUdTKSIgXAot CSJMSUJTPS1sc29ja2V0IC1sbnNsIC1sY3Vyc2VzIC1sdGVybWNhcCAtbGNyeXB0IC1sbSAtbHJl c29sdiAkKExJQlMpIiBcCi0JIkxOS0ZMQUdTID0gLXMiCi0KLSNVbml4V2FyZSA3IHdpdGggUE9T SVggY2ZzZXRbb2ldc3BlZWQoKSB0byBhbGxvdyBoaWdoIHNlcmlhbCBzcGVlZHMuCi0jKGJ1dCB0 aGUgaGlnaCBzcGVlZHMgZG9uJ3Qgd29yaykKLXVuaXh3YXJlN3A6Ci0JQGVjaG8gJ01ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgVW5peFdhcmUgNyB3aXRoIFBPU0lYIGkvby4uLicKLQkkKE1B S0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLU8gLURV TklYV0FSRSAtRFNFTEVDVCAtRFNWUjQgLURESVJFTlQgLURIREJVVUNQIC1EQklHQlVGT0sgXAot CS1EVVc3IC1ETk9HRVRVU0VSU0hFTEwgLURTVEVSTUlPWCAtRENLX0NVUlNFUyAtRFRDUFNPQ0tF VCAtRFBPU0lYIFwKLQktREZORkxPQVQgLURDS19ORVdURVJNIC1ETk9MU1RBVCAkKEtGTEFHUyki IFwKLQkiTElCUz0tbHNvY2tldCAtbG5zbCAtbGN1cnNlcyAtbHRlcm1jYXAgLWxjcnlwdCAtbG0g LWxyZXNvbHYgJChMSUJTKSIgXAotCSJMTktGTEFHUyA9IC1zIgotCi0jIFVuaXhXYXJlIDcgYnVp bHQgd2l0aCBnY2MgLSBUaGlzIGRvZXMgbm90IHdvcmsgYXQgYWxsLi4uCi0jIFJlcG9ydGVkbHkg Z2NjIDIuOC4xIGlzIGJyb2tlbiBvbiBVbml4d2FyZSA3LiAgVHJ5IGVnY3M/Ci11bml4d2FyZTdn OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFVuaXhXYXJlIDcgd2l0aCBn Y2MuLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkND ID0gZ2NjIiAiQ0MyID0gZ2NjIiAiTE5LRkxBR1MgPSAtcyAtc2hsaWIiCi0JIkNGTEFHUyA9IC1P IC1EVU5JWFdBUkUgLURTRUxFQ1QgLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCAtREJJR0JVRk9L IFwKLQktRFVXNyAtRE5PR0VUVVNFUlNIRUxMIC1EU1RFUk1JT1ggIC1EQ0tfQ1VSU0VTIC1EVENQ U09DS0VUIC1ETk9MU1RBVCBcCi0JLURGTkZMT0FUIC1EQ0tfTkVXVEVSTSAkKEtGTEFHUykiIFwK LQkiTElCUz0tbHNvY2tldCAtbG5zbCAtbGN1cnNlcyAtbHRlcm1jYXAgLWxjcnlwdCAtbG0gLWxy ZXNvbHYgJChMSUJTKSIgXAotCSJMTktGTEFHUyA9IC1zIgotCi11bml4d2FyZTc6Ci0JJChNQUtF KSAiTUFLRT0kKE1BS0UpIiAiS0ZMQUdTPSQoS0ZMQUdTKSIgdW5peHdhcmU3dCBcCi0JS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfQotCi11dzc6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiAiS0ZM QUdTPSQoS0ZMQUdTKSIgdW5peHdhcmU3dCBcCi0JS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQot Ci0jU0NPIE9wZW5VTklYIDguMAotb3U4OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZF UikgZm9yIE9wZW4gVU5JWCA4Li4uJwotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgIktGTEFHUz0t RE9VOCAkKEtGTEFHUykiIHVuaXh3YXJlN3QgXAotCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0K LQotI1VuaXhXYXJlIDcgd2l0aCBPcGVuU1NMCi11dzdzc2wgdXc3K3NzbDoKLQlAZWNobyAnTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBVbml4V2FyZSA3IGFuZCBPcGVuU1NMLi4uJwotCSQo TUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtTyAt RENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1NMIC1EQ0tfU0hBRE9XIFwKLQktRFVOSVhXQVJFIC1E U0VMRUNUIC1EU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLURCSUdCVUZPSyBcCi0JLURGTkZMT0FU IC1ETk9HRVRVU0VSU0hFTEwgLURTVEVSTUlPWCAtRENLX0NVUlNFUyAtRFRDUFNPQ0tFVCAtRFBP U0lYIFwKLQktRFVXNyAtRFVTRVRDU0VUU1BFRUQgLURDS19ORVdURVJNIC1ETk9MU1RBVCAtRERD TFRJTUVWQUwgXAotCSQoU1NMSU5DKSAkKEtGTEFHUykiIFwKLQkiTElCUz0tbHNvY2tldCAtbG5z bCAtbGN1cnNlcyAtbHRlcm1jYXAgLWxjcnlwdCAtbG0gLWxyZXNvbHYgXAotCS1sZ2VuIC1sY3Vk azcwICQoU1NMTElCKSAtbHNzbCAtbGNyeXB0byAkKExJQlMpIiBcCi0JIkxOS0ZMQUdTID0gLXMi Ci0KLSNBcyBhYm92ZSBidXQgaW5jbHVkZXMgU2hhZG93IHBhc3N3b3JkIHN1cHBvcnQgbmVlZGVk IGZvciBJS1NELgotdXc3aWtzZDoKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiICJLRkxBR1M9LURD S19TSEFET1cgJChLRkxBR1MpIiBcCi0JS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiTElCUz0g LWxnZW4iIHVuaXh3YXJlN3QKLQotI0FzIGFib3ZlIGJ1dCBsaW5rcyB3aXRoIHN0YXRpYyBBUEkg Zm9yIHJlYWxwYXRoKCkgc28gYSBiaW5hcnkgYnVpbHQKLSN3aXRoIHRoaXMgdGFyZ2V0IG9uIFVX Ny4xIHdpbGwgYWxzbyB3b3JrIG9uIDcuMC4gIFJlcXVpcmVzIFNDTyBVREsKLSNyYXRoZXIgdGhh biB0aGUgc3RvY2sgY29tcGlsZXIuCi11dzdpa3NkdWRrOgotCSQoTUFLRSkgIk1BS0U9JChNQUtF KSIgIktGTEFHUz0tRENLX1NIQURPVyAkKEtGTEFHUykiIFwKLQlLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9ICJMSUJTPSAtbGdlbiAtbGN1ZGs3MCIgdW5peHdhcmU3dAotCi0jRVNJWCBTVlI0LjAu MyBvciA0LjA0IHdpdGggVENQL0lQIHN1cHBvcnQuCi0jSGFzIDxzeXMvdGVybWlveC5oPiwgQU5T SSBDIGZ1bmN0aW9uIHByb3RvdHlwaW5nIGRpc2FibGVkLgotI0FkZCAtbTQ4NiB0byBDRkxBR1Mg aWYgZGVzaXJlZC4KLWVzaXhyNDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBFU0lYIFNWUjQgKyBUQ1AvSVAuLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1PIC1EU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLURO T0FOU0kgXAotCS1EU1RFUk1JT1ggLURUQ1BTT0NLRVQgJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAt cyIgXAotCSJMSUJTID0gLWxzb2NrZXQgLWxuc2wiCi0KLSNBVCZUIFVOSVggU3lzdGVtIFYgUjQu Ci0jSGFzIDxzeXMvdGVybWlveC5oPiwgV29sbG9uZ29uZyBXSU4vVENQIFRDUC9JUC4KLXN5czVy NHN4bmV0OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgVU5JWCBT eXN0ZW0gViBSNC4uLicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 IFwKLQkiQ0ZMQUdTID0gLU8gLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCBcCi0JLURTVEVSTUlP WCAtRFdPTExPTkdPTkcgJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAtcyIKLQotI0FUJlQgVU5JWCBT eXN0ZW0gViBSNCwgbm8gPHRlcm1pby54PiBvciA8c3lzL3Rlcm1pby54Pi4KLXN5czVyNG54Ogot CUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgVU5JWCBTeXN0ZW0gViBS NC4uLicKLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZM QUdTID0gLU8gLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCAtRE5PTEVBUk4gJChLRkxBR1MpIiBc Ci0JIkxOS0ZMQUdTID0gLXMiCi0KLSNBVCZUIFVOSVggU3lzdGVtIFYgUjQsIG5vIDx0ZXJtaW8u eD4gb3IgPHN5cy90ZXJtaW8ueD4sIGN1cnNlcywgVENQL0lQLgotc3lzNXI0bnhuZXRjOgotCUBl Y2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgVU5JWCBTeXN0ZW0gViBSNC4u LicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdT ID0gLU8gLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCBcCi0JLURDS19DVVJTRVMgLURUQ1BTT0NL RVQgJChLRkxBR1MpIiBcCi0JIkxJQlMgPSAtbGN1cnNlcyAtbHNvY2tldCAtbG5zbCAtbHRjcGlw IiBcCi0JIkxOS0ZMQUdTID0gLXMiCi0KLSNBVCZUIFVOSVggU3lzdGVtIFYgUjQsIG5vIDx0ZXJt aW8ueD4gb3IgPHN5cy90ZXJtaW8ueD4sIFdvbGxvbmdvbmcgVENQL0lQLgotc3lzNXI0bnh0d2c6 Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCBVTklYIFN5c3RlbSBW IFI0Li4uJwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJD RkxBR1MgPSAtTyAtRFNWUjQgLURESVJFTlQgLURIREJVVUNQIC1EV09MTE9OR09ORyAkKEtGTEFH UykiCi0JIkxOS0ZMQUdTID0gLXMiCi0KLSNJQ0wgVU5JWCBTeXN0ZW0gViBSNC4oRFJTIE4vWCkg dmVyc2lvbiA6LQotI1VOSVggU3lzdGVtIFYgUmVsZWFzZSA0LjAgSUNMIERSUyA2MDAwIChTUEFS QykKLSNEUlMvTlggNjAwMCBTVlI0IFZlcnNpb24gNSAgTGV2ZWwgMSAgSW5jcmVtZW50IDQKLSNI YXMgPHN5cy90ZXJtaW94Lmg+LCByZWd1bGFyIEJlcmtlbGV5IHNvY2tldHMgbGlicmFyeSwgaS5l LiBpbi5oIGFuZCBpbmV0LmgKLSNhcmUgbm90IG1pc3BsYWNlZCBpbiBzeXMgKHJhdGhlciB0aGFu IG5ldGluZXQgYW5kIGFycGEsIHJlc3BlY3RpdmVseSkuCi0jVXNlcyBBTlNJIEMgY29uc3RydWN0 cywgYWR2aXNvcnkgZmlsZSBsb2NraW5nIG9uIGRldmljZXMsIGV0Yy4KLSNSZW1vdmUgLWxuc2wg aWYgaXQgY2F1c2VzIHRyb3VibGUuCi1pY2xzeXM1cjQ6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgSUNMIFVOSVggU3lzdGVtIFYgUjQgKERSUyBOL1gpJwotCSQoTUFLRSkg eGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtTyAtRFNWUjQg LURJQ0xfU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLUROT0dFVFVTRVJTSEVMTCBcCi0JLURTVEVS TUlPWCAtRFRDUFNPQ0tFVCAkKEtGTEFHUykiIFwKLQkiTElCUz0gLWxzb2NrZXQgLWxuc2wgLWxy ZXNvbHYgIiAiTE5LRkxBR1MgPSAtcyIKLQotI0FzIGFib3ZlIGJ1dCBmb3IgRFJTL05YIDQuMk1Q IDdNUGx1cy4KLWljbHN5czVyNG0rOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIElDTCBVTklYIFN5c3RlbSBWIFI0IERSUy9OWCA0LjJNUCsnCi0JJChNQUtFKSB4ZXJtaXQg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1PIC1EU1ZSNCAtRElDTF9T VlI0IC1ERElSRU5UIC1ESERCVVVDUCAtRE5PSUtTRCBcCi0JLURTVEVSTUlPWCAtRFRDUFNPQ0tF VCAkKEtGTEFHUykiIFwKLQkiTElCUz0gLWxzb2NrZXQgLWxuc2wgLWxtIC1sYyAtZyAtbGdlbiAi ICJMTktGTEFHUyA9IC1zIgotCi0jQXMgYWJvdmUgYnV0IGZvciBEUlMvTlggNC4yTVAgN01QbHVz IHdpdGggSUtTRCBzdXBwb3J0LgotaWNsc3lzNXI0bStpa3NkOgotCUBlY2hvICdNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIElDTCBVTklYIFN5c3RlbSBWIFI0IERSUy9OWCA0LjJNUCsnCi0J JChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1P IC1EU1ZSNCAtRElDTF9TVlI0IC1ERElSRU5UIC1ESERCVVVDUCAtRE5PR0VUVVNFUlNIRUxMIFwK LQktRFNURVJNSU9YIC1EVENQU09DS0VUICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAtbHNvY2tldCAt bG5zbCAtbG0gLWxjIC1nIC1sZ2VuIC1scmVzb2x2ICIgIkxOS0ZMQUdTID0gLXMiCi0KLWljbHN5 czVyNF80ODY6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBpY2xzeXM1cjQgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfQotCi0jRGF0YSBHZW5lcmFsIERHL1VYIDQuMzAgKFN5c3RlbSBWIFIzKSBm b3IgREcgQVZpaU9OLCB3aXRoIFRDUC9JUCBzdXBwb3J0LgotZGd1eDQzMDoKLQlAZWNobyAnTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBERyBBVmlpT04gREcvVVggNC4zMC4uLicKLQkkKE1B S0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLU8gLURE R1VYNDMwIC1EU1ZSMyAtRERJUkVOVCAtRFRDUFNPQ0tFVCBcCi0JLUROT0lOQUREUlggLUROT0dF VFVTRVJTSEVMTCAkKEtGTEFHUykiCi0KLSNEYXRhIEdlbmVyYWwgREcvVVggNC4zMCBmb3IgREcg QVZpaU9OLCB3aXRoIFRDUC9JUCBzdXBwb3J0IHdpdGggQlNEaXNtcy4KLWRndXg0MzBic2Q6Ci0J QGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgREcgQVZpaU9OIERHL1VYIDQuMzAu Li4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFH UyA9IC1PIC1EREdVWDQzMCAtRF9CU0RfU09VUkNFIC1EQlNENCBcCi0JLUROT0lOQUREUlggLURU Q1BTT0NLRVQgLUROT0dFVFVTRVJTSEVMTCAkKEtGTEFHUykiCi0KLSNEYXRhIEdlbmVyYWwgREcv VVggNS40IChTeXN0ZW0gViBSNCkgZm9yIERHIEFWaWlPTiwgd2l0aCBUQ1AvSVAgc3VwcG9ydC4K LSNBZGQgLWxzb2NrZXQgLWxuc2wgaWYgaW5ldF9hZGRyIGNvbWVzIHVwIG1pc3NpbmcuLi4KLSNI bW1tIC0gSSByZWFsbHkgdGhpbmsgQ0tfUE9MTCBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoaXMgb25l IGluIHdoaWNoIGNhc2UKLSN0aGVyZSBpcyBubyBkaWZmZXJlbmNlIGJldHdlZW4gZGd1eDU0MCBh bmQgZGd1eDU0MGkuCi1kZ3V4NTQwOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIERHIEFWaWlPTiBERy9VWCA1LjQwLi4uJwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtTyAtRERHVVg1NDAgLURESVJFTlQgLURIREJV VUNQIC1ETk9JTkFERFJYIFwKLQktRFNURVJNSU9YIC1EVENQU09DS0VUIC1EQ0tfUE9MTCAtRE5P R0VUVVNFUlNIRUxMICQoS0ZMQUdTKSIKLQotI0RhdGEgR2VuZXJhbCBERy9VWCA1LjQwIChTeXN0 ZW0gViBSNCkgZm9yIEludGVsIEFWaWlPTiwgd2l0aCBUQ1AvSVAgc3VwcG9ydC4KLWRndXg1NDBp OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIERHIEFWaWlPTiBERy9VWCA1 LjQwLi4uJwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJD RkxBR1MgPSAtTyAtRERHVVg1NDAgLURESVJFTlQgLURIREJVVUNQIC1ETk9JTkFERFJYIFwKLQkt RFNURVJNSU9YIC1EVENQU09DS0VUIC1ETk9HRVRVU0VSU0hFTEwgJChLRkxBR1MpIiBcCi0JIkxJ QlMgPSAtbHNvY2tldCAtbG5zbCIKLQotZGd1eDU0OgotCW1ha2UgZGd1eDU0MCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9Ci0KLSNEYXRhIEdlbmVyYWwgREcvVVggNS40ICg9IFN5c3RlbSBWIFI0 KSBmb3IgREcgQVZpaU9OLCB3aXRoIFRDUC9JUCBzdXBwb3J0LgotIyBBbmQgY3Vyc2VzLgotZGd1 eDU0MGM6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgREcgQVZpaU9OIERH L1VYIDUuNC4uLicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwK LQkiQ0ZMQUdTID0gLU8gLURER1VYNTQwIC1ERElSRU5UIC1ESERCVVVDUCAtRE5PSU5BRERSWCBc Ci0JLURTVEVSTUlPWCAtRFRDUFNPQ0tFVCAtRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLUROT0dF VFVTRVJTSEVMTCBcCi0JJChLRkxBR1MpIiAiTElCUz0gLWxjdXJzZXM4IC1sdGVybWNhcCIgIkxO S0ZMQUdTID0gLXMiCi0KLSNBcyBhYm92ZSBidXQgZm9yIEludGVsIC0gb25seSBkaWZmZXJlbmNl IGlzIG5hbWUgbGlicmFyeSBuYW1lcy4KLWRndXg1NDBpYzoKLQlAZWNobyAnTWFraW5nIEMtS2Vy bWl0ICQoQ0tWRVIpIGZvciBERyBBVmlpT04gREcvVVggNS40MC4uLicKLQkkKE1BS0UpIHhlcm1p dCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLU8gLURER1VYNTQwIC1E RElSRU5UIC1ESERCVVVDUCAtRE5PSU5BRERSWCBcCi0JLURTVEVSTUlPWCAtRFRDUFNPQ0tFVCAt RENLX0NVUlNFUyAtRENLX05FV1RFUk0gLUROT0dFVFVTRVJTSEVMTCBcCi0JJChLRkxBR1MpIiAi TElCUyA9IC1sc29ja2V0IC1sbnNsIC1sY3Vyc2VzIC1sdGVybWNhcCIKLQotZGd1eDU0YzoKLQlt YWtlIGRndXg1NDBjIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KLQotI0RHL1VYIDUuNFIzLjEw Ci1kZ3V4NTQzMTA6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgREcgQVZp aU9OIERHL1VYIDUuNFIzLi4uJwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gXAotCSJDRkxBR1MgPSAtRERHVVg1NDAgLURER1VYNTQzMTAgLURESVJFTlQgLURIREJV VUNQIC1EU0VMRUNUIFwKLQktRFNURVJNSU9YIC1EVENQU09DS0VUIC1EQ0tfQ1VSU0VTIC1EQ0tf TkVXVEVSTQktRE5PR0VUVVNFUlNIRUxMIFwKLQktRE5PSU5BRERSWCAkKEtGTEFHUykiICJMSUJT PSAtbGN1cnNlczggLWx0ZXJtY2FwIiAiTE5LRkxBR1MgPSAtcyIKLQotI0RHL1VYIDUuNFI0LjEw IC0gSW5jbHVkZXMgZXZlcnl0aGluZy4KLWRndXg1NDQxMDoKLQlAZWNobyAnTWFraW5nIEMtS2Vy bWl0ICQoQ0tWRVIpIGZvciBERy9VWCA1LjRSNC4xMC4uLicKLQkkKE1BS0UpIHhlcm1pdCBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLU8gLURER1VYNTQwIC1EREdVWDU0 NDEwIC1ERElSRU5UIC1ESERCVVVDUCAtRFNFTEVDVCBcCi0JLURTVEVSTUlPWCAtRFRDUFNPQ0tF VCAtRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLUROT0dFVFVTRVJTSEVMTCBcCi0JLUROT0lOQURE UlggJChLRkxBR1MpIiAiTElCUyA9IC1sc29ja2V0IC1sbnNsIC1sY3Vyc2VzIC1sdGVybWNhcCIK LQotI0RHL1VYIDUuNFI0LjExIC0gSW5jbHVkZXMgZXZlcnl0aGluZy4KLWRndXg1NDQxMToKLQlA ZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBERy9VWCA1LjRSNC4xMS4uLicKLQkk KE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLU8g LURER1VYNTQwIC1EREdVWDU0NDExIC1ERElSRU5UIC1ESERCVVVDUCAtRFNFTEVDVCBcCi0JLURT VEVSTUlPWCAtRFRDUFNPQ0tFVCAtRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLUROT0dFVFVTRVJT SEVMTCBcCi0JLUROT0lOQUREUlggJChLRkxBR1MpIiAiTElCUyA9IC1sc29ja2V0IC1sbnNsIC1s Y3Vyc2VzIC1sdGVybWNhcCIKLQotI0RHL1VYIDUuNFI0LjIwIC0gSW5jbHVkZXMgZXZlcnl0aGlu Zy4KLWRndXg1NDQyMDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBERy9V WCA1LjRSNC4yMC4uLicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 IFwKLQkiQ0ZMQUdTID0gLU8gLURER1VYNTQwIC1EREdVWDU0NDIwIC1ERElSRU5UIC1ESERCVVVD UCAtRFNFTEVDVCBcCi0JLURTVEVSTUlPWCAtRFRDUFNPQ0tFVCAtRENLX0NVUlNFUyAtRENLX05F V1RFUk0gLUROT0dFVFVTRVJTSEVMTCBcCi0JLUROT0lOQUREUlggJChLRkxBR1MpIiBcCi0JIkxJ QlMgPSAtbHNvY2tldCAtbHJlc29sdiAtbG5zbCAtbGN1cnNlcyAtbHRlcm1jYXAiCi0KLSNTaWxp Y29uIEdyYXBoaWNzIFN5c3RlbSBWIFIzIHdpdGggQlNEIGZpbGUgc3lzdGVtIChJUklTKQotaXJp czoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNpbGljb24gR3JhcGhpY3Mg SVJJWCBwcmUtMy4zLi4uCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCi0JIkNGTEFHUyA9IC1PIC1EU1ZSMyAtRExPTkdGTiAtRE5PTEVBUk4gJChLRkxBR1MpIC1J L3Vzci9pbmNsdWRlL2JzZCIgXAotCSJMSUJTID0gLWxic2QiCi0KLSNTaWxpY29uIEdyYXBoaWNz IElSSVMgU3lzdGVtIFYgUjMKLWlyaXgzMzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tW RVIpIGZvciBTaWxpY29uIEdyYXBoaWNzIElSSVggMy4zLi4uJwotCSQoTUFLRSkgd2VybWl0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtRFNWUjMgLURESVJFTlQgLURI REJVVUNQIC1ETk9MRUFSTiAkKEtGTEFHUykgLU8iIFwKLQkiTE5LRkxBR1MgPSAtcyIKLQotI1Np bGljb24gR3JhcGhpY3MgSXJpcyBJbmRpZ28gd2l0aCBJUklYIDQuMC4wIG9yIDUuMC4uLgotI1N0 cmljdCBBTlNJIEMgY29tcGlsYXRpb24sIFRDUC9JUCBzdXBwb3J0IGluY2x1ZGVkCi1pcml4NDA6 Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU2lsaWNvbiBHcmFwaGljcyBJ UklYIDQuMC4uLicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwK LQkiQ0ZMQUdTID0gLURJUklYNDAgLURTVlIzIC1ERElSRU5UIC1ESERCVVVDUCAtRFBXSURfVD11 aWRfdCBcCi0JLURDS19BTlNJQyAtRFRDUFNPQ0tFVCAkKEtGTEFHUykgLU8gLU9saW1pdCAxNjAw IC1JL3Vzci9pbmNsdWRlL2JzZCIgXAotCSJMTktGTEFHUyA9IC1zIgotCi0jQXMgYWJvdmUsIGJ1 dCB3aXRoIGZ1bGxzY3JlZW4gZGlzcGxheSAoY3Vyc2VzKSBhbmQgU3VuIFllbGxvdyBQYWdlcyBz dXBwb3J0LgotI05PVEU6IElSSVggdmVyc2lvbnMgcHJpb3IgdG8gNSBydW4gQ09GRiBiaW5hcmll cy4KLWlyaXg0MHlwYzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTaWxp Y29uIEdyYXBoaWNzIElSSVggNC4wLicKLQlAZWNobyAnSW5jbHVkZXMgZnVsbHNjcmVlbiBmaWxl IGRpc3BsYXkgYW5kIFN1biBZZWxsb3cgUGFnZXMuLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1ESVJJWDQwIC1EU1ZSMyAtRERJUkVO VCAtREhEQlVVQ1AgLURDS19DVVJTRVMgXAotCS1EUFdJRF9UPXVpZF90IC1EQ0tfQU5TSUMgLURU Q1BTT0NLRVQgJChLRkxBR1MpIFwKLQktTyAtT2xpbWl0IDE2MDAgLUkvdXNyL2luY2x1ZGUvYnNk IiBcCi0JIkxJQlMgPSAtbGN1cnNlcyAtbHN1biIgIkxOS0ZMQUdTID0gLXMiCi0KLSMgU2lsaWNv biBHcmFwaGljcyBJcmlzIFNlcmllcyA0RC8qLCBJUklYIDQuMC54LCAtTzQgdWNvZGUgb3B0aW1p emVkLgotIyBIdWdlIHRlbXBvcmFyeSBmaWxlIHNwYWNlIG5lZWRlZCBmb3IgdWNvZGUgb3B0aW1p emVyLiAgSWYgeW91IGdldCBhbiBlcnJvcgotIyBsaWtlICJ1Z2VuOiBpbnRlcm5hbCBlcnJvciB3 cml0aW5nIHRvIC90bXAvY3RtY2EwODc3NzogRXJyb3IgMCIsIGRlZmluZSB0aGUKLSMgdGhlIFRN UERJUiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBwb2ludCB0byBhIGZpbGUgc3lzdGVtIHRoYXQg aGFzIG1vcmUKLSMgc3BhY2UgYXZhaWxhYmxlLCBlLmcuICJzZXRlbnYgVE1QRElSIC91c3IvdG1w Ii4KLWlyaXg0MHU6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU2lsaWNv biBHcmFwaGljcyBJUklYIDQuMC4uLicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLURJUklYNDAgLURTVlIzIC1ERElSRU5UIC1ESERCVVVD UCAtRFBXSURfVD11aWRfdCBcCi0JLURDS19BTlNJQyAtRFRDUFNPQ0tFVCAkKEtGTEFHUykgLU80 IC1PbGltaXQgMTYwMCIgXAotCSJMTktGTEFHUz0tTzQgLU9saW1pdCAxNjAwIC1zIiAiRVhUPXUi Ci0KLSMgQXMgYWJvdmUsIHdpdGggQ3Vyc2VzIFN1cHBvcnQgYWRkZWQKLWlyaXg0MHVjOgotCUBl Y2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNpbGljb24gR3JhcGhpY3MgSVJJWCA0 LjAuLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNG TEFHUyA9IC1ESVJJWDQwIC1EU1ZSMyAtRERJUkVOVCAtREhEQlVVQ1AgLURQV0lEX1Q9dWlkX3Qg XAotCS1EQ0tfQU5TSUMgLURDS19DVVJTRVMgLURUQ1BTT0NLRVQgJChLRkxBR1MpIC1PNCAtT2xp bWl0IDE2MDAiIFwKLQkiTE5LRkxBR1M9LU80IC1PbGltaXQgMTYwMCAtcyIgIkVYVD11IiAiTElC Uz0gLWxjdXJzZXMgLWx0ZXJtY2FwIgotCi0jU2lsaWNvbiBHcmFwaGljcyBJUklYIDUueC4KLSNZ ZWxsb3cgUGFnZXMgYW5kIEN1cnNlcyBzdXBwb3J0IGluY2x1ZGVkLgotI0lSSVggdmVyc2lvbiA1 LnggY2FuIHJ1biBDT0ZGIG9yIEVMRiBiaW5hcmllcy4KLWlyaXg1MToKLQlAZWNobyAnTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTaWxpY29uIEdyYXBoaWNzIElSSVggNS54JwotCUBlY2hv ICdJbmNsdWRlcyBmdWxsc2NyZWVuIGZpbGUgZGlzcGxheSBhbmQgWWVsbG93IFBhZ2VzLi4uJwot CUBlY2hvICdBZGQgLW1pcHM8bj4gdG8gQ0ZMQUdTIHNwZWNpZnkgYSBwYXJ0aWN1bGFyIGhhcmR3 YXJlIHRhcmdldC4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBc Ci0JIkNGTEFHUyA9IC1ESVJJWDUxIC1EU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLURDS19DVVJT RVMgLURDS19ORVdURVJNIFwKLQktRFBXSURfVD11aWRfdCAtRENLX0FOU0lDIC1EVENQU09DS0VU IC1EU0VMRUNUIC1ETk9HRVRVU0VSU0hFTEwgXAotCS1EU1lTVElNRUggLUREQ0xQT1BFTiAtRERD TEZET1BFTiAkKEtGTEFHUykgLWFuc2kgLU8gLU9saW1pdCAzMDAwIiBcCi0JIkxJQlMgPSAtbGN1 cnNlcyIgIkxOS0ZMQUdTID0gLXMiCi0KLSNVc2UgdGhpcyBvbmUgaWYgaXJpeDUxIGJsb3dzIHVw IGR1ZSB0byBsYWNrIG9mIHN3YXAgc3BhY2Ugb3Igd2hhdGV2ZXIuCi1pcml4NTF4OgotCUBlY2hv ICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNpbGljb24gR3JhcGhpY3MgSVJJWCA1Lngn Ci0JQGVjaG8gJ0luY2x1ZGVzIGZ1bGxzY3JlZW4gZmlsZSBkaXNwbGF5IGFuZCBZZWxsb3cgUGFn ZXMuLi4nCi0JQGVjaG8gJ0FkZCAtbWlwczxuPiB0byBDRkxBR1Mgc3BlY2lmeSBhIHBhcnRpY3Vs YXIgaGFyZHdhcmUgdGFyZ2V0LicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLURJUklYNTEgLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCAt RENLX0NVUlNFUyAtRENLX05FV1RFUk0gXAotCS1EUFdJRF9UPXVpZF90IC1EQ0tfQU5TSUMgLURU Q1BTT0NLRVQgLURTRUxFQ1QgLUROT0dFVFVTRVJTSEVMTCBcCi0JLURTWVNUSU1FSCAtRERDTFBP UEVOIC1ERENMRkRPUEVOICQoS0ZMQUdTKSIgXAotCSJMSUJTID0gLWxjdXJzZXMiICJMTktGTEFH UyA9IC1zIgotCi1pcml4NTF5cGM6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBpcml4NTEgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0gJChLRkxBR1MpIgotCi0jSVJJWCA1 LjIgYWRkcyBSVFMvQ1RTCi1pcml4NTI6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBpcml4NTEg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0tRElSSVg1MiAtRENLX1JUU0NU UyAkKEtGTEFHUykiCi0KLWlyaXg1MzoKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIGlyaXg1MSBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPS1ESVJJWDUyIC1ESVJJWDUzIC1E Q0tfUlRTQ1RTICQoS0ZMQUdTKSIKLQotaXJpeDUzeDoKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSki IGlyaXg1MXggS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0tRElSSVg1MiAt RElSSVg1MyAtRENLX1JUU0NUUyAkKEtGTEFHUykiCi0KLSNTaWxpY29uIEdyYXBoaWNzIElSSVgg Ni5bMDI0XSBjb21tb24gc3R1ZmYuCi0jWWVsbG93IFBhZ2VzIGFuZCBDdXJzZXMgc3VwcG9ydCBp bmNsdWRlZC4KLSNJUklYIHZlcnNpb24gNi4wIGFuZCBsYXRlciBydW5zIG9ubHkgRUxGIGJpbmFy aWVzLgotI0RlcGVuZHMgb24gY29kZSBjaGFuZ2VzIGluIGNrY2RlYi5oIHRoYXQgbWFrZSAtRElS SVg2eCBkZWZpbmUgYWxsCi0jbG93ZXIgSVJJWDZ4IHZhbHVlcyBhbmQgSVJJWDUxLgotaXJpeDZ4 OgotCUBlY2hvICdJbmNsdWRlcyBmdWxsc2NyZWVuIGZpbGUgZGlzcGxheSBhbmQgWWVsbG93IFBh Z2VzLi4uJwotCUBlY2hvICdBZGQgLW1pcHM8bj4gdG8gc3BlY2lmeSBhIHBhcnRpY3VsYXIgaGFy ZHdhcmUgdGFyZ2V0LicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 IFwKLQkiQ0ZMQUdTID0gLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCAtRE5PR0VUVVNFUlNIRUxM IFwKLQktRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURQV0lEX1Q9dWlkX3QgLURDS19BTlNJQyAt RFRDUFNPQ0tFVCBcCi0JLURTRUxFQ1QgLURDS19SVFNDVFMgLU8gJChLRkxBR1MpIiBcCi0JIkxJ QlMgPSAtbGN1cnNlcyIgIkxOS0ZMQUdTID0gLXMgJChMTktGTEFHUykiCi0KLSNTaWxpY29uIEdy YXBoaWNzIElSSVggNi4wLgotaXJpeDYwOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZF UikgZm9yIFNpbGljb24gR3JhcGhpY3MgSVJJWCA2LjAnCi0JQCQoTUFLRSkgIk1BS0U9JChNQUtF KSIgXAotCSJLRkxBR1M9LURJUklYNjAgLU9saW1pdCAyMTM4ICQoS0ZMQUdTKSIgXAotCWlyaXg2 eCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9Ci0KLSNTaWxpY29uIEdyYXBoaWNzIElSSVggNi4y LgotI1NlcmlhbCBzcGVlZHMgPiAzODQwMCBhcmUgYXZhaWxhYmxlIGluIElSSVggNi4yIG9uIE8t Y2xhc3MgbWFjaGluZXMgb25seS4KLSNOb3RlOiBPbGltaXQgbXVzdCBiZSBhIG51bWJlciA+IDAu Ci1pcml4NjI6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU2lsaWNvbiBH cmFwaGljcyBJUklYIDYuMicKLQlAJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBcCi0JTE5LRkxBR1M9 Ii1XbCwtd29mZiw4NCIgXAotCSJLRkxBR1M9LURJUklYNjIgLU9saW1pdCA0NzAwICQoS0ZMQUdT KSIgXAotCWlyaXg2eCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9Ci0KLSNTaWxpY29uIEdyYXBo aWNzIElSSVggNi4zLgotaXJpeDYzOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIFNpbGljb24gR3JhcGhpY3MgSVJJWCA2LjMnCi0JQCQoTUFLRSkgIk1BS0U9JChNQUtFKSIg aXJpeDYyIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9LURJUklYNjMiCi0K LSNTaWxpY29uIEdyYXBoaWNzIElSSVggNi40LgotIyAtd29mZiw4NCB0byBsaW5rZXIgc3RvcHMg Y29tcGxhaW50cyBhYm91dCBubyBzeW1ib2xzIGxvYWRlZCBmcm9tCi0jIGN1cnNlcywgYW5kIC13 b2ZmIDExMTAgc3RvcHMgY29tcGxhaW50cyBhYm91dCB1bnJlYWNoYWJsZSAiYnJlYWs7IgotIyBz dGF0ZW1lbnRzIGluIGNrY3Byby5jIGFtb25nIG90aGVycy4KLSMgdGVzdGVkIG9uIFNHSSBPY3Rh bmUsIHJ1bm5pbmcgSVJJWCA2LjQgdXAgdG8gMTE1MjAwIGJwcy4KLSMgLU9saW1pdCAwIG1lYW5z IGluZmluaXRlLgotaXJpeDY0OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9y IFNpbGljb24gR3JhcGhpY3MgSVJJWCA2LjQnCi0JQCQoTUFLRSkgIk1BS0U9JChNQUtFKSIgXAot CUxOS0ZMQUdTPSItV2wsLXdvZmYsODQiIFwKLQkiS0ZMQUdTPS1ESVJJWDY0IC1EQ0tfUlRTQ1RT IC1PbGltaXQgMzAwMCAtd29mZiAxMTEwICQoS0ZMQUdTKSIgXAotCWlyaXg2eCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9Ci0KLWlyaXg2NGdjYzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQo Q0tWRVIpIGZvciBTaWxpY29uIEdyYXBoaWNzIElSSVggNi40IGdjYycKLQkkKE1BS0UpIHhlcm1p dCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAotCSJD RkxBR1M9IC1EU1ZSNCAtRElSSVg2NCAtRERJUkVOVCAtREhEQlVVQ1AgLUROT0dFVFVTRVJTSEVM TCBcCi0JLURTRUxFQ1QgLURQV0lEX1Q9dWlkX3QgLURUQ1BTT0NLRVQgLUROT0NPVEZNQyBcCi0J LURDS19BTlNJQyAtRENLX1JUU0NUUyAtRENLX05FV1RFUk0gLURDS19DVVJTRVMgXAotCSQoS0ZM QUdTKSAtTyIgIkxJQlM9IC1sY3Vyc2VzIC1sdGVybWNhcCAtbGNyeXB0IgotCi0jTm90ZSB0aGUg bmV3IE9wdGltaXphdGlvbiBvcHRpb24gc3ludGF4IGZvciBNSVBTcHJvIENDIDcuMi4xLjJtLgot I1NlZSBub3RlIG9uIGlyaXg2NWdjYyB0YXJnZXQgYWJvdXQgTGFyZ2UgRmlsZSBTdXBwb3J0IChM RlMpLgotaXJpeDY1OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNHSSBJ UklYIDYuNScKLQlAJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBMTktGTEFHUz0iLVdsLC13b2ZmLDg0 IiBcCi0JIktGTEFHUz0tRElSSVg2NSAtRF9MQVJHRUZJTEVfU09VUkNFIC1EQ0tfUlRTQ1RTIC1P UFQ6T2xpbWl0PTAgXAotCS13b2ZmIDExMTAsMTU1MiwxMTc0ICQoS0ZMQUdTKSIgXAotCWlyaXg2 eCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9Ci0KLSNCdWlsZCBmb3IgdGhvc2UgdGhhdCBoYXZl IEdDQyBpbnN0ZWFkIG9mIE1JUFNwcm8uCi0jCi0jIExhcmdlIEZpbGUgU3VwcG9ydCBub3RlOiB1 c2UgdGhlIGRlZmluZSBfTEFSR0VGSUxFX1NPVVJDRSB0byBlbmFibGUgc3VwcG9ydAotIyBmb3Ig ZmlsZXMgbGFyZ2VyIHRoYW4gMkdCLiAgVGhpcyBtYXkgd29yayBvbiByZWxlYXNlcyBvZiBJcml4 IHByaW9yIHRvCi0jIDYuNS54eC4gIFRvIHZlcmlmeSwgY2hlY2sgdGhlIG1hbiBwYWdlIGZvciBm c3RhdCBhbmQgdmVyaWZ5IHRoYXQgb2ZmX3QgaXMgYQotIyA2NCBiaXQgdmFsdWUgZm9yIGFuIC1u MzIgYnVpbGQuICBBbHNvIGNoZWNrIHRoZSBtYW5wYWdlIGZvciBmc2VlayBhbmQgZnRlbGwKLSMg dG8gdmVyaWZ5IHRoYXQgdGhlIGZzZWVrNjQgYW5kIGZ0ZWxsNjQgZnVuY3Rpb25zIGFyZSBwcm92 aWRlZC4gIElmIHNvLCB0aGVuCi0jIExGUyBzdXBwb3J0IHNob3VsZCB3b3JrIGFuZCB5b3UgY2Fu IHRyeSBhZGRpbmcgLURfTEFSR0VGSUxFX1NPVVJDRSB0byBDRkxBR1MKLSMgZm9yIHlvdXIgc2Vs ZWN0ZWQgSXJpeCB0YXJnZXQuCi0jCi1pcml4NjVnY2M6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgU0dJIElSSVggNi41IHdpdGggZ2NjJwotCSQoTUFLRSkgeGVybWl0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAotCSJD RkxBR1M9IC1EU1ZSNCAtRElSSVg2NSAtRF9MQVJHRUZJTEVfU09VUkNFIC1ERElSRU5UIC1ESERC VVVDUCBcCi0JLUROT0dFVFVTRVJTSEVMTCAtRFNFTEVDVCAtRFBXSURfVD11aWRfdCAtRFRDUFNP Q0tFVCAtRE5PQ09URk1DIFwKLQktRENLX0FOU0lDIC1EQ0tfUlRTQ1RTIC1EQ0tfTkVXVEVSTSAt RENLX0NVUlNFUyBcCi0JJChLRkxBR1MpIC1PIiAiTElCUz0gLWxjdXJzZXMiCi0KLSMgVGhlIDY0 LWJpdCBJUklYIHRhcmdldCB3b3JrcyBidXQgcHJlc3VtYWJseSBpcyBubyBsb25nZXIgbmVlZGVk IGdpdmVuIHRoZQotIyBsYXJnZSBmaWxlIHN1cHBvcnQgaW4gdGhlIG1vcmUgcG9ydGFibGUgYW5k IGNvbXBhY3QgMzItYml0IHZlcnNpb24uCi1pcml4NjVfNjQ6Ci0JQGVjaG8gJ01ha2luZyBDLUtl cm1pdCAkKENLVkVSKSA2NC1iaXQgZm9yIFNHSSBJUklYIDYuNScKLQlAJChNQUtFKSAiTUFLRT0k KE1BS0UpIiBMTktGTEFHUz0iLVdsLC13b2ZmLDg0IiBcCi0JIktGTEFHUz0tRElSSVg2NSAtNjQg LURDS19SVFNDVFMgLU9QVDpPbGltaXQ9MCAtd29mZiAxMTEwLDE1NTIsMTE3NCBcCi0JLURDS182 NEJJVCAkKEtGTEFHUykiIFwKLQlpcml4NnggS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQotCi0j RHVtYiBkb3duIHRvIE1JUFMtMiBpZiBidWlsZGluZyBvbiBSNTAwMCBvciBoaWdoZXIuLi4KLWly aXg2NW1pcHMyOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNHSSBJUklY IDYuNSBNSVBTLTInCi0JQCQoTUFLRSkgIk1BS0U9JChNQUtFKSIgTE5LRkxBR1M9Ii1vMzIgLW1p cHMyIC1XbCwtd29mZiw4NCIgXAotCSJLRkxBR1M9LURJUklYNjUgLURDS19SVFNDVFMgLU9QVDpP bGltaXQ9MCAtbzMyIC1taXBzMiBcCi0JLXdvZmYgMTExMCwxNTUyLDExNzQgJChLRkxBR1MpIiBc Ci0JaXJpeDZ4IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KLQotI1NwZWNpYWwgdGFyZ2V0IHRo YXQgYWRkcyBzcnAsIHNzbCwgYW5kIHpsaWIgc3VwcG9ydC4gIFRoaXMgcmVxdWlyZXMKLSN0aGF0 IHlvdSBoYXZlIHBrZ3NyYyBpbnN0YWxsZWQgaW5zdGVhZCBvZiBJcml4IEZyZWV3YXJlLiAgU2Vl Ci0jTmV0QlNELm9yZyBmb3IgcGtnc3JjIGZvciBJcml4LiAgWW91IHdpbGwgbmVlZCB0byBCVUlM RCB0aGUgc3JwX2NsaWVudAotI3BhY2thZ2UgeW91cnNlbGYuICBJbnN0YWxsIGl0IG1hbnVhbGx5 IHVzaW5nIHRoZSBkaXJlY3Rpb25zIGZvdW5kCi0jaW4gdGhlIG5ldGJzZHMrc3NsK3NycCt6bGli IHRhcmdldCBjb21tZW50cy4KLWlyaXg2NStzc2wrc3JwK3psaWI6Ci0JQGVjaG8gJ01ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgSVJJWCA2LjUgd2l0aCBnY2MgYW5kIFNTTCBTUlAgWkxJQicK LQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0MgPSBnY2Mi ICJDQzIgPSBnY2MiIFwKLQkiQ0ZMQUdTPSAtRElSSVg2NSAtRFNWUjQgLURESVJFTlQgLURIREJV VUNQIC1ETk9HRVRVU0VSU0hFTEwgLURTRUxFQ1QgXAotCS1EVENQU09DS0VUIC1ETk9DT1RGTUMg LURDS19ORVdURVJNIC1EUFdJRF9UPXVpZF90IC1EQ0tfQU5TSUMgXAotCS1JL3Vzci9wa2cvaW5j bHVkZSAtRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1JQIC1EUFJFX1NSUF8xXzRfNSBcCi0JLURD S19SVFNDVFMgLURDS19OQ1VSU0VTIC1EQ0tfRU5DUllQVElPTiAtRENLX0NBU1QgLURDS19ERVMg LURDS19TU0wgXAotCS1ETElCREVTIC1EWkxJQiAtREZORkxPQVQgLUkvdXNyL3BrZy9pbmNsdWRl L29wZW5zc2wgJChLRkxBR1MpIC1PIiBcCi0JIkxJQlM9IC1ML3Vzci9wa2cvbGliIC1ycGF0aCAv dXNyL3BrZy9saWIgLWxuY3Vyc2VzIC1sc3JwIC1sZ21wIC1sZGVzIFwKLQktbHNzbCAtbGtyeXB0 byAtbGNyeXB0byAtbGNyeXB0IC1seiAtbG0iCi0KLWlyaXg2eCtrcmI1OgotCUBlY2hvICdJbmNs dWRlcyBmdWxsc2NyZWVuIGZpbGUgZGlzcGxheSBhbmQgWWVsbG93IFBhZ2VzLi4uJwotCUBlY2hv ICdBZGQgLW1pcHM8bj4gdG8gc3BlY2lmeSBhIHBhcnRpY3VsYXIgaGFyZHdhcmUgdGFyZ2V0LicK LQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0g LURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCAtRE5PR0VUVVNFUlNIRUxMIFwKLQktRENLX0NVUlNF UyAtRENLX05FV1RFUk0gLURQV0lEX1Q9dWlkX3QgLURDS19BTlNJQyAtRFRDUFNPQ0tFVFwKLQkt RFNFTEVDVCAtRENLX1JUU0NUUyAtTyBcCi0JLURDS19BVVRIRU5USUNBVElPTiAtRENLX0tFUkJF Uk9TIC1ES1JCNSAtRENLX0VOQ1JZUFRJT04gLURDS19ERVMgXAotCSQoSzVJTkMpICQoSzVJTkMp L2tyYjUgJChLRkxBR1MpIiBcCi0JIkxJQlMgPSAtbGN1cnNlcyAkKEs1TElCKSAtbGRlczQyNSAt bGtyYjUgXAotCS1sY29tX2VyciAtbGNyeXB0byAtbGNyeXB0IC1sZ3NzYXBpX2tyYjUiIFwKLQki TE5LRkxBR1MgPSAtcyAkKExOS0ZMQUdTKSIKLQotaXJpeDY1K2tyYjU6Ci0JQGVjaG8gJ01ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU0dJIElSSVggNi41JwotCUAkKE1BS0UpICJNQUtFPSQo TUFLRSkiIFwKLQlMTktGTEFHUz0iLVdsLC13b2ZmLDg0IiBcCi0JIktGTEFHUz0tRElSSVg2NSAt RENLX1JUU0NUUyAtT1BUOk9saW1pdD0wIC13b2ZmIDExMTAsMTU1MiwxMTc0IFwKLQkkKEtGTEFH UykiIFwKLQlpcml4Nngra3JiNSBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9Ci0KLSNJbiBjYXNl IHRoZXkgdHlwZSAibWFrZSBzeXM1Ii4uLgotc3lzNToKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSki IHN5czMgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQotCi0jR2VuZXJpYyBBVFQgU3lzdGVtIElJ SSBvciBTeXN0ZW0gViAod2l0aCBJJkQgc3BhY2UpCi1zeXMzOgotCUBlY2hvICdNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgVU5JWCBTeXN0ZW0gSUlJJwotCUBlY2hvICdvciBTeXN0 ZW0gViBSMiBvciBlYXJsaWVyLi4uJwotCUBlY2hvICdhZGQgLUROT01LRElSIGlmIG1rZGlyIGlz IGFuIHVuZGVmaW5lZCBzeW1ib2wuJwotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gXAotCSJDRkxBR1MgPSAtREFUVFNWIC1ETk9VTklDT0RFIC1ETk9TWVNMT0cgLURO T1NZTUxJTksgLUROT0dFVFVTRVJTSEVMTCBcCi0JLUROT0lOSVRHUk9VUFMgLUROT0ZUUlVOQ0FU RSAtRE5PUkVBTFBBVEggLUROT0xFQVJOICQoS0ZMQUdTKSAtaSAtTyIgXAotCSJMTktGTEFHUyA9 IC1pIgotCi0jR2VuZXJpYyBBVFQgU3lzdGVtIElJSSBvciBTeXN0ZW0gViAobm8gSSZEIHNwYWNl KQotc3lzM25pZDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBVCZUIFVO SVggU3lzdGVtIElJSScKLQlAZWNobyAnb3IgU3lzdGVtIFYgUjIgb3IgZWFybGllciwgbm8gSSZE IHNwYWNlLi4uJwotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAot CSJDRkxBR1MgPSAtREFUVFNWIC1ETk9SRUFMUEFUSCAtRE5PVU5JQ09ERSAtRE5PU1lTTE9HIC1E Tk9TWU1MSU5LIFwKLQktRE5PR0VUVVNFUlNIRUxMIC1ETk9JTklUR1JPVVBTIC1ETk9GVFJVTkNB VEUgLUROT0xFQVJOICQoS0ZMQUdTKSAtTyIgXAotCSJMTktGTEFHUyA9IgotCi0jR2VuZXJpYyBB VFQgU3lzdGVtIElJSSBvciBTeXN0ZW0gViBSMiBvciBlYXJsaWVyLCAibm8gdm9pZCI6Ci0jc3Bl Y2lhbCBlbnRyeSB0byByZW1vdmUgIklsbGVnYWwgcG9pbnRlciBjb21iaW5hdGlvbiIgd2Fybmlu Z3MuCi1zeXMzbnY6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCBV TklYIFN5c3RlbSBJSUknCi0JQGVjaG8gJ29yIFN5c3RlbSBWIFIyIG9yIGVhcmxpZXIuLi4nCi0J JChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURB VFRTViAtRE5PUkVBTFBBVEggLUROT1VOSUNPREUgLUROT1NZU0xPRyAtRE5PR0VUVVNFUlNIRUxM IFwKLQktRE5PU1lNTElOSyAtRE5PRlRSVU5DQVRFIC1ETk9JTklUR1JPVVBTIC1ETk9MRUFSTiBc Ci0JLUR2b2lkPWludCAkKEtGTEFHUykgLWkgLU8iIFwKLQkiTE5LRkxBR1MgPSAtaSIKLQotIyBB VCZUIDczMDAgVU5JWCBQQy4gIEFzIG9mIEMtS2VybWl0IDYuMSwgbWFueSBvZiB0aGVzZSBlbnRy aWVzIGRvbid0IHdvcmsKLSMgYW55IG1vcmUgZHVlIHRvICJPdXQgb2YgbWVtb3J5IiBvciAiVG9v IG1hbnkgZGVmaW5lcyIgZXJyb3JzIGR1cmluZwotIyBjb21waWxhdGlvbiwgYXQgbGVhc3Qgbm90 IG9uIHN5c3RlbXMgd2l0aG91dCBsb3RzIG9mIG1lbW9yeS4gIFRoZSBzeXMzdXBjZ2MKLSMgZW50 cnkgd29ya3MgKHVzaW5nIGdjYykgd2l0aCBvcHRpbWl6YXRpb24gcmVtb3ZlZCwgYW5kIG1pZ2h0 IGFsc28gd29yawotIyB3aXRoIG9wdGltaXphdGlvbiBlbmFibGVkIG9uIG1hY2hpbmVzIHdpdGgg bGFyZ2VyIG1lbW9yaWVzLgotCi0jQVQmVCA3MzAwL1VOSVggUEMgKDNCMSkgc3lzdGVtcywgc3lz MyBidXQgc3BlY2lhbCBoYW5kbGluZyBmb3IgaW50ZXJuYWwgbW9kZW0uCi0jTGluayB3aXRoIHRo ZSBzaGFyZWQgbGlicmFyeSAtLSB0aGUgY29uZmxpY3Qgd2l0aCBvcGVuaSBpbiBzaGFyZWQgbGli cmFyeQotI2lzIHNvbHZlZCB3aXRoIC1Eb3Blbmk9eG9wZW5pLiAgTm90ZSB0aGF0IHRoZSB4ZXJt aXQgdGFyZ2V0IGNhbid0IGJlIHVzZWQKLSNmb3IgdGhlIFVuaXggUEM7IHRoZXJlIGlzIG5vIHNl bGVjdCgpLgotc3lzM3VwYzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBB VCZUIDczMDAgVU5JWCBQQywgc2hhcmVkIGxpYi4uLicKLQlAZWNobyAnSWYgc2hhcmVkIGxpYiBj YXVzZXMgdHJvdWJsZSwgdXNlIG1ha2Ugc3lzM3VwY29sZC4nCi0JJChNQUtFKSB3ZXJtaXQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1PIC1EQVRUNzMwMCAtRE5PTUtE SVIgLURVU0VfTUVNQ1BZIC1ETk9SRUFMUEFUSCAtRE5PTEVBUk4gXAotCS1ETk9TWVNMT0cgLURO T1NZTUxJTksgLUROT0dFVFVTRVJTSEVMTCAtRE5PSU5JVEdST1VQUyAtRE5PRlRSVU5DQVRFIFwK LQktRE5PUkVESVJFQ1QgLUROT0dGVElNRVIgLUROT1VOSUNPREUgJChLRkxBR1MpIC1Eb3Blbmk9 eG9wZW5pIiBcCi0JIkNDMiA9IGxkIC9saWIvY3J0MHMubyAvbGliL3NobGliLmlmaWxlIiAiTE5L RkxBR1MgPSAtcyIKLQotI0FUJlQgNzMwMC9Vbml4IFBDIHN5c3RlbXMsIG1pbmltdW0ga2VybWl0 IGZvciB0aG9zZSB3aXRoIHNtYWxsZXIgYW1vdW50cwotI29mIG1lbW9yeS4KLXN5czN1cGNtOgot CUBlY2hvIE1pbmltdW0gaW50ZXJhY3RpdmUKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHN5czN1 cGMgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0tRE5PU1BMIC1ETk9GUklM TFMgLUROT0hFTFAgLUROT0RFQlVHIC1ETk9UTE9HIC1ETk9DU0VUUyBcCi0JLUROT1NZU0xPRyAt RE5PU0VUS0VZIC1ETk9SRUFMUEFUSCIKLQotI0FUJlQgNzMwMC9VTklYIFBDICgzQjEpIHN5c3Rl bXMsIHdpdGggY3Vyc2VzIHN1cHBvcnQuCi0jQ3Vyc2VzIGFuZCB0aGUgc2hhcmVkIGxpYnJhcnkg ZG9uJ3QgZ2V0IGFsb25nLCBzbyB3ZSBkb24ndCB1c2UgdGhlCi0jc2hhcmVkIGxpYnJhcnkuICBX ZSBuZWVkIHRvIGluY2x1ZGUgQ0tfTkVXVEVSTSB0byBhdm9pZCBhIGNvbmZsaWN0Ci0jd2l0aCBj dXJzZXMgYW5kIGJ1ZmZlcmluZyBvbiBzdGRvdXQuICBNZXJnZWQgd2l0aCBzdWJtaXNzaW9uIGJ5 Ci0jUm9iZXJ0IFdlaW5lci9Qcm9ncmFtbWluZyBQbHVzLCByd2VpbmVyQHdhdHN1bi5jYy5jb2x1 bWJpYS5lZHUuCi0jV2UgZG9uJ3QgbmVlZCAtRG9wZW5pPXhvcGVuaSBzaW5jZSB3ZSdyZSBub3Qg dXNpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5LAotI2J1dCB3ZSBrZWVwIGl0IHRvIGJlIGNvbnNpc3Rl bnQgd2l0aCB0aGUgb3RoZXIgZW50cmllcy4KLXN5czN1cGNjOgotCUBlY2hvICdNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgNzMwMCBVTklYIFBDLCBjdXJzZXMuLi4nCi0JJChNQUtF KSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1PIC1EQVRU NzMwMCAtRE5PUkVBTFBBVEggXAotCS1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtRE5PTUtESVIg LUROT1JFRElSRUNUIC1ETk9HRlRJTUVSIC1ETk9MRUFSTiBcCi0JLUROT1NZU0xPRyAtRE5PU1lN TElOSyAtRE5PR0VUVVNFUlNIRUxMIC1ETk9JTklUR1JPVVBTIC1ETk9GVFJVTkNBVEUgXAotCS1E VVNFX01FTUNQWSAtRE5PVU5JQ09ERSAkKEtGTEFHUykgLURvcGVuaT14b3BlbmkiIFwKLQkiTElC UyA9IC1sY3Vyc2VzIiAiTE5LRkxBR1MgPSAtcyIKLQotI0xpa2Ugc3lzM3VwY2MgYnV0IGZvciBB VCZUIFVOSVggMy41MW0gKHJlbGVhc2VkIGFzIGEgcGF0Y2ggb24gRml4IERpc2sgMiksCi0jYWRk cyBoYXJkd2FyZSBmbG93IGNvbnRyb2wuCi1hdHQzNTFtOgotCSQoTUFLRSkgIk1BS0U9JChNQUtF KSIgc3lzM3VwY2MgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0tRENLX1JU U0NUUyAtRFVOSVgzNTFNIgotCi0jQXMgYWJvdmUgYnV0IHdpdGggZ2NjLgotYXR0MzUxZ206Ci0J JChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzeXMzdXBjZ2MgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCi0JIktGTEFHUz0tRENLX1JUU0NUUyAtRFVOSVgzNTFNIgotCi0jQVQmVCA3MzAwIFVOSVgg UEMgKDNCMSksIGFzIGFib3ZlLCBidXQgbm8gbmV3dGVybSgpLgotc3lzM3VwY3g6Ci0JQGVjaG8g J01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCA3MzAwIFVOSVggUEMsIGN1cnNlcy4u LicKLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdT ID0gLU8gLURBVFQ3MzAwIC1ETk9SRUFMUEFUSCAtRE5PVU5JQ09ERSAtRE5PTEVBUk4gXAotCS1E Tk9TWVNMT0cgLUROT1NZTUxJTksgLUROT0dFVFVTRVJTSEVMTCAtRE5PSU5JVEdST1VQUyAtRE5P RlRSVU5DQVRFIFwKLQktRENLX0NVUlNFUyAtRE5PTUtESVIgLUROT1JFRElSRUNUIC1ETk9HRlRJ TUVSIC1EVVNFX01FTUNQWSAkKEtGTEFHUykgXAotCS1Eb3Blbmk9eG9wZW5pIiAiTElCUyA9IC1s Y3Vyc2VzIC1sdGVybWNhcCIgIkxOS0ZMQUdTID0gLXMiCi0KLSNBVCZUIDczMDAvVU5JWCBQQyAo M0IxKSBzeXN0ZW1zLCB3aXRoIGN1cnNlcyBhbmQgc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4KLXN5 czN1cGNzaGNjOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgNzMw MCBVTklYIFBDLCBzaGFyZWQgbGliLi4uJwotCUBlY2hvICdXaXRoIGN1cnNlcy4gIFJlcXVpcmVz IHNoY2MuJwotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJD RkxBR1MgPSAtTyAtREFUVDczMDAgLUROT01LRElSIC1ETk9SRUFMUEFUSCAtRE5PTEVBUk4gXAot CS1ETk9TWVNMT0cgLUROT1NZTUxJTksgLUROT0dFVFVTRVJTSEVMTCAtRE5PSU5JVEdST1VQUyAt RE5PRlRSVU5DQVRFIFwKLQktRENLX05FV1RFUk0gLURDS19DVVJTRVMgIC1ETk9SRURJUkVDVCAt RE5PR0ZUSU1FUiBcCi0JLURVU0VfTUVNQ1BZIC1ETk9VTklDT0RFICQoS0ZMQUdTKSAtRG9wZW5p PXhvcGVuaSIgXAotCSJMTktGTEFHUyA9IC1pIC1zIiAiQ0MgPSBzaGNjIiAiQ0MyID0gc2hjYyIg IkxJQlMgPSAtbGN1cnNlcyIKLQotI0FUJlQgNzMwMC9VTklYIFBDICgzQjEpIHN5c3RlbXMsIGFz IGFib3ZlLCBubyBjdXJzZXMsIGJ1dCB1c2UgZ2NjLgotc3lzM3VwY2c6Ci0JQGVjaG8gJ01ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCA3MzAwIFVOSVggUEMuLi4nCi0JJChNQUtFKSB3 ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1EQVRUNzMwMCAt RE5PUkVESVJFQ1QgLURVU0VfTUVNQ1BZIC1ETk9VTklDT0RFIC1ETk9MRUFSTiBcCi0JLUROT1NZ U0xPRyAtRE5PU1lNTElOSyAtRE5PR0VUVVNFUlNIRUxMIC1ETk9JTklUR1JPVVBTIC1ETk9GVFJV TkNBVEUgXAotCS1ETk9HRlRJTUVSIC1ETk9NS0RJUiAtRE5PUkVBTFBBVEggJChLRkxBR1MpIC1E b3Blbmk9eG9wZW5pIiBcCi0JIkNDID0gZ2NjIiAiQ0MyID0gZ2NjIiAiTE5LRkxBR1MgPSAtcyAt c2hsaWIiCi0KLSNBVCZUIDczMDAvVU5JWCBQQyAoM0IxKSBzeXN0ZW1zLCBjdXJzZXMgYW5kIGdj Yy4KLSNPcHRpbWl6YXRpb24gb21pdHRlZCAtLSBhZGQgaXQgYmFjayBpbiBpZiB5b3VyIG1hY2hp bmUgaGFzIGxvdHMgb2YgbWVtb3J5Lgotc3lzM3VwY2djOgotCUBlY2hvICdNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIEFUJlQgNzMwMCBVTklYIFBDLCBjdXJzZXMuLi4nCi0JJChNQUtFKSB3 ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1EQVRUNzMwMCAt RE5PUkVESVJFQ1QgLURVU0VfTUVNQ1BZIC1ETk9HRlRJTUVSIC1ETk9VTklDT0RFIFwKLQktRE5P U1lTTE9HIC1ETk9TWU1MSU5LIC1ETk9HRVRVU0VSU0hFTEwgLUROT0lOSVRHUk9VUFMgLUROT0ZU UlVOQ0FURSBcCi0JLURDS19DVVJTRVMgLURDS19ORVdURVJNIC1ETk9NS0RJUiAtRE5PUkVBTFBB VEggLUROT0xFQVJOICQoS0ZMQUdTKSIgXAotCSJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgIkxJQlMg PSAtbGN1cnNlcyIgIkxOS0ZMQUdTID0gLXMiCi0KLSNBVCZUIDczMDAvVU5JWCBQQyAoM0IxKSBz eXN0ZW1zLCBzcGVjaWFsIGhhbmRsaW5nIGZvciBpbnRlcm5hbCBtb2RlbS4KLSNObyBGVUxMU0NS RUVOIGZpbGUgdHJhbnNmZXIgZGlzcGxheSAoY3Vyc2VzKS4KLXN5czN1cGNvbGQ6Ci0JQGVjaG8g J01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCA3MzAwIFVOSVggUEMuLi4nCi0JJChN QUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1EQVRU NzMwMCAtRE5PTUtESVIgLURVU0VfTUVNQ1BZIC1ETk9VTklDT0RFIC1ETk9MRUFSTiBcCi0JLURO T1NZU0xPRyAtRE5PU1lNTElOSyAtRE5PR0VUVVNFUlNIRUxMIC1ETk9JTklUR1JPVVBTIC1ETk9G VFJVTkNBVEUgXAotCS1ETk9HRlRJTUVSIC1ETk9SRURJUkVDVCAtRE5PUkVBTFBBVEggJChLRkxB R1MpIC1PIiAiTE5LRkxBR1MgPSAtaSIKLQotI0FzIGFib3ZlLCBidXQgd2l0aCBnY2MuIG1pbmlu dW0gZmVhdHVyZXMgLSBmaXRzIG9uIGEgNDAwSyBVTklYIFBDIGZsb3BweQotI2FmdGVyIGNvbXBy ZXNzaW9uIHdpdGggcm9vbSB0byBzcGFyZTsgYWRkIC1ETk9TSE9XIG9yIG90aGVyIC1ETk94eHh4 IGl0ZW1zCi0jdG8gcmVkdWNlIHNpemUgZXZlbiBmdXJ0aGVyLgotc3lzM3VwY2dtOgotCUBlY2hv IE1pbmltdW0gaW50ZXJhY3RpdmUKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHN5czN1cGNnIEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9LUROT1NQTCAtRE5PRlJJTExTIC1E Tk9IRUxQIC1ETk9ERUJVRyAtRE5PVExPRyAtRE5PQ1NFVFMgXAotCS1ETk9TRVRLRVkgJChLRkxB R1MpIgotCi0jVGhpcyB0YXJnZXQgaXMgZGVzaWduZWQgdG8gY3JlYXRlIGEgdmVyc2lvbiB3aXRo IHRoZSBtb3N0IGZlYXR1cmVzIHBvc3NpYmxlCi0jdGhhdCwgYWZ0ZXIgY29tcHJlc3Npb24sIHN0 aWxsIGZpdHMgb24gYSA0MDBLIFVOSVggUEMgZmxvcHB5Lgotc3lzM3VwY2dmZDoKLQlAZWNobyAn TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBVCZUIDczMDAgVU5JWCBQQyBmbG9wcHkuLi4n Ci0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9 IC1EQVRUNzMwMCAtRE5PUkVESVJFQ1QgLURVU0VfTUVNQ1BZIC1ETk9TUEwgLUROT0xFQVJOIFwK LQktRE5PU1lTTE9HIC1ETk9TWU1MSU5LIC1ETk9HRVRVU0VSU0hFTEwgLUROT0lOSVRHUk9VUFMg LUROT0ZUUlVOQ0FURSBcCi0JLUROT0dGVElNRVIgLUROT1JFQUxQQVRIIC1Eb3Blbmk9eG9wZW5p IFwKLQktRE5PSEVMUCAtRE5PREVCVUcgLUROT1RMT0cgLUROT0NTRVRTIC1ETk9TRVRLRVkgLURO T01LRElSICQoS0ZMQUdTKSIgXAotCSJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgIkxOS0ZMQUdTID0g LXMiCi0KLSNBVCZUIDYzMDAgUExVUyAod2FybmluZywgLU8gbWlnaHQgbWFrZSBpdCBydW4gb3V0 IG9mIHNwYWNlKS4KLSNOT1RFOiBSZW1vdmUgLURIREJVVUNQIGlmIG5vdCB1c2luZyBIb25leSBE YW5CZXIgVVVDUC4KLWF0dDYzMDA6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBm b3IgQVQmVCA2MzAwIFBMVVMuLi4nCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfSBcCi0JIkNGTEFHUyA9IC1EQVRUNjMwMCAtREhEQlVVQ1AgLUROT0ZJTEVIIC1ETk9S RUFMUEFUSCAtRE5PTEVBUk4gXAotCS1ETk9TWVNMT0cgLUROT1NZTUxJTksgLUROT0dFVFVTRVJT SEVMTCAtRE5PSU5JVEdST1VQUyAtRE5PRlRSVU5DQVRFIFwKLQktRE5PVU5JQ09ERSAkKEtGTEFH UykgLU8gLU1sIC1pIiAiTE5LRkxBR1MgPSAtaSAtTWwiCi0KLSNBcyBhYm92ZSwgYnV0IHdpdGgg Y3Vyc2VzIHN1cHBvcnQuICBEZWJ1Z2dpbmcgZGlzYWJsZWQgdG8gcHJldmVudCB0aHJhc2hpbmcu Ci1hdHQ2MzAwYzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBVCZUIDYz MDAgUExVUy4uLicKLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwK LQkiQ0ZMQUdTID0gLURBVFQ2MzAwIC1ESERCVVVDUCAtRE5PRklMRUggLUROT0NTRVRTIC1ETk9S RUFMUEFUSCBcCi0JLUROT1NZU0xPRyAtRE5PU1lNTElOSyAtRE5PR0VUVVNFUlNIRUxMIC1ETk9J TklUR1JPVVBTIC1ETk9GVFJVTkNBVEUgXAotCS1EQ0tfQ1VSU0VTIC1ETk9ERUJVRyAtRE5PVU5J Q09ERSAtRE5PTEVBUk4gJChLRkxBR1MpIC1PIC1NbCAtaSIgXAotCSJMTktGTEFHUyA9IC1pIC1N bCIgIkxJQlMgPSAtbGN1cnNlcyIKLQotI0FUJlQgNjMwMCBQTFVTIHdpdGggbm8gY3Vyc2VzLCBu byBkZWJ1Z2dpbmcgKGFib3V0IDM0SyBzbWFsbGVyKQotIyAtT3B0aW1pemF0aW9uIHNhdmVzIGFi b3V0IDIwSyB0b28uCi1hdHQ2MzAwbmQ6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVS KSBmb3IgQVQmVCA2MzAwIFBMVVMsIG5vIGRlYnVnZ2luZy4uLicKLQkkKE1BS0UpIHdlcm1pdCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLURBVFQ2MzAwIC1ESERCVVVD UCAtRE5PREVCVUcgLUROT0ZJTEVIIC1ETk9SRUFMUEFUSCBcCi0JLUROT1NZU0xPRyAtRE5PU1lN TElOSyAtRE5PR0VUVVNFUlNIRUxMIC1ETk9JTklUR1JPVVBTIC1ETk9GVFJVTkNBVEUgXAotCS1E Tk9VTklDT0RFIC1ETk9MRUFSTiAkKEtGTEFHUykgLU8gLWkgLU1sIiAiTE5LRkxBR1MgPSAtaSAt TWwiCi0KLSNBVCZUIDNCMiBhbmQgbWF5YmUgM0IyMC1zZXJpZXMgY29tcHV0ZXJzIHJ1bm5pbmcg QVQmVCBVTklYIFN5c3RlbSBWIFIzLgotI1RoaXMgb25lIHdhcyBhY3R1YWxseSB1c2VkIHRvIGJ1 aWxkIEMtS2VybWl0IDcuMCBzdWNjZXNzZnVsbHkgb24gYSAzQjIvMzAwLgotYXR0M2IyOgotCUBl Y2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgM0IyJwotCSQoTUFLRSkgd2Vy bWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAtREFUVFNWIC1ETk9S RURJUkVDVCAtRFVTRV9NRU1DUFkgXAotCS1ETk9USU1FVkFMIC1ETk9USU1FWk9ORSAtRE1JTklE SUFMIC1ETk9DSEFOTkVMSU8gLUROT0JJR0JVRiBcCi0JLUROT1NZU0xPRyAtRE5PU1lNTElOSyAt RE5PR0VUVVNFUlNIRUxMIC1ETk9JTklUR1JPVVBTIC1ETk9GVFJVTkNBVEUgXAotCS1ETk9HRlRJ TUVSIC1ETk9SRUFMUEFUSCAtRG9wZW5pPXhvcGVuaSAtRE5PRlJJTExTIC1ETk9MRUFSTiBcCi0J LUROT0hFTFAgLUROT0RFQlVHIC1ETk9UTE9HIC1ETk9DU0VUUyAtRE5PU0VUS0VZIC1ETk9NS0RJ UiAkKEtGTEFHUykiIFwKLQkiQ0MgPSBnY2MiICJDQzIgPSBnY2MiICJMTktGTEFHUyA9IC1zIgot Ci0jIFRoZSBuZXh0IHR3byBhcmUgbGlrZWx5IG5vdCB0byB3b3JrIGFzLWlzLgotCi0jQVQmVCAz QjIsIDNCMjAtc2VyaWVzIGNvbXB1dGVycyBydW5uaW5nIEFUJlQgVU5JWCBTeXN0ZW0gVi4KLSNU aGlzIGlzIGp1c3QgZ2VuZXJpYyBTeXN0ZW0gViB3aXRoIEhvbmV5IERhbkJlciBVVUNQLCBzbyBy ZWZlciB0byBzeXMzaGRiLgotI1JlbW92ZSAtRE5PTkFXUyBpZiB5b3UgY2FuIGdldCBhd2F5IHdp dGggaXQuCi1hdHQzYng6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzeXMzaGRiIEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9JChLRkxBR1MpIC1ETk9OQVdTIC1ETk9USU1F VkFMIgotCi0jIDNCeCB3aXRoIGNoYXJzZXRzIChleGNlcHQgVW5pY29kZSkgYnV0IG5vIGN1cnNl cy4KLWF0dDNieDE6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCAz QjIgb3IgM0IyMCcKLQlAZWNobyAnd2l0aCBIb25leSBEYW5CZXIgVVVDUCAgbm8gY3Vyc2VzLi4u JwotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1Mg PSAtREFUVFNWIC1ESERCVVVDUCAkKEtGTEFHUykgLUROT1JFRElSRUNUIFwKLQktRE5PVElNRVZB TCAtRE5PVElNRVpPTkUgLURNSU5JRElBTCAtRE5PQ0hBTk5FTElPIC1ETk9CSUdCVUYgXAotCS1E Tk9IRUxQIC1ETk9ERUJVRyAtRE5PR0ZUSU1FUiAtRE5PTEVBUk4gXAotCS1ETk9TWVNMT0cgLURO T1NZTUxJTksgLUROT0dFVFVTRVJTSEVMTCAtRE5PSU5JVEdST1VQUyAtRE5PRlRSVU5DQVRFIFwK LQktRE5PUkVBTFBBVEggLUROT1VOSUNPREUgLWkiIFwKLQkiQ0MgPSBnY2MiICJDQzIgPSBnY2Mi ICJMTktGTEFHUyA9IC1pIC1zIgotCi0jQVQmVCAzQjIsIDNCMjAtc2VyaWVzIGNvbXB1dGVycyBy dW5uaW5nIEFUJlQgVU5JWCBTeXN0ZW0gViwKLSN3aXRoIGZ1bGxzY3JlZW4gZmlsZSB0cmFuc2Zl ciBkaXNwbGF5LgotYXR0M2J4YzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBBVCZUIDNCMiBvciAzQjIwJwotCUBlY2hvICd3aXRoIEhvbmV5IERhbkJlciBVVUNQIGFuZCBj dXJzZXMuLi4nCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0J IkNGTEFHUyA9IC1EQVRUU1YgLURIREJVVUNQIC1ETk9OQVdTIC1ETk9USU1FVkFMICQoS0ZMQUdT KSBcCi0JLUROT1NZU0xPRyAtRE5PU1lNTElOSyAtRE5PR0VUVVNFUlNIRUxMIC1ETk9JTklUR1JP VVBTIC1ETk9GVFJVTkNBVEUgXAotCS1ETk9SRUFMUEFUSCAtRENLX0NVUlNFUyAtRENLX05FV1RF Uk0gLUROT1VOSUNPREUgLUROT0xFQVJOIC1pIC1PIiBcCi0JIkxOS0ZMQUdTID0gLWkiICJMSUJT PS1sY3Vyc2VzIgotCi0jM2J4IHdpdGggY3Vyc2VzIGJ1dCBubyBjaGFyc2V0cwotYXR0M2J4YzM6 Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCAzQjIgb3IgM0IyMCcK LQlAZWNobyAnd2l0aCBIb25leSBEYW5CZXIgVVVDUCB3aXRoIGN1cnNlcy4uLiAgbm8gQ1NFVFMn Ci0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9 IC1EQVRUU1YgLURIREJVVUNQICQoS0ZMQUdTKSAtRE5PUkVESVJFQ1QgXAotCS1ETk9USU1FVkFM IC1ETk9USU1FWk9ORSAtRE1JTklESUFMIC1ETk9DSEFOTkVMSU8gLUROT0JJR0JVRiBcCi0JLURO T0hFTFAgLUROT0RFQlVHIC1ETk9HRlRJTUVSIC1ETk9MRUFSTiBcCi0JLUROT1NZU0xPRyAtRE5P U1lNTElOSyAtRE5PR0VUVVNFUlNIRUxMIC1ETk9JTklUR1JPVVBTIC1ETk9GVFJVTkNBVEUgXAot CS1ETk9SRUFMUEFUSCAtRE5PQ1NFVFMgLURDS19DVVJTRVMgLURDS19ORVdURVJNIC1pIiBcCi0J IkNDID0gZ2NjIiAiQ0MyID0gZ2NjIiAiTE5LRkxBR1MgPSAtaSAtcyIgIkxJQlMgPSAtbGN1cnNl cyIKLQotI0FueSBTeXN0ZW0gViBSMiBvciBlYXJsaWVyIHdpdGggSG9uZXkgRGFuQmVyIFVVQ1Ag KHNhbWUgYXMgYWJvdmUpCi1zeXMzaGRiOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZF UikgZm9yIEFUJlQgVU5JWCBTeXN0ZW0gSUlJJwotCUBlY2hvICdvciBTeXN0ZW0gViBSMiBvciBl YXJsaWVyIHdpdGggSG9uZXkgRGFuQmVyIFVVQ1AuLi4nCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1EQVRUU1YgLURIREJVVUNQIC1ETk9S RUFMUEFUSCAtRE5PVU5JQ09ERSAtRE5PTEVBUk4gXAotCS1ETk9TWVNMT0cgLUROT1NZTUxJTksg LUROT0dFVFVTRVJTSEVMTCAtRE5PSU5JVEdST1VQUyAtRE5PRlRSVU5DQVRFIFwKLQkkKEtGTEFH UykgLWkgLU8iICJMTktGTEFHUyA9IC1pIgotCi0jU3BlcnJ5L1VOSVNZUyA1MDAwIFVUUyBWIDUu MiAoU3lzdGVtIFYgUjIpLCBIb25leSBEYW5CZXIgVVVDUAotdW5pc3lzNXIyOgotCUBlY2hvICdN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNwZXJyeS9VTklTWVMgNTAwMCBVVFMgViA1LjIu Li4nCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFH UyA9IC1EQVRUU1YgLURVTklTWVM1MiAtREhEQlVVQ1AgLUROT1JFQUxQQVRIIC1ETk9VTklDT0RF IFwKLQktRE5PU1lTTE9HIC1ETk9TWU1MSU5LIC1ETk9HRVRVU0VSU0hFTEwgLUROT0lOSVRHUk9V UFMgLUROT0ZUUlVOQ0FURSBcCi0JLUROT0xFQVJOICQoS0ZMQUdTKSAtaSAtTyIgIkxOS0ZMQUdT ID0gLWkiCi0KLSNJbiBjYXNlIHRoZXkgc2F5ICJtYWtlIHN5czVoZGIiIGluc3RlYWQgb2YgIm1h a2Ugc3lzM2hkYiIuLi4KLXN5czVoZGI6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzeXMzaGRi Ci0KLSNDcmVhdGUgdGhlIGNvbW1vbiBoZWFkZXIgbGluZSBmb3IgYWxsIGhwdXhbNS0xMV0qIGVu dHJpZXMgYW5kIGFib3ZlLiBUaGlzIAotI2V4dHJhIGVudHJ5IGlzIGhlcmUgYmVjYXVzZSBvdXIg aGVhZGVyIG1lc3NhZ2UgbGVuZ3RoIG1heSBkaWZmZXIgZm9yIGVhY2ggCi0jQy1LZXJtaXQgdmVy c2lvbi4gRG9uJ3QgdXNlICdmb2xkIC1zJyBmb3IgSFAtVVggNS54IC0gNy54ISBUaGlzIG9wdGlv biBpcyAKLSNhdmFpbGFibGUgb25seSBmb3IgSFAtVVggOC4wIGFuZCBhYm92ZSEKLWhwdXgtaGVh ZGVyOgotCUBIUFVYPWB1bmFtZSAtciB8IHNlZCAtZSAncy9eW14xLTldKi8vJyAtZSAncy9cLjAw JCQvLjAvJ2AgOyBcCi0JWyAiJChNRVNTQUdFMCkiIF0gJiYgTUVTU0FHRTE9IiQoTUVTU0FHRTAp IiA7IFwKLQlNZXNzYWdlMD0nTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBIUDkwMDAgSFAt VVgnIDsgXAotCU1lc3NhZ2UxPSQke01FU1NBR0UxOj0nd2l0aG91dCBhbnkgZXh0cmEgY29tcGls ZXIgb3B0aW1pemF0aW9uJ30gOyBcCi0JTWVzc2FnZUg9IiQkTWVzc2FnZTAgJCRIUFVYIiA7IFwK LQljYXNlICQkSFBVWCBpbiBcCi0JICBbNTY3XS4qKSBlY2hvICIkJE1lc3NhZ2VIXG4kJE1lc3Nh Z2UxIiA7OyBcCi0JICAgICAgKi4qKSBlY2hvICIkJE1lc3NhZ2VIICQke01lc3NhZ2UxfSQoTUVT U0FHRTFBKSIgfCBmb2xkIC1zIDs7IFwKLQllc2FjIHwgc2VkIC1lICdzL14gLy8nIC1lICdzLyAq JCQvLycKLQotIyBQZXRlciBFJ3MgdXBkYXRlZCBIUC1VWCA1Lnh4IGVudHJpZXMgT2N0IDIwMDEu Ci0KLSNIUC05MDAwIDUwMCBIUC1VWCA1Lnh4LCBubyBUQ1AvSVAuCi0jIExhc3Qga25vd24gc3Vj Y2Vzc2Z1bCBidWlsZDogQy1LZXJtaXQgOC4wLjIwNiAyMDAyLzIwLzI3LgotaHB1eDA1MDA6Ci0J QE1FU1NBR0UwPSJubyBUQ1AvSVAgYW5kIG5vIGNvbXBpbGVyIG9wdGltaXphdGlvbiI7XAotCU1F U1NBR0UwPSQke01FU1NBR0UxOi0kJE1FU1NBR0UwfSBcCi0JJChNQUtFKSBocHV4LWhlYWRlcgot CSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAt REhQVVggLURIUFVYNSAtREhQVVhQUkU2NSAtRE5PUkVESVJFQ1QgLUREQ0xHRVRDV0QgXAotCS1E Tk9HRVRVU0VSU0hFTEwgLUROT0dGVElNRVIgLUROT1NZU0xPRyAtRE5PVE9NQUNST1MgLUROT0xT VEFUIFwKLQktRE5PU1lNTElOSyAtRE5PSU5JVEdST1VQUyAtRE5PVU5JQ09ERSAtRE5PTEVBUk4g LUROT0xPTkdMT05HIFwKLQktRFZPSUQ9aW50IC1EQ0tWT0lEPWludCAkKEtGTEFHUykiICJMSUJT ID0gJChMSUJTKSIgIkxOS0ZMQUdTID0gIgotCi0jSFAtOTAwMCA1MDAgSFAtVVggNS4yMSB3aXRo IFdvbGxvbmdvbmcgV0lOL1RDUCAxLjIgVENQL0lQLgotI1JlcXVpcmVzIC91c3Ivd2lucy91c3Iv aW5jbHVkZSBhbmQgL3Vzci9saWIvbGlibmV0LmEgZnJvbSBXb2xsb25nb25nLgotI09wdGltaXph dGlvbiBza2lwcGVkIC0gdGFrZXMgZm9yZXZlci4JUmVhbGx5LgotIyBXQVJOSU5HOiB0aGlzIGRv ZXNuJ3Qgd29yayBpZiBhIGZpbGUgY2FsbGVkICJocHV4MDUwMCIgaXMgb24gdGhlIGRpc2suCi0j IExhc3Qga25vd24gc3VjY2Vzc2Z1bCBidWlsZDogQy1LZXJtaXQgOC4wLjIwNiAyMDAyLzIwLzI3 LgotaHB1eDA1MDB3aW50Y3A6Ci0JQE1FU1NBR0UxPSJ3aXRoIFdJTi9UQ1AgYnV0IHdpdGhvdXQg YW55IGV4dHJhIGNvbXBpbGVyIG9wdGltaXphdGlvbiIgXAotCSQoTUFLRSkgaHB1eDA1MDAgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUyA9IC1EVENQU09DS0VUIC1ESFBVWDVX SU5UQ1AgLURJTkFERFJYIC1ETk9fRE5TX1NSViBcCi0JLUROT01ISE9TVCAtRFZPSUQ9aW50IC1E Q0tWT0lEPWludCAtRE5PSEFERFJMSVNUIC1ETk9MT05HTE9ORyBcCi0JLUkvdXNyL3dpbnMvdXNy L2luY2x1ZGUgJChLRkxBR1MpIiAiTElCUyA9IC91c3IvbGliL2xpYm5ldC5hIgotCi0jSFAtVVgg Ni41LCBzaG9ydCBmaWxlbmFtZXMsIG5vIG5ldHdvcmsgYW5kIG5vIGN1cnNlcyBzdXBwb3J0Lgot I2NrY3BybywgY2t1dXNyLCBja3V1czMgYW5kIG90aGVycyBhcmUgYnJva2VuIG91dCBiZWNhdXNl IHRoZXkgbWFrZSB0aGUKLSNvcHRpbWl6ZXIgcnVuIGF3YXkuICBOb3RlIHRoYXQgdGhlIFhFUk1J VCB0YXJnZXQgZG9lcyBub3Qgd29yayB3aXRoIEhQLVVYIDYuNSEKLSMKLSNJZiB5b3UgZ2V0IGNv bXBpbGVyIHdhcm5pbmdzIGxpa2U6Ci0jJ1N3aXRjaCB0YWJsZSBvdmVyZmxvdy4gVHJ5IHRoZSAt V2MsLU53IG9wdGlvbi4nIChmb3IgY2tjdW5pLmMsIG9yCi0jb3RoZXIgZmlsZXMpIGluY3JlYXNl IHRoZSAnLi4uJyB2YWx1ZSBpbiAnLVdjLC1Ody4uLichIFRoZSBkZWZhdWx0IG1heGltdW0KLSNz d2l0Y2ggdGFibGUgc3RhY2sgKC1OdykgaXMgMjUwIHRhYmxlIGVudHJpZXMuIGNrY3VuaS5jIGZy b20gT2N0IDE2IDIwMDkKLSNuZWVkcyAyNTcgdGFibGUgZW50cmllcyAoQy1LZXJtaXQgVmVyc2lv biAiOS4wLjI5OSIpLgotI09LOiAyMDEwLzAzLzI2Ci1ocHV4MDY1MDoKLQlAJChNQUtFKSBocHV4 LWhlYWRlcgotCUBNRVNTQUdFMj0kJHtNRVNTQUdFMjotJ2FuZCBOTyBuZXR3b3JrJ307IFwKLQll Y2hvICJzdXBwb3J0aW5nOiBOTyBsb25nIGZpbGVuYW1lcyAkJE1FU1NBR0UyLiIKLQotCSQoTUFL RSkgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JCWNrdXVzMy4kKEVYVCkgY2t1dXM0LiQo RVhUKSBja3V1czUuJChFWFQpIGNrdXVzNi4kKEVYVCkgXAotCQlja3V1c3IuJChFWFQpIGNrdXhs YS4kKEVYVCkgY2tjZnRwLiQoRVhUKSBja2Nwcm8uJChFWFQpIFwKLQkiQ0ZMQUdTID0gLURIUFVY IC1ESFBVWDYgLURTSUdfViAtRE5PU1lTTE9HIC1ETk9TRUxFQ1QgLURGTkZMT0FUIFwKLQktRERD TEdFVENXRCAtRE5PR0VUVVNFUlNIRUxMIC1ETk9fRE5TX1NSViAtRE5PTEVBUk4gLUROT0xPTkdM T05HIFwKLQkkKEtGTEFHUykiCi0KLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLURIUFVYIC1ESFBVWDYgLURTSUdfViAtRE5PU1lTTE9HIC1E Tk9TRUxFQ1QgLURGTkZMT0FUIFwKLQktRERDTEdFVENXRCAtRE5PR0VUVVNFUlNIRUxMIC1ETk9f RE5TX1NSViAtRE5PTEVBUk4gLUROT0xPTkdMT05HIFwKLQkkKEtGTEFHUykgLVdjLC1OdzI2MCAk KE9GTEFHUykiICJMTktGTEFHUyA9IC1zIiAiTElCUyA9IC1sbSAkKExJQlMpIgotCi0jRXhhY3Rs eSBhcyBhYm92ZSwgcGx1cyBjdXJzZXM6Ci0jT0s6IDIwMDkvMTAvMDYKLWhwdXgwNjUwYzoKLQlA TUVTU0FHRTI9ImFuZCBOTyBuZXR3b3JrIGJ1dCB3aXRoIGN1cnNlcyIgXAotCSQoTUFLRSkgaHB1 eDA2NTAgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUyA9IC1EQ0tfQ1VSU0VT ICQoS0ZMQUdTKSIgXAotCSJMSUJTID0gLWxjdXJzZXMiCi0KLSNFeGFjdGx5IGFzIGFib3ZlLCBw bHVzIGN1cnNlcyArIG5ldHdvcms6Ci0jT0s6IDIwMDkvMTAvMDIKLWhwdXgwNjUwdGNwYzoKLQlA TUVTU0FHRTI9ImJ1dCB3aXRoIGN1cnNlcyBhbmQgd2l0aCBUQ1AvSVAiIFwKLQkkKE1BS0UpIGhw dXgwNjUwIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9LURDS19DVVJTRVMg LURUQ1BTT0NLRVQgLUROT0hBRERSTElTVCBcCi0JLURJTlRTRUxFQ1QgLUROT0NLR0VURlFIT1NU ICQoS0ZMQUdTKSIgXAotCSJMSUJTPS1sY3Vyc2VzIgotCi0jRXhhY3RseSBhcyBocHV4MDY1MCBi dXQgd2l0aCBjb21waWxlciBvcHRpbWl6YXRpb246Ci0jT0s6IDIwMDkvMTAvMDYKLWhwdXgwNjUw bzoKLQlATUVTU0FHRTE9IndpdGggY29tcGlsZXIgb3B0aW1pemF0aW9uIiBcCi0JJChNQUtFKSBo cHV4MDY1MCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTID0gJChLRkxBR1Mp IiAiT0ZMQUdTID0gLU8iCi0KLSNFeGFjdGx5IGFzIGhwdXgwNjUwYyBidXQgd2l0aCBjb21waWxl ciBvcHRpbWl6YXRpb246Ci0jT0s6IDIwMDkvMTAvMDYKLWhwdXgwNjUwb2M6Ci0JQE1FU1NBR0Ux PSJ3aXRoIGNvbXBpbGVyIG9wdGltaXphdGlvbiIgXAotCSQoTUFLRSkgaHB1eDA2NTBjIEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1MgPSAkKEtGTEFHUykiICJPRkxBR1MgPSAt TyIKLQotI0V4YWN0bHkgYXMgaHB1eDA2NTB0Y3BjIGJ1dCB3aXRoIGNvbXBpbGVyIG9wdGltaXph dGlvbjoKLSNPSzogMjAwOS8xMC8wNgotaHB1eDA2NTBvdGNwYzoKLQlATUVTU0FHRTE9IndpdGgg Y29tcGlsZXIgb3B0aW1pemF0aW9uIiBcCi0JJChNQUtFKSBocHV4MDY1MHRjcGMgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUyA9ICQoS0ZMQUdTKSIgIk9GTEFHUyA9IC1PIgot Ci0jVGFrZSB0aGlzIGFzIHN0YXJ0dXAgZW50cnkgZm9yIGFsbCAnbm9uLW9wdGltaXplZCcgZmls ZXMgdW5kZXIgSFAtVVggNy54IQotI01ha2Ugc3VyZSB3ZSBkb24ndCBjYWxsIGl0IHdpdGggdGhl ICctTycgb3B0aW9uIGJlY2F1c2UgdGhpcyB3aWxsIGJsb3cgdXAKLSN0aGUgY29tcGlsZXIhCi0j T0s6IDIwMDkvMDkvMzAKLWhwdXgwNzAwbm9vcHQ6Ci0JQGNhc2UgIiQoQ0ZMQUdTKSIgaW4gXAot CSotTyopIGVjaG8gIkRvbid0IHVzZSBDRkxBR1M9IC1PIGhlcmUhIiA7OyBcCi0JICAgKikgJChN QUtFKSBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkgICAgICBja3V1c3IuJChFWFQpIGNr dXVzMy4kKEVYVCkgY2t1dXM0LiQoRVhUKSBja3V1czUuJChFWFQpIFwKLQkgICAgICBja3V1czYu JChFWFQpIGNrdXVzNy4kKEVYVCkgY2t1eGxhLiQoRVhUKSBcCi0JICAgICAgY2tjdW5pLiQoRVhU KSBja2NmdHAuJChFWFQpIGNrY3Byby4kKEVYVCkgXAotCSAgICAgIDs7IFwKLQllc2FjCi0KLSNI UC1VWCA3LjAsIG5vIGxvbmcgZmlsZW5hbWVzLCBubyBuZXR3b3JrIHN1cHBvcnQsIG5vIGN1cnNl cy4KLSNJZiB5b3UgZ2V0IGNvbXBpbGVyIHdhcm5pbmdzIGxpa2U6Ci0jJ1N3aXRjaCB0YWJsZSBv dmVyZmxvdy4gVHJ5IHRoZSAtV2MsLU53IG9wdGlvbi4nIChmb3IgY2tjdW5pLmMsIG9yCi0jb3Ro ZXIgZmlsZXMpIGluY3JlYXNlIHRoZSAnLi4uJyB2YWx1ZSBpbiAnLVdjLC1Ody4uLichIFRoZSBk ZWZhdWx0IG1heGltdW0KLSNzd2l0Y2ggdGFibGUgc3RhY2sgKC1OdykgaXMgMjUwIHRhYmxlIGVu dHJpZXMuIGNrY3VuaS5jIGZyb20gT2N0IDE2IDIwMDkKLSNuZWVkcyAyNTcgdGFibGUgZW50cmll cyAoQy1LZXJtaXQgVmVyc2lvbiAiOS4wLjI5OSIpLgotI09LOiAyMDEwLzEwLzI2Ci1ocHV4MDcw MHNmOgotCUAkKE1BS0UpIGhwdXgtaGVhZGVyCi0JQGVjaG8gJ3N1cHBvcnRpbmc6IE5PIGxvbmcg ZmlsZW5hbWVzLCBOTyBuZXR3b3JrLCBOTyBjdXJzZXMuJwotCSQoTUFLRSkgaHB1eDA3MDBub29w dCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLURIUFVYIC1ESFBVWDcg LURTSUdfViAtRE5PR0VUVVNFUlNIRUxMIC1ERk5GTE9BVCBcCi0JLUROT19ETlNfU1JWICQoS0ZM QUdTKSAtV2MsLU53MjYwIgotCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCi0JIkNGTEFHUyA9IC1ESFBVWCAtREhQVVg3IC1EU0lHX1YgLUROT0dFVFVTRVJTSEVM TCAtREZORkxPQVQgXAotCS1ETk9fRE5TX1NSViAkKEtGTEFHUykgLVdjLC1OdzI2MCAkKE9GTEFH UykiIFwKLQkiTE5LRkxBR1MgPSAtcyIgIkxJQlMgPSAtbG0gJChMSUJTKSIKLQotI0V4YWN0bHkg YXMgaHB1eDA3MDBzZiBidXQgd2l0aCBjb21waWxlciBvcHRpbWl6YXRpb246Ci0jT0s6IDIwMDkv MDkvMzAKLWhwdXgwNzAwb3NmOgotCUBNRVNTQUdFMT0id2l0aCBjb21waWxlciBvcHRpbWl6YXRp b24iIFwKLQkkKE1BS0UpIGhwdXgwNzAwc2YgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0J IktGTEFHUyA9ICQoS0ZMQUdTKSIgIk9GTEFHUyA9IC1PIgotCi0jSFAtVVggNy4wLCBzaG9ydCBm aWxlbmFtZXMsIGJ1dCB3aXRoIHRjcC9pcCBhbmQgY3Vyc2VzLgotI1RvIHVzZSB0aGlzLCB5b3Ug bXVzdCBoYXZlIGJvdWdodCB0aGUgQVJQQSBTZXJ2aWNlcyBQcm9kdWN0IGZyb20gSFAsIGFuZCB5 b3UKLSNtdXN0IGhhdmUgL3Vzci9saWIvbGliQlNELmEuCi0jCi0jSWYgeW91IGdldCBjb21waWxl ciB3YXJuaW5ncyBsaWtlOgotIydTeW1ib2wgdGFibGUgb3ZlcmZsb3cuIFRyeSB0aGUgLVdjLC1O cyBvcHRpb24uJyAoYXMgZm9yIGNrdXVzNC5jIG9yCi0jb3RoZXIgZmlsZXMpIGluY3JlYXNlIHRo ZSAnLi4uJyB2YWx1ZSBpbiAnLVdjLC1Ocy4uLichIFRoZSBkZWZhdWx0IG1heGltdW0KLSNzeW1i b2wgdGFibGUgc2l6ZSAoLU5zKSBpcyAyMDAwIHRhYmxlIGVudHJpZXMuIGNrdXVzNC5jIGZyb20g TWFyIDEyIDIwMTAKLSNuZWVkcyAyMDMxIHRhYmxlIGVudHJpZXMgKEMtS2VybWl0IFZlcnNpb24g IjkuMC4yOTkiKS4KLSNPSzogMjAxMC8wMy8yNAotaHB1eDA3MDBzZnRjcGM6Ci0JQCQoTUFLRSkg aHB1eC1oZWFkZXIKLQlAZWNobyAnc3VwcG9ydGluZzogTk8gbG9uZyBmaWxlbmFtZXMsIFxjJwot CUBlY2hvICdidXQgd2l0aCBuZXR3b3JraW5nLCBjdXJzZXMsIEhEQiB1dWNwLi4uJwotCSQoTUFL RSkgaHB1eDA3MDBub29wdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0g IC1ESFBVWERFQlVHIC1ESFBVWCAtREhQVVg3IC1EVENQU09DS0VUIC1EU0lHX1YgXAotCS1EQ0tf UkVESVIgLURDS19SVFNDVFMgLURDS19DVVJTRVMgLUROT0dFVFVTRVJTSEVMTCAtREZORkxPQVQg XAotCS1ETk9fRE5TX1NSViAtREhEQlVVQ1AgLURMT0NLX0RJUj1cXFwiL3Vzci9zcG9vbC91dWNw XFxcIiBcCi0JLUROT0xPTkdMT05HICQoS0ZMQUdTKSAtV2MsLU53MjYwLC1OczIwNDAiCi0KLQkk KE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gIC1E SFBVWERFQlVHIC1ESFBVWCAtREhQVVg3IC1EVENQU09DS0VUIC1EU0lHX1YgXAotCS1EQ0tfUkVE SVIgLURDS19SVFNDVFMgLURDS19DVVJTRVMgLUROT0dFVFVTRVJTSEVMTCAtREZORkxPQVQgXAot CS1ETk9fRE5TX1NSViAtREhEQlVVQ1AgLURMT0NLX0RJUj1cXFwiL3Vzci9zcG9vbC91dWNwXFxc IiBcCi0JLUROT0xPTkdMT05HICQoS0ZMQUdTKSAtV2MsLU53MjYwLC1OczIwNDAgJChPRkxBR1Mp IiBcCi0JIkxOS0ZMQUdTID0gLXMiICJMSUJTID0gLWxtIC1sQlNEIC1sY3Vyc2VzIgotCi0jRXhh Y3RseSBhcyBhYm92ZSBidXQgd2l0aCBjb21waWxlciBvcHRpbWl6YXRpb246Ci0jT0s6IDIwMDkv MDkvMzAKLWhwdXgwNzAwb3NmdGNwYzoKLQlATUVTU0FHRTE9IndpdGggY29tcGlsZXIgb3B0aW1p emF0aW9uIiBcCi0JJChNQUtFKSBocHV4MDcwMHNmdGNwYyBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKLQkiS0ZMQUdTID0gJChLRkxBR1MpIiAiT0ZMQUdTID0gLU8iCi0KLSNIUCA5MDAwIHNl cmllcyAzMDAvODAwIEhQLVVYIDcuMCwgbG9uZyBmaWxlbmFtZXMsIG5ldHdvcmsgc3VwcG9ydCwg SERCIHV1Y3AsCi0jYnV0IE5PIGN1cnNlcy4gU2VlIGNvbW1lbnRzIGluIGhwdXgwNzAwc2Z0Y3Bj IGFib3V0IFRDUC9JUCBzdXBwb3J0LgotIwotI0lmIHlvdSBnZXQgY29tcGlsZXIgd2FybmluZ3Mg bGlrZToKLSMnU3ltYm9sIHRhYmxlIG92ZXJmbG93LiBUcnkgdGhlIC1XYywtTnMgb3B0aW9uLicg KGFzIGZvciBja3V1czQuYyBvcgotI290aGVyIGZpbGVzKSBpbmNyZWFzZSB0aGUgJy4uLicgdmFs dWUgaW4gJy1XYywtTnMuLi4nISBUaGUgZGVmYXVsdCBtYXhpbXVtCi0jc3ltYm9sIHRhYmxlIHNp emUgKC1OcykgaXMgMjAwMCB0YWJsZSBlbnRyaWVzLiBja3V1czQuYyBmcm9tIE1hciAxMiAyMDEw Ci0jbmVlZHMgMjAzMSB0YWJsZSBlbnRyaWVzIChDLUtlcm1pdCBWZXJzaW9uICI5LjAuMjk5Iiku Ci0jT0s6IDIwMTAvMDMvMjQKLWhwdXgwNzAwbGZuOgotCUAkKE1BS0UpIGhwdXgtaGVhZGVyCi0J QGVjaG8gJ3N1cHBvcnRpbmc6IGxvbmcgZmlsZW5hbWVzLCBuZXR3b3JraW5nLCBIREIgdXVjcCQo TUVTU0FHRTIpLi4uJwotCSQoTUFLRSkgaHB1eDA3MDBub29wdCBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9IFwKLQkiQ0ZMQUdTID0gIC1ESFBVWERFQlVHIC1ESFBVWCAtREhQVVg3IC1EVENQU09D S0VUIC1EU0lHX1YgLURGTkZMT0FUIFwKLQktRE5PR0VUVVNFUlNIRUxMIC1ETk9TRVRCVUYgLURD S19SRURJUiAtRENLX1JUU0NUUyAtRExPTkdGTiBcCi0JLUROT19ETlNfU1JWIC1ERElSRU5UIC1E SERCVVVDUCAtRExPQ0tfRElSPVxcXCIvdXNyL3Nwb29sL3V1Y3BcXFwiIFwKLQktRE5PTE9OR0xP TkcgJChLRkxBR1MpIC1XYywtTncyNjAsLU5zMjA0MCIKLQotCSQoTUFLRSkgeGVybWl0IEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAgLURIUFVYREVCVUcgLURIUFVYIC1E SFBVWDcgLURUQ1BTT0NLRVQgLURTSUdfViAtREZORkxPQVQgXAotCS1ETk9HRVRVU0VSU0hFTEwg LUROT1NFVEJVRiAtRENLX1JFRElSIC1EQ0tfUlRTQ1RTIC1ETE9OR0ZOIFwKLQktRE5PX0ROU19T UlYgLURESVJFTlQgLURIREJVVUNQIC1ETE9DS19ESVI9XFxcIi91c3Ivc3Bvb2wvdXVjcFxcXCIg XAotCS1ETk9MT05HTE9ORyAkKEtGTEFHUykgLVdjLC1OdzI2MCwtTnMyMDQwICQoT0ZMQUdTKSIg XAotCSJMTktGTEFHUyA9IC1zIiAiTElCUyA9IC1sbSAtbEJTRCAkKExJQlMpIgotCi0jRXhhY3Rs eSBhcyBhYm92ZSArIGN1cnNlcy4KLSNPSzogMjAwOS8wOS8zMAotaHB1eDA3MDBsZm5jOgotCUBN RVNTQUdFMj0nLCBjdXJzZXMnIFwKLQkkKE1BS0UpIGhwdXgwNzAwbGZuIEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAotCSJLRkxBR1MgPSAtRENLX0NVUlNFUyAkKEtGTEFHUykiIFwKLQkiTElC UyA9IC1sY3Vyc2VzIgotCi0jRXhhY3RseSBhcyBhYm92ZSBocHV4MDcwMGxmbiBidXQgd2l0aCBj b21waWxlciBvcHRpbWl6YXRpb246Ci0jT0s6IDIwMDkvMDkvMzAKLWhwdXgwNzAwb2xmbjoKLQlA TUVTU0FHRTE9IndpdGggY29tcGlsZXIgb3B0aW1pemF0aW9uIiBcCi0JJChNQUtFKSBocHV4MDcw MGxmbiBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTID0gJChLRkxBR1MpIiAi T0ZMQUdTID0gLU8iCi0KLSNFeGFjdGx5IGFzIGFib3ZlIGhwdXgwNzAwbGZuYyBidXQgd2l0aCBj b21waWxlciBvcHRpbWl6YXRpb246Ci0jT0s6IDIwMDkvMDkvMzAKLWhwdXgwNzAwb2xmbmM6Ci0J QE1FU1NBR0UxPSJ3aXRoIGNvbXBpbGVyIG9wdGltaXphdGlvbiIgXAotCSQoTUFLRSkgaHB1eDA3 MDBsZm5jIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1MgPSAkKEtGTEFHUyki ICJPRkxBR1MgPSAtTyIKLQotI0hQIDkwMDAgU2VyaWVzIDMwMCBvciA0MDAsIEhQLVVYIDguMCwg bG9uZyBmaWxlbmFtZXMgYW5kIFRDUC9JUCBzdXBwb3J0LgotI1RoaXMgb25lIHNob3VsZCBhbHNv IHdvcmsgb24gNzAwLzgwMCwgYnV0IHdpdGhvdXQgUEEtc3BlY2lmaWMgb3B0aW1pemF0aW9uLgot I0luIGNhc2UgLURDS19SVFNDVFMgYW5kIC1EQ0tfUkVESVIgbWFrZSB0cm91YmxlLCByZW1vdmUg dGhlbS4KLSNOT1RFOiBja2Nwcm8uYywgY2t1dXNyLmMgYW5kIGNrdXVzMy5jIGJsb3cgdXAgdGhl IG9wdGltaXplciwgc28gZG9uJ3Qgb3B0aW1pemUKLSN0aGVtLgotI0ZvciBIUC1VWCA4LjAgb24g TW90b3JvbGEgQ1BVcywgeW91IG1pZ2h0IGhhdmUgdG8gcmVpbnN0YWxsIHlvdXIga2VybmVsIHdp dGgKLSNtYXhkc2l6ID49IDB4MDMwMDAwMDAuICBCdXQgaWYgcGh5c2ljYWwgbWVtb3J5IGlzIHNt YWxsLCB0aGF0IHN0aWxsIHdpbGwgbm90Ci0jaGVscCBtdWNoLgotI09LOiAyMDA5LzEwLzAxCi1o cHV4MDgwMDoKLQlAJChNQUtFKSBocHV4LWhlYWRlcgotCUBNRVNTQUdFMz0kJHtNRVNTQUdFMzo9 J1RDUC9JUCd9OyBcCi0JZWNobyAic3VwcG9ydGluZzogbG9uZyBmaWxlbmFtZXMsICQkTUVTU0FH RTMsIEhEQiBVVUNQJChNRVNTQUdFMikuLi4iCi0JJChNQUtFKSAtQiAiQ0M9JChDQykiICJDQzI9 JChDQzIpIiBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQlja2Nwcm8uJChFWFQpIGNrdXVz ci4kKEVYVCkgY2t1dXMzLiQoRVhUKSBcCi0JIkNGTEFHUyA9ICAtRENLX1JFRElSIC1ESFBVWERF QlVHIC1ESFBVWCAtREhQVVg4IC1EUkVOQU1FIC1EU0lHX1YgXAotCS1ETk9TRVRCVUYgLURESVJF TlQgLURDS19SVFNDVFMgLURTVEVSTUlPWCAtRExPTkdGTiAtRFRDUFNPQ0tFVCBcCi0JLURIREJV VUNQICAtRE5PX0ROU19TUlYgLURMT0NLX0RJUj1cXFwiL3Vzci9zcG9vbC91dWNwXFxcIiAtREZO RkxPQVQgXAotCS1ETk9MT05HTE9ORyAkKEtGTEFHUykiCi0KLQkkKE1BS0UpIC1CICJDQz0kKEND KSIgIkNDMj0kKENDMikiIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZM QUdTID0gIC1EQ0tfUkVESVIgLURIUFVYREVCVUcgLURIUFVYIC1ESFBVWDggLURSRU5BTUUgLURT SUdfViBcCi0JLUROT1NFVEJVRiAtRERJUkVOVCAtRENLX1JUU0NUUyAtRFNURVJNSU9YIC1ETE9O R0ZOIC1EVENQU09DS0VUIFwKLQktREhEQlVVQ1AgIC1ETk9fRE5TX1NSViAtRExPQ0tfRElSPVxc XCIvdXNyL3Nwb29sL3V1Y3BcXFwiIC1ERk5GTE9BVCBcCi0JLUROT0xPTkdMT05HIC1ETk9EQ0xF TkRVU0VSU0hFTEwgJChLRkxBR1MpICQoT0ZMQUdTKSIgXAotCSJMTktGTEFHUyA9IC1zIiAiTElC UyA9IC1sbSAtbEJTRCAkKExJQlMpIgotCi0jRXhhY3RseSBhcyBhYm92ZSBocHV4MDgwMCArIGN1 cnNlcy4KLSNPSzogMjAwOS8xMC8wMQotaHB1eDA4MDBjOgotCUBNRVNTQUdFMj0nLCBjdXJzZXMn IFwKLQkkKE1BS0UpIGhwdXgwODAwICBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZM QUdTID0gJChLRkxBR1MpIC1EQ0tfQ1VSU0VTIiAiTElCUyA9IC1sY3Vyc2VzIgotCi0jSFAgOTAw MCBIUC1VWCA4LjAsIG5vIFRDUC9JUCBiZWNhdXNlIC91c3IvbGliL2xpYkJTRC5hIGNhbid0IGJl IGZvdW5kLAotI29yIFRDUC9JUCBoZWFkZXIgZmlsZXMgbWlzc2luZy4KLSNPSzogMjAwOS8xMC8w MQotaHB1eDA4MDBub3RjcDoKLQlATUVTU0FHRTM9J05PIG5ldHdvcmssIE5PIGN1cnNlcycgXAot CSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgaHB1eDA4MDAgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCi0JIktGTEFHUyA9ICQoS0ZMQUdTKSAtVVRDUFNPQ0tFVCIKLQotI05vdyB0aGUgc2FtZSBh cyBhYm92ZSBocHV4MDgwMCBidXQgd2l0aCBjb21waWxlciBvcHRpbWl6YXRpb24KLSNPSzogMjAw OS8xMC8wMQotaHB1eDA4MDBvOgotCUBNRVNTQUdFMT0id2l0aCBjb21waWxlciBvcHRpbWl6YXRp b24iIFwKLQkkKE1BS0UpIGhwdXgwODAwIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJL RkxBR1MgPSAkKEtGTEFHUykiICJPRkxBR1MgPSAtTyIKLQotI0V4YWN0bHkgYXMgYWJvdmUgaHB1 eDA4MDAgKyBjdXJzZXMgYW5kIHdpdGggY29tcGlsZXIgb3B0aW1pemF0aW9uLgotI09LOiAyMDA5 LzEwLzAxCi1ocHV4MDgwMG9jOgotCUBNRVNTQUdFMT0id2l0aCBjb21waWxlciBvcHRpbWl6YXRp b24iIFwKLQkkKE1BS0UpIGhwdXgwODAwYyBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQki S0ZMQUdTID0gJChLRkxBR1MpIiAiT0ZMQUdTID0gLU8iICJMSUJTID0gLWxjdXJzZXMiCi0KLSNF eGFjdGx5IGFzIGFib3ZlIGhwdXgwODAwbm90Y3AgYnV0IHdpdGggY29tcGlsZXIgb3B0aW1pemF0 aW9uCi0jT0s6IDIwMDkvMTAvMDEKLWhwdXgwODAwb25vdGNwOgotCUBNRVNTQUdFMT0id2l0aCBj b21waWxlciBvcHRpbWl6YXRpb24iIFwKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIGhwdXgwODAw bm90Y3AgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUyA9ICQoS0ZMQUdTKSIg Ik9GTEFHUyA9IC1PIgotCi0jSFAgOTAwMCBTZXJpZXMgNzAwIG9yIDgwMCwgSFAtVVggOC4wLCBs b25nIGZpbGVuYW1lcyBhbmQgVENQL0lQIHN1cHBvcnQuCi0jIExpa2UgdGhlIHByZXZpb3VzIGVu dHJpZXMsIGJ1dCB3aXRoIFBBLVJJU0Mtc3BlY2lmaWMgb3B0aW1pemF0aW9uLgotI09LOiAyMDA5 LzEwLzAxCi1ocHV4MDgwMHBhOgotCUBNRVNTQUdFMT0id2l0aCBQQS1SSVNDLXNwZWNpZmljIG9w dGltaXphdGlvbiIgXAotCSQoTUFLRSkgaHB1eDA4MDAgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCi0JIktGTEFHUyA9ICQoS0ZMQUdTKSArT2JiMTEwMCIKLQotI0FzIGFib3ZlLCBidXQgd2l0 aCBjdXJzZXMuCi0jT0s6IDIwMDkvMTAvMDEKLWhwdXgwODAwcGFjOgotCUBNRVNTQUdFMT0id2l0 aCBQQS1SSVNDLXNwZWNpZmljIG9wdGltaXphdGlvbiIgXAotCSQoTUFLRSkgaHB1eDA4MDBjIEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1MgPSAkKEtGTEFHUykgK09iYjExMDAi Ci0KLSNBcyBhYm92ZSwgYnV0IGNvbXBpbGVkIHdpdGggR0NDIDIuMy4zLgotI09LOiAyMDA5LzEw LzAxCi1ocHV4MDgwMHBhZ2NjOgotCUBNRVNTQUdFMT0ndXNpbmcgdGhlIGdjYyBjb21waWxlcicg XAotCSQoTUFLRSkgaHB1eDA4MDAgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNDPWdj YyIgIkNDMj1nY2MiICJLRkxBR1MgPSAtZnVuc2lnbmVkLWNoYXIgJChLRkxBR1MpIgotCi0jSFAt VVggOS4wLCA5LjAxLCA5LjAzLCA5LjA0LCA5LjA1LCA5LjA3LCA5LjEwIC4uLiwgKyBUQ1AvSVAg KyBjdXJzZXMsIGZ1bGx5Ci0jY29uZmlndXJlZC4gIFVzZSB0aGlzIGVudHJ5IHdpdGggdGhlIHJl c3RyaWN0ZWQgY29tcGlsZXI6IG5vIG9wdGltaXphdGlvbiwgbm8KLSNBTlNJIHN1cHBvcnQuICBJ ZiB5b3UgZ2V0IHVucmVzb2x2ZWQgc29ja2V0cyBsaWJyYXJ5IHJlZmVyZW5jZXMgYXQgbGluayB0 aW1lLAotI3RoZW4gdHJ5IGFkZGluZyAtbEJTRCB0byBMSUJTLCBvciBlbHNlIHJlbW92ZSAtRFRD UFNPQ0tFVCB0byBidWlsZCBhIHZlcnNpb24KLSN3aXRob3V0IFRDUC9JUCBzdXBwb3J0LgotIwot I1BsZWFzZSBub3RlIHRoYXQgd2UgaGF2ZSB0byBhZGQgdGhlIGNvbXBpbGVyIG9wdGlvbiArREEx LjAvK0RBMS4xIHRvIGF2b2lkCi0jY29yZS1kdW1wcyBmb3IgbGFyZ2UgYXJndW1lbnRzIGluIElG IE1BVENILiBUaGUgbWFuIHBhZ2Ugc2F5cyB0aGVzZSBvcHRpb25zCi0jYXJlIGRlZmF1bHQgYnV0 IEMtS2VybWl0IGR1bXBzIGNvcmUgd2l0aG91dCB0aGVtISBUaGVyZWZvcmUga2VlcCB0aGVtCi0j dW50b3VjaGVkLiBJZiB5b3Ugd2FudCB0byBvdmVyd3JpdGUgb3IgZGlzYWJsZSB0aGUgK0RBMS4w LytEQTEuMSBvcHRpb24gdXNlCi0jJ21ha2UgaHB1eDA5MDAgT0ZMQUdTPS4uLicuIEFuIG90aGVy IHBvc3NpYmlsaXR5IHdvdWxkIGJlIHRvIGNyZWF0ZSBhIG5ldwotI2tlcm5lbCB3aXRoIG1heHNz aXogPj0gMHgwMTE4NTAwMCAoZGVmYXVsdCBtYXhzc2l6PTB4MDA4MDAwMDApLgotI09LOiAyMDA5 LzA5LzI0Ci1ocHV4MDkwMDoKLQlATUVTU0FHRTFBPScuIFJlYWQgaHB1eDA5MDAgZW50cnkgY29t bWVudHMgaWYgeW91IGhhdmUgdHJvdWJsZS4nIFwKLQkkKE1BS0UpIGhwdXgtaGVhZGVyCi0JQGNh c2UgYHVuYW1lIC1tYCBpbiBcCi0JICAqL1szNF0qKSBLRkxBR1M9Jy1ETk9MT05HTE9ORyAkKEtG TEFHUyknIDs7IFwKLQkgICovNyopICAgIEFGTEFHUz0nK0RBMS4xJyA7OyBcCi0JICAqLzgqKSAg ICBBRkxBR1M9JytEQTEuMCcgOzsgXAotCWVzYWMgOyBcCi0JT0ZMQUdTPSQke09GTEFHUzotJCRB RkxBR1N9IDsgXAotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAot CSJDRkxBR1MgPSAtREhQVVhERUJVRyAtREhQVVg5IC1EU1RFUk1JT1ggLURESVJFTlQgLURVVElN RUggXAotCS1ETk9TRVRCVUYgLURDS19DVVJTRVMgLURUQ1BTT0NLRVQgLURSRU5BTUUgLURDS19S RURJUiAtRExPTkdGTiBcCi0JLURIREJVVUNQIC1ETE9DS19ESVI9XFxcIi91c3Ivc3Bvb2wvdXVj cFxcXCIgLURGTkZMT0FUIFwKLQktRE5PRENMRU5EVVNFUlNIRUxMICQkS0ZMQUdTICQkT0ZMQUdT IiBcCi0JIkxOS0ZMQUdTID0gLXMiICJMSUJTID0gLWxtIC1sY3Vyc2VzIiAiQ0M9JChDQykiICJD QzI9JChDQzIpIgotCi0jTGlrZSBocHV4MDkwMCwgYnV0IGZvciB0aGUgInZhbHVlLWFkZGVkIiBj b21waWxlciBvbiBhbGwgSFAgOTAwMCBtb2RlbHMuCi0jQWRkcyBvcHRpbWl6YXRpb24gYW5kIEFO U0kgY29tcGlsYXRpb246Ci0jICtPMiBtYWtlcyBzbWFsbGVyIGV4ZWN1dGFibGUgKD0gLU8gPSBM ZXZlbC0xIGFuZCBnbG9iYWwgb3B0aW1pemF0aW9uKQotIyArTzMgYWRkcyBpbnRlcnByb2NlZHVy YWwgZ2xvYmFsIG9wdGltaXphdGlvbiwgbWFrZXMgYmlnZ2VyIGV4ZWN1dGFibGUuCi0jIFBsZWFz ZSBub3RlOiBUbyBzdXBwb3J0IGxvbmctbG9uZyB3ZSB3b3VsZCBuZWVkIGNvbXBpbGVyIHN3aXRj aCAnLUFlJyBidXQKLSMgdGhpcyBvbmUgd29ya3Mgb25seSBvbiBSaXNjIHN5c3RlbXMuIEJ1dCB0 aGUgZXF1aXZhbGFudCBjb21waWxlciBmbGFncwotIyAnLUFhIC1EX0hQVVhfU09VUkNFICtlJyB3 b3JrcyBmb3IgTW90b3JvbGEgYW5kIFJpc2MuCi0jIElmIG9wdGltaXphdGlvbiBmYWlscyBvbiBz b21lIG1vZHVsZXMsIHlvdSBjYW4gYWRkOgotIyAgK09iYjxuPiwgK09saW1pdCA8bj4sIG9yICtP bm9saW1pdCwgZGVwZW5kaW5nIG9uIHlvdXIgY2MgdmVyc2lvbiwKLSMgd2hlcmUgPG4+IGlzIGEg bnVtYmVyLCBlLmcuICtPYmIxMjAwLiAgSW4gb3RoZXIgd29yZHMsIGlmIHlvdSBnZXQgb3B0aW1p emVyCi0jIHdhcm5pbmdzLCBhZGQgKGZvciBleGFtcGxlKSArT2JiMTIwMDsgaWYgeW91IHN0aWxs IGdldCBvcHRpbWl6ZXIgd2FybmluZ3MsCi0jIGluY3JlYXNlIHRoZSBudW1iZXIuICBSZXBlYXQg dW50aWwgd2FybmluZ3MgZ28gYXdheS4gIElmIHlvdXIgY29tcGlsZXIKLSMgcGVybWl0cyBpdCwg dXNlICtPbm9saW1pdC4gSWYgb3B0aW1pemVyIGJsb3dzIHVwIG9uIGNrY3Byby5jLCBzZWUgbmV4 dCBlbnRyeS4KLSMgUmVwb3J0ZWRseSwgb24gc29tZSBjb25maWd1cmF0aW9ucywgc3VjaCBhcyBI UDkwMDAvNDI1ZSBvciAvMzQwLCBwZXJoYXBzCi0jIGRlcGVuZGluZyBvbiB0aGUgYW1vdW50IG9m IG1haW4gbWVtb3J5LCB0aGlzIGVudHJ5IG1pZ2h0IGZhaWwgbm8gbWF0dGVyIHdoYXQKLSMgeW91 IGRvICgiT3V0IG9mIE1lbW9yeSIsICJjYzogRmF0YWwgZXJyb3IgaW4gL2xpYi9jLmMxIiwgZXRj KS4gIEluIHRoYXQgY2FzZQotIyB1c2UgIm1ha2UgaHB1eDA5MDAiIChubyAibyIpLgotI09LOiAy MDA5LzA5LzI0Ci1ocHV4MDkwMG86Ci0JQE1FU1NBR0UxPSQke01FU1NBR0UxOi0id2l0aCBjb21w aWxlciBvcHRpbWl6YXRpb24ifSBcCi0JJChNQUtFKSBocHV4MDkwMCBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9IFwKLQkiS0ZMQUdTID0gJChLRkxBR1MpIC1BYSAtRENLX0FOU0lDIC1EX0hQVVhf U09VUkNFICtPMiArZSIKLQotIyBGb3IgSFAtVVggOS4wIG9uIE1vdG9yb2xhIENQVXMsIG9wdGlt aXphdGlvbiBvZiBja2Nwcm8uYyB0ZW5kcyB0byBibG93IHVwCi0jIHRoZSBjb21waWxlci4gIFlv dSBtaWdodCBoYXZlIHRvIHJlaW5zdGFsbCB5b3VyIGtlcm5lbCB3aXRoIG1heGRzaXogPj0KLSMg MHgwMzAwMDAwMC4gIEJ1dCBpZiBwaHlzaWNhbCBtZW1vcnkgaXMgc21hbGwsIHRoYXQgc3RpbGwg d2lsbCBub3QgaGVscCBtdWNoLgotIyBJbiB0aGF0IGNhc2UsIHVzZSB0aGlzIGVudHJ5IHRvIHNr aXAgb3B0aW1pemF0aW9uIG9mIGNrY3Byby5jLiAgQnV0IGZvcgotIyBDLUtlcm1pdCA4LjAuMjA4 IHlvdSBuZWVkIGEga2VybmVsIHdpdGggbWF4ZHNpeiA+PSAweDAyMDAwMDAwIHRvIGNvbXBpbGUg YW4KLSMgb3B0aW1pemVkIGNrY2Z0cC5jLgotIyBQbGVhc2Ugbm90ZTogVG8gc3VwcG9ydCBsb25n LWxvbmcgd2Ugd291bGQgbmVlZCBjb21waWxlciBzd2l0Y2ggJy1BZScgYnV0Ci0jIHRoaXMgb25l IHdvcmtzIG9ubHkgb24gUmlzYyBzeXN0ZW1zLiBCdXQgdGhlIGVxdWl2YWxhbnQgY29tcGlsZXIg ZmxhZ3MKLSMgJy1BYSAtRF9IUFVYX1NPVVJDRSArZScgd29ya3MgZm9yIE1vdG9yb2xhIGFuZCBS aXNjLgotaHB1eDA5MDBtNjhrbzoKLQlATUVTU0FHRTE9J3dpdGhvdXQgY29tcGlsZXIgb3B0aW1p emF0aW9uIGZvciBja2Nwcm8uJChFWFQpIC4uLicgXAotCSQoTUFLRSkgaHB1eC1oZWFkZXIKLQkk KE1BS0UpIGNrdXVzci4kKEVYVCkgY2t1dXMzLiQoRVhUKSBja3V1czQuJChFWFQpIFwKLQlja2Nm dHAuJChFWFQpIGNrY3Byby4kKEVYVCkgXAotCSJDRkxBR1MgPSAtREhQVVhERUJVRyAtREhQVVg5 IC1EU1RFUk1JT1ggLURESVJFTlQgXAotCS1ETk9TRVRCVUYgLURDS19DVVJTRVMgLURUQ1BTT0NL RVQgLURSRU5BTUUgIC1EQ0tfUkVESVIgLURMT05HRk4gXAotCS1ESERCVVVDUCAtRExPQ0tfRElS PVxcXCIvdXNyL3Nwb29sL3V1Y3BcXFwiIC1ERk5GTE9BVCAkKEtGTEFHUykiCi0JQGVjaG8KLQlA TUVTU0FHRTE9IndpdGggY29tcGlsZXIgb3B0aW1pemF0aW9uIGZvciB0aGUgcmVzdCIgXAotCSQo TUFLRSkgaHB1eDA5MDAgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUyA9ICQo S0ZMQUdTKSAtQWEgLURDS19BTlNJQyAtRF9IUFVYX1NPVVJDRSArTzIgK2UiCi0KLSMgT2xkIG5h bWUgZm9yIGhwdXgwOTAwbTY4a28uCi1ocHV4MDkwMG1vdDoKLQkkKE1BS0UpIGhwdXgwOTAwbTY4 a28gS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiS0ZMQUdTID0gJChLRkxBR1MpIgotCi0jTGlr ZSBocHV4MDkwMG8gYnV0IHdpdGggYWRkaXRpb25hbCBtb2RlbC03MDAvODAwLXNwZWNpZmljIG9w dGltaXphdGlvbnMuCi0jICtFU2xpdCA9IGNvbnNvbGlkYXRlIHN0cmluZ3MgaW4gcmVhZC1vbmx5 IG1lbW9yeS4KLSMgK0VTZnNjID0gaW5saW5lIG1pbGxpY29kZSBjYWxscyB3aGVuIGNvbXBhcmlu ZyBwb2ludGVycy4KLWhwdXgwOTAwbzcwMDoKLQlAZWNobyAnSWYgeW91IGdldCBvcHRpbWl6ZXIg d2FybmluZ3MgXGMnCi0JQGVjaG8gJ3RyeSAibWFrZSBocHV4MDkwMG83MDAgS0ZMQUdTPStPYmIx MjAwIicKLQlATUVTU0FHRTE9IndpdGggUEEtUklTQy1zcGVjaWZpYyBvcHRpbWl6YXRpb25zIiBc Ci0JJChNQUtFKSBocHV4MDkwMG8gS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFH UyA9ICQoS0ZMQUdTKSArRVNsaXQgK0VTc2ZjIgotCi0jSFAtVVggOS4wLCA5LjAxLCA5LjAzLCA5 LjA0LCA5LjA1LCA5LjA3LCA5LjEwIC4uLiwgKyBUQ1AvSVAgKyBjdXJzZXMsIGZ1bGx5Ci0jY29u ZmlndXJlZCwgYnVpbHQgd2l0aCBnY2MsIGFsbCBtb2RlbHMgZXhjZXB0IDgwMCBzZXJpZXMuCi0j WW91IG1pZ2h0IG5lZWQgdG8gYWRkIHRoZSBpbmNsdWRlIHBhdGggZm9yIGdjYyBoZWFkZXJzLCBm b3IgZXhhbXBsZToKLSMgJ0tGTEFHUz0tSS91c3IvZ251L2xpYi9nY2MtbGliL2hwcGExLjEtaHAt aHB1eC8yLjQuNS9pbmNsdWRlLycKLWhwdXgwOTAwZ2NjOgotCUBNRVNTQUdFMT0ndXNpbmcgdGhl IGdjYyBjb21waWxlcicgXAotCSQoTUFLRSkgaHB1eDA5MDAgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBDQz1nY2MgQ0MyPWdjYyBcCi0JIktGTEFHUyA9IC1EQ0tfQU5TSUMgJChLRkxBR1MpIiBc Ci0JIk9GTEFHUyA9IC1mdW5zaWduZWQtY2hhciAtTzIgJChPRkxBR1MpIgotCi0jSFAtOTAwMCBI UC1VWCAxMC4wICsgVENQL0lQICsgY3Vyc2VzLCBmdWxseSBjb25maWd1cmVkLgotI1VzZSB3aXRo IHJlc3RyaWN0ZWQgKGJ1bmRsZWQpIGNvbXBpbGVyOiBubyBvcHRpbWl6YXRpb24sIG5vIEFOU0kg c3VwcG9ydC4KLSNsaWJjdXJzZXMgbmVlZGVkIGZvciBmdWxsc2NyZWVuIGZpbGUgeGZlciBkaXNw bGF5IGluIEhQLVVYIDEwLjAwIGFuZCAxMC4wMS4KLSNsaWJIY3Vyc2VzIChOT1QgbGliY3Vyc2Vz ISkgZm9yIGZ1bGxzY3JlZW4gZGlzcGxheSwgdG8gd29yayBhcm91bmQgZmF0YWwgYnVncwotI2lu IEhQLVVYIDEwLjEwIGFuZCAxMC4yMCBjdXJzZXMuIE1heWJlIHdlIGNvdWxkIHVzZSBsY3Vyc2Vz IGZvciAxMC4zMCwgc2luY2UKLSN0aGUgMTAuMTAgY3Vyc2VzIHByb2JsZW0gaXMgc3VwcG9zZWRs eSBmaXhlZCBpbiAxMC4zMC4KLSMgK0RBMS4wID0gR2VuZXJhdGUgUEEtUklTQyAxLjAgY29kZSB0 aGF0IHJ1bnMgb24gYm90aCA3MDAgYW5kIDgwMCBtb2RlbHMuCi0jICtEQTEuMSA9IEdlbmVyYXRl IFBBLVJJU0MgMS4xIGNvZGUgdGhhdCBydW5zIG9uIGJvdGggNzAwIGFuZCA4MDAgbW9kZWxzLgot IyBOb3RlIHRoYXQgSFAtVVggMTAuMjAgYW5kIHVwd2FyZHMgZG8gbm90IHN1cHBvcnQgUEEtUklT QyAxLjAgc3lzdGVtcy4KLSMgQW5kIHRoYXQgYXMgb2YgRGVjIDIwMDEsIDExLjAwIGFuZCAxMS4x MSBhcmUgUEEtb25seSBhbmQgMTEuMjAgaXMgSUE2NC1vbmx5LgotIyBMYXRlciAxMS4yeCByZWxl YXNlcyBhcmUgZXhwZWN0ZWQgdG8gYmUgZm9yIGJvdGguICBBcmNoaXRlY3R1cmUgY2FuIGJlCi0j IGRldGVybWluZWQgd2l0aCB0aGUgbW9kZWwgY29tbWFuZCwgYXQgbGVhc3QgaW4gMTAuMjAgYW5k IGxhdGVyLi4uCi0jRm9yIGZ1dHVyZSByZWxlYXNlcywgd2UgbmVlZCB0byBpbmNsdWRlICtEQTEu MSBmb3IgUEEgYnVpbGRzLCBzbyB0aGF0IGEKLSNiaW5hcnkgYnVpbHQgb24gUEEgMi4wIHdpbGwg c3RpbGwgd29yayBvbiBQQSAxLjEgbWFjaGluZXMsIHdoZXJlYXMgK0RBMS4xCi0jbXVzdCBOT1Qg YmUgaW5jbHVkZWQgZm9yIElBNjQgYnVpbGRzLgotIzQgSmFuIDIwMDYgLSBBZGRlZCBMYXJnZSBG aWxlIFN1cHBvcnQgKExGUykuICBMYXJnZSBmaWxlcyAoPjJHQikgYXJlCi0jcG9zc2libGUgaW4g SFAtVVggMTAuMjAgYW5kIGxhdGVyLiAgVGhlIG9ubHkgY2hhbmdlIGlzIHRvIGFkZDoKLSMgLURf TEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0Ci0jdG8gS0ZMQUdTLiAgVGhl c2Ugc2hvdWxkIGJlIGhhcm1sZXNzIGluIDEwLjAwIGFuZCAxMC4xMCwgaWYgYW55IG9mIGV4YW1w bGVzCi0jb2YgdGhvc2Ugc3RpbGwgZXhpc3QsIGJ1dCBJIGhhdmUgbm8gd2F5IHRvIHRlc3QgdGhp cyBoeXBvdGhlc2lzLgotI09LOiAyMDA5LzExLzE2Ci1ocHV4MTAwMDoKLQlAJChNQUtFKSBocHV4 LWhlYWRlcgotCUBMSUJTPSctbEhjdXJzZXMnIDsgXAotCUFGTEFHUz0nK0RBMS4xJyA7IFwKLQlj YXNlIGB1bmFtZSAtcmAgaW4gXAotCSAgIFtBQl0uMTAuMCopICBLRkxBR1M9Jy1ESFBVWDEwMDAg JChLRkxBR1MpJyA7IFwKLQkgICAgICAgICAgICAgICAgQUZMQUdTPScrREExLjAnIDsgTElCUz0n LWxjdXJzZXMnICA7OyBcCi0JICAgW0FCXS4xMC4xKikgIEtGTEFHUz0nLURIUFVYMTAxMCAtRF9f SFBfQ1VSU0VTICQoS0ZMQUdTKScgOyBcCi0JICAgICAgICAgICAgICAgIDs7IFwKLQkgICBbQUJd LjEwLjIqKSAgS0ZMQUdTPSctREhQVVgxMDIwIC1EX19IUF9DVVJTRVMgJChLRkxBR1MpJyA7IFwK LQkgICAgICAgICAgICAgICAgOzsgXAotCSAgIFtBQl0uMTAuMyopICBLRkxBR1M9Jy1ESFBVWDEw MzAgLURfX0hQX0NVUlNFUyAkKEtGTEFHUyknIDsgXAotCSAgICAgICAgICAgICAgICA7OyBcCi0J ICAgW0FCXS4xMC4/KikgIEtGTEFHUz0nLURIUFVYMTBYWCAtRF9fSFBfQ1VSU0VTICQoS0ZMQUdT KScgOyBcCi0JICAgICAgICAgICAgICAgIDs7IFwKLQkgICBbQUJdLjExLjAqKSAgS0ZMQUdTPSct REhQVVgxMTAwIC1EX19IUF9DVVJTRVMgJChLRkxBR1MpJyA7IFwKLQkgICAgICAgICAgICAgICAg OzsgXAotCSAgIFtBQl0uMTEuMSopICBLRkxBR1M9Jy1ESFBVWDExMDAgLURfX0hQX0NVUlNFUyAk KEtGTEFHUyknIDsgXAotCSAgICAgICAgICAgICAgICA7OyBcCi0JICAgW0FCXS4xMS4/KikgIEtG TEFHUz0nLURIUFVYMTEwMCAtRF9fSFBfQ1VSU0VTICQoS0ZMQUdTKScgOyBcCi0JICAgICAgICAg ICAgICAgIEFGTEFHUz0nJyA7IExJQlM9Jy1sY3Vyc2VzJyA7OyBcCi0JZXNhYyA7IFwKLQlPRkxB R1M9JCR7T0ZMQUdTOi0kJEFGTEFHU30gOyBcCi0JJChNQUtFKSAiU0hFTEw9L3Vzci9iaW4vc2gi IHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0M9JChDQykiICJDQzI9JChD QzIpIiBcCi0JIkNGTEFHUyA9IC1ESFBVWDEwIC1ERElSRU5UIC1EU1RFUk1JT1ggLURDS19EU1lT SU5JIC1ESERCVVVDUCBcCi0JLURDS19DVVJTRVMgLURDS19XUkVGUkVTSCAtRFRDUFNPQ0tFVCAt RENLX1JFRElSIC1EUkVOQU1FIC1ERk5GTE9BVCBcCi0JLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9G SUxFX09GRlNFVF9CSVRTPTY0IFwKLQkkJEtGTEFHUyAkJE9GTEFHUyIgXAotCSJMTktGTEFHUz0t cyAkKExOS0ZMQUdTKSIgIkxJQlMgPSAtbG0gJCRMSUJTICQoS0xJQlMpIgotCi0jIFRoaXMgaXMg YSBrbHVkZ2UsIGNvcHlpbmcgaHB1eDA5MDBnY2MgYW5kIGFkYXB0aW5nIGhwdXgxMDAwCi0jIChh ZGQgQ0MgYW5kIENDMiwgZHJvcCB0aGUgQTEuWzB8fDFdKQotIyBCdWlsZHMgdy8gbm8gY29tcGls ZXIgd2FybmluZ3MgYnV0IG1pbmltYWxseSB0ZXN0ZWQuCi0jCi0jT0s6IDIwMDkvMDkvMjEKLWhw dXgxMDAwZ2NjOgotCUBNRVNTQUdFMT0idXNpbmcgdGhlIGdjYyBjb21waWxlciAkKE1FU1NBR0Ux KSIgXAotCSQoTUFLRSkgaHB1eDEwMDAgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBDQz1nY2Mg Q0MyPWdjYyBcCi0JIktGTEFHUyA9ICQoS0ZMQUdTKSIgIk9GTEFHUyA9IC1EQ0tfQU5TSUMgLWZ1 bnNpZ25lZC1jaGFyIC1PMiIKLQotIyBUcnVzdGVkIEhQLVVYIDEwCi0jIGVjaG8gS0ZMQUdTPSQo S0ZMQUdTKSBZVEFSR0VUIFlUQVJHRVQ9JChZVEFSR0VUKSAkKFhUQVJHRVQpIDsKLWhwdXgxMDAw dDoKLQlAY2FzZSAiJChLVEFSR0VUKSIgaW4gXAotCSAgICorb3BlbnNzbCB8ICorc3NsKSBcCi0J CUtFTlRSWT1ocHV4MTAwMG8rb3BlbnNzbCA7OyBcCi0JICAgKmdjYykgXAotCQlLRU5UUlk9aHB1 eDEwMDBnY2MgOzsgXAotCSAgICpvKykgS0VOVFJZPWhwdXgxMDAwbysgOzsgXAotCSAgICpvKQlL RU5UUlk9aHB1eDEwMDBvIDs7IFwKLQkgICAqKQlLRU5UUlk9aHB1eDEwMDAgOzsgXAotCWVzYWMg OyBcCi0JTUVTU0FHRTE9ImFuZCBzdXBwb3J0IGZvciAnVHJ1c3RlZCBIUC1VWCciIFwKLQkkKE1B S0UpICQkS0VOVFJZIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1MgPSAkKEtG TEFHUykgLURIUFVYMTBfVFJVU1RFRCIgIktMSUJTPS1sc2VjIgotCi1ocHV4MTAwMHRvOgotCSQo TUFLRSkgaHB1eDEwMDB0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KLQotaHB1eDEwMDB0bys6 Ci0JJChNQUtFKSBocHV4MTAwMHQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQotCi1ocHV4MTAw MHRnY2M6Ci0JJChNQUtFKSBocHV4MTAwMHQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQotCi1o cHV4MTAwMHRvK3NzbCBocHV4MTAwMHRvK29wZW5zc2w6Ci0JJChNQUtFKSBocHV4MTAwMHQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfQotCi1ocHV4MTAwMHRnY2Mrc3NsIGhwdXgxMDAwdGdjYytv cGVuc3NsOgotCSQoTUFLRSkgaHB1eDEwMDB0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KLQot I0hQLTkwMDAgSFAtVVggMTAuMDAgYW5kIGhpZ2hlciB3aXRoIEFOU0kgcHJvdG90eXBpbmcgYW5k IG9wdGltaXphdGlvbi4KLSNQQS1SSVNDIG9ubHksIG5vIE1vdG9yb2xhIG9yIG90aGVyIGhhcmR3 YXJlIGlzIHN1cHBvcnQgaW4gSFAtVVggMTAuMDArKy4KLSNUaGUgdW5idW5kbGVkIG9wdGlvbmFs IGNvbXBpbGVyIGlzIHJlcXVpcmVkLgotI1lvdXIgcGF0aCBzaG91bGQgc3RhcnQgd2l0aCAvb3B0 L2Fuc2ljL2Jpbi4KLSMgLVdsLC1GdyA9IFJlbW92ZSBzdGFjayB1bndpbmQgdGFibGUgKGluZm8g dXNlZCBieSBkZWJ1Z2dlcnMpLgotIyArTzIgbWFrZXMgYSBzbWFsbGVyIGV4ZWN1dGFibGUgKD0g LU8gPSBMZXZlbC0xIGFuZCBnbG9iYWwgb3B0aW1pemF0aW9uKS4KLSMgK08zIGFkZHMgaW50ZXJw cm9jZWR1cmFsIGdsb2JhbCBvcHRpbWl6YXRpb24sIG1ha2VzIGEgYmlnZ2VyIGV4ZWN1dGFibGUu Ci0jICtPbm9saW1pdCBhbGxvd3MgYWxsIG1vZHVsZXMgdG8gYmUgb3B0aW1pemVkLCBubyBtYXR0 ZXIgaG93IGNvbXBsZXguICBCdXQ6Ci0jICAoYSkgK09ub2xpbWl0IGRvZXMgbm90IHNlZW0gdG8g YWx3YXlzIGJlIHRoZXJlIGluIEhQLVVYIDEwLjAwLCBhbmQ6Ci0jICAoYikgc29tZSBtb2R1bGVz IG1pZ2h0IHRha2UgaG91cnMgb24gbG93LW1lbW9yeSBhbmQvb3Igc2xvdyBzeXN0ZW1zLgotIyBU aGUgZm9sbG93aW5nIGFyZSBQQS1SSVNDLXNwZWNpZmljIG9wdGltaXphdGlvbnM6Ci0jICtFU2xp dCA9IENvbnNvbGlkYXRlIHN0cmluZ3MgaW4gcmVhZC1vbmx5IG1lbW9yeS4KLSMgK0VTZnNjID0g SW5saW5lIG1pbGxpY29kZSBjYWxscyB3aGVuIGNvbXBhcmluZyBwb2ludGVycy4KLSMgWW91IG1p Z2h0IG5lZWQgdG8gY29uZmlndXJlIHlvdXIga2VybmVsIGZvciBhIG1heGRzaXogb2YgMHgwQjAw MDAwMCAoMTc2TUIpCi0jIG9yIGdyZWF0ZXIgdG8gcHJldmVudCB0aGUgb3B0aW1pemVyIGZyb20g cnVubmluZyBvdXQgb2Ygc3BhY2UuCi0jIERlY2VtYmVyIDIwMDE6ICtFU2xpdCArRVNzZmMgcmVt b3ZlZCBiZWNhdXNlIG5vdCBzdXBwb3J0ZWQgb24gSUE2NC4KLSMgU29tZWJvZHkgd2hvIGNhcmVz IGNhbiB1c2UgJ21vZGVsJyB0byBzZWUgd2hldGhlciBpdCdzIFBBLVJJU0Mgb3IgSUE2NAotIyBh bmQgaW5jbHVkZSB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9wdGltaXphdGlvbiBmbGFncy4g IEFsc28gbm90ZToKLSMgK0RBMS4xIGlzIFBBLW9ubHkuICBJZiB0aGlzIGlzIGluY2x1ZGVkIGlu IGluIEhQLVVYIDExLjAwIG9yIGxhdGVyLAotIyB0aGVuICtEUzIuMCBzaG91bGQgYmUgaW5jbHVk ZWQgdG9vIChidXQgZG9uJ3QgdXNlICtEUzIuMCB3aXRob3V0ICtEQTEuMSwKLSMgb3IgZWxzZSB0 aGUgYmluYXJ5IHdvbid0IHJ1biBvbiBvbGRlciBQQSBoYXJkd2FyZSkuCi0jT0s6IDIwMDkvMDkv MjEKLWhwdXgxMDAwbzoKLQlAY2FzZSBgdW5hbWUgLW1gIGluIFwKLQkgIGlhNjQpIDs7IFwKLQkg ICopIE1GTEFHUz0nK0VTbGl0ICtFU3NmYycgOzsgXAotCWVzYWMgOyBcCi0JTUVTU0FHRTE9Indp dGggUEEtUklTQy1zcGVjaWZpYyBvcHRpbWl6YXRpb25zICQoTUVTU0FHRTEpIiBcCi0JJChNQUtF KSAiU0hFTEw9L3Vzci9iaW4vc2giICJQQVRIPS9vcHQvYW5zaWMvYmluOiQkUEFUSCIgaHB1eDEw MDAgXAotCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIktGTEFHUyA9ICQoS0ZMQUdTKSBcCi0J LUFlIC1EX0hQVVhfU09VUkNFIC1EQ0tfQU5TSUMgLURVVElNRUggXAotCStPMiAtV2wsLUZ3ICQk TUZMQUdTIgotCi0jTGlrZSBocHV4MTAwMG8gYnV0IHdpdGggIitPbm9saW1pdCIuCi0jT24gNzAw IHNlcmllcyBzZXQga2VybmVsIHBhcmFtZXRlciBtYXhkc2l6ID49IDB4MEQwMDAwMDAgKD0yMDhN QikuCi0jVGFrZXMgYSBsb25nIHRpbWUuCi1ocHV4MTAwMG8rOgotCUBNRVNTQUdFMT0iYW5kICtP bm9saW1pdCAkKE1FU1NBR0UxKSIgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JJChNQUtF KSBocHV4MTAwMG8gXAotCSJLRkxBR1MgPSAkKEtGTEFHUykgK09ub2xpbWl0IgotCi0jSFAtVVgg MTAueHggKyAxMS54eCB3aXRoIG9wdGltaXppbmcgQU5TSSBjb21waWxlciBhbmQgT3BlblNTTC4K LSNEZWZpbmUgU1NMTElCIGFuZCBTU0xJTkMgYXBwcm9wcmlhdGVseSBmb3IgeW91ciBPcGVuU1NM IGluc3RhbGxhdGlvbi4KLSNUbyBvdmVyd3JpdGUgdGhlIGRlZmF1bHQgU1NMTElCIGFuZCBTU0xJ TkMgc2V0dGluZ3MgeW91IGNhbiBhbHNvIHVzZSB0aGUKLSNjb21tYW5kLWxpbmUgdmFyaWFibGUg S1NTTExJQiBhbmQgS1NTTElOQyBsaWtlOgotI21ha2UgaHB1eDEwMDBvK29wZW5zc2wgS1NTTExJ Qj0tTC9vcHQvb3BlbnNzbC9saWIgS1NTTElOQz0tSS8uLi4KLSNEaXR0byBmb3IgdGhlIFpsaWIg bG9jYXRpb24uCi0jVGhpcyBlbnRyeSB3b3JrcyBmb3IgQy1LZXJtaXQgOC4wLjIwNiBvbiBIUC1V WCAxMC4yMCArIDExLjExCi0jd2l0aCBPcGVuU1NMIDAuOS42ICsgMC45LjcKLSNOT1RFOiBhbiBB TlNJIEMgY29tcGlsZXIgaXMgcmVxdWlyZWQgZm9yIHRoZSBTU0wgaW50ZXJmYWNlLiAgSWYgeW91 IGRvbid0Ci0jaGF2ZSB0aGUgSFAgT3B0aW1pemluZyBBTlNJIGNvbXBpbGVyLCBzZWUgdGhlIGhw dXgxMDAwZ2NjK29wZW5zc2wgdGFyZ2V0Ci0jYmVsb3cuCi1ocHV4MTAwMG8rc3NsIGhwdXgxMDAw bytvcGVuc3NsOgotCUBjYXNlICIkKEtUQVJHRVQpIiBpbiBcCi0JICAgKmdjYysqKSBcCi0JICAg ICAgICBLRU5UUlk9aHB1eDEwMDBnY2MgOzsgXAotCSAgICopICAgS0VOVFJZPWhwdXgxMDAwbyA7 OyBcCi0JZXNhYyA7IFwKLQljYXNlICIkKEtUQVJHRVQpIiBpbiBcCi0JICAgKi16bGliKikgXAot CSAgICAgICAgRFpMSUI9IExaTElCPSA7OyBcCi0JICAgKikgICBEWkxJQj0tRFpMSUIgTFpMSUI9 Jy1ML29wdC96bGliL2xpYiAtbHonIDs7IFwKLQllc2FjIDsgXAotCVNTTElOQz0kJHtLU1NMSU5D Oi0kKFNTTElOQyl9OyBcCi0JU1NMTElCPSQke0tTU0xMSUI6LSQoU1NMTElCKX07IFwKLQlNRVNT QUdFMT0iYW5kIHdpdGggT3BlblNTTCAkKE1FU1NBR0UxKSIgXAotCSQoTUFLRSkgJCRLRU5UUlkg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JS0ZMQUdTPSItRENLX0FVVEhFTlRJQ0FUSU9O IC1EQ0tfU1NMIC1ET1BFTlNTTF8wOTcgJCREWkxJQiBcCi0JJCRTU0xJTkMgJChLRkxBR1MpIiBc Ci0JS0xJQlM9IiQoS0xJQlMpIFwKLQkkJFNTTExJQiAtbHNzbCAtbGNyeXB0byBcCi0JJCRMWkxJ QiBcCi0JIgotCi0jIERpdHRvIGJ1dCB3aXRob3V0IFpsaWI6Ci1ocHV4MTAwMG8rc3NsLXpsaWIg aHB1eDEwMDBvK29wZW5zc2wtemxpYjoKLQlATUVTU0FHRTE9ImJ1dCB3aXRob3V0IFpsaWIgJChN RVNTQUdFMSkiIFwKLQkkKE1BS0UpIGhwdXgxMDAwbytzc2wgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfQotCi0jSFAtVVggMTAuMDAgb3IgaGlnaGVyIHdpdGggT3BlblNTTCAwLjkuNy4gIENvbXBp bGVkIHdpdGggZ2NjLgotI0Zyb20gQ2hyaXMgQ2hhbmV5LCBORUMgQW1lcmljYSBJbmMuICBIaXMg aW5zdHJ1Y3Rpb25zOgotIyAoMSkgSW5zdGFsbCBnY2MgdmVyc2lvbiAzLjIuMyAmIGJpbnV0aWxz IHZlcnNpb24gMi4xMy4yCi0jICAgICAodXNlZCBiaW5hcnkgZGVwb3QgZnJvbSBodHRwOi8vaHB1 eC5jcy51dGFoLmVkdS8pCi0jICgyKSBJbnN0YWxsIGdjYyBtYWtlIHZlcnNpb24gMy44MCBmcm9t IGh0dHA6Ly9ocHV4LmNzLnV0YWguZWR1LwotIwotIyBvcjogZ2NjIDIuOS4yMDAwLTEyLTEgZnJv bSAiTGludXggdG8gaHAtdXggMTEuMC8xMWkgcG9ydGluZyBraXQgdmVyc2lvbiAxLjAKLSMgICAg ICgyQ0QpIiBmcmVlIGZyb206ICBodHRwOi8vd3d3LnNvZnR3YXJlLmhwLmNvbQotIwotIyAoMykg SW5zdGFsbCBvcGVuU1NMIHZlcnNpb24gMC45LjdiIGZyb20gaHR0cDovL3d3dy5zb2Z0d2FyZS5o cC5jb20KLSMgKDQpIEluc3RhbGwgZmxleCB2ZXJzaW9uIDIuNS40IGZyb20gaHR0cDovL2hwdXgu Y3MudXRhaC5lZHUvCi0jICg1KSBJbnN0YWxsIGdtcCB2ZXJzaW9uIDMuMS4xIGZyb20gaHR0cDov L2hwdXguY3MudXRhaC5lZHUvCi0jCi0jTm90ZSBmcm9tIFBldGVyIEVpY2hob3JuLCBhc3N5c3Qg TXVuaWNoLiBJdCB3b3JrcyBhbHNvIHdpdGhvdXQgZ2NjIG1ha2UhCi1ocHV4MTAwMGdjYytzc2wg aHB1eDEwMDBnY2Mrb3BlbnNzbDoKLQkkKE1BS0UpIGhwdXgxMDAwbytvcGVuc3NsIEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0KLQotIyBEaXR0byBidXQgd2l0aG91dCBabGliOgotaHB1eDEwMDBn Y2Mrc3NsLXpsaWIgaHB1eDEwMDBnY2Mrb3BlbnNzbC16bGliOgotCSQoTUFLRSkgaHB1eDEwMDBv K29wZW5zc2wtemxpYiBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9Ci0KLSMgU2FtZSBmb3IgSFAt VVggMTEKLWhwdXgxMTAwbytzc2wgaHB1eDExMDBvK29wZW5zc2w6Ci0JJChNQUtFKSBocHV4MTAw MG8rb3BlbnNzbCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9Ci0KLSNPSzogMjAwOS8wOS8yNgot aHB1eDExMDBnY2Mrc3NsIGhwdXgxMTAwZ2NjK29wZW5zc2w6Ci0JJChNQUtFKSBocHV4MTAwMGdj YytvcGVuc3NsIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KLQotaHB1eDExMDBvK3NzbC16bGli IGhwdXgxMTAwbytvcGVuc3NsLXpsaWI6Ci0JJChNQUtFKSBocHV4MTAwMG8rb3BlbnNzbC16bGli IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KLQotaHB1eDExMDBnY2Mrc3NsLXpsaWIgaHB1eDEx MDBnY2Mrb3BlbnNzbC16bGliOgotCSQoTUFLRSkgaHB1eDEwMDBnY2Mrb3BlbnNzbC16bGliIEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KLQotIyBIUC1VWCAxMQotIyBOb3RlOiB0aGVzZSBhcmUg MzItYml0IGJ1aWxkcyBldmVuIG9uIElBNjQuCi0jIEFkZGluZyArREQ2NCB0byBDRkxBR1MgcHJv ZHVjZXMgNjQtYml0IG9iamVjdCBmaWxlcywKLSMgYnV0IHRoZSBsaW5rZXIgZmFpbHMgdG8gZmlu ZCB0aGUgbmVlZGVkIDY0LWJpdCBsaWJzLgotI09LOiAyMDA5LzA5LzI2Ci1ocHV4MTEwMDoKLQkk KE1BS0UpIGhwdXgxMDAwIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KLQotI09LOiAyMDA5LzA5 LzI2Ci1ocHV4MTEwMG86Ci0JJChNQUtFKSBocHV4MTAwMG8gS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfQotCi1ocHV4MTEwMG8rOgotCSQoTUFLRSkgaHB1eDEwMDBvKyBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9Ci0KLSNPSzogMjAwOS8wOS8yNgotaHB1eDExMDBnY2M6Ci0JJChNQUtFKSBocHV4 MTAwMGdjYyBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9Ci0KLSMgVHJ1c3RlZCBIUC1VWCAxMQot aHB1eDExMDB0OgotCSQoTUFLRSkgaHB1eDEwMDB0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0K LQotaHB1eDExMDB0bzoKLQkkKE1BS0UpIGhwdXgxMDAwdG8gS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfQotCi1ocHV4MTEwMHRvKzoKLQkkKE1BS0UpIGhwdXgxMDAwdG8rIEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0KLQotaHB1eDExMDB0Z2NjOgotCSQoTUFLRSkgaHB1eDEwMDB0Z2NjIEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0KLQotaHB1eDExMDB0bytzc2wgaHB1eDExMDB0bytvcGVuc3Ns OgotCSQoTUFLRSkgaHB1eDEwMDB0bytvcGVuc3NsIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0K LQotaHB1eDExMDB0Z2NjK3NzbCBocHV4MTEwMHRnY2Mrb3BlbnNzbDoKLQkkKE1BS0UpIGhwdXgx MDAwdGdjYytvcGVuc3NsIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KLQotI1JlZ3VsdXMgb24g Q0lFIFN5c3RlbXMgNjgwLzIwCi1jaWU6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVS KSBmb3IgQ0lFIFN5c3RlbXMgNjgwLzIwIFJlZ3VsdXMuLi4nCi0JJChNQUtFKSB3ZXJtaXQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1EQVRUU1YgLUROT0ZJTEVIIC1E Q0lFIC1ETk9MRUFSTiAkKEtGTEFHUykgLU8iICJMTktGTEFHUyA9IgotCi0jIExpbnV4IDEuMiBv ciBsYXRlciB3aXRoIGdjYywgZHluYW1pYyBsaWJyYXJpZXMsIG5jdXJzZXMsIFRDUC9JUC4KLSMK LSMgSWYgeW91ciBMaW51eCBzeXN0ZW0gaGFzIGN1cnNlcyByYXRoZXIgdGhhbiBuY3Vyc2VzLCB1 c2UgdGhlIGxpbnV4YwotIyBlbnRyeSwgb3IgaWYgdGhhdCBkb2Vzbid0IHdvcmssIGxpbnV4bmMu Ci0jCi0jIFRoZSBLZXJtaXQgImxhcmdlIG1lbW9yeSBtb2RlbCIgaXMgdXNlZCBieSBkZWZhdWx0 IHRvIGNvbmZpZ3VyZSBiaWcgcGFja2V0Ci0jIGFuZCBzY3JpcHQgYnVmZmVycywgZXRjLiAgRm9y IHNtYWxsLW1lbW9yeSBvciBsaW1pdGVkLXJlc291cmNlIHN5c3RlbXMsCi0jICJtYWtlIGxpbnV4 IEtGTEFHUz0tRE5PQklHQlVGIi4KLSMKLSMgLURMSU5VWEZTU1RORCAoTGludXggRmlsZSBTeXN0 ZW0gU3RhbmRhcmQgMS4yKSBnaXZlcyBVVUNQIGxvY2tmaWxlIC92YXIvbG9jawotIyB3aXRoIHN0 cmluZyBwaWQuICBSZW1vdmUgdGhpcyB0byBnZXQgL3Vzci9zcG9vbC91dWNwIHdpdGggaW50IHBp ZCwgdXNlZCBpbgotIyB2ZXJ5IGVhcmx5IExpbnV4IHZlcnNpb25zLiAgRlNTVE5EIDEuMiBhbHNv IHNheXMgdGhhdCB0aGUgUElEIHN0cmluZyBpbiB0aGUKLSMgVVVDUCBsb2NrIGZpbGUgaGFzIGxl YWRpbmcgc3BhY2VzLiAgVGhpcyBpcyBhIGNoYW5nZSBmcm9tIEZTU1RORCAxLjAsIHdoaWNoCi0j IHVzZWQgbGVhZGluZyB6ZXJvcy4gIEFkZCAtREZTU1RORDEwIHRvIHN1cHBvcnQgRlNTVE5EIDEu MCBpbnN0ZWFkIG9mIDEuMi4KLSMgSSBob3BlIHN1YnNlcXVlbnQgZWRpdGlvbnMgb2YgdGhlIGZp bGUtc3lzdGVtIHN0YW5kYXJkIGRpZCBub3QgY2hhbmdlIHRoZXNlCi0jIGFnYWluLgotIwotIyBB ZGQgLURPTElOVVhISVNQRUVEIChPbGQgTGludXggSGlnaCBTcGVlZCBzdXBwb3J0KSB0byB0dXJu IG9uIGFuIHVnbHkga2x1ZGdlCi0jIGluIExpbnV4IDEuMCBhbmQgZWFybGllciB0byBzdXBwb3J0 IHNwZWVkcyBvZiA1NzYwMCBhbmQgMTE1MjAwLiAgRXh0cmVtZWx5Ci0jIG9sZCBMaW51eCBzeXN0 ZW1zIChwcmUtMC45OXBsMTUpIHdpbGwgbm90IHN1cHBvcnQgdGhpcy4gIElmIE9MSU5VWEhJU1BF RUQgaXMKLSMgbm90IGRlZmluZWQsIHRoZW4gb25seSB0aGUgc3RhbmRhcmQgUE9TSVggdGVybWlv cyBtZXRob2RzIG9mIHNldHRpbmcgdGhlIHBvcnQKLSMgc3BlZWQgd2lsbCBiZSB1c2VkLCBhbmQg aW4gdGhpcyBjYXNlIHNwZWVkcyBjYW4gYmUgYXMgaGlnaCBhcyA0NjA4MDAgaW4gbW9zdAotIyBt b2Rlcm4gTGludXggdmVyc2lvbnMuCi0jCi0jIC1EQ0tfUE9TSVhfU0lHIChQT1NJWCBzaWduYWwg aGFuZGxpbmcpIGlzIGdvb2QgZm9yIExpbnV4IHJlbGVhc2VzIGJhY2sgdG8gYXQKLSMgbGVhc3Qg MC45OS4xNDsgaWYgaXQgY2F1c2VzIHRyb3VibGUgZm9yIHlvdSwgcmVtb3ZlIGl0IGZyb20gdGhl IENGTEFHUy4KLSMKLSMgLXBpcGUgcmVtb3ZlcyB0aGUgbmVlZCBmb3IgdGVtcCBmaWxlcyAtIHJl bW92ZSBpdCBpZiBpdCBjYXVzZXMgdHJvdWJsZS4KLSMKLSMgLWZ1bnNpZ25lZC1jaGFyIG1ha2Vz IGFsbCBjaGFyYWN0ZXJzIHVuc2lnbmVkLCBhcyB0aGV5IHNob3VsZCBoYXZlIGJlZW4KLSMgIGlu IHRoZSBmaXJzdCBwbGFjZS4KLSMKLSMgQWRkIC1EQ0tfRFNZU0lOSSBpZiB5b3Ugd2FudCBhIHNo YXJlZCBzeXN0ZW0td2lkZSBpbml0IGZpbGUuCi0jCi0jIFNlZSBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwgYWJvdXQgLUROT0NPVEZNQy4KLSMgQmV0dGVyIHN0aWxs LCBzaG91bGQgcmVhZCB0aGUgZW50aXJlIExpbnV4IHNlY3Rpb24gb2YgdGhhdCBkb2N1bWVudC4K LSMKLSMgVGhlICJsaW51eGEiIGVudHJ5IGNhbiBiZSByZWZlcmVuY2VkIGRpcmVjdGx5IG9uIExJ QkMgc3lzdGVtcywgYnV0IG5vdAotIyBHTElCQywgd2hlcmUgLWxjcnlwdCBpcyByZXF1aXJlZC4g IFRoZSAibWFrZSBsaW51eCIgZW50cnkgc2hvdWxkIG5vcm1hbGx5Ci0jIGJlIHVzZWQgZm9yIGFs bCBidWlsZHMgb24gYWxsIExpbnV4IGRpc3RyaWJ1dGlvbnMgdW5sZXNzIHlvdSBoYXZlIHNwZWNp YWwKLSMgcmVxdWlyZW1lbnRzLCBpbiB3aGljaCBjYXNlIGtlZXAgcmVhZGluZy4gIENLX05FV1RF Uk0gYWRkZWQgYWZ0ZXIgNy4wYjA0Ci0jIGR1ZSB0byBuZXcgY29tcGxhaW50cyBhYm91dCBuY3Vy c2VzIGNoYW5naW5nIGJ1ZmZlcmluZyBvZiB0dHkuCi0KLWxpbnV4YToKLQlAZWNobyAnTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBMaW51eCAxLjIgb3IgbGF0ZXIuLi4nCi0JQGVjaG8gJ0lN UE9SVEFOVDogUmVhZCB0aGUgY29tbWVudHMgaW4gdGhlIGxpbnV4IHNlY3Rpb24gb2YgdGhlJwot CUBlY2hvICdtYWtlZmlsZSBpZiB5b3UgaGF2ZSB0cm91YmxlLicKLQkkKE1BS0UpIHhlcm1pdCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAotCSJDRkxB R1MgPSAtTyAtRExJTlVYIC1waXBlIC1mdW5zaWduZWQtY2hhciAtREZORkxPQVQgLURDS19QT1NJ WF9TSUcgXAotCS1EQ0tfTkVXVEVSTSAtRFRDUFNPQ0tFVCAtRExJTlVYRlNTVE5EIC1ETk9DT1RG TUMgLURQT1NJWCBcCi0JLURVU0VfU1RSRVJST1IgJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAkKExO S0ZMQUdTKSIgXAotCSJMSUJTID0gJChMSUJTKSAtbG0iCi0KLSMgQXMgYWJvdmUgYnV0IHdpdGgg cHJvZmlsaW5nCi1saW51eHA6Ci0JJChNQUtFKSBsaW51eGEgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSAiS0ZMQUdTPSQoS0ZMQUdTKSAtcGciIFwKLQkiTElCUz0tcGcgLWxjcnlwdCAtbHJlc29s diIKLQotI0xpbnV4LiAgVGhpcyBlbnRyeSBzaG91bGQgd29yayBmb3IgYW55IExpbnV4IGRpc3Ry aWJ1dGlvbiBvbiBhbnkgcGxhdGZvcm0sCi0jMzItYml0IG9yIDY0LWJpdCwgZXhjZXB0IGZvciBl eHRyZW1lbHkgYW5jaWVudCBvbmVzLiAgQXV0b21hdGljYWxseSBkZXRlY3RzOgotIyAuIGN1cnNl cywgbmN1cnNlcywgb3Igbm8gY3Vyc2VzCi0jIC4gT2xkIHZlcnN1cyBuZXcgcHR5IGhhbmRsaW5n IChuZXcgPT0gZ2xpYmMgMi4xKyspCi0jIC4gUHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiBsaWJjcnlw dC5hIGFuZCA8Y3J5cHQuaD4KLSMgLiBQcmVzZW5jZSBvciBhYnNlbmNlIG9mIGxpYnJlc29sdi5h Ci0jIC4gVHJhbnNpdGlvbmFsIExvbmcgRmlsZSBBUEkgZm9yIDMyLWJpdCBwbGF0Zm9ybXMgKFNV UyBWMiBVTklYIDk4IExGUykuCi0jTm90ZTogVGhlIEhBVkVfUFRNWCB0ZXN0IHdhcyBwcmV2aW91 c2x5ICJpZiB0ZXN0IC1jIC9kZXYvcHRteCIgYnV0IHRoaXMgd2FzCi0jbm90IHN1ZmZpY2llbnQg Zm9yIERlYmlhbiAyLjEsIGJlY2F1c2UgYWx0aG91Z2ggaXQgaGFkIC9kZXYvcHRteCwgaXQgZGlk IG5vdAotI2hhdmUgZ3JhbnRwdCgpLCB1bmxvY2twdCgpLCBvciBwdHNuYW1lKCksIHNvIGhhcyBi ZWVuIGNoYW5nZWQgdG8gbG9vayBmb3IgYQotI2dyYW50cHQoKSBwcm90b3R5cGUgaW4gdGhlIGhl YWRlciBmaWxlcy4gIE1vZGlmaWVkIGluIDguMC4yMDYgdG8gYWxsb3cgZm9yCi0jbGlicmFyaWVz IHRoYXQgY29udGFpbiAuc28ncyBidXQgbm8gLmEncywgZS5nLiBNYW5kcmFrZSA5LjAuCi0jSEFW RV9CQVVEQk9ZIGFkZGVkIGluIDguMC4yMTAgZm9yIFJlZCBIYXQgLS0gaXQncyBsaWtlIEFJWCB0 dHlsb2NrKCkuCi0jTW9kaWZpZWQgMTcgQXVnIDIwMDUgdG8gdXNlIG9wZW5wdHkoKSBpZiBhdmFp bGFibGUgYmVjYXVzZSB0aGUgb3RoZXIgc3R1ZmYKLSNkdW1wcyBjb3JlIGluIDY0LWJpdCBpYTY0 IGFuZCB4ODZfNjQgYnVpbGRzLgotI0xvbmcgZmlsZSBzdXBwb3J0IGZvciAzMi1iaXQgYnVpbGRz IGFkZGVkIGluIDguMC4yMTIgLSBpZiBmZWF0dXJlcy5oIGNvbnRhaW5zCi0jX19VU0VfTEFSR0VG SUxFNjQgdGhlbiB3ZSBzZXQgdGhlIGZsYWdzIHRoYXQgbXVzdCBiZSBzZXQgYmVmb3JlIHJlYWRp bmcgYW55Ci0jaGVhZGVyIGZpbGVzOyBvbiAzMi1iaXQgcGxhdGZvcm1zIHN1Y2ggYXMgaTM4Niwg dGhpcyBwcm9kdWNlcyBhIDMyLWJpdCBidWlsZAotI2NhcGFibGUgb2YgYWNjZXNzaW5nLCBzZW5k aW5nLCByZWNlaXZpbmcsIGFuZCBtYW5hZ2luZyBsb25nICg+IDJHQikgZmlsZXMuCi0jT24gNjQt Yml0IHBsYXRmb3JtcywgaXQgZG9lcyBubyBoYXJtLgotI0FzIG9mIDMgTWFyY2ggMjAwOSB3ZSBk ZXRlY3QgYXV0b21hdGljYWxseSBpZiB3ZSBoYXZlIGN1cnNlcywgbmN1cnNlcywKLSNvciBubyBj dXJzZXMgYXQgYWxsLgotI0FkZGVkIEhBVkVfTE9DS0RFViBhcyBvcGVuU3VTRSA+PSAxMS4zIHVz ZXMgdHR5bG9jayBkaXJlY3RseSBpbnN0ZWFkIG9mCi0jYmF1ZGJveSAyMDEwLzA4LzIzCi0jT0s6 IDIwMTEvMDYvMTgKLWxpbnV4OgotCUBpZiB0ZXN0IFwKLQlgZ3JlcCBncmFudHB0IC91c3IvaW5j bHVkZS8qLmggL3Vzci9pbmNsdWRlL3N5cy8qLmggfCB3YyAtbGAgLWd0IDA7IFwKLQl0aGVuIGlm IHRlc3QgLWMgL2Rldi9wdG14OyB0aGVuIEhBVkVfUFRNWD0nLURIQVZFX1BUTVgnOyBcCi0JZWxz ZSBIQVZFX1BUTVg9Jyc7IGZpOyBmaSA7IFwKLQlpZiB0ZXN0IGBncmVwIG9wZW5wdHkgL3Vzci9p bmNsdWRlL3B0eS5oIHwgd2MgLWxgIC1ndCAwOyBcCi0JdGhlbiBIQVZFX09QRU5QVFk9Jy1ESEFW RV9PUEVOUFRZJzsgXAotCWVsc2UgSEFWRV9PUEVOUFRZPScnOyBmaSA7IFwKLQlIQVZFX0xJQkNV UlNFUz0nJzsgXAotCWlmIHRlc3QgLWYgL3Vzci9saWI2NC9saWJuY3Vyc2VzLnNvIHx8IFwKLQkg ICB0ZXN0IC1mIC91c3IvbGliL2xpYm5jdXJzZXMuYSAgfHwgXAotCSAgIHRlc3QgLWYgL3Vzci9s aWIvbGlibmN1cnNlcy5zbzsgdGhlbiBcCi0JICBIQVZFX0xJQkNVUlNFUz0nLWxuY3Vyc2VzJzsg XAotCWVsc2UgaWYgdGVzdCAtZiAvdXNyL2xpYjY0L2xpYmN1cnNlcy5zbyB8fCBcCi0JICAgdGVz dCAtZiAvdXNyL2xpYi9saWJjdXJzZXMuYSB8fCBcCi0JICAgdGVzdCAtZiAvdXNyL2xpYi9saWJj dXJzZXMuc287IHRoZW4gXAotCSAgICAgSEFWRV9MSUJDVVJTRVM9Jy1sY3Vyc2VzJzsgZmk7IGZp OyBcCi0JSEFWRV9DVVJTRVM9Jyc7IFwKLQlpZiB0ZXN0IC1uICckJEhBVkVfTElCQ1VSU0VTJzsg dGhlbiBcCi0JICBpZiB0ZXN0IC1mIC91c3IvaW5jbHVkZS9uY3Vyc2VzLmg7IHRoZW4gXAotCSAg ICBIQVZFX0NVUlNFUz0nLURDS19OQ1VSU0VTICAtSS91c3IvaW5jbHVkZS9uY3Vyc2VzJzsgXAot CSAgZWxzZSBpZiB0ZXN0IC1mIC91c3IvaW5jbHVkZS9jdXJzZXMuaDsgdGhlbiBcCi0JICAgIEhB VkVfQ1VSU0VTPSctRENLX0NVUlNFUyc7IFwKLQlmaTsgZmk7IGZpOyBcCi0JaWYgdGVzdCAtZiAv dXNyL2luY2x1ZGUvYmF1ZGJveS5oIHx8IHRlc3QgLWYgL3Vzci9pbmNsdWRlL3R0eWxvY2suaDsg XAotCXRoZW4gSEFWRV9MT0NLREVWPSctREhBVkVfTE9DS0RFVicgOyBcCi0JZWxzZSBIQVZFX0xP Q0tERVY9JycgOyBmaSA7IFwKLQlpZiB0ZXN0IC1mIC91c3IvaW5jbHVkZS9iYXVkYm95LmggOyBc Ci0JdGhlbiBIQVZFX0JBVURCT1k9Jy1ESEFWRV9CQVVEQk9ZJyA7IFwKLQllbHNlIEhBVkVfQkFV REJPWT0nJyA7IGZpIDsgXAotCSQoTUFLRSkgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0J IktGTEFHUz0kJEhBVkVfQ1VSU0VTICQkSEFWRV9QVE1YICQkSEFWRV9MT0NLREVWIFwKLQkkJEhB VkVfQkFVREJPWSAkJEhBVkVfT1BFTlBUWSBcCi0JYGdyZXAgX19VU0VfTEFSR0VGSUxFNjQgL3Vz ci9pbmNsdWRlL2ZlYXR1cmVzLmggPiAvZGV2L251bGwgJiYgXAotCWVjaG8gJy1EX0xBUkdFRklM RV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCdgIFwKLQlgaWYgdGVzdCAtZiAvdXNyL2lu Y2x1ZGUvY3J5cHQuaDsgdGhlbiBlY2hvIC1ESEFWRV9DUllQVF9IOyBmaWAgXAotCSQoS0ZMQUdT KSIgXAotCSJMSUJTPSQoTElCUykgJCRIQVZFX0xJQkNVUlNFUyBcCi0JYGlmIHRlc3QgLW4gJyQk SEFWRV9PUEVOUFRZJzsgdGhlbiBlY2hvIC1sdXRpbDsgZmlgIFwKLQlgaWYgdGVzdCAtZiAvdXNy L2xpYjY0L2xpYnJlc29sdi5hIHx8IHRlc3QgLWYgL3Vzci9saWI2NC9saWJyZXNvbHYuc28gXAot CXx8IHRlc3QgLWYgL3Vzci9saWIvbGlicmVzb2x2LmEgfHwgdGVzdCAtZiAvdXNyL2xpYi9saWJy ZXNvbHYuc28gXAotCXx8IHRlc3QgLWYgL3Vzci9saWIvaTM4Ni1saW51eC1nbnUvbGlicmVzb2x2 LmEgXAotCXx8IHRlc3QgLWYgL3Vzci9saWIvaTM4Ni1saW51eC1nbnUvbGlicmVzb2x2LnNvIFwK LQl8fCBscyAvbGliL3g4Nl82NC1saW51eC1nbnUvbGlicmVzb2x2LiogPiAvZGV2L251bGwgMj4g L2Rldi9udWxsOyBcCi0JdGhlbiBlY2hvIC1scmVzb2x2OyBmaWAgXAotCWBpZiB0ZXN0IC1mIC91 c3IvbGliNjQvbGliY3J5cHQuYSB8fCB0ZXN0IC1mIC91c3IvbGliNjQvbGliY3J5cHQuc28gXAot CXx8IHRlc3QgLWYgL3Vzci9saWIvbGliY3J5cHQuYSB8fCB0ZXN0IC1mIC91c3IvbGliL2xpYmNy eXB0LnNvIFwKLQl8fCBscyAvbGliL3g4Nl82NC1saW51eC1nbnUvbGliY3J5cHQuKiA+IC9kZXYv bnVsbCAyPiAvZGV2L251bGw7IFwKLQl0aGVuIGVjaG8gLWxjcnlwdDsgZmlgIFwKLQlgaWYgdGVz dCAtZiAvdXNyL2xpYjY0L2xpYmxvY2tkZXYuYSB8fCBcCi0JdGVzdCAtZiAvdXNyL2xpYjY0L2xp YmxvY2tkZXYuc28gfHwgXAotCXRlc3QgLWYgL3Vzci9saWIvbGlibG9ja2Rldi5hIHx8IFwKLQl0 ZXN0IC1mIC91c3IvbGliL2xpYmxvY2tkZXYuc287IFwKLQl0aGVuIGVjaG8gLWxsb2NrZGV2OyBm aWAiIFwKLQlsaW51eGEKLQotIyBMaW51eCArIFNoYWRvdyBwYXNzd29yZHMgKyBQQU0KLSMgT0sg MjAxMS8wNi8xOAotbGludXgrc2hhZG93K3BhbToKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQo Q0tWRVIpIGZvciBMaW51eCtTaGFkb3crUEFNLi4uJwotCSQoTUFLRSkgbGludXggS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSBcCi0JS0ZMQUdTPSItRENLX1NIQURPVyAtRENLX1BBTSAkKEtGTEFH UykiIFwKLQkiTE5LRkxBR1MgPSAkKExOS0ZMQUdTKSIgXAotCSJMSUJTID0gLWxwYW0iCi0KLSMg TGludXggc3lzdGVtcyB0aGF0IGhhdmUgbm8gPHN5cy9zZWxlY3QuaD4uCi0jIChub3QgdGVzdGVk IGluIHJlY2VudCB5ZWFycywgcGVyaGFwcyBubyBsb25nZXIgbmVlZGVkKQotbGludXhuczoKLQkk KE1BS0UpIGxpbnV4IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gS0ZMQUdTPS1ETk9fU1lTX1NF TEVDVF9ICi0KLSMgTGludXgtc2NyaXB0LW9ubHk6Ci0jIEEgbWluaW11bS1zaXplIHZlcnNpb24g Zm9yIExpbnV4IHRoYXQgZG9lcyBvbmx5IHNjcmlwdGluZyBhbmQKLSMgc2VyaWFsIGNvbW11bmlj YXRpb24gLS0gbm8gbmV0d29ya3MsIG5vIGZpbGUgdHJhbnNmZXIsIG5vIHNlY3VyaXR5LgotIyBP SyAyMDExLzA2LzE4Ci1saW51eHNvOgotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gIkNDID0gZ2NjIiAiQ0MyID0gZ2NjIiBcCi0JIkNGTEFHUyA9IC1PIC1ETElOVVgg LXBpcGUgLWZ1bnNpZ25lZC1jaGFyIC1EUE9TSVggLURDS19QT1NJWF9TSUcgXAotCS1ETElOVVhG U1NUTkQgLUROT0NPVEZNQyAtRE5PWEZFUiAtRE5PREVCVUcgLUROT0NTRVRTIC1ETk9IRUxQIFwK LQktRE5PTkVUIC1ETUlOSURJQUwgLUROT1NDUklQVCAtRE5PSUtTRCAtRE5PUFVTSCAkKEtGTEFH UykiIFwKLQkiTE5LRkxBR1MgPSAkKExOS0ZMQUdTKSIgIkxJQlMgPSAiCi0KLSMgU2VjdXJlIHRh cmdldHMgZm9yIExpbnV4LiAgVGhlc2Ugd29yayBvbiBSSEFTNCwgUkhFTDQsIGFuZCBSSEVMNSwK LSMgdW5saWtlIHNvbWUgb2YgdGhlIG9sZGVyIHRhcmdldHMgdGhhdCBmb2xsb3cuICBUaGV5IGhv b2sgaW50byB0aGUgbWFpbiBMaW51eAotIyB0YXJnZXQgc28gd2UgcGljayB1cCBhbGwgdGhlIG90 aGVyIG5ldyBzdHVmZiAtIGxhcmdlIGZpbGVzLCBiYXVkYm95LmgsIHRoZQotIyBhcHByb3ByaWF0 ZSBwdHkgaW50ZXJmYWNlLCBldGMuCi0KLSMgTGludXggd2l0aCBLZXJiZXJvcyA1LgotIyBVc2Ug Im1ha2UgbGludXgra3JiNSBLRkxBR1M9LUROT19LUkI1X0lOSVRfRVRTIiBpZiBuZWNlc3Nhcnku Ci0jT0sgMjAxMS8wNi8xNiBvbiBGZWRvcmEgMTQgd2l0aDoKLSMgbWFrZSBsaW51eCtrcmI1ICJM SUJTPSRMSUJTIC9saWIvbGliazVjcnlwdG8uc28uMyAvbGliL2xpYmNvbV9lcnIuc28uMiIKLSMg T24gUkhFTDU6IG1ha2UgbGludXgra3JiNSAtVUNLX0RFUwotbGludXgra3JiNToKLQlAZWNobyAn TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBMaW51eCB3aXRoIEtlcmJlcm9zIDUuLi4nCi0J QGNhc2UgYG9wZW5zc2wgdmVyc2lvbmAgaW4gXAotCSAgKjAuOS43KikgT1BFTlNTTE9QVElPTj0i LURPUEVOU1NMXzA5NyIgOzsgXAotCSAgKjAuOS44KikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NM XzA5OCIgOzsgXAotCSAgKjEuWzAtOV0uWzAtOV0qKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xf MTAwIiA7OyBcCi0JICAqKSBPUEVOU1NMT1BUSU9OPSIiIDs7IFwKLQllc2FjOyBcCi0JSEFWRV9E RVM9Jyc7IFwKLQlERVNfTElCPScnOyBcCi0JaWYgbHMgL3Vzci9saWIvbGliZGVzKiA+IC9kZXYv bnVsbCAyPiAvZGV2L251bGwgfHwgXAotCSAgIGxzICQoU1NMTElCKS9saWJkZXMqID4gL2Rldi9u dWxsIDI+IC9kZXYvbnVsbDsgdGhlbiBcCi0JICAgICAgREVTX0xJQj0nLWxkZXM0MjUnOyBcCi0J ICAgICAgSEFWRV9ERVM9Jy1EQ0tfREVTIC1ETElCREVTJzsgXAotICAgICAgICAgICAgICBlY2hv ICJIQVZFIERFUyI7IFwKLSAgICAgICAgICAgZWxzZSBlY2hvICJOTyBERVMiOyBcCi0JZmk7IFwK LQlLNUNSWVBUTz0nJzsgXAotICAgICAgICBpZiBscyAvbGliL2xpYms1Y3J5cHRvKiA+IC9kZXYv bnVsbCAyPiAvZGV2L251bGw7IHRoZW4gXAotICAgICAgICAgICAgICAgIEs1Q1JZUFRPPSctbGs1 Y3J5cHRvJzsgXAotCWVsc2UgaWYgbHMgL3Vzci9saWIvbGliazVjcnlwdG8qID4gL2Rldi9udWxs IDI+IC9kZXYvbnVsbDsgdGhlbiBcCi0JCUs1Q1JZUFRPPSctbGs1Y3J5cHRvJzsgXAotICAgICAg ICBlbHNlIGlmIGxzIC91c3IvbGliNjQvbGliazVjcnlwdG8qID4gL2Rldi9udWxsIDI+IC9kZXYv bnVsbDsgdGhlbiBcCi0gICAgICAgICAgICAgICAgSzVDUllQVE89Jy1sazVjcnlwdG8nOyBcCi0g ICAgICAgIGZpOyBmaTsgZmk7IFwKLQlDT01fRVJSPScnOyBcCi0JaWYgbHMgL2xpYi9saWJjb21f ZXJyKiA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGw7IHRoZW4gXAotCQlDT01fRVJSPSctbGNvbV9l cnInOyBcCi0JZmk7IFwKLQlHU1NBUElMSUI9Jy1sZ3NzYXBpJzsgXAotCWlmIGxzIC9saWIvbGli Z3NzYXBpX2tyYjUqID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbDsgdGhlbiBcCi0JCUdTU0FQSUxJ Qj0nLWxnc3NhcGlfa3JiNSc7IFwKLQllbHNlIGlmIGxzIC91c3IvbGliL2xpYmdzc2FwaV9rcmI1 KiA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGw7IHRoZW4gXAotCQlHU1NBUElMSUI9Jy1sZ3NzYXBp X2tyYjUnOyBcCi0JZWxzZSBLNURJUj1gZWNobyAkKEs1TElCKSB8IHNlZCAnc3wtTHx8J2A7IFwK LQkJaWYgbHMgJCRLNURJUi9saWJnc3NhcGlfa3JiNSogPiAvZGV2L251bGwgMj4gL2Rldi9udWxs OyB0aGVuIFwKLQkJCUdTU0FQSUxJQj0nLWxnc3NhcGlfa3JiNSc7IFwKLQlmaTsgZmk7IGZpOyBc Ci0JJChNQUtFKSBsaW51eCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkND MiA9IGdjYyIgXAotCSJLRkxBR1M9IC1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19LRVJCRVJPUyAt REtSQjUgJCRPUEVOU1NMT1BUSU9OIFwKLQktRENLX0VOQ1JZUFRJT04gJCRIQVZFX0RFUyAkKEs1 SU5DKSAkKEs1SU5DKS9rcmI1IFwKLQktSS91c3IvaW5jbHVkZS9ldCAkKEtGTEFHUykiICJMTktG TEFHUyA9ICQoTE5LRkxBR1MpIiBcCi0JIkxJQlMgPSAkKEs1TElCKSAkJERFU19MSUIgLWxjcnlw dG8gJCRHU1NBUElMSUIgLWxrcmI1IFwKLQkkJEs1Q1JZUFRPICQkQ09NX0VSUiAkKExJQlMpIiA7 IFwKLQlpZiBbICEgLWYgLi93ZXJtaXQgXSB8fCBbIC4vY2tjbWFpLm8gLW50IC4vd2VybWl0IF0g OyB0aGVuIFwKLQkJZWNobyAiIjsgXAotCQllY2hvICJJZiBidWlsZCBmYWlsZWQgdHJ5OiI7IFwK LQkJZWNobyAiIjsgXAotCQllY2hvICIgIG1ha2UgY2xlYW4gOyBtYWtlICQke0tUQVJHRVQ6LSQo QCl9IEtGTEFHUz0tVUNLX0RFUyI7IFwKLQkJZWNobyAiIjsgXAotCWZpCi0KLSMgTGludXggd2l0 aCBLZXJiZXJvcyA1IGFuZCBLZXJiZXJvcyA0LgotIyBVc2UgIm1ha2UgbGludXgra3JiNSBLRkxB R1M9LUROT19LUkI1X0lOSVRfRVRTIiBpZiBuZWNlc3NhcnkuCi0jIEFkZCAiS0ZMQUdTPS1VQ0tf REVTIiBpZiBmYWlsdXJlIG1lc3NhZ2VzIGxvb2sgREVTLXJlbGF0ZWQuCi0jIFVOVEVTVEVEIChi ZWNhdXNlIEkgY2FuJ3QgZmluZCBhIGJveCB3aXRoIEtyYjQgYW5kIEtyYjUgaW5zdGFsbGVkKQot bGludXgra3JiNStrcmI0OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgZm9yIExpbnV4IHdpdGgg S2VyYmVyb3MgNCBhbmQgS2VyYmVyb3MgNScKLQkkKE1BS0UpIGxpbnV4K2tyYjUgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0tREtSQjQgLURLUkI1MjQgJChLRkxBR1MpIiAi TElCUz0kKExJQlMpIC1sa3JiNCIKLQotIyBMaW51eCB3aXRoIE9wZW5TU0wgCi0jIEluIExpbnV4 LCBTU0wgbGlicyBhcmUgb2Z0ZW4gaW4gL2xpYiBvciAvdXNyL2xpYiBhbmQgc28gZm91bmQgYnkg ZGVmYXVsdC4KLSMgVGhpcyB0YXJnZXRzIHRha2VzIGludG8gYWNjb3VudCB0aGUgREVTIGxpYnJh cnkgbWlnaHQgb3IgbWlnaHQgbm90Ci0jIGV4aXN0LiAgSWYgaXQgZG9lcyBleGlzdCwgaG93ZXZl ciwgdGhlIHRhcmdldCB3aWxsIHJlcXVpcmUgc29tZSBlZGl0aW5nCi0jIGlmIGl0cyBiYXNlbmFt ZSBpcyBub3QgbGliZGVzNDI1LiAgLSBmZGMgVHVlIFNlcCAyMSAxNDoyODowMCAyMDEwCi0jIElN UE9SVEFOVDogU29tZSBMaW51eCBwbGF0Zm9ybXMgaGF2ZSBERVMgbGlicmFyaWVzIGJ1dCB0aGV5 IGFyZSBtaXNzaW5nCi0jIGZ1bmN0aW9ucyB1c2VkIGJ5IEtlcm1pdC4gIEluIHRoYXQgY2FzZSB5 b3Ugd2lsbCBnZXQgZmF0YWwgZXJyb3JzIGF0Ci0jIGxpbmsgdGltZSBpbnZvbHZpbmcgcm91dGlu ZXMgc3VjaCBhcyBkZXNfZWNiM19lbmNyeXB0LCBkZXNfcmFuZG9tX3NlZWQsCi0jIGFuZCBkZXNf c2V0X29kZF9wYXJpdHkuICBJbiB0aGF0IGNhc2UsICJtYWtlIGxpbnV4IEtGTEFHUz0tVUNLX0RF UyIKLSMgVGhlcmUncyBhIG5ldyB3YXJuaW5nIGF0IHRoZSBlbmQgdGhhdCBzaG91bGQgY29tZSBv dXQgaWYgdGhpcyBoYXBwZW5zLAotIyBhbmQgdGhhdCBzaG91bGQgbm90IGNvbWUgb3V0IGlmIGl0 IGRpZG4ndC4KLSMKLWxpbnV4K3NzbCBsaW51eCtvcGVuc3NsIGxpbnV4K29wZW5zc2wremxpYitz aGFkb3crcGFtIGxpbnV4K29wZW5zc2wrc2hhZG93OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQg JChDS1ZFUikgZm9yIExpbnV4K09wZW5TU0wgU1NMTElCPSQoU1NMTElCKScKLQlAY2FzZSBgb3Bl bnNzbCB2ZXJzaW9uYCBpbiBcCi0JICAqMC45LjcqKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xf MDk3IiA7OyBcCi0JICAqMC45LjgqKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMDk4IiA7OyBc Ci0JICAqMS5bMC05XS5bMC05XSopIE9QRU5TU0xPUFRJT049Ii1ET1BFTlNTTF8xMDAiIDs7IFwK LQkgICopIE9QRU5TU0xPUFRJT049IiIgOzsgXAotCWVzYWM7IFwKLQlIQVZFX0RFUz0nJzsgXAot CURFU19MSUI9Jyc7IFwKLQlpZiBscyAvdXNyL2xpYi9saWJkZXMqID4gL2Rldi9udWxsIDI+IC9k ZXYvbnVsbCB8fCBcCi0JICAgbHMgJChTU0xMSUIpL2xpYmRlcyogPiAvZGV2L251bGwgMj4gL2Rl di9udWxsOyB0aGVuIFwKLQkgICAgICBERVNfTElCPSctbGRlczQyNSc7IFwKLQkgICAgICBIQVZF X0RFUz0nLURDS19ERVMgLURMSUJERVMnOyBcCi0JICAgICAgZWNobyAiSEFWRSBERVMiOyBcCi0J ICAgZWxzZSBlY2hvICJOTyBERVMiOyBcCi0JZmk7IFwKLQkkKE1BS0UpIGxpbnV4IEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gIkNDID0gZ2NjIiAiQ0MyID0gZ2NjIiBcCi0JIktGTEFHUz0gLURD S19BVVRIRU5USUNBVElPTiAtRENLX0VOQ1JZUFRJT04gLURDS19DQVNUICQkSEFWRV9ERVMgXAot CS1EQ0tfU1NMIC1EQ0tfUEFNIC1EWkxJQiAtRENLX1NIQURPVyAkJE9QRU5TU0xPUFRJT04gJChT U0xJTkMpIFwKLQkkKEtGTEFHUykiICJMTktGTEFHUyA9ICQoTE5LRkxBR1MpIiBcCi0JIkxJQlMg PSAkKFNTTExJQikgLWxzc2wgJCRERVNfTElCIC1sY3J5cHRvIC1scGFtIC1sZGwgLWx6ICQoTElC UykiIDsgXAotCWlmIFsgISAtZiAuL3dlcm1pdCBdIHx8IFsgLi9ja2NtYWkubyAtbnQgLi93ZXJt aXQgXSA7IHRoZW4gXAotCQllY2hvICIiOyBcCi0JCWVjaG8gIklmIGJ1aWxkIGZhaWxlZCB0cnk6 IjsgXAotCQllY2hvICIiOyBcCi0JCWVjaG8gIiAgbWFrZSBjbGVhbiA7IG1ha2UgJCR7S1RBUkdF VDotJChAKX0gS0ZMQUdTPS1VQ0tfREVTIjsgXAotCQllY2hvICIiOyBcCi0JZmkKLQotIyBMaW51 eCB3aXRoIEtlcmJlcm9zIDUgYW5kIE9wZW5TU0wKLSMgT0sgMjAxMS8wNS8xNgotIyBBZGQgLVVD S19ERVMgaWYgZnVuY3Rpb25zIGxpa2UgZGVzX2VjYjNfZW5jcnlwdCwgZXNfcmFuZG9tX3NlZWQs Ci0jIGNvbWUgdXAgbWlzc2luZyBhdCBsaW5rIHRpbWUuCi1saW51eCtrcmI1K3NzbCBsaW51eCtr cmI1K29wZW5zc2w6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTGludXgg d2l0aCBLcmI1IGFuZCBPcGVuU1NMLi4uJwotCUBjYXNlIGBvcGVuc3NsIHZlcnNpb25gIGluIFwK LQkgICowLjkuNyopIE9QRU5TU0xPUFRJT049Ii1ET1BFTlNTTF8wOTciIDs7IFwKLQkgICowLjku OCopIE9QRU5TU0xPUFRJT049Ii1ET1BFTlNTTF8wOTgiIDs7IFwKLQkgICoxLlswLTldLlswLTld KikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NMXzEwMCIgOzsgXAotCSAgKikgT1BFTlNTTE9QVElP Tj0iIiA7OyBcCi0JZXNhYzsgXAotCUhBVkVfREVTPScnOyBcCi0JREVTX0xJQj0nJzsgXAotCWlm IGxzIC91c3IvbGliL2xpYmRlcyogPiAvZGV2L251bGwgMj4gL2Rldi9udWxsIHx8IFwKLQkgICBs cyAkKFNTTExJQikvbGliZGVzKiA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGw7IHRoZW4gXAotCSAg ICAgIERFU19MSUI9Jy1sZGVzNDI1JzsgXAotCSAgICAgIEhBVkVfREVTPSctRENLX0RFUyAtRExJ QkRFUyc7IFwKLQkgICAgICBlY2hvICJIQVZFIERFUyI7IFwKLQkgICBlbHNlIGVjaG8gIk5PIERF UyI7IFwKLQlmaTsgXAotCUs1Q1JZUFRPPScnOyBcCi0gICAgICAgIGlmIGxzIC9saWIvbGliazVj cnlwdG8qID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbDsgdGhlbiBcCi0gICAgICAgICAgICAgICAg SzVDUllQVE89Jy1sazVjcnlwdG8nOyBcCi0JZWxzZSBpZiBscyAvdXNyL2xpYi9saWJrNWNyeXB0 byogPiAvZGV2L251bGwgMj4gL2Rldi9udWxsOyB0aGVuIFwKLQkJSzVDUllQVE89Jy1sazVjcnlw dG8nOyBcCi0gICAgICAgIGVsc2UgaWYgbHMgL3Vzci9saWI2NC9saWJrNWNyeXB0byogPiAvZGV2 L251bGwgMj4gL2Rldi9udWxsOyB0aGVuIFwKLSAgICAgICAgICAgICAgICBLNUNSWVBUTz0nLWxr NWNyeXB0byc7IFwKLQlmaTsgZmk7IGZpOyBcCi0JQ09NX0VSUj0nJzsgXAotCWlmIGxzIC9saWIv bGliY29tX2VyciogPiAvZGV2L251bGwgMj4gL2Rldi9udWxsOyB0aGVuIFwKLQkJQ09NX0VSUj0n LWxjb21fZXJyJzsgXAotCWZpOyBcCi0JR1NTQVBJTElCPSctbGdzc2FwaSc7IFwKLQlpZiBscyAv bGliL2xpYmdzc2FwaV9rcmI1KiA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGw7IHRoZW4gXAotCQlH U1NBUElMSUI9Jy1sZ3NzYXBpX2tyYjUnOyBcCi0JZWxzZSBpZiBscyAvdXNyL2xpYi9saWJnc3Nh cGlfa3JiNSogPiAvZGV2L251bGwgMj4gL2Rldi9udWxsOyB0aGVuIFwKLQkJR1NTQVBJTElCPSct bGdzc2FwaV9rcmI1JzsgXAotCWVsc2UgSzVESVI9YGVjaG8gJChLNUxJQikgfCBzZWQgJ3N8LUx8 fCdgOyBcCi0JCWlmIGxzICQkSzVESVIvbGliZ3NzYXBpX2tyYjUqID4gL2Rldi9udWxsIDI+IC9k ZXYvbnVsbDsgdGhlbiBcCi0JCQlHU1NBUElMSUI9Jy1sZ3NzYXBpX2tyYjUnOyBcCi0JZmk7IGZp OyBmaTsgXAotCSQoTUFLRSkgbGludXggS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBn Y2MiICJDQzIgPSBnY2MiIFwKLQkiS0ZMQUdTPSAtRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfS0VS QkVST1MgLURLUkI1IFwKLQktRENLX1NTTCAtRENLX1BBTSAtRFpMSUIgLURDS19TSEFET1cgJCRP UEVOU1NMT1BUSU9OICQoU1NMSU5DKSBcCi0JLURDS19FTkNSWVBUSU9OICQkSEFWRV9ERVMgJChL NUlOQykgJChLNUlOQykva3JiNSBcCi0JLUkvdXNyL2luY2x1ZGUvZXQgJChLRkxBR1MpIiAiTE5L RkxBR1MgPSAkKExOS0ZMQUdTKSIgXAotCSJMSUJTID0gJChLNUxJQikgJChTU0xMSUIpIC1sc3Ns ICQkREVTX0xJQiAtbHBhbSAtbHogXAotCS1sY3J5cHRvICQkR1NTQVBJTElCIC1sa3JiNSAkJEs1 Q1JZUFRPICQkQ09NX0VSUiAkKExJQlMpIiA7IFwKLQlpZiBbICEgLWYgLi93ZXJtaXQgXSB8fCBb IC4vY2tjbWFpLm8gLW50IC4vd2VybWl0IF0gOyB0aGVuIFwKLQkJZWNobyAiIjsgXAotCQllY2hv ICJJZiBidWlsZCBmYWlsZWQgdHJ5OiI7IFwKLQkJZWNobyAiIjsgXAotCQllY2hvICIgIG1ha2Ug Y2xlYW4gOyBtYWtlICQke0tUQVJHRVQ6LSQoQCl9IEtGTEFHUz0tVUNLX0RFUyI7IFwKLQkJZWNo byAiIjsgXAotCWZpCi0KLSMgOjpCRUdJTl9PTERfTElOVVhfVEFSR0VUUzo6Ci0KLSMgVGhlIHJl bWFpbmluZyBMaW51eCBlbnRyaWVzIGFyZSBmb3Igc3BlY2lhbCBvciBjdXN0b21pemVkIGJ1aWxk cy4gIFRoZXkgaGF2ZQotIyBub3QgYmVlbiBnZW5lcmFsaXplZCAoInN1YnJvdXRpbml6ZWQiKSBs aWtlIHRoZSBvbmVzIGFib3ZlLiAgSWRlYWxseSwgd2UKLSMgc2hvdWxkIGFsbG93IGZvciBldmVy eSBjb21iaW5hdGlvbiBvZiBsaWJjIHZzIGdsaWJjLCBnY2MgdnMgZWdjcywgY3Vyc2VzIHZzCi0j IG5jdXJzZXMsIEtlcmJlcm9zIElWIHZzIEtlcmJlcm9zIFYgdnMgU1JQIChpbiBhbnkgY29tYmlu YXRpb24pLCBhbmQgc28gb24uCi0jIFRoZSBiZXN0IHdheSB0byBkbyB0aGlzIGlzIHRvIHNldCBL RkxBR1MgYW5kIExJQlMgdmFsdWVzIGFuZCB0aGVuIGNoYWluIHRvCi0jIHRoZSBtYWluICJsaW51 eCIgdGFyZ2V0LCBhcyBpbiB0aGUgZXhhbXBsZXMganVzdCBhYm92ZS4gIFRvIHNraXAgcGFzdCBh bGwgb2YKLSMgdGhlc2Ugb2xkIHRhcmdldHMgKGFuZCB0aGVyZSBhcmUgbWFueSkgc2VhcmNoIGZv ciA6OkVORF9PTERfTElOVVhfVEFSR0VUUzo6Ci0jIChhZnRlciB0aGlzIGxpbmUpLgotCi0jU2hh cnAgWmF1cnVzIFNMLTU1MDAgLSBMaW51eCBiYXNlZAotenNsNTUwMDoKLQlAZWNobyAnTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTaGFycCBaYXVydXMgU0wtNTUwMC4uLicKLQlAdG91Y2gg Y2tjcHJvLmMKLQlAdG91Y2ggd2FydAotCSQoTUFLRSkgbGludXhuYyBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9ICJLRkxBR1M9LURaU0w1NTAwIiBcCi0JIkNDID0gZ2NjIiAiQ0MyID0gZ2NjIgot Ci0jTWtsaW51eCBEUjMgaGFzIGhvcnJpYmxlIGJ1ZyBpbiA8dXRtcGJpdHMuaD4gLSBzZWUgY2t1 ZmlvLmMuCi1ta2xpbnV4OgotCSQoTUFLRSkgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiS0ZM QUdTPS1EVVRNUEJVRyIgXAotCSJMSUJTPS1sY3J5cHQgLWxyZXNvbHYiIGxpbnV4YQotCi0jTGlu dXhQUEMgMTk5OQotbGludXhwcGM6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBm b3IgTGludXhQUEMgMTk5OS4uLicKLQlAaWYgdGVzdCAtZiAvdXNyL2xpYi9saWJjcnlwdC5hOyB0 aGVuIFwKLQkgICAgaWYgdGVzdCAtZiAvdXNyL2xpYi9saWJyZXNvbHYuYTsgdGhlbiBcCi0JICAg ICAgICAkKE1BS0UpIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCQkiS0ZMQUdTPSQoTkNV UlNFU19DUFApIC1ESEFWRV9DUllQVF9IIFwKLQkJLURMT0NLX0RJUj1cXFxcXFwiXCIvdmFyL2xv Y2svbW9kZW1cXFxcXFwiXCIgJChLRkxBR1MpIiBcCi0JICAgICAgICAiTElCUz0tbG5jdXJzZXMg LWxyZXNvbHYgLWxjcnlwdCIgbGludXhhIDsgXAotCSAgICBlbHNlIFwKLQkgICAgICAgICQoTUFL RSkgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JCSJLRkxBR1M9JChOQ1VSU0VTX0NQUCkg LURIQVZFX0NSWVBUX0ggXAotCQktRExPQ0tfRElSPVxcXFxcXCJcIi92YXIvbG9jay9tb2RlbVxc XFxcXCJcIiAkKEtGTEFHUykiIFwKLQkgICAgICAgICJMSUJTPS1sbmN1cnNlcyAtbGNyeXB0IiBs aW51eGEgOyBcCi0JICAgIGZpIFwKLQllbHNlIFwKLQkgICAgaWYgdGVzdCAtZiAvdXNyL2xpYi9s aWJyZXNvbHYuYTsgdGhlbiBcCi0JICAgICAgICAkKE1BS0UpIEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gXAotCQkiS0ZMQUdTPSQoTkNVUlNFU19DUFApIFwKLQkJLURMT0NLX0RJUj1cXFxcXFwi XCIvdmFyL2xvY2svbW9kZW1cXFxcXFwiXCIgJChLRkxBR1MpIiBcCi0JICAgICAgICAiTElCUz0t bG5jdXJzZXMgLWxyZXNvbHYiIGxpbnV4YSA7IFwKLQkgICAgZWxzZSBcCi0JICAgICAgICAkKE1B S0UpIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCQkiS0ZMQUdTPSQoTkNVUlNFU19DUFAp IFwKLQkJLURMT0NLX0RJUj1cXFxcXFwiXCIvdmFyL2xvY2svbW9kZW1cXFxcXFwiXCIgJChLRkxB R1MpIiBcCi0JICAgICAgICAiTElCUz0tbG5jdXJzZXMiIGxpbnV4YSA7IFwKLQkgICAgZmkgXAot CWZpCi0KLQotIyBMaWtlICJtYWtlIGxpbnV4IiBidXQgYnVpbHQgd2l0aCBlZ2NzIHJhdGhlciB0 aGFuIGdjYy4KLSMgSWYgeW91IGdldCAiSW50ZXJuYWwgY29tcGlsZXIgZXJyb3IgeHh4LCBvdXRw dXQgcGlwZSBoYXMgYmVlbiBjbG9zZWQiLAotIyB0cnkgcmVtb3ZpbmcgLXBpcGUuCi1saW51eGVn Y3M6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTGludXggMS4yIG9yIGxh dGVyIHdpdGggZWdjcy4uLicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9ICJDQyA9IGVnY3MiICJDQzIgPSBlZ2NzIiBcCi0JIkNGTEFHUyA9IC1PIC1ETElOVVggLXBp cGUgLWZ1bnNpZ25lZC1jaGFyIFwKLQktRFBPU0lYIC1EQ0tfUE9TSVhfU0lHIC1EQ0tfTkNVUlNF UyAtRE5PQ09URk1DIFwKLQktRFRDUFNPQ0tFVCAtRExJTlVYRlNTVE5EICQoS0ZMQUdTKSIgXAot CSJMTktGTEFHUyA9ICQoTE5LRkxBR1MpIiAiTElCUyA9IC1sbmN1cnNlcyAtbGNyeXB0IC1scmVz b2x2IgotCi0jTGludXggb24gSW50ZWwgUEMgd2l0aCBDeWdudXMgb3IgTUlUIEtlcmJlcm9zIDUg MS4yLjEgKG5vIEs0IGNvbXBhdGliaWxpdHkpLgotbGludXgra3JiNS1vbGQ6Ci0JQGVjaG8gJ01h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTGludXggb24gSW50ZWwgd2l0aCBLZXJiZXJvcy4u LicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIg IkNDMiA9IGdjYyIgXAotCSJDRkxBR1MgPSAtTyAtZnVuc2lnbmVkLWNoYXIgLXBpcGUgLURQT1NJ WCAtRExJTlVYIC1ETk9DT1RGTUMgXAotCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19LRVJCRVJP UyAtREtSQjUgXAotCS1EQ0tfRU5DUllQVElPTiAtRENLX0RFUyAtRENLX0NVUlNFUyAtRENLX1BP U0lYX1NJRyBcCi0JLURUQ1BTT0NLRVQgLURMSU5VWEZTU1RORCAtREhBVkVfQ1JZUFRfSCAkKEs1 SU5DKSAkKEs1SU5DKS9rcmI1IFwKLQkkKEtGTEFHUykiICJMTktGTEFHUyA9ICQoTE5LRkxBR1Mp IiBcCi0JIkxJQlMgPSAkKEs1TElCKSAtbG5jdXJzZXMgLWx0ZXJtY2FwIC1sZGVzNDI1IC1sa3Ji NSBcCi0JLWxjb21fZXJyIC1sazVjcnlwdG8gLWxnc3NhcGlfa3JiNSAtbGNyeXB0IC1scmVzb2x2 IgotCi0jIExpbnV4IG9uIEludGVsIFBDIHdpdGggU1JQIDEuNy40IHVzaW5nIEdOVSBNUCwgS3J5 cHRvLCBhbmQgRXJpYyBZb3VuZydzCi0jIERFUyBsaWJyYXJ5LiAgUmVtb3ZlIHRoZSAtRENLX0RF UywgLURMSUJERVMgYW5kIC1sZGVzIGlmIHlvdSBkbyBub3QgaGF2ZQotIyBFcmljIFlvdW5nJ3Mj IGxpYmRlcy5hIGluc3RhbGxlZC4KLSMKLWxpbnV4K3NycCtnbXA6Ci0JQGVjaG8gJ01ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgTGludXggb24gaTM4NiB3aXRoIFNSUC4uLicKLQkkKE1BS0Up IHNycG1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIg XAotCSJDRkxBR1MgPSAtTyAtZnVuc2lnbmVkLWNoYXIgLXBpcGUgLURQT1NJWCAtRExJTlVYIC1E Tk9DT1RGTUMgXAotCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19TUlAgXAotCS1EQ0tfRU5DUllQ VElPTiAtRENLX0NBU1QgLURDS19ERVMgLURMSUJERVMgXAotCS1EQ0tfQ1VSU0VTIC1EQ0tfUE9T SVhfU0lHIC1EVENQU09DS0VUIC1ETElOVVhGU1NUTkQgLURIQVZFX0NSWVBUX0ggXAotCSQoU1JQ SU5DKSAkKEtGTEFHUykiICJMTktGTEFHUyA9ICQoTE5LRkxBR1MpIiBcCi0JIkxJQlMgPSAkKFNS UExJQikgXAotCS1sbmN1cnNlcyAtbHRlcm1jYXAgLWxzcnAgLWxnbXAgLWxkZXMgLWxrcnlwdG8g LWxjcnlwdCAtbHJlc29sdiIKLQotbGludXgrc3JwK2dtcCtuby1kZXM6Ci0JQGVjaG8gJ01ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTGludXggb24gaTM4NiB3aXRoIFNSUCAuLi4nCi0JJChN QUtFKSBzcnBtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiICJDQzIgPSBn Y2MiIFwKLQkiQ0ZMQUdTID0gLU8gLWZ1bnNpZ25lZC1jaGFyIC1waXBlIC1EUE9TSVggLURMSU5V WCAtRE5PQ09URk1DIFwKLQktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1JQIFwKLQktRENLX0VO Q1JZUFRJT04gLURDS19DQVNUIFwKLQktRENLX0NVUlNFUyAtRENLX1BPU0lYX1NJRyAtRFRDUFNP Q0tFVCAtRExJTlVYRlNTVE5EIC1ESEFWRV9DUllQVF9IIFwKLQkkKFNSUElOQykgJChLRkxBR1Mp IiAiTE5LRkxBR1MgPSAkKExOS0ZMQUdTKSIgXAotCSJMSUJTID0gJChTUlBMSUIpIFwKLQktbG5j dXJzZXMgLWx0ZXJtY2FwIC1sc3JwIC1sZ21wIC1sa3J5cHRvIC1sY3J5cHQgLWxyZXNvbHYiCi0K LWxpbnV4K3NycCtnbXAtZXhwb3J0OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIExpbnV4IG9uIGkzODYgd2l0aCBTUlAuLi4nCi0JJChNQUtFKSBzcnBtaXQtZXhwb3J0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAotCSJD RkxBR1MgPSAtTyAtZnVuc2lnbmVkLWNoYXIgLXBpcGUgLURQT1NJWCAtRExJTlVYIC1ETk9DT1RG TUMgXAotCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19TUlAgLURGTkZMT0FUIFwKLQktRENLX0NV UlNFUyAtRENLX1BPU0lYX1NJRyAtRFRDUFNPQ0tFVCAtRExJTlVYRlNTVE5EIC1ESEFWRV9DUllQ VF9IIFwKLQkkKFNSUElOQykgJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAkKExOS0ZMQUdTKSIgXAot CSJMSUJTID0gJChTUlBMSUIpIFwKLQktbG5jdXJzZXMgLWx0ZXJtY2FwIC1sc3JwIC1sZ21wIC1s a3J5cHRvIC1sY3J5cHQgLWxtIC1scmVzb2x2IgotCi1saW51eCtzcnArZ21wK3BhbToKLQlAZWNo byAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBMaW51eCBvbiBpMzg2IHdpdGggU1JQLi4u JwotCSQoTUFLRSkgc3JwbWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDID0gZ2NjIiAi Q0MyID0gZ2NjIiBcCi0JIkNGTEFHUyA9IC1PIC1mdW5zaWduZWQtY2hhciAtcGlwZSAtRFBPU0lY IC1ETElOVVggLUROT0NPVEZNQyBcCi0JLURDS19BVVRIRU5USUNBVElPTiAtRENLX1NSUCBcCi0J LURDS19FTkNSWVBUSU9OIC1EQ0tfQ0FTVCAtRENLX0RFUyAtRExJQkRFUyBcCi0JLURDS19DVVJT RVMgLURDS19QT1NJWF9TSUcgLURUQ1BTT0NLRVQgLURMSU5VWEZTU1RORCAtREhBVkVfQ1JZUFRf SCBcCi0JLURDS19QQU0gLURGTkZMT0FUICQoU1JQSU5DKSAkKEtGTEFHUykiICJMTktGTEFHUyA9 ICQoTE5LRkxBR1MpIiBcCi0JIkxJQlMgPSAkKFNSUExJQikgLWxuY3Vyc2VzIC1sdGVybWNhcCAt bHNycCAtbGdtcCAtbGRlcyAtbGtyeXB0byBcCi0JLWxjcnlwdCAtbHBhbSAtbGRsIC1sbSAtbHJl c29sdiIKLQotI0xpbnV4IG9uIEludGVsIFBDIHdpdGggU1JQIDEuNy40IGJ1aWx0IHdpdGggT3Bl blNTTCBmb3IgQmlnIE51bWJlciBNYXRoCi0jYW5kIENyeXB0b2dyYXBoaWMgZnVuY3Rpb25hbGl0 eS4KLSMKLWxpbnV4K3NycDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBM aW51eCBvbiBpMzg2IHdpdGggU1JQLi4uJwotCSQoTUFLRSkgc3JwbWl0IEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gIkNDID0gZ2NjIiAiQ0MyID0gZ2NjIiBcCi0JIkNGTEFHUyA9IC1PIC1mdW5z aWduZWQtY2hhciAtcGlwZSAtRFBPU0lYIC1ETElOVVggLUROT0NPVEZNQyBcCi0JLURDS19BVVRI RU5USUNBVElPTiAtRENLX1NSUCBcCi0JLURDS19FTkNSWVBUSU9OIC1EQ0tfQ0FTVCAtRENLX0RF UyAtRExJQkRFUyBcCi0JLURDS19DVVJTRVMgLURDS19QT1NJWF9TSUcgLURUQ1BTT0NLRVQgLURM SU5VWEZTU1RORCAtREhBVkVfQ1JZUFRfSCBcCi0JJChTUlBJTkMpICQoU1NMSU5DKSAkKEtGTEFH UykiICJMTktGTEFHUyA9ICQoTE5LRkxBR1MpIiBcCi0JIkxJQlMgPSAkKFNSUExJQikgJChTU0xM SUIpIFwKLQktbG5jdXJzZXMgLWx0ZXJtY2FwIC1sc3JwIC1sa3J5cHRvIC1sY3J5cHRvIC1sY3J5 cHQgLWxyZXNvbHYiCi0KLWxpbnV4K3NycCtwYW06Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgTGludXggb24gaTM4NiB3aXRoIFNSUC4uLicKLQkkKE1BS0UpIHNycG1pdCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAotCSJDRkxB R1MgPSAtTyAtZnVuc2lnbmVkLWNoYXIgLXBpcGUgLURQT1NJWCAtRExJTlVYIC1ETk9DT1RGTUMg XAotCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19TUlAgXAotCS1EQ0tfRU5DUllQVElPTiAtRENL X0NBU1QgLURDS19ERVMgLURMSUJERVMgXAotCS1EQ0tfQ1VSU0VTIC1EQ0tfUE9TSVhfU0lHIC1E VENQU09DS0VUIC1ETElOVVhGU1NUTkQgLURIQVZFX0NSWVBUX0ggXAotCS1EQ0tfUEFNIC1ERk5G TE9BVCAkKFNSUElOQykgJChTU0xJTkMpICQoS0ZMQUdTKSIgXAotCSJMTktGTEFHUyA9ICQoTE5L RkxBR1MpIiBcCi0JIkxJQlMgPSAkKFNSUExJQikgJChTU0xMSUIpIC1sbmN1cnNlcyAtbHRlcm1j YXAgLWxzcnAgLWxrcnlwdG8gXAotCS1sY3J5cHRvIC1sY3J5cHQgLWxwYW0gLWxkbCAtbG0gLWxy ZXNvbHYiCi0KLSNMaW51eCBvbiBJbnRlbCBQQyB3aXRoIFNSUCBhbmQgU1NML1RMUy4KLSMKLSMg bGlic3JwLmEgc2hvdWxkIGJlIGJ1aWxkIHdpdGggT3BlblNTTAotIyBSZXF1aXJlcyB0aGUgS2Vy YmVyb3MgMS4yLjIgb3IgaGlnaGVyIHRvIGJlIGNvbXBpbGVkIHdpdGggS1JCNCBjb21wYXRpYmls aXR5LgotI1JlbW92ZSAtbHRlcm1jYXAgaWYgaXQgY2F1c2VzIHRyb3VibGUgZS5nLiBpbiBEZWJp YW4gMi4yLgotI0lmIHlvdSBoYXZlIE9wZW5TU0wgMC45Ljcgb3IgbGF0ZXIsIGFkZCAtRE9QRU5T U0xfMDk3IHRvIEtGTEFHUy4KLWxpbnV4K3NycCtvcGVuc3NsOgotCUBlY2hvICdNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIExpbnV4IG9uIGkzODYgd2l0aCBLUkIsU1JQLFNTTC4uLicKLQkk KE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9 IGdjYyIgXAotCSJDRkxBR1MgPSAtTyAtZnVuc2lnbmVkLWNoYXIgLXBpcGUgLURQT1NJWCAtRExJ TlVYIC1ETk9DT1RGTUMgXAotCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19TUlAgXAotCS1EQ0tf RU5DUllQVElPTiAtRENLX0NBU1QgLURDS19ERVMgLURMSUJERVMgLURDS19TU0wgXAotCS1EQ0tf Q1VSU0VTIC1EQ0tfUE9TSVhfU0lHIC1EVENQU09DS0VUIC1ETElOVVhGU1NUTkQgLURIQVZFX0NS WVBUX0ggXAotCSQoU1JQSU5DKSAkKFNTTElOQykgJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAkKExO S0ZMQUdTKSIgXAotCSJMSUJTID0gJChTUlBMSUIpICQoU1NMTElCKSBcCi0JLWxuY3Vyc2VzIC1s dGVybWNhcCAtbHNycCAtbHNzbCAtbGtyeXB0byAtbGNyeXB0byBcCi0JLWxjcnlwdCAtbHJlc29s diIKLQotI0xpbnV4IG9uIEludGVsIFBDIHdpdGggQ3lnbnVzIG9yIE1JVCBLZXJiZXJvcyA1IDEu Mi4yIGFuZCBTUlAuCi0jCi0jIGxpYnNycC5hIHNob3VsZCBiZSBidWlsZCB3aXRoIEdOVSBNUCAo bGliZ21wLmEpCi0jIGluc3RlYWQgb2YgQVQmVCBDcnlwdG9MaWIgKGxpYmNyeXB0LmEpIGR1ZSB0 byBuYW1pbmcgY29uZmxpY3RzIHdpdGgKLSMgc3RhbmRhcmQgZGlzdHJpYnV0aW9uIExpbnV4IGxp YnJhcmllcy4KLSMgUmVxdWlyZXMgdGhlIEtlcmJlcm9zIDEuMi4yIG9yIGhpZ2hlciB0byBiZSBj b21waWxlZCB3aXRoIEtSQjQgY29tcGF0aWJpbGl0eS4KLWxpbnV4K2tyYjUra3JiNCtzcnA6Ci0J QGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTGludXggb24gaTM4NiB3aXRoIEtS QjU0K1NSUC4uLicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJD QyA9IGdjYyIgIkNDMiA9IGdjYyIgXAotCSJDRkxBR1MgPSAtTyAtZnVuc2lnbmVkLWNoYXIgLXBp cGUgLURQT1NJWCAtRExJTlVYIC1ETk9DT1RGTUMgXAotCS1EQ0tfQVVUSEVOVElDQVRJT04gLURD S19TUlAgLURDS19LRVJCRVJPUyAgLURLUkI1IC1ES1JCNCAtREtSQjUyNCBcCi0JLURDS19FTkNS WVBUSU9OIC1EQ0tfQ0FTVCAtRENLX0RFUyAtRExJQkRFUyBcCi0JLURDS19DVVJTRVMgLURDS19Q T1NJWF9TSUcgLURUQ1BTT0NLRVQgLURMSU5VWEZTU1RORCAtREhBVkVfQ1JZUFRfSCBcCi0JJChL NUlOQykgJChLNUlOQykva3JiNSAkKFNSUElOQykgXAotCSQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0g JChMTktGTEFHUykiIFwKLQkiTElCUyA9ICQoSzVMSUIpICQoU1JQTElCKSBcCi0JLWxuY3Vyc2Vz IC1sdGVybWNhcCAtbHNycCAtbGdtcCAtbGdzc2FwaV9rcmI1IC1sa3J5cHRvIFwKLQktbGRlcyAt bGtyYjQgLWxkZXM0MjUgLWxrcmI1IC1sY29tX2VyciAtbGs1Y3J5cHRvIC1sY3J5cHQgLWxyZXNv bHYiCi0KLSNMaW51eCBvbiBJbnRlbCBQQyB3aXRoIEN5Z251cyBvciBNSVQgS2VyYmVyb3MgNSAx LjIuMiwgU1JQIGFuZCBTU0wvVExTLgotIwotIyBsaWJzcnAuYSBzaG91bGQgYmUgYnVpbGQgd2l0 aCBPcGVuU1NMCi0jIFJlcXVpcmVzIHRoZSBLZXJiZXJvcyAxLjIuMiBvciBoaWdoZXIgdG8gYmUg Y29tcGlsZWQgd2l0aCBLUkI0IGNvbXBhdGliaWxpdHkuCi0jIFJlcXVpcmVzIE9wZW5TU0wgMC45 LjZhIG9yIGhpZ2hlcgotI0lmIHlvdSBoYXZlIE9wZW5TU0wgMC45Ljcgb3IgbGF0ZXIsIGFkZCAt RE9QRU5TU0xfMDk3IHRvIEtGTEFHUy4KLWxpbnV4K2tyYjUra3JiNCtzcnArb3BlbnNzbDoKLQlA ZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBMaW51eCBvbiBpMzg2IHdpdGggS1JC LFNSUCxTU0wuLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAi Q0MgPSBnY2MiICJDQzIgPSBnY2MiIFwKLQkiQ0ZMQUdTID0gLU8gLWZ1bnNpZ25lZC1jaGFyIC1w aXBlIC1EUE9TSVggLURMSU5VWCAtRE5PQ09URk1DIFwKLQktRENLX0FVVEhFTlRJQ0FUSU9OIC1E Q0tfU1JQIC1EQ0tfS0VSQkVST1MgIC1ES1JCNSAtREtSQjQgLURLUkI1MjQgXAotCS1EQ0tfRU5D UllQVElPTiAtRENLX0NBU1QgLURDS19ERVMgLURMSUJERVMgLURDS19TU0wgXAotCS1EQ0tfQ1VS U0VTIC1EQ0tfUE9TSVhfU0lHIC1EVENQU09DS0VUIC1ETElOVVhGU1NUTkQgLURIQVZFX0NSWVBU X0ggXAotCSQoSzVJTkMpICQoSzVJTkMpL2tyYjUgJChTUlBJTkMpICQoU1NMSU5DKSBcCi0JJChL RkxBR1MpIiAiTE5LRkxBR1MgPSAkKExOS0ZMQUdTKSIgXAotCSJMSUJTID0gJChLNUxJQikgJChT UlBMSUIpICQoU1NMTElCKSBcCi0JLWxuY3Vyc2VzIC1sdGVybWNhcCAtbHNycCBcCi0JLWxrcmI0 IC1sc3NsIC1sa3J5cHRvIC1sY3J5cHRvIFwKLQktbGtyYjUgLWxjb21fZXJyIC1sazVjcnlwdG8g LWxnc3NhcGlfa3JiNSAtbGNyeXB0IC1scmVzb2x2IgotCi0jTGludXggb24gSW50ZWwgUEMgd2l0 aCBDeWdudXMgb3IgTUlUIEtlcmJlcm9zIDUgMS4yLjIsIFNTTC9UTFMuCi0jCi0jIGxpYnNycC5h IHNob3VsZCBiZSBidWlsZCB3aXRoIE9wZW5TU0wKLSMgUmVxdWlyZXMgdGhlIEtlcmJlcm9zIDEu Mi4yIGJlIGNvbXBpbGVkIHdpdGggS1JCNCBjb21wYXRpYmlsaXR5LgotI0lmIHlvdSBoYXZlIE9w ZW5TU0wgMC45Ljcgb3IgbGF0ZXIsIGFkZCAtRE9QRU5TU0xfMDk3IHRvIEtGTEFHUy4KLWxpbnV4 K2tyYjUra3JiNCtvcGVuc3NsOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9y IExpbnV4IG9uIGkzODYgd2l0aCBLUkIsU1NMLi4uJwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gIkNDID0gZ2NjIiAiQ0MyID0gZ2NjIiBcCi0JIkNGTEFHUyA9IC1P IC1mdW5zaWduZWQtY2hhciAtcGlwZSAtRFBPU0lYIC1ETElOVVggLUROT0NPVEZNQyBcCi0JLURD S19BVVRIRU5USUNBVElPTiAtRENLX0tFUkJFUk9TICAtREtSQjUgLURLUkI0IC1ES1JCNTI0IFwK LQktRENLX0VOQ1JZUFRJT04gLURDS19DQVNUIC1EQ0tfREVTIC1ETElCREVTIC1EQ0tfU1NMIFwK LQktRENLX0NVUlNFUyAtRENLX1BPU0lYX1NJRyAtRFRDUFNPQ0tFVCAtRExJTlVYRlNTVE5EIC1E SEFWRV9DUllQVF9IIFwKLQkkKEs1SU5DKSAkKEs1SU5DKS9rcmI1ICQoU1NMSU5DKSBcCi0JJChL RkxBR1MpIiAiTE5LRkxBR1MgPSAkKExOS0ZMQUdTKSIgXAotCSJMSUJTID0gJChLNUxJQikgJChT U0xMSUIpIFwKLQktbG5jdXJzZXMgLWx0ZXJtY2FwIFwKLQktbGtyYjQgLWxzc2wgLWxjcnlwdG8g LWxrcmI1IC1sY29tX2VyciBcCi0JLWxrNWNyeXB0byAtbGdzc2FwaV9rcmI1IC1sY3J5cHQgLWxy ZXNvbHYiCi0KLSNMaW51eCBvbiBJbnRlbCBQQyB3aXRoIEN5Z251cyBvciBNSVQgS2VyYmVyb3Mg NSAxLjIuMSwgU1NML1RMUy4KLSMKLSMgbGlic3JwLmEgc2hvdWxkIGJlIGJ1aWxkIHdpdGggT3Bl blNTTAotIyBSZXF1aXJlcyB0aGUgS2VyYmVyb3MgMS4yLjIgYmUgY29tcGlsZWQgd2l0aCBLUkI0 IGNvbXBhdGliaWxpdHkuCi0jIElmIHlvdSBoYXZlIE9wZW5TU0wgMC45Ljcgb3IgbGF0ZXIsIGFk ZCAtRE9QRU5TU0xfMDk3IHRvIEtGTEFHUy4KLWxpbnV4K2tyYjUra3JiNCtvcGVuc3NsK3NoYWRv dzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBMaW51eCBvbiBpMzg2IHdp dGggS1JCLFNTTC4uLicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAotCSJDRkxBR1MgPSAtTyAtZnVuc2lnbmVkLWNoYXIg LXBpcGUgLURQT1NJWCAtRExJTlVYIC1ETk9DT1RGTUMgXAotCS1EQ0tfQVVUSEVOVElDQVRJT04g LURDS19LRVJCRVJPUyAgLURLUkI1IC1ES1JCNCAtREtSQjUyNCBcCi0JLURDS19FTkNSWVBUSU9O IC1EQ0tfQ0FTVCAtRENLX0RFUyAtRExJQkRFUyAtRENLX1NTTCAtRENLX1NIQURPVyBcCi0JLURD S19DVVJTRVMgLURDS19QT1NJWF9TSUcgLURUQ1BTT0NLRVQgLURMSU5VWEZTU1RORCAtREhBVkVf Q1JZUFRfSCBcCi0JJChLNUlOQykgJChLNUlOQykva3JiNSAkKFNTTElOQykgXAotCSQoS0ZMQUdT KSIgIkxOS0ZMQUdTID0gJChMTktGTEFHUykiIFwKLQkiTElCUyA9ICQoSzVMSUIpICQoU1NMTElC KSAgXAotCS1sbmN1cnNlcyAtbHRlcm1jYXAgXAotCS1sa3JiNCAtbHNzbCAtbGNyeXB0byAtbGty YjUgLWxjb21fZXJyIFwKLQktbGs1Y3J5cHRvIC1sZ3NzYXBpX2tyYjUgLWxjcnlwdCAtbHJlc29s diIKLQotI0xpbnV4IG9uIEludGVsIFBDIHdpdGggQ3lnbnVzIG9yIE1JVCBLZXJiZXJvcyA1IDEu MiwgU1NML1RMUy4KLSMKLSMgbGlic3JwLmEgc2hvdWxkIGJlIGJ1aWxkIHdpdGggT3BlblNTTAot IyBSZXF1aXJlcyB0aGUgS2VyYmVyb3MgMS4yLjIgYmUgY29tcGlsZWQgd2l0aCBLUkI0IGNvbXBh dGliaWxpdHkuCi0jIElmIHlvdSBoYXZlIE9wZW5TU0wgMC45Ljcgb3IgbGF0ZXIsIGFkZCAtRE9Q RU5TU0xfMDk3IHRvIEtGTEFHUy4KLWxpbnV4K2tyYjUra3JiNCtvcGVuc3NsK3psaWIrc2hhZG93 OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIExpbnV4IG9uIGkzODYgd2l0 aCBLUkIsU1NMLi4uJwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g IkNDID0gZ2NjIiAiQ0MyID0gZ2NjIiBcCi0JIkNGTEFHUyA9IC1PIC1mdW5zaWduZWQtY2hhciAt cGlwZSAtRFBPU0lYIC1ETElOVVggLUROT0NPVEZNQyBcCi0JLURDS19BVVRIRU5USUNBVElPTiAt RENLX0tFUkJFUk9TICAtREtSQjUgLURLUkI0IC1ES1JCNTI0IC1EWkxJQiBcCi0JLURDS19FTkNS WVBUSU9OIC1EQ0tfQ0FTVCAtRENLX0RFUyAtRExJQkRFUyAtRENLX1NTTCAtRENLX1NIQURPVyBc Ci0JLURDS19DVVJTRVMgLURDS19QT1NJWF9TSUcgLURUQ1BTT0NLRVQgLURMSU5VWEZTU1RORCAt REhBVkVfQ1JZUFRfSCBcCi0JJChLNUlOQykgJChLNUlOQykva3JiNSAkKFNTTElOQykgXAotCSQo S0ZMQUdTKSIgIkxOS0ZMQUdTID0gJChMTktGTEFHUykiIFwKLQkiTElCUyA9ICQoSzVMSUIpICQo U1NMTElCKSBcCi0JLWxuY3Vyc2VzIC1sdGVybWNhcCBcCi0JLWxrcmI0IC1sc3NsIC1sY3J5cHRv IC1sa3JiNSAtbGNvbV9lcnIgXAotCS1sazVjcnlwdG8gLWxnc3NhcGlfa3JiNSAtbGNyeXB0IC1s cmVzb2x2IC1seiIKLQotbGludXgra3JiNStrcmI0K3NycC1leHBvcnQ6Ci0JQGVjaG8gJ01ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTGludXggb24gaTM4NiB3aXRoIFNSUC4uLicKLQkkKE1B S0UpIHhlcm1pdC1leHBvcnQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNDID0gZ2Nj IiAiQ0MyID0gZ2NjIiBcCi0JIkNGTEFHUyA9IC1PIC1mdW5zaWduZWQtY2hhciAtcGlwZSAtRFBP U0lYIC1ETElOVVggLUROT0NPVEZNQyBcCi0JLURDS19BVVRIRU5USUNBVElPTiAtRENLX1NSUCAt RENLX0tFUkJFUk9TICAtREtSQjUgLURLUkI0IC1ES1JCNTI0IFwKLQktRENLX0NVUlNFUyAtRENL X1BPU0lYX1NJRyAtRFRDUFNPQ0tFVCAtRExJTlVYRlNTVE5EIC1ESEFWRV9DUllQVF9IIFwKLQkk KEs1SU5DKSAkKEs1SU5DKS9rcmI1ICQoU1JQSU5DKSBcCi0JJChLRkxBR1MpIiAiTE5LRkxBR1Mg PSAkKExOS0ZMQUdTKSIgXAotCSJMSUJTID0gJChTUlBMSUIpICQoSzVMSUIpIFwKLQktbG5jdXJz ZXMgLWx0ZXJtY2FwIC1sc3JwIC1sZ21wIC1sa3JiNCAtbGRlczQyNSAtbGtyYjUgLWxnc3NhcGlf a3JiNSBcCi0JLWxjb21fZXJyIC1sazVjcnlwdG8gLWxrcnlwdG8gLWxjcnlwdCAtbHJlc29sdiIK LQotbGludXgra3JiNStrcmI0K3NycCtwYW06Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgTGludXggb24gaTM4NiB3aXRoIFNSUC4uLicKLQkkKE1BS0UpIHhlcm1pdCBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAotCSJDRkxBR1Mg PSAtTyAtZnVuc2lnbmVkLWNoYXIgLXBpcGUgLURQT1NJWCAtRExJTlVYIC1ETk9DT1RGTUMgXAot CS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19TUlAgLURDS19LRVJCRVJPUyAgLURLUkI1IC1ES1JC NCAtREtSQjUyNCBcCi0JLURDS19FTkNSWVBUSU9OIC1EQ0tfQ0FTVCAtRENLX0RFUyAtRExJQkRF UyBcCi0JLURDS19DVVJTRVMgLURDS19QT1NJWF9TSUcgLURUQ1BTT0NLRVQgLURMSU5VWEZTU1RO RCAtREhBVkVfQ1JZUFRfSCBcCi0JLURDS19QQU0gJChLNUlOQykgJChLNUlOQykva3JiNSAkKFNS UElOQykgXAotCSQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gJChMTktGTEFHUykiIFwKLQkiTElCUyA9 ICQoU1JQTElCKSAkKEs1TElCKSBcCi0JLWxuY3Vyc2VzIC1sdGVybWNhcCAtbHNycCAtbGdtcCAt bGRlcyAtbGtyYjQgLWxkZXM0MjUgLWxrcmI1IFwKLQktbGNvbV9lcnIgLWxrNWNyeXB0byAtbGdz c2FwaV9rcmI1IC1sa3J5cHRvIC1sY3J5cHQgLWxwYW0gLWxkbCBcCi0JLWxyZXNvbHYiCi0KLSNM aW51eCBvbiBJbnRlbCBQQyB3aXRoIEN5Z251cyBvciBNSVQgS2VyYmVyb3MgNSAxLjIuMiwgU1JQ IGFuZCBTU0wvVExTLgotIyBhbmQgUEFNLgotIwotIyBsaWJzcnAuYSBzaG91bGQgYmUgYnVpbGQg d2l0aCBPcGVuU1NMCi0jIFJlcXVpcmVzIHRoZSBLZXJiZXJvcyAxLjIuMiBiZSBjb21waWxlZCB3 aXRoIEtSQjQgY29tcGF0aWJpbGl0eS4KLSMgSWYgeW91IGhhdmUgT3BlblNTTCAwLjkuNyBvciBs YXRlciwgYWRkIC1ET1BFTlNTTF8wOTcgdG8gS0ZMQUdTLgotbGludXgra3JiNStrcmI0K3NycCtv cGVuc3NsK3BhbS1kZWJ1ZzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBM aW51eCBvbiBpMzg2IHdpdGggS1JCLFNSUCxTU0wuLi4nCi0JJChNQUtFKSB4ZXJtaXQtZGVidWcg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIFwKLQkiQ0ZM QUdTID0gLWcgLU8gLWZ1bnNpZ25lZC1jaGFyIC1waXBlIC1EUE9TSVggLURMSU5VWCAtRE5PQ09U Rk1DIFwKLQktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1JQIC1EQ0tfS0VSQkVST1MgIC1ES1JC NSAtREtSQjQgLURLUkI1MjQgXAotCS1EQ0tfRU5DUllQVElPTiAtRENLX0NBU1QgLURDS19ERVMg LURMSUJERVMgLURDS19TU0wgLURDS19QQU0gXAotCS1EQ0tfQ1VSU0VTIC1EQ0tfUE9TSVhfU0lH IC1EVENQU09DS0VUIC1ETElOVVhGU1NUTkQgLURIQVZFX0NSWVBUX0ggXAotCS13IC1EbWFsbG9j PWRtYWxsb2MgLURmcmVlPWRmcmVlIC1ETURFQlVHICQoSzVJTkMpICQoSzVJTkMpL2tyYjUgXAot CSQoU1JQSU5DKSAkKFNTTElOQykgJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAkKExOS0ZMQUdTKSIg XAotCSJMSUJTID0gJChTUlBMSUIpICQoSzVMSUIpICQoU1NMTElCKSBcCi0JLWxuY3Vyc2VzIC1s dGVybWNhcCAtbHNycCAtbGtyYjQgLWxzc2wgLWxrcnlwdG8gLWxjcnlwdG8gXAotCS1sa3JiNSAt bGNvbV9lcnIgLWxrNWNyeXB0byAtbGdzc2FwaV9rcmI1IC1sY3J5cHQgLWxyZXNvbHYgLWxwYW0g LWxkbCIKLQotI0xpbnV4IG9uIEludGVsIFBDIHdpdGggQ3lnbnVzIG9yIE1JVCBLZXJiZXJvcyA1 IDEuMi4xLCBTUlAgYW5kIFNTTC9UTFMuCi0jIGFuZCBQQU0uCi0jCi0jIGxpYnNycC5hIHNob3Vs ZCBiZSBidWlsZCB3aXRoIE9wZW5TU0wKLSMgUmVxdWlyZXMgdGhlIEtlcmJlcm9zIDEuMi4yIGJl IGNvbXBpbGVkIHdpdGggS1JCNCBjb21wYXRpYmlsaXR5LgotIyBJZiB5b3UgaGF2ZSBPcGVuU1NM IDAuOS43IG9yIGxhdGVyLCBhZGQgLURPUEVOU1NMXzA5NyB0byBLRkxBR1MuCi1saW51eCtrcmI1 K2tyYjQrc3JwK29wZW5zc2wrcGFtOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIExpbnV4IG9uIGkzODYgd2l0aCBLUkIsU1JQLFNTTC4uLicKLQkkKE1BS0UpIHhlcm1pdCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAotCSJDRkxB R1MgPSAtZyAtTyAtZnVuc2lnbmVkLWNoYXIgLXBpcGUgLURQT1NJWCAtRExJTlVYIC1ETk9DT1RG TUMgXAotCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19TUlAgLURDS19LRVJCRVJPUyAgLURLUkI1 IC1ES1JCNCAtREtSQjUyNCBcCi0JLURDS19FTkNSWVBUSU9OIC1EQ0tfQ0FTVCAtRENLX0RFUyAt RExJQkRFUyAtRENLX1NTTCAtRENLX1BBTSBcCi0JLURDS19DVVJTRVMgLURDS19QT1NJWF9TSUcg LURUQ1BTT0NLRVQgLURMSU5VWEZTU1RORCAtREhBVkVfQ1JZUFRfSCBcCi0JJChLNUlOQykgJChL NUlOQykva3JiNSAkKFNSUElOQykgJChTU0xJTkMpIFwKLQkkKEtGTEFHUykiICJMTktGTEFHUyA9 ICQoTE5LRkxBR1MpIiBcCi0JIkxJQlMgPSAkKFNSUExJQikgJChLNUxJQikgJChTU0xMSUIpICBc Ci0JLWxtIC1sbmN1cnNlcyAtbHRlcm1jYXAgLWxzcnAgXAotCS1sa3JiNCAtbHNzbCAtbGtyeXB0 byAgLWxjcnlwdG8gLWxnc3NhcGlfa3JiNSBcCi0JLWxrcmI1IC1sY29tX2VyciAtbGs1Y3J5cHRv IC1sY3J5cHQgLWxyZXNvbHYgLWxwYW0gLWxkbCIKLQotI0xpbnV4IG9uIEludGVsIFBDIHdpdGgg Q3lnbnVzIG9yIE1JVCBLZXJiZXJvcyA1IDEuMi4yLCBTUlAsIE9wZW5TU0wKLSMgd2l0aCBaTElC IGFuZCBQQU0KLSMKLSMgbGlic3JwLmEgc2hvdWxkIGJlIGJ1aWxkIHdpdGggT3BlblNTTAotIyBS ZXF1aXJlcyB0aGUgS2VyYmVyb3MgMS4yLjIgYmUgY29tcGlsZWQgd2l0aCBLUkI0IGNvbXBhdGli aWxpdHkuCi0jIElmIHlvdSBoYXZlIE9wZW5TU0wgMC45Ljcgb3IgbGF0ZXIsIGFkZCAtRE9QRU5T U0xfMDk3IHRvIEtGTEFHUy4KLWxpbnV4K2tyYjUra3JiNCtzcnArb3BlbnNzbCt6bGliK3BhbToK LQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBMaW51eCBvbiBpMzg2IHdpdGgg S1JCLFNSUCxTU0wuLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSAiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIFwKLQkiQ0ZMQUdTID0gLWcgLU8gLWZ1bnNpZ25lZC1j aGFyIC1waXBlIC1EUE9TSVggLURMSU5VWCAtRE5PQ09URk1DIFwKLQktRENLX0FVVEhFTlRJQ0FU SU9OIC1EQ0tfU1JQIC1EQ0tfS0VSQkVST1MgIC1ES1JCNSAtREtSQjQgLURLUkI1MjQgXAotCS1E Q0tfRU5DUllQVElPTiAtRENLX0NBU1QgLURDS19ERVMgLURMSUJERVMgLURDS19TU0wgLURDS19Q QU0gLURaTElCIFwKLQktRENLX0NVUlNFUyAtRENLX1BPU0lYX1NJRyAtRFRDUFNPQ0tFVCAtRExJ TlVYRlNTVE5EIC1ESEFWRV9DUllQVF9IIFwKLQkkKEs1SU5DKSAkKEs1SU5DKS9rcmI1ICQoU1JQ SU5DKSAkKFNTTElOQykgXAotCSQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gJChMTktGTEFHUykiIFwK LQkiTElCUyA9ICQoU1JQTElCKSAkKEs1TElCKSAkKFNTTExJQikgXAotCS1sbSAtbG5jdXJzZXMg LWx0ZXJtY2FwIC1sc3JwIFwKLQktbGtyYjQgLWxzc2wgLWxrcnlwdG8gIC1sY3J5cHRvIC1sZ3Nz YXBpX2tyYjUgXAotCS1sa3JiNSAtbGNvbV9lcnIgLWxrNWNyeXB0byAtbGNyeXB0IC1scmVzb2x2 IC1scGFtIC1sZGwgLWx6IgotCi0jTGludXggb24gSW50ZWwgUEMgd2l0aCBDeWdudXMgb3IgTUlU IEtlcmJlcm9zIDUgMS4yLjIsIFNSUCwgT3BlblNTTAotIyB3aXRoIFpMSUIsIFNoYWRvdyBQYXNz d29yZHMsIGFuZCBQQU0KLSMKLSMgbGlic3JwLmEgc2hvdWxkIGJlIGJ1aWxkIHdpdGggT3BlblNT TAotIyBSZXF1aXJlcyB0aGUgS2VyYmVyb3MgMS4yLjIgYmUgY29tcGlsZWQgd2l0aCBLUkI0IGNv bXBhdGliaWxpdHkuCi0jIElmIHlvdSBoYXZlIE9wZW5TU0wgMC45Ljcgb3IgbGF0ZXIsIGFkZCAt RE9QRU5TU0xfMDk3IHRvIEtGTEFHUy4KLWxpbnV4K2tyYjUra3JiNCtzcnArb3BlbnNzbCt6bGli K3NoYWRvdytwYW06Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTGludXgg b24gaTM4NiB3aXRoIEtSQixTUlAsU1NMLi4uJwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gIkNDID0gZ2NjIiAiQ0MyID0gZ2NjIiBcCi0JIkNGTEFHUyA9IC1nIC1P IC1mdW5zaWduZWQtY2hhciAtcGlwZSAtRFBPU0lYIC1ETElOVVggLUROT0NPVEZNQyBcCi0JLURD S19BVVRIRU5USUNBVElPTiAtRENLX1NSUCAtRENLX0tFUkJFUk9TICAtREtSQjUgLURLUkI0IC1E S1JCNTI0IFwKLQktRENLX0VOQ1JZUFRJT04gLURDS19DQVNUIC1EQ0tfREVTIC1ETElCREVTIC1E Q0tfU1NMIC1EQ0tfUEFNIC1EWkxJQiBcCi0JLURDS19DVVJTRVMgLURDS19QT1NJWF9TSUcgLURU Q1BTT0NLRVQgLURMSU5VWEZTU1RORCAtREhBVkVfQ1JZUFRfSCBcCi0JLURDS19TSEFET1cgJChL NUlOQykgJChLNUlOQykva3JiNSAkKFNSUElOQykgJChTU0xJTkMpIFwKLQkkKEtGTEFHUykiICJM TktGTEFHUyA9ICQoTE5LRkxBR1MpIiBcCi0JIkxJQlMgPSAkKFNSUExJQikgJChLNUxJQikgJChT U0xMSUIpIFwKLQktbG0gLWxuY3Vyc2VzIC1sdGVybWNhcCAtbHNycCAtbGtyeXB0byBcCi0JLWxr cmI0IC1sc3NsIC1sY3J5cHRvIC1sZ3NzYXBpX2tyYjUgXAotCS1sa3JiNSAtbGNvbV9lcnIgLWxr NWNyeXB0byAtbGNyeXB0IC1scmVzb2x2IC1scGFtIC1sZGwgLWx6IgotCi0jTGludXggb24gSW50 ZWwgUEMgd2l0aCBDeWdudXMgb3IgTUlUIEtlcmJlcm9zIDUgMS4yLjIsIE9wZW5TU0wKLSMgd2l0 aCBTaGFkb3cgUGFzc3dvcmRzLCBQQU0KLSMKLSMgUmVxdWlyZXMgdGhlIEtlcmJlcm9zIDEuMi4y IGJlIGNvbXBpbGVkIHdpdGggS1JCNCBjb21wYXRpYmlsaXR5LgotbGludXgra3JiNStrcmI0K29w ZW5zc2wrc2hhZG93K3BhbToKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBM aW51eCBvbiBpMzg2IHdpdGggS1JCLFNTTCwuLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIFwKLQkiQ0ZMQUdTID0gLWcg LU8gLWZ1bnNpZ25lZC1jaGFyIC1waXBlIC1EUE9TSVggLURMSU5VWCAtRE5PQ09URk1DIFwKLQkt RENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfS0VSQkVST1MgIC1ES1JCNSAtREtSQjQgLURLUkI1MjQg XAotCS1EQ0tfRU5DUllQVElPTiAtRENLX0NBU1QgLURDS19ERVMgLURMSUJERVMgLURDS19TU0wg LURDS19QQU0gXAotCS1EQ0tfQ1VSU0VTIC1EQ0tfUE9TSVhfU0lHIC1EVENQU09DS0VUIC1ETElO VVhGU1NUTkQgLURIQVZFX0NSWVBUX0ggXAotCS1EQ0tfU0hBRE9XICQoSzVJTkMpICQoSzVJTkMp L2tyYjUgJChTU0xJTkMpIFwKLQkkKEtGTEFHUykiICJMTktGTEFHUyA9ICQoTE5LRkxBR1MpIiBc Ci0JIkxJQlMgPSAkKEs1TElCKSAkKFNTTExJQikgXAotCS1sbSAtbG5jdXJzZXMgLWx0ZXJtY2Fw IFwKLQktbGtyYjQgLWxzc2wgLWxjcnlwdG8gLWxnc3NhcGlfa3JiNSBcCi0JLWxrcmI1IC1sY29t X2VyciAtbGs1Y3J5cHRvIC1sY3J5cHQgLWxyZXNvbHYgLWxwYW0gLWxkbCIKLQotI0xpbnV4IG9u IEludGVsIFBDIHdpdGggQ3lnbnVzIG9yIE1JVCBLZXJiZXJvcyA1IDEuMi4yLCBPcGVuU1NMCi0j IHdpdGggWkxJQiwgU2hhZG93IFBhc3N3b3JkcywgUEFNCi0jCi0jIGxpYnNycC5hIHNob3VsZCBi ZSBidWlsZCB3aXRoIE9wZW5TU0wKLSMgUmVxdWlyZXMgdGhlIEtlcmJlcm9zIDEuMi4yIGJlIGNv bXBpbGVkIHdpdGggS1JCNCBjb21wYXRpYmlsaXR5LgotIyBJZiB5b3UgaGF2ZSBPcGVuU1NMIDAu OS43IG9yIGxhdGVyLCBhZGQgLURPUEVOU1NMXzA5NyB0byBLRkxBR1MuCi1saW51eCtrcmI1K2ty YjQrb3BlbnNzbCt6bGliK3NoYWRvdytwYW06Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgTGludXggb24gaTM4NiB3aXRoIEtSQixTUlAsU1NMLi4uJwotCSQoTUFLRSkgeGVy bWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDID0gZ2NjIiAiQ0MyID0gZ2NjIiBcCi0J IkNGTEFHUyA9IC1nIC1PIC1mdW5zaWduZWQtY2hhciAtcGlwZSAtRFBPU0lYIC1ETElOVVggLURO T0NPVEZNQyBcCi0JLURDS19BVVRIRU5USUNBVElPTiAtRENLX0tFUkJFUk9TICAtREtSQjUgLURL UkI0IC1ES1JCNTI0IFwKLQktRENLX0VOQ1JZUFRJT04gLURDS19DQVNUIC1EQ0tfREVTIC1ETElC REVTIC1EQ0tfU1NMIC1EQ0tfUEFNIC1EWkxJQiBcCi0JLURDS19DVVJTRVMgLURDS19QT1NJWF9T SUcgLURUQ1BTT0NLRVQgLURMSU5VWEZTU1RORCAtREhBVkVfQ1JZUFRfSCBcCi0JLURDS19TSEFE T1cgJChLNUlOQykgJChLNUlOQykva3JiNSAkKFNTTElOQykgXAotCSQoS0ZMQUdTKSIgIkxOS0ZM QUdTID0gJChMTktGTEFHUykiIFwKLQkiTElCUyA9ICQoSzVMSUIpICQoU1NMTElCKSBcCi0JLWxt IC1sbmN1cnNlcyAtbHRlcm1jYXAgXAotCS1sa3JiNCAtbHNzbCAtbGNyeXB0byAtbGdzc2FwaV9r cmI1IFwKLQktbGtyYjUgLWxjb21fZXJyIC1sazVjcnlwdG8gLWxjcnlwdCAtbHJlc29sdiAtbHBh bSAtbGRsIC1seiIKLQotI1JlZCBIYXQgOSAtIGZ1bGwgaW5zdGFsbCBpbmNsdWRlcyBLZXJiZXJv cyA1ICg0IGNvbXBhdCksIFBBTSwgU1NMLgotI0Fsc28gd29ya3MgYXJvdW5kIGJ1ZyBpbiBjdXJz ZXMgaW4gd2hpY2ggdGVybWluYWwgZ29lcyBkZWFkIGFmdGVyCi0jcmV0dXJuaW5nIGZyb20gZmls ZS10cmFuc2ZlciBkaXNwbGF5LiAgQXNzdW1lcyBPcGVuU1NMIDAuOS43IG9yIGxhdGVyLgotcmVk aGF0OToKLQlAZWNobyAiQnVpbGRpbmcgU0VDVVJFIEtlcm1pdCBmb3IgUmVkIEhhdCA5LjAuLi4i Ci0JJChNQUtFKSBsaW51eCtrcmI1K2tyYjQrb3BlbnNzbCt6bGliK3NoYWRvdytwYW0gXAotCUtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIktGTEFHUyA9IC1EUkg5MCAtRE9QRU5TU0xfMDk3ICQo S0ZMQUdTKSIKLQotI0RpdHRvIHBsdXMgU1JQICh3aGljaCBpcyBub3Qgbm9ybWFsbHkgaW5jbHVk ZWQgd2l0aCBSSCBMaW51eCkuCi1yZWRoYXQ5K3NycDoKLQlAZWNobyAiQnVpbGRpbmcgU0VDVVJF IEtlcm1pdCBmb3IgUmVkIEhhdCA5LjAuLi4iCi0JJChNQUtFKSBsaW51eCtrcmI1K2tyYjQrc3Jw K29wZW5zc2wremxpYitzaGFkb3crcGFtIFwKLQlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJL RkxBR1MgPSAtRFJIOTAgLURPUEVOU1NMXzA5NyAkKEtGTEFHUykiCi0KLSNGb3IgUmVkIEhhdCBB UyAyLjEgd2l0aCBPcGVuU1NMCi1yZWRoYXQyMStzc2w6Ci0JQGVjaG8gIkJ1aWxkaW5nIFNFQ1VS RSBLZXJtaXQgZm9yIFJlZCBIYXQgMi4xLi4uIgotCSQoTUFLRSkgbGludXgrb3BlbnNzbCt6bGli K3NoYWRvdytwYW0gXAotCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIktGTEFHUyA9ICAkKEtG TEFHUykiCi0KLSNSZWQgSGF0IExpbnV4IDguMCAtIGZ1bGwgaW5zdGFsbCBpbmNsdWRlcyBLZXJi ZXJvcyA1ICg0IGNvbXBhdCksIFBBTSwgU1NMLgotI0Fsc28gd29ya3MgYXJvdW5kIGJ1ZyBpbiBj dXJzZXMgaW4gd2hpY2ggdGVybWluYWwgZ29lcyBkZWFkIGFmdGVyCi0jcmV0dXJuaW5nIGZyb20g ZmlsZS10cmFuc2ZlciBkaXNwbGF5LgotcmVkaGF0ODA6Ci0JQGVjaG8gIkJ1aWxkaW5nIFNFQ1VS RSBLZXJtaXQgZm9yIFJlZCBIYXQgOC4wLi4uIgotCSQoTUFLRSkgbGludXgra3JiNStrcmI0K29w ZW5zc2wremxpYitzaGFkb3crcGFtIFwKLQlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJLRkxB R1MgPSAtRFJIODAgJChLRkxBR1MpIgotCi1yZWRoYXQ4MCtzcnA6Ci0JQGVjaG8gIkJ1aWxkaW5n IFNFQ1VSRSBLZXJtaXQgZm9yIFJlZCBIYXQgOC4wLi4uIgotCSQoTUFLRSkgbGludXgra3JiNStr cmI0K3NycCtvcGVuc3NsK3psaWIrc2hhZG93K3BhbSBcCi0JS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSAiS0ZMQUdTID0gLURSSDgwICQoS0ZMQUdTKSIKLQotI1JlZCBIYXQgTGludXggNy4zIC0g ZnVsbCBpbnN0YWxsIGluY2x1ZGVzIEtlcmJlcm9zIDUgKDQgY29tcGF0KSwgUEFNLCBTU0wuCi0j QWxzbyB3b3JrcyBhcm91bmQgYnVnIGluIGN1cnNlcyBpbiB3aGljaCB0ZXJtaW5hbCBnb2VzIGRl YWQgYWZ0ZXIKLSNyZXR1cm5pbmcgZnJvbSBmaWxlLXRyYW5zZmVyIGRpc3BsYXkuCi1yZWRoYXQ3 MzoKLQlAZWNobyAiQnVpbGRpbmcgU0VDVVJFIEtlcm1pdCBmb3IgUmVkIEhhdCA3LjMuLi4iCi0J JChNQUtFKSBsaW51eCtrcmI1K2tyYjQrb3BlbnNzbCt6bGliK3NoYWRvdytwYW0gXAotCUtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gIktGTEFHUyA9IC1EUkg3MyAkKEtGTEFHUykiCi0KLXJlZGhh dDczK3NycDoKLQlAZWNobyAiQnVpbGRpbmcgU0VDVVJFIEtlcm1pdCBmb3IgUmVkIEhhdCA3LjMu Li4iCi0JJChNQUtFKSBsaW51eCtrcmI1K2tyYjQrc3JwK29wZW5zc2wremxpYitzaGFkb3crcGFt IFwKLQlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJLRkxBR1MgPSAtRFJINzMgJChLRkxBR1Mp IgotCi0jUmVkIEhhdCBMaW51eCA3LjIgLSBmdWxsIGluc3RhbGwgaW5jbHVkZXMgS2VyYmVyb3Mg NSAoNCBjb21wYXQpLCBQQU0sIFNTTC4KLSNBbHNvIHdvcmtzIGFyb3VuZCBidWcgaW4gY3Vyc2Vz IGluIHdoaWNoIHRlcm1pbmFsIGdvZXMgZGVhZCBhZnRlcgotI3JldHVybmluZyBmcm9tIGZpbGUt dHJhbnNmZXIgZGlzcGxheS4KLXJlZGhhdDcyOgotCUBlY2hvICJCdWlsZGluZyBTRUNVUkUgS2Vy bWl0IGZvciBSZWQgSGF0IDcuMi4uLiIKLQkkKE1BS0UpIGxpbnV4K2tyYjUra3JiNCtvcGVuc3Ns K3psaWIrc2hhZG93K3BhbSBcCi0JS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiS0ZMQUdTID0g LURSSDcyICQoS0ZMQUdTKSIKLQotcmVkaGF0NzIrc3JwOgotCUBlY2hvICJCdWlsZGluZyBTRUNV UkUgS2VybWl0IGZvciBSZWQgSGF0IDcuMi4uLiIKLQkkKE1BS0UpIGxpbnV4K2tyYjUra3JiNCtz cnArb3BlbnNzbCt6bGliK3NoYWRvdytwYW0gXAotCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g IktGTEFHUyA9IC1EUkg3MiAkKEtGTEFHUykiCi0KLSNSZWQgSGF0IExpbnV4IDcuMSAtIGZ1bGwg aW5zdGFsbCBpbmNsdWRlcyBLZXJiZXJvcyA1ICg0IGNvbXBhdCksIFBBTSwgU1NMLgotI0Fsc28g d29ya3MgYXJvdW5kIGJ1ZyBpbiBjdXJzZXMgaW4gd2hpY2ggdGVybWluYWwgZ29lcyBkZWFkIGFm dGVyCi0jcmV0dXJuaW5nIGZyb20gZmlsZS10cmFuc2ZlciBkaXNwbGF5LgotcmVkaGF0NzE6Ci0J QGVjaG8gIkJ1aWxkaW5nIFNFQ1VSRSBLZXJtaXQgZm9yIFJlZCBIYXQgNy4xLi4uIgotCSQoTUFL RSkgbGludXgra3JiNStrcmI0K29wZW5zc2wremxpYitzaGFkb3crcGFtIFwKLQlLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9ICJLRkxBR1MgPSAtRFJINzEgJChLRkxBR1MpIgotCi1yZWRoYXQ3MStz cnA6Ci0JQGVjaG8gIkJ1aWxkaW5nIFNFQ1VSRSBLZXJtaXQgZm9yIFJlZCBIYXQgNy4xLi4uIgot CSQoTUFLRSkgbGludXgra3JiNStrcmI0K3NycCtvcGVuc3NsK3psaWIrc2hhZG93K3BhbSBcCi0J S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiS0ZMQUdTID0gLURSSDcxICQoS0ZMQUdTKSIKLQot I0xpbnV4IG9uIEludGVsIFBDIHdpdGggQ3lnbnVzIG9yIE1JVCBLZXJiZXJvcyA1IDEuMi4yLCBP cGVuU1NMCi0jIHdpdGggWkxJQiBhbmQgUEFNIGFuZCBTaGFkb3cgcGFzc3dvcmRzCi1saW51eCtr cmI1K29wZW5zc2wremxpYitzaGFkb3crcGFtOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIExpbnV4IG9uIGkzODYgd2l0aCBLUkI1LFNTTC4uLicKLQkkKE1BS0UpIHhlcm1p dCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAotCSJD RkxBR1MgPSAtZyAtTyAtZnVuc2lnbmVkLWNoYXIgLXBpcGUgLURQT1NJWCAtRExJTlVYIC1ETk9D T1RGTUMgXAotCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19LRVJCRVJPUyAgLURLUkI1IC1EQ0tf U0hBRE9XIC1ESEFWRV9QVE1YIFwKLQktRENLX0VOQ1JZUFRJT04gLURDS19DQVNUIC1EQ0tfREVT IC1ETElCREVTIC1EQ0tfU1NMIC1EQ0tfUEFNIC1EWkxJQiBcCi0JLURDS19DVVJTRVMgLURDS19Q T1NJWF9TSUcgLURUQ1BTT0NLRVQgLURMSU5VWEZTU1RORCAtREhBVkVfQ1JZUFRfSCBcCi0JJChL NUlOQykgJChLNUlOQykva3JiNSAkKFNTTElOQykgXAotCSQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0g JChMTktGTEFHUykiIFwKLQkiTElCUyA9ICQoSzVMSUIpICQoU1NMTElCKSBcCi0JLWxtIC1sbmN1 cnNlcyAtbHRlcm1jYXAgLWxzc2wgLWxjcnlwdG8gLWxnc3NhcGlfa3JiNSBcCi0JLWxrcmI1IC1s Y29tX2VyciAtbGs1Y3J5cHRvIC1sY3J5cHQgLWxyZXNvbHYgLWxwYW0gLWxkbCAtbHoiCi0KLWxp bnV4bm90Y3A6Ci0JJChNQUtFKSBsaW51eCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJLRkxB R1MgPSAtRE5PTkVUICQoS0ZMQUdTKSIKLQotIyAibWFrZSBsaW51eG5vdGNwIiB3aXRoIGxjYyAo c2VlIGh0dHA6Ly93d3cuY3MucHJpbmNldG9uLmVkdS9zb2Z0d2FyZS9sY2MpCi0jIGxjYyBkb2Vz IG5vdCB1bmRlcnN0YW5kIHZhcmlvdXMgZ2NjIGV4dGVuc2lvbnM6Ci0jICAiX19pbmxpbmVfXyIg LS0gY2FuIGJlIGVsaW1pbmF0ZWQgYnkgYWRkaW5nICItRF9faW5saW5lX189IgotIyAgIl9fYXNt X18gYW5kICJsb25nIGxvbmciIC0tIGluIGhlYWRlciBmaWxlcywgc2hvdWxkIGJlIHN1cnJvdW5k ZWQgYnkKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2lmbmRlZihfX1NUUklDVF9B TlNJX18pIi8iI2VuZGlmIgotIyAgaG93ZXZlciwgVENQIHJlcXVpcmVzIHNvbWUgX19hc21fXyBm dW5jdGlvbnMsIHNvIGNhbm5vdCBiZSBjb21waWxlZAotbGludXhub3RjcC1sY2M6Ci0JQGVjaG8g J01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTGludXggd2l0aCBsY2MgLi4uJwotCUBlY2hv ICdSZWFkIGNvbW1lbnRzIGluIG1ha2VmaWxlIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLicK LQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGxjYyIgIkND MiA9IGxjYyIgXAotCSJDRkxBR1MgPSAtRExJTlVYIC1EUE9TSVggLURDS19DVVJTRVMgLURDS19Q T1NJWF9TSUcgXAotCS1VVENQU09DS0VUIC1ETElOVVhGU1NUTkQgLUROT0xFQVJOICQoS0ZMQUdT KSIgXAotCSJMTktGTEFHUyA9ICQoTE5LRkxBR1MpIiAiTElCUyA9IC1sY3Vyc2VzIC1sdGVybWNh cCIKLQotIyBMaW51eCAwLjk5LjE0IHRocnUgMS4wIHdpdGggZ2NjLCBkeW5hbWljIGxpYnJhcmll cywgY3Vyc2VzLCBUQ1AvSVAuCi0jIEZvciBMaW51eCAxLjIgb3IgbGF0ZXIsIHVzZSAibWFrZSBs aW51eCIgKGFib3ZlKS4KLSMKLSMgLURMSU5VWEZTU1RORCAoTGludXggRmlsZSBTeXN0ZW0gU3Rh bmRhcmQpIGdpdmVzIFVVQ1AgbG9ja2ZpbGUgL3Zhci9sb2NrIHdpdGgKLSMgc3RyaW5nIHBpZC4g IFJlbW92ZSB0aGlzIGFuZCBnZXQgL3Vzci9zcG9vbC91dWNwIHdpdGggaW50IHBpZCwgd2hpY2gg d2FzIHVzZWQKLSMgaW4gZWFybHkgTGludXggdmVyc2lvbnMuCi0jCi0jIElmIHlvdSBnZXQgY29t cGlsZXIgZXJyb3JzIHJlZ2FyZGluZyA8bGludXgvc2VyaWFsLmg+LCBhZGQgLUROT0hJU1BFRUQu Ci0jCi0jIC1EQ0tfUE9TSVhfU0lHIChQT1NJWCBzaWduYWwgaGFuZGxpbmcpIGlzIGdvb2QgZm9y IExpbnV4IHJlbGVhc2VzIGJhY2sgdG8gYXQKLSMgbGVhc3QgMC45OS4xNDsgaWYgaXQgY2F1c2Vz IHRyb3VibGUgZm9yIHlvdSwganVzdCByZW1vdmUgaXQuCi0jCi0jIC1EQ0tfQ1VSU0VTOiBIZXJl IHdlIGxpbmsgd2l0aCB0aGUgcmVndWxhciBjdXJzZXMgbGlicmFyeS4gIEJ1dCB5b3Ugc2hvdWxk Ci0jIGJlIHVzaW5nIG5jdXJzZXMuICBJbnRlcm5hbGx5LCB0aGUgY2t1dXN4LmMgbW9kdWxlIGlu Y2x1ZGVzIDxjdXJzZXMuaD4sIGJ1dAotIyB0aGlzIHJlYWxseSBzaG91bGQgYmUgPG5jdXJzZXMu aD4uICBUaHVzIGlmIHlvdSBoYXZlIHRoZSBuZXcgY3Vyc2VzCi0jIG1hdGVyaWFsLCB5b3Ugc2hv dWxkIGVpdGhlciBpbnN0YWxsIGl0IHdpdGggdGhlIHN0YW5kYXJkIG5hbWVzLCBvciBlbHNlCi0j IGNyZWF0ZSBzeW1ib2xpYyBsaW5rcyBmcm9tIHRoZSBzdGFuZGFyZCBuYW1lcyB0byB0aGUgbmV3 IG9uZXMuICBJZiB5b3UgZ2V0Ci0jIGNvbXBpbGUtdGltZSBlcnJvcnMgY29tcGxhaW5pbmcgYWJv dXQgZGF0YSBkZWZpbml0aW9ucyBpbiB0ZXJtY2FwLmgsIGl0Ci0jIG1lYW5zIHlvdSBoYXZlIG5l dyBrZXJuZWwgbWF0ZXJpYWwgbWl4ZWQgd2l0aCBvbGRlciBsaWJjIGhlYWRlciBmaWxlcy4gIFRv Ci0jIGZpeCwgYWRkICIjaW5jbHVkZSA8dGVybWlvcy5oPiIgdG8gdGhlIDx0ZXJtY2FwLmg+IGZp bGUuICBPciBpZiBhbGwgdGhpcyBpcwotIyB0b28gY29uZnVzaW5nLCBjcmVhdGUgYSBuZXcgbWFr ZWZpbGUgZW50cnkgYmFzZWQgb24gdGhpcyBvbmUsIGJ1dCB3aXRoCi0jIC1EQ0tfQ1VSU0VTIHJl bW92ZWQgZnJvbSBDRkxBR1MgYW5kIHRoZSBlbnRpcmUgTElCUz0gY2xhdXNlIHJlbW92ZWQuCi0j Ci0jIEJ1dCB3YWl0LCB0aGVyZSdzIG1vcmUuICBPbiBtb3N0IExpbnV4IHN5c3RlbXMsIC1sdGVy bWNhcCBtdXN0IGJlIGluY2x1ZGVkCi0jIGluIExJQlMuICBCdXQgb24gb3RoZXJzLCB0aGUgbGlu a2VyIGNvbXBsYWlucyB0aGF0IGxpYnRlcm1jYXAgY2FuJ3QgYmUKLSMgZm91bmQuICBJbiB0aGF0 IGNhc2UsIHRyeSByZW1vdmluZyAtbHRlcm1jYXAgZnJvbSBMSUJTPS4KLSMKLSMgQnV0IHdhaXQs IHRoZXJlJ3MgbW9yZS4gIFRoZSBmb3JtYXQgb2YgdGhlIFBJRCBzdHJpbmcgaW4gdGhlIFVVQ1Ag bG9ja2ZpbGUKLSMgY2hhbmdlZCBiZXR3ZWVuIExpbnV4IEZTU1RORCAxLjAgYW5kIDEuMi4gIElu IHRoZSBlYXJsaWVyIHN0YW5kYXJkLCBpdCBoYWQKLSMgbGVhZGluZyB6ZXJvczsgaW4gdGhlIHNl Y29uZCwgaXQgaGFzIGxlYWRpbmcgc3BhY2VzLiAgQnkgZGVmYXVsdCB0aGlzIGVudHJ5Ci0jIHVz ZXMgdGhlIG5ld2VyIHN0YW5kYXJkLiAgVG8gZm9yY2UgdGhlIG9sZGVyIG9uZSwgYWRkIC1ERlNT VE5EMTAuCi0jCi0jICJUaGUgbmljZSB0aGluZyBhYm91dCB0aGUgTGludXggc3RhbmRhcmQgaXMg dGhlcmUgYXJlIHNvIG1hbnkgdG8gY2hvb3NlIGZyb20iCi0jCi0jIE5PVEU6IFJlbW92ZSAtREJJ R0JVRk9LIGZvciBzbWFsbC1tZW1vcnkgb3IgbGltaXRlZC1yZXNvdXJjZSBzeXN0ZW1zLgotbGlu dXgxMDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBMaW51eCAxLjAgb3Ig ZWFybGllci4uLicKLQlAZWNobyAnSU1QT1JUQU5UOiBSZWFkIHRoZSBjb21tZW50cyBpbiB0aGUg bGludXggc2VjdGlvbiBvZiB0aGUnCi0JQGVjaG8gJ21ha2VmaWxlIGlmIHlvdSBnZXQgY29tcGls YXRpb24gb3IgbGluayBlcnJvcnMuJwotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gIkNDID0gZ2NjIiAiQ0MyID0gZ2NjIiBcCi0JIkNGTEFHUyA9IC1PIC1EUE9TSVgg LURDS19DVVJTRVMgLURDS19QT1NJWF9TSUcgLURMSU5VWCBcCi0JLURUQ1BTT0NLRVQgLURMSU5V WEZTU1RORCAtRE9MSU5VWEhJU1BFRUQgLUROT0xFQVJOICQoS0ZMQUdTKSIgXAotCSJMTktGTEFH UyA9ICQoTE5LRkxBR1MpIiAiTElCUyA9IC1sY3Vyc2VzIC1sdGVybWNhcCIKLQotI1RoaXMgdmVy c2lvbiB3YXMgdXNlZCBmb3IgTGludXggcHJpb3IgdG8gQy1LZXJtaXQgNi4wLjE5Mi4KLSNOb3cg dGhlICJMaW51eCBGaWxlIFN5c3RlbSBTdGFuZGFyZCIgaXMgY29uc2lkZXJlZCBzdGFuZGFyZCwg ZGl0dG8gVENQL0lQLgotbGludXhvbGQ6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVS KSBmb3IgTGludXguLi4nCi0JQGVjaG8gJ0ZvciBGU1NUTkQtcmVjb21tZW5kZWQgVVVDUCBsb2Nr ZmlsZXMsIHVzZTonCi0JQGVjaG8gJyAgbWFrZSBsaW51eCAiS0ZMQUdTPS1ETElOVVhGU1NUTkQi LicKLQlAZWNobyAnUmVhZCBjb21tZW50cyBpbiBtYWtlZmlsZSBmb3IgYWRkaXRpb25hbCBvcHRp b25zLicKLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdj YyIgIkNDMiA9IGdjYyIgXAotCSJDRkxBR1MgPSAtTyAtRExJTlVYIC1EUE9TSVggLURDS19DVVJT RVMgLURDS19QT1NJWF9TSUcgLUROT0xFQVJOIFwKLQkkKEtGTEFHUykiICJMTktGTEFHUyA9ICQo TE5LRkxBR1MpIiAiTElCUyA9IC1sY3Vyc2VzIC1sdGVybWNhcCIKLQotIyA6OkVORF9PTERfTElO VVhfVEFSR0VUUzo6Ci0KLSMgTHlueE9TIDIuMiB3aXRoIEdDQyBjb21waWxlciwgVENQL0lQIGFu ZCBmdWxsc2NyZWVuIGRpc3BsYXkuCi0jIFByb2JhYmx5IGFsc28gd29ya3Mgd2l0aCBMeW54IDIu MSwgYW5kIG1heWJlIGV2ZW4gTHlueCAyLjAuCi0jIC1YIG1lYW5zIHVzZSB0ZXJtaW9zIHNlcmlh bCBkcml2ZXJzIHJhdGhlciB0aGFuIEJTRDQuMy1zdHlsZSBzZ3R0eSBkcml2ZXJzLgotIyBJZiB5 b3UgaGF2ZSB0cm91YmxlIHdpdGggdGhpcywgdHJ5ICJtYWtlIGJzZCBLRkxBR1M9LUROT0ZEWkVS TyIuCi1seW54OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEx5bnhPUyAy LjIgd2l0aCBUQ1AvSVAnCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSAiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIFwKLQkiQ0ZMQUdTPSAtTyAtRFBPU0lYIC1ERElSRU5U IC1EU0VUUkVVSUQgLURDS19DVVJTRVMgLURUQ1BTT0NLRVQgXAotCS1EQ0tfQU5TSUMgLURMWU5Y T1MgLUROT0xFQVJOIiAiTE5LRkxBR1MgPSAtWCIgIkxJQlMgPSAtbGN1cnNlcyAtbGJzZCIKLQot bHlueDIyOgotCSQoTUFLRSkgbHlueCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJLRkxBR1M9 JChLRkxBR1MpIgotCi0jIEx5bnhPUyAyLjEgd2l0aCBHQ0MgY29tcGlsZXIgMS40MCBhbmQgVENQ L0lQLgotbHlueDIxOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEx5bnhP UyAyLjEgd2l0aCBUQ1AvSVAnCi0JJChNQUtFKSBrZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSAiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIFwKLQkiQ0ZMQUdTPSAtTyAtRFNFVFJFVUlEIC1E VENQU09DS0VUIC1EQ0tfQU5TSUMgLURCU0Q0IC1ETFlOWE9TIiBcCi0JIkxJQlMgPSAtbGJzZCIK LQotI1NDTyBYZW5peCAyLjIuMSBmb3IgSUJNIFBDLCBYVCwgUFMyLzMwLCBvciBvdGhlciA4MDg4 IG9yIDgwODYgbWFjaGluZQotI1Nob3VsZCB0aGlzIG5vdCB3b3JrLCB0cnkgc29tZSBvZiB0aGUg dHJpY2tzIGZyb20gc2NvMjg2LgotI05PVEU6IC1EUkVOQU1FIGlzIG9taXR0ZWQgZm9yIGVhcmx5 IFNDTyBYZW5peCByZWxlYXNlcyBiZWNhdXNlIGl0IGRpZG4ndAotI2V4aXN0LCBvciBpdHMgc2Vt YW50aWNzIHdlcmUgZGlmZmVyZW50IGZyb20gdGhlIGxhdGVyIFBPU0lYLWNvbXBsaWFudAotI3Zl cnNpb24gb2YgcmVuYW1lKCkuCi1zY284NjoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tW RVIpIGZvciBTQ08gWGVuaXgvODYuLi4nCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURYRU5JWCAtRE5PRklMRUggLUROT0lLU0QgLUROT1VO SUNPREUgLUROT0xFQVJOIFwKLQkkKEtGTEFHUykgLUR1bml4IC1GIDMwMDAgLWkgLU0wbWUiIFwK LQkiTE5LRkxBR1MgPSAtRiAzMDAwIC1pIC1zIC1NMG1lIiAiTElCUyA9IC1seCIKLQotI1NDTyBY ZW5peC8yODYgMi4yLjEsIGUuZy4gZm9yIElCTSBQQy9BVCwgUFMvMiBNb2RlbCA1MCwgZXRjLgot I1JlcG9ydGVkbHksIHRoaXMgIm1ha2UiIGNhbiBmYWlsIHNpbXBseSBiZWNhdXNlIG9mIHRoZSBz aXplIG9mIHRoaXMKLSNtYWtlZmlsZS4gIElmIHRoYXQgaGFwcGVucywgdXNlICJtYWtlTCIsIG9y IGVkaXQgb3V0IHNvbWUgb2YgdGhlCi0jb3RoZXIgZW50cmllcy4gIE5vIGRlYnVnZ2luZyBvciBj aGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uLgotc2NvMjg2OgotCUBlY2hvICdNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIFNDTyBYZW5peC8yODYuLi4nCi0JQGVjaG8gJ0lmIG1ha2UgZmFpbHMs IHRyeSB1c2luZyBtYWtlTC4nCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCi0JIkNGTEFHUz0gLXhlbml4IC1zIC1PIC1MQVJHRSAtRFhFTklYIC1ETk9GSUxFSCAt RHVuaXggLURSRENISyAtRE5BUCBcCi0JLUROT0lLU0QgLUROT0RFQlVHIC1ETk9UTE9HIC1ETk9D U0VUUyAtRE5PTEVBUk4gXAotCSQoS0ZMQUdTKSAtRiAzMDAwIC1pIC1NMmxldDE2IiBcCi0JIkxJ QlMgPSAtbHgiICJMTktGTEFHUyA9IC14ZW5peCAtcyAtTyAtTEFSR0UgLUYgMzAwMCAtaSAtTTJs ZXQxNiIKLQotI1NDTyBYZW5peC8yODYgMi4yLjEsIGUuZy4gZm9yIElCTSBQQy9BVCwgUFMvMiBN b2RlbCA1MCwgZXRjLgotI0FzIGFib3ZlLCBidXQgd2l0aCBIREJVVUNQIChUaGlzIG9uZSBtaWdo dCBuZWVkIGZpeGluZyAtLSBzZWUgc2NvMjg2KS4KLXNjbzI4NmhkYjoKLQlAZWNobyAnTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gWGVuaXgvMjg2IHdpdGggSERCIFVVQ1AuLi4nCi0J QGVjaG8gJ0lmIG1ha2UgZmFpbHMsIHRyeSB1c2luZyBtYWtlTC4nCi0JJChNQUtFKSB3ZXJtaXQg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLXMgLU8gLUxBUkdFIC1EWEVO SVggLUROT0ZJTEVIIC1EdW5peCAtRFJEQ0hLIC1ETkFQIFwKLQktREhEQlVVQ1AgLUROT0lLU0Qg LUROT1VOSUNPREUgLUROT0xFQVJOIFwKLQkkKEtGTEFHUykgLUYgMzAwMCAtaSAtTTJsZXQzMiIg XAotCSJMSUJTID0gLWx4IiAiTE5LRkxBR1MgPSAtcyAtTyAtTEFSR0UgLUYgMzAwMCAtaSAtTTJs ZXQzMiIKLQotI1NDTyBYZW5peC8zODYgMi4yLjIgYW5kIDIuMi4zCi1zY28zODY6Ci0JQGVjaG8g J01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU0NPIFhlbml4LzM4NiAyLjIuMi4uLicKLQkk KE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtRFhF TklYIC1ETk9GSUxFSCAtRE5PSUtTRCAtRE5PUkVESVJFQ1QgLUROT0xFQVJOIFwKLQktRHVuaXgg LURSRENISyAtRE5BUCAtRE5PVU5JQ09ERSAkKEtGTEFHUykgLU90Y2wgLU0zZSIgXAotCSJMTktG TEFHUyA9IC1zIiAiTElCUyA9IC1seCIKLQotI1NDTyBYRU5JWC8zODYgMi4yLjMgd2l0aCBFeGNl bGFuIFRDUC9JUCArIGN1cnNlcy4KLSMgTk9URTogVGhpcyBvbmUgbWlnaHQgbmVlZCBzb21lIHdv cmsgaW4gQy1LZXJtaXQgNi4wLgotIyBZb3UgbWlnaHQgbmVlZCB0byBpbmNsdWRlIC91c3IvaW5j bHVkZS9zeXMvdHlwZXMuaAotIyBjb250YWluaW5nICJ0eXBlZGVmIGNoYXIgKmNhZGRyX3Q7Ii4g IFRoZW4gYXQgbGVhc3QgaXQgY29tcGlsZXMuCi1zY28zODZuZXRjOgotCUBlY2hvICdNYWtpbmcg Qy1LZXJtaXQgJChDS1ZFUikgZm9yIFNDTyBYZW5peC8zODYgMi4yLjMgKyBFeGNlbGFuIFRDUCcK LQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAt SS91c3IvaW5jbHVkZS9leG9zIC1EWEVOSVggLURDS19DVVJTRVMgLUROT1VOSUNPREUgXAotCS1E dW5peCAtRFJEQ0hLIC1ETkFQIC1EVENQU09DS0VUIC1ERVhDRUxBTiAtRE5PSkMgLUROT01LRElS IC1ETk9GSUxFSCBcCi0JLUROT0xFQVJOIC1ETk9SRURJUkVDVCAtRE5PSUtTRCAtRE5PX0ROU19T UlYgJChLRkxBR1MpIC1PdGNsIC1NM2UiIFwKLQkiTE5LRkxBR1MgPSAtcyIgIkxJQlMgPSAtbGMg LWx4IC1sc29ja2V0IC1sY3Vyc2VzIC1sdGVybWNhcCIKLQotI1NDTyBYRU5JWC8zODYgMi4zLjMg d2l0aCBnY2MgMS4zNyBvciBsYXRlci4uLgotc2NvMzg2Z2NjOgotCUBlY2hvICdNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIFNDTyBYZW5peC8zODYgMi4zLjMsIGdjYy4uLicKLQlAZWNobyAn QWRkIC1EX05PX1BST1RPVFlQRSBpZiB5b3UgaGF2ZSB0cm91YmxlIHdpdGggWGVuaXggaGVhZGVy IGZpbGVzJwotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDID0g Z2NjIiAiQ0MyID0gZ2NjIiBcCi0JIkNGTEFHUz0gLU8gLURYRU5JWCAtRFNWUjMgLUROT0ZJTEVI IC1ESERCVVVDUCAtRFJEQ0hLIC1ETkFQIFwKLQktRE5PSkMgLUROT0RFQlVHIC1ETk9VTklDT0RF IC1ETk9MRUFSTiAkKEtGTEFHUykgXAotCS10cmFkaXRpb25hbCAtZnBjYy1zdHJ1Y3QtcmV0dXJu IC1mc3RyZW5ndGgtcmVkdWNlIFwKLQktRE1fQklURklFTERTIC1ETV9DT0ZGIC1ETV9JMzg2IC1E TV9JODYgLURNX0k4NlNNIFwKLQktRE1fSU5URVJOQVQgLURNX1NEQVRBIC1ETV9TVEVYVCAtRE1f U1lTMyAtRE1fU1lTNSBcCi0JLURNX1NZU0lJSSAtRE1fU1lTViAtRE1fV09SRFNXQVAgLURNX1hF TklYIC1ETk9JS1NEIC1ETk9SRURJUkVDVCBcCi0JLURQV0lEX1Q9aW50ICIgIkxOS0ZMQUdTID0g LXMiICJMSUJTID0gLWx4IgotCi0jQXMgYWJvdmUsIGJ1dCB3aXRoIGN1cnNlcy4uLgotc2NvMzg2 Z2NjYzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gWGVuaXgvMzg2 IDIuMy4zLCBnY2MuLi4nCi0JQGVjaG8gJ0FkZCAtRF9OT19QUk9UT1RZUEUgaWYgeW91IGhhdmUg dHJvdWJsZSB3aXRoIFhlbml4IGhlYWRlciBmaWxlcycKLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAotCSJDRkxBR1M9IC1P IC1EWEVOSVggLURTVlIzIC1ETk9GSUxFSCAtREhEQlVVQ1AgLURSRENISyAtRE5BUCBcCi0JLURO T0pDIC1ETk9ERUJVRyAtRENLX0NVUlNFUyAtRE5PVU5JQ09ERSAtRE5PTEVBUk4gJChLRkxBR1Mp IFwKLQktdHJhZGl0aW9uYWwgLWZwY2Mtc3RydWN0LXJldHVybiAtZnN0cmVuZ3RoLXJlZHVjZSBc Ci0JLURNX0JJVEZJRUxEUyAtRE1fQ09GRiAtRE1fSTM4NiAtRE1fSTg2IC1ETV9JODZTTSAtRE5P UkVESVJFQ1QgXAotCS1ETV9JTlRFUk5BVCAtRE1fU0RBVEEgLURNX1NURVhUIC1ETV9TWVMzIC1E TV9TWVM1IFwKLQktRE1fU1lTSUlJIC1ETV9TWVNWIC1ETV9XT1JEU1dBUCAtRE1fWEVOSVggLURO T0lLU0QgXAotCS1EUFdJRF9UPWludCAiICJMTktGTEFHUyA9IC1zIiAiTElCUyA9IC1seCAtbGN1 cnNlcyAtbHRlcm1saWIiCi0KLSNTQ08gVU5JWCAoYW5kIE9EVCkgZW50cmllcy4uLgotIwotI05P VEU6IEFsbCBTQ08gVU5JWCBlbnRyeSBMSUJTIHNob3VsZCBoYXZlICItbGNfcyAtbGMgLWx4IiBJ TiBUSEFUIE9SREVSIChpZgotI3NoYXJlZCBDIGxpYnJhcnkgaXMgZGVzaXJlZCksIG9yIGVsc2Ug Ii1sYyAtbHgiIElOIFRIQVQgT1JERVIuICBVc2Ugc2hhcmVkIEMKLSNsaWJyYXJpZXMgdG8gc2F2 ZSBtZW1vcnksIGJ1dCB0aGVuIGRvbid0IGV4cGVjdCB0byBydW4gdGhlIHJlc3VsdGluZyBiaW5h cnkKLSNvbiBhIGRpZmZlcmVudCBtYWNoaW5lLiAgV2hlbiB1c2luZyAtbGNfcywgeW91IG11c3Qg YWxzbyB1c2UgLWxjLCBiZWNhdXNlIHRoZQotI3NoYXJlZCBDIGxpYnJhcnkgZG9lcyBub3QgY29u dGFpbiBhbGwgb2YgbGliYy5hLiAgQW5kIGluIGFsbCBjYXNlcywgLWxjIG11c3QKLSNBTFdBWVMg cHJlY2VkZSAtbHguCi0jCi0jQU5PVEhFUiBOT1RFOiAtRFJFTkFNRSBpcyBpbmNsdWRlZCBpbiBh bGwgU0NPIFVOSVggZW50cmllcy4gIFJlbW92ZSBpdCBpZiBpdAotI2NhdXNlcyB0cm91YmxlLiAg Tm8gaGFybSBpcyBkb25lIGJ5IHJlbW92aW5nIGl0IChzZWUgY2t1aW5zLnR4dCkuCi0jCi0jQU5E IEFOT1RIRVI6IEluIHRoZW9yeSwgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHJ1biBTQ08gVU5J WCBiaW5hcmllcyBvbgotI1NDTyBYZW5peCAyLjMgYW5kIGxhdGVyLiAgSW4gcHJhY3RpY2UsIHRo aXMgbWlnaHQgbm90IHdvcmsgYmVjYXVzZSBvZiB0aGUKLSNsaWJyYXJpZXMsIGV0Yy4gIEFsc28s IGRvbid0IGFkZCB0aGUgLWxpbmsgLXogc3dpdGNoICh3aGljaCBpcyBzdXBwb3NlZCB0bwotI3Jv b3Qgb3V0IHJlZmVyZW5jZXMgdG8gbnVsbCBwb2ludGVycykgYmVjYXVzZSBpdCBtYWtlcyBVTklY IGJpbmFyaWVzIGNvcmUKLSNkdW1wIHdoZW4gdGhleSBhcmUgcnVuIHVuZGVyIFhlbml4LgotCi0j Tk9URTogLU90Y2wgcmVtb3ZlZCBhbmQgcmVwbGFjZWQgYnkgLU8sIHNpbmNlIC1PdGNsIHByb2R1 Y2VkIGluY29ycmVjdCBjb2RlLgotI1NDTyBVTklYLzM4NiAzLjIuMCwgMy4yLjEsIGFuZCBTQ08g WGVuaXggMi4zLngKLXNjbzNyMjoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBTQ08gVU5JWC8zODYgMy4yLjAgb3IgMy4yLjEgLi4uJwotCUBlY2hvICdXYXJuaW5nOiBJZiBt YWtlIGJsb3dzIHVwLCBlZGl0IHRoZSBtYWtlZmlsZSB0byBqb2luJwotCUBlY2hvICd0aGUgZm9s bG93aW5nIHRocmVlIGNvbnRpbnVlZCBsaW5lcyBpbnRvIG9uZSBsaW5lLicKLQlAZWNobyAnQWxz bywgcmVtb3ZlIC1EUkVOQU1FIGlmIF9yZW5hbWUgdW5yZXNvbHZlZCBhdCBsaW5rIHRpbWUuJwot CSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1E WEVOSVggLURTVlIzIC1ETk9GSUxFSCAtREhEQlVVQ1AgLURSRENISyAtRE5BUCAtRE5PTEVBUk4g XAotCS1EUkVOQU1FIC1ETk9JS1NEIC1ETk9KQyAkKEtGTEFHUykgLU8iIFwKLQkiTE5LRkxBR1Mg PSAtcyIgIkxJQlMgPSAtbGMgLWx4IgotCi0jU0NPIFVOSVgvMzg2IDMuMi4wIGFuZCBTQ08gWGVu aXggMi4zLnggd2l0aCBFeGNlbGFuIFRDUC9JUCBzdXBwb3J0LgotI0luIGNhc2Ugb2YgY29tcGls YXRpb24gb3IgcnVudGltZSBwcm9ibGVtcywgdHJ5IGFkZGluZwotIyItRFVJRF9UPWludCAtREdJ RF9UPWludCIgdG8gdGhlIENGTEFHUy4gIElmIHRoYXQgZG9lc24ndCB3b3JrLCB0cnkKLSMiLURV SURfVD11aWRfdCAtREdJRF9UPWdpZF90Ii4KLXNjbzNyMm5ldDoKLQlAZWNobyAnTWFraW5nIEMt S2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gVU5JWC8zODYgLyBFeGNlbGFuLi4uJwotCSQoTUFLRSkg d2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1JL3Vzci9pbmNs dWRlL2V4b3MgLURYRU5JWCAtRFNWUjMgLUROT0ZJTEVIIC1ETk9MRUFSTiBcCi0JLURIREJVVUNQ IC1EUkRDSEsgLUROQVAgLURSRU5BTUUgLURUQ1BTT0NLRVQgLURFWENFTEFOIC1ETk9KQyBcCi0J LUROT0lLU0QgLUROT1JFRElSRUNUICQoS0ZMQUdTKSAtTyIgXAotCSJMTktGTEFHUyA9IC1zIiAi TElCUyA9IC1sYyAtbHggLWxzb2NrZXQiCi0KLSNTQ08gVU5JWC8zODYgMy4yLjAgYW5kIFNDTyBY ZW5peCAyLjMueCB3aXRoIEV4Y2VsYW4gVENQL0lQIHN1cHBvcnQuCi0jQXMgYWJvdmUsIHdpdGgg Y3Vyc2VzIGFkZGVkLgotc2NvM3IybmV0YzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tW RVIpIGZvciBTQ08gVU5JWC8zODYgLyBFeGNlbGFuIC8gY3Vyc2VzLi4uJwotCSQoTUFLRSkgd2Vy bWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1JL3Vzci9pbmNsdWRl L2V4b3MgLURYRU5JWCAtRFNWUjMgLUROT0ZJTEVIIC1ETk9MRUFSTiBcCi0JLURIREJVVUNQIC1E UkRDSEsgLUROQVAgLURUQ1BTT0NLRVQgLURFWENFTEFOIC1ETk9KQyAkKEtGTEFHUykgXAotCS1E UkVOQU1FIC1EQ0tfQ1VSU0VTIC1ETk9SRURJUkVDVCAtRE5PSUtTRCAtTyIgIkxOS0ZMQUdTID0g LXMiIFwKLQkiTElCUyA9IC1sYyAtbHggLWxzb2NrZXQgLWxjdXJzZXMgLWx0ZXJtY2FwIgotCi0j U0NPIFVOSVggMy4yLnggb3IgU0NPIFhlbml4IDIuMy54IHdpdGggUmFjYWwgSW50ZXJMYW4gVENQ L0lQIHN1cHBvcnQKLSMgRXh0cmEgY29tcGlsZSBmbGFncyBmb3Igb3RoZXIgdmVyc2lvbiBvZiBS YWNhbCBJbnRlckxhbiBUQ1AvSVA6Ci0jIFhlbml4Mjg2L05QNjIxLTI4NiwgdXNlIC1NbCAtRFBB UkFNSCAtRElOVEVSTEFOIC1EaTI4NiAtRFNZU1YKLSMgWGVuaXgzODYvTlA2MjEtMzg2LCB1c2Ug LURQQVJBTUggLURJTlRFUkxBTiAtRGkzODYgLURTWVNWCi0jIElTQzM4Nml4L05QNjIySSwgdXNl IC1EU1lTViAtRGkzODYKLSMgU0NPIFVuaXgzLjIvTlA2MjJTLCB1c2UgLURTWVNWIC1EaTM4NiAt RFNDT19VTklYCi0jIEFUJlQgU1ZSMy4yL05QNjIyQSwgdXNlIC1EU1lTViAtRGkzODYgLURBVFQK LXNjbzNyMm5ldHJpOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNDTyBV TklYLzM4NiAvIFJhY2FsIEludGVyTGFuLi4uJwotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1JL3Vzci9pbmNsdWRlL2ludGVybGFuIC1EWEVO SVggLUROT0ZJTEVIIC1ESERCVVVDUCBcCi0JLURTVlIzIC1EUkRDSEsgLUROQVAgLURUQ1BTT0NL RVQgLURQQVJBTUggLURJTlRFUkxBTiAtRGkzODYgLURTWVNWIFwKLQktRFJFTkFNRSAtRE5PUkVE SVJFQ1QgLUROT0lLU0QgLUROT0pDIC1ETk9MRUFSTiAkKEtGTEFHUykgLU90Y2wgLU0zZSIgXAot CSJMTktGTEFHUyA9IC1zIiAiTElCUyA9IC1sYyAtbHggLWx0Y3AiCi0KLSMgU0NPIFhFTklYLzM4 NiAyLjMuMyBTeXNWIHdpdGggU0NPIFRDUC9JUAotIyBTeXN0ZW0gViBTVFJFQU1TIFRDUCBkZXZl bG9wZWQgYnkgTGFjaG1hbiBBc3NvY2lhdGVzIEluYyBhbmQKLSMgQ29udmVyZ2VudCBUZWNobm9s b2dpZXMuCi0jIC1EUkVOQU1FIHJlbW92ZWQgc2luY2Ugc29tZSByZXBvcnRzIGluZGljYXRlIGl0 IGlzIG5vdCBzdXBwb3J0ZWQKLSMgKHdoZXJlYXMgb3RoZXJzIHNheSBpdCBpcy4pCi1zY28zcjJs YWk6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU0NPIFhFTklYLzM4NiAy LjMuMyArIFRDUC9JUC4uLicKLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKLQkiQ0ZMQUdTPSAtRExBSV9UQ1AgLURpMzg2IC1EWEVOSVggLURTVlIzIC1ETk9GSUxF SCAtREhEQlVVQ1AgLURSRENISyBcCi0JLUROQVAgLURUQ1BTT0NLRVQgLURQV0lEX1Q9aW50IC1E Tk9SRURJUkVDVCAtRE5PSUtTRCAtRE5PTEVBUk4gXAotCSQoS0ZMQUdTKSAtT3RjbCAtaSAtTTNl IiBcCi0JIkxOS0ZMQUdTID0gLWkgLXMiICJMSUJTID0gLWxjIC1seCAtbHNvY2tldCIKLQotc2Nv M3IybGFpYzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gWEVOSVgv Mzg2IDIuMy4zICsgVENQL0lQLi4uJwotCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gXAotCSJDRkxBR1M9IC1ETEFJX1RDUCAtRGkzODYgLURYRU5JWCAtRFNWUjMgLURO T0ZJTEVIIC1ESERCVVVDUCAtRFJEQ0hLIFwKLQktRE5BUCAtRFRDUFNPQ0tFVCAtRENLX0FOU0lD IC1EQ0tfQ1VSU0VTIC1ETV9URVJNSU5GTyAtRE5PTEVBUk4gXAotCS1EUFdJRF9UPWludCAtRE5P UkVESVJFQ1QgLUROT0lLU0QgJChLRkxBR1MpIC1PdGNsIC1pIC1NM2UiIFwKLQkiTE5LRkxBR1Mg PSAtaSAtcyIgIkxJQlMgPSAtbHRpbmZvIC1sYyAtbHggLWxzb2NrZXQiCi0KLSNTQ08gVU5JWC8z ODYgMy4ydjIgKFBPU0lYIGpvYiBjb250cm9sKSwgc2hhcmVkIGxpYnJhcmllcy4KLXNjbzNyMjI6 Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU0NPIFVOSVgvMzg2IDMuMnYy IC4uLicKLQltYWtlIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdT PSAtRFhFTklYIC1EU1ZSMyAtRE5PRklMRUggLURIREJVVUNQIC1EUkRDSEsgLUROT0xFQVJOIFwK LQktRE5BUCAtRFJFTkFNRSAtRFBJRF9UPXBpZF90IC1EUFdJRF9UPWludCAtRERJUkVOVCAtRE5P SUtTRCBcCi0JLUROT1JFRElSRUNUICQoS0ZMQUdTKSAtTyIgXAotCSJMTktGTEFHUyA9IC1zIiAi TElCUyA9IC1sY19zIC1sYyAtbHgiCi0KLSNTQ08gVU5JWC8zODYgMy4ydjIsIFBPU0lYIGpvYiBj b250cm9sLCBmdWxsc2NyZWVuIGZpbGUgdHJhbnNmZXIgZGlzcGxheSwKLSNkeW5hbWljIG1lbW9y eSBhbGxvY2F0aW9uLCBzaGFyZWQgQyBsaWJyYXJ5Ci1zY28zcjIyYzoKLQlAZWNobyAnTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gVU5JWC8zODYgMy4ydjIgLi4uJwotCUBlY2hvICdX YXJuaW5nOiBJZiBtYWtlIGJsb3dzIHVwLCBlZGl0IHRoZSBtYWtlZmlsZSB0byBqb2luJwotCUBl Y2hvICd0aGUgZm9sbG93aW5nIGZvdXIgY29udGludWVkIGxpbmVzIGludG8gb25lIGxpbmUuJwot CW1ha2Ugd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1EWEVO SVggLURTVlIzIC1ETk9GSUxFSCAtREhEQlVVQ1AgLURSRENISyAtRE5BUCAtRE5PTEVBUk4gXAot CS1EQ0tfQ1VSU0VTIC1ERElSRU5UIC1EUkVOQU1FIC1ETk9SRURJUkVDVCAtRE5PSUtTRCBcCi0J LURQSURfVD1waWRfdCAtRFBXSURfVD1pbnQgJChLRkxBR1MpIC1PIiBcCi0JIkxOS0ZMQUdTID0g LXMiICJMSUJTID0gLWxjdXJzZXMgLWxjX3MgLWxjIC1seCIKLQotI1NDTyBVTklYLzM4NiAzLjJ2 MiB3aXRoIGdjYyAxLjQwIG9yIGxhdGVyIChQT1NJWCBqb2IgY29udHJvbCkKLXNjbzNyMjJnY2M6 Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU0NPIFVOSVgvMzg2IDMuMnYy LCBnY2MnCi0JQGVjaG8gJ1dhcm5pbmc6IElmIG1ha2UgYmxvd3MgdXAsIGVkaXQgdGhlIG1ha2Vm aWxlIHRvIGpvaW4nCi0JQGVjaG8gJ3RoZSBmb2xsb3dpbmcgc2V2ZW4gY29udGludWVkIGxpbmVz IGludG8gb25lIGxpbmUuJwotCW1ha2Ugd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g IkNDID0gZ2NjIiBcCi0JIkNGTEFHUz0gLU8gLURQT1NJWCAtRFhFTklYIC1EU1ZSMyAtRE5PRklM RUggLURIREJVVUNQIC1EUkRDSEsgLUROQVAgXAotCS1ETk9MRUFSTiAtRFJFTkFNRSAtdHJhZGl0 aW9uYWwgLWZwY2Mtc3RydWN0LXJldHVybiAtZnN0cmVuZ3RoLXJlZHVjZSBcCi0JLURNX0JJVEZJ RUxEUyAtRE1fQ09GRiAtRE1fSTM4NiAtRE1fSTg2IC1ETV9JODZTTSBcCi0JLURNX0lOVEVSTkFU IC1ETV9TREFUQSAtRE1fU1RFWFQgLURNX1NZUzMgLURNX1NZUzUgXAotCS1ETV9TWVNJSUkgLURN X1NZU1YgLURNX1VOSVggLURNX1dPUkRTV0FQIC1ETV9YRU5JWCAtRHVuaXggXAotCS1EUElEX1Q9 cGlkX3QgLURQV0lEX1Q9aW50IC1ETk9SRURJUkVDVCAtRE5PSUtTRCAkKEtGTEFHUykgIiBcCi0J IkxOS0ZMQUdTID0gLXMiICJMSUJTID0gLWxjX3MgLWxjIC1seCIKLQotI1NDTyBVTklYLzM4NiAz LjJ2MiAoT0RUIDEuMSkgKFBPU0lYIGpvYiBjb250cm9sKSB3aXRoIFNDTyBUQ1AvSVAsIHNoYXJl ZCBsaWJzCi0jUmVxdWlyZXMgU0NPIFRDUC9JUCBvciBPRFQgZGV2ZWxvcG1lbnQgc3lzdGVtIGZv ciB0ZWxuZXQuaCwgZXRjLgotc2NvM3IyMm5ldDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQo Q0tWRVIpIGZvciBTQ08gVU5JWC8zODYgMy4yLjIgKyBUQ1AvSVAuLi4nCi0JQGVjaG8gJ1dhcm5p bmc6IElmIG1ha2UgYmxvd3MgdXAsIGVkaXQgdGhlIG1ha2VmaWxlIHRvIGpvaW4nCi0JQGVjaG8g J3RoZSBmb2xsb3dpbmcgdGhyZWUgY29udGludWVkIGxpbmVzIGludG8gb25lIGxpbmUuJwotCW1h a2UgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1M9IC1EWEVOSVgg LURTVlIzIC1ETk9GSUxFSCAtREhEQlVVQ1AgLURSRENISyAtRE5BUCAtRFRDUFNPQ0tFVCBcCi0J LURSRU5BTUUgLURQSURfVD1waWRfdCAtRFBXSURfVD1pbnQgLURESVJFTlQgLUROT1JFRElSRUNU IC1ETk9JS1NEIFwKLQkkKEtGTEFHUykgLU8iICJMTktGTEFHUyA9IC1zIiAiTElCUyA9IC1sc29j a2V0IC1sY19zIC1sYyAtbHgiCi0KLSNBcyBhYm92ZSwgYnV0IHdpdGggY3Vyc2VzIGZvciBmdWxs c2NyZWVuIGZpbGUgdHJhbnNmZXIgZGlzcGxheS4KLSNSZXF1aXJlcyBTQ08gVENQL0lQIG9yIE9E VCBkZXZlbG9wbWVudCBzeXN0ZW0gZm9yIHRlbG5ldC5oLCBldGMuCi1zY28zcjIybmV0YzoKLQlA ZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gVU5JWC8zODYgMy4ydjIgKyBU Q1AvSVAuLi4nCi0JQGVjaG8gJ1dhcm5pbmc6IElmIG1ha2UgYmxvd3MgdXAsIGVkaXQgdGhlIG1h a2VmaWxlIHRvIGpvaW4nCi0JQGVjaG8gJ3RoZSBmb2xsb3dpbmcgdGhyZWUgY29udGludWVkIGxp bmVzIGludG8gb25lIGxpbmUuJwotCW1ha2UgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gIkNGTEFHUz0gXAotCS1EWEVOSVggLURTVlIzIC1ETk9GSUxFSCAtREhEQlVVQ1AgLURSRENI SyAtRE5BUCAtRFRDUFNPQ0tFVCAtRFJFTkFNRSBcCi0JLURDS19DVVJTRVMgLURESVJFTlQgLURO T0lLU0QgLUROT1JFRElSRUNUIFwKLQktRFBJRF9UPXBpZF90IC1EUFdJRF9UPWludCAtTyAkKEtG TEFHUykiIFwKLQkiTE5LRkxBR1MgPSAtcyIgIkxJQlMgPSAtbGN1cnNlcyAtbHNvY2tldCAtbGNf cyAtbGMgLWx4IgotCi0jU0NPIFhFTklYIDIuMy40LCBubyBjdXJzZXMsIG5vIFRDUC9JUCwgbm8g SUtTRC4KLSNUaGlzIG9uZSBidWlsdCBhbmQgdGVzdGVkIGluIEMtS2VybWl0IDcuMC4KLSNsY2Zw IGlzIEMgbGlicmFyeSBmbG9hdGluZy1wb2ludCBzdXBwb3J0LgotI1VzZSAtTTMgdG8gZ2VuZXJh dGUgMzItYml0IGkzODYgY29kZSBpbnN0ZWFkIG9mIDE2LWJpdCBzZWdtZW50ZWQgaTI4NiBjb2Rl LgotI1VzZSAtTWUgdG8gZW5hYmxlIE1TIG5vbnN0YW5kYXJkIGtleXdvcmRzIGluIHN5c3RlbSBo ZWFkZXJzLgotI1VzZSAtVzIgb3IgVzMgdG8gaW5jcmVhc2UgdGhlIHdhcm5pbmcgbGV2ZWwuCi0j T0s6IDIwMTEvMDYvMTUKLXNjbzIzNDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIp IGZvciBTQ08gWEVOSVggMi4zLjQuLi4nCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURTQ08zMiAtRFhFTklYIC1ETk9GSUxFSCAtREhEQlVV Q1AgLURSRENISyAtRE5PTEVBUk4gXAotCS1ETkFQIC1ETk9KQyAtRE5PQ09URk1DIC1ETk9JS1NE IC1ETk9SRURJUkVDVCAtRE5PVE5DT0RFIC1ETk9HRlRJTUVSIFwKLQktRE5PVElNRVZBTCAtRE5P VElNRVpPTkUgLUROT1NZTUxJTksgLURTQ08yMzQgLUREQ0xHRVRDV0QgJChLRkxBR1MpIFwKLQkt T3RjbCIgIkxOS0ZMQUdTID0gLXMiICJMSUJTID0gLWxjZnAgLWxjIC1seCIKLQotI1NDTyBYRU5J WCAyLjMuNCwgbm8gVENQL0lQLCBubyBJS1NELCBidXQgd2l0aCBjdXJzZXMuCi0jIEJ1aWx0IGFu ZCB0ZXN0ZWQgaW4gQy1LZXJtaXQgNy4wLgotIyBOb3RlOiBYRU5JWCAyLjMuNCBkb2VzIG5vdCBo YXZlIG5ld3Rlcm0oKSBzbyBubyBwb2ludCBpbiBhZGRpbmcgLURDS19ORVdURVJNLgotc2NvMjM0 YzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gWEVOSVggMi4zLjQg KyBjdXJzZXMuLi4nCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBc Ci0JIkNGTEFHUz0gLURTQ08zMiAtRFhFTklYIC1ETk9GSUxFSCAtREhEQlVVQ1AgLURSRENISyAt RE5PTEVBUk4gXAotCS1ETkFQIC1ETk9KQyAtRE5PQ09URk1DIC1ETk9JS1NEIC1ETk9SRURJUkVD VCAtRE5PVE5DT0RFIC1ETk9HRlRJTUVSIFwKLQktRE5PVElNRVZBTCAtRE5PVElNRVpPTkUgLURO T1NZTUxJTksgLURDS19DVVJTRVMgLURTQ08yMzQgXAotCS1ERENMR0VUQ1dEICQoS0ZMQUdTKSAt T3RjbCIgXAotCSJMTktGTEFHUyA9IC1zIiAiTElCUyA9IC1sY2ZwIC1sYyAtbHRpbmZvIC1seCIK LQotI1NDTyBYRU5JWCAyLjMuNCB3aXRoIFNDTyBUQ1AvSVAgYW5kIGN1cnNlcywgbm8gSUtTRC4K LSMgQnVpbHQgYW5kIHRlc3RlZCBpbiBDLUtlcm1pdCA3LjAuICBUQ1AvSVAgd29ya3MgYW5kIGN1 cnNlcyB3b3Jrcy4KLSMgUHJldmlvdXMgdmVyc2lvbnMgb2YgdGhpcyB0YXJnZXQgaW5jbHVkZWQg LWxtYWxsb2MsIGJ1dCB0aGlzIGNhdXNlZCAiZXJyb3I6Ci0jICIgX2NhbGxvYyA6IHN5bWJvbCBk ZWZpbmVkIG1vcmUgdGhhbiBvbmNlIiBhdCBsaW5rIHRpbWUgc28gSSByZW1vdmVkIGl0LgotIyBS ZXN1bHRzIGFyZSBsaWtlbHkgdG8gdmFyeSBkZXBlbmRpbmcgb24gZXhhY3RseSB3aGljaCB2ZXJz aW9uIG9mIHRoZSBTREsKLSMgYW5kIFRDUC9JUCBTREsgeW91IGhhdmUuCi1zY28yMzRuZXRjOgot CUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNDTyBYRU5JWCAyLjMuNCArIFRD UCArIGN1cnNlcy4uLicKLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 IFwKLQkiQ0ZMQUdTPSAtRFNDTzMyIC1EWEVOSVggLUROT0ZJTEVIIC1ESERCVVVDUCAtRFJEQ0hL IC1ETk9MRUFSTiBcCi0JLUROQVAgLUROT0pDIC1ETk9DT1RGTUMgLUROT0lLU0QgLUROT1JFRElS RUNUIC1ETk9UTkNPREUgLUROT0dGVElNRVIgXAotCS1ETk9USU1FVkFMIC1ETk9USU1FWk9ORSAt RE5PU1lNTElOSyAtRENLX0NVUlNFUyAtRFNDTzIzNCBcCi0JLUREQ0xHRVRDV0QgLURUQ1BTT0NL RVQgLUROT19ETlNfU1JWICQoS0ZMQUdTKSAtT3RjbCIgXAotCSJMTktGTEFHUyA9IC1zIiAiTElC UyA9IC1sdGluZm8gLWxzb2NrZXQgLWxjZnAgLWxjIC1seCIKLQotIyBTQ08gMy4ydjQueCB0YXJn ZXRzLi4uCi0KLSMgIE5PVEU6IEFkZCAtRERDTFBPUEVOIGFuZC9vciAtRERDTEZET1BFTiB0byBh bnlTQ08gMy4ydjQueCBub24tZ2NjIGVudHJpZXMKLSMgIHRoYXQgY29tcGxhaW4gYWJvdXQgZmRv cGVuKCkgb3IgcG9wZW4oKSBhdCBjb21waWxlIHRpbWUuICBUaGV5IGNvbXBpbGUgT0sKLSMgIHdp dGhvdXQgdGhlc2UgZmxhZ3MgYXMgb2YgSnVseSAxOTk5LiAgSG93ZXZlciwgdGhlIGdjYyBlbnRy aWVzIHNlZW0gdG8KLSMgIG5lZWQgdGhlbSwgYXQgbGVhc3QgZm9yIGdjYyAyLjcuMi4yLgotCi0j ICBOT1RFIDI6IFRvIGVuYWJsZSBJS1NEIHN1cHBvcnQsIGFkZDoKLSMgIC1EQ0tfTE9HSU4gLURO T0dFVFVTRVJTSEVMTCAtRE5PSU5JVEdST1VQUwotIyAgdG8gQ0ZMQUdTIChub3QgdGVzdGVkKS4K LQotI1NDTyBVTklYLzM4NiAzLjJ2NCAoUE9TSVggam9iIGNvbnRyb2wpLCBjdXJzZXMsIEFOU0kg QyBjb21waWxhdGlvbiwKLSM8ZGlyZW50Lmg+IChFQUZTKSBmaWxlIHN5c3RlbS4gIFJlbW92ZSAt bG1hbGxvYyBpZiBpdCBjYXVzZXMgdHJvdWJsZS4gIEl0IHdhcwotI3B1dCB0aGVyZSB0byBhdm9p ZCBjb3JlIGR1bXBzIGNhdXNlZCBieSByZWd1bGFyIGxpYmMuYSBtYWxsb2MuICBBZGQgLUogdG8g bWFrZQotI2FsbCBjaGFycyB1bnNpZ25lZC4gIFRoaXMgdmVyc2lvbiB1c2VzIHNlbGVjdCgpIGZv ciBDT05ORUNUIGFuZCBhbHNvIGhhcwotI2hpZ2gtcHJlY2lzaW9uIHRpbWVycyBhbmQgc28gbWln aHQgbm90IHdvcmsgb24gbm9uLVRDUCBzeXN0ZW1zLCBpbiB3aGljaCBjYXNlCi0jc2NvMzJ2NG5z IHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCi0jIElmIHlvdSBnZXQgX2Z0aW1lIHJlZGVmaW5pdGlv bl8gY29tcGxhaW50LCB0cnkgYWRkaW5nIC1ET0RUMzAgdG8gQ0ZMQUdTLgotc2NvMzJ2NDoKLQlA ZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gVU5JWC8zODYgMy4ydjQuLi4n Ci0JbWFrZSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURD S19TQ08zMlY0IC1ETk9GSUxFSCAtREhEQlVVQ1AgLURDS19DVVJTRVMgLURNX1RFUk1JTkZPIFwK LQktRE5PQU5TSSAtRFNFTEVDVCAtRE5PSUtTRCAtRERDTEdFVENXRCAtTk9MU1RBVCBcCi0JLURO T0xJTktCSVRTIC1ERENMR0VUQ1dEICQoS0ZMQUdTKSAtTyIgXAotCSJMTktGTEFHUyA9IC1zIiAi TElCUyA9IC1sY3Vyc2VzIC1sbWFsbG9jIC1sc29ja2V0IC1sY19zIC1sYyAtbHgiCi0KLSMgQXMg YWJvdmUsIGJ1dCB3aXRoIG5vIGRlcGVuZGVuY2Ugb24gc29ja2V0cyBsaWJyYXJ5IG9yIHNlbGVj dCgpLgotc2NvMzJ2NG5zOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFND TyBVTklYLzM4NiAzLjJ2NC4uLicKLQlAZWNobyAnTm8gc2VsZWN0KCkgYW5kIG5vIHNvY2tldHMg bGlicmFyeS4nCi0JbWFrZSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNG TEFHUz0gLURDS19TQ08zMlY0IC1ETk9GSUxFSCAtREhEQlVVQ1AgLURDS19DVVJTRVMgLURNX1RF Uk1JTkZPIFwKLQktRE5PQU5TSSAtRE5PSUtTRCAtRE5PR0ZUSU1FUiAtRENLX1BPTEwgLUROQVAg LUREQ0xHRVRDV0QgLUROT0xTVEFUIFwKLQktRE5PTElOS0JJVFMgLUREQ0xHRVRDV0QgLUROT0xF QVJOIC1PICQoS0ZMQUdTKSIgXAotCSJMTktGTEFHUyA9IC1zIiAiTElCUyA9IC1sY3Vyc2VzIC1s bWFsbG9jIC1sY19zIC1sYyAtbHgiCi0KLSNTQ08gVU5JWC8zODYgMy4ydjQgKFBPU0lYIGpvYiBj b250cm9sKSwgVENQL0lQLCBjdXJzZXMsIEFOU0kgQyBjb21waWxhdGlvbiwKLSM8ZGlyZW50Lmg+ IChFQUZTKSBmaWxlIHN5c3RlbS4gIFdpdGggRElSRU5ULCAtbGMgbXVzdCBjb21lIGJlZm9yZSAt bHguCi0jUmVwb3J0ZWRseSBpdCdzIE9LIHRvIGFkZCAtRENLX1JFRElSIGFuZCAtRENLX1dSRUZS RVNILCBhbmQgdG8gcmVtb3ZlIC1sY19zLgotI1JlcXVpcmVzIFNDTyBUQ1AvSVAgZGV2ZWxvcG1l bnQgc3lzdGVtIG9yIE9EVCBmb3IgdGVsbmV0LmgsIGV0Yy4KLSNTZWUgc2NvMzJ2NCBhYm92ZSBm b3IgYWRkaXRpb25hbCBjb21tZW50cy4KLSNOT1RFOiBObyBtb3JlIHJvb20gZm9yIC1EeHh4IC0t IDI1IHNlZW1zIHRvIGJlIHRoZSBsaW1pdC4gIE1vdmUgc29tZSB0bwotI2NrY2RlYi5oIG9yIHNv bWV3aGVyZS4uLgotc2NvMzJ2NG5ldDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIp IGZvciBTQ08gVU5JWC8zODYgMy4ydjQuLi4nCi0JQGVjaG8gJ0lmIHlvdSBnZXQgX2Z0aW1lIHJl ZGVmaW5pdGlvbl8gY29tcGxhaW50LCcKLQlAZWNobyAndXNlIG1ha2Ugc2NvLW9kdDMwLicKLQkk KE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtRE5P RklMRUggLURIREJVVUNQIC1EVENQU09DS0VUIC1EQ0tfQU5TSUMgLURDS19DVVJTRVMgXAotCS1E TkFQIC1EQ0tfV1JFRlJFU0ggLUROT0xJTktCSVRTIC1EX0lCQ1MyIC1EU0VMRUNUIC1ETk9MU1RB VCBcCi0JLUREQ0xHRVRDV0QgLURDS19TQ08zMlY0IC1ETk9JS1NEIC1PIFwKLQkkKEtGTEFHUyki ICJMTktGTEFHUyA9ICQoTE5LRkxBR1MpIC1zIiBcCi0JIkxJQlMgPSAkKExJQlMpIC1sY3Vyc2Vz IC1sc29ja2V0IC1sbWFsbG9jIC1sc29ja2V0IC1sY19zIC1sYyAtbHgiCi0KLSNTQ08gVU5JWC8z ODYgMy4ydjQgd2l0aCBnY2MgMS40MCBvciBsYXRlciwgUE9TSVggam9iIGNvbnRyb2wuCi0jQWxz byBzZWUgY29tbWVudHMgaW4gc2NvMzJyNCBlbnRyeS4KLXNjbzMydjRnY2M6Ci0JbWFrZSB4ZXJt aXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiIFwKLQkiQ0ZMQUdTPSAtTyAt RE5PRklMRUggLURIREJVVUNQIC1ETk9BTlNJIC1EQ0tfQ1VSU0VTIC1ETV9URVJNSU5GTyBcCi0J LXRyYWRpdGlvbmFsIC1mcGNjLXN0cnVjdC1yZXR1cm4gLWZzdHJlbmd0aC1yZWR1Y2UgLWZ1bnNp Z25lZC1jaGFyIFwKLQktRF9LUiAtRF9OT19QUk9UT1RZUEUgLURfU1ZJRCAtRE5PSUtTRCAtRENL X1NDTzMyVjQgLUROT0xJTktCSVRTIFwKLQktRE1fQklURklFTERTIC1ETV9DT0ZGIC1ETV9JMzg2 IC1ETV9JODYgLURNX0k4NlNNIC1EU0VMRUNUIC1ETk9MU1RBVCBcCi0JLURNX0lOVEVSTkFUIC1E TV9TREFUQSAtRE1fU1RFWFQgLURNX1NZUzMgLURNX1NZUzUgLUREQ0xHRVRDV0QgXAotCS1ETV9T WVNJSUkgLURNX1NZU1YgLURNX1VOSVggLURNX1dPUkRTV0FQIC1ETV9YRU5JWCAtRHVuaXggXAot CS1ERENMUE9QRU4gLUREQ0xGRE9QRU4gJChLRkxBR1MpICIgXAotCSJMTktGTEFHUyA9IC1zIiAi TElCUyA9IC1sY3Vyc2VzIC1sc29ja2V0IC1sY19zIC1sYyAtbHgiCi0KLSNTQ08gVU5JWC8zODYg My4ydjQgKFBPU0lYIGpvYiBjb250cm9sKSwgVENQL0lQLCBjdXJzZXMsIEFOU0kgQyBjb21waWxh dGlvbiwKLSNSZXF1aXJlcyBTQ08gVENQL0lQIG9yIE9EVCBkZXZlbG9wbWVudCBzeXN0ZW0gZm9y IHRlbG5ldC5oLCBldGMuCi0jPGRpcmVudC5oPiAoRUFGUykgZmlsZSBzeXN0ZW0uICBXaXRoIERJ UkVOVCwgLWxjIG11c3QgY29tZSBiZWZvcmUgLWx4LgotI2djYyAxLjQwIG9yIGxhdGVyLiAgQWxz byBzZWUgY29tbWVudHMgaW4gc2NvMzJyNCBlbnRyeS4KLXNjbzMydjRuZXRnY2M6Ci0JbWFrZSB4 ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiICJDQzI9Z2NjIiBcCi0J IkNGTEFHUz0gLU8yIC1ETk9GSUxFSCAtREhEQlVVQ1AgLURTRUxFQ1QgLUROT0xTVEFUIFwKLQkt RE5PQU5TSSAtRFRDUFNPQ0tFVCAtRENLX0NVUlNFUyAtRE1fVEVSTUlORk8gXAotCS1EX0tSIC1E X05PX1BST1RPVFlQRSAtRF9TVklEIC1ETk9JS1NEIC1EQ0tfU0NPMzJWNCAtRE5PTElOS0JJVFMg XAotCS1ETV9CSVRGSUVMRFMgLURNX0NPRkYgLURNX0kzODYgLURNX0k4NiAtRE1fSTg2U00gLURE Q0xHRVRDV0QgXAotCS1ETV9JTlRFUk5BVCAtRE1fU0RBVEEgLURNX1NURVhUIC1ETV9TWVMzIC1E TV9TWVM1IFwKLQktRE1fU1lTSUlJIC1ETV9TWVNWIC1ETV9VTklYIC1ETV9XT1JEU1dBUCAtRE1f WEVOSVggLUR1bml4IFwKLQktRERDTFBPUEVOIC1ERENMRkRPUEVOICQoS0ZMQUdTKSIgXAotCSJM TktGTEFHUyA9IC1zIiAiTElCUyA9IC1sY3Vyc2VzIC1sc29ja2V0IC1sY19zIC1sYyAtbHgiCi0K LSNBcyBhYm92ZSBidXQgd2l0aCBiZ2NjIEJPVU5EUyBDSEVDS0lORyAoZm9yIGRldmVsb3BlcnMg b25seSkuICAtbGNoZWNrIGhhcwotI2JvdW5kcy1jaGVja2luZyByZXBsYWNlbWVudHMgZm9yIG1h bGxvYywgbWVtY3B5LCBiY29weSwgZXRjLCBzbyBtdXN0IGNvbWUKLSNiZWZvcmUgLWxzb2NrZXQg YW5kIC1sYy4KLXNjbzMydjRuZXRiZ2NjOgotCW1ha2UgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gXAotCSJDQyA9IGJnY2MgLXBpcGUgLW0zODYiICJDQzI9YmdjYyAtcGlwZSAtbTM4 NiIgXAotCSJDRkxBR1M9IC1PMSAtZyAtRE5PRklMRUggLURIREJVVUNQIC1EU0VMRUNUIFwKLQkt RE5PQU5TSSAtRFRDUFNPQ0tFVCAtRENLX0NVUlNFUyAtRE1fVEVSTUlORk8gXAotCS1EX0tSIC1E X05PX1BST1RPVFlQRSAtRF9TVklEIC1ETk9JS1NEIC1EQ0tfU0NPMzJWNCAtRE5PTFNUQVQgXAot CS1ETV9CSVRGSUVMRFMgLURNX0NPRkYgLURNX0kzODYgLURNX0k4NiAtRE1fSTg2U00gLUROT0xJ TktCSVRTIFwKLQktRE1fSU5URVJOQVQgLURNX1NEQVRBIC1ETV9TVEVYVCAtRE1fU1lTMyAtRE1f U1lTNSAtRERDTEdFVENXRCBcCi0JLURNX1NZU0lJSSAtRE1fU1lTViAtRE1fVU5JWCAtRE1fV09S RFNXQVAgLURNX1hFTklYIC1EdW5peCBcCi0JLUREQ0xQT1BFTiAtRERDTEZET1BFTiAkKEtGTEFH UykgIiBcCi0JIkxOS0ZMQUdTID0gLWciICJMSUJTID0gLWxjdXJzZXMgLWxjaGVjayAtbHNvY2tl dCAtbHgiCi0KLXNjbzMydjRuZXRuZDoKLQlAZWNobyBzY28zMnY0bmV0IHdpdGggbm8gZGVidWcK LQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNjbzMydjRuZXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCi0JIktGTEFHUz0kKEtGTEFHUykgLUROT0RFQlVHIC1ETk9UTE9HIiAiTElCUz0kKExJ QlMpIgotCi1zY28zcjJuZXRuZDoKLQlAZWNobyBzY28zMnY0bmV0bmQgYnVpbHQgZm9yIFNDTyBY RU5JWCAyLjMgdW5kZXIgU0NPIFVOSVguLi4KLQlAZWNobyAgIHJlcXVpcmVzIGNvcHlpbmcgL2xp Yi8zODYvU2xpYmMuYSB0byAvbGliLzM4Ni9TbGliY19zLmEgYW5kCi0JQGVjaG8gICBnZXR0aW5n IC9saWIvMzg2L1NsaWJzb2NrZXQuYSBmcm9tIGEgWEVOSVggZGV2a2l0LgotCUBlY2hvICAgV0FS TklORzogcG9sbC9DS19QT0xMIHN1cHBvcnRlZCBvbmx5IG9uIFhFTklYIDIuMy40Ci0JZWNobyAg ICBGb3IgZWFybGllciBYRU5JWCBzeXN0ZW1zLCByZXBsYWNlIENLX1BPTEwgd2l0aCBSRENISy4K LQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNjbzMydjRuZXRuZCBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9IFwKLQkiS0ZMQUdTPSQoS0ZMQUdTKSAteDIuMyAtRE5PUkVOQU1FIC1ETk9TWU1MSU5L IiBcCi0JIkxOS0ZMQUdTID0gJChMTktGTEFHUykgLXgyLjMiIFwKLQkiTElCUz0tbGRpciAtbGNm cCAkKExJQlMpIgotCi0jU0NPIFVOSVgvMzg2IDMuMnY0IChQT1NJWCBqb2IgY29udHJvbCksIFRD UC9JUCwgY3Vyc2VzLCBBTlNJIEMgY29tcGlsYXRpb24sCi0jPGRpcmVudC5oPiAoRUFGUykgZmls ZSBzeXN0ZW0uICBXaXRoIERJUkVOVCwgLWxjIG11c3QgY29tZSBiZWZvcmUgLWx4LgotI1JlcG9y dGVkbHkgaXQncyBPSyB0byBhZGQgLURDS19SRURJUiBhbmQgLURDS19XUkVGUkVTSCwgYW5kIHRv IHJlbW92ZSAtbGNfcy4KLSNSZXF1aXJlcyBTQ08gVENQL0lQIGRldmVsb3BtZW50IHN5c3RlbSBv ciBPRFQgZm9yIHRlbG5ldC5oLCBldGMuCi0jU2VlIHNjbzMydjQgYWJvdmUgZm9yIGFkZGl0aW9u YWwgY29tbWVudHMuCi0jIE5vdGU6ICJ4ZXJtaXQiIG1lYW5zIHVzZSB0aGUgc2VsZWN0KCkgdmVy c2lvbiBvZiB0aGUgQ09OTkVDVCBtb2R1bGUuCi1zY28zMnY0bmV0eDoKLQlAZWNobyAnTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gVU5JWC8zODYgMy4ydjQuLi4nCi0JQGVjaG8gJ0lm IHlvdSBnZXQgX2Z0aW1lIHJlZGVmaW5pdGlvbl8gY29tcGxhaW50LCcKLQlAZWNobyAndXNlIG1h a2Ugc2NvLW9kdDMwLicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 IFwKLQkiQ0ZMQUdTPSAtRE5PRklMRUggLURIREJVVUNQIC1EVENQU09DS0VUIC1EQ0tfQU5TSUMg LURDS19DVVJTRVMgLUROQVAgXAotCS1EQ0tfV1JFRlJFU0ggLUROT0xJTktCSVRTIC1EX0lCQ1My IC1EU0VMRUNUIC1ERENMR0VUQ1dEIFwKLQktRENLX1NDTzMyVjQgLUROT0lLU0QgLUROT0xTVEFU IC1PICQoS0ZMQUdTKSIgXAotCSJMTktGTEFHUyA9ICQoTE5LRkxBR1MpIC1zIiBcCi0JIkxJQlMg PSAkKExJQlMpIC1sY3Vyc2VzIC1sc29ja2V0IC1sbWFsbG9jIC1sc29ja2V0IC1sY19zIC1sYyAt bHgiCi0KLXNjbzMydjRuZXRuZHg6Ci0JQGVjaG8gc2NvMzJ2NG5ldHggd2l0aCBubyBkZWJ1Zwot CSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc2NvMzJ2NG5ldHggS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCi0JIktGTEFHUz0kKEtGTEFHUykgLUROT0RFQlVHIC1ETk9UTE9HIiAiTElCUz0kKExJ QlMpIgotCi1zY28zcjJuZXRuZHg6Ci0JQGVjaG8gc2NvMzJ2NG5ldG5keCBidWlsdCBmb3IgU0NP IFhFTklYIDIuMyB1bmRlciBTQ08gVU5JWC4uLgotCUBlY2hvICAgcmVxdWlyZXMgY29weWluZyAv bGliLzM4Ni9TbGliYy5hIHRvIC9saWIvMzg2L1NsaWJjX3MuYSBhbmQKLQlAZWNobyAgIGdldHRp bmcgL2xpYi8zODYvU2xpYnNvY2tldC5hIGZyb20gYSBYRU5JWCBkZXZraXQuCi0JQGVjaG8gICBX QVJOSU5HOiBwb2xsL0NLX1BPTEwgc3VwcG9ydGVkIG9ubHkgb24gWEVOSVggMi4zLjQKLQllY2hv ICAgIEZvciBlYXJsaWVyIFhFTklYIHN5c3RlbXMsIHJlcGxhY2UgQ0tfUE9MTCB3aXRoIFJEQ0hL LgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc2NvMzJ2NG5ldG5keCBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPSQoS0ZMQUdTKSAteDIuMyAtRE5PUkVOQU1FIC1ETk9TWU1M SU5LIiBcCi0JIkxOS0ZMQUdTID0gJChMTktGTEFHUykgLXgyLjMiIFwKLQkiTElCUz0tbGRpciAt bGNmcCAkKExJQlMpIgotCi1zY28tb2R0MzA6Ci0JQGVjaG8gU0NPIE9EVCAzLjAKLQkkKE1BS0Up ICJNQUtFPSQoTUFLRSkiIHNjbzMydjRuZXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0J IktGTEFHUz0kKEtGTEFHUykgLURPRFQzMCIKLQotI1NDTyBPcGVuU2VydmVyIDUuMCAoU0NPIFVO SVggMy4ydjUuMCkgd2l0aCBTQ08gZGV2ZWxvcG1lbnQgdG9vbHMsIG5vIFRDUC9JUC4KLSNTQ08g T1NSNSBpcyBtdWNoIG1vcmUgbGlrZSBzdGFuZGFyZCBTeXN0ZW0gViB0aGFuIHByZXZpb3VzIFND TyByZWxlYXNlcy4KLSNUaGUgU0NPIGRldmVsb3BtZW50IHRvb2xzIGluY2x1ZGUgVENQL0lQLCBz byB0aGlzIHRhcmdldCBpcyBvbmx5IGZvciBjcmVhdGluZwotI2FydGlmaWNpYWxseSBsaW1pdGVk IHZlcnNpb25zIG9mIGtlcm1pdCByZXF1aXJlZCBieSBzaXRlIHBvbGljeSByYXRoZXIgdGhhbgot I3RoZSBvcGVyYXRpbmcgc3lzdGVtLiAgTk9TWVNMT0cgaXMgaW5jbHVkZWQgYmVjYXVzZSBzeXNs b2coKSByZXF1aXJlcyB0aGUKLSNzb2NrZXRzIGxpYnJhcnkuCi1zY28zMnY1MDA6Ci0JQGVjaG8g TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gT3BlblNlcnZlciBSZWxlYXNlIDUuLi4K LQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAt TyAtRERJUkVOVCAtREhEQlVVQ1AgLURTVlI0IC1EQ0tfU0NPVjUgLURDS19SVFNDVFMgXAotCS1E Q0tfQ1VSU0VTIC1EQ0tfV1JFRlJFU0ggLURDS19ORVdURVJNIC1EU0VMRUNUIC1EU0VMRUNUX0gg XAotCS1ETk9HRVRVU0VSU0hFTEwgLUROT0xTVEFUIC1ETk9MSU5LQklUUyAtRE5PU1lTTE9HIFwK LQkkKEtGTEFHUykiIFwKLQkiTElCUz0tbGN1cnNlcyAkKExJQlMpIiAiTE5LRkxBR1M9JChMTktG TEFHUykiCi0KLXNjbzMydjU6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiAiS0ZMQUdTPSQoS0ZM QUdTKSIgc2NvMzJ2NTAwCi0KLQotI1NDTyBPcGVuU2VydmVyIDUuMCB3aXRoIG5ldHdvcmtpbmcs IFNDTyBkZXZlbG9wbWVudCB0b29scy4KLSNOZXR3b3JraW5nIGxpYnJhcmllcyBhcmUgbm93IHBy b3ZpZGVkIHdpdGggdGhlIE9TLgotc2NvMzJ2NTAwbmV0OgotCUBlY2hvIE1ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgU0NPIE9wZW5TZXJ2ZXIgUmVsZWFzZSA1Li4uCi0JJChNQUtFKSB4ZXJt aXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLU8gLURESVJFTlQgLURI REJVVUNQIC1EU1ZSNCAtRENLX1NDT1Y1IC1EQ0tfUlRTQ1RTIFwKLQktRENLX0NVUlNFUyAtRENL X1dSRUZSRVNIIC1EQ0tfTkVXVEVSTSAtRFNFTEVDVCAtRFNFTEVDVF9IIFwKLQktRE5PR0VUVVNF UlNIRUxMIC1ETk9MU1RBVCAtRE5PTElOS0JJVFMgLURUQ1BTT0NLRVQgXAotCS1ETk9fRE5TX1NS ViAkKEtGTEFHUykiIFwKLQkiTElCUz0tbGN1cnNlcyAtbHNvY2tldCAkKExJQlMpIiAiTE5LRkxB R1M9JChMTktGTEFHUykiCi0KLXNjbzMydjVuZXQ6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiAi S0ZMQUdTPSQoS0ZMQUdTKSIgc2NvMzJ2NTAwbmV0Ci0KLSNTQ08gT3BlblNlcnZlciA1LjAgd2l0 aCBuZXR3b3JraW5nIGFuZCBPcGVuU1NMLCBTQ08gZGV2ZWxvcG1lbnQgdG9vbHMuCi0jTmV0d29y a2luZyBsaWJyYXJpZXMgYXJlIG5vdyBwcm92aWRlZCB3aXRoIHRoZSBPUy4KLXNjbzMydjUwMG5l dCtzc2w6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gT1NSNSB3aXRo IE9wZW5TU0wuLi4KLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwK LQkiQ0ZMQUdTPSAtTyAtRERJUkVOVCAtREhEQlVVQ1AgLURTVlI0IC1EQ0tfU0NPVjUgLURDS19S VFNDVFMgXAotCS1EQ0tfQ1VSU0VTIC1EQ0tfV1JFRlJFU0ggLURDS19ORVdURVJNIC1EU0VMRUNU IC1EU0VMRUNUX0ggXAotCS1ETk9HRVRVU0VSU0hFTEwgLUROT0xTVEFUIC1ETk9MSU5LQklUUyAt RFRDUFNPQ0tFVCBcCi0JLUROT19ETlNfU1JWIC1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19TU0wg LURDS19UUklHR0VSIFwKLQkkKFNTTElOQykgJChTU0xMSUIpICQoS0ZMQUdTKSIgXAotCSJMSUJT PSQoU1NMTElCKSAtbGN1cnNlcyAtbHNvY2tldCAtbHNzbCAtbGNyeXB0byAkKExJQlMpIiBcCi0J IkxOS0ZMQUdTPSQoTE5LRkxBR1MpIgotCi0jU0NPIE9wZW5TZXJ2ZXIgNS4wIHdpdGggZ2NjLCBu byBuZXR3b3JraW5nLgotI05vdGU6IE5PU1lTTE9HIHJlcXVpcmVkIGZvciBub24tbmV0IGVudHJp ZXMgYmVjYXVzZSBpdCByZXF1aXJlcyA8c29ja2V0Lmg+Ci1zY28zMnY1MDBnY2M6Ci0JQGVjaG8g VXNpbmcgZ2NjLi4uCi0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzY28zMnY1MDBDQz1nY2MgQ0My PWdjYyBcCi0JS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiS0ZMQUdTPSAkKEtGTEFHUykiCi0K LSNTQ08gT3BlblNlcnZlciA1LjAgd2l0aCBuZXR3b3JraW5nLCBnY2MuCi1zY28zMnY1MDBuZXRn Y2M6Ci0JQGVjaG8gVENQL0lQIG5ldHdvcmtpbmcgYWRkZWQgLSB1c2luZyBnY2MuLi4KLQkkKE1B S0UpICJNQUtFPSQoTUFLRSkiIHNjbzMydjUwMG5ldCBDQz1nY2MgQ0MyPWdjYyBcCi0JS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSAiS0ZMQUdTPSQoS0ZMQUdTKSIKLQotI1NDTyBPcGVuU2VydmVy IDUuMCB3aXRoIG5ldHdvcmtpbmcsIGdjYywgZWxmLgotc2NvMzJ2NTAwbmV0Z2NjZWxmOgotCUBl Y2hvIFRDUC9JUCBuZXR3b3JraW5nIGFkZGVkIC0gdXNpbmcgZ2NjLCBkeW5hbWljIGVsZiBsaWJy YXJ5Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzY28zMnY1MDBuZXQgIkNDPWdjYyIgIkNDMj1n Y2MiIFwKLQlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJLRkxBR1M9LU8zIC1iZWxmIiAiTE5L RkxBR1M9LWJlbGYiCi0KLXNjbzMydjUwMjoKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNjbzMy djUwMCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPS1EU0NPX09TUjUwMiAk KEtGTEFHUykiCi0KLSNTQ08gT3BlblNlcnZlciA1LjAuMiB3aXRoIG5ldHdvcmtpbmcsIFNDTyBk ZXZlbG9wbWVudCB0b29scy4KLXNjbzMydjUwMm5ldDoKLQlAZWNobyBUQ1AvSVAgbmV0d29ya2lu ZyBhZGRlZC4uLgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc2NvMzJ2NTAwbmV0IEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9LWIgZWxmIC1EU0NPX09TUjUwMiAkKEtGTEFH UykiCi0KLSNTQ08gT3BlblNlcnZlciA1LjAuNCAoU0NPIFVOSVggMy4ydjUuMC40KSB3aXRoIFND TyBkZXZlbG9wbWVudCB0b29scy4KLSNMaWtlIDUuMCwgYnV0IGFkZHMgaGlnaCBzZXJpYWwgc3Bl ZWRzLiAgRmlyc3QgUE9TSVgtYmFzZWQgU0NPIHZlcnNpb24uCi0jTm90ZTogdGhlIC1PIGZsYWcg aXMgZGVsaWJlcmF0ZWx5IG9taXR0ZWQgZm9yIC9iaW4vY2MgKD0gL3Vzci9jY3MvYmluL2NjKS4K LXNjbzMydjUwNDoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNDTyBPcGVu U2VydmVyIFJlbGVhc2UgNS4wLjQuLi4KLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtRERJUkVOVCAtREhEQlVVQ1AgLURTVlI0IC1EQ0tfU0NP VjUgLURDS19SVFNDVFMgXAotCS1EU0NPX09TUjUwNCAtYiBlbGYgLURQT1NJWCBcCi0JLURDS19D VVJTRVMgLURDS19XUkVGUkVTSCAtRENLX05FV1RFUk0gLURTRUxFQ1QgLURTRUxFQ1RfSCBcCi0J LUROT0dFVFVTRVJTSEVMTCAtRE5PTFNUQVQgLUROT0xJTktCSVRTIC1ETk9TWVNMT0cgJChLRkxB R1MpIiBcCi0JIkxJQlM9LWxjdXJzZXMgJChMSUJTKSIgIkxOS0ZMQUdTPSQoTE5LRkxBR1MpIgot Ci0jU0NPIE9wZW5TZXJ2ZXIgNS4wLjQgd2l0aCBnY2MsIG5vIG5ldHdvcmtpbmcuCi1zY28zMnY1 MDRnY2M6Ci0JQGVjaG8gVXNpbmcgZ2NjLi4uCi0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzY28z MnY1MDQgIkNDPWdjYyIgIkNDMj1nY2MiIFwKLQlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJL RkxBR1M9ICQoS0ZMQUdTKSIKLQotI1NDTyBPcGVuU2VydmVyIDUuMC40IHdpdGggbmV0d29ya2lu Zy4KLSNTQ08gZGV2ZWxvcG1lbnQgdG9vbHMgKC9iaW4vY2MgPSAvdXNyL2Njcy9iaW4vY2MpLgot I09wdGltaXphdGlvbiBkZWxpYmVyYXRlbHkgc3VwcHJlc3NlZC4KLXNjbzMydjUwNG5ldDoKLQlA ZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNDTyBPcGVuU2VydmVyIFJlbGVhc2Ug NS4wLjQuLi4KLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQki Q0ZMQUdTPSAtRERJUkVOVCAtREhEQlVVQ1AgLURTVlI0IC1EQ0tfU0NPVjUgLURDS19SVFNDVFMg XAotCS1EQ0tfQ1VSU0VTIC1EQ0tfV1JFRlJFU0ggLURDS19ORVdURVJNIC1EU0VMRUNUIC1EU0VM RUNUX0ggXAotCS1ETk9HRVRVU0VSU0hFTEwgLUROT0xTVEFUIC1ETk9MSU5LQklUUyAtRFRDUFNP Q0tFVCBcCi0JLWIgZWxmIC1EU0NPX09TUjUwNCAtRFBPU0lYIC1ETk9fRE5TX1NSViAkKEtGTEFH UykiIFwKLQkiTElCUz0tbGN1cnNlcyAtbHNvY2tldCAkKExJQlMpIiAiTE5LRkxBR1M9JChMTktG TEFHUykiCi0KLSNTQ08gT3BlblNlcnZlciA1LjAuNCB3aXRoIG5ldHdvcmtpbmcsIGdjYy4KLXNj bzMydjUwNG5ldGdjYzoKLQlAZWNobyBUQ1AvSVAgbmV0d29ya2luZyBhZGRlZCAtIHVzaW5nIGdj Yy4uLgotCUBlY2hvIElmIGdjYyBjcmFzaGVzIG9uIGNrd2FydC5jIHRoZW4gYnVpbGQgaXQgYnkg aGFuZDoKLQlAZWNobyAiIGdjYyAtbyB3YXJ0IC1EQ0tfU0NPVjUgY2t3YXJ0LmMiCi0JJChNQUtF KSAiTUFLRT0kKE1BS0UpIiBzY28zMnY1MDBuZXQgIkNDPWdjYyIgIkNDMj1nY2MiIFwKLQlLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJLRkxBR1M9LURTQ09fT1NSNTA0IC1EUE9TSVggJChLRkxB R1MpIgotCi0jU0NPIE9wZW5TZXJ2ZXIgNS4wLjQgd2l0aCBuZXR3b3JraW5nLCBnY2MsIGVsZi4K LXNjbzMydjUwNG5ldGdjY2VsZjoKLQlAZWNobyBUQ1AvSVAgbmV0d29ya2luZyBhZGRlZCAtIHVz aW5nIGdjYywgZHluYW1pYyBlbGYgbGlicmFyeQotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc2Nv MzJ2NTAwbmV0ICJDQz1nY2MiICJDQzI9Z2NjIgotCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g XAotCSJLRkxBR1M9LURTQ09fT1NSNTA0IC1EUE9TSVggLU8zIC1iZWxmICQoS0ZMQUdTKSIgXAot CUxOS0ZMQUdTPSItYmVsZiIKLQotI1NDTyBPcGVuU2VydmVyIDUuMC41IChTQ08gVU5JWCAzLjJ2 NS4wLjUpIHdpdGggU0NPIC9iaW4vY2MuCi0jTGlrZSA1LjAsIGJ1dCBhZGRzIGhpZ2ggc2VyaWFs IHNwZWVkcy4gIEZpcnN0IFBPU0lYLWJhc2VkIFNDTyB2ZXJzaW9uLgotI1lvdSBtaWdodCBoYXZl IHRvIGFkZCAiTElCUz0tbHRpbmZvIiAoc29tZSBkbywgc29tZSBkb24ndCkuCi1zY28zMnY1MDU6 Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzY28zMnY1MDAgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCi0JIktGTEFHUz0tRFNDT19PU1I1MDUgLUROT1NIQURPVyAtYiBlbGYgLURQT1NJWCAk KEtGTEFHUykiCi0KLSNTQ08gT3BlblNlcnZlciA1LjAuNSAoU0NPIFVOSVggMy4ydjUuMC41KSB3 aXRoIFNDTyBVREsuCi0jVGhpcyBvbmUgY2FuJ3Qgc2VlIHRoZSBoaWdoIHNlcmlhbCBzcGVlZHMg YW5kIGFueXRoaW5nIHRvIGRvIHdpdGggbW9kZW0KLSNzaWduYWxzIGRvZXNuJ3Qgd29yayBiZWNh dXNlIFVLRCBjYyBoYXMgaXRzIG93biBhbHRlcm5hdGl2ZSB1bml2ZXJzZSBvZgotI2hlYWRlciBm aWxlcy4KLXNjbzMydjUwNXVkazoKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNjbzMydjUwMCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPS1EU0NPX09TUjUwNSAtRERDTFRJ TUVWQUwgLUROT1NIQURPVyAtYiBlbGYgLURQT1NJWCAkKEtGTEFHUykiCi0KLSNTQ08gT3BlblNl cnZlciA1LjAuNSB3aXRoIG5ldHdvcmtpbmcsIFNDTyAvYmluL2NjLgotI1NlZSBjb21tZW50cyB3 aXRoIHNjbzMydjUwNSB0YXJnZXRzLgotc2NvMzJ2NTA1bmV0OgotCUBlY2hvIFRDUC9JUCBuZXR3 b3JraW5nIGFkZGVkLi4uCi0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzY28zMnY1MDBuZXQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0tRFNDT19PU1I1MDUgLUROT1NIQURP VyAtYiBlbGYgLURQT1NJWCAkKEtGTEFHUykiCi0KLSNTQ08gT3BlblNlcnZlciA1LjAuNSB3aXRo IG5ldHdvcmtpbmcgYW5kIE9wZW5TU0wsIFNDTyAvYmluL2NjLgotI1NlZSBjb21tZW50cyB3aXRo IHNjbzMydjUwNSB0YXJnZXRzLgotc2NvMzJ2NTA1bmV0K3NzbDoKLQlAZWNobyBUQ1AvSVAgbmV0 d29ya2luZyBhbmQgT3BlblNTTCBhZGRlZC4uLgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc2Nv MzJ2NTAwbmV0K3NzbCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPS1EU0NP X09TUjUwNSAtRE5PU0hBRE9XIC1iIGVsZiAtRFBPU0lYICQoS0ZMQUdTKSAiIFwKLQkiTElCUz0k KFNTTExJQikgLWxjdXJzZXMgLWxzb2NrZXQgLWxzc2wgLWxjcnlwdG8gJChMSUJTKSIgXAotCSJM TktGTEFHUz0kKExOS0ZMQUdTKSIKLQotI1NDTyBPcGVuU2VydmVyIDUuMC41IHdpdGggbmV0d29y a2luZywgU0NPIFVESy4KLSNTZWUgY29tbWVudHMgd2l0aCBhYm92ZSBzY28zMnY1MDUgdGFyZ2V0 cy4KLXNjbzMydjUwNXVka25ldDoKLQlAZWNobyBUQ1AvSVAgbmV0d29ya2luZyBhZGRlZC4uLgot CSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc2NvMzJ2NTAwbmV0IEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gXAotCSJLRkxBR1M9LURTQ09fT1NSNTA1IC1ERENMVElNRVZBTCAtRE5PU0hBRE9XIC1i IGVsZiAtRFBPU0lYICQoS0ZMQUdTKSIKLQotI1NDTyBPcGVuU2VydmVyIDUuMC41IHdpdGggZ2Nj LCBubyBuZXR3b3JraW5nLgotc2NvMzJ2NTA1Z2NjOgotCUBlY2hvIFVzaW5nIGdjYy4uLgotCSQo TUFLRSkgIk1BS0U9JChNQUtFKSIgc2NvMzJ2NTAwICJDQz1nY2MiICJDQzI9Z2NjIiBcCi0JS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFHUz0tRFNDT19PU1I1MDUgLURQT1NJWCAt ZnVuc2lnbmVkLWNoYXIgJChLRkxBR1MpIgotCi0jU0NPIE9wZW5TZXJ2ZXIgNS4wLjUgd2l0aCBn Y2MsIG5vIG5ldHdvcmtpbmcsIG5vIHNoYWRvdyBwYXNzd29yZHMuCi1zY28zMnY1MDV4Z2NjOgot CUBlY2hvIFVzaW5nIGdjYy4uLgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc2NvMzJ2NTAwICJD Qz1nY2MiICJDQzI9Z2NjIiBcCi0JS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIktGTEFH Uz0tRFNDT19PU1I1MDUgLUROT1NIQURPVyAtRFBPU0lYIC1mdW5zaWduZWQtY2hhciAkKEtGTEFH UykiCi0KLSNTQ08gT3BlblNlcnZlciA1LjAuNSB3aXRoIG5ldHdvcmtpbmcsIGdjYy4KLXNjbzMy djUwNW5ldGdjYzoKLQlAZWNobyBUQ1AvSVAgbmV0d29ya2luZyBhZGRlZCAtIHVzaW5nIGdjYy4u LgotCUBlY2hvIElmIGdjYyBjcmFzaGVzIG9uIGNrd2FydC5jIHRoZW4gYnVpbGQgaXQgYnkgaGFu ZDoKLQlAZWNobyAiIGdjYyAtbyB3YXJ0IC1EQ0tfU0NPVjUgY2t3YXJ0LmMiCi0JJChNQUtFKSAi TUFLRT0kKE1BS0UpIiBzY28zMnY1MDBuZXQgIkNDPWdjYyIgIkNDMj1nY2MiIFwKLQlLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPS1EU0NPX09TUjUwNSAtRE5PU0hBRE9XIC1E UE9TSVggLWZ1bnNpZ25lZC1jaGFyICQoS0ZMQUdTKSIKLQotI2VnY3MgaXMganVzdCBsaWtlIGdj YyBidXQgZ2VuZXJhdGVzIEVMRiBieSBkZWZhdWx0LgotI09yIHlvdSBjYW4gaW5jbHVkZSAtbWVs ZiAobm90IC1iZWxmKSB0byBmb3JjZSBpdC4KLXNjbzMydjUwNW5ldGVnY3M6Ci0JJChNQUtFKSAi TUFLRT0kKE1BS0UpIiAiS0ZMQUdTPSQoS0ZMQUdTKSIgc2NvMzJ2NTA1bmV0Z2NjIFwKLQlLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9Ci0KLSNTQ08gT3BlblNlcnZlciA1LjAuNSB3aXRoIG5ldHdv cmtpbmcsIGdjYywgZWxmLgotc2NvMzJ2NTA1bmV0Z2NjZWxmOgotCUBlY2hvIFRDUC9JUCBuZXR3 b3JraW5nIGFkZGVkIC0gdXNpbmcgZ2NjLCBkeW5hbWljIGVsZiBsaWJyYXJ5Ci0JJChNQUtFKSAi TUFLRT0kKE1BS0UpIiBzY28zMnY1MDBuZXQgIkNDPWdjYyIgIkNDMj1nY2MiIFwKLQkiS0ZMQUdT PS1EU0NPX09TUjUwNSAtRFBPU0lYIC1mdW5zaWduZWQtY2hhciAtTzMgLWJlbGYgJChLRkxBR1Mp IiBcCi0JS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBMTktGTEFHUz0iLWJlbGYiCi0KLSNTQ08g T3BlblNlcnZlciA1LjAuNiB3aXRoIFNDTyAvYmluL2NjLgotIyBBZGQgLUREQ0xUSU1FVkFMIHdo ZW4gYnVpbGRpbmcgd2l0aCBVREsuCi0jTGlrZSA1LjAuNS4gICBJTVBPUlRBTlQ6IFVzZSBzY28z MnY1MDZhIHRhcmdldCBmb3IgNS4wLjZhLgotc2NvMzJ2NTA2OgotCSQoTUFLRSkgIk1BS0U9JChN QUtFKSIgc2NvMzJ2NTAwIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9LURT Q09fT1NSNTA1IC1EU0NPX09TUjUwNiAtYiBlbGYgLURQT1NJWCAkKEtGTEFHUykiCi0KLSNTQ08g T3BlblNlcnZlciA1LjAuNiB3aXRoIG5ldHdvcmtpbmcsIFNDTyAvYmluL2NjLgotIyBBZGQgLURE Q0xUSU1FVkFMIHdoZW4gYnVpbGRpbmcgd2l0aCBVREsuCi0jIElNUE9SVEFOVDogVXNlIHNjbzMy djUwNmEgdGFyZ2V0IGZvciA1LjAuNmEuCi1zY28zMnY1MDZuZXQ6Ci0JQGVjaG8gVENQL0lQIG5l dHdvcmtpbmcgYWRkZWQuLi4KLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNjbzMydjUwMG5ldCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPS1EU0NPX09TUjUwNSAtRFNDT19P U1I1MDYgLWIgZWxmIC1EUE9TSVggJChLRkxBR1MpIgotCi0jU0NPIE9wZW5TZXJ2ZXIgNS4wLjZh LCBubyBuZXR3b3JraW5nLCBTQ08gZGV2ZWxvcG1lbnQgdG9vbHMuCi0jVGhpcyBvbmUgaGFzIHBh dGNoZWQgc2lvIGRyaXZlcnMgdGhhdCwgZm9yIHRoZSBmaXJzdCB0aW1lLAotI2FjdHVhbGx5IGhh bmRsZSBtb2RlbSBzaWduYWxzIGNvcnJlY3RseS4KLSMgQWRkIC1ERENMVElNRVZBTCB3aGVuIGJ1 aWxkaW5nIHdpdGggVURLLgotc2NvMzJ2NTA2YToKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNj bzMydjUwMCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPS1EU0NPX09TUjUw NSAtRFNDT19PU1I1MDYgLURTQ09fT1NSNTA2QSAtRE5FRURNRE1ERUZTIFwKLQktYiBlbGYgLURQ T1NJWCAkKEtGTEFHUykiCi0KLSNTQ08gT3BlblNlcnZlciA1LjAuNmEgd2l0aCBuZXR3b3JraW5n LCBTQ08gZGV2ZWxvcG1lbnQgdG9vbHMuCi0jIEFkZCAtRERDTFRJTUVWQUwgd2hlbiBidWlsZGlu ZyB3aXRoIFVESy4KLXNjbzMydjUwNmFuZXQ6Ci0JQGVjaG8gVENQL0lQIG5ldHdvcmtpbmcgYWRk ZWQuLi4KLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNjbzMydjUwMG5ldCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKLQkiS0ZMQUdTPS1EU0NPX09TUjUwNSAtRFNDT19PU1I1MDYgLURTQ09f T1NSNTA2QSAtRE5FRURNRE1ERUZTIFwKLQktYiBlbGYgLURQT1NJWCAkKEtGTEFHUykiCi0KLSNT Q08gT3BlblNlcnZlciA1LjAuNywgbm8gbmV0d29ya2luZywgU0NPIGRldmVsb3BtZW50IHRvb2xz LgotI0FkZHMgZmxhZ3MgdG8gbWFrZSBQVFkgYW5kIFNTSCBjb21tYW5kcyB3b3JrLiAgVGhlc2Ug aGF2ZSBiZWVuIHRlc3RlZAotI29ubHkgaW4gNS4wLjcgYnV0IHByb2JhYmx5IHRoZXkgY2FuIGFs c28gYmUgYWRkZWQgdG8gZWFybGllciBPU1I1IHRhcmdldHMuCi1zY28zMnY1MDc6Ci0JJChNQUtF KSAiTUFLRT0kKE1BS0UpIiBzY28zMnY1MDAgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0J IktGTEFHUz0tRFNDT19PU1I1MDUgLURTQ09fT1NSNTA2IC1EU0NPX09TUjUwNyAtRE5FRURNRE1E RUZTIFwKLQktREhBVkVfUFRTTkFNRSAtREhBVkVfUFRNWCAtREhBVkVfR1JBTlRQVCBcCi0JLWIg ZWxmIC1EUE9TSVggJChLRkxBR1MpIgotCi0jU0NPIE9wZW5TZXJ2ZXIgNS4wLjcgYXMgYWJvdmUg YnV0IHdpdGggbmV0d29ya2luZy4KLXNjbzMydjUwN25ldDoKLQlAZWNobyBUQ1AvSVAgbmV0d29y a2luZyBhZGRlZC4uLgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc2NvMzJ2NTAwbmV0IEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJLRkxBR1M9LURTQ09fT1NSNTA1IC1EU0NPX09TUjUw NiAtRFNDT19PU1I1MDcgLURORUVETURNREVGUyBcCi0JLURIQVZFX1BUU05BTUUgLURIQVZFX1BU TVggLURIQVZFX0dSQU5UUFQgXAotCS1iIGVsZiAtRFBPU0lYICQoS0ZMQUdTKSIKLQotI1NDTyBP cGVuU2VydmVyIDYgKG5ldyB0YXJnZXQgMzAgSmFuIDIwMDYpCi1zY29fb3NyNjAwIHNjbzYwMDoK LQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNDTyBPcGVuU2VydmVyIDYuMC4w Li4uCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFH Uz0gLU8gLURESVJFTlQgLURIREJVVUNQIC1EU1ZSNCAtRENLX1NDT1Y1IC1EQ0tfUlRTQ1RTIFwK LQktRENLX0NVUlNFUyAtRENLX1dSRUZSRVNIIC1EQ0tfTkVXVEVSTSAtRFNFTEVDVCAtRFNFTEVD VF9IIFwKLQktRE5PR0VUVVNFUlNIRUxMIC1ETk9MU1RBVCAtRE5PTElOS0JJVFMgLURUQ1BTT0NL RVQgXAotCS1ETk9fRE5TX1NSViAtRFNDT19PU1I1MDUgLURTQ09fT1NSNTA2IC1EU0NPX09TUjUw NyAtRE5FRURNRE1ERUZTIFwKLQktREhBVkVfUFRTTkFNRSAtREhBVkVfUFRNWCAtREhBVkVfR1JB TlRQVCAtRERDTFRJTUVWQUwgXAotCS1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklMRV9PRkZTRVRf QklUUz02NCBcCi0JLURTT0NLT1BUX1Q9c29ja2xlbl90IC1ER1NPQ0tOQU1FX1Q9c2l6ZV90IC1E R1BFRVJOQU1FX1Q9c2l6ZV90IFwKLQktREhFUkFMRD1cIlxcXCIgU0NPIE9wZW5TZXJ2ZXIgYHVu YW1lIC12YFxcXCJcIiBcCi0JLWIgZWxmIC1EUE9TSVggJChLRkxBR1MpIiBcCi0JIkxJQlM9LWxj dXJzZXMgLWxzb2NrZXQgJChMSUJTKSIgIkxOS0ZMQUdTPSQoTE5LRkxBR1MpIgotCi0jVGFuZHkg MTYvNjAwMCB3aXRoIFhlbml4IDMuMCAoMTYgYml0cykKLSNDLUtlcm1pdCA3LjAgKGFuZCBsYXRl cikgZG8gbm90IGJ1aWxkIGhlcmU7ICJ0b28gbWFueSBkZWZpbmVzIi4KLSNBZGQgbW9yZSAtRE5P eHh4IG9wdGlvbnMgdG8gcmVtb3ZlIGZlYXR1cmVzIGlmIHByb2dyYW0gd29uJ3QgbG9hZC4KLSNT dWNjZXNzZnVsIG9wZXJhdGlvbiBpcyBhIGZ1bmN0aW9uIG9mIHByb2dyYW0gc2l6ZSwgcGh5c2lj YWwgbWVtb3J5LAotI2F2YWlsYWJsZSBzd2FwIHNwYWNlLCBldGMuICBUaGUgZm9sbG93aW5nIHN0 cmlwcGVkLWRvd24gY29uZmlndXJhdGlvbgotI3NlZW1zIHRvIHdvcmsgb24gbW9zdCBUYW5keSA2 MDAwcy4gIE5PVEU6ICItKyIgbWVhbnMgYWxsb3cgbG9uZyB2YXJpYWJsZQotI25hbWVzLCBuZWVk ZWQgZm9yIEMtS2VybWl0IDYuMCBiZWNhdXNlIHNvbWUgaWRlbnRpZmllcnMgYXJlIG5vdCB1bmlx dWUKLSN3aXRoaW4gdGhlIGZpcnN0IHNpeCBjaGFyYWN0ZXJzLgotdHJzMTY6Ci0JQGVjaG8gJ01h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgVGFuZHkgMTYvNjAwMCwgWGVuaXggMy4wLi4uJwot CSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSJDRkxBR1MgPSAt KyAtREFUVFNWIC1EVFJTMTYgLUROT01LRElSIC1ERENMUE9QRU4gLURDS19DVVJTRVMgXAotCS1E Tk9ERUJVRyAtRE5PVExPRyAtRE5PSEVMUCAtRE5PU0NSSVBUIC1ETk9DU0VUUyAtRE5PSUtTRCBc Ci0JLUROT1JFRElSRUNUIC1ETk9TWVNMT0cgLUROT1BVVEVOViAtRE5PUkVBTFBBVEggLUROT0xF QVJOIFwKLQkkKEtGTEFHUykgLU8iICJMSUJTPSAtbGN1cnNlcyAtbHRlcm1jYXAiICJMTktGTEFH UyA9IC0rIC1uIC1zIgotCi0jIFFOWCA0LjIxIGFuZCBhYm92ZSwgMzItYml0IHZlcnNpb24sIFdh dGNvbSBDMzIgMTAuNiwgZnVsbHkgY29uZmlndXJlZCwKLSMgZXhjZXB0IG5vIGpvYiBjb250cm9s IGJlY2F1c2UgUU5YIDQueCBkb2VzIG5vdCBzdXBwb3J0IGl0LiAgTmV3IE5DVVJTRVMKLSMgbGli cmFyeSB1c2VkIGluc3RlYWQgb2YgQ1VSU0VTLgotIwotIyAtT2F0eCBvcHRpbWl6ZXMgdG8gZmF2 b3Igc3BlZWQgb3ZlciBzaXplOiBsb29wIG9wdGltaXphdGlvbiwgaW5saW5lIGZuJ3MuCi0jIC1P cyBmYXZvcnMgc2l6ZSBvdmVyIHNwZWVkLiAgU2F2ZXMgMzAtNDBLIG91dCBvZiBhYm91dCAxLjc1 TS4KLSMgLTNyID0gZ2VuZXJhdGUgMzg2IGNvZGUgd2l0aCByZWdpc3Rlci1iYXNlZCBhcmcgcGFz c2luZy4KLSMgLTNzID0gZ2VuZXJhdGUgMzg2IGNvZGUgd2l0aCBzdGFjay1iYXNlZCBhcmcgcGFz c2luZy4KLSMgLW1zID0gc2VwYXJhdGUgY29kZSAmIGRhdGEgNEdCIHNlZ21lbnRzICgzMi1iaXQg YnVpbGRzIG9ubHkpLgotIyAtbWYgPSBmbGF0IG1lbW9yeSBtb2RlbCBjb2RlK2RhdGEgaW4gb25l IDRHQiBzZWdtZW50IChkaXR0bykuCi0jIC16YyA9IHBsYWNlIGxpdGVyYWwgc3RyaW5ncyBpbiBj b2RlIHNlZ21lbnQuCi0jIC1ONE0gPSBCaWcgc3RhY2sgKGluY3JlYXNlIHRoZSBkaWdpdCB1cG9u IFNJR1NFR1ZzIGF0IHJ1bnRpbWUpLgotIyBjaGFycyBhcmUgdW5zaWduZWQgYnkgZGVmYXVsdCAo LWogbWFrZXMgdGhlbSBzaWduZWQgYnkgZGVmYXVsdCkuCi0jIC1OT1VVQ1AgaXMgaW5jbHVkZWQg YmVjYXVzZSBRTlggZG9lc24ndCB1c2UgaXQuCi0jIEFkZCB0aGVzZSB0byB0aGUgZW5kIGlmIHlv dSBsaWtlIGJ1dCB0aGV5IGR1bXAgY29yZSBvbiBteSBRTlggNC4yNSBzeXN0ZW06Ci0jCi0jCUB3 ZXJtaXQgLWggPnVzZS5xbngKLSMJQHVzZW1zZyB3ZXJtaXQgdXNlLnFueAotIwlAcm0gdXNlLnFu eAotIwotIyBJZiB5b3UgZ2V0IHdhcm5pbmdzIGFib3V0IEhFQURFUiBvciBDX0lOIGFkZCAtRE5P X0ROU19TUlYuCi0jIE9LIDIwMTEvMDYvMTQKLXFueDMyOgotCUBlY2hvICdNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIFFOWCA0LjJ4LCAzMi1iaXQuLi4nCi0JJChNQUtFKSB4ZXJtaXQgXAot CSJMTktGTEFHUyA9IC1ONE0gLTNyIiBcCi0JIkNGTEFHUyA9IC1tcyAtM3IgLURRTlggLURUQ1BT T0NLRVQgLURDS19DVVJTRVMgLUROT0dFVFVTRVJTSEVMTCBcCi0JLURDS19XUkVGUkVTSCAtRENL X1JFRElSIC1EU0VMRUNUIC1EU0VMRUNUX0ggLURDS19SVFNDVFMgLUROT0pDIFwKLQktRE5PSU5J VEdST1VQUyAtRE5PVVVDUCAtRENLX0FOU0lDIC1EUElEX1Q9cGlkX3QgLU9hdHggLXpjICQoS0ZM QUdTKSIgXAotCSJMSUJTPSAtbHNvY2tldCAtbG5jdXJzZXMgLWx0ZXJtY2FwIgotCi0jIEFzIGFi b3ZlIGJ1dCBubyBuZXR3b3JraW5nIHNpbmNlIHNvbWUgUU5YIHN5c3RlbXMgZG8gbm90IGhhdmUg VENQL0lQCi0jIGluc3RhbGxlZCwgb3IgdGhlIFRDUC9JUCBkZXZlbG9wZXJzIGtpdCwgd2hpY2gg aW5jbHVkZXMgYWxsIHRoZSBuZWVkZWQKLSMgaGVhZGVyIGZpbGVzLiAgVGhpcyBlbnRyeSBoYXMg bm90IGJlZW4gdGVzdGVkIG9uIGEgUU5YIHN5c3RlbSB0aGF0LCBpbgotIyBmYWN0LCBkb2VzIG5v dCBoYXZlIFRDUC9JUCBpbnN0YWxsZWQ7IHNvbWUgYWRqdXN0bWVudHMgbWlnaHQgYmUgbmVjZXNz YXJ5LAotIyBpbiBwYXJ0aWN1bGFyIHJlZ2FyZGluZyB0aGUgdXNlIG9mIHNlbGVjdCgpOiBpcyAt bHNvY2tldCBuZWVkZWQsIGNhbiB3ZQotIyBnZXQgdGhlIG5lZWRlZCBkZWZpbml0aW9ucyBmcm9t IG5vbi1UQ1AvSVAgaGVhZGVyIGZpbGVzIChGRF9TRVQsIGV0Yyk/Ci1xbngzMm5vbmV0OgotCUBl Y2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFFOWCA0LjJ4LCAzMi1iaXQsIG5vIG5l dC4uLicKLQkkKE1BS0UpIHhlcm1pdCBcCi0JIkxOS0ZMQUdTID0gLU40TSAtM3IiIFwKLQkiQ0ZM QUdTID0gLTNyIC1tcyAtRFFOWCAtRE5PTkVUIC1ETk9JS1NEIC1EQ0tfQ1VSU0VTIFwKLQktRENL X1dSRUZSRVNIIC1EQ0tfUkVESVIgLURTRUxFQ1QgLURTRUxFQ1RfSCAtRENLX1JUU0NUUyAtRE5P SkMgXAotCS1ETk9VVUNQIC1EQ0tfQU5TSUMgLURQSURfVD1waWRfdCAtT2F0eCAtemMgJChLRkxB R1MpIiBcCi0JIkxJQlM9IC1sc29ja2V0IC1sbmN1cnNlcyAtbHRlcm1jYXAiCi0JQHdlcm1pdCAt aCA+dXNlLnFueAotCUB1c2Vtc2cgd2VybWl0IHVzZS5xbngKLQlAcm0gdXNlLnFueAotCi0jIFN5 bm9ueW0gZm9yIHFueDMyLgotcW54OgotCSQoTUFLRSkgcW54MzIgIktGTEFHUz0kKEtGTEFHUyki Ci0KLSMgUU5YIDQuMjEgYW5kIGFib3ZlLCAxNi1iaXQgdmVyc2lvbiwgV2F0Y29tIEMgOC41IC0g YW5kIGhpZ2hlciBvbiBpMjg2IFBDcwotIyBhbmQgYWJvdmUuCi0jCi0jCUlNUE9SVEFOVDogRG8g bm90IHVzZSBXYXRjb20gQyAxMC42ISEhCi0jCUlmIHlvdSBoYXZlIGl0IGluc3RhbGxlZCwgYWRk ICItdjkuNTIgdG8gQ0ZMQUdTIgotIwotIyBOT1RFOiBRTlggNC4yMyBvbndhcmQgZG9lcyBub3Qg d29yayBvbiAyODYncyBhbnl3YXkuCi0jIFN0YWNrc2l6ZSAyNjAwMCwgb2JqZWN0cyBsYXJnZXIg dGhhbiAxMDAgYnl0ZXMgaW4gdGhlaXIgb3duIHNlZ21lbnRzLAotIyBzdHJpbmcgY29uc3RhbnRz IHRvIHRoZSBjb2Rlc2VnbWVudCwgZXRjLiAgRnVsbHkgY29uZmlndXJlZCBleGNlcHQgam9iIGN0 cmwuCi0jIFRoaXMgZW50cnkgd29ya3MgZm9yIGJ1aWxkaW5nIGEgMTYtYml0IGV4ZWN1dGFibGUg b24gYSAzMi1iaXQgc3lzdGVtLCBidXQKLSMgaGFzIG5vdCBiZWVuIHRlc3RlZCBvbiBhIDE2LWJp dCBzeXN0ZW0uICBVc2VzIGxhcmdlIG1lbW9yeSBtb2RlbCwgbGlua3MKLSMgZXhwbGljaXRseSB3 aXRoIGxhcmdlLW1vZGVsIHNvY2tldHMgbGlicmFyeS4gIENvcnJlY3QtbW9kZWwgY3Vyc2VzIGxp YnJhcnkKLSMgaXMgY2hvc2VuIGF1dG9tYXRpY2FsbHkuICBTZWUgY29tbWVudCBpbiBxbngzMiBl bnRyeSBhYm91dCAtRE5PVVVDUC4KLSMKLSMgV0FSTklORzoKLSMKLSMgV2F0Y29tIEMgcHJpb3Ig dG8gMTAuNiBuZXZlciBoYWQgcmVsZWFzZWQgY3Vyc2VzIGxpYnJhcnkuIFRvIGxpbmsgYWdhaW5z dCBpdCwKLSMgeW91IG11c3Qgb2J0YWluIHBvcnRlZCBmcmVlIGN1cnNlcyBzb3VyY2UgZnJvbSBm dHA6Ly9mdHAucW54LmNvbS91c3IvZnJlZSwKLSMgdGhlbiBjb21waWxlIGFuZCBidWlsZCBsaWJy YXJ5IChjdXJzZXNsLmxpYikgYW5kIHBsYWNlIGl0IGluIC91c3IvbGliLiAgWW91Ci0jIG11c3Qg YWxzbyBjb3B5IGN1cnNlcy5oIHRvIC91c3IvaW5jbHVkZS4gIEJlIGF3YXJlIHRoYXQgaWYgeW91 IGhhdmUgV2F0Y29tCi0jIDEwLjYgaW5zdGFsbGVkLCB5b3Ugc2hvdWxkIGFscmVhZHkgaGF2ZSBj dXJzZXMuaCwgd2hpY2ggaXMgdGhlIG5ldyBuY3Vyc2VzCi0jIGxpYnJhcnkuIFlvdSBtdXN0IGJh Y2sgaXQgdXAgYW5kIHVzZSBmcmVlIGN1cnNlcy5oIGluc3RlYWQsIHNpbmNlIG5jdXJzZXMgaXMK LSMgb25seSBmb3IgMzItYml0IGFwcGxpY2F0aW9ucyBhbmQgc29tZSBkZWZpbml0aW9ucyBpbiB0 aGVzZSBmaWxlcyBhcmUKLSMgZGlmZmVyZW50IChlLmcuLCBjbGVhcm9rKCkpLiAgRm9yIHNhZmV0 eSwgY3Vyc2VzIGlzIG5vdCBkZWZpbmVkIGluIGJ1aWxkLgotIwotIyBJbiA3LjAgLUROT0hFTFAg YWRkZWQgdG8ga2VlcCBja3V1czIuYyBmcm9tIGJsb3dpbmcgdXA7IE5PQ1NFVFMgYW5kIE5PU1BM Ci0jIGFkZGVkIGJlY2F1c2UgY2t1dXM0IHdhcyBibG93aW5nIHVwLCBhbmQgTk9GTE9BVCBqdXN0 IGJlY2F1c2UgaXQgc2VlbWVkCi0jIGRhbmdlcm91cyAocmVtb3ZlIC1ETk9GTE9BVCBpZiB5b3Ug d2FudCB0byB0cnkgaXQpLCBUaGUgcmVzdWx0IHdvcmtzIE9LCi0jIGV4Y2VwdCBmb3Igc29tZSBt eXN0ZXJpb3VzIGJlZXBzIHVwb24gdGVybWluYXRpb24gb2YgdGhlIHRvcC1sZXZlbCBrZXl3b3Jk LgotIwotIyBUaGluZ3MgdG8gdHJ5IG5leHQgdGltZSB3ZSBnZXQgaW4gdHJvdWJsZToKLSMgIC4g Q2hhbmdlIC16dDEwMCB0byBzb21ldGhpbmcgc21hbGxlciBsaWtlIC16dDI1Ci0jICAuIENoYW5n ZSAtT2F0eCB0byAtT21pbGVyYXQgKGVuYWJsZSBzdGFjayBjaGVja2luZykKLSMgIC4gTWF5YmUg Z2V0IHJpZCBvZiAtdjkuNTIgLS0gaXQncyBvbmx5IHRoZXJlIGJlY2F1c2Ugd2Ugd2VyZSB3YXJu ZWQuCi0jCi1xbngxNjoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBRTlgg NC4yMSwgMTYtYml0Li4uJwotCSQoTUFLRSkgeGVybWl0IFwKLQkiTE5LRkxBR1MgPSAtMiAtbWwg LU4gMjYwMDAiIFwKLQkiQ0ZMQUdTID0gLTIgLU9hdHggLXpjIC16dDEwMCAtbWwgLURRTlggLURR TlgxNiAtRE5PVVVDUCAtRE5PSEVMUCBcCi0JLURDS19SRURJUiAtRFNFTEVDVCAtRFNFTEVDVF9I IC1ETk9KQyAtRE5PR0VUVVNFUlNIRUxMIC1ETk9DU0VUUyBcCi0JLXY5LjUyIC1EVENQU09DS0VU IC1EQ0tfUlRTQ1RTIC1EQ0tfQU5TSUMgLUROT0lOSVRHUk9VUFMgLUROT0tWRVJCUyBcCi0JLURO T1JBTkRPTSAtRE5PQ1NFVFMgLUROT1NQTCAtRE5PRkxPQVQgLURQSURfVD1waWRfdCAkKEtGTEFH UykiCi0KLSMgUU5YIDQuMSwgMTYtYml0IHZlcnNpb24sIHdpdGggV2F0Y29tIEMgOC41IG9uIGky ODYgUENzIGFuZCBhYm92ZS4KLSMgc3RhY2tzaXplIDI2MDAwLCBvYmplY3RzIGxhcmdlciB0aGFu IDEwMCBieXRlcyBpbiB0aGVpciBvd24gc2VnbWVudHMsCi0jIHN0cmluZyBjb25zdGFudHMgdG8g dGhlIGNvZGVzZWdtZW50LCBldGMuICBBZGQgLUROT1VVQ1AgaWYgZGVzaXJlZC4KLXFueDE2XzQx OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFFOWCA0LjEsIDE2LWJpdC4u LicKLQkkKE1BS0UpIHhlcm1pdCBcCi0JIkxOS0ZMQUdTID0gLW1oIC1OIDI2MDAwIiAiQ0ZMQUdT ID0gLVdjLC1mcGMgLVdjLC1qIC1ETk9HRVRVU0VSU0hFTEwgXAotCS1XYywtT2xzIC1XYywtemRm IC1XYywtemMgLVdjLC16dDEwMCAtbWggLURQT1NJWCAtRFFOWCAtRERJUkVOVCBcCi0JLUROT0NZ UklMIC1ETk9ERUJVRyAtRE5PTVNFTkQgLURNSU5JRElBTCAtRE5PWE1JVCAtRE5PU0NSSVBUIC1E Tk9TUEwgXAotCS1ETk9TRVRLRVkgLUROT0lOSVRHUk9VUFMgLURRTlgxNiAtRFBJRF9UPXBpZF90 ICQoS0ZMQUdTKSIKLQotIyBRTlggTmV1dHJpbm8gMiAocHdhZWNodGxlckBxbnguZGUpIGNyb3Nz Y29tcGlsZWQgb24gUU5YIDQuMjUuCi0jIEdldHMgbG90cyBvZiBjb21waWxlciB3YXJuaW5ncy4K LXFueF9udG8yKzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBRTlggTmV1 dHJpbm8gMisgJwotCWNjIC1vIHdhcnQgY2t3YXJ0LmMKLQkkKE1BS0UpIHhlcm1pdCBcCi0JIkND ID0gcWNjIC1WZ2NjX250b3g4NiIgXAotCSJDQzIgPSBxY2MgLVZnY2NfbnRveDg2IiBcCi0JIkxO S0ZMQUdTID0gIiBcCi0JIkNGTEFHUyA9IC1ETkVVVFJJTk8gLURUQ1BTT0NLRVQgLURDS19DVVJT RVMgLUROT0dFVFVTRVJTSEVMTCBcCi0JLUROT1VVQ1AgLURDS19XUkVGUkVTSCAtRENLX1JFRElS IC1EU0VMRUNUIC1EU0VMRUNUX0ggLURDS19SVFNDVFMgXAotCS1ETk9KQyAtRE5PSU5JVEdST1VQ UyAtRENLX0FOU0lDIC1EUElEX1Q9cGlkX3QgLURVTklYIC1ERElSRU5UIFwKLQktRE1ZUkVBRCAt REJTRDQ0T1JQT1NJWCAtRFNWT1JQT1NJWCAtRE5ER1BXTkFNICQoS0ZMQUdTKSIgXAotCSJMSUJT PSAtbHNvY2tldCAtbG5jdXJzZXMgIgotCi0jIFFOWCA2ICg9IE5ldXRyaW5vIDIueHgpIG5hdGl2 ZSBidWlsZCAoa2lydXNzZWxAY2lzY28uY29tKS4KLXFueDY6Ci0JQGVjaG8gJ01ha2luZyBDLUtl cm1pdCAkKENLVkVSKSBmb3IgUU5YNicKLQkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPVFOWDYgXAot CSJDRkxBR1MgPSAtRFBPU0lYIC1EQ0tfUE9TSVhfU0lHIC1ETkVUUFRZIC1ETk9BUlJPV0tFWVMg XAotCS1EVVNFX1RJT0NTRFRSIC1EQklHQlVGT0sgLURDS01BWE9QRU49MTAwIC1EUkxPR0NPREUg LUROT1JFQUxQQVRIIFwKLQktRE1BWE5BTUxFTj00OCAtRFFOWDYgLURVU0VfVEVSTUlPIC1ESU5J VF9TUFRZIFwKLQktRENLX0NVUlNFUyAtRENLX1dSRUZSRVNIIC1EQ0tfTkVXVEVSTSAtRERZTkFN SUMgXAotCS1EVENQU09DS0VUIC1ETk9HRVRVU0VSU0hFTEwgLURDS19SRURJUiAtRFNFTEVDVCAt RFNFTEVDVF9IIFwKLQktRENLX1JUU0NUUyAtRE5PSkMgLURTVk9SUE9TSVggLURCU0Q0NE9SUE9T SVggLUROT1VVQ1AgLURDS19BTlNJQyBcCi0JJChLRkxBR1MpIC1PIiBcCi0JIkxJQlM9IC1sc29j a2V0ICAtbG5jdXJzZXMiCi0KLSNNSU5JWC8yLjAgMzIgQml0IHZlcnNpb24gZm9yIGludGVsIDM4 NisgcnVubmluZyB0aGUgUE9TSVgtY29tcGxpYW50IE1JTklYCi0jIHZlcnNpb24gMi4wIChUaGUg ZGVmaW5pdGlvbiBvZiBmYXRhbCBhdm9pZHMgYSBjb25mbGljdCB3aXRoIGEgc3ltYm9sIGJ5Ci0j IHRoZSBzYW1lIG5hbWUgaW4gdGhlIGN1cnNlcyBsaWJyYXJ5LikgSXQgaXMgaW1wb3NzaWJsZSB0 byBjb21waWxlIHdpdGgKLSMgbmV0d29yayBzdXBwb3J0IHNpbmNlIE1pbml4IGRvZXMgbm90IHN1 cHBvcnQgQmVya2VsZXkgc29ja2V0cy4KLSMgTm90ZTogdXNlIGNobWVtIGxpYmVyYWxseSBvbiB0 aGUgY29tcGlsZXIgcGFzc2VzLCBtYWtlLCBhbmQgdGhlIGZpbmFsCi0jIGtlcm1pdCBleGVjdXRh YmxlLiAoMyBtZWdhYnl0ZXMgb2YgbWVtb3J5IGZvciBlYWNoIGlzIHN1ZmZpY2llbnQuKQotIyBG cm9tIFRlcnJ5IE1jQ29ubmVsbCwgU3lyYWN1c2UgVSwgYW5kIFdpbGwgUm9zZS4gIFdpbGwgc2F5 czoKLSMgVGhlIHN0YWNrcyBmb3IgbWFrZSBhbmQgc29tZSBjb21waWxlciBwYXNzZXMgbmVlZGVk IHRvIGJlIGluY3JlYXNlZAotIyB3aXRoIGNobWVtIGFzIGZvbGxvd3M6Ci0jICAgbWFrZSAxTUIK LSMgICAvdXNyL2xpYi9lbV9jZW1jb20uYW5zaSAzTUIKLSMgICAvdXNyL2xpYi9lbV9vcHQgMU1C Ci0jICAgL3Vzci9saWIvaTM4Ni9jZyAxTUIKLSMgICAvdXNyL2xpYi9pMzg2L2FzIDFNQgotIyBU aGUgY29tcGlsZXIgdGVtcG9yYXJ5IGRpcmVjdG9yeSB3YXMgc2V0IHRvIC91c3IvdG1wIHZpYSB0 aGUgVE1QRElSCi0jIGVudmlyb25tZW50IHZhcmlhYmxlOyBtb3JlIHRoYW4gMU1CIG9mIHRlbXBv cmFyeSBzcGFjZSB3YXMgbmVlZGVkLgotIyBLZXJtaXQgaXRzZWxmIG5lZWRzIGF0IGxlYXN0IDFN QiBvZiBzdGFjay4KLW1pbml4MjA6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBm b3IgTUlOSVggMi4wLzM4Ni4uLicKLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9IEVYVD1vIFwKLQkiQ0ZMQUdTPSAgLXdvIC1EVjcgLURNSU5JWDIgLURNSU5JWCAtRFNJ R19WIC1EX1BPU0lYX1NPVVJDRSBcCi0JLURDS0NQVT1cXFwiaS0zODZcXFwiIC1ETk9JS1NEIC1E ZmF0YWw9bXlmYXRhbCAtRENLX0NVUlNFUyAtRE5PTEVBUk4gXAotCS1ETk9TWVNMT0cgLURVU0Vf TUVNQ1BZIC1ETk9SRUFMUEFUSCAkKEtGTEFHUykiICJMSUJTPSAtbGN1cnNlcyIKLQotI01JTklY LzM4NiAoUEMgTWluaXggbW9kaWZpZWQgYnkgQnJ1Y2UgRXZhbnMgaW4gQXVzdHJhbGlhIGZvciAz ODYgYWRkcmVzc2luZykKLSMgRm9yIE1JTklYIDEuNSsgKGJ1dCA8IDIuMCkKLW1pbml4Mzg2Ogot CUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE1JTklYLzM4Ni4uLicKLQlAZWNo byAnVE9UQUxMWSBVTlRFU1RFRCEnCi0JJChNQUtFKSB3ZXJtaXQgRVhUPXMgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUz0gLURWNyAtRE1JTklYIC1EX1BPU0lYX1NPVVJDRSAt RE5PTEVBUk4gJChLRkxBR1MpIgotCi0jTUlOSVgvMzg2IE1pbml4IG1vZGlmaWVkIGJ5IEJydWNl IEV2YW5zIGluIEF1c3RyYWxpYSB0byB1c2UgMzg2IGFkZHJlc3NpbmcKLW1pbml4Mzg2Z2NjOgot CUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE1JTklYLzM4NiB3aXRoIGdjYy4u LicKLQlAZWNobyAnVE9UQUxMWSBVTlRFU1RFRCEnCi0JJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSAiQ0M9Z2NjIC1nIC1PIiAiQ0MyPWdjYyAtZyIgXAotCSJDRkxBR1M9 IC1EVjcgLURNSU5JWCAtRF9QT1NJWF9TT1VSQ0UgLUROT0xFQVJOICQoS0ZMQUdTKSIKLQotI01J TklYIC0gNjhrIHZlcnNpb24gd2l0aCBBQ0sgY29tcGlsZXIuCi0jIElmIHlvdSBoYXZlIHRyb3Vi bGUgY29tcGlsaW5nIG9yIHJ1bm5pbmcgd2FydCwgInRvdWNoIHdhcnQiLgotIyBJZiBpdCBzdGls bCBkb2Vzbid0IHdvcmssICJ0b3VjaCBja2Nwcm8uYyIuCi0jIFRoZSB2ZXJzaW9uIGNvbmZpZ3Vy ZWQgYmVsb3cgaGFzIG1hbnkgZmVhdHVyZXMgcmVtb3ZlZCwgaW5jbHVkaW5nCi0jIHRoZSBUUkFO U01JVCwgTVNFTkQsIEhFTFAsIGFuZCBTQ1JJUFQgY29tbWFuZHMsIGludGVybmF0aW9uYWwKLSMg Y2hhcmFjdGVyIHNldCBzdXBwb3J0LCBhbmQgdGhlIGVudGlyZSBzY3JpcHQgcHJvZ3JhbW1pbmcg bGFuZ3VhZ2UuCi0jIEJ1dCBpdCBkb2VzIGhhdmUgYW4gaW50ZXJhY3RpdmUgY29tbWFuZCBwYXJz ZXIuCi0jIE1ha2Ugc3VyZSBtYWtlKDEpIGhhcyAoYXQgbGVhc3QpIDEwMDAwMCBjaG1lbW9yeSEK LSMgSWYgeW91IGFyZSB1c2luZyB0aGUgQW1zdGVyZGFtIEMgY29tcGlsZXIsIHlvdSBtaWdodCBo YXZlIHRvIGFkZCAiLURfX0FDS19fIi4KLW1pbml4NjhrOgotCUBlY2hvICdNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIE1JTklYIDY4ayB3aXRoIEFDSy4uLicKLQkkKE1BS0UpIHdlcm1pdCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtRFY3IC1ETUlOSVggLURfTUlO SVggLURfUE9TSVhfU09VUkNFIC1ETk9MRUFSTiBcCi0JLUROT0RJQUwgLUROT0hFTFAgLUROT0RF QlVHIC1ETk9UTE9HIFwKLQktRE5PU0NSSVBUIC1ETk9DU0VUUyAtRE5PU1BMICQoS0ZMQUdTKSBc Ci0JLURQSURfVD1waWRfdCAtRFVJRF9UPXVpZF90IC1ER0lEX1Q9Z2lkX3QgLURTSUdfViIKLQot I01JTklYIC0gNjhrIHZlcnNpb24gd2l0aCBjNjggY29tcGlsZXIuCi0jIElmIHlvdSBoYXZlIHRy b3VibGUgY29tcGlsaW5nIG9yIHJ1bm5pbmcgd2FydCwgInRvdWNoIHdhcnQiIG9yCi0jICJ0b3Vj aCBja2Nwcm8uYyIuIENvbXBpbGluZyBja3VkaWEuYyAobm8gLUROT0RJQUwhKSBtaWdodCBmYWls LiA6LSgKLSMgR2l2ZSBjNjggMjUwMDAwIGJ5dGVzIG9mIHN0YWNrK2hlYXA7IG1ha2Ugc3VyZSBt YWtlKDEpIGhhcyBhdCBsZWFzdAotIyAxMDAwMDAgY2htZW1vcnkuICBPbiBhIDFNQiBBdGFyaSBT VCB0aGlzIG1lYW5zIHRoYXQgdGhlIHJlY3Vyc2l2ZQotIyBjYWxsIG9mIG1ha2UgZmFpbHMgZHVl IHRvIG1lbW9yeSBzaG9ydGFnZS4gIFRyeSAibWFrZSAtbiBtaW5peGM2OCA+bWFrZWl0IiwKLSMg Zm9sbG93ZWQgYnkgIi4gbWFrZWl0Ii4gIE90aGVyd2lzZSwgYXMgYWJvdmUuCi1taW5peGM2ODoK LQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNSU5JWCA2OGsgd2l0aCBjNjgu Li4nCi0JJChNQUtFKSB3ZXJtaXQgIkNDPSBjYyAtYzY4IiBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKLQkiQ0ZMQUdTPSAtRFY3IC1ETUlOSVggLURfTUlOSVggLURfUE9TSVhfU09VUkNFIC1E Tk9MRUFSTiBcCi0JLUROT0RJQUwgLUROT0hFTFAgLUROT0RFQlVHIC1ETk9UTE9HIFwKLQktRE5P U0NSSVBUIC1ETk9DU0VUUyAtRE5PU1BMICQoS0ZMQUdTKSBcCi0JLURQSURfVD1waWRfdCAtRFVJ RF9UPXVpZF90IC1ER0lEX1Q9Z2lkX3QgLURTSUdfViIKLQotI01JTklYIC0gNjhrIHZlcnNpb24g d2l0aCBjNjggY29tcGlsZXIuCi0jQSB2YXJpYXRpb24gb24gdGhlIGFib3ZlIHRoYXQgd2FzIHJl Y2VudGx5IChTZXAgOTUpIHJlcG9ydGVkIHRvIHdvcmsuCi1taW5peGM2OGE6Ci0JQGVjaG8gJ01h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTUlOSVggNjhrIHdpdGggYzY4Li4uJwotCSQoTUFL RSkgd2VybWl0ICJDQz0gY2MgLWM2OCIgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNG TEFHUz0gLURWNyAtRE1JTklYIC1EX01JTklYIC1EX1BPU0lYX1NPVVJDRSBcCi0JLURDS19BTlNJ QyAtRE5PREVCVUcgLUROT1RMT0cgLURNSU5JRElBTCAtREVYVEVOIC1ETVlDVVJTRVMgXAotCS1E Tk9TQ1JJUFQgLUROT0NTRVRTIC1ETk9TUEwgLUROT0pDIC1ERElSRU5UIC1ETk9MRUFSTiBcCi0J LUROT1NFVEtFWSAtRE5PRVNDU0VRICQoS0ZMQUdTKSBcCi0JLURQSURfVD1waWRfdCAtRFVJRF9U PXVpZF90IC1ER0lEX1Q9Z2lkX3QgLURTSUdfViIKLQotI01JUFMgQ29tcHV0ZXIgU3lzdGVtcyB3 aXRoIFVNSVBTIFJJU0MvT1MgNC41MiA9IEFUJlQgVU5JWCBTeXN0ZW0gViBSMy4wLgotI1JlbW92 ZSAtRE5PSkMgaWYgam9iIGNvbnRyb2wgY2FuIGJlIHNhZmVseSB1c2VkLgotbWlwczoKLQlAZWNo byAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNSVBTIFJJU0MvT1MuLi4nCi0JJChNQUtF KSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1ETUlQUyAt RERJUkVOVCAtRENLX1BPTEwgLUROT0pDIC1ETk9MRUFSTiAtRFBJRF9UPWludCBcCi0JLURHSURf VD1naWRfdCAtRFVJRF9UPXVpZF90IC1pIC1PMTUwMCAkKEtGTEFHUykiCi0KLSNBcyBhYm92ZSwg YnV0IHdpdGggVENQL0lQIGFuZCBmdWxsc2NyZWVuIHN1cHBvcnQuCi1taXBzdGNwYzoKLQlAZWNo byAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNSVBTIFJJU0MvT1MuLi4nCi0JJChNQUtF KSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1ETUlQUyAt RERJUkVOVCAtRENLX1BPTEwgLUROT0pDIFwKLQktRFRDUFNPQ0tFVCAtRENLX0NVUlNFUyAtSS91 c3IvaW5jbHVkZS9ic2QgXAotCS1EUElEX1Q9aW50IC1ER0lEX1Q9Z2lkX3QgLURVSURfVD11aWRf dCAtaSAtTzE1MDAgJChLRkxBR1MpIiBcCi0JIkxJQlMgPSAtbGN1cnNlcyAtbGJzZCIKLQotI01v dG9yb2xhIERlbHRhIFN5c3RlbSBWLzY4IFIzLCBzaWduYWwoKSBpcyB2b2lkIHJhdGhlciB0aGFu IGludC4KLSNVc2VzIGRpcmVudC5oIGFuZCBIb25leSBEYW5CZXIgdXVjcC4gIFN1cHBvcnRzIFRD UC9JUC4KLSNBZnRlciBidWlsZGluZywgdXNlICJtY3MgLWQiIHRvIHJlZHVjZSBzaXplIG9mIHRo ZSBleGVjdXRhYmxlIHByb2dyYW0uCi1zdjY4cjM6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgTW90b3JvbGEgVU5JWCBTeXN0ZW0gVi82OCBSMy4uLicKLQkkKE1BS0UpIHdl cm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLURTVlIzIC1EU1Y2 OCAtRERJUkVOVCAtREhEQlVVQ1AgLUROT19ETlNfU1JWIC1EVENQU09DS0VUIFwKLQktRE5PVU5J Q09ERSAtRE5PTEVBUk4gLURVU0VfTUVNQ1BZICQoS0ZMQUdTKSAtTyIgIkxOS0ZMQUdTID0iCi0K LSNNb3Rvcm9sYSBEZWx0YSBTeXN0ZW0gVi82OCBSM1Y1LCBzaWduYWwoKSBpcyB2b2lkIHJhdGhl ciB0aGFuIGludC4KLSNVc2VzIGRpcmVudC5oIGFuZCBIb25leSBEYW5CZXIgVVVDUC4gIFN1cHBv cnRzIFRDUC9JUC4KLSNBZnRlciBidWlsZGluZywgdXNlICJtY3MgLWQiIHRvIHJlZHVjZSBzaXpl IG9mIHRoZSBleGVjdXRhYmxlIHByb2dyYW0uCi1zdjY4cjN2NToKLQlAZWNobyAnTWFraW5nIEMt S2VybWl0ICQoQ0tWRVIpIGZvciBNb3Rvcm9sYSBVTklYIFN5c3RlbSBWLzY4IFIzVjUnCi0JJChN QUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1EU1ZS MyAtRFNWNjggLURESVJFTlQgLURIREJVVUNQIC1ETk9fRE5TX1NSViAtRFVTRV9NRU1DUFkgXAot CS1EVENQU09DS0VUIC1ESU5BRERSWCAtRE5PVU5JQ09ERSAtREZORkxPQVQgLUROT0xFQVJOICQo S0ZMQUdTKSAtTyIgXAotCSJMTktGTEFHUyA9IiAiTElCUyA9IC1saW5ldCAtbG0iCi0KLSNNb3Rv cm9sYSBNVk1FMTQ3IFN5c3RlbSBWLzY4IFIzIFY1LjEuIFJlcXVpcmVzIGdjYyAyLjEgdG8gY29t cGlsZS4KLSNBZnRlciBidWlsZGluZywgdXNlICJtY3MgLWQiIHRvIHJlZHVjZSBzaXplIG9mIHRo ZSBleGVjdXRhYmxlIHByb2dyYW0uCi1zdjY4cjN2NTE6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgTW90b3JvbGEgVU5JWCBTeXN0ZW0gVi82OCBSM1Y1LjEnCi0JJChNQUtF KSB3ZXJtaXQgIkNDPWdjYy1kZWx0YSIgIkNDMj1nY2MtZGVsdGEiIFwKLQlLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTID0gLURTVlIzIC1ERElSRU5UIC1ESERCVVVDUCAtRE5P REVCVUcgLUROT19ETlNfU1JWIC1ETk9MRUFSTiBcCi0JLUROT1VOSUNPREUgLURGTkZMT0FUIC1E U1Y2OCAtRFVTRV9NRU1DUFkgJChLRkxBR1MpIFwKLQktTzIgLXYgLWZ0cmFkaXRpb25hbCIgXAot CSJMTktGTEFHUyA9IC1zIC12IiAiTElCUyA9IC1sbTg4MSAtbG0iCi0KLSNNb3Rvcm9sYSBNVk1F MTQ3IFN5c3RlbSBWLzY4IFIzVjYuIGRlcml2ZWQgZnJvbSBNb3Rvcm9sYSBEZWx0YSBTeXN0ZW0g UjNWNS4KLSNDaGVja2VkIG9uIGxhcmdlciBNb3Rvcm9sYSBTeXN0ZW0gVi82OCBSM1Y2ICh3aXRo IE5TRSBOZXR3b3JrIFNlcnZpY2VzIEV4dC4pCi0jQWZ0ZXIgYnVpbGRpbmcsIHVzZSAic3RyaXAi IHRvIHJlZHVjZSBzaXplIG9mIHRoZSBleGVjdXRhYmxlIHByb2dyYW0uCi0jICJMSUJTID0gLWxu c2wiIHJlbW92ZWQgaW4gQy1LZXJtaXQgNi4xIC0gcHV0IGJhY2sgaWYgbmVlZGVkLgotIyAiTElC UyA9IGxtIiBhZGRlZCBpbiA3LjEvOC4wIGZvciBmbG9hdGluZy1wb2ludCBtYXRoLgotIyBja3V1 c3IuYyBjbG9iYmVycyB0aGUgb3B0aW1pemVyLgotc3Y2OHIzdjY6Ci0JQGVjaG8gJ01ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgTW90b3JvbGEgVU5JWCBTeXN0ZW0gVi82OCBSM1Y2JwotCSQo TUFLRSkgY2t1dXNyLiQoRVhUKSBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdT ID0gLURTVjY4UjNWNiAtRERJUkVOVCAtREhEQlVVQ1AgLUROT0xPR0lOIC1ETk9JTklUR1JPVVBT IFwKLQktRE5PU1lNTElOSyAtRE5PUkVESVJFQ1QgLUROT0dGVElNRVIgLURUQ1BTT0NLRVQgLURE Q0xHRVRDV0QgLURTVjY4IFwKLQktRE5PX0ROU19TUlYgLUROT1VOSUNPREUgLURGTkZMT0FUIC1E U0VMRUNUIC1EVVNFX01FTUNQWSAkKEtGTEFHUykiCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSBcCi0JIkNGTEFHUyA9IC1PIC1EU1Y2OFIzVjYgLURESVJFTlQgLURI REJVVUNQIC1ETk9MT0dJTiAtRE5PSU5JVEdST1VQUyBcCi0JLUROT1NZTUxJTksgLUROT1JFRElS RUNUIC1ETk9HRlRJTUVSIC1EVENQU09DS0VUIC1ERENMR0VUQ1dEIC1EU1Y2OCBcCi0JLUROT19E TlNfU1JWIC1ETk9VTklDT0RFIC1ERk5GTE9BVCAtRFNFTEVDVCAtRFVTRV9NRU1DUFkgJChLRkxB R1MpIiBcCi0JIkxOS0ZMQUdTID0iICJMSUJTID0gLWxtIgotCi0jTW90b3JvbGEgRGVsdGEgU3lz dGVtIFYvODggUjMyLCBzaWduYWwoKSBpcyB2b2lkIHJhdGhlciB0aGFuIGludC4KLSNVc2VzIGRp cmVudC5oIGFuZCBIb25leSBEYW5CZXIgdXVjcC4gIE5lZWRzIDxzeXMvdXRpbWUuaD4gZm9yIHNl dHRpbmcKLSNmaWxlIGRhdGVzLiAgU3VwcG9ydHMgVENQL0lQLgotI0FmdGVyIGJ1aWxkaW5nLCB1 c2UgIm1jcyAtZCIgdG8gcmVkdWNlIHNpemUgb2YgdGhlIGV4ZWN1dGFibGUgcHJvZ3JhbS4KLXN2 ODhyMzI6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTW90b3JvbGEgVU5J WCBTeXN0ZW0gVi84OCBSMzIuLi4nCi0JJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfSBcCi0JIkNGTEFHUyA9IC1EU1Y4OFIzMiAtRERJUkVOVCAtREhEQlVVQ1AgLURUQ1BT T0NLRVQgXAotCS1EU1lTVVRJTUVIIC1EQ0tfQ1VSU0VTIC1ETk9HRVRVU0VSU0hFTEwgLURHVE9E T05FQVJHICQoS0ZMQUdTKSAtTyIgXAotCSJMSUJTPSAtbGN1cnNlcyAtbHJlc29sdiIgIkxOS0ZM QUdTID0gLXMiCi0KLSNNb3Rvcm9sYSBEZWx0YSBTeXN0ZW0gVi84OCBSNDAuICBIYXMgPHN5cy90 ZXJtaW94Lmg+LCByZWd1bGFyIEJlcmtlbGV5Ci0jc29ja2V0cyBsaWJyYXJ5LCBpLmUuIGluLmgg YW5kIGluZXQuaCBhcmUgbm90IG1pc3BsYWNlZCBpbiBzeXMgKHJhdGhlciB0aGFuCi0jbmV0aW5l dCBhbmQgYXJwYSwgcmVzcGVjdGl2ZWx5KS4gIFVzZXMgQU5TSSBDIGNvbnN0cnVjdHMsIGFkdmlz b3J5IGZpbGUKLSNsb2NraW5nIG9uIGRldmljZXMsIGV0Yy4gIGN1cnNlcyBzdXBwb3J0IGFkZGVk LiAgUmVwb3J0ZWRseSwgdGhlCi0jL3Vzci9pbmNsdWRlL3N5cy92bm9kZS5oIGZpbGUgaGFzIGEg YnVnIHdoaWNoIG11c3QgYmUgZml4ZWQgYmVmb3JlIHRoaXMKLSNtYWtlZmlsZSBlbnRyeSBjYW4g d29yayBjb3JyZWN0bHkuICBUaGUgImlmIERFQlVHIiBkaXJlY3RpdmUgYXQgYWJvdXQgbGluZQot IzMyMCBtdXN0IGJlIGNoYW5nZWQgdG8gImlmZGVmIERFQlVHIiAoUmVwb3J0ZWRseSwgdGhpcyB3 YXMgZml4ZWQgaW4KLSNpbiBTeXN0ZW0gVi84OCBSNC4zKS4KLSNBZnRlciBidWlsZGluZywgdXNl ICJtY3MgLWQiIHRvIHJlZHVjZSBzaXplIG9mIHRoZSBleGVjdXRhYmxlIHByb2dyYW0uCi1zdjg4 cjQwOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE1vdG9yb2xhIFVOSVgg U3lzdGVtIFYvODggUjQwLi4uJwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gXAotCSJDRkxBR1MgPSAtTyAtRFNWUjQgLURNT1RTVjg4UjQgLURESVJFTlQgLURIREJV VUNQIC1EU1RFUk1JT1ggXAotCS1EVENQU09DS0VUIC1EQ0tfQ1VSU0VTIC1ETk9HRVRVU0VSU0hF TEwgLURHVE9ET05FQVJHIC1ERk5GTE9BVCBcCi0JJChLRkxBR1MpIiBcCi0JIkxJQlM9IC1sc29j a2V0IC1sbnNsIC1sY3Vyc2VzIC1scmVzb2x2IC1sbSIgIkxOS0ZMQUdTID0gLXMiCi0KLSNBcyBh Ym92ZSBidXQgd2l0aG91dCB0aGUgZmxvYXRpbmctcG9pbnQgbWF0aCBsaWJyYXJ5Lgotc3Y4OHI0 MG5tOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE1vdG9yb2xhIFVOSVgg U3lzdGVtIFYvODggUjQwLi4uJwotCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gXAotCSJDRkxBR1MgPSAtTyAtRFNWUjQgLURNT1RTVjg4UjQgLURESVJFTlQgLURIREJV VUNQIC1EU1RFUk1JT1ggXAotCS1EVENQU09DS0VUIC1EQ0tfQ1VSU0VTIC1ETk9HRVRVU0VSU0hF TEwgLURHVE9ET05FQVJHICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAtbHNvY2tldCAtbG5zbCAtbGN1 cnNlcyAtbHJlc29sdiIgIkxOS0ZMQUdTID0gLXMiCi0KLSNBcyBhYm92ZSBidXQgd2l0aCBmbG9h dGluZy1wb2ludCBtYXRoIGxpYnJhcnkgc3VwcG9ydCBcZmZwLi4uKCkgZnVuY3Rpb25zCi0jYW5k IFMtRXhwcmVzc2lvbnMuCi0KLSNPbGl2ZXR0aSBYL09TIFIyLjMsIDMueC4KLSNOT1RFUzoKLSMg LiBJZiB5b3UgYnVpbGQgdGhlIGV4ZWN1dGFibGUgb24gMi54IFgvT1MsIGl0IHdpbGwgYWxzbyBy dW4gb24gMy54LgotIyAuIElmIHlvdSBidWlsZCBpdCBvbiAzLnggWC9PUywgaXQgd2lsbCBOT1Qg cnVuIG9uIDIueC4KLSMgLiBLZXJtaXQgY2FuIHJ1biB3aXRoIG5vIHByaXZpbGVnZXMgdW5sZXNz IHRoZSB1dWNwIGxpbmVzIGFyZSBwcm90ZWN0ZWQsCi0jICAgaW4gd2hpY2ggY2FzZSBrZXJtaXQg bXVzdCBiZSBvd25lZCBieSB1dWNwIHdpdGggc3VpZCBiaXQgc2V0OgotIyAgIGNob3duIHV1Y3Ag a2VybWl0IDsgY2htb2QgNDExMSBrZXJtaXQuCi14b3MyMzoKLQlAZWNobyAnTWFraW5nIEMtS2Vy bWl0ICQoQ0tWRVIpIGZvciBPbGl2ZXR0aSBYL09TLi4uJwotCSQoTUFLRSkgeGVybWl0IEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAotCSdDRkxBR1M9LU9MTSAtRE9YT1MgLURUQ1BTT0NLRVQg LURIREJVVUNQICQoS0ZMQUdTKScgXAotCSJMSUJTPSIgIkxOS0ZMQUdTPSIKLQotI0FzIGFib3Zl LCBidXQgd2l0aCBjdXJzZXMuCi14b3MyM2M6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgT2xpdmV0dGkgWC9PUyB3aXRoIGN1cnNlcy4uLicKLQkkKE1BS0UpIHhlcm1pdCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQknQ0ZMQUdTPS1PTE0gLURPWE9TIC1EVENQU09D S0VUIC1ESERCVVVDUCAtRENLX0NVUlNFUyAkKEtGTEFHUyknIFwKLQkiTElCUz0tbGN1cnNlcyIg IkxOS0ZMQUdTPSIKLQotY2t1dWlkOgotCUBlY2hvICdidWlsZGluZyBDLUtlcm1pdCAkKENLVkVS KSBzZXQtVUlEL3NldC1HSUQgdGVzdCBwcm9ncmFtcycKLQkkKENDKSAtREFOWUJTRCAtRFNBVkVE VUlEIC1vIGNrdXVpZDEgY2t1dWlkLmMKLQkkKENDKSAtREFOWUJTRCAtbyBja3V1aWQyIGNrdXVp ZC5jCi0JJChDQykgLURBTllCU0QgLUROT1NFVFJFVSAtbyBja3V1aWQzIGNrdXVpZC5jCi0JJChD QykgLURBTllCU0QgLURTRVRFVUlEIC1ETk9TRVRSRVUgLW8gY2t1dWlkNCBja3V1aWQuYwotCSQo Q0MpIC1vIGNrdXVpZDUgY2t1dWlkLmMKLQlAZWNobyAnUmVhZCB0aGUgdG9wIG9mIGNrdXVpZC5j IGZvciBkaXJlY3Rpb25zLi4uZm9yIHRlc3RpbmcnCi0JQGVjaG8gJ3lvdSBtdXN0IG1ha2UgdGhl c2UgcHJvZ3JhbXMgc2V0dWlkIGFuZCBzZXRnaWQnCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMg QSBOIFQgSSBRIFUgSSBUIEkgRSBTCi0jCi0jIFRoZSBmb2xsb3dpbmcgYXJlIGFudGlxdWUgdGFy Z2V0cyBmcm9tIEMtS2VybWl0IDVBIG9yIGVhcmxpZXIuICBUaGV5IGhhdmUKLSMgbm90IGJlZW4g dXBkYXRlZCBvciB0ZXN0ZWQgaW4geWVhcnMuICBNb3N0IG9mIHRoZW0gd2lsbCBuZWVkIHJlY2Vu dCBmZWF0dXJlcwotIyBkaXNhYmxlZCwgdXN1YWxseSB3aXRoIHNvbWUgY29tYmluYXRpb24gb2Yg LUROT1VOSUNPREUsIC1ETk9JS1NELCAtRE5PQU5TSSwKLSMgLUROT0NLR0hOTEhPU1QsIC1ETk9f RE5TX1NSViwgLUROT1JFRElSRUNULCAtRE5PUkVBTFBBVEgsIC1ETk9DVVJTRVMsIGV0Yy4KLSMg VGhleSBhcmUgYWxzbyBtaXNzaW5nIHRoZSBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IGJ1c2lu ZXNzLgotIyBGb3IgZGV0YWlscyBzZWUgY2t1aW5zLnR4dCBhbmQgY2tjY2ZnLnR4dC4KLSMKLSMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMKLQotI0JlcmtlbGV5IFVuaXggMi44LCAyLjkgZm9yIFBEUC0xMXMg d2l0aCBJJkQgc3BhY2UsIG1heWJlIGFsc28gVWx0cml4LTExPz8/Ci0jQy1LZXJtaXQoNUEpIGlz IHNpbXBseSB0b28gbGFyZ2UgKGV2ZW4gdHVybmluZyBvZmYgYWxtb3N0IGV2ZXJ5IGZlYXR1cmUK LSNhdmFpbGFibGUpIHRvIHJ1biB3aXRob3V0IGJvdGggSSZEIHNwYWNlIHBsdXMgb3ZlcmxheXMu ICBUaGUgb2xkIGNvbW1lbnQKLSNzdWdnZXN0ZWQgcnVubmluZyAncGNjJyBidXQgdGhhdCB3b24n dCBoZWxwLiAgQ2hhbmdpbmcgJ2NjJyB0byAnY2t1c3RyLnNlZCcKLSN3aWxsIGNhdXNlIGEgc3Ry aW5nIGV4dHJhY3Rpb24gdG8gYmUgZG9uZSwgc2F2aW5nIEQgc3BhY2UgYnkgbW92aW5nIHN0cmlu Z3MKLSN0byBhIGZpbGUuCi1ic2QyOToKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIDIuOCBvciAyLjlCU0QuCi0JQGVjaG8gUmVhZCB0aGUgbWFrZWZpbGUgaWYgeW91IGhhdmUg dHJvdWJsZSB3aXRoIHRoaXMuLi4KLQkkKE1BS0UpIG92d2VybWl0IFwKLQkiQ0ZMQUdTPSAtREJT RDI5IC1ETk9ERUJVRyAtRE5PVExPRyAtRE5PQ1NFVFMgLUROT0hFTFAgXAotCS1ETk9TQ1JJUFQg LUROT1NQTCAtRE5PWE1JVCAtRE5PRElBTCAkKEtGTEFHUykiIFwKLQkiTE5LRkxBR1M9IC1pIC1s bmRpciIgIkNDPSBjYyAiICJDQzI9IGNjIgotCi1ic2QyMTA6Ci0JQGVjaG8gUGxlYXNlIHVzZSBj a3ViczIubWFrIHRvIGJ1aWxkIEMtS2VybWl0ICQoQ0tWRVIpIGZvciAyLjEwQlNELgotCi1ic2Qy MTE6Ci0JQGVjaG8gUGxlYXNlIHVzZSBja3ViczIubWFrIHRvIGJ1aWxkIEMtS2VybWl0ICQoQ0tW RVIpIGZvciAyLjExQlNELgotCi0jQ2hhcmxlcyBSaXZlciBEYXRhIFN5c3RlbXMgVW5pdmVyc2Ug d2l0aCBVTk9TIFZlcnNpb24gOS4yCi1jcmRzOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIENoYXJsZXMgUml2ZXIgRGF0YSBTeXN0ZW1zLi4uJwotCW1ha2UgeGVybWl0IFwK LQkiQ0ZMQUdTID0gLURBVFRTViAtRE5PQU5TSSAtRERJUkVOVCAtRExPTkdGTiAtRFRDUFNPQ0tF VCBcCi0JLURMT0NLX0RJUj1cXFwiL3Vzci9zcG9vbC91dWNwXFxcIiAtRE5PU0VUUkVVIFwKLQkt RHN1c3BlbmQ9a3N1c3BlbmQgJChLRkxBR1MpIC1PIiAiTE5LRkxBR1MgPSIKLQotI01pY3JvcG9y dCBTVi9BVCBmb3IgSUJNIFBDL0FUIDI4NiBhbmQgY2xvbmVzLCBTeXN0ZW0gViBSMi4KLSNUaGUg LU8gZmxhZyBtYXkgZmFpbCBvbiBzb21lIG1vZHVsZXMgKGxpa2UgY2t1dXMyLmMpLCBpbiB3aGlj aCBjYXNlIHlvdQotI3Nob3VsZCBjb21waWxlIHRoZW0gYnkgaGFuZCwgb21pdHRpbmcgdGhlIC1P LiAgSWYgeW91IGdldCAiaGFzaCB0YWJsZQotI292ZXJmbG93IiwgdHJ5IGFkZGluZyAtRE5PREVC VUcuCi0jQWxzbywgcmVwb3J0ZWRseSB0aGlzIGNvbXBpbGVzIGJldHRlciB3aXRoIGdjYyB0aGFu IHdpdGggY2MuCi1tcHN5c3Y6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3Ig TWljcm9wb3J0IFNWL0FUIDI4Ni4uLicKLQkkKE1BS0UpIHdlcm1pdCBcCi0JIkNGTEFHUz0gLURB VFRTViAtRE5PTEVBUk4gJChLRkxBR1MpIC1PIC1NbCIgIkxOS0ZMQUdTID0gLU1sIgotCi0jTWlj cm9zb2Z0ICJYZW5peC8yODYiIGUuZy4gZm9yIElCTSBQQy9BVAoteGVuaXg6Ci0JQGVjaG8gJ01h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgWGVuaXgvMjg2JwotCSQoTUFLRSkgd2VybWl0IFwK LQkiQ0ZMQUdTPSAtRFhFTklYIC1ETk9GSUxFSCAtRE5PTEVBUk4gJChLRkxBR1MpIC1EdW5peCAt RiAzMDAwIC1pIiBcCi0JIkxOS0ZMQUdTID0gLUYgMzAwMCAtaSIKLQotI1BDL0lYLCBJbnRlcmFj dGl2ZSBDb3JwIFN5c3RlbSBJSUkgZm9yIElCTSBQQy9YVAotcGNpeDoKLQlAZWNobyAnTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBQQy9JWC4uLicKLQkkKE1BS0UpIHdlcm1pdCBcCi0JIkNG TEFHUz0gLURQQ0lYIC1ESVNJSUkgLUROT0xFQVJOICQoS0ZMQUdTKSBcCi0JLURzZGF0YT1zZGF0 YXggLU8gLWkiICJMTktGTEFHUyA9IC1pIgotCi0jSW50ZWdyYXRlZCBTb2x1dGlvbnMgSW5jIFY4 UyBWTUUgNjgwMjAKLWlzaToKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIDQu MkJTRCBvbiBJU0kuLi4KLQkkKE1BS0UpIHdlcm1pdCAiQ0MgPSBjYyIgXAotCSJDRkxBR1M9IC1E QlNENCAtRFRDUFNPQ0tFVCAtRElOQUREUlggLUREQ0xQT1BFTiAtRERFQlVHIC1ETk9TRVRSRVUg XAotCS1EQ0tfQ1VSU0VTIC1ETk9MRUFSTiAkKEtGTEFHUykiICJMSUJTID0gLWxjdXJzZXMgLWx0 ZXJtY2FwIgotCi0jSW50ZXJhY3RpdmUgQ29ycCB2ZXJzaW9uIG9mIEFUJlQgU3lzdGVtIElJSQot I2lzMzogKHZlcnkgb2xkLCBwcm9iYWJseSBub3Qgc3VmZmljaWVudCBmb3IgNUEgb3IgbGF0ZXIp Ci0jCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEludGVyYWN0aXZlIFN5c3Rl bSBJSUkuLi4nCi0jCW1ha2Ugd2VybWl0ICJDRkxBR1MgPSAtRElTSUlJIC1EZGF0YT1kYXRheCAt TyAtaSIgIkxOS0ZMQUdTID0gLWkiCi0jVGhlIGZvbGxvd2luZyBzaG91bGQgd29yaywgdXNlIGl0 IGlmIHlvdSBkb24ndCBoYXZlIGdjYy4KLSNVc2UgaXMzZ2NjIGlmIHlvdSBoYXZlIGdjYy4KLWlz MzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJbnRlcmFjdGl2ZSBTeXN0 ZW0gSUlJLi4uJwotCSQoTUFLRSkgd2VybWl0IFwKLQkiQ0ZMQUdTPSAtRElTSUlJICQoS0ZMQUdT KSAtRGRhdGE9ZGF0YXggLUROQVAgLURIREJVVUNQCi0JLURMT0NLX0RJUj1cIi91c3Ivc3Bvb2wv dXVjcFwiIC1EU0lHVFlQPXZvaWQgLU8gLWkiICJMTktGTEFHUyA9IC1pIgotCi0jSW50ZXJhY3Rp dmUgVU5JWCBTeXN0ZW0gViBSMywgbm8gbmV0d29yayBzdXBwb3J0LiAgVXNlcyA8ZGlyZW50Lmg+ IGFuZCBIb25leQotI0RhbkJlciBVVUNQLiAgSWYgdGhpcyBlbnRyeSBkb2VzIG5vdCBjb21waWxl IGNvcnJlY3RseSwgdHJ5IGFueSBvciBhbGwgb2YgdGhlCi0jZm9sbG93aW5nLiAgVGhlc2Ugc3Vn Z2VzdGlvbnMgYWxzbyBhcHBseSBtb3JlIG9yIGxlc3MgdG8gdGhlIG90aGVyIGlzNXIzeHh4Ci0j ZW50cmllcyB0aGF0IGZvbGxvdyB0aGlzIG9uZS4KLSMgLiBSZW1vdmUgdGhlIFVJRF9UIGFuZCBH SURfVCBkZWZpbml0aW9ucywgb3IgY2hhbmdlIHRoZW0gYXMgcmVxdWlyZWQuCi0jIC4gQ2hhbmdl IC1ERElSRU5UIHRvIC1EU0RJUkVOVC4KLSMgLiBBZGQgLURTSUdUWVA9dm9pZC4KLSMgLiBSZW1v dmUgLWcgZnJvbSBMTktGTEFHUy4KLSMgLiBBZGQgLUROT0FOU0kgdG8gcmVtb3ZlIGNvbXBpbGVy IGNvbXBsYWludHMgYWJvdXQgQU5TSSBDIGNvbnN0cnVjdGlvbnMKLSMgLiBBZGQgb3RoZXIgLURO T3h4eCdzIHRvIHNhdmUgc3BhY2UgKGUuZy4gLUROT0NTRVRTKQotIyBTZWUgdGhlIG5leHQgZmV3 IG1ha2VmaWxlIGVudHJpZXMgZm9yIHJlbGF0ZWQgZXhhbXBsZXMuCi0jIEFsc28gc2VlIHN5czVy MzJpcyBmb3IgbWFraW5nIGEgcG9ydGFibGUgaTM4NiBTVlIzIGJpbmFyeS4KLWlzNXIzOgotCUBl Y2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEludGVyYWN0aXZlIDM4Ni9peCBvciBs YXRlci4uLicKLQlAZWNobyAnSWYgdGhpcyBkb2VzIG5vdCB3b3JrIHBsZWFzZSByZWFkIHRoZSBt YWtlZmlsZSBlbnRyeS4nCi0JJChNQUtFKSB3ZXJtaXQgXAotCSJDRkxBR1MgPSAtRFNWUjMgLURE SVJFTlQgLURIREJVVUNQIC1nIC1ETk9DU0VUUyAtRE5PUkVBTFBBVEggXAotCS1EVUlEX1Q9dXNo b3J0IC1ER0lEX1Q9dXNob3J0IC1ESTM4NklYICQoS0ZMQUdTKSIgXAotCSJMTktGTEFHUyA9IC1n IgotCi0jSW50ZXJhY3RpdmUgQ29ycCBTeXN0ZW0gU3lzdGVtIFYgUjMgd2l0aCBnY2MKLWlzM2dj YzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJbnRlcmFjdGl2ZSBTeXN0 ZW0gViBSMyAvIGdjYy4uLicKLQkkKE1BS0UpIHdlcm1pdCBDQz1nY2MgQ0MyPWdjYyBcCi0JJ0NG TEFHUyA9IC1EX1NZU1YzIC1ESVNJSUkgLURkYXRhPWRhdGF4IC1ETkFQIC1ESERCVVVDUCAtRE5P UkVBTFBBVEggXAotCS1ETE9DS19ESVI9XCIvdXNyL3Nwb29sL3V1Y3BcIiAtRFNJR1RZUD12b2lk IC1PJyAiTE5LRkxBR1MgPSIKLQotI0ludGVyYWN0aXZlIFVOSVggU3lzdGVtIFYgUjMsIFBPU0lY IHZhcmlhbnQuICBVbnRlc3RlZC4KLSNVc2VzIGRpcmVudC5oIGFuZCBIb25leSBEYW5CZXIgdXVj cC4gIFJlYWQgY29tbWVudHMgaW4gaXM1cjMgZW50cnkuCi1pczVyM3A6Ci0JQGVjaG8gJ01ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSW50ZXJhY3RpdmUgMzg2L2l4IG9yIGxhdGVyLi4uJwot CSQoTUFLRSkgd2VybWl0IFwKLQkiQ0ZMQUdTPSAtRFNWUjMgLURESVJFTlQgLURIREJVVUNQIC1n IC1ETk9DU0VUUyAtRE5PUkVBTFBBVEggXAotCS1ESTM4NklYIC1EUE9TSVggJChLRkxBR1MpIiAi TE5LRkxBR1M9IiAiTElCUz0tbGNwb3NpeCIKLQotI0ludGVyYWN0aXZlIFVOSVggU1ZSMyAyLjIu MSwgam9iIGNvbnRyb2wsIGN1cnNlcywgbm8gbmV0LCBnY2MuCi1pczVyM2djYzoKLQkkKE1BS0Up IHdlcm1pdCBDQz1nY2MgQ0MyPWdjYyBcCi0JIkNGTEFHUz0tZyAtcG9zaXggLURTVlIzIC1ERElS RU5UIC1ETk9SRUFMUEFUSCBcCi0JLURIREJVVUNQIC1PIC1ETk9DU0VUUyAtREkzODZJWCAtRFNW UjNKQyAtRENLX0NVUlNFUyBcCi0JJChLRkxBR1MpIiBMTktGTEFHUz0iLXBvc2l4IiBMSUJTPSIt bGN1cnNlcyAtbGNfcyIKLQotI0ludGVyYWN0aXZlIFVOSVggU3lzdGVtIFYgUjMgd2l0aCBUQ1Av SVAgbmV0d29yayBzdXBwb3J0LgotI05lZWRzIC1saW5ldCBmb3IgbmV0IGZ1bmN0aW9ucy4gIHNp Z25hbCgpIGlzIHZvaWQgcmF0aGVyIHRoYW4gaW50LgotI1VzZXMgZGlyZW50LmggYW5kIEhvbmV5 IERhbkJlciB1dWNwLiBSZWFkIGNvbW1lbnRzIGluIGlzNXIzIGVudHJ5LgotI0Fsc28gc2VlIGlz NXIzbmV0MiBpZiB5b3UgaGF2ZSB0cm91YmxlIHdpdGggdGhpcyBlbnRyeS4KLWlzNXIzbmV0Ogot CUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEludGVyYWN0aXZlIDM4Ni9peC4u LicKLQlAZWNobyAnSWYgdGhpcyBkb2VzIG5vdCB3b3JrIHBsZWFzZSByZWFkIHRoZSBtYWtlZmls ZSBlbnRyeS4nCi0JJChNQUtFKSB3ZXJtaXQgQ0M9IiQoQ0MpIiBDQzI9IiQoQ0MyKSIgXAotCSJD RkxBR1MgPSAtRFNWUjMgLURESVJFTlQgLURIREJVVUNQIC1EVENQU09DS0VUIC1ETk9SRUFMUEFU SCBcCi0JLURJMzg2SVggJChLRkxBR1MpIC1PIiAiTElCUyA9IC1saW5ldCIKLQotaXM1cjNuZXRn Y2M6Ci0JJChNQUtFKSBpczVyM25ldCBDQz1nY2MgQ0MyPWdjYwotCi0jSW50ZXJhY3RpdmUgVU5J WCBTeXN0ZW0gViBSMywgbm8gam9iIGNvbnRyb2wsIHNpZ25hbCgpIHZvaWQgcmF0aGVyIHRoYW4g aW50LgotI1VzZXMgZGlyZW50LmggYW5kIEhvbmV5IERhbkJlciB1dWNwLiAgTmVlZHMgLWxpbmV0 IGZvciBuZXQgZnVuY3Rpb25zLgotI1JlYWQgY29tbWVudHMgaW4gaXM1cjMgZW50cnkuICBVc2Ug dGhpcyBlbnRyeSBpZiBpczVyM25ldCBmYWlscy4KLSNTYXZlcyBzb21lIHNwYWNlIGJ5IHN0cmlw cGluZyAoLXMpIGFuZCB1c2luZyBzaGFyZWQgbGlicmFyeSAoLWxjX3MpLgotaXM1cjNuZXQyOgot CUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEludGVyYWN0aXZlIDM4Ni9peC4u LicKLQkkKE1BS0UpIHdlcm1pdCBcCi0JIkNGTEFHUyA9IC1EU1ZSMyAtRERJUkVOVCAtREhEQlVV Q1AgLURUQ1BTT0NLRVQgLUROT0pDIC1ETk9SRUFMUEFUSCBcCi0JLURTSUdUWVA9dm9pZCAtRE5P QU5TSSAtREkzODZJWCAkKEtGTEFHUykgLU8iIFwKLQkiTE5LRkxBR1M9IC1zIiAiTElCUyA9IC1s aW5ldCAtbGNfcyIKLQotI0ludGVyYWN0aXZlIFVOSVggU3lzdGVtIFYgUjMgKHZlcnNpb24gMi4y IG9yIGxhdGVyKSB3aXRoIGpvYiBjb250cm9sICYgY3Vyc2VzLgotI1VzZXMgZGlyZW50LmggYW5k IEhvbmV5IERhbkJlciBVVUNQLgotaXM1cjNqYzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQo Q0tWRVIpIGZvciBJbnRlcmFjdGl2ZSBVbml4IDIuMiBvciBsYXRlci4uLicKLQkkKE1BS0UpIHdl cm1pdCBDQz0iJChDQykiIENDMj0iJChDQzIpIiBcCi0JIkNGTEFHUyA9IC1EU1ZSMyAtRERJUkVO VCAtREhEQlVVQ1AgLU8gLUROT0NTRVRTIC1ETk9SRUFMUEFUSCBcCi0JLURVSURfVD11c2hvcnQg LURHSURfVD11c2hvcnQgLURJMzg2SVggLURTVlIzSkMgLURDS19DVVJTRVMgXAotCS1EUE9TSVhf SkMgLURDS19SRURJUiAtRENLX1BPTEwgLUREQ0xHRVRDV0QgXAotCSQoS0ZMQUdTKSIgIkxJQlM9 LWxjdXJzZXMgLWxjX3MgLWxpbmV0IgotCi1pczVyM2pjZ2NjOgotCSQoTUFLRSkgaXM1cjNqYyBD Qz0iZ2NjIC1EQ0tfQU5TSUxJQlMgLUREQ0dQV05BTSAtTzQiIENDMj1nY2MgXAotCUtGTEFHUz0i JChLRkxBR1MpIiBMTktGTEFHUz0iJChMTktGTEFHUykiCi0KLSNTdW5zb2Z0L0ludGVyYWN0aXZl IFVOSVggU3lzdGVtIFYgUjMgKHZlcnNpb24gMi4yIG9yIGxhdGVyKQotI3dpdGggam9iIGNvbnRy b2wsIGN1cnNlcywgYW5kIFRDUC9JUCBuZXR3b3JraW5nLgotI1VzZXMgZGlyZW50LmggYW5kIEhv bmV5IERhbkJlciBVVUNQLgotaXM1cjNuZXRqYzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQo Q0tWRVIpIGZvciBJbnRlcmFjdGl2ZSBVbml4IDIuMiBvciBsYXRlci4uLicKLQkkKE1BS0UpIHdl cm1pdCBDQz0iJChDQykiIENDMj0iJChDQzIpIiBcCi0JIkNGTEFHUyA9IC1EU1ZSMyAtRERJUkVO VCAtREhEQlVVQ1AgLU8gLUROT0NTRVRTIC1ETk9SRUFMUEFUSCBcCi0JLURVSURfVD11c2hvcnQg LURHSURfVD11c2hvcnQgLURJMzg2SVggLURTVlIzSkMgLURDS19DVVJTRVMgXAotCS1EUE9TSVhf SkMgLURDS19SRURJUiAtRFRDUFNPQ0tFVCAtRFNFTEVDVCBcCi0JJChLRkxBR1MpIiAiTElCUz0t bGluZXQgLWxjdXJzZXMgLWxjX3MiCi0KLWlzNXIzbmV0amNnY2M6Ci0JJChNQUtFKSBpczVyM25l dGpjIENDPSJnY2MgLURDS19BTlNJTElCUyAtRERDR1BXTkFNIC1PNCIgQ0MyPWdjYyBcCi0JS0ZM QUdTPSIkKEtGTEFHUykiIExOS0ZMQUdTPSIkKExOS0ZMQUdTKSIKLQotI01hc3Njb21wIFN5c3Rl bSBJSUkKLXJ0dToKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNYXNzY29t cCBSVFUgU3lzdGVtIElJSS4uLicKLQkkKE1BS0UpIHdlcm1pdCBcCi0JIkNGTEFHUz0gLVVGSU9O UkVBRCAtREFUVFNWICQoS0ZMQUdTKSAtTyIgIkxOS0ZMQUdTID0iICJMSUJTPSAtbGpvYnMiCi0K LSNNYXNzY29tcC9Db25jdXJyZW50IFJUVSA0LjAgb3IgbGF0ZXIsIEJlcmtlbGV5IGVudmlyb25t ZW50LgotI0luY2x1ZGVzIDxuZGlyLmg+ID0gL3Vzci9pbmNsdWRlL25kaXIuaAotI05vdGUgIkxJ QlMgPSAtbG5kaXIiIG1pZ2h0IG5vdCBiZSBuZWNlc3NhcnkgYmVjYXVzZSBvZiAidWNiIG1ha2Ui LgotcnR1YnNkOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE1hc3Njb21w IFJUVSA0LjFBLi4uJwotCXVjYiBtYWtlIHdlcm1pdCBcCi0JIkNGTEFHUz0gLURCU0Q0IC1EUlRV IC1ETkRJUiAtREhEQlVVQ1AgLURUQ1BTT0NLRVQgJChLRkxBR1MpIiBcCi0JIkxJQlMgPSAtbG5k aXIiCi0KLSNNYXNzY29tcC9Db25jdXJyZW50IFJUVSA0LjAgb3IgbGF0ZXIsIHNhbWUgYXMgYWJv dmUsCi0jSW5jbHVkZXMgInVzci9saWIvbmRpci5oIgotI05vdGUgIkxJQlMgPSAtbG5kaXIiIG1p Z2h0IG5vdCBiZSBuZWNlc3NhcnkgYmVjYXVzZSBvZiAidWNiIG1ha2UiLgotcnR1YnNkMjoKLQlA ZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNYXNzY29tcCBSVFUgNC4xQS4uLicK LQl1Y2IgbWFrZSB3ZXJtaXQgXAotCSJDRkxBR1M9IC1EQlNENCAtRFJUVSAtRFhORElSIC1ESERC VVVDUCAkKEtGTEFHUykiIFwKLQkiTElCUyA9IC1sbmRpciIKLQotI01hc3Njb21wL0NvbmN1cnJl bnQgUlRVIDQuMCBvciBsYXRlciwgc2FtZSBhcyBhYm92ZSwKLSNJbmNsdWRlcyA8c3lzL25kaXIu aD4KLSNOb3RlICJMSUJTID0gLWxuZGlyIiBtaWdodCBub3QgYmUgbmVjZXNzYXJ5IGJlY2F1c2Ug b2YgInVjYiBtYWtlIi4KLXJ0dWJzZDM6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVS KSBmb3IgTWFzc2NvbXAgUlRVIDQueCBCU0QuLi4nCi0JdWNiIG1ha2Ugd2VybWl0ICJDRkxBR1M9 IC1EQlNENCAtRFJUVSAtREhEQlVVQ1AgJChLRkxBR1MpIiBcCi0JIkxJQlMgPSAtbG5kaXIiCi0K LSNNYXNzY29tcC9Db25jdXJyZW50IFJUVSA0LjAgb3IgbGF0ZXIsIFN5c3RlbSBWIFIyLCB1c2lu ZyA8ZGlyZW50Lmg+LgotI0luIGNhc2Ugb2YgcHJvYmxlbXMsIGFkZCBiYWNrIHRoZSAtRFJUVSBz d2l0Y2guCi0jSW4gY2FzZSAtRFRDUFNPQ0tFVCBnaXZlcyB0cm91YmxlLCByZW1vdmUgaXQuCi1y dHVzNToKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNYXNzY29tcCBSVFUg NC54Li4uJwotCSQoTUFLRSkgd2VybWl0IFwKLQkiQ0ZMQUdTPSAtREFUVFNWIC1ESERCVVVDUCAt RERJUkVOVCAtRFRDUFNPQ0tFVCAkKEtGTEFHUykiCi0KLSNNYXNzY29tcC9Db25jdXJyZW50IFJU VSA0LngsIFN5c3RlbSBWIFIzLCB1c2luZyA8ZGlyZW50Lmg+LgotI1VzZSB0aGlzIG9uZSBpZiBy dHVzNSBnaXZlcyB3YXJuaW5ncyBhYm91dCBwb2ludGVyIHR5cGUgbWlzbWF0Y2hlcy4KLSNJbiBj YXNlIG9mIHByb2JsZW1zLCBhZGQgYmFjayB0aGUgLURSVFUgc3dpdGNoLgotcnR1czVyMzoKLQlA ZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNYXNzY29tcCBSVFUgU3lzIFYgUjMu Li4nCi0JJChNQUtFKSB3ZXJtaXQgIkNGTEFHUz0gLURTVlIzIC1ESERCVVVDUCAtRERJUkVOVCAk KEtGTEFHUykiCi0KLSNERUMgUHJvLTN4eCB3aXRoIFByby9WZW5peCBWMS4wIG9yIFYxLjEKLSMg UmVxdWlyZXMgY29kZS1tYXBwaW5nIG9uIG5vbi1JJkQtc3BhY2UgMTEvMjMgcHJvY2Vzc29yLCBw bHVzIHNvbWUKLSMgZmlkZGxpbmcgdG8gZ2V0IGludGVycnVwdCB0YXJnZXRzIGludG8gcmVzaWRl bnQgY29kZSBzZWN0aW9uLgotIyBUaGlzIGFsbW9zdCBjZXJ0YWlubHkgZG9lc24ndCB3b3JrIGFu eSBtb3JlLgotcHJvdngxOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIERF QyBQcm8tM3h4LCBQcm8vVmVuaXggMS54Li4uJwotCSQoTUFLRSkgd2FydCAiQ0ZMQUdTPSAtRFBS T1ZYMSAkKEtGTEFHUykiICJMTktGTEFHUz0gIgotCSQoTUFLRSkgd2VybWl0ICJDRkxBR1MgPSAt RFBST1ZYMSAtRE5PRklMRUggLW1kNzgwIiBcCi0JCSJMTktGTEFHUz0gLXUgX3NsZWVwIC1sYyAt bWQ3ODAiCi0KLSNOaXhkb3JmIFRhcmdvbi8zMS4KLSNBVCZUIFVOSVggU3lzdGVtIFYgUjMsIHNp Z25hbCgpIGlzIHZvaWQgcmF0aGVyIHRoYW4gaW50LgotI1VzZXMgZGlyZW50Lmggd2l0aG91dCBI b25leSBEYW5CZXIgdXVjcC4KLXQzMXRvczQweDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQo Q0tWRVIpIGZvciBUYXJnb24vMzEgd2l0aCBUT1MgNC4wLnh4Li4uJwotCQkkKE1BS0UpIHdlcm1p dCBcCi0JCSJDRkxBR1M9IC1EU1ZSMyAtRERJUkVOVCAkKEtGTEFHUykgLU8iIFwKLQkJIkxOS0ZM QUdTPSIKLQotI05DUiBUb3dlciAxNjMyLCBPUyAxLjAyCi10b3dlcjE6Ci0JQGVjaG8gJ01ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTkNSIFRvd2VyIDE2MzIsIE9TIDEuMDIuLi4nCi0JJChN QUtFKSB3ZXJtaXQgIkNGTEFHUz0gLURUT1dFUjEgJChLRkxBR1MpIgotCi0jTkNSIFRvd2VyIDMy LCBPUyBSZWxlYXNlIDEueHgueHgKLXRvd2VyMzItMToKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBOQ1IgVG93ZXIgMzIgUmVsIDEgU3lzdGVtIFYgUjIuLi4nCi0JQGVjaG8g J0FkZCBLRkxBR1M9LURJU0RJUkJVRyBpZiB5b3UgZ2V0IGVycm9ycyBhYm91dCBTX0lTUkVHL1Nf SVNESVIuJwotCSQoTUFLRSkgd2VybWl0IFwKLQkiQ0ZMQUdTID0gLURBVFRTViAkKEtGTEFHUykg LU8iICJMTktGTEFHUyA9IC1uIgotCi0jTkNSIFRvd2VyIDMyLCBPUyBSZWxlYXNlIDIueHgueHgK LXRvd2VyMzItMjoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBOQ1IgVG93 ZXIgMzIgUmVsIDIgU3lzdGVtIFYgUjIuLi4nCi0JJChNQUtFKSB3ZXJtaXQgXAotCSJDRkxBR1Mg PSAtREFUVFNWIC1ESERCVVVDUCAkKEtGTEFHUykgLU8yIiBcCi0JIkxOS0ZMQUdTID0gLW4iCi0K LSNOQ1IgVG93ZXIgMzIsIE9TIFJlbGVhc2VzIGJhc2VkIG9uIFN5c3RlbSBWIFIzCi0jRG9uJ3Qg YWRkIC1ETkFQIChkb2Vzbid0IHdvcmsgcmlnaHQpIG9yIC1EUkRDSEsgKG5vdCBhdmFpbGFibGUg aW4gbGliYykuCi10b3dlcjMyOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9y IE5DUiBUb3dlciAzMiBTeXN0ZW0gViBSMy4uLicKLQkkKE1BS0UpIHdlcm1pdCBcCi0JIkNGTEFH UyA9IC1EU1ZSMyAtRERJUkVOVCAtREhEQlVVQ1AgLUROT1NZU0lPQ1RMSCAkKEtGTEFHUykgXAot CS1EVUlEX1Q9dXNob3J0IC1ER0lEX1Q9dXNob3J0IC1PMSIKLQotI05DUiBUb3dlciAzMiwgT1Mg UmVsZWFzZXMgYmFzZWQgb24gU3lzdGVtIFYgUjMKLXRvd2VyMzJnOgotCUBlY2hvICdNYWtpbmcg Qy1LZXJtaXQgJChDS1ZFUikgZm9yIE5DUiBUb3dlciAzMiBTeXN0ZW0gViBSMywgZ2NjLi4uJwot CSQoTUFLRSkgd2VybWl0ICJDQyA9IGdjYyIgXAotCSJDRkxBR1MgPSAtRFNWUjMgLURESVJFTlQg LURIREJVVUNQIC1ETk9TWVNJT0NUTEggJChLRkxBR1MpIFwKLQlEVUlEX1Q9dXNob3J0IC1ER0lE X1Q9dXNob3J0IC1PIC1mc3RyZW5ndGgtcmVkdWNlIC1mb21pdC1mcmFtZS1wb2ludGVyIgotCi0j Rm9ydHVuZSAzMjoxNiwgRm9yOlBybyAxLjggKG1vc3RseSBsaWtlIDQuMWJzZCkKLWZ0MTg6Ci0J QGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgRm9ydHVuZSAzMjoxNiBGb3I6UHJv IDEuOC4uLicKLQkkKE1BS0UpIHdlcm1pdCBcCi0JIkNGTEFHUz0gLUROT0RFQlVHIC1EQlNENCAt REZUMTggLUROT0ZJTEVIICQoS0ZMQUdTKSBcCi0JLURQSURfVD1zaG9ydCIKLQotI0ZvcnR1bmUg MzI6MTYsIEZvcjpQcm8gMi4xIChtb3N0bHkgbGlrZSA0LjFic2QpLgotI1RoZSBtb2R1bGVzIHRo YXQgYnJlYWsgdGhlIG9wdGltaXplciBhcmUgY29tcGlsZWQgc2VwYXJhdGVseS4KLWZ0MjE6Ci0J QGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgRm9ydHVuZSAzMjoxNiBGb3I6UHJv IDIuMS4uLicKLQkkKE1BS0UpIGNrdXVzeC4kKEVYVCkgIkNGTEFHUz0gLUROT0RFQlVHIC1EQlNE NCAtREZUMjEgLUROT0ZJTEVIIFwKLQktU1lNIDgwMCAgLURDS19DVVJTRVMgJChLRkxBR1MpIC1E UElEX1Q9c2hvcnQiIFwKLQkiTE5LRkxBR1M9IC1uIC1zIiAiTElCUz0gLWxjdXJzZXMgLWx0ZXJt Y2FwIC1sdiAtbG5ldCIKLQkkKE1BS0UpIGNrdXhsYS4kKEVYVCkgIkNGTEFHUz0gLUROT0RFQlVH IC1EQlNENCAtREZUMjEgLUROT0ZJTEVIIFwKLQktU1lNIDgwMCAgLURDS19DVVJTRVMgJChLRkxB R1MpIC1EUElEX1Q9c2hvcnQiIFwKLQkiTE5LRkxBR1M9IC1uIC1zIiAiTElCUz0gLWxjdXJzZXMg LWx0ZXJtY2FwIC1sdiAtbG5ldCIKLQkkKE1BS0UpIGNrdWRpYS4kKEVYVCkgIkNGTEFHUz0gLURO T0RFQlVHIC1EQlNENCAtREZUMjEgLUROT0ZJTEVIIFwKLQktU1lNIDgwMCAgLURDS19DVVJTRVMg JChLRkxBR1MpIC1EUElEX1Q9c2hvcnQiIFwKLQkiTE5LRkxBR1M9IC1uIC1zIiAiTElCUz0gLWxj dXJzZXMgLWx0ZXJtY2FwIC1sdiAtbG5ldCIKLQkkKE1BS0UpIHdlcm1pdCBcCi0JIkNGTEFHUz0g LU8gLUROT0RFQlVHIC1EQlNENCAtREZUMjEgLUROT0ZJTEVIIC1TWU0gODAwIFwKLQktRENLX0NV UlNFUyAkKEtGTEFHUykgLURQSURfVD1zaG9ydCIgXAotCSJMTktGTEFHUz0gLW4gLXMiICJMSUJT PSAtbGN1cnNlcyAtbHRlcm1jYXAgLWx2IC1sbmV0IgotCi0jVmFsaWQgU2NhbGRzdGFyCi0jQmVy a2VsZXlpc2gsIGJ1dCBuZWVkIHRvIGNoYW5nZSBzb21lIHZhcmlhYmxlIG5hbWVzLgotdmFsaWQ6 Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgVmFsaWQgU2NhbGRzdGFyLi4u JwotCSQoTUFLRSkgd2VybWl0IFwKLQkiQ0ZMQUdTPSAtREJTRDQgLUROT0RFQlVHIC1ETk9UTE9H IC1EY2M9Y2N4IC1ERlJFQUQ9MSAkKEtGTEFHUykiCi0KLSNJQk0gSVgvMzcwIG9uIElCTSAzNzAg U2VyaWVzIG1haW5mcmFtZXMKLSNNb3N0bHkgbGlrZSBzeXMzLCBidXQgc2hvdWxkIGJ1ZmZlciBw YWNrZXRzLgotaXgzNzA6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSUJN IElYLzM3MC4uLicKLQkkKE1BS0UpIHdlcm1pdCAiQ0ZMQUdTID0gLURJWDM3MCAtREFUVFNWICQo S0ZMQUdTKSAtaSAtTyIgXAotCSJMTktGTEFHUyA9IC1pIgotCi0jQW1kYWhsIFVUUyAyLjQgb24g SUJNIDM3MCBzZXJpZXMgY29tcGF0aWJsZSBtYWluZnJhbWVzLgotI01vc3RseSBsaWtlIFY3LCBi dXQgY2FuJ3QgZG8gaW5pdHJhd3EoKSBidWZmZXIgcGVla2luZy4KLXV0czI0OgotCUBlY2hvICdN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFtZGFobCBVVFMgMi40Li4uJwotCSQoTUFLRSkg d2VybWl0ICJDRkxBR1M9LURWNyAtRFBST0NOQU1FPVxcXCIkKFBST0MpXFxcIiBcCi0JLURVVFMy NCAtREJPT1ROQU1FPVxcXCIkKEJPT1RGSUxFKVxcXCIgLUROUFJPQ05BTUU9XFxcIiQoTlBST0Mp XFxcIiBcCi0JLUROUFRZUEU9JChOUFRZUEUpICQoRElSRUNUKSAkKEtGTEFHUykiCi0KLSNBbWRh aGwgVVRTViBVTklYIFN5c3RlbSBWID0gU3lzdGVtIFYgUjIgb3IgZWFybGllci4KLXV0c3Y6Ci0J QGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQW1kYWhsIFVUU1YuLi4nCi0JJChN QUtFKSB3ZXJtaXQgXAotCSJDRkxBR1MgPSAtRFVUU1YgJChLRkxBR1MpIC1pIC1PIiAiTE5LRkxB R1MgPSAtaSIKLQotI0FtZGFobCBVVFNWIFVOSVggU3lzdGVtIFYgPSBTeXN0ZW0gViBSMiBvciBl YXJsaWVyLCB3aXRoIFRDUCBzb2NrZXRzIGxpYnJhcnkuCi11dHN2dGNwOgotCUBlY2hvICdNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFtZGFobCBVVFNWIHcvdGNwLi4uJwotCSQoTUFLRSkg d2VybWl0ICJDRkxBR1MgPSBcCi0JLURUQ1BTT0NLRVQgLURVVFNWICQoS0ZMQUdTKSAtaSAtTyIg IkxOS0ZMQUdTID0gLWkiIFwKLQkiTElCUyA9IC1sc29ja2V0IgotCi0jQkJOIEMvNzAgd2l0aCBJ T1MgMi4wCi0jTW9zdGx5IEJlcmtlbGV5LWxpa2UsIGJ1dCB3aXRoIHNvbWUgQVRUaXNtcwotYzcw OgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEJCTiBDLzcwIElPUyAyLjAu Li4nCi0JJChNQUtFKSB3ZXJtaXQgIkNGTEFHUz0gLURCU0Q0IC1EQzcwICQoS0ZMQUdTKSIKLQot I1ppbG9nIFpFVVMgMy4yMQotemlsb2c6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVS KSBmb3IgWmlsb2cgWmV1cyAzLjIxLi4uJwotCSQoTUFLRSkgd2VybWl0IFwKLQkiQ0ZMQUdTID0g LURBVFRTViAtRFpJTE9HIC1ETk9ERUJVRyAkKEtGTEFHUykgLWkgLU8iIFwKLQkiTE5LRkxBR1Mg PSAtaSAtbHB3IgotCi0jV2hpdGVjaGFwZWwgTUctMSBHZW5peCAxLjMKLXdoaXRlOgotCUBlY2hv ICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFdoaXRlY2hhcGVsIE1HLTEgR2VuaXggMS4z Li4uJwotCUB0b3VjaCBja2Nwcm8uYwotCSQoTUFLRSkgd2VybWl0ICJDRkxBR1M9IC1EQlNENCAt RHprc2VsZigpPTAgICQoS0ZMQUdTKSIKLQotI1BpeGVsIDEwMDAKLXBpeGVsOgotCUBlY2hvICdN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFBpeGVsIDEwMDAuLi4nCi0JJChNQUtFKSB3ZXJt aXQgIkNGTEFHUz0gLURCU0Q0IC1EemtzZWxmKCk9MCAkKEtGTEFHUykiCi0KLXB0eDoKLQkkKE1B S0UpICJNQUtFPSQoTUFLRSkiIGR5bml4cHR4MTIKLQotI0NEQyBWWC9WRSA1LjIuMQotdnh2ZToK LQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBDREMgVlgvVkUgNS4yLjEuLi4n Ci0JJChNQUtFKSB3ZXJtaXQgXAotCSJDRkxBR1MgPSAtREFUVFNWIC1EVlhWRSAtRE5PREVCVUcg LUROT1RMT0cgJChLRkxBR1MpIC1pIC1PIiBcCi0JIkxOS0ZMQUdTID0gLWkiCi0KLSNESUFCIERT OTAgb3IgTFVYT1IgQUJDLTkwMDAgd2l0aCBwcmUtNS4yIEROSVguICBTeXMgViB3aXRoIG5hcCgp IGFuZCByZGNoaygpLgotIyBuZCA9IG5vIG9wZW5kaXIoKSwgcmVhZGRpcigpLCBjbG9zZWRpcigp LCBldGMuCi0jIFNvbWUgb2YgdGhlIG1vZHVsZXMgZmFpbCB0byBjb21waWxlIHdpdGggLU8uCi1k bml4bmQ6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgRElBQiBEUzkwIHdp dGggdmVyeSBvbGQgRE5JWCA1LjIuJwotCSQoTUFLRSkgd2VybWl0IFwKLQkiQ0ZMQUdTID0gLURB VFRTViAtRE5BUCAtRFJEQ0hLIC1ERENMUE9QRU4gXAotCS1VX19TVERDX18gJChLRkxBR1MpIgot Ci0jRElBQiBEUzkwIHdpdGggRE5JWCA1LjIuICBTeXMgViB3aXRoIG5hcCgpIGFuZCByZGNoaygp LgotIyBUaGlzIG9uZSBoYXMgb3BlbmRpcigpLCByZWFkZGlyKCksIGNsb3NlZGlyKCksIGV0Yy4K LSMgU29tZSBvZiB0aGUgbW9kdWxlcyBmYWlsIHRvIGNvbXBpbGUgd2l0aCAtTy4KLWRuaXg6Ci0J QGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgRElBQiBEUzkwIHdpdGggb2xkIERO SVggNS4yLi4uJwotCSQoTUFLRSkgd2VybWl0IFwKLQkiQ0ZMQUdTID0gLURBVFRTViAtRE5BUCAt RFJEQ0hLIC1ERElSRU5UICBcCi0JLVVfX1NURENfXyAkKEtGTEFHUykiCi0KLSNESUFCIERTOTAg d2l0aCBETklYIDUuMi4gIFN5cyBWIHdpdGggbmFwKCkgYW5kIHJkY2hrKCkuCi0jIEFzIGFib3Zl LCBidXQgd2l0aCBjdXJzZXMgYW5kIFRDUC9JUC4KLSMgWW91IG1pZ2h0IGdldCBjb21wbGFpbnRz IGFib3V0IHJlZGVmaW5pdGlvbiBvZiBPX1JET05MWSwgZXRjLCBiZWNhdXNlCi0jIG9mIGJ1Z3Mg aW4gdGhlIEROSVggaGVhZGVyIGZpbGVzLCB3aGljaCBjYW4gYmUgZml4ZWQgYnkgYWRkaW5nICNp Zm5kZWYuLi4KLSMgYXJvdW5kIHRoZSBvZmZlbmRpbmcgZGVmaW5pdGlvbnMgaW4gdGhlIGhlYWRl ciBmaWxlcy4KLWRuaXhuZXRjOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9y IERJQUIgRFM5MCB3aXRoIG9sZCBETklYIDUuMi4uLicKLQkkKE1BS0UpIHdlcm1pdCBcCi0JIkNG TEFHUyA9IC1EQVRUU1YgLUROQVAgLURSRENISyAtRERJUkVOVCAgXAotCS1EVENQU09DS0VUIC1E Q0tfQ1VSU0VTIC1JL3Vzci9pbmNsdWRlL2JzZCAtVV9fU1REQ19fICQoS0ZMQUdTKSIgXAotCSJM SUJTID0gLWxuIC1sY3Vyc2VzIgotCi0jRElBQiBEUzkwIHdpdGggRE5JWCA1LjMgb3IgbGF0ZXIs IHdpdGggSERCIFVVQ1AsIG5hcCgpIGFuZCByZGNoaygpLgotZG5peDVyMzoKLQlAZWNobyAnTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBESUFCIERTOTAgd2l0aCBETklYIDUuMy4uLicKLQlA ZWNobyAnd2l0aCBIb25leSBEYW5CZXIgVVVDUCcKLQkkKE1BS0UpIHdlcm1pdCBcCi0JIkNGTEFH UyA9IC1EU1ZSMyAtREhEQlVVQ1AgLUROQVAgLURSRENISyAtRERJUkVOVCBcCi0JLURDS19DVVJT RVMgLURSRU5BTUUgJChLRkxBR1MpIC1PIiAiTElCUz0gLWxjdXJzZXMiCi0KLSNESUFCIERTOTAg d2l0aCBETklYIDUuMyBvciBsYXRlciwgd2l0aCBIREIgVVVDUCwgbmFwKCkgYW5kIHJkY2hrKCkg KyBUQ1AvSVAKLWRuaXg1cjNuZXQ6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBm b3IgRElBQiBEUzkwIHdpdGggRE5JWCA1LjMuLi4nCi0JQGVjaG8gJ3dpdGggSG9uZXkgRGFuQmVy IFVVQ1AgYW5kIFRDUC9JUCcKLQkkKE1BS0UpIHdlcm1pdCBcCi0JIkNGTEFHUyA9IC1EU1ZSMyAt REhEQlVVQ1AgLUROQVAgLURSRENISyAtRERJUkVOVCBcCi0JLURUQ1BTT0NLRVQgLURDS19DVVJT RVMgLURSRU5BTUUgJChLRkxBR1MpIC1PIFwKLQktSS91c3IvaW5jbHVkZS9ic2QiICJMSUJTID0g LWxuIC1sY3Vyc2VzIgotCi0jRElBQiBEUzkwIHdpdGggRE5JWCA1LjMgMi4yIG9yIGxhdGVyLCB3 aXRoIEhEQiBVVUNQLCBuYXAoKSBhbmQgcmRjaGsoKSwKLSNBTlNJIEMgY29tcGlsYXRpb24gYW5k IGxpYnJhcmllcy4KLSNOb3RlIHRoYXQgZm9yIEROSVggNS4zIDIuMiB5b3UgaGF2ZSB0byBjb3Jy ZWN0IGEgYnVnIGluIC91c3IvaW5jbHVkZS9zdGRsaWIuaDoKLSNjaGFuZ2UgImV4dGVybgl2b2lk IGZyZWUoY2hhciAqc3RyKTsiCi0jdG8gICAgICJleHRlcm4gdm9pZCBmcmVlKHZvaWQgKnN0cik7 IgotI05PVEU6IFRoaXMgYnVnIGlzIHJlcG9ydGVkbHkgZml4ZWQgaW4gRE5JWCA1LjMgMi4yLjEu Ci0jU2hvdWxkIHlvdSBnZXQgZmF0YWwgZXJyb3JzIGNhdXNlZCBieSBoYXJtbGVzcyBwb2ludGVy LXR5cGUgbWlzbWF0Y2hlcywKLSNsaWtlIGJldHdlZW4gc2lnbmVkIGFuZCB1bnNpZ25lZCBjaGFy LCBqdXN0IHJlbW92ZSAtWDcuCi1kbml4NXIzYW5zaToKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBESUFCIERTOTAgd2l0aCBETklYIDUuMy4uLicKLQlAZWNobyAnd2l0aCBB TlNJIEMgSG9uZXkgRGFuQmVyIFVVQ1AnCi0JJChNQUtFKSB3ZXJtaXQgXAotCSJDRkxBR1MgPSAt RFNWUjMgLURESUFCIC1ESERCVVVDUCAtRE5BUCAtRFJEQ0hLIC1ERElSRU5UIFwKLQktRENLX0FO U0lMSUJTIC1EQ0tfQ1VSU0VTIC1EUkVOQU1FIC1PIC1YNyAtWDkgJChLRkxBR1MpIiBcCi0JIkxJ QlM9IC1sY3Vyc2VzIgotCi0jRElBQiBEUzkwIHdpdGggRE5JWCA1LjMgMi4yIG9yIGxhdGVyLCB3 aXRoIEhEQiBVVUNQLCBuYXAoKSBhbmQgcmRjaGsoKSwKLSMgKyBUQ1AvSVAsIEFOU0kgQyBjb21w aWxhdGlvbiBhbmQgbGlicmFyaWVzLgotI1Nob3VsZCB5b3UgZ2V0IGZhdGFsIGVycm9ycyBjYXVz ZWQgYnkgaGFybWxlc3MgcG9pbnRlci10eXBlIG1pc21hdGNoZXMsCi0jbGlrZSBiZXR3ZWVuIHNp Z25lZCBhbmQgdW5zaWduZWQgY2hhciwganVzdCByZW1vdmUgLVg3LgotZG5peDVyM2Fuc2luZXQ6 Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgRElBQiBEUzkwIHdpdGggRE5J WCA1LjMuLi4nCi0JQGVjaG8gJ3dpdGggQU5TSSBDIEhvbmV5IERhbkJlciBVVUNQJwotCSQoTUFL RSkgd2VybWl0IFwKLQkiQ0ZMQUdTID0gLURTVlIzIC1ERElBQiAtREhEQlVVQ1AgLUROQVAgLURS RENISyAtRERJUkVOVCBcCi0JLURUQ1BTT0NLRVQgLURDS19BTlNJTElCUyAtRENLX0NVUlNFUyAt RFJFTkFNRSAtTyAtWDcgLVg5ICQoS0ZMQUdTKSBcCi0JLUkvdXNyL2luY2x1ZGUvYnNkIiAiTElC Uz0gLWxuIC1sY3Vyc2VzIgotCi0jUmlkZ2UgMzIgd2l0aCBST1MgMy4yCi1yaWRnZTMyOgotCUBl Y2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgUmlkZ2UgMzIgUk9TIDMuMicKLQkkKE1BS0Up IHdlcm1pdCBcCi0JIkNGTEFHUyA9IC1EQVRUU1YgLUROT0ZJTEVIIC1ETk9ERUJVRyAtRE5PVExP RyAkKEtGTEFHUykgLWkgLU8iIFwKLQkiTE5LRkxBR1MgPSAtaSIKLQotI0FsdG9zIDQ4NiwgNTg2 LCBvciA5ODYgd2l0aCBYZW5peCAzLjAKLWFsdG9zOgotCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQg JChDS1ZFUikgZm9yIEFsdG9zIHg4NiB3aXRoIFhlbml4IDMuMC4uLicKLQkkKE1BS0UpIHdlcm1p dCBcCi0JIkNGTEFHUz0gLURBVFRTViAtREE5ODYgLUROT0RFQlVHIC1ETk9UTE9HICQoS0ZMQUdT KSAtaSAtTyIgXAotCSJMTktGTEFHUz0gLWkiCi0KLSNBbHRvcyA5ODYgd2l0aCBYZW5peCAzLjAs IGFzIGFib3ZlLCBidXQgY29tbWFuZC1saW5lIG9ubHksIG1pbmltYWwgc2l6ZS4KLSNGb3Igc3lz dGVtcyB3aXRoIHNtYWxsIG1lbW9yaWVzLiAgSXQgbWlnaHQgYWxzbyBiZSBuZWNlc3NhcnkgdG8g Y2hvcCBjZXJ0YWluCi0jbW9kdWxlcyB1cCBpbnRvIHNtYWxsZXIgcGllY2VzLCBlLmcuIGNrdXVz My02LCBiZWNhdXNlIG9mIHN5bWJvbCB0YWJsZQotI292ZXJmbG93LiAgIElmIHRoaXMgbWFrZWZp bGUgaXMgdG9vIGJpZyBvciBjb21wbGV4IGZvciB0aGUgQWx0b3MsIGNvbXBpbGUKLSNhbmQgbGlu ayBieSBoYW5kIG9yIHdyaXRlIHNoZWxsIHNjcmlwdHMuCi1hbHRvc2M6Ci0JQGVjaG8gJ01ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQWx0b3MgeDg2IFhlbml4IDMuMCwgcmVtb3RlLi4uJwot CSQoTUFLRSkgd2VybWl0IFwKLQkiQ0ZMQUdTPSAtREFUVFNWIC1EQTk4NiAtRE5PREVCVUcgLURO T1RMT0cgLUROT1NDUklQVCAtRE5PRElBTCBcCi0JLUROT0NTRVRTIC1ETk9BTlNJIC1ETk9NU0VO RCAtRE5PU1BMIC1ETk9JQ1AgJChLRkxBR1MpIC1NbSAtTyIgXAotCSJMTktGTEFHUz0gLU1tIC1z IgotCi0jQWx0b3MgOTg2IHdpdGggWGVuaXggMy4wLCBhcyBhYm92ZSwgYnV0IGludGVyYWN0aXZl IG9ubHksIG1pbmltYWwgc2l6ZS4KLWFsdG9zaToKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQo Q0tWRVIpIGZvciBBbHRvcyB4ODYgWGVuaXggMy4wLCBsb2NhbC4uLicKLQkkKE1BS0UpIHdlcm1p dCBcCi0JIkNGTEFHUz0gLURBVFRTViAtREE5ODYgLUROT0RFQlVHIC1ETk9UTE9HIC1ETk9TQ1JJ UFQgLUROT0RJQUwgXAotCS1ETk9DU0VUUyAtRE5PQU5TSSAtRE5PTVNFTkQgLUROT1NQTCAtRE5P Q01ETCAtRE5PRlJJTExTIC1ETk9IRUxQIFwKLQktRE5PU0VUS0VZICQoS0ZMQUdTKSAtTW0gLU8i ICJMTktGTEFHUz0gLU1tIC1zIgotCi0jIEFsdG9zIEFDUzY4MDAwIDY4MDAwIFN5c3RlbSwgVU5J WCBTeXN0ZW0gMyBSZWxlYXNlIDIsIDUxMmsgbWVtb3J5LgotIyBhbHNvIG5lZWRzIGdldGN3ZCgp IGV4dGVybmFsIGZ1bmN0aW9uOyBzZWUgY2t1aW5zLnR4dCBmaWxlLgotIyBhbHNvLCBzeXMvdHlw ZXMuaCBuZWVkZWQgbW9kaWZ5aW5nOgotIyAgICNpZmRlZiBfX1NZU19UWVBFU19IX18sICNkZWZp bmUgLi4uLCAjZW5kaWYKLSMgYWxzbywgY2t1dXMyLmMgTVVTVCBiZSBjb21waWxlZCBOT09QVCBl bHNlIHN5bWJvbCB0YWJsZSBpcyBkZXN0cm95ZWQhCi0jIFN1Ym1pc3Npb24gYnkgUm9iZXJ0IFdl aW5lci9Qcm9ncmFtbWluZyBQbHVzLCByd2VpbmVyQHByb2dwbHVzLmNvbS4KLSMKLWFsdG9zMzoK LQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBbHRvcyBBQ1M2OGsgVU5JWCBT eXN0ZW0gSUlJJwotCSQoTUFLRSkgY2t1dXMyLiQoRVhUKSAiQ0ZMQUdTID0gLURBVFRTViAtRE5P Q1NFVFMgLUROT1NFVEtFWSAtRE5PSkMgXAotCS1ETk9ESUFMIC1ERENMUE9QRU4gLUROT1NDUklQ VCAtRE5PSEVMUCAkKEtGTEFHUykgLWkiCi0JJChNQUtFKSB3ZXJtaXQgXAotCSJDRkxBR1MgPSAt REFUVFNWIC1ETk9DU0VUUyAtRE5PU0VUS0VZIC1ETk9KQyBcCi0JLUROT0RJQUwgLUREQ0xQT1BF TiAtRE5PU0NSSVBUIC1ETk9IRUxQICQoS0ZMQUdTKSAtaSAtTyIgXAotCSJMTktGTEFHUyA9IC1p IiAiTElCUyA9IGdldGN3ZC4kKEVYVCkiCi0KLSNNSU5JWCAtIE9yaWdpbmFsIFBDIHZlcnNpb24g d2l0aCA2NEsrNjRLIGxpbWl0LgotIyBSZXBvcnRlZGx5LCB0aGUgbGlua2VyIChhc2xkKSBjYW4g cnVuIG91dCBvZiBzcGFjZSB3aGlsZSBsaW5raW5nLiAgVGhlIG9ubHkKLSMgd2F5IGFyb3VuZCB0 aGlzIGlzIHRvIG1ha2UgYSBjb3B5IG9mIGxpYmMuYSBmcm9tIHdoaWNoIGFsbCBtb2R1bGVzIHRo YXQgYXJlCi0jIG5vdCB1c2VkIGJ5IEtlcm1pdCBhcmUgcmVtb3ZlZC4gIElmIHlvdSBoYXZlIHRy b3VibGUgY29tcGlsaW5nIG9yIHJ1bm5pbmcKLSMgd2FydCwgInRvdWNoIHdhcnQiLiAgSWYgdGhh dCBkb2Vzbid0IGhlbHAsICJ0b3VjaCBja2Nwcm8uYyIuCi0jIFRoZSB2ZXJzaW9uIGNvbmZpZ3Vy ZWQgYmVsb3cgaGFzIG5vIGludGVyYWN0aXZlIGNvbW1hbmQgcGFyc2VyLgotIyBJZiB5b3UgY2Fu IGJ1aWxkIHRoaXMgdmVyc2lvbiBzdWNjZXNzZnVsbHksIG1heWJlIHRoZXJlIHdpbGwgYmUgcm9v bSBmb3IKLSMgYSBtaW5pbWFsIGludGVyYWN0aXZlIGNvbW1hbmQgcGFyc2VyIHRvbzsgdHJ5IHJl cGxhY2luZyAtRE5PSUNQIHdpdGgKLSMgLUROT1NQTCwgcGx1cyBldmVyeSBvdGhlciAtRE5PeHh4 IGZsYWcgdGhlcmUgaXMsIGV4Y2VwdCBmb3IgLUROT0lDUAotIyAoc2VlIGNrY2NmZy50eHQpLgot bWluaXg6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTUlOSVgsIG5vIGNv bW1hbmQgcGFyc2VyLi4uJwotCUBlY2hvICdUT1RBTExZIFVOVEVTVEVEIScKLQkkKE1BS0UpIHdl cm1pdCBFWFQ9cyBcCi0JIkNGTEFHUz0gLURWNyAtRE1JTklYIC1pIC1EX01JTklYIC1EX1BPU0lY X1NPVVJDRSBcCi0JLURQSURfVD1waWRfdCAtRFVJRF9UPXVpZF90IC1ER0lEX1Q9Z2lkX3QgLURT SUdfViBcCi0JLUROT1hNSVQgLUROT01TRU5EIC1ETk9GUklMTFMgLUROT0RJQUwgLUROT0hFTFAg LUROT0RFQlVHIC1ETk9UTE9HIFwKLQktRE5PU0NSSVBUIC1ETk9DU0VUUyAtRE5PSUNQIC1ETk9T RVRLRVkgJChLRkxBR1MpIiBcCi0JIkxOS0ZMQUdTPSAtaSAtVCIKLQotI01JTklYIC0gUEMgdmVy c2lvbiB3aXRoIDY0Sys2NEsgbGltaXQsIG5ldyAoYXMgeWV0IHVucmVsZWFzZWQpIEFDSyAyLjAg YmV0YSBDCi0jY29tcGlsZXIsIHdoaWNoIG91dHB1dHMgLm8gb2JqZWN0IGZpbGVzLCByYXRoZXIg dGhhbiAucy4gIEJ1dCAnbWFrZScgc3RpbGwKLSNleHBlY3RzIC5zIGZpbGVzLCBzbyBtdXN0IGJl IHBhdGNoZWQgdG8gdXNlIC5vLiAgVGVzdGVkIG9uIE1pbml4IDEuNS4xMC4KLW1pbml4MTU6Ci0J QGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTUlOSVggKG5ldyBBQ0sgMi4wIGNv bXBpbGVyKSwnCi0JQGVjaG8gJ25vIGNvbW1hbmQgcGFyc2VyLi4uICBUT1RBTExZIFVOVEVTVEVE IScKLQkkKE1BS0UpIHdlcm1pdCBcCi0JIkNGTEFHUz0gLURWNyAtRE1JTklYIC1pIC1EX01JTklY IC1EX1BPU0lYX1NPVVJDRSBcCi0JLURQSURfVD1waWRfdCAtRFVJRF9UPXVpZF90IC1ER0lEX1Q9 Z2lkX3QgLURTSUdfViAtRE5PRElBTCBcCi0JLUROT0hFTFAgLUROT0RFQlVHIC1ETk9UTE9HIC1E Tk9TQ1JJUFQgLUROT0NTRVRTIC1ETk9JQ1AgJChLRkxBR1MpIiBcCi0JIkxOS0ZMQUdTPSAtaSAt VCIKLQotI01JTklYMyAtIE1JTklYIDMuMCAobm8gVk0pIC0gTWF5LUF1ZyAyMDA1IChub3Qgc3Vy ZSBpZiB0aGlzIGV2ZXIgd29ya2VkLi4uKQotbWluaXgzOgotCUBlY2hvICdNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIE1JTklYMy4uLicKLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKLQkiQ0ZMQUdTPSAtRFBPU0lYIC1ETk9VVUNQIC1ETk9MRUFSTiAkKEtG TEFHUykgLURNSU5JWDIgXAotCS1ETUlOSVgzIC1ETk9fUEFSQU1fSCAtRE5PU1lTTE9HIC1ETk9H RVRVU0VSU0hFTEwgXAotCS1ETk9JTklUR1JPVVBTIC1ETk9GVFJVTkNBVEUgLUROT0FSUk9XS0VZ UyAtREROT1JFQUxQQVRIIFwKLQktRFRDUFNPQ0tFVCAtRE5PVElNRVpPTkUgLUROT0ZUUCAtRE5P X0ROU19TUlYgLU8iCi0KLSNNSU5JWDMxNSAtIE1JTklYIDMgMS41IC0gSmFudWFyeSAyMDEwCi1t aW5peDMxNToKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNaW5peCAzIDEu NS4uLicKLQkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKLQkiQ0ZM QUdTPSAtRE1JTklYMzE1IC1EUE9TSVggLUROT1VVQ1AgLUROT0pDIC1ETk9MRUFSTiAkKEtGTEFH UykgXAotCS1ESEFWRV9PUEVOUFRZIC1ETk9fUEFSQU1fSCAtRE5PU1lTTE9HIC1ETk9HRVRVU0VS U0hFTEwgXAotCS1EU1lTVElNRUggLUROT0lOSVRHUk9VUFMgLUROT0ZUUlVOQ0FURSAtRE5PQVJS T1dLRVlTIC1ETk9SRUFMUEFUSCBcCi0JLURUQ1BTT0NLRVQgLUROT1RJTUVaT05FIC1ETk9fRE5T X1NSViAtRE5PRlRQIC1PIgotCi0jUEZVIENvbXBhY3QgQSBTZXJpZXMgVU5JWCBTeXN0ZW0gViBS MywgU1gvQSBUSVNQIFYxMC9MNTAgKEphcGFuKQotI01heWJlIHRoZSAtaSBsaW5rIG9wdGlvbiBz aG91bGQgYmUgcmVtb3ZlZD8KLXN4YWU1MDoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tW RVIpIGZvciBQRlUgU1gvQSBWMTAvTDUwLi4uJwotCSQoTUFLRSkgeGVybWl0IFwKLQkiQ0ZMQUdT PSAtRFNWUjMgLURESVJFTlQgLURzeGFFNTAgLURUQ1BTT0NLRVQgJChLRkxBR1MpIC1pIC1PIiBc Ci0JIkxOS0ZMQUdTPSAiCi0KLSNUZWt0cm9uaXggNjEzMCwgNDMxOSwgNDMwMSwgZXRjLCB3aXRo IFVUZWsgT1MsIC91c3Ivc3Bvb2wvdXVjcC9MQ0suLy4uLgotI1RoZSBtb2RlbHMgdGhhdCBzdXBw b3J0IGhhcmR3YXJlIGZsb3cgY29udHJvbC4KLXV0ZWs6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgNC4yQlNEL1VUZWssIGhhcmR3YXJlIGZsb3cgY29udHJvbCcKLQkkKE1B S0UpIHdlcm1pdCBcCi0JIkNGTEFHUz0gLU8gLURMQ0tESVIgLURCU0Q0IC1EVENQU09DS0VUIFwK LQktRFVURUsgLUREQ0xQT1BFTiAtRExPQ0tfRElSPVxcXCIvdXNyL3Nwb29sL3V1Y3AvTENLLlxc XCIgXAotCS1EVFJNQlVGTD0yMDQ4IC1EQ0tfRFRSQ1RTICQoS0ZMQUdTKSIKLQotI1Rla3Ryb25p eCA0MzE1LCA0MzE2LCA0MzE3IHdpdGggVVRlayBPUywgL3Vzci9zcG9vbC91dWNwL0xDSy4vLi4u Ci0jVGhlIG1vZGVscyB0aGF0IGRvIG5vdCBmdWxseSBzdXBwb3J0IGhhcmR3YXJlIGZsb3cgY29u dHJvbC4KLXV0ZWtub2h3ZmM6Ci0JQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3Ig NC4yQlNEL1VUZWssIG5vIGgvdyBmbG93IGNvbnRyb2wnCi0JJChNQUtFKSB3ZXJtaXQgXAotCSJD RkxBR1M9IC1PIC1ETENLRElSIC1EQlNENCAtRFRDUFNPQ0tFVCBcCi0JLURVVEVLIC1ERENMUE9Q RU4gLURMT0NLX0RJUj1cXFwiL3Vzci9zcG9vbC91dWNwL0xDSy5cXFwiIFwKLQktRFRSTUJVRkw9 MjA0OCAkKEtGTEFHUykiCi0KLSNUZWt0cm9uaXggWEQ4OCB3aXRoICBVVGVrViBPUwotdXRla3Zy MzoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBUZWt0cm9uaXggWEQ4OCBV VGVrViBSMy4uLicKLQkkKE1BS0UpIHdlcm1pdCBcCi0JIkNGTEFHUz0gLURTVlIzIC1ERElSRU5U IC1ESERCVVVDUCBcCi0JLURUQ1BTT0NLRVQgLURTWVNVVElNRUggLURDS19DVVJTRVMgJChLRkxB R1MpIC1PIiBcCi0JIkxJQlM9IC1sY3Vyc2VzIiAiTE5LRkxBR1M9IC1zIgotCi0jUGVya2luLUVs bWVyIDMyMDAgWGVsb3MgUjAyIG9yIGVhcmxpZXIKLWNjb3AxOgotCUBlY2hvICdNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIFhlbG9zICYgUHVibGljIERvbWFpbiBEaXJlbnQgY2FsbHMnCi0J QGVjaG8gJ29yIFN5c3RlbSBWIFIyIG9yIGVhcmxpZXIuLi4nCi0JJChNQUtFKSB3ZXJtaXQgXAot CSJDRkxBR1MgPSAtREFUVFNWIC1Edm9pZD1pbnQgLURESVJFTlQgLURDS19DVVJTRVMgXAotCSQo S0ZMQUdTKSAtTyIgIkxOS0ZMQUdTID0iICJMSUJTPSAtbGN1cnNlcyAtbHRlcm1saWIiCi0KLSNF bmNvcmUsIFVNQVggNC4zIChCU0QpIGJ1dCB3aXRob3V0IGFjdWNudHJsIHByb2dyYW0uCi1lbmNv cmU6Ci0JJChNQUtFKSAiTUFLRT0kKE1BS0UpIiB1bWF4NDMgIktGTEFHUz0kKEtGTEFHUykiCi0K LSNFbmNvcmUsIGFzIGFib3ZlLCBidXQgd2l0aCBjdXJzZXMgZmlsZSB0cmFuc2ZlciBkaXNwbGF5 IGluY2x1ZGVkLgotZW5jb3JlYzoKLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHVtYXg0MyAiS0ZM QUdTPS1EQ0tfQ1VSU0VTICQoS0ZMQUdTKSIgXAotCSJMSUJTPSAtbGN1cnNlcyAtbHRlcm1jYXAi Ci0KLSNFbmNvcmUsIFVNQVggNC4zIChCU0QpIGJ1dCB3aXRob3V0IGFjdWNudHJsIHByb2dyYW0u Ci11bWF4NDM6Ci0JQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBFbmNvcmUgVU1B WCA0LjMuLi4KLQkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIFBBUkFMTEVMPTQgeGVybWl0IFwKLQki Q0ZMQUdTPSAtREJTRDQzIC1ERU5DT1JFIC1EVENQU09DS0VUICQoS0ZMQUdTKSAtTyIKLQotI0Vu Y29yZSwgVU1BWCA0LjIgKEJTRCkKLXVtYXg0MjoKLQlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIEVuY29yZSBVTUFYIDQuMi4uLgotCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgUEFS QUxMRUw9NCB4ZXJtaXQgXAotCSJDRkxBR1M9IC1EQlNENCAtREVOQ09SRSAtRFRDUFNPQ0tFVCAk KEtGTEFHUykgLU8iCi0KLSNFbmNvcmUgODhLIFVNQVggNS4zIHdpdGggVENQL0lQIHN1cHBvcnQK LWVuY29yZTg4azoKLQlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBFbmNvcmUg ODhLIFVNQVggViwgVENQL0lQLi4uJwotCSQoTUFLRSkgeGVybWl0IFwKLQkiQ0ZMQUdTID0gLXEg ZXh0PXBjYyAtRFNWUjMgLURUQ1BTT0NLRVQgLURESVJFTlQgXAotCS1ETk9HRVRJRF9QUk9UT1Mg LURIREJVVUNQICQoS0ZMQUdTKSAtTyIgIkxOS0ZMQUdTID0iCi0KLSNFbmNvcmUgODhLIFVNQVgg NS4zIHdpdGggVENQL0lQIHN1cHBvcnQKLWVuY29yZTg4a2djYzoKLQlAZWNobyAnTWFraW5nIEMt S2VybWl0ICQoQ0tWRVIpIGZvciBFbmNvcmUgODhLIFVNQVggViwgVENQL0lQLCBnY2MuLi4nCi0J JChNQUtFKSB4ZXJtaXQgQ0M9Z2NjIENDMj1nY2MgXAotCSJDRkxBR1MgPSAtRFNWUjMgLURUQ1BT T0NLRVQgLURESVJFTlQgXAotCS1ETk9HRVRJRF9QUk9UT1MgLURIREJVVUNQICQoS0ZMQUdTKSAt TyIgIkxOS0ZMQUdTID0iCi0KLSNTT05ZIE5FV1MsIE5FV1MtT1MgNC4wMUMKLXNvbnluZXdzOgot CUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU09OWSBORVdTLU9TIDQuMDFDLi4u Ci0JJChNQUtFKSB4ZXJtaXQgIkNGTEFHUz0gLURCU0Q0MyAtREFDVUNOVFJMIC1EVENQU09DS0VU IC1PIgotCi0jUnVuIExpbnQgb24gdGhpcyBtZXNzIGZvciBzZWxlY3RlZCB2ZXJzaW9ucy4KLSNU aGVzZSBhcmUgcHJldHR5IG11Y2ggb2Jzb2xldGUgc2luY2UgQU5TSSBDIC8gZ2NjLgotbGludHN1 bjoKLQlAZWNobyAnUnVubmluZyBMaW50IG9uIEMtS2VybWl0ICQoQ0tWRVIpIHNvdXJjZXMgZm9y IFN1bk9TIHZlcnNpb24uLi4nCi0JbGludCAteCAtRFNVTk9TNCAtRERJUkVOVCAtRFRDUFNPQ0tF VCAtRFNBVkVEVUlEIFwKLQlja1tjdV0qLmMgPiBja3VrZXIubGludC5zdW4KLQotbGludGJzZDoK LQlAZWNobyAnUnVubmluZyBMaW50IG9uIEMtS2VybWl0ICQoQ0tWRVIpIHNvdXJjZXMgZm9yIEJT RCA0LjIgdmVyc2lvbi4uJwotCWxpbnQgLXggLURCU0Q0IC1EVENQU09DS0VUIGNrW2N1XSouYyA+ IGNrdWtlci5saW50LmJzZDQyCi0KLWxpbnRzNToKLQlAZWNobyAnUnVubmluZyBMaW50IG9uIEMt S2VybWl0ICQoQ0tWRVIpIHNvdXJjZXMgZm9yIFN5cyBWIHZlcnNpb24uLi4nCi0JbGludCAteCAt REFUVFNWIGNrW2N1XSouYyA+IGNrdWtlci5saW50LnM1Ci0KLSNXaG8gcmVtZW1iZXJzIFRFQ08/ Ci1sb3ZlOgotCUBlY2hvICdOb3Qgd2FyPycKCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDIt YnVpbGQvY2tlcm1pdC05LjAuMzAyL29ja2VybWl0LmluaSBiL2NrZXJtaXQtOS4wLjMwMi1idWls ZC9ja2VybWl0LTkuMC4zMDIvb2NrZXJtaXQuaW5pCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCBmMDA3NTYxLi4wMDAwMDAwCi0tLSBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0 LTkuMC4zMDIvb2NrZXJtaXQuaW5pCisrKyAvZGV2L251bGwKQEAgLTEsNjE4ICswLDAgQEAKLUNP TU1FTlQgLSBTdGFuZGFyZCBDLUtlcm1pdCBpbml0aWFsaXphdGlvbiBmaWxlCi07Ci07IEZvciBD LUtlcm1pdCBWZXJzaW9uOiA4LjAKLTsKLTsgRmlsZW5hbWU6Ci07ICAgLmtlcm1yYyAgICAgKFVO SVgsIE9TLTksIEFlZ2lzKQotOyAgIENLRVJNSVQuSU5JIChPUy8yLCBWTVMsIE9wZW5WTVMsIEFP Uy9WUywgQXRhcmkgU1QsIENvbW1vZG9yZSBBbWlnYSkKLTsgICBja2VybWl0LmluaSAoU3RyYXR1 cyBWT1MpCi07ICAgSzk1LklOSSAgICAgKEtlcm1pdCA5NSAtLSBidXQgdGhpcyBiaWcgdmVyc2lv biBpcyBub3QgdXNlZCB0aGVyZSkKLTsgICBLMi5JTkkgICAgICAoS2VybWl0LzIgIC0tIGJ1dCBk aXR0bykKLTsKLTsgQXV0aG9yczoKLTsgICBGcmFuayBkYSBDcnV6LCBDaHJpc3RpbmUgTS4gR2lh bm9uZSwgSmVmZnJleSBBbHRtYW4KLTsgICBDb2x1bWJpYSBVbml2ZXJzaXR5LCBOZXcgWW9yaywg TlkgMTAwMjUtNzc5OSwgVVNBCi07Ci07IFRoaXMgaXMgdGhlIHN0YW5kYXJkIGFuZCByZWNvbW1l bmRlZCBDLUtlcm1pdCA4LjAgaW5pdGlhbGl6YXRpb24gZmlsZS4gIFRvCi07IG92ZXJyaWRlIHNl dHRpbmdzIG9yIGRlZmluaXRpb25zIG1hZGUgaW4gdGhpcyBmaWxlLCB0byBhZGQgbmV3IHNldHRp bmdzIG9yCi07IGRlZmluaXRpb25zLCBvciB0byBtYWtlIGFueSBvdGhlciBkZXNpcmVkIGN1c3Rv bWl6YXRpb25zLCBjcmVhdGUgYSBzZXBhcmF0ZSwKLTsgcGVyc29uYWwgY3VzdG9taXphdGlvbiBm aWxlIGNhbGxlZDoKLTsKLTsgICAubXlrZXJtcmMgICAgIChVTklYLCBPUy05LCBBZWdpcywgQmVC b3gsIFBsYW4gOSkKLTsgICBDS0VSTU9ELklOSSAgIChPUy8yLCBWTVMsIE9wZW5WTVMsIEFPUy9W UywgQXRhcmkgU1QsIENvbW1vZG9yZSBBbWlnYSkKLTsgICBja2VybW9kLmluaSAgIChWT1MpCi07 Ci07IFlvdSBjYW4gYWxzbyBkZWZpbmUgdGhlIGN1c3RvbWl6YXRpb24gZmlsZW5hbWUgaW4gYW4g ZW52aXJvbm1lbnQKLTsgdmFyaWFibGUgKGxvZ2ljYWwgbmFtZSBpbiBWTVMpLCBDS0VSTU9ELCB3 aGljaCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIKLTsgdGhlIG5hbWVzIHNob3duIGFib3ZlLgotOwot OyBXSEFUIFRISVMgRklMRSBET0VTOgotOwotOyAuIERlZmluZXMgeW91ciBkZWZhdWx0IGRpYWxp bmcgZGlyZWN0b3J5IG5hbWU6Ci07ICAgICAua2RkIGZvciBVTklYLCBPUy05IGFuZCBBZWdpczsg Q0tFUk1JVC5LREQgZm9yIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zLgotOyAgICAgICAgWW91IGNh biBvdmVycmlkZSB0aGlzIHdpdGggdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEtfRElBTF9ESVJF Q1RPUlkKLTsgLiBEZWZpbmVzIHlvdXIgZGVmYXVsdCBuZXR3b3JrIGRpcmVjdG9yeSBuYW1lOgot OyAgICAgLmtuZCBmb3IgVU5JWCwgT1MtOSBhbmQgQWVnaXM7IENLRVJNSVQuS05EIGZvciBvdGhl ciBvcGVyYXRpbmcgc3lzdGVtcy4KLTsgICAgICAgIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyB3aXRo IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBLX05FVF9ESVJFQ1RPUlkKLTsgLiBEZWZpbmVzIHlv dXIgZGVmYXVsdCBzZXJ2aWNlcyBkaXJlY3RvcnkgbmFtZToKLTsgICAgIC5rc2QgZm9yIFVOSVgs IE9TLTkgYW5kIEFlZ2lzOyBDS0VSTUlULktTRCBmb3Igb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMu Ci07ICAgICAgICBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgd2l0aCBlbnZpcm9ubWVudCB2YXJpYWJs ZSBLX1NFUlZJQ0VfRElSRUNUT1JZLgotOyAuIERlZmluZXMgeW91ciBjdXN0b21pemF0aW9uIGZp bGUgbmFtZSAobmFtZSBnaXZlbiBhYm92ZSkKLTsgLiBQZXJmb3JtcyBzeXN0ZW0tZGVwZW5kZW50 IHNldHVwcyBmb3IgVU5JWCwgVk1TLCBPUy8yLCBldGMuCi07IC4gRGVmaW5lcyBWVFBSSU5UIG1h Y3JvcyBmb3IgdXNlIHdpdGggSzk1LCBNUy1ET1MgS2VybWl0LCBldGMuCi07IC4gSWYgeW91IGhh dmUgYSBzZXJ2aWNlcyBkaXJlY3RvcnksIGFsbCB0aGUgbWFjcm9zIG5lZWRlZCB0byB1c2UgaXQg YXJlCi07ICAgICBkZWZpbmVkLiAgSWYgeW91IGRvbid0IGhhdmUgYSBzZXJ2aWNlcyBkaXJlY3Rv cnksIHRoZSBtYWNyb3MgYXJlIG5vdAotOyAgICAgZGVmaW5lZCBhbmQgS2VybWl0IHN0YXJ0cyBm YXN0ZXIuCi07IC4gRXhlY3V0ZXMgeW91ciBwZXJzb25hbCBjdXN0b21pemF0aW9uIGZpbGUsIGlm IHlvdSBoYXZlIG9uZS4KLTsgICBOT1RFOiBZb3VyIGN1c3RvbWl6YXRpb24gZmlsZSBpcyBOT1Qg ZXhlY3V0ZWQgYnkgS2VybWl0IGl0c2VsZjsgaXQgaXMKLTsgICBleGVjdXRlZCBieSB0aGlzIGZp bGUuCi07Ci07IEluIFVOSVgsIHdpdGggQy1LZXJtaXQgNy4wIGFuZCBsYXRlciwgeW91IGNhbiBz dG9yZSB0aGlzIGZpbGUgd2l0aCBhIG5hbWUKLTsgb3RoZXIgdGhhbiAua2VybXJjLCBhbmQgaXQg d2lsbCBub3QgYmUgZXhlY3V0ZWQgYXV0b21hdGljYWxseSwgYnV0LCBpZiB5b3UKLTsgZ2l2ZSB0 aGlzIGZpbGUgZXhlY3V0ZSBwZXJtaXNzaW9uLCB5b3UgY2FuIGV4ZWN1dGUgZGlyZWN0bHkgYmVj YXVzZSBvZiB0aGUKLTsgImtlcmJhbmcgbGluZSIgYXQgdGhlIHRvcCwgd2hlbmV2ZXIgeW91IHdh bnQgYWxsIG9mIHRoZSBhYm92ZSBhY3Rpb25zIHRvCi07IG9jY3VyLiAgVGhlIGtlcmJhbmcgbGlu ZSBtdXN0IHJlZmxlY3QgdGhlIGFjdHVhbCBmdWxsIHBhdGggb2YgdGhlIEtlcm1pdAotOyA3LjAt b3ItbGF0ZXIgZXhlY3V0YWJsZS4KLTsKLTsgQy1LZXJtaXQgNi4wIGlzIGRvY3VtZW50ZWQgaW4g dGhlIGJvb2sgIlVzaW5nIEMtS2VybWl0IiwgMm5kIEVkaXRpb24sCi07IGJ5IEZyYW5rIGRhIENy dXogYW5kIENocmlzdGluZSBNLiBHaWFub25lLCAxOTk3LCBEaWdpdGFsIFByZXNzIC8KLTsgQnV0 dGVyd29ydGgtSGVpbmVtYW5uLCBJU0JOIDEtNTU1NTgtMTY0LTEuICBOZXcgZmVhdHVyZXMgb2Yg c3Vic2VxdWVudAotOyB2ZXJzaW9ucyBhcmUgZG9jdW1lbnRlZCBhdCB0aGUgS2VybWl0IHdlYnNp dGU6Ci07IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC8KLTsKLTsgRXZlcnl0aGluZyBh ZnRlciB0aGlzIHBvaW50IGRlcGVuZHMgb24gdGhlIHNjcmlwdCBwcm9ncmFtbWluZyBsYW5ndWFn ZS4KLTsgVGhlIENIRUNLIGNvbW1hbmQgdGVybWluYXRlcyB0aGlzIGNvbW1hbmQgZmlsZSBpbW1l ZGlhdGVseSBpZiB0aGUgc2NyaXB0Ci07IHByb2dyYW1taW5nIGxhbmd1YWdlIChJRiBjb21tYW5k KSBpcyBub3QgY29uZmlndXJlZC4KLTsKLXNldCB0YWtlIGVycm9yIG9uCQk7IFRoaXMgbWFrZXMg Q0hFQ0sgcXVpdCBpZiBubyBzY3JpcHQgbGFuZ3VhZ2UuCi1jaGVjayBpZgkJCTsgRG8gd2UgaGF2 ZSBhbiBJRiBjb21tYW5kPyAgSWYgbm90LCBxdWl0IG5vdy4KLXNldCB0YWtlIGVycm9yIG9mZgkJ OyBCYWNrIHRvIG5vcm1hbC4KLQotbG9jYWwgX3NkIF9zZXJ2aWNlZGlyIF94cCAgICAgICA7IERl Y2xhcmUgbG9jYWwgdmFyaWFibGVzLgotCi1DT01NRU5UIC0gQy1LZXJtaXQgdmVyc2lvbiA2LjAg b3IgbGF0ZXIgcmVxdWlyZWQuCi07Ci0KLWFzZyBfeHAgXHYoeHByb2dyYW0pCi1pZiBub3QgZGVm IF94cCBhc2cgX3hwIFx2KHByb2dyYW0pCi1pZiBub3QgZXF1YWwgIlxtKF94cCkiICJDLUtlcm1p dCIgLQotICBzdG9wIDEgXHYoY21kZmlsZSk6IFRoaXMgaW5pdGlhbGl6YXRpb24gZmlsZSBpcyBv bmx5IGZvciBDLUtlcm1pdC4KLWVjaG8gRXhlY3V0aW5nIFx2KGNtZGZpbGUpIGZvciBcdihzeXN0 ZW0pLi4uCi1pZiA8IFx2KHZlcnNpb24pIDYwMDAwIC0KLSAgc3RvcCAxIFx2KGNtZGZpbGUpOiBD LUtlcm1pdCA2LjAgb3IgbGF0ZXIgcmVxdWlyZWQuCi0KLWZvcndhcmQgXHYoc3lzdGVtKQkJOyBG aXJzdCBkbyBzeXN0ZW0tZGVwZW5kZW50IGl0ZW1zLi4uCi0KLTp1bmtub3duCQkJOyBTaG91bGQg bm90IGhhcHBlbgotU3RvcCAxIEVycm9yOiBTeXN0ZW0gdHlwZSB1bmtub3duIQotCi06QWVnaXMJ CQkJOyBBcG9sbG8gQWVnaXMgYW5kCi06VU5JWAkJCQk7IFVOSVgsIGFsbCB2ZXJzaW9ucwotYXNn IF9teWluaXQgLQotICBcdihob21lKS5teWtlcm1yYwkJOyBDdXN0b21pemF0aW9uIGZpbGVuYW1l Ci1pZiByZW1vdGUgZm9yd2FyZCBDT01NT04gICAgICAgIDsgU2tpcCBsb2NhbC1tb2RlIGl0ZW1z IGlmICItUiIKLWFzZyBfZGlhbGRpciAtCi0gIFx2KGhvbWUpLmtkZAkJCTsgQy1LZXJtaXQgZGlh bGluZyBkaXJlY3RvcnkKLWFzZyBfbmV0ZGlyIC0KLSAgXHYoaG9tZSkua25kCQkJOyBDLUtlcm1p dCBuZXR3b3JrIGRpcmVjdG9yeQotYXNnIF9zZXJ2aWNlZGlyIC0KLSAgXHYoaG9tZSkua3NkCQkJ OyBDLUtlcm1pdCBzZXJ2aWNlcyBkaXJlY3RvcnkKLWZvcndhcmQgQ09NTU9OICAgICAgICAgICAg ICAgICAgOyBFbmQgb2YgVU5JWCBzZWN0aW9uCi0KLTpPUzkvNjhLCQkJOyBPUy05Ci1hc2cgX215 aW5pdCAtCi0gIFx2KGhvbWUpLm15a2VybXJjCQk7IEN1c3RvbWl6YXRpb24gZmlsZW5hbWUKLWlm IHJlbW90ZSBmb3J3YXJkIENPTU1PTgotYXNnIF9kaWFsZGlyIC0KLSAgXHYoaG9tZSkua2RkCQkJ OyBDLUtlcm1pdCBkaWFsaW5nIGRpcmVjdG9yeQotYXNnIF9uZXRkaXIgLQotICBcdihob21lKS5r bmQJCQk7IEMtS2VybWl0IG5ldHdvcmsgZGlyZWN0b3J5Ci1hc2cgX3NlcnZpY2VkaXIgLQotICBc dihob21lKS5rc2QJCQk7IEMtS2VybWl0IHNlcnZpY2VzIGRpcmVjdG9yeQotZWxzZSBzZXQgZmls ZSBkaXNwbGF5IGNydAotZm9yd2FyZCBDT01NT04JCQk7IEVuZCBvZiBPUy05IHNlY3Rpb24KLQot OlZNUwkJCQk7IFZNUyBhbmQgT3BlblZNUwotZm9yd2FyZCBDT01NT04KLQotOk9TLzIJCQkJOyBL ZXJtaXQgOTUKLTpXSU4zMgotZWNobyBUaGlzIGluaXRpYWxpemF0aW9uIGZpbGUgaXMgbm90IGZv ciB1c2Ugd2l0aCBLOTUuCi1mb3J3YXJkIENPTU1PTiAgICAgICAgICAgICAgICAgIDsgRW5kIG9m IE9TLzIgc2VjdGlvbgotCi06QU9TL1ZTCQkJCTsgRGF0YSBHZW5lcmFsIEFPUy9WUwotc2V0IHdp bmRvdyAxCQkJOyBTbGlkaW5nIHdpbmRvd3MgZG9uJ3Qgd29yawotc2V0IGZpbGUgY2hhciBkZy1p bnRlcm5hdGlvbmFsCTsgRmlsZSBjaGFyYWN0ZXItc2V0Ci1zZXQgeGZlciBjaGFyIGxhdGluMQkJ OyBUcmFuc2ZlciBjaGFyYWN0ZXItc2V0Ci1zZXQgZmlsZSBkaXNwbGF5IGNydCAgICAgICAgICAg IDsgRmlsZSB0cmFuc2ZlciBmaXNwbGF5Ci1kZWYgY2xpIHB1c2gJCQk7IEVzY2FwZSB0byBDTEkK LWRlZiByZXNldCAtCQkJOyBNYWNybyB0byByZXNldCBERyBEQVNIRVIgdGVybWluYWwKLSBydW4g d3JpdGUgWyFhc2NpaSAyMzYgMzA2IDMwMV0KLWZvcndhcmQgQ09NTU9OICAgICAgICAgICAgICAg ICAgOyBFbmQgb2YgQU9TL1ZTIHNlY3Rpb24KLQotOkFtaWdhCQkJCTsgQ29tbW9kb3JlIEFtaWdh Ci1kZWYgY2xzIGVjaG8gXDI3W0hcMjdbMkoJOyBDTFMgY29tbWFuZCB0byBjbGVhciB0aGUgc2Ny ZWVuCi1zZXQgZmlsZSBjaGFyIGxhdGluMQkJOyBVc2UgTGF0aW4gQWxwaGFiZXQgMSBmb3IgZmls ZSB0cmFuc2Zlcgotc2V0IHhmZXIgY2hhciBsYXRpbjEJCTsgLi4uCi1mb3J3YXJkIENPTU1PTiAg ICAgICAgICAgICAgICAgIDsgRW5kIG9mIEFtaWdhIHNlY3Rpb24KLQotOkF0YXJpX1NUCQkJOyBB dGFyaSBTVAotZGVmIGNscyBlY2hvIFwyN0hcMjdKCQk7IENsZWFyIHNjcmVlbiBhYGxhIFZUNTIK LXNldCBzZXJ2ZXIgZGlzcGxheSBvbgkJOyBTaG93IGZpbGUgeGZlciBkaXNwbGF5IGluIHNlcnZl ciBtb2RlIHRvbwotc2V0IHNlcnZlciB0aW1lb3V0IDE1CQk7IE5vbnplcm8gcmVxdWlyZWQgZm9y IF5DIGludGVycnVwdGlvbiEKLWZvcndhcmQgQ09NTU9OICAgICAgICAgICAgICAgICAgOyBFbmQg b2YgQXRhcmkgU1Qgc2VjdGlvbgotCi06TWFjaW50b3NoCQkJOyBBcHBsZSBNYWNpbnRvc2gKLXNl dCBzZXJ2ZXIgZGlzcGxheSBvbgkJOyBTaG93IGZpbGUgeGZlciBkaXNwbGF5IGluIHNlcnZlciBt b2RlIHRvby4KLWZvcndhcmQgQ09NTU9OCi0KLTpTdHJhdHVzX1ZPUyAgICAgICAgICAgICAgICAg ICAgOyBTdHJhdHVzIFZPUwotYXNnIF9teWluaXQgXHYoaG9tZSlja2VybW9kLmluaQotaWYgcmVt b3RlIGZvcndhcmQgQ09NTU9OCi1hc2cgX2RpYWxkaXIgXHYoaG9tZSlja2VybWl0LmtkZAotYXNn IF9uZXRkaXIgXHYoaG9tZSlja2VybWl0LmtuZAotYXNnIF9zZXJ2aWNlZGlyIFx2KGhvbWUpY2tl cm1pdC5rc2QKLWZvcndhcmQgQ09NTU9OICAgICAgICAgICAgICAgICAgOyBFbmQgb2YgU3RyYXR1 cyBWT1Mgc2VjdGlvbgotCi06Q09NTU9OCQkJCTsgRm9yIGFsbCBzeXN0ZW1zCi0KLTsgRGVmaW5l IG1hY3JvcyB0aGF0IGFyZSB1c2VmdWwgd2hlbiBydW5uaW5nIEMtS2VybWl0IGluIHJlbW90ZSBt b2RlLgotOyBUaGVzZSBtYWNyb3Mgc2VydmUgbm8gcHVycG9zZSBvbiBsb2NhbC1tb2RlLW9ubHkg dmVyc2lvbnMgc3VjaCBhcwotOyBPUy8yLCBNYWNpbnRvc2gsIEFtaWdhLCBhbmQgQXRhcmkgU1Qg S2VybWl0LCBzbyB3ZSBza2lwIGRlZmluaW5nIHRoZW0KLTsgZm9yIHRob3NlIHN5c3RlbXMuCi07 Ci1pZiBub3QgPSAwIFxmaW5kZXgoXHYoc3lzdGVtKSxXSU4zMjpPUy8yOk1hY2ludG9zaDpBbWln YTpBdGFyaV9TVCkgLQotICBmb3J3YXJkIGZpbGVzCi0KLTsgVlRQUklOVCBtYWNyby4gIFByaW50 IGEgZmlsZSBvbiB5b3VyIFBDJ3MgbG9jYWwgcHJpbnRlci4KLQotZGVmIFZUUFJJTlQgZWNobyBc MjdbNWksIHR5cGUgXCUxLCBlY2hvIFwyN1s0aQotOyBvciBpZiB5b3VyIHByaW50ZXIgbmVlZHMg YSBmb3JtZmVlZCB0byBmb3JjZSB0aGUgcGFnZSBvdXQ6Ci07IGRlZiBWVFBSSU5UICBkZWYgZWNo byBcMjdbNWksIHR5cGUgXCUxLCBlY2hvIFwxMlwyN1s0aQotCi07IE1hY3JvcyBmb3IgaG9zdC1p bml0aWF0ZWQgZmlsZSB0cmFuc2ZlciB1c2luZyBBUEM6Ci07ICAgTk9UIE5FRURFRCBBTlkgTU9S RSBiZWNhdXNlIG9mIGF1dG9kb3dubG9hZC9hdXRvdXBsb2FkLgotOyAgIFJlbW92ZSB0aGUgZm9s bG93aW5nIEZPUldBUkQgY29tbWFuZCB0byByZWluc3RhdGUgdGhlc2UgZGVmaW5pdGlvbnM6Ci0K LTpGSUxFUwotCi07IEdldCBjdXN0b21pemF0aW9uIGFuZCBkaXJlY3RvcnkgZmlsZSBuYW1lcy4g IEVudmlyb25tZW50IHZhcmlhYmxlcyB0YWtlCi07IHByZWNlZGVuY2UsIHNvIHlvdSBkbyBub3Qg aGF2ZSB0byBlZGl0IHRoaXMgZmlsZSB0byBjaGFuZ2UgdGhlc2UgZmlsZW5hbWVzLgotOwotaWYg ZGVmIFwkKENLRVJNT0QpIGFzc2lnbiBfbXlpbml0IFwkKENLRVJNT0QpCi1pZiBub3QgZGVmIF9t eWluaXQgYXNzaWduIF9teWluaXQgXHYoaG9tZSlDS0VSTU9ELklOSQotCi1pZiByZW1vdGUgZm9y d2FyZCBDVVNUT00gOyBTa2lwIGFsbCB0aGlzIGlmIC1SIGdpdmVuIG9uIGNvbW1hbmQgbGluZQot Ci1pZiBkZWYgXCQoS19ORVRfRElSRUNUT1JZKSBhc3NpZ24gX25ldGRpciBcJChLX05FVF9ESVJF Q1RPUlkpCi1pZiBub3QgZGVmIF9uZXRkaXIgYXNzaWduIF9uZXRkaXIgXHYoaG9tZSlDS0VSTUlU LktORAotCi1pZiBkZWYgXCQoS19ESUFMX0RJUkVDVE9SWSkgYXNzaWduIF9kaWFsZGlyIFwkKEtf RElBTF9ESVJFQ1RPUlkpCi1pZiBub3QgZGVmIF9kaWFsZGlyIGFzc2lnbiBfZGlhbGRpciBcdiho b21lKUNLRVJNSVQuS0RECi0KLUNIRUNLIERJQUwJCQk7IElzIHRoZXJlIGEgRElBTCBjb21tYW5k PwoteGlmIGZhaWwgeyAJCQk7IE5vLgotICAgIGVjaG8gRElBTCBkaXNhYmxlZAotICAgIGZvcndh cmQgQ1VTVE9NCi19Ci0KLUNIRUNLIE5FVFdPUksKLXhpZiBzdWNjZXNzIHsKLSAgICB4aWYgZXhp c3QgXG0oX25ldGRpcikgewotCXNldCBuZXQgZGlyZWN0b3J5IFxtKF9uZXRkaXIpCi0JZWNobyB7 IE5ldHdvcmsgZGlyZWN0b3J5IGlzIFxtKF9uZXRkaXIpIH0KLSAgICB9Ci19Ci0KLWlmIGVxICJc dihuYW1lKSIgInRlbG5ldCIgZm9yd2FyZCBDVVNUT00KLQoteGlmIGV4aXN0IFxtKF9kaWFsZGly KSB7Ci0gICAgc2V0IGRpYWwgZGlyZWN0b3J5IFxtKF9kaWFsZGlyKQotICAgIGVjaG8geyBEaWFs IGRpcmVjdG9yeSBpcyBcbShfZGlhbGRpcikgfQotfQotCi1DT01NRU5UIC0gU2VydmljZXMgZGly ZWN0b3J5Ci0KLWlmIGRlZiBcJChLX1NFUlZJQ0VfRElSRUNUT1JZKSBhc3NpZ24gX3NlcnZpY2Vk aXIgXCQoS19TRVJWSUNFX0RJUkVDVE9SWSkKLWlmIG5vdCBkZWYgX3NlcnZpY2VkaXIgYXNzaWdu IF9zZXJ2aWNlZGlyIFx2KGhvbWUpQ0tFUk1JVC5LU0QKLQotOyBJZiBubyBzZXJ2aWNlcyBkaXJl Y3RvcnkgaXMgZm91bmQgc2tpcCBhbGwgdGhlIGJpZyBtYWNybyBkZWZpbml0aW9ucyBhbmQKLTsg Z28gc3RyYWlnaHQgdG8gdGhlIGJvdHRvbSwgd2hlcmUgd2UgZXhlY3V0ZSB0aGUgY3VzdG9taXph dGlvbiBmaWxlLgotCi1pZiBub3QgZXhpc3QgXG0oX3NlcnZpY2VkaXIpIGZvcndhcmQgY3VzdG9t Ci0KLWVjaG8geyBTZXJ2aWNlcyBkaXJlY3RvcnkgaXMgXG0oX3NlcnZpY2VkaXIpfQotCi1kZWYg TUFYX1NWQ1MgMjAwICAgICAgICAgICAgICAgOyBBZGp1c3QgdGhpcyBpZiB5b3UgaGF2ZSBtb3Jl IGVudHJpZXMKLWRlZmluZSBfc2QgMCAgICAgICAgICAgICAgICAgICA7IEFzc3VtZSBubyBzZXJ2 aWNlcyBkaXJlY3RvcnkKLW9wZW4gcmVhZCBcbShfc2VydmljZWRpcikgICAgICA7IFRyeSB0byBv cGVuIHNlcnZpY2VzIGRpcmVjdG9yeSBmaWxlCi14aWYgc3VjY2VzcyB7Ci0gICAgZGVjbGFyZSBc JmRbXG0oTUFYX1NWQ1MpXSAgOyBJdCdzIG9wZW4sIGRlY2xhcmUgZGlyZWN0b3J5IGFycmF5Ci0g ICAgZm9yIFwlaSAxIFxtKE1BWF9TVkNTKSAxIHsgOyBSZWFkIHRoZSBsaW5lcyBpbnRvIHRoZSBh cnJheQotCXJlYWQgXCZkW1wlaV0KLQlpZiBmYWlsIGJyZWFrCi0gICAgfQotICAgIGNsb3NlIHJl YWQKLSAgICB4aWYgPiBcJWkgIFxtKE1BWF9TVkNTKSB7Ci0JZWNobyBUb28gbWFueSBlbnRyaWVz IGluIHNlcnZpY2VzIGRpcmVjdG9yeQotCWVjaG8geyBNYXhpbXVtIGlzIFxtKE1BWF9TVkNTKS59 Ci0JZWNobyB7IENoYW5nZSBkZWZpbml0aW9uIG9mIE1BWF9TVkNTIGluIFx2KGNtZGZpbGUpIHRv IGFsbG93IG1vcmUuIH0KLQllY2hvIHsgU2VydmljZXMgZGlyZWN0b3J5IGRpc2FibGVkLn0KLSAg ICB9IGVsc2UgewotICAgICAgICBhc2cgXCZkWzBdIFxmZXZhbChcJWkgLSAxKQotICAgICAgICBk ZWZpbmUgX3NkIDEKLSAgICB9Ci19Ci0KLXhpZiBub3QgXG0oX3NkKSB7Ci0gICAgZGVmIGFjY2Vz cyBlY2hvIHsgU2VydmljZXMgZGlyZWN0b3J5IG5vdCBhdmFpbGFibGUufQotICAgIGFzZyBsaXN0 IFxtKGFjY2VzcykKLX0gZWxzZSB7Ci0gICAgZGVmIEZJTkQgewotCXNldCBjYXNlIG9mZgotCWZv ciBcJWkgMSBcJmRbMF0gMSB7Ci0JICAgIGlmIGVxIHtcJTF9IHtcZnN1YnN0cihcJmRbXCVpXSwx LFxmbGVuKFwlMSkpfSBicmVhawotCX0KLQlpZiBub3QgPiBcJWkgXCZkWzBdIHJldHVybiBcJmRb XCVpXQotICAgIH0KLSAgICBkZWYgTElTVCB7Ci0JeGlmID4gXHYoYXJnYykgMSB7Ci0JICAgIGRv IGZpbmQgXCUxCi0JICAgIGlmIGRlZiBcdihyZXR1cm4pIGVjaG8gXHYocmV0dXJuKQotCSAgICBl bHNlIGVjaG8gXCUxOiBOb3QgZm91bmQKLQl9IGVsc2UgewotCSAgICBlY2hvIFwmZFswXSBpdGVt cyBpbiBzZXJ2aWNlcyBkaXJlY3Rvcnk6Ci0JICAgIGZvciBcJWkgMSBcJmRbMF0gMSB7IGVjaG8g XGZjb250KFwmZFtcJWldKSB9Ci0JfQotICAgIH0KLSAgICBkZWYgU1BMSVQgeyBhc2cgX3dvcmQx IFwlMSwgYXNnIF93b3JkMiBcJTIgfQotICAgIGRlZiBET0FDQ0VTUyB7ICAgICAgICAgICAgICAg OyAoVXNlZCBpbnRlcm5hbGx5IGJ5IEFDQ0VTUyBtYWNybykKLQlkbyBcJTUgXCU2IFwlNyBcJTgg XCU5ICAgOyBEbyB0aGUgY29ubmVjdGlvbiBtYWNybwotCWlmIGZhaWwgZW5kIDEKLSAgICAgICAg c3BsaXQgXCUzICAgICAgICAgICAgICAgIDsgR2V0IHdvcmRzIGZyb20gXCUzCi0JYXNnIFwlMyBc bShfd29yZDEpCi0JYXNnIFwlMiBcbShfd29yZDIpCi0JZG8gXCUzIFwlNCB7XCUxfSBcJTIgICAg IDsgTG9naW4gbWFjcm8sIHVzZXJpZCwgcGFzc3dvcmQsIHByb21wdAotICAgIH0KLSAgICBkZWYg QUNDRVNTIHsKLQlpZiBub3QgZGVmaW5lZCBcJTEgZW5kIDEgYWNjZXNzIHdoYXQ/ICAgICAgICA7 IENoZWNrIHNlcnZpY2UKLQlkbyBmaW5kIFwlMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7IExvb2sgaXQgdXAKLQlpZiBzdWNjZXNzIGRvYWNjZXNzIHtcJTJ9IFx2KHJldHVybikg ICAgICAgICA7IE9LLCB0cnkgaXQKLQllbHNlIGVuZCAxICJcJTEiIG5vdCBpbiBzZXJ2aWNlcyBk aXJlY3RvcnkgICA7IE5vdCBmb3VuZAotCWlmIGZhaWwgZW5kIDEgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsgRE9BQ0NFU1MgZmFpbGVkPwotCXhpZiBlcSBcdihjbWRsZXZlbCkgMSB7 Ci0JICAgIGVjaG8KLQkgICAgZWNobyBBQ0NFU1M6IExvZ2luIHN1Y2NlZWRlZCAtIENPTk5FQ1Rp bmcuLi4KLSAgICAgICAgICAgIHNob3cgZXNjYXBlCi0gICAgICAgICAgICBvdXRwdXQgXDEzCi0J ICAgIGNvbm5lY3QgL3F1aWV0bHkKLSAgICAgICAgfQotICAgIH0KLX0KLQotOkNPTk5FQ1RJT04g OyBNYWNyb3MgZm9yIG1ha2luZyBjb25uZWN0aW9ucwotCi1DT01NRU5UIC0gU0VSSUFMIG1hY3Jv LiAgQXJndW1lbnRzOgotOyBcJTEgPSBkZXZpY2UgbmFtZQotOyBcJTIgPSBzcGVlZAotOwotZGVm IFNFUklBTCB7Ci0gICAgaWYgPCBcdihhcmdjKSAzICAgICAgICAgICAgICAgICAgICAgICAgIDsg QWxsIGFyZ3VtZW50cyBnaXZlbj8KLSAgICAgIGVuZCAxIFVzYWdlOiBTRVJJQUwgZGV2aWNlIHNw ZWVkICAgICAgOyBOby4KLSAgICBzZXQgbGluZSBcJTEgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOyBPSywgdHJ5IHRvIFNFVCBMSU5FLgotICAgIGlmIGZhaWx1cmUgLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7IElmIHRoaXMgZmFpbGVkLAotICAgICAgZW5kIDEgQ2FuJ3Qgb3BlbiBk ZXZpY2U6IFwlMSAgICAgICAgICA7IHByaW50IG1lc3NhZ2UgYW5kIHF1aXQuCi0gICAgc2V0IHNw ZWVkIFwlMiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgVHJ5IHRvIHNldCB0aGUgc3BlZWQu Ci0gICAgaWYgZmFpbCBlbmQgMSBVbnN1cHBvcnRlZCBzcGVlZDogXCUyICAgIDsgRmFpbGVkLgot ICAgIGVjaG8gQ29ubmVjdGlvbiBzdWNjZXNzZnVsLiAgICAgICAgICAgICA7IFN1Y2NlZWRlZC4K LX0KLQotQ09NTUVOVCAtIE5FVCBtYWNyby4gIEFyZ3VtZW50czoKLTsgXCUxID0gbmV0d29yayB0 eXBlCi07IFwlMiA9IGhvc3QgbmFtZSBvciBhZGRyZXNzCi07Ci1kZWYgTkVUIHsKLSAgICBpZiA8 IFx2KGFyZ2MpIDMgZW5kIDEgVXNhZ2U6IE5FVCBuZXR3b3JrIGhvc3QKLSAgICBzZXQgbmV0d29y ayB0eXBlIFwlMQotICAgIGlmIGZhaWwgZW5kIDEgdW5zdXBwb3J0ZWQgbmV0d29yazogXCUxCi0g ICAgc2V0IGxvZ2luIHVzZXIgICAgICAgICAgICAgICAgOyBEb24ndCBzZW5kIHVzZXIgSUQuCi0g ICAgc2V0IGhvc3QgXCUyCi0gICAgaWYgZmFpbCBlbmQgMSBDYW4ndCByZWFjaCBob3N0OiBcJTIK LSAgICBlY2hvIENvbm5lY3Rpb24gc3VjY2Vzc2Z1bC4KLX0KLQotQ09NTUVOVCAtIENBTEwgbWFj cm8uICBBcmd1bWVudHM6Ci07Ci07IFwlMSA9IG1vZGVtIHR5cGUKLTsgXCUyID0gZGV2aWNlIG5h bWUKLTsgXCUzID0gc3BlZWQKLTsgXCU0ID0gcGhvbmUgbnVtYmVyCi07Ci1kZWYgQ0FMTCB7Ci0g ICAgaWYgPCBcdihhcmdjKSA1IC0gICAgICAgICA7IEFsbCBhcmd1bWVudHMgcHJlc2VudD8KLSAg ICAgIGVuZCAxIFVzYWdlOiBDQUxMIG1vZGVtIGRldmljZSBzcGVlZCBudW1iZXIKLSAgICB4aWYg bm90IGVxdWFsIHtcdihtb2RlbSl9IHtcJTF9IHsgOyBTZXQgbW9kZW0gdHlwZQotICAgICAgICBz ZXQgbW9kZW0gXCUxCi0gICAgICAgIGlmIGZhaWwgZW5kIDEgdW5rbm93biBtb2RlbSB0eXBlOiBc JTEKLSAgICB9Ci0gICAgeGlmIG5vdCBlcXVhbCB7XHYobGluZSl9IHtcJTJ9IHsgOyBDb21tdW5p Y2F0aW9uIGRldmljZQotICAgICAgICBzZXQgbGluZSBcJTIKLSAgICAgICAgaWYgZmFpbCBlbmQg MSBjYW4ndCBvcGVuIGRldmljZTogXCUyCi0gICAgfQotICAgIHhpZiBub3QgZXF1YWwge1x2KHNw ZWVkKX0ge1wlM30geyA7IENvbW11bmljYXRpb24gc3BlZWQKLSAgICAgICAgc2V0IHNwZWVkIFwl MwotICAgICAgICBpZiBmYWlsIGVuZCAxIHVuc3VwcG9ydGVkIHNwZWVkOiBcJTMKLSAgICB9Ci0g ICAgZGlhbCBcJTQgICAgICAgICAgICAgICAgICA7IERpYWwgdGhlIG51bWJlcgotICAgIGlmIGZh aWwgZW5kIDEgQ2FuJ3QgcGxhY2UgY2FsbDogXCU0Ci0gICAgZW5kIDAgQ29ubmVjdGlvbiBzdWNj ZXNzZnVsLgotfQotCi1DT01NRU5UIC0gVENQQ0FMTCBtYWNyby4gIEFyZ3VtZW50czoKLTsKLTsg XCUxID0gc2VydmVyIG5hbWU6cG9ydAotOyBcJTIgPSBtb2RlbSB0eXBlCi07IFwlMyA9IHBob25l IG51bWJlcgotOwotZGVmIFRDUENBTEwgewotICAgIGlmIDwgXHYoYXJnYykgNCAtICAgICAgICAg OyBBbGwgYXJndW1lbnRzIHByZXNlbnQ/Ci0gICAgICBlbmQgMSBVc2FnZTogVENQQ0FMTCBzZXJ2 ZXJbOnBvcnRdIG1vZGVtIG51bWJlcgotICAgIHNldCBuZXQgdHlwZSB0Y3AvaXAgICAgICAgOyBX aGljaCBuZXR3b3JrIHRvIHVzZQotICAgIGlmIGZhaWwgZW5kIDEgdW5zdXBwb3J0ZWQgbmV0d29y azogdGNwL2lwCi0gICAgc2V0IGhvc3QgXCUxICAgICAgICAgICAgICA7IEFjY2VzcyBzZXJ2ZXIg YW5kIHBvcnQKLSAgICBpZiBmYWlsIGVuZCAxIGNhbid0IGFjY2VzcyBzZXJ2ZXIgXCUxCi0gICAg c2V0IG1vZGVtIFwlMiAgICAgICAgICAgICA7IFNldCBtb2RlbSB0eXBlCi0gICAgaWYgZmFpbCBl bmQgMSB1bmtub3duIG1vZGVtIHR5cGU6IFwlMgotICAgIGRpYWwgXCUzICAgICAgICAgICAgICAg ICAgOyBEaWFsIHRoZSBudW1iZXIKLSAgICBpZiBmYWlsIGVuZCAxIENhbid0IHBsYWNlIGNhbGw6 IFwlMwotICAgIGVuZCAwIENvbm5lY3Rpb24gc3VjY2Vzc2Z1bC4KLX0KLQotQ09NTUVOVCAtIFNQ UklOVCBtYWNyby4gIEFyZ3VtZW50czoKLTsgXCUxID0gU2VydmljZSBuYW1lIG9yIGFkZHJlc3MK LTsKLWRlZiBTUFJJTlQgewotICAgIGlmIDwgXHYoYXJnYykgMiBlbmQgMSBVc2FnZTogXCUwIHNl cnZpY2UKLSAgICBzZXQgaW5wdXQgdGltZW91dCBwcm9jZWVkCi0gICAgb3V0cHV0IEBEXDEzCi0g ICAgaW5wdXQgMTAgVEVSTUlOQUw9Ci0gICAgaWYgZmFpbCBlbmQgMSBObyB0ZXJtaW5hbCBwcm9t cHQKLSAgICBvdXQgRDFcMTMKLSAgICBpbnAgMTAgQAotICAgIGlmIGZhaWwgZW5kIDEgTm8gYXRz aWduIHByb21wdAotICAgIG91dHB1dCBjIFwlMVwxMwotICAgIGlucHV0IDEwIENPTk5FQ1RFRAot ICAgIGlmIGZhaWwgZW5kIDEgQ2FuJ3QgYWNjZXNzIFwlMSBmcm9tIFNwcmludE5ldAotfQotCi1D T01NRU5UIC0gVUxPR0lOIG1hY3JvLiAgRm9yIGxvZ2dpbmcgaW50byBzeXN0ZW1zIHdoZXJlIHVz ZXIgSUQgaXMgcmVxdWlyZWQKLTsgYnV0IHRoZXJlIGlzIG5vIHBhc3N3b3JkLiAgQXJndW1lbnRz OgotOyBcJTEgPSBVTklYIHVzZXIgSUQKLTsKLWRlZmluZSBVTE9HSU4gewotICAgIGlmIDwgXHYo YXJnYykgMiBlbmQgMSBVc2FnZTogXCUwIHVzZXJpZAotICAgIHNldCBpbnB1dCB0aW1lb3V0IHBy b2NlZWQgICAgIDsgSGFuZGxlIHRpbWVvdXRzIG91cnNlbHZlcwotICAgIHNldCBjYXNlIG9uICAg ICAgICAgICAgICAgICAgIDsgQ2FzZSBpcyBpbXBvcnRhbnQgaW4gVU5JWAotICAgIG1pbnB1dCA1 IGxvZ2luOiBVc2VybmFtZToge1VzZXIgSUQ6fSB7VXNlciBOYW1lOn0KLSAgICBvdXQgXCUxXDEz ICAgICAgICAgICAgICAgICAgICA7IFNlbmQgdXNlcm5hbWUsIGNhcnJpYWdlIHJldHVybgotICAg IGVuZCAwCi19Ci0KLUNPTU1FTlQgLSBWTVNMT0dJTiBtYWNyby4gIEFyZ3VtZW50czoKLTsgXCUx ID0gVk1TIHVzZXIgSUQKLTsgXCUyID0gUGFzc3dvcmQuICBJZiBwYXNzd29yZCBub3Qgc3VwcGxp ZWQsIGl0IGlzIHByb21wdGVkIGZvci4KLTsgXCUzID0gU3lzdGVtIHByb21wdC4gIElmIG9taXR0 ZWQgYSBkZWZhdWx0IGlzIHN1cHBsaWVkLgotOwotZGVmaW5lIFZNU0xPR0lOIHsKLSAgICBpZiA8 IFx2KGFyZ2MpIDIgZW5kIDEgVXNhZ2U6IFwlMCB1c2VyaWQgWyBwYXNzd29yZCBbIHByb21wdCBd IF0KLSAgICB3aGlsZSBub3QgZGVmaW5lZCBcJTIgewotICAgICAgICBhc2txIFwlMiB7IFwlMSdz IHBhc3N3b3JkOiB9Ci0gICAgfQotICAgIHNldCBwYXJpdHkgbm9uZSAgICAgICAgICAgICAgIDsg U2V0IGNvbW11bmljYXRpb24gcGFyYW1ldGVycwotICAgIHNldCBkdXBsZXggZnVsbAotICAgIHNl dCBoYW5kc2hha2Ugbm9uZQotICAgIHNldCBpbnB1dCB0aW1lb3V0IHByb2NlZWQgICAgIDsgSGFu ZGxlIHRpbWVvdXRzIG91cnNlbHZlcwotICAgIGluIDUgVXNlcm5hbWU6ICAgICAgICAgICAgICAg IDsgSXMgcHJvbXB0IGFscmVhZHkgdGhlcmU/Ci0gICAgeGlmIGZhaWwgeyAgICAgICAgICAgICAg ICAgICAgOyBOby4KLSAgICAgICAgZm9yIFwlaSAxIDMgMSB7ICAgICAgICAgICA7IFRyeSAzIHRp bWVzIHRvIGdldCBpdC4KLSAgICAgICAgICAgIG91dCBcMTMgICAgICAgICAgICAgICA7IFNlbmQg Y2FycmlhZ2UgcmV0dXJuCi0gICAgICAgICAgICBpbiA1IFVzZXJuYW1lOiAgICAgICAgOyBMb29r IGZvciBwcm9tcHQKLSAgICAgICAgICAgIGlmIHN1Y2Nlc3MgYnJlYWsgICAgICA7IFN1Y2Nlc3Ms IGdvIGxvZyBpbgotICAgICAgICB9Ci0gICAgICAgIGlmID4gXCVpIDMgZW5kIDEgTm8gVXNlcm5h bWUgcHJvbXB0Ci0gICAgfQotICAgIG91dCBcJTFcMTMgICAgICAgICAgICAgICAgICAgIDsgU2Vu ZCB1c2VybmFtZSwgY2FycmlhZ2UgcmV0dXJuCi0gICAgaW5wIDUgUGFzc3dvcmQ6ICAgICAgICAg ICAgICAgOyBXYWl0IDUgc2VjIGZvciB0aGlzIHByb21wdAotICAgIGlmIGZhaWwgZW5kIDEgTm8g cGFzc3dvcmQgcHJvbXB0Ci0gICAgcGF1c2UgICAgICAgICAgICAgICAgICAgICAgICAgOyBXYWl0 IGEgc2VjCi0gICAgb3V0IFwlMlwxMyAgICAgICAgICAgICAgICAgICAgOyBTZW5kIHBhc3N3b3Jk Ci0gICAgeGlmIG5vdCBlbXVsYXRpb24geyAgICAgICAgICAgOyBObyBlbXVsYXRvciBidWlsdCBp bj8KLSAgICAgICAgc2V0IGlucHV0IGVjaG8gb2ZmICAgICAgICA7IFByb3RlY3QgdGVybWluYWwg ZnJvbSB0aGlzCi0gICAgICAgIG1pbnB1dCAxMCB7XDI3Wn0ge1wyN1tjfSB7XDI3WzBjfSA7IEdl dCB0ZXJtaW5hbCBJRCBxdWVyeQotICAgICAgICB4aWYgc3VjY2VzcyB7ICAgICAgICAgICAgICAg ICAgICAgOyBHb3Qgb25lCi0gICAgICAgICAgICBvdXRwdXQgXDI3W1w/MWMgICAgICAgICAgICAg ICA7IFNlbmQgVlQxMDAgdGVybWluYWwgSUQKLSAgICAgICAgICAgIGluIDIgXDI3WzZuICAgICAg ICAgICAgICAgICAgIDsgU2NyZWVuIGRpbWVuc2lvbiBxdWVyeT8KLSAgICAgICAgICAgIGlmIHN1 Y2Mgb3V0IFwyN1tcdihyb3dzKTtcdihjb2xzKVIgOyBTZW5kIGRpbWVuc2lvbnMKLSAgICAgICAg fQotICAgICAgICBzZXQgaW5wdXQgZWNobyBvbiAgICAgICAgIDsgRWNobyBpbnB1dCBhZ2Fpbgot ICAgIH0KLSAgICBpZiBub3QgZGVmIFwlMyAtICAgICAgICAgICAgICA7IElmIHdlIHdlcmUgbm90 IGdpdmVuIGEgcHJvbXB0Ci0gICAgICBhc2cgXCUzIHtcdihwcm9tcHQpfSAgICAgICAgOyB1c2Ug dGhlIFNFVCBMT0dJTiBQUk9NUFQgdmFsdWUKLSAgICBpZiBub3QgZGVmIFwlMyAtICAgICAgICAg ICAgICA7IElmIHdlIHN0aWxsIGRvbid0IGhhdmUgYSBwcm9tcHQKLSAgICAgIGFzZyBcJTMge1wx MyRcMzJ9ICAgICAgICAgICA7IHVzZSB0aGlzIG9uZSBhcyB0aGUgZGVmYXVsdAotICAgIHJlaW5w IDAgXCUzICAgICAgICAgICAgICAgICAgIDsgRGlkIHdlIElOUFVUIHRoZSBwcm9tcHQgYWxyZWFk eT8KLSAgICBpZiBmYWlsIGlucCA2MCBcJTMgICAgICAgICAgICA7IE5vLCBsb29rIG5vdy4KLSAg ICBpZiBmYWlsIGVuZCAxCi19Ci0KLUNPTU1FTlQgLSBVTklYTE9HSU4gbWFjcm8uICBBcmd1bWVu dHM6Ci07IFwlMSA9IFVOSVggdXNlciBJRAotOyBcJTIgPSBQYXNzd29yZC4gIElmIHBhc3N3b3Jk IG5vdCBzdXBwbGllZCwgaXQgaXMgcHJvbXB0ZWQgZm9yLgotOyBcJTMgPSBTeXN0ZW0gcHJvbXB0 LiAgSWYgb21pdHRlZCBhIGRlZmF1bHQgaXMgc3VwcGxpZWQuCi07Ci1kZWZpbmUgVU5JWExPR0lO IHsKLSAgICBsb2NhbCBcJW0gXCVpCi0gICAgaWYgPCBcdihhcmdjKSAyIC0KLSAgICAgIGVuZCAx IFVzYWdlOiBcJTAgdXNlcmlkIFsgcGFzc3dvcmQgWyBwcm9tcHQgXSBdCi0gICAgd2hpbGUgbm90 IGRlZmluZWQgXCUyIHsKLSAgICAgICAgYXNrcSBcJTIgeyBcJTEncyBwYXNzd29yZDogfQotICAg IH0KLSAgICBzZXQgaW5wdXQgZWNobyBvbgotICAgIHNldCBwYXJpdHkgbm9uZSAgICAgICAgICAg ICAgIDsgU2V0IGNvbW11bmljYXRpb24gcGFyYW1ldGVycy4KLSAgICBzZXQgZHVwbGV4IGZ1bGwK LSAgICBzZXQgaGFuZHNoYWtlIG5vbmUKLSAgICBzZXQgaW5wdXQgdGltZW91dCBwcm9jZWVkICAg ICA7IEhhbmRsZSB0aW1lb3V0cyBvdXJzZWx2ZXMKLSAgICBzZXQgY2FzZSBvbiAgICAgICAgICAg ICAgICAgICA7IENhc2UgaXMgaW1wb3J0YW50IGluIFVOSVgKLSAgICBkZWYgXCVtIDEwICAgICAg ICAgICAgICAgICAgICA7IFdhaXRpbmcgdGltZSBmb3IgSU5QVVQKLSAgICBmb3IgXCVpIDEgNSAx IHsKLSAgICAgICAgbWlucHV0IFwlbSBsb2dpbjoge3Nzd29yZDp9IHtQYXNzd29yZCBmb3IgXCUx On0KLQlpZiBzdWNjZXNzIGJyZWFrCi0Jb3V0cHV0IFxCXDEzCi0gICAgICAgIFwlbSA6Oj0gNi1c JTEKLSAgICB9Ci0gICAgaWYgPiBcJWkgNSBlbmQgMSB7Tm8gcmVzcG9uc2UgZnJvbSBob3N0fQot ICAgIHhpZiA9IFx2KG1pbnB1dCkgMSB7CSAgOyBIYXZlIHVzZXJuYW1lIHByb21wdAotCW91dHB1 dCBcJTFcMTMJCSAgOyBTZW5kIHVzZXJuYW1lCi0gICAgICAgIG1pbnB1dCA1IHtzc3dvcmQ6fSB7 c3N3b3JkIGZvciBcJTE6fSA7IFdhaXQgZm9yIHBhc3N3b3JkIHByb21wdAotCWlmIGZhaWwgZW5k IDEge05vIHBhc3N3b3JkIHByb21wdH0KLSAgICB9Ci0gICAgcGF1c2UgICAgICAgICAgICAgICAg ICAgICAgICAgOyBXYWl0IGEgc2VjCi0gICAgb3V0IFwlMlwxMyAgICAgICAgICAgICAgICAgICAg OyBTZW5kIHBhc3N3b3JkCi0gICAgaWYgbm90IGRlZiBcJTMgLSAgICAgICAgICAgICAgOyBJZiB3 ZSB3ZXJlIG5vdCBnaXZlbiBhIHByb21wdAotICAgICAgYXNnIFwlMyB7XHYocHJvbXB0KX0gICAg ICAgIDsgdXNlIHRoZSBTRVQgTE9HSU4gUFJPTVBUIHZhbHVlCi0gICAgaWYgbm90IGRlZiBcJTMg LSAgICAgICAgICAgICAgOyBJZiB3ZSBzdGlsbCBkb24ndCBoYXZlIGEgcHJvbXB0Ci0gICAgICBh c2cgXCUzIHtcMTAkIH0gICAgICAgICAgICAgOyB1c2UgdGhpcyBvbmUgYXMgdGhlIGRlZmF1bHQK LSAgICByZWlucCAwIFwlMyAgICAgICAgICAgICAgICAgICA7IERpZCB3ZSBJTlBVVCB0aGUgcHJv bXB0IGFscmVhZHk/Ci0gICAgaWYgZmFpbCBpbnAgNjAgXCUzICAgICAgICAgICAgOyBObywgbG9v ayBub3cuCi0gICAgaWYgZmFpbCBlbmQgMQotfQotCi1DT01NRU5UIC0gVk1MSU5FTE9HSU4gbWFj cm8uICBBcmd1bWVudHM6Ci07IFwlMSA9IFVzZXIgSUQKLTsgXCUyID0gUGFzc3dvcmQKLTsKLWRl ZmluZSBWTUxJTkVMT0dJTiB7Ci0gICAgaWYgPCBcdihhcmdjKSAyIC0KLSAgICAgIGVuZCAxIFVz YWdlOiBcJTAgdXNlcmlkIFsgcGFzc3dvcmQgXQotICAgIHdoaWxlIG5vdCBkZWZpbmVkIFwlMiB7 Ci0gICAgICAgIGFza3EgXCUyIHsgXCUxJ3MgcGFzc3dvcmQ6IH0KLSAgICB9Ci0gICAgc2V0IHBh cml0eSBtYXJrICAgICAgICAgICAgICAgOyBTZXQgY29tbXVuaWNhdGlvbiBwYXJhbWV0ZXJzCi0g ICAgc2V0IGZsb3cgbm9uZQotICAgIHNldCBoYW5kc2hha2UgeG9uCi0gICAgc2V0IGR1cGxleCBo YWxmCi0gICAgc2V0IGlucHV0IHRpbWVvdXQgcXVpdCAgICAgICAgOyBEb24ndCBib3RoZXIgd2l0 aCBJRiBGQUlMVVJFCi0gICAgaW5wdXQgMTAgQlJFQUsgS0VZICAgICAgICAgICAgOyBMb29rIGZv ciBCUkVBSyBLRVkgcHJvbXB0Ci0gICAgcGF1c2UgMSAgICAgICAgICAgICAgICAgICAgICAgOyBX YWl0IGEgc2Vjb25kCi0gICAgb3V0cHV0IFxCICAgICAgICAgICAgICAgICAgICAgOyBTZW5kIEJS RUFLCi0gICAgaW5wdXQgMTAgLlwxNywgb3V0cHV0IGxvZ29uIFwlMVwxMyAgICA7IE5vdyBsb2cg aW4KLSAgICBpbnB1dCAxMCAuXDE3LCBvdXRwdXQgXCUyXDEzICAgICAgICAgIDsgU2VuZCBwYXNz d29yZAotICAgIGlucHV0IDEwIC5cMTcsIG91dHB1dCBcMTMgICAgICAgICAgICAgOyBTZW5kIGNh cnJpYWdlIHJldHVybgotICAgIGlucHV0IDEwIC5cMTcsIG91dHB1dCBcMTMgICAgICAgICAgICAg OyBTZW5kIGFub3RoZXIgb25lCi0gICAgZW5kIDAKLX0KLQotQ09NTUVOVCAtIFZNRlVMTE9HSU4g bWFjcm8uICBBcmd1bWVudHM6Ci07IFwlMSA9IFVzZXIgSUQKLTsgXCUyID0gUGFzc3dvcmQKLTsK LWRlZmluZSBWTUZVTExPR0lOIHsKLSAgICBpZiA8IFx2KGFyZ2MpIDIgLQotICAgICAgZW5kIDEg VXNhZ2U6IFwlMCB1c2VyaWQgWyBwYXNzd29yZCBdCi0gICAgd2hpbGUgbm90IGRlZmluZWQgXCUy IHsKLSAgICAgICAgYXNrcSBcJTIgeyBcJTEncyBwYXNzd29yZDogfQotICAgIH0KLSAgICBzZXQg aW5wdXQgdGltZW91dCBxdWl0ICAgICAgOyBRdWl0IGlmIElOUFVUIGZhaWxzCi0gICAgc2V0IHBh cml0eSBldmVuICAgICAgICAgICAgIDsgU2V0IGNvbW11bmljYXRpb24gcGFyYW1ldGVycwotICAg IHNldCBkdXBsZXggZnVsbAotICAgIHNldCBoYW5kc2hha2Ugbm9uZQotICAgIHNldCBmbG93IHhv bi94b2ZmCi0gICAgb3V0IFwxMyAgICAgICAgICAgICAgICAgICAgIDsgU2VuZCBjYXJyaWFnZSBy ZXR1cm4KLSAgICBpbnAgNSBURVJNSU5BTCBUWVBFOiAgICAgICAgOyBHZXQgdGVybWluYWwtdHlw ZSBwcm9tcHQKLSAgICBvdXQgdnQtMTAwXDEzICAgICAgICAgICAgICAgOyBKdXN0IHNlbmQgInZ0 LTEwMCIKLSAgICBpbnAgMjAgUlVOTklORyAgICAgICAgICAgICAgOyBHZXQgUlVOTklORyBtZXNz YWdlCi0gICAgcGF1IDEgICAgICAgICAgICAgICAgICAgICAgIDsgV2FpdCBvbmUgc2Vjb25kCi0g ICAgb3V0IFwlMVw5XCUyXDEzICAgICAgICAgICAgIDsgU2VuZCB1c2VyIElELCB0YWIsIHBhc3N3 b3JkCi0gICAgb3V0IFwxM1wxMyAgICAgICAgICAgICAgICAgIDsgVHdvIG1vcmUgY2FycmlhZ2Ug cmV0dXJucwotICAgIGVuZCAwCi19Ci0KLUNPTU1FTlQgLSBDSVNMT0dJTiBtYWNyby4gIEFyZ3Vt ZW50czoKLTsgXCUxID0gQ29tcHVTZXJ2ZSBVc2VyIElECi07IFwlMiA9IFBhc3N3b3JkCi07IFwl MyA9IFByb21wdAotOwotZGVmaW5lIENJU0xPR0lOIHsKLSAgICBpZiA8IFx2KGFyZ2MpIDIgLQot ICAgICAgZW5kIDEgVXNhZ2U6IFwlMCB1c2VyaWQgWyBwYXNzd29yZCBbIHByb21wdCBdIF0KLSAg ICB3aGlsZSBub3QgZGVmaW5lZCBcJTIgewotICAgICAgICBhc2txIFwlMiB7IFwlMSdzIHBhc3N3 b3JkOiB9Ci0gICAgfQotICAgIHNldCB0ZXJtaW5hbCBieXRlc2l6ZSA3ICAgICA7IE5vIDgtYml0 IGNoYXJhY3RlcnMKLSAgICBzZXQgaW5wdXQgdGltZW91dCBxdWl0ICAgICAgOyBTa2lwIHRoZSBJ RiBGQUlMVVJFJ3MKLSAgICBvdXRwdXQgXDEzICAgICAgICAgICAgICAgICAgOyBTZW5kIGluaXRp YWwgY2FycmlhZ2UgcmV0dXJuCi0gICAgaW5wdXQgNSBIb3N0IE5hbWU6ICAgICAgICAgIDsgTG9v ayBmb3IgSG9zdCBOYW1lIHByb21wdAotICAgIG91dHB1dCBjaXNcMTMgICAgICAgICAgICAgICA7 IFNlbmQgImNpcyIgYW5kIGNhcnJpYWdlIHJldHVybgotICAgIGlucHV0IDUgVXNlciBJRDogICAg ICAgICAgICA7IExvb2sgZm9yIFVzZXIgSUQgcHJvbXB0Ci0gICAgb3V0cHV0IFwlMVwxMyAgICAg ICAgICAgICAgIDsgU2VuZCBJRCBhbmQgY2FycmlhZ2UgcmV0dXJuCi0gICAgaW5wdXQgUGFzc3dv cmQ6ICAgICAgICAgICAgIDsgTG9vayBmb3IgUGFzc3dvcmQgcHJvbXB0Ci0gICAgb3V0cHV0IFwl MlwxMyAgICAgICAgICAgICAgIDsgU2VuZCBwYXNzd29yZCBhbmQgQ1IKLSAgICBpZiBub3QgZGVm IFwlMyBhc2cgXCUzIFx2KHByb21wdCkKLSAgICBpZiBub3QgZGVmIFwlMyBhc2cgXCUzIHtDb21w dVNlcnZlIEluZm9ybWF0aW9uIFNlcnZpY2V9Ci0gICAgaW5wdXQgMzAgXCUzCi0gICAgZW5kIDAK LX0KLQotQ09NTUVOVCAtIERPV0xPR0lOIG1hY3JvLiAgQXJndW1lbnRzOgotOyBcJTEgPSBEb3cg Sm9uZXMgUGFzc3dvcmQKLTsKLWRlZmluZSBET1dMT0dJTiB7Ci0gICAgd2hpbGUgbm90IGRlZmlu ZWQgXCUxIHsgICAgICAgICAgICAgIDsgR2V0IHBhc3N3b3JkCi0gICAgICAgIGFza3EgXCUxIHsg RG93IEpvbmVzIHBhc3N3b3JkOiB9Ci0gICAgfQotICAgIHNldCBpbnB1dCB0aW1lb3V0IHByb2Nl ZWQKLSAgICBpbnB1dCAyMCBTRVJWSUNFIFBMRUFTRVw/XD9cP1w/ICAgICAgOyBMb29rIGZvciBE b3cgcHJvbXB0Ci0gICAgaWYgZmFpbCBlbmQgMSBObyBzZXJ2aWNlIHByb21wdAotICAgIG91dCBk am5yXDEzICAgICAgICAgICAgICAgICAgICAgICAgICA7IFNlbGVjdCBESk5SCi0gICAgaW5wdXQg MTAgQEBAQEBAQEAgICAgICAgICAgICAgICAgICAgICAgICA7IEdldCBwYXNzd29yZCBwcm9tcHQK LSAgICBpZiBmYWlsIGVuZCAxIE5vIHBhc3N3b3JkIHByb21wdAotICAgIHBhdXNlIDEgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7IFdhaXQgYSBzZWNvbmQsIHRoZW4uLi4KLSAgICBvdXRw dXQgXCUxXDEzICAgICAgICAgICAgICAgICAgICAgICAgOyBzZW5kIHBhc3N3b3JkIGFuZCBDUgot ICAgIGlucHV0IDMwIEVOVEVSIFFVRVJZICAgICAgICAgICAgICAgICA7IEdldCBESk5SIHF1ZXJ5 IHByb21wdAotICAgIGlmIGZhaWwgZW5kIDEgTm8gbWFpbiBxdWVyeSBwcm9tcHQKLSAgICBwYXVz ZSAxCi19Ci0KLUNPTU1FTlQgLSBESk5SU1BSSU5UIG1hY3JvOiBMb2cgaW4gdG8gRG93IEpvbmVz IHZpYSBTcHJpbnROZXQuCi07Ci1kZWYgZGpucnNwcmludCBzcHJpbnQgZG93LCBpZiBzdWNjZXNz IGRvd2xvZ2luCi0KLUNPTU1FTlQgLSBOT0xPR0lOIG1hY3JvLiAgRG9lcyBub3RoaW5nLiAgVXNl IHdoZW4gbG9naW4gbm90IHJlcXVpcmVkLgotOwotZGVmIG5vbG9naW4gY29tbWVudAotCi06Q1VT VE9NIDsgQ3VzdG9taXphdGlvbiBmaWxlCi0KLTsgSW4gVk1TIGFuZCBPcGVuVk1TLCBhbGxvdyBm b3Igc3lzdGVtLXdpZGUgc2l0ZSBjdXN0b21pemF0aW9ucwotCi14aWYgZXF1YWwgIlx2KHN5c3Rl bSkiICJWTVMiIHsKLSAgICB4aWYgZXhpc3QgQ0tFUk1JVF9JTkk6Q0tFUk1JVC5TWVMgewotCWVj aG8gRXhlY3V0aW5nIENLRVJNSVRfSU5JOkNLRVJNSVQuU1lTCi0JdGFrZSBDS0VSTUlUX0lOSTpD S0VSTUlULlNZUwotICAgIH0KLX0KLQotOyBFeGVjdXRlIHVzZXIncyBwZXJzb25hbCBjdXN0b21p emF0aW9uIGZpbGUKLQoteGlmIGV4aXN0IFxtKF9teWluaXQpICB7CQk7IElmIGl0IGV4aXN0cywK LSAgICBlY2hvIEV4ZWN1dGluZyBcbShfbXlpbml0KS4uLgk7IHByaW50IG1lc3NhZ2UsCi0gICAg dGFrZSBcbShfbXlpbml0KQkJCTsgYW5kIFRBS0UgdGhlIGZpbGUuCi19Ci0KLTsgRmluaXNoIHVw IHdpdGggdHJhZGl0aW9uYWwgZ3JlZXRpbmcuCi0KLWlmIDwgXHYobnRpbWUpIDQzMjAwIGVjaG8g R29vZCBNb3JuaW5nIQotICBlbHNlIGlmIDwgXHYobnRpbWUpIDYxMjAwIGVjaG8gR29vZCBBZnRl cm5vb24hCi0gIGVsc2UgZWNobyBHb29kIEV2ZW5pbmcuCi0KLUVuZCA7IG9mIEMtS2VybWl0IDgu MCBpbml0aWFsaXphdGlvbiBmaWxlLgoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWls ZC9ja2VybWl0LTkuMC4zMDIvb2NrZXJtb2QuaW5pIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2Nr ZXJtaXQtOS4wLjMwMi9vY2tlcm1vZC5pbmkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDU4NDhjM2YuLjAwMDAwMDAKLS0tIGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4w LjMwMi9vY2tlcm1vZC5pbmkKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotOyBGaWxl IENLRVJNT0QuSU5JLCBTYW1wbGUgQy1LZXJtaXQgNy4wIGN1c3RvbWl6YXRpb24gZmlsZS4KLTsK LTsgVGhpcyBmaWxlLCB3aGljaCBpcyBPTkxZIEEgU0FNUExFLCBzaG91bGQgYmUgY2FsbGVkOgot OwotOyAgIC5teWtlcm1yYyAgIChVTklYLCBPUy05LCBBZWdpcywgQmVCb3gsIFBsYW4gOSkKLTsg ICBDS0VSTU9ELklOSSAoVk1TLCBPcGVuVk1TLCBBT1MvVlMsIE9TLzIsIEFtaWdhLCBBdGFyaSBT VCkKLTsgICBja2VybW9kLmluaSAoU3RyYXR1cyBWT1MpCi07Ci07IFRoaXMgZmlsZSBpcyBleGVj dXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBzdGFuZGFyZCBDLUtlcm1pdCBpbml0aWFsaXphdGlv bgotOyBmaWxlLCBDS0VSTUlULklOSSAob3IgLmtlcm1yYykuICBUaGlzIGZpbGUgaXMgbm90IGV4 ZWN1dGVkIGJ5IEMtS2VybWl0IGl0c2VsZgotOyB1bmxlc3MgdGhlIGluaXRpYWxpemF0aW9uIGZp bGUgaXMgbm90IGZvdW5kLgotOwotOyBNT0RpZnkgdGhpcyBmaWxlIHRvIHN1aXQgeW91ciBuZWVk cyBhbmQgcHJlZmVyZW5jZXMsIGFuZCBpbnN0YWxsIGl0IGluIHlvdXIKLTsgaG9tZSBkaXJlY3Rv cnkuICBPciByZXBsYWNlIGl0IGVudGlyZWx5IHdpdGggYSBuZXcgZmlsZS4KLTsKLTsgVGhlIGRl c2lnbiBvZiB0aGlzIHNhbXBsZSBjdXN0b21pemF0aW9uIGZpbGUgbGV0cyB5b3UgZmlsbCBpbiBh IHNlY3Rpb24gZm9yCi07IGVhY2ggZGlmZmVyZW50IG9wZXJhdGluZyBzeXN0ZW0gd2hlcmUgeW91 IHJ1biBDLUtlcm1pdC4KLTsKLTsgSW4gVU5JWCwgaWYgeW91IGdpdmUgdGhpcyBmaWxlIGV4ZWN1 dGUgcGVybWlzc2lvbiBhbmQgbWFrZSBzdXJlIHRoZSB0b3AKLTsgbGluZSBpbmRpY2F0ZXMgdGhl IGZ1bGwgcGF0aCBvZiB0aGUgQy1LZXJtaXQgNy4wLW9yLWxhdGVyIGV4ZWN1dGFibGUsIHlvdQot OyBjYW4gZXhlY3V0ZSB0aGlzIGZpbGUgZGlyZWN0bHksIGFzIGlmIGl0IHdhcyBhIHNoZWxsIHNj cmlwdCwgZXhjZXB0IGl0IGlzCi07IGludGVycHJldGVkIGJ5IEtlcm1pdCByYXRoZXIgdGhhbiB0 aGUgc2hlbGwuICBUaGlzIGxldHMgeW91IGhhdmUgYXMgbWFueQotOyBkaWZmZXJlbnQgc3RhcnR1 cCBmaWxlcyBhcyB5b3UgbGlrZSwgZWFjaCBzdWl0ZWQgdG8gYSBwYXJ0aWN1bGFyIHB1cnBvc2Uu Ci07Ci07IEF1dGhvcnM6ICBDaHJpc3RpbmUgR2lhbm9uZSwgRnJhbmsgZGEgQ3J1eiwgSmVmZnJl eSBBbHRtYW4sCi07ICAgICAgICAgICBUaGUgS2VybWl0IFByb2plY3QsIENvbHVtYmlhIFVuaXZl cnNpdHkuCi07IENyZWF0aW9uOiAyMyBOb3ZlbWJlciAxOTkyIGZvciBDLUtlcm1pdCA1QSgxODgp LgotOyBNb2RpZmllZDogMzAgSnVuZSAxOTkzIGZvciBlZGl0IDE4OS4KLTsgICAgICAgICAgIDA0 IE9jdG9iZXIgMTk5NCBmb3IgZWRpdCAxOTAuCi07ICAgICAgICAgICAxNyBBcHJpbCAxOTk1IGZv ciBlZGl0IDE5MS4KLTsgICAgICAgICAgICA2IFNlcHRlbWJlciAxOTk2IGZvciB2ZXJzaW9uIDYu MCwgZWRpdCAxOTIuCi07ICAgICAgICAgICAgMSBKYW51YXJ5IDIwMDAgZm9yIHZlcnNpb24gNy4w LCBlZGl0IDE5Ni4KLTsgICAgICAgICAgIDE0IE9jdG9iZXIgMjAwMSBmb3IgdmVyc2lvbiA4LjAs IGVkaXQgMjAwLgotCi1FQ0hPCi1FQ0hPIEV4ZWN1dGluZyBTQU1QTEUgQy1LZXJtaXQgY3VzdG9t aXphdGlvbiBmaWxlIFx2KGNtZGZpbGUpIGZvciBcdihzeXN0ZW0pLi4uCi1FQ0hPIHsgUGxlYXNl IGVkaXQgdGhpcyBmaWxlIHRvIHJlZmxlY3QgeW91ciBuZWVkcyBhbmQgcHJlZmVyZW5jZXMufQot RUNITwotOwotOyAuLi4gYW5kIHRoZW4gcmVtb3ZlIHRoZSBFQ0hPIGNvbW1hbmRzIGFib3ZlLgot Ci1DT01NRU5UIC0gU2V0dGluZ3MgdGhhdCBhcHBseSB0byBhbGwgdGhlIHN5c3RlbXMgSSB1c2U6 Ci07Ci1zZXQgZGVsYXkgMSAgICAgICAgICAgICAgICAgIDsgSSBlc2NhcGUgYmFjayBxdWlja2x5 Ci1zZXQgZGlhbCBkaXNwbGF5IG9uICAgICAgICAgIDsgSSBsaWtlIHRvIHdhdGNoIEMtS2VybWl0 IGRpYWwKLQotOyBEaWFsaW5nIGxvY2FsZSBhbmQgbWV0aG9kCi07Ci07IFNFVCBESUFMIENPVU5U UlktQ09ERSAxICAgIDsgVW5jb21tZW50IGFuZCByZXBsYWNlIHdpdGggeW91cnMKLTsgU0VUIERJ QUwgQVJFQS1DT0RFIDAwMCAgICAgOyBVbmNvbW1lbnQgYW5kIHJlcGxhY2Ugd2l0aCB5b3Vycwot OyBTRVQgRElBTCBMRC1QUkVGSVggMSAgICAgICA7IFVuY29tbWVudCBhbmQgcmVwbGFjZSB3aXRo IHlvdXJzCi07IFNFVCBESUFMIElOVEwtUFJFRklYIDAxMSAgIDsgVW5jb21tZW50IGFuZCByZXBs YWNlIHdpdGggeW91cnMKLTsgU0VUIERJQUwgTUVUSE9EIFRPTkUgICAgICAgOyBVbmNvbW1lbnQg YW5kIHJlcGxhY2Ugd2l0aCBQVUxTRSBpZiBuZWNlc3NhcnkKLTsgU0VUIERJQUwgRElSRUNUT1JZ IC4uLiAuLi4gOyBMaXN0IGRpYWxpbmcgZGlyZWN0b3J5IGZpbGVzIGhlcmUKLQotaWYgPCBcdih2 ZXJzaW9uKSA2MDAxOTIgLQotICBzdG9wIDEgXHYoY21kZmlsZSk6IEMtS2VybWl0IDYuMC4xOTIg b3IgbGF0ZXIgcmVxdWlyZWQuCi0KLXNldCB0YWtlIGVycm9yIG9uICAgICAgICAgICAgOyBNYWtl IGVycm9ycyBmYXRhbCB0ZW1wb3JhcmlseQotY2hlY2sgaWYgICAgICAgICAgICAgICAgICAgICA7 IERvIHdlIGhhdmUgYW4gSUYgY29tbWFuZD8KLXNldCB0YWtlIGVycm9yIG9mZiAgICAgICAgICAg OyBZZXMgd2UgZG8sIGJhY2sgdG8gbm9ybWFsCi0KLTsgVGhlIE9OX0VYSVQgbWFjcm8gaXMgZXhl Y3V0ZWQgYXV0b21hdGljYWxseSB3aGVuIEMtS2VybWl0IGV4aXRzLgotOyBEZWZpbmUgYXMgZGVz aXJlZC4KLTsKLWRlZmluZSBPTl9FWElUIGVjaG8gUmV0dXJuaW5nIHlvdSB0byBcdihzeXN0ZW0p IG5vdy4KLQotOyBTeXN0ZW0taW5kZXBlbmRlbnQgcXVpY2sgZGlhbGluZyBtYWNyby4gIERlcGVu ZHMgb24gaGF2aW5nIHRoZQotOyBtYWNyb3MgTVlNT0RFTSwgTVlQT1JULCBhbmQgKG9wdGlvbmFs bHkpIE1ZU1BFRUQgZGVmaW5lZCBpbiB0aGUKLTsgc3lzdGVtLWRlcGVuZGVudCBzZWN0aW9ucyBi ZWxvdy4KLTsKLWRlZmluZSBNWURJQUwgewotICAgIGlmIG5vdCBkZWZpbmVkIE1ZTU9ERU0gZW5k IDEge1wlMDogTW9kZW0gdHlwZSBub3QgZGVmaW5lZC59Ci0gICAgc2V0IG1vZGVtIHR5cGUgXG0o TVlNT0RFTSkKLSAgICBpZiBmYWlsIGVuZCAxIHtcJTA6IFxtKE1ZTU9ERU0pOiBVbnN1cHBvcnRl ZCBtb2RlbSB0eXBlLn0KLSAgICBpZiBub3QgZGVmaW5lZCBNWVBPUlQgZW5kIDEge1wlMDogQ29t bXVuaWNhdGlvbiBwb3J0IG5vdCBkZWZpbmVkLn0KLSAgICBzZXQgcG9ydCBcbShNWVBPUlQpCi0g ICAgaWYgZmFpbCBlbmQgMSB7XCUwOiBTRVQgUE9SVCBcbShNWVBPUlQpIGZhaWxlZC59Ci0gICAg aWYgZGVmaW5lZCBNWUZMT1cgc2V0IGZsb3cgXG0oTVlGTE9XKQotICAgIGlmIGZhaWwgZW5kIDEg e1wlMDogU0VUIEZMT1cgXG0oTVlGTE9XKSBmYWlsZWQufQotICAgIGlmIGRlZmluZWQgTVlTUEVF RCBzZXQgc3BlZWQgXG0oTVlTUEVFRCkKLSAgICBpZiBmYWlsIGVuZCAxIHtcJTA6IFNFVCBTUEVF RCBcbShNWVNQRUVEKSBmYWlsZWQufQotICAgIGRpYWwgXCUxXCUyXCUzXCU0XCU1XCU2XCU3XCU4 XCU5Ci0gICAgZW5kIFx2KHN0YXR1cykKLX0KLQotZm9yd2FyZCBcdihzeXN0ZW0pICAgICAgICAg ICAgICA7IEdvIGV4ZWN1dGUgc3lzdGVtLWRlcGVuZGVudCBjb21tYW5kcwotCi06VU5JWCAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsgVU5JWCwgYWxsIHZlcnNpb25zLi4uCi1kZWZpbmUgTVlQ T1JUIC9kZXYvY3VhICAgICAgICAgIDsgTXkgZGlhbGluZyBlbnZpcm9ubWVudAotZGVmaW5lIE1Z TU9ERU0gdXNyICAgICAgICAgICAgICA7IFJlcGxhY2UgdGhlc2UgYnkgd2hhdCB5b3UgYWN0dWFs bHkgaGF2ZQotZGVmaW5lIE1ZU1BFRUQgNTc2MDAKLTsKLTsgSWYgeW91IHdhbnQgYWxsIHlvdXIg ZG93bmxvYWRzIHRvIGdvIHRvIHRoZSBzYW1lIGRpcmVjdG9yeSwgbm8gbWF0dGVyCi07IHdoYXQg eW91ciBjdXJyZW50IGRpcmVjdG9yeSBpcywgdW5jb21tZW50IGFuZCBlZGl0IHRoZSBmb2xsb3dp bmcgY29tbWFuZDoKLTsKLTsgICBzZXQgZmlsZSBkb3dubG9hZC1kaXJlY3Rvcnkgfi9kb3dubG9h ZCA7IERvd25sb2FkIGRpcmVjdG9yeSBmb3IgVU5JWAotCi07IFB1dCBvdGhlciBVTklYLXNwZWNp ZmljIGNvbW1hbmRzIGhlcmUuLi4KLWVuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBF bmQgb2YgVU5JWCBzZWN0aW9uCi0KLTpWTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBW TVMgYW5kIE9wZW5WTVMKLWRlZmluZSBNWVBPUlQgVFhBMDogICAgICAgICAgICAgOyBNeSBkaWFs aW5nIGVudmlyb25tZW50Ci1kZWZpbmUgTVlNT0RFTSB1c3IgICAgICAgICAgICAgIDsgUmVwbGFj ZSB0aGVzZSBieSB3aGF0IHlvdSBhY3R1YWxseSBoYXZlCi1kZWZpbmUgTVlTUEVFRCA1NzYwMAot OyBzZXQgZmlsZSBkb3dubG9hZC1kaXJlY3RvcnkgW1wkKFVTRVIpLkRPV05MT0FEXSA7IERvd25s b2FkIGRpcmVjdG9yeSBmb3IgVk1TCi07IFB1dCBvdGhlciBWTVMtc3BlY2lmaWMgY29tbWFuZHMg aGVyZS4uLgotZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IEVuZCBvZiBWTVMgc2Vj dGlvbgotCi06V0lOMzIgICAgICAgICAgICAgICAgICAgICAgICAgIDsgV2luZG93cyBhbmQgT1Mv MiBjdXN0b21pemF0aW9ucy4uLgotOk9TLzIKLWRlZmluZSBNWVBPUlQgQ09NMSAgICAgICAgICAg ICAgOyBNeSBkaWFsaW5nIGVudmlyb25tZW50Ci1kZWZpbmUgTVlNT0RFTSB1c3IgICAgICAgICAg ICAgIDsgUmVwbGFjZSB0aGVzZSBieSB3aGF0IHlvdSBhY3R1YWxseSBoYXZlCi1kZWZpbmUgTVlT UEVFRCA1NzYwMAotc2V0IGNvbW1hbmQgYnl0ZSA4ICAgICAgICAgICAgICA7IFVzZSA4IGJpdHMg YmV0d2VlbiBLZXJtaXQgYW5kIGNvbnNvbGUKLXNldCB4ZmVyIGNoYXIgbGF0aW4xICAgICAgICAg ICAgOyBVc2UgTGF0aW4tMSBmb3IgdGV4dCBmaWxlIHRyYW5zZmVyCi1zZXQgdGVybSBjaGFyIGxh dGluMSAgICAgICAgICAgIDsgQW5kIHVzZSBMYXRpbi0xIGR1cmluZyBDT05ORUNUIG1vZGUKLTsg c2V0IGZpbGUgZG93bmxvYWQtZGlyZWN0b3J5IEM6XERPV05MT0FEUwotZW5kCi0KLTpPUzkvNjhL ICAgICAgICAgICAgICAgICAgICAgICAgOyBPUy05LzY4MDAwCi1kZWZpbmUgTVlQT1JUIC90MyAg ICAgICAgICAgICAgIDsgTXkgZGlhbGluZyBlbnZpcm9ubWVudAotZGVmaW5lIE1ZTU9ERU0gdXNy ICAgICAgICAgICAgICA7IFJlcGxhY2UgdGhlc2UgYnkgd2hhdCB5b3UgYWN0dWFsbHkgaGF2ZQot ZGVmaW5lIE1ZU1BFRUQgOTYwMAotOyBzZXQgZmlsZSBkb3dubG9hZC1kaXJlY3Rvcnkgfi9kb3du bG9hZHMKLWVuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBFbmQgb2YgT1MtOSBzZWN0 aW9uCi0KLTpBT1MvVlMgICAgICAgICAgICAgICAgICAgICAgICAgOyBEYXRhIEdlbmVyYWwgQU9T L1ZTCi1kZWZpbmUgTVlQT1JUIEBjb24zICAgICAgICAgICAgIDsgTXkgZGlhbGluZyBlbnZpcm9u bWVudAotZGVmaW5lIE1ZTU9ERU0gdXNyICAgICAgICAgICAgICA7IFJlcGxhY2UgdGhlc2UgYnkg d2hhdCB5b3UgYWN0dWFsbHkgaGF2ZQotZGVmaW5lIE1ZU1BFRUQgOTYwMAotOyBzZXQgZmlsZSBk b3dubG9hZC1kaXJlY3RvcnkgXHYoaG9tZSlET1dOTE9BRFMKLWVuZAotCi07IEFuZCBzbyBvbiwg eW91IGdldCB0aGUgaWRlYS4uLgotOyBGaWxsIGluIHRoZSBzZWN0aW9ucyB0aGF0IGFwcGx5IHRv IHlvdS4KLQotOlN0cmF0dXNfVk9TCQkJOyBTdHJhdHVzIFZPUwotOkFtaWdhICAgICAgICAgICAg ICAgICAgICAgICAgICA7IENvbW1vZG9yZSBBbWlnYQotOkF0YXJpX1NUICAgICAgICAgICAgICAg ICAgICAgICA7IEF0YXJpIFNUCi06TWFjaW50b3NoICAgICAgICAgICAgICAgICAgICAgIDsgQXBw bGUgTWFjaW50b3NoCi06dW5rbm93biAgICAgICAgICAgICAgICAgICAgICAgIDsgT3RoZXJzCi0K LTsgKEVuZCBvZiBDS0VSTU9ELklOSSkK